summaryrefslogtreecommitdiff
path: root/macros/generic
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic')
-rw-r--r--macros/generic/2up/2up-doc.pdfbin0 -> 63111 bytes
-rw-r--r--macros/generic/2up/2up-doc.tex502
-rw-r--r--macros/generic/2up/2up.sty9
-rw-r--r--macros/generic/2up/2up.tex363
-rw-r--r--macros/generic/2up/Changes9
-rw-r--r--macros/generic/2up/Makefile72
-rw-r--r--macros/generic/2up/README9
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/README34
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdfbin0 -> 206964 bytes
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex673
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/fountain.eps302
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/gdansk.eps112
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/rules.tex6
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat23
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample1.tex56
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample2.tex74
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample3.tex31
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/sample4.tex48
-rw-r--r--macros/generic/TeX-PS/cmyk-hax/screen.eps1150
-rw-r--r--macros/generic/TeX-PS/epsfx.tex412
-rw-r--r--macros/generic/TeX-PS/mirr.hd32
-rw-r--r--macros/generic/TeX-PS/poligraf/README121
-rw-r--r--macros/generic/TeX-PS/poligraf/crops.pro196
-rw-r--r--macros/generic/TeX-PS/poligraf/kol-cmyk.eps208
-rw-r--r--macros/generic/TeX-PS/poligraf/poligraf.sty101
-rw-r--r--macros/generic/TeX-PS/poligraf/sample.tex50
-rw-r--r--macros/generic/TeX-PS/poligraf/samplelx.tex64
-rw-r--r--macros/generic/TeX-PS/poligraf/separate.pro144
-rw-r--r--macros/generic/TeX-PS/trans.tex653
-rw-r--r--macros/generic/abbr/README24
-rw-r--r--macros/generic/abbr/abbr.tex238
-rw-r--r--macros/generic/apnum/README29
-rw-r--r--macros/generic/apnum/apnum.d2918
-rw-r--r--macros/generic/apnum/apnum.pdfbin0 -> 720414 bytes
-rw-r--r--macros/generic/apnum/apnum.tex1203
-rw-r--r--macros/generic/arrayjobx/README29
-rw-r--r--macros/generic/arrayjobx/arrayjob.pdfbin0 -> 463847 bytes
-rw-r--r--macros/generic/arrayjobx/arrayjob.sty188
-rw-r--r--macros/generic/arrayjobx/arrayjob.tex2097
-rw-r--r--macros/generic/arrayjobx/arrayjobx.pdfbin0 -> 464034 bytes
-rw-r--r--macros/generic/arrayjobx/arrayjobx.sty192
-rw-r--r--macros/generic/arrayjobx/arrayjobx.tex2096
-rw-r--r--macros/generic/autoaligne/README31
-rw-r--r--macros/generic/autoaligne/autoaligne-fr.pdfbin0 -> 354987 bytes
-rw-r--r--macros/generic/autoaligne/autoaligne-fr.tex266
-rw-r--r--macros/generic/autoaligne/autoaligne.sty7
-rw-r--r--macros/generic/autoaligne/autoaligne.tex328
-rw-r--r--macros/generic/bagpipe/BlackDonald.pdfbin0 -> 26762 bytes
-rw-r--r--macros/generic/bagpipe/BlackDonald.tex434
-rw-r--r--macros/generic/bagpipe/Bonnets.pdfbin0 -> 23105 bytes
-rw-r--r--macros/generic/bagpipe/Bonnets.tex110
-rw-r--r--macros/generic/bagpipe/Green.pdfbin0 -> 18026 bytes
-rw-r--r--macros/generic/bagpipe/Green.tex61
-rw-r--r--macros/generic/bagpipe/GreenTwo.pdfbin0 -> 23155 bytes
-rw-r--r--macros/generic/bagpipe/GreenTwo.tex85
-rw-r--r--macros/generic/bagpipe/README47
-rw-r--r--macros/generic/bagpipe/Washer.pdfbin0 -> 23728 bytes
-rw-r--r--macros/generic/bagpipe/Washer.tex135
-rw-r--r--macros/generic/bagpipe/bagdoc.pdfbin0 -> 50353 bytes
-rw-r--r--macros/generic/bagpipe/bagdoc.tex563
-rw-r--r--macros/generic/bagpipe/bagpipe.ini3
-rw-r--r--macros/generic/bagpipe/bagpipe.tex1680
-rw-r--r--macros/generic/bagpipe/bagpipex.ini4
-rw-r--r--macros/generic/bagpipe/quickref.pdfbin0 -> 54872 bytes
-rw-r--r--macros/generic/bagpipe/quickref.tex227
-rw-r--r--macros/generic/basix/basix.tex474
-rw-r--r--macros/generic/basix/paper.tex533
-rw-r--r--macros/generic/bitelist/README64
-rw-r--r--macros/generic/bitelist/SrcFILEs.txt11
-rw-r--r--macros/generic/bitelist/bitedemo.tex43
-rw-r--r--macros/generic/bitelist/bitelist.pdfbin0 -> 405448 bytes
-rw-r--r--macros/generic/bitelist/bitelist.sty240
-rw-r--r--macros/generic/bitelist/docsrc/bitelist.tex319
-rw-r--r--macros/generic/bitelist/docsrc/srcfiles.tex15
-rw-r--r--macros/generic/boxedart4mac/BoxedArt.cpt.hqx1008
-rw-r--r--macros/generic/boxedart4mac/ReadMe_BoxedArt21
-rw-r--r--macros/generic/boxedeps/ReadMe.boxedeps26
-rw-r--r--macros/generic/boxedeps/bb.ps557
-rw-r--r--macros/generic/boxedeps/bb4gs.ps596
-rw-r--r--macros/generic/boxedeps/boxedeps.cfg70
-rw-r--r--macros/generic/boxedeps/boxedeps.doc1242
-rw-r--r--macros/generic/boxedeps/boxedeps.doc-old1107
-rw-r--r--macros/generic/boxedeps/boxedeps.sty78
-rw-r--r--macros/generic/boxedeps/boxedeps.tex1042
-rw-r--r--macros/generic/boxedeps/boxedeps.tex-old861
l---------macros/generic/boxedeps/boxedeps.txt1
-rw-r--r--macros/generic/boxedeps/gdisk.eps14
-rw-r--r--macros/generic/boxedeps/rose.eps811
-rw-r--r--macros/generic/boxedeps/rosetest.tex19
-rw-r--r--macros/generic/c_pascal/README.eng112
-rw-r--r--macros/generic/c_pascal/README.pol94
-rw-r--r--macros/generic/c_pascal/cap.tex3
-rw-r--r--macros/generic/c_pascal/cap_c.tex181
-rw-r--r--macros/generic/c_pascal/cap_comm.tex257
-rw-r--r--macros/generic/c_pascal/cap_pas.tex166
-rw-r--r--macros/generic/c_pascal/cap_pyt.tex171
-rw-r--r--macros/generic/c_pascal/demo1.tex42
-rw-r--r--macros/generic/c_pascal/demo2.tex90
-rw-r--r--macros/generic/c_pascal/prog/fib.py27
-rw-r--r--macros/generic/c_pascal/prog/guess.pas26
-rw-r--r--macros/generic/c_pascal/prog/sun.c39
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/00files.txt43
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.300pk_vve223
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.329pk_vve238
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.360pk_vve260
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.432pk_vve310
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.518pk_vve369
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.622pk_vve451
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.746pk_vve545
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm-uu44
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm_vve67
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.300pk_vve251
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.329pk_vve270
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.360pk_vve295
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.432pk_vve355
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.518pk_vve423
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.622pk_vve521
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.746pk_vve630
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm-uu49
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm_vve72
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.300pk_vve260
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.329pk_vve293
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.360pk_vve309
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.432pk_vve381
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.518pk_vve446
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.622pk_vve560
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.746pk_vve678
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm-uu49
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm_vve72
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/dodo-pk.uu7
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.pl19
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm-uu7
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm_vve30
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/excm-fonts.readme269
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/excm-pk.dir_vve49
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/readme10
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm-uu44
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm_vve67
-rw-r--r--macros/generic/caesarcm/caesar-fonts-generic.dir/v2update.readme38
-rw-r--r--macros/generic/caesarcm/caesarcmfonts.dir/00files.txt16
-rw-r--r--macros/generic/caesarcm/caesarcmfonts.dir/excm-oz-metrics-v2-cpt.hqx137
-rw-r--r--macros/generic/caesarcm/caesarcmfonts.dir/excm-oztex-pk-cpt.hqx7086
-rw-r--r--macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v1to2update-cpt.hqx91
-rw-r--r--macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2-cpt.hqx10170
-rw-r--r--macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2.readme22
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/caesarcm.doc961
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/caesarcm.tex850
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/caestest.tex297
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/csteaser.doc323
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.ck91
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.src1119
-rw-r--r--macros/generic/caesarcm/caesarcmv2.dir/xadobetextures.pub96
-rw-r--r--macros/generic/catcodes/README63
-rw-r--r--macros/generic/catcodes/doc/SrcFILEs.txt14
-rw-r--r--macros/generic/catcodes/doc/catcodes.RLS4
-rw-r--r--macros/generic/catcodes/doc/catcodes.pdfbin0 -> 541845 bytes
-rw-r--r--macros/generic/catcodes/docsrc/catcodes.tex204
-rw-r--r--macros/generic/catcodes/docsrc/fdatechk.tex14
-rw-r--r--macros/generic/catcodes/docsrc/makedoc.cfg150
-rw-r--r--macros/generic/catcodes/docsrc/mdoccorr.cfg61
-rw-r--r--macros/generic/catcodes/docsrc/srcfiles.tex20
-rw-r--r--macros/generic/catcodes/use/actcodes.sty147
-rw-r--r--macros/generic/catcodes/use/catchdq.sty142
-rw-r--r--macros/generic/catcodes/use/stacklet.sty123
-rw-r--r--macros/generic/chemfig/README32
-rw-r--r--macros/generic/chemfig/chemfig-en.pdfbin0 -> 1075975 bytes
-rw-r--r--macros/generic/chemfig/chemfig-en.tex2842
-rw-r--r--macros/generic/chemfig/chemfig-fr.pdfbin0 -> 1101807 bytes
-rw-r--r--macros/generic/chemfig/chemfig-fr.tex2842
-rw-r--r--macros/generic/chemfig/chemfig.sty7
-rw-r--r--macros/generic/chemfig/chemfig.tex2846
-rw-r--r--macros/generic/chemfig/chemfigold.tex2835
-rw-r--r--macros/generic/chemfig/t-chemfig.tex5
-rw-r--r--macros/generic/code128/README21
-rw-r--r--macros/generic/code128/code128.tex360
-rw-r--r--macros/generic/code128/test128.tex110
-rw-r--r--macros/generic/colortab/Changes5
-rw-r--r--macros/generic/colortab/Makefile71
-rw-r--r--macros/generic/colortab/colortab-doc.pdfbin0 -> 62039 bytes
-rw-r--r--macros/generic/colortab/colortab-doc.tex372
-rw-r--r--macros/generic/colortab/colortab.sty10
-rw-r--r--macros/generic/colortab/colortab.tex669
-rw-r--r--macros/generic/commado/README67
-rw-r--r--macros/generic/commado/commado.sty90
-rw-r--r--macros/generic/commado/doc/SrcFILEs.txt19
-rw-r--r--macros/generic/commado/doc/commado.RLS4
-rw-r--r--macros/generic/commado/doc/commado.pdfbin0 -> 594760 bytes
-rw-r--r--macros/generic/commado/docsrc/commado.tex205
-rw-r--r--macros/generic/commado/docsrc/srcfiles.tex19
-rw-r--r--macros/generic/commado/filesdo.sty55
-rw-r--r--macros/generic/cptex/btex8fmt/fmt.bat21
-rw-r--r--macros/generic/cptex/btex8fmt/fmt.cmd21
-rw-r--r--macros/generic/cptex/btex8fmt/gfmt.bat29
-rw-r--r--macros/generic/cptex/btex8fmt/gfmt.cmd29
-rw-r--r--macros/generic/cptex/btex8fmt/gslifmt.bat23
-rw-r--r--macros/generic/cptex/btex8fmt/gslifmt.cmd23
-rw-r--r--macros/generic/cptex/btex8fmt/slifmt.bat19
-rw-r--r--macros/generic/cptex/btex8fmt/slifmt.cmd19
-rw-r--r--macros/generic/cptex/cp.sty598
-rw-r--r--macros/generic/cptex/cp.tex36
-rw-r--r--macros/generic/cptex/cp437.sty252
-rw-r--r--macros/generic/cptex/cp850.sty119
-rw-r--r--macros/generic/cptex/cp8859.sty140
-rw-r--r--macros/generic/cptex/cp8859w.sty68
-rw-r--r--macros/generic/cptex/cpdoc.dvibin0 -> 13964 bytes
-rw-r--r--macros/generic/cptex/cpdoc.tex203
-rw-r--r--macros/generic/cptex/cpps.sty56
-rw-r--r--macros/generic/cptex/cpps.tex12
-rw-r--r--macros/generic/cptex/cptable.ps1243
-rw-r--r--macros/generic/cptex/lamac.tex90
-rw-r--r--macros/generic/cptex/tex8.bat17
-rw-r--r--macros/generic/cptex/tex8.sed4
-rw-r--r--macros/generic/cptex/tex8fmts/fmt.bat21
-rw-r--r--macros/generic/cptex/tex8fmts/fmt.cmd21
-rw-r--r--macros/generic/cptex/tex8fmts/gfmt.bat29
-rw-r--r--macros/generic/cptex/tex8fmts/gfmt.cmd29
-rw-r--r--macros/generic/cptex/tex8fmts/gslifmt.bat23
-rw-r--r--macros/generic/cptex/tex8fmts/gslifmt.cmd23
-rw-r--r--macros/generic/cptex/tex8fmts/slifmt.bat19
-rw-r--r--macros/generic/cptex/tex8fmts/slifmt.cmd19
-rw-r--r--macros/generic/cropmark/cropmark.sty94
-rw-r--r--macros/generic/cropmark/croptest.tex44
-rw-r--r--macros/generic/diagrams/borceux/README23
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldDiagram291
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram209
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMicroDiagram90
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMiniDiagram107
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMultipleArrows49
-rw-r--r--macros/generic/diagrams/borceux/diagram/Diagram8973
-rw-r--r--macros/generic/diagrams/borceux/diagram/MaxiDiagram10213
-rw-r--r--macros/generic/diagrams/borceux/diagram/MicroDiagram1917
-rw-r--r--macros/generic/diagrams/borceux/diagram/MiniDiagram3164
-rw-r--r--macros/generic/diagrams/borceux/diagram/MultipleArrows1313
-rw-r--r--macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi588
-rw-r--r--macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me579
-rw-r--r--macros/generic/diagrams/circ/COPYING340
-rw-r--r--macros/generic/diagrams/circ/Makefile115
-rw-r--r--macros/generic/diagrams/circ/README22
-rw-r--r--macros/generic/diagrams/circ/circ.dtx6053
-rw-r--r--macros/generic/diagrams/circ/circ.ins19
-rw-r--r--macros/generic/diagrams/circ/circ.pdfbin0 -> 273283 bytes
-rw-r--r--macros/generic/diagrams/circ/circ.txt11
l---------macros/generic/diagrams/circuit1
-rw-r--r--macros/generic/diagrams/dcpic/README9
-rw-r--r--macros/generic/diagrams/dcpic/dcpic.sty1412
-rw-r--r--macros/generic/diagrams/dcpic/europroc.cls332
-rw-r--r--macros/generic/diagrams/dcpic/eurotex2001.pdfbin0 -> 197271 bytes
-rw-r--r--macros/generic/diagrams/dcpic/eurotex2001.tex916
-rw-r--r--macros/generic/diagrams/dcpic/examples.pdfbin0 -> 221190 bytes
-rw-r--r--macros/generic/diagrams/dcpic/examples.tex776
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiC.pdfbin0 -> 287676 bytes
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiC.tex723
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiCpt.pdfbin0 -> 297287 bytes
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiCpt.tex846
-rw-r--r--macros/generic/diagrams/diagxy/README8
-rw-r--r--macros/generic/diagrams/diagxy/diagxy.tex1259
-rw-r--r--macros/generic/diagrams/diagxy/diaxydoc.pdfbin0 -> 398133 bytes
-rw-r--r--macros/generic/diagrams/diagxy/diaxydoc.tex1797
-rw-r--r--macros/generic/diagrams/kuvio/COPYRIGHT17
-rw-r--r--macros/generic/diagrams/kuvio/README45
-rw-r--r--macros/generic/diagrams/kuvio/README257
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/Makefile-dist50
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/README40
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd8
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy.mf116
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy.sty137
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy.tex133
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy10.mf45
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsym.mf477
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/patchlevel_191
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/symbols.ps264
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/symbols.tex43
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/README55
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex15
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex23
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex24
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex30
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex7
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex22
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex15
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex28
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex15
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex10
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex7
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex14
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex10
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex20
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex12
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eps/face.eps211
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps414
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eps/plot.eps11784
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd22
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex283
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd24
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd88
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd75
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd101
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd332
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd42
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd18
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_101
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd223
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd185
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd21
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd45
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd86
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd73
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs25
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs49
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs20
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs108
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs20
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd206
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df41
l---------macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs1
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex70
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex67
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex96
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/revision_2.5.121
l---------macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd1
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex5
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex101
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex1
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex2123
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk.cd161
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk.ist10
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk.tex1743
-rw-r--r--macros/generic/diagrams/kuvio/doc/README10
-rw-r--r--macros/generic/diagrams/kuvio/examples-A4.ps5171
-rw-r--r--macros/generic/diagrams/kuvio/examples.ps5423
-rw-r--r--macros/generic/diagrams/kuvio/kuvio.sty28
-rw-r--r--macros/generic/diagrams/kuvio/kuvio.tex1891
-rw-r--r--macros/generic/diagrams/kuvio/patchlevel_2161
-rw-r--r--macros/generic/diagrams/taylor/Borceux-to-Taylor.tex796
-rw-r--r--macros/generic/diagrams/taylor/V3,90.tex1908
-rw-r--r--macros/generic/diagrams/taylor/V3,91.tex1917
-rw-r--r--macros/generic/diagrams/taylor/V3,93.tex1912
l---------macros/generic/diagrams/taylor/diagrams.sty1
l---------macros/generic/diagrams/taylor/diagrams.tex1
-rw-r--r--macros/generic/diagrams/taylor/index.html599
-rw-r--r--macros/generic/diagrams/taylor/manual.bklt.gzbin0 -> 259169 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.dvibin0 -> 151084 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.pdfbin0 -> 344003 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.ps.gzbin0 -> 258884 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.tex2695
-rw-r--r--macros/generic/diagrams/taylor/msg1992.html236
-rw-r--r--macros/generic/diagrams/xypic/CATALOG21
-rw-r--r--macros/generic/diagrams/xypic/COPYING339
-rw-r--r--macros/generic/diagrams/xypic/FONTCOPYING94
-rw-r--r--macros/generic/diagrams/xypic/INSTALL233
-rw-r--r--macros/generic/diagrams/xypic/MANIFEST232
-rw-r--r--macros/generic/diagrams/xypic/README107
-rw-r--r--macros/generic/diagrams/xypic/TRAILER117
-rw-r--r--macros/generic/diagrams/xypic/VERSIONS115
-rw-r--r--macros/generic/diagrams/xypic/Xy-logo.pngbin0 -> 711 bytes
-rw-r--r--macros/generic/diagrams/xypic/Xy-pic.html377
-rw-r--r--macros/generic/diagrams/xypic/afm/xyatip10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xybsql10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xybtip10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycirc10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmat10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmat11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmat12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmbt10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmbt11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmbt12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xydash10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeuat10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeuat11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeuat12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeubt10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeubt11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeubt12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyluat10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyluat11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyluat12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xylubt10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xylubt11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xylubt12.afm146
-rw-r--r--macros/generic/diagrams/xypic/doc/barrdoc.pdfbin0 -> 290585 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xyguide.pdfbin0 -> 192189 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xypdf.pdfbin0 -> 279816 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xyrefer.pdfbin0 -> 1175021 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xysource.pdfbin0 -> 1695863 bytes
-rw-r--r--macros/generic/diagrams/xypic/enc/xycirc.enc281
-rw-r--r--macros/generic/diagrams/xypic/enc/xyd.enc281
-rw-r--r--macros/generic/diagrams/xypic/enc/xyd2.enc281
-rw-r--r--macros/generic/diagrams/xypic/map/xypic.map64
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyatip.mf71
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyatip10.mf59
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyatri.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybsql10.mf95
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybtip.mf71
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybtip10.mf59
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybtri.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycirc10.mf177
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycm.mf42
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmat10.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmat11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmat12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyd.mf79
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyd2.mf81
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xydash10.mf89
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuler.mf42
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyline10.mf119
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylu.mf47
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyluat10.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyluat11.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyluat12.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylubt10.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylubt11.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylubt12.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xymisc10.mf143
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyqc10.mf96
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xytech.mf42
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyatip10.pfmbin0 -> 23456 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xybsql10.pfmbin0 -> 25295 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xybtip10.pfmbin0 -> 23299 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycirc10.pfmbin0 -> 19852 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmat10.pfmbin0 -> 23792 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmat11.pfmbin0 -> 24448 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmat12.pfmbin0 -> 23014 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmbt10.pfmbin0 -> 23767 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmbt11.pfmbin0 -> 24414 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmbt12.pfmbin0 -> 23057 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xydash10.pfmbin0 -> 16609 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeuat10.pfmbin0 -> 22107 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeuat11.pfmbin0 -> 22229 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeuat12.pfmbin0 -> 16437 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeubt10.pfmbin0 -> 22006 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeubt11.pfmbin0 -> 22177 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeubt12.pfmbin0 -> 16516 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyluat10.pfmbin0 -> 17726 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyluat11.pfmbin0 -> 17316 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyluat12.pfmbin0 -> 17503 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xylubt10.pfmbin0 -> 17637 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xylubt11.pfmbin0 -> 17360 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xylubt12.pfmbin0 -> 17359 bytes
-rw-r--r--macros/generic/diagrams/xypic/ps/xy389dict.pro380
-rw-r--r--macros/generic/diagrams/xypic/support/dvitogif89a215
-rw-r--r--macros/generic/diagrams/xypic/support/install-tds174
-rw-r--r--macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c183
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyatip10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xybsql10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xybtip10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycirc10.tfmbin0 -> 844 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmat10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmat11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmat12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmbt10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmbt11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmbt12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xydash10.tfmbin0 -> 984 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeuat10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeuat11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeuat12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeubt10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeubt11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeubt12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyline10.tfmbin0 -> 844 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyluat10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyluat11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyluat12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xylubt10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xylubt11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xylubt12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xymisc10.tfmbin0 -> 720 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyqc10.tfmbin0 -> 724 bytes
-rw-r--r--macros/generic/diagrams/xypic/texinputs/movie.cls333
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy.sty137
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy.tex2694
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy16textures.tex122
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy17oztex.tex121
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy2cell.tex668
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyall.tex36
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyarc.tex683
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyarrow.tex538
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xybarr.tex1016
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycmactex.tex28
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycmtip.tex29
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycolor.tex112
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycrayon.tex32
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycurve.tex2702
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydummy.tex30
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydvidrv.tex36
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydvips.tex154
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydvitops.tex179
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyemtex.tex101
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyframe.tex537
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xygraph.tex219
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyidioms.tex72
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyimport.tex68
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyknot.tex901
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyline.tex237
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xymacpat.xyp60
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xymatrix.tex500
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xymovie.tex75
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xynecula.tex330
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyoztex.tex130
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-co.tex129
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex1187
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex438
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-li.tex69
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex133
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf.tex522
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypic.sty32
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypic.tex24
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypicture.tex55
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypoly.tex609
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-c.tex69
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-col.tex97
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-f.tex127
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-l.tex68
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-pro.tex173
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-ps.tex280
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-r.tex61
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-s.tex51
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-t.tex64
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps.tex367
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypsdict.tex241
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypspatt.tex104
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyrecat.tex36
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyrotate.tex161
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xysmart.tex320
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytextures.tex123
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytile.tex125
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytips.tex81
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytp-f.tex174
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytpic.tex228
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyv2.tex277
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyweb.tex94
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyxdvi.tex138
-rw-r--r--macros/generic/diagrams/xypic/type1/xyatip10.pfbbin0 -> 17164 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xybsql10.pfbbin0 -> 15471 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xybtip10.pfbbin0 -> 16979 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycirc10.pfbbin0 -> 15405 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmat10.pfbbin0 -> 17442 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmat11.pfbbin0 -> 16692 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmat12.pfbbin0 -> 17701 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmbt10.pfbbin0 -> 17084 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmbt11.pfbbin0 -> 17318 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmbt12.pfbbin0 -> 17284 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xydash10.pfbbin0 -> 16202 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeuat10.pfbbin0 -> 17093 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeuat11.pfbbin0 -> 16780 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeuat12.pfbbin0 -> 16859 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeubt10.pfbbin0 -> 16794 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeubt11.pfbbin0 -> 17000 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeubt12.pfbbin0 -> 16813 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyluat10.pfbbin0 -> 10111 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyluat11.pfbbin0 -> 10114 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyluat12.pfbbin0 -> 10113 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xylubt10.pfbbin0 -> 10171 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xylubt11.pfbbin0 -> 10174 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xylubt12.pfbbin0 -> 10173 bytes
-rw-r--r--macros/generic/dirtree/README17
-rw-r--r--macros/generic/dirtree/dirtree.dtx825
-rw-r--r--macros/generic/dirtree/dirtree.ins37
-rw-r--r--macros/generic/dirtree/dirtree.pdfbin0 -> 144620 bytes
-rw-r--r--macros/generic/docbytex/README44
-rw-r--r--macros/generic/docbytex/annonce24
-rw-r--r--macros/generic/docbytex/base.c17
-rw-r--r--macros/generic/docbytex/base.d8
-rw-r--r--macros/generic/docbytex/cosi.c17
-rw-r--r--macros/generic/docbytex/docby-e.d2637
-rw-r--r--macros/generic/docbytex/docby-e.pdfbin0 -> 605684 bytes
-rw-r--r--macros/generic/docbytex/docby.d2635
-rw-r--r--macros/generic/docbytex/docby.pdfbin0 -> 636136 bytes
-rw-r--r--macros/generic/docbytex/docby.tex1072
-rw-r--r--macros/generic/docbytex/lup.pdfbin0 -> 66453 bytes
-rw-r--r--macros/generic/docbytex/lup.tex25
-rw-r--r--macros/generic/docbytex/main.c14
-rw-r--r--macros/generic/docbytex/main.d9
-rw-r--r--macros/generic/docbytex/win.c8
-rw-r--r--macros/generic/docbytex/win.d6
-rw-r--r--macros/generic/dowith/README64
-rw-r--r--macros/generic/dowith/doc/Announce.txt79
-rw-r--r--macros/generic/dowith/doc/SrcFILEs.txt21
-rw-r--r--macros/generic/dowith/doc/domore.pdfbin0 -> 524474 bytes
-rw-r--r--macros/generic/dowith/doc/dowith.RLS19
-rw-r--r--macros/generic/dowith/doc/dowith.pdfbin0 -> 694501 bytes
-rw-r--r--macros/generic/dowith/docsrc/domore.tex166
-rw-r--r--macros/generic/dowith/docsrc/dowith.tex1168
-rw-r--r--macros/generic/dowith/docsrc/fdatechk.tex12
-rw-r--r--macros/generic/dowith/docsrc/srcfiles.tex23
-rw-r--r--macros/generic/dowith/domore.sty164
-rw-r--r--macros/generic/dowith/dowith.sty204
-rw-r--r--macros/generic/ean/README22
-rw-r--r--macros/generic/ean/ean13.tex130
-rw-r--r--macros/generic/ean/ean8.tex114
-rw-r--r--macros/generic/ean/eantest.tex8
-rw-r--r--macros/generic/eijkhout/CD_labeler.tex351
-rw-r--r--macros/generic/eijkhout/CD_labeler_test.tex27
-rw-r--r--macros/generic/eijkhout/DB_process.tex151
-rw-r--r--macros/generic/eijkhout/repeat.tex212
-rw-r--r--macros/generic/encxvlna/README9
-rw-r--r--macros/generic/encxvlna/doc/License.txt416
-rw-r--r--macros/generic/encxvlna/doc/encxvlna.pdfbin0 -> 239151 bytes
-rw-r--r--macros/generic/encxvlna/doc/encxvlna.tex65
-rw-r--r--macros/generic/encxvlna/doc/vlna-inc.tex301
-rw-r--r--macros/generic/encxvlna/latex/encxvlna.sty97
-rw-r--r--macros/generic/encxvlna/plain/encxvlna.tex71
-rw-r--r--macros/generic/epsf/LICENSE5
-rw-r--r--macros/generic/epsf/Makefile83
-rw-r--r--macros/generic/epsf/README294
-rw-r--r--macros/generic/epsf/bboxgrid.ps317
-rw-r--r--macros/generic/epsf/epsf-doc.pdfbin0 -> 267725 bytes
-rw-r--r--macros/generic/epsf/epsf-doc.tex659
l---------macros/generic/epsf/epsf.sty1
-rw-r--r--macros/generic/epsf/epsf.tex653
-rw-r--r--macros/generic/epsf/fndbadps18
-rw-r--r--macros/generic/epsf/okay/teps.eps186
-rw-r--r--macros/generic/epsf/okay/tepsf.eps186
-rw-r--r--macros/generic/epsf/okay/tepsf1.dvibin0 -> 5264 bytes
-rw-r--r--macros/generic/epsf/okay/tepsf2.dvibin0 -> 7840 bytes
-rw-r--r--macros/generic/epsf/okay/tepsf3.dvibin0 -> 3444 bytes
-rw-r--r--macros/generic/epsf/teps.eps186
-rw-r--r--macros/generic/epsf/tepsf.eps186
-rw-r--r--macros/generic/epsf/tepsf1.tex146
-rw-r--r--macros/generic/epsf/tepsf2.ltx232
-rw-r--r--macros/generic/epsf/tepsf3.tex108
-rw-r--r--macros/generic/expex/README50
-rw-r--r--macros/generic/expex/epltxchapno.sty35
-rw-r--r--macros/generic/expex/epltxfn.sty18
-rw-r--r--macros/generic/expex/eptexfn.tex27
-rw-r--r--macros/generic/expex/expex-demo.tex1037
-rw-r--r--macros/generic/expex/expex-doc.pdfbin0 -> 426992 bytes
-rw-r--r--macros/generic/expex/expex.sty5
-rw-r--r--macros/generic/expex/expex.tex1618
-rw-r--r--macros/generic/fenixpar/README9
-rw-r--r--macros/generic/fenixpar/fenixpar.sty44
-rw-r--r--macros/generic/fenixpar/fenixtok.sty197
-rw-r--r--macros/generic/fixjfm/README16
-rw-r--r--macros/generic/fixjfm/fixjfm-doc.pdfbin0 -> 281286 bytes
-rw-r--r--macros/generic/fixjfm/fixjfm-doc.tex356
-rw-r--r--macros/generic/fixjfm/fixjfm.sty278
l---------macros/generic/fltpoint1
-rw-r--r--macros/generic/fntproof/README44
-rw-r--r--macros/generic/fntproof/fntproof-doc.pdfbin0 -> 201650 bytes
-rw-r--r--macros/generic/fntproof/fntproof-doc.tex578
-rw-r--r--macros/generic/fntproof/fntproof.tex377
-rw-r--r--macros/generic/formlett/formlett.sty1868
-rw-r--r--macros/generic/formlett/prog_manual.pdfbin0 -> 198659 bytes
-rw-r--r--macros/generic/formlett/prog_manual.tex1906
-rw-r--r--macros/generic/formlett/user_manual.pdfbin0 -> 172966 bytes
-rw-r--r--macros/generic/formlett/user_manual.tex1113
-rw-r--r--macros/generic/frame/Changes12
-rw-r--r--macros/generic/frame/Makefile72
-rw-r--r--macros/generic/frame/README9
-rw-r--r--macros/generic/frame/frame-doc.pdfbin0 -> 35896 bytes
-rw-r--r--macros/generic/frame/frame-doc.tex97
-rw-r--r--macros/generic/frame/frame.sty9
-rw-r--r--macros/generic/frame/frame.tex58
-rw-r--r--macros/generic/gates/README26
-rw-r--r--macros/generic/gates/gates-doc.pdfbin0 -> 182321 bytes
-rw-r--r--macros/generic/gates/gates-doc.tex126
-rw-r--r--macros/generic/gates/gates-doc.txt1947
-rw-r--r--macros/generic/gates/gates.lua738
-rw-r--r--macros/generic/gates/gates.sty14
-rw-r--r--macros/generic/gates/gates.tex925
-rw-r--r--macros/generic/gates/t-gates.tex24
-rw-r--r--macros/generic/gobble/README19
-rw-r--r--macros/generic/gobble/gobble.dtx502
-rw-r--r--macros/generic/gobble/gobble.ins13
-rw-r--r--macros/generic/gobble/gobble.pdfbin0 -> 157394 bytes
-rw-r--r--macros/generic/gtl/README.md17
-rw-r--r--macros/generic/gtl/gtl.dtx1910
-rw-r--r--macros/generic/gtl/gtl.ins23
-rw-r--r--macros/generic/gtl/gtl.pdfbin0 -> 550901 bytes
-rw-r--r--macros/generic/hlist/README21
-rw-r--r--macros/generic/hlist/hlist-fr.pdfbin0 -> 379214 bytes
-rw-r--r--macros/generic/hlist/hlist-fr.tex463
-rw-r--r--macros/generic/hlist/hlist.sty7
-rw-r--r--macros/generic/hlist/hlist.tex617
-rw-r--r--macros/generic/hyacc-cm/f7hyphen.tex522
-rw-r--r--macros/generic/hyacc-cm/frhyphen.crk868
-rw-r--r--macros/generic/hyacc-cm/h-plain.dmp60
-rw-r--r--macros/generic/hyacc-cm/hyacc-cm.doc411
-rw-r--r--macros/generic/hyacc-cm/hyacc-cm.tex250
-rw-r--r--macros/generic/hyacc-cm/hymaster.tex92
-rw-r--r--macros/generic/hyacc-cm/hytstfr.tex169
-rw-r--r--macros/generic/ifptex/LICENSE21
-rw-r--r--macros/generic/ifptex/README-ja.md108
-rw-r--r--macros/generic/ifptex/README.md111
-rw-r--r--macros/generic/ifptex/ifptex.sty322
-rw-r--r--macros/generic/ifptex/ifuptex.sty54
l---------macros/generic/iftex1
-rw-r--r--macros/generic/ifxetex/README17
-rw-r--r--macros/generic/ifxetex/ifxetex.ins4
-rw-r--r--macros/generic/ifxetex/ifxetex.pdfbin0 -> 165358 bytes
-rw-r--r--macros/generic/ifxetex/ifxetex.tex193
-rw-r--r--macros/generic/ifxptex/README16
-rw-r--r--macros/generic/ifxptex/ifxptex-doc.pdfbin0 -> 196863 bytes
-rw-r--r--macros/generic/ifxptex/ifxptex-doc.tex197
-rw-r--r--macros/generic/ifxptex/ifxptex.sty109
-rw-r--r--macros/generic/infpic/incpic.mf339
-rw-r--r--macros/generic/infpic/incpic.tex438
-rw-r--r--macros/generic/infpic/mf180.bat6
-rw-r--r--macros/generic/infpic/mf300.bat6
-rw-r--r--macros/generic/infpic/sipky.mf27
-rw-r--r--macros/generic/infpic/voting1.cs269
-rw-r--r--macros/generic/insbox/demo.pdfbin0 -> 34366 bytes
-rw-r--r--macros/generic/insbox/demo.tex118
-rw-r--r--macros/generic/insbox/insbox.tex256
-rw-r--r--macros/generic/insbox/pic1.eps1113
-rw-r--r--macros/generic/insbox/pic2.eps906
-rw-r--r--macros/generic/kastrup/binhex.dtx518
-rw-r--r--macros/generic/kastrup/binhex.ins32
-rw-r--r--macros/generic/kastrup/binhex.pdfbin0 -> 151153 bytes
-rw-r--r--macros/generic/knst/README15
-rw-r--r--macros/generic/knst/foo.tex44
-rw-r--r--macros/generic/knst/knd.c352
-rw-r--r--macros/generic/knst/knst.tex256
-rw-r--r--macros/generic/laan/fifo.art781
-rw-r--r--macros/generic/laan/index.txt7
-rw-r--r--macros/generic/laan/prgtab.tex1720
-rw-r--r--macros/generic/laansort/sort.tex796
-rw-r--r--macros/generic/labtex/labtex.mf106
-rw-r--r--macros/generic/labtex/labtex.tex153
-rw-r--r--macros/generic/labtex/xminus1.mf40
-rw-r--r--macros/generic/labtex/xminus1.tex26
-rw-r--r--macros/generic/lambda-lists/README16
-rw-r--r--macros/generic/lambda-lists/lambda-lists.pdfbin0 -> 138256 bytes
-rw-r--r--macros/generic/lambda-lists/lambda-lists.tex1147
-rw-r--r--macros/generic/lambda-lists/lambda.sty105
-rw-r--r--macros/generic/langcode/README61
-rw-r--r--macros/generic/langcode/SrcFILEs.txt16
-rw-r--r--macros/generic/langcode/docsrc/langcode.tex80
-rw-r--r--macros/generic/langcode/docsrc/srcfiles.tex14
-rw-r--r--macros/generic/langcode/langcode.pdfbin0 -> 345459 bytes
-rw-r--r--macros/generic/langcode/langcode.sty141
-rw-r--r--macros/generic/lecturer/README69
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.pdfbin0 -> 172002 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.tex451
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.pdfbin0 -> 436168 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.tex306
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-Mondrian.pdfbin0 -> 64455 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-Mondrian.tex236
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.pdfbin0 -> 148743 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.tex392
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.pdfbin0 -> 107422 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.tex309
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.pdfbin0 -> 71054 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.tex320
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-VisualDoc.pdfbin0 -> 629020 bytes
-rw-r--r--macros/generic/lecturer/doc/LecturerDemo-VisualDoc.tex1354
-rw-r--r--macros/generic/lecturer/doc/lecturer-doc.pdf31560
-rw-r--r--macros/generic/lecturer/doc/lecturer-doc.tex2372
-rw-r--r--macros/generic/lecturer/doc/universe.jpgbin0 -> 399148 bytes
-rw-r--r--macros/generic/lecturer/tex/lecturer.sty14
-rw-r--r--macros/generic/lecturer/tex/lecturer.tex122
-rw-r--r--macros/generic/lecturer/tex/ltr-areas.tex208
-rw-r--r--macros/generic/lecturer/tex/ltr-graphics.tex644
-rw-r--r--macros/generic/lecturer/tex/ltr-job.tex407
-rw-r--r--macros/generic/lecturer/tex/ltr-navigation.tex263
-rw-r--r--macros/generic/lecturer/tex/ltr-slides.tex244
-rw-r--r--macros/generic/lecturer/tex/ltr-steps.tex202
-rw-r--r--macros/generic/lecturer/tex/t-lecturer.tex24
-rw-r--r--macros/generic/librarian/README27
l---------macros/generic/librarian/doc/generic/librarian/README1
-rw-r--r--macros/generic/librarian/doc/generic/librarian/librarian-doc.pdfbin0 -> 153869 bytes
-rw-r--r--macros/generic/librarian/doc/generic/librarian/librarian-doc.tex1271
-rw-r--r--macros/generic/librarian/doc/generic/librarian/librarian.bib39
-rw-r--r--macros/generic/librarian/tex/context/librarian/t-librarian.tex25
-rw-r--r--macros/generic/librarian/tex/generic/librarian/authoryear.tex266
-rw-r--r--macros/generic/librarian/tex/generic/librarian/librarian.tex1176
-rw-r--r--macros/generic/librarian/tex/latex/librarian/librarian.sty16
-rw-r--r--macros/generic/listofitems/README30
-rw-r--r--macros/generic/listofitems/listofitems-en.pdfbin0 -> 447840 bytes
-rw-r--r--macros/generic/listofitems/listofitems-en.tex590
-rw-r--r--macros/generic/listofitems/listofitems-fr.pdfbin0 -> 412514 bytes
-rw-r--r--macros/generic/listofitems/listofitems-fr.tex438
-rw-r--r--macros/generic/listofitems/listofitems.sty4
-rw-r--r--macros/generic/listofitems/listofitems.tex606
-rw-r--r--macros/generic/listofitems/listofitemsold.tex572
l---------macros/generic/localloc1
-rw-r--r--macros/generic/lpform/README17
-rw-r--r--macros/generic/lpform/lpform-doc.pdfbin0 -> 278850 bytes
-rw-r--r--macros/generic/lpform/lpform-doc.tex300
-rw-r--r--macros/generic/lpform/lpform.sty78
-rw-r--r--macros/generic/luatex85/README.md10
-rw-r--r--macros/generic/luatex85/luatex85.dtx277
-rw-r--r--macros/generic/luatex85/luatex85.ins10
-rw-r--r--macros/generic/luatex85/luatex85.pdfbin0 -> 170646 bytes
-rw-r--r--macros/generic/markdown/LICENSE42
-rw-r--r--macros/generic/markdown/Makefile130
-rw-r--r--macros/generic/markdown/README.md100
-rw-r--r--macros/generic/markdown/docstrip.cfg105
-rw-r--r--macros/generic/markdown/examples/README.md7
-rw-r--r--macros/generic/markdown/examples/context-mkii.pdfbin0 -> 237090 bytes
-rw-r--r--macros/generic/markdown/examples/context-mkiv.pdfbin0 -> 67910 bytes
-rw-r--r--macros/generic/markdown/examples/context.tex31
-rw-r--r--macros/generic/markdown/examples/example.md131
-rw-r--r--macros/generic/markdown/examples/latex-luatex.pdfbin0 -> 63088 bytes
-rw-r--r--macros/generic/markdown/examples/latex-pdftex.pdfbin0 -> 265094 bytes
-rw-r--r--macros/generic/markdown/examples/latex-xetex.pdfbin0 -> 60564 bytes
-rw-r--r--macros/generic/markdown/examples/latex.tex42
-rw-r--r--macros/generic/markdown/examples/scientists.csv4
-rw-r--r--macros/generic/markdown/latexmkrc4
-rw-r--r--macros/generic/markdown/markdown.css351
-rw-r--r--macros/generic/markdown/markdown.dtx17226
-rw-r--r--macros/generic/markdown/markdown.html5344
-rw-r--r--macros/generic/markdown/markdown.ins15
-rw-r--r--macros/generic/markdown/markdown.md278
-rw-r--r--macros/generic/markdown/markdown.pdfbin0 -> 429871 bytes
-rw-r--r--macros/generic/markdown/tests/README.md17
-rw-r--r--macros/generic/markdown/tests/support/README.md4
-rw-r--r--macros/generic/markdown/tests/support/latex-setup.tex162
-rw-r--r--macros/generic/markdown/tests/support/plain-setup.tex142
-rw-r--r--macros/generic/markdown/tests/support/setup.tex79
-rw-r--r--macros/generic/markdown/tests/templates/README.md20
-rw-r--r--macros/generic/markdown/tests/templates/context/COMMANDS.m42
-rw-r--r--macros/generic/markdown/tests/templates/context/README.md2
-rw-r--r--macros/generic/markdown/tests/templates/context/input.tex.m411
-rw-r--r--macros/generic/markdown/tests/templates/context/verbatim.tex.m413
-rw-r--r--macros/generic/markdown/tests/templates/latex/COMMANDS.m43
-rw-r--r--macros/generic/markdown/tests/templates/latex/README.md1
-rw-r--r--macros/generic/markdown/tests/templates/latex/input.tex.m414
-rw-r--r--macros/generic/markdown/tests/templates/latex/verbatim-starred.tex.m417
-rw-r--r--macros/generic/markdown/tests/templates/latex/verbatim.tex.m417
-rw-r--r--macros/generic/markdown/tests/templates/plain/COMMANDS.m43
-rw-r--r--macros/generic/markdown/tests/templates/plain/README.md1
-rw-r--r--macros/generic/markdown/tests/templates/plain/input.tex.m410
-rw-r--r--macros/generic/markdown/tests/templates/plain/verbatim.tex.m412
-rwxr-xr-xmacros/generic/markdown/tests/test.sh58
-rw-r--r--macros/generic/markdown/tests/testfiles/CommonMark_0.26/README.md2
-rw-r--r--macros/generic/markdown/tests/testfiles/CommonMark_0.26/fenced-code.test315
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/README.md2
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/amps-encoding.test36
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/auto-links.test52
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/backslash-escapes.test192
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/blockquotes-with-code-blocks.test21
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-blocks.test18
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-spans.test4
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/hard-wrapped-paragraphs-with-list-like-lines.test12
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/horizontal-rules.test132
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-inline-style.test50
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-reference-style.test176
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-shortcut-references.test42
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/literal-quotes-in-titles.test21
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-basics.test436
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-syntax.test1518
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/nested-blockquotes.test14
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/ordered-and-unordered-lists.test323
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/strong-and-em-together.test17
-rw-r--r--macros/generic/markdown/tests/testfiles/Markdown_1.0.3/tabs.test39
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/README.md2
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/auto-links.test16
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/backslash-escapes.test19
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-in-a-list-item.test31
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-on-second-line.test6
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/email-auto-links.test16
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/emphasis.test272
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/empty-list-item.test97
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/headers.test18
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/horizontal-rules.test51
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/links-inline-style.test9
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/md5-hashes.test22
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/mixed-ols-and-uls.test47
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/nesting.test30
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/parens-in-url.test52
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/php-specific-bugs.test39
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/quotes-in-attributes.test29
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/tables.test327
-rw-r--r--macros/generic/markdown/tests/testfiles/PHP_Markdown/tight-blocks.test30
-rw-r--r--macros/generic/markdown/tests/testfiles/README.md21
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/README.md2
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/blank-before-code-fence.test57
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/breakable-blockquotes.test19
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/cache-dir.test12
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-escapes.test73
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-nbsps.test85
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-no-nbsps.test85
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-trailing-punctuation.test115
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks-language-map.test16
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks.test64
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/empty-code-spans.test24
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/fenced-code.test27
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/header-attributes.test37
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/html.test53
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/hybrid.test43
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/inline-footnotes.test17
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-blank-before-code-fence.test57
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-breakable-blockquotes.test15
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-citations.test31
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-code-spans.test9
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-content-blocks.test32
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-fenced-code.test22
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-header-attributes.test35
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-html.test53
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-hybrid.test65
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-inline-footnotes.test16
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-pipe-tables.test41
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-shift-headings.test35
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-slice.test251
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-start-number.test41
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-strip-percent-signs.test10
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-table-captions.test79
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-tight-lists.test19
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/no-underscores.test15
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-backwards.test37
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-forward.test37
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-conclusion.test155
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-existing-section.test182
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-nonexisting-section.test141
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-preface.test148
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-two-sections.test278
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/start-number.test39
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/table-captions.test76
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark-markdown/tight-lists.test18
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/README.md2
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/backticks-in-links.test8
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/case-insensitive-references.test10
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/consecutive-lists.test19
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/definition-lists.test200
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/hash-enumerators.test11
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/indented-code-in-list-item.test16
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/list-spacing.test42
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/lists-and-hrules.test18
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/notes.test27
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/reference-defined-in-blockquote.test12
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-blockquote.test5
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-header.test6
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/smart.test7
-rw-r--r--macros/generic/markdown/tests/testfiles/lunamark/unicode.test10
-rw-r--r--macros/generic/mathdots/README54
-rw-r--r--macros/generic/mathdots/mathdots.dtx512
-rw-r--r--macros/generic/mathdots/mathdots.ins35
-rw-r--r--macros/generic/mathdots/mathdots.pdfbin0 -> 258547 bytes
-rw-r--r--macros/generic/mathdots/mdotest.pdfbin0 -> 159693 bytes
-rw-r--r--macros/generic/mathdots/mdotest.tex61
-rw-r--r--macros/generic/mathdots/plmdotest.tex88
-rw-r--r--macros/generic/midnight/README23
-rw-r--r--macros/generic/midnight/border.doc372
-rw-r--r--macros/generic/midnight/border.tex319
-rw-r--r--macros/generic/midnight/dolines.doc306
-rw-r--r--macros/generic/midnight/dolines.tex180
-rw-r--r--macros/generic/midnight/gloss.doc283
-rw-r--r--macros/generic/midnight/gloss.tex122
-rw-r--r--macros/generic/midnight/labels.doc234
-rw-r--r--macros/generic/midnight/labels.tex358
-rw-r--r--macros/generic/midnight/loop.doc144
-rw-r--r--macros/generic/midnight/loop.tex105
-rw-r--r--macros/generic/midnight/midnight.pdfbin0 -> 385533 bytes
-rw-r--r--macros/generic/midnight/quire.doc448
-rw-r--r--macros/generic/midnight/quire.tex541
-rw-r--r--macros/generic/midnight/styledef.doc309
-rw-r--r--macros/generic/midnight/styledef.tex208
-rw-r--r--macros/generic/minifp/README110
-rw-r--r--macros/generic/minifp/doc/minifp.pdfbin0 -> 430316 bytes
-rw-r--r--macros/generic/minifp/doc/test1.tex515
-rw-r--r--macros/generic/minifp/doc/test2.tex385
-rw-r--r--macros/generic/minifp/minifp.dtx4136
-rw-r--r--macros/generic/minifp/minifp.ins51
-rw-r--r--macros/generic/misc/CropMarks_pt.tex391
-rw-r--r--macros/generic/misc/anti.tex19
l---------macros/generic/misc/apldef.tex1
-rw-r--r--macros/generic/misc/arabic.tex55
-rw-r--r--macros/generic/misc/backgrnd.tex319
-rw-r--r--macros/generic/misc/balancedquotes.sty418
-rw-r--r--macros/generic/misc/calendarweek.tex35
-rw-r--r--macros/generic/misc/chessmin.tex171
-rw-r--r--macros/generic/misc/compare.tex12
-rw-r--r--macros/generic/misc/cropmark.tex154
-rw-r--r--macros/generic/misc/dayofweek.tex149
-rw-r--r--macros/generic/misc/daytime.sty30
-rw-r--r--macros/generic/misc/default.sty311
-rw-r--r--macros/generic/misc/dow.tex44
-rw-r--r--macros/generic/misc/emtrees.tex87
-rw-r--r--macros/generic/misc/endnote.tex36
-rw-r--r--macros/generic/misc/epigram.tex20
-rw-r--r--macros/generic/misc/fakebold.tex5
-rw-r--r--macros/generic/misc/hep.tex12
l---------macros/generic/misc/hexdump.sty1
-rw-r--r--macros/generic/misc/inscrutable.tex11
l---------macros/generic/misc/ipamacs.tex1
-rw-r--r--macros/generic/misc/kbordermatrix.sty151
-rw-r--r--macros/generic/misc/laps.tex14
-rw-r--r--macros/generic/misc/letterspacing.tex319
-rw-r--r--macros/generic/misc/longdiv.tex53
-rw-r--r--macros/generic/misc/mandel.tex139
-rw-r--r--macros/generic/misc/mathlig.tex131
-rw-r--r--macros/generic/misc/nth.sty56
-rw-r--r--macros/generic/misc/outerhbox.sty86
-rw-r--r--macros/generic/misc/pagereference.tex67
-rw-r--r--macros/generic/misc/patch.doc555
-rw-r--r--macros/generic/misc/quotation.tex5
-rw-r--r--macros/generic/misc/ragged.sty781
-rw-r--r--macros/generic/misc/random.tex94
-rw-r--r--macros/generic/misc/rotate-textures.sty111
-rw-r--r--macros/generic/misc/ruler.tex656
-rw-r--r--macros/generic/misc/selectpage.tex30
-rw-r--r--macros/generic/misc/shadebox.tex171
-rw-r--r--macros/generic/misc/swrule.sty89
-rw-r--r--macros/generic/misc/tabto.tex39
-rw-r--r--macros/generic/misc/tex.logos9
-rw-r--r--macros/generic/misc/time.sty30
-rw-r--r--macros/generic/misc/underlin.tex18
-rw-r--r--macros/generic/misc/undertilde.tex3
-rw-r--r--macros/generic/misc/verbatim.tex258
-rw-r--r--macros/generic/misc/weekday.sty74
-rw-r--r--macros/generic/misc/wiggly.tex30
-rw-r--r--macros/generic/misc/zip.tex88
-rw-r--r--macros/generic/modulus/CHANGES1
-rw-r--r--macros/generic/modulus/README27
-rw-r--r--macros/generic/modulus/lppl.txt416
-rw-r--r--macros/generic/modulus/modulus.dtx212
-rw-r--r--macros/generic/modulus/modulus.ins65
-rw-r--r--macros/generic/modulus/modulus.pdfbin0 -> 168095 bytes
-rw-r--r--macros/generic/multido/Changes12
-rw-r--r--macros/generic/multido/Makefile71
-rw-r--r--macros/generic/multido/multido-doc.pdfbin0 -> 64366 bytes
-rw-r--r--macros/generic/multido/multido-doc.tex274
-rw-r--r--macros/generic/multido/multido.pdfbin0 -> 63288 bytes
-rw-r--r--macros/generic/multido/multido.sty28
-rw-r--r--macros/generic/multido/multido.tex288
-rw-r--r--macros/generic/multiexpand/README.md41
-rw-r--r--macros/generic/multiexpand/multiexpand.dtx491
-rw-r--r--macros/generic/multiexpand/multiexpand.pdfbin0 -> 376297 bytes
-rw-r--r--macros/generic/navigator/README27
-rw-r--r--macros/generic/navigator/navigator-doc.pdfbin0 -> 131223 bytes
-rw-r--r--macros/generic/navigator/navigator-doc.tex914
-rw-r--r--macros/generic/navigator/navigator.sty15
-rw-r--r--macros/generic/navigator/navigator.tex776
-rw-r--r--macros/generic/navigator/t-navigator.tex33
-rw-r--r--macros/generic/occam/DefStrip-QUEDCmds.hqx224
-rw-r--r--macros/generic/occam/DefStrip-QUEDCmds.hqx_old223
-rw-r--r--macros/generic/occam/Euro92.sty296
-rw-r--r--macros/generic/occam/Occam94-old/DefStrip-QEDMacros.hqx125
-rw-r--r--macros/generic/occam/Occam94-old/auditor.tex599
-rw-r--r--macros/generic/occam/Occam94-old/defstrip.hlp56
-rw-r--r--macros/generic/occam/Occam94-old/occam.pub173
-rw-r--r--macros/generic/occam/Occam94-old/occam.spc209
-rw-r--r--macros/generic/occam/Occam94-old/sample.dir/Kohler-aud.sty493
-rw-r--r--macros/generic/occam/Occam94-old/sample.dir/Kohler-ori.sty247
-rw-r--r--macros/generic/occam/Occam94-old/sample.dir/Kohler.sty277
-rw-r--r--macros/generic/occam/Occam94-old/sample.dir/Kohler.tex1169
-rw-r--r--macros/generic/occam/Occam95.pdfbin0 -> 145590 bytes
-rw-r--r--macros/generic/occam/PlainEx1/Example.readme6
-rw-r--r--macros/generic/occam/PlainEx1/RESOURCESimple.occ648
-rw-r--r--macros/generic/occam/PlainEx1/newton.sty212
-rw-r--r--macros/generic/occam/PlainEx1/newton.tex1281
-rw-r--r--macros/generic/occam/PlainEx2/W.sty196
-rw-r--r--macros/generic/occam/PlainEx2/W.tex1362
-rw-r--r--macros/generic/occam/PlainEx2/harvmac.occ571
-rw-r--r--macros/generic/occam/PlainEx2/harvmac.tex327
-rw-r--r--macros/generic/occam/PlainEx2/harvtst.doc170
-rw-r--r--macros/generic/occam/PlainEx2/witten94.tex1402
-rw-r--r--macros/generic/occam/auditor.tex598
-rw-r--r--macros/generic/occam/defstrip.hlp56
-rw-r--r--macros/generic/occam/occam.pub272
-rw-r--r--macros/generic/occam/occam.spc415
l---------macros/generic/ofs/README1
-rw-r--r--macros/generic/ofs/changes.txt58
-rw-r--r--macros/generic/ofs/doc/ofsdoc-e.pdfbin0 -> 252623 bytes
-rw-r--r--macros/generic/ofs/doc/ofsdoc-e.tex2394
-rw-r--r--macros/generic/ofs/doc/ofsdoc.pdfbin0 -> 264614 bytes
-rw-r--r--macros/generic/ofs/doc/ofsdoc.tex2402
-rw-r--r--macros/generic/ofs/doc/papers/eurotex2003-ofs.pdfbin0 -> 130321 bytes
-rw-r--r--macros/generic/ofs/doc/papers/eurotex2003-ofs.tex1089
-rw-r--r--macros/generic/ofs/doc/papers/ofs-slt.pdfbin0 -> 136978 bytes
-rw-r--r--macros/generic/ofs/doc/papers/ofs-slt.tex1004
-rw-r--r--macros/generic/ofs/latex/decl/a35.sty25
-rw-r--r--macros/generic/ofs/latex/decl/allfonts.sty20
-rw-r--r--macros/generic/ofs/latex/ofs.sty301
-rw-r--r--macros/generic/ofs/readme.ofs104
-rw-r--r--macros/generic/ofs/tex/decl/a117.tex223
-rw-r--r--macros/generic/ofs/tex/decl/a35.tex95
-rw-r--r--macros/generic/ofs/tex/decl/allfonts.tex14
-rw-r--r--macros/generic/ofs/tex/decl/amsfn.tex134
-rw-r--r--macros/generic/ofs/tex/decl/mtfn.tex83
-rw-r--r--macros/generic/ofs/tex/decl/ofsmtdef.tex15
-rw-r--r--macros/generic/ofs/tex/decl/pantyk.tex127
-rw-r--r--macros/generic/ofs/tex/decl/txfn.tex262
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6a.tex259
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6c.tex249
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6k.tex202
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6s.tex358
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6t.tex242
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6x.tex289
-rw-r--r--macros/generic/ofs/tex/enc/ofs-6y.tex258
-rw-r--r--macros/generic/ofs/tex/enc/ofs-8c.tex332
-rw-r--r--macros/generic/ofs/tex/enc/ofs-8t.tex251
-rw-r--r--macros/generic/ofs/tex/enc/ofs-8x.tex229
-rw-r--r--macros/generic/ofs/tex/enc/ofs-8z.tex362
-rw-r--r--macros/generic/ofs/tex/enc/ofs-ams.tex237
-rw-r--r--macros/generic/ofs/tex/enc/ofs-cm.tex285
-rw-r--r--macros/generic/ofs/tex/enc/ofs-mt.tex122
-rw-r--r--macros/generic/ofs/tex/enc/ofs-ps.tex207
-rw-r--r--macros/generic/ofs/tex/enc/ofs-px.tex98
-rw-r--r--macros/generic/ofs/tex/enc/ofs-tx.tex357
-rw-r--r--macros/generic/ofs/tex/ofs.tex1184
-rw-r--r--macros/generic/ofs/tex/ofsdef.tex414
-rw-r--r--macros/generic/ofs/tex/ofstest.tex811
-rw-r--r--macros/generic/olsak-misc/README30
-rw-r--r--macros/generic/olsak-misc/booklet.tex38
-rw-r--r--macros/generic/olsak-misc/cnv-pu.tex266
-rw-r--r--macros/generic/olsak-misc/cnv-word.tex154
-rw-r--r--macros/generic/olsak-misc/cnv.tex541
-rw-r--r--macros/generic/olsak-misc/eparam.tex177
-rw-r--r--macros/generic/olsak-misc/fun-coffee.tex4941
-rw-r--r--macros/generic/olsak-misc/openclose.tex89
-rw-r--r--macros/generic/olsak-misc/qrcode.tex2871
-rw-r--r--macros/generic/olsak-misc/scanbase.tex218
-rw-r--r--macros/generic/olsak-misc/scancsv.tex242
-rw-r--r--macros/generic/olsak-misc/seplist.tex131
-rw-r--r--macros/generic/olsak-misc/xmlparser.tex333
-rw-r--r--macros/generic/path/path-doc.pdfbin0 -> 286904 bytes
-rw-r--r--macros/generic/path/path-doc.tex146
-rw-r--r--macros/generic/path/path.sty351
-rw-r--r--macros/generic/pdf-trans/example.pdf3635
-rw-r--r--macros/generic/pdf-trans/example.tex228
-rw-r--r--macros/generic/pdf-trans/pdf-trans.tex1500
-rw-r--r--macros/generic/petri-nets/COPYING340
-rw-r--r--macros/generic/petri-nets/ChangeLog88
-rw-r--r--macros/generic/petri-nets/README19
-rw-r--r--macros/generic/petri-nets/pn2pdf211
-rw-r--r--macros/generic/petri-nets/pndoc.pdfbin0 -> 207808 bytes
-rw-r--r--macros/generic/petri-nets/pndoc.tex1234
-rw-r--r--macros/generic/petri-nets/pndraw.sty152
-rw-r--r--macros/generic/petri-nets/pndraw.tex623
-rw-r--r--macros/generic/petri-nets/pnets.sty7
-rw-r--r--macros/generic/petri-nets/pnets.tex5
-rw-r--r--macros/generic/petri-nets/pntext.sty70
-rw-r--r--macros/generic/petri-nets/pntext.tex75
-rw-r--r--macros/generic/petri-nets/pnversion.tex1
-rw-r--r--macros/generic/plainpkg/README46
-rw-r--r--macros/generic/plainpkg/SrcFILEs.txt9
-rw-r--r--macros/generic/plainpkg/docsrc/plainpkg-doc.tex282
-rw-r--r--macros/generic/plainpkg/docsrc/srcfiles.tex12
-rw-r--r--macros/generic/plainpkg/plainpkg-doc.pdfbin0 -> 396804 bytes
-rw-r--r--macros/generic/plainpkg/plainpkg.tex153
-rw-r--r--macros/generic/pmat/pmat.pdfbin0 -> 69023 bytes
-rw-r--r--macros/generic/pmat/pmat.sty180
-rw-r--r--macros/generic/pmat/pmat.tex156
-rw-r--r--macros/generic/pmat/readme11
-rw-r--r--macros/generic/poormanlog/README145
-rw-r--r--macros/generic/poormanlog/poormanlog.sty17
-rw-r--r--macros/generic/poormanlog/poormanlog.tex421
-rw-r--r--macros/generic/poster/Changes7
-rw-r--r--macros/generic/poster/Makefile71
-rw-r--r--macros/generic/poster/README9
-rw-r--r--macros/generic/poster/poster-doc.pdfbin0 -> 48990 bytes
-rw-r--r--macros/generic/poster/poster-doc.tex365
-rw-r--r--macros/generic/poster/poster.sty8
-rw-r--r--macros/generic/poster/poster.tex349
-rw-r--r--macros/generic/poster/poster1.pdfbin0 -> 56529 bytes
-rw-r--r--macros/generic/poster/poster2.pdfbin0 -> 5678 bytes
-rw-r--r--macros/generic/proofs/taylor/QED.sty731
-rw-r--r--macros/generic/proofs/taylor/prooftree-doc.dvibin0 -> 7336 bytes
-rw-r--r--macros/generic/proofs/taylor/prooftree-doc.pdfbin0 -> 80732 bytes
-rw-r--r--macros/generic/proofs/taylor/prooftree-doc.tex198
l---------macros/generic/proofs/taylor/prooftree.sty1
-rw-r--r--macros/generic/proofs/taylor/prooftree.tex347
-rw-r--r--macros/generic/psbox/TrashMe.tex92
-rw-r--r--macros/generic/psbox/box.ps229
-rw-r--r--macros/generic/psbox/ls-lr8
-rw-r--r--macros/generic/psbox/psbREAD.ME38
-rw-r--r--macros/generic/psbox/psbox.tex649
-rw-r--r--macros/generic/psbox/psboxOK.tex39
-rw-r--r--macros/generic/psbox/psboxall.tex1434
-rw-r--r--macros/generic/psbox/psbsamp.tex428
-rw-r--r--macros/generic/psbox/psbug.tex30
-rw-r--r--macros/generic/randomlist/Makefile57
-rw-r--r--macros/generic/randomlist/README.txt46
-rw-r--r--macros/generic/randomlist/comets.dat22
-rw-r--r--macros/generic/randomlist/pupils.dat25
-rw-r--r--macros/generic/randomlist/pythagoras.dat100
-rw-r--r--macros/generic/randomlist/randomlist.dtx2468
-rw-r--r--macros/generic/randomlist/randomlist.ins37
-rw-r--r--macros/generic/randomlist/randomlist.pdfbin0 -> 200637 bytes
-rw-r--r--macros/generic/randomlist/randomlist.sty67
-rw-r--r--macros/generic/randomlist/randomlist.tex682
-rw-r--r--macros/generic/randomlist/test-fr.pdfbin0 -> 119908 bytes
-rw-r--r--macros/generic/randomlist/test-fr.tex62
-rw-r--r--macros/generic/randomlist/test.pdfbin0 -> 116659 bytes
-rw-r--r--macros/generic/randomlist/test.tex61
-rw-r--r--macros/generic/randomlist/testtex.pdfbin0 -> 46147 bytes
-rw-r--r--macros/generic/randomlist/testtex.tex96
-rw-r--r--macros/generic/realcalc/readme39
-rw-r--r--macros/generic/realcalc/realcalc.tex581
-rw-r--r--macros/generic/realcalc/realdemo.tex6
-rw-r--r--macros/generic/realcalc/realtest.tex291
-rw-r--r--macros/generic/rlepsf/read.me12
-rw-r--r--macros/generic/rlepsf/rlepsdoc.ps6208
-rw-r--r--macros/generic/rlepsf/rlepsf.tex167
-rw-r--r--macros/generic/schemata/Makefile35
-rw-r--r--macros/generic/schemata/README79
-rw-r--r--macros/generic/schemata/schemata.dtx1968
-rw-r--r--macros/generic/schemata/schemata.pdfbin0 -> 516452 bytes
-rw-r--r--macros/generic/shade/README29
-rw-r--r--macros/generic/shade/description.pdfbin0 -> 25940 bytes
-rw-r--r--macros/generic/shade/description.tex45
-rw-r--r--macros/generic/shade/shade.mf41
-rw-r--r--macros/generic/shade/shade.tex45
-rw-r--r--macros/generic/simplekv/README21
-rw-r--r--macros/generic/simplekv/simplekv-fr.pdfbin0 -> 329306 bytes
-rw-r--r--macros/generic/simplekv/simplekv-fr.tex271
-rw-r--r--macros/generic/simplekv/simplekv.sty4
-rw-r--r--macros/generic/simplekv/simplekv.tex329
-rw-r--r--macros/generic/systeme/README27
-rw-r--r--macros/generic/systeme/systeme.sty5
-rw-r--r--macros/generic/systeme/systeme.tex689
-rw-r--r--macros/generic/systeme/systeme_fr.pdfbin0 -> 454193 bytes
-rw-r--r--macros/generic/systeme/systeme_fr.tex421
-rw-r--r--macros/generic/tables/0README.TAP41
-rw-r--r--macros/generic/termmenu/README80
-rw-r--r--macros/generic/termmenu/termmenu.dtx661
-rw-r--r--macros/generic/termmenu/termmenu.ins38
-rw-r--r--macros/generic/termmenu/termmenu.pdfbin0 -> 472608 bytes
-rw-r--r--macros/generic/tex-ewd/README19
-rw-r--r--macros/generic/tex-ewd/bsdlic.txt24
-rw-r--r--macros/generic/tex-ewd/dotnot.tex182
-rw-r--r--macros/generic/tex-ewd/p0.tex463
-rw-r--r--macros/generic/tex-ewd/t1.tex73
-rw-r--r--macros/generic/tex-ini-files/README.md56
-rw-r--r--macros/generic/tex-ini-files/dvilualatex.ini4
-rw-r--r--macros/generic/tex-ini-files/dviluatex.ini4
-rw-r--r--macros/generic/tex-ini-files/lualatex.ini19
-rw-r--r--macros/generic/tex-ini-files/luatex.ini12
-rw-r--r--macros/generic/tex-ini-files/luatexconfig.tex69
-rw-r--r--macros/generic/tex-ini-files/pdftexconfig.tex21
-rw-r--r--macros/generic/tex-ini-files/xelatex.ini17
-rw-r--r--macros/generic/tex-ini-files/xetex.ini109
-rw-r--r--macros/generic/tex-locale/CHANGES2
-rw-r--r--macros/generic/tex-locale/README32
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xe.pdfbin0 -> 17633 bytes
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xe.tex106
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xeltx.pdfbin0 -> 16236 bytes
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xeltx.tex109
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xeltx2.pdfbin0 -> 23225 bytes
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xeltx2.tex96
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xeltx3.pdfbin0 -> 36956 bytes
-rw-r--r--macros/generic/tex-locale/samples/sample-locale-xeltx3.tex64
-rw-r--r--macros/generic/tex-locale/samples/sample-locale.pdfbin0 -> 91348 bytes
-rw-r--r--macros/generic/tex-locale/samples/sample-locale.tex94
-rw-r--r--macros/generic/tex-locale/samples/sample-locale2.pdfbin0 -> 91386 bytes
-rw-r--r--macros/generic/tex-locale/samples/sample-locale2.tex89
-rw-r--r--macros/generic/tex-locale/tex-locale.dtx9082
-rw-r--r--macros/generic/tex-locale/tex-locale.ins39
-rw-r--r--macros/generic/tex-locale/tex-locale.pdfbin0 -> 678448 bytes
-rw-r--r--macros/generic/texapi/README25
-rw-r--r--macros/generic/texapi/texapi-doc.pdfbin0 -> 131636 bytes
-rw-r--r--macros/generic/texapi/texapi-doc.tex1941
-rw-r--r--macros/generic/texapi/texapi.tex964
-rw-r--r--macros/generic/texchord/test.tex138
-rw-r--r--macros/generic/texchord/texchord.tex284
-rw-r--r--macros/generic/texdate/CHANGES6
-rw-r--r--macros/generic/texdate/README26
-rw-r--r--macros/generic/texdate/lppl.txt416
-rw-r--r--macros/generic/texdate/texdate.dtx1612
-rw-r--r--macros/generic/texdate/texdate.ins65
-rw-r--r--macros/generic/texdate/texdate.pdfbin0 -> 251821 bytes
-rw-r--r--macros/generic/tokcycle/README14
-rw-r--r--macros/generic/tokcycle/tokcycle-doc.pdfbin0 -> 241795 bytes
-rw-r--r--macros/generic/tokcycle/tokcycle-doc.tex593
-rw-r--r--macros/generic/tokcycle/tokcycle-examples.pdfbin0 -> 244484 bytes
-rw-r--r--macros/generic/tokcycle/tokcycle-examples.tex1286
-rw-r--r--macros/generic/tokcycle/tokcycle.sty4
-rw-r--r--macros/generic/tokcycle/tokcycle.tex192
-rw-r--r--macros/generic/tracklang/CHANGES106
-rw-r--r--macros/generic/tracklang/README27
-rw-r--r--macros/generic/tracklang/samples/animals/animals-en-GB.ldf10
-rw-r--r--macros/generic/tracklang/samples/animals/animals-en-US.ldf10
-rw-r--r--macros/generic/tracklang/samples/animals/animals-english.ldf9
-rw-r--r--macros/generic/tracklang/samples/animals/animals-german.ldf9
-rw-r--r--macros/generic/tracklang/samples/animals/animals.sty24
-rw-r--r--macros/generic/tracklang/samples/animals/animals2-en-GB.ldf17
-rw-r--r--macros/generic/tracklang/samples/animals/animals2-en-US.ldf16
-rw-r--r--macros/generic/tracklang/samples/animals/animals2-english.ldf9
-rw-r--r--macros/generic/tracklang/samples/animals/animals2-german.ldf9
-rw-r--r--macros/generic/tracklang/samples/animals/animals2.sty39
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-babel.pdfbin0 -> 14855 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-babel.tex26
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdfbin0 -> 3859 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex15
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de.pdfbin0 -> 13625 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de.tex14
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-poly.pdfbin0 -> 3593 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-poly.tex15
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals.pdfbin0 -> 12656 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals.tex19
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de.pdfbin0 -> 13625 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de.tex14
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de2.pdfbin0 -> 13625 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de2.tex14
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de3.pdfbin0 -> 13607 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de3.tex14
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de4.pdfbin0 -> 3859 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de4.tex15
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-poly.pdfbin0 -> 3595 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-poly.tex15
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2.pdfbin0 -> 12656 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2.tex22
-rw-r--r--macros/generic/tracklang/samples/regions/regions-BE.ldf9
-rw-r--r--macros/generic/tracklang/samples/regions/regions-CA.ldf9
-rw-r--r--macros/generic/tracklang/samples/regions/regions-GB.ldf9
-rw-r--r--macros/generic/tracklang/samples/regions/regions-IM.ldf9
-rw-r--r--macros/generic/tracklang/samples/regions/regions-US.ldf9
-rw-r--r--macros/generic/tracklang/samples/regions/regions-dutch.ldf7
-rw-r--r--macros/generic/tracklang/samples/regions/regions-english.ldf7
-rw-r--r--macros/generic/tracklang/samples/regions/regions-french.ldf7
-rw-r--r--macros/generic/tracklang/samples/regions/regions-german.ldf7
-rw-r--r--macros/generic/tracklang/samples/regions/regions-italian.ldf7
-rw-r--r--macros/generic/tracklang/samples/regions/regions-manx.ldf7
-rw-r--r--macros/generic/tracklang/samples/regions/regions.sty43
-rw-r--r--macros/generic/tracklang/samples/regions/regions2.sty46
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions.pdfbin0 -> 13161 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions.tex13
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-manx.pdfbin0 -> 19785 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-manx.tex10
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map.pdfbin0 -> 26000 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map.tex32
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map2.pdfbin0 -> 25852 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map2.tex29
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map3.pdfbin0 -> 24924 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map3.tex23
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdfbin0 -> 25468 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex21
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2.pdfbin0 -> 14716 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2.tex11
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang.pdfbin0 -> 19552 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang.tex42
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang2.pdfbin0 -> 19802 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang2.tex44
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang3.pdfbin0 -> 19814 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang3.tex44
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang4.pdfbin0 -> 6241 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang4.tex27
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang5.pdfbin0 -> 16914 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang5.tex24
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang6.pdfbin0 -> 19897 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang6.tex43
-rw-r--r--macros/generic/tracklang/tracklang.dtx10870
-rw-r--r--macros/generic/tracklang/tracklang.ins39
-rw-r--r--macros/generic/tracklang/tracklang.pdfbin0 -> 672797 bytes
-rw-r--r--macros/generic/trigonometry/README.txt3
-rw-r--r--macros/generic/trigonometry/trigonometry.tex206
-rw-r--r--macros/generic/umrand/umrand12.readme_e72
-rw-r--r--macros/generic/umrand/umrand12.readme_g71
-rw-r--r--macros/generic/umrand/umrand_up1.readme13
-rw-r--r--macros/generic/unicode-data/BidiBrackets.txt185
-rw-r--r--macros/generic/unicode-data/CaseFolding.txt1581
-rw-r--r--macros/generic/unicode-data/EastAsianWidth.txt2473
-rw-r--r--macros/generic/unicode-data/LineBreak.txt3439
-rw-r--r--macros/generic/unicode-data/MathClass-15.txt1591
-rw-r--r--macros/generic/unicode-data/PropList.txt1666
-rw-r--r--macros/generic/unicode-data/README.md219
-rw-r--r--macros/generic/unicode-data/ScriptExtensions.txt573
-rw-r--r--macros/generic/unicode-data/Scripts.txt2838
-rw-r--r--macros/generic/unicode-data/SpecialCasing.txt281
-rw-r--r--macros/generic/unicode-data/UnicodeData.txt32841
-rw-r--r--macros/generic/unicode-data/load-unicode-data.tex194
-rw-r--r--macros/generic/unicode-data/load-unicode-math-classes.tex121
-rw-r--r--macros/generic/unicode-data/load-unicode-xetex-classes.tex228
-rw-r--r--macros/generic/upca/README15
-rw-r--r--macros/generic/upca/test-upca.tex11
-rw-r--r--macros/generic/upca/upca.tex166
-rw-r--r--macros/generic/upzhkinsoku/README17
-rw-r--r--macros/generic/upzhkinsoku/upzhkinsoku-doc.pdfbin0 -> 204584 bytes
-rw-r--r--macros/generic/upzhkinsoku/upzhkinsoku-doc.tex82
-rw-r--r--macros/generic/upzhkinsoku/upzhkinsoku.sty168
-rw-r--r--macros/generic/variations/ALIRE43
-rw-r--r--macros/generic/variations/COPYING339
-rw-r--r--macros/generic/variations/README40
-rw-r--r--macros/generic/variations/docvariations.pdfbin0 -> 78843 bytes
-rw-r--r--macros/generic/variations/docvariations.tex137
-rw-r--r--macros/generic/variations/variations.sty10
-rw-r--r--macros/generic/variations/variations.tex105
-rw-r--r--macros/generic/vrb/readme20
-rw-r--r--macros/generic/vrb/vrb.tex144
-rw-r--r--macros/generic/witharrows/README.md32
-rw-r--r--macros/generic/witharrows/witharrows-french.pdfbin0 -> 253675 bytes
-rw-r--r--macros/generic/witharrows/witharrows-french.tex2275
-rw-r--r--macros/generic/witharrows/witharrows.dtx6977
-rw-r--r--macros/generic/witharrows/witharrows.ins48
-rw-r--r--macros/generic/witharrows/witharrows.pdfbin0 -> 577204 bytes
-rw-r--r--macros/generic/xcomment/Changes9
-rw-r--r--macros/generic/xcomment/Makefile69
-rw-r--r--macros/generic/xcomment/README9
-rw-r--r--macros/generic/xcomment/xcomment-doc.pdfbin0 -> 83949 bytes
-rw-r--r--macros/generic/xcomment/xcomment-doc.tex554
-rw-r--r--macros/generic/xcomment/xcomment.sty8
-rw-r--r--macros/generic/xcomment/xcomment.tex171
-rw-r--r--macros/generic/xint/CHANGES.html833
-rw-r--r--macros/generic/xint/CHANGES.pdfbin0 -> 104210 bytes
-rw-r--r--macros/generic/xint/Makefile20
-rw-r--r--macros/generic/xint/README205
-rw-r--r--macros/generic/xint/README.html133
-rw-r--r--macros/generic/xint/README.pdfbin0 -> 32957 bytes
-rw-r--r--macros/generic/xint/sourcexint.pdfbin0 -> 919178 bytes
-rw-r--r--macros/generic/xint/xint.dtx40510
-rw-r--r--macros/generic/xint/xint.pdfbin0 -> 987296 bytes
-rw-r--r--macros/generic/xlop/LISEZMOI69
-rw-r--r--macros/generic/xlop/README56
-rw-r--r--macros/generic/xlop/doc/manual.sty48
-rw-r--r--macros/generic/xlop/doc/xlop-doc-fr.pdfbin0 -> 346691 bytes
-rw-r--r--macros/generic/xlop/doc/xlop-doc-fr.tex2474
-rw-r--r--macros/generic/xlop/doc/xlop-doc.pdfbin0 -> 328002 bytes
-rw-r--r--macros/generic/xlop/doc/xlop-doc.tex2320
-rw-r--r--macros/generic/xlop/tex/xlop.sty3
-rw-r--r--macros/generic/xlop/tex/xlop.tex4346
-rw-r--r--macros/generic/xstring/README85
-rw-r--r--macros/generic/xstring/test_etex.pdfbin0 -> 99780 bytes
-rw-r--r--macros/generic/xstring/test_etex.tex992
-rw-r--r--macros/generic/xstring/test_latex.pdfbin0 -> 150611 bytes
-rw-r--r--macros/generic/xstring/test_latex.tex1078
-rw-r--r--macros/generic/xstring/xstring-en.pdfbin0 -> 187648 bytes
-rw-r--r--macros/generic/xstring/xstring-en.tex2052
-rw-r--r--macros/generic/xstring/xstring-fr.pdfbin0 -> 201920 bytes
-rw-r--r--macros/generic/xstring/xstring-fr.tex2037
-rw-r--r--macros/generic/xstring/xstring.sty3
-rw-r--r--macros/generic/xstring/xstring.tex1227
-rw-r--r--macros/generic/yax/README26
-rw-r--r--macros/generic/yax/t-yax.tex24
-rw-r--r--macros/generic/yax/yax-doc.pdfbin0 -> 113177 bytes
-rw-r--r--macros/generic/yax/yax-doc.tex1032
-rw-r--r--macros/generic/yax/yax.sty14
-rw-r--r--macros/generic/yax/yax.tex707
1432 files changed, 551613 insertions, 0 deletions
diff --git a/macros/generic/2up/2up-doc.pdf b/macros/generic/2up/2up-doc.pdf
new file mode 100644
index 0000000000..dad87c4e57
--- /dev/null
+++ b/macros/generic/2up/2up-doc.pdf
Binary files differ
diff --git a/macros/generic/2up/2up-doc.tex b/macros/generic/2up/2up-doc.tex
new file mode 100644
index 0000000000..f68925ee7a
--- /dev/null
+++ b/macros/generic/2up/2up-doc.tex
@@ -0,0 +1,502 @@
+%% BEGIN 2up.doc
+%%
+%% Documentation for 2up.tex/2up.sty.
+%% See below if you want to try out two-up printing.
+%%
+%% $Id: 2up-doc.tex 318 2010-05-15 07:29:54Z herbert $
+\documentclass[12pt]{article}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo,url}
+
+\usepackage{2up}
+\special{landscape}
+
+\let\TUfv\fileversion
+
+%% INSTRUCTIONS FOR TWO-UP PRINTING.
+%% 3. Uncomment one of the booklet options, if desired.
+%%
+%\targetlayout{twosided}
+\TwoupWrites
+
+% \targetlayout{Booklet} %% Booklet printing with 2-sided printer/copier.
+% \targetlayout{booklet} %% Booklet printing with 1-sided printer/copier.
+
+\twouplegaltarget
+\target{\magstepminus1}{29.6cm}{21cm}
+\source{\magstep0}{21cm}{29.6cm}
+
+\makeatletter
+%% PAGE NUMBERING:
+%% Adjust page numbering if using booklet layout option.
+\def\next{\if@leftpage\else\stepcounter{page}\fi}
+\@ifundefined{target@stop}{}{\next}
+
+%% Special list:
+\newcommand\namelistlabel[1]{\mbox{\bf #1}\hfil}
+\newenvironment{namelist}[1]%
+ {\begin{list}{}%
+ {\let\makelabel\namelistlabel
+ \settowidth{\labelwidth}{#1}
+ \setlength{\leftmargin}{1.1\labelwidth}}}%
+ {\end{list}}
+
+%% VERBATIM:
+%%
+\begingroup
+ \catcode`\{=12 \catcode`\}=12
+ \catcode`\(=1 \catcode`\)=2
+ \catcode`\+=0 \catcode`\\=12
+ +gdef+|(\) % \| = character \
+ +gdef+{({) % \{ = character {
+ +gdef+}(}) % \} = character }
++endgroup
+\def\Backslash{\protect\|}
+%%
+%% Define some functional font commands:
+%%
+\def\MainFont{\tt} % For macro definitions.
+\def\UsageFont{\tt} % For in-line macro names.
+\def\InlineFont{\tt} % For other in-line snipets of code.
+\def\MetaFont{\rm\it} % For meta arguments.
+%%
+%% Short-cuts for font commands:
+%%
+\def\s#1{\string#1}
+\def\t#1{{\InlineFont\string#1}} % For other in-line code.
+\def\m#1{{\MetaFont #1\/}} % For just putting things in italics
+\def\M#1{{\InlineFont\{\m{#1}\}}} % Arg is in italic, enclosed in tt braces.
+\let\N\t % For in-line macro names.
+\catcode`\<=13 \def<#1>{\m{#1}} % <meta>
+\catcode`\"=13\def"{\verb"} % Short verb
+%%
+%% This is for listing macro definitions in a quote-like environment.
+%%
+\begingroup
+ \catcode`\[=1 \catcode`\]=2
+ \catcode`\{=13 \catcode`\}=12
+ \gdef\@MD[%
+ \catcode`\{=13 \catcode`\}=12
+ \def{##1}[\{[\MetaFont ##1]\}]]
+\endgroup
+\def\MD{%
+ \quote
+ \begingroup
+ \@MD
+ \def\end{\endgroup\end}%
+ \def\\{\@centercr\s}%
+ \MainFont
+ \s}
+\def\endMD{\endquote}
+%%
+%% End preamble.
+\catcode`\@=12
+
+\begin{document}
+
+\title{Documentation for 2up.tex:\\
+ Two-up printing for Generic TeX}
+\author{Timothy Van Zandt\thanks{The documentation was put into
+ \LaTeX\ format by David Todd and Herbert Vo\ss}\\ \url{tvz@Princeton.EDU}}
+\date{Version \TUfv\\[3pt] \today}
+
+\maketitle
+\thispagestyle{empty}
+
+\begin{abstract}
+ "2up.tex"/"2up.sty" allows one to print a document two-up, with
+considerable flexibility as to paper size and layout. It produces a standard
+dvi file, and does not involve an additional dvi or PostScript filter. It
+should work with most \TeX\ macro packages.
+
+\end{abstract}
+
+\clearpage
+\tableofcontents
+\clearpage
+
+\section{Usage}
+Load 2up as a \LaTeX\ package with \texttt{\textbackslash usepackage}.
+There is a good chance you will get the desired layout. See the rest of
+this documentation for detailed information on controlling 2up.
+
+\section{Comparison with other methods}
+
+There are other tools for two-up printing:
+\begin{description}
+\item[PostScript filters]
+These work well as long as you only use PostScript fonts (as opposed to the
+usual Metafont fonts). Otherwise, the PostScript filter scales bitmapped
+fonts, and the quality is lower than with "2up.tex".
+
+\item[Rokicki's dvidvi]
+"dvidvi" is a versatil tool that does much more than
+2up printing. However, if only rearranges the pages, and does not adjust the
+magnification to ensure that the pages fit properly in a two-up format. It
+also adds one more step to the \TeX-dvi-printer cycle. "2up.tex", on the other
+hand, combines the changes to \TeX's magnification and page layout with the
+rearranging of the pages, all with an easy-to-use interface and from within
+your \TeX\ document. (See Section \ref{dvidvi} on using both "2up.tex" and
+"dvidvi" together.)
+\end{description}
+
+\section{A warning about fonts}
+
+Two-up printing generally involves reducing a document, and thus using fonts
+sizes that are not typically found on your system. If you are using bitmapped
+fonts (standard for \TeX\ users), and you do not have and cannot generate the
+extra fonts bitmaps, you will find 2up.sty (and any other method of two-up
+printing) to give very poor quality output.
+
+If you are using a program like Rokicki's "dvips" that can generate extra font
+bitmaps as needed, you will find that it takes a long time to print your 2up
+document the first few times, as "dvips" is busy making the extra fonts. This
+problem will go away. Be thankful you have such an easy way to get extra font
+bitmaps.
+
+\section{Source and target dimensions}
+
+Set the target and source layout:
+\begin{MD}
+ \source{mag}{width}{height}\\
+ \target{mag}{width}{height}
+\end{MD}
+
+\begin{itemize}
+\item The ``source'' layout is the layout of your document
+the way it is usually printed. The ``target'' layout is the layout when it
+is printed two-up.
+
+\item <width> and <height> are the true width and height of the paper,
+when looking at the output right-side-up.
+
+\item <mag> refers to the source and target magnification. It should be an
+integer, equal to 1000 times the magnification factor. There are also some
+magic magnification numbers:
+\begin{description}
+\item[$\setminus$magstep<n>] for a magnification of 1.2$^n$ (n=0,...,5), or
+
+\item[$\setminus$magstepminus<n>] for a magnification of 1.2$^{-n}$
+(n=0,...,5).
+\end{description}
+Using these magnification values will make best use of the available fonts on
+your system.
+\end{itemize}
+
+"2up.tex" takes each source page, and centers in half a target page. To get
+the pages to fit, the magnification of the document typically has to be
+reduced. If you find that the pages are too crowded, try reducing the target
+magnification. If they are too lonely, try increasing the target
+magnification.
+
+If you want to adjust the positioning of the scaled pages, try changing the
+values of "\hoffset" or "\voffset" with "\advance" or \LaTeX's "\addtolength".
+
+Don't change the magnification of your document after using the "\target"
+command, as you will override the settings made by 2up.tex.
+
+You can also specify some options:
+\begin{MD}
+ \targetlayout{options}
+\end{MD}
+where <options> is a comma separated list with no spaces. Valid
+options are:
+\begin{namelist}{topbottomxxx}
+
+\item [topbottom] The two source pages are printed one on top of the other.
+\item [twosided] Odd pages are always printed on the right or the bottom.
+\item [booklet] Pages are printed like a booklet. See Section \ref{booklet}.
+\item [Booklet] Like "booklet", but for two-sided printers/copiers.
+\item [dvidvi] For arranging in two-up layout with "dvidvi". See Section
+\ref{dvidvi}.
+
+\end{namelist}
+
+The only other changes you might want to make to your document are the
+following:
+\begin{itemize}
+\item You have to see to it that the target output is printed with the
+correct orientation (landscape or portrait). See the documentation for your
+dvi driver for details.
+
+\item "2up.tex" will inserts a line between pages if you change the following
+dimensions:
+\begin{namelist}{pagesepwidthxxx}
+\item [$\setminus$pagesepwidth] Thickness of line. (Default 0pt)
+\item [$\setminus$pageseplength] Length of line. (Default 6.5in)
+\item [$\setminus$pagesepoffset] Distance from bottom of page to bottom of
+line, or (with "topbottom" layout) from side of page to beginning of line.
+(Default 1in)
+\end{namelist}
+
+\item You can, but do not need to, use the following commands:
+\begin{namelist}{twoupemptypagexxx}
+
+\item [$\setminus$twoupemptypage] inserts a completely blank half page
+in the target.
+
+\item [$\setminus$twoupclearpage] \LaTeX\ users: ejects a complete target
+page.
+
+\item [$\setminus$twoupeject] Plain \TeX users: ejects a complete target
+page.
+
+\end{namelist}
+\end{itemize}
+
+\section{Defaults}
+
+ The following commands set the parameters for some common sources and
+targets. The definitions of these commands are also useful examples.
+
+ For A4 paper, just replace "8.5in" and "11in" in the definitions below by
+the width and height of A4 paper.
+
+\begin{description}
+
+\item [$\setminus$twouparticle]
+
+This is the default for \LaTeX.
+\begin{namelist}{Sourcexx}
+
+\item [Source:] A portrait document on 8.5x11 inch paper with wide margins as
+used in \LaTeX's article style, and without marginal notes.
+
+\item [Target:] A landscape document on the same size paper, with the source
+pages printed side by side.
+
+\item [Definition:]\hspace{1pt}
+\begin{verbatim}
+\target{\magstepminus1}{11in}{8.5in}
+\source{\magstep0}{8.5in}{11in}}
+\end{verbatim}
+\end{namelist}
+
+If you use narrower side margins, or if you use marginal notes, then you
+will need to use "\twoupplain" or \\ "\twouplegaltarget", defined below.
+
+\item [$\setminus$twoupplain]
+
+This is the default for non-\LaTeX.
+
+It is the same as "\twouparticle", but for source documents with narrower
+margins.
+\begin{namelist}{Sourcexxx}
+
+\item [Definition:]\hspace{1pt}
+\begin{verbatim}
+\target{\magstepminus2}{11in}{8.5in}
+\source{\magstep0}{8.5in}{11in}
+\end{verbatim}
+\end{namelist}
+
+\item [$\setminus$twouplegaltarget]
+
+\begin{namelist}{Sourcexxx}
+\item [Source:] A portrait document on 8.5x11 inch paper with just about any
+margins and perhaps with marginal notes.
+
+\item [Target:] A landscape document on legal size paper (8.5x14 inches),
+with the source pages printed side by side.
+
+\item [Definition:]\hspace{1pt}
+\begin{verbatim}
+\target{\magstepminus1}{14in}{8.5in}
+\source{\magstep0}{8.5in}{11in}
+\end{verbatim}
+\end{namelist}
+
+\item [$\setminus$twouplandscape]\hspace{1pt}
+\begin{namelist}{Sourcexxx}
+
+\item [Source:] A landscape document on 8.5x11 inch paper with just about any
+margins.
+
+\item [Target:] A portrait document on the same size paper, with the
+source pages stacked vertically.
+
+\item [Definition:]\hspace{1pt}
+\begin{verbatim}
+\target{\magstepminus2}{8.5in}{11in}
+\source{\magstep0}{11in}{8.5in}
+\targetlayout{topbottom}
+\end{verbatim}
+\end{namelist}
+
+\end{description}
+
+
+\section{True Dimensions}
+
+\TeX\ lets you use `true' dimensions, as in
+\begin{verbatim}
+ \topmargin 1truein
+ \setlength{\topmargin}{1truein}
+\end{verbatim}
+This sets the length to 1 inch
+as it appears on the page, no matter what the magnification.
+
+Once you use `true' dimensions, it is impossible to change the
+magnification of your document, and hence it is almost impossible
+to use 2up.tex. You will get an error like:
+\begin{verbatim}
+ ! Incompatible magnification (833);
+ the previous value will be retained (2000).
+\end{verbatim}%
+
+The use of `true' dimensions might be hiding in macros or style files
+you are using. For example, Plain \TeX's "\magnification" command uses
+true dimensions; use "\mag" instead, and then set "\hsize" and
+"\vsize" appropriately scaled. If you can't find the culprit `true'
+dimension in your document or input files, try putting this on the
+(very) first line of your document:
+\begin{verbatim}
+ \mag 143 \voffset 1truein \mag 1000
+\end{verbatim}
+
+You will get the error listed above wherever true dimensions are used
+(and in some other places as well).
+
+
+\section{Page Cross-References}
+
+ Page cross-references (e.g., in an index or table of contents) will not be
+accurate with "2up.tex", because finished pages are not immediately shipped
+out. This can also cause problems with some special \LaTeX\ styles that have
+multiple ".aux" files (e.g., for each chapter).
+
+ To get better, but not perfect, page cross-references, try putting the
+command
+\begin{verbatim}
+ \TwoupWrites
+\end{verbatim}
+at the beginning of your document, after inputting "2up.tex". This is good for
+drafts, and may fix problems with \LaTeX\ styles that have multiple ".aux"
+files. "\TwoupWrites" makes "\write" and "\read" "\immediate", if you know
+what that means. It might cause problems of its own, but try it and see.
+
+ To get accurate page cross-references:
+\begin{enumerate}
+\item Run the job without "2up.tex", until all cross-references
+are properly resolved. Run any index utility at this point.
+
+\item Run the job ONE MORE TIME with "2up.tex"; it will use the
+correct cross-references from the previous runs. (In \LaTeX\ documents,
+it is useful at this point to include the "\nofiles" command, so that
+the correct cross-references are preserved.)
+\end{enumerate}
+
+\section{Booklets\label{booklet}}
+
+Here are some special considerations for making booklets:
+
+\begin{itemize}
+
+\item Use the "booklet" target layout if your printer or copier cannot print
+two
+sides directly. "2up.tex" prints out the ``tops'' of the pages, and then the
+``bottoms'', so that you can copy or print on both sides by doing one side,
+flipping the output over, and doing the other side.
+
+\item Use "Booklet" if your printer or copier can print directly on two sides.
+
+\item You must have enough memory and box registers to hold all the pages in
+the document. A Big\TeX\ should be able to handle at least a 32-page booklet.
+
+\item Sometimes booklet printing is part of the design of a document, rather
+than an afterthought. In this case, you should set up the margins for the
+target half-page rather than using "2up.tex" to scale the document. For
+example, if using \LaTeX, 8.5x11 inch paper, \LaTeX's twoside style option,
+and headings, try the following page parameter changes:
+\begin{verbatim}
+ \setlength{\oddsidemargin}{-0.2in}
+ \setlength{\evensidemargin}{-0.5in}
+ \setlength{\textwidth}{4.2in}
+ \setlength{\textheight}{6.5in}
+ \setlength{\topmargin}{-.4in}
+\end{verbatim}
+If you do this, "2up.tex" isn't adjusting margins or scaling the
+document. You coould therefore get by without "2up.tex" by using "dvidvi".
+\end{itemize}
+
+\section{Using dvidvi\label{dvidvi}}
+
+ With the "dvidvi" layout option, "2up.tex" takes care of adjusting the
+margins, and you then use "dvidvi" to arrange the pages in a two-up
+format. The advantage is that cross referencing comes out right.
+The disadvantage is that it involves one more step.
+
+Start by \TeX ing your document with "2up.tex" and the "dvidvi" layout option.
+Then run the dvi file through "dvidvi". Specify the offsets for "dvidvi" at
+the middle of the page. E.g., for
+a side-by-side layout on 8.5x11in paper, use
+\begin{verbatim}
+ dvidvi '2:0,1(5.5in,0in)' foo bar
+\end{verbatim}
+For other paper sizes, replace "5.5in" by half the target paper width. For the
+"topbottom" layout, reverse the dimensions, e.g.,
+(0in,5.5in). For booklet printing, see the
+the documentation for "dvidvi".
+
+
+\section{Compatibility\label{compatibility}}
+
+ These macros should work with most \TeX\ macro packages, except for
+the following possible but unlikely compatibility problems:
+
+\begin{itemize}
+
+\item If you use a macro package other than \LaTeX\ that does unusual things
+to end a document and/or that modifies the definition of "\end", you may
+find that the last page is nor printed or that an extra page with headings
+is inserted at the end of the document. This is fixable on a case-by-case
+basis. See the redefinition of "\end" in "2up.tex".
+
+\item "2up.tex" might not work if you meddle with \TeX's "\shipout" primitive
+after loading "2up.tex".
+
+\item If the first page of the source document is not on the first two-up
+target
+page (possible, for example, with two-sided printing and the "booklet"
+option, but generally unlikely), "\special"'s that come at the beginning
+of the document also do not get onto the first page of output. This can mess
+up "\special"'s for landscape printing or
+including a PostScript header file. In this case, you have to specify
+these things as command line options when using your dvi driver.
+
+\end{itemize}
+
+
+\section{Changes}
+\begin{namelist}{V0.9xxx}
+\raggedright
+
+\item [V0.9a] Everything redone. Too many differences to point out.
+
+\item [V0.9b] Interface redone again. "booklet" option added.
+
+\item [V0.9c] Pages ship out a little earlier. A few bugs fixed.
+
+ Parameters "\pageseplength" and "\pagesepthickness" added.
+
+\item [V0.9d] Fixed bug with "\twoupclearpage" and "\twoupeject".
+
+\item [V0.9e] Made pages be counted (from dvi driver's viewpoint) by the
+physical page number.
+
+\item [V0.9f] Parameter "\pagesepoffset" added, and "\pagesepthickness"
+changed to "\pagesepwidth".
+
+\item [V1.0] None. Just seemed seemed like it was time to call it 1.0
+
+\item [V1.1] Added "Booklet" and "dvidvi" target layouts.
+
+ "\hoffset" and "\voffset" in source document now have expected effect.
+
+\item[V1.2] Fixed incompatibility problem with AmS-\TeX/AmS-\LaTeX.
+ Added "\TwoupWrites" command.
+\item[V1.3] LPPL license and updated documentation (hv).
+
+\end{namelist}
+\end{document}
+%% END 2up-doc
diff --git a/macros/generic/2up/2up.sty b/macros/generic/2up/2up.sty
new file mode 100644
index 0000000000..15659c7398
--- /dev/null
+++ b/macros/generic/2up/2up.sty
@@ -0,0 +1,9 @@
+%% $Id: 2up.sty 318 2010-05-15 07:29:54Z herbert $
+\ProvidesPackage{2up}[2010/05/15 package wrapper for
+ 2up.tex (hv)]
+\input{2up.tex}
+\ProvidesFile{2up.tex}
+ [\filedate\space v\fileversion\space `2up' (tvz,hv)]
+%
+\endinput
+
diff --git a/macros/generic/2up/2up.tex b/macros/generic/2up/2up.tex
new file mode 100644
index 0000000000..b1f064c0e2
--- /dev/null
+++ b/macros/generic/2up/2up.tex
@@ -0,0 +1,363 @@
+%%
+%% $Id: 2up.tex 318 2010-05-15 07:29:54Z herbert $
+%%
+%% COPYRIGHT 1992/2010, by Timothy Van Zandt, tvz@Princeton.EDU
+%% COPYRIGHT 2010, by Herbert Voss, hvoss@tug.org
+%%
+%% Copyright:
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% 2up.tex/2up.sty provides two-up printing for Generic TeX (e.g.,
+%% Plain, LaTeX, AmSTeX and AmS-LaTeX). It produces a standard dvi file,
+%% and does not involve an additional dvi or PostScript filter. It has a
+%% flexible interface for specifying paper size and layout.
+%%
+%
+\def\fileversion{1.3}
+\def\filedate{2010/05/15}
+%
+\csname TwoUpLoaded\endcsname
+\let\TwoUpLoaded\endinput
+%
+\edef\TheAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\message{\space\space v\fileversion\space\space \filedate\space\space <tvz>}
+%
+% Parameter registers:
+\newdimen\@targetwidth
+\newdimen\@targetheight
+\newdimen\@sourcewidth
+\newdimen\@sourceheight
+\newdimen\pageseplength
+\newdimen\pagesepwidth
+\newdimen\pagesepoffset
+\newif\if@sidebyside
+\@sidebysidetrue
+\newif\if@twosided
+%
+% Registers used by output routine.
+\newif\if@leftpage
+\@leftpagetrue
+\newbox\@leftpage
+\newbox\@rightpage
+\newcount\@physicalpage
+%
+% Since pages are shipped out half as often:
+\multiply\maxdeadcycles by 2
+%
+% Registers used only for booklet layout:
+\begingroup
+ \let\newcount\relax
+ \gdef\booklet@registers{%
+ \newcount\bookletpage
+ \bookletpage=0
+ \newcount\leftpagenumber
+ \newcount\rightpagenumber
+ \multiply\maxdeadcycles by 20}
+\endgroup
+%
+% A useful extension of the \magstep macro.
+\def\magstepminus#1{%
+ \ifcase#1 \@m\or 833\or 694\or 579\or 482\or 401\fi\relax}
+%
+% \@targetwidth and \@targetheight are set to the *unmagnified* dimensions
+% of the target page. \inv@targetmag is the inverse of the target
+% magnification.
+{\catcode`\p=12\catcode`\t=12\gdef\@@inv@@mag#1pt#2{\def#2{#1}}}
+\def\target#1#2#3{%
+ \mag #1\relax
+ \@targetwidth=1000pt
+ \divide\@targetwidth by #1\relax
+ \expandafter\@@inv@@mag\the\@targetwidth\inv@targetmag
+ \@targetwidth=#2\relax
+ \@targetwidth=\inv@targetmag\@targetwidth
+ \@targetheight=#3\relax
+ \@targetheight=\inv@targetmag\@targetheight}
+%
+% Like \target, but for the source:
+\def\source#1#2#3{%
+ \@sourcewidth=1000pt
+ \divide\@sourcewidth by #1\relax
+ \expandafter\@@inv@@mag\the\@sourcewidth\inv@sourcemag
+ \@sourcewidth=#2\relax
+ \@sourcewidth=\inv@sourcemag\@sourcewidth
+ \@sourceheight=#3\relax
+ \@sourceheight=\inv@sourcemag\@sourceheight}
+%
+% \targetlayout does a loop that reads the comma separated arguments.
+% There can be no extraneous spaces.
+\def\targetlayout#1{\process@targetlayout#1,stop,}
+\def\process@targetlayout#1,{%
+ \expandafter\let\expandafter\next\csname target@#1\endcsname
+ \ifx\next\relax
+ \begingroup
+ \errhelp{Valid target layouts are "topbottom", "twosided",
+ "booklet", "Booklet" and "dvidvi".}%
+ \errmessage{`#1' is invalid 2up target layout - ignored.}%
+ \endgroup
+ \expandafter\process@targetlayout
+ \else
+ \next
+ \fi}
+\def\target@stop{}
+\def\target@booklet{%
+ \booklet@registers
+ \def\ship@@@leftpage{\save@booklet\@leftpage}%
+ \def\ship@@@rightpage{\save@booklet\@rightpage}%
+ \@leftpagefalse
+ \def\twoup@eject{\twoup@eject@booklet}%
+ \expandafter\process@targetlayout}
+\def\target@Booklet{%
+ \def\booklet@@loop{\Booklet@@loop}%
+ \target@booklet}
+\def\target@twosided{%
+ \@twosidedtrue
+ \expandafter\process@targetlayout}
+\def\target@topbottom{%
+ \def\make@@halfpage{\make@@halftopbottom}%
+ \def\make@fullpage{\make@fulltopbottom}%
+ \@sidebysidefalse
+ \expandafter\process@targetlayout}
+\def\target@dvidvi{%
+ \def\ship@@@leftpage{\ship@dvidvi\@leftpage}%
+ \def\ship@@@rightpage{\ship@dvidvi\@rightpage}%
+ \expandafter\process@targetlayout}
+%
+% TeX's \shipout primitive is saved as \&normal@shipout, and then \shipout
+% is defined to save each page to \@leftpage or \@rightpage and to print out
+% every two. With the twosided layout, filler pages are added when needed.
+\expandafter\let\csname &normal@shipout\endcsname\shipout
+\def\shipout{%
+ \if@leftpage
+ \global\@leftpagefalse
+ \def\next{\afterassignment\ship@leftpage\global\setbox\@leftpage=}%
+ \if@twosided
+ \ifodd\count\z@
+ \global\setbox\@leftpage=\hbox{}%
+ \make@@halfpage\@leftpage\ship@@@leftpage
+ \def\next{\shipout}%
+ \fi
+ \fi
+ \else
+ \global\@leftpagetrue
+ \def\next{\afterassignment\ship@rightpage\global\setbox\@rightpage=}%
+ \if@twosided
+ \ifodd\count\z@
+ \else
+ \global\setbox\@rightpage=\hbox{}%
+ \make@@halfpage\@rightpage\ship@@@rightpage
+ \def\next{\shipout}%
+ \fi
+ \fi
+ \fi
+ \next}
+%
+% The job of \ship@leftpage and \ship@rightpage is to invoke \ship@@leftpage
+% or \ship@@rightpage at the right time. \shipout is followed either
+% (i) by an \hbox, \vbox or \vtop, in which case \ship@leftpage is invoked
+% after the opening {. \@leftpage is void, and \ship@leftpage invokes
+% \ship@@leftpage after the closing }, or
+% (ii) by a \box or \copy, in which case \ship@leftpage is invoked after
+% the full assignment. \@leftpage is not voide, and \ship@leftpage invokes
+% \ship@@leftpage immediately.
+\def\ship@leftpage{%
+ \ifvoid\@leftpage\aftergroup\ship@@leftpage\else\ship@@leftpage\fi}
+\def\ship@rightpage{%
+ \ifvoid\@rightpage\aftergroup\ship@@rightpage\else\ship@@rightpage\fi}
+%
+% \ship@@leftpage/\ship@@rightpage take the output box, and first make it
+% into a fully-size source page (with \make@halfpage) and then this is
+% centered horizontally and vertically in half of a target page (with
+% \make@@halfpage). Then they are shipped individually or together.
+\def\ship@@leftpage{\make@halfpage\@leftpage\ship@@@leftpage}
+\def\ship@@rightpage{\make@halfpage\@rightpage\ship@@@rightpage}
+\def\make@halfpage#1{%
+ \dp#1=\z@
+ \setbox#1=\vbox to\@sourceheight{%
+ \vskip \inv@sourcemag in
+ \vskip \voffset
+ \hbox to\@sourcewidth{\hskip\inv@sourcemag in\hskip\hoffset\box#1\hss}%
+ \vss}%
+ \make@@halfpage#1}
+%
+% The definition of \make@@halfpage depends on the target layout.
+\def\make@@halfsidebyside#1{%
+ \global\setbox#1=\vbox to\@targetheight{\vss
+ \hbox to.5\@targetwidth{\hss\box#1\hss}\vss}}
+\def\make@@halftopbottom#1{%
+ \global\setbox#1=\vbox to.5\@targetheight{\vss
+ \hbox to\@targetwidth{\hss\box#1\hss}\vss}}
+\def\make@@halfpage{\make@@halfsidebyside}
+%
+% The pages are generaly shipped in pairs:
+\def\ship@twoup{%
+ \begingroup
+ \voffset=-\inv@targetmag in
+ \hoffset=\voffset
+ \global\advance\@physicalpage by 1
+ \count\z@=\@physicalpage
+ \csname &normal@shipout\endcsname\make@fullpage
+ \endgroup}
+\let\ship@@@leftpage\relax
+\def\ship@@@rightpage{\ship@twoup}
+%
+% The definition of \make@fullpage depends on the layout:
+\def\make@fullsidebyside{%
+ \hbox{\box\@leftpage\pagesep@sidebyside\box\@rightpage}}
+\def\make@fulltopbottom{%
+ \vbox{\offinterlineskip\box\@leftpage\pagesep@topbottom\box\@rightpage}}
+\def\make@fullpage{\make@fullsidebyside}
+%
+% A vertical or horizontal rule can be inserted. These can be redefined
+% for other tricks:
+\def\pagesep@sidebyside{%
+ \begingroup
+ \advance\pageseplength by \pagesepoffset
+ \pagesepwidth=\inv@targetmag\pagesepwidth
+ \kern -.5\pagesepwidth
+ \vrule height \inv@targetmag\pageseplength
+ depth -\inv@targetmag\pagesepoffset
+ width \pagesepwidth
+ \kern -.5\pagesepwidth
+ \endgroup}
+\def\pagesep@topbottom{%
+ \begingroup
+ \pagesepwidth=\inv@targetmag\pagesepwidth
+ \vskip -.5\pagesepwidth
+ \moveright\inv@targetmag\pagesepoffset\hbox{%
+ \vrule height\pagesepwidth width\inv@targetmag\pageseplength}%
+ \vskip -.5\pagesepwidth
+ \endgroup}
+%
+% With the dvidvi layout, the pages are shipped individually:
+\def\ship@dvidvi#1{%
+ \begingroup
+ \voffset=-\inv@targetmag in
+ \hoffset=\voffset
+ \csname &normal@shipout\endcsname\box#1%
+ \endgroup}
+%
+% With the booklet or Booklet layout, the pages are saved rather than
+% shipped.
+\begingroup
+\let\newbox\relax
+\gdef\save@booklet#1{%
+ \begingroup
+ \globaldefs=1
+ \advance\bookletpage by 1
+ \expandafter\newbox\csname bookletbox\the\bookletpage\endcsname
+ \expandafter\setbox\csname bookletbox\the\bookletpage\endcsname\box#1%
+ \endgroup}
+\endgroup
+%
+% The pages are then printed at the end with the following macros:
+\def\make@bookletpage#1{%
+ \setbox\ifodd#1\@rightpage\else\@leftpage\fi=%
+ \expandafter\box\csname bookletbox\the#1\endcsname}
+\def\booklet@loop{%
+ \count\z@\rightpagenumber
+ \make@bookletpage\leftpagenumber
+ \make@bookletpage\rightpagenumber
+ \ship@twoup
+ \booklet@@loop}
+\def\booklet@@loop{%
+ \advance\rightpagenumber by 2
+ \advance\leftpagenumber by -2
+ \ifnum\leftpagenumber<1\else\expandafter\booklet@loop\fi}
+\def\Booklet@@loop{%
+ \advance\rightpagenumber by 1
+ \advance\leftpagenumber by -1
+ \ifnum\leftpagenumber<\rightpagenumber\else\expandafter\booklet@loop\fi}
+%
+% This one is easy:
+\def\twoupemptypage{\shipout\hbox{}}
+%
+% This clears a whole target page if there is a saved left page. Note that
+% this does not invoke the output routine; i.e., it is not like \clearpage
+% or \supereject. See \twoupclearpage and \twoupeject below.
+\def\twoup@eject{%
+ \if@leftpage\else
+ \global\setbox\@rightpage\hbox{}%
+ \make@@halfpage\@rightpage\ship@@@rightpage
+ \global\@leftpagetrue
+ \fi}
+%
+% This is the definition of \twoup@eject with the booklet option:
+\def\twoup@eject@booklet{%
+ \leftpagenumber\bookletpage
+ \advance\leftpagenumber by 3
+ \divide\leftpagenumber by 4
+ \multiply\leftpagenumber by 4
+ \rightpagenumber=1
+ \ifnum\leftpagenumber>\bookletpage
+ \setbox\@leftpage\hbox{}%
+ \make@@halfpage\@leftpage
+ \loop
+ \setbox\@rightpage\copy\@leftpage
+ \save@booklet\@rightpage
+ \ifnum\leftpagenumber>\bookletpage
+ \repeat
+ \fi
+ \booklet@loop}
+%
+% This modification is needed for \LaTeX in order to get the last page
+% printed out if the final page is a left page (the catcode business is
+% because \enddocument is \let to \bye in amstex):
+\begingroup
+\expandafter\ifx\csname @latexerr\endcsname\relax
+ \catcode`\>=14\else\catcode`\>=9\fi\relax
+>>\gdef\twoupclearpage{\clearpage\twoup@eject}
+>>\expandafter\@temptokena\expandafter{\enddocument}
+>>\xdef\enddocument{\noexpand\twoupclearpage\the\@temptokena}
+\endgroup
+%
+% For most other macro packages we could just leave be and all pages would
+% always be printed because of the way the \end primitive works (except that
+% TeX will go bonkers with the booklet layout). However,
+% sometimes a blank filler page would be printed *with* headings. We prefer
+% the filler page to be truly blank. To achieve this, we hack the definition
+% of \end. This may cause problems with some macros.
+\expandafter\ifx\csname @latexerr\endcsname\relax
+ \let\twoup@@@end\end
+ \def\end{\twoup@eject\twoup@@@end}
+ \def\twoupeject{\par\vfil\supereject\twoup@eject}
+\fi
+%
+% This is one workaround for the page cross-references problem
+\def\TwoupWrites{%
+ \let\TwoupSaved@write\write
+ \let\TwoupSaved@read\read
+ \let\TwoupSaved@openout\openout
+ \let\TwoupSaved@closeout\closeout
+ \def\write{\TwoupSaved@write-1{}\immediate\TwoupSaved@write}%
+ \def\read{\TwoupSaved@write-1{}\immediate\TwoupSaved@read}%
+ \def\openout{\TwoupSaved@write-1{}\immediate\TwoupSaved@openout}%
+ \def\closeout{\TwoupSaved@write-1{}\immediate\TwoupSaved@closeout}%
+ \let\TwoupWrites\relax}
+%
+% Defaults:
+\def\twouparticle{%
+ \target{\magstepminus1}{11in}{8.5in}%
+ \source{\magstep0}{8.5in}{11in}}
+\def\twoupplain{%
+ \target{\magstepminus2}{11in}{8.5in}%
+ \source{\magstep0}{8.5in}{11in}}
+\def\twouplegaltarget{%
+ \target{\magstepminus1}{14in}{8.5in}%
+ \source{\magstep0}{8.5in}{11in}}%
+\def\twouplandscape{%
+ \target{\magstepminus2}{8.5in}{11in}%
+ \source{\magstep0}{11in}{8.5in}%
+ \targetlayout{topbottom}}
+\expandafter\ifx\csname @latexerr\endcsname\relax
+ \twoupplain\else\twouparticle\fi
+\pagesepwidth 0pt
+\pageseplength 6.5in
+\pagesepoffset 1in
+%
+\expandafter\catcode`\@=\TheAtCode\relax
+\endinput
+%% END 2up.tex/2up.sty
diff --git a/macros/generic/2up/Changes b/macros/generic/2up/Changes
new file mode 100644
index 0000000000..b88341c02c
--- /dev/null
+++ b/macros/generic/2up/Changes
@@ -0,0 +1,9 @@
+$Id: Changes 318 2010-05-15 07:29:54Z herbert $
+
+--- 2up.tex
+1.3 2010-05-14 - small changes to the code (hv)
+ - LPPL license (hv)
+
+
+--- 2up-doc.tex
+2010-05-14 - updated and LaTeX2e compatible (hv)
diff --git a/macros/generic/2up/Makefile b/macros/generic/2up/Makefile
new file mode 100644
index 0000000000..9893c8583b
--- /dev/null
+++ b/macros/generic/2up/Makefile
@@ -0,0 +1,72 @@
+
+# `Makefile' for `multido.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = 2up
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+# GS_OPTIONS=-dAutoRotatePages=/None
+ ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+# if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+# if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+# makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+# makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+# $(basename $<).glo
+# bibtex $(basename $<)
+# $(LATEX) $<
+# $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .Roessler .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+ $(RM) data3d.Roessler
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro ~/Links/dvips-local/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/macros/generic/2up/README b/macros/generic/2up/README
new file mode 100644
index 0000000000..42e5388dcb
--- /dev/null
+++ b/macros/generic/2up/README
@@ -0,0 +1,9 @@
+Save the files 2up.sty|tex in a directory, which is part of your
+local TeX tree.
+Then do not forget to run texhash to update this tree.
+For more information see the documentation of your LATEX distribution
+on installing packages into your LATEX distribution or the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+
diff --git a/macros/generic/TeX-PS/cmyk-hax/README b/macros/generic/TeX-PS/cmyk-hax/README
new file mode 100644
index 0000000000..5212f0f670
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/README
@@ -0,0 +1,34 @@
+The package CMYK-HAX contains the following files:
+
+cmyk-hax.tex - The set of macros for making color separation
+rules.tex - The patch for DVIPS rules definitions
+cmyk-doc.pdf - Documentation in Polish
+fountain.eps - EPS file used in sample1.tex
+gdansk.eps - EPS file used in sample2.tex
+readme - This file
+sam1-sep.bat - The batch file for sample1.tex
+sample1.tex - Example 1: color separation for outline graphics and text
+sample2.tex - Example 2: color separation for outline graphics
+ by color changes
+sample3.tex - Example 3: color separation for bitmap
+sample4.tex - Example 4: color separation for bitmap with color changes
+screen.eps - EPS file used in sample3.tex and sample4.tex
+
+=============================================================================
+
+Pakiet CMYK-HAX zawiera nast/epuj/ace pliki:
+
+cmyk-hax.tex - Pakiet makr do wykonywania wyci/ag/ow barwnych
+rules.tex - /Lata na DVIPS-owe definicje ruli
+cmyk-doc.pdf - Dokumentacja po polsku
+fountain.eps - Plik EPS u/zywany w przyk/ladzie sample1.tex
+gdansk.eps - Plik EPS u/zywany w przyk/ladzie sample2.tex
+readme - Ten plik
+sam1-sep.bat - Plik wsadowy do przyk/ladu sample1.tex
+sample1.tex - Przyk/lad 1: rozbarwianie grafiki obwiedniowej i tekst/ow
+sample2.tex - Przyk/lad 2: rozbarwianie grafiki obwiedniowej poprzez
+ podmian/e kolor/ow
+sample3.tex - Przyk/lad 3: rozbarwianie mapy bitowej
+sample4.tex - Przyk/lad 4: rozbarwianie mapy bitowej wraz
+ z podmian/a kolor/ow
+screen.eps - Plik EPS u/zywany w przyk/ladach sample3.tex i sample4.tex
diff --git a/macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdf b/macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdf
new file mode 100644
index 0000000000..4477328289
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/cmyk-doc.pdf
Binary files differ
diff --git a/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex b/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex
new file mode 100644
index 0000000000..4d397c2f45
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex
@@ -0,0 +1,673 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CMYK-HAX.TEX:
+% E This is a set of TeX macros supporting color separation and
+% substitution using TeX/PostScript environment. Needs DVIPS and
+% COLORDVI from standard DVIPS distribution.
+%
+% P Zestaw makr TeX-owo-PostScript-owych do tworzenia wyci/ag/ow barwnych
+% i podmiany kolor/ow. Wsp/o/lpracuje ze sterownikiem DVIPS
+% i zestawem makr COLORDVI (ze standardowej dystrybucji DVIPS-a);
+%
+% AUTHORS' COORDINATES:
+% BOP s.c.
+% ul. Piastowska 70, 80-363 Gda\'nsk, Poland
+% tel./fax +48 58 553-46-59
+% email: bop@bop.com.pl
+%
+% VERSION 0.75, 15.06.2000
+% Public domain
+%
+% HISTORY:
+% E version released during the GUST annual meeting Bacho\TeX'95.
+% P wersja udost/epniona podczas Bacho\TeX'95.
+% VERSION 0.51, 5 V 1995:
+% E macro \CMYKinit added (it places necessary def's in a PS prolog).
+% P dodane zosta/lo makro inicjalizacyjne `\CMYKinit',
+% kt/ore umieszcza w prologu PS u/zywane definicje.
+% VERSION 0.52, 27 VI 1995:
+% E the `currentpoint' fault in case of empty current path; now `currentpoint'
+% is called by the `stopped' command, which makes an error action
+% availlable.
+% P `currentpoint' generowa/l b/l/ad gdy bie/z/aca /scie/zki by/la pusta;
+% obecnie `currentpoint' jest wykonywane przez `stopped',
+% co daje mo/zliwo/s/c zareagowania na b/l/ad.
+% VERSION 0.53, 23 VII 1996:
+% E 1. the constant `epsilon=0.005' entered to do approximed
+% color comparations.
+% 2. \PSscreen became a \special.
+% P 1. wprowadzono sta/l/a `epsilon=0.005', kt/ora jest dok/ladno/sci/a
+% por/ownania kolor/ow.
+% 2. \PSscreen by/l dot/ad makrem TeX-owym o tre/sci PS-owej
+% sensowne jest, aby sta/l si/e \specialem
+% VERSION 0.54, 8 XI 1996 r.
+% E `show' redefinition allows the text outlining.
+% P redefinicja `show' umo/zliwia ju/z dok/ladanie obw/odki do tekst/ow.
+% VERSION 0.60, 11 IV 1997:
+% E processing of CMYK bitmaps enabled
+% P umo/zliwienie przetwarzania bitmap CMYK
+% VERSION 0.61, 11.VIII.1997
+% E `adddownstroke' added (stroke under fill)
+% P dodano `adddownstroke' (rysowan/a pod fillem)
+% VERSION 0.62, 24.IX.1997
+% E `setscreen' gets all parameters
+% P `setscreen' zyskuje wszystkie parametry podawane explicite
+% nie korzysta si/e z warto/sci `currentscreen'
+% VERSION 0.64, 9.VII.1999
+% E bitmap color separation added, delblack (also for imagemask),
+% additional 5-th all-white bitmap separation (\BITinit and /to_sep_bitmap true def /hax_sep 4 def)
+% additional 6-th all-black bitmap separation (\BITinit and /to_sep_bitmap true def /hax_sep 5 def)
+% P do/l/aczono rozbarwianie bitmap, delblack (tak/ze dla imagemask),
+% 5. bia/ly wyci/ag z bitmap (\BITinit oraz /to_sep_bitmap true def /hax_sep 4 def)
+% 6. czarny wyci/ag z bitmap (\BITinit oraz /to_sep_bitmap true def /hax_sep 5 def)
+% VERSION 0.65, 6.VIII.1999
+% E 5-th and 6-th bitmap separation were improved (`pop' added
+% in the case of not-dictionary images)
+% P poprawka w 5. i 6. wyci/agu bitmap (dodano `pop' w bitmapach
+% nies/lownikowych)
+% VERSION 0.66, 13.IX.1999
+% E indexed color bitmaps support (for `colormap')
+% P obs/luga bitmap paletowych (do `colormap')
+% VERSION 0.67, 21.01.2000
+% E support for multisource `colorimage' -- only CMYK separations
+% P obs/luga wersji wielo/xr/od/lowej polecenia `colorimage'
+% -- na razie tylko CMYK i tylko separacja
+% VERSION 0.68, 16.03.2000
+% E \projectCMYK calls setcmykcolor explicite
+% P \projectCMYK wywo/luje explicite setcmykcolor
+% VERSION 0.70, 27.03.2000
+% E image, colorimage and imagemask operators are transferred to
+% their dictionary form and we support them almost completly;
+% limitations: we support only bitmaps with
+% ImageType = 1, in one of Device Color Spaces,
+% when BitsPerComponent = 1 (other values of BitsPerComponent
+% we allow for imagemask, of corse, and for DeviceGray model --
+% without color substitution, unfortunately)
+% P oparatory image, colorimage oraz imagemask przeniesione do wersji
+% s/lownikowej i prawie kompletnie obs/lu/zone;
+% ograniczenia: obs/lugujemy tylko bitmapy, dla kt/orych
+% ImageType = 1, model barw nale/zy do klasy Device Color Spaces,
+% BitsPerComponent = 8 (inne warto/sci BitsPerComponent dopuszczamy
+% oczywi/scie dla imagemask oraz w przypadku modelu DeviceGray --
+% wtedy jednak nie potrafimy podmienia/c kolor/ow)
+% VERSION 0.71, 10.04.2000
+% E 3 bugs fixed:
+% 1) we already support MultipleDataSources in ImageDict
+% 2) it was a superfluous pop in merge_multi3
+% 3) 1 level of redefinition setcmykcolor (hax_setcmykcolor) added
+% P usuni/eto 3 pluskwy w obs/ludze image:
+% 1) ju/z obs/luguje si/e MultipleDataSources w ImageDict
+% 2) by/l zb/edny pop w merge_multi3
+% 3) dodano 1 poziom redefinicji setcmykcolor (hax_setcmykcolor)
+% VERSION 0.73, 28.04.2000
+% E 1) \sepbitmapfalse turns bitmap separation off,
+% \sepbitmaptrue turns bitmap separation on
+% 2) missing ImageDict parameter added before ori_image
+% P 1) \sepbitmapfalse wy/l/acza rozbarwianie bitmap,
+% \sepbitmaptrue przywraca rozbarwianie bitmap
+% 2) dodano brakuj/acy parametr ImageDict przed ori_image
+% VERSION 0.74, 11.05.2000
+% E Bug in \delblacktrue handling has been fixed;
+% the colors created from black with changecolor can be separated now.
+% P Poprawiona pluskwa w obs/ludze \delblacktrue;
+% mo/zliwe staje si/e rozbarwianie kolor/ow powsta/lych z podmiany
+% koloru czarnego.
+% VERSION 0.75, 15.06.2000
+% E \convertbitmaptrue turns on conversion of RGB bitmaps to CMYK,
+% to allow them to be separated
+% \convertbitmapfalse truns conversion off, by default, RGB bitmaps
+% are neither converted nor separated
+% P \convertbitmaptrue w/l/acza konwersj/e bitmap RGB do modelu CMYK,
+% co umo/zliwia ich rozbarwianie
+% \convertbitmapfalse wy/l/acza konwersj/e bitmap RGB do modelu CMYK,
+% co uniemo/zliwia ich rozbarwianie; domy/slnie bitmapy RGB nie s/a
+% ani konwertowane, ani rozbarwiane
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\edef\slashcatcode {\the\catcode`\/}
+\catcode`\/12
+%
+\def\CMYKinit {\special {! userdict begin
+%
+/ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor load def} ifelse
+/ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor load def} ifelse
+/ori_setgray where {pop} {/ori_setgray /setgray load def} ifelse
+/ori_colorimage where {pop} {/ori_colorimage /colorimage load def} ifelse
+/ori_image where {pop} {/ori_image /image load def} ifelse
+/ori_imagemask where {pop} {/ori_imagemask /imagemask load def} ifelse
+/ori_fill where {pop} {/ori_fill /fill load def} ifelse
+/ori_eofill where {pop} {/ori_eofill /eofill load def} ifelse
+/ori_stroke where {pop} {/ori_stroke /stroke load def} ifelse
+/ori_show where {pop} {/ori_show /show load def} ifelse
+/hax_setcmykcolor /ori_setcmykcolor load def
+%
+/maybe_black {
+ 4 copy
+ 1 sub abs epsilon le exch
+ 0 sub abs epsilon le and exch
+ 0 sub abs epsilon le and exch
+ 0 sub abs epsilon le and
+ /if_delblack exch def
+} def
+%
+/my_fill {userdict begin if_delblack {newpath} {ori_fill} ifelse end} def
+/my_eofill {userdict begin if_delblack {newpath} {ori_eofill} ifelse end} def
+/my_stroke {userdict begin if_delblack {newpath} {ori_stroke} ifelse end} def
+/my_show {userdict begin if_delblack {false charpath currentpoint newpath moveto} {ori_show} ifelse end} def
+%
+/eofill {userdict begin my_eofill end} def
+/fill {userdict begin my_fill end} def
+/stroke {userdict begin my_stroke end} def
+/show {userdict begin my_show end} def
+%
+/setcmykcolor {userdict begin
+ /k_ exch def /y_ exch def /m_ exch def /c_ exch def
+ c_ m_ y_ k_ hax_setcmykcolor end} def
+/setgray {ori_setgray currentcmykcolor setcmykcolor} def
+/setrgbcolor {ori_setrgbcolor currentcmykcolor setcmykcolor} def
+%
+/hax_image {
+ dup type cvlit /dicttype eq {
+ /ImageDict exch def
+ currentcolorspace dup length 1 eq % only Device color spaces
+ ImageDict /ImageType get 1 eq and {% and ImageType 1 are supported
+ 0 get
+ dup /DeviceRGB eq {/ncomp 3 def} if
+ dup /DeviceGray eq {/ncomp 1 def} if
+ /DeviceCMYK eq {/ncomp 4 def} if
+ ImageDict /BitsPerComponent get 8 ne % only gray image separations
+ /ncomp 1 ne and {/ncomp 0 def} if % allowed if sample is not a byte
+ } {pop /ncomp 0 def} ifelse
+ } {
+ false 1 makeimagedict
+ } ifelse
+ ncomp 0 eq {ImageDict ori_image} {hax_image_} ifelse
+} def
+%
+/hax_colorimage {
+ makeimagedict
+ hax_image_
+} def
+%
+/makeimagedict {
+ dup /ncomp exch def
+ dup 4 eq {/DeviceCMYK setcolorspace} if
+ dup 3 eq {/DeviceRGB setcolorspace} if
+ 1 eq {/DeviceGray setcolorspace} if
+ /ImageDict 7 dict def ImageDict begin
+ {/MultipleDataSources true def
+ ncomp array astore} if % store multi source in array
+ /DataSource exch def
+ /ImageMatrix exch def
+ /BitsPerComponent exch def
+ /Height exch def
+ /Width exch def
+ /Decode [ncomp {0 1} repeat] def
+ /ImageType 1 def
+ end
+} def
+%
+/data_str 65532 string def % very long
+/data_str_ 8192 string def
+/merge_multi4 {
+ ImageDict /DataSource get aload pop
+ dup type cvlit /filetype eq {
+ /fdatsrck exch def
+ /fdatsrcy exch def
+ /fdatsrcm exch def
+ /fdatsrcc exch def
+ /datasrck {fdatsrck data_str_ readstring pop} def
+ /datasrcy {fdatsrcy data_str_ readstring pop} def
+ /datasrcm {fdatsrcm data_str_ readstring pop} def
+ /datasrcc {fdatsrcc data_str_ readstring pop} def
+ } {
+ /datasrck exch def
+ /datasrcy exch def
+ /datasrcm exch def
+ /datasrcc exch def
+ } ifelse
+ ImageDict /DataSource {
+ data_str
+ 0 datasrcc {3 copy put pop 4 add} forall pop
+ 1 datasrcm {3 copy put pop 4 add} forall pop
+ 2 datasrcy {3 copy put pop 4 add} forall pop
+ 3 datasrck {3 copy put pop 4 add} forall
+ 3 sub 0 exch getinterval
+ } put
+} def
+%
+/merge_multi3 {
+ ImageDict /DataSource get aload pop
+ dup type cvlit /filetype eq {
+ /fdatsrcb exch def
+ /fdatsrcg exch def
+ /fdatsrcr exch def
+ /datasrcb {fdatsrcb data_str_ readstring pop} def
+ /datasrcg {fdatsrcg data_str_ readstring pop} def
+ /datasrcr {fdatsrcr data_str_ readstring pop} def
+ } {
+ /datasrcb exch def
+ /datasrcg exch def
+ /datasrcr exch def
+ } ifelse
+ ImageDict /DataSource {
+ data_str
+ 0 datasrcr {3 copy put pop 3 add} forall pop
+ 1 datasrcg {3 copy put pop 3 add} forall pop
+ 2 datasrcb {3 copy put pop 3 add} forall
+ 2 sub 0 exch getinterval
+ } put
+} def
+%
+/i_Str 3 string def
+/O_Str 4 string def
+/UCR {0.5 mul} def
+/BG {0.7 mul} def
+/min {1 index 1 index le {pop} {exch pop} ifelse} def
+/max {1 index 1 index ge {pop} {exch pop} ifelse} def
+%
+/RGBtoCMYK {% RGB pixel is on the stack
+ % RGB --> CMYK conversion (Red Book p. 306)
+ dup 0 get R_scale mul R_shift add /c_i exch def
+ dup 1 get G_scale mul G_shift add /m_i exch def
+ 2 get B_scale mul B_shift add /y_i exch def
+ /k_i c_i m_i y_i min min def
+ O_Str
+ dup 0 255 0 c_i k_i UCR sub cvi max min put
+ dup 1 255 0 m_i k_i UCR sub cvi max min put
+ dup 2 255 0 y_i k_i UCR sub cvi max min put
+ dup 3 255 0 k_i BG cvi max min put
+} def
+%
+/RGBtoCMYKfilter {
+ ImageDict /Decode get aload pop % use Decode for RGB -> CMYK conversion
+ 2 copy sub /B_scale exch def pop 255 mul 255 exch sub /B_shift exch def
+ 2 copy sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def
+ 2 copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+ /rtc_file ImageDict /DataSource get def
+ ImageDict /DataSource {rtc_file i_Str readstring {RGBtoCMYK} if}
+ 0 () /SubFileDecode filter put
+ /DeviceCMYK setcolorspace /ncomp 4 def
+ ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def
+%
+/sep_str 8192 string def
+/SEP_CMYK {
+ 0
+ hax_sep 4 3 index length 1 sub {
+ 2 index exch get
+ 3 copy put pop
+ 1 add
+ } for
+ dup 0 ne {0 exch getinterval}{pop pop ()} ifelse
+} def
+%
+/SEPfilters {
+ ncomp 4 eq {
+ hax_sep 3 le {
+ /sepproc /SEP_CMYK load def
+ ImageDict begin /Decode [
+ Decode hax_sep 2 mul 1 add get
+ Decode hax_sep 2 mul get
+ ] def end
+ } {
+ /sepproc {dup length 4 idiv 0 exch getinterval} def
+ } ifelse
+ /sep_file ImageDict /DataSource get def
+ ImageDict /DataSource {sep_file sep_str readstring pop sepproc} 0 ()
+ /SubFileDecode filter put
+ /DeviceGray setcolorspace
+ } {% ncomp 1 eq
+ hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if
+ } ifelse
+ hax_sep 4 eq {ImageDict /Decode [ 1 1 ] put} if
+ hax_sep 5 eq {ImageDict /Decode [ 0 0 ] put} if
+} def
+%
+/change_str 12288 string def % must be a multiplicity of 3 and 4
+/CHANGEfilter {
+ /change_file ImageDict /DataSource get def
+ ImageDict /DataSource {
+ change_file change_str readstring pop
+ 0 ncomp 2 index length ncomp sub {
+ 1 index exch 2 copy ncomp
+ getinterval changebits putinterval
+ } for
+ } 0 () /SubFileDecode filter put
+} def
+%
+/hax_image_ {
+ ImageDict /MultipleDataSources known {
+ ImageDict /MultipleDataSources get {
+ ImageDict /MultipleDataSources false put
+ ImageDict /DataSource get length
+ dup 4 eq {merge_multi4} if
+ dup 3 eq {merge_multi3} if
+ 1 eq {ImageDict begin /DataSource DataSource aload pop def end} if
+ } if
+ } if
+ ImageDict begin
+ /DataSource dup load Width BitsPerComponent mul 7 add 8 idiv
+ Height ncomp mul mul () /SubFileDecode filter def
+ end
+ to_change_bitmap {CHANGEfilter} if
+ ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if
+ ncomp 3 ne to_sep_bitmap and {SEPfilters} if
+ ImageDict ori_image
+} def
+%
+/zero_data_str 65532 string def % length of the data_str
+/hax_imagemask {
+ if_delblack {
+ dup type cvlit /dicttype eq {
+ /ImageDict exch def
+ } {
+ /ImageDict 7 dict def ImageDict begin
+ /DataSource exch def
+ /ImageMatrix exch def
+ /Decode exch {[1 0]} {[0 1]} ifelse def
+ /Height exch def
+ /Width exch def
+ /BitsPerComponent 1 def
+ /ImageType 1 def
+ end
+ } ifelse
+ ImageDict begin
+ /DataSource load Width 7 add 8 idiv Height mul
+ () /SubFileDecode filter
+ end /mask_file exch def
+ ImageDict /DataSource {
+ zero_data_str 0 mask_file data_str readstring pop length getinterval
+ } 0 () /SubFileDecode filter put
+ ImageDict /Decode [1 0] put
+ ImageDict ori_imagemask
+ } {ori_imagemask} ifelse
+} def
+%
+/truebp {0 matrix defaultmatrix matrix currentmatrix
+ matrix invertmatrix matrix concatmatrix dtransform
+ dup mul exch dup mul add sqrt} def
+/truein {72 mul truebp} def
+/truept {72.27 div truein} def
+/truesp {65536 div truept} def
+/truedd {1238 mul 1157 div truept} def
+/truecc {12 mul truedd} def
+/truemm {25.4 div truein} def
+/truecm {10 mul truemm} def
+%
+/epsilon 0.005 def
+/if_delblack false def
+/to_change_bitmap false def
+/to_convert_bitmap false def
+/to_sep_bitmap false def
+%
+currentcmykcolor setcmykcolor
+%
+end % userdict
+}}% \special \CMYKinit
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\PSbegingroup {\begingroup \special{ps: save }}
+\def\PSendgroup {\special{ps: restore }\endgroup}
+%
+\def\forcolor #1{\def\thecolor{#1}}
+\def\checkcolor {\thecolor\space count 4 lt {(Not CMYK ) print} if
+% k_ eq exch y_ eq and exch m_ eq and exch c_ eq and
+% comparison of colours with a predefined accurracy (epsilon):
+ k_ sub abs epsilon le exch
+ y_ sub abs epsilon le and exch
+ m_ sub abs epsilon le and exch
+ c_ sub abs epsilon le and }
+%
+\def\changefill #1{%
+ \edef\changefills{\changefills \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\changestroke #1{%
+ \edef\changestrokes{\changestrokes \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\changecolor #1{%
+ \edef\changecolors{\changecolors \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\addfill #1{%
+ \edef\addfills{\addfills \checkcolor {addfill} if }%
+ \edef\changefills{\changefills \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\adddownstroke #1{%
+ \edef\addstrokes{\addstrokes \checkcolor {adddownstroke} if }%
+ \edef\changestrokes{\changestrokes \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\addstroke #1{%
+ \edef\addstrokes{\addstrokes \checkcolor {addstroke} if }%
+ \edef\changestrokes{\changestrokes \checkcolor
+ {#1 hax_setcmykcolor} if }}
+\def\addcolor #1{\addstroke{#1}\addfill{#1}}
+\def\delfill {%
+ \edef\delfills{\delfills \checkcolor {delfill} if }}
+\def\delstroke {%
+ \edef\delstrokes{\delstrokes \checkcolor {delstroke} if }}
+\def\delcolor {%
+ \edef\delcolors{\delcolors \checkcolor {delfill delstroke} if }}
+\def\strokehook #1{%
+ \edef\strokehooks{\strokehooks \checkcolor {#1} if }}
+\def\fillhook #1{%
+ \edef\fillhooks{\fillhooks \checkcolor {#1} if }}
+\def\strokeup {%
+ \edef\changestrokes{\changestrokes \checkcolor {upstroke} if }}
+\def\fillup {%
+ \edef\changestrokes{\changestrokes \checkcolor {upfill} if }}
+%
+\def\forbitmap #1{\def\thebitcolor{<#1>}}
+\def\checkbitcolor {dup \thebitcolor\space eq }
+%
+\def\changebitmap #1{%
+ \edef\changebits{\changebits \checkbitcolor {pop <#1>} if }}
+%
+\def\setCMYKchange{%
+ \edef\changestrokes{}%
+ \edef\changefills{}%
+ \edef\changecolors{}%
+ \edef\addstrokes{}%
+ \edef\addfills{}%
+ \edef\delstrokes{}%
+ \edef\delfills{}%
+ \edef\delcolors{}%
+ \edef\strokehooks{}%
+ \edef\fillhooks{}%
+ \edef\changebits{}%
+}
+%
+\def\fillinitials{%
+ /to_fill true def
+ /to_stroke false def
+ /to_upstroke false def
+}
+\def\strokeinitials{%
+ /to_fill false def
+ /to_stroke true def
+ /to_upstroke true def
+}
+%
+\def\useCMYKchange{%
+ \special{ps:
+ userdict begin
+ /addfill {/to_fill true def} def
+ /delfill {/to_fill false def} def
+ /upfill {/to_upstroke false def} def
+ /addstroke {/to_stroke true def upstroke} def
+ /adddownstroke {/to_stroke true def upfill} def
+ /delstroke {/to_stroke false def} def
+ /upstroke {/to_upstroke true def} def
+ /current_point {{currentpoint} stopped {0 0} if} def
+ %
+ /do_stroke {
+ to_stroke {gsave \changestrokes \strokehooks my_stroke grestore} if
+ } def
+ %
+ /eofill {
+ userdict begin
+ \fillinitials \delfills \delcolors \addstrokes
+ current_point
+ to_upstroke {} {do_stroke} ifelse
+ to_fill {gsave \changefills \fillhooks my_eofill grestore} if
+ to_upstroke {do_stroke} if
+ newpath moveto
+ end
+ } def
+ %
+ /fill {
+ userdict begin
+ \fillinitials \delfills \delcolors \addstrokes
+ current_point
+ to_upstroke {} {do_stroke} ifelse
+ to_fill {gsave \changefills \fillhooks my_fill grestore} if
+ to_upstroke {do_stroke} if
+ newpath moveto
+ end
+ } def
+ %
+ /stroke {
+ userdict begin
+ \strokeinitials \delstrokes \delcolors \addfills
+ current_point
+ to_upstroke {} {do_stroke} ifelse
+ to_fill {gsave \changefills \fillhooks my_eofill grestore} if
+ to_upstroke {do_stroke} if
+ newpath moveto
+ end
+ } def
+ %
+ /show {
+ userdict begin
+ \fillinitials \delfills \delcolors \addstrokes
+ to_upstroke {} {dup false gsave charpath do_stroke grestore} ifelse
+ to_fill {dup gsave my_show grestore} {} ifelse
+ to_upstroke {dup false gsave charpath do_stroke grestore} if
+ false charpath current_point newpath moveto
+ end
+ } def
+ %
+ /setcmykcolor {
+ userdict begin
+ /k_ exch def /y_ exch def /m_ exch def /c_ exch def
+ c_ m_ y_ k_ hax_setcmykcolor \changecolors
+ end
+ } def
+ %
+ currentcmykcolor setcmykcolor
+ end}%
+ \ifx\changebits\empty\else
+ \BITinit
+ \special{ps:
+ userdict begin
+ /to_change_bitmap true def
+ /changebits {\changebits} def
+ end}%
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\cyan {1 0 0 0}
+\def\magenta {0 1 0 0}
+\def\yellow {0 0 1 0}
+\def\black {0 0 0 1}
+\def\white {0 0 0 0}
+%
+\def\ScreenFrequency {150}
+\def\Cangle {15}
+\def\Mangle {75}
+\def\Yangle {0}
+\def\Kangle {45}
+%
+\def\PSscreen #1{\ifx\ScreenFrequency\empty
+ \special{ps: currentscreen exch pop #1 exch setscreen}%
+ \else
+ \special{ps:
+ /dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def
+ \ScreenFrequency\space #1 {dot_spot} setscreen
+ }\fi}
+%
+\newif\ifdelblack \delblackfalse
+\newif\ifbitmapsep \bitmapseptrue
+%
+\def\sepbitmaptrue{%
+ \bitmapseptrue
+ \BITinit
+ \special{ps:
+ userdict begin
+ /to_sep_bitmap true def
+ end}}
+%
+\def\sepbitmapfalse{%
+ \bitmapsepfalse
+ \special{ps:
+ userdict begin
+ /to_sep_bitmap false def
+ end}}
+%
+\def\convertbitmaptrue{%
+ \BITinit
+ \special{ps:
+ userdict begin
+ /to_convert_bitmap true def
+ end}}
+%
+\def\convertbitmapfalse{%
+ \special{ps:
+ userdict begin
+ /to_convert_bitmap false def
+ end}}
+%
+\def\BITinit{\special{ps:
+ userdict begin
+ /image /hax_image load def
+ /colorimage /hax_colorimage load def
+ /imagemask /hax_imagemask load def
+ end}}
+%
+\def\projectCMYK #1{%
+ \edef\projectcolor{#1}%
+ \ifx\projectcolor\cyan
+ \special{ps:
+ userdict begin
+ /hax_sep 0 def
+ /hax_setcmykcolor {\ifdelblack maybe_black \fi pop pop pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Cangle
+ \else \ifx\projectcolor\magenta
+ \special{ps:
+ userdict begin
+ /hax_sep 1 def
+ /hax_setcmykcolor {\ifdelblack maybe_black \fi pop pop exch pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Mangle
+ \else \ifx\projectcolor\yellow
+ \special{ps:
+ userdict begin
+ /hax_sep 2 def
+ /hax_setcmykcolor {\ifdelblack maybe_black \fi pop exch pop exch pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Yangle
+ \else \ifx\projectcolor\black
+ \special{ps:
+ userdict begin
+ /hax_sep 3 def
+ /hax_setcmykcolor {exch pop exch pop exch pop 1 exch sub ori_setgray} def
+ end
+ }%
+ \PSscreen\Kangle
+ \fi \fi \fi \fi
+ \ifbitmapsep\sepbitmaptrue\fi
+ \special{ps: currentcmykcolor setcmykcolor}%
+}
+%
+\def\CMYKlabels #1{{#1% #1 is a font csname
+ \Cyan{CYAN}
+ \Magenta{MAGENTA}
+ \Yellow{YELLOW}
+ \Black{BLACK}}}
+%
+\ifx\notCMYKinit\undefined\CMYKinit\fi
+%
+\catcode`\/\slashcatcode
+%
+\endinput
diff --git a/macros/generic/TeX-PS/cmyk-hax/fountain.eps b/macros/generic/TeX-PS/cmyk-hax/fountain.eps
new file mode 100644
index 0000000000..f6228d76cc
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/fountain.eps
@@ -0,0 +1,302 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 132 201 728 472
+%%Creator: CorelDRAW!
+%%Title: FOUNTAIN.EPS
+%%CreationDate: Fri Apr 28 08:32:57 1995
+
+%%DocumentFonts:
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------
+% Copyright 1992 Corel Corporation. All rights reserved.
+/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def
+/ld{load def}bd/xd{exch def}bd/_ null def
+/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def
+/$n _ def/$o 0 def/$fil 0 def/$bkg false def
+/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def
+/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def
+/$ptm matrix def/$ttm matrix def/$stm matrix def
+/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def
+currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd
+/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def
+/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld
+/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd
+/@ss{exch $Scra add exch load setscreen}bd
+AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def
+/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt
+{@err1 exit}{currentflat 2 add setflat}ifelse}bd
+/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse
+}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd
+/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit
+}ifelse}bind loop setflat}bd/@eoclip/eoclip ld
+/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse
+}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if
+/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse
+2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd
+/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd
+/setcmykcolor where{pop}{/setcmykcolor{4 1 roll
+3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat
+setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd
+/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd
+/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd
+/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{
+0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat
+setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd
+/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{
+exch aload pop pop 4{4 index mul 4 1 roll}repeat
+5 -1 roll pop setcmykcolor}{exch aload pop
+CurrentInkName eq{4 index}{0}ifelse 6 1 roll
+5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{
+/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop}
+repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup
+6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint
+dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor
+exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{
+currentgray 1 eq currentoverprint and not}ifelse}bd
+/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def
+/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd
+/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd
+/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def
+2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if
+dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if
+$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl
+0 $phei rl clip @np $pn cvlit load aload pop
+7 -1 roll 5 index sub 7 -1 roll 3 index sub translate
+/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse
+@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{
+dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub
+0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch
+@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add
+exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop
+0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for
+pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat
+@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd
+Bbllx Bblly $pm itransform/$tlly xd/$tllx xd
+/$wid $turx $tllx sub def/$hei $tury $tlly sub def
+@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{
+$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask
+/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{
+$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd
+exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def
+/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if
+@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{
+/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def
+/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def
+/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def
+/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def
+true}{$frt $frc $frm $fry $frk $frn $o @scc
+dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse
+$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{
+/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def
+/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if
+}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd
+2 mul sub $fst div/$wid xd 2 index sub/$hei xd
+pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill
+$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll
+$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll
+ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd
+2 div 1 index 4 index sub dup $roy mul/$roh xd
+2 div 2 copy dup mul exch dup mul add sqrt
+$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd
+4 index add $roh add exch 5 index add $row add
+exch translate pop pop pop pop currentflat dup 5 mul setflat
+$c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale
+$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill
+/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop
+setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip
+newpath Bbllx Bblly moveto Bbllx Bbury lineto
+Bburx Bbury lineto Bburx Bblly lineto $fan rotate
+pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if
+@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d
+$t $c $m $y $k $n $o @scc pop $ctm setmatrix
+72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop
+$Psn load exec}{1 setgray eofill}ifelse @rs
+@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def
+}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd
+/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd
+/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd
+/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd
+/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd
+/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd
+/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld
+/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd
+/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd
+/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld
+/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld
+/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc
+{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix
+$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{
+matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse
+$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp
+S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd
+/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd
+/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd
+/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore
+exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd
+/CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe
+16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] def/@cc{currentfile $dat readhexstring pop}bd
+/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def
+1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd
+/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore
+/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd
+/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def
+}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd
+/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd
+/@ii{concat 3 index 3 index m 3 index 1 index l
+2 copy l 1 index 3 index l 3 index 3 index l
+clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def
+pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def
+}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if
+@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def
+$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate
+$urx $llx sub $ury $lly sub scale $wid $hei abs
+$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0
+$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse
+$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse
+@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def
+1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll
+@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def
+$llx $lly translate $urx $llx sub $ury $lly sub scale
+$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]
+/@cc load false $ncl colorimage @gr $ctm setmatrix}bd
+/z{exch findfont exch scalefont setfont}bd
+/ZB{9 dict dup begin 4 1 roll/FontType 3 def
+/FontMatrix xd/FontBBox xd/Encoding 256 array def
+0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def
+CharStrings/.notdef{}put/Metrics 256 dict def
+Metrics/.notdef 3 -1 roll put/BuildChar{exch
+dup/$char exch/Encoding get 3 index get def
+dup/Metrics get $char get aload pop setcachedevice
+begin Encoding exch get CharStrings exch get
+end exec}def end definefont pop}bd/ZBAddChar{findfont begin
+dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put
+CharStrings 3 1 roll put Metrics 3 1 roll put
+end}bd/Z{findfont dup maxlength 2 add dict exch
+dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall
+pop dup dup/Encoding get 256 array copy dup/$fe xd
+/Encoding exch put dup/Fontname 3 index put
+3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{
+$fe exch 2 index exch put 1 add}ifelse}forall
+pop}if dup 256 dict dup/$met xd/Metrics exch put
+dup/FontMatrix get 0 get 1000 mul 1 exch div
+3 index length 256 eq{0 1 255{dup $fe exch get
+dup/.notdef eq{pop pop}{5 index 3 -1 roll get
+2 index mul $met 3 1 roll put}ifelse}for}if
+pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq
+{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse
+}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd
+/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if
+$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if
+setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup
+@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd
+/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd
+/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd
+/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix
+/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def
+3 1 roll moveto $ttm concat t $stm setmatrix}def
+/@n{/$ttm exch matrix rotate def}bd/@s{}bd
+/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd
+matrix scale $ptm dup concatmatrix/$ptm xd
+1 eq{$ptm exch dup concatmatrix/$ptm xd}if
+1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd
+/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd
+/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd
+/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def
+/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def
+/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{
+/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{
+/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq
+{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{
+CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq
+{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def
+}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep
+/@whi{@gs -72000 dup moveto -72000 72000 lineto
+72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill
+@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer
+@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth
+2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto
+2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto
+moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def
+/rightbracket{(\051)}def
+
+%%EndProlog
+%%BeginSetup
+11.4737 setmiterlimit
+1.00 setflat
+/$fst 128 def
+
+%%EndSetup
+@sv
+/$ctm matrix currentmatrix def
+@sv
+%%Note: Object
+134.86 204.55 724.61 468.58 @E
+0 J 1 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+[1.00000 0.00000 0.00000 1.00000 0 0] 1 5.69 5.69 -90.00 @w
+ 0 O 0 @g
+0.10 0.20 0.90 0.00 0.90 0.20 0.10 0.00 0.00 0 0.00 0 0 @k
+%%CURV 17
+266.83 468.58 m
+592.63 468.58 l
+665.28 468.58 724.61 409.25 724.61 336.60 c
+724.61 336.53 l
+724.61 263.88 665.28 204.55 592.63 204.55 c
+266.83 204.55 l
+194.18 204.55 134.86 263.88 134.86 336.53 c
+134.86 336.60 l
+134.86 409.25 194.18 468.58 266.83 468.58 c
+@c
+B
+@rs
+@rs
+%%Trailer
+ end
diff --git a/macros/generic/TeX-PS/cmyk-hax/gdansk.eps b/macros/generic/TeX-PS/cmyk-hax/gdansk.eps
new file mode 100644
index 0000000000..22c79093b5
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/gdansk.eps
@@ -0,0 +1,112 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: GhostScript
+%%BoundingBox: 169.99 255.1 453.46 624.46
+%%EndComments
+%%BeginProlog
+/GSexport 100 dict def GSexport begin
+/m {moveto} def
+/C {curveto} def
+/L {lineto} def
+/@c {closepath} def
+/k {setcmykcolor} def
+/K {setcmykcolor} def
+/f {eofill} def
+/s {stroke} def
+/setcmykcolor where {}
+ {/setcmykcolor {1 sub /mf exch def
+ 3 {mf add neg dup 0 lt {pop 0} if 3 1 roll} repeat
+ setrgbcolor} def} ifelse
+/w {setlinewidth} def
+/j {setlinejoin} def
+/J {setlinecap} def
+/M {setmiterlimit} def
+/d {setdash} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+gsave
+%%
+0.0 1.0 1.0 0.0 k
+170.14 624.31 m
+169.99 371.52 L
+169.99 295.78 255.17 289.3 311.9 255.1 C
+368.5 289.15 453.46 294.62 453.46 371.52 C
+453.31 624.31 L
+374.47 624.31 249.05 624.46 170.14 624.31 C
+@c f
+0.0 0.0 0.0 0.0 k
+321.26 467.28 m
+321.26 479.3 324.43 490.9 330.84 500.9 C
+292.61 500.9 L
+299.02 490.9 302.18 479.3 302.18 467.28 C
+302.18 467.28 L
+290.38 467.28 278.78 470.66 268.63 476.86 C
+268.63 438.62 L
+278.78 444.82 290.38 448.2 302.18 448.2 C
+302.18 448.2 L
+302.18 436.39 299.02 424.8 292.61 414.65 C
+330.84 414.65 L
+324.43 424.8 321.26 436.39 321.26 448.2 C
+321.26 448.2 L
+333.07 448.2 344.74 444.82 354.89 438.62 C
+354.89 476.86 L
+344.74 470.66 333.07 467.28 321.26 467.28 C
+@c f
+0.0 0.0 0.0 0.0 k
+321.26 358.56 m
+321.26 370.3 324.43 381.96 330.84 392.11 C
+292.61 392.11 L
+299.02 381.96 302.18 370.3 302.18 358.56 C
+302.18 358.56 L
+290.38 358.56 278.78 361.87 268.63 368.06 C
+268.63 329.62 L
+278.78 336.02 290.38 339.41 302.18 339.41 C
+302.18 339.41 L
+302.18 327.38 299.02 315.72 292.61 305.64 C
+330.84 305.64 L
+324.43 315.72 321.26 327.38 321.26 339.41 C
+321.26 339.41 L
+333.07 339.41 344.74 336.02 354.89 329.62 C
+354.89 368.06 L
+344.74 361.87 333.07 358.56 321.26 358.56 C
+@c f
+0.0 0.0 1.0 0.0 k
+311.83 524.66 m
+336.67 524.66 358.92 517.97 374.11 511.92 C
+407.16 574.42 L
+394.06 577.3 392.11 567.65 391.54 561.67 C
+388.73 564.34 379.58 564.05 376.78 558.79 C
+378.14 554.18 379.73 550.58 386.06 549.14 C
+377.42 542.45 362.3 543.1 356.54 556.34 C
+360.65 554.4 362.09 554.76 364.82 557.42 C
+363.53 560.66 362.3 561.89 358.2 562.1 C
+363.31 564.77 361.51 567.43 358.56 570.1 C
+354.82 569.02 351.94 567.43 354.24 562.97 C
+350.28 565.06 349.2 564.34 345.96 562.1 C
+347.11 559.01 347.47 557.64 352.66 557.28 C
+344.23 549.86 314.21 547.63 316.73 561.67 C
+322.78 556.13 331.34 558.5 337.1 565.27 C
+333.0 572.76 325.66 577.66 317.45 574.06 C
+322.56 581.9 322.56 588.46 311.76 592.56 C
+300.89 588.46 300.89 581.9 305.93 574.06 C
+297.79 577.66 290.38 572.76 286.27 565.27 C
+292.1 558.5 300.67 556.13 306.65 561.67 C
+309.24 547.63 279.22 549.86 270.72 557.28 C
+275.9 557.64 276.26 559.01 277.49 562.1 C
+274.25 564.34 273.17 565.06 269.21 562.97 C
+271.44 567.43 268.56 569.02 264.82 570.1 C
+261.94 567.43 260.14 564.77 265.18 562.1 C
+261.07 561.89 259.92 560.66 258.55 557.42 C
+261.36 554.76 262.8 554.4 266.9 556.34 C
+261.07 543.1 246.02 542.45 237.24 549.14 C
+243.72 550.58 245.16 554.18 246.6 558.79 C
+243.72 564.05 234.72 564.34 231.91 561.67 C
+231.19 567.65 229.39 577.3 216.22 574.42 C
+249.26 511.92 L
+264.46 517.97 286.78 524.66 311.83 524.66 C
+@c f
+%%
+grestore
+%%Trailer
+end
+showpage
diff --git a/macros/generic/TeX-PS/cmyk-hax/rules.tex b/macros/generic/TeX-PS/cmyk-hax/rules.tex
new file mode 100644
index 0000000000..1bd8d95bbe
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/rules.tex
@@ -0,0 +1,6 @@
+\def\RULES{\special{ps:
+ /v {/ruley exch def /rulex exch def V} def
+ /V {gsave newpath transform round exch round exch itransform
+ moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto
+ closepath fill grestore} def
+}}
diff --git a/macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat b/macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat
new file mode 100644
index 0000000000..a53a15eb24
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sam1-sep.bat
@@ -0,0 +1,23 @@
+:: This is a sample batch illustrating how to make color separation
+:: using CMYK-HAX.TEX. The script can be easily adapted to any platform
+:: Calls for `TEX' and `DVIPS' should be changed to respective local names:
+:: TEX calls tex with appropriate format (e.g., plain or MeX, or...)
+:: DVIPS calls dvips (or dvips32.exe)
+:: Names SAMPLE1.TEX, SAM1-C.PS, SAM1-M.PS, SAM1-Y.PS, SAM1-K.PS
+:: should be replaced appropriately by parameters of the script.
+::
+:: MAKE CYAN SEPARATION (PROJECTION):
+call tex \def\separate{\CYAN}\input sample1.tex
+call dvips sample1 -osam1-c.ps
+::
+:: MAKE MAGENTA SEPARATION (PROJECTION):
+call tex \def\separate{\MAGENTA}\input sample1.tex
+call dvips sample1 -osam1-m.ps
+::
+:: MAKE YELLOW SEPARATION (PROJECTION):
+call tex \def\separate{\YELLOW}\input sample1.tex
+call dvips sample1 -osam1-y.ps
+::
+:: MAKE BLACK SEPARATION (PROJECTION):
+call tex \def\separate{\BLACK}\input sample1.tex
+call dvips sample1 -osam1-k.ps
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample1.tex b/macros/generic/TeX-PS/cmyk-hax/sample1.tex
new file mode 100644
index 0000000000..6a208e4ecb
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample1.tex
@@ -0,0 +1,56 @@
+% E Sample TeX file demonstrating how to separate colors using CMYK-HAX
+% macros -- outline graphics + text
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow za pomoc/a
+% makr pakietu CMYK-HAX -- grafika obwiedniowa + tekst
+%
+\input epsf % DVIPS standard distribution
+\input colordvi % DVIPS standard distribution
+\input cmyk-hax
+
+\newif\ifPolish
+%\Polishtrue % true for Polish text,
+\Polishfalse % else English text
+%%
+\ifx\unknown\separate\def\separate{\COLOR}\fi
+\ifx\unknown\separate\def\separate{\CYAN}\fi
+\ifx\unknown\separate\def\separate{\MAGENTA}\fi
+\ifx\unknown\separate\def\separate{\YELLOW}\fi
+\ifx\unknown\separate\def\separate{\BLACK}\fi
+
+\def\COLOR{}
+\def\CYAN{\projectCMYK\cyan}
+\def\MAGENTA{\projectCMYK\magenta}
+\def\YELLOW{\projectCMYK\yellow}
+\def\BLACK{\projectCMYK\black}
+
+\delblacktrue\separate
+
+\nopagenumbers
+\ifPolish
+\font\bf plssdc10 at 20pt \bf
+\font\rm plss8
+\prefixing
+\else
+\font\bf cmssdc10 at 20pt \bf
+\font\rm cmss8
+\fi
+
+\baselineskip 28pt
+\hsize 100mm
+
+\setbox1 \hbox{\epsfxsize\hsize \epsffile{fountain.eps}}
+
+\hbox{\rlap{\copy1}%
+\vbox to \ht1{\vss
+\textBlack
+\ifPolish
+\centerline{Pan Sobieski mia/l trzy pieski:}
+\centerline{\Red{czerwony}, \Green{zielony}, \Blue{niebieski}.}
+\else
+\centerline{All words tell the genuine true:}
+\centerline{\Red{red}, and \Green{green}, and even \Blue{blue}.}
+\fi\vss}}
+\nointerlineskip\vskip 5mm
+\centerline{\CMYKlabels\rm}
+
+\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample2.tex b/macros/generic/TeX-PS/cmyk-hax/sample2.tex
new file mode 100644
index 0000000000..d4ae6b14bb
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample2.tex
@@ -0,0 +1,74 @@
+% E Sample TeX file demonstrating how to separate by changing colors using
+% CMYK-HAX macros -- outline graphics
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow poprzez
+% zamian/e kolor/ow za pomoc/a makr pakietu CMYK-HAX -- grafika obwiedniowa
+%
+\input epsf % DVIPS standard distribution
+\input cmyk-hax
+\special{landscape}
+
+\nopagenumbers
+\voffset -0.25in
+\hoffset -0.5in
+\vsize 180mm
+\hsize 270mm
+
+\def\RED{%
+ \setCMYKchange
+ \forcolor{0 1 1 0}\changecolor{0 0 0 1} % E change red to black
+ % P zamie/n czerwony na czarny
+ \forcolor{0 0 1 0}\changecolor{0 0 0 0} % E change yellow to white
+ % P zamie/n /z/o/lty na bia/ly
+ \addstroke{0 0 0 0} % E add the white stroke to yellow
+ % P /z/o/lty zyskuje bia/l/a obw/odk/e
+ \strokehook{2 truemm setlinewidth % E of thickness 2 truemm
+ % P grubo/sci 2 truemm
+ 0 setlinejoin % E with pointed joints
+ % P spiczaste po/l/aczenia
+ 2 setlinecap % E with lenghtened tips
+ % P wyd/lu/zone ko/nce
+ 5 setmiterlimit % E with medium miter limits
+ % P obcinane /srednio daleko
+ }%
+ \useCMYKchange}
+
+\def\YELLOW{%
+ \setCMYKchange
+ \forcolor{0 0 1 0}\changecolor{0 0 0 1} % E change yellow to black
+ % P zamie/n /z/o/lty na czarny
+ \forcolor{0 0 0 0}\delcolor % E make white invisible
+ % P uczy/n bia/ly niewidzialnym
+ \forcolor{0 1 1 0}\delcolor % E make red invisible
+ % P uczy/n czerwony niewidzialnym
+ \useCMYKchange}
+
+\def\SPEC{%
+ \setCMYKchange
+ \forcolor{0 0 1 0}\changecolor{0 0 0 0} % E change yellow to white
+ % P zamie/n /z/o/lty na bia/ly
+ \forcolor{0 0 0 0}\changecolor{0 0 0 1} % E change white to black
+ % P zamie/n bia/ly na czarny
+ \forcolor{0 1 1 0}\delcolor % E make red invisible
+ % P uczy/n czerwony niewidzialnym
+ \addstroke{0 0 0 1} % E add the black stroke to red
+ % P czerwony zyskuje czarn/a obw/odk/e
+ \strokehook{2 truemm setlinewidth % E of thickness 2 truemm
+ % P grubo/sci 2 truemm
+ 0 setlinejoin % E with pointed joints
+ % P spiczaste po/l/aczenia
+ 2 setlinecap % E with lenghten tips
+ % P wyd/lu/zone ko/nce
+ 5 setmiterlimit % E with medium miter limits
+ % P obcinane /srednio daleko
+ }%
+ \useCMYKchange}
+
+\setbox1\hbox{\epsfysize 15cm \epsffile{gdansk.eps}}
+
+\vbox{\centerline{%
+ \PSbegingroup\RED{\copy1}\PSendgroup \hskip3cm
+ \PSbegingroup\SPEC{\copy1}\PSendgroup}
+ \kern-20mm
+ \centerline{\vbox to0cm{\PSbegingroup\YELLOW{\copy1}\PSendgroup\vss}}}
+
+\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample3.tex b/macros/generic/TeX-PS/cmyk-hax/sample3.tex
new file mode 100644
index 0000000000..afd52bf871
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample3.tex
@@ -0,0 +1,31 @@
+% E Sample TeX file demonstrating how to separate using CMYK-HAX macros
+% -- bitmap graphics
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow
+% za pomoc/a makr pakietu CMYK-HAX -- grafika bitmapowa
+%
+\input epsf % DVIPS standard distribution
+\input colordvi % DVIPS standard distribution
+\input cmyk-hax
+
+\nopagenumbers
+\hoffset-1in
+\voffset-1in
+\topskip 0pt
+\hsize 210mm
+\vsize 297mm
+
+\def\epsfi{\epsfxsize 90mm \epsffile{screen.eps}}
+\def\cbox#1{\vbox{\halign{\hss##\hss\cr#1\crcr}}}
+\def\separate#1{\PSbegingroup
+ \delblacktrue
+ \projectCMYK#1%
+ \cbox{\epsfi\cr\noalign{\vskip 2mm}\CMYKlabels\rm}
+ \PSendgroup}
+
+\vglue 0pt plus 1fil
+\centerline{\separate\cyan \hskip 5mm \separate\magenta }
+\vskip 5mm
+\centerline{\separate\yellow \hskip 5mm \separate\black }
+\vglue 0pt plus 1fil
+
+\eject\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/sample4.tex b/macros/generic/TeX-PS/cmyk-hax/sample4.tex
new file mode 100644
index 0000000000..800af12bbe
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/sample4.tex
@@ -0,0 +1,48 @@
+% E Sample TeX file demonstrating how to separate using CMYK-HAX macros
+% -- bitmap graphics
+% P Przyk/ladowy plik TeX-owy demonstruj/acy separacj/e kolor/ow
+% za pomoc/a makr pakietu CMYK-HAX -- grafika bitmapowa
+%
+\input epsf % DVIPS standard distribution
+\input colordvi % DVIPS standard distribution
+\input cmyk-hax
+
+\nopagenumbers
+\hoffset-1in
+\voffset-1in
+\topskip 0pt
+\hsize 210mm
+\vsize 297mm
+
+\def\epsfi{\epsfxsize 90mm \epsffile{screen.eps}}
+\def\cbox#1{\vbox{\halign{\hss##\hss\cr#1\crcr}}}
+\def\chbit{% E change some colors of bitmap
+ % P podmiana niekt/orych kolor/ow mapy bitowej
+ \forbitmap{23 19 1B 00}\changebitmap{00 00 00 60}
+ \forbitmap{DD BC C1 E4}\changebitmap{00 00 00 FF}
+ \forbitmap{2A 21 21 00}\changebitmap{00 00 00 E0}
+ \forbitmap{69 54 54 01}\changebitmap{00 00 00 90}}
+\def\separate#1{\PSbegingroup
+ \setCMYKchange
+ \forcolor\black\delcolor % E make black unvisible
+ % P uczy/n czarny niewidzialnym
+ \chbit
+ \useCMYKchange
+ \projectCMYK#1%
+ \cbox{\epsfi\cr\noalign{\vskip 2mm}\CMYKlabels\rm}
+ \PSendgroup}
+\def\sepblack{\PSbegingroup
+ \setCMYKchange
+ \chbit
+ \useCMYKchange
+ \projectCMYK\black
+ \cbox{\epsfi\cr\noalign{\vskip 2mm}\CMYKlabels\rm}
+ \PSendgroup}
+
+\vglue 0pt plus 1fil
+\centerline{\separate\cyan \hskip 5mm \separate\magenta }
+\vskip 5mm
+\centerline{\separate\yellow \hskip 5mm \sepblack }
+\vglue 0pt plus 1fil
+
+\eject\end
diff --git a/macros/generic/TeX-PS/cmyk-hax/screen.eps b/macros/generic/TeX-PS/cmyk-hax/screen.eps
new file mode 100644
index 0000000000..7c5f73d6e2
--- /dev/null
+++ b/macros/generic/TeX-PS/cmyk-hax/screen.eps
@@ -0,0 +1,1150 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 600.0000 450.0000
+%%Creator: CEP ver. 0.7 by BOP s.c.
+%UNCEPInfo: 19 240 8000 4
+/_fltrd_file currentfile /ASCII85Decode filter /LZWDecode filter def /_read_string /readstring load def
+/width 800 def
+/height 600 def
+/glevel 8 def
+/dpi 96 def
+/istr 800 string def
+/nheight height neg def
+/dot {72.0 dpi div mul} def
+/imageturkey
+{ width height glevel [width 0 0 nheight 0 height]
+ { _fltrd_file istr _read_string pop } false 4 colorimage} def
+gsave
+0 0 translate
+width dot height dot scale
+imageturkey
+J2^Pg(F0=o#(jYL0R-P@*=[fl,#GeF4sq,'`+(NHe7(Q]O@LQn\KlVo-BcG]13lin>qMF:-;qCM^1T?m
+b\&_WeDbm>TMHt7\g7917\\7D1jW.GSP?%].TF!U5,VG]e8$pfeRH3tYZEAU]-VpHB!U'+2LAGuh/0Z+
+/loT\^?9[Ngi#,ue`-OU^gAcs]I!R_L;Mkg3.+aO*KA-M10D2d5:;c>jE!>/emgj8!,-IX4XQLiVpoI(
+>.lI3=g%g<o:%l!f4DD9mWP(Jk3:!li,EpG4sq/+a5h8d>eXi0S^6MAH<i_4=0:*@G'dN/kBFVsn9B=e
+5:;fBkOa(K?GC-^h=(,dIU>=;fBpr:IJ%lHfBs@8,7j,E!PjdJ%+QL$#Qb#,&6'MP6*OT=#Js;j/IKB,
+UbrI/#Oq4WLbK5J&]Be_9bYJX9N;hHO_e;>`Y"/@)9.f?D&^M-b]Or@&,]-#1sP?0[7?B2N?c$]9I(>U
++UA)q8^`9a-H^@fW@:IQ]X97]d.BUW6nS%agdlK;aYV.^9Z8m5do>'[9bW3936h&rkr[13biM"5e("7Y
+:D<s15gT'S#t*']9a*u4e5[GW;&"]ge&Vu5'eIOkXYidNEnrfNe!1??r4,Z=O]0dF98Or\PncS\<Rgt)0ME3=<En&ic#m=DQ0j!,fG4pM
+@G$ktNFUWNKh1uu,+tk7fl)S6BA+pP.afITNO;kmQ$p>K8li!P>?Nm:bkBSR"hSn]o]9ctbUB%.H/=mi
+m<d_,c1QMBQgOa$i"ujLA_VEGf7MRSQii%MQp)OC@Mhh1L#R:i@a.f8^)qN.Qpq[G<G9kZJn/`q`hZ,8
+,DV@@q.2.C2(;!^QoV]u;4D0C1W>kfdIU^ej4,&JKO+*Oaan.E:6h[?RVn[ol5G\ZWTocj)i3]=`RffP
+RJ&_%lT"%;MX/M-YHq_Bf%$tkG7MdUkkT[MCi/WAGuF(4B("aKGd_J'mlARR^#Z[E]ta%sl3R`4.7T/=
+<k0!Hamtt*/^*`*cS`u=SF8U?lMG3_Yf^/jWNUE5#?=IieqWe&nOFs*[e4n.#m>9ONt91sh<&M1@l^<`
+^j'.D!T!OR(N6j/r_(.?nK)l$`Q<P3*KB9lMCHmKT'^L(Hd5sWi;A'8c1ClU:Y#-YSI]A\j*bk%gAU]*jk&N*%b(2rTC$1[ft4eF/'5:6Vh3^\S-XU?8_aq<%a:SN$8aG&
+jZEd-"C>kbJ.O#i_+*YkTSn8Lcsd3qVi^W2,J&2Y[<7dhguK9(jaE69)B[UBgn<EaL@+7,6WeaIiWMQ';%2d*2uNVRoCljZ+sXM(-J)RF
+Y_$f]-9oSR%Um8hLN"9N_0;:R=\L/nO\M9-#dji2,SGWIWW^5KUDkE\.?/:e36%9i$0(;pMp]f_\AgF)
+'oUb'E=tT/=Gm\u/6I8GH4J#Q%3sqeOciU:c9u?J'jW@dClp=G.HRl`?"BCGnO<Ab,rhFFN/EV"She<?
+/l:T(?\M@o=i'=Z/7j)p3"HX*6chn:ji`79;/t6PM/`XV*.!oki`jITWnQ=A&WfmO8kiHj"^iQ>J5[?t
+baEl3VX,F`1Q"&VLbg169Pu4U1muOtf!:8<M4;s<E_UiH4m0cZBl[BUQDP6,S"&l80j9*'6O<eVm(eQ2
+.YQ!uh)8d(ZD'"7r(IEB*bGh'UGF@Vd&?[mV\q=e&:Rs*C-=t^4E?jsEg=YSr;WSiCRT?3I8a;?3[N#t
+,a94=:)MLUjCH6(YbI6.g5>uED*Fm3;Phi7KeM^;,_T/YFOW@L<+T?7VU]Re<SG*hVrTEY9nn7g-Q?1DX_":aRL%9ia$V-EY+:fC<`Ak\;5X:&Y*-5O7uBMbkg^NH1eIaF
+HN@P*]mlf@'#iAq`FJ6K&Z,&):a+J!dAEaIZV_%u;sNOP.a<.;<8u9Sg9G.i""Tr8Y0>CqR;;*<#.2oeg.rWJB'mRJ[oVl6<YcoFlQi3I
+dW46kkMpN`WIplV3G5qXST(`[c+4<YL<b,Z2QDGqV"Be>bA11'/TogV<jpRZ$:eWF/Z5VWNk3^Zf46F4
+)nZg/ak#IZ$e"r-]U&-f4kiOjX6o8h=/qe@Bj@dBSd)eab0O2V&Us4u"1^;WW8O0^L$3[[_`.<"@GF#$
+cNV%)<6!'+lIC`26h\&-.YH=,.jc=G%$nEFkMo/$.\?T]^::l1dl[qm1'<iWps/ru9J'q`2A!;7-OF8'
+mmJMan$P/K#2=I#PHq>m_\kZ\j;bk"o*/Wm'F,[Ie\?t2L1X@dT$it+Q^Y6R[`7!3_cn)UNY3nUa*GMf
+=a.9F1DYOJGn+lOgp*-H%TCPR,73S9$)2L;W7!\)6tn5'V)2M=aa,m3C#(qMo)9iY1]J3F9N.@#?DZ&(
+.lZa@q/L<g)UoGZTPB5!O0f+tf2[G$f;X%BZn4ktqZ`0s4:@J?7SMK4^F8?;NLOR_iMUp8m:G*t[J%VnOrB6_<h33'ocC'VQod69m9cp#QEeMuDf%jAde7m>Ibm$HH3>8O
+TC\ZAhc/2tn%C<f\-E&m<p+@<I7\OW*b=3`Mf7u54"7W,$X<H0Idf9Y68uXshHXuFmsZe+\HD$9r.gF**_jcP7"sR2UP#gH'=^#^khLBr
+[W)d'b:AV<fSV[[W;_4kH3ZRr8kRiYSrF;)D^jp6+/X/:S]0=UdH01[WHDFC_E+K^DLG`jFj@>FHG<gs
+HEQ@IDK3qUG<3Bas.T/3M;,Xt61+Wo[<2E8h>>6<mp5Cr*qBop]E_m74bJF_5/lKn7p>;.e&HRg)r1@8
+On'Ph\G7d.jZJ$Zo3Q(TH#Ge,4SPQA*fnSB02(Ols/5NrVq-04>O"@qZ1]6beb_"8m6,s.pI8'#GMdi;
+rWg:7?Ou.D?]As-T/F?4+6It.Sb)i9dJ@3Gl7?;+\S4Raqd4:0IG_a4rs.N\:#cY0Ws;-f-BQknn"mYO
+m([8TnXFjsmIC,[rA;F0ru[=$J)C2(n,WM6kka<$pSbrk:.iha2W#a;!@F!/:YsdNnmq4_?Z7.Acd:8t
+"Tr^("0aojn3HedTIu<7A[!Z;0Jl$k0*Nq`F"gY1n4mV8@UB[Qm]=G4O@'7,FU)l2#Hr[YO@ZVF1BERWnSiIHYP-')JD%')fFUOWXen9YPlY``]eH,dc,e#2CtS..!-"+C
+9n`bR*<pJ2%'[tbnBh[r5mRrB"AhcAD)D\raU=li$4u4MD%?\Eo_hV[hsgD(OJ`RbmaI/N#d++<cmD$(bn&2>&MU`B:t615,nb2H&uho@
+KS]t-XUB+\$]j"*0^RH>3tuY5%WNUVCa-t4rtJ='&9.4UD(ubZN]b]V$H_HCYo_Tg/JiDP(U8B)n6Eqp
+(9sX)j7,\B,RG6jq[q5:%hPcZD&3,g^D$-%((kU!Z!.s*"VC1E5&li+c$^>sE>T;0*3ma.n^(U)0J%09
+(pU[jOg7D1^D@KO&<WY"Z,6rc6OWFH*g,J(nc'NTL.%0e&^g1ad<-Hb'd7T8+gN(WdFS7N1ji0X)Y*nJ
+E)e#8[2IC))\OkLni/j3$Ofor,Vh;"d9Rhk]cWD3,dL8eEZZV`AL;G3-DTND,-`/mLD,h.(=H1\c&0+>
+_'hotfo^2!bm`;Nm3H^N,Hc5=nY7Cn?QN+A.57MBP+sI(D(BY;/$ci=j/"+)[3nb4,-o"30r6GleLbgp
+/[B"?:uNU0`qopm>4U,,"Ur/EUcYmN/^jSNo)UO!eLgp&/<1#fdfa^^q_9lE0s_lTn%CE0;(bcj1:&Pfo.`$W2%9(%kc`;gF$VW=75T'W1p;`lWF63RG4s7'27$FCmr:6!
+=#MjK2KN^mdq^lUD`1O:2m[cgo5cl)G;qC83-1'<du-4"O#U('3O>,6o923Jj!W8#q_Lr-o<CA5[6&H>cr3diE8<U^`B84`4L<9plT#e[
+kqhqY4gWs-oAMkhjBn+c)NYh#F7DINofmNn5I(SY:^[P-V)d#"5dQeBe-SD4'gXYo5]e#4'H]V_,=/[[
+5nj2`oIs?flFZN2(2Rb6oJ8ll6u#[a+)Z3fFAYB3,t1c^7<Dg(ZscB[?Ue")7?\N=1][k<XM.(m7'oHS
+oRL:JHooLZ53(6cFG!.?ogmM^-M2?gZo^kOD+\n_8sF*`['<6q[76Ck9%:IG1qu\*]f@kWR:Le=Pa+ro
+]h&=:9oY>Bd5+:-Y1tYVBN.8l<:Na<lV.JcM@eu6<;fLj-OKFc9GIq/<=Me_&Q*Yf;7-p3eJ(c$"?_o-
+$oF]Y'^4oF2,2Tn;me`H/n%MQr65^\MQUS^M;_AJ93#OZ;jBRIjc`]^O\d:c<g7dQYid-DY19p8c8B06
+'nKIBKiBodIJ$028dOC`DQkKu=1)12'nog<T&k*bPV04EQ(Cp>:KQo':(c/E8r$TX2-Z?B>d^>2'p+V:Y&tJbZF.-\Pil>TDd8RP?DN]h'oIi*Q!Z)m?1dPGFXnjr_cd@f
+>ZH2JQ0`4LTiEd#0ag3S-u!$'`E;g/=Z+dCb>hPBdcNFO@MV'qp*F$1!Fh?'\FqQj:Amdb^J7eHA6'4Jp-)k^R3=>/_Nm8q-0o)!O^sb`
+ABq)SFu%/T9&0,Y!#$^8G)i;ZqW<u)-5).T:Y039k8;T>BegW?<\%gK2I\QB:\+<m;la;Kj(iMZBXVk^
+Q=jotQYBJ>6^H%O%M`HRK4OY2TLc%feb;4kbi[L<A!R]8d$nb_Z!m?t]5_BfP'\D$%_K1RE06hG<j>R]
+[;WLaD_'jL'tnE@05+!.L!4%=(>f$'WlVEL#4Q&!f0YY.f[^,F
+jgApD$\7!_kq\ED`0Q1%(B4VV#qC-(2-+R9lmj9a*Hu\_C,M=5EDJ,%,?aafXPsOcf.@hldpOkqW-*B,
+p:Tk[W/p[oFYneI.e@hCAS<qKHcE*n#m#3MIs#QsXTmBmX3XqX3k3;*Ha%Q\pD&(!OUMdU&!j1)=8uZ0
+P@h<0/'_4;f.2#S6Z0b2=P'<UQSE^4F'KJ;MW3-g(Kl.+2'd23C/RiVfJR;#fm1G+J_1]cU;qE&'ms%b
+H2$JiiY@(Tdqd>WIhpL@P)XG,kA>7.ig6cs6`UbX"XZ1UIE+d%Wl-</kC%M-4kHY_(4gCk9^qKSH[%?"
+1DP"PSK&E8S+h2d'M3t&??T']K_KD=:1&^@`GYG8/9k]j3'dZaKjZh[+BQC;QO?kKB-+SCNnAV([]t!7hd9t[IYPgmp<?a+eON`nK"0-cGehC&[<";hFOO0O-RX1WDi#7O>?MPE(0b.UWpl%H
+OLIL\=?2Oh58igu!>5?s1-Y_@@kG5K@(=C:QK++oc]e0#%J]T]3*UHl3n5)]P6Fr(:p2Sd%>3>m?hnH^
+3B;,7-%u!b:j;#gCt4oV\X"'/+4I--p4JX`B:4#]HFDER[fq6nbF.d.RQ5M$H$P.+OSlH9^,F$#8?84_RpPmYMmWgG
+G8HloVi4c`RX&mj[X3Qd%ujXLSbO(o;(6HE=bmrXR90!CfXAs`\K9E!Qa)+4NR+0L'%K"AEqK*tR=UL2
+KqB6>O1GLko?3p>AWW?NN=O!V\V$U/+cm)HMs[L/=ikNJ-QX/OGdi#\QD]5$LEYA_H5Oo([XE;oX&>8"
+WHU:Iq?qtF@B4MCWOZqiqK8-N96s7YQJ/[CHF^.5+eY9,XBHEkHD.$9V52LQWj9ZsRTHRM;5+uZYHuMW
+D\JA)",`Jo1ckrHq+%R\#HYCOXuJ#.gAS<6R]P6``EJn8qVA<#ae\`^Od`H>g@^]aq6F3r4'/ho>8+7\
+;.TQ(Ya\nefV<;PZ)tV[[!PHSnGqi9;n%*T[Is:%]7B60A%+KrZe=_CqiOc<P>Rg9;B)%7>G8V)V7G?[\\"t:2r]fY6[Kbl]<hJZRtJ2^>I=9U]N]Zo]+q>b.Ccf&H<Z0:gYok#BnuO>]"=`O
+gS_X[o=k+p^Dm-d]E(<?S\:Hg^"_ec>S4duc+We*Tpuk6m[M%ZVln^fZhKNt*&5>W;8QNTV;*rGm/t7q
+3Kfj"Qo]6**)X[#?c6">Z$]QjmKLR^bDGet_HHQO*-'"W!Pn!n`;Fbum5r<kWPFg$V-JGi*0E@2DH-OfY8ibJmBOd;
+A]U2q\G2Q9*3lA'4C#OqaP=,Fo=`2/O2@(gakRo\*76QIQ_0eOa1TaC4Q*91]0tC8]sr(+>iX-me]W)F
+cPOL9r:SDd\'Aukba,BRekpNaj3V'L@QaI'*<!de+jmtOI9d.MSIK;G%F(a:Z+D\HRl%HtXjXXgo*iUQ
+o!QPe'=M0'e=Bl.4ZTfhWRQ>TeSjp)@ujUejc,]<e3.0QI;rJm_p*U0\=IJFS<);#P_\'JC](0_SF>#T
+NRQWrZJ3jTE#DqV`pqlO&R?KpXMM+[&i=L>gmuGA:CZ+6bZXhndiG:5>A`-.j>h,+156MASKl't-,dI0
+cio!SS&;oW4fiAcYesC8gU9]0eY`<-5"Ad5@F,h.6fL9Wi]mP(ShK*[1#m^?j1Z#5>u058MhYP/@X]-J?+&M%S_3nW`Q8R2X?"SYC6Yk+hP(Q'6(e3#!TtMHiuWL+4t8BQJ*5[0kC/:5*U^DM
+o<,d!hjc:[dcu=(r&45)f1E1(frR<mXl6c7l(-h7]uAfSdG6t5MV6ojr_r0t`T:(Rl$fsj#`6poE$GD_
+)aH4^^+o&in*aTQj1k]aRFM(>l0c>Kn"0.?SiAPk%H?7?n/<je?0g\QL[X+Hke@ephKAC<KC^0F]UW'jh2C0</(#B#
+=%l1]h_4XdrUjMUF?[/HpOTc%'C>\#q6P=`jt67tJbOY:o)D?SAng>?cq9p`!'X9TT$?Xa%D;[9q&b@0
+hG(/;5NSF8l4)RbXnX&H&+9EN*T/[^huX*j!!8eor*RSChnf6JGO^#<s.U+q^CfqliVT8/n=SD4J*l`r
+Lj`VTkeASi!"]7+HiS`6@.7]/!-S>[J-)t=J-$MrJjH.#R+(;n!ffO8X2YO/dSq\]T[K6-Y$!?C9BHm*
+Peod4QVC_K3RmJB/=]Gq:.`D7K1(jLW)Qq0!c9N]e#@EBPtn;YX&PtuTa6;P-'QV!0_gT=aU#2l/Cp1G
+4q1\u=+E4;AR=VD]3XkAS(+V(8AA,@F;o0$#B7RPXuMA&T,3@(@^6Vo*Z$"$\_coqSCVU=S^1:`!+7;a=/+,8[+\e,X%t1ol8<ntC`?`afZJ71rRUF_]rYU#df%JsM8eLpkBB%,0.Y8eoC:WU
+L#\`P`(IOeNQ2.+guS461u?iF2h.UN]N`-.-dV2R:4/ZUQd5CmYlGg'PB[?$q>J%rlh(0#E!uZ%].]rn
+"[R*:Wgk0ncnl6L&<nRQX=thFs$17V$P"@R)UnaRd'OAh`:63>_5@S6!>_E.U)=M3EJ+?$_l0)@)oa:B@2?h]_l"3X
+mn:8:_+r2*,s;cdP4/GaFH7Ta$Hff[YmUUEqlK#2\M#*6RjdJgd[\K:-dm=.pe;&7`61`8>MV9Pku?HK
+9f"p'4\p*MK%dYm]`?`9'E&5&d*s'D78WV\8KbV9jWcRdWD_\.XVA^c&L0%D%8'Mu"[]doOC^J>XqPp5
+,>E*PUK/b-F[]?W$)M=,c?7(a-<=.,[%'M"p]4cl+K>&8=>iU%AQ^o3MdtF:gh_erQ0kVf5#?VO$/8"q
+UE/+:`PWSK(E<R:`0SrQCY`kb<hRGEdNa"VDnY=J7Ziu)HJ^I$AJe;/4_7a6olY=9=&P:[K]%&aM^kk"
+_LkM1<6chLbVHLDF^_f>o8TVlI'0ZO+gC0_A@Xlt!+d$S<L.3Q`a>!@(kfq6A%BU"W$HJ#=eA]/6Y1rkND%jPkk%%=P\40/pQ)deI[d<!DH.iUC=s9%kW6)RYu>FpCTC7D21;_Wl8p9AWO)Ik
+L;C3aNa92,4/UgaD0s-sS67`rNP8QHAXC59]CuL0Dmk(H[dQ=jE1B:>--:N);;=<_6VnI[%Inga3k!2Q
+`Sl8P>o[KfP+VhE_f.b';o)f7T1"Fu=;K5PfA3kGh+>+El(.1Q:Og\k(#OL"9/s%4j`r].BroVT:P\0u^5K`aj#Dod
+R;Taq>I&-.YFUYrrh%@Z:Xj%+7/^:1KYFr(SpU2[2)ieE]/[9dMLTtSmJe'e36,D5SRIE3gq3ml!M6=!
+HKB.V1.LF#TT_&`:#6#_f(QD>6HM).S0\\B&CM"5*eY)]_*PJo!8tL?I,p:.3L;FNQP4jfY-Gl2KnACE
+JJ!V!mM/(-Wk4*,Z<i2Ye2jOElXE5^E7#^R7&Z"-&aD,pMFIZ?[L2J*1VQSF+tLFj6P`t^aFA-ik!%3k
+SY"%2L^nQg]`H4Eha+&kd$W1K\F1F__8)%(NWmGU!7VJ\ni"gr6(YRJcQh2VNiaW(22MD%@iNBN0lBBN
+([WNCe=2VAFl#^S1jbt8#;d'V9H5KTn7(XLHk8nNb1J-FANU$S?igs-'3>EHr4%eaNa9M9D]PGqZ^?LCa.Oe.6t+#-R;jP_3!c,7eoWr;DJin,<C7=Q,Yj3Cg2>.Q^GDU;iW'XG_+hsU'iX1#
+5r"6mcLg9!AR!$1&6,f,V,o*;)A\:ZPqY_KYg&s@fOn*:37&As,,OR\To%''*glgk@q>e;M%KE[:m*t3
+kR""@DF,`uLI^AmWhGCZ7$:+b78Z]$120p/:hjD,<CJO;O>rKF$<9i8e&5[9>j^"o#9Y2eA8UGb=@!b7pK7qe=/=h`
+bEH"+kZq)[Pu==*b-4Wt_ha_e4rVYeTfF);M6%G@)?;,s<U.]sRo?%-\/EOMSTSCE<Q6B;3pu:-FQuYC
+Z!#Q_i?p/cJ=]P7M70uu67I=HHhIduVcj[-.pNBk0u?DYl"`Z?,uCo^6HI0Y-Uep_5?3E_Ne!E_C$?<$
+I?EZR^<0/a+0D5\'$?NdH>6k?c*t/_inmtpJT!.U]==1*Y0\[0D(\e)YJeTGb'L6hl80'!N6^]S40:':?%"+Y;I)Un3A%*+iMtHamG;te="=\,]l;].bj4/5.lCY8$Tb\%K7dB6F`pkA3m3$R
+>QtE]!Pdcp!8os=IjZiFSME?Y`G&5&-Zq/.;posMG8XjmVuaD>EMYQAf5D&9]R4aGr(pP_elDPOGH9Nl
+T6J4bDn[T)GYZ(Zb>2qg#!/Qc'qaOQGgUJO9?*,%TWYW%N:JJ%IMk'h^eC;5D_^jon1lY.2t!fD^/e3W
+?DV3OPBLV&2T^4uOlMRk-iaHbbs2@fk.3ANF*;<CP`:`+m'2siTd.6PcEZ:(]m+Gm]V1(Wpug!-P-`Q*
+RogX1kiba:1_He:<%gf#/.&,s-C(9n4%EAjop&<"2O"sa_U"`(L2fpD\+=B9>T7]]$uR*:)ReYbXG<kC
+QA^o/O'E;V0"A=u;+>fMjD2heW@_PS[.rf,D#ALa1%*HCRnmg7%?T&;#.E9Tf5GG!_6*GAh8q\?Cs"Q^
+qtEkJT34g0me`3Z1;6Q7(h-Y5-!aA][U7OfC'`WIcb,ZXFj>9LNO$@Z2o$2P0,6NRbB\#>p^D&P]KYl9
+4tiUENu?:aEq457I0_fmm,E=GckIK`VDQ!mdoZ^;Enh,IoX:"H>'EYSr._#T'3'MW;KqDQ8^K"X6a:ZY=tPsbc_rb.Zgmp;nl-Q>@p_jXdANkh/thj(rN=4"_U;WU,gcDkPhOdrOkW(*<ShoZg\Zo<D;7RL
+pb-^5plOXl%b$(iL@sMbZRGRm(#Q);HGVc$T(Q3t^7\JY4n?Y5E";K)0#%_OISpJtCmDoK(D_ZFBEWQ%
+,*b-kS%K_NddaJ-TfDM=QlL_JH;?cI4UHJ_]\f1L*a(i%jo>(&e(jP2#L5Co.@ko'(@OI0ShR>@kW5Qd
+FrGY0\jG093on5&c`u6]IPUV'cR9k$6udR]aNK'YCN[/mf=%e*rL^-raR=n:s#08M*Q.8mTC)W)Du/8$
+e+pQ7]tS6E1,F,>/%uZIS\B1H,`C"q6RSlp`jbO(^kd"ij'P%K!'mNK4L<'fCZQ(RLaCg\^r,3K$e@;m
+'>7$?_*ca=A(J>H&]#Uq3CDOaqqO$ORC(`'^%<:-6^L*G*^178P<8u.6W-*@'0oLt^fg5tBVZG1$C=C"
+]MRE="/eGK;6`b'5MRkU_m)K(W]08i6Q@et,VVSJ0gdKL6UW^t9K#7C2a`N^_ji\RUc63(3CBl26c;&R
+bW\DL5=>oD`#M$1,X9405t!7m6psC19L_ET7mr;*`10@dUdrA98OTXS7)V_dbYCR]:IP[e`>h]C,YuBA;+3$977:'C9NFSdrsR=#N]\Pso:\84-+_Si6A+PllOU_Aqo0"a41f">_1t@GKLLFc_Qg44Ch?.a
+@Rb0@RbVSrKPEuhB1At>7`9(3b\fo*Dat4R`uK%g,]C^cECVR&7mqDg9Qip2G=RU8a..BEUj'klGt4ra
+8&TaEb^N(;In0usa;f_$,_*ltJOh>G848)$9SQ)CLIdAYaIJ&WUkd%(M+F_-8ApEWb`56LO%Bb?aW-C6
+,`g&0O\%*h8OSb69U87TQV!.%adeG^S=)s$'#GL0`L,[SX?K(cSf2?!-gY/.j&\G*=!a)C6&];)1bVIK
+@5dbI8Yh]aFK.pFWli8^9"_;u`32eWY0-sOb1s8F%'iM?ZqENh9/O(M/@S8G[`a?5b?VU$N4MZH]M#oN
+9=2E+XM7EP^<?_pbM9qX%)P[P`(W;4,D<s)m&!$hj?4-k6`cqE1gLD+I[<'38i'S`YfSmch3nD57KX+A
+bbgB\a/*=m.$S:;Cfel/Ur@0'9m#%4UtO"GgWchT9sibOgttiUi(_GS:$gf`,iR#Gj3B4::,M*.>j"j]
+kY=h9:2K.>V!60PlcuTu::0Fah![I`kfldI7DcgR7*8:FTUKDbT@D+PM$Z4*e\`qUcP4jD>c9m:qoY/u`^K_sN;Tg=WQZpp9MEIQ*6$8^!mi4r:gF6$D$/.-"OMQ':lPfYAI6_k$IFJ8:u)RWm0h;6%++qb
+;%4.7jUolt&C7#\[Fl8<A>DfHeN=eL]KB%bXVi3;oqOYCJEsW^;m&$@T$Nnoc`;5aJiQG%&B7@CdRt%E
+%
+ /m<8s&+gT[d=(B"VakJ.oOV*da\uYjXa<c0N.9ldetn!/M^6f02kS"doA2&AMd=k3)aZRdsX5TXZB"*
+[F19lb)Fe1[40S\5JJ3-dX;rjeJku[2,?<r7Ek<dHLj"ApeK>cdNg%I"Vt(L]GeF5WP)!5r+49's3oKq
+d]GOYF]29l<)^2'eQ#St]iEU*<n2V$<K10^AQr/g>Lf9LeZE(Vm9N`b?<-q/;p@SX'3irMcdj[Z<!2O1
+[26sOb>0]X`8qq3ML*6uXO6DYe=u@A9h\OB9fg6g<s;AP4`MDdSCJ'[eK!,ih02m'GLdL:f:@0<V0H(T
+Guq+r=2fMfc$iaMIom//fH#KE-%FQ1@CG!(=&^eQ7>9;M5KV0*-8fJLPf_LPoN8/O<lITe]bOT//CsAL
+fTd9+,32la6-f]Z=G;O^>gOogJQOLl=@IjFNLF"@Rp!s[N5N#'ChAQuYR@_@d9MJ;UhJHc2qgZA>#_m9FduU:W*4VK=hUh<eZ%91$W\R>g=oe5FbX)sX3%c1_I^##D&Ph`C;mkV=QIn+eSJ9W)VG2VgO%u8
+'`M:tQ<)P$>-4aXjf@/'XBZ4M>TGh.FDtJACg9E$Rg@0l<-I&>UYKC5>_U,OP9O'cU"mTp>bL<9jj%#q
+QJDGR>ogacrR5$u_HfUZh(<9got4FL@E'm0h0n!V'c1/;i6P-QgH77G9_$kC6IuYH53ldbqt6aji7jFX
+>J77HKJ#2`Qs!'h?>\EKolf.kls42i>ts_B?1)%sIbbS!>kQ90A^*H$Q/<&Agk_8$IJ)Btp:_iF>m8L1
+HuRt+bL[cRhi7'\c1#*5mpHV*?lf7)/:cI)l9b0I=_',B<Kc0Oia()l=M;5o>k2):+e*7KY)HCf:sDc%
+0hOLf?6)UDSBfmG"(2lYi$JE^?5I$eW*^:bhmOClmMakDqcqDE@C@02D9HA$2.?`[iU*K$-5k_&r7;E!
+$&0b`SfD3/'k)hFigpopVAJ7!OPiSA`#H-m?"K(%r7OLS@%D(1SdJ[jN79p?gLYC\lnM3L8`9.SdIfh7
+-04*/ki9*&A)8]qmOR>k.:`R^iYD#nKqaI<T\iKljAj=]2>UYsR*ufo@HJnI?2S/L8)c^%ACYa3/ktEP5%FRhA.DJu%T6k#G2h%%5lM!o`%N=k<o0*uNU@*aV;=UOhdEkM-o;H/N]A?o-Xf>uA$f.dlOR=9
+;WJU)AklrL7V1_*7cZH%AGu=5DGOfUGZlq_B%A-dY%WZ`8nOpl$'oPhQ>>I9C>nZ_AB&`S*cu"3;eM,'
+kE^@*SXO+ikFM#pi.Yc'p+G9Ogg_Y<)`BM.mPNrV?g(+i[?XQh4Tf3FHY9L<Aql1UVMaMb6=H`]B5UIW
+I":G+BkHdQ>&K>CcB)`]Ep34<i`;(N#&N8tQt[%gBqC.E^5;*OS'a-A>LjHg?8#Wek9u>%>G/T>XOLgo
+8S-&^BNCu^VP38BTPBLCC!N_m[]=,^X6H`lkrnrZk*9X4qs+GXk>mg]I[One")@OqB6L]Hm^Cg:F(j.2
+i[DKT`k-!:]P=U]ldW3(h7V5!IUGm9@hhc&(#S4#o2s!?C,VsUC('<U_.jGFAer)FcG",/bA>JHh%$]!
+2Rqu]Z0%WoA;8HHQEnQNcg<j6D,.8#p<Muq[orEiic_bIQEY2^]^45)mDd@ejlo"4WGEWkli,"#/Wo5Y
+_e%E;>D=tN?&^,OhX#FM)BEqf-K*ulb&-#&D=6fYf'[GROR#s$D2lMOD4t_ldGNeTm@8pbAIs^WYMW`Zkt\_V7ZV>>fBF@'me6WspA]$us5b<:DCoI7rlEgM_IIIf@o]jK/mN'RJ]t^d]Zk<]S__.X1L?'+
+n0\=s(B3e.&8qdRnGa)?%h`kH&b/X1EE<eCD\QF=!UdXUmN2pV'pJ&U"mABC*W8EA?O1/6$G9^R66]jr
+`ueAPL@MGn/d5-mB,C)^-ZY7_nt.=NV^M&M.<;UDElT\M*uOM4h!d5fBAXZl%ik(uOR,^Lnio#t4_s)m
+*]k].5VSS^KC\RT+VW,aDQbAU5:5si5]Ya5o&i;\%mkA&61dr?FB:g$Da[NLWms=)dtXdOLB^eG3:gK9
+<+dF5%d<Mb/N`sLW?Ytp%?Ou[3:gYD3r(+Dk8A@7A9<;kFD"a!Y?H(`7J4u0p"*Djk?N/e?tGU*F8[\4
+XCLn9MfVq]o51e_C?TD"TD!2$^^Dc9_<Z/r7Q^o95[QTJr9X.V&9e@tG7S_<+*1jDEq`(FpD7srDg$>S
+FSCQ5pQ'WET6kd+HM>I,pQp;Pms]K\I/!qpp^_t$+&d?t1dK@KBK#$s7q_U@C@5/$FUk-\C'"%#3d?QE
+FuO2]muM_nOEhA!Gor2p09\AfNc;`R5!ObjItmc*kTftPFVgD$L#r*4VKfk5Gg+6PemW[hPPPf`H68l-
+0;EhXUj>h1Gu!GoB*S'2L3e"NpcBDdqQ5(QT(L@#-]b%;7r!@rD"cm;je&Ar0=-!i[!PTVHXF4.CM`i[
+1\DhHq/3"us+u!0WckkS1:L9\%o.7c*(?*aok$#AgbrZZG8cg]Ya9495JG?sDY_.cHsIS`igkICJpbUS
+q>r;I9o]([S,E?Xr,9&m0@P>4\a\1eqiAAa=06e0:&:L(8oN"'6Tb,D]_pB^^08F&X:3KXa8QUt5Y'7Ne=HRliO.k/F._SJa5MI/?MtWJr_L@ZLVe5Ob'p%GIb$9%ndL!1lbFn*ICJcs0>1=496l:dI."t"
+QH"D5pcKqZI@nT-cfY6,lQ?H%Hft9S+8gop!X/[W[o\M),T76tL-oCrpj`D\$%oc40mLWK2&hQGA't)T
+IO>eaaPsKC7&Es7Q:RaU8DKXM/XfCF1FTWa+ZQ#gB@HZEiaEb!8a$cnjW9[[P0<(=8p&@F8Z#L&eU#2H
+[9Ke8CXr:cL;dZ.=_uYKRA?c\!8=Q>3n;(REjN]`nB*:+o+\l;Dj-Q*dKP67<3E`Y7OJq/`a`O;RpEKJ
+KUPmqpZcVi%@OumZ.FrQlM$m%k\tb5-7;_RdqCO?h/1J8XjudGqcti3B:FhCmeQghs#GbfC%kg1*r]Hd
+a)Q7W.!GIscKS^oS:-.`NS3N'GCA=rmt6k[pH5"\Y61QWNd/%Hs$):tb4L*G?&r'6R8EkTr6M^hq`:p=
+o)c_S4:q_4:g=kB_9dKPa=W<h!s0k\,QP,;%`ASF4`8^UlSpSO8J8th4AbdG&>U`_-nh([&%iG^5h3Eh
+4?EJP0rndS_f;08*l9ZH6QaCr'T!c#10erD8J5eX,t\e$T-->#S=(m"OT]YJ7r]66.EYQ<a!8Wg'XKSh'"lgJc*Jt%(G*m+AG8;e,h"a!;`sS!Z#Rte5#"rR#s,sY9bBe@<*^A2dF<PB#r5/%%])\er:`J*
+;]@_ldM2XG:t/(J.i'm^W`:"W;sd^Q5daPd<mrlUeQ>PrU[L.f1_jXj=-`^<&lSC-eN-IkK.U:Y[C"mF
+9Jt<[%p8MlVe929j`)2B'pX>da>T$/B%(q"F)OTn"bO]rQ/0Juf@Ja=;;PBFl$D4<^$s@r;/K/<b-].*
+(gXT+4ZhO\4qWI`pYAV\-$E;GF&qfp+`lD)Kuna9fT%t-i`?m[Fs@bZ'p<)`nm^<a=[Q2Kj4N\r6.D)f
+Be<Ol^1!OCq;'5ag[>><OCiaO-(SLfY$IX^MFL%,@9S,RW9RQXWHhp:VAuA`H#<_+ABuk8kN]Z#ag.et
+]ISHMq-l.RBlJeWR,^)RMfi_p2Y"@mg-1e9mk\NR]C+9?8#GZu*:2ThH)ou71AkbI^i+UDs1WNcMSiu_
+>e^H#Am9a2cnV%sM4sP<p<D+[?!gacousO1aPWH2rB=U+`k?q=HPC&CpYGhLZsG@kD3XT-G=C9]I.nl/
+Dcg?U\To2c6gAsRY;tY!3_%fhoY+t9"S/&>^!lnnDo_3irjUABoR;kInGRitEVe5`n(m^;?cR`ss3LZE5SYL0:n%o@C0?%r2sR%U8gAPa4omqd,bj-/C2r\W=MAA'jq-"Q>#.^a2cnN'+Uc:tB=4#@K\U\l
+KH#E"rAd3b#mm9Q$Z#3_"2cN[%NuM]K?Q@#2TTe5+aIaTY`2o!8;@\L)p3c[1(U[8:B][Q<Jo11/4=#L
+m%?(=GA23&\;6m3+G7=b0qL3J(^Qql9=0[5]op<9i>gmRFcOl*6p\oa*ol=0O3?Mi`o;C_bGrO:nEr)'
+QlR:0A;qh^"p;6QEt$e[%!-Ff9-Y;p,bl'BMXk@.agZaJ,m9rH;Na$Rf_$\iA?D-F^+Bg`9\(JI[:#(F
+0?T#afOS6kQdP@p9DO6>-!\?TdiN$nQCfmD<6^i[5#Y,f\KM>CL6?R$?HnkZ1a_8_RT"BK:)V#1k9T/Z
+e"1YVRFG8Lq/Ls;EWsO/)`HbVoQV#5CehJD4(m(AT@<di:`9L&kTpD*b)UocM5ZrobkRlR/_:h)<!Ybq
+!2=R9MpZ8f!$.T;T^>':;!I(4k.Mt7[$"24RS?DR74Y4a[[9s=AP4JC0;c+rRT#Yl:8u2oVptF5;gO-n
+.NLaP[0E@)RZ14F78'W12Q0T$V,Jk7:TCflW`>Li<iX,CX4;Bt<I2Vc.ihuu[>(tfRa#$:7;JrEc8O)7#<U-teu:FqHWQKs:<7i$UGR.A;>U#*kj<hoFrH<AHPL"+AK%h^,0*h*+_9qFP-VMoa4YesAo-Rp
+ZaO>h=rTb@m+nDC[Z\tjHW=ftAYulDU=WTg@;P=:ZF73if@tXpDJeLD\$k;R>T865mG5Xh[h@TRH^/Vh
+A]D9i,3N5NTlf^.d^lnckM:KmG&HEm]=28<?5p_*mbQm8\!$4:He!F\A`g\8UA&"6iI(*"o"MT]pYU>j
+IW+?A^UN5&?lT2tmk"hqoKj&-)ZpsidG&!G9EP8lKE*]d'>h7X$"8cEL2ag=['ddW@E_/pnKo/B2@34%
+$jhFPh?([+Y8:ZlAW1W+0ZMb[*+M*LNj6kea11R[A'BXgE[F&mf`*4-4HGZ2:.<:80.1;SV3H"t:s.HU
+/7grIQEne9bIMOEA^&,U0JQVE'#n2+MXc>'AI'Ki?FXVb\jNV)+L$uK>%-&8MA?tOQC3@jAc2e"oF?Q$
+H&"e$>n`q(<fPLq5=9-*(SnE]PgUIG9PIcgV=`?0e!bbZC)o73[.^<F)NRj4>uQ;qol5o?dP+H8Vjd->
+D,aVm$)'[,42ApU!&C.I;3NsW_GKn+%kg*t\Ak*2YmAla5?$qY9sjS"eCn,.Ci+U.[!(T_gUh*:mCg3CpBK^6>F0GLIFYiOB'.p]Vg%RBh03oh<QsQ^]3r&VXgP9`+W8):lb.YKo;577HP^2T]p$/9Xe82]
+1idR"%n9*^']HVD5ZnRIBhkiERf$rXh-MnX%fZ%U)pa`=SkX/a+"4iCDT;8U6d3(FcEb+2qX]ZDcE7[?
+ja5%@EpeS&\fX0#>p#e_NfDJ5B1qLF(K9d*M6%sS%F&,KH`6=O7lUebf:)S=lqNJF3*p2Mgp$8;%R%aQ
+B/\7Eqj[,)A)+2I4RNuo]@e7sc$O)Jm[`OSoa[8F\o38L?3Z;^NsfTI[t!JOPIGb=l#[<i;"7dmlu`74
+k58SWo3Qd]H6501r?n?3*fncr>\DQDT2_8m>?UW[?&E]P):r/@JbC,sffLXWm.e%)Gn0^rI(i>F?8ot$
+:FC.25KiNQ-fK?3L[)Q;ebYnF[f&Fcl@*Bk6p7aCG9<N*IP9dZh4sN=Dn5-tBBoH1A,#u;h>I;.o_r4L
+r,OAnmg3W0/.M0J%;>d\)!b]\lehjFn.OYu'\C\L!>$%K&/t[)*s,7h!g##YDT(K_"S\Wo-ObP#0,XWU
+[dc#`nup"/9:G[[dep7\"E0n90O4Q0_ZgXIs"EC;&+'TTd0;5umuTa.:epFs1Be:@"mn#JY^Z?9L+i"\#&ir;&9eI8FUF4K$F$E8d'F)k[gGsCb`DJV7aC^EPeg/tp.&q*YR9]j)Z]>Klu9iEV25LoU'W".
++.s8WYjW)VnIE>Im;CG[0-:L^CnknL#k4AiY_s)iR0XBB&5ZnFE=h08!]BJT$dgO5mE"CiU?5;]nhE9>
+/p@lp0beRq$1LS$nOi5S<>,sK$^!4\&R?%>?PZLK(6NMNEH93_=Fh%1Sda'@/b^)RlIPE=f.bc!OP8uo
+&Hbi)%O8Er&GI)>q\jGH&$G^>&PWro+V9c5&heeN:QZT9](/]o'lhJ<MdZoF],_K'(=@7?XC3,h*=.e@
+#)H=mm(j`^^E'Se*qAtF1#3m+"X&rd+L0fI&dKQ-(EkOE+[eZV%:9polLkSR%-_Ze_8tO9f`BM_!cgF*
+dQms*70)g4pMf(/j+>oY$G!FB&!<t(nG^`@iu[a?n^18WXD%iW@jc5Cs&*nAZ2h>=KcuU$.+/VJEBt^%
+#8".Bddi5B;Oo8!r@,$n-F+XB&rS7q)_4gu/!@Xqo"?S0_("li"-7jSD.=Cq/Jr:BhkfKF6J13k_&6\'
+)7!*L0(Q3I]*'k!*KPshY`C7HI0Qqm&eW(p&oB,HWuQ(M0@IfiElTq6%0r$q0N)g.EsDLn<@K^W-PIFQZQV/'
+aY\&d1p\Da'2LJa8Mu[O(P]=+C_G;sfbfn0/]C"./dVuJF"Xce/Fl^9lY7XVjXek:.T:s@cqtC[b;9gW
+3O(k1EQ&Q2V`E343K(]Z;d2+8[5E!."\&Y%;<p6+QRQqM3O"JtEO@om)*8Lm1t0!!'AkuP[m"lF5*PG!
+e+39tM]u%R,*9sGE!8-G+ZD/J,P2Kl1_D!T'`l`W%J,&CZCiG#J2<=o4u;^qoCY;S1IIA.6ZbO['L>)c6U[//7+=:dZr'6_>sF1D5].H)$?JI1d`p&9p<esEOd,P/R3_DIm'AOTU/\>[%78Q579#==
+e<<<Q2*,iA8T^RnFJ2:UUIpcK9%9+u['89u?C&iM%$P;\;elAH.2^@@/l-I>P]nb0HEL4s'g^1__?E[K
+j\@>D05;u^8SL`&V+Xeb:R(lP2$$>B"]*YN:t5eIoa=V3(K"0Nps`ItFN6VOf1[sU;FM6aZl)eA'2t,3
+;mJhXco4\%(E[b]!#82=!XVXNfe9`R;)JY\'jk!A)-/V/<cq\KeT4e,G?2+s<q*"[Jq$\k,9jNFY>]:?
+o5RI-D`;ddTp0ggogY_ITiBQ=]!YNbDBRpGgo[uqXS'<0Q,-[i`EUm1>h-l"ougVUf3MD2>a=2P2;qi+j^$Es
+?Ie4Fp$5s"pKpqt?BtOt2?@0N"^fg_@+GQjp'Y:E(L^>_XE#OSe7hWW.1FYZ=Rhp-Zu$ZPcWRSs=nL<L
+1Or6diEEVS6@oGBC-(>S!WX>G!#A^KemW.`>@r%gAsR"@(2mhdD.f/MB@_-:[Xi);U]b'\"(2.C[Z>,\
+O_E=6Bi^^;G,&dfVePk*C"BJ&<ip-qZ"fT8CKA&_G/J,3a(tClCY$gJ<m>J>d;5-%D-#D.G2mHUkABqYD:\/n<paf`nSXZgDcZaRG6;e##B0>EDq>M=<t0..&TF'SEE=*!G9_,E-ZSl2ERuja="SJP
+0liU@F&tGEG=-Hg7s"DtF4X30=&!fr;08.-F]VdiG@Pe4B6EraFk:PT=)E.?EH[[oG?9-8GCt,VLNiKN
+GLqmsFr3:V+]t$VA+h?:1+u;>5>sF(;ft6M'FfB5I8i*YTJ`]D[RqZC:*<S98<RR/G(k?FGA$['I<L6k
+fAh;q>T^cN'4?HA\*bGaKm;5FGo)<ep\TIWrIC7?JCk$V(^#=k$\:8TJTq]Vp`"f%*J0Y+K%MB%(aFZ8
+.t]fAK6T&%pcF-G4bT1mK\/_I(dj!Z98,?.Km6CIpfiIh]I(f&;@20)eA$;DAU7)H=]RCReicMZGth4c>"T<)
+\&2b!2ge8N>6kUo'j3N)K\Z=nIi%GW2tr%D?&P)ZMqDU"(h8M,]8S_kN-N*rpreX6c&J+BNS)dA(t4LI
+gQ"8XNd0HAq!3tXm>mY/O4a,e)"WhkqiE_%/e"FXG]'(:??7u^@^O+:Kc;s+kD3&JLt4sSlX>XXXKf:(
+[MYTqQ*l#A.uK@BMV,%h=UU;d#F0Q@Q'kX<)./\4?'^m_QJ#c6\T*r2B:!mbQ^Mu`)1S#VI@-FLR+[+Z\WN9TLRE>[OR0TA.(>'nBS,uUbm7Sl3?a/:WEE^UHWRP"q7iEn].XKt8..eKb=e'7<g"=n
+4\CgI),H/.;jj&=T%WG%)3^[QS"H,;T3;2d[uRG6!MA"0X*P)EH4-EM';:j,U"TUBqA5ke)kn2>RI$i?
+.:n`cI08.H/+<Rc2D!+A7/!"!=cno(Q9UQ.0O=BDM-%`g<`*'^2ksNRPaC&bc?h>TJY#s8,.]/#)CqOc
+Kqb#kW7m0/)M=D9Pc$R-Kj'mQ)P*m3M5kl_Wk+CoR^9$J[At4TC>(<SPE2ItR>2IS/Qo>:PqAc\ae[F*
++EVb&<8"+(Bg'WiPB`Cf\_!^#oqn/51%Fc;OA-HnH]'q7X.$5s)\92W]rSaaYr`hgg7_rkag(^D@5\Fu"1b_L
+2mI]MZb&6')aC]66aW;EX:l:0Md`]5Bi92(2HY-e\9k$=Ij7WCZ:30;HKLEZcR!eYYBZn4>C[]^rBo$5
+8ZO#=RH_'t4g_hf\_BWbS"mOjQa1sVWOa[m]<eh)#J(kP\m)eZ)k4K%^V!do]U(:YnL.=/6+)#UUQ>;S
+HWjV<=%7M\7_<ERYVj0j&\i1B^Ru1Rqua^(#J]%#^`3fuq5Lhkgq4QuMDeJ<\oBIRZSJRS\N:85gV(L/a2<9\_jis/f$1e]7].&(`1+6J>;*<f6+m+W`Oo?mgge>DB>c`I]eS`I.j;U<Kt^K$LK`)-
+g..W7N_s%VPWT`uYaW)7*L&M/^"\=Z;Q08-O2Blg`a!<%r*RVeC!0bnTcB'9*)k'D;9YP0:`Qgd*4a<V
+\':GVc!9.tr,4UEf!E#4UV(q3qd7D^+0A\TaW-GgM^-?2D7D&W\<@>tF3:7?X0S8Sc.q'uI36mC,LVnT
+b^@[Z>r0^<0@Pagd_-gOh*9>96e%YmeCk$Xn9NACFf(FUY'g1;'Z&+]0>9RKck,B)#_T"dL!]Fi^^ft`
+SOM1:9@SAcfR8aP4Zh,@2:ES4fud1n!=g"J!ST]7g:aK>?*W,>Ze7\Ff_p``*P^B8M;3NAW;P`DI9*Ydm*9gE
+^=F[XH:,c!Xk)=nLBecUI&!nD'0Vj;M]#C0*Q-[(#Me/>i4[<o?+XMcYM/sjfq'1`IMpm(-/3l!gKlPm
+Rk:X($/jZ%i>t5DSjD<2%FmJ4e[ZBf?#/9N@&4h.hOX&r!c+@?osh("fH(!`IKSY;4leeRjF2UAQOVph
+mGgBgidQsJhMpOOLZtBO48tN**g,_OPNlJJ?QOFW*e!69\*H5/i>p:c^"AX@nQA!I^2C-MQ%hTGQ7i!4_+0@E1]Q'T%Ha2nSfR[6]n>WW]Bc'_n(tasSt!s<U%"YSnD:/7*iJ%)S`2jEnQu[o5-<M1
++n>RQnt.49*r5D6s6m]'oA;XiU>^LT+1M8?af0")a]7G+bN4Uo^8^7U.%fn;b&+n,E')tF4Hj?*ldsP#
+*8^A[s#9^;3VZrIJ_pXaWjD9r/bu"`q7da!s-NQ=Vt.U%qHjuKhlloaTAr#Dpj^'Rhhh8<_>(U3D')LN
++%t\n$f/R#[FqbMq6SD\hLL)qmJCM\IrY33D>/4#h')j3@(@5\-mT]=",+ML:l'3O+QO7C6m)c*<\=B%
+*YW'$giaGX%#2P1.3t?T,F$=3;MfM(@4[g=k*#P1g1rF5c0&#^o_*huThag8qAgK46);om</PfVThMF`lBM.9
+>,tN%ea$4mole/VYu^4Vq]2-K@C4_L:qLg5)0*.(DKdUbf(!st>q^D;jo540]\kJg/*neuLM-ZB34s,b
+'p-IHEVWk:?RM8`B(FTe/q4D*^h7_VN@o!<WRGUi)SL='@@PVP1g"Uj7p2bGDKhQJQIfa0ZuGD;94o<t
+al@EOZ`Gf5U!;Y?H@7DY=0^BEFZY"hkC:2(m.`\l0(5.S1uS6**nZ=FW)Ncp5#AHghspO@IfH%toC2WAO:2'i5d3'TqnR.!f\<V`lkKB7&-<:D6EmgM$p]o=0*O_FX<.tg98#S8__EuD'La`U<u+60
+FC,h-DklIiJ1+M$!.[<;E?-8YngKDe&c+4*8?sM%+NY69P9qM&qE0cD.1=Aj4S#k[/4u)Sdk&\*goiBS
+ZNRrs9QN&01e]Au(u%ckAD[&Tdu<5icBFJ2hR55`G1048ndRb//bK91:inQ&6oS'BlT)*^,l'jUm!TZ.
+9iEUl9@D9MgIBSH*AL:;2&/JV<#%8J;q,qa92np!<F#2>d@FngerQ)5)HQO5G?n:Xc$m7U&DU[nfQJ9l'\Lq%
+mW(^]Cd`j-ejZJR_N@5LBYnr;MebU:lhtX&n(j%A>ZR]IFBph)1>pkf>ZhqGOg5E;7rcbB,@;'`o-N;'
+jo6StnpI?:i3d/+<T,fi'ng"?FrQ6Fpm)eS\^k%8N+2S44_A1`jR#N8oRhXSc8c=XhddT?:Qab+p,e8(
+R:^)sZ86)AS722ma-YraeoQZ2);^.BBY",'T]m@@20da'`h.Nk)KqkofJf);FP0^Nhf`5nNafl]f,hVG
+l^K^gZ9srV_ZK4p7^oL)gD8,HDS*81X?h2>e%<ELD1R">p\"9t?X,Mp_r(gMUOf)l2Nu3rI#fAkEkJ;'
+V/mWK1Q,eVp0l;1]*CjQoUQ'DRPm;A#Ln8E?Vcqu*L9nno\Fj%f(V>13R)U"j0RLnIIDsKpY=Yej*<g9
+Olb)^rhWuu*gWd4C>Q,hFm_?X&\.N2T"hE*)je$XmlPF]\9f/Jf5?"$&(toM?RP%5CHn-`qu4%p#@VR+
+l9J`P1'&!>!s'M_:k6n>"@0I)"!B]8@#lbr]\"Y9i3UXZn4F*T\2;-q$`/Ld_:q:96O2Q`XCeIYf:/.%$XGR"G&Y#*Qe5^5*L`0MYZ;5g7-l*"E,G[FqB.QgFU)A,7tWN?*Q4>5'$j4sHB1ND]f)b\c[/`C
+.oG[uVnT]Jo$Dc&mP)69ZPO3Xk'dcN0g9g;(uH$GN"N?S7VM$,;)Ds7X-gK=./+Pp$&*l)%L1!6+!G#k
+KTPaC#=t3s"Cb>"M6]Gq8LZ)5jKt&4jH:BIGrZ1j,b(#0OZ'N074;T7Vj",A'Z4NS.V1r2L9T1jaba]I
+PHcN#+Z(8CfZ>Z!FL@:<!_gfU-SX[>_H%78.`Ej''ddF@MXak1^LuFBj0S6&;15^o=aM"G`7J-?L2Fu/
+d$n'W@?)qRF&!%p4&A&sSF,ll7[`@$?fY=Ue)j^\=c5$_m/NH;#%Q!e#=+IMYa'15;Su*?6X`t&T2M)F
+17B@Mk`ls<oK$%#MB\]Ae?NW)p4CBXlnASSU'W4`>t`4F8E]XMTTm0W;]9@D$7*c^o/`F2(TfM@RcoZN
+JaUZ/]/?K+m\p`:DH*'m;efk7W:R$6QjDYMB,lIBMq5!`HFAj6lLq:/Ej8X`a]L&N?`b'&-:mE5>A:2q
+VU`Po<pJ[iW'iS?1j2hr#\-;:jVG&N"PclJ7:5-KKJQXI;-1kB%LA&8@P5B[Tkc#KCSd,q[D'i;]/=5-9fT%l2C[+liDpo26(7HVI8j@]CFXHnN4-IR>;l@X)q@TQQK"ZCg!`sa`EB<CVR"u,cZ!bZ_moB.
+#YY%XAhJ4rZStA:gt<m@'A\PL:85[/gC%Dj"kgKl#0&^Y_[>hff=TY']O&0.H>draAi,s@=Ys&gAJN\*
+=$lgl]CgYe"e`5GMZHbBX(cGLVk2E:q:_ma2m?#Z[[9Pk@6>tSXc."o;j,s@bBHs'\E'\*IDfSR'o<n\
+Lq.8Ls'M7pMfE>^^R2RghHSli9<I6dGgc@mS8im1m+o][F!&OuG3S@*6-0GQq#m4SPA*3San"C-?YT1l
+EJ?!dfk2jI[7>a$*ML948t9*r>A>Ck$t].=1LXPARr`akD+KuLiL6WrVT*h==GF4mB+dX9IOKa>ZPd>u
+YFtMGL!^cPSmu#hO`A(tdM=3"Bfq<8oSqXK>#PXiCjfW0[[PUTIT0kC;3K)=l\IeIb@l;=U3%`aef)4Z
+X"4@?Fgb\UW6[4P$m.Pe6`/+3pGctPM6V4^a'?1?ZKK7>6M=mag!2)^ccoar23uhJ)cplZNC10gY+3rW
+[mt0Ba^Fc/kM.h@P>P&p$9(F=gY927D_m$F!_nk-&T^q:]skEDmb-/R"+M)F]rgt1\A6Qd"AR-af/<K)fK:qAm#EO6GdeLJG_4i4/5+$)nHL3c#E\KcV4_^<s5b4*Pjgk>^lpD@hOBjWmL@^Z\V?f_e5(;Q
+I#kc4k*P6.bF!$RF_nPCpZ9&kQZTBub,^:$bT011jut,N1L,%\oC%Lnlo2pFpL!8-LL*c%V8k;PMV:4a
+_Y0MrioG#*l.m_soY0M;CSs/ToKSge.N-OUpO)FY#FOrHe)#I)RBM&X=a1G^j'@+,hZTu<FF:.E]XN"R
+rS,P5StX!up&io+(Tu_7-0X4C=]1f/#^.k(l[<u\Hs8),D#QU`q&0_9j@bOZc)9BGpR1dTDp;G`29e/e
+N4_.aa*`r95/&t)Q&NK@r?%O"r"4YHKTfnV^%q/H+5Zo;"7[*j4.#mE[e(s!WhTKr)8/Bloi]VnIm<2r
+Ge[3#I@I\BT4qL),IK\pP;-"p57@TX)t1R&at*AR\]^Y[]#D-glTg[>5a2I8;bo&F_nab+^8qYT@oTat
+@L5@75V*%'1_[\^'U'4$\23_>",*ZFN4iBj5C*mUMQ8tK*5U,FYcI[S"(dVt:m,o$2P^u&1^(Z`'L)-m
+^,uY;F:#bL.)L?B,ua"mZb7a@l,'5FR>_\>PDV,jH,;Zi6;/+]/2=$fWBkVAWUq8uPPHH))PlF5Yl#P0Zoc1BUd=VN4(J9-o<^aZ[iem@6SpPd1d],K1dN&K4BsL,F=9P)/]<<6_IP/^]"XjGE(#p^6M'S(
+`%\pl1W:%q`)KUM9GTup2Dru$79e4V6h[883>8b\-Hmo,Ug$7B>Xd.5`S6A6.m:`X5f<L"$`PGaA)>0]
+;T0nl`ad:^A1#:.?:L/m`hZkZRYaAD%D]ek`,'2-lB8H30=q?`3^dQ"1do?"F@SG^]-LB@4+nr>(n7m7
++4OF/>ZsGZou#"%a5[HCggE:Gh*;*O^YE51Z2d3:AOf^RaAdnk9:nD$CDLFj7_EZ\[#2rC8]Js8*K02R
+b_Z_/&A;Sr6POX`FEP\^PcXLV7spW;<-ZAt"[+*58X%W-8o6qs3&%+^a6]D>o%6HKR)@un4ktWICd?!.
+PY+o08Q;Q9X6D`'8OV'd`q5>7Ul\-!<lW@^1mG%5n^Fm=f>hC@aZQIo1pY:jVDY/,`Cac-8U89p@Rm-g
+a0Et%goO-G]Lo9=bLF7l>M0gnr^n`Xa;\eb7"i^![)uXm9/s=Mlu'GR92(S29B<.d@e<=;b<C"R[!T_b
+XN\ibOZO7t0$M=01rRX,`QM5Ra`M_mI$d&2R`0V^/PMY6,b7O)gs+@)Rl#W3!@0<)--Ap$buE]J,ic^Cg<,n10-oXI]PU!R^J+c,c?Vq*Pg@Xnld!/I^SK:L/E9Gen4cU;):XsFACeqOSgOooc'1/b*1S_T
+hG9C3c_L2,>+\%/_+ZEY]50[P6asiNnkTu$ckQV=_;%eeD7$=&,i"C!K^DC.#;9Wo:7VU9<:%iUE_bZj
+^>eTW%0KBH&'SSU9m%)p9RS]Jg+tkG/R7("XU<G"$;e\Y)!(Keo@_>EK?rVR82Pl_%0/^H&CM9p;%obP
+7*2B,k"oQU:mB+"PeBt2k0^"CaO/hlUkqq&ekYiM;B6<H,qdUr7EoB7dj+KRAD#4MSB:u':P1c.;`;s$
+qPnrX2>'!XI2IsF^`4(/`h_Qe75*-o02rT89^Lt@FKEcq#gc9Pe&<c:]gG\W$dsE/\ZIC3D%.Z`"20+7
+a"9U+"]*VW0WD_^bA>b0`&C2W'gmrr0PhWUMl]jb3@\lI^NEYRP;lE$r6sIBbTqeji/5f#;-"E.<:\,/
+od!5m6mZ,1]HkPK>t`aZM:>g%;I)dl<3F`YCC#go4`q7?/Rd0=@TN]=;'f,bGdsk5<6o#sbGit@F]MP&
+Gh.RoZ]lG&Q!76nfL^H4dJ?;`njHRU79B_EP)M_/*J;rYKUr?WetgVC4A8f#Lre\(=H![<NFY-LD,/%qfW>Rrbq16r+Ah`b<\9Ke7,q?#;`1[^cYKR]<EN%.2R)Q':\A)Fopa)d\Bh9\(L3?-AY2h@Z.!7m
+Wl9Q8AUrJtUKU*_S8A8Z4d0"pVi!o0[tSBgNJ^DdOk5kX:pl6aBgl4DBA1&%5-9mX'Ts`tWEP:hf*nM/
+9esn71Y:G>c]*>+*>[87RS"lq;<7^ZjF.Y?^=gE[f1>eo'uQ1<_UEp[cXk%!j^-VO)-^+Lg4d[E9>Xl5
+`7/A('?*OI%F/)C.G27P>mnZr`R;\g-+akrW0PK[Xk2BLK%k\dgPpVSKpL&mFjmI[c+UdGno!6*_:c62
+a5+P]mGO.5`El!nQd*KRXk_$pjkP5m>F!sG-0q^.ln1`oXtB')c.Lc^fO#'ifO`:4'l)PkN7PtMhbDHg
+PpYC",MNCr7CCZ-%8KVLn__m??eoa&-'_\eWSdZbf2S2?AU$*:T\5bg?BsJP^#DE(j'J;^*(AsqAdRCr
+"5m#k)ib-\D3eMYmbnomi?diW]jTabn6b;mQ&X!_I7MrOps+#;>lFBT[M_"]YMkK[N(#6fVAmMA/@tLm
+5aE-l()C@7@GRJq-@M1aV)Li'"?;,Fi9h!2VCOgO$DZuMLl+B*O_,O!HII<R@^ZYP`[kG6%:/oHghnrY
+4hk=&)or46j*dEU7O2D;4QF5NiU"\FKe$TNo@k</?`$0N,jJS,*TT+Bh'PC_hB>5iOK8@+j45I9[Fnq.
+g0b%AjN\$?eX+gghHRt<gXR<SVGk7pDrTIJ@d60"^/a1a%HW0p-ReoQ-(AC&<+Bnp??R`#&SG[h>ttS`
+TCj16Y$g;(9B<6J>BTM`HZe;E7Dc1/@@eK?:2+=[6e]a9@BE/_EuO+lA7?k9k$E)ghIS`S-03l\jR%=,4Lr;*0>1+10MZ$4$+uU>FX-bkOW!S"m.]]&WXm*r<UO,5-(<b8?Jnt$j)/Agh43(aNT6U^@%Lok
+Aoq_(Q"4FHB!*6,NR?CMD!(_Z0s%M,^-uY`>A"=Pho)g52N6mLMm8jIiac$JFooLL"m;*EB;UFAECse;
+=/Q]?VaEG%N_ebSJ44XUi-C]rk(?oh^;qXT0]^pOp53EF&87Y@N%MkZ[[?@bF1\T7k'bP4?622rCKgFo
+ktM?6cF19SC$A!PCS%n"I[.6oENu[7CCZ_I&sqc^!2a(lS$%!MekoFbT&,JX/[<'sk'U_D([="rkPeLu
+Su#/IVJ6Et5OPIVVTrj-2.\)tAd67iG,X6*3DKK]=V-DSofqd9f^%SVCF.622F'I/D]+RsD8q`Uod]8k
+hlaDuB"a2l0")o\q_fdedcS=4G1gZsDJ>tjcUMAHf$[s__qVoDj'=TW7`UpR)=IdJ1TNRuSh<C%I:s!M
+>W1%>#-$u*nYG<Fm1ngJB#WUHI;Eu\lIOM@(9ZcUYO6kmmY#4]G2$mUi5VYN8<1;tL6(ae#B3GG<'3\:
+Y2M+<jYe0n2jXSbp?;#ML!q);C_fcc*`$GAh,@YO?r$.R?LR7l'(;.Wj`^3+VPWX^=RP%ADe@R?K`5f]eo-1pDU-C>^=4FjnSdRU=6.0\Ij`#:!H9\@nGK3HFbgM<$c&q)2b)jtjj.naC%Bk/E'F\84A+M'
+#N)R0Z\IUF*s(mB.W^W<nK+.eY12WT47%oPl.d4o<mp2U5em$2B?n_@U-.O=*:^beMsaeiL=UATXBnZu
+jmk4jY$L%!q,+mS@%39t%bPg*3HKs+%3>(]b3m\Y7.iJFBe<uh%gDWM2-e`hF^DOu:GP%N%5VW,@P9b7
+pJLSr%dX]=@W*T&IYHdB6?-njp1GK<(J!ZG*,87"WW)M_V]KZ0C$_#oFHs^]O%7t@Wc:NFgYZZ9(B3GS
+XGsC7dK`VCG@-OkWcbI4AuAjI2co/!H1f0Aj<%WGB3W0,"aAZt4GAm$QT%tFG^"XFGZa&#+$3Q[<,=3N
+bGRPm:D[cFnTO@rV_:I3T5/O5CR`@5Cr^=!QZH_&8G<?+a-V`\?Mo(<&+X9/lK5'fs*"0=SG6Q$D6%XF
+T%u-a/pIVK7C/T^,gGo#<Z("Lkm_?=O',5sDCqUPpi!2.f3mJ`3prh"llirV1%JC[2HPAQoG2fFb^T@P
+NLVqmHS9;X-^Sj4R!VlYk_rm;pR:Q#S&?8UHG?M+g08U4$MUHkCQDJ?(Sto&UO%Wsr"jqU0;`]KZ[*_4]Onf(A[F;G^O!r7r8p1\T+^Ct@qit-agYhjT8[6_[eE"mg];?jRDjMcR/;)np1?40Q^.MV4B:"F
+puf<RY>BW8c27NLHk/%!:60W1>'rQ0r(\(+7>l:Xj*k:_H5FPC5H"F##5kbf?"_C\&']S.^A*2[h7nem
+pPNUEdlQ)FUBfE>cKifE"aGf3*f'Q@-i)I$\7^:arE#5-5_&i"+<UZ_66Ursi@p'E1)17P`*9:^$^)kP
+Mn(#D\9rH?*rnNd$*jts8Jr+p6XU3oY$3HB9I8.*I+E!jREfDC\[:XK4If4qe/A3#M+=8fBN2Q#.[s,-
+<%6?9I9*=KWRbfa]!Z:b>c_$Xef+LQUDX1Xg&MLTY1md#>V4PEc.4<Z]A)`IBZ8j(GeW*T(ct1+onLCi
+nQ.8Qmer3_?h.>.-;u:Sb@Yf5]WQ</S^;$A=fi0t5DR5C0t<c[Y=G25Cj$a\0%418_<SL29pXgX^WL<$
+)f>!Z;lngFq-)Wf-Q0hWni*(6VYc;'lL[/BecL[r8H=!_?9]g(c0+_FI9mUR\D.>Vp33r\+4eF*qL0uf
+^UND(r]a3F!<9i2/-?!iO@0<W^sGaq#!l(%+U=o9aO2OFJ.+(>_f4*[%muHV3t]D./41)h&PE'96R^.0(WHtR>k:F)N,9NR&Za"J]#^qu*CoG.Jr6=["H&#Vnk)%j8TI]@+@d''V('QMXJH:md7d[p9/>;9
+0$FnqYnTk&,f;6.dnJ.(85Z2;.m5Y?_MlUbA;qq^'>4!",#"f@N1`]f"$TJdX$8qs.#L]]Uga[.$.9BM
+,m_q\V(5*boURR.dhLn$:=L!Tm,L+.@o$#b&aOE!<L#r5=4L10AQ76'KkjetQ"u^l!#<1q>$)NIEp5<$
+rIjIG<Xj#a=-d][;V-)?De.Mo?*.U?p/=0C]AdLO*mPQ0de:BJ`-G-W2bh\Be2LC^G#VOcj*4m3Xm(2g
+pW_lL-Z^9Z1>h[e!=m(hbiNh71OOD#@2Ne!KA=\HL2oG%NN7tA35)_Zj&k_*O5h)f37)*[/g.dR'AcYS
+;)C-.K.cd:#F4DrY%]30FBou:kEiUPHtU"pIA#d"/r?@eFJVOk0D]9MgY(/9?)QtTp-l#s\H]C=g)BCh
+a(lV([:WS8VT6%-[[+7uCqFS]YAMhX\$^$U^<s@=2]rWoc5-)h]/KL%"f#co*g+?Z]I+<1nQ]uCa)O-,
+rINm3XOTPso+i4X4]smqc=,N%m_N@WY;\K6r<H?Qopp#,fCg5E`R/gU#4Yf:#d.]hjdB)6k[s&`F%5>?O,_/!r_JTrGog=Xk4'?rkifR([_GmcIa;lBpAW[U;sjS!_mn<ihn4j4T/EP2qVN[VnbsJn4f<Y!
+YL!*Lp>D.LG#(p+qMc`HH&rKu^djpri"Q?G:a-!,Ql+nB]9I@(=b*BH$KdlUrH/Z_Ku(heN*R)6FKTc9
+Y]rA=iC#,K:p(Q]#AECrHn@s.9b40-Gg+iW3Hrj;hP\DK8^"aVLeouR5e)R]U+?h38*/u"([1R"&^Pgo
+:&@0]Wtc_m_0t^f-UkP;'pc2jM[ur!^=^%8ioF!R;1:7>fWN8ee,"QTot<frrt46q8WOJO4\+.e+61Rq
+O-0d9_al-ui2hcCNb(+7k@G'1P&?E/D>V1,isB!bOcr[\:.a,$Q"5MpPVR\\O]QQ`+iHKf0_SMBG^cE^
+%
+ "=9nc9]WFAM%K3[jWsh1rdM8'O(]CNUmKd7qg^5-3RYC;5.P<aMfjn,@+dm-8[ngYqMt*a-iga31]*F
+l_CQ85'#pT:0DEoV9J.nPFcqmRG/lmN"gkA.LJIe)T<j^UQ^dnm`B!N-7#+WTMuDQ:fpX[Qu*,%ccC-!
+Gu@14Cp0R47Z%gN-Uju6N2%))ND\A8nRltfSTKa3;H_mKU1&>8B/+3k)7N9%'[W^5AbjcbW@q`:0RXY<SLV3kpM%<"N")5Ie6.hPQM[2B1s"BK8l&CNF]"rW:6\aNTfV6koT9g4;q77/l_mdFT8e_X<`U:h
+BO,>S<N`bTHG[1-I0?UihM]eH1L4e8GHXtd]Yjk%<3!'OWqHe8=?5%f-@9C12&`>j9-%LnHHN0Cg<)lg
+B4;roQT):_TNPH;Z"]`\Z5/F^c.0F(A"#-%PqL.Gb6r+N[BQm$`nFWYD./N#=f[b/hBLVj,3TE<Xt[/d
+]pd0eW!)mt[k?fJgRE0D"j+=H`XH&**Ghjs[C\?Rls8&WAh:=(VtN$s?:uPcm^;/]ekTu5l%8`4?(*[:
+$I7M]R='c97)'P;o09,EhQ9rK!;HKo?E:b`0%L9>GV95.g_.@Re\/"c:4$4RPm4CE._)Ngj2'M'Gj>7Q
+X[=d=*ZRb.Yq@6>:p1;F4/I!KS%=@Lbs>i)!:KB[3QCjK*+QX(O)bF_+r#Y7i/EYJ1+l,=jZ`0./'iY4
+2Gq.=NmV4HXd$,.m'H5Zpf#D>BJS)d^!4Q6j]o'Wk1um@2t4stm$ElVG"U%_a#[i>i@2!r];ob`_+JrL
+Mf\j=KMkGRkY+'qkU%YW)CY.>XVmiiKj_mfK0W#`@k'4qRE,/>+)0M_VY(.bGEdPYk5A#Eo<tRBYV!5s
+'R>(I5-`7G,4Xt^D0iM=\[+#o05E.DQKfN$HF\M'C[BHRp,,Rp3ho\k]iVNuL<m*67m66E.<"1IBQ^me
+&)jt'U$FiB`&^@_kj22moR>lW;N",Wc+,1n^-.acl;hgp>t/i]c/2_qB5cW"\h_I]3YP_.l[=mkYI+e`
+S/5T&STV0o[]n?6F'3J]'sT_7#N:%L=`#bh^Gl07j4oEQ5^fVbo@/W6]4U!c/]G/lDVemXJkC)Yf-[s]l.nJZSjMi!]/b?mTY&5fDf1Oa\iP`+)OHP-hFH&*(<b>-&QNsK2m,-a_ot5YY&I]!f(J0%j-SoS
+AmL,0qXs(;rHGN\DP,\[O!X37bII3H[E85?H-_3U5>Rl#V6gs8d*RuLk[&T`3Q^LJINQQSNS]Z-I:BdO
+hg'=6L9e:V#h5.>](\DUkPXq-^7*L>p>4Hs,?*+Z(+Z`RDb\,&a'\28c`p-e]>M6\U$V_dWV[3SlgD6U
+o=kgIHs]204ul7()<^-f>q_ju/Hb-0T::*J)XG%2khQ2FmQqE_k^NJEka:X8Xbg-Aa!\b!hlGi;gN,us
+:T3sBY+>IHamMC4%))@Qgs#4jb`>O"/>Vu8C<DV:ZjRfEDC5'qIf>CZ!QAsTO<jW5-N.m4!pRr)D632%
+SFUJIq@=".O/27paREn:">.XjW)W:s`<D?'"meMP-4p%!@ft"YdgsOVKb"DU87c_e!jCD^&;(&'7fEh)
+s)72GM2q8U#mg!C<A9mL/U%6b"SIiI!DQo$l<+F4T&Qsl$BQ26YTQq"JIJc:%+'h:E7EeWD$+^Fj\;tg
+c@g>%BXgl0\BmpAn"U't&B-8G"jm&KnETM);!&<YcO6cDW-Bua1A,U6l#/Qk0[U>KcOusQi%?/Om=:Yp[0fa6$?,#>Ysd-h`>#=f'CXr&n=:8T'+;#\!3j?V0YnN7Tb;?^'%&-@;/mB>mgZEs%H[ZPE9.3V
+m13o%qIOR@Y[n@nA.7C\*hX',NtW',`>R's)3/VHE),QC%\^'"&P_QT&Jd-a*i"_d(GX;ROj^j=0bnMq
+'_0umdGkt]fbG+^*mg#bO\H21miSh#+0Hm5;=*Ys;\i3M+OI/0;AC!g)&H0k*H6oK&Ut87XVa;*"Xmds
+BOr%c7i>0`)\-iudR>DnYo?O4&?t=:WZ:6-`>g0!&WW%[nf&bcBd%6q*Nm4#Ol[s1kmA"m+;0.tP(=AS
+TdTDOl>hjL.?P!9#p%G)+&W[.Z>CqoB.@r(.^#TacoE:\f-8WsdZQHlY6rWlOUcD+,_OD]d@s+XVYao%
+/Q0rtEmG7M@jNT-r,"M-VH4"C>:*5i.e<Ti$Z@C(^C)dd.5MJ8#!XK!'-4ji%&!C8o-#kf,+EWq1,CR=
+P;P-P)(9Ph1UB@I&R,2iRgTe<0iFW$.VCFJWA$,627$]s&2bu$[k#i8,;MHHdPtF94XC\s/gk-\XALru
+JGSj"/@0`8E[8NL_(S<.#Ho[%;Z/L0"ZhiRQEplGNX%9P5<F^s1c$%1dk`d&"pk:0!#*O<o@#i9brq99DU[3$1YY)leNS'/4EDl7'/;^--Ti$4#h/`;16daH4Z'HjlnRBI'GR$X=[BBp6.<#'lE)sb[cK;^
+0%.Qp0**VB"ZZf^6W8kc:U:517mo!J3:&dIP4'4.D$Mh"AtqXPcSZ=Gdm@"Y7e<^coDpD'<BsL"f<TN\
+P<2!-2*R5N"e]^'oTB2rO\&NC8X,Q5Uj5QHT1QDh9(]5Y1o!W`m67nj4k.;=P_hoV;^iE19^t%AFEo]a
+](E9,ifk6$AhcUdF&%te7b$^BPURFX,sq3PgN(0@ORC#LktnNu7+0s1o%$Di7Qe's8lFVF#rP-alT$M)
+7>>:uP$LN[krL*a3csg\'gkbO01U(T8$`P\<7*,e;,q^k23Z-T[)#BLOoXD_!^HceeT"YjF&qs\=*8pm
+Q%`<tM-(LP=7q\XFcT[*P?>2m96Hk-F_*^Xa&V_-=ERnR1_ScSg@]Oo9TeEo;PN+W),tb':DM2T<RASq
+[82r6T'r9>e3Mk*#2Ae[75aO37laH,f3ag8XgKS42(Z:Yn=fJc&_0"!e7i2G8R\p&4#OJpdL,9IXWPn!
+>>aKQP`8_/Ro^/$=dD?Tei@5]mm"624*E>hmLJ7,\QfnM>]:[f2Ap+Lf3MEo@FXsU[GO<TDdG$-:b5aUY%M*""[uGj:)3[r'8:,g`FoCR?mfGlVg2\DW8<e*B!u\kp).<Mk5UQ"48(1"'+J0PrDkbiA!NHr
+K?%L[O%T(V1QmAj[`N>=q\Ae95h8k<<Q)JqRiM-9CK@]Yp9S^I?Vbih:U&k'o5?uS#*\Y%A+P%\f$m<8
+P",/3Ed&O<b["Oi(MZ8CC:%>V2Qq'98T:!t]Cel)<ag,/?#0/qFf`&^;s-eS4'n.*XYlM;f&9TuiH?!T
+m?[V/(@uE^m;H`DDO%C<2beD'"aRRQB(l`mQOqKGpB29YHHcaIQ15f:M/m__7Q2ehesCc+973'\C%jGV
+pX;KL]b*+Z@.I`J2*YMnT6YYJ*DtR0GC;;IK6V-LCt3/i[aO_<L6G\[D>$\5G/8[Y;\iGdm5Pt<[uFkk
+M*La"H.SI5\1rI%KmGY%OVIb@'Knm,3<Zi^H^ITVjhlHjeU5UXI(3QVQs#,C.sg9OC'S0geMd_c"`t(p
+*6st)G_LcIfa-4WCmZGA2uA30/V"MpJ5r.:9Vdm)%nlY@M-(RNPh/YaP@^)3Gn^W];br<K=>4uTK/h82
+R*u[m4^HFnHAeg,"$[a%-[Ss2&=@<hOemdc'p"_pO0a\(m2IY0od'>'Xk2-rFYLg:5@HO!r:fH8G_qScdb)(>bS\/QbJf;dUP[T:=-Y,jpo.EJFb)JO.(M=gZCc^<B7G0LM"6mt2iEJP-]M8GN;7BYG'/+4
+%
+ iBJ;_\j,T(eYAV;T#fTOL6)sYI0HP#^(AtOBI\K=1[SH32"^h+q"1Lb4r/c[@=_5FEqqjRDRY]8K^j<
+lWH#pZPT/b'9gt?PSSle8dC6[2'=k-Q.aKHoZ`=S*M&S&N*%6^Q6J"cEM0jXT\78[1RF*R5B0f`T(ka$
+G;GV/$(/-hR.cqpq3.583-G'TRPb,7Wo9=*6_SLTS,'Uk)7QGf]qm*5QC8J[qIKBSb#pt>!l-ft3cG'!
+#R;K/Vj_u5!!E\&kFXcZT+7uGq>=<^h0-<)P549O<39];,H3VKWH\/f;nWOLOVA2hW7h7E=(%'bB:O8[
+XP1i,RSB-;fYZ<jJ%0J&G(f^[VlhdHEr&&u\8e\*6[cB$X="+P3sDK5pSO^!8m6/23tnP2J#I[NpA+qm
+R5_E%4fQ!N,C9H2BNnQ'WKc,=SU"e2q-fPK2ljEOZl/\3=';0HrNLUqYa]".,qY+eH]@IhHF;jSZZWEj
+PHMJgBq"Rq0a5&K';S7^O`59h9g[>+Q+=Mp\a;BIpb0&/caonP2Wn/HH@)R_^T.r&P1I[\e;JKmCKK87F_=7<gGu9Tc\hG-oU@9k>;H6,#9S<3^@VZ33le*:A\+B0[Mu;7\TaaS/TEg*A@hT*PC8JBMiSaR
+Kj0._)F(`4UUYta_'a$/)kjfZ3Q$37_lR^F*!<sg!)it!Z.a>u-i:/pO)@&,'3Xk2gWbD@<He-HA6Pt)
+oFXcb@2(fh>^Q"J3UOm,]_-YBaSZ"UOjUV+g._9/[lFu%)gN[?ICRi#;>Hp&OgDpS5IXPP_cP`Xgr1qW
+,KX2Q`2+e[S$o!d^Tq!P>L.#t,FQPP4ds98bGhqDHe1oSccCB/c<P^*>>pf7Mo[paP54XU][=sYPK`W,
+ad`Y*HJXe^\E2K^6b4S2gGLQ!.iO&X_ITXq*43Uh.to!"bPKgZZL`j+5@FCXdCiu9AqX-R;6bB-c8dc,
+p@3aIkq*6gncMF*q`2\Y5K1"Wcm<,-S*.d3$e_oC^KmC8]joH\A_M7jdMa"O>EPX>mhku#2k6qleIg9@
+P[$@?e9L5ol_DVXBdIk,-0A(KC)IVs?eW3\g4ek;>(`gKO+C.gFkQqIo-]ClbKdPF1RRH:;fTgar_=I-
+9HB&Kpab#:;9dicg-#le154+;q9e%^g>5+Br!1t3/&9t"_&Z/YS\K1c_oaVOglmTN''$0E;Zn,re$Ae)
+AG9$3jbN+_d9Z;&r>4%RM8_S1fJg+u*W(H/n)?Fnc4IWCI='kC'fd,od`se`3i1/jl`8^da8Qt/h$;V\
+IEl)C<F$-qIA?!IL$1]fmE//X)euFe\&o`Ae=%gmg+Dc=V;-LBUV:;-5&&iD^""tqa'O$;a3C(nbO*%b
+CE<)Gr:0"X-nkTJZ@)V`3E99%_4W\FMB35ORh&n5YJRj2Fkqhd]03ncfm!@$Z5tUaQG)Y9?XfT-Q+erc+!9A>GO>a%mTc4`^CA3>;=L2HdeHPdrqX@u]7o,E;I9[a<h&l2P#-WAOo=>c4mVk"HXYq&f"-(a
+5=b:YX!IJHl/-@BT$+h5Xl,J,lA+aDZ"M]q[nK"fQ?:[7hd;=e^&NR9+:*.@!"f9a6(kGA9HFoSLI5M^
+aHS;+%uJ9"Yo$\fGenDj,LQkqG"3^=8>QrE<16r9QV(hq$%/mg/W@[/;2NfbGrUXOKOKtp!eWk7d3qtO
+2("AYVGl`%)HBP';QA7s'oKD2Y?e;4lZO2sNkJo-fdmns25\]:[Ti-C)cb2>Ek:'Z(Q5]`msVoWms#f&
+%
+ fLF1)G5]K%O2^I`Stn4gkIm>PKRLC)'%/L.uKGh1`@AMO%H1sC%OFa/uqjOf5('u%;(W3[@1s/\o"&(
+8\C+#GT7b@%uI/q-o;om:EteBkB$J?*g][%dbX24]j7OK8_<?Rol<ai#"/IlJ:J\Z7#4ec&:cpXs,Y(R
+o_EoaJ"OdMn,<,Jn!ZXo%g:O;!Pk];!5_#q//H&fY_3l#61CBb$UQPC1CM((`&=<b86?-;LlFK8R[f?O
+9^b&WMf0CYakD.X7HYk5)b)72BUM?SluNr_nN:G,7)1c)#s8]FKbME[e%$_c&fdAhb&Ri'-a[nFNWFj-YQ+]\!isa)O-,['.a!oRGb7LT4PM/Vo/,D_:+7I=4%BQ5jYoquSGPIj'>/ZS:fJ^l6-Q\-ogMZ?
+r(fT)e1Db4_(aA#91+r_.nmk1jY'>,o^+S5<&FhL;cHac92sE!Rh!WJ:E<qHekF9,c;jC>Y9l3s%=)5?
+&R?2;2pjus@*-stP@[m?AXd=8p/R/\4;O3?BKC9W1@i*H9t9m]O9NGu4n]TDq7uJV#U%Q\APZ<3pMEuU
+?8mT$HX9dmi=I-I3%PP.P\l5E3#=,i6dJ_s%\(^&<Z6P-e=@J.g?j%+?/RV9$].`HFL*Vo',8PG@oQ'7
+KVCIQ)jKH/h#W:/'Ll)gk#j<P)WgcY@@ZLo[TT)4fqr[Yk8GWSG$apFo6P+s7[^)e\qZiVBf`,^Wp2XV
+dqmSMT"A1lg?-,q-C)!$B%jbl$*uNmS<[Pm]3#)=m5q32]5IMco-dep"L#1N:*-ja>AlmZ\KmL^_Z+U<
+A]4H"r*@-\>oGo)X)e'W1!=W#k;U_%\(V'!7$n\5d^LfgJW\10k(f1DRP&a8om-PsMIec[9k`q-jJe0\
+de()2bWVhUPik(4PMZ)fT3KukrNE!Y7NH]FlZq@,?fcT?gtV2l^Ae\(F1T]@c$\Crch2]NB0Z(fhf$lSn66'1Yl=[3#I7DO[PPG&2Xn+\lYfnOrVj;4&HZ?>$\=,"""c=Chr&;S,L)I63+iZ\*)mksY!rpc
++issbqib;\<V\t*h[1Ha.><kd(EljH!#Or#FQp3gV.Tk)(gA>"Yjq3E2"M3O"@%^$`B?/X]%`7p8U57T
+n1j"4QW!Zg!%Enp7)iL)@`-ZQO_onB33O!*'/k4mQ7td;HP`Fs>t0sMlb0#a$fP%RNfhUK6J1TF,J8&X
+;>!f$7`>9JXFlTah/,E"FTe@B!f_4M!Zfr+"Q56$J[%7-8Tg@EU0J4IP$rl,@EA]ho8%D5IDi%^7,hW!
+#`^Y%5"bWV/7[J@O34Pd!$Jimc$W-H#lrs=KOYF!N,EmH![>iZ_%GU!b&*22Ce340h4fNEMQDYebm:WJ
+UJos;&[H5sLS6Z)''5Vq^150.Y;[h.j+pX*G>5&@/E`8*SoV\ob=V(a-e.sa1'0a4(\8dYg\[*%6*n\S
+-R1!DR[:=&]ufG]6)]GZ=jgK1[sAm6.*S9Tc4Orc\Oe6H/0(I!#*@8#h^[5_nXjm^QVVp9950?4,Z)cl
+\n-2Nh+Q"`'>@r)b'd&u1e'rr.V;!O/9RiU\8JWJ.Rdqo6K;m$W`<)C<Fu\:@b",PM,JBEqLoFE`EfM)]!,255sHfH19HhARF\t*>AJq66g'>X:`9@?b_1_DF@o6RM(9qr*BA!PqMS3qEjY0pJ?a/Z^K?;S
+?kPmIP8&,%8h*(rV+i8BOF@X*.THeUQ#F$qNmh&K:f:_]KjtfSM44g2;!U88NHIZ[<Z.(@)pLld#puCU
+\@17gK>O(b%IUmn[omTBjL5R:Z<Xd&F)@2jGo&[14Y(.aXVIhB[rTsL9>>[h"l?l?qRfW$d/C$*qQ+HB
+_H7`d=X8A)^,A0r*7JP0h:4NZ7(O;jqrpkXFHjN3<llpe%q7)s(L)u5PM*Q1UG.?G>u":`?;&=nD\a;)
+1%nhpRW!PW)lPV11:1;DVSh7r[YspOfZVAQ:*sf:DqA<N2agA[DQN09=PDtFf=c;S:!1N/VWm+,OZYB$
+WlTA'm,IprL9U(__jOFPjXdO"@>/m.3Hk&HVT)8?"\-:eVZ,?)hhc;I"ded(b%!=_I.*S#Z*Z_WB#kRR
+ecooaGV2hNfgfYUm3p>ET*Ne+6^2Vo=OEQj7qHi88L_'K`Ylo+1`W,IEG7YGYkBh_.^q(7KJp=N0,imV
+Di3hU>b&>(,%S?GVK,_@esSTrA:8GnonK*@)K/b_Cpg&3%Zo>4%qB;-9mO&L?d%'*QY&7ER<;6ses]csm;2:GYI8Dp-O2eASD@STrnQ6d7quddDac?4I^9g;5@HN?BCnY.KXr[Cm#@(1\&S<J]5<(4;k8cQ
+c:rI#C2Too"g?nqU<ba`):ZhWI&^5Z-.qKjlE$2d1+s?OqVN@ac8TV8cQ:4KJNmp!LWMCZjPN&VI<,<m
+b^"+_QJ$=kF*l4]1\S!0*&hV74g1^U`oY,s[D(:ae"%+q9!MTUVXNr0J[[[9cVu9]D!fui(BZ,P<2Y%7
+a2bqTQX]*I_RT6XK4D:.\(934P?)N_UNfjX^fE6/DuEBWog_R9Lsq9$C;%cskATguA&2p:6fEBI,Oq*>
+`:.(<j*=,fm(JIdG#'jSr7@5cHRi^p]?bfhhU:[:=#8)A]='Mug%B]mEaTmIl?;W0p,T1Om[m+Y3j/S1
+PXBUGcF]cl+2O4JI[0UK2s#KiRIc5YT(e13EHk4+mCTumI;W!>2>7LGIS9*:%F(k,**eYTn(VV[f5Z0;
+KCOC\pNWn#j?'"%j'ED>OmhJos0jBFs7_em>NEM/!'Y3"5V!=,o:.rEYWWXR]u/X76N=_dTYER^^jA/O
+o5QK0UVAn[2(OD8$N7c1$TaKI]cc8sg'0_8oG9UL.9%*LC`!^7(Vu=QQV8;`]ApG4"$e+3_<`4*lC\KR8isXC[H%*IqtWQFDo,AF,7Gm2"!G>Lm30=H_B]XHUV/Rcr]drdU7%+[4=NU<oKV+(^WZXAA,*nt
+1IDNj_])WD4>iOc!Q1EJ_k\AAZld#'X2%Z[_s$Y>,/1j7&\fk0^GHD5K@rX477:BM2Uk(3'0Wpqqm5o4
+_6cj'X@tp]9YnY>Y1u(Vr&_k"A?Lk>'@<MiN"<jJlF?a?_a@P<MsS=q=K<+G4;8:1_f<Kp]XWnf6V3rN
+F>(C633A]X528%_@ud97@_tfK`bSgK>JS7#@CqI\7]]HVZr"cd4Gq>c3QsZ/]EUb#W'kCX3VmX/X4P%d
+E^sAX7q<;tPMW8!4htlI.kGL+ghfQloSF1-^4It+4=e5UU;!+'`ae?YoN=U-=iHkg`f)ShMC?*D<5R@%
+6HjbrWK0LO@7,^.6CYk]/;-7;2b#WW_]ab(P`Eb2/k'$0aV9.m]U245R)d.67dP'5nq+;qr^ep[8<cWU
+"@Kk%T#YZA8h>6UP6=KF"\5)&1\nnp"K0D"O33r8b,hO6UoVYFW>m[W5"(i2I$mV6bFslD`BctN\td+^
+2(d%-5HInne0_G2KgT[>7:_4c,D[btQ-7k<%;OjrP%lJ"QHU7(`I*n1>^FSh^-aHg8:/9HjL*2oa"eX=9)P+$
+XNXAL4NXrp8]5R9"(sN^834,!.^X:\FJ-c5eP0:?a,>emHT"/hX@h9Lc)fVn]\1QRXT/Gkb4Np$']7-=
+_[.Ml-.>H,TqI:S)p"N=a^TJ;XCOm2L;(=25K(!'HD(WZLm[heR@A:h]Z#kPN1L/*8DM<A60_.6o=6E7
+Veh(2>_Z$Zq+lCZ:;ltCS52l_btljg:)*^WUo$iY!C0o:4WJI\jO(@TZV/Mb8ehH5Ms/;h#H3Ql_CZ,5Cj475e'0"U,m16_*=sY7&Mtci_:8J0%2;UjWNc5)92su19]aX5LVaAec@h6SZD(,glH>.P
+Wm(,W)AsS"#sT\n5a6oIX67eCnfAM9bS9ra,ooZqr(i"19LUF+[3sDGa&5<X7[u0Ybl?'j'[]&u;^i/L
+j93]nS]TBOXpd_3oF.cOe'Q9Od!O?5[6)7JejOXDd)=NGNB0)m%b"\od2V(B$fO/=*)d"qdg\'%d$[WW
+!)"h8W^tK06\eQ$m`AEU`H8Q:KcX."/4b12-S-oGil]6q]i*rm:e953r?+ln+3[[_;Uggtobu8kl;EmR
+/p14:4^$>$p/Gm<;`.'G4Q+[W!Rk"o8nC,E7*sD1UWNFTes$QhC5]:FTpr/sQ@3U/okr?O%DCi!<m>8.]W9OF
+6W?DZd4JhWI:Pp?('"M079!NS0XJ$:-;Js+<:sPI'i<5QJAl'o[DX^k]i:E,6;I]mQ;ihf[96CtO4FbE
+:5cU*I.l3`03G"De^YU@j>bY#@on)'f7fAJD.Q;NA]G1(='5J\KFq*&"k?Uh=cI4K2*3jA)+X;*8/2uF
+lp=Y2Ti:W)]er$MPhA[jG$81<;'Y+('pDc@WBp3&a"+aB'n"WFN)\ngfCb3JKj%/[`n2a'=?5>:j\&""[*D*p<H2;EKdN\(a]I;[9Pn#rAWJ>fNRb_TdZ'.4qoW*5P2%(Ag_H&M%@'t)5dU-+&,hki
+90Ug_1g.6/9gp5R9q0q?50$=Lg!uP3KFM*!$<e_-3i/UujUYEeVBFNZ>\i?K?,50Rfj#dCLg>>OI@ij>
+XKi"7g[uQ?mBG=SZ9G(pUB9H-76sa]E]Q(McO'm2KYZ?-]$\(KeeDR[jh=alOPAUN?Idq>jhOU`_d=G;
+gb&*/'pRKQcWOaFg1^<;IF$L[[Sf!Xgs+#F`O@umk#BfK<s,;Kc#DATfNe*t<uV!B4&Og-WEjSIM5CIf
+oljahg0ZsZ<2H?_kh&X0JD/i;[9]uA*;!P@]N#j=hEA3Ih.kFB>hPQg`)Z"NIHb(OhHmW&fZf!+XgYW[n5UaQ
+iSGG\\o?Ob$0!!L@O_%Y9f1j(p,!NY(BsS@[J<R7qI50U?jp:Cc(_d$c/6/G4`2c<7KME>$+F4D?p6-m
+Scq`X#ESi7h-JXN[A[O]$">YOf::mJ6sGX69JPW%?6$i3mLI6:Ic9fahDpZt7Ou?o.a9eniI!<;qCUbS
+Z*C]ug[6"\/fJ7!+CF6DABg-:r]&r83FJ^]jXGK77:j$D-(tf-&$@;8jiG[u3EERj@c]RY`R<Q`>/sRq@\_Q7p&\_487MN-?o?;Bb/daZi+6U%@r<WdrWqU4;.c6j&IB'0d%o<!.V?Jq>GO19%M.+_
+Yuhc+?CU[h4X!kfRV,WS3^t]sp.&5E*os1o==-ehSfHV,HGtSeiRWG7%21q12J/h#A"J<d.MQG_`32X1
+j'GgK[OBhk.HTD9f%rjQc(/@hk1pLVkiE]Gp4t0RrRpUUa!F!d`\Z7A6-7A<Zm%*RD5Z3M;eS@_SH1NG
+Q946i+WIAT`_8*mmL`tF&nC;Yk;?0U"lqHs9\Vt,f@C\4`d#pSNl*28@HJH^r_?ejZKeO$9MU*&1[\c+
+'Bgd3lRoJS(56*nJRr,Qe49RQIUX)+rFApLCTb1lB"Vp($>).)AYl2(3sK(s60W_^k)Qc^VR+;(?!u&nC$SO6
+G&Xj\TOc'D)9oK#m*T+_7V[)EkBa#R>ejd%Y$8W_cH^e&#'";#NGAD4lLrZ\SsaCiKPWj*m?(H)7^[*W
+VRbOg<(=B2ZA`%SM<PLRlb:&M53-+cA6KJX>t%(c<bL6#hX6C_YdO"<Y/G5%iTeq"Nn26#[Rb-cTPU4i
+D.+:J]l-6E&a\VMkhc$!^8U"NIVRH:D)SH^7WN%I?uN,un##\nL?n6)!H#:IBr88s9@2$;As*6&mJ\ii()Bdoc"O9cmS=40]VOt$4`5-?mXDuiV?Vlp28NkVE"<$<`tT)neQ[/4?EQlVr9N"TEpqqC
+@5c=Op'a3oai2iVTMG:9pAJ;Mf@&G5EMjQ<NuDX7?#iW'jUUZs+"-SBZLC%WY?(m"DMM.s^/M.KA7l5:
+0&U]h0lnC[E98rqel_0A5j</Dk'"3c#+4p>..a&Fh;1f0[0p^BHYOW$jPM8)k56HJ)c?tek1:ZfAp*>7
+nSA-lD*K@L#&e8V,O[9/nWtQjs$5l\3c^!:o\V*<VM2S3^h%-i%t=h(B.e._[,8&@E3D$>Iop;!/\sV+
+d"aJ>`oqJiOn3`Rlo-A9qrU=%q=5)h?,&fcG<FgGH1V5?FLPk(_)5jq6J]YZoL9V[me>R6+Ln=>n'4+=Y5.\&
+>4g,aoSelOLN%2:JG'4CpMWf<02QN;;';tuo$!WsS=aq'mq_W\ooFTHrk!4]!GehpE:u/$B3fX2hK+a#
+o_4,bE4bY.)"oe;P;#H+TRCRtrsaprDr5-to_)V;OEX6PDag^Cdl^:Jb]_T-lDJ;q#<d1L(&%&fmf_nA
+VfI(+@!I0FpLg)K2gFg\!](X=pd\9.mTFPe<b8`"GR(-a5CVi51hFF+cnqYF5D=(u_Y@c9HL;)aO[Ai@(5\rIps66r#IF;'N-e(&U3<^#)cbksOa3Wfq).9tebh$k]k\EUeSi$0ek#UdF8$HCq:8>c
+2;e99_e7!Aq<+r+LW=QJgj0alBQ'Ydf/%QYI:mIOqIbA*J'`(/W:cM$ZR:'5B3b;bXLFf7pi"6%J"Pll
+\/qiY<2gd_=0m6\gj<\hrTM_[Qac]WP5-3=fGD;jLV%],6i*U0F]i8MO)=eB`,[a&r"gJOYN+9mR/@1u
+I`sV=GM%:mf`)nsr1>IYs3#XgUZ3_tmN,^4n'M)qIsi@iI4m3_:Xs\crGa/DHuJM1!+[tf&\t'$BIjW,
+#DGJfd+F",,n#Stic/Y57Pbj?7O-=6"EHpMP"4SRBe2]a]O88rEnPiO=QBT.g&MG\hK(ZG:FB)oh!>/L3IiO-
+H:90?0r@XlJOe&gT2DT;WW3BB[]<W5dO93@%0FL5S(;2;3VB8eAXV9><f;+?iH);/m^F^[U18G[?Z2;.
+V>C?V!1?W5!#W(Z!!@lU<31eBc&g(ZEnPi[AsY<qB/A!Fr6%AXc"V22R62!AUX<k"HL23WA[0s)2LB;D
+_f<<E=mnHM(BX]T]l&#jh1#rfbN3ea4FW&)V6&j"3o%q$B<TkP?$\TUheLX!mJ+;bIlF:K^mOCMdZ9':ht$R-Ic!B)fCAb:It!IUo)M":'E%pHcl<Pt_%9id#/H=J&s/t88>n!<0Vg9/6L_'8%)\1V
+5nCn1oLTP2b;;Qo6?*u>'ZI=f1mkS2P>)t8dCPM[.8Kc%gr=&t0c`b>"E>X,dQEX;a\"R\:ajb.T-m3N
+S>e!\d_(Va.2(.4/i.>iYqX5_Cg<?X+:&)M"[ND\!$B+p2B^99N9<2r'=@!ccEl=!50l%_nNbEb"U6*_
+Y]M*X_2s?e78Xb9+\0s[ALBuGNDl_340Dc%)R\kiW2lr!2*e2l.e8EjXj8:OZTSh)<:s9B@TupbFhMV.Yi$@[
+.^=qR1=s`J/+FZ?m%kq"Wt`g<+#L'7+(i!=h5)1*(1T^9>>H!7DVI%6[ob_XoriDic#(@'>Sg\bG$0#G
+H$%nEFm!r)cPgG,db!=JIaY^uQ%35.rX",5\/l*4i>>l)7`B?u?&6K;Sfrsk0go0"`V?SrNT0LSGE>pP
+*5-ROp8l8S83%BnQ=P8i@@51tRZf-")7F+Hk?6T(P2rp?I@"T7l=VlLF=r\?:g-n`6>;m;SZ'oec4>Zp
+]"So[CHBHQY%pTBO*Z<jlV,oei"7^ED#6q";H-kK:8?:I9j#,I\#/\Bf%[q3]\Q>rH!`9W?H]$TQ7]@d
+C7<tDEb+PGO_?HX;\<?sf8H9>nbcHK9l*lQ29/_OpHQE7>n9e9oUT=cf'iOO;fm/QInSC:\&)@QpKI<:
+`bW9^GMm\Ys,#\/^)r;nj&hU/k%!7i@aO>omnVGIEit&[F'27>0P!BAYOMH`enpp4+#h74rE52fPtYP'
+f.?-qcXZ83J%Encq&eLJrqPsXrBLN9fNjn,!.a,S.H<bKgJ_d:Xg"k7j[00n9653o[;J9cD#n&*)hZG`=Z@3Ei?*oEE=[V8^_^DPTk!La/kNmi<ICs?_WQ"P[JLr23ca3&on-(m&%>)X%O)j`LMkr&\hh#3
+@T5ULd39g<jUV?cU]64uW[pBUY83kV<K",!s#d_@oHP>e7''iR\7U9MRJ\@XYdkpq7EkK7]C:g-h<VdS
+Uh(W9G`U8Md`5n9+J]-YH=N'nVO8%s,[?='&i)tuknPISUm$ti6;,EL0dbu0CJD'/0M31s.,s<aMpe%/
+_e=5H,Rb'3cn\]qq./2jN3n/YTWgj%QKk1Q\r$"S-nfg6$tK,>85T"?5DY^GT9Lp^P6MrLM3PC0!BllH
+3bV6OM_\nUR@@+JE(ZLdrMKM-S26FF34VI-,p]CZe#mo?g#5'VPk?<LM<;fjT0Aj'XH;`X6:b$+qdu(7
+TQ.8L:b!0B,LMg<Zn@/)q?!!s6f=[n`,\Co2+HZ.S>3H39[W]*85i-7PS;bqcH9-ZBk6j5%UsLCfFJ$n
+GqkVh5+GPtFY2@2W<D7+IXnDjh^:9MSJ,%kQW](),BP<%FZs]faqE)OOjp?D7V1+PNDaC(=fM'8Xt%#r
+<+T'<WpnjAcC2.C.Q(j^FIncGl<?k2Q$'6phRM0nX$.odq6/?A'>5dX7B!&99C]lWZJ,giC=NMDZqeQm'2:hfXUh^<?0g/HWFi*BHq`%5:F;mjBTm;,[+:8dg07Ehm8^9qQG1l&qFs#OeTS,ShRVBsX\:6Z
+2jK,2ZW"DOE9YTQK!bBI<%?^,Y%>;We!?iI8)e813MBE]?+;A"[+f@7R:gZ*U-t>X=K9p1XnR!Lf#c*[
+01BH_pF[LngNe+KL%INodbS,3omUi@\\H_Ls514<R4%,#YO=M/=;r%pls+D%'GC,llm,HtFdU%f0e$7;
+Bnc'<hkIP'_Vtq6LFhsOPI@dL@Z+`RnQ%6LfWd?h2fjIf"uX1ugDX?gIsg?]WMZK:iETTD!t%9u!l/aT
+;u2,pYC4[;R68:@(Y=\,jk,0Q>4(.9Yc-jYiOtEG-ImgoEi13bbP/Us<QrdWo1i`=F*d]G*1[:RScQkl
+h`GJ@ELsGLI<]o*115J=JrOUHIJA:)@JU=AC7Um4\ilPAR.l=lL6Z?H3@/Bs(Pt_$-cPkm'^>QbW-'F@
+:!G/tB?]n;ok&ZflE_NbHAJJ>2FqC<#3056Lf*E.8\$jj?tV%.F<%[+HMLCojh/",o"N>k4#EnALXVZ4
+SbIiGU24FWjd\63_jbd9D:ZCS;"kE+gj>Z2hEf8a[;N&$S%j/c*E>2n#(t8\!e0?;#DfJ<Lr/pRo'biSK5.!D_j441E,HCHGNKW3)JXt?aUr2D#,^D8=,^lVA\.W%mG<5;O@B+VGk7eG-b@bOf^j0eTQ)^;
+])*fANP2oKQ;#Fpmpn^9T?d.2d(;bW/0iBOlsYi0][o#UQJ_fb`12eNSNE_@^8'0NcJ?b@K4)tGYIHL*
+22Y%U?1lL^dJ9DGlR\NMEW4G.GjfG8h6q[F4U'X8_\U'Mk(%D$0u,jiOO9FK$?rWgbX4?^*hXXOG[D!@
+HoHj0r[Z#'D]m;HQ5fC$2o^*W+6G]CRe$H&!-pd6+aAbN_KJG+C$eR5I9r].r+f8=Nn)oJT=+'KL*,!L
+qm`d!WTEh(h2Y3VP(6WPm/J02F%M(jC1B<f,s,a](Lp1``^*_nlEXI9W`j_8:m$=%5CNRK!.P75Z(.;a
+DI1HU24*V,foP3odrXrggeIa<ReUWiDuTW`[f<Q+p5eq(Y3=a0mdB-qiQk3dmJ+#i'Z)O>NUKX7Amk7,
+54U?no8kNp0+d(FSH?#LoFO4i:br4c0*5hfoV@HM0Mq13#k^u"orqp1%8>f#rs$gP#3oCYO6YJS`qRbV
+p]Pj'mth=.P5*A_rpZ*5:2XYSSh!U2fuP"Mc_rT0XLlf_X3?sbO1=HCaS]u"$d['+0=LaRhQ(SabtuXiMQHVBD[gU'#uK?hDe/nZr<Eo&%aaeWYkJ-8lMue7!9@,;YS;HR(nrYXIaBA8&JYH60*A(bi@u8a
+;&99C%cEBJ_=1Xc0OFF6B+qO6`\1fHYkJAW8Il5ErFrAC7q1QhD"&f6#c`Lm/!UT@OVZ>Zq.Bj+VI"O>
+>_350jbD34d=TG:MHE>V%$"m,@gNOI_$g=N%ETJ+&Z$Bg!uc'?fM's6lAH,A[20A7i%D7gnZa&&im#j7
+'X?+$n^S.Ifaj3%hU1>dnH*4j0WL-P&8t,@dDI%<m0.JV8ruOG0M(bM-n,KB+Aa^70K1*a,4J8n&Wnia
+LsjbT..ttR##[.`0P_\L3utUhY-Cmk0tK:u=tu%82=Y;bn]MkkboG)t9JLiPObjFf[3glR\AK[3%Z#/I
+T)LI1-a1,j0s)A!V>rlO$\l\N&sXn#aR$(=--._]P"?+Ed1+:Qb_V0,10Ej>d3K=[//#]K;Ej.1qZ*n^
+A'sNA0NB:b;'0_.do$,gUoPYW3s<tD"H=U;EpEg*m4NE*+0c7'1>8ud;^0XG,4cI&&7ZrJaV<2E/1k3&
+.=DZe4#4cQ;mBscEih-<?MTMT9*,lFdW!9K8>d&T1t$:Z:Ag2d1kmDI-doO&nspYYUD`W\)D[@&1Nb.1AiDK"l/q@JDg=-u[466P2mYR\;i_nmXPD993Cd?S;^4$gX#cHJ/8=8uda9W:.,Rt9mkHIL9fFZo
+',%GQ0J`X%&e$V'ff`+9/jsP?..8k30,)GkLpQNX;+0H.+ZhKb5KA0t;7S[mRkmrH5nfqX,5Qs_,YIYr
+;_qDjYb\>L,poBj9&t7Tnp3"=MH5o!#Hj="Z)9"#!!%Ou$'\.Q'NIRY:IQOS7'_RV%]M^tZU&3B.[34Z
+ZooBCFEU)\ehhY5-XSoUs%(WA3n03^1<U^Ms%1B7/Q)(0Zf[7p&BhE*j\s,]kH?P$+Tp.!9FhpOoXdb9
+oh/.64Y?\*Z0L=im3;iV5>+?u[$OOJ6o6_$4&[L)1RMG<<7gb\:_XX@6IS5sJO:eB6ISioYGY5r92X/6
+8k050Y)>ZKgC<0<-r8#FP[-_1&-dZ3;q4-'PBfVNb====:hYPYP+b\rqYMRM82Q)mFGi^)nQ+/)<qU2k
+ZaWNt]$QH`4>bL'e?#p^Yl[hT9VfQLF59Kp$M(Lq"8.j$eB^"[W:+iZZh3'.<9#3!=\a*\:8SLYotXs7
+#41HP:XN`Loi"kuACslh1$faVob13fDE.=R6?7-F.-bt3@n9Ob8'K6YF[&h`$:g@A2j8MdoPIls]2`gp?.;',<E2%:gLA((<gCR(<]=Mh4'[aE9m(kp:@,2`_+bOe4Hm_2E=2h*NESj$4iF<3o(?U\B4fC9
+A`T1MM-F0,00Z?o>Eu[%ZP?^;EG3i)2`<j.<QuInH!N(]?$60U[\[_mdp<XS>.*m9<?#:&lSR.Rf'Z*f
+<`_n)1ISW2@!+^7?r@12&T*iiD53//2*54ZQXO[Y@e>LH[/!a>b=<&YC:<^a,C+!(4_XR!A![QM8i&Pq
+)Ip.L*mPi]O;hb-+(^`5B=;hnFe&$L9-KH/=nZc,f/cC0@rk%VB5<'=E=Z7^9ec9n0m@&$;u(E7%UV`t
+G/sna<s(tqF(t??@Q/RW:=!\9E10h:CY+bc\!IquN@PWjHZr;-<A?m]UMUbQD0FZ\2W9"7c$OWsHkm#e
+QL>;""Y*OTDfF#BeR!msm<mK_@lJ1C2fjFllZ!%:=-3B19G(g;$!9)_>&sd^OXWF1!HdDA9QK`H<M<)?
+9lq1AArA$L(_8f3="nhS/^c!Mf3`38@tV7&:`&/@QgSYa7=N@<GBWg?Q[]:n>?t?<C(=`gGCtX(h0?AQ
+2ma]][uks%\VH/gJuDOTQDl65<?HjY$obA,<o*hl1]uY:M7B1832)2]WJXfYHhQ?E2Uu3%aYoLC8%?5_
+<EgE`SS=I(BsPF*pd]d88WAj.Il9egpE;YC-%cj=4LD;4p^:Zc-tYD3d["[#AVYh^!KY;:NqMLaeBMus
+]b?]cOr->qQYDHSf*>:DP,%E'pP3,X@tg:Y5iQ^,(r:s:cu94A6.[eJUJYhRc%l(BQ5>fQQQm7>d/FU)
+2jmm9eg``OKc50OM3t?$?k*41*\j(@R/)`/R>m)LRu8,kHPjAC0p@jQojR["8'oGK))mej3Hq_uNOcrj3Q70'6]O)GIotrbq"p*g.j('SFZBq&\I3$bRkHe`AMo-6)<-'FIZ\hcKD7NA\]^LuM0BjD5e4Fb
+,$U9$Bq*fuS%"2ob^U=E\!?c#Q8KhOM[t2ipGJ2AQZZak0Z07ngR*8KR<aqq!"&^V&#FSVV>=Jo3`DI!
+T6kh$F1NRV\oFN(`4=ODVcg'qftj2)MkM&MNRX)\om4u1eR\L/EgR#Nat[J;pR`97F?/Z<[m)OWYCek.
+;#(cIQo,Ok+.sJrXRl1>37XuhgJ5XhE4Qd!Gt4f98ZpFoKMcBK:uA#BHVsQrOW&Rb':cqNH'<3b2j_"L
+q3@?d=f'jnVE6$.)^2)(Of#I5Rs1d5pqrPI4/Xk`3?!OE(XJbd9;pS#[.VUQ3RNjdfiT/bWn)TZ22en'
+fk_S?4h@u/(b))F<KV6'XH4$:`7'ADQ>/mY\D*4X)jc_VOgN:*Xco`4g?Xu*?%tB\Zs0lC@bm`ho`9CK
+(Y\i#;3!EQ?uhaPF1Ng):P(ZrI2Y)OD7_<cgE9',-`.erMS%8+m)?YOFa^kb^UV;J(Xp!#W4k<L\_C'!
+>SFr9;71_<_Acd'\i4H:`@r5)O'8Nlg7c!"9=I8_T$K^?\tcb/S\j(NOSbHUk+T=j=iFWMXaC_g*#l$U=%QRa:jGF8HjlG^)ED$6]%hk$*.u>&LP?[F&?`HrLdf'F@l<Euad8Ut]@3$MRf6mSM)8;==KA8[
+kXsUsVHK&(a/tZ?ECZP>^bVs[>gpH8$cdW*5J1XS>G'2g(S'8&IsY>.8c7Ikf=&9*_]*=-=S^;@7^BFo
+JbUEYeB-(jgT2#2_ik(^r6Rs(l-e9!P8EW1bhK:jhp'r1])=qE>`7)p8^r-I](g3=RmJ\4C":]okhH2=
+Q5r)%a4=FB]sT^HI(+t1];>dBZ4qB,,?juT]@)ug)-dK[I?s4_0?0OLg"bjX)OJc0kC9Z)[N,TVq;"Qo
+iI]kpOPLZ!\.?'^$/8Zq\1n.2W^ro@fVBPBhAtM1>0O?u:"inAKY90O\Z"l-IG(&2e,\bS_>Xf`"lPs]
+i4]HT4qHUY&`MRciZ8uqSPRbK;<"*gC@s3&I9nW,3O9^YMu9J?*6ZLu-._Lq?MiPd\$suC>\AJ;WdTUK
+2+^2uSG[G\N#dstSQcK9HKoC:]N[.[S9a#Ze_33Jg)cHW*N?HN%GLaSNj/oGlQoYoKA50WX51\K,]?jL
+a6K51NnkeXl85;bj6XJBh;6KE\d.+/FI>4ehbX8]BQqrGgoZm7iVk.^IeW:pq;OU:mp>n\?N9MD-e.#aink?[!dirjOa\?I3V?[Qn:Lt[Fj6f^YoS%U31nC6L?MmBLplV.EgKb0^ZPNHN1V7&nqH8Q^%ItH
+p"s!Hs'ta5l.KC"pCqu=*M<(tg\80qcQ8Q-)P('G`R3OQLq^(fhQtT7chY;gO58!T*(l:FrSF!jTKfZg
+hV%XK1j1V0T`+WX=+/Sim$H%Tn@o#&?dns;0@ZWIn=K[Yh\1_Gh9%p*pFXq1:NcINDr]gWh-Md?O=2@m
+$Nl'uiD>>P2B`Kc6K4)W662^!MoK7HW5O!B+-+B,-A1df"AUQL!+S=]YYm.T!PtGu!#,\D!)D^@g%>8p
+6(^O(F=H;a.hSSqkn&\f]Eg_K!%Kid9WS;!2ZP?c\La>e>W\bB(0MW7d35o#XZ"@.Shj*;>cF&O[FXk@
+]j3:5Wt#&&>eo8K(d'\m&V@sYlujm*o-&=lhI>'jKtB(+c"45Ir9e2^S'Pd?)GLs4&0hU<^`'=e]3D>g
+lh4Nl[b#N+h/)hTIGXjJ\_urO>Ri\/Oi6@#q4)n@4.F@UoD2`&[o]iam<&5rIc#Lag$nb6?4Su]Ka9N#
+$@j4*\)6WII(g[eO5K@#qYpJdg-bB'TaEU]!\!81K)n6A<#5a)YY'AcZAb"hTtp.;,'#uRe2Ik)Yk!*P'FEP]T>Z6_9b52t<*'i(Z#j=`_\%POJjBsTB,i<q;tL'`!!iW,/!9l4'a,ZgM'GS)4GtN-11ZXu
+8b/+:.S6qQUFLd!nF0/.1>KIj]alC.n]\1!aYV/cP5-rZZP:QX:")Mf3B*&<mg7;g+AQhsTN(_O:_Wd(
+6-me=%a`TT2&+KdZpNA1%]==G/5fHD/P=H5bqDdi'_OO^:fS5:;:%0H#tNCN/IPTW2$H!B$Pcr[;q0@*
+>?ZSKm-tB+F\R?T=;5%r7jI]e-Y-?L[<lH1<c+77f_-&;N.<Ho\s+L4Jn+rc5l,Ag`QR<KB\Crr#+26D
+Fk!?>8u:=DX,>HgY;#<cWI.lmZQF6q[Y=Zmi%W-TJmN[O]n9`Q7MgAZ\0^LGgpd80MHY84K8`p"^,:l,
+2DQ".j>3Z'3TRMI9p'!)-;Tq=3GqobAiYTYQ"IRR=WP8="8eYPZ0$H55Ome`)<d/=CE2RmKPqc:=9Y$"
+_YR_gUM3o?Y7O*!5.)%m)TKOrCc`>NWdl$>>I*Vm*+FV7EV,#.a>09h\]YqfZb#Te`3V,?dboa3k1Q()
+RV)IRJMqJ[)n@ru>]st@C!4b8>L6L/4cXSGa#@(#2#f^?drgpsb#_^60@VSdmmYRp>q]R5=$2OBc$#W5;[bM\NKp:0?2&PnGSTsK7UKt3ZB_E_h8#RIQQDu\G[:!SDu-&4Q/sL08%48YG.S^J2#]G1np!AX
+U;(#YO4S5sM-o*+rYRg>Kl#X2I`Zt$-Yr\Ss6I+4/fi!J-OBf],R8=.-3:o\%0I_@$\ApHnM?JUceu,j
+K()eL+;0pnR[PpI0R^@'W'^=tUJP3WM>K,c7gi0u?#,F7(IL/r%9m'`C+/3a6Y'+!%uY?s/]G=i2Y>hR
+448#KotJ3Y*>;h>%tMqP#t6gS73ZhQ49ecm]dI4L<Qk5gObNfR7onqc1SK`0RP@8;`oe)\B3$aa3BJE"
+)^D]h;3(/M4-MlMRVV#<cf.3l..FJ_0k"BABlkrG]^mBG.V]EkS]D*?3=2B;HI?CpaL0\K?ISIQbX(]`
+8D*^p]TeZoSB3u%=LOgNY?haJ=[)Xnr+2nuPqiP*`jlHrA_Qp9OZk;7$&L@u1r>Xm@V!\cQSIW"gP=-e
+TL#QV1u\?QBQ?BS6b%ArTu=Ks/N+<[ai-2O2!:DCVKF_p\IP<4P+?GJ%hM9c&>C^DDeWN'2obk1f`]Qm
+'0^"g!gPR0@u[-\(t_9P0X9Y0QW8)*M*KYNlQ$>"U,)G!bK;fEUO<r<%`U/"2/o7feL.,h?0BJp!<<I*<0^>kR)rEB8ec)s0Q3q-4K;GBN050N$QPZMWeO3hVuW#SISNkMf(N[6ZmucCmhSEP^82fLW&2f$
+a;JAblK[i=bIXn.3lP6;%;2aW@]`Qi2_V/<D0#4PK[:VB?"d5[Y4^)R=).84@Z,)l<X'#X>6L"!_a0b_
+Y'/,/a#Ide10K^4kZI"p@k>$SZPI.ofX?]"lqNk90QMIu"G]._7/':HSp\k;Y7d?'Ej(br]\=*f67npG
+[ar_/:rRTgURJZd$DP#b35lbL"/&PP>2iTJ;f^[)X.lt1O]#D_7W*(pF(HNX;VR^GB)QMN'[lIeWo-D.
+3nL8UDXARYer/hJ!@Tf@U<._D,@7cN>r=[M8d4N[f=U%BpV-`82:#3?0e[kj*_tX`&V@6!$XI[d!O5;@
+Ftg&B;7=?t=6jd[0\s%PfS:#I4?Al^%>:s,>/JO)-Tpalm^(B*bt_<+G\QQ+`V@n&@m#$tEV;VnR**RY
+RlQP74?uG3b154EN0H)/XND<h0MhU<L[cuu[lB4+:gCC^bN6LML7[L8CV$c'299lA?SuG#0lU.+dA/U_
+0P7mX4>Fgfc&Ug$N_=_YYU4k:RH2]:@e4)JCKA;f+U2:"_gO"-f=s:7ZV,&.IpP;$Wg-kGkR5A%[.==5
+"NsX+%7P_g2PnqBOmB0`'-T.YYKaWb@UZ@MX`CSQb5#7ICQ3P?c<_m;=JlnMQA&d'(,4D2=!2$9CSshU
+Oso!"A[VI'[.2/fg=[E.cHWi*ni7&K[[/;)X&+saN;(Ii""J)WH+Rkf'A'XjJo;TP*D$0;]#J6-k=F=k
+?#KSu)Tu7&8jAabDYUej"O^t/,JCL=/t@V?4_ak!G;spiiKd08/si\QGc%!"3\[+<lg6%kNX]9j>$AZs$)PiV($#51MGqLqW9!*%k8]cPo;h3&l;jg.I)0>n?3S3U*SK7qds#]SIFC6$9'O#VVl%',Ye%7k
+lPR6Pm$?&.G$X"f>=+ruSZB2#'qaj@:UD:ZbM$c6?>Q1M+8)n\\5Ea"[5?/SceDgTH='S>#Gn;59(ms$
+-W=R*1PB!:)4:7_^N@..UNjDOFSp:u\ecEG>b<V2Bf?iL;o=H6?85+/mh"1.$Tr_D1[2?)P*&a'N_%l^
+f6NUF7D+MQ'5pmK4mt/gh#j2=mX+JGIJ!=M+68W'8b"We^Z]8=n9Rl5jKA6+l9517I@n(0550X*WRkNo
+5-M1donWJDEc(P&[Fm_;m+K(1[rLZMgO#Q.6XSUDj;`7?^WZC,j17=YGpKH'Lmld$OXIV2_nQ<B^=t6L
+MsN4:/jBY$]bl^@UW^;biBF8J\(g11H.>%Jl8+'F4O\r!)or^='"loL5o^E<_&4enlSY.pYe0*,j.e?=
+TF+!\Ue=:N_/ulUgHA2k04FaX"8BLA,sj#:^)Q)XCZW7b.Dh<!^/QVsA1U'C/OG[A%$8Icb#1M.)EKtb
+5^WdR6o2_[$H$BZ-m4++1cW5oC,RU7Z-4CVPP2cX-:>uO_;kGXgU93a5XF/4$7nEK.uc"TAgD`t6p*`."9:g-6pnQ15SDL#;^SesEjBKa5WL+*>R<bk2T6X;1:&ON,H;F4(WBn1\*OSj$K@fX0r_H8_.6cd
+4C#]Z?,::?4ChS.oNX1>3NcUR^a(ZUe3TZG%\jY/7R<*RGlkhHL``Vk4c9G+R;]d<[R+5:[X:@d$N%C:
+#Gh046M,1;PN0O@Fi)4h4k+\B%!W*,TgsrYa#fupOaFYbAjqZ-`_1Tp>W51f;TL,6a=L;fK;uN,3Q%%j
+#br1oj@;V<be"!)_qXiP1lKGF8.]gf[Z__&qeSgG`lSm*7&6!ej@I@VLre%\7(OMM'MUM1e\Ekr7-"D7
+;nb#WJ4N(Za>+(;U^=M_V2.L[_%SgtS:3EX%8'T'\1Ct*e>PgqMS.04b)BapFC2!=@*6)@]WA4UZU5hY
+>!]4qLa6WUCp^-Vf1(k:00mL[91g^.CUI,Y]6n]=Hu:c<"hiCI^+5[,<-uh#V*_P4_OPlsFLt*1]M)d,
+T'UkhS@)!Wf#d!F8aM)R[*6b4c,^:_^FY*j/3:%HNM5]17'f%S"?s*G7S-8P8L0M?"I?-ZPYHgnc)\+o
+,hBh+Q*M[a8>Lr6*!+"MRn9Ar5Y3MbjIDCuInZrh9YAZn$SP85%SA7)N;R-YPCZ>:ImEY(b/C;KKZUQ>"]"uu]]<-&]^jB2YCKR[V?GC.[-gR;qRCYC:UKXU]P+fgM6t0e$s[PDWis8I<4M:[8@/=],\%FV
+^8a7b[2d$,Bk,#E`(X,+:k]"J=`$0/ksGmV_#taQbY^t0kKtR";&p<I.sT;1L!9K2X>:Whb`!\jh^o!+
+3t0lg<<Q%F4-k!=9mf/gI'ZAu_asG=;;BgOoC^AgYKd.DZ9in5/5FWQ"I=,Bc<J$.D%iF+REfi*`_^\(
+1c%(8E_8(2;_8MQ<:/#M$pe.i8rtT&>r2u.og*Eae"P49Eg9M.B0j3adu?T*/H%u2L/72'`hA,&`+q[A
+fh`pI(C^aLm+BZ_F\lO@3T<e1]R.jh(KAU*$fl?8WJ==33@ehEe'.a="YE_S'\-J'<HTpa>ntFt(-9C]
+;KP/ugt>S9M+p\a<V5$D3pk=YYrrgTdS4+@2'C5A+]]mo<Xg.q>@^a_+A$o*Z@n^h\I:DbSMsP"eR=tI
+o]as&``Eea`Bj[PWfeu^lV>XS;cL%:D*-&QGTF."`GG6HU_HG^X!<MdcZG&B!]Dkse^Ysl1LlBPD1Y_;
+9c/Pne4NrAF[a<h7`NtKe<ED:qbOZ.9#?-teEmOb@a3L6O=pt>.nOur@]Ru\L!^WS90H6SKiZldES6mafp#JA-!ApN3RtF_:!D3hquG4#gfb-?<^gZPKjdO&KN:e%>%JaC9r"9H@b)Qq<`NYWSL)j`-JA%M
+;OqW-rNND@DGq:>,,&N"X`N$PEk`0>;`SQjI=kU<Js:sIfB"trPc`8BWmcBDdriE0]W>&NOM*eV06q9*
+`Kf2P2VNSYc`!!`eV6_Ms3sB+.YP@!EsK)jlTuUXg`eo7(lCCtN\@5id)Dr]NRL(CVE%A7d+!HhmDV1K
+.9e[`fra#^]p`6L.bWVo<Lo`/I@lVfONfpp68]l[`N37NjkaLShB]_aS,:*W(qZkC<kYbE]d[:8/R'Ne
+h6cG_FNdW/Dc]B95de(&A67A_]\HCC9#\b.otTCL^u(]shlX[7)Nn>t52?["?er9MD%P23K\Ug\fNeut
+BYU1@+'=&Yck?XF";t=de"--e=QS(>4W<!#$7>tl?#>g6>uBFCmjMKT?/=:AeeI!?'gQV=9a0E\UUj$.
+jXdfi0-.-#IHKM>*Q-GH=p<tnQ(6^--sk`6@P-qEZ+ild<8hA^;Z6,m1cM/6Q.JY_cKq?&7J:3>=@$LX
+gZA?/"t\Mu1Z,V:@k]HB[?mWDrn,&ai!o`ojoND95%$7hi'b'#o1S"I!*m/YX$jNuSRl=A3S!Mt.P;-,],p$&%LeU-7iP#[<D^R7s5M`^iC4RC`_5CD'@Au[@>7Rq[M_g,X^V_;aL3'd2BHF1<Ms.Cbq;m]
+dhcI>mS^c&i`99m:0cB4?"LHNA]630Ak^!c$q2bU@\tQUXSU[sNm>V_j*EXch)F?d]43ERjK/"2^22gi
+f&KBn>W'mi1hUF3Rp9cgfN((-JuVpiae,EPMV;+hF%PF6E7T0Y9Q!m/V@DT<Xln7n/;`5eSHdTUPMF/K
+eI\rYNb:h9@-$/kk]UBJIYQBr:K=7JjUJA!%N3tPin@]Ig,3QtDL?.6Of(ZM9@b1j:5fHJ?YO+Xl#pCt
+IUD>oRH;,fk`mj]IUVA*ghFuc`Ei/8mUkU039'@GLs>ikShOd-C=Ams7J-;>FZjC))+V=pB.RPr2KW=j
+4Q&qhA(cTLL4%hmW!K4,R_ng^`^QDVQY6"]0+.KpX-)TZia$-IA<DLI<=e%HLud^4C\ER#"0#t2Md?5P
+9cf:'"s2Rn7-Oo:lW1I\I];XValHcm<R/c8;n?e%heBfq(1tBsh=Jc.?f+>G?WFe^:5*20ltS0'M_6b5
+X>4Ni?;ll^8r@Rr!qg&@Z>A>.6&j4NSuqDr4DO9+B5Zb^Ga7H``JCA96IrI]]0ts[aCt80DPhdK@n#^B.E<*$ff%Wm^4b#h^$H6Cmk2BAmdqi4_;Tj#e\)ejG/S37Nb>2JB\fXL2'$BWk&8\fDsXpoL.,fT
+E*fmPn2CF<7$qpnCN)KAn7sCi-M5%Fn`XI7E1rV"42kQ$\3Wc7f:LT/(m"'%eI*u'jK>:n1SdnaCdmKn
+DJ%at]"%/4Z>L]dB3q`?53-JXZ!'u<>hbi'UYSo15%S@D>sq5(1qhrcHH\s"jE"1/K!a3*%]0/oD`7uC
+a"-`3okc#>jT`R[-GsbNZ-l,=i7<qTArlO^DfTIgn)lUfY;g1&kiIgJn4s70^BaA^4S.MS`=;BYbb"=9
+>\5c*="Yu=JUD'HGOYnPM!krCPc3`9BXe"3B-\E1@Z'JV78apIQ9Q;',dA_oX_oL*mOoSnEJEmfEsbpl
+<+4n*Ij"1:+ia6SnkEchognXZWer]be@)r%,uA8=8i;ASEouue7mQcD/X(pJEsFAi*`4;/!881JF%k/)
+Id??uD0=.GG40;.PY(4;!HRfo>4s387I9bJj_:n(p1>*)l_ehD`:Q7AijCRD]^bM%f5u^kGOJ#MB%(t[
+`cT.,:Ee*G*Ms*3n94^Nk=2MlSp#6@M<ah7\RBdK^/JEdPV??^`lmAgT3:JD[e7+I6:L#2D]/.)m4'>M
+l^Lm(s!bi=GBQ2^H+/"n`Gt?ZBMip1DuHL*a)Z5j;u'cZH8hVq7ZdHWC>oq_G<^608#W_35ObkFh;<MP
+QI,3j.G8l*GRo/UetI'V0l\MYD2l4&rt8pNJ6ZC[YfDH?dAGSU@3rsX,R]q5JA64c]o*+9QGoS>R&"u]
+#[!Qr3PQ\,B-s3gOl5,mCu72Fp?J?L?WcVoi;M8bp@06n@s24[I.tqb#A&2;pLOT%F-clJVkJ%0B5GVarHHlkLXc04=^JN]HA?Ua^T)RnLY\ht;APj@)CkVkYjgt1HRFBFDmT3$8S#"mr^TW&PLO45\-O>;
+M3>.p7FQV(Q$$P^ESV#mkbWaK_LEs!Fb?9'FMi,2YrW]AHa<EThj!jB)Z6K#SmRkOSUl'ad.u#eI/&3t
+_]c5e$4-og^u6tl<$E=lLdN@_\>2;9(5g%?0mM2W4WTVS,Z.%rnUfgYPmW$Z9WhSNPtWLQ)1:"L2jqs'
+;n4HNHRPBaBAa+C(6(h[;JB)k9equ0W)RM33fQ1]5HIGHQ'q;[\Qc7<WHKbfQHa'L>&@<PA[^E5\6NoQ
+4/LNqBWG"62gaZO[5O;r^`X1"!saMp#XfdD:+mQF`FL^V*.Cs6?d)VfZ@')4r-1qtF8?dPIRg8pl?+#U
+%
+ ]`g8e*H^3*McU3-eN4CZ&8PC&\Wlo`9laO.u2+(Jq42NJ-2._kOZ67%Sp/_`p<<-]cQ?4PMPGEr#IF$
+Qc\F\qKuVa2lk^"oR&g;"09!3=Si!r-'+\mjSup^1\Upacbp1j5VJ'0"?MRdY6I<)";M6[0O,n2]]ueP
+$p8=ZOU\m<b"f4JB-7BmL&_2^%0PMk:DCe<E+g;C!$H_;7^9UI*(J>o7'K(ar.N<7J-`M@0[_o]%k@,qLEO^eN1h]A'!.K69%&s1&qFtlAK"4J"Aot/EK"BB`Nqs4(/8d^%L.LB"Q)1hTHF^E::%V(^;KNk
+T.SCsr:rY*P&.*^d1c0f&^[n"bs]qN>m!Yr#:1@ucZ@ml2,)HjHR-]Ej5A@oD:M>;<4,);<7R7>>uT:]
+KjRh\<NTt>ehtEZ>h>7sI9Td]!_/fd$/LMLW&?tb@]T33aM(6/]e6eJ1o7;eb8-YVD;1BD]l2[B$L_`W
+QP.t\-nH#;_d.*E-$S1sM_Akm(NW'n1]e+X?e8<k8U=:DmKI"-ng4TC_b/C!+1a)RYjK<qoGlq$G^G^3
+_V!']N+7+_7?:r?,O^]R\LZj*5hR2=P!P--=-qtcN_PmQGh'lU6PL0&,!L:bIne1PjNB=%dgUGqd^i.!
+/88(DSOr)2QCFgfPPib"lP"C!3GW]-\N3L7`ksscR\%bJ>h_lKZg%?u/[\HfG3+6gH\/"Ule3%]1"5r/
+6\Sp<%JdhIfKTb\E845$`UJ7n&'&ZpLDe.if0u$:o,PM&@rj+6M.^)&*M5]9qm+P?DOQT0d.H.4?.\cj
+O(E'JD8/`sb8g_DFg1Um.GqF[%t3CepQpTo!#N?;II`nfs0hD&T'$a^hK+7i2SQjuYMm!o*L?T[%O%6Yh^3(.k-1FRrV[g.f)tsNN]!/NhlkN&ra/E=SG'X&E5rtdcm8")!]@@/d+d8.BW6:A[76PK>-&9J
+77%3p=<tQob@*$M=ognOE8@2J&VI<8\\]1Wh-hHpK.5WL,1L)Z?d$Z>Y"fkJLRS_r`&<@ShAntNGn8lh
+6#pjGc8i:t&Rn-u=f\CuQUYm#?h=k]WVpYP#d"j$`*&!eW[GcaLeH>sKm0^E1->`snRFCeGY]c9_^Ko7
+&c=tA:dR/m=1&Ou\ZJ7)22=?gBcgHXpjUWtqnJ@4as82WII*t"aCF0,,V4q<;FX8Ca&l2KgEg#l&knt<
+',8k?.r4^9(8aV9.A]EAMGT122WZ"ajTMiRZGKbf-r2Fa6sD:J:!u[[C7lm#AXCjU>g*uQf%\]><,Y5K
+7erScAq\Et1"L)5q5#t2XOEWcIEocV]f0D0-$N(L-D\2q#p9Yk8+BVfcIq#8kC[K,Z"@kj'"%+;*,2$@
+*du=JAF^sRUm[EYCe\Db0k^&WTSsW4`p'6>A!n^+$rVs;GNS[f[#gD*3_@`-AO`WZb!8K4p/2^S81<jP
+V,X:\:0BW2VbED"oXs=o3CP[OMg9(nU'%-T.k9[,,:^"IT['Qo;<>bgW6%q^]1S>c@\leKeO$&tl&=9L%*<%E3eGVV]iStQ$_Z%1YLY2H=XsiaT!9V]6u(FO*;nc=n8=RfGX"6#<)KYqm_2cVr>-ucQ\lN\
+0Wr;)]]]3)D9LU[]Xe>O.lD#`N!?X\n];gh0cE#N@YrKE94qs-,.(<qdD)/<Bb87]V/N6];Th^KX[@TB
+<$`%$LM^)J*Ag*"9W:9\En=nl4%;!qgJpaD"Y-XoWHTuV>hDn\b>$9]pHE[FX,D"0V*MWBnP(@RE,I4\
+iN2d6a^/0rH1)L1]f2\-QhoSulZMa#'8j=q94oU-STq0@ZKPZMrI=!ho8=@sHb78O@O:m=N>(g#U[oQm
+=4NAEQa69])J<YsrKabr;Em[p3.oSCTTD(7f\6g+,OksbP'D0%inR1bYs#7>F"Z/#G[k,gq_G)2VOU7:
+]md,T8nqF;+Pb1tOg6ReQ'_U$jF!5A*Hb5CR5tUa3e^nhh;>O4Y:a6G]7k;1'[0^01$.`T8ah@L^0.<e
+<t]Y?$Z6$'q#_mD3AFgFApM^*mC6dWXapd@pqZYZiTOCoTr_-[_=fcFi@Mm7020$Q&H<2-2L*04)<\qA
+AF\or4cAt;0ub'1d9>?rWV$asI/jC3M),UAD;I652r`Xbm:Ah.g?5oth^%;eLTbk*FijGX@)<oZ/+tU6aa*nt9C7jAX7CVg[)5CG>p#KC^=h5pDb+`)\?PFFCVBV)c,@9PSgno,b';LLj,K%)[Qa6<>Kq"t
+lNaq<S%FV_%n()$Ob3>p#q,R#d+I[#\""]Q_O=,4n=+L:<W/D]\p"\LbqV\$`i7K,MiD`53QLeo+LG=Y
+=)q#Ba`W@cj]n]c1O`'#-bcg^8Rkt@R:Rl8pB&G1CR],lS'Uou_moI;i_1tUca(7[kki,#/W9\I2Q$f7
+>Bd(9NigiX`o$)F;MGkp`Rj]_@GKW"qeiDI(A"?)hAaqPG2D"ZGI/gG)sY=[*=mabf6BoX&U[D-V:N6H
+6HaUb8Ngr5hs4-C`LKh`pqACoGkWBP>]7a[+"?=L[k$P]Dj1"R<#Pl/L@cOFd"!3.l+IMib/kIKqL2T1
+3I\H7[o6UTMj@>NQ.adggVJ6nQgaJt9Xg9_i-T@hnS?6ckdBi]4j.EpqVPBD*HULo0<=_o_hP:=ZZ:4/
+gO2"Em.jcDj559MIli/ErEl_gIW*3RZUJo]<Zcfeh%%s$B*H\s,O8ra!03r3_e^rONZA+S&FiLN`%EOg
+miMQ`.caAW![]nfcm8_^/<Z&No?Ub8O>unE3q][L";!QT&)K!:70Cn6"A:;:Dg(CQ>3Kb)rU$3\K_jmcOTt;l#;:>Rbk1]`FU(`jr31AM6KHDuJuapCenuW-0<Y.iq[&@V$.,@2&%;A=\@t_XqsM]7YK2XH
+guiS+rK+u,Dpn&(Wr=ZgmYUN6Yh8Bf&AcKb_@VgW/27KDVY`st%WDpY`D#h,37H1jismF<&IAO..g&RU
+")p%.E&S?u*(!L?&M?]ZnL4Sq/6!388ApW(;)&L*CD2gq8PqhgA<d@NSknZCiJsFbc$'AkIePOI#7uY+
+Dg_=3jVG+7p5/#L:=Tc)OABI(.o;K1OJ`F_N<ukP$8I_]XXstm]aE/[T$P4=K)65%E:#<$("%FKEOaj[
+XSr^Bh_4.%d+[pVm2Y.Kd>n/$&W[f"ZO\bT?a*T<C(?r>*9'g!!JD*t$rHJq7hF&To+"2%0bGP4;\JX3
+"0idf0ciI*#kRU!'!OG3;CN<C/JBCo!'m%^NmA+]r?G3#,QIij;Fr*PIdG#Q+YZaT9lV3c@(J's,k-3u
+&nr/FCrfE&-F%%b7q3o@QQ*28(bpjfZ'cW\M^\.Q.5@/1Z,6q=T'R#qmV^2G%@I+AB.B'q.l+K2Z+bBV
+k8\Kd*3mm2N=-4nkp^Z"_U7NpAP3b8fe'B;9!J5BcQ'jMr=EuM0/<[<dN9'!,pcIh0J?'FP4[d4q\!oo0etI-
+nOFjF9dI#31%Q\9M_+OB+YhFj16Q*:njP:<5ql(qB<sN%M0h(!=!geN'_6/Y13YU>>o0[$-dA0PZXjqM
+I1K5</MhGrdZlbTFZ68ch\)J>C>TCC@gKs'/$aL0m=Qo%[lO&R(NQV`7s,8]aXf6O/8k7@dbd"4][DMu
+*`D!X#=fl!ko]:M!HK,4F4`dB%eJ.8"VN=?F6PL0k6'2aA<Yn)&eR>!r(.PT5VjcD#*CMk<`AW%7o,HskA<I_1I.-c54\^7Z^AcY1Gk2&9!DpBE*G2@CGiI_QkFI-cAnIF6PRq[2\Ua2F+6Wb^I=An
+qXCO8&Yb*qN>bX%mLZuk;Gd;^4ZYEN827;<C^2puNkhj^Gqmh;[$\]ESOmpps&>gd[%U'5<CPA\3$t7[
+OmN[3;'-G5P*5)rZL22No-'8!5AjC`1]KYFk<[T@,h)*Z1sg^#pJ$hh9sik7oFaZIF\f@]pL]@te/(rU
+ZtRtj:_`XhEB,Vg"X.Ci71X/o'K6fEWC6AM6kqLG:rQ?GE-;s*;cB/)PcmP69hR<O<>;]<.jIN(T2k7,
+7cuo^NgiPHBQ`jM;s-_C<I%ZPQTB*!):5c`1oX)iM-0DN=OiU;[$an$<E/S/9<&^Z'2LOr4T^O94U8SmX\DL\
+$>,OQ0b?Q6[.@P0j$E>S>ndN11+uk[%8CmY5#oi@Q.&!`'2S;j7hl5ZA8)1"9S&@:6R8pDAAMW+^L6a&
+7hS6famVDM.&iIY]5P_I[4=--2cJ9Ykq]eW1cnZ8>gK826T-Y<Z!f`%T4IUt<H_AG(06ms>r\'_%5Oau
+[#!"L.gReD=4VM,C#rs4X!tE:A'0^@2HZ[D?!;7*>!arIocUZ+d*pOW::&Z^FRNNh:JJ7]?$<V#Q4dm)]5+]@&GE/0FPS/6lQfNG?T&F&Q4HqP3Aj479PZ2WWd'(%H!o4UB(IZ3cUViuLK:F4YSMq%
+pBbeZ?O6B6@krL<ehG6F;-*,@=k8F@(0bg'/TS1?Ab9bM'kU(;a(CTf7uhi>Z^k`q9m#J%3E8@9e8ZIP
+>enVYFtW*'pLSN7B6G)/0VDSP?q-hK05.B%@?T:Ce2(:s>k<`e0,2MM1rinPh/%+3CD>ZAG.h`ndpH/G
+@+VSsA"+Y6nSGVZ?Iu<,GHkPbc#%'NDUn[X@XaQB/<mX%VeM=(G)dsC&4]YPDq5j^9le@a4`FI;;FS-9
+[5S@n$"AZoA9UlCGCOY"JUt<SEu5rX2d'/t2KQ9;;NbI11lEj/R9+VLKK)B&QoSd/KkN0jG8G+MGZBI,CPCA]
+8Q;U.==&O=.4s&`Tbi\3(7Pja+_hEaH^KK:E>=;;`ElW^CGjXXQcXQ\rHu*%I.l6NGHs\o@5""-4r*+(
+;uq<2d>>B4MH97bfBEF?d=&$<a73_.+u)o[-#qnc?'pfiZYb,XlXDd`3AA9>Qk+^!d)n9\-eSN>c(Tf6
+iFLRcJpA)cfb9L1QZH2;K%=Lb\25iSI,=W]O*EsPff>8+2ceFL89dpQ[rHV9H^);HPo3SGR,CL1=-WM`Q2+@E3E[obLQU7+!#"<N'YpIZq(R#T+108n[CM)PSSCNeH4Wl1Qc"aVT8CRKN&[SMWD@E"
+Xc.rr7oT)=1\m&U]8:aNRIpTL<<nJNbbs+>6FbR,/<oW\.oBE^ShqO/egl8A6"DJ@O0"V"f_pnuqd^TC
+A!oELGnGeA)kd$:TfI/!\1;Wh*JG8@=rAs\<c:?fZs1*67'54:3]TQ$pN9JUP*D'r\Rh$-^SJDSQ5WaK
+qGF)7;3ooDTl.%M(irlbQF!s]'/tq<CfuQ(/R/(%4S?U.R#s,1iHo-#S<q]n\^-_-:R_-I75NbhQ/S[0
+RAfnMWApqqHCAU0dS6(Zpm*'<`.!qSCST/+VDSIX/LQuf_4FU6O#ZO0=Zrp5ql]O!%/TLU3Wr[WENZ%$A@`AM
+=`L[X#I)o"P^+R[BU$chWM3KfBD4p"2KPVpZj'n<!i=e\)`0;H3O=&gZl;%]4$U(+6aYT;0mcR#RnpG]
+;?.Y;[9HkD>@*,K]s@NJ[Ms:r4*@t.H+3Zp\3#,K>=H'6:lOf2pf]&K;lc.o;P?-UQ?liIqk>J8US[Ub
+/Gf_R;!sBHf8gH9V\1e3P<YEJds4u]e_,ubqM0ASkIc)VH[:oM>,/(Ki^KTV^?"%`C:$$KgR3EGS+jh7>.:$6l`8e8Vfhrf>/tj5';j.P'[8"rd>>S_TmM(KkghVq&)4:64)aA+UGYM_gAf'Ff=P6!
+]6Y424B\o\\S)j*U%p(@=Y#!T5mU[B2(*3Ec3Lc3NQ9e7a?5$pHYLOuMo].aaI@LL,%%e=3QYKV\9t-o
+gm?,&X3)B<b1f.hcC_Xn2oZXq*-t:/>HbW.c+8;M\fB%N<L^rI?+\%S.?FU53UO[[&PT^"RC)&i>'HmK
+(BZbM`Ol/.Fj6s)`GJj3WX2P;=56GDF4'<(:+;BRh$JHL%@S:NX/*e`K\<#em$2RAJsM[*RaID0&g7E?
+N*TGPGhoNf095rj`*>HBoM)NLHcb)V`jch>S5n1R>K)!If@#As*+cCD+f&0_PP7_nr,YqEGI$!g;gb'9rGusA
+VSDsnOF4jJVgHWs:X$COV#8i1>HQ.r@FuqX*^)sG\So?NhQk-AD"SY[9juB$ME%nCQo]h\SHg?d"4();
+d.j<)SMWbu3,;09:*b>;*YQNL,N6T$S%=NXoEW1&=4(7b^J8hB>/dUAfA3#aIbD!cqNnsE1QpR"KKWn.
+>eA]P8"TQ=`7Y[W*bj7JD:i042)ui4fcu,/rm!X>PZ^;)rL\UhIg<TLg5jk/S[%B5_7@$dgq;+IUl!kGV<\&VlM]&l25=k+:#3JGQCM8OrSunIRr<]OLcBT%;'h$2oA@19db`7,=eidH$c+m=mlho`
+@_S`)YYSU)CgR54Ifu!b-f=kUCVC+h^(9[\4hM)&fQKZnjSgA-^$jhbTSBT:jC2o^-L+\6T&"VAh.aM4
+"OEZ@YIo.#5%I;-CZcdJfDf@:*d?8EA$OCg.Wg07R5<t(MHbLN\fR984d5-8S[hrLP9%-.B7&r.XkUdp
+q>6f[fk\2`_=i6ulcuoMYkB&p4.4kWIiS1rDal`>:$lt$M`79.O(#gFjh<d]7p)\Wru9pgpe+sJ/nmbP
+4S)@9^`W_FkPthhJjForOb=>^%#)Q,?sq?/!>:8YJ,jP%4u4.<a!4I$lLBJeOi_/%5Qn5m/!S6<N^4Lm2?9/i
+B(K`0!b!LEcXbN$'`*YAS^(k'g/Tbn9rCqT'bDc)%KNKYC@V/N!eD2l7,kW]%-hV5R*m@))Jtq$C:@F8
+(E8Xbl"d!>BXZ+'me)!qh.dblc//\P^Ygg`S5mT;NP]2pGoS]N(R:iWZ<<-Wmk(*VBClo69qlVtdqNq?
+9idHZVq1-URiQ[q@C+^*G8gG2ds&:XmWY0ApBuPij)K>`r`9c"a6)r<SK;uJU!r=1AgW\7:]oG>GItQ'%tDRVo6Ga*:KNV15kF^r3Z2SMRIp<'l!JAS6T:IG,d5(ZrBO0='"ooYHeQBE:<UTVZEP8M
+!jN:tk6/F/M_>:HOF0+"_^XX_%l>_/&sRnh#Qt,r&Q2LBKOG\u(WJ2"6Hm3%"D]#I&[BFu`[C9F9o(P5
+L=*U#I$3bd;FHj!8[<u3TI$T?QkPt0kS5Vk1>!9B#NB+l0?bgo#;Vt9*6%sY6?'IMMaMFa/q>1W-TB=+
+m(5/M^^T0:N<AhQ5_(Zp"Vo=i4RG1,<'V!^RK*L385`EH+%jt'[4+gJe6N_`;mcc@6;VbU7m#5lm,M'iF)>&=
+9iZk_0ih49C4mb/JfS,Ikdn]n/9V2GO"2^(V\,onbkG1AG#`$+g!`Bb>1XOa,-Y.+eUilbC8?1f=O>Jg
+S?l+nG.fi#4joWuQL3>)XDB@@D(/O*psq'V/_,8T2^EBm7dQ?/Ic(b%msX-`L&Zb_Ql@u;5PSP0L>3Vp
+.uQTl4JO5a\E5`28bh^>O5j@Y99Ni]%T/AM3G)?ZAD(a$'"or/0:HM!??$,sYr"kq>P[tG&*PHc'o(]b
+6pW;9OmVY*S`%TG!9tJgPc-\L6%"s`3\1:<,d.E+YGGGEOeJS^VPgAC3jPBZCHr*7VX/X>`=_;Pp?f2V
+RHdE\7<)"J+3%1?-G/beXBcl:Z7LhU#VnSRQ"Cn_<Pp5tUmB7_PK^9`F44-+1EdbadofgPSP)1gZH\YG
+<HU61;Ui)jCIWL>s)$Qc'b>TGG#]gn5B\(frRY&XD.RC&4Y:e]q<2\#H!",)Wi]RL[CZe49$`jcHh/VS
+Bqb7&GAI-?V<5&[(oEVA6'u6NNGi%QZ0Yd-kLXUJ\#Ufs(A<de+;=0P9c=*u(_HdV9:'*A%L4)c(BNGn%;sNJ$T,pG9-='L/e1=m\L9`Ki=hW"E0_'P85BPc*%HXRXq\bFP0DV&2hmF>)`(T2gC(WACkp-F
+6eFBr+p8%#n%K&q2>GWC$pne_V=p5KhU^G6D+C_Z%)_]7f]$[^M<2;s[hu"I&"4F;0a42fW5TXKX#*64
+"i%RCB]A':EK5s%R(.t7i?PFCO$E`c\C`qPA/$RRd2!&0BNehDl`<b%dIBD#EgiOdSp6+NcR5WQ-<&sD
+<DLfsW+TT.jV,@mMLJ>n#u;jI6cP<^c"F`s>dU;RjHbjp?H[JsocC^3Q\AlH`]/q[T(K46/rjF(kK<F^
+o@@5dZ8=s_Ylpj/Y)Q@[Fj&CC0;d6BLs3tp6*d%)VR0uf0ICeK\]$S_'S`0;)2h8Cb%E)#r&N6OBu:5^
+4sVEMT9-X6:RV5HkR@E_'GZTp-uf^LeI.-\@NEJ0dUJpJo72cdGXR:u7N9"d*.Xt!Je.rQW<FKA1jupC
+j2An\Te2snXrkVr*tRT^1SiN`.T#B'6tp3AU(-60dg@M[gGM9j']=!jptm+Pb]o1d*i7B_RRpa(IrY):
+J^ns%1mlMjOL8g+eWPh7jL_(IadPal!XtN]S?,H51.b*i?RHRVWNMD4i(Amo?"F1[PtJ1=VWX-t-&^!7mm:3YR?[PZeBOHn@Z+"FeEE`oB!CkQoG/A\1D\qLS(.:lZ&:b!%,:`fAYu-SEnpVbeW;^Z(2tBf
+itB]J(UY%0cp:<A3@$ao[qlYPgWO;K;HuMfe/GJpHEf`<29EBF0'?K?TlXXB7AlA"lHl$)H`?BN1=T(J
+bo:,Ff+$M&W.LctRF,e%KtX6\,2tH&cGH#k!ItsULf=b'HKlLb\qe(ge;"+bC/f>TPAq[E#lB.PQ3aLI
+)Qhf=+E&&Jd_^a=Mjql-QR`tWI!0!1&VlrDUr@ja[CTIAopDdqlbfo+h\TbUq2A<RCrIm<==jn,LMSfU
+_t,KcOip`_mp"P:Gj;WY<Nu=reX`:5NlTil135+o;a0C1-8'@f#As`M]JH"!;1-3-U.t:&R1CoVajRop
+%
+ UR;:M?dBjUP*]Jcbd6A3G2U[So_nuL,"jWh2MB+maWqf85bIOMnti8'M#Y.6Sb#:h$5B8O1q`I#AH__
+Icn.gV)SB4?l'3$n4j8)\sH7O]EjQPCQQC.gH/h+n#U:,%^\[h;b5+o@W:nK`,`m3==W3b2A43PGgBkl
+]oTFA7a&!c_H+l@@ubRn4NTK6?"=TdR&UWXa*R%t&^2Ok1eqi.\modt%Doq:P@NC7UGZY3aPOCDMp#$(1@I?;HP]`X[i:m)0mqrP20O;s>SD\X/e,[B7gmYS>3g/+!HmA_rJ+Q;mc]#4\@71WZs#B]heh$L
+ZSlWtqHb]BY"=i8T-NH@hY_<W:STnq%VKo+:SO`l+#PsUkE5EWi5Zo^2/`i%qSRsT=C>aK^)I)ET5)&N
+Ya8CB>pUqlBP\Z(eok,!`_)j;FnJtG%+a3[2I5S#XFXkn`qAH*DmIQHT9%.G=616]N:5$IbWFD?@QU[#
+5f>g)HiG%ocr\(tWT2.)cZnsT'>XD"6/J9`o3hJ$Uj7EMk'ADDiLY,7H+,B'3/3"D=)Wt14X%fp-[!Zr
+bBNJp,i(I<1!mYTP+g3=b\[<[k*6kcF,U^Wq<eDB<DT:<?AI]l$KC\".u#6j$a'aoBC83L&1`O*eHq4u
+lL(9WCd,]156"d`.kPFP:?/hGcg*)EZIr#:]sXH@I(rp1>0Zq<KD]r(^F(eg%WX+Z>K/VFQ9B"B]RuHU
+X'.Tsg8A0Y4@BH>g)iS-!5IKR3!86Sqr^5o%Qs@o5&:_F"/EB$dQJPtYOS2:fmu:ar]Oc/[*pbAZjS!$
+Q_1&&5dO"pZL9s8^+S0t[2\)43qb`[rZ#G.Y]Jqlg^h8$&K+G@Umhf+bN_"'lO*e8^<i%OiT@l=0Y].l-#<U?fE)-4)A<f?6SpR9*&PPm_Oo7nXE0K=,;R#2H+Tj(.*<_u^tc`C1-qB"ZT+hsoKY5hI)?@"
+\PrYR*&,35_RVcq^n_4RA-g*n)8#GaU?Kn8ZmENs-:I2q7/Tcu$mptX&j\U8_)"DD9N8ij"$pEkZu^Jo
+]8oBs4/WIt^N5DZ'H4HF#/Pr.`IqL8Zp(Zu?+2X2_/%o7l+]6k+@^.;`cG$&aLsH99gp$u.dT[FapFbU
+:_YCr0_>"8]Jl/Bl_UY]6Y#Ma6=[ml_3L6P$bS>a7!V:]H:'f@_d%RZS9mao@BI/X17H30gcIfc,!%M2
+[$4t9n?kYdVCa&"7MH+qb\]jsHQj.lTG1Lt'MLmT8][Dm8?>M+qgQUaE'1KH]4=c,oT[A.Pt&-Gaa@km
+/6#&#RQ-ea336.K,EKgDpVm>s8Hb69r1JmK3/75D8gtK:@AF*8:d*7]JX?E;W\=`aW(N4&6-ItRi20+3
+!(u=K7?jZAEq.;RWIP,W9"HcBjC?/V*lV9s`dG9cN$,[pTLP^cab/cbe4[mtTs-?QND&IL$u^s;\-gG0
+LnLD2N/C0iE_!cj8'K"IN.&p'aio.U9U*[e/<%(.lp%:*U&uqV9SGT6O[[2XaFq=D][+f+pV9ad_6b#ar*I;=T?LijXji)")1!X(d6n\N7JNWLCuIrri_.5La`QStXI2Y];`#,B`EYu'no;,YfWoS@^hg1\
+AF.SC!WXnUL(pm`KX)PZ\P#;Y8aMti,bk]GmDrEB#u'e`"<31knXG4&W/Rf?PdSc#AALX&4olcm3QDaO
+<R<;u:c/;N4U"YV##H7>6;6Fb<!U5ZlHMT+Pqch`35g]qN(cpfbZ):ejNL<2&()rPd3TIR*>MF/'N&]Y
+5YFdFoR]k`]<cV8:7Ol"F*^'^YEq!N;7)6Y%,/[rgJ+)Gc$F.rgFCVd,/`cu^_J1o<(bEq.$@!4THrPq
+biI-1/lL3XddZ?n>S>=lLbp'>cAYmdS=S)DEkU.S,,D@J9fUQU*m]f7Y?\A3bc'"%d7,[H.#g6D/O7WS
+,La$6c_WeRe>lB`[(X]^V`W@aN<E(#8^sjGe>5gf[0FXQ0;q#Udb@j*jU;l;cl^&dd9RI6AQ2NL<E3m8
+eU:IuKiQZo=%os5[lkTs6t!/<)o+SiQb=G*>ea.gV6u`9P!fB"Mo^gXJ&pZc2nXgd'kL+@o19gQetfuZ
+l?Wc=/6)8'03p85%8^+H:=h'Mf-:Yp]eS,B*7H[<;afq;j]t@*kra;_9'#]&D1#,ado7W(c2'<2`()6+IEG6ccWtqBqhrM]>s4_V7<JN%CRWLYO]N-\btX*oiD,HM@Yp(J<L$b?rE._nO]a8tffbEebX8]g
+>h0=?6'P#CeEbZ[f2cS2ehp6jm=*BP*7BNafpt$!]pVOLCg&DKWYK5O2(;SQUs85eg,^BZc)Fc5WRj#-
+f/oe[<9Dog)qT1C=7r@jN+>jmRmY/f=rZ4k/;.+.[8^r_=G9:;\i,[M+5<l/>ID%H]tIXp^)R<j_>=C2
+%
+ BMO&^"U0#f\G1SD3S0L`S!,5gh"O]Fi[]+Q*Y9,;50[RI;P!EZraZ.g$/?9`?(FacW5;:>:C1_A^7JR
+V-R%h<h6I#>u"<-B[X#`>,C"[^"lp6__[:0+A*\VK@a<JH-BiGgeHe`eR6q?IlS1/=EW6;o6j>=Cu0"G
+=:MZBIH`RW\MWuogYKVO%D6$_n6[4+bI%U]kj0;.gsY<5/Y.r-D>@Frq:qO_?bQ<`*Qk[Y)(AS>c.kJ<
+?2.]Bl_g/5+D"kES2jtWccnVDbq9$)IKEnoW#0p;i/ID;9'P-M_-^4!?Z$B_%M3%g^g?^)?N(XI4r%Ed
+j@*')dTu7h<TM)piO@W(=FB_p?.ciLr4CKLdDZ%+`P>-1T.T-6\aB#smLiSqp0HG!2^)*fQ2G!d.UTU]
+ik?o%SRL+GiEWsaio%:H"q4'5$*(?2>ndQP:,5A"`8J=qj*!0([PHZ\N+8_Eg5XueXsN$B-Y)!tA*uT6
+DA+InOf>KNA1g8!/k"bI73hI+>4hi$'fSct);ng>_2\f[mQ0*67pC-X>D=8&PM\i?+poqIi\"/=,U6:D
+]AIFWA.!i(D?I*<6K4:^@^[iL^+EpQ>M`r7&sCgL?9@,RUKNO?AY#8a'l2Zs,Me(2f!]#Hh?mbDA%UgVk)(DDjq$R.5N^g@B%#eqSjqdQEb%@Rk;Ge=9h=@'\RGF^_0('&9@r<tB08=A5^#0Nbf4;-8*=o-
+k?S&E$_4U?;oX0T3X/Vme_T&QE(7c_W"l"=D><5<MIjecA`em'(&bo8LL9auB#Y$/\pECsA5d)MBTpBN
+Nb@L'OCN`ci0f6h*Rnd-L1]k.k2r1GrgRWY?q+96B.cX97\OQ,7-@S<kkqX=(.qo@2I8CRf4:<7KedD7
+W@#'QC;$cbVQ>kR[c*/d+m'r1Ne>NFBPSp0YV%3c^7?DUd'\mi[`G3,`f&s0\nKAqhK9[po[$tEQJ,)t
+4JfRNes5KKH>FA62s.iiB#A9/Mo^&ICeEIJ<lo(<[Ht'<k[$R?*cpTnc0X_YC,R4#Hi!#-Lub]sD'm>@
+:=Wd=H!;>oAL&F4/lb(FJg8RJm&%t^VC'+@d2UrQD>q-4T"A!WNT0AtleMh`>)@&Zk%TS3;80m5B#O+t
+_Vs9ACdut>Y+4n)mVTu4DVLmu(8,L;c#4ZLjF$.LIKjP-1JXflm7-:-Nqm"@2;[KBiA.4:7^DL>fd_m^
+UTWA?#6A'Vm4a(h(09bbS]QF*8HV08E.6_SXX#h^cX"!Tg*Z+QV[[N^%.NEhjL0:#F;aMDQWa-Ak,+I60(/3N($rBtnT*]/(@q!ec>OcNAJME0PP\FIVG2Nrn@p)d%>F8Q2/RcUlQ6%BT!N9ogM]Q8EJGr5
+*92&;AoLb4E+]DpNsK*qlqQ&65L/H]rZtq^puW73fY*0n7]'2[%b`dQ@ANO0AK>aoTQ9JMnQ-OsD`r0f
+5&k-aCsO$iVXeQd)r;&AE[Mn]*Ro,-+`qWmCPP;pF<<tb,[:Z\AM4"Xmf;p>5-Qpmlbtg'KuNVu!-KY@
+En0pNL<!QC%.7(KTl2)\<FXAL`N:`?BE&KbcBRQ&Ab$ot;C:DcDWu3p<qH&qFQ[0*hdk[%T6)/fD`5j^
+//<7jp.n0,;LL`NIr0AbT6-%#E]*@YX<D]"g2GPBd!%Tq>iGEQ!`5qY#u=K"YB]IW#PQ1]F^;lU#?Q'"
+0oae&Cf]k.?G]SEp@m_Vp#c#:?X;f\&o75EFUe`<(DQQrA9b:hGdgHC]=o6aBQOcGD!u(5LMC[DV=[d7
+A=nAI:R,,o9C*0/:\5b'(FAmKrUNHQpt(JglJ=CjGDVAYGFZj%rs&&O$$?K<M-l*XT/fd[>4G'k@&j%o
+DMRnuJb'\1b0JK,YGV!]6hFu%[jI<omriusFa1s4q^')KQ]Lq1B;mhOmo@m&p#9u[GB)N8qnKd7LMGf"E,X&rn*_Of-_#.#IeuTO<]Y\jeI?4oT6_MXqA1^N%9<1Q]_$@MG%[ds:TjHM`:q3hpa7tA?d<*S
+Y'Oa)eg=2fO#:DhZ2)_PrHGSrNjX48[ejDtH[U,6*r'^aZ?\[HH0p?4`tHr>d,(t+hu@)kVLKgkJ85J-
+E`^'PY1i@M_L+9YfY`;epMT_\a*3lDr.h"H\(#f/$iKW[._be.5,<FGfOhO]\,Q5<T7M-e[!0!jEASY5
+@EO)'MLN%dL]D5k,7MA\OD$0T'*j4X+jekp1*m<c6fN*!X@=u^NCG/?f`Z=a)j3_PEbR(Z;^[i&-.:J"
+Z=PJ&Y8AlW#Qt81'aR2`an5^b4e^59PU]*CPt%F]NsW*$3h\F#eJs=,ThkhnX]9ldqZV_nA$T6Qek8/l
+eSDTtD:Zm)MQLrh3A-S$XkrGj]%O9qr!!A?EOOg[=F<Q[s+A;MES1/;)^1E\A:PP5%U1Z$`oT#0qd+&"
+T[I@g[E@<9"'1r;oq2>!N(95Glum_mL<FYIh/51+h?NS*[%$OZFXiA5K3"D`q6LrG8"J)lFSafqL$P/V
+kP&SW4YBL2">1,`!^r0@!T`j!4apa&VrR(7I6M"FJ%+D)rdOmne,\J]CW$M[^s:C(!k^3l)$[q(Hm#nlO@0H`*00Ss#fBKn&IUtQ9Fh\%MhFA,_QbXX$mlQ*9bYLn$sq2c0goLi7M3:E(.V";9cQXLZMb]_
+:c*A?X\nGI)_<^A=X-M^;K!mDP+/X(9!Y4s.n_Y9[4]Xcr3%ftEtl;C9G8Dn1<hSl=IfF%7,[0%.YQsF
+cBFL_43pj3QOl"`6uqf[&/:_^Zr.m-"Z)"JSNtQ'EoTYem&^Laa<r8e5uElC2bQIO4Y]`1%6IQT0!0J,
+j$6UE=Q$Z2I8mm[Xdn\DbgjAX>YS5Rfc+"Xe%\Yn9@Pl558H?Ark-fLm:O(UI?aZ`<fNMUa7d1Y,udq$
+\Sf#;`-k'/QHdMq>LtqLN^Cj!'6(t`D8@9gQJL;=YrAfFE*X&enT*Np%EEZj=5+mJhTKH[JlD!;IpCsb
+DBUgq2?kUci`NoFM;m150ob5=HEB6h;p>'"cZqAB]he#r#CFgCD7rbRf$nt;_c_Y*(Xi,D77H,M[WR9T
+)8r4mkKM4uRbUjh$_(j5re76%>"5Egkdam/;pEie>hi@`m_If;[8h!sA%:+;ZgC>1osEb8IX.d+p+u0K
+g"*=r]35$Vn%Do8Sc,!lg`Hg2?gsR`K^]m<T>g#a.`Z[=15\uV?(@JAG]5a._oH^i%mA2&*/-8$EubcIU$4]b.F^ls7MF?,osR)mp:Gfmh!NqLD;FsBmt'8<rYH<uptZ]c;WX?k>F5/Q<o_Y6[*4NMoieMj
+WcWIn$HCLXB<;cd^8>tDfU>%.mHD;LbOP:++0h\d9"(tSlV2KW=k4&4s8>:(iNg!aM#cAm"@Z)5iP8OU
+\f7DmJ^*Ss5o:[#+G.m]c=-I`Ql*=MCNFah8b57BfVOu=+'rQ."M08.^Y\:t?V#>P6PnbePiNs=n@?q6
+6sC+nq3-H8l0Ua'K^`AK6\*Ps,=GXr'&l#JJPX\T'rU@3ieaXl;-#/8G-Z[+X5S$D3Z5><UC*V[7>o7K
+n%TVJpE>2u;p>q34m0X$UNBk&:Hfmjf@:\%S5>,>fUJmro%7=&_gbQ*66U"DL#QW8M9r*;aS0NJN-h`a
+co)6QQmjB?Pa[f?h8VsQ7"ei4.[4cO*]1>A?rGLIP(fo,6\uXFTjmqS;PeFr3H$K\47/ATr`Mn8o.-A9
+Q=I4l"A%1/1?MQ\P#FP79c9?U-CHQKd9:?TRBmYUjF<)eqC9P(8KHild#8Us=1tLgqOIb1=A".2:0>[D
+kEFShE/$EnRFr$V,e\<+p!QQW9d!sdL6.QBK2@sD6Hdl:R^>7k9kbh/R-^l7;H`.T=ZHWGm2M8=E:lg0rCGm6]kB#V>LH*t%U&CYGd@R[&c"]3S6B[%a>PeHWaSOL;sTeaU7]:\G;3?U`,g[!+29jH74+iC
+U(oSb<6D%9lCC\5C6EL0fsb!sj]ee3-9od'b<RO.kG2&%'uu-`>1,NTO)qm[<u>.*j*bZU[E`njHLj;#
+*GD@J$@"c2"S1b"4+Ia%PZXCe@bEo'A?:r)eJbD<:c4G=/%QA>>2)Wn,ab@XIZE,#5q4*bJ$d1CaWgRu
+:[/r_O#CTT=#J_]PVk\6'Y0+4=jlJAI(lM%`kU#<JT'ff269>hiET>,;HaftWjYO#>mmKMm\Q5\G?Ku/
+3kI;Qj]\/DEcBWEj'1lukDXSi^IE!cB&sJK]pC2P]rU+;Y8&XfQ*R]&LXUY.9rF%Rjhb<&!')T1NPO+0
+"5mDrK'7@)]!scDTNeY5VEJLc<f2ssRmC`6`59:67>BbiE+g]65"KI,b$jW'M9cYD\9P]q]5#ddmH):"
+'_^V;*,e;^U6`hW*?Da-UN<TX7D]o`lf=!HP&b/-5Z`-rh<^t>CBW;"p]E%[>0W)*-9]9BIkYIL]3oAN
+2nSk&/nU%gP-Qo>aI#%$4-0dM!'@9gfOGBLXRP)KhI8iSL(4fbB'!M:(r^BgcY*Re\*\>b[CRPa<IAYP
+mE5XY[WaRcaD$_,<h7]8_Hc-g1O\4/11iBs2WX7(Wq0i)ah"f[fmKJp[@Xe1L`8.dm(3I?4hncMqd=4\
+K_VH/]W2oQqg\tUr\eB2CO89Xm(JssG)"K"gIl5pI,D#Kk,P/UqM=7&eV3MTHec6(B@2]oY,oShXuOFh
+6eY&,n!9b@BqF*nbrqB_A38't.o,.V"%mF5^6EqbKP5'k]qr0$]rVlu025<E[eAP.**8)=IPm:m(:M@JI]q$(_gQ7LjNH7]IW)oD](otjjk=40k#/C-CbF>n]47?%SZ0p1[lcPC2iDZN2VU.o;;=`-478(!
+da+6EhL%*9E:sC;Cp&A2&>+GY\k-U[q:*jh%1MHLS^dMcpK`-X:*eUHb.<jgm(.+4nEYdeoac04DF3J\
+^5'^S(ObL1s1W^`PK.^8[.(D;.aU@T-$CkljYZ,3o)C#sr1nMsgD_qi6?0D*=[hr$+KK@RlfV(\U*fl'
+e.gX\`;CF#n0EXmh*-n<M8)aK>FTa-$%'?=h[7<X[Q$;D03c,^CVCc8c>R"cW&l#qmJd-1I-&N13&?9a
+*S992$-h8;O)3;DDsmO&Mr%UOXS)P\oQouTl[NQNn=5,lG]$#r5G*k`)ZN.cg<X+gYPnLI-HqG8f^BO/
+,+.uj6NGH.?-c(C%mDE0JGeld!_q\&O5/fV#"@uscV;d`m[j5,$LOq"!pT?qLK=SVBX[AOp*LcdYE]5C
+`:ur$q.jN,kRMQ-Ghd5Ma(eZP$L7MMIg8e6^Wea&n&XI)(B&1rrNMIlO=(?-W;Z2H$;][O9Eb8dikMZ:
+s%Ll@&-!$a^;KFATJ-T$n-UQ4)Y=.toe7Be,4ttt7eK1CgMibkW!N5O;C]oQcELRWm6q+1E<A]1!q="rbM99/dh&ah1oNnTVA."o*74,Xjp`IEO1PXYE;Bng[;VB,V2G1(I1rhm]W>lS0hVe5N<V*miQFq$
+d3fF.km>aE(/\QWN84o'i:-8WriiL9C&&>G#3q<n^JP:SOc'=f0+1NerijWV,RY'#'b(`3):0#u&SDDe
+,jMSeN\H-sV83]o0adH0PmbVDbPr/B)%97_ZL56Z:h9m5Gm1H@KFb$cn_Fij.gZXjjKTQtlZEm1B'did
+"jP]rnd>-<`mM'jrlBX*W6Y=gXVMMP,#TX0Os%`jW>AC.o20cIDG(AB]*iU[(\,HiP"Qr1OQK6_)3EYT
+02.]ET-])=)R4'%XPk>nBcJa%>d;"pd<d.]oc3IH*3q^U0h@p7E\R%J+Nn%4%Gr<u#4)fl&$/aq-YPea
+RhRK]#S@ubcrDI@<><^b.^I"n;RZmI`8FP!]ojroP1_%"h'T89$8O=P%&i5]OX%$ajtb*?ch?o`F").H
+Q;N2^o*Y>q_&Y22(@27Z;55GAg4Spf)GCG0EUtdQg5(jZ1BuegmkC(84Y9Q]+4Ba80bYC9(GBbj\)aq$
+P*m@i""Fe<U/AGJna?.T[0-gk/PiO?B;6+2%)qg-\.3(.&c4-_cA4*T2[0@:':Uduj#RjDkgL>#Ou251'%ZI',O`)pYdl#uNZ<R]!!"Jt'?*(cO$(n74EK%8ie'BMd62R04edEhoA)Sdm64nY5-sK;oD(U"
+Y<.sB5?%GEF7VXr%mZ?k5h$H5PSZX7fbq&Z!%blAZO$.WQLf]\-6eX@;^4$dcOE_1AMS0ZoL_ghk3m>Q
+,SL>%o0kSn^BB:eY"fnb1:\II9M5l_+S0M?P,Q(a2'$]@8!9-.:<>.FKdcPD7ak1u1&3BK71jWc30]\#
+:"M7Xdh1sL7+7tn1S7=)^>&953n222Z`o@.(ECcs,kGe&o1q50aZ`ZI:,M,u']i)sks*\b:GhT,Zlq[I
+F\WY>:fR0cFSeju'i.g=:pgm12#di")^R-p-#hg2%o5R_Ti.+8;RHU*E$$j7B1oV?h\:W@8SKuZFVOIR
+.dGh0P)Addhc08U,ne$J1u@d9RlI`g*`,cqE"tp+\MQ(#e<Ns$FH];`4%E:t6I^?5O8_02P>nqW>#`=A
+25nXFk9Dd`$F:NUoIBks]1N_87s/lULI=!5\QkEJf^pUj')<hQ1C]EV6oF"'<$O-JkpCPR9?l9re5]cf
+]i@p$.!"uMF_+ruktQq$Q*f:9jiRQhO:U7M@J1pTFYK([WA*pJ)`B8hYSCS(_+bW==;@;qQ%M16eAddV8CbmCEJX!\R9t+0AlYa@2JHcGYqEE)X&R<YF1"+%=(CcS$Oqq`l[rJc!:lBp[.V)QFh$*L?R?LD
+-,nUoEM$SrD/0Pc>1SlMel7h)M_s">rq0P0ES2"hAJ.t(VtMWXQ6B^<h/0SLDAMDE.:6X"K.F.&V=[s<
+p,(1iD&p&F=HH0Xo)3@T=)R^6CK>4Sf,J^r+(f5fB,5W&/C,Q,6XZ+eBbOiaPhc2FMT6Km?Zl;6FjCIR
+gEcIKfs;t['eN@n>>pSU;X[1lpDn95+Z=NuR23DRoOPK(@r(aGGZIrt('.!lN'PtSD>*(:Q^<!LQ$O51
+A(F:_(@`nCDbDs6e+7\bf;if@]mLV('fUJWpIN'B;cFQMCH$6]=5/.`]fMFbIT#P3P4<`nI8*JgBK&"h
+<8TY-Por$d/8l*&(JT!dm:=ceDh?SkM=YgiQZX*;;H;[^[om%)/V:A`G.6@PpcCn;_09jLGH8aKQ8O#5
+]6J@k=,9+>p=")M"bBa45e!M6\7p6_V2!U4HrZ5Wp,4([s+!'FE*'r'fS>6+M0G=W<u7oo92TVOh1O@R
+I<_N>O(!Jr.t2A'I]jK!fCL^p6LC*rV[DCA7Z&5E1(E.DN;1h7K2<QhHn5!LF2e<4alpdRR(\m=NEFS@UCiL<huFVUJ#CbUX%eWg\TLWKK,GJKGoMA-6obrYMR]Ki\&VJcPDQIp(bZrDGJ;I>CE",6L_a'F
+`'JZEO-J::PuqgeG]/k5lN[-?la9Gg;;I#4[tn.QM":Ll\RdbQQ'\sG(mu\-R>ZrJO-5nYDfrIG3#^BZ
+22el]9mC$$[L[HQ5na=%O')'HGlNda!LFZ2eG-kL,3t_Cq4"-ZOBDaW,?8$5;h@t'Fa%8#p$H(11K/Sb
+K6`HE3VdT8QM-PGP;YX*G#NH:c\6=>=n_`/Qq7"+_1pT`Q8iNB\g*r\06t*\*d?Rt'UOLL4."TFHC8uQ
+3HL%d';0MWTA!A7)3q%d.nj*6M\kWGn*?E&X_G>f@@,6-8(3(nF'EjC0JDEb)8sa5c_oroW&=u7g5)9q
+N29Yf:`0p]'K^He,AO\rX#9"=q=g_s?_ti9P1ktm>#V()Z[V3:Nd;5<F^(uZd085UQ2+^gPb!(\0s6u,
+Y;Y/;TsP2oVf<NR#2*c3HI4\&o8+AWKfVkGH;dk-'sYc:T=VeCRjYMf?#k7&9Qk\c\0Hq-Z);_SCj608
+o5-t_2+Q5^^5(aJGS;O:DYa00B\D@NqP[-:?)r8<)Kk;9[qSe<0<?+FKCT$s)^2$P6$M'O^!;[`&LXIeR%4$G\li3_4/]6-orkt+lhH;MG_N6p8KM#-Z!.mSQ#!ZbK<`&65[/fF]#24NhV:)oEgu64et&1*
+%
+ u\dhZkbHk\Z]e5`B0Rh6<W2HG>j*=kFX#:[l\T1>T5"oJ%aV^\5"]adG_Ud]r.@6]pkWR=ed.o$nkhe
+YBoAs!cQ"^7Ct@rYLnh(Z[h$r8&'7&L0M?rS85cZID&i\'YJK=HmQJ=-cb!"n/F0OZ88hVPn=p[TY+cJ
+>a9,qEQ/Z9E$r&n)?YJ9$-F1h\;[&Nf2&iEooV?QWn1`qH1,K0Ft"?CaBX5>QR,89@>%NQ_ce(ppk-K>
+Oh;Uib<a7E=M_rPnRB)r.bt'BK'UB/+RM",\MtUa)+OAuYIqMbdQ7cUR<=HO.V\h4dp.OSS:Gf'M5GX_
+aSbA+>'mUS+gjH&Xc?bs>03m-UOi4MZeWC4r6hjo("XIEf1Z^BSD2N+I9Jd4M"/I+h")O$=^YJ2GW]3.
+>YWQ\h8Hu%g&%tV*<\".#XDWnd.`L/=r1^FJ[lbC@!X]cR$lDBU!>gHBAGMqh1=D<fK1*>^7:08pp`WD
+V1AN6=VcLamT\5<\_+8jb-@"l=iWj)("XuMf5)>`IM,G_/`$ATh@(_`THjP'D?(_0iuU)<4tks10r%PE
+\Xb%SoOYq)?a4o+g7DBK];+)-8*1fojka/&6>tU`='1;O3gGn>(C:_EUQZRpj?(c>>9ggEe\-DXl!<''
+I[51@jg/*\ErGm]=RFWYVqG%:TCgU[q[k_K!HWDnl]MM=fFc[rB>D(<Ibi/4?CU2NS>q1Cj.>GohWa'L
+lgGl\gsEdF?8sTEmGn3Kn/ho(.8fT+n*aR_Ye?%<H^EIc?eZU'g"pH6(T$\.V9lqn`I;a;;h<BN'HoL>Yl0oD=p;.d-,RBYd=!\@=Bk28?g[l'i[-2@*/clVlT78ueod>Eo3LXr)DM6O)rc):6?ahINZ!C6
+OCeSX3<_Q+g+-D1pcjK5+,eZ`ebMFq5[U"B+.n(r]2AL@=aOuJc?/6acK?:mrE0lZIbj^Ihr96+nG`[]
+^ZYUQ4`K9*m=ECYrt56^!&jl\JP[a?)@?I^Y8Al_>W*)pKZ%>]R!Xnta?P2"0t=^p5mi?9,>lQ6?;Vr3
+_e!fO<5':pO\B:?GjLkX2k<NQF.)+gI6j:3-;uA$!c^f'd]!qk]RGb]UX5ao<mbje<if?#En^0&>qE3]
+lr-NANmS:JL-o>V?+-MJ\QnQh>IAXj7_IRGQ:h\drIM?'0:+d9QN;`Vic,cN?5FcIa^jt1>ddu-Mp5T"
+);Oq86(sagmIojXRbO[hC%ZeCB"qWVe84fi9nqD6[G>]oH_'=!IDO]XpUj6+)hl8mEVY!RB0Vs7jE142
+:5<&Mea7MVI@fTX/nldM!'W%`S'0jaq>FW\GIQPtq0N%'hg^f_U:j^.^Rs!S\j+Nq)$2U4j9GZ=YS-4\
+S)=p;#/TYYr/6*@.>4D3Bc(H`J-SAfO@/=r%_0/)<"dSECSW0\6-P99Oi#J`<5V(BlpVFQ&Ba;P4HW$\cGl!BJGi!AW^Zu=0RT'1aZous-cseiV^Y6DCp,81&u;oc9-=954;204_(d/%l`i9?o2EBl9s[OH
+2pKfVjZ$"VN:/i%kdi6s:T0NV5#:ec"%"2FZP>k_%"*lR^sFYH8't:f>=-[N2(_KlE>ckjcq9aj(a5o"
+Ro1Y7)Ea.tFUC]=<2sM6=B$#/8s.WrI;`==Bl"!OUh]"?X/e,f*F_ohSMleBZt+_nZuI?i@o??l#gc\^
+SZKT4'O@&C>IO+aCbOB<a)X!m2!]6YQW3Ksh3VC<G2=$`j*G$U[G?4:=3^&ZhXWJjqHt-Rj+-'T"7:\2
+D#AusgoU2eCYC\CBkQ1f;F)'Bps'ff+gI:i(WO7h!=iXc/jXG%Dakb-Y`W0rNFj$g'c=g`7VIP;q:%Ka
+W-M]PEafo0JBQj=;D0VP!Dl)okuq\iVWiDeSr;l+*j)JX\tV]rC&77qVTb5D_B@Y.^%Ja>Rnh;;D7aE;
+IdT:&d65qM*pl_k43$Z,i`kgq^f!91rephB.QPC"*"*Rr;`nnZY]9=6HGilBG:]Ei#FV:do3CBY<V$sG
+03;;b7;L=P4V`*1=:3l9Y&Kqq#?>A^,`>2`rLPNSn(mZ7A_VXJL7'm.GB[luSl^cTDHh=U\8Hb^TBZ29Vm#E55)6W4qg(']Jc$?Da72?<8'TdnhbJO[jZ'H+dm(TCKCm-F@cdJUfl,Q6@Vb9Z7.7L]UIXm.
+Mi7gM-8gLh8,CQi'=rU1c3M)BaMH:k?#/gnX0q)uil_HBCJBBi2C?B6?L0%d%rrB$LU@L5<%VI:e]0VY
+B+8(VIO1Wn`4lP+i8O#bEip`03-^2;U%BBM&CMN9[5t-.;%\VaIN5qc7d?7[ScCBrPElGT'dDmAJguX2
+7Q@Le&)gN3&Z+*ELk-/uF.e+]9Zo%8M\"`Th2SVWj1C]>[pCgP1Pl;t5cFQ'=L"ZUE[DVo\6gIhFH;P^
+3_7@!)'o`]hdEXR9Zac]-JpjSGE=EN`u,<1h)n5fcr*$L)+q4X!^;^LnlDCTN@`sdUQq".9JhP[#=g$^
+KCEmn6'ei2@2'kXm?/+'M(9k6FNp6e8nc=\W15#q9Sr@Q)^l>9&>o&S0@:PT:%o5Z's'K+;iYokLnbJn
+<99\b[T"i44$2W4jGD7;Gq-mp(ZMOr.</fK7VVZ_W&(9/1_qiC$5"a.F@M<H%KB%7CnkLO24eVV<Q=h0
+.q>Cj1bnu.\0EFABa#lEV5e1Q.TnW@SL^Pd[[9uS?VOJ3R$4o=nk$h6=<Ou]>>ur6+GM=8,t+b<XU.K7k^-5Vbd`8/#!UP:2'=Aq6\:RUU;6&L8SSuGB@QR.[$cGR-7$;YeX`S#fJ<gQ,UTCQb*u<Jl!/#+
+F#`bsa4Il0''AOKS<NBUcPlsI'buG,(*oU"HPI$,7.;pS1;[/I,rf^hP-S+L`EAB06/sO*F"V>]Yh(4"
+/M3U$e,>tDRJe$K>9L>s$8u$kB^dK%[AXglXN2;)DI^Wu[oVJKg_0$h<lJCFn`o+=[5VCWQ-["m7_;qe
+nTA`'e2VR0S^XPqG:a\gVtFKR<=<qL/km.\N<W9cbE5b8Ki>[/YfTOBjCW0*?'fM9/506l0VHkHX\ft:
+<ohF[0"oiI=<d*>S.>:M*IO?!p*Rc%+(hUG(U/'l_`1jZKkERi`"k]I@N.=QeshoAQsU;3*&D0qgf(Tp
+/q6<I"W&AZVmI<&d9=1o6LBaC0@%Ske7hi]XrKpFYU:W"GEn@I:/Au,&uT9N"-a2T,(6l:"_G=cK/3-.
+bSbITh.sEBDVf$Ma5W^l/&\eJ-"+C=;VOGuidta-<^8FQ!6B!FSfjk7cc\C.d7J2(CDpKH(^BtM9bi/6
+^'&8^)_pI0_kf.)Q-s9q]jWKQKLcjoT5[^AZohQN0chg`pjZ7G8:uaQp*N%bZGYtpBo'0gX4G8hemmH!N@bkI[8*J6lo]D+j<]`9RfnJmrKsh[*PKP_ma>`QrNnBC<R<g?4R3B?SMoW[cP^0GjfL,FFO$90
+)IIW)D:73\/Nh9>_g+iFd@X+%6G0ZPP?W?sZhO1Nef"Spm1'H;bPqXj46&;5Xm:G!p5@<Z3Zd2tf[KJI
+jP9X9N:+tK]3Cl'Sese1:TQK:g$^&D)W-`]h-[-=="C9fY?\`"AVtc!UZVEM0l0R.YAG%4N;Eulo?EJ7
+G+Uk[C>U,QX(Bb#(BD``'o12m[/@Lip?K>'=R^.ePIf.`=^1TbESegX4#\,G*.,))c/3`WG%eMc+#ZCn
+hgRN9#,r%6\*kC4]Y!W^mLn9iGL#1*qtGg64_oaq@N0Q-,ehZR;+PsV)ru7Nb,tM5[J#)/g3YKEDOeHX
+CL2(_.3nfGZpQ"u5%1,7kG.]R_-:pj94IjRK'6J6UsL04mp,iMkar+9m%&]BH<m`-^E[B6Io_FJ(3n_b
+J*Bor$WK1]e*I:pDt/lMpO*"to:LO&IMMD-Hq/kH440hk%I\`EVg%s-fBduOl2=d5MuEW62L,%Q`38M+
+^]OP51(>aLbV1QP^E_)j;t*%Vn\(^P^k5QH$K!*B=<6^;ZC=ZNe#9OhR_>cW3E)6Zl_;3<NOA<%0glVf'AYra@l\V+3\t?YA)t4BV>pln!E7Xdii91\3OZ!N^U,,pg\@_8j?aEfN[q[G,R2%X#"!D$_IP((
+C\'bX_nSi%T0s#>CV7F*6+4+K69Hs>'JZTqq'eZu#:'45,KN+@7RLqk\@^!PKI=WQ3Q&3b]sH-PMd/<[
+>Io`4\RX)KUDpl\4XXH>6eiD?*#4;]'9Z<2($$"G>Y23TUSq"_!!#*3k`A3ZTu!O#_40Q&g^>lPoJg)"
+6R5XG]<3Qo.7I'p_Fj@8>WP3942n9`7D)lsHn%Ii?DQo[1K5qjCbmM%Y/1:A4`jcF<+Wo[r'NQ#5?gLY
+gAa:0?c->_RcJ8%>QD[#"@^gE7AOnC!bfAs6T)d4^=qL6=hqiV;8g(X3OD2m/3Z5@8M*V+,/]kf<#3D_
+I[-#7`9^19gjqlSJ]-m7_5lZg;l7:0e$"E57P%S0'P9n2.*.Ss`H6utX>7bbEQ,k98GnN<r/d^j?9C$X
+`WN`f<%^XelT<$=8?A3#PHVuJLqhFj_b+7N$V&7nC.\&hTbMCcm#jp[U<*P5(\E!gqq+:&N]t*ua)OU8
+N-NB"V8PKF7%AWV'R`KQIm);59*Bdg'SB%(K$-!&(#6(;1k\:#KrBA<_9@YI95DV%LWYNk8Y!H5*4r445tZN9
+8DLo$7&!:9_T<M09H`:c1\8TW2FBltab5tsoS^h%]hGfVY$@Ep">iJFSjqM]bk08p\M5F9DbNR8bs^%*
+:t\>iF38"d3h!+BS@LfcUs3_V0Z:-4U4pb>'FI78$d?"O%'n.uZd'9Fc6VIG1uuqmji^oeb:L(j%(B!"
+-c*_A6Mnb\Mm5q8WD(8!W;Q!Q]Sst#1U<P#bWPOA9_H_"P"]+1]JPkqC&Z>Xc+er"c`HT]eGZ5mpIpdk8^u*Yr;fLo!`1_I:Mg6Z>kUuu9hJAJ[2Jg8Ol\2PnZ;(K9t^f[`8+&'hAkTH:+YCi>nG:]
+&l*9W:3@7J<>*JS[)Cba:8Jf=Cq*7T<&1hkV%i@@r;K/jg-R)+`an[6oJo`Yoh\X5:i.Ju,\Tu,`\-oZ
+9nO`fb<jOf,>=(<;T13+/7MD^S#$7X`gm1U'erN)3']8jbr$bF<?fn',J=Ksb,^iTP9Li_imI@':rN[g
+Md!C)("#/*:$XsiAE_<m'\"-j;uK,677G\tkE_XHaA#4KI-]7oRS1MU;>bQ7e5]G\:=QqE'@e:*F]$Re
+2UsBW9k>YFD'm-2n2m-&:\:,MSP7Jk3Bhb`e[gmh$o(c+A6%t[c^V#[dYc91!4[\ucmt")9ED@<1VVs.eO<D;
+KZ$.+4giNpe`e1+%9a_cXAI/W2%;q&CuWqRERAVif/5uu9h&2!G0Xcee:i.`[7X9&]#gL=9C5Hm9mfgd
+VU"u%epV77'kl5G;qNe4c[AgG<@CD/.8mi3eX_0>XP'Er@FCVi<T@gr[$Xkt.+GY]QM"O`g\o\YZrTTt
+<`PAbAC6kd"3MX9et&2\*0;0M%7$.gURclG9d)FfM,rti6$1mBOH8"9G!t/,g+<n<7ASXKF]rXW>(q2rX[l<cWn4(b<X^_7j_WPtqc_g%aE7C0[8C$hRG!jm>;`e7FY?<L-Rml+=i:["MgWWh)d2PX
+--_G(]_Y^cO'$^e>Fg^ENP-W\]VnO)&:H:[28rg3Q;&rtgF]d;Q,obYe_.?G`KI>3oq!hEXAHR5/N#[c
+Fdpug7bU;/<)oYu7AsKDVql36Q1_,B%BDe>g.o'0cFqt'D1,Uc+'S%!*aRXUp!$\Sm5,R"gHE\c:$("B
+K\L?E]9JgZKtYd[h:o;I>K+,-,4s[X\A+T9hW$'B'1#="mF?oFO<)7_*Ab'Vp>9HUbpE-fD>E(3pt9fN
+>?0clbB:?Yd85hH\tI2Ni5e`scS7J7e89-[*GaJQ[9YrH<'Ac>L"5".$/i4f.imF'e_FQogYhbZ?.H/d"WlV;
+SR)3cgC/2^2;uP</6cE$?=j%CQ2P-Zm9XqE6ERb(Sa8d.Lq\lj./!Yk`Z[7rmooB6i^Ma/jNLse4'V5L
+Y7:?cV>4Sd.cR<UhmN:4%N=6]0&khO1VO#_73(%Am#I1O@=:4p?4,W/WaK(R?u3-r"ut+=$"IR.A%i:F
+;5@UV&**'hA,\[AXqTY-1>tBdd%3Wl/e[,K+BS@->:(3GVFfj79"u\leRW"FeeD6#+PX!q>Q'Fa23;?JAn)9Pi[L2>egB0%M6m-#A7cSc7PEi"04h2FdZ-%9g^E(3]$(H'=9_mTFpm5fs%Ra*j/*(A
+bi`KE4D&b"Aqjn17R5o"5\@06;64tP3oOU#;eFiZ6i5AF(3/3F(C`P[jh>it[T[<I(tDXLfMdOTFm3H!
+:o0[l3egD8c&1UPE(Q?ojX)*VmT&H;i7pCP>\u60<Q3E<2Wn[VB5WO7Fsk9sg=Ye?MCnpgSmUX'CM&$0
+;hd6mhIO=m6"Z+!jrS*u<fbWt5%_Nqj7\jP[Z8kfY3,(KB);5I-0o-.T&^r2k=1;AI\Gq*La9]YiPp-(
+KsjI2,@rKSAG.*:IHjVr;;;T4l?$Y$ja1YFXPk,pj^O52I%4kFL1jo!X"G6(2POq%U>^E%Ai)m>eo)3ectMQZ
+AWE&3::SQoA7gj5BkBMn:;H*X_IK`_l'?."SseEi]kP3QBVd7Tc!P*1a;1?Kk7->6%^kVGcKfAodsCb'
+<_UL1/5lHfh[N_&jXY)A\n1<\WD9PIbTCD.Y373_m7"e-7^QiHZgI1e$6HWlk0RdjYM993lKGuu\Bi-N
+s5[nJCc42r`b+%53UABajsKG1f'Ln.2!e93lqS&WDC02%IVI'pm%28H^,3[gRq.Q<mtTe>Q<N@hdC5^rB9q4DhL06ae_tB9Da+6k'J8U%6fM+;Y7BE+pBBse7IQi-D"dXA1MLelj6qHj?US!+5.U*/
+J8Wo3jjptG0#2H+'(4oLnO7NWcLC(Z(@5V:CmOYYY6"!f%d^YDP]mOQI4XaB#Od]Znap&SY';T.a60VX
+=GHigcN<X7-L`(\\/eR/Ns9Q)#4;F3ncp`8KpcnNOGa<NS.5R+0Ze=aL:VW(DN>NBFU7LYP4;<]F+4ki
+2OAE,n8kb"D]J`E<u>t-)0*,KdnZ\%`u+FZ+S+,+o%p-^*i/0UH0mg@kS2-Z<c)ki-Zlei@O5K(Q':dB
+:@7sooJ]22%/'2V5:3i4MmKXn\Ehc01\6WmlfRJ3?L)[!3-.l"EAopp?TW7W)g!GIF7ekdf3n4U)tO:TmCouN
++(b(/Al;s4D'qef?I<]:gm$X+C6io0#>=dR-Lu`hD;S.`(FjVLQ#nZkpIA(]VT>)WA)qTj2\<jo?!U"7
+)KhBJo2dhL<t]YZIeUlfDWb;JkCN(<5#U!Ao?-3<;/uA$@Va:!%[A#0k:CgYMY'DsgIF^+MG7X<-Z-dF
+p<HKT7rJ,L6h^M-p4KmIpMtOichODsG>FT)?W*$lGA43:%_i?bmL\^YIqC<pf+3<$G?an;J9Usjlpj/6='bSR(#A&.F8pD.mtJV[LAHt3p(k6ei5PD6R<nV1_InjH[j(J%%.8;>_XC(\hei0B[eVh5
+kJ+=B\!Hhs.mOW3qZiMcbbW%HXHrgip=D&5LCSUd6#7X<H2]aH^'As+`-cd'r.^G^:SrGECh`njHA>mT
+15bq*!.)\dI+PIoSBI3o]mVhtHe^`1(F!U4,C&rnH]CnhB1VoDgA!nBC6&Ml0=q,A?[Y`-rB-86rc@pt
+b5;F8Eu$Rl-[P^"_u,Q,2-7cN5*DY\U].`sF,tllB?GAbT)4#`p'\)%mR;O/o$!t<HlVWp^Yo(re:1qm
+rEj81a4Ck-PNXsYDuXVO\,H9?O3=bX)G5]K$jm9r?8,W9Ta6;P%#74onCX7#.2%S.j&'LN<]q=\a<U4G6mtMB
+%
+ =f_pR9Zah/s]/lZT49$@lKcMAs8),l>8_V:Zo)G'c)ElTMfHfMHq]k:8UtS[5sRRUK=BpC6a\4-;*?r
+f>&.`-'legZs%<&gF[m1$$'8/="B9I^ML;[la#9ipA8sI?*IBm*S1T)!2P<6$r/Go!3mQb[QKjS-323N
+1ARI&D`sE5B!aR'NdjKl$p<5d*DWeA!Rp4RH>StgBt)d`G2'.%pMmh'Dmu,qr]cC"`c='6mT2?8cfF*T3.*YdVq/@b]3W/6GJ2o'GC'6N09`Btm!8NC^Jl`$n+_9K1uAh=mHjKEIfA6Vj7`JeO8I;l
+YA&@F"2POAi4H#3e/JIiOF/>[_N8ji#XZn^0b)!=e2n.,nGG]d`/sUa&4F\3i.E/N**Rq_Oc3Q`7M2/-
+)TNG;FLjql$H30#&c0fs8.mG^+t^"jPlSEO%%AJ6&r`Y9b*&j./'ARL[.-`R1m'B+9)O"=Uf/a$Oeacq
+br!\/7,8&8nJkIA:6Uq.36r8.m6/cO]_+J6;hS-E95DDb!N_<mHS;Jcm'-R_Dp+I1Z4>'2i4&?l2,(IgHXBH+
+FU^W6drcBu;H&i<;W>7:V'f?p[%/?e<ehs:>LsRkCK\Ffm<N'^[EWUc0D(6T?.d_&O_*.q<L[StMc;E>
+>*"XH5?ef^s)$LI"heeX<pd_AgfH)FF52ug<u]1WmG2qkn]]"ihK1$>B\GAF^O021qU9iL=:PLc^%OU]
+KAbBVK7Z^^jm@dadhUOk9j"LO29jdn22`^1^!Ui\(H'[(j>d--P2r#p<0uMU.f!PbMd.13AkL$rKg1iT
+T[M@nm89K8<:a)A<;J1FTBR7PJYVI('j0[4<HVfNkBH?rLZ05t$`i5)k&IQi)Ut`q8:(!SBPdPMeZ[Sd
+,iu:Cn&AFnjP-j%]B(!WkIkcfk4-.S).hEF?5tU)_qhs^I<o@I>`4A<gOtX.='JrTJ+Ad-fsL?t7UsP5
+bCF1)!iYi`d\:#3:""0467LH-4_J9V+l.o\flm=e!S_e2a*ZWO81-\GEZQ.ti5]Vf2iH^f?8La?#^/AG
+n%911lgN]VXmLGEr`aq@'LMJ\o.lb=cFUTF+.d1-BAKDk)A?3GrZA'*VZ.`d6)X!OL8b,["7(#d3TEA&eG::U"'2WD.$`EtkFAmjJac,94n`WJ?t0Wu%rMk?f<GQgr#U3HL(Zg49_R=0nSp0*'ggDTNuVqD
+EUH^43X6f(*5jU5jaGuI[s\dXe3/UarZT2sM%S`(8Th+W_4(^Hnt!utG&^,&`Ajt7@`,s<O_QDcVi_0a
+Zo!07()4X\T^sBqc]'S=2A/P>#b_AKNY0PL`u+1a)$Dfu%u&2m6Ge0j),Gj&W8p._o)3)Z]7*HdrCE=s
+,@lI`<Fs$65Nsa"?i1RLOb)OaW"fJ>jIB[6NBt\m,q%dGVj1/JaIVs#.$G'XNj7S*b;jDZV7a4&'(0$L
+Ls$/G<%aODjqpc`8:7![YYakI<LnAU.orDZMihTo7CfH8B"ZWLZW_4b356-hCoEk%XVOU,pG4.LU6k:!
+Kgs_GoOCkjH-]5l91eM'B>!o0'CJ!,FUEn%9$E@c/Hj,9_K@-(P`X<^qp<5l,3Wj+U/XU>1ns5$BZ'jb
+18]0=B#R7h")4OV*^DLf=\*3h-_,:Xc^tMN8EVu[T/-,.dolK@.D7X3<:.BE\V1CU"[>G>($*93@h,9_
+E/+"fB<W:O9.GW`G]b@#;\@,3C98b\'D]aF\YVEdK^PoT]T1<1EDJ%6B<>12[Ps)Bq5=?i<iRcKS](IlC5!Nd8m7!Og*UBEKTE>0qMNnakQhDaEg%,B]i_i\9'18!=#E1a8c'f=Q0ih%[&2*u)^&Qc<A1ZL
+5./k/9j0,3V6q)AeO#(]:o4],QufLsY?F!rlJ4p[eLo-BMOdg#)j;FF@]nJoK3#"`0"CUaVTrqi)=&<j
+XB/,V<bgB)0"nC!2f@-Z96?G`ESODZrIYpJVg,1HNM1M*p/kPR@'=_C3(8;7=KCatXDRc5[6E]UHTuFf
+"]2]eG62.K4b.H&"`=#-]NqSMKC6_j_:V6b@5lMJm?KuT2#a4K4,eD29Zji3$Ka"Ahh)k"_mr]tgVA,-
+K(4-CKhm/9ieK%*E>BB6pHn.G9;Pa.XKo^PF!9KnM1qq[-V,&.X%u4!=`6JXV)R\QT'P@#lm>iJq.D<!
+S*=BI"o#b,;Z'Ck1P)i42T7Wt2IK\pAb1(^bo+h1=_*M*Y!(@Wg$^-Jgl\3brdJ-TWnH,9$KA;VB"R7K
+&BbJPPOU-QWA[6q+-XU$jX)ja>%ZZ$!oQ/UaDV&>K2H0T=?6WUA(;5G7HplkUM!Ug[[?e2j6^MJZds`T
+)'<1#]mPQU8b$VVD!GGV"-d+;T?NY)q.8BOQM-'ZIq?MPAdtehZNasp;AVA7>h(7oY2RZ1MQGt]c*qm[.?GsE!TYg7]CkU'hHRm)mmen%Yh"T<H7'`s\WNe0c+2)dib7T%"FYCkU""H?;^1U0!'#EaM7$*#
+0Bu923*rGg#D5t?Sfu.aQ@t+IgK7%jT0%&t[cKR$GjCpfbP.&OhRP!ETS3iM,OVX@q]ZJ\4O#2GAm3no
+$_hJ*MWK#q@G9NjCinIU@laGe^RK\9DOnhuoVEeth/@CXh8rn\AQ@jIa0KbMc+Np,BXIF/%JJWND)jd3
+W;*i0YWX)!ZX(?(>ZeY(r\;D<g#(i$X,q:9P45_ec^o0@%oV2#G;mF$\<s%S`X_%2q-TN0h2eo60%K._
+of_H8]pIK5]r/:g*U]h?\k9ZEeT/,gp01%^oJn.)qI`Fbh'^hHrh\5YQW24XEX5gOJ_"t(iqT'Sj70m>
+J[\h;gq12*qB)d2r9r;1&<!u?rUH`pV7,R#e'YDFn%,le"lN]?7JPb9cAq@USK:Oe\PM#U[g&/3*u<(M
+9D\4X1@jli!,bd:W0jGXZN2_g!Dfe$moF;B;W<cL.kd":9>#k;H@Se#p5`hZcoD3qVBJ]u"DtI00J_oG
+VYEfGq/5uHc]mTE*;QgG#&floE)rrkY-.)\qN)Qk:`BFSJHt[nqlTGqYJ/CWC5+Bn5nF$IO3X#N#];&4rpX;gKD>koe=#e'CG6h0mO$1TR^[-EX7%n,ONJhE3=%<e%<-Y'Xap>QpAO+rTZ])Q$%-SD:<KDL
+p9=>pYknP*ABXFbpFu14au9#*9*J)f##5C50N.s+)$Q-Hmgo!;"LSJ1/I.Bf%FBe<OZ*s@!sk!Kqp:Sq
+0?4DP9]E9qmjq0C%S7&oMXP3alEOt6DtqRr[a-[.#)CR6d*D]RbaoBp'<sP2d>8,?]&uKc)(_*Uk1VBj
+`)i'.<_E0!&H*O;XM'`!pJJHpOA-\^Tc>F0UQH3%8Y6VhhUmp*$#MU;OXD0si=;t?'#_*i#s/etNup*9
++*!2\W(dt$h$D4[hhu1_n'_"baQr@udSY0qn8;Bl+!Ju,`GoB.Oj$ZW@.KFc*O(]oc;=ShIj>GT!cdlT
+dRt8b[.S7+,@mJ?XP!/9+W>.j)R)@OYl?&o],Pb'*)^>f904-!0-"ugJqTelOqA]Hf-q7"hs\pQA[Mil
+nK3ok,grM7nuQ%n!>L^(W3SK8OprRR@hq`?'a8RpNS<Gi,pLche^1tdd8KlrPpA):,XgB(EiUh`W@oc'
+,uHNNbS2K-^&UD$!4%9N8FZDnR4#1f"*/B#1E/(19.*P/-]u4VcqtAVIjd)\.5<7KBQ4GXj!dl]*ffD$jf9HKlQhY`.W\`Bo(=lehW.O(+AUf:P5Qp=n>"@%_)$&9E`jut%chXj.?`4?Z';a0.i-Tcg[dh'
+P2dAljXsHu2=jm-'<HQ0O>*[>32d`]WpqcA#s8k[3bU5`P7o^QaM.(p)\XAXP&Cm`W:r&k1=I[9Wuj/Q
+2%`cUs&'^cF$VUGnN\o35D5djKrHp6#s=ET3g:L>Z`>B(AN"WV#nGsHEleq,`5IjuLN5;p9LfI$!]s<5
+$]dae+hdqA!CYF7$OW=?JO&bsP]]_BF\Y:aF#:7C"YPu$7qOJA<$+E5(I?CfnAlV/mVOa09fuC?0P;mS
+0:bL#\M6N"kqgpGe)!"iSP&!2"HK$F;pcq6"Qo)Y1i[:UPRTK,#=!=[`\TbOV1`)LbpkQ$8+_L1["AX+
+,9Sfj,LX1%d%rggd2_[WF>DWDb`tUr;ag*G7C6DkZt/4HB^jDj:,NDV1fc/m&Ohj:+[?G9TnPrMTHR;V
+n;lM'eL*iS"#qsi3]!I0Wln.:m7ro7<_p5r'T5kmUF6e@8TVd@PJoYG>>S8E50=O3Oh")jgIfA>/erU2
+'n7Qp[5(^n9D+-FPK)@ZLAGuq=>4q7naB\(a]oG;;<mFSFQ!t@<DI\e<]/K0C&'88BjNI/:U#sWo5u4_8Q0a38nsPg2).s.2!7k#;sboR7p+a<,>qDg3+Db^!l&0i7P"0;<"Q9V<\/BXCK0t(+VB-&e9PQN
+d8h"<?'\&mF`*WLl"&oY=&8Ej[TuIf<sI-t=1#UpFcB"YTfptKbLN"^epT6;ONUY#)jY8'P8?K,ZTn'U
+3JF"t<RFMu_eKkgF&^q&Q-V[h_,ciUCK=)DNU:$dpKfXm.!=uG2=jeUYV4QM+]d3%Fp1gq.1S6gFL<=C
+Z85<$d8:YV/GAaE&KOEmY>V_t@s(^[ZuoB5F[t#lEH\rI9?'<)DHL\rB=3),[@Lt)!t#Di4Vio0p29U_
+K4f%n0K1^tp46j.TkJX3>0o-@'>8*\UI6mprt_.V[psUTVdEEL2pp&i<j+lUdrDjNACeG=[GOb8[qmtC
+<u2/cpN9;RF(sX_Dm_6:Pne4[6Om%OG#_7FG4Bjc#tEO_Cpd7L(D10O'4b1(G^%baJoPcsF)j-YOB3lO
+pFUL=m;ja;F_NLMm[\GWPbM5NIeQKI(JphQH!&\oB\-Fem$UQ!EGa=I;7Bn/fHX+2'mqf2?rN5+&ab4W
+M1+"/EL91JXTs6_P>=maEKp9ND@p^64'tbUJl\9k%hj#-Wql3/Aoa5F<],TZdr<pdLiCOd(eo[MgPIlH
+E!3EUiY?q[Tn(VrJS([,eW,_*Zo;QAMDm,;&4.A(XNYlkN,j=pGTTWgj+mi7N9#tN(8W$l,?p2q8a%#;
+(1W)W0o5TpO*L>YYV0fQ!CDmgM3?It(h7CneKHWQLQJQl(j?c4]PCU0lrNS7;P?!Mc"%\LE9Q,&3;n[O
+6'%?[H''a/p%=60o9C-dN0kII35]hM)3sM&J9b(D\@QN;AX0[(QZMV<`%*Do+-P9GK!')u=VeMLhfj<fR/)D!=Ij4OYqMM.M-3933Brt399;,3:Q\A>\$K1921.ArP1Kq:R.1pdD4B#SLf_onZ:C?$Z'tLM
+R[GNom_bG1;4fd$C\XloR<,"lje+=5TQ.T0(n[,ICOhaI"Bku%\d=8Iq``6`kF!UM\^b8:M1tbhOg4)$
+p*5>R0:C-dI9;i#Qc#D?XdY\UGZMY7;R^pscZuj?UfX+1g.d=2`I\tdlI^T^39QJ7qB:,CLmC2[g/Y*J
+;aItZ43[5i=nSIl'<3p^-953l3ZEsf)k\)kX#delH"VT;T;jf)X'-K@QkcX-0::I_U:<"We./W4Rt<KN
+ocd;?\i#8Sh4DtBUkqa>>$%p(Oe+JAV7F'O=BR0.o0[UOVRM,OH?ZUW)4OXfV;!B%\pL\B':kSIS]K9Y
+g68aF5>N290B=ndHGd,d&ZTCgQ.ijO]#hAW>IGH`[Fu$/Ro-1(a0n'P[WocXMA)_#(IXJcZNdh3R?m-h
+WNMTJU<(67j:>gieN7=?H]6R\)aghkXV:R<ZFdZE)i8l&O-'(p>.Z)n].($i^V)]"7llKjQd_CMYJ*(a
+::caCqi".XBt!l7[6+2XA+R-5Bt'RU^cVq=)Tf`UqnILVF5.#9djLJT*Om!T@M:u>7mXl[OeWgelM%c_S";n"0dY>>n]Vra*)4.OZP`SK]\0iWHUiH%B4b+%_VAkF]PQ$.28.bujdSEIHrIuNjh@\lXr.nf
+>`HQYnRi&IXV^lN]UciCTrbm=WZ&a(Q&D[&OghtGflj-mG-RH4l=9\HRI?GMP$Pr,P7$f#`#:u)r-I#5
+o>gc+a;j<_2j(_=Q*BoZ]j,%qRi06E!RNt5Oqd_uS9Fk!iQf+OcAgk`GhKT2D93eEb+0or>qNHOYCV'A
+auHNGI4s$]Xi[*BQ(0,r<"l-lS8TCfUjF3.7^L>9`P]>[c#=o*d1ae#8'sI;c@'uYdoXM8cQIW.?G-)q
+d[Qb4#MD8*d!OHmh49bCFk=;Cg.lA$rK)D9O^+Ghd_(XhS\<MN^WNN)e69!'S=dr-_:#kogj=J)SOq#8
+:!<4QbUNA!2sJl"$$Y3G@+T07>H-JK^XjL*i-g%3O$2,7/VS6(KtWD!*KRiRQf:1Ti&k;D>]n`s40P3Q
+i4_1Y=en*eP6m!)E*]S-rRL!-_rVoTIm$0T^0H1+F2=>Ye(qX;?.m_V?MD-+5m4U>(Zr+#/N\<@PFZ*5
+*W*#8$*ROgi*JLsI[f9M#L<6M#eRe/\J<@1+l[sYlZp1s]/T'E2re58j*o*3*N`m0OS$oKE^"4!?>Js(pZD;sk8MUQ[p/8@^7tS^k;q(Ok"eeJj@ZQAkWVSCh=Kj&$:"J2;1(%ARP3osbN^/ql0<KO*:_Zf
+(U4q.caYq"5.U:b6)Is=iuJZ$s!.*,:F6o)m2^!0?H'(]P6KbejZdJ@I5!@g`%`>-mY`$cmXa1YCVO1[
+pRcWohYp/t44]Tu/H66n3K1"&Mp=G@g\[[lIj+0.Z1<BB])OAII]N'gNH8?;oJ"*T\s>mQ$fo(Do\=N[
+^+U=1?hGMIr`>/"9SF@V=@G?*c$o3VfVBW"5S+2.!.hsoi!/K:K&hX'@5/TE.N%4HUkM&>]Oj)@N(9Y*
+q!=#0-'670&t(#><WE[l:/^>0b%!#`_r+BOPTk65Skn:nl4!e.31EL9</NfDPtdK<.M5jC2Q%%a<U,j,
+[:Zr0&V`Y\$N5_"@^'":Q?t3deRnkdmM?h-cKTJ_eSc%([I3j=\(`Jo)b(>=KXTgC\=>`%&W=D6neiEq
+k.=X'jXYVH`br2Oa_15a*.A[(MT4oQ>+J]sl"/F]p)=s@j%YKeD0Hi1cD,Tmh/E%X%JL*a_rGZ\*%k#'
+QcJ3/q4/">8#au'F*eo[cW@RiL71_g5S&LdjRN"mra/0bg$ABY^)io3=52`)Cqh'af$<r1c8)Kf!f!lHlh7qHcnlBE^?gLj"[VMi*5=8U9I1$!E0MLT6ZD*IS3ESQE"rL!#QYOUYrk_n78ZHS'ZKTa@i!((
+A8<#OOh>NG[Z8j`mRPR8JF:L!'T4'SndLX)8Q%C/-TSESr2hf;.jWQbZD7^8Y"?KRU!*$!_P'WNm)G_K
+W[]KpW@DH52GNdIrei5SJrqgeP;Mem9G>U_3R-#Y"$07LbiM2W9[s_$]$T7D/OQmN,:lElga>Kee4]m;
+;`*Sj$du9@,jNko,Ag?.oWfE58bAO@=&kN6='8P2KkjiB25P4q=#K)Z,X_$IjUbO;%>aet&#Fn,eJ;Xp
+A^Am!0.O:$S1A?hP^L#W_=i;L!a@R!3H%Mjc,U"BG,<!a;tg%/E8C8B6!ul2'P/:T(US73?T7*:IpVa>
+Fb*W%h0jn5p`9lti><jWDPF88c#"u=eg1JU',:2"c\_koN_A`UDaYn^%-`qSkcQhDd$+/^QVY/@4#Ki[
+V#d%1Zn8+Kg,\"5L:C3#FNhXI?AjDK3UW)+kZR&7V-TFH'r*<@Nek_j[UaZ;BDUJsL25M7^ThT:-FpDJ
+gFZcXfN'WZA*r#_hYSg(7FA2SpH@'>l.b82CgGE=/A?(!`ZMlZqmQ"Gn<<Oo^dB);)ffrrQN+pEr51b,][s:cIIl(Y!RLCD$ra9EqZbHuFZjA7f53["$,\:=Q6k#>]T/,gAiTg9O(DHfcE0d)7u4>/8;Dmn
+pXpPRi8[sqUZc;\DHZ:;o8]7+C%PJ.;fFc4/(f5i"';AtrndPEc<SYkmkDLloD!bmk'bhYT>0:^Im<++
+rkF6e!+5m@,-)Tk^j$:i<`=*kDB8R+pLa79g?j)[R&r!lT\e&&(L:q@%_-`9"5s(AKFUH*/\!_G@!!TH
+NCD*`LH=Z?">bd/e^:reDZ8Q.3e22?+$]OM%a,80G)'*B6^GCF(q]*Zme,g!pO8`DMps+-9pWaGM\FQ-
+:JEJp/k,Q:o,asbN/ZGS4il"W']ZEA:k]0BfRV\MA8-WmW]I,8>(bQ<Gr@##4ukI]*$Q)LOAZi:aCsTW
+,Wq!@ckX&UVW@k)Hn^,0dLSkC.j-(,G(YTr6l4L?jP4hkPXm\H6>8(U,tst(YnBpD3DR+r>aUh>/FUC%
+aUR&W]7uL6?E\%),,@ngQr=c09Qt$3dK,_O15-!(=*YXWXA0nC9oqcpJF[1V':RB^C!@O*nDaZ$S<JP>
+ZT-1S-W;:SES^'(R+h=39RDG6\d?KWkrWP-q4EZ9hT"eq+(>Z[2)4qCbSUVcUh%K=F!>&>g*&iIPmjC+^.??P,t6q7(.9q'JfgEJ-QuEQ>V=<&1oXgCV(%Uo1m4-<fpq%JPr!HBSe])A4\+bd(7+MnL<Jdt
+0.ICFL6Nm<d7TNgW_H!_8R5]<Ba4cOlh-mLb&9"jYr8>0fW-fWY0G\43Ms>mXAtR+`ROoKj!nuC1kl!+
+)GrWN4SX`:#.Djh7:'BDP"H@9SY*IW?d/`YPLK6%=F-BEBUssaFt0?@fc*_#c'+n:@:[jP?!sOX/["`+
+(K/pWj=-q!@Wl@O>&%ngS&I+Xp8S^m)cLN'e[)Zcet:GAJSo>D]1/&(aB8=j@kJ4NRC,B?(0*&SCXl@'
+e:ls4``U@B]Mt?=(m!5ScPY?[A9h1PlrH3]32YNlS@<Y,cBkk;CW+Gqote?aV&+2b<PP4d][iBlr.Juo
+3A*,eq:e:,)__;S2mV/Kgj=m0Dl*lOGV9;0g`^^>XHTD]<;FX@02:pRZ)Um*Hd\rRL8d$`[$Zmc.[s9b
+0\)f7AqJOe#ubZEhD7sYg0ECTLQ66%6squ1"CV.WKQ6]QN_E=k=1dRLS)rh88\(,!kDmZUD!B(;3V:V?
+\ToNed`In4cJ6'lKCC^B2@"F!A-U;HbT7b6dk9cj7r*VEV#l.Wbe>(Gol%,OB[<+85@bc8OYcgMUR4gb
+BPKS0EOL$UfQT"ub=R&NAr]gb^:Ij3lX.#2S(!ViN^Fe1Nj6Tt7lfm#kM8q,ogXP`.^#0#oeDeK?F%6_
+cWb0jE3q:Sg<$r"kj,o(R\hEAI6#[?C2I)IZ'D/0"a%iC>7%3KL3;3=f/su]OfJ-+WnWuOAF7(Cs)]k-
+ZC@$sC&@_6E@.*q<UXMeV6,Z"L@a8^.s,!CH)WYBqmX,FE,GQc^c)c)htBL4XR1NIJPd<D>Vh*"XkPlom]b=`;5J&&IBDgJ(#tN/D<sgAC?t=0i0>Num?S7#YE&94E9if+pWKDpDZ8_0&"@MjEPZq(3B#WQ
+6geiBh"4RUjnJ&&jo$FO<A*b)>rSZ#/an\ncMZ0t:O_k0DpGr?46p/B6$1-H89eeJm!Y4Up21o)HRB?`
+gBWc4mN^M)LDoQbf&:<lj[!u7s6FkFH!5E#b*8`E[CFV<o_krLmT1h*]mIeBh]^T6Pf2b>Q_4)%&nZ5m
+:R'ZW\+H:Qk^=8BY['bIF`+8F>rOV1^.6cM59K5AIt+Ae_+o06f@mpY]BoOkh0\U3n9sK7pma_+G@'1t
+4-a^A*TFSsrLrRmDDCgH#JhlK-ZUSa`p=)J_tkuUJ]qJ[qHoT@IW&foI<uHdhIAreM_Bg%GGK8fQ_\N6
+l2H1aqf=rjW]`Go0uNQH49@`GoKQRP53ljb_rRWJiP#u`5^Wl'MmbldjhS4_^r,7u':h=-q`]Z&^8qCK
+UZsnWUR$8F[UNdOq@PpgVSPq,^bcY=4;pMU)aT[P^MD"Yg\7M=Trc020fpYrb0NB_,=4L<'gr!a6i]Pg
+Tg=V?6+eV^`$r=iq5aUt]*o-8g^D!c,!u2:_[9,J*"OmA]tTFS1_N'XA/%%^`BLS%ProjFirYno.`&296c;((9KkK'*C9#c2^A*fj)hhA8i?du6;0g9>XgWi5Jcrj5R\u(r$T;p4N$MK`4Sf2Z)\9Ed(EU9
+6Ng6''JDm#;(OOd3<D'+r"-\$9LI7K6YPJLEoBA@4W?3U2N0%QKNH.Z9uZ1#[bJsC"<JuH8%KBb]c9DO
+PXNH+B1@8^/J)qWZmS83CE]cb`UljDggEV2+iGkE6HIP=$r]YI;9(dsa$MXMS2.Iu^FiK(7LJ&bPWH^/
+aM:]?Q-p(2!l5tKHUj<Fa:)t-*,R*/@CckVUl7UXKLJ@7gI?!maGbsDCaI#aMaj[r7a-BR,`TkrO$BW<
+)P]'gS7tJMFM!_m7oY[B>`K85n0dQ+`r&n/m$^!2.`Kn17B4]hEG^tDG.uF<2O&\Gm#T4%U<.5I8iq#^
+4G:jl"%Z[-88?F4qts!TX%L#L8?@bBge&/0NCl$rb"T%Z'Rhs-ff<7:Z]$P1"85;GbfaDY7r/r!['<8V
+50'@i6aR!"qDthHP!Mpo7BjMJEVRa'U.ZKE9=2X\XN!pBVFDiP7"_G\PKuSfLe>V09Zs?Ve?6m*cFmJN
+bZ)t`CrNOSHkdn@aU).p*7@P$:G9?$PcHQ"CmdQLd`oD>ah1[![+>^+=VP8R9Jfp/F4s?>p<5@sc"uK6<8:5QoZ0-[cAVKlS0Z0t^<3P%:<`)aXNj;JY"$(bc=GeX*9Tmeim"/n_f8LI909k(p<OGfabrAX
+PJ"q`##,Nscci5Ob]lq4A'NKh7[1?k4:k'rps0B2c\2O!9a3?]kXorM6mNkhPfb^S[nOI%d*3"USF4Vn
+mnE*O:F-1l'aD;*o8BuLbu8;nPk@a\O3&CSbD=[u;HcZqhG<eW2JL<2[2dRLdmpIS1J1Wo8\<@Z*)\p:
+dS1@QXN/\I-V./E:m>M('^I9g$rGb2;Tcc$m-i<meC$3#;=-'c7$(99ED]]JR`-#b2&[R%1sn_dc[#T"
+1:O'u*`F@>/$bJib50<R=fm(b*GNMk+a?oh-.G(A;oM08/I0LXbY!N3d&_Z>[-U]@92rK+dcAa(gXK1[
+7+3/Q9LJ6t,[66obge!7;eZ>675e#,]c-J:-s[b;]c5K2:RuO(<(,_Cr?"nE:JpdaMfF!lrEE6,>uiOf
+&p6[lI&>DHe$S3dZ;jK84_dPoCIqNB96G%$eSNg=DUd2If*sCTc!sbeF%-7Cdon]Z3Qt551K46RP&^"n
+AU)g+E0rIWSTE62-"PUh,0PCTe_NGWo__Ts%9Kq5==n%8?%5sfJCJ-WcBUm^bGa"JDc"'67V+0p/PK:5B@d;?;X0oU-&5RhLV/modsZVqFMcT?f@WN9c32X"F=^.7Qdp*EP_D)q%?ah1>M8B+9>JAI"b4pB
+S<oLi=Y6IQoomcLA_<6#<csE3AS7tn$s26uf_)@9NK@9X:.E3ug1?IP*)0R1;\IoP2cWm]]`>8W[)HU$
+>!5P_-)K=4]36cDc.njl4dATe>2-0b>8=qU?)Q&'8(*?N(2^),<H$Z0DHqUJgl74sS]>!#b1r\e7]!<B
+ohO6N]A+FC5+Se0c*PSf"$0GhgNpD9.o'ALoN/HP:t<-_%F<k+g<6;Gcubl4_ZO2Pcs<d3;H:TdS>Y.1
+A6d*s>_V6F?-D)Aj^*)jX3ApsNTMurl,d5U<u'"^*JIelmp6?1gGQNENS(H=+BTY0h./r[Kpl3$g"uu%
+g^N#\qjpO\QlKDX?^:RqrVbGmLtjlg>*\:/*U6sblJO8r?p4a%1/EX4:^_^W@"no:"pj.a$/hrp@(m(X
+Q4@<2%cGVCi8+uQ*Y;a,&Rd:+@6P.W7I8\:c+9bGhsL2IRO#G6TYip=7if=se^Mu9[[.I#^YSTlmB+kI
+raJ%cRh?o)*W'.'7pbU%@R_d*:#.@ci`9V>=KVj9:+bBn048*=@h(0Okkj:u0Ol"-j#-%/D=-@td,C!6@?roR`Z$G2-J>WS>?pg\_i\*T<+FE&?Ta3%H,AIa3937Q:#7iH?9=0(+gHbMA"H*LQ79M,iSqdA
+?8[UM-;J%d1Z\O1j$lmP7Lq?\(U;r>@ri]$/dL?E>\-qPAR7`7Sj[+kJ#3]Fh^pj!"kDKN!gl!\A`P+G
+%
+ '6I_BB3B'AZ]Lnc6ciQ[]dp6jJHX'<bb%J9A5"+?kuW$%T$^0DJ&ldB+Ae=:0*1R=BQKCB08eJ*]7RF
+Y2qiLaNdrN:0M;4?If8>Ae;Lb+Ur)7g`%#:iQPqIj<Pa0A*9FtkI,*eAA+Kr+D&PRkZ2H]VM\$[s5L`0
+d%2fO#'&kpDWpeSB`=,P/p>0l!+eoM*?LG@!53(uMdp@`l%soP7YL!.M7>EokOs;e(4P5tqc/>nl/ZMl
+e,E@k_'Oh,l+X!"p6mIj!+^6t70]ROQE"Z-WkFp:jMl!Y5&G!TGA.PkCAtJP#-ku#;WfnKB24k-OKQ[E
+<^,V_l%SM?=r_3FV<YM%C;ue/'f]Pt;WoHUQ(gD&etM@#M!0Q?a8W.*^7*.B>hPl8BP,9NB$+ppgu>cE
+?j;VW`T-7oZ>BNDD$J='%Kl#YHtSI^CS$sYDK>%a\SXgI-3h(u[_1t/q;!B)C&+dq#//cKO6e1%Cc*%c>g2Q"19"lbmB5/ZSgr:Pei?3smU"XcAt*DHbo;D?m2kY1/9OYCmHkV2BeIp&L=L'JGA23Bm=+T^
+hWXB.pLmm2l6bL+B&7CCp*^F/?T'99B)0+!J1YV%al_[PVZLb+**O)Pmr&9qQNh<0lY+6$b%B(>rs@?)
+\#@*PnA)PQf*fYi%.Nk3D[-k9DUW;Xf^CFpCOT>9`qAja_shRJms/*-52P8L,%9Whed^*sOpCHug2F_F
+EQ`XoN^?DCJl!a9nW+u81b$]KB_#dREJGrA(5qP&pght`nK/*A\]bR='_:c/O#IT1(GCh>163+mo$909
+^@<#JQ1$([Bi5PN0%Ofm0lL,0De@\nO$7Si45IX+>D2\;("_d4Ic"pdnch;<j/6dM,4Ztnn5h(2T.*XG
+J+A(]oC#:neFRG#Xmh)3mcRGff27e4#Y$0rJ.FI/="o\*<:K'4FXL<bml%bebjfTcD3hX'f(89HNq::r
+p'DZ0QV@#D@kZ.MDl5s&D]A<j7TEe`2h:>FVeE'\s1ZT%i`rlX^LD<JDg"!o:Zf`>hf*\pEqV'am,mX!
+hba!</bLYkohST^T2tP2HM(\Zo)TbN(Cfm>%emG[o/D$f:NuPRP]a/ho?MT#<]/ugKm"3qpIC'ZFM95Y
+;taO)iWheC5AIX1C"%9=eBCQEG.VWN!72O#pG\@R^M\6CQ2+44nm;XmZt";]2>;lrAJ\GDV!/>H7!L)L
+q7K`&7pL:5EHl*IG^"sgIi%p9Vft:-/ls+hmIGS$*-'uSqR+gtha)EXQt/!Fq/c&p#H.BIW)tnb>Q:)f
+2n!UjRIpNJo_/Xf%taWiVPDId$f?@4#JL#\=SoPqnLpX7*Z/t%'u-*PFr,&n5ISo3`)<4=Gn3@2hl^i=6i<:Np1n.dqdEL^P;ZE(q_,AU+)L/%d="7!I3kTXYIJ8hc$PMeH`,O`s&As#Id5hFGPD16f_CB.
+TCEHEpbPHe,QV[^V>`\fr&9B#B;TZEZ$f-^gF(&:^We;.qS@[(jo;M[P$2@NcgmfmrE&4_+0k*lk^OE@
+Al#o1?b-'"c2JO;s,SA5Vtkb/p3n?S)HXl6k?e&`FU/#DW)Nc4TT.L^"ir/)Ld2NmF@%&YM8Wkc.)]FL
+(61gnd?s9P588c;KOKtp!`(81b,#a8AA28(R8%9LH%b<o31\?le*5rmHUFK(BJb#=-Ab9id\t[\ANlS^
+WE![jHA,t1=KU/Se`u7FHR3\4/Co/:VU]Ij>:6lDICA6Y\m94*H_iXjHbNj*fDFBJ!G];Uml)4E-NRb\
+j(n?^AW%j:Z<B"A*6!OfNm-ZBGs)(M6(ZM<o\(ldLK12#lSX!:I,c@VEb4r+I<Od^]%6<DgYN.pJ&:.4
+31PFV-\ok(o([B!1_p>EJol=p5/11(g[032Sc,'/Z2sI^G+N&2T@F;@q`TCHGK8\6pAI/S?cV'so)/MP
+DmTBB^^qI^!^H0*&HfjG'GC[:E&8R@_@W4V$:40_0akhU!LQ[`%'%UY,Z,I<OeaENrt7`i>YQ!09XEUd6dX%')B=eX72!R:FEJYDOkbL#[a&BEk;fh1M^1iV>`C#NdU\UiZdAjh\182lrg(_91BfARdepnh
+Yd4bZ[EDK"d24.WPh@I]18<5@c*D`[-r,tJml\nEh!7/M'B:M8ckFq-6;R5*#=QrR>n9EOe9r'%:<nL%
+n%<bU.ni%P_r"3YYgks7_UT?;;UcF%;,^GZ4]PJ3Q$l_9e^]ph>1OFZE>_.69RRsPp$*hCfCg55@_T8#
+D-BlFXbC6*2C4u.=:msQ8Pt_+Y=RC`[CL//f$pSN9FURAZcmVCk:YR,?.c\n=)Ho@YLAcKE%1C4l#5<8
+h<TMs=7-*=i)d4HI,LA4rIa'2:)ST@G]k$Z@LZ$\:"))9/WA-1_oZK%ekL.GA6$?6ARsI(8X/<3/l@nq
+=`.Z6AX5\tB]dm:M.YoDL2`2/YjHY$BMlI2Rch6;V4MC(o4a!>>(3$@i]<AQW&,0@\BnN*IH>N#qX21E
+CRYgUY2J$)r:9-A[]?h'gIBr-D4@-S\F/+Kjgsn"^@f5//:2)*@sHT/_W\1g4db@,QP[[*HtOPAEEnPR
+an"5B0?H]:U(sJFg-)BgoGV%uT>l90?c;R7-V'ubg2?r)G!"Sq^NNnp<NIjUG.+=8X=&GRpesZ&iV;"oceMEB'LUMu?(YufqAu9$lM=hrU[7iK^U``Y*o>M+n:)Mh_IJUabJ`uo?W"uET6K#jbtB^YKmnMu
+kP>-bY;>s'ch7>]=#fE7A-I,!"f"=q<mr.s5^s%SeN2>!"Pmk8H`r#04npl<i7d.=cKsMtP#@R&bK#:?
+RM7(0cO+)i?\6UKj0kmB#9flsL="3b_:W`;iRC#FYjrmRk]0R.'BOV&Sg6&a4Eqs,%uIPSs2=(Mrl[(l
+M?ls,1`,Bk@_>Th0m/hu3%4oslT0VpS;t0o[25H.LObI-1e.hm6_SlmLiM958!nt;h9t_1&:Cf2EtogU
+9IkAY)AL7`>%,QAMil,!3leRZ%&B+RP0r8]ab_YlUthB%P%mfbq*a&u/4kZdRT)\q&K@KU@#?_N0?Ws!
+(1OYVIS]N<9*nfSV:fF2cmCbH(J?G,*5RV4p,9je3uhi`bt(Vk:<aYD-`3]f2A,U:'D$&e$quOP`;UE@
+6Jj$27,FGtSobcoY[/T6ekda:C!Pu)4D1IbSo`V3busX$kLB9916tnXC'?+-%0W#\l@_u['eEq,I$^nZ
+K[@i'6tSR",*1#^5\SC^du>-'Mi(lgZg.a-jVaFa4_i<c<BfYXre#9oY8\p`=PdS@0b^FOPF9TR-VW[#'`Oao_rX989eBh=cBhG?P>S>ZrMe=*W)Up9;X1%.TG!it:c:0dAQ9A;Q%"ir$5f-FD.K_I:9_\u
+6Q=rLnta_EA^XXI7cMo"XUPnS<lpb9l]c+_'gAVL$EI-=rAB\4^35[n?sTZJJ?c)Na4'6DA=#`GW&@t'
+c*UtAX8R^Bj-%42lU>K(-%iS5$Ii6@9ks&iMP.<\;cTa9=!'kD[ah7Y>DgR2hnb&MpAWgIRb(d0j0,UB
+SYa_<FK+[SICTr)e(Uj,CG(aY:):F8a8!,&C#OH%$#Ob:8HSBbm?Y'd[dd[Jpeu!7d(5Q5pg3jZFRQ'V
+^,OX?heVBK._W.&b];WH]EN1l,[R%,MZ_m""+ag<@^rm*kL+.2K+O:n_Djag;>[\K0AZHAfC!Mple<Wk
+8UbonE1CBL^=Y(rlE[eS(Dg1)GtV_*_mnS6A"3.OYl6c*)"/SWgT,g@N^^AZ*[TQG'l\+u:!&ef-06*q
+Pjk7Ub1L:W@63k2ZG"Oe385Ne*.s=5emO<")A,oC#C#c7/M=Q(ia,*rH=m^A`[.fE93X]M1Zi/f=oU\J
+4T1pp#(t:JdjH7ceW_hdN6s[F.;8Z+USA:9\?o`s/KHQ91=a4aRV,H%Rld<c(8]NG1D-d[jbfjK?d5%<be)\7flNsEcHrmsQE8>S&0@arRf>b@m=VW#2T46P(LbcA!:]PVo?hkS8o5$6Uc,*6g3[!SBl,hV
+o'.ehZPQBp4[5:@%U%;.)g#neOYh4+Dq/FV3+fe6Q<Mimep5SGaR%^O[qkS+R"oeO]oTu(%g:]n)hDs7
+'YmY%h'?2g]N*dm`:f5A<qn%WEK2KUmLB`^O;gpQICB;a5#U0`Mj-K?GJa,N#N^mdIa.Mg#W\G6hYOJ$
+B-(eqGL#j"1-^3"IG;p?G=CW,+,"a-?ded09'NIT_f4[0`&NMkinSUV/"8ON\CVJ\e_cF.R,b[M/T@'3
+Q`KK:h:/t5`m9&t\9*auh"clDk@N[uh<j+V[>JPa1M.6f/oM+THY(3fDn#Hnj3tYBNU`T)\bQaPjB')n
+m&Kf[:i=b6qY-PHINaeqhQuB!*Hq&2DNK%#\(^bpD9MgKanm/#jV,[Wk<.5Jo5)tFQR8lSIIe.^?@gti
++,;K)'A<79-1ZLtbPC#Dk5>R@_dKLW=Is-;qG0uPrBK$5hfjsYYJedP)BSgQS+;$#c2,1Fli#_MpjR_S
+q`g_ArkHMM<kh^BHY6f#04=W0Pkn2\ZgMf%Y5j7@*4'G#kO3ZPW)WNYh#X[,!@UeFmJ-clgA)8O!)P`W0L#Z$5ld!8"3%YDNC6$#UAGEGr"$=AcaO)h^BO)5Xfu:=UZVi\HK=Pk_@SX/E'jm?Lu#7\Z&g$H
+6iR5Ti&2'epeZkME")MsK^\'?ZV?bCd!lE79+*FF$]ouK:qmC6k611s"X\R"D4:`+D$Frt%5?NGOP^Ld
+i^.U-orn;JciFO$_[I"e#]Pa.E$?ognm<]_KJ.`BB`/8+E=!j*bn---mY%pL!=s.Y%l#RIOY7>e1Cm>A
+$t;V)Xrd10Wt#]k'Th,\;,%b07hlV5%Zam*Y\Om!2&7h`]r-,+%s&$C2SIKNZ,E+COa-s;K*fmS9+R!E
+OWJboI25[7'6.Y&d?tmBQPrPPo$@;77!B("V\O2O'Q6DT0i&aEVXt6)U$)4;!p3VTcrB2r5OmCR:K\F[
+ipG-g)6ok@;&\l>EuctI(D-`L&I(k%]"7:k9+ci]nIG[g<>_qqmh#F1&To.X,9G71,#Tj6EU+gkT+e0G
+qSe@3/<Lnb6Q>6o*7<LdZ:,^Q730MhY-LgFE`U!(>gH;V*/$6t;=KQTrtVd)s07h6&q;+)/=Qu[SdQ,X
+&Ss'kgE7%IfhW8(EIeH-"!<XA+S$5UM4kHT;MDE)-o/CYo"?8'JLg<3/1pl?WJmV#4VTP,,r.sTdV1!>__'(O
+-KHI*$jeQQ(7-9M0/@;rN:9.(G6a)3/!A"*;Ta`7LFCT/.B7Pcn<"iUeKPYBnL\MN&rABM.4UGZ.T(g*
+0lI>LrsGg8`03P=E:GX1_(bI^2,d^:1LDjJ$7tcQ+jrPaZK!kVk1ONo.5Dbp&?R8+]Y1TDUU'nYZZ8C<
+q`*#F3":!UduJo6K.a;^QP68Lo<13TKar+]-]q_:ZO8ZI=Z-cRYg%G)6m"2u/Jhm&.:g<IOp&+mdkn<1&^mc^;0=BFm#cA*4B'-Te,;CMs$*jq">VnW67"P<gHeRr3cg-Ddeu3_[3fss4#<9k10[(E
++ZgAo3>8#Oa9=o;+#e:)6?G4KPFSRn.7DDQ(t;\9;n4fM]#.H&5SS!!M)e#R-Sb78bk%;?1hfIeJI.Kf
+5#Xa2ObYd>&Mk%=.Bo[c'DXmmUHgZ67b"8,[&C?"i4nW=X"h!'1qc8`_\A<"-'Ug0FB\i(F$fNL9iO#(
+F;HrM2afJo652^S#%5HK,qjA`9f2*'1fm?@5d+,t44In8e8ItE?SVd)k]9TmZQfMcG=W+p4tgn3Oo%\t
+[7O.E8(B5_WQ@aHYu(*`<)lRg2%`h!VR?'.99cnDmaV+hj\?@q9U*q"2!\3W7or[c=*8@]Ph/r6kti#[:3CJV
+Z>D['C8*QZ=4GnN&cEa=q,"G0%eP$GPttTEo+G'2=mOY-odWY!h\Xc-5&U6h&=5.P-C\#I!Km%PE18[_
+HneVg>89k42=4U*o3W7+>HY(B<5hmRHU5"r78u!.dT9S9qcNLj@+B["ecT>Y8Qdp/=8!_;1sVC&/R`dQ
+@rmiAA&U$bK4#H`2c`R\(.VpO9k9PcAQD`@Q="3H@qF5&A[ZAd(2%7qD.])PB22032KNMl6QC7e:Gs(n[Ku[#4_V-(:"GYE2;'st3C<G1?<3h(eiQu12/-!=C/j:sF^\:9_c>5laH]rMf#;J!a)*`d
+Ct@?X(>Wh.iGFn<DO0=#[c_PZo5>E=DH?XPpAJo2!H4;(E0gZG[g-m('6+g)E*!utpDn6T+`WhjEgJ"k
+[jQ4J1NO?kE`Y>CpH<S!6$&AWFI,@:[mtPl;frmXFB;[gpK_oC@;pD5Fn]Zcp46juojd]BGF*5lZK66g
+C>$(KGaDQX=,hI6AU.@<H$>HtQ_/QTUNmZRH+0c!(Ti!bX*[pOHZufCQbRn!_g<3?Hah+E(X7>/bC*I<
+I<X.gQf!5Cj*_a,ES"oR8Q0ibo62KL=]]Tmf7/;Eomf!qJ/AZE=:KeJ%tRgrJX?[nfF`]0(P4UcJf$"i==o,l
+08!@_K:"$=fJ/$R2hX.PKG[@8=A=I9:PDnLKpYAafMR@t=,&\=L)=]\=D`e[DhhG9LR;_0fPu]AGDJ5*
+L_u&+=H/-(O,6u&M3s'TfTD$cQ\mblMAWCO=KRIJYDZMhMjUE#fWcDsP?=-bp<ej=eB),#q`'dnMn$T_
+fXHe6iJmWeN`bV-R.$%pnW%kcO-o[&f^4a1!K[$KN`a\:[-^6S,A?b0@TF"`GghV>$'JEnP'I:qR4j`V1QY`uP.<T:)*O0d4-Wl4P^,W\R89'u]&NE4O`c/=\R1J"09s$DPrV-rfh7Y,;3s:YQPk.:
+=acX)J!aAkR$i/cfn#OdLCH7X@G)/o)&$d$NLBTNRTZ\Y\WN@!Q('e;Rp!@mRD5.M_4,_fS=.EfftEod
+d@C$NAGMXZ<\C>=)j)$$C:0aLQ.)9afq2F=T:+<'\^d>jpRg.ETK3%F=pq!l&#!/9T\8.i2DLZLH(#UN
+Od<2FRN\AN';:jPURDdig,#N#2l&JrU`)n%>"tf]:Sh5n#5T>sQA;4R-(^LEOkCshH<m@n8#KNfVg<E^
+RX_6hK;G#`W-X#n\qR)OPGm&ROOW`rH=Dgn+0&:7WOcl>HBG1QZ`>"RW;=-*>.L^1]rP>UX;]-\3mXn]dUmD0
+QBi2T[s(]\.o4`oVAdX\g<$N:dB<?=Y<(4;](`D^q64'*YaYZtgAeDs#I+(?Yr`>u],.a,)7!HkZC<#C
+gE3a@-aNV,ZTB\D]/R(N3OE!X[$s@ggHW(b8$r.n[6%$h]2uDp=ghOE[[U^6gL%E/B=@\[[l\B7]6Ca=
+H+7(2\=8&ZgOHaQLUd5H\N>_[]9g(_RCZUt\soD)gRl(sVn2c5]0!(*]=5E,\\).a]UQaMgV:E@a1V<"]fXEN]@XaNftL\N^74)qgY]abkJ$id
+^H:br]D'(pq7p5;^mkG@g],)0#Jg6P_)r+A]GJE>)8]W'_OMddg`OER-c5d=_`THe]Jma`3Q,/i`10-3
+gcrat8&Y=*`B6f4]N<)-=iO]V`ggJWggA)AB?'jla#n.X]Q_EOH,s6CaIIh&gjdEcLWKCYaZ7'X+9~>
+
+grestore
+showpage
diff --git a/macros/generic/TeX-PS/epsfx.tex b/macros/generic/TeX-PS/epsfx.tex
new file mode 100644
index 0000000000..88d8e4cd94
--- /dev/null
+++ b/macros/generic/TeX-PS/epsfx.tex
@@ -0,0 +1,412 @@
+%--------------------------------------------------------------------------
+% This is small extension of T. Rokicki's EPSF.TEX (from DVIPS 5.58):
+% -- allows safe including of EPS files generated by DVIPS
+% -- can also display bounding boxes.
+%--------------------------------------------------------------------------
+% AUTHORS: Bogus\l{}aw Jackowski and Piotr Pianowski
+% BOP s.c.
+% ul. Piastowska 70, 80-363 Gda\'nsk, Poland
+% email: B.Jackowski@GUST.org.pl
+% USAGE:
+% \eps{file.eps} % instead of \epsffile{file.eps}
+% The following settings of the parameter \tracingeps are recognized:
+% \tracingeps=0 % default, no extra information displayed
+% \tracingeps=1 % displays bounding boxes and file names
+% \tracingeps>1 % displays graphics, bounding boxes and file names
+% HISTORY:
+% ver. 0.5 19 VIII 1994
+% ver. 0.51 25 VIII 1994
+% * \epsnamecolor added
+% ver. 0.52 31 VIII 1994
+% * \eps renamed to \epsraw
+% * \tps renamed to \eps
+% ver. 0.53 9 I 1995
+% * `\isls false N' added to \eps
+% * virtually active slash neutralized
+% ver. 0.54 9 III 1995
+% * \eps clears bop-hook
+% ver. 0.55 27 III 1995
+% * a patch neutralizing unnecessary rounding added
+% ver. 0.56 3 X 1995
+% * \special commands surrounding EPS box are to be nested in the \vbox
+% ver. 0.57 31 VIII 1996
+% * odd characters in names enabled
+% ver. 0.58 21 III 1997
+% * setpageparams and setpage neutralized
+% ver. 0.585 25 III 1997
+% * comments touched
+% ver. 0.59 7 VI 1998
+% * EPSF.TEX included
+% ver. 0.60 10 I 1999
+% * safe multiplication of eps dimensions by 10 (expected to be
+% included in the newest version of Rokicki's package)
+% ver. 0.61 29 III 2000
+% * \eps expands to \hbox
+% ver. 0.62 13 (Friday) VII 2001
+% * setpagedevice neutralized (why only now?) along with a bundle of
+% commands specifying paper size (a0, a1, ... , b0, b1, ... , etc.)
+%--------------------------------------------------------------------------
+\edef\slashcatcode{\the\catcode`\/}
+\catcode`\/12
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% \input epsf -- inserted below %%%%%%%%%%%%%%%%%
+% EPSF.TEX macro file:
+% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
+% Revised by Don Knuth, 3 Jan 1990.
+% Revised by Tomas Rokicki to accept bounding boxes with no
+% space after the colon, 18 Jul 1990.
+%
+% TeX macros to include an Encapsulated PostScript graphic.
+% Works by finding the bounding box comment,
+% calculating the correct scale values, and inserting a vbox
+% of the appropriate size at the current position in the TeX document.
+%
+% To use with the center environment of LaTeX, preface the \epsffile
+% call with a \leavevmode. (LaTeX should probably supply this itself
+% for the center environment.)
+%
+% To use, simply say
+% \input epsf % somewhere early on in your TeX file
+% \epsfbox{filename.ps} % where you want to insert a vbox for a figure
+%
+% Alternatively, you can type
+%
+% \epsfbox[0 0 30 50]{filename.ps} % to supply your own BB
+%
+% which will not read in the file, and will instead use the bounding
+% box you specify.
+%
+% The effect will be to typeset the figure as a TeX box, at the
+% point of your \epsfbox command. By default, the graphic will have its
+% `natural' width (namely the width of its bounding box, as described
+% in filename.ps). The TeX box will have depth zero.
+%
+% You can enlarge or reduce the figure by saying
+% \epsfxsize=<dimen> \epsfbox{filename.ps}
+% (or
+% \epsfysize=<dimen> \epsfbox{filename.ps})
+% instead. Then the width of the TeX box will be \epsfxsize and its
+% height will be scaled proportionately (or the height will be
+% \epsfysize and its width will be scaled proportiontally). The
+% width (and height) is restored to zero after each use.
+%
+% A more general facility for sizing is available by defining the
+% \epsfsize macro. Normally you can redefine this macro
+% to do almost anything. The first parameter is the natural x size of
+% the PostScript graphic, the second parameter is the natural y size
+% of the PostScript graphic. It must return the xsize to use, or 0 if
+% natural scaling is to be used. Common uses include:
+%
+% \epsfxsize % just leave the old value alone
+% 0pt % use the natural sizes
+% #1 % use the natural sizes
+% \hsize % scale to full width
+% 0.5#1 % scale to 50% of natural size
+% \ifnum#1>\hsize\hsize\else#1\fi % smaller of natural, hsize
+%
+% If you want TeX to report the size of the figure (as a message
+% on your terminal when it processes each figure), say `\epsfverbosetrue'.
+%
+\newread\epsffilein % file to \read
+\newif\ifepsffileok % continue looking for the bounding box?
+\newif\ifepsfbbfound % success?
+\newif\ifepsfverbose % report what you're making?
+\newif\ifepsfdraft % use draft mode?
+\newdimen\epsfxsize % horizontal size after scaling
+\newdimen\epsfysize % vertical size after scaling
+\newdimen\epsftsize % horizontal size before scaling
+\newdimen\epsfrsize % vertical size before scaling
+\newdimen\epsftmp % register for arithmetic manipulation
+\newdimen\pspoints % conversion factor
+%
+\pspoints=1bp % Adobe points are `big'
+\epsfxsize=0pt % Default value, means `use natural size'
+\epsfysize=0pt % ditto
+%
+\def\epsfbox#1{\global\def\epsfllx{72}\global\def\epsflly{72}%
+ \global\def\epsfurx{540}\global\def\epsfury{720}%
+ \def\lbracket{[}\def\testit{#1}\ifx\testit\lbracket
+ \let\next=\epsfgetlitbb\else\let\next=\epsfnormal\fi\next{#1}}%
+%
+\def\epsfgetlitbb#1#2 #3 #4 #5]#6{\epsfgrab #2 #3 #4 #5 .\\%
+ \epsfsetgraph{#6}}%
+%
+\def\epsfnormal#1{\epsfgetbb{#1}\epsfsetgraph{#1}}%
+%
+\def\epsfgetbb#1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+\openin\epsffilein=#1
+\ifeof\epsffilein\errmessage{I couldn't open #1, will ignore it}\else
+%
+% Okay, we got it. Now we'll scan lines until we find one that doesn't
+% start with %. We're looking for the bounding box comment.
+%
+ {\epsffileoktrue \chardef\other=12
+ \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
+ \loop
+ \read\epsffilein to \epsffileline
+ \ifeof\epsffilein\epsffileokfalse\else
+%
+% We check to see if the first character is a % sign;
+% if not, we stop reading (unless the line was entirely blank);
+% if so, we look further and stop only if the line begins with
+% `%%BoundingBox:'.
+%
+ \expandafter\epsfaux\epsffileline:. \\%
+ \fi
+ \ifepsffileok\repeat
+ \ifepsfbbfound\else
+ \ifepsfverbose\message{No bounding box comment in #1; using defaults}\fi\fi
+ }\closein\epsffilein\fi}%
+%
+% Now we have to calculate the scale and offset values to use.
+% First we compute the natural sizes.
+%
+\def\epsfclipon{\def\epsfclipstring{ clip}}%
+\def\epsfclipoff{\def\epsfclipstring{\ifepsfdraft\space clip\fi}}%
+\epsfclipoff
+%
+\def\epsfsetgraph#1{%
+ \epsfrsize=\epsfury\pspoints
+ \advance\epsfrsize by-\epsflly\pspoints
+ \epsftsize=\epsfurx\pspoints
+ \advance\epsftsize by-\epsfllx\pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize\epsfsize\epsftsize\epsfrsize
+ \ifnum\epsfxsize=0 \ifnum\epsfysize=0
+ \epsfxsize=\epsftsize \epsfysize=\epsfrsize
+ \epsfrsize=0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
+ \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
+ \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
+ \epsftmp=\epsfysize
+ \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsftsize<\epsfrsize\else
+ \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \fi
+ \else \ifnum\epsfysize=0
+ \epsftmp=\epsfrsize \divide\epsftmp\epsftsize
+ \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
+ \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
+ \epsftmp=\epsfxsize
+ \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsfrsize<\epsftsize\else
+ \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \else
+ \epsfrsize=\epsfysize
+ \fi
+ \fi
+%
+% Finally, we make the vbox and stick in a \special that dvips can parse.
+%
+ \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
+ \epsftmp=10\epsfxsize \divide\epsftmp\pspoints
+ \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
+ \ifnum\epsfrsize=0\relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp
+ \epsfclipstring}%
+ \else
+ \epsfrsize=10\epsfysize \divide\epsfrsize\pspoints
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp\space
+ rhi=\number\epsfrsize \epsfclipstring}%
+ \fi
+ \hfil}}%
+\global\epsfxsize=0pt\global\epsfysize=0pt}%
+%
+% We still need to define the tricky \epsfaux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global\let\epsfpercent=%\global\def\epsfbblit{%BoundingBox}}%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found.
+%
+\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
+ \def\testit{#2}\ifx\testit\epsfbblit
+ \epsfgrab #3 . . . \\%
+ \epsffileokfalse
+ \global\epsfbbfoundtrue
+ \fi\else\ifx#1\par\else\epsffileokfalse\fi\fi}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def\epsfempty{}%
+\def\epsfgrab #1 #2 #3 #4 #5\\{%
+\global\def\epsfllx{#1}\ifx\epsfllx\epsfempty
+ \epsfgrab #2 #3 #4 #5 .\\\else
+ \global\def\epsflly{#2}%
+ \global\def\epsfurx{#3}\global\def\epsfury{#4}\fi}%
+%
+% We default the epsfsize macro.
+%
+\def\epsfsize#1#2{\epsfxsize}
+%
+% Finally, another definition for compatibility with older macros.
+%
+\let\epsffile=\epsfbox
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of EPSF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ---
+\newcount\tracingeps \tracingeps0
+% ---
+\newbox\tmpepsbox
+% ---
+\ifx\epsdirundefined\epsdir\def\epsdir{}\fi
+\def\epsnamecolor{1 0 0}
+% ---
+% BOTH \eps and \epsraw ``normalize'' the eps name, as one may wish
+% to use \epsraw separately
+% ---
+\def\epsraw{\begingroup\escapechar-1\catcode`\%12\def~{\string~}\epsrawcont}
+\def\epsrawcont#1{%
+ \xdef\theepsname{\expandafter\string\csname#1\endcsname}\endgroup
+ \ifnum\tracingeps=0 \hbox{\epsffile{\epsdir\theepsname}}\fi
+ \ifnum\tracingeps>0
+ \hbox{\setbox\tmpepsbox\hbox{\epsffile{\epsdir\theepsname}}%
+ \ifnum\tracingeps>1 \rlap{\copy\tmpepsbox}\fi
+ \vbox{\offinterlineskip
+ \hrule\vskip-.4pt
+ \hbox to\wd\tmpepsbox{\vrule\hss\vbox to\ht\tmpepsbox{
+ \vss\hbox{\tt \special{ps:gsave \epsnamecolor\space setrgbcolor}%
+ \theepsname\special{ps:grestore}}\vss}\hss\vrule}
+ \vskip-.4pt\hrule
+ }}\fi}
+% ---
+\def\eps{\hbox\bgroup
+ \begingroup \escapechar-1 \catcode`\%12 \def~{\string~}\epscont}
+\def\epscont#1{%
+ \xdef\theepsname{\expandafter\string\csname#1\endcsname}\endgroup
+ \vbox{\special{ps: /SItps save N /isls false N
+ statusdict begin
+ /setpageparams {pop pop pop pop} def /setpage {pop pop pop} def
+ end
+ userdict begin
+ /bop-hook {} def /setpagedevice {pop} def
+ /a0 {} def /a1 {} def /a2 {} def /a3 {} def /a4 {} def /a5 {} def
+ /a6 {} def /a7 {} def /a8 {} def /a9 {} def /a10 {} def
+ /b0 {} def /b1 {} def /b2 {} def /b3 {} def /b4 {} def /b5 {} def
+ /letter {} def /note {} def /legal {} def
+ /halfletter {} def /11x17 {} def /ledger {} def
+ /flsa {} def /flse {} def
+ end }%
+ \epsraw\theepsname\special{ps: SItps restore }}\egroup}
+% ---
+% Redefinition of epsf macros:
+%
+% The values of `rwi' and `rhi' parameters are to be given in tenths
+% of big point; the older version of the epsf package used to multiply
+% a dimen register by 10, which put severe limitations on the
+% available EPS size.
+%
+% The macro `\decimalshift' multiplies a given value by 10 ``syntactically,''
+% i.e., accomplishes ``decimal shifting''; the following conditions
+% are assumed to hold:
+% * leading zeros are meaningless;
+% * <digit>+<period><dimen unit> is a proper form of a dimen value;
+% * the command `\the' applied to a dimen register yields a canonical form:
+% [<minus>]<digit>+[<period><digit>+]<pt unit>
+% where <pt unit> are `p' and `t' characters having category code 12.
+%
+\def\decimalshift#1{% #1 -- a dimen register
+ \expandafter\expandafter\expandafter
+ \decimalsplit\expandafter\gobblePT\the#1.\relax
+}%
+\def\decimalsplit#1.#2\relax{%
+ \ifnum#1=0 \ifdim#11sp=-1sp -\fi \else #1\fi
+ \ifdim0#2sp=0sp 0\else \fractionshift#2\fi
+}%
+\def\fractionshift#1#2.{\ifnum0#2=0 #1\else #1.#2\fi}%
+{\catcode`\p12 \catcode`\t12 \gdef\gobblePT#1pt{#1}}%
+\def\pttobp{0.99626401}% = 72/72.27
+% ---
+\def\epsfsetgraph#1{%
+ \epsfrsize=\epsfury\pspoints
+ \advance\epsfrsize by-\epsflly\pspoints
+ \epsftsize=\epsfurx\pspoints
+ \advance\epsftsize by-\epsfllx\pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize\epsfsize\epsftsize\epsfrsize
+ \ifnum\epsfxsize=0 \ifnum\epsfysize=0
+ \epsfxsize=\epsftsize \epsfysize=\epsfrsize
+ \epsfrsize=0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
+ \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
+ \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
+ \epsftmp=\epsfysize
+ \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsftsize<\epsfrsize\else
+ \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \fi
+ \else \ifnum\epsfysize=0
+ \epsftmp=\epsfrsize \divide\epsftmp\epsftsize
+ \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
+ \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
+ \epsftmp=\epsfxsize
+ \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsfrsize<\epsftsize\else
+ \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \else
+ \epsfrsize=\epsfysize
+ \fi
+ \fi
+%
+% Finally, we make the vbox and stick in a \special that dvips can parse.
+%
+ \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
+ \epsftmp=\pttobp\epsfxsize
+ \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
+ \ifnum\epsfrsize=0\relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space
+ rwi=\decimalshift\epsftmp
+ \epsfclipstring}%
+ \else
+ \epsfrsize=\pttobp\epsfysize
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space
+ rwi=\decimalshift\epsftmp\space
+ rhi=\decimalshift\epsfrsize
+ \epsfclipstring}%
+ \fi
+ \hfil}}%
+\global\epsfxsize=0pt\global\epsfysize=0pt}%
+% ---
+\catcode`\/\slashcatcode
+% ---
+\endinput
diff --git a/macros/generic/TeX-PS/mirr.hd b/macros/generic/TeX-PS/mirr.hd
new file mode 100644
index 0000000000..5c39e74fa7
--- /dev/null
+++ b/macros/generic/TeX-PS/mirr.hd
@@ -0,0 +1,32 @@
+% The following header can be used for producing mirrored output on
+% printers (phototypesetters don't need this) with T. Rokicki's DVIPS
+% driver.
+%
+% USAGE:
+% dvips -hmirr.hd [other_options1] <file_name> [other_options2]
+%
+% WARNING:
+% Be careful when you use DVIDVI or DVI2DVI in the context of global
+% specials like `\special{landscape}'; fortunately, `\special{landscape}'
+% works smoothly with DVIDVI but not with DVI2DVI (Sawatzki's
+% implementation)---you have to use `\special{landscape}' on every
+% page that appears to be the first one after splitting a DVI by DVI2DVI;
+% the same technique concerns both DVIDVI and DVI2DVI if user-defined
+% global specials are used.
+%
+% In the case of difficulties mail to:
+% Piotr Pianowski or Bogus\l{}aw Jackowski or Piotr Strzelczyk
+% B.Jackowski@GUST.org.pl
+%
+userdict begin
+/bop-hook {-1 1 scale isls {vsize} {hsize} ifelse neg 0 translate} def
+/appenddef {
+% use this for lengthening `bop-hook' in your TeX program, i.e.,
+% instead of \special{ps:... userdict begin ... /bop-hook{...}def ... end}
+% say \special{ps:... userdict begin ... /bop-hook{...}appenddef ... end}
+ /stuff-to-append exch def /to-append exch def
+ [/to-append load where {pop /to-append load load aload pop} if
+ /stuff-to-append load aload pop] cvx /to-append load exch store
+} def
+end
+
diff --git a/macros/generic/TeX-PS/poligraf/README b/macros/generic/TeX-PS/poligraf/README
new file mode 100644
index 0000000000..7fcc57d2a2
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/README
@@ -0,0 +1,121 @@
+poligraf.sty generic macros, crops.pro and separate.pro dvips header files
+Copyright (C) 1996, 2001 Janusz Marian Nowacki. Public domain.
+ver. 1.0, May 1996
+ver. 1.2, April 1997
+ver. 2.0, April 2001
+------
+ [Polish:] | [English:]
+,,Mi/edzy \TeX-em a drukarni/a'' | ``Between \TeX{} and the printing house''
+wersja 2.0, kwiecie/n 2001 r. | version 2.0, April 2001
+------
+Cel: obs/luga strony dokumentu | Purpose: preparation of pages for
+dla cel/ow drukarskich, separacje | prepress, color separation, cropmarks,
+barwne, pasery, ,,lustro''. | color and gray scale bars, mirror print.
+--
+Pakiet makr zaprezentowany po raz | Macro package presented for the first
+pierwszy na IV konferecji polskiej | time on the Polish TeX Users Group
+Grupy U/zytkownik/ow Systemu TeX | (GUST) IV-th Conference ``BachoTeX'96''.
+(GUST) ,,Bacho\TeX'96''. |
+Niniejsza wersja r/o/zni si/e | This package was completely rewritten,
+*znacznie* od poprzedniej. | so it is *not* compatible with the
+ | previous version.
+------
+UWAGA: Korzystanie z pakietu | In order to use the package (with
+i programu GhostScript do podgl/adu| GhostScript for previewing) needs
+wymaga zaistalowania fontu | Helvetica font to be installed.
+Helvetica. U/zycie opcji \labeloff | If you do not have the font, use
+nie wymaga posiadania tego fontu. | \labeloff toggle.
+--
+Instalacja: | Installation:
+- plik poligraf.sty nale/zy | - poligraf.sty should be copied to the
+ skopiowa/c do katalogu | directory searched by TeX, e.g.
+ przeszukiwanego przez TeX-a, np. |
+ texmf/tex/generic/tex-ps/
+- pliki crops.pro i separate.pro | - crops.pro and separate.pro should be
+ nale/zy skopiowa/c do katalogu | copied to the directory searched by
+ przeszukiwanego przez dvips, np. | dvips, e.g.
+ texmf/dvips/tex-ps/
+-------
+Zastosowanie: | Usage:
+W pliku \TeX-owym nale/zy u/zy/c | The source file should contain
+polecenia (dla Plain): | for Plain:
+ \input poligraf.sty | \input poligraf.sty
+lub (dla LaTeX): | or for LaTeX:
+ \usepackage{poligraf} | \usepackage{poligraf}
+Polecenia powy/zsze koniecznie | The above commands should be preceded
+nale/zy poprzedzi/c zdefiniowaniem | by the definition of the paper size,
+rozmiar/ow papieru np: | e.g.
+\special{papersize=x mm,y mm} | \special{papersize=x mm,y mm}
+Inaczej przyj/ete b/ed/a warto/sci | If not specified, default parameters
+domy/slne. | will be used.
+-------
+Separacje barwne uzyskujemy poprzez| Color separation toggle:
+\NoOverPrintBlack | \NoOverPrintBlack
+ wy/l/aczenie naddruku obiekt/ow | turn off black overprint
+ czarnych (domy/slnie w/l/aczone)| (default: black overprint)
+\Separate\BLACK | \Separate\BLACK
+ (lub \CYAN \MAGENTA \YELLOW) | (or \CYAN \MAGENTA \YELLOW)
+Polecenia powy/zsze wymagaj/a | To use them, you need cmyk-hax.tex
+zainstalowania pakietu cmyk-hax.tex| macros have installed:
+ CTAN:/macros/generic/TeX-PS/cmyk-hax/cmyk-hax.tex
+-------
+Dost/epne polecenia: | Available options:
+(podano warto/sci domy/slne) | (default values given)
+\cropmarkdistance{3}
+ odst/ep linii obci/ecia od | cutting distance from the sheet
+ arkusza (0--5 mm) | body (0--5 mm)
+\cropmarksize{10}
+ rozmiar paser/ow (mm) | cropmarks size (in mm)
+\barsize{5}
+ rozmiar pask/ow barwnych (mm) | color bar size (in mm)
+\nocolorbars
+ tylko pasery i linie obci/ecia | cropmarks and registration marks only
+\onlycolorbars
+ tylko brudziki | color bars only
+\onlycolorsteps
+ tylko skale barwne | color steps only
+\mirror
+ lustro | mirror
+\labeloff
+ bez opisu na marginesie | turn off marginal label
+\xoffset{?mm}
+\yoffset{?mm}
+ przesuni/ecie uk/ladu | additional x an y offsets for
+ dla druku na drukarkach | printing on laser and ink printers
+ (nie stosowa/c dla na/swietle/n!) | (do not use it for typesetters!)
+-----
+Z plik/ow separate.pro i crops.pro | separate.pro and crops.pro header files
+mo/zna korzysta/c pomijaj/ac | can be used without poligraf.sty.
+poligraf.sty. Wystarczy wywo/la/c: | Just run:
+ dvips -h separate.pro -h crops.pro foo.dvi
+uzyskuj/ac efekty zgodne | and you can have the results, as
+z warto/sciami domy/slnymi, | default values from those files.
+zawartymi w wymienionych plikach. | To use effectivelly separate.pro,
+Efektywne u/zycie separate.pro | you need to copy it to the working
+wymaga skopiowania tego pliku do | directory and to change the value
+katalogu roboczego i odpowiedniego | of the variable color_sep
+ustawienia zmiennej color_sep |
+------
+Zawarto/s/c pakietu: | Contents of the package:
+README ten plik | this file
+poligraf.sty plik makr | the main macro file
+crops.pro pliki dla dvips | header files for dvips
+separate.pro |
+sample.tex przyk/lad Plain | example for Plain
+samplelx.tex przyk/lad LaTeX | example for LaTeX
+kol-cmyk.eps prosta grafika | simple graphics file
+
+------
+Wszelkie uwagi s/a mile widziane | Please report any comments
+przez autora. | and corrections to the author.
+
+Author: Janusz Marian Nowacki
+ 86-300 Grudziadz
+ ul. Sniadeckich 82/46
+ tel. +48 +56 46-218-37
+ Poland
+ e-mail: j.nowacki@gust.org.pl
+------
+(distribution prepared by Staszek Wawrykiewicz <StaW@gust.org.pl>)
+==========================================================================
+
diff --git a/macros/generic/TeX-PS/poligraf/crops.pro b/macros/generic/TeX-PS/poligraf/crops.pro
new file mode 100644
index 0000000000..79614ba8b1
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/crops.pro
@@ -0,0 +1,196 @@
+userdict begin
+% [PL] Domy/slne parametry | [E] Default parameters
+% Odst/ep linii obci/ecia od | Cutting distance from the sheet
+% arkusza (mm) | body (in mm)
+/cropmarkdistance 3 def % [0..5]
+% Rozmiar paser/ow (mm) | Cropmarks size (in mm)
+/cropmarksize 10 def
+% Rozmiar pask/ow barwnych (mm) | Color bar size (in mm)
+/barsize 5 def
+/colorbars 1 def
+% 0 - bez paskow barwnych | 0 - without color steps and bars
+% (np. do monta/zu) | (e.g. for plate composition)
+% 1 - komplet pask/ow barwnych | 1 - complete set of color steps and bars
+% 2 - tylko ze skalami kolor/ow | 2 - color steps only
+% 3 - tylko z brudzikami | 3 - color bars only
+%
+/mirror 0 def
+% 0 - normalny widok | 0 - normal view
+% 1 - lustrzane odbicie | 1 - mirror
+%
+% opis na marginesie | marginal label
+/marglabel 1 def % 0 -- off, 1 -- on
+% dodatkowe przesuni/ecie strony | additional page offset
+/xoffset 0 def
+/yoffset 0 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/h_size {hsize} def /v_size {vsize} def
+statusdict /setpageparams known {
+ statusdict /orisetpageparams statusdict /setpageparams get put
+ statusdict /setpageparams {4 2 roll CMdim 2 mul add x_offset add 4 1 roll
+ CMdim 2 mul add y_offset add 4 1 roll orisetpageparams} put
+}{
+ statusdict /setpage known {
+ statusdict /orisetpage statusdict /setpage get put
+ statusdict /setpage {3 1 roll CMdim 2 mul add x_offset add 3 1 roll
+ CMdim 2 mul add y_offset add 3 1 roll orisetpage} put
+ } if
+} ifelse
+%
+ /mm{25.4 div 72 mul}def
+ /bd{bind def}def
+ /_y{exch}def
+ /origin{0 0 moveto}def
+ /T{translate}def
+ /K{setcmykcolor}def
+ /box{_y dup 0 rlineto _y 0 _y rlineto neg 0 rlineto closepath}bd
+ /_distance {cropmarkdistance mm} def
+ /CMdim {cropmarksize mm} def
+ /boxdim {barsize mm} def
+ /dist{_distance 5 mm le{_distance}{5 mm}ifelse}def
+ /x_offset {xoffset mm} def
+ /y_offset {yoffset mm} def
+ /cmdim{dist neg CMdim add}def
+ /cmhalf{cmdim 2 div}def
+ /horver{h_size v_size le}def
+ /setsep 0 def
+%
+/rm {
+ 0 cmhalf moveto cmdim cmhalf lineto stroke
+ cmhalf 0 moveto cmhalf cmdim lineto stroke
+ cmhalf cmhalf cmdim 3 div 0 360 arc stroke
+ } bd
+/cm {
+ 0 CMdim moveto cmdim CMdim lineto stroke
+ CMdim 0 moveto CMdim cmdim lineto stroke
+ rm} bd
+/cmarks{ cm
+ h_size CMdim 2 mul add 0 T -1 1 scale cm
+ 0 v_size CMdim 2 mul add T 1 -1 scale cm
+ CMdim 2 mul h_size add 0 T -1 1 scale cm
+ } bd
+%
+/halfmarks{gsave
+ 0 v_size 2 div CMdim 2 div add dist 2 div add T rm
+ h_size cmdim add dist 2 mul add 0 T rm
+ h_size 2 div neg cmhalf sub dist sub
+ v_size 2 div cmdim 2 div add dist add T rm
+ 0 v_size neg cmdim sub dist 2 mul sub T rm
+ grestore}bd
+%
+/boxfill{boxdim boxdim box fill}bd
+/_step{boxfill horver{0 boxdim}{boxdim 0} ifelse T}bd
+/contour{origin
+ horver{boxdim boxdim 11 mul}{boxdim 11 mul boxdim} ifelse
+ box stroke}bd
+/csteps{
+ setsep 1 eq {
+ gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /cbar {0 setgray} bd
+ }{
+ setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 0 _y 0 _y K _step} for grestore
+ 1 0 0 0 K contour % /cbar {1 0 0 0 K} bd
+ }{ % /cbar {1 setgray} bd
+ } ifelse
+ } ifelse
+ } bd
+/cbar {setsep 1 eq {0 setgray}{setsep 0 eq {1 0 0 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/msteps{setsep 2 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /mbar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 _y 0 0 _y K _step} for grestore
+ 0 1 0 0 K contour %/mbar {0 1 0 0 K} bd
+ }{ % /mbar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/mbar {setsep 2 eq {0 setgray}{setsep 0 eq {0 1 0 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/ysteps{setsep 3 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /ybar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 _y 0 _y 0 K _step} for grestore
+ 0 0 1 0 K contour % /ybar {0 0 1 0 K} bd
+ }{ % /ybar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/ybar {setsep 3 eq {0 setgray}{setsep 0 eq {0 0 1 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/gsteps{setsep 4 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /gbar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /gbar {0 setgray} bd
+ }{ % /gbar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/gbar {setsep 4 eq {0 setgray}{setsep 0 eq {0 setgray}{1 setgray
+ } ifelse} ifelse} bd
+%
+/colorsteps{gsave
+ horver {CMdim boxdim sub dist sub CMdim boxdim add}
+ {CMdim boxdim add CMdim boxdim sub dist sub} ifelse T gsteps
+ horver {0 boxdim 12 mul}{boxdim 12 mul 0} ifelse T ysteps
+ grestore gsave
+ horver {CMdim boxdim sub dist sub v_size CMdim add boxdim 12 mul sub}
+ {h_size CMdim add boxdim 12 mul sub CMdim boxdim sub dist sub}
+ ifelse T csteps
+ horver {0 boxdim 12 mul neg}{boxdim 12 mul neg 0} ifelse T msteps
+ grestore} bd
+%
+/colorbar {gsave
+ horver {
+ h_size CMdim add dist add CMdim T
+ /begbar {boxdim 4 boxdim mul v_size CMdim 2 mul sub} bd
+ /endbar {for 0 boxdim T}bd /mt {0 exch moveto} bd
+ }{
+ CMdim boxdim add v_size CMdim add dist add T
+ /begbar {boxdim 4 boxdim mul h_size CMdim 2 mul sub} bd
+ /endbar {for boxdim 0 T} bd /mt {exch 0 moveto} bd
+ } ifelse
+ begbar {mt cbar boxfill} endbar begbar {mt mbar boxfill} endbar
+ begbar {mt ybar boxfill} endbar begbar {mt gbar boxfill} endbar
+ grestore} bd
+%
+/color_sep -1 def
+/label_s{
+ marglabel 1 eq {
+ /Helvetica findfont 8 scalefont setfont
+ (Page (PS/TeX): ) show page_num_ps 20 string cvs show
+ ( / ) show page_num_tex 20 string cvs show
+ color_sep 0 ge {
+ color_sep 0 eq {(, \ \ Plate CYAN ) show} if
+ color_sep 1 eq {(, \ \ Plate MAGENTA ) show} if
+ color_sep 2 eq {(, \ \ Plate YELLOW ) show} if
+ color_sep 3 eq {(, \ \ Plate BLACK ) show} if
+ }{(, \ \ COMPOSITE) show} ifelse
+ } if
+ } bd
+/page_number{gsave
+ horver {CMdim 2 mul 10 moveto label_s}
+ {10 CMdim 2 mul moveto 90 rotate label_s} ifelse
+ grestore} def
+%
+/_mirror {mirror 1 eq {-1 1 scale h_size neg 0 T} if}bd
+%
+/full {.1 setlinewidth
+ 1 colorbars eq {colorsteps colorbar}{
+ 2 colorbars eq {colorsteps}{
+ 3 colorbars eq {colorbar}{} ifelse
+ } ifelse
+ } ifelse
+ 1 1 1 1 setcmykcolor page_number cmarks halfmarks} bd
+%
+/save_page_num{pstack 2 copy 1 add
+ /page_num_ps exch def /page_num_tex exch def}def
+%
+[/bop-hook where {pop /bop-hook load aload pop} if
+{x_offset y_offset T
+ gsave save_page_num full grestore
+ CMdim CMdim T _mirror} aload pop] cvx
+/bop-hook exch def
+end
diff --git a/macros/generic/TeX-PS/poligraf/kol-cmyk.eps b/macros/generic/TeX-PS/poligraf/kol-cmyk.eps
new file mode 100644
index 0000000000..6feb55da4e
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/kol-cmyk.eps
@@ -0,0 +1,208 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: GhostScript rev. 550
+%%BoundingBox: 68.0315 463.846 280.63 677.481
+%%EndComments
+%%BeginProlog
+/GSexport 100 dict def GSexport begin
+/h {closepath} def
+/m {moveto} def
+/c {curveto} def
+/l {lineto} def
+/k {setcmykcolor} def
+/K {setcmykcolor} def
+/*u {/oper_kind -1 def} def
+/*U {*U*f *U*d *U*c} def
+/f {/oper_kind 0 def} def
+/*U*f {0 oper_kind eq {eofill} if} def
+/s {closepath /oper_kind 1 def} def
+/S {/oper_kind 1 def} def
+/*U*d {1 oper_kind eq {stroke} if} def
+/W {} def
+/n {/oper_kind 2 def} def
+/*U*c {2 oper_kind eq {eoclip newpath} if} def
+/w {setlinewidth} def
+/j {setlinejoin} def
+/J {setlinecap} def
+/M {setmiterlimit} def
+/d {setdash} def
+/setcmykcolor where {pop}
+ {/setcmykcolor {1 sub /mf exch def
+ 3 {mf add neg dup 0 lt {pop 0} if 3 1 roll} repeat
+ setrgbcolor} def} ifelse
+/q {gsave} def
+/Q {grestore} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+q
+*u
+1.0 1.0 1.0 1.0 k
+175.748 605.578 m
+187.806 605.578 199.175 602.539 209.133 597.189 c
+206.166 575.036 192.899 556.068 174.333 545.285 c
+156.181 555.826 143.091 574.189 139.742 595.705 c
+150.305 601.972 162.618 605.578 175.748 605.578 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+175.748 605.578 m
+187.806 605.578 199.175 602.539 209.133 597.189 c
+206.166 575.036 192.899 556.068 174.333 545.285 c
+156.181 555.826 143.091 574.189 139.742 595.705 c
+150.305 601.972 162.618 605.578 175.748 605.578 c
+s
+*U
+q
+*u
+1.0 0 1.0 0 k
+174.332 545.284 m
+163.899 539.224 151.791 535.749 138.898 535.749 c
+126.84 535.749 115.471 538.79 105.513 544.141 c
+108.45 566.064 121.476 584.867 139.742 595.705 c
+143.091 574.189 156.179 555.824 174.332 545.284 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+174.332 545.284 m
+163.899 539.224 151.791 535.749 138.898 535.749 c
+126.84 535.749 115.471 538.79 105.513 544.141 c
+108.45 566.064 121.476 584.867 139.742 595.705 c
+143.091 574.189 156.179 555.824 174.332 545.284 c
+s
+*U
+q
+*u
+1.0 1.0 0 0 k
+139.741 595.703 m
+139.187 599.261 138.898 602.906 138.898 606.615 c
+138.898 632.754 153.177 655.663 174.332 667.947 c
+195.486 655.663 209.764 632.754 209.764 606.615 c
+209.764 603.419 209.548 600.271 209.135 597.185 c
+199.177 602.536 187.807 605.578 175.748 605.578 c
+162.617 605.578 150.305 601.97 139.741 595.703 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+139.741 595.703 m
+139.187 599.261 138.898 602.906 138.898 606.615 c
+138.898 632.754 153.177 655.663 174.332 667.947 c
+195.486 655.663 209.764 632.754 209.764 606.615 c
+209.764 603.419 209.548 600.271 209.135 597.185 c
+199.177 602.536 187.807 605.578 175.748 605.578 c
+162.617 605.578 150.305 601.97 139.741 595.703 c
+s
+*U
+q
+*u
+0 1.0 1.0 0 k
+208.872 597.326 m
+228.218 587.036 242.282 568.041 245.771 545.624 c
+235.207 539.357 222.895 535.749 209.764 535.749 c
+196.872 535.749 184.768 539.226 174.334 545.285 c
+192.899 556.068 206.165 575.036 209.132 597.188 c
+209.046 597.234 208.959 597.28 208.872 597.326 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+208.872 597.326 m
+228.218 587.036 242.282 568.041 245.771 545.624 c
+235.207 539.357 222.895 535.749 209.764 535.749 c
+196.872 535.749 184.768 539.226 174.334 545.285 c
+192.899 556.068 206.165 575.036 209.132 597.188 c
+209.046 597.234 208.959 597.28 208.872 597.326 c
+s
+*U
+q
+*u
+0 0 1.0 0 k
+245.771 545.624 m
+246.325 542.066 246.614 538.421 246.614 534.712 c
+246.614 495.681 214.78 463.846 175.748 463.846 c
+136.716 463.846 104.882 495.681 104.882 534.712 c
+104.882 537.908 105.096 541.056 105.51 544.142 c
+115.469 538.79 126.838 535.749 138.898 535.749 c
+151.792 535.749 163.899 539.225 174.334 545.285 c
+184.768 539.226 196.872 535.749 209.764 535.749 c
+222.895 535.749 235.207 539.357 245.771 545.624 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+245.771 545.624 m
+246.325 542.066 246.614 538.421 246.614 534.712 c
+246.614 495.681 214.78 463.846 175.748 463.846 c
+136.716 463.846 104.882 495.681 104.882 534.712 c
+104.882 537.908 105.096 541.056 105.51 544.142 c
+115.469 538.79 126.838 535.749 138.898 535.749 c
+151.792 535.749 163.899 539.225 174.334 545.285 c
+184.768 539.226 196.872 535.749 209.764 535.749 c
+222.895 535.749 235.207 539.357 245.771 545.624 c
+s
+*U
+q
+*u
+1.0 0 0 0 k
+138.898 677.481 m
+151.79 677.481 163.896 674.006 174.33 667.947 c
+153.176 655.663 138.898 632.754 138.898 606.615 c
+138.898 602.906 139.186 599.262 139.74 595.704 c
+121.474 584.866 108.45 566.063 105.513 544.141 c
+83.2374 556.108 68.0315 579.641 68.0315 606.615 c
+68.0315 645.646 99.866 677.481 138.898 677.481 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+138.898 677.481 m
+151.79 677.481 163.896 674.006 174.33 667.947 c
+153.176 655.663 138.898 632.754 138.898 606.615 c
+138.898 602.906 139.186 599.262 139.74 595.704 c
+121.474 584.866 108.45 566.063 105.513 544.141 c
+83.2374 556.108 68.0315 579.641 68.0315 606.615 c
+68.0315 645.646 99.866 677.481 138.898 677.481 c
+s
+*U
+q
+*u
+0 1.0 0 0 k
+209.764 677.481 m
+248.796 677.481 280.63 645.646 280.63 606.615 c
+280.63 580.713 266.609 557.987 245.771 545.624 c
+242.297 567.941 228.345 586.867 209.134 597.189 c
+209.547 600.274 209.764 603.419 209.764 606.615 c
+209.764 632.754 195.486 655.663 174.332 667.947 c
+184.766 674.006 196.872 677.481 209.764 677.481 c
+f
+*U
+Q
+*u
+1.00006 w 0 j 0 J 2.61326 M
+0 0 0 1.0 K
+209.764 677.481 m
+248.796 677.481 280.63 645.646 280.63 606.615 c
+280.63 580.713 266.609 557.987 245.771 545.624 c
+242.297 567.941 228.345 586.867 209.134 597.189 c
+209.547 600.274 209.764 603.419 209.764 606.615 c
+209.764 632.754 195.486 655.663 174.332 667.947 c
+184.766 674.006 196.872 677.481 209.764 677.481 c
+s
+*U
+%%Trailer
+end
+showpage \ No newline at end of file
diff --git a/macros/generic/TeX-PS/poligraf/poligraf.sty b/macros/generic/TeX-PS/poligraf/poligraf.sty
new file mode 100644
index 0000000000..6b5b93df38
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/poligraf.sty
@@ -0,0 +1,101 @@
+%% poligraf.sty generic macros
+%% Copyright (C) 1996, 2001 Janusz Marian Nowacki. Public domain.
+%% [Polish:] | [English:]
+% ,,Mi/edzy \TeX-em a drukarni/a'' | ``Between \TeX{} and the printing house''
+% wersja 2.0, kwiecie/n 2001 r. | version 2.0, April 2001
+%---
+% Cel: obs/luga strony dokumentu | Purpose: preparation of pages for
+% dla cel/ow drukarskich, separacje | prepress, color separation, cropmarks,
+% barwne, pasery, ,,lustro''. | color and gray scale bars, mirror print.
+%---
+% Author: Janusz Marian Nowacki
+% 86-300 Grudzi/adz
+% ul. /Sniadeckich 82/46
+% tel. +48 +56 46-218-37
+% Poland
+% e-mail: j.nowacki@gust.org.pl
+%% Wsp/o/lpraca i komentarze: | Cooperation and comments:
+%% BOP s.c. & Staszek Wawrykiewicz
+%
+%------------------------------------------------------------------
+\catcode`\@=11
+%
+\newdimen\bigpoint \bigpoint 1pt
+\newdimen\Voffsetdim \Voffsetdim\voffset \advance\Voffsetdim by 1in
+\newcount\Voffset \Voffset\Voffsetdim \divide\Voffset by \bigpoint
+\newdimen\Hoffsetdim \Hoffsetdim\hoffset \advance\Hoffsetdim by 1in
+\newcount\Hoffset \Hoffset\Hoffsetdim \divide\Hoffset by \bigpoint
+\newcount\overprintblack \overprintblack=1
+%
+\def\cropmarkdistance #1{%
+ \special{!userdict begin /cropmarkdistance #1 def end}}
+\def\cropmarksize #1{%
+ \special{!userdict begin /cropmarksize #1 def end}}
+\def\barsize #1{%
+ \special{!userdict begin /barsize #1 def end}}
+\def\nocolorbars{%
+ \special{!userdict begin /colorbars 0 def end}}
+\def\onlycolorbars{%
+ \special{!userdict begin /colorbars 3 def end}}
+\def\onlycolorsteps{%
+ \special{!userdict begin /colorbars 2 def end}}
+\def\mirror{%
+ \special{!userdict begin /mirror 1 def end}}
+\def\xoffset #1{%
+ \special{!userdict begin /xoffset #1 def end}}
+\def\yoffset #1{%
+ \special{!userdict begin /yoffset #1 def end}}
+\def\labeloff{%
+ \special{!userdict begin /marglabel 0 def end}}
+%
+\def\CYAN {1 0 0 0}
+\def\MAGENTA{0 1 0 0}
+\def\YELLOW {0 0 1 0}
+\def\BLACK {0 0 0 1}
+\def\sepcolor{}
+\def\NoOverPrintBlack{\overprintblack=0}
+%
+\def\Separate #1{%
+ \input cmyk-hax
+ \edef\projectcolor{#1}%
+ \ifx\projectcolor\CYAN
+ \def\sepcolor{\projectCMYK\cyan}
+ \special{!userdict begin /color_sep 0 def /setsep 1 def end}
+ \ifnum\overprintblack>0 \delblacktrue \fi
+ \else \ifx\projectcolor\MAGENTA
+ \def\sepcolor{\projectCMYK\magenta}
+ \special{!userdict begin /color_sep 1 def /setsep 2 def end}
+ \ifnum\overprintblack>0 \delblacktrue \fi
+ \else \ifx\projectcolor\YELLOW
+ \def\sepcolor{\projectCMYK\yellow}
+ \special{!userdict begin /color_sep 2 def /setsep 3 def end}
+ \ifnum\overprintblack>0 \delblacktrue \fi
+ \else \ifx\projectcolor\BLACK
+ \def\sepcolor{\projectCMYK\black}
+ \special{!userdict begin /color_sep 3 def /setsep 4 def end}
+ \fi \fi \fi \fi
+}
+%
+\def\add@makeheadline#1{%
+ \let\oriheadline\makeheadline%
+ \def\makeheadline{#1\oriheadline}%
+ }
+\def\add@begindvi#1{%
+ \def\PoligrafHook{#1}%
+ \def\@begindvi{%
+ \PoligrafHook%
+ \unvbox \@begindvibox%
+ \gdef\@begindvi{\PoligrafHook}%
+ }}
+%
+\ifx\documentclass\@undefined
+ \add@makeheadline{\sepcolor} % for Plain
+\else
+ \add@begindvi{\sepcolor} % for LaTeX
+\fi
+%
+\catcode`\@=12
+%
+\special{header=crops.pro}
+%
+\endinput
diff --git a/macros/generic/TeX-PS/poligraf/sample.tex b/macros/generic/TeX-PS/poligraf/sample.tex
new file mode 100644
index 0000000000..975a434f71
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/sample.tex
@@ -0,0 +1,50 @@
+%% Plain TeX example of poligraf
+\special{papersize=190mm,277mm}
+%\special{papersize=180mm,267mm} % try together with \xoffset and \yoffset
+%% --
+\hsize5.5in \vsize8in
+\input epsf % standard dvips distribution
+\input colordvi % standard dvips distribution
+\input poligraf.sty
+%% -- change some options ------
+%\NoOverPrintBlack % default is overprint black
+%\Separate\CYAN % or
+%\Separate\MAGENTA % or
+%\Separate\YELLOW % or
+%\Separate\BLACK
+
+%\xoffset{5} % additional x an y offsets for printing on standard
+%\yoffset{5} % printer (do not use it for typesetters!)
+%\cropmarkdistance{5} % 1--5 (default 3mm)
+%\cropmarksize{10} % default 10mm
+%\barsize{6} % default 6mm
+%\nocolorbars % no color bars and scales
+%\onlycolorsteps % color steps only
+%\onlycolorbars % color bars only
+%\mirror % mirror switch
+%\labeloff % no page label
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\text{
+\Black{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\Red{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\Blue{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\Green{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}
+}
+
+\text
+\bigskip
+
+\centerline{\epsffile{kol-cmyk.eps}}
+\vskip -10mm
+\centerline{\bf THIS TEXT IS BLACK}
+
+\bye
diff --git a/macros/generic/TeX-PS/poligraf/samplelx.tex b/macros/generic/TeX-PS/poligraf/samplelx.tex
new file mode 100644
index 0000000000..38a25b51b0
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/samplelx.tex
@@ -0,0 +1,64 @@
+%% LaTeX example of poligraf.sty
+\documentclass{article}
+\usepackage[dvips]{color}
+\usepackage[dvips]{graphicx}
+\usepackage{poligraf}
+%% --
+\special{papersize=190mm,277mm}
+%\special{papersize=180mm,267mm}
+%% -- change some options ------
+%\NoOverPrintBlack % default overprint black
+%\Separate\CYAN % or
+%\Separate\MAGENTA % or
+%\Separate\YELLOW % or
+%\Separate\BLACK
+
+%\xoffset{5} % additional x an y offsets for printing on standard
+%\yoffset{5} % printer (do not use it for typesetters!)
+%\cropmarkdistance{3} % 1--5 (default 3mm)
+%\cropmarksize{10} % default 10mm
+%\barsize{6} % default 6mm
+%\nocolorbars % no color bars and scales
+%\onlycolorsteps % color steps only
+%\onlycolorbars % color bars only
+%\mirror % mirror switch
+%\labeloff % no page label
+
+\begin{document}
+
+\def\text{
+\textcolor{red}{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+{\color{blue} This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\textcolor{green}{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}\par
+\textcolor{black}{This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.
+This is example of test page. This is example of test page.}
+}
+
+% -----------------------------------------------------------
+\text
+
+\begin{figure}
+ \begin{center}
+ \includegraphics[width=0.5\hsize]{kol-cmyk}
+ \caption{Vector graphics. CMYK model}
+ \end{center}
+\end{figure}
+
+%% -----------------------------------------------------------
+%%% put here your favourite colour photo
+%%% then uncomment the following lines and test colour separations
+%\eject
+%\begin{figure}
+%\includegraphics[width=\hsize]{my-photo.eps}
+%\caption{My photo}
+%\end{figure}
+% -----------------------------------------------------------
+
+\end{document}
diff --git a/macros/generic/TeX-PS/poligraf/separate.pro b/macros/generic/TeX-PS/poligraf/separate.pro
new file mode 100644
index 0000000000..44eb9ce984
--- /dev/null
+++ b/macros/generic/TeX-PS/poligraf/separate.pro
@@ -0,0 +1,144 @@
+% [PL] Parametry separacji: [E] Separation parameters:
+% Odkomentuj TYLKO JEDNO Uncomment EXACTLY ONE
+% z poni/zszych ustawie/n: of the following settings:
+%%%%%
+% /color_sep 0 def % cyan
+% /color_sep 1 def % magenta
+% /color_sep 2 def % yellow
+/color_sep 3 def % black
+%%%%%
+/ScreenFrequency 150 def
+/Cangle 15 def
+/Mangle 75 def
+/Yangle 0 def
+/Kangle 45 def
+%
+userdict begin /ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor
+load def} ifelse /ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor
+load def} ifelse /ori_setgray where {pop} {/ori_setgray /setgray load
+def} ifelse /ori_colorimage where {pop} {/ori_colorimage /colorimage
+load def} ifelse /ori_image where {pop} {/ori_image /image load def}
+ifelse /ori_imagemask where {pop} {/ori_imagemask /imagemask load def}
+ifelse /ori_fill where {pop} {/ori_fill /fill load def} ifelse /ori_eofill
+where {pop} {/ori_eofill /eofill load def} ifelse /ori_stroke where
+{pop} {/ori_stroke /stroke load def} ifelse /ori_show where {pop} {/ori_show
+/show load def} ifelse /hax_setcmykcolor /ori_setcmykcolor load def
+/maybe_black { 4 copy 1 sub abs epsilon le exch 0 sub abs epsilon le
+and exch 0 sub abs epsilon le and exch 0 sub abs epsilon le and /if_delblack
+exch def } def /my_fill {userdict begin if_delblack {newpath} {ori_fill}
+ifelse end} def /my_eofill {userdict begin if_delblack {newpath} {ori_eofill}
+ifelse end} def /my_stroke {userdict begin if_delblack {newpath} {ori_stroke}
+ifelse end} def /my_show {userdict begin if_delblack {false charpath
+currentpoint newpath moveto} {ori_show} ifelse end} def /eofill {userdict
+begin my_eofill end} def /fill {userdict begin my_fill end} def /stroke
+{userdict begin my_stroke end} def /show {userdict begin my_show end}
+def /setcmykcolor {userdict begin /k_ exch def /y_ exch def /m_ exch
+def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor end} def /setgray {ori_setgray
+currentcmykcolor setcmykcolor} def /setrgbcolor {ori_setrgbcolor currentcmykcolor
+setcmykcolor} def /hax_image { dup type cvlit /dicttype eq { /ImageDict
+exch def currentcolorspace dup length 1 eq ImageDict /ImageType get
+1 eq and {0 get dup /DeviceRGB eq {/ncomp 3 def} if dup /DeviceGray
+eq {/ncomp 1 def} if /DeviceCMYK eq {/ncomp 4 def} if ImageDict /BitsPerComponent
+get 8 ne /ncomp 1 ne and {/ncomp 0 def} if } {pop /ncomp 0 def} ifelse
+} { false 1 makeimagedict } ifelse ncomp 0 eq {ImageDict ori_image}
+{hax_image_} ifelse } def /hax_colorimage { makeimagedict hax_image_
+} def /makeimagedict { dup /ncomp exch def dup 4 eq {/DeviceCMYK setcolorspace}
+if dup 3 eq {/DeviceRGB setcolorspace} if 1 eq {/DeviceGray setcolorspace}
+if /ImageDict 7 dict def ImageDict begin {/MultipleDataSources true
+def ncomp array astore} if /DataSource exch def /ImageMatrix exch def
+/BitsPerComponent exch def /Height exch def /Width exch def /Decode
+[ncomp {0 1} repeat] def /ImageType 1 def end } def /data_str 65532
+string def /data_str_ 8192 string def /merge_multi4 { ImageDict /DataSource
+get aload pop dup type cvlit /filetype eq { /fdatsrck exch def /fdatsrcy
+exch def /fdatsrcm exch def /fdatsrcc exch def /datasrck {fdatsrck
+data_str_ readstring pop} def /datasrcy {fdatsrcy data_str_ readstring
+pop} def /datasrcm {fdatsrcm data_str_ readstring pop} def /datasrcc
+{fdatsrcc data_str_ readstring pop} def } { /datasrck exch def /datasrcy
+exch def /datasrcm exch def /datasrcc exch def } ifelse ImageDict /DataSource
+{ data_str 0 datasrcc {3 copy put pop 4 add} forall pop 1 datasrcm
+{3 copy put pop 4 add} forall pop 2 datasrcy {3 copy put pop 4 add}
+forall pop 3 datasrck {3 copy put pop 4 add} forall 3 sub 0 exch getinterval
+} put } def /merge_multi3 { ImageDict /DataSource get aload pop dup
+type cvlit /filetype eq { /fdatsrcb exch def /fdatsrcg exch def /fdatsrcr
+exch def /datasrcb {fdatsrcb data_str_ readstring pop} def /datasrcg
+{fdatsrcg data_str_ readstring pop} def /datasrcr {fdatsrcr data_str_
+readstring pop} def } { /datasrcb exch def /datasrcg exch def /datasrcr
+exch def } ifelse ImageDict /DataSource { data_str 0 datasrcr {3 copy
+put pop 3 add} forall pop 1 datasrcg {3 copy put pop 3 add} forall
+pop 2 datasrcb {3 copy put pop 3 add} forall 2 sub 0 exch getinterval
+} put } def /i_Str 3 string def /O_Str 4 string def /UCR {0.5 mul}
+def /BG {0.5 mul} def /min {1 index 1 index le {pop} {exch pop} ifelse}
+def /max {1 index 1 index ge {pop} {exch pop} ifelse} def /RGBtoCMYK
+{dup 0 get R_scale mul R_shift add /c_i exch def dup 1 get G_scale
+mul G_shift add /m_i exch def 2 get B_scale mul B_shift add /y_i exch
+def /k_i c_i m_i y_i min min def O_Str dup 0 255 0 c_i k_i UCR sub
+cvi max min put dup 1 255 0 m_i k_i UCR sub cvi max min put dup 2 255
+0 y_i k_i UCR sub cvi max min put dup 3 255 0 k_i BG cvi max min put
+} def /RGBtoCMYKfilter { ImageDict /Decode get aload pop 2 copy sub
+/B_scale exch def pop 255 mul 255 exch sub /B_shift exch def 2 copy
+sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def 2
+copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+/rtc_file ImageDict /DataSource get def ImageDict /DataSource {rtc_file
+i_Str readstring {RGBtoCMYK} if} 0 () /SubFileDecode filter put /DeviceCMYK
+setcolorspace /ncomp 4 def ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def /sep_str 8192 string def /SEP_CMYK { 0 hax_sep 4 3 index length
+1 sub { 2 index exch get 3 copy put pop 1 add } for dup 0 ne {0 exch
+getinterval}{pop pop ()} ifelse } def /SEPfilters { ncomp 4 eq { hax_sep
+3 le { /sepproc /SEP_CMYK load def ImageDict begin /Decode [ Decode
+hax_sep 2 mul 1 add get Decode hax_sep 2 mul get ] def end } { /sepproc
+{dup length 4 idiv 0 exch getinterval} def } ifelse /sep_file ImageDict
+/DataSource get def ImageDict /DataSource {sep_file sep_str readstring
+pop sepproc} 0 () /SubFileDecode filter put /DeviceGray setcolorspace
+} {hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if } ifelse hax_sep
+4 eq {ImageDict /Decode [ 1 1 ] put} if hax_sep 5 eq {ImageDict /Decode
+[ 0 0 ] put} if } def /change_str 12288 string def /CHANGEfilter {
+/change_file ImageDict /DataSource get def ImageDict /DataSource {
+change_file change_str readstring pop 0 ncomp 2 index length ncomp
+sub { 1 index exch 2 copy ncomp getinterval changebits putinterval
+} for } 0 () /SubFileDecode filter put } def /hax_image_ { ImageDict
+/MultipleDataSources known { ImageDict /MultipleDataSources get { ImageDict
+/MultipleDataSources false put ImageDict /DataSource get length dup
+4 eq {merge_multi4} if dup 3 eq {merge_multi3} if 1 eq {ImageDict begin
+/DataSource DataSource aload pop def end} if } if } if ImageDict begin
+/DataSource dup load Width BitsPerComponent mul 7 add 8 idiv Height
+ncomp mul mul () /SubFileDecode filter def end to_change_bitmap {CHANGEfilter}
+if ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if ncomp 3 ne
+to_sep_bitmap and {SEPfilters} if ImageDict ori_image } def /zero_data_str
+65532 string def /hax_imagemask { if_delblack { dup type cvlit /dicttype
+eq { /ImageDict exch def } { /ImageDict 7 dict def ImageDict begin
+/DataSource exch def /ImageMatrix exch def /Decode exch {[1 0]} {[0
+1]} ifelse def /Height exch def /Width exch def /BitsPerComponent 1
+def /ImageType 1 def end } ifelse ImageDict begin /DataSource load
+Width 7 add 8 idiv Height mul () /SubFileDecode filter end /mask_file
+exch def ImageDict /DataSource { zero_data_str 0 mask_file data_str
+readstring pop length getinterval } 0 () /SubFileDecode filter put
+ImageDict /Decode [1 0] put ImageDict ori_imagemask } {ori_imagemask}
+ifelse } def /epsilon 0.005 def /if_delblack false def /to_change_bitmap
+false def /to_convert_bitmap false def /to_sep_bitmap false def
+currentcmykcolor setcmykcolor end
+%
+ /dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def 150 0 {dot_spot}
+setscreen
+%
+userdict begin
+ color_sep 0 eq
+ {/hax_setcmykcolor {maybe_black pop pop pop 1 exch sub ori_setgray} def
+ ScreenFrequency Cangle {dot_spot} setscreen}
+ {color_sep 1 eq
+ {/hax_setcmykcolor {maybe_black pop pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Mangle {dot_spot} setscreen}
+ {color_sep 2 eq
+ {/hax_setcmykcolor {maybe_black pop exch pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Yangle {dot_spot} setscreen}
+ {/hax_setcmykcolor {exch pop exch pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Kangle {dot_spot} setscreen}
+ ifelse
+ } ifelse
+ } ifelse
+end
+%
+userdict begin /image /hax_image load def /colorimage /hax_colorimage
+ load def /imagemask /hax_imagemask load def
+ /to_sep_bitmap true def /to_convert_bitmap true def
+end
+currentcmykcolor setcmykcolor
diff --git a/macros/generic/TeX-PS/trans.tex b/macros/generic/TeX-PS/trans.tex
new file mode 100644
index 0000000000..a3869832f6
--- /dev/null
+++ b/macros/generic/TeX-PS/trans.tex
@@ -0,0 +1,653 @@
+% ---------------------------------------------------------------------------
+% TeX macros implementing a standard set of PostScript transformations
+% made in BOP (1993--2001), Gda\'nsk, Poland -- public domain software
+% authors: Bogus\l{}aw Jackowski, Piotr Pianowski, Piotr Strzelczyk
+% e-mail contact: bop@bop.com.pl
+% ---------------------------------------------------------------------------
+% S Y N O P S I S
+%
+% In the sequel, `box' means \hbox, \vbox, \box, or \copy, `dimen' means
+% a sequence of dimens to be summed up; all macros mentioned below expand
+% to \hbox{...}, they can therefore be used wherever \hbox can be.
+%
+% 1)
+% x_scale and y_scale are given in percents (>0)
+% \zscale changes uniformly x_size and y_size (x_scale=y_scale=scale)
+% \xscale changes only x_size (y_scale=100)
+% \yscale changes only y_size (x_scale=100)
+%
+% \zscale{scale} followed by a box
+% \xyscale{x_scale}{y_scale} followed by a box
+% \yxscale{y_scale}{x_scale} followed by a box
+% \xscale{x_scale} followed by a box
+% \yscale{y_scale} followed by a box
+%
+% 2)
+% \xyscaleto resizes a box uniformly such that the resulting wd=dimen
+% \yxscaleto resizes a box uniformly such that the resulting ht=dimen
+% \xscaleto resizes a box horizontally such that the resulting wd=dimen
+% \yscaleto resizes a box verically such that the resulting ht=dimen
+%
+% \xyscaleto{dimen} followed by a box
+% \yxscaleto{dimen} followed by a box
+% \xscaleto{dimen} followed by a box
+% \yscaleto{dimen} followed by a box
+%
+% 3)
+% \revolve rotates anticlockwise the box (either \hbox or \vbox
+% following the command) by 90 degree; for the resulting box
+% width=height+depth of the original box, height=width
+% of the original box, and the reference point is the left top corner
+% of the original box; this means that revolving a box four times
+% yields the original box if and only if its depth is zero;
+% \revolvedir- is equivalent to \revolve, \revolvedir+ rotates
+% the box clockwise
+%
+% \revolve followed by a box
+% \revolvedir+ followed by a box
+% \revolvedir- followed by a box
+% \revolveleft followed by a box (equivalent to \revolvedir-)
+% \revolveright followed by a box (equivalent to \revolvedir+)
+% \revolvepi followed by a box (equivalent to \xflip\yflip
+% but not to \revolve\revolve)
+% \rotatepi followed by a box (equivalent to \revolvepi;
+% cf. also plain METAFONT rotatedaround and rotatedabout macros)
+% 4)
+% \rotate rotates a box by an arbitrary angle, clockwise for angle>0,
+% width=height=depth=0pt for the resulting box
+%
+% \rotate{angle} followed by a box
+%
+% \rotatebb rotates a box by an arbitrary angle, clockwise for angle>0;
+% the result is placed in a box having the dimensions of the resulting
+% bounding box, protrusion to the left is compensated by appropriate
+% shifting (see the macro \put_into_bb)
+%
+% \rotatebb{angle} followed by a box
+%
+% 5)
+% \xflip and \yflip flip the box horizontally and vertically,
+% respectively, i.e., with respect to the vertical and horizontal
+% axis of the box, without changing the dimensions of the \box
+%
+% \xflip followed by a box
+% \yflip followed by a box
+%
+% 6)
+% \slant slopes a box by an angle alpha such that tan(alpha)=slant,
+% without changing dimensions of the \box;
+%
+% \slant{slant} followed a box
+%
+% (negative argument value means slanting to the left)
+%
+% \slantbb slopes a box by an angle alpha such that tan(alpha)=slant,
+% the result is placed in a box having the dimensions of the resulting
+% bounding box, protrusion to the left is compensated by appropriate
+% shifting (see the macro \put_into_bb)
+%
+% \slantbb{slant} followed a box
+%
+% 7)
+% \clipbox clips the contents of a box that follows the command;
+% the macro expects three dimen parameters: the width, the height
+% and the depth of the resulting box
+%
+% \clipbox{width}{height}{depth} followed a box
+%
+% Any parameter can be empty; in such a case, the respective dimension
+% of the original box is used
+% ---------------------------------------------------------------------------
+% HISTORY:
+% 18 VIII 1993 ver. 0.1
+% * first release
+% 30--31 VIII 1993 ver. 0.2
+% * third parameter eliminated from \scale (via \afterassignment
+% and \aftergroup hackery)
+% * added \zscale, \xyscale, \yxscale, \xscale, and \yscale
+% with scaling given in percents
+% * added \scaleto, \xyscaleto, \yxscaleto, \xscaleto, and \yscaleto
+% 3 IX 1993 ver. 0.21
+% * \the_scale renamed to \lastscale and made global, thus it became
+% available to a user
+% 8 IX 1993 ver. 0.22
+% * all transformations return \hbox, because of currentpoint
+% positioning
+% * the old version of \scale is become undefined
+% * \slant and \rotate fit the new convention of parameter's
+% hackery -- they are assumed to be followed by an \hbox
+% or a \vbox
+% 6 XII 1993 ver. 0.23
+% * \revolve added
+% * \rotate with \vbox patched
+% 10 II 1994 ver. 0.24
+% * \revolvedir+, \revolvedir-, \xflip, and \yflip added
+% 20 III 2000 ver. 0.5 (pre-release)
+% * total reconstruction:
+% -- all macros expand to \hbox, so that it is possible to
+% superpose them, e.g., \xscale{200}\yscale{50}\hbox{...};
+% one must remeber, however, that \rotate yields a box having
+% null dimensions, so an attempt to scale the result
+% to a given dimen will produce erroneous PostScript code
+% -- the possibility of changing \ht and \dp of a \vbox abolished;
+% such an operation yields hardly intuitive results; try, e.g.:
+% \hrule width\hsize
+% \hbox{\setbox0\hbox{\vrule height1cmwidth1cm}\ht0 0mm \box0}
+% \kern20mm
+% \hrule width\hsize
+% \hbox{\setbox0\vbox{\hrule height1cmwidth1cm}\ht0 0mm \box0}
+% -- the box expected by all macros can be a TeX box expression:
+% \hbox, \vbox, \box, and \copy
+% -- scaling height or width to a given dimension yields exact value
+% of the height or width, respectively (or both); this change is
+% backward incompatible (but reasonable, one should think)
+% -- all transformations store information about the position of the
+% lower left corner and the upper right corner of the resulting
+% bounding box (with respect to the base point of the transformed
+% box) in four globally defined macros:
+% \transllx, \translly, \transurx, \transury
+% (a piece of funny code for vector rotation was added)
+% -- \rotatebb and \slantbb added
+% 25 III 2000 ver. 0.51
+% * fraction multiplication improved (speedup in trigonometric
+% calculations ca 30%)
+% * trigonometry calculations are performed in a group (otherwise using
+% them within another \loop ... \repeat would be inconvenient);
+% the result is a pair of globally defined macros (instead of dimen
+% registers); they expand to a series of digits (i.e., they contain
+% a count representation of the resulting dimen)
+% * \unhbox (introduced in order to reduce the level of box nesting)
+% should be used only in \rotatebb
+% * internal macro naming changed
+% 27 III 2000 ver. 0.52
+% * a dimen parameter can be a sequence of dimens to be summed up
+% * \clipbox added
+% 7--10 X 2000 ver. 0.53
+% * a bug in \slant[bb] fixed: \ht and \dp were interchanged due to
+% a fallacious interpretation of a slant sign (recall that in dvips
+% PostScript, unlike in METAFONT, `-' denotes slanting to the right,
+% `+' -- to the left, because the y-axis is directed downwards);
+% actually, the problem is much more complex: relying (unconsciously)
+% on dvips coordinates means, in this case, that for non-square pixels
+% both rotate and slant will not work -- need to be fixed!
+% 13 XI 2000 ver. 0.54
+% * @ is a letter during reading trans macros (AMSTeX uses active @)
+% * local macro \undtranscode renamed to \transundcode
+% 9 VI 2001 ver 0.55
+% * ``mnemonic'' macros added: \revolveleft, \revolveright, \revolvepi
+% and \rotatepi
+% ---------------------------------------------------------------------------
+\def\transspecial#1{\special{ps:#1}}% driver-oriented; default is dvips
+% ---
+\edef\transundcode{\the\catcode`\_}\catcode`\_11
+\edef\transatcode{\the\catcode`\@}\catcode`\@11
+% \z@ (0pt) and \p@ (1pt) are borrowed from plain
+% ---
+% a pretty general macro
+\def\sumto#1{\def\sum_to_what{#1}\sum_to_what=\z@\relax \sumto_}
+\def\sumto_{\futurelet\sum_tok\sumto__}
+\def\sumto__{\ifx\sum_tok\relax\else\expandafter\sumto___\fi}
+\def\sumto___{\afterassignment\sumto_\advance\sum_to_what}
+% ---
+\newbox\tmp_box % temporary box register
+\newdimen\tmp_dim % temporary dimen registers
+\newdimen\tmp_dim_a
+\newdimen\tmp_dim_b
+\newdimen\tmp_dim_c
+\newdimen\tmp_dim_d
+\newcount\tmp_count_a % temporary count registers
+\newcount\tmp_count_b
+\newcount\tmp_count_c
+\newif\ifput_into_bb
+% ---
+\def\jump_setbox{\ifvoid\tmp_box % every box is initially void
+ \aftergroup\after_setbox \else \after_setbox \fi}% a general trick
+% ---
+\def\set_std_bb{%
+ \xdef\transllx{\the\z@}%
+ \xdef\translly{\ifdim\dp\tmp_box>\z@ -\fi\the\dp\tmp_box}%
+ \xdef\transurx{\the\wd\tmp_box}%
+ \xdef\transury{\the\ht\tmp_box}%
+}
+\def\put_into_bb#1{% #1 = operation: \unhbox for rotation, \box for slanting
+ \setbox\tmp_box\hbox{\kern-\transllx\rlap{#1\tmp_box}\kern\transurx}%
+ \ht\tmp_box\transury \dp\tmp_box-\translly \relax
+}
+% ---
+\def\perc_scale#1#2{% #1 -- xscale, #2 -- yscale, in percents,
+ % to be followed by an \hbox or a \vbox
+ \def\after_setbox{%
+ \setbox\tmp_box\hbox{%
+ \transspecial{gsave
+ currentpoint #2 100 div div exch #1 100 div div exch
+ currentpoint neg #2 100 div mul exch neg #1 100 div mul exch
+ translate #1 100 div #2 100 div scale translate}%
+ \box\tmp_box \transspecial{grestore}}%
+ \ifdim#1\p@=100\p@ \else % special treatment of special case (100%)
+ \tmp_dim\wd\tmp_box
+ \advance\tmp_dim50sp \divide\tmp_dim100 % rounding rather than floor
+ \wd\tmp_box#1\tmp_dim
+ \fi
+ \ifdim#2\p@=100\p@ \else % ditto
+ \tmp_dim\ht\tmp_box
+ \advance\tmp_dim50sp \divide\tmp_dim100 % ditto
+ \ht\tmp_box#2\tmp_dim
+ \tmp_dim\dp\tmp_box
+ \advance\tmp_dim50sp \divide\tmp_dim100 % ditto
+ \dp\tmp_box#2\tmp_dim
+ \fi
+ \set_std_bb
+ \box\tmp_box\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\xyscale#1#2{\hbox\bgroup\perc_scale{#1}{#2}}
+\def\zscale#1{\xyscale{#1}{#1}}
+\def\yxscale#1#2{\xyscale{#2}{#1}}
+\def\xscale#1{\xyscale{#1}{100}}
+\def\yscale#1{\xyscale{100}{#1}}
+% ---
+{\catcode`\p12 \catcode`\t12 \gdef\PT_{pt}}
+\def\hull_num{\expandafter\hull_num_}
+\expandafter\def\expandafter\hull_num_\expandafter#\expandafter1\PT_{#1}
+% ---
+\def\find_scale#1#2{% #1 -- size after rescaling, #2 -- \wd or \ht
+% Finds a scale (\lastscale macro) such that the box following the macro
+% call would have the respective dimen (i.e., #2) equal to #1 after rescaling
+% NOTE: it is assumed that prior to calling \find_scale a macro
+% \extra_complete is defined
+ \def\after_setbox{%
+ \resize\tmp_dim{100\p@}{#1}{#2\tmp_box}%
+ \xdef\lastscale{\hull_num\the\tmp_dim}\extra_complete}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}
+% ---
+\def\scaleto#1#2#3#4{% #1 -- size of dimen #2 (\wd or \ht) after scaling
+ % #3 -- actual x-size, #4 -- actual y-size
+ \hbox\bgroup % `initial' hbox
+ \sumto\tmp_dim#1\relax % freeze the argument; must not be empty
+ \setbox\tmp_box\hbox\bgroup % one more setbox in order to control
+ % the specified dimen
+ \def\extra_complete{%
+ \perc_scale{#3}{#4}\box\tmp_box % finish setbox above
+ #2\tmp_box=\tmp_dim % force the exactness of the specified dimension
+ \set_std_bb
+ \box\tmp_box
+ \egroup % close `initial' hbox
+ }%
+ \find_scale{\tmp_dim}#2}
+%
+\def\xyscaleto#1{\scaleto{#1}\wd\lastscale\lastscale}
+\def\yxscaleto#1{\scaleto{#1}\ht\lastscale\lastscale}
+\def\xscaleto#1{\scaleto{#1}\wd\lastscale{100}}
+\def\yscaleto#1{\scaleto{#1}\ht{100}\lastscale}
+% ---
+\def\slant{\hbox\bgroup \put_into_bbfalse \slant_}
+\def\slantbb{\hbox\bgroup \put_into_bbtrue \slant_}
+\def\slant_#1{% #1 (slant) = tan(alpha), where alpha is the slant angle,
+ % to be followed by a box
+ \def\after_setbox{%
+ \transspecial{gsave 0 currentpoint neg exch pop 0 currentpoint exch pop
+ translate [1 0 #1 1 0 0] concat translate}%
+ % set bounding box
+ \dim_x\wd\tmp_box
+ \ifdim#1\p@>\z@ \dim_t-#1\ht\tmp_box \advance\dim_x#1\dp\tmp_box
+ \else \dim_t#1\dp\tmp_box \advance\dim_x-#1\ht\tmp_box
+ \fi
+ \xdef\transllx{\the\dim_t}%
+ \xdef\translly{\ifdim\dp\tmp_box>\z@ -\fi\the\dp\tmp_box}%
+ \xdef\transurx{\the\dim_x}%
+ \xdef\transury{\the\ht\tmp_box}%
+ \ifput_into_bb \put_into_bb\box \fi
+ \box\tmp_box \transspecial{grestore}\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\update_bb#1#2#3{% used in \rotate
+ \trigcompute{-#1}{#2}{#3}% clockwise vs anti-clockwise
+ \ifdim\transllx>\trigxresult sp\xdef\transllx{\trigxresult sp}\fi
+ \ifdim\translly>\trigyresult sp\xdef\translly{\trigyresult sp}\fi
+ \ifdim\transurx<\trigxresult sp\xdef\transurx{\trigxresult sp}\fi
+ \ifdim\transury<\trigyresult sp\xdef\transury{\trigyresult sp}\fi
+}
+\def\rotate{\hbox\bgroup \put_into_bbfalse \rotate_}
+\def\rotatebb{\hbox\bgroup \put_into_bbtrue \rotate_}
+\def\rotate_#1{% #1 -- angle,
+ % to be followed by a box
+ \def\after_setbox{%
+ \setbox\tmp_box\hbox{% otherwise does not work with \vbox
+ \transspecial{gsave currentpoint currentpoint translate
+ #1 rotate neg exch neg exch translate}%
+ \box\tmp_box \transspecial{grestore}}%
+ % set bounding box
+ \xdef\transllx{\the\z@}\xdef\translly{\the\z@}%
+ \xdef\transurx{\the\z@}\xdef\transury{\the\z@}%
+ \update_bb{#1}{\z@}{\ht\tmp_box}%
+ \update_bb{#1}{\z@}{-\dp\tmp_box}%
+ \update_bb{#1}{\wd\tmp_box}{\ht\tmp_box}%
+ \update_bb{#1}{\wd\tmp_box}{-\dp\tmp_box}%
+ %
+ \wd\tmp_box\z@ \ht\tmp_box\z@ \dp\tmp_box\z@
+ \ifput_into_bb \put_into_bb\unhbox \fi
+ \box\tmp_box\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\plus_{+}
+\def\minus_{-}
+\def\revolvedir#1{% to be followed by a box
+ \hbox\bgroup
+% check parameter:
+ \def\param_{#1}%
+ \ifx\param_\plus_ \else \ifx\param_\minus_
+ \else
+ \errhelp{I would rather suggest to stop immediately.}%
+ \errmessage{Argument to \noexpand\revolvedir should be either + or -}%
+ \fi\fi
+ \def\after_setbox{%
+ \tmp_dim_a\wd\tmp_box
+% prepare to revolving:
+ \setbox\tmp_box\hbox{%
+ \ifx\param_\plus_\kern-\tmp_dim_a\fi
+ \box\tmp_box
+ \ifx\param_\plus_\kern\tmp_dim_a\fi}%
+% compute dimensions of the box to be revolved:
+ \tmp_dim_a\ht\tmp_box \advance\tmp_dim_a\dp\tmp_box
+ \tmp_dim_b\ht\tmp_box \tmp_dim_c\dp\tmp_box
+ \dp\tmp_box\z@ \ht\tmp_box\wd\tmp_box \wd\tmp_box\tmp_dim_a
+% revolve:
+ \kern \ifx\param_\plus_ \tmp_dim_c \else \tmp_dim_b \fi
+ \transspecial{gsave currentpoint currentpoint translate
+ #190 rotate neg exch neg exch translate}%
+ \set_std_bb
+ \box\tmp_box
+ \transspecial{grestore}%
+ \kern -\ifx\param_\plus_ \tmp_dim_c \else \tmp_dim_b \fi
+ \egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+\def\revolveleft{\revolvedir-}
+\def\revolveright{\revolvedir+}
+\def\revolvepi{\xflip\yflip}
+\let\revolve\revolveleft
+\let\rotatepi\revolvepi
+% ---
+\def\xflip{% to be followed by a box
+ \hbox\bgroup
+ \def\after_setbox{%
+ \tmp_dim_a.5\wd\tmp_box
+% prepare to flipping:
+ \setbox\tmp_box
+ \hbox{\kern-\tmp_dim_a \box\tmp_box \kern\tmp_dim_a}%
+% flip:
+ \kern\tmp_dim_a
+ \transspecial{gsave currentpoint currentpoint translate
+ [-1 0 0 1 0 0] concat neg exch neg exch translate}%
+ \set_std_bb
+ \box\tmp_box
+ \transspecial{grestore}%
+ \kern-\tmp_dim_a
+ \egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+\def\yflip{% to be followed by a box
+ \hbox\bgroup
+ \def\after_setbox{%
+ \tmp_dim_a\ht\tmp_box \tmp_dim_b\dp\tmp_box
+ \tmp_dim_c\tmp_dim_a \advance\tmp_dim_c\tmp_dim_b
+ \tmp_dim_c.5\tmp_dim_c
+% prepare to flipping:
+ \setbox\tmp_box\vbox{%
+ \kern\tmp_dim_c\box\tmp_box\kern-\tmp_dim_c}%
+% flip:
+ \advance\tmp_dim_c-\tmp_dim_b
+ \setbox\tmp_box\hbox{%
+ \transspecial{gsave currentpoint currentpoint translate
+ [1 0 0 -1 0 0] concat neg exch neg exch translate}%
+ \lower\tmp_dim_c\box\tmp_box
+ \transspecial{grestore}}%
+% restore dimensions of the flipped box:
+ \ht\tmp_box\tmp_dim_a \dp\tmp_box\tmp_dim_b
+ \set_std_bb
+ \box\tmp_box
+ \egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}%
+% ---
+% save TeX registers:
+\let\clip_wd\tmp_dim_a
+\let\clip_ht\tmp_dim_b
+\let\clip_dp\tmp_dim_c
+% ---
+\def\tracingclipcmyk{1 0 0 0}
+\def\clip_fix_pos#1{\transspecial{%
+ currentpoint /clip_#1_y exch def /clip_#1_x exch def%
+}}
+\def\clip_use_pos#1{clip_#1_x clip_#1_y}
+\def\clip_delta#1#2{#1 #2 3 -1 roll exch sub 3 1 roll sub exch}
+%
+\def\do_clip{\transspecial{%
+ newpath
+ \clip_use_pos{LL} moveto
+ \clip_delta{\clip_use_pos{UR}}{\clip_use_pos{UL}} rlineto
+ \clip_delta{\clip_use_pos{UR}}{\clip_use_pos{LR}} rlineto
+ \clip_delta{\clip_use_pos{LL}}{\clip_use_pos{LR}} rlineto
+ closepath
+ \ifx\tracingclip\unknown \else
+ gsave \tracingclipcmyk\space setcmykcolor fill grestore
+ \fi
+ clip newpath%
+}}
+%
+\def\clip_use_dim#1{% #1 = wd, ht, or dp
+ \ifdim\csname clip_#1\endcsname=\maxdimen \csname#1\endcsname\tmp_box
+ \else \csname clip_#1\endcsname\fi
+}
+%
+\def\clip_fix_dim#1#2{%
+ \edef\clip_use_dim_param{#2}%
+ \ifx\clip_use_dim_param\empty #1\maxdimen\else
+ \ifx\clip_use_dim_param\space #1\maxdimen\else \sumto#1#2\relax \fi\fi
+}
+%
+\def\clipbox#1#2#3{% desired height, width and depth to be followed by a box
+ \hbox\bgroup
+ \clip_fix_dim\clip_wd{#1}%
+ \clip_fix_dim\clip_ht{#2}%
+ \clip_fix_dim\clip_dp{#3}%
+ \clipbox_
+}
+\def\clipbox_{%
+ \def\after_setbox{%
+ \setbox\tmp_box\hbox{\box\tmp_box}%
+ \clip_wd\clip_use_dim{wd}% freeze dimen
+ \clip_ht\clip_use_dim{ht}% ditto
+ \clip_dp\clip_use_dim{dp}% ditto
+ \transspecial{gsave}%
+ \rlap{%
+ \lower \clip_dp \vbox{%
+ \hbox to\clip_wd{\clip_fix_pos{UL}\hss\clip_fix_pos{UR}}
+ \kern\clip_ht \kern\clip_dp \nointerlineskip
+ \hbox to\clip_wd{\clip_fix_pos{LL}\hss\clip_fix_pos{LR}}
+ \do_clip
+ }%
+ }%
+ \wd\tmp_box=\clip_wd \ht\tmp_box=\clip_ht \dp\tmp_box=\clip_dp
+ \set_std_bb \box\tmp_box \transspecial{grestore}\egroup}%
+ \afterassignment\jump_setbox\setbox\tmp_box =
+}
+% ---------------------------------------------------------------------------
+% ``floating point arithmetic'' (excerpted from T. Rokicki):
+% r y
+%
+% ^
+% |
+% |
+% |
+% |
+% |
+% 0--------------> t x
+%
+% save TeX registers:
+\let\dim_x\tmp_dim_a % horizontal size after scaling
+\let\dim_y\tmp_dim_b % vertical size after scaling
+\let\dim_t\tmp_dim_c % horizontal size before scaling
+\let\dim_r\tmp_dim_d % vertical size before scaling
+%\tmp_dim % register for arithmetic manipulation (already declared)
+% ---
+\def\resize
+ % dimen registers:
+ #1% y make y such that y/r=x/t
+ #2% r
+ #3% x
+ #4% t
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+ {%
+ % save parameters to the internal variables:
+ \dim_r#2\relax \dim_x#3\relax \dim_t#4\relax
+ \tmp_dim=\dim_r \divide\tmp_dim\dim_t
+ \dim_y=\dim_x \multiply\dim_y\tmp_dim
+ \multiply\tmp_dim\dim_t \advance\dim_r-\tmp_dim
+ \tmp_dim=\dim_x
+ \loop \advance\dim_r\dim_r \divide\tmp_dim 2
+ \ifnum\tmp_dim>0
+ \ifnum\dim_r<\dim_t\else
+ \advance\dim_r-\dim_t \advance\dim_y\tmp_dim \fi
+ \repeat
+ % assign result:
+ #1\dim_y\relax
+}
+% ---------------------------------------------------------------------------
+% ``fixed point arithmetic'' -- fractions and trigometry, inspired by mf.web:
+%
+% save TeX registers:
+\let\fracint\tmp_dim
+\let\fracfrac\tmp_count_a
+\let\fracprod\tmp_count_b
+\def\fracpowlimit{30}%
+\def\fracone{1073741824}% = 2^\fracpowlimit
+% ---
+\def\fracproduct#1#2{% #1 = fraction * 2^\fracpowlimit, #2 = integer
+% result: macro \fracresult = floor(#1 * #2 / 2^\fracpowlimit + 1/2)
+% expanding to the count equivalent of the respective dimen
+\begingroup
+ \fracfrac#1\relax % \fracfrac <= 2^30
+ \fracint#2\relax % \fracint <= \maxdimen
+ \ifdim\fracint<0pt \fracint-\fracint\def\fracsign{-}\else\def\fracsign{}\fi
+ \ifnum\fracone=\fracfrac \fracprod\fracint \else
+ \advance\fracfrac\fracone % \fracfrac < 2^31
+ \fracprod\fracone % if \fracprod were dimen, this would yield error
+ \divide\fracprod2 % \fracprod = 2^29 (representation of 1/2)
+ \loop
+ \ifodd\fracfrac \advance \fracprod\fracint \fi
+ \divide\fracprod2 \divide\fracfrac2
+ \ifnum \fracfrac>1 \repeat
+ \fi
+ \xdef\fracresult{\fracsign\number\fracprod}%
+\endgroup
+}
+% ---
+\newdimen\onedegree
+\onedegree16pt % this must be consistent with the table below
+% save TeX registers:
+\let\trigangle\tmp_dim_a
+\let\trigxpart\tmp_dim_b
+\let\trigypart\tmp_dim_c
+\let\trigxtmp\tmp_dim
+\let\trigiter\tmp_count_a
+\def\triglimit{28}%
+% ---
+\def\trigvalarg#1{\csname argscaled:\number#1\endcsname}
+\def\trigvalcos#1{\csname cosscaled:\number#1\endcsname}
+\def\trigvalsin#1{\csname sinscaled:\number#1\endcsname}
+\def\defspectrig#1#2#3#4{%
+% #1 -- ordering number (index)
+% #2 -- angle in degrees * \onedegree expressed in sp; alpha=#1*2^(-20)
+% #3 -- floor(cosd(alpha)*2^30+1/2) (30=\fracpowlimit)
+% #4 -- floor(sind(alpha)*2^30+1/2)
+ \expandafter\def\csname argscaled:#1\endcsname{#2}%
+ \expandafter\def\csname cosscaled:#1\endcsname{#3}%
+ \expandafter\def\csname sinscaled:#1\endcsname{#4}%
+}
+\defspectrig{1}{62914560}{536870912}{929887697} % alpha=60
+\defspectrig{2}{47185920}{759250125}{759250125} % 45
+\defspectrig{3}{31457280}{929887697}{536870912} % 30
+\defspectrig{4}{16777216}{1032146887}{295963357} % 2^4
+\defspectrig{5}{8388608}{1063292242}{149435979} % 2^3
+\defspectrig{6}{4194304}{1071126243}{74900443} % 2^2
+\defspectrig{7}{2097152}{1073087729}{37473049} % 2^1
+\defspectrig{8}{1048576}{1073578288}{18739379} % 2^0
+\defspectrig{9}{524288}{1073700939}{9370046} % 2^-1
+\defspectrig{10}{262144}{1073731603}{4685068} % 2^-2
+\defspectrig{11}{131072}{1073739269}{2342539} % 2^-3
+\defspectrig{12}{65536}{1073741185}{1171270} % 2^-4
+\defspectrig{13}{32768}{1073741664}{585635} % 2^-5
+\defspectrig{14}{16384}{1073741784}{292818} % 2^-6
+\defspectrig{15}{8192}{1073741814}{146409} % 2^-7
+\defspectrig{16}{4096}{1073741822}{73204} % 2^-8
+\defspectrig{17}{2048}{1073741823}{36602} % 2^-9
+\defspectrig{18}{1024}{1073741824}{18301} % 2^-10
+\defspectrig{19}{512}{1073741824}{9151} % 2^-11
+\defspectrig{20}{256}{1073741824}{4575} % 2^-12
+\defspectrig{21}{128}{1073741824}{2288} % 2^-13
+\defspectrig{22}{64}{1073741824}{1144} % 2^-14
+\defspectrig{23}{32}{1073741824}{572} % 2^-15
+\defspectrig{24}{16}{1073741824}{286} % 2^-16
+\defspectrig{25}{8}{1073741824}{143} % 2^-17
+\defspectrig{26}{4}{1073741824}{71} % 2^-18
+\defspectrig{27}{2}{1073741824}{36} % 2^-19
+\defspectrig{28}{1}{1073741824}{18} % 2^-20
+% ---
+\def\trigcompute#1#2#3{%
+% #1 angle in degrees (a)
+% #2 initial xpart (x)
+% #3 initial ypart (y)
+% result: (x',y')=(x,y) rotated a; the pair of macros
+% \trigxresult and \trigyresult contain x' and y', respectively;
+% both expand to the count equivalent of the respective dimen
+\begingroup
+ \trigangle#1\onedegree \trigxpart#2\relax \trigypart#3\relax
+ \loop \ifdim\trigangle<0sp \advance\trigangle360\onedegree \repeat
+ \loop \ifdim\trigangle>360\onedegree \advance\trigangle-360\onedegree \repeat
+ \ifdim\trigangle=360\onedegree \trigangle0sp \fi
+ \ifdim\trigangle<180\onedegree \else % >=
+ \trigxpart-\trigxpart \trigypart-\trigypart
+ \advance\trigangle-180\onedegree
+ \fi
+ \ifdim\trigangle<90\onedegree \else % >=
+ \trigxtmp\trigxpart \trigxpart-\trigypart \trigypart\trigxtmp
+ \advance\trigangle-90\onedegree
+ \fi
+ \trigiter1\relax
+ \loop
+ \ifnum\trigvalarg\trigiter>\trigangle \else % <=
+ \advance\trigangle-\trigvalarg\trigiter sp
+ \trigxtmp\trigxpart
+ % x=x*cos[i]-y*sin[i] :
+ \fracproduct{\trigvalcos\trigiter}\trigxpart
+ \trigxpart\fracresult sp
+ \fracproduct{\trigvalsin\trigiter}\trigypart
+ \advance\trigxpart-\fracresult sp
+ % y=y*cos[i]+x*sin[i] :
+ \fracproduct{\trigvalcos\trigiter}\trigypart
+ \trigypart\fracresult sp
+ \fracproduct{\trigvalsin\trigiter}\trigxtmp
+ \advance\trigypart\fracresult sp
+ \fi
+ \advance\trigiter1
+ \ifnum\trigangle>0 \repeat
+% result in dimen registers: \trigxpart and \trigypart
+ \xdef\trigxresult{\number\trigxpart}%
+ \xdef\trigyresult{\number\trigypart}%
+\endgroup
+}
+% ---------------------------------------------------------------------------
+% restore original catcodes:
+\catcode`\@\transatcode
+\catcode`\_\transundcode
+% ---------------------------------------------------------------------------
+\endinput
+
diff --git a/macros/generic/abbr/README b/macros/generic/abbr/README
new file mode 100644
index 0000000000..4591aefc4d
--- /dev/null
+++ b/macros/generic/abbr/README
@@ -0,0 +1,24 @@
+abbr.tex is a file containing some simple macros to support
+abbreviations in plain or latex.
+
+Usage example:
+
+=====================================================================
+\input abbr
+
+\abbr{TEX}{\TeX}{TeX}
+\abbr{LATEX}{\LaTeX}{LaTeX}
+\abbr{TEX4HT}{\TeX4HT}{TeX4ht}
+% more user-defined abbreviations here if needed
+
+I love \<TEX> and \<LATEX>, espciallly when I don't have to pay attention
+whether to espace or not to espace a space after a \<TEX> control sequence.
+I also love \<TEX4HT>, and when using it I prefer to have `TeX' and `LaTeX'
+in the html output intead of `TEX' and 'LATEX'. Using abbr.tex also frees
+me from having to remember whether I defined a \ControlSequence or
+\controlsequence or \Controlsequence, and where. Anytime when I need to use
+some abbreviation, I just write \<FOO> and if it's not defined, I add a new
+definition to abbr.tex. It also saves a lot of typing, because in fact
+what I type is not '\<FOO>' but 'foo' and some shortcut to turn it to
+\<FOO>.
+=====================================================================
diff --git a/macros/generic/abbr/abbr.tex b/macros/generic/abbr/abbr.tex
new file mode 100644
index 0000000000..86402d12aa
--- /dev/null
+++ b/macros/generic/abbr/abbr.tex
@@ -0,0 +1,238 @@
+\ifx\abbrloaded\relax
+ \let\next=\endinput
+\else
+ \let\next=\relax
+\fi
+
+\next
+
+\let\abbrloaded=y
+
+\def\<#1>{%
+ \expandafter\ifx\csname<#1>\endcsname\relax
+ \errmessage{abbreviation <#1> undefined!}%
+ \else
+ \csname<#1>\endcsname
+ \fi
+}
+
+\def\abbrA#1#2#3{%
+ \expandafter\def\csname<#1>\endcsname{#2}%
+}
+
+\def\abbrB#1#2#3{%
+ \def\abbrdef{#3}%
+ \ifx\abbrdef\empty
+ \expandafter\def\csname<#1>\endcsname{#2}%
+ \else
+ \expandafter\def\csname<#1>\endcsname{#3}%
+ \fi
+}
+
+\ifx\HCode\undefined % tex4ht is not being used
+ \let\abbr=\abbrA
+\else
+ \let\abbr=\abbrB
+\fi
+
+\abbr{.}{.\,}{}
+\abbr{3B2}{3B2}{}
+\abbr{A2AC}{\texttt{a2ac}}{}
+\abbr{ADOBE}{Adobe}{}
+\abbr{AFM}{AFM}{}
+\abbr{AFM}{AFM}{}
+\abbr{AMIGA}{Amiga}{}
+\abbr{AND}{\char038\relax}{&}
+\abbr{APACHE}{Apache}{}
+\abbr{AR}{Acrobat Reader}{}
+\abbr{ASCII}{ASCII}{}
+\abbr{BASH}{Bash}{}
+\abbr{BLUESKY}{BlueSky}{}
+\abbr{BS}{\char92}{}
+\abbr{bull}{$\bullet$}{}
+\abbr{C}{C}{}
+\abbr{CMACTEX}{CMac\TeX}{CMacTeX}
+\abbr{CM}{Computer Modern}{}
+\abbr{CMR}{CMR}{}
+\abbr{CMSS}{CMSS}{}
+\abbr{CMSUPER}{CM-Super}{}
+\abbr{CPP}{C++}{}
+\abbr{CS}{CS}{}
+\abbr{DANTE}{DANTE}{}
+\abbr{DEBIAN}{Debian}{}
+\abbr{DHSP}{ÐHSP}{}
+\abbr{DJBDNS}{\textsf{djbdns}}{}
+\abbr{DJGPP}{DJGPP}{}
+\abbr{DNSCACHE}{\textsf{dnscache}}{}
+\abbr{DOS}{DOS}{}
+\abbr{DOTNET}{Visual~.NET}{}
+\abbr{...}{\dots}{}
+\abbr{DTP}{DTP}{}
+\abbr{DVI}{DVI}{}
+\abbr{DVIPDFM}{\textsf{dvipdfm}}{}
+\abbr{DVIPS}{\textsf{dvips}}{}
+\abbr{EC}{EC}{}
+\abbr{EK}{\textit{{\Large$\varepsilon$\kern-.1em}k}}{}
+\abbr{ELIB}{eLib}{}
+\abbr{EMACS}{Emacs}{}
+\abbr{EMAIL}{Email}{}
+\abbr{EOF}{EOF}{}
+\abbr{ET5}{ET5}{}
+% \abbr{ETEX}{$\varepsilon$-\TeX}{eTeX}
+\abbr{ETEX}{e\TeX}{eTeX}
+\abbr{EUROTEX}{Euro\TeX}{EuroTeX}
+\abbr{FLOITEX}{Floi\TeX}{}
+\abbr{FMP}{FMP}{}
+\abbr{FONTINST}{\texttt{fontinst}}{}
+\abbr{FONTLAB}{FontLab}{}
+\abbr{FPTEX}{fp\TeX}{}
+\abbr{FTP}{Ftp}{}
+\abbr{GCC}{GCC}{}
+\abbr{GOOGLE}{Google}{}
+\abbr{GS}{\textsf{ghostscript}}{}
+\abbr{GUST}{GUST}{}
+\abbr{GUT}{GUTenberg}{}
+\abbr{GVSBK}{GVSBK}{}
+\abbr{HCMUP}{HCMUP}{}
+\abbr{HJ}{H\kern.1em<AND>\kern.1emJ}{}
+\abbr{HREF}{hyperref}{}
+\abbr{HSQL}{HSQL}{}
+\abbr{HTML}{HTML}{}
+\abbr{HZ}{\textit{hz}}{}
+\abbr{ID}{InDesign}{}
+\abbr{IIS}{IIS}{}
+\abbr{INTERNET}{Internet}{}
+\abbr{JAVA}{Java}{}
+\abbr{JP}{\textit{jp}}{}
+\abbr{KF}{\textit{kf\kern-.05em}}{}
+\abbr{KR}{\textit{K$\varrho$}}{}
+\abbr{LATEX}{\LaTeX}{LaTeX}
+\abbr{LDAP}{LDAP}{}
+\abbr{LF}{\textrm{\it letter\!\_\kern.1emfit}}{}
+\abbr{LIBPNG}{LIBPNG}{}
+\abbr{LIBTIFF}{LIBTIFF}{}
+\abbr{LINUX}{Linux}{}
+\abbr{LISP}{LISP}{}
+\abbr{LM}{LM}{LM}
+\abbr{M2}{\,m$^2$}{}
+\abbr{MAC}{Macintosh}{}
+\abbr{MF}{\MF}{}
+\abbr{MG}{MetaFog}{}
+\abbr{MIKTEX}{Mik\TeX}{MikTeX}
+\abbr{MIRKA}{Miroslava Mis\'akov\'a}{}
+\abbr{MMINSTANCE}{MMInstance}{}
+\abbr{MM}{Multiple Master}{}
+\abbr{MMTOOLS}{MMTOOLS}{}
+\abbr{MP}{\MP}{}
+\abbr{MVISCII}{Mac VISCII}{}
+\abbr{MYSQL}{MySQL}{}
+\abbr{NL}{\hfil\break}{}
+\abbr{NTG}{NTG}{}
+\abbr{NTS}{NTS}{}
+\abbr{OMEGA}{$\Omega$}{}
+\abbr{OPENTYPE}{OpenType}{}
+\abbr{PASCAL}{Pascal}{}
+\abbr{PDFETEX}{pdf\<ETEX>}{pdfeTeX}
+\abbr{PDF}{PDF}{}
+\abbr{PDFTEX}{pdf\TeX}{pdfTeX}
+\abbr{PDFLATEX}{pdf\LaTeX}{pdfLaTeX}
+\abbr{PDFXTEX}{pdfx\kern-.1em\TeX}{pdfxTeX}
+\abbr{CONTEXT}{Con\TeX{}t}{ConTeXt}
+\abbr{PERCENT}{\unskip\,\%}{}
+\abbr{PERL}{Perl}{}
+\abbr{PFA}{PFA}{}
+\abbr{PFB}{PFB}{}
+\abbr{PHP}{PHP}{}
+\abbr{PK}{PK}{}
+\abbr{PLAIN}{plain \TeX}{plain TeX}
+\abbr{POSTGRESQL}{PostgreSQL}{}
+\abbr{PROSPER}{Prosper}{}
+\abbr{PS}{PS}{}
+\abbr{RA}{$\longrightarrow$}{-->}
+\abbr{RESIN}{Resin}{}
+\abbr{SGML}{SGML}{}
+\abbr{SP}{\hskip1cm}{}
+\abbr{STL}{STL}{}
+\abbr{T1}{Type\nobreak\,1}{}
+\abbr{T3}{Type\nobreak\,3}{}
+\abbr{T5}{T5}{}
+\abbr{TCVN}{TCVN1}{}
+\abbr{TCX}{TCX}{}
+\abbr{TETEX}{\textsf{te\TeX}}{teTeX}
+\abbr{TEX4HT}{\TeX{}4ht}{TeX4ht}
+\abbr{TEXINFO}{\texttt{texinfo}}{}
+\abbr{TEXLIVE}{\TeX{}Live}{TeXLive}
+\abbr{TEXME}{\TeX{}Me}{TeXMe}
+\abbr{TEXMF}{\textsf{texmf}}{}
+\abbr{TEXNICCENTER}{TeXnicCenter}{}
+\abbr{TEX}{\TeX}{TeX}
+\abbr{TEXTRACE}{\TeX{}trace}{TeXtrace}
+\abbr{TFM}{TFM}{}
+\abbr{TFTOPL}{TFtoPL}{}
+\abbr{THANH}{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}{Han The Thanh}
+\abbr{TINYDNS}{\textsf{tinydns}}{}
+\abbr{TOMCAT}{Tomcat}{}
+\abbr{TPHCM}{Tp.\,HCM}{}
+\abbr{TRUETYPE}{True\kern-.1em Type}{TrueType}
+\abbr{TUG}{TUG}{}
+\abbr{UNICODE}{Unicode}{}
+\abbr{UNIKEY}{Unikey}{}
+\abbr{UNIX}{UNIX}{}
+\abbr{UPORTAL}{uPortal}{}
+\abbr{URW}{URW}{}
+\abbr{URWVN}{URWVN}{}
+\abbr{UTF8}{UTF8}{}
+\abbr{VB}{Visual Basic}{}
+\abbr{VC6}{Visual~C++~6.0}{}
+\abbr{VIETLUG}{VietLUG}{}
+\abbr{VIM}{Vim}{}
+\abbr{VIM}{Vim}{}
+\abbr{VISCII}{VISCII}{}
+\abbr{VI}{Vi}{}
+\abbr{VNCMR}{\textsf{vncmr}}{}
+\abbr{VNI}{VNI}{}
+\abbr{VNR}{VNR}{}
+\abbr{VNTEX}{V\kern-.1em n\TeX}{VnTeX}
+\abbr{VPS}{VPS}{}
+\abbr{WC}{Windows Commander}{}
+\abbr{WEB}{Web}{}
+\abbr{WIN32}{Win32}{}
+\abbr{WINDOWS}{Windows}{}
+\abbr{WINEDT}{WinEdt}{}
+\abbr{WWW}{WWW}{}
+\abbr{XEMACS}{XEmacs}{}
+\abbr{XEMTEX}{Xem\TeX}{XemTeX}
+\abbr{XML}{XML}{}
+\abbr{XPDF}{XPDF}{}
+\abbr{YANDY}{Y<AND>Y}{}
+\abbr{ZLIB}{ZLIB}{}
+\abbr{EMAIL}{Email}{}
+\abbr{WEBSITE}{Website}{}
+\abbr{ASP}{ASP}{}
+\abbr{FRONTPAGE}{FrontPage}{}
+\abbr{DRW}{DreamWeaver}{}
+\abbr{ABC}{ABC}{}
+\abbr{VNI}{VNI}{}
+\abbr{CTAN}{CTAN}{}
+\abbr{PDFCPROT}{\textsf{pdfcprot}}{}
+\abbr{PDFEXPAND}{\textsf{pdfexpand}}{}
+\abbr{MICROTYPE}{\textsf{microtype}}{}
+\abbr{PDFFONTS}{\textsf{pdffonts}}{}
+\abbr{AFM2TFM}{\textsf{afm2tfm}}{}
+\abbr{VF}{VF}{}
+\abbr{TUGBOAT}{TUGboat}{}
+\abbr{PSTRICKS}{\textsf{PStricks}}{}
+\abbr{WEB2C}{\textsf{web2c}}{}
+\abbr{IE}{i.\,e.\,\ignorespaces}{}
+\abbr{ie}{i.\,e.\,\ignorespaces}{}
+\abbr{GNU}{GNU}{}
+\abbr{LIBAVL}{\textsf{libAVL}}{}
+\abbr{TTF2AFM}{\textsf{ttf2afm}}{}
+\abbr{PDFSYNC}{\textsf{pdfsync}}{}
+\abbr{CFF}{CFF}{}
+\abbr{GNOME}{GNOME}{}
+\abbr{SGLUG}{SaigonLUG}{}
+\abbr{SAIGON}{Sài Gòn}{}
+\abbr{SQL}{SQL}{}
+
+\endinput
diff --git a/macros/generic/apnum/README b/macros/generic/apnum/README
new file mode 100644
index 0000000000..b4abe62e1a
--- /dev/null
+++ b/macros/generic/apnum/README
@@ -0,0 +1,29 @@
+apnum -- Arbitrary precision numbers implemented by TeX macros
+--------------------------------------------------------------
+Petr Olsak Dec. 2015
+
+The operations (addition, subtraction, multiplication, division, power to an
+integer, square root, exponential, logarithm, sin, cos, tan, asin, acos,
+atan) are implemented by TeX macros in this package. Operands can be numbers
+with arbitrary number of digits (or scientific notation is allowed). The
+expression scanner is provided too. The exhaustive documentation (including
+detail TeXnical documentation) is included. The macro includes many
+optimizations and uses only TeX primitives (from classical TeX) and
+\newcount macro.
+
+Files: README ... this file
+ apnum.tex ... TeX macro
+ apnum.pdf ... documentation (generated from apnum.d)
+ apnum.d ... documentation (source for apnum.pdf)
+
+License: Public domain.
+
+Versions:
+1.0 <Nov 2014> - released
+1.1 <Jan 2015> - corrections
+1.2 <May 2015> - .5+.5=.1 bug fixed
+1.3 <Dec 2015> - many improvements, \SQRT, \LN, \EXP implemented
+1.4 <Dec 2015> - \SIN, \COS, \TAN, \ASIN, \ACOS, \ATAN, \PI, \PIhalf added
+1.5 <Jan 2016> - \eprint for printing evaluated expressions added.
+1.6 <Feb 2016> - \evalmdef introduced, \EXP improved.
+1.7 <Apr 2018> - \eprint - round braces around an expression with unary minus
diff --git a/macros/generic/apnum/apnum.d b/macros/generic/apnum/apnum.d
new file mode 100644
index 0000000000..b961d83434
--- /dev/null
+++ b/macros/generic/apnum/apnum.d
@@ -0,0 +1,2918 @@
+% apnum.tex -- Arbitrary Precision Numbers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The documentation, Petr Olsak, 2014, 2015, 2016, 2018
+
+% You can create the pdf version of this documentation by the command
+% pdfcsplain apnum.d
+% run this command four times (for the consistence of all cross references)
+% If you need to generate the documentation then the packages csplain and docbytex
+% have to be installed in your TeX distribution.
+
+\input utf8off \clearmubyte % use pdfcsplain
+
+\def\projectversion{1.7 Apr 2018}
+\def\headtitle{Arbitrary Precision Numbers}
+
+\widowpenalty=10000
+\clubpenalty=10000
+
+\emergencystretch=2em
+\hbadness=2200
+
+\showboxbreadth=1500 \showboxdepth=2
+
+\input docby.tex
+
+\setlinecomment{\percent} \noactive{\nb\percent} \noactive{\percent\cbrace}
+\noactive{\nb fontdimen}
+\noactive{\nb apSIGNa} \noactive{\nb apSIGNb}
+\noactive{\nb apEa} \noactive{\nb apEb}
+\noactive{\nb documentclass}
+
+\def\tittoc{Table Of Contents}
+\def\titindex{Index}
+\def\titversion{version }
+
+\def\db{\dg\nb}
+\def\du#1{\api{\nb#1}}%\def\quotehook{\langleactive\let\Blue=\Red \gdef\quotehook{\langleactive}}}
+\def\quotehook{\langleactive\obeyspaces}
+\bgroup
+ \catcode`\[=1 \catcode`]=2 \catcode`\{=12 \catcode`\}=12
+ \gdef\obrace[{] \gdef\cbrace[}]
+\egroup
+\def\indexhook{%
+ The bold number is the number of the page where the item is documented.
+ Other numbers are pagenumbers of the occurrences of such item.
+ The items marked by $\succ$ are mentioned in user documentation.
+ \medskip}
+\def\nn#1 {\noactive{\nb#1}}
+\def\inumref[#1]{\ilink[#1]{\numref[#1]}}
+\def\M{M\sb{\rm op}}
+
+\def\cnvbookmark#1{\lowercase{\lowercase{#1}}}
+{\obeyspaces\global\let =\ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\centerline{\tt apnum.tex}
+
+\title Arbitrary Precision Numbers
+
+\author Petr Ol\v s\'ak
+
+\centerline{\ulink[ftp://math.feld.cvut.cz/olsak/makra/]%
+ {ftp://math.feld.cvut.cz/olsak/makra/}}
+
+\dotoc \bookmarks
+
+\sec User's Documentation
+
+This macro file "apnum.tex" implements addition, subtraction,
+multiplication, division, power to an integer and other calculation
+($\sqrt x$, $e^x$, $\ln x$, $\sin x$, $\arctan x$, \dots) with
+``large numbers'' with arbitrary number of decimal digits. The numbers
+are in the form:
+
+\begtt
+<sign><digits>.<digits>
+\endtt
+%
+where optional "<sign>" is the sequence of "+" and/or "-". The nonzero number is
+treated as negative if and only if there is odd number of "-" signs.
+The first part or second part of decimal "<digits>" (but no both) can be empty.
+The decimal point is optional if second part of "<digits>" is empty.
+
+There can be unlimited number of digits in the operands. Only \TeX{} main
+memory or your patience during calculation with very large numbers are your
+limits. Note, that the "apnum.tex" implementation includes a lot of
+optimization and it is above 100 times faster (on large numbers) than the
+implementation of the similar task in the package "fltpoint.sty". And the
+"fp.sty" doesn't implements arbitrary number of digits. The extensive
+technical documentation can serve as an inspiration how to do \TeX{} macro
+programming.
+
+
+\subsec [eval] Evaluation of Expressions
+
+After "\input apnum" in your document you can use the macro
+\du{evaldef}"\evaldef<sequence>{<expression>}".
+It gives the possibility for comfortable calculation. The "<expression>" can
+include numbers (in the form described above) combined by "+", "-", "*", "/"
+and "^" operators and by possible brackets "()" in an usual way. The result
+is stored to the "<sequence>" as a ``literal macro''. Examples:
+
+\begtt
+\evaldef\A {2+4*(3+7)}
+ % ... the macro \A includes 42
+\evaldef\B {\the\pageno * \A}
+ % ... the macro \B includes 84
+\evaldef\C {123456789000123456789 * -123456789123456789123456789}
+ % ... \C includes -15241578765447341344197531849955953099750190521
+\evaldef\D {1.23456789 + 12345678.9 - \A}
+ % ... the macro \D includes 12345596.13456789
+\evaldef\X {1/3}
+ % ... the macro \X includes .3333333333333333333
+\endtt
+%
+The limit of the number of digits of the division result can be set by
+\du{apTOT}"\apTOT" and \du{apFRAC}"\apFRAC" registers.
+First one declares maximum calculated digits in total
+and second one declares maximum of digits after decimal point. The
+result is limited by both those registers. If the "\apTOT" is negative,
+then its absolute value is treated as a ``soft limit'': all digits before
+decimal point are calculated even if this limit is exceeded. The digits
+after decimal point are not calculated when this limit is reached.
+The special value "\apTOT=0" means that the calculation is limited
+only by "\apFRAC". Default values are "\apTOT=0" and "\apFRAC=20".
+
+The operator "^" means the powering, i.~e.\ "2^8" is "256". The exponent have
+to be an integer (no decimal point is allowed) and a relatively small
+integer is assumed.
+
+The scanner of the "\evaldef" macro reads (roughly speaking) the "<expression>"
+in the form ``operand binary-operator operand binary-operator etc.''
+without expansion.
+The spaces are not significant in the "<expression>". The operands are:
+
+\begitems
+\item * numbers (in the format "<sign><digits>.<digits>") or
+\item * numbers in scientific notation (see the section \inumref[sci]) or
+\item * sequences "<sign>\the<token>" or "<sign>\number<token>" or
+\item * any other single "<token>" optionally preceded by "<sign>" and
+ optionally followed by a sequence of parameters enclosed in braces, for
+ example "\A" or "\B{<text>}" or "-\C{<textA>}{<textB>}". This case has
+ two meanings:
+\begitems
+\item * numeric constant defined in a ``literal macro''
+ ("\def\A{42}", "\evaldef\A{13/15}") or
+\item * ``function-like'' macro which returns a value after processing.
+\enditems
+\enditems
+
+The "apnum.tex" macro file provides the following ``function-like'' macros
+allowed to use them as an operand in the "<expression>":
+\begitems
+\item * \du{ABS}"\ABS {<value>}" for absolute value,
+\item * \du{SGN}"\SGN {<value>}" returns sign of the "<value>",
+\item * \du{iDIV}"\iDIV {<dividend>}{<divisor>}" for integer division,
+\item * \du{iMOD}"\iMOD {<dividend>}{<divisor>}" for integer remainder,
+\item * \du{iFLOOR}"\iFLOOR {<value>}" for rounding the number to the integer,
+\item * \du{iFRAC}"\iFRAC {<value>}" for fraction part of the "\iFLOOR",
+\item * \du{FAC}"\FAC {<integer value>}" for factorial,
+\item * \du{BINOM}"\BINOM {<integer above>}{<integer below>}" for binomial coefficient,
+\item * \du{SQRT}"\SQRT {<value>}" for square root of the "<value>",
+\item * \du{EXP}"\EXP {<value>}" applies exponential function to "<value>",
+\item * \du{LN}"\LN {<value>}" for natural logarithm of the "<value>",
+\item * \du{SIN}\du{COS}\du{TAN}"\SIN {<value>}", "\COS {<value>}", "\TAN {<value>}"
+ for $\sin x$, $\cos x$ and $\tan x$ functions,
+\item * \du{ASIN}\du{ACOS}\du{ATAN}"\ASIN {<value>}", "\ACOS {<value>}", "\ATAN {<value>}"
+ for $\arcsin x$, $\arccos x$ and $\arctan x$ functions,
+\item * \du{PI}\du{PIhalf}"\PI", "\PIhalf" for constants $\pi$ and $\pi/2$.
+\enditems
+
+The arguments of all these functions can be a
+nested "<expressions>" with the syntax like in the "\evaldef" macro.
+Example:
+
+\begtt
+\def\A{20}
+\evaldef\B{ 30*\SQRT{ 100 + 1.12*\the\widowpenalty } / (4-\A) }
+\endtt
+%
+Note that the arguments of the ``function-like'' macros are enclosed by normal
+\TeX{} braces "{}" but the round brackets "()" are used for re-arranging of the
+common priority of the "+", "-", "*", "/" and "^" operators.
+The macros "\SQRT", "\EXP", "\LN", "\SIN", "\COS", "\TAN", "\ASIN", "\ACOS",
+"\ATAN" use "\apTOT" and "\apFRAC" registers similar like during division.
+
+The "\PI" and "\PIhalf" are ``function-like'' macros without parameters.
+They returns the constant with "\apFRAC" digits after decimal point.
+
+Users can define their own ``function-like'' macros, see the section
+\inumref[pgm].
+
+\medskip
+
+The output of "\evaldef\foo{<expression>}" processing is stored, of course,
+to the ``literal macro'' "\foo". But there are another outputs like side
+effect of the processing:
+
+\begitems
+\item * The \du{OUT}"\OUT" macro includes exactly the same result as "\foo".
+\item * The \du{apSIGN}"\apSIGN" register includes the value "1" or "0"
+ or "-1" respectively dependent on the fact that the output is positive, zero
+or negative.
+\item * The \du{apE}"\apE" register is equal to the decimal exponent when
+scientific number format is used (see the next section~\inumref[sci]).
+\enditems
+
+For example, you can
+compare long numbers using "\apSIGN" register (where direct usage of "\ifnum"
+primitive may cause arithmetic overflow):
+
+\begtt
+\TEST {123456789123456789} > {123456789123456788} \iftrue OK \else KO \fi
+\endtt
+The "\TEST" macro is defined like:
+
+\begtt
+\def\TEST#1#2#3#4{\evaldef\tmp{#1-(#3)}\ifnum\apSIGN #2 0 }
+\endtt
+
+The "apnum.tex" macros do not provide the evaluation of the "<expression>"
+at the expansion level only. There are two reasons. First, the macros can be
+used in classical \TeX{} only with Knuth's plain \TeX{} macro. No e\TeX{} is
+needed. And the expansion-only evaluation of any expression isn't possible
+in classical \TeX. Second reason is the speed optimization
+(see the section~\inumref[tests]). Anyway, users
+needn't expansion-only evaluation. They can write "\evaldef\a{<expression>}"
+"\edef\foo{...\a...}" instead of "\edef\foo{...<expression>...}". There is
+only one case when this ``pre-processing'' trick cannot be used: while
+expansion of the parameters of asynchronous "\write" commands. But you can
+save the "<expression>" unexpanded into the file and you can read the file
+again in the second step and do "\evaldef" during reading the file.
+
+
+\subsec [sci] Scientific Notation of Numbers
+
+The macro "\evaldef" is able
+to operate with the numbers written in the notation:
+
+\begtt
+<sign><digits>.<digits>E<sign><digits>
+\endtt
+%
+For example "1.234E9" means $1.234\cdot 10^9$, i.~e.\ "1234000000" or
+the text "1.234E-3" means ".001234". The decimal exponent (after the "E"
+letter) have to be in the range $\pm\,2\,147\,483\,647$ because
+we store this value in normal \TeX{} register.
+
+The "\evaldef<sequence>{<expression>}" operates with mantissa and exponent
+separately if there are operands with scientific notation. It outputs the
+result in the scientific notation if the result have non-zero exponent.
+
+The \du{evalmdef}"\evalmdef<sequence>{<expression>}" does the same as "\evaldef"
+but only mantissa is saved in the output "<sequence>" and in the "\OUT" macro.
+The exponent is stored in the "\apE" register in such case.
+You can define the macro which shows the complete result after "\evalmdef"
+calculation, for example:
+
+\begtt
+\def\showE#1{\message{#1\ifnum\apE=0 \else*10^\the\apE\fi}}
+\endtt
+
+Suppose "\evalmdef\foo{<expression>}" is processed and the complete result is
+$R={}$"\foo*10^\apE". There are two possibilities how to save such complete
+result $R$ to the "\foo" macro: use "\apEadd\foo" or "\apEnum\foo". Both
+macros do nothing if "\apE=0". Else the \du{apEadd}"\apEadd<sequence>" macro adds
+"E<exponent>" to the "<sequence>" macro and \du{apEnum}"\apEnum<sequence>" moves
+the decimal point to the new right position in the "<sequence>" macro or
+appends zeros. The "\apE" register is set to zero after the macro "\apEadd" or
+"\apEnum" is finished. Example:
+
+\begtt
+\evalmdef\foo{ 3 * 4E9 } % \foo is 12, \apE=9
+\apEadd\foo % \foo is 12E+9
+\evalmdef\foo{ 7E9 + 5E9 } % \foo is 12, \apE=9
+\apEnum\foo % \foo is 12000000000
+\endtt
+
+There are another usable macros for operations with scientific numbers.
+
+\begitems
+\item * \du{apROLL}"\apROLL <sequence>{<shift>}" \dots the "<sequence>" is assumed to
+ be a macro with the number. The decimal point of this number is
+ shifted right by "<shift>" parameter, i.~e.\ the result is multiplied by
+ "10^<shift>". The "<sequence>" is redefined by this result.
+ For example the "\apEnum\A" does "\apROLL\A{\apE}".
+\item * \du{apNORM}"\apNORM <sequence>{<num>}"
+ \dots the "<sequence>" is supposed to be a macro with "<mantissa>" and it
+ will be redefined. The number "<mantissa>*10^\apE" (with current value of
+ the "\apE" register) is assumed.
+ The new mantissa saved in the "<sequence>" is the ``normalized mantissa'' of
+ the same number. The "\apE" register is corrected so the ``normalized
+ mantissa''"*10^\apE" gives the same number.
+ The "<num>" parameter is the number of non-zero digits before the decimal
+ point in the outputted mantissa. If the parameter "<num>"
+ starts by dot following by integer (for example "{.2}"), then the
+ outputted mantissa has "<num>" digits after decimal point.
+ For example "\def\A{1.234}\apE=0" "\apNORM\A{.0}" defines "\A" as "1234"
+ and "\apE=-3".
+\item * The \du{apROUND}"\apROUND <sequence>{<num>}"
+ rounds the number, which is included in
+ the macro "<sequence>" and redefines "<sequence>" as rounded number.
+ The digits after decimal point at the position greater than "<num>" are ignored
+ in the rounded number. The decimal point is removed, if it is the right
+ most character in the "\OUT". The ignored part is saved to the "\XOUT" macro
+ without trailing right zeros.
+\enditems
+
+Examples of "\apROUND" usage:
+
+\begtt
+\def\A{12.3456}\apROUND\A{1} % \A is "12.3", \XOUT is "456"
+\def\A{12.3456}\apROUND\A{9} % \A is "12.3456", \XOUT is empty
+\def\A{12.3456}\apROUND\A{0} % \A is "12", \XOUT is "3456"
+\def\A{12.0000}\apROUND\A{0} % \A is "12", \XOUT is empty
+\def\A{12.0001}\apROUND\A{2} % \A is "12", \XOUT is "01"
+\def\A{.000010}\apROUND\A{2} % \A is "0", \XOUT is "001"
+\def\A{-12.3456}\apROUND\A{2} % \A is "-12.34", \XOUT is "56"
+\def\A{12.3456}\apROUND\A{-1} % \A is "10", \XOUT is "23456"
+\def\A{12.3456}\apROUND\A{-4} % \A is "0", \XOUT is "00123456"
+\endtt
+
+The following example saves the result of the "\evalmdef" in scientific
+notation with the mantissa with maximal three digits after decimal point and one
+digit before.
+
+\begtt
+\evalmdef\X{...}\apNORM\X{1}\apROUND\X{3}\apEadd\X
+\endtt
+
+The macros "\apEadd", "\apEnum", "\apROLL", "\apNORM" and "\apROUND" redefine the macro
+"<sequence>" given as their first argument. They are not ``function-like''
+macros and they cannot be used in an "<expression>".
+The macro "<sequence>" must be the number in the format
+"<simple sign><digits>.<digits>" where "<simple sign>" is one minus or none
+and the rest of number has the format described in the first paragraph of
+this documentation. The scientific notation isn't allowed here. This format
+of numbers is in accordance with the output of the "\evalmdef" macro.
+
+The build in function-like macros "\SGN", "\iDIV", \dots "\SIN", "\COS", "\ATAN" etc.\
+don't generate the result in scientific form regardless of its argument is in
+scientific form or not. But there are exceptions: "\ABS" and "\SQRT" returns
+scientific form if the argument is in this form. And "\EXP" returns scientific
+form if the result is greater than $10^{K+1}$ or less than $10^{-K-1}$ where
+$K={}$\du{apEX}"\apEX". The default value of this register is "\apEX=10".
+
+
+\subsec [pgm] Notes for macro programmers
+
+If you plan to create a ``function-like'' macro which can be used as an
+operand in the "<expression>" then observe that first token in the
+macro body must be "\relax". This tells to the "<expression>" scanner that
+the calculation follows. The result of this calculation must be saved into
+the "\OUT" macro and into the "\apSIGN" register.
+
+Example. The "\ABS" macro for the absolute value is defined by:
+
+\ilabel [abs:eval] {evalmdef}
+\ifirst{apnum.tex} {ABS}{^^B\cbrace}{+-}
+
+\begtt
+Usage: \evaldef\A{ 2 - \ABS{3-10} }% \A includes -5.
+\endtt
+
+Note, that "\apSIGN" register is corrected by final routine of the expression scanner
+according the "\OUT" value. But setting "\apSIGN" in your macro is
+recommended because user can use your macro directly outside of "\evaldef".
+
+If the result of the function-like macro needs to be expressed by scientific
+notation then you have two possibilities: use ``{\tt E}'' notation in the
+"\OUT" macro and keep "\apE" register zero. Or save the matissa only to the
+"\OUT" macro and set the value of the exponent into the "\apE" register. The
+second possibility is preferred and used by build in function-like macros.
+Note the "\ABS" definition above: the "\evalmdef" in the line~\cite[abs:eval]
+keeps only mantissa in
+the "\OUT" macro and the "\apE" register is set by "\evalmdef" itself.
+
+The "\evaldef\foo{<expression>}" is processed in two steps. The
+"<expression>" scanner converts the input to the macro call of the
+\du{apPLUS}"\apPLUS", \du{apMINUS}"\apMINUS", \du{apMUL}"\apMUL",
+\du{apDIV}"\apDIV" or \du{apPOW}"\apPOW" macros with two
+parameters. They do addition, subtraction, multiplication, division and
+power to the integer. These macros are processed in the second step.
+For example:
+
+\begtt
+\evaldef\A{ 2 - 3*8 } converts the input to:
+\apMINUS{2}{\apMUL{3}{8}} and this is processed in the second step.
+\endtt
+
+The macros "\apPLUS", "\apMINUS", "\apMUL", "\apDIV" and "\apPOW" behave
+like normal ``function-like'' macros with one important exception: they
+don't accept general "<expression>" in their parameters, only single operand
+(see section~\inumref[eval]) is allowed.
+
+If your calculation is processed in the loop very intensively
+than it is better to save time of such calculation and to avoid the
+"<expression>" scanner processing (first step of the "\evaldef").
+So, it is recommended to use directly the
+Polish notation of the expression as shown in the second line in the example
+above. See section~\inumref[fce] for more inspirations.
+
+The output of the "\apPLUS", "\apMINUS", "\apMUL", "\apDIV" and "\apPOW" macros is
+stored in "\OUT" macro and the registers "\apSIGN" and "\apE" are set
+accordingly.
+
+The number of digits calculated by "\apDIV" macro is limited by the
+"\apTOT" and "\apFRAC" registers as described in the section~\inumref[eval].
+There is another result of "\apDIV" calculation stored in the \du{XOUT}"\XOUT" macro.
+It is the remainder of the division. Example:
+
+\begtt
+\apTOT=0 \apFRAC=0 \apDIV{1234567892345}{2}\ifnum\XOUT=0 even \else odd\fi
+\endtt
+%
+You cannot apply "\ifodd" primitive on ``large numbers'' directly
+because the numbers may be too big.
+
+If you set something locally inside your ``function-like'' macro, then such
+data are accessible only when your macro is called outside of "\evaldef". Each
+parameter and the whole "\evaldef" is processed inside a \TeX{} group, so
+your locally set data are inaccessible when your macro is used inside another
+``function-like'' parameter or inside "\evaldef". The "\XOUT" output is set
+locally by "\apDIV" macro, so it serves as a good example of this feature:
+
+\begtt
+{\apDIV{1}{3} ... \XOUT is .00000000000000000001 }
+ ... \XOUT is undefined
+\evaldef{1/3} ... \XOUT is undefined
+\apPLUS{1}{\apDIV{1}{3}} ... \XOUT is undefined
+\endtt
+
+The macro "\apPOW{<base>}{<exponent>}" calculates the power to the integer
+exponent. A slight optimization is implemented here so the usage of "\apPOW"
+is faster than repeated multiplication. The decimal non-integer exponents are not
+allowed. Use "\EXP" and "\LN" macros if you need to calculate non-integer
+exponent:
+
+\begtt
+\def\POWER#1#2{\relax \EXP{(#2)*\LN{#1}}}
+\endtt
+%
+Note that both parameters are excepted as an "<expression>". Thus the "#2" is
+surrounded in the rounded brackets.
+
+Examples of another common ``function-like'' macros:
+
+\begtt
+\evaldef\degcoef{PI/180}
+\def\SINdeg#1{\relax \SIN{\degcoef*(#1)}}
+\def\COSdeg#1{\relax \COS{\degcoef*(#1)}}
+\def\SINH#1{\relax \evaldef\myE{\EXP{#1}}\evaldef\OUT{(\myE-1/\myE)/2}}
+\def\ASINH#1{\relax \LN{#1+\SQRT{(#1)^2+1}}}
+\def\LOG#1{\relax \apLNtenexec \apDIV{\LN{#1}}{\apLNten}}
+\endtt
+
+In another example, we implement the field "\F{<index>}" as an
+``function-like'' macro. User can set values by "\set\F{<index>}={<value>}"
+and then these values can be used in an "<expression>".
+
+\begtt
+\def\set#1#2#3#4{\evaldef\index{#2}\evaldef\value{#4}%
+ \expandafter\edef\csname \string#1[\index]\endcsname{\value}}
+\def\F#1{\relax % function-like macro
+ \evaldef\index{#1}%
+ \expandafter\ifx\csname \string\F[\index]\endcsname\relax
+ \def\OUT{0}% undefined value
+ \else
+ \edef\OUT{\csname \string\F[\index]\endcsname}%
+ \fi
+}
+\set \F{12/2} = {28+13}
+\set \F{2*4} = {144^2}
+\evaldef\test { 1 + \F{6} } \message{result=\test}
+\endtt
+%
+As an exercise, you can implement linear interpolation of known values.
+
+The final example shows, how to implement
+the macro "\usedimen{<dimen>}{<unit>}". It is ``function-like'' macro,
+it can be used in the "<expression>" and it returns the
+"<decimal number>" with the property "<dimen>=<decimal number><unit>".
+
+\begtt
+\def\usedimen #1#2{\relax % function-like macro
+ \def\OUT{0}% % default value, if the unit isn't known
+ \csname dimenX#2\endcsname{#1}}
+\def\dimenXpt #1{\apDIV{\number#1}{65536}}
+\def\dimenXcm #1{\apDIV{\number#1}{1864682.7}}
+\def\dimenXmm #1{\apDIV{\number#1}{186468.27}}
+%... etc.
+\evaldef\a{\usedimen{\hsize}{cm}} % \a includes 15.91997501773358008845
+\endtt
+%
+Note that user cannot write "\usedimen\hsize{cm}" without braces because
+this isn't the syntactically correct operand (see section~\inumref[eval]) and the
+"<expression>" scanner is unable to read it.
+
+\subsec Printing expressions
+
+\TeX{} was designed for printing. The "apnum.tex" provides common syntax of
+"<expressions>" (given in section \inumref[eval]) which can be used for
+both: for {\it evaluating\/} or for {\it printing}. Printing can be done
+using \du{eprint}"\eprint{<expression>}{<declaration>}" macro. The
+"<declaration>" part declares locally what to do with ``variables'' or with
+your ``function-like'' macros. You can insert your local "\def"'s or
+"\let"'s here because the "<declaration>" is executed in the group before
+the "<expression>" is printed. The "\eprint" macro must be used in math mode
+only. Example:
+
+\begtt
+\def\printresult#1{$$\displaylines{
+ \eprint{#1}\vars = \cr = \eprint{#1}\nums = \cr
+ = \apFRAC=8 \evaldef\OUT{#1}\OUT, \cr
+ \nums x = \X, \quad y = \Y.
+}$$}
+
+\def\X{-.25} \def\Y{18.11}
+\def\vars{\def\X{x}\def\Y{y}\let\apMULop=\relax}
+\def\nums{\corrnum\X \corrnum\Y}
+\printresult
+{-(\X-\SQRT{\Y^2+1}) + -((\Y*\X+1)/2) + \SIN{\X+\PIhalf} + 2*\COS{\Y}}
+\endtt
+generates the result:
+$$
+ \displaylines{
+ - \left(x-\sqrt{y^2+1}\right) + \left(- {yx+1\over 2}\right)
+ + \sin\!\left( x+{\pi\over2}\right) + 2 \cos y = \cr
+ = - \left(-0.25-\sqrt{18.11^2+1}\right) +
+ \left(- {18.11\cdot(-0.25)+1\over 2}\right)
+ + \sin\!\left( -0.25+{\pi\over2}\right) + 2\cdot \cos 18.11 = \cr
+ = 22.5977863, \cr
+ x = -0.25, \quad y = 18.11
+}
+$$
+This example prints the given "<expression>" in two forms: with
+``variables as variables'' first and with ``variables as constants'' second.
+The "<declaration>" is prepared in the "\vars" macro for the first
+form and in the "\nums" macro for the second.
+
+Note that "\eprint" macro re-calculates the occurrences of round brackets but
+keeps the meaning of the "<expression>".
+For example "(a+b)/c" is printed as "{a+b\over c}" (without brackets) and
+"6*-(a+b)" is printed as "6\cdot(-(a+b))" (new brackets pair is added).
+Or "\SIN{x}" is printed as "\sin x" (without brackets) but "\SIN{x+1}"
+is printed as "\sin(x+1)" (with brackets). And "\SIN{x}^2" is printed as
+"\sin^2 x".
+
+You can do \du{apMULop}"\let\apMULop=\," or "\let\apMULop=\relax" in the
+"<declaration>" part if you need not to print any operator for multiplying.
+The default setting is "\let\apMULop=\cdot". Another possibility is to set
+"\let\apMULop=\times".
+
+The macro \du{corrnum}"\corrnum<token>" corrects the number saved in
+the "<token>" macro if it is in the form
+"[<minus>].<digits>" (i.~e.\ without digits before decimal point).
+Then zero is added before decimal point. Else nothing is changed.
+
+Warning. The first parameter of "\eprint" (i.~e.\ the "<expression>"), must
+be directly expression without any expansion steps. For example, you cannot
+define "\def\foo{<expression>}" and do "\eprint{\foo}{}" but you can do
+"\expandafter\eprint\expandafter{\foo}{}".
+
+The macro "\eprint" has its own intelligence about putting brackets. If you
+need to put or remove brackets somewhere where the intelligence of "\eprint"
+is different from your opinion, you can create your function-like macros
+"\BK{<expression>}" and "\noBK{<expression>}". They evaluate the
+"<expression>" when using "\evaldef".
+The "\BK" prints the "<expression>" with brackets and
+"\noBK" prints it without brackets when using "\eprint".
+
+\begtt
+\def\BK#1{\relax \evaldef\OUT{#1}} \let\noBK=\BK
+\def\apEPj{\def\BK##1{\left(\eprint{##1}{}\right)}%
+ \def\noBK##1{\eprint{##1}{}}}
+Now $\eprint{3+\BK{\SIN{1}}^2}{}$ prints $3+(\sin 1)^2$.
+\endtt
+
+Note that "\apEPj" macro is an initial hook of "\eprint"
+(it is run inside group before processing of the second parameter of "\eprint").
+
+\subsec [tests] Experiments
+
+The following table shows the time needed for calculation of randomly
+selected examples. The comparison with the package "fltpoint.sty" is shown.
+The symbol $\infty$ means that it is out of my patience.
+
+\bigskip
+\noindent\hfil\vbox{\baselineskip=13pt
+\halign{&\ \hfil#\hfil\ \cr
+ input & \# of digits in the result & time spent by {\tt apnum.tex} &
+ time spent by {\tt fltpoint.sty}\cr
+\noalign{\smallskip\hrule\smallskip}
+ 200! & 375 & 0.33 sec & 173 sec \cr
+ 1000! & 2568 & 29 sec & $\infty$ \cr
+ $5^{17^2}$ & 203 & 0.1 sec & 81 sec \cr
+ $5^{17^3}$ & 3435 & 2.1 sec & $\infty$ \cr
+ $1/17$ & 1000 & 0.13 sec & 113 sec \cr
+ $1/17$ & 100000 & 142 sec & $\infty$ \cr
+}}
+
+
+\sec The Implementation
+
+\subsec Name Convention, Version, Counters
+
+The internal control sequence names typically used in "apnum.tex" have the form
+"\apNAMEsuffix", but there are exceptions. The control sequences mentioned
+in the section~\inumref[eval] (user's documentation) have typically more natural names.
+And the internal counter registers have names "\apnumA", "\apnumB",
+"\apnumC" etc.
+
+The code starts by the greeting. The \db apVERSION includes the version of this software.
+
+\ifirst{apnum.tex} {apVERSION}{\empty}{+-}
+
+We declare auxiliary counters and one Boolean variable.
+
+\inext{newcount}{\empty}{+-}
+
+The counters \db apSIGN , \db apE , \db apTOT, \db apFRAC and \db apEX
+are declared here:
+
+\inext{newcount}{\empty}{+-}
+
+Somebody sometimes sets the "@" character to the special catcode. But we
+need to be sure that there is normal catcode of the "@" character.
+
+\inext{catcode}{}{++}
+
+
+\subsec Evaluation of the Expression
+
+Suppose the following expression "\A+\B*(\C+\D)+\E" as an example.
+
+The main task of the "\evaldef\x{\A+\B*(\C+\D)+\E}" is to prepare the macro
+"\tmpb" with the content (in this example)
+"\apPLUS{\apPLUS{\A}{\apMUL{\B}{\apPLUS{\C}{\D}}}}{\E}" and to execute the "\tmpb"
+macro.
+
+The expression scanner adds the "\limits" at the end of the expression and
+reads from left to right the couples ``operand, operator''. For our example:
+"\A+", "\B*", "\C+", "\D+" and "\E\limits". The "\limits" operator has the
+priority 0, plus, minus have priority 1, "*"~and~"/" have priority 2 and "^"
+has priority 3. The brackets are ignored, but each occurrence of the opening
+bracket "(" increases priority by 4 and each occurrence of closing bracket
+")" decreases priority by~4. The scanner puts each couple including its
+current priority to the stack and does a test at the top of the stack. The
+top of the stack is executed if the priority of the top operator is less or
+equal the previous operator priority. For our example the stack is only
+pushed without execution until "\D+" occurs. Our example in the stack looks
+like:
+
+\begtt
+ \D + 1 1<=5 exec:
+ \C + 5 {\C+\D} + 1 1<=2 exec:
+ \B * 2 \B * 2 {\B*{\C+\D}} + 1 1<=1 exec:
+ \A + 1 \A + 1 \A + 1 {\A+{\B*{\C+\D}}} + 1
+bottom 0 bottom 0 bottom 0 bottom 0
+\endtt
+%
+Now, the priority on the top is greater, then scanner pushes next couple and
+does the test on the top of the stack again.
+
+\begtt
+ \E \limits 0 0<=1 exec:
+ {\A+{\B*{\C+\D}}} + 1 {{\A+{\B*{\C+\D}}}+\E} \end 0 0<=0 exec:
+ bottom 0 bottom 0 RESULT
+\endtt
+Let $p_t$, $p_p$ are the priority on the top and the previous
+priority in the stack. Let $v_t$, $v_p$ are operands on the top and in the
+previous line in the stack, and the same notation is used for operators
+$o_t$ and $o_p$. If $p_t\le p_p$ then: pop the stack twice, create composed
+operand $v_n=v_p \, o_p \, v_t$ and push $v_n$, $o_t$, $p_t$. Else
+push new couple ``operand, operator'' from the expression scanner.
+In both cases try to execute the top of the stack again.
+If the bottom of the stack is reached then the last operand is the result.
+
+The \db evaldef and \db evalmdef macros are protected by
+"\relax". It means that it can be used
+inside an "<expression>" as a ``function-like'' macro, but I don't imagine
+any usual application of this. The "\apEVALa" is executed.
+
+\inext{evaldef}{evalmdef}{++}
+
+The macro \db apEVALa "{<final-step>}<sequence>{<expression>}" runs the evaluation of the
+expression in the group. The base priority is initialized by "\apnumA=0",
+then "\apEVALb<expression>\limits" scans the expression and saves the
+result in the form "\apPLUS{\A}{\apMUL{\B}{\C}}" (etc.) into the "\tmpb" macro. This
+macro is executed. The group is finished by "\apEND" macro, which keeps the
+"\OUT", "\apSIGN" and "\apE" values unchanged. Then "<final-step>" is executed and
+finally, the defined "<sequence>" is set equivalent to the \db OUT macro.
+
+\inext{apEVALa}{}{++}
+
+The scanner is in one of the two states: reading operand or reading operator.
+The first state is initialized by \db apEVALb which follows to the
+"\apEVALc". The \db apEVALc reads one token and switches by its value.
+If the value is a "+" or "-" sign, it is assumed to be the part of the
+operand prefix. Plus sign is ignored (and "\apEVALc" is run again),
+minus signs are accumulated into "\tmpa".
+
+The auxiliary macro \db apEVALd runs the following tokens to the "\fi", but
+first it closes the conditional and skips the rest of the macro "\apEVALc".
+
+\ilabel [eval:the] {ifx\nb the}
+\ilabel [eval:number] {ifx\nb number}
+\ilabel [eval:num] {apTESTdigit}
+\ilabel [eval:nonum] {apEVALg}
+\inext{apEVALb}{def\nb apEVALd}{++}
+
+If the next token is opening bracket, then the global priority is increased
+by 4 using the macro \db apEVALe. Moreover, if the sign before bracket
+generates the negative result, then the new multiplication (by $-1$)
+is added using "\apEVALp" to the operand stack.
+
+\inext{apEVALe}{^^B\cbrace}{++}
+
+If the next token is "\the" or "\number" primitives (see lines \cite[eval:the] and
+\cite[eval:number]), then one following token is
+assumed as \TeX{} register and these two tokens are interpreted as an operand.
+This is done by \db apEVALf. The operand is packed to the "\tmpb" macro.
+
+\inext{apEVALf}{}{++}
+
+If the next token is not a number (the "\apTESTdigit#1\iftrue" results like
+"\iffalse" at line~\cite[eval:num]) then we save
+the sign plus this token to the "\tmpb"
+at line~\cite[eval:nonum]
+and we do check of the following token by "\futurelet". The \db
+apEVALg is processed after that. The test is performed here if the following
+token is open brace (a macro with parameter). If this is true then this
+parameter is appended to "\tmpb" by \db apEVALh and the test about the
+existence of second parameter in braces is repeated by next "\futurelet".
+The result of this loop is stored into "\tmpb" macro which includes
+"<sign>" followed by "<token>" followed by all
+parameters in braces. This is considered as an operand.
+
+\inext{apEVALg}{def\nb apEVALh}{++}
+
+If the next token after the sign is a digit or a dot (tested in "\apEVALc"
+by "\apTESTdigit" at line~\cite[eval:num]), then there are two cases. The
+number includes the "E" symbol as a first symbol (this is allowed in
+scientific notation, mantissa is assumed to equal to one). The "\apEVALk"
+is executed in such case. Else the "\apEVALn" starts the reading the
+number.
+
+The first case with "E" letter in the number is solved by macros \db apEVALk
+and \db apEVALm. The number after "E" is read by "\apE=" and this number is
+appended to the "\tmpb" and the expression scanner skips to "\apEVALo".
+
+\inext{apEVALk}{def\nb apEVALm}{++}
+
+The second case (there is normal number) is processed by the macro \db
+apEVALn. This macro reads digits (token per token) and saves them to the
+"\tmpb". If the next token isn't digit nor dot then the second state of the
+scanner (reading an operator) is invoked by running "\apEVALo".
+If the "E" is found then the exponent is read to "\apE" and it is processed by
+"\apEVALm".
+
+\inext{apEVALn}{^^B\cbrace}{++}
+
+The reading an operator is done by the \db apEVALo macro. This is more
+simple because the operator is only one token. Depending on this token the
+macro \db apEVALp "<operator><priority>" pushes to the stack (by
+the macro "\apEVALpush") the value from "\tmpb", the "<operator"> and the priority
+increased by "\apnumA" (level of brackets).
+
+If there is a problem (level of brackets less than zero, level of brackets not
+equal to zero at the end of the expression, unknown operator) we print an
+error using "\apEVALerror" macro.
+
+The "\apNext" is set to "\apEVALb", i.~e.\ scanner returns back to the state of
+reading the operand. But exceptions exist: if the ")" is found then
+priority is decreased and the macro "\apEVALo" is executed again.
+If the end of the "<expression>" is found then the loop is ended by
+"\let\apNext=\relax".
+
+\inext{apEVALo}{\count=2 ^^B\cbrace}{++}
+
+The \db apEVALstack macro includes the stack, three items
+"{<operand>}{<operator>}{<priority>}" per level. Left part of the macro
+contents is the top of the stack. The stack is initialized with empty
+operand and operator and with priority zero. The dot here is only the ``total
+bottom'' of the stack.
+
+\inext{apEVALstack}{}{++}
+
+The macro \db apEVALpush "{<operand>}{<operator>}{<priority>}" pushes its
+parameters to the stack and runs "\apEVALdo<whole stack>@" to do the
+desired work on the top of the stack.
+
+\inext{apEVALpush}{^^B\cbrace}{++}
+
+Finally, the macro
+\db apEVALdo "{<vt>}{<ot>}{<pt>}{<vp>}{<op>}{<pp>}<rest of the stack>@"
+performs the execution described at the beginning of this section. The new
+operand "<vn>" is created as "<op>{vp}{vt}", this means
+"\apPLUS{<vp>}{<vt>}" for example. The operand is not executed now, only the
+result is composed by the normal \TeX{} notation. If the bottom of the stack
+is reached then the result is saved to the "\tmpb" macro. This macro is
+executed after group by the "\apEVALa" macro.
+
+\inext{apEVALdo}{^^B\cbrace}{++}
+
+The macro \db apEVALerror "<string>" prints an error message. We decide to
+be better to print only "\message", no "\errmessage". The "\tmpb" is
+prepared to create "\OUT" as "??" and the "\apNext" macro is set in order to skip
+the rest of the scanned "<expression>".
+
+\inext{apEVALerror}{^^B\cbrace}{++}
+
+The auxiliary macro \db apTESTdigit "<token>\iftrue" tests, if the given token is
+digit, dot or "E" letter.
+
+\inext{apTESTdigit}{^^B\cbrace}{++}
+
+
+\subsec Preparation of the Parameter
+
+All operands of "\apPLUS", "\apMINUS", "\apMUL", "\apDIV" and "\apPOW" macros are
+preprocessed by "\apPPa" macro. This macro solves (roughly speaking) the
+following tasks:
+
+\begitems
+\item * It partially expands (by "\expandafter") the parameter while "<sign>" is read.
+\item * The "<sign>" is removed from parameter and the appropriate "\apSIGN"
+ value is set.
+\item * If the next token after "<sign>" is "\relax" then the rest of the
+ parameter is executed in the group and the results "\OUT", "\apSIGN" and
+ "\apE" are used.
+\item * Else the number is read and saved to the parameter.
+\item * If the read number has the scientific notation "<mantissa>E<exponent>"
+ then only "<mantissa>" is saved to the parameter and "\apE" is set as
+ "<exponent>". Else "\apE" is zero.
+\enditems
+
+The macro \db apPPa "<sequence><parameter>" calls
+\db apPPb "<parameter>@<sequence>" and starts reading the
+"<parameter>". The result will be stored to the "<sequence>".
+
+Each token from "<sign>" is processed by three "\expandafter"s (because
+there could be "\csname...\endcsname"). It means that the
+parameter is partially expanded when "<sign>" is read. The "\apPPb" macro
+sets the initial value of "\tmpc" and "\apSIGN" and executes the macro
+\db apPPc "<parameter>@<sequence>".
+
+\inext{apPPa}{def\nb apPPd}{++}
+
+The "\apPPc" reads one token from "<sign>" and it is called recursively
+while there are "+" or "-" signs. If the read token is "+" or "-" then
+the \db apPPd closes conditionals and executes "\apPPc" again.
+
+If "\relax" is found then the rest of parameter is executed by the
+\db apPPe. The macro ends by \db apPPf "<result>@" and this macro
+reverses the sign if the result is negative and removes the minus sign
+from the front of the parameter.
+
+\inext{apPPe}{def\nb apPPf}{++}
+
+The \db apPPg "<parameter>@" macro is called when the "<sign>" was processed
+and removed from the input stream. The main reason of this macro is to
+remove trailing zeros from the left and to check, if there is the zero value
+written for example in the form "0000.000". When this macro is started then
+"\tmpc" is empty. This is a flag for removing trailing zeros. They are simply
+ignored before decimal point. The "\apPPg" is called again by \db apPPh
+macro which removes the rest of "\apPPg" macro and closes the conditional.
+If the decimal point is found then next zeros are accumulated to the "\tmpc".
+If the end of the parameter "@" is found and we are in the ``removing zeros
+state'' then the whole value is assumed to be zero and this is processed by
+"\apPPi @". If another digit is found (say 2) then there are two
+situations: if the "\tmpc" is non-empty, then the digit is appended to the
+"\tmpc" and the "\apPPi<expanded tmp>" is processed (say "\apPPi .002")
+followed by the rest of the parameter. Else the digit itself is stored to
+the "\tmpc" and it is returned back to the input stream (say "\apPPi"~"2")
+followed by the rest of the parameter.
+
+\inext{apPPg}{def\nb apPPh}{++}
+
+The macro \db apPPi "<parameter without trailing zeros>@<sequence>"
+switches to two cases: if the execution of the parameter was processed then
+the "\OUT" doesn't include "E" notation and we can simply define
+"<sequence>" as the "<parameter>" by the \db apPPj macro. This saves the
+copying of the (possible) long result to the input stream again.
+
+If the executing of the parameter was not performed, then we need to test
+the existence of the "E" notation of the number by the \db apPPk macro. We
+need to put the "<parameter>" to the input stream and to use \db apPPl to
+test these cases. We need to remove unwanted "E" letter by the \db apPPm macro.
+
+\inext{apPPi}{def\nb apPPm}{++}
+
+The \db apPPn "<param>" macro does the same as "\apPPa\OUT{<param>}",
+but the minus sign is returned back to the "\OUT" macro if the result is
+negative.
+
+\inext{apPPn}{}{++}
+
+The \db apPPab "<macro>{<paramA>}{<paramB>}" is used for parameters of
+all macros "\apPLUS", "\apMUL" etc. It
+prepares the "<paramA>" to "\tmpa", "<paramB>" to "\tmpb", the sign and
+"<decimal exponent>" of "<paramA>" to the "\apSIGNa" and "\apEa", the same
+of "<paramB>" to the "\apSIGNa" and "\apEa". Finally, it executes the
+"<macro>".
+
+\inext{apPPab}{^^B\cbrace}{++}
+
+The \db apPPs "<macro><sequence>{<param>}" prepares parameters for "\apROLL",
+"\apROUND" and "\apNORM" macros. It saves the "<param>" to the "\tmpc" macro,
+expands the "<sequence>" and runs the macro
+\db apPPt \unskip~"<macro><expanded sequence>.@<sequence>". The macro "\apPPt"
+reads first token from the "<expanded sequence>" to "#2". If "#2" is minus
+sign, then "\apnumG=-1". Else
+"\apnumG=1". Finally the "<macro><expanded sequence>.@<sequence>"
+is executed (but without the minus sign in the input stream).
+If "#2" is zero then \db apPPu "<macro><rest>.@<sequence>" is executed. If
+the "<rest>" is empty, (i.~e.\ the parameter is simply zero) then "<macro>"
+isn't executed because there in nothing to do with zero number as a parameter of
+"\apROLL", "\apROUND" or "\apNORM" macros.
+
+\inext{apPPs}{\count=2 ^^B\cbrace}{++}
+
+
+\subsec Addition and Subtraction
+
+The significant part of the optimization in "\apPLUS", "\apMUL", "\apDIV" and
+"\apPOW" macros
+is the fact, that we don't treat with single decimal digits but with their
+quartets. This means that we are using the numeral system with the base
+10000 and we calculate four decimal digits in one elementary operation. The
+base was chosen $10^4$ because the multiplication of such numbers gives
+results less than $10^8$ and the maximal number in the \TeX{} register
+is about $2\cdot10^9$. We'll use the word ``Digit'' (with capitalized D) in
+this documentation if this means the digit in the numeral system with base
+10000, i.~e.\ one Digit is four digits.
+Note that for addition we can use the numeral system with the base $10^8$
+but we don't do it, because the auxiliary macros "\apIV*" for numeral system of the
+base $10^4$ are already prepared.
+
+Suppose the following example (the spaces between Digits are here only for
+more clarity).
+
+\begtt
+ 123 4567 8901 9999 \apnumA=12 \apnumE=3 \apnumD=16
++ 22.423 \apnumB=0 \apnumF=2 \apnumC=12
+--------------------------
+sum in reversed order and without transmissions:
+ {4230}{10021}{8901}{4567}{123} \apnumD=-4
+sum in normal order including transmissions:
+ 123 4567 8902 0021.423
+\endtt
+
+In the first pass, we put the number with more or equal Digits before decimal
+point above the second number. There are three Digits more in the example.
+The "\apnumC" register saves this information (multiplied by 4). The first
+pass creates the sum in reversed order without transmissions between Digits.
+It simply copies the "\apnumC/4" Digits from the first number to the result in reversed
+order. Then it does the sums of Digits without transmissions. The "\apnumD"
+is a relative position of the decimal point to the edge of the calculated
+number.
+
+The second pass reads the result of the first pass, calculates transmissions and
+saves the result in normal order.
+
+The first Digit of the operands cannot include four digits. The number of
+digits in the first Digit is saved in "\apnumE" (for first operand) and in
+"\apnumF" (for second one). The rule is to have the decimal point between
+Digits in all circumstances.
+
+The \db apPLUS and \db apMINUS macros prepare parameters using "\apPPab" and execute "\apPLUSa":
+
+\inext{apPLUS}{apMINUS}{++}
+
+The macro \db apPLUSa does the following work:
+
+\ilabel[plus:apE] {apEa}
+\ilabel[plus:DIGa] {apDIG\nb tmpa}
+\ilabel[plus:DIGb] {apDIG\nb tmpb}
+\ilabel[plus:moda] {-\nb apnumE}
+\ilabel[plus:modb] {-\nb apnumF}
+\ilabel[plus:apnC] {apnumC=}
+\ilabel[plus:xA] {apSIGNa}
+\ilabel[plus:xB] {apSIGNb}
+\ilabel[plus:sg] {apSIGN=}
+\ilabel[plus:xAm] {PLUSxA-}
+\ilabel[plus:ba] {apPLUSg}
+\ilabel[plus:bb] {apnumC=-}
+\ilabel[plus:G] {apnumG=0}
+\ilabel[plus:next] {apNext=}
+\ilabel[plus:X] {apnumX=0}
+\ilabel[plus:fa] {00123}
+\ilabel[plus:fb] {apPLUSy}
+
+\begitems
+\item * It gets the operands in "\tmpa" and "\tmpb" macros using the "\apPPab".
+\item * If the scientific notation is used and the decimal
+ exponents "\apEa" and "\apEb" are not equal then the decimal point of one
+ operand have to be shifted (by the macro "\apPLUSxE" at line~\cite[plus:apE]).
+\item * The digits before decimal point are calculated for both operands by
+ the "\apDIG" macro. The first result is saved to "\apnumA" and the second
+ result is saved to "\apnumB". The "\apDIG" macro removes decimal point (if
+ exists) from the parameters (lines~\cite[plus:DIGa] and~\cite[plus:DIGb]).
+\item * The number of digits in the first Digit is calculated by "\apIVmod"
+ for both operands. This number is saved to "\apnumE" and "\apnumF". This
+ number is subtracted from "\apnumA" and "\apnumB", so these
+ registers now includes multiply of four
+ (lines~\cite[plus:moda] and~\cite[plus:modb]).
+\item * The "\apnumC" includes the difference of Digits before the decimal
+ point (multiplied by four) of given operands
+ (line~\cite[plus:apnC]).
+\item * If the first operand is negative then the minus sign is inserted to
+ the \db apPLUSxA macro else this macro is empty. The same for the second
+ operand and for the macro \db apPLUSxB is done
+ (lines~\cite[plus:xA] and~\cite[plus:xB]).
+\item * If both operands are positive, then the sign of the result "\apSIGN"
+ is set to one. If both operands are negative, then the sign is set to $-1$.
+ But in both cases mentioned above we will do (internally) addition, so the
+ macros "\apPLUSxA" and "\apPLUSxB" are set to empty.
+ If one operand is negative and second positive then we will do
+ subtraction. The "\apSIGN" register is set to zero and
+ it will set to the right value later
+ (lines~\cite[plus:sg] to~\cite[plus:xAm]).
+\item * The macro "\apPLUSb<first op><first dig><second op><second dig><first Dig>"
+ does the calculation of the first pass. The "<first op>" has to have more
+ or equal Digits before decimal point than "<second op>". This is reason why
+ this macro is called in two variants dependent on the value "\apnumC".
+ The macros "\apPLUSxA" and "\apPLUSxB" (with the sign of the operands) are
+ exchanged (by the "\apPLUSg") if the operands are exchanged
+ (lines~\cite[plus:ba] to~\cite[plus:bb]).
+\item * The "\apnumG" is set by the macro "\apPLUSb" to the sign of the
+ first nonzero Digit. It is equal to zero if there are only zero Digits after
+ first pass. The result is zero in such case and we do nothing more
+ (line~\cite[plus:G]).
+\item * The transmission calculation is different for addition and
+ subtraction. If the subtraction is processed then the sign of the result
+ is set (using the value "\apnumG") and the "\apPLUSm" for transmissions is
+ prepared. Else the "\apPLUSp" for transmissions is prepared as the "\apNext" macro
+ (line~\cite[plus:next])
+\item * The result of the first pass is expanded in the input stream and the
+ "\apNext" (i.~e.\ transmissions calculation) is activated at line~\cite[plus:X].
+\item * if the result is in the form ".000123", then the decimal point and
+ the trailing zeros have to be inserted. Else the trailing zeros from the
+ left side of the result have to be removed by "\apPLUSy". This macro adds
+ the sign of the result too
+ (lines~\cite[plus:fa] to~\cite[plus:fb])
+\enditems
+
+\inext{apPLUSa}{^^B\cbrace}{++}
+
+The macro \db apPLUSb "<first op><first dig><second op><second dig><first Dig>"
+starts the first pass. The "<first op>" is the first operand (which have
+more or equal Digits before decimal point). The "<first dig>" is the number
+of digits in the first Digit in the first operand. The "<second op>" is the
+second operand and the "<second dig>" is the number of digits in the first
+Digit of the second operand. The "<first Dig>" is the number of Digits
+before decimal point of the first operand, but without the first Digit and
+multiplied by~4.
+
+The macro"\apPLUSb" saves the second operand to "\tmpd" and appends the
+$4-{}$"<second dig>" empty parameters before this operand in order to
+read desired number of digits to the first Digit of this oparand.
+The macro "\apPLUSb" saves the first operand to the input queue after
+"\apPLUSc" macro. It inserts the appropriate number of empty parameters (in
+"\tmpc") before this operand in order to read the right number of digits in
+the first attempt. It appends the "\apNL" marks to the end in order to
+recognize the end of the input stream. These macros expands simply to zero
+but we can test the end of input stream by "\ifx".
+
+The macro "\apPLUSb" calculates the number of digits before decimal point
+(rounded up to multiply by 4) in "\apnumD" by advancing "<first DIG>" by~4.
+It initializes "\apnumZ" to zero. If the first nonzero Digit will be found
+then "\apnumZ" will be set to this Digit in the "\apPLUSc" macro.
+
+\inext{apPLUSb}{^^B\cbrace}{++}
+
+The macro \db apPLUSc is called repeatedly. It reads one Digit from input
+stream and saves it to the "\apnumY". Then it calls the \db apPLUSe, which
+reads (if it is allowed, i.~e.\ if "\apnumC"{\tt\char`<}"=0") one digit from
+second operand "\tmpd" by the "\apIVread" macro.
+Then it does the addition of these digits and saves the result
+into the "\OUT" macro in reverse order.
+
+Note, that the sign "\apPLUSxA" is used when "\apnumY" is read and the sign
+"\apPLUSxB" is used when advancing is performed. This means that we are
+doing addition or subtraction here.
+
+If the first nonzero Digit is reached, then the macro \db apPLUSh sets the
+sign of the result to the "\apnumG" and (maybe) exchanges the "\apPLUSxA"
+and "\apPLUSxB" macros (by the \db apPLUSg macro)
+in order to the internal result of the subtraction will be always non-negative.
+
+If the end of input stream is reached, then "\apNext" (used at line~\cite[plus:nn])
+is reset from its original value "\apPLUSc" to the \db apPLUSd where the
+"\apnumY" is simply set to zero. The reading from input stream is finished.
+This occurs when there are more Digits after decimal point in the second
+operand than in the first one. If the end of input stream is reached and the
+"\tmpd" macro is empty (all data from second operand was read too) then the
+\db apPLUSf macro removes the rest of input stream and the first pass of the
+calculation is done.
+
+\ilabel[plus:nn] {apNext^^E}
+\inext{apPLUSc}{def\nb apPLUSh}{++}
+
+Why there is a complication about reading one parameter from input stream
+but second one from the macro "\tmpd"? This is more faster than to save both
+parameters to the macros and using "\apIVread" for both because the
+"\apIVread" must redefine its parameter. You can examine that this
+parameter is very long.
+
+The \db apPLUSm "<data>@" macro does transmissions calculation when
+subtracting. The "<data>" from first pass is expanded in the input stream.
+The "\apPLUSm" macro reads repeatedly one Digit from the "<data>" until the
+stop mark is reached. The Digits are in the range $-9999$ to $9999$. If the
+Digit is negative then we need to add $10000$ and set the transmission value
+"\apnumX" to one, else "\apnumX" is zero. When the next Digit is processed then
+the calculated transmission value is subtracted. The macro "\apPLUSw" writes
+the result for each Digit "\apnumA" in the normal (human readable) order.
+
+\inext{apPLUSm}{^^B\cbrace}{++}
+
+
+The \db apPLUSp "<data>@" macro does transmissions calculation when
+addition is processed. It is very similar to"\apPLUSm", but Digits are in
+the range $0$ to $19998$. If the Digit value is greater then $9999$ then we
+need to subtract $10000$ and set the transmission value "\apnumX" to one,
+else "\apnumX" is zero.
+
+\inext{apPLUSp}{^^B\cbrace}{++}
+
+The \db apPLUSw writes the result with one Digit (saved in "\apnumA") to the
+"\OUT" macro. The "\OUT" is initialized as empty. If it is empty (it means
+we are after decimal point), then we need to write all four digits by
+"\apIVwrite" macro (including left zeros) but we need to remove right zeros
+by "\apREMzerosR". If the decimal point is reached, then it is saved to the
+"\OUT". But if the previous "\OUT" is empty (it means there are no digits
+after decimal point or all such digits are zero) then "\def\OUT{\empty}"
+ensures that the "\OUT" is non-empty and the ignoring of right zeros are
+disabled from now.
+
+\inext{apPLUSw}{^^B\cbrace}{++}
+
+The macro \db apPLUSy "<expanded OUT>@" removes left trailing zeros from the
+"\OUT" macro and saves the possible minus sign by the \db apPLUSz macro.
+
+\inext{apPLUSy}{def\nb apPLUSz}{++}
+
+The macro \db apPLUSxE uses the "\apROLLa" in order to shift the decimal
+point of the operand. We need to set the same decimal exponent in scientific
+notation before the addition or subtraction is processed.
+
+\inext{apPLUSxE}{^^B\cbrace}{++}
+
+\subsec Multiplication
+
+Suppose the following multiplication example: "1234*567=699678".
+
+\def\begtthook{\lccode`~=`\ \lowercase{\def~{\ }}}
+\begtt
+ Normal format: | Mirrored format:
+ 1 2 3 4 * | 4 3 2 1 *
+ 5 6 7 | 7 6 5
+ ---------------- | -----------------
+*7: 7 14 21 28 | *7: 28 21 14 7
+*6: 6 12 18 24 | *6: 24 18 12 6
+*5: 5 10 15 20 | *5: 20 15 10 5
+ ---------------- | -----------------
+ 6 9 9 6 7 8 | 8 7 6 9 9 6
+\endtt
+
+This example is in numeral system of base 10 only for simplification, the
+macros work really with base 10000.
+Because we have to do the transmissions between Digit positions
+from right to left in the normal format and because it is more natural for
+\TeX{} to put the data into the input stream and
+read it sequentially from left to right, we use the mirrored format in our
+macros.
+
+The macro \db apMUL prepares parameters using "\apPPab" and executes "\apMULa"
+
+\inext{apMUL}{}{++}
+
+The macro \db apMULa does the following:
+
+\ilabel[mul:apE] {apE}
+\ilabel[mul:sgn] {apSIGN}
+\ilabel[mul:sgn0] {apSIGN=0}
+\ilabel[mul:diga] {apDIG\nb tmpa}
+\ilabel[mul:digb] {apnumD=}
+\ilabel[mul:ba] {apIVmod}
+\ilabel[mul:bb] {tmpc}
+\ilabel[mul:b] {*.}
+\ilabel[mul:ca] {tmpb^^E}
+\ilabel[mul:cb] {apMULc}
+\ilabel[mul:d] {apMULd}
+\ilabel[mul:g] {apMULg}
+\ilabel[mul:z] {0-}
+\ilabel[mul:zz] {tmpa\nb OUT}
+
+\begitems
+\item * It gets the parameters in "\tmpa" and "\tmpb" preprocessed using
+ the "\apPPab" macro.
+\item * It evaluates the exponent of ten "\apE" which is usable when
+ the scientific notation of numbers is used
+ (line~\cite[mul:apE]).
+\item * It calculates "\apSIGN" of the result
+ (line~\cite[mul:sgn]).
+\item * If "\apSIGN=0" then the result is zero and we will do nothing more
+ (line~\cite[mul:sgn0]).
+\item * The decimal point is removed from the parameters by
+ "\apDIG<param><register>". The "\apnumD" includes the number of digits
+ before decimal point (after the "\apDIG" is used) and the
+ "<register>" includes the number of digits in the rest. The "\apnumA"
+ or "\apnumB" includes total number of digits in the parameters "\tmpa" or
+ "\tmpb" respectively. The "\apnumD" is re-calculated: it saves the number
+ of digits after decimal point in the result
+ (lines~\cite[mul:diga] to~\cite[mul:digb]).
+\item *
+ Let $A$ is the number of total digits in the "<param>" and let
+ $F=A \mathrel{\rm mod} 4$, but if $F=0$ then reassign it to $F=4$. Then $F$
+ means the number of digits in the first Digit. This calculation
+ is done by "\apIVmod<A><F>" macro. All another Digits will have four digits.
+ The "\apMULb<param>@@@@" is able to read four digits, next four digits
+ etc. We need to insert appropriate number of empty parameters before the "<param>".
+ For example "\apMULb{}{}{}<param>@@@@" reads first only one digit from "<param>",
+ next four digits etc. The appropriate number of empty parameters are prepared in
+ the "\tmpc" macro
+ (lines~\cite[mul:ba] to~\cite[mul:bb]).
+\item * The "\apMULb" reads the "<paramA>" (all Digits) and
+ prepares the "\OUT" macro in the special interleaved format
+ (described below). The format is finished by "*." in the line~\cite[mul:b].
+\item * Analogical work is done with the second parameter "<paramB>". But this
+ parameter is processed by "\apMULc", which reads Digits of the parameter
+ and inserts them to the "\tmpa" in the reversed order
+ (lines~\cite[mul:ca] to~\cite[mul:cb]).
+\item * The main calculation is done by "\apMULd<paramB>@", which reads Digits
+ from "<paramB>" (in reversed order) and does multiplication of the
+ "<paramA>" (saved in the "\OUT") by these Digits
+ (line~\cite[mul:d]).
+\item * The "\apMULg" macro converts the result "\OUT" to the human
+ readable form
+ (line~\cite[mul:g]).
+\item * The possible minus sign and the trailing zeros of results of the
+ type ".00123" is prepared by "\apADDzeros\tmpa" to the "\tmpa" macro.
+ This macro is appended to the result in the "\OUT" macro
+ (lines~\cite[mul:z] to~\cite[mul:zz]).
+\enditems
+
+\inext{apMULa}{^^B\cbrace}{++}
+
+We need to read the two data streams when the multiplication of the "<paramA>"
+by one Digit from "<paramB>" is performed and the partial sum is
+actualized. First: the digits of the "<paramA>" and second: the partial sum.
+We can save these streams to two macros and read one piece of information
+from such macros at each step, but this si not effective because the whole
+stream have to be read and redefined at each step. For \TeX{} is more
+natural to put one data stream to the input queue and to read pieces of
+infromation thereof. Thus we interleave both
+data streams into one "\OUT" in such a way that one element of data from first
+stream is followed by one element from second stream and it is followed by second
+element from first stream etc. Suppose that we are at the end of $i-th$ line
+of the multiplication scheme where we have the partial sums $s_n, s_{n-1},
+\ldots, s_0$ and the Digits of "<paramA>" are $d_k, d_{k-1}, \ldots, d_0$.
+The zero index belongs to the most right position in the mirrored format.
+The data will be prepared in the form:
+
+\begtt
+. {s_n} {s_(n-1)}...{s_(k+1)} * {s_k} {d_(k-1)}...{s_1} {d_1} {s_0} {d_0} *
+\endtt
+%
+For our example (there is a simplification: numeral system of base 10 is
+used and no transmissions are processed), after second line (multiplication by 6 and
+calculation of partial sums) we have in "\OUT":
+
+\begtt
+. {28} * {45} {4} {32} {3} {19} {2} {6} {1} *
+\endtt
+%
+and we need to create the following line during calculation of next line
+of multiplication scheme:
+
+\begtt
+. {28} {45} * {5*4+32} {4} {5*3+19} {3} {5*2+6} {2} {5*1} {1} *
+\endtt
+%
+This special format of data includes two parts. After the starting dot,
+there is a sequence of sums which are definitely calculated. This sequence
+is ended by first "*" mark. The last definitely calculated sum follows this
+mark. Then the partial sums with the Digits of "<paramA>" are interleaved
+and the data are finalized by second "*". If the calculation processes the
+the second part of the data then the general task is to read two data
+elements (partial sum and the Digit) and to write two data elements (the new
+partial sum and the previous Digit). The line calculation starts by copying
+of the first part of data until the first "*" and
+appending the first data element after "*". Then the "*" is written and the
+middle processing described above is started.
+
+The macro \db apMULb "<paramA>@@@@" prepares the special format of the macro
+"\OUT" described above where the partial sums are zero. It means:
+
+\begtt
+* . {d_k} 0 {d_(k-1)} 0 ... 0 {d_0} *
+\endtt
+%
+where $d_i$ are Digits of "<paramA>" in reversed order.
+
+The first ``sum'' is only dot. It will be
+moved before "*" during the first line processing.
+Why there is such special ``pseudo-sum''? The "\apMULe" with the parameter
+delimited by the first "*" is used in the context
+"\apMULe.{<sum>}*" during the third line processing
+and the dot here protects from removing the braces around the first real sum.
+
+\inext{apMULb}{^^B\cbrace}{++}
+
+The macro \db apMULc "<paramB>@@@@" reads Digits from "<paramB>" and saves
+them in reversed order into "\tmpa". Each Digit is enclosed by \TeX{} braces
+"{}".
+
+\inext{apMULc}{}{++}
+
+The macro \db apMULd "<paramB>@" reads the Digits from "<paramB>"
+(in reversed order),
+uses them as a coefficient for multiplication stored in "\tmpnumA" and
+processes the "\apMULe <special data format>" for each such coefficient.
+This corresponds with one line in the multiplication scheme.
+
+\inext{apMULd}{^^B\cbrace}{++}
+
+The macro \db apMULe "<special data format>" copies the first part of data
+format to the "\OUT", copies the next element after first "*", appends "*"
+and does the calculation by "\apMULf". The \db apMULf is recursively
+called. It reads the Digit to "#1" and the partial sum to the "#2" and
+writes "{\appnumA*#1+#2}{#1}" to the "\OUT" (lines~\cite[mul:f1] to~\cite[mul:f2]).
+If we are at the end of data, then
+"#2" is "*" and we write the "{\apnumA*#1}{#1}" followed by ending "*" to the
+"\OUT" (lines~\cite[mul:f3] to~\cite[mul:f4]).
+
+\ilabel[mul:f1] {2^^E}
+\ilabel[mul:f2] {expandafter\nb apMULf}
+\ilabel[mul:f3] {ifx*}
+\ilabel[mul:f4] {fi*}
+\ilabel[mul:f5] {MULf0}
+\inext{apMULe}{^^B\cbrace}{++}
+
+\noindent
+There are several complications in the algorithm described above.
+
+\begitems
+\item * The result isn't saved directly to the "\OUT"
+ macro, but partially into the macros "\apOUT:<num>", as described in the
+ section~\inumref[aux] where the "\apOUTx" macro is defined.
+\item * The transmissions between Digit positions are calculated.
+ First, the transmission value "\apnumX" is set to zero in the "\apMULe".
+ Then this value is subtracted from the calculated value "\apnumB" and
+ the new transmission is calculated using the "\apIVtrans" macro
+ if "\apnumB"${}\ge10000$. This macro modifies "\apnumB" in order it is right
+ Digit in our numeral system.
+\item * If the last digit has nonzero transmission, then the calculation
+ isn't finished, but the new pair "{<transmission>}{0}" is added to the
+ "\OUT". This is done by recursively call of "\apMULf" at line~\cite[mul:f5].
+\item * The another situation can be occurred: the last pair has both values
+ zeros. Then we needn't to write this zero to the output. This is solved by
+ the test "\ifnum\the\apnumB#1=0" at line~\cite[mul:f4].
+\enditems
+
+The macro \db apMULg "<special data format>@" removes the first dot
+(it is the "#1" parameter) and prepares the "\OUT" to writing the result in
+reverse order, i.~e. in human readable form. The next work is done by
+"\apMULh" and "\apMULi" macros. The \db apMULh repeatedly reads the first part of the
+special data format (Digits of the result are here) until the first "*"
+is found. The output is stored by
+"\apMULo<digits>{<data>}" macro. If the first "*" is found then the
+\db apMULi macro repeatedly reads the triple
+"{<Digit of result>}{<Digit of A>}{<next Digit of result>}" and saves the first
+element in full (four-digits) form by the "\apIVwrite" if the third element
+isn't the stop-mark "*". Else the last Digit (first Digit in the human
+readable form) is saved by "\the", because we needn't the trailing zeros
+here. The third element is put back to the input stream but it is ignored by
+\db apMULj macro when the process is finished.
+
+\inext{apMULg}{def\nb apMULj}{++}
+
+The \db apMULo "<digits>{<data>}" appends "<data>" to the "\OUT" macro.
+The number of digits after decimal point "\apnumD" is decreased by the
+number of actually printed digits "<digits>". If the decimal point is to be
+printed into "<data>" then it is performed by the \db apMULt macro.
+
+\inext{apMULo}{def\nb apMULt}{++}
+
+\subsec Division
+
+Suppose the following example:
+
+\begtt
+ <paramA> : <paramB> <output>
+ 12345:678 = [12:6=2] 2 (2->1)
+2*678 -1356
+ -1215 <0 correction! 1
+ 12345
+1*678 -678
+ 5565 [55:6=8] 9 (9->8)
+9*678 -6102
+ -537 <0 correction! 8
+ 5565
+8*678 -5424
+ 1410 [14:6=2] 2
+2*678 -1356
+ 0540 [05:6=0] 0
+0*678 -0
+ 5400 [54:6=8] 9 (2x correction: 9->8, 8->7)
+ ...
+ 12345:678 = 182079...
+\endtt
+
+We implement the division similar like pupils do it in the school (only the
+numeral system with base 10000 instead 10 is actually used, but we keep with
+base 10 in our illustrations). At each step of the operation, we get first
+two Digits from the dividend or remainder (called partial dividend or
+remainder) and do divide it by the first nonzero Digit of the divisor (called partial
+divisor). Unfortunately, the resulted Digit cannot be the definitive value
+of the result. We are able to find out this after the whole divisor is
+multiplied by resulted Digit and compared with the whole remainder. We
+cannot do this test immediately but only after a lot of following
+operations (imagine that the remainder and divisor have a huge number of Digits).
+
+We need to subtract the remainder by the multiple of the divisor at each
+step. This means that we need to calculate the transmissions from the Digit
+position to the next Digit position from right to left (in the scheme
+illustrated above). Thus we need to reverse the order of Digits
+in the remainder and divisor. We do this reversion only once at the
+preparation state of the division and we interleave the data from the
+divisor and the dividend (the dividend will be replaced by the remainder,
+next by next remainder etc.).
+
+The number of Digits of the dividend can be much greater than the number of
+Digits of the divisor. We need to calculate only with the first part of
+dividend/remainder in such case. We need to get only one new Digit from the
+rest of dividend at each calculation step. The illustration follows:
+
+\begtt
+...used dividend.. | ... rest of dividend ... | .... divisor ....
+1234567890123456789 7890123456789012345678901234 : 1231231231231231231
+ xxxxxxxxxxxxxxxxxx 7 <- calculated remainder
+ xxxxxxxxxxxxxxxxx x8 <- new calculated remainder
+ xxxxxxxxxxxxxxxx xx9 <- new calculated remainder etc.
+\endtt
+
+We'll interleave only the ``used dividend'' part with the divisor at the
+preparation state. We'll put the ``rest of dividend'' to the input stream in
+the normal order. The macros do the iteration over calculation steps and
+they can read only one new Digit from this input stream if they need it.
+This approach needs no manipulation with the (potentially long) ``rest of the
+dividend'' at each step. If the divisor has only one Digit (or comparable small Digits)
+then the algorithm has only linear complexity with respect to the number of
+Digits in the dividend.
+
+The numeral system with the base 10000 brings a little problem: we are
+simply able to calculate the number of digits which are multiple of four. But
+user typically wishes another number of calculated decimal digits. We cannot
+simply strip the trailing digits after calculation because the user needs to
+read the right remainder. This is a reason why we calculate the number of
+digits for the first Digit of the result. All another
+calculated Digits will have four digits. We need to prepare the first
+``partial dividend'' in order to the $F$ digits will be calculated first.
+How to do it? Suppose the following illustration of the first two Digits in the
+``partial remainder'' and ``partial divisor'':
+
+\begtt
+0000 7777 : 1111 = 7 .. one digit in the result
+0007 7778 : 1111 = 70 .. two digits in the result
+0077 7788 : 1111 = 700 .. three digits in the result
+0777 7888 : 1111 = 7000 .. four digits in the result
+7777 8888 : 1111 = ???? .. not possible in the numeral system of base 10000
+\endtt
+%
+We need to read $F-1$ digits to the first Digit and four digits to the
+second Digit of the ``partial dividend''. But this is true only if the
+dividend is ``comparably greater or equal to'' divisor. The word
+``comparably greater'' means that we ignore signs and the decimal point in
+compared numbers and we assume the decimal points in the front of both
+numbers just before the first nonzero digit. It is obvious that if the
+dividend is ``comparably less'' than divisor then we need to read $F$ digits
+to the first Digit.
+
+The macro \db apDIV runs \db apDIVa macro which
+uses the "\tmpa" (dividend) and "\tmpb" (divisor)
+macros and does the following work:
+
+\ilabel[div:0] {SIGNb=0}
+\ilabel[div:sgn] {SIGN=}
+\ilabel[div:a0] {SIGNa=0}
+\ilabel[div:ape] {apE=}
+\ilabel[div:diga] {apDIG}
+\ilabel[div:digb] {advance\nb apnumD}
+\ilabel[div:comp] {DIVcomp}
+\ilabel[div:ifap] {ifapX}
+\ilabel[div:ca] {apnumC=}
+\ilabel[div:cb] {ifnum\nb apnumC}
+\ilabel[div:h] {advance\nb apnumH}
+\ilabel[div:F] {apIVmod}
+\ilabel[div:rb] {apIVread\nb tmpb}
+\ilabel[div:ra] {apIVreadX}
+\ilabel[div:rc] {apIVread\nb tmpa}
+\ilabel[div:xa] {apDIVxA}
+\ilabel[div:xb] {apDIVxB}
+\ilabel[div:xout] {edef\nb XOUT}
+\ilabel[div:outa] {edef\nb OUT}
+\ilabel[div:outb] {apADDzeros}
+\ilabel[div:z] {apnumZ=}
+\ilabel[div:next] {apNext=}
+\ilabel[div:add] {apnumZ=\nb apnumD}
+\ilabel[div:rema] {apDIVv}
+\ilabel[div:remb] {apROLLa}
+
+\begitems
+\item * If the divisor "\tmpb" is equal to zero, print error and do nothing more
+ (line~\cite[div:0]).
+\item * The "\apSIGN" of the result is calculated
+ (line~\cite[div:sgn]).
+\item * If the dividend "\tmpa" is equal to zero, then "\OUT" and "\XOUT" are
+ zeros and do nothing more
+ (line~\cite[div:a0]).
+\item * Calculate the exponent of ten "\apE" when scientific notation is used
+ (Line~\cite[div:ape]).
+\item * The number of digits before point are counted by "\apDIG" macro
+ for both parameters. The difference is saved to "\apnumD" and this is the
+ number of digits before decimal point in the result (the exception is
+ mentioned later). The "\apDIG" macro removes the decimal point and
+ (possible) left zeros from its parameter and saves the result to the
+ "\apnumD" register
+ (lines~\cite[div:diga] to~\cite[div:digb]).
+\item * The macro "\apDIVcomp<paramA><paramB>" determines if the "<paramA>"
+ is ``comparably greater or equal'' to "<paramB>". The result is stored in
+ the boolean value "apX". We can ask to this by
+ the "\ifapX<true>\else<false>\fi" construction
+ (line~\cite[div:comp]).
+\item * If the dividend is ``comparably greater or equal'' to the divisor,
+ then the position of decimal point in the result "\apnumD" has to be shifted by one
+ to the right. The same is completed with "\apnumH" where the position of
+ decimal point of the remainder will be stored
+ (line~\cite[div:ifap]).
+\item * The number of desired digits in the result "\apnumC" is calculated
+ (lines~\cite[div:ca] to~\cite[div:cb]).
+\item * If the number of desired digits is zero or less than zero then do nothing more
+ (line~\cite[div:cb]).
+\item * Finish the calculation of the position of decimal point in the
+ remainder "\apnumH"
+ (line~\cite[div:h]).
+\item * Calculate the number of digits in the first Digit "\apnumF"
+ (line~\cite[div:F]).
+\item * Read first four digits of the divisor by the macro
+ "\apIVread<sequence>". Note that this macro puts trailing
+ zeros to the right if the data stream "<param>" is shorter than four
+ digits. If it is empty then the macro returns zero. The returned value is saved
+ in "\apnumX" and the "<sequence>" is redefined by new value of
+ the "<param>" where the read digits are removed
+ (line~\cite[div:rb]).
+\item * We need to read only "\apnumF" (or "\apnumF"${}-1$) digits from the
+ "\tmpa". This is done by the "\apIVreadX" macro at line~\cite[div:ra].
+ The second Digit of the ``partial dividend'' includes four digits and it
+ is read by "\apIVread" macro at line~\cite[div:rc].
+\item * The ``partial dividend'' is saved to the "\apDIVxA" macro and
+ the ``partial divisor'' is stored to the "\apDIVxB" macro. Note, that
+ the second Digit of the ``partial dividend'' isn't expanded by simply
+ "\the", because when "\apnumX=11" and "\apnumA=2222" (for example), then
+ we need to save "22220011". These trailing zeros from left are written by
+ the "\apIVwrite" macro
+ (lines~\cite[div:xa] to~\cite[div:xb]).
+\item * The "\XOUT" macro for the currently computed remainder is
+ initialized. The special
+ interleaved data format of the remainder "\XOUT" is described below
+ (line~\cite[div:xout]).
+\item * The "\OUT" macro is initialized.
+ The "\OUT" is generated as literal macro. First possible "<sign>", then digits.
+ If the number of effective digits before decimal point "\apnumD" is
+ negative, the result will be in the form ".000123" and we need to add the zeros
+ by the "\apADDzeros" macro
+ (lines~\cite[div:outa] to~\cite[div:outb]).
+\item * The registers for main loop are initialized. The "\apnumE"
+ signalizes that the remainder of the partial step is zero and we can stop
+ the calculation. The "\apnumZ" will include the Digit from the input
+ stream where the ``rest of dividend'' will be stored
+ (line~\cite[div:z]).
+\item * The main calculation loop is processed by the "\apDIVg" macro
+ (line~\cite[div:next]).
+\item * If the division process stops before the position of the decimal
+ point in the result (because there is zero remainder, for example) then we
+ need to add the rest of zeros by "\apADDzeros" macro. This is actual for the
+ results of the type "1230000"
+ (line~\cite[div:add]).
+\item * If the remainder isn't equal to zero, we need to extract the digits
+ of the remainder from the special data formal to the human readable
+ form. This is done by the "\apDIVv" macro. The decimal point is inserted
+ to the remainder by the "\apROLLa" macro
+ (lines~\cite[div:rema] to~\cite[div:remb]).
+\enditems
+
+\inext{apDIVa}{^^B\cbrace}{++}
+
+The macro \db apDIVcomp "<paramA><paramB>" provides the test if the
+"<paramA>" is ``comparably greater or equal'' to "<paramB>". Imagine
+the following examples:
+
+\begtt
+123456789 : 123456789 = 1
+123456788 : 123456789 = .99999999189999992628
+\endtt
+%
+The example shows that the last digit in the operands can be important for
+the first digit in the result. This means that we need to compare whole
+operands but we can stop the comparison when the first difference in the
+digits is found. This is lexicographic ordering. Because we don't assume
+the existence of e\TeX{} (or another extensions), we need to do this
+comparison by macros. We set the "<paramA>" and "<paramB>" to the "\tmpc" and
+"\tmpd" respectively. The trailing "\apNL"s are appended.
+The macro \db apDIVcompA reads first 8 digits from
+first parameter and the macros \db apDIVcompB reads first 8 digits from
+second parameter and does the comparison. If the numbers are equal then the
+loop is processed again.
+
+\inext{apDIVcomp}{\count=3 ^^B\cbrace}{++}
+
+The format of interleaved data with divisor and remainder is described here.
+Suppose this partial step of the division process:
+
+\begtt
+ R0 R1 R2 R3 ... Rn : d1 d2 d3 ... dn = ...A...
+ @ -A*d1 -A*d2 -A*d3 ... -A*dn [ R0 R1 : d1 = A ]
+ 0 N0 N1 N2 ... N(n-1) Nn
+\endtt
+
+The $R_k$ are Digits of the remainder, $d_k$ are Digits of the divisor. The
+$A$ is calculated Digit in this step. The calculation of the Digits of the new
+remainder is hinted here. We need to do this from right to left because of
+the transmissions. This implies, that the interleaved format of "\XOUT" is
+in the reverse order and looks like
+
+\begtt
+ dn Rn ... d3 R3 d2 R2 d1 R1 @ R0
+\endtt
+%
+for example for "<paramA>=1234567893", "<paramB>=454502" (in the human readable form)
+the "\XOUT" should be "{200}{9300}{4545}{5678}@{1234}" (in the special format).
+The Digits are separated by \TeX{} braces "{}".
+The resulted digit for this step is $A=12345678/1415=2716$.
+
+The calculation of the new remainder takes $d_k$, $R_k$, $d_{k-1}$ for each
+$k$ from $n$ to $0$ and creates the Digit of the new remainder $N_{k-1} = R_k -
+A\cdot d_k$ (roughly speaking, actually it calculates transmissions too) and
+adds the new couple $d_{k-1}$~$N_{k-1}$ to the new version of "\XOUT" macro.
+The zero for $N_{-1}$ should be reached. If it is not completed then a
+correction of the type $A\mathrel{:=}A-1$ have to be done and the
+calculation of this step is processed again.
+
+The result in the new "\XOUT" should be (after one step is done):
+
+\begtt
+ dn Nn ... d3 N3 d2 N2 d1 N1 @ N0
+\endtt
+%
+where $N_n$ is taken from the ``rest of the dividend'' from the input stream.
+
+The initialization for the main loop is done by \db apDIVg macro. It reads
+the Digits from "\tmpa" (dividend) and "\tmpb" macros (using "\apIVread")
+and appends them to the "\XOUT" in described data format. This initialization
+is finished when the "\tmpb" is empty. If the "\tmpa" is not empty in such
+case, we put it to the input stream using "\expandafter\apDIVh\tmpa"
+followed by four "\apNL"s (which simply expands zero digit) followed by
+stop-mark. The "\apDIVh" reads one Digit from input stream.
+Else we put only the stop-mark to the input stream and run the
+"\apDIVi". The "\apNexti" is set to the "\apDIVi", so the macro "\apDIVh" will
+be skipped forever and no new Digit is read from input stream.
+
+\inext{apDIVg}{^^B\cbrace}{++}
+
+The macro \db apDIVh reads one Digit from data stream (from the rest of the
+dividend) and saves it to the "\apnumZ" register. If the stop-mark is
+reached (this is recognized that the last digit is the "\apNL"),
+then "\apNexti" is set to "\apDIVi", so the "\apDIVh" is never
+processed again.
+
+\inext{apDIVh}{^^B\cbrace}{++}
+
+The macro \db apDIVi contains the main loop for division calculation. The
+core of this loop is the macro call "\apDIVp<data>" which adds next digit
+to the "\OUT" and recalculates the remainder.
+
+The macro "\apDIVp" decreases the "\apnumC" register (the desired digits in the
+output) by four, because four digits will be calculated in the next step.
+The loop is processed while "\apnumC" is positive. The "\apnumZ" (new Digit
+from the input stream) is initialized as zero and the "\apNexti" runs the
+next step of this loop. This step starts from "\apDIVh" (reading one digit
+from input stream) or directly the "\apDIVi" is repeated. If the remainder
+from the previous step is calculated as zero ("\apnumE=0"), then we stop
+prematurely. The \db apDIVj macro is called at the end of the loop because
+we need to remove the ``rest of the dividend'' from the input stream.
+
+\inext{apDIVi}{def\nb apDIVj}{++}
+
+The macro \db apDIVp "<interleaved data>@" does the basic setting
+before the calculation through the
+expanded "\XOUT" is processed. The \db apDIVxA includes the ``partial
+dividend'' and the \db apDIVxB includes the ``partial divisor''.
+We need to do
+"\apDIVxA" over "\apDIVxB" in order to obtain the next digit in the output.
+This digit is stored in "\apnumA".
+The "\apnumX" is the transmission value, the "\apnumB", "\apnumY" will be the
+memory of the last two calculated Digits in the remainder. The "\apnumE"
+will include the maximum of all digits of the new remainder. If it is equal to
+zero, we can finish the calculation.
+
+The new interleaved data will be stored to the "\apOUT:<num>" macros in
+similar way as in the "\apMUL" macro. This increases the speed of the
+calculation. The data "\apnumO", "\apnumL" and "\apOUTl" for this purpose
+are initialized.
+
+The "\apDIVq" is started and the tokens "0\apnumZ" are appended to the input
+stream (i.~e.\ to the expanded "\XOUT". This zero will be ignored and the
+"\apnumZ" will be used as a new $N_n$, i.~e.\ the Digit from the ``rest of the
+dividend''.
+
+\inext{apDIVp}{^^B\cbrace}{++}
+
+The macro \db apDIVq $\langle d_k\rangle\,\langle R_k\rangle\,\langle d_{k-1}\rangle$
+calculates the Digit of the new remainder $N_{k-1}$
+by the formula $N_{k-1} = - A\cdot d_k +R_k - X$ where $X$ is the
+transmission from the previous Digit. If the result is negative, we need to
+add minimal number of the form $X\cdot 10000$ in order the result is
+non-negative. Then the $X$ is new transmission value.
+The digit $N_k$ is stored in the "\apnumB"
+register and then it is added to "\apOUT:<num>" in the order $d_{k-1}\, N_{k-1}$.
+The "\apnumY" remembers the value of the previous "\apnumB".
+The $d_{k-1}$ is put to the input stream back in order it would be read by
+the next "\apDIVq" call.
+
+If $d_{k-1}={}$"@" then we are at the end of the remainder calculation and
+the "\apDIVr" is invoked.
+
+\inext{apDIVq}{^^B\cbrace}{++}
+
+The \db apDIVr macro does the final work after the calculation of new
+remainder is done. It tests if the remainder is OK, i.~e.\ the transmission
+from the $R_1$ calculation is equal to $R_0$. If it is true then new Digit
+"\apnumA" is added to the "\OUT" macro else the "\apnumA" is decreased (the
+correction) and the calculation of the remainder is run again.
+
+If the calculated Digit and the remainder are OK, then we do following:
+\begitems
+\item * The new "\XOUT" is created from "\apOUT:<num>" macros using
+ "\apOUTs" macro.
+\item * The "\apnumA" is saved to the "\OUT". This is done with care.
+ If the "\apnumD" (where the decimal point is measured from the actual
+ point in the "\OUT") is in the interval $[0, 4)$ then the decimal point
+ have to be inserted between digits into the next Digit. This is done by
+ "\apDIVt" macro. If the remainder is zero ("\apnumE=0"), then the right
+ trailing zeros are removed from the Digit by the "\apDIVu" and the shift
+ of the "\apnumD" register is calculated from the actual digits.
+ All this calculation is done in "\tmpa" macro. The last step is adding
+ the contents of "\tmpa" to the "\OUT".
+\item * The "\apnumD" is increased by the number of added digits.
+\item * The new ``partial dividend'' is created from "\apnumB" and
+ "\apnumY".
+\enditems
+
+\inext{apDIVr}{^^B\cbrace}{++}
+
+The \db apDIVt macro inserts the dot into digits quartet (less than four
+digits are allowed too) by the "\apnumD" value. This value is assumed in the
+interval $[0, 4)$. The expandable macro "\apIVdot<shift><data>" is used for
+this purpose. The result from this macro has to be expanded twice.
+
+\inext{apDIVt}{}{++}
+
+The \db apDIVu macro removes trailing zeros from the right and removes the
+dot, if it is the last token of the "\tmpa" after removing zeros. It uses
+expandable macros "\apREMzerosR<data>" and "\apREMdotR<data>".
+
+\inext{apDIVu}{}{++}
+
+The rest of the code concerned with the division does an extraction of the
+last remainder from the data and this value is saved to the \db XOUT macro in
+human readable form. The \db apDIVv macro is called repeatedly on the
+special format of the "\XOUT" macro and the new "\XOUT" is created.
+The trailing zeros from right are ignored by the \db apDIVw.
+
+\inext{apDIVv}{\empty}{+-}
+
+
+\subsec Power to the Integer
+
+The \db apPOW macro does the power to the integer exponent only. The \db
+apPOWx is equivalent to "\apPOW" and it is used in "\evaldef" macro for the "^"
+operator. If you want to redefine the meaning of the "^" operator then
+redefine the "\apPOWx" sequence.
+
+\inext{apPOWx}{}{++}
+
+We can implement the power to the integer as repeated multiplications. This
+is simple but slow. The goal of this section is to present the power to the
+integer with some optimizations.
+
+Let $a$ is the base of the powering computation and $d_1, d_2, d_3, \dots,
+d_n$ are binary digits of the exponent (in reverse order). Then
+$$
+ p = a^{1\,{d_1}+2\,{d_2}+2^2\,{d_3}+\cdots+2^{n-1}\,{d_n}} =
+ (a^1)^{d_1}\cdot(a^2)^{d_2}\cdot(a^{2^2})^{d_3}\cdot (a^{2^{n-1}})^{d_n}.
+$$
+If $d_i=0$ then $z^{d_i}$ is one and this can be omitted from the queue of
+multiplications. If $d_i=1$ then we keep $z^{d_i}$ as $z$ in the queue.
+We can see from this that the $p$ can be computed by the
+following algorithm:
+
+\begtt
+(* "a" is initialized as the base, "e" as the exponent *)
+p := 1;
+while (e>0) {
+ if (e%2) p := p*a;
+ e := e/2;
+ if (e>0) a := a*a;
+}
+(* "p" includes the result *)
+\endtt
+
+The macro \db apPOWa does the following work.
+
+\ilabel[pow:sgna] {SIGNa=}
+\ilabel[pow:sgnb] {SIGNb=}
+\ilabel[pow:ea] {non-integer}
+\ilabel[pow:eb] {output?}
+\ilabel[pow:ape] {apE=\nb apEa}
+\ilabel[pow:odd] {ifodd}
+\ilabel[pow:dig] {apDIG\nb tmpa}
+\ilabel[pow:aa] {apIVmod}
+\ilabel[pow:ab] {ifcase}
+\ilabel[pow:ba] {apMULb}
+\ilabel[pow:bb] {*.\nb OUT}
+\ilabel[pow:p] {1*}
+\ilabel[pow:rev] {apREV}
+\ilabel[pow:b] {apPOWb}
+\ilabel[pow:g] {apPOWg}
+\ilabel[pow:outa] {-\nb OUT}
+\ilabel[pow:outb] {apROLLa}
+\ilabel[pow:r] {apDIVa}
+
+\begitems
+\item * After using "\apPPab" the base parameter is saved in "\tmpa" and the
+ exponent is saved in "\tmpb".
+\item * In trivial cases, the result is set without any computing
+ (lines~\cite[pow:sgna] and~\cite[pow:sgnb]).
+\item * If the exponent is non-integer or it is too big then the error
+ message is printed and the rest of the macro is skipped by the "\apPOWe"
+ macro
+ (lines~\cite[pow:ea] to~\cite[pow:eb]).
+\item * The "\apE" is calculated from "\apEa" (line~\cite[pow:ape]).
+\item * The sign of the result is negative only if the "\tmpb" is odd and
+ base is negative
+ (line~\cite[pow:odd]).
+\item * The number of digits after decimal point for the result
+ is calculated and saved to "\apnumD". The total number of digits of the
+ base is saved to "\apnumC".
+ (line~\cite[pow:dig]).
+\item * The first Digit of the base needn't to include all four digits, but
+ other Digits do it. The similar trick as in "\apMULa" is used here
+ (lines~\cite[pow:aa] to~\cite[pow:ab]).
+\item * The base is saved in interleaved reversed format (like in
+ "\apMULa") into the "\OUT" macro by the "\apMULb" macro. Let it be the
+ $a$ value from our algorithm described above
+ (lines~\cite[pow:ba] and~\cite[pow:bb]).
+\item * The initial value of $p=1$ from our algorithm is set in interleaved
+ format into "\tmpc" macro
+ (line~\cite[pow:p]).
+\item * The main loop described above is processed by "\apPOWb" macro.
+ (line~\cite[pow:b]).
+\item * The result in "\tmpc" is converted into human readable form by the
+ "\apPOWg" macro and it is stored into the "\OUT" macro
+ (line~\cite[pow:g]).
+\item * If the result is negative or decimal point is needed to print then
+ use simple conversion of the "\OUT" macro (adding minus sign) or using
+ "\apROLLa" macro
+ (lines~\cite[pow:outa] and~\cite[pow:outb]).
+\item * If the exponent is negative then do the $1/r$ calculation,
+ where $r$ is previous result
+ (line~\cite[pow:r]).
+\enditems
+
+\inext{apPOWa}{^^B\cbrace}{++}
+
+The macro \db apPOWb is the body of the loop in the algorithm described above.
+The code part after "\ifodd\apnumE" does "p := p*a". In order to do this, we need
+to convert "\OUT" (where "a" is stored) into normal format using "\apPOWd".
+The result is saved in "\tmpb". Then the multiplication is done by "\apMULd"
+and the result is normalized by the "\apPOWn" macro. Because "\apMULd"
+works with "\OUT" macro, we temporary set "\tmpc" to "\OUT".
+
+The code part after "\ifnum\apnumE"{\tt\char`<}"0" does "a := a*a" using the "\apPOWt"
+macro. The result is normalized by the "\apPOWn" macro.
+
+\inext{apPOWb}{^^B\cbrace}{++}
+
+The macro \db apPOWd "<initialized interleaved reversed format>" extracts the
+Digits from its argument and saves them to the "\tmpb" macro.
+
+\inext{apPOWd}{^^B\cbrace}{++}
+
+The \db apPOWe macro skips the rest of the body of the "\apPOWa" macro to the
+"\relax". It is used when "\errmessage" is printed.
+
+\inext{apPOWe}{}{++}
+
+The \db apPOWg macro provides the conversion from interleaved reversed format to
+the human readable form and save the result to the "\OUT" macro.
+It ignores the first two elements from the format and runs \db apPOWh.
+
+\inext{apPOWg}{^^B\cbrace}{++}
+
+The normalization to the initialized interleaved format of the "\OUT" is done
+by the \db apPOWn "<data>@" macro. The \db apPOWna reads the first part of
+the "<data>" (to the first "*", where the Digits are non-interleaved. The
+\db apPOWnn reads the second part of "<data>" where the Digits of the result
+are interleaved with the digits of the old coefficients. We need to set the
+result as a new coefficients and prepare zeros between them for the new
+calculation. The dot after the first "*" is not printed (the zero is printed
+instead it) but it does not matter because this token is simply ignored
+during the calculation.
+
+\inext{apPOWn}{def\nb apPOWnn}{++}
+
+The powering to two ("\OUT:=\OUT^2") is provided by the \db apPOWt "<data>"
+macro. The macro \db apPOWu is called repeatedly for each "\apnumA="Digit from the
+"<data>". One line of the multiplication scheme is processed by the \db apPOWv "<data>"
+macro. We can call the "\apMULe" macro here but we don't do it because a slight
+optimization is used here. You can try to multiply the number with digits "abcd" by itself
+in the mirrored multiplication scheme. You'll see that first line includes
+"a^2 2ab 2ac 2ad", second line is intended by two columns and includes "b^2 2bc 2bd",
+next line is indented by next two columns and includes "c^2 2cd" and the last line is
+intended by next two columns and includes only "d^2". Such calculation is slightly
+shorter than normal multiplication and it is implemented in the "\apPOWv" macro.
+
+\inext{apPOWt}{\empty}{+-}
+
+\subsec apROLL, apROUND and apNORM Macros
+
+The macros \db apROLL , \db apROUND and \db apNORM are implemented by
+"\apROLLa", "\apROUNDa" and "\apNORMa" macros with common format of the
+parameter text: "<expanded sequence>.@<sequence>" where "<expanded
+sequence>" is the expansion of the macro "<sequence>" (given as first
+parameter of "\apROLL", "\apROUND" and "\apNORM", but without optionally
+minus sign. If there was the minus sign then "\apnumG=-1" else "\apnumG=1".
+This preparation of the parameter "<sequence>" is done by the "\apPPs"
+macro. The second parameter of the macros "\apROLL", "\apROUND" and
+"\apNORM" is saved to the "\tmpc" macro.
+
+\db apROLLa "<param>.@<sequence>" shifts the decimal point of the
+"<param>" by "\tmpc" positions to the right (or to the left, if
+"\tmpc" is negative) and saves the result to the "<sequence>" macro.
+The "\tmpc" value is saved to the "\apnumA" register and the "\apROLLc" is
+executed if we need to shift the decimal point to left. Else "\apROLLg" is
+executed.
+
+\inext{ROLLa}{ROLLc}{++}
+
+The \db apROLLc "<param>.@<sequence>" shifts the decimal point to left
+by the "-\apnumA" decimal digits.
+It reads the tokens from the input stream until the dot is found
+using \db apROLLd macro.
+The number of such tokens is set to the "\apnumB" register and tokens
+are saved to the "\tmpc" macro.
+If the dot is found then \db apROLLe does the following: if the number of
+read tokens is greater then the absolute value of the "<shift>", then
+the number of positions from the most left digit of the number to the
+desired place of the dot is set to the "\apnumA" register a the dot is
+saved to this place by "\apROLLi<parameter>.@<sequence>". Else the new number looks
+like ".000123" and the right number of zeros are saved to the "<sequence>" using
+the "\apADDzeros" macro and the rest of the input stream (including expanded
+"\tmpc" returned back) is appended to the macro "<sequence>" by the
+\db apROLLf "<param>.@" macro.
+
+\inext{apROLLc}{def\nb apROLLf}{++}
+
+The \db apROLLg "<param>.@<sequence>" shifts the decimal point to the right by
+"\apnumA" digits starting from actual position of the input stream.
+It reads tokens from the input stream by the \db apROLLh and saves them to the
+"\tmpd" macro where the result will be built.
+When dot is found the \db apROLLi is processed. It reads next
+tokens and decreases the "\apnumA" by one for each token. It ends (using
+"\apROLLj\apROLLk") when "\apnumA" is equal to zero.
+If the end of the input stream is reached (the "@" character) then the zero
+is inserted before this character (using "\apROLLj\apROLLi0@"). This
+solves the situations like "123",~"<shift>=2",~$\to$~"12300".
+
+\ilabel[rol:g1] {0-}
+\inext{apROLLg}{^^B\cbrace}{++}
+
+The "\apROLLg" macro initializes "\apnumB=1" if the "<param>" doesn't begin
+by dot. This is a flag that all digits read by "\apROLLi" have to be saved.
+If the dot begins, then the number can look like ".000123" (before moving
+the dot to the right) and we need to
+ignore the trailing zeros. The "\apnumB" is equal to zero
+in such case and this is set to "1" if here is first non-zero digit.
+
+The \db apROLLj macro closes the conditionals and runs its parameter
+separated by "\fi". It skips the rest of the "\apROLLi" macro too.
+
+\inext{apROLLj}{}{++}
+
+The macro \db apROLLk puts the decimal point to the "\tmpd" at current
+position (using "\apROLLn") if the input stream is not fully read. Else it
+ends the processing. The result is an integer without decimal digit in such
+case.
+
+\inext{apROLLk}{^^B\cbrace}{++}
+
+The macro \db apROLLn reads the input stream until the dot is found.
+Because we read now the digits after a
+new position of the decimal point we need to check situations of the type
+"123.000" which is needed to be written as "123" without decimal point.
+This is a reason of a little complication. We save all digits to the "\tmpc"
+macro and calculate the sum of such digits in "\apnumB" register. If this
+sum is equal to zero then we don't append the ".\tmpc" to the "\tmpd".
+The macro "\apROLLn" is finished by the \db apROLLo "@<sequence>" macro, which removes
+the last token from the input stream and defines "<sequence>" as "\tmpd".
+
+\inext{apROLLn}{def\nb apROLLo}{++}
+
+The macro \db apROUNDa "<param>.@<sequence>" rounds the number given in the
+"<param>". The number of digits after decimal point "\tmpc" is saved to
+"\apnumD". If this number is negative then "\apROUNDe" is processed
+else the \db apROUNDb reads the "<param>" to the decimal point and saves
+this part to the "\tmpc" macro. The "\tmpd" macro (where the rest after
+decimal point of the number will be stored) is initialized to empty and the
+\db apROUNDc is started. This macro reads one token
+from input stream repeatedly until the number of read tokens is equal to
+"\apnumD" or the stop mark "@" is reached. All tokens are saved to "\tmpd".
+Then the \db apROUNDd macro reads the rest of the "<param>", saves it to the
+"\XOUT" macro and defines "<sequence>" (i.~e.\ "#2") as the rounded number.
+
+\inext{apROUNDa}{\count=3 ^^B\cbrace}{++}
+
+The macro \db apROUNDe solves the ``less standard'' problem when rounding to
+the negative digits after decimal point "\apnumD", i.~e.\ we need to set
+"-\apnumD" digits before decimal point to zero. The solution is to remove
+the rest of the input stream, use "\apROLLa" to shift the decimal point left
+by "-\apnumD" positions, use "\apROUNDa" to remove all digits after decimal
+point and shift the decimal point back to its previous place.
+
+\inext{apROUNDe}{^^B\cbrace}{++}
+
+The macro \db apNORMa redefines the "<sequence>" in order to remove minus
+sign because the "\apDIG" macro uses its parameter without this sign. Then
+the \db apNORMb "<sequence><parameter>@" is executed where the dot in the
+front of the parameter is tested. If the dot is here then the "\apDIG" macro measures
+the digits after decimal point too and the \db apNORMc is executed (where
+the "\apROLLa" shifts the decimal point from the right edge of the number).
+Else the "\apDIG" macro doesn't measure the digits after decimal point and the
+\db apNORMd is executed (where the "\apROLLa" shifts the decimal point from
+the left edge of the number).
+
+\inext{apNORMa}{\count=3 ^^B\cbrace}{++}
+
+The macro \db apEadd "<sequence>" adds "E" in scientific format into "<sequence>" macro
+and \db apEnum "<sequence>" normalizes the number in the "<sequence>". After
+processing these macros the "\apE" register is set to zero.
+
+\inext{apEadd}{\empty}{+-}
+
+
+\subsec [aux] Miscelaneous Macros
+
+The macro \db apEND closes the "\begingroup" group, but keeps the values of
+"\OUT" macro and "\apSIGN", "\apE" registers.
+
+\inext{apEND}{^^B\cbrace}{++}
+
+The macro \db apDIG "<sequence><register or relax>" reads the content of
+the macro "<sequence>" and counts the number of digits in this macro before
+decimal point and saves it to "\apnumD" register. If the macro "<sequence>"
+includes decimal point then it is redefined with the same content but without
+decimal point. The numbers in the form ".00123" are replaced by "123"
+without zeros, but "\apnumD=-2" in this example.
+If the second parameter of the "\apDIG" macro is
+"\relax" then the number of digits after decimal point isn't counted. Else
+the number of these digits is stored to the given "<register>".
+
+The macro "\apDIG" is developed in order to do minimal operations over a
+potentially long parameters. It assumes that "<sequence>" includes a number
+without "<sign>" and without left trailing zeros. This is true after
+parameter preparation by the "\apPPab" macro.
+
+The macro "\apDIG" prepares an incrementation in "\tmpc" if the second
+parameter "<register>" isn't "\relax". It initializes "\apnumD" and "<register>".
+It runs \db apDIGa "<data>..@<sequence>" which increments the "\apnumD" until
+the dot is found. Then the "\apDIGb" is executed (if there are no digits
+before dot) or the "\apDIGc" is called (if there is at least one digit
+before dot). The \db apDIGb ignores zeros immediately after dot. The \db
+apDIGc reads the rest of the "<data>" to the "#1" and saves it to the
+"\tmpd" macro. It runs the counter over this "<data>" \db apDIGd "<data>@"
+only if it is desired ("\tmpc" is non-empty). Else the "\apDIGe" is
+executed. The \db apDIGe "<dot or nothing>@<sequence>" redefines
+"<sequence>" if it is needed. Note, that "#1" is empty if and only if the
+"<data>" include no dot (first dot was reached as the first dot from
+"\apDIG", the second dot from "\apDIG" was a separator of "#1" in "\apDIGc"
+and there is nothing between the second dot and the "@" mark. The
+"<sequence>" isn't redefined if it doesn't include a dot. Else the sequence
+is set to the "\tmpd" (the rest after dot) if there are no digits before dot.
+Else the sequence is redefined using expandable macro \db apDIGf.
+
+\inext{apDIG}{def\nb apDIGf}{++}
+
+The macro \db apIVread "<sequence>" reads four digits from
+the macro "<sequence>", sets "\apnumX" as the Digit consisting from read digits and
+removes the read digits from "<sequence>".
+It internally expands "<sequence>", adds the "\apNL" marks and runs
+\db apIVreadA macro which sets the "\apnumX" and redefines "<sequence>".
+
+The usage of the \db apNL as a stop-marks has the advantage: they act as
+simply zero digits in the comparison but we can ask by "\ifx" if this
+stop mark is reached. The "#5" parameter of "\apIVreadA" is separated by
+first occurrence of "\apNL", i.~e.\ the rest of the macro "<sequence>" is
+here.
+
+\inext{apNL}{def\nb apIVreadA}{++}
+
+The macro \db apIVreadX "<num><sequence>" acts similar as
+"\apIVread<sequence>", but only "<num>" digits are read. The "<num>" is
+expected in the range 0 to 4. The macro prepares the appropriate number of empty
+parameters in "\tmpc" and runs "\apIVreadA" with these empty parameters
+inserted before the real body of the "<sequence>".
+
+\inext{apIVreadX}{^^B\cbrace}{++}
+
+The macro \db apIVwrite "<num>" expands the digits from "<num>" register.
+The number of digits are four. If the "<num>" is less than "1000" then left
+zeros are added.
+
+\inext{apIVwrite}{}{++}
+
+The macro \db apIVtrans calculates the transmission for the next Digit.
+The value (greater or equal 10000) is assumed to be in "\apnumB". The new
+value less than 10000 is stored to "\apnumB" and the transmission value is
+stored in "\apnumX". The constant \db apIVbase is used instead of literal 10000
+because it is quicker.
+
+\inext{apIVbase}{^^B\cbrace}{++}
+
+The macro \db apIVmod "<length><register>" sets "<register>" to the number
+of digits to be read to the first Digit, if the number has "<length>" digits
+in total. We need to read all Digits with four digits, only first Digit can
+be shorter.
+
+\inext{apIVmod}{}{++}
+
+The macro \db apIVdot "<num><param>" adds the dot into "<param>". Let
+$K={}$"<num>" and $F$ is the number of digits in the "<param>".
+The macro expects that $K\in[0,4)$ and $F\in(0,4]$.
+The macro inserts the dot after $K$-th digit
+if $K<F$. Else no dot is inserted.
+It is expandable macro, but two full expansions are needed.
+After first expansion the result looks like
+"\apIVdotA<dots><param>....@" where
+"<dots>" are the appropriate number of dots. Then the \db apIVdotA reads
+the four tokens (maybe the generated dots), ignores the dots while printing
+and appends the dot after these four tokens, if the rest "#5" is non-empty.
+
+\inext{apIVdot}{^^B\cbrace}{++}
+
+The expandable macro \db apNUMdigits "{<param>}" expands (using the \db
+apNUMdigitsA macro) to the number of
+digits in the "<param>". We assume that maximal number of digits will be
+four.
+
+\inext{apNUMdigits}{\empty}{+-}
+
+The macro \db apADDzeros "<sequence>" adds "\apnumZ" zeros to the macro
+"<sequence>".
+
+\inext{apADDzeros}{^^B\cbrace}{++}
+
+The expandable macro \db apREMzerosR "{<param>}" removes right trailing zeros from the
+"<param>". It expands to "\apREMzerosRa<param>@0@!". The
+macro \db apREMzerosRa reads all text terminated by "0@" to "#1". This
+termination zero can be the most right zero of the "<param>" (then "#2" is
+non-empty) or "<param>" hasn't such zero digit (then "#2" is empty). If "#2"
+is non-empty then the "\apREMzerosRa" is expanded again in the recursion.
+Else \db apREMzerosRb removes the stop-mark "@" and the expansion is
+finished.
+
+\inext{apREMzerosR}{def\nb apREMzerosRb}{++}
+
+The expandable macro \db apREMdotR "{<param>}" removes right trailing dot from
+the "<param>" if exists. It expands to \db apREMdotRa and works similarly as
+the "\apREMzerosR" macro.
+
+\inext{apREMdotR}{def\nb apREMdotRa}{++}
+
+The \db apREMfirst "<sequence>" macro removes the first token from the
+"<sequence>" macro. It can be used for removing the ``minus'' sign from the
+``number-like'' macros.
+
+\inext{apREMfirst}{\empty}{+-}
+
+The writing to the "\OUT" in the "\apMUL", "\apDIV" and "\apPOW" macros is optimized, which
+decreases the computation time with very large numbers ten times and more.
+We can do simply "\edef\OUT{\OUT<something>}" instead of
+
+\begtt
+\expandafter\edef\csname apOUT:\apOUTn\endcsname
+ {\csname apOUT:\apOUTn\endcsname<something>}%
+\endtt
+%
+but "\edef\OUT{\OUT<something>}" is typically processed very often
+over possibly very long macro (many thousands of tokens).
+It is better to do "\edef" over more short macros "\apOUT:0", "\apOUT:1", etc.
+Each such macro includes only 7 Digits pairs of the whole "\OUT".
+The macro \db apOUTx is invoked each 7 digit (the "\apnumO" register is
+decreased).
+It uses "\apnumL" value which is the "<num>" part of the next "\apOUT:<num>"
+control sequence. The "\apOUTx" defines this "<num>" as \db apOUTn and
+initializes "\apOUT:<num>" as
+empty and adds the "<num>" to the list \db apOUTl.
+When the creating of the next "\OUT" macro is definitely finished, the "\OUT" macro is
+assembled from the parts "\apOUT:0", "\apOUT:1" etc.\ by the macro
+\db apOUTs \unskip~"<list of numbers><dot><comma>".
+
+\inext{apOUTx}{def\nb apOUTs}{++}
+
+If a ``function-like'' macro needs a local counters then it is recommended
+to enclose all calculation into a group "\apINIT" ... "\apEND". The
+\db apINIT opens the group and prepares a short name "\do" and the macro
+"\localcounts<counters>;". The typical usage is:
+
+\begtt
+\def\MACRO#1{\relax \apINIT % function-like macro, \apINIT
+ \evaldef\foo{#1}% % preparing the parameter
+ \localounts \N \M \K ;% % local \newcount\N \newcount\M \newcount\K
+ ... % calculation
+ \apEND % end of \apINIT group
+}
+\endtt
+
+Note that "\localcounts" is used after preparing the parameter using "\evaldef"
+in odrer to avoid name conflict of local declared ``variables'' and ``variables''
+used in "#1" by user.
+
+The "\apINIT" sets locally \db localcounts to be equivalent to \db apCOUNTS.
+This macro increases the top index of allocated counters "\count10"
+(used in plain \TeX) locally
+and declares the counters locally. It means that if the group is closed then
+the counters are deallocated and top index of counters "\count10" is returned
+to its original value.
+
+\inext{apINIT}{^^B\cbrace}{++}
+
+The macro \db do "<sequence>=<calculation>;" allows to write
+the calculation of Polish expressions more synoptic:
+
+\begtt
+\do \X=\apPLUS{2}{\the\N};% % is equivalent to:
+\apPLUS{2}{\the\N}\let\X=\OUT
+\endtt
+
+The "\do" macro is locally set to be equivalent to \db apEVALxdo .
+
+\inext{apEVALxdo}{\empty}{+-}
+
+The \db apRETURN macro must be followed by "\fi". It skips the rest of the
+block "\apINIT"..."\apEND" typically used in ``function-like'' macros.
+The \db apERR "{<text>}" macro writes "<text>" as error message and returns
+the processing of the block enclosed by "\apINIT"..."\apEND". User can
+redefine it if the "\errmessage" isn't required.
+
+\inext{apRETURN}{\empty}{+-}
+
+The \db apNOPT macro removes the "pt" letters after expansion of "<dimen>"
+register. This is usable when we do a classical "<dimen>" calculation, see
+TBN page~80. Usage: "\expandafter\apNOPT\the<dimen>".
+
+\inext{apNOPT}{\empty}{+-}
+
+The \db loop macro from plain \TeX{} is redefined here in more convenient
+way. It does the same as original "\loop" by D. Knuth but moreover, it
+allows the construction "\if...\else...\repeat".
+
+\inext{loop}{\empty}{+-}
+
+
+\subsec [fce] Function-like Macros
+
+The implementation of function-like macros \db ABS , \db SGN , \db iDIV ,
+\db iMOD , \db iFLOOR , \db iFRAC are simple.
+
+\inext{ABS}{\empty}{+-}
+
+The \db FAC macro for {\bf factorial} doesn't use recursive call because the
+\TeX{} group is opened in such case and the number of levels of \TeX{} group
+is limited (to 255 in my computer). But we want to calculate more factorial
+than only 255!.
+
+\inext{FAC}{^^B\cbrace}{++}
+
+The \db BINOM "{"$a$"}{"$b$"}" is {\bf binomial coefficient} defined by
+$$
+ {a \choose b} = {a! \over b!\,(a-b)! } = {a\,(a-1)\cdots(a-b+1) \over b!}
+ \quad \hbox{for integer } b > 0, \quad {a \choose 0} = 1.
+$$
+We use the formula where $(a-b)!$ is missing in numerator and denominator
+(second fraction) because of time optimization. Second advantage of such formula
+is that $a$ need not to be integer.
+That is the reason why the "\BINOM" isn't defined simply as
+
+\begtt
+\def\BINOM#1#2{\relax \evaldef{ \FAC{#1} / (\FAC{#2} * \FAC{(#1)-(#2)} }}
+\endtt
+
+The macro "\BINOM" checks if $a$ is integer. If it is true then we choose
+"\C" as minimum of $b$ and $a-b$. Then we calculate factorial of "\C" in the
+denominator of the formula (second fraction). And nominator includes "\C"
+factors. If $a$ is non-negative integer and $a<b$ then the result is zero
+because one zero occurs between the factors in the nominator. Thus we give the
+result zero and we skip the rest of calculation. If $a$ is non-integer, then
+"\C" must be $b$. The "\step" macro (it generates the factors in the
+nominator) is prepared in two versions: for $a$ integer we use
+"\advance\A by-1" which is much faster than "\apPLUS\paramA{-1}" used for $a$
+non-integer.
+
+\inext{BINOM}{^^B\cbrace}{++}
+
+{\bf The square root} is computed in the macro \db SQRT "{"$a$"}" using Newton's
+approximation method. This method solves the equation $f(x)=0$ (in this case
+$x^2-a = 0$) by following way. Guess the initial value of the result $x_0$.
+Create tangent to the graph of $f$ in the point $[x_0, f(x_0)]$ using the
+knowledge about $f'(x_0)$ value.
+The intersection of this line with the axis $x$ is the new approximation of
+the result~$x_1$. Do the same with $x_1$ and find $x_2$, etc. If you apply
+the general Newton method to the problem $x^2-a=0$ then you get the formula
+$$
+ \hbox{choose } x_0 \hbox{ as an initial guess,}\quad \hbox{iterate: }
+ x_{n+1} = {1\over2}\left(x_n + {a\over x_n}\right)
+$$
+If $|x_{n+1}-x_n|$ is sufficiently small we stop the processing. In
+practice, we stop the processing, if the "\OUT" representation of $x_{n+1}$
+rounded to the "\apFRAC" is the same as the previous representation of
+$x_n$, i.~e.\ "\ifx\Xn\OUT" in \TeX{} language. Amazingly, we need only about
+four iterations for 20-digits precision and about seven iterations for 50-digits
+precision, if the initial guess is good chosen.
+
+The rest of the work in the "\SQRT" macro is about the right choose of the
+initial guess (using "\apSQRTr" macro) and about shifting the decimal point
+in order to set the $a$ value into the interval $[1,100)$. The decimal point
+is shifted by "-\M" value. After calculation is done, the decimal point is
+shifted by "\M/2" value back. If user know good initial value then he/she
+can set it to \db apSQRTxo macro. The calcualtion of initial value $x_0$ is
+skipped in such case.
+
+\inext{SQRT}{^^B\cbrace}{++}
+
+Note that if the input $a<1$, then we start the Newton's method with $b$. It
+is the value $a$ with shifted decimal point, $b\in[1,100)$. On the other
+hand, if $a\ge1$ then we start the Newton's method directly with $a$,
+because the second derivative $(x^2)''$ is constant so the speed of Newton's
+method is independent on the value of $x$. And we need to calculate the
+"\apFRAC" digits after the decimal point.
+
+The macro \db apSQRTr "<number>" excepts "<number>" in the interval
+$[1,100]$ and makes a roughly estimation of square root of the "<number>" in
+the "\OUT" macro. It uses only classical "<dimen>" calculation, it doesn't
+use any "apnum.tex" operations. The result is based on the linear approximation
+of the function $g(x)=\sqrt{x}$ with known exact points $[1,1], [4,2],
+[9,3], \ldots, [100,10]$. Note, that the differences between $x_i$ values of
+exact points are $3,5,7,\ldots,19$. The inverted values of these differences
+are pre-calculated and inserted after "\apSQRTra" macro call.
+
+The \db apSQRTra macro operates repeatedly for $i=1,\ldots,10$ until
+"\dimen0"${}=x\string<x_i$.
+Then the \db apSQRTrb is executed. We are in the situation
+"\dimen0"${}= x \in[x_{i-1},x_i),\quad g(x_i) = i,\quad
+g(x_{i-1}) = i-1$ and the calculation of
+"\OUT"${}= g(x_{i-1}) + (x-x_{i-1})/(x_i-x_{i-1})$ is performed.
+If $x\in[1,4)$ then the linear approximation is worse. So, we calculate additional
+linear correction in "\dimen1" using the pre-calculated value
+$\sqrt 2 - 1.33333 \mathrel{\mathop{=}\limits^.} 0.08088$ here.
+
+\inext{apSQRTr}{\count=2 ^^B\cbrace}{++}
+
+{\bf The exponential function} $e^x$ is implemented in the \db EXP macro using
+Taylor series at zero point:
+$$
+ e^x = 1 + {x\over 1!} + {x^2\over 2!} + {x^3\over 3!} + \cdots
+$$
+If $x\in(0,1)$ then this series converges relatively quickly.
+
+The macro "\EXP" takes its argument. If it is negative, remember this fact,
+remove minus sign and do "\OUT=1/\OUT" in final step. Now, the argument is
+positive always. If the argument is ``big'' (greater or equal than 4,
+tested by "\testBig") then "\apEXPb" macro is used for evaluating.
+Else "\apEXPa" macro evaluates the exponential.
+
+\inext{EXP}{^^B\cbrace}{++}
+
+The \db apEXPa macro supposes input argument (saved in "\OUT" macro)
+in the interval $[0,4)$.
+If the argument is greater than~1, do argument = argument/2
+and increase $K$ register. Do this step in the loop until argument${}<1$.
+Then calculate $e^x$ using Taylor series mentioned above.
+After "\OUT" is calculated then we do "\OUT=\OUT"$^2$ in the loop $K$ times,
+because $e^{2x} = (e^x)^2$. Note that $K\le2$ in all cases.
+
+The Taylor series is processed using the folloving variables: "\S" is total
+sum, "\Sn" is the new addition in the $n$-th step. If "\Sn" is zero (in
+accordance to the "\apFRAC" register) then we stop the calculation.
+
+\inext{apEXPa}{^^B\cbrace}{++}
+
+The macro \db apTAYLOR is ready for general usage in the form:
+
+\begtt
+\def\S{...}\def\Sn{...}\N=... % setting initial values for N=0
+\loop
+ ... % auxiliary calculation
+ \do\Sn=\apDIV{...}{...};% % calculation of new addition \Sn
+ % (division must be the last activity)
+ \apTAYLOR \iftrue \repeat % does S = S + Sn and finishes if Sn = 0
+\endtt
+
+\inext{apTAYLOR}{}{++}
+
+If the argument (saved i the "\OUT" macro) is greater or equal 4 then
+\db apEXPb macro is executed. The $d=\lfloor x/\ln 10\rfloor$ is
+calculated here.
+This is the number of decimal digits in the result before the decimal point.
+The result is in the form
+$$
+ e^x = e^{x\,-\,d\,\cdot\,\ln 10} \cdot 10^d.
+$$
+The argument of the exponential function is less than $\ln 10 \doteq 2.3$
+for this case, so we can call the "\EXP" macro recursively.
+And the result is returned in scientific form if $d\ge{}$"\apEX".
+
+\inext{apEXPb}{^^B\cbrace}{++}
+
+{\bf The logarithm function} $\ln x$ (inverse to $e^x$) is implemented in
+\db LN macro by Taylor series in the point zero of the $\arg\tanh$ function:
+$$
+ \ln x = 2\,\arg\tanh {x-1\over x+1} =
+ 2\left({x-1\over x+1} + {1\over3}\left(x-1\over x+1\right)^3
+ + {1\over5}\left(x-1\over x+1\right)^5 + \cdots \right).
+$$
+This series converges quickly when x is approximately equal to one. The idea
+of the macro "\LN" includes the following steps:
+
+\begitems
+\item * Whole calculation is in the group "\apINIT"..."\apEND". Enlarge the
+ "\apFRAC" numeric precision by three digits in this group.
+\item * Read the argument "\X" using "\evaldef".
+\item * If the argument is non positive, print error and skip the next
+ processing.
+\item * If the argument is in the interval $(0,1)$, set new argument as
+ 1/argument and remember the ``minus'' sign for the calculated
+ "\OUT", else the "\OUT" remains to be positive. This uses the identity
+ $\ln(1/x) = -\ln x$.
+\item * shift the decimal point of the argument by $M$ positions left in order to
+ the new argument is in the interval $[1,10)$.
+\item * Let $x\in[1,10)$ be the argument calculated as mentioned before.
+ Calculate roughly estimated $\widetilde{\ln x}$ using "\apLNr"
+ macro. This macro uses linear interpolation of the function $\ln x$
+ in eleven points in the interval $[1,10]$.
+\item * Calculate $A = x / \exp(\widetilde{\ln x})$. The result is
+ approximately equal to one, because $\exp(\ln x) = x$.
+\item * Calculate $\ln A$ using the Taylor series above.
+\item * The result of $\ln x$ is equal to $\ln A + \widetilde{\ln x}$,
+ because $x = A\cdot \exp(\widetilde{\ln x})$ and $\ln (ab) = \ln a + \ln b$.
+\item * The real argument is in the form $x\cdot 10^M$, so "\OUT"
+ is equal to $\ln x + M\cdot \ln(10)$ because $\ln (ab) = \ln a + \ln b$
+ and $\ln(10^M) = M\ln(10)$. The $\ln(10)$ value with desired
+ precision is calculated by "\apLNtenexec" macro. This macro saves its
+ result globally when firstly calculated and use the calculated result when
+ the "\apLNtenexec" is called again.
+\item * Round the "\OUT" to the "\apFRAC" digits.
+\item * Append ``minus'' to the "\OUT" if the input argument was in the
+ interval $(0,1)$.
+\enditems
+
+\inext{LN}{^^B\cbrace}{++}
+
+The macro \db apLNtaylor calculates $\ln A$ for $A\approx 1$ using Taylor
+series mentioned above.
+
+\inext{apLNtaylor}{^^B\cbrace}{++}
+
+The macro \db apLNr finds an estimation $\widetilde{\ln x}$ for $x\in [1,10)$
+using linear approximation of $\ln x$ function.
+Only direct "<dimen>" and "<count>" calculation with \TeX{} registers is used,
+no long numbers "apnum.tex" calculation. The $\ln x_i$ is pre-calculated for
+$x_i = i$, $i\in\{1,2,3,4,5,6,7,8,9,10\}$ and the values are inserted after the
+"\apLNra" macro call. The input value $x$ is set as "\dimen0".
+
+The \db apLNra "{<valueA>}{<valueB>}" macro reads the pre-calculated values
+repeatedly in the loop. The
+loop ends if "\apnumC" (i.~e.~$x_i$) is greater than $x$. Then we know that
+$x\in[x_{i-1},x_i)$. The linear interpolation is
+$$
+ \widetilde{\ln x} = f(x_{i-1})+\bigl(f(x_i)-f(x_{i-1})\bigr)\,(x-x_{i-1}),
+$$
+where $f(x_{i-1})={}$"<valueA>", $f(x_i)={}$"<valueB>" and $x={}$"\dimen0".
+The rest of the pre-calculated values is skipped by processing "\next" to "\relax".
+
+The pre-calculated approximation of $\ln 10$ is saved in the macro \db apLNrten
+because we use it at more places in the code.
+
+\inext{apLNr}{3025}{++}
+
+The \db apLNtenexec macro calculates the $\ln 10$ value with the precision
+given by "\apFRAC". The output is prepared to the \db apLNten macro. The
+"\apLNtenexec" saves globally the result to the macro "\""LNten:<apFRAC>" in
+order to use it if the value is needed again. This saves time.
+
+\inext{apLNtenexec}{^^B\cbrace}{++}
+
+The constant $\pi$ is saved in the \db apPIvalue macro initially with 30
+digits. If user needs more digits (using "\apFRAC"${}>30$) then the
+"\apPIvalue" is recalculated and the \db apPIdigits is changed appropriately.
+
+\inext{apPIvalue}{apPIdigits}{++}
+
+The macro \db apPIexec prepares the $\pi$ constant with "\apFRAC" digits
+and saves it to the \db apPI macro. And $\pi/2$ constant with "\apFRAC" digits
+is saved to the \db apPIhalf macro.
+The "\apPIexec" uses macros "\""apPI:<apFRAC>" and "\""apPIh:<apFRAC>" where
+desired values are usually stored. If the values are not prepared here then
+the macro "\apPIexecA" calculates them.
+
+\inext{apPIexec}{^^B\cbrace}{++}
+
+The macro \db apPIexecA creates the $\pi$ value with "\apFRAC" digits
+using the "\apPIvalue", which is rounded if
+"\apFRAC"${}\string<{}$"\apPIdigits". The "\apPIhalf" is calculated from
+"\apPI". Finally the macros "\""apPI:<apFRAC>" and "\""apPIh:<apFRAC>" are
+saved globally for saving time when we need such values again.
+
+\inext{apPIexecA}{^^B\cbrace}{++}
+
+If "\apFRAC"${}>{}$"\apPIdigits" then
+new "\apPIvalue" with desired decimal digits is generated using \db apPIexecB
+macro. The Chudnovsky formula is used:
+$$
+ \pi = {53360\cdot \sqrt{640320} \over S}, \quad
+ S = \sum_{n=0}^\infty
+ {(6n)!\,(13591409 + 545140134\,n) \over (3n)!\,(n!)^3\,(-262537412640768000)^n }
+$$
+This converges very good with 14 new calculated digits per one step where
+new $S_n$ is calculated. Moreover, we use the identity:
+$$
+ F_n =
+ {(6n)!\over (3n)!\,(n!)^3\,(-262537412640768000)^n},\quad
+ F_n = F_{n-1}\cdot{8\,(6n-1)\,(6n-3)\,(6n-5) \over n^3\, (-262537412640768000)}
+$$
+and we use auxiliary integer constants $A_n, B_n, C_n$ with following
+properties:
+$$
+ \displaylines{A_0=B_0=C_0=1, \cr
+ A_n=A_{n-1}\cdot 8\,(6n-1)\,(6n-3)\,(6n-5),\quad
+ B_n=B_{n-1}\cdot n^3, \quad C_n=C_{n-1}\cdot (-262537412640768000), \cr
+ F_n = {A_n \over B_n C_n}, \cr
+ S_n = {A_n\,(13591409 + 545140134\,n) \over B_n C_n}
+ }
+$$
+
+\inext{apPIexecB}{^^B\cbrace}{++}
+
+The macros for users \db PI and \db PIhalf are implemented as
+``function-like'' macros without parameters.
+
+\inext{PI}{PIhalf}{++}
+
+The macros \db SIN and \db COS use the Taylor series
+$$
+\displaylines{
+ \sin x = x - {x^3\over 3!} + {x^5\over 5!} - {x^7\over 7!} + \cdots \cr
+ \cos x = 1 - {x^2\over 2!} + {x^4\over 4!} - {x^6\over 6!} + \cdots
+}
+$$
+These series converge good for $|x|<1$. The main problem is to shift the
+given argument $x\in{\bf R}$ to the range $[0,1)$ before the calculation of
+the series is started. This task is done by \db apSINCOSa macro, the common
+code for both, "\SIN" and "\COS" macros.
+
+The macro "\apSINCOSa" does the following steps:
+
+\begitems
+\item * It advances "\apFRAC" by three and evaluates the argument.
+\item * Note, that the macro "\apSINCOSx" means "\apSINx" or "\apCOSx" depending on the
+ given task.
+\item * The macro "\signK" includes "1". It can be recalculated to "-1"
+ later.
+\item * If the argument is zero then
+ the result is set and next computation is skipped. This test
+ is processed by "\apSINCOSo\apCOSx".
+\item * If the argument is negative then remove minus and save "\sign".
+ This "\sign" will be applied to the result.
+ The "\sign" is always "+" when "\COS" is calculated. This
+ folows the identities $\sin(-x) = - \sin x$ and $\cos(-x) = \cos x$.
+\item * The "\apFRAC" is saved and "\apTOT=0".
+\item * The "\apPIexec" is processed. The "\apPI" and
+ "\apPIhalf" are ready after such processing.
+\item * After "\X" div "\apPI" (rounded to integer) we have "\K" in "\OUT",
+ where $"\X"=x' + "\K"\cdot \pi$ and $x'\in[0,\pi)$.
+ We set "\X" := $x'$ because of the identities
+ $\sin x = (-1)^k \sin(x+k\pi)$, $\cos x = (-1)^k \cos(x+k\pi)$.
+ The sign $(-1)^k$ is saved to "\signK" macro.
+\item * If the $x'$ is zero then the result is set by "\apSINCOSo\apCOSx"
+ and the rest of calculating is skipped.
+\item * The $|"\X" - \pi/2|$ is saved to "\XmPIh" macro.
+\item * If $"\X"\in (\pi/4, \pi/2)$ then $x'= "\XmPIh"$. We use identities
+ $\sin x = \cos(\pi/2-x)$, $\cos x = \sin(\pi/2-x)$. Set $"\X"=x'$.
+ The meaning of "\apSINCOSx" ("\apSINx" or "\apCOSx") is flipped in such case.
+\item * If the $x'$ is zero then the result is set by "\apSINCOSo\apSINx"
+ and the rest of calculating is skipped.
+\item * Now $"\X"\in(0,\pi/4)$, i.~e.\ $|"\X"|<1$ and we can use Taylor
+ series. The "\apSINCOSx" (i.~e.\ "\apSINx" or "\apCOSx") macro initializes
+ the computation of Taylor series mentioned above.
+ The $"\XX"="\X"^2$ is prepared. The Taylor series is processed in the loop
+ as usually.
+\item * The the sign of the output is "\sign\signK".
+\item * If the sign of the result is negative, the ``minus'' is added to the
+ "\OUT".
+\enditems
+
+\inext{SIN}{^^B\cbrace}{++}
+
+The macros \db apSINx and \db apCOSx initialize the calculation
+of the Taylor series.
+
+\inext{apSINx}{apCOSx}{++}
+
+The \db apSINCOSo "<sequence>" macro is used three times in the
+"\apSINCOSa". It tests if the current result is zero. If it is true then the
+"\OUT" is set as zero or it is set to "\signK"
+(if processed function is equal to the "<sequence>").
+
+\inext{apSINCOSo}{}{++}
+
+The macro \db TAN uses the identity $\tan x = \sin x / \cos x$
+and calculates the denominator first. If it is zero then "\apERR" prints
+``out of range'' message else the result is calculated.
+
+\inext{TAN}{^^B\cbrace}{++}
+
+The macro \db ATAN calculates the inverse of tangens using series
+$$
+\arctan{1\over x} = {x\over 1+x^2} + {2\over3} {x\over (1+x^2)^2}
+ + {2\over3}{4\over5} {x\over (1+x^2)^3}
+ + {2\over3}{4\over5}{6\over7} {x\over (1+x^2)^4} + \cdots
+$$
+This converges relatively good for $|x|>1$. I was inspired by
+the Claudio Kozick\'y's semestral work from the course ``Typography and \TeX'' at \v CVUT
+in Prague.
+
+The macro "\ATAN" takes the argument $x$ and uses identity
+$\arctan(-x)=-\arctan(x)$ when $x$ is negative. If $x>1$
+then the identity
+$$
+ \arctan(x) = {\pi\over2} - \arctan{1\over x}
+$$
+is used and $\arctan(1/x)$ is calculated by "\apATANox" macro using the series
+above. Else the argument is re-calculated $x:=1/x$ and the "\apATANox" is
+used. When $x=1$ then the "\apPIhalf/2" is returned directly.
+
+\inext{ATAN}{^^B\cbrace}{++}
+
+The macro \db apATANox calculates $\arctan(1/x)$ using series mentioned
+above.
+
+\inext{apATANox}{^^B\cbrace}{++}
+
+The macros \db ASIN and \db ACOS for functions
+$\arcsin(x)$ and $\arccos(x)$ are implemented using following identities:
+$$
+ \arcsin(x) = \arctan {x\over\sqrt{1-x^2}}, \qquad
+ \arccos(x) = {\pi\over2} - \arcsin(x)
+$$
+
+\inext{ASIN}{ACOS}{++}
+
+\subsec Printing expressions
+
+The \db eprint "{<expression>}{<declaration>}" macro
+works in the group "\bgroup...\egroup". This means that the result in math
+mode is math-Ord atom. The macro interprets the "<expression>"
+in the first step like "\evaldef". This is done by "\apEVALb#1\limits".
+The result is stored in the "\tmpb" macro in Polish notation.
+Then the internal initialization is processed in "\apEPi" and user-space
+initialization is added in "\apEPj" and "#2". Then "\tmpb" is processed. The \db apEPe can
+do something end-game play but typically it is "\relax".
+
+\inext{eprint}{^^B\cbrace}{++}
+
+The \db apEPi macro replaces the meaning of all macros typically used in
+Polish notation of the expression. The original meaning is ``to evaluate'',
+the new meaning is ``to print''. The macro "\apEPi" is set to "\relax" in the
+working group because nested "<expressions>" processed by nested "\eprint"s
+need not to be initialized again.
+
+There is second initialization macro \db apEPj (similar to the "\apEPi")
+which is empty by default.
+Users can define their own function-like functions and they can put the
+printing initialization of such macros here.
+
+\inext{apEPi}{def\nb apEPj}{++}
+
+All parameters are processed in new group (excepts individual constants).
+For example we have
+"\apPLUS{a}{\apDIV{b}{c}}" in the "\tmpb". Then the
+"a+{\apDIV{b}{c}}" is processed and thus "a+{b\over c}" is printed.
+As noted above, the outer group is set by "\eprint" macro itself.
+
+When we process the "\tmpb" with the output of the "<expression>"
+interpreter then the original positions of the round brackets are definitively
+lost. We must to print these brackets if it is required by usual math syntax.
+For example "\apPLUS{1}{-2}" must be printed as "1+(-2)".
+But "\apPLUS{1}{2}" must be printed as "1+2". So, we print
+all parameters using "\apEPp{<parameter>}{<a><b><c><d>}".
+This macro decides if the parameter will be surrounded by brackets or not.
+So, the ``printing'' meaning of "\apPLUS" (or "\apMINUS" respectively)
+and prepared in \db apEPplus (or \db apEPminus respectively) looks like:
+
+\inext{apEPplus}{apEPminus}{++}
+
+The usage of "\apEPp{<parameter>}{<a><b><c><d>}" has the
+following meaning:
+
+\begitems
+\item * if "<a>" is "!" and the "<parameter>" is a negative constant or
+ a "-<expression>" or
+\item * if "<b>" is "!" and main operator $\M$ of the "<parameter>" is "+" or "-" or
+\item * if "<c>" is "!" and main operator $\M$ of the "<parameter>" is "*" or
+\item * if "<d>" is "!" and main operator $\M$ of the "<parameter>" is "/" or "^"
+\enditems
+\noindent then "\apEPp" prints brackets around the "<parameter>" using
+"\left(<parameter>\right)".
+Else it doesn't use brackets around the "<parameter>" (but the "<parameter>"
+itself is printed in a group unless it is single element: constant, variable).
+
+The rule for the parameter "<a>" has the exception: if "<a>" is "?" and the
+"<parameter>" is a negative constant or a "-<expression>", then brackets are
+not used if and only if this is ``very first parameter'', it means that
+the "<parameter>" is first:
+\begitems
+\item * at beginning of the whole "<expression>" given as an argument
+ of "\eprint" or
+\item * immediately after an opening bracket or
+\item * at beginning of a numerator or a denominator in a fraction or
+\item * at beginning of an exponent.
+\enditems
+
+For example "-1+1" is preprocessed as "\apPLUS{-1}{1}" and printed as "-1+1"
+because first parameter has "<a>" equal to "?" and we are at beginning of
+the expression. But "1+-1" is preprocessed as
+"\apPLUS{1}{-1}" and printed as "1+(-1)" because second parameter has "<a>"
+equal to "!". The "2*(-1+5)" is printed as "2\cdot(-1+5)" because "-1" is
+``very first parameter'' after opening bracket.
+Another examples: "-1+-1+-1" is printed as "-1+(-1)+(-1)",
+"a+b*c" is printed as "a+b\cdot c" (without brackets), The "1-(2+3)" is
+printed ``as is'' but "1+(2+3)" is printed as "1+2+3".
+
+The question about to be ``very first parameter'' is controlled by the value of
+\db apEPx macro. It is started as "." and it is replaced by "!" whenever "<a>" is "!".
+It is reverted to "." when open bracket is printed.
+
+The unary minus in the cases like "-(a+b)" are transformed
+to "\apMUL{-1}{\apPLUS{a}{b}}"
+by the "<expression>" interpreter. But we don't need
+to print "-1\cdot(a+b)". So, the printing version of "\apMUL" stored in the
+macro \db apEPmul have an exception. First, we do the test, if "#1" is equal
+to "-1". If this is true, then we print only the unary minus (no whole "-1\cdot").
+Else we print the whole first parameter (enclosed in braces if its $\M$ is "+" or "-").
+The first case has two sub-cases: if "\apEPx" is "!" (it means that it is not
+``very first parameter'' then brackets are used around "-<expression>".
+
+The second parameter is enclosed in brackets if its $\M$ is "+" or "-".
+
+\inext{apEPmul}{^^B\cbrace}{++}
+
+The \db apEPdiv macro used for printing "\apDIV" is very easy. We needn't to set
+the outer group here because each parameter is enclosed in the group. We
+need not to add any round brackets here because fraction generated by
+"\over" is self explanatory from priority point of view.
+If you need to redefine "\apEPdiv" with the operator "/" instead "\over"
+then you need to redefine "\apEPmul" too because you must enclose parameters with
+$\M="\apDIV"$ by brackets in such case.
+
+\inext{apEPdiv}{}{++}
+
+The \db apEPpow macro used for printing "^" includes another speciality.
+When the base (the first "<parameter>") is a function-like macro "\SIN", "\COS"
+etc. then we need to print "\SIN{X}^2" as "\sin^2 x".
+The test if the base is such special functions-like macro is
+performed by "\apEPpowa{<base>}\end{<exponent>}". If this is true then
+"\apEPpowa" saves the "<exponent>" to the temporary macro \db apEPy
+and only "<base>" is processed (the "\apEPy" is printed inside this
+processing) else "\apEPy" is empty and the "<base>" enclosed
+in brackets is followed by "^{<exponent>}". Note that the "<base>" isn't
+enclosed by brackets only if the "<base>" is single and positive operand.
+
+\inext{apEPpow}{^^B\cbrace}{++}
+
+The \db apEPpowa and \db apEPpowb macros detect the special
+function-like macro "\SIN", "\COS"
+etc. by performing one expansion step on the tested "<base>". If the first
+"<token>" is "\apEPf" then the special function-like macro is detected.
+Note that "\SIN", "\COS" etc. are defined as "\apEPf" in the "\apEPi" macro.
+
+\inext{apEPpowa}{apEPy}{++}
+
+The functions like "\SIN{<expression>}" are printed by
+\db apEPf "{<name>}{<expression>}". First, the "\mathop{<name>}\nolimits" is
+printed. If "\apEPy" is non-empty then the exponent is printed by
+"^{\apEPy}". Finally, the nested "<expression>" is printed by the nested
+"\eprint".
+
+\inext{apEPf}{^^B\cbrace}{++}
+
+The space-correction macro \db apEPk is set to remove the "\thinmuskip"
+after "\mathop". This will be processed only if the "\left(" follows: we want
+to print "\sin\apEPk\left(<expression>\right)" because this gives the same result as
+"\sin(<expression>)". On the other hand we don't use "\apEPk" when simple "\sin x"
+is printed without brackets.
+
+By default the "<expression>" (this is an argument of common function-like
+macros "\SIN", "\COS", "\EXP" etc.) will be printed in brackets
+(see the default "\next" definition
+where closing bracket is printed by "\apEPe" macro used after expanded "\tmpb").
+But if
+\begitems
+\item * the "<expression>" is single non-negatie object
+ (a constant or a variable without unary minus) or
+\item * the "<expression>" is a fraction of the form "{<nominator>\over<denominator>}"
+\enditems
+
+\noindent then no brackets are printed around the "<expression>".
+
+This rule is implemented by the usage of
+"\expandafter"\db apEPb in the "<declaration>" part of "\eprint"
+(in the code of "\apEPf" above). It
+expands the following "\tmpb" (the result of the expression scanner) and
+checks the first token and the following parameter.
+Note that the "<expression>" scanner generates "\apPPn{<operand>}" if and
+only if the whole "<expression>" is a single operand.
+
+\inext{apEPb}{^^B\cbrace}{++}
+
+The meaning of \db apEPp "{<parameter>}{<a><b><c><d>}" is
+explained above, see the text where "\apEPplus" is introduced.
+Now, we focus to the implementation of this feature. The auxiliary macro
+\db apEPa "<first token><rest>\end{<normal>}{<bracket>}<a><b><c><d>"
+is used twice:
+before processing the "<parameter>" and after processing. The "\apEPa"
+inserts the "<normal>" or "<bracket>" depending on the condition described
+above where $\M$ (or unary "-" when "<parameter>" is negative constant)
+is equal to the "<first token>".
+
+\inext{apEPp}{^^B\cbrace}{++}
+
+If we have variables like "\def\X{-17}" and the expression looks like
+"1+\X" and the constants stored in the varaibales must to be printed
+then we have "\apPLUS{1}{\X}" after expression scanner and we need
+to print "1+(-17)".
+So we need to try to expand the "<paramter>" and to test if there is the
+unary "-" as a "<first-tok>". This is done by
+\db apEPd "<first-tok><rest>\end{<group-type>}{<else-part>}{<dot-or-exclam>}".
+
+\inext{apEPd}{}{++}
+
+The \db apMULop is used as an operation mark for multiplying.
+It is "\cdot" by default but user can change this.
+
+\inext{apMULop}{}{++}
+
+The single operand like "2.18" or "\X" or "\FAC{10}" is processed directly
+without any additional material. User can define ``variables'' as desired.
+The function-like macros provided by "apnum.tex" is initialized in "\apEPi"
+macro and the ``printing macros'' \db apEPabs, \db apEPfac, \db apEPbinom,
+\db apEPsqrt, \db apEPexp, \db apEPsgn, \db apEPdivmod, \db apEPidiv, \db
+apEPimod, \db apEPifloor, \db apEPifrac are defined here. The trick with
+"\expandafter\apEPb" in the declaration part of the nested "\eprint" was
+explained above. Users can re-define these macros if they want.
+
+\inext{apEPabs}{apEPifrac}{++}
+
+The \db corrnum "<token>" macro expects "<token>" as a macro with number.
+It adds zero before decimal point if the sequence of "<digits>" before
+decimal point is empty. It uses a macro \db apEPc which works at expansion
+level. First, the occurrence of the "-" is tested. If it is true then "-" is
+expanded and the "\apEPc" is called again. Else the zero is added if the
+first token is dot (this means if the "<digits>" before dot is empty).
+
+\inext{corrnum}{\empty}{+-}
+
+
+\subsec Conclusion
+
+This code is here only for backward compatibility with old versions of
+"apnum.tex". Don't use these sequences if you are implementing an internal
+feature because users can re-define these sequences.
+
+\inext{PLUS}{\empty}{+-}
+
+Here is my little joke. Of course, this macro file works in La\TeX{} without
+problems because only \TeX{} primitives (from classical \TeX) and the "\newcount"
+macro are used here.
+But I wish to print my opinion about La\TeX. I hope that this doesn't matter
+and La\TeX{} users can use my macro because a typical La\TeX{} user doesn't
+read a terminal nor ".log" file.
+
+\inext{documentclass}{\empty}{+-}
+
+\doindex
+\bye
+
diff --git a/macros/generic/apnum/apnum.pdf b/macros/generic/apnum/apnum.pdf
new file mode 100644
index 0000000000..b7d4588d55
--- /dev/null
+++ b/macros/generic/apnum/apnum.pdf
Binary files differ
diff --git a/macros/generic/apnum/apnum.tex b/macros/generic/apnum/apnum.tex
new file mode 100644
index 0000000000..91fc3bfde2
--- /dev/null
+++ b/macros/generic/apnum/apnum.tex
@@ -0,0 +1,1203 @@
+% Arbitrary precision numbers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 2014, 2015, 2016, 2018 Petr Olsak
+
+% See the documentation apnum.pdf or apnum.d for more information
+
+\def\apVERSION{1.7 <Apr 2018>}
+\message{The Arbitrary Precision Numbers, \apVERSION}
+
+%%%%%%%%%%%% Internal registers, sec. 2.1 in apnum.pdf
+
+\newcount\apnumA \newcount\apnumB \newcount\apnumC \newcount\apnumD
+\newcount\apnumE \newcount\apnumF \newcount\apnumG \newcount\apnumH
+\newcount\apnumO \newcount\apnumP \newcount\apnumL
+\newcount\apnumX \newcount\apnumY \newcount\apnumZ
+\newcount\apSIGNa \newcount\apSIGNb \newcount\apEa \newcount\apEb
+\newif\ifapX
+
+\newcount\apSIGN
+\newcount\apE
+\newcount\apTOT \apTOT=0
+\newcount\apFRAC \apFRAC=20
+\newcount\apEX \apEX=10
+
+\apnumZ=\catcode`\@ \catcode`\@=12
+
+%%%%%%%%%%%% Evaluation of the expression, sec. 2.2 in apnum.pdf
+
+\def\evaldef{\relax \apEVALa{\apEadd\OUT}}
+\def\evalmdef{\relax \apEVALa{}}
+\def\apEVALa#1#2#3{\begingroup \apnumA=0 \apnumE=1 \apEVALb#3\limits \tmpb \apEND #1\let#2=\OUT}
+\def\apEVALb{\def\tmpa{}\apEVALc}
+\def\apEVALc#1{%
+ \ifx+#1\apEVALd \apEVALc \fi
+ \ifx-#1\edef\tmpa{\tmpa-}\apEVALd\apEVALc \fi
+ \ifx(#1\apEVALd \apEVALe \fi
+ \ifx\the#1\apEVALd \apEVALf\the\fi
+ \ifx\number#1\apEVALd \apEVALf\number\fi
+ \apTESTdigit#1\iftrue
+ \ifx E#1\let\tmpb=\tmpa \expandafter\apEVALd\expandafter\apEVALk
+ \else \edef\tmpb{\tmpa#1}\expandafter\apEVALd\expandafter\apEVALn\fi\fi
+ \edef\tmpb{\tmpa\noexpand#1}\expandafter
+ \futurelet\expandafter\apNext\expandafter\apEVALg\romannumeral-`\.%
+}
+\def\apEVALd#1\fi#2-`\.{\fi#1}
+\def\apEVALe{%
+ \ifx\tmpa\empty \else \ifnum\tmpa1<0 \def\tmpb{-1}\apEVALp \apMUL 4\fi\fi
+ \advance\apnumA by4
+ \apEVALb
+}
+\def\apEVALf#1#2{\expandafter\def\expandafter\tmpb\expandafter{\tmpa#1#2}\apEVALo}
+\def\apEVALg{\ifx\apNext \bgroup \expandafter\apEVALh \else \expandafter\apEVALo \fi}
+\def\apEVALh#1{\expandafter\def\expandafter\tmpb\expandafter{\tmpb{#1}}\expandafter
+ \futurelet\expandafter\apNext\expandafter\apEVALg\romannumeral-`\.}
+\def\apEVALk{\afterassignment\apEVALm\apE=}
+\def\apEVALm{\edef\tmpb{\tmpb E\the\apE}\apEVALo}
+\def\apEVALn#1{\apTESTdigit#1%
+ \iftrue \ifx E#1\afterassignment\apEVALm\expandafter\expandafter\expandafter\apE
+ \else\edef\tmpb{\tmpb#1}\expandafter\expandafter\expandafter\apEVALn\fi
+ \else \expandafter\apEVALo\expandafter#1\fi
+}
+\def\apEVALo#1{\let\apNext=\apEVALb
+ \ifx+#1\apEVALp \apPLUS 1\fi
+ \ifx-#1\apEVALp \apMINUS 1\fi
+ \ifx*#1\apEVALp \apMUL 2\fi
+ \ifx/#1\apEVALp \apDIV 2\fi
+ \ifx^#1\apEVALp \apPOWx 3\fi
+ \ifx)#1\advance\apnumA by-4 \let\apNext=\apEVALo \let\tmpa=\relax
+ \ifnum\apnumA<0 \apEVALerror{many brackets ")"}\fi
+ \fi
+ \ifx\limits#1%
+ \ifnum\apnumA>0 \apEVALerror{missing bracket ")"}\let\tmpa=\relax
+ \else \apEVALp\END 0\let\apNext=\relax \fi
+ \fi
+ \ifx\tmpa\relax \else \apEVALerror{unknown operator "\string#1"}\fi
+ \apnumE=0 \apNext
+}
+\def\apEVALp#1#2{%
+ \apnumB=#2 \advance\apnumB by\apnumA
+ \toks0=\expandafter{\expandafter{\tmpb}{#1}}%
+ \expandafter\apEVALpush\the\toks0\expandafter{\the\apnumB}% {value}{op}{priority}
+ \let\tmpa=\relax
+}
+\def\apEVALstack{{}{}{0}.}
+\def\apEVALpush#1#2#3{% value, operator, priority
+ \toks0={{#1}{#2}{#3}}%
+ \expandafter\def\expandafter\apEVALstack\expandafter{\the\toks0\apEVALstack}%
+ \expandafter\apEVALdo\apEVALstack@%
+}
+\def\apEVALdo#1#2#3#4#5#6#7@{%
+ \apnumB=#3 \ifx#2\apPOWx \advance\apnumB by1 \fi
+ \ifnum\apnumB>#6\else
+ \ifnum#6=0 \def\tmpb{#1}%\toks0={#1}\message{RESULT: \the\toks0}
+ \ifnum\apnumE=1 \def\tmpb{\apPPn{#1}}\fi
+ \else \def\apEVALstack{#7}\apEVALpush{#5{#4}{#1}}{#2}{#3}%
+ \fi\fi
+}
+\def\apEVALerror#1{\message{\noexpand\evaldef ERROR: #1.}%
+ \def\OUT{0}\apE=0\apSIGN=0\def\apNext##1\apEND{\apEND}%
+}
+\def\apTESTdigit#1#2{%
+ \ifx E#1\apXtrue \else
+ \ifcat.\noexpand#1%
+ \ifx.#1\apXtrue \else
+ \ifnum`#1<`0 \apXfalse\else
+ \ifnum`#1>`9 \apXfalse\else \apXtrue\fi
+ \fi\fi
+ \else \apXfalse
+ \fi\fi
+ \ifapX
+}
+
+%%%%%%%%%%%% Preparation of the parameter, sec. 2.3 in apnum.pdf
+
+\def\apPPa#1#2{\expandafter\apPPb#2@#1}
+\def\apPPb{\def\tmpc{}\apSIGN=1 \apE=0 \expandafter\expandafter\expandafter\apPPc}
+\def\apPPc#1{%
+ \ifx+#1\apPPd \fi
+ \ifx-#1\apSIGN=-\apSIGN \apPPd \fi
+ \ifx\relax#1\apPPe \fi
+ \apPPg#1%
+}
+\def\apPPd#1\apPPg#2{\fi\expandafter\expandafter\expandafter\apPPc}
+\def\apPPe#1\apPPg#2#3@{\fi
+ \begingroup\apE=0 #3% execution of the parameter in the group
+ \edef\tmpb{\apE=\the\apE\relax\noexpand\apPPf\OUT@}\expandafter\endgroup\tmpb
+}
+\def\apPPf#1{\ifx-#1\apSIGN=-\apSIGN \expandafter\apPPg\else\expandafter\apPPg\expandafter#1\fi}
+\def\apPPg#1{%
+ \ifx.#1\def\tmpc{.}\apPPh\fi
+ \ifx\tmpc\empty\else\edef\tmpc{\tmpc#1}\fi
+ \ifx0#1\apPPh\fi
+ \ifx\tmpc\empty\edef\tmpc{#1}\fi
+ \ifx@#1\def\tmpc{@}\apSIGN=0 \fi
+ \expandafter\apPPi\tmpc
+}
+\def\apPPh#1\apPPi\tmpc{\fi\apPPg}
+\def\apPPi{\ifnum\apE=0 \expandafter\apPPk \else \expandafter\apPPj \fi}
+\def\apPPj#1@#2{\def#2{#1}}
+\def\apPPk#1@#2{\ifx@#1@\apSIGN=0 \def#2{0}\else \apPPl#1E@#2\fi}
+\def\apPPl#1E#2@#3{%
+ \ifx@#1@\def#3{1}\else\def#3{#1}\fi
+ \ifx@#2@\else \afterassignment\apPPm \apE=#2\fi
+}
+\def\apPPm E{}
+\def\apPPn#1{\expandafter\apPPb#1@\OUT
+ \ifnum\apSIGN=0 \def\OUT{0}\fi
+ \ifnum\apSIGN<0 \edef\OUT{-\OUT}\fi
+}
+\def\apPPab#1#2#3{%
+ \expandafter\apPPb#2@\tmpa \apSIGNa=\apSIGN \apEa=\apE
+ \expandafter\apPPb#3@\tmpb \apSIGNb=\apSIGN \apEb=\apE
+ #1%
+}
+\def\apPPs#1#2#3{\def\tmpc{#3}\expandafter\apPPt\expandafter#1#2.@#2}
+\def\apPPt#1#2{%
+ \ifx-#2\apnumG=-1 \def\apNext{#1}%
+ \else \ifx0#2\apnumG=0 \def\apNext{\apPPu#1}\else \apnumG=1 \def\apNext{#1#2}\fi\fi
+ \apNext
+}
+\def\apPPu#1#2.@#3{\ifx@#2@\apnumG=0 \ifx#1\apROUNDa\def\XOUT{}\fi
+ \else\def\apNext{\apPPt#1#2.@#3}\expandafter\apNext\fi
+}
+
+%%%%%%%%%%%% Addition and Subtraction, sec. 2.4 in apnum.pdf
+
+\def\apPLUS{\relax \apPPab\apPLUSa}
+\def\apMINUS#1#2{\relax \apPPab\apPLUSa{#1}{-#2}}
+\def\apPLUSa{%
+ \ifnum\apEa=\apEb \apE=\apEa \else \apPLUSxE \fi
+ \apDIG\tmpa\relax \apnumA=\apnumD % digits before decimal point
+ \apDIG\tmpb\relax \apnumB=\apnumD
+ \apIVmod \apnumA \apnumE \advance\apnumA by-\apnumE % digits in the first Digit
+ \apIVmod \apnumB \apnumF \advance\apnumB by-\apnumF
+ \apnumC=\apnumB \advance\apnumC by-\apnumA % difference between Digits
+ \ifnum\apSIGNa<0 \def\apPLUSxA{-}\else \def\apPLUSxA{}\fi
+ \ifnum\apSIGNb<0 \def\apPLUSxB{-}\else \def\apPLUSxB{}\fi
+ \apSIGN=0 % \apSIGN=0 means that we are doing subtraction
+ \ifx\apPLUSxA\empty \ifx\apPLUSxB\empty \apSIGN=1 \fi\fi
+ \if\apPLUSxA-\relax \if\apPLUSxB-\relax \apSIGN=-1 \def\apPLUSxA{}\def\apPLUSxB{}\fi\fi
+ \ifnum\apnumC>0 \apPLUSg \apPLUSb \tmpb\apnumF \tmpa\apnumE \apnumB % first pass
+ \else \apnumC=-\apnumC \apPLUSb \tmpa\apnumE \tmpb\apnumF \apnumA
+ \fi
+ \ifnum\apnumG=0 \def\OUT{0}\apSIGN=0 \apE=0 \else
+ \ifnum\apSIGN=0 \apSIGN=\apnumG \let\apNext=\apPLUSm \else \let\apNext=\apPLUSp \fi
+ \apnumX=0 \edef\OUT{\expandafter}\expandafter \apNext \OUT@% second pass
+ \ifnum\apnumD<1 % result in the form .000123
+ \apnumZ=-\apnumD
+ \def\tmpa{.}%
+ \ifnum\apnumZ>0 \apADDzeros\tmpa \fi % adding dot and left zeros
+ \edef\OUT{\ifnum\apSIGN<0-\fi\tmpa\OUT}%
+ \else
+ \edef\OUT{\expandafter}\expandafter\apPLUSy \OUT@% removing left zeros
+ \fi\fi
+}
+\def\apPLUSb#1#2#3#4#5{%
+ \edef\tmpd{\ifcase#4\or{}{}{}\or{}{}\or{}\fi#3}%
+ \edef\tmpc{\ifcase#2\or{}{}{}\or{}{}\or{}\fi}%
+ \let\apNext=\apPLUSc \apnumD=#5\advance\apnumD by4 \apnumG=0 \apnumZ=0 \def\OUT{}%
+ \expandafter\expandafter\expandafter\apPLUSc\expandafter\tmpc#1\apNL\apNL\apNL\apNL@%
+}
+\def\apPLUSc#1#2#3#4{\apnumY=\apPLUSxA#1#2#3#4\relax
+ \ifx\apNL#4\let\apNext=\apPLUSd\fi
+ \ifx\apNL#1\relax \ifx\tmpd\empty \expandafter\expandafter\expandafter\apPLUSf \fi\fi
+ \apPLUSe
+}
+\def\apPLUSd{\apnumY=0 \ifx\tmpd\empty \expandafter\apPLUSf \else\expandafter \apPLUSe\fi}
+\def\apPLUSe{%
+ \ifnum\apnumC>0 \advance\apnumC by-4
+ \else \apIVread\tmpd \advance\apnumY by\apPLUSxB\apnumX \fi
+ \ifnum\apnumZ=0 \apPLUSh \fi
+ \edef\OUT{{\the\apnumY}\OUT}%
+ \advance\apnumD by-4
+ \apNext
+}
+\def\apPLUSf#1@{}
+\def\apPLUSg{\let\tmpc=\apPLUSxA \let\apPLUSxA=\apPLUSxB \let\apPLUSxB=\tmpc}
+\def\apPLUSh{\apnumZ=\apnumY
+ \ifnum\apnumY=0 \else \ifnum\apnumY<0 \apnumG=-1 \apnumY=-\apnumY \apPLUSg \else\apnumG=1 \fi\fi
+}
+\def\apPLUSm#1{%
+ \ifx@#1\else
+ \apnumA=#1 \advance\apnumA by-\apnumX
+ \ifnum\apnumA<0 \advance\apnumA by\apIVbase \apnumX=1 \else \apnumX=0 \fi
+ \apPLUSw
+ \expandafter\apPLUSm
+ \fi
+}
+\def\apPLUSp#1{%
+ \ifx@#1\ifnum\apnumX>0 \apnumA=1 \apPLUSw \fi % .5+.5=.1 bug fixed
+ \else
+ \apnumA=\apnumX \advance\apnumA by#1
+ \ifnum\apnumA<\apIVbase \apnumX=0 \else \apnumX=1 \advance\apnumA by-\apIVbase \fi
+ \apPLUSw
+ \expandafter\apPLUSp
+ \fi
+}
+\def\apPLUSw{%
+ \ifnum\apnumD=0 \ifx\OUT\empty \def\OUT{\empty}\else \edef\OUT{.\OUT}\fi \fi
+ \advance\apnumD by4
+ \ifx\OUT\empty \edef\tmpa{\apIVwrite\apnumA}\edef\OUT{\apREMzerosR\tmpa}%
+ \else \edef\OUT{\apIVwrite\apnumA\OUT}\fi
+}
+\def\apPLUSy#1{\ifx0#1\expandafter\apPLUSy\else \expandafter\apPLUSz\expandafter#1\fi}
+\def\apPLUSz#1@{\edef\OUT{\ifnum\apSIGN<0-\fi#1}}
+\def\apPLUSxE{%
+ \apnumE=\apEa \advance\apnumE by-\apEb
+ \ifnum\apEa>\apEb \apPPs\apROLLa\tmpb{-\apnumE}\apE=\apEa
+ \else \apPPs\apROLLa\tmpa{\apnumE}\apE=\apEb \fi
+}
+
+%%%%%%%%%%%% Multiplication, sec. 2.5 in apnum.pdf
+
+\def\apMUL{\relax \apPPab\apMULa}
+\def\apMULa{%
+ \apE=\apEa \advance\apE by\apEb
+ \apSIGN=\apSIGNa \multiply\apSIGN by\apSIGNb
+ \ifnum\apSIGN=0 \def\OUT{0}\apE=0 \else
+ \apDIG\tmpa\apnumA \apnumX=\apnumA \advance\apnumA by\apnumD
+ \apDIG\tmpb\apnumB \advance\apnumX by\apnumB \advance\apnumB by\apnumD
+ \apnumD=\apnumX % \apnumD = the number of digits after decimal point in the result
+ \apIVmod \apnumA \apnumF % \apnumF = digits in the first Digit of \tmpa
+ \edef\tmpc{\ifcase\apnumF\or{}{}{}\or{}{}\or{}\fi}\def\OUT{}%
+ \expandafter\expandafter\expandafter \apMULb \expandafter \tmpc \tmpa @@@@%
+ \edef\OUT{*.\OUT}%
+ \apIVmod \apnumB \apnumF % \apnumF = digits in the first Digit of \tmpb
+ \edef\tmpc{\ifcase\apnumF\or{}{}{}\or{}{}\or{}\fi}\def\tmpa{}%
+ \expandafter\expandafter\expandafter \apMULc \expandafter \tmpc \tmpb @@@@%
+ \expandafter\apMULd \tmpa@%
+ \expandafter\apMULg \OUT
+ \edef\tmpa{\ifnum\apSIGN<0-\fi}%
+ \ifnum\apnumD>0 \apnumZ=\apnumD \edef\tmpa{\tmpa.}\apADDzeros\tmpa \fi
+ \ifx\tmpa\empty \else \edef\OUT{\tmpa\OUT}\fi
+ \fi
+}
+\def\apMULb#1#2#3#4{\ifx@#4\else
+ \ifx\OUT\empty \edef\OUT{{#1#2#3#4}*}\else\edef\OUT{{#1#2#3#4}0\OUT}\fi
+ \expandafter\apMULb\fi
+}
+\def\apMULc#1#2#3#4{\ifx@#4\else \edef\tmpa{{#1#2#3#4}\tmpa}\expandafter\apMULc\fi}
+\def\apMULd#1{\ifx@#1\else
+ \apnumA=#1 \expandafter\apMULe \OUT
+ \expandafter\apMULd
+ \fi
+}
+\def\apMULe#1*#2{\apnumX=0 \def\OUT{#1{#2}*}\def\apOUTl{}\apnumO=1 \apnumL=0 \apMULf}
+\def\apMULf#1#2{%
+ \advance\apnumO by-1 \ifnum\apnumO=0 \apOUTx \fi
+ \apnumB=#1 \multiply\apnumB by\apnumA \advance\apnumB by\apnumX
+ \ifx*#2%
+ \ifnum\apnumB<\apIVbase
+ \edef\OUT{\OUT\expandafter\apOUTs\apOUTl.,\ifnum\the\apnumB#1=0 \else{\the\apnumB}{#1}\fi*}%
+ \else \apIVtrans
+ \expandafter \edef\csname apOUT:\apOUTn\endcsname
+ {\csname apOUT:\apOUTn\endcsname{\the\apnumB}{#1}}%
+ \apMULf0*\fi
+ \else \advance\apnumB by#2
+ \ifnum\apnumB<\apIVbase \apnumX=0 \else \apIVtrans \fi
+ \expandafter
+ \edef\csname apOUT:\apOUTn\endcsname{\csname apOUT:\apOUTn\endcsname{\the\apnumB}{#1}}%
+ \expandafter\apMULf \fi
+}
+\def\apMULg#1{\def\OUT{}\apMULh}
+\def\apMULh#1{\ifx*#1\expandafter\apMULi
+ \else \apnumA=#1 \apMULo4{\apIVwrite\apnumA}%
+ \expandafter\apMULh
+ \fi
+}
+\def\apMULi#1#2#3{\apnumA=#1
+ \ifx*#3\apMULo{\apNUMdigits\tmpa}{\the\apnumA}\expandafter\apMULj
+ \else \apMULo4{\apIVwrite\apnumA}\expandafter\apMULi
+ \fi{#3}%
+}
+\def\apMULj#1{}
+\def\apMULo#1#2{\edef\tmpa{#2}%
+ \advance\apnumD by-#1
+ \ifnum\apnumD<1 \ifnum\apnumD>-4 \apMULt\fi\fi
+ \edef\OUT{\tmpa\OUT}%
+}
+\def\apMULt{\edef\tmpa{\apIVdot{-\apnumD}\tmpa}\edef\tmpa{\tmpa}}
+
+%%%%%%%%%%%% Division, sec. 2.6 in apnum.pdf
+
+\def\apDIV{\relax \apPPab\apDIVa}
+\def\apDIVa{%
+ \ifnum\apSIGNb=0 \apERR{Dividing by zero}\else
+ \apSIGN=\apSIGNa \multiply\apSIGN by\apSIGNb
+ \ifnum\apSIGNa=0 \def\OUT{0}\def\XOUT{0}\apE=0 \apSIGN=0 \else
+ \apE=\apEa \advance\apE by-\apEb
+ \apDIG\tmpb\relax \apnumB=\apnumD
+ \apDIG\tmpa\relax \apnumH=\apnumD
+ \advance\apnumD by-\apnumB % \apnumD = num. of digits before decimal point in the result
+ \apDIVcomp\tmpa\tmpb % apXtrue <=> A>=B, i.e 1 digit from A/B
+ \ifapX \advance\apnumD by1 \advance\apnumH by1 \fi
+ \apnumC=\apTOT
+ \ifnum\apTOT<0 \apnumC=-\apnumC
+ \ifnum\apnumD>\apnumC \apnumC=\apnumD \fi
+ \fi
+ \ifnum\apTOT=0 \apnumC=\apFRAC \advance\apnumC by\apnumD
+ \else \apnumX=\apFRAC \advance\apnumX by\apnumD
+ \ifnum\apnumC>\apnumX \apnumC=\apnumX \fi
+ \fi
+ \ifnum\apnumC>0 % \apnumC = the number of digits in the result
+ \advance\apnumH by-\apnumC % \apnumH = the position of decimal point in the remainder
+ \apIVmod \apnumC \apnumF % \apnumF = the number of digits in the first Digit
+ \apIVread\tmpb \apnumB=\apnumX % \apnumB = partial divisor
+ \apnumX=\apnumF \ifapX \advance\apnumX by-1 \fi
+ \apIVreadX\apnumX\tmpa
+ \apnumA=\apnumX % \apnumA = first Digit of the partial dividend
+ \apIVread\tmpa % \apnumX = second Digit of the partial dividend
+ \edef\apDIVxA{\the\apnumA\apIVwrite\apnumX}% first partial dividend
+ \edef\apDIVxB{\the\apnumB}% partial divisor
+ \edef\XOUT{{\apDIVxB}{\the\apnumX}@{\the\apnumA}}% the \XOUT is initialized
+ \edef\OUT{\ifnum\apSIGN<0-\fi}%
+ \ifnum\apnumD<0 \edef\OUT{\OUT.}\apnumZ=-\apnumD \apADDzeros\OUT \fi
+ \apnumE=1 \apnumZ=0
+ \let\apNext=\apDIVg \apNext % <--- the main calculation loop is here
+ \ifnum\apnumD>0 \apnumZ=\apnumD \apADDzeros\OUT \fi
+ \ifnum\apnumE=0 \def\XOUT{0}\else % extracting remainder from \XOUT
+ \edef\XOUT{\expandafter}\expandafter\apDIVv\XOUT
+ \def\tmpc{\apnumH}\apnumG=\apSIGNa \expandafter\apROLLa\XOUT.@\XOUT
+ \fi
+ \else
+ \def\OUT{0}\def\XOUT{0}\apE=0 \apSIGN=0
+ \fi\fi\fi
+}
+\def\apDIVcomp#1#2{%
+ \expandafter\def\expandafter\tmpc\expandafter{#1\apNL\apNL\apNL\apNL\apNL\apNL\apNL\apNL@}%
+ \expandafter\def\expandafter\tmpd\expandafter{#2\apNL\apNL\apNL\apNL\apNL\apNL\apNL\apNL@}%
+ \def\apNext{\expandafter\expandafter\expandafter\apDIVcompA\expandafter\tmpc\tmpd}%
+ \apXtrue \apNext
+}
+\def\apDIVcompA#1#2#3#4#5#6#7#8#9@{%
+ \ifx#8\apNL \def\tmpc{0000000\apNL@}\else\def\tmpc{#9@}\fi
+ \apnumX=#1#2#3#4#5#6#7#8\relax
+ \apDIVcompB
+}
+\def\apDIVcompB#1#2#3#4#5#6#7#8#9@{%
+ \ifnum\apnumX<#1#2#3#4#5#6#7#8 \let\apNext=\relax \apXfalse \else
+ \ifnum\apnumX>#1#2#3#4#5#6#7#8 \let\apNext=\relax \apXtrue
+ \fi\fi
+ \ifx\apNext\relax\else
+ \ifx#8\apNL \def\tmpd{0000000\apNL@}\ifx\tmpc\tmpd\let\apNext=\relax\fi
+ \else\def\tmpd{#9@}\fi
+ \fi
+ \apNext
+}
+\def\apDIVg{%
+ \ifx\tmpb\empty
+ \ifx\tmpa\empty \def\apNext{\apDIVi!}\let\apNexti=\apDIVi
+ \else \def\apNext{\expandafter\apDIVh\tmpa\apNL\apNL\apNL\apNL!}\let\apNexti=\apDIVh
+ \fi\fi
+ \ifx\apNext\apDIVg
+ \apIVread\tmpa \apnumA=\apnumX
+ \apIVread\tmpb
+ \edef\XOUT{{\the\apnumX}{\the\apnumA}\XOUT}%
+ \fi
+ \apNext
+}
+\def\apDIVh#1#2#3#4{\apnumZ=#1#2#3#4
+ \ifx\apNL#4\let\apNexti=\apDIVi\fi
+ \apDIVi
+}
+\def\apDIVi{%
+ \ifnum\apnumE=0 \apnumC=0 \fi
+ \ifnum\apnumC>0
+ \expandafter\apDIVp\XOUT
+ \advance\apnumC by-4
+ \apnumZ=0
+ \expandafter\apNexti
+ \else
+ \expandafter\apDIVj
+ \fi
+}
+\def\apDIVj#1!{}
+\def\apDIVp{%
+ \apnumA=\apDIVxA \divide\apnumA by\apDIVxB
+ \def\apOUTl{}\apnumO=1 \apnumL=0
+ \apnumX=0 \apnumB=0 \apnumE=0
+ \let\apNext=\apDIVq \apNext 0\apnumZ
+}
+\def\apDIVq#1#2#3{% B A B
+ \advance\apnumO by-1 \ifnum\apnumO=0 \apOUTx \fi
+ \apnumY=\apnumB
+ \apnumB=#1\multiply\apnumB by-\apnumA
+ \advance\apnumB by#2\advance\apnumB by-\apnumX
+ \ifnum\apnumB<0 \apnumX=\apnumB \advance\apnumX by1
+ \divide\apnumX by-\apIVbase \advance\apnumX by1
+ \advance\apnumB by\the\apnumX 0000
+ \else \apnumX=0 \fi
+ \expandafter
+ \edef\csname apOUT:\apOUTn\endcsname{\csname apOUT:\apOUTn\endcsname{#3}{\the\apnumB}}%
+ \ifnum\apnumE<\apnumB \apnumE=\apnumB \fi
+ \ifx@#3\let\apNext=\apDIVr \fi
+ \apNext{#3}%
+}
+\def\apDIVr#1#2{%
+ \ifnum\apnumX=#2 % the calculated Digit is OK, we save it
+ \edef\XOUT{\expandafter\apOUTs\apOUTl.,}%
+ \edef\tmpa{\ifnum\apnumF=4 \expandafter\apIVwrite\else \expandafter\the\fi\apnumA}%
+ \ifnum\apnumD<\apnumF \ifnum\apnumD>-1 \apDIVt \fi\fi %adding dot
+ \ifx\apNexti\apDIVh \apnumE=1 \fi
+ \ifnum\apnumE=0 \apDIVu % removing zeros
+ \advance\apnumD by-\apNUMdigits\tmpa \relax
+ \else \advance\apnumD by-\apnumF \apnumF=4 \fi
+ \edef\OUT{\OUT\tmpa}% save the Digit
+ \edef\apDIVxA{\the\apnumB\apIVwrite\apnumY}% next partial dvividend
+ \else % we need do correction and run the remainder calculation again
+ \advance\apnumA by-1 \apnumX=0 \apnumB=0 \apnumE=0
+ \def\apOUTl{}\apnumO=1 \apnumL=0
+ \def\apNext{\let\apNext=\apDIVq
+ \expandafter\apNext\expandafter0\expandafter\apnumZ\XOUT}%
+ \expandafter\apNext
+ \fi
+}
+\def\apDIVt{\edef\tmpa{\apIVdot\apnumD\tmpa}\edef\tmpa{\tmpa}}
+\def\apDIVu{\edef\tmpa{\apREMzerosR\tmpa}\edef\tmpa{\apREMdotR\tmpa}}
+\def\apDIVv#1#2{\apnumX=#2
+ \ifx@#1\apDIVw{.\apIVwrite\apnumX}\else\apDIVw{\apIVwrite\apnumX}\expandafter\apDIVv\fi
+}
+\def\apDIVw#1{%
+ \ifx\XOUT\empty \ifnum\apnumX=0
+ \else \edef\tmpa{#1}\edef\XOUT{\apREMzerosR\tmpa\XOUT}%
+ \fi
+ \else \edef\XOUT{#1\XOUT}\fi
+}
+
+%%%%%%%%%%%% Power to the integer, sec. 2.7 in apnum.pdf
+
+\def\apPOW{\relax \apPPab\apPOWa} \let\apPOWx=\apPOW % for usage as ^ operator
+\def\apPOWa{%
+ \ifnum\apSIGNa=0 \def\OUT{0}\apSIGN=0 \apE=0 \else
+ \ifnum\apSIGNb=0 \def\OUT{1}\apSIGN=1 \apE=0 \else
+ \apDIG\tmpb\apnumB
+ \ifnum\apnumB>0 \apERR{POW: non-integer exponent is not implemented yet}\apPOWe\fi
+ \ifnum\apEb=0 \else \apERR{POW: the E notation of exponent isn't allowed}\apPOWe\fi
+ \ifnum\apnumD>8 \apERR{POW: too big exponent.
+ Do you really need about 10^\the\apnumD\space digits in output?}\apPOWe\fi
+ \apE=\apEa \multiply\apE by\tmpb\relax
+ \apSIGN=\apSIGNa
+ \ifodd\tmpb \else \apSIGN=1 \fi
+ \apDIG\tmpa\apnumA \apnumC=\apnumA \advance\apnumC by\apnumD
+ \apnumD=\apnumA \multiply\apnumD by\tmpb
+ \apIVmod \apnumC \apnumA
+ \edef\tmpc{\ifcase\apnumA\or{}{}{}\or{}{}\or{}\fi}\def\OUT{}%
+ \expandafter\expandafter\expandafter \apMULb \expandafter \tmpc \tmpa @@@@%
+ \edef\OUT{*.\OUT}% \OUT := \tmpa in interleaved format
+ \def\tmpc{*.1*}%
+ \apnumE=\tmpb\relax \apPOWb
+ \expandafter\apPOWg \tmpc % \OUT := \tmpc in human raedable form
+ \ifnum\apnumD=0 \ifnum \apSIGN<0 \edef\OUT{-\OUT}\fi
+ \else \def\tmpc{-\apnumD}\apnumG=\apSIGN \expandafter\apROLLa\OUT.@\OUT\fi
+ \ifnum\apSIGNb<0 \apPPab\apDIVa 1\OUT \fi
+ \relax
+ \fi\fi
+}
+\def\apPOWb{%
+ \ifodd\apnumE \def\tmpb{}\expandafter\apPOWd\OUT
+ \let\tmpd=\OUT \let\OUT=\tmpc
+ \expandafter\apMULd \tmpb@\expandafter\apPOWn\OUT@%
+ \let\tmpc=\OUT \let\OUT=\tmpd
+ \fi
+ \divide\apnumE by2
+ \ifnum\apnumE>0 \expandafter\apPOWt\OUT \expandafter\apPOWn\OUT@%
+ \expandafter\apPOWb
+ \fi
+}
+\def\apPOWd#1#2{% \apPOWd <spec format> => \tmpb (in simple reverse format)
+ \ifx*#1\expandafter\apPOWd \else
+ \edef\tmpb{\tmpb{#1}}%
+ \ifx*#2\else \expandafter\expandafter\expandafter\apPOWd\fi
+ \fi
+}
+\def\apPOWe#1\relax{\fi}
+\def\apPOWg#1#2{\def\OUT{}\apPOWh} % conversion to the human readable form
+\def\apPOWh#1#2{\apnumA=#1
+ \ifx*#2\edef\OUT{\the\apnumA\OUT}\else \edef\OUT{\apIVwrite\apnumA\OUT}\expandafter\apPOWh\fi
+}
+\def\apPOWn#1{\def\OUT{*}\apPOWna}
+\def\apPOWna#1{\ifx*#1\expandafter\apPOWnn\else \edef\OUT{\OUT0{#1}}\expandafter\apPOWna\fi}
+\def\apPOWnn#1#2{\ifx*#1\edef\OUT{\OUT*}\else\edef\OUT{\OUT0{#1}}\expandafter\apPOWnn\fi}
+\def\apPOWt#1#2{\apPOWu} % power to two
+\def\apPOWu#1#2{\apnumA=#1
+ \expandafter\apPOWv\OUT
+ \ifx*#2\else \expandafter\apPOWu\fi
+}
+\def\apPOWv#1*#2#3#4{\def\apOUTl{}\apnumO=1 \apnumL=0
+ \apnumB=\apnumA \multiply\apnumB by\apnumB \multiply\apnumA by2
+ \ifx*#4\else\advance\apnumB by#4 \fi
+ \ifx\apnumB<\apIVbase \apnumX=0 \else \apIVtrans \fi
+ \edef\OUT{#1{#2}{\the\apnumB}*}%
+ \ifx*#4\apMULf0*\else\expandafter\apMULf\fi
+}
+
+%%%%%%%%%%%% ROLL, ROUND and NORM macros, sec. 2.8 in apnum.pdf
+
+\def\apROLL{\apPPs\apROLLa}
+\def\apROLLa{\apnumA=\tmpc\relax \ifnum\apnumA<0 \expandafter\apROLLc\else \expandafter\apROLLg\fi}
+\def\apROLLc{\edef\tmpc{}\edef\tmpd{\ifnum\apnumG<0-\fi}\apnumB=0 \apROLLd}
+\def\apROLLd#1{%
+ \ifx.#1\expandafter\apROLLe
+ \else \edef\tmpc{\tmpc#1}%
+ \advance\apnumB by1
+ \expandafter\apROLLd
+ \fi
+}
+\def\apROLLe#1{\ifx@#1\edef\tmpc{\tmpc.@}\else\edef\tmpc{\tmpc#1}\fi
+ \advance\apnumB by\apnumA
+ \ifnum\apnumB<0
+ \apnumZ=-\apnumB \edef\tmpd{\tmpd.}\apADDzeros\tmpd
+ \expandafter\expandafter\expandafter\apROLLf\expandafter\tmpc
+ \else
+ \apnumA=\apnumB
+ \expandafter\expandafter\expandafter\apROLLi\expandafter\tmpc
+ \fi
+}
+\def\apROLLf#1.@#2{\edef#2{\tmpd#1}}
+\def\apROLLg#1{\edef\tmpd{\ifnum\apnumG<0-\fi}\ifx.#1\apnumB=0 \else\apnumB=1 \fi \apROLLh#1}
+\def\apROLLh#1{\ifx.#1\expandafter\apROLLi\else \edef\tmpd{\tmpd#1}\expandafter\apROLLh\fi}
+\def\apROLLi#1{\ifx.#1\expandafter\apROLLi\else
+ \ifnum\apnumA>0 \else \apROLLj \apROLLk#1\fi
+ \ifx@#1\apROLLj \apROLLi0@\fi
+ \advance\apnumA by-1
+ \ifx0#1\else \apnumB=1 \fi
+ \ifnum\apnumB>0 \edef\tmpd{\tmpd#1}\fi
+ \expandafter\apROLLi\fi
+}
+\def\apROLLj#1\fi#2\apROLLi\fi{\fi\fi#1}
+\def\apROLLk#1{\ifx@#1\expandafter\apROLLo\expandafter@\else
+ \def\tmpc{}\apnumB=0 \expandafter\apROLLn\expandafter#1\fi
+}
+\def\apROLLn#1{%
+ \ifx.#1\ifnum\apnumB>0 \edef\tmpd{\tmpd.\tmpc}\fi \expandafter\apROLLo
+ \else \edef\tmpc{\tmpc#1}\advance\apnumB by#1 \expandafter\apROLLn
+ \fi
+}
+\def\apROLLo@#1{\let#1=\tmpd}
+
+\def\apROUND{\apPPs\apROUNDa}
+\def\apROUNDa{\apnumD=\tmpc\relax
+ \ifnum\apnumD<0 \expandafter\apROUNDe
+ \else \expandafter\apROUNDb
+ \fi
+}
+\def\apROUNDb#1.{\edef\tmpc{#1}\apnumX=0 \def\tmpd{}\let\apNext=\apROUNDc \apNext}
+\def\apROUNDc#1{\ifx@#1\def\apNext{\apROUNDd.@}%
+ \else \advance\apnumD by-1
+ \ifnum\apnumD<0 \def\apNext{\apROUNDd#1}%
+ \else \ifx.#1\else \advance\apnumX by#1 \edef\tmpd{\tmpd#1}\fi
+ \fi
+ \fi \apNext
+}
+\def\apROUNDd#1.@#2{\def\XOUT{#1}\edef\XOUT{\apREMzerosR\XOUT}%
+ \ifnum\apnumX=0 \def\tmpd{}\fi
+ \ifx\tmpd\empty
+ \ifx\tmpc\empty \def#2{0}%
+ \else \edef#2{\ifnum\apnumG<0-\fi\tmpc}\fi
+ \else\edef#2{\ifnum\apnumG<0-\fi\tmpc.\tmpd}\fi
+}
+\def\apROUNDe#1.@#2{\apnumC=\apnumD
+ \apPPs\apROLLa#2{\apnumC}\apPPs\apROUNDa#2{0}\apPPs\apROLLa#2{-\apnumC}%
+}
+\def\apNORM{\apPPs\apNORMa}
+\def\apNORMa#1.@#2{\ifnum\apnumG<0 \def#2{#1}\fi \expandafter\apNORMb\expandafter#2\tmpc@}
+\def\apNORMb#1#2#3@{%
+ \ifx.#2\apnumC=#3\relax \apDIG#1\apnumA \apNORMc#1%
+ \else \apnumC=#2#3\relax \apDIG#1\relax \apNORMd#1%
+ \fi
+}
+\def\apNORMc#1{\advance\apE by-\apnumA \advance\apE by\apnumC
+ \def\tmpc{-\apnumC}\expandafter\apROLLa#1.@#1%
+}
+\def\apNORMd#1{\advance\apE by\apnumD \advance\apE by-\apnumC
+ \def\tmpc{\apnumC}\expandafter\apROLLa\expandafter.#1.@#1%
+}
+\def\apEadd#1{\ifnum\apE=0 \else\edef#1{#1E\ifnum\apE>0+\fi\the\apE}\apE=0 \fi}
+\def\apEnum#1{\ifnum\apE=0 \else\apROLL#1\apE \apE=0 \fi}
+
+%%%%%%%%%%%% Miscelaneous macros, sec. 2.9 in apnum.pdf
+
+\def\apEND{\global\let\apENDx=\OUT
+ \edef\tmpb{\apSIGN=\the\apSIGN \apE=\the\apE}%
+ \expandafter\endgroup \tmpb \let\OUT=\apENDx
+}
+\def\apDIG#1#2{\ifx\relax#2\def\tmpc{}\else #2=0 \def\tmpc{\advance#2 by1 }\fi
+ \apnumD=0 \expandafter\apDIGa#1..@#1%
+}
+\def\apDIGa#1{\ifx.#1\csname apDIG\ifnum\apnumD>0 c\else b\fi\expandafter\endcsname
+ \else \advance\apnumD by1 \expandafter\apDIGa\fi}
+\def\apDIGb#1{%
+ \ifx0#1\advance\apnumD by-1 \tmpc \expandafter\apDIGb
+ \else \expandafter\apDIGc \expandafter#1\fi
+}
+\def\apDIGc#1.{\def\tmpd{#1}%
+ \ifx\tmpc\empty \let\apNext=\apDIGe
+ \else \def\apNext{\expandafter\apDIGd\tmpd@}%
+ \fi \apNext
+}
+\def\apDIGd#1{\ifx@#1\expandafter\apDIGe \else \tmpc \expandafter\apDIGd \fi}
+\def\apDIGe#1@#2{%
+ \ifx@#1@\else % #1=empty <=> the param has no dot, we need to do nothing
+ \ifnum\apnumD>0 \edef#2{\expandafter\apDIGf#2@}% the dot plus digits before dot
+ \else \let#2=\tmpd % there are only digits after dot, use \tmpd
+ \fi\fi
+}
+\def\apDIGf#1.#2@{#1#2}
+
+\def\apNL{0}
+\def\apIVread#1{\expandafter\apIVreadA#1\apNL\apNL\apNL\apNL\apNL@#1}
+\def\apIVreadA#1#2#3#4#5\apNL#6@#7{\apnumX=#1#2#3#4\relax \def#7{#5}}
+\def\apIVreadX#1#2{\edef\tmpc{\ifcase#1{}{}{}0\or{}{}{}\or{}{}\or{}\fi}%
+ \expandafter\expandafter\expandafter\apIVreadA\expandafter\tmpc#2\apNL\apNL\apNL\apNL\apNL@#2%
+}
+\def\apIVwrite#1{\ifnum#1<1000 0\ifnum#1<100 0\ifnum#1<10 0\fi\fi\fi\the#1}
+
+\mathchardef\apIVbase=10000
+\def\apIVtrans{\apnumX=\apnumB \divide\apnumB by\apIVbase \multiply\apnumB by-\apIVbase
+ \advance\apnumB by\apnumX \divide\apnumX by\apIVbase
+}
+\def\apIVmod#1#2{#2=#1\divide#2by4 \multiply#2by-4 \advance#2by#1\relax
+ \ifnum#2>0 \else \advance#2by4 \fi
+}
+
+\def\apIVdot#1#2{\noexpand\apIVdotA\ifcase#1....\or...\or..\or.\fi #2....@}
+\def\apIVdotA#1#2#3#4#5.#6@{\ifx.#1\else#1\fi
+ \ifx.#2\else#2\fi \ifx.#3\else#3\fi \ifx.#4\else#4\fi\ifx.#5.\else.#5\fi
+}
+\def\apNUMdigits#1{\expandafter\apNUMdigitsA#1@@@@!}
+\def\apNUMdigitsA#1#2#3#4#5!{\ifx@#4\ifx@#3\ifx@#2\ifx@#10\else1\fi \else2\fi \else3\fi \else4\fi}
+
+\def\apADDzeros#1{\edef#1{#10}\advance\apnumZ by-1
+ \ifnum\apnumZ>0 \expandafter\apADDzeros\expandafter#1\fi
+}
+\def\apREMzerosR#1{\expandafter\apREMzerosRa#1@0@!}
+\def\apREMzerosRa#10@#2!{\ifx!#2!\apREMzerosRb#1\else\apREMzerosRa#1@0@!\fi}
+\def\apREMzerosRb#1@{#1}
+\def\apREMdotR#1{\expandafter\apREMdotRa#1@.@!}
+\def\apREMdotRa#1.@#2!{\ifx!#2!\apREMzerosRb#1\else#1\fi}
+
+\def\apREMfirst#1{\expandafter\apREMfirsta#1@#1}
+\def\apREMfirsta#1#2@#3{\def#3{#2}}
+
+\def\apOUTx{\apnumO=7
+ \edef\apOUTn{\the\apnumL}\edef\apOUTl{\apOUTl\apOUTn,}%
+ \expandafter\def\csname apOUT:\apOUTn\endcsname{}%
+ \advance\apnumL by1
+}
+\def\apOUTs#1,{\ifx.#1\else\csname apOUT:#1\expandafter\endcsname\expandafter\apOUTs\fi}
+
+\def\apINIT{\begingroup \let\do=\apEVALxdo \let\localcounts=\apCOUNTS}
+\def\apCOUNTS#1{\ifx;#1\else
+ \advance\count10 by1 \countdef#1=\count10
+ \expandafter\apCOUNTS\fi
+}
+\def\apEVALxdo#1=#2;{#2\let#1=\OUT}
+
+\def\apRETURN#1\apEND{\fi\apEND}
+\def\apERR#1{\errmessage{#1}}
+
+{\lccode`\?=`\p \lccode`\!=`\t \lowercase{\gdef\apNOPT#1?!{#1}}}
+
+\def\loop#1\repeat{\def\body{#1\relax\expandafter\body\fi}\body}
+
+%%%%%%%%%%%% Function-like macros, sec. 2.10 in apnum.pdf
+
+\def\ABS#1{\relax % mandatory \relax for "function-like" macros
+ \evalmdef\OUT{#1}% % evaluation of the input parameter
+ \ifnum\apSIGN<0 % if (input < 0)
+ \apSIGN=1 % sign = 1
+ \apREMfirst\OUT % remove first "minus" from OUT
+ \fi % fi
+}
+\def\SGN#1{\relax \evaldef\OUT{#1}\edef\OUT{\the\apSIGN}\apE=0 }
+\def\iDIV#1#2{\relax \apINIT % calculation in group
+ \evalmdef\apAparam{#1}\apEnum\apAparam
+ \evalmdef\apBparam{#2}\apEnum\apAparam % evaluation of the parameters
+ \apTOT=0 \apFRAC=0 \apDIV\apAparam\apBparam % integer division
+ \apEND % end of group
+}
+\def\iMOD#1#2{\relax \apINIT % calculation in group
+ \evalmdef\apAparam{#1}\apEnum\apAparam
+ \evalmdef\apBparam{#2}\apEnum\apBparam % evaluation of the parameters
+ \apTOT=0 \apFRAC=0 \apDIV\apAparam\apBparam % integer division
+ \let\OUT=\XOUT % remainder is the output
+ \apEND % end of group
+}
+\def\iFLOOR#1{\relax \evalmdef\OUT{#1}\apEnum\OUT \apROUND\OUT0%
+ \ifnum\apSIGN<0 \ifx\XOUT\empty \else \apPLUS\OUT{-1}\fi\fi
+ \def\tmp{0}\ifx\tmp\OUT \apSIGN=0 \fi
+}
+\def\iFRAC#1{\relax
+ \evalmdef\OUT{#1}\apEnum\OUT \apROUND\OUT0% % preparing the parameter
+ \ifx\XOUT\empty \def\OUT{0}\apSIGN=0 % empty fraction part means zero
+ \else \ifnum\apSIGN<0
+ \edef\XOUT{-.\XOUT}\apPLUS1\XOUT % OUT = 1 - .\XOUT
+ \else \edef\OUT{.\XOUT}\apSIGN=1 % else OUT = .\XOUT
+ \fi \fi
+}
+
+\def\FAC#1{\relax \apINIT % "function-like" in the group, FAC = factorial
+ \evalmdef\OUT{#1}\apEnum\OUT % preparing the parameter
+ \localcounts \N;% % local \newcount
+ \ifnum\apSIGN<0 \apERR{\string\FAC: argument {\OUT} cannot be negative}\apRETURN\fi
+ \let\tmp=\OUT \apROUND\tmp0% % test, if parameter is integer
+ \ifx\XOUT\empty \else \apERR{\string\FAC: argument {\OUT} must be integer}\apRETURN\fi
+ \N=\OUT\relax % N = param (error here if it is an big integer)
+ \ifnum\N=0\def\OUT{1}\apSIGN=1 \fi % special definition for factorial(0)
+ \loop \ifnum \N>2 \advance\N by-1 % loop if (N>2) N--
+ \apMUL{\OUT}{\the\N}\repeat % OUT = OUT * N , repeat
+ \apEND % end of group
+}
+\def\BINOM#1#2{\relax \apINIT % BINOM = {#1 \choose #2} ...
+ \evalmdef\apAparam{#1}\apEnum\apAparam
+ \evalmdef\apBparam{#2}\apEnum\apBparam % preparation of the parameters
+ \localcounts \A \B \C ;% % local \newcounts
+ \let\OUT=\apBparam \apROUND\OUT0% % test if B is integer
+ \ifx\XOUT\empty\else\apERR{\string\BINOM: second arg. {\apBparam} must be integer}\apRETURN\fi
+ \let\OUT=\apAparam \apROUND\OUT0% % test if A is integer
+ \ifx\XOUT\empty % A is integer:
+ \A=\apAparam \B=\apBparam % A = #1, B = #2
+ \C=\A \advance\C by-\B % C = A - B
+ \ifnum\C>\B \C=\B \fi % if (C > B) C = B fi
+ \ifnum\A<0 \C=\B % if (A < 0) C = B fi
+ \else \ifnum\A<\B \def\OUT{0}\apSIGN=0 % if (0 <= A < B) OUT = 0 return
+ \expandafter\expandafter\expandafter \apRETURN \fi\fi
+ \def\step{\advance\A by-1 \apMUL\OUT{\the\A}}%
+ \else \C=\apBparam % A is not integer
+ \def\step{\let\apBparam\OUT \do\apAparam=\apPLUS\apAparam{-1};%
+ \let\OUT=\apBparam \apMUL\OUT\apAparam}%
+ \fi
+ \ifnum\C=0 \def\OUT{1}\apSIGN=1 \apRETURN\fi
+ \do\D=\FAC{\the\C};% % D = C!
+ \let\OUT=\apAparam % OUT = #1
+ \loop \advance\C by-1 % loop C--
+ \ifnum\C>0 \step \repeat % if (C > 0) A--, OUT = OUT * A, repeat
+ \apDIV{\OUT}{\D}% % OUT = OUT / D
+ \apEND
+}
+\def\SQRT#1{\relax \apINIT % OUT = SQRT(#1) ...
+ \evalmdef\A{#1}% % parameter preparation
+ \localcounts \M \E ;% % local counters
+ \E=\apE \apE=0
+ \ifnum\apSIGN=0 \apRETURN\fi % SQRT(0) = 0 (OUT is set to 0 by previous \evaldef)
+ \ifnum\apSIGN<0 \apERR{\string\SQRT: argument {\A} is out of range}\apRETURN\fi
+ \ifodd\E \apROLL\A{-1}\advance\E by1 \fi % we need the E representation with even exponent
+ \let\B=\A \let\C=\A
+ \apDIG\C\relax \M=\apnumD % M is the number of digits before decimal point
+ \advance\M by-2 \ifodd\M \advance\M by1 \fi % M = M - 2 , M must be even
+ \ifx\apSQRTxo\undefined % we need to calculate Xo
+ \ifnum\M=0 \else \apROLL\B{-\M}\divide\M by2 \fi % shift decimal point by -M, M = M / 2
+ \apSQRTr\B \let\Xn=\OUT % Xn = estimate of SQRT
+ \ifnum\M<0 \let\A=\B \fi % if (A < 1) calculate with B where decimal point is shifted
+ \ifnum\M>0 \apROLL\Xn \M \fi % if (A >= 100) shift the decial point of initial guess
+ \else \let\Xn=\apSQRTxo \fi
+ \loop % loop ... Newton's method
+ \apDIV{\apPLUS{\Xn}{\apDIV{\A}{\Xn}}}{2}% % OUT = (Xn + A/Xn) / 2
+ \ifx\OUT\Xn \else % if (OUT != Xn)
+ \let\Xn=\OUT \repeat % Xn = OUT, repeat
+ \ifnum\M<0 \apROLL\OUT\M \fi % shift the decimal point by M back
+ \apE=\E \divide\apE by2 % correct the E exponent
+ \apEND
+}
+\def\apSQRTr#1{\dimen0=#1pt \apnumB=1 \apnumC=1 \apSQRTra}
+\def\apSQRTra{\advance\apnumB by2 \advance\apnumC by\apnumB % B = difference, C = x_i
+ \ifnum\apnumC>100 \def\OUT{10}\else
+ \ifdim\dimen0<\apnumC pt \apSQRTrb \else
+ \expandafter\expandafter\expandafter\apSQRTra\fi\fi
+}
+\def\apSQRTrb{% x = dimen0, B = x_i - x_{i-1}, C = x_i = i
+ \ifdim\dimen0<4pt
+ \ifdim\dimen0>2pt \dimen1=4pt \advance\dimen1 by-\dimen0 \divide\dimen1 by2
+ \else \dimen1=\dimen0 \advance\dimen1 by-1pt \fi
+ \dimen1=.080884\dimen1 % dimen1 = additional linear correction
+ \else \dimen1=0pt \fi
+ \advance\apnumC by-\apnumB % C = x_{i-1}
+ \advance\dimen0 by-\apnumC pt % dimen0 = (x - x_{i-1})
+ \divide\dimen0 by\apnumB % dimen0 = (x - x_{i-1}) / difference
+ \divide\apnumB by2 % B = i-1 = g(x_{i-1})
+ \advance\dimen0 by\apnumB pt % dimen0 = g(x_{i-1}) + (x - x_{i-1} / (x_i-x_{i-1})
+ \advance\dimen0 by\dimen1 % dimen0 += additional linear correction
+ \edef\OUT{\expandafter\apNOPT\the\dimen0}% OUT = dimen0
+}
+\def\EXP#1{\relax\apINIT % OUT = EXP(#1) ...
+ \evalmdef\OUT{#1}\apEnum\OUT % OUT = #1
+ \localcounts \N \K ;%
+ \ifnum\apSIGN=0 \def\OUT{1}\apSIGN=1 \apRETURN \fi
+ \edef\digits{\the\apFRAC}\advance\apFRAC by4
+ \edef\signX{\the\apSIGN}%
+ \ifnum\apSIGN<0 \apSIGN=1 \apREMfirst\OUT \fi % remove "minus" sign
+ \def\testBig ##1##2##3\relax##4{\ifx##1.\apXfalse \else
+ \ifx##2.\ifnum##1<4 \apXfalse \else \apXtrue \fi \else \apXtrue
+ \fi \fi \ifapX}%
+ \expandafter\testBig \OUT.\relax
+ \iftrue \apEXPb \else \apEXPa \fi % OUT = e^OUT
+ \ifnum\signX<0 \K=-\apE \apDIV 1\OUT \apE=\K \fi % if (signX < 0) OUT = 1 / OUT
+ \apSIGN=1 % EXP is always positive
+ \apEND
+}
+\def\apEXPa{%
+ \def\testDot ##1##2\relax##3{\ifx##1.}%
+ \K=0 \N=0 % K = 0, N = 0
+ \loop \expandafter \testDot\OUT \relax % loop if (OUT >= 1)
+ \iftrue \else % OUT = OUT/2
+ \apDIV\OUT{2}% % K++
+ \advance\K by1 % repeat
+ \repeat % oriOUT = 2^K * OUT, OUT < 1
+ \advance\apFRAC by\K
+ \def\S{1}\def\Sn{1}\N=0 \let\X=\OUT % S = 1, Sn = 1, N = 0, X = OUT
+ \loop \advance\N by1 % loop N++
+ \do\Sn=\apDIV{\apMUL\Sn\X}{\the\N};% % Sn = Sn * X / N
+ \apTAYLOR\iftrue \repeat % S = S + Sn (... Taylor)
+ \N=0
+ \loop \ifnum\N < \K % loop if (N < K)
+ \apPOW\OUT{2}% % OUT = OUT^2
+ \advance\N by1 \repeat % N++
+ \apFRAC=\digits\relax \apROUND\OUT\apFRAC
+}
+\def\apTAYLOR#1{\ifnum\apSIGN=0 \let\OUT=\S \else \apPLUS\S\Sn \let\S=\OUT }
+\def\apEXPb{%
+ \let\X=\OUT \apLNtenexec \apDIV\X\apLNten \let\D=\OUT
+ \apROUND\D{0}% % D = floor( X/ln(X) )
+ \ifnum\D<\apEX \advance\apFRAC by\D \relax \apLNtenexec \fi
+ \EXP{\X-\D*\apLNten}% % mantissa = EXP(X-D*LN(10))
+ \ifnum\D<\apEX \apROLL\OUT\D \apE=0 \else \apE=\D \relax \fi
+ \apFRAC=\digits \apROUND\OUT\apFRAC % OUT = mantissa * 10^D
+}
+\def\LN#1{\relax \apINIT % OUT = LN(#1) ...
+ \evalmdef\X{#1}% % X = #1
+ \localcounts \M \N \E;%
+ \E=\apE
+ \edef\digits{\the\apFRAC}\advance\apFRAC by4
+ \ifnum\apSIGN>0 \else \apERR{\string\LN: argument {\X} is out of range}\apRETURN\fi
+ \apDIG\OUT\relax \M=\apnumD % find M: X = mantissa * 10^M
+ \ifnum\M>-\E \def\sgnout{1}\else % if X in (0,1):
+ \def\sgnout{-1}% % sgnout = -1
+ \do\X=\apDIV 1\X;\E=-\E % X = 1/X
+ \apDIG\OUT\relax \M=\apnumD % find M: X = mantissa * 10^M
+ \fi % else sgnout = 1
+ \advance\M by-1 % M = M - 1
+ \ifnum\M=0 \else\apROLL\X{-\M}\fi % X = X * 10^(-M), now X in (1,10)
+ \advance\M by\E % M = M + E (sientific format of numbers)
+ \do\lnX=\apLNr\X;% % lnX = LN(X) ... roughly estimate
+ \do\A=\apDIV\X{\EXP\lnX};% % A = X / EXP(lnX) ... A =approx= 1
+ \apLNtaylor % OUT = LN(A)
+ \do\LNOUT=\apPLUS\OUT\lnX;% % LNOUT = OUT + LNrOUT
+ \ifnum\M>0 % if M > 0
+ \apLNtenexec % LNtenOUT = ln(10)
+ \apPLUS\LNOUT{\apMUL{\the\M}{\apLNten}}% OUT = LNOUT + M * LNten
+ \fi
+ \ifnum\apSIGN=0 \else \apSIGN=\sgnout \fi % if (OUT != 0) apSIGN = saved sign
+ \apROUND\OUT\digits % round result to desired precision
+ \ifnum\apSIGN<0 \xdef\OUT{-\OUT}\else \global\let\OUT=\OUT \fi
+ \apEND
+}
+\def\apLNtaylor{%
+ \apDIV{\apPLUS{\A}{-1}}{\apPLUS{\A}{1}}% % OUT = (A-1) / (A+1)
+ \ifnum\apSIGN=0 \def\OUT{0}\else % ln 1 = 0 else:
+ \let\Sn=\OUT \let\Kn=\OUT \let\S=\OUT % Sn = OUT, Kn = OUT, S = OUT
+ \apPOW\OUT{2}\apROUND\OUT\apFRAC \let\XX=\OUT % XX = OUT^2
+ \N=1 % N = 1
+ \loop \advance\N by2 % loop N = N + 2
+ \do\Kn=\apMUL\Kn\XX\apROUND\OUT\apFRAC;% Kn = Kn * XX
+ \do\Sn=\apDIV\Kn{\the\N};% % Sn = Kn / N
+ \apTAYLOR\iftrue \repeat % S = S + Sn (Taylor)
+ \apMUL\S{2}% % OUT = 2 * OUT
+ \fi
+}
+\def\apLNr#1{\dimen0=#1pt \apnumC=1
+ \apLNra {0}{.69}{1.098}{1.386}{1.609}{1.791}{1.9459}{2.079}{2.197}{\apLNrten}{}\relax
+}
+\def\apLNra #1#2{\advance\apnumC by1
+ \ifx\relax#2\relax \let\OUT=\apLNrten \let\apNext=\relax
+ \else
+ \ifdim\dimen0<\apnumC pt % linear interpolation:
+ \advance\dimen0 by-\apnumC pt \advance\dimen0 by1pt % dimen0 = x - x_{i-1}
+ \dimen1=#2pt \advance\dimen1 by-#1pt % dimen1 = f(x_i) - f(x_{i-1})
+ \dimen1=\expandafter\apNOPT\the\dimen0 \dimen1 % dimen1 = (x - x_{i-1}) * dimen1
+ \advance\dimen1 by#1pt % dimen1 = f(x_{i-1}) + dimen1
+ \edef\OUT{\expandafter\apNOPT\the\dimen1}% % OUT = dimen1
+ \def\apNext##1\relax{}%
+ \else \def\apNext{\apLNra{#2}}%
+ \fi\fi \apNext
+}
+\def\apLNrten{2.302585} % apLNrten = ln 10 (roughly)
+\def\apLNtenexec{% % OUT = ln 10 ...
+ \expandafter\ifx\csname LNten:\the\apFRAC\endcsname \relax
+ \begingroup \apTOT=0
+ \do\A=\apDIV{10}{\EXP\apLNrten};% % A = 10 / exp(LNrten)
+ \apLNtaylor % OUT = ln A
+ \apPLUS\OUT\apLNrten % OUT = OUT + LNrten
+ \global\expandafter\let\csname LNten:\the\apFRAC\endcsname=\OUT
+ \endgroup
+ \fi
+ \expandafter\let\expandafter \apLNten \csname LNten:\the\apFRAC\endcsname
+}
+\def\apPIvalue{3.141592653589793238462643383279}
+\def\apPIdigits{30}
+\def\apPIexec{%
+ \expandafter\ifx\csname apPI:\the\apFRAC\endcsname \relax \apPIexecA \else
+ \expandafter\let\expandafter\apPI\csname apPI:\the\apFRAC\endcsname
+ \expandafter\let\expandafter\apPIhalf\csname apPIh:\the\apFRAC\endcsname
+ \fi
+}
+\def\apPIexecA{%
+ \ifnum\apPIdigits<\apFRAC \apPIexecB \fi
+ \let\apPI=\apPIvalue
+ \ifnum\apPIdigits>\apFRAC \apROUND\apPI\apFRAC \fi
+ \apnumP=\apTOT \apTOT=0 \apDIV\apPI2\let\apPIhalf=\OUT \apTOT=\apnumP
+ \global\expandafter\let\csname apPI:\the\apFRAC\endcsname=\apPI
+ \global\expandafter\let\csname apPIh:\the\apFRAC\endcsname=\apPIhalf
+}
+\def\apPIexecB{\apINIT
+ \localcounts \N \a \c;%
+ \apTOT=0 \advance\apFRAC by2
+ \def\apSQRTxo{800.199975006248}% initial value for Newton method for SQRT
+ \SQRT{640320}%
+ \let\sqrtval=\OUT
+ \N=0 \def\An{1}\def\Bn{1}\def\Cn{1}\def\S{13591409}%
+ \loop
+ \advance\N by 1
+ \a=\N \multiply\a by6 \advance\a by-1 \c=\a
+ \advance\a by-2 \multiply\c by\a % An = An * 8 * (6N-5) *
+ \advance\a by-2 \multiply\a by8 % * (6N-3) * (6N-1)
+ \apMUL\An{\apMUL{\the\a}{\the\c}}\let\An=\OUT
+ \c=\N \multiply\c by\N % Bn = Bn * n^3
+ \apMUL\Bn{\apMUL{\the\c}{\the\N}}\let\Bn=\OUT
+ \apMUL\Cn{-262537412640768000}\let\Cn=\OUT % Cn = Cn * K3
+ \apDIV{\apMUL\An{\apPLUS{13591409}{\apMUL{545140134}{\the\N}}}}{\apMUL\Bn\Cn}%
+ \let\Sn=\OUT % Sn = An * (K1 + K2 * N) / (Bn * Cn)
+ \apTAYLOR \iftrue \repeat
+ \advance\apFRAC by-2
+ \apDIV{\apMUL{\sqrtval}{53360}}\S
+ \global\let\apPIvalue=\OUT
+ \xdef\apPIdigits{\the\apFRAC}%
+ \apEND
+}
+\def\PI{\relax \apPIexec \let\OUT=\apPI}
+\def\PIhalf{\relax \apPIexec \let\OUT=\apPIhalf}
+
+\def\SIN{\relax \let\apSINCOSx=\apSINx \apSINCOSa}
+\def\COS{\relax \let\apSINCOSx=\apCOSx \apSINCOSa}
+\def\apSINCOSa#1{\apINIT
+ \advance\apFRAC by3
+ \evalmdef\X{#1}\apEnum\X
+ \def\signK{1}\apSINCOSo\apCOSx
+ \ifnum\apSIGN<0 \apREMfirst\X \def\sign{-}\else\def\sign{+}\fi
+ \ifx\apSINCOSx\apCOSx \def\sign{+}\fi
+ \edef\apFRACsave{\the\apFRAC}%
+ \apPIexec
+ \apFRAC=0 \apDIV\X\apPI % OUT = X div PI
+ \ifnum\apSIGN=0 \apSIGN=1 \else
+ \let\K=\OUT
+ \do\X=\apPLUS\X{-\apMUL\K\apPI};% X := X - K * PI
+ \apROLL\K{-1}\apROUND\K{0}%
+ \ifodd 0\XOUT\space \def\signK{-1}\else\def\signK{1}\fi
+ \fi
+ \apSINCOSo\apCOSx
+ \apFRAC=\apFRACsave \relax
+ \do\XmPIh=\apPLUS\X{-\apPIhalf};% XmPIh = | X - PI/2 |
+ \apSINCOSo\apSINx
+ \ifnum\apSIGN<0 \apREMfirst\XmPIh
+ \else % X in (PI/2, PI)
+ \do\X=\apPLUS\apPI{-\X};%
+ \ifx\apSINCOSx\apCOSx \apSIGN=-\signK \edef\signK{\the\apSIGN}\fi
+ \fi % X in (0, PI/2):
+ \apMINUS\X{.78}% % OUT = X - cca PI/4
+ \ifnum\apSIGN<0 \else % if X in (PI/4, PI/2) :
+ \let\X=\XmPIh % X = | X - PI/2 |; SIN <-> COS
+ \ifx\apSINCOSx\apSINx \let\apSINCOSx=\apCOSx \else \let\apSINCOSx=\apSINx \fi
+ \fi
+ \localcounts \N \NN;%
+ \do\XX=\apPOW\X{2}\ROUND\OUT\apFRAC;%
+ \apSINCOSx % X in (0, PI/4), initialize Taylor SIN X or COS X
+ \loop
+ \advance\N by1 \NN=\N
+ \advance\N by1 \multiply\NN by\N
+ \do\Sn=\apDIV{\apMUL\Sn\XX}{-\the\NN};% Sn = - Sn * X^2 / N*(N+1)
+ \apTAYLOR \iftrue\repeat
+ \apSIGN=\sign\signK
+ \ifnum\apTOT=0 \advance\apFRAC by-3 \else \apFRAC=\apTOT \fi
+ \ifnum\apFRAC<0 \apFRAC=-\apFRAC \fi
+ \apROUND\OUT\apFRAC
+ \def\X{0}\ifx\OUT\X \apSIGN=0 \fi
+ \ifnum\apSIGN<0 \edef\OUT{-\OUT}\fi
+ \apEND
+}
+\def\apSINx{\let\S=\X \N=1 \let\Sn=\X}
+\def\apCOSx{\def\S{1}\N=0 \let\Sn=\S}
+\def\apSINCOSo#1{\ifnum\apSIGN=0 \ifx#1\SCgo \apSIGN=\signK \let\OUT=\signK \fi \apRETURN\fi}
+\def\TAN#1{\relax \apINIT
+ \advance\apFRAC by3
+ \evalmdef\X{#1}\apEnum\X
+ \advance\apFRAC by-3
+ \do\denom=\COS\X;%
+ \ifnum\apSIGN=0 \apERR{\string\TAN: argument {\X} is out of range}\apRETURN\fi
+ \SIN\X
+ \apDIV{\SIN\X}\denom
+ \apEND
+}
+\def\ATAN#1{\relax \apINIT
+ \advance\apFRAC by3
+ \evalmdef\X{#1}\apEnum\X
+ \ifnum\apSIGN=0 \def\OUT{0}\apRETURN\fi
+ \ifnum\apSIGN<0 \def\sign{-}\apREMfirst\X \else\def\sign{}\fi
+ \let\tmp=\X \apDIG\tmp\relax
+ \ifnum\apnumD>0 % if X > 1:
+ \apPIexec % OUT = apPIhalf - apATANox
+ \def\tmp{1}\ifx\tmp\X \apDIV\apPIhalf2\else \apATANox \apPLUS\apPIhalf{-\OUT}\fi
+ \else % else
+ \do\X=\apDIV{1}\X;% X := 1/X
+ \apATANox % OUT = apATANox
+ \fi
+ \ifnum\apTOT=0 \advance\apFRAC by-3 \else \apFRAC=\apTOT \fi
+ \ifnum\apFRAC<0 \apFRAC=-\apFRAC \fi
+ \apROUND\OUT\apFRAC
+ \ifx\sign\empty\apSIGN=1 \else \edef\OUT{-\OUT}\apSIGN=-1 \fi
+ \apEND
+}
+\def\apATANox{%
+ \localcounts \N;%
+ \do\XX=\apPLUS{1}{\apPOW\X{2}}\apROUND\OUT\apFRAC;% XX = 1 + X^2
+ \do\Sn=\apDIV\X\XX \apROUND\OUT\apFRAC;% % Sn = X / (1+X^2)
+ \N=1 \let\S=\Sn
+ \loop
+ \advance\N by1
+ \do\Sn=\apMUL{\the\N}\Sn;%
+ \advance\N by1
+ \do\Sn=\apDIV\Sn{\apMUL{\the\N}\XX};% Sn = Sn * N / ((N+1) * (1+X^2))
+ \apTAYLOR \iftrue \repeat
+}
+\def\ASIN#1{\relax \apINIT
+ \evalmdef\X{#1}\apEnum\X \edef\sign{\the\apSIGN}%
+ \apPLUS 1{-\apPOW\X2}% OUT = 1 - X^2
+ \ifnum\apSIGN<0 \apERR{\string\ASIN: argument {\X} is out of range}\apRETURN\fi
+ \do\sqrt=\SQRT\OUT;% sqrt = SRQT {1 - X^1}
+ \ifnum\apSIGN=0 \apPIexec
+ \ifnum\sign<0 \edef\OUT{-\apPIhalf}\apSIGN=-1 % ASIN(-1) = -PI/2
+ \else \let\OUT=\apPIhalf \apSIGN=1 \fi % ASIN(1) = PI/2
+ \apRETURN \fi
+ \ATAN{\X/\sqrt}% OUT = arctan ( X / SQRT {1 - X^2} )
+ \apEND
+}
+\def\ACOS#1{\relax \apPIexec \apPLUS\apPIhalf{-\ASIN{#1}}}
+
+
+%%%%%%%%%%%% Printing expressions, sec 2.11 in apnum.pdf
+
+\def\eprint#1#2{\bgroup \apnumA=0 \apnumE=1 \apEVALb#1\limits
+ \let\apEPe=\relax \apEPi #2\tmpb \apEPe \egroup
+}
+\def\apEPi{\let\apPLUS=\apEPplus \let\apMINUS=\apEPminus
+ \let\apMUL=\apEPmul \let\apDIV=\apEPdiv \let\apPOWx=\apEPpow \def\apPPn##1{##1}%
+ \let\EXP=\apEPexp \def\LN{\apEPf{ln}}\let\SQRT=\apEPsqrt
+ \def\SIN{\apEPf{sin}}\def\COS{\apEPf{cos}}\def\TAN{\apEPf{tan}}%
+ \def\ASIN{\apEPf{arcsin}}\def\ACOS{\apEPf{arccos}}\def\ATAN{\apEPf{arctan}}%
+ \let\PI=\pi \def\PIhalf{{\pi\over2}}%
+ \let\ABS=\apEPabs \let\FAC=\apEPfac \let\BINOM=\apEPbinom
+ \let\SGN=\apEPsgn \let\iDIV=\apEPidiv \let\iMOD=\apEPimod
+ \let\iFLOOR=\apEPifloor \let\iFRAC=\apEPifrac
+ \let\apEPk=\empty \let\apEPy=\empty \def\apEPx{.}%
+ \let\apEPi=\relax \apEPj
+}
+\def\apEPj{}
+\def\apEPplus#1#2{\apEPp{#1}{?...}+\apEPp{#2}{!...}}
+\def\apEPminus#1#2{\apEPp{#1}{?...}-\apEPp{#2}{!!..}}
+\def\apEPmul#1#2{\def\tmpa{#1}\def\tmpb{-1}%
+ \ifx\tmpa\tmpb \if\apEPx!\left(-\apEPp{#2}{!!..}\right)\else
+ -\apEPp{#2}{!!..}\fi
+ \else \apEPp{#1}{?!..}\apMULop \apEPp{#2}{!!..}\fi
+}
+\def\apEPdiv#1#2{{\def\apEPx{.}#1}\over{\def\apEPx{.}#2}}
+\def\apEPpow#1#2{%
+ \let\apEPy=\empty \apEPpowa{#1}\end{#2}%
+ \ifx\apEPy\empty \apEPp{#1}{!!!!}^{\def\apEPx{.}#2}\else#1\fi
+}
+\def\apEPpowa#1{\expandafter\apEPpowb#1;}
+\def\apEPpowb#1#2;\end#3{\ifx#1\apEPf \def\apEPy{\let\apEPy=\empty\def\apEPx{.}#3}\fi}
+\def\apEPf#1#2{\begingroup
+ \mathop{\rm#1}\nolimits
+ \ifx\apEPy\empty \else ^{\apEPy}\let\apEPy=\empty \fi
+ \def\apEPk{\mskip-\thinmuskip}%
+ \def\apEPx{.}%
+ \eprint{#2}{\expandafter\apEPb}\endgroup
+}
+\def\apEPb#1#2{\def\next{\apEPk\left(\def\apEPe{\right)}}%
+ \ifx\apPPn#1\expandafter\apEPd#2.\end{}{\let\next=\relax}.\fi
+ \ifx\apDIV#1\let\next=\relax \fi
+ \next\let\apEPk=\empty #1{#2}%
+}
+\def\apEPp#1#2{\apEPq#1\end\bgroup{\left(\def\apEPx{.}}#2#1\apEPq#1\end\egroup{\right)}#2}
+\def\apEPq#1#2\end#3#4#5#6#7#8{
+ \ifx#5!\def\apEPx{!}\fi
+ \ifx#1\apEPplus \ifx#6!#4\else#3\fi\else
+ \ifx#1\apEPminus \ifx#6!#4\else#3\fi\else
+ \ifx#1\apEPmul \ifx#7!#4\else#3\fi\else
+ \ifx#1\apEPdiv \ifx#8!#4\else#3\fi\else
+ \ifx#1\apEPpow \ifx#8!#4\else#3\fi\else
+ \expandafter\apEPd#1.\end#3{}\apEPx\fi\fi\fi\fi\fi
+}
+\def\apEPd#1#2\end#3#4#5{\ifx-#1\if#5!\ifx#3\bgroup\left(\else\right)\fi\fi\else#4\fi}
+
+\let\apMULop=\cdot
+\def\apEPabs#1{\left|\eprint{#1}{}\right|}
+\def\apEPfac#1{\eprint{#1}{\expandafter\apEPb}\,!}
+\def\apEPbinom#1#2{{\eprint{#1}{}\choose\eprint{#2}{}}}
+\def\apEPsqrt#1{\sqrt{\eprint{#1}{}}}
+\def\apEPexp#1{{\rm e}^{\eprint{#1}{}}}
+\def\apEPsgn#1{\mathop{\rm sign}\eprint{#1}{\expandafter\apEPb}}
+\def\apEPdivmod#1#2#3{\left[\eprint{#2}{\expandafter\apEPb}%
+ \mathbin{\rm #1}\eprint{#3}{\expandafter\apEPb}\right]}
+\def\apEPidiv{\apEPdivmod{div}}
+\def\apEPimod{\apEPdivmod{mod}}
+\def\apEPifloor#1{\left\lfloor\eprint{#1}{}\right\rfloor}
+\def\apEPifrac#1{\left\{\eprint{#1}{}\right\}}
+
+\def\corrnum#1{\edef#1{\expandafter\apEPc#1\end}}
+\def\apEPc#1#2\end{\ifx#1-{-}\apEPc#2\end\else \ifx#1.0.#2\else #1#2\fi\fi}
+
+%%%%%%%%%%%% Conclusion, sec. 2.12 in apnum.pdf
+
+\let\PLUS=\apPLUS \let\MINUS=\apMINUS \let\MUL=\apMUL \let\DIV=\apDIV \let\POW=\apPOW
+\let\SIGN=\apSIGN \let\ROUND=\apROUND \let\NORM=\apNORM \let\ROLL=\apROLL
+
+\ifx\documentclass\undefined \else % please, don't remove this message
+\message{WARNING: the author of apnum package recommends: Never use LaTeX.}\fi
+\catcode`\@=\apnumZ
+\endinput
+
+1.0 <Nov 2014> - First version released
+1.1 <Jan 2015>
+ - POW implemented more simple (by base 2 of exponent)
+ - \next renamed in order to avoid name conflict
+1.2 <May 2015> - .5+.5=.1 bug fixed
+1.3 <Dec 2015> -
+ - \apPPn corrected (empty \OUT bug fixed)
+ - \apEVAL: spaces ignored between parameters of function-like macros
+ - \apEVAL: in one group, \apEND introduced, \apOUTtmpb removed
+ - \apPLUS, etc. instead \PLUS introduced
+ - \apSTRIPfirst introduced
+ - \apEVALone, \apEVALtwo removed
+ - \addE renamed to \apEadd
+ - \ROLL, \NORM, \ROUND renamed to \apROLL, \apNORM, \apROUND
+ - \apREV removed
+ - \ABS, \iDIV, \iMOD, \iROUND, \iFRAC, \FAC rewriten
+ - \XOUT is empty, no "0000" after \apROLL\a0 (2.0000 bug fixed)
+ - \def#1{} corrected
+ - \localcount after \evaldef in order to avoid name conflict
+ - \PI added
+ - \apEnorm to \apEnum renamed
+1.4 <Dec 2015>
+ - \ATAN, \ASIN, \ACOS added
+ - \SIN, \COS, \TAN added
+ - \apTOT=0 by default
+1.4a \end -> \limits, internal change in \evaldef because LaTeX redefines \end
+1.4b \apSINCOS: \ifx\OUT eq 0 added after \apROUND (bug fixed).
+1.5 <Jan 2016>
+ - \iROUND replaced by \iFLOOR, \iFRAC corrected (for negative numbers)
+ - \eprint introduced
+1.6 <Feb 2016>
+ - \evalmdef introduced
+ - \EXP for arg>=4 rewritten, \apEX register introduced
+1.7 <Apr 2018>
+ - \eprint: bug removed (round brackets around negative constants)
diff --git a/macros/generic/arrayjobx/README b/macros/generic/arrayjobx/README
new file mode 100644
index 0000000000..e8db2aec6f
--- /dev/null
+++ b/macros/generic/arrayjobx/README
@@ -0,0 +1,29 @@
+ +-----------------------------------------------------------+
+ | 'arrayjob'; 'arrayjobx' |
+ | Versions 1.03; 1.04 |
+ | May 3, 2000; May 3, 2010 |
+ | |
+ | Zhuhan Jiang (University of Western Sydney - Australia) |
+ | <zhuhan@scm.uws.edu.au> |
+ +-----------------------------------------------------------+
+
+
+The 'arrayjob(x)' package provides array data structures in (La)TeX, in the
+meaning of the classical procedural programming languages like Fortran, Ada or
+C, and macros to manipulate them. Arrays can be mono or bi-dimensional.
+
+This is useful for applications which require high level programming
+techniques, like algorithmic graphics programmed in the TeX language.
+
+The accompanying documentation files (arrayjob.tex, arrayjobx.tex ) were
+written by Denis Girou <Denis.Girou@idris.fr> and updated by Michael Sharpe
+(msharpe@ucsd.edu).
+
+Version 1.03 (arrayjob) is provided only for compatibility with old work that
+made explicit use of the \array macro. Version 1.04 (arrayjobx, modification
+suggested by Michael Sharpe) should be used for all new work---the only
+difference is that the macro known as \array in version 1.03 is known under
+the name \arrayx in version 1.04 in order to avoid conflict with the name
+\array as used in amsmath.
+
+This package is released under the terms of the LaTeX Project Public License.
diff --git a/macros/generic/arrayjobx/arrayjob.pdf b/macros/generic/arrayjobx/arrayjob.pdf
new file mode 100644
index 0000000000..a20bf9e175
--- /dev/null
+++ b/macros/generic/arrayjobx/arrayjob.pdf
Binary files differ
diff --git a/macros/generic/arrayjobx/arrayjob.sty b/macros/generic/arrayjobx/arrayjob.sty
new file mode 100644
index 0000000000..0712a49d11
--- /dev/null
+++ b/macros/generic/arrayjobx/arrayjob.sty
@@ -0,0 +1,188 @@
+% ARRAY STRUCTURE - arrayjob.sty - Version 1.03 - 05/03/00
+%
+% By Zhuhan Jiang (01/05/95), extracted from formlett.sty
+% (see CTAN/macros/generic/formlett.sty from line 344 to line 483)
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License distributed from CTAN archives
+% in directory macros/latex/base/lppl.txt
+%
+% * 01/05/95 - Version 1.00
+% + Original version
+% * 12/21/99 - Version 1.01
+% + Spurious blanks removed in \read@array and \get@max@count
+% (reported by Antonio Leitao <aml@gia.ist.utl.pt>
+% and Denis Girou <Denis.Girou@idris.fr>)
+% * 04/05/00 - Version 1.02
+% + Add the \ifexpandarrayelement macro to allow to evaluate
+% or not the content to put as an element of the array
+% (from Denis Girou <Denis.Girou@idris.fr>)
+% + Put this package under the terms of the LaTeX Project
+% Public License
+% * 05/03/00 - Version 1.03
+% + Add a \ProvidesPackage macro when LaTeX is used
+% (according to the example given by Bernd Raichle
+% <raichle@Informatik.Uni-Stuttgart.DE>)
+%
+%
+% \newarray\ARRAYNAME
+% \delarray\ARRAYNAME
+%
+% \ARRAYNAME(A1,..,An)={T}
+% \readarray{ARRAYNAME}{ B1 & B2 & ... & Bm }
+% \dataheight
+%
+% \data(A1,...,An)=\data( A1 + (A2-1)*\dataheight +
+% ... + (An-1)*\dataheight^{n-1} )
+% if \normalindextrue
+% =\data( An + (An-1 -1)*\dataheight +
+% ... + (A1-1)*\dataheight^{n-1} )
+% if \normalindexfalse
+%
+% \checkARRAYNAME(A1,..,An)
+% \ifemptydata valid when \checkARRAYNAME is just executed
+% \cachedata: keeps the data of \ARRAYNAME(m)
+% when \checkARRAYNAME(m) is executed
+%
+% OTHERS:
+% save to array: \array{n}(m)={T}
+% get from array: \array{n}(m)
+% clear element: \clrarray{n}(m)
+% test element: \testarray{n}(m)
+% macro save to \temp@macro
+%
+%
+% e.g.
+%
+% \newarray\Table
+% \readarray{Table}{one&two& \unknownmacro && &six}
+% \Table(7)={seven}
+% \dataheight=0 % or 1 or < 0
+% \Table(7) = \Table(2,6,1) % 7=1+(2-1)+(6-1)+(1-1)
+% \normalindexfalse
+% \dataheight=3
+% \Table(7) = \Table(1,7) = \Table(3,1)
+% \normalindextrue
+% \Table(7) = \Table(7,1) = \Table(1,3)
+%
+% \checkTable(4) \ifemptydata (4)=empty \fi
+% \checkTable(5) \ifemptydata\else (5)=nonempty \fi
+% \ifx\cachedata\space ={\tt <space>}\fi
+% \checkTable(1000) \ifemptydata (1000)=empty \fi
+%
+% \delarray\Table
+%
+%
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax%
+\else
+ \ProvidesPackage{arrayjob}[2000/05/03 v1.03 Array management]
+\fi
+%
+\xdef\EntryArrayJob{\the\catcode`\@}\catcode`\@=11\relax
+\newif\ifemptydata \newcount\dataheight
+\newif\ifnormalindex \normalindexfalse
+%
+\newcount\array@width \newcount\index@count \newcount\index@total
+\newif\ifone@VEC \newif\if@rev@index
+\newtoks\temp@toks \newcount\temp@count
+\newcount\temp@@count \newcount\temp@@@count
+%
+\newif\ifexpandarrayelement
+%
+\long\def\assign@VEC#1(#2)=#3{\temp@count=#2 \relax
+\get@max@count{total@#1}\temp@count
+\ifexpandarrayelement
+ \expandafter\xdef\csname#1#2\string~\endcsname{#3}%
+\else
+ \expandafter\gdef\csname#1#2\string~\endcsname{#3}%
+\fi}
+\def\get@VEC#1(#2){\csname#1#2\string~\endcsname}
+\def\clrarray#1(#2){%
+ \global\expandafter\let\csname#1#2\string~\endcsname=\undefined@}
+%
+\def\testarray#1(#2){%
+ \expandafter\let\expandafter\temp@macro\csname#1#2\string~\endcsname
+ \ifx\temp@macro\relax \def\temp@macro{}\fi}%
+%
+\def\array#1(#2){\def\check@VEC{%
+ \ifx=\next@VEC \def\full@VEC####1{\assign@VEC#1(#2)####1}%
+ \else \def\full@VEC{\get@VEC#1(#2)}\fi \full@VEC}%check@VEC
+\futurelet\next@VEC\check@VEC}
+%
+\def\get@index(#1)#2\safty@mark{\one@VEC#2,\safty@mark
+ \def\next@@VEC{#1}\ifx\next@@VEC\empty\def\next@@VEC{\array@width}\fi
+ \if@rev@index
+ {\temp@count=1 \advance\index@count1 \relax
+ \ifnum\index@count<\index@total
+ \loop \multiply\temp@count \next@@VEC
+ \advance\index@count-1 \relax
+ \ifnum\index@count>0 \repeat
+ \fi \global\temp@@count\temp@count }%
+ \else \multiply\temp@@count \next@@VEC \fi
+ \ifnum\temp@@count=0 \temp@@count=1 \relax \fi
+ \advance\temp@count-1 \ifnum\temp@count<0 \temp@count=0 \fi
+ \multiply\temp@count \temp@@count
+ \advance\temp@@@count by \temp@count \advance\index@count1
+ \ifone@VEC
+ \def\next@@VEC{\index@total=\index@count \advance\temp@@@count1 }%
+ \else \one@VEC#2\safty@mark \edef\next@@VEC{\noexpand\get@index(#1)%
+ \the\temp@toks\noexpand\safty@mark}%
+ \fi \next@@VEC}%
+%
+\def\one@VEC#1,#2\safty@mark{\def\temp@macro{#2}\temp@toks={#2}%
+ \ifx\temp@macro\empty \one@VECtrue \else \one@VECfalse \fi
+ \temp@count=#1 \relax }%
+%
+\def\get@all@index(#1)#2\safty@mark{%
+ \temp@@@count=0 \temp@@count=0 \index@count=0 \@rev@indexfalse
+ \get@index(#1)#2\safty@mark
+ \ifnormalindex\else
+ \temp@@@count=0 \temp@@count=0 \index@count=0 \@rev@indextrue
+ \get@index(#1)#2\safty@mark \fi }%
+%
+\def\read@array[#1]#2#3{\temp@count=1
+ \def\one@item##1#1##2\safty@mark{\def\temp@macro{##2}\temp@toks={##2}%
+ \ifx\temp@macro\empty\else
+ \def\temp@macro{\one@item##2\safty@mark}\fi
+ {\temp@toks={##1}\def\temp@@macro{\array{#2}(\the\temp@count)=}%
+ \expandafter\temp@@macro\expandafter{\the\temp@toks}}%
+ \expandafter\edef\csname total@#2\endcsname{\the\temp@count}%
+ \advance\temp@count1\temp@macro}%
+ \one@item#3#1\safty@mark}%
+%
+\def\strip@esc#1{\temp@count=\escapechar \escapechar=-1 %
+ \temp@toks=\expandafter{\string#1}\escapechar\temp@count}
+\def\get@max@count#1#2{\edef\temp@macro{\csname #1\endcsname}%
+ \ifnum\temp@macro<#2\expandafter\xdef\csname #1\endcsname{\the#2}\fi}%
+%
+\def\newarray#1{\strip@esc{#1}%
+ \expandafter\gdef\csname total@\the\temp@toks\endcsname{0}%
+ \expandafter\edef\csname\the\temp@toks\endcsname(##1)%
+ {\noexpand\get@all@index(\noexpand\dataheight)##1\noexpand\safty@mark
+% \noexpand\get@max@count{total@\the\temp@toks}\noexpand\temp@@@count
+ \noexpand\array{\the\temp@toks}(\noexpand\the\noexpand\temp@@@count)}%
+ \expandafter\edef\csname check\the\temp@toks\endcsname(##1)%
+ {\noexpand\get@all@index(\noexpand\dataheight)##1\noexpand\safty@mark
+ \noexpand\testarray{\the\temp@toks}(\noexpand\the
+ \noexpand\temp@@@count)\noexpand\let\noexpand\cachedata
+ \noexpand\temp@macro\noexpand\ifx\noexpand\temp@macro\noexpand\empty
+ \noexpand\emptydatatrue\noexpand\else\noexpand\emptydatafalse
+ \noexpand\fi}}%
+%
+\def\delarray#1{\strip@esc{#1}% delete array globally
+ \temp@count=0 \temp@@count=\csname total@\the\temp@toks\endcsname
+ \loop \expandafter\global\expandafter\let
+ \csname\the\temp@toks\string~\endcsname\undefined@
+ \advance\temp@count1 %
+ \ifnum\temp@count<\temp@@count \repeat % global loop for less memory
+ \global\expandafter\let\csname total@\the\temp@toks\endcsname\undefined@
+ \global\expandafter\let\csname \the\temp@toks\endcsname\undefined@
+ \global\expandafter\let\csname check\the\temp@toks\endcsname\undefined@ }%
+%
+\def\readarray#1#2{\read@array[&]{#1}{#2}}%
+%
+\catcode`\@=\EntryArrayJob\relax
+\endinput
+%
+% END OF MACROS
diff --git a/macros/generic/arrayjobx/arrayjob.tex b/macros/generic/arrayjobx/arrayjob.tex
new file mode 100644
index 0000000000..899cfe39e7
--- /dev/null
+++ b/macros/generic/arrayjobx/arrayjob.tex
@@ -0,0 +1,2097 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% arrayjob.doc --- Documentation of the `arrayjob' package from Zhuhan Jiang
+%%
+%% Author : Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% Created the : Fri Jan 7 21:13:20 2000
+%% Last mod. by : Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% Last mod. the : Wed May 31 20:10:39 2000
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{article}
+
+\usepackage{arrayjob} % Arrays management
+\usepackage{fancyvrb} % Fancy verbatims
+\usepackage[width=18cm]{geometry} % Page layout
+\usepackage{graphics} % Graphics LaTeX standard package
+\usepackage{ifthen} % Convenient conditionals in LaTeX
+\usepackage{mflogo} % For the MetaFont and MetaPost logos
+\usepackage{multido} % General loop macro
+\usepackage{url} % URLs convenient typesetting
+\usepackage{trace}
+
+% For PSTricks examples
+\newif\ifpstricks
+\IfFileExists{pstricks.sty}{%
+\pstrickstrue
+%\usepackage{pstcol} % PSTricks package with `color' interface
+\usepackage{pst-node} % PSTricks nodes package
+\usepackage{pst-plot} % PSTricks plots package
+\usepackage{pst-grad} % PSTricks gradients package
+%\usepackage{pst-key} % PSTricks interface to the `keyval' package
+}{%
+\usepackage{color}
+} % Color LaTeX standard package
+
+% Definition of new colors
+\definecolor{Khaki} {rgb}{0.94,0.90,0.55}
+\definecolor{LemonChiffon}{rgb}{1.,0.98,0.8}
+
+% A unique string for TeX and LaTeX
+\newcommand{\AllTeX}{%
+{\rm(L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em)%
+T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+% Package names
+\newcommand{\AlDraTeXPackage}{\textsf{(Al)Dra\TeX}}
+\newcommand{\ArrayJobPackage}{`\textsf{arrayjob}'}
+\newcommand{\FormLettPackage}{`\textsf{formlett}'}
+\newcommand{\IfThenPackage}{`\textsf{ifthen}'}
+\newcommand{\MetaFontPackage}{\MF}
+\newcommand{\MetaPostPackage}{\MP}
+\newcommand{\MultiDoPackage}{`\textsf{multido}'}
+\newcommand{\PSTricksPackage}{\textsf{PSTricks}}
+\newcommand{\RepeatPackage}{`\textsf{repeat}'}
+
+% Aligned labels in a description environment
+\newenvironment{Description}[1]{%
+\begin{list}{nothing}{\setlength{\leftmargin}{#1}
+\setlength{\labelwidth}{\leftmargin}\setlength{\labelsep}{1mm}}}
+{\end{list}}
+
+% If PSTricks is not available
+\newcommand{\PSTricksExampleNotShown}{%
+\vspace{2mm}
+\centerline{\fbox{\textbf{Example not shown here because PSTricks is not
+ available on this platform.}}}}
+
+% Character to define verbatim strings, with escape characters /?; (from `fancyvrb')
+\DefineShortVerb[commandchars=/?;]{\!}
+
+\VerbatimFootnotes % Allow verbatim material in footnotes (from `fancyvrb')
+
+% Some advices from Rolf Niepraschk
+\newcommand{\BS}{\texttt{\symbol{`\\}}}
+\newcommand{\Macro}[1]{\texttt{\BS#1}}
+\newcommand{\Variable}[1]{\textnormal{\textit{\(\langle\)#1\,\(\rangle\)}}}
+\newcommand{\Parameter}[1]{\texttt{\symbol{`\{}#1\symbol{`\}}}}
+
+% To format TeX macro strings
+\newcommand{\FormatTeXMacro}[1]{\Macro{#1}\hfill :}
+
+\makeatletter
+
+% Example environments
+% (do not use in them the /?; characters, that we will be used as escape characters!)
+
+% For highlighting some verbatim sequences (array names, macro names and comments)
+\def\HLReverse#1{{%
+\setlength{\fboxsep}{1pt}%
+\colorbox{black}{\textcolor{white}{\textbf{#1}}}}}
+\def\HLMacro#1{\BS{}def\HLMacro@i#1\@nil}
+\def\HLMacro@i#1def#2\@nil{{%
+\setlength{\fboxsep}{1pt}%
+\colorbox{black}{\textcolor{white}{\textbf{#2}}}}}
+\def\HLComment#1{\textit{#1}}
+
+\def\Example{\FV@Environment{}{Example}}
+\def\endExample{%
+\end{VerbatimOut}
+\Below@Example{\input{\jobname.tmp}}
+\endgroup}
+
+\def\CenterExample{\FV@Environment{}{Example}}
+\def\endCenterExample{%
+\end{VerbatimOut}%
+\begin{center}
+\Below@Example{\input{\jobname.tmp}}
+\end{center}
+\endgroup}
+
+\def\SideBySideExample{\FV@Environment{}{Example}}
+\def\endSideBySideExample{%
+\end{VerbatimOut}%
+\SideBySide@Example{\input{\jobname.tmp}}
+\endgroup}
+
+\def\FVB@Example{%
+\begingroup
+\FV@UseKeyValues
+\parindent=0pt
+\multiply\topsep by 2
+\VerbatimEnvironment
+\begin{VerbatimOut}[codes={\catcode`\Z=12}]{\jobname.tmp}}
+
+\def\Below@Example#1{%
+\VerbatimInput[gobble=0,commentchar=Z,commandchars=/?;,numbersep=3pt,
+ frame=single,numbers=left]%
+ {\jobname.tmp}
+\catcode`\Z=9\relax%
+% We suppress the effect of the highlighting macros
+\catcode`/=0\relax%
+\catcode`?=1\relax%
+\catcode`;=2\relax%
+\def\HLReverse##1{##1}%
+\def\HLMacro##1{##1}%
+\def\HLComment##1{##1}%
+#1\par}
+
+\def\SideBySide@Example#1{%
+\@tempdimb=\FV@XRightMargin
+\advance\@tempdimb -5mm
+\begin{minipage}[c]{\@tempdimb}
+ \fvset{xrightmargin=0pt}
+ \catcode`\Z=9\relax%
+ % We suppress the effect of the highlighting macros
+ \catcode`/=0\relax%
+ \catcode`?=1\relax%
+ \catcode`;=2\relax%
+ \def\HLReverse##1{##1}%
+ \def\HLMacro##1{##1}%
+ \def\HLComment##1{##1}%
+ #1
+\end{minipage}%
+\@tempdimb=\textwidth
+\advance\@tempdimb -\FV@XRightMargin
+\advance\@tempdimb 5mm
+\begin{minipage}[c]{\@tempdimb}
+ \VerbatimInput[gobble=0,commentchar=Z,commandchars=/?;,
+ numbersep=3pt,frame=single,numbers=left,
+ xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
+\end{minipage}}
+
+\makeatother
+
+% Source codes must be indented by 2 spaces
+\fvset{gobble=2,frame=single,numbers=left,numbersep=1mm}
+
+\begin{document}
+
+\title{The \ArrayJobPackage{} package\\Management of arrays in \AllTeX}
+\author{Zhuhan Jiang\\School of Computing and Mathematics\\
+ University of Western Sydney\\Sydney\\Australia\\
+ {\footnotesize email: zhuhan@scm.uws.edu.au}\\[5mm]
+ {\footnotesize (Documentation: Denis Girou%
+ \footnote{All errors and misunderstandings are mine.}
+ \hspace{1mm}(CNRS/IDRIS -- France) --
+ Denis.Girou@idris.fr)}}
+\date{Version 1.03\\May 3, 2000\\
+ {\small Documentation revised May 31, 2000, edited lightly May 3, 2010 by Michael Sharpe}}
+
+\maketitle
+
+\begin{abstract}
+ This package provides array data structures in \AllTeX, in the meaning of
+the classical procedural programming languages like Fortran, Ada or C, and
+macros to manipulate them. Arrays can be mono or bi-dimensional.
+
+ This is useful for applications which require high level programming
+techniques, like algorithmic graphics programmed in \TeX. This version conflicts with some macros in the {\tt amsmath} package. Version 1.04 resolves those issues. It should be used for all new work.
+\end{abstract}
+
+\tableofcontents
+
+\section{Introduction}
+
+ One of the big advantages of the \AllTeX{} system over common interactive
+software for text processing is that it offer, also, a programming language,
+which give, to people who have some knowledge in the algorithmic and
+programming fields, an exceptional flexibility and power.
+
+ Nevertheless, \TeX{} is a rather specific programming language, based on
+macro expansion, which implements a lot of unusual constructs but lacks some that are very familiar in the classical procedural languages, as
+\emph{arrays} to store and retrieve arbitrary pieces of data, stored in a
+structured way. The main reason why they were not integrated in \TeX{} was
+perhaps that arrays did not seem very useful in a language focussed on text processing (but
+\MetaFontPackage{}, for instance, does has them). Nevertheless, one of the few
+applications where this is straightforward to use them is to program a mailing
+system, where nearly the same information is to be formatted several times,
+depending of values which can be simply retrieved from an array of data. This
+was the goal of the \FormLettPackage{} package \cite{FORMLETT}, written in
+1993-1995 by Zhuhan Jiang for dealing with mass letters, invoices and similar
+tasks of some duplicative nature. It implemented a small but powerful set of
+macros to manage arrays, which have been extracted to form the present
+\ArrayJobPackage{} package. The arrays can be mono or bi-dimensional%
+\footnote{You can use more than two dimensions, but not in the meaning of the
+classical programming languages (see page \pageref{par:DataHeight})}
+and they are dynamically allocated (so we do not have to declare their
+dimension statically.)%
+\footnote{Stephan von Bechtolsheim \cite[Volume \textsc{III}, paragraph 20.3,
+page 136]{SVB93} also demonstrated such macros for array management in the
+third volume of his huge book, but it was limited to mono-dimensional
+arrays.}.
+
+ Array structures are, at the opposite of text management, often very useful
+in graphic programming. This is why the \AlDraTeXPackage{} package from Eitan
+Gurari \cite{ALDRATEX} (see also \cite{Gur94}) integrate such functionality
+(but which is bundled inside this package and could not be extracted easily
+from it), and this is also the case for the \MetaPostPackage{} package
+\cite{METAPOST} (but this one do not use \TeX{} as programming language)%
+\footnote{Another required feature, used in conjunction with the managements
+of arrays, is a generic loop mechanism. \TeX{} offer the \Macro{loop} macro
+and \LaTeX{} the \Macro{whiledo} macro of the \IfThenPackage{} package (and
+also the internal \Macro{@for}, \Macro{@whilenum}, etc. macros), but a more
+high-level structure is to be preferred, as the ones defined too in the
+\AlDraTeXPackage{} or \MetaPostPackage{} packages. We will use in our examples
+the \MultiDoPackage{} package \cite{MULTIDO}, also written by Timothy van
+Zandt, but others are available, like the \RepeatPackage{} package written by
+Victor Eijkhout \cite{REPEAT}.}. This fact explain why most of our examples in
+this documentation will concern the area of \emph{graphic programming} (here
+using the \PSTricksPackage{} package from Timothy van Zandt \cite{PSTRICKS}).
+
+\section{Command reference}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{newarray}] Define a new array.
+
+ Syntax: !\newarray/Macro?/Variable?ArrayName;;!
+
+ Example: !\newarray\Values!
+
+ \item[\FormatTeXMacro{delarray}] Delete an array.
+
+ Syntax: !\delarray/Macro?/Variable?ArrayName;;!
+
+ Example: !\delarray\Values!
+
+ Remarks:
+ \begin{enumerate}
+ \item obviously, elements of a deleted array could not be accessed
+ later,
+ \item take care that the elements of a deleted array are not
+ themselves deleted.\newline
+ So, \verb+\delarray\Data \newarray\Data \Data(I)+ can produce
+ strange behavior. Just avoid reusing deleted arrays.
+ \end{enumerate}
+
+ \item[\FormatTeXMacro{ArrayName}] Store or get the content of the array
+ element specified by the index/indices. In the last case, the content is
+ inserted at the current point.
+
+ Syntax: !/Macro?/Variable?ArrayName;;(I)=/Parameter?/Variable?Content;;! or more
+ generally\newline
+ \hspace*{1.3cm}!/Macro?/Variable?ArrayName;;(I1,...,In)=/Parameter?/Variable?Content;;!
+ to store a value
+
+ \hspace{1.3cm}!/Macro?/Variable?ArrayName;;(I)! or more generally
+ !/Macro?/Variable?ArrayName;;(I1,...,In)! to retrieve a value
+
+ Examples: !\Data(6)={Paul Adams}!
+
+ \hspace{1.75cm}!\Values(19)!
+
+ \item[\FormatTeXMacro{readarray}] Store consecutive values in an array,
+ starting from the indice one.
+
+ Syntax: !\readarray/Parameter?/Variable?ArrayName;;=/Parameter?/Variable?Content1;&...&/Variable?ContentM;;!
+
+ Example: !\readarray{Actors}{Louise Brooks&Marlene Dietrich&Clark Gable}!
+
+ Remarks:
+ \begin{enumerate}
+ \item the values must be separated by the \textbf{\&} character,
+ \item take care that the trailing spaces are significant, so the
+ previous definition is different from the following one:
+
+ !\readarray{Actors}{Louise Brooks & Marlene Dietrich & Clark Gable}!
+ \item you can use \AllTeX{} macros inside the values.
+ \end{enumerate}
+\end{Description}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Values
+ \readarray{/HLReverse?Values;}{A&B&C&D}
+ \verb+\Values(3)+ = `\Values(3)'
+ \newarray\Actors
+ \readarray{/HLReverse?Actors;}{Louise Brooks&Marlene Dietrich&Clark Gable}
+ Z\par
+ \verb+\Actors(2)+ = `\Actors(2)'
+ \readarray{/HLReverse?Actors;}{%
+ Louise Brooks & Marlene Dietrich & Clark Gable}
+ Z\par
+ \verb+\Actors(2)+ = `\Actors(2)'
+ \Actors(4)={\textit{\underline{Ida Lupino}}}
+ Z\par
+ \verb+\Actors(4)+ = `\Actors(4)'
+\end{SideBySideExample}
+
+\vspace{3mm}
+\noindent If you really need to trim the unnecessary left and right spaces, you must
+apply a special action, like this one:
+
+\begin{Example}
+ \def\BS{\texttt{\symbol{`\\}}}
+
+ \newarray\Strings
+ \readarray{/HLReverse?Strings;}{a& b&c c & d dd ddd }
+
+ \multido{\iString=1+1}{4}{%
+ \checkStrings(\iString)%
+ \BS\texttt{Strings(\iString)}=`\cachedata'\qquad}
+
+ \makeatletter
+
+ % /HLComment?A \TrimSpaces macro adapted from Michael J. Downes <epsmjd@ams.org>;
+ % /HLComment?(posted on c.t.t. June 19, 1998);
+ % /HLComment?\number`\x reads past one following space (expanding as it goes);
+ \long\def\TrimSpaces#1{\expandafter\TrimSpaces@i\number`\^^00#1| |}
+ % /HLComment?Remove the "0" produced by \number`\^^00, and " |" at the end.;
+ \long\def\TrimSpaces@i 0#1 |{\TrimSpaces@ii\empty#1|}
+ % /HLComment?" |" was removed by \TrimSpaces@i, now remove a trailing "||" or "| |";
+ \long\def\TrimSpaces@ii #1|#2|{#1}
+
+ \makeatother
+
+ \multido{\iString=1+1}{4}{%
+ \checkStrings(\iString)%
+ \BS\texttt{Strings(\iString)}=`\TrimSpaces{\cachedata}'\qquad}
+\end{Example}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{check}] Get the content of the array element specified
+ by the indice(s) and store the result in the macro !\cachedata!
+
+ Syntax: !\check/Variable?ArrayName;(I)! or more generally
+ !\check/Variable?ArrayName;(I1,..,In)!
+
+ Example: !\checkActors(2)!
+ \item[\FormatTeXMacro{cachedata}] Macro where the content is stored after
+ a !\check! request.
+ \item[\FormatTeXMacro{ifemptydata}] True if the last \Macro{check} request
+ has given an empty result.
+\end{Description}
+
+\newarray\Values
+\readarray{Values}{A&B&C&D}
+
+\newarray\Actors
+\newarray\Dates
+\newarray\Sexes
+\readarray{Actors}{Louise Brooks&%
+ Marlene Dietrich&%
+ Clark Gable}
+\readarray{Dates}{1906--1985&%
+ 1902--1992&%
+ 1901--1960}
+\readarray{Sexes}{2&2&1}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ % /HLComment?Plain TeX usage;
+ \checkValues(2)%
+ \verb+\Values(2)+ = `\cachedata'
+ Z\par
+ \checkActors(3)%
+ \verb+\Actors(3)+ = `\cachedata'
+ Z\par
+ \checkActors(5)%
+ \ifemptydata
+ \verb+\Actors(5)+ not defined.
+ \fi
+ Z\par
+ % /HLComment?LaTeX usage;
+ \newcommand{\IsEmptyElement}[2]{%
+ \ifthenelse{\boolean{emptydata}}{#1}{#2}}
+ \checkActors(3)%
+ \verb+\Actors(3)+ = \IsEmptyElement{not defined}{`\cachedata'}
+ Z\par
+ \checkActors(5)%
+ \verb+\Actors(5)+ \IsEmptyElement{not defined}{`\cachedata'}
+\end{SideBySideExample}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{ifnormalindex}] See below (Default: !\normalindexfalse!).
+
+ \item[\FormatTeXMacro{dataheight}\label{par:DataHeight}] Counter containing
+ the number of elements in the first dimension, if arrays are bi-dimensional.
+
+ Syntax: !\dataheight=/Variable?Number;!
+
+ Remarks:
+ \begin{enumerate}
+ \item arrays are monodimensional when !\dataheight!~$\leq~1$,
+ \item if !\normalindexfalse! (which is the default value), we have:
+ $$\hspace{-3cm}\Macro{\Variable{ArrayName}}(I_1,...,I_n)
+ = \Macro{\Variable{ArrayName}}(I_n + (I_{n-1}-1) *
+ \Macro{dataheight} + \cdots
+ + (I_1-1) * \Macro{dataheight}^{n-1})$$
+
+ and if !\normalindextrue!, we have:
+ $$\hspace{-3cm}\Macro{\Variable{ArrayName}}(I_1,...,I_n)
+ = \Macro{\Variable{ArrayName}}(I_1 + (I_2-1) *
+ \Macro{dataheight} + \cdots
+ + (I_n-1) * \Macro{dataheight}^{n-1})$$
+ \end{enumerate}
+\end{Description}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Letters
+ \readarray{/HLReverse?Letters;}{A&B&C&D&E&F&G&H&I&J}
+ \dataheight=5
+
+ Z\begin{tabular}{c|c|c|c|c|c|c|c|c|}
+ Z \multicolumn{1}{c}{} & \multicolumn{1}{c}{1} & \multicolumn{1}{c}{2} &
+ Z \multicolumn{1}{c}{3} & \multicolumn{1}{c}{4} & \multicolumn{1}{c}{5} \\ \cline{2-6}
+ Z 1 & A & B & C & D & E \\ \cline{2-6}
+ Z 2 & F & G & H & I & J \\ \cline{2-6}
+ Z\end{tabular}
+ Z\\[2mm]
+ % /HLComment?Default is \normalindexfalse;
+ \verb+\Letters(1,2)=+`\Letters(1,2)'
+ Z\par
+ \verb+\Letters(2,1)=+`\Letters(2,1)'
+ Z\\[2mm]
+ Z\begin{tabular}{c|c|c|}
+ Z \multicolumn{1}{c}{} & \multicolumn{1}{c}{1} & \multicolumn{1}{c}{2} \\ \cline{2-3}
+ Z 1 & A & F \\ \cline{2-3}
+ Z 2 & B & G \\ \cline{2-3}
+ Z 3 & C & H \\ \cline{2-3}
+ Z 4 & D & I \\ \cline{2-3}
+ Z 5 & E & J \\ \cline{2-3}
+ Z\end{tabular}
+ Z\\[2mm]
+ \normalindextrue
+ \verb+\Letters(1,2)=+`\Letters(1,2)'
+ Z\par
+ \verb+\Letters(2,1)=+`\Letters(2,1)'
+\end{SideBySideExample}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{ifexpandarrayelement}] Boolean macro to allow or not
+ the element to be evaluated before to be stored in the array (Default:
+ !\expandarrayelementfalse!).
+
+ Syntax: !\expandarrayelementtrue! or !\expandarrayelementfalse!
+
+ Remark: take care to the possible side effects if you store some macros
+ as values of some array elements without evaluating them, as they can
+ change of content later... (see the following examples).
+\end{Description}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Data
+ \newcount\CounterP % /HLComment?Plain TeX usage;
+ \CounterP=3
+ \newcounter{CounterL} % /HLComment?LaTeX usage;
+ \setcounter{CounterL}{3}
+ \def\Town{Madrid}
+ \Data(1)={\the\CounterP}
+ \Data(2)={\the\value{CounterL}}
+ \Data(3)={\Town}
+
+ \expandarrayelementtrue
+ \Data(4)={\the\CounterP}
+ \Data(5)={\the\value{CounterL}}
+ \Data(6)={\Town}
+
+ \CounterP=5
+ \setcounter{CounterL}{5}
+ \def\Town{Roma}
+
+ \multido{\iData=1+1}{6}{%
+ \BS\texttt{Data(\iData)}=`\Data(\iData)'\\}
+\end{SideBySideExample}
+
+\vspace{3mm}
+\noindent Some other macros exists for mono-dimensional arrays (and only for
+them), but have little additional interest:
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{array}] Store or get the content of the array element
+ specified by the index. In the last case, the content is inserted at the
+ current point.\footnote{The macro name \verb|\array| conflicts with macros in {\tt amsmath}. This is changed in version 1.04.}
+
+ Syntax: !\array/Parameter?/Variable?ArrayName;;(I)=/Parameter?/Variable?Content;;!
+ to store a value
+
+ \hspace{1.3cm}!\array/Parameter?/Variable?ArrayName;;(I)! to retrieve a value
+
+ Examples: !\array{Actors}(6)={Joan Crawford}!
+
+ \hspace{1.75cm}!\array{Actors}(3)!
+
+ \item[\FormatTeXMacro{clrarray}] Clear the content of the array element specified.
+ A following inquiry on this element will give an empty content.
+
+ Syntax: !\clrarray/Parameter?/Variable?ArrayName;;(I)!
+
+ Example: !\clrarray{Actors}(2)!
+
+ \item[\FormatTeXMacro{testarray}] Get the content of the array element specified
+ by the index and store the result in the macro !\temp@macro!%
+ \footnote{In \LaTeX, this macro should be used inside a package or between
+ the \verb+\makeatletter+ $\cdots$ \verb+\makeatother+ macro pair.}.
+
+ Syntax: !\testarray/Parameter?/Variable?ArrayName;;(I)!
+
+ Example: !\testarray{Actors}(1)\typeout{Actors(1)=`\temp@macro'}!
+\end{Description}
+
+\section{Examples}
+
+\UndefineShortVerb{\!} % We will use the ! character in the next examples
+
+ We will first show some basic and easy examples, before looking at more
+advanced ones to solve some complex problems, which require more knowledge of
+\TeX{} programming techniques.
+
+\subsection{Basic examples}
+
+ The immediate thing for which we can use arrays is to store and retrieve
+information:
+
+\vspace{2mm}
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Actors
+ \newarray\Dates
+ \newarray\Sexes
+
+ \readarray{/HLReverse?Actors;}{Louise Brooks&Marlene Dietrich&Clark Gable}
+ \readarray{/HLReverse?Dates;}{1906--1985&1902--1992&1901--1960}
+ \readarray{/HLReverse?Sexes;}{2&2&1}
+
+ \begin{description}
+ \item[\Actors(1)] : \Dates(1)
+ \item[\Actors(2)] : \Dates(2)
+ \item[\Actors(3)] : \Dates(3)
+ \end{description}
+\end{SideBySideExample}
+
+\vspace{2mm}
+ But we can also use a general loop macro, as the one provided by the
+\MultiDoPackage{} package, for more powerful usage and a management
+independent of the number of elements:
+
+\vspace{2mm}
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newcommand{\NumberActors}{3}
+
+ \begin{description}
+ \multido{\iActor=1+1}{\NumberActors}{%
+ \item[\Actors(\iActor)] : \Dates(\iActor)}
+ \end{description}
+\end{SideBySideExample}
+
+\vspace{2mm}
+ This allow various usage in the formatting of texts. A common usage is for a
+\emph{mailing} process, when we must compose some similar letters to various
+people (as we said previously, this was the reason for which these macros were
+developed in the \FormLettPackage{} package). Here, the usage of a programming
+language allow a great flexibility, using some conditionals to format the text
+differently or even to insert different pieces of text according to the person:
+
+\newcommand{\NumberActors}{3}
+
+\begin{CenterExample}
+ \newcounter{iActor}
+
+ \newcommand{\AccordingSexe}[2]{%
+ \checkSexes(\the\value{iActor})%
+ \ifthenelse{\equal{\cachedata}{1}}{#1}{#2}}
+
+ \whiledo{\value{iActor} < \NumberActors}{%
+ \stepcounter{iActor}%
+ \fbox{%
+ \begin{minipage}{0.985\textwidth}
+ Dear \AccordingSexe{Mr}{Mrs} \Actors(\the\value{iActor}),
+
+ I would like to tell you how I admire the great \AccordingSexe{actor}{actress}
+ you are, etc.
+ \end{minipage}}\\[5mm]}
+\end{CenterExample}
+
+ Nevertheless, people who know a little \TeX{} as a programming language know
+that it behaviour is full of pitfalls... For instance, the following example,
+which format a table according to the content of entries stored in external
+arrays, can't work:
+
+\begin{Verbatim}
+ \begin{tabular}{|l|c|}
+ \hline
+ \multicolumn{1}{|c}{\textbf{Actors}} & \multicolumn{1}{|c|}{\textbf{Dates}} \\ \hline
+ \multido{\iActor=1+1}{\NumberActors}{\Actors(\iActor) & \Dates(\iActor) \\ \hline}
+ \end{tabular}
+\end{Verbatim}
+
+ This is because there is an implicit grouping of each entry in a tabular
+environment and that it do not work with the grouping of the \verb+\multido+
+loop. So, this must be program in a different way, storing all the content of
+the table before really inserting it:
+
+\begin{SideBySideExample}[xrightmargin=6cm,baselinestretch=0.9]
+ \begin{tabular}{|l|c|}
+ \hline
+ \multicolumn{1}{|c}{\textbf{Actors}} &
+ \multicolumn{1}{|c|}{\textbf{Dates}} \\ \hline
+ \let\ListActors\empty
+ \begingroup
+ \let\Actors\relax
+ \let\Dates\relax
+ \let\\\relax
+ \let\hline\relax
+ \multido{\iActor=1+1}{\NumberActors}{%
+ \xdef\ListActors{\ListActors
+ \Actors(\iActor) & \Dates(\iActor) \\ \hline}}
+ \endgroup
+ \ListActors
+ \end{tabular}
+\end{SideBySideExample}
+
+\subsubsection{Plot labels}
+
+ A basic usage in graphic programming is to use arrays to retrieve the labels
+to put on a drawing, as here to label the simple plot below. (Note the change from the original documentation. The axis labels used with \verb|\psaxes| must now be numeric, so it is necessary to bypass the automatic axis labeling.)
+\ifpstricks % If PSTricks is available
+\begin{CenterExample}[baselinestretch=0.9]
+ \savedata{\Data}[(1,3)(2,1)(3,2)(4,1)(5,1)(6,3),(7,2)(8,1)(9,3)(10,3)(11,1)(12,1)]
+
+ \newcommand{\PlotData}[1]{%
+ \begin{pspicture}(-0.5,-0.5)(13,4)
+ \psaxes[labels=none]{->}(13,4)
+ \dataplot[plotstyle=dots,dotstyle=o,dotsize=0.3]{\Data}
+ #1\end{pspicture}}
+ \PlotData{\psaxes[showorigin=false]{->}(13,4)}
+
+ \newarray{\Months}
+ \readarray{/HLReverse?Months;}{January&February&March&April&May&June&July&August&September&%
+ October&November&December}
+ \newarray{\Levels}
+ \readarray{/HLReverse?Levels;}{Low&Medium&High}
+ %\renewcommand{\pshlabel}[1]{\tiny\Months(#1)}
+ \PlotData{\psaxes[labels=y,showorigin=false]{->}(13,4)%
+ \multido{\i=1+1}{12}{\rput[B](\i,-12pt){\tiny\Months(\i)}}}
+
+ %\renewcommand{\psvlabel}[1]{\small\Levels(#1)}
+ \PlotData{\multido{\i=1+1}{12}{\rput[B](\i,-12pt){\tiny\Months(\i)}}%
+ \multido{\i=1+1}{3}{\rput[r](-12pt,\i){\small\Levels(\i)}}}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\subsubsection{Checkboard drawing}
+
+ Of course, a bi-dimensional array directly allow to store the state of a
+checkboard of one of the numerous ones existing, like the reversi game that
+we will show here (in fact, the only more difficult part to understand in this
+example concern the definition of the elementary piece, but as this is not
+related at all to the usage of \ArrayJobPackage, this point can be forgotten
+by most of the readers).
+
+\ifpstricks % If PSTricks is available
+\begin{SideBySideExample}[xrightmargin=6cm,baselinestretch=0.89]
+ /HLMacro?\def\Black;{B}
+ /HLMacro?\def\White;{W}
+
+ /HLMacro?\def\Piece;#1#2{{%
+ \psset{unit=0.8}%
+ \pspicture(0,-0.1)(1,0.8)
+ \pscustom[fillstyle=gradient,gradmidpoint=0,gradangle=90,
+ gradbegin=#2,gradend=#1]{%
+ \psbezier(0,0.2)(0.1,-0.2)(0.9,-0.2)(1,0.2)
+ \psline(1,0.2)(1,0.5)
+ \psbezier(1,0.5)(0.9,0.9)(0.1,0.9)(0,0.5)
+ \psline(0,0.5)(0,0.2)}
+ \psbezier(0,0.5)(0.1,0.1)(0.9,0.1)(1,0.5)
+ \endpspicture}}
+
+ /HLMacro?\def\PieceBlack;{\Piece{black}{gray}}
+ /HLMacro?\def\PieceWhite;{\Piece{white}{gray}}
+
+ /HLMacro?\def\CheckboardHook;{}
+
+ \newarray\Checkboard
+
+ /HLMacro?\def\ShowCheckboard;{%
+ \dataheight=8
+ \pspicture(8,8)
+ \psgrid[subgriddiv=0,gridlabels=0](8,8)
+ \CheckboardHook
+ \multido{\iColumn=1+1,\iColumnPos=0+1}{8}{%
+ \multido{\iRow=1+1,\iRowPos=7+-1}{8}{%
+ \checkCheckboard(\iRow,\iColumn)%
+ \ifx\cachedata\Black
+ \rput(\iColumnPos.5,\iRowPos.5){\PieceBlack}
+ \else
+ \ifx\cachedata\White
+ \rput(\iColumnPos.5,\iRowPos.5){\PieceWhite}
+ \fi
+ \fi}}
+ \endpspicture}
+
+ \readarray{/HLReverse?Checkboard;}{%
+ W& &B& & & & &B&%
+ &W&B& & & & &B&%
+ W&W&B& &W& & &B&%
+ W&W&B&W&W&W&B&B&%
+ B& &W&W&W&B&W&B&%
+ B&B&W&W&W&B&W&B&%
+ B&B&B&W&W&W&W&B&%
+ W&B&B&B&B&B&B&B&%
+ }
+
+ \psset{unit=0.6}
+ \ShowCheckboard
+
+ \Checkboard(2,1)={B} % /HLComment?Black move;
+ /HLMacro?\def\CheckboardHook;{%
+ \psframe[linestyle=none,fillstyle=hlines](0,6)(1,7)}
+ % /HLComment?White pieces changed by the black move;
+ \Checkboard(3,1)={B}\Checkboard(4,1)={B}
+ \Checkboard(2,2)={B}\Checkboard(3,2)={B}
+ \vspace{1cm}
+ \ShowCheckboard
+\end{SideBySideExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+ Note also that, if \TeX{} is obviously not well suited to implement a
+program to \emph{really} play at a game like reversi or chess, nevertheless
+it can be used to solve internally some non trivial algorithmic problems,
+where the usage of arrays help a lot. For such example (on the coloration of
+the Truchet's tiling), see \cite{EG98}.
+
+\subsection{Advanced examples}
+
+ This section will show slightly more difficult to really complex examples,
+and is mainly for \emph{advanced users} or for people who want to be able to
+program complex tasks themselves.
+
+\subsubsection{Example with recursion usage}
+
+\begin{CenterExample}
+ \makeatletter
+
+ % /HLComment?The recursion macro used (from David Carlisle);
+ /HLMacro?\def\Recursion;#1{%
+ #1\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+ \newcount\IndexRecursion
+ \IndexRecursion=\z@
+
+ /HLMacro?\def\PiFrac;#1{{%
+ \Recursion
+ {\ifnum#1>\@ne\relax}
+ {\@tempcnta=#1
+ \advance\@tempcnta\m@ne
+ \advance\IndexRecursion\@ne
+ \PiValues(\IndexRecursion)
+ +\frac{\strut\displaystyle 1}{\strut\displaystyle\PiFrac{\@tempcnta}}}
+ {\advance\IndexRecursion\@ne
+ \PiValues(\IndexRecursion)}}}
+
+ \makeatother
+
+ \newarray\PiValues
+ \readarray{/HLReverse?PiValues;}{3&7&15&1&292&1&1&1&2&1&3&1&14}
+
+ \(\pi\approx\PiFrac{/HLReverse?4;}\approx\PiFrac{/HLReverse?13;}\)
+
+ \textbf{\(\pi\) as a continued fraction}
+\end{CenterExample}
+
+\subsubsection{Structured dynamic diagrams on a grid}
+
+ A very common case is when we must use some strutured data which are to be
+drawn on a kind of abstract grid.
+
+\ifpstricks % If PSTricks is available
+ To draw a diagram like this one (such example illustrate the exchanges of
+data between processors when using applications on multiprocessors computers
+in parallel programming):
+
+\vspace{2mm}
+\begin{SideBySideExample}[xrightmargin=5.8cm]
+ \psset{linestyle=none,fillstyle=solid,subgriddiv=0,gridlabels=0}
+ \begin{pspicture}(-1,0)(4,4)
+ % /HLComment?Line 0;
+ \psframe[fillcolor=Khaki](0,3.1)(1,3.9)
+ \psframe[fillcolor=LemonChiffon](1,3.1)(4,3.9)
+ \rput(0,3.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,3.5){P0}
+ \rput(0.5,3.5){A0}
+ % /HLComment?Line 1;
+ \psframe[fillcolor=Khaki](0,2.1)(2,2.9)
+ \psframe[fillcolor=LemonChiffon](2,2.1)(4,2.9)
+ \rput(0,2.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,2.5){P1}
+ \rput(0.5,2.5){A0}\rput(1.5,2.5){A1}
+ % /HLComment?Line 2;
+ \psframe[fillcolor=Khaki](0,1.1)(3,1.9)
+ \psframe[fillcolor=LemonChiffon](3,1.1)(4,1.9)
+ \rput(0,1.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,1.5){P2}
+ \rput(0.5,1.5){A0}\rput(1.5,1.5){A1}\rput(2.5,1.5){A2}
+ % /HLComment?Line 3;
+ \psframe[fillcolor=Khaki](0,0.1)(4,0.9)
+ \rput(0,0.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,0.5){P3}
+ \rput(0.5,0.5){A0}\rput(1.5,0.5){A1}
+ \rput(2.5,0.5){A2}\rput(3.5,0.5){A3}
+ \end{pspicture}
+\end{SideBySideExample}
+
+\vspace{2mm}
+\noindent is easy but rather painful, as we must manage a lot of coordinates.
+Nevertheless, even if we introduce a little more abstraction level using some
+minor programming with a loop structure:
+\vspace{2mm}
+
+
+\begin{SideBySideExample}[xrightmargin=5.8cm]
+ \psset{linestyle=none,fillstyle=solid,subgriddiv=0,gridlabels=0}
+ \begin{pspicture}(-1,0)(4,4)
+ \multido{\iLoop=1+1,\iRow=0+1,\iRowPos=3+-1}{4}{%
+ \psframe[fillcolor=Khaki](0,\iRowPos.1)(\iLoop,\iRowPos.9)
+ \psframe[fillcolor=LemonChiffon]
+ (\iLoop,\iRowPos.1)(4,\iRowPos.9)
+ \rput(0,\iRowPos.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,\iRowPos.5){P\iRow}
+ \multido{\iColumn=0+1,\iLabel=1+1}{\iLoop}{%
+ \rput(\iColumn.5,\iRowPos.5){A\iColumn}}}
+ \end{pspicture}
+\end{SideBySideExample}
+
+\vspace{2mm}
+\noindent we succeed to heavily reduce the number of lines of the code in this
+specific case, but we gain nothing in genericity. If we have several such
+diagrams to draw, with each that must be done differently according to the
+empty and full cells of the array, we must proceed in a completely different
+way, defining a \emph{generic object} which can obtain the different values of
+a data structure previously filled. For such tasks, the \ArrayJobPackage{}
+package allow to build very efficient and powerful tools.
+
+\begin{Verbatim}[commandchars=/?;]
+ % /HLComment?The grid;
+ /HLMacro?\def\ArrayGrid;#1#2#3{{%
+ % /HLComment?#1=array of data, #2=number of rows, #3=number of columns;
+ \psset{dimen=middle,xunit=0.8}
+ \dataheight=#3
+ \pspicture(-1,-#2)(#3,0)
+ \multido{\iRow=1+1,\iRowMinusOne=0+1}{#2}{%
+ \rput(-1,-\iRow){\LineGrid{#1}{\iRow}{\iRowMinusOne}{#3}}}
+ \endpspicture}}
+
+ % /HLComment?One line of the grid;
+ /HLMacro?\def\LineGrid;#1#2#3#4{%
+ \rput(0.5,0.4){\AttributeLabel{P#3}}
+ \multido{\iColumn=1+1}{#4}{%
+ \expandafter\csname check#1\endcsname(#2,\iColumn)%
+ \rput(\iColumn,0){%
+ \ifemptydata
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \ifx\cachedata\space
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \def\ColorBackground{\ColorBackgroundFull}%
+ \fi
+ \fi
+ \psframe[fillstyle=solid,fillcolor=\ColorBackground](1,0.8)
+ \rput(0.5,0.4){\AttributeElement{\cachedata}}}}}
+\end{Verbatim}
+
+% The grid
+\def\ArrayGrid#1#2#3{{%
+% #1=array of data, #2=number of rows, #3=number of columns
+\psset{dimen=middle,xunit=0.8}
+\dataheight=#3
+\pspicture(-1,-#2)(#3,0)
+\multido{\iRow=1+1,\iRowMinusOne=0+1}{#2}{%
+ \rput(-1,-\iRow){\LineGrid{#1}{\iRow}{\iRowMinusOne}{#3}}}
+\endpspicture}}
+
+% One line of the grid
+\def\LineGrid#1#2#3#4{%
+\rput(0.3,0.4){\AttributeLabel{P#3}}
+\multido{\iColumn=1+1}{#4}{%
+ \expandafter\csname check#1\endcsname(#2,\iColumn)%
+ \rput(\iColumn,0){%
+ \ifemptydata
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \ifx\cachedata\space
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \def\ColorBackground{\ColorBackgroundFull}%
+ \fi
+ \fi
+ \psframe[fillstyle=solid,fillcolor=\ColorBackground](1,0.8)
+ \rput(0.5,0.4){\AttributeElement{\cachedata}}}}}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ % /HLComment?Default attributes;
+ \def\ColorBackgroundEmpty{LemonChiffon}
+ \def\ColorBackgroundFull{Khaki}
+ \def\AttributeElement#1{\textcolor{red}{#1}}
+ \def\AttributeLabel#1{\bf #1}
+
+ % /HLComment?Example 1;
+ \newarray\ArrayA
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A0& & & &%
+ A0&A1& & &%
+ A0&A1&A2& &%
+ A0&A1&A2&A3}
+
+ \ArrayGrid{ArrayA}{4}{4}
+\end{SideBySideExample}
+
+\newarray\ArrayA
+
+% Default attributes
+\def\ColorBackgroundEmpty{LemonChiffon}
+\def\ColorBackgroundFull{Khaki}
+\def\AttributeElement#1{\textcolor{red}{#1}}
+\def\AttributeLabel#1{\bf #1}
+
+\begin{CenterExample}[baselinestretch=0.9]
+ % /HLComment?Example 2;
+ \newarray\ArrayB
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A& & & &%
+ & & & &%
+ & & & &%
+ & & & }
+ \readarray{/HLReverse?ArrayB;}{%
+ A& & & &%
+ A& & & &%
+ A& & & &%
+ A& & & }
+
+ \ArrayGrid{ArrayA}{4}{4}\hfill\ArrayGrid{ArrayB}{4}{4}
+\end{CenterExample}
+
+\newarray\ArrayB
+
+\begin{CenterExample}[baselinestretch=0.9]
+ % /HLComment?Example 3;
+ \newarray\ArrayC
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A0& & &%
+ A1& & &%
+ A2& & }
+ \readarray{/HLReverse?ArrayB;}{%
+ A0&A1&A2&%
+ A0&A1&A2&%
+ A0&A1&A2}
+ \readarray{/HLReverse?ArrayC;}{%
+ A0& & &%
+ &A1& &%
+ & &A2}
+
+ % /HLComment?Attributes;
+ \def\ColorBackgroundEmpty{green}
+ \def\ColorBackgroundFull{red}
+ \def\AttributeElement#1{\footnotesize\textcolor{white}{#1}}
+ \def\AttributeLabel#1{\small\bf #1}
+
+ \psset{unit=0.7}
+ \ArrayGrid{ArrayA}{3}{3}\hfill\ArrayGrid{ArrayB}{3}{3}\hfill\ArrayGrid{ArrayC}{3}{3}
+\end{CenterExample}
+
+\begin{CenterExample}[baselinestretch=0.9]
+ % /HLComment?Example 4;
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A0&A1&A2&A3&%
+ B0&B1&B2&B3&%
+ C0&C1&C2&C3&%
+ D0&D1&D2&D3}
+ \readarray{/HLReverse?ArrayB;}{%
+ A0&B0&C0&D0&%
+ A1&B1&C1&D1&%
+ A2&B2&C2&D2&%
+ A3&B3&C3&D3}
+
+ % /HLComment?Attributes;
+ \def\AttributeElement#1{\textcolor{red}{#1}}
+ \def\AttributeLabel#1{\Large\it #1}
+
+ \ArrayGrid{ArrayA}{4}{4}\hfill\ArrayGrid{ArrayB}{4}{4}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\vspace{5mm}
+\subsubsection{Another example of a structured dynamic diagram on a grid}
+
+ The preceding technique is in fact relevant for a lot of problems. Here we
+give another example about the drawing of linked lists (but do not fail to
+note that these ones have here no internal existence).
+
+\ifpstricks % If PSTricks is available
+\begin{CenterExample}
+ \makeatletter
+
+ \newpsstyle{LinkedListsArrowStyle}{linecolor=red,arrowscale=2} % /HLComment?Default arrow style;
+
+ /HLMacro?\def\LinkedListsDraw;{\@ifnextchar[\LinkedListsDraw@i{\LinkedListsDraw@i[]}}
+
+ /HLMacro?\def\LinkedListsDraw@i;[#1]#2#3{{%
+ \setkeys{psset}{#1}
+ \dataheight=#3
+ %
+ \pst@cnta=#3
+ \multiply\pst@cnta\tw@
+ \advance\pst@cnta\tw@
+ \pspicture(0,-#2)(\pst@cnta,0)
+ \multido{\iRow=1+1}{#2}{%
+ \rput(0,-\iRow){%
+ \psframe(1,1)
+ \psline[dimen=middle,style=LinkedListsArrowStyle]{->}(0.5,0.5)(2,0.5)}
+ \multido{\iColumn=1+1}{#3}{%
+ \checkLinkedListsTable(\iRow,\iColumn)%
+ \ifemptydata
+ \else
+ \pst@cnta=\iColumn
+ \advance\pst@cnta\@ne
+ \pst@cntb=\@ne
+ \checkLinkedListsTable(\iRow,\pst@cnta)%
+ \ifemptydata % /HLComment?We test if it is empty;
+ \else
+ \ifnum\multidocount=#3 % /HLComment?We test if it is the last one;
+ \else
+ \pst@cntb=\z@
+ \fi
+ \fi
+ %
+ \pst@cnta=\iColumn
+ \multiply\pst@cnta\tw@
+ \rput(\the\pst@cnta,-\iRow){%
+ \LinkedListsDraw@ii{\LinkedListsTable(\iRow,\iColumn)}{\the\pst@cntb}}
+ \fi}}
+ \endpspicture}}%}
+
+ /HLMacro?\def\LinkedListsDraw@ii;#1#2{{%
+ \rput(0,0.1){%
+ \psset{unit=0.8}
+ \psgrid[subgriddiv=0,gridlabels=0](2,1) % /HLComment?Element;
+ \rput(0.5,0.5){#1} % /HLComment?Label for this element;
+ \ifnum#2=\@ne
+ \psline(1,0)(2,1) % /HLComment?Mark of the end of the list;
+ \else
+ \psline[style=LinkedListsArrowStyle]{->}(1.5,0.5)(2.5,0.5) % /HLComment?Link to the next element;
+ \fi}}}
+
+ \makeatother
+
+ \newarray\LinkedListsTable
+ \readarray{/HLReverse?LinkedListsTable;}{%
+ 11&12&13&14&%
+ 21&&&&%
+ 31&32&33&&}
+
+ \LinkedListsDraw{3}{4}
+
+ \vspace{1cm}
+ \newpsstyle{LinkedListsArrowStyle}{linecolor=green,doubleline=true}
+
+ \readarray{/HLReverse?LinkedListsTable;}{%
+ a&&&&&%
+ A&B&C&D&E&%
+ 0&1&2&3&4&%
+ +&$\times$&&&&}
+
+ \LinkedListsDraw{4}{5}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\subsubsection{Management of heaps and linked lists}
+
+ Here we will demonstrate a really more complex usage, but very useful.
+In fact, if the \ArrayJobPackage{} package primarily allow to manage only
+arrays, it allow a lot more with some efforts. Above it, we can implement the
+common internal data structures frequently used in programming, like heaps,
+simple or double linked lists, trees, associative arrays, etc. Here we will
+show how to define macros to build and manage heaps and simple linked lists.
+
+\ifpstricks % If PSTricks is available
+\vspace{1cm} % Poor hack to force a page break...
+\begin{CenterExample}[baselinestretch=0.98]
+ \makeatletter
+
+ /HLMacro?\def\PstDebug;{\z@} % /HLComment?For debugging, set \def\PstDebug{1};
+
+ % /HLComment?Code for heaps management;
+ % /HLComment?-------------------------;
+
+ /HLMacro?\def\HeapMaxDepth;{100} % /HLComment?No more than 100 elements in the heap;
+
+ \newarray\Heap
+
+ % /HLComment?Add an element at top of the heap;
+ /HLMacro?\def\HeapPush;#1{%
+ \multido{\iElem=1+1}{\HeapMaxDepth}{%
+ \checkHeap(\iElem)%
+ \ifemptydata
+ \ifnum\PstDebug=\@ne\typeout{Push Heap(\iElem)=#1}\fi% /HLComment?Debug;
+ \Heap(\iElem)={#1}%
+ \multidostop
+ \fi}}
+
+ % /HLComment?Get (in the \cachedata macro) and delete the element at top of the heap;
+ /HLMacro?\def\HeapPop;{%
+ \Multido{\iElem=\HeapMaxDepth+-1}{\HeapMaxDepth}{%
+ \checkHeap(\iElem)%
+ \ifemptydata
+ \else
+ \ifnum\PstDebug=\@ne\typeout{Delete Heap(\iElem)=\cachedata}\fi% /HLComment?Debug;
+ \Heap(\iElem)={}%
+ \multidostop
+ \fi}}
+
+ % /HLComment?Print the current state of the heap;
+ /HLMacro?\def\HeapPrint;{%
+ \checkHeap(\@ne)%
+ \ifemptydata
+ \typeout{The heap is empty!}% /HLComment?Empty heap;
+ \else
+ \multido{\iElem=\HeapMaxDepth+-1}{\HeapMaxDepth}{%
+ \checkHeap(\iElem)%
+ \ifemptydata
+ \else
+ \typeout{Heap(\iElem)=\cachedata}%
+ \fi}
+ \fi
+ \typeout{}}
+
+ % /HLComment?Draw the current state of the heap;
+ /HLMacro?\def\HeapDraw;{%
+ % /HLComment?To compute the size of the picture;
+ \Multido{\iSize=0+1}{\HeapMaxDepth}{%
+ \checkHeap(\the\multidocount)%
+ \ifemptydata
+ \multidostop
+ \fi}
+ %
+ \ifnum\iSize=\z@
+ % /HLComment?Empty heap;
+ \typeout{The heap is empty!^^J}%
+ \else
+ \pspicture(1,\iSize)
+ \psgrid[subgriddiv=0,gridlabels=0](1,\iSize)
+ \multido{\iPos=0+1}{\HeapMaxDepth}{%
+ \checkHeap(\the\multidocount)%
+ \ifemptydata
+ \multidostop
+ \else
+ \rput(0.5,\iPos.5){\cachedata}
+ \fi}
+ \endpspicture%
+ \fi}
+
+ \makeatother
+
+ \psset{unit=1.5}\footnotesize
+
+ \HeapPush{Germany}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPush{France}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPush{Italy}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPush{Spain}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+\end{CenterExample}
+
+\begin{Example}[baselinestretch=0.95]
+ \makeatletter
+
+ /HLMacro?\def\PstDebug;{\z@}% /HLComment?For debugging, set \def\PstDebug{1};
+
+ % /HLComment?Code for linked lists management;
+ % /HLComment?--------------------------------;
+
+ /HLMacro?\def\LinkedListMaxDepth;{100}% /HLComment?No more than 100 elements in the list;
+
+ \newarray\LinkedList
+
+ \dataheight=2% /HLComment?Two cells by element: the content and the pointer;
+
+ % /HLComment?Add an element at the end of the list;
+ % /HLComment?In fact, we define it here as a simple heap, but the difference is that;
+ % /HLComment?we will be able to get and to delete any element in it;
+ /HLMacro?\def\LinkedListAdd;#1{%
+ \edef\@tempa{\@ne}% /HLComment?Pointer initialization;
+ \multido{\iElem=2+1}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the content of this element;
+ \ifemptydata
+ % /HLComment?No pointed element, so we will insert the new one here;
+ \LinkedList(\iElem,1)={#1}%
+ % /HLComment?We update the pointer for the last preceding element;
+ \expandarrayelementtrue% /HLComment?We must evaluate the content of the counter;
+ \LinkedList(\@tempa,2)={\iElem}%
+ \expandarrayelementfalse
+ \ifnum\PstDebug=\@ne
+ \typeout{Add LinkedList(\@tempa)->\iElem}% /HLComment?Debug;
+ \typeout{\space\space\space\space LinkedList(\iElem)=#1}% /HLComment?Debug;
+ \fi
+ \multidostop
+ \else
+ \edef\@tempa{\cachedata}%
+ \fi}}
+
+ % /HLComment?Get (in the \cachedata macro) the next element in the list;
+ /HLMacro?\def\LinkedListGetNext;#1{%
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \edef\@tempa{\@ne}%
+ \ifx\cachedata\empty
+ \else
+ \edef\@tempc{#1}%
+ \Multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempb{\@tempa}%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \ifx\cachedata\@tempc
+ % /HLComment?This is the element for which we want the next one: we got it pointer;
+ % /HLComment?to the next element in the list, then the content of it;
+ \checkLinkedList(\@tempa,2)%
+ \ifemptydata
+ \typeout{Element `#1' has no successor!^^J}%
+ \else
+ \checkLinkedList(\cachedata,1)%
+ \fi
+ \multidostop
+ \else
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ % /HLComment?We have reach the end of the list without finding the element;
+ \typeout{Element `#1' not found!^^J}%
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi
+ \fi}
+ \fi}
+
+ % /HLComment?Delete an element in the list (the code is very close to \LinkedListGetNext);
+ /HLMacro?\def\LinkedListDelete;#1{%
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \edef\@tempa{\@ne}%
+ \ifx\cachedata\empty
+ \else
+ \edef\@tempc{#1}%
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempb{\@tempa}%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \ifx\cachedata\@tempc
+ % /HLComment?This is the element to delete: we will update the pointer of;
+ % /HLComment?the preceding element to the value of the pointer of the deleted one;
+ \checkLinkedList(\@tempa,2)%
+ \expandarrayelementtrue
+ \LinkedList(\@tempb,2)={\cachedata}%
+ \expandarrayelementfalse
+ \ifnum\PstDebug=\@ne
+ \typeout{Delete LinkedList(\@tempa)=#1}% /HLComment?Debug;
+ \typeout{\space\space\space\space\space\space\space %
+ LinkedList(\@tempb)->\cachedata}% /HLComment?Debug;
+ \fi
+ \multidostop
+ \else
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ % /HLComment?We have reach the end of the list without finding the element;
+ \typeout{Element `#1' not found and so not deleted!^^J}%
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi
+ \fi}
+ \fi}
+
+ % /HLComment?Print the current state of the list;
+ /HLMacro?\def\LinkedListPrint;{%
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \ifx\cachedata\empty
+ % /HLComment?Empty list;
+ \typeout{The list is empty!}%
+ \else
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \typeout{LinkedList=\cachedata}%
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi}
+ \fi
+ \typeout{}}
+
+ % /HLComment?Draw the current state of the list;
+ /HLMacro?\def\LinkedListDraw;{{%
+ \psset{subgriddiv=0,gridlabels=0}
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \ifx\cachedata\empty
+ % /HLComment?Empty list;
+ \typeout{The list is empty!^^J}%
+ \else
+ % /HLComment?To compute the size of the picture;
+ \Multido{\iSize=3+3}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\cachedata,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ \multidostop
+ \fi}
+ %
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \pspicture(\iSize,1.5)
+ \multido{\iPos=0+3}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \rput(\iPos,0){%
+ \psgrid(2,1)
+ \rput(0.5,0.5){\cachedata}
+ \ifnum\iPos=\z@
+ \else
+ \rput(-1.5,0.5){\psline[linecolor=red,arrowscale=2]{->}(1.5,0)}
+ \fi}
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ \rput(\iPos,0){\psline[linecolor=red](1,0)(2,1)} % /HLComment?End of the list;
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi}
+ \endpspicture%
+ \fi}}
+
+ \makeatother
+
+ \psset{unit=1.5}
+
+ \LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{Germany}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{France}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{Italy}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{Spain}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListGetNext{France}\typeout{Next element after `France' is: `\cachedata'}%
+ \LinkedListGetNext{Germany}\typeout{Next element after `Germany is: `\cachedata'}%
+ \LinkedListGetNext{Spain}
+ \LinkedListGetNext{Unknown}
+
+ \LinkedListDelete{Unknown}
+
+ \LinkedListDelete{France}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{Germany}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{Spain}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{Italy}\LinkedListPrint\LinkedListDraw
+\end{Example}
+
+\makeatletter
+
+\def\PstDebug{\z@}% For debugging, set \def\PstDebug{1}
+
+\def\LinkedListMaxDepth{100}% No more than 100 elements in the heap
+
+\newarray\LinkedList
+
+\dataheight=2% Two cells by element: the content and the pointer
+
+% Delete an element in the list
+\def\LinkedListDelete#1{%
+\checkLinkedList(1,2)% We got the pointer for the first element
+\edef\@tempa{\@ne}%
+\ifx\cachedata\empty
+\else
+ \edef\@tempc{#1}%
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempb{\@tempa}%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% We got the pointed element
+ \ifx\cachedata\@tempc
+ % This is the element to delete: we will update the pointer of
+ % the preceding element to the value of the pointer of the deleted one
+ \checkLinkedList(\@tempa,2)%
+ \expandarrayelementtrue
+ \LinkedList(\@tempb,2)={\cachedata}%
+ \expandarrayelementfalse
+ \ifnum\PstDebug=\@ne
+ \typeout{Delete LinkedList(\@tempa)=#1}%Debug
+ \typeout{\space\space\space\space\space\space\space %
+ LinkedList(\@tempb)->\cachedata}%Debug
+ \fi
+ \multidostop
+ \else
+ \checkLinkedList(\@tempa,2)% We got the pointer to the next element
+ \ifemptydata
+ % We have reach the end of the list without finding the element
+ \typeout{Element `#1' not found and so not deleted!^^J}%
+ \multidostop% No pointed element: end of the list
+ \fi
+ \fi}
+\fi}
+
+% Print the current state of the list
+\def\LinkedListPrint{%
+\checkLinkedList(1,2)% We got the pointer for the first element
+\ifx\cachedata\empty
+ % Empty list
+ \typeout{The list is empty!}%
+\else
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% We got the pointed element
+ \typeout{LinkedList=\cachedata}%
+ \checkLinkedList(\@tempa,2)% We got the pointer to the next element
+ \ifemptydata
+ \multidostop% No pointed element: end of the list
+ \fi}
+\fi
+\typeout{}}
+
+% Draw the current state of the list
+\def\LinkedListDraw{{%
+\psset{subgriddiv=0,gridlabels=0}
+\checkLinkedList(1,2)% We got the pointer for the first element
+\ifx\cachedata\empty
+ % Empty list
+ \typeout{The list is empty!^^J}%
+\else
+ % To compute the size of the picture
+ \Multido{\iSize=3+3}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\cachedata,2)% We got the pointer to the next element
+ \ifemptydata
+ \multidostop
+ \fi}
+ %
+ \checkLinkedList(1,2)% We got the pointer for the first element
+ \pspicture(\iSize,1.5)
+ \multido{\iPos=0+3}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% We got the pointed element
+ \rput(\iPos,0){%
+ \psgrid(2,1)
+ \rput(0.5,0.5){\cachedata}
+ \ifnum\iPos=\z@
+ \else
+ \rput(-1.5,0.5){\psline[linecolor=red,arrowscale=2]{->}(1.5,0)}
+ \fi}
+ \checkLinkedList(\@tempa,2)% We got the pointer to the next element
+ \ifemptydata
+ \rput(\iPos,0){\psline[linecolor=red](1,0)(2,1)} % End of the list
+ \multidostop% No pointed element: end of the list
+ \fi}
+ \endpspicture%
+\fi}}
+
+\makeatother
+
+% We clear the linked list
+\multido{\iElem=1+1}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\iElem,1)%
+ \ifemptydata
+ \else
+ \LinkedList(\iElem,1)={}%
+ \LinkedList(\iElem,2)={}%
+ \fi}
+
+\vspace{2mm}
+ We can write an extended version of the inclusion of an element, where we do
+not still store each element at the end of the list, but insert it at a
+special position. For instance, we can decide to use the list to sort the
+elements, inserting a new one at it sorted position. In the next example, we
+will manage integer numbers in this way (of course, we can do the same thing
+with arbitrary strings, but it would be more difficult to program in \TeX{},
+mainly if we want to be able to use accentuated letters).
+
+\vspace{2mm}
+\begin{Example}
+ \makeatletter
+
+ % /HLComment?Add an element at the end of the list, linked in it ordered place;
+ % /HLComment?(this version work only with contents as numbers);
+ /HLMacro?\def\LinkedListSortedAdd;#1{%
+ % /HLComment?Initializations;
+ \edef\@tempa{\@ne}%
+ \edef\@tempb{\@ne}%
+ \edef\@tempc{\z@}%
+ %
+ \multido{\iElem=2+1}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer of this element;
+ \ifemptydata
+ % /HLComment?No pointed element, so we will insert the new one here;
+ \LinkedList(\iElem,1)={#1}%
+ % /HLComment?We update the pointer for the last element;
+ \expandarrayelementtrue
+ \LinkedList(\@tempb,2)={\iElem}%
+ \ifnum\PstDebug=\@ne
+ \typeout{Add LinkedList(\@tempb)->\iElem}% /HLComment?Debug;
+ \typeout{\space\space\space\space LinkedList(\iElem)=#1}% /HLComment?Debug;
+ \fi
+ % /HLComment?We update the pointer of the new element to the position;
+ % /HLComment?of the next greater one, if it exist;
+ \ifnum\@tempc=\z@
+ \else
+ \LinkedList(\iElem,2)={\@tempc}%
+ \ifnum\PstDebug=\@ne
+ \typeout{Update LinkedList(\iElem)->\@tempc}% /HLComment?Debug;
+ \fi
+ \fi
+ \expandarrayelementfalse
+ \multidostop
+ \else
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)%
+ \ifnum#1<\cachedata
+ \edef\@tempc{\@tempa}% /HLComment?New element less than this one;
+ \else
+ \edef\@tempb{\@tempa}% /HLComment?New element greater or equal than this one;
+ \fi
+ \fi}}
+
+ \makeatother
+
+ \LinkedListPrint
+
+ \LinkedListSortedAdd{732}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListSortedAdd{487}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListSortedAdd{718}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListSortedAdd{962}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{487}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{732}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{500}
+
+ \LinkedListDelete{962}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{718}\LinkedListPrint\LinkedListDraw
+\end{Example}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\subsubsection{Associative arrays}
+
+ To finish, we will give a complete solution to a classical problem: to count
+the number of occurrences of the various letters in a sentence. For this, we
+will first build some macros to deal with \emph{associative} arrays, as they
+have been popularized by scripting languages like \texttt{AWK} and
+\texttt{Perl}.
+
+\begin{Example}
+ \makeatletter
+
+ % /HLComment?Internally, we use two "standard" arrays to define one associative array;
+ \newarray\AssociativeArray@Names
+ \newarray\AssociativeArray@Values
+
+ \newcount\AssociativeArrayNbValues
+ \AssociativeArrayNbValues=\z@
+
+ \newif\ifAssociativeArray@ElementFound
+
+ % /HLComment?To store one element;
+ /HLMacro?\def\AssociativeArray;(#1)=#2{%
+ \expandarrayelementtrue
+ \AssociativeArray@ElementFoundfalse
+ \edef\@tempa{#1}%
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % /HLComment?This element already exist: we replace it current value;
+ % /HLComment?\checkAssociativeArray@Values(\iValue)% Debug;
+ % /HLComment?\typeout{In #1, replace `\cachedata'\space by `#2'}% Debug;
+ \AssociativeArray@Values(\iValue)={#2}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+ \ifAssociativeArray@ElementFound
+ \else
+ % /HLComment?New element;
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={#1}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={#2}%
+ \fi}
+
+ % /HLComment?To get one element;
+ /HLMacro?\def\checkAssociativeArray;(#1){%
+ \edef\@tempa{#1}%
+ \edef\@tempb{999999}%
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % /HLComment?We have found it by name;
+ \edef\@tempb{\iValue}%
+ \multidostop
+ \fi}
+ % /HLComment?We have now to get it value;
+ \checkAssociativeArray@Values(\@tempb)}
+
+ % /HLComment?Simple macro to print all the associative array;
+ /HLMacro?\def\printAssociativeArray;{%
+ \multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \iValue: \BS\texttt{FirstNames(\cachedata)}=`\AssociativeArray@Values(\iValue)'\space}}
+
+ \makeatother
+
+ \let\FirstNames\AssociativeArray
+ \let\checkFirstNames\checkAssociativeArray
+ \let\printFirstNames\printAssociativeArray
+
+ \FirstNames(Crawford)={Joan}
+ \FirstNames(Tierney)={Gene}
+ \FirstNames(Lake)={Veronika}
+
+ \printFirstNames
+
+ \checkFirstNames(Lake)
+ \verb+\FirstNames(Lake)+=`\cachedata'
+
+ \checkFirstNames(Monroe)
+ \ifemptydata
+ \verb+\FirstNames(Monroe) undefined!+
+ \else
+ \verb+\FirstNames(Monroe)+=`\cachedata'
+ \fi
+\end{Example}
+
+\makeatletter
+
+% Internally, we use two "standard" arrays to define one associative array
+\newarray\AssociativeArray@Names
+\newarray\AssociativeArray@Values
+
+\newcount\AssociativeArrayNbValues
+\AssociativeArrayNbValues=\z@
+
+\newif\ifAssociativeArray@ElementFound
+
+% To store one element
+\def\AssociativeArray(#1)=#2{%
+\expandarrayelementtrue
+\AssociativeArray@ElementFoundfalse
+\edef\@tempa{#1}%
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % This element already exist: we replace it current value
+ % \checkAssociativeArray@Values(\iValue)% debug
+ % \typeout{In #1, replace `\cachedata'\space by `#2'}% Debug
+ \AssociativeArray@Values(\iValue)={#2}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+\ifAssociativeArray@ElementFound
+\else
+ % New element
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={#1}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={#2}%
+\fi}
+
+% To get one element
+\def\checkAssociativeArray(#1){%
+\edef\@tempa{#1}%
+\edef\@tempb{999999}%
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % We have found it by name
+ \edef\@tempb{\iValue}%
+ \multidostop
+ \fi}
+% We have now to get it value
+\checkAssociativeArray@Values(\@tempb)}
+
+% Simple macro to print all the associative array
+\def\printAssociativeArray{%
+\multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \iValue: \BS\texttt{FirstNames(\cachedata)}=`\AssociativeArray@Values(\iValue)'}}
+
+\makeatother
+
+\vspace{2mm}
+ Now, we can define the macros to read a sentence, to cut it letter by letter,
+to count the occurrences of each of them, and finally to draw a summary plot of
+the results.
+
+\makeatletter % Problem with the \ifpstricks conditional if not set...
+
+\ifpstricks % If PSTricks is available
+\begin{CenterExample}
+ \makeatletter
+
+ % /HLComment?A \PerChar style macro adapted from Juergen Schlegelmilch;
+ % /HLComment?(<schlegel@Informatik.Uni-Rostock.de> - posted on c.t.t. January 27, 1998);
+ /HLMacro?\def\PerChar;#1#2{\DoPerChar#1#2\@nil}
+
+ /HLMacro?\def\DoPerChar;#1#2#3\@nil{%
+ #1#2%
+ \edef\@tempa{#3}%
+ \ifx\@tempa\empty
+ \else
+ \DoPerChar#1#3\@nil
+ \fi}
+
+ % /HLComment?The action to do for each character: we increase the counter;
+ % /HLComment?for this character by one;
+ /HLMacro?\def\ActionPerChar;#1{% /HLComment?#1=character;
+ \checkAssociativeArray(#1)%
+ \ifemptydata
+ \@tempcnta=\@ne
+ \else
+ \@tempcnta=\cachedata
+ \advance\@tempcnta\@ne
+ \fi
+ \AssociativeArray(#1)={\the\@tempcnta}}
+
+ % /HLComment?To store in an associative array the number of occurrences by characters;
+ % /HLComment?(spaces are not counted);
+ /HLMacro?\def\StatSentence;#1{% /HLComment?#1=sentence;
+ \AssociativeArrayNbValues=\z@
+ \PerChar{\ActionPerChar}{#1}}
+
+ % /HLComment?To draw a plot of the number of occurrences of the characters of a sentence;
+ /HLMacro?\def\DrawOccurrences;#1{% /HLComment?#1=sentence;
+ \StatSentence{#1}
+ %
+ \pst@cnta=\AssociativeArrayNbValues
+ \advance\pst@cnta\@ne
+ %
+ % /HLComment?To know the maximum of the numbers;
+ \pst@cntb=\z@
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Values(\iValue)%
+ \ifnum\cachedata>\pst@cntb
+ \pst@cntb=\cachedata
+ \fi}
+ \advance\pst@cntb\@ne
+ %
+ % /HLComment?The drawing itself;
+ \pspicture(-0.5,-0.5)(\pst@cnta,\pst@cntb)
+ \psaxes[axesstyle=frame,labels=y](\pst@cnta,\pst@cntb)
+ \multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \Draw@OneOccurrence{\iValue}}
+ \endpspicture}
+
+ % /HLComment?To draw the value for one occurrence;
+ /HLMacro?\def\Draw@OneOccurrence;#1{% /HLComment?#1=Letter;
+ \checkAssociativeArray@Values(#1)%
+ \psdot(#1,\cachedata)
+ \rput[B](\iValue,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \let\Names\AssociativeArray
+ \let\checkNames\checkAssociativeArray
+
+ \psset{dotstyle=o,dotsize=0.4}
+
+ \DrawOccurrences{We are Wednesday}
+\end{CenterExample}
+
+\makeatletter
+
+%% A \PerChar style macro adapted from Juergen Schlegelmilch
+%% (<schlegel@Informatik.Uni-Rostock.de> - posted on c.t.t. Jan. 27, 1998)
+\def\PerChar#1#2{\DoPerChar#1#2\@nil}
+
+\def\DoPerChar#1#2#3\@nil{%
+#1#2%
+\edef\@tempa{#3}%
+\ifx\@tempa\empty
+\else
+ \DoPerChar#1#3\@nil
+\fi}
+
+% The action to do for each character: we increase the counter
+% for this character by one
+\def\ActionPerChar#1{% #1=character
+\checkAssociativeArray(#1)%
+\ifemptydata
+ \@tempcnta=\@ne
+\else
+ \@tempcnta=\cachedata
+ \advance\@tempcnta\@ne
+\fi
+\AssociativeArray(#1)={\the\@tempcnta}}
+
+% To store in an associative array the number of occurrences by characters
+% (spaces are not counted)
+\def\StatSentence#1{% #1=sentence
+\AssociativeArrayNbValues=\z@
+\PerChar{\ActionPerChar}{#1}}
+
+% To draw a plot of the number of occurrences of the characters of a sentence
+\def\DrawOccurrences#1{%
+\StatSentence{#1}
+%
+\pst@cnta=\AssociativeArrayNbValues
+\advance\pst@cnta\@ne
+%
+% To know the maximum of the numbers
+\pst@cntb=\z@
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Values(\iValue)%
+ \ifnum\cachedata>\pst@cntb
+ \pst@cntb=\cachedata
+ \fi}
+\advance\pst@cntb\@ne
+%
+% The drawing itself
+\pspicture(-0.5,-0.5)(\pst@cnta,\pst@cntb)
+ \psaxes[axesstyle=frame,labels=y](\pst@cnta,\pst@cntb)
+ \multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \Draw@OneOccurrence{\iValue}}
+\endpspicture}
+
+% To draw the value for one occurrence
+\def\Draw@OneOccurrence#1{%
+\checkAssociativeArray@Values(#1)%
+\psdot(#1,\cachedata)
+\rput[B](\iValue,-0.5){\AssociativeArray@Names(#1)}}
+
+\let\Names\AssociativeArray
+\let\checkNames\checkAssociativeArray
+
+\psset{dotstyle=o,dotsize=0.4}
+
+\makeatother
+
+\vspace{8mm} % Poor hack to force a page break...
+ We will now write another version, using another array to store indexes,
+to allow us to sort the letters found in the sentence read.
+
+\begin{CenterExample}
+ \makeatletter
+
+ % /HLComment?To get in #2 the ASCII code of the #1 character;
+ /HLMacro?\def\Character@AsciiCode;#1#2{\chardef#2=`#1\relax}
+
+ % /HLComment?A new "standard" array to store the sorted indexes;
+ \newarray\AssociativeArray@Indexes
+
+ % /HLComment?A simple macro to print the array of indexes (for debugging);
+ /HLMacro?\def\PrintIndexes;{%
+ \multido{\iIndexes=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Indexes(\iIndexes)%
+ \BS\texttt{indexes(\iIndexes)}=`\cachedata'\space}}
+
+ % /HLComment?We redefine the macro to store an element in the associative array,;
+ % /HLComment?to allow to sort it elements, using an additional array of indexes;
+ /HLMacro?\def\AssociativeArray;(#1)=#2{%
+ \expandarrayelementtrue
+ \AssociativeArray@ElementFoundfalse
+ \edef\@tempa{#1}%
+ \edef\@tempb{#2}%
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % /HLComment?This element already exist: we replace it current value;
+ % /HLComment?\checkAssociativeArray@Values(\iValue)% Debug;
+ % /HLComment?\typeout{In #1, replace `\cachedata'\space by `#2'}% Debug;
+ \AssociativeArray@Values(\iValue)={\@tempb}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+ \ifAssociativeArray@ElementFound
+ \else
+ % /HLComment?New element: we must insert it at it sorted position;
+ \@tempcnta=\@ne
+ \expandafter\Character@AsciiCode\@tempa\@tempx
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \expandafter\Character@AsciiCode\cachedata\@tempy
+ \ifnum\@tempx<\@tempy
+ % /HLComment?The new element must be before this one: we will exchange their values;
+ \checkAssociativeArray@Indexes(\iValue)%
+ \@tempcntb=\cachedata
+ \advance\@tempcntb\@ne
+ \AssociativeArray@Indexes(\iValue)={\the\@tempcntb}%
+ \else
+ \advance\@tempcnta\@ne
+ \fi}
+ %
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={\@tempa}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={\@tempb}%
+ \AssociativeArray@Indexes(\AssociativeArrayNbValues)={\the\@tempcnta}%
+ \fi}
+
+ % /HLComment?We change the way we draw each number of occurrences;
+ /HLMacro?\def\Draw@OneOccurrence;#1{%
+ \checkAssociativeArray@Indexes(#1)%
+ \pst@cnta=\cachedata
+ \checkAssociativeArray@Values(#1)%
+ \psdot(\the\pst@cnta,\cachedata)
+ \rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \DrawOccurrences{We are Wednesday}
+
+ \PrintIndexes
+\end{CenterExample}
+
+\makeatletter
+
+% To get in #2 the ASCII code of the #1 character
+\def\Character@AsciiCode#1#2{\chardef#2=`#1\relax}%
+
+% A new "standard" array to store the sorted indexes
+\newarray\AssociativeArray@Indexes
+
+% We redefine the macro to store an element in the associative array,
+% to allow to sort it elements, using an additional array of indexes
+\def\AssociativeArray(#1)=#2{%
+\expandarrayelementtrue
+\AssociativeArray@ElementFoundfalse
+\edef\@tempa{#1}%
+\edef\@tempb{#2}%
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % This element already exist: we replace it current value
+ % \checkAssociativeArray@Values(\iValue)% Debug
+ % \typeout{In #1, replace `\cachedata'\space by `#2'}% Debug
+ \AssociativeArray@Values(\iValue)={\@tempb}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+\ifAssociativeArray@ElementFound
+\else
+ % New element: we must insert it at it sorted position
+ \@tempcnta=\@ne
+ \expandafter\Character@AsciiCode\@tempa\@tempx
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \expandafter\Character@AsciiCode\cachedata\@tempy
+ \ifnum\@tempx<\@tempy
+ % The new element must be before this one: we will exchange their values
+ \checkAssociativeArray@Indexes(\iValue)%
+ \@tempcntb=\cachedata
+ \advance\@tempcntb\@ne
+ \AssociativeArray@Indexes(\iValue)={\the\@tempcntb}%
+ \else
+ \advance\@tempcnta\@ne
+ \fi}
+ %
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={\@tempa}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={\@tempb}%
+ \AssociativeArray@Indexes(\AssociativeArrayNbValues)={\the\@tempcnta}%
+\fi}
+
+% We change the way we draw each number of occurrences
+\def\Draw@OneOccurrence#1{%
+\checkAssociativeArray@Indexes(#1)%
+\pst@cnta=\cachedata
+\checkAssociativeArray@Values(#1)%
+\psdot(\the\pst@cnta,\cachedata)
+\rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+\makeatother
+
+\begin{CenterExample}
+ \DrawOccurrences{Tuesday 8 February}
+\end{CenterExample}
+
+\noindent Now, we can easily redefine the internal macro which plot each
+occurrence, to obtain various kinds of graphics:
+
+\begin{CenterExample}
+ \makeatletter
+
+ /HLMacro?\def\Draw@OneOccurrence;#1{%
+ \checkAssociativeArray@Indexes(#1)%
+ \pst@cnta=\cachedata
+ \checkAssociativeArray@Values(#1)
+ \psline[linestyle=dotted](\the\pst@cnta,0)(\the\pst@cnta,\cachedata)
+ \psdot(\the\pst@cnta,\cachedata)
+ \rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \psset{xunit=0.5,dotstyle=*,dotsize=0.3}
+ \DrawOccurrences{I do not believe that it can be correct}
+\end{CenterExample}
+
+\begin{CenterExample}
+ \makeatletter
+
+ \SpecialCoor
+
+ /HLMacro?\def\Draw@OneOccurrence;#1{%
+ \checkAssociativeArray@Indexes(#1)%
+ \pst@cnta=\cachedata
+ \checkAssociativeArray@Values(#1)%
+ \pspolygon*[linecolor=red](! \the\pst@cnta\space 0.3 sub 0)
+ (! \the\pst@cnta\space 0.3 sub \cachedata)
+ (! \the\pst@cnta\space 0.3 add \cachedata)
+ (! \the\pst@cnta\space 0.3 add 0)
+ \rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \psset{xunit=0.5,ticks=y}
+ \DrawOccurrences{I don't know a better solution than this one}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\section{Thanks}
+
+ I would like to thank Rolf Niepraschk \verb+<niepraschk@ptb.de>+ to have
+carefully read a preliminary version of this document and to have sent me
+several good advices to clarify and improve some points.
+
+\begin{thebibliography}{9}
+ \bibitem{SVB93} Stephan von \textsc{Bechtolsheim}, \emph{\TeX{} in
+ Practice}, four volumes, Springer-Verlag, New York, 1993 (see also
+ \url{CTAN: macros/tip/arraymac.tip}).
+ \bibitem{REPEAT} \RepeatPackage, by Victor \textsc{Eijkhout}, University of
+ Illinois, Urbana-Champaign, USA, \url{CTAN: macros/generic/eijkhout/repeat}
+ \bibitem{EG98} Philippe \textsc{Esperet} and Denis \textsc{Girou},
+ \emph{Coloriage du pavage dit de Truchet}, Cahiers GUTenberg, Number~31,
+ December 98, pages 5-18, in french (see
+ \url{http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPS/31-girou.ps.gz}).
+ \bibitem{ALDRATEX} \AlDraTeXPackage, by Eitan M. \textsc{Gurari}, Ohio State
+ University, Columbus, USA, \url{CTAN: graphics/dratex} (see also
+ \url{http://www.cis.ohio-state.edu/~gurari/systems.html}).
+ \bibitem{Gur94} Eitan M. \textsc{Gurari}, \emph{\TeX{} and \LaTeX: Drawing
+ and Literate Programming}, McGraw-Hill, New-York, 1994.
+ \bibitem{METAPOST} \MetaPostPackage, by John D. \textsc{Hobby}, AT\&T Bell
+ Laboratories, USA, \url{CTAN: graphics/metapost} (see also
+ \url{http://cm.bell-labs.com/who/hobby/MetaPost.html}).
+ \bibitem{FORMLETT} \FormLettPackage, by Zhuhan \textsc{Jiang}, University of
+ New England, Armidale, Australia, \url{CTAN: macros/generic/formlett.sty} (see
+ also \url{http://maths.une.edu.au/~zhuhan/util.html#computer}).
+ \bibitem{MULTIDO} \MultiDoPackage, by Timothy van \textsc{Zandt}, INSEAD,
+ Fontainebleau, France, \url{CTAN: macros/generic/multido}
+ \bibitem{PSTRICKS} \PSTricksPackage, by Timothy van \textsc{Zandt}, INSEAD,
+ Fontainebleau, France, \url{CTAN: graphics/pstricks} (see also
+ \url{http://www.tug.org/applications/PSTricks}).
+\end{thebibliography}
+
+\end{document}
diff --git a/macros/generic/arrayjobx/arrayjobx.pdf b/macros/generic/arrayjobx/arrayjobx.pdf
new file mode 100644
index 0000000000..25699278ee
--- /dev/null
+++ b/macros/generic/arrayjobx/arrayjobx.pdf
Binary files differ
diff --git a/macros/generic/arrayjobx/arrayjobx.sty b/macros/generic/arrayjobx/arrayjobx.sty
new file mode 100644
index 0000000000..fb533f625a
--- /dev/null
+++ b/macros/generic/arrayjobx/arrayjobx.sty
@@ -0,0 +1,192 @@
+% ARRAY STRUCTURE - arrayjobx.sty - Version 1.04 - 05/03/10
+%
+% By Zhuhan Jiang (01/05/95), extracted from formlett.sty
+% (see CTAN/macros/generic/formlett.sty from line 344 to line 483)
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License distributed from CTAN archives
+% in directory macros/latex/base/lppl.txt
+%
+% * 01/05/95 - Version 1.00
+% + Original version
+% * 12/21/99 - Version 1.01
+% + Spurious blanks removed in \read@array and \get@max@count
+% (reported by Antonio Leitao <aml@gia.ist.utl.pt>
+% and Denis Girou <Denis.Girou@idris.fr>)
+% * 04/05/00 - Version 1.02
+% + Add the \ifexpandarrayelement macro to allow to evaluate
+% or not the content to put as an element of the array
+% (from Denis Girou <Denis.Girou@idris.fr>)
+% + Put this package under the terms of the LaTeX Project
+% Public License
+% * 05/03/00 - Version 1.03
+% + Add a \ProvidesPackage macro when LaTeX is used
+% (according to the example given by Bernd Raichle
+% <raichle@Informatik.Uni-Stuttgart.DE>)
+% * 05/03/10 - Version 1.04
+% + Change the name of the macro \array to \arrayx
+% to avoid conflict with macros in the amsmath package.
+% Change suggested by Michael Sharpe (msharpe at ucsd.edu)
+%
+%
+% \newarray\ARRAYNAME
+% \delarray\ARRAYNAME
+%
+% \ARRAYNAME(A1,..,An)={T}
+% \readarray{ARRAYNAME}{ B1 & B2 & ... & Bm }
+% \dataheight
+%
+% \data(A1,...,An)=\data( A1 + (A2-1)*\dataheight +
+% ... + (An-1)*\dataheight^{n-1} )
+% if \normalindextrue
+% =\data( An + (An-1 -1)*\dataheight +
+% ... + (A1-1)*\dataheight^{n-1} )
+% if \normalindexfalse
+%
+% \checkARRAYNAME(A1,..,An)
+% \ifemptydata valid when \checkARRAYNAME is just executed
+% \cachedata: keeps the data of \ARRAYNAME(m)
+% when \checkARRAYNAME(m) is executed
+%
+% OTHERS:
+% save to array: \arrayx{n}(m)={T}
+% get from array: \arrayx{n}(m)
+% clear element: \clrarray{n}(m)
+% test element: \testarray{n}(m)
+% macro save to \temp@macro
+%
+%
+% e.g.
+%
+% \newarray\Table
+% \readarray{Table}{one&two& \unknownmacro && &six}
+% \Table(7)={seven}
+% \dataheight=0 % or 1 or < 0
+% \Table(7) = \Table(2,6,1) % 7=1+(2-1)+(6-1)+(1-1)
+% \normalindexfalse
+% \dataheight=3
+% \Table(7) = \Table(1,7) = \Table(3,1)
+% \normalindextrue
+% \Table(7) = \Table(7,1) = \Table(1,3)
+%
+% \checkTable(4) \ifemptydata (4)=empty \fi
+% \checkTable(5) \ifemptydata\else (5)=nonempty \fi
+% \ifx\cachedata\space ={\tt <space>}\fi
+% \checkTable(1000) \ifemptydata (1000)=empty \fi
+%
+% \delarray\Table
+%
+%
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax%
+\else
+ \ProvidesPackage{arrayjobx}[2010/05/03 v1.04 Array management]
+\fi
+%
+\xdef\EntryArrayJob{\the\catcode`\@}\catcode`\@=11\relax
+\newif\ifemptydata \newcount\dataheight
+\newif\ifnormalindex \normalindexfalse
+%
+\newcount\array@width \newcount\index@count \newcount\index@total
+\newif\ifone@VEC \newif\if@rev@index
+\newtoks\temp@toks \newcount\temp@count
+\newcount\temp@@count \newcount\temp@@@count
+%
+\newif\ifexpandarrayelement
+%
+\long\def\assign@VEC#1(#2)=#3{\temp@count=#2 \relax
+\get@max@count{total@#1}\temp@count
+\ifexpandarrayelement
+ \expandafter\xdef\csname#1#2\string~\endcsname{#3}%
+\else
+ \expandafter\gdef\csname#1#2\string~\endcsname{#3}%
+\fi}
+\def\get@VEC#1(#2){\csname#1#2\string~\endcsname}
+\def\clrarray#1(#2){%
+ \global\expandafter\let\csname#1#2\string~\endcsname=\undefined@}
+%
+\def\testarray#1(#2){%
+ \expandafter\let\expandafter\temp@macro\csname#1#2\string~\endcsname
+ \ifx\temp@macro\relax \def\temp@macro{}\fi}%
+%
+\def\arrayx#1(#2){\def\check@VEC{%
+ \ifx=\next@VEC \def\full@VEC####1{\assign@VEC#1(#2)####1}%
+ \else \def\full@VEC{\get@VEC#1(#2)}\fi \full@VEC}%check@VEC
+\futurelet\next@VEC\check@VEC}
+%
+\def\get@index(#1)#2\safty@mark{\one@VEC#2,\safty@mark
+ \def\next@@VEC{#1}\ifx\next@@VEC\empty\def\next@@VEC{\array@width}\fi
+ \if@rev@index
+ {\temp@count=1 \advance\index@count1 \relax
+ \ifnum\index@count<\index@total
+ \loop \multiply\temp@count \next@@VEC
+ \advance\index@count-1 \relax
+ \ifnum\index@count>0 \repeat
+ \fi \global\temp@@count\temp@count }%
+ \else \multiply\temp@@count \next@@VEC \fi
+ \ifnum\temp@@count=0 \temp@@count=1 \relax \fi
+ \advance\temp@count-1 \ifnum\temp@count<0 \temp@count=0 \fi
+ \multiply\temp@count \temp@@count
+ \advance\temp@@@count by \temp@count \advance\index@count1
+ \ifone@VEC
+ \def\next@@VEC{\index@total=\index@count \advance\temp@@@count1 }%
+ \else \one@VEC#2\safty@mark \edef\next@@VEC{\noexpand\get@index(#1)%
+ \the\temp@toks\noexpand\safty@mark}%
+ \fi \next@@VEC}%
+%
+\def\one@VEC#1,#2\safty@mark{\def\temp@macro{#2}\temp@toks={#2}%
+ \ifx\temp@macro\empty \one@VECtrue \else \one@VECfalse \fi
+ \temp@count=#1 \relax }%
+%
+\def\get@all@index(#1)#2\safty@mark{%
+ \temp@@@count=0 \temp@@count=0 \index@count=0 \@rev@indexfalse
+ \get@index(#1)#2\safty@mark
+ \ifnormalindex\else
+ \temp@@@count=0 \temp@@count=0 \index@count=0 \@rev@indextrue
+ \get@index(#1)#2\safty@mark \fi }%
+%
+\def\read@array[#1]#2#3{\temp@count=1
+ \def\one@item##1#1##2\safty@mark{\def\temp@macro{##2}\temp@toks={##2}%
+ \ifx\temp@macro\empty\else
+ \def\temp@macro{\one@item##2\safty@mark}\fi
+ {\temp@toks={##1}\def\temp@@macro{\arrayx{#2}(\the\temp@count)=}%
+ \expandafter\temp@@macro\expandafter{\the\temp@toks}}%
+ \expandafter\edef\csname total@#2\endcsname{\the\temp@count}%
+ \advance\temp@count1\temp@macro}%
+ \one@item#3#1\safty@mark}%
+%
+\def\strip@esc#1{\temp@count=\escapechar \escapechar=-1 %
+ \temp@toks=\expandafter{\string#1}\escapechar\temp@count}
+\def\get@max@count#1#2{\edef\temp@macro{\csname #1\endcsname}%
+ \ifnum\temp@macro<#2\expandafter\xdef\csname #1\endcsname{\the#2}\fi}%
+%
+\def\newarray#1{\strip@esc{#1}%
+ \expandafter\gdef\csname total@\the\temp@toks\endcsname{0}%
+ \expandafter\edef\csname\the\temp@toks\endcsname(##1)%
+ {\noexpand\get@all@index(\noexpand\dataheight)##1\noexpand\safty@mark
+% \noexpand\get@max@count{total@\the\temp@toks}\noexpand\temp@@@count
+ \noexpand\arrayx{\the\temp@toks}(\noexpand\the\noexpand\temp@@@count)}%
+ \expandafter\edef\csname check\the\temp@toks\endcsname(##1)%
+ {\noexpand\get@all@index(\noexpand\dataheight)##1\noexpand\safty@mark
+ \noexpand\testarray{\the\temp@toks}(\noexpand\the
+ \noexpand\temp@@@count)\noexpand\let\noexpand\cachedata
+ \noexpand\temp@macro\noexpand\ifx\noexpand\temp@macro\noexpand\empty
+ \noexpand\emptydatatrue\noexpand\else\noexpand\emptydatafalse
+ \noexpand\fi}}%
+%
+\def\delarray#1{\strip@esc{#1}% delete array globally
+ \temp@count=0 \temp@@count=\csname total@\the\temp@toks\endcsname
+ \loop \expandafter\global\expandafter\let
+ \csname\the\temp@toks\string~\endcsname\undefined@
+ \advance\temp@count1 %
+ \ifnum\temp@count<\temp@@count \repeat % global loop for less memory
+ \global\expandafter\let\csname total@\the\temp@toks\endcsname\undefined@
+ \global\expandafter\let\csname \the\temp@toks\endcsname\undefined@
+ \global\expandafter\let\csname check\the\temp@toks\endcsname\undefined@ }%
+%
+\def\readarray#1#2{\read@array[&]{#1}{#2}}%
+%
+\catcode`\@=\EntryArrayJob\relax
+\endinput
+%
+% END OF MACROS
diff --git a/macros/generic/arrayjobx/arrayjobx.tex b/macros/generic/arrayjobx/arrayjobx.tex
new file mode 100644
index 0000000000..0dbd380f55
--- /dev/null
+++ b/macros/generic/arrayjobx/arrayjobx.tex
@@ -0,0 +1,2096 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% arrayjobx.tex --- Documentation of the `arrayjobx' package from Zhuhan Jiang
+%%
+%% Author : Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% Created the : Fri Jan 7 21:13:20 2000
+%% Last mod. by : Michael Sharpe (UCSD - USA) <msharpe@ucsd.edu>
+%% Last mod. the : Mon May 3 11:18:300 2010
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{article}
+
+\usepackage{arrayjobx} % Arrays management
+\usepackage{fancyvrb} % Fancy verbatims
+\usepackage[width=18cm]{geometry} % Page layout
+\usepackage{graphics} % Graphics LaTeX standard package
+\usepackage{ifthen} % Convenient conditionals in LaTeX
+\usepackage{mflogo} % For the MetaFont and MetaPost logos
+\usepackage{multido} % General loop macro
+\usepackage{url} % URLs convenient typesetting
+
+% For PSTricks examples
+\newif\ifpstricks
+\IfFileExists{pstricks.sty}{%
+\pstrickstrue
+%\usepackage{pstcol} % PSTricks package with `color' interface
+\usepackage{pst-node} % PSTricks nodes package
+\usepackage{pst-plot} % PSTricks plots package
+\usepackage{pst-grad} % PSTricks gradients package
+%\usepackage{pst-key} % PSTricks interface to the `keyval' package
+}{%
+\usepackage{color}
+} % Color LaTeX standard package
+
+% Definition of new colors
+\definecolor{Khaki} {rgb}{0.94,0.90,0.55}
+\definecolor{LemonChiffon}{rgb}{1.,0.98,0.8}
+
+% A unique string for TeX and LaTeX
+\newcommand{\AllTeX}{%
+{\rm(L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em)%
+T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+% Package names
+\newcommand{\AlDraTeXPackage}{\textsf{(Al)Dra\TeX}}
+\newcommand{\ArrayJobPackage}{`\textsf{arrayjobx}'}
+\newcommand{\FormLettPackage}{`\textsf{formlett}'}
+\newcommand{\IfThenPackage}{`\textsf{ifthen}'}
+\newcommand{\MetaFontPackage}{\MF}
+\newcommand{\MetaPostPackage}{\MP}
+\newcommand{\MultiDoPackage}{`\textsf{multido}'}
+\newcommand{\PSTricksPackage}{\textsf{PSTricks}}
+\newcommand{\RepeatPackage}{`\textsf{repeat}'}
+
+% Aligned labels in a description environment
+\newenvironment{Description}[1]{%
+\begin{list}{nothing}{\setlength{\leftmargin}{#1}
+\setlength{\labelwidth}{\leftmargin}\setlength{\labelsep}{1mm}}}
+{\end{list}}
+
+% If PSTricks is not available
+\newcommand{\PSTricksExampleNotShown}{%
+\vspace{2mm}
+\centerline{\fbox{\textbf{Example not shown here because PSTricks is not
+ available on this platform.}}}}
+
+% Character to define verbatim strings, with escape characters /?; (from `fancyvrb')
+\DefineShortVerb[commandchars=/?;]{\!}
+
+\VerbatimFootnotes % Allow verbatim material in footnotes (from `fancyvrb')
+
+% Some advices from Rolf Niepraschk
+\newcommand{\BS}{\texttt{\symbol{`\\}}}
+\newcommand{\Macro}[1]{\texttt{\BS#1}}
+\newcommand{\Variable}[1]{\textnormal{\textit{\(\langle\)#1\,\(\rangle\)}}}
+\newcommand{\Parameter}[1]{\texttt{\symbol{`\{}#1\symbol{`\}}}}
+
+% To format TeX macro strings
+\newcommand{\FormatTeXMacro}[1]{\Macro{#1}\hfill :}
+
+\makeatletter
+
+% Example environments
+% (do not use in them the /?; characters, that we will be used as escape characters!)
+
+% For highlighting some verbatim sequences (array names, macro names and comments)
+\def\HLReverse#1{{%
+\setlength{\fboxsep}{1pt}%
+\colorbox{black}{\textcolor{white}{\textbf{#1}}}}}
+\def\HLMacro#1{\BS{}def\HLMacro@i#1\@nil}
+\def\HLMacro@i#1def#2\@nil{{%
+\setlength{\fboxsep}{1pt}%
+\colorbox{black}{\textcolor{white}{\textbf{#2}}}}}
+\def\HLComment#1{\textit{#1}}
+
+\def\Example{\FV@Environment{}{Example}}
+\def\endExample{%
+\end{VerbatimOut}
+\Below@Example{\input{\jobname.tmp}}
+\endgroup}
+
+\def\CenterExample{\FV@Environment{}{Example}}
+\def\endCenterExample{%
+\end{VerbatimOut}%
+\begin{center}
+\Below@Example{\input{\jobname.tmp}}
+\end{center}
+\endgroup}
+
+\def\SideBySideExample{\FV@Environment{}{Example}}
+\def\endSideBySideExample{%
+\end{VerbatimOut}%
+\SideBySide@Example{\input{\jobname.tmp}}
+\endgroup}
+
+\def\FVB@Example{%
+\begingroup
+\FV@UseKeyValues
+\parindent=0pt
+\multiply\topsep by 2
+\VerbatimEnvironment
+\begin{VerbatimOut}[codes={\catcode`\Z=12}]{\jobname.tmp}}
+
+\def\Below@Example#1{%
+\VerbatimInput[gobble=0,commentchar=Z,commandchars=/?;,numbersep=3pt,
+ frame=single,numbers=left]%
+ {\jobname.tmp}
+\catcode`\Z=9\relax%
+% We suppress the effect of the highlighting macros
+\catcode`/=0\relax%
+\catcode`?=1\relax%
+\catcode`;=2\relax%
+\def\HLReverse##1{##1}%
+\def\HLMacro##1{##1}%
+\def\HLComment##1{##1}%
+#1\par}
+
+\def\SideBySide@Example#1{%
+\@tempdimb=\FV@XRightMargin
+\advance\@tempdimb -5mm
+\begin{minipage}[c]{\@tempdimb}
+ \fvset{xrightmargin=0pt}
+ \catcode`\Z=9\relax%
+ % We suppress the effect of the highlighting macros
+ \catcode`/=0\relax%
+ \catcode`?=1\relax%
+ \catcode`;=2\relax%
+ \def\HLReverse##1{##1}%
+ \def\HLMacro##1{##1}%
+ \def\HLComment##1{##1}%
+ #1
+\end{minipage}%
+\@tempdimb=\textwidth
+\advance\@tempdimb -\FV@XRightMargin
+\advance\@tempdimb 5mm
+\begin{minipage}[c]{\@tempdimb}
+ \VerbatimInput[gobble=0,commentchar=Z,commandchars=/?;,
+ numbersep=3pt,frame=single,numbers=left,
+ xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
+\end{minipage}}
+
+\makeatother
+
+% Source codes must be indented by 2 spaces
+\fvset{gobble=2,frame=single,numbers=left,numbersep=1mm}
+
+\begin{document}
+
+\title{The \ArrayJobPackage{} package\\Management of arrays in \AllTeX}
+\author{Zhuhan Jiang\\School of Computing and Mathematics\\
+ University of Western Sydney\\Sydney\\Australia\\
+ {\footnotesize email: zhuhan@scm.uws.edu.au}\\[5mm]
+ {\footnotesize (Documentation: Denis Girou%
+ \footnote{All errors and misunderstandings are mine.}
+ \hspace{1mm}(CNRS/IDRIS -- France) --
+ Denis.Girou@idris.fr)}}
+\date{Version 1.04\\May 3, 2010\\
+ {\small Documentation revised May 31, 2000, edited lightly May 3, 2010 by Michael Sharpe}}
+
+\maketitle
+
+\begin{abstract}
+ This package provides array data structures in \AllTeX, in the meaning of
+the classical procedural programming languages like Fortran, Ada or C, and
+macros to manipulate them. Arrays can be mono or bi-dimensional.
+
+ This is useful for applications which require high level programming
+techniques, like algorithmic graphics programmed in \TeX. This version no longer conflicts with some macros in the {\tt amsmath} package. It should be used for all new work.
+\end{abstract}
+
+\tableofcontents
+
+\section{Introduction}
+
+ One of the big advantages of the \AllTeX{} system over common interactive
+software for text processing is that it offer, also, a programming language,
+which give, to people who have some knowledge in the algorithmic and
+programming fields, an exceptional flexibility and power.
+
+ Nevertheless, \TeX{} is a rather specific programming language, based on
+macro expansion, which implements a lot of unusual constructs but lacks some that are very familiar in the classical procedural languages, as
+\emph{arrays} to store and retrieve arbitrary pieces of data, stored in a
+structured way. The main reason why they were not integrated in \TeX{} was
+perhaps that arrays did not seem very useful in a language focussed on text processing (but
+\MetaFontPackage{}, for instance, does has them). Nevertheless, one of the few
+applications where this is straightforward to use them is to program a mailing
+system, where nearly the same information is to be formatted several times,
+depending of values which can be simply retrieved from an array of data. This
+was the goal of the \FormLettPackage{} package \cite{FORMLETT}, written in
+1993-1995 by Zhuhan Jiang for dealing with mass letters, invoices and similar
+tasks of some duplicative nature. It implemented a small but powerful set of
+macros to manage arrays, which have been extracted to form the present
+\ArrayJobPackage{} package. The arrays can be mono or bi-dimensional%
+\footnote{You can use more than two dimensions, but not in the meaning of the
+classical programming languages (see page \pageref{par:DataHeight})}
+and they are dynamically allocated (so we do not have to declare their
+dimension statically.)%
+\footnote{Stephan von Bechtolsheim \cite[Volume \textsc{III}, paragraph 20.3,
+page 136]{SVB93} also demonstrated such macros for array management in the
+third volume of his huge book, but it was limited to mono-dimensional
+arrays.}.
+
+ Array structures are, at the opposite of text management, often very useful
+in graphic programming. This is why the \AlDraTeXPackage{} package from Eitan
+Gurari \cite{ALDRATEX} (see also \cite{Gur94}) integrate such functionality
+(but which is bundled inside this package and could not be extracted easily
+from it), and this is also the case for the \MetaPostPackage{} package
+\cite{METAPOST} (but this one do not use \TeX{} as programming language)%
+\footnote{Another required feature, used in conjunction with the managements
+of arrays, is a generic loop mechanism. \TeX{} offer the \Macro{loop} macro
+and \LaTeX{} the \Macro{whiledo} macro of the \IfThenPackage{} package (and
+also the internal \Macro{@for}, \Macro{@whilenum}, etc. macros), but a more
+high-level structure is to be preferred, as the ones defined too in the
+\AlDraTeXPackage{} or \MetaPostPackage{} packages. We will use in our examples
+the \MultiDoPackage{} package \cite{MULTIDO}, also written by Timothy van
+Zandt, but others are available, like the \RepeatPackage{} package written by
+Victor Eijkhout \cite{REPEAT}.}. This fact explain why most of our examples in
+this documentation will concern the area of \emph{graphic programming} (here
+using the \PSTricksPackage{} package from Timothy van Zandt \cite{PSTRICKS}).
+
+\section{Command reference}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{newarray}] Define a new array.
+
+ Syntax: !\newarray/Macro?/Variable?ArrayName;;!
+
+ Example: !\newarray\Values!
+
+ \item[\FormatTeXMacro{delarray}] Delete an array.
+
+ Syntax: !\delarray/Macro?/Variable?ArrayName;;!
+
+ Example: !\delarray\Values!
+
+ Remarks:
+ \begin{enumerate}
+ \item obviously, elements of a deleted array could not be accessed
+ later,
+ \item take care that the elements of a deleted array are not
+ themselves deleted.\newline
+ So, \verb+\delarray\Data \newarray\Data \Data(I)+ can produce
+ strange behavior. Just avoid reusing deleted arrays.
+ \end{enumerate}
+
+ \item[\FormatTeXMacro{ArrayName}] Store or get the content of the array
+ element specified by the index/indices. In the last case, the content is
+ inserted at the current point.
+
+ Syntax: !/Macro?/Variable?ArrayName;;(I)=/Parameter?/Variable?Content;;! or more
+ generally\newline
+ \hspace*{1.3cm}!/Macro?/Variable?ArrayName;;(I1,...,In)=/Parameter?/Variable?Content;;!
+ to store a value
+
+ \hspace{1.3cm}!/Macro?/Variable?ArrayName;;(I)! or more generally
+ !/Macro?/Variable?ArrayName;;(I1,...,In)! to retrieve a value
+
+ Examples: !\Data(6)={Paul Adams}!
+
+ \hspace{1.75cm}!\Values(19)!
+
+ \item[\FormatTeXMacro{readarray}] Store consecutive values in an array,
+ starting from the indice one.
+
+ Syntax: !\readarray/Parameter?/Variable?ArrayName;;=/Parameter?/Variable?Content1;&...&/Variable?ContentM;;!
+
+ Example: !\readarray{Actors}{Louise Brooks&Marlene Dietrich&Clark Gable}!
+
+ Remarks:
+ \begin{enumerate}
+ \item the values must be separated by the \textbf{\&} character,
+ \item take care that the trailing spaces are significant, so the
+ previous definition is different from the following one:
+
+ !\readarray{Actors}{Louise Brooks & Marlene Dietrich & Clark Gable}!
+ \item you can use \AllTeX{} macros inside the values.
+ \end{enumerate}
+\end{Description}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Values
+ \readarray{/HLReverse?Values;}{A&B&C&D}
+ \verb+\Values(3)+ = `\Values(3)'
+ \newarray\Actors
+ \readarray{/HLReverse?Actors;}{Louise Brooks&Marlene Dietrich&Clark Gable}
+ Z\par
+ \verb+\Actors(2)+ = `\Actors(2)'
+ \readarray{/HLReverse?Actors;}{%
+ Louise Brooks & Marlene Dietrich & Clark Gable}
+ Z\par
+ \verb+\Actors(2)+ = `\Actors(2)'
+ \Actors(4)={\textit{\underline{Ida Lupino}}}
+ Z\par
+ \verb+\Actors(4)+ = `\Actors(4)'
+\end{SideBySideExample}
+
+\vspace{3mm}
+\noindent If you really need to trim the unnecessary left and right spaces, you must
+apply a special action, like this one:
+
+\begin{Example}
+ \def\BS{\texttt{\symbol{`\\}}}
+
+ \newarray\Strings
+ \readarray{/HLReverse?Strings;}{a& b&c c & d dd ddd }
+
+ \multido{\iString=1+1}{4}{%
+ \checkStrings(\iString)%
+ \BS\texttt{Strings(\iString)}=`\cachedata'\qquad}
+
+ \makeatletter
+
+ % /HLComment?A \TrimSpaces macro adapted from Michael J. Downes <epsmjd@ams.org>;
+ % /HLComment?(posted on c.t.t. June 19, 1998);
+ % /HLComment?\number`\x reads past one following space (expanding as it goes);
+ \long\def\TrimSpaces#1{\expandafter\TrimSpaces@i\number`\^^00#1| |}
+ % /HLComment?Remove the "0" produced by \number`\^^00, and " |" at the end.;
+ \long\def\TrimSpaces@i 0#1 |{\TrimSpaces@ii\empty#1|}
+ % /HLComment?" |" was removed by \TrimSpaces@i, now remove a trailing "||" or "| |";
+ \long\def\TrimSpaces@ii #1|#2|{#1}
+
+ \makeatother
+
+ \multido{\iString=1+1}{4}{%
+ \checkStrings(\iString)%
+ \BS\texttt{Strings(\iString)}=`\TrimSpaces{\cachedata}'\qquad}
+\end{Example}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{check}] Get the content of the array element specified
+ by the indice(s) and store the result in the macro !\cachedata!
+
+ Syntax: !\check/Variable?ArrayName;(I)! or more generally
+ !\check/Variable?ArrayName;(I1,..,In)!
+
+ Example: !\checkActors(2)!
+ \item[\FormatTeXMacro{cachedata}] Macro where the content is stored after
+ a !\check! request.
+ \item[\FormatTeXMacro{ifemptydata}] True if the last \Macro{check} request
+ has given an empty result.
+\end{Description}
+
+\newarray\Values
+\readarray{Values}{A&B&C&D}
+
+\newarray\Actors
+\newarray\Dates
+\newarray\Sexes
+\readarray{Actors}{Louise Brooks&%
+ Marlene Dietrich&%
+ Clark Gable}
+\readarray{Dates}{1906--1985&%
+ 1902--1992&%
+ 1901--1960}
+\readarray{Sexes}{2&2&1}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ % /HLComment?Plain TeX usage;
+ \checkValues(2)%
+ \verb+\Values(2)+ = `\cachedata'
+ Z\par
+ \checkActors(3)%
+ \verb+\Actors(3)+ = `\cachedata'
+ Z\par
+ \checkActors(5)%
+ \ifemptydata
+ \verb+\Actors(5)+ not defined.
+ \fi
+ Z\par
+ % /HLComment?LaTeX usage;
+ \newcommand{\IsEmptyElement}[2]{%
+ \ifthenelse{\boolean{emptydata}}{#1}{#2}}
+ \checkActors(3)%
+ \verb+\Actors(3)+ = \IsEmptyElement{not defined}{`\cachedata'}
+ Z\par
+ \checkActors(5)%
+ \verb+\Actors(5)+ \IsEmptyElement{not defined}{`\cachedata'}
+\end{SideBySideExample}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{ifnormalindex}] See below (Default: !\normalindexfalse!).
+
+ \item[\FormatTeXMacro{dataheight}\label{par:DataHeight}] Counter containing
+ the number of elements in the first dimension, if arrays are bi-dimensional.
+
+ Syntax: !\dataheight=/Variable?Number;!
+
+ Remarks:
+ \begin{enumerate}
+ \item arrays are monodimensional when !\dataheight!~$\leq~1$,
+ \item if !\normalindexfalse! (which is the default value), we have:
+ $$\hspace{-3cm}\Macro{\Variable{ArrayName}}(I_1,...,I_n)
+ = \Macro{\Variable{ArrayName}}(I_n + (I_{n-1}-1) *
+ \Macro{dataheight} + \cdots
+ + (I_1-1) * \Macro{dataheight}^{n-1})$$
+
+ and if !\normalindextrue!, we have:
+ $$\hspace{-3cm}\Macro{\Variable{ArrayName}}(I_1,...,I_n)
+ = \Macro{\Variable{ArrayName}}(I_1 + (I_2-1) *
+ \Macro{dataheight} + \cdots
+ + (I_n-1) * \Macro{dataheight}^{n-1})$$
+ \end{enumerate}
+\end{Description}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Letters
+ \readarray{/HLReverse?Letters;}{A&B&C&D&E&F&G&H&I&J}
+ \dataheight=5
+
+ Z\begin{tabular}{c|c|c|c|c|c|c|c|c|}
+ Z \multicolumn{1}{c}{} & \multicolumn{1}{c}{1} & \multicolumn{1}{c}{2} &
+ Z \multicolumn{1}{c}{3} & \multicolumn{1}{c}{4} & \multicolumn{1}{c}{5} \\ \cline{2-6}
+ Z 1 & A & B & C & D & E \\ \cline{2-6}
+ Z 2 & F & G & H & I & J \\ \cline{2-6}
+ Z\end{tabular}
+ Z\\[2mm]
+ % /HLComment?Default is \normalindexfalse;
+ \verb+\Letters(1,2)=+`\Letters(1,2)'
+ Z\par
+ \verb+\Letters(2,1)=+`\Letters(2,1)'
+ Z\\[2mm]
+ Z\begin{tabular}{c|c|c|}
+ Z \multicolumn{1}{c}{} & \multicolumn{1}{c}{1} & \multicolumn{1}{c}{2} \\ \cline{2-3}
+ Z 1 & A & F \\ \cline{2-3}
+ Z 2 & B & G \\ \cline{2-3}
+ Z 3 & C & H \\ \cline{2-3}
+ Z 4 & D & I \\ \cline{2-3}
+ Z 5 & E & J \\ \cline{2-3}
+ Z\end{tabular}
+ Z\\[2mm]
+ \normalindextrue
+ \verb+\Letters(1,2)=+`\Letters(1,2)'
+ Z\par
+ \verb+\Letters(2,1)=+`\Letters(2,1)'
+\end{SideBySideExample}
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{ifexpandarrayelement}] Boolean macro to allow or not
+ the element to be evaluated before to be stored in the array (Default:
+ !\expandarrayelementfalse!).
+
+ Syntax: !\expandarrayelementtrue! or !\expandarrayelementfalse!
+
+ Remark: take care to the possible side effects if you store some macros
+ as values of some array elements without evaluating them, as they can
+ change of content later... (see the following examples).
+\end{Description}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Data
+ \newcount\CounterP % /HLComment?Plain TeX usage;
+ \CounterP=3
+ \newcounter{CounterL} % /HLComment?LaTeX usage;
+ \setcounter{CounterL}{3}
+ \def\Town{Madrid}
+ \Data(1)={\the\CounterP}
+ \Data(2)={\the\value{CounterL}}
+ \Data(3)={\Town}
+
+ \expandarrayelementtrue
+ \Data(4)={\the\CounterP}
+ \Data(5)={\the\value{CounterL}}
+ \Data(6)={\Town}
+
+ \CounterP=5
+ \setcounter{CounterL}{5}
+ \def\Town{Roma}
+
+ \multido{\iData=1+1}{6}{%
+ \BS\texttt{Data(\iData)}=`\Data(\iData)'\\}
+\end{SideBySideExample}
+
+\vspace{3mm}
+\noindent Some other macros exists for mono-dimensional arrays (and only for
+them), but have little additional interest:
+
+\begin{Description}{4cm}
+ \item[\FormatTeXMacro{arrayx}] Store or get the content of the array element
+ specified by the index. In the last case, the content is inserted at the
+ current point.\footnote{The macro name \verb|\array| conflicted with macros in {\tt amsmath}, and is changed as of version 1.04. (Modification suggested by Michael Sharpe.)}
+
+ Syntax: !\arrayx/Parameter?/Variable?ArrayName;;(I)=/Parameter?/Variable?Content;;!
+ to store a value
+
+ \hspace{1.3cm}!\arrayx/Parameter?/Variable?ArrayName;;(I)! to retrieve a value
+
+ Examples: !\arrayx{Actors}(6)={Joan Crawford}!
+
+ \hspace{1.75cm}!\arrayx{Actors}(3)!
+
+ \item[\FormatTeXMacro{clrarray}] Clear the content of the array element specified.
+ A following inquiry on this element will give an empty content.
+
+ Syntax: !\clrarray/Parameter?/Variable?ArrayName;;(I)!
+
+ Example: !\clrarray{Actors}(2)!
+
+ \item[\FormatTeXMacro{testarray}] Get the content of the array element specified
+ by the index and store the result in the macro !\temp@macro!%
+ \footnote{In \LaTeX, this macro should be used inside a package or between
+ the \verb+\makeatletter+ $\cdots$ \verb+\makeatother+ macro pair.}.
+
+ Syntax: !\testarray/Parameter?/Variable?ArrayName;;(I)!
+
+ Example: !\testarray{Actors}(1)\typeout{Actors(1)=`\temp@macro'}!
+\end{Description}
+
+\section{Examples}
+
+\UndefineShortVerb{\!} % We will use the ! character in the next examples
+
+ We will first show some basic and easy examples, before looking at more
+advanced ones to solve some complex problems, which require more knowledge of
+\TeX{} programming techniques.
+
+\subsection{Basic examples}
+
+ The immediate thing for which we can use arrays is to store and retrieve
+information:
+
+\vspace{2mm}
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newarray\Actors
+ \newarray\Dates
+ \newarray\Sexes
+
+ \readarray{/HLReverse?Actors;}{Louise Brooks&Marlene Dietrich&Clark Gable}
+ \readarray{/HLReverse?Dates;}{1906--1985&1902--1992&1901--1960}
+ \readarray{/HLReverse?Sexes;}{2&2&1}
+
+ \begin{description}
+ \item[\Actors(1)] : \Dates(1)
+ \item[\Actors(2)] : \Dates(2)
+ \item[\Actors(3)] : \Dates(3)
+ \end{description}
+\end{SideBySideExample}
+
+\vspace{2mm}
+ But we can also use a general loop macro, as the one provided by the
+\MultiDoPackage{} package, for more powerful usage and a management
+independent of the number of elements:
+
+\vspace{2mm}
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \newcommand{\NumberActors}{3}
+
+ \begin{description}
+ \multido{\iActor=1+1}{\NumberActors}{%
+ \item[\Actors(\iActor)] : \Dates(\iActor)}
+ \end{description}
+\end{SideBySideExample}
+
+\vspace{2mm}
+ This allow various usage in the formatting of texts. A common usage is for a
+\emph{mailing} process, when we must compose some similar letters to various
+people (as we said previously, this was the reason for which these macros were
+developed in the \FormLettPackage{} package). Here, the usage of a programming
+language allow a great flexibility, using some conditionals to format the text
+differently or even to insert different pieces of text according to the person:
+
+\newcommand{\NumberActors}{3}
+
+\begin{CenterExample}
+ \newcounter{iActor}
+
+ \newcommand{\AccordingSexe}[2]{%
+ \checkSexes(\the\value{iActor})%
+ \ifthenelse{\equal{\cachedata}{1}}{#1}{#2}}
+
+ \whiledo{\value{iActor} < \NumberActors}{%
+ \stepcounter{iActor}%
+ \fbox{%
+ \begin{minipage}{0.985\textwidth}
+ Dear \AccordingSexe{Mr}{Mrs} \Actors(\the\value{iActor}),
+
+ I would like to tell you how I admire the great \AccordingSexe{actor}{actress}
+ you are, etc.
+ \end{minipage}}\\[5mm]}
+\end{CenterExample}
+
+ Nevertheless, people who know a little \TeX{} as a programming language know
+that it behaviour is full of pitfalls... For instance, the following example,
+which format a table according to the content of entries stored in external
+arrays, can't work:
+
+\begin{Verbatim}
+ \begin{tabular}{|l|c|}
+ \hline
+ \multicolumn{1}{|c}{\textbf{Actors}} & \multicolumn{1}{|c|}{\textbf{Dates}} \\ \hline
+ \multido{\iActor=1+1}{\NumberActors}{\Actors(\iActor) & \Dates(\iActor) \\ \hline}
+ \end{tabular}
+\end{Verbatim}
+
+ This is because there is an implicit grouping of each entry in a tabular
+environment and that it do not work with the grouping of the \verb+\multido+
+loop. So, this must be program in a different way, storing all the content of
+the table before really inserting it:
+
+\begin{SideBySideExample}[xrightmargin=6cm,baselinestretch=0.9]
+ \begin{tabular}{|l|c|}
+ \hline
+ \multicolumn{1}{|c}{\textbf{Actors}} &
+ \multicolumn{1}{|c|}{\textbf{Dates}} \\ \hline
+ \let\ListActors\empty
+ \begingroup
+ \let\Actors\relax
+ \let\Dates\relax
+ \let\\\relax
+ \let\hline\relax
+ \multido{\iActor=1+1}{\NumberActors}{%
+ \xdef\ListActors{\ListActors
+ \Actors(\iActor) & \Dates(\iActor) \\ \hline}}
+ \endgroup
+ \ListActors
+ \end{tabular}
+\end{SideBySideExample}
+
+\subsubsection{Plot labels}
+
+ A basic usage in graphic programming is to use arrays to retrieve the labels
+to put on a drawing, as here to label the simple plot below. (Note the change from the original documentation. The axis labels used with \verb|\psaxes| must now be numeric, so it is necessary to bypass the automatic axis labeling.)
+\ifpstricks % If PSTricks is available
+\begin{CenterExample}[baselinestretch=0.9]
+ \savedata{\Data}[(1,3)(2,1)(3,2)(4,1)(5,1)(6,3),(7,2)(8,1)(9,3)(10,3)(11,1)(12,1)]
+
+ \newcommand{\PlotData}[1]{%
+ \begin{pspicture}(-0.5,-0.5)(13,4)
+ \psaxes[labels=none]{->}(13,4)
+ \dataplot[plotstyle=dots,dotstyle=o,dotsize=0.3]{\Data}
+ #1\end{pspicture}}
+ \PlotData{\psaxes[showorigin=false]{->}(13,4)}
+
+ \newarray{\Months}
+ \readarray{/HLReverse?Months;}{January&February&March&April&May&June&July&August&September&%
+ October&November&December}
+ \newarray{\Levels}
+ \readarray{/HLReverse?Levels;}{Low&Medium&High}
+ %\renewcommand{\pshlabel}[1]{\tiny\Months(#1)}
+ \PlotData{\psaxes[labels=y,showorigin=false]{->}(13,4)%
+ \multido{\i=1+1}{12}{\rput[B](\i,-12pt){\tiny\Months(\i)}}}
+
+ %\renewcommand{\psvlabel}[1]{\small\Levels(#1)}
+ \PlotData{\multido{\i=1+1}{12}{\rput[B](\i,-12pt){\tiny\Months(\i)}}%
+ \multido{\i=1+1}{3}{\rput[r](-12pt,\i){\small\Levels(\i)}}}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\subsubsection{Checkboard drawing}
+
+ Of course, a bi-dimensional array directly allow to store the state of a
+checkboard of one of the numerous ones existing, like the reversi game that
+we will show here (in fact, the only more difficult part to understand in this
+example concern the definition of the elementary piece, but as this is not
+related at all to the usage of \ArrayJobPackage, this point can be forgotten
+by most of the readers).
+
+\ifpstricks % If PSTricks is available
+\begin{SideBySideExample}[xrightmargin=6cm,baselinestretch=0.89]
+ /HLMacro?\def\Black;{B}
+ /HLMacro?\def\White;{W}
+
+ /HLMacro?\def\Piece;#1#2{{%
+ \psset{unit=0.8}%
+ \pspicture(0,-0.1)(1,0.8)
+ \pscustom[fillstyle=gradient,gradmidpoint=0,gradangle=90,
+ gradbegin=#2,gradend=#1]{%
+ \psbezier(0,0.2)(0.1,-0.2)(0.9,-0.2)(1,0.2)
+ \psline(1,0.2)(1,0.5)
+ \psbezier(1,0.5)(0.9,0.9)(0.1,0.9)(0,0.5)
+ \psline(0,0.5)(0,0.2)}
+ \psbezier(0,0.5)(0.1,0.1)(0.9,0.1)(1,0.5)
+ \endpspicture}}
+
+ /HLMacro?\def\PieceBlack;{\Piece{black}{gray}}
+ /HLMacro?\def\PieceWhite;{\Piece{white}{gray}}
+
+ /HLMacro?\def\CheckboardHook;{}
+
+ \newarray\Checkboard
+
+ /HLMacro?\def\ShowCheckboard;{%
+ \dataheight=8
+ \pspicture(8,8)
+ \psgrid[subgriddiv=0,gridlabels=0](8,8)
+ \CheckboardHook
+ \multido{\iColumn=1+1,\iColumnPos=0+1}{8}{%
+ \multido{\iRow=1+1,\iRowPos=7+-1}{8}{%
+ \checkCheckboard(\iRow,\iColumn)%
+ \ifx\cachedata\Black
+ \rput(\iColumnPos.5,\iRowPos.5){\PieceBlack}
+ \else
+ \ifx\cachedata\White
+ \rput(\iColumnPos.5,\iRowPos.5){\PieceWhite}
+ \fi
+ \fi}}
+ \endpspicture}
+
+ \readarray{/HLReverse?Checkboard;}{%
+ W& &B& & & & &B&%
+ &W&B& & & & &B&%
+ W&W&B& &W& & &B&%
+ W&W&B&W&W&W&B&B&%
+ B& &W&W&W&B&W&B&%
+ B&B&W&W&W&B&W&B&%
+ B&B&B&W&W&W&W&B&%
+ W&B&B&B&B&B&B&B&%
+ }
+
+ \psset{unit=0.6}
+ \ShowCheckboard
+
+ \Checkboard(2,1)={B} % /HLComment?Black move;
+ /HLMacro?\def\CheckboardHook;{%
+ \psframe[linestyle=none,fillstyle=hlines](0,6)(1,7)}
+ % /HLComment?White pieces changed by the black move;
+ \Checkboard(3,1)={B}\Checkboard(4,1)={B}
+ \Checkboard(2,2)={B}\Checkboard(3,2)={B}
+ \vspace{1cm}
+ \ShowCheckboard
+\end{SideBySideExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+ Note also that, if \TeX{} is obviously not well suited to implement a
+program to \emph{really} play at a game like reversi or chess, nevertheless
+it can be used to solve internally some non trivial algorithmic problems,
+where the usage of arrays help a lot. For such example (on the coloration of
+the Truchet's tiling), see \cite{EG98}.
+
+\subsection{Advanced examples}
+
+ This section will show slightly more difficult to really complex examples,
+and is mainly for \emph{advanced users} or for people who want to be able to
+program complex tasks themselves.
+
+\subsubsection{Example with recursion usage}
+
+\begin{CenterExample}
+ \makeatletter
+
+ % /HLComment?The recursion macro used (from David Carlisle);
+ /HLMacro?\def\Recursion;#1{%
+ #1\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+ \newcount\IndexRecursion
+ \IndexRecursion=\z@
+
+ /HLMacro?\def\PiFrac;#1{{%
+ \Recursion
+ {\ifnum#1>\@ne\relax}
+ {\@tempcnta=#1
+ \advance\@tempcnta\m@ne
+ \advance\IndexRecursion\@ne
+ \PiValues(\IndexRecursion)
+ +\frac{\strut\displaystyle 1}{\strut\displaystyle\PiFrac{\@tempcnta}}}
+ {\advance\IndexRecursion\@ne
+ \PiValues(\IndexRecursion)}}}
+
+ \makeatother
+
+ \newarray\PiValues
+ \readarray{/HLReverse?PiValues;}{3&7&15&1&292&1&1&1&2&1&3&1&14}
+
+ \(\pi\approx\PiFrac{/HLReverse?4;}\approx\PiFrac{/HLReverse?13;}\)
+
+ \textbf{\(\pi\) as a continued fraction}
+\end{CenterExample}
+
+\subsubsection{Structured dynamic diagrams on a grid}
+
+ A very common case is when we must use some strutured data which are to be
+drawn on a kind of abstract grid.
+
+\ifpstricks % If PSTricks is available
+ To draw a diagram like this one (such example illustrate the exchanges of
+data between processors when using applications on multiprocessors computers
+in parallel programming):
+
+\vspace{2mm}
+\begin{SideBySideExample}[xrightmargin=5.8cm]
+ \psset{linestyle=none,fillstyle=solid,subgriddiv=0,gridlabels=0}
+ \begin{pspicture}(-1,0)(4,4)
+ % /HLComment?Line 0;
+ \psframe[fillcolor=Khaki](0,3.1)(1,3.9)
+ \psframe[fillcolor=LemonChiffon](1,3.1)(4,3.9)
+ \rput(0,3.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,3.5){P0}
+ \rput(0.5,3.5){A0}
+ % /HLComment?Line 1;
+ \psframe[fillcolor=Khaki](0,2.1)(2,2.9)
+ \psframe[fillcolor=LemonChiffon](2,2.1)(4,2.9)
+ \rput(0,2.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,2.5){P1}
+ \rput(0.5,2.5){A0}\rput(1.5,2.5){A1}
+ % /HLComment?Line 2;
+ \psframe[fillcolor=Khaki](0,1.1)(3,1.9)
+ \psframe[fillcolor=LemonChiffon](3,1.1)(4,1.9)
+ \rput(0,1.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,1.5){P2}
+ \rput(0.5,1.5){A0}\rput(1.5,1.5){A1}\rput(2.5,1.5){A2}
+ % /HLComment?Line 3;
+ \psframe[fillcolor=Khaki](0,0.1)(4,0.9)
+ \rput(0,0.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,0.5){P3}
+ \rput(0.5,0.5){A0}\rput(1.5,0.5){A1}
+ \rput(2.5,0.5){A2}\rput(3.5,0.5){A3}
+ \end{pspicture}
+\end{SideBySideExample}
+
+\vspace{2mm}
+\noindent is easy but rather painful, as we must manage a lot of coordinates.
+Nevertheless, even if we introduce a little more abstraction level using some
+minor programming with a loop structure:
+\vspace{2mm}
+
+
+\begin{SideBySideExample}[xrightmargin=5.8cm]
+ \psset{linestyle=none,fillstyle=solid,subgriddiv=0,gridlabels=0}
+ \begin{pspicture}(-1,0)(4,4)
+ \multido{\iLoop=1+1,\iRow=0+1,\iRowPos=3+-1}{4}{%
+ \psframe[fillcolor=Khaki](0,\iRowPos.1)(\iLoop,\iRowPos.9)
+ \psframe[fillcolor=LemonChiffon]
+ (\iLoop,\iRowPos.1)(4,\iRowPos.9)
+ \rput(0,\iRowPos.1){\psgrid[yunit=0.8](4,1)}
+ \rput(-0.5,\iRowPos.5){P\iRow}
+ \multido{\iColumn=0+1,\iLabel=1+1}{\iLoop}{%
+ \rput(\iColumn.5,\iRowPos.5){A\iColumn}}}
+ \end{pspicture}
+\end{SideBySideExample}
+
+\vspace{2mm}
+\noindent we succeed to heavily reduce the number of lines of the code in this
+specific case, but we gain nothing in genericity. If we have several such
+diagrams to draw, with each that must be done differently according to the
+empty and full cells of the array, we must proceed in a completely different
+way, defining a \emph{generic object} which can obtain the different values of
+a data structure previously filled. For such tasks, the \ArrayJobPackage{}
+package allow to build very efficient and powerful tools.
+
+\begin{Verbatim}[commandchars=/?;]
+ % /HLComment?The grid;
+ /HLMacro?\def\ArrayGrid;#1#2#3{{%
+ % /HLComment?#1=array of data, #2=number of rows, #3=number of columns;
+ \psset{dimen=middle,xunit=0.8}
+ \dataheight=#3
+ \pspicture(-1,-#2)(#3,0)
+ \multido{\iRow=1+1,\iRowMinusOne=0+1}{#2}{%
+ \rput(-1,-\iRow){\LineGrid{#1}{\iRow}{\iRowMinusOne}{#3}}}
+ \endpspicture}}
+
+ % /HLComment?One line of the grid;
+ /HLMacro?\def\LineGrid;#1#2#3#4{%
+ \rput(0.5,0.4){\AttributeLabel{P#3}}
+ \multido{\iColumn=1+1}{#4}{%
+ \expandafter\csname check#1\endcsname(#2,\iColumn)%
+ \rput(\iColumn,0){%
+ \ifemptydata
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \ifx\cachedata\space
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \def\ColorBackground{\ColorBackgroundFull}%
+ \fi
+ \fi
+ \psframe[fillstyle=solid,fillcolor=\ColorBackground](1,0.8)
+ \rput(0.5,0.4){\AttributeElement{\cachedata}}}}}
+\end{Verbatim}
+
+% The grid
+\def\ArrayGrid#1#2#3{{%
+% #1=array of data, #2=number of rows, #3=number of columns
+\psset{dimen=middle,xunit=0.8}
+\dataheight=#3
+\pspicture(-1,-#2)(#3,0)
+\multido{\iRow=1+1,\iRowMinusOne=0+1}{#2}{%
+ \rput(-1,-\iRow){\LineGrid{#1}{\iRow}{\iRowMinusOne}{#3}}}
+\endpspicture}}
+
+% One line of the grid
+\def\LineGrid#1#2#3#4{%
+\rput(0.3,0.4){\AttributeLabel{P#3}}
+\multido{\iColumn=1+1}{#4}{%
+ \expandafter\csname check#1\endcsname(#2,\iColumn)%
+ \rput(\iColumn,0){%
+ \ifemptydata
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \ifx\cachedata\space
+ \def\ColorBackground{\ColorBackgroundEmpty}%
+ \else
+ \def\ColorBackground{\ColorBackgroundFull}%
+ \fi
+ \fi
+ \psframe[fillstyle=solid,fillcolor=\ColorBackground](1,0.8)
+ \rput(0.5,0.4){\AttributeElement{\cachedata}}}}}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ % /HLComment?Default attributes;
+ \def\ColorBackgroundEmpty{LemonChiffon}
+ \def\ColorBackgroundFull{Khaki}
+ \def\AttributeElement#1{\textcolor{red}{#1}}
+ \def\AttributeLabel#1{\bf #1}
+
+ % /HLComment?Example 1;
+ \newarray\ArrayA
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A0& & & &%
+ A0&A1& & &%
+ A0&A1&A2& &%
+ A0&A1&A2&A3}
+
+ \ArrayGrid{ArrayA}{4}{4}
+\end{SideBySideExample}
+
+\newarray\ArrayA
+
+% Default attributes
+\def\ColorBackgroundEmpty{LemonChiffon}
+\def\ColorBackgroundFull{Khaki}
+\def\AttributeElement#1{\textcolor{red}{#1}}
+\def\AttributeLabel#1{\bf #1}
+
+\begin{CenterExample}[baselinestretch=0.9]
+ % /HLComment?Example 2;
+ \newarray\ArrayB
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A& & & &%
+ & & & &%
+ & & & &%
+ & & & }
+ \readarray{/HLReverse?ArrayB;}{%
+ A& & & &%
+ A& & & &%
+ A& & & &%
+ A& & & }
+
+ \ArrayGrid{ArrayA}{4}{4}\hfill\ArrayGrid{ArrayB}{4}{4}
+\end{CenterExample}
+
+\newarray\ArrayB
+
+\begin{CenterExample}[baselinestretch=0.9]
+ % /HLComment?Example 3;
+ \newarray\ArrayC
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A0& & &%
+ A1& & &%
+ A2& & }
+ \readarray{/HLReverse?ArrayB;}{%
+ A0&A1&A2&%
+ A0&A1&A2&%
+ A0&A1&A2}
+ \readarray{/HLReverse?ArrayC;}{%
+ A0& & &%
+ &A1& &%
+ & &A2}
+
+ % /HLComment?Attributes;
+ \def\ColorBackgroundEmpty{green}
+ \def\ColorBackgroundFull{red}
+ \def\AttributeElement#1{\footnotesize\textcolor{white}{#1}}
+ \def\AttributeLabel#1{\small\bf #1}
+
+ \psset{unit=0.7}
+ \ArrayGrid{ArrayA}{3}{3}\hfill\ArrayGrid{ArrayB}{3}{3}\hfill\ArrayGrid{ArrayC}{3}{3}
+\end{CenterExample}
+
+\begin{CenterExample}[baselinestretch=0.9]
+ % /HLComment?Example 4;
+
+ % /HLComment?Data;
+ \readarray{/HLReverse?ArrayA;}{%
+ A0&A1&A2&A3&%
+ B0&B1&B2&B3&%
+ C0&C1&C2&C3&%
+ D0&D1&D2&D3}
+ \readarray{/HLReverse?ArrayB;}{%
+ A0&B0&C0&D0&%
+ A1&B1&C1&D1&%
+ A2&B2&C2&D2&%
+ A3&B3&C3&D3}
+
+ % /HLComment?Attributes;
+ \def\AttributeElement#1{\textcolor{red}{#1}}
+ \def\AttributeLabel#1{\Large\it #1}
+
+ \ArrayGrid{ArrayA}{4}{4}\hfill\ArrayGrid{ArrayB}{4}{4}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\vspace{5mm}
+\subsubsection{Another example of a structured dynamic diagram on a grid}
+
+ The preceding technique is in fact relevant for a lot of problems. Here we
+give another example about the drawing of linked lists (but do not fail to
+note that these ones have here no internal existence).
+
+\ifpstricks % If PSTricks is available
+\begin{CenterExample}
+ \makeatletter
+
+ \newpsstyle{LinkedListsArrowStyle}{linecolor=red,arrowscale=2} % /HLComment?Default arrow style;
+
+ /HLMacro?\def\LinkedListsDraw;{\@ifnextchar[\LinkedListsDraw@i{\LinkedListsDraw@i[]}}
+
+ /HLMacro?\def\LinkedListsDraw@i;[#1]#2#3{{%
+ \setkeys{psset}{#1}
+ \dataheight=#3
+ %
+ \pst@cnta=#3
+ \multiply\pst@cnta\tw@
+ \advance\pst@cnta\tw@
+ \pspicture(0,-#2)(\pst@cnta,0)
+ \multido{\iRow=1+1}{#2}{%
+ \rput(0,-\iRow){%
+ \psframe(1,1)
+ \psline[dimen=middle,style=LinkedListsArrowStyle]{->}(0.5,0.5)(2,0.5)}
+ \multido{\iColumn=1+1}{#3}{%
+ \checkLinkedListsTable(\iRow,\iColumn)%
+ \ifemptydata
+ \else
+ \pst@cnta=\iColumn
+ \advance\pst@cnta\@ne
+ \pst@cntb=\@ne
+ \checkLinkedListsTable(\iRow,\pst@cnta)%
+ \ifemptydata % /HLComment?We test if it is empty;
+ \else
+ \ifnum\multidocount=#3 % /HLComment?We test if it is the last one;
+ \else
+ \pst@cntb=\z@
+ \fi
+ \fi
+ %
+ \pst@cnta=\iColumn
+ \multiply\pst@cnta\tw@
+ \rput(\the\pst@cnta,-\iRow){%
+ \LinkedListsDraw@ii{\LinkedListsTable(\iRow,\iColumn)}{\the\pst@cntb}}
+ \fi}}
+ \endpspicture}}%}
+
+ /HLMacro?\def\LinkedListsDraw@ii;#1#2{{%
+ \rput(0,0.1){%
+ \psset{unit=0.8}
+ \psgrid[subgriddiv=0,gridlabels=0](2,1) % /HLComment?Element;
+ \rput(0.5,0.5){#1} % /HLComment?Label for this element;
+ \ifnum#2=\@ne
+ \psline(1,0)(2,1) % /HLComment?Mark of the end of the list;
+ \else
+ \psline[style=LinkedListsArrowStyle]{->}(1.5,0.5)(2.5,0.5) % /HLComment?Link to the next element;
+ \fi}}}
+
+ \makeatother
+
+ \newarray\LinkedListsTable
+ \readarray{/HLReverse?LinkedListsTable;}{%
+ 11&12&13&14&%
+ 21&&&&%
+ 31&32&33&&}
+
+ \LinkedListsDraw{3}{4}
+
+ \vspace{1cm}
+ \newpsstyle{LinkedListsArrowStyle}{linecolor=green,doubleline=true}
+
+ \readarray{/HLReverse?LinkedListsTable;}{%
+ a&&&&&%
+ A&B&C&D&E&%
+ 0&1&2&3&4&%
+ +&$\times$&&&&}
+
+ \LinkedListsDraw{4}{5}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\subsubsection{Management of heaps and linked lists}
+
+ Here we will demonstrate a really more complex usage, but very useful.
+In fact, if the \ArrayJobPackage{} package primarily allow to manage only
+arrays, it allow a lot more with some efforts. Above it, we can implement the
+common internal data structures frequently used in programming, like heaps,
+simple or double linked lists, trees, associative arrays, etc. Here we will
+show how to define macros to build and manage heaps and simple linked lists.
+
+\ifpstricks % If PSTricks is available
+\vspace{1cm} % Poor hack to force a page break...
+\begin{CenterExample}[baselinestretch=0.98]
+ \makeatletter
+
+ /HLMacro?\def\PstDebug;{\z@} % /HLComment?For debugging, set \def\PstDebug{1};
+
+ % /HLComment?Code for heaps management;
+ % /HLComment?-------------------------;
+
+ /HLMacro?\def\HeapMaxDepth;{100} % /HLComment?No more than 100 elements in the heap;
+
+ \newarray\Heap
+
+ % /HLComment?Add an element at top of the heap;
+ /HLMacro?\def\HeapPush;#1{%
+ \multido{\iElem=1+1}{\HeapMaxDepth}{%
+ \checkHeap(\iElem)%
+ \ifemptydata
+ \ifnum\PstDebug=\@ne\typeout{Push Heap(\iElem)=#1}\fi% /HLComment?Debug;
+ \Heap(\iElem)={#1}%
+ \multidostop
+ \fi}}
+
+ % /HLComment?Get (in the \cachedata macro) and delete the element at top of the heap;
+ /HLMacro?\def\HeapPop;{%
+ \Multido{\iElem=\HeapMaxDepth+-1}{\HeapMaxDepth}{%
+ \checkHeap(\iElem)%
+ \ifemptydata
+ \else
+ \ifnum\PstDebug=\@ne\typeout{Delete Heap(\iElem)=\cachedata}\fi% /HLComment?Debug;
+ \Heap(\iElem)={}%
+ \multidostop
+ \fi}}
+
+ % /HLComment?Print the current state of the heap;
+ /HLMacro?\def\HeapPrint;{%
+ \checkHeap(\@ne)%
+ \ifemptydata
+ \typeout{The heap is empty!}% /HLComment?Empty heap;
+ \else
+ \multido{\iElem=\HeapMaxDepth+-1}{\HeapMaxDepth}{%
+ \checkHeap(\iElem)%
+ \ifemptydata
+ \else
+ \typeout{Heap(\iElem)=\cachedata}%
+ \fi}
+ \fi
+ \typeout{}}
+
+ % /HLComment?Draw the current state of the heap;
+ /HLMacro?\def\HeapDraw;{%
+ % /HLComment?To compute the size of the picture;
+ \Multido{\iSize=0+1}{\HeapMaxDepth}{%
+ \checkHeap(\the\multidocount)%
+ \ifemptydata
+ \multidostop
+ \fi}
+ %
+ \ifnum\iSize=\z@
+ % /HLComment?Empty heap;
+ \typeout{The heap is empty!^^J}%
+ \else
+ \pspicture(1,\iSize)
+ \psgrid[subgriddiv=0,gridlabels=0](1,\iSize)
+ \multido{\iPos=0+1}{\HeapMaxDepth}{%
+ \checkHeap(\the\multidocount)%
+ \ifemptydata
+ \multidostop
+ \else
+ \rput(0.5,\iPos.5){\cachedata}
+ \fi}
+ \endpspicture%
+ \fi}
+
+ \makeatother
+
+ \psset{unit=1.5}\footnotesize
+
+ \HeapPush{Germany}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPush{France}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPush{Italy}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPush{Spain}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+ \hfill
+ \HeapPop\typeout{Popped element: `\cachedata'}\HeapPrint\HeapDraw
+\end{CenterExample}
+
+\begin{Example}[baselinestretch=0.95]
+ \makeatletter
+
+ /HLMacro?\def\PstDebug;{\z@}% /HLComment?For debugging, set \def\PstDebug{1};
+
+ % /HLComment?Code for linked lists management;
+ % /HLComment?--------------------------------;
+
+ /HLMacro?\def\LinkedListMaxDepth;{100}% /HLComment?No more than 100 elements in the list;
+
+ \newarray\LinkedList
+
+ \dataheight=2% /HLComment?Two cells by element: the content and the pointer;
+
+ % /HLComment?Add an element at the end of the list;
+ % /HLComment?In fact, we define it here as a simple heap, but the difference is that;
+ % /HLComment?we will be able to get and to delete any element in it;
+ /HLMacro?\def\LinkedListAdd;#1{%
+ \edef\@tempa{\@ne}% /HLComment?Pointer initialization;
+ \multido{\iElem=2+1}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the content of this element;
+ \ifemptydata
+ % /HLComment?No pointed element, so we will insert the new one here;
+ \LinkedList(\iElem,1)={#1}%
+ % /HLComment?We update the pointer for the last preceding element;
+ \expandarrayelementtrue% /HLComment?We must evaluate the content of the counter;
+ \LinkedList(\@tempa,2)={\iElem}%
+ \expandarrayelementfalse
+ \ifnum\PstDebug=\@ne
+ \typeout{Add LinkedList(\@tempa)->\iElem}% /HLComment?Debug;
+ \typeout{\space\space\space\space LinkedList(\iElem)=#1}% /HLComment?Debug;
+ \fi
+ \multidostop
+ \else
+ \edef\@tempa{\cachedata}%
+ \fi}}
+
+ % /HLComment?Get (in the \cachedata macro) the next element in the list;
+ /HLMacro?\def\LinkedListGetNext;#1{%
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \edef\@tempa{\@ne}%
+ \ifx\cachedata\empty
+ \else
+ \edef\@tempc{#1}%
+ \Multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempb{\@tempa}%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \ifx\cachedata\@tempc
+ % /HLComment?This is the element for which we want the next one: we got it pointer;
+ % /HLComment?to the next element in the list, then the content of it;
+ \checkLinkedList(\@tempa,2)%
+ \ifemptydata
+ \typeout{Element `#1' has no successor!^^J}%
+ \else
+ \checkLinkedList(\cachedata,1)%
+ \fi
+ \multidostop
+ \else
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ % /HLComment?We have reach the end of the list without finding the element;
+ \typeout{Element `#1' not found!^^J}%
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi
+ \fi}
+ \fi}
+
+ % /HLComment?Delete an element in the list (the code is very close to \LinkedListGetNext);
+ /HLMacro?\def\LinkedListDelete;#1{%
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \edef\@tempa{\@ne}%
+ \ifx\cachedata\empty
+ \else
+ \edef\@tempc{#1}%
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempb{\@tempa}%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \ifx\cachedata\@tempc
+ % /HLComment?This is the element to delete: we will update the pointer of;
+ % /HLComment?the preceding element to the value of the pointer of the deleted one;
+ \checkLinkedList(\@tempa,2)%
+ \expandarrayelementtrue
+ \LinkedList(\@tempb,2)={\cachedata}%
+ \expandarrayelementfalse
+ \ifnum\PstDebug=\@ne
+ \typeout{Delete LinkedList(\@tempa)=#1}% /HLComment?Debug;
+ \typeout{\space\space\space\space\space\space\space %
+ LinkedList(\@tempb)->\cachedata}% /HLComment?Debug;
+ \fi
+ \multidostop
+ \else
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ % /HLComment?We have reach the end of the list without finding the element;
+ \typeout{Element `#1' not found and so not deleted!^^J}%
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi
+ \fi}
+ \fi}
+
+ % /HLComment?Print the current state of the list;
+ /HLMacro?\def\LinkedListPrint;{%
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \ifx\cachedata\empty
+ % /HLComment?Empty list;
+ \typeout{The list is empty!}%
+ \else
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \typeout{LinkedList=\cachedata}%
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi}
+ \fi
+ \typeout{}}
+
+ % /HLComment?Draw the current state of the list;
+ /HLMacro?\def\LinkedListDraw;{{%
+ \psset{subgriddiv=0,gridlabels=0}
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \ifx\cachedata\empty
+ % /HLComment?Empty list;
+ \typeout{The list is empty!^^J}%
+ \else
+ % /HLComment?To compute the size of the picture;
+ \Multido{\iSize=3+3}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\cachedata,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ \multidostop
+ \fi}
+ %
+ \checkLinkedList(1,2)% /HLComment?We got the pointer for the first element;
+ \pspicture(\iSize,1.5)
+ \multido{\iPos=0+3}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% /HLComment?We got the pointed element;
+ \rput(\iPos,0){%
+ \psgrid(2,1)
+ \rput(0.5,0.5){\cachedata}
+ \ifnum\iPos=\z@
+ \else
+ \rput(-1.5,0.5){\psline[linecolor=red,arrowscale=2]{->}(1.5,0)}
+ \fi}
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer to the next element;
+ \ifemptydata
+ \rput(\iPos,0){\psline[linecolor=red](1,0)(2,1)} % /HLComment?End of the list;
+ \multidostop% /HLComment?No pointed element: end of the list;
+ \fi}
+ \endpspicture%
+ \fi}}
+
+ \makeatother
+
+ \psset{unit=1.5}
+
+ \LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{Germany}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{France}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{Italy}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListAdd{Spain}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListGetNext{France}\typeout{Next element after `France' is: `\cachedata'}%
+ \LinkedListGetNext{Germany}\typeout{Next element after `Germany is: `\cachedata'}%
+ \LinkedListGetNext{Spain}
+ \LinkedListGetNext{Unknown}
+
+ \LinkedListDelete{Unknown}
+
+ \LinkedListDelete{France}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{Germany}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{Spain}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{Italy}\LinkedListPrint\LinkedListDraw
+\end{Example}
+
+\makeatletter
+
+\def\PstDebug{\z@}% For debugging, set \def\PstDebug{1}
+
+\def\LinkedListMaxDepth{100}% No more than 100 elements in the heap
+
+\newarray\LinkedList
+
+\dataheight=2% Two cells by element: the content and the pointer
+
+% Delete an element in the list
+\def\LinkedListDelete#1{%
+\checkLinkedList(1,2)% We got the pointer for the first element
+\edef\@tempa{\@ne}%
+\ifx\cachedata\empty
+\else
+ \edef\@tempc{#1}%
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempb{\@tempa}%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% We got the pointed element
+ \ifx\cachedata\@tempc
+ % This is the element to delete: we will update the pointer of
+ % the preceding element to the value of the pointer of the deleted one
+ \checkLinkedList(\@tempa,2)%
+ \expandarrayelementtrue
+ \LinkedList(\@tempb,2)={\cachedata}%
+ \expandarrayelementfalse
+ \ifnum\PstDebug=\@ne
+ \typeout{Delete LinkedList(\@tempa)=#1}%Debug
+ \typeout{\space\space\space\space\space\space\space %
+ LinkedList(\@tempb)->\cachedata}%Debug
+ \fi
+ \multidostop
+ \else
+ \checkLinkedList(\@tempa,2)% We got the pointer to the next element
+ \ifemptydata
+ % We have reach the end of the list without finding the element
+ \typeout{Element `#1' not found and so not deleted!^^J}%
+ \multidostop% No pointed element: end of the list
+ \fi
+ \fi}
+\fi}
+
+% Print the current state of the list
+\def\LinkedListPrint{%
+\checkLinkedList(1,2)% We got the pointer for the first element
+\ifx\cachedata\empty
+ % Empty list
+ \typeout{The list is empty!}%
+\else
+ \multido{}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% We got the pointed element
+ \typeout{LinkedList=\cachedata}%
+ \checkLinkedList(\@tempa,2)% We got the pointer to the next element
+ \ifemptydata
+ \multidostop% No pointed element: end of the list
+ \fi}
+\fi
+\typeout{}}
+
+% Draw the current state of the list
+\def\LinkedListDraw{{%
+\psset{subgriddiv=0,gridlabels=0}
+\checkLinkedList(1,2)% We got the pointer for the first element
+\ifx\cachedata\empty
+ % Empty list
+ \typeout{The list is empty!^^J}%
+\else
+ % To compute the size of the picture
+ \Multido{\iSize=3+3}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\cachedata,2)% We got the pointer to the next element
+ \ifemptydata
+ \multidostop
+ \fi}
+ %
+ \checkLinkedList(1,2)% We got the pointer for the first element
+ \pspicture(\iSize,1.5)
+ \multido{\iPos=0+3}{\LinkedListMaxDepth}{%
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)% We got the pointed element
+ \rput(\iPos,0){%
+ \psgrid(2,1)
+ \rput(0.5,0.5){\cachedata}
+ \ifnum\iPos=\z@
+ \else
+ \rput(-1.5,0.5){\psline[linecolor=red,arrowscale=2]{->}(1.5,0)}
+ \fi}
+ \checkLinkedList(\@tempa,2)% We got the pointer to the next element
+ \ifemptydata
+ \rput(\iPos,0){\psline[linecolor=red](1,0)(2,1)} % End of the list
+ \multidostop% No pointed element: end of the list
+ \fi}
+ \endpspicture%
+\fi}}
+
+\makeatother
+
+% We clear the linked list
+\multido{\iElem=1+1}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\iElem,1)%
+ \ifemptydata
+ \else
+ \LinkedList(\iElem,1)={}%
+ \LinkedList(\iElem,2)={}%
+ \fi}
+
+\vspace{2mm}
+ We can write an extended version of the inclusion of an element, where we do
+not still store each element at the end of the list, but insert it at a
+special position. For instance, we can decide to use the list to sort the
+elements, inserting a new one at it sorted position. In the next example, we
+will manage integer numbers in this way (of course, we can do the same thing
+with arbitrary strings, but it would be more difficult to program in \TeX{},
+mainly if we want to be able to use accentuated letters).
+
+\vspace{2mm}
+\begin{Example}
+ \makeatletter
+
+ % /HLComment?Add an element at the end of the list, linked in it ordered place;
+ % /HLComment?(this version work only with contents as numbers);
+ /HLMacro?\def\LinkedListSortedAdd;#1{%
+ % /HLComment?Initializations;
+ \edef\@tempa{\@ne}%
+ \edef\@tempb{\@ne}%
+ \edef\@tempc{\z@}%
+ %
+ \multido{\iElem=2+1}{\LinkedListMaxDepth}{%
+ \checkLinkedList(\@tempa,2)% /HLComment?We got the pointer of this element;
+ \ifemptydata
+ % /HLComment?No pointed element, so we will insert the new one here;
+ \LinkedList(\iElem,1)={#1}%
+ % /HLComment?We update the pointer for the last element;
+ \expandarrayelementtrue
+ \LinkedList(\@tempb,2)={\iElem}%
+ \ifnum\PstDebug=\@ne
+ \typeout{Add LinkedList(\@tempb)->\iElem}% /HLComment?Debug;
+ \typeout{\space\space\space\space LinkedList(\iElem)=#1}% /HLComment?Debug;
+ \fi
+ % /HLComment?We update the pointer of the new element to the position;
+ % /HLComment?of the next greater one, if it exist;
+ \ifnum\@tempc=\z@
+ \else
+ \LinkedList(\iElem,2)={\@tempc}%
+ \ifnum\PstDebug=\@ne
+ \typeout{Update LinkedList(\iElem)->\@tempc}% /HLComment?Debug;
+ \fi
+ \fi
+ \expandarrayelementfalse
+ \multidostop
+ \else
+ \edef\@tempa{\cachedata}%
+ \checkLinkedList(\cachedata,1)%
+ \ifnum#1<\cachedata
+ \edef\@tempc{\@tempa}% /HLComment?New element less than this one;
+ \else
+ \edef\@tempb{\@tempa}% /HLComment?New element greater or equal than this one;
+ \fi
+ \fi}}
+
+ \makeatother
+
+ \LinkedListPrint
+
+ \LinkedListSortedAdd{732}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListSortedAdd{487}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListSortedAdd{718}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListSortedAdd{962}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{487}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{732}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{500}
+
+ \LinkedListDelete{962}\LinkedListPrint\LinkedListDraw
+
+ \LinkedListDelete{718}\LinkedListPrint\LinkedListDraw
+\end{Example}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\subsubsection{Associative arrays}
+
+ To finish, we will give a complete solution to a classical problem: to count
+the number of occurrences of the various letters in a sentence. For this, we
+will first build some macros to deal with \emph{associative} arrays, as they
+have been popularized by scripting languages like \texttt{AWK} and
+\texttt{Perl}.
+
+\begin{Example}
+ \makeatletter
+
+ % /HLComment?Internally, we use two "standard" arrays to define one associative array;
+ \newarray\AssociativeArray@Names
+ \newarray\AssociativeArray@Values
+
+ \newcount\AssociativeArrayNbValues
+ \AssociativeArrayNbValues=\z@
+
+ \newif\ifAssociativeArray@ElementFound
+
+ % /HLComment?To store one element;
+ /HLMacro?\def\AssociativeArray;(#1)=#2{%
+ \expandarrayelementtrue
+ \AssociativeArray@ElementFoundfalse
+ \edef\@tempa{#1}%
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % /HLComment?This element already exist: we replace it current value;
+ % /HLComment?\checkAssociativeArray@Values(\iValue)% Debug;
+ % /HLComment?\typeout{In #1, replace `\cachedata'\space by `#2'}% Debug;
+ \AssociativeArray@Values(\iValue)={#2}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+ \ifAssociativeArray@ElementFound
+ \else
+ % /HLComment?New element;
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={#1}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={#2}%
+ \fi}
+
+ % /HLComment?To get one element;
+ /HLMacro?\def\checkAssociativeArray;(#1){%
+ \edef\@tempa{#1}%
+ \edef\@tempb{999999}%
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % /HLComment?We have found it by name;
+ \edef\@tempb{\iValue}%
+ \multidostop
+ \fi}
+ % /HLComment?We have now to get it value;
+ \checkAssociativeArray@Values(\@tempb)}
+
+ % /HLComment?Simple macro to print all the associative array;
+ /HLMacro?\def\printAssociativeArray;{%
+ \multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \iValue: \BS\texttt{FirstNames(\cachedata)}=`\AssociativeArray@Values(\iValue)'\space}}
+
+ \makeatother
+
+ \let\FirstNames\AssociativeArray
+ \let\checkFirstNames\checkAssociativeArray
+ \let\printFirstNames\printAssociativeArray
+
+ \FirstNames(Crawford)={Joan}
+ \FirstNames(Tierney)={Gene}
+ \FirstNames(Lake)={Veronika}
+
+ \printFirstNames
+
+ \checkFirstNames(Lake)
+ \verb+\FirstNames(Lake)+=`\cachedata'
+
+ \checkFirstNames(Monroe)
+ \ifemptydata
+ \verb+\FirstNames(Monroe) undefined!+
+ \else
+ \verb+\FirstNames(Monroe)+=`\cachedata'
+ \fi
+\end{Example}
+
+\makeatletter
+
+% Internally, we use two "standard" arrays to define one associative array
+\newarray\AssociativeArray@Names
+\newarray\AssociativeArray@Values
+
+\newcount\AssociativeArrayNbValues
+\AssociativeArrayNbValues=\z@
+
+\newif\ifAssociativeArray@ElementFound
+
+% To store one element
+\def\AssociativeArray(#1)=#2{%
+\expandarrayelementtrue
+\AssociativeArray@ElementFoundfalse
+\edef\@tempa{#1}%
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % This element already exist: we replace it current value
+ % \checkAssociativeArray@Values(\iValue)% debug
+ % \typeout{In #1, replace `\cachedata'\space by `#2'}% Debug
+ \AssociativeArray@Values(\iValue)={#2}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+\ifAssociativeArray@ElementFound
+\else
+ % New element
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={#1}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={#2}%
+\fi}
+
+% To get one element
+\def\checkAssociativeArray(#1){%
+\edef\@tempa{#1}%
+\edef\@tempb{999999}%
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % We have found it by name
+ \edef\@tempb{\iValue}%
+ \multidostop
+ \fi}
+% We have now to get it value
+\checkAssociativeArray@Values(\@tempb)}
+
+% Simple macro to print all the associative array
+\def\printAssociativeArray{%
+\multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \iValue: \BS\texttt{FirstNames(\cachedata)}=`\AssociativeArray@Values(\iValue)'}}
+
+\makeatother
+
+\vspace{2mm}
+ Now, we can define the macros to read a sentence, to cut it letter by letter,
+to count the occurrences of each of them, and finally to draw a summary plot of
+the results.
+
+\makeatletter % Problem with the \ifpstricks conditional if not set...
+
+\ifpstricks % If PSTricks is available
+\begin{CenterExample}
+ \makeatletter
+
+ % /HLComment?A \PerChar style macro adapted from Juergen Schlegelmilch;
+ % /HLComment?(<schlegel@Informatik.Uni-Rostock.de> - posted on c.t.t. January 27, 1998);
+ /HLMacro?\def\PerChar;#1#2{\DoPerChar#1#2\@nil}
+
+ /HLMacro?\def\DoPerChar;#1#2#3\@nil{%
+ #1#2%
+ \edef\@tempa{#3}%
+ \ifx\@tempa\empty
+ \else
+ \DoPerChar#1#3\@nil
+ \fi}
+
+ % /HLComment?The action to do for each character: we increase the counter;
+ % /HLComment?for this character by one;
+ /HLMacro?\def\ActionPerChar;#1{% /HLComment?#1=character;
+ \checkAssociativeArray(#1)%
+ \ifemptydata
+ \@tempcnta=\@ne
+ \else
+ \@tempcnta=\cachedata
+ \advance\@tempcnta\@ne
+ \fi
+ \AssociativeArray(#1)={\the\@tempcnta}}
+
+ % /HLComment?To store in an associative array the number of occurrences by characters;
+ % /HLComment?(spaces are not counted);
+ /HLMacro?\def\StatSentence;#1{% /HLComment?#1=sentence;
+ \AssociativeArrayNbValues=\z@
+ \PerChar{\ActionPerChar}{#1}}
+
+ % /HLComment?To draw a plot of the number of occurrences of the characters of a sentence;
+ /HLMacro?\def\DrawOccurrences;#1{% /HLComment?#1=sentence;
+ \StatSentence{#1}
+ %
+ \pst@cnta=\AssociativeArrayNbValues
+ \advance\pst@cnta\@ne
+ %
+ % /HLComment?To know the maximum of the numbers;
+ \pst@cntb=\z@
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Values(\iValue)%
+ \ifnum\cachedata>\pst@cntb
+ \pst@cntb=\cachedata
+ \fi}
+ \advance\pst@cntb\@ne
+ %
+ % /HLComment?The drawing itself;
+ \pspicture(-0.5,-0.5)(\pst@cnta,\pst@cntb)
+ \psaxes[axesstyle=frame,labels=y](\pst@cnta,\pst@cntb)
+ \multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \Draw@OneOccurrence{\iValue}}
+ \endpspicture}
+
+ % /HLComment?To draw the value for one occurrence;
+ /HLMacro?\def\Draw@OneOccurrence;#1{% /HLComment?#1=Letter;
+ \checkAssociativeArray@Values(#1)%
+ \psdot(#1,\cachedata)
+ \rput[B](\iValue,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \let\Names\AssociativeArray
+ \let\checkNames\checkAssociativeArray
+
+ \psset{dotstyle=o,dotsize=0.4}
+
+ \DrawOccurrences{We are Wednesday}
+\end{CenterExample}
+
+\makeatletter
+
+%% A \PerChar style macro adapted from Juergen Schlegelmilch
+%% (<schlegel@Informatik.Uni-Rostock.de> - posted on c.t.t. Jan. 27, 1998)
+\def\PerChar#1#2{\DoPerChar#1#2\@nil}
+
+\def\DoPerChar#1#2#3\@nil{%
+#1#2%
+\edef\@tempa{#3}%
+\ifx\@tempa\empty
+\else
+ \DoPerChar#1#3\@nil
+\fi}
+
+% The action to do for each character: we increase the counter
+% for this character by one
+\def\ActionPerChar#1{% #1=character
+\checkAssociativeArray(#1)%
+\ifemptydata
+ \@tempcnta=\@ne
+\else
+ \@tempcnta=\cachedata
+ \advance\@tempcnta\@ne
+\fi
+\AssociativeArray(#1)={\the\@tempcnta}}
+
+% To store in an associative array the number of occurrences by characters
+% (spaces are not counted)
+\def\StatSentence#1{% #1=sentence
+\AssociativeArrayNbValues=\z@
+\PerChar{\ActionPerChar}{#1}}
+
+% To draw a plot of the number of occurrences of the characters of a sentence
+\def\DrawOccurrences#1{%
+\StatSentence{#1}
+%
+\pst@cnta=\AssociativeArrayNbValues
+\advance\pst@cnta\@ne
+%
+% To know the maximum of the numbers
+\pst@cntb=\z@
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Values(\iValue)%
+ \ifnum\cachedata>\pst@cntb
+ \pst@cntb=\cachedata
+ \fi}
+\advance\pst@cntb\@ne
+%
+% The drawing itself
+\pspicture(-0.5,-0.5)(\pst@cnta,\pst@cntb)
+ \psaxes[axesstyle=frame,labels=y](\pst@cnta,\pst@cntb)
+ \multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \Draw@OneOccurrence{\iValue}}
+\endpspicture}
+
+% To draw the value for one occurrence
+\def\Draw@OneOccurrence#1{%
+\checkAssociativeArray@Values(#1)%
+\psdot(#1,\cachedata)
+\rput[B](\iValue,-0.5){\AssociativeArray@Names(#1)}}
+
+\let\Names\AssociativeArray
+\let\checkNames\checkAssociativeArray
+
+\psset{dotstyle=o,dotsize=0.4}
+
+\makeatother
+
+\vspace{8mm} % Poor hack to force a page break...
+ We will now write another version, using another array to store indexes,
+to allow us to sort the letters found in the sentence read.
+
+\begin{CenterExample}
+ \makeatletter
+
+ % /HLComment?To get in #2 the ASCII code of the #1 character;
+ /HLMacro?\def\Character@AsciiCode;#1#2{\chardef#2=`#1\relax}
+
+ % /HLComment?A new "standard" array to store the sorted indexes;
+ \newarray\AssociativeArray@Indexes
+
+ % /HLComment?A simple macro to print the array of indexes (for debugging);
+ /HLMacro?\def\PrintIndexes;{%
+ \multido{\iIndexes=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Indexes(\iIndexes)%
+ \BS\texttt{indexes(\iIndexes)}=`\cachedata'\space}}
+
+ % /HLComment?We redefine the macro to store an element in the associative array,;
+ % /HLComment?to allow to sort it elements, using an additional array of indexes;
+ /HLMacro?\def\AssociativeArray;(#1)=#2{%
+ \expandarrayelementtrue
+ \AssociativeArray@ElementFoundfalse
+ \edef\@tempa{#1}%
+ \edef\@tempb{#2}%
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % /HLComment?This element already exist: we replace it current value;
+ % /HLComment?\checkAssociativeArray@Values(\iValue)% Debug;
+ % /HLComment?\typeout{In #1, replace `\cachedata'\space by `#2'}% Debug;
+ \AssociativeArray@Values(\iValue)={\@tempb}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+ \ifAssociativeArray@ElementFound
+ \else
+ % /HLComment?New element: we must insert it at it sorted position;
+ \@tempcnta=\@ne
+ \expandafter\Character@AsciiCode\@tempa\@tempx
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \expandafter\Character@AsciiCode\cachedata\@tempy
+ \ifnum\@tempx<\@tempy
+ % /HLComment?The new element must be before this one: we will exchange their values;
+ \checkAssociativeArray@Indexes(\iValue)%
+ \@tempcntb=\cachedata
+ \advance\@tempcntb\@ne
+ \AssociativeArray@Indexes(\iValue)={\the\@tempcntb}%
+ \else
+ \advance\@tempcnta\@ne
+ \fi}
+ %
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={\@tempa}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={\@tempb}%
+ \AssociativeArray@Indexes(\AssociativeArrayNbValues)={\the\@tempcnta}%
+ \fi}
+
+ % /HLComment?We change the way we draw each number of occurrences;
+ /HLMacro?\def\Draw@OneOccurrence;#1{%
+ \checkAssociativeArray@Indexes(#1)%
+ \pst@cnta=\cachedata
+ \checkAssociativeArray@Values(#1)%
+ \psdot(\the\pst@cnta,\cachedata)
+ \rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \DrawOccurrences{We are Wednesday}
+
+ \PrintIndexes
+\end{CenterExample}
+
+\makeatletter
+
+% To get in #2 the ASCII code of the #1 character
+\def\Character@AsciiCode#1#2{\chardef#2=`#1\relax}%
+
+% A new "standard" array to store the sorted indexes
+\newarray\AssociativeArray@Indexes
+
+% We redefine the macro to store an element in the associative array,
+% to allow to sort it elements, using an additional array of indexes
+\def\AssociativeArray(#1)=#2{%
+\expandarrayelementtrue
+\AssociativeArray@ElementFoundfalse
+\edef\@tempa{#1}%
+\edef\@tempb{#2}%
+\Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \ifx\@tempa\cachedata
+ % This element already exist: we replace it current value
+ % \checkAssociativeArray@Values(\iValue)% Debug
+ % \typeout{In #1, replace `\cachedata'\space by `#2'}% Debug
+ \AssociativeArray@Values(\iValue)={\@tempb}%
+ \AssociativeArray@ElementFoundtrue
+ \multidostop
+ \fi}
+\ifAssociativeArray@ElementFound
+\else
+ % New element: we must insert it at it sorted position
+ \@tempcnta=\@ne
+ \expandafter\Character@AsciiCode\@tempa\@tempx
+ \Multido{\iValue=\@ne+\@ne}{\AssociativeArrayNbValues}{%
+ \checkAssociativeArray@Names(\iValue)%
+ \expandafter\Character@AsciiCode\cachedata\@tempy
+ \ifnum\@tempx<\@tempy
+ % The new element must be before this one: we will exchange their values
+ \checkAssociativeArray@Indexes(\iValue)%
+ \@tempcntb=\cachedata
+ \advance\@tempcntb\@ne
+ \AssociativeArray@Indexes(\iValue)={\the\@tempcntb}%
+ \else
+ \advance\@tempcnta\@ne
+ \fi}
+ %
+ \advance\AssociativeArrayNbValues\@ne
+ \AssociativeArray@Names(\AssociativeArrayNbValues)={\@tempa}%
+ \AssociativeArray@Values(\AssociativeArrayNbValues)={\@tempb}%
+ \AssociativeArray@Indexes(\AssociativeArrayNbValues)={\the\@tempcnta}%
+\fi}
+
+% We change the way we draw each number of occurrences
+\def\Draw@OneOccurrence#1{%
+\checkAssociativeArray@Indexes(#1)%
+\pst@cnta=\cachedata
+\checkAssociativeArray@Values(#1)%
+\psdot(\the\pst@cnta,\cachedata)
+\rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+\makeatother
+
+\begin{CenterExample}
+ \DrawOccurrences{Tuesday 8 February}
+\end{CenterExample}
+
+\noindent Now, we can easily redefine the internal macro which plot each
+occurrence, to obtain various kinds of graphics:
+
+\begin{CenterExample}
+ \makeatletter
+
+ /HLMacro?\def\Draw@OneOccurrence;#1{%
+ \checkAssociativeArray@Indexes(#1)%
+ \pst@cnta=\cachedata
+ \checkAssociativeArray@Values(#1)
+ \psline[linestyle=dotted](\the\pst@cnta,0)(\the\pst@cnta,\cachedata)
+ \psdot(\the\pst@cnta,\cachedata)
+ \rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \psset{xunit=0.5,dotstyle=*,dotsize=0.3}
+ \DrawOccurrences{I do not believe that it can be correct}
+\end{CenterExample}
+
+\begin{CenterExample}
+ \makeatletter
+
+ \SpecialCoor
+
+ /HLMacro?\def\Draw@OneOccurrence;#1{%
+ \checkAssociativeArray@Indexes(#1)%
+ \pst@cnta=\cachedata
+ \checkAssociativeArray@Values(#1)%
+ \pspolygon*[linecolor=red](! \the\pst@cnta\space 0.3 sub 0)
+ (! \the\pst@cnta\space 0.3 sub \cachedata)
+ (! \the\pst@cnta\space 0.3 add \cachedata)
+ (! \the\pst@cnta\space 0.3 add 0)
+ \rput[B](\the\pst@cnta,-0.5){\AssociativeArray@Names(#1)}}
+
+ \makeatother
+
+ \psset{xunit=0.5,ticks=y}
+ \DrawOccurrences{I don't know a better solution than this one}
+\end{CenterExample}
+\else
+ \PSTricksExampleNotShown
+\fi % End \pstrickstrue
+
+\section{Thanks}
+
+ I would like to thank Rolf Niepraschk \verb+<niepraschk@ptb.de>+ to have
+carefully read a preliminary version of this document and to have sent me
+several good advices to clarify and improve some points.
+
+\begin{thebibliography}{9}
+ \bibitem{SVB93} Stephan von \textsc{Bechtolsheim}, \emph{\TeX{} in
+ Practice}, four volumes, Springer-Verlag, New York, 1993 (see also
+ \url{CTAN: macros/tip/arraymac.tip}).
+ \bibitem{REPEAT} \RepeatPackage, by Victor \textsc{Eijkhout}, University of
+ Illinois, Urbana-Champaign, USA, \url{CTAN: macros/generic/eijkhout/repeat}
+ \bibitem{EG98} Philippe \textsc{Esperet} and Denis \textsc{Girou},
+ \emph{Coloriage du pavage dit de Truchet}, Cahiers GUTenberg, Number~31,
+ December 98, pages 5-18, in french (see
+ \url{http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPS/31-girou.ps.gz}).
+ \bibitem{ALDRATEX} \AlDraTeXPackage, by Eitan M. \textsc{Gurari}, Ohio State
+ University, Columbus, USA, \url{CTAN: graphics/dratex} (see also
+ \url{http://www.cis.ohio-state.edu/~gurari/systems.html}).
+ \bibitem{Gur94} Eitan M. \textsc{Gurari}, \emph{\TeX{} and \LaTeX: Drawing
+ and Literate Programming}, McGraw-Hill, New-York, 1994.
+ \bibitem{METAPOST} \MetaPostPackage, by John D. \textsc{Hobby}, AT\&T Bell
+ Laboratories, USA, \url{CTAN: graphics/metapost} (see also
+ \url{http://cm.bell-labs.com/who/hobby/MetaPost.html}).
+ \bibitem{FORMLETT} \FormLettPackage, by Zhuhan \textsc{Jiang}, University of
+ New England, Armidale, Australia, \url{CTAN: macros/generic/formlett.sty} (see
+ also \url{http://maths.une.edu.au/~zhuhan/util.html#computer}).
+ \bibitem{MULTIDO} \MultiDoPackage, by Timothy van \textsc{Zandt}, INSEAD,
+ Fontainebleau, France, \url{CTAN: macros/generic/multido}
+ \bibitem{PSTRICKS} \PSTricksPackage, by Timothy van \textsc{Zandt}, INSEAD,
+ Fontainebleau, France, \url{CTAN: graphics/pstricks} (see also
+ \url{http://www.tug.org/applications/PSTricks}).
+\end{thebibliography}
+
+\end{document}
diff --git a/macros/generic/autoaligne/README b/macros/generic/autoaligne/README
new file mode 100644
index 0000000000..aeb7f9bdae
--- /dev/null
+++ b/macros/generic/autoaligne/README
@@ -0,0 +1,31 @@
+___________________________________
+
+ L'extension
+ autoaligne
+
+ v1.4
+
+ 05/11/2018
+___________________________________
+
+Auteur : Christian Tellechea
+Mainteneur: Christian Tellechea
+Courriel : unbonpetit@netc.fr (CT)
+Suivi bug : https://framagit.org/unbonpetit/autoaligne/issues
+D\'epot : https://framagit.org/unbonpetit/autoaligne/tree/master
+Licence : Publié sous la licence « LaTeX Project Public License »
+ v1.3c ou post\'erieure, voir
+
+ http://www.latex-project.org/lppl.txt
+
+Commentaires, signalements de bugs et suggestions sont les bienvenus
+
+----------------------------------------------------------------------
+
+Cette extension permet d'aligner les termes et les membres entre
+des lignes contenant des expressions math\'ematiques.
+
+----------------------------------------------------------------------
+
+This package allows to align terms and members between lines
+containing math expressions.
diff --git a/macros/generic/autoaligne/autoaligne-fr.pdf b/macros/generic/autoaligne/autoaligne-fr.pdf
new file mode 100644
index 0000000000..baae288385
--- /dev/null
+++ b/macros/generic/autoaligne/autoaligne-fr.pdf
Binary files differ
diff --git a/macros/generic/autoaligne/autoaligne-fr.tex b/macros/generic/autoaligne/autoaligne-fr.tex
new file mode 100644
index 0000000000..9c9370075a
--- /dev/null
+++ b/macros/generic/autoaligne/autoaligne-fr.tex
@@ -0,0 +1,266 @@
+% Ceci est la documentation du package "autoaligne"
+%
+% Fichier compilé avec pdflatex
+\documentclass[french,a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{libertine}\usepackage[italic]{mathastext}
+\usepackage[scaled=0.8]{luximono}
+\usepackage{autoaligne,babel}
+\usepackage[bottom]{footmisc}
+\usepackage[margin=3cm]{geometry}
+\usepackage{fancybox,xcolor,hyperref}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\makeatletter
+\long\def\defactive#1#2{\catcode`#1=13 \begingroup\lccode`\~`#1 \lowercase{\endgroup\long\def~{#2}}}
+\newcommand\disable@lig[1]{\defactive#1{\leavevmode\kern\z@\string#1}}
+\def\code{\expandafter\code@i\string}
+\def\code@i#1{%
+ \begingroup
+ \par\nobreak\medskip\parindent0pt
+ \leftskip.1\linewidth
+ \defactive\^^I{\leavevmode\space\space\space\space}%
+ \defactive\<{\begingroup$\langle$\itshape}%
+ \defactive\>{$\rangle$\endgroup}%
+ \let\do\@makeother \dospecials
+ \ttfamily\small
+ \obeylines\obeyspaces
+ \def\code@ii##1#1{##1\par\medbreak\endgroup}%
+ \code@ii
+}
+\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
+
+\newcommand\exemple[1][60]{%
+ \par\nobreak\vskip5pt \noindent
+ \def\part@coeff{#1}%
+ \relax\leavevmode\null
+ \begingroup
+ \let\do\@makeother\dospecials
+ \defactive\ {\space}%
+ \defactive\^^M{\par\leavevmode}%
+ \defactive\^^I{\leavevmode\space\space\space\space}%
+ \@makeother:\disable@lig,\disable@lig-%
+ \exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+ \def\@tempa##1#1{%
+ \xdef\left@content{##1}%
+ \endgroup
+ \begingroup
+ \fboxsep1pt \fboxrule 0.5pt
+ \fbox{%
+ \parbox[c]{\dimexpr0.\part@coeff\linewidth-\fboxsep-\fboxrule}{%
+ \vskip5pt
+ \ttfamily\footnotesize\left@content
+ \vskip5pt
+ }%
+ \parbox[c]{\dimexpr\linewidth-0.\part@coeff\linewidth-\fboxsep-\fboxrule}{%
+ \vskip5pt
+ \normalfont\footnotesize\noindent\newlinechar`\^^M \everyeof{\noexpand}%
+ \scantokens{##1}%
+ \vskip5pt
+ }%
+ }%
+ \vskip7.5pt\relax
+ \endgroup
+ }%
+ \@tempa
+}
+
+\def\exemple@@@{%
+
+}
+
+\begingroup
+\catcode`\<13 \catcode`\>13
+\gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+\def\longfraadate@i#1/#2/#3\@nil{\number#3\relax\space\ifcase #2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\edef\longfraadate{\expandafter\longfraadate@i\aadate\@nil}
+\makeatother
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \renewcommand\thefootnote{\fnsymbol{footnote}}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries L'extension\par \Huge \aanom\par}
+ \bigbreak
+ v\aaversion
+ \smallbreak
+ \longfraadate
+ \vskip1.5cm
+ {Christian \bsc{Tellechea}\footnote{\href{mailto:unbonpetit@netc.fr}{unbonpetit@netc.fr}}}
+ \par
+ \endgroup
+ \vskip2cm
+ \leftskip=.2\linewidth \rightskip=.2\linewidth \small
+ Cette petite extension permet d'aligner les uns au-dessous des autres les termes et les signes d'égalité dans des expressions mathématiques s'étendant sur plusieurs lignes.
+\end{titlepage}
+\parskip=5ptplus0.5ptminus0.5pt\relax
+\def\listofitems{\textsf\loiname}
+\def\aa{\textsf\aanom}
+\section{Avant propos}
+C'est à force de voir, aussi bien sur \href{http://tex.stackexchange.com/}{\texttt{tex.stackexchange}} que dans ma boite \href{mailto:unbonpetit@netc.fr}{email}, des questions concernant l'extension \href{https://www.ctan.org/pkg/systeme}{\texttt{systeme}} que j'ai décidé d'écrire une extension à la fois plus générale et plus simple que ne l'est \texttt{systeme}. En effet trop de ces questions ont pour but de faire réaliser à \texttt{systeme} des choses pour lesquelles elle n'est pas conçue !
+
+À l'aide de l'extension \href{https://www.ctan.org/pkg/listofitems}{\listofitems}, coder \aa{} deviendrait (presque) une formalité tant les choses tendent à devenir plus simples.
+
+Ayant constaté que beaucoup de non francophones ne semblent en rien gênés que le manuel de \texttt{systeme} soit rédigé uniquement en français, détestant pour ma part traduire le français vers l'anglais ce qui s'apparente à un calvaire et enfin, voulant à tout prix défendre l'existence du français face au globbish dans la sphère \TeX/\LaTeX{} et ailleurs, j'ai voulu que cette extension soit 100\% en français et qu'elle le reste ! Même dans le code, les noms des macros sont en français ce qui, une fois l'habitude prise, est fort agréable.
+\bigbreak
+
+Cette extension requiert l'extension \listofitems{} dans sa version 1.1 ou supérieur, doit être utilisée avec un moteur \eTeX, et doit être appelée sous (pdf)(Xe)(lua)\LaTeX{} par
+\code|\usepackage{autoaligne}|
+
+et sous (pdf)(Xe)(lua)\TeX{} par
+\code|\input autoaligne.tex|
+
+\section{Mode d'emploi}
+\paragraph{La macro \texttt{\char`\\autoaligne}}
+Cette macro attend un argument obligatoire entre accolades contenant les lignes qui sont des expressions où l'alignement automatique doit entrer en vigueur.
+
+Chaque ligne est séparée de sa voisine par \og\verb|\\|\fg. Dans chaque ligne, on peut trouver autant de membres que l'on souhaite, séparés les uns des autres par \og\verb|=|\fg. Dans ces membres peuvent se trouver autant de termes que nécessaire, chacun séparé de son voisin par \og\verb|+|\fg{} ou \og\verb|-|\fg. Pour choisir d'autres séparateurs, voir page~\pageref{choix.separateurs}.
+
+La macro \verb|\autoaligne| va bâtir un alignement de type \verb|\halign| dans lequel chaque terme et chaque signe est contenu dans une colonne. Toutes les colonnes sont composées en mode mathématique. Visuellement, le résultat se traduit par des termes et des signes alignés les uns au-dessous des autres comme on peut le constater dans cet exemple simple :
+\exemple|\autoaligne{x-3y+z=2-i\\5x+y-6z=1+5i\\-x+y-z=-3+i}|
+
+Lorsqu'un membre commence par \og\verb/-/\fg, le signe fait partie prenante du terme et n'est pas compris comme un séparateur entre termes. On peut le constater dans les deux membre de la dernière ligne.
+
+\paragraph{Termes vides}
+Les signes \og\verb|+|\fg{} doivent être utilisés pour insérer des termes vides. Il est déconseillé de se servir du signe \og\verb|-|\fg{}.
+
+\exemple/\autoaligne{x=a++c\\+y=+b-c\\++z=+-4c}/
+
+On peut noter deux choses :
+\begin{enumerate}
+ \item les signes \og\verb|+|\fg{} devant les termes vides ou devant le premier terme non vide ne sont pas affichés ;
+ \item lorsqu'une colonne ne contient que des signes non affichés comme c'est le cas dans le membre de gauche, l'encombrement horizontal de ces signes est pris en compte.
+\end{enumerate}
+
+Lorsqu'un terme négatif doit apparaitre en deuxième position après un terme vide, il \emph{faut} meubler ce terme vide avec un contenu non affichable comme \og\verb|{}|\fg, \og\verb|\relax|\fg{} ou \og\verb|\null|\fg{}. C'est, je pense, la seule situation où \aa{} conserve une ambiguïté qui demande, pour être levée, un petit effort de la part de l'utilisateur :
+
+\exemple/\autoaligne{a-b={}-2i\\a+2b=1+i}/
+
+\paragraph{Composition des termes}
+Par défaut, chaque terme est composé au fer à droite comme on le constate sur cet exemple :
+
+\exemple/\autoaligne{a+\sqrt2b=0\\a+b=10\sqrt2}/
+
+L'argument optionnel de \verb|\autoaligne| permet de changer ce paramètre de composition. Si l'on souhaite spéficier ce paramètre globalement pour \emph{tous} les membres, il faut écrire \verb|*<lettre>| où la \verb|<lettre>| est \og\texttt c\fg{} pour centré, \og\texttt d\fg{} pour droite et \og\texttt g\fg{} pour gauche. Toute autre lettre provoquera un message d'erreur et \og\texttt d\fg{} sera alors prise par défaut.
+
+Voici l'exemple ci-dessus repris avec un paramètre optionnel global \og\verb|*g|\fg{} :
+
+\exemple/\autoaligne[*g]{a+\sqrt2b=0\\a+b=10\sqrt2}/
+
+Pour spécifier le paramètre pour chaque membre, il faut écrire dans l'argument optionnel autant de \verb|<lettres>| qu'il y a de membres dans l'alignement. Si l'on écrit plus de lettres qu'il y a de membres, les lettres en trop seront ignorées. S'il manque des lettres, un message d'erreur sera émis et la lettre \og\verb|d|\fg{} sera prise par défaut.
+
+Voici l'exemple avec, semble-t-il, le meilleur compromis ici, c'est-à-dire \og\verb|d|\fg{} pour le 1\ier{} membre et \og\verb|g|\fg{} pour le second :
+
+\exemple/\autoaligne[dg]{a+\sqrt2b=0\\a+b=10\sqrt2}/
+
+Pour contrarier l'alignement pour un seul terme dans une seule ligne, il est toujours possible de placer convenablement un (ou plusieurs) \verb|\hfill| dans ce terme.
+
+\paragraph{Échappement de \texttt+ et \texttt-}
+Pour écrire un signe \og\texttt+\fg{} ou \og\texttt-\fg{} sans qu'il ne soit interprété comme un délimiteur de terme, il faut employer les macros \verb|\+| ou \verb|\-| :
+
+\exemple/\autoaligne{(1\+a)x+a^2y=a\\-2ax+(1\-a)y=2-a}/
+
+\paragraph{Combien de membres ?}
+Autant que l'on veut !
+
+\exemple/\autoaligne{a+b=1+2+3+4=++z=\alpha\\+x=++10==3\\=1=i+j-z}/
+
+Si un membre est vide (comme celui précédant le 3), le signe d'égalité qui le précède n'est pas affiché par défaut. Pour changer ce comportement, il faut écrire \verb|\egaldevantmembrevide=<nombre>|. Si le \verb|<nombre>| (entier sur 8 bits positif ou nul) vaut autre chose que 0, le signe \verb|=| sera affiché devant un membre vide.
+
+\paragraph{Augmenter l'espacement vertical}
+Le coefficient défini par \verb|\aavcoeff{<coeff>}| permet de modifier l'espacement vertical entre les lignes en multipliant la valeur de \verb|\baselineskip| par le \verb|<coeff>|.
+
+\exemple/Normal \autoaligne{a+2b=1\\a-b=2} \qquad
+\aavcoeff{1.75}étendu \autoaligne{a+2b=1\\a-b=2}/
+
+\paragraph{Position verticale de l'alignement}
+La macro \verb|\autoaligne| admet un autre argument optionnel entre parenthèses qui spécifie quelle sera la position verticale de l'alignement créé par rapport à la ligne de base. Cet argument est une \verb|<lettre>| qui vaut \og\verb|c|\fg, \og\verb|h|\fg{} ou \og\verb|b|\fg{} pour que la ligne de base de l'alignement soit au centre de celui-ci, sur la ligne du haut ou sur celle du bas. La position centrée est celle par défaut. Lorsque les deux arguments optionnels sont présents (celui entre crochets et celui entre parenthèses), l'ordre des arguments optionnels \emph{est sans importance}, \verb|[<consigne>](<lettre>)| est accepté tout comme \verb|(<lettre>)[<consigne>]|.
+
+\exemple/Alignement c :
+\autoaligne(c){4=1+1+1+1\\=1+1+2\\=2+2\\=3+1}\medbreak
+
+Alignement h :
+\autoaligne(h){4=1+1+1+1\\=1+1+2\\=2+2\\=3+1}\medbreak
+
+Alignement b :
+\autoaligne(b){4=1+1+1+1\\=1+1+2\\=2+2\\=3+1}/
+
+\paragraph{Choix des séparateurs}\label{choix.separateurs}
+Depuis la version 1.2, il est possible de choisir les séparateurs qui sont par défaut \og\verb|\\|\fg{} pour le changement de ligne, \og\verb|=|\fg{} pour le séparateur entre membres et \og\verb/+||-/\fg{} pour le séparateur entre termes.
+
+La macro
+
+\code|\definirseparateurs{<sep ligne>}{<sep membres>}{<sep termes>}|
+
+permet de les définir à sa convenance selon les contraintes suivantes:
+
+\begin{enumerate}
+ \item le \verb|<sep ligne>| doit être défini, c'est-à-dire qu'il ne peut pas être vide;
+ \item \verb|<sep membres>| et \verb|<sep termes>| ne peuvent pas être vides tous les deux, auquel cas, \og\verb|=|\fg{} et \og\verb/+||-/\fg{} sont pris par défaut;
+ \item un des deux séparateurs \verb|<sep membres>| ou \verb|<sep termes>| peut être vide, ce qui signifie que l'alignement ne tiendra compte que de deux séparateurs.
+\end{enumerate}
+
+Voici un exemple où seulement deux séparateurs sont définis :
+
+\exemple/Un calcul :
+\definirseparateurs{\\}{+||-}{}
+\autoaligne[*c](h){15+2\times3-4\times5\\
+15+6-20\\
+21+-20\\
+1}/
+
+\paragraph{Choix des espaces additionnels}
+Si l'on tente de créer une macro \verb|\determinant| qui affiche un déterminant de matrice dont les éléments sont séparés par \og\verb|\\|\fg{} et \og\verb*/ /\fg{}, on constate que le séparateur \og\verb*/ /\fg{}, composé en mode mathématique dans une colonne, est ignoré ce qui se traduit une colonne de largeur nulle conduisant à des espacement incorrects.
+
+\exemple/\def\determinant#1{\begingroup
+ \definirseparateurs{\\}{ }{}%
+ \hbox{$\left|\autoaligne[*c]{#1}\right|$}%
+ \endgroup
+}
+Un déterminant \determinant{a -b 0\\b 0 a\\0 -a -b}/
+
+La macro
+
+\code|\definirespacements{<espace membres>}{<espace termes>}|
+
+définit les espaces placées \emph{de part et d'autre} de chaque séparateur de membres ou de termes. Ces deux espaces sont nulles par défaut, mais deviennent nécessaires dans l'exemple ci-dessus :
+
+\exemple/\def\determinant#1{\begingroup
+ \definirseparateurs{\\}{ }{}%
+ \definirespacements{.75em}{}%
+ \hbox{$\left|\autoaligne[*c]{#1}\right|$}%
+ \endgroup
+}
+Un déterminant \determinant{a -b 0\\b 0 a\\0 -a -b}/
+
+\paragraph{Choix des espacements autour de l'alignement}
+L'espacement autour de l'alignement lui-même est nul par défaut, ce qui se traduit par des traits verticaux un peu trop proches de la matrice dans l'exemple ci-dessus.
+
+La macro \verb/\definirespacements/ admet un argument optionnel entre crochets de la forme
+
+\code|[<ressort 1>,<ressort 2>]|
+
+où \verb|<ressort 1>| est le ressort inséré avant l'alignement et \verb|<ressort 2>| celui inséré après.
+
+\exemple/\def\determinant#1{\begingroup
+ \definirseparateurs{\\}{ }{}%
+ \definirespacements[3pt,3pt]{.75em}{}%
+ \hbox{$\left|\autoaligne[*c]{#1}\right|$}%
+ \endgroup
+}
+Un déterminant \determinant{a -b 0\\b 0 a\\0 -a -b}/
+
+Si \verb|<ressort 1>| est vide, aucun ressort n'est inséré via \verb|\hskip|. Il en est de même avec \verb|<ressort 2>|. Les valeurs de ces ressorts sont vides par défaut, ce qui signifie qu'aucun ressort n'est inséré avant ou après les alignements créés.
+\end{document} \ No newline at end of file
diff --git a/macros/generic/autoaligne/autoaligne.sty b/macros/generic/autoaligne/autoaligne.sty
new file mode 100644
index 0000000000..891aed5515
--- /dev/null
+++ b/macros/generic/autoaligne/autoaligne.sty
@@ -0,0 +1,7 @@
+\input autoaligne.tex\relax
+\expandafter\def\csname aa_corrige_baselineskip\endcsname{% si \autoaligne est appelé dans un tabular où \baselineskip est nul :
+ \ifdim\baselineskip=0pt \baselineskip\normalbaselineskip\fi
+}
+\expandafter\def\csname aa_erreur\endcsname#1{\PackageError\aanom{#1}{Read the manual}}% pour LaTeX
+\ProvidesPackage\aanom[\aadate\space v\aaversion\space Aligne les termes sur plusieurs lignes (CT)]
+\endinput \ No newline at end of file
diff --git a/macros/generic/autoaligne/autoaligne.tex b/macros/generic/autoaligne/autoaligne.tex
new file mode 100644
index 0000000000..286cb7be89
--- /dev/null
+++ b/macros/generic/autoaligne/autoaligne.tex
@@ -0,0 +1,328 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code TeX de l'extension "autoaligne"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\aanom {autoaligne} %
+\def\aaversion {1.4} %
+% %
+\def\aadate {2018/11/05} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% Cet ensemble peut être distribué et/ou modifié selon les
+% conditions de la licence « LaTeX Project Public License », en version
+% 1.3c ou toute autre version ultérieure.
+% La dernière version de cette licence est disponible à
+%
+% http://www.latex-project.org/lppl.txt
+%
+% --------------------------------------------------------------------
+% Cet ensemble a le statut de maintenance LPPL « maintenu ».
+%
+% Le mainteneur actuel de cet ensemble est Christian Tellechea
+% email : unbonpetit@netc.fr
+% Copyright : Christian Tellechea 2016-2018
+% Suivi bugs : https://framagit.org/unbonpetit/autoaligne/issues
+% Dépôt : https://framagit.org/unbonpetit/autoaligne/tree/master
+% CTAN URL : https://ctan.org/pkg/autoaligne
+% --------------------------------------------------------------------
+% L'extension autoaligne est composée des 5 fichiers suivants :
+% - code : autoaligne (.tex et .sty)
+% - manuel en francais : autoaligne-fr (.tex et .pdf)
+% - fichier lisezmoi : README
+% --------------------------------------------------------------------
+
+\expandafter\edef\csname aa_restaure_catcode\endcsname{\catcode\number`\_=\number\catcode`\_\relax}
+\catcode`\_11
+\def\aa_listofitems_version_mini{1.1}
+
+\begingroup
+ \edef\__tempa{\meaning\eTeXversion}\edef\__tempb{\string\eTeXversion}%
+ \ifx\__tempa\__tempb\endgroup
+ \else\endgroup
+ \aa_erreur{Vous n'utilisez pas un moteur eTeX, \aanom\space ne peut donc pas fonctionner}%
+ \expandafter\aa_restaure_catcode\expandafter\endinput
+ \fi
+
+\begingroup
+\unless\ifdefined\loiname
+ \def\__tempa{\endgroup\input listofitems.tex\relax}%
+ \expandafter\__tempa
+\fi
+
+\ifdim\loiver pt<\aa_listofitems_version_mini pt
+ \aa_erreur{\loiname\space est en version v\loiver\space et \aanom\space requiert la v\aa_listofitems_version_mini\space ou plus}%
+ \expandafter\aa_restaure_catcode\expandafter\endinput
+\fi
+
+\def\aa_erreur#1{\errmessage{Package \aanom\space Error: #1^^J}}
+\let\aa_sep_terme_vide\relax
+\let\aa_sep_membre_vide\relax
+\def\aa_compose_en_mode_math#1{$\relax#1$}
+\def\aa_devdev_arg#1{\loi_exparg{\loi_exparg{#1}}}
+\def\aavcoeff#{\def\aa_v_coeff}
+\newtoks\aa_liste_tokens
+\def\aa_ajoute_au_toks#1{\aa_liste_tokens\expandafter{\the\aa_liste_tokens#1}}
+\def\aa_developpe_et_ajoute_au_toks#1{\loi_exparg\aa_ajoute_au_toks{#1}}
+\def\egaldevantmembrevide{\chardef\aa_egal_devant_membre_vide}
+\egaldevantmembrevide=0% pas de signe = devant un membre vide
+\def\aa_def_tok#1#2{\let#1= #2\empty}\aa_def_tok\aa_tok_espace{ }
+\def\aa_si_prochain_tok_est#1#2#3{%
+ \aa_def_tok\aa_test_tok{#1}\def\aa_code_vrai{#2}\def\aa_code_faux{#3}%
+ \aa_si_prochain_tok_est_i
+}
+\def\aa_si_prochain_tok_est_i{\futurelet\aa_prochain_token\aa_si_prochain_tok_est_ii}
+\def\aa_si_prochain_tok_est_ii{%
+ \loi_ifx{\aa_prochain_token\aa_tok_espace}
+ {\afterassignment\aa_si_prochain_tok_est_i\let\aa_prochain_token= }
+ {\loi_ifx{\aa_prochain_token\aa_test_tok}\aa_code_vrai\aa_code_faux}%
+}
+\def\aa_si_commence_par#1#2{%
+ \def\aa_si_commence_par_i##1#2##2\_nil{\loi_exparg\loi_ifempty{\loi_gobarg##1}}%
+ \aa_si_commence_par_i\relax#1#2\_nil
+}
+\def\definirseparateurs#1#2#3{%
+ \loi_ifempty{#1}
+ {\aa_erreur{Separateur <vide> entre lignes non permis, "\string\\" retenu}%
+ \definirseparateurs{\\}{#2}{#3}%
+ }
+ {\loi_ifempty{#2#3}
+ {\aa_erreur{Separateurs de membre <vide> et de terme <vide> : "=" et "+||-" retenus}%
+ \definirseparateurs{#1}{=}{+||-}%
+ }
+ {\loi_ifempty{#2}
+ {\definirseparateurs{#1}{\aa_sep_membre_vide}{#3}%
+ }
+ {\loi_ifempty{#3}
+ {\def\aa_liste_separateurs{#1_#2_\aa_sep_terme_vide}}
+ {\def\aa_liste_separateurs{#1_#2_#3}}%
+ }%
+ }%
+ }%
+}
+\definirseparateurs{\\}{=}{+||-}% séparateurs par défaut
+\def\definirespacements{\aa_si_prochain_tok_est[\definirespacements_i{\definirespacements_i[,]}}
+\def\definirespacements_i[#1,#2]#3#4{% #3=espace avant & après séparateurs 2 #4=espace avant & après séparateurs 3
+ \edef\aa_insere_espacement_avant{\aa_devdev_arg\loi_ifempty{\loi_removeextremespaces{#1}}{}{\hskip\glueexpr#1\relax}}%
+ \edef\aa_insere_espacement_apres{\aa_devdev_arg\loi_ifempty{\loi_removeextremespaces{#2}}{}{\hskip\glueexpr#2\relax}}%
+ \edef\aa_espacement_signe{\dimexpr\loi_ifempty{#3}{0pt}{#3}\relax}%
+ \edef\aa_espacement_terme{\dimexpr\loi_ifempty{#4}{0pt}{#4}\relax}%
+}
+\definirespacements[,]{0pt}{0pt}% espacements par défaut
+\def\aa_si_contient_moins#1{\aa_si_contient_moins_i||#1||||-||\_nil}% "||-||" est-il dans #1 ?
+\def\aa_si_contient_moins_i#1||-||#2\_nil{\loi_ifempty{#2}\loi_second\loi_first}
+\def\aa_trouver_moins_dans_separateur_de_termes{\expandafter\aa_trouver_moins_dans_separateur_de_termes_i\aa_liste_separateurs\_nil}
+\def\aa_trouver_moins_dans_separateur_de_termes_i#1_#2_#3\_nil{%
+ \aa_si_contient_moins{#2}
+ {2}
+ {\aa_si_contient_moins{#3}{3}{-1}}%
+}
+\def\aa_ajoute_si_existe#1{\ifcsname#1\endcsname\loi_argcsname\aa_developpe_et_ajoute_au_toks{#1}\fi}
+\def\aa_alignement_signe{\hfil\kern\aa_espacement_signe${}##{}$\kern\aa_espacement_signe\hfil}% pour "=", "+" ou "-"
+\def\aa_alignement_terme_c{\hfil\kern\aa_espacement_terme$##$\kern\aa_espacement_terme\hfil}
+\def\aa_alignement_terme_d{\hfil\kern\aa_espacement_terme$##$\kern\aa_espacement_terme}
+\def\aa_alignement_terme_g{\kern\aa_espacement_terme$##$\kern\aa_espacement_terme\hfil}
+\def\autoaligne{%
+ \relax\iffalse{\fi\ifnum0=`}\fi
+ \begingroup
+ \aa_si_prochain_tok_est[
+ {\autoaligne_crochet}
+ {\aa_si_prochain_tok_est({\autoaligne_paren}{\autoaligne_i[*d](c)}}%
+}
+\def\autoaligne_crochet[#1]{\aa_si_prochain_tok_est({\autoaligne_i[#1]}{\autoaligne_i[#1](c)}}
+\def\autoaligne_paren(#1){\aa_si_prochain_tok_est[{\autoaligne_permute_argopt(#1)}{\autoaligne_i[*d](#1)}}
+\def\autoaligne_permute_argopt(#1)[#2]{\autoaligne_i[#2](#1)}
+\def\autoaligne_i[#1]{%
+ \loi_ifempty{#1}
+ {\aa_erreur{Consigne d'alignement vide, "*d" est retenue}%
+ \autoaligne_i[*d]%
+ }
+ {\def\aa_consigne_alignement_general{}%
+ \aa_si_commence_par{#1}*
+ {\aa_trouve_consigne_alignement_general#1d\_nil}
+ {\aa_trouve_consigne_alignement_par_membre{#1}}%
+ \autoaligne_ii
+ }%
+}
+\def\autoaligne_ii(#1){%
+ \loi_ifempty{#1}
+ {\aa_erreur{Consigne de position vide, "c" est retenue}
+ \autoaligne_ii(c)%
+ }
+ {\edef\aa_consigne_alignement_vertical{\aa_verifie_consigne_alignement chb{#1}}%
+ \loi_ifnum{\aa_consigne_alignement_vertical=0 }
+ {\aa_erreur{Consigne d'alignement vertical "\detokenize{#1}" non reconnue, "c" est retenue}%
+ \def\aa_consigne_alignement_general{1}%
+ }%
+ {}%
+ \edef\aa_numero_separateur_contenant_signe_moins{\aa_trouver_moins_dans_separateur_de_termes}%
+ \def\readlist_d##1||##2\_nil##3{% redéfinir \readlist_e pour que
+ \loi_ifnum{\loi_nestcnt=\aa_numero_separateur_contenant_signe_moins\relax}% si la profondeur est celle où il a y a un "-"
+ {\aa_si_commence_par{##30}{-}% et que la liste restant à examiner commence par "-" alors
+ {\loi_exparg{\readlist_e1}{\expandafter\-\loi_gobarg##3##1}}% remplacer ce "-" par \-
+ {\readlist_e1{##3##1}}%
+ }
+ {\readlist_e1{##3##1}}%
+ }%
+ \expandafter\def\csname+\endcsname{+}\expandafter\def\csname-\endcsname{-}% redéfinir \+ et \-
+ \loi_exparg{\setsepchar[_]}{\aa_liste_separateurs}%
+ \autoaligne_iii
+ }%
+}
+\def\aa_trouve_consigne_alignement_general*#1#2\_nil{%
+ \loi_ifnum{\aa_verifie_consigne_alignement cdg{#1}=0 }
+ {\aa_erreur{Consigne d'alignement "\detokenize{#1}" non reconnue, "d" est retenue}%
+ \def\aa_consigne_alignement_general{d}%
+ }
+ {\def\aa_consigne_alignement_general{#1}}%
+}
+\def\aa_trouve_consigne_alignement_par_membre#1{\aa_trouve_consigne_alignement_par_membre_i1#1\loi_quark}
+\def\aa_trouve_consigne_alignement_par_membre_i#1#2{%
+ \loi_ifx{#2\loi_quark}
+ {}
+ {\loi_ifnum{\aa_verifie_consigne_alignement cdg{#2}=0 }
+ {\aa_erreur{Consigne d'alignement "\detokenize{#2}" non reconnue, "d" est retenue}%
+ \loi_argcsname\def{aa_alignement_membre[#1]}{d}%
+ }
+ {\loi_argcsname\def{aa_alignement_membre[#1]}{#2}}%
+ \loi_exparg\aa_trouve_consigne_alignement_par_membre_i{\number\numexpr#1+1}%
+ }%
+}
+\def\aa_verifie_consigne_alignement#1#2#3#4{% #1,#2,#3=lettres admises #4=consigne c, d ou g --> renvoie un nombre (1,2 ou 3=ok, 0=erreur)
+ 0\if\string #1\expandafter\loi_firsttonil\detokenize{#4x}\_nil1\else
+ \if\string #2\expandafter\loi_firsttonil\detokenize{#4x}\_nil2\else
+ \if\string #3\expandafter\loi_firsttonil\detokenize{#4x}\_nil3\fi\fi\fi
+}
+\let\aa_corrige_baselineskip\relax
+\def\autoaligne_iii#1{% #1=tableau
+ \reademptyitems
+ \readlist\aa_termes{#1}%
+ \let\aa_nombre_de_lignes\aa_termeslen% nombre de lignes
+ \def\aa_nombre_de_membres{0}%
+ \loi_fornum\aa_ligne_index=1to\aa_termeslen\do{% pour chaque ligne
+ \ifnum\csname aa_termeslen[\aa_ligne_index,0]\endcsname>\aa_nombre_de_membres
+ \loi_argcsname\let\aa_nombre_de_membres{aa_termeslen[\aa_ligne_index,0]}% mettre à jour le nombre max de membres
+ \fi
+ \loi_fornum\aa_membre_index=1to\csname aa_termeslen[\aa_ligne_index,0]\endcsname\do{% pour chaque membre
+ \loi_argcsname\let\aa_nombre_de_termes_courant{aa_termeslen[\aa_ligne_index,\aa_membre_index,0]}%
+ \ifcsname aa_nbtermes_\aa_membre_index\endcsname% mettre à jour le nombre max de termes dans ce membre
+ \ifnum\aa_nombre_de_termes_courant>\csname aa_nbtermes_\aa_membre_index\endcsname\relax
+ \loi_argcsname\let{aa_nbtermes_\aa_membre_index}\aa_nombre_de_termes_courant
+ \fi
+ \else
+ \loi_argcsname\let{aa_nbtermes_\aa_membre_index}\aa_nombre_de_termes_courant
+ \fi
+ }%
+ }%
+ \aa_liste_tokens{}%
+ % construction du préambule de l'alignement
+ \loi_fornum\aa_membre_index=1to\aa_nombre_de_membres\do{%
+ \loi_fornum\aa_terme_index=1to\csname aa_nbtermes_\aa_membre_index\endcsname\do{%
+ \ifx\aa_consigne_alignement_general\empty
+ \ifcsname aa_alignement_membre[\aa_membre_index]\endcsname
+ \loi_argcsname\aa_developpe_et_ajoute_au_toks{aa_alignement_terme_\csname aa_alignement_membre[\aa_membre_index]\endcsname}% terme
+ \else
+ \aa_erreur{Pas assez de consignes d'alignement, "d" est retenue}%
+ \aa_developpe_et_ajoute_au_toks{\aa_alignement_terme_d}%
+ \fi
+ \else
+ \loi_argcsname\aa_developpe_et_ajoute_au_toks{aa_alignement_terme_\aa_consigne_alignement_general}%
+ \fi
+ \ifnum\aa_terme_index<\csname aa_nbtermes_\aa_membre_index\endcsname\relax
+ \aa_developpe_et_ajoute_au_toks{\expandafter&\aa_alignement_signe&}% signe
+ \fi
+ }%
+ \ifnum\aa_membre_index<\aa_nombre_de_membres\relax
+ \aa_developpe_et_ajoute_au_toks{\expandafter&\aa_alignement_signe&}% égalité
+ \fi
+ }%
+ \aa_ajoute_au_toks\cr
+ % fin du préambule, construction du corps de l'alignement
+ \loi_fornum\aa_ligne_index=1to\aa_termeslen\do{% pour chaque ligne,
+ \loi_fornum\aa_membre_index=1to\aa_nombre_de_membres\do{% chaque membre
+ \def\aa_terme_non_vide_vu{0}%
+ \loi_fornum\aa_terme_index=1to\csname aa_nbtermes_\aa_membre_index\endcsname\do{% et chaque terme
+ \aa_ajoute_si_existe{aa_termes[\aa_ligne_index,\aa_membre_index,\aa_terme_index]}% ajouter le terme
+ \ifcsname aa_termes[\aa_ligne_index,\aa_membre_index,\aa_terme_index]\endcsname% si le terme existe
+ \loi_argcsname\loi_exparg\loi_ifempty{aa_termes[\aa_ligne_index,\aa_membre_index,\aa_terme_index]}
+ {}
+ {\def\aa_terme_non_vide_vu{1}}% et qu'il est non vide, s'en souvenir
+ \fi
+ \ifnum\aa_terme_index<\csname aa_nbtermes_\aa_membre_index\endcsname\relax% passer à l'ajout éventuel du signe + ou -
+ \aa_ajoute_au_toks&%
+ \loi_ifnum{% insérer signe si index correct ET terme suivant non vide ET (un terme non vide a été rencontré OU signe="-"
+ \numexpr1\loi_ifnum{\aa_terme_index<\csname aa_termeslen[\aa_ligne_index,\aa_membre_index,0]\endcsname\space}10%
+ \loi_exparg{\loi_exparg\loi_ifempty}{\csname aa_termes[\aa_ligne_index,\aa_membre_index,\number\numexpr\aa_terme_index+1]\endcsname}01%
+ +\aa_terme_non_vide_vu
+ +\if\string-\expandafter\loi_firsttonil\detokenize\expandafter\expandafter\expandafter{\csname aa_termessep[\aa_ligne_index,\aa_membre_index,\aa_terme_index]\endcsname+}\_nil1\else0\fi>111 }
+ {\aa_ajoute_si_existe{aa_termessep[\aa_ligne_index,\aa_membre_index,\aa_terme_index]}}%
+ {\aa_ajoute_au_toks{\hphantom{\hbox{${}+{}$}}}}% sinon, encombrement horizontal
+ \aa_ajoute_au_toks&%
+ \fi
+ }%
+ \ifnum\aa_membre_index<\aa_nombre_de_membres\relax
+ \aa_ajoute_au_toks&% puis, ajouter le signe "=" si...
+ \ifcsname aa_termes[\aa_ligne_index,\number\numexpr\aa_membre_index+1]\endcsname% le terme suivant existe
+ \ifnum\aa_egal_devant_membre_vide=0 % et si on ne tient compte des = devant les membres vides
+ \loi_argcsname\loi_exparg\loi_ifempty{aa_termes[\aa_ligne_index,\number\numexpr\aa_membre_index+1]}
+ {}% et si'il n'est pas vide
+ {\aa_ajoute_si_existe{aa_termessep[\aa_ligne_index,\aa_membre_index]}}%
+ \else
+ \aa_ajoute_si_existe{aa_termessep[\aa_ligne_index,\aa_membre_index]}%
+ \fi
+ \fi
+ \aa_ajoute_au_toks&%
+ \fi
+ }%
+ \aa_ajoute_au_toks\cr
+ }%
+ \aa_ajoute_au_toks\crcr
+ \aa_insere_espacement_avant
+ \ifcase\aa_consigne_alignement_vertical\relax
+ \or
+ \let\aa_boite_externe\vcenter
+ \csname\ifmmode loi_identity\else aa_compose_en_mode_math\fi\expandafter\endcsname
+ \or
+ \let\aa_boite_externe\vtop
+ \expandafter\loi_identity
+ \or
+ \let\aa_boite_externe\vbox
+ \expandafter\loi_identity
+ \fi
+ {\aa_boite_externe{%
+ \aa_corrige_baselineskip
+ \baselineskip\aa_v_coeff\baselineskip
+ \halign\expandafter{\the\aa_liste_tokens}%
+ }%
+ }%
+ \aa_insere_espacement_apres
+ \endgroup
+ \ifnum`{=0\fi\iffalse}\fi
+}
+\aavcoeff{1}% par défaut
+\aa_restaure_catcode
+\endinput
+
+v1.0 01/09/2016
+ - première version publique
+v1.1 06/10/2016
+ - correction d'un bug dans \autoaligne_iii qui mangeait le
+ \endgroup final
+v1.2 22/10/2016
+ - possibilité de définir les séparateurs
+ - possibilité de définir les espaces additionnelles
+ autour des séparateurs
+ - possibilité de définir les espaces insérées avant et
+ après l'alignement
+v1.3 11/02/2017
+ - le \iffalse{\fi\ifnum0=`}\fi n'est pas équilibré par
+ \ifnum`{=0\fi\iffalse}\fi ce qui provoque un bug lorsque
+ \autoaligne est appelé dans un alignement
+v1.4 05/11/2018
+ - \+ et \- sont \outer pour plain-TeX et les redéfinir
+ provoquait un bug
+ - pour LaTeX seulement, lorsque \baselineskip est nul, on
+ prend \normalbaselineskip
+ - nouveaux noms des macros privées de listofitems pris en compte \ No newline at end of file
diff --git a/macros/generic/bagpipe/BlackDonald.pdf b/macros/generic/bagpipe/BlackDonald.pdf
new file mode 100644
index 0000000000..99e8df7c3a
--- /dev/null
+++ b/macros/generic/bagpipe/BlackDonald.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/BlackDonald.tex b/macros/generic/bagpipe/BlackDonald.tex
new file mode 100644
index 0000000000..99ab1aa97e
--- /dev/null
+++ b/macros/generic/bagpipe/BlackDonald.tex
@@ -0,0 +1,434 @@
+%&bagpipe
+\input bagpipe
+%
+% Converted from bmw or bww format by bww2tex version 2.00
+%
+\def\freqbarno{9999}
+\maxlinesinpage=12
+%
+\ifx\medleyflag\relax\else
+ \nopagenumbers\pageno=1\medtall\medwidewidth\fi
+\newpitch\newgrace\noautoglue
+%
+\musicsize 16\relax
+%Bagpipe Reader:1.0
+%
+%TuneTempo,55%
+\line{\hss \moyen Black Donald's March\hss }
+%
+\line{\rm I. GROUND\hss }
+%
+\generalmeter{\meterC}
+%\generalsignature{2}
+\debutmorceau
+\setelemq{1.2}%
+\setdoublebar\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\pince h\qlf\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\pince h\qlf\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\Uptext{\it fine}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\pince h\qlf\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\pince h\qlf\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\pince h\qlf\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\pince f\qle\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\pince h\qlf\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\setdoublebar\suspmorceau
+%
+\line{\rm II. THUMB VAR.\hss }
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\uptext{\it tr}\qlh\enotes\xbarre
+\notes\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\uptext{\it tr}\qlh\enotes\xbarre
+\notes\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\uptext{\it tr}\qlh\enotes\xbarre
+\notes\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\echoN\qla\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\uptext{\it tr}\qlh\enotes\xbarre
+\notes\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\uptext{\it tr}\qlh\enotes\xbarre
+\notes\qlp e\etn
+\pince f\cc\etn
+\grg\qlc\etn
+\pince f\qle\enotes\xbarre
+\notes\grg\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\uptext{\it tr}\qlh\enotes\xbarre
+\notes\qlp e\etn
+\pince f\cc\etn
+\grg\qlb\etn
+\echoN\qla\enotes\setdoublebar\suspmorceau
+%
+\line{\rm III. VAR. 2\hss }
+%
+\generalmeter{\meterfrac{2}{4}}
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\echoN}\ba\backput{\pointdorgue a}\enotes\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bb\echoN}\ba\backput{\pointdorgue a}\enotes\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\bf\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\echoN}\ba\backput{\pointdorgue a}\enotes\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\bf\uptext{\it tr}}\bh\etn
+\bcc bb3{\bb\echoN}\ba\backput{\pointdorgue a}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\bf\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\echoN}\ba\backput{\pointdorgue a}\enotes\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bb\echoN}\ba\backput{\pointdorgue a}\enotes\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\echoN}\ba\backput{\pointdorgue a}\enotes\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\bf\uptext{\it tr}}\bh\etn
+\bcc bb3{\bb\echoN}\ba\backput{\pointdorgue a}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\grg\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\bf\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\be\uptext{\it tr}}\bh\etn
+\bcc bb3{\bc\uptext{\it tr}}\bh\enotes\xbarre
+\notes\bcc bb3{\bf\uptext{\it tr}}\bh\etn
+\bcc bb3{\bb\echoN}\ba\backput{\pointdorgue a}\enotes\setdoublebar\suspmorceau
+%
+\line{\rm IV. LEUMLUATH SINGLING [S] V. DOUBLING [D]\hss }
+%
+%\generalsignature{2}
+\reprmorceau
+\notes\segno h\enotes\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qle\backput{\Downtext{L}}\etn
+\qlc\backput{\Downtext{L}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{L}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{L}}\rlap{\fsk\Uptext{$\vert$}}\enotes\notes\downtext{\it D.S.}\enotes\setdoublebar\suspmorceau
+%
+\line{\rm VI. TAORLUATH SINGLING [S] VII. DOUBLING [D]\hss }
+%
+%\generalsignature{2}
+\reprmorceau
+\notes\segno h\enotes\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qle\backput{\Downtext{T}}\etn
+\qlc\backput{\Downtext{T}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{T}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{T}}\rlap{\fsk\Uptext{$\vert$}}\enotes\notes\downtext{\it D.S.}\enotes\setdoublebar\suspmorceau
+%
+\line{\rm VIII. CRUNLUATH SINGLING [S] IX. DOUBLING [D]\hss }
+%
+%\generalsignature{2}
+\reprmorceau
+\notes\segno h\enotes\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bc\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlc\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\qlc\backput{\Downtext{C}}\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\Uptext{$\vert$S}\grg\bcc bb3{\bb\backput{\pointdorgue c}\echoN}\ba\backput{\pointdorgue a}\rlap{\fsk\Uptext{$\vert$}}\etn
+\Uptext{$\vert$D}\qlb\backput{\Downtext{C}}\rlap{\fsk\Uptext{$\vert$}}\enotes\notes\downtext{\it D.S.}\enotes\setdoublebar\suspmorceau
+%
+\line{\rm X. CRUNLUATH A MACH\hss }
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlb\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlb\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlb\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlb\enotes\setdoublebar\suspmorceau
+%
+%\generalsignature{2}
+\reprmorceau
+\setdoublebar\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qle\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlc\enotes\xbarre
+\notes\qlf\backput{\Downtext{C}}\etn
+\backput{\Downtext{C'}}\qlb\enotes\notes\Downtext{\ \ \it D.C. al fine}\enotes\setdoublebar\finmorceau\byemedley
+\bye
diff --git a/macros/generic/bagpipe/Bonnets.pdf b/macros/generic/bagpipe/Bonnets.pdf
new file mode 100644
index 0000000000..41d0445e6a
--- /dev/null
+++ b/macros/generic/bagpipe/Bonnets.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/Bonnets.tex b/macros/generic/bagpipe/Bonnets.tex
new file mode 100644
index 0000000000..2801745071
--- /dev/null
+++ b/macros/generic/bagpipe/Bonnets.tex
@@ -0,0 +1,110 @@
+%%&bagpipe
+\input bagpipe
+%
+% Bonnetsx.tex
+%
+\sectionedpagenumbers
+\count1=4\pageno=5\normalwidth\multipart{1}
+%
+%\landscape
+\font\twelvebf=cmbx12
+%
+\def\tcsc#1#2#3{\bcsc#1#3{2}{\qbp0#1\psk}{\qb0#2}{\qb0#3}}
+\def\tcgsc#1#2#3#4{\bcsc#1#4{3}{\qbp0#1#2\psk}{\qb0#3}{\qb0#4}}
+\def\tcsgc#1#2#3#4{\bcsc#1#4{3}{\qbp0#1\psk}{\qb0#2#3}{\qb0#4}}
+%
+% for line 1
+\def\barone{\notes\grg\qla\taor\ca\etn\dblc\qlc\psk\ce\enotes\xbarre}
+\def\bartwo{\notes\psk\qlh\grip\ch\etn\grg\qlh\psk\ce\enotes\xbarre}
+\def\barthree{\notes\dblg\tcsc ghg\etn\bscc ff3\bf\bhp\bf\enotes\xbarre}
+\def\barfour{\notes
+\dble\tcsgc ec\gre a\etn\dblb\qlb\psk\cc\enotes\alaligne}
+%
+% for line 2
+\def\barfive{\barone}
+\def\barsix{\bartwo}
+\def\barseven{\notes\dblf\tcsc fed\etn\grg\qlc\grip\ce\psk\enotes\xbarre}
+\def\bareight{\notes\grg\bscc ec3\bf\bhp\bc\etn\dblb\qlb\grN\ca\enotes}
+%
+% for line 3
+\def\barnine{\notes\grg\tcgsc a\grd ce\etn\dble\tcsgc ec\grN a\enotes\xbarre}
+\def\barten{\notes\dblf\tcsc fed\etn\dblc\tcsgc cb\grN a\enotes\xbarre}
+\def\bareleven{\notes\grg\tcgsc a\grd ce\etn\grg\tcsc fgh\enotes\xbarre}
+\def\bartwelve{\notes\psk\tcsc abc\etn\dblb\qlb\grN\ca\enotes\alaligne}
+%
+% for line 4
+\def\barthirteen{\barnine}
+\def\barfourteen{\barten}
+\def\barfifteen{\notes\psk\tcsc hgf\etn\dble\tcsc ece\enotes\xbarre}
+\def\barsixteen{\bareight}
+%
+% for line 5
+\def\barseventeen{\notes\thrwd\qlp d\shkd\qlp d\enotes\xbarre}
+\def\bareighteen{\notes\shkd\tcgsc d\grg fe\etn\grg\tcsgc db\grN a\enotes\xbarre}
+\def\barnineteen{\notes
+ \grg\bcsc bb3\bd{\bb\grN}\bbp\etn\dblb\qlb\dblg\cg\enotes\xbarre}
+\def\bartwenty{\notes\psk\qlh\grip\ch\etn\hdblf\tcsc fef\enotes\alaligne}
+%
+% for line 6
+\def\bartwentyone{\barseventeen}
+\def\bartwentytwo{\bareighteen}
+\def\bartwentythree{\notes\dbld\tcsc dcb\etn\grg\tcsc abc\enotes\xbarre}
+\def\bartwentyfour{\notes\thrwd\tcsc def\etn\dble\qle\psk\cd\enotes}
+%
+% for line 7
+\def\bartwentyfive{\notes\shkd\tcsc dfh\etn\grg\tcsgc hf\grg d\enotes\xbarre}
+\def\bartwentysix{\notes\psk\tcsc hgf\etn\dblf\tcsc fef\enotes\xbarre}
+\def\bartwentyseven{\notes\thrwd\tcsc def\etn\grg\tcsc fgh\enotes\xbarre}
+\def\bartwentyeight{\bartwentyfour}
+%
+% for line 8
+\def\bartwentynine{\bartwentyfive}
+\def\barthirty{\notes\psk\tcsc hgf\etn\dblf\tcsc fed\enotes\xbarre}
+\def\barthirtyone{\bartwentythree}
+\def\barthirtytwo{\bartwentyfour}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\line{\moyen Blue Bonnets Over the Border\hss
+\rm March\hss revised \today\hss}
+\bigskip
+%
+\generalmeter{\meterfrac 68}%
+%
+\debutmorceau
+%
+\autolines{16}{4}{13}%
+% line 1
+\leftrepeatsymbol
+\barone\bartwo\barthree\barfour
+% line 2
+\autolines{11}{4}{13}%
+\barfive\barsix\barseven\bareight\setrightrepeat\suspmorceau
+% line 3
+\line{\twelvebf Part 2\hss}%
+\autolines{13}{4}{12}%
+\reprmorceau
+\leftrepeatsymbol\barnine\barten\bareleven\bartwelve
+% line 4
+\barthirteen\barfourteen\barfifteen\barsixteen\setrightrepeat\suspmorceau
+% line 5
+\line{\twelvebf Part 3\hss}%
+\reprmorceau
+\maxlinesinpage=12%
+\autolines{11}{4}{13}%
+\leftrepeatsymbol\barseventeen\bareighteen\barnineteen\bartwenty
+% line 6
+\bartwentyone\bartwentytwo\bartwentythree\bartwentyfour
+ \setrightrepeat\suspmorceau
+% line 7
+\line{\twelvebf Part 4\hss}%
+\reprmorceau
+\autolines{12}{4}{13}%
+\leftrepeatsymbol
+\bartwentyfive\bartwentysix\bartwentyseven\bartwentyeight\alaligne
+% line 8
+\autolines{11}{4}{13}%
+\bartwentynine\barthirty\barthirtyone\barthirtytwo\setrightrepeat\suspmorceau
+%
+\byemedley
+\bye
diff --git a/macros/generic/bagpipe/Green.pdf b/macros/generic/bagpipe/Green.pdf
new file mode 100644
index 0000000000..d75d980c85
--- /dev/null
+++ b/macros/generic/bagpipe/Green.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/Green.tex b/macros/generic/bagpipe/Green.tex
new file mode 100644
index 0000000000..d0b11b49ca
--- /dev/null
+++ b/macros/generic/bagpipe/Green.tex
@@ -0,0 +1,61 @@
+%&bagpipe
+\input bagpipe
+%\let\usemusixtex\relax
+%
+% Green.tex
+%% WUSPBA massed band setting
+%
+\newpitch\newgrace\noautoglue
+\ifx\medleyflag\relax\else\nopagenumbers\fi
+%
+%\landscape
+%
+% for line 1
+\def\barone{\notes\grg\pcps ab\etn\grip\qlc\etn\dblc\pcgc c\gre a\enotes\xbarre}
+\def\bartwo{\notes\grg\pcgc c\thrwd d\etn\dble\qle\etn\gra\pcc ef\enotes\xbarre}
+\def\barthree{\notes\dblc\pcc cf\etn\dble\pcps ec\etn\grg\qlb\enotes\xbarre}
+\def\barfour{\notes\grip\pcc bf\etn\dble\pcps ec\etn\grN\qla\enotes\alaligne}
+%
+% for line 2
+\def\barfive{\barone}
+\def\barsix{\bartwo}
+\def\barseven{\barthree}
+\def\bareight{\notes\grip\pcgc b\grN a\etn\dblc\pcps cb\etn\grN\qla\enotes}
+%
+% for line 3
+\def\barnine{\notes\dblc\pcc ce\etn\dblh\qlh\etn\grg\qlh\enotes\xbarre}
+\def\barten{\notes\grf\pcc gf\etn\dblf\pcc fe\etn\gra\qle\enotes\xbarre}
+\def\bareleven{\notes\grg\pcps ef\etn\dble\pcc ed\etn\shkd\qld\enotes\xbarre}
+\def\bartwelve{\notes\grg\pcps de\etn\dbld\pcc dc\etn\grip\qlc\enotes\alaligne}
+%
+% for line 4
+\def\barthirteen{\barnine}
+\def\barfourteen{\barten}
+\def\barfifteen{\notes\grg\pcps ef\etn\dble\qle\etn\gra\pcps ed\enotes\xbarre}
+\def\barsixteen{\notes\grg\pcgc c\thrwd d\etn\dble\qle\etn\gra\qle\enotes}
+%
+\line{\moyen The Green Hills of Tyrol\hss
+\rm March\hss revised \today\hss PM J Macleod}
+\bigskip
+%
+\generalmeter{\meterfrac 34}%
+%
+\debutmorceau
+%
+\autolines{13}{4}{48}%
+%line 1
+\leftrepeatsymbol
+\barone\bartwo\barthree\barfour
+% line 2
+\barfive\barsix\barseven\bareight\setrightrepeat\suspmorceau
+% line 3
+\reprmorceau
+\autolines{12}{4}{48}%
+\leftrepeatsymbol
+\barnine\barten\bareleven\bartwelve
+% line 4
+\autolines{12}{4}{48}%
+\barthirteen\barfourteen\barfifteen\barsixteen\setrightrepeat\suspmorceau
+%
+\byemedley
+\bye
diff --git a/macros/generic/bagpipe/GreenTwo.pdf b/macros/generic/bagpipe/GreenTwo.pdf
new file mode 100644
index 0000000000..dfa3af0c4d
--- /dev/null
+++ b/macros/generic/bagpipe/GreenTwo.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/GreenTwo.tex b/macros/generic/bagpipe/GreenTwo.tex
new file mode 100644
index 0000000000..d1b035c3bb
--- /dev/null
+++ b/macros/generic/bagpipe/GreenTwo.tex
@@ -0,0 +1,85 @@
+%&bagpipe
+\input bagpipe
+%
+% GreenTwo.tex
+%% WUSPBA massed band setting two part version
+%
+\multipart{2}%
+%
+\newpitch
+\ifx\medleyflag\relax\else\nopagenumbers\fi
+%
+%\landscape
+%
+%
+\line{\moyen The Green Hills of Tyrol\hss
+\rm March\hss revised \today\hss PM J Macleod}%
+\bigskip
+%
+\generalmeter{\meterfrac 34}%
+%
+\debutmorceau
+%
+% for line 1
+\def\barone{\notes\grg\pcps ab|\grg\pcps ab\etn
+ \grip\qlc|\grip\qlc\etn
+ \dblc\pcgc c\gre a|\dblc\pcgc c\gre a\enotes\xbarre}\relax
+\def\bartwo{\notes\grg\pcgc c\thrwd d|\grg\pcgc c\thrwd d\etn
+ \grg\qlc|\dble\qle\etn
+ \grip\pcc cd|\gra\pcc ef\enotes\xbarre}\relax
+\def\barthree{\notes\grg\pcc cd|\dblc\pcc cf\etn
+ \dblc\pcps ca|\dble\pcps ec\etn
+ \grg\qlN|\grg\qlb\enotes\xbarre}\relax
+\def\barfour{\notes\grd\pcc Nd|\grip\pcc bf\etn
+ \dblc\pcps ca|\dble\pcps ec\etn
+ \grg\qla|\grN\qla\enotes\alaligne}\relax
+%
+% for line 2
+\def\barfive{\barone}\relax
+\def\barsix{\bartwo}\relax
+\def\barseven{\barthree}\relax
+\def\bareight{\notes\grd\pcc Na|\grip\pcgc b\grN a\etn
+ \dblc\pcc cN|\dblc\pcps cb\etn
+ \grg\qla|\grN\qla\enotes}\relax
+%
+% for line 3
+\def\barnine{\notes\grg\pcgc a\grd c|\dblc\pcc ce\etn
+ \grg\qlf|\dblh\qlh\etn
+ \gre\qlf|\grg\qlh\enotes\xbarre}\relax
+\def\barten{\notes\dble\pcc ed|\grf\pcc gf\etn
+ \dbld\pcc dc|\dblf\pcc fe\etn
+ \grip\qlc|\gra\qle\enotes\xbarre}\relax
+\def\bareleven{\notes\grg\pcps cd|\grg\pcps ef\etn
+ \dblc\pcgc c\gre b|\dble\pcc ed\etn
+ \grip\qlb|\shkd\qld\enotes\xbarre}\relax
+\def\bartwelve{\notes\grg\pcps bc|\grg\pcps de\etn
+ \dblb\pcgc b\gre a|\dbld\pcc dc\etn
+ \wbirl\qla|\grip\qlc\enotes\alaligne}\relax
+%
+% for line 4
+\def\barthirteen{\barnine}\relax
+\def\barfourteen{\barten}\relax
+\def\barfifteen{\notes\grg\pcps cd|\grg\pcps ef\etn
+ \grg\qlc|\dble\qle\etn
+ \grip\pcps cb|\gra\pcps ed\enotes\xbarre}\relax
+\def\barsixteen{\notes\grg\pcc ab|\grg\pcgc c\thrwd d\etn
+ \dblc\qlc|\dble\qle\etn
+ \grip\qlc|\gra\qle\enotes}\relax
+%
+\autolines{13}{4}{48}%
+%line 1
+\leftrepeatsymbol
+\barone\bartwo\barthree\barfour
+% line 2
+\barfive\barsix\barseven\bareight\setrightrepeat\suspmorceau
+% line 3
+\reprmorceau
+\autolines{12}{4}{48}%
+\leftrepeatsymbol
+\barnine\barten\bareleven\bartwelve
+% line 4
+\autolines{12}{4}{48}%
+\barthirteen\barfourteen\barfifteen\barsixteen\setrightrepeat\suspmorceau
+%
+\byemedley
+\bye
diff --git a/macros/generic/bagpipe/README b/macros/generic/bagpipe/README
new file mode 100644
index 0000000000..ee2c9b167d
--- /dev/null
+++ b/macros/generic/bagpipe/README
@@ -0,0 +1,47 @@
+
+Bagpipe.tex is a macro-package for use on top of MusicTeX or
+MusixTeX, which are macro-packages for use with TeX or LaTeX. TeX
+is a language designed for typesetting technical documents,
+and is available for most platforms. Musi[c|x]TeX
+were written by Daniel Taupin, who is now deceased. They are
+available via anonymous ftp at CTAN sites and the Werner Icking
+Music Archive (WIMA). See WIMA for installation instructions.
+
+Version 3.02 of bagpipe.tex works with MusicTeX version 5.20 and
+MusixTeX version T.89. Since it redefines a few Musi(c|x)TeX
+macros, it may not work with later versions without modification.
+It definitely does not work with versions of MusicTeX earlier than
+4.7.
+
+MusixTeX differs from MusicTeX in that it relies on a three pass
+system to adjust the spacing instead of glue (stretchable space).
+MusixTeX is also the version under active development and has
+many features which MusicTeX does not. Most of these are
+irrelevant for bagpipe music.
+
+In this distribution:
+
+bagpipe.tex : the macro package.
+bagpipe.txt : same as above with a common extension
+bagpipe.ini : for generating a bagpipe format
+bagpipex.ini : for generating a bagpipex format
+bagdoc.tex : user's guide.
+
+quickref.tex : a reference 'card'.
+
+Green.tex }
+GreenTwo.tex } : sample tunes
+Bonnets.tex } : (note that in bagpipe music, two sharps are
+Washer.tex } : understood and the key signature is usually omitted as
+BlackDonald.tex } : in these samples)
+
+Notes: *.tex, *.ini, and *.mf are ascii.
+You may have to modify some settings to get your browser to
+download these files. The sample tunes and quickref in this
+distribution are set up to use MusixTeX.
+
+License is granted to distribute and use this product according
+to the LaTeX Project Public License (lppl1.3). This project is
+maintained by Walt Innes (walt (at) slac.stanford.edu).
+
+
diff --git a/macros/generic/bagpipe/Washer.pdf b/macros/generic/bagpipe/Washer.pdf
new file mode 100644
index 0000000000..e3f816ec5f
--- /dev/null
+++ b/macros/generic/bagpipe/Washer.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/Washer.tex b/macros/generic/bagpipe/Washer.tex
new file mode 100644
index 0000000000..3976585456
--- /dev/null
+++ b/macros/generic/bagpipe/Washer.tex
@@ -0,0 +1,135 @@
+%&bagpipe
+\input bagpipe
+%
+% Washer.tex
+%
+\newgrace\newpitch\noautoglue
+%
+\ifx\medleyflag\relax\else\normalwidth\nopagenumbers\fi
+%
+% for line 1
+\def\barone{\notes
+ \hdblf\bcsc dd3\bfp{\bd\grN}\bd\etn\grg\bcsc ac3\bap{\bd\grN}\bd\enotes\xbarre}
+\def\bartwo{\notes
+ \grg\bcsc ee3\bfp\bd\bf\etn\bcsc hf3\bhp\bg\bf\enotes\xbarre}
+\def\barthree{\notes
+ \grh\bcsc ee3\bgp{\be\gra}\be\etn\grg\bcsc cd3\bcp{\be\gra}\be\enotes\xbarre}
+\def\barfour{\notes
+ \grg\bcsc ae3{\bap\grd}\bc\be\etn\grh\bcsc ge3\bgp\bf\be\enotes\alaligne}
+%
+% for line 2
+\def\barfive{\barone}
+\def\barsix{\bartwo}
+\def\barseven{\notes
+ \grh\bcsc ff3\bgp\bf\bg\etn\grh\bscc eg3\be\bhp\bg\enotes\xbarre}
+\def\bareight{\notes
+ \grh\bcsc dd3\bfp{\bd\grN}\bd\etn\shkd\qld\etn\enotes}
+%
+% for line 3
+\def\barnine{\notes
+ \hdblf\bcsc dd3\bfp{\bd\grN}\bd\etn\bcsc dd3\bhp{\bd\grN}\bd\enotes\xbarre}
+\def\barten{\notes
+ \grg\bcsc dd3\bfp{\bd\grN}\bd\etn\bcsc hf3\bhp\bg\bf\enotes\xbarre}
+\def\bareleven{\barthree}
+\def\bartwelve{\notes
+ \grh\bcsc ee3\bgp{\be\gra}\be\etn\grg\bscc fg3\bf\bhp\bg\enotes\alaligne}
+%
+% for line 4
+\def\barthirteen{\barnine}
+\def\barfourteen{\barten}
+\def\barfifteen{\barseven}
+\def\barsixteen{\bareight}
+%
+% for line 5
+\def\barseventeen{\notes
+ \sk\bscc ff3\bf\bhp\bf\etn\dbld\bcsc cc3\bdp\bc\bd\enotes\xbarre}
+\def\bareighteen{\notes
+ \grg\bcsc a e3\bap\bd\bf\etn\bcsc hf3\bhp{\bg\grh}\bf\enotes\xbarre}
+\def\barnineteen{\notes
+ \sk\bcsc ff3{\bgp\grh}\bf\bg\etn\hdble\bcsc dd3\bep\bc\be\enotes\xbarre}
+\def\bartwenty{\barfour}
+%
+% for line 6
+\def\bartwentyone{\barseventeen}
+\def\bartwentytwo{\bareighteen}
+\def\bartwentythree{\barseven}
+\def\bartwentyfour{\bareight}
+%
+% for line 7
+\def\bartwentyfive{\notes
+ \grg\qlf\grip\cf\etn\bcsc hf3\bhp\bg\bf\enotes\xbarre}
+\def\bartwentysix{\bareighteen}
+\def\bartwentyseven{\notes
+ \grg\qle\grip\ce\etn\grh\bcsc ge3\bgp\bf\be\enotes\xbarre}
+\def\bartwentyeight{\barfour}
+%
+% for line 8
+\def\bartwentynine{\bartwentyfive}
+\def\barthirty{\bareighteen}
+\def\barthirtyone{\barseven}
+\def\barthirtytwo{\bareight}
+%
+% for line 9
+\def\barthirtythree{\bartwentyfive}
+\def\barthirtyfour{\bartwentysix}
+\def\barthirtyfive{\bartwentyseven}
+\def\barthirtysix{\bartwentyeight}
+%
+% for line 10
+\def\barthirtyseven{\notes
+ \grg\bscc ff3\bf\bhp\bf\etn\dbld\bcsc cc3\bdp\bc\bd\enotes\xbarre}
+\def\barthirtyeight{\bareighteen}
+\def\barthirtynine{\barseven}
+\def\barforty{\bareight}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\line{\moyen The Irish Washerwoman\hss
+\rm Jig\hss revised \today\hss}
+\bigskip
+%
+\generalmeter{\meterfrac 68}%
+%
+\debutmorceau
+%
+\autolines{13}{4}{13}%
+% line 1
+\leftrepeatsymbol
+\pickup{\ch}%
+\barone\bartwo\barthree\barfour
+% line 2
+\autolines{11}{4}{13}%
+\barfive\barsix\barseven\bareight\setrightrepeat\suspmorceau
+% line 3
+\line{\twelvebf Part 2\hss}
+\autolines{12}{4}{13}%
+\repreppickup{\ch}%
+\barnine\barten\bareleven\bartwelve
+% line 4
+\barthirteen\barfourteen\barfifteen\barsixteen\setrightrepeat\suspmorceau
+% line 5
+\line{\twelvebf Part 3\hss}
+\autolines{12}{4}{13}%
+\repreppickup{\ch}%
+\barseventeen\bareighteen\barnineteen\bartwenty
+% line 6
+\autolines{11}{4}{13}%
+\bartwentyone\bartwentytwo\bartwentythree\bartwentyfour
+\setrightrepeat\suspmorceau
+% line 7
+\line{\twelvebf Part 4\hss}
+\autolines{12}{4}{13}%
+\reppickup{\ce}%
+\bartwentyfive\bartwentysix\bartwentyseven\bartwentyeight
+% line 8
+\autolines{11}{4}{13}%
+\bartwentynine\barthirty\barthirtyone\barthirtytwo\suspmorceau
+% line 9
+\reppickup{\ce}%
+\barthirtythree\barthirtyfour\barthirtyfive\barthirtysix
+% line 10
+\barthirtyseven\barthirtyeight\barthirtynine\barforty
+\finmorceau
+%
+\byemedley
+\bye
diff --git a/macros/generic/bagpipe/bagdoc.pdf b/macros/generic/bagpipe/bagdoc.pdf
new file mode 100644
index 0000000000..48ee7c676f
--- /dev/null
+++ b/macros/generic/bagpipe/bagdoc.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/bagdoc.tex b/macros/generic/bagpipe/bagdoc.tex
new file mode 100644
index 0000000000..cd7a50e0bb
--- /dev/null
+++ b/macros/generic/bagpipe/bagdoc.tex
@@ -0,0 +1,563 @@
+%&plain
+%% This is a short write-up for bagpipe.tex
+%% Process this file with TeX using the plain format.
+% Computer modern fonts are used. Change the following three lines
+% if other fonts must be substituted.
+\font\twelverm=cmr12 scaled\magstephalf
+\font\twelvebf=cmbx12 scaled\magstephalf
+\font\fourteenrm=cmbx12 scaled\magstep1
+%
+\def\bsl#1{{\twelvebf$\backslash$#1}}
+\twelverm
+\baselineskip=16pt
+%
+{\fourteenrm\centerline{Using bagpipe.tex}}
+\bigskip
+\leftline{\twelvebf 1. Introduction}%
+
+\bigskip
+
+Bagpipe.tex is a macro-package for use on top of MusicTeX, or
+MusixTeX, which are
+macro-packages for use with TeX or LaTeX. TeX is a language
+designed for typesetting technical documents. It is public domain and
+is available for most platforms. Musi(c$|$x)TeX were written and are maintained
+by Daniel Taupin. They are available via anonymous ftp at
+the CTAN sites and the Werner Icking Music Archive (WIMA).
+WIMA is also a good place to find installation instructions.
+Bagpipe.tex itself is available via WWW from
+http://www.stanford.edu/\~ wrinnes/bagpipe.tex/.
+Musi(c$|$x)TeX files are usually found in MSDOS$|$Windows format, and bagpipe.tex
+files in UNIX format. If you transfer them in binary mode
+(as you would for a compressed TAR or zip file), you may have
+to do some conversion to get the carriage returns and line feeds
+correct. TeX itself is not too fussy about such things, but a
+platform which doesn't see a line break in the files may cause TeX
+to choke (this happens on MACs if you don't convert the sources).
+
+This write-up is for version 3.02. Version 3.02 of bagpipe.tex
+works with version 5.20 of MusicTeX and version T.89 of MusixTeX.
+Since it redefines a few Musi(c$|$x)TeX macros, it may not work
+with later versions without modification. It will not work with
+versions of MusicTeX before 4.7. Musi(c$|$x) TeX are designed to
+set complex multi-part scores. As a result, as delivered,
+typesetting bagpipe music is needlessly tedious. So, as suggested
+by Taupin in his write-up, I have written macros for commonly
+recurring complex codings. The result is that very few
+Musi(c$|$x)TeX macros appear directly in a score set with
+bagpipe.tex. Nevertheless, one should read Taupin's documentation
+to get an understanding of Musi(c$|$x)TeX's mode of operation and
+to find those macros which {\twelvebf are} used. I will not
+describe any Musi(c$|$x)TeX macros except when they interact with
+bagpipe.tex macros.
+
+MusixTeX differs from MusicTeX in that it relies on a three pass
+system to adjust the spacing instead of glue (stretchable space).
+MusixTeX is also the version under active development and has
+many features which MusicTeX does not. Most of these are
+irrelevant for bagpipe music. As of version 3.02, MusixTeX is the
+default. To revert to MusicTeX, comment out the line:\hfil\break
+\bsl{let}\bsl{usemusixtex}\bsl{relax}\%\ this sets the flag to use MusixTeX instead of MusicTeX,\hfil\break
+which is located near the beginning of the bagpipe.tex file.
+
+
+Permission is granted to use bagpipe.tex according to the
+LaTeX Project Public License, LPPL version 1.3, which may be found
+at\hfil\break http://www.ctan.org/license/lppl1.3 .
+
+\bigskip
+\leftline{\twelvebf 2. Basic definitions, melody notes.}%
+
+\bigskip
+
+The (usually) single part and limited range of bagpipe music allows for simplification.
+There are two schemes for indicating pitch. The default is the
+new scheme in which
+pitch values are designated by one of N, a, b, c, d, e, f, g, h.
+
+In the following
+I will represent one of these by x. To specify a pitch one types
+x or \bsl{x}.
+In forming macro names G may be used in place of N and A may be
+used in place of h. These last alternates may also be used for
+pitches providing a leading \bsl\ is used.
+An alternative scheme may invoked by \bsl{oldpitch}. In this
+alternate scheme the pitch values are designated by one of
+g, a, b, c, d, e, f, G, or A. A a leading \bsl\ is required.
+The new scheme may be
+restored at any time with a \bsl{newpitch}. In the examples in the
+rest of this note I will use the new scheme as do the sample
+tunes.
+
+To specify an isolated (not connected to a beam) melody note
+type \bsl{whx} for a whole note, \bsl{hx} for a half note,
+\bsl{qlx} for a quarter note,
+\bsl{cx} for an eighth note, \bsl{sx} for a sixteenth note, \bsl{tx} for a thirty-second
+note, and \bsl{sfx} for sixty-fourth note. Dotted melody notes are specified
+\bsl{hp x}, \bsl{qlp x}, \bsl{cp x}, \bsl{sp x}, \bsl{tp x}, \bsl{sfp}.
+Similarly, \bsl{hpp x}, \bsl{qlpp x}, and \bsl{cpp x}
+are used for double dotted notes.
+Beamed notes are specified as arguments of beam macros which will be described below.
+The arguments are \bsl{bx} for a plain note, \bsl{bxp}
+for a dotted note, and \bsl{bxpp} for a double dotted note.
+The time value is controlled by the beam macro.
+
+
+\bigskip
+\leftline{\twelvebf 3. Embellishments.}%
+
+\bigskip
+
+The big breakthrough in MusicTeX was to make possible arbitrary grace
+note sequences. I have coded macros for all the common and many not so
+common bagpipe grace notes and embellishments.
+These macros specify only the grace notes proper and not the
+following melody notes. Simple grace notes and strikes
+are entered as \bsl{grx}.
+Doublings are \bsl{dblx}, half doublings \bsl{hdblx}, thumb doublings
+\bsl{tdblx}, and slurred doublings \bsl{sdblx}.
+The throw on D is \bsl{thrwd}
+and on f is \bsl{thrwf}, the
+grip is \bsl{grip}, and the grip from d is \bsl{dgrip}.
+The \bsl{thrwf} is the same as the dare \bsl{dare}.
+There is also a grip-throw on D (with an extra low G), \bsl{gripthrwd}.
+The half throw on d is \bsl{hthrwd} and the throw on d from low G
+is \bsl{Nthrwd}. The grip from low G is \bsl{Ngrip}.
+The note sequences specified by these grips are often called
+by other names in particular contexts such as throws or leumluaths.
+I have not defined many such synonyms.
+When coding, look at what grace notes are
+actually there, not at the surrounding melody notes.
+The taorluath is \bsl{taor},
+the taorluath from g is \bsl{gtaor}, and from d \bsl{dtaor}.
+The half taorluath from low A is \bsl{ahtaor}.
+The birl is \bsl{birl},
+the strong birl \bsl{sbirl}, the weak birl \bsl{wbirl}, and the thumb birl
+\bsl{tbirl}.
+The slurs take x values a to f only.
+They are the slur \bsl{slurx}, half slur \bsl{hslurx}, and the
+thumb slur \bsl{tslurx}.
+In all of the slurs, ``slap'' may be used in place of ``slur''.
+Similarly shakes are \bsl{shkx} for x from a to g.
+There are also half shakes \bsl{hskx} and thumb shakes \bsl{tshkx}.
+Note that for a, b, c, and e
+shakes and slurs are the same.
+I have not defined such a synonym.
+There are slurred doublings \bsl{sdblx}, slurred half doublings
+\bsl{shdblx}, and slurred thumb doublings \bsl{stdblx}. There are the
+shaken doubling and thumb doubling on d \bsl{shkdbld}, \bsl{shtdbld}.
+
+Some less commonly used embellishments are the double grace notes
+\bsl{ydgrx} where y goes from d to t (t instead h), the double
+strikes \bsl{dstrx}, strong double strikes \bsl{gdstrx}, thumb
+double strikes \bsl{tdbstrx}, and the half double strikes
+\bsl{hdbstrx}. There is also the special case of the light
+half doulbe strike on D \bsl{lhdbstrd}. In exactly the same
+pattern as the double strikes there are triple strikes
+\bsl{tstrx}, etc. For x=b,c,d,e there are the pele's, sometimes
+called hornpipe shakes \bsl{pelx}, \bsl{tpelx}, \bsl{hpelx},
+\bsl{lpeld}, \bsl{ltpeld}, and \bsl{lhpeld}. For d and e these
+are the same as the slurred doublings. For x values of a through d there are
+catches \bsl{catchx}, strong catches \bsl{scatchx}, and
+thumb catches \bsl{tcatchx}.
+
+Note that some named movements such as tachums are
+not represented here because they consist of a combination of grace and
+melody notes. They need to be broken down for type setting.
+
+
+Piobaireachd embellishments include
+the crunluaths \bsl{crun}, \bsl{crunf}, \bsl{ahcrun}, \bsl{dcrun},
+\bsl{Nhcrun},
+ crunluath an machs \bsl{crunmb},
+\bsl{crunmc}, \bsl{crunmd}.
+The crunluath breabachs are \bsl{crunbr}, \bsl{dcrunbr},
+\bsl{ahcrunbr}.
+ \bsl{chelalho}, and the darodos \bsl{darodo} and \bsl{Ndarodo}.
+``darodo'' may be replaced by ``bubbly''. The \bsl{crunmd} is the same as
+the edre on d \bsl{edred}. There also the dre \bsl{dre},
+the edre \bsl{edre}, and edre's on b and c \bsl{edrex}.
+Other dre's and dare's are \bsl{gedre}, \bsl{gdare}, \bsl{tedre},
+bsl{tdare}, \bsl{Nedre}, \bsl{aedre}, \bsl{hdre}, \bsl{hedale},
+\bsl{hchechere}, \bsl{hedari}, \bsl{tchechere}.
+
+The piobaireachd throws are \bsl{enbain}, \bsl{otro}, \bsl{odro},
+\bsl{adela}, and similarly with leading g or t for the strong or
+thumb variations.
+There are also \bsl{dbstf} and \bsl{dbsth}.
+ Special piobaireachd throws on D are \bsl{tra}, and
+\bsl{trac}. Themal grace notes are coded \bsl{themx} and echo notes
+\bsl{echox}.
+The cadences are coded \bsl{cadxx} or \bsl{cadxxx}. The retarded
+variations are \bsl{fcadxx} or \bsl{fcadxx}.
+
+If your favorite embellishment is not (?!!) included, note that
+any set notes may turned into grace notes using them as the
+argument of \bsl{ggr}$\{\}$.
+For the standard thirty second note embellishments, you can use the
+\bsl{multigr} and \bsl{smultigr} macros. See the bagpipe.tex
+source for many examples.
+
+Versions 2.00 and later offer a different means of generating grace note spacing.
+This option is invoked by \bsl{newgrace} or \bsl{multipart}. A
+byproduct is that the afterruleskip can be be restored to closer
+to the MusicTeX standard value making typesetting somewhat easier.
+The old (default) scheme may be restored
+with the macro \bsl{oldgrace}.
+Good practice would dictate that you put one or the
+other at the beginning of each piece to prevent problems if you
+later mix sources or the default changes in a future version.
+I recommend the new mechanism.
+
+\bigskip
+\leftline{\twelvebf 4. Beamed note pairs.}
+
+\bigskip
+
+Because of there being only two notes, the location and slopes of beams for
+note pairs may be calculated from the note pitches. This allows for
+comparatively simple entry. Here I describe a group of macros for
+specifying these note pairs. They all have the form \bsl{pd...d} where
+there two to four d's. d represents either a note length (c, s, or t)
+, p indicating that the previous note is dotted,
+or g for a grace note. For each d (except p) the macro requires an appropriate
+argument. Note lengths require a pitch value x and a g requires
+any grace note macro, e.g. \bsl{grx}. An example of use is \bsl{pcps ab} which
+would set a dotted eighth note at pitch a beamed to a sixteenth note
+at pitch b. Another is \bsl{psgcp b}\bsl{grd c} which sets a sixteenth note at pitch
+b followed by a d grace note and then a dotted eighth note at pitch c.
+The b and
+the c are connected by a beam. The complete list of macros can be
+determined by looking into bagpipe.tex. All reasonable combinations are
+defined.
+
+\bigskip
+\leftline{\twelvebf 5. More general beamed note groups.}
+
+\bigskip
+
+Combinatorics being what they are, the above approach becomes impractical
+for more than two notes. Also there are a few cases where more flexibility
+is required even for pairs (e.g. sometimes the auto beam code puts the
+beam on top of the grace note !). For these reasons I have defined
+more general macros. These have the form \bsl{bd...d} where there from two to
+four d's. The d's represent time values (c, s, or t). These control the
+beam structure.
+The first three
+arguments specify the beam: starting pitch, ending pitch, and length
+in note spacings. Often the pitches will be those of the starting and
+ending note but may differ for many reasons as you will soon find out.
+The length is an integer from 1 to 9.
+An additional argument is required for each d. In their simplest
+form these arguments are beamed note specifiers \bsl{bx}, or \bsl{bxp}.
+If there
+is a grace note between two melody notes within the beamed group, it
+is specified by replacing the argument for the first melody note by
+$\{$\bsl{bx}\bsl{g}$\}$ or $\{$\bsl{bxp}\bsl{g}$\}$ where \bsl{g} represents any grace note macro.
+An example which might be found in a jig is
+\bsl{bccc cc3}$\{$\bsl{bc}\bsl{grd}$\}$$\{$\bsl{bc}\bsl{gre}$\}$\bsl{bc}.
+Again the complete list
+of macros can be found in the code. It is intended that all
+possibilities are defined up to 4 'd's. Longer beamed groups can be specified if
+the number beams for successive notes (not including the last) are the same.
+This is done by including multiple \bsl{bx} macros within a pair of braces.
+
+A note for TeX neophytes: macro
+names consist of letters only. Thus they are terminated by spaces, \bsl{}'s,
+braces and numbers.
+If a macro requires arguments the processor will take the following
+``tokens'' until a sufficient number have been found to feed to the
+macro. The braces serve to group macros so that they will be counted
+as one argument.
+
+\bsl{bgrx} was a work around for a bug which has been squashed. It has
+been removed.
+
+\bigskip
+\leftline{\twelvebf 6. Multiple parts}
+\bigskip
+
+Version 2.00 introduces the ability to set multiple parts
+(parts as in the melody plus seconds). The
+standard Musi(c$|$x)TeX instrument and staff definitions will work
+(if you invoke \bsl{noautoglue}, see below), but
+if all your parts are on bagpipe, you can use
+\bsl{multipart}$\{$n$\}$ where n is the number of parts.
+Note that \bsl{multipart$\{$1$\}$} is a simple way of setting
+the options for the newgrace note scheme and no autoglue.
+If you are content to line up only the beginning of the beats,
+you can use all bagpipe.tex macros. Otherwise you are on your
+own for beams. Start a bar with \bsl{notes}, set the first beat
+of the bottom part, enter a $|$ then the corresponding beat of the next part.
+Proceed through all the parts and then terminate with a \bsl{etn}.
+Then enter the music for the bottom part of the next beat and continue on.
+Terminate the last beat of the bar with an \bsl{enotes}.
+A bar in a two part, two beat per bar piece would go like:
+
+\bsl{notes}$\ldots|\ldots$\bsl{etn}$\ldots|\ldots$\bsl{enotes}\bsl{xbarre}
+
+If you do go your own way, you may have pending beams in both parts. In
+this case you must specify different beam numbers for the parts. Some
+of the macros have these beam numbers built in. 0 is used by the beam
+macros and 1 is used by the grace note macros, so avoid using these
+in your own beam number assignments.
+
+$|$'s and \&'s mean different things within the music environment than without.
+Thus the typical pattern of defining bars before \bsl{debutmorceau} will not
+work. This can be corrected two ways. The bar definitions can be
+sandwiched by a\hfil\break
+ \bsl{catcodesmusic} $\ldots$ \bsl{endcatcodesmusic} pair,
+or the defintions can be put immediately after the \bsl{debutmorceau}.
+If you do the latter, be very careful that there is no extraneous white
+space in the defintions. All definitions should be immediately followed
+by a \bsl{relax}.
+
+An \bsl{enotes} (or \bsl{etn}, \bsl{enn}, \bsl{ttn}) terminates a column of
+notes. Thus none of these can used in the interior of an intended note
+column. If you are building columns by the beat, then there can be none
+of these (and no glue) within the beat. This situation may arise when
+taking existing music for which the parts have been set separately and
+merging them into one multipart setting.
+
+
+\bigskip
+\leftline{\twelvebf 7. Miscellaneous macros.}
+\bigskip
+
+Pick-up notes require some special bookkeeping to keep the bar count correct.
+I have provided the following macro \bsl{pickup}$\{$any pick-up notes$\}$. This
+enters the specified notes, decrements the bar counter, and puts in a bar.
+Unfortunately this puts the bar number on the pick-up bar if this is not the
+first bar in the tune.
+Ending the previous line with \bsl{suspmorceau} and
+using \bsl{reppickup} in the place of \bsl{reprmorceau}\bsl{pickup} will
+fix this problem. It decrements the bar counter before the new line is started,
+thus suppressing the bar number on the pickup bar. An additional complication
+arises if the new line begins with a repeat symbol. In this case
+use \bsl{repreppickup} in place of \bsl{reprmorceau}\bsl{leftrepeat}
+\bsl{pickup}. The details of how these macros behave differ in the
+autoglue and noautoglue schemes.
+
+\bsl{psk}, and \bsl{fsk} provide for small horizontal spaces (they stand for
+point skip and flag skip). They are related to the note width for open
+music and to the note spacing for tight music.
+
+\bsl{Downtext} and \bsl{downtext} put text under the staff. These
+can be used for piobaireached shorthand and large scale repeat
+notations such as {\it Da Capo al Segno}.
+
+\bsl{etn} is the same as
+\bsl{enotes}\bsl{temps}\bsl{notes} which
+inserts some ``glue''.
+Glue stretches when there is space left on the line. I often use this
+after quarter notes and on beat boundaries in general. By default,
+beamed groups have one of these built in, so don't put one in explicitly.
+There is also implicit
+glue before a bar line which can double the glue at this point. To compensate
+one can put \bsl{etn} when the beat ends in a beamed group and
+\bsl{ttn} when it does not. \bsl{ttn} is \bsl{etn}\bsl{etn}.
+Best, turn off this feature with \bsl{noautoglue} and then
+use \bsl{etn} consistently between beats. No autoglue also turns
+\bsl{ttn} into \bsl{etn} so one gets about the same effect autoglue
+or no. \bsl{autoglue} turns autoglue back on. Note that autoglue
+is not compatible with multiple parts and \bsl{multipart} turns it off.
+
+\bsl{normalwidth}, \bsl{medwidewidth}, \bsl{widewidth} set up
+margins for various width layouts and odd and even pages.
+\bsl{normalheight}, \bsl{medtall}, and \bsl{tall}
+set vertical size and margins.
+
+\bsl{Afour} and \bsl{USletter} set the paper size. US letter is the
+default. Note that music optimized for one paper size will not look
+as good (or may not fit at all) on the other.
+
+\bsl{today} inserts the date. \bsl{USdate} and \bsl{Eurodate} specify
+the format. The US order (month day, year) is the default.
+
+\bsl{landscape} is implementation dependent. It will probably work if you
+use dvips by Tom Rokicki. \bsl{realwidewidth} is landscape with
+small margins.
+
+\bigskip
+
+\leftline{\twelvebf 8. Miscellaneous usage notes.}
+
+\bigskip
+
+This section will refer often to Musi(c$|$x)TeX macros. You need to have read
+the Musi(c$|$x)TeX documentation to follow the discussion.
+
+bagpipe.tex \bsl{inputs} the following MusicTeX files: muscinft.tex,
+musictex.tex, and musicvbm.tex or the follwing MusixTeX files:,
+musix.tex and musixcpt.tex. It sets Musi(c$|$x)TeX for single instruments
+and single staff. It adds teenynotes to the font definitions.
+
+I usually use \bsl{meterfrac} for the time signature. You may like to use \bsl{meterC}
+(commonly used for strathspeys) or
+\bsl{allabreve} (commonly used for reels).
+
+I prefer to keep complete control of line breaks. Therefore I use
+\bsl{xbarre}, and \bsl{alaligne} instead of \bsl{barre}.
+I recommend using \bsl{autolines} except when the music is tight. In
+this case the bagpipe.tex command \bsl{setelemq}$\{$f$\}$
+will set the elementary
+note spacing to f times the quarter note width. f=1.2 is the smallest
+value that looks decent.
+
+TeX treats any number of consecutive spaces, carriage returns, and line
+feeds as ``white space''. White space which terminates a macro name
+is eaten and has no further effect. Other white space will insert a space
+and some ``glue'' in the document. Because Musi(c$|$x)TeX does not know
+about this space, any pending beams or slurs
+will be messed up. Therefore it is best, within the music,
+to avoid all white space that
+is not needed to terminate a macro name.
+To accomplish this, lines which do not end with a macro name should
+be terminated with a \bsl{relax} command.
+
+Musi(c$|$x)TeX does not like to tie notes that are closer than 2.3
+quarternote-head widths. If the music is tightly set, extra
+space must be inserted between tied notes using \bsl{sk},
+\bsl{fsk}, or \bsl{psk}. A dot on the first tied note counts as
+space. Expanded glue does not.
+If the tied note is the last one in a beamed group, the
+\bsl{psk} should be grouped with that final note by using braces.
+
+Musi(c$|$x)TeX appears to have a roundoff problem when constructing
+sloped beams with more than three notes. As a result there are
+sometimes little bumps and for certain note spacings near
+\bsl{setelemq}$\{$1.7$\}$\ small gaps appear. The problems are
+worst at low resolution such as with a previewer. Work-arounds
+are: avoid the gap producing note spacing, print at as
+high a resolution as is available, don't use excessive
+beam slopes.
+
+In previous versions bagpipe.tex and by default in this version
+(i.e. unless
+you invoke \bsl{newgrace} or \bsl{multipart}),
+the after bar spacing is quite small to keep the
+distance from the bar to
+the first grace notes from being too large.
+If the bar began with a theme note, this resulted
+in too small a spacing, thus requiring that the
+bar begin with a \bsl{sk} or \bsl{psk} to alleviate this.
+This value is determined by
+\bsl{stdafterruleskip}. The Musi(c$|$x)TeX default is 4\bsl{Internote}.
+The default bagpipe.tex value is \bsl{Internote}.
+\bsl{newgrace} uses a different mechanism to set grace note
+spacing and does not suffer to the same degree.
+The \bsl{newgrace} value of \bsl{stdafterruleskip} is 3\bsl{Internote}.
+A similar problem can still occur between any pair of theme notes which
+do not have an embellishment in between. The solution is similar.
+
+In some tunes, it is difficult to squeeze four bars on a line.
+It may be better to just give up and use more paper.
+If you wish to persist, here are some techniques to save space.
+Set the width to \bsl{widewidth}. Set the \bsl{setelemq} to a number like 1.1.
+Use landscape or \bsl{realwidewidth}. Eliminate beginning of line bars
+unless there is a repeat on other than the
+first part. Use the reppickup macros. Use \bsl{musicsize}$=$16.
+
+Bagpipe.tex can be used by putting a \bsl{input bagpipe} at the
+beginning of your file. MusixTeX is the default. To use MusicTeX,
+the bagipe.tex file must be modified as described above.
+Alternatively, you can generate and use a bagpipe.fmt or a
+bagpipex.fmt file. The file bagpipe.ini may be used as the argument
+of initex to generate bagpipe.fmt (after the above modification to bagpipe.tex)
+and bagpipex.ini used to generate bagpipex.fmt.
+
+\bigskip
+\leftline{\twelvebf 9. MusixTex}
+
+The MusixTeX option is now the default. You may not shift between
+MusixTeX and MusicTeX in the same job.
+Be sure to read the fine MusixTeX manual.
+I give here a brief summary of the
+operation of MusixTeX and how it affects bagpipe.tex.
+On the first pass of MusixTeX over tune.tex, MusixTeX
+(via bagpipe.tex) generates
+a file tune.mx1 which contains the length of each line. The
+program musixflx is invoked to generate tune.mx2, which
+contains spatial scale factors for each line. A second
+pass of MusixTeX uses tune.mx2 (if available) to generate
+the final output. In principle, all the fussing needed to
+get good spacing with MusicTeX is done for you. For this
+to work, MusixTeX needs to know about ALL the space in the
+music. There must be NO extraneous white space. See the
+MusixTeX for descriptions of the likely symptoms and
+cures for extraneous space problems.
+
+This scheme can result in music which looks significantly
+different than with MusicTeX. In MusicTeX, only the glue
+is adjusted to fill out a line. In MusixTeX all spacing
+is adjusted. Glue is forbidden as are hard (not adjusted by
+musixflx) spaces. Putting glue on the beats and keeping the
+music within a beat relatively compact, gives results
+more in accord with usual bagpipe music setting practice than
+does MusixTeX. On the other hand, the MusixTeX scheme permits
+better looking ties because they don't have to stretch.
+
+Another area of different results peculiar to bagpipe music
+is the spacing of complex embellishments. Stretching the spaces
+within an embellishment can look ugly. This was a problem with
+the old grace note scheme that was cured with the new grace
+note scheme in MusicTeX. The fixed space used by the new grace
+scheme is not permitted by MusixTeX. For the old grace note
+scheme I just let them stretch. In the new grace note scheme
+I put the extra space before the embellishment and keep the
+embellishment itself compact. This may cause ugliness if
+the stretch is too large or too small.
+
+The musixtex option in bagpipe.tex \bsl{inputs} musixtex.tex
+and musixcpt.tex. The latter contains macros for compatibility
+with MusicTeX. Most of these are synonyms for macros whose
+names changed (usually to English from French) in MusixTeX.
+For a few such as \bsl{autolines}, the actual function has
+changed due to the fundamental difference between the packages.
+The default MusicTeX version has a number of synonyms for MusixTeX
+macros as an aid to backward compatibility for tunes coded in
+MusixTeX. These cover only a few of the most likely to be
+used macros and of course functions unique to MusixTeX cannot
+be handled by MusicTeX. If you care about other people
+using your settings, I recommend using the MusicTeX versions
+so that code is compatible with older bagpipe.tex versions.
+The synonyms are: \hfil\break
+ \bsl{en}~= \bsl{enotes},\hfil\break
+ \bsl{instrumentnumber}~= \bsl{nbinstruments},\hfil\break
+ \bsl{startpiece}~= \bsl{debutmorceau},\hfil\break
+ \bsl{bar}~= \bsl{barre},\hfil\break
+ \bsl{itie}~= \bsl{iten},\hfil\break
+ \bsl{ttie}~= \bsl{tten},\hfil\break
+ \bsl{contpiece}~= \bsl{reprmorceau},\hfil\break
+ \bsl{stoppiece}~= \bsl{suspmorceau},\hfil\break
+ \bsl{Stoppiece}~= \bsl{finmorceau},\hfil\break
+ \bsl{Endpiece}~= \bsl{finmorceau},\hfil\break
+ \bsl{leftrepeat}~= \bsl{leftrepeatsymbol},\hfil\break
+ \bsl{rightrepeat}~= \bsl{rightrepeatsymbol},\hfil\break
+ \bsl{setstaffs}1\#2~= \bsl{nbporteesi}\#2.
+
+\bigskip
+\leftline{\twelvebf 10. Concluding comments.}
+
+\bigskip
+
+The best way to understand this guide is to preview and study the
+examples. The ``example'' entitled quickref.tex is a sample sheet.
+It is often convenient to define a macro for each bar of music.
+Many definitions will then consist of previous bars, and the
+music proper will be mostly a list of bar macros.
+Using the template files and a good cut and paste type editor
+will save a lot of time.
+I have found that with practice it takes between
+one half and one hour to type-set a complex four part 6/8 march.
+This includes proofing and adjusting.
+A simple two part 3/4 march can be done in less than fifteen minutes.
+Send any comments, suggestions, or bug reports
+to walt@slac.stanford.edu .
+
+\vskip 0.5in
+Good luck and happy piping,
+
+Walt Innes
+
+\bye
diff --git a/macros/generic/bagpipe/bagpipe.ini b/macros/generic/bagpipe/bagpipe.ini
new file mode 100644
index 0000000000..546019d36e
--- /dev/null
+++ b/macros/generic/bagpipe/bagpipe.ini
@@ -0,0 +1,3 @@
+\input plain
+\input bagpipe
+\dump
diff --git a/macros/generic/bagpipe/bagpipe.tex b/macros/generic/bagpipe/bagpipe.tex
new file mode 100644
index 0000000000..607b5c1a1c
--- /dev/null
+++ b/macros/generic/bagpipe/bagpipe.tex
@@ -0,0 +1,1680 @@
+%
+% This is bagpipe.tex version 3.02
+%
+\def\bptversion{3.02}%
+\message{Version \bptversion\space -- May 27, 2014}%
+%
+% by Walt Innes (walt@slac.stanford.edu)
+%
+% Copyright Walt Innes. License is granted to distribute and use this product according to
+% the The LaTeX Project Public License (lp­pl1.3),
+% which may be found at http://www.ctan.org/license/lppl1.3.
+%
+%
+% This is a macro package for use with MusicTeX or MusiXTeX
+% by Daniel Taupin.
+% It is intended to aid the type setting of music for
+% Scottish Highland bagpipes. It contains a reasonably complete
+% set of definitions for grace notes and a mechanism for easily
+% defining any additional ones that might be needed for a particular
+% piece. There are also definitions for generating beamed note groups.
+% This package modifies a few macros in Musi(c|X)TeX. It has been tested
+% with MusicTeX version 5.20 and MusiXteX T.88.
+% It may not be compatible with
+% future releases of Musi(c|X)TeX. It is definitely not compatible
+% with releases earlier than MusicTeX 4.7.
+%
+% History:
+% 1.30 7/21/93 Changes in margin handling so that multipage documents
+% do odd/even margins automatically. Change beam structure for
+% groups of four notes with the two internal notes short.
+% \wideodd and \wideeven no longer exist. The user may define
+% them as being \widewidth for backward compatibility.
+%
+% 1.31 1/34/95 Fix oversight in newpitch and oldpitch macros for
+% \g and \G .
+%
+% 1.32 5/95 Minor spacing adjustments for \pscp and similar macros.
+%
+% 1.33 5/95 Adjust tight spacing code in an effort to prevent overlapping
+% notes.
+%
+% 1.40 5/95 Add additional pickup note macros so that the bar numbers can be
+% put after the pickup notes. Add \setelemq.
+%
+% 1.41 10/95 Add definitions for \h and \N to ease conversion of
+% oldpitch to newpitch
+%
+% 1.50 5/96 Add grace notes to match BMW. Add \medtall. Add \ggr{}.
+%
+% 1.51 5/96 Add more four note definitions.
+%
+% 1.52 6/96 Fix a duplicate macro name
+%
+% 1.53 6/13/96 Make changes to clean up the interface to MusicTeX 5.17
+%
+% 1.54 6/20/97 Change \landscape to use recommended \special
+%
+% 1.55 11/19/97 add \Afour and \USletter contributed by Phil Scott
+%
+% 1.56 12/19/97 add double dots and four new \bdddd macros
+% restore 11 pt fonts for small music grace notes
+% (9 pt fonts are broken)
+%
+% 1.57 01/15/98 some modifications of beam macros. 16/48 4 note beam
+% macros are known to not work with grace notes.
+% \bgrx work around for beam macro problems.
+%
+% 1.60 02/17/98 major change in the way grace notes are generated.
+% \notes..\enotes no longer used to change note
+% spacing if the \newgrace option is selected.
+% This eliminates a problem with some embedded
+% grace notes.
+%
+% 2.00 03/05/98 major changes to allow multiple parts: beam numbering,
+% [no]autoglue, some internal changes needed to make
+% things work on the extra staves,
+% a change in the way pickup notes are handled linked to
+% the [no]autoglue options. Remove \bgrx.
+%
+% 2.01 03/17/98 add \alabreve to accommodate a typo in bmw2tex
+%
+% 2.02 03/27/98 fix bug involving \newgrace and \staffspacing /= 1.
+%
+% 2.10 08/05/98 add switch for MusiXTeX
+%
+% 2.11 03/21/99 fix bug with edre and dare definitions
+%
+% 2.20 03/22/99 restore nine point fonts
+%
+% 2.21 03/13/00 fix bug in \btst. Bug report and fix by Peter Hurwood.
+%
+% 3.0 04/25/02 add many new embellishments for compatibility with bww
+%
+% 3.01 07/24/02 bug fixes submitted by Sven Axelsson. These fixes correct
+% problems with cadences.
+%
+% 3.02 05/27/14 make MusixTeX the default. Usage terms changed to the LaTeX Project Public License
+% ____________________________________________________________________
+%
+% load bagpipe.tex only once
+%
+\ifx\bagpipeisloaded\relax\endinput\else\let\bagpipeisloaded=\relax\fi
+%
+\let\usemusixtex\relax% this sets the flag to use MusixTeX instead of MusicTeX
+%
+%
+ \ifx\usemusixtex\undefined % the musictex version
+%
+ \input musicnft
+%
+% Select one set of nine point font declarations:
+%
+% \font\musicnine=musikn11% for use if 9pt fonts are not available (old, better solution below)
+% \font\beamnine=beamn11%
+%
+\font\musicnine=musikn11 at 9pt % for use with 16 pt musicsize
+\font\beamnine=beamn11 at 9pt %
+%
+ \input musictex%
+ \input musicvbm%
+%
+% at signs are now letters and can be used in control sequences
+ \def\makeatletter{\catcode`\@=11}
+% at signs are now not letters and can't be used in control sequences
+ \def\makeatother{\catcode`\@=12}
+%
+\else % the musixtex version
+ \input musixtex%
+ \font\musicnine=musix11 at 9pt% for use if 9pt fonts are not available
+% \font\musicnine=musix11% for use if 9pt fonts are not available
+ \input musixcpt%
+%
+\fi
+%
+% macros for setting page sizes and offsets. These have nothing do
+% with bagpipe music per se.
+% set default
+%
+\newcount\natv
+\newdimen\theoffset
+\newdimen\oddoffset\oddoffset=0.in%
+\newdimen\evenoffset\evenoffset=0.in%
+%
+\def\USletter{%
+ \hoffset=0.0in%
+ \hsize=7.0in%
+ \vsize=9.0in%
+ \voffset=0.in%
+% landscape works with Tom Rokicki's dvips.
+ \def\landscape{%
+ \special{papersize=11in,8.5in}\hoffset=0.in\hsize=9.0in\vsize=6.5in}%
+ \def\realwidewidth{%
+ \special{papersize=11in,8.5in}%
+ \hoffset=-10.0mm\voffset=-10mm\hsize=10in\vsize=6.5in}%
+% page layout tools
+ \def\normalwidth{\hsize=7.0in \oddoffset=-0.11in \evenoffset=-0.36in}%
+ \def\medwidewidth{\hsize=7.35in \oddoffset=-0.21in\evenoffset=-0.56in}%
+ \def\widewidth{\hsize=7.6in \oddoffset=-0.40in \evenoffset=-0.66in}%
+ \def\normalheight{\vsize=9.0in\voffset=0.in%
+ \def\makefootline{\baselineskip=0pt\line{\the\footline}}}%
+ \def\tall{\voffset=-.50in\vsize=10.25in%
+ \def\makefootline{\baselineskip=0pt\vskip-15pt\line{\the\footline}}}%
+ \def\medtall{\voffset=-.25in\vsize=9.5in%
+ \def\makefootline{\baselineskip=0pt\vskip-5pt\line{\the\footline}}}%
+}%
+%
+\def\Afour{%
+% set default
+% PSc was here 8-11-1997. These dimensions are modified for A4 paper
+ \hoffset=0.0in%
+ \hsize=160.0mm%
+ \vsize=247.0mm%
+ \voffset=0.in%
+% landscape works with Tom Rokicki's dvips.
+%
+% This is the (new) preferred dvips specification for landscape
+%
+ \def\landscape{%
+ \special{papersize=297mm,210mm}%
+ \voffset=-10.0mm\hoffset=0.0mm\hsize=247.0mm\vsize=175.0mm}%
+ \def\realwidewidth{%
+ \special{papersize=297mm,210mm}%
+ \hoffset=-10.0mm\voffset=-10mm\hsize=267.0mm\vsize=175.0mm}%
+% page layout tools
+ \def\normalwidth{\hsize=160.0mm \oddoffset=0.in \evenoffset=0.in}%
+ \def\medwidewidth{\hsize=170.0mm \hoffset=-5.0mm}%
+ \def\widewidth{\hsize=180.0mm \hoffset=-10.0mm}%
+ \def\normalheight{\vsize=247.0mm\voffset=0.in%
+ \def\makefootline{\baselineskip=0pt\line{\the\footline}}}%
+ \def\tall{\voffset=-.50in\vsize=10.25in%
+ \def\makefootline{\baselineskip=0pt\vskip-15pt\line{\the\footline}}}%
+}%
+%
+%
+\def\sectionedpagenumbers{%
+ \footline={\hss\tenrm\number\count1.\number\pageno\hss}}%
+\def\pagenumbers{%
+ \footline={\hss\tenrm\number\folio\hss}}%
+%
+%
+\USletter % set default paper size
+\pageno=1\normalwidth % set default page width and offset
+\nopagenumbers
+%
+% Speical ouput routine. This is needed to do different margins on
+% odd and even pages
+\output={%
+ \ifodd
+ \pageno\let\theoffset=\oddoffset
+ \else
+ \let\theoffset=\evenoffset
+ \fi
+ \shipout\vbox{%
+ \moveright\theoffset\vbox{\makeheadline\pagebody\makefootline}%
+ }%
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+ }%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\catcodesmusic% various special characters change category for music
+%
+\makeatletter% at signs are now letters and can used in control sequences
+%
+% extend musicnft to add a teenynotesize
+% this is helpful only for musicsize=20 since we have no font
+% smaller than eleven
+%
+% new width definitions which aid setting compressed music
+%
+\newdimen\pskwidth
+\newdimen\f@kwidth
+\newdimen\fskwidth%
+\ifx\mxversion\undefined
+ \def\set@teenynotesize{%
+ \def\beamfont{\beamteenyfont}%
+ \def\musicnfont{\musicteenyfont}%
+ \def\i@nterbeam{0.41\Interligne}%
+ \def\b@alkthick{0.130\Interligne}}%
+\else
+ \def\set@teenynotesize{\let\musixfont\musicteenyfont
+ \let\xgregfont\xgregtinyfont
+ \b@amthick\p@ne30\Interligne \interbeam.41\Interligne}%
+\fi
+%
+%
+\ifx\mxversion\undefined
+ \def\computespecifics{\ifnum\musicsize=0\relax\musicsize=20\relax\fi
+ \ifnum\musicsize=20\relax
+ \def\ppff{\ppfftwenty}%
+ \def\beamnorfont{\beamtwenty}\def\musicnorfont{\musictwenty}%
+ \def\beamsmallfont{\beamsixteen}\def\musicsmallfont{\musicsixteen}%
+ \def\beamtinyfont{\beamthirteen}\def\musictinyfont{\musicthirteen}%
+ \def\beamteenyfont{\beameleven}\def\musicteenyfont{\musiceleven}%
+ \def\meternorfont{\cmbx}\def\metersmallfont{\cmbxsmall}%
+ \def\metertinyfont{\cmbxtiny}\def\slurnorfont{\slurntwenty}%
+ \def\meterbigfont{\cmbxbig}%
+ \else
+ \def\ppff{\ppffsixteen}%
+ \def\beamnorfont{\beamsixteen}\def\musicnorfont{\musicsixteen}%
+ \def\beamsmallfont{\beamthirteen}\def\musicsmallfont{\musicthirteen}%
+ \def\beamtinyfont{\beameleven}\def\musictinyfont{\musiceleven}%
+ \def\beamteenyfont{\beamnine}\def\musicteenyfont{\musicnine}% if available
+ \def\meternorfont{\cmbxsmall}\def\metersmallfont{\cmbxtiny}%
+ \def\metertinyfont{\cmbxmicro}\def\slurnorfont{\slurnsixteen}%
+ \def\meterbigfont{\cmbx}%
+ \fi
+ \Interligne=\musicsize pt\divide\Interligne by 4\relax
+ \Internote=0.5\Interligne %%%%%
+ \interbeam=\i@nterbeam
+ \computeqn@w}%
+\else
+ \def\comput@fonts{%
+ \ifnum\musicsize=\sixt@@n
+ \let\musicLargefont\musictwentyfour
+ \let\musiclargefont\musictwenty
+ \let\musicnorfont\musicsixteen
+ \let\musicsmallfont\musicthirteen
+ \let\musictinyfont\musiceleven
+ \let\musicteenyfont\musicnine
+ \let\xgregLargefont\xgregtwentyfour
+ \let\xgreglargefont\xgregtwenty
+ \let\xgregnorfont\xgregsixteen
+ \let\xgregsmallfont\xgregthirteen
+ \let\xgregtinyfont\xgregeleven
+ \let\slurd\slurdsixteen \let\sluru\slurusixteen
+ \let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen
+ \let\meternorfont\tenbf \let\metersmallfont\eightbf
+ \let\meterbigfont\twelvebf \let\meterlargefont\bigfont
+ \let\meterLargefont\Bigfont
+ \let\ppff\ppffsixteen
+ \else\ifnum\musicsize=\@xxiv
+ \let\musicLargefont\musictwentynine
+ \let\musiclargefont\musictwentynine
+ \let\musicnorfont\musictwentyfour
+ \let\musicsmallfont\musictwenty
+ \let\musictinyfont\musicsixteen
+ \let\musicteenyfont\musicthirteen
+ \let\xgregLargefont\xgregtwentynine
+ \let\xgreglargefont\xgregtwentynine
+ \let\xgregnorfont\xgregtwentyfour
+ \let\xgregsmallfont\xgregtwenty
+ \let\xgregtinyfont\xgregsixteen
+ \let\sluru\slurutwenty \let\slurd\slurdtwenty
+ \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty
+ \let\meternorfont\bigfont \let\metersmallfont\twelvebf
+ \let\meterbigfont\Bigfont \let\meterlargefont\BIgfont
+ \let\meterlargefont\BIGfont
+ \let\ppff\ppfftwentyfour
+ \else\ifnum\musicsize=\@xxix
+ \let\musicLargefont\musictwentynine
+ \let\musiclargefont\musictwentynine
+ \let\musicnorfont\musictwentynine
+ \let\musicsmallfont\musictwentyfour
+ \let\musictinyfont\musictwenty
+ \let\musicteenyfont\musicsixteen
+ \let\xgregLargefont\xgregtwentynine
+ \let\xgreglargefont\xgregtwentynine
+ \let\xgregnorfont\xgregtwentynine
+ \let\xgregsmallfont\xgregtwentyfour
+ \let\xgregtinyfont\xgregtwenty
+ \let\sluru\slurutwenty \let\slurd\slurdtwenty
+ \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty
+ \let\slurud\slurutwentyd \let\slurdd\slurdtwentyd % +ickd
+ \let\hslurud\hslurutwentyd \let\hslurdd\hslurdtwentyd %+ickd
+ \let\meternorfont\Bigfont \let\metersmallfont\bigfont
+ \let\meterbigfont\BIgfont \let\meterlargefont\BIGfont
+ \let\meterLargefont\BIGfont
+ \let\ppff\ppfftwentynine
+ \else
+ \ifnum\musicsize=\tw@nty
+ \else\ifnum\musicsize=\z@
+ \else\errmessage{\noexpand\musicsize=\the\musicsize\space not supported, set to default of 20}%
+ \fi
+ \fi\musicsize\tw@nty
+ \let\musicLargefont\musictwentynine
+ \let\musiclargefont\musictwentyfour
+ \let\musicnorfont\musictwenty
+ \let\musicsmallfont\musicsixteen
+ \let\musictinyfont\musicthirteen
+ \let\musicteenyfont\musiceleven
+ \let\xgreglargefont\xgregtwentyfour
+ \let\xgregLargefont\xgregtwentynine
+ \let\xgregnorfont\xgregtwenty
+ \let\xgregsmallfont\xgregsixteen
+ \let\xgregtinyfont\xgregthirteen
+ \let\sluru\slurutwenty \let\slurd\slurdtwenty
+ \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty
+ \let\meternorfont\twelvebf \let\metersmallfont\tenbf
+ \let\meterbigfont\bigfont \let\meterlargefont\Bigfont
+ \let\meterLargefont\BIgfont
+ \let\ppff\ppfftwenty
+ \fi\fi\fi
+ }%
+\fi
+%
+\ifx\mxversion\undefined
+ \def\computeqn@w{%
+ \setbox\ch@box=\hbox{\w@h}\wn@width=\wd\ch@box
+ \setbox\ch@box=\hbox{\s@bv}\sb@width=\wd\ch@box
+ \setbox\ch@box=\hbox{\b@rv}\bv@width=\wd\ch@box
+ \setbox\ch@box=\hbox{\c@arrg}\gr@width=\wd\ch@box
+ \setbox\ch@box=\hbox{\h@a}\hn@width=\wd\ch@box
+ \setbox\ch@box=\hbox{\q@u}\qn@width=\wd\ch@box
+ \qd@skip=\qn@width\advance\qd@skip by -\hlthick
+ \hd@skip=\hn@width\advance\hd@skip by -\hlthick
+ \wd@skip=\wn@width\advance\wd@skip by -\hlthick
+ \setpskwidth\setf@kwidth\setfskwidth}%
+\else
+ \def\comput@sizes{%
+ \Interligne\fontdimen\fiv@\musicnorfont
+ \Internote\h@lf\Interligne \big@spc.6\Interligne
+ \qn@width\fontdimen\si@\musixfont
+ \wn@width1\qu@rt\qn@width
+ \txt@ff\h@lf\qn@width
+ \qd@skip\qn@width\advance\qd@skip-\hlthick
+ \setpskwidth\setf@kwidth\setfskwidth}%
+\fi
+%
+% add teeny fonts
+%
+\ifx\mxversion\undefined
+ \def\teenynotesize{\set@teenynotesize\computespecifics
+ \def\currentsize{\teenynotesize}}%
+\else
+ \def\teenynotesize{\set@teenynotesize\comput@specifics
+ \let\curr@ntsiz@\teenynotesize}%
+\fi
+%
+%
+\ifx\mxversion\undefined
+ \def\begininstrument{\global\advance\noinstrument by 1\relax
+ \selectinstr\resetstem
+ \ifdim\internote<0.60\Internote\csname set@teenynotesize\endcsname
+ \computespecifics
+ \else
+ \ifdim\internote<0.76\Internote\csname set@tinynotesize\endcsname
+ \computespecifics
+ \else
+ \ifdim\internote<0.95\Internote\csname set@smallnotesize\endcsname
+ \computespecifics
+ \else
+ \csname currentsize\endcsname
+ \fi
+ \fi
+ \fi
+ \global\noportee=0\relax\beginstaff
+ }%
+\else
+ \def\p@six{.6}%
+ \def\begininstrument{\advance\noinstrum@nt\@ne \s@l@ctinstr
+ \ifdim\internote<\p@six0\Internote \set@teenynotesize \comput@sizes
+ \else
+ \ifdim\internote<\p@seven6\Internote \set@tinynotesize \comput@sizes
+ \else
+ \ifdim\internote<.95\Internote \set@smallnotesize \comput@sizes
+ \else
+ \ifdim\internote<1.19\Internote \set@normalnotesize \comput@sizes
+ \else
+ \ifdim\internote<1.43\Internote \set@largenotesize \comput@sizes
+ \else
+ \set@Largenotesize \comput@sizes
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \noport@@\z@ \beginstaff}%
+\fi
+%
+% modify flag macros so that they tolerate very compressed music better.
+%
+\ifx\mxversion\undefined
+ \def\adv@locx@mqn{\advance\locx@skip by -\f@kwidth}%
+\else
+ \def\C@b#1#2{%
+ \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi
+ \ifnum\n@ii>\n@v #1\fi
+ \loop
+ \advance\n@v\m@ne
+ \ifnum\n@ii=\n@v {\advance\locx@skip-\f@kwidth#2}\fi
+ \ifnum\n@v>\@ne \repeat}%
+\fi
+%
+% define some more skip macros
+\ifx\mxversion\undefined
+ \def\psk{\off\pskwidth}%
+ \def\f@k{\off\f@kwidth}%
+ \let\fsk=\f@k%
+ \def\bqsk{\off{1.3\qn@width}}%
+ \def\abqsk{\off{2.0\qn@width}}%
+ \def\nqsk{\off{-1.4\qn@width}}%
+ \def\tqsk{\off{2.5\qn@width}}%
+ \def\fgsk{\off{1.0\qn@width}}%
+ \def\setpskwidth{\ifdim 1.5\qn@width > \noteskip
+ \pskwidth=0.75\qn@width \else \pskwidth=0.5\noteskip \fi}%
+ \def\setf@kwidth{\ifdim 1.6\qn@width>\noteskip
+ \f@kwidth=.6\noteskip \else \f@kwidth=\qn@width \fi}%
+ \def\setfskwidth{\ifdim 1.6\qn@width>\noteskip
+ \fskwidth=.6\noteskip \else \fskwidth=\qn@width \fi}%
+\else
+ \def\psk{\off\pskwidth}%
+ \def\f@k{\off\f@kwidth}%
+ \def\fsk{\off\fskwidth}%
+ \def\bqsk{\off{1.3\qn@width}}%
+ \def\abqsk{\off{2.0\qn@width}}%
+ \def\nqsk{\off{-1.4\qn@width}}%
+ \def\tqsk{\off{2.2\qn@width}}%
+ \def\fgsk{\off{1.0\qn@width}}%
+ \def\vbqsk{\off{1.3\elemskip}}%
+ \def\vnabqsk{\off{1.0\elemskip}}%
+% \def\abqsk{\off{1.0\elemskip}}%
+% \def\nqsk{\off{-0.85\elemskip}}%
+ \def\vtqsk{\off{2.5\elemskip}}%
+% \def\setpskwidth{\ifdim 1.5\qn@width > \noteskip
+% \pskwidth=0.75\elemskip \else \pskwidth=0.5\noteskip \fi}%
+ \def\setpskwidth{\pskwidth=0.7\noteskip}%
+ \def\setf@kwidth{\ifdim 1.6\qn@width>\noteskip
+ \f@kwidth=.6\noteskip \else \f@kwidth=\qn@width \fi}%
+ \def\setfskwidth{\fskwidth=0.5\noteskip}%
+\fi
+%
+%
+\ifx\mxversion\undefined
+ \def\notes{\ifdim \elemskip<1.2\qn@width
+ \noteskip=1.2\qn@width \n@otes \else \vnotes 1.0\elemskip \fi
+ \setpskwidth\setf@kwidth\setfskwidth
+ \def\sf{\ccl f}}%
+\else
+ \def\notes{\vnotes 2.0\elemskip
+ \def\sf{\ccl f}}%
+\fi
+%
+% note spacings for grace notes
+%
+\ifx\mxversion\undefined
+ \def\gnotes{\ifdim .35\elemskip<0.75\qn@width
+ \noteskip=0.75\qn@width\n@otes \else \vnotes 0.35\elemskip \fi
+ }% teeny note spacing for grace notes
+ \def\Gnotes{\ifdim .7\elemskip<.9\qn@width
+ \noteskip=.9\qn@width\n@otes \else \vnotes 0.7\elemskip \fi
+ }% spacing between grace notes & normal notes
+ \def\GNotes{\ifdim .7\elemskip<1.2\qn@width
+ \noteskip=1.2\qn@width\n@otes \else \vnotes 0.7\elemskip \fi
+ }% spacing between grace notes & normal notes
+ \def\hnotes{\ifdim .7\elemskip<\qn@width
+ \noteskip=\qn@width\n@otes \else \vnotes 0.5\elemskip \fi
+ }% half of a note spacing
+\else
+ \def\gnotes{\vnotes 1.0\elemskip
+ }% teeny note spacing for grace notes
+ \def\Gnotes{\vnotes 1.5\elemskip
+ }% spacing between grace notes & normal notes
+ \def\GNotes{\vnotes 2.0\elemskip
+ }% spacing between grace notes & normal notes
+ \def\hnotes{\vnotes 1.0\elemskip
+ }% half of a note spacing
+\fi
+%
+\ifx\mxversion\undefined
+ \def\setelemq#1{\elemskip=#1\qn@width}%
+ \setelemq{1.6} % the default is unfortunate.
+\else
+ \def\setelemq#1{\relax}%
+ \autolines{8}{8}{48}%
+\fi
+%
+\makeatother% at signs are no longer letters
+%
+% some synonyms to make some music set for musixtex work with musictex
+%
+\ifx\mxversion\undefined
+ \let\en\enotes
+ \let\instrumentnumber\nbinstruments
+ \let\startpiece\debutmorceau
+ \let\bar\barre
+ \let\itie\iten
+ \let\ttie\tten
+ \let\contpiece\reprmorceau
+ \let\stoppiece\suspmorceau
+ \let\Stoppiece\finmorceau
+ \let\Endpiece\finmorceau
+ \let\leftrepeat\leftrepeatsymbol
+ \let\rightrepeat\rightrepeatsymbol
+ \def\setstaffs#1#2{natv#1\relax
+ \csname nbportees\romannumeral\natv\endcsname#2}%
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\nbinstruments{1}% bagpipe music is written for one instrument
+% % although this could be redefined to add more.
+%
+% for multipart scores, set the number of staves and turn off auto glue
+% insertion
+% after beamed groups
+\def\multipart#1{\noautoglue\newgrace\nbporteesi=#1}%
+%
+\parindent=0pt%
+%
+\transpose=7
+\def\N{N}%
+\def\G{N}% define some alternate pitch names to allow
+\def\a{a}% consistent readable identifiers
+\def\b{b}%
+\def\c{c}%
+\def\d{d}%
+\def\e{e}%
+\def\f{f}%
+\def\g{g}%
+\def\A{h}%
+\def\h{h}%
+%
+% in pipe music melody notes are normally stem down, and since there are
+% only 9 pitches, let's define explicit macros for each note
+%
+\def\whG{\wh N}% whole notes
+\def\whN{\wh N}%
+\def\wha{\wh a}%
+\def\whb{\wh b}%
+\def\whc{\wh c}%
+\def\whd{\wh d}%
+\def\whe{\wh e}%
+\def\whf{\wh f}%
+\def\whg{\wh G}%
+\def\whA{\wh h}%
+\def\whh{\wh h}%
+%
+\def\hG{\hl N}% half notes
+\def\hN{\hl N}%
+\def\ha{\hl a}%
+\def\hb{\hl b}%
+\def\hc{\hl c}%
+\def\hd{\hl d}%
+\def\he{\hl e}%
+\def\hf{\hl f}%
+\def\hg{\hl g}%
+\def\hA{\hl h}%
+\def\hh{\hl h}%
+%
+\def\qlG{\ql N}% quarter notes
+\def\qlN{\ql N}%
+\def\qla{\ql a}%
+\def\qlb{\ql b}%
+\def\qlc{\ql c}%
+\def\qld{\ql d}%
+\def\qle{\ql e}%
+\def\qlf{\ql f}%
+\def\qlg{\ql g}%
+\def\qlA{\ql h}%
+\def\qlh{\ql h}%
+%
+\def\cG{\cl N}% eighth notes
+\def\cN{\cl N}%
+\def\ca{\cl a}%
+\def\cb{\cl b}%
+\def\cc{\cl c}%
+\def\cd{\cl d}%
+\def\ce{\cl e}%
+\def\cf{\cl f}%
+\def\cg{\cl g}%
+\def\cA{\cl h}%
+\def\ch{\cl h}%
+%
+\def\sG{\ccl N}% sixteenth notes
+\def\sN{\ccl N}%
+\def\sa{\ccl a}%
+\def\sb{\ccl b}%
+\def\sc{\ccl c}%
+\def\sd{\ccl d}%
+\def\se{\ccl e}%
+\def\sf{\ccl f}% caution : this redefines a macro used for sforzando
+\def\sg{\ccl g}%
+\def\sA{\ccl h}%
+\let\shp\sh%
+\def\sh{\ccl h}% caution : this redefines a macro for sharps
+%
+\def\tG{\cccl N}% thirtysecond notes
+\def\tN{\cccl N}%
+\def\ta{\cccl a}%
+\def\tb{\cccl b}%
+\def\tc{\cccl c}%
+\def\td{\cccl d}%
+\def\te{\cccl e}%
+\def\tf{\cccl f}%
+\def\tg{\cccl g}%
+\def\tA{\cccl h}%
+\def\th{\cccl h}%
+%
+\def\sfG{\ccccl N}% sixty-fourth notes
+\def\sfN{\ccccl N}%
+\def\sfa{\ccccl a}%
+\def\sfb{\ccccl b}%
+\def\sfc{\ccccl c}%
+\def\sfd{\ccccl d}%
+\def\sfe{\ccccl e}%
+\def\sff{\ccccl f}%
+\def\sfg{\ccccl g}%
+\def\sfA{\ccccl h}%
+\def\sfh{\ccccl h}%
+%
+\def\bG{\qb0N}% beam notes
+\def\bN{\qb0N}%
+\def\ba{\qb0a}%
+\def\bb{\qb0b}%
+\def\bc{\qb0c}%
+\def\bd{\qb0d}%
+\def\be{\qb0e}%
+\def\bf{\qb0f}%
+\def\bg{\qb0g}%
+\def\bA{\qb0h}%
+\def\bh{\qb0h}%
+%
+\def\bGp{\qbp0N\psk}% dotted beam notes
+\def\bNp{\qbp0N\psk}%
+\def\bap{\qbp0a\psk}%
+\def\bbp{\qbp0b\psk}%
+\def\bcp{\qbp0c\psk}%
+\def\bdp{\qbp0d\psk}%
+\def\bep{\qbp0e\psk}%
+\def\bfp{\qbp0f\psk}%
+\def\bgp{\qbp0g\psk}%
+\def\bAp{\qbp0h\psk}%
+\def\bhp{\qbp0h\psk}%
+%
+\def\bGpp{\qbpp0N\psk\psk}% double dotted beam notes
+\def\bNpp{\qbpp0N\psk\psk}%
+\def\bapp{\qbpp0a\psk\psk}%
+\def\bbpp{\qbpp0b\psk\psk}%
+\def\bcpp{\qbpp0c\psk\psk}%
+\def\bdpp{\qbpp0d\psk\psk}%
+\def\bepp{\qbpp0e\psk\psk}%
+\def\bfpp{\qbpp0f\psk\psk}%
+\def\bgpp{\qbpp0g\psk\psk}%
+\def\bApp{\qbpp0h\psk\psk}%
+\def\bhpp{\qbpp0h\psk\psk}%
+%
+% macros for dotted notes
+%
+\def\hp#1{\hl{.#1}\psk}%
+\def\qlp#1{\ql{.#1}\psk}% caution : this redefines a macro used for rests
+\def\cp#1{\cl{.#1}\psk}%
+\def\sp#1{\ccl{.#1}\psk}%
+\def\tp#1{\cccl{.#1}\psk}%
+\def\sfp#1{\cccl{.#1}\psk}%
+%
+% macros for double dotted notes
+%
+\def\hpp#1{\hlpp{#1}\psk\psk}%
+\makeatletter% at signs are now letters and can used in control sequences
+\ifx\usemusixtex\relax
+ \def\qlpp#1{\q@symbol\@qlpp{#1}\psk}%
+\else
+ \def\qlpp#1{\advancetrue\qlpp@z{#1}\psk}%
+\fi
+\makeatother% at signs are no longer letters
+\def\cpp#1{\clpp{#1}\psk\psk}%
+% some macros for beginning and ending grace note sequences
+%
+\def\tns{\teenynotesize}%
+%
+\ifx\mxversion\undefined
+ \def\nns{\ifdim\internote<0.76\Internote\tinynotesize
+ \else\ifdim\internote<0.95\Internote\smallnotesize
+ \else \normalnotesize
+ \fi\fi}%
+\else
+ \def\nns{\ifdim\internote<0.76\Internote\tinynotesize
+ \else\ifdim\internote<0.95\Internote\smallnotesize
+ \else\ifdim\internote<1.19\Internote\normalnotesize
+ \else\ifdim\internote<1.43\Internote\largenotesize
+ \else \Largenotesize
+ \fi\fi\fi\fi}%
+\fi
+%
+\def\gnss{\enotes\gnotes\tns}%
+\def\Gnss{\enotes\Gnotes\tns}%
+\def\GNss{\enotes\GNotes\tns}%
+\def\enn{\enotes\notes}%
+\def\etn{\enotes\temps\notes}%
+%\def\ehn{\enotes\hnotes}%
+\def\bart{\barre\temps}%
+\ifx\mxversion\undefined\relax\else\def\temps{\notes\sk\enotes}\fi
+%
+%
+\def\backput#1{\rlap{\off{-1.0\noteskip}#1}}
+%
+% the old way of doing grace notes
+\def\oldgrace{%
+ \ifx\mxversion\undefined\def\stdafterruleskip{\Internote}\else\relax\fi
+% simple grace notes
+ \def\Grace##1{\GNss\cccu {##1}\enn}%
+ \def\Echo##1{\GNss\ccu {##1}\enn}%
+ \def\Them##1{\GNss\cu {##1}\enn}%
+% general complex grace note macros
+% for transposed pitch specification ( N - h )
+ \ifx\mxversion\undefined
+ \def\multigr##1##2##3{\gnss\ibbbu1{##1}0\qh1{##2}\tbu1\Gnss\qh1{##3}\enn}%
+ \def\smultigr##1##2##3##4{\gnss\ibbbu1{##1}{##2}\qh1{##3}\Gnss\tbu1\qh1{##4}\enn}%
+ \else
+ \def\multigr##1##2##3{\gnss\ibbbu1{##1}0\qh1{##2}\tbu1%\Gnss
+ \qh1{##3}\off{0.6\elemskip}\enn}%
+ \def\smultigr##1##2##3##4{\gnss\ibbbu1{##1}{##2}\qh1{##3}%\Gnss
+ \tbu1\qh1{##4}\off{0.6\elemskip}\enn}%
+ \fi
+}% end \def\oldgrace
+%
+%
+% the new way of doing grace notes
+\def\newgrace{%
+% general complex grace note macros
+% for transposed pitch specification ( N - h )
+ \ifx\mxversion\undefined
+ \def\stdafterruleskip{3\Internote}%
+% general complex grace note macros
+% for transposed pitch specification ( N - h )
+% for simple grace notes
+ \def\Grace##1{\tns\zcccu##1\tqsk\nns}%
+ \def\Echo##1{\tns\zccu##1\tqsk\nns}%
+ \def\Them##1{\tns\zcu##1\tqsk\nns}%
+ \def\multigr##1##2##3{\tns\ibbbu1{##1}0\vargr##2\end\nqsk\tbu1\zqh1##3\abqsk\nns}%
+ \def\smultigr##1##2##3##4{\tns\ibbbu1{##1}{##2}\vargr##3\end\nqsk\tbu1\zqh1##4\abqsk\nns}%
+ \def\cadt##1##2##3##4{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\abqsk\zqh1##3\abqsk\tbbbu1\tbbu1\tbu1\zqh1##4\abqsk\nns}%
+ \def\cadf##1##2##3{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\abqsk\tbu1\zqh1##3\abqsk\nns}%
+ \def\cadl##1##2##3{\tns\ibu1{##1}0\zqh1##2\abqsk\tbbbu1\tbbu1\tbu1\zqh1##3\abqsk\nns}%
+ \def\tra{\tns\ibbu1c0\zqh1N\bqsk\nbbbu1\zqh1d\bqsk\tbbbu1\tbu1\zqh1c\abqsk\nns}%
+ \def\trac{\tns\ibu1c0\zqh1N\bqsk\nbbbu1\zqh1d\bqsk\tbbbu1\tbbu1\tbu1\zqh1c\abqsk\nns}%
+ \def\chelalho{\tns\ibu1e0\zqh1f\bqsk\nbbbu1\zqh1d\bqsk\tbbbu1\tbu1\zqh1e\abqsk\nns}%
+ \def\darodos{\tns\ibbu1e0\zqh1N\bqsk\nbbbu1\zqh1d\bqsk\zqh1N\bqsk\tbbbu1\zqh1c\bqsk\tbu1\zqh1N\abqsk\nns}%
+ \def\fcadt##1##2##3##4##5{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\abqsk\pointdorgue##5\zqh1##3\abqsk\tbbbu1\tbbu1\tbu1\zqh1##4\abqsk\nns}%
+ \def\fcadf##1##2##3##4{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\abqsk\tbu1\pointdorgue##4\zqh1##3\abqsk\nns}%
+ \def\fcadl##1##2##3##4{\tns\ibu1{##1}0\pointdorgue##4\zqh1##2\abqsk\tbbbu1\tbbu1\tbu1\zqh1##3\abqsk\nns}%
+ \else
+% for simple grace notes
+ \def\Grace##1{\vtqsk\llap{\tns\zcccu##1\tqsk\nns}}%
+ \def\Echo##1{\vtqsk\llap{\tns\zccu##1\tqsk\nns}}%
+ \def\Them##1{\vtqsk\llap{\tns\zcu##1\tqsk\nns}}%
+ \def\multigr##1##2##3{\varsp##2\end\vnabqsk
+ \llap{\tns\ibbbu1{##1}0\vargr##2\end\nqsk\tbu1\zqh1##3\abqsk\nns}}%
+ \def\smultigr##1##2##3##4{\varsp##3\end\vnabqsk
+ \llap{\tns\ibbbu1{##1}{##2}\vargr##3\end\nqsk\tbu1\zqh1##4\abqsk\nns}}%
+ \def\cadt##1##2##3##4{\vbqsk\vbqsk\vnabqsk
+ \llap{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\bqsk\zqh1##3\bqsk\tbbbu1\tbbu1\tbu1\zqh1##4\abqsk\nns}}%
+ \def\cadf##1##2##3{\vbqsk\vnabqsk
+ \llap{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\bqsk\tbu1\zqh1##3\abqsk\nns}}%
+ \def\cadl##1##2##3{\vbqsk\vnabqsk
+ \llap{\tns\ibu1{##1}0\zqh1##2\bqsk\tbbbu1\tbbu1\tbu1\zqh1##3\abqsk\nns}}%
+ \def\tra{\vbqsk\vbqsk\vnabqsk
+ \llap{\tns\ibbu1c0\zqh1N\bqsk\nbbbu1\zqh1d\bqsk\tbbbu1\tbu1\zqh1c\abqsk\nns}}%
+ \def\trac{\vbqsk\vbqsk\vnabqsk
+ \llap{\tns\ibu1c0\zqh1N\bqsk\nbbbu1\zqh1d\bqsk\tbbbu1\tbbu1\tbu1\zqh1c\abqsk\nns}}%
+ \def\chelalho{\vbqsk\vbqsk\vnabqsk
+ \llap{\tns\ibu1e0\zqh1f\bqsk\nbbbu1\zqh1d\bqsk\tbbbu1\tbu1\zqh1e\abqsk\nns}}%
+ \def\darodos{\vbqsk\vbqsk\vbqsk\vbqsk\vnabqsk
+ \llap{\tns\ibbu1e0\zqh1N\bqsk\nbbbu1\zqh1d\bqsk\zqh1N\bqsk\tbbbu1\zqh1c\bqsk\tbu1\zqh1N\abqsk\nns}}%
+ \def\fcadt##1##2##3##4##5{\vbqsk\vbqsk\vnabqsk
+ \llap{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\bqsk\pointdorgue##5\zqh1##3\bqsk\tbbbu1\tbbu1\tbu1\zqh1##4\abqsk\nns}}%
+ \def\fcadf##1##2##3##4{\vbqsk\vnabqsk
+ \llap{\tns\ibu1{##1}0\rlap{\fgsk\tbbbu1\tbbu1}\zqh1##2\bqsk\tbu1\pointdorgue##4\zqh1##3\abqsk\nns}}%
+ \def\fcadl##1##2##3##4{\vbqsk\vnabqsk
+ \llap{\tns\ibu1{##1}0\pointdorgue##4\zqh1##2\bqsk\tbbbu1\tbbu1\tbu1\zqh1##3\abqsk\nns}}%
+ \fi
+}% end \def\new grace
+%
+\oldgrace % make the old grace note scheme the default
+%
+% compatible with new and old grace
+%
+% obsolete old grace note macros
+\def\grace#1{\Gnss\cccu {#1}\enn}%
+%
+% for non transposed pitch specification ( g - o ) (old way)
+\def\omultigr#1#2#3{\gnss\ibbbu1{`#1}0\qh1{#2}\tbu1\Gnss\qh1{`#3}\enn}%
+\def\osmultigr#1#2#3#4{\gnss\ibbbu1{`#1}{#2}\qh1{#3}\Gnss\tbu1\qh1{`#4}\enn}%
+%
+% the tricky variable argument number macro for new grace
+\def\vargr#1{\zqh1#1\bqsk\ifx#1\end\let\next=\relax\else\let\next=\vargr\fi\next}%
+% the note counting spacing macro for the muxiXtex version of the \newgrace scheme
+\def\varsp#1{\vbqsk\ifx#1\end\let\next=\relax\else\let\next=\varsp\fi\next}%
+%
+% make any sequence of notes grace notes (good for piobaireachd) (old way)
+% may cause problems when embedded in certain beamed note sequences
+% not compatible with multipart music.
+\def\ggr#1{\gnss #1\enn\psk}%
+%
+%
+%
+% now for the actual grace note definitions
+%
+% simple grace notes and strikes
+%
+\def\grG{\Grace N}%
+\def\grN{\Grace N}%
+\def\gra{\Grace a}%
+\def\grb{\Grace b}%
+\def\grc{\Grace c}%
+\def\grd{\Grace d}%
+\def\gre{\Grace e}%
+\def\grf{\Grace f}%
+\def\grg{\Grace g}%
+\def\grA{\Grace h}%
+\def\grh{\Grace h}%
+%
+%
+% doublings
+%
+\def\dblright#1{\smultigr e{-4}{g#1}d}%
+\def\dblG{\dblright{N}}%
+\def\dblN{\dblright{N}}%
+\def\dbla{\dblright{a}}%
+\def\dblb{\dblright{b}}%
+\def\dblc{\dblright{c}}%
+\def\dbld{\multigr f{gd}e}%
+\def\dble{\multigr f{ge}f}%
+\def\dblf{\multigr f{gf}g}%
+\def\dblg{\multigr fgf}% this is the same as \hdblG
+\def\dblA{\multigr fhg}% this is the same as \hdblA
+\let\dblh\dblA
+%
+% half doublings
+%
+\def\hdblright#1{\smultigr c{4}{#1}d}%
+\def\hdblG{\hdblright{N}}%
+\def\hdblN{\hdblright{N}}%
+\def\hdbla{\hdblright{a}}%
+\def\hdblb{\hdblright{b}}%
+\def\hdblc{\hdblright{c}}%
+\def\hdbld{\multigr dde}%
+\def\hdble{\multigr eef}%
+\def\hdblf{\multigr ffg}%
+\let\hdblg\dblg
+\let\hdblA\dblA
+\let\hdblh\dblA
+%
+% thumb doublings
+%
+\def\tdblright#1{\smultigr f{-4}{h#1}d}%
+\def\tdblG{\tdblright{N}}%
+\def\tdblN{\tdblright{N}}%
+\def\tdbla{\tdblright{a}}%
+\def\tdblb{\tdblright{b}}%
+\def\tdblc{\tdblright{c}}%
+\def\tdbld{\multigr f{hd}e}%
+\def\tdble{\multigr f{he}f}%
+\def\tdblf{\multigr f{hf}g}%
+\def\tdblg{\multigr f{hg}f}%
+%
+% slurred doublings
+%
+\def\sdblright#1{\smultigr e{-4}{g#1d#1}N}%
+\def\sdbla{\sdblright{a}}%
+\def\sdblb{\sdblright{b}}%
+\def\sdblc{\sdblright{c}}%
+\def\sdbld{\multigr f{gded}N}%
+\def\sdble{\multigr f{gefe}a}%
+\def\sdblf{\multigr f{gfgf}a}%
+\def\sdblg{\multigr f{gfg}a}%
+\def\sdblG{\multigr f{gfg}a}%
+\def\sdblA{\multigr f{hgh}a}%
+\def\sdblh{\multigr f{hgh}a}%
+%
+% slurred half doublings
+%
+\def\shdblright#1{\smultigr d{-3}{#1d#1}N}%
+\def\shdbla{\shdblright{a}}%
+\def\shdblb{\shdblright{b}}%
+\def\shdblc{\shdblright{c}}%
+\def\shdbld{\multigr f{ded}N}%
+\def\shdble{\multigr f{efe}a}%
+\def\shdblf{\multigr f{fgf}a}%
+\def\shdblg{\multigr f{gfg}a}%
+\def\shdblG{\multigr f{gfg}a}%
+\def\shdblA{\multigr f{hgh}a}%
+\def\shdblh{\multigr f{hgh}a}%
+%
+% slurred thumb doublings
+%
+\def\stdblright#1{\smultigr g{-4}{h#1d#1}N}%
+\def\stdbla{\stdblright{a}}%
+\def\stdblb{\stdblright{b}}%
+\def\stdblc{\stdblright{c}}%
+\def\stdbld{\multigr g{hded}N}%
+\def\stdble{\multigr g{hefe}a}%
+\def\stdblf{\multigr g{hfgf}a}%
+\def\stdblg{\multigr g{hfg}a}%
+\def\stdblG{\multigr g{hfg}a}%
+\def\stdblA{\multigr g{hgh}a}%
+\def\stdblh{\multigr g{hgh}a}%
+%
+% shaken doublings
+%
+%\def\shkdblright#1{\smultigr e{-4}{g#1d#1}N}%
+%\def\shkdbla{\shkdblright{a}}%
+%\def\shkdblb{\shkdblright{b}}%
+%\def\shkdblc{\shkdblright{c}}%
+\def\shkdbld{\multigr f{gded}c}%
+%\def\shkdble{\multigr f{gefe}a}%
+%\def\shkdblf{\multigr f{gfgf}e}%
+%\def\shkdblg{\multigr f{gfg}e}%
+%\def\shkdblG{\multigr f{gfg}e}%
+%
+% shaken thumb doublings
+%
+%\def\shtdblright#1{\smultigr g{-4}{h#1d#1}N}%
+%\def\shtdbla{\shtdblright{a}}%
+%\def\shtdblb{\shtdblright{b}}%
+%\def\shtdblc{\shtdblright{c}}%
+\def\shtdbld{\multigr g{hded}c}%
+%\def\shtdble{\multigr g{hefe}a}%
+%\def\shtdblf{\multigr g{hfgf}a}%
+%\def\shtdblg{\multigr g{hfg}a}%
+%\def\shtdblG{\multigr g{hfg}a}%
+%\def\shtdblA{\multigr g{hgh}a}%
+%\def\shtdblh{\multigr g{hgh}a}%
+%
+%
+% double grace notes
+%
+\def\dblgr#1#2{\multigr #1#1#2}
+\def\ddgrN{\dblgr dN}
+\def\ddgra{\dblgr da}
+\def\ddgrb{\dblgr db}
+\def\ddgrc{\dblgr dc}
+\def\edgrN{\dblgr eN}
+\def\edgra{\dblgr ea}
+\def\edgrb{\dblgr eb}
+\def\edgrc{\dblgr ec}
+\def\edgrd{\dblgr ed}
+\def\fdgrN{\dblgr fN}
+\def\fdgra{\dblgr fa}
+\def\fdgrb{\dblgr fb}
+\def\fdgrc{\dblgr fc}
+\def\fdgrd{\dblgr fd}
+\def\fdgre{\dblgr fe}
+\def\gdgrN{\dblgr gN}
+\def\gdgra{\dblgr ga}
+\def\gdgrb{\dblgr gb}
+\def\gdgrc{\dblgr gc}
+\def\gdgrd{\dblgr gd}
+\def\gdgre{\dblgr ge}
+\def\gdgrf{\dblgr gf}
+\def\tdgrN{\dblgr hN}
+\def\tdgra{\dblgr ha}
+\def\tdgrb{\dblgr hb}
+\def\tdgrc{\dblgr hc}
+\def\tdgrd{\dblgr hd}
+\def\tdgre{\dblgr he}
+\def\tdgrf{\dblgr hf}
+\def\tdgrg{\dblgr hg}
+%
+% miscellaneous common complex grace notes
+%
+\def\thrwd{\multigr d{Nd}c}%
+\def\hthrwd{\smultigr d{-1}{d}c}%
+\let\Nthrwd\hthrwd%
+\let\Gthrwd\hthrwd%
+\let\gthrwd\hthrwd%
+\def\thrwf{\multigr g{feg}e}%
+\def\gripthrwd{\multigr e{NdN}c}%
+\def\hgripthrwd{\multigr d{dN}c}%
+\def\grip{\multigr c{Nd}N}% also used for leumluaths and throws on b and c
+\def\dgrip{\multigr c{Nb}N}%
+\def\ggrip{\multigr cdN}%
+\let\Ggrip\ggrip%
+\let\Ngrip\ggrip%
+\def\taor{\multigr d{NdN}e}%
+\def\Ntaor{\multigr d{dN}e}%
+\let\Gtaor\Ntaor%
+\let\gtaor\Ntaor%
+\def\dtaor{\multigr d{NbN}e}%
+\def\ahtaor{\multigr e{da}e}%
+%
+% birls
+%
+\def\birl{\multigr c{aNa}N}%
+\def\sbirl{\multigr e{gaNa}N}%
+\def\wbirl{\multigr c{Na}N}%
+\def\tbirl{\multigr g{haNa}N}%
+%
+% slurs (sometimes called slaps)
+%
+\def\slur#1{\smultigr f{-8}{g#1}N}%
+\def\slura{\slur a}%
+\def\slurb{\slur b}%
+\def\slurc{\slur c}%
+\def\slurd{\slur d}%
+\def\slure{\smultigr f{-8}{ge}a}%
+\def\slurf{\smultigr f{-8}{gf}a}%
+\let\slapa\slura% slapx is a synonym for slurx
+\let\slapb\slurb
+\let\slapc\slurc
+\let\slapd\slurd
+\let\slape\slure
+\let\slapf\slurf
+%
+% half slurs (half slaps)
+%
+\def\hslur#1{\smultigr c{-4}{#1}N}%
+\def\hslura{\hslur a}%
+\def\hslurb{\hslur b}%
+\def\hslurc{\hslur c}%
+\def\hslurd{\hslur d}%
+\def\hslure{\smultigr c{-4}ea}%
+\def\hslurf{\smultigr d{-4}fa}%
+\let\hslapa\hslura
+\let\hslapb\hslurb
+\let\hslapc\hslurc
+\let\hslapd\hslurd
+\let\hslape\hslure
+\let\hslapf\hslurf
+%
+% thumb slurs (thumb slaps)
+%
+\def\tslur#1{\smultigr g{-8}{h#1}N}%
+\def\tslura{\tslur a}%
+\def\tslurb{\tslur b}%
+\def\tslurc{\tslur c}%
+\def\tslurd{\tslur d}%
+\def\tslure{\smultigr g{-8}{he}a}%
+\def\tslurf{\smultigr g{-8}{hf}a}%
+\let\tslapa\tslura
+\let\tslapb\tslub
+\let\tslapc\tslurc
+\let\tslapd\tslurd
+\let\tslape\tslure
+\let\tslapf\stslurf
+%
+% shakes
+%
+\let\shka\slura
+\let\shkb\slurb
+\let\shkc\slurc
+\def\shkd{\smultigr g{-3}{gd}c}%
+\def\shke{\smultigr g{-2}{ge}a}%
+\def\shkf{\smultigr g{-1}{gf}e}%
+\def\shkg{\smultigr h{-1}{hg}e}%
+\def\shkG{\smultigr h{-1}{hg}e}%
+%
+% half shakes
+%
+\let\hshka\hslura
+\let\hshkb\hslurb
+\let\hshkc\hslurc
+\let\hshkd\hthrwd%
+\def\hshke{\smultigr e{-1}{e}a}%
+\def\hshkf{\smultigr f{-1}{f}e}%
+\def\hshkg{\smultigr g{-1}{g}e}%
+\def\hshkG{\smultigr g{-1}{g}e}%
+%
+% thumb shakes
+%
+\let\tshka\tslura
+\let\tshkb\tslurb
+\let\tshkc\tslurc
+\def\tshkd{\smultigr g{-3}{hd}c}%
+\def\tshke{\smultigr g{-2}{he}a}%
+\def\tshkf{\smultigr g{-1}{hf}e}%
+%
+% catches
+%
+\def\catcha{\multigr d{aNd}N}%
+\def\catchb{\multigr d{bNd}N}%
+\def\catchc{\multigr d{cNd}N}%
+\def\catchd{\multigr d{dNb}N}%
+\def\catche{\multigr e{eNd}N}%
+\def\scatcha{\smultigr g{-3}{gaNd}N}%
+\def\scatchb{\smultigr g{-3}{gbNd}N}%
+\def\scatchc{\smultigr g{-3}{gcNd}N}%
+\def\scatchd{\smultigr g{-3}{gdNb}N}%
+\def\scatche{\smultigr g{-3}{geNd}N}%
+\def\tcatcha{\smultigr h{-3}{haNd}N}%
+\def\tcatchb{\smultigr h{-3}{hbNd}N}%
+\def\tcatchc{\smultigr h{-3}{hcNd}N}%
+\def\tcatchd{\smultigr h{-3}{hdNb}N}%
+\def\tcatche{\smultigr h{-3}{heNd}N}%
+%
+% double strikes
+%
+\def\dstra{\multigr a{Na}N}%
+\let\dstrb\dgrip %
+\def\dstrc{\multigr c{Nc}N}%
+\let\dstrd=\grip %
+\def\dstre{\multigr e{ae}a}%
+\def\dstrf{\multigr f{ef}e}%
+\def\ldstrd{\multigr d{cd}c}%
+%
+% g double strikes
+%
+\let\gdstra\sbirl
+\def\gdblstr#1#2{\multigr f{g#1#2#1}#2}%
+\def\gdstrb{\gdblstr bN}%
+\def\gdstrc{\gdblstr cN}%
+\def\gdstrd{\gdblstr dN}%
+\def\gdstre{\gdblstr ea}%
+\def\gdstrf{\gdblstr fe}%
+\def\lgdstrd{\multigr d{dcd}c}%
+%
+% thumb double strikes
+%
+\let\tdstra\tbirl
+\def\tdblstr#1#2{\multigr g{h#1#2#1}#2}%
+\def\tdstrb{\tdblstr bN}%
+\def\tdstrc{\tdblstr cN}%
+\def\tdstrd{\tdblstr dN}%
+\def\tdstre{\tdblstr ea}%
+\def\tdstrf{\tdblstr fe}%
+\def\tdstrg{\tdblstr gf}%
+\def\ltdstrd{\multigr g{hdcd}c}%
+%
+% half double strikes
+%
+\let\hdstra\grip
+\def\hdblstr#1#2{\multigr #1{#1#2#1}#2}%
+\def\hdstrb{\hdblstr bN}%
+\def\hdstrc{\hdblstr cN}%
+\def\hdstrd{\hdblstr dN}%
+\def\hdstre{\hdblstr ea}%
+\def\hdstrf{\hdblstr fe}%
+\def\hdstrg{\hdblstr gf}%
+\def\hdstrh{\hdblstr hg}%
+\def\lhdstrd{\multigr d{dcd}c}%
+%
+%
+% triple strikes
+%
+\def\tstra{\multigr a{NaNa}N}%
+\def\tstrb{\multigr b{NbNb}N}%
+\def\tstrc{\multigr c{NcNc}N}%
+\def\tstrd{\multigr d{NdNd}N}
+\def\ltstrd{\multigr d{cdcd}c}%
+\def\tstre{\multigr e{aeae}a}%
+\def\tstrf{\multigr f{efef}e}%
+\def\tstrg{\multigr f{fgfg}f}%
+\def\tstrh{\multigr g{ghgh}g}%
+%
+% g triple strikes
+%
+\def\gtrpstr#1#2{\multigr f{g#1#2#1#2#1}#2}%
+\def\gtstra{\gtrpstr aN}%
+\def\gtstrb{\gtrpstr bN}%
+\def\gtstrc{\gtrpstr cN}%
+\def\gtstrd{\gtrpstr dN}%
+\def\gtstre{\gtrpstr ea}%
+\def\gtstrf{\gtrpstr fe}%
+\def\lgtstrd{\gtrpstr dc}%
+%
+% thumb triple strikes
+%
+\def\ttrpstr#1#2{\multigr g{h#1#2#1#2#1}#2}%
+\def\ttstra{\ttrpstr aN}%
+\def\ttstrb{\ttrpstr bN}%
+\def\ttstrc{\ttrpstr cN}%
+\def\ttstrd{\ttrpstr dN}%
+\def\ttstre{\ttrpstr ea}%
+\def\ttstrf{\ttrpstr fe}%
+\def\ttstrg{\ttrpstr gf}%
+\def\lttstrd{\ttrpstr dc}%
+%
+% half triple strikes
+%
+\def\htrpstr#1#2{\multigr #1{#1#2#1#2#1}#2}%
+\def\htstra{\htrpstr aN}%
+\def\htstrb{\htrpstr bN}%
+\def\htstrc{\htrpstr cN}%
+\def\htstrd{\htrpstr dN}%
+\def\htstre{\htrpstr ea}%
+\def\htstrf{\htrpstr fe}%
+\def\htstrg{\htrpstr gf}%
+\def\htstrh{\htrpstr hg}%
+\def\lhtstrd{\htrpstr dc}%
+%
+% peles aka hornpipe shakes
+%
+\def\pel#1{\multigr g{g#1e#1}N}%
+\def\pelb{\pel b}%
+\def\pelc{\pel c}%
+\def\peld{\pel d}%
+\def\pele{\multigr g{gefe}a}%
+\def\lpeld{\multigr g{gded}c}%
+%
+\def\tpel#1{\multigr g{h#1e#1}N}%
+\def\tpelb{\tpel b}%
+\def\tpelc{\tpel c}%
+\def\tpeld{\tpel d}%
+\def\tpele{\multigr g{hefe}a}%
+\def\ltpeld{\multigr g{hded}c}%
+%
+\def\hpel#1{\multigr e{#1e#1}N}%
+\def\hpelb{\hpel b}%
+\def\hpelc{\hpel c}%
+\def\hpeld{\hpel d}%
+\def\hpele{\multigr f{efe}a}%
+\def\lhpeld{\multigr f{ded}c}%
+%
+%%%%%%%%%%%% piobaireachd grace notes %%%%%%%%%%%%%%%%%%%%%%
+%
+% echoes
+%
+\def\echoG{\Echo N}%
+\def\echoN{\Echo N}%
+\def\echoa{\Echo a}%
+\def\echob{\Echo b}%
+\def\echoc{\Echo c}%
+\def\echod{\Echo d}%
+\def\echoe{\Echo e}%
+\def\echof{\Echo f}%
+\def\echog{\Echo g}%
+\def\echoA{\Echo h}%
+\def\echoh{\Echo h}%
+%
+% themal grace notes
+%
+\def\themG{\Them N}%
+\def\themN{\Them N}%
+\def\thema{\Them a}%
+\def\themb{\Them b}%
+\def\themc{\Them c}%
+\def\themd{\Them d}%
+\def\theme{\Them e}%
+\def\themf{\Them f}%
+\def\themg{\Them g}%
+\def\themA{\Them h}%
+\def\themh{\Them h}%
+%
+\def\crun{\multigr e{NdNeaf}a}%
+\def\dcrun{\multigr e{NbNeaf}a}%
+\def\crunf{\multigr e{eaf}a}%
+\def\crunme{\multigr f{feg}e}%
+\def\crunmd{\multigr e{edf}d}%
+\def\crunmc{\multigr e{NdNcecf}c}%
+\def\crunmb{\multigr e{NdNbebf}b}%
+\def\ahcrun{\multigr e{daeaf}a}%
+\def\Nhcrun{\multigr e{dNeaf}a}%
+\def\crunbr{\multigr e{NdNeNf}N}%
+\def\dcrunbr{\multigr e{NbNeNf}N}%
+\def\ahcrunbr{\multigr e{dNeNf}N}%
+%
+\def\dre{\multigr e{aeaf}a}%
+\def\edre{\multigr e{eaf}a}%
+\def\edreb{\multigr e{ebf}b}%
+\def\edrec{\multigr e{ecf}c}%
+\let\edred\crunmd% same as crunmd
+\let\dare\thrwf% same as thrwf
+\def\gedre{\multigr f{geaf}a}%
+\def\gdare{\multigr f{gfeg}e}%
+\def\tedre{\multigr g{heaf}a}%
+\def\tdare{\multigr g{hfeg}e}%
+\def\tchechere{\multigr g{hgeh}e}%
+\def\hdre{\multigr f{af}a}%
+\def\hedale{\multigr g{eg}e}%
+\def\hchechere{\multigr g{eh}e}%
+\def\hedari{\multigr f{geh}e}%
+\let\Nedre\scatchb
+\let\aedre\scatchc
+%
+\def\deda{\multigr e{Ne}N}%
+%
+\def\bain#1{\multigr d{#1Nd}N}%
+\def\enbain{\bain a}%
+\def\otro{\bain b}%
+\def\odro{\bain c}%
+\def\adela{\multigr e{dNe}N}%
+\def\gbain#1{\multigr f{g#1Nd}N}%
+\def\genbain{\gbain a}%
+\def\gotro{\gbain b}%
+\def\godro{\gbain c}%
+\def\gadela{\gbain d}%
+\def\tbain#1{\multigr g{h#1Nd}N}%
+\def\tenbain{\tbain a}%
+\def\totro{\tbain b}%
+\def\todro{\tbain c}%
+\def\tadela{\tbain d}%
+%
+\def\hiharin{\multigr d{daNa}N}%
+%
+\def\dbstf{\multigr g{fg}f}%
+\def\dbsth{\multigr g{gh}g}%
+\let\dstrg\dbstf%
+\let\dstrh\dbsth%
+
+%
+\def\darodo{\multigr d{NdNc}N}%
+\def\gdarodo{\multigr d{dNc}N}%
+\let\Gdarodo\gdarodo
+\def\Ndarodo{\multigr d{dNc}N}%
+\let\bubbly\darodo% bubbly is a synonym for darodo
+\let\Nbubbly\Ndarodo
+\let\gbubbly\gdarodo
+\let\Gbubbly\gdarodo
+%
+\def\cadged{\cadt gged}
+\def\cadhed{\cadt hhed}
+\def\cadge{\cadf gge}
+\def\cadgf{\cadf ggf}
+\def\caded{\cadl eed}
+\def\cadhe{\cadf hhe}
+\def\fcadged{\fcadt ggedj}
+\def\fcadhed{\fcadt hhedk}
+\def\fcadge{\fcadf ggej}
+\def\fcadgf{\fcadf ggfj}
+\def\fcaded{\fcadl eedh}
+\def\fcadhe{\fcadf hhek}
+\def\fcade{\tns\pointdorgue g\zcu e\tqsk\nns}
+%
+% macros for switching between pitch schemes
+%
+\def\oldpitch{%
+\def\g{N}%
+\def\G{g}%
+\def\whg{\wh N}%
+\def\whG{\wh g}%
+\def\hg{\hl N}%
+\def\hG{\hl g}%
+\def\qlg{\ql N}%
+\def\qlG{\ql g}%
+\def\cg{\cl N}%
+\def\cG{\cl g}%
+\def\sg{\ccl N}%
+\def\sG{\ccl g}%
+\def\tg{\cccl N}%
+\def\tG{\cccl g}%
+\def\sfg{\ccccl N}%
+\def\sfG{\ccccl g}%
+\def\bg{\qb0 N}%
+\def\bG{\qb0 g}%
+\def\bgp{\qbp0 N\psk}%
+\def\bGp{\qbp0 g\psk}%
+\def\grg{\Grace N}%
+\def\grG{\Grace g}%
+\def\dblg{\dblright{N}}%
+\def\dblG{\multigr fgf}% this is the same as \hdblG
+\def\hdblg{\hdblright{N}}%
+\def\hdblG{\multigr fgf}%
+\def\tdblg{\tdblright{N}}%
+\def\tdblG{\multigr f{hg}f}%
+}%
+\def\newpitch{%
+\def\g{g}%
+\def\G{N}%
+\def\whG{\wh N}%
+\def\whg{\wh g}%
+\def\hG{\hl N}%
+\def\hg{\hl g}%
+\def\qlG{\ql N}%
+\def\qlg{\ql g}%
+\def\cG{\cl N}%
+\def\cg{\cl g}%
+\def\sG{\ccl N}%
+\def\sg{\ccl g}%
+\def\tG{\cccl N}%
+\def\tg{\cccl g}%
+\def\sfG{\ccccl N}%
+\def\sfg{\ccccl g}%
+\def\bG{\qb0 N}%
+\def\bg{\qb0 g}%
+\def\bGp{\qbp0 N\psk}%
+\def\bgp{\qbp0 g\psk}%
+\def\grG{\Grace N}%
+\def\grg{\Grace g}%
+\def\dblG{\dblright{g}}%
+\def\dblg{\multigr fgf}% this is the same as \hdblG
+\def\hdblG{\hdblright{g}}%
+\def\hdblg{\multigr fgf}%
+\def\tdblg{\multigr f{hg}f}%
+\def\tdblG{\tdblright{N}}%
+}%
+%
+% some options concerning automatic insertion of glue and spacing of
+% pickup notes
+%
+% \autoglue causes glue to be inserted after beamed note groups
+% \noautoglue turns this feature off
+\def\autoglue{\def\bmend{\etn}\def\ttn{\etn\etn}%
+% for pickup notes
+ \def\pickup##1{\notes\qsk##1\enotes\advance\barno by -1\relax\xbarre}%
+ \ifx\mxversion\undefined
+ \def\reppickup##1{%
+ \advance\barno by -1\relax\reprmorceau\notes\fsk##1\enotes\xbarre}%
+ \def\repreppickup##1{\advance\barno by -1\relax\reprmorceau%
+ \rlap\leftrepeatsymbol\notes\sk\fsk##1\fsk\enotes\xbarre}%
+ \else
+ \def\reppickup##1{%
+ \advance\barno by -1\relax\reprmorceau\notes\qsk##1\enotes\xbarre}%
+ \def\repreppickup##1{\advance\barno by -1\relax\reprmorceau%
+% \rlap\leftrepeatsymbol\notes\sk\qsk##1\qsk\enotes\xbarre}%
+ \leftrepeatsymbol\notes\psk##1\psk\enotes\xbarre}%
+ \fi
+}%
+%
+\def\noautoglue{%
+ \def\bmend{}\def\ttn{\etn}%
+% for pickup notes
+ \def\pickup##1{\notes##1\enotes\advance\barno by -1\relax\xbarre}%
+ \def\reppickup##1{%
+ \advance\barno by -1\relax\reprmorceau\notes##1\enotes\xbarre}%
+ \ifx\mxversion\undefined
+ \def\repreppickup##1{\advance\barno by -1\relax\reprmorceau%
+ \rlap\leftrepeatsymbol\notes\sk\fsk\enn##1\enotes\xbarre}%
+ \else
+ \def\repreppickup##1{\advance\barno by -1\relax\reprmorceau%
+% \rlap\leftrepeatsymbol\notes\sk\qsk\enn##1\enotes\xbarre}%
+ \leftrepeatsymbol\notes\psk##1\psk\enotes\xbarre}%
+ \fi
+}%
+% the default is to automatically insert glue after beamed note groups
+\autoglue
+% note that autoglue is incompatible with multipart settings and is
+% turned off by \multipart
+%
+% definitions for beamed combinations
+%
+% first for explicit arrangements of note pairs
+%
+\makeatletter
+%
+\def\pcc#1#2{\Ibl0#1{#2}1\qb0{#1}\tbl0\qb0{#2}\bmend}%
+\def\pcgc#1#2#3{\Ibl0#1{#3}4\qb0#1#2\tbl0\qb0#3\bmend}%
+\def\pcs#1#2{\Ibl0{#1}{#2}1\qb0{#1}\tbbl0\tbl0\qb0{#2}\bmend}%
+\def\pcps#1#2{\Ibl0{#1}{#2}1\qbp0{#1}\psk\tbbl0\tbl0\qb0{#2}\bmend}%
+\def\pcgs#1#2#3{\Ibl0{#1}{#3}2\qb0{#1}#2\tbbl0\tbl0\qb0{#3}\bmend}%
+\def\pcpgs#1#2#3{\Ibl0{#1}{#3}2\qbp0{#1}\psk#2\tbbl0\tbl0\qb0{#3}\bmend}%
+\def\psc#1#2{\Ibbl0{#1}{#2}1\rlap{\f@k\tbbl0}\qb0{#1}\tbl0\qb0{#2}\bmend}%
+\def\pscp#1#2{\Ibbl0{#1}{#2}1\rlap{\f@k\tbbl0}\qb0{#1}\tbl0\qbp0{#2}\psk\bmend}%
+\def\psgc#1#2#3{\Ibl0{#1}{#3}2\rlap{\f@k\tbbl0}\qb0{#1}#2\tbl0\qb0{#3}\bmend}%
+\def\psgcp#1#2#3{%
+ \Ibl0{#1}{#3}3\rlap{\f@k\tbbl0}\qb0{#1}#2\tbl0\qbp0{#3}\psk\bmend}%
+%
+\def\pss#1#2{\Ibbl0{#1}{#2}1\qb0{#1}\tbl0\qb0{#2}}%
+\def\psgs#1#2#3{\Ibbl0#1{#3}4\qb0#1#2\tbl0\qb0#3}%
+\def\pst#1#2{\Ibbl0{#1}{#2}1\qb0{#1}\tbbbl0\tbl0\qb0{#2}}%
+\def\pspt#1#2{\Ibbl0{#1}{#2}1\qbp0{#1}\psk\tbbbl0\tbl0\qb0{#2}}%
+\def\psgt#1#2#3{\Ibbl0{#1}{#3}2\qb0{#1}#2\tbbbl0\tbl0\qb0{#3}}%
+\def\pspgt#1#2#3{\Ibbl0{#1}{#3}2\qbp0{#1}\psk#2\tbbbl0\tbl0\qb0{#3}}%
+\def\pts#1#2{\Ibbbl0{#1}{#2}1\rlap{\f@k\tbbbl0}\qb0{#1}\tbl0\qb0{#2}}%
+\def\ptsp#1#2{\Ibbbl0{#1}{#2}1\rlap{\f@k\tbbbl0}\qb0{#1}\tbl0\qbp0{#2}\psk}%
+\def\ptgs#1#2#3{\Ibbl0{#1}{#3}2\rlap{\f@k\tbbbl0}\qb0{#1}#2\tbl0\qb0{#3}}%
+\def\ptgsp#1#2#3{\Ibbl0{#1}{#3}2\rlap{\f@k\tbbbl0}\qb0{#1}#2\tbl0\qbp0{#3}\psk}%
+%
+\def\ptt#1#2{\Ibbbl0{#1}{#2}1\qb0{#1}\tbl0\qb0{#2}}%
+%
+% now more general definitions where the beam is specified first and then
+% the notes.
+%
+% pairs
+%
+\def\bcc#1#2#3#4#5{\Ibl0#1#2#3#4\tbl0#5\bmend}%
+\def\bss#1#2#3#4#5{\Ibbl0#1#2#3#4\tbl0#5\psk}%
+\def\btt#1#2#3#4#5{\Ibbbl0#1#2#3#4\tbl0#5\psk}%
+%
+\def\bcs#1#2#3#4#5{\Ibl0#1#2#3#4\tbbl0\tbl0#5\bmend}%
+\def\bsc#1#2#3#4#5{\Ibl0#1#2#3\rlap{\f@k\tbbl0}#4\tbl0#5\bmend}%
+\def\bst#1#2#3#4#5{\Ibbl0#1#2#3#4\tbbbl0\tbl0#5\bmend}%
+\def\bts#1#2#3#4#5{\Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4\tbl0#5\bmend}%
+\def\bct#1#2#3#4#5{\Ibl0#1#2#3#4\tbbbl0\tbbl0\tbl0#5\bmend}%
+\def\btc#1#2#3#4#5{\Ibl0#1#2#3\rlap{\f@k\tbbbl0\tbbl0}#4\tbl0#5\bmend}%
+%\def\bct#1#2#3#4#5{%
+%\enotes\hnotes\Ibl0#1#2#3#4\nbbbl0\sk\tbbbl0\tbbbl0\tbl0#5\bmend}%
+%\def\btc#1#2#3#4#5{\enotes\hnotes\Ibbbl0#1#2#3#4\tbbbl0\tbbl0\sk\tbl0#5\bmend}%
+%
+% triplets
+%
+\def\bccc#1#2#3#4#5#6{\Ibl0#1#2#3#4#5\tbl0#6\bmend}%
+\def\bsss#1#2#3#4#5#6{\Ibbl0#1#2#3#4#5\tbl0#6\bmend}%
+\def\bttt#1#2#3#4#5#6{\Ibbbl0#1#2#3#4#5\tbl0#6\psk}%
+%
+\def\bccs#1#2#3#4#5#6{\Ibl0#1#2#3#4#5\tbbl0\tbl0#6\bmend}%
+\def\bcsc#1#2#3#4#5#6{\Ibl0#1#2#3#4\tbbl0#5\tbl0#6\bmend}%
+\def\bscc#1#2#3#4#5#6{\Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\tbl0#6\bmend}%
+%
+\def\bcss#1#2#3#4#5#6{\Ibl0#1#2#3#4\nbbl0#5\tbl0#6\bmend}%
+\def\bscs#1#2#3#4#5#6{\Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\tbbl0\tbl0#6\bmend}%
+\def\bssc#1#2#3#4#5#6{\Ibbl0#1#2#3#4\tbbl0#5\tbl0#6\bmend}%
+%
+\def\bsst#1#2#3#4#5#6{\Ibbl0#1#2#3#4#5\tbbbl0\tbl0#6\enn}%
+\def\bsts#1#2#3#4#5#6{\Ibbl0#1#2#3#4\tbbbl0#5\tbl0#6\enn}%
+\def\btss#1#2#3#4#5#6{\Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4#5\tbl0#6\enn}%
+%
+\def\bstt#1#2#3#4#5#6{\Ibbl0#1#2#3#4\nbbbl0#5\tbl0#6\psk}%
+\def\btst#1#2#3#4#5#6{\Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4#5\tbbbl0\tbl0#6\psk}%
+\def\btts#1#2#3#4#5#6{\Ibbbl0#1#2#3#4\tbbbl0#5\tbl0#6\psk}%
+%
+\def\bcst#1#2#3#4#5#6{\Ibl0#1#2#3#4\nbbl0#5\tbbbl0\tbl0#6\bmend}%
+\def\bsct#1#2#3#4#5#6{\Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\tbbbl0\tbbl0\tbl0#6\bmend}%
+\def\bcts#1#2#3#4#5#6{\Ibl0#1#2#3#4\nbbl0\rlap{\f@k\tbbbl0}#5\tbl0#6\bmend}%
+\def\bstc#1#2#3#4#5#6{\Ibbl0#1#2#3#4\tbbbl0\tbbl0#5\tbl0#6\bmend}%
+\def\btsc#1#2#3#4#5#6{\Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4\tbbl0#5\tbl0#6\bmend}%
+\def\btcs#1#2#3#4#5#6{\Ibl0#1#2#3\rlap{\f@k\tbbbl0\tbbl0}#4#5\tbbl0\tbl0#6\bmend}%
+%
+% quadruplets
+%
+% all the same
+%
+\def\bcccc#1#2#3#4#5#6#7{\Ibl0#1#2#3#4#5#6\tbl0#7\bmend}%
+\def\bssss#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4#5#6\tbl0#7\bmend}%
+\def\btttt#1#2#3#4#5#6#7{\Ibbbl0#1#2#3#4#5#6\tbl0#7\bmend}%
+%
+% 3 c's, 1 s
+%
+\def\bcccs#1#2#3#4#5#6#7{\Ibl0#1#2#3#4#5#6\tbbl0\tbl0#7\bmend}%
+\def\bccsc#1#2#3#4#5#6#7{\Ibl0#1#2#3#4#5\tbbl0#6\tbl0#7\bmend}%
+\def\bcscc#1#2#3#4#5#6#7{\Ibl0#1#2#3#4\tbbl0#5#6\tbl0#7\bmend}%
+\def\bsccc#1#2#3#4#5#6#7{\Ibbl0#1#2#3\rlap{\f@k\tbbl0}#4#5#6\tbl0#7\bmend}%
+%
+% 2 c's, 2 s's
+%
+\def\bccss#1#2#3#4#5#6#7{\Ibl0#1#2#3#4#5\nbbl0#6\tbl0#7\bmend}%
+\def\bcscs#1#2#3#4#5#6#7{\Ibl0#1#2#3#4\tbbl0#5#6\tbbl0\tbl0#7\bmend}%
+\def\bcssc#1#2#3#4#5#6#7{\Ibl0#1#2#3#4\tbbl0#5\rlap{\f@k\tbbl0}#6\tbl0#7\bmend}%
+\def\bsccs#1#2#3#4#5#6#7{\Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5#6\tbbl0\tbl0#7\bmend}%
+\def\bscsc#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\rlap{\f@k\tbbl0}#6\tbl0#7\bmend}%
+\def\bsscc#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4\tbbl0#5#6\tbl0#7\bmend}%
+%
+% 2 c's, 1 s, 1 t
+%
+\def\bccst#1#2#3#4#5#6#7{\Ibl0#1#2#3#4#5\nbbl0#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\bccts#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3#4#5\nbbl0\rlap{\f@k\tbbbl0}#6\tbl0#7\bmend}%
+\def\bcstc#1#2#3#4#5#6#7{\Ibl0#1#2#3#4\nbbl0#5\tbbbl0\tbbl0#6\tbl0#7\bmend}%
+\def\bctsc#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3#4\nbbl0\rlap{\f@k\tbbbl0}#5\tbbl0#6\tbl0#7\bmend}%
+\def\bstcc#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4\tbbbl0\tbbl0#5#6\tbl0#7\bmend}%
+\def\btscc#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4\tbbl0#5#6\tbl0#7\bmend}%
+%
+% 1 c, 3 s's
+%
+\def\bcsss#1#2#3#4#5#6#7{\Ibl0#1#2#3#4\nbbl0#5#6\tbbl0\tbl0#7\bmend}%
+\def\bscss#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\nbbl0#6\tbl0#7\bmend}%
+\def\bsscs#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4\tbbl0#5#6\tbbl0\tbl0#7\bmend}%
+\def\bsssc#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4#5\tbbl0#6\tbl0#7\bmend}%
+%
+% 1 c, 2 s's, 1 t
+%
+\def\bcsst#1#2#3#4#5#6#7{\Ibl0#1#2#3#4\nbbl0#5#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\bcsts#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3#4\nbbl0#5\rlap{\f@k\tbbbl0}#6\tbbl0\tbl0#7\bmend}%
+\def\bscst#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\nbbl0#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\bscts#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3\rlap{\f@k\tbbl0}#4#5\nbbl0\rlap{\f@k\tbbbl0}#6\tbbl0\tbl0#7\bmend}%
+\def\bstcs#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3#4\tbbbl0\tbbl0#5#6\tbbl0\tbl0#7\bmend}%
+\def\btscs#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4\tbbl0#5#6\tbbl0\tbl0#7\bmend}%
+\def\bstsc#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3#4\tbbbl0\tbbl0#5\rlap{\f@k\tbbl0}#6\tbl0#7\bmend}%
+\def\btssc#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4\tbbl0#5\rlap{\f@k\tbbl0}#6\tbl0#7\bmend}%
+\def\btcss#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3\rlap{\f@k\tbbbl0\tbbl0}#4#5\nbbl0#6\tbl0#7\bmend}%
+\def\bctss#1#2#3#4#5#6#7{%
+ \Ibl0#1#2#3#4\tbbbl0\tbbl0#5\nbbl0#6\tbbl0\tbl0#7\bmend}%
+\def\bssct#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3#4\tbbl0#5#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\bsstc#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3#4\tbbl0#5\rlap{\f@k\tbbbl0\tbbl0}#6\tbl0#7\bmend}%
+%
+% 3 s's, 1 t
+%
+\def\bssst#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4#5#6\tbbbl0\tbl0#7\bmend}%
+\def\bssts#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4#5\tbbbl0#6\tbl0#7\bmend}%
+\def\bstss#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4\tbbbl0#5#6\tbl0#7\bmend}%
+\def\btsss#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4#5#6\tbbl0\tbl0#7\bmend}%
+%
+% 2 s's, 2 t's
+%
+\def\bsstt#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4#5\nbbbl0#6\tbl0#7\bmend}%
+\def\bstst#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4\tbbbl0#5#6\tbbbl0\tbl0#7\bmend}%
+\def\bstts#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3#4\tbbbl0#5\rlap{\f@k\tbbbl0}#6\tbl0#7\bmend}%
+\def\btsst#1#2#3#4#5#6#7{\Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4#5#6\tbbbl0\tbl0#7\bmend}%
+\def\btsts#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4#5\rlap{\f@k\tbbbl0}#6\tbl0#7\bmend}%
+\def\bttss#1#2#3#4#5#6#7{\Ibbbl0#1#2#3#4\tbbbl0#5#6\tbl0#7\bmend}%
+%
+% 1 s, 3 t's
+%
+\def\bsttt#1#2#3#4#5#6#7{\Ibbl0#1#2#3#4\nbbbl0#5#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\btstt#1#2#3#4#5#6#7{%
+ \Ibbl0#1#2#3\rlap{\f@k\tbbbl0}#4#5\nbbbl0#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\bttst#1#2#3#4#5#6#7{%
+ \Ibbbl0#1#2#3#4\tbbbl0#5#6\tbbbl0\tbbl0\tbl0#7\bmend}%
+\def\bttts#1#2#3#4#5#6#7{\Ibbbl0#1#2#3#4#5\tbbbl0#6\tbbl0\tbl0#7\bmend}%
+%
+\makeatother
+%
+\def\downtext#1{\zcharnote H{#1}}
+\def\Downtext#1{\zcharnote D{#1}}
+%
+\let\alabreve\allabreve% accommodate a typo in bmw2tex
+%
+\endcatcodesmusic% restore characters to their standard usage
+%
+% miscellaneous useful non-music macro definitions
+%
+\def\USdate{%
+\def\today{\ifcase\month\or Jan.\or Feb.\or Mar.\or Apr. \or
+ May.\or June\or July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\fi
+ \ \number\day, \number\year}}% this is from the TeXbook
+%
+\def\Eurodate{%
+\def\today{\number\day\ \ifcase\month\or Jan.\or Feb.\or Mar.\or Apr. \or
+ May.\or June\or July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\fi
+ \ \number\year}}% this is from the TeXbook
+%
+\USdate
+%
+\font\twelvebf=\fonthdg mbx12% useful for part headings
+%
+\def\medley{\let\medleyflag=\relax}% useful for making medleys
+\def\byemedley{\ifx\medleyflag\relax\endinput\fi}%
+%
+\endinput
+%
+\endmain
+\end{document}%
diff --git a/macros/generic/bagpipe/bagpipex.ini b/macros/generic/bagpipe/bagpipex.ini
new file mode 100644
index 0000000000..d80ee6645e
--- /dev/null
+++ b/macros/generic/bagpipe/bagpipex.ini
@@ -0,0 +1,4 @@
+\input plain
+\let\usemusixtex\relax
+\input bagpipe
+\dump
diff --git a/macros/generic/bagpipe/quickref.pdf b/macros/generic/bagpipe/quickref.pdf
new file mode 100644
index 0000000000..ba199630c0
--- /dev/null
+++ b/macros/generic/bagpipe/quickref.pdf
Binary files differ
diff --git a/macros/generic/bagpipe/quickref.tex b/macros/generic/bagpipe/quickref.tex
new file mode 100644
index 0000000000..01f042ab5f
--- /dev/null
+++ b/macros/generic/bagpipe/quickref.tex
@@ -0,0 +1,227 @@
+%&plain
+% bagpipe.tex
+\let\usemusixtex\relax%
+\input bagpipe
+\newpitch\newgrace\noautoglue
+%
+\centerline{\moyen bagpipe.tex quick reference}
+\bigskip
+\generalmeter{\meterfrac 44}%
+\setelemq{1.6} \debutmorceau \notes
+ \Uptext{grx; x=N,a,b,c,d,e,f,g,h(new scheme)}
+ \grN\gra\grb\grc\grd\gre\grf\grg\grh\sk\sk\sk
+ \enotes\barre
+\notes\Uptext{echox}\relax
+ \echoN\echoa\echob\echoc\echod\echoe\echof\echog\echoh\sk
+ \enotes\barre
+\notes\Uptext{themx}\relax
+ \themN\thema\themb\themc\themd\theme\themf\themg\themh
+ \enotes\alaligne
+\notes\Uptext{dblx}\dblN\dbla\dblb\dblc\dbld\dble\dblf\dblg\dblh\enotes\barre
+\notes\Uptext{hdblx}\hdblN\hdbla\hdblb\hdblc\hdbld\hdble\hdblf\hdblg\hdblh
+ \enotes\alaligne
+\notes\Uptext{tdblx}\tdblN\tdbla\tdblb\tdblc\tdbld\tdble\tdblf\tdblg
+ \enotes\barre
+\notes\Uptext{sdblx}\sdbla\sdblb\sdblc\sdbld\sdble\sdblf\sdblg\sdblh
+ \enotes\alaligne
+\notes\Uptext{shdblx}\shdbla\shdblb\shdblc\shdbld\shdble\shdblf\shdblg\shdblh
+ \enotes\barre
+\notes\Uptext{shkdbld}\shkdbld\enotes\barre
+\notes\Uptext{shtdbld}\shtdbld\enotes\barre
+\notes\Uptext{thrwd}\thrwd\sk\sk\Uptext{grip}\grip\sk
+ \Uptext{dgrip}\dgrip\sk\Uptext{Ngrip}\Ngrip\sk\sk\enotes\alaligne
+\notes\Uptext{taor}\taor\sk\Uptext{dtaor}\dtaor\sk\Uptext{Ntaor}\Ntaor\sk\sk
+ \Uptext{ahtaor}\ahtaor\sk\sk\enotes\barre
+\notes\Uptext{thrwf}\thrwf\sk\sk\Uptext{gripthrwd}\gripthrwd\sk\sk\sk
+\Uptext{hgripthrwd}\hgripthrwd\sk\sk\sk\sk\enotes\barre
+\notes\Uptext{birl}\birl\Uptext{sbirl}\sbirl\Uptext{wbirl}\wbirl\sk\sk
+ \Uptext{tbirl}\tbirl\enotes\barre
+\notes\Uptext{slurx or
+slapx}\slura\slurb\slurc\slurd\slure\slurf\enotes\alaligne
+\notes\Uptext{hslurx}\hslura\hslurb\hslurc\hslurd\hslure\hslurf\enotes\barre
+\notes\Uptext{tslurx}\tslura\tslurb\tslurc\tslurd\tslure\tslurf\enotes\barre
+\notes\Uptext{shkx}\shka\shkb\shkc\shkd\shke\shkf\shkg\enotes\barre
+\notes\Uptext{hshkx}\hshka\hshkb\hshkc\hshkd\hshke\hshkf\hshkg\enotes\alaligne
+\notes\Uptext{tshkx}\tshka\tshkb\tshkc\tshkd\tshke\tshkf\enotes\barre
+\notes\Uptext{dstrx}\dstra\dstrb\dstrc\dstrd\dstre\dstrf\dstrg\dstrh
+ \Uptext{ldstrd}\ldstrd\sk\enotes\barre
+\notes\Uptext{gdstrx}\gdstra\gdstrb\gdstrc\gdstrd\gdstre\gdstrf
+ \Uptext{lgdstrd}\lgdstrd\enotes\alaligne
+\notes\Uptext{tdstrx}\tdstra\tdstrb\tdstrc\tdstrd\tdstre\tdstrf
+ \Uptext{ltdstrd}\ltdstrd\enotes\barre
+\notes\Uptext{hdstrx}\hdstra\hdstrb\hdstrc\hdstrd\hdstre\hdstrf\hdstrg\hdstrh
+ \Uptext{lhdstrd}\lhdstrd\enotes\alaligne
+\notes\Uptext{tstrx}\tstra\tstrb\tstrc\tstrd\tstre\tstrf\tstrg\tstrh
+ \Uptext{ltstrd}\ltstrd\enotes\barre
+\notes\Uptext{gtstrx}\gtstra\gtstrb\gtstrc\gtstrd\gtstre\gtstrd\gtstrf
+ \Uptext{lgtstrd}\lgtstrd\enotes\alaligne
+\notes\Uptext{ttstrx}\ttstra\ttstrb\ttstrc\ttstrd\ttstre\ttstrf
+ \Uptext{lttstrd}\lttstrd\enotes\alaligne
+\notes\Uptext{htstrx}\htstra\htstrb\htstrc\htstrd\htstre\htstrf\htstrg\htstrh
+ \Uptext{lhtstrd}\lhtstrd\sk\enotes\barre
+\notes\Uptext{pelx}\pelb\pelc\peld\pele\Uptext{lpeld}\lpeld\enotes\alaligne
+\notes\Uptext{tpelx}\tpelb\tpelc\tpeld\tpele\Uptext{ltpeld}\ltpeld\enotes\barre
+\notes\Uptext{hpelx}\hpelb\hpelc\hpeld\hpele\enotes\barre
+\notes\Uptext{ddgrx}\ddgrN\ddgra\ddgrb\ddgrc\enotes\barre
+\notes\Uptext{edgrx}\edgrN\edgra\edgrb\edgrc\edgrd\enotes\barre
+\notes\Uptext{fdgrx}\fdgrN\fdgra\fdgrb\fdgrc\fdgrd\fdgre\enotes\alaligne
+\notes\Uptext{gdgrx}\gdgrN\gdgra\gdgrb\gdgrc\gdgrd\gdgre\gdgrf\enotes\barre
+\notes\Uptext{tdgrx}\tdgrN\tdgra\tdgrb\tdgrc\tdgrd\tdgre\tdgrf\tdgrg\enotes\barre
+\notes\Uptext{catchx}\catcha\catchb\catchc\catchd\catche\enotes\alaligne
+\notes\Uptext{scatchx}\scatcha\scatchb\scatchc\scatchd\scatche\enotes\barre
+\notes\Uptext{tcatchx}\tcatcha\tcatchb\tcatchc\tcatchd\tcatche\enotes\alaligne
+\notes\Uptext{crun}\crun\Uptext{crunf}\crunf\sk\Uptext{crunmb}\crunmb
+ \Uptext{crunmc}\crunmc\enotes\barre
+\notes\Uptext{crunmd}\crunmd\sk\sk\sk\Uptext{ahcrun}\ahcrun\sk\Uptext{Nhcrun}\Nhcrun\sk
+ \Uptext{dcrunbr}\dcrunbr\sk\Uptext{ahcrunbr}\ahcrunbr\sk\enotes\alaligne
+\notes\Uptext{dre}\dre\Uptext{edre}\edre\sk\Uptext{edrex}\edreb\edrec\edred
+ \Uptext{dare}\dare\enotes\barre
+\notes\Uptext{hedari}\hedari\sk\sk\Uptext{tra}\tra\sk\Uptext{trac}\trac\enotes\alaligne
+\notes\Uptext{gedre}\gedre\sk\Uptext{gdare}\gdare\sk\Uptext{tedre}\tedre\sk
+ \Uptext{tdare}\tdare\sk\Uptext{tchechere}\tchechere\sk\sk\sk\sk\Uptext{hdre}\hdre\sk\enotes\barre
+\notes\Uptext{hedale}\hedale\sk\sk\sk\Uptext{hchechere}\hchechere\sk\sk\sk\sk
+ \Uptext{deda}\deda\sk\enotes\alaligne
+\notes\Uptext{enbain}\enbain\sk\sk\Uptext{otro}\otro\sk\sk\Uptext{odro}\odro\sk\sk
+ \Uptext{adela}\adela\sk\enotes\barre
+\notes\Uptext{genbain}\genbain\sk\sk\Uptext{gotro}\gotro\sk\sk\Uptext{godro}\godro\sk\sk
+ \Uptext{gadela}\gadela\sk\enotes\alaligne
+\notes\Uptext{tenbain}\tenbain\sk\sk\Uptext{totro}\totro\sk\sk\Uptext{todro}\todro\sk\sk
+ \Uptext{tadela}\tadela\sk\enotes\barre
+\notes\Uptext{dbstf}\dbstf\sk\Uptext{dbsth}\dbsth\sk\enotes\barre
+\notes\Uptext{darodo}\darodo\sk\Uptext{Ndarodo}\Ndarodo\sk\sk\sk
+ \Uptext{darodos}\darodos\sk\sk\enotes\barre
+\notes\Uptext{hiharin}\hiharin\sk\sk\Uptext{chelalho}\chelalho\enotes\alaligne
+\notes\Uptext{cadged}\cadged\sk\sk\Uptext{cadhed}\cadhed\sk\sk
+ \Uptext{cadge}\cadge\sk\enotes\barre
+\notes\Uptext{cadhe}\cadhe\sk\sk\Uptext{caded}\caded\sk\sk\enotes\barre
+\notes\Uptext{fcadged}\fcadged\sk\Uptext{fcadhed}\fcadhed\sk
+ \Uptext{fcadge}\fcadge\sk
+ \Uptext{fcadhe}\fcadhe\sk\Uptext{fcaded}\fcaded\sk\Uptext{fcade}\fcade\enotes\alaligne
+%
+\notes\Uptext{pcc}\pcc cd\etn\Uptext{pcgc}\pcgc c\grg d\etn
+ \Uptext{pcs}\pcs cd\etn\Uptext{pcps}\pcps cd\enotes\barre
+\notes\Uptext{pcgs}\pcgs c\gre d\etn
+ \Uptext{pcpgs}\pcpgs c\gre d\etn
+ \Uptext{psc}\psc cd\etn\Uptext{pscp}\pscp cd\enotes\barre
+\notes\Uptext{psgc}\psgc c\gre d\etn
+ \Uptext{psgcp}\psgcp c\gre d\enotes\alaligne
+\notes\Uptext{pss}\pss cd\etn\Uptext{psgs}\psgs c\gre d\etn
+ \Uptext{pst}\pst cd\etn
+ \Uptext{pspt}\pspt cd\enotes\barre
+\notes\Uptext{psgt}\psgt c\gre d\etn
+ \Uptext{pspgt}\pspgt c\gre d\etn
+ \Uptext{pts}\pts cd\etn\Uptext{ptsp}\ptsp cd\enotes\barre
+\notes\Uptext{ptgs}\ptgs c\gre d\etn
+ \Uptext{ptgsp}\ptgsp c\gre d\enotes\alaligne
+\notes\Uptext{bdd; d=c,s,t}\bcc cd2\bc\bd\etn
+ \bss cd2\bc\bd\etn\btt cd2\bc\bd\enotes\barre
+\notes\bcs cd2\bc\bd\etn\bsc cd2\bc\bd\etn
+ \bst cd2\bc\bd\etn\bts cd2\bc\bd
+ \enotes\barre
+\notes\bct cd2\bc\bd\etn\btc cd2\bc\bd\enotes\barre
+\notes\Uptext{bddd; d=c,s,t}\bccc ae2\ba\bb\be\etn
+ \bccc ae3\bap\bbp\be\etn
+ \bccc ac3{\ba\grd}{\bb\gre}\bc\enotes\barre
+%
+\notes\sk\bsss ae2\ba\bb\be\sk\etn
+ \bttt ae2\ba\bb\be\enotes\alaligne
+%
+\notes\sk\bccs ae2\ba\bb\be\etn
+ \bcsc ae2\ba\bb\be\etn
+ \bscc ae2\ba\bb\be\enotes\barre
+\notes\sk\bcss ae2\ba\bb\be\etn
+ \bscs ae2\ba\bb\be\etn
+ \bssc ae2\ba\bb\be\enotes\barre
+%
+\notes\sk\bsst ae2\ba\bb\be\etn\bsts ae2\ba\bb\be\btss
+ae2\ba\bb\be\enotes\barre \notes\sk\bstt ae2\ba\bb\be\etn\btst
+ae2\ba\bb\be\etn\btts ae2\ba\bb\be\enotes\alaligne
+%
+\notes\sk\bcst ae2\ba\bb\be\etn
+ \bsct ae2\ba\bb\be\etn
+ \bcts ae2\ba\bb\be\enotes\barre
+\notes\sk\bstc ae2\ba\bb\be\etn
+ \btsc ae2\ba\bb\be\etn
+ \btcs ae2\ba\bb\be\enotes\barre
+%
+\notes\sk\Uptext{bdddd; d=c,s,t}\bcccc ad3\ba\bb\bc\bd\etn
+ \bssss ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\btttt ad3\ba\bb\bc\bd\etn
+ \bcccs ad3\ba\bb\bc\bd\enotes\alaligne
+%
+\notes\sk\bccsc ad3\ba\bb\bc\bd\etn
+ \bcscc ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bsccc ad3\ba\bb\bc\bd\etn
+ \bccss ad3\ba\bb\bc\bd\enotes\alaligne
+%
+\notes\sk\bcscs ad3\ba\bb\bc\bd\etn
+ \bcssc ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bsccs ad3\ba\bb\bc\bd\etn
+ \bscsc ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bsscc ad3\ba\bb\bc\bd\etn
+ \bccst ad3\ba\bb\bc\bd\enotes\barre
+%
+\notes\bccts ad3\ba\bb\bc\bd\etn
+ \bcstc ad3\ba\bb\bc\bd\enotes\alaligne
+\notes\bctsc ad3\ba\bb\bc\bd\etn
+ \bstcc ad3\ba\bb\bc\bd\enotes\barre
+\notes\btscc ad3\ba\bb\bc\bd\etn
+ \bcsss ad3\ba\bb\bc\bd\enotes\barre
+%
+\notes\sk\bscss ad3\ba\bb\bc\bd\etn
+ \bsscs ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bsssc ad3\ba\bb\bc\bd\etn
+ \bcsst ad3\ba\bb\bc\bd\enotes\alaligne
+%
+\notes\sk\bcsst ad3\ba\bb\bc\bd\etn
+ \bsstc ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bcsts ad3\ba\bb\bc\bd\etn
+ \bscst ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bscts ad3\ba\bb\bc\bd\etn
+ \bstcs ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\btscs ad3\ba\bb\bc\bd\etn
+ \bstsc ad3\ba\bb\bc\bd\enotes\alaligne
+\notes\sk\btssc ad3\ba\bb\bc\bd\etn
+ \btcss ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bctss ad3\ba\bb\bc\bd\etn%
+ \bssct ad3\ba\bb\bc\bd\enotes\barre
+%
+\notes\sk\bssts ad3\ba\bb\bc\bd\etn
+ \bstss ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\btsss ad3\ba\bb\bc\bd\etn
+ \bssst ad3\ba\bb\bc\bd\enotes\alaligne
+%
+\notes\sk\bstst ad3\ba\bb\bc\bd\etn
+ \bstts ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\btsst ad3\ba\bb\bc\bd\etn
+ \btsts ad3\ba\bb\bc\bd\enotes\barre
+\notes\sk\bttss ad3\ba\bb\bc\bd\etn
+ \bsttt ad3\ba\bb\bc\bd\enotes\barre
+%
+\notes\sk\btstt ad3\ba\bb\bc\bd\etn
+ \bttst ad3\ba\bb\bc\bd\enotes\alaligne
+\notes\sk\bttts ad3\ba\bb\bc\bd\enotes\barre
+%
+\notes\sk\Uptext{whx}\whN\wha\whb\whc\whd\whe\whf\whg\whh\enotes\barre
+\notes\sk\Uptext{hx}\hN\ha\hb\hc\hd\he\hf\hg\hh\enotes\barre
+\notes\sk\Uptext{qlx}\qlN\qla\qlb\qlc\qld\qle\qlf\qlg\qlh\enotes\alaligne
+\notes\sk\Uptext{cx}\cN\ca\cb\cc\cd\ce\cf\cg\ch\enotes\barre
+\notes\sk\Uptext{sx}\sN\sa\sb\sc\sd\se\sf\sg\sh\enotes\barre
+\notes\sk\Uptext{tx}\tN\ta\tb\tc\td\te\tf\tg\th\enotes\barre
+\notes\sk\Uptext{sfx}\sfN\sfa\sfb\sfc\sfd\sfe\sff\sfg\sfh\enotes\alaligne
+\notes\sk\Uptext{bx}\bccc Nb2\bN\ba\bb\bccc ce2\bc\bd\be\etn
+ \bccc fh2\bf\bg\bh\enotes\barre
+%
+\notes\sk\Uptext{bxp}\bccc Nb2\bNp\bap\bbp\etn
+ \bccc ce2\bcp\bdp\bep\etn
+ \bccc fh2\bfp\bgp\bhp\enotes\barre
+%
+\notes\sk\Uptext{hp x, qlp x, cp x, sp x, tp x, sfp x}
+ \hp a\sk\qlp b\sk\cp c\psk\sp d\psk\tp e\psk\sfp f\enotes\barre
+%
+\notes\sk\Uptext{hpp x, qlpp x, cpp x}\relax
+ \sk\sk\hpp a\qlpp b\cpp c\enotes
+%
+\finmorceau
+\byemedley
+\bye
diff --git a/macros/generic/basix/basix.tex b/macros/generic/basix/basix.tex
new file mode 100644
index 0000000000..1592ff5853
--- /dev/null
+++ b/macros/generic/basix/basix.tex
@@ -0,0 +1,474 @@
+%
+% BaSiX (with the emphasis on SICK!) by Andrew Marc Greene
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Andrew's Affiliations
+%
+% Copyright (C) 1990 by Andrew Marc Greene
+% <amgreene@mit.edu>
+% MIT Project Athena
+% Student Information Processing Board
+% All rights reserved.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% BaSiX's Beginnings
+%
+\def\flageol{\catcode13=13}
+\def\endflageol{\catcode13=5}
+\def\struncat{\catcode`\$=12}
+\def\strcat{\catcode`\$=11}
+\flageol\let\eol
+\endflageol
+\newif\ifresult
+%\newcount\xa\newcount\xb
+\def\iw{\immediate\write16}
+\def\empty{}
+\def\gobble#1{}
+\def\spc{ }
+\def\itstrue{tt}
+\def\itsfalse{tf}
+\def\isnull#1{\resultfalse
+\expandafter\ifx\csname empty#1\endcsname\empty\resulttrue\fi}
+\newcount\matha\newcount\mathb
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Character-string Calls
+%
+\newcount\strtmp
+\def\ascii#1{\strtmp`#1}
+\def\chr#1{\begingroup\uccode65=#1\uppercase{\gdef\tmp{A}}\endgroup}
+\def\strlen#1{\strtmp-2% don't count " " \iw tokens
+ \expandafter\if\stringP #1\let\next\strIter\strIter #1\iw\fi}
+\def\strIter#1{\ifx\iw#1\let\next\relax\else\advance\strtmp by 1\relax
+ \fi\next}
+\def\Flen{\expandafter\strlen\expandafter{\Pa}\return{\number\strtmp}}
+\strcat
+\def\F$chr${\expandafter\chr\expandafter{\Pa}\return{\tmp}}
+\struncat
+% first char only:
+% \def\Fasc{\expandafter\asc\expandafter{\Pa}\return{\number\strtmp}}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Debugging Definitions
+%
+\def\debug{\tracingmacros=2}
+\def\diw#1{}
+\def\Cdebug{\let\diw\iw\tracingmacros=2 \endeval}
+\def\Cnodebug{\def\diw##1{}\endeval}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Expression Evaluation
+%
+\def\expression{\let\afterexpression\afterscan\math}
+%
+% (math is a misnomer and should -> expr)
+%
+\newcount\parens\newcount\mathParams
+\def\math{\parens=0\mathParams96\mathInit\matheval}
+\def\mathRecurse{\advance\parens by 1\relax\mathParams96\mathInit\matheval}
+\def\mathInit{\begingroup
+ \let\mathAcc\empty
+ \let\mathOpRel\empty
+ \let\mathOpAdd\empty
+ \let\mathOpMul\empty
+ \let\mathlhRef\empty}
+%
+\def\matheval{\after\mathbranch\scan}
+%
+\def\mathbranch{\diw{EXPRESS:\expandafter\noexpand\word:}
+\let\next\matherr
+\ifx\empty\word\let\next\mathHardEnd\else % Expr. end?
+\expandafter\if\numberP\word\let\next\mathLiteral\diw{@@}\fi % Number?
+\expandafter\if\stringP\word\let\next\mathLiteral\fi % String literal?
+\expandafter\if\identifierP\word\let\next\mathIdentifier\fi % Identifier?
+\expandafter\if\stringvarP\word\let\next\mathIdentifier\fi % :-(
+\expandafter\if\macroP\word\let\next\mathMacro\fi % Macro?
+\ifx\word\Oleft\let\next\mathRecurse\fi % Open paren?
+\ifx\word\Oright\let\next\mathEndRecurse\fi % Close paren?
+\ifx\word\Ocomma\let\next\mathComma\fi % Comma?
+%
+% Operator?
+%
+\ifx\word\Oplus\let\next\mathOp\diw{!+}\fi
+\ifx\word\Ominus\let\next\mathOp\diw{!-}\fi
+\ifx\word\Otimes\let\next\mathOp\diw{!*}\fi
+\ifx\word\Odiv\let\next\mathOp\diw{!/}\fi
+\ifx\word\Olt\let\next\mathOp\diw{!<}\fi
+\ifx\word\Oeq\let\next\mathOp\diw{!=}\fi
+\ifx\word\Ogt\let\next\mathOp\diw{!>}\fi
+%
+\fi\next}
+%
+\def\Oleft{(}\def\Oright{)}\def\Ocomma{,}
+\def\Oplus{+}\def\Ominus{-}\def\Otimes{*}\def\Odiv{/}
+\def\Olt{<}\def\Oeq{=}\def\Ogt{>}
+%
+% There's got to be a better way to do the above....
+%
+\def\mathLiteral{\diw{MLIT}\ifx\empty\mathAcc\diw{ACCUMUL:\word:}
+\expandafter\def\expandafter\mathAcc\expandafter
+{\expandafter\expandafter\expandafter\empty\word}
+\else
+\diw{ACC has :\mathAcc: and word is :\word:}
+\errmessage{Syntax Error: Two values with no operator}\fi\matheval}
+%
+% Operator stuff: (Need to add string support / error checking)
+%
+\def\mathAdd{\advance\matha by \mathb}
+\def\mathSub{\advance\matha by -\mathb}
+\def\mathMul{\multiply\matha by \mathb}
+\def\mathDiv{\divide\matha by \mathb}
+\def\mathEQ{\ifnum\matha=\mathb\matha-1\else\matha0\fi}
+\def\mathGT{\ifnum\matha>\mathb\matha-1\else\matha0\fi}
+\def\mathLT{\ifnum\matha<\mathb\matha-1\else\matha0\fi}
+%
+\def\mathFlushRel{\mathFlushAdd\ifx\empty\mathOpRel\else
+ \matha=\mathlhRel\relax\mathb=\mathAcc\relax\mathOpRel
+ \edef\mathAcc{\number\matha}\let\mathOpRel\empty\fi}
+%
+\def\mathFlushAdd{\mathFlushMul\ifx\empty\mathOpAdd\else
+ \matha=\mathlhAdd\relax\mathb=\mathAcc\relax\mathOpAdd
+ \edef\mathAcc{\number\matha}\let\mathOpAdd\empty\fi}
+%
+\def\mathFlushMul{\mathFlushRef\ifx\empty\mathOpMul\else
+ \matha=\mathlhMul\relax\mathb=\mathAcc\relax\mathOpMul
+ \edef\mathAcc{\number\matha}\let\mathOpMul\empty\fi}
+%
+\def\mathFlushRef{\ifx\empty\mathlhRef\else
+ \mathParam
+ \mathlhRef\let\mathlhRef\empty\fi}
+%
+\def\mathOp{%
+\if\word+
+ \mathFlushAdd\let\mathlhAdd\mathAcc\let\mathOpAdd\mathAdd\fi
+\if\word-
+ \mathFlushAdd\let\mathlhAdd\mathAcc\let\mathOpAdd\mathSub\fi
+\if\word*
+ \mathFlushMul\let\mathlhMul\mathAcc\let\mathOpMul\mathMul\fi
+\if\word/
+ \mathFlushMul\let\mathlhMul\mathAcc\let\mathOpMul\mathDiv\fi
+\if\word=
+ \mathFlushRel\let\mathlhRel\mathAcc\let\mathOpRel\mathEQ\fi
+\if\word>
+ \mathFlushRel\let\mathlhRel\mathAcc\let\mathOpRel\mathGT\fi
+\if\word<
+ \mathFlushRel\let\mathlhRel\mathAcc\let\mathOpRel\mathLT\fi
+\let\mathAcc\empty
+\matheval}
+%
+\def\mathIdentifier{%
+\expandafter\ifx\csname C\word\endcsname\relax
+\expandafter\ifx\csname F\word\endcsname\relax
+\expandafter\ifx\csname V\word\endcsname\relax
+\let\next\matherr\diw{LOSING:\word:}
+\else\let\next\mathVariable\fi
+\else\let\next\mathFunction\fi
+\else\let\next\mathCommand\fi\next}
+%
+\def\mathVariable{\expandafter\edef\expandafter\word\expandafter
+{\csname V\word\endcsname}\mathbranch}
+\def\mathCommand{\expandafter\mathHardEnd\word}
+\def\mathFunction{\expandafter\let\expandafter\mathlhRef
+\csname F\word\endcsname\matheval}
+%
+\def\mathParam{\advance\mathParams by 1\relax\chr\mathParams
+ \diw{PARAM:\tmp:\mathAcc:}
+ \expandafter\edef\csname P\tmp\endcsname{\mathAcc}}
+\def\mathComma{\mathEnd\mathParam\mathInit\matheval}
+\def\mathEndRecurse{\mathEnd\advance\parens by -1\matheval}
+\def\mathEnd{\diw{MATHEND: ACC=\mathAcc:}\mathFlushRel
+ \xdef\mathtemp{\mathAcc}\endgroup\edef\mathAcc{\mathtemp}}
+\def\mathHardEnd{\ifnum\parens>0\errmessage{Insufficient closeparens.}\relax
+ \let\next\endeval\else\let\next\mathFinal\fi\next}
+\def\mathFinal{\mathEnd\let\value\mathAcc\endexpression}
+\def\matherr{\errmessage{Syntax error: Unknown symbol \word}}
+\def\endexpression{\afterexpression}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Linked List
+%
+\def\gotofirstline{\edef\lpointer{\csname L0\endcsname}}
+\def\foreachline#1{\ifnum\lpointer<99999\edef\word{\lpointer}#1%
+\edef\lpointer{\csname L\word\endcsname}\foreachline{#1}\fi}
+%
+% gotopast{#1} where #1 is a line number, will set \lpointer to
+% the least value such that L(lpointer)>#1
+%
+\def\gotopast#1{\def\lpointer{0}\def\target{#1}\gotopastloop}
+%
+\def\gotopastloop{\edef\tmp{\csname L\lpointer\endcsname}%
+\ifnum\tmp<\target%
+\edef\lpointer{\csname L\lpointer\endcsname}%
+\let\next=\gotopastloop\else\let\next=\relax\fi
+\next}
+%
+\flageol\def\addLineToLinkedList#1#2
+{\def#1{#2}\diw{Just stored #2 in \noexpand #1}%
+% now put it into linked list...
+\expandafter\ifx\csname L\word\endcsname\relax% if it isn't already there,
+\gotopast{\word}% \def\lpointer{what-should-point-to-word}
+\expandafter\edef\csname L\word\endcsname{\csname L\lpointer\endcsname}%
+\expandafter\edef\csname L\lpointer\endcsname{\word}%
+\fi\endeval
+}\endflageol
+\expandafter\def\csname L0\endcsname{99999}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Program Parser
+%
+\def\evalline{%\iw{EVALLINE :\word:}%
+\csname C\word\endcsname} %error-checking? :-)
+\def\evalerror{\errmessage{Unkonwn command. Sorry.}}
+%
+% \mandatory takes one argument and checks to see if the next
+% non-whitespace token matches it. If not, an error is generated.
+%
+\def\mandatory#1{\def\tmp{#1}\mandatest}
+\def\mandatest#1{\def\tmpp{#1}\ifx\tmp\tmpp\let\next\afterscan\else
+\let\next\manderror\fi\next}
+\def\manderror{\errmessage{\tmpp\spc read when \tmp\spc expected.}%
+\afterscan}
+%
+% \parseline gets the first WORD of the next line. If it's a line
+% number, \scanandstoreline is called; otherwise the line is executed.
+%
+\def\parseline{\after\firsttest\scan}
+\def\firsttest{\expandafter\if\numberP\word
+\let\next\grabandstoreline\else\let\next\evalline\fi\next}
+\def\grabandstoreline{\diw{Grabbing line \word.}%
+\expandafter\addLineToLinkedList\csname/\word\endcsname}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Syntactic Scanner
+%
+% The \scan routine reads the next WORD and then calls \afterscan.
+%
+% As syntactic sugar, one can write \after\foo to set \afterscan to
+% \foo.
+%
+% Here are the rules governing WORD. Initial whitespace is
+% discarded. The word is the next single character, unless that
+% character is one of the following:
+%
+% A-Z or a-z: [A-Z,a-z][A-Z,a-z,0-9]*\$?
+% 0-9: [0-9]+
+% ": "[^"]*"
+% <,=,>: [<=>][<=>]? (one or two; not the same if two)
+%
+% Note that the string literal ignores spaces but may be abnormally
+% terminated by an end-of-line. (I wasn't sure how to express that
+% as a regexp).
+%
+%
+\newif\ifscan % shall we continue scanning?
+%
+\def\scan{\def\word{}\futurelet\q\scanFirst}
+%
+\def\scanFirst{% Checks the first character to determine type.
+\let\next\scanIter
+\expandafter\if\spc\noexpand\q % Space -- ignore it
+ \let\next\scanSpace\else
+\if\eol\noexpand\q % End of line -- no word here
+ \let\next\scanEnd\else
+\ifcat A\noexpand\q % Then we have an identifier
+ \let\scanTest\scanIdentifier\else
+\expandafter\if\digit\q
+ \let\scanTest\scanNumericConstant\else
+\if"\noexpand\q
+ \let\scanTest\scanStringConstant\else
+\expandafter\if\relationP\q
+ \let\scanTest\scanRelation
+\else
+ \let\scanTest\scanfalse
+\fi\fi\fi\fi\fi\fi\next}
+%
+\def\scanIter#1{\expandafter\def\expandafter\word\expandafter{\word #1}
+ \futurelet\q\scanContinueP}
+\def\scanContinueP{\scanTest\ifscan\let\next\scanIter
+ \else\let\next\scanEnd\fi\next}
+%
+\def\scanSpace#1{\scan}% If the first char is a space, gobble it and try again.
+\def\scanIdentifier{\ifcat A\noexpand\q\scantrue\else
+\expandafter\if\digit\q\scantrue
+\else\if$\noexpand\q\scantrue
+ \expandafter\def\expandafter\word\expandafter{\expandafter$\word}
+ \let\scanTest\scanfalse\else
+\scanfalse\fi\fi\fi}
+\def\scanEndString{\scanfalse}
+\def\scanNumericConstant{\expandafter\if\digit\q\scantrue\else\scanfalse\fi}
+\def\scanStringConstant{\scantrue\if"\q\let\scanTest\scanfalse\fi}
+\def\scanRelation{\if<\q\scantrue\else\if>\q\scantrue\else\if=\q\scantrue
+\else\scanfalse\fi\fi\fi}
+%
+\def\scanEnd#1{\relax\diw{SCANNED:\word:}
+\afterscan #1}% dumps trailing spaces.
+\def\after{\let\afterscan}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Type Tests (Predicates for type determination)
+%
+\def\relationP#1{tf} % for now, only single-char relations
+\def\identifierP#1{\expandafter\identifierTest #1\\}
+\def\identifierTest#1#2\\{\ifcat A#1\itstrue\else\itsfalse\fi}
+\def\stringvarP#1{\expandafter\stringvarTest #1\\}
+\def\stringvarTest#1#2\\{\if$#1\itstrue\else\itsfalse\fi}
+\def\stringP#1{\expandafter\stringTest #1\\}
+\def\stringTest#1#2\\{\if #1"\itstrue\else\itsfalse\fi}
+\def\numberP#1{\expandafter\numberTest #1\\}
+\def\numberTest#1#2\\{\expandafter\if\digit #1\itstrue\else\itsfalse\fi}
+\def\macroP#1{\expandafter\macroTest #1\\}
+\def\macroTest#1#2\\{\expandafter\ifx #1\relax\itstrue\else\itsfalse\fi}
+%
+% \digit tests its single-token argument and returns tt if true,
+% tf otherwise.
+%
+%
+\def\digit#1{%
+\if0\noexpand#1\itstrue\else
+\if1\noexpand#1\itstrue\else
+\if2\noexpand#1\itstrue\else
+\if3\noexpand#1\itstrue\else
+\if4\noexpand#1\itstrue\else
+\if5\noexpand#1\itstrue\else
+\if6\noexpand#1\itstrue\else
+\if7\noexpand#1\itstrue\else
+\if8\noexpand#1\itstrue\else
+\if9\noexpand#1\itstrue\else\itsfalse
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+% 9 8 7 6 5 4 3 2 1 0
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% User Utilities. These are the commands that are called by the
+% user. We could really use a better section name. :-)
+%
+% List (one line or all lines, for now)
+%
+\def\Clist{\after\listmain\scan}
+\def\listmain{\isnull{\word}\ifresult\let\next\listalllines
+\else\let\next\listoneline\fi\next}
+\def\listline{\iw{\word\spc\csname/\word\endcsname}}
+\def\listalllines{\gotofirstline\foreachline{\listline}\endeval}
+\def\listoneline{\listline\endeval}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Different degrees of ``stop execution''
+%
+\def\Csystem{\end} % exits to the system
+\def\Cexit{}% \endflageol} % exits to TeX
+\flageol%
+\def\Cstop#1
+{\iw{Stopped in \lineno.}\cleanstop}%
+\def\cleanstop{\diw{CLEANSTOP}\let\endeval\enduserline\endeval
+}\endflageol
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The command ``rem'' introduces a remark
+%
+\def\Crem{\endeval}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The ``let'' command allows variable assignments
+%
+\def\Clet{\after\letgetequals\scan}
+\def\letgetequals{\after\letgetvalue\mandatory{=}}
+\def\letgetvalue{\after\letdoit\expression}
+\def\letdoit{\expandafter\edef\csname V\word\endcsname{\value}%
+\endeval}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The ``print'' command takes a [list of] expression[s] and displays
+% it [them].
+%
+\def\Cprint{\after\printit\expression}
+\def\printit{\iw{\value}\endeval}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The ``if'' command takes an expression, the word ``then,'' and
+% another command. If the expression is non-zero, the command is
+% executed; otherwise it is ignored.
+%
+\def\Cif{\after\getift\expression}
+\def\Cthen{\errmessage{Syntax error: THEN without IF}}
+\def\getift{\after\getifh\mandatory t}
+\def\getifh{\after\getife\mandatory h}
+\def\getife{\after\getifn\mandatory e}
+\def\getifn{\after\consequent\mandatory n}
+\def\consequent{\ifnum\value=0\let\next=\endeval\else\let\next=\evalconsq\fi
+\next}
+\def\evalconsq{\after\evalline\scan}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Functions
+%
+% Functions may read the counter \mathParams to find out the number
+% of the top parameter. Parameters are in Pa Pb Pc etc.
+%
+\def\return{\expandafter\def\expandafter\mathAcc\expandafter}
+%
+\def\Finc{\matha=\Pa \advance\matha by 1
+\return{\number\matha}}
+%
+\def\Fmin{\ifnum\Pa<\Pb\return{\Pa}\else\return{\Pb}\fi}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Program execution control
+%
+\def\Crun{\let\endeval\endincrline\def\lineno{0}\endeval}
+\def\Cgoto{\let\endeval\endgotoline\after\gotomain\scan}
+\def\gotomain{\edef\lineno{\word}\endeval}
+%
+\flageol%
+\def\execline{%\message{Executing line \lineno...}%
+\edef\theline{\csname/\lineno\endcsname}%
+%\message{THE LINE\theline}%
+\let\endeval\endincrline\after\evalline\expandafter\scan\theline
+}\endflageol
+%
+% Different varieties of what to do at the end of a command:
+%
+% get new line from user (enduserline)
+% get next line in order (endincrline)
+% get line in \lineno (endgotoline)
+% keep parsing current line (endcolonline tbi)
+%
+\flageol%
+\def\endincrline#1
+{\diw{ENDINCRLINE}\edef\lineno{\csname L\lineno\endcsname}\execnextline}
+%
+\def\endgotoline#1
+{\diw{ENDGOTOLINE}\let\endeval\execincrline\execnextline}%
+%
+\def\execnextline{\diw{Ready to execute line \lineno...}%
+\ifnum\lineno<99999\let\next\execline\else\let\next\cleanstop\fi\next}%
+%
+\def\enduserline #1
+{\diw{ENDUSERLINE}\parseline}\endflageol
+%
+\let\endeval\enduserline
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Start your engines!
+%
+\iw{This is BaSiX, v0.3, emphasis on the SICK! by amgreene@mit.edu}
+\flageol
+\catcode32=12
+\endeval
diff --git a/macros/generic/basix/paper.tex b/macros/generic/basix/paper.tex
new file mode 100644
index 0000000000..77c6a48a73
--- /dev/null
+++ b/macros/generic/basix/paper.tex
@@ -0,0 +1,533 @@
+%%% GREENE.lkd 30-mar-90 25-apr-90
+%%% GPAM = Guide.Proc.Ann.Mtg.TUG
+%%% LKD: Search on %@ for comments, questions, suggestions.
+
+%%% GREENE.ms 22-mar-90
+%@ 21-Mar-90 11:58:42-EDT,14687;000000000000
+%@ Return-Path: <amgreene@ATHENA.MIT.EDU>
+%@ Received: from ATHENA.MIT.EDU by VAX01.AMS.COM via SMTP with TCP; Wed,
+%@ 21 Mar 90 11:58:24-EDT
+%@ Received: from BILL-THE-CAT.MIT.EDU by ATHENA.MIT.EDU with SMTP id
+%@ AA24753; Wed, 21 Mar 90 11:56:49 EST
+%@ From: amgreene@ATHENA.MIT.EDU
+%@ Received: by BILL-THE-CAT.MIT.EDU (5.61/4.7) id AA02558; Wed,
+%@ 21 Mar 90 11:56:36 -0500
+%@ Date: Wed, 21 Mar 90 11:56:36 -0500
+%@ Message-Id: <9003211656.AA02558@BILL-THE-CAT.MIT.EDU>
+%@ To: LKD@MATH.AMS.COM
+%@ Cc: wsscat%carleton@CORNELLC.CIT.CORNELL.EDU, lkd@VAX01.AMS.COM
+%@ In-Reply-To: Lincoln Durst's message of Wed 21 Mar 90 10:35:18-EST
+%@ <638033718.0.LKD@MATH.AMS.COM>
+%@ Subject: Abstract of your paper
+%@
+%@
+%@ Sorry... Here's the current state of things (i.e., I know it needs
+%@ more editing):
+
+\input tugproc.sty
+
+\preprint % Comment this line out for final version following meeting
+
+% \let\Now=\null % Uncovering this will remove time stamps on preprints
+
+\def\BaSiX{B\kern-.18em\lower.45ex\hbox{A}\kern-.15em
+S\kern-.1em\lower.45ex\hbox{I}\kern-.1em X}
+\def\basic{{\smc Basic}}
+\def\ps{{\smc PostScript}}
+\Title %@ \BaSiX\ \Dash\ [The whole point is NOT to put a space before
+\BaSiX\Dash %@ \dash or \Dash, in order to prevent bad line breaks]
+ An Interpreter Written in \TeX\endTitle
+% \shortTitle {\sl Proceedings\/}
+% Guidelines\endshortTitle % for running head
+
+\Author Andrew Marc Greene\endAuthor
+\address MIT Project Athena, E40-342, 77 Massachusetts Avenue,
+Cambridge, MA 02139
+\endaddress
+\netaddress 617-253-7788.\ Internet:\ amgreene@mit.edu
+\endnetaddress
+
+\Abstract
+An interpreter for the \basic\ language is developed entirely in \TeX.
+The interpreter presents techniques of scanning and parsing that are
+useful in many contexts where data %@ which do not contain formatting
+not containing formatting %@ [misuse of "which"]
+directives are to be formatted by \TeX. \TeX's expansion rules are
+exploited to provide a macro that reads in the rest of the input file
+as arguments and which never stops expanding.
+\endAbstract
+
+\article
+
+\head Introduction \endhead
+
+It is a basic tenet of the \TeX\ faith that \TeX\ is
+Turing-equivalent and that we can write any program in \TeX.
+ %@ It's more than a tenet of faith; it's a theorem (B\"ohm \&
+ %@ Jacopini, Comm.ACM, v. 9, no. 5, May, 1966, pp. 366--371):
+ %@ Any algorithm can be coded in a language which has
+ %@ (1) sequential execution, (2) conditional execution
+ %2 [\if..\else..\fi], (3) looping [\loop..\repeat]; if
+ %@ you've got those three, you have a Turing machine.
+ %@ A more general form of this theorem (B & J work only with
+ %@ flow-charts) was known thirty years earlier; see Fitting,
+ %@ Computability Theory, Semantics, and Logic Programming,
+ %@ Oxford, 1987, page 162. (Ref: Stephen Kleene, 1936.)
+ %@ These results are the theoretical basis of the fact that
+ %@ programmers can live without "goto" and still do their jobs.
+ %@ For some of these papers and others (including Knuth's kind
+ %@ words on behalf of goto) see E. N. Yourdon, Classics in
+ %@ Software Engineering, Yourdon Press, 1979.
+%@
+%@ I understand this, but I'm more interested in being
+%@ rhetorically interesting in the introduction than in
+%@ giving an overview of computability theory. If you
+%@ think I ought to include some more of Turings, FSMs,
+%@ etc., I can; but I don't see Church's theorem as being
+%@ worth discussing explicitly. Not in the introduction
+%@ to the paper, at least. :-)
+%@
+It is
+also widely held that \TeX\ is ``the most idiosyncratic language
+known to us.''\footnote{$^1$}{Ward, Stephen~A.\ and
+Robert~H.~Halstead,~Jr., {\sl Computation Structures,} MIT Press, 1990}
+ %@ Do they cite this or say this? Who actually said it? Where?
+ %@ I have asked around some and, so far, have found no-one who
+ %@ recalls hearing this, or knows who Ward & Halstead are, or
+ %@ who disagrees with the claim. Whoever said it first
+ %@ surely deserves proper credit!
+This project is an attempt to provide a simple
+programming front end to \TeX.
+
+{\smc Basic} was selected because it is a widely used
+interpreted language. It also features an infix syntax not found in
+Lisp or \ps. This makes it a more difficult but more
+general problem than either of these others.
+
+The speed of the \BaSiX\ interpreter is not impressive. It is not
+meant to be. The purpose of this interpreter is not to serve as the
+{\smc Basic} implementation of choice. Its purpose is to display
+useful paradigms of input parsing and advanced \TeX\ programming.
+
+\head Interaction with \TeX\endhead
+
+\subhead Associative arrays \endhead
+
+Using |\csname| it is possible to implement associative arrays in
+\TeX. Associative arrays are arrays whose index is not necessarily a
+number. As an example, if |\student| has the name of a student, we
+might look up the student's grade with
+\verbatim
+\csname grade.\student\endcsname
+\endverbatim
+which would be |\grade.Greene| in my case. (In the case of
+|\csname|, all characters up to the |\endcsname| are used in the
+command sequence regardless of their category code.)
+
+\BaSiX\ makes extensive use of these arrays. Commands are begun with
+|C|; functions with |F|; variables with |V|; program lines with |/|;
+and the linked list of lines with |L|. This makes it easy for the
+interpreter to look up the value of any of these things, given the
+name as perceived by the user.
+
+One benefit of |\csname|\dots|\endcsname| is that if the resultant
+command sequence is undefined, \TeX\ replaces it with |\relax|. This
+allows us to check, using |\ifx|, whether the user has specified a
+non-existent identifier. This trick is used in exercise 7.7 in \TB.
+We use it in \BaSiX\ to check for syntax errors and uninitialized
+variables.
+
+\subhead Token streams \endhead
+
+The \BaSiX\ interpreter was designed to be run interactively. It is
+called by typing |tex basix|; the file ends waiting for the first line of
+\basic\ to be entered at \TeX's |*| prompt. This also allows other files
+to |\input basix| and immediately follow it with \basic\ code.
+
+We cannot have the scanner read an entire line at once, since if the
+last line of |basix.tex| were a macro that reads a line as a
+parameter, we'd get a ``|File ended while scanning use of \getline|''
+error. Instead, we use a method which at first blush seems more
+convoluted but which is actually simpler.
+
+We note that \TeX\ does not make any distinction between the tokens
+that make up our interpreter and the tokens that form the \basic\
+code. The \BaSiX\ interpreter is carefully constructed so that each
+macro ends by calling another macro (which may read parameters).
+Thus, expansion is never completed, but the interpreter can continue
+to absorb individual characters that follow it. These characters
+affect the direction of the expansion; it is this behaviour that
+allows us to implement a \basic\ interpreter in \TeX.
+
+\subhead Category codes \endhead
+
+Normally, \TeX\ distinguishes between sixteen categories of
+characters. To avoid unwanted side effects, the \BaSiX\ interpreter
+reassigns category codes of all non-letters to category 12, ``other''.
+One undocumented feature of \TeX\ is that it will never let you strand
+yourself without an ``active'' character (which is normally the
+backslash); if you try to reassign the category of your only active
+character (with, {\it e.g.,} |\catcode`\\=12|), it will fail silently.
+To allow us to use every typeable character in \BaSiX, we first make
+|\catcode31=0|, which then allows us to reassign the catcode of the
+backslash without stranding ourselves. (Of course, the \BaSiX\
+interpreter provides an escape back to \TeX\ which restores the normal
+category codes.)
+
+We also change the category code of |^^M|, the end-of-line character,
+to ``active''. This lets us detect end-of-line errors that may crop
+up.
+
+\subhead etc. \endhead %@ ?????? New section coming here?
+
+%@ Yeah -- internal representation of data, for instance
+
+\head Semantics \endhead
+
+\subhead Words \endhead
+
+A {\it word\/} is a collection of one or more characters that meet
+requirements based on the first character. The following table
+describes these rules using {\it regular expression} notation.%
+\footnote{$^2$}{In this notation, [A-Z,a-z] means ``any character
+falling between A and Z or between a and z, inclusive.'' An asterisk
+means ``repeat the preceding specification as many times as needed, or
+never.'' A plus means ``repeat the preceeding specification as many
+times as needed, at least once.'' A question mark means ``repeat the
+preceeding specification zero or one times.'' A dot means ``any
+character.''} These rules are:
+
+\medskip\begingroup\ninepoint %@ Much too wide @ 10pt
+\halign{\tt#\hfil&\ \tt#\hfil&\ #\hfil\cr
+\rm First &\rm Regular \cr
+\noalign{\vskip-2pt}
+\rm Character &\rm Expression &\rm Meaning \cr
+\noalign{\vskip2pt\hrule\vskip2pt}
+[A-Z,a-z] & [A-Z,a-z][A-Z,a-z,0-9]*\$? & Identifier \cr
+[0-9] & [0-9]+ & Integer \cr %@ literal \cr Too
+" & "[\^{}"]*[",\^{}\^{}M] & String \cr %@ literal \cr Wide
+\rm Other & . & Symbol \cr}\endgroup
+\medskip
+
+\noindent
+An end-of-line at the end of a string literal is converted to a |"|.
+
+Everything in \BaSiX\ is one of these four types. Line numbers are
+integer literals, and both variables and commands are identifiers.
+
+The |\scan| macro is used in \BaSiX\ to read the next word. It uses
+|\futurelet| to look at the next token and determine whether it should
+be part of the current word; {\it i.e.}, whether it matches the
+regular expression of the current type. If so, then it is
+read in and appended; otherwise |\scan| returns, leaving this next
+token in the input stream. The word is returned in the macro |\word|.
+
+The peculiar way |\scan| operates gives rise to new problems, however.
+We can't say
+\verbatim
+\def\Cgoto{\scan\lineno=\word}
+\endverbatim
+
+\noindent
+because |\scan| looks at the tokens which follow it, which in this
+case are |\lineno=\word|. We need some way to define the |goto|
+command %@ such
+so %@ [?]
+ that the |\scan| is at the end of the macro; this will
+take the next tokens from the input stream. We therefore have |\scan|
+``return'' to its caller by breaking the caller into two parts; the
+first part ends with |\scan| and the second part contains the code
+which should follow. The second macro is stored in |\afterscan|, and
+|\scan| ends with |\afterscan|. As syntactic sugar, |\after| has been
+defined as |\let\afterscan|. This allows |\Cgoto| to be coded as
+
+\verbatim
+\def\Cgoto{\after\gotoPartTwo\scan}
+\def\gotoPartTwo{\lineno=\word}
+\endverbatim
+
+\noindent
+(Actually, the |goto| code is slightly more complicated than this; but
+the scanner is the important point here.) This trick is used
+throughout the \BaSiX\ interpreter to read in the next tokens from the
+user's input without interrupting the expansion of the \TeX\ macros
+that comprise the interpreter.
+
+\subhead Expressions \endhead
+
+An {\it expression} is a sequence of words that, roughly speaking,
+alternates between {\it values} and {\it operators}. A value is
+%@ %@ either [exclusive or does strange things with more than 2 items]
+%@
+%@ >webster either
+%@ ...lines omitted...
+%@ 3. either cj : - used as a function word before two or more coordinate
+%@ words, phrases, or clauses joined usu. by or to indicate that what
+%@ immediately follows is the first of two or more alternatives
+%@ ^^^^^^^
+%@ one of three things:\ %@
+either
+a literal, an identifier, or a parenthesized expression. An
+operator is one of less-than, more-than, equality, addition,
+subtraction, multiplication, division, or reference. (Reference is an
+implicit operator that is inserted between a function identifier and
+its parameters.)
+
+Expressions are evaluated in an approach similar to that used in
+the scanner.
+A word is scanned using |\scan| and its type is determined.
+``Left-hand'' values are stored for relatives, additives,
+multiplicatives, and references. Using \TeX's grouping operations the
+evaluator is reentrant, permitting parenthesized expressions to be
+recursively evaluated.
+
+In order to achieve a functionality similar to that of
+|\futurelet|, we exit the evaluator by
+\hbox{|\expandafter\aftereval\word|,} %@ [prevent hyphenation]
+where the macro \hbox{|\aftereval|}
+is analogous to |\afterscan|. Since |\word| will
+contain neither macros nor tokens whose category codes need changing,
+this is as good as |\futurelet|.
+
+\head Structure of the Interpreter \endhead
+
+The file |basix.tex|, which appears as an appendix to this paper,
+defines all the macros that are needed to run the
+interpreter. The last line of this file is |\endeval|, which is
+usually called when the interpreter has finished evaluating a line.
+In this case, it calls |\enduserline|, which, in turn, calls
+|\parseline|.
+
+The |\parseline| macro is part of the {\it Program Parser} section of
+the interpreter. It starts by calling |\scan| to get the first
+word of the next line. If |\word| is an integer literal, it is
+treated as a line number and the rest of the input line is stored in
+the appropriate variable without interpretation. If |\word| is
+not an integer literal, it is treated as a command.
+
+Each command is treated with an {\it ad hoc} routine near the bottom
+of |basix.tex|. However, most of them call on a set of utilities that
+appear earlier in the file.
+
+\subhead Character-string calls \endhead
+
+There is a simple library of macros that convert between ASCII codes
+and character tokens, test for string equality, take subsections of
+strings, and deal with concatenation.
+
+\subhead Debugging definitions \endhead
+
+The macro |\diw| is a debugging-mode-only |\immediate\write16| (hence
+the name |\diw|). It is toggled by the user commands |debug| and
+|nodebug|.
+
+\subhead Expression evaluation \endhead
+
+The expression evaluator has a calling structure similar
+to that of the scanner. Calling routines are split in twain, with
+
+\verbatim
+\def\foo{\after\fooPartTwo\expression}
+\def\fooPartTwo{\etc}
+\endverbatim
+
+\noindent
+being a prototype of the calling convention. The evaluator will
+|\scan| as many words as it can that make sense; in contrast to the
+scanner, however, it evaluates each instead of merely
+accumulating them. This process is described
+above.
+
+\subhead Linked list \endhead
+
+The \BaSiX\ interpreter maintains a linked list of line numbers. The
+macro
+
+\everyverbatim{\enablemetacode}
+\verbatim
+\csname L<current line number>\endcsname
+\endverbatim
+
+\noindent
+contains the next line number. These macros will follow the linked
+list (for the |list| command); they also can insert a new line or
+return the number of the next line.
+
+\subhead Program parser \endhead
+
+This section contains a number of critical routines. |\evalline| is
+the macro that does the dispatching based on the user's command.
+|\mandatory| specifies what the next character must be (for example,
+the character after the identifier in a |let| statement must be |=|).
+|\parseline| has already been described.
+
+\subhead Syntactic scanner \endhead
+
+This is the section containing |\scan| and its support macros, which
+are described above.
+
+\subhead Type tests \endhead
+
+These routines take an argument and determine whether it is an
+identifier, a string variable, a string literal, an integer literal, a
+macro, or a digit. The normal way of calling these routines is
+
+\verbatim
+\expandafter\if\stringP\word
+\endverbatim
+
+\noindent
+These predicates expand into either |tt| (true) or |tf| (false).
+Syntactic sugar is provided in the form of |\itstrue| and |\itsfalse|.
+|\ifstring\word| doesn't work because of the way \TeX\ matches |\if|
+and |\fi| tokens\Dash\ only |\if|-style primitives are recognized.
+
+\subhead User Utilities \endhead
+
+This is the section of the interpreter in which most of the user
+commands are defined. Commands are preceded by |\C| ({\it e.g.},
+|\Clist| is the macro called when the user types |list|). Functions
+are preceded by |\F|.
+
+\head Limitations of this implementation \endhead
+
+\BaSiX\ is a minimal \basic\ interpreter. There are enough pieces to
+show how things work, but not enough to do anything practical. Here
+is a description of the capabilities of this interpreter, so that the
+reader can play with it. Error recovery is virtually non-existant, so
+getting the syntax right and not calling non-existent functions is
+critical.
+
+\subhead Entering programs \endhead
+
+Lines beginning with an integer literal are stored verbatim. Lines
+are stored in ascending order, and if two or more lines are entered
+with the same number, only the last is retained.
+
+\subhead Immediate commands \endhead
+
+Lines not beginning with an integer are executed immediately. Colons
+are not supported, so only one command may appear on a line. (When a
+program line is executed, its line number is stripped and the
+remainder is executed as though it were an immediate command.)
+
+\subhead Commands \endhead
+
+The following commands are implemented in some form: |goto|, |run|,
+|list|, |print|, |let|, |if|, |debug|, |nodebug|, |rem|, |system|,
+|exit|, and |stop| (but not |cont|). The interpreter is case
+sensitive (although with an appropriate application of |\uppercase| it
+needn't be; I was lazy), so these must be entered in lowercase.
+
+The following tables list the commands with no parameters, the
+commands that take one parameter, and the two commands (|let| and |if|)
+that take special forms.
+
+The commands with no parameters are:
+
+\medskip{\ninepoint\halign{\tt #\hfil&\ #\hfil\cr
+run & Starts execution at the lowest line number. \cr
+& Does {\it not} clear variables. \cr
+stop & Stops execution immediately. \cr
+list & Lists all lines in order. \cr
+debug & Useful information sent to terminal. \cr
+nodebug & Stop debugging mode. \cr
+rem & Rest of line is ignored. \cr
+system & Exit \TeX. \cr
+exit & Exit \BaSiX\ to \TeX. \cr
+}}
+
+\medskip
+The commands with one parameter are:
+\medskip
+
+{\ninepoint\halign{\tt #\hfil&\ #\hfil\cr
+goto & Starts execution at the given line number. \cr
+list & Lists the given line. \cr
+print & Displays the given argument. \cr
+}}
+
+\medskip\noindent
+(Any of these arguments may be an expression.)
+
+The |let| and |if| commands take special forms. Variable assignments
+require an explicit |let| command:
+||let <identifier> = <expression>||
+Conditionals do not have an |else| clause, and |goto| is not implied
+by |then|:
+||if <expression> then <new command>||
+The new command is treated as its own line.
+
+\subhead Expressions \endhead
+
+Expressions are defined explicitly above. The operators are |+|, |-|,
+|*|, |/|, {\tt <}, |=|, and {\tt >}. Parentheses may be used for
+grouping. Variables may not be referenced before being set. (Unlike
+in traditional \basic, variables are not assumed to be |0| if never
+referenced, and they aren't cleared when |run| is encountered).
+
+Functions are invoked with
+||[\lastoption]<function name>(<param>,<param>,...)||
+The parameters are implicitly-delimited expressions that are passed to
+|\matheval| (which is simply called |\eval| in the table below to save
+space). The following functions are defined:
+
+{\ninepoint\halign{\tt #\hfil&\ #\hfil\cr
+len(string) & Returns number of characters \cr
+& \quad in the string. \cr
+chr\$(expr) & Returns the character with the \cr
+& \quad given ascii value. \cr
+inc(expr) & Returns $\hbox{\tt\char`\\eval}(\hbox{\it expr})+1$. \cr
+min(expr1,expr2) & Returns the lesser of two {\tt\char`\\eval}s. \cr
+}}
+
+\head Generalization \endhead
+
+The \BaSiX\ interpreter can easily be generalized to serve other
+needs. These other needs might be to interpret Lisp or \ps\ code
+[Anyone want to write a \ps\ interpreter in \TeX?]; or to take source
+code in a given language and pretty-print it.
+
+The definition of a ``word'' can be changed by modifying the |\scan|
+macro. It selects a definition for |\scantest| based on the first
+character; \hbox{|scantest|} %@ prevent hyphenation
+is what determines if a given token matches the selected
+regular expression. The |\scantest| macro is allowed to redefine
+itself.
+
+The evaluation of expressions can be extended or changed by modifying
+the |\math| code. Floating-point (or even fixed-point) numbers could
+be dealt with, although the period would need to pass the |\digitP|
+test in some cases and not in others.
+
+The method of dealing with newlines is easily removed for languages
+such as \ps\ or Lisp for which all whitespace is the same.
+
+\head Obtaining copies of basix.tex \endhead
+
+The source code to this paper and the \BaSiX\ interpreter are
+available by anonymous ftp from |gevalt.mit.edu|, which is at IP
+address 18.72.1.4. I will also mail out copies to anyone without ftp
+abilities.
+
+\head Summary \endhead
+
+Using a number of \TeX\ tricks, some more devious than others, a
+\basic\ interpreter can be written in \TeX. While \TeX\ macros will
+often be less efficient than, for example, |awk| paired with \TeX,
+solutions using only \TeX\ will be more portable. A less general
+macro package than \BaSiX\ could be written that uses these routines
+as paradigms and that is very efficient at parsing a specific input
+format.
+
+\appendix Listing of {\tt basix.tex}\endappendix
+
+\everyverbatim{} %@ disable this metacode garbage :-) - AMG
+\verbfile
+{/afs/athena.mit.edu/user/a/amgreene/TeXhax/basix.tex}[\numbered][\smallcode]
+\endverbatim
+
+
+
+\bye
+-------
diff --git a/macros/generic/bitelist/README b/macros/generic/bitelist/README
new file mode 100644
index 0000000000..8133100641
--- /dev/null
+++ b/macros/generic/bitelist/README
@@ -0,0 +1,64 @@
+
+ README for the `bitelist' package
+ "Split list at list inside in TeX's Mouth"
+ (C) Uwe Lueck 2012/03/28
+
+
+`bitelist.sty' provides commands for "splitting" a token list
+at the first occurrence of a contained token list. I.e., for given
+token lists s, t return b and shortest a, such that t = a s b.
+As opposed to other packages providing similar features,
+ (i) the method uses TeX's mechanism of reading delimited macro
+ parameters;
+ (ii) the splitting macros work by pure expansion, without
+ assignments, provided the macro doing the search has been
+ defined before processing (e.g., a file);
+(iii) instead of using one macro for a "substring" test and another
+ one to replace the "substring"--which includes extracting
+ corresponding prefix and suffix--, the *same* macro that
+ detects the occurrence returns the split;
+ (iv) e-TeX is not required.
+(And LaTeX is not required.) This improves `fifinddo.sty' (v0.51).
+
+An elaborated approach (additionally to a simpler one) is provided
+that does not loose outer braces of prefix/suffix.
+
+"Substring" detection and "string" replacement are (implicitly)
+included with respect to certain representations of characters by tokens.
+Counting occurrences and "global" replacement could be achieved
+by applying the operation to earlier results, etc.--so
+this approach seems to be "fundamental" for a certain larger
+set of list analysis tasks.
+
+The documentation aims to prove the correctness of the methods
+with mathematical rigour.
+
+KEYWORDs: macro programming, text filtering, substrings
+
+RELATEd PACKAGEs: datatool, stringstrings, ted, texapi, xstring
+
+The package file `bitelist.sty' and the documentation files
+`bitelist.pdf' and `bitelist.tex' can be redistributed and/or
+modified under the terms of the LaTeX Project Public License;
+either version 1.3c of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+We did our best to help you, but there is NO WARRANTY.
+
+The `bitelist' package is author-maintained in the sense of
+this license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/latex/contrib/bitelist/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/generic/bitelist.tds.zip
+
+Please report bugs, problems, and suggestions via
+
+ http://www.contact-ednotes.sty.de.vu
+
+
diff --git a/macros/generic/bitelist/SrcFILEs.txt b/macros/generic/bitelist/SrcFILEs.txt
new file mode 100644
index 0000000000..f795ea1992
--- /dev/null
+++ b/macros/generic/bitelist/SrcFILEs.txt
@@ -0,0 +1,11 @@
+
+ *File List*
+ bitelist.sty 2012/03/29 v0.1 split lists in TeX's mouth (UL)
+ bitelist.tex 2012/03/29 -- documenting bitelist.sty
+ bitedemo.tex 2012/03/29 -- demonstrating/testing bitelist.sty (UL)
+ srcfiles.tex 2012/03/29 -- file infos -> SrcFILEs.txt
+ ***********
+
+ List made at 2012/03/29, 13:58
+ from script file srcfiles.tex
+
diff --git a/macros/generic/bitelist/bitedemo.tex b/macros/generic/bitelist/bitedemo.tex
new file mode 100644
index 0000000000..6c4f9ed103
--- /dev/null
+++ b/macros/generic/bitelist/bitedemo.tex
@@ -0,0 +1,43 @@
+\def\filename{bitedemo.tex} \def\filedate{2012/03/29}
+\def\fileinfo{demonstrating/testing bitelist.sty (UL)}
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax \else
+ \edef\bitedemolatexstart{%
+ \noexpand\ProvidesFile{\filename}%
+ [\filedate\space\fileinfo]%
+ \noexpand\RequirePackage{bitelist}}
+ \expandafter\bitedemolatexstart
+\fi
+\ifx\BiteMakeIf\undefined \input bitelist.sty \fi
+\ifx\typeout\undefined
+ \def\typeout{\immediate\write17}
+ \newlinechar`^^J
+\fi
+\def\splitted #1#2#3{>>#1|#2|#3<<}
+\def\unsplitted#1{>>#1<<}
+\def\spacetocomma#1#2{>>#1,#2<<}
+\BiteMakeIfOnly {\def}{\occursyesno}{no}
+\BiteMakeIf {\def}{\noshowsplit}{no}
+\BiteMakeIfBraces{\def}{\noShowSplit}{no}
+\typeout{^^J
+ \BiteFindByIn {no}{\occursyesno}
+ {bonobo}{YES!}{NO!}
+ \BiteFindByIn {no}{\noshowsplit}
+ {bonobo}{bonobo}{\splitted}{\unsplitted}
+ \BiteFindByInIn{no}{\noshowsplit}
+ {bonobo}{\splitted}{\unsplitted}
+ ^^J
+ \BiteFindByIn {no}{\occursyesno}
+ {bobobo}{YES!}{NO!}
+ \BiteFindByIn {no}{\noshowsplit}
+ {bobobo}{bobobo}{\splitted}{\unsplitted}
+ \BiteFindByInIn{no}{\noshowsplit}
+ {bobobo}{\splitted}{\unsplitted}
+ ^^J
+ \BiteFindByInBraces{no}{\noShowSplit}
+ {{bo}no{bo}}{\splitted}{\unsplitted}
+ ^^J
+ \BiteGetNextWord{bo no bo}{\spacetocomma}{\unsplitted}
+ \BiteGetNextWord{bo nobo} {\spacetocomma}{\unsplitted}
+ \BiteGetNextWord{bonobo} {\spacetocomma}{\unsplitted}
+ ^^J}
+\endinput
diff --git a/macros/generic/bitelist/bitelist.pdf b/macros/generic/bitelist/bitelist.pdf
new file mode 100644
index 0000000000..5608e6e5e8
--- /dev/null
+++ b/macros/generic/bitelist/bitelist.pdf
Binary files differ
diff --git a/macros/generic/bitelist/bitelist.sty b/macros/generic/bitelist/bitelist.sty
new file mode 100644
index 0000000000..219008d693
--- /dev/null
+++ b/macros/generic/bitelist/bitelist.sty
@@ -0,0 +1,240 @@
+\def\filename{bitelist} \def\filedate{2012/03/29}
+\def\fileversion{v0.1} \def\fileinfo{split lists in TeX's mouth (UL)}
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% There is NO WARRANTY - this rather is somewhat experimental.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% === Proceeding without \LaTeX ===
+%% Some tricks from Bernd Raichle's \CtanPkgRef{ngerman}{ngerman.sty}---I
+%% need \LaTeX's `\Provides'\-`Package' for \ctanpkgref{fileinfo},
+%% my package version tools. With 'readprov.sty', it issues `\endinput',
+%% close conditional before:
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax \else
+ \edef\fileinfo{\noexpand\ProvidesPackage{\filename}%
+ [\filedate\space \fileversion\space \fileinfo]}
+ \expandafter\fileinfo
+\fi
+\chardef\atcode=\catcode`\@
+\catcode`\@=11 % \makeatletter
+%% Providing \LaTeX's `\@firstoftwo' and `\@secondoftwo':
+\long\def\@firstoftwo #1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+%%
+%% === Basic Parsing (No Braces) ===
+%%
+%% |\BiteMake{<def>}{<cmd>}{<find>}| provides the parameter text
+%% (\TeX book p.~203) for defining (by <def>) a macro <cmd> that will
+%% search for <find>:
+\def\BiteMake#1#2#3{#1#2##1#3##2\BiteSep##3\BiteStop}
+%% With |\BiteFindByIn{<find>}{<cmd>}{<list>}|,
+%% you can use a <cmd> (perhaps defined by &\BiteMake)
+%% in order to search <find> in <list>.
+%% This is expandable as promised:
+\def\BiteFindByIn#1#2#3{%
+ #2#3\BiteSep#1\BiteCrit\BiteSep\BiteStop}
+%% Preparing a possible &\edef as <def>:
+\let\BiteSep\relax \let\BiteStop\relax
+%% And this is important in any case for correct testing of
+%% occurrence:\footnote{The idea for the ``funny `Q'"
+%% is from the \ctanpkgref{ifmtarg} package.}
+\catcode`\Q=7 \let\BiteCrit=Q \catcode`\Q=11
+%% Perhaps you could increase safety of tests by using something similar to the funny `Q'
+%% for &\BiteSep and &\BiteStop.
+%% %% 2012/03/28:
+%% However, this would additionally require reimplementation of
+%% the macros for keeping braces (Section~\ref{sec:braces}) using `\edef'.
+%% % It appears to me, however, that expandable tests like this one
+%% % never are perfectly safe; you only can say that it is safe with a
+%% % source meeting certain conditions. \ctanpkgref{fifinddo} originally
+%% % was made for ``plain text," to be read from files without assigning
+%% % \TeX's special category codes. \emph{Here} we assume that the source
+%% % (text in \cs{Provides.\empty..} arguments) will never contain such a
+%% % ``funny `Q'".
+%%
+%% === Simple Conditionals ===
+%% By |\BiteMakeIfOnly{<def>}{<cmd>}{<find>}|, you can make a command <cmd>
+%% that with
+%% \[|\BiteFindByIn{<find>}{<cmd>}{<list>}{<yes>}{<no>}|\]
+%% chooses <yes> if <find> occurs in <list> and <no> otherwise.
+\def\BiteMakeIfOnly#1#2#3{\BiteMake{#1}{#2}{#3}{\BiteIfCrit{##2}}}
+%% |\BiteIfCrit{<suffix>}{<yes>}{<no>}|
+%% is the basic test for occurrence of <find> in <list>:
+\def\BiteIfCrit#1{\ifx\BiteCrit#1\expandafter\@secondoftwo
+%% If <cmd>'s second argument---same as &\BiteIfCrit's first argument---is
+%% empty, &\BiteCrit is compared with &\expandafter, so <yes> is chosen.
+%% That is correct, it happens when <find> is a suffix of <list>.
+ \else \expandafter\@firstoftwo \fi }
+%%
+%% === Passing Results Completely---No Braces ===
+%% So the previous `\BiteMakeIfOnly' generates pure tests on occurrence,
+%% giving away information about prefix and suffix.
+%% It may be considered a didactical step fostering understanding of the following.
+%% % \medskip\noindent
+%% % ** Generic Fundamental Splitter---No Braces **
+%% %% Wrong:
+%% % With the above `\BiteMakeIfOnly', the user can choose on her own
+%% % information about the composition of <list> to use.
+%% % Perhaps it is not easy to understand.
+%% % `\BiteMakeIfOnlySplit{<def>}{<cmd>}{<find>}' by contrast,
+%% % should satisfy ``all needs" by providing \emph{all} the information
+%% % about splitting a <list>. It may also be a template for using
+%% % `\BiteMakeIfOnly'.
+%% When, by contrast \[|\BiteMakeIf{<def>}{<cmd>}{<find>}|\]
+%% has been issued, a later
+%% $$|\BiteFindByIn{<find>}{<cmd>}{<list>}{<list>}{<yes>}{<no>}|\eqno(*)$$
+%% will expand to
+%% \[`<yes>{<prefix>}{<find>}{<suffix>}'\]
+%% if <list> is composed as <prefix><find><suffix>
+%% and <prefix> is the shortest $\alpha$ such that there is some $\beta$
+%% with $<list>=\alpha<find>\beta$. Otherwise, $(*)$ will expand to
+%% \[`<no>{<list>}'\]
+%% This gives all the information available.
+%% For actual applications, it may be too much, and the macro programmer
+%% may do something in between of `\BiteMakeIfOnly' and `\BiteMakeIf':
+\def\BiteMakeIf#1#2#3{%
+ \BiteMake{#1}{#2}{#3}##4##5##6{%
+%% In the replacement text, we first do the same as with `\BiteMakeIfOnly':
+ \BiteIfCrit{##2}%
+%% What follows is new. <cmd>'s third argument is ignored.
+%% The fourth keeps the original <list>.
+%% <yes> is <cmd>'s fifth and <no> is its sixth argument.
+ {##5{##1}{#3}{##2}}% %% if #3 in ##4
+ {##6{##4}}% %% otherwise
+ }%
+}
+%% In $(*)$, <list> has been doubled. That was no mistake.
+%% It is due to a shortcoming of `\BiteFindByIn'.
+%% With
+%% \[|\BiteFindByInIn{<find>}{<cmd>}{<list>}{<yes>}{<no>}|\]
+%% you get the same result as with $(*)$:
+\def\BiteFindByInIn#1#2#3{\BiteFindByIn{#1}{#2}{#3}{#3}}
+%% TODO not sure about command names yet
+%%
+%% == Example Applications ==
+%% === Splitting at Space ===
+%% \label{sec:space}
+%% This work actually arose from modifying `\GetFileInfo'
+%% as provided by \LaTeX's \ctanpkgref{doc} package
+%% so that it would deal reasonably with ``incomplete" file info---for
+%% the \ctanpkgref{nicefilelist} package.
+%% `\GetFileInfo' works best when the file info contains
+%% at least \emph{two} blank spaces. But how many are there indeed?---And
+%% I wanted to do it \emph{expandably:} while `\GetFileInfo' issues
+%% \emph{definitions} of `\filedate', `\fileversion', and `\fileinfo',
+%% date, version, and info should be passed as \emph{macro arguments}.
+%% \medbreak\noindent
+%% |\BiteIfSpace| tries splitting at the next blank space passes results:
+\BiteMake{\def}{\BiteIfSpace}{ }#4#5#6{%
+ \BiteIfCrit{#2}{#5{#1}{#2}}{#6{#4}}}
+%% The difference to the `\BiteMakeIf' construction is that we do not
+%% pass <find>, the space---it's not essential.
+%% (TODO names may change ...)
+%%
+%% Now \[|\BiteFindByInIn{ }{\BiteIfSpace}{<list>}{<yes>}{<no>}|\]
+%% will pass prefix/suffix to <yes> or <list> to <no>.
+%% If this is needed frequently, here is a shorthand
+%% |\BiteGetNextWord{<list>}{<yes>}{<no>}|:
+\def\BiteGetNextWord{\BiteFindByInIn{ }\BiteIfSpace}
+%% See a test in `bitedemo.tex' (Section~\ref{sec:demo}).
+%%
+%% === Splitting at Comma ===
+%% ... left as an exercise to the reader ...
+%%
+%% == Keeping Braces: Reasoning ==
+%% \label{sec:braces}
+%% Now we want to generalize task (Section~\ref{sec:task})
+%% and solution (Section~\ref{sec:trick}) for the case that
+%% $\tau=<list>$ has (balanced) braces
+%% (with category codes for argument delimiters),
+%% while $\sigma=<find>$ still has not (does not work with our method).
+%% So with $\tau=\alpha\sigma\beta$,
+%% $\alpha$ (``prefix") or $\beta$ (``suffix") or both
+%% may contain braces. But we consider another restriction:
+%% braces must be balanced in $\alpha$ and in $\beta$,
+%% we don't try parsing inside braces
+%% (as opposed to the search for asterisks in Appendix~D
+%% of The~\TeX book).
+%%
+%% According to \TeX book p.~204, when a macro <cmd> finds an argument
+%% formed as `{<tokens>}', in <cmd>'s replacement text only <tokens>
+%% is used, i.e., outer braces are removed.
+%% So when $\alpha=`{<tokens>}'$, a parser <cmd> as defined by our
+%% methods above will return <tokens> instead of `{<tokens>}'---likewise
+%% for $\beta$. We are now trying to \emph{keep} outer braces in prefix/suffix
+%% by a more elaborate method.
+%%
+%% The idea is to present $\tau=<list>$ with context\footnote{Perhaps
+%% I am confusing `&\empty' and the token list containing just `&\empty' here?}
+%% \[`<cmd>\empty<list><stop><sep><find><crit><sep><stop>'\]
+%% or in the notation of Section~\ref{sec:trick}
+%% \[`<cmd>\empty'\tau\theta\zeta\sigma\rho\zeta\theta\]
+%% Then, if <find> occurs in <list>, we must remove the `\empty'
+%% from the prefix that we get with the earlier method (easy)
+%% and <stop> from the suffix (tricky, similar problem recurs).
+%% Using old $\theta$ for a new purpose works here because
+%% <cmd> will look for $\theta$ only when it has found $\zeta$ before.
+%%
+%% Mere testing for occurrence is not affected.
+%% \[`\BiteMakeIfOnly' \quad \mbox{and} \quad `\BiteFindByIn'\]
+%% still can be used.
+%% We provide an improved version of
+%% \[`\BiteMakeIf' \quad (`\BiteMakeIfBraces')\] and of
+%% \[`\BiteFindInIn' \quad (`\BiteFindInBraces').\]
+%%
+%% == Implementation Part II ==
+%% === Keeping Braces ===
+%% \[|\BiteFindByInBraces{<find>}{<cmd>}{<list>}{<yes>}{<no>}|\]
+%% varies `\BiteFindByInIn' according to the previous:
+\def\BiteFindByInBraces#1#2#3{%
+ #2\empty#3\BiteStop\BiteSep#1\BiteCrit\BiteSep\BiteStop{#3}}
+%% Such a <cmd> can be made by |\BiteMakeIfBraces{<def>}{<cmd>}{<find>}|:
+\def\BiteMakeIfBraces#1#2#3{%
+ \BiteMake{#1}{#2}{#3}##4##5##6{%
+ \BiteIfCrit{##2}%
+%% <no> works as before. For <yes>, first the `\empty' in the prefix
+%% is expanded for vanishing.
+%% `\BiteTidyI' and `\BiteTidyII' continue tidying.
+ {\expandafter \BiteTidyI %% if #3 in ##4
+ \expandafter{##1}% %% prefix
+%% Another `\empty' avoids that removal of `\BiteStop' in suffix
+%% by `\BiteTideII' removes outer braces:
+ {\BiteTidyII\empty##2}% %% suffix
+ {#3}% %% find
+ {##5}}% %% yes
+ {##6{##4}}% %% otherwise
+ }%
+}
+%% |\BiteTidyI{<prefix>}{<suffix>}| \ first expands `\BiteTidyII'
+%% for removing `\BiteStop' in <suffix>.
+%% `\empty' from `\BiteFindByInBraces' remains and is expanded next
+%% for vanishing. Finally, `\BiteTidied' reorders arguments
+%% for operation of <yes>:
+\def\BiteTidyI#1#2{%
+ \expandafter\expandafter\expandafter \BiteTidied
+ \expandafter\expandafter\expandafter {#2}{#1}}
+\def\BiteTidyII#1\BiteStop{#1}
+\def\BiteTidied#1#2#3#4{#4{#2}{#3}{#1}}
+%%
+%% === Leaving the Package File ===
+\catcode`\@=\atcode
+\endinput
+%%
+%% === VERSION HISTORY ===
+
+v0.1 2012/03/26 started
+ 2012/03/27 continued, restructured
+ 2012/03/28 continued, separate sections for "Mere Occurrence"
+ vs. ...; keeping braces, \BiteIfCrit
+ 2012/03/29 proceeding without LaTeX corrected, restructured
diff --git a/macros/generic/bitelist/docsrc/bitelist.tex b/macros/generic/bitelist/docsrc/bitelist.tex
new file mode 100644
index 0000000000..7f6ec25c57
--- /dev/null
+++ b/macros/generic/bitelist/docsrc/bitelist.tex
@@ -0,0 +1,319 @@
+\ProvidesFile{bitelist.tex}[2012/03/29 documenting bitelist.sty]
+\title{\textsf{\huge bitelist.sty %% \huge 2012/03/19
+ }\\---\\``Splitting" a List at a List Inside
+ \\in \TeX's Mouth\thanks{This
+ document describes version
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \textsf{\jobname.sty} as of \UseDateOf{\jobname.sty}.}}
+% \listfiles
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \MakeJobDoc{17}
+ {\SectionLevelTwoParseInput} }
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+% \ReadPackageInfos{bitelist}
+\usepackage{bitelist}
+\sloppy
+\MDkeywords{macro programming, text filtering, substrings}
+\begin{document}
+\maketitle
+\begin{MDabstract}
+'bitelist.sty' provides commands for ``splitting" a token list
+at the first occurrence of a contained token list
+(i.e., for given $\sigma$, $\tau$,
+ return $\beta$ and shortest $\alpha$ s.t.\ $\tau=\alpha\sigma\beta$).
+ As opposed to other packages providing similar features,
+\ (\textit{i})\enspace the method uses \TeX's mechanism of reading
+delimited macro parameters;
+\ (\textit{ii})\enspace the splitting macros work by pure expansion,
+without assignments, provided the macro doing the search has been
+defined before processing (e.g., a file);
+\ (\textit{iii})\enspace instead of using one macro for a ``substring"
+test and another one to replace the ``substring"---which includes
+extracting corresponding prefix and suffix---,
+the \emph{same} macro that detects the occurrence returns
+the split;
+\ (\textit{iv})\enspace
+\httpref{ctan.org/pkg/e-tex}{$\varepsilon$\hbox{-}\TeX} is not required.
+\ (And \LaTeX\ is not required.)
+
+This improves the author's \CtanPkgRef{fifinddo}{fifinddo.sty}
+(v0.51---and may once be used there). An elaborated approach
+(additionally to a simpler one) is provided that does not loose
+outer braces of prefix/suffix.
+
+``Substring" detection and ``string" replacement are (implicitly) included
+with respect to certain representations of characters by tokens.
+Counting occurrences and ``global" replacement could be achieved
+by applying the operation to earlier results, etc.---so
+this approach seems to be ``fundamental" for a certain larger
+set of list analysis tasks.
+
+The documentation aims to prove the correctness of the methods
+with mathematical rigour.
+\par\smallskip\noindent
+\strong{Related packages:}\quad
+\ctanpkgref{datatool}, \ctanpkgref{stringstrings}, \ctanpkgref{ted},
+\ctanpkgref{texapi}, \ctanpkgref{xstring}
+\end{MDabstract}
+\newpage
+\tableofcontents
+
+\section{Task, Background Reasoning, and Usage}
+\subsection{The Task Quite Precisely}
+\label{sec:task}
+
+Perhaps I should not have written ``splitting" before,
+see Section~\ref{sec:name} why I did so though.
+Actually:
+
+At first we are dealing with token lists $\tau$ and $\sigma$
+without braces
+(unless their category code has been changed appropriately)
+that can be stored as macros without parameter or in token list registers.
+We want to find out whether $\tau$ contains $\sigma$ (``as a subword")
+in the sense that there are such token lists $\alpha$ and $\beta$ that
+$\tau$ is composed as $\alpha\sigma\beta$, i.e.,
+\[\tau=\alpha\sigma\beta\]
+and in this case
+we want to get $\alpha$ and $\beta$ of this kind with
+$\alpha$ being the \emph{shortest} possible.
+I.e., if there are such $\gamma$ and $\delta$ that $\tau$
+is composed as $\gamma\sigma\delta$, $\alpha$ must be contained
+as a ``prefix" in $\gamma$,
+i.e., $\gamma$ is composed as $\alpha\eta$ for some token list $\eta$.
+The token lists $\alpha$, $\beta$, $\gamma$, $\delta$, $\eta$,
+$\sigma$, and $\tau$ are allowed to be empty throughout.
+
+The task will be extended for some braces in Section~\ref{sec:braces}.
+
+\subsection{Idea of Solution}
+
+\TeX's mechanism of expanding macros (\TeX book Chapter~20)
+at least has a built-in mechanism to return such $\alpha$ and $\beta$
+\emph{provided} $\tau$ contains $\sigma$. Define
+\[`\def<cmd>#1'\sigma`#2'\theta`{<replace-def>}'\]
+where $\theta$ must be a token list (maybe of a single token)
+that won't occur in $\tau$.\footnote{I am still following others in confusing
+ source code and tokens. I have better ideas, but must expand on them
+ elsewhere. Writing `&\def' rather indicates that it is source code,
+ then $\sigma$ etc. should be replaced by strings that are converted
+ into tokens $\sigma$ etc.
+ <cmd> sometimes is a \emph{string} starting with an escape character,
+ or it is an active character; but sometimes it rather is an ``active"
+ \emph{token} converted from such an escape string or an active character.}
+This is a \strong{limitation} of the approach:
+It works for sets of such $\tau$ only that do not contain
+any of a small set of tokens or combinations of them.
+('bitelist' will use `\BiteSep', `\BiteStop', and `\BiteCrit',
+ or any other three that can be chosen.)
+
+On the other hand, \TeX's \emph{category codes}
+(\TeX book Chapter~7) can ensure this quite well.
+E.g., we may assume that input ``letters" always have category code 11
+(or 12, or one of them), and for $\theta$ we can choose letters
+with \emph{different} category codes such as 3.
+Without such tricks, you may often assume that nobody will input
+certain ``silly" commands such as `\BiteStop'.
+(But it may become difficult when you use a package for
+ replacement macros for generating its own documentation \dots)
+
+With a <cmd> as defined above, \TeX\ will
+\[\mbox{expand\quad}
+ `<cmd>'\tau\theta
+ \quad\mbox{to}\quad
+ <replace>,\]
+where <replace> will be the result of replacing
+\ (a)\enspace all occurrences of `#1' in <replace-def> by $\alpha$ as wanted and
+\ (b)\enspace all occurrences of `#2' in <replace-def> by $\beta$ as wanted.
+\
+I.e., <cmd> returns $\alpha$ as its first argument and $\beta$ as its second argument.
+The reason is that <cmd>'s first parameter is delimited by $\sigma$ and the second one by
+$\theta$ in the sense of The~\TeX book p.~203.
+Our requirement to get the \emph{shortest} $\alpha$ for the composition of $\tau$ as
+$\alpha\sigma\beta$ is met because \TeX\ indeed looks for the \emph{first} occurrence of
+$\sigma$ at the right of <cmd>.
+
+
+\subsection{When We Don't Know \dots}
+When $\sigma$ does \emph{not} occur in $\tau$ and we present $\tau\theta$ to <cmd> as
+before, \TeX\ will throw an error saying
+``Use of <cmd> doesn't match its definition."
+When the purpose is ``substring detection" only, without returning $\beta$,
+many packages have solved the problem by issuing something like
+\[`<cmd>'\tau\sigma\theta\]
+Then (still provided $\theta$ does not occurr in $\tau$)
+<cmd>'s second argument is empty \emph{exactly} if $\sigma$ occurs in $\tau$.
+This method has, e.g., been employed in \LaTeX's internal &\in@ mechanism
+(e.g., for dealing with package options) and by the \ctanpkgref{substr} package.
+\ctanpkgref{datatool} has used the latter's substring test (for $\sigma$)
+before calling a macro for replacing
+($\sigma$ by another token list, perhaps thinking of character tokens).
+
+This way you get the wanted $\alpha$ as the first macro argument immediately indeed.
+An obstacle for getting $\beta$ is that <cmd>'s \emph{second} argument now contains
+an occurrence of $\sigma$ that is not an occurrence in $\tau$.
+In \CtanPkgRef{fifinddo}{fifinddo.sty} I didn't have a better idea than using
+another macro to remove the ``dummy text" from the second argument.
+I considered it an advantage as compared with 'datatool' that
+\emph{one} macro could do this for \emph{all} replacement jobs,
+while 'datatool' uses \emph{two} macros with $\sigma$ as a delimiter
+for each $\sigma$ to be replaced.
+
+But still, 'fifinddo' has used \emph{two} macros for each replacement,
+the extra one being for presenting $\tau$ to <cmd>, using a job identifier.
+This could be improved within 'fifinddo', but I could never afford
+to take the time for this.
+
+\subsection{The Trick}
+\label{sec:trick}
+
+The solution presented here is not very ingenious,
+many students would have found it in an exercise for a math course.
+My personal approach was looking at &\GetFileInfo from \LaTeX's
+\ctanpkgref{doc} package. There they try to get \emph{two} occurrences
+of a space token this way:\footnote{We are undoubling the hash marks
+ inside the definition text of
+ &\GetFileInfo.}
+\[`\def\@tempb#1 #2 #3\relax#4\relax{%'\]
+and &\@tempb is called as
+\[`\@tempb'\tau`\relax? ? \relax\relax'\]
+or with $\tau=<list>$
+\[`\@tempb<list>\relax? ? \relax\relax'\]
+The final &\relax may not be removed, but for 'doc' it doesn't harm.
+It harms for \emph{me} when I don't want to have a `\relax' in a `.log' file list.
+`\empty' would be better, however \dots
+
+The idea is to use a \emph{three}-parameter macro for that \emph{single} occurrence
+of $\sigma$. We introduce a
+``dummy separator" $\zeta$ (or <sep>, `\BiteSep')
+between $\tau$ and the ``dummy text" and a
+``criterion" $\rho$ ($=<crit>$, `\BiteCrit')
+for determining occurrence of $\sigma$ ($=<find>$) in $\tau$ ($=<list>$).
+Neither $\zeta$ nor $\rho$ must occur in $\tau$.
+We will have definitions about as
+\[`\def<cmd>#1'\sigma`#2'\zeta`#3'\theta`{<replace-def>}'\]
+or
+\[`\def<cmd>#1<find>#2<sep>#3<stop>{<replace-def>}'\]
+and $\tau$ will be presented with context
+\[`<cmd>'\tau\zeta\sigma\rho\zeta\theta
+ \quad\mbox{or}\quad
+ <cmd><list><sep><find><crit><sep><stop>
+ \]
+This ensures that <cmd> finds its parameter delimiters $\sigma$, $\zeta$,
+and $\theta$, in this order. $\sigma$ occurs in $\tau$ exactly if the second
+argument of <cmd> is $\rho$, and in this case the first occurrence
+of the second parameter delimiter $\zeta$ delimits $\tau$.
+Then <cmd>'s first argument is $\alpha$, and the second one is $\beta$,
+as wanted.
+
+<cmd>'s \emph{third} parameter is delimited by the final $\theta$ (`\BiteStop').
+When $\sigma$ occurs in $\tau$, <cmd>'s third argument starts after the first
+of the two $\zeta$, so it is $\sigma\rho\zeta$.
+It is just ignored, this way <cmd> removes all the ``dummy" material
+after $\tau$. When $\sigma$ does \emph{not} occur in $\tau$,
+we ignore all of its arguments, and the macro that invoked <cmd>
+must decide what to do next, e.g., keeping $\tau$ elsewhere
+for presenting it to another parsing macro resembling <cmd>.
+
+
+\subsection{Installing and Calling}
+The file 'bitelist.sty' is provided ready, installation only requires
+putting it somewhere where \TeX\ finds it
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf} %% corr. 2011/02/08
+
+Below the `\documentclass' line(s) and above `\begin{document}',
+you load 'bitelist.sty' (as usually) by
+\begin{verbatim}
+ \usepackage{bitelist}
+\end{verbatim}
+between the `\documentclass' line and `\begin{document}';
+or by
+\begin{verbatim}
+ \RequirePackage{bitelist}
+\end{verbatim}
+within a package file, or above or without the `\documentclass' line.
+Moreover, the package should work \emph{without} \LaTeX\ and may be
+loaded by
+\begin{verbatim}
+ \input bitelist.sty
+\end{verbatim}
+Actually, using the package for macro programming requires understanding
+of pp.~20f.\ of The~\TeX book. On the other hand, the package may be loaded
+(without the user noticing it) automatically by a different package that
+uses programming tools from the present package.
+
+\section{Implementation Part I}
+\subsection{Package File Header (Legalize)}
+\input{bitelist.doc}
+
+\section{Examples/Tests}
+\label{sec:demo}
+You should find a separate file `bitedemo.tex'
+with examples. It may be run separately with `tex'
+(Plain \TeX)---demonstrating that 'bitelist' is ``\strong{generic}",
+then finish by entering `\bye'.
+With ```latex bitedemo.tex'", end the job by entering `\stop'.
+\strong{Expandability} is demonstrated by the `\BiteFind' commands
+running with `\typeout'.
+\medskip
+\noNiceVerb
+\hrule
+\verbatiminput{bitedemo.tex}
+\hrule
+\useNiceVerb
+
+\section{The Package's Name}
+\label{sec:name}
+
+This package deals with \TeX's expansion mechanism.
+In Knuth's metaphor, this is \TeX's mouth.
+I am not entirely sure, I have never understood it,
+or I have understood it only for a few days or hours.
+However, the package deals with ``Lists in \TeX's Mouth"
+as described in Alan Jeffrey's 1990
+\tugbartref{tb11-2/tb28jeffrey}{\acro{TUG}boat paper}
+(Volume~11, No.~2, pp.~237--245).\foothttpurlref{%
+ tug.org/TUGboat/tb11-2/tb28jeffrey.pdf}
+
+``Splitting" in title and abstract is an attempt to describe
+the package brief{}ly without speaking Mathematicalese.
+It roughly refers to certain \Wikienref{string functions}
+in various programming languages\foothttpurlref{%
+ en.wikipedia.org/wiki/String\string_functions\string#split}
+with ```split'" in their name.
+However, there strings are splitted at separators such as commas.
+I am thinking here that a comma is a certain string ```,'",
+and this can be generalized to ``splitting" at any substring.
+With \TeX, the analogues are (a)~the token with the character code
+of the comma and category code 12, or the token list consisting of this
+single token,---and (b)~other lists of tokens~\dots
+
+Anyway, calling a triple $(\alpha,\sigma,\beta)$ of token lists
+such that $\tau=\alpha\sigma\beta$ a ``split" of $\tau$
+is not necessarily a bad idea.
+Moreover, the blank space example (Section~\ref{sec:space})
+is very close to the original idea of splitting at separators,
+a blank space is about as common as a separator as the comma is.
+
+Finally, according to \urlhttpref{en.wiktionary.org},
+the Proto-Indo-European origin of
+\httpref{en.wiktionary.org/wiki/bite}{``to bite"}
+just means ``to split."\foothttpurlref{en.wiktionary.org/wiki/bite\string#Etymology}
+So in \TeX's mouth, splitting and biting is the same.
+
+
+\end{document}
+
+VERSION HISTORY
+
+2012/03/26 for v0.1 started
+2012/03/27 pages of motivation etc.
+2012/03/28 abstract: "mathematical rigour";
+ \section{Implementation}, \section{Task, ...};
+ \newpage, \LaTeX\; reference to sec:braces;
+ "Examples/Tests" halfway; "Package's";
+ LaTeX not required, ...
+2012/03/29 "Implementation Part I", label sec:demo;
+ keywords etc.
diff --git a/macros/generic/bitelist/docsrc/srcfiles.tex b/macros/generic/bitelist/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..78ff6be62a
--- /dev/null
+++ b/macros/generic/bitelist/docsrc/srcfiles.tex
@@ -0,0 +1,15 @@
+\ProvidesFile{srcfiles.tex}[2012/03/29 file infos -> SrcFILEs.txt]
+\RequirePackage{nicefilelist}
+\MFfieldtemplate{f-base}{xxbitelist}
+\RequirePackage{myfilist}
+\EmptyFileList %%% [readprov.sty,myfilist.sty]
+%% packages:
+\ReadPackageInfos{bitelist}
+%% documentation, demo:
+\ReadFileInfos{bitelist,bitedemo}
+%% documentation settings and auxiliaries:
+%\ReadPackageInfos{fifinddo,makedoc,niceverb}
+%\ReadFileInfos{makedoc.cfg,mdoccorr.cfg}
+\ReadFileInfos{srcfiles}
+\ListInfos[SrcFILEs.txt]
+
diff --git a/macros/generic/boxedart4mac/BoxedArt.cpt.hqx b/macros/generic/boxedart4mac/BoxedArt.cpt.hqx
new file mode 100644
index 0000000000..80926ad7d6
--- /dev/null
+++ b/macros/generic/boxedart4mac/BoxedArt.cpt.hqx
@@ -0,0 +1,1008 @@
+(This file must be converted with BinHex 4.0)
+:$%*[H'9N3A*d,Q0`G!"338083e"$9!!!!!#ldJ!!!!"45`%"D28!!,TMJ%GSD(K
+SH@Q*D(Q+LRTjLSGTHAPkLSL(GhPkLSUELBU(CfH)L'PkLRPjGiLBLCZFQ'D*GfD
+*LBGiDRPiQSQ+M*PiLCU+HBQVQ*UDRCZCR+bULSZGQRHXUDU,QTbYQibGV)QDQjU
+ER+ZFLTUFR*ZVLjUELTUDLCU)LiU*LBGkHBH()!!"*%9QChL)LTLUUUc-V0f`$3!
+!$!$G!!$3!0!!$3!-3#0&9@CRCRGhGRGhGhKhGiH)Q)L*Q)KiL*LCL*L)LBQBQ)L
+*LCQTUCQ*QCUTQTQTQCQDQCQDQUUCQDLUQTUDZUZ%+3"2bpP#(Q!*5HPPpa,r",S
+5r`@rPdYrehr%-a0cPYHmRLd)i$Hh2TEIKG,dr6fPrJDHmRE5m[qUdGYYYThApAc
+iJJV5iZ0AGDl@Dpi&3h@lq6ArLVkRf3*TIqqGK$+3!+6EckZ2HfHPk6Q6kRXGp-l
+Uekl6kLcVZNjZ*[j1`NaU&,EqAdR-Qaj0lc1lYr#YT9#*LFfhfd)C@4Ppe$,62id
+NDdj2T`cdbEC@hL8+bad-)rhp6rIb)4CmL6V%(Er95GT#,[kUE'34dqXK%PrLK&P
+q*e[)KQ,ED3MM6F1'@'(kf%3$XS!N@%U&+RJkc8Dr@0Er"!lj&(ZZeVHkQH,1m0S
+KmbSce4RY4i@SkLkK$[-Q%1fkV99'9l(a,V,fM5$U)Q[Z2$mH9U0P+"$+3KYKfIC
+aiA%,L(qG*i8+6kYi%U%2S!KL3L2S3bMk%)VJKRBBm,QNjd-UqK#PeZYF-,L(U#J
+h6k%0fp*$e")H+l%'N!"ic"$XKhfkhH9k5(a3ce*e8@*ehES2qK#QKUD5V`XT*l5
+aTd)c!4ec4(UUC#2BJMXQL0PJ)4fB)pdd4qF#%@qKP@*QNqB*RC1db"p`"p,DcVl
+YEcD2Y@F0pUchRfV&3(IDVfMj9H8l'mlKK`k9X5hfVl9,(#2DTBaEfU@-@pUVhKp
+cMPAiiCpZSHPBQcHe@K"rTbGX5XL(TBH[#ZKcR5@TS@N2P3rc`SM%VPDN$rQ`hH&
+Pl6!Nk[YVkmNp3NA8`hB,)PkSE+Df1#,$mN+L'0&Lh@"YD+%DS%IR!M'YGVIB(EA
+ff[(LJr#q9"Z-+-iS%R`9h!+SN5IkXT!!Ve*rP*2AI5C$Za()5U63ZhJ5`3ZD58a
+i(&$M4%q,r$LRYpVJ5G4IEAE80P*qRHAZe[qkkF0VYVMA82mV*6MQ48ZSIjH5kFJ
+l4qQHSKd`p`p4$k`%0LmL(Li,pR(pZp)M3iAc0CXVb6FArEAf"HAmR6hrEGb!pVY
+GYY,Z6I$BE'mNpG4[,kmZkpP"pUY$AXGVYT2eHffQdG%XlBl5mNi'eNd8LC-kqlV
+!fAEAe#[c3k+Qm)"2bFH%EcJ0TFE"K5D5Nl2Sj-ZGGbHi`![SD55qa$T1ZZd[j1e
+RbHcqCh'NNjEVVV8Apre2dHQNpYI5G6EbG9HB&V1`1Y[TqechEE@iPh'"Ie[cHLl
+EDfXlBlADpaH9VrNSK`ZN5VlEDh0jh'ffQ"e1NNr*NlDqZafeGA9`Bh%l!f9[HGV
+fqKNdq"XT1"fek1Bf9qSYUq[Vr4c5(lkF#Ze(dcpTYIUk56*i9*T+@ieQLVISf-D
+6,fQelAYld(G%l)ZRNpGY,XBM9hPp@r4dh5GC*-DM8pYY,cZ0Afele2dDL6*l1KV
+1kSS2lM!qYFGEDkb6U,Lke2r2N`j"BAm@!RZLYE6@@QVkl99q"HEGmKfAeHelM!N
+r9RGedp*T)IG)3qle26P[+dZGC*lADhYl1[VZ6HhQ"AbEVCEAkS&+*U61[m#68lA
+Bl1mlA!6k1kfZf[f#NrDl3H2Am,jRpI@cd,!VH5GYh"%P*R5Hi[+-krRB&iQpEIP
+d2c1f`*2dpEGDa5!1N3Q8Ncac[c1iF5(6rmXreYp1ZlckQf4mrPREcD*M"R1&dZH
+86Y&e#AkXlZ*1NT2Qr0klEB#N0Zf)0Mihp)&q)#6$KG0ENVAEGVJEBFLePQbqhYj
+1[ZQ+&%lEB'e[41AFPLFSAmkMXZflAZ+plK9'@!VVp4TqUi6f,2BBAKbSK5kHjef
+UqRTqcT-rP*-l!L5Fr`S[ChP$Z0,PC-Q6e-QNX(#$Gk0JKVHi[*2djhDkHrRI9d-
+RBMTP53*11ilEDhdRUUqafqh6Z(#,VHYkITq&55HQeK+HU@$CTEADGY4l(V*2BeN
+RYZi(@4HTkHiZ[a493$fd90TdF)CH6Bl'MRd#p,*kRU@8UpPH%5Prdk$kEUHTYEq
+mRB'e[p*iV@QLG6e2#c8RUV'aci#$KT0MRl'5R$F,j$#")&+'6-BKV10El@AGbpV
+YqRmZ2,fT50*-`1dN-c-lBT62BR5Cq+NKcD62j9L4F@'NNmZ,*eNRk2#bZKNkZ6p
+%"TE!DjNr4Thb`k0H+mBCk6MaKY$QITcZi+jj5dRE6Dd(a&p[iCTlLdk4e)JT-j2
+dC1AeK8aZX#GHdD6k0M*kITqRNS4lK#-Qr[1jRE6YP+*h%Qmfj6Y9&Tk4PI$UC+R
+&NkRDhi@l(EGYY,[3P(PXVK5KE5dVl"T0T`C*MhT!M'AmQllDG3[LSVfhDS2*9Uq
+Pl1Kh&'ml@NT2V2lSG2jPSk28DYNLPjHdF$ZZRUP(AefalLm[qj*U(P6"dlU3!)J
+GZq"(c-kq$*h8iG'0Y@)JcfbfY'mRlEDE6ZNUpCHDq6GhNqF@@@%pRmhf1Q+lqdf
+ZaRE6XeAhBXeC%`0VfrFI@T2qGE*l2YVkL6FGRJE+mISLG2Hc(5UQcS93d3,FD&1
+PK6a8,5+5`q6p-T+f$D6-RkHRZ0@`-dpN`Ji9*e8*6Z4bPT,,,$*-JMrA%rjI@K5
+Imp0-+j+X-p[HGdV`RDZB,j1H)Mh*k+kMHArEE@lNJPFkM@DfjYd8NJZ"mf[mRj+
+ai,rDl55i51$A6`i8R5@r#VXhEm,i[#YmH%)RY!*ai3k1b!Me#VC*K#cdX+6%jES
+)T2A!L)"%e`)m0`)LZ"&Ld)LCKS3`i34R!)bJ38c3KJ`K$41#(fA!M$F#0Bi%Cp`
+)e,J4j$KaF1##9##1VF'1d!L+"#1!)BU%)Fak%-U"&+d)k6p63M-jj`)l"`B5!34
+@0#+IR0#2NZLLLd)dfQD%C[dQK'9MY#)[L0#-Y`@K(4*p#3#D!#2QZ+#4,F#2JF#
+-*S4RGid)ccJa*mTS488l3MZ8j!#2Uk9S4S+PS4Y1-iF@63M2qHd)R+,!#*kJ3"%
+hP11JG2)dl3LmmP`)FGKH11BS1''dFGKHE&`BilLBFBLZhlML-CS4dcK"XI@D%I,
+FKK&pPS4Y[#FFKicKJip$+rFD%CMfR(m14%I,FLJlRHY#2kP3`8+((3@US)!4f6N
+9$)m-&"%2"A3aYr,KkqJh+cYXM1J4#4UmLTF%-hEr8YrUGM[V$5h9VefXQEL(CBR
+hj1Zhrc6EIZ0"-b-`!PIq[RQc,%!V2k$Fj)DBfI%KaV(5`K2N@&GLqP-fqANBP5J
+V%q3$A-%0Q0"eh1m+ij21fY[bBR'"6(a1EPGCHAprh45Ldd*%-YB8dN3%,[lpA9l
+@%DV`VD92NlrjYCF8BAp4*YT2$krr,*jmZJ)Vem6qfaUYR6f29ddfXf&KVS4VMI@
+FU%@hfhcj8,DU%*LIp*Ii,$5kHjl#j#llQ*pqVf#,*rVJj5BRr56Yk61F6R``4VT
+0e+MbS8pp5f1PjFfEjNIITi%ri,+&cDDHdqID3e0KPl1&KT8,BQ*BCI%i#4%RV4P
+YJ21UU[B@%D`TUb9@A)$A0Tm%)G2eX0,Dim-m"&2,f8-f!P6,`iCcI`XpN!$T)r8
+l)e2*FRBEr2eQ`YpYPUqkZ04U,@CPc)elDqeNlDGZ2%(H*fb4h!T,(2`YU%@cKLH
+3!-'-r[qSBl+,VppElDVUY&95GKB8PJ'&AF@rBC2Z@R+bIFkVYSDQ&4e@j03ZTkU
+A$1F#,EpSPKElE!K9e@DIiCC4q'@`c99C)dblqM5$Sd!b+"PSpS"2L$b#2"qh8Mj
+YV#+epA9E0))I4*kH9#Xi'88%V1'rcpM90M-(B5,$DR5a30'K(!D,#-ehJMVL6XS
+5d%@r%A#rP-D%b(4f(bE$Fa9dj)Y[MdNe"dD%A[Q"ebJk4#-#)(DG"e4#+G2d$Y'
+Jk6&0Ep"fH3GRiVKa8S1XSXA#B(4d(D@+diKd%(DH,&N-$Z@JkfLa[%B(FC!!GFa
+B[M-$[B3GViXElM!ldd(6FVQQ,#(R)1fQ@MY$[`S1SjCV'3qiJl"9$p"hJS1`R3G
+JS1m4d(Ak$[)G"efJlI`c$(P3l""f'k(*L$Z#k$Y)JlK1Jl3S1iC*f`icU$[8G$N
+K"h%G"d5hl#%*RmB9&r#RVi4[Hbp#SYJ)lH%26`)CU[KPjqG`-TkA9jI8cFh*[SC
+U6F!GRSDH*eF1IPp6pF'0(YkEXP6QZ02U06Ca$XHe9YJclG#dIEj16PlQK(XqVbp
+cLH0EEHQQd$(BT2D1bE'kVKjI6Lqi,4aqb!c&Rd@*ih9Fr*P-*YlRT8R9lrjU&,6
+P3MdFY`aSZ*A`T[Zm1VklIemL[Kd3kV[*1XYq#@!!1fF8--q4d9IhHI#bY-HNqjB
+6)8pRZFR)K85l#(6(3JK'h8)[VfPPeNLPYrMN4)E)i9F#(G`m+(iMY-mBf#,''R-
+Lk5J5%NBceX[Tf2NTKNZ2BD9GQZhiA3p'ak[,kHI@Am*X5rT,IK3ab[GQ`8Z8l#I
+'YV4Y6C6i*a@rJ!hIEqN!EZjhDHhci9pIK6Ga1eNNX25-p$,!PBkE"Ql,TliQrV!
+'N!"5B)F3cR9AadqURIaCZRR9XQiMCk&,$+d1V+2d0reXfaR8lX8V'#PY0cK8+T!
+!-XU#'FYpXa0HGPp20Mf0I#1"eNSK'Z5E"+K)NpGDmk4(idbE%X[hGIkQ6cpAqkS
+JUSRl[3erA@r%S`)(5T2AG9+,#'(#Rhrb0rQV(23cBM*9[YZakkcd[Z3a1&*UTjD
+'bC8fXUj8lp8bdXSDhVPCUX-cLIfp9ql,h)'CqaT*PT1maMe0Y5el1!Nc@-T+K`B
+49FmbFRIf@Yhf*J@e92U&H!ehFGYZ'CYa)p3TC-U6F6BYTMa1CDmR)qc4Nlq[Pef
+,qkAjH49J*@J*C5r,jrJJTFk$FfP[Tqab0h,[FMHG0ZBC1,G!YV1X*A-Lf*5ZV2"
+[Hr&qUCHj(fCQiLH'H'UKBpA%m(YiZQmmV4D9Ad&iISNVK`RaI`kLE%a1Pd'ZaI5
+`qiNhZ,k@JQB[Rf0GNH521dr@5XAQJCj3'@`'FcV,h)`mA'QAZ,m'(i%QpbHIS#j
+TM4!'c@05aI,KdN1NaU@CHid6$qXXibcVXAQBIfqahf(l@Jf'-brj)KrGRCqFY12
+&KS*R1j5H%R%60a5Fl%qq%QBRaD2bX6r+6HifB,(3$(@-beVbHKjeAl5`1AqASNa
+HLVZKjhCE[AlZC4M3UrhF6GJecM'X%pJ`m2cXT9p[65HVT,(`Ye*PEqZ&TZ+H'rP
+GhPYrSq[rpj22Q$DBGpKp$%Tm5aa2e5r`BReR85f(F@qf)4GfBH1&VGm!flYYK2d
+-ZZb0,eLK"qTQ(VErIUjp3C+QiX)`4HVVGpB9f4Z!+hZX,eeabFM5khI$Z#TYLIB
+3P,[HGY*GGcVkAjH0@blh'VjIPmkL48Il!Tm3Q[SJCV428Q,cTGlLi`&4FAQdFZS
+8@R*jhL5r'8Y3@I#(RJbr,a6+qbKM4iZG"6R4[,$KNIQ4CL-d`+B`5CX$0)!Rp3R
+1+*EfJ%pN"2B!6pT*G-#5R'Bq!"13!!B-jLpb!Qc!5H!PqR849&0$SGb5&GJ!RC!
+!#GTa1HSY-ABk$Ea)q,Z"(EZMNk#9Lpf0Gk`#F3$*B#DNF0JiZIB$D'dj12i)DH)
+*M5"PTJ@NC'T-PEXTFlZ1flAm1@e8krlDmSQC"$2`L8PZH6@aB%Fpf)4BCGG`MEa
+iF5'Q16YMdQpYq&p(b,I(qEfFbpk@Qa2jc,fRq"J0c'!f1JETDGJ0%B*H'`'hZ*r
+044BZY)S-R%dGKABe2L@ABU+l*QEM0pcLG9S0GM8j,ei1*mj3Z4"-h%h9iRcN&0c
+DX6kD$*GVEm,Vq4Cj6%qIElDhi83cM!8SBRcm6k"9UG*#YDN(4`PecX@hi9Y66,f
+4Rdb'CBbfCBee2q(%rR1KNf8h-9plc[#,08Yc2@i82ZR+HckceVDZjfeSCY8F'Hd
+eBU&l6ELhij1aHj&-XQDG'BJ16)cj9#d0[`XpT+16Em,!l04@@r#dXm&YL!Q#a2G
+JTfLTGfQrURYk5NfYLH5K85EhRq$[kT6i4Uk&*cr)S8YTbHIphIdVUMKElElrbbj
+jNdhN-V+A[2mJP#`!%rSR@$FHfLUN9!VFNJRR5I,aI5+bfil6a&2*-+['*ki&HGd
+q`K'QEMj'Pd'`b$p'BI"-[B%D!e(fG"Hj&INCLCZ06hHJf(1qc1Kd1!mKC*VXM0c
+V+I9k#9N@3'9-kTRh'KP!G@JGRCdHISmmJkV@H03cNk05PjA"K0N8*(peA2MNlNL
+*Jp*Nj16`5h"E&Q#6UjfG9QJ$+f6EcUG@F"&@8Q91TPCiYpYDFI"K3TI[jjD%9[Y
+Q9+0f9+0jV0mSR*m93ia1Eh*IkkleU%D`J54D2%XSpV#U[14LD*Y6l'VEIE9Jl6Z
+qNXFYlmbfmb%+&A@`X$F#a-eB@9M'a2mlAQ@-@`c0A98+D6D9GaBCRIp40jPeUTr
+%X-r!(T0XSNXAcVIE%Q&Y-h'6Z&(&IlMlrbjX1KbUdci+ZpBp$0q&KFE#S8eVr2#
+K,l'k`Cq2*YkdI0C'NJBdfV!c1fR,N3TE6"KiYTa[T6BN[ApIrkbHIE5jp2DFM"J
+L"i,@rl#2VfcPkD@6rN!dYS-`'fD"UbB`-RX"YS`'[N$G9lV!EpXRr+hfhpfGS4E
+6'0k@-BZ*@rUL'f$3caQQFl23[i3*3[hrDphl-rREH0SU5YK[23pHeih@qC,ehkX
+RQ'",KX0#,3SD9G#,BQQSiL'4'))3e2c60-EB6ilU0k6+S`YpX49CDC+X)(cb2RK
+#r&i@eTqHYq&r9FdD5GlL[%,Gb*9)LPB0BjZcpIdBNldI[r,YpYYi@f$XiZTdqR`
+EEG8)fcLkIGDR6fqfeqq5HRFEJlUmLISP'*irL+lV)qkB%4q(k&YTk%A6i1Rh9[Y
+TNV!k6LB0h%iQkkreFR'Qqp*d[H$2""%ZF%3@r(QFLXK*T,q(FeA%`GD3!0*X6LB
+2l0ejQl[)[KlZjP%3h-Qm%B5*TdBHYk&Sb!%ACa53!!fe'N"5YS`prVEZ)K#G8QH
+4QSQkAc&lhKqKD6*83QqbFQj*V,m`!@9GND2el609f4eIZdpj%ZV68a2Fl(mX6TV
+6)kZRLGCDC'M8cf(1XDVV*@4Sc'+kXPdNHaJbGhEB2EaI-hG[Y[0(*D+4l%UahGY
++"+@#3b%Q9'(lciULQ[mTr[K5+Jaf-Gf-8YM)8C%LSrhQ5+KND9T'(d"J15Q5Td5
+C+rhemMKS%GMR+X3FL5SC0#SX$r&FE`C($ZT8MR`NPpM(Yq&d4b3&D%qKd2#[FM8
+hH2Tj9P#3!'"iGi1lReTTqF1dj1,l&VbFAp8f1i(Hb"hV@0*a,MJpIUrhC5&j8h9
+S),'!6cYFc*)XLS&p$mAKbZejYM564d@ed1$ccm1j@MK-PEFq"p#4f1qa0YlApZ*
+jZ*Y[1rYZmEAlkbdY*c4eR3)TK!9Z`V0JCH@mS9C6-`U[VlAqF)8DUfqe3Mrhqr#
+,3Mh(IMIFbVp@Vp5Aip[qbU-HkcJ3m1djSlkaUTeAdf`!c(dHa)IDI%mdRFaD&%P
+`qMfqDCNaI4QaV-D+("C&"TbiPdQ(J&Y,cm2Z(#k8`ZMfr#kcXk'I0QVi#Xj`Y*k
+J&EZK@!0AciaE5KMB8r0JGm-qPe)B6I4`qi14J"9[YX2Z"`'RQEMT+-f+!hClHPQ
+dS%AfhbV14j3E31@&c%j8bpar""cHJ*[-6`#`Y&9K5aUYE+Ra&%jmrPXZUEC&c6L
+hi@8mQrLS3N9!l6"(pB`l$ZCRmIFiG',1T5*E,%cdUK6Q!k'*rJh%aB5-2VaQM0N
+(5B%q(BH)F#dIYBUTKF59BpC!jYKX+jq&I#f26e8`cN2%K[)IMK`)F)j[RFrLZ[a
+A*Fk`$NU-0&4S-0fpa,p!bcmM38UF2qPMABhf9+mrSFhVj(-1LbU&bN0!4lb2R4"
+4Jd@HJi("K2Uff`S4d`!'G`-Kc8K*29a1@))fZ2krXfR*b21RDF"[m,IKGMd&deQ
+lV9Ipj6h@q2fF'%9@`LaiRUcZ@Ym3SfIVRHmJST*IV$D,ArH*3T8Z4@6,E-d-j(c
+-*-q,Fpr0jPrhQDdX0##&A2T3+UlR[lR##+6jZCS4T(Mh014*FZ2%KSD%F&UD2mS
+#SXhPA2Ik$V8MVI(bhZ@%D6eXk40Lf%DG5P-6(bhjl6(k2ZEIKCEL&1EI'+#8Dhe
+GN@FpQae'h0h%[i2-qV-fK)0YQiAPYjA8UGS9S9$RUbklq6hi%CbKQbU&d9#4%Y)
+C-Md,UdNIk,PJ$p#GiFYQ,q&PmVYmjCdL)2fHANCM@!)TPXM-d)Yb"PP9@bX,Ha2
+Lbb634NBZFIDB&CHK5f1)G*j"P03N'Q9`SB9[`Z`m0N"0XNP3L8qCX5[01m33",m
+`fLb@S#03TE,VddcdJ*JJ,PN1RD!NL!(`5%q$XI1G2Ul,6Q2e+S3rVd+48r1*06m
+ka&3rVU$EUT10-eXU6eS9Ebac*3Zaq`fNR-J02XC&MpUb&!HT[l9@"&MAG$K8mL4
+qZRp!IjM-%2cf8LarAC1#!M*("c0h%NCQElA@H4kX-VmAqm)H0iZ$$T*FU&*[0r#
+(c*!!E64j`SADreKAY&`GcSdMp"E#bXfP[iaZGCHeamRdDcjA"hHX,CerBA0*i@l
+ZmILEZ4k&CmUHTFT1CmpHIUk`VQ%M"YmI+qYSi+SaCBCB1+M&Ppe5f@@PVT+`"DI
+"pcXE#0)p#GKqKK5GKi@&ElDRU)Y*#aMM`&9Zl$eV1"paN!#2)K@d+ZGaVZ2a-'X
+Kr$#iQliQkQmZff#[JA@&(U)5D'2G"pFi39DqKBJ0ee$5J0-Ra,R#RIK[+J5@C[2
+@f&)"%LmTK558&AIRqrKF5dQqhFi69aHILifCRiIlr#QmYd*"0'Zr&rMKB0*0j6R
+2JXFEHPY+UMbMP!4HXPBfpHJcl,DX@,8XjqRp$2JhZ(pZhpH6B'5G+m,cUD*B(&8
+q84fp6C9f,m(VhZ,b!%jI$p$L(3-!6N06AEe0X@C*p+DbAXc44B[XF2Ni[+eNT+a
+dRSel#',iTLmm3YeIe8)Z"PTXA!bKP44T'lZ6VhHrie1D[X1NT@Z3!0*H41dT*(S
+'6elb[i2SqTF#QrKidf0JC@C+Pb[hq-e#-3'@*%,'4k(mI'$VP[`kLi&8,MT(Lii
+Q$qr-Y0!bjMdCGA%MNJfVa26*-13N!B4)fEdX0)V#f4FcS'rBJV@!9Zf"AB)+48'
+A#HM+`B2@i2GN`+Z!+1Y!"@VLbXYY!1eE6CiY+e3d)&C'VF#,J#0#"&[0VG4bFMX
+(d940&Jke4%1JJ#'$hkGrT,IpMYiARPH$23mIhqYA0#0%U,9b+&P*Y*0a`GP#,2j
+PCXS8jT@G5AC-RYBTj4XQXZ@1'iFf*)rDUpMM6!-bY!qB04Kee-GML1"'9[mUfra
+1KcqjDE2#k@CE&[`VRp8Q0iAhQ+!UX@e42LA@%URcf91B2-ISp`m&,q+PG2LhjQH
++c*r[idKIN!"BlfTQ-KRf*cbqKrKFb0B@+YEJS3ZF+VQA2INqhR&Tam15NFRSIq,
+R2,$9V1'pS`UVHUK#IQ(bl54jm+6-PC3YY3N(jC6BTBNdM`JUjP2k$,+dDkY+GRU
+NYpYDR+10)c2Q)DYlQ'ENH,+iR$r0DAX@kY0'D)e2mTd'@eVfp+0!D+5h&R5fUdr
+c-fd+'[YV4AC%JU'ViRSH,DAQTZEAJf[Df0MP*ZKH&JNUM`iAFAL#FiRS6DGi0F'
+Sl@,)(@8r$S4eReA8URpTimji8#LU+Ip&#TZV@48'CY1[+B"YaXBTReE!FTrkbIJ
+DCHKeXkV[-h0cCI#N6C!!"fDZideBd@BS'QiR#@a(*6e'Dq94J*5NmfNZiQELA9V
+fmEmXEX"ddq*jT!JMqU+&4Si*mh%c0jQ*'Crqr+rC`lUe'F@ZKY[-VXE`EXk'f9r
+(0KcXqLB-XcaSeLb-TVkQD1%LKc,U&$6Q,bE1lQmV+%LGUlkb9"cLGI`EQlcdfPD
+'@@$-Z-2[YAqkPK0p&9`1hc#B,pCe[VIK90Y0pj!!dRK82*6`,IKD(HUip0m86(Z
+DhI"jpPjBN@A4a0K`Eh'MD[pf@-YTQQP))1Gj2cKTHHaU&TR4J+pN#[@Mh16d)QP
+Kd$e4(h$'CFC`c2lHp4ZF4@(jP@r#X29)AGj3Z'BK0Q!h0SGS!dQlT`'k1KfB$4U
+&N!!0P+&`5*5(bKT[jcQ+F,3HcG@Nrc9`'C'QSIL5dQeNk*0i(QfP"'(Z#QMMCCB
+[P'UG1ip$#QQhP#NPIa+Jd'FKc6,5+d'im5dUiQRrFV%!#F+&1EdKak-$+9"4P19
+&eJVC@eqqrK-CL-LA4UH9(bV$,RSkNH0,lHVmD9fqGrC`me8A8Z6PkZ-G+b9Fi1M
+L0N%0[EPd)NRj2K(+`)L+lRrp#8UZK%1S*(!L+"%@V[HIiHJkhRq(TU5bjm+5Cfd
+)YAqkihII(0UX[4VCLdHKi'Z`qfNr5F-ShmHZkMlbckU[rl,mG!M!Mpd[al6MaS8
+FT9qTDFHNJXRU0b8B(CSr1ZX&*M6kpG8L2+1U4Rp"-jja)Fr`cUhH+!RM!*p`efK
+"6Xe1TjdLGQ*1`HicU-*2a`MDq%mbN!$"lhHGrpRIH(rqH2pclh!rrF2rYq2qrm[
+j[m22rmqKkAkIm[eHYq[pRrcf[fmAfrFihZqparJrPbIq1Ac2Kj[aBZ0r6(q2iqI
+NC(3k"iX-[d1KNC(2q2imIqQ0Lr&cIKjR,rij2m[Jir[Hla[Fp[LrYpVrjqcpIVI
+Urbr6kASIqI2r`r0qAqrmIrE$rrH"pllRMrrRKlll2Ilc[F(rRZ2Ui(e,lYk&h1l
+6q[AkfjklkGYUY2D@HPrUqKSV+`VY"RUfXUj1GcP68C[j(5jQ4Q1MMp&Pif@TFVP
+BZ8bN5*5#lL4-TP)Z9bY,PSfAk+2dC61kAj'EU+R1Cf69ePERY"A@&PS[SIeD@cY
+02UVEkIAA1YerpID6VZKfppp6!qVZ2qGCX$VmIMZk@ihaq#(VpAAFrlPVbj8+A6`
+P4p2'K2LEH(R%$*p-f1#Il8hLf99SkUXUV'UX%+C3&)C'2C(CS2aJbZ2!pJKSGE[
+KfAS@Ak*-5rbR$p!jlePCF1KT*IMbq[kc6mrlPb5B1)kY2`N)c!@mDaVZIiYKdER
+%9#'mGK@jck`dH@M"`Z)e1Iic5#I6Sii*(93M038ff-5h4r51U9p)lCeAdHRhAdZ
+A83ZKD4lh*rKcraMLMa-Frb%PRCjb+@81`0dLI%S`kb8i,Hb6#H#ZJmZiae@jbHI
+#SSbPmkPmmM2fmJ#)j+Fa(H6P&,i"`e#TF'Ya'&82JYq)#c!M@ElXppErXV5'@4T
+EcQf086kC6rHBTAV3TV!YXR#TT*8ARV@98Z5NdSY3S6(0*&KdZGl6q[V0kcHXrC@
+E"FjVIep[kp*QSpaIl@KIcVf6GB'eS`TYEh&jIbCGrH6ZhK6fPrIcZkNbpVYVkll
+L6U,qrfYr$TEV!2c'S5GAHAe$!f64@*CbB8fTlEDAKh+lfmXc5lkD9Lrl5GJHT6h
+$`AHlEm5Cp@%8k2aXH(Hmph3'`Gc[F@mjAXE+Gldl1Eq*2"91-F&2AR4YrP!8ie[
+qbV[HGbMU13LqReNVRFJlPApjh+S4Ia*d%RVjHbKSHRYMhrDU&C3+"aA!%0*f(!M
+Z"(4Z"'@!MEj5Q2fF`C2A5HLS9I9GZI!K[l4I2Mk#%E*b+&0ED!"S[Ea0rmQYZT[
+lAKKh-!bcAjZh,690S`XkUeK8EqN#6Mh*ab(Y8iKJ+0&kI61X'P[YJ3M8$Q,DH8[
+J9[ma2V0rmqI*hrbCqFhr5cDKUB5q(1F9K&mqH,Jq%bl#d1Kkikl(ATBd%cqRJZr
+$p$+IYXDlRBp#RGI&i",(JI)"Md4j@EkHprTi)+Ck&5"fFB14cEfPC2r`S[CfE*V
+Fp#6[kUdj2p2"##,(lfdZ,M9ckE%jKia+UhamTFX"ViAfX8,1hKP,RhjNP4!(pC8
+)C6UkbM#&U5JD$VFAJ5EC+6J4iq(f9V-YcF3K5([-ar"2'**Sa90iSR&'e5Hj*VX
+I`H$jI3mi$2BB*HX[0pG@[ADacjBDlIjp%QrV$[C3T1#GlUi1MeQ!%VqTQ3Np5*L
+&BD!b22$5QkPLQkN8cJYZ9d5[f,f5GENCqb23TEm+USrIq@q[40VYrE*@2dJQ,MU
+cG-''eq#ia'H6%Dr#6"9Xam-*Q+-G1LG1`3T$(hp*2K%X6-Li%[l@rUU`45mTdq4
+*L8*Ci%S3iSj#VQRj(C&@[+&pr2)3(G40r@!pqI35mM1SFAi20mdMI"dHEl9j&@*
+$`ejNRT)IC%"@X5&Dl5&Dl5&m*#T3iqdJHKbhb+d5(LL3!,*L3dE%KT4!@8h0"TC
+-4PNl4P@)c0SBHHLjIPFcX)IX(U8NcFG,MJ*lS#53!"-jLH",S%00dZb%kpFb,X6
+QcSI(cV!iZ+2H(N)T5[0MdP,e@`*I0J8bX[C`C65kAIPcDK(FPki4rmMfP4@q2ce
+hZV1$ULK3M%Y(("ldR%&R')BTf)B4p21+k'iA&j!!m9H@TI+lTTA1rNU6AZDm#Z5
+X,4fL2j8+D4AFlNqjV`'rNa@A$D)N,GlSL(r0&%6IjNHT,V-p$1EqS!VUk-20`cZ
+Q4,TF"K-P0dB$4*YL!f8Qjm"SXfX!E+cFk!e,0U!'bmfR65!966@1'!VSJ)q#f'L
+S8iqchE#ZjhZ@ar%9#P2Z8Tde"8mj"iG"SNiKGcJcD-rB',l-rK!6bJ%i$N1[&Eh
+I#X0%ChIXIi1G@6*G4C`YFI-m0RL)c31G&fX5L9Y&c*[f,KXajfH#$aje@+bUpbB
+1`cB)GfCD%NmC$R18ejXS,bI8rbPpTM1c)H0b`dXNiFU[VVD'cTDIci9fRKFpqB8
+,ZK5Pa1aTq(,P6*3)8cS3Q5QK%NL@Sdmk(p2ff9K$-GCDFlNE-lIA30+lSmrGS+i
+r[pE@%3'SjNL&YiFrhHTfTDiLr1AF'cI8E8kYP2dTpGSG0*kfepqNJB+-j)X$dmD
+k'BklrL'BYS6me[i1U"A3SRZFhYBF0frTT[`-@efq&XIZT(meLf[hqPYQRT65HYh
+mDKQa5F3qY@IR4bB61EqR!c1VV&3UE8cd%c@Ch*i'1QYSP#'6Y*X-RFV5X9NEIPU
+CD@'[hdf'4bY4ai5C0Gd1*3L9Q#"(X8&@QLlrSd4@qflQ,0LGcP(EE4h6#@q2NH5
+HJMRAEf*ILI$K[BIkF0E4*qNc0V$TR6B$qUeP)D'4V0r'!BhlXR9MKXSpNJ-D038
+4e[kCfC9E$,1"P8[`bLSbdIiB5&mL,6(c(`,)5Ge'$1N@@"@6+fUce9ReR"G&EGl
+3pLYYG2+YZqRf4eiY)@`+IjmSZKCDIj`L-fa%FR'1S4)N4l''NjF+%BiN0*!!T,N
+hIXr#V2%-`Hc,HP)E0@NYXc2TVDkS8rclU'EQaHTkeF&5`(C1bPrK%pZFR*-!fc5
+F&-CJU9%ICbc3behTap4mcT+'XYU@KQd4"KBbEDMPq"0#M2S5GY*U"#Cq&6*YJXT
+N8)QQa0r(#U%E2N4KKBbCET`"bNJ+YU8m3h32hSaqM-Na5eFlK(a-Q`epJ4C6d2H
+GAi6X-r&Ai8[m!XV&B%*YaBJafm1K`D(TX0*5q9aa%9%Q9255lYEDAZc*mDcdZ6N
+br`6FhDRHBXi@'AA)qTrD3)2LjcY*4-6i,DZaV'K8VYQ,dK@2PifM6@1k&@fB04C
+-UAF#JcXhhKX*$*B)I(Q#ZPY*m2MTE1'RY$Jmk6hqYdpT@NUfUq%P@qfH9#'2m(G
+aVA(MmH`A5krpQaYbHGm8RBDhI@%D`k)ir0MBe@cTGB8A-IfP@B1i9kqZ[FAebeY
+m9#-V[@2`jY,pmJ0MqGmbC#0mP8TSr@&Z,RE4@b[LhKjH2E[)BrhC2@b1VLIDfHG
+NGA5I'Eph58+8k&&)8%0a(qbbje#I@cDC$6"LTMGA#,%qe2MK"2F)+8U@&E*@XYr
+9$*@e%QLq,1N-UPA-0R$(cZRP9N2IQDH8edN(6T+9Ncf#[lq!k,9c04lm1r[idRk
+XKEd8J@99H!er6fXdc1#l'dfIZbHY03cR3U1Uh-2k3UGq3L#$e31b)9*p(X%C61h
+((K9jQA$l'C94$1(U@,U`'4iI,B'I,$CQ0!(AGL1q)4aT&3cS58X*)$4BG1*,S3U
+4$Caa58Dh[b!f8JTc+JMLU#85bR3jZM(8@,,l#'Um'Um,Y#Z1j1bE2B1bm1HpN!"
+#2RdM*rkUbjUpV#XqIem+XV&56-!h%058C)rcf15q4D3cRS@`4D'fkqKR*IAeH`,
+"@PSj[4IZ6d2*+(9KPjX-Ef,IpBdfPH+$'p'acd*&#QkcC3fA1j!!#(Q@f(#E2LM
+hTYVaiE1MQl2TdJLMG@*2@@#!e49Q63"'DXX1'G!L4,krTGN-T5!C(B'G1`-V!JU
+`)'3"6jE"5-`-d,!b+%&I*e`a9PEm5M+R3q'RGeaNm65JeT4P+Yb(KqI8+RTpUI&
+C,k4QHf#[jC%P8-L5q5b*,j!!4*E@'MK9K4C-E5[XFb1+`5apRMZ2D'K9V8Hl@PS
+aN!"ee+V0V$2eZeK@fAlD[r@Af-[ae6q%4PB9c*!!5Z!c,3X'"PJ3dhipU1*E5N+
+-l,km6@P0EE5`c&@mK966BBYpEqZ3!+RT`f,fDBaM[UpVbNljfrj2Hf5ImH&$1G,
+D3T!!M!`H0PlZY#+V#UP!M1N1)fXr*#Verj)CffT*r0hp9*f#6e[a,)*TIAcH-Sc
+Tm1GbaQ0[EBQ6M6i[8E$*aU1BX(8BfL6H@@#B!VqMRjd2jlmP@cc*9LAcRIGG5R,
+0f@hGEH&23aZ)qHC+0aC0`4$FmT!!@iK`8mSHp9-L%cN-kb)T4#G-G(KYh$2#HcC
+pIP$+)kKPB4L'QE)D8ja[CKX1+YPMD6X'8S+r-NabS!%*-p,kmM+L`jJ0Ck(1%TM
+!K*Kcb$9D1mVI*LciI%@k()A-&*X2Lq"8)&,3am9EEm4h04cP04mAUN,XDbmmkD'
+bKc%8%h(2,8'bKclIL@qfA'e4XCd1AJ[L9,3L-d)IICV*JmMii9,Cj'5B2*`-XkR
+!FSFCePDSf!A+e8CACK$Cp[2`+ehZ$A5E(-Q1TRZ'FRJ#+hljK+B8,@%U`+Ld+KY
+MU6Xi9HrURTMSL2Y0RSCrmrApV%dfCX[X80CGDSF8bPj)U2pjQ$8@@#5F+#P38,Y
+I#N!kS93)$VJ$X)%-eIaU-+[kXL05rraR25C%D4)GY"lhArqmRc@VK-Sb#QKYq)R
+c)%3*E5YR'dmT5H6BMG2D6BR,"fa[FBjH5hTT*BkdK'mYVQk*ljEA0V9bfMNp9j!
+!@2VP[p22KcDYA32q+AV*E$#,lpXcI1r[NKKm2`5IU5B,[[@(95BYK56,hRBq(3A
+INY[,jf22Km2&iRPmlS'c0Af%"*8M%P&0q!h@XRr5K6DrI0YVI$jUj['rTk(I!al
+BQ0iX(h+m1G&p"Grb(+`QYGm1mpqCSS*J&`G@hfP48q'I*krIe$Uj"m1cUmm9c2Q
+`-3(q[+$UhGBQ)faprV@Ye)6G@0C#I&V1UN4C2e*$08ciG'(@FNa,IKIkrQ259%Z
+@EiR+c#A5iI)GmMj-!hKqjR+Nr80BBfm1Ccfkq!&Fa23PMh&JJR3j2%lQc4Y*bMX
+iL6[82*Cbk2,GB'MKiT!!U*(L+Kf9(h(i,DFLZfJF'U&SS0MDHXGD(-RY,$Qd9)&
+'4X"@[!SUd!9h-f(-dm[33MbEVUYcb$!m4%4LMJG8JkS%8#+C"#dlM6'NJpPeMcE
+qUPrEY[qaPS8dNqcF$J-0@$T6++YPb0*qB"L-$"PX5rYQAiJlU(BF+b'1k`hIcpi
+`dGqX0$[)++h6JjkXQk5XCjkQ9*)T8NUjLqKh1iqVrG5CDI5[IL#R3j'jSa*Y@"'
+"4LcDN!!MD,C8k(RA-UE(!lY'"h#ZC3rVeEb(mjNH)CBd9RAZ0q,qG`K"GLBjr@H
+S4lU@E4A0p$j4r-4@m%"RENpk82#$V--+X``fU5ieS&5H5)YX'IQQ8B+RIj8VACb
+K@(,FT)I-49bq@NadX[*bAfR*Ic8J,6NmlQ8D5GAhQII,-(S(c,4,KKSef5H%efe
+N8m#SYD,1f+Lc*L,AqFL'DqE#2@r0K'Y[Y8-h9pIe"e*1SAfDGY$3rSQ2PqhmY5P
+e)`D0*QMfJ60fUKddaZ2j9lB(IbV@`1rPRAZ"hmT$U"aUKEQmKraMXD5PQ@V'i1k
+pbbGUG$i11[JPjNUlpUcKi9TDQiTG%ra@f2Nj6mmlXCd9PZ9@090r-&h#VCKZ%9*
+#Ma4+HL@M+XPUd3%D%Zb&I5I6!ji)1H90iecdS'EX$2)B3,i8G(3LLDip[YVVHJj
+2"cZbme9d)ecdS-FTQeKF!YXVVHX0&LLk1HFjiAQQR4E%U0@%DG,EZqHha&lHJDV
+*h`53!'VVHRBkbCfBCmNUDKbf`)@qP2TMYV5Vb0QZ'kJaU""6Z*HCYM+CKLXM6[B
+[+9V$-Vb3!19jS%IY!Mmmf(+pQG$hr2R&Bl4mJB,KYB,jmeV"Hr`*h`@q2p$C!9i
+ecK+LC$S#bLhN19Zf5Q@29ERSm&RF3c8NS64qUKdF-NiFTA5bP3F5`R`j9m5UCkI
+lG[MmV5&T$Q,Y1++lZffJUd2Xi5XFa8+'0aR1P`D-,R94p9$*[100c$L'ceYUU%1
+6MG,UNQSGC$aSI6KakA6hQd[-#m'CMAfeZEbGGhPr#0EhReC+r(b%AVU0jI3LepT
+V,J"[Th&a$+I6e0eP*QTZUD6fem`NNp45ZH2+hf[4DLqZj1eRX'-[TqflMYj1Tff
+dfQBEj"pVJ5G5[*YdEX25Gk1A1ZfSKH5MT(JGYVhBhPr6DkrlE![*2AAfdlV,TR@
+"8Dif[FGYJGYYEk+P(5hAGGaJAPlQG4Y`82-,JE830m1(U'-Y*fQeRAD',AC6R'b
+K4N@r#im64QpCfj&abBZRYBpV$+AI0prk5jG@RYG4c,%jGK`[CpPV,LRD+hTQACL
+AD(3mrT!!M!0M`TTQiL6`%SA-UK9a[3B,BV!E'K6A'q"Uk!6@!p&Z0p0mE3E$&YJ
+%YhH9S,VNH6@BAb&'&(E`KG2HiYXcA1peNrb%,GJKl(cpcHlNB$m-)Ta,'CpfqPY
+J-,C@cCE+B-$4'XSE1(P'8Y&UlRjc,I"1&R2RE0A%QG1#6qLC[iZLcm-`&e,fqFL
+5rKb9kh,A(T2#kB[HFlQJ9hI%PGm"J44Zhc85ACj0c+4*a*31E4`DTZhTiN[rf`m
+B-5("L23UBN[RRcJ"61F(XHeLkbdQieVM`aZq-G6UMA+qI,KQ(,Z'cEG`6b[jH3"
+`dL)QMfrLcq1CT%FbcSki4,)kGQ"r5jY+%E!a3'A&jGC1jY2jC1#'LZJ8ac30`Fh
+jHH#5!NHf`D&2fp+E4'FQd`$I,@dPTj4LSNlq,EreP%+(A`[iK&"Q,q!$4T*ZlHe
+r-[9EHN0a#4Bb#`4BdPrMJj6Aq-Sb+*4iG,C+,UV4LkCFf1L%C0Nf)%JR*-*%,&F
+lIF`rriGT$6(-BcX-h$-$6450U&*SBQ[Lm%ilCZBN8r$cNRUF(k82&KrZH&#+EFC
+6-KhQ69@FU($2aH+Ah@hf9Vl6VYYJ4Dq@JZ@"GabHGcY"Hid6&U3'TF8l59K(cel
+LqIS0T#aaH!!fLaI+qEYcTDk,V,6'qceNV'hT`E!*Le)%4-2qK[M9f0[E$3`U-2M
+fe92NI020"#a!EbSD,2,j0DA$[2[kQYQ!4ar[kQXQ0-,IlI6E$&PDB#Y,ABhfF1j
+ZY8@Q0a3aVR9A1T!!+Sd19GDPJT23TG)8l1KbVR8pA5lLN9X+I5h1TZG40jS6DLc
+LfH@`rYfG+!hfY,&ZG91XCqBQaCfIRaEV8cFDje-heEV88+Dje-kSSF1ke%rR2PS
+X1kYpYVGmMj1%Yr$Y[Nd-`Jkhqh)UZ$ABXUhffXhbL`d!l)HKHiZGaI+V6M8S45Q
+0j6J4`"k#"'[8aqahb%-2i3DcG[qbAAB[YR1NN!#rJUK%eqqD$@r%V,JiNVR3E+%
+36'bK5X4e3FDN-AfdR"#)%FK3$QQIXU[k(pH"G22Aa*Z$9qTI#%Ga!L1X*j3)4J3
+LJKj))BGK6-CBrFL`N5r#`rLYpYrMbFD0TUl&Nh1Uq[qRp(*aU8$-lFkV[IdPj5Z
+aE-bH[E!M6'1"l-lf1XPiYIePTLfA%PD1(kH6Ljrd16Lk(h-,h2!p#dr6,RIQ"V4
+"&Bh8[V,h&Vm@X!DbaDZcVX@X!4d%9DNk`r)`rYk1ZaG*eGGLkA8Bp*C@182aaP9
+-#U&hK,PDAKrZ*pNAH5,+%1(bF@apc#YXVXiQRP$KUqcKBj5Q2C5rf,Y%p&ePC``
+rYA0VerkXRlZ(pUc+%`#Eh$qh,m[&dNZpaG-B&Lq*Lm"1LRaF2rq@B9Lk5a'@TE5
+($1d4NkHNm18JMdHI5E,h1rXk6KS)`K,IRQm+Cq#E"p[+m19iPU2)i!mMbGApk&,
+kmVf%)H8#''qC),IE$Y1'R&(pQ@MlFCDBjX*-jc#HdLDGl!deS1B13*!!THMkAj9
+9e1JXZVdfRYVMX1cf0#plMEphhZ&i2fr'rkm$m(rEJqErKrrqKrMrPrRa2Brqrkq
+hr[l[mIIrPbZAc1EcXAqQ2mI2b1Kd$p'BA(*aE-"0-R1,de$5D3NJdUbD-R21hU8
+Z(jajc[AIp2@rmKGj+DkQT)B+6#*K1Cm6QK@IPLeB((b88K$UB!@R[0N@G55&3Td
+&28@c%"@L!639Va!2`mc`#9Z(pSTe9USG2%&1Tf832[J9'B&F"rD@2FK@J)QSi'(
+q*rZhPC-eq&S*Q2i-QpbHHFdL)[i`IbNL!@Hm+p+,%V(mMY*A[6&I+bHJ"hKbr,a
+r%"kY"kV"$aQU6(m3m,%$a,9`*5Uc"`q3!#Zf'QJP&*eXQi5Z1&U-i`!&@-KqNa*
+N6*@JBP-Ia%Q,2,5r`'(DTSC[3'lXaS(TT*Y12dUm@YXDMpGlLjkaN!!$9Z(b(GE
+$ehqA!'"RPPMb3Jl$[$*HUQlG$E(eR"I@UiY0Ce%ZJI@Mj0#6*P(mfE"IcFAEFQ6
++XUKH,cc*ADa[iiAkc4'l2I0d5$Xp(`Q`B(9BPB[9cMTABID[3PSjfF",BfrVcMf
+9iHaBa(!)[0'#Q2$P%T'@rK-NpBYU)[Rjd"03ApYD!QC!6a`3lm"2m`%kHakZ*i-
+59`i6j%`m(JqL03LrKc8f*q(j%RBA"D`@qC1c#h`Mi[CJdUZ6dQl1fY*MlDhrT#*
+3cNIE,cQ8)eTMr-dP[bDICqCYS49qlPa+Qm8$)6qG-fajl$)DX$r$,#0[qTYX(Yk
+Z6V[erN-cc2Mc+S&+bI6Rr`Kl4DNq6*f&%UMDrI,J@BC"0[qS0Y"1QrZNQ20B4X6
+YN!""qVA#5q*[1B9j,h&pNQQL6EP5Y'-jBifp-,fpaH!8+[Jqd6,@*&-@*13!R,9
+bcV,h'MBZ(KrYGdB[6,BAP+pJC#L(SZ,j,4cXGpKqe@Dl$reX+D`TX2f#&ARiRE9
+S`4VcD#(MM'HGlr@fR,N4Df43cmQeNh![Sc,d%I&mU`MDePpS1[IYMl)U(l@Yj6G
+$$rdC*`YbbpaI'`m#UVXA@&rM@@r#T0bC&@X8JhEa5aGV,EBG[&"Uj"#PZS!PG&D
+kjRe+FdkFN!$'"j`r32T9$$m3D6aX2Z,Ielr*6cJZrf1(,HQDeRSH2lmbV'bUrU3
+M9IAT5F'dS4ak(1kU9#Cmk9#hB*CMh0H#Q-#QT"69ZbEQ!PE!PF1a,QJPT`5YQ6a
+I"Kq"Eq[BCGMq2!UpJ0&`!FU9MS!*KJBHIKaE(f50@c!kQH,*f2-9c!jB6Q+UEj!
+!C#AM9QYV,RZFQaU[c'GjEm,Rq,B4X2rU`1LRFNkXTr8eYX0G`jQ#"dX3&U`Bd6X
+LdC%*iajA)@eGND8q1(Pj(Gd)XJJSXJB%S8QD1SYI!4(kEF``FArD6A"%IUL3!&1
+&$JJjcU%GlcJQlDa+*l"8dVXMF,h[(9Fh'Jf'4hFmZ&05d2cT96idlf@,+-&AGiI
+F,E!KkL$!b+K'4hE$cCcY6,S%!&'pm"'TpXM'eP"ra(ST)RkCSd8,h)l[UVh&jX0
+1!h-KE!0M3e)$Fk%`PNNBd3"XeM8VM69#kQ#VaC'i''mLfUMhpA`d9DBYVj`NjS5
+E41ZGP(i@P(6AZ4T-ArDK'@&3rjcc94X6p1PeLQfIf`cC1(lYiEQ(TcI`X@RC-L%
+eMBK+6[RYq!%HM,)*$UYa*Z,E23djj)+!,EXN+1(M*h&TMeHm9D"e%i[i)b1b#,`
+ccjGQ1@`6l)-'K8%([DQ&ST50B[qdq-#(XS3*(2pQ183N`L!Mf%%)SS3LHb8S2FS
+p(Eim6lP'5`mK$X'EU%)R#9NCC$eR#2Hj23aI@S564qKKrf2+e4@Fqca0K`5XPfT
+hC)Q&FPFl$le,lJhZ,keiK6!ED'Xk3MdrffF)PP%T)Gi+EN@98am(D-Pbel9T#lI
+5dr93ccq9SeqPTai4Z#D5(Da*fH&jl$&jl![2eAN5GQhYG1,DrXUT+*5#-LBl)rX
+,23XA*@P,&bh`QSYj@6SC'FE,)6%CmV'!3CPA)pF-!%jI$p#EQ,N)"6A2Q9f,GE(
+eQ6-IED[T'PKdE9SQ'QET[DqGGVSl@81,Y+FiJ,UNS3T)b"S8e[Mm@lBF9f,qf6f
+aa-,qhSNQiCpS'Dc2R`kL4"J056Xk1+rE0TmcJb)$`2fSbm`qU&h`fVjRINdeKPb
+E$-Rq"8P'(hkXk6d@`M&!6XV'URjfVec"aH1Vbi@3!#4iGD[B#fLUlmH2li*G"K!
+M*%"P28FaEm,fIc9Z`1QG'kbe1kTEDHeL@TrThdY2DYrRKR6-d4dc$a%#5d0BA",
+#QXi#%dPM9'ia6@G*9)1+ma1JdDZGCee[q`@@bX-TEm,q@DVDTVK,+U(0He-rMbq
+'ai%8GPl9[`[JjUQ50IELGV6GCZFR*aIDSp(1pJ-ZNCi4&(&l,b64B-(V!3b1LcJ
+XZ,$qfKJQ#THe8FAlU&,1KME'EU9Mm2+j#-02+Xi&lUQ`rq*Ii-2EZNNFScN!*m!
+#FY)Dm+9@05S@H5#*N!#4*8LfG`F2qc6kkA3`r%I%b#3h`&bVJ'2ppR&mPde60KT
+6AAZ,bPX,-Z[IhA3jTh'pm-qbMH@E,'mQIaQm0dP-AM-"[H(mHm1#j4bRZ2Bef4-
+-NlM"e5f&)Gjce*d`p@Iq@6MX3h+MAVT$#Qif(j++*[Y-(-icDkhP$01P9lM`Nbe
+@HQ*'a6QdX$4+aYaL8613!+98D-E[%KRrE8HT1YTp@rde&K52jDVI[#E+[E9G*NZ
+fU2CkXUS$Zm!lANJR&R`Mq9([B4XEF!pBJ9P!+d`%C8#0'"%3#-q"&*MELIQ'D+h
+I#S`X63f08e'!Gpd"2ZBQ#G1M`CB*%C'iiNUakb&,Er'[HT&THQm,+4mRFj52$`B
+RXp&f'6ZFRFS%D$D$Ea)q,Z0"+aHlYpYLHD1FaD%-TkUZQ1XXaC[c2KG5f&M#0LI
+Y(G4FA[D'GNpA%Mq&jH,Z1$jH,hGj)DL+X&+19Yq&mM`VEbm@I20$Ep'"S*Q,2Yq
+&QZKEiq8[j0lMERqrNmc(RdY[jG2aTY0rIbFAdLRYUCal'ZKkjN0G*Ki"I5p,$lK
+!f*9c0adh&`rV$"HNfB*JY&CS9I@EbR'#A8&l,E#Sp4qcD3k'jGTEe-5V30Kp`*E
+HBIeJ'`F2qjJ`X9hU&pEaU%BrpK'Kidq3!1,#0L4A-m6KG&jKS*HT@G[#SIQJY@[
+r@JYp+GRf+lU'Z!@20dAD9HP2U&"-"6MG86j(CUA0KNHQea4)Yi,A(DSrqTBD!L!
+rdAkp-9NR&mCFKlRBkj!!pcZKDIbK&Nb+&2*Z2lrj([qZ+(-20PF5GK0q"R[BdiF
+!Y1dc8!GrlaS5HR2Q"#3!h3JZ5KM8-edqjJDhE1l*)!60,i8-A(Y5`J-pS2UbjkR
+C3TiDB"Sd)`$4i4f"N!"JC&HhN!!iE,-cTY)$QEK*,ML4h%NkiK9P)8Yh)*jZ!!R
+NP0cbJ%FRmNkjMrN@IXNl"`XTAA-+Nef0ZGRR9BDa2I++fPK0K+)U0bE*([f08$%
+A%pqrc-bdXUl'lY38Tq90Kclp'bTmBf&2Te092Q'c31[GeI-@I(,I9I2U#qTZj['
+@3mK#J2F91b-GS4@@X66@q25IF[i86Yl8rP#DU&4`*&P3mke4A%Ld$e,4jmG)5rN
+$&3QflL3kDmN,hDAG0&P3N!!E3Qf`)CHKeB$C4cmr-a9MrU[Vihc4S+@I(,L"+aL
+F@E$iraAp+)i`$-FaQ`5mLrb`jDNaX+K%[kDCD53kNh&PRS4C[&S`Dj``00UpH-U
+[A%P@AeP9Hm+*'N`p1("Ll'0C41$$EM&j[ZFY0LGbZC4kM+1KUb60a8Dr$qXTr-A
+aNKV2+BI@+ZG%fG[`XTf5&V2+94qS@(T&J1LHl@e9cDc,@VbLe!R8bQC[N!"a[35
+-626BBr(6)04f*R8M-IfC))%jAT6k@`VZGpNMLP&&U,"N&'),3K`DM#L)beqUr53
+@*q8&[)F&Zc@Sd*,k-QUQ5VD8*E"R3alJq&@3!&)M5J4d!)SXMS1M46bc!0AQ@C)
+"V*!!DmiJ0%+l8-HC-P9F+)ik4qB8'N9Cl(d8`l64)"TBC'*eYRP$%pjf)BrQ4j`
+qcQiKalB[0kb9NH5BjRf'k9a+CeCT3"jr6'Q5VU93Q#SMAHBZT61BYM8PTBdNh4A
+,T,G"iPV6Nj(R5+L@ZeG`[4f)iTQb`*lbK2EfE[cR`Bh65XM$!l#Qq'1XVXA@d+N
+6d6BjSIYN`T%hR5BkB)A`qV'Tl-kXc@bA3+3eLI3Pd'#RjYBb0c$lM%qJ&fVQ5K&
+CDmTCNSY+FUk13BX6'*k*M3CYb6c0@rrM`T!!e#"P8bpG0jUUL3U)9F*N,PSeVpp
+0KMG#G6d$P#BLhHMJk!VriYE"eM29GGLqFIR4D&H5L9PS`6FCK0rU"AY-#[rT`0-
+YE#1i,jPBq4`m2kbMdE3+"$aX635DUKa,!Ia$Kf(bE"9j)UPFa2PcVB3&(9FR)qj
+0LJ0pPU++'hT&lcaV##eGK"Af(pB21qVHQX-S1'kCBcdRTI#YCNUCDS'X)A(m4'E
+'hi@9mPmjM#c8VZQ@B)ZC*H4h1D4&R3q,LLBcE,`hM6X#hi8AMKp2Dj4QZP6rpq6
+LqI2I@ZaB8eB+$V0R#4Lii$C[&jm@pKdQ,cp"XiCV&k!hf2Krh)'a-m$fDaFGJmL
+URaHHpMeBHUkXQ2Lmj'06,l-Q42+NbZN@qfUj8RV`FN3kRYH2BCF#Xc$UD&DRU@C
+lYV22`c8AA3k6%l%#Xf"A4NYdM%l-qabiQqF`QD-G)Li*JHF01MQqe@$YKd(T8-e
+rh-2&$--GC6ffIKYD%HE@f&0L98f(1pSD*P36+H-6!C3UECpY6ESp'$h#Gi3MEU'
+dll$qSh,+Ck2-,%fQMUU'!Ic*d+'bQEMTIa19V-*%8[m!-EUK%Z[lF6C&DlPf98C
+MeT!!c4CXY)I)S@3$CZKS3'q5B3L9CVfJ-P5EJV(B8rQ$)(l*&BDX6)4ceH0ar"Q
++XU%$81mJK@mST14leD@JUfkd"IU,iaJfEN(1@JZ!Gj*C#"fHQq'Jl5`00YKGKr&
+PZJl!5bG%T[L@-`pUD,UZ2NmmbFZlI[Nj2T5Hdk8Rc,@%Glb2R@&k6X$Q#9l(eI-
+B3H`h$BeJ+-3GmELVFMTBb4b-[*BbeDB$-(`[,je(JqG%jHac9cAFlE4kk'8jffl
+A-(93!LE5J45Fir@,'`HG4!E[ZGh1J[HGh21h#VrFlE88M0HNCcIfb6jJ9H`(pH*
+-rM9BpEPkhVf45DYN8QLC&*8U+5II$SXTL65X0fm+f`bK@@l@ESh3Ti6`8Uh3TFb
+R"+3k%VT`51#,M5IT2FEfK[FLYcelN9CfqZ(-h'CZm2kfVrGX-DhiKR-F-"22-r,
+K,2+1T9[eS%-b5Zr'fi+d"J)hUd'U(%ESLFf+pjk#lD&YrHXp$iH3!*)"Pjmq(`q
+iTJ(Fc@iNFYD#f,`fCk($Iq-p"`LmMX16Lm9eL3%B33q(HZQb1eS8F(1VeLccHS"
+lD-dG&Z9)5TJ5l+daj(QcBS$F)6Lc&S`U09LI3C`qF8E6U`8bQ*kJ@9kVM##iG$-
+-GY'CTR3jmSj,$,3NM3iR8UpTm-92X#6aTqNUjPXF(@cM'8T%Uq[e[If&0U#d%ap
+%8#[Z@*ZDDH9SZ'C5e0Tl64HK@%VAkqbrCFUYiF#(lRUQe)90TYDcBmXpf$"apDH
+arr4$5aU'@SRID!C"+3(d8#+KeB1LqA$T)G*M'Fif`F[QdiVZ3m9hDmYb`aQe6U2
+jHpa@FXDP2Qd"dheh2jdp9JY'Emm*[Rfc-Q+'D(Z9XZKE5TmA%dNh3iRp8h2(55V
+k&Bc$j#CZ1Nl6%kV3Dl'V59D0Cj6%qHM!&VI%qFSKNb4`"4qVX)8`M[)$6+BR@ep
+93RNbf@a,M5eARDRB`KXEBmfP#QX-YCaE!+X69D3i0U'K2mSU,E6d-eGC@I%h%M@
+C9%&RPFlpI%dmf-J`[8DG"!bfBB%D4d,%IhYd)Q*p#6X1Zri1VCa0*&mJreUKQ,V
+8@'@QEM-H9LI1krr2*jeKPKA4X6jdh`L'hYk6+1fHV8b%qR5126aQ+#8AiKi''@P
++Ulr$CjA%dBheN!"KP@0Ke9ImR4j@G5Ti%heEQe40XBl8FB9Z8ZhSajR&CVkCXja
+hR*l@Jh(4m%X#EMSrai[P9Q`dG92LGc5E1PdpU-GaBq8KPbDcEa2"fF6VmS[&Xf,
+"crTUCIqmE&B!d6&p[298q1EL3&60adIRjkUdP93c%68(@`qREIPZ)'e9l2BljGj
+SjM89AVVV+@H8LDk'6BDA*h@lB*4XS3dL5pG,r"arTe@SK5"d0Pf(r%)QGlehqCN
+Am1SQa-6TIQIfh%0"VXAc`%iDUJ4qALCmE)bk,E+6c)k-*@iMqlLCjG8EXGm"R"!
+6m@*kiF4TIjEL+XF)RDmrjc2"X!cI"Yc@!h-KF9FbG$q2LcSFr'9)D`TQC0d2iFT
+lbDTX2iHh@paF3CSHHfENR4@%A%U@c(&!cSL&R!@@8fEDKR$re5qZR!`k*PqH8G)
+$J"*#U@(VjGKd@*9@(4BIFD$k3j6k@,`aG5`%h$pH(L`TT2dR+4%-ABRDqfadX21
+S*U1+C'ARHr-cjrhP$Mbr-K#YKBC@`bZ*f'*QV#bXBf*rRDmbaLf'CUkTFVLVZ,$
+-lrU*[-8KQ"#M)UrR"Y69P*@@LbBTqPT6@LYS6q2@5lEGckp*j5C9QZdQPKbb-MF
+G&h)#EfA3Pd$aC!*9ENUQ8KSFGKElEKHALm1I5R(pjq,``-mqIb'#8A3@f,`jZNN
+l#VUMYe4Q0aQRVGbM9P%fb,5(L118XRSFV81@&-))Yi6SI'Gr,iqcIck%QemUZ43
+Uj0SFJ`Za6qBb[4e+e"VbQ+R9)Vb$I)BfV*-h&0q2$qY@E$UkT46!)TT+KXd#Qb)
+Z%#1I14$MP%!L)8DM`FXLSNp@GS3qiV"AQ*KPB)M3kQmK$Zmr#YQ4p!V$dqaFNJM
+%9K*PLGLj3#U,$+QUeKQ1iIGd"AP!9'-F$Xh2RG&qK+K@Z"P,BC8'Vam"efq!lYG
+BZ[SV8hVh$X++lKeQ-AchGYiYV-[m&ZDIl8I6`T+'Ik`Z!B[!CLNi$1q*j,"*EZ(
+P!9QmA$"c-BZ'@Q%2F"Sm`8F)&[0-#[*BK[*XBZQUSqU`B6iRGb0,94p5"8A5QT9
+T+U2U%,EL(9e8I6S+fm0(9-jNhRYK*0f5Sh+d*CdV-9Q@30qZ`K5Ch[F6@+ST-h(
+1jA6l#%QG$qN5`-H,qR9UmK-h%ELBIeUdMH%T528F91rL0a#c+G6`@cp9TDV6&1*
+m4YEK4YIRC'e@bLA,J%BM+Qf*f)(H84KG%b-)iBR)`K++-+fqZbVGPF6B@fTlI2b
+EV-kNN!##VN11bF6rP0$JUmImV$SVV8d)`+8KQM,'@l9eJSH28X-V2TE6NcGPAi5
+XK+QFM#kdjG'r"RIXBQXV8S[8Ir9%p8KXa*Z(9)BSmDfE$&`lIE9TrVc+A$Rq*2r
+F$'0`ZcajjTCEM$ri3KLCqhrC*dUl!'rXL`pfKXYGN!!)6Q&56qNqQ#lXM,5l"!$
++KQ8XSA9TSU6+9aZl8i$EZI(rKE@[*aCpYrI*K2c&aK"GXCrkJil5EkH8j1,Zl1N
+S4HaY*jr59*qC&%RkNQ"mY[k@rK(CHrTBe9*jH,ZlIED+&e,bU5KeI*d@F#3JZ`5
+-[&QVGT*iFRd$P3)5l+I&Z2,aHbCm))e&4`H#-iG,kNl#I6$HICPbTNTXm5lq"[0
+D[%p-q49c,[FMX'"hkDZ$2!9ZNK*qF@V059-qT1N6DH[D@R*jhRp8Hh*U'fFC0-N
+B9a+Hljh%P)JX6IS9FB&-aXFd#Q2$0@3+0j,9[mFJmX9[YSH($bBIKKjN$FDKf80
+M$C`hX,+'PKUBA%-kZPdh1N1[mIS"VF)h318IYK6*06[G!U-`+rD"@BB&F3#SlRl
+d5ENCi#-kJLG5VF'2`3CSj,@!8H5Mk`f0j121&MEeN!"6KV1i*q0V2L)D3FN4M4Q
+T$'T@"'HKC-"V&KSb3+KQL8c+8+Gb1,N-MLpl"#k`N!"33LfTm92bXL`--(D!9f"
+SGIk5Ip'4LHm`Zpa4K5DUVUKiN@hfbUa-[1E$6&5CrUh`lbaRe-Xh,'cl[,'90E2
+aZVURhSc@R,K&VCPaqLfm+ISeqZ&'(peA@aU-N!!E#qC-K'UlLAipPcr!kkbjp*!
+!UmH'I3*,l'Vr49mmqNDql$T'6qF[ZB(DSK*Z212i!RmLE'pcKqj`rG`rG`l#QqB
+ATT*U,ErjXQiFaM1VQIaK`ecmQH,+2cZJmr!,RBi#Fqj2%3@U$VeFii!"632&0j8
+)lPebP!lJ3M1C9@GV$a#HKEErU*1S(09"iBT'*qpI96UCL',DPS45I#PYXY3TlV,
+8+B")[Gj-f*hG*QG9$,&,6'H28SCeqhNN,Bdk((Fk"a(aVYrRee&$9+YCjr$dQdh
+rcDZi6m"CH09XISR@$q2YI1dm)[5LkRaERjV'!c$jB$T4J1SBiS"Kch8(Nblc*KQ
+l$,YF9mjMLU[B6p-I-#RNl$Ijm@KbV0rRhTXT,mmkbmcd12*G0Sk0La3bQBqr&"U
+11HI#RSE1VYUb9@A2jYQ4KFZVm2JVaE5@F"9c-rMJqjdj'dF"da[K@-p!qQ'@T$V
+M,HifDhZ$jq2ima&E+NRA1hjkEQHC$k5qNc2j`&%cJQrdAa@QqD9H+AYBUTJ(HUc
+$*e1lG6U+RpLAjEHh[1`C0GcMp+1Gh`%Gb"'%56B,bSd"a`G23F%$S1$,"Q5Jd5%
+ljJ8N0K-#X+LD9A2cdr0@"r8h1l[@ll%lJm5866rfb6iM)1S`Alc@0GcZldq#6V-
+i#K3GcKr8Q`rIlFQpK)Nh'Pcd)NYEEfeK)mrVlb*TFcCEbrLcEF%)YP`C%0BDa@X
+Y!1M9B(DrmN)hCS1Md[j$c35B4m#'S)NXe6ajF+VYBQ"98rlH[pA*jq"$0@-L(Vl
+[@EU*ZXR*bHKerVC2"XC%cKf'ZK)0G+35XE#Xf%[`eS%,lhU`cj'9T21249dR[c&
+Rk@qfdap@[E0dB"1@cH`mJX9B@$qPHRc*b6LqAI%N,[L0q-dNq-cEQ99j09j-NCq
+%Z%YJ4mU%@NZ+6(KS(!JeG%-EVGdY)F*!(8paIpYIB&jIbG6ffd[*1S[lrDhm-eG
+AP#p[,l!NkfqfQeRAEJYd@SZqf`*1ZlDqZpVpA-@Ze[EfGIAEJI#0VEl!lE!fPjG
+`LCirHe&8+c@JhBGPeQHVZXYGYJ@'[kbefY(ZV#ekbiRGaJAPKf(@@Zd[*eqS'h[
+3iqQU#q98461ilIY#Jp6AGYV-,4`L@X-TlX`TP5U"3ZRCLG(d@8R8eYUL1`MB`-T
+C9%bdpraiPT!!k6LB1HKr$#iRIF5de[Uj2+ZkDP`9eTL*,M%(Y,hK%@MDj$C2Q2!
+NIp*d11BiA-fG,BqIJ`dq$V-+eam6Kf@P`F[@I+i1leKp9,(GDr#lR+5p2lqVZG2
+i@lZmILEZkdpCmVAIqXRPP"cdT[ZqrpRVrr@6cl([NN)Pb*!!jYcK%DeC@aT1`mA
+#1JCNhFM-qI!LGZX+jYC(Hfq2q6aVIKINpkhaq,4N!aQGc#aK59DBMYP2jV$!%IU
+0*YZafF8#+k4`l'Zk(RDMqF-TeGGd25eqRl(6f9A3ajPT,Y,V6mIalDdSBeMmV@G
+rSrP6,A!bM(pCJIed@cch"dpj8GA#EQSmV*k&l8b1I#[Z5!!%@0(S6V,VreC22&m
+2'Xi%&+YJKciDLaUVr361(XiYrADI"NHKIQ9KKmTT3)M*RT!!&IScl&2Irk52dGI
+kX)c9aG'!#48,pR+'-!fJSCJ"UkI5f1P`3kZX+@3bY6e1+a06qeerUC22Pp1[9C(
+N3V9Q+BI00IUr2"4&RHFRP@A$VHYXZHCkABbcekGc#ADB'8BS+qI5a[3KQT[-!c8
+8+m"Y23calVE'md3'8ehAqreZlP4U5'DRa,Qk)q2eEbdRaHaZT[jl,d*[#prV96F
+XYeBG%,,GeZ`Qah3P4)R+8IjqZkX"MS8XPH6`BL6EDcHkr#YYI3U0IFN3hjlQ9@c
+2CiIXm2k(D`L$KXHAG@-LIRQM9YVjp0f0b#f0Eim65f[`3Lkh#XZ*,ek+,3$V%r5
+k4#ldQ")lQ(Bh2BbpIDh0cajNrR9Xa)$@5NQ0CKAm,,U2iIiD2GIar`$MR6BkMmc
+9Gd2rr@bTXC!!CG5X#i60DMQ3!-Y6dmZRraT,[0DV(KSImHLeJZVZ0S[2N3l(Hh0
+bL6@EfaTimVrcNhFH2+P3[)8RP(*1JdDV1IrjbB3d`ZY&cr(mIVrrH6MV,ik(#ZC
+8l`Q+$i)4,(2j23pcAf92(Y-'9HCXTafE*61&G5L3!'mG1B*&V6[1(GTTZ&,U&'a
+ElD*53lc"T*($ejkhQ&Rl@M&EX00deKd9B8ZKEHM@LNV2p4F!dCr'QISHVIfY(Td
+1Kcf5+I+XIP4*AHC1lP@2SDc[dr5ardDQY)P4U#,Mdd85+LfN,6SYSE1,C&46@Gq
+H-R[2h`id*Q#Sj,,"erINSRqD1T1`XDLC4K&idbE&55%*Zf+bSYVK)5XT)PS'ASI
+[PmDA5b`+p(@GrC-Q!()A[3j%f+QU6CDA,I`YkcBDViCX@`kKMFHZKTK"b$P0*bR
+lQM"9Lj&Vr`5)!T*FF%%h,Qdcj58[rSei#L13!0)8d02@IXVI6"M'B-FKLNM2C%k
+IXbZ`D6#J"mCrkESFHAF0&M%K%XLFVX,4P@l0HC+[*&P!XIC6pr@fA@5)hZc1#9$
+ZNb6M1k5%*hkZhjPj$*fKVR4@6'Frp&`IlalXlcHhKNpKHHcUE64%UeTbj1@!Mmr
+L5ZhTCFe8P2d69mZ$jrCmqKAM1Q1S&pHG$*cYMJp9ZC!!DXR9EN[&N!#JKTaCXJ"
+[GQd`$Hj00(lSHd&9DambTP12U"5R*%Z,@E"1mqCf8)!*&YrARI"#!M$J6DkDQZ&
+2dEK(iG6JM$CY2N(`HGU1C4beEEA1Ur6618([HRHk13c39(edk(iVSV96ZCfj`D'
+TG9-U((m0-%)cS35Jl2#E8f9CkbN6ipYDd-i"@PZ#cPSLa"YiHreph%fq9pHedF8
+HKc,(d!mpUE$ir`MJL($TV#[a)RCflaT[(R9%rQ6H01cPjb*[&R4k([6ICR8XhQ6
+SmhM*B$d$5Q8VLS!0UjIPQ6mjV5Xp2NHKeXf1k*JFp2mXcX'2Zd091KNGhB8S$F*
+$P0eq$#E'B,E+`TA4NCb%69Hq9-",GK+rlr54jGQBjNEa5@H&fcU6$JfRDN9R'QA
+G6U2IK5JTqIZiHrpl68r(qpS[dc09erq@6cG&pK3NZG9U1A4TIZbY9r1M5M58rq2
+4+&QUrP#Nrak+maL)lb[VZa,kl4,a1lbqSaiCM5e1NUH$f@XC0!Br@88MaRa3-qM
+,pI*")bh`5bTh)cllZTQJP5'8p%K&+cq8,#6-1%L(r8j+9eU1hcIllE64"M)eEEG
+Jj(N9118,#X6a1IGf&+6qB&#(2qc&*f[eKXc"CbiCE9IcJbC+jPk1*eGAf"-PT1S
+l!`dHEDhHEk[+$mU8IP5k@RdAl0(kCIma[mE8dYUdp5"#c*d9#'6hGY,Rj[6CiQN
+-8hcY9#PXFX$95$9hT)LJ"TXT,Pf923cFbdfq8PQ8"l%[5a2i@hXDRf,35(,dASM
+AHi5lF[4BEFq,6CAprdpIU,,+(6`c(YfZP61DRcp9GpQkQ@ce0UZA4bdRSP'PfII
+eX'N@LT2HrdZkQYdpCDkDP8fc(MBph'r66&Z+N[-E@plGDNPJiZSjGa&df9VECVj
+VVA6r1YmHNSkA+mDhZG6U1BH,+Q4&@UQm*l23HdaG2a-Dc[K,HfdH5@D3!!Q2cLB
+C@35+995I5krI5r#91c(al(-rhh"!5)XXTX[f2`e,pMmqGqUK$qQT9E,l6kLQeNV
+4`eXV@fZQkLI6@faSFh@bY0e&$(-X5NReCp["$E)mQIQlV8rl"aCj@kehEL3jqQQ
+mlAli[C95K&RUEApmS6*q@Xe0R5k65b)D)df)CDYTZlKU[jbFY9p%4jC8MbbXf4B
+a+beVE6kr4%`K4Sp[8IpqLf2)XD9bMYaV'PeNVpm`2+AM6$#C9S@S9I[q2SYe-Y1
+2ipP9KTcH2p1Iq'XdqLqahF0Chb9JpEb%)DcI*MYBTf[4NX[l(fhELG$iYH9RMPD
+C6l)%F%"!)acUAC6HJC[bF,h5laSq(ZMk29i&D(mTAbq+X!UV`8+9)&9(k*9[`['
+hRk*3)8dk(0m4@&[LJ"@pX!'rTjS&B0@D[&[`Z"jTp'[H#i)ZElB)IG!Mf3JQJTi
+J'HU"QXYmIaX)#0AEm,pID!TqB$*9[MrVZ3)kZhiArMR!T`!-d0[Mrq2J!JBlr`9
+rZEi)'9!+IUAleFh"S`1Hj8(JmY)C@mLAmArI#N9&eD6bTpZ)904VG4fm-EQ@eGN
+Ie6ma`VhSHGH46$9jdf'0Ql(+mDCHFLkPF'pk(jlaQ2dXjkje$F,#cQJQd3V-kla
+ZS3mUAVl'3U!9Y+fG+F2Q60La$Ldie`56D@cbIhh&LA!XAXZKcELi0-#(`dE,5dp
+(Up,$+k+NVBEcd2AYH0e[Q5pGqSYQ8NH9mb3,M5r-k5BHUciI1-NMcqmb9CkeXUr
+LA0TaTNr(Xk34h'!5Vk(0*4*3&!4MpP3MJ0[#'R#)q1,V0pBe5j!!XQS+Y4CJ%KX
+N(@FLa0(J+-`cGQK+3CcV`CV'TCfKQkX#-CYl6U80F@lc`*Bj-jl-iMLaKQ-I-6D
+e-*eQjKP-MmGr%XG,!e2SQB+qNHF4,Bhh!i(cId1QNC!!apjZ6BkR3A+FYYMf"91
+RaE'V@3T1Kc2@G33RaPUi&!6c%daj))Q4`HUh)e%5G`TjJ1al'IQ#YY5rpEh)i2@
+DM)r(0l!BD'4q12X[U'(Llc5K&MEb6X,Up3SMLJTKU0#[R3jhiJFfFipFRaIU6r1
+GjiiDRDiB"K9G0ZBCE)r%6PA&MAC(ibb)1ZjhFM3"m[dq@6Yr5T!!Fi+YX1%(B""
+Q!JmJ)%q)crJ@p)%J%aNU"jQ,[filNNJTMHi#K&amII!4palc%[jqQ&AD"&qHDAk
+2jqFlS6FEV,M)mb@G1l&8H(NK`HmM'PAJp,iZ))V5!Pq-$#(hp#36&U3%+'h1cJ6
+90j68elJ`b2-!c@!Td!%%pM4,`Nbjh,#SF&M*"Hk"Qj!!%ikMdj[TV,UaUX5f-$Q
+-[!4#5lC+,BqANHBcNDFK"36HT4bR@5R*%-(V,3JG+b#'A0QU&R0l,S#'q)EV'pi
+l1"#DJHj!NH)lJHd[3jkUI)NjYXJc'iDiT!Q,+h0cV$brAL1b2af4$lej3S2aVL'
+b2a6k9H26KqK1KbbVeMk&Ta2$MiIHk'-Z*`3`l$R835j6'-''aHc!ldf"a2*LjbH
+Xf"N$1D3!jS`Ar(U@%*NSFPjNb9EB1c1NTS*@4jXNZHFXpK'+QB(fFdXLI&a4'EK
+L-(BI$46AI$KG$QbDl)mfKAmE#[+9(8h0)'"VCSJa536iG5M6iHdBlEa!8r9008M
+)ma9#ZD51I%!Rp*S'CTYh6QaeGdjTfU'hSU%2Lf,bX4c4P[K,)Q6TQA`Lp93*31D
+5&Fcff+Me!%(GFdSaFci'#46Sq&9'K8BX`MH*K[K`bijTahfP-rBNFq(EJ*l)1%c
+A`rC"c2,eX*E0T26j%IC'A95hNDje`f@QQP!6QAbM#jQbBmJT5Fd"2Lj!*GKd1Db
+P3U9e)bPF41#STEVA8%S2#)T[8Qmc@'!+CZ1CkJ#GR0U`'r1!PcB4TXN#0T-h(mq
+$0MJ9X3+mS&NGGJUR(0*R[K+FAmb1C2N+1RQbGFZa*ErD'#fCr8@`-Gi$2jqpd1E
+EAZ4jZc)kLHb*5Xq`1[KDBq6cVIkLYk9[@QkT)dd'lUeAp+6p)NJLfq2ph46[F6[
+LZPcD1JRAG'ZR6D0I1fP#*Z-RUmV4kLrKJ3R@mrmh#dpf@X,QA1l5KcG&k'Lp'Mf
+NlUjmIZmT`HQ9IUK%Pl&)+fZ+%+5bY[``K2K5CqffDM)bGcBjmmf!`R5qI!Q-Qq*
+1c&#PPpPEDSpT(q2#e&[YY8$QiKTXVRHPZY9Fq"FkMJp,VQD$9(U*hZeIdZ$+QdZ
+E1U"1phX2mXR'r,rkS8mIj80$2jh5R8mQmX'V'GkTRFBak%UA!04CG1kbq9-1!Ub
+A#"iqEh8lm*RTI!a$@-ll[B'H0ElCE@bC5erR*K6lUrNMG4D0G6NmQ6Ici[jY4GK
+"Qr3Mp,#51Ja[NXeC-QMSaa9(3AqJd@I-E,ck0GIb3+L6[-SeNldk1I[mr1iHQcm
++DKRTQiKR&hXSZTlc*qi2'XcirC!!Dre%Z&FRd6T,56U*GT3jb&VIEEH'L@cCRi8
+SS)`rDQS8kK`c'!clGIbE9a6S-G[)m5dfF1KRp6,XSQ"$aE5E(e-[aE6aCHcLqaD
+pc!`lHPV04`VACd[9j64jAaPSe4c4HM(AmLh9TJ8PYTjqRS`)AHDBiARrlc00P10
+eeh%imbYiDeF,AqG'0qMS[dG&0TIdG%Y6*DMehQT*Y%F[aEQ9*FfLTX-Qj-`VQlR
+,kVNmla,ElG#*1MDr`$lq1F@2,UApYIL*EB2EqjEEVYq+cZ05ri6%9DViB3#k4EE
+UKl8Qk2qU2)!@P[e!K*Vk565(F#K#2rG9fdUI)VF+VZ1Se4pkZ)G!c%Ahf5ETi5F
+#X#50*ZQNM&G-`HHIX4+RGP3dLq"!38dR23Ki3T!!l#dUI5JF)C`+H#Ll'NSpY8G
+HpjGfUj`Cp,prjI%1fd"8AIj`r'$"dq$[p@ciH8ehQri6$bHH)cm"UDVSPllVlEl
+9[YMiS0q)8*hY8)ajISS##5*j[1[0)c0mN5+l'm(`Ye0U`8mQmV35"$ead(QBN!#
+&hQlNG-8i!82Zdi82G[#Qe5CfAHiaaf6Zc[-aG0)*'T`EI(KkCkk$ea"4f9jSUrj
+X$DSql[+hBC[TD'Ifm+ckAF`cG689&Vbj821bPj6A9VrhM,R)8+H6eYc[,Vl%rfj
+X@695GK42aBNXaj-QYS8T%G'[*"9Zdbj1$"D43jC55MSDZkHjh45DLjVjAVqMGEU
+IMHKeT$EGG[a,RG9P*iJ3Ck*l!l6cF-F9jr6fN!#0@N*1RPP66PpA(ZZqS4CIbTZ
+0,c+0P@bDSMm$-FehSpA6*ieKPl#-A9#S"QUMpISeN!$f!8mdHeXI@kJ4&A-rC`r
+$`U%@65Eq[5#@C*U16MH#25TfrEXep8)G2@41(#NSj*MeIe8HMYr,T)J#8eTbMIN
+mZNTarP2A5Ye#6AJ*HmrflFeMRd+FC`8l,k-VG4T08`D3!$43JLm6mHkKFi)(8ee
+q2G8`*8dQ8SPV'qh8EJi@ZiFc"24dN96F(mHkLY%-(l`kVL)8m)&'*c3P9kYY19Z
+Xak'&B333-j8h1#[qXb-rDFGM@9C5SlYKGKedVGdkB6GjL6AJ8aCI4PE[0L'U,"#
+6X@X)8G)('T!!HU,'[hG3HrUP%&TN6)3QF1VUT0T)`D0)QQ%JI[mdqUpJHdcbk62
+Ke8K98Kd8-%L($`j666b2I3T'*T`JDQ%e9*Q%qjUF(l*10FK%G*k2JVe"1-YaE6P
+E[1HKK0F`M"VQ0e'&&hQkME8qm%0,*a#43-dM5K"3#5lI(cZrVVlG3h8@Z[YhQ1p
+cPb3JZIaplR&&8k4hHbE#[lh1@0IhXPkF"fIHb4K-fLapMb2'Z!8DR%`UZUmc"Rq
+9*#E`[al[-#3Uak'B$+VG'5%,"'$"3TrHA5@c26TMdQQIdp#RIZp#NM[rMd-drGk
+(br#IrhSDG'$`X'FK$XcB1d+@c&!mAe@rKI%T6p2q[BC1hIrS!3mPMc'da!L"UjC
+6@$*SChYABeqkM61(BhhHeI"`KV&3BcD,%VR#5X"640++Ya6!ef6BH1'K--KM6i,
+@iF0Kp$a215l4[SK&hYB'&BbEEK8rP#1f)0@0TbZqq$d-++bl*A5[VfpTb[Vh+U4
+@&IpHhShbFaDFVH!PA5ZqjE(3F"`QYj-Md-+MPq"0Y19pLjXF'aVrXA-cKPAD%0(
+4bPR$%p4kKdSLY)dL!VCZ#bL#E%0`URS5DrkpX`qdM6jqb%l"XAhelCk3!&XAT"H
+HiS&-*j&G+qaf8QUqM+qaVe%9pJcdXNqAJ)GT*VrXDaNJ"CJhPbV-#'1qafJhdEl
+l'[llQeeppHh9PKLNlYTCpLDLbj[NJYdDYR3ae'Xf&M'iHk&5N3(B)FHQZm*aihD
+2J@`h6K(&*8UbmaQUQVUZ*ZQ6*Bj5)UAT3HHmQ!UEQ2IC16hf14e9RdElkp2K64[
+XrKE&a#$GGl@TZJ@c'&2G+4MCCed51*EehYkca!--RE`VUqll(MrM'8LIAc$P"k1
+*bApI-'C"aN60Nqqaf6T@0S[5Dr#RXS!DPe4D0CE2edV#fB0E-46fk$f(MS2PApG
+IB@c`Vj%b[&"PIX4(F[9kb[`VjY%6JrM`VmICeEdM1+f6M#lPkKTd'a&B8eX46LU
+M+SPB*'1SZNfcLD&aI-A'cHBm68Fbq962H2aKEK2U9kT"RSB5[c1#e5AUTP',CT8
+*h9piAim,Cf#UcAkG%G$,2d9Ffh$&CYjPpheD!QX!6GJ*`F6`0E[U0*C`PrJa-+a
+UTR$qM+`MHHB`fHD[1qC(Fi+Cp`8eMd++`dK6G[3TAZ#R"CNiEC@rTPpZX`i2@,q
+,IAX'eGbKJ1%LSJC`PB)Ui8HL2jHmZNhEUjaZV+V3K[@8-UYi@-*[$DZ'3#TjT9k
+D12-Q"@M0Sb@TX*R%TTRXiI3ij8F`P4NTq[rLS@6,l#mp18Pd!8mLM&'QT!+i(dC
+AIqHf&eMAprjkT"8D3&2c[*2YeUhNm@El)L5pY9D-,K2TmAB2139hr$ZVl#i9Q1)
+3j-f@kem[m%bqlrd3Hr#pXdQ8Dml[q'kHFep56@&jlLDl*SSc03mTk'1cHS,%4fE
+1,$(dD6ME96TkMTA&MLh#)c*0e'E9+E9QE9bBlEdPeKQ*cY(j3+ljq8#Yqr+"5YC
+1k"5c0Zrr13BeLIYhrjh#6P[dS0hR(Y'*l&(U(NN6K*B[T14'*`rU&iR0fXDTpTc
+Xhq*adN$K!m4Y*TpaB0S62)lYh4HSH@,JTI[aFH#p[d&"SMTS2%0q&k3dCN3ATZ$
+AjJBmaX[6D!QliDSB@GHaPLB"5j1&RkR`dKieh@P&BMK,#-d12aZ1X*cC5Q`FSDH
+HrHQ%dZ#VP-JSlN5hIY0*Zr8E`iV&r9Fhfpp6k)#+rPhrSUrPK6rVR+#9#E&pa8(
+0lkYGIGpd0lk`'40lklc'1DK%mV[r8XDrHqbXU#MPf-C`Nd#[(-TQ(jM-ARlAZBJ
+pLPphrRf%DM'2b1mZN6d+C`5bl`5FeHRCX0*jqppNVXCAV*A1j%bqh[Y8D9Lbp9J
+CP4JSMDf`#HZlVc9,"k+p[ShUH96YUI!iP-ljG$)bXfifbaYRKKP61J23C%L#UK@
+)ZrDeM,6PH"*!i[mH!Xpj"#aB))9!VM*61*,fh8Q%mk%d1#k5N!$fAiP&F-%*hkG
+mNBVK$f)+i)pL#Z!1a#aVr!VeR!H"Rr#`J3jJ#'9Ci&L$'KB-Cjm$&N$'IB-9IK'
+H*i"RlH!Cd`)D&JKSeVQ!T@ZL4p*4TC*I+88S(JD*J-A&2!X@Bjh`@rPa(V"aZrH
+C(pAq"C2i(Z1i2D*r!pb("l4[i(Q9SRhKShI1B'9qp-ZL*623achU1akY`1iZZJp
+9+M,@B3*H(01Hei#6G1Cl%PTB2N5)%2BNk@$8J91')E"qm`+$j`+$E"qmU8$iJG6
+J)CR%3SH4#55)N!$2)(2XH33@B%6+F"LB)21+)J9JrHE')`kdK+jP0X8BQ("LHGS
+#f(NCjdmKp`QlfPI06!NqfP')U@(JG@i4DCjJZ`Z%XD6#i9mC,Mc(fleQ[!6-,P%
+1BrfBqiN%pFLM*Ge-KA-+PPG2+X6DR(UZ**c'%qb`SH4ZGlfMe'ij8mlfl8ieG+h
+[V'8P0*-2@GF%RHV1UpGR4HK$11#P&mZ`$63Z$6Q-SjK#D+EPlBK0JF(e)pe3R@8
+jA5[l1VCT8G$qcUc%P69ali%'1R4%$UrqcUfZNEA3G`Jm*j!!JrXdYMArfD9Ff*X
+qcB#)5Ch9ZL&GUAkJ3k5#Y%2h4Jqb5m49eJ[GQ*U#F#+PR0q20fZYd`5Gfh('Xqi
+r$Cm@H(bpjba!%d5jI)FQ3FZ$H'kcr1pi#MHLGNhAJF&&Yp2e,XbBap4@1Db$@-G
+D+cZ%h&IEfPSX(,HfG(+Ldf,Zk0V(68If'KX0Xa$IfDCa$I!m3hJPQE`G-j!!J-@
+5-(Mh'MRCB+9ckM'M[jSR12D8ZLY+(X5jqhI3TS38Zhd+(cNjp`qK62&@$229a4A
+0(H0)jF)IaENlePParGZ6[9VN)H,S$p$hI,,S3mAGRi2-RSIFC(I4hZfBi+&Fjj'
+ikVF1$QEF8Jjjq+4QJXrfD"9XRql3-ed'[SIeE`&Sbcd*jbd))T`+$CrhE`IYE`I
+p@h*MkI)cCHIY#TF'$kSjGpVhc4bESIGpXDlBH$+F)X"c%jP6%jAJXGb#`-XDNCV
+Z4,ma"8pJ$%[m&Tb["dkd1Z6cQK8k(`9"mXMS(1Y),[ZlI1X*'2mDqM+haqGPG+h
+fT30KGbi9,I#HT!RaV12L4TLSiEjfGR@P`k)2Im*jY"*5,63LE&d`d6a+-9Y6"BU
+R96$[r8FBVl,hHmEH1FY1AFk((l4E3$G&T$6+Mh5,S(-dGUQa0TV`QpUcT#q)HT!
+!EdDRll4$PIDQ'5L&e4G5K9RYBq@ZT2HImYGpajLFBdRT2SJmTlFFmEKmim$CaP%
+SShT0I[Y6f5mqeIKE'E$i2%EBSl4cmKK`hTc1(`cEZBX,KcTQ1mKV[RIBZHK4DN6
+k&2VV'NFb1U8le&,f#H!eiR3k$b-!#-S0&Z!)M!4Zh`0CGJNjdX'8'R`rb(iAq2m
+qZrA6fLcIcdFSq#6Uh[Gi8Ebe@QN6h'JbPY9,9JLEe`Qblf62[,3G&Pb&K(TE1q#
+6dRQ-mpp26kkI8q+KNcCIAe)BHLeJSRKVXJ+*jGM+VEc1&d[ZbAGLC,0NcSIbilL
+1Ff+R9HKfYQFpaqp,T`i@pajMUP0r(52hTM4,pd3Hmkb5PNb1Dq$e)"XRRF#LQhj
+r#+qH[8rIEmHq3apGGZjd12VNDIAm9JBYK!aVSRN!*`(cYE1JKZhBhYNGrkMVYN0
+U'6BIb-TMk-VHqS`'pN*XdmplcDrRZlP5--b82`Z,aP%#CIH$The*!aeR6AZ4T-A
+rCm'#9MqacP04Jp5qlrKP"6*G6T-ql*K*[&Ud2k3'm@#ap$LS6Ehe&N0B8eek2SR
+UcSIm'6dRK6SHlFZRK0LiGFB$2GNbKe[0%Y(4Fk4mdJRVMD9)ca4q4l"0pU3Zp@E
+$hVCT0H`KU4B(M!C3FEq0@LFljK*djhc'$Nf([lPaaNalP3+1KUI-DCrjQ)I*)kP
+FphZfhSRe,ilQFrIE[01KBSSN$[54f`!+d(jh6`(@J4[,Ck[98dk(+aPE5R3q&eP
+($TPB`T1`IVR[EbiI22HhbpB$01*b&a%K[K32e#T@T(da'cDa#Y3*j$JXjUK063c
+6QX4[(08"S`meY0jJ2eVDEacec0,(0@"di*c(qB11K4EYbh$'0!p$'pHiQ("4cY%
+1Tp(h6QFh-(p54Ial*e%aN9T@@p*PbMK-Z1F+bdX-'hj-44ZHUmRmhM2E3cfT(TZ
+d%c&fFZZjhp%#GCZBC6&9p,ehJ9BerK@c+$()H#LUTH&E"pSNI'TdXfVpV0Bb3YR
+TA6[#YU-Kf,55J!X5'a1KKYNURTMZ)kBi8&)lAcJ94T(,(bAcJSa%!)iJ'F*$cLm
+rIi6li['m@hlr`[I&XrA&KElCFQD%2bpP#(Q!*5HP$S[cDA,mJ%mj5IQKPE5hdrB
+JCC@QVZGC$,`dfRkh@DX#2cAA@pPU!ZVlUekl@!4T,AVY2U)8Y*U4'lVGjES[0i-
++6*b3!1I5!r+a'"IX),bM![h8&a@"I03AP8&dN9"G+`,c5#pd`,V%&lYJASN&q+`
+,dk#r'B&ka"E&G5AEYA8RSZeG%BEX9d6bADZbQEGUl+-0f+l+HSl9d9M(X9dA5Ze
+G&5#Lj)#3!)CA2-A8)`&k1(4HE`c"J%FHb!cb8m#6$T-`"Pa!C-$0q"QrJ-T*KQH
+0$S[rlE`'9N`q4lF1Lr*)JaP[P9C$rfSB+'2Y*%HGPY91[qf[+2GCA@APrIpd!!!
+!J$CQB&GR"fF!G`#!J(!)J!"3F)!)!(!'D!J!!!!!F!"`KfKeF!!!#)GSKe!!J)"
+`!!B'9BF'!'CeB'GS!'"`L!"iJ(!!!!!!!!!!J!!!!!!!!!!!!!#!!!!(!!!!!!!
+!!)!!!!J!!!!!!!!!!!!!!!!!!!!(!!L(!!!!F)!!#!!&#3!")`4J8!"`F!-50&@
+)X)*p!+JR90lTZ*!!L1ZZZ2YppG"iMiJZhG`9DUD1(4T[d9Bp&N,ccI#FBHN&lFA
+RmJ00UacrRbGh0%HXKV(q#@Y[4GNpPA4Lae!lc@iNE!q)#F%H1[`Vm'XHF#I@r,,
+KaD*DG91E2PTPaeCXq6,Ldj+ZL@LRCq90i'dkVp'E2,deI2TP'LN,MT!!p&RBVrG
+MrVGfIe%)*(UH[[2f1lh$%0eNPB%"&d%A9UhdDKXNRiL%%I[AaXGZjXli+mS-Y66
+m1!3lV[Llmh(lC`4acBH6P"([YIaUQjDrVG,3Xfa5#SH'5X-lf'C8-!!!!%)!!*Q
+lQ3X&Ul!!#`!!!!!!5@X*YRH!CPUAH*Q+U(L)J-H(KiQAR)H(F(CiQCUCLTZ%G94
+RCCK@9@P99@GfL3S!#U!6!!)M0&9@CQHBLBZCUk!!#m!!`%!d99999@CQChCQCfG
+hGhKiGhGhGiKhH)L(KjL)L*Q)L)L)QBQSQBLBLCUBLCQCL)QCL*QDQELTQDUDQSU
+CQCQjKi2mrkmmdd2mrkrf!+qH(SYlj8mI9eci5liE,FES9bKcaSUX`Y[e%AI1JZr
+kpFFET@B3d95l*@Dif@3i2(rAajr(i8%(m[`PGI9ECIa3ipYe9B$[Mi)Cmm12B`(
+H+%`&5&r!M,rR1!pkHMNp[2bqcViq[Qk2B"IR3MIq#'kkVT3PC#1f9%1`QRPX[RT
+YS86S4C,cPpRfq[QdIG$4lHIRiqVqb%$mRAUP$A%&c'VA#Uq'&X,jAEACfqRQj1Z
+(EG(CUUS[K'q(G+X$#qEPkG(UE$1D%E+B9@3[aSe3M$ZMZKKUMK#Z1%VSGeYeG2G
+95$9Gqbfl"p%"$ZU",GNJ3m*4[h!bf"(10p9RD#+P$C'k0GFUiAlVm*Di@kCQch"
+5XliDQm)3KIXM4,0#VAXZY)2SZN%9E,TEDTGfDBQcL8I4[U"@!rZZfQV6ZRF3kiJ
+J%'#Ge`ilX26+0B''p5$Z8`mrQKd8B)XRIKIUYaVT"bCYQ)20AD$IANr&ZQ'iXh4
+S1QS-q*IABf%Y`6P10!#F+)i!DpXh*apI(kqMl8&`5X8!kEDk3@e-YYT,F$G#43q
+j)a%S%QVe1c$Rip(Abp6XLR4N(TMCjJHfc-&$B&Aeqkc#)&pK-CELM'%@GTYZFE)
+4k#(D9h0(X"eJ+JM'34AK)JTKTR4p`[khXrD9'!9,XP49TU"cZcG-KZbLL3-+9([
+%rSHHbfi,j80p0Yq'LLkVCJKqTL(-c'B-),VPhi#!i%VG$Sq2A,mSEhRmh"2pI#5
+QEIaiGqH!)N-DQBaS[&&Q3445aKRUUZ[`KG+)0@kIN!!M)0Ze%BK8h,CfeeAkTi+
+Nd(8SYeKcKTd-,#VYlN"hF(kBkpK2NfN1q34qX#0N+08E1d,,UXffel3L)"6@$*J
+HkEVGEe3`6-X80f#2'!fRdr6$Hi0qD(ZUX,K6XAJ+k*B)K%Skd&3XDb-JLKY'J,$
+C@([bLa"BSh)bp)KcS`YZhIaaFqi&TkNFDi[m*&KmJ)Kd&LKZ,6RL1!2kmH#I3iK
++(q1fQUri6Jf"*6hGQk4N-*dq&`kEXq6SkB#6rmjE3qGPAp2d[X-l+U-#'JpYVUV
+MFTV34,EL,$3cFiF4KDMHDCB#FUMTYZb3!(La2b5'S(lX`USMA1*m`4Em[Y%kmaq
+KrI9MC6G+P"Xh'1dp8('Y)*PfI5%hC+L10i*E!TQda%M"HF%i0j)dT90$X1LPX0m
+-E009JF[P6QJ$5kSl,a-'GNN%FDBL0Z0N`12CRPB(N5md6+6`JT[@4jNZ2K$H-f'
+Z1Z@r$UMYUKk-GB"mhPZl05!U!K&!H[RaS[TRP6MjdLmk`kPSSMYYKjEd!mF*U+T
+6ifh5lEE&&*KpaZl5m(V5'RA(i)D[@"-+J!6QN3DbB6-J1--XIJ4UP)@!88AjED+
+"2f!0DBTP[J),L+!%SpT)HCbR[K$DYAQ"K!c1T[a5q-D2KQQr64KZ"IKel5"aX&&
+JicHI6G!BpY&!AdD5i6ef4Sq&pFEpANKP@ZE0(B'IA@l08[*$*rj`C&#m1h%6@CD
+jBAcrh11BbXIcHcVkZMdqhNFV(63JpX58jC&Eq!-IH%8dA@j`Gm@%#%2haU+m`6'
+!-Y06P%kA+*G#jf63LNX)hFGCXNQ6FM3Z&!i+S6rI%")(T#fbm'*6LmG6Lj,MQK3
++e%N+Y#8!-efJ[R"(058i'al39JKphY"k`@CN@MMJB1bHlF6G"1#%*IJ$KaZT%M)
+GZYZTUX&'S)X-hLH()"TN3ppq4E*B*#r'l#d6F[H@riA9GQ-VTJ80SVbNjD&U!k*
+fJ"bRUF25`YX!301A'b3VlrV8+ET3c(G&KX1bfb`S8U"'TGK&!CU)!%FY(meA+CB
+M'DfE+a0(-eLp#*!!D0e6YY"+P1P0e4EZ+bf`ZY&9*36V#U#@QN8HaBj446T3i+m
+Kl,)6GF33!1h0APbbSZMC2$lXXJh[-KE9ieCpIkK!!4@)(T3m&9M#Xm#,I%qQCi9
+5&#MMQ@@f0B55K@1(h3Ej85'alm*$B`d4MNG8ACC%F4#05NUH(')N+Xd2fbaU&61
+`2&BKcS1$E!+a$K4+qmVN,keH8'REZ#q#'m"1,Qq)3r9B(GK&5'i(*L[YSUbJ[!Y
+S'5ZU%hT3F(#(`QT["SlT5`ci5r,`2[-Ihr*!6,80ZLPfN!"dfN#S6Ja-991ET!p
+jYEKPaLf#B"%988`LXF8p,+TmhV04Ui8Q3M@J`'QeNB#9SC5&&'q-!NDUQS"J@+)
+cDBNL3EC!q5L18M(XUV)MKXbbX)K%Vr56N@kG0e9da1S(ZN5VVMheDmGC,9f1`S!
+''"[*'(4%r")JN!#TX2eY&0V''!Ii4*d@0[,qJc1YQc(F81%lT31X!$c,I%dL5,J
+4)q8#8[i)I-46Je[4C#c,%PR0YZ'FFB%qb9pSRQJe$XL`df0`TCNl`T2NhSDFK'6
+#`aEBe,8MhDB&YlEE9F+`J8R@#5hmcjSS5a`Q'2!'L)[N`hK$+c@(`[P9eml`J#S
+N&arp4LTPJMZbhAf#03(fV!D!(%cK8DLDc!,i9)*DGi"0M$,J`Hp(pF0`SGPqJAc
+K$GY'5!&FK,a0qQ5M3!FlF)B,YH@9aLCTbrV)5Hc$*H$Z5(&-K93A&6PMf#64MJl
+j%rQ)+$S!Im!p!LFa9J-Yeqi3p)@3!"NH),TQ8ZDLZq8%!K#f'UBe'm`,M'XVU`#
+dbUCqSYP2Cl1[l5$3rKdL`eJaje(2dGJ*q8`@Pjp1Y@ARmd%@XCKS`U989biTXRY
+!`eSk#"kmI0&*eBN,`RKZBhNc3j)V-0qh%9$Hb9hE$f@c`q[-QY`'d"i+q($imrK
+rU$pmeBYJ#h3e5e%jX1S4%am(H+lNU0#l1(N!H)dq3iddD%+"%pXNS%TpmLG20-B
+%K+l%3NJc50"BLmU`!H4)U"0'*3[+k#`)B`0jkr3+R+FpG+lSSP#Q3-BY*d3*V@%
+6*$%99('3!#@3!)qqb[hQIdYB`8h31Hd*3C9Y+Ra'jlj&N@8Ad0J""G&"+T*i0Bp
+8X%dGG@fiDBSc2R1ccmK+cN%+&ADDM5(Cpr[VPP&R4l2AFE3eYYI0q"2)0*T%UKG
+)G3EZ"!`VJb#KJD,B+l8hC8'q*#ZB`!*RF%S9j["AXZqSUq8mSJ''1Z(ULqD`RLV
+9*+33"B#AH`kCpAdEkQCjc$4m4@NVUlBi&,D2`Z'4V"JVIILLEU"QQJ#2U[CHkH(
+CQPI1bS*I8Ed4TCDK+cKL$$J"Qj8%"#b-UR'k3@3RFb1hih,S+-F!,@U%-r`-T"1
+EK)),lic+,kTQcF#Li#q,M)L`"@CN`8S5M`em'&NK6K($T`4,&MSU8DX`h6L)'XJ
+eJiQb&&2-G&)A-LMNdq5B)B%JDC!!MAkQlhR+T#1H0,i!9Ya02eUjX@-'c)+ZaUK
+"2jSXKH)Uf(V4JkpKb!fSaRNid5pKlB(TjdcdH4Ga*$l-LDjHpZjpa(FdA)hVMC3
+Lhmd(4lpS%#@F-aBe--BB'9"f4'3,MKQ)Y&d)PA`X%JF"!Lai#A6E4r+C+DcL3'6
+1bB&-ZUdfZF"89"k3!1k+ee$C!0)8Y(TZMh0`d@ATBK"UEALC'A26%Q(eRP'TMQA
+cHYfpY`6r9hM$XNjXP$cF`Y"VP,blk+`r-FYd9lJRSBmEEpVBaCH$!c%%KLqrI(+
+@LTVF[V*5$RiFT&CdiT!!lAc)QK,Ea%f1SVd%(B,rYL2!Q)R@cD2EjU+H%6iGk,"
+fF%iUd*1K%83+9QFD5iD0F1m2F6`'aDKZMJe5BkE@`Dk54H*Y(BA%jprFfcdPcpJ
+[c6"ND1DXUQ`fYb(!mQ4QF")@D4ZSE$@Gb3h[-G!eJE'!HXE9k4N$"KB1kp$c%FM
+CM2BL&P()1lX,HX`SQeMA1"KJp8R!!U13!*lm#-I2L"m!&QJZB&ee*3JIH%`G("9
+GNEVN2Q!Dc5PBT98)$ZK,Ip66i-KM*00T5!%fl9"mV0+6J(p2%dri@*iLBj3ddee
+,dlDDLRL+el`Z$4JLE4Ld%j-eSZ0Vh*!!TAX,AE#bhMTU!p!3dNF`mLTATHLl&cD
+hYd@BYBmKF'PTdTS'LYT3&'pTrIr5@rM,TA,qI&+Ka`Y)$m@JBqV)6QlP*ar!IC)
+c'@!#RRi[G6XB"@M&XJ[Kk$#!F`8bTjdb(TiIJA$q-,hlj6XTZp8GE&P-SLTAlDK
+UH6BQY1T1,aDXJT1!#eJb$HbI2$eLMCm8PCDL`Df$6Tm082N8`h*U&Zj84!)2U8X
+H[D'M,*S1c0[FBe6Kk9!KFHY2N6#LhBj6%FDr``YNMbMJDEJi%N4E-!XE!F38B`I
+"DJa[b94VJ#@m*!0f`M"'[d9Cil,[H!Z,9DDLiS9J'UfXDc9SI06DlliC#'mjE$R
+%2SfjaNdK!TH"$hT8HG+*0Tl6qX3)mHpT3T[KJh)dFMCY*,TSG+c*STQY-QC[A$'
+cJB1`A#G`*P&4D"CdQ&'"D)D%KeCa8m$!V+J6*p9""3cfKKH4(NZqe,')0aTRHHE
+9AQ2paL&ABmG)P&ja0YYCBZp83Pp*Q2DTE'*Gl4[0-5FFS$0#4*hT(k'Y4%adQ6V
+[+j!!F2MG'V+FK&`+Qmm""DpB'k-k)X%fj8H!"5LFXU'(1"[l&DfVq$&)Jp)afA[
+@16C('Xh51#-Ge39kJV!(e0Zm[(-dG@e$V9P'F(NH9GmM,laHkPC,iJm4bUaNZ'i
+JQBF*IK@$12m1rUqkkcUZ"-rGM&rAZSEcS*QhSPK5CE#Je(K-BG@'!0"rLBN5$j4
+Hi&TYq&)h--BXibEYVL5XB*c'&4J,+2JBIb'LBcAfK%dLaaRd8BLBFaXR@@9YSN,
+c+HTHi3TTG4Hj$$PM4E[HAF,Mb#LU@+2,'C@RrS$`XQ2pT+8`-PB6r4a"GXkJ%j1
+(la$1EFMQ'CR-ShL"''`l4D6+QEj6HVmpp`3G*+2PpqM0)&jfHdLl$L"33[T"!+C
+5G%m@LTfUh!LlHGl4h5,qpK6I[m4mFqFID8'E+C5$rT(3fZ3BH`Z$&0H-aQLmr9V
+!$4qH`"IB#dpdI61J6e@phT&6%h4#cSM-DBd2Tphh!j,m$4pG5q9SSf5eN!$"QGJ
+8,(G@`6@J%ViDB&PT1f"BFI'jl2KX,RfGMrY!YqQ(p2&pAq2cr0K3RBd31[ACA1)
+041RKde*TQdDV4C%@8-#VqRL4'KmkBYX!R)$fZA[X`3@&TD-&iZ&m-%JGIKJNaNe
+pba1Xp9Lbq)qqBj,C`Z*0Gcdk*+f8"D#FNX6FK'8H(jaUFL0P`6[*bDDTS5k8ac*
+S)!lTQXrRqFjl)a38AXb9+B[XUdDejM@TLSaC#A@J@)&hfNlH'mPE`,A*kGp0&"h
+U)-lIdEYG6fC#[IZ0K0E0P"S4djHDX80"HV(b4Q"S'p`9PfAA'jVRZ,iZ!`Z09Ff
+AQ([*"cLX3Z!CT6+Gm0%)*jA"V+M'3[DjLdc+6Z,U%%Ue1IC`%JIB5)X%M#Eiaa&
+Dm1`&,$e(DipTNHAL)+p,KSp(PV1A'$CPG8aL4Dk%L+K[0BMRICf@KY,Q+Jrl5$l
+6Rjm,Jf[af#YfmR)!jpLAbKNK&IlIYJ"RRN35XMAcKT2+&[*PQe*rVZ0'B36#*0H
+3!2dk4RG&X`8H#rZ%,6$`1j[aLB%kTi@F20j[1edTYIp)0e4ep**jjrm-%lMqT#V
+HlkX)Uf*8MNpb3d8J5`pe$B,!RphBd$P+Ce'Blr%E#ZHae0M)$jr"D!bl&$cmKX%
+qmGH0PkHk3b*laZiY$(db'NG@Ji(cPVPr"qFUrj5BH21U"b,rqh3["C[i,TTYllm
+YTrY9,MD1p'NqAK"b#0q'pUNN",e@r#UMi9)h`l5SQ2,M*$V$*J2-C,I%UeI+j6p
+BQFe5ZrX`[#Ndr[#&-(3,6d%#kQjr+!9&Bb'"N!$HE)TcfhI18I!pTMrm(9QG$"c
+"J$9p#BJiEUJ[VT6%F6p3dEcpApaUBL2Lr%D),QXd(UKf$NTMh+k2mledIbqEc2Y
+dIjRkG(362YdEjRq1%U-(a`Jar1F0MkNlIlRME`f#%leVDBhdj1TTem$ZdLYVI-1
+RLl*i,0#f"1UD+GR01m`JYXJ4)ZB,5%2$6)`UShB$IiYh$YSCJ[aHX-[V3K-R%hE
+Cqf2DC5KFkDY22JTf99LP!&l15Yc15YX,"I`10XperVUl#M1E84G*SkM-D(YN21-
+Yi9Vf[2m9)$JQJZe1@QIZE'AbeZT#K'90[`f3!%5(0",YJ8lJ1LB@`4A%D)9B*cr
+C)J1$Y*hM9qR!dNp3BJYkTDr,rXE3$MHc3i+rEC9hmPYZaf+`'kGYA$X'T4'k[FI
+*$hZKRk"Dd`YV[e5UeqRm1EKkG$XHPG$rSXkhSX!Pl0d0%r61l&$JqpG6`iEKQ!0
+ZZfcG!#&`A-M$IBbD'1YZ1CXD*d[2JbCdjHIcF%rp0mMVMXTZPh3klTE4cQ@pcr4
+rlZR4d*pKapi*)*RAmrjmr"2iZrIG)HkG!B*BXrG``$!XrdZNrL50GpU-68SQpk2
+bqBGLEkq#(dI3i9((F*&A`TN#K(38[kq24bpAmqR3i-Z3!&e(i2Y*@&UT-qq*m2k
+#9`D!LHR3,qci0d#r4l18IDQ(p[rIl$99%miDpMXFIL09khZIBj8-0$TfeHABrC8
+FIVr%QHpNm%%,J`pJQjkUir"qKSf'"qrZR$Z&m9dCG*'RfapX-%UraUV(jq'Cle"
+V%V(5346FIBmB&QR$rriYIZLb1EJq$(Z(3$$ZYZq#,V%frGa1Q#)kjQKJ*SK4!bD
+VQ9LD1JCR$AMjN!$#qF,,3,eG)r@Mk3Z1(34&#*8BlTTppPX1dlNl-QjlVE*mm2L
+j`F$ZYL1*eM[M+pDcI'9qRbXpNEV2j'Z&FrUPCc&b@&@rZbDpJh'GF4T4A#QBcd-
+ZD,KfhKMhV9rD&iFm*@H3!!V0$S'R*81q*FHUbScr"2*"(X'#fJKiBhQ2S6),`@(
+Xm'[FkpCUHrFB'Kp9@M!&1UH9KRqZMTiDjlSL9!&rSU$Q&J2H%a(j#4`(N!!QIfM
+QKk2eL-0(em2fCQGm#VE150'H(9IRdBdU'2(`IApAfCqLkq1j3MkKL`SNGJ@ZLrr
+m)2EC`5QUI(2X[aTRdh&KIU&&[LKiI$Ri-rLmIeJ#m2$`!CTrph@%`*fc2f!1'f5
+HSYI$B2k'([%VUYAC(&#[#K0Rl6KX#R--3LYk9Jl@[kFLSe+Qd8!cc5$'*MAXe4c
+RDMRrZ5('iq!0aqcfF[jFSmNR,SKeFZMSp[9b!&*T[%4Ib!MCUBLT,H1`b&!0@j!
+!liCd9'FLkeK6J%GlIl[UjFk(R@VU2%),Fb0F#F6k"@HJ4$$H4RQ),-QJfi2N2B[
+EFbbfJ)-`8'cS(&8hD"V*ebf9@-eJNiR&r[P2EFc+[K[0R@!5pjjHJBrB-)Tl"*8
+kQpA0i'XK$`%ebDaLHL&P`ml,$C`P52ETdSi#$&%md8XiZ1QQaNhkiKfN&k,8m3L
+p",bC3G9bXHDUk@)ibNk'aGZdMY0$Ta(!pPD+il(6CZ6f+&HC'G30E%r4p,4YpT-
+-,NDUVAqVa$P5IYU0%K9qG!l(@&SRI'l%r@!&10BCh3fM#E8F-`,&[mZ1H@dkLML
+'RD2-`)e83-jH@I3eVM8*#*`LC#,ZVeC"jTZmjZ)q8l!RRj08GR!!c[0#33[XbA%
+cR1TTRIUU(YEBUd(B6rV!AiqjCJ&BA6ED8@#2VTRTNdINQNPhK96%A0CQ!5kRlX(
+Qp-Ib%JZ@89K0GNPIefb*`pB`$Sr@mAjNra-Ac$bTN``-!d0Vd01jbV`hLMiIVMP
+r,V2U@$[brYVNm!#H6I+MMTjLp#28)SZKNZ[ZSHLlUdF[T(q$6FGGTTV#E06EL'k
+Ck$cJ&@jI%'eI#UMp45c1GfQ+B1IM+e,J*L6hSlm'HZBmKZ+EEL!ak[C%RK#i4+"
+m8,XJFK[#LLjlfBC2C,Z''+1cXYYq"0##Nl!8N3kJ`SpGSl,Dk!E2F+R,)mq'd`e
+r5QMlm4LEbYH9qZ!Tc(c#,p)N1$aJRHM(D0F3Qm2aq&"e0k&@*B!E221Bp+J,*6N
+S,!U*"pP2Ah'X'XX$lHN+aU(S8hUUNmJ)"X!k*XV#e`5,DeN)!'M*KerE"SY%U+Q
+%*X`Kq8Ehj4FK,QaIMX0eYHm`6HMIS$DFXHe0EpjiEjPBdM5!3I8cY"DpRkRMh,%
+6JUSU!PI(%k,5'!J`r#%I%TkDX[Q(L&$VipJcRI[8c`I-21$MhjS(LB$HHqL@aIb
+#(ZhcUc6JA%p&fJ!,2"e"TjK)+-H#@RD8p!U!FNEjFh-I16Xh$0ceB#ClT`e3qdH
+fGR-hS&01@ZqEQXShq)rSaDR*eq,8-KHK&8!LVi$6j&hRBQh14%J32-q([kiGB55
+(`f@MdR8SiqiE8TJ)A&Ki*-8mY9CMIELXdR'&,3hRX8GbF(9'H3mc#GXP8%,B6M[
+HbYK2c$JXr'kEDdc6f,C6Ea2bKk0pLABP`SG[6k#PrdEm18h-8*CRT%FqAEU5d)H
+8,K,!a&0G,$f2q'p68I(b$MC$k45ZF4DRYH2bLq,$dLE*A28VK1U`D6`h+XQ9[B0
+1qL4%RfS%T613!-IbEC!!M3F&CHdDj2qTCj4B+Z5fhe'[bb-DN!#I*b6K&ipl8KG
+G3hl42iREI!ZKi&4LB*R2M+N$*mAjq0p'&rJ"PHRUk24krIbmjZ3p'M4cHJA06qJ
+80GS6GB2MT"""JaST$#bIK5Ce2E+`cQ-,E8a5+k'+"Va`(,((Y+,PFh"l1a,3cTN
+cY(#-T"D#HJ2PcFP+2+XAcN4dN5XR"-j,Q9$j"2E`cpPB4[H2Q"L20TALZ3)+J3p
+19`QCJL"!Sphf%aSQVSB['@iFm3*"b)6HJk*QM#99RC+lYK[#dA)kHHD("ir(p3S
+MMNLqRr2q[)-&2(dp2,l26cIN*QfKcYqLb"CfUL&9Z8'mh@&6-BVmR@,@!h!Jl31
+k#[[i2M@6+G5l"$lbRS&Ki5-Z$IKdh$mj"*'ic@@b@,3JYG2)N5[bARZ-$3GB9i8
+d)-JFq[F$*c!6KEi#3kaKkjUDmDLZ(FPq-5(!-C0GS!lC$Q(-2CZII@BhHidDKX2
+`Ud`#XqirU)MZf`G`NZ@0$XGhQ`kT&+mKLCmKe,K4kLTKKYVGB,a2Z3+kjVV$UD(
+D9D,!S$iGmDa35d$HKiIZG&'IeQ&T(q4@GFTI&q1E&%'JKr8JTrMbZ$@&J2fHB(l
+LEPp"Q!8qH[5%)MDRk"-B$'m04$N1a,(*4!Ia8[J)G$`6r&3b#iA*4DIGqAp2dp3
+Bp'NGm@J(M"cEVq+(1FpS2XRK`VhCRl-D2Gr@%*5Q(DJ+-8C#f6r%BH9SQB@K"P*
+G9+*k4!4U-!c#08I!fDI9pJ9E)I-Kf4KBXYKJ1,aGY2!Z8UIH3hVaCdQ!pee#`J4
+%+K"6X)hM+DekbEbj@Ik'hjrlrhD2kMZE&3KG`2lHM$!E4YKA*apI(kqMl8KA,UL
+15)DqCTTr'**&l*N1k1iMiX83dl41J&Y)',5'Q(2IaBq[FmR0`ricGY%Dp+(P5!-
+A8YK52`HGriEF,m'h#rq'hKIJfm,"X0F0B52PpKmXQ'S+f++be%21M'[KU63jKTa
+ZXU(Xh)HEG"BdBk9JrB-6N!"(6&6$j$-0#3A*PL%p9C9J0h32'X*)+pU`5&$RL6K
+FL`IQUa19iq(IKaMZl$(32mEa(A8U`h#5EQ)1#X3GJ'NfMLmC4)l5S36#a#@CVYj
+$KBrV,j`bLk+MV`kjDdq&3Ke*")Fpq5'Sl33k@5!)*&Da)iqh)#['0biEp@Bh!)-
+5Gq-3G`5p'H*aqdH-lM&#18"farb&eJ3rkci!LM`Gf-'JeLqp%)1eT`G#m-CcQX%
+lC)0k#Il`p%#jFHDFHE32ea#R"(8Y$(HrBIMkD1NVVI('KH@*EJ)M5LBl3bLCm[Z
+($eSD*Iq2jri69ZqAhFk,A!mk3[Mq2+RSFDB'2P40-!!!!)"&GhGTCT!!G`#!!)!
+!F!KJ!%!!K`!)F'L*L3"`J!!!!!#)B)C`!!!(F(N!B)Q!J!!!"@C9Ci3!9e9`9PD
+!H3!!!*G`!!!!!!#!#)!!!!#3!!!!!!!!N!!!J!!!!)#!!!!!!!!!!!!!!!!!!(N
+!N!!)!!#)!!!!!!N!#3!!J!#!#)!*N!!'#3!")`93"3!'B!-5491%*N%pi&36VTa
+4SXckZHQZkHk9PH+-pG%EDDTlUD)k*EQ1cTTSmPYhJZTkEGJCjFRRbrTNm[j`kZ[
+Ep$iH"He0cHlZIjQK$pFX)E($99Zlql[ajDEHH@R58-CDBmeXpE6pPXG@QPV1Zb[
+[p&YQL9dD*DEVCCY5j#0QL24Td5j[b1!L43Np8U*9mdE[62F"53VXZPRTMQTMRUT
+RYUrD222)mM+ZQM%GRHfq@S'JVc3Kh[X"2rr$X[FGPFqHb%,iBf)E2arQ'$HqN!$
+"KrZ(QpIB+[CVrkEi6Ie$``[cEdhMKLQ[cFNhh`(TGT02$#'Ek!h"`3`1a[9ephD
+KHD6lB%iBEf[k`KVeQcqD#2pr$FiF1jmJ9K"QeDBd'F("aFCrf(LbFA)K'2*PmQ-
+%FQ3e))p%2h8P$m9Y%,kZZrXrka1KFki-pV`cq%-!!!!!3J!!L*QTUVQ`Q`!!!,!
+!!-")GkI)L)YhHAGjHBQCH+DTCiGRL(HUGhGjGQHTLDPCQk9Q9'CPU'C9D999CiD
+@am!*N!!J!!)c0%4@CPChH(L)UDQkZU#j!!X!!![!!!`!!!!!!!P!-d999@CQCfC
+fGiH(GhGhGhGiH)KiKjQ)L)L)Q)LCL)Q)LBQCQ)QCLCQAQ)UCQT!!Q*LTL*QCLCQ
+UQCQBQCUVZ*L%0VDq@'eqhlh2P3&J#`KkkIK'EMUXhE)r#(2eB1AYp[(Jjq[UKHl
+SHhYiqcQjlr6b`p(6amJ$[AIj[3`H1#C#!"T!IMlX(,hG[&$SPYUM4C!![ca`aSc
+bd8)+2frIaCX9GfbR46ZjjE-ZlEZD+lCYh(8f52mF[EI##hq+((TURc3hrXqcIKZ
+3!123S'qPBTme8FqM0,LM!+%ijXmp"U*QM#r(4B"ApIfEF11QdJApQpjeMIZXRc6
+eaUKQM$49jBk+UF8Dkife3qF"kZ-1qHc,#c+3!(h!HiPUSUX[4Pc!Jdii65f4K[q
+Q(pVFfSM2p1kfSfrep26amrEbm6E,C[,((242B%YVKRPa98lQ+R1&f!)-AGqPXm0
+%DXmE,#BK0jCk,2,(*8$e0,4A#fL%e1+h13G`4p`1DKb#,C24jB`re+!cm,!e#Xc
+8`48iIpaXVKNUPdCCrdY)2q@1+UF"64,9$(2LbcNCi`ST#!`l1IN`EE3qYKbpPrf
+EF,#Bl'L%Z,&68%8X)jBXXZ))f'29f5f!3Y)ajED)``drR1&kNQ8ZSKTQ"r`dd8%
+Jdi8GA264AZY$Hr64$(64LX!BSLDV`PfL0%`"!03E'&%jmm@$,TPa"GP0H@'`aYf
+a!f)%l'@U)(8ZQ@J2H19l,9c@JXDCiE#IF3eaB[,'B,EPYq$3kBQaXQH@1UH8!Ul
++3r-5X&#4M)5BK!+Sd4#m4!(SP$qP6P(A5Lif3YA#2Sc@fIR5iC1Ep4&%RkpZ!9)
+5MTLAk(Y#D#3+B,p&09Q%%`2Z%ia3[a"Q-DJ+#5ibD`BN#3"iF[*cFI9JjqMS%h+
+(ihq2Tl1MPr*BQmFNp'J+-G3lX1[MN[aXA!f!md'3!!E49)MCDLCa(iD-e)Ha+!k
+Z'aLPXPc8j!aEB*IcKDVNKbeqm31`Y$#ND2LVKASML$S58J8M!-%d-1TmN!#N[jD
+Hqp2@FVa2iNSCNE2MfT1DHD,b)(5KED#N4*lc(58a'LA0$5(fJp-j%pGZJ6f-k6M
+Uja23M$D*SkKBJkC#eiq2MN@a,Addd5p%pFX+m3%Fd2Up1piIjrbj,c"&2A#L82c
+LGP+'A%XD$'&2`XGb3K+Q8Z,*VAP)N!#b''i(0iI,$-1U2b[,hPlVj1lTjHV!G2!
+8'M`Y0cFh)DDCkQRY42J+'c#3!%)k+mCK&`,Zi33jicjX``i)`%QJ`Rj5Qd3QY8l
+UX+hC03ff0NrJ5B295[EKb5T0#p[GJM4KM9NF$6UThBF-20H$j*8h[2Y`#YmJGe`
+ICZI4pEP8adIHcV[i1IUpSUP5d8dDXp0SPLXd19!Q%"@1Yd9[UXVJ#JLEq93r2,@
+84'+R4U#V#Thm+kGkbCZfd6lPBSE@C!f(G%86`E5%SRQE[(bE[GrGl$YrQ[pfl'D
+e3Fk+3kD*S"MYcCJV(&l`V3TeS#JQ3fCDSX-qabB12Uf"2#U+%%RfEDjk-N20hj6
+Id+A[&C'EcQ899G'-JqlZkm(,#rcJ#mr9HjIFMZ3SRj3ab5D116Skq1pbhYFP8Fd
+[`m!&FdE*,"D)3*!!#-q2i*&(d8bc4Q8-JBj-iXN"1YB'l30J-3cp[hq2bH6b)rX
+*pF"(LZ!*,$YF*Fe8CCY3Pc%D)Lb!`-MX2iU((2a#"Bj`"5#T*U3KHd2!E&DQSP+
+!cmNYR'#6PM)'@iUCSrkNZN)Q!fj[llJCFPfcNTc8d0M)6"h)L[acciRS6HTX6IG
+RPUplBLqeX4FVd)[)f)Vhk1dmf&Y[l"K$fGB$P9h@i5Qj[m!Aki9"kJ%R!2qeX(q
+4X(l!"j1lF&d($DfLCR69+,dqT+$!G($Xc5LkAA!6TmK3%PK"CXa3U&B`8f([!HZ
+jTM""0D*1b"Qc[VIUJCLKe4lcSSB1[Vk,i&0%HqI'(mqIU*Yi"afLj2GIbcil,VJ
+*IJS*)*V+IIA*fM#T)%NmB8fpCF0kikqC4-15[pmcNTmeMSk!1Z`m!qk(q$!k'23
+f$r@f$qdJHk(rZ[jK9fE8UJ5H$4PMI+SNFLeBb&if%e)`Q*fqHI0Aa3hp&Pb'q!B
+TDD$[f6j(r`lG(Rf8eBScATmi9fiC6N[6e#A@QV8328UB`eHUR%kGi#f6U&DYi#[
+VQ$@&"9S,G(4lM#KTJ,G``SJP'1Nh%pIkYL[m&#Y51'pce8fFp#M3B4D8)mKAQM2
+NbVGUBBkkTa#U6D@"2X[S&6I@+[9dmYqraqhP[`meCBQT86$RU3SL+kNaT9bfe8k
+)qGQGfN3@HZlNeb6M%'QR!hNlaQ34hr6i(9S1,Lp2,Nk3!#Ba@XEV#SLp)9QJ[hp
+IEHh1cYkq3)D+b8"U*p[@*J+p4$DK)*JHpXlphCi,X1+(2A$I&[%BrK4il1qG@p`
+%H#(fLG-DAmG&IH+bS%,Q-KFDaSN!4VN!l&1ZA'+i3#)$6J)T4,TSb+&l%,eY"EU
+jlZcXlqc[l1c`E1cp%R,eAJ%LTHH),N&262GUpmDJ(L0q1A0A'5*!8!kbUf)T,H"
+dkr'k3SLY`AEZc[U)#L`D)Qd3`YV!)-%Sc`QbbAqcSjm$&jKHN!#rS'@+lA2+f%4
+6&4dNR106kG*`0f'h#6!-qdXLY!MhM&6+aEB-,f'LH)e3h-*MSHY"Gd4&U#4+'fJ
+'&-$dd0J`BTR@B8`$0Ql,l'JAGDQ&18)eJ2H$D"J*m(Ki1MdXPF!C'V'QNj-S90G
+,Um6M5#E8k"bl@iU+8@Dki#R&EQX0r`b,'Cb)ka@L&jarK46C[EFJjCDl,4V44-a
+!m)aBZQ%)YPS5!5Z5#"Fb!HkX4J&KX&dl)J!lP-$#MT,r!i"(*L#D5CjjQ!lJ+kD
+`r2T)ri[#,D`jS0YBe8C@G9*BC*BrD6b6Qk#[h$"fmr5"'-*D1!D(TVe8aPJ2+H-
+64P0MPdD)bM*4*YC#9E$L%I4cp21V1*'Rc@1bL0G@'F$HFZSI@,q3!($M82X!j0A
+V)F@%TFmCY&#'*(3f))55M(ace&'T8&T(T51BfK2X)4$B9'3)'H%ApiXP+62U2$i
+9FIBD@jM6!Zm6(@$AX0(JD!1Q+!$2Jcaf@M8*V2$C91)hBA9JS"Y6j#8+'Lfd'M`
+J''4bL*(!X**&DU+K6TJ)Di$(5'D[5&CT2f'UbADUVd$X6+BD@kDGU395+5R9BlD
+l5BBN`e#LaUcfe)hX3KC`Y,G+SVAbeE+p3Rrr!Y'%JRpmY3QZcice*DR!cadfd6,
+%biQQ(&*eAa0[-+#K-C!!a%jN5eb`31r`4L`+(lI[mUjVEd,($(A-HU$Bfm2-Im&
+Q2rTGDmJ@6DR%6-0BaL5QHrH'(Ab93NhArSmp`NI3%I%)m&pG,Tim(-Z16c$H6dc
+P#j,Q&YB"p,VkH#!4UC*bka4,pU!1&Dhe$CG+TlS'L#J[me!M*UR'2fei9KYHj$`
+B9`krlJC$YQ9R8R'AYU$a*DM,%4kaX1&L5*UqD+3hN!$k[[#!9ar3*(BMeJc#SEr
+"jiGemAC%5$H21GA*,SXZPP5SjU%Q50KK+'pZT&!B19-")5N3pkj[D,%c1h8Ekak
+E@%&4cI$JRj+D#b6P)+)J0LD1+I1&JUR'$DBf0T`P)36E,4*HFe2D0@Bi(48Q(8X
+5"3Jk-C3h%q*$l`A0RI9!DTq3!0'89!Mpb#Lk@'TQT+f,MDBH&V$9lBGVMc!,r`G
++`e1p+P"TSmR#cm6bScEiG[dqSYjipN!Dfe@3!$c5+)'PK960EL$d++b6,dFK8P6
+%D#TPVY4Q*Z%+SAX3X#[TZE2!S5NS)@kM&DkckLcF0Bbe4U(54b0+GjbEb)Ac(6Y
+5cY5$5Me$9cRJ[J*jFr`!*'MXS%h2VhrXi0&QePPcBmmT"1)bl%bH$Hr4dE#rF@1
+6H(5"`hDN$Y)kRka5X2''e2ikQ"hkef'JXXqSH6*0Rk!VplF)Uk#&k&*+h*U9@)G
+aFpkFC-AcJLU&rHG(MCi0X"2&,4$$%#E[FHT5(Af[%S6(F1NAeM-AQMqPTCpSp19
+Y8Z,9ZM`083'r%*cF5iR[frIrP5`e)R[lfmdp+3F5+,k&VT3)U&5Q3f+Hhi2!U2T
+$FS!5QRDaL(Qp3J6@qJaL4K[ChlL`baN*kS)4)e)2DrMIfJ5%1`i9!S84PDhrUED
+dcT`)Ae*a[A'YHp8dTdY3B6Iela0H)%HMkGrJh[4[le`,!h[4`IQ2K`k'DLQ3!1#
+&359!qYmj#QX614fYS+9aK#`,1IkRGX!DP`PljrSi!GIR!M5P(ia3Z4H0rNlHlUj
+1BY4IepIZ#XZ2U[3[mh2l#hr)FR@2XaeB%e,$pSZ@8mFfBBk"llP%-ND)e5jN%DV
+GP)Y"6(X2KSC@j5jD,"Jf!ATJ+PCH&!YbT-%(C6AC@2N#51RD*533B!*!&aZdj3#
+fR4'%Sc"6TjT#GD%32Q*PqBB5mL$'L%FH-EAm2eLAM*+KkiL5#iM8-Bi8k"KGekj
++if0S*)3&+#!T+)5GmcJ1&8e-,CE(X,6D(X,0Pp-aj&6&hFSc$V1195QJ#m@Je4(
+['Pm`j4Y3UX6"5&PP1F-caMLQT(+3!&k%'$-@F++maMDHMhKUSD36l5ZraYVlpkK
+SGQKTX4@XY)YLTl#b%)aRNj2Cm8pK16,qA`9"8T8TXZ19IZ%H["3f&R(JX0U,&N(
+KX`NdNX,A)-Q'MFD5SUj4VF30,,M'i+'#JZNVImN&DL)TRKBRR*hG[(J'&GdpGlZ
+k19@+QZTFALT#-PJpAYeC2B9mCcYqIH0J+q0$2&PGGj["Ud22HE-+eMh6"ZEBD,T
+DaQkar4bE&5pam`1i&!p!AXTc$QAl"aKRj&&,mZp*q[-HKm[I4VG!l`"'!NP%VV1
+UN!$k,Hfrl+efI6lS824k24!"Nl*,M`C&d%hame"FaVACe`j+UEG$Vc0'eNZX,*)
+B5pGh&l`rjAP-0%bk6*QT`bK2mGGa9ZH'd2A2$%*fqr[ERfEj6kMkf`62,6992K6
+q`#fG+"b'BEFN2X)8&dN2B192%CHq4A-)l@1e8PH6qiUJM4r04V@`MddNS!Q4maX
+YZkeUhGq5+ip045NkK)pY8YHJ!8qCFYQ!6L3dAN&HF%0Qc!E2A304T9KI2T-,BZ5
+&5P90$m5E,a-`88&Z8+MH[a3eAd`&de&9*'!GB9bQQSRlM5SS(M#9Y@Z4PViRYlQ
+lbCSbd@k0RIrU@j!!#ai`0G)$*Ne[@U@-KlbP#"VHfZh`%l"9#1[3S)U4a+(CD)K
+T`i$6$@i#TjUTV2jIFll)VM,BQA&#V,G8pZ81,YcF16M`FI4eqe"3iE'S'Qf-LN6
+AhqL#kEHFcXlJM(Z59d'p)rTGD@NaB(L9UbZ&@UkVAL4E4Hdr@p3DYkSMTh!ABF5
+$DC%[V@C1@HA#mRDKAa&'jPF8Sj2iaHND"MXe*L,NfjSBhA'VJTaq5@BDCUTYaB4
+V`C563ZhipaQYi188ZeT"Z9TU0#Y)dbL`*RBP-D#fP8+[!LeaHp#BSpZ63II0cdM
++@DfpPc&8BaQTT1@p1`fk3KbJ+pX"Qd"mMj6Yd-d%kN@Gm#"%`hXRT[clHrGB)R`
+q&9%H'j@d9*APTlhSN!$(ZA$h!E53!)LKlIr`i2K2R80C65bTN!#[*&IXY'ZB9,(
+)V$,'kP(&M(21S4*`MCCG)elaNhCbTkeN0RS3)qXeC*ePp2iGR2bB$!Y82!Z)SI`
+Zch4RMaj#1@c[rMXm(jE2dE2$k0RkCE0RdqMCqS8r+efDYcFh(T)aq%Y!`im8qJ2
+MjJFLP`9JJ,`T'@SF[EfMZ$Dl!LrKVS'kKiGrSbNKA`p'SM'VhJQd0r5'+aHRAD,
+)DiUb+d-P1(rGhF'P8&4)%dS&I'%r5Zm86NZCGNha(hP"%3-K2b$X`P419LKRlE'
+VXl0-Eq"rL'jXm1(3IiFZE2dJ&,qJ'[Cp2JcjaDpRkP5*UbTCmDpVp!0Y'lF+`L6
+8!TFYqK*5NJdf$SQl%-KZF&SBRGr2M1fc$MkEr&#6bPdj[,a(Eh3DiBiT6[pBh9a
+Z1+N6,FLPN!##ZZ)dV9,C!c5%9Aq!R"Ulaq9`d*jDd8*Y&GMmRN,r#$L$BS4X0I%
+Sd1bRFGHBjm(3Kjmb2(LcJY,3iBCC4Z(9e@fU`Aa,H1)NRC4)HY2*U%TM)S9"XNK
+LqGA#F01'FIL3!0V43``(B&A*b9(d0R3$T5$1#lmIY!Hr,ARRV+kGGm"V,M@HhLK
+Kh[4[+KK+B'20ZbB%)+bdcKTD+("P"c#diKC)`U[b#SqY44pk!pB!jPK$$qLPDlr
+iP*KqAp4f3K-BIC@E&Ma&UZf9j2*j)Al594BFSZiDead*P5a)2+S@Q,N(4XA(X$K
+TRPJ2F&H,Z!5kDCcZ(Kjk)dj)Eql[I!S*P#(Rjpe@4-LNcd!A%m`p[*2-S+Q)kT0
+ZKVpb4P%545`HTS5k+3aM#0,p0J!AV0!9(,3[cYVX@16'Dm#c+RHJEFC5!60&1JF
+Vplb+""rUdqXi*8"XYacT,iD3!-KBC5K52a14!8$KqFab[NY'XqT3FiMiamQ)i[H
+[2B61rCqabqXlBH6ib@MC+XbLE4NbRKQNajeT@*VGMNT)IJ9L#,m5AYq5hh9pG+2
+`!r6KBBaXLFZ$p"1le+-!9`@RZRd8FT!!TJ,G@F,MeUB3NB4LSITd'TF,5FZ[MkE
+ibA8j8j`$#1R3"MRfKDHPbG*`S0Kd5%(KY1&!%6AIXVI*aApkAUi@ijKR-HbJSFS
+Vhc(VcGTEIJGF-rbDS8j&NP9-`"0JS)'T(dD&YrK*FLUebr"SPYDNVZJ#e*b[6I4
+i&k98Rh-6X#fdHqLR[2ej&hARMAS8,&4QVQmI*Y$fZr#`RfF8FGZBRqJrbAj!UM-
+PK8APbreY`XjT5Ic2bV15pKcAp!mDp5fjRKpX[,USL(UEX&58&6`D+Z[1p9KUkF+
+fCBYaI+&F)5Jd+DJTLK34,0,+PP'0%+a`q&"I#)jfkH3mNSQ#[LT)1ESlXkkfS3@
+`dEaklQT`T*0rFYQZDdZXq$c'%a1bP5+"e8rjc5aITpSTJ,0cXVXM8bj06aKS8m,
+l1[ZkVhN%rSfXIa-5VZlS)d($*hBp+jkY*52TY&1XI0GIYZ'pmlAMU&C9J9p*+Z&
+!S+hNKP0`2a3k-`&LX`K3U9DMDh`mAV(LdQ'DZ+SK40j``GR5Q2+*'-lS(R8(Ne-
+,PliiPcNCMCL@rM684L`ac8pjM96e$JYMbcLQ4TMTcdMK&5E1@V'5Q11LBr8k-P9
+IPc(9Mb&R6&015FShh%9dLq5A0LY("+ARS4Bh*PTTVLP6mLbZPjY1Ua5,YFK)j-I
+'HJ82qB[$S#4r!&*4NL!`L8%kmJdB1@,P"10R24lf[+dQqhr161&'LEX+[p%cAii
+68bdiJa`XL)aBEM[PNpP3@dNQi$0I[RdEQl`JFDDVFb[reI+Rm6#3!',,Zeb$lm$
+q@SeCJeFKM)0AQHLB&fj*qU5cI-f@0,4BbQ@*0)a368pmbH@NLk-e8)'!bKhqBa+
+J+BUc@eKp!&XEhiDj$AYGc4,l2q#djE8m4lF)BS6I)l5`a-dXV`8*r(r0'',k4*p
+l2YArIL1&5m$"0cS3+T!!TeUkCE+5,8LCMEj&6,$b&(FBkpeXlaj`ff1)E9FDI#M
+NQSL$k!P4hYL1U@F4iEJieZ&6fKH[AKB,L"V1fmC``[fF#1!j,hk0k@N9P4S[-`4
+&Ic,@G595&m[J`6)K'aKRc&klMihVrI'0QjC(h+Qb+[aG!J[acj!!9%IafGmrUM-
+0"6rdZD*+m,5M[S6kic$mJVp`Vm'lYTpih+TaX#cDCp#AP@B+"I`,hU-B)d&bGDd
+'!-9T33Gq"I2,A)G2`@KTmP!pKPNJpVH+2hh8"%`QRA5i*cqR3(+Jm)LQ"mqZ#J2
+jScj-UXI!XHpbEp6mQrQIdEqCrC[)**S0YFqE[$0f4eIQ85R`(YDApNDL!KGfSAZ
+[ZpI4b`pI(fp[,dFYj@b`9rTj)"pFG9kiVp6k%5Lp*H4qMTRc*rSbKeMR4H6k5-L
+#YmmCFX1EPk1cP(,IamREeUm4JGTejT[A+VNZZb5+P&)SbDhIX0A,%cbp,UBZ1rb
+BACP$1,'lcXPXlqM1Z'ZR"FfH!Im#S+UpbcP*PH&GLZK6d8Z%[IFVRl9&iHk%lAq
+FeBT4hSFkbjpMQ0)@rEG`iFa1Y)hMm%12EFVEc0CVDk'r@)K$9ah55)59HlGRj(E
+XhPUK122Dd'pCC)C,@D3P5iVLN!"!Z@qdZ9dNVNMTH+I(&fqU-lq#3jUe,HG0'P6
+(&C8MlZ*ZEYEl%LrT+pAp%VN1kQbq[Uc)U,#Kj4b5Z1[#emT(&M*`B"H5IbBAVYd
+#rkQf`J(A+Hla5$cXc1T"R"52L)*l%fQ@JG-l!28k1GS3,1"*d$pV14,d2BPpCp!
+6N6qYl%rD8r4b*ZeS61LF-Cd35LMkcR)8Pl@5dY('`NL%YK3cXefQh4V@YYIG1',
+(F2Jp2(,Z(`I+$Ddd!H*00`eP2X0NTJJ+@2Jf)`88%C-Y)#[b)``4HZL[Z$Xd09B
+SL"JB+lBq48m$ij2FPiZjZ+d-dmfm-1J1qcL@@FEKF#UM9`krlUh#[`GM40'FaS[
+9@49SAqZBHmj5#9+8BmPHkHC110ZX)KcF9Yar1ErGJC+jTKeqLIFH#JU[1rGX4ql
+BMpfa(q@a''jkD`N,hr'ec&kSehV'9CaTl$I[PQD#56QjmE4fDV+&8C&C8Tk0Cp$
+dSiUkmTpYeJc8M5CcRE%l2c#'j9B80U$YH[UrXB#C'J`6QPmD`39[I-V2P!dAd`$
+T8ZFrT,1K!SSB@[-Bd[peU'kj-'@++jG,H,l)Y)Zq9HUP#F*k@XJDN@+&6&c1A9b
++&#GLh&IkLSAX)M3R+Z-JM@+fLHcYi$pDQ-"1i8#L`j5N-HbQj'5T89!j8fY@FZI
+eRADr(hq$ISeDBc&PG,pDF#jPkiHB[Q0CAjaQ69&CX'D!V0(&A3[580diGL!rK33
+f(Gm1N3!5#CkMdj*KK!88Mk"RjRc1h-1U`k1`fhrH!-(8jaYUkCbiBB`Pb$ERCjd
+bG83j[6eRfR5M0-HLfBPZ3hZQZYcXP,a4EQ'Vi[([#PArKq!)Bp+l54m$k)dE6%Y
+Ek3djNaD,&HULQM9R#Y$(a(Yd2RbKKC!!dpKJLXUD-R)+6"XYr-%#fGmFA'P3,G,
+Y@)'V([Z-*1l-kaid*r`GLGaN@-fYJG@!aSm-b1@Z`mNmP`JCKGPK"q!mY,@a#U%
+TeAZIBH8SBmBdjYl%JF*cV$-!#Ke"`#X3j+Kb"c(Pc1&F1pYKd6(BFCQHQqQ"$AF
+9qR%kA#l0)YKXXJN$&+Y8''!a"UUhS5lc"!9`B)FA,h4bhPGYG9RG@4d8#9Jri3r
+qGL26D!QRTfVhB$#dAiidf(#F,J(#%)-Dbkma"4B3F#2VrA"(h,%"Jf(QrVFhphK
+i2164KP)94liB+Sk4+#H#-L4P%RM2)P0,SX,[@k4hmkE4Xk)LK$rc94h21&*cPpN
+%(LEp!(3p$bqQQA#jY`laRLPjp3*4e[lN"C!!dh3"f(mTjDAQ,q'C*'E[3MB,+f`
+Vdhr1SIF!(acjbi)FmqCDXIA'(HA$32MMDARB&FqSrf-2fD2A36`*$*C`VmLmRMX
+[TMlB1hZj@5hVfpeAU4e"d"+V6VSFqcMk,lrJkAL$)1fI8Yj1cMkc2Sl-%$dH(XH
+,2"2hXHPfiH[0E'&rhkS&4V,lKJ*be"J&r10bCVA#@-L8QENlSXk1PG(-ZFHr6@X
+CUijeif6(N3mN2EHe-j9Xp&rkiZ2l,2@+,I![8j9meYd[9%`3J(1"qS-kakRl5GX
+9AH!-kkaj#ErYjq4"5M25U#hN(fVK5)YYm6dD$@+@eafUG8ZEq94#dUra8Aa-9&S
+Ra@(&Zr5RPqAKA,SRCB1VFk9F[pB1`Z[qbP6GbNe,qMBEqlp4fhbk50ARfhZ8MG3
+G#lQSI1"l`m"5REqlk4*4Q()ZSc&QiVRBZ(V$TeZBi%&h(TTRQD+hp,J+2d'GS3k
+UE*H+(q%$KR(Fh#0qHA9$))*%%eHLe*k'`1*h4,NMX3L%lUK45,TBS#JH(L[#8Pd
+@EpZM45+#46TZQA&f#k)!D'T9N!$Z'SI6HHJCC1B0D!j@qmfTPjQ"[%`)aHiLr@3
+PH14RA'QR&`AKZ!)M0$fKH)S)KPQrCLC1BI8+G)UE+'"-@,0h@r#R,Q%832q"BKj
+!UZ'pYm"I,#D#X2iGf%N2ilIJ,#6HAbdIM(K(mN()DRdA2iQMXq,$K8+iR3'9`ma
+d9ilQ`"TX+rVdiIEKS@JVm#l96YQ5j$AKRlc)8E4RrC!!Yp*Bm4c2`PVc'`[dqZ%
+eFaU,#Kq2e8JAIQTb'"EZDB31L2)%S9XkFJ8CNJ8pI&,CL(e6re*aA*15lCb8jU3
+m@d&r8BA[acciRJ0rDBEql2,9lh)AmKKIPH![X'&lhk%N,3@&3!*Tb5fFCTbAIBR
+Sd@P+[Y#mV$M[mR2c`(rR%X0`X#Ja-S!$+DChD0!#Q+8@NNY$em812emPlPpRYjZ
+IqhpqMTkZ[XqlY[i1lr(hqlm2mU'[46h[)eP`iJih*PRrhlmfHLR4qP9GPZR[q'V
+p8'ZcH$[V!+GlIi2SiITp2eIApK"QrqPSr4Qh$&E9QeEBRiC"3c`K+bVG$kI$,k+
+l-"aq2j3eq%2kIeKjKFJ)TIbCr+'h"3(+*DF2"$%-UiS53qH(rj!!@Ir1`Adl,6U
+BF80f(f`mN!$E(lKp5"rq2F2Y,9@0*i)APeD-XD0Z%3MBa0#l'2&$rf'j#iJYqEl
+VD3`AFh"#KPX#`XBM+TY(8UiSH@(qSE!%qa,CXEF0LLh2KM9X3f*KKKbe%%`bm[a
+D3,&&hBiSABE-2jJXrr9+@f-U$`YU3aL+p4!LbFAeJ-2cKk)Iq3rrSi-9%&1-i`P
+*Vp,'-VccMY8LJdP#[&++%P-pB#-S[38PH0UTb$U!P3b84rP!!!"#!!!!!)!!P3!
+!!!!!!!!!!$!!!!!!!(C3PS"fJ!B!#!#AH)H3!!H!L*G`"hN!F!!!!!4eC(KP#'9
+9@&4&H'H!!!!*N!!'!!%c4N4P!a-N9E1hr2RfH89bMVbjciG@PBcPGq*IHFG@HPr
++0ZrIZXMCXf45HRV1L+lmDcqqNUc39P(M2RAA30bai4hI[aRj4jj9ifGRIi+6lqh
+jH-$$2MIG5f)lDaI5,XX-j9[mq8ir9pH-@9ic("#ccSf&&h8B+p@AT+PCk"2VeV#
+,V'a0q@+)FFK4KK2KH6R,fM2,5XM3ff@@1k#fXqDmJQ#5X`PGTP5(NA$+jb)'Di6
+aUc5f3)2R1A+HQhiI6APlEpfbl1Y[(mmiq-Ck6cdbZR5Q@JVrlrriFZEb2#22fMj
+*hGeHr6+b+cSrNjmjBCmT[LbqiH,Xq6kAL%j$kb2kBeM`[Rjca`PMLQbphfN@f"A
+IR@I4(A+YXG2[hG#R2pa[pBi')PTI6CiDm'&pqhTrRGXlY+5pQ%IldPMF3`,jA8r
+UZ@H9TNpFk@qQPJ!!!!#!0'Gd9QC`H'"J9`L!QA"iKfD)F!#)F(Ki8)!)"SKiJ(#
+)H)KiL)KfJ'#!F)#!L!!!H!J!L)J!!)F(F!J!L)#!!(L!!!J!#!L!!!!!!!!!!!!
+!!!#!!!J)!'!!"`J!!!J!F!!!!!J!J!L!J!!!!!!!!!#!!!!!!!!!J)#!!)N!N!!
+(#J!")`!!!!!!3!3$%M3%L*)*V!9"02Jr+)ZBCDQ4KL0rKPRm)%AF-mcM!5lKPQd
+HA2`G6Rk[)V#e#Er3`DK"Fk2G(Tp@,c2bmY6mIAmrrL+fJ9([L1*9,3b!*DUPTC&
+k@P6HL,084B!PIDPe3jeUDTrlPe6bD3T6HRPi`)Y9EcIF@V(LeZ!a"0`R+mrYbiR
+q2qLMZ6LM@fiSrHI&IiHD,'pZ4Bir+LalI&&RNdaCmq#,2dpKYZb0l&IldApIaph
+[DrBc2$'MYrA[dAHP'MV8h-E`C9a&1('G&LAAPk)U"(q5jXCdN3rZ12k1QZYP&E%
+V4L)A@PGGj-@r*Lj1b#XS'5fGASpS'8jZRIe34`)fYhG(-lHar'&a(ELhXIS!!!#
+!-d4QB&CJ"JF(!(!!"h"`B!!'!!F!"`!!!(!!F!!!!("f"f!(B!!!!!G`!!G`!!!
+!!!"J"`!!!!!!!!!!!!F!!&CA!!!!!!!!Gh!!!!!!!!"J!!!!!!!!"R!!!!!!!!!
+!!!!!!!!!!!"`!!!!!!!!F!"hF!!!!!!!!!!!!!!!!!3)!!%M!%!!!%!"%GIMjGq
+[UM*&3EXMC'l$&A26QYqfrkp01Z[TMpDrN8HHL3KY!Na-b(Tk1*!!`3Ck4bclJR(
+fJA6XCb0a0@Lc68C$FA8qkFk#06'4-b0&[33#Ge0FD,@MkMjijhaK-CR%-YpqVXZ
+Zj2l`M3C1%I'@fl#lchal@!!!J%499QGhKfH)#C!!!)"iH(N!B!H3!)N*H*!!F'D
+AGhJ(L)!!DCL@H(N)Q*KJL'"`F!!!J)LAGj!!#!QBGj!!L@J!H!K`!(KiJ!F!QBC
+`N!#!!!#3!)N!"S#B#!!!#!N!#3#!Q3#!N!!*H)!!!)#C!!!!!!L3!!#!!*L3!*!
+!J!K`#*N!#*J!#BN!PhB8!!%MCJ!'B!B'!!B!!!!!!!!!!'!&%c4&"!@%)J5AH3K
+)")Gq(5e+0cBc[RXB9M1dE%J6VeFZ[JJ88HT$9%%pk5pAlYAmrC)&I%+f!KI++*j
++"*J*1!Nm#A!%Z3*G!6E!5l!P!#AJ%fi%h!pZ(ldT'Lb2*KNJfD@mN[VImfr*,[C
+-DAKcZM,ql39dHE+XeXbM')HMl'i3`3ANN!$G4qS%cUJ&pE+%[P35'E2iZKRm[-d
+2NfGV6N8dq$UDFQ8Tp01NNr'(Y&Lp%He#P#jMHaU!LK,m8fNX8Yi%ZeJ6E1",Xi%
+J*rpB01VI,bqCRJV"rf526kf[Im"UlXEZMAcXZMSFqamh2X8DH2Mif&5a-+PKlqP
+LiZ-,Y(k@Zh5e2AYLqcDrb%0EX5G2$m9RXE2iDIafE0QeLGbS"["qZ[Dhf*8eLdf
+Vf%,2@KXFVXqL(%mr+k$H`35GQFhR8kAETkh9"["p+TVZPbICKq+2Klh$26aI1[q
+"AfbH-@JQT#Jjf+%Hk@6mJT@-mYVE#fc`43"&"Fc-F1Z"3fI%rHJMcrphpplHI@#
+Vm'6kh(Um)'ErR(l34NB14aDi)ir[CA[qfF"bDZ4m+)DP@[lRZJM@UeZ0b!4eiDE
+8'k3H%0*F`i&rXeAYdB3rK&BSA(EV19jN'I3fLqC,BrS`cqN-NC*,rE$0bKJ!!%)
+!!!F!!!!&!!!!!!!!!!!!4`!'!(F!"f"Q!!!!!!!!!!GhJ!#(!(!(F!K`!)!!F!!
+&G90R"!"'9@"943"SKJ8!"R!J!!)L!$9J!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!
+!!!3#%M1@cVqGYNYQbA[5fH%[L2l,Z`a`m2@d#qqbAc2$PT@APMcLrabVYV(-&Ih
+1q2e22P5fk1-B9*r-'2j&IErKb&4P-FK)mkkC4R)6UAbai553!&X@$)5cX%'e9dV
+'GG[[kHIa,1kfNAbhlpfl8bqFq-k@j5i6SSp*F-FZ*J)`[X!KlX,NM$je*kr'l3l
+(1[qT(5h+XlU4VU$Ae(h2$Sb$9BahmGr(rmIF+cVqGJ!!!#2ZCcF!"`#)3QpiC@4
+"FR3!"K&"FR4%C@&XCA)a0NTeE(Nj03%!!!!)39"36&0A9&LX,KV@V#iDe`%!D1f
+c(J!#!!#e(J!!!!!!!(&c!!!!!!a#EhKPC%&bG#jNEf-"!!"aHe4&@&44483aUK[
+RA+f(YQS"!&9fck3!"J!!!IB!!%2r!!!"H3!!(A`-3QpiC@4"FR3ZG'9i!3!!N!"
+`9%9B9&&&4$'U'qGLVBH%c3%!R'6@K3!'!!!#0!!!9e3!!!(C!!!J6`p5C@&N6@8
+ZBQpiC@4KFR3"!!#bQ&4&@&44483aUK[RGUf1C)J"!$V!aPB!"!!!!!!!!!*2!!!
+!!!!!!CB*G'9cG#j35808!3!!Y#j3580868436+f([IbYKll)!3!*EYXk!!B!!!'
+Q!!!#1J!!!D!!!!%##(4PFh3ZG'9i!3!!YY"849K8+P4&@+f([bQYKm9@!3#'Q"Y
+4!!B!!!2S!!!#'J!!!S!!!!%6N[F!!!:
diff --git a/macros/generic/boxedart4mac/ReadMe_BoxedArt b/macros/generic/boxedart4mac/ReadMe_BoxedArt
new file mode 100644
index 0000000000..6fba2376a8
--- /dev/null
+++ b/macros/generic/boxedart4mac/ReadMe_BoxedArt
@@ -0,0 +1,21 @@
+INDEX to BoxedArt package April 1995
+ --- serves to integrate into Textures and OzTeX both
+EPS and PICT graphics. It is compatible with
+the boxedeps package. And it is faster. But the
+integration is not immediately portable.
+
+
+ BoxedArt.tex --- the TeX macros
+ BoxedArt.doc --- the documentation
+ ArtDealer16July95 = preprocessor
+ ArtDealer packaged by CompactPro
+ test.tex --- example
+ test.PICT --- example PICT file
+
+
+ Laurent Siebenmann
+ Mathematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+ lcs@topo.matups.fr
diff --git a/macros/generic/boxedeps/ReadMe.boxedeps b/macros/generic/boxedeps/ReadMe.boxedeps
new file mode 100644
index 0000000000..114daf50ae
--- /dev/null
+++ b/macros/generic/boxedeps/ReadMe.boxedeps
@@ -0,0 +1,26 @@
+%% ReadMe.boxedeps
+
+INDEX to boxedeps directory core April 1995
+
+ boxedeps.tex; boxedeps.doc; boxedeps.cfg ---
+ integration of encapsulated PostScript into TeX;
+ designed to work with (almost) all PostScript drivers
+
+ labelfig.tex ---
+ semi-interactive TeX labelling on just about anything;
+ contains its own documentation following \endinput
+
+ Details and Miscellaneous:
+
+ -- ASCII.test; Test.tex; TestPlain.tex; gdisk.eps;
+ rosetest.tex; rose.eps --- test files
+ -- bb.ps; bb4gs.ps : for PS ==> EPSF conversion; see boxedeps.doc
+ -- newins.tex ==> W. Neumann's patch file to Plain.tex for
+ floating inserts under Plain, AmS, and LamsTeX (load anytime).
+
+ Laurent Siebenmann <lcs@topo.math.u-psud.fr>
+ Mathematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
diff --git a/macros/generic/boxedeps/bb.ps b/macros/generic/boxedeps/bb.ps
new file mode 100644
index 0000000000..b290f005f0
--- /dev/null
+++ b/macros/generic/boxedeps/bb.ps
@@ -0,0 +1,557 @@
+%!
+% bb.ps --
+%
+% Prints a file, but keeps track of bounding box info, and prints the box at
+% the end (around the figure.)
+%
+% $Header: bb.ps,v 1.10 90/06/27 10:47:22 cosell Exp $
+% RCS log info at end
+
+50 dict /$BoundingBox exch def
+
+$BoundingBox begin
+
+/xdef {
+ exch def
+} def
+
+/xstore {
+ exch store
+} def
+
+/addcoords {
+ exch
+ 4 -1 roll add
+ 3 1 roll add
+} def
+
+%
+% Stubs of old functions.
+%
+
+/-stroke /stroke load def
+/-fill /fill load def
+/-eofill /eofill load def
+/-image /image load def
+/-show /show load def
+/-awidthshow /awidthshow load def
+/-showpage /showpage load def
+/-restore /restore load def
+/-imagemask /imagemask load def
+
+end % $BoundingBox
+
+%
+% New Functions. --- These go into the user dict to intercept the calls
+%
+
+/stroke {
+ $BoundingBox begin
+ gsave
+ initmatrix
+ (stroke called\n) traceprint %%DEBUG
+ {
+ strokepath % Make sure to take line width into account.
+ 0 setlinejoin
+ flattenpath
+ } stopped { % strokepath often hits a limitcheck.
+ (Can't set up a strokepath\n) traceprint % DEBUG
+ grestore % Restore the original path
+ gsave
+ } if
+ includepath % Accumulate it into our box.
+ grestore
+
+ -stroke
+ end % $BoundingBox
+} def
+
+/fill {
+ $BoundingBox begin
+ gsave
+ (fill called\n) traceprint %%DEBUG
+ includepath
+ grestore
+
+ -fill
+ end % $BoundingBox
+} def
+
+/eofill {
+ $BoundingBox begin
+ gsave
+ (eofill called\n) traceprint %%DEBUG
+ includepath
+ grestore
+
+ -eofill
+ end % $BoundingBox
+} def
+
+%
+% Text is implemented by reducing everything to an `awidthshow'.
+%
+
+/show {
+ $BoundingBox begin
+ (show called\n) traceprint %%DEBUG
+ 0 0 0 0 0 % Extra parameters for awidthshow
+ 6 -1 roll % Bring the string back up
+ awidthshow
+ end % $BoundingBox
+} def
+
+/widthshow {
+ $BoundingBox begin
+ (widthshow called\n) traceprint %%DEBUG
+ 0 0 % Extra parameters for awidthshow
+ 3 -1 roll % Bring the string back up.
+ awidthshow
+ end % $BoundingBox
+} def
+
+/ashow {
+ $BoundingBox begin
+ (ashow called\n) traceprint %%DEBUG
+ 0 0 0
+ 6 3 roll
+ awidthshow
+ end % $BoundingBox
+} def
+
+
+% This does all of the work of the text-rendering operators
+% What it does, is compute, basically brute force, what 'charpath'
+% would have given us virtually for free, if 'show' were the only
+% operator that we needed to do.
+
+/awidthshow {
+ $BoundingBox begin
+ gsave
+ 6 (awidthshow:) debug %%DEBUG
+ currentpoint
+ 2 copy /@starty xdef /@startx xdef
+ 2 index stringwidth % Get the natural length of the string
+ addcoords % Add to the start to get the end.
+
+ 2 index length % How many characters?
+
+ dup % Add the offsets to each character
+ 6 index mul
+ exch 5 index mul
+ addcoords
+
+ 5 index 3 index
+ chcount % How many padding characters?
+
+ dup % Add the offsets for each pad.
+ 9 index mul
+ exch 8 index mul
+ addcoords
+
+ /@endy xdef /@endx xdef
+
+ % We now have the left and right edges (in user coords)
+ % of the text. Now we need only correct for the vertical
+ % displacements needed for the font and we can get the
+ % top and bottom edges of the enclosing box
+
+ fontheight % Get the height and depth of the current font.
+
+ @startx @starty addcoords
+ /@starty xdef /@startx xdef
+ @endx @endy addcoords
+ /@endy xdef /@endx xdef
+ newpath
+ @startx @starty moveto
+ @endx @starty lineto
+ @endx @endy lineto
+ @startx @endy lineto
+ closepath
+ includepath
+ grestore
+
+ -awidthshow
+ end % $BoundingBox
+} def
+
+%
+% `image':
+%
+% Assume here that the image lands in the unit square.
+%
+
+/image {
+ $BoundingBox begin
+ (image called\n) traceprint %%DEBUG
+ gsave
+ newpath
+ 0 0 moveto
+ 1 0 rlineto
+ 1 1 rlineto
+ -1 0 rlineto
+ closepath
+ includepath
+ grestore
+
+ -image
+ end % $BoundingBox
+} def
+
+/imagemask
+{
+ $BoundingBox begin
+ (imagemask called\n) traceprint %%DEBUG
+ gsave
+ newpath
+ 0 0 moveto
+ 1 0 rlineto
+ 1 1 rlineto
+ -1 0 rlineto
+ closepath
+ includepath
+ grestore
+
+ -imagemask
+ end % $BoundingBox
+} def
+
+% Just define this one out of existence
+/framedevice { pop pop pop pop } def
+
+% Handle restoring VM --- this is all OK, except that we have to
+% hang onto the bb info we collected while in the about-to-be-discarded
+% environment
+
+/restore
+{
+ $BoundingBox begin
+ bbox-llx bbox-lly bbox-urx bbox-ury
+ 5 -1 roll
+ -restore
+ /bbox-ury xstore /bbox-urx xstore
+ /bbox-lly xstore /bbox-llx xstore
+ end % $BoundingBox
+} def
+
+
+%
+% `showpage':
+%
+% Just draw the box around the figure and print the page, and then initialize
+% the bounding box variables again.
+%
+
+$BoundingBox begin
+/temp-string 10 string def
+end % $BoundingBox
+
+/showpage {
+ $BoundingBox begin
+ initgraphics
+
+ (showpage\n) traceprint % DEBUG
+ dump-bbox % DEBUG
+
+ /bbox-llx round_down
+ /bbox-lly round_down
+ /bbox-ury round_up
+ /bbox-urx round_up
+
+ bbox-llx bbox-lly moveto % Make the box
+ bbox-llx bbox-ury lineto
+ bbox-urx bbox-ury lineto
+ bbox-urx bbox-lly lineto
+ closepath
+
+ bwstroke % Draw the box.
+
+% Print the size of the bounding box both above and below the actual box
+ 0 setgray
+ /Courier findfont 10 scalefont setfont
+ 100 100 moveto
+ bbox-llx bbox-lly 12 sub moveto
+ (%%BoundingBox: ) -show
+ bbox-llx temp-string cvs -show ( ) -show
+ bbox-lly temp-string cvs -show ( ) -show
+ bbox-urx temp-string cvs -show ( ) -show
+ bbox-ury temp-string cvs -show
+
+ bbox-llx bbox-ury 12 add moveto
+ (%%BoundingBox: ) -show
+ bbox-llx temp-string cvs -show ( ) -show
+ bbox-lly temp-string cvs -show ( ) -show
+ bbox-urx temp-string cvs -show ( ) -show
+ bbox-ury temp-string cvs -show
+
+ init
+ -showpage
+ tracedump %% DEBUG
+ end % $BoundingBox
+} def
+
+%
+% BoundingBox functions:
+%
+% We accumulate the information about the bounding box into four variables.
+% The data is stored in default coordinates.
+%
+
+$BoundingBox begin
+
+/init {
+ /bbox-llx 99999 store
+ /bbox-lly 99999 store
+ /bbox-urx -99999 store
+ /bbox-ury -99999 store
+} def
+
+/bbox-llx 0 def
+/bbox-lly 0 def
+/bbox-urx 0 def
+/bbox-ury 0 def
+
+%
+% - `includepath' -
+%
+% Incorporates the bounding box of the path into the bounding box info.
+% ... Gets the bounding box in default coords
+
+/includepath {
+ (Adding a path: ) traceprint %%DEBUG
+ gsave
+ initmatrix
+ {
+ 0 setlinejoin
+ flattenpath
+ } stopped {
+ (Couldn't flatten the path\n) traceprint % DEBUG
+ grestore
+ gsave
+ initmatrix
+ } if
+ pathbbox
+ 4 2 roll % Just so we get lower-left first
+ 2 copy dump-coord %%DEBUG
+ dup bbox-lly lt {
+ /bbox-lly xstore
+ } {
+ pop
+ } ifelse
+ dup bbox-llx lt {
+ /bbox-llx xstore
+ } {
+ pop
+ } ifelse
+
+ (; ) traceprint 2 copy dump-coord (\n) traceprint %%DEBUG
+ dup bbox-ury gt {
+ /bbox-ury xstore
+ } {
+ pop
+ } ifelse
+ dup bbox-urx gt {
+ /bbox-urx xstore
+ } {
+ pop
+ } ifelse
+ dump-bbox %%DEBUG
+ grestore
+} def
+
+%
+% A nice black-and white line drawing function.
+%
+
+/bwstroke {
+ 0 setlinewidth % Thinnest possible lines
+ 1 setgray % White first
+ [5] 0 setdash % Only half the line
+ gsave -stroke grestore
+ 0 setgray % Then black
+ [5] 5 setdash % On the other half
+ -stroke
+} def
+
+%
+% Stuff for text.
+%
+
+%
+% char-code string `chcount' occurs
+%
+% Counts the number of times a character appears in a string.
+%
+
+/chcount {
+ 0 exch
+ {
+ 2 index eq {
+ 1 add
+ } if
+ } forall
+ exch pop
+} def
+
+%
+% - `fontheight' heightx heighty depthx depthy
+%
+% Returns the offsets to the lowest point and highest point in the current
+% font.
+%
+
+/fontheight {
+ currentfont begin
+ /FontBBox load aload pop
+ exch pop 0 exch
+ FontMatrix transform
+ 4 2 roll
+ exch pop 0 exch
+ FontMatrix transform
+ end
+} def
+
+% key round_{down|up} - These will round the value of the given key
+% up or down, as appropriate, to the nearest integer
+/round_up { dup load ceiling cvi store } def
+/round_down { dup load floor cvi store } def
+
+% key binddefinition - this will do a 'bind' on the procedure given by 'key'
+/binddefinition
+{
+ dup where
+ {
+ exch
+ 2 copy
+ get bind put
+ }
+ { undefined } ifelse
+} def
+
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%
+% Debugging utilities
+%
+
+/$tracedict where
+{ % Trace package loaded... do the tracing
+ pop
+% This is a debugging function to print out what is going on.
+% Format <argn> <argn-1> ... <arg1> n <string> debug <argn> ... <arg1>
+% (that is, the 'n' args will be *left* on the stack!)
+/debug
+{
+ traceprint (\n) traceprint
+ dup 1 add % Now total number of args (including arg count)
+ copy
+ {
+ ( ) traceprint
+ trace=
+ (\n) traceprint
+ } repeat
+ pop % Remove the extra copy of the arg count
+} def
+
+% Print out a coordinate on the stack: x y ---
+/dump-coord
+{
+ (\() traceprint exch trace= (, ) traceprint trace= (\)) traceprint
+} def
+
+% Print out bb's current notion of its bounding box
+
+/dump-bbox
+{
+ (Bounding Box: ) traceprint
+ bbox-llx bbox-lly dump-coord
+ (; ) traceprint
+ bbox-urx bbox-ury dump-coord
+ (\n) traceprint
+} def
+
+tracebegin %% DEBUG
+
+}
+{ % No trace package loaded, so don't trace. Stub out the various calls
+
+/traceprint { pop } def
+/dump-coord { pop pop } def
+/dump-bbox { } def
+/debug { pop pop } def
+/tracedump { } def
+
+} ifelse
+
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+
+% Bind everything
+
+/xdef binddefinition
+/xstore binddefinition
+/addcoords binddefinition
+/stroke binddefinition
+/fill binddefinition
+/eofill binddefinition
+/show binddefinition
+/widthshow binddefinition
+/ashow binddefinition
+/awidthshow binddefinition
+/image binddefinition
+/showpage binddefinition
+/init binddefinition
+/includepath binddefinition
+/bwstroke binddefinition
+/chcount binddefinition
+/fontheight binddefinition
+
+/debug binddefinition
+/dump-coord binddefinition
+/dump-bbox binddefinition
+
+% Start it up.
+
+init
+
+end % $BoundingBox
+
+% end of bb.ps
+
+% $Log: bb.ps,v $
+% Revision 1.10 90/06/27 10:47:22 cosell
+% Added a bunch of improvements from Joe Pallas at stanford.
+%
+% Revision 1.9 90/06/26 10:50:20 cosell
+% Stack got botched in the 'debug' stub
+%
+% Revision 1.8 90/06/25 09:34:51 cosell
+% Minor bug in 'restore'
+%
+% Revision 1.7 90/06/25 09:29:58 cosell
+% Added code to catch and deal with 'restore'. Thanks to Frank
+% Jensen for finding this one
+%
+% Revision 1.6 90/06/25 09:23:26 cosell
+% Small bugfix in the text-handling stuff
+%
+% Revision 1.5 90/06/10 09:04:02 cosell
+% Changed the printed string to explictly say "%%BoundingBox"
+%
+% Revision 1.4 90/06/10 08:55:39 cosell
+% Added 'bind' machinery to insulate this package from later redefinitions
+% of things we need from the systemdict.
+%
+% Revision 1.3 90/06/10 08:28:53 cosell
+% Added debugging hooks. They don't affect anything (and don't do
+% anything) in the normal use of bbfig. But if the 'trace' package
+% is loaded ahead of this, it'll print out some helpful info. Probably
+% I'll end up removing all of this if/when I really get the package
+% up to snuff.
+%
+% Revision 1.2 90/05/25 12:08:24 cosell
+% Major improvements and tuneups: fixed it to really use its private
+% discionary, and the most importnat: it now computes the bounding box
+% in *default* coords
+%
+% Revision 1.1 90/05/23 08:18:54 cosell
+% Initial revision
+% This is Ned Bachelder's original version
diff --git a/macros/generic/boxedeps/bb4gs.ps b/macros/generic/boxedeps/bb4gs.ps
new file mode 100644
index 0000000000..19b2861aee
--- /dev/null
+++ b/macros/generic/boxedeps/bb4gs.ps
@@ -0,0 +1,596 @@
+%!
+% bb.ps --
+%
+% Prints a file, but keeps track of bounding box info, and prints the box at
+% the end (around the figure.)
+%
+% $Header: bb.ps,v 1.14 91/03/21 13:04:02 cosell Exp $
+% RCS log info at end
+%
+% This version, bb4gs.ps, modified for Ghostscript by William L. Kath
+% <kath@nwu.edu>, 92/03/01; all changes clearly marked by `Ghostscript'
+
+/strokepath { } def %% added by wlk for Ghostscript (I think
+ %% the strokepath operator is still not
+ %% fully implemented).
+
+%% /show /print load def %% added by wlk for Ghostscript; uncomment
+ %% this lines to write %%BoundingBox to
+ %% stdout (e.g, for use in a filter to add
+ %% %%BoundingBox to a Postscript file);
+ %% alternatively, add these two lines to
+ %% a separate file and invoke before this
+ %% one when such a filter is desired.
+
+50 dict /$BoundingBox exch def
+
+$BoundingBox begin
+
+/xdef {
+ exch def
+} def
+
+/xstore {
+ exch store
+} def
+
+/addcoords {
+ exch
+ 4 -1 roll add
+ 3 1 roll add
+} def
+
+%
+% Stubs of old functions.
+%
+
+/-stroke /stroke load def
+/-fill /fill load def
+/-eofill /eofill load def
+/-image /image load def
+/-show /show load def
+/-awidthshow /awidthshow load def
+/-showpage /showpage load def
+/-restore /restore load def
+/-imagemask /imagemask load def
+
+end % $BoundingBox
+
+%
+% New Functions. --- These go into the user dict to intercept the calls
+%
+
+/stroke {
+ $BoundingBox begin
+ gsave
+ initmatrix
+ (stroke called\n) traceprint %%DEBUG
+ {
+ strokepath % Make sure to take line width into account.
+ 0 setlinejoin
+ flattenpath
+ } stopped { % strokepath often hits a limitcheck.
+ (Can't set up a strokepath\n) traceprint % DEBUG
+ grestore % Restore the original path
+ gsave
+ } if
+ includepath % Accumulate it into our box.
+ grestore
+
+ -stroke
+ end % $BoundingBox
+} def
+
+/fill {
+ $BoundingBox begin
+ gsave
+ (fill called\n) traceprint %%DEBUG
+ includepath
+ grestore
+
+ -fill
+ end % $BoundingBox
+} def
+
+/eofill {
+ $BoundingBox begin
+ gsave
+ (eofill called\n) traceprint %%DEBUG
+ includepath
+ grestore
+
+ -eofill
+ end % $BoundingBox
+} def
+
+%
+% Text is implemented by reducing everything to an `awidthshow'.
+%
+
+/show {
+ $BoundingBox begin
+ (show called\n) traceprint %%DEBUG
+ 0 0 0 0 0 % Extra parameters for awidthshow
+ 6 -1 roll % Bring the string back up
+ awidthshow
+ end % $BoundingBox
+} def
+
+/widthshow {
+ $BoundingBox begin
+ (widthshow called\n) traceprint %%DEBUG
+ 0 0 % Extra parameters for awidthshow
+ 3 -1 roll % Bring the string back up.
+ awidthshow
+ end % $BoundingBox
+} def
+
+/ashow {
+ $BoundingBox begin
+ (ashow called\n) traceprint %%DEBUG
+ 0 0 0
+ 6 3 roll
+ awidthshow
+ end % $BoundingBox
+} def
+
+% This does all of the work of the text-rendering operators
+% What it does, is compute, basically brute force, what 'charpath'
+% would have given us virtually for free, if 'show' were the only
+% operator that we needed to do.
+
+/awidthshow {
+ $BoundingBox begin
+ gsave
+ 6 (awidthshow:) debug %%DEBUG
+ currentpoint
+ 2 copy /@starty xdef /@startx xdef
+ 2 index stringwidth % Get the natural length of the string
+ addcoords % Add to the start to get the end.
+
+ 2 index length % How many characters?
+
+ dup % Add the offsets to each character
+ 6 index mul
+ exch 5 index mul
+ addcoords
+
+ 5 index 3 index
+ chcount % How many padding characters?
+
+ dup % Add the offsets for each pad.
+ 9 index mul
+ exch 8 index mul
+ addcoords
+
+ /@endy xdef /@endx xdef
+
+ % We now have the left and right edges (in user coords)
+ % of the text. Now we need only correct for the vertical
+ % displacements needed for the font and we can get the
+ % top and bottom edges of the enclosing box
+
+ fontheight % Get the height and depth of the current font.
+
+ @startx @starty addcoords
+ /@starty xdef /@startx xdef
+ @endx @endy addcoords
+ /@endy xdef /@endx xdef
+ newpath
+ @startx @starty moveto
+ @endx @starty lineto
+ @endx @endy lineto
+ @startx @endy lineto
+ closepath
+ includepath
+ grestore
+
+ -awidthshow
+ end % $BoundingBox
+} def
+
+%
+% `image':
+%
+% Assume here that the image lands in the unit square.
+%
+
+/image {
+ $BoundingBox begin
+ (image called\n) traceprint %%DEBUG
+ gsave
+ newpath
+ 0 0 moveto
+ 1 0 rlineto
+ 1 1 rlineto
+ -1 0 rlineto
+ closepath
+ includepath
+ grestore
+
+ -image
+ end % $BoundingBox
+} def
+
+/imagemask
+{
+ $BoundingBox begin
+ (imagemask called\n) traceprint %%DEBUG
+ gsave
+ newpath
+ 0 0 moveto
+ 1 0 rlineto
+ 1 1 rlineto
+ -1 0 rlineto
+ closepath
+ includepath
+ grestore
+
+ -imagemask
+ end % $BoundingBox
+} def
+
+% Just define this one out of existence
+/framedevice { pop pop pop pop } def
+
+% Handle restoring VM --- this is all OK, except that we have to
+% hang onto the bb info we collected while in the about-to-be-discarded
+% environment
+
+/restore
+{
+ $BoundingBox begin
+ (restore called\n) traceprint %%DEBUG
+ tracedump %% HACK, but the only way I see right now to get this stuff!
+ bbox-llx bbox-lly bbox-urx bbox-ury
+ 5 -1 roll
+ -restore
+ /bbox-ury xstore /bbox-urx xstore
+ /bbox-lly xstore /bbox-llx xstore
+ end % $BoundingBox
+} def
+
+%
+% `showpage':
+%
+% Just draw the box around the figure and print the page, and then initialize
+% the bounding box variables again.
+%
+
+$BoundingBox begin
+/temp-string 10 string def
+end % $BoundingBox
+
+/showpage {
+ $BoundingBox begin
+ initgraphics
+
+ (showpage\n) traceprint % DEBUG
+ dump-bbox % DEBUG
+
+ /bbox-llx round_down
+ /bbox-lly round_down
+ /bbox-ury round_up
+ /bbox-urx round_up
+
+ bbox-llx bbox-lly moveto % Make the box
+ bbox-llx bbox-ury lineto
+ bbox-urx bbox-ury lineto
+ bbox-urx bbox-lly lineto
+ closepath
+
+ bwstroke % Draw the box.
+
+% Print the size of the bounding box both above and below the actual box
+ 0 setgray
+ %% /Courier findfont 10 scalefont setfont
+ %% bbox-llx 36 max bbox-lly 12 sub 36 max moveto
+ /Courier findfont 25 scalefont setfont %% changed by wlk
+ bbox-llx 36 max bbox-lly 29 sub 36 max moveto %% for Ghostscript
+ (%%BoundingBox: ) -show
+ bbox-llx temp-string cvs -show ( ) -show
+ bbox-lly temp-string cvs -show ( ) -show
+ bbox-urx temp-string cvs -show ( ) -show
+ bbox-ury temp-string cvs -show
+
+ bbox-llx 36 max bbox-ury 12 add 740 min moveto
+ /-show load /print load ne %% added by wlk for Ghostscript
+ { %% added by wlk for Ghostscript
+ (%%BoundingBox: ) -show
+ bbox-llx temp-string cvs -show ( ) -show
+ bbox-lly temp-string cvs -show ( ) -show
+ bbox-urx temp-string cvs -show ( ) -show
+ bbox-ury temp-string cvs -show
+ } if %% added by wlk for Ghostscript
+
+ init
+ -showpage
+ tracedump %% DEBUG
+ end % $BoundingBox
+} def
+
+%
+% BoundingBox functions:
+%
+% We accumulate the information about the bounding box into four variables.
+% The data is stored in default coordinates.
+%
+
+$BoundingBox begin
+
+/init {
+ /bbox-llx 99999 store
+ /bbox-lly 99999 store
+ /bbox-urx -99999 store
+ /bbox-ury -99999 store
+} def
+
+/bbox-llx 0 def
+/bbox-lly 0 def
+/bbox-urx 0 def
+/bbox-ury 0 def
+
+%
+% - `includepath' -
+%
+% Incorporates the bounding box of the path into the bounding box info.
+% ... Gets the bounding box in default coords
+
+/includepath {
+ (Adding a path: ) traceprint %%DEBUG
+ gsave
+ initmatrix
+ {
+ 0 setlinejoin
+ flattenpath
+ } stopped {
+ (Couldn't flatten the path\n) traceprint % DEBUG
+ grestore
+ gsave
+ initmatrix
+ } if
+ { pathbbox } stopped not
+ {
+ 4 2 roll % Just so we get lower-left first
+ 2 copy dump-coord %%DEBUG
+ dup bbox-lly lt {
+ /bbox-lly xstore
+ } {
+ pop
+ } ifelse
+ dup bbox-llx lt {
+ /bbox-llx xstore
+ } {
+ pop
+ } ifelse
+
+ (; ) traceprint 2 copy dump-coord (\n) traceprint %%DEBUG
+ dup bbox-ury gt {
+ /bbox-ury xstore
+ } {
+ pop
+ } ifelse
+ dup bbox-urx gt {
+ /bbox-urx xstore
+ } {
+ pop
+ } ifelse
+ dump-bbox %%DEBUG
+ } if
+ grestore
+} def
+
+%
+% A nice black-and white line drawing function.
+%
+
+/bwstroke {
+ 0 setlinewidth % Thinnest possible lines
+ 1 setgray % White first
+ [5] 0 setdash % Only half the line
+ gsave -stroke grestore
+ 0 setgray % Then black
+ [5] 5 setdash % On the other half
+ -stroke
+} def
+
+%
+% Stuff for text.
+%
+
+%
+% char-code string `chcount' occurs
+%
+% Counts the number of times a character appears in a string.
+%
+
+/chcount {
+ 0 exch
+ {
+ 2 index eq {
+ 1 add
+ } if
+ } forall
+ exch pop
+} def
+
+%
+% - `fontheight' heightx heighty depthx depthy
+%
+% Returns the offsets to the lowest point and highest point in the current
+% font.
+%
+
+/fontheight {
+ currentfont begin
+ /FontBBox load aload pop
+ exch pop 0 exch
+ FontMatrix transform
+ 4 2 roll
+ exch pop 0 exch
+ FontMatrix transform
+ end
+} def
+
+% key round_{down|up} - These will round the value of the given key
+% up or down, as appropriate, to the nearest integer
+/round_up { dup load ceiling cvi store } def
+/round_down { dup load floor cvi store } def
+
+% key binddefinition - this will do a 'bind' on the procedure given by 'key'
+/binddefinition
+{
+ dup where
+ {
+ exch
+ 2 copy
+ get bind put
+ }
+ { undefined } ifelse
+} def
+
+% Given two numbers on the stack, return with just the smallest
+/min { 2 copy ge { exch } if pop } def
+
+% Dito for the largest of the pair
+/max { 2 copy lt { exch } if pop } def
+
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%
+% Debugging utilities
+%
+
+/$tracedict where
+{ % Trace package loaded... do the tracing
+ pop
+% This is a debugging function to print out what is going on.
+% Format <argn> <argn-1> ... <arg1> n <string> debug <argn> ... <arg1>
+% (that is, the 'n' args will be *left* on the stack!)
+/debug
+{
+ traceprint (\n) traceprint
+ dup 1 add % Now total number of args (including arg count)
+ copy
+ {
+ ( ) traceprint
+ trace=
+ (\n) traceprint
+ } repeat
+ pop % Remove the extra copy of the arg count
+} def
+
+% Print out a coordinate on the stack: x y ---
+/dump-coord
+{
+ (\() traceprint exch trace= (, ) traceprint trace= (\)) traceprint
+} def
+
+% Print out bb's current notion of its bounding box
+
+/dump-bbox
+{
+ (Bounding Box: ) traceprint
+ bbox-llx bbox-lly dump-coord
+ (; ) traceprint
+ bbox-urx bbox-ury dump-coord
+ (\n) traceprint
+} def
+
+tracebegin %% DEBUG
+
+}
+{ % No trace package loaded, so don't trace. Stub out the various calls
+
+/traceprint { pop } def
+/dump-coord { pop pop } def
+/dump-bbox { } def
+/debug { pop pop } def
+/tracedump { } def
+
+} ifelse
+
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+
+% Bind everything
+
+/xdef binddefinition
+/xstore binddefinition
+/addcoords binddefinition
+/stroke binddefinition
+/fill binddefinition
+/eofill binddefinition
+/show binddefinition
+/widthshow binddefinition
+/ashow binddefinition
+/awidthshow binddefinition
+/image binddefinition
+/showpage binddefinition
+/init binddefinition
+/includepath binddefinition
+/bwstroke binddefinition
+/chcount binddefinition
+/fontheight binddefinition
+
+/debug binddefinition
+/dump-coord binddefinition
+/dump-bbox binddefinition
+
+% Start it up.
+
+init
+
+end % $BoundingBox
+
+% end of bb.ps
+
+% $Log: bb.ps,v $
+% Revision 1.14 91/03/21 13:04:02 cosell
+% Relocated the position of the constrained BBox info
+%
+% Revision 1.13 91/03/21 12:21:04 cosell
+% Forced the %BoundingBox info to stay within the page boundaries
+%
+% Revision 1.12 91/03/21 12:15:17 cosell
+% Added a tracing hook to bridge restores.
+%
+% Revision 1.11 90/07/02 08:48:40 cosell
+% bbfig now correctly copes with empty paths
+%
+% Revision 1.10 90/06/27 10:47:22 cosell
+% Added a bunch of improvements from Joe Pallas at stanford.
+%
+% Revision 1.9 90/06/26 10:50:20 cosell
+% Stack got botched in the 'debug' stub
+%
+% Revision 1.8 90/06/25 09:34:51 cosell
+% Minor bug in 'restore'
+%
+% Revision 1.7 90/06/25 09:29:58 cosell
+% Added code to catch and deal with 'restore'. Thanks to Frank
+% Jensen for finding this one
+%
+% Revision 1.6 90/06/25 09:23:26 cosell
+% Small bugfix in the text-handling stuff
+%
+% Revision 1.5 90/06/10 09:04:02 cosell
+% Changed the printed string to explictly say "%%BoundingBox"
+%
+% Revision 1.4 90/06/10 08:55:39 cosell
+% Added 'bind' machinery to insulate this package from later redefinitions
+% of things we need from the systemdict.
+%
+% Revision 1.3 90/06/10 08:28:53 cosell
+% Added debugging hooks. They don't affect anything (and don't do
+% anything) in the normal use of bbfig. But if the 'trace' package
+% is loaded ahead of this, it'll print out some helpful info. Probably
+% I'll end up removing all of this if/when I really get the package
+% up to snuff.
+%
+% Revision 1.2 90/05/25 12:08:24 cosell
+% Major improvements and tuneups: fixed it to really use its private
+% discionary, and the most importnat: it now computes the bounding box
+% in *default* coords
+%
+% Revision 1.1 90/05/23 08:18:54 cosell
+% Initial revision
+% This is Ned Bachelder's original version
diff --git a/macros/generic/boxedeps/boxedeps.cfg b/macros/generic/boxedeps/boxedeps.cfg
new file mode 100644
index 0000000000..98bb70a6e1
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.cfg
@@ -0,0 +1,70 @@
+
+ %%%%% boxedeps.cfg
+ %% --- optional configuration file for boxedeps.tex
+ %% that provides a default driver specification
+ %% for use by the PostScript integration utility boxedeps.tex.
+ %%
+ %%% AIM: Make PostScript integration more driver-independent
+ %%% USE: Uncomment one of the \Set... commands in following table.
+ %% See documentation after \endinput.
+
+ %% \SetepsfEPSFSpecial %% ******* will work for many:
+ %%% --- dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetEPSFMultiSpecial %% ******* may work for more
+ %% \SetTexturesEPSFSpecial %% Textures
+ %% \SetUnixCoopEPSFSpecial %% dvi2ps early unix
+ %% \SetNiponUnixEPSFSpecial %% dvi2ps j-version
+ %% \SetBechtolsheimDVI2PSEPSFSpecial and
+ %% \SetBechtolsheimDVITPSEPSFSpecial %% by S.P.Bechtolsheim
+ %% \SetLisEPSFSpecial %% dvi2ps by Tony Lis
+ %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki
+ %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y same as
+ %% \SetDVIWindowEPSFSpecial %% DVIWindow of Y&Y
+ %% \SetDirectTeXEPSFSpecial %% DirectTeX by Wilfried Ricken
+ %% \SetCMacTeXEPSFSpecial %% CMacTeX by Tom Kiffe
+ %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.7) by Andrew Trevorrow
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x
+ %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow
+ %% --- also for OzTeX versions <= 1.41 !!
+ %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS
+ %% \SetClarkEPSFSpecial %% dvitops by James Clark
+ %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe
+ %% \SetNorthlakeEPSFSpecial %% Northlake Software
+ %% \SetStandardEPSFSpecial %% Nonexistant: Placebo used
+
+\endinput
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ ***** DOCUMENTATION for boxedeps.cfg *****
+
+ ***** INSTALLATION:
+
+ (1) Uncomment the line that corresponds to the
+dvi-to-postscript printer driver that you use and comment out any
+other such lines.
+
+ (2) Place the modified file in one of your "TeX inputs"
+directories. An end-user might put it alongside his TeX files. A
+system operator might put it in a read-only directory.
+
+ ***** USE:
+
+ Place a command \input boxedeps.cfg in style file for your .tex
+typescript. Or in its header. Then no command
+\Set<driver>EPSFSpecial is needed in your .tex typescript, and as
+a consequence, it becomes is perfectly portable between sites that
+that are equipped with boxedeps.tex and such a configuration file.
+Highly recommended for all typescripts that use several drivers,
+say at home, at the office, on visit etc.
+
+NB: If you give a \Set<driver>EPSFSpecial after this file has been
+input it will overrule this configuration file. Watch the log file
+for sign of this; it can trip you up! But it can also be
+convenient.
+
+
+
+
+
+
diff --git a/macros/generic/boxedeps/boxedeps.doc b/macros/generic/boxedeps/boxedeps.doc
new file mode 100644
index 0000000000..d534f4e218
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.doc
@@ -0,0 +1,1242 @@
+%%%%% boxedeps.doc of Nov 1995
+ %%
+ %%% POSTINGS:
+ %% --- ftp matups.matups.fr
+ %% This is the master copy in 1995.
+ %% Locate the full package on the CTAN servers
+ %% by using (while connected) the command
+ %% quote site index boxedeps
+ %%%% NEWS (11-95):
+ %% * BoundingBox trimming in percentage "pct" units.
+ %% * High resolution bounding boxes are used when available.
+ %% * Log file epsf.lst reports epsf files integrated;
+ %% use it as an inventory for exporting.
+ %% * EPSP the PC binary EPS format for including preview
+ %% as a Windows metafile bitmap or a TIFF bitmap
+ %% is now supported by this package. Beware that few
+ %% drivers on other platforms support it.
+ %%%% NEWS (1-95):
+ %% * \SetepsfEPSFSpecial works for the
+ %% several drivers that support the particular special syntax
+ %% first supported by Rokicki in dvips and used in his epsf.tex.
+ %% * Experimental feature: \SetEPSFMultiSpecial
+ %% works also for Textures. Intended to create ".dvi" files
+ %% for posting on the internet that will print with graphics
+ %% insertions on all major operating systems. Some drivers
+ %% produce spurious error reports but print correctly.
+
+ *******************************************************
+
+
+ ********* The BoxedEPSF Utility **********
+
+ by Laurent Siebenmann 1989-95
+
+ (in distribution since Winter 1991)
+
+
+ *******************************************************
+
+ --- THE DOCUMENTATION ---
+
+
+COMMAND SUMMARY
+
+ BoxedEPSF lets one integrate Encapsulated PostScript Files (EPSFs)
+into TeX documents by making them behave as TeX boxes --- using the
+commands in the following list. The user should promptly familiarize
+him/her self with the left alligned commands; the indented ones are
+less used.
+
+ %%% Commands for article header or style file
+ \input boxedeps.tex %% obligatory (except for LaTeX, see below)
+ \input boxedeps.cfg %% can replace next line:
+ \Set...EPSFSpecial %% e.g. \SetOzTeXEPSFSpecial
+ \ShowDisplacementBoxes%\HideDisplacementBoxes %%alternatives
+ \SetEPSFDirectory{<directory pathname>}
+ \SetDefaultEPSFScale{<scale in mils>}
+ \EmulateRokicki
+ %%% EPSF insertion
+ \BoxedEPSF{<filename> scaled <scale in mils>}
+ %% scaled ... is optional
+ \tBoxedEPSF{...} %% 3 variants:
+ \bBoxedEPSF{...}
+ \cBoxedEPSF{...}
+ \EPSFbox{...} %% like Rokicki's syntax:
+ \EPSFfile{...}
+ %%% Adjustments that may preceed each \BoxedEPSF...
+ \TrimTop{<percentage>}
+ \TrimLeft{<percentage>}
+ \TrimBottom{<percentage>}
+ \TrimRight{<percentage>}
+ \TrimBoundingBox{<percentage>}
+ \hSlide{<dimen>}
+ \vSlide{<dimen>}
+ \ForceWidth{<dimen>}
+ \EPSFxsize=<dimen>
+ \ForceHeight{<dimen>}
+ \EPSFysize=<dimen>
+ \ForceOn (cf.\ForceOff)
+
+ %%% Typical (minimal) Plain TeX example:
+
+ \input boxedeps.tex
+ \input boxedeps.cfg
+ \midinsert
+ \centerline{\BoxedEPSF{gdisk.eps}}
+ \endinsert
+ \bye
+
+This list can serve to locate details by string search. Some
+alternative older terminology is supported for compatibility (but not
+recommended); it is found inside boxedeps.tex.
+
+ *** LaTeX syntax variants ***
+
+ BoxedEPS is compatible with LaTeX (2.09 or 2e). No change of
+syntax is necessary.
+
+ However, those who use LaTeX to the exclusion of other
+TeX formats will find Alun Carr's "LaTeX wraper" boxedeps.sty
+helpful to bring BoxedEPS into line with LaTeX conventions.
+The following LaTeX syntax is valid as soon as the auxilliary file
+boxedeps.sty is available to LaTeX.
+
+\usepackage[<option list>]{boxedeps} %% loads package, sets options
+
+Then \input boxedeps.tex must be omitted and \input boxedeps.cfg
+also. The LaTeX option keywords with their Plain TeX equivalents
+are:
+
+ %% Driver support (use at most one)
+ epsf <==> \SetepsfEPSFSpecial
+ epsfmulti <==> \SetEPSFMultiSpecial
+ textures <==> \SetTexturesEPSFSpecial
+ unixcoop <==> \SetUnixCoopEPSFSpecial
+ niponunix <==> \SetNiponUnixEPSFSpecial
+ bechtolsheim <==> \SetBechtolsheimDVITPSEPSFSpecial
+ lis <==> \SetLisEPSFSpecial
+ rokicki <==> \SetRokickiEPSFSpecial
+ dvipsone <==> \SetDVIPSoneEPSFSpecial
+ dviwindow <==> \SetDVIWindowEPSFSpecial
+ directtex <==> \SetDirectTeXEPSFSpecial
+ cmactex <==> \SetCMacTeXEPSFSpecial
+ oztex <==> \SetOzTeXEPSFSpecial
+ oldoztex <==> \SetOldOzTeXEPSFSpecial
+ psprint <==> \SetPSprintEPSFSpecial
+ arbor <==> \SetArborEPSFSpecial
+ clark <==> \SetClarkEPSFSpecial
+ beebe <==> \SetBeebeEPSFSpecial
+ northlake <==> \SetNorthlakeEPSFSpecial
+ standard <==> \SetStandardEPSFSpecial %% (default!)
+
+ %% Displacement Boxes (use at most one)
+ showboxes <==> \ShowDisplacementBoxes %% (default!)
+ hideboxes <==> \HideDisplacementBoxes
+
+ %% Emulation of Rokicki's \epsfbox, \epsfxsize, \epsfysize
+ emulaterokicki <==> \EmulateRokicki
+
+ %%% Typical (minimal) LaTeX example:
+
+ \documentclass{article}
+ \usepackage[oztex,hideboxes]{boxedeps}
+
+ \begin{document}
+ \begin{figure}\BoxedEPSF{gdisk.eps}\end{figure}
+ \end{document}
+
+
+INTRODUCTION
+
+ BoxedEPSF is a highly portable package for insertion of EPSFs
+(Encapsulated PostScript Files) in TeX documents. It originated as
+a fraction of a larger less portable package for several graphics
+norms on the Mac (see BoxedArt.tex below) that was initially put
+together for the GUTenberg special year for graphics, 1989.
+BoxedEPSF was first posted in winter 1991, in response to Berthold
+Horn's plea on the net in late 1990 for a standard for EPSF
+integration, cf. his article in TUGboat 12 (1991) 377-381. The
+use of bitmaps for preview is a technical obstacle to such a
+standard and none has appeared since. BoxedEPSF is not the
+standard he was calling for, but it seems to accomplish nearly as
+much.
+
+ PostScript is currently the unchallenged high performance
+standard for electronic specification and typesetting of printed
+graphics, while TeX is the unchallenged high performance standard for
+the specification and typesetting of scientific manuscripts, minus
+graphics. The convenient integration of PostScript graphics in TeX
+manuscripts is clearly vital to the scientific publication process;
+the BoxedEPSF package is a link in the integration chain.
+
+ A PostScript printer is presumed to be the ultimate output device.
+Is this an unfortunate restriction? In practice not; such is the
+domination of PostScript printers. In addition, there are
+increasingly computer based PostScript interpreters able to pilot
+the screen and/or non-PostScript printers. (A new one
+for Macintosh is T-SCRIPT tscript@teletype.com.)
+
+ What of direct screen viewing? The Next-Step Graphical User
+Interface (GUI) uses Display PostScript, an offshoot of
+PostScript; no problem there. Another offshoot of PostScript is
+PDF used by Acrobat viewers. Ghostview is a PostScript viewer
+available on most unix workstations. The bigest chink in
+PostScript's claim to universal acceptance is that only a tiny
+proportion of GUIs exploit or even decently support PostScript.
+Speed has been a stumbling block. Consequently, screen viewing of
+PS graphics integrated in TeX frequently uses prefabricated
+bitmaps as we shall further discuss below.
+
+
+ The main task of BoxedEPSF is to make EPSFs (Encapsulated
+PostScript Files) behave for the TeX user like big characters or
+boxes. In contrast, the \special command, the TeX primitive through
+which such integration is normally accomplished, makes EPSFs behave
+like dimensionless points. This is Knuth's recommendation, because
+that permits TeX to typeset without any knowledge of the graphics
+file. The box-like behavior is obviously more desirable from the
+user's point of view. In the case of the EPSF norm, it is
+attainable because TeX is clever enough to be able to read the EPSF
+file to extract the dimensions of the bounding box of the graphics
+object described. These are normally located in a comment line in
+the header beginning "%%Bounding Box:" or better "%%HiResBounding
+Box:".
+
+ There are other packages that do the same essential job,
+notably psfig of Trevor Darrell(1987), and T. Rokicki's "epsf.tex"
+for his driver "dvips", but differences remain. This one is built,
+above all, for portability and hence makes LOWEST-COMMON-DENOMINATOR
+requirements on the driver. It does offer convenient adjustments
+that others may not, eg. box trimming, and, above all, ready-made
+adaptation to nearly all dvi-to-PostScript drivers.
+
+ The basic requirement of BoxedEPSF is a "dvi-to-PostScript"
+printer driver that for EPSF graphics implements in one way or
+another Knuth's \special protocol. This \special should implement
+scaling in some form since TeX cannot provide it. But translation
+(=pushing the graphics around) can be done by TeX, which is
+fortunate since some drivers (e.g. Textures' driver in versions <=
+1.4 approx) do not bother to provide a \special command executing
+translations.
+
+ Until a standard for \special integration of EPSFs is well
+established, BoxedEPSF will have to initialize the integration process
+by using a driver-specific command of the form: \Set...EPSFSpecial (or
+a corresponding LaTeX option in \usepackage[...]{boxedeps}). For
+example, \SetOzTeXEPSFSpecial will initialize for the driver used by
+OzTeX on Macintosh computers. (See a list of current alternatives
+below.) This command can be put in the author's typescript header or
+style file, but it is still better to put it in a configuration file
+--- see mention of boxedeps.cfg below --- replacing
+\Set...EPSFSpecial by \input boxedeps.cfg.
+
+ Then, the primary command
+
+ \BoxedEPSF{<filename> scaled <scale in mils>}
+
+scales by <scale in mils> the graphics object in the file <filename>
+and inserts it at the current ".dvi" insertion point as a TeX box of
+the dimensions of the bounding box scaled again by <scale in mils>.
+
+ A tiny EPS test file gdisk.eps given below will let you run
+trials. (Beware that many TeX screen previewers are still unable to
+let you preview the graphics; but any printer of the PostScript norm
+will let you run tests.)
+
+ --- <filename> A file specification. This may be a simple
+filename in case the file is in the default directory for TeX.
+
+ More generally (but les portably!!), it can be a file pathname.
+Better, one can separately specify the directory that will be the
+directory in which TeX looks thereafter for simple EPSF names, by
+typing
+
+ \SetEPSFDirectory{<directory pathname>}
+
+For example, on a Macintosh, \SetEPSFDirectory{HardDisk:MyArtFolder:}
+will direct TeX to the folder MyArtFolder of the volume HardDisk. And
+\SetEPSFDirectory{:YourArtFolder:} will direct TeX to the subfolder
+YourArtFolder of the directory that is the default directory for TeX.
+Similarly for unix systems but with "/" in place of ":".
+
+ Spaces in filenames or directory names are strictly forbidden
+(usually already by TeX and drivers); this package gives a warning.
+
+ For greater portability, please use in file names and directory
+names only letters, digits, and perhaps one period ".". Beware of
+conversions and confusions between upper and lower case letters.
+Unix is case sensitive, but most other systems not; DOS even forces
+to uppercase; while unix traditionally prefers lowercase. There is
+a consensus that, for portability, lowercase letters only should be
+used if at all possible, and failing that only uppercase.
+
+ Also for portability, follow the DOS 8+3 rule: =< 8
+characters before an otioonal period and =< 3 after. To respect this
+rule, public postings of BoxedEPSF, the macro file (for example)
+bears the name "boxedeps.tex".
+
+ [[To PC\DOS users: Slash / should replace backslash of the MSDOS
+world, since backslash will upset TeX; if / does not work try \\.]]
+
+ --- scaled <scale in mils> Optional. To conform to TeX syntax,
+and avoid decimals most of the time, the scale is specified in mils
+(=thousand'ths), rather than as a positive real number. (If you are a
+precision freak, don't hesitate to add decimal parts of a mil.)
+
+ If you specify no scale you get a default scale. This default
+scale can be changed from its initial value of 1000 (for the rest of
+the .tex file) by the command
+
+ \SetDefaultEPSFScale{<scale in mils>}
+
+ The scaling you select (however you do so) will always
+be corrected by the TeX magnification factor. Thus if you select
+scaling by 1000 mils at \magstep1 you in reality get scaling to 1200
+mils on the printed paper.
+
+ There is a rather different way to specify scaling (championed
+notably by Trevor Darrell since 1987); one can force width or height
+to a specified dimension, by one (not both) of the commands:
+
+ \ForceWidth{<dimen>}
+ \ForceHeight{<dimen>}
+
+This must precede the figure and normally applies to it alone. Any
+such command takes precedence over any scaling command that might be
+present. If you have two such commands, the last takes precedence.
+
+ This forcing will persist indefinitely if you type
+
+ \ForceOn
+
+and can then be stopped by
+
+ \ForceOff
+
+ There are some convenient uses of this "forced" dimensioning, for
+example:
+
+ a) To force neighboring figures to the same height or width.
+
+ b) To maintain the exact same height for a figure through
+minor revisions after TeX pagebreaks have been fixed.
+
+ c) Artists may rescale their originals when they revise;
+this will not affect the user if "forced" dimensioning is used.
+
+Incidentally, note that \ForceWidth{0.66\hsize} is perfectly
+legitimate; similarly for all dimension specifications.
+
+ On the other hand, scaling is the only right approach if you
+have a well proportioned line diagram with included labelling of a
+known point size. You scale to make the labels of about the same
+size as that of the printed text.
+
+ In actual practice, the "BoundingBox" posted in the EPSF is more
+often than often not far from what it should be, namely the least
+rectangle containing the ink that will print the graphic object; it
+tends to be somewhat larger. Thus, the \Trim... commands described
+below are provided to optionally correct the box to fit the object.
+Since such corrections require the human eye and some trial and error
+it is reasonable to cast about for tools that will instead
+automatically correct "BoundingBox" marked in the EPS file. (See for
+example the keywords ghostscript ane bb4gs.ps.)
+
+ For diagnostic purposes, one has:
+
+ \ShowDisplacementBoxes, \HideDisplacementBoxes
+
+to show (with a black frame), respectively hide, the corrected scaled
+and positioned bounding boxes. The physical term "displacement" is
+used to remind you that these are boxes that displace other boxes, like
+TeX character boxes (see the TeXbook Chap 11), or indeed any TeX box.
+In case you make the graphics neatly fit into this displacement box the
+term "bounding box image" would be justified, but just as for TeX
+characters, this is not always how things work out (cf. TeXbook p.63).
+
+ For the sake of users who do not have preview of their EPSFs
+the default has been set to \ShowDisplacementBoxes. It is
+demoralising to beginners to see nothing at all!
+
+ Before any individual \BoxedEPSF{...} command, one can insert
+commands to adjust the bounding box:
+
+ \TrimBoundingBox{...}
+ \TrimTop{...}
+ \TrimLeft{...}
+ \TrimBottom{...}
+ \TrimRight{...}
+
+ Each such command takes a percentage argument as in
+
+ \TrimTop{5pct}
+
+This means to trim off of the top of the BoundingBox five percent
+of its height. One must not forget the percentage units
+specification "pct". Indeed it is equally OK to specify a
+TeX dimension unit: pt, bp, cm, etc. For example
+
+ \TrimLeft{15bp}
+
+trims 15 big points (PostScript units) off of the left side of the
+original BoundingBox (not the image on paper).
+
+ Both percentage and dimension units remain valid if the user
+subsequently changes scale on paper.
+
+ The use of percent units is the best choice. Typically the user
+sees a scaled image and so cannot perceive dimensions on the art
+source file. Also, percentage specifications will remain valid if the
+artist changes the scale of his source. In practice, even the user may
+want to dramatically increase the source file scale to enhance the
+precision of bitmapped previews supplied automatically by an art
+program such as Adobe Illustrator, or he may reduce scale to make the
+bitmaps smaller.
+
+ The names of these trimming commands say what they do; note
+that they do NOT mask off part of the object when the box becomes
+too small; thus trimming is NOT is commonly referred to as "clipping".
+
+
+ TeX is pretty good at shunting boxes around. But the command to
+*slide* an image around without changing its displacement box nor
+shunting neighboring boxes is not readily accessible. So we provide:
+
+ \hSlide{...}
+ \vSlide{...}
+
+which respectively slide horizontally to the right and vertically down
+in dimension units of the TeX page, NOT the artist's page.
+
+
+ A good order of steps for implanting a graphics object is to trim
+using percentage units, then scale, and finally, slide, or shunt using
+TeX tools.
+
+
+ By default, the box is produced vertically "centered" using \vcenter.
+This seems most agreeable in case of linefigures in text --- though
+mostly it does not matter. The "height" mentioned above is the sum of
+the height and the depth of this box (with rare exceptions mentioned
+immediately below).
+
+ The two other obvious choices of baseline are also available:
+
+ --- \tBoxedEPSF{...} baseline at top as for washing hanging on a
+clothesline.
+
+ --- \bBoxedEPSF{...} baseline at bottom as for trucks on a highway
+
+ The default choice is
+
+ --- \cBoxedEPSF{...} baseline centered as for khebabs on a skewer.
+
+More precisely, it is centered on the "axis" of mathematics in prose,
+which for computer modern ten point system is 2.5pt above the
+baseline; this makes \cBoxedEPSF very convenient for insertion of
+small "linefigures" in prose; for example, $\left(\BoxedEPSF{mylinefig
+scaled 300}\right)$ should neatly fit "mylinefig" between parentheses.
+
+ Beware, however, that TeX's refusal of negative heights or depths
+for boxes leads to surprising results with \cBoxedEPSF when very tiny
+linefigures occur (so tiny they do not reach the baseline). For example,
+if the scaling is zero, the height is the math axis height, and the depth
+is zero! If such extreme cases interest you, experiment with \hrule
+\cBoxedEPSF{myfig scaled 0} \hrule. No such subtleties occur with
+\tBoxedEPSF and \bBoxedEPSF!
+
+ You can change the default behavior to "baseline at top" (for example)
+by the command
+
+ \let \BoxedEPSF=\tBoxedEPSF
+
+
+
+ ****** Some file trickery ******
+
+ (A) The first trick is standard; if several authors on different
+platforms are collaborating on one TeX typescript, each should use
+boxedeps.cfg to specify the DVI-to-PS driver and not a command
+\Set...EPSFSpecial Then provided each
+author preserves and protects his boxedeps.cfg all other parts of the
+".tex" typescript can be maintained identical for all authors.
+
+ (B) The following comments respond to requests and suggestions of
+Douglas Gray-Stephens <gray@SCR.SLB.COM>.
+
+ Ad hoc user-macros can perform file searchs that might at
+first sight seem beyond the scope of BoxedEPSF.
+
+ 1) Graphics objects to be reused can be macros and they need not be in
+a specific directory. Since \SetEPSFDirectory respects TeX grouping,
+one can set out a definition as follows:
+
+ \def\ourlogo#1{\bgroup\SetEPSFDirectory{<logopathname>}%
+ \BoxedEPSF{<logoname> scaled #1}\egroup}
+
+Then one inserts the boxed logo using \ourlogo{<scale>}. The directory
+for EPSFs (if any) is momentarily changed but is the same before and
+after \ourlogo{<scale>} is used.
+
+ If just a few graphics objects are to be reused often, economy
+and speed are best assured by storing the graphics object is a TeX box.
+Suppose for example that a logo is to be used on each page. Then one
+can prepare the box by
+
+ \newbox\logobox
+ \bgroup\SetEPSFDirectory{<logopathname>
+ \global\setbox\logobox=%
+ \hbox{\BoxedEPSF
+ {<logo file name> scaled <scale in mils>}}\egroup
+ \gdef\Logo{\copy\logobox}
+
+Thereafter, \Logo places the logo very quickly and can be reused
+at no extra cost to TeX.
+
+ 2) It is possible to use simultaneously several graphics directories by
+further exploiting TeX grouping. Suppose, for example, that one wants
+an extra directory <graphpath> for scientific graphs. Then one can
+define \BoxedGraph behaving just like \BoxedEPSF but always using
+directory <graphpathname>, as follows:
+
+ \def\BoxedGraph#1{\bgroup\SetEPSFDirectory{<graphpathname>}%
+ \BoxedEPSF{#1}\egroup}
+
+\BoxedGraph is insensitive to occurences elsewhere of \SetEPSFDirectory.
+
+ 3) A useful special case of this approach gives a "wildcard" macro:
+
+ \def\BoxedEPSFx#1{\bgroup\SetEPSFDirectory{}%
+ \BoxedEPSF{#1}\egroup}
+
+(This of course assumes one has used or will use
+\SetEPSFDirectory{<pathname>}, for otherwise \BoxedEPSFx will behave
+much like \BoxedEPSF.) One can use either "full" or "relative" file
+specifications in
+
+ \BoxedEPSFx{<filespec> [scaled <scale>]}
+
+Here "full" means no separator out front, and "relative"
+means separator out front. The separator is the character "/" for
+unix or PC and ":" for Macintosh. In the relative case, your current
+directory behaves as root; normally, this is the directory of
+the .tex file you launched.
+
+ Example for the Macintosh:
+
+ \BoxedEPSFx{:art:monalisa.eps}
+
+This searches in "art" a subdirectory of the default directory
+for an EPS file called monalisa.eps.
+
+
+
+ ****** Selecting PostScript printer drivers ******
+
+ The obstacle to portability is a lack of standard syntax for
+the \special commands; they vary from driver to driver. This is
+overcome by using a local standard "fake special" within boxedeps.tex,
+and relating each driver to it.
+
+ This local BoxedEPSF standard is a two-argument macro
+
+ \EPSFSpecial#1#2
+
+where #1 is <file spec> and #2 is <scale in mils>. A different
+definition is given for each driver. For example, for Textures, the
+user types (in his article header or in boxedeps.cfg):
+
+ \SetTexturesEPSFSpecial
+
+and this package then institutes essentially the definition:
+
+ \gdef\EPSFSpecial#1#2{\relax
+ \special{postscriptfile #1 scaled #2}}%
+
+Actually, it is not quite that simple, because we allow decimal
+scaling factors like 726.7 (mils) while Textures <=1.6 required integer
+values.
+
+ Definitions for most known drivers are provided:
+
+ %% \SetepsfEPSFSpecial %% ******* will work for many:
+ %% ----- dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetEPSFMultiSpecial %% ******* may work for more
+ %% \SetTexturesEPSFSpecial %% Textures
+ %% \SetUnixCoopEPSFSpecial %% dvi2ps early unix
+ %% \SetNiponUnixEPSFSpecial %% dvi2ps j-version
+ %% \SetBechtolsheimDVI2PSEPSFSpecial and
+ %% \SetBechtolsheimDVITPSEPSFSpecial %% by S.P.Bechtolsheim
+ %% \SetLisEPSFSpecial %% dvi2ps by Tony Lis
+ %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki
+ %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y same as
+ %% \SetDVIWindowEPSFSpecial %% DVIWindow of Y&Y
+ %% \SetDirectTeXEPSFSpecial %% DirectTeX by Wilfried Ricken
+ %% \SetCMacTeXEPSFSpecial %% CMacTeX by Tom Kiffe
+ %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.7) by Andrew Trevorrow
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX (1.42--1.6x)
+ %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow
+ %% --- also for OzTeX versions <= 1.41 !!
+ %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS
+ %% \SetClarkEPSFSpecial %% dvitops by James Clark
+ %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe
+ %% \SetNorthlakeEPSFSpecial %% Northlake Software
+ %% \SetStandardEPSFSpecial %% Nonexistant: Placebo used
+
+and others will be on request --- see appendix.
+
+ --------------------
+
+ OzTeX note June 1994: OzTeX 1.7 revised its \special for
+EPSF insertion to place the lower left corner of the bounding box
+at the TeX insertion point; \SetOzTeXEPSFSpecial is revised in
+consequence. Users of OzTeX versions 1.4.2 to 1.6 must now either
+update to OzTeX1.7, or use \SetOzTeXEPSFSpecial\PSOrigintrue or
+\SetOldOzTeXEPSFSpecial in place of \SetOzTeXEPSFSpecial. Otherwise
+the updated boxedeps.tex will badly misplace EPSFs.
+
+ Since OzTeX's own \special syntax has changed so often,
+where archival ".tex" files are involved, consider using
+\SetepsfEPSFSpecial based on a stable syntax of Rokicki; this will
+work with OzTeX in versions >= 1.7.
+
+ --------------------
+
+
+ ****** Compatibility with T. Rokicki's integration package ******
+
+ For users of Rokicki's integration package epsf.tex
+attached to his DVI-to-PS driver dvips, we support the following
+alternative syntax.
+
+ \EPSFbox or \EPSFfile equivalent to \bBoxedEPSF.
+ \EPSFxsize=126pt equivalent to \ForceWidth{126pt}
+ \EPSFysize=76pt equivalent to \ForceHeight{76pt}
+
+This compatibility makes it straightforeward to move a manuscript
+prepared with the most basic features of epsf.tex to a TeX site with
+any other driver.
+
+ Rokicki uses all-lowercase commands (epsf for EPSF); hence
+his epsf.tex can be loaded along with boxedeps.tex without
+conflict. If, on the other hand, you want BoxedEPSF to accept the
+lowercase syntax and execute the three commands in place of
+epsf.tex, you can type \EmulateRokicki.
+
+ The (undocumented) \special syntax of dvips employed by
+epsf.tex has gradually become widespread in other drivers; it is
+this syntax on which \SetepsfEPSFSpecial above is based.
+
+ --------------------
+
+
+ ****** Known Problems ******
+
+ 1) The process of reading bounding boxes may prove annoyingly slow
+on smaller computers when inserts are numerous. This problem will
+be lessened if you can make the "BoundingBox" comment one of the
+first in each PostScript file. The larger BoxedArt.tex package for
+Macintosh users provides a complete cure through use of a "graphics
+specification file", which can be read quickly.
+
+ 2) TeX permanently uses up the string space needed to record the
+(full) name of each EPS file it opens. If you are short on string
+space use succinct EPS file names like F1, F2, ... and put your TeX
+file in your graphics directory to make the default directory
+coincide with the graphics directory. Then \BoxedEPSF{F1} will use
+up just two string characters.
+
+ 3) Early Textures problem (not in versions >=1.4??): PostScript
+files that have a resource fork may upset the Textures driver.
+Typically, nothing after the figure will print. This can be cured
+by deleting the resource fork. For a PostScript file of
+Illustrator88, the preview graphics are in a PICT resource; try
+deleting all resources EXCEPT this PICT.
+
+ 4) A common driver problem: EPS files seldom include the
+PostScript fonts they need. Usually this does not cause a problem,
+because (hopefully) the required font is already present in the
+printer, or at least will be downloaded to the printer for the job
+in which the EPSF is embedded.
+
+ However, if necessary the driver should attempt to locate and
+include the fonts needed. Unfortunately, few do. (Textures >= 1.7 and
+DVIPSONE are admirable exceptions.) The *user* is then obliged to
+intervene to assure the presence of the fonts. Fortunately an EPSF
+header comment
+
+ %%DocumentFonts: ...
+
+usually tells exactly which fonts are needed. Here are two
+ways to download them:
+
+ (a) Use a utility to download the fonts before the printing job is
+run. (For Macintosh look for the name "LaserWriter [Font]
+Utility".)
+ (b) Artificially employ in the TeX manuscript all the fonts
+required for the EPS file; they are listed in the header. To
+avoid adding an extra page to the output one can have the extra
+material printed off-page using say
+
+ \rightlap{\smash\hbox{\kern\hsize <text using fonts for EPSFs>}}
+
+This approach (b) makes the TeX document portable without special
+instructions. However (b) sometimes fails; for example if the EPS
+file uses CM/PS type1 Adobe fonts while the main text uses CM fonts of
+the classical metafont sort.
+
+ (c) Where figure labels are concerned, one can usually outright
+avoid this font inclusion problem by puting the labels in a TeX
+overlay, using, for example, the utility "labelfig.tex"
+(often posted as a companion to boxedeps.tex).
+
+ Laurent Siebenmann
+ Mathematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
+ lcs@topo.math.u-psud.fr
+
+
+ Fax number: 33-1-6941-6348
+
+
+ REFERENCES
+
+ The following may give you leads to alternative solutions.
+
+ --- PSFIG a package by Trevor Darrell (for at least two drivers)
+available by anonymous ftp from whitechapel.media.mit.edu
+(18.85.0.124) in ./psfig or linc.cis.upenn.edu (130.91.6.8) in the
+directory ./dist/psfig.
+
+ --- Merging PostScript Illustrations: Gerald Roylance 1987, 1989,
+see MIT AI Laboratory Working Paper 299a; this package supports dvi2ps
+and DVILASER/PS.
+
+ --- dvips and epsf.tex by by T. Rokicki <rokicki@Neon.Stanford.EDU>
+
+ --- Une meilleure integration du graphisme Macintosh, par Laurent
+Siebenmann, Cahiers GUTenberg, No. 4 (Dec 1989), pages 29-38. The
+native Macintosh grapics norm is called PICT. TeX has not been able to
+read PICT resources and files, as the resources are not files and the
+files are "binary". Nevertheless, good integration under Textures (and
+subsequently other Macintosh TeX implementations) has become possible
+with the help of a preprocessor "ArtDealer" and the notion of a
+"graphics description file". The strong points of this approach are
+speed and compactness. Portability poses some problems. These ideas are
+implemented by the parallel package consisting of BoxedArt.tex,
+BoxedArt.doc, and ArtDealer available (hopefully) from the same sources
+as this package.
+
+ --- Nicolas Jungers <EDITEX@BUCLLN11.BITNET> two postings in the
+GUTenberg forum <GUT@FRULM11.BITNET> 9 Nov 90 and 17 Nov 90. [A good
+"do-it-yourself" kit!]
+
+ --- Michael Ferguson <mike@inrs-telecom.uquebec.ca> espouses the
+\ForceHeight{...} approach in Cahiers GUTenberg, No. 3 (May 1989); for
+many drivers, it does not require TeX to read the EPS file. N. Beebe
+indicates that his macros are available for DVIALW.
+
+
+APPENDIX: A FIRST QUICK TEST OF BoxedEPSF
+
+ Hopefully you have found your PostScript printer driver in the
+above list of \Set...EPSFSpecial commands. In that case, try the
+following test to check that this package is working
+
+ ------ cut here
+
+ %%%% test.tex for Plain TeX; by puting
+ %% everything from \input to ZZ into the middle of a LateX file.
+
+ \input boxedeps.tex
+ \Set...EPSFSpecial %%%% complete this line!!!!!!!!
+ \ShowDisplacementBoxes%\HideDisplacementBoxes %%alternatives
+ \null\vfill\vfill
+ AA\BoxedEPSF{gdisk.eps scaled 500}ZZ
+ %% lower case "8+3" convention for file names
+ \bye
+
+ %%%% test.tex for LaTeX (2e)
+ \documentclass{article}
+ \usepackage[standard,showboxes]{boxedeps}
+ %% change "standard" to indicate your PostScript printer driver
+ %% or omit and rely on boxedeps.cfg configuration
+ %% showboxes --> hideboxes for final version
+ \documentclass{article}
+ \usepackage[oztex,hideboxes]{boxedeps}
+
+ \begin{document}
+ \begin{figure}AA\BoxedEPSF{gdisk.eps scaled 500}ZZ\end{figure}
+ \end{document}
+
+ ------ cut here
+ %!PS-Adobe-2.0 EPSF-1.2
+ %%Title: gdisk.eps
+ %%Remark: A simple test file
+ %%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+ %%Pages: 0
+ %%BoundingBox: 216 216 432 432
+ %%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+ newpath
+ 4.5 4.5 1.5 0 360 arc
+ closepath
+ 0.9 setgray
+ fill
+
+ ------ cut here
+
+ The files test.tex and gdisk.eps should be in the same
+directory.
+
+ A grey disk should appear fitting snuggly between AA and ZZ.
+It should be neatly bounded by a square (the displacement box).
+
+ Once this test is working you should be able to elaborate and
+test all features.
+
+ If it does not work, examine the TeX log for helpful
+comments.
+
+ If the one fault is that the box is blank on printing, test
+settings for other drivers. In case you have no clue about your
+printer driver, a sequence of commands of the form
+
+\Set...EPSFSpecial \string\Set...EPSFSpecial
+\vfill\vfill
+ AA\BoxedEPSF{gdisk.eps scaled 500}ZZ\vfill\eject
+
+will conveniently try out *all* possibilities in a single TeX run.
+
+
+ APPENDIX: HOW TO GET SUPPORT FOR YOUR DRIVER
+
+ To get support for your dvi to PostScript printer driver,
+please send the \special syntax required to insert a file myfile.eps
+with scaling 76 percent!
+
+ For example, the answer for the ArborText DVILASER/PS driver
+was:
+
+ \special{ps: epsfile myfile.eps 760}
+
+And that was (almost) enough to let me program \SetArborEPSFSpecial.
+
+ One more scrap of information is essential. Some \special's
+for EPSFs place the lower left corner of the (scaled) bounding box at
+the TeX insertion point, and others place the lower left corner of the
+artist's page at the insertion point. No other choice seems consistent
+with Knuth's recommendations in the TeXbook. Textures and ArborTeX
+belong to the first type, while OzTeX (versions <=1.6x) and Rokicki's
+dvips belong to the second. The first type of driver must read the
+"bounding box comment" in the EPS File header. Please report on the
+basis of documentation and/or experimentation, which type is in
+question. An experimental test routine is provided below.
+
+ In general, some testing and/or driver documentation may be
+needed to clear up lingering questions. For example, are decimals
+allowed in in the scaling specification? For ArborTeX I believe the
+answer is no.
+
+ An information form is included below for those who would like
+to see BoxedEPSF adapted to another driver.
+
+
+ APPENDIX: AN INFORMATION KIT FOR OTHER DRIVERS
+
+ -------------------------------cut
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% spectest.tex for Plain TeX
+ %%% Test to discover which point in
+ % the graphics page (plane) your \special
+ % command distinguishes and identifies to
+ % the TeX insertion point.
+ %
+ % --- Put the file gsquare.eps into the same folder as
+ % TeX and this testfile. Hopefully this will make
+ % gsquare.eps accessible to the printer driver.
+ %
+ % --- Complete the \special{... gsquare.eps ...} command below
+ % as your driver documentation recommends for printing
+ % the EPSF gsquare.eps --- without any scaling, or other
+ % refinement. For example
+ % \special{ps: epsfile gsquare.eps 1000}
+ % is suitable for the ArborteX driver.
+ %
+ % --- Typeset this file
+ %
+ % --- Print the resulting .dvi file using your driver.
+ %
+ % INTERPRETATION:
+ %
+ % If the black box lies in the square, the
+ % distinguished point is the lower, left-hand corner of the
+ % PostScript bounding box.
+ %
+ % If the black box lies outside the square, the
+ % distinguished point is the lower, left-hand corner of the
+ % artist's page, i.e. the the PostScript origin.
+ %
+ % If the square is missing, your driver has probably not found
+ % the EPS file gsquare.eps, or you have formulated the \special
+ % command incorrectly. Follow driver instructions more
+ % carefully.
+ %
+ % --- report results to Laurent Siebenmann
+ % <lcs@topo.math.u-psud.fr>
+ % on the special reply "reply.doc" form provided below.
+ %
+ %
+
+ \null
+ \vfill
+ \vskip -1 in
+ \moveright 1 in \vbox{\hrule height 1 in width 1 in}
+ \vskip 1 in
+ \special{... gsquare.eps ...}%% please carefully adjust this
+ \eject
+ \bye
+
+ %% end of spectest.tex
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ -------------------------------cut
+%!PS-Adobe-2.0 EPSF-1.2
+ %%Title: gsquare.eps
+ %%Remark: Another simple test file
+ %%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+ %%Pages: 0
+ %%BoundingBox: 216 216 432 432
+ %%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+
+ newpath
+ 3 3 moveto
+ 3 6 lineto
+ 6 6 lineto
+ 6 3 lineto
+ closepath
+ 0.8 setgray
+ fill
+
+ -------------------------------cut
+%!PS-Adobe-2.0 EPSF-1.2
+ %%Title: heat.eps
+ %%Remark: Another simple test file
+ %%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+ %%Pages: 0
+ %%BoundingBox: 216 216 432 432
+ %%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+ newpath
+ 4.5 4.5 1.5 0 360 arc
+ closepath
+ 0.9 setgray
+ fill
+
+ /Times-Italic findfont
+ .8 scalefont
+ setfont
+ 3.75 4.3 moveto
+ 0 setgray
+ (Heat) show
+
+ -------------------------------cut
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% reply.doc %%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ INFORMATION FORM for adaptation of BoxedEPSF
+ to other "dvi-to-PostScript" printer drivers
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Please provide information on the following items:
+
+ --- Name and email address(es) of correspondent.
+
+ --- Driver information: Name, version, date, copyright, vendor,
+computer(s) served, price etc.
+
+ --- Syntax required to print the EPS File gsquare.eps scaled to
+76 percent using a command of the form \special{... gsquare.eps
+...}. Is scaling to exactly 76.33 percent available?
+
+ --- More info on \special.
+
+ --- Location of the distinguished point. (Report result of test
+in spectest.tex above).
+
+ --- Source(s) of your EPSFs.
+
+ --- Do you progam TeX? PostScript?
+
+ A trial adaptation to your driver will be returned with
+an update of BoxedEPSF. Thank you for cooperating!
+
+ Laurent Siebenmann
+ Mathematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
+ lcs@topo.math.u-psud.fr
+
+ Fax number: 33-1-6941-6348
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ -------------------------------cut
+
+
+
+ APPENDIX. HOW ARE THE EPS GRAPHICS FILES BEING CREATED?
+
+ While everyone admires PostScript graphics, few TeX users are
+entirely happy with their tools for producing the EPSFs. As soon
+as your integration problem has been disposed of, this one will be
+back to haunt you! Here are a few notes that may help.
+
+ a) Illustrator on the Mac by Adobe Corp is a MacDraw-like program
+that uses the EPSF norm. It is favored by professionals since it is
+geared for highest quality output.
+
+ b) DrawOver 1.0 copyright Michael Everest 1986, is a converter to
+EPSF from the PICT graphics norm of the Macintosh, a norm for which
+there are many excellent drawing programs such as MacDraw. It was
+distributed with Illustrator 88 on the Mac. To get preview, and
+sometimes even to print, its output has to be "validated" by passage
+through Illustrator. The original DrawOver is aging inasmuch as it
+handles the PICTs of more recent MacDraw versions less and less
+well. One does best by using PICT files (re)generated by MacDraw
+versions anterior to MacDrawII. Illustrator 3.0 included an
+updated DrawOver. From Adobe, there is also a converter Streamline
+for PICT, TIFF and MacPaint files.
+
+ c) LaserWriter >= 8.1.1 of 1994 provides an option to "print"
+almost any graphics objects to file of EPSF type. This approach
+probably going to become the dominant one for Mac users. It has been
+available on ftp.apple.com in directory dts and is distributed with
+Systems >+ 7.5. Some bugs remain to be eliminated. In a pinch consider
+converting the more reliable "PS job" files to EPSF form using bb.ps
+or bb4gs.ps as described below. Pioneering users should be sure that
+the graphics object well within the page being used; one way is to
+use an big page as provided say by the Agfa printer configuration
+file.
+
+ d) fig and xfig by Micah Beck, Cornell University
+<beck@cs.cornell.edu> are MacDraw-like programs for unix and unix
+X-windows, for which a translator transfig exists to EPSF norm.
+
+ e) Naked PostScript code. PostScript is a beautiful language, and the
+three Adobe manuals are very helpful.
+
+ f) Aldus Freehand on the Macintosh: see Berthold K.P. Horn's
+comments below; cf Aldus Intellidraw below.
+
+ g) Canvas (Denaba Software) on Macintosh in versions from 1991
+(3.0) on will have the ability to save a file in EPS format (and
+also PICT and Illustrator 88 formats etc., the most impressive list
+so far).
+
+ h) Classic MacDraw, MacDraw Pro, indeed all versions from 1991 of
+MacDraw on Macintosh, on will hopefully have the ability to save a
+file in EPS as well as PICT format. At the same time Apple is
+producing more and more non-PostScript printers...
+
+ i) CricketDraw and CricketGraph
+
+ *****************************************
+
+ Several users have kindly extended and updated the above list!
+
+ Berthold K.P. HORN mentioned many possibilities:
+
+(*) Aldus Freehand on the Mac is a more sophisticated tool for
+generating graphic illustrations than Adobe Illustrator. Both are
+constrained to basically two-dimensional patterns. Both can
+produce output in EPS form. [[See the "export" menu item, and use
+the simple or Mac version of EPS format, not the IBMPC version that
+yields a partly binary file. The Mac version includes a PICT
+resource containing a bitmap visible in the Textures or OzTeX preview.
+Aldus Freehand freehand also imports PICT resources via the Mac
+clipboard, and this provides an interesting alternative to
+DrawOver. This conversion sometimes handles MacDrawII PICT
+files better than DrawOver. Freehand, unlike Illustrator, has
+its own binary file format.]]
+
+(*) Micrografx Designer on the PC is a more sophisticated tool for
+generating graphics illustrations than Adobe Illustrator. It is the
+PC's answer to `MacEnvy', since it provides a Windows based tool that
+is about as good as any on the Mac. Designer is also constrained to
+basically two-dimensional patterns. It can produce output in EPS
+form.
+
+(*) There are also CAD/CAM applications that run on high end PC's, Sun
+workstations that can handle `solid modelling' of three dimensional
+objects, but they are an order of magnitude more expensive, so few
+people have access to them.
+
+(*) Illustrate on the Symbolics LispMachine was one of the first
+drawing programs and is still used quite a bit. It can produce output
+in EPS form. Very similar features to the other 2-D illustration
+applications mentioned above.
+
+(*) Screen Dumps. Another useful source of graphic illustrations are
+screen dumps available on LispMachine, Windows on PC, and on Mac in
+EPS form. OF course, they are in bitmap form so very limited in
+quality and not resolution-independent, but useful for illustrating
+program operations.
+
+(*) Paint Programs. On the Mac and the PC there are programs that
+instead of manipulating curves and areas work directly with bitmaps.
+The output can be in EPS form. But same drawback as screendumps. Not
+used much.
+
+ Max CALVIANI <fisica@astrpd.unipd.it> mentions
+
+(**) Mongo or Supermongo ... superb ... produce a .ps file ... on
+vax/vms, also under Unix. They are copyrighted, Mongo costs approx
+500 USD, SuperMongo only 250 USD.
+
+ Antonio POSSOLO in Seattle <antonio@atc.boeing.com> makes
+recommendations for unix:
+
+An excellent tool to generate postscript figures in Unix is the S
+programming environment for data analysis and graphics,
+originally from AT&T Bell Labs, and S-PLUS, a superset [of S]
+from Statistical Sciences, Inc. (Seattle, Washington, USA). This
+is not a drawing tool in the sense of Adobe's Illustrator, or
+MacDraw: instead, it is driven by issuing drawing commands. S is
+described in R.A. Becker, J.M. Chambers, & A.R. Wilks (1988)
+"The New S Language", Wadsworth & Brooks/Cole, and you will find
+there many examples of its capabilities to produce beautiful
+pictures (note the postscript() command, in particular, as means
+to generate postscript output).
+
+=============================
+Aldus (now Adobe) Intellidraw
+(report by Alun J. Carr <ajcarr@ccvax.ucd.ie> Nov 1995)
+
+An excellent cross-platform (Mac and Windows) drawing package. It is
+extremely flexible, if a little non-intuitive at times, and is capable of
+producing top quality illustrations. On the Mac, Intellidraw can import
+PICT, TIFF, and EPS graphics, although only the PICT variety are editable
+in the program. Similarly, it can export in a few formats: PICT, EPS,
+Illustrator 88, and Illustrator 1.1. I highly recommend this application,
+particularly at its low price (less than 150 Irish pounds when I bought
+version 2).
+
+=============================
+A hint on generating EPS from Cricket Graph III on the Mac
+(report by Alun J. Carr <ajcarr@ccvax.ucd.ie> Nov 1995)
+
+Using LaserWriter 8.3, printing to an EPS file from Cricket Graph produces
+a very wrong BoundingBox. I have found that the following approach produces
+an excellent EPS file:
+
+1) In Cricket Graph `Save As...' a PICT.
+
+2) Change the creator of the PICT to ttxt (I use Type Resolve 2.0.1, which
+is a very handy drag-and-drop utility).
+
+3) Open the PICT file in SimpleText (Apple's current TeachText replacement).
+
+4) Print to an EPS file using the LaserWriter 8.3 driver.
+
+The bounding box is very close to being correct (usually within a
+millimetre or two), and the Postscript code is of high quality and very
+standard.
+
+
+
+ ****************************************
+
+
+Determining Bounding Boxes via bb.ps and bb4gs.ps
+
+ Many postscript files originally created without regard to
+EPSF standards will successfully function as EPSFs if they are
+provided with a suitable Bounding Box comment in the header. Ned
+Bachelder has distributed a PostScript "header" file bb.ps since 1990
+(modified by Bernie Cosell <cosell@bbn.com>) that will cause a
+following Postscript file to have its bounding box marked
+numerically and graphically on printing.
+
+ William L. Kath <kath@nwu.edu> has distributed a
+version modified for ghostscript (see below) called bb4gs.ps; it
+is included in the unix ghostscript distribution.
+
+
+Ghostscript.
+
+ These computer-based Postscript interpreters with
+electronic rather than physical output were initially programmed by
+Peter L. Deutsch, and have become of increasing interest for TeX
+preview.
+
+ Ghostscript's public FTP site for all platforms is:
+ftp.cs.wisc.edu in the directory: /pub/ghost.
+
+ These Postscript interpreters are certainly of great
+interest for PostScript programming.
+
+ The preparation of preview bitmaps for EPSFs is
+another important use.
+
+ The frustration engendered by using PostScript graphics
+without preview has been major obstacle to the use of PostScript
+with TeX. The Adobe standard for Macintosh previewing of
+encapsulated PostScript graphics is part of the EPSF standard
+available from ftp adobe.com, and involves addition of a bitmap as
+a PICT resource number 256. [There is a variant for PC supported by
+DVIWindo of Y&Y and by DVIWin (on CTAN).]
+
+
+Building Macintosh Preview for EPSFs.
+
+ [Similar remarks apply to PC's under MSWindows.]
+
+ There is shareware utility called epsConvert by Sam Weiss
+1993-- (currently $25, Artemis software). It will convert many EPS
+files to a format valid for Adobe Illustrator, which in turn will
+provide the PICT bitmap preview. In conjunction with LaserWriter >=
+8.1.1, it will also provide vectorized PICT resource preview.
+
+ Ghostscript can be adapted to provide the PICT resource
+just mentioned (and Bounding box comment) in a mechanized way.
+(Is batch mode still missing? And automatic BoundingBox
+insertion on demand?)
+
+PS2EPS+ by Peter Lerup <ptl@automation.alfalaval.se>
+ (reported by Alun J. Carr Nov 1995)
+
+This is a freeware application for the Mac, available from any
+Info-Mac mirror in the directory /gst/grf/ under the name
+ps-to-eps-plus-10.hqx. It uses Peter Lerup's own Mac port of
+Ghostscript (v2.5) to interpret EPS files that have no preview,
+and it then allows a PICT preview to be attached in Mac or PC
+preview format, and also for the image to be saved separately as
+a PICT or TIFF graphic. A very handy tool.
+
+ --------------
+
+
+SOMMAIRE FRANCAIS: boxedeps.tex d'efinit des macro-commandes
+ qui permettent d'int'egrer dans un document TeX des
+ objets graphiques de norme EPSF, tout en accordant
+ `a chacun le statut d'une bo^ite TeX ayant
+ les bonnes dimensions. La contribution principale
+ de cet utilitaire est de faire cela d'une fa_con universelle,
+ c'est a dire de fa_con `a pouvoir commod'ement
+ servir avec tout pilote d'imprimante de norme
+ PostScript --- malgr'e l'absence d'une norme
+ pour \special.
+
+
diff --git a/macros/generic/boxedeps/boxedeps.doc-old b/macros/generic/boxedeps/boxedeps.doc-old
new file mode 100644
index 0000000000..d202bfa8c9
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.doc-old
@@ -0,0 +1,1107 @@
+%%%%% boxedeps.doc
+ %%
+ %%% POSTINGS:
+ %% --- ftp matups.matups.fr
+ %% This is the master copy in 1995.
+ %% Locate the full package on the CTAN servers
+ %% by using (while connected) the command
+ %% quote site index boxedeps
+ %%%% NEWS (4-95):
+ %% * High resolution bounding boxes are used when available.
+ %% * Log file epsf.lst reports epsf files integrated;
+ %% use it as an inventory for exporting.
+ %%%% NEWS (1-95):
+ %% * \SetepsfEPSFSpecial works for the
+ %% several drivers that support the particular special syntax
+ %% first supported by Rokicki in dvips and used in his epsf.tex.
+ %% * Experimental feature: \SetEPSFMultiSpecial
+ %% works also for Textures. Intended to create ".dvi" files
+ %% for posting on the internet that will print with graphics
+ %% insertions on all major operating systems. Some drivers
+ %% produce spurious error reports but print correctly.
+
+ *******************************************************
+
+
+ ********* The BoxedEPSF Utility **********
+
+ by Laurent Siebenmann 1989-95
+
+ (in distribution since Winter 1991)
+
+
+ *******************************************************
+
+ --- THE DOCUMENTATION ---
+
+
+SYNOPSIS
+
+ BoxedEPSF lets one integrate Encapsulated
+PostScript Files (EPSFs) into TeX documents by making them
+behave as TeX boxes --- using the following commands:
+
+ \input boxedeps.tex %% lower case "8+3" convention for file names
+ \Set...EPSFSpecial %% e.g. \SetOzTeXEPSFSpecial
+ \BoxedEPSF{<filename> scaled <scale in mils>}
+ \tBoxedEPSF{...}
+ \bBoxedEPSF{...}
+ \cBoxedEPSF{...}
+ \EPSFbox{...}
+ \EPSFfile{...}
+ \EmulateRokicki
+ \ShowDisplacementBoxes
+ \HideDisplacementBoxes
+ \SetEPSFDirectory{<directory pathname>}
+ \SetDefaultEPSFScale{<scale in mils>}
+ \ForceWidth{<dimen>}
+ \EPSFxsize=<dimen>
+ \ForceHeight{<dimen>}
+ \EPSFysize=<dimen>
+ \ForceOn
+ \ForceOff
+ \TrimTop{<dimen>}
+ \TrimLeft{<dimen>}
+ \TrimBottom{<dimen>}
+ \TrimRight{<dimen>}
+ \TrimBoundingBox{<dimen>}
+ \hSlide{<dimen>}
+ \vSlide{<dimen>}
+
+This list can serve to locate details by string search.
+The user should promptly familiarize him/her self with the left
+alligned commands; the indented ones are less used.
+
+
+INTRODUCTION
+
+ BoxedEPSF is a highly portable package for insertion of
+EPSFs (Encapsulated PostScript Files) in TeX documents. It is a
+fraction of a larger less portable package for several graphics
+norms on the Mac (see BoxedArt.tex below) that was initially put
+together for the GUTenberg special year for graphics, 1989.
+BoxedEPSF was first posted in winter 1991, in response to Bert
+Horn's plea on the net in late 1990 for a standard for EPSF
+integration, cf. his article in TUGboat 12 (1991) 377-381. The use
+of bitmaps for preview is a technical obstacle to such a standard
+and none has appeared since. BoxedEPSF is not the standard Bert was
+calling for, but it seems to accomplish nearly as much.
+
+ PostScript is currently the unchallenged high performance
+standard for electronic specification and typesetting of printed
+graphics, while TeX is the unchallenged high performance standard for
+the specification and typesetting of scientific manuscripts, minus
+graphics. The convenient integration of PostScript graphics in TeX
+manuscripts is clearly vital to the scientific publication process.
+BoxedEPSF is a link in the integration chain.
+
+ The main task of BoxedEPSF is to make EPSFs (Encapsulated
+PostScript Files) behave for the TeX user like big characters or
+boxes. In contrast, the \special command, the TeX primitive through
+which such integration is normally accomplished, makes EPSFs behave
+like dimensionless points. This is Knuth's recommendation, because
+that permits TeX to typeset without any knowledge of the graphics
+file. The box-like behavior is obviously more desirable from the
+user's point of view. In the case of the EPSF norm, it is
+attainable because TeX is clever enough to be able to read the EPSF
+file to extract the dimensions of the bounding box of the graphics
+object described. These are normally located in a comment line in
+the header beginning "%%Bounding Box:" or better "%%HiResBounding
+Box:".
+
+ There are other packages that do the same essential job,
+notably psfig of Trevor Darrell(1987), and T. Rokicki's "epsf.tex" for
+his driver "dvips", but differences remain. This one is built above all
+for portability and hence makes LOWEST-COMMON-DENOMINATOR
+requirements on the driver. It should be easy to understand to the
+point that with a bit of luck, a texpert will be able to port it to a
+new driver in a few hours. It does provide a few useful things
+that others may not, eg. box fitting, and, above all, ready-made
+adaptation to nearly all dvi-to-PostScript drivers.
+
+ It is well known that, in a spirit of self reliance, texperts
+tend to do adhoc programming to integrate their graphics. See for
+example N. Jungers' <ANORSU@BUCLLN11.BITNET> posting on the
+GUTenberg bulletin board dated 17 November 1990 for a good
+explanation of the principles. A bit of understanding of TeX and
+PostScript programming can go a long way. If this is your
+inclination, perusal of Trevor Darrell psfig package is also highly
+recommended.
+
+ It seems to me there is room for packages which require no
+tinkering with any programming language --- whether it be for
+everyday use or for porting --- even at the cost of being heavier.
+Most users have neither time nor taste for more adventurous
+approaches.
+
+ The basic requirement of BoxedEPSF is a "dvi-to-PostScript"
+printer driver that for EPSF graphics implements in one way or another
+Knuth's \special protocol. This \special should implement scaling in
+some form since TeX cannot provide it. But translation (=pushing the
+graphics around) can be done by TeX, which is fortunate since some
+drivers (e.g. Textures' driver) do not bother to provide a \special
+command executing translations.
+
+ Until a standard for \special integration of EPSFs is well
+established, BoxedEPSF will have to be initialize the integration
+process by using a driver-specific command of the form:
+\Set...EPSFSpecial. For example, \SetOzTeXEPSFSpecial will initialize
+for the driver used by OzTeX on Macintosh computers. (See a list of
+current alternatives below.) This command can be put in the author's
+typescript header or style file, but it is still better to put it in a
+configuration file (see mention of boxedeps.cfg below).
+
+ Then, the primary command
+
+ \BoxedEPSF{<filename> scaled <scale in mils>}
+
+scales by <scale in mils> the graphics object in the file <filename>
+and inserts it at the current ".dvi" insertion point as a TeX box of
+the dimensions of the bounding box scaled again by <scale in mils>. A
+tiny EPSF test file gdisk.eps given below will let you run trials.
+(Beware that in 1991 many TeX screen previewers are unable to let you
+see the graphics; but any printer of the PostScript norm will let you
+run tests.)
+
+ --- <filename> A file specification. This may be a simple
+filename in case the file is in the default directory for TeX. More
+generally, it can be a file pathname. Better, one can separately
+specify the directory that will be the directory in which TeX looks
+thereafter for simple EPSF names, by typing
+
+ \SetEPSFDirectory{<directory pathname>}
+
+For example, on a Macintosh,
+\SetEPSFDirectory{HardDisk:MyArtFolder:} will direct TeX to the
+folder MyArtFolder of the volume HardDisk. And
+\SetEPSFDirectory{:YourArtFolder:} will direct TeX to the subfolder
+YourArtFolder of the directory that is the default directory for TeX.
+Similarly for unix systems but with "/" in place of ":".
+
+ Spaces in filenames or directory names are strictly forbidden
+(usually already by TeX and drivers); this package gives a warning.
+
+ For greater portability, use in file names and directory names
+only letters, digits, and perhaps one period ".". Beware of
+conversions and confusions between upper and lower case letters.
+Unix is case sensitive, but most other systems not; DOS even forces
+to uppercase; while unix traditionally prefers lowercase. There is a
+consensus that for portability only lowercase letters should be used
+if at all possible, and failing that only uppercase. Thus all public
+postings of BoxedEPSF the macro file should bear the name
+"boxedeps.tex".
+
+ [[To experts: On an experimental basis, current versions of
+BoxedEPSF are a bit more liberal in allowing five punctuation marks
+punctuation: :,;?! and also any character that has catcode 11
+(=letter) or 12 (=other). The backslash is used as a directory separator
+in the PC world; thus BoxedEPSF lets one use backslash provided
+backslash is coded as \\ inside the arguments of \SetEPSFDirectory{...}
+and \BoxedEPSF{...}. I have been told that the slash / can
+often replace backslash in the MSDOS world, so this backslash feature
+may not be essential. This \\ is of course a marco; one can
+hopefully use other TeX macros in these arguments provided they
+expand under \edef without mishap.]]
+
+ --- scaled <scale in mils> Optional. To conform to TeX syntax,
+and avoid decimals most of the time, the scale is specified in mils
+(=thousand'ths), rather than as a positive real number. (If you are a
+precision freak, don't hesitate to add decimal parts of a mil.)
+
+ If you specify no scale you get a default scale. This default
+scale can be changed from its initial value of 1000 (for the rest of
+the .tex file) by the command
+
+ \SetDefaultEPSFScale{<scale in mils>}
+
+ The scaling you select (however you do so) will always
+be corrected by the TeX magnification factor. Thus if you select
+scaling by 1000 mils at \magstep1 you in reality get scaling to 1200
+mils on the printed paper.
+
+ There is a rather different way to specify scaling (championed
+notably by Trevor Darrell since 1987); one can force width or height
+to a specified dimension, by one (not both) of the commands:
+
+ \ForceWidth{<dimen>}
+ \ForceHeight{<dimen>}
+
+This must precede the figure and normally applies to it alone. Any
+such command takes precedence over any scaling command that might be
+present. If you have two such commands, the last takes precedence.
+
+ This forcing will persist indefinitely if you type
+
+ \ForceOn
+
+and can then be stopped by
+
+ \ForceOff
+
+ As W. Neumann pointed out to me, there are some unique uses for
+this "forced" dimensioning, for example:
+
+ a) To force neighboring figures to the same height or width.
+
+ b) To maintain the exact same height for a figure through
+minor revisions after TeX pagebreaks have been fixed.
+
+Incidentally, note that \ForceWidth{0.66\hsize} is perfectly
+legitimate; similarly for all dimension specifications.
+
+ On the other hand, scaling is the only right approach if you
+have a well proportioned line diagram with included labelling of a
+known point size. You scale to make the labels of optimal size.
+
+ In actual practice (notably on Macintosh computers), the
+Bounding Box posted in the EPSF is often not what it should be,
+namely the least rectangle containing the ink that will print the
+graphic object; it tends to be somewhat larger. Thus, tools are provided
+to correct the box to fit the object.
+
+ For diagnostic purposes, one has:
+
+ \ShowDisplacementBoxes, \HideDisplacementBoxes
+
+to show (with a black frame), respectively hide, the corrected scaled
+and positioned bounding boxes. The physical term "displacement" is
+used to remind you that these are boxes that displace other boxes,
+like TeX character boxes (see the TeXbook Chap 11), or indeed any TeX
+box. In case you make the graphics neatly fit into this displacement
+box the term "bounding" box would be justified, but just as for TeX
+characters, this is not necessarily so (cf. TeXbook p.63). These
+commands are used intensively; some alternative older
+terminology (less recommended) can be found inside boxedeps.tex.
+
+ For the sake of users who do not have preview of their EPSFs
+the default has been set to \ShowDisplacementBoxes. It is
+demoralising to beginners to see nothing at all!
+
+ Before any individual \BoxedEPSF{...} command, one can insert
+commands to adjust the bounding box:
+
+ \TrimBoundingBox{...}
+ \TrimTop{...}
+ \TrimLeft{...}
+ \TrimBottom{...}
+ \TrimRight{...}
+
+Each takes a dimension argument referring to the PostScript (artist's)
+coordinates; with no scaling. Their names say what they do; just
+remember that they do NOT mask off part of the object when the box
+becomes too small; thus trimming is NOT "clipping".
+
+ TeX is pretty good at shunting boxes around. But the command
+to *slide* an image around without changing its box nor shunting
+neighboring boxes is not readily accessible. So we provide:
+
+ \hSlide{...}
+ \vSlide{...}
+
+which respectively slide horizontally to the right and vertically down
+in dimension units of the TeX page, NOT the artist's page.
+
+ A good order of steps for implanting a graphics object is to
+scale, then trim. Finally, slide, or shunt using TeX tools.
+
+ By default, the box produced has a baseline (roughly!) through
+the middle like the letter "g"; it is constructed using TeX's \vcenter.
+This seems most agreeable in case of linefigures in text --- though
+mostly it does not matter. The "height" mentioned above is the sum
+of the height and the depth of this box (with rare exceptions
+mentioned immediately below).
+
+ The two other obvious choices of baseline are also available:
+
+ --- \tBoxedEPSF{...} baseline at top as for washing hanging on a
+clothesline.
+
+ --- \bBoxedEPSF{...} baseline at bottom as for trucks on a highway
+
+ The default choice is
+
+ --- \cBoxedEPSF{...} baseline centered as for khebabs on a skewer.
+
+More precisely, it is centered on the "axis" of mathematics in prose,
+which for computer modern ten point system is 2.5pt above the baseline;
+this makes \cBoxedEPSF very convenient for insertion of small
+"linefigures" in prose; for example, $\left(\BoxedEPSF{mylinefig
+scaled 300}\right)$ should neatly fit "mylinefig" between
+parentheses.
+
+ Beware however that TeX's refusal of negative heights or depths
+for boxes leads to surprising results with \cBoxedEPSF when very tiny
+linefigures occur (so tiny they do not reach the baseline). For example,
+if the scaling is zero, the height is the math axis height, and the depth
+is zero! If such extreme cases interest you, experiment with \hrule
+\cBoxedEPSF{myfig scaled 0} \hrule. No such subtleties occur with
+\tBoxedEPSF and \bBoxedEPSF!
+
+ You can change the default behavior to "baseline at top" (for example)
+by the command
+
+ \let \BoxedEPSF=\tBoxedEPSF
+
+
+
+ ****** Some file trickery ******
+
+ (A) The first trick is standard but it solves an important problem
+mentioned by Georg Denk <denk@mathematik.tu-muenchen.de> concerning
+co-authors sharing a develloping ".tex" plus ".eps" document in a
+heterogeneous networked environment. As they use quite different
+drivers, the above documentation seems to suggest that before
+compiling, an author must reset his driver declaration, say from
+\SetTexturesEPSFSpecial to \SetBechtolsheimDVITPSEPSFSpecial. This is
+a pain which can easily be avoided, as follows. The authors agree to
+each set up a file "boxedeps.cfg" in his TeX inputs directory that
+contains just the command \Set...EPSFSpecial appropriate to his
+driver; then in the the ".tex" source file the variable command
+\Set...EPSFSpecial is replaced by the invariable command \input
+boxedeps.cfg. This tells each TeX which is its appropriate driver. A
+model boxedeps.cfg file with some advice may be included in the
+BoxedEPSF distribution.
+
+ (B) The following comments respond to requests and suggestions of
+Douglas Gray-Stephens <gray@SCR.SLB.COM>.
+
+ Ad hoc user-macros can perform file searchs that might at
+first sight seem beyond the scope of BoxedEPSF.
+
+ 1) Graphics objects to be reused can be macros and they need not be in
+the a specific directory. Since \SetEPSFDirectory respects TeX grouping,
+one can set out a definition as follows:
+
+ \def\ourlogo#1{\bgroup\SetEPSFDirectory{<logopathname>}%
+ \BoxedEPSF{<logoname> scaled #1}\egroup}
+
+Then one inserts the boxed logo using \ourlogo{<scale>}. The directory
+for EPSFs (if any) is momentarily changed but is the same before and
+after \ourlogo{<scale>} is used.
+
+ If just a few graphics objects are to be reused often, economy
+and speed are best assured by storing the graphics object is a TeX box.
+Suppose for example that a logo is to be used on each page. Then one
+can prepare the box by
+
+ \newbox\logobox
+ \bgroup\SetEPSFDirectory{<logopathname>
+ \global\setbox\logobox=%
+ \hbox{\BoxedEPSF
+ {<logo file name> scaled <scale in mils>}}\egroup
+ \gdef\Logo{\copy\logobox}
+
+Thereafter, \Logo places the logo very quickly and can be reused.
+
+ 2) It is possible to use simultaneously several graphics directories by
+further exploiting TeX grouping. Suppose, for example, that one wants
+an extra directory <graphpath> for scientific graphs. Then one can
+define \BoxedGraph behaving just like \BoxedEPSF but always using
+directory <graphpathname>, as follows:
+
+ \def\BoxedGraph#1{\bgroup\SetEPSFDirectory{<graphpathname>}%
+ \BoxedEPSF{#1}\egroup}
+
+\BoxedGraph is insensitive to occurences elsewhere of \SetEPSFDirectory.
+
+ 3) A useful special case of this approach gives a "wildcard" macro:
+
+ \def\BoxedEPSFx#1{\bgroup\SetEPSFDirectory{}%
+ \BoxedEPSF{#1}\egroup}
+
+(This of course assumes one has used or will use
+\SetEPSFDirectory{<pathname>}, for otherwise \BoxedEPSFx will behave
+much like \BoxedEPSF.) One can use either "full" or "relative" file
+specifications in
+
+ \BoxedEPSFx{<filespec> [scaled <scale>]}
+
+Here "full" means no separator out front, and "relative"
+means separator out front. The separator is the character "/" for
+unix and ":" for Macintosh. In the relative case, your current
+directory behaves as root; normally, this is the directory of
+the .tex file you launched.
+
+ Example for the Macintosh:
+
+ \BoxedEPSFx{:art:monalisa.eps}
+
+This searches in "art" a subdirectory of the default directory
+for an EPS file called monalisa.eps.
+
+
+
+ ****** Changing PostScript printer drivers ******
+
+ The obstacle to portability is a lack of standard syntax for
+the \special commands; they vary from driver to driver. This is
+overcome by using a local standard "fake special" within boxedeps.tex,
+and relating each driver to it.
+
+ This local BoxedEPSF standard is a two-argument macro
+
+ \EPSFSpecial#1#2
+
+where #1 is <file spec> and #2 is <scale in mils>. A different
+definition is given for each driver. For example, for Textures, the
+user types
+
+ \SetTexturesEPSFSpecial
+
+and this package then institutes essentially the definition:
+
+ \gdef\EPSFSpecial#1#2{\relax
+ \special{postscriptfile #1 scaled #2}}%
+
+Actually, it is not quite that simple, because we allow decimal
+scaling factors like 726.7 (mils) while Textures <=1.6 required integer
+values.
+
+ Definitions for most known drivers are provided:
+
+ %% \SetepsfEPSFSpecial %% ******* will work for many:
+ %% ----- dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetEPSFMultiSpecial %% ******* may work for more
+ %% \SetTexturesEPSFSpecial %% Textures
+ %% \SetUnixCoopEPSFSpecial %% dvi2ps early unix
+ %% \SetBechtolsheimDVI2PSEPSFSpecial and
+ %% \SetBechtolsheimDVITPSEPSFSpecial %% by S.P.Bechtolsheim
+ %% \SetLisEPSFSpecial %% dvi2ps by Tony Lis
+ %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki
+ %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y same as
+ %% \SetDVIWindowEPSFSpecial %% DVIWindow of Y&Y
+ %% \SetDirectTeXEPSFSpecial %% DirectTeX by Wilfried Ricken
+ %% \SetCMacTeXEPSFSpecial %% CMacTeX by Tom Kiffe
+ %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.7) by Andrew Trevorrow
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX (1.42--1.6x)
+ %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow
+ %% --- also for OzTeX versions <= 1.41 !!
+ %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS
+ %% \SetClarkEPSFSpecial %% dvitops by James Clark
+ %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe
+ %% \SetNorthlakeEPSFSpecial %% Northlake Software
+ %% \SetStandardEPSFSpecial %% Nonexistant: Placebo used
+
+and others will be on request --- see appendix.
+
+ --------------------
+
+ OzTeX note June 1994: OzTeX 1.7 revised its
+\special for EPSF insertion to place the lower left corner of the
+bounding box at the TeX insertion point; \SetOzTeXEPSFSpecial is
+revised in consequence. Users of OzTeX 1.4.2--1.6 must now either
+update to OzTeX1.7, or use \SetOzTeXEPSFSpecial\PSOrigintrue in
+place of \SetOzTeXEPSFSpecial; otherwise the updated boxedeps.tex
+will badly misplace EPSFs.
+
+ Since OzTeX's own \special syntax has changed so often, where
+archival ".tex" files are involved, consider using \SetepsfEPSFSpecial
+based on a stable syntax of Rokicki; this will work with OzTeX in
+versions =>1.7.
+
+ --------------------
+
+
+ ****** Compatibility with T. Rokicki's integration package ******
+
+ For users of Rokicki's integration package epsf.tex
+attached to his C driver dvips, we support the following
+alternative syntax.
+
+ \EPSFbox or \EPSFfile equivalent to \bBoxedEPSF.
+ \EPSFxsize=126pt equivalent to \ForceWidth{126pt}
+ \EPSFysize=76pt equivalent to \ForceHeight{76pt}
+
+This compatibility makes it straightforeward to move a manuscript
+prepared with the most basic features of epsf.tex to a TeX site with
+any other driver.
+
+ Rokicki uses all-lowercase commands (epsf for EPSF); hence his
+epsf.tex can be loaded along with boxedeps.tex without conflict. If,
+on the other hand, you want BoxedEPSF to accept the lowercase syntax
+and execute the three commands in place of epsf.tex, you can type
+\EmulateRokicki.
+
+ The (undocumented) \special syntax of dvips employed by epsf.tex
+has gradually become widespread in other drivers; it is this syntax on
+which \SetepsfEPSFSpecial above is based.
+
+ --------------------
+
+
+ ****** Known Problems ******
+
+ 1) The process of reading bounding boxes may prove annoyingly slow on
+smaller computers when inserts are numerous. This problem will be
+lessened if you can make the "BoundingBox" comment one of the first in
+each PostScript file. The larger BoxedArt.tex package for Macintosh
+users provides a complete cure through use of a "graphics
+specification file", which can be read quickly.
+
+ 2) TeX permanently uses up the string space needed to record the
+(full) name of each EPS file it opens. If you are short on string
+space use succinct EPS file names like F1, F2, ... and put your TeX
+file in your graphics directory to make the default directory coincide
+with the graphics directory. Then \BoxedEPSF{F1} will use up just two
+string characters.
+
+ 3) Early Textures problem (not in versions >=1.4??): PostScript files
+that have a resource fork may upset the Textures driver. Typically,
+nothing after the figure will print. This can be cured by deleting the
+resource fork. For a PostScript file of Illustrator88, the preview
+graphics are in a PICT resource; try deleting all resources EXCEPT
+this PICT.
+
+ 4) A common driver problem: EPS files seldom include the PostScript
+fonts they need. Usually this does not cause a problem, because
+(hopefully) the required font is already present in the printer, or at
+least will be downloaded to the printer for the job in which the EPSF
+is embedded.
+
+ However, if necessary the driver should attempt to locate and
+include the fonts needed. Unfortunately, few do. (Textures >= 1.7 is
+an admirable exception.) The *user* is then obliged to intervene to
+assure the presence of the fonts. Fortunately an EPSF header comment
+
+ %%DocumentFonts: ...
+
+usually tells exactly which fonts are needed. Here are two
+ways to download them:
+
+ (a) Use a utility to download the fonts before the printing job is
+run. (For Macintosh look for the name "LaserWriter [Font]
+Utility".)
+ (b) Artificially employ in the TeX manuscript all the fonts
+required for the EPS file; they are listed in the header. To
+avoid adding an extra page to the output one can have the extra
+material printed off-page using say
+
+ \rightlap{\smash\hbox{\kern\hsize <text using fonts for EPSF>}}
+
+This approach (b) makes the TeX document portable without special
+instructions. However (b) sometimes fails; for example if the EPS
+file uses CM/PS type1 Adobe fonts while the main text uses CM fonts of
+classical metafont type.
+
+ (c) Where figure labels are concerned, one can usually outright
+avoid this font inclusion problem by puting the labels in a TeX
+overlay, using, for example, the utility "labelfig.tex" that is normally
+posted as a companion to boxedeps.tex.
+
+ Laurent Siebenmann
+ Mathematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
+ lcs@topo.math.u-psud.fr
+
+
+ Fax number: 33-1-6941-6348
+
+
+ REFERENCES
+
+ The following may give you leads to alternative solutions.
+
+ --- PSFIG a package by Trevor Darrell (for at least two drivers)
+available by anonymous ftp from whitechapel.media.mit.edu
+(18.85.0.124) in ./psfig or linc.cis.upenn.edu (130.91.6.8) in the
+directory ./dist/psfig.
+
+ --- Merging PostScript Illustrations: Gerald Roylance 1987, 1989,
+see MIT AI Laboratory Working Paper 299a; this package supports dvi2ps
+and DVILASER/PS.
+
+ --- dvips and epsf.tex by by T. Rokicki <rokicki@Neon.Stanford.EDU>
+
+ --- Une meilleure integration du graphisme Macintosh, par Laurent
+Siebenmann, Cahiers GUTenberg, No. 4 (Dec 1989), pages 29-38. The
+native Macintosh grapics norm is called PICT. TeX has not been able
+to read PICT resources and files, as the resources are not files and
+the files are "binary". Nevertheless, good integration under Textures
+is possible with the help of a preprocessor "ArtDealer" and the notion
+of a "graphics description file". The strong points of this approach
+are speed and compactness. Portability poses some problems. These
+ideas are implemented by the parallel package consisting of BoxedArt.tex,
+BoxedArt.doc, and ArtDealer available (hopefully) from the same sources as
+this package.
+
+ --- Nicolas Jungers <EDITEX@BUCLLN11.BITNET> two postings in the
+GUTenberg forum <GUT@FRULM11.BITNET> 9 Nov 90 and 17 Nov 90. [A good
+"do-it-yourself" kit!]
+
+ --- Michael Ferguson <mike@inrs-telecom.uquebec.ca> espouses the
+\ForceHeight{...} approach in Cahiers GUTenberg, No. 3 (May 1989); it
+does not require TeX to read the EPS file. N. Beebe indicates that his
+macros are available for DVIALW.
+
+
+APPENDIX: A FIRST QUICK TEST OF BoxedEPSF
+
+ Hopefully you have found your PostScript printer driver in the
+above list of \Set...EPSFSpecial commands. In that case, try the
+following test to check that this package is working
+
+ ------ cut here
+
+ %%%% test.tex for Plain TeX; can be adapted to LaTeX, by puting
+ %% everything from \input to ZZ into the middle of a LateX file.
+ %\magnification=1200 %% uncomment later
+ \input boxedeps.tex %% lower case "8+3" convention for file names
+ \Set...EPSFSpecial %%%% complete this line!!!!!!!!
+ \ShowDisplacementBoxes%\HideDisplacementBoxes %%alternatives
+ \null\vfill\vfill
+ AA\BoxedEPSF{gdisk.eps scaled 500}ZZ
+
+ \bye
+
+ ------ cut here
+ %!PS-Adobe-2.0 EPSF-1.2
+ %%Title: gdisk.eps
+ %%Remark: A simple test file
+ %%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+ %%Pages: 0
+ %%BoundingBox: 216 216 432 432
+ %%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+ newpath
+ 4.5 4.5 1.5 0 360 arc
+ closepath
+ 0.9 setgray
+ fill
+
+ ------ cut here
+
+ The files test.tex and gdisk.eps should be in the same
+directory.
+
+ A grey disk should appear fitting snuggly between AA and ZZ.
+It should be neatly bounded by a square (the displacement box).
+
+ Once this test is working you should be able to elaborate and
+test all features.
+
+
+
+ APPENDIX: HOW TO GET SUPPORT FOR YOUR DRIVER
+
+ To get support for your dvi to PostScript printer driver,
+please send the \special syntax required to insert a file myfile.eps
+with scaling 76 percent!
+
+ For example, the answer for the ArborText DVILASER/PS driver
+was:
+
+ \special{ps: epsfile myfile.eps 760}
+
+And that was (almost) enough to let me program \SetArborEPSFSpecial.
+
+ One more scrap of information is essential. Some \special's
+for EPSFs place the lower left corner of the (scaled) bounding box at
+the TeX insertion point, and others place the lower left corner of the
+artist's page at the insertion point. No other choice seems consistent
+with Knuth's recommendations in the TeXbook. Textures and ArborTeX
+belong to the first type, while OzTeX (versions <=1.6x) and Rokicki's
+dvips belong to the second. The first type of driver must read the
+"bounding box comment" in the EPS File header. Please report on the
+basis of documentation and/or experimentation, which type is in
+question. An experimental test routine is provided below.
+
+ In general, some testing and/or driver documentation may be
+needed to clear up lingering questions. For example, are decimals
+allowed in in the scaling specification? For ArborTeX I believe the
+answer is no.
+
+ An information form is included below for those who would like
+to see BoxedEPSF adapted to another driver.
+
+
+ APPENDIX: AN INFORMATION KIT FOR OTHER DRIVERS
+
+ -------------------------------cut
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% spectest.tex for Plain TeX
+ %%% Test to discover which point in
+ % the graphics page (plane) your \special
+ % command distinguishes and identifies to
+ % the TeX insertion point.
+ %
+ % --- Put the file gsquare.eps into the same folder as
+ % TeX and this testfile. Hopefully this will make
+ % gsquare.eps accessible to the printer driver.
+ %
+ % --- Complete the \special{... gsquare.eps ...} command below
+ % as your driver documentation recommends for printing
+ % the EPSF gsquare.eps --- without any scaling, or other
+ % refinement. For example
+ % \special{ps: epsfile gsquare.eps 1000}
+ % is suitable for the ArborteX driver.
+ %
+ % --- Typeset this file
+ %
+ % --- Print the resulting .dvi file using your driver.
+ %
+ % INTERPRETATION:
+ %
+ % If the black box lies in the square, the
+ % distinguished point is the lower, left-hand corner of the
+ % PostScript bounding box.
+ %
+ % If the black box lies outside the square, the
+ % distinguished point is the lower, left-hand corner of the
+ % artist's page, i.e. the the PostScript origin.
+ %
+ % If the square is missing, your driver has probably not found
+ % the EPS file gsquare.eps, or you have formulated the \special
+ % command incorrectly. Follow driver instructions more
+ % carefully.
+ %
+ % --- report results to Laurent Siebenmann
+ % <lcs@topo.math.u-psud.fr>
+ % on the special reply "reply.doc" form provided below.
+ %
+ %
+
+ \null
+ \vfill
+ \vskip -1 in
+ \moveright 1 in \vbox{\hrule height 1 in width 1 in}
+ \vskip 1 in
+ \special{... gsquare.eps ...}%% please carefully adjust this
+ \eject
+ \bye
+
+ %% end of spectest.tex
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ -------------------------------cut
+%!PS-Adobe-2.0 EPSF-1.2
+ %%Title: gsquare.eps
+ %%Remark: Another simple test file
+ %%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+ %%Pages: 0
+ %%BoundingBox: 216 216 432 432
+ %%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+
+ newpath
+ 3 3 moveto
+ 3 6 lineto
+ 6 6 lineto
+ 6 3 lineto
+ closepath
+ 0.8 setgray
+ fill
+
+ -------------------------------cut
+%!PS-Adobe-2.0 EPSF-1.2
+ %%Title: heat.eps
+ %%Remark: Another simple test file
+ %%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+ %%Pages: 0
+ %%BoundingBox: 216 216 432 432
+ %%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+ newpath
+ 4.5 4.5 1.5 0 360 arc
+ closepath
+ 0.9 setgray
+ fill
+
+ /Times-Italic findfont
+ .8 scalefont
+ setfont
+ 3.75 4.3 moveto
+ 0 setgray
+ (Heat) show
+
+ -------------------------------cut
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% reply.doc %%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ INFORMATION FORM for adaptation of BoxedEPSF
+ to other "dvi-to-PostScript" printer drivers
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Please provide information on the following items:
+
+ --- Name and email address(es) of correspondent.
+
+ --- Driver information :Name, version, date, copyright, vendor,
+computer(s) served, price etc.
+
+ --- Syntax required to print the EPS File gsquare.eps scaled to 76
+percent using a command of the form \special{... gsquare.eps ...}. Is
+scaling to exactly 76.33 percent available?
+
+ --- More info on \special.
+
+ --- Location of the distinguished point. (Report result of test in
+spectest.tex above).
+
+ --- Source(s) of your EPSFs.
+
+ --- Do you progam TeX? PostScript?
+
+ A trial adaptation to your driver will be returned with
+an update of BoxedEPSF. Thank you for cooperating!
+
+ Laurent Siebenmann
+ Mathematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
+ lcs@topo.math.u-psud.fr
+
+ Fax number: 33-1-6941-6348
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ -------------------------------cut
+
+
+
+ APPENDIX. HOW ARE THE EPS GRAPHICS FILES BEING CREATED?
+
+ While everyone admires PostScript graphics, few TeX users are
+entirely happy with their tools for producing the EPSFs. As soon
+as your integration problem has been disposed of, this one will be
+back to haunt you! Here are a few notes that may help.
+
+ a) Illustrator 88 on the Mac by Adobe Corp is a MacDraw-like
+program that uses the EPSF norm. Although in some respects rustic,
+it is favored by professionals since it is geared for highest
+quality output. Illustrator 3.0 is an update of 1990.
+
+ b) DrawOver 1.0 copyright Michael Everest 1986, is a converter to
+EPSF from the PICT graphics norm of the Macintosh, a norm for which
+there are many excellent drawing programs such as MacDraw. It is
+distributed with Illustrator 88 on the Mac. To get preview, and
+sometimes to print, its output has to be "validated" by passage
+through Illustrator. The original DrawOver is aging inasmuch as it
+handles the PICTs of more recent MacDraw versions less and less
+well. One does best by using PICT files (re)generated by MacDraw
+versions anterior to MacDrawII. Illustrator 3.0 included an
+updated DrawOver. From Adobe, there is also a converter Streamline
+for PICT, TIFF and MacPaint files.
+
+ c) Macintosh output to LaserWriter printers is PostScript code, and
+can be diverted into a file. This file cannot be used as is, but a
+header file can be added which with a few other changes produces a
+(bulky) EPSF. See the macps converter of unix, or OzTeX or the
+$20 shareware Mac package AddLPrep copyright 1988 by SoftWare 101,
+15151 Old Ranch road, Los Gatos CA. The output is I believe
+equivalent at similar resolution to what the Macintosh-LaserWriter
+combination produces. However, starting from the same PICT file,
+method (a) often gives better results!
+
+ d) fig and xfig by Micah Beck, Cornell University
+<beck@cs.cornell.edu> are MacDraw-like programs for unix and unix
+X-windows, for which a translator transfig exists to EPSF norm.
+
+ e) Naked PostScript code. PostScript is a beautiful language, and the
+three Adobe manuals are very helpful.
+
+ f) Aldus Freehand on the Macintosh: see Berthold K.P. Horn's
+comments below.
+
+ g) Canvas (Denaba Software) on Macintosh in versions from 1991 (3.0)
+on will have the ability to save a file in EPS format (and also PICT and
+Illustrator 88 formats etc., the most impressive list so far).
+
+ h) Classic MacDraw, MacDraw Pro, indeed all versions from 1991 of
+MacDraw on Macintosh, on will hopefully have the ability to save a file
+in EPS as well as PICT format. At the same time Apple is producing
+more and more non-PostScript printers...
+
+ i) LaserWriter 8.1.1 of 1993 provides an option to "print" almost any
+graphics objects to file of EPSF type. This approach probably going to
+become the dominant one for Mac users. It has been available on
+ftp.apple.com in directory dts and is ditributed with System 7.5.
+Bounding boxes do not yet behave correctly in all cases, and many other
+bugs remain to be eliminated. Perhaps not yet ripe for general use as of
+early 1994. In a pinch consider converting the more reliable "PS job"
+files to EPSF form using bb.ps or bb4gs.ps as described below.
+Pioneering users should be sure that the graphics object well within the
+page being used; one way is to use an big page as provided say by the
+Agfa printer configuration file.
+
+
+ *****************************************
+
+ Several users have kindly extended and updated the above list!
+
+ Berthold K.P. HORN mentioned many possibilities:
+
+(*) Aldus Freehand on the Mac is a more sophisticated tool for
+generating graphic illustrations than Adobe Illustrator. Both are
+constrained to basically two-dimensional patterns. Both can
+produce output in EPS form. [[See the "export" menu item, and use
+the simple or Mac version of EPS format, not the IBMPC version that
+yields a partly binary file. The Mac version includes a PICT
+resource containing a bitmap visible in the Textures or OzTeX preview.
+Aldus Freehand freehand also imports PICT resources via the Mac
+clipboard, and this provides an interesting alternative to
+DrawOver. This conversion sometimes handles MacDrawII PICT
+files better than DrawOver. Freehand, unlike Illustrator, has
+its own binary file format.]]
+
+(*) Micrografx Designer on the PC is a more sophisticated tool for
+generating graphics illustrations than Adobe Illustrator. It is the
+PC's answer to `MacEnvy', since it provides a Windows based tool that
+is about as good as any on the Mac. Designer is also constrained to
+basically two-dimensional patterns. It can produce output in EPS
+form.
+
+(*) There are also CAD/CAM applications that run on high end PC's, Sun
+workstations that can handle `solid modelling' of three dimensional
+objects, but they are an order of magnitude more expensive, so few
+people have access to them.
+
+(*) Illustrate on the Symbolics LispMachine was one of the first
+drawing programs and is still used quite a bit. It can produce output
+in EPS form. Very similar features to the other 2-D illustration
+applications mentioned above.
+
+(*) Screen Dumps. Another useful source of graphic illustrations are
+screen dumps available on LispMachine, Windows on PC, and on Mac in
+EPS form. OF course, they are in bitmap form so very limited in
+quality and not resolution-independent, but useful for illustrating
+program operations.
+
+(*) Paint Programs. On the Mac and the PC there are programs that
+instead of manipulating curves and areas work directly with bitmaps.
+The output can be in EPS form. But same drawback as screendumps. Not
+used much.
+
+ Max CALVIANI <fisica@astrpd.unipd.it> mentions
+
+(**) Mongo or Supermongo ... superb ... produce a .ps file ... on
+vax/vms, also under Unix. They are copyrighted, Mongo costs approx 500
+USD, SuperMongo only 250 USD.
+
+ Antonio POSSOLO in Seattle <antonio@atc.boeing.com> makes
+recommendations for unix:
+
+An excellent tool to generate postscript figures in Unix is the S
+programming environment for data analysis and graphics,
+originally from AT&T Bell Labs, and S-PLUS, a superset [of S]
+from Statistical Sciences, Inc. (Seattle, Washington, USA). This
+is not a drawing tool in the sense of Adobe's Illustrator, or
+MacDraw: instead, it is driven by issuing drawing commands. S is
+described in R.A. Becker, J.M. Chambers, & A.R. Wilks (1988)
+"The New S Language", Wadsworth & Brooks/Cole, and you will find
+there many examples of its capabilities to produce beautiful
+pictures (note the postscript() command, in particular, as means
+to generate postscript output).
+
+ ****************************************
+
+
+Determining Bounding Boxes via bb.ps and bb4gs.ps
+
+ Many postscript files originally created without regard to
+EPSF standards will successfully function as EPSFs if they are
+provided with a suitable Bounding Box comment in the header. Ned
+Bachelder has distributed a PostScript "header" file bb.ps since 1990
+(modified by Bernie Cosell <cosell@bbn.com>) that will cause a
+following Postscript file to have its bounding box marked
+numerically and graphically on printing.
+
+ William L. Kath <kath@nwu.edu> has distributed a
+version modified for ghostscript (see below) called bb4gs.ps; it
+is included in the unix ghostscript distribution.
+
+
+Ghostscript.
+
+ These computer based Postscript interpreters with
+electronic rather than physical output were initially programmed by
+Peter L. Deutsch, and have become of increasing interest for TeX
+preview.
+
+ For PC see the distribution of emtex on ftp
+rusinfo.rus.uni-stuttgart.de.
+
+ For Macintosh see the directory /info-mac/util/ of ftp
+sumex.stanford.edu; the author is Martin Fong
+<mwfong@nisc.sri.com>; the February 1993 version (2.5.2beta2)
+works well. (For some Macintosh EPSFs you may need to load
+some "laserprep" macros using a menu, but that is a sign
+of non-portability of the EPSFs.)
+
+ These Postscript interpreters are certainly of great
+interest for PostScript programming.
+
+ The preparation of preview bitmaps for EPSFs is
+another important use.
+
+ The frustration engendered by using PostScript graphics
+without preview is still a major obstacle to the use of PostScript
+with TeX. The Adobe standard for Macintosh previewing of
+encapsulated PostScript graphics is part of the EPSF standard
+available from ftp adobe.com, and involves addition of a bitmap as
+a PICT resource, normally number 256. (There is a variant for PC
+but I have not yet seen extensive support for it.) Macintosh
+sources of PostScript graphics do follow this standard faithfully,
+but PostScript graphics coming from non-Mac sources more often do
+not, especially where unix systems are concerned.
+
+
+Macintosh Preview for EPSFs.
+
+ MacGS could undoubtedly be adapted to provide the PICT
+resource just mentioned (and Bounding box comment) in a fully
+mechanized way. Until that comes to pass here is a recipe to do
+the job by hand. Transfer the graphics window image via clipboard
+to a MacPaint-like program and select just the interior of the
+bounding box indicated by the bb4gs.ps header; transfer this
+selection via the Mac clipboard to the Mac scrapbook; then
+transfer the PICT resource from there to the resource fork of the
+PS file using ResEdit, changing the PICT number to 256. Remember
+to insert in the EPSF (data fork) header the Bound Box comment
+provided by bb4gs.ps.
+
+
+Mechanized Macintosh Preview production with unix help.
+
+ Georg DENK <denk@mathematik.tu-muenchen.de> exploits
+unix tools to obtain Macintosh preview (under Textures, OzTeX,
+and Direct TeX) for PostScript graphics coming from other
+computers. (Georg's PostScript material is coming from various
+data analysis programs on Sun workstations.)
+
+ He reports extensive experience with a solution
+mounted on the Sun side of his local network. The enhanced Mac
+PostScript file is created under unix (as a MacBinary file) using
+ghostscript (gs), pbmplus-package, and the shell script
+ps2eps-mac with its C-language programs ps-pict2macb, st_echo,
+er_echo, pbmtoepsi. The most recent item is ps2eps-mac by George
+Jefferson, <george@mech.seas.upenn.edu>; the graphics conversion
+package pbmplus-package (by ...) is also rather new and it is
+conveniently included in the shar-file distribution of
+ps2eps-mac, available from ftp sumex.stanford.edu in the directory
+/info-mac/unix/. Setting up these tools requires knowledge of C
+compilation and the unix shell.
+
+ --------------
+
+
+SOMMAIRE FRANCAIS: boxedeps.tex d'efinit des macro-commandes
+ qui permettent d'int'egrer dans un document TeX des
+ objets graphiques d'ecrits par fichier de norme EPSF, tout
+ en accordant `a chacun le statut d'une bo^ite TeX ayant
+ les bonnes dimensions. La (seule!) contribution unique
+ de ce fichier est de faire cela d'une fa_con universelle,
+ c'est a dire de fa_con `a pouvoir commod'ement
+ servir avec tout pilote d'imprimante de norme
+ PostScript --- malgr'e l'absence d'une norme
+ pour \special.
+
+
diff --git a/macros/generic/boxedeps/boxedeps.sty b/macros/generic/boxedeps/boxedeps.sty
new file mode 100644
index 0000000000..3ed515e2f4
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.sty
@@ -0,0 +1,78 @@
+%%% boxedeps.sty : Nov 1995 --
+ %% LaTeX wraper designed by Alun J. Carr <ajcarr@ccvax.ucd.ie>
+ %% for boxedeps package of Laurent Siebenmann <lcs@topo.matups.fr>.
+ %% See documentation in boxedeps.doc.
+
+ \NeedsTeXFormat{LaTeX2e}[1994/06/01]
+ \ProvidesPackage{boxedeps}
+ [1995/08/01 (Laurent Siebenmann)]
+ \input{boxedeps.tex}
+
+ %% Driver support options
+ \DeclareOption{epsf}
+ {\SetepsfEPSFSpecial}
+ \DeclareOption{epsfmulti}
+ {\SetEPSFMultiSpecial}
+ \DeclareOption{textures}
+ {\SetTexturesEPSFSpecial}
+ \DeclareOption{unixcoop}
+ {\SetUnixCoopEPSFSpecial}
+ \DeclareOption{niponunix}
+ {\SetNiponUnixEPSFSpecial}
+ \DeclareOption{bechtolsheim}
+ {\SetBechtolsheimDVITPSEPSFSpecial}
+ \DeclareOption{lis}
+ {\SetLisEPSFSpecial}
+ \DeclareOption{rokicki}
+ {\SetRokickiEPSFSpecial}
+ \DeclareOption{dvipsone}
+ {\SetDVIPSoneEPSFSpecial}
+ \DeclareOption{dviwindow}
+ {\SetDVIWindowEPSFSpecial}
+ \DeclareOption{directtex}
+ {\SetDirectTeXEPSFSpecial}
+ \DeclareOption{cmactex}
+ {\SetCMacTeXEPSFSpecial}
+ \DeclareOption{oztex}
+ {\SetOzTeXEPSFSpecial}
+ \DeclareOption{oldoztex}
+ {\SetOldOzTeXEPSFSpecial}
+ \DeclareOption{psprint}
+ {\SetPSprintEPSFSpecial}
+ \DeclareOption{arbor}
+ {\SetArborEPSFSpecial}
+ \DeclareOption{clark}
+ {\SetClarkEPSFSpecial}
+ \DeclareOption{beebe}
+ {\SetBeebeEPSFSpecial}
+ \DeclareOption{northlake}
+ {\SetNorthlakeEPSFSpecial}
+ \DeclareOption{standard} %% default
+ {\SetStandardEPSFSpecial}
+
+ %% Emulation of Rokicki's \epsfbox, \epsfxsize, \epsfysize
+ \DeclareOption{emulaterokicki}
+ {\EmulateRokicki}
+
+ %% Displacement Box options
+ \DeclareOption{showboxes}
+ {\ShowDisplacementBoxes}
+ \DeclareOption{hideboxes}
+ {\HideDisplacementBoxes}
+ \ExecuteOptions{showboxes} %% set default
+
+ %% Preconfigured Options
+ \InputIfFileExists{boxedeps.cfg}
+ {\typeout{**************************************^^J%
+ *^^J%
+ * Local config file boxedeps.cfg used^^J%
+ *^^J%
+ **************************************}}%
+ {\ExecuteOptions{standard}}
+
+ \ProcessOptions
+
+ \endinput
+ %%
+ %% End of file `boxedeps.sty'.
+
diff --git a/macros/generic/boxedeps/boxedeps.tex b/macros/generic/boxedeps/boxedeps.tex
new file mode 100644
index 0000000000..038a7257f6
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.tex
@@ -0,0 +1,1042 @@
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%%%% boxedeps.tex
+ %%%%% MACROS FOR FIGURE INSERTS OF EPSF NORM %%%%%
+ %%%%% (EPSF = Encapsulated PostScript File)
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%% AUTHOR: Laurent Siebenmann
+ %% lcs@topo.math.u-psud.fr
+ %%
+ %%% VERSIONS: Feb 1991 -- Nov 1995
+ %% Revisions bi-annual approx.
+ %%
+ %%% SOMMAIRE: boxedeps.tex d\'efinit des macro-commandes
+ %% qui permettent d'int\'egrer dans un document TeX des
+ %% objets graphiques d\'ecrits par fichier de norme EPSF,
+ %% tout en accordant a chacun le statut d'une bo\^ite TeX ayant
+ %% les bonnes dimensions. La (seule!) contribution unique
+ %% de ce fichier est de faire cela d'une fa{\c}con universelle.
+ %% C'est a dire de fa{\c}con \`a pouvoir commod\'ement
+ %% servir avec tout pilote d'imprimante de norme
+ %% PostScript --- malgr\'e l'absence d'une norme
+ %% pour \special.
+ %%
+ %%%% ACTIVATION:
+ %% by a driver-by-driver protocol
+ %% see \SetTexturesEPSFSpecial
+ %% and its companions below.
+ %%
+ %%%% DOCUMENTATION:
+ %% --- see boxedeps.doc
+ %% The complete utility is called BoxedEPSF but for
+ %% portability the nickname boxedeps is useful.
+ %%
+ %%%% POSTINGS: anonymous ftp
+ %% --- ftp matups.math.u-psud.fr [192.54.146.4]
+ %% is the master copy in 1995.
+ %% --- ftp.uni-stuttgart.de
+ %% --- ftp ftp.TeX.AC.UK
+ %% --- ftp ftp.SHSU.edu
+ %% Locate the full package on these three
+ %% "CTAN" servers by using (while connected) the command
+ %% QUOTE SITE INDEX boxedeps
+
+ %%%% RECENT ADDITIONS: \SetepsfEPSFSpecial simultaneously serves
+ %% dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x
+
+
+ \chardef\EPSFCatAt\the\catcode`\@
+ \catcode`\@=11
+
+ \chardef\C@tColon\the\catcode`\:
+ \chardef\C@tSemicolon\the\catcode`\;
+ \chardef\C@tQmark\the\catcode`\?
+ \chardef\C@tEmark\the\catcode`\!
+ \chardef\C@tDqt\the\catcode`\"
+
+ \def\PunctOther@{\catcode`\:=12
+ \catcode`\;=12 \catcode`\?=12 \catcode`\!=12 \catcode`\"=12}
+ \PunctOther@
+
+ %%%% MESSAGES (separate macro best for Europe)
+ %%
+ \def\ms@g{\immediate\write16}
+
+ %%%% Prevent double input
+ \let\EX@\expandafter
+
+ \ifx\BoxedArtundefined\relax
+ \ms@g{}\ms@g{ !!! Bad news.
+ \noexpand\BoxedEPSF or \noexpand\BoxedArt macros already input.}%
+ \ms@g{ !!! Hit RETURN to exit, or c and RETURN to forge bravely on.}%
+ {\endlinechar=-1\gdef\Temp{c}%
+ \global\read16 to \temp}%
+ \ifx\temp\Temp
+ \else
+ \EX@\EX@\EX@\end
+ \fi
+ \else
+ \global\let\BoxedArtundefined\relax
+ \fi
+
+
+
+ %%temporarily suppress Plain's logging of allocations
+ \let\wlog@ld\wlog
+ \def\wlog#1{\relax}
+
+ %% New for TOOLS
+ %\newif\ifIN@
+ \newdimen\XShift@ \newdimen\YShift@
+ \newtoks\Realtoks
+
+ %%% New for BoxedEPSF
+ %
+ \newdimen\Wd@ \newdimen\Ht@
+ \newdimen\Wd@@ \newdimen\Ht@@
+ %
+ \newdimen\TT@
+ \newdimen\LT@
+ \newdimen\BT@
+ \newdimen\RT@
+ %
+ \newdimen\XSlide@ \newdimen\YSlide@
+ %
+ \newdimen\TheScale %% secretly scale in mils: 1pt= 1mil
+ \newdimen\FigScale %% secretly scale in mils: 1pt= 1mil
+ %
+ \newdimen\ForcedDim@@
+
+ \newtoks\EPSFDirectorytoks@
+ \newtoks\EPSFNametoks@
+ \newtoks\BdBoxtoks@
+ \newtoks\LLXtoks@ %% useful info for Oz
+ \newtoks\LLYtoks@
+ \newtoks\URXtoks@ %% useful for epsf.tex syntax
+ \newtoks\URYtoks@
+
+
+ \newif\ifRepeat@
+ \newif\ifNotIn@
+ \newif\ifForcedDim@
+ \newif\ifForceOn@
+ \newif\ifForcedHeight@
+ \newif\ifPSOrigin
+ \newif\ifPCfmt@
+ \newif\ifPCfmtOK@
+
+
+ \newread\EPSFile@
+ \newwrite \epsf@log
+ \def\WrLog@{\immediate\write\epsf@log}
+
+ \gdef\InitLog@{%
+ \def\epsf@log@name{epsf.lst}%
+ \count255=\time\divide\count255 by 60
+ \edef\temp@{\the\count255}%
+ \multiply\count255 by -60\relax
+ \advance\count255 by \time
+ \immediate\openout\epsf@log \epsf@log@name
+ \WrLog@{ \pct@@\space boxedeps.tex log, date
+ \the\day-\the\month-\the\year,
+ time \temp@:\the\count255.}\WrLog@{}%
+ \ms@g{}\ms@g{ **** See file \epsf@log@name\space
+ for list of EPSFs integrated by boxedeps.tex}%
+ \global\let\InitLog@\relax}
+
+ \def\noArtList{\global\let\InitLog@\relax}
+ \let\noEPSFList\noArtList
+ \def\noArtReports{\global\let\ReportEPSF@\relax}
+ \let\noEPSFReports\noArtReports
+
+ %%%% WORD-PROCESSING MACROS
+ %%
+ %%% \IN@0#1@#2@ : Is 1st exp of #1 in 1st exp of #2 ??
+ %% Answer in \ifIN@
+ \newif\ifIN@\def\IN@{\EX@\INN@\EX@}
+ \long\def\INN@0#1@#2@{\long\def\NI@##1#1##2##3\ENDNI@
+ {\ifx\m@rker##2\IN@false\else\IN@true\fi}%
+ \EX@\NI@#2@@#1\m@rker\ENDNI@}
+ \def\m@rker{\m@@rker}
+
+ %%% \SPLIT@0#1@#2@ : Split 1st exp of #2 at 1st exp of #1
+ %% \Initialtoks@ , \Terminaltoks@ will contain pieces
+ \newtoks\Initialtoks@ \newtoks\Terminaltoks@
+ \def\SPLIT@{\EX@\SPLITT@\EX@}
+ \def\SPLITT@0#1@#2@{\def\TTILPS@##1#1##2@{%
+ \Initialtoks@{##1}\Terminaltoks@{##2}}\EX@\TTILPS@#2@}
+
+ %%%% MACROS TO TRIM \ForeTrim@0#1@ and \Trim@0#1@
+ %% result appears in \Trimtoks@
+ %% LIMITATION: assume no multiple spaces to trim
+
+ \newtoks\Trimtoks@
+
+ %%% \ForeTrim@0#1@ trims initial space of first erpansion of #1
+ %% #1 of form \the\toks0 or \mymacro
+ \def\ForeTrim@{\EX@\ForeTrim@@\EX@}
+ \def\ForePrim@0 #1@{\Trimtoks@{#1}}
+ \def\ForeTrim@@0#1@{\IN@0\m@rker. @\m@rker.#1@%
+ \ifIN@\ForePrim@0#1@%
+ \else\Trimtoks@\EX@{#1}\fi}
+ %%\m@rker expands here to \m@@rker since spot initial,
+ %% so no confusuion with \m@rker
+
+ %%% \Trim@0#1@ trims init and terminal spaces
+ %% Same syntax.
+ %% Warns if internal spaces found.
+ %%
+ \def\Trim@0#1@{%
+ \ForeTrim@0#1@%
+ \IN@0 @\the\Trimtoks@ @%
+ \ifIN@
+ \SPLIT@0 @\the\Trimtoks@ @\Trimtoks@\Initialtoks@
+ \IN@0\the\Terminaltoks@ @ @%
+ \ifIN@ \else \Trimtoks@{FigNameWithSpace}\fi
+ \fi }
+
+
+ %%%% MATH MACROS (provisional)
+ %% use dimen registers for reals; unit 1pt
+ %% (numerical dimension arguments OK unless contrary noted)
+
+ %%%% One needs the point token seq (pt with cat 12) USES dimen 0
+ \newtoks\pt@ks
+ \def\getpt@ks 0.0#1@{\pt@ks{#1}}
+ \dimen0=0pt\relax\EX@\getpt@ks\the\dimen0@
+
+ %%% Convert dimen to "decimal multiplier"% USES dimens 0,2
+ %\newtoks\Realtoks% the output!
+ \def\Real#1{%
+ \dimen2=#1%
+ \SPLIT@0\the\pt@ks @\the\dimen2@%% lop off the points
+ \Realtoks=\Initialtoks@ %\showthe\Realtoks
+ }
+
+ %%% Multiplication
+ % USES dimens 0,2,4,6; preserves args; output \Product
+ \newdimen\Product
+ \def\Mult#1#2{%
+ \dimen4=#1\relax
+ \dimen6=#2%
+ \Real{\dimen4}%
+ \Product=\the\Realtoks\dimen6%
+ }
+
+ %%% Inverse
+ % USES dimens 0; preserves arg; output \Inverse
+ \newdimen\Inverse
+ \newdimen\hmxdim@ \hmxdim@=8192pt%halfmaxdimen
+ \def\Invert#1{%
+ \Inverse=\hmxdim@
+ \dimen0=#1%
+ \divide\Inverse \dimen0%
+ \multiply\Inverse 8}
+
+ %%% \Rescale#1#2#3 % USES dimens 0,2,4,6
+ %% alters dimen register #1 by ratio #2/#3
+ %% where #2,#3 can be raw dimensions OR dimen registers
+ \def\Rescale#1#2#3{% Adequate accuracy. Can improve.
+ \divide #1 by 100\relax
+ \dimen2=#3\divide\dimen2 by 100 \Invert{\dimen2}%
+ \Mult{#1}{#2}%
+ \Mult\Product\Inverse
+ #1=\Product}
+
+ %%% \Scale#1 scales dimen register #1
+ %% by dimen register real \TheScale; USES dimen 0
+ \def\Scale#1{\dimen0=\TheScale
+ \divide #1 by 1280 %% 1280*5120*10=1000*2^16
+ \divide \dimen0 by 5120
+ \multiply#1 by \dimen0
+ \divide#1 by 10 %% max size of #1 about 32000/10 pt
+ }
+
+ %%% SCRUNCHING BOXES AND SHIFTING CONTENTS
+ %% TeX has to do this in general
+ %% since some drivers do not let
+ %% one do it readily using Postscript
+
+ \newbox\scrunchbox
+
+ %%% \Scrunched#1 puts #1 in an hbox
+ %% then in effect zeros the dimensions of this box
+ \def\Scrunched#1{{\setbox\scrunchbox\hbox{#1}%
+ \wd\scrunchbox=0pt
+ \ht\scrunchbox=0pt
+ \dp\scrunchbox=0pt
+ \box\scrunchbox}}
+
+ %%% \Shifted@#1 puts #1 in \hbox
+ %% then locates basepoint to bottom left corner
+ %% then translates ink only by \XShift@,\YShift@
+ %% with Postscript convention
+ %% For simplicity use only on scrunched boxes
+ %\newdimen\XShift@
+ %\newdimen\YShift@
+ \def\Shifted@#1{%
+ \vbox {\kern-\YShift@
+ \hbox {\kern\XShift@\hbox{#1}\kern-\XShift@}%
+ \kern\YShift@}}
+
+ %%% \cBoxedEPSF#1 the main macro
+ %% component macros are explained in order below
+
+ \def\cBoxedEPSF#1{{\leavevmode
+ %% double brace for amstex \allign, \alligned, ...
+ \ReadNameAndScale@{#1}%
+ \SetEPSFSpec@
+ \InitLog@
+ \ReadEPSFile@ \ReadBdB@x
+ %% Calculations
+ \TrimFigDims@
+ \CalculateFigScale@
+ \ScaleFigDims@
+ \SetInkShift@
+ \hbox{$\mathsurround=0pt\relax
+ \vcenter{\hbox{%
+ \FrameSpider{\hskip-.4pt\vrule}%
+ \vbox to \Ht@{\offinterlineskip\parindent=\z@%
+ \FrameSpider{\vskip-.4pt\hrule}\vfil
+ \hbox to \Wd@{\hfil}%
+ \vfil
+ \InkShift@{\EPSFSpecial{\EPSFSpec@}{\FigSc@leReal}}%
+ \FrameSpider{\hrule\vskip-.4pt}}%
+ \FrameSpider{\vrule\hskip-.4pt}}}%
+ $\relax}%
+ \CleanRegisters@
+ \ReportEPSF@
+ }}
+
+ \def\tBoxedEPSF#1{\setbox4\hbox{\cBoxedEPSF{#1}}%
+ \setbox4\hbox{\raise -\ht4 \hbox{\box4}}%
+ \box4
+ }
+
+ \def\bBoxedEPSF#1{\setbox4\hbox{\cBoxedEPSF{#1}}%
+ \setbox4\hbox{\raise \dp4 \hbox{\box4}}%
+ \box4
+ }
+
+ \let\BoxedEPSF\cBoxedEPSF% default setting
+
+ %% Some compatibility with BoxedArt.tex
+ %
+ \let\BoxedArt\BoxedEPSF
+
+ %% Some compatibility with Sweet-teX
+ %
+ \def\gLinefigure[#1scaled#2]_#3{%
+ \BoxedEPSF{#3 scaled #2}}
+
+ %% Some compatibility with Rokicki's dvips
+ %
+ \let\EPSFbox\bBoxedEPSF \let\EPSFfile\bBoxedEPSF
+
+ \def\EPSFxsize{\afterassignment\ForceW@\ForcedDim@@}
+ \def\ForceW@{\ForcedDim@true\ForcedHeight@false}
+
+ \def\EPSFysize{\afterassignment\ForceH@\ForcedDim@@}
+ \def\ForceH@{\ForcedDim@true\ForcedHeight@true}
+
+ \def\EmulateRokicki{%
+ \let\epsfbox\bBoxedEPSF \let\epsffile\bBoxedEPSF
+ \let\epsfxsize\EPSFxsize \let\epsfysize\EPSFysize}
+
+ %%% \ReadNameAndScale@#1
+ %
+ \def\ReadNameAndScale@#1{\IN@0 scaled@#1@% DOUBLE BARRELED
+ \ifIN@\ReadNameAndScale@@0#1@%
+ \else \ReadNameAndScale@@0#1 scaled\DefaultMilScale @%
+ \fi}
+
+ \def\ReadNameAndScale@@0#1scaled#2@{% HELPER MACRO
+ \let\OldBackslash@\\%
+ \def\\{\OtherB@ckslash}%
+ \edef\temp@{#1}%
+ \Trim@0\temp@ @%
+ \EPSFNametoks@\EX@{\the\Trimtoks@ }%
+ \FigScale=#2 pt%
+ \let\\\OldBackslash@
+ }
+
+ \def\SetDefaultEPSFScale#1{%
+ \global\def\DefaultMilScale{#1}}
+
+ \SetDefaultEPSFScale{1000}
+
+
+ %%% \ReadEPSFile@
+ %
+ \def \SetBogusBbox@{%
+ \global\BdBoxtoks@{ BoundingBox:0 0 100 100 }%
+ \global\def\BdBoxLine@{ BoundingBox:0 0 100 100 }%
+ \ms@g{ !!! Will use placeholder !!!}%
+ }
+
+ {\catcode`\%=12\relax\gdef\P@S@{%!}\gdef\pct@@{%%}}
+ %% %! min sign of PS file
+
+ %%% Opening and closing
+ \def\ReadEPSFile@{%\show\EPSFSpec@%
+ \openin\EPSFile@\EPSFSpec@
+ \relax %necessary to prevent precocious expansion of \ifeof
+ \ifeof\EPSFile@
+ \ms@g{}%
+ \ms@g{ !!! EPS FILE \the\EPSFDirectorytoks@
+ \the\EPSFNametoks@\space WAS NOT FOUND !!!}%
+ \SetBogusBbox@
+ \else
+ \ReadEPSFile@@
+ \fi
+ \closein\EPSFile@
+ }
+
+ %% \AdvanceLcnt@ for PC EPSF case only
+ \global\let\AdvanceLcnt@\relax %% initialize
+ \def\AdvanceLcnt@@{%
+ \advance\count255 1 \ifnum \count255>50 \Lcnt@ms@g \fi}
+
+ \def\Lcnt@ms@g{\ms@g{}%
+ \ms@g{ !!! PC binary EPS preview probably before BoundingBox.}%
+ \ms@g{ !!! To accellerate, use utility to move all previews after \pct@@ EOF.}%
+ \global\let\AdvanceLcnt@\relax
+ \global\let\AdvanceLcnt@@\relax %% in all, one test, one complaint
+ }
+
+ %%% Header tests
+ \def\ReadEPSFile@@{%
+ \begingroup%%
+ \chardef\other=12 \chardef\cmt=14 \catcode"0C=9 \catcode"7F=\cmt
+ \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
+ \catcode"00=\cmt \catcode`\\=\cmt \catcode`\!=12 \catcode`\:=12
+ %% next to recognize PC-type header
+ \global\PCfmt@false%% initialize
+ \catcode"C5=\other \catcode"D0=\other \catcode"D3=\other \catcode"C6=\cmt
+ \global\read\EPSFile@ to \HdLine@
+ \IN@0\P@S@ @\HdLine@ @%
+ \ifIN@ %% %! accepted as %!PS so do BdBox search loop!!
+ %\message{*********}%
+ %\showthe\catcode`\%
+ %\showthe\catcode`\!
+ %\show\HdLine@
+ %\show\P@S@
+ \let\temp@\ReadEPSFile@@@
+ \else
+ \def\temp@@{^^c5^^d0^^d3}%
+ \ifx\temp@@\HdLine@ %% sign of PC binary PostScript file header
+ \global\PCfmt@true
+ \count255=0 %% will be line counter
+ \let\AdvanceLcnt@\AdvanceLcnt@@
+ \let\temp@\ReadEPSFile@@@
+ \ifPCfmtOK@\else %%
+ \ms@g{}%
+ \ms@g{ !!! PC binary EPS file header encountered. Designated }%
+ \ms@g{ !!! driver may not accept this and similar EPS files.}%
+ \relax\global\PCfmtOK@true %% just one warning
+ \fi
+ \else
+ \ms@g{}%
+ \ms@g{ !!! \the\EPSFNametoks@\space is not PostScript.}%
+ \ms@g{ !!! It should begin with the "\P@S@" or PC binary header.}%
+ \SetBogusBbox@
+ \fi
+ \fi
+ \temp@
+ \endgroup%\relax
+ }
+
+ %%% BoundingBox search loop
+ \def\ReadEPSFile@@@{\Repeat@true
+ \loop
+ \ifeof\EPSFile@\relax\Repeat@false
+ \ms@g{}%
+ \ms@g{ !!! BoundingBox NOT FOUND IN %
+ \the\EPSFDirectorytoks@\the\EPSFNametoks@\space!!! }%
+ \SetBogusBbox@
+ \else
+ \ReadEPSFile@@@@
+ \fi
+ \ifRepeat@
+ \AdvanceLcnt@ %% is \relax unless PC EPSF; >50 => complaint
+ \repeat
+ \global\BdBoxtoks@\expandafter{\BdBoxLine@}%
+ }
+
+ %%% BoundingBox or HiResBoundingBox
+ %% HiRes normally on line following if present at all
+ \def\ReadEPSFile@@@@{%
+ \global\read\EPSFile@ to \BdBoxLine@
+ %\BdBoxtoks@\EX@{\BdBoxLine@}\ms@g{}\ms@g{ * \the\BdBoxtoks@}%%%%
+ \IN@0BoundingBox@\BdBoxLine@ @%
+ \ifIN@
+ %\ms@g{}\ms@g{ * SCORE!!}
+ \Repeat@false
+ \read\EPSFile@ to \temp@
+ \IN@0HiResBoundingBox:@\temp@ @%
+ \ifIN@
+ \global\let\BdBoxLine@\temp@
+ \fi
+ \fi}
+
+ %%% \ReadBdB@x
+ % Rmk For simplicity 0 not used in syntax
+ % of \ReadBdB@x@, \ReadBdB@x@@
+ \def\ReadBdB@x{% PART 0
+ \EX@\ReadBdB@x@\the\BdBoxtoks@ @}
+
+ \def\ReadBdB@x@#1BoundingBox:#2@{% PART 1
+ \ForeTrim@0#2@%
+ \IN@0atend@\the\Trimtoks@ @%
+ \ifIN@ \Trimtoks@={0 0 100 100 }%
+ \ms@g{}%
+ \ms@g{ !!! BoundingBox not found in %
+ \the\EPSFDirectorytoks@\the\EPSFNametoks@\space !!!}%
+ \ms@g{ !!! It must not be at end of EPSF !!!}%
+ \ms@g{ !!! Will use placeholder !!!}%
+ \fi%% cf \SetBogusBbox@
+ \EX@\ReadBdB@x@@\the\Trimtoks@ @%
+ }
+
+ \def\ReadBdB@x@@#1 #2 #3 #4@{% PART 2
+ \Wd@=#3bp\advance\Wd@ by -#1bp%
+ \Ht@=#4bp\advance\Ht@ by-#2bp%
+ \Wd@@=\Wd@ \Ht@@=\Ht@ %% useful info for Clark
+ \LLXtoks@={#1}\LLYtoks@={#2}%% useful for Oz
+ \URXtoks@={#3}\URYtoks@={#4}%% useful for epsf.tex
+ \ifPSOrigin\XShift@=-#1bp\YShift@=-#2bp\fi
+ }
+
+ %%% \SetEPSFDirectory
+ %
+ \def\G@bbl@#1{}
+ \bgroup
+ \global\edef\OtherB@ckslash{\EX@\G@bbl@\string\\}
+ \egroup
+
+ \def\SetEPSFDirectory{% Part 1
+ \bgroup\PunctOther@\relax
+ \let\\\OtherB@ckslash
+ \SetEPSFDirectory@}
+
+ \def\SetEPSFDirectory@#1{% Part 2
+ \edef\temp@{#1}%
+ \Trim@0\temp@ @% result in \Trimtoks@
+ \global\toks1\EX@{\the\Trimtoks@ }\relax
+ \egroup
+ \EPSFDirectorytoks@=\toks1
+ }
+
+ \def\SetEPSFSpec@{%
+ \bgroup
+ \let\\=\OtherB@ckslash
+ \global\edef\EPSFSpec@{%
+ \the\EPSFDirectorytoks@\the\EPSFNametoks@}%
+ \global\edef\EPSFSpec@{\EPSFSpec@}%
+ \egroup}
+
+ %%% Is trimming done percentage-wise??
+ \newif\ifPCT@
+
+ \def\PCTtrueErrTst@{}%
+ \def\PCTfalseErrTst@{}%
+
+ %%%% Trimming figure dimensions (source)
+ %%
+ %%% \TrimSide@
+ %% #1 is one of \TT@,...,\RT@; #2 is arg of \TrimTop,...
+ \def\TrimSide@#1#2{%
+ \IN@0pct@#2@%
+ \ifIN@
+ \PCT@true\PCTtrueErrTst@
+ \SPLIT@0pct@#2@%
+ \advance#1 by \the\Initialtoks@ pt
+ \else
+ \PCTfalseErrTst@
+ \advance#1 by #2
+ \fi}
+
+ \def\TrimTop#1{\TrimSide@{\TT@}{#1}}%
+ \def\TrimLeft#1{\TrimSide@{\LT@}{#1}}%
+ \def\TrimBottom#1{\TrimSide@{\BT@}{#1}}%
+ \def\TrimRight#1{\TrimSide@{\RT@}{#1}}%
+
+ \def\TrimBoundingBox#1{%
+ \TrimTop{#1}%
+ \TrimLeft{#1}%
+ \TrimBottom{#1}%
+ \TrimRight{#1}%
+ }
+
+ %%% Convert percentage trim to dimension trim on source (if nec)
+ %% #1 is percent trim (pt is unit); #2 is source width or height
+ \def\PCTtoSideTrimDims@{%
+ \ifPCT@
+ \Rescale\LT@\Wd@{100pt}%\showthe\LT@
+ \Rescale\RT@\Wd@{100pt}%
+ \Rescale\TT@\Ht@{100pt}%
+ \Rescale\BT@\Ht@{100pt}%
+ \fi}
+
+ \def\TrimFigDims@{%
+ \PCTtoSideTrimDims@
+ \advance\Wd@ by -\LT@
+ \advance\Wd@ by -\RT@ \RT@=\z@
+ \advance\Ht@ by -\TT@ \TT@=\z@
+ \advance\Ht@ by -\BT@
+ }
+
+
+ %%% \CalculateFigScale@
+ %
+ \def\ForceWidth#1{\ForcedDim@true
+ \ForcedDim@@#1\ForcedHeight@false}
+
+ \def\ForceHeight#1{\ForcedDim@true
+ \ForcedDim@@=#1\ForcedHeight@true}
+
+ \def\ForceOn{\ForceOn@true}
+ \def\ForceOff{\ForceOn@false\ForcedDim@false}
+
+ \def\CalculateFigScale@{%
+ %Have default \FigScale or read \FigScale
+ \ifForcedDim@\FigScale=1000pt% %% start afresh
+ \ifForcedHeight@
+ \Rescale\FigScale\ForcedDim@@\Ht@
+ \else
+ \Rescale\FigScale\ForcedDim@@\Wd@
+ \fi
+ \fi
+ \Real{\FigScale}%
+ \edef\FigSc@leReal{\the\Realtoks}%
+ }
+
+ \def\ScaleFigDims@{\TheScale=\FigScale
+ \ifForcedDim@
+ \ifForcedHeight@ \Ht@=\ForcedDim@@ \Scale\Wd@
+ \else \Wd@=\ForcedDim@@ \Scale\Ht@
+ \fi
+ \else \Scale\Wd@\Scale\Ht@
+ \fi
+ \ifForceOn@\relax\else\global\ForcedDim@false\fi
+ \Scale\LT@\Scale\BT@ %%%\Scale\Wd@\Scale\Ht@
+ \Scale\XShift@\Scale\YShift@
+ }
+
+ %%% \ShowDisplacementBoxes
+ %% shows (prints) corrected scaled and positioned
+ %% bounding boxes; for diagnostics
+ %%% \HideDisplacementBoxes makes them invisible again
+ %%
+ \def\HideDisplacementBoxes{\global\def\FrameSpider##1{\null}}
+ \def\ShowDisplacementBoxes{\global\def\FrameSpider##1{##1}}
+ \let\HideFigureFrames\HideDisplacementBoxes %% some synonyms
+ \let\ShowFigureFrames\ShowDisplacementBoxes
+ \ShowDisplacementBoxes
+
+ %%% \hSlide#1, \vSlide#1
+ %%
+ \def\hSlide#1{\advance\XSlide@ by #1}
+ \def\vSlide#1{\advance\YSlide@ by #1}
+
+ %%% \SetInkShift@, \InkShift@#1
+ %%
+ \def\SetInkShift@{%
+ \advance\XShift@ by -\LT@
+ \advance\XShift@ by \XSlide@
+ \advance\YShift@ by -\BT@
+ \advance\YShift@ by -\YSlide@
+ }
+ %
+ \def\InkShift@#1{\Shifted@{\Scrunched{#1}}}
+
+ %%% \CleanRegisters@
+ %
+ \def\CleanRegisters@{%
+ \globaldefs=1\relax
+ \XShift@=\z@\YShift@=\z@\XSlide@=\z@\YSlide@=\z@
+ \TT@=\z@\LT@=\z@\BT@=\z@\RT@=\z@
+ \globaldefs=0
+ \global\PCT@false}
+
+ \def\ReportEPSF@{%
+ \ms@g{ *** Box composed for the EPS file \the\EPSFNametoks@}%
+ \edef\temp@{\the\EPSFDirectorytoks@}%
+ \ifx\temp@\LastEPSFDirectory@\else
+ \WrLog@{--- change EPSF directory ==> \temp@}%
+ \global\let\LastEPSFDirectory@\temp@
+ \fi
+ \def\temp@{}%
+ \ifPCfmt@ \edef\temp@{\space \pct@@\space EPSP binary}%
+ \fi
+ %\show\temp@
+ \WrLog@\EX@{\the\EPSFNametoks@\temp@}%
+ }
+
+ \gdef\LastEPSFDirectory@{}%% initialize
+
+ %%% Special syntax for several drivers. The macros
+ %% \SetTexturesEPSFSpecial %% Textures
+ %% \SetUnixCoopEPSFSpecial %% dvi2ps early unix
+ %% \SetNiponUnixEPSFSpecial %% dvi2ps j-version
+ %% \SetBechtolsheimDVI2PSEPSFSpecial and
+ %% \SetBechtolsheimDVITPSEPSFSpecial %% by S.P.Bechtolsheim
+ %% \SetLisEPSFSpecial %% dvi2ps by Tony Lis
+ %% \SetepsfEPSFSpecial %% ******* will work for many:
+ %% ----- dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki
+ %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y same as
+ %% \SetDVIWindowEPSFSpecial %% DVIWindow of Y&Y
+ %% \SetDirectTeXEPSFSpecial %% DirectTeX by Wilfried Ricken
+ %% \SetCMacTeXEPSFSpecial %% CMacTeX by Tom Kiffe
+ %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.7) by Andrew Trevorrow
+ %% -----
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x
+ %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow
+ %% --- also for OzTeX versions <= 1.41 !!
+ %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS
+ %% \SetClarkEPSFSpecial %% dvitops by James Clark
+ %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe
+ %% \SetNorthlakeEPSFSpecial %% Northlake Software
+ %% \SetStandardEPSFSpecial %% Nonexistant: Placebo used
+ %%
+ %% These many drivers are supported roughly
+ %% by (re-)defining the macro \EPSFSpecial#1#2, where
+ %% #1 = EPS file pathname (use \\ for the letter backslash)
+ %% #2 = scale in mils
+ %% Be wary of using strange characters in pathnames!
+
+ %% Textures, Blue Sky Research, Barry Smith
+ \def\SetTexturesEPSFSpecial{\PSOriginfalse%\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{\relax
+ \edef\specialtemp{##2}%
+ \SPLIT@0.@\specialtemp.@\relax
+ \special{illustration ##1 scaled
+ \the\Initialtoks@}}}
+
+ %% Unix : dvi2ps by: Mark Senn, Stephan Bechtolsheim,
+ % Bob Brown, Richard, Furuta, James Schaad, Robert Wells,
+ % Norm Hutchinson, Neal Holt, Scott Jones, Howard Trickey.
+ % Introduced by B. Horn <bkph@ai.mit.edu>
+ \def\SetUnixCoopEPSFSpecial{\PSOrigintrue % Please test!
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}%dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{psfile=##1\space
+ hscale=\Aux@\space
+ vscale=\Aux@}}}
+
+ %% Unix : dvi2ps j-version 1.91j
+ % Introduced by Takashi Matsushita matsu@tmuds1.phys.metro-u.ac.jp
+ % Takafumi Sakurai, sakurai@math.s.chiba-u.ac.jp
+ % Kazuhiro Kazama, kazama@square.ntt.jp
+ \def\SetNiponUnixEPSFSpecial{\PSOriginfalse % Please test!
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}%dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{epsfile=##1\space
+ hscale=\Aux@\space
+ vscale=\Aux@}}}
+
+ %% Unix : dvi2ps j-version 1.91j
+ % Introduced by Takashi Matsushita matsu@tmuds1.phys.metro-u.ac.jp
+ % Takafumi Sakurai, sakurai@math.s.chiba-u.ac.jp
+ % Kazuhiro Kazama, kazama@square.ntt.jp
+ \def\SetNiponUnixEPSFSpecial{\PSOriginfalse % Please test!
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}%dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ {\dimen6=\the\URYtoks@ pt %
+ \advance\dimen6 by -\the\LLYtoks@ pt %
+ \dimen6=\Aux@\dimen6
+ \Real{\dimen6}%
+ \XShift@=0bp\YShift@=\the\Realtoks bp
+ \Shifted@{\special{epsfile=##1\space
+ hscale=\Aux@\space
+ vscale=\Aux@}}}}}
+%%% \Shifted@{\special{illustration ##1}}}}}
+
+
+
+ %% dvi2ps and dvitps by S.P. Bechtolsheim,
+ % Introduced by B. Horn <bkph@ai.mit.edu> and Carl.M.Jones,
+ % testing by R. Evans <Robert@cm.cardiff.ac.uk>
+ % and George Denk <denk@mathematik.tu-muenchen.de>
+ % Note that a prolog file psfig.pro
+ % specific to the driver should be available.
+ \def\SetBechtolsheimEPSFSpecial@{%% tool macro only
+ \PSOrigintrue
+ \special{\DriverTag@ Include0 "psfig.pro"}%
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt %% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4} %% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%% convert dimen to real
+ \special{\DriverTag@ Literal "10 10 0 0 10 10 startTexFig
+ \the\mag\space 1000 div
+ dup 3.25 neg mul 1 index .25 neg mul translate %% correction line
+ \Aux@\space mul dup scale "}%
+ \special{\DriverTag@ Include1 "##1"}%
+ \special{\DriverTag@ Literal "endTexFig "}%
+ }}
+
+ \def\SetBechtolsheimDVITPSEPSFSpecial{\def\DriverTag@{dvitps: }%
+ \SetBechtolsheimEPSFSpecial@}
+
+ \def\SetBechtolsheimDVI2PSEPSFSSpecial{\def\DriverTag@{DVI2PS: }%
+ \SetBechtolsheimEPSFSpecial@}
+
+ %% dvi2ps by Tony Lis,
+ % implantations? ; dates?; availability?
+ % Introduced by B. Horn <bkph@ai.mit.edu>
+ \def\SetLisEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{pstext="10 10 0 0 10 10 startTexFig\space
+ \the\mag\space 1000 div \Aux@\space mul
+ \the\mag\space 1000 div \Aux@\space mul scale"}%
+ \special{psfile=##1}%
+ \special{pstext=endTexFig}%
+ }}
+
+ %% dvips by Tom Rokicki; free driver in portable C
+ % Introduced by W.D. Neumann <neumann@mps.ohio-state.edu>
+ \def\SetRokickiEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 10\relax
+ \Real{\dimen4}% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{psfile="##1"\space
+ hscale=\Aux@\space
+ vscale=\Aux@}}}
+
+ \def\SetInlineRokickiEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{ps::[begin] 10 10 0 0 10 10 startTexFig\space
+ \the\mag\space 1000 div \Aux@\space mul
+ \the\mag\space 1000 div \Aux@\space mul scale}%
+ \special{ps: plotfile ##1}%
+ \special{ps::[end] endTexFig}%
+ }}
+
+ %%% Rokicki's epsf.tex syntax.
+ %% Is followed by DirectTeX (W. Ricken)
+ %% CMacTeX (Tom Kiffe), Y&Y's drivers, and OzTeX >= 1.7
+ \def\SetepsfEPSFSpecial{\PSOriginfalse
+ \gdef\epsfclipstring{}%
+ %% make { clip} if you want to clip (non-portably)
+ %% down to the PostScript bounding box. (OzTeX refuses this)
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt %% convert mil scale to dimen
+ \divide\dimen4 by 100 %% 1000ths to 10ths
+ \Real{\dimen4}%% dimens 0,2 used here
+ \edef\theScaleholder@{\the\Realtoks}%
+ \dimen6=\the\URXtoks@ pt %% not bp!!!!!
+ \advance\dimen6 by -\the\LLXtoks@ pt
+ %% \dimen6 now (bbox width) * points
+ \dimen6=\theScaleholder@\dimen6 \Real{\dimen6}%% dimens 0,2 used here
+ \edef\Temp{\the\Realtoks}%
+ %% \Temp now holds decimal real no
+ %% 10 times desired "real width" (rwi) in bp
+ \dimen6=\the\URYtoks@ pt %
+ \advance\dimen6 by -\the\LLYtoks@ pt %
+ \dimen6=\theScaleholder@\dimen6 \Real{\dimen6}%
+ \special{PSfile=##1\space
+ llx=\the\LLXtoks@\space lly=\the\LLYtoks@\space
+ urx=\the\URXtoks@\space ury=\the\URYtoks@\space
+ rwi=\Temp\space rhi=\the\Realtoks
+ \epsfclipstring}%
+ }}
+ %% Rmk: Under epsf.tex only multiples of (1/10) bp available widths
+ %% but considerably more accuracy available here.
+
+ \let\SetDirectTeXEPSFSpecial=\SetepsfEPSFSpecial
+ \let\SetCMacTeXEPSFSpecial=\SetepsfEPSFSpecial
+ \let\SetOzTeXEPSFSpecial=\SetepsfEPSFSpecial
+ %%% \SetOzTeXEPSFSpecial only for OzTeX in versions 1.7 and later
+
+ %%% Old OzTeX versions (1.42 to 1.6), by Andrew Trevorrow.
+ %%% For versions <= 1.41 use \SetPSprintEPSFSpecial below.
+ %% Nota: Version 1.42--1.5 may give
+ %% spurious "offpage" error notices on printing.
+ \def\SetOldOzTeXEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt%% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}%% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%% convert dimen to real
+ \special{epsf=\string"##1\string"\space scale=\Aux@}%
+ }}
+
+ %% PSprint, by AndrewTrevorrow for VaX VMS
+ %% and OzTeX versions <= 1.41
+ % tested 2-91 by Max Calviani <ISICA@ASTRPD.infn.it>
+ \def\SetPSprintEPSFSpecial{\PSOriginfalse % artifice; see below
+ \gdef\EPSFSpecial##1##2{%note order
+ \special{##1\space
+ ##2 1000 div \the\mag\space 1000 div mul
+ ##2 1000 div \the\mag\space 1000 div mul scale
+ \the\LLXtoks@\space neg \the\LLYtoks@\space neg translate
+ }}}
+
+ %% DVILASER/PS driver originally written by David Fuchs
+ % marketed and supported by ArborTeXt 535 W. William St.
+ % Suite 300, Ann Arbor, MI 48103, U.S.A
+ % (313) 996-3566 (313) 996-3573
+ % help@arbortext.com, Andrew Dobrowolski
+ \def\SetArborEPSFSpecial{\PSOriginfalse % check!
+ \gdef\EPSFSpecial##1##2{%
+ \edef\specialthis{##2}%
+ \SPLIT@0.@\specialthis.@\relax % suppress decimals (nec!)
+ \special{ps: epsfile ##1\space \the\Initialtoks@}}}
+
+ %% dvitops, (c) James Clark <jjc@jclark.uucp>
+ % public domain; distributed by UK TeX Archive
+ % computers: unix, msdos, vms, primos and vm/cms,
+ % introduced by S. Ratz <spqr@uk.ac.southampton.ecs>
+ \def\SetClarkEPSFSpecial{\PSOriginfalse % please test!
+ \gdef\EPSFSpecial##1##2{%
+ \Rescale {\Wd@@}{##2pt}{1000pt}%
+ \Rescale {\Ht@@}{##2pt}{1000pt}%
+ \special{dvitops: import
+ ##1\space\the\Wd@@\space\the\Ht@@}}}
+
+ %% DVIPSONE, for PC compatibles
+ % Y&Y, 106 Indian Hill, Carlisle MA 01741, USA
+ % (508) 371-3286
+ % (introduced by B. Horn <bkph@ai.mit.edu>)
+ \let\SetDVIPSONEEPSFSpecial\SetepsfEPSFSpecial
+ \let\SetDVIPSoneEPSFSpecial\SetepsfEPSFSpecial
+ \let\SetDVIWindowEPSFSpecial\SetepsfEPSFSpecial
+
+ %% DVIALW by N. Beebe, public domain
+ % DVI Driver Distribution, Center for Scientific Computing,
+ % Department of Mathematics, 220 South Physics Building,
+ % University of Utah, Salt Lake City, UT 84112, USA
+ % (introduced by B. Horn <bkph@ai.mit.edu>)
+ % Proposed standard; see TUGboat article 1993.
+ \def\SetBeebeEPSFSpecial{%please test!
+ \PSOriginfalse%
+ \gdef\EPSFSpecial##1##2{\relax
+ \special{language "PS",
+ literal "##2 1000 div ##2 1000 div scale",
+ position = "bottom left",
+ include "##1"}}}
+ \let\SetDVIALWEPSFSpecial\SetBeebeEPSFSpecial
+
+ %% Northlake software
+ \def\SetNorthlakeEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \edef\specialthis{##2}%
+ \SPLIT@0.@\specialthis.@\relax % suppress decimals (nec!)
+ \special{insert ##1,magnification=\the\Initialtoks@}}}
+
+ %%% MultiSpecial for Textures PLUS drivers supporting epsf.tex
+ %%% syntax of Rokicki (one of many dvips syntaxes)
+ %% *experimental* 2-95
+ \def\SetEPSFMultiSpecial{\PSOriginfalse
+ \csname newwrite\endcsname \EPSFile@@
+ \immediate\openout\EPSFile@@ illustration
+ \immediate\write\EPSFile@@ {\P@S@}%
+ \immediate\write\EPSFile@@ {\pct@@ Remark: Tranquilizer for OzTeX...}%
+ \immediate\closeout\EPSFile@@
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt %% convert mil scale to dimen
+ \divide\dimen4 by 100 %% 1000ths to 10ths
+ \Real{\dimen4}%% dimens 0,2 used here
+ \edef\theScaleholder@{\the\Realtoks}%
+ \dimen6=\the\URXtoks@ pt %% not bp!!!!!
+ \advance\dimen6 by -\the\LLXtoks@ pt
+ %% \dimen6 now (bbox width) * points
+ \dimen6=\theScaleholder@\dimen6 \Real{\dimen6}%% dimens 0,2 used here
+ \edef\Temp{\the\Realtoks}%
+ %% \Temp now holds decimal real no
+ %% 10 times desired "real width" (rwi) in bp
+ \dimen6=\the\URYtoks@ pt %
+ \advance\dimen6 by -\the\LLYtoks@ pt %
+ \dimen6=\theScaleholder@\dimen6 \Real{\dimen6}%
+ \special{PSfile=##1\space
+ llx=\the\LLXtoks@\space lly=\the\LLYtoks@\space
+ urx=\the\URXtoks@\space ury=\the\URYtoks@\space
+ rwi=\Temp\space rhi=\the\Realtoks}%
+ \edef\specialtemp{##2}%
+ \SPLIT@0.@\specialtemp.@\relax
+ \special{illustration ##1 scaled \the\Initialtoks@}%
+ }}
+
+ \def\SetStandardEPSFSpecial{%
+ \gdef\EPSFSpecial##1##2{%
+ \ms@g{}
+ \ms@g{%
+ !!! Sorry! There is still no standard for \noexpand
+ \special EPSF integration !!!}%
+ \ms@g{%
+ --- So you will have to identify your driver using a command}%
+ \ms@g{%
+ --- of the form \string\Set...EPSFSpecial, in order to get}%
+ \ms@g{%
+ --- your graphics to print.}%
+ \ms@g{%
+ Update your BoxedEPSF and read the documentation.}%
+ \ms@g{}
+ \gdef\EPSFSpecial####1####2{}
+ }}
+
+ \SetStandardEPSFSpecial %% currently gives warning
+
+ \let\wlog\wlog@ld %%restore logging
+
+ \catcode`\:=\C@tColon
+ \catcode`\;=\C@tSemicolon
+ \catcode`\?=\C@tQmark
+ \catcode`\!=\C@tEmark
+ \catcode`\"=\C@tDqt
+
+ \catcode`\@=\EPSFCatAt
+
+ \endinput
+
+%%%%%%%%%%%% ASCII Character test
+ %
+ % Upper case letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ % Lower case letters: abcdefghijklmnopqrstuvwxyz
+ % Digits: 0123456789
+ % Square, curly, angle braces, parentheses: [] {} <> ()
+ % Backslash, slash, vertical bar: \ / |
+ % Punctuation: . ? ! , : ;
+ % Underscore, hyphen, equals sign: _ - =
+ % Quotes--right left double: ' ` "
+ %"at", "number" "dollar", "percent", "and": @ # $ % &
+ % "hat", "star", "plus", "tilde": ^ * + ~
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Une seule erreur de transmission peut empoisoner un programme!
+ %
+ % A single transmission error can poison a whole program.
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/boxedeps/boxedeps.tex-old b/macros/generic/boxedeps/boxedeps.tex-old
new file mode 100644
index 0000000000..73113c21b1
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.tex-old
@@ -0,0 +1,861 @@
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%%%% boxedeps.tex
+ %%%%% MACROS FOR FIGURE INSERTS OF EPSF NORM %%%%%
+ %%%%% (EPSF = Encapsulated PostScript File)
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%% AUTHOR: Laurent Siebenmann
+ %% lcs@topo.math.u-psud.fr
+ %%
+ %%% VERSIONS: Feb 1991 -- Feb 1995
+ %% Revisions bi-annual approx.
+ %%
+ %%% SOMMAIRE: boxedeps.tex d\'efinit des macro-commandes
+ %% qui permettent d'int\'egrer dans un document TeX des
+ %% objets graphiques d\'ecrits par fichier de norme EPSF,
+ %% tout en accordant a chacun le statut d'une bo\^ite TeX ayant
+ %% les bonnes dimensions. La (seule!) contribution unique
+ %% de ce fichier est de faire cela d'une fa{\c}con universelle.
+ %% C'est a dire de fa{\c}con \`a pouvoir commod\'ement
+ %% servir avec tout pilote d'imprimante de norme
+ %% PostScript --- malgr\'e l'absence d'une norme
+ %% pour \special.
+ %%
+ %%%% ACTIVATION:
+ %% by a driver-by-driver protocol
+ %% see \SetTexturesEPSFSpecial
+ %% and its companions below.
+ %%
+ %%%% DOCUMENTATION:
+ %% --- see boxedeps.doc
+ %% The complete utility is called BoxedEPSF
+ %%
+ %%%% POSTINGS: anonymous ftp
+ %% --- ftp matups.math.u-psud.fr [192.54.146.4]
+ %% is the master copy in 1994.
+ %% --- ftp.uni-stuttgart.de
+ %% --- ftp ftp.TeX.AC.UK
+ %% --- ftp ftp.SHSU.edu
+ %% Locate the full package on these three
+ %% "CTAN" servers by using (while connected) the command
+ %% QUOTE SITE INDEX boxedeps
+
+ %%%% RECENT ADDITIONS: \SetepsfEPSFSpecial simultaneously serves
+ %% dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x
+
+ \ifx\MYUNDEFINED\BoxedEPSF
+ \let\temp\relax
+ \else
+ \message{}
+ \message{ !!! \string\BoxedEPSF or \string\BoxedArt %
+ macros already defined !!!}
+ \let\temp\endinput
+ \fi
+ \temp
+
+ \chardef\EPSFCatAt\the\catcode`\@
+ \catcode`\@=11
+
+ \chardef\C@tColon\the\catcode`\:
+ \chardef\C@tSemicolon\the\catcode`\;
+ \chardef\C@tQmark\the\catcode`\?
+ \chardef\C@tEmark\the\catcode`\!
+ \chardef\C@tDqt\the\catcode`\"
+
+ \def\PunctOther@{\catcode`\:=12
+ \catcode`\;=12 \catcode`\?=12 \catcode`\!=12 \catcode`\"=12}
+ \PunctOther@
+
+ %%temporarily suppress Plain's logging of allocations
+ \let\wlog@ld\wlog
+ \def\wlog#1{\relax}
+
+ %% New for TOOLS
+ %\newif\ifIN@
+ \newdimen\XShift@ \newdimen\YShift@
+ \newtoks\Realtoks
+
+ %%% New for BoxedEPSF
+ %
+ \newdimen\Wd@ \newdimen\Ht@
+ \newdimen\Wd@@ \newdimen\Ht@@
+ %
+ \newdimen\TT@
+ \newdimen\LT@
+ \newdimen\BT@
+ \newdimen\RT@
+ %
+ \newdimen\XSlide@ \newdimen\YSlide@
+ %
+ \newdimen\TheScale %% secretly scale in mils: 1pt= 1mil
+ \newdimen\FigScale %% secretly scale in mils: 1pt= 1mil
+ %
+ \newdimen\ForcedDim@@
+
+ \newtoks\EPSFDirectorytoks@
+ \newtoks\EPSFNametoks@
+ \newtoks\BdBoxtoks@
+ \newtoks\LLXtoks@ %% useful info for Oz
+ \newtoks\LLYtoks@
+ \newtoks\URXtoks@ %% further useful epsf.tex syntax
+ \newtoks\URYtoks@
+
+
+ \newif\ifNotIn@
+ \newif\ifForcedDim@
+ \newif\ifForceOn@
+ \newif\ifForcedHeight@
+ \newif\ifPSOrigin
+
+ \newread\EPSFile@
+
+ %%%% MESSAGES (separate macro best for Europe)
+ %%
+ \def\ms@g{\immediate\write16}
+
+ %%%% WORD-PROCESSING MACROS
+ %%
+ %%% \IN@0#1@#2@ : Is 1st exp of #1 in 1st exp of #2 ??
+ %% Answer in \ifIN@
+ \newif\ifIN@\def\IN@{\expandafter\INN@\expandafter}
+ \long\def\INN@0#1@#2@{\long\def\NI@##1#1##2##3\ENDNI@
+ {\ifx\m@rker##2\IN@false\else\IN@true\fi}%
+ \expandafter\NI@#2@@#1\m@rker\ENDNI@}
+ \def\m@rker{\m@@rker}
+
+ %%% \SPLIT@0#1@#2@ : Split 1st exp of #2 at 1st exp of #1
+ %% \Initialtoks@ , \Terminaltoks@ will contain pieces
+ \newtoks\Initialtoks@ \newtoks\Terminaltoks@
+ \def\SPLIT@{\expandafter\SPLITT@\expandafter}
+ \def\SPLITT@0#1@#2@{\def\TTILPS@##1#1##2@{%
+ \Initialtoks@{##1}\Terminaltoks@{##2}}\expandafter\TTILPS@#2@}
+
+ %%%% MACROS TO TRIM \ForeTrim@0#1@ and \Trim@0#1@
+ %% result appears in \Trimtoks@
+ %% LIMITATION: assume no multiple spaces to trim
+
+ \newtoks\Trimtoks@
+
+ %%% \ForeTrim@0#1@ trims initial space of first erpansion of #1
+ %% #1 of form \the\toks0 or \mymacro
+ \def\ForeTrim@{\expandafter\ForeTrim@@\expandafter}
+ \def\ForePrim@0 #1@{\Trimtoks@{#1}}
+ \def\ForeTrim@@0#1@{\IN@0\m@rker. @\m@rker.#1@%
+ \ifIN@\ForePrim@0#1@%
+ \else\Trimtoks@\expandafter{#1}\fi}
+ %%\m@rker expands here to \m@@rker since spot initial,
+ %% so no confusuion with \m@rker
+
+ %%% \Trim@0#1@ trims init and terminal spaces
+ %% Same syntax.
+ %% Warns if internal spaces found.
+ %%
+ \def\Trim@0#1@{%
+ \ForeTrim@0#1@%
+ \IN@0 @\the\Trimtoks@ @%
+ \ifIN@
+ \SPLIT@0 @\the\Trimtoks@ @\Trimtoks@\Initialtoks@
+ \IN@0\the\Terminaltoks@ @ @%
+ \ifIN@
+ \else \Trimtoks@ {FigNameWithSpace}%
+ \fi
+ \fi
+ }
+
+
+ %%%% MATH MACROS (provisional)
+ %% use dimen registers for reals; unit 1pt
+ %% (numerical dimension arguments OK unless contrary noted)
+
+ %%%% One needs the point token seq (pt with cat 12) USES dimen 0
+ \newtoks\pt@ks
+ \def\getpt@ks 0.0#1@{\pt@ks{#1}}
+ \dimen0=0pt\relax\expandafter\getpt@ks\the\dimen0@
+
+ %%% Convert dimen to "decimal multiplier"% USES dimens 0,2
+ %\newtoks\Realtoks% the output!
+ \def\Real#1{%
+ \dimen2=#1%
+ \SPLIT@0\the\pt@ks @\the\dimen2@%% lop off the points
+ \Realtoks=\Initialtoks@ %\showthe\Realtoks
+ }
+
+ %%% Multiplication
+ % USES dimens 0,2,4,6; preserves args; output \Product
+ \newdimen\Product
+ \def\Mult#1#2{%
+ \dimen4=#1\relax
+ \dimen6=#2%
+ \Real{\dimen4}%
+ \Product=\the\Realtoks\dimen6%
+ }
+
+ %%% Inverse
+ % USES dimens 0; preserves arg; output \Inverse
+ \newdimen\Inverse
+ \newdimen\hmxdim@ \hmxdim@=8192pt%halfmaxdimen
+ \def\Invert#1{%
+ \Inverse=\hmxdim@
+ \dimen0=#1%
+ \divide\Inverse \dimen0%
+ \multiply\Inverse 8}
+
+ %%% \Rescale#1#2#3 % USES dimens 0,2,4,6
+ %% alters dimen register #1 by ratio #2/#3
+ %% where #2,#3 can be raw dimensions OR dimen registers
+ \def\Rescale#1#2#3{% Adequate accuracy. Can improve.
+ \divide #1 by 100\relax
+ \dimen2=#3\divide\dimen2 by 100 \Invert{\dimen2}%
+ \Mult{#1}{#2}%
+ \Mult\Product\Inverse
+ #1=\Product}
+
+ %%% \Scale#1 scales dimen register #1
+ %% by dimen register real \TheScale; USES dimens 0
+ \def\Scale#1{\dimen0=\TheScale
+ \divide #1 by 1280 %% 1280*5120*10=1000*2^16
+ \divide \dimen0 by 5120
+ \multiply#1 by \dimen0
+ \divide#1 by 10 %% max size of #1 about 32000/10 pt
+ }
+
+ %%% SCRUNCHING BOXES AND SHIFTING CONTENTS
+ %% TeX has to do this in general
+ %% since some drivers do not let
+ %% one do it readily using Postscript
+
+ \newbox\scrunchbox
+
+ %%% \Scrunched#1 puts #1 in an hbox
+ %% then in effect zeros the dimensions of this box
+ \def\Scrunched#1{{\setbox\scrunchbox\hbox{#1}%
+ \wd\scrunchbox=0pt
+ \ht\scrunchbox=0pt
+ \dp\scrunchbox=0pt
+ \box\scrunchbox}}
+
+ %%% \Shifted@#1 puts #1 in \hbox
+ %% then locates basepoint to bottom left corner
+ %% then translates ink only by \XShift@,\YShift@
+ %% with Postscript convention
+ %% For simplicity use only on scrunched boxes
+ %\newdimen\XShift@
+ %\newdimen\YShift@
+ \def\Shifted@#1{%
+ \vbox {\kern-\YShift@
+ \hbox {\kern\XShift@\hbox{#1}\kern-\XShift@}%
+ \kern\YShift@}}
+
+ %%% \cBoxedEPSF#1 the main macro
+ %% component macros are explained in order below
+
+ \def\cBoxedEPSF#1{{\leavevmode
+ %% double brace for amstex \allign, \alligned, ...
+ \ReadNameAndScale@{#1}%
+ \SetEPSFSpec@
+ \ReadEPSFile@ \ReadBdB@x
+ %% Calculations
+ \TrimFigDims@
+ \CalculateFigScale@
+ \ScaleFigDims@
+ \SetInkShift@
+ \hbox{$\mathsurround=0pt\relax
+ \vcenter{\hbox{%
+ \FrameSpider{\hskip-.4pt\vrule}%
+ \vbox to \Ht@{\offinterlineskip\parindent=\z@%
+ \FrameSpider{\vskip-.4pt\hrule}\vfil
+ \hbox to \Wd@{\hfil}%
+ \vfil
+ \InkShift@{\EPSFSpecial{\EPSFSpec@}{\FigSc@leReal}}%
+ \FrameSpider{\hrule\vskip-.4pt}}%
+ \FrameSpider{\vrule\hskip-.4pt}}}%
+ $\relax}%
+ \CleanRegisters@
+ \ms@g{ *** Box composed for the %
+ EPS file \the\EPSFNametoks@}%
+ }}
+
+ \def\tBoxedEPSF#1{\setbox4\hbox{\cBoxedEPSF{#1}}%
+ \setbox4\hbox{\raise -\ht4 \hbox{\box4}}%
+ \box4
+ }
+
+ \def\bBoxedEPSF#1{\setbox4\hbox{\cBoxedEPSF{#1}}%
+ \setbox4\hbox{\raise \dp4 \hbox{\box4}}%
+ \box4
+ }
+
+ \let\BoxedEPSF\cBoxedEPSF% default setting
+
+ %% Some compatibility with BoxedArt.tex
+ %
+ \let\BoxedArt\BoxedEPSF
+
+ %% Some compatibility with Sweet-teX
+ %
+ \def\gLinefigure[#1scaled#2]_#3{%
+ \BoxedEPSF{#3 scaled #2}}
+
+ %% Some compatibility with Rokicki's dvips
+ %
+ \let\EPSFbox\bBoxedEPSF \let\EPSFfile\bBoxedEPSF
+
+ \def\EPSFxsize{\afterassignment\ForceW@\ForcedDim@@}
+ \def\ForceW@{\ForcedDim@true\ForcedHeight@false}
+
+ \def\EPSFysize{\afterassignment\ForceH@\ForcedDim@@}
+ \def\ForceH@{\ForcedDim@true\ForcedHeight@true}
+
+ \def\EmulateRokicki{%
+ \let\epsfbox\bBoxedEPSF \let\epsffile\bBoxedEPSF
+ \let\epsfxsize\EPSFxsize \let\epsfysize\EPSFysize}
+
+ %%% \ReadNameAndScale@#1
+ %
+ \def\ReadNameAndScale@#1{\IN@0 scaled@#1@% DOUBLE BARRELED
+ \ifIN@\ReadNameAndScale@@0#1@%
+ \else \ReadNameAndScale@@0#1 scaled\DefaultMilScale @%
+ \fi}
+
+ \def\ReadNameAndScale@@0#1scaled#2@{% HELPER MACRO
+ \let\OldBackslash@\\%
+ \def\\{\OtherB@ckslash}%
+ \edef\temp@{#1}%
+ \Trim@0\temp@ @%
+ \EPSFNametoks@\expandafter{\the\Trimtoks@ }%
+ \FigScale=#2 pt%
+ \let\\\OldBackslash@
+ }
+
+ \def\SetDefaultEPSFScale#1{%
+ \global\def\DefaultMilScale{#1}}
+
+ \SetDefaultEPSFScale{1000}
+
+
+ %%% \ReadEPSFile@
+ %
+ \def \SetBogusBbox@{%
+ \global\BdBoxtoks@{ BoundingBox:0 0 100 100 }%
+ \global\def\BdBoxLine@{ BoundingBox:0 0 100 100 }%
+ \ms@g{ !!! Will use placeholder !!!}%
+ }
+
+ {\catcode`\%=12\gdef\P@S@{%!}\gdef\pct@@{%%}} %% %! min sign of PS file
+
+ \def\ReadEPSFile@{%\show\EPSFSpec@%
+ \openin\EPSFile@\EPSFSpec@
+ \relax %necessary to prevent precocious expansion of \ifeof
+ \ifeof\EPSFile@
+ \ms@g{}%
+ \ms@g{ !!! EPS FILE \the\EPSFDirectorytoks@
+ \the\EPSFNametoks@\space WAS NOT FOUND !!!}%
+ \SetBogusBbox@
+ \else%\fi
+ \begingroup%%
+ \catcode`\%=12\catcode`\:=12\catcode`\!=12
+ \catcode"00=14 \catcode"7F=14 \catcode`\\=14
+ %% 14 = comment, terminates input line;
+ %% 5 = CR just picks up extra space
+ \global\read\EPSFile@ to \BdBoxLine@ %\show\BdBoxLine@
+ \IN@0\P@S@ @\BdBoxLine@ @%
+ \ifIN@ %% %! accepted as %!PS so do BdBox search!!
+ \NotIn@true
+ \loop
+ \ifeof\EPSFile@\NotIn@false
+ \ms@g{}%
+ \ms@g{ !!! BoundingBox NOT FOUND IN %
+ \the\EPSFDirectorytoks@\the\EPSFNametoks@\space!!! }%
+ \SetBogusBbox@
+ \else\global\read\EPSFile@ to \BdBoxLine@
+ %\show\BdBoxLine@
+ \fi
+ \global\BdBoxtoks@\expandafter{\BdBoxLine@}%
+ \IN@0BoundingBox:@\the\BdBoxtoks@ @%
+ \ifIN@\NotIn@false\fi%
+ \ifNotIn@
+ \repeat
+ \else
+ \ms@g{}%
+ \ms@g{ !!! \the\EPSFNametoks@\space is not PostScript.}%
+ \ms@g{ !!! It should begin with the "\P@S@". }%
+ \ms@g{ !!! Also, all other header lines until }%
+ \ms@g{ !!! "\pct@@ EndComments" should begin with "\pct@@". }%
+ \SetBogusBbox@
+ \fi
+ \endgroup\relax
+ \fi
+ \closein\EPSFile@
+ }
+
+
+ %%% \ReadBdB@x
+ % Rmk For simplicity 0 not used in syntax
+ % of \ReadBdB@x@, \ReadBdB@x@@
+ \def\ReadBdB@x{% PART 0
+ \expandafter\ReadBdB@x@\the\BdBoxtoks@ @}
+
+ \def\ReadBdB@x@#1BoundingBox:#2@{% PART 1
+ \ForeTrim@0#2@%
+ \IN@0atend@\the\Trimtoks@ @%
+ \ifIN@ \Trimtoks@={0 0 100 100 }%
+ \ms@g{}%
+ \ms@g{ !!! BoundingBox not found in %
+ \the\EPSFDirectorytoks@\the\EPSFNametoks@\space !!!}%
+ \ms@g{ !!! It must not be at end of EPSF !!!}%
+ \ms@g{ !!! Will use placeholder !!!}%
+ \fi%% cf \SetBogusBbox@
+ \expandafter\ReadBdB@x@@\the\Trimtoks@ @%
+ }
+
+ \def\ReadBdB@x@@#1 #2 #3 #4@{% PART 2
+ \Wd@=#3bp\advance\Wd@ by -#1bp%
+ \Ht@=#4bp\advance\Ht@ by-#2bp%
+ \Wd@@=\Wd@ \Ht@@=\Ht@ %% useful info for Clark
+ \LLXtoks@={#1}\LLYtoks@={#2}%% useful for Oz
+ \URXtoks@={#3}\URYtoks@={#4}%% useful for epsf.tex
+ \ifPSOrigin\XShift@=-#1bp\YShift@=-#2bp\fi
+ }
+
+ %%% \SetEPSFDirectory
+ %
+ \def\G@bbl@#1{}
+ \bgroup
+ \global\edef\OtherB@ckslash{\expandafter\G@bbl@\string\\}
+ \egroup
+
+ \def\SetEPSFDirectory{% Part 1
+ \bgroup\PunctOther@\relax
+ \let\\\OtherB@ckslash
+ \SetEPSFDirectory@}
+
+ \def\SetEPSFDirectory@#1{% Part 2
+ \edef\temp@{#1}%
+ \Trim@0\temp@ @% result in \Trimtoks@
+ \global\toks1\expandafter{\the\Trimtoks@ }\relax
+ \egroup
+ \EPSFDirectorytoks@=\toks1
+ }
+
+ \def\SetEPSFSpec@{%
+ \bgroup
+ \let\\=\OtherB@ckslash
+ \global\edef\EPSFSpec@{%
+ \the\EPSFDirectorytoks@\the\EPSFNametoks@}%
+ \global\edef\EPSFSpec@{\EPSFSpec@}%
+ \egroup}
+
+ %%% \TrimFigDims@
+ %
+ \def\TrimTop#1{\advance\TT@ by #1}
+ \def\TrimLeft#1{\advance\LT@ by #1}
+ \def\TrimBottom#1{\advance\BT@ by #1}
+ \def\TrimRight#1{\advance\RT@ by #1}
+
+ \def\TrimBoundingBox#1{%
+ \TrimTop{#1}%
+ \TrimLeft{#1}%
+ \TrimBottom{#1}%
+ \TrimRight{#1}%
+ }
+
+ \def\TrimFigDims@{%
+ \advance\Wd@ by -\LT@
+ \advance\Wd@ by -\RT@ \RT@=\z@
+ \advance\Ht@ by -\TT@ \TT@=\z@
+ \advance\Ht@ by -\BT@
+ }
+
+
+ %%% \CalculateFigScale@
+ %
+ \def\ForceWidth#1{\ForcedDim@true
+ \ForcedDim@@#1\ForcedHeight@false}
+
+ \def\ForceHeight#1{\ForcedDim@true
+ \ForcedDim@@=#1\ForcedHeight@true}
+
+ \def\ForceOn{\ForceOn@true}
+ \def\ForceOff{\ForceOn@false\ForcedDim@false}
+
+ \def\CalculateFigScale@{%
+ %Have default \FigScale or read \FigScale
+ \ifForcedDim@\FigScale=1000pt% %% start afresh
+ \ifForcedHeight@
+ \Rescale\FigScale\ForcedDim@@\Ht@
+ \else
+ \Rescale\FigScale\ForcedDim@@\Wd@
+ \fi
+ \fi
+ \Real{\FigScale}%
+ \edef\FigSc@leReal{\the\Realtoks}%
+ }
+
+ \def\ScaleFigDims@{\TheScale=\FigScale
+ \ifForcedDim@
+ \ifForcedHeight@ \Ht@=\ForcedDim@@ \Scale\Wd@
+ \else \Wd@=\ForcedDim@@ \Scale\Ht@
+ \fi
+ \else \Scale\Wd@\Scale\Ht@
+ \fi
+ \ifForceOn@\relax\else\global\ForcedDim@false\fi
+ \Scale\LT@\Scale\BT@ %%%\Scale\Wd@\Scale\Ht@
+ \Scale\XShift@\Scale\YShift@
+ }
+
+ %%% \ShowDisplacementBoxes
+ %% shows (prints) corrected scaled and positioned
+ %% bounding boxes; for diagnostics
+ %%% \HideDisplacementBoxes makes them invisible again
+ %%
+ \def\HideDisplacementBoxes{\global\def\FrameSpider##1{\null}}
+ \def\ShowDisplacementBoxes{\global\def\FrameSpider##1{##1}}
+ \let\HideFigureFrames\HideDisplacementBoxes %% some synonyms
+ \let\ShowFigureFrames\ShowDisplacementBoxes
+ \ShowDisplacementBoxes
+
+ %%% \hSlide#1, \vSlide#1
+ %%
+ \def\hSlide#1{\advance\XSlide@ by #1}
+ \def\vSlide#1{\advance\YSlide@ by #1}
+
+ %%% \SetInkShift@, \InkShift@#1
+ %%
+ \def\SetInkShift@{%
+ \advance\XShift@ by -\LT@
+ \advance\XShift@ by \XSlide@
+ \advance\YShift@ by -\BT@
+ \advance\YShift@ by -\YSlide@
+ }
+ %
+ \def\InkShift@#1{\Shifted@{\Scrunched{#1}}}
+
+ %%% \CleanRegisters@
+ %
+ \def\CleanRegisters@{%
+ \globaldefs=1\relax
+ \XShift@=\z@\YShift@=\z@\XSlide@=\z@\YSlide@=\z@
+ \TT@=\z@\LT@=\z@\BT@=\z@\RT@=\z@
+ \globaldefs=0\relax}
+
+ %%% Special syntax for several drivers. The macros
+ %% \SetTexturesEPSFSpecial %% Textures
+ %% \SetUnixCoopEPSFSpecial %% dvi2ps early unix
+ %% \SetBechtolsheimDVI2PSEPSFSpecial and
+ %% \SetBechtolsheimDVITPSEPSFSpecial %% by S.P.Bechtolsheim
+ %% \SetLisEPSFSpecial %% dvi2ps by Tony Lis
+ %% \SetepsfEPSFSpecial %% ******* will work for many:
+ %% ----- dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7
+ %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki
+ %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y same as
+ %% \SetDVIWindowEPSFSpecial %% DVIWindow of Y&Y
+ %% \SetDirectTeXEPSFSpecial %% DirectTeX by Wilfried Ricken
+ %% \SetCMacTeXEPSFSpecial %% CMacTeX by Tom Kiffe
+ %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.7) by Andrew Trevorrow
+ %% -----
+ %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x
+ %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow
+ %% --- also for OzTeX versions <= 1.41 !!
+ %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS
+ %% \SetClarkEPSFSpecial %% dvitops by James Clark
+ %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe
+ %% \SetNorthlakeEPSFSpecial %% Northlake Software
+ %% \SetStandardEPSFSpecial %% Nonexistant: Placebo used
+ %%
+ %% These many drivers are supported roughly
+ %% by (re-)defining the macro \EPSFSpecial#1#2, where
+ %% #1 = EPS file pathname (use \\ for the letter backslash)
+ %% #2 = scale in mils
+ %% Be wary of using strange characters in pathnames!
+
+ %% Textures, Blue Sky Research, Barry Smith
+ \def\SetTexturesEPSFSpecial{\PSOriginfalse%\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{\relax
+ \edef\specialtemp{##2}%
+ \SPLIT@0.@\specialtemp.@\relax
+ \special{illustration ##1 scaled
+ \the\Initialtoks@}}}
+
+ %% Unix : dvi2ps by: Mark Senn, Stephan Bechtolsheim,
+ % Bob Brown, Richard, Furuta, James Schaad, Robert Wells,
+ % Norm Hutchinson, Neal Holt, Scott Jones, Howard Trickey.
+ % Introduced by B. Horn <bkph@ai.mit.edu>
+ \def\SetUnixCoopEPSFSpecial{\PSOrigintrue % Please test!
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}%dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{psfile=##1\space
+ hscale=\Aux@\space
+ vscale=\Aux@}}}
+
+
+ %% dvi2ps and dvitps by S.P. Bechtolsheim,
+ % Introduced by B. Horn <bkph@ai.mit.edu> and Carl.M.Jones,
+ % testing by R. Evans <Robert@cm.cardiff.ac.uk>
+ % and George Denk <denk@mathematik.tu-muenchen.de>
+ % Note that a prolog file psfig.pro
+ % specific to the driver should be available.
+ \def\SetBechtolsheimEPSFSpecial@{%% tool macro only
+ \PSOrigintrue
+ \special{\DriverTag@ Include0 "psfig.pro"}%
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt %% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4} %% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%% convert dimen to real
+ \special{\DriverTag@ Literal "10 10 0 0 10 10 startTexFig
+ \the\mag\space 1000 div
+ dup 3.25 neg mul 1 index .25 neg mul translate %% correction line
+ \Aux@\space mul dup scale "}%
+ \special{\DriverTag@ Include1 "##1"}%
+ \special{\DriverTag@ Literal "endTexFig "}%
+ }}
+
+ \def\SetBechtolsheimDVITPSEPSFSpecial{\def\DriverTag@{dvitps: }%
+ \SetBechtolsheimEPSFSpecial@}
+
+ \def\SetBechtolsheimDVI2PSEPSFSSpecial{\def\DriverTag@{DVI2PS: }%
+ \SetBechtolsheimEPSFSpecial@}
+
+ %% dvi2ps by Tony Lis,
+ % implantations? ; dates?; availability?
+ % Introduced by B. Horn <bkph@ai.mit.edu>
+ \def\SetLisEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{pstext="10 10 0 0 10 10 startTexFig\space
+ \the\mag\space 1000 div \Aux@\space mul
+ \the\mag\space 1000 div \Aux@\space mul scale"}%
+ \special{psfile=##1}%
+ \special{pstext=endTexFig}%
+ }}
+
+ %% dvips by Tom Rokicki; free driver in portable C
+ % Introduced by W.D. Neumann <neumann@mps.ohio-state.edu>
+ \def\SetRokickiEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 10\relax
+ \Real{\dimen4}% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{psfile="##1"\space
+ hscale=\Aux@\space
+ vscale=\Aux@}}}
+
+ \def\SetInlineRokickiEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%
+ %%convert dimen to real
+ \special{ps::[begin] 10 10 0 0 10 10 startTexFig\space
+ \the\mag\space 1000 div \Aux@\space mul
+ \the\mag\space 1000 div \Aux@\space mul scale}%
+ \special{ps: plotfile ##1}%
+ \special{ps::[end] endTexFig}%
+ }}
+
+ %%% Rokicki's epsf.tex syntax.
+ %% Is followed by DirectTeX (W. Ricken)
+ %% CMacTeX (Tom Kiffe), Y&Y's drivers, and OzTeX >= 1.7
+ \def\SetepsfEPSFSpecial{\PSOriginfalse
+ \gdef\epsfclipstring{}%
+ %% make { clip} if you want to clip (non-portably)
+ %% down to the PostScript bounding box.
+ \gdef\EPSFSpecial##1##2{%
+ \dimen6=\the\URXtoks@ pt %% not bp!!!!!
+ \advance\dimen6 by -\the\LLXtoks@ pt
+ %% \dimen6 now bbox width * points
+ \dimen4=##2pt %% convert mil scale to dimen
+ \divide\dimen4 by 100 %% 1000ths to 10ths
+ \Real{\dimen4}%% dimens 0,2 used here
+ \dimen6=\the\Realtoks\dimen6
+ \Real{\dimen6}%% dimens 0,2 used here
+ %% \Realtoks now holds decimal real no
+ %% 10 times desired "real width" (rwi) in bp
+ \special{PSfile=##1\space
+ llx=\the\LLXtoks@\space lly=\the\LLYtoks@\space
+ urx=\the\URXtoks@\space ury=\the\URYtoks@\space
+ rwi=\the\Realtoks\space
+ \epsfclipstring}%
+ }}
+ %% Minor Bug (my laziness): scaling not performed if bb width zero
+ %% Rmk: Under epsf.tex only multiples of (1/10) bp available widths
+ %% but considerably more accuracy available here.
+
+ \let\SetDirectTeXEPSFSpecial=\SetepsfEPSFSpecial
+ \let\SetCMacTeXEPSFSpecial=\SetepsfEPSFSpecial
+ \let\SetOzTeXEPSFSpecial=\SetepsfEPSFSpecial
+ %%% \SetOzTeXEPSFSpecial only for OzTeX in versions 1.7 and later
+
+ %%% Old OzTeX versions (1.42 to 1.6), by Andrew Trevorrow.
+ %%% For versions <= 1.41 use \SetPSprintEPSFSpecial below.
+ %% Nota: Version 1.42--1.5 may give
+ %% spurious "offpage" error notices on printing.
+ \def\SetOldOzTeXEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \dimen4=##2pt%% convert real to dimen
+ \divide\dimen4 by 1000\relax
+ \Real{\dimen4}%% dimens 0,2 used here
+ \edef\Aux@{\the\Realtoks}%% convert dimen to real
+ \special{epsf=\string"##1\string"\space scale=\Aux@}%
+ }}
+
+ %% PSprint, by AndrewTrevorrow for VaX VMS
+ %% and OzTeX versions <= 1.41
+ % tested 2-91 by Max Calviani <ISICA@ASTRPD.infn.it>
+ \def\SetPSprintEPSFSpecial{\PSOriginfalse % artifice; see below
+ \gdef\EPSFSpecial##1##2{%note order
+ \special{##1\space
+ ##2 1000 div \the\mag\space 1000 div mul
+ ##2 1000 div \the\mag\space 1000 div mul scale
+ \the\LLXtoks@\space neg \the\LLYtoks@\space neg translate
+ }}}
+
+ %% DVILASER/PS driver originally written by David Fuchs
+ % marketed and supported by ArborTeXt 535 W. William St.
+ % Suite 300, Ann Arbor, MI 48103, U.S.A
+ % (313) 996-3566 (313) 996-3573
+ % help@arbortext.com, Andrew Dobrowolski
+ \def\SetArborEPSFSpecial{\PSOriginfalse % check!
+ \gdef\EPSFSpecial##1##2{%
+ \edef\specialthis{##2}%
+ \SPLIT@0.@\specialthis.@\relax % suppress decimals (nec!)
+ \special{ps: epsfile ##1\space \the\Initialtoks@}}}
+
+ %% dvitops, (c) James Clark <jjc@jclark.uucp>
+ % public domain; distributed by UK TeX Archive
+ % computers: unix, msdos, vms, primos and vm/cms,
+ % introduced by S. Ratz <spqr@uk.ac.southampton.ecs>
+ \def\SetClarkEPSFSpecial{\PSOriginfalse % please test!
+ \gdef\EPSFSpecial##1##2{%
+ \Rescale {\Wd@@}{##2pt}{1000pt}%
+ \Rescale {\Ht@@}{##2pt}{1000pt}%
+ \special{dvitops: import
+ ##1\space\the\Wd@@\space\the\Ht@@}}}
+
+ %% DVIPSONE, for PC compatibles
+ % Y&Y, 106 Indian Hill, Carlisle MA 01741, USA
+ % (508) 371-3286
+ % (introduced by B. Horn <bkph@ai.mit.edu>)
+ \let\SetDVIPSONEEPSFSpecial\SetepsfEPSFSpecial
+ \let\SetDVIPSoneEPSFSpecial\SetepsfEPSFSpecial
+ \let\SetDVIWindowEPSFSpecial\SetepsfEPSFSpecial
+
+ %% DVIALW by N. Beebe, public domain
+ % DVI Driver Distribution, Center for Scientific Computing,
+ % Department of Mathematics, 220 South Physics Building,
+ % University of Utah, Salt Lake City, UT 84112, USA
+ % (introduced by B. Horn <bkph@ai.mit.edu>)
+ % Proposed standard; see TUGboat article 1993.
+ \def\SetBeebeEPSFSpecial{%please test!
+ \PSOriginfalse%
+ \gdef\EPSFSpecial##1##2{\relax
+ \special{language "PS",
+ literal "##2 1000 div ##2 1000 div scale",
+ position = "bottom left",
+ include "##1"}}}
+ \let\SetDVIALWEPSFSpecial\SetBeebeEPSFSpecial
+
+ %% Northlake software
+ \def\SetNorthlakeEPSFSpecial{\PSOrigintrue
+ \gdef\EPSFSpecial##1##2{%
+ \edef\specialthis{##2}%
+ \SPLIT@0.@\specialthis.@\relax % suppress decimals (nec!)
+ \special{insert ##1,magnification=\the\Initialtoks@}}}
+
+ %%% MultiSpecial for Textures PLUS drivers supporting epsf.tex
+ %%% syntax of Rokicki (one of many dvips syntaxes)
+ %% *experimental* 2-95
+ \def\SetEPSFMultiSpecial{\PSOriginfalse
+ \csname newwrite\endcsname \EPSFile@@
+ \immediate\openout\EPSFile@@ illustration
+ \immediate\write\EPSFile@@ {\P@S@}%
+ \immediate\write\EPSFile@@ {\pct@@ Remark: Tranquilizer for OzTeX...}%
+ \immediate\closeout\EPSFile@@
+ \gdef\EPSFSpecial##1##2{%% epsf but have dropped \clipstring
+ \dimen6=\the\URXtoks@ pt %% not bp!!!!!
+ \advance\dimen6 by -\the\LLXtoks@ pt
+ %% \dimen6 now bbox width * points
+ \dimen4=##2pt %% convert mil scale to dimen
+ \divide\dimen4 by 100 %% 1000ths to 10ths
+ \Real{\dimen4}%% dimens 0,2 used here
+ \dimen6=\the\Realtoks\dimen6
+ \Real{\dimen6}%% dimens 0,2 used here
+ %% \Realtoks now holds decimal real no
+ %% 10 times desired "real width" (rwi) in bp
+ \special{PSfile=##1\space
+ llx=\the\LLXtoks@\space lly=\the\LLYtoks@\space
+ urx=\the\URXtoks@\space ury=\the\URYtoks@\space
+ rwi=\the\Realtoks}%
+ %
+ \edef\specialtemp{##2}%
+ \SPLIT@0.@\specialtemp.@\relax
+ \special{illustration ##1 scaled \the\Initialtoks@}%
+ }}
+
+ \def\SetStandardEPSFSpecial{%
+ \gdef\EPSFSpecial##1##2{%
+ \ms@g{}
+ \ms@g{%
+ !!! Sorry! There is still no standard for \string%
+ \special\space EPSF integration !!!}%
+ \ms@g{%
+ --- So you will have to identify your driver using a command}%
+ \ms@g{%
+ --- of the form \string\Set...EPSFSpecial, in order to get}%
+ \ms@g{%
+ --- your graphics to print.}%
+ \ms@g{%
+ Update your BoxedEPSF and read the documentation.}%
+ \ms@g{}
+ \gdef\EPSFSpecial####1####2{}
+ }}
+
+ \SetStandardEPSFSpecial %% currently gives warning
+
+ \let\wlog\wlog@ld %%restore logging
+
+ \catcode`\:=\C@tColon
+ \catcode`\;=\C@tSemicolon
+ \catcode`\?=\C@tQmark
+ \catcode`\!=\C@tEmark
+ \catcode`\"=\C@tDqt
+
+ \catcode`\@=\EPSFCatAt
+
+ \endinput
+
+%%%%%%%%%%%% ASCII Character test
+ %
+ % Upper case letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ % Lower case letters: abcdefghijklmnopqrstuvwxyz
+ % Digits: 0123456789
+ % Square, curly, angle braces, parentheses: [] {} <> ()
+ % Backslash, slash, vertical bar: \ / |
+ % Punctuation: . ? ! , : ;
+ % Underscore, hyphen, equals sign: _ - =
+ % Quotes--right left double: ' ` "
+ %"at", "number" "dollar", "percent", "and": @ # $ % &
+ % "hat", "star", "plus", "tilde": ^ * + ~
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Une seule erreur de transmission peut empoisoner un programme!
+ %
+ % A single transmission error can poison a whole program.
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/boxedeps/boxedeps.txt b/macros/generic/boxedeps/boxedeps.txt
new file mode 120000
index 0000000000..4b8f6aa98e
--- /dev/null
+++ b/macros/generic/boxedeps/boxedeps.txt
@@ -0,0 +1 @@
+boxedeps.doc \ No newline at end of file
diff --git a/macros/generic/boxedeps/gdisk.eps b/macros/generic/boxedeps/gdisk.eps
new file mode 100644
index 0000000000..10848992df
--- /dev/null
+++ b/macros/generic/boxedeps/gdisk.eps
@@ -0,0 +1,14 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Title: gdisk.eps
+%%Remark: A simple test file
+%%Remark: DELETE SPACES BEFORE ALL %% (especially for Textures)
+%%Pages: 0
+%%BoundingBox: 216 216 432 432
+%%EndComments
+
+ 72 72 scale % units are now inches instead of big points
+ newpath
+ 4.5 4.5 1.5 0 360 arc
+ closepath
+ 0.9 setgray
+ fill
diff --git a/macros/generic/boxedeps/rose.eps b/macros/generic/boxedeps/rose.eps
new file mode 100644
index 0000000000..db4b60eab5
--- /dev/null
+++ b/macros/generic/boxedeps/rose.eps
@@ -0,0 +1,811 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator:Adobe Illustrator(TM) 1.1 M00002152N
+%%For:Barry Smith Kellerman and Smith
+%%Title:SmallRose
+%%CreationDate:8/29/87 4:43 PM
+%%DocumentProcSets:Adobe_Illustrator_1.1 0 0
+%%DocumentSuppliedProcSets:Adobe_Illustrator_1.1 0 0
+%%DocumentFonts:Courier
+%%BoundingBox:29 39 160 211
+%%TemplateBox:276 368 276 368
+%%EndComments
+%%BeginProcSet:Adobe_Illustrator_1.1 0 0
+% Copyright (C) 1987 Adobe Systems Incorporated.
+% All Rights Reserved.
+% Adobe Illustrator is a trademark of Adobe Systems Incorporated.
+/Adobe_Illustrator_1.1 dup 100 dict def load begin
+/Version 0 def
+/Revision 0 def
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bdef
+/xdef {exch def} bdef
+% graphic state operators
+/_K {3 index add neg dup 0 lt {pop 0} if 3 1 roll} bdef
+/_k /setcmybcolor where
+{/setcmybcolor get} {{1 sub 4 1 roll _K _K _K setrgbcolor pop} bind} ifelse def
+/g {/_b xdef /p {_b setgray} def} bdef
+/G {/_B xdef /P {_B setgray} def} bdef
+/k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef
+/K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef
+/d /setdash ldef
+/_i currentflat def
+/i {dup 0 eq {pop _i} if setflat} bdef
+/j /setlinejoin ldef
+/J /setlinecap ldef
+/M /setmiterlimit ldef
+/w /setlinewidth ldef
+% path construction operators
+/_R {.25 sub round .25 add} bdef
+/_r {transform _R exch _R exch itransform} bdef
+/c {_r curveto} bdef
+/C /c ldef
+/v {currentpoint 6 2 roll _r curveto} bdef
+/V /v ldef
+/y {_r 2 copy curveto} bdef
+/Y /y ldef
+/l {_r lineto} bdef
+/L /l ldef
+/m {_r moveto} bdef
+% error operators
+/_e [] def
+/_E {_e length 0 ne {gsave 0 g 0 G 0 i 0 J 0 j 1 w 10 M [] 0 d
+/Courier 20 0 0 1 z [0.966 0.259 -0.259 0.966
+_e 0 get _e 2 get add 2 div _e 1 get _e 3 get add 2 div] e _f t T grestore} if}
+bdef
+/_fill {{fill} stopped
+{/_e [pathbbox] def /_f (ERROR: can't fill, increase flatness) def n _E} if}
+bdef
+/_stroke {{stroke} stopped
+{/_e [pathbbox] def /_f (ERROR: can't stroke, increase flatness) def n _E} if}
+bdef
+% path painting operators
+/n /newpath ldef
+/N /n ldef
+/F {p _fill} bdef
+/f {closepath F} bdef
+/S {P _stroke} bdef
+/s {closepath S} bdef
+/B {gsave F grestore S} bdef
+/b {closepath B} bdef
+% text block construction and painting operators
+/_s /ashow ldef
+/_S {(?) exch {2 copy 0 exch put pop dup false charpath currentpoint _g
+setmatrix
+_stroke _G setmatrix moveto 3 copy pop rmoveto} forall pop pop pop n} bdef
+/_A {_a moveto _t exch 0 exch} bdef
+/_L {0 _l neg translate _G currentmatrix pop} bdef
+/_w {dup stringwidth exch 3 -1 roll length 1 sub _t mul add exch} bdef
+/_z [{0 0} bind {dup _w exch neg 2 div exch neg 2 div} bind {dup _w exch neg
+exch neg} bind] def
+/z {_z exch get /_a xdef /_t xdef /_l xdef exch findfont exch scalefont setfont}
+bdef
+/_g matrix def
+/_G matrix def
+/_D {_g currentmatrix pop gsave concat _G currentmatrix pop} bdef
+/e {_D p /t {_A _s _L} def} bdef
+/r {_D P /t {_A _S _L} def} bdef
+/a {_D /t {dup p _A _s P _A _S _L} def} bdef
+/o {_D /t {pop _L} def} bdef
+/T {grestore} bdef
+% group construction operators
+/u {} bdef
+/U {} bdef
+% font construction operators
+/Z {findfont begin currentdict dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall /FontName exch def dup length 0
+ne
+{/Encoding Encoding 256 array copy def 0 exch {dup type /nametype eq
+{Encoding 2 index 2 index put pop 1 add} {exch pop} ifelse} forall} if pop
+currentdict dup end end /FontName get exch definefont pop} bdef
+end
+%%EndProcSet
+%%EndProlog
+%%BeginSetup
+Adobe_Illustrator_1.1 begin
+n
+%%EndSetup
+u
+0 g
+0 G
+1 i
+0 J
+0 j
+0.125 w
+10 M
+[]0 d
+%%Note:
+152.9985 45.9242 m
+152.9985 203.9242 L
+35.9985 203.9242 L
+35.9985 45.9242 L
+152.9985 45.9242 L
+s
+94.4985 124.9242 m
+S
+U
+u
+0.75 w
+154.999 43.899 m
+154.999 205.9495 L
+33.998 205.9495 L
+33.998 43.899 L
+154.999 43.899 L
+s
+94.4985 124.9242 m
+S
+U
+u
+0.0625 w
+58.7123 69.5624 m
+58.8728 68.7319 59.4833 68.5639 59.4591 67.9414 c
+S
+u
+93.5396 175.4626 m
+94.1809 172.6676 97.6574 172.9324 95.2237 168.9578 C
+95.308 169.5803 95.5018 169.9229 94.5829 171.3921 c
+94.5639 171.4221 94.0447 171.6254 93.7568 171.9812 c
+93.4686 172.3369 93.0492 173.3212 93.1274 173.6138 c
+93.5969 175.3708 94.295 176.4491 90.1393 178.0765 C
+93.3026 178.8709 93.7624 178.1366 94.7745 180.6974 c
+95.7869 183.2585 97.6351 182.8121 97.8649 182.4449 C
+98.8773 185.006 98.872 183.7602 99.4931 184.8572 C
+100.7984 183.6067 101.7276 184.6292 y
+104.2648 183.081 104.568 181.761 y
+105.3253 178.4606 l
+104.408 173.188 l
+S
+104.1474 182.6419 m
+104.6172 184.3989 105.1574 184.5799 105.93 185.0169 c
+106.7024 185.4538 106.5619 185.0386 106.9739 185.8557 c
+107.4984 186.8979 106.7063 186.3881 107.9799 186.8595 C
+107.9863 185.9158 108.3276 186.3675 109.0176 186.1414 c
+110.101 185.7859 110.2523 186.4665 111.2911 186.0599 c
+112.33 185.653 112.9121 186.6036 113.4839 185.0625 c
+S
+105.1076 177.0327 m
+106.4104 175.1591 106.8554 175.5972 106.9703 175.4136 c
+107.0851 175.2301 108.0091 172.5522 107.9699 172.4056 C
+109.3633 173.9395 106.7355 174.5353 110.0896 174.8162 c
+112.8225 175.0451 112.6295 173.8908 113.8199 172.8239 c
+115.0104 171.7572 116.4795 170.5062 117.6357 170.5384 c
+118.7919 170.571 120.2883 171.2616 121.9432 170.7059 c
+123.5981 170.1504 124.2092 168.7559 125.5977 169.044 C
+123.4001 168.7954 123.7447 168.2447 121.0115 169.0607 c
+118.2785 169.8768 118.4351 170.4622 116.5062 169.993 c
+114.5773 169.5238 116.1107 169.8937 114.441 169.167 C
+116.7267 169.5636 117.0516 169.8089 118.8431 168.9219 c
+121.3049 167.7039 121.5027 166.6039 123.4682 166.597 c
+125.4336 166.5897 125.2405 166.4804 126.1695 167.5028 c
+127.0988 168.5256 124.8253 168.6071 128.6388 168.1534 c
+132.4523 167.6998 131.3718 167.3374 133.418 168.246 c
+135.4643 169.1544 135.1172 169.0824 135.3911 170.1073 c
+135.6648 171.1323 135.6698 169.9232 135.9828 171.0944 c
+S
+102.1821 182.6491 m
+103.1667 178.3585 103.8585 177.8799 103.1175 175.721 c
+102.3765 173.5618 103.4629 175.3257 103.9975 174.1056 c
+104.9919 171.8354 105.0681 171.9767 104.3736 171.8326 c
+103.6793 171.6885 101.3669 171.6237 99.7117 172.1792 c
+98.0568 172.7349 97.4457 174.1295 98.106 175.3728 c
+98.7663 176.616 99.732 177.162 100.5069 178.2217 c
+101.2821 179.2814 101.7883 180.562 102.1821 182.6491 C
+s
+102.2211 182.7954 m
+100.6785 182.5445 101.3313 181.9193 101.7126 180.8921 c
+S
+107.39 174.377 m
+107.6272 175.8784 108.2074 176.3618 107.4398 177.1706 c
+106.6724 177.9795 106.5183 178.0167 107.0662 180.0666 c
+107.6139 182.1162 106.4627 183.3294 109.2398 183.9057 c
+112.0171 184.4817 114.4886 185.755 115.9897 185.2366 c
+117.4905 184.7182 117.6129 186.4031 120.654 185.5128 c
+123.6952 184.6222 125.003 183.9947 124.262 181.8358 c
+123.5208 179.6766 123.1542 179.5315 122.7679 179.3131 c
+S
+124.4159 181.7985 m
+127 182.2653 130.7404 182.7648 131.3929 182.1396 c
+132.0457 181.5143 134.732 178.6831 134.8076 178.3533 c
+134.8835 178.0231 134.265 177.5492 134.8026 177.1075 c
+135.3405 176.6658 135.8782 176.2241 136.4186 176.4055 c
+136.9587 176.5868 138.1049 174.1278 138.066 173.9812 C
+139.8775 174.0113 139.0317 174.5275 138.8701 172.6959 c
+138.7085 170.8647 137.2786 172.2621 137.2319 170.2472 C
+136.1196 171.6068 134.7019 171.209 134.159 170.4049 c
+133.6161 169.6008 130.1057 168.7344 129.9516 168.7714 c
+129.1481 168.9656 127.7746 168.9077 127.3897 169.0006 c
+126.7302 169.16 125.9167 169.3174 125.791 169.153 c
+125.665 168.9887 125.791 169.153 125.5977 169.044 c
+S
+110.8987 174.7764 m
+111.1398 177.2121 108.6694 176.2503 109.2538 177.8234 c
+109.8384 179.3968 109.1784 180.6084 110.1466 181.7771 c
+112.244 184.3101 110.1967 182.2717 113.9618 184.0898 C
+114.8858 183.8668 115.1578 184.4244 115.8501 184.1013 c
+117.0199 183.5558 117.4452 183.0146 117.6382 183.1239 c
+117.8315 183.2332 120.6543 182.4939 121.0148 181.8019 c
+121.3399 181.1777 121.0067 179.7776 y
+S
+112.2919 183.3634 m
+111.4905 182.9723 110.8959 181.2067 111.0814 179.4472 c
+111.2669 177.688 109.9989 178.6178 109.175 177.3751 c
+S
+102.9086 171.7189 m
+105.8466 171.5158 105.0984 169.943 105.2889 169.4295 C
+108.3362 170.0962 109.7563 168.6619 109.9861 168.2947 c
+110.2158 167.9276 109.2137 167.858 109.3236 166.4287 c
+109.4334 164.9993 109.1253 165.0736 109.8587 165.3643 C
+110.5713 165.27 110.531 164.8122 110.3171 164.3182 c
+110.1032 163.8245 111.0088 163.8395 111.2789 163.9299 C
+111.7409 163.8184 110.6628 164.0787 110.8875 162.4658 c
+111.1123 160.8529 111.611 160.2649 112.7647 159.6744 c
+113.9187 159.0842 115.0332 158.3471 116.6124 158.1216 c
+118.1917 157.896 118.3091 158.3352 119.0817 158.7721 c
+119.8541 159.2091 123.7875 159.8174 124.4389 158.8809 c
+S
+106.3795 172.2832 m
+110.3054 171.0232 109.4927 170.1285 110.8005 169.501 c
+112.1083 168.8732 116.26 166.3116 117.4947 166.637 c
+S
+131.7851 164.6659 m
+131.7181 164.7988 131.4777 164.9738 131.2469 165.0297 c
+130.7849 165.1412 130.0465 163.605 129.4304 163.7538 c
+129.1222 163.8284 128.3829 164.4356 127.0921 164.4356 c
+125.8007 164.4358 123.958 163.8289 123.4582 164.1054 C
+124.1575 165.4953 123.4607 164.7282 124.8884 165.1629 c
+126.3161 165.5973 125.238 165.8577 126.6265 166.1455 c
+128.0152 166.4337 127.5507 165.9225 128.5139 165.8457 C
+130.4453 166.9377 129.8267 166.4637 131.0611 166.7889 c
+132.2958 167.1143 134.3395 167.3999 135.0363 168.1668 c
+135.7333 168.9336 136.0829 169.6284 136.5031 168.7475 c
+136.9237 167.8667 136.7304 167.7576 136.3051 167.3927 c
+135.8796 167.0278 135.9555 166.6979 134.4102 165.8243 c
+132.8651 164.9504 133.7721 165.2769 133.4642 165.3512 C
+132.7881 164.969 132.516 164.4114 131.7851 164.6659 C
+s
+97.2911 168.0296 m
+95.5605 168.9155 94.8807 168.8262 94.2675 169.5978 c
+93.6539 170.3693 91.9597 170.7788 91.8816 170.4859 c
+91.8032 170.193 91.4168 169.9747 90.9548 170.0862 c
+90.4929 170.1977 90.3805 171.0043 90.0334 170.9323 c
+89.6862 170.8603 88.2194 170.2795 87.8697 169.5844 c
+87.5201 168.8896 86.7892 169.222 86.4028 169.0037 c
+86.0165 168.7851 82.0856 168.7995 81.8458 166.6754 c
+81.6061 164.5513 82.0581 161.9482 82.987 162.9706 c
+83.916 163.993 84.9576 164.2091 86.0015 165.048 c
+87.0453 165.8869 88.0138 167.0559 88.1262 166.2493 c
+88.2383 165.443 88.8518 164.6714 88.0402 164.0882 c
+87.2286 163.5049 87.1452 161.9663 87.4116 161.1227 c
+87.6781 160.2788 87.5165 158.4476 89.054 157.4526 c
+90.5916 156.4577 92.2465 155.9023 93.5179 155.751 c
+94.789 155.6 93.5543 155.2745 94.9455 156.1855 c
+S
+82.8227 162.8157 m
+84.0181 162.9943 86.7641 162.9934 87.3018 162.552 c
+S
+108.1877 152.3633 m
+107.0971 149.5096 104.9284 146.9163 106.1578 145.9956 c
+107.3875 145.0753 106.5809 145.7378 106.4999 144.8219 c
+106.4193 143.9062 106.5708 143.2462 107.6489 142.9859 c
+108.727 142.7256 110.6116 141.8027 112.736 143.004 c
+114.8607 144.2052 119.6183 148.5114 121.8111 147.514 c
+124.0039 146.5168 124.0012 145.8941 123.4927 143.9905 c
+122.984 142.0872 122.9815 141.4645 124.4067 141.2759 c
+125.8318 141.0876 129.4307 144.7384 130.7802 144.88 c
+132.1297 145.0216 132.6331 145.6794 131.5476 144.0712 c
+130.462 142.463 131.5793 142.349 132.4301 143.0788 c
+133.2809 143.8083 133.2367 142.4163 134.7086 144.2428 c
+135.1264 144.7604 134.7945 144.383 134.5181 144.7565 c
+132.8314 147.0342 130.9468 147.957 131.6535 151.2154 c
+S
+122.388 147.2189 m
+125.3507 146.0357 124.38 144.2439 124.7221 143.0702 c
+125.0642 141.8964 125.6021 141.4548 126.8782 142.5492 c
+S
+125.5398 154.7183 m
+125.3468 154.609 124.5402 155.2715 123.8899 156.5195 c
+123.8153 156.663 123.3762 157.0505 123.2738 156.6683 c
+122.8435 155.0579 122.6477 154.3258 120.9903 154.2585 c
+119.3329 154.1915 116.1404 155.7418 113.5641 157.1436 c
+110.9874 158.5452 109.1077 160.7138 107.3744 160.9766 c
+105.6413 161.2392 102.8691 161.909 102.3704 162.4969 c
+101.872 163.0849 102.8282 165.5464 100.7672 166.3133 c
+99.5743 166.7572 95.9613 169.1886 94.4555 168.4613 c
+92.9494 167.734 91.7982 168.9472 90.3655 167.2673 c
+88.9328 165.587 89.7419 165.5473 90.7026 164.8478 c
+91.6632 164.1483 91.8955 164.4039 94.1323 164.7985 c
+96.0475 165.1359 97.8749 164.6155 98.3625 164.3321 C
+98.2042 164.1755 98.1964 163.8826 96.8079 164.0743 c
+95.4217 164.2656 93.7245 163.1339 93.3913 162.6396 c
+92.8487 161.8355 92.6846 159.3813 94.1047 157.9472 c
+95.5249 156.5131 93.6052 156.5762 97.869 154.856 c
+99.7929 154.0794 101.6876 155.6481 102.1913 156.3056 C
+101.3305 153.0845 102.3721 153.3006 104.0659 152.8915 c
+105.7601 152.4823 106.2588 151.8941 108.6129 152.7282 c
+110.9674 153.5623 110.8917 153.8925 111.2046 155.0637 C
+110.8814 151.4009 112.9013 155.2773 112.9794 155.5702 C
+111.962 151.7633 112.2309 151.5425 113.0767 151.0266 c
+113.9226 150.5106 117.7778 150.8263 118.9708 150.3821 c
+120.1637 149.9382 120.127 150.4147 121.9777 150.591 c
+123.8282 150.7676 125.6057 151.8969 125.6497 153.2889 c
+125.6939 154.681 124.8748 152.2292 125.6964 155.304 c
+S
+123.0958 160.2963 m
+125.4135 161.6069 123.4115 162.0906 125.9904 161.3115 C
+125.8024 162.4483 125.6533 163.731 124.2673 164.0659 c
+122.8811 164.4008 123.5364 164.3983 122.529 163.083 C
+121.605 163.306 121.0281 163.6014 120.1823 164.1174 c
+119.3365 164.6333 117.9895 165.1148 117.6474 166.2882 c
+117.3053 167.462 116.6136 167.9409 115.7285 168.3106 c
+114.8438 168.6802 112.0399 171.0719 109.923 171.7392 c
+107.8061 172.4061 109.0407 172.7316 104.9532 172.1603 c
+S
+126.1053 161.128 m
+129.1464 160.2376 128.3774 161.0885 130.5374 161.1485 c
+130.8664 161.158 132.8598 161.4606 134.1245 162.9904 c
+135.6289 164.8099 137.9506 165.0616 139.1062 164.3783 C
+139.4976 165.8424 141.5096 167.85 142.0525 168.6541 c
+142.5955 169.4582 142.4831 170.2648 141.9452 170.7064 c
+141.4075 171.1478 140.1387 171.9219 138.6353 171.8176 c
+S
+130.3638 161.1127 m
+134.2166 160.8053 132.6178 160.9577 133.9649 160.4766 c
+135.3116 159.9954 135.862 162.668 137.5587 162.8816 c
+139.2553 163.0952 139.4458 162.5815 139.6756 162.2144 c
+139.9053 161.8472 140.2841 160.197 140.8977 159.4255 c
+141.5113 158.6536 143.3592 158.2072 144.3691 160.1456 c
+145.3791 162.0836 145.1732 158.8603 145.5621 159.7014 C
+144.0509 157.7286 143.9778 158.6815 143.6257 157.3636 c
+143.2736 156.0458 142.0603 151.5072 140.8624 150.7053 c
+139.6645 149.9037 139.0826 148.9533 138.8971 150.7126 c
+138.7113 152.472 139.1708 151.7375 139.4864 153.5317 c
+139.8021 155.3257 137.9464 153.9036 137.6357 153.3551 c
+137.3253 152.8066 136.5112 151.6006 134.9684 151.3498 c
+133.4258 151.0989 131.2283 150.8505 130.5388 151.9522 c
+130.1941 152.5029 129.2794 152.6072 128.0686 153.3671 c
+126.8576 154.1272 125.3507 155.5435 125.0439 155.9293 C
+126.6307 157.5722 124.477 158.7159 123.3648 160.0755 c
+122.2525 161.4353 118.6298 161.3752 117.8988 161.7076 c
+117.1679 162.04 114.5106 162.5259 112.9413 165.243 c
+111.3723 167.9598 110.529 169.0988 108.8741 169.6545 c
+107.2192 170.21 105.366 169.4109 104.1313 169.0855 c
+102.8969 168.7603 102.4714 168.3954 101.5474 168.6187 c
+100.6234 168.8418 100.629 170.2433 98.8439 167.2453 c
+S
+123.5189 160.0382 m
+124.756 160.9864 124.6019 161.0236 125.9489 160.5425 c
+127.2957 160.0613 127.489 160.1703 128.6427 159.5798 c
+129.7964 158.9896 130.2951 158.4014 131.339 159.2405 c
+132.3831 160.0794 132.2632 159.0172 133.6125 159.1587 c
+134.962 159.3003 134.6149 159.2286 136.0793 159.1865 c
+137.5437 159.1446 135.8103 159.4074 136.7396 160.4298 c
+137.6685 161.4523 137.8666 162.8071 138.8495 162.8037 c
+S
+132.9574 159.1612 m
+134.1454 157.4716 135.1817 156.4419 135.837 156.4394 c
+136.492 156.4372 137.5078 155.0228 139.2776 154.2835 c
+S
+113.1869 173.5226 m
+114.7344 175.019 114.357 176.9807 114.2079 178.2634 c
+114.0589 179.5465 113.0409 180.3378 114.5442 180.4423 c
+116.0478 180.5467 117.94 181.4923 118.1308 180.9786 c
+118.3213 180.4652 117.8176 179.8074 118.6659 179.9142 c
+119.5142 180.021 120.4774 179.9442 121.6704 179.5003 c
+122.8633 179.0564 123.8265 178.9794 124.5207 179.1234 c
+125.2149 179.2675 124.6748 179.0862 124.4008 178.0615 c
+124.1269 177.0366 124.5574 178.647 125.0901 176.9598 c
+125.623 175.2723 125.549 176.0695 125.2361 174.8983 C
+124.561 176.24 124.081 178.5188 121.8584 178.3638 C
+121.2373 177.2669 121.086 177.9269 120.9636 176.2419 c
+120.841 174.557 119.9963 174.5445 120.6833 173.66 c
+121.0156 173.2314 121.0532 173.1357 121.1055 173.0976 c
+121.1586 173.0603 121.2265 173.0809 122.9423 174.7508 c
+124.1611 175.9374 122.4427 177.4824 123.7725 177.5508 c
+S
+121.3922 172.6314 m
+122.65 173.9643 122.5888 173.1218 124.5594 174.3603 c
+126.53 175.5989 125.5081 175.4559 127.2437 175.8161 c
+128.9795 176.176 129.8253 175.6601 130.6762 176.3899 c
+131.2647 176.8953 132.0532 177.6181 132.3152 176.6953 c
+133.0751 174.0179 128.9787 171.6977 128.4216 171.6349 c
+127.6726 171.5503 125.0517 172.2151 124.3182 171.9247 c
+123.5848 171.6343 122.4377 171.4827 121.8595 171.4666 c
+S
+132.3152 176.6953 m
+133.8161 176.1768 133.2183 176.0873 133.4431 174.4744 c
+133.6678 172.8614 134.0124 172.3107 131.8513 171.5859 c
+129.6902 170.8608 130.3062 170.712 128.727 170.9376 c
+127.1477 171.1634 125.5607 171.8195 124.6172 171.9695 c
+S
+133.5605 174.9138 m
+135.8707 174.3556 136.4058 173.2912 135.8239 172.3408 c
+135.2421 171.3904 134.2789 171.4671 132.773 170.7398 c
+131.2669 170.0125 130.6926 170.9306 128.5682 169.7291 c
+128.0567 169.4401 127.0768 169.0571 126.8073 169.1222 c
+S
+124.3363 169.2318 m
+125.3802 170.0706 125.253 169.5947 126.1795 169.9944 c
+127.1063 170.3941 127.8909 170.2631 128.3373 171.0127 c
+S
+142.1699 169.0932 m
+143.9397 168.3542 144.8147 165.493 143.4966 163.6292 c
+142.1788 161.7654 141.4064 161.3288 141.0957 160.7803 c
+140.7853 160.2318 140.592 160.1225 140.668 159.7926 c
+S
+144.0863 166.4484 m
+145.0395 163.8801 144.981 161.3616 144.9785 160.7386 c
+S
+0.125 w
+106.9922 152.1847 m
+105.7425 148.1222 104.5785 146.2212 104.1116 145.0872 c
+103.6446 143.953 101.7838 141.2851 101.8962 140.4788 c
+102.0086 139.6722 100.9172 138.9618 100.7213 138.2297 c
+S
+106.2337 145.6658 m
+104.0598 141.8266 102.3532 139.1215 101.8837 137.3645 c
+S
+86.5411 136.3946 m
+85.843 135.3163 83.2262 136.26 82.4536 135.8233 C
+83.3202 135.6918 83.7628 135.5071 83.9155 135.1583 C
+82.9523 135.2353 78.2256 136.26 76.947 134.5428 C
+77.9383 134.2643 78.0184 135.0242 78.8648 134.6638 C
+77.5611 133.9267 76.5471 133.3535 76.0801 132.2192 C
+76.7651 132.4823 77.3222 132.6984 77.2082 132.3755 c
+76.9545 131.6574 77.5261 132.4156 77.004 131.9961 c
+74.9161 130.3181 77.0747 130.4202 75.4465 128.0082 c
+75.3825 127.9128 74.6335 127.1134 74.0944 127.2436 c
+73.3243 127.4297 73.1301 127.0089 73.0934 127.4853 c
+73.0567 127.9618 72.5555 127.927 72.1302 127.5621 c
+71.4424 126.9721 69.3783 126.3616 68.5609 126.4759 c
+66.6729 126.7396 66.8459 126.5007 65.3084 127.4956 C
+67.4461 127.2127 66.5647 127.4661 67.3705 127.5429 c
+68.2958 127.6311 67.4698 127.1902 68.4327 128.1437 c
+69.5981 129.2976 69.1297 128.9105 69.2471 129.3497 c
+69.3644 129.7888 70.6797 131.0299 69.9071 130.5929 c
+69.1347 130.1563 70.0806 130.6291 68.7117 130.4141 C
+70.0662 131.8014 69.7947 131.3995 70.186 132.8636 C
+69.3085 132.647 70.329 132.4784 68.4894 132.65 C
+69.553 133.5621 69.4448 133.0036 69.9608 134.3208 C
+69.6515 134.0838 69.9594 134.0093 68.3795 134.0794 C
+S
+68.3025 134.0977 m
+69.113 134.3698 69.657 135.4851 70.4308 136.2336 C
+69.6885 136.0622 69.5227 135.5955 68.6585 136.3498 C
+69.4496 136.5484 69.9238 137.0963 70.3994 137.9555 C
+70.0053 138.1677 69.8701 138.1224 69.2059 138.2439 C
+69.2841 138.5368 70.326 138.9084 71.1378 139.4917 C
+70.3287 139.5314 72.2184 139.8541 70.0598 139.7523 C
+70.5635 140.4098 72.3016 141.3927 73.497 141.5716 C
+72.3825 142.3084 73.5754 141.8645 72.4974 142.1248 C
+72.8834 142.3431 73.6194 143.2565 75.9663 142.2221 c
+78.3129 141.1877 78.6576 140.6367 79.3468 139.535 c
+80.036 138.4333 80.271 139.312 80.8893 139.7859 c
+81.5079 140.2599 79.5501 142.1356 79.7092 143.3441 c
+79.868 144.5526 81.3299 143.8879 82.2539 143.6645 c
+83.1781 143.4415 85.0211 141.7493 84.7471 140.7244 c
+84.4734 139.6997 84.6197 137.7939 86.5411 136.3946 C
+87.8122 136.2433 89.5619 134.4983 87.5307 133.3498 c
+86.7583 132.9132 80.896 131.8354 80.4705 131.4705 c
+80.0452 131.1055 78.7399 132.356 76.7251 129.7254 c
+76.4297 129.3388 75.6487 127.9982 75.3205 127.8435 c
+S
+0.0625 w
+79.9996 138.9098 m
+78.6083 137.9989 78.1511 136.9014 78.1878 136.4249 c
+S
+120.441 170.9128 m
+120.8151 172.9268 119.7554 172.9488 119.1849 174.8012 c
+118.6142 176.6536 118.9379 175.7182 118.2279 176.4352 c
+S
+121.5583 170.7991 m
+122.0606 171.1451 122.1023 171.9144 120.1467 174.4132 c
+118.1914 176.9117 119.7473 175.6784 117.7856 176.6199 C
+116.6083 176.203 115.4128 176.0242 115.1964 174.9074 c
+114.9801 173.7907 115.6573 174.4844 116.1716 173.0353 c
+116.5599 171.943 115.484 172.1491 115.5388 171.4346 c
+S
+0.125 w
+98.9949 132.9966 m
+98.4887 131.7161 89.9555 116.5473 88.1056 113.4163 c
+86.0101 109.8701 79.9768 99.8713 79.6271 99.1765 c
+79.1115 98.1524 78.7752 98.1352 79.0806 97.4382 c
+79.3863 96.7409 80.0872 97.3981 80.7002 97.6704 c
+81.6219 98.0795 80.8751 98.0178 83.3052 98.5218 C
+81.8545 97.9441 76.7543 93.3056 75.1808 90.8207 c
+71.1409 84.4416 66.372 74.4821 60.7992 70.1354 c
+58.5569 68.3878 59.4761 67.0261 59.4422 68.1253 c
+59.408 69.2245 58.7479 67.9812 59.9509 70.0286 C
+58.1369 69.3758 58.0195 68.9366 55.0932 69.6433 C
+61.9604 71.4137 66.7775 80.8489 67.3201 81.653 c
+67.863 82.4571 71.7433 89.0011 71.9391 89.7332 c
+72.1347 90.4653 74.2572 93.7957 74.8095 94.3394 c
+76.1446 95.6533 74.8537 95.7315 76.4405 97.3744 c
+78.0273 99.0174 83.2841 109.111 84.623 112.2704 c
+85.5662 114.4971 85.4324 114.7633 85.4533 115.148 c
+85.495 115.9173 86.5781 116.9025 85.8496 117.8579 c
+85.1212 118.813 85.3195 120.1681 86.2168 122.9127 C
+86.0579 121.7042 85.535 120.3948 86.6637 119.0639 c
+87.1624 118.4759 87.0476 118.6595 86.5388 116.7562 C
+86.9669 117.7438 87.1967 117.3767 87.6244 118.3644 c
+88.0525 119.352 88.9208 124.4417 89.3539 126.6751 c
+89.7867 128.9083 89.9065 129.9705 87.917 133.5684 c
+S
+97.4171 133.5337 m
+95.9035 130.9378 90.1744 119.9305 89.1305 119.0917 c
+S
+0.0625 w
+137.0736 152.4779 m
+137.7653 151.9992 138.9936 150.7673 139.0862 149.8876 c
+S
+0.125 w
+89.3007 132.6108 m
+90.0807 134.916 89.6187 135.0276 90.8558 135.9757 c
+92.093 136.9239 96.8822 139.5078 99.3073 138.7663 c
+101.7321 138.0245 103.3063 136.5531 103.3798 135.6002 C
+102.4947 135.9699 103.1108 135.8211 102.4166 135.6773 C
+103.8393 134.866 102.9409 135.5065 103.5311 134.9402 c
+104.9307 133.5977 104.3647 133.7648 104.9123 133.3598 C
+103.8334 133.4644 104.2178 133.2158 103.7166 133.181 C
+104.8717 132.902 105.2177 132.6625 105.5637 132.4231 C
+104.8314 132.4442 104.9084 132.4256 104.445 132.2256 C
+105.3287 131.7981 105.8001 131.6743 106.046 131.4301 c
+106.2919 131.1854 106.4841 131.0124 106.5405 131.0182 C
+104.981 131.3169 105.5782 131.2507 105.2113 131.1055 C
+106.6916 130.2024 106.6446 130.4864 107.0284 130.082 C
+106.2388 130.1949 106.3431 129.8189 105.9776 129.9852 C
+107.5349 129.0635 106.9761 129.1205 107.3808 129.1007 C
+106.5717 129.1402 106.639 129.0852 y
+107.3894 128.8259 107.8219 128.6045 107.7646 128.6963 C
+107.4748 128.5325 107.8219 128.6045 107.2818 128.4232 C
+107.8208 128.293 107.8378 127.7434 108.779 126.9705 c
+110.0993 125.8869 109.7005 126.1244 y
+108.5362 126.5227 107.939 126.5889 106.5575 128.0138 C
+105.5401 129.756 102.611 131.9769 96.5985 133.6925 c
+93.0926 134.6927 90.8361 133.2091 90.7674 133.1916 c
+89.533 132.8664 90.4987 133.4124 89.8384 132.1691 C
+90.9114 130.663 90.4269 125.169 90.1138 123.9975 c
+89.8008 122.8262 88.3871 116.3098 87.9957 114.8456 c
+S
+109.7586 126.1884 m
+108.9172 127.7943 107.6876 128.715 107.8099 130.3999 c
+107.9323 132.0849 108.5768 134.1893 107.6956 135.4932 c
+106.8145 136.7971 105.8538 137.4966 105.0055 137.3898 c
+104.2025 137.2891 102.9826 137.4888 102.4411 136.9959 c
+S
+79.863 143.3069 m
+79.4719 141.8428 77.7361 141.4828 77.6969 141.3365 c
+S
+78.4303 141.6269 m
+78.5527 143.3119 78.0907 143.4234 79.5209 144.4806 c
+80.9511 145.5381 82.9634 147.5457 82.1593 148.8312 c
+81.3552 150.1165 79.1206 150.3443 78.2384 151.337 c
+77.3559 152.3294 76.3145 152.1132 76.0898 153.7262 c
+75.865 155.3391 73.3201 155.0187 72.4326 154.7653 c
+71.5453 154.5122 69.1152 154.0082 68.9711 156.5367 c
+68.8273 159.0653 64.4759 159.9606 62.0044 158.6873 c
+59.5326 157.4137 60.073 157.5951 59.1098 157.6718 C
+60.2243 156.935 59.1829 156.7189 59.8382 156.7167 C
+58.452 157.0513 58.2198 156.7957 57.6037 156.9445 C
+58.5644 156.245 58.0815 155.9718 58.4286 156.0439 C
+57.3898 156.4508 57.0563 156.2002 56.8202 156.1596 c
+56.5838 156.1195 56.445 156.2892 56.0979 156.2172 C
+57.4813 155.2595 56.5965 155.6292 57.3272 155.2968 C
+56.0169 155.3015 55.8214 154.5695 54.7433 154.8298 C
+55.6464 154.2221 54.973 154.4627 55.3177 153.912 C
+54.2396 154.1723 55.0854 153.6564 53.2739 153.6263 c
+51.6385 153.5988 51.3058 153.0105 50.7315 153.9286 c
+50.1571 154.8468 50.4066 154.5525 49.9324 156.4597 C
+49.6951 154.9583 49.7368 155.7276 49.6195 155.2882 C
+49.1964 155.5463 49.3786 155.3074 49.2637 155.4912 C
+49.6267 154.7021 49.3002 154.804 49.5569 154.1345 c
+49.9783 153.0378 49.5964 151.9817 49.2192 151.6443 c
+47.9698 150.5259 49.5405 150.0859 50.8472 149.1469 c
+52.1536 148.2076 53.5215 148.1111 53.4394 146.884 c
+53.3574 145.6568 52.4106 145.0283 53.0425 144.0186 c
+53.1385 143.8651 53.2976 143.6451 53.8107 143.3653 C
+53.374 142.6524 54.0216 143.0807 52.8053 142.5172 C
+53.8338 141.9181 55.3652 141.8208 56.2147 142.2391 C
+55.6537 141.6734 55.8461 141.6266 55.0938 141.4189 C
+56.0948 141.1769 58.0787 140.9316 59.2375 141.5869 C
+58.9649 140.8734 58.8291 140.6723 58.482 140.6003 C
+59.5993 140.4866 61.4926 141.7434 61.9779 142.6393 C
+62.0525 141.998 62.3423 142.1618 62.1284 141.6681 C
+63.4899 142.1721 62.4527 142.4163 63.4382 143.2671 c
+64.094 143.8331 65.2447 144.7498 66.0209 145.6557 c
+66.7969 146.5608 67.1969 147.4539 67.2003 147.4567 c
+67.6277 147.8772 68.1968 147.5852 68.5106 147.4519 c
+69.2379 147.1435 71.5322 146.4882 71.9147 145.7725 c
+72.2971 145.0566 73.3677 142.9278 74.4457 142.6672 c
+S
+64.875 144.2776 m
+67.9629 145.4021 69.6178 144.8466 70.6934 143.9633 c
+71.728 143.1141 72.6172 143.187 73.4631 142.6708 c
+S
+49.0646 151.5255 m
+48.8666 150.1707 50.8313 150.0077 51.7945 149.931 c
+52.7577 149.8542 54.7411 149.7905 54.8332 148.4179 c
+54.9722 146.3177 52.701 145.3478 52.8525 144.6878 c
+S
+0.0625 w
+53.2164 151.2633 m
+53.947 150.9309 54.5625 150.6263 55.8155 150.7134 c
+57.0827 150.8018 58.0974 150.3996 60.3923 150.8157 c
+61.1811 150.9587 62.1231 149.9301 63.0863 149.8534 c
+64.0495 149.7763 62.0839 149.7836 64.5897 149.9577 c
+67.0954 150.1318 71.4977 147.5195 73.2469 146.4637 c
+74.3092 145.8226 76.223 143.7967 76.9659 141.6689 c
+S
+61.4895 150.4728 m
+60.1192 149.9466 59.4399 148.7856 57.9806 147.6185 c
+S
+64.2042 149.8951 m
+62.4369 151.2571 63.2454 151.0619 62.248 152.2378 c
+61.2506 153.4138 61.0045 153.6867 60.1759 154.4529 c
+S
+67.5935 149.3881 m
+68.0216 150.3757 68.7556 150.8218 67.6066 152.6578 c
+66.4579 154.4941 66.5208 153.349 66.274 154.2657 c
+S
+0.125 w
+89.4571 133.1963 m
+89.076 134.2237 89.1517 133.8936 88.653 134.4816 c
+S
+0.0625 w
+131.3495 142.7161 m
+130.2139 143.0685 129.5956 142.5943 128.114 143.1859 c
+S
+125.6132 153.7654 m
+S
+125.591 153.0695 m
+126.3208 152.4256 131.3034 145.611 132.0721 145.1134 c
+S
+0.125 w
+82.3315 148.5556 m
+82.9489 148.7183 84.301 148.4343 84.4692 148.273 c
+84.7958 147.9604 84.6013 147.5398 85.1379 146.7866 C
+85.4764 147.1338 85.7356 146.8762 85.853 147.3154 C
+86.1205 146.7833 86.1664 146.1875 86.0788 146.014 C
+86.4273 146.3972 86.3686 146.1778 86.5433 146.5252 C
+86.7536 146.0846 86.6432 145.8874 86.6557 145.7186 c
+86.7107 145.0041 86.2852 144.6391 85.6471 144.0921 C
+86.1091 143.9802 86.1091 143.9802 86.7644 143.978 C
+85.4502 143.0485 86.6078 143.3923 85.1985 142.7197 C
+86.1239 142.8079 85.641 142.5348 86.4134 142.9717 C
+85.829 141.3983 85.9256 141.4531 84.768 141.109 c
+S
+99.1532 138.8033 m
+99.102 140.4523 98.7505 144.0442 98.946 144.7763 c
+99.1418 145.5083 99.3944 145.2268 98.3914 145.7675 c
+97.3153 146.3475 90.1677 144.141 88.4168 142.7995 c
+88.0897 142.5484 88.3267 142.9175 86.2229 143.4854 c
+S
+86.7422 143.2818 m
+88.0906 143.1122 88.9205 143.4571 89.4804 143.7116 C
+88.5954 144.0812 88.8446 143.7872 88.3264 144.302 C
+89.2126 144.2439 91.1598 144.4748 91.5656 144.7665 C
+90.7198 145.2825 90.5268 145.1734 90.4706 145.5765 C
+91.2015 145.2441 93.4945 145.2357 94.4799 145.8552 C
+94.0961 146.2596 93.9787 145.8204 93.7685 146.2607 C
+94.6571 146.8253 95.5252 147.0053 96.9123 146.9819 c
+98.2996 146.9585 99.6055 146.4812 99.5671 145.8732 c
+99.4436 143.8768 99.7968 145.5058 99.561 144.3159 c
+99.3248 143.1261 99.1145 143.5666 98.9947 142.5044 c
+S
+100.3848 138.3502 m
+100.2382 140.2557 100.0374 143.0318 100.849 143.6153 c
+101.6609 144.1986 101.5068 144.2356 102.0837 143.9405 c
+102.6605 143.6454 102.0275 144.3438 102.9662 142.9481 c
+S
+100.3492 143.8918 m
+100.5839 144.7702 101.3775 145.5918 102.1279 145.3325 c
+102.8783 145.0733 103.1105 145.3289 103.7227 144.2459 c
+S
+100.315 144.991 m
+99.9534 146.0916 100.3139 144.6798 100.3631 147.3176 c
+100.414 150.0244 98.3174 151.3186 96.5084 151.9113 c
+94.6994 152.5043 92.4871 153.4283 91.4666 153.5968 C
+92.2615 152.4306 91.4443 152.9006 91.9063 152.7891 C
+91.0202 152.8473 91.0411 153.2319 90.0008 153.3273 c
+88.9606 153.4227 89.0952 153.3123 88.5562 153.4425 C
+88.9203 152.9649 89.0168 153.0194 89.2284 152.8906 C
+88.5339 152.7466 87.61 152.9696 86.7422 152.7897 C
+87.2028 152.3666 87.0673 152.1655 87.2211 152.1285 C
+86.4315 152.2412 86.1372 152.002 85.4867 152.0799 c
+84.8511 152.1555 84.773 151.8627 84.5026 151.772 c
+84.2325 151.6813 84.0003 151.4257 83.3831 151.263 C
+84.0565 151.0224 84.037 150.9492 84.2484 150.8202 C
+83.3806 150.6402 83.8242 150.7668 82.7631 150.4775 c
+81.7023 150.1885 82.0714 150.9565 81.5313 150.7751 c
+80.9908 150.5941 80.6829 150.6683 80.0265 150.3593 c
+S
+100.281 146.0905 m
+101.5939 146.7085 101.5939 146.7085 102.9409 146.2273 c
+104.2876 145.7461 103.0777 146.7396 104.3452 145.6543 c
+S
+104.8937 143.1058 m
+105.4497 142.426 106.2771 142.1481 107.6828 141.8867 c
+109.0885 141.625 111.2655 141.4887 111.8374 139.9478 c
+112.4092 138.4069 113.4906 134.1712 114.0661 133.5646 c
+114.6418 132.9579 113.9682 133.1985 114.3337 133.0325 c
+S
+104.0796 141.8998 m
+104.847 141.091 108.6227 140.8022 109.6996 140.2304 c
+110.7763 139.6585 111.8396 138.9548 112.5544 136.1899 c
+112.9093 134.8195 113.625 134.0608 113.8939 133.8399 c
+S
+105.7092 144.6233 m
+106.0941 144.5304 106.3253 144.4745 106.5561 144.4189 c
+S
+111.7901 142.5311 m
+113.6172 141.7001 115.4003 139.4769 115.4932 138.5972 C
+114.9931 138.8739 115.2999 138.4881 114.7623 138.9295 C
+114.9895 137.9396 115.8668 135.7015 115.6712 134.9694 c
+115.4757 134.2374 115.3361 133.102 115.2187 132.6628 c
+S
+102.001 137.8036 m
+104.2381 138.1986 105.0889 138.9282 106.6654 138.0798 c
+108.2422 137.2315 110.1243 135.6856 110.2734 134.4029 c
+110.4225 133.1198 110.8352 130.3704 110.4439 128.9063 c
+110.0526 127.4422 110.2948 130.1894 110.9765 127.2191 c
+111.6583 124.2489 111.1888 122.4919 111.7267 122.0502 c
+113.4269 120.6531 114.2513 117.3878 114.3662 117.2042 c
+114.5044 116.9831 114.2992 114.8824 113.5799 113.3417 C
+113.4859 113.91 113.3885 113.6218 113.294 114.1122 C
+112.9235 113.0327 112.9246 113.344 112.8832 112.5749 C
+112.627 112.8681 112.4832 113.547 112.3272 113.2936 c
+112.2796 113.2163 112.3227 112.9076 112.3258 112.9432 C
+112.1862 111.8081 112.1672 111.8904 111.9917 111.3873 C
+111.379 112.3146 111.7531 111.8737 111.1851 112.0498 C
+111.4602 110.9314 110.8147 110.9703 110.3696 110.5323 c
+109.9249 110.0942 109.7121 109.9118 108.7476 109.677 C
+109.2513 110.3348 108.8076 110.2083 109.2916 110.7926 C
+108.4814 110.5209 108.2686 110.3384 107.825 110.2119 C
+108.6574 111.1798 108.5253 111.913 108.9509 112.2779 C
+108.3924 112.3346 108.547 112.4534 108.3159 112.509 C
+108.8001 113.0937 108.8488 113.2764 109.5236 113.3473 C
+109.1019 113.9167 108.8986 113.6152 108.6674 113.6711 C
+109.4596 114.1812 109.941 114.1428 110.116 114.4902 C
+109.3264 114.6028 110.3288 114.6726 108.9987 114.6042 C
+110.0439 115.7546 112.6331 117.4671 112.6003 118.8778 c
+S
+114.2981 115.7985 m
+114.3081 118.2901 112.9769 118.7868 111.6969 119.4855 c
+111.1459 119.7868 111.3707 119.7982 110.0971 119.3264 C
+110.7204 121.0464 109.7511 119.5659 111.4552 121.648 c
+113.1594 123.7304 110.974 126.5961 111.6001 128.9389 c
+112.2262 131.2813 110.9727 135.7924 109.3227 137.5939 c
+107.6728 139.3952 105.2063 139.3676 102.3117 138.3521 c
+S
+111.4663 133.9587 m
+113.5443 133.1451 118.0104 132.0662 118.4623 129.4634 c
+118.9143 126.8603 117.3225 123.9716 115.9316 123.0607 c
+114.5403 122.1498 113.5721 120.9811 113.2982 119.9561 c
+S
+0.0625 w
+87.9874 166.4974 m
+89.6815 166.0883 88.4163 166.491 89.6481 166.1934 c
+S
+136.1866 169.0969 m
+135.7441 169.2815 135.2816 169.2376 135.1759 169.3021 c
+S
+86.14 146.8565 m
+87.3941 147.2547 89.0738 148.0182 90.769 147.9203 c
+92.4646 147.8227 93.8163 148.587 94.4129 148.3651 c
+95.0092 148.1431 96.6864 148.2836 97.9525 146.8865 c
+S
+91.9255 147.9529 m
+91.2079 146.8014 90.1455 146.2006 y
+S
+89.0724 147.7067 m
+88.4394 148.4051 87.0156 148.9049 86.303 148.9992 c
+S
+93.9117 148.3303 m
+92.7983 149.3786 91.9133 149.7482 91.2205 149.9154 c
+S
+113.7718 180.0054 m
+113.6884 178.4667 112.2167 176.6402 112.2849 174.4418 c
+S
+U
+U
+%%Trailer
+_E end
diff --git a/macros/generic/boxedeps/rosetest.tex b/macros/generic/boxedeps/rosetest.tex
new file mode 100644
index 0000000000..dde6e442db
--- /dev/null
+++ b/macros/generic/boxedeps/rosetest.tex
@@ -0,0 +1,19 @@
+
+%% SmallRoseBoxedEPS.tex
+%% ) 1993, Antonio Possolo
+\magnification=\magstep3
+\hsize = 4.5 true in
+\input BoxedEPS.tex
+\SetTexturesEPSFSpecial
+\HideDisplacementBoxes
+\parindent=0pt
+The petals of a small rose can be
+pressed between the pages of a
+beautiful book.
+\bigskip
+\centerline{\BoxedEPSF{SmallRose scaled
+1250}}
+\bigskip The Encapsulated PostScript
+picture of a small rose can be typeset to
+fit among the words of a beautiful book. \bye
+
diff --git a/macros/generic/c_pascal/README.eng b/macros/generic/c_pascal/README.eng
new file mode 100644
index 0000000000..fda4ad032e
--- /dev/null
+++ b/macros/generic/c_pascal/README.eng
@@ -0,0 +1,112 @@
+PCAP --- macro package for typesetting programs in Python, C and Pascal
+
+Derived from original CAP package by Michal Gulczynski. Any errors (bugs)
+introduced are my own.
+
+Changes from CAP:
+* Improved minor deficiencies (there was a space in front of every
+ "special" symbol)
+* Made it easy to change the "output" (not \TeX's \output) routine (instead
+ of actually sending data to TeX, we use \@Output{...data...})
+* Added DVIPS color support (color \special's as used by DVIPS)
+* Added a "state" watch --- enabling the output of some "special" symbols
+ in different colors depending on a state (like "_" as identifier, "<" and ">"
+ in directives, and so forth)
+* Added Python language support with analogous commands of
+ \BeginPython, \EndPython, \InputPython
+ (see original file for C and Pascal versions; these are used in the same way)
+
+
+
+Original README.eng follows:
+
+======================================================================
+
+ CAP --- macro package for typesetting programs in C and Pascal
+
+======================================================================
+
+
+ Contents
+----------
+This macro package consists of three files:
+ cap_c.tex -- macros for typesetting programs in C
+ cap_pas.tex -- macros for typesetting programs in Pascal
+ cap_comm.tex -- helpful macros and declarations used for typesetting
+ programs in both languages; this file does not contain
+ any macros useful for a user
+
+
+ Programs in C
+---------------
+There are two macros available in the cap_c.tex file:
+
+ 1. \BeginC ... \EndC
+ Between these commands you may insert sorce code of any program
+ written in the C language. The text of the program will be
+ formatted using appropriate fonts. The macro recognises the
+ following elements of a program:
+ * keywords --- by default typeset in boldface
+ * texts --- everything inside single quotes; by default slanted
+ * comments --- both /*these...*/ and //these... , but not nested;
+ italic typewriter
+ * symbols --- operators, brackets, etc.; typewriter
+ * compiler directives --- typeset using slanted typewriter font
+ * identifiers --- everything that is none of the above; italic
+ The macro does not change the layout of a program. All
+ indentations are left as they are in the source program. No line
+ breaks are inserted.
+ NOTE: While compiling, the \BeginC ... \EndC macro reads the whole
+ program into TeX's memory. Therefore, you may expect problems when
+ typesetting huge programs in this way. In my configuration
+ (emTeX under DOS) everything works fine if the program is not bigger
+ than about 15KB. If you REALLY need to insert a vast program
+ directly into your TeX source file you will have to split
+ the program into smaller pieces, each inserted into a separate
+ pair \BeginC ... \EndC.
+
+ 2. \InputC{filename}
+ Inserts a C program from a separate file. The program is formatted
+ as above. If you use DOS you need to remember that all backslashes
+ in the pathname should be replaced by slashes.
+ This macro has NO limitations for the size of the program --- it reads
+ the file line by line, so TeX should never run out of memory.
+
+The list of keywords can be easily found in the cap_c.tex file. I do not
+guarantee that it is complete, so feel free to correct it if necessary.
+
+
+ Programs in Pascal
+--------------------
+In order to typeset programs in Pascal you need to \input the cap_pas.tex
+file. It contains two macros, as well:
+
+ 1. \BeginPascal ... \EndPascal
+
+ 2. \InputPascal{filename}
+
+They work similarly. They recognise the same elements of a Pascal program.
+Both {this} and (*this*) kind of comment is accepted, but they cannot
+be nested. In case of \BeginPascal ... \EndPascal size limitations are
+similar as in C.
+
+The list of keywords was taken from Borland Delphi Help. If you need, you
+may modify it.
+
+
+ Common
+--------
+Fonts used to typeset programs are declared in the beginning of
+the cap_comm.tex file. They are easy to redefine if necessary.
+
+
+ Note
+------
+If you modify any of the files in any way, mark your changes, please.
+I do not want to take responsibility for other people's modifications.
+
+
+------------
+
+ Michal Gulczynski
+ mgulcz@we.tuniv.szczecin.pl
diff --git a/macros/generic/c_pascal/README.pol b/macros/generic/c_pascal/README.pol
new file mode 100644
index 0000000000..e86c9c47b9
--- /dev/null
+++ b/macros/generic/c_pascal/README.pol
@@ -0,0 +1,94 @@
+Polskie robaczki w standardzie ISO-Latin2.
+=======================================================================
+
+ CAP (C albo Pascal) --- makra do sk³adu programów w C i Pascalu
+
+=======================================================================
+
+
+ Zawarto¶æ
+-----------
+Ten pakiet makr sk³ada siê z trzech plików:
+ cap_c.tex --- makra do sk³adu programów w jêzyku C
+ cap_pas.tex --- makra do sk³adu programów w Pascalu
+ cap_comm.tex --- pomocnicze makra i deklaracje u¿ywane do sk³adania
+ programów w obu jêzykach; ten plik nie zawiera
+ ¿adnych makr po¿ytecznych dla u¿ytkownika
+
+
+ Programy w C
+--------------
+W pliku cap_c.tex znajduj± siê definicje dwóch makr:
+
+ 1. \BeginC ... \EndC
+ Pomiêdzy te komendy nale¿y wstawiæ dowolny program ¼ród³owy
+ w jêzyku C. Tre¶æ programu zostanie sformatowana z wykorzystaniem
+ odpowiednich czcionek. Rozpoznawane s± nastêpuj±ce elementy
+ programu:
+ * s³owa kluczowe --- domy¶lnie wyró¿niane s± pogrubieniem
+ * teksty --- wszystko to, co wewn±trz apostrofów; domy¶lnie pochylone
+ * komentarze --- zarówno /*takie...*/ jak i //takie... ,
+ ale nie zagnie¿d¿one; kursywa typewriter
+ * symbole --- operatory, nawiasy, itp.; typewriter
+ * dyrektywy kompilatora --- sk³adane pochylon± czcionk± typewriter
+ * identyfikatory --- wszystko, co nie jest ¿adnym z powy¿szych;
+ kursywa
+ Makro nie ingeruje w uk³ad programu. Wciêcia s± pozostawione takie,
+ jakie s± w programie ¼ród³owym. Podzia³ na linie równie¿ nie jest
+ zmieniany.
+ UWAGA: W trakcie kompilacji makro \BeginC ... \EndC wczytuje ca³y
+ program do pamiêci TeXa. Z tego powodu mo¿na spodziewaæ siê k³opotów
+ sk³adaj±c tym makrem bardzo du¿y program. W mojej konfiguracji
+ (emTeX pod DOSem) wszystko dzia³a bez zarzutu je¶li program jest
+ nie wiêkszy ni¿ oko³o 15KB. Je¶li NAPRAWDÊ konieczne jest wstawnienie
+ ogromnego programu bezpo¶rednio do pliku TeXowego, konieczny bêdzie
+ podzia³ programu na mniejsze czê¶ci, z których ka¿da bêdzie ujêta
+ w komendy \BeginC ... \EndC.
+
+ 2. \InputC{nazwapliku}
+ Wstawia program w jêzyku C z pliku zewnêtrznego. Program zostanie
+ sformatowany jak w poprzednim przypadku. Przypomnienie dla pracuj±cych
+ pod DOSem: w nazwie pliku wszystkie wty³ciachy nale¿y zast±piæ
+ ciachami.
+ To makro nie nak³ada ¯ADNYCH ograniczeñ na rozmiar programu --- czyta
+ wskazany plik linia po linii, wiêc nie grozi mu wyczerpanie pamiêci.
+
+Lista s³ów kluczowych znajduje siê w pliku cap_c.tex. Nie gwarantujê, ¿e
+jest kompletna, wiêc w razie potrzeby mo¿na j± poprawiæ.
+
+
+ Programy w Pascalu
+--------------------
+Aby sk³adaæ programy w Pascalu nale¿y za³±czyæ plik cap_pas.tex. Zawiera
+on równie¿ dwa makra:
+
+ 1. \BeginPascal ... \EndPascal
+
+ 2. \InputPascal{nazwapliku}
+
+Dzia³aj± one analogicznie. W przypadku \BeginPascal ... \EndPascal
+obowi±zuj± podobne ograniczenia na wielko¶æ formatowanego programu.
+W programie rozpoznawane s± zarówno {takie} jak i (*takie*) komentarze.
+
+Lista s³ów kluczowych pochodzi z Pomocy Borland Delphi. W razie potrzeby
+mo¿na j± zmodyfikowaæ.
+
+
+ Wspólne
+---------
+Czcionki u¿ywane do sk³adania programów s± zadeklarowane na pocz±tku
+pliku cap_comm.tex. W razie potrzeby mo¿na je ³atwo przedefiniowaæ.
+Osoby u¿ywaj±ce czcionek PL zamiast CM bêd± musia³y zmodyfikowaæ dwie
+linie w tym pliku. S± one wyra¼nie zaznaczone.
+
+
+ Uwaga
+-------
+Je¶li modyfikujesz który¶ z plików, zaznacz wyra¼nie swoje zmiany. Nie
+chcê braæ odpowiedzialno¶ci na modyfikacje wprowadzone przez innych.
+
+
+------------
+
+ Micha³ Gulczyñski
+ mgulcz@we.tuniv.szczecin.pl
diff --git a/macros/generic/c_pascal/cap.tex b/macros/generic/c_pascal/cap.tex
new file mode 100644
index 0000000000..a012a95d0b
--- /dev/null
+++ b/macros/generic/c_pascal/cap.tex
@@ -0,0 +1,3 @@
+\input cap_c
+\input cap_pas
+\input cap_pyt
diff --git a/macros/generic/c_pascal/cap_c.tex b/macros/generic/c_pascal/cap_c.tex
new file mode 100644
index 0000000000..3aaa2d33f8
--- /dev/null
+++ b/macros/generic/c_pascal/cap_c.tex
@@ -0,0 +1,181 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CAP --- Macros for typesetting programs in C and Pascal %
+% Micha\l{} Gulczy\'nski, Szczecin, Feb 1997 / Feb 1998 %
+% mgulcz@we.tuniv.szczecin.pl %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% version 1.2d
+% Added DVIPS color support (actually, any output is replaced with
+% a macro call to \@Output --- search for it to see the changes)
+% -- by Danilo {\v S}egan, mm01142@alas.matf.bg.ac.yu
+% version 1.2
+% This file contains macros for typesetting programs in C.
+% It belongs to the CAP package. Do not distribute separately.
+%
+% All font definitions are located in the cap_comm.tex file.
+%
+
+%
+% set of keywords; they must be separated with spaces
+% a space must precede the first one and follow the last one, too
+%
+\def\KeywordsC{
+void char int float double enum long short signed unsigned far near huge
+auto register extern static volatile inline const typedef
+new delete sizeof struct union
+for do while if else switch case default break continue return goto
+asm cdecl pascal interrupt
+class private public protected this friend virtual template operator
+catch throw try
+}
+\catcode`\@ = 11
+%
+% that's where we begin
+%
+\def\BeginC{%
+ \@PrepareCPas
+ \@LetsStartC
+}%
+% Some people in Poland use so-called ``slash notation''
+% to represent certain Polish letters --- in this situation
+% slash is an active character. On the other hand we use slash
+% in pathnames: directory/subdirectory/file. I made this part
+% sooo complicated, bacause I had to neutralise slash in
+% \InputC.
+\def\@InputC#1{%
+ \message{(C++: #1}%
+ \openin\@InFile = #1
+ \@PrepareCPas
+ % The file is read line by line and each line is typeset
+ % just like a separate program. Therefore the size of program
+ % typeset using this macro is (almost) unlimited.
+ \loop
+ \global\read\@InFile to \@TextOfProgram
+ \@WriteTextOfProgramC
+ \if \neof\@InFile \repeat
+ \closein\@InFile
+ \endgroup % this group was begun by \@PrepareCPas
+ \endgroup % this group was begun by \InputC
+ \message{)}%
+}
+\def\InputC{%
+ \begingroup
+ \catcode`\/ = 11
+ \@InputC
+}
+%
+% delimiter \EndC will be ordinary text
+%
+{ \catcode`\|=0 \catcode`\\=12
+ |gdef|@LetsStartC#1\EndC{%
+ |gdef|@TextOfProgram{#1}%
+ |@WriteTextOfProgramC
+ |endgroup % this group was begun by \@PrepareCPas
+ }
+}
+%
+% macro \@TextOfProgram contains the whole text of program
+%
+\def\@WriteTextOfProgramC{%
+ \expandafter\@ReadCharC\@TextOfProgram\@EndOfProgram
+}
+%
+% heart of the program -- the argument is a single char
+%
+\def\@ReadCharC#1{%
+ % this macro calls itself until the argument #1 is \@EndOfProgram
+ \if\@Identical{\string#1}{\string\@EndOfProgram}%
+ \let\@WhatNext = \relax
+ \else
+ \let\@WhatNext = \@ReadCharC
+ \global\@CharCode = `#1\relax
+ \ifcase \@WhereAmI
+ %%%%%%%%%%%%%%%%%%%
+ % \@NothingSpecial:
+ %%%%%%%%%%%%%%%%%%%
+ \ifnum \@PrevChar=`\/
+ \ifnum \@CharCode=`\/
+ \global\@WhereAmI = \@ShortComment
+ \@CommentState
+ \@Output{\char47}%
+ \else
+ \ifnum \@CharCode=`\*
+ \global\@WhereAmI = \@LongComment
+ \@CommentState
+ \fi
+ \fi
+ \@Output{\char47}%
+ \fi
+ % the longest possible string containing only letters and digits
+ % is either a keyword or an identifier
+ \if\@DigitLetter{\@CharCode}%
+ \edef\@Word{\@Word#1}%
+ \else
+ \if\@Identical{\@Word}{}%
+ \else
+ \@WriteWord{\@Word}{\KeywordsC}%
+ \def\@Word{}%
+ \fi
+ \ifnum \@CharCode=`\#
+ \global\@WhereAmI = \@Directive
+ \@DirectiveState
+ \fi
+ \ifnum \@CharCode=`\"
+ \global\@WhereAmI = \@Text
+ \@TextState
+ \fi
+ \ifnum \@CharCode=`\/
+ \else
+ \@WriteChar{#1}%
+ \fi
+ \fi
+ \or
+ %%%%%%%%%
+ % \@Text:
+ %%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=`\"
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%
+ % \@Directive:
+ %%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=13
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%%%%
+ % \@ShortComment:
+ %%%%%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=13
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%%%
+ % \@LongComment:
+ %%%%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@PrevChar=`\*
+ \ifnum \@CharCode=`\/
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \@CharCode = 32
+ \fi
+ \fi
+ \fi
+ \global\@PrevChar = \@CharCode
+ \fi
+ \@WhatNext
+}
+
+\ifx \@PrepareCPas \@Dont@Know@What@It@Is
+ \input cap_comm
+\fi
+
+\catcode`\@ = 12
diff --git a/macros/generic/c_pascal/cap_comm.tex b/macros/generic/c_pascal/cap_comm.tex
new file mode 100644
index 0000000000..30a98aae4a
--- /dev/null
+++ b/macros/generic/c_pascal/cap_comm.tex
@@ -0,0 +1,257 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CAP --- Macros for typesetting programs in C and Pascal %
+% Micha\l{} Gulczy\'nski, Szczecin, Feb 1997 / Feb 1998 %
+% mgulcz@we.tuniv.szczecin.pl %
+% Some (non-essential) changes to support COLORDVI output %
+% Danilo \v Segan, Beograd, Sep 2002 %
+% mm01142@alas.matf.bg.ac.yu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% version 1.2d
+% Added DVIPS color support (actually, any output is replaced with
+% a macro call to \Ispis --- search for it to see the changes)
+% Also extended a mechanism for marking "special" symbols, so they
+% would get applicable color in a string, comment, or otherwise
+% NOTE: It should be backwards compatible, so there is no need to
+% change anything else, except of course adding color
+% settings if you wish
+% -- by Danilo {\v S}egan, mm01142@alas.matf.bg.ac.yu
+% version 1.2
+% This file contains common definitions used in the CAP package.
+% It does not contain any useful macros itself.
+%
+
+% If you don't have dvips's colordvi.tex, then fetch it from somewhere
+% to avoid errors in processing (it inserts specials which will
+% probably be ignored by anything other than COLORDVI aware software)
+% The alternate solution is to comment out all color definitions
+% (\let's) and to define writeout function as \def\Ispis#1{#1}
+\input colordvi
+
+% If you don't have color printer, you may choose to remain compatible
+% with those that do, and only use analogous dvips's input file
+%\input blackdvi
+
+%
+% font and color declarations
+%
+\font\tenttsl = cmsltt10 % <--- modify these two lines if you don't use
+\font\tenttit = cmitt10 % <--- CM fonts
+\let\IdentifierFont = \it
+\let\IdentifierColor = \Black
+\let\TextFont = \sl
+\let\TextColor = \Black
+\let\KeywordFont = \bf
+\let\KeywordColor = \Black
+\let\CommentFont = \tenttit
+\let\CommentColor = \Black
+\let\DirectiveFont = \tenttsl
+\let\DirectiveColor = \Black
+\let\SymbolFont = \tt
+\let\SymbolColor = \Black
+\let\SpecialFont = \tt % some characters: { } < > _ \ and | are very
+\let\SpecialColor = \Black % special -- they exist only in tt fonts
+
+%
+% how much does a single "space" skip (retained the default 1ex from CAP)
+%
+\newdimen\SpaceSkip % Changeable space skip (instead of the old fixed 1ex)
+\SpaceSkip=1ex
+
+
+%\def\GenState#1{%
+%\expandafter\expandafter\def\csname @#1State\endcsname{%
+% \def\@Color{\csname#1Color\endcsname}%
+% \def\@@State{#1}%
+% \expandafter\csname #1Font\endcsname}}
+\def\GenState#1{%
+\expandafter\expandafter\def\csname @#1State\endcsname{%
+ \def\@tmpName{#1}%
+% \ifx\@@State\@tmpName\else% if already in this state, skip
+ \def\@Color{\csname#1Color\endcsname}%
+ \def\@@State{#1}%
+ \expandafter\csname #1Font\endcsname%\fi}}
+ }}
+
+\GenState{Identifier}
+\GenState{Text}
+\GenState{Keyword}
+\GenState{Comment}
+\GenState{Directive}
+\GenState{Symbol}
+% One \GenState{NAME} replaces the following definition
+% \def\@NAMEState{\let\@Color=\NAMEColor\NAMEFont\def\@@State{NAME}}
+\def\@SpecialState{%
+ \def\neka##1{\edef\@@stanje{##1}}%
+ \neka{Directive}\ifx\@@State\@@stanje%
+ \let\@Color=\DirectiveColor%
+ \else
+ \neka{Comment}\ifx\@@State\@@stanje%
+ \let\@Color=\CommentColor%
+ \else
+ \neka{Text}\ifx\@@State\@@stanje%
+ \let\@Color=\TextColor%
+ \else%
+ \let\@Color=\SpecialColor
+ \fi\fi\fi%
+ \SpecialFont}
+
+\def\@Output#1{\@Color{#1}}
+
+%
+% registers and constants used in the program
+%
+\newif\if@TempBool % temporary boolean
+\newread\@InFile % file read by \Input macros
+\newcount\@CharCode % code of current character
+\newcount\@PrevChar % code of previous charater
+\newcount\@WhereAmI % one of the following values:
+\chardef\@NothingSpecial = 0
+\chardef\@Text = 1
+\chardef\@Directive = 2 % used only in C
+\chardef\@ShortComment = 3 % C: //... ; Pascal: (* ... *)
+\chardef\@LongComment = 4 % C: /* ... */; Pascal: { ... }
+%
+% macro that compares two strings
+%
+\def\@Identical#1#2{%
+ MG\fi
+ \edef\@FirstString{#1}%
+ \edef\@SecondString{#2}%
+ \ifx \@FirstString \@SecondString
+}
+%
+% I need a "not eof" function
+%
+\def\neof#1{%
+ MG\fi
+ \ifeof#1
+ \@TempBoolfalse
+ \else
+ \@TempBooltrue
+ \fi
+ \if@TempBool
+}
+%
+% macro for changing catcodes of some special characters
+%
+\def\@TurnSpecialCharsOff{%
+ \catcode`\/=12
+ \catcode`\~=12
+ \catcode`\#=12
+ \catcode`\$=12
+ \catcode`\%=12
+ \catcode`\^=12
+ \catcode`\&=12
+ \catcode`\_=12
+ \catcode`\\=12
+ \catcode`\{=12
+ \catcode`\}=12
+ \catcode`\ =12
+ \catcode`\^^M=12
+}
+%
+% macro that initiates all the variables
+%
+\def\@PrepareCPas{%
+ \begingroup
+ \parindent=0pt
+ \rightskip=0pt plus 1fil
+ \@TurnSpecialCharsOff
+ \def\@Word{}%
+ \@WhereAmI = \@NothingSpecial
+ \@PrevChar = 32
+ \@SymbolState
+}
+%
+% macro that outputs the char specified as the argument;
+% characters < > _ \ { | } are written with \SpecialState,
+% except for _ which is written with \IdentifierColor and \SpecialFont
+%
+\def\@WriteChar#1{%
+ \def\@Check##1{%
+ \ifnum `#1=`##1%
+ {\@SpecialState \@Output{#1}}%
+ \@TempBooltrue%
+ \fi
+ }%
+ \@TempBoolfalse
+ \@Check{<}%
+ \@Check{>}%
+% \@Check{_}%
+ \ifnum`#1=`\_%
+ \@IdentifierState\SpecialFont%
+ \@Output{#1}\@TempBooltrue%
+ \fi%
+ \@Check{\\}%
+ \@Check{\{}%
+ \@Check{\}}%
+ \@Check{|}%
+ \if@TempBool
+ \else
+ \ifnum `#1=13
+ \par\leavevmode
+ \else
+ \ifnum `#1=32
+ \hskip\SpaceSkip
+ \else
+ \@Output{#1}%
+ \fi
+ \fi
+ \fi
+}
+%
+% checks if word #1 is a keyword and writes it out;
+% #2 is a list of keywords separated with spaces
+%
+\def\@WriteWord#1#2{%
+ \if\@OnListOfKeywords{ #1 }{#2}%
+ {\@KeywordState\@Output{#1}}%
+ \else
+ {\@IdentifierState\@Output{#1}}%
+ \fi
+}
+%
+% checks if string #2 contains string #1
+%
+\def\@OnListOfKeywords#1#2{%
+ MG\fi
+ \edef\@ExpandedArgument{{#1}}%
+ \expandafter\@@OnListOfKeywords\@ExpandedArgument{#2}\relax
+}
+\def\@@OnListOfKeywords#1#2{%
+ \def\@CheckList##1#1##2\@EndOfList{%
+ \if\@Identical{##2}{}%
+ \@TempBoolfalse
+ \else
+ \@TempBooltrue
+ \fi
+ }%
+ \expandafter\@CheckList#2#1\@EndOfList\relax
+ \if@TempBool
+}
+%
+% checks if the specified character is a digit or a letter
+%
+\def\@DigitLetter#1{%
+ MG\fi
+ \@TempBoolfalse
+ \ifnum `\` < #1\relax % small letter?
+ \ifnum `\{ > #1\relax
+ \@TempBooltrue
+ \fi
+ \fi
+ \ifnum `\@ < #1\relax % capital letter?
+ \ifnum `\[ > #1\relax
+ \@TempBooltrue
+ \fi
+ \fi
+ \ifnum `\/ < #1\relax % digit?
+ \ifnum `\: > #1\relax
+ \@TempBooltrue
+ \fi
+ \fi
+ \if@TempBool
+}
+
+\endinput
diff --git a/macros/generic/c_pascal/cap_pas.tex b/macros/generic/c_pascal/cap_pas.tex
new file mode 100644
index 0000000000..1d1cf79259
--- /dev/null
+++ b/macros/generic/c_pascal/cap_pas.tex
@@ -0,0 +1,166 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CAP --- Macros for typesetting programs in C and Pascal %
+% Micha\l{} Gulczy\'nski, Szczecin, Feb 1997 / Feb 1998 %
+% mgulcz@we.tuniv.szczecin.pl %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% version 1.2
+% This file contains macros for typesetting programs in Pascal.
+% It belongs to the CAP package. Do not distribute separately.
+%
+% All font definitions are located in the cap_comm.tex file.
+%
+
+%
+% set of keywords; they must be separated with spaces
+% a space must precede the first one and follow the last one, too
+%
+\def\KeywordsPascal{
+and as asm array begin case class const constructor destructor
+div do downto else end except exports file finally for function goto
+if implementation in inherited inline initialization interface is label
+library mod nil not object of or packed procedure program property
+raise record repeat set shl shr string then to try type unit until
+uses var while with xor
+}
+\catcode`\@ = 11
+%
+% that's where we begin
+%
+\def\BeginPascal{%
+ \@PrepareCPas
+ \@LetsStartPascal
+}%
+% Some people in Poland use so-called ``slash notation''
+% to represent certain Polish letters --- in this situation
+% slash is an active character. On the other hand we use slash
+% in pathnames: directory/subdirectory/file. I made this part
+% sooo complicated, bacause I had to neutralise slash in
+% \InputPascal.
+\def\@InputPascal#1{%
+ \message{(Pascal: #1}%
+ \openin\@InFile = #1
+ \@PrepareCPas
+ % The file is read line by line and each line is typeset
+ % just like a separate program. Therefore the size of program
+ % typeset using this macro is (almost) unlimited.
+ \loop
+ \global\read\@InFile to \@TextOfProgram
+ \@WriteTextOfProgramPascal
+ \if \neof\@InFile \repeat
+ \closein\@InFile
+ \endgroup % this group was begun by \@PrepareCPas
+ \endgroup % this group was begun by \InputPascal
+ \message{)}%
+}
+\def\InputPascal{%
+ \begingroup
+ \catcode`\/ = 11
+ \@InputPascal
+}%
+%
+% delimiter \EndC will be ordinary text
+%
+{ \catcode`\|=0 \catcode`\\=12
+ |gdef|@LetsStartPascal#1\EndPascal{%
+ |gdef|@TextOfProgram{#1}%
+ |@WriteTextOfProgramPascal
+ |endgroup % this group was begun by \@PrepareCPas
+ }
+}
+%
+% macro \@TextOfProgram contains the whole text of program
+%
+\def\@WriteTextOfProgramPascal{%
+ \expandafter\@ReadCharPascal\@TextOfProgram\@EndOfProgram
+}
+%
+% heart of the program -- the argument is a single char
+%
+\def\@ReadCharPascal#1{%
+ % this macro calls itself until the argument #1 is \@EndOfProgram
+ \if\@Identical{\string#1}{\string\@EndOfProgram}%
+ \let\@WhatNext = \relax
+ \else
+ \let\@WhatNext = \@ReadCharPascal
+ \global\@CharCode = `#1\relax
+ \ifcase \@WhereAmI
+ %%%%%%%%%%%%%%%%%%%
+ % \@NothingSpecial:
+ %%%%%%%%%%%%%%%%%%%
+ \ifnum \@PrevChar=`\(
+ \ifnum \@CharCode=`\*
+ \global\@WhereAmI = \@LongComment
+ \@CommentState
+ \fi
+ \@Output{(}%
+ \fi
+ % the longest possible string containing only letters and digits
+ % is either a keyword or an identifier
+ \if\@DigitLetter{\@CharCode}%
+ \edef\@Word{\@Word#1}%
+ \else
+ \if\@Identical{\@Word}{}%
+ \else
+ \@WriteWord{\@Word}{\KeywordsPascal}%
+ \def\@Word{}%
+ \fi
+ \ifnum \@CharCode=`\{
+ \global\@WhereAmI = \@ShortComment
+ \@CommentState
+ \fi
+ \ifnum \@CharCode=`\'
+ \global\@WhereAmI = \@Text
+ \@TextState
+ \fi
+ \ifnum \@CharCode=`\(
+ \else
+ \@WriteChar{#1}%
+ \fi
+ \fi
+ \or
+ %%%%%%%%%
+ % \@Text:
+ %%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=`\'
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%
+ % \@Directive:
+ %%%%%%%%%%%%%%
+ % there are no directives in Pascal, but i'll leave it
+ \or
+ %%%%%%%%%%%%%%%%%
+ % \@ShortComment:
+ %%%%%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=`\}
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%%%
+ % \@LongComment:
+ %%%%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@PrevChar=`\*
+ \ifnum \@CharCode=`\)
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \@CharCode = 32
+ \fi
+ \fi
+ \fi
+ \global\@PrevChar = \@CharCode
+ \fi
+ \@WhatNext
+}
+
+\ifx \@PrepareCPas \@Dont@Know@What@It@Is
+ \input cap_comm
+\fi
+
+\catcode`\@ = 12
diff --git a/macros/generic/c_pascal/cap_pyt.tex b/macros/generic/c_pascal/cap_pyt.tex
new file mode 100644
index 0000000000..a15f89db62
--- /dev/null
+++ b/macros/generic/c_pascal/cap_pyt.tex
@@ -0,0 +1,171 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PCAP --- Macros for typesetting programs in Python, C and Pascal%
+% Micha\l{} Gulczy\'nski, Szczecin, Feb 1997 / Feb 1998 %
+% mgulcz@we.tuniv.szczecin.pl %
+% Python support: Danilo \v Segan, Beograd, Sep 2002 %
+% mm01142@alas.matf.bg.ac.yu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% version 1.2p
+% Creation steps:
+% 1. cp cap_pas.tex cap_pyt.tex
+% 2. replace every occurence of "Pascal" with "Python"
+% 3. Define keywords using ones defined in "python-mode.el"
+% 4. Modify to support Python strings and comments
+% version 1.2
+% This file contains macros for typesetting programs in Pascal.
+% It belongs to the CAP package. Do not distribute separately.
+%
+% All font definitions are located in the cap_comm.tex file.
+%
+
+%
+% set of keywords; they must be separated with spaces
+% a space must precede the first one and follow the last one, too
+%
+\def\KeywordsPython{
+and assert break class continue def del elif else except exec for
+from global if import in is lambda not or pass print raise return
+while yield else except finally try
+}
+\catcode`\@ = 11
+%
+% that's where we begin
+%
+\def\BeginPython{%
+ \@PrepareCPas
+ \@LetsStartPython
+}%
+% Some people in Poland use so-called ``slash notation''
+% to represent certain Polish letters --- in this situation
+% slash is an active character. On the other hand we use slash
+% in pathnames: directory/subdirectory/file. I made this part
+% sooo complicated, bacause I had to neutralise slash in
+% \InputPascal.
+\def\@InputPython#1{%
+ \message{(Python: #1}%
+ \openin\@InFile = #1
+ \@PrepareCPas
+ % The file is read line by line and each line is typeset
+ % just like a separate program. Therefore the size of program
+ % typeset using this macro is (almost) unlimited.
+ \loop
+ \global\read\@InFile to \@TextOfProgram
+ \@WriteTextOfProgramPython
+ \if \neof\@InFile \repeat
+ \closein\@InFile
+ \endgroup % this group was begun by \@PrepareCPas
+ \endgroup % this group was begun by \InputPascal
+ \message{)}%
+}
+\def\InputPython{%
+ \begingroup
+ \catcode`\/ = 11
+ \@InputPython
+}%
+%
+% delimiter \EndC will be ordinary text
+%
+{ \catcode`\|=0 \catcode`\\=12
+ |gdef|@LetsStartPython#1\EndPython{%
+ |gdef|@TextOfProgram{#1}%
+ |@WriteTextOfProgramPython
+ |endgroup % this group was begun by \@PrepareCPas
+ }
+}
+%
+% macro \@TextOfProgram contains the whole text of program
+%
+\def\@WriteTextOfProgramPython{%
+ \expandafter\@ReadCharPython\@TextOfProgram\@EndOfProgram
+}
+%
+% heart of the program -- the argument is a single char
+%
+\def\@ReadCharPython#1{%
+ % this macro calls itself until the argument #1 is \@EndOfProgram
+ \if\@Identical{\string#1}{\string\@EndOfProgram}%
+ \let\@WhatNext = \relax
+ \else
+ \let\@WhatNext = \@ReadCharPython
+ \global\@CharCode = `#1\relax
+ \ifcase \@WhereAmI
+ %%%%%%%%%%%%%%%%%%%
+ % \@NothingSpecial:
+ %%%%%%%%%%%%%%%%%%%
+ \ifnum \@PrevChar=`\(
+% \ifnum \@CharCode=`\*
+% \global\@WhereAmI = \@LongComment
+% \@CommentState
+% \fi
+ \@SymbolState\@Output{(}%
+ \fi
+ % the longest possible string containing only letters and digits
+ % is either a keyword or an identifier
+ \if\@DigitLetter{\@CharCode}%
+ \edef\@Word{\@Word#1}%
+ \else
+ \if\@Identical{\@Word}{}%
+ \else
+ \@WriteWord{\@Word}{\KeywordsPython}%
+ \def\@Word{}%
+ \fi
+ \ifnum \@CharCode=`\#
+ \global\@WhereAmI = \@ShortComment
+ \@CommentState
+ \fi
+ \ifnum \@CharCode=`\"
+ \global\@WhereAmI = \@Text
+ \@TextState
+ \fi
+ \ifnum \@CharCode=`\(
+ \else
+ \@WriteChar{#1}%
+ \fi
+ \fi
+ \or
+ %%%%%%%%%
+ % \@Text:
+ %%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=`\"
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%
+ % \@Directive:
+ %%%%%%%%%%%%%%
+ % there are no directives in Python, but i'll leave it
+ \or
+ %%%%%%%%%%%%%%%%%
+ % \@ShortComment:
+ %%%%%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@CharCode=13
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \fi
+ \or
+ %%%%%%%%%%%%%%%%
+ % \@LongComment:
+ %%%%%%%%%%%%%%%%
+ \@WriteChar{#1}%
+ \ifnum \@PrevChar=`\*
+ \ifnum \@CharCode=`\)
+ \global\@WhereAmI = \@NothingSpecial
+ \@SymbolState
+ \@CharCode = 32
+ \fi
+ \fi
+ \fi
+ \global\@PrevChar = \@CharCode
+ \fi
+ \@WhatNext
+}
+
+\ifx \@PrepareCPas \@Dont@Know@What@It@Is
+ \input cap_comm
+\fi
+
+\catcode`\@ = 12
diff --git a/macros/generic/c_pascal/demo1.tex b/macros/generic/c_pascal/demo1.tex
new file mode 100644
index 0000000000..6f630daa4e
--- /dev/null
+++ b/macros/generic/c_pascal/demo1.tex
@@ -0,0 +1,42 @@
+\input cap_c
+\magnification 1440
+
+
+\BeginC
+// this is a short demo program
+/* both kinds of comment are recognised */
+
+// some compiler directives
+#pragma hdrfile "hello.sym"
+#include <stdio.h>
+#include <sys/stat.h>
+#pragma hdrstop
+
+void hello(int n)
+{
+ // obviously, keywords inside comments or
+ // texts are not emphasized:
+ // void return switch for double
+ for (; n>0; n--)
+ printf("Hello, void world!\n");
+ /* ^ isn't that beautiful? */
+}
+
+float silly_funct()
+{
+ #define max(a,b) ((a)>(b))?(a):(b)
+ printf("%7.4lf\n", max(3.14, 012));
+}
+
+// words not recognised as keywords are considered
+// to be identifiers and are typeset in italic
+void main()
+{
+ int n;
+ hello(0x1C);
+ silly_funct();
+}
+\EndC
+
+
+\bye
diff --git a/macros/generic/c_pascal/demo2.tex b/macros/generic/c_pascal/demo2.tex
new file mode 100644
index 0000000000..548ef8ee21
--- /dev/null
+++ b/macros/generic/c_pascal/demo2.tex
@@ -0,0 +1,90 @@
+\input cap
+\let\IdentifierColor=\Black
+\let\KeywordColor=\MidnightBlue
+\let\SpecialColor=\Black
+\let\SymbolColor=\Black
+\let\CommentColor=\Gray
+\let\TextColor=\ForestGreen
+\let\DirectiveColor=\Tan
+\SpaceSkip=1.3ex
+
+% Just for fun, you can use a cyrillic font for identifiers
+% Of course, any font can be changed just like in the non-color
+% version of cap.
+%\font\cirm=wncyi10\let\IdentifierFont=\cirm
+
+
+
+A short program in C. It was inserted directly into the \TeX\ source file.
+
+\medskip
+\BeginC
+#include <stdio.h>
+
+void main()
+{
+ a=~a;
+ printf("Hello, world!\n");
+ // printf("Hello, world!\n");
+}
+\EndC
+
+\hrule
+\bigskip
+
+And now a program inserted from a separate file.
+
+\medskip
+\InputC{prog/sun.c}
+
+\vfill\eject
+
+
+And now programs written in Pascal. This one was typed directly into this
+file.
+
+\medskip
+\BeginPascal
+program Hello_world;
+begin
+ writeln('Hello, world!');
+ { writeln('Hello, world!'); }
+end.
+\EndPascal
+
+\hrule
+\bigskip
+
+This one was imported from another file.
+
+\medskip
+\InputPascal{prog/guess.pas}
+
+\vfill\eject
+
+And now, my latest addition: programs written in Python. The first one
+is typed directly into the file.
+
+\medskip
+\BeginPython
+def fib(n):
+ """Calculates Fibonacci series.
+
+ It returns the first member of Fibonacci series larger than n"""
+ a,b=1,1
+ while b <= n:
+ a,b = b,a+b # see how we use multiple assignment?
+ return b
+
+fib(10)
+\EndPython
+
+\hrule
+\bigskip
+
+This one was imported from another file.
+
+\medskip
+\InputPython{prog/fib.py}
+
+\bye
diff --git a/macros/generic/c_pascal/prog/fib.py b/macros/generic/c_pascal/prog/fib.py
new file mode 100644
index 0000000000..3c0bc3d8a2
--- /dev/null
+++ b/macros/generic/c_pascal/prog/fib.py
@@ -0,0 +1,27 @@
+# Just a little test program
+from sys import stderr
+
+class FibSeries:
+ """Returns all the elements of Fibonacci series up to a given number.
+
+ Requires one parameter (the number we're going up to)."""
+
+
+ def __init__(self,number):
+ self.series=[1,1]
+ a,b=1,1
+
+ while b<number:
+ a,b=b,a+b
+ if b<number: self.series.append(b)
+
+ def writeout(self):
+ cnt=0
+ while cnt<len(self.series):
+ stderr.write(str(self.series[cnt])+" ")
+ cnt+=1
+ stderr.write("\n")
+
+meine = FibSeries(115)
+meine.writeout()
+
diff --git a/macros/generic/c_pascal/prog/guess.pas b/macros/generic/c_pascal/prog/guess.pas
new file mode 100644
index 0000000000..d42615780f
--- /dev/null
+++ b/macros/generic/c_pascal/prog/guess.pas
@@ -0,0 +1,26 @@
+program guess;
+
+var
+ num1, num2: integer;
+
+begin
+ randomize;
+ num2 := random(100);
+
+ repeat
+ { make user guess }
+ write('Guess my number: ');
+ readln(num1);
+
+ { check the relation }
+ if num1 = num2 then
+ writeln('Very well!');
+ if num1 < num2 then
+ writeln('Too small.');
+ if num1 > num2 then
+ writeln('Too big.');
+ until num1 = num2;
+
+ { pause }
+ readln;
+end.
diff --git a/macros/generic/c_pascal/prog/sun.c b/macros/generic/c_pascal/prog/sun.c
new file mode 100644
index 0000000000..dc9bbf184b
--- /dev/null
+++ b/macros/generic/c_pascal/prog/sun.c
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <math.h>
+
+int months[]={0, 31, 28, 31, 30, 31, 30,
+ 31, 31, 30, 31, 30, 31};
+char weekdays[7][15]={"Sunday", "Monday", "Tuesday", "Wednesday",
+ "Thursday", "Friday", "Saturday"};
+
+/* this program calculates the latidude
+ where polar day begins/ends */
+void main()
+{
+ int day=24, month=6, weekday=2;
+ double angle=0;
+ double latitude;
+
+ do
+ {
+ latitude=atan(tan((23+27.0/60)*M_PI/180)*cos(angle))*180/M_PI;
+ latitude=(latitude>0)? 90-latitude : -90-latitude;
+ printf("%2d.%02d %12s : %d %02d'\n", day, month,
+ weekdays[weekday], (int)latitude,
+ (int)fabs((latitude-(int)latitude)*60));
+ if (weekday==0)
+ printf("\n");
+
+ angle+=2*M_PI/365;
+ day++;
+ if (day>months[month])
+ {
+ day=1;
+ month++;
+ if (month>12)
+ month=1;
+ }
+ if (++weekday>6)
+ weekday=0;
+ } while (month!=1);
+}
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/00files.txt b/macros/generic/caesarcm/caesar-fonts-generic.dir/00files.txt
new file mode 100644
index 0000000000..bde042c2fa
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/00files.txt
@@ -0,0 +1,43 @@
+Files matching DISK$TEX:[TEX-ARCHIVE.MACROS.GENERIC.CAESARCM.CAESARCMFONTS.DIR.CAESAR-FONTS-GENERIC.DIR]*.*
+ (listing updated: 3-May-93 05:55).
+
+Last change Size Type File specification
+------------------------------------------------------------------------------
+ 2-May-93 01:06 198 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]readme.
+ 2-May-93 01:06 3706 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.tfm_vve
+ 2-May-93 01:06 4024 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.tfm_vve
+ 2-May-93 01:06 4012 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.tfm_vve
+ 2-May-93 01:06 1234 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]dodo.tfm_vve
+ 2-May-93 01:06 3706 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]tmr10.tfm_vve
+ 2-May-93 01:06 278 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]dodo-pk.uu
+ 2-May-93 01:06 398 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]dodo.pl
+ 2-May-93 01:06 2648 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.tfm-uu
+ 2-May-93 01:05 2956 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.tfm-uu
+ 2-May-93 01:05 254 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]dodo.tfm-uu
+ 2-May-93 01:05 1496 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]v2update.readme
+ 2-May-93 01:05 2944 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.tfm-uu
+ 2-May-93 01:05 2648 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]tmr10.tfm-uu
+ 2-May-93 01:05 9846 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]excm-fonts.readme
+ 2-May-93 01:05 2516 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]excm-pk.dir_vve
+29-Mar-93 16:47 13980 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.300pk_vve
+29-Mar-93 16:47 16460 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.360pk_vve
+29-Mar-93 16:47 14974 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.329pk_vve
+29-Mar-93 16:47 19744 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.432pk_vve
+29-Mar-93 16:47 23622 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.518pk_vve
+29-Mar-93 16:47 29026 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.622pk_vve
+29-Mar-93 16:47 16468 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.300pk_vve
+29-Mar-93 16:47 18594 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.329pk_vve
+29-Mar-93 16:47 19662 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.360pk_vve
+29-Mar-93 16:47 24434 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.432pk_vve
+29-Mar-93 16:47 28708 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.518pk_vve
+29-Mar-93 16:47 36268 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.622pk_vve
+29-Mar-93 16:47 44020 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmti10.746pk_vve
+29-Mar-93 16:46 15846 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.300pk_vve
+29-Mar-93 16:46 17128 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.329pk_vve
+29-Mar-93 16:46 18778 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.360pk_vve
+29-Mar-93 16:46 22686 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.432pk_vve
+29-Mar-93 16:46 27194 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.518pk_vve
+29-Mar-93 16:46 33666 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.622pk_vve
+29-Mar-93 16:46 40872 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmsl10.746pk_vve
+29-Mar-93 16:46 35222 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir.caesar-fonts-generic.dir]cmr10.746pk_vve
+------------------------------------------------------------------------------
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.300pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.300pk_vve
new file mode 100644
index 0000000000..dc9540c17d
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.300pk_vve
@@ -0,0 +1,223 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.300pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB12k+8+++2otni2+-0Oi++Eafg+mEEk++VwQ5TwQoC6hnWHOV
+VvhsV3BXW2opi6JHIwLHG7poFZB5Fo0ZQwPGmhOwR-79EJolIZwm1300pJM5FUQV
+VvhzVjJd6G2crGYN9BiB9FIgqGYN7FoRModGIR8FYh3H1LYH2x2h3GYN7ExNQ+uV
+VvhEkiCClsN5jsQhb41MY7mcW7Ho2Ex6nDHAnp06xIj3BMFDLLbqHplwIpV6xMTV
+VvhAxEJDG3no-cf51QhBr16AoEACCMU4lny4xLEG2h8GIksxB+rHFBYoILooXLbV
+VvhHGHoHGBIoIJB2qHEFYo1RAC2gtGHTJbMBoI8st+Q4-ny4k44GYNA7jHFNB7TV
+VvhE-+JFVQJsYMRFGqxFGrWFVp44-F+2FsYE-+JxB7IkaGY6-UUq0V40b584lMQV
+VvhzVg-RIZ3GmLokJH0x2oIFVMS72MPFGivFGjXFVjaE-FRqQ--FkmCCm2Q5jsQV
+Vvhhb4nMY8WcW81o2Qx6qDHBXp0IxIYxBMIDL2yJBhAoxBIDIFDHHFHooPnoYQxV
+Vvh36D-2u8VAfBWIR3fm-B61++05lcQzVj0nfF8GBKCl8FA9AUAGEL55EwA5DwPV
+Vvhnhl2HB+OGUUstFIE5TwPDMLC+IF1J1sZF1F2IKBlEtK+m2N915586-kQzVj4V
+VvhZIl6H0dA4ogQGVo2YR365GFlooMRF35JF1p2BRB02Ioo6GHGEFBB7JHFx5HEV
+VvhG2l6KoZ9x8GYh7GpV9MwKwURH+c++VcJ5DsPoALHvGHIsYkTF972gJGWJ7BIV
+VvhRFplm1pB1eeh7W2QzViR8TFR7MsV3B+FGD2YgGGC6HGFB6sVF532XW3IIJGCV
+Vvh6KElN6wLEFR6sVV6G-YdFnUdF7IZkAV4HUk++VwO5DsPWNFPBpkM2IgMwGGVV
+VvhUHGFUHK-UIG-XlJ54-N44D3oIM42EM43AM4IAMwOEVUPEFXllMwR-65FC-oWV
+VvhQx2Yb-H+CowAQQcU4lvy58TJBHoHYvCnYx+rDGBIoYExEnxBF0DKASRBN-DKV
+VvhAjHIEnp1FB73DGBno1YvCnYx2pDJSgUWI+fXY-kL5DsPp8G1V7FYd3GnLYGoV
+VvhF9BId3GIN6CB0ihB991+I32AQQcU4mLy58TJBHoHYvCnYx+rDGBIoYExEnxBV
+VvhF0DKASRBN-DKAjHIEnp1F4BYIp2lIrAlIHCH6J6Hgl3JoIEr4dQREb5IBGp2V
+VvhAzpMpqqIAAUsIUj55VwQ5TsPoxB5HEGIh8GYgusoh7Gnd8GYZ9FooAooNB36V
+VvhDEG2nZGIjoZ432cq32d22QQo5NIUk1VH0CCE3l6SzVlKIIBG6X8F2WCX6g6HV
+VvhkVsXo-3B3R3R0OiAWubELFLFHGHWoJzE6HgW6FcH6WMY3LL+63E9XXgS4lnzV
+Vvh4lr0C2Qm8IUWwOGF2eGWsfGVvHlBZhDHIAUTJEk++VwO5TsPlNFABypYo-YwV
+Vvh4YgPCVo0cR2c5HB0pZf6BJMA++6T5-rz4va1LFFYoWRB6MLE8THE4y795Ex7V
+Vvh5FK-ojFlopIhHoIRPWElqDEFqKqjHQsWoAV6Jl-lmWgc5TwPhPK1Kpd3H2kbV
+VvhsYhP4IdO4jGF774oUGG-noQIFllK32QR1WFFN35GsYAMElp26MIFpTEFd-5KV
+VvhKZpy7AHMsWoGgA-2K+k++VwQ5DwP4odaVOGWo2Yh-M5GFlopIhF35KElpp2hV
+VvhV-5OHPLPHPxRYGHL2ppVFBIJLH7ZoVVB2NL0dA52cgJpdndgm17N1++05lsQV
+Vvh+-j7Z3oIVB6OLE8oo-lP5FKVoYYRBM5IFlpJIhN35MElqJ6Rd-5PPQuYqQb+V
+VvhC3c7llsN3-ny4lpVKJ2vEj8oAPF-dI4YINHHHGHGLGHGxB7B7R775pGVF92pV
+VvhcXGlBA2ogWGn3NIRMQ+eMEU++VIG2jsFBu7HR3BYMq7nojCrV1BXMpBnIcBCV
+Vvh6sAl2bEl6Z2X2IN16AUdMUXXY-QH5TwQPHuHonBMAGEbFmMt7HYoCWHZCXAuV
+Vvh71YoCGJ57W6J7lFKo-xX-lln2UsGzV3KQY7GF17I6q6mjZD0kt2WYH7lIY7pV
+VvhEA+dN+XXY-QH5TsQdhDdCJ6r7F2q7oIdB1Yo8XDZCXEeB1Yp8HMbFmEVC3BUV
+Vvho03Z-lln2UwGzl3ZUY7WMY806sAGdO+Ksx9HcG8VAc3GIcJ+k-Va-CCE1EwRV
+Vvh+-m3YX7XB372Ep7SIsiCoXaYk1Nb0++03F6Qzl9FBoAG70En6nEn30MbsnMrV
+Vvh7WUoCGEd2YgRAhEhCco3oH8X6gLWoG2g6mcZBXW3m-hc0CCE3lERzllhHdDIV
+VvhApYm31Ql3WR5BiksAt8EY-3d-5561+YRzlkmPoMhZauZAt0+44c2st+B0mI1V
+Vvh568DG0qLuOUl7LEVEn6Y73H6A4g6QQcK2lrz54oyYxAoV1N4BWUq4HIOB-gnV
+Vvh516vAIh0CXB7B1YoG1IsBXQqFXNGYc1614k2QQUA0Frz54PhonbM5qoBJJUYV
+Vvh6F9z2KBaOH6JAlIrAFQW3mR6G1PgCHYnYtCEq-Ri0CCE3lEGzl3XKH6IBn2KV
+Vvh7oQqv1UnYd1E6aw6++6J2V9z2KOXEr80Ie6ncm905ZD12g6Xcn8WIc7nEuNUV
+Vvhq0Rk0CCE3lAOzl3XK12Y7oQaCGItB1cYtHczAtB1YZFmMl3GQmKSMxaUo0ZlV
+Vvh05563VAOzV3YIL706a7l2Z82HnYntHco8XEtBGV47oQY6HVHA-9aDN1M3L64V
+VvhF2ME1F9z2K6pAF6Yx0EnEYunSX1E6bA4HuME1F9z2HMVAZAVUVwd2HUFKMOKV
+VvhWKZ8HtK-2V3G6HMko-Zo-XXZ2+kOzlZSAOwdC2Oou1bYBFEZ31ALEhUKREXXV
+VvhY-QI2jwFNKPgC1MrFmR5B02tIq1665M6QQcK2l9z2MJWG1LnYLwr4S6p4zAlV
+Vvhl-9Ewl5GsXp-YAUtRkiCClsP2jwFUc7mFYMpBnQZBnQKBV2b3zBF2p41EH7FV
+VvhbnAHAlcm3GAPwl3H2QFm2R1nQx2d9G4FUA+gS+VlmVMJ2U+F41VIMsFWcq51V
+VvhER2m5GAGoopHpIopol6x2ID-Iv7XcMBoNHV7m0lt05583VAOzl43MYUpwt3zV
+VvhBlbWBFjnAQEGoDAFoi6xHlpD4YEOElh0906h3B1E85c555AG1V9z2FoHMm7nV
+Vvh6LAlN13XEJCYcuCYIIBVAr2YMWBl6s2XMloEm-g+0U+04VIQzVjLJ6FIcZx9V
+Vvh3Igi72kSooHILB0+k2E-1JJM6lsRzVnFwhvor4ql3BcGLN2oq-FRQJHK3ZpFV
+VvhRBEMLH4IoVdR2PHE53kR-95FKVoYYRBM5IFlpJMRN3wRV1rl+j1+FU6AQQcUV
+Vvh4lvy58TJBHoHYvCnYx+rDGBIoYExEnxBF0DKAIpcAP2ssXo1UlgHXxN-DKAjV
+VvhHIEnp1FB73DGBno1YvCnYx2pDJSUk1210lln5FcRzlnC6hfWHMPLwFHK2ZpTV
+Vvh2op0BRDlJB6ZLFsVRB1W4IjW4oYR-692R8MtL7UO-+eefFkL5DsPrCCf5TwOV
+VvhAMseKD4X20PX4fr+m+w31++05lcQzVjRvQF8FA9+m2240ssv5VYQzVjP7B3GV
+VvhLGApoWFBAILG73oVJB6JLF3Zq2q3q2qTHN9O5O5O5G3lolMREK5H7Fp0EREYV
+Vvh5IAlop9O5P5+8+QAQQcU4lry51KpK6QuOG7HJ26GQnBnYmC0Ym8FgVDMPMLOV
+VvhvHHNPIoKk1c60ssv5VYQzVhh5GPLsYpNoH7-CXF1BnJ2BHN3AoN3ESJ5FY34V
+VvhFIAqFHIpF1QoEncmEHoNpi7BRh9FIA+m0EllmW+P5DsPTFp4qS79JoNT74FIV
+VvhLaFIF5BIF5x2EoYoEngnEYkmEXoH3xJxbWHNPIoKk1k80ssv5VYRzVmLoYJ9V
+VvhCHUx+pHEF1oXBB70DIASFBF-DIAjHGEnoXLno1QvCT8mIJ8GIjMN3V2J7mIGV
+VvhscS-o0Ek0++03F+RzVhYcY7mMZwc6nUmwe6SkuDl8W6sAz80Ia7mEdNEo-6lV
+Vvh0++03EoQz-hWcrNGAus-QtJBo0wm0++03F+QzVhJYZ7VUn4WAOAIWLbsAHYwV
+VvhHwDDD1kx9Goh9GUI8FAe2lcHoU2-+F5EA1A6++6J2-ry4pO0IawMAoN0Fn74V
+VvhEnNAwx9GoeM-2U2TA-+xx-C7sbW16NB-Up7GZZ1+9XE6++6J2Vnz4wwh6x5oV
+Vvho-2w6HkGClAu6ncICFIs7HUKBlQq7nMMBFYo8HHJtfCvo0sp0++03F+RzVgWV
+VvhUYhOO6tF+F2pQG30MF3WIbB-YxDS7-8MscKn6NEVYo3nMYCJMB+rBUU++VIEV
+Vvh5TsPV870Qa3WMo7YAbEmUXwx9HBJAVEYAFMXG076AHcVt1cz2eAHYX81Ac7GV
+VvhMb70dJ1+7nQ6++6J2Fry4l5Hoz5G6Q2j5-AP5GwR6R6h6R9moHoT9FsnoCJBV
+Vvh2d1EB1U6++6J2-ry4qKGEb4-IN7-cWsWcWCG7573IJQGS8SMMXN0JW826dOpV
+Vvhsw6GgG8VEc7HINNEo1Qt0++03F+RzVhYcY7mMZ80As6mYlwu6SEuAGclC26cV
+VvhEmMFB0EGBJAzohAmUXFmB471QK3mMY8ZQB-47+U++VIE6TsSXllc6l6Z7-EHV
+Vvh7FIG3VMq33xVBa302p3oEMMFa7a7a82JYHCFEl7FFzEJJFIr3F6K3F6K3-EJV
+Vvh2lMX2VZhwL1+HWMAQQcU4lzy5MDO6VqD7-piAo5Kwn5LAVq12Rd6ZXh7D0cwV
+Vvh4V2v4F6u4FEs4GEs4D7XMMBnENBoANC16OCId8CV2tG-Ac2XQI7GEo7pVI1EV
+Vvh5nw5XXgI1lry52RWMn4H2tTWUw91gg90oR9SIEKWnokbo02y-ssv3+wRzVFWV
+VvhnokUKz5SAR9Fog91gvDC6sSH2e2mQaR+m+kE-5561+YGzl3avGAtk-EF-CCEV
+Vvh1EgO+l35vKUl7LEVEn6Y73HEBFY6++AJ2Vrz55OXErBXMc7SAsB1QpBmMpB4V
+Vvh77BGUq7nQaC0LnUotHYnCGEmAnEmAmImAWBXJB+q4UiCClsO2jsFBrJHIn7GV
+VvhB3AGQWFYUX7oYjgu7k3IEn+EBXorDGUwC1nnV82HMW8-Ao71EZO3EB+q4kllV
+VvhmW+R2jwFNNK0IZ7GIb6mQX8G2c6XZN6GguKndP+IsvDGgxCJcG8G2e2mQX8-V
+VvhIZ7HEcKJEA+x5+U++VIG4jwJololomolZV41Er7nIc2GAr2X6b6m2r34xVJjV
+VvhIKN-Ql6mQWAVQn6FUZBmQoC-3d5H9H5H5H1+H-oCQQcZ6Vnz4tqh6FK2oV78V
+Vvh9FwHGloFB99C6IH-jW3IMRAKFVolN39Gph6LFGoVR45F42MR5lV43Vsa4IkKV
+Vvh4YkK4YgZ8YcZGIV0ZBMUk4US21Xa8WISzFma+EBRO1V8FnZA7Xgx+JD1o-FAV
+VvhDE6no1oF7B+x2GHECFEGDFCFNB2t3YoHUaHFBnNB5ENB2rBYoHUaxB2t3oo1V
+VvhYJ2Io1oV3B+x2HxADF32gx+ZCno0MtH0UsGYcppgPM1EIlwAQQcU4m1y5E4FV
+Vvhpp8nIn4XZ8CnYxBnoFBHoWB1oHAokIEXoJAXkKATGlS846yFa64cxlh-BVkmV
+VvhBFomF-l1AlooAWopAForDHYvCYYu2nIv7LoE4Q+F6EFlm+k25jkR2VrykGqGV
+Vvh4-6Ek-2w-5561+ESz-EG4-9Nv05T2V0k9mABJJUX5WLy5A9W7mliEb94smQgV
+VvhMb8R+R9Xcb94smQeoVo77mliAb94smQgPW7mkg-a7EpJK0AS6TsSFBAb6loWV
+VvhMZ8nMqC1Qb2c2aC-Ybws40XnUL8HUK8XUJ90QK91MJ9F7FIhAX3Wp2MaHI7WV
+VvhARAZ7FoGIq50Mb50Is4WMs5t7nUTUcC-QdC-Mf7lQfBVMh+Z3WoWAM5HFC+EV
+Vvh7kFlm+k31DkQNvvEV06F2E1E6mU4CCIE0Wfx5d4-UM40TmTmTmQrsWTfCC6cV
+VvhCD8T8T8GYO4VcRUX8EMstF+88jsS4VcO4GbmbmbmUssWXfDWQbBz7z7z7mUMV
+Vvh4-UNo06e0++03F+GzVtyAc3GIFEmB0AW6qWjGcMm6X716o2J7FXX7x+D8kllV
+VvhmW+P5DsLrg9+CCnGkC+C9+Flm+k21Dk1PzQF2G76s+ci-5561+E2z+Bjxh+cV
+Vvh9kU++VIE8TsS+F2-+i9GrW9S6hsWrmrW9S6hsWrmrW9S6hsWrW9T6-0k1nc2V
+VvhQQUA--9w2F6M2hsVUG4k3Hg2QQUA--fw2F6M2hsVUHsn5m2V6H1+21oAQQcUV
+Vvh4kny1lr-rUmxsRkEk37+15586-gRzVmbpGQh2f8loVYREL5K3FVM3-Mo3lAKV
+VvhBVQG3WUo2VIsB-2K8HIiFHYp7WYp2FIsBF2K81EG3XN22lMo2WAI43F45S5SV
+Vvh5S9GG0ZgdvUAKkFlm+k58TkSlCq3kfUALEFlm+k58E+Skiq3lC+EM+Flm+k3V
+Vvh1DoQ06W2EV0rra1M1V66++6J-UTv5DAoAoBGIS+C2kU++VI4-zQQ55DCQkU+V
+Vvhu+oI0++03Ec2ylb+q4DkABUG3EU++VIA-zkQwOC02M2XEnVYEAU73UU++VICV
+Vvh+ToMoS+D3kk++Vw6-zIRD28-UM30DB+E4+QQQl68-zjyArG2R5BX401E1G+2V
+VvhQQUA0EHz1r71Eo7ks+xS0++03Ec3ylgA-66F+c-+q+ZT-5561+A2z-n+o-7xV
+Vvh0++03Ek5ylki6oAHEmwZ6WIXs+xy0++03Es2zFgQ-DkYDm+ss+tz0++03Ek2V
+Vvhz-lUPkzkxUP+DA+A++6T50Tz7dwxlBkxoxshsEMS6hnWHOsV3BXW2opi6JHIV
+VvhwLHG7poFZB5Fo0ZQwPGmhOwR-79EJolIZw1+DA2A++6T50Tz7hDnqoqnqnqmV
+VvhrF-WsWrC7BfW2IqC6HHKsVJBHlRB6bLF4IoR5E8Jnlh98pflo2Yh-LH3GLn+V
+VvhDg6A++6T50Pz7R+hkG5O3-q-MRMM25bW9QsYqi6FHMsVBBPW3IpD3ooWRR2NV
+VvhHFoR+dLD4ogfKj5EGGo3RAJ7TA+wkkk++VwQ7TwYcr5HN-olFhALA5fW9QsYV
+Vvhqi6FHMsVBBPW3IpD3ooWRR2NHFoR+dLD4ogfKj5EGGo3RAJ7TA+ul+k++VwQV
+Vvh7jwZYa9Ix2HI7W0JsWrC7BfW2IqC6HHKsVJBHlRB6bLF4IoR5E8Jnlh98pflV
+Vvho2Yh-LH3GLn+DgIA++6T50Xz7vHO3-qC6K5M3-qY-xsWrC7BfW2IqC6HHKsVV
+VvhJBHlRB6bLF4IoR5E8Jnlh98pflo2Yh-LH3GLkA-AlUtlmWIW5DwPbOoV3MHGV
+Vvh2Ych5lB95F2oggsVFA4y6JFVolN45H3YIh9KoVR39G3oMR2MFVoT42MK5WMNV
+VvhH-MOH-MOGmIeGWJ7G28IpW1+FAQ9XXgS4GLy59NlUq70Qe6WIx-2DGAnonAxV
+VvhEWDJ9lHK2HpptxYxQT3BMGDK5nDI3HoVQx+O8lkr9HTJDNHOHNHNDMDHWQ-1V
+Vvhm+fXY-kM7zsaTnq2q1qHqWqV-SqKGYNA7jHE3Yo0LooFJ43lLWFVo2Ih0x-3V
+Vvh9EsYMR-44-FB6S72oFLoo0JA7Yd0qG1+EwY8st+Q40Ty7h5npopnpnpmqF-TV
+VvhqKGYNA7jHE3Yo0LooFJ43lLWFVo2Ih0x-39EsYMR-44-FB6S72oFLoo0JA7YV
+Vvhd0qGk2L80iCE5-UazWKmq-6RMI5I3VoVUEQhZYd4H0Poo-NB+ZxB2JFVQJsYV
+VvhMR-39EjEFGoC745EFVUIHG5WFB2JxB+ZH0N8EhYUo1z90iCE5-UazWJmMhx2V
+VvhHGMUaE44GYNA7jHFNB7TE-+JFVQJsYMRFGqxFGrWFVp44-F+2FsYE-+JxB7IV
+VvhkaGY6-UUk-HA-QQR1kkbzmMTCIYuCmgE8AvQF2n+3Ao3lloD10Tz7cwsG1UsV
+Vvh8V+dnhl2HA+LnUL55EwA7jwZId2VQI3FMH4-+knhl2H+k-HD-QQR1kkazmIGV
+VvhMVx2EGMUDAvQF2n6CB+ACCMU4lny4xLEG2h8GIksxB+rHFBYoILooXLXHGpcV
+VvhHWFB7DFB6pHFFIoHNB-4HEBoksGnZ7BxKQ-FoEk++VwO7TsYYr5FN-oFFh2LV
+VvhA5u7Z3grL-UFGlXl784-B74-BM4-F64D3IQM3YMMwLFFUMF-UMIlUNElXld0V
+Vvh4-h-4D53Xlo2UR2s5G7noGGQ3A-3oUllmW+P8DsaXnqoqnr1rGrF-PTJBHoHV
+VvhYvCnYx+rDGBIoYExEnxBF0DKASRBN-DKAjHIEnp1FB73DGBno1YvCnYx2pDJV
+VvhSg-4okllmW+P8DsaojDOHODODO9Q23lxIpDFCHgvCHo1Qx6pHGF1p1Dop26xV
+VvhMltopY2xMmxBF1DIB2oYIx6rDECHgvCHoHIxJu1+FxEAQQcU4mTy7Q9P2VqFV
+VvhERQK5J4--mTJBHoHYvCnYx+rDGBIoYExEnxBF0DKASRBN-DKAjHIEnp1FB73V
+VvhDGBno1YvCnYx2pDJSg-4pEllmW+P7jsYYr5GN-oVFh6LA5BxIpDFCHgvCHo1V
+VvhQx6pHGF1p1Dop26xMltopY2xMmxBF1DIB2oYIx6rDECHgvCHoHIxJu1+FBMAV
+VvhQQcU4mTy7M7WozF2omMUXLpHIx2tCngtDEBnoXJB72DIAzHIEXpX5bHKEHpXV
+Vvh9op2AxEoHGFHoXQx+tCngtDFBHpLcB-Hq+llmW+P6DsR+N5LIfBHAOCIcvCHV
+VvhorDF2pDG6oDFAnH-F0DFImD-Mlx93scMXt4MUOXr4o2q516p5H7252An5HEmV
+Vvh9HIl5HQxCHguGHcHBHgZTF+Nk0fN1++05lcczWODDOHODPDQ9Q24T3Z2krvKV
+VvhHE4HkOGlgu5E8VoGURAo9KKUk0fO1++05lcczWPGwxZBYxYxYhgEOAKIH1ThV
+VvhNB+ND-d94ncR+e5F8-onEhNOk0nP1++05lcbzWL0qV6RUI5K3Vp-UETQKIH1V
+VvhThNB+ND-d94ncR+e5F8-onEhNO1+8BkA++6T4WTy7M7WojF2oWMUZwKIH1ThV
+VvhNB+ND-d94ncR+e5F8-onEhNOk1rR1++05lsb+0PIwxpBoxoxohwESgaILFG2V
+VvhoVdR+fHE53gR3O5GGFopURF55JJGpYIRV15NIVqY2RhhneHNmRUXrUc++VcJV
+Vvh5DsPnSF+2xV5BoUqG2J7BSF7HoG2J5FYJ6iiJBmEk4XT2QQU9WYSzVlKIPNFV
+VvhEp6WYp6WAd2GUd2G6uBncm90Qg6HkaD05WDE3Xo-3BNB3RJR3RJR0R4Oj9X9V
+Vvhm9mubFbELJLFLJLFHKHGDLHWoHIR3To0Mh+VCmQv6W2O402O2m6a8G6a7-JuV
+Vvh3LL+CtUA++6T5WM+7O7WpjF2pWMUgQaILFG2oVdR+fHE53gR3O5GGFopURF5V
+Vvh5JJGpYIRV15NIVqY2RhhneHNmQ+os+U++VIG5TsQDnoYoXonp0p--5SWIrFHV
+VvhN4BWQx9nhsEnMqBHQp81HWC1AF7oAG7F6l34Em1+BC26++6J2Vry58wx3B2xV
+Vvh2x2hAEG5cZBoIqFXMbDGwvS2AqBXIrBGUosXUn2GR12WIGAFFYAUk1LW0++0V
+Vvh3F6PzVdmoV6R+I4lMN4--1SWIrFHN4BWQx9nhsEnMqBHQp81HWC1AF7oAG7FV
+Vvh6l34Em1+AyA6++6J2Vfy4IBlNY3VFa3n-2SWIrFHN4BWQx9nhsEnMqBHQp81V
+VvhHWC1AF7oAG7F6l34Em1+ASE6++6J2Vny4n7WToF57W-bSWIrFHN4BWQx9nhsV
+VvhEnMqBHQp81HWC1AF7oAG7F6l34Emo1HZ0++03F6SzVpIoI4y6K4lERE4Vu7HV
+VvhR3BYMq7n+FwvS2AqBXIrBGUosXUn2GR12WIGAFFYAh+qtUiCClsO2jsFBrJHV
+VvhIn7GB3AGQWFYUX7oYjgu7k3IEn+EBXorDGUwC1nnV82HMW8-Ao71EZO3EA+aV
+VvhtkQQQl6C4jsFJb70IYEmJ0BWAftHkgCF6d2mQJ70RRcvH2h9CXK2o0fc-llnV
+Vvh2UwRzlkjD2kxA-+U2--9K0Ea7WEc6XUl8Zc-PXohCV6e2mUJ7GVIo0Xd-llnV
+Vvh2UwRzlmTCogvCmoEH3UY7WMY806sAGdO+Ksx9HcG8VAc3GIcJB+fuUQQQl6DV
+Vvh4zwOMg2VcI4-MK4--5K0Ea7WEc6XUl8Zc-PXohCV6e2mUJ7GVI1E8Cg555AGV
+Vvh1lnz4m7WHoF27W-ZK0Ea7WEc6XUl8Zc-PXohCV6e2mUJ7GVIe-Dg-5561+cRV
+Vvh+-nnR5C1Yd5GNyh1GP+IvEFlm+k75TwQPnJ3BHIb5RNiknCEg-Pi-5561+cPV
+Vvh+-d0QG3FEH3V2M5RNyknGQ+JvkFlm+kA5+2P2a6TF22a61tdvGBd2A+sw+U+V
+Vvh+VIG5jwRcMIlZl4-FM3nQK2Wo-AhEhEhAxDmVX7HEl70V18Y2uEGliL12g6XV
+Vvhcn8WIc7nEuNUo01l0CCE3lEOzlZXQMN-UIO-QkK4BNAVErAFMbFnPgC1CGb+V
+Vvh9D66++6J2Vrz52wx7B6xAxEhEEGKcoBmUZ8WAuAWkVtHkl906uAmcZ80QoCaV
+VvhMA+gwkU++VIG5TwQjnoIoHoHoGol-8OXEr80Ie6ncm905ZD12g6Xcn8WIc7nV
+VvhEuNUo0ro0++03F6Pzle0+F2VoI4lMN4--IOXEr80Ie6ncm905ZD12g6Xcn8WV
+VvhIc7nEuNUo0jp0++03F6OzlZHQKN-MINVQkJKcoBmUZ8WAuAWkVtHkl906uAmV
+VvhcZ80QoCaMB+dxUU++VIG5DwPEa7zF2Qa65VeB1Qc7GcXCX6g6SIwAGkWCXAeV
+Vvh7GUbB1dak1rs0++03F6OzlLH5H5H9H4K2MB1QbBGUF6nQGAWQX6HQIPq3KxFV
+VvhNY3n2X7m6m3nAV40Ir7nEs2KYRAhARARAA+UyEXXY-QI5TwQLnp2p1pHpWpVV
+Vvh-ANKPgC1MrFmR5B02tIqk01u0CCE3lERzlnDDHHHDHDH9J22pZNiksBXR57oV
+VvhQo6HZHP+6jg6st+L3-jz4d9I2VoVER+K4lUEG4Jav1UqBoQbFnEVCJBUo-vwV
+Vvh0CCE3lEQzlhGMdx2GGMUTqJav1UqBoQbFnEVCJBUk1Tx05583VAZzlmzDGHGV
+VvhDGDG9I22a3MYUpwt3zBlbWBFjnAQEGoDAFoi6xHlpD4YEOElh0906h3B+A+jV
+VvhzUXXY-QI7U+Q3hHdDIApYl70V57nYaCHIu7SIuB1cZCHIt7YQbAFIcAZfZDHV
+VvhLDiEo1Lz0++13F6RzllqcoBnMq80LXC1ErBHQaBHFWGHIcBWQr7XUZwsBCItV
+VvhAnYYAXAoAXAZAX6XMpH+B9U6QQcK2mHz4o7WXoF67W-eVK76BTCFTnQNsXIPV
+Vvhwn522h1n2R9WDIwRHld24YAPEWkW9FHEo-bL-lln2UUGz-7lMK7T7GIZBDBXV
+VvhMb7mQL7lURUOxkQQQl672jkG4FYM80Uc7nTnIq7WMa7lQL4+k0690JJM4-cRV
+Vvh+-mKFNBG2X7mNHFHN2F1R37SIsCBaCoXUtV7EA+R1+XXY-QJ5E+QZh+p8WQdV
+VvhBYQrFnUct1oRJyoXUoV6k-YB0CCE3lIR+-mNcpCGN6BYTaC1DJTh6sB78P+bV
+Vvh1UpJK0AV5E+QdZP-BV6p8XR58HRKFnV5FnYs8CEtD0obv1CHUoYt8P+Y1kpJV
+VvhK0AV5E+QdZaXMVBHYqJYUrJYQsG1TZCHUnobv1CHUoYt8S+Q6UU++VIB1DwQV
+VvhM4S5jXvEo602-0+W+V+F+F+F+E160Go3JJMC0k6+0RbU53k6++6J1Enu5+U6V
+VvhU6U6U6E2E2602-0khwTS5a-Um+Zv0++03FE-++jLi+Zw2++18WY-++jRw+tdV
+VvhN4JiR4ZaOKJm63FBIj+JMqxYOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoNa3XV
+VvANK7tR4Lo+Cc++DLqV
+Vv+V
+Vvend
+Vvbytecount 8832
+Vvcrc32 7a9c6c85
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.329pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.329pk_vve
new file mode 100644
index 0000000000..890942d164
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.329pk_vve
@@ -0,0 +1,238 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.329pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB12m+8+++2otni2+-6kQ++GA5A+oEEk++W6T6DwToV+EsXriV
+Vvh7RnW2Yqi6IHMsVNBPW42pD4Yox9GsVlB1W5FGlooYx76LEN8XE16Bo69JJUUV
+Vvh4Vzy5hOpYuGYV8Joh5t2hKGoR8Jod6GIbGh7GId6GoR9JYl4t2lJH2N9JYh5V
+VvhGZNNFBRUk2310ssv6FcVzFz4QNBWEbCV6qD-2pDFF1onBBEXDJ6YpGwJpV3BV
+VvhRiXNHNxRMGHK2npVBBEJDI3XoVUx+OClo1MxFc16B2EACCMX5Fzy5hPFKIl8V
+VvhGokuHECIo2XooIRB3KxB74u2oZsZHGFjHFFoo2VB+tH1d9CZZ5pem1V30iCEV
+Vvh5lgTzVvPRPGDHE82oFVB2bsYoVR53lTWFloYMh9B749GsoQR9WHI5WJBAKxBV
+Vvh6aHF7ZhGr0168YM8QQcS4Fzy5hhJh4xB+aHF3YoGspHG5XJ55EFWoAo2Mh1XV
+VvhFloCRBRh9Gf+G2QAXXgY5W5x5wRll470gu2XYx+FC1oYRBAqxBIZHK7IplFRV
+VvhQIHM2yNRlQpRFIHJF3p2Lop2PoooRB76DGGHo-2vCVAgFWIR7v1M42UA++6WV
+Vvh5Fzy5hDIKpbfGoc-Kip9GJhIox161oY3lloE1Vzz5h34bhp7NB5+52c6CCILV
+Vvh2W1y5YoNLFvLFVR2sZJ2FXMLFVQs71hNm2x915586lsTzVvFOYP3VB2eHF4oV
+Vvho-lA5EGloIcR775HG-p2QRJ45KFGpYFBJ1LJEV7BF02ooo2IHHJYoYRB76HFV
+Vvhx7HEx8H2h9xAGYlMOqDFHAUSH+c++VkL5zsSogPJvIHKsoo-JA9pH-N97YcpV
+VvhK35N2AV3HEuefGcZ5zsSbJd3pKZBJOsV2xAFGj2XoF78sVAw2ofW31cIGi6JV
+VvhC-J8sVMq3YfW3nELGj416MGi6NGIYt8YVM8KGp7R2AV4HUk++W6R5zsSaPJPV
+VvhK3ktwFH-cGGlflB84j32YO3IUOwKFlflR44VV34j4IEOwOElcPEVfll-4j5EV
+VvhKVoIfloXYx6cLF7PkJ1+CowAQQcX505x5vPKF2oXUwGYZAG1oHRB33xBB1LHV
+VvhIjHJESVRJFHJEjLHIzHHFIoIQx2sH2Z8H1Ux72HKOwUYI+fXY-wN5zsSpeK2V
+VvhZ8C2d5GoPZGpJ9FYd5GXV6GR4ylBRh9FgA-IIEllmWAQ8ToThhN2HGC1l8GIV
+Vvhl6DFBooILoooDpop7BJ-u3pJwIpI7RBHHHF2N4FIEI32Qn3GAsEVIWGI2JT2V
+VvhJR72FliL5IBlp2IhIoDJfJbLXMPOEwV3IUj55W2S6DsSpBFLHGG2oIZB1odAV
+VvhsodPx8H2ZB-6HFFoogpIMxF5DHFooYUx9WG2oS76LEG3QJG4MJGJMIOIIFoKV
+VvhElqpAA+sIkXXY-YG6ToTJZ3GIW7-Z18X9mkVD05WDE2THGHFT8asiOo4oIojV
+VvhHGHXoJo02gAHgWGGAWBGEKNEk0-I0ssv6FkTzVsRoYR5EWZ76j4YcF8YcyCoV
+VvhgSpQHOPHpJ1673IA++6W5G1y5h39FfK2o1bhRB2Pwx+R+w5ECloXYREr9JBFV
+VvhqKj6CZMA++6W5m1z5geHPGJYp0VRAdxBAPsYoFoDH-oJgR9ocRBM9Ix65KsYV
+VvhMRXoERZG9Ox05QsZri6k2-oUm3dL25589mkUzlv3ldBfOpNB-B+rHEHF42o3V
+Vvho-bWH3kPsYcGGVlM32Uh1oUIG-oJMKFlojFVN45HFFV35Ix242ERJ183ARPWV
+VvhEVd05MsZlRZB3BfnoHqmomr-olo+k2tM1++06VwTzlsQKqSKdPDEH-oYcRBMV
+Vvh9IG-pYMRRJ5MF-qJ6Rh05QxRtBxBphkFHP2ZqGBRUJHL3ZpGRBINHH4ZoGhBV
+Vvh2R-A5FKXoIVgN9X+m1dN1++06W+Tzlv8cqoZRRAeHH4poVlR+R3B+R3P5HGWV
+VvhopYRJL5LFlppIRZ35NIlqp2hl-5RLTuYrZqh4Q+xKUb55VkK5zoS5L7OIXl1V
+Vvh92ER-1wgF-l34pIPHIxBHop2p3p2pDHIx93IkIL-FA6oo0BB+HxB+WHEAJdVV
+Vvhq-1E9K26++6L3-Hy2nWmMdFWV4C0Uk2y6xSYAsFHQrBYQpsYUoJoEFFYEGB0V
+Vvh6m3JJ01+9K66st+N3G1z5oDFTJuHpHBOAGEsFnR6BXYqwuBSIuHoCXItBYUqV
+Vvh6FQr6WEd3JPE5qA555AI2-Hy2qRnIZBIAqEnQXwwtIrn+Ewu2nUJBGVYk0dYV
+Vvh0CCE4FIUzVzFDFTJuHdHCGEVBnR4wtBTCXHZGXLncqCHMsFnR6B02uIrk0BZV
+Vvh-lln3-2IzlBaYoBXMowsAXYmCbyhjWoTDGClAf30YKBGZY1+44M2st+C20++V
+Vvh5tKWAc6oMnFHIatXX7vICPH+BqQ6++6L3-zz3BArIm6YAoEXBHEWBnPYFoMrV
+VvhC1ItEnYWKz5KwhLEXFTFEfEWoJsxAV9F6mkZC1a4k-tc0CCE4FMUzlx1obpiV
+VvhYxMnKn6I8X2K8TFnXh+sB98Ek-Bd-5561+cT+-snPWJX+rB4ThAncA+POUHXV
+VvhY+sA8+6SUssZUkFHJsHhSH2aRG326mEZNB+rOkVlmVUJ6DwTEk25+IuH+IBMV
+VvhIrFnQdBlcq4nIQB-on9H6xAJl0D1EvB2cpCXMtBYUrC1R5Bp8Wb+1ak2QQUAV
+Vvh0m++5oB5XhwogB+UPEpJK0MX3DwHEoJpRm70EY8X2KAVMtx6G1XhCHYoge8UV
+Vvho-Vi0CCE4FMIzlB1BLQVEeAFMdx5CCosB98Eo0-j0++03lEIzlBqkoC1UpwuV
+VvhAzD15ZH2wHknwuBHUsB1lb1+9L+6st+N3Frz2oApNl71V5BoUqCHMtFHcptHV
+Vvhd2CXItFHYqFoN5Bn2Y8HBOtnoPf+9r26QQUM3Fry2qJFYY6WQr2GN5FXYpGHV
+VvhIuBCJ8BHcpGHMtBXV5BV2sB-6uInpSQx4x+JQUN2FV6D3DwHEmEb2H7TEoF2V
+Vvh7SoshB+XQkNDdV6B3DsHBW2mIm405W8F2vGMOKWX2NHuHtJm2V3G6HJ+o-doV
+Vvh-XXZ2UoQzlhi6PwewsJhuYCiEp3GEL6lV01E45I6st+N3VHz2oC1FoSCosC1V
+VvhR77ocY6HhHT66rM6QQcM3FHz2tJnG2Iu7y6t4TBljWBFoDAloI2h9n2RHWDKV
+Vvh4gV3RkiCCm2S3DwHYcFmFoUpC0YaC1YLwrC-UrFlYpJVcp2WMOBF6p4nAI7-V
+Vvhkn31AQEVEm9EAFMW5FAFMl5GFYozC1p0UhIO4Q+mS+VlmVUL3++H4IVIR7BnV
+Vvhcr91MR2o5HAVp12hJBQxRBJRIGDH31oFIx+aD-Uu82R6F6KUm0xt05584-IRV
+VvhzlCJQoV3CWTWCFbnQPsXIR1nAR3-9Gwl5IsXpj5KsVjoEQEloGARBB9+8rc5V
+Vvh55AI2-Hz2moGBnANAlUn41ELF-QwD2kwD2kr31UHG-As6XYGCG6sAR6Em-k+V
+Vvh0U+05-QTzVvNJNFYgaxA3YkiBIo-vJJBJh1GU9-E+EpJK0MV6DsTl-ozDFxQV
+VvhwFLC2YnFBQkIH93JmVNAYLL642llZQMOH34pl-k2klkJkVkYkFkpk-l2gQJOV
+Vvh54GFlpUQV557JVmYIQhI5AEzolpEk2M015586lkVzFyqpYFB6sD2d7H2Ux2rV
+VvhHFFTHHEzLHIYpI3RKjEM38sYd8x-UIfJLlHJEZopDoooJB35DFC2l7GYksDGV
+VvhF2pagA+m+kgQQm+R6DwToFriAxnWLOsV7BXW32pi6KHIsVVB9W4Yo-hQwQGlV
+Vvho3floIYh3LHEJ7TEW-c20eeh5VYTzVvHstsE5z4K4C8MXlZV-FslbhDM3+IAV
+Vvh++6W5Fzy5U5oKpbU52h7KpHHoAV7-UiCCm2O5zoSr0HGIZonBRAYHI33omFRV
+Vvh6ZHH3JoVNB6LHNLNHNLNLNHNDP9P5P5P5G4-olQREK5I7FpGERMJ5J7-pHARV
+VvhFGqlr-1+6UQAQQcX501x5nL3K6Uzde2pF2JLEYQzYmCFsfPOvJHOPIoqk2+6V
+Vvh0ssv6FcTzFtRDGPMsopsoY3-GYB1FoF2FIJ3EpJ3IYN4ESFKFZ34FY7JFJB3V
+VvhFIJ2F2R1Eod-EIocpyBBVh9HIA+o0EllmWAQ5zoSPHp4qi7AJoRT74FYLcFIV
+VvhJ5BIIsF2F7B2EuEoB9AoAx+mEXogpMqSBBdhHHP+FUc9XXgV501y5uXJBXoHV
+VvhcvD1ZAFooIJR3IHHEyNRBHHHF3oJLooIQx2sH2YwCmkgCXo0cb3Wca7lcL2FV
+VvhMc7V6L4-QGa7DsW0o0Mk0++03l6TzVpacoBnMq80IsAyAuASl8HW2uAYV1C1V
+VvhIc7XMrB1da1+2X26++6L1lvw5L91dKEXnhcvJR9+C166++6L2Vvy5KOWIr41V
+VvhIOAlh-5237fWZ04Zo3zEHEHFDFDFDFDG9G9G9G9G8VEf2mkH5-DG9H5I2A+pV
+VvhAkU++VQG5zsRNe7HQMBFZ1Fp9oV1Bpo3oDHFDFDFCqooonoYojHFIVei87Z0V
+Vvh4o6OF-YqB2dak0oo0++03lESzlrEwhHnoooj2HoF6x1lAw31jlIu3XblQs41V
+VvhTlYq4XIeBRTakx0lk1+p0++03l6TzVomYZlfScWiIREHKF2YBmQq4HINHGwxV
+Vvh9WEHeDdvAVkm4nEO7VUr71hLk1cq0++03l6TzVqJgZ41QKBnIbF1R1CGEx3BV
+Vvh5noIBKEVEoEFQXK19pYlt2dD2uEHcnCHAsBGUq7XUYCpMA+cBkU++VQG5zoRV
+Vvh2RHIwRAVo-9lo-AQ5HwRARDloz5Hwh6x6h9XDFtYoWfECnU6++6L2Vzy5KOWV
+VvhMb4GIe7-kWsWkWCm7773QYNGNm4Mlua0Ba3aEcIWgm5JpS6--+2-6g6lkJ4VV
+VvhQa8aMA+tCEU++VQG5zsRNeB0Uq7XUZC1AtAnclx8ASF8HlCJ6sImQFF1EGFZV
+VvhBC9FDFB0YnG0F5B1Ua40UJCaUA-77+U++VQE7ToVXlld6V6a3-EI3FIG7FIGV
+Vvh3VMq33xVBa302p3oEMElZta8WOSF772nblFy7-Ir3HQJ2VMI6VMI3-IH3WAFV
+Vvh8JoS6L1+KWMAQQcX5W9y67HQ3-qWERYa5LsnMRTnIRXnERcX5PAFaaH3Yx2vV
+VvhDF51o-lQ4l6v4lB84WEt4WJ54XMr4XQp4YR24YUn4oYl52d82Xd82Yct31UWV
+VvhBWIp7HEcOJLE6Xw5XXgJ1W1x5oNWInwMAHSDN-7ocuCXgfwg50nZ23EusZcqV
+Vvho0Ay-ssv3EsUzFNHfWKX-ItFnmkQ8ncuGXd56TFcRs2XQXBFRY1+1V+2QQUAV
+Vvh0VE+2oB4ThAncA+K2EHXY+sA5E6HYpS2vLYl7bIVF0AY7KHEBlY6++AL301zV
+Vvh5sPGAv7HYbByErFXQrBXUpBLAvBHYr81QrwsBXV3CHLaCIEtBH6nFH6nBX6mV
+VvhArBJk1gO0ssv6FoIzVAsVL7XEnB2QW7mB5K1AdG1oIYy9ECXXMFIDHFXoXUxV
+Vvh36DEGIl7GpZO2HUW8FB2BGIaS4H+DVgAQQcX6-Hz2rOJco7XAqC0Ab7GYl81V
+VvhAu6GUmCpYlD1dzkuTBTWkx2wDFGZoHcV8lAdAHcHC0Ad3XEb7GZdNA--5+U+V
+Vvh+VQG5DsLoloz5H4K6LB1QbBGUF70QV6nQGAWQI6HQIPq3KxFNY3n2Y3m6X40V
+Vvh6l7nAV40Ir7nEr2aYRDlolokk3wR1b588GMTzluxjJ2JZBIGGmpD2okRAIH0V
+Vvhoj32o-oT3Io-oFJBvlN55J7YQRILFlpFR49IqBEMFWp-V55H4IQRDlZ53lQOV
+VvhHG3ldB2LwPHF3lhB+a52o0MfH0JOGY8YqG1+NlsECCMi805w5vM-73puC2h6V
+VvhGIo0Togx2KH1oGFQDG32o1oVBR+x6HLECVEHHFCVRR2u3poHYbLFC1RR5FRRV
+Vvh2sBpoHYbsZoHcMsZo1p-7B+xAHL1olFADH3TGnoWN7HF8HVAGYLMo4qUk42TV
+Vvh15586lkXzG1P5FNWgqAlge6FcwCHoHUh35DF2HIx2HB1o0AnHE327A3I6x+KV
+VvhAIkLXv46cNWGa74cy-i552wHMR+mF-o2An9EB1AR2pAFoHRB2cDFCHku2GcfV
+Vvh2nMv7aoFqv+H6EFlm+o36TkU2lpyYHDY5EAQAH4k2nk2QQUB-G5w3VAQAHoCV
+VvhEHuH5L2lg0wX1JJM7VwdzFz0smUgPY80liEc9480bF5Hsu80liAc8hAR4GUgV
+VvhPY80liEc94sWUg9+RGIBJJUa5mLx6IHJ7WAREZ7GoGIq8nMb2GQV7WUGQWPnV
+VvhUO7nUN8DC-UdC-Qf8-Mg7lQgBVMh2Z3WomAL9IFmrmUxIa6lomMZ5G7WMR+aV
+Vvh7lkb7lkaC-cbC-yGUs40Ys5r8XUK90QK9E7lMh2a3GoWIJ9I6lQRMo1U2mQ2V
+VvhQQUB-Uvw5rDjzrEEEEUV-02+o0Mc-XXZ2UgizG4VYN4FYN8D8D8C6cCC6cunV
+VvhbW8HbW8j8j8WcP4lgP5M7WY4CCIG0mvx6FgP4lgO8j8j8i6dCS6dunsc81XWV
+Vvh8D8D80YN4FYN4h+U8UU++VQE3DoVTY7mIZMmB0AW6qWjGcMm6X716qIZ9YQbV
+Vvho-2f15586lkUzFfS+E9ECi+Eoh1U2mk2QQUB-Uvw-5DjzrEEEEUV-02+k+kiV
+Vvh-5561EI3z+EH5G2lo0cj0++03l+hzG2-2T+E9WohsWrW9S6hsWrW9S6hsWrWV
+Vvh9S6hsWrW9S6hsW+Ec-+u-5561EIIz-AH4o2xYlh-AO+LCkFlm+o35TkH2lh-V
+VvhDNAI4VHWES6lDlAHk-+x15586lkAzF+RoRwBDT5R2A-HE+llmWAQ6DoThhMqV
+VvhDG5-kh2dwRIL42UJ3mEb3-Ma3lAK8-QGwJCHEF3Wcp9ZIuBGMeBFwFItBF2KV
+Vvh82EH3WMFB-AL706X3FV3Fz5T9JBloXcsLGa+i+lP-5561EQhz052vQL0i+lRV
+Vvh-5561EQhzm50vQL2s-BU-5561EMCzFw6EUV-0000vzxwsBUD2UU++VQ60DgTV
+VvhwpFXMq7mQh+E2kU++VQ60DQTLnF1B1IZ7GPM1lE6++6L0ULu50MV70BZFmHMV
+Vvh2lI6++6L1+Xv5y6O2FUG7WAY76N2m+YK0++03l+-zFfHs-2L1++06UY6x0+yV
+Vvh68+k4+k3-5nE2FU555AI0kbvzYC2Z7sXQmUVcB+C6+Flm+o8-TwFUaBGIq8+V
+Vvhs--S0++03kc4yVsA-sAlVg1U2C+ALkFlm+o4-ToSASzSAB+ITEU++VQA0DcTV
+Vvh5WBH2a6HIlwa6VQHs+xy0++03ks2z-oQ-DlaDm+ss-3z0++03ks3z-skAS5jV
+VvhVxsSA10kDw+A++6W5mjz8dwx-B2x2x2h6h6ULVoS6wzWLBsV7AjW32mS6KH5V
+VvhsVVALldAH1ky6Q-A5W50Gll2YwB6L-N8X-1+Dw2A++6W5mjz8hLnrYrHrXrmV
+Vvhrmrm-j2-1WDSsZrC6GHOsVFBXW3Ypi6MHIwOHHoh9W52oC6R395HGHoYVR-YV
+VvheB1+EQ6A++6W5mfz8R2hxBoW9P70qGMhUM26YE2C6xvWLQsV7BfW32qC6KHKV
+VvhsVVBHldBDGoi6QHEsVoIgRB7DGG3o4GcoA+ykkk++W6T8Dwbgr5KMmpWBhMLV
+VvhA6cE2C6xvWLQsV7BfW32qC6KHKsVVBHldBDGoi6QHEsVoIgRB7DGG3o4Gco+V
+Vvhk2121++06VwdzmWWMhR2HJJ3pIFBQa66YE2C6xvWLQsV7BfW32qC6KHKsVVBV
+VvhHldBDGoi6QHEsVoIgRB7DGG3o4GcoA+zlEk++W6T9DwflRkJ5OslQRcJ5QI6V
+VvhkE2C6xvWLQsV7BfW32qC6KHKsVVBHldBDGoi6QHEsVoIgRB7DGG3o4GcoA-TV
+VvhlUtlmWYa5zwSjPpF3NHJ2YghHlBA5H32kh9lFB+R5lJB+R2JHSwKFlpGN55JV
+Vvh3oQRILFWpBXI42MhEMFlolZ55HwNFlQL4YoVQOHF3z4ooFQPHE7VlB+a8okZV
+VvhKYd0dBYUk2r50ssv6FcezFz4QNBWEbCV6qD-2pDFF1onBBEXDJ6YpGwJpV3BV
+VvhRiXNHNxRMGHK2npVBBEJDI3XoVUx+OClo1MxFhQxdBhBjWDNDIXI5I1+FAU8V
+Vvhst+T4mjy8bwxhBkxkxkhohoUOxhph6xB+cHF42oGTWHG3oQL3y755GFWogoYV
+VvhMh9XFloi7BES7IolPooWNB2aKp9Q6A-2mEfXY-wP8zseozDOHNDODP9P9P64V
+VvhrPRPGDHE82oFVB2bsYoVR53lTWFloYMh9B749GsoQR9WHI5WJBAKxB6aHF7ZV
+VvhhGr0k2P80iCE5lgezWb0qoqG6hQY9J7Wp-UEUxhph6xB+cHF42oGTWHG3oQLV
+Vvh3y755GFWogoYMh9XFloi7BES7IolPooWNB2aKp9Q6A-3mkfXY-wP8TscUa9HV
+VvhF2oJFR32HH7W01qrKoXoo0VB2MHF7y7B6LFlQLsYQR749GnGFWoiB55GsYp-V
+VvhsZHH3jHG7YoGNPIhkgUNn+L55F+C8zwewvH1kw9E9E615FFdvRGKHF1+4Ao3V
+VvhlloE1Wjz8dwuGHcv8mgUAx34bhp7NB5+4ws3lloE1Wfz8J8oYW7mEZ7WEM21V
+VvhnFFdvRGKHF1+4ww3lloE1mY+807WF2EZFGF2Ea629FJevRGaLF16Ch+ACCMXV
+Vvh5Fzy5hPFKIl8GokuHECIo2XooIRB3KxB74sooZ5GVSBIoZsZHGFjHFFoo2VBV
+Vvh+tH1d9CZZ5pek35F1++06VoczWSXQRFX9I6qp-QkXtapKpVQCT2IkO2YgOwHV
+VvhGVflF74VJ64j3YQOwLFVcMFFflZ24j4YAO4o6OwQEFflo3cR38wR6tDG83oGV
+VvhKw3Ek2TG15586lkgzGeDDQHRDRDR9S9S63thN2HGC1l8GIl6DFBooILoooBRV
+VvhBGxBJ-u3pJ3BJ0xRBHxBB3HFFnoHVAGIdAC1oYFBNf1+FxAAQQcX50nx8hHnV
+VvhqoqXqnr0r0r0-UPKF2oXUwGYZAG1oHRB33xBB1LHIjHJESVRJFHJEjLHIzHHV
+VvhFIoIQx2sH2Z8H1Ux72HKOw-7p+llmWAQ8zodo0r2qW6hUY9K7WpFUERqpYFBV
+Vvh6sD2d7H2Ux2rHFFTHHEpop9opI5cLJIIpI9popDoooJB35DFC2l7GYksDGF2V
+Vvhpaj+FhIAQQcX50bx7uBloqAhAXPH3n-sPKF2oXUwGYZAG1oHRB33xBB1LHIjV
+VvhHJESVRJFHJEjLHIzHHFIoIQx2sH2Z8H1Ux72HKOkk2XK15586lkezGWGMhF2V
+VvhHGJ3oYFBEa65RhN2HGC1l8GIl6DFBooILoooBRBGxBJ-u3pJ3BJ0xRBHxBB3V
+VvhHFFnoHVAGIdAC1oYFBNfk45M15586lkXzG1P5FNWgqAlge6FcwCHoHUh35DFV
+Vvh2HIx2HB1o0AnHE327A3I6x+KAIkLXv46cNWGa74cy-i552wHMR+mF-o2An9EV
+VvhB1AR2pAFoHRB2cDFCHku2Gcf2nMv7aoFqw+kqEk++W6R9DseXnrIrXrXrWrmV
+Vvhrm-ooIh4hMHECSpooFjno-o1kR+v5GCFp1QhIp5NOw+lqUk++W6R9DsepDDQV
+VvhHPDQDR9R9R65PFGoOpVB+tvLHF4zDE5ED-o1gR6t5IBmpHIRZf1+AxgA++6WV
+Vvh5Gjy8R+hpBgW9N70pmMhMM26vFGoOpVB+tvLHF4zDE5ED-o1gR6t5IBmpHIRV
+VvhZf1+AhkA++6W5Gfy877WpIFBBILHF2pGMUXh39FfK2o1bhRB2Pwx+R+w5EClV
+VvhoXYREr9JBFqKg9-6rEk++W6U8zweljDEHDDEDF9F9F65L+eXP1Jpl0dAEPL1V
+Vvh5+L-50H-50Kll2cgFN54Jlm2QQVJ58FFmZAQlF9BEFnZoCdAxQj0YAUcrUc+V
+Vvh+VkK5zsSoQPIsopPh3GIN6FoR5JYV4tIVTJ5JYNLFJX8tIp4nFX+OBwFlm+nV
+Vvh8m5x5pNFo4IJ7G6g7G6Y4IgNEmcu8X9mkd902w81kVsXo-Ux+FxBVB7BVB3xV
+VvhJwfGePoPWx4tfGfEPKPFHMHGxBVB6xZCDFBloJo0Uh+V91UgAHgdCm778YYXV
+Vvh6XIf6XIY3akKNQ-6a+k++W6U8Twcca9MF2pZFRN2HM7W0TmeBh7LLH8YolhRV
+Vvh6QLE5FHE5FKloochBN5JJlpoQRRJ5NFFqJARhF9QEFrJrydBtRfFYA+ss+U+V
+Vvh+VQI6DsTDnp2pHpHpGpWpW-DWmMdFWV4C0UxHWDESYAsFHQrBYQpsYUoJoEFV
+VvhFYEGB06m3JJ0k1XV0++03lEUzVzDDHHGDHDI9I9I63497WZ482Ms81pC6x-uV
+VvhEnV3BnQqFnLWG1FLF-34F-6o6X6JJI9+CS66++6L3-vy5M9IHG6Wo0Ef7WcMV
+Vvh22m97WZ482Ms81pC6x-uEnV3BnQqFnLWG1FLF-34F-6o6X6JJI9EBiA6++6LV
+Vvh3-ny4pBlVX80Bc3n-QWmMdFWV4C0Uk2y6xSYAsFHQrBYQpsYUoJoEFFYEGB0V
+Vvh6m3JJ01ECCE6++6L3-ry527WZ2FpFLF2Ya63i97WZ482Ms81+HsXpuEnV3BnV
+VvhQqFnLWG1FLF-34F-6o6X6JJI6A+stEU++VQI6TsUNR2J5CAL5-IR3EMsga8IV
+VvhMcFXUcDIsXo5d1C2IrBnN5BS76B3R22IN22XEWAVJJEUk1ja0ssv6FoIzVAsV
+VvhVL7XEnB2QW7mB5K1AdG1oIYy9ECXXMFIDHFXoXUx36DEGIl7GpZO2HUW8FB2V
+VvhBGIaS4H+8iQ555AI2-vy2qRnIZBIAqEnQXwwtIoDDFwu2nUJBGVhox-B3B5WV
+VvhD1S55E1+9iU555AI2G1z5mwx3B6x6x6hAhAUF4YoBXMowsAXYmCbyhjWoTDGV
+VvhClAf30YKBGZYk0vd-lln3-2UzlyzDEH1o1oGoGoG-4OHEqBXHnUmCH6uTuqyV
+Vvh9Fwx6v2mgI8FMp8KEA+iuUQQQlEF5jwRQh3A6WcY80Mb4---OHEqBXHnUmCHV
+Vvh6uTuqy9Fwx6v2mgI8FMp8KH+9ig555AI2Frz517WN2F3FIF2Ma623dB1MqBDV
+VvhC16tAXdzfPsh5noXgH8lEd3XIdN+e-Lg-5561EcU+-znR6C1Ud8GonFbupAuV
+Vvhc-Ph-5561EkU+-yTC2QsCGYd9TBabfIpce+NvUFlm+o95U+RIcFW6Y706a6FV
+VvhURIpOChHGV1+4Sw2QQUB1Vo-507WB2EJFFF2Aa616sOyonSXk1Xk0++03lEVV
+Vvhzm0ld34M2OeVJM43ML2Yo-AxIxIxIhIxIdMnMoAHEsIzCZwHmCL2wHknwuBHV
+VvhUsB1lb1E6T26st+N3Vnz4rBldX8WBe3n-ZApRm30cl3WboQsvHUogd1+8z66V
+Vvh++6L301z5owxFBIxIxIhMhMUIakoC1UpwuAzD15ZH2wHknwuBHUsB1lbk0nnV
+Vvh0++03lEUzlzEwxBB6xAxEhEhEUJ4koC1UpwuAzD15ZH2wHknwuBHUsB1lb1+V
+Vvh9DE6++6L3-vz5N9IHG6Wo0Ef7WcM22xgB1UsBTCXDnkltIlD2wAzCXIsC1EwV
+VvhNx+dxEU++VQI5DwPMr44Ac6qULA3xgB1UsBTCXDnkltIlD2wAzCXIsC1EwNkV
+Vvho0jq0++03lERzllGMdF2RIJoF77W-SP1EsC1LncnwwASJAHlD1DncpC1UoD4V
+VvhQA--y+U++VQG5DsLoloz5H4K6LB1QbBGUF70QV6nQGAWQI6HQIPq3KxFNY3nV
+Vvh2Y3m6X406l7nAV40Ir7nEr2aYRDlolokk0Ht0CCE4FMUzlxTDKHLDLDL9M9MV
+Vvh63UsB5FsvEC1UrGGR8702vIrk0Lu0CCE4FMUzlzFwxJBExIxMhMhMUKXUoR5V
+VvhXh+sC1R77ocY6HhHQA+aykXXY-YK5jwRchNBEW9G70o0Mg4--JC1FoSCo1UsV
+VvhBoYbGWEVCpBko0Dw0CCE4FMRzllWMfF2ZIKIF97W-YC1FoSCosC1R77ocY6HV
+VvhhHT+DDo6QQcM3Gbz5x1np2onp1pGpGpG-GZLB6FHcbsXYNwr4y6p5Ewn5FEGV
+VvhojAFpC6xPlpi6Px252AR2X5HHG1+Azs6st+N3Gfz5oDFTJuHpHBOAGEsFnR6V
+VvhBXYqwuBSIuHoCXItBYUqFnQl70YnKiIxJBBR1vfEBzw6++AL301z5sPGAv7HV
+VvhYbByErFXQrBXUpBLAvBHYr81QrwsBXV3CHLaCIEtBH6nFH6nBX6mArBJk1isV
+Vvh05584-IazllGMeF2VIK2F87W-BZLB6FHcbsXYNwr4y6p5Ewn5FEGojAFpC6xV
+VvhPlpi6Px252AR2X5HHG1E5BQ555AI0VHw374-Ub7mQbBXMqwsC1Us8GYd8FcEV
+Vvhq-nr-lln3+gIz-EP4lgP4XYtCHbnQrBnQs4FYN4FcA+W0kZJK-gR6++ThZKYV
+VvhIVAmUrF2MrJ2McFWPaCHbQbhEtCeCZ1+5+k6st+N3m++5uPGBGkq8nN7wrGSV
+VvhIx9KbhEsBNGEk-YB0CCE4FQU+-ydkpCnJ8BYbbC1HKbhEsBO8f+c1UpJK0MYV
+Vvh6++ThaP1FF735-BpQfBpR882V7C2V7tHYwHIbgItCHKXYu1+7EwBJJUa70++V
+Vvh5vNdl36IIvBpN8BpR882YttXYtB+2tvICHYpctCUo-wW0++03kwCzVwHMmJ3V
+Vvh5qBVAFEl5WIM5o4-HlUI4-EM3AU79EJJJUw8+jw8px+TL+U++VQD1jgTEM3-V
+VvhUIwM3D4-HW4-IFB-2lxXMJFGBX560Lg6++6L3U2+1Bac0LkE++Ah9+2+1B5kV
+Vvh1aZYNKtoOKNdNL6UJ2pGw-JXPqFdPaRnMqVZPKIUJ4JM65FZS5Hk14NjPbFaV
+VvBMKBZMbZoNTE+uU++xIpGV
+Vv+V
+Vvend
+Vvbytecount 9508
+Vvcrc32 635c9ad3
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.360pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.360pk_vve
new file mode 100644
index 0000000000..055be11ec0
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.360pk_vve
@@ -0,0 +1,260 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.360pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB16o+8+++2otni2+-Dgr++HvBv+wEEk++WIU6zsWky6h5WHDV
+VvhsV3ArW2omy6JH7wLH57plj4IlGZQEPH2lAD4kj5-H-sVkojllIYgJ6H2JDeQV
+Vvh2AV+EUhJK0AR6jsVq6qfGpZAK2o3RB35t2oJNB35HEJolMGpZ7KxKol7HEG2V
+VvhoIRB3KHGFiJB7JHFJYo4NANohXqpqL1+EoA9XXgY5GHx6h-s4gIcNmEbKl6qV
+VvhHFJIooFBInHKAopmwYq0wJqF3BdiTQHQxRYT7BYTBBQJHJ3op-VB6OKmlbDGV
+VvhnLSEm1d211Xa7W+WzW5MjOoIhQHEGooIdB77xBB6xBF5sYpIPcHJLpHJFYp3V
+VvhPop2RBB6HGGIoIdB-9GpTPXMgAV4FEfXY06S6jsVzSVB-MHGC2omVBEMxBEbV
+VvhHJ3y774-R75HG0ooQxDx5HFnooUhDoYRDoYO3IplsZHK3jHJ7Yp1NBB4HFIjV
+Vvhrm16BYM8QQcV509y6TraHEJYoXNBAaHI3jHI9pHJ5pGFUTJ75FG0oIQx5x5FV
+VvhFnoIUh5XGFoSRBPx9E1+HoQAXXgb60Hx6h-s5ElGhb70dP2XZB3MHHFopHNBV
+VvhMqHL7THM7DLN32qVDaLSLFo-HFoD3RN3xBN4HJFZp2RBF6HHGIoF2uKm2vNnV
+VvhAh145HT+m-V61++07G+WzW5x3B5gJB38zNfh3B33zFHFi+p7-QQR2UsWzW5EV
+VvhvFJ3oA+TGUUstFcI6zsVLx9hb2McFIR2xaF4MpJYMNC-Qu71o3f6KIgAQQcbV
+Vvh6W9y6ToNdYoodBAgHH5EHG5FHF5GHE5HH-p2gRJ85KGFpoURV59MFXq2JRR2V
+Vvh2YpYAHHKEVJBJ-3op3VBF8HHx9HGH2oTHEHEHFHDHGGooodB7YzFXAUWH+c+V
+Vvh+VwO6jsVzGoypIqSBBATJB6ZHG3YoGNB+qH2N8MTr-16GYoCeeoi8G9y6TbNV
+VvhdIqJfl2xQFGi6GDJ2YflAxAHGi6IDF32fW3HkJGj3XcKGi6LC-R8sVUq42flV
+VvhYo4IfW4X6OGj4oh6KWl3yr7x2AVLHUk++WIU6jsVbBWvJR3M2IoVfl7B2O2oV
+Vvho-cHL-cIH-flJ94VN84j3oYO42UOwNFlcOFVcOJFcPFFfll24Vo2AOwR304VV
+VvhoY2OwRBOwRF85JC3p0Kx2ZjG3Q--HkllmWQU7DoWmBYqDJCXoXkwHFGXonYxV
+VvhIrHJFTHLEzLLIjHNESVRZS6JppBBR2LJJIpIToooZB39H2oHcxIqDNX+m0hEV
+Vvh0iCE6VkWzW5MTOd8KIlLHEFzHFFiFB3JHFFYo3NB-5H2V8KRGyo2pjoR2A-VV
+VvhIEllmWQU9ToWmBYqDJCXoXkwHFGXonZBB5HJFJpJFBR1xRRGxBZ-u3qJ3BZ0V
+VvhxRRHHLF3pJJ5FoR33-J6F-MIGIAK6Yh03W3B2l3ZpIIt58YRQs5LBmpoMhRIV
+VvhDxWheBlxp216I369llsZ6WDy6RPGqRF8LGH2oIo2o2o3lB3AsooJhB3AHEL2V
+Vvho2o2kx77LHohN7DJGXp2gxB9HGH1oiBAHFsYlR-AJlJANVJB-KodFF5Fd15TV
+VvhIw--IkXXY-kJ7DoWNq3PAYFX6XCZ6wEXo15noW5WDH2THJLHTGfAfEfB0RBhV
+VvhFBIxJBJCDILH6GoX2x2WKn6WFYAXhFRqk03I0ssv7-wWzW2T+E77G26fGW9lV
+Vvhl92T92gyDEH-vKoIpzpKm0JJ1++07G+XzW5x3vJB7MvNHI4nolnooVo1oFoXV
+VvhkhAu9JFXpur4k9UvJUk++WIW6zwVz-iYL4GDH54y7AIQ5oklkZkVkzH-53sYV
+VvhgQTWGFmTFlmZIgjoIQrWElnzEFo4oTHHsWl+m5BL2558An+Xzm5x-R-uFR-RV
+Vvh35HGHG8THFHG4YoJoFjoo3o-lA2YkR1ogGGloIcIGVojGFF75HG-N65HJlN5V
+Vvh9IFlN55JFWNK5JFVV45Kx342IRR24YERXoAOElqI6QEVqjEFl-5PLFLQxB3BV
+VvhrnonrWomrlpFoQ-LK+k++WIW6jwV5x-gVQL3o0oZkRF95JKFpoYRV55NJFqoV
+VvhIRl15RIGrY2E22+FI-3+2JrrrV7BoHLP72qlNBYLLL82pldBIPLH92oloIoFV
+VvhoZkhB8LFNTih+AUyKEk++WIW6jwVzEmILJG3p0hBEQLH5EHG5FLE9GHE5IGlV
+VvhpJcRN75LJmq2QRd35PJ-r2ARpF9SEFrp+FuorDoOk23O0QQS5VUWzG2TqGOoV
+VvhBB-1DEF0o2Eh32wh-35EFj52pjHKHKxBPopYpjH-xYo-JB2TFB2XHG32oGBBV
+Vvh2mHFEYlVzO5+A426++6N3VLy31b1MtJmVLBpUrCHpjDFWZEsFnR6BjGHLWGXV
+VvhFNF-352HEGFFAm3LJ01+BK66st+Q40Dz6YDIxxRBXdDMB4gm7HYl4GV8BnkqV
+VvhD2Ix+ptXo2Ex+pD2IwBYcr6VUs6mIt3aQA+YMkQQQlMG3TsIS6BHMaJ1NHBpV
+Vvh76AnoSNB6x7A2XkHCVId3nIeNQ+oN+XXY-kM6zsWp1pDTLHMuHhYCHIWC1UFV
+VvhBnd4D1JABHo1HaHEBHo1JABXkrCYUd2IUp6bRYT+7aI555AK2lLz35SXIr81V
+VvhItAncmGn2wTBrYonooo-6x+HClIt3nMfNR+QNUHXY+wF6k+WdOAmUnFXBK73V
+VvhIpBiQtzNs-6uz21+DaQ6++6N3W5z3RF6J-AZAn2HB1IoDnBnXXFoXnQuBHh1V
+VvhCm7R1lq0pnph0h7xB1hG9H6Vp3shIj2hAXD1MsCsQA+UO+XXY-kN6zwWExLrV
+Vvhq2qSYxYoP16ZCX2MCTGXXh+vBDgvU-Fd-5561UcWzm2nPWJXrnDrN5uJAtj+V
+Vvh5Kc2st+D10k06MCC7MA3lDJsHhSH2pV6AlImAn7ZEA+uOkVlmVcL6zwWExDrV
+VvhpYpyYxTnS3C2Us8XQQBVo1IR2o5GAnoH3R31DEB2kpD1MvBYcrGHUtC2UsIzV
+Vvhgt1+24k2QQUC0mDz6YBDRoXhwoqEo0Bh1JJM8WQJzlF1FrRr6ZB0IqQFUm41V
+VvhVOGXV8GXXhCngoyngv1E4as6st+Q4FLz32B4Vm7HNl41VOC2csvHgoyngA+cV
+VvhPkU++VYK3TwIVh+qCHUrCXIwAol0DFASNB3-DFAYl1D1IuBnUtBXo4XE9L+6V
+Vvhst+Q4-zz32B4Rm7HJl41V8BnkqwwFSMxHoD2IwBYcrAFUsAWItB4jbA-Dvr+V
+Vvh9r26QQUO3lzy35NFYp2mUr2WQt2GMuFTGnHaH1IwBIgqCYQtG0UFCHEWCpExV
+VvhTbDHyx+OQUN2FVEF3TwIEoEb6X6L2IEo2IF2MZHSkuz3o0Rn-Yya3+wJzVF4V
+VvhAH7Y6d6GcVwf2HcFH6WbaalPH2yogFCG2V7W6IN+o-ho-XXZ2ksTzltiEQsWV
+VvhguGP5JuHjZBVIo3mEMIUo-lp0CCE5-YJzlF1goxrRod6ungswuGHUFGHIWS4V
+VvhFwUWRUVlmVcL3TwIyZUocrwv4TCFjWBloDBFoi6n5Iwl5KsXq-j6ELQ9XXgYV
+Vvh6FLz3DYtG1G1Z4CGcbCHYMC2YNBl2c4XQFBlcq2mMfwp2nIR+n3GER5nAJAlV
+VvhoX2L6VozAFQl5IsXYxMP4gUkS+VlmVcL3TwIyJZ2R7C-kq5EBGoHERAm5JHKV
+VvhDMDLHJ2XolAx6YDF3XkMCWUsGHHsOQUmSEVlmVcL5zwIyZUocrwv4TCFjWBlV
+VvhoDBFoi6n5Iwl5KsXqD5MsVnpER-H5F2H6h6X9ILHk1-u-lln3V6JzlEhAXYnV
+Vvh8IAOAmYo4HIMFFUx2x2x3B2x2s3HYIGFEt6ncHCl786XZ-p-m-w+0U+05lcWV
+VvhzW5xlYhKHEBYoGNB6KxB6iBIolvKJBHx8v-N+EpJK0cZ6zsWlVpzDJxRAFLGV
+Vvh2YoFBR+IHD3JnVNAoLLA42mlZQcOH74pm-k2llkYlGkZl-l2kml3kVlYkGlZV
+Vvhk-m2ggVO58GGmZUQl59AJVnYIQxI5EEzplqEk2w015587m+YzG96qHMxIuDGV
+VvhD1lB38DHCIooRBJ3LJJ2poDppp9oqI5pEQ38sYoIfo5-GjqJ3BZ0xRRHHLF3V
+VvhpJJBJ5xBB7HFGolB2uDJBXqMkA-0+kgQQmAS6zsWoS6hvWHQPPwFHO2ZqT2oV
+Vvhq-FRTlJBMKLJwLHI43oz4IoVdR5lhB+QLD5EGloJfloYYRBM9HFooJHtb2UPV
+Vvh-+eefG2Q6jsVcCBZ5QsVKlJS7RJS6JgRnY3Zc7UF-Ek++WIU6jsVpigpGYFTV
+Vvhd2d+m2s40ssv7-oWzG5xwYp47RMnLK72pWFRMYLJ7IpVNBIKLI3polVBlRlRV
+VvhlBlRlBohsRsRsRwREN5J4-pVQRQK5L7Fq0ERUY5N7-q1ARNWrVrlk0g51558V
+Vvh7m+XzG73oJOOZ8WXlg6aFYMV82F6CXEu8n6v516xkW9RxhvhRBbxCA+t0+iCV
+VvhCmER6joVTxDKt2qNp27-H2F1G2N3FTFoN1G2R-tJV5IIV5EzFoN3FYJ6F2BAV
+VvhEY3BGRfYHKzHMA+q0EllmWQU6joVXxDNt2oJZ7LmG2V3toR5FnR5CDFYN7FIV
+VvhJ9BIIx+oF1oXB1DIEI3BWBrYHNzHUA-B0UiCCmET6zsWiRR3HHCno1o1gx6tV
+VvhHGFop2JRFIHKEyNRNHHKF3p3Lop2TooYYx6vwx+x+h+h2vBz3mgb2FQP3l6LV
+Vvh8GQG4-YM2eaXyNYUo0Yk0++04FEWzW-qkoCHMrC1LncnGY9WD15hH2sVD178V
+VvhEzCXIsBnMtB1lb1E3126++6N205w675HhKdZ6xs-grw-2A+zAUU++VYI6TsUV
+VvhNvi0NZ4ZAQElo23OEKazd-Go6fLx7B7R7B7BAxAxAxAxAxAxERIRIQ3Fo-ERV
+Vvh2H5F6VoV9J5xMQ+wAkU++VYI6jsURfi1NJ8YEtEpVGxNEoVI8JoYonoooXonV
+VvhlxMxJBFBBRBBDp6fIIezatEJZG52EOFXN6irQA+vB+U++VYK6TwUoT9KDJxBV
+VvhEFDH6Hol6x6HDF6noFEx+JD0Iw3XgLCWQu41YNC0Ys4XQPBWgq+Tth+x5x+EV
+Vvhk1Up0++04FEWzW+mkJFnPFPESt2ajZ5K34YG7GUF41Me7VgxLnpC7-D7sfanV
+Vvh2h-05EAmh28XMqG9hc1+DnM6++6N309y68LEaIMbC1IsFDC3AuB1ooozDHF3V
+VvhR07GJ-40F-4GBOAZglH15YH2wHl-GnAvAnd2CHIsBoIub4T+9nQ6++6N30DxV
+Vvh6F5K9JzK5J6RAF9G2VoVDloFpFpT5J5J9J5JwhHnoy6xDXHGtZoncA-+C+U+V
+Vvh+VYI6jsURgeHN48XEg7-oG9W9F6Xo07973YKNVRn8dlx486bUZNVVY8Z6gEWV
+VvhoJoZsxAV9F6Xo-Ev7IN5j4T+DnY6++6N309y65P8YpFnUpCHF8AngnCo5oklV
+Vvht2l-D22vIXdH8F328-337G75J2zHDHHHB1cnxMB2Uq81QaGOld1+HWE6++6NV
+Vvh2WXx76wh3edo2WBHAZ2zB0MFBGIFFGFzIXVGElF0Yo8J6eWeatescVKWB771V
+VvhYYEHEZXWAZR0J57G6K716Z70EY6nIm6ISePFsWX+MWMAQQcb6WLy6uE-+X5SV
+Vvh7FrD7lqiAr5Owq5PBFr1ERvn6Rwl4vRAi1oYkxAg2HoVkGDF5-Ex+P3HkP7XV
+VvhcP7oYOC1UPCHMPGIIPGXEQGn6R-AH-3PH-7AGWB7S0FKB2IbhddfNR+fDkSCV
+VvhClUF6zoWJs7XINAlglGNscEHZAHHoxDH+E6-+U2T2-2U2SIENXrWLHXE8Xs5V
+VvhXXgM2GDx44DS7RA4Pa2-2U2F+FwU20+EDHpBDIYlsYWNEHgGCVEqBrP+2-+2V
+VvhQQUC0VLz32AzRYTh2npkk-UF-CCE1kkT+VG2xLVCptAHK2Un3H6nAaJ+k22NV
+Vvh0++14FMXzm8KoHEv7nYrG0Yrt1Z4C2QsC1QtBXNnG5MuBnYsC1YrCXPnd3CnV
+VvhLZCoEvBHAZFH72BX71ArAXB5FK1+Dlc9XXgY6-Ly31aKQqBGIoJmAbApQl8HV
+Vvh7MGXAtGnzFD1bOJIDKBnp2UxDoYx78HFx8HEKV6f2YUX8FF37XIbSaL+EVgAV
+VvhQQcb7-Lz36OqcpBmIrC0IbBHcX8HAw6GcmH3glDFD5oHlx5NtB2xAx-R7ALEV
+Vvh2XkV9E2ncX8lIs7GYLBHQp8qhZ1+FVk6++6N3-zy4RIRLlpFpGdW4GMs80QcV
+Vvh2GId2WAs2n6d305nUJNlNa7aMLPp412Y4G6n41AW4GIV40MsBnMd2achIRLlV
+VvhpFpEk4MR1b589GYWzW4jrxEHGpp-BB+xEHHF9H32oVoz32oWoS6JHH5E3YYKV
+Vvh5EwKGFpVR75K3oUhMLFnpTqhEcFnp-Z69I4IYM3mZ74-QOGFUL4YYL3y6PHIV
+Vvh3VlBAa52oXIgHFF2hAIjdBkUk5kS21XaAmoYz096+KBhenbNcvH3VAHFC1o2V
+VvhoWRB-BAKHFHH73oIomFB7BEHxR793FBBEv3FBBEv43p1ccLICHXppB83p1YsV
+VvhLICWXpp1gMLIClQFLHClQFLGHK2JoYpFDpoIpFFB3BIJHEHI7JlBAqH2oYR9V
+VvhHEKYXOkqqx4BkA-r5kllmWQU7joXrlocQh+qBFkuAVkh38DHCWp1YxAFBnp-V
+Vvh6pHH2oExAJAoolJ0HG3Y6x6MAXoGUlHF4Mo-eA8ckPWlm896cR075FW0oI2sV
+Vvh5GAYMR70FFooAp5HB2ARB3AVp1Ql5HC2p1YxAuHFCl6uD-IqDE7soVrkg-AVV
+Vvh-5561UIYz0AH5LulAyIR+lklAP+HD+Flm+s37DkM2lklDEtFDfARQH5+B0ABV
+VvhJJUe6mrx6hDW8WpyAe9Lt0chTX8Wpmcd+tsv8WpyAe8kCN8WpyAe9LsmchTXV
+Vvh8Wpy6e9Hk6EZ1JJM8WAczGFIpmQY5K7mIREb7loHQrCl2b8-71EGQt3HEcCFV
+VvhkcCFgdwt4Wct4GjnYM9E8-Uh2r3momQL9I7FQhIY3mq2UcHL8-ERMb7Fp0QaV
+Vvh5H7nQR6b8-oGUd5w81YP8HYTceCFYfCFUgCFUh+d3moGUL9GBlQhAa3mpGIKV
+Vvh9L3-URV2s-Eb-5561UMDz07nvzxo222266EEV+1E8WU4CCIH119x794VcO4VV
+Vvhcd8VcdsWbW8HbW8SgusWcusWjW8mgP8mgQ5-kQ5M8WY4CCIH119x7-kQ5-kPV
+Vvh8mgP8y6fsWcusWffDWYdCS6dsWYe4WYe4VcO4Vj+7mc6++6N2VLx76t0Ua7aV
+VvhEYEXAXBX2VCaoGoKcl6HMn6n7274Ma9YUc0E2GgAQQcb609x58LeIeLKuZdGV
+VvhdS+I9+Flm+s41zk2QyzzR----00226E+k+ki-5561UI3z+EH5G2lk1Ej0++0V
+Vvh4F6lzGHI5H9WoWoi6h9W9GsWoi6h9W9GsWoi6h9W9GsWoi6h9W9GsWoi6h9WV
+Vvh9GwhA8+ECUFlm+s33TkI2lh-DSAPEH4U3ng2QQUC-Fzw3-APEHrX4o3CB-sXV
+Vvh2lDlA7UADEllmWQU1DoFpUlhMA-ZE+llmWQU6zoWmBYc9J90oVolkhIe5L4FV
+VvhqFQNOFIMBFYI3mUb2lQf3l6K92EG3Ho1EF3Xo1IiNHoHIaDEBF2JDEBF2K92V
+VvhIF3mh22lQc6HEH41II6lINNYQE2l+G6-ARR69HH0dRGee+lP-5561UQlymGpV
+VvhvFKne+lR-5561UQlzmGnvFKps-FU-5561UMDzG66EUV-00000vzxws1M2-66V
+Vvh++6N0+bu6jBIIqBXMb7mo-2H0++04EU7xW7TB2EoB1IZ7GPM2-E6++6N1+LuV
+Vvh5WUV7WAmBKUZq-EJ0++04Es7ym9W5-wFcG80AoBMV3160FM6++6N2U5x5BLUV
+Vvh3-QA++6Z0Ubn6lsMN+c-U4+I0MMS+B+F4+QQQlMA0TfyEtKXcuDsAd6Po+sUV
+Vvh-5561Ug3zl8GJWQaId1E2ps6++6N1+Tu6J8IQW7GEX7W2cCVk+lT-5561UI3V
+Vvhz02H5G2lo-Jx0++04Eo7yG6i6pAHImwa6j7WAL3+s-7y0++04F+3z0+C+Fw0V
+VvhAMl+y6-ko--z0++04Es3ym2HMlsZFFBX29-6k+k++WIUADsjfnoIoHoXoXoWV
+Vvhomom0-sWoS7AzW2InS6HH9sVJAblRAQbL4wNH38Jl-hAH2kwP0wQ3A5W51GzV
+Vvh53GGlIVAFIydkP-7kEk++WIUADsjlzDEHEDEDEDF9F9F66DW9FsYny6FHBsVV
+VvhBAjW3ImT3olmRQPlZAIdL24olAH1lg9lkIkS6QB9wQJ793G2l3Hub-0kHA6AV
+Vvh++6Z60vy9QAh3AwW9B70mmMgYc964V-xsWoS7AzW2InS6HH9sVJAblRAQbL4V
+VvhwNH38Jl-hAH2kwP0wQ3A5W51Gz53GGlIVAFIydkEk2f11++07G+gzWj1URNKV
+Vvh5K6mAhMKLK410CsW+EsYri6FHQsVBBfW3IqD3opWRRLlZBEdLH4ooxDGpR5lV
+Vvho2oC6R79wRF79IG2opHubE0kFAEA++6Z60ry98BXly7IL5BX0RsWoS7AzW2IV
+VvhnS6HH9sVJAblRAQbL4wNH38Jl-hAH2kwP0wQ3A5W51Gz53GGlIVAFIydkP-BV
+VvhlEk++WIUATskkInWEgkK59sVUQgK5A70nY0WsWoS7AzW2InS6HH9sVJAblRAV
+VvhQbL4wNH38Jl-hAH2kwP0wQ3A5W51Gz53GGlIVAFIydkEk4P41b589GYWzW4jV
+VvhrxEHGpp-BB+xEHHF9H32oVoz32oWoS6JHH5E3YYK5EwKGFpVR75K3oUhMLFnV
+VvhpTqhEcFnp-Z69I4IYM3mZ74-QOGFUL4YYL3y6PHI3VlBAa52oXIgHFF2hAIjV
+VvhdBkUk3150ssv7-ohzG9ES-f384QY7pgGBYoJJBB2HJAopXBBQj7BUj3RYFHOV
+VvhPbr2rDLN5mHN5nHL3IpFRBEMHG4ZggNnogprqHrJrXrXrXrDDKbK5K0kIwU8V
+Vvhst+W5X1y9twwxAwx+x+x+h2h2UVznsH-K2knVAEcH34DH37olVTWGFULGFl2V
+VvhUgF5D2z0l2QwF692x752x74VJAUS7IllPolWNAIqH2FYkZ9x+g-ImEfXY06SV
+VvhADsjpTDRHRDRDRDS9S9S67Xxu2o3VB6sHH82p-Xop0RBILsYYM3oYRB69HFnV
+VvhozoRB5DHG0ozGFozGFcJHL5WJBMKxBIaHIBYooNB3GzT6A-LmUfXY06S9jshV
+VvhoGrYr06hcY9M7WpWUhIO279xu2o3VB6sHH82p-Xop0RBILsYYM3oYRB69HFnV
+VvhozoRB5DHG0ozGFozGFcJHL5WJBMKxBIaHIBYooNB3GzT6A-DmkfXY06S9TsgV
+VvhYqDIsZFREqA91xu2o3VB6sHH82p-Xop0RBILsYYM3oYRB69HFnozoRB5DHG0V
+VvhozGFozGFcJHL5WJBMKxBIaHIBYooNB3GzT9M4Ak3lloG1X1y9zCogwD1kh9GV
+Vvh-C+Ss-xII-uk3wo3lloG1X1y9twuGXcuCmgf619EvFJ3o9+PnUL55F6C9jshV
+VvhIfGG6b70Ia6mUW4V+goCoJFR+5+KnkL55F6D9Twg2qAi7IIXMxLsPdJYPsP6V
+VvhDx+ACCMa609y6RWxfFGplB-9HFGYoYboooXop2TWHJFi7BLOyJspHJLpHJFYV
+Vvhp3Pop2RBB6HGGIoIdB-9GpTPXMj+Nh2A++6Z60ny8wC-pZMRMX6mpVNRMMA7V
+VvhyQq9hJoJUFHG4j2YoFcHHE4VBQ4VFA4j3IgO3YcOwLGFcMG-flZ54Vd44VdJV
+Vvh4Vh34j52EO5EElfloI6O5GEFflopflp2cRIsLI7PoGKx6J0kIB6AQQcb615xV
+Vvh9uwx3B2x6x6x6hAhAUTcmXMwMuD1D+D+H0GXl1YwMrH4FTH6EzL6IjH8ESVQV
+VvhdS6Jm3BAV2L4JIlYTol2ZA79H+H0CXlXMweA+A-EokllmWQUATojpjDTHTDTV
+VvhDTA-+U20+E66yBYqDJCXoXkwHFGXonYxIrHJFTHLEzLLIjHNESVRZS6JppBBV
+VvhR2LJJIpIToooZB39H2oHcxIqDNX+k39I15587m+jzGrG6--BsW9Q70qWMhUcV
+Vvh9L4V07XNBXpHcx6wD2oIcxAtDJBopILopoDppp9oqI5cLNLW3RRHHLF3pJJBV
+VvhJ5xBB7HFGolB2uDJBXqMkA-DpEllmWQU9Tofks5KJVpWAX9K3ZpVUkWsqHMxV
+VvhIuDGD1lB38DHCHpHRBJ3xBR1xRRGxBZ-u3qJsVLLIopoFRJJHJFzHHGIoIhAV
+VvhHFCXpHMxaA1+GhMAQQcb60vx98BXpi7ILKBX0dXNBXpHcx6wD2oIcxAtDJBoV
+VvhpILopoDppp9oqI5cLNLW3RRHHLF3pJJBJ5xBB7HFGolB2uDJBXqMkA-rq+llV
+VvhmWQU7joXrlocQh+qBFkuAVkh38DHCWp1YxAFBnp-6pHH2oExAJAoolJ0HG3YV
+Vvh6x6MAXoGUlHF4Mo-eA8ckPWlm896cR075FW0oI2s5GAYMR70FFooAp5HB2ARV
+VvhB3AVp1Ql5HC2p1YxAuHFCl6uD-IqDE7soVrkg1HN1++07G+lzWyjDFHFDGDGV
+VvhDG9H9H679w7vJABMv8H34nl-kDH15-D051D+92CWlYMwWgpg+A+oqUk++WIUV
+VvhATsjpjDTHTDTDTA-+U20+E68Dx3vJB7MvNHI4nolnooVo1oFoXkhAu9JFXpuV
+Vvhr4n+BhgA++6Z60zy9R6U22rW6hkY9O7Wq0UhQO27rx3vJB7MvNHI4nolnooVV
+Vvho1oFoXkhAu9JFXpur4n+9hkA++6Z60vy98BXpi7ILKBX0xzFSpHGKCqIp-gxV
+VvhAQxB6R+x2R6w9HCWpIMxShlgg2rR1++07G6kzmz6wx7B6x6x6xAhAhAUbzkQV
+Vvh0IL4G3lGhAIQ-QEQ3AAQ7Q2gBA2QJ954KVloYQVL97FlmoIQlI5BElnZ2gx-V
+Vvh5ELGuonTke168hs8++6T4G9y6ToRDXHMoPotG3V7JzGZN9FiJ9LpGZN7JoVMV
+VvhotoPtYozoP1+SxwFlm+rA0Hx6aRVo5MJgmin72Mm8YMm6ndNCZ6wG1l0DEC1V
+Vvho15noWQx6VsXolQxAFxBdBJRZRBxRx8hGgnGmh1Fo8nGnEbJbHPMPIHOHJDPV
+VvhDJHOHJDPHXp1MRFRAb9H6GoXQh6lDF81oG7PC3gm6YN76YN16vgXhFRw3rP+V
+VvhG7UA++6Z6Wrz99BXqC7ILMBX18zEmILJG3p0hBEQLH5EHG5FLE9GHE5IGlpJV
+VvhcRN75LJmq2QRd35PJ-r2ARpF9SEFrp+FuorDoO1+DS+6++6N3WDy6YwxNBMxV
+VvhQxQxQhUhUUPdkqCJQcJnRMBnYxPnoMdIC2QrG1PoYpsYcoKIEFFl2o2YIHAVV
+VvhJpEUk1rV0++04FMXzW9EwxJBIxIxIxMhMhMUQ7kqCJQcJnRMBnYxPnoMdIC2V
+VvhQrG1PoYpsYcoKIEFFl2o2YIHAVJpEg+zsUU++VYK6TsUYhNBEW9G70o0Mf80V
+VvhcO24eQBXZL83QrK1QtDKwx48J1V5BoUqx7BS78B3Z22IQFB-732n6JRI6A+wV
+VvhskU++VYK5zsSMs4JMN6mAd3ZYMA4mQBXZL83QrK1QtDKwx48J1V5BoUqx7BSV
+Vvh78B3Z22IQFB-732n6JRI6A+st+U++VYK6DsTEqCS7IKHMkU7kqCJQcJnRMBnV
+VvhYxPnoMdIC2QrG1PoYpsYcoKIEFFl2o2YIHAVJpEUk25Z0++04FMYzWBoomEhV
+Vvh2K5EsVUR+K5F70oo03b1MtJmVLBpUrCHpjDFWZEsFnR6BjGHLWGXFNF-352HV
+VvhEGFFAm3LJ01+DyM9XXgY6-Ly31aKQqBGIoJmAbApQl8H7MGXAtGnzFD1bOJIV
+VvhDKBnp2UxDoYx78HFx8HEKV6f2YUX8FF37XIbSaL+ASQ555AK2Vzy35W1Iq7ZV
+VvhEqInRGG1Ax5aHGDGH-6w2ncJ8FQp8a+FDGLHDHDHDFwsa-oEk1Dc-lln3VAXV
+Vvhzm6zDHHHDIDIDI9J9J643uBHQcBHYnCX79AHlwrSHHDHHE2Xo-Av3HYLBWhZV
+Vvhk1Dd-lln3VAXzm9DDGHGDGDGDH9H9H64BuBHQcBHYnCX79AHlwrSHHDHHE2XV
+Vvho-Av3HYLBWhZk1He-lln3VAVzm00oooG6g70ca80Ub4V-RSXIr81ItAncmGnV
+Vvh2wTBrYonooo-6x+HClIt3nMfNQ+iukQQQlMH6DwTAqBi7IJXMkQ5cpBmUpCHV
+VvhAuAYglD5nRtBAxBB+GDE2ngJCFQq8qL64Sk2QQUC0mA+6jC2UtCHYe8W+mBDV
+VvhRoXh2oyUk-fh-5561UgXzm8DBoQrBnUc80+oBDRoXh2oyV1+5Cs2QQUC102+V
+Vvh638IQW7GEX7W2cCV+oBTS2bh2pyVk-Xj-5561UsU+FwHMlsZFFBX-CBzSYjhV
+Vvh2ryWk29k0++04FMYzmD0dI8c6eilJd43UMNlQXDF71pzDLDLwxQeN1MqAHIsV
+VvhAGEuMXlFH32x4CPFEHoH7AEnkpCXQsCHMx-co0Pl0CCE5-YTzlu1UQJVkX6mV
+VvhkKL-UkX1FcQWIqQFUsKXV8CCovBDgv1+BT66++6N3WDz6ZwxNBMxQxQxQhUhV
+VvhUUQao1MtC1QuBHknH26x2ltYoI2x2mH2AwBHcrC1YqDEOA+qwkU++VYK6zwWV
+VvhoTDJHJDJDJDK9K9K65Fh+qCHUrCXIwAol0DFASNB3-DFAYl1D1IuBnUtBXo4V
+VvhUA+rx+U++VYK6TwUchNBEW9G70o0Mf80cO24th+qCHUrCXIwAol0DFASNB3-V
+VvhDFAYl1D1IuBnUtBXo4X+BDI6++6N3Vzz5bC-ZK4GAX8FNN41-kPEBXYsBncpV
+VvhD1BAEXoH5aHFEHoH7AEnkpCXQsCHMx-ck11q0++04FMUzlxHMtsZFNBX02PEV
+VvhBXYsBncpD1BAEXoH5aHFEHoH7AEnkpCXQsCHMx-ck2Ps0++04FETzVbJ5JwRV
+VvhIRIeMVYaC0Ub8-2Z8F6XC-Am8FEVws3KQKNWNa3qxFUl7-YWAlUn6VYZ6FUaV
+VvhC1Qq8F7e9J5JwRIRIA+dyEXXY-kN6zwWPnqIqHqXqXqWqmqm-zCnHrRrGYXfV
+VvhCnXnd7C-37BG7sN5k0fu0CCE5-YXzm9GwxVBUxUxUxYhYhYUUHgoxrRod6unV
+VvhgswuGHUFGHIWS4Fkk0nv0CCE5-YVzm0mqIpm6hIY9H7WoGUh+O25gvBDRrR8V
+VvhGCgvCDCYYs2IYp6bVYTE7Dk6st+Q4G1z5qBXnWJ3kqA8AvBDRrR8GCgvCDCYV
+VvhYs2IYp6bVYT+EDo6QQcO3mrz6h5npYpXpXpXpmpmpm-myZUocrwv4TCFjWBlV
+VvhoDBFoi6n5Iwl5KsXqD5MsVnpER-H5F2H6h6X9ILHk1jy0CCE5-Uizm71pDTLV
+VvhHMuHq1FfAWItAFYcGXQwBXl3DEBSMx-2DEBHl3D1N8Bn2MC16ZCHFftXppoyV
+Vvh8x1+ETw6++AN3WDz6dPFB1gbCHR68HTYCIMsFnUsBnYqBbB6RXcrCHUsCHQuV
+VvhBjCYIvBSIvF1gpAmJ3AYEqAYAnQmAoR3MA+vi+VlmVcL8jwTIqCi7IKXMkUzV
+VvhdMB8BzClbnYPsXQR1nIR9WAlpDAFpi6xXlqC6QxI5EIloF2m9G6mp3oko-vLV
+Vvh-lln3UcKylOFUM7mUM7mQbBXPnUsC0Yd8FYd8FcEq-vr-lln3UgKylMP4lceV
+Vvh8Wce8WYtwrBnUc80Uc8FYN4Uk0U90JJM5FwX+08rJQBV6o8GRYFmRYJXRYJHV
+VvhVKBXZB9aCXfxuSoncvyYhQ+X1+XXY-kO6k+WlhF39FCFkdGXVNwtKHcutHpTV
+VvhqNCYbh6vBTgvk0+B0CCE5-cX+0952h+rD1NP83csKHd7tngozNbhAvBTgv1+V
+VvhAEsBJJUe80A+6gO4p1MXFGoHYFCFkdKIcsO3bnZNKHd8CiIvDJw-SHguGSoXV
+VvhgvBTgvCko0sD1JJM8WUX+094Vl9HMXBnkrAHNP84VOC4VNCJd7CYgttXgvBDV
+Vvh+abU2XgvBTgvCx+T6UU++VYE1zsW2rAZJFxYMH2JAFsp4Fx-YIwN3-YI4FH6V
+Vvh0Go3JJMF1+9z0xjE5pk6++6N2+zu6Y4FEN3D4FHlYIslYJ2HIFATN43JIXQlV
+Vvhm+Zv0++04FU-++nPe+Zw2++1AX2-++nKw+tdN4JiR4ZaOKJm63FBIj+JMqxYV
+VvbOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoNa3XNK7tR4Lo+Cc++DLqV
+Vv+V
+Vvend
+Vvbytecount 10524
+Vvcrc32 b912f24d
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.432pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.432pk_vve
new file mode 100644
index 0000000000..4c6ceecbb5
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.432pk_vve
@@ -0,0 +1,310 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.432pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB16q+8+++2otni2+-Td2++LuF9-9EEk++Woc8jsdly6hbWHLV
+VvhxhKBHl7RAHPGwILFsVNQzW43nT4Zmmdgflk3mFkKm-kZmAX5mgPll3lS6QNQV
+VvhDW56L-58KnmJZgRpz+kAEAVHEUhJK0cY8Tscr9rx-h-gLFOpoadRBdxRFNt3V
+Vvhp4VRFNLHOJopdR7PLFL3lh1MoZo3o3oZhRBOLIKJpJVRJbLKJyJRNjNRJbLIV
+VvhO3oqZR7dPERE25rdg3Z10ssv8mEfzGb2WlkQ7mhrFGdQ2XC3l035L4NZm3JQV
+VvhdDFQknLC6anW7QwWLE5lPE2JoiVhBRBh7h+T7R+GPD2pnVJQoJLA7ZmlVQYOV
+VvhL58plGkZkHl5UwX0nNj6H2EACCMi80by8BrF+Eoqo4opoaoJp3o3pJlRNPLLV
+VvhKZq2dRVNsZqJXWLOJyZRdjNRdLLNNzLNKDLMKJppdRNPLJL3p3o3opo4o5Y-V
+Vvh0xrFm2h30iCE8GEdzWXk36PHOJpIZRQsxRUcspqFVRcLxQ4VTpkRLpghJNHJV
+VvhzJpJZBLpghJQ5JsZkP3ZqlsqLO3zLN7pq1RRR5LKFqor9k3Gi1V40b587m6dV
+VvhzWXxFqkqVQMsL5BzL67yBQYLL85qKlcS7ZgQJO93KHlTlQJND3KWlSFP53uJV
+Vvho5mjlwD+N2QAXXgj80jx8RC95IoL9GRoIh3R+XD3om39LJOZppZRZ6xRgrLRV
+Vvh7arGNRsaLT3TPT3J+Jtq+JPJolLJolPONKqpPpqpNhdLLOKDLNKJq3dRRPLJV
+Vvh2IlREFHFLE6nobUp9IoM5LbGm-t61++09GUdzWXxFhFLorjh7RJQzTnhBRJPV
+VvhTHRTp4p+i+x7-QQR3V2dzWXKJvvKKrLKk0F801XZ5lUezGVjpR-hPhtL8ZN7V
+VvhJTO3JcFZVL4oYNGWUx+YHHP+m5F915589WYdzWXxGwNxJfLLDELL5GLK5HLJV
+Vvh5ILI5JLH5KLG5LLF5MLE5NL-qZgRhO5QKFrJUhpLHQJaqpIFLPJ-BRdH3JqJV
+Vvh6KLNIFVRVdPLKppplRNQPJLELJLFLILFPHLGLHxRBR7RFR5ppJo3pKhxG2zIV
+VvhbG167Ik8++6Z60by8DphJxrhVRvXLL5XNRMLxRIbLIBpooRR3LP59k2Gm4FBV
+Vvh1eehBn6dzWXvrgJhtvwFHQ2JnW2YqV7QwHHM2pnW32pVFQwJHI3JnW3YoVNQV
+VvhwLHE3pkLKlVQwMGlVQsVZ74Jnld54ZnW4oIPLD52AQLC6R--5EL-oIoJgx-BV
+Vvh3OLE9FRTo78REAVwHUk++Woc8TscjHrB9ENxJO2JpXgGLK5-7hIQ2ppFkILIV
+Vvh5-FhAQ3JolkKLG5-Nh2Q3poFkMLE5-Vg5-ZQ5-dP5-de5-hO5-lN5-lc5-o3V
+VvhUQ5FJlnloZMQ5HJFnlp3EQ5JIlnlpZ6Q5LIFnlq4kRZQwRd9DOCZqWPEpWPEV
+VvhplP+JIwAQQci7mjx8R8Rt5HNGopYo2p1p1oYp2o2pYhBV7LMJzLOJTLQIzPQV
+VvhMjLSISVhtVLSIi7hlXLQJ4qaLpqZRRVNHMGZpZhRFR3B7BFB-BN9HNFordoUV
+Vvhm1NE0iCE8GAdzWXQfTlh-fLGKZopZRFMLINppJTZLJNZpJRRFbLIK3opZR7OV
+VvhL4nMoSop+ETOzIpEk5FF15589WQqzGbGbSFoqIhBNB-BFB7B7BFB-BN9HMGJV
+Vvhq3TpqZLpr3Dqr49prZ5cPSPlLSIjPQMzLQJJqZNOGJRL7-RNFlMKGZIL73hIV
+Vvh3mBR313n3BF03rpY6KPNNIgR995xh85PGGr2QxlJDRoBvBzu+FU-F316NZ69V
+Vvhllsg8Gfy8BfJrRRfPKLEPILGLHLHLGLHPFLILFtJp4o3p3oJopoZooopoYp3V
+Vvho3pJhRTIqpdBZQHLLEHKLFHJLFLILGHIspoZoyBR7h7R7c3ZobQKLHNlJxBKV
+Vvh2RH3IFpB-22-JX1+J3A6st+V4Wjx8MS-Wp7ZN17IgVB2o3Ex71HHAnp19WHJV
+Vvh6YpV9ppF7hVRVxSRLEoR9BCxDEoRCxNxVhVRbqsxVhRjpn2xJ-HIAZoXAlD1V
+VvhEYFoIZo44MWk8ZE9XXgf7Wby8-zM7PKZ6w3Q+m90L-6j51L02T91L0DYl3klV
+Vvhv9lJp5mzmr16A3IA++6h80fy8Dp8o3TKKZq1jhpRYR-BUR5pploYpVp2p0p2V
+Vvhp-pYoGq3ghhLDSk-3xCsHZMA++6h8Wfz8DlA9+JwZdL9Cpn-kS7QcQDpm-l4V
+VvhlWlTL455xQEQVgAQbpkVmak0mzL+5BxO5COFnzK-oS7K5HxI5IMWpTIVpy7hV
+Vvhboqy6gX6XZQEQQcxCWfz8Dobodl5oboqVRFRMfLHLK8zLILJ5ELHLI5FxRBhV
+VvhAR7R7h6RDpoF7R2RBh+GLE9IL07g5JL-FQ5JOlFQ5KKlFe5LxO3ZcRVN3ZYRV
+VvhbpUMK-qZQMJlqzJVdK5QJFdJ5RxI53ERtH53ARzp6R3G2--F5FIF+FxhBU2ZV
+Vvhop+HxBJ+31pH+JsWpmp+g4pM1++09GcdzmUTl7kNX0T1L2D4P256L158L058V
+VvhP+5AKlnKcQtc5EJloKMR7Y5IIlpK6RNxVRZhZhZRVxQFPJ2pp0BhAJLG3po0V
+VvhRgwNLC4an0hggQ3QcQ7gUgBgQQJQMQNgEgRg6wVQ-wG4z0kAE9VCKEk++WoeV
+Vvh8Twcz2kvJwZdP8D+L89-P751L652P553P355L295P157P-59L-59OlnJgQpdV
+Vvh5DNmo3QR3Z5HN-oqARJV9KIFpqqSkJq4ozlQ+9-PKUb55WIS8Toc9x+ckZBQV
+VvhFXH3J1lJIgJY94JGlJMgFa53Jz52K-kpn4n3n3n4n3n3n4n3n3n4n3n3klVgV
+VvhAML25rL33ZlGJgIZL473llFgMYL4AplY7gJGL1UToF1+Cq26++6S4lfy4LTIV
+VvhBYo-gvGXdNGJd7CocQHOsYoglKGZV7KIVOFph5H2Ji92JfJF3OJF772YAIJGV
+VvhC4VoAA+zMUXXY02R8jwdJBTtqprChBl3PFEmIwEGYuEFgtL2XooITooYPaHGV
+VvhLpHGFYoJNB35HFC3l6AFh7AVYv70Mw3qcA+gMkQQQlgK4jsNaABnR93Id1GZV
+Vvh79IYkmLE2opCRRJBJRLooVBB+JGlR74XMh-qk1pY0CCE6FoezWbLHLyRhRnfV
+VvhHGN2kq6Ygt2IZ9K2lMDFFooINR34xB73tZoYPooYTooIVAKHgFGXYGKnIXaKV
+VvhKR+hNEQQQlgK4jsNZhF1csBnZ3CnF9EokmxBbx+Vt+32+II-Ho+F2ooJD-QuV
+Vvh4XMhRg+UNUHXY-6H8jwdhQB0YoFnFKF3MqBYQLu2fx8SpooZbx7+k2lb0++0V
+Vvh5VcczVfMG5IY3HIm31ErFHB5FVDoZ6t3ZMx7GYRABnkFBHo-Bx5W9PDPDOogV
+Vvhp8p5D3IhB1DIAmpX5XDKAjDIB1oXQh+eFooNYA+cO+XXY02S8jwdJBXtr3rSV
+VvhhBp3TFEmIx-041l-4Xh-4Yfph8vHH2Lx2h5+3KY2QQUF1Gbz82GCBcE573y6V
+VvhKSpYHR1+5qc2st+G1XI087GSBdE5hTKNLhuY2qAJIlJ173AmIbNEk2df0558V
+Vvh6-oezmZIpzbPLQuorDG9N8OIcwGWo2YR765HFlp2MRJ35KF1pI7hF-2Yp3BRV
+VvhB3LGFYoYNR35LEG2o2VQGJh8GodOGaHx2w0k24k2QQUF1Wfz8JFTaJfhR3o+V
+Vvhk0ph1JJMAn+OzlZINfOdEZBmIsYWUo81hF4Y6OGo2PEFh8xQL2fhBB-B-3zFV
+VvhDFDFk0-i0CCE6FsOzlZIJtYmIsYVUvIFcvEFd8xPGiool3zF9F1+94w6++6SV
+Vvh4Ffy4NTHBHktCHgrDEBTHEEzHGESRR7T3B71xB-3GoQvCHYwBHorYA+xQ+XXV
+VvhY02R7jwNJ3ONAZBt2cGY2OGJl6HEJooITooJPaHGJIoYPooJNB35HEG3l6KoV
+VvhZ-4Hh07Il2PGuIpzoR9+E526QQUU5WPy4OO-l37Ggt30Z92XVB+FC2o3RB74V
+VvhxR74HHFSNRB4xR75HGFpo3VB-NGl38GF7AFGBB3pHRuIqDoEk-xm-YF43lEOV
+VvhzlZIFGYWAlYVBIIFFJJJJKBZoioYopfx7R+mQkNDdVUH4jsNK231QV6mgmwhV
+Vvh6TA-+FHF3E2KqtqAawU--FwE24sU24oVGn3O6WALAlJqk07o-XXZ3l6ZzmGCV
+VvhARDW9Gwx3B-QoFp4v2oSN63YMMBVYo53AA+UREXXY02S4jwNJAFTZtZPKioYV
+Vvhl8x9KncFH1UGL1MHabGEm13q05586-oOzlbwWILEG2o1ZB2PxA53gR1ocR9oV
+VvhURBK9Ix45Kx25LIWqDEVqjLQsXrVoQVHRkiCCmgc4jwNz1hNFNKYR9Gmbod9V
+Vvh4YdO4oVd52UGCFl62YUR-46YQR3431QR3432MR9oEKBFopAKEmpDEVUn5JIFV
+VvhV-9KxOAFq2dBbnkxcg9P5F5+m1ps05586-oOzlbwOZOKZOD2cR769HFlp3IRV
+VvhN25MEVqaqZr2rIql3BYVLM2oplJBILHH43oGZB2PGnl6OaHuTAV2SEVlmW+RV
+Vvh7jwNz6Z3o2VB+tHF4zH-lP5Ex85Gx65HJWpDFVpjF-pp6hXo6RfprC6xvlriV
+Vvh6RsREs5HxK5IJFpIIRQZ5OLMk1hu-lln4lMOzVYRQYh193AR-252EfJ-l34oV
+VvhMOLIHIHILIHIHILIGVN93JgJH-FA6pkIHE2oo07QAYhFq-0s6k+8++6Z60byV
+Vvh8DobP-O3l1VQIrxQMbspllTWL65ghZnbmDlw29-e+EpJK16f8jodmFrTDPxRV
+VvhZxUFLL2apVBRIIPI3JolNh6LLF44o-ZQwOPC4pnFk4mmkKmVkamGkqm-l4lmV
+VvhlKlVlalGlql-m4kmmKkVmakGmqk-nJgQte5DKFo4UR3L5GNVopIRFY5JIzrFV
+Vvh+u1+LE6AQQci7mjx8R8Rt5HNGopYo2p2oYoYp2o2pYhBV7LMJzLOJTLQIzPQV
+VvhMjLSITN-p-HCBBNAx-p-HBtj3RtGxhlXxRlJxRdLLMKIq2dRNPLILFHGHIHEV
+VvhHKGoqIRBuR8kIkA955Ae7Gfy8QMRTWDJsZoroj2JoG3h1lBQwXPCwJLB7KnDV
+Vvh3pmmRgflZQYdP6wPL58qlj5-L39-P2wQBQAgBg9llJkGlKkD55KmlqcgVMP3V
+VvhRDigE2+U-+eefGUX8Tsc5XP0t-OV-IsVM-JyBWJy6K+EIyEKkqfNi-M31++0V
+Vvh9GUdzWU1FKlajhNQNPT2RTlKlPVK-UiCCmgY8ToczKBgVnP9F4moFggoPA7KV
+VvhmmPqmlRgcMxgcMP75tPHPHPHLHPHPHHIDK5K5K5K585v594VmmYQkN5B4-nGV
+VvhQQsa5CBFnYIQpI59RBExIhMUk1c515589WQezGZJpZWR8JmwDFbF9GTG6cJpV
+VvhUV8ZJOD2JA9EEoo0oHAx2R6nA-3-E-9WAH+IvOI-FxnxWP-90+iCCmgY8TocV
+VvhXwb8TGt3o8mZ7FL2FJFA34JIdLJZRMJpLpZMIzKZZFt4dNPlKZZHxNK3JMJpV
+VvhRLJZd4JIkIJIH2IZ3Qeh5YLGT8z7Q9--0EllmWsb8TocbwbBTJt3lKhPMZdOV
+VvhJTKJZLu3VMKIVMGi7LJph5JokTFZNAB3JIlIFIH5EpBAd-IIntpCFRJwrwaEV
+Vvhk3c80ssv8mEezGbEfOJZpIlB3R3PLHKJpJRRRJxRZHPNMZqp5aPPPlLPIaqKV
+VvhDpqJLpppTopoZBJ9wxIx+xAx6hAc3momQc9F8-2L9F7l9lUR2M2WQg7m8wgyV
+Vvh8gcUk1Ak0++05VYdzWSLonIwFoZ7G1grDEBS7B-1sooY5h3R7SAIoYDWHEFHV
+Vvho1QvC2Z7FokpDHSEg-Ul0++05VAcymSll1kZi5QIR2H1vGH0NzlUk2Um0++0V
+Vvh5VQczGS5oAcqNmZZ54ER-HwR7FLAjC933APIPxFRHpp3pIpIpIpXpXpXpXpXV
+Vvhpmpmpmo-Mh2J9F3GoVEhAI5H6xQhQjq0k2kn0++05VYdzWSLogkrKGdL5EJXV
+VvhhJKaHphJGpMfPKxRRBRBUxUxQxGBhBZBZBZBVRXppzMWoa3B5DoAo33R3G5HV
+VvhMVopEh-K8pV5KworYA+xB+U++VsN8DsbpD9NDMxBTppV3BLl7BEHHHwIHG3IV
+VvhoT3Yo-RAwMGlZ8wOGFh68oUQFlo2Mh-4+Ztx7BRh5xD+F1I6++6S3mbx7n9FV
+Vvh7JV4orocoNo82qoCQRYJOlAZCF2d80gr5EDLHLsYpi7FDFfWo8o22RF05GIVV
+VvhoYER3292MeG1NOjFSQ-DBUU++VsN8TsblxCwJXd78Hd5GJN8JXkqHMDMxBRRV
+VvhToppJdJ-MqIWUpIVcoIFknxh-0PFEJoY5XLGLW3B7FLFLmHFF1o2JAFXh6CIV
+Vvhd4H9orb+BnQ6++6S4Gfx805PDNzO9N9O6hMHwRMI5J3-pFIRERgRcRflqVqWV
+VvhqVqj9NwhbWDMsXqCBBTbLMDEk32s0++05VYdzWSLovo1NO8YUgFXo1Mh6osXV
+VvhoXHooHFQBacbS1W38sAh0x8RKR8w77YbVXa2D4Eh3WDHEXp5pLsxNxIWDIAYV
+VvhomEx6aGnVLGx1GSEk2gt0++05VYdzWSLovlJGYYsGnQwFIo1HooI9XLGESBRV
+Vvh7FHGIIoKwYo4Aw2JEu2ZIs6ZMq33ZZLWpopy7BR4D2JOFZcrGXYeCXRAjHT+V
+Vvhk3wY0++05VQkzGmy6hJx57EmArBGIZBWQI7mUGBmUG80Z67bsc7NQaAIQfFWV
+VvhhJ8rAgjEnB0x1AodoG3x+XPD7IkaEHQabWMbRmR87m9lYaAWUZB0QZ7WMXC2V
+VvhAVGgoLpi6e0kVmMAQQci80ny8g3BQX5J7FomMR9nQR1XFloDFVoTFFoYEREnV
+Vvh5JEFpY2Q1-ZQ5-ZAJg7AMgFAMQFgIQAGH2512pkVklJA6Q6ZL+507ok-kWROV
+Vvh508IcQ2tK-kIdK50GoMQ3PJ-kZk36g7Q3051P-L1T0H12JkZkG7Q-w+HOWB7V
+Vvh7ZN3JIT+Ww-w3a1+AHw5XXgQ3Gfx8KaWR54nIQEloI3AfWhFD3ooopooooooV
+VvhonpGpHpGpVpWpiUEUooyBhB7k1Ey-ssv5-IezFq2oyBhB+VC6RMhPY5KwhLmV
+VvhpGpHp1p2ooopooopklsZigEIoF7B+IGlQrCcQA+E2+Flm-2B4jwNJ3y6KSpYV
+VvhHR1+4V22st+G1WM04NLpaJvSd-BX3JAJEmFHAZ7qIB-94EU++lsO8jwdhk2nV
+VvhJBBogtGIZMCoTYGpN8Jod6GIZ6GYN5YpaKDIUvGHd7GTGYXoh5GpNAFiRAJIV
+Vvhl4F0N4EoF5EoEsEnF1Z-EpZJQA-G4UiCCmga4jsNS8SXQqB2QPB0UpGX6dF3V
+VvhZuB3dPF1hQBFlQHWp2o2jSRYHNJoppZBNOHJKopJkxFR-BBR-B7gLGP02x+GV
+VvhKWAv2pYZCFNJC1Idb4P+IFgAQQci8Ffy4NPETEBHUoGHYa81Qv70Z3Gn6uB2V
+Vvho4h1HEP17B3gEIoYo7zGHEbGrSHGHJHGHJLEPJxB-h6HGn6x+JCXEv3nUqCFV
+VvhcpCHIh-h3a1+Hlk6++6S4GPy5xblqVqWqVqWo5AQBIgtCHd5Cl2pwv2nB832V
+Vvh6u7H383cyFSDUMXr4MMOEHIeAYEOEzAlgpAFgrGXYtCoIw2ro0qVqWqVqj5NV
+Vvhk5kR1b58BX2dzWXFw-DN2ao3q-FR6xUILHDL33p0pVJREhPlJRIRLlNRIRHlV
+VvhRRMRALKVUR9W43cRcNKVqVZN9N8JUxbxvM4pUxUPKGq-hO5LsVlO4FYR-O4FV
+VvhYR-RMN9ELK4T5FLK4D5GLJ8-oZp1Qh7REqDGLGFKoJo49wM-+g0F5V+stXoqV
+Vvh8zkdos+SFhzFGhr2lh3fHFLICYoZpHVBBRMbLHLK7Zp3plLppJplFhJRQILKV
+VvhLM2jPKLE3l9pq2o-bqq2kdPMGYbqqBKKq2d7xhVA8Kq2o-fqpoo-UFPKLE4-V
+Vvh3hNRYT7hJRUILJLM34p3q-JRFRQaLHLL7poZpXVB7RJ7HFLIGolh7h-8rh74V
+Vvh+EpM+F0kZlwAQQci7mzx8xQRYQSN53FoMQB9Elknkn2QAwJA6wQw2wV9D66HV
+VvhZAUGFom-F4H572JAUKF2llR1L47p7QMMIYlVd0H38Y3QIPf25+fwAQ4g6Q8jV
+VvhkFkuk-l8gQJFGWlI7854EZUQNGJmlZB555F2MQV3F0loN256Fo6QV7AGm1dQV
+VvhV9H5H-H3D12HknklB9H13YRAINb55N5Lg-MV-5562EMfymcI5S3SYIAnuGIRV
+Vvhh-n-EO+JD+Flm-248zgR3-jFHB3CYYAiZ0p-EQ+w6kpJK16fBjodpy6uDRsnV
+VvhcxrXCXrSAuDRsncxouD+GF+RoHcxraCXrHcxA5CncxrYCXrSAuDRt1cxrXCXV
+Vvhpw0n7EpJK16fADogRBke70qHYb5LG0YRJ68XoJUv2GcVG1gHcnYg5GCHo-o2V
+VvhYx+R+uDE51gx+PGno-gwDE4Xo1o-ZB+x+NDG9-YxAv42ongMDJ8VUxQd3oq0V
+VvhQMDO70Uxp7E-cuHQCGEhZ67lq1Ud5KC0cRJ5Clp1Uv5HCGkR76DE5FCHo-o1V
+Vvhcx+QGXo-kvDE4nkx+OH1o-cx+x+NDG9-ZB6v4HongMDJ8VVBMd41q0QMDO70V
+Vvhchl4k-Qb-5562EQGymYI9q5F3-5XMS7FIJwJ3FLEBmU4CCIL1Xrv9B5-kQ5-V
+Vvhkf8z8z8ngfCmjWCmjXCjGicvx9snkgsXkgD0kwwhwh9GoE2-+E2-+E2-q1QdV
+Vvh-XXZ3ksxzGkE2-+E2-+E2-oh9T9T91kgD0nWD0nXCzHegzdCCXgfsXgfCmgvV
+Vvhwfwf8mkQ5-kQ5Q+n8UU++VsL4jogfZCmQr6JMKIJIJJ3AHK26GH12FDHxRAlV
+Vvh2Hl02YVH2pFJ3J3K3Z2bBmjZCa+F8kllmWsb8ToWSySnSxvbhvBvk-Qg-556V
+Vvh2EQGykII9q5F3-5XMS7FIJwJ3FL+10s2QQUF-UPv-FERgI5+DWw6++6S3nnxV
+Vvh9BUjpnshMxPWDKwxPWDKsXpi6xPWDKsXpi6xPnpi6xPWDKsXpi6xPWDKsXpjV
+VvhDKsXpi6xPnpmq6+ECUFlm-244jgN3-blHRENwI4+4Hg2QQUF-WPv4FENwIrHV
+Vvh7FaFLXIS7-HlHlEIO+ox15589WQDzFKr4D1trQ0-E+llmWsb8jododrXYxYhV
+Vvh6hMRMRERUR6RcR+RkP5S4Fhg3lcp8lMNC-cJ4HcO3-Uw4FAMHEFV6MDFFV6LV
+VvhHFFV2MHFFmtrHGFmVB352FRB352FUx352FVB-42lUwJVANCV343-Ys2nIJ4XV
+VvhIZAmMPO3YE4V+O2-cRp75OH0pJonhRex+8UAKkFlm-27DDcgkyqak8UALEFlV
+Vvhm-27DDwgkCqakw+LM+Flm-252jkdIJ3T3FLW3SAK2I5FwK7-q-AG0++05Uc9V
+VvhyGYrFZN5FoQsC1Ud6B+I2kU++Vs80zEdQqFJJ3FIMqBXQb8+q-AI0++05Uw5V
+VvhyGIf6HQnBHMlCJgx3xUN3EU++VsF0zcdsV+FDG2R2WgX4lEd7HIraZOs0FM6V
+Vvh++6S3E9w6hvE3VQA++6h0Ujj8XFFEH3V5Y4-2K2lEJEko-AM-lln4ks9yDtTV
+VvhGZhPGzGIZFgloB+D6+Flm-2C-jwKd6JaJaKHgB+KLUU++VsD0TYdQRCpYlBnV
+VvhApBHAd6Ggx5+13w2QQUF-UPv8-ERgI5E4Lo6++6S2+js8GsYN0Bn74EjBnAcV
+Vvh6z80EN3Eo-Fy0++05VA3ymR2cHRlAXImALQld21E2rw6++6S2EPu80BnBJITV
+VvhNK3JInQmg3n+1++09GUtzXX+DNHMLMHNHNHNDODODO9P68bW9NsYpzPJXIwGV
+VvhLH2qoj33oS6KLDsVVQrldQgeP8wQ-QYQ3gUQ7QX6lwf4wQFQLW54L1sVm3kFV
+VvhmZgwZNP5RTkA120kLA2A++6h81byCAkxVBRRRBRBRBUxUxUxYhYUfC6hbWHLV
+VvhxhKBHl7RAHPGwILFsVNQzW43nT4Zmmdgflk3mFkKm-kZmAX5mgPll3lS6QNQV
+VvhDW56L-58KnmJZgRpz+kAE9-TkUk++WocCDsrllqXq3pX2xEnDGBHo0Ygsf9BV
+Vvh5-2AnW9NsYpzPJXIwGLH2qoj33oS6KLDsVVQrldQgeP8wQ-QYQ3gUQ7QX6lwV
+Vvhf4wQFQLW54L1sVm3kFmZgwZNP5RTkA12g3b11++09GUpzXH0GVn5QQkXImn-V
+VvhRwkOEDPW9NsYpzPJXIwGLH2qoj33oS6KLDsVVQrldQgeP8wQ-QYQ3gUQ7QX6V
+Vvhlwf4wQFQLW54L1sVm3kFmZgwZNP5RTkA120kKAEA++6h81PyBQ2rDCJJnDNKV
+Vvhn3JQsrADLW9NsYpzPJXIwGLH2qoj33oS6KLDsVVQrldQgeP8wQ-QYQ3gUQ7QV
+VvhX6lwf4wQFQLW54L1sVm3kFmZgwZNP5RTkA12g3n31++09GUuzXb3HL3-pFMRV
+VvhDY4-olMRII5LEB9W9NsYpzPJXIwGLH2qoj33oS6KLDsVVQrldQgeP8wQ-QYQV
+Vvh3gUQ7QX6lwf4wQFQLW54L1sVm3kFmZgwZNP5RTkA121+TAMCQQcqAGby8B5kV
+Vvh2xYGPELM33oXq-FRAxQILI9K3Jp0pj3JpFpT3ZpFpD3ppVolRO4-oi6MKVqVV
+VvhZO5O4JYhYdK1qTrhUPK1q-hN9M4pcRTW53cN4Fo3cN4Fo3pVYh-RMNwR3RMMV
+VvhwR7RIc5GLIBmoZp1Mx7R73PFLEMjlU20g4X50ssv8mEqzGb2WlkQ7mhrFGdQV
+Vvh2XC3l035L4NZm3JQdDFQknLC6anW7QwWLE5lPE2JoiVhBRBh7h+T7R+GPD2pV
+VvhnVJQoJLA7ZmlVQYOL58plGkZkHl5UwX0nNoTHILJLJHJxBBBBQiwoQekLgU8V
+Vvhst+d71byC9DJHILIHJHJHJDKDKDK9L68TxK4l4ZQN7L6CDL78CBQcML93zL+V
+Vvh4VTpk-ljKmlZZAPwP4KIljKmlZk-li7Q+P3Zn-sqL93zL87pmHRQV5L5Fql5V
+Vvh9xMUg3v70iCE8GEtzXX9DIHHLHHHHHHIDIDIDJ9J68fxK4l4ZQN7L6CDL78CV
+VvhBQcML93zL+4VTpk-ljKmlZZAPwP4KIljKmlZk-li7Q+P3Zn-sqL93zL87pmHV
+VvhRQV5L5Fql59xMf-WmUfXY0YYCDsrlVpXp3oX2x+nDCBHn0Ygcf975-2APxK4V
+Vvhl4ZQN7L6CDL78CBQcML93zL+4VTpk-ljKmlZZAPwP4KIljKmlZk-li7Q+P3ZV
+Vvhn-sqL93zL87pmHRQV5L5Fql59xMUk3b90iCE8GEqzXL1QxZJLLxZPLJJqHQkV
+Vvhyj+IVhBdLJGJpnXpq0XXLN43qVTpkO3zL-pTKmpJZBLxLJKIpTKmpJkRLWL-V
+VvhgKLP5XNRcLxRYbLMBppoRRN5PHQj+J8k6Qk3lloK2HbyC-D0H-L-H0H0H0D1V
+VvhD1D19261zKJvvKKrLK1E5wo3lloK2HbyCBDIlQH2lBDHok20+E64+0FLjU73V
+Vvhhp+Yg05C-QQR3V2szXS-knkJglCHArBHId6mgW5-22jKJvvKKrLKg-jD-QQRV
+Vvh3V2qzXIXQnJJ5qJVJJArA3rKJvvKKrLKm39E11Xa9WUdzWXRoE2BBh-hBR7hV
+Vvh3RFR-RJQLKKpppdRV8LMKS7RZMsZqZTXLOrzliBZqaxZqZRRZbxRZMxRVNLLV
+VvhKZpZhRJQLILELHLEPESE29rR2A0AoEk++WocBTsooIcRhr5P6pAhgLTP4Y+-V
+Vvh4foxnGo4TJKV3RMv2ZpVkGPJ5-BRIQ33p-kIPH5-JRAQ3ZoVkKPF5-RR2Q43V
+Vvho-kMP-kNL-kOKlkOOVkPKVkQKFkQO-kR-M5-oJQQwR7K5-opIQwRFI5-pJAQV
+VvhwRNG5-pp2QwRVg5NLD5OGnqXdRcaoBMaoBQKg4PG15589WQuzHX+DMHLLLHMV
+VvhHMHMDNDNDN9O680Qx5H8GolokIlHlHkolIkIlohAZ7L7JzL9JTLBIzPBMjLDV
+VvhISVgxVLDIi7gpXLBJ4mqLpmpRQZNH7GZlphQJQ7ABAJA3AR9H8Fontkkg4PHV
+Vvh15589WQuzHXADLHKLKHKHKHLDLDLDM9M68CQx5H8GolokIlHlHkolIkIlohAV
+VvhZ7L7JzL9JTLBIzPBMjLDISVgxVLDIi7gpXLBJ4mqLpmpRQZNH7GZlphQJQ7AV
+VvhBAJA3AR9H8Fontkkg4bI15589WQtzHT55NDLLJAHonAx2pDD8GnGggkQ2EkdV
+VvhnoRAd9H5H-H3D3D1H3H-H5GomIZQZLxQhJxQpHxgpWxQxFu4nq3QxGsanKBQV
+VvhpIP9NTL9JpmJZAZ8L5KplJkYkolIkIlohAd5HDb1k4DJ15589WQqzHHFGVqbV
+VvhQRcXImqVRxcOEDeRt5HNGopYo2p1p1oYp2o2pYhBV7LMJzLOJTLQIzPQMjLSV
+VvhISVhtVLSIi7hlXLQJ4qaLpqZRRVNHMGZpZhRFR3B7BFB-BN9HNFordoUk49KV
+Vvh15589WQrzHLEBnr3JRfqJhdJLQBn1tbSFoqIhBNB-BExEx7BFB-BN9HMGJq3V
+VvhTpqZLpr3Dqr49prZ5cPSMJrZ9WPQMpr3FhdZxRdLLMKIq2dRNPLILFHGHIHEV
+VvhHKGoqIRBuR8kZxUAQQci7mzx8xQRYQSN53FoMQB9Elknkn2QAwJA6wQw2wV9V
+VvhD66HZAUGFom-F4H572JAUKF2llR1L47p7QMMIYlVd0H38Y3QIPf25+fwAQ4gV
+Vvh6Q8jkFkuk-l8gQJFGWlI7854EZUQNGJmlZB555F2MQV3F0loN256Fo6QV7AGV
+Vvhm1dQV9H5H-H3D12HknklB9H13YRAINb55N5Lg29N1++09GUuzXX+DNHMLMHNV
+VvhHNHNDODODO9P69vwKg3LlpdQYvvCL85-H750xQUQBAQQJAIgJAIQRA6gZP9AV
+VvhJnnw1GT2g29O1++09GUuzXXADMHLLLHLHLHMDMDMDN9N6A5wKg3LlpdQYvvCV
+VvhL85-H750xQUQBAQQJAIgJAIQRA6gZP9AJnnw1GT2g2PP1++09GUtzXT55ODMV
+VvhLKAHp1Ax6pDE8GnWggoQ2EsTlOkJT5KZmHjgtQcQ3AYQ9pm-kolllIlGlIlFV
+VvhlokWmJgglLDDkB7wEA-+r+k++WocBzspo1QxpJLPxZPPJJrHQk+FbxGh-LpZV
+VvhdRUvvRLN5EHM5FxRQR7BMRFBEhFBERNB2hVP9PJnrg+FTH0kMBoA++6h8XbzV
+VvhCAoxdBZRZBZBZBcxcxcxghgUnDlACpT7OKmXk3mWkKmFkpm-l4lllKlFlpl0V
+VvhlqklmKkFmpkFmqgQpP5BOFnqQh-L5FNFoqERBX5JMGpZ2RRhbg3RVhDwL+16V
+VvhCRs8++6Z5mby8DpBNxnYLRpR1LhOOZhdL4Xpo4RR3LtJoKNR3LLENpo3VQO3V
+VvhhdKLfKnIoSRRlxPxHF1+cxwFlm-0Cmjx8MS-p5UMhGofIaJYAh-KEmJ96Hl9V
+Vvh6HFB-PHEJ1oYgx71HHCYonAxEuDIAi7BIdHJ6YpVZBMGxRINLJ2araq3rpq5V
+VvhrLptqtpR1LoB5GpR9BDIovoxHHoB5KoRCxaxNxpxVhthVRxRbprqsxV55MPLV
+VvhFmpqzLC0pn2xJ6DJEIp1ZBEmLGCZoXAlD1glD1EYFokYFoIZoB+Zo44MoVa6V
+Vvhg3qM1++09GcqznL0Bno3JQvqJgtJLEBn+-4TlACpT7OKmXk3mWkKmFkpm-l4V
+VvhlllKlFlpl0lqklmKkFmpkFmqgQpP5BOFnqQh-L5FNFoqERBX5JMGpZ2RRhbgV
+Vvh3RVhDwL+k2nU0++05VgezWZHqoqZqYqoqoqnr1r1r0rG0BTIBYo-gvGXdNGJV
+Vvhd7CocQHOsYoglKGZV7KIVOFph5H2Ji92JfJF3OJF772YAIJGC4VoAA-AsEU+V
+Vvh+VsP8jsdp1qYqJqIqIqIqXqXqXqmqm0ETIBYo-gvGXdNGJd7CocQHOsYoglKV
+VvhGZV7KIVOFph5H2Ji92JfJF3OJF772YAIJGC4VoD+Hy66++6S4mby8A5QDOLMV
+VvhAHpXAxEpDG8Go0gg5E28BxEqHE4nh8CZZ7KYYvGVlBfWHGn3N8K2ZNG3d5KoV
+VvhRAFKsgFKhJ2JdJ2YYGElFJ6sO5Ekk2TX0++05VgazWJocPRlgXImgLSld+k5V
+Vvhp1NB+PCocuKIZOGHh852qi7B9AJYdMGJZ6KYRPFol3PWl3OpIFKZIGGF7133V
+VvhIXVcR11EFyE6++6S4mTy7aBnpJKzNKhJLHQknb+HBYoPCocuKIZOGHh852+NV
+VvhsY+Fn3N8K2ZNG3d5KoRAFKsgFKhJ2JdJ2YYGElFJ6sO5Ew-AtEU++VsP8zseV
+VvhdBYI5L3VpSEM5J3VplERZ+eLp1NB+PCocuKIZOGHh852qi7B9AJYdMGJZ6KYV
+VvhRPFol3PWl3OpIFKZIGGF7133IXVcR11+IiM9XXgf7Vfy4LWbcrBXF54nEcBIV
+Vvhcm8IFNSXFOKoEvL1IQL2shFB-9rbN2qJRBRNHKKYpJhBJQDILEHHLEHGP3oaV
+VvhkVDE2ZcXClBN7HYKJHUp8Nlak1jb-lln4lMazVaMkrBogJGYB8IYhGH17R+HV
+VvhHItppIpJpTHG2oo-J93oYOBWo5+OxBJRNRNBPop2p3av5G1+DyU555AP3WfyV
+Vvh8HDKHJLJHKHKHKDLDLDL9M65Bh-2CXUrCIIvB2h1H19oo7zE+GtBJBJRLooVV
+VvhBB+JD-Qu4XMh-q1+DyY555AP3Wfy8R6xJBFRFBFBFBIxIxIxMhMURao2EuC1V
+VvhQtFHgoGoBAAjHEbx+-9YpIpJpTHG2oo-Iw3ncOBWo5P+ECc555AP3Wby885LV
+VvhDJLHAHoHAwBHcd80gb5E26Fh-2CXUrCIIvB2h1H19oo7zE+GtBJBJRLooVBBV
+Vvh+JD-Qu4XMh-qo1bf-lln4lMbzWN1QsJJPqJaJJUrA8dhF1csBnZ3CnF9EokmV
+VvhxBbx+Vt+32+II-Ho+F2ooJD-Qu4XMhRUq-ng-5562Ese+0YvGZd9GogwD1khV
+Vvh6374y7Ki+JFToB+RvEFlm-2C8jwdguGJZ7GIcuCXgf63J4y7Ki+JFToEo01iV
+Vvh-5562Ewd+0VlovKH2rAnIpAmYV8noEMYTsdPs-J4zF1E5Cw2QQUF2GQ-7WBnV
+VvhBJITNK3JInQkUYbslRs-J6zGk2rk0++05VYfzWfF5EFWm19AkHb-Rf4JYN6IV
+VvhUMAYomFBZBZBYxZBYxZBYvR1YpAYMtAHIvN1o3Doo4wIoetx7T3B71xB-3GoV
+VvhQvCHYwBHorb+9j26st+V5WPz7NGVoLQR2XImoFRx2OEBF3SNAZC76MCp2OCoV
+Vvh2OGjKofhBAFToGoEk1rm0++05VYezWZHqIq3q2qIqIqHqXqXqWqm01THBHktV
+VvhCHgrDEBTHEEzHGESRR7T3B71xB-3GoQvCHYwBHorYA+xwkU++VsN8jsdp1q2V
+Vvhpppopopoq1q1q1qGqG04THBHktCHgrDEBTHEEzHGESRR7T3B71xB-3GoQvCHV
+VvhYwBHorb+DzE6++6S4Gby8A5ODMLKAHp1Ax6pDE8Ggf8Vo-0LTHBHktCHgrDEV
+VvhBTHEEzHGESRR7T3B71xB-3GoQvCHYwBHorb+CDI6++6S4GPy7LGVZr4GBH8FV
+VvhRt4Y0mTHBHktCHgrDEBTHEEzHGESRR7T3B71xB-3GoQvCHYwBHorYA+rxUU+V
+Vvh+VsN7zsaMrCpJNxZOJJPBn0lTHBHktCHgrDEBTHEEzHGESRR7T3B71xB-3GoV
+VvhQvCHYwBHorb+HzU6++6S4GPy5xblqVqWqVqWo5AQBIgtCHd5Cl2pwv2nB832V
+Vvh6u7H383cyFSDUMXr4MMOEHIeAYEOEzAlgpAFgrGXYtCoIw2ro0qVqWqVqj5NV
+Vvhk15t0CCE6FsezmZnrYrJrIrYrYrXrnrnrm+E67hAFTZtZPKioYl8x9KncFH1V
+VvhUGL1MHabGQ+lyUXXY02S8jwdpXrIr3r2r2r2rHrHrHrWrW0SH2LtSNKpfh7AV
+VvhGjGpgu2Iks2Zkq2tdob+BTg6st+V5Wbz8B2RwxpRglDNAnpnIxId9H8moVo-V
+Vvh0oH2LtSNKpfh7AGjGpgu2Iks2Zkq2tdoYA+hz+XXY02S7zwaUrDHJJoTNKoJV
+VvhJRArABBAFTZtZPKioYl8x9KncFH1UGL1MHabGQ-KzEVlmW+RBjwdpXr2qpqoV
+Vvhqoqor1r1r1rGrG0Hz6Z3o2VB+tHF4zH-lP5Ex85Gx65HJWpDFVpjF-pp6hXoV
+Vvh6RfprC6xvlri6RsREs5HxK5IJFpIIRQZ5OLMk2Ly0CCE6ForzmZIpzbPLQuoV
+Vvhr2Jh317Hl-8Hd-4nZQGDHFFzHGFiNB7TJB74HFJYoIRB2sL2VPGI2NCo6aD2V
+VvhFh9cHPPKsh5Go2jz0++15Vcezmar+HBIorGnZ7GJUvFyF9JYdLGYV7GIV8FYV
+VvhSHKNMxG1h7CYZ7x8GDGoR9JYl4tolJH2N27YN1F2R1F1V1B2CI31KJJkk38sV
+Vvh05586-onzmO1Qx7JLExZPEJJoXQkljm7FR-6HECIoFjokQKloDGVojG-opMhV
+VvhHoMRPoERRG9Mx05OxRnWDSwRvW5S5IC-ozJVp3IRJ35L7FqZqB+VpkQQQlgBV
+Vvh4jcOgP4mce8XYtwtCHZ6GYcvCzCngv90kg5FoRUZxkQQQlgC4zcP2-+E2-ohV
+Vvh9Goh91kwD1kvx7CXcuCmgf8mgg5-kR1E9Ug7JJUX70fz8RVap56XIeCZJ6CZV
+VvhJLCaJKGZQqH2ULu2l9w08S+KH2+GH3fxE--Ek0QA0CCE6FsezmbEXKFmongRV
+Vvh2uDECZh8KYhOH1jbHMzQd9Kipol3zEHEk06B0CCE6FsezmbEUWoYRB2tHECJV
+VvhkuKodOuIl3zQfhVAFToGoQ+s1UpJK16j8jwdoLaBR472QhAv2XgR2vOXo1heV
+VvhKoheKYlPKYo2kvtoo2qD+RdB-9Kipoo2l3zFDF9Fk0wD1JJMAWwezmbFW66hV
+VvhB56oRB2v6HZB+uSJkvOZh9OZfdHEH2Lk5OvMHEH2Lx2x2h5E6W66++6S2l9yV
+Vvh8FG29qNVxpQI2KEFsq4lsZ4lIP3T4lIP3FgJe+Yh-JJK3+w1zkvGo07Q0++0V
+Vvh5VAGy0ZFgJ4lLlgJ4lLW4lLX4lMFFV3-xpTlNa76EPU7SkU++VsR+E+EoNU7V
+VvhT-+++nkv+E+EoT+COKFZPbFdNaZZQW-IHJ9k3KBjN4ZiNrBXO4JhNG-INJUUV
+VvNR4JsRD+ANaxiR4NVMqJWSLFZx+1e++1pxZ9kV
+Vv+V
+Vvend
+Vvbytecount 12760
+Vvcrc32 8c6a06c5
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.518pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.518pk_vve
new file mode 100644
index 0000000000..3cfa5d6573
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.518pk_vve
@@ -0,0 +1,369 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.518pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB16r+8+++2otni2+-mlD++QgHv-JEEk++XMlAjslmy6k2S7RV
+VvhzrrNrD6Kqn3xfmBhbW7Kpy6bPJsWZhDmhh2vTEwg3gww3wvmkqnHkrnDnQjWV
+Vvh95P7sWmKly6ghgLmnKkon5kJn5iQaKz2kQX6OY69JJUn8n5xA+2R+-HHXFTGV
+VvhPIPFPJT4palhRfPLSaq4fZPMSKq4dhRuPLOqpbhhJwPITEPGTGOuoxnJrx7hV
+VvhFx-hNgPLOqq4dhZdxhZsPOOCJhdrPOO4qLVhZdPMSKprdhNvPJSsocM-O+2vV
+Vvhg4t10ssvB0gnz156b-52ku90S2Qw-g6pCplHB8L66JVgdrP9RanKNQxJLEJ4V
+VvhoIFR71PHAbon7hEmPJ9lTJ6KpduhZhbrpGwapG7xEXPH7JomJh6aLF83o0VgV
+VvhsePA9+P891L6D2L495P0D8S3nQHHb016M2EACCMr9n5xA+2RE-HLXFTKPIPJV
+VvhPKPHPLPGPNLFPNPEPOP4qplhlPxhlesarKbXPSOCZhty7qraVhpsxhpdPRKaV
+Vvhr4dhlPPPOqqalhdR-hZR3hVR7hNhBhFxCB3w+IoE2RH6JoI8st+l8n5xAD+OV
+VvheBG9PMKqqJdhd8xhgusqr0fWPR8Ko0gdsqo0qTP1qKdRbxXNOZqTP1qS7h+hV
+Vvhbqo0o0RhwiBqrWXqrHVhodxhktPPGKqZZhVsXIYz+PD6DoM8QQcj815xAD+NV
+VvhWBC7PLKKq3VhZ6xhcssqqmXWPQ7qo0ciBqo0pjP1padRPxXKOZpjP1piFh+hV
+VvhPgM-GRnxbJ0kSYQAXXgsA1DwAQWQ2Qb1cgRsFnlKkXIwFQInH1L66JkKmbk4V
+VvhmrhgpfLDKZo3Zh37LGG4onRxArPIBqpGPrpGNhMZu5rTT7m-PFVTTFNzPFNrV
+Vvho4Vh-dLEOKnqdQxfLCOqnKk4n4kKmbkpmLl4lH7AJw6oD5W3Mgb3YQqQQ9UUV
+VvhG+k++XMjATokz6T6OASA5gRgZg9xL0v6P7P-X5Vjm5m+e--7-QQR4VMlzX1FV
+VvhS9HgxfG5oQ+bGUUstGISAjokXxbHbOs-FcH4RfNi88NcZcOaVAKWlQ8ZoIJhV
+VvhDBVx69WGGkllmXUlATokz6kQBsmOhglg3glABgkgJgggNgcgRgYgVgUgZgQgV
+VvhdgMghgIglgEgpgAgtg6gxg2h-g+h3f9GOXoaZB7cPFNso4MVPEN1BgxXBKnaV
+Vvh6bPCMGZgq9PAT+PAP0P9xgBgdgFgZgJgVgJwRgNgRgRgNgRwJgVgJgZgFgZwV
+VvhBgdgBghg7ghw3gi9X7dDmA13i0VA0U+09GMlzH1wf8bGvDPIsqmmsrP88DP7V
+VvhCDP6G4lpVgNNP2S6k89xUfW5HEuefI6vATokkRLDow7coskLorkj6JoG3Q9WV
+Vvh6Znm7Q9W6pnGBQ9mFQgYL0sWJQYZL0waL57Zki6bL37pkj83kmVQ6cP-8JkjV
+Vvh8JkGZQ9W8ZgeL0wfKGhQ9W9+Jmk3kj9-JGkJki6g7H90L0sWkp2gBQ6gFgFQV
+Vvh3ABgFQ-gBAJPX0H2RgGYfLgflwWLHUk++XMjATokzEpRBrq6iBVgXNHE6KqGV
+VvhoT6aq0oGBhQh5mFhMh2ZPJ9FwaPI9F7qomoT84oWoGZh2h5mdh+h2fP0oT94V
+Vvhgh2h-e9F9ESGoGoKYh2h7c9F9GRmoGoqQh2hFa9F9IRGoGpKIh2hNY9F9KQmV
+VvhoGpqAh5mq46h2hZV9FwheB2hhx5mr4oGrJo2rIlhl9XQBzoxYb0kNIwAQQcsV
+Vvh9nDwAQSRT1oLRwpQ3QdgBgRQRQJQZQBQhQ3QpPPBOZnpZgxbxh3ZsaoqBxBmV
+VvhxhJVubpLslTHQqoqFx3pPFNbnrRgxcTBSKnKhghg3gZgBQZQJgJgRgBgdQ3QV
+VvhprTFkxSQQAUxI+fXY12dATok+Ek-DGXETFPIP4pKhhNexhRdxhVctKq5xqq4V
+VvhXqpqZhNePJOqp4lh3x5QoxbKvKM-KBvxTM0kY32AQQcs9o1wAQSRT1oLRwpQV
+Vvh3QdgBgRQRQJQZQBQhQ3ghfPBOZnpZgxbxh3ZTFRDPHMzTHQapK5eTJQKpK9WV
+VvhTHQqoqFx3pxh3bP+GqVeSaZcB0VfNmMaP-JWQpL1JGR1L3J0R0L5MWWQdG7rV
+VvhnNJx53k0lw9+9EL+9FKmoJcx3dDGK1oqJRD2pA9KkRP+q8qcrJP6QJ69llspV
+VvhAH9xABvN+Fr6iBdh7hZhFhRhJhPqpapKpbp4pqpCFhRxBhRhFhNxHqpapKpKV
+Vvhpap4pqoaqKmBfOrRXTP3rKoJqqoZqjPHLNPHPMPILMt4p4pyBhFxPqp5cjRhV
+VvhJt7qpaUbXKNm5LoKEmpx8k54IA-cIkXXY0UTAzkle84R-mV6F1QwAnMx6VFHV
+Vvhp4ExNHHKInq2AxYmxBYmxBcWxRYWPRLRTPXPjMoRLIohLFph1KohHJoRWxeBV
+VvhlxlhpRvrtBlzqn3BZ-HNAZpo7hMnEHonEnDFBHFcFWTFUPaUg0tI0ssvB0olV
+VvhzH+TrmSsdmL0P-IYkqkY6wFgAmwgJgEVwwJgFSL4P39h56PNfDzCY9UxJEk+V
+Vvh+XMjAjokz6j2OAa9P9P+PAH-vHPB91LA92P993L993L895L795L697L499H3V
+Vvh9BH1DCL+9GJopQ5MX50sMJMA++6qAn9zADlwL1OQiPTCL-PED1xgwgFwsgLqV
+VvhnGlbmnlzP997xgYgdwQwjqlmnS7gIgzqkmo5kHoTP-9Hxf9ISWpTOGpbQxTqV
+VvhQhbqIhdo9PxX9QQHrTMGry7k2S7E2zDAiA-L2558GYQmzn1wSAOgFNldldZwV
+VvhVwVg-gVgdA5qmKmWkqm4mGlDP6T693P5T594P4b494P46KlWlblG3gIwRgIVV
+VvhP396P26ql0m5kmBgAwZgAXP198xg6ZP099P-7KkGnDP+7qk0nKgbOmnjOWZeV
+Vvh9DOGZd9Exc8qUh3b8qQh9qMg3a9HNGkKIhFYD-R0p4EgBY9JMmkqAhNWD1QWV
+Vvhpa6gJW9KQGlK2xRV93MGqDX5XNT5TOxgZhhQZRnomorHmnrWnGmEg67M1++0V
+VvhBX2lzX+TltlNj1f1X3P4T5H6T4D8T399T2DAT0DCP09DT+DESXoachBsDIRXV
+VvhpaMhRoDMQXqa6hihmBthxxxxxhuBmhgWPOAbq1FxQaPKBbp1VxAePGCbo1k5V
+VvhnmkanXkbn1l5mmlamXlbm1m5lmmLlXmbl2mrkamMigSpz3kQQ8VQKEk++XMnV
+VvhATwkyshfFOjMg5jpgqjoh5jXhbjGhrj1i5imiaiXibiGj5hmjLhXjbhGk5gnV
+Vvhk5gmkbgGl4gGl5cgNsD4S0m5Mgdp98R0n56wpW9CfDXETGupPFX8yth+g4VOV
+Vvh0QQS90Alz1+jpGf2MrlbBgRYxAVZD6NHm5IwVaD5NnlbQgRcwgNd93PETEPEV
+VvhPETEPExh-h-x-h1qo4o5o4l0dgIdT38KlWy4lmRgQqT5Bam1JgYZT6BKmHFgV
+VvhZ2P6Iqm47wRmP3cTpV1+Eq26++6Y6-zx5ajKohBLPES3ltKrdOSohQLSt3pRV
+Vvh5GRJo4VPOZdfKKlMxh-LsaoJKDo-336KgGFG7d2pAYNWKJlcZuF+k2tW0CCEV
+Vvh80Emzn3ZrDg-3U2ioJ+GJrp3HEoJ75LEIHhPTFKaoodRFNxRJMLJNzLKJyNRV
+VvhNjNRNLLJNzLJK4opZh7OEGoIh08pkoFao1PB6dT+k1NX-lln6-gTzVv8oR8aV
+VvhRMK5N8RJdoKrBR-ILMPMxRXaPNLNxhZRZhEXLI73oWNR+cKnZqDEoBFsk2lYV
+Vvh0CCE80EmzX5QLQyk2K+GvFLJRZoh+po4QmL3gVKooLdR7dLIKDLJJqpJTppZV
+VvhPaPKJzLKJqpJXppJZRBeHHOZoLl9AJo3QnPEo2irSw+uNEQQQm+P5zsShxLBV
+Vvh-JKoZ7GoRB-3LEF3oJBR70PGLlLHjH+osxbpqKqTLJ6pomJBAaHF82guNYoAV
+VvhpLX+7KM2st+K4H9zAR7hCx-IGZJcJLV4RpNrG3RNCCZR5xPCr3pboDpLg3xbV
+Vvh0++070+jzVzCH+RranAoNJRIJ7FYF9FHFPKzH-GiFQ3OxA39Kpk2hA77H1NJV
+Vvhkm8wIJT55G9GDG9GDFlgD6kQaghokrJANXH7EomJ5YH9EYmIFAR4H3G2koddV
+VvhP-lQOv0kAaU6st+c7H9zAKLCyxBhHg7RFLT4JPl3AqP0IWdQ3G4pkJ2Q3Q1WV
+VvhP0L+v4L1KrkLLwIwI9+MOEFlm-EEATwkJ9OSC7Oo0FJjeajghORBEA+cOUHXV
+VvhY-MHDkEko2oKnXX4oI1+PsjEPU2h3H4Z3Mlo3qILN0NYF4Fgdr1+Kag6QQcaV
+Vvh6X9zAKLOyxxU2CoJ+ExNo5KsdQL3kx3PDGKXopYxFMDJJmppMhVJ9NJ2q3BRV
+VvhVFAIps7RNZLJJopJVBFMLHKIopdB7OLFKooJlB-QL3o3hR-dSsDxFB0k2Kk2V
+VvhQQUI2H9zAKJjiqkCrZhpph+tPEpJK1kt5zwSNLTLmpiPenBaIqPK6eImdRIVV
+VvhhH4ppF5J2RLC7U24+ELC+II-3E2JhxTLLk2n+HA-AB+cPUXXY0UZ5zwSNLT9V
+VvhKugnNhMWdRIVhRIFpQsa+ELC+II-3PTLLk2n+H1+Caw6++6Y5lzy5gTMoBBLV
+VvhLEGohB-7HGFop2Lpp3DWLKISRhNVLKIap4Dpp3JR7LHGGIo2h9HEJpox1MT+V
+Vvhk2pk0CCE80EhzltZRvhB0974P42uOro4dh7OLIKJp4VRJMxRJbLKJyNRNaLKV
+VvhJzLJNppJVRFcPGOKoZdx-PIGhQIYNh-InGJbpSdE2LqzpBP+I526QQUa70ryV
+Vvh5gSGogMx-aBHlO71hQ6YdR2VGKoaVhBcLJJzPJJppZPaPKJppZTqpJVRJMPHV
+VvhOJoqdR3vL03QKW7R-aApoR-3p5RE2idE2LqzpA+bQUN2FVkN5zwSJKMuK0d0V
+VvhF4ImFaEWJaEVNaEGR5x-5KPKvILKTEzJQA-+QkNDdVkL5zsSS33h+WJ6N1l1V
+VvhHEAnoH9WHG6ZoG7xGR5FfGbHbGfFoOp42h8BBxFzosocoX3R--Oo6mBpAYlFV
+VvhS51+7LE4CCIQ3Wnz8tsmpi6xLopDLGTFWzq5vGLItZYaKFXpQdJ1ih3Zk0ZpV
+Vvh0CCE80ITzltZoZPvavPFPCpJoZnpoKlR+FLEH03R-O6ZoJQnPGl9m4j6C5M6V
+VvhQQca6lzz5jocl6o5ZR79LGD4oHoDLF9GsZkhHpchPWK0qDJWqKExfpEhnp6hV
+VvhqRvr+EsZ+GwxAAVgRkiCCnEl5zwSzGDEP2WLhsOpo3ZgHFCplB2gL3o0oDKpV
+Vvhkh3POmoZYVGWopYVKGopUlKGp3QXG0pJQXJmpJMnJXpZIZFWppIZJGpqAbF1V
+Vvhq3AbF0qJAbImqjIGZ09PIGZF9QsahhvWHEE-+h6h69V9S+VlmWMX5zwSz1P-V
+VvhO7WqhQ7PH2KXlKYgRM97JXmZEwhWDBIWnroTPGLGPEXCAKnGBQkZL8BZm1RgV
+VvhMtL48pl1k3kXkJkJk4a9ZDkMkfVFSEVlmWMX9TwSz1X+GA3tL1Gpknk4kXkTV
+VvhL091sZk0lTKWly7M97xK98N1mzJ0nTIWndnzTFsZozDIwhExHmp0m2YgRbD5V
+VvhNmm4MgZZD8F2n8nqnQ-4SUQQQm+O5zsS9xgalHHEJ1o4Eh3IDEJHlZ94MgJmV
+VvhhM8apppppppqppppccKmRf7pkaLE7KkoPEB3oGFR2nPFApoI7QQTr-0s7E+8V
+Vvh++6h7X5xADq6X0WKlZZgRMP6GDP7CCBgccsqmmvFRhCQjwf2c6+-1JJMD1ImV
+VvhzH4ywxPppDTGbF6Ko07wwXPC75nGJgkaT97qmWVwYdP68blXg5lGgLl1gbkmV
+VvhgrkXh5kGhLk1hbjmhrjXi5jGiLj1ibimiriXj5iGjLi1jbhmjrhXk5hGkLh1V
+VvhkbgmkrgXl5gGlLg1lbcgRtD6S0mLQwdq99RTpXzM5O0kQk6AQQcs9nDwAQSRV
+VvhT1oLRwpQ3QdgBgRQRQJQZQBQhQ3ghfPBOZnpZgxbxh3ZTFRDPHMzTHQapK3xV
+VvhL0xGlmL0t3mpkjIgQZkhJlPJMi7xBnPHN5oLLqoKTqnqZgpfP9P-L9L1L7L3V
+VvhL5L5P1P8L-LBRroQDLb5g4+10llnAWomzX57sXrS7RjWTNbMwVPL6bpj6qpHV
+VvhBxHmJhApTGwbPFBroD8KnnZwvmhgovTAsWkKmy6gBgYgFwXmlKlmlblj95P3V
+Vvh96T2wgZgAgdw6ghg3Adg-Qdtb4dTkvlkc0c20eehA0YlzH+SHA6gUVD6LXmWV
+Vvh1Gsmj0gyH+gyAfkUyyAgdTm12gUWtAkEi-Q31++0BWwlzH+27bmLkSramKkMV
+VvhlsPwVwWkOUM9XXgo8n5wA-r0rHT9d4nbFwxYTDJKo2Jx+qTDBqo0RwwcTC8KV
+VvhnXVwsdTB8anGdxZxZhZxZxZhZxZxbqqYr0r0r0r0r0rD9C9+9D8mnnch+e9FV
+Vvh8GoWXmoXQh749GJGoaEh419DcxkhoxkUg2I51558C0wmz13bmLewKrkg9-L2V
+VvhkABAKgEqG7V477NqZ-D+NZk4kJJQ3QBIH1H2F2kol2BAEjlo7BZ-HPscqrrSV
+Vvhnqquojn9g3g60ssvB0glz10jnAuhTZPKjElwdmMLlaJYP0NqNfO4RdOKVbOaV
+VvhZZxfOaBvOb7g-fMSNw-fQKk4hWSqdnxfOaJeOKRdO4ZcNqhbNakaJYP4Qa3wV
+Vvhf5o9pyJhSgvwmP-H0EllmXUjATkkkDnB8hjZP7P0P-kw3g01P+OqTWOqdduKV
+VvhddOpddL+saZcP-KKVQ7cNqkpVbL3JqNgJLNZlpNZL7JKFQhXMpna5+ogHKfPV
+VvhtKquojn9g5U80ssvB0omzH53jHlQtrT8P-P4P3P1P5P-P7OqmqbqnKRgxZxwV
+VvhxoPFMyNx3nPFNDTDRTPDNbnLRgpdLBKamqjpmpkJmJkomIl3lplIlolnlnm2V
+VvhlImHlHgdD3CIyXkncj2e918W6eD-CW6u9-8X91kQAzkg50H0kg2Uk2+k0++0V
+Vvh7-okzGurph1GJJo2Z9GoZB-5LEJYoYLWLGIyFRFFvHPIPW3RFGPGMy7R7JHGV
+VvhFZo3RB-7Goh7HEJJoh1KSw+OAEU++WEL9zcikhNBJRBvmL7N7ppS+LLIS+6EV
+Vvhk3km0++07-gjz0uMpAo2Ne8pUh-K9FNGoaAhFWHGMLo45snGzEMKoK7B3xRyV
+Vvh9LPLPMLMPMLMLMLNHNHNHNHODODODODODODF80oWQhAa9H7Wp0IhIY9JBBcxV
+Vvhghgjr01+KHA6++6Y5H1x9eXKoB35OnhN9ENmoaNQNLhosblZOrNATNxhdRdhV
+VvhdRdRdRZRLtrorYrIr3r3qqqbqaqjQmp53h9Gsh5GoK3x3mLGMmpKEhBa9GK1V
+VvhlOJqoB5JWw-JB+U++WET9zsiqDDSHRxRlhjrqW3RYlLN6Zq0BRQnLKB3pWJRV
+VvhIpLIBZp0RRArLGC3oWZR2eLECZo0hQ93gwKmo3ch3NDFKGoZUhBLDHJkASbKV
+VvhLQTJzK1+I1I6++6Y4n1w9X9J7KdZq4prpcp8og73oyYhkZTE6wcWBZYV8YVAV
+VvhFnoIQR7RZRfWLNsa7B7VPFoC9FoB3FPGIj9IJ0ooIh759EK1d9FZoApLgA-UV
+VvhBUU++WERADoiobpgoZQx-8CoguGaV8RohqKrNARJo3NBjWLOLPKFoJO7NARXV
+Vvh82NW8YJW52FV5FEsoJ7x7GxxBFPIISBhFiAJp47BFj7RBIxB7KHFFoo2ZACoV
+Vvhcx-KHHnKSw+zBkU++WESATkj6hxBrxwhsjrXDM70q0LmpmIhQawhMhshshvmV
+VvhrWrXrWrXrWrXrIrTDRxBnpqyBRjXPOtrqprHpA-ZC+U++WERADoihxPEoYNRV
+Vvh+uKXo2Ux35HGFXooLXHIF3ooFRApPFFbkrWYWLGdJAcXoh1IjLfJoB30f2GtV
+VvhC8QuZYm2HGQYp47BJVDLbLbXq6q17BQmHKEopHFBEqHGC3h9JpoR1JWkk3stV
+Vvh0++07-okzGurpgopJR-7Goh7HEFooIPpoYHpop9YPIISBhFVLIPlLHQZob7RV
+Vvh2FMooF3YH-7ZGW7aG0Bbl4a4LF4JqpqaqjLPFZo3Lrl4SoRvC4guD1guHEFZV
+VvhovproQ0-7+U++WEPCjkpoCAhaBDEo2AXGXIZC0Qb7WUc70YcAXYd6Wcd6WcbV
+VvhWWOS8WKt7Z377n7M9EJmo4Mh3o9FcGoh1Goh1HnHoB9GoBDB6XTG7KoGNR2bV
+VvhHF826s823L8Osa8NQdW0YVCWYW8WUm8WUY8GQoC0QaBmMcBWEuIm7B1BGBfXV
+Vvh990W7UllmXUkBDoml3rMqoEhYr9LFmpi779IspYhHpUhJL9KxK9MFGqJAhdGV
+Vvh9PIWkQGZ2g92hgOQBQZQJQZARQUwRgUgSAQgMWL4946qlGlGJQEgIaP093BpV
+VvhkWl1ZQ+gF7OmkpdO92GqUgFQ-b92L-JWl4kZEgJg7X93P1MGlal5lMlJlW3gV
+VvhJQIVP3P16pl03Q6YL06pk0NPBJcrJpVKGQ8w10X3Rw-+DkSCCm6NAjklWR5FV
+VvhZ6Jnl39FImop7B3FPEoC943R-WDFLKPKLKPJLKLLHLHMDMwxXnqT9NDNtm0TV
+VvhHLPJsspKpoj+DXs5XXgW4H9w6uHLPJsspKpo0TtmqTDN9NwxVBUxVBTopZpZV
+VvhpapTPJPFAao35WPB1EnFEZom7h2YL1NbKR5EaP+F2+Flm-EE5zwSNKyeOympV
+Vvhdop+o-wF-CCE3VAh--vKy9pi+V+EIldFKAR-RZ3qEaN2FYP8Rw-T4EU++mEUV
+VvhAjwloMqQpJJh77LEGphPOYo3bZLEO3o3ZQOJlOKphOL3Vbh6aoTHJqoJZR-PV
+VvhH3hPL3fpo3bpoJXpoKRR7LtpoaNR7LJFZLJ2NMIpNMIqFNIpJ7N1FJhOOqOEV
+Vvhk4MO0ssvB0sTzFtfoLnGb7K3N4FrVICINtIXh3Sco2FvTEFJlh3RVh7BVh7SV
+Vvh9LLHLLrQ+JWWLSRpr4dRhfLOPEHNPFLMLGLLPGLJXFTIXFTH6KoH3B6WP1BBV
+Vvh+XSIJ97LNLJYXFjAXHS+k4kP1558C1ATzVusp5pAnB-KKIN9GYQtGIo1IvFoV
+VvhoXAx-3LGEIo2FRFx3HLITGEZpLoZwJpZovpZovzK+HsxNRZRNRZRNhVhFxZRV
+VvhFxIWLIXI6poY3BAZHFEooWNB+pHE82d5GmdKKJNB1B1BCBFsk4cQ0++07-whV
+VvhzWLS9TDT9TDT9TwhFo9Gox-LLEGohAKIkVFoo073HE72FAB2BQ7J7ABY7A7oV
+Vvh5pgceWadCOYefs8uQgIIMwEZIgIoEwF2Eh-3EWo2R-92ZQGohB-LLEox6YTIV
+VvhwhwhwxwhwxwhsA0R5EtlmY2wATskpD+OrW4R0BsXPILR74pJr0FhNBkYPLDPV
+Vvh7KpnqmJhUhcpPM9OwaPM9NsWRhYhQcPN9L84kU21Vg6-1mZg9TCKkhzmdfDSV
+Vvh8qZRvk3BogOJrGlfDQD4gxnmo4khjW9FP0cjgh7hcfDGPO8moqqWghBhYuDHV
+VvhPNCWp4qGghFhUu9JPMCWpKpoZBFhNMLIPJNdoMoMDxBU3X1+iFsECCN7EHDvV
+VvhAROU7k6BFr+JoqiR8B3h3xNR-h7xRPPIPMGapKqHZhNhYsxhRhcbPMPO7bq4V
+VvhqWNhZhgYTNPP74qaqmFhdh6b6zTPLG94r3oWhxlR6fTQLFCrr3o2hxlQKzTQV
+VvhqPTQL3hxlR-9TQLFCzTQLG95qpoWnrqpoWYVTOPR9mTNPQ74qKr0FxVhkZPMV
+VvhPPBLpqqnNxNhgcPKPOCKpKqXdhFhZ9PGTML4oLpboKiR8RBr+KpU6RaU3w0vV
+Vvh5kllmXUjCDko+PA-wU5nqtcxbGQhRrQnpZo36hJRFhJRNRFBdB7Bdh-Ra9LOV
+Vvh6ZdBcYGJqHFLLO7ZNRYbJJqHVILN8JFRUeIqpndWPL8q7RQh-FPKDEnK9FnJV
+Vvh9GnIDGnI9HnH9InGDInG9JnF9KnEDKnE9LMJkhVGKnq37e9MMaYhZXK1qJFMV
+Vvh9OJJMhdKJHqZRI9OK3AhhNIHqZh-9PHELPHGHOHIHMHITILIAZo3pWFrTKBxV
+Vvh9MCtqm+TA-iU4022QQUI01DuAWEq5RuVMyd3tGqYBVlFMo8U41k2QQUI01DuV
+Vvh6mEq533XHOtGLeEydVrFMo7kHGABJJUwAo1wAN1WC3CLsnVHZyAsItTXC3CLV
+VvhsnVHZyAsItQsIsPS4ey7C3CLtXVHZzC3C8-+ssIsItTXC3CLsnVHZyAsItTXV
+VvhC3CLsXVHYA1U7EpJK1knCjkpVE2GmRsvBHr2crDOGXYxV8GYp4cvPESYkVR8V
+Vvhgx+YkYgx+dBXhB2hAwHF9GH2oGoXo2oGoHoIoGo2oIoGo1oYoGkxBB2fHHHFV
+Vvh8npHo0gxMx+eHKH0cxUv8XqIcdHOCGcxkrCHrXItHTaX+GKn+XD3+FCtrYcpV
+VvhDRCXQxguCGqYZ89NCXghUuH0pYcx+hMvDE9JCooGoohB2hAwHF9GDEHF9FHEV
+VvhHF9FDFHF9EDGHF92oYoGkxBB2fDJDE8opHo0gxNA8Xq1geHMGWcxct8Xr1QuV
+VvhDRBHcxyQ6-3Lk-gb-5563+YKyX2YFWy-pFUY2iBmsa7j7WMpBHQKk2Yc-XXZV
+Vvh5-37yXLG9F9F9F9F9FDEDEwx+x-B+x-B+x-B1noDHCBAtIlQv2o3oCJB5XHFV
+VvhxB5noIoHoIoHoIoHojDGDGDG9H9H9H9H6AV78EMstFkFGTkp9H9H9H9H9GDGV
+VvhDGwx6x3B2x3B2x3B5noTHFsooSJB-SnEH3tQHCBAxB1no2o1o2o1o2o1oDDEV
+VvhDEDF9F9F9F9F9G1+D0c6++6Y4lzwBQtXo1UsAJQrhXNVR1FoN-FdElBB3-2IV
+VvhpLqHqLpI2FHFElB7N-FYR1FlNXOrBp2sC1oCMw-+2GgAQQcs9n5w8K5a2q5MV
+VvhtVMHMQ+P9+Flm-E73jc572MjURIM7-9XQi7WPmMaBHIr3f+C9UFlm-E60Dc5V
+Vvh71MREKB0k2Uj0++07-h6z1LQ9xgy9ODOsXqi6xfnqi6xfWDOsXqi6xfWDOsXV
+Vvhqi6xfnqi6xfWDOsXqi6xfWDOsXqi6xfnqi6xfWDOsXqjDP9Qg-Iu-5563+UTV
+VvhyVsYBVp-Mo-UEq5I3XEUg02v-5563+UhyVsYBVp-Mo-UEq3ln-Qasq9WIZBGV
+VvhIp7GIq3EG+sx1558C0wFz-ad3t+-URT+aI+AQQcs9n9wAROE3h6--dPQHGHNV
+VvhHKHKDODIDQDG6-+h+U2WgU30Yx-h2s99kb8pJA7Wd7CmIeH0gY8Jku6mZR3bV
+Vvh6WZR7L6j83opQV8Ip3VCS3p3V7HIK02cLHK02cLHK-6dLGJm6dLFNmAdL5QXV
+Vvh8Ylr3Gd7AYMZ8pJ1J0QghNUx-eKm+V602U6H+UA-3OHQPFHLTIP7qhQ-5BCMV
+Vvh13g2QQUI0oXtBPfhS9SM13o2QQUI0oXzBPThS9f+4q+2QQUI0FPvAK3nIpBWV
+VvhPmPW7iAb6I8-pT40N29E3F66++6Y1+rsAFC3TqRbNqRNGIYuCW1E3FA6++6YV
+Vvh1+rlAMC3xaJZNKNKFoUsCGf63FE6++6Y2Ebr9FoYhtEYJ3IJSNT1oVXM5FI6V
+Vvh++6Y3ErtAS6U2p+FDl6-2WDHAvB2Z3JJTNjJU6U73UU++WEN+zgdoh+M3kk+V
+Vvh+XMB1SkmFKYnIm7m5Y8G2b6XInZZEB+I4+QQQm+F1TTyPpmAPJrXKpZm+ECbV
+Vvhk-AU-5563-26zljF9EKKZNO4dB2R6A+PLUU++WEF0zQlUR6x-PSI35EoJ3EoV
+VvhR0CH2vHG2A+CLkFlm-E50Dck6nIRwJAmo-px0++07-EBxn32VC6pRT7LIoV1V
+Vvhx6F1Yp8WItBVgK1+3bs6++6Y3kTu9pKlK6AuMnpXBeAsVFhJo-Fz0++07-I6V
+VvhyH+YZ1Nq5XVM3bMoZ00UOQ+A++6qAIHyEvIx7R5qoKoKoKoJooooonp1p01rV
+VvhsXoi7R1rndnT6Kn13wjmBgfW7KmC6bP4sWZgHmg4kXg5kT8mP+CmSzwfFfsvV
+VvhFvrvuwsWi4ii6fdfXW8wOqwftfF9pv7Ppv0PeKypgfaUOQ2A++6qAIHyEwAxV
+Vvh7R1qnqnqnqo3o2oIoXoXom1usXoi7R1rndnT6Kn13wjmBgfW7KmC6bP4sWZgV
+VvhHmg4kXg5kT8mP+CmSzwfFfsvFvrvuwsWi4ii6fdfXW8wOqwftfF9pv7Ppv0PV
+VvheKypgfakQA6A++6qAIDyEgkE2n+FLTTREIqoBBZ3HLFopXYxIvDI512+2lsXV
+Vvh+FsZrzTRbQwVPPALqj6qqS6ZPLsWRhLW8Koz8qoHhx1mkKnnkLnj91PBD1TAV
+VvhzBmy6gRgbW97P5sWmqlT9BP1HAT-LAStmNPwH-m+g4X11++0BX2zzXv4KlosV
+VvhUx4aDFlx2qfFC6olhE+HDWA-5WLTxxqRnm3hglTOwXPNsWJhTW7qpS6dPHwfV
+VvhPFCroD9-PDD-TCwgBgowBwnwr9sWlqmS6gZgTW99P3wgpgBAlw3Qlvb7ZjlAV
+Vvh560kNAEA++6qAI5yEAF7HHNqoSC3XFNqooZ++K9WA-5WLTxxqRnm3hglTOwXV
+VvhPNsWJhTW7qpS6dPHwfPFCroD9-PDD-TCwgBgowBwnwr9sWlqmS6gZgTW99P3V
+VvhwgpgBAlw3Qlvb7ZjlA56g4f31++0BX33zYH8LSbPBHqWQhbY8GqGQhcpDPbSV
+VvhI+2rsX+FsZrzTRbQwVPPALqj6qqS6ZPLsWRhLW8Koz8qoHhx1mkKnnkLnj91V
+VvhPBD1TAzBmy6gRgbW97P5sWmqlT9BP1HAT-LAStmNPwH-mA0RlUtlmY2wATskV
+VvhpD+OrW4R0BsXPILR74pJr0FhNBkYPLDP7KpnqmJhUhcpPM9OwaPM9NsWRhYhV
+VvhQcPN9L84kU21Vg6-1mZg9TCKkhzmdfDS8qZRvk3BogOJrGlfDQD4gxnmo4khV
+VvhjW9FP0cjgh7hcfDGPO8moqqWghBhYuDHPNCWp4qGghFhUu9JPMCWpKpoZBFhV
+VvhNMLIPJNdoMoMDxBU3X0kTQQ9XXgo8o1wAQWQ2QH1cg7sFnk4kXIvL3AodQUVV
+VvhK4mbRghqPBNZnpJR-IPFF3oYBhAmTHAap17hIj3xIVPKbeqKqTTJ9mPJ6bp0V
+VvhBhAZLH7KoWNR2cLE84nWdgkg-gcgBQUwFQMgRg6wdsLBlBCRTpqcqaqpqyBRV
+VvhZRRx10oOlf-fm+fXY12fFDp1kHqpqjPOPOPOPOLQHQHQDRDR6DbxiclMhgZPV
+VvhP8Kamofqn1fXPB8i7gsdP-8mbXP-98xg+wdeL8z7madQfqk1mi7g2gfqkGkGV
+VvhRh+iBqnmXqnXVgsdxgotPAGKmpZgZsX3Yzr1g4j70iCEAGh2zIDDDPLNxhVhV
+VvhVhVhZRZBdBgxgxkUzDquX3WqmJhgdOP9GjPACiBgoesanWZg2f8SBg2gfqk1V
+VvhmadQfwb8OZmjP+D8sakGmjP-9-7qo0srPD8DPCC4nWbqnHZgl7P9KKmLWAKHV
+VvhzQCkQgc8st+l8oDxEgYRoxhRZxR-HJEoooJB35HECHnngwsQAE+FvxiclMhgV
+VvhZPP8Kamofqn1fXPB8i7gsdP-8mbXP-98xg+wdeL8z7madQfqk1mi7g2gfqkGV
+VvhkGRh+iBqnmXqnXVgsdxgotPAGKmpZgZsX3Yzr11+Nwg8st+l8o5xEB-7HQNqV
+VvhqiC3XONqr2Z++JXk4eXIWqq3hhZOPOGjPPCiBhkesarGZh+f8SBh+hbqkxZeV
+VvhLNzMqKdRbqkxbWPE9Nxh+h+bPT9XRhscxhosPR8TPQCKqoZhdNPMS6p7Dk4nV
+Vvhc0HA-QQR4VN2zYAXhphjOqOqOqOqKsGsGsCtCt649FS9HgxfG5oEc0HB-QQRV
+Vvh4VN2zYCpCrKpxfFfFfFfJPJ9N9QvQvUUNR3shCnqh6TFc0TC-QQR4VN1zY8VV
+VvhiHhphLgo3931GYJ6FoQtBXg1IPEEQh3shCnqh6TFc-rD-QQR4VN-zY+YZ2NqV
+Vvh9XVM7bN2Z+WB3shCnqh6TF0sNh+ACCMr9n5xAB93pQWA7wRgJgNgRgFgVgBgV
+VvhdQ7gdg3ghg-glQ-gpPxgpesanabXPDOCBgzJz0TXRgxy7qnqVgtsxgtdPCKaV
+VvhnKdgpPPAOqmqk4mpkKmZkamJkqlql4lLl6kbkBL0ogL+ex2A++6q9nzxDhFPV
+Vvh2-06DSdXrhPSBerXW+2-hE+Irx1JorTMWsq4mBZB+VPN9FwWPM9F6qpmoT74V
+VvhpWoGJhIh5mNhEh2bPH9FwcPG9F8KoGoT8ao0oGhg9FwgOmoGo4ch2h-t9F9FV
+VvhOGoGoaUh2h7r9F9HNmoGp4Mh2hFp9F9JNGoGpaEh2hNn9F9LMmoT9MMWoGqKV
+Vvh2h5mqcoGqroT9QPF9RLEHRH4r2iBkrzHqGSUSR6AQQcs9oLwEvEx-QzqnqnqV
+VvhnqnpoIoIoHoXoW1cb6hA7rSyKmKvOoOsKsKqKuKoKwKmKyKkOyOZk3Zg-bxgV
+Vvh7Zsal4BwFmxgNVublbslT2Qql4Fw7pP0Nbk5Rg-cSySKjag4j4gaiah3iZhaV
+Vvhhai4h4ipgZjbRw8om7i+g5XH1558C0x3z2DFDTLRxhlhlhlhpRpBtBwxwk20V
+Vvh1ubLkx3rTBL-L8P1P5L5L3L7L1L9L-LBKqnKdQxNPDNzPFNS7hBXTHQjPJMSV
+VvhdxJyALorBhBYTFRKoKNwxrPDO5nLZgpfP9P-P7P1L7L3P3P5P1P8L-LBRroQV
+VvhDLb5g5zI1558C0x2z2992-2xxRpxh-HNEopoJBJ5HICHongx6QAE+G0RT1oLV
+VvhRwpQ3QdgBgRQRQJQZQBQhQ3QpPPBOZnpZgxbxh3ZsaoqBxBmxhJVubpLslTHV
+VvhQqoqFx3pPFNbnrRgxcTBSKnKhghg3gZgBQZQJgJgRgBgdQ3QprTFkxSQQ9-rV
+VvhpEllmXUjEDkylJgR46DDdXnwTDBennWB2PI+2WbLkx3rTBL-L8P1P5L5L3L7V
+VvhL1L9L-LBKqnKdQxNPDNzPFNS7hBXTHQjPJMSdxJyALorBhBYTFRKoKNwxrPDV
+VvhO5nLZgpfP9P-P7P1L7L3P3P5P1P8L-LBRroQDLb5g5HK1558C0x0z211GIoKV
+VvhRgzXVMnqRh37E+3DbLkx3rTBL-L8P1P5L5L3L7L1L9L-LBKqnKdQxNPDNzPFV
+VvhNS7hBXTHQjPJMSdxJyALorBhBYTFRKoKNwxrPDO5nLZgpfP9P-P7P1L7L3P3V
+VvhP5P1P8L-LBRroQDLb51+ixUAQQcs9nXwB+4n+T6-wxiODNob9LRrAxNR-G9JV
+VvhLIPJLKLIHOHGHOPELNWpqW7OHO72ZRYoJpqWNKLN7pJRYsJ3qGZILM8ZBhQuV
+VvhMapmhWLL9EIKpXoApWoQpGogp1ogp0owompAoXpAoWpQoGpgo1pgo0pq3Q9MV
+VvhIZgxVGOWq47d9NMpUxZIK0qZJK9OJZIxdLJ0qZVH9PKJ2xdPEGqoo3qooYqYV
+Vvhp2q2p5p3p17R-RMYRrpXTGq1iRgU5n+PY39N1++0BWx3zICZD-L+xg-g-g-gV
+Vvh-Q7A7A6wAwAUxTee4aO8i83epe7et8DfJeweJOseNeoeROoeROkeZOgeZOceV
+VvhhOUep8Qex8Iv-O6fFLGrcve8Y7-GqUk++XMjFTp1gnkJjzOyOyOyOzKzH+H-V
+VvhD-D06DXueVdaWfWVOhOWOiGXupOj8ZKi8aOh8bKh8bKg8dKf8dKe8fKc8hGbV
+Vvh8jGZCkKW8oJohuCuWd0kKBgA++6q9oHxEggE2HrprLqo3BZ1HLFIpIRBEtDHV
+VvhCnoVkl+-DDm9l4X7Wqmqk4n2kSoqnGkpn0l4mmlJmmlJmWlpmGlpm0mJlWmoV
+VvhlGnIknnZk0oZRBL-q6lkg2rQ1++0BWx0zI11GIoKRgzXVMnqRh37E+3fz6j2V
+VvhOAa9P9P+PAH-vHPB91LA92P993L993L895L795L697L499H39BH1DCL+9GJoV
+VvhpQ5MX50UQRoA++6qAoHzEwExFR9qoKoKoKoZoYoop1p1pG+-6Ti9OoKfq9-vV
+VvhxPBfx9FvsvNvofRvkvVvgfdfcvdvYflvQfpvMvtvIg-vAw-vAg7v2gFf2gFuV
+Vvh94S1lbUgVq98RGmbEglmDBMWnenso5oihKoMmjiPE9V3rUc++WoZATokz6msV
+VvhoiNhD6lQj0P+P-P-SqkbdgBeP2OTP2S4lKXZP3RqlKXql5VgBtP1Oakbdg3vV
+VvhOrkQj0mALdPGX9z6lP1Drl5563-5Azkle857WVb-QgP-QcG2EwJ6F1Qw+nD2V
+VvhD+AnMwAVH1D16IIwJg6wJYD5L-D5Iolpk2lpAwZA+wZ1D8D+D8AjH8ComX9oV
+VvhmmhAgWxQcfL86apanZppnbpLn6p6n9oPmQ9CkgP3mwL1lgf4kgT7lw55mQT1V
+VvhlQj3lg9Ckgax4wiBGApxJwphNgtRRQzpprtAp79BTwkuDAAImYdAd-H8ComXV
+Vvh7QV9L6Ealnk4lnB-D2D-EHl1EnD0D0AnkXIoO2knFcFWT0lGT0UPb54tc8-gV
+Vvha+k++XMnETx+hYZANbP2ssKAFbP4GI+-Tji9OoKfq9-vxPBfx9FvsvNvofRvV
+VvhkvVvgfdfcvdvYflvQfpvMvtvIg-vAw-vAg7v2gFf2gFu94S1lbUgVq98RGmbV
+VvhEglmDBMWnenso5oihKoMmjiPE9-Ms+U++WEUAjolMx-QzqnqnqnqnpoIoIoHV
+VvhoXoW0tj5kwFLP-S3k5ZPSZdvGpk3nyFQP0krJQ3cKqdOOpZg-Mxg3LsakZKDV
+VvhkF336KgGFG7d2pAYNWKJk4WLd21+Jy26++6Y619xARQxxRrqr4r4r4rJrIrYV
+Vvhrnrn+E6AixPGopRh-sL5ZPSZdvGplRvYLJoR7pLEO3heKahNP3Xqo3TWPFJMV
+VvhzE2IIVOl736aYHImFa7NL4WLd21+LC66++6Y611x9x2E2HrprLqo3BZ1HLFIV
+VvhpIRBEtDHCnoVoV10jKohBLPES3ltKrdOSohQLSt3pR5GRJo4VPOZdfKKlMxhV
+Vvh-LsaoJKDo-336KgGFG7d2pAYNWKJlcZuFA-GskU++WEU9TogVP5FW1maDBP1V
+VvhOgC6oFhEt9ph9HJqo5VQSJhuKbh9L3riFRLFobJR-cKqdOOpZgKDPEJy7h3JV
+VvhXx+FFG3f2YIWOFBH74MZZQO7SYH+ISE6++6Y60zx9aGIoKRgssKANqoIZ++EV
+Vvh8xPGopRh-sL5ZPSZdvGplRvYLJoR7pLEO3heKahNP3Xqo3TWPFJMzE2IIVOlV
+Vvh736aYHImFa7NL4WLd21+JyI6++6Y61DxAgLQbNBHq0QhTY8GpmQhUpDNbQICV
+VvhWxPGopRh-sL5ZPSZdvGplRvYLJoR7pLEO3heKahNP3Xqo3TWPFJMzE2IIVOlV
+Vvh736aYHImFa7NL4WLd21+NiM9XXgo9Vzx5ajFTB8QZMJYN5S3EtFbZGCoJuXEV
+VvhF5hx-3L4oJq4oYq4oZshRRBRTRk-K87RtrLQOZqqhRdh-BZh3RVR7RRh7RKBV
+Vvh3xGB3xAVPFAIoW7gAoo0BtFIgZRZRKGB4wmBBs1+FiQ555AU4mry5gfFoeNpV
+VvhVMRYdpKbFPQpo3FRVhXpqCNhZRbqqJqKp0BREYLG7Zo0VPCLMx1Ep5+XxRaBV
+VvhZhdRfXLMLKTB5EeUk2rc-lln6-gmzX3HqZqTPNPNPNPNLPHPHPDQDQ68hxLBV
+Vvh-JKoZ7GoRB-3LEF3oJBR70PGLlLHjH+osxbpqKqTLJ6pomJBAaHF82guNYoAV
+VvhpLX+HiY555AU4n9yARMxdRXqpqpqpqq3q2qIqXqXqm0iTJnEJJh7GIh5HEFJV
+Vvho2FR3HLGEaoZwJovokBCDNxRZhbppGBRAZHH7YoGV9CaNB1BJs1+Iic555AUV
+Vvh4n1y9x+RkxdRVxN-HIEooYJB-5H1YvCncR6EdLpQo3JPGIZ9Foo2JR-2LFIpV
+VvhoY7h7T3RCxA1HXqTLNPNxRIXLH7IomNB2cGndaHEnJS+k2Pf-lln6-gjzWtIV
+VvhZ7NqTXVMRbOIZ+qrpQo3JPGIZ9Foo2JR-2LFIpoY7h7T3RCxA1HXqTLNPNxRV
+VvhIXLH7IomNB2cGndaHEnJSA+Wv+Flm-EFAU+l2x-QxgP4lgLFHFHFDGDG64JLV
+VvhyfPCqZhpzH1+6yo2QQUI2X9zAR2x3TlfOqhgL2o2oHoHoW-jKDf4oCqZlqzHV
+Vvh6A+ZvUFlm-EFADwjUR6x-PSI35EoJ3EoR0CH2vHG23xLyfPCqZhpzH5+5yw2V
+VvhQQUI3Gw-9WGIBbMSC3UKRXGI0ZKzfGPHvOLGSTonk4Dk0++07-wnzX9I9HJnV
+VvhodEh9-9HohAJfF86o0dv8sce6pq0FRMaLSLSHTHSLSHTxBtR3qGx+oZLIJR9V
+VvhEINB03HGR2p5wZp5sVLKnbpa3RNGPIMzLIJJoZRB77HEGohB-LLHoBVwk1flV
+Vvh0CCE80Ihzmn3gRO6DIdXpBPIBep1WBMPI+26JrmpifAqPEMWdR-G4po32R-QV
+VvhsaoJnhJR7PTERTp1p9-BwUU++WETAjslQwxQvqnanananZo2o2o1oHoG0rT7V
+VvhkQFLL-GohA37H1FolILplJDWL5ISRgRVL5IalKDplJJQBLH1GIkIh9H-JplAV
+Vvh57T+k2rn0++07-wmzX5MDSLQxhhhhhhhlRlBpBsxsxwUmLqB1HJpo2h9HEGIV
+VvhoYRBF3xRFHsZpZ5bPKMJpZ7hFXxRFJLGJooYZB-9Goo3RRDEq5n+IzE6++6YV
+Vvh5n1y9x6E21rZr5qY3BV1HKFIp2RBAtDGCnoFoV1+TMoBBLLEGohB-7HGFop2V
+VvhLpp3DWLKISRhNVLKIap4Dpp3JR7LHGGIo2h9HEJpox1MTA-7xEU++WET9TsgV
+VvhZP5EW1iaCxOnOfC6o-hEsLqB1HJpo2h9HEGIoYRBF3xRFHsZpZ5bPKMJpZ7hV
+VvhFXxRFJLGJooYZB-9Goo3RRDEq5n+FzM6++6Y5mzy9bGIo4RfssK9Nqo2Z+zbV
+VvhqB1HJpo2h9HEGIoYRBF3xRFHsZpZ5bPKMJpZ7hFXxRFJLGJooYZB-9Goo3RRV
+VvhDEq5kA-ey+U++WET9TsZrWrnrmrnrmrz9IR0ohDEJpo2h9H3ZA6IRB+WFIo0V
+VvhF2H1F1L0JGH1N0H0R-xP88cdeHad8ey0ib9334D27J93B2D2F29EFI6h-5EGV
+Vvhl7L2h9HEJpoBDG75pD9T9TDT9TDT9S0kDzY6st+c7H9zAODJLIxhFhFhFhFRV
+VvhNBNBMxQxQUq3kpPvavP0P+v4L1L+xQ7g-Q2FL-H+6JkJcWL0JnBgD+Gw04ikV
+VvhEDc6st+c7H9zAQkxJRDqoaoaoaopoop2pHpHpW1PL1JjiPhg7g1gNQBQ1pkaV
+Vvhk3kF3Q3A+VL-KW7Q7LAqkw-9k6Okk2Hv0CCE80IkzmzJ2-Mk33+GQ---HSEoV
+Vvhr2JBd5HNCHq1gxQR6EsJoZPvavPFPCpJoZnpoKlR+FLEH03R-O6ZoJQnPGl9V
+Vvhm4j+CDk6st+c7Gzz9eGIpaRhHXVMp4RhN7E+2fLGJjiPhh3gvJLGLDLFP3o-V
+Vvh3R-A6Jo3cWLFJnBh92j6Ov-ZzEVlmWMXEDwlmnopoTPEPEPEPFLFHGHHDHDIV
+Vvh6AXwCA-6kLZQB9L1D+P0D-xQ6gDWL+93xO95sZUgbpMgdYD9xI9BxG9CbDxxV
+Vvh5WLHwxHmp1pD9I96GGlqQwRb96NWmKIwd2HAfDPBg3Py0CCE80J-+13pnjjHV
+VvhPIv0LIJrlZH-kp75L0IHhQ-w7PP2GplJfplZZQNcxQRMtZlqxplpVQNcxQNNV
+VvhP2Kakphw7A-F8pkJ74P0JA12JblyZRDroNmzlwP+Lzw6++AY619zAR4BbBJJV
+VvhPGGJo2hPKqdB-NtJo4VR-NL4ZQKZhPKZlMNvG7h5opRh3NLEKolPKplOxR-NV
+VvhxR3MxR3bLGJyRR7aLGJpINJpF4K3BKK3BYKJBJGKEoJPKahaY8-Ui+VlmWMXV
+VvhDTwiZ7GqNqhCC3WoNqhYZ+xjh6gIWmSJh2g3h1gKgngjKn8osZgGhjKWiC7MV
+Vvh8uxK8vN1jDJ0jjIWjtkDT0sZlDD3wgIwLmlGiIYfVbCsNmiKMfdZCvF2jOk4V
+Vvhjh+epkQQQm+D5zYU+E5GkvD0kgCngvGYd8GZZNKphAH2nolAH1oxDHoU20+EV
+Vvh2AUoxkQQQm+G5jYT9I9IDHDHDHDHDHDGHGHGHGLFLFLFL3lQLEHEHEHEDFDFV
+VvhDFDFDFDFDFDH5H1+CUg7JJUe9H9zARG8PJo3jFNnBIGpeJOJeJS3eKRpiKRpV
+Vvhi6Jpo5YsLFPLu3oZoT+OnhlR7RNx-x1xExJkk1EA0CCE80Imzn5IXRoBZbDKV
+VvhL0p3hR7PPFxQPExR-h-R6h9aI-BNhj+GlR3gvPLGKro5LxExEA+i1EXXY0UZV
+VvhAjwlp76xTIpKRhBNTGKMoJeB-PXEL5lR3guJoZPk2gvQLGKro5LxExH+GEsBV
+VvhJJUwCH9zARGAXRo5oBZaF4QxNPAJkhFPapoZiPPFxPb4oDLETEPELFPG9GtZV
+VvhoZ+HLGKPPk7gLGLFPCqpoZoZhx-x-pzIDIDIk2ED1JJMD1Ymzn5IX76xTETIV
+VvhpKR1Nqopd-KLoZedXFKeeB-Paso3iQT3o5oKlR3h7Qu3oZoZPk7gvQLGLGKrV
+Vvho5o5LxExExHE8W66++6Y3lPyAGGYFcMjVc5tKFVc7-7o2iBmki7Wkawg7WkaV
+VvhCnIvBHgr5FOM0Go3JJMM2UHz2RvE8Zk6++6Y3lPqAK5FQvBHgpCnMg7j90PWV
+Vvh90PX90QVFm30Vc5tKT44UaVYGY8M0Lg6++6Y6k6+2xl60LkE++B6Fk6+2xbkV
+Vvh1aZYNKtoOKNdNL6UJ2pGw-JXPqFdPaRnMqVZPKIUJ4JM65FZS5Hk14NjPbFaV
+VvCMKBZMbZoNTE+uU++xTNGV
+Vv+V
+Vvend
+Vvbytecount 15404
+Vvcrc32 28bc8849
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.622pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.622pk_vve
new file mode 100644
index 0000000000..2f8d54f959
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.622pk_vve
@@ -0,0 +1,451 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.622pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB16t+8+++2otni2+07iG++WPYe-jEEk++Y2uDTowkGrC7BfWV
+VvhPMscpi8hHm8B6mbFwYXEB7nz7cnWSQrmWAkdb9weX8sWgMmD8nX4CnX4wfKAV
+VvhEvKQDmhskXhtkTkw13jz8vWy8waxwfq9nW8zWuwg49Uw4PTmkshYkdgrkNgOV
+Vvhjf3y8rhPo9W+EUhJK1opCzsuqQHQkRz4f3b4X6b2X7b1X8b0X9X0XAX-XAb+V
+VvhXBX+tcnNjsnMk6n6kMmtkMmskcmcksmMl6ltlMlNlzpAaAOASAZwKAeACAiAV
+Vvh8AmA4AqA0AqPXCWsndeAy8tsntyMndeAu9XBasn7k6mtkMmdkcmNkelPQ-0RV
+Vvhuxj0g6J10ssvDXAxynjAf197lA+gP7YwGdJokdkYJQ4AN1L+T8AKhgqNTDW5V
+VvhoLVhBbTHNbpJKBJJTLF6powsqH8RYmXOAcqmwNqm4BkVXSudrzXTyRgj8BgWV
+VvhbO6sqWCBYZXM7bq0OBMcTK8Lp0hx6vTG9-TE92PC94T996X5D8b1HBeKoAbJV
+VvhlBegI9VmF+kstY6uCzsuqQbQlhvAf2f9X6b7X8X6XAT5XBT4XCT3XDT2XET1V
+VvhXEX0XFT0XFX-XGT-XGX+XHT+scosjXXIWiiBGSCMp6fWXHWzXGX+XGT-yB3wV
+Vvh8B-wCAxwGAtwKAqAKAlwSAeAWAWQWgGg9Tkxn4qQY9VsFEfXY1gqCzsusU3QV
+Vvh4gag8Apw8Axg4B-Q5soIkTXGD-ssomkMonk6p0kC8AIg2g1WX39DyAEwyABAV
+VvhyA3gzWnwyA3gyABAzsl1nzX39DsclGl0aAIgAescpWfspHfspGjsp1iBB9XHV
+VvhD+XGH+XFL+XDT+XBaumQ+y6-N9VCFUdlmXUlCzsusU2uf5esmriApeXCKjXDV
+VvhGjXECiCB2eXFDtXG9tX29+9XaAEgjsknmskYmsk4my9Cmsk4mskYmzX1D9tMV
+Vvhl0mykMr9oi9EmP0FFkmCCoEtDTgvn8kmnwH+9AmND8eJRAWQ73L5X4EplbmXV
+Vvh3gJgqQBwyA7x3w7hBg3xBg-xJPXJKrpoeBR7yBYsbNC6qXWBgbyRgbXQ7s+IV
+Vvhud+JyAjB4QfB4RCryBK6bIWTXIWcoshxC9XGX+TGX-TFX0xx0ABwuQJwmQNwV
+VvhcWP5X5Aam7koFQedNYnAaHnwH+9Gf90s6IUA++7-D1jyCi9CXCWgmgLgeAuAV
+VvhPWrgPgmAuAKgmcsguAuc2IY3lloT4XjyCU6seqvLWqe+6w+lGUUstGkYDDouV
+VvhbWrhOxvU4cdB47PEW6m5sei5erWPWLluP5kh7x+h-x6uPJFqqB1QXK0sg2gAV
+VvhQQd1D1jyCi9CkwOOnfkco5lMoIlso2m6o0mcnmmsnWn6nGnMn0ncmmnsmWo6V
+VvhmGoMm0oclmoslWp6lGpMl0pckmpskWq6kGqMhBa8PMWLq6WRS5jKVW8BO376V
+VvhpMEZbIUmSBG08Mos2ebGf+XGb0XFX1bEX2XEX3XDX3bCX4XCX5XBX5bAX6XAV
+VvhX7X9X7b8X8X8X9X7X9b6XAX6XBX5XBb4XCX4XCb3XCf1fAkJsgv+mfUkH+c+V
+Vvh+XMjCzsush1DjNvHXPt6o0aAwyCMnmfWXCCcnIfsn3eAduX7SsltegD+9W+FV
+Vvh69WIHEuefIx6CzoulRfLzMlcfMf3sW3xMVT4wWTI6bli6XTG6rlj75o0FwPWV
+Vvh7LnWJwPW7bn0NwPmRwcbT4sWVwUcT4sWZwMdT4weT28bli6fT08rlj9+T+9+V
+VvhT4sWkLcg3wPW90S0kblj91RWkrli6gFo92T4sWlL6gJwPmldlblj95T5T3H4V
+VvhT5T2P4L6T0f2L5aC96k1kAqsrIsA++7-D1jyCgL9qgfPmQWOnekfnql04QxAV
+VvhIWXE946snmlWCQsgMYXC947MnGlWKQkgMab9947smmlWSQcgMcb7948MmGlWV
+VvheAUgMeb5948slmlWk6lWlWk7lGlWkNl0lWkcl0lWkdkmlWktkWlWl6kWlWlMV
+VvhkGlWlNk0lWlck0lWlsggMgSO9496aGlWmMYgMge69498ZmlWmsQgMgm4949AV
+VvhZGlWnMIgMgu2949CYmlWnt6gMh00949FUGlWoPlWoelj9Hb49IX4whJwMhNgV
+VvhJBNQFhNA8hF7mB+tz6oGY9-vHkllmYAsDTgvmurgPMS5p4kao5l5nKm4mqmaV
+VvhmKn4lqnalKo4kro5kLobjrp5aBG6TKRspcNxVpscq6CRWGscqc5ebOYMqc9XV
+VvhbMYsq6GROJyBO5yBG7TIScochx7w3x-wBwtwJwlwRglgZgdghwNwpwFx-w-xV
+VvhFsTMlhugg9V9I+fXY1gnCzsuqADQjSlOl8l6m6ksmMkcmckMmskDXAWsn7eAV
+Vvhq8tcnNyMnMeAmOyAm9X9X+X8X-X7X0X5X2X3b3pATFmimsrepS9CnP0iIEllV
+VvhmYAsHTgvmurgPMS5p5k5o5l5nKm4mqmamKn4lqnalLnbkro5kLobiB88TISMV
+Vvhp6VxNryBO3scq6Dtq79sqc5ebOblXOUi8RWHyBW3yBO5TKS6p6Zw7Q3uWsi9V
+VvhSXIeT-S0UcT1O0UrP3NWcpP5NGcoP7N0d0P9Mmd-PBQWah0NXIZbqAX199cJV
+VvhkmzKP09KP-DLP+DLOoprZBa3PNlxf4qgLQlBn1rg2-0k2d+JNvW5IUj55XwwV
+VvhDDsupQzNmxjFf-fEX3bCX5XBX6XAX7X9yAeAeAeQaAiAbaX9b6X9X7X8b7X8V
+VvhX8X8T9X7TAX6TBX5TCX3TEX0XGoBHCpckLp6kroclKoMlao6lbnslrnclsnMV
+Vvhm5nSKAWAnZX6b9yAWQ+jaAaP8Mmccdf8WG5CkrUWngFpAwv4k+3rM902IkXXV
+VvhY1+ZDTgvk7k0kA8Gf4MtO4F5P-EoNQIlJYlsJQVoL8N3mpDpnI7gp0sanX7gV
+VvhwWxwsWXB6rocoOo9ngD9lgX7lQf2mwD9kwj2mgP6mQLAkgyh4R4B7x8B7l5EV
+VvhbEbWoNzEbEIInp3AtVxQpGP9Ism3FFD5FIBQ7KF5ZbBwS0f1cg4g+8+pJ+iCV
+VvhCnsrCzou9Wq2alelV4hMh4BPS9NGx9W9R0wva9Umt0iciG2ve9ZSCvWu9gSxV
+VvhXGgQLWlue23J1++0EHkwzXfWjvCtWg0fCABfKAF9PgeAIfVwEfbskmijT08wV
+VvhT+8yOzCzOy9-Ow91OtD3OrD5SnH7a4n9bDhRKPqcTpMA++7-D1nyCi8wiPNfV
+Vvh5-ekb3OnX4Gob3CqyAIfSQAvWAAfaQ6ffskGitjnjDWz8yy9ofyPkg1simkNV
+VvhiHkciGkti0lDWr93apD4Wp95ao96y9AgaP6gfsgGmtcwm89BaGnjW0ntMx04V
+Vvh9FZGojV0otAhHs6hPWfMscqjPQsYrWkUiA3L2558K3AwzXfWmsmw13OwWwauV
+Vvhb8bAT+X9XCH1X9XCD1yAiAsgGQiAkwLsmsn0ldmdmXlzX8b896b66Mm1mTX6V
+Vvh6Mm0mdlWCAMwjslWCAMgmQEnb39ByAEZX29Cb0BNkmnzX07skWo6kHSQ2h5sV
+Vvhk0aA+h89CNghDscfWWp6cfaGpTW0kMUhO69-ZmpzVWksMhW491ZGqS8293V0V
+Vvhqy8095UWrS8gahuQiRzsms+ETBQ-5qnK+GLDI-Dono+IDFA-Ih2go80PK+k+V
+Vvh+Y2wCzsu5WjP0tgPCqgPWfdvmPdPuPgw0Pcg89YgCPQwGPMgKPIgSPAwWP6gV
+VvhaP2giODAaGnNUgyKDEZGoNEhCGDIYGpP1LfMXNbNyRaRXupW4REmbH6toWKRV
+Vvh+qbD7tnWaQkub98kb88mb6CnX68ob48qb2Cqb28sb08ub+Cub+8way8yawCyV
+VvhavGzatL+aqWyengPinTWiPKxe4pN1++0EHsvznfWjPeqSlkP0mb2Opb2Gsb2V
+Vvh8tb1Cub08wb+8xazCyay8zaxD+aw90au91atD2as93arD4aq96ao97anD8amV
+Vvh99alDAak9BeGntUx0L9FZXodIhCX9JYXpd2hSlq8qNqyi6qeoS8zhv02KUb5V
+Vvh5XIfCzgu9Wr1kAS2b7VLmsJgi4L9ZYn6Qwm5H9Znn6UwiMD9WHmccgeO98WmV
+VvhmNggaA+gWBOROBPspcpdpcpcpdpcpdpcpcpdpcpcpsm0k6mGiQYfX88cmmaQV
+VvhgdXA87mnWAkrXBBdnHOAoqbBBcnIKAt2bBJ6nKCApnX9YcmA2S9S2A-WMEU+V
+Vvh+Wga8DkaeBvFqJRhMwLIHELHP3oMlR1slgXELEPFPEHGM-DXPTfNoxOmPIVqV
+Vvhobdh3vPEPEP4oKhx3exx7ePHNtshBbbx7r6KoG3L6Lo03L6akXJGFe74ApRXV
+VvhOco6X6hJg47W0CCEA0cxzXhqoS9-pcqCl4q4SAZZkQNXFplK6vL1MGkZkcl3V
+VvhkLlZk5lphgVeP7KjP7OKmLXqmaXcP8TrP8O4mLXqmKZgVeP6KrlahwNQ-F92V
+VvhL-EmkZkYEuP1BYNgIdkBFwD+GKA555Aa60Xx7h4RTGopVQLECZoIVR-bLEVKV
+Vvho6JR42PFUqoqFhF2xxnqrCVxphrrrTPN6qq0BhQZPK7ZpGVRAeLF93gx3bHIV
+VvhoBa8g4BY0CCEA0cxzHjFPFsg5KXMv2P8Rqlw34lKN1P1Om7g7Q6VP-L2X+L4V
+VvhSqlbhQVeP6OTP7O5mKXqmaTcT8ODP8O5mKbqmKdQZeP5Splrk3lMkJl6kZkHV
+Vvh4A3PAg4ZQokPkJkQ85Nkk2pZ-lln7W2czWPFXNoBJaLGKYo2o2hR37LGJpp3V
+VvhJhFJLJMzPKIbpZ9qpx1xQ29YrjPSxxvqqWBhYYLM7KpmNRMcLI8ZoWo2kx7bV
+VvhHJoBe80k8aM2st+O5HrzDANgWwJJD1FZkJJvJMdKWKO7NqdNGikKky98kyoKV
+Vvhmcky97SkSaQ6++6f7nby7Q3vP+kJeZJHEpV7RZR9K1RA373pkJkqkKkZkpkSV
+VvhNgBg3QBQ7g3gBQ3QJA3AR9H6KIm03JL6Ag577bn0qC6xXoq3pgb5nAHBkwr+V
+Vvho8H3ZpmLJQlYHCIpnZBB-Ft3o39pnZFQlKL8K3m3hQFQ7uT4lgn+kf+wO+XXV
+VvhY1+fDDsvRh9WkRSBbgFhZcX7Ng15N2NQNXCJlK6g-QFV9-P1MGkZkskqki7wV
+VvhFg9gdgJg4AC4sgUwUB+ROEFlm-QHCjwtQk2JpvsdhxI-2ksqTWmsrU5am3+vV
+Vvhg17e-CCE4VNA-1b2D4L2T0sdkbl3lX1cTWb-kckrvOl478MKZFW345MTVpBbV
+VvhJIV5BZaw3t1+Oag6QQch8HnyCrPTsh+-G+3ip4+KsajGZgfEPETGPELIPEDKV
+VvhPE9LOnq4cxZd9PO0r4Qhpa9SNIrKFhlXXPMH7RiHPORaqKVRZcPMOKpqdRReV
+VvhPKOqpKlRJgPIPEPHxh3h7h7h3h7wXEdC9LLHo-Bg-5563lEwznhqTWr6+Es1V
+VvhFhVUDg-6PEpJK2Z27jsZRdTITGo4o9oAo3FZZ4Kx+ndKCZoc6wJ1lRBV9FMWV
+VvhoKoa2h7G9GLGyBCBBh5rp5p4oSqKpKpKo6ososPWpopopw+mPUXXY1+f7jsZV
+VvhRcXFo4nB-2NPo1CJoc6gLHMGo4oa2h3R8B7h5WTHPFvNPIPEXGVi9LDLk2hjV
+Vvh0++08mMczWPGXSoRZaPJL3oZoJo3ophRJNxRRLLNJS7hZXsaqq5cTPTlPPMbV
+VvhqLDqqKJRZKPLNpppZRJPLHLELFLGL3pKNhbFrcoUk47k0CCEA0crzWJqSB5EV
+VvhLEjEB5Kh+XhR3l9FLFXHLETJL5pKjqpqdhRtPMOTPMS4qKXcPNRqqKXqq5VhV
+VvhVdPLSKpqdhNfTJOrp4mB7h-V9EPFMXdh7XFap4LBNbTNuq+KXTshTN1+ML26V
+VvhQQUh8HTx7R7u9Klnp4MqDGOWFB3R+XHELF6Zlh6VKqp5fqpLZxNdPLODTLO4V
+Vvhq4TcTMO4q4XrpqbqpqdhNePJSqp5lRCB-R2VPFL07h7OAaoqMoPJlKq5RU3iV
+VvhhU3Mri9Lk0hm-YF46VoazWJaVIld93B2527KJn7LRG7bRF7rRF83VF8VfXTNV
+VvhvLPNXGshWA-BQkNDdW6P8Doaa48B+nNMVIlYwxB1wxImsYpW9ppG7xWBPEohV
+VvhDBGxKxGxHFoRKRVm5JMGpcpssxSBOBMlLIEKon7h6nEHkoAoV37h-WW7k0xoV
+Vvh-XXZ6FYqzXGyEhbXDMxBTppapLp6ohUTqsvIPKu4ccKWVN8KUeK0hK9EJ0odV
+VvhpKL+ArI6st+k8mTy7LPINy9EfEmB8B5hZhFh5WPHTGxR8B7h+VPHLE6MoZcmV
+Vvho9NYDEnELEocRb0sErM6QQch80Py7C93f-KQC7T3KrlXkTP491sal0lTP094V
+VvhT+D5xg+gbqcgdsD9xc9BsaMgzqEh-mDFxW9HscpTPLsYqGlkm5pr0ssvDXYaV
+VvhzWHWp2oqoIb6o6Vx3h7ePGLHGqoaoXlx3h6x-h3h6h3h3x2h3w6Jo1oakVLEV
+Vvh9HP03g9Ixe6pghJe6qchPqUZKGpqUZO0qDNWRL9NNWRa9OxY8JIhhY8KEhnqV
+Vvh6fImrK2vMWrjXEIGrso6+Esaoa+GsYp2+I9K9I0sKbU6QQch8WLz7C94T2SfV
+Vvhb0T-P3P-H5T+D7Onmqcgls9CNnnqIx3Y9GQWp42xKBRhVxVhVxORIVTH6qoXV
+VvhFh+qPD7rnGZgkuP8CrmGkKm1kalXl4kqkrig4KsgCgKsMrY6QQch81Ty7C93V
+Vvhf-KQC7T3KrlXkTP491xgEgFw6wLqkWlzP+96SXmTOWmzO0n5MwrqMgzqEh-mV
+VvhDFxW9HscpTPLsYqT9NsWqT9N9B5+99KWmjS0mrQglqDBJmnXUh+pDGbJLG1+V
+VvhK5c555Aa5mLy71zTBx3YLGNIobIxBa9HNXobMx3r9GO0oKYh-t9EOWlhhxdxV
+Vvhhhhhhxhhhhhw8Lo0Zh2cPG7roWRh6qPHBLonFxEZPIB4pHBxF1PIIaoc5k2FV
+Vvhi0k+0U+0BWwvzXfW+FegKfX7SsmqeAlOXBGi8AsussnmeAwyCMo0vKaBex1WV
+VvhoASEYE2BJJV6DnrwD9HnoTLDxwrtmzcQbm8QTmGQLmOQDmWQ2e0Q+e49we8PV
+VvhseC9oeGPkeK9geOPceS9YeWPQuaPMeePIuiPEemPAuqP6euP2uyP+f0Owv4OV
+Vvhsf8OovCOkfGOgvKOcfOOYvSOUfWOQvaOMfeOIviOEfmOAvqO6fuO2vyO+g0NV
+VvhD-a0kdQwCKnpzFDxAEF+g6o01558EnUxynj9fSlhVsTIT+TET2TBP6P9P8P7V
+VvhPAP5PCP3TCT1TET-TGSsocdxFtXIW5pbTspcLWXMUzbMYcqc84987c5tMgcaV
+VvhliNgtgPq987d44987c8Be0sdq7Dsq6LspcRxNsXIWLp5eB89TGT-TET1PEP3V
+VvhPCP5PAP7P8P9P6PBT2TET+TIS5qAPSf9g5s10llnD1IxzHnBsX+JsZ+Hsb+FV
+Vvhsdrvrj6MrH4RnmCBgnbO77qWKBYpbM7dq0SBQrbK87pWaBItbI8dpD8somk7V
+Vvhoj9-XF90bEwgCAwgGQvmlMnGldnD95X996b8wgaAYgeQXmmslmn7lj9BX39CV
+Vvhb2wgyABAuQ3gqPf7k4sgL-mkc0k20eehCH+vz1cSLH6gwVwwxSDF6+3RsmkGV
+VvhhSL3hSAg2U+PrY9FLwwl9D6iLH4c4+IA++7-D1jyCUWMazaqvLWzWqexeC8zV
+VvhWz0UV+M9XXgyAnjvCVpGzKCQ0lGQC2f2R7lKKQJJf3FdlISQIrf2C7lGaQEeV
+Vvhb18dkneQAjg7kWgNkGgdnunto7nunto7nunto7nsoKoop1pGpT9J9J908q91V
+Vvh8p928o938n93Cm948m958l968kwgUu96GGmIUgZL97NWmLIgWI92gYp1pGpXV
+VvhpG1+HkQAQQd1C1nvCrTTTAqQbGpR7xHHp3ph5KHLnLDNfN7MadVGD6WAAHoaV
+VvhVh7hBaPHLINap2pKFhJBNILK9MMa+SsZ7E6CGU6i+HU05+3i6-5Eg4g60ssvV
+VvhDXAvyney9Gog1RtsrA5KmQy0UMmbK2T4RsNwBsVrkLa6Sre7SLi8Rrk6hpyAV
+Vvh09UzX-X+USOQ4A0T4A4A01yA09VLk6hrSsdtScZvSMVw3sVrkrS4T4RMFwe0V
+VvhUMnwbKkRrbXRkB9Woe0kLEYAQQd1C1jvCg5WohT++GtcnMkskwT0X0cskMkMV
+VvhTWX+X+WSi9Wsjri9T+y8WckTScdw87WMkra7T3xsW5lrS5T7NsRghaVanLG2V
+VvhTEMsBhDApwPRk+2iS+2g1Lsh9-0kVUc9XXgyBHnwCwaxf5osaAxw3wlwJwZgV
+VvhZgNwhwBwpw3wxvXDWboLaB45yBC3yRCIXJUySRKHyBK2yRCJyBC5yB47xx3vV
+Vvhxwxw3gxgDqnKlJnJlzL9L7xAhAhAZA+eH7GYgwYv6GdAR86j8nlngW9+959+V
+Vvh6XggQfAncwIuBCD2lQFQD3kqkwP0AA-AA+U++WgYCToroMrB5LNap3dR7QLEV
+VvhLFKpopbppJTpppLWPLMyFhZVvJTNTX3hZWTLQy7hRZLLJapKTppJZRBPLFLEV
+VvhL3oZdRFaPLoRmB4k4X26++6f5HXtBwAwpAlQdwSfz4i1T8vTT6iECv-gAUU+V
+Vvh+WgWCDkrk7mgD3lw7Lb+D-WHksQgO396RGmLAge0L5ULlr4AP3swK-T4UZlsV
+VvhncnbncnjTCxwtwxgxgxh-R-R-R-R3B3B3B3B3B3B3B3AIeD58Wm0YgUs9780V
+VvhmWQgga99BR3B6xAhAi9I69-gAkU++WgWCTkrk7mgD3lw7bX+H+SXkrUwJrP0V
+VvhVMkbLXb-VLkcNQC653TCyAtwtwxgxh-Qxgtgawj0oLoKoKoKo5o5nzXDyAvWV
+VvhYalN4AH5z1lzks4g8Fb1Url6AwS3D4Rnl5ZA3vO6kgP4kweQ29-dB+U++WgaV
+VvhCTssnjDKHJxRFhBx9soNo8o03wwWTCAbnWBwoYTAB5n0JwgaT8BbmWRwYcT6V
+VvhC5m0ZwQeT4CblWhwIg-wEw-wAw3wAg7w6w7w2wBw2gFw+gJvD3SmlbcgRtD5V
+VvhSEJif8TGb8sggQ-XBEU++WgWCTkrMRUdHIGMZuqfqQqB1LoRPGpBEWjKuW+HV
+Vvh7sp0HEoW7LLE6HhQHFKnopchFe5JPTxxzWTSss7RO-TJoxLIzIozpL3xK0whV
+VvhZo9LRHpaQxFdDGOolh-MTGpRLFqcoQ-tBUU++WgWCTkrpLqwpxDINpoKkh-hV
+Vvh2fLEKaltL6VR05PEVaoMNh7aTHFqri7xrWTSRrm3icB4K66tJs6fJc2h-JfGV
+VvhJ8oaCRBmbIMjbIQMpL5WXJXY3xK0PJUbp67xFoPIR4p4JhBqPGO3oaVh-eL4V
+VvhlOPFNboxDLoBhx0kGnQ6++6f71jvCG9KDJLHshMhIhIzp2DC7T9C7WnGMwkbV
+Vvhwgkc999J9JwhIhLmpGpHpGpHp2p1pDHHLHHHsZojPGLGsaoSFx1cXFPHH61+V
+VvhTnU6++6f6XbwBx0BfFphHGO4o2o3hBB89KG1poMxV4wxZ2sYqIFRV2PLF5pIV
+VvhNxF4bFFuo1auCwQwo2HFoFHHoxTFqB5NoRLIoYDFkqoOCQYwhnoPIxGIHJYnV
+Vvhq57BZlHOfxmSDRXRAYr17BgoHOB2qHNBQsLICZoIlsPGpRLFqco+k5ct0++0V
+Vvh8m6tz1TEXOoBTHorNh3eL4lOPFKJoaRhBKTHNKp4FxFYTIQrpK8BJWt6pL5WV
+VvhXJULpMwLp77hGGTHYqoeFR8ZLE6MNP6cRNAcVKEsepX5RxvWTRsbraRBFaPGV
+VvhNcoKOB3LXENslcTEKZo3gh7R+wLGFrpBDKoBeBH+bWE6++6f62PvEB9XDRXNV
+VvhoBHIoK6nKpIqG3MrC2Qt7YUu72Yu72Yv6ZYv6YcvAIcsiXTC8XPEcrMKYsEaV
+VvhYt6rUx7cDGRnodIxCXDIohHHpBLGph5KoRPGpRDIpR9JoRInbIBLp1NxDnRhV
+VvhAsMmcsMKUsoSBnb6CPYtEGo1Z091VG91V1CnV28nR3CXR4CHN6C1J8FXFAMnV
+Vvh3h5IpB1NXSsnoO1C7UllmYAuDjkwi3q6pIIhB59FGGnpYgx89CsZg0nC7P2gV
+Vvhlf+gnqcgrqYgtc9DNmoJQh3Z9GN0oqAhFW8ri93V8ri949WsgLjP0qOzOtOzV
+VvhGvSz8wSyCvWy8v6aj0imBfkfcZOu8u7biGiHRfUfYsSq8tCahWi2dvEfZ9-vV
+VvhAfV97f6fVP7v+fVfBu8sOoS0i5h5QfZvJpCtSqR0ibhr6fhvVV8wWrWu6bi5V
+VvhiW7vZvUmWtSr75huhHJvF1OnBrgJJv-6VrS5KfWkhf8oh98rauWEk2wz-ssvV
+Vvh8FsxynmdpRD3VtDENmoqIhJX9KQWpq3hHFox9Wob3hBmHITxZxdhdhdhdhdRV
+VvhlBlBlBoxpBoxrnrWrjDSuGrl1zDRLPTNsdqLqprHog-DDUSCCmYSDTgekxpRV
+VvhhxbWbNTPLRADwE2CAhva9SwxshvnrIrHrIrDHQHQLOPOxhdxdhdxF0THMS7xV
+Vvh9Gox5IIapm7hMYPIB4onNh+uK4nHp7nE2V+2QQUL2mPz7LNy99XS+SP6I1ikV
+Vvh7V22st+O3XU27QBy8Q50X1Thf2MYdVOJ46IMRVy5IqRJG2QqKPkLYA0+4EU+V
+Vvh+mgaDjswp6rh1PJKq2ZRN9LIL3oZo4o4o5lR7ftaobdh7fPFSqoKlh3R-h-hV
+Vvh-gPFOpoqZeo4TB-MnEZRJfLHP3oao3oKoJo4oZlh7fPHKqoqdhBtxhFdxhFsV
+VvhPJOCVhJzRhJcN2ZsxXO4ZXNqdXNpdoFpLEEcJh-HJLo4c-3fg6MO0ssvDXQcV
+Vvhz0OdlblgD-kA3MOJJeD-JoZMH0JIhLP-IokJKA-VH0JTX-b2J6kcl4FgBwJZV
+VvhH2T4LBT4PXn4lqlhb-red4pMVhBvPGP-PFP0PEP1PDT2LCxwJgnrlamdlbmNV
+VvhlMm03wKQQVT2EYlWBwAoH27KkINA6bOoVP8LNfJYkAD0kQGQVu1+Y-gAQQd1V
+VvhDWXy7h4BZxfEox1JJalKLGKod8L3o2VAKZoYNB-NLIF2oZRRJGLGNZpep3JRV
+VvhShFXPMXJMqq6pZ7xWBNVPNXKMKqapx1xdhTEzO+OtRdhthdhthaBpxWBthWBV
+VvhcWPMbN6qpeqGFRNFHM7JpJ7RQaLIF3pGVR74HI8Zo2VR2gKodPDGJao3RBLEV
+VvhpAqMqbekYVk6++6f71Lx9BEhIhIxIhIxIgS493kX91Nckpdg7A7A3ABPH2OJV
+VvhksRQEWJZkmBJL273FQAZIqkXJWL17p7Q6rIZkWVFxg2dkA+ek9Cg0mj+cvk8V
+Vvh9+kDYg3VK0kZ7LD0IaMg7XJHkZFJ91J3EgFJImkpR092GLkodgBPL0L0H+H1V
+VvhVal090lGOAUhIhIxIhIxIhIhE90o5EtlmYt6Czouli6-LH6eldomFwdh6ZT9V
+VvhPF7Ln3oGJwpB1mNwswwqTCDDwbTD9CBrnmnWVwwgscTDDAsWZx+ggeT38GmzV
+Vvh8blGpS6fT39Iwg-wExEg-wBBAg3w3hDRojrh6g7w3h2w7wBB5mkrl1oC6gFwV
+VvhIg+i9-93T38mkT94TG9-94TFD+wgRx2g2gRx+w+gVx+w+gVwx9D6TDD+97TCV
+VvhH+97TBKom5n4ZwRwe5f3b3k1sgNxx91X5V+stZRCDTcvmw+06-f8SBr6T+qwV
+VvhNwCwOQJwKQdgFwOQhg7wWAlQ3waApA-weAsvT9XCCcmsnXaAmAwdTBXD8DXBV
+VvhXD7sncnnOAuB+ZbCX480LsnslWUYyR-wMg8B3wMg8B3wIw4R3wIw4R3wFA4RV
+Vvh3w3w5WbFnw4R3w3w4R3wFA5toLlHkNoLlWkdo5lWki8R-wMf6NnslWcXyQuBV
+Vvh6YXCXG77nMoWKAqB2pXBXF7sn6oGSAmB+sX9XECMmcnodweAww-waAtA3wWAV
+VvhpQ7wOQlgBwKQeAFwCwL+lbkBn7SBv9+Pnw1TkCkT1558EnV1yns0Ak80+cA-V
+Vvh0h2hrJYhlsRXqaoKEhZhJV9NLNTMLPLMLRLKLSPILTTGPS6Ko4rX7fTS6rdhV
+VvhsZOLrHJsPS7qRxocRbr1VpTR8bFxkfR5qnhnXP967xgh3mTODFQbqWob4BYhV
+VvhDHq1oxDM9IoxQxHHpXpRDK9KoxIxPHp1pxDI9MoxAxXHomqM3x6hdmTFDOQbV
+VvhoGqr8A9PUcgxi1Smr5Fu9RRKYxpaS0rLRb9SO4MxtdNGradY9TOq6xth-V9SV
+VvhPGTTLIPSLKLRLMLPLMTNLN6KpKqGFh3hcqS5r0bJrGoO+EA0UU81+X1+5G22V
+VvhQQUM0HrtD1BDQEAicLDeJScr226pIr5S3nJHAA+RD+Flm-U7DTYeApIr5S3nV
+VvhJH-03ycpuZDeQEAj3oAkY6cX1JJMG1pBynin8c8wx8N9dOJPfWGaGuKZKusYV
+VvhdYiZdJii78N9dOJPfWGaGuKZKusYdYiZdJii78N8PF25qeGaGuKZKusodYiZV
+VvhdJiiF8N9dOJPd8N8c5oR4asYdYiZdJii78N9dOJPfWGaGuKZKusYdYiZdJiiV
+Vvh78N9dOJPfWGaGuKZKusYdYj0e0gkkGwZ1JJMG1p4yo0Z+L9HU-JB-36-BQFmV
+Vvh+GH2YxxQCnr4lAHNP2o3pclB+WHFb3oG82QYo3oGLFBR-B6eFpoIompooJomV
+VvhpZoJompYoZompJoZomp3opomp2p3omopp3omoZpJomoYpZomoJpoomo3q2oWV
+VvhoIqJoGo3qJoGlRhB+h-BlB+gLRH0hRwv92+EGGlE2IQgI-B39EE-OB-E43o3V
+Vvh+fHHI-NR4+3Io2IU2pl56-3QGG+EHECmrZlA9QL2o0r2o2o0qplR2hZR-R2hV
+VvhZB3B6hVR3BAhNR3RAhNB7RAhJR7RAhFRBRAhFBFRAhBRFRAh7RJRAh7BNRAhV
+Vvh3RNRAh3BVBAh-RVB6h-RZR2h-BdR2gLPHE93r2o0lBtA8prngfI--792+GFmV
+VvhlE2oIh-+3coW+NK+o-ob-5564+cOyHgnJYQjYOwNAm9YUi7mTmTmQbwb8-T+V
+VvhKmU4CCIV33PtEBIhExAhExAxAxAxDnononooonooonozHGxB9WHGLGxB9pojV
+VvhHGspojHGvGLHxBDXLHxBDpozHHLHsYpDHIxBExFBExFBExIxLnpHpHpHpHpGV
+VvhpXpGm3gd-XXZ6FBKyY+RIhIhExExExExHnp1p1ooonooonozHHxBDWHGLGxBV
+Vvh9pojHGspojHGvGLx3B5XLFxB5poTHFLFsYoTHFxB6x7B6x7B6x6x9noXoXoXV
+VvhoXomomp-pQ-A8UU++WgU7Th+oTHTLSt2oXd8AJZ7loTGN4UNF2Z6EYW5AXT5V
+Vvh2VTHoRWBpBqBXFor2VT5AXS6EYV7F2YMN4obFwZ7IHd8DGt2rprjHF-U3mgAV
+VvhQQd1C1XvAMEdvc36GT5N4TVCUIbWVB+R9+Flm-U84jY6ApN59t4j4HAWt69WV
+VvhQbwbwb7z7mULk-+i-5564+Y7yEUnJHQRsLBJAv-k9kU++WgUJzh+oGoTHDLwV
+VvhxAxQzonpnzHDLDxAxQzonpnzHDLDxAxQzonpnzHDLDxAxQzonpnzHDLDxAxQV
+VvhxAxQzonpnzHDLDxAxQzonpnzHDLDxAxQzonpnzHDLDxAxQzonpnzHDLDxAxQV
+VvhzonpnzHF9F1+4Hc2QQUM0GLt71BJBlrVQpIkd1JHQRsLBJAkk0Iv-5564+YqV
+VvhyGEnJHQRsLBJA8EoMr4-pT41AGt59WMasWPmMawb3W+FDEllmYAs3jgU3X5JV
+Vvh+0PRIKAEgAx+1558EnUyynn9fTlBZePIL2LFD8DCDCD9DED79I959K939M91V
+Vvh9O9-9Q9+92T38mkw118GkZNAAc9-GmkWQg-Q2g6a8pkmkGIfL39-70hQNc70V
+VvhdQRr6mdgVc6WdQZc6j8KmKUV8amKZ8L8OIttP8OIdQddGamKYj2dP7OG2eL7V
+VvhOG2eP6OG6eL5S0AfL4S0AfL3W0EfL16KUY9+L-6pQa9-GmFa7WkZN4J1UgD+V
+VvhaO92T0L+6-gU4m+P6-ghhPDLT+DIT2DDX5L6bAP+jGmhb-m+e+pP-5564+pLV
+Vvhxo1Rs0CRY8UBLEFlm-UBJzx+qS+XbR1E5K+2QQUM0VfuCr40TmQbwbwbsWTYV
+Vvh806nyFflYbFZAx+M2UU++WgC2DMv37xcRsRsSKZOKZd9Gogw2R+M2kU++WgCV
+Vvh2CsvZ7xbRcNqRaVMK3Z7GIcw5AUM3+U++WgI0jIq5JHFT23MJ2N5IZafXEPHV
+Vvh8QUW3EU++WgM2DQvsmpppHwGpG6xAn9H71oHIwBncsJZbFmhBd-s0FM6++6fV
+Vvh5UDuAR9E4FQA++7-2+zcD3O8IqAz8W5Y90wGcXBXKcNEk-cM-lln7VEExTtyV
+Vvh7h4R4B3x3h9XPEPESd9HGt1+3W+2QQUM3+fz6RMRBB-va7WMaMo2olpEk-tSV
+Vvh0++08lEAxHeGp2oao6h0GIF5FYJ6Eod0D12x3RAUk--T-5564+Y7yHYnJHQRV
+VvhsLBJAx+YTEU++WgM2DIvJ8FS7cMrRnO4FNJ4VYKJJ8FTGYMvBmkbCnUR4A+PV
+VvhTUU++WgQ0DYsRR2KanGtBB3IF3oICPEvZVoJQA+LTkU++WgM0TQt7AEqdVWBV
+VvhHWPIW-OaBAEUc6T+1++0EHdGzJ4rHOxhZxWBVxZxdhdRhRhRhBlBlBkxoE+GV
+VvhwhnWHOsaqC8BPWfIwWXGAdoT76o1GQzmOAsbbBwcXA8Nmz8cmi6f4AXmgslXV
+Vvhgslj8pX2Cpb1wfSA6vSQ5wD+lPzmisjWj7jT8xWwsWjsij9-WsD-arwgC9NAV
+Vvh8PBw4P4fulTWhvKxc6T-1++0EHdGzJ55HOxhVxSBRxRxRhZRZRZRdBdBdBgxV
+VvhoE+H6hnWHOsaqC8BPWfIwWXGAdoT76o1GQzmOAsbbBwcXA8Nmz8cmi6f4AXmV
+VvhgslXgslj8pX2Cpb1wfSA6vSQ5wD+lPzmisjWj7jT8xWwsWjsij9-WsD-arwgV
+VvhC9NA8PBw4P4fulTWhvKxc6n01++0EHdDzIv+9QHOPMXKEYp2FB74HEG2nYdAV
+Vvhov2wkvAwgfIU+K2hnWHOsaqC8BPWfIwWXGAdoT76o1GQzmOAsbbBwcXA8NmzV
+Vvh8cmi6f4AXmgslXgslj8pX2Cpb1wfSA6vSQ5wD+lPzmisjWj7jT8xWwsWjsijV
+Vvh9-WsD-arwgC9NA8PBw4P4fulTWhvKx0UWAAA++7-CYjxGfdPAQaP+wSkYwSnV
+VvhJAR3gwQtgAQv0QYPBE+KEhnWHOsaqC8BPWfIwWXGAdoT76o1GQzmOAsbbBwcV
+VvhXA8Nmz8cmi6f4AXmgslXgslj8pX2Cpb1wfSA6vSQ5wD+lPzmisjWj7jT8xWwV
+VvhsWjsij9-WsD-arwgC9NA8PBw4P4fulTWhvKxc6H21++0EHdBzImrGlH8Oam6V
+VvhWATWZdlsWAVeP8GlE+4P9QsYqi7hXWXKsepD6coX8R5mGB+obDwaXC7tnT86V
+Vvhn0aQjmeAfW8lX6wfCAMvCAPmhMl1hNkz8rX0Crb-z1kAKzwfi9sfmPrmjMjCV
+Vvh6fy9fmkMi1kNhz91WqH0anT-aleygLsfSpjEc6L31++0EHdHzJ8zPLfIBXojV
+Vvh8WoCEf2h1mch6qDIfLM+4V9QsYqi7hXWXKsepD6coX8R5mGB+obDwaXC7tnTV
+Vvh86n0aQjmeAfW8lX6wfCAMvCAPmhMl1hNkz8rX0Crb-z1kAKzwfi9sfmPrmjMV
+VvhjC6fy9fmkMi1kNhz91WqH0anT-aleygLsfSpjP0olUtlmYt6Czouli6-LH6eV
+VvhldomFwdh6ZT9PF7Ln3oGJwpB1mNwswwqTCDDwbTD9CBrnmnWVwwgscTDDAsWV
+VvhZx+ggeT38Gmz8blGpS6fT39Iwg-wExEg-wBBAg3w3hDRojrh6g7w3h2w7wBBV
+Vvh5mkrl1oC6gFwIg+i9-93T38mkT94TG9-94TFD+wgRx2g2gRx+w+gVx+w+gVwV
+Vvhx9D6TDD+97TCH+97TBKom5n4ZwRwe5f3b3k1sgNxx80OlkiCCnsnHTgvjOh0V
+VvhifKl8ridCpeJR9CPB3KmWrEpgLin3f-fuNT+W5kbVgFbT2NblZKANJT6F6m2V
+VvhwsmX8QcmX9Acn0wNn04AoVXDudoDXEyQkj8AkWb96smmCAcZX77bmGOAQcT5V
+Vvh8LlGg5kng5kmgbkGhKjmhrj0iMi1ith2jeZg4ulfL9fCsaodocoboaoyBh3hV
+Vvh3wuQOpm90w0UYwU8st+vBZ9yIPNBPqpLp6p5pLpapZpppppoq2q2q1qF+-OCV
+Vvh9Kgeiegsjbgsk4gckJgjX0GmyAAv9XX28mX2ClX38lschWgWgS89Mg1shHk6V
+Vvhh2k6gakC9+k6gak6h2kDWpD+y9Mg1WWq8p8MhWh0fWX58jX4CjX48kyAIv0AV
+VvhF90AEv4AB94A7P4A-v49uP0felDWpo0UYwY8st+vBZ9yIQNBPqp5osororoqV
+VvhpJpJpJpYpYpYpnqF+-Oy9Kgeiegsjbgsk4gckJgjX0GmyAAv9XX28mX2ClX3V
+Vvh8lschWgWgS89Mg1shHk6h2k6gakC9+k6gak6h2kDWpD+y9Mg1WWq8p8MhWh0V
+VvhfWX58jX4CjX48kyAIv0AF90AEv4AB94A7P4A-v49uP0felDWpo0UZwc8st+vV
+VvhBYzyHfwhVBNhGB70HEF2nYNAl6H8GYmHgHm1gnlmhG+-Zi9Kgeiegsjbgsk4V
+VvhgckJgjX0GmyAAv9XX28mX2ClX38lschWgWgS89Mg1shHk6h2k6gakC9+k6gaV
+Vvhk6h2kDWpD+y9Mg1WWq8p8MhWh0fWX58jX4CjX48kyAIv0AF90AEv4AB94A7PV
+Vvh4A-v49uP0felDWpog6v90iCECnNBzYn3H+HJOaosWB9WZdocWBBePJH+E+5PV
+VvhsU3Q4gag8Apw8Axg4B-Q5soIkTXGD-ssomkMonk6p0kC8AIg2g1WX39DyAEwV
+VvhyABAyA3gzWnwyA3gyABAzsl1nzX39DsclGl0aAIgAescpWfspHfspGjsp1iBV
+VvhB9XHD+XGH+XFL+XDT+XBaumQ+y6-N8+dn+L55FwOIjtF79fqiLi6i5iLiaiZV
+Vvhipipioj2j2j1jF0L+XWfPhS9Oc+Xc0fB-QQR5ldGzZ4rGuxfVvS9RvRvRfZPV
+VvhZPZPd9d9d9gvoEaU6seqvLWqe+6kk0jC-QQR5ldDzYumqYq4pcp27B72HEFYV
+Vvhh6GId6D1Qx2q9H6AQ248pC+ZXIe+EQ+WnkL55FwOHTtA7AFKdXW69WZd86UqV
+VvhdZH21V--WhHU7Mp8U24sSx+ACCN0CXjyChb7rAPSn8l8msm7mMmcm6n5lsnLV
+VvhlcnblMnrl6o5kso6kcoLkcoMkMobkMock6orkC8BC9ssp6fYXIrjl75HlNstV
+VvhXIbXaBG8scosjsock6obkTXFT0XET1XDT2XCT3XBX3XAT5X8X6X6b6f2f0rwV
+VvhDQlhb70kxR2A++7-D2jyGgdQ6RePDMiHqA7Iq2L0q1axUvbO50I+5QlQjOmhV
+Vvhj7m7fCf0jDP26NnolG8B+gMXXD946tnWlWGAsgMZXB947Nn0lWOQggMbX994V
+Vvh7tmWlWWQYgMdX7948cm0lWeQQgMfX5949+X4949+b3949-b29490X29490b1V
+Vvh9491b09492X09493X-9493b+9494X+9495WmlWltcgMgWN9497WGlWmcUgMgV
+VvheL9499VmlWn6MgMgmJ949BVGlWncEgMguH949DYWlWo66gMh4-949Fj49Gf4V
+VvhwhCQMhGAPmpLlWpalIpZl4pYkep2b6o1bwXF8O0IoUllmYAsIzhFhYqDPLTKV
+VvhXKTLTMPMLNLNLNHOHOHODP2+3LfDhwZsT3OnP-SpSyOtOwOvOuOxOsOzOqP-V
+VvhOoT-SmT1SkxwJtX3W5lrSAS4T7RS8Aa1b7Yi8Ai-udmt4Ai0stmNCAa2b5ZTV
+VvhX5VzX3WLlLeAC9-wBv7w3vFvxvNvpvVfpfdfhflvRvtvJw3v3wJsT7hwyfmUV
+VvhZBAAQQd1C3DvIQNBXqpbpMpLpLpKppppppq2q2q2qHql+-KenvT7S5lKgqkLV
+VvhhLjaiKj4iqiajKi4jqhakKh5kLgbkrgDT3SMlMVwRrX5VbmLLWX7UtmN9WX9V
+VvhUSeQiFX9UiCQaHX7V7ltLslsTslMZwJuX1WkT1SmT-SoSzSqSxSsOxOuOvOwV
+VvhSrSySpT-SlT3S5mPTDewc7bI1558EnVEyouz9OHMPKXIEYoYFB-4HCG2n2dAV
+Vvhgv2wcvAwYfIU+MSgyrmLVwJfBg3vJvtfZflfhfdfpfVfxfNg3fFw3v7wBv1rV
+VvhlLaAK6T5RslsNwZpscmMCQaGscms5eb9YMms9Xb7YsmMGQSJyAS5yAK7T3ScV
+Vvhksg5krgbkLh5jrhbjLi4jKiaiqj5hrjbhLkLgLlLVwarnuj+g79J1558EnVAV
+Vvhyof6L05Kanp9YxH0JBF3khEtjICtpVkZ+-aOrgPMS5p4kao5l5nKm4mqmamKV
+Vvhn4lqnalKo4kro5kLobjrp5aBG6TKRspcNxVpscq6CRWGscqc5ebOYMqc9XbMV
+VvhYsq6GROJyBO5yBG7TIScochx7w3x-wBwtwJwlwRglgZgdghwNwpwFx-w-xFsV
+VvhTMlhugikYBMAQQd1C2vvHAJA-BRePJW6pC8KbIW6pKdhRA-++Quhv4q5VxFgV
+Vvh7h-wFwpgVghgdgZglgRgtgJh-gBx-w3x7vxxFtXIW5pbSBO4TMRS8BW1bMYiV
+Vvh8Be-udqd4Be0stq7CBW2bKZTXKVzXIWLp5eB89TGT-TET1TCT3TAT5PAP7P8V
+VvhP9T4TBT2TET+TIS5qAPSf91+vBUAQQd1C2DvDU6n+c60Uk28oGrRKGr5VqDOV
+VvhPFN0qKpK2hZRZxVRhRVRpRNRthFRxx7hsVPEPSAahxsXSarWJdTRBLVhsbNrV
+VvhrGVqTQC5JxoeR5r0hoTPCrCBggUbqmoL7xcx3mTO9GQMqGoxDMDHoxUhHHpnV
+VvhpBDKDJoxMhPHpHphDIDLoxEhXHonqBDH9NULoWqb7x2xdmTF9PQckhi0WnqsV
+VvhBv9QR5chppOHrKNs9RRqQhtcNXraZZ9SOaEhxfMXrao42hth7xxRFhtRNRpRV
+VvhVRhRVxZRYVPJPN74oKqXNsTQ8RLR9Fc-+k80+cA0A8-PqEk++Y2wIztFi2rDV
+VvhPPTOXOTPTQPQLRLRLRHSHSHSDT2+4KsfyniMf+enX1OpX2Gqv8X38sT28tyAV
+VvhAffrkWj5k0jajnjqjWkKj0kqiHlKhnlrgomNVgmtnvLJax0UKxcA++7-D3DyV
+VvhIQVBnqqbqMqLqLqKqpqpqpr2r2r2rHrl+-aS8zgva8k8gskqhMl2himclGi5V
+Vvhl0iTX18uxw6flw+ftfwvxfsg3fkgBfYwJfQwRvBAaMPAiQyppNjEc3zP1++0V
+VvhEHlEzYv-9SHQPOXMEYpYFBF4HGG2o2dAwv2wsvAwofIU+QfWjvCtWg0fCABfV
+VvhKAF9PgeAIfVwEfbskmijT08wT+8yOzCzOy9-Ow91OtD3OrD5SnH7a4n9bDhRV
+VvhKPqUJxkA++7-D2vyH9V93AleP8W6mS8Kb7W6madgl93++UPWjvCtWg0fCABfV
+VvhKAF9PgeAIfVwEfbskmijT08wT+8yOzCzOy9-Ow91OtD3OrD5SnH7a4n9bDhRV
+VvhKPqUVxoA++7-DZ9zIQZBvqr5qsqrqrqqrJrJrJrYrYrYrn+F2+4csfquhbgQV
+Vvh4kgdl4hNl2i7l0iNknidkWj7k0jNjnjdjWjtjHk7j0kdiWktiHl7i0lNhnldV
+VvhhWm7h0mNgnmdgWmtgHn7g0nOYgyMDEZmoNMx8J9HcmpN6xOF9LgRWhaRjfWBV
+Vvheh5WjvSsJhs8++6q9XjyCi9Co8qSOBfAmgz5oQKA4QGACQ8AGQ4AKA4AOA0AV
+VvhOPX5WslteAW8tsm7aAW8yASOyAOPX3b+X2b-X1b0X0b1WvlB14ngX8nCeBahV
+Vvh1WngU92Arl5564-JDTgvk7k0nNk0kA8Gmw8Gf4Mwb4MtO4FAVcN2Rg31H4P-V
+VvhEoNQIlL3L3AJNASAJAS3L6T2L6R3makpmaFQhQBQhHxQpA7Qp0PBH-PBEi7gV
+Vvhsw3gsmPD9-PD6jTC9-TC6cnGkMnGBxpx8BmB4heh0xawv1pQD9lh94mAbDmQV
+VvhL8ngf2mwr9kwjBmwD9nQj2mgv8lgXEmAb3owLAkhP0nuqeoNqtoMr6obrLocV
+Vvhr6obrL2R-w+R0R-v9EbWoKgh4To4gx0R-Q+x-FHDL+HDIInak2na5pnJkJnJV
+Vvh7ghQ7ghHX6L1X6J32wRAFFD5FIBQ7QJ1L0JYFtP4F5ZbBwT5BwS0f1mGf1cgV
+Vvh4ggg4g0UUtUA++7-DYrzH9Z93AtePAW6my8Kb9W6n4dgt93++VbWjPeqSlkPV
+Vvh0mb2Opb2Gsb28tb1Cub08wb+8xazCyay8zaxD+aw90au91atD2as93arD4aqV
+Vvh96ao97anD8am99alDAak9BeGntUx0L9FZXodIhCX9JYXpd2hSlq8qNqyi6qeV
+VvhoS8zhv-xs+U++WgaDTkvNBLqp5osorp5pKpJpZpZpYpopopnq-1+XDkgdLP5V
+VvhD+L3H-L2P+L0X+L-yA-g0A3Q3g7g3ABhHXPEf8lASmP3Vqkrdg7vP-P-P+P0V
+VvhOrkafrkqdgFbbWl4STkrQVP06JQVT-6JQWP+6pIYOWFXBLMqeA46k6hJg5vVV
+Vvh0++08mMxz1j8HJxhBx8B7x7x7hFRFRFRJBJBJBMxUEksnw98Jqlnk3lIkJl4V
+Vvhk3kck3kTX+P+X-L-P0P-H1PIsqo8mgH5galMRgBuP0SqkKkKk4kahw7exwBeV
+VvhP2NtsgFbbwBr6KkW3L6LkG3L6ak0BJ74cYMnJqBeX-WA09JEk61W0++08mMuV
+Vvhz1XG6-N+34+GU--0HSF2r2NBd6HMGYpnkxMx2xIhAUvMrh5NJqpXlRFB-RBgV
+VvhLFX3oDX4mB-R-h3h-B7U2yBhyhbHpf7hG5PGSaoLhh-h-gPFOroKfroadhBbV
+VvhbWoqSTobQVPF6JQVTE6JQWP0BJ74cYMnJqBeXEWAWpL+SiA6++6f7XTwBNLFV
+Vvh5HanoPYx5FJB33oR2tjFCtoloJ+-3crh5NJqpXlRFB-RBgLFX3oDX4mB-R-hV
+Vvh3h-B7U2yBhyhbHpf7hG5PGSaoLhh-h-gPFOroKfroadhBbbWoqSTobQVPF6JV
+VvhQVTE6JQWP0BJ74cYMnJqBeXEWAWpIA-qt+U++WgaCDkqNAHIOaocWB5WZdoMV
+VvhWB7ePIH2+-2srh5NJqpXlRFB-RBgLFX3oDX4mB-R-h3h-B7U2yBhyhbHpf7hV
+VvhG5PGSaoLhh-h-gPFOroKfroadhBbbWoqSTobQVPF6JQVTE6JQWP0BJ74cYMnV
+VvhJqBeXEWAWpL+SiI6++6f7XvwDB3U2OrXMxnmchfY90qj8Wr1MxuU2K+-4MrhV
+Vvh5NJqpXlRFB-RBgLFX3oDX4mB-R-h3h-B7U2yBhyhbHpf7hG5PGSaoLhh-h-gV
+VvhPFOroKfroadhBbbWoqSTobQVPF6JQVTE6JQWP0BJ74cYMnJqBeXEWAWpI904V
+VvhtUiCCnsr8DkaeQNwP1kQ1-K4ZJOXkJR7K2kZJ9JqkJBA3JX+MIkZLskNl3GAV
+Vvh8AFYP1T3NIl5lZnLlaswlgRgPNkRueFhK6PHSqoakKoKkao4kqnrl3njT3PAV
+VvhxwNgeQNwaQKAUVT3b56Ll27AMXT1B2l0Jg34H07qh6KmZqOpNA11kg52b6SUV
+Vvhk3rb-lln7W+szGPFbLohBML3o1dR36LENpo6Jh03LFV4oMBhBYPIFDTQxhncV
+VvhTRPRxxrqqGBhUXPL7KpWNRIcLH8ZoGlPDFNopB1NXPsarNrMrLrKriBhlhlxV
+VvhaR5HovoEg4Hc-lln7W2xzXhYoDPDTCXCTDTEPELFLFLFHGHGHGDH28OAf-laV
+VvhNQBOH-H-GpkYZQBLL3JKlJJQNXxgRGT5IjP6kTm+AyHDxgzrnzP96qmWFQYZV
+VvhP67ZlmVQIeL19-H+D1Nolg59Wf-ZuEQQQmMVDTsvmYoDPCTBXBTBTBPDLDLDV
+VvhLEHEHEHFDH28aAf-laNQBOH-H-GpkYZQBLL3JKlJJQNXxgRGT5IjP6kTm+AyV
+VvhHDxgzrnzP96qmWFQYZP67ZlmVQIeL19-H+D1Nolg59WUk4be-lln7W2uzXXGV
+Vvh6-3BxhqBh0HNF2poNBJ6HHGYoXkx2x2x+hAUncqR1JNZoZdB-B-9LFGJoZRRV
+VvhFJPIJJpKDqpZ7xNGxhTEzL-0tBvqrjTSxhcXPN73q0JhQaLK83p0dR6h-ADGV
+VvhNopR1OWUk3nf-lln7W2szXNYlAOae6WS8KaMW8OalAECyBbEpKNR7OHEHEGpV
+VvhoIZR7LLIJKp3JRJXxhNGTKIjPLoDpkEiHSxhvrrjPO6qqGFRUZPL7ZpWVREeV
+VvhLG9EH1oaRBLEqcf+8yk2QQUM31k+ClHGxh3x0B-x3x7h7RBRBRBBFBFBExIEV
+VvhSaXWn6oSrqo6PWpUk0nh-5564-IwznjHHHxh3x0B-x-x-h7R7R7RBBBBBBExV
+VvhMEV4bWnEXGvTPFVy9K9+8is2QQUM31bzC79IHGPEWo77F2R4FIV1GY6wAHoJV
+Vvhom04OC9AXFvTPEVi9K5+6yw2QQUM41Q-BWH2BeMMXIsap6UKdXH20yPC9BCBV
+VvhLhxhG8shMv-zw+U++WgaDzsxmFq1lqcwOpD4kXD4z5lWT+lGiQEg4A6g8g+gV
+Vvh2mSmkHBu5-BKn1RQgdLJPJLKLKxRPplsRQD0FQ3aMohQ-FKJkeVQGLL4ZTL6V
+VvhV3mbDWP8XW3gn0uAlz3glWT8QzP8NJmZNgVbL6KJlZhQFQ3Q7QBQ-QNaP8kgV
+VvhyAD+Gj26st+k8nPyBR3R2RWPDKiHph3IpYLFpXaxMvbM5FI+3VO6oR-gnEF4V
+VvhKx+nZR8093oq2h-h7V9FLGXGPFsboqoSqKp4o6ocPWpnpv-XwUU++WgaDTsvV
+VvhVBLqp5osorp5pKpJpZpZpYpopopnq-11XDkgdaP4L+L1L0L-L2KplZbpm3RQV
+VvhdJsamaDWPAMSVwlz3glWT8QzP8NJmZNgVbL6KJlZhQFQ3Q7QBQ-QNaP8kgyAV
+VvhA9-XwkU++WgaDTsvn2pTPHTGXGTGTGPILILILJHJHJHKDM2AOAz0maNgNQ-QV
+VvhBQ7Q3QFPL4KTL6JpmZLWP8My7glVu5n5wKn47wdnxgdZL8Jam4RQVNL4Kpl3V
+VvhkJkZkpk3laNgf0nskv-cx+U++WgaCjsslGpopKosoI7Ax2HBFYmoVAZ8H6D+V
+VvhD5D0D4926C4Az0maNgNQ-QBQ7Q3QFPL4KTL6JpmZLWP8My7glVu5n5wKn47wV
+VvhdnxgdZL8Jam4RQVNL4Kpl3kJkZkpk3laNgf0nskkk49p0++08mMrzXKpoFotV
+Vvhgx4tDFoJHFFR5FCPoHiRAR3E+FaBvFqKNhJQLGLFLELHKppJbpppRRZJsaqKV
+VvhDWPPMSVxhz3hhWTNQzPNNJqJNhRbLLKJpJhRBR-R3R7QLJNaqR5SXG1+LjM6V
+Vvh++6f7XXyBcH2p4dh86XFsdOR46XGOap2l++FOBvFqKNhJQLGLFLELHKppJbpV
+VvhppRRZJsaqKDWPPMSVxhz3hhWTNQzPNNJqJNhRbLLKJpJhRBR-R3R7QLJNaqRV
+Vvh5SXGg79s0++08mEpzGnI9J9JDJ9JDJ95VWlQ6mkqOABOP0H0H-H1Kol4ZQC5V
+VvhL26ZNQAXJJl0FIL17JBg6pMZkmRGL0Bp7Q6cITP-8Q1+8g0nf+gfk8Cw0WkAV
+Vvh1t9-MJUg7GJnkZ7a90MpIw7IJGkpFI92JJAgBLEWl2ZwB8P1KpkZkYk2ksNgV
+VvhEWkgIaX69J9JDJ9JDJ9J9I0kHDY6st+k8nryCvHOxhZxWBVxZxdhdRhRhRhBV
+VvhlBlBkxoE+E3gJbsg4g5+X1X0v8P3P0sal5kzL1X1P-6Kl3kG4ABOAg4qN1kQV
+Vvh1-L-ksRbc2nu0CCEA0gxzXj+H9xgZwWAVwVwVgdQdQdQhAhAhAkwsExKhaTWV
+Vvhgegf49G9DfhfNfDWOpSoxPG9Ff6VOpKm6Mh3cmgf-aEv8lgZgfG5Nv-FykXXV
+VvhY1+fCjssm0r2qaq6pY7BF2HGFYo2VAt8HBD+DAD0D9926+2YP3Ny9-f-k6ksV
+VvhkimalKki7gFwDpkskqkG3gFQ2VX1KX9-haEw5+kJkQC5Nw-5z+XXY1+fCDsqV
+VvhhAHNOapsWBPWZdpcWBRePNH2+-Lap4TWo8oAXGXFvNPIPFsaorojLGXGPE6KV
+Vvhopo04B7OAh0qN1oAo3oB85Nkg5nx05589GVCzXjBHLxhJxGBFxFxFhNRNRNRV
+VvhRBRBRBUxcE+F9WlOkJb1WLlJhwMw5qlWkzP292T0D3xg6gTqk0m5cwbqcgjqV
+VvhUglqDBxa9DxY9EQXoTMWoy8BLqpy7BbmqS6hbmqGnFk0mpcgfrUghr9ARXnJV
+VvhQgss9EBHodpJof-hzUXXY1+fHjwvVh9WkRSBbgFhZbX8NQ55MoRQNWCpl42gV
+Vvh7QCAFQ7wNQ3wRQ-gVfP7KzP7OamLbqmabcP8TsP8OKmLbqmKdgVfP6L+T4P+V
+VvhT4L-X2L0MGkZkq6uP2MoNgNZkAVbT9uaqDXKfDsgf71+UDw6++Af7XvyDBGBV
+VvhvEqpJhV7LKGpp3lR7R-h-h-wLGOyNh7uPGOqoLhh3gPFLEPEPEP4oKhRBdOhV
+Vvh-bnEKAo7LJOpoqlR7h-R3h3R-h7QPGOqophhBePHSTPIOTPIS4pKXcPJTrPJV
+VvhO4F7SDMqVdMqReMqROR2RJo283PEIpJx-e+FOv-si+VlmWocGTsqZA-AReP3V
+VvhW6lC8Kb2W6lKdgRA-++JTWlOkJb1WLlJhwMw5qlWkzP292T0D3xg6gTqk0m5V
+VvhcwbqcgjqUglqDBxa9DxY9EQXoTMWoy8BLqpy7BbmqS6hbmqGnFk0mpcgfrUgV
+Vvhhr9ARXnJQgss9EBHodpJog+ypkQQQmMH7TUap0omomonoXoXoYoIoIoIoJo3V
+Vvho3oDLELELEP4oKoKoJoZoZoZoYooooooonp1p1p0pGpGpGpFm21r-lln7VMZV
+Vvhy0MhUhUhUxQxQxNBNBNBNBNBNRJRJRJRJRFhFhFh7h7h7RBRBRBRBRFBFBFBV
+VvhExIxIxIxIxIxIxQRQA-20kZJK16pDTwwq7hxfGOxNcEpMxBh+VJZoJo7NwLEV
+VvhZchR0LWao7S7PFa4dh7uGpp4qylhFhDW+Voi+EPIPOXGXHshNRS+g2+A0CCEV
+VvhA0kxznn7bIkh-cDBP+99L197L0L5L0T3P-X2xg8AFQCABgFgFgMgPdPOP3NyV
+Vvh9Nkqkskyo4lKkcksTWlplv+q1EXXY1+gDTwwmOowAHmqZgZeT6Kslpk6lZkMV
+VvhlKkMl4krl4l4kykKlKTWqQDh3gJg8AC5sgUwU9-S1UpJK2V2DTwwmNktpACQV
+Vvh9ERoNcDBP-6qk0mpl03QAgZQCQ7QRQCQ7wJg8g4AHqktkcl3l6kskqlLl4l4V
+VvhlalWliZgNhdgNgJbsU6QBgNgCADh-gNgJg8AGAC5sgVAUwX+IEwBJJV6F1rzV
+VvhDBWh4U2h8R6HqbV3OKq4o17eTLLFespZoOmBJR4h0BFh4h0BBh8R7xBh8RBhV
+VvhBRFxFh9gPJPINy611Gs--hJhFh4BCB85shRBQxT+AW66++6f4lfxCnDFBKhYV
+VvhSb9tWFduwNWHAWcm9YUh6i7moWTmoWTmoWQh6bwh6b9G8-olQ4U79EJJJVoKV
+Vvh-TwIpw+mL+U++WgP4jEvQRAM9G7z9G7moWTmoWTmoWTW9G7yEh6c6XcWAza7V
+Vvh4bfla77uR4hZDFAkW+Zv0++08mc0+-TP8+Zw2++1JZI0+-TLw+tdN4JiR4ZaV
+VvhOKJm63FBIj+JMqxYOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoNa3XNK7tR4LoV
+Vv6+Cc++DLqxjMJV
+Vv+V
+Vvend
+Vvbytecount 19088
+Vvcrc32 bb036928
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.746pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.746pk_vve
new file mode 100644
index 0000000000..874298a3d6
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.746pk_vve
@@ -0,0 +1,545 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:16:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.746pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBXclB1Al+8+++2otni2+0ZFB++dIHO07EEk++Yp4GTp6li7+3i7UV
+Vvh3DU-9Wc-1WgRunrTAdr28hjnGRd2fNwqbMFepzC7pXahLneREv0hDngNoi6vV
+VvhCR1WCpbCsXhtnDCtb8Gtf7wviQV9igTwb4mwLnjtl2jukzD-b0H-f-wwCQ-AV
+VvhCfznlNjXlejTD5awxAWPdQWPZwSfOgOkgvD-h6sfitkEi8d00pJMGHx5zIPTV
+Vvhm+2wE-L9j7f8bAf7XBf6XCf5XDf4XEf3XFb3XFf2XFj1yB8gDsofki8BCg9sV
+VvhofkjXGf1XFj1yB4gGB0gKAygOAugSAqgWAmQeAegiAWgrLoBbCX9b9XBb7XDV
+Vvhb5XEb4XFb3XGb2XGf1XHf0yBGg4BGw1spOkCSBKvXJf+yBGw0BGg4BCw4B8wV
+Vvh8B8gCB4gGB0gKAuwKQqwKwb-Y-Wk3Q6-930Ud2A9XXh9DYbuFwCfYfyrh1j9V
+VvhmmCug7SYi7hJVPOPZ4OpWxF4gsk27v8A8lgMl90kX4ecm7aAe6b8Vtn5SApqV
+VvhbCNNnqKR-IfEJ7oJwuoYweoo8hEz4kp14hIlfMulgBbuqTgBEy6ep1ChAnfGV
+VvhBNoXKh2qbFBdo1WQwtXCCdnHg7mngcmngsmHhMlnhslHiMkniskHjcjXk7iYV
+VvhkthZlf0LmfrChxKkifWEF+kstYx3Fzp4rws-D8+JoQ15jEf9fDbBbCbDbAbEV
+Vvhb9bFb8bHX7bHb6bIb5bJX5bKX4bKb3bLX3bLb2yRWQCRWg9tqNkjbNf-bOb-V
+Vvht7qekCiReyGtqekC8Rag5tqNkjbMb1yRSQGRSAKROQKRKQORKASRGAWRCAaRV
+Vvh8AeR4AiQyQmQqgmgigr+lvlU3QU-D8rws9W4FEfXY2MzFzp4sU5QD+mw52fEV
+Vvhf2bGX2bHT2bIP2bJL2yRNAGRQwHtpokyGRUwDtqHkjb5D1D0t7lnpDb4HIb3V
+VvhLIb2PIb0XIshDIb0XIb2PIb3LIyQNBHXb5DIsdlnlXt9bPD+yRdA1tqXkTbNV
+VvhH-yRVQ5tppkdpakdp6kdotkOoPkA1AknsU5oi4B40b58Enh5zIPW+QkA18kQV
+Vvh4gyg4R4A4R7w4RBg4RFQ5tpIkNpXkTbKH+t7pnkC8RUvb5D0DZiQQx1tlYo7V
+VvhlJo7l4o7kcoC9Ho7kco7l4o7lJoDb4HEtdlnoCl7+Jg-D0qC9JnUg9J516svV
+VvhIIJ7yYTGf69JlgAx99kHo9ZuHCb2K3n7m2NgiAl2P7XDEbm6oQ15XHj4XJf3V
+VvhXLb2XNX1bNX0bPT0XQT-bRP+bSP+bTKurpiE23fu+FGTc-77c-Asyk2nWU31V
+VvhWU5ik9+Tyh5F4x1F4xf-WhmdyhqOyhmPbQauqtkDbPb-bOb0XOb0bNb1bMb2V
+VvhXMb3XLb4XKb5XIf6XHf7bEALmsnXBgmQd2PCf3JZo9e6HGnPDJlwAhb+nvUeV
+VvhG+k++Yp4Fzp4shCBCQ5CkQSx0wbgyR8QfW+ImioNodmPo9lw5CkNshCBAAUKV
+VvhGEL55GITFzp4-EbEpfqC+jbMjKo7-E0kDIc6CCIp8oXvFg1Wowj0oupi+IapV
+VvhlddwKNb2aC8wCMj1WOkteQC9X2X+L3X-D5T1D3T3D1T5H+T8JrngDHb8iBN9V
+Vvh1558I2R5zIPWowL8f-oQD1jHj5bJX7bJP9bJLAbJHBbIDDbHDEbGDFbFDGbEV
+VvhDHbDDIbCDJbBDKbADLb9DMb8DNb7DOb6DPb5DQb4DRb3DSb2DTb1A-0Q6k2NV
+VvhkJ+Eb+TTasrtehuNkBqMANrNQnbQZXGhiJBdqtEsbOYnahaGCtqN2w4RX+kdV
+Vvhq9l7pulOpdltpdm7pNm8p7mNp7mdotmeodmtodn7oNn8o7nNo7ndntnendntV
+Vvhndo7nNo8n7oNnDbGb9bHb8bHf7yRCwSx9-lA5DlJshD0nfV-H+c++Y2tFzp4V
+VvhshLJkU29+HvPY-HXbKDYiRIw1WbIH+bHL+bHH-yR7Q4R3g4R-w4QyA4QuQ4QV
+Vvhmw0gf-j+lgAy6-cke9pB1eehLpV5zIPWihCuamoP8sgR4lii6lXDAMizAcnHV
+Vvh89jWAsmnC9jnGAYoWvsXKAQpWvsXOAIqWvwrX1Bsiy6sX-C6izCMjna9jWCcV
+VvhjHe9jWCkWvCkWvwv49Yv49jWCmWrCmWvwvC9IvC9jWCoWnCoWvwvK92vK9jWV
+VvhCqWXhciy6vS6CrWvwvW4CsWvsXiMEva9jnic6ve9jWCvg9i9jnj7j6iZitj6V
+VvhiLirjMi7ibj8hP8tKwgNyygpgxmoCokkiElC1++0HIN5zIP6nE2jnAqg1FkQV
+VvhL+odlw1HT6ANopmH4hAwcmbHD8AtoXmXCh2wcobFD8B8o1mXKR+wcqbDD8BeV
+VvhnXmXSQswcsbBD8C8n1mXaQkwcub9D8CemXmXiQcwcw0QYwcw0gUwcw4QUwcwV
+Vvh8QQwcw8gMwcwCQMwcwGQIwcwGgEwcwKQEwcwOQAwcwOg6wcwSQ6wcwSg2wcwV
+VvhWQ2wcwaQ+wcwafD8D8anmXmtcwcwidD8DAaHmXnNUwcwqbD8DCZnmXntMwcwV
+VvhyZD8DEZHmXoNEwcx4XD8DGYnmXot6wcxCVD8DIYHmjDJkAfnpfmXpumjDMb8V
+VvhDNX8DOT7LNT6TNP5bNL3kRRPnR79zBong90HHkllmZ-1GTd5o9+Mlk2MaBlwV
+VvhBxVwRxJwZx8AiAxwxwpx3wiB4AaBCASBKALspsksqMkNqNk6qsiRiNyRqLyhV
+VvhqabTZS8hyXjTgi8U2O5g0k2P4U2O9XjTgzfTd9rPLurOTuquaRiOfNetqNkTV
+VvhbLb1bJb3bHb5XHX7XFX9XDXBXBXDX9XGT7TJX3XMX-XQZt+Flk49o9VWI+fXV
+VvhY2MwFzp4rgM-90+ImQ14j6f8f5bAb4bBb3bCb2bDb1bDf0bEb0bEf-bEj+yRV
+Vvh4g1bbFjvbFf+yR0g4R0Q8Qyg8QyQCQuQGQqQKQmQOQeQWQSgfMnBLDvEY-OkV
+Vvh3A5OshDFcBRF1558I2FQyYT-gBesosaAu98Ae9OARvdwG9mA49u9yA09qA89V
+VvhiAG9aAO9SQOPOAW9KQWPDtmdgNn7egmdbCaC8guaseo8Hv1Eg1yh8WulgB8kV
+Vvh9uoeDWgB0kHWfEdjfCe7ndagmeyQmP4PJfGPC9CPC9GP2qCkapaWcdarWGg1V
+VvhW9a58m7sisMf6pWxVGgYC9y28mEckMAf8ml56f8kls2f8Qef0AubXHj9Ug4kV
+Vvh7fUgtvQgxfQjnrhHnsgoo5gnoNdR4bTGjB8vpDihKspvTLhhaoqv9Sc-3d0sV
+VvheZ69lltAG2XxFhfKrx2-9LkAD+pem8pNmdp7muodnNoNndo7nentntntnundV
+VvhnvnTbEfBtdo9nDbEfByQyguQyQyQuR0QqR4QqB8QiRCQeBKQWBSQGhbIrB9SV
+Vvhb2TQb4TOb5TNb7PMb7TLb8TKb9TJyQiBHtn6oyCQmR9YbAfFstn9o7n9klk7V
+VvhnA1-DvbBj-Ctnfk1iQuvCvnegukQudAhD4aGDHm7Ioowf0+WVv0RIkXXY1YgV
+VvhGTd5ktkmkwCnkQSHk4ZqGakZFNL4EpVQYlNpmtRAq4LBVJnrJR-YLFNDLGIqV
+VvhoZDWPHEqp1DronDsoXGBWRShSxL0owLEmAnAmQv5nwPElgz4nwTCmQnAmR13V
+Vvhow5KjKfMbMyBbs2hOjpeshSjpezKIJpJ3RFGPHIboYBx3HXDJ8nIJVH9FZBQV
+VvhV5J4l3V5WLYumOD+lQ+gKgCkDJE9XXh9EYPwFGsU6Yj1j0h6ltlcFgaQVXP8V
+Vvhb7MjL9b8Ii7AmQh0t1nNn13AqQlyHCbBDhrFY-mk4QDPshj-e37J1++0HIN6V
+VvhzIPWl9Cyamkf8pgAKPWQRvaQVPfh4QYvmAYfqAUvqQQvuAQvvslXkDX2D0T1V
+VvhD2T0D3T+D5OzD7OxD9OvDBSrHDWnLGWLpPbNhRug68WSJUk++Yp6GDt4sg4vV
+VvhirhAKngf17apf9SrbAKsf9GuyQgvigZ9ntmHjOlojdlnjulXkDb3D-f1H0yQV
+VvhAwCg3AGQ2wKg+wPtjnlujImDaxD7evH8avD9euDAyPYwqfRAvthnnuhIo7hHV
+VvhoOh1ojanDHelHIyP2xKeHKaXpuYxXtUxaaHOyKDPd2r7ExqXDSyGDTgk2C8lV
+Vvh+GyU3C8+3i7U4DH5eClL2558OaJ6zYPWk91+gvhfGwh9qngP1+gA4fGQ8QFvV
+VvhKQ8QJPOQ8gF9XWb0b2CusdkdkXiuk91+GwyQ0kk1jOjX4Pt9vtjX4PsvyfknV
+VvhawH+yPknawD-euEuiYkjauBNiXktiIKfYwHti1SPUwKPR5erD4yPMtaqD5apV
+VvhGOhHmC8PEv0PEwfWamCmamD9ekCoakHAyP+vGP+wqdCqaInjaHhdYwybCsZoV
+VvhoDZni7Qx4ZGsdIojZHidIxCIGud1pDYnj7AxKGGwcXpjYHjd2xSmjf9Msf1+V
+VvhgBfWb0bPX2XQxwFxpgNhvplZrom2+ED6D10UlpUA++7BG2TyFWsg4mjPCqiPV
+VvhKugfqkjf0zX-ezP2ezH3ezD5exH6evH7evD9etHAerHBerDDepHDepDFenDHV
+VvhelHHelDJeXpuVBScDNdYqeFBiYDRcYrfDTgU2P2-4k+Hc-Hu+Ic-GU2f+-8lV
+Vvh+Egxt-fSAur2Ghd3fOBuq2WhN7fKCkfIGkfICmfGCofEGofECqfCCsfAGsfAV
+VvhCuf8Gvf6Gwf6Cyf4Gzf2H+f2D0f0H0f-H2f+H3exP3ewX2g9akkf8phPuqXWV
+VvhjfX-e6ZN1++0HId5zoPWkPqvWolPCogAaPWgdvagdPmgZ9qkm2jem1k8lYk8V
+VvhlIkel1kv10H2f0D4f+H4f+D6eyD7g9lAefkwmfdAmfcwufVAukhYo8hXoeh2V
+Vvhoeh1p8gYp90kHKekDMeIq8YxebHOg4DQdHreBBuXA-0VE-5v6-Ck+Ic-PfmEV
+Vvh3O+IghbWkvikcpc7llszAoTuFWsU31lAeIkAqJfDZMo7Nx0aPFZpoNVR0bLFV
+Vvha3o8VB4NHEaYnudAyPHCenntk1ndkHnOkHnNkXn8rNrNrOrNrOrNrNrOrNrOV
+VvhrNrNrOrNrNrOrNrOrNrNrOrNn1ken1kdnHkNnXk8nXk7nnigt9bDCto1eh+uV
+VvhbFCOo2aR36bGFuoJSR7KfFNdoaKR7ofFV7oMGR0YbCk1b9l0sU3Gk5hV0++0V
+VvhB0sjz0rFY-LG+ENqrIlhcx7hUxFhNRFhJx7xCBBhDtobodorojTITIDKQ-fXV
+VvhQ-HErhPPh5q7ZxOATIXFTHTHTGTITFTJTETKT6pblxRvyBRrjWq5Sy9LVn4BV
+VvhIVNn4BEWNn8BAXNHFx6YNHK9BaAsVoSvofXGfFNEg5BW0CCECH77zIRspy91V
+VvhrNrcrym5rraAtqkwdoJrm5Aw3QRmD1P3QGlal7m4ktmKkcmbkTTAT+xwpvxwV
+Vvhq8sbncbdTCbsTCWLnNbrnMdwpvTAWrn5k5n4kMmakdm5ka2gVgBGD4L3InkqV
+VvhlYJA-gR5FrmHb1qclv-SMkQQQmsb9zohldnwH7O4lKkIkplHkJlndgRMT3S4V
+VvhlcNwKJT4Z6ldFwVoX6R6mXOB8R9soiaRDsotososnXBwsnXBB5n1KAgqT8C5V
+VvhmHZgUvP4D-P2D2P+H4RpmwDDb+1+RaE6st+tAYbxFk3M+Ksh6-mE5M+SvLTSV
+VvhW5qh7Lq5R2TKP27xJh6lTILJfGPLbFTMXFPNXEPPT5qriBhvTQSjXQSNr5bsV
+VvhrLXdbRSS8BpuyBlvxxlwTPT5qco5qMoKq7oapeoqp14BBh6mbIL2DGlrJB9FV
+VvhoaohK7Vkg3hZ-lln9WQjzGr3XEkghaP5Oal3kKkZkqk4l4dgJdP5NzT5RTT7V
+VvhQzX7QcmcwMmwHwg29Zoy8BCRCBCAsnTCAsnHFwkqPABbmXVgYuP6CqlXkZkoV
+Vvhl4k1m4RQj0o6kQ+jNUHXY0+WGTp6q5qwq3MxJaLHNboKOTlbaqWOSLhuL4kwV
+VvhvHTJshvHs-NxuBixHWr6g6hb0++0B0x1zGn1b0P1ksj+NKJIKKZVFaVQ3sNqV
+VvhkKd5P1OWTrkrlTT3T1tclMkzT3T3xwBwRgBgZg3ghQ3Qi7PA6aJgoYkwsbbEV
+VvhtH+EHTLSPSnQfFlx94owLHkhP+L6iJnNRR-qLHNIpJFRJXHLIiFRRHxRJJLHV
+VvhJoooZB39LBL-L9L2P3P6SrnAbGkQM9-2O+XXY1YmGDl5SBTWkxqRuBzgVxxuV
+VvhXBRw98RYNgZp8pm5Eg-gRn90P4QWkrlL2gJgKQNgKQNwHWX5T2vDT6T0j2hiV
+Vvh99H9k07d-5565-N4zIJporoNnYj7oLop+-CLTWoh0R4B9U3Lo8M1IA+pOUHXV
+VvhY0+NKkF3p3pbp7oiGx8RFxNE+KKC8RDGfIXU6hJmKr3uMNZVyMMdVIS4FdJXV
+VvhdMJYnB88g67f0558Bn36zIRspi91r7rMrimLri7w16dw90kbkulLl5lrl3mLV
+VvhkpmbkomrkYn5kHnbk1nrdB-tHFS2obRBBqLHRKorGB7nfFQI7h4nTEdLntRwV
+Vvhu6TCSbnTP+TAP-T9xg7wdgBwZgFwVgJgVgJwRgNwNgOAJgRwJgSAFgSQ4gH+V
+VvhLWmbm7+JP+Flm-kLGDp5S6seKYaZWavHSYcKqw-NPEpJK3ND9TkgRvbKbIoNV
+VvhoR5FoR3oRfFqoB3XhNCppMIh-b9EPJR0oaIh7hJX9HQmorp46hFm9ITIMGpaV
+Vvh2hNhFV9KbKTHscpsproyrbq5q5oPp9p9PWqZqZqUk1pi0CCECH6hz0lriBHFV
+VvhXFoR3oNh1FMfLJVGlhJo9FPJMmobp46hFhFV9JPIMGpLoy8BNxDhtxRx4xCqV
+VvhshdBc9-MPkU++XEh9zohldpQDENqn4hgVgBgJgJgBgRg3gZfT7SamqZwhrxwV
+VvhppyAq2TDQy8Ay-uNntsVXDUy8Aq3TBRzT9SLmLhgZg3gRgBgJgJgBgVfP9RrV
+VvhngLIb41+QL+6st+tAY5x95WMpR7h9FoYJrnGAwPIYXoLos2hFxCRNx8RRx4BV
+VvhZx-xeATPTDTPWzTQWjTQaLrMbdTRa5rMbrr7brr6frqshxeATOTEXMTFbLTFV
+VvhbKTGfIPIQHoapL79TKR2RxVpohdsXSvFQ-mk3C9Org-tQEVlm1QnETogpco1V
+Vvhqx4Iq5R6HKT1NBJh6oLIPIApoqpW7h7xQVPFTMbETOX6qciBi9XQSdr5eBptV
+VvhyRptXSSCaRttXSSTbRSjXRSzXQT6qco5qco6q7oLq7obpW3xBxEWTJPG6rpaV
+VvhkoTMRZJxfFRxqNQ-zh3k5P+Jshf+AL64F2Mc6Wrx95SKLFSXoJF39FEpRsAaV
+VvhZrAabsMWSMMGZtMGdOX1jWXRvQTSXPjIshmEk4Jn-Yya8G6jzGquUfooCKZ0V
+VvhG2oMQxJaDLJIppHoqIBRZ1xRcnxhYnTMAsrdrAqhHJpx9MoRbEqR5NohTJoxV
+VvhfBmhq09PfPfQfPfWr8quqo3hd-PNEbq28BN1bIF37B33F3ZLBxC0iQ1+BLE4V
+VvhCCIc5o5yDx1ZDSt2rTLQxhjrqcqNpvpRsT+FfhVxjeT1dg8rcwOXle9FO1oZV
+VvhUhFYDKjORg+yREXXY1Ym9jkgSBO6sh9B9FbJbGXKXHvRTLTHsbpcorpNpDPJV
+VvhbJPH6LpKoW8BJR2XbJL0HGo5Qpoh9FPGpNW5i3Rq0558Bn6hzWjWmQ13OwP+V
+VvheAeA3whQBwhAGAdALrmXlzT6D6X4H7xwMwjrl1n6kYnTT0DDxw+x08HFxuDHV
+VvhxsDIVYpTRXpzR1q67Bbr6xjWfRyBzWM-5omki87r0ssvGoMhzWjWmJlslJj1V
+Vvhf0k7b3T4X+T5P5P-T5P6H1xwNwQwFwNwNALrl7lHlbl7l2lrkfknm5kX7gAwV
+VvhWA2mP0H7T+EbkHmbk1Fg2we9B4k2mrd2Snn5cqOnn6YqOYnTS1VdDCVnVcHDV
+VvhxqCaQx3pCaMx9rEw-ZDHQnk4ExHr6w7XDJQHkb2xPul42xSQGRXslcqLlbqjV
+VvhP6PPL6LQH8HRD8D7c57s0558BnEgzmgS8uasalgv8oapasWqOvSqKwWoKyWnV
+VvhH+SmH0SkH1WXlMVANrH6RImbBAi0DBgQuh1socoboNnv1BEMn1Bwh2T7FbloV
+VvhSAJ7X2GbkogLkIgcjoh6jIhbjIhripi5i5i6hNi7gP8pgasfWliUe6Bt0558V
+VvhBn7-zWjWif4qOkhv4cisgbiqh5j2hbiohbinhsiIiDStCuxvQvi9J9nrhHjjV
+VvhSnCzWlH+xv2w9rcwC6H2S1lMQwPrMwS2H6R1mM7Afr6wnWfCyB1WPGxBDnooV
+VvhozDHwxBBAw79Aw3f2w49+w48D0WIkcYwBtD3KHlnZAV3H9gAtwekOLc555AiV
+Vvh7Wnx8mzLCgJoT5RJm6JAZqH6Rnm6NAS5H5S2lbYwO7D4SXlLgwG9D1XGTGTGV
+VvhXGTGTGXFXGTGTGX1D+T2CrlHeAItX3GLlXZwQsX5C5m1RwV4X6FMmIJwZIT7V
+VvhMsm4FwS1T3gjq00cCU+8++7-CITxFi9PgP4ugP8fuf8Q098Q3v8Q7f8QBP9tV
+Vvhl2gdlHgjb3Glt7lXgSCQQynv0RGkofD5sgOxc5o-1JJMJYh7yoX7A-np+OxkV
+Vvh4DY-Pv+-Hv6-9n8U2DB8rjBerDC8qjCeqDClfKwvChHnhOojCrfEwvagvniuV
+VvhnDCxf8wvygXnkOljD1f2wwKg9nlukDD7eywwifnnnOijDDeswx4fPnouhDDJV
+VvhemwxSf1nqObnquTk4Zw-kz+S24iUcU6AQQdEEobuFw4kqPXGWMnLh5mLi5lbV
+Vvhibkrjbk5k5jbkbj5l5iblbi6lchcm6hLmbh6mcgjXAWkXCWTbCZy8R0JsdodV
+VvhDuoe9tQw+rYTdnk1SttrlbiS7nk1SVZnk1SGbIYi8h8XyR8IfEdTbEZso6WQV
+VvhuNXCWdn7g6n6gjX8WoX6WqX4WsT4SuT2SwT0SyT+T+SyT1SuT4SsT7SoTBWMV
+VvhofXNgA4UbkA955B6EIbxGAEk2i7E2C7xvXbQsf1Oghbn4RUmfLwnbKB8pTBNV
+Vvhp1OhDnSR75fFwtbEGOnnegwv0Qt90gov4gov8Ql98ggvCggvGQd9GgYvKgYvV
+VvhOQV9OgQvSgTni7lXiOlTCub2Cvf1wvmQ6vqg5njdk1jujzD+ayD-exww8PkwV
+VvhCfjnl7iYl8iHlOiHldi3lOhalOhNkf4lgvuoTWifL-0UA+E8eep3D2PwFGthV
+Vvhp2pIDWHLEiExYk+TnYD5Cttgqtt1ln+0QyIxhzqI2xYmHLEiPT4s5kIA++7BV
+VvhFYTxFUhdjGj5fGf7s00R8Qax0wT-ng4S9HXHc8s40ssvGnt5yYMRwz+EGgKpV
+VvhKgalGkmeKkmsOglqgAlbgAlMfAK91AGP19KOn2akmoekmng8mngOmXgP17CmV
+Vvhf7Gmf7CmgAUvCgUvGhakqOqeqP1NfOfNgBahehakqP1NfNbPTRPRLTDTDTDTV
+VvhDTDTHSHSH7CsD8CrD9CqD9GpDACpDBCoHBCnHCCnDCGmDDGlDDKkDEKXo3dBV
+Vvh-NHEO2o5Ux05DDdXnf3HmfNBtBwk22rnc4E51558I2B6yYSblbhf9+gf8pj9V
+VvhKkhverati9ZviqipjPGxGygfstOlg93d7f4P0P3WGoaNh239O7WqWrVshriLV
+VvhRvZfdpSuOvNKinjbBxXWMqqi7VPQxFLRsf1Sv9bSgBiony96hP0F0+iCCogyV
+VvhFzd4ki9Kqg6-OU4SW+3w9TnBSVUOocK3XCVsSAe7WMlse8X2asiQ4Q0A0Pb-V
+VvhX-aTb0X0ZtksktLukskuCwCACmygGAGVtfl6l9wOl6l88wCACnygCACZb1X1V
+VvhZzb0X0aNkMkNiQ0A0Q4PWtl6e8X5WMaAe5VsncK3XGcM4hTArw6-TcU-aU3gV
+Vvh9OshP00UT+YAQQdEEoTuFfLWlx0nr8rySAG9a9ethsi9+thchtXshMhcgCC9V
+VvhG9K99f49C9G9FvC9FvLWWmWnWpWmWnSrSmWnSrWlWmWsxv497vfrg6gLj5e9V
+Vvh-vpuWkOzSMdg3sWKkqW6P3RcRgVZVLmbC1TCjR8tq95Su6rur9DEsgSqg828V
+Vvh0ssvGo-6yoTCk+2wfQa7psl6ocm6nsmcn6ncmMo6lsoclMp6ktp7kNpdihOeV
+VvhbMaOq8TuqeLvqfGhmXuPr9ChmYyxepseqeTuq8btq7jtpdkMpckzXIX3TIT5V
+Vvhxx7wZh7gjqo4nJo3nzLCLFHCH1D+HCH+Pw3AlA2z2w2wkw2mww6wcw6mH098V
+Vvh90EnkWmWkXFA2gcg32swX6m3z5mARgT7lX0kKn+6++6o8oLwEwKRD1naRgdfV
+VvhP5P-P3P1P1P3P-xgRfP7OLmLVghbsbmrLsmsFwpntMnM5gWQqSIMnMDWX9VSV
+Vvh7whrxwZtP7OzP5P-P3P1P1P3P-P5OqmaRgv1otlEc0El0++0B072xoCrD1H0V
+VvhL+SyavgPOqgf2MgdG977WzvNWyevgu+vg6+m0++0B0Z2yoD1bFlAj6lqWgFAV
+Vvh4g3AGPD5aHmNTnmtIwqHDCYnne7QqFX9YNmgXXmOwMme7gijotouozbHyRCRV
+VvhGBGRGBGBJxJxJxJxNhNhNhNhRBVBVBVBVBVBVBVAYw2wcw+wgvD9Cnn1cwotV
+VvhDCC1nYUgx59DFxNhRRVBYxci9OCkV1A6++6o8oLwEwGh54mqWAVA4AFAJw6wV
+VvhSA+wa9D7aKm7WAOLb4ZyCgKbX4e4lucgaRORKhLtpcpjXKXLTLTLPLTJXEkRV
+Vvh93qMqMqLqLq6q6ptptpjfKsepTgpn97wilb8mjmQfWmO4gaXX8cqn7IwqZHAV
+VvhZomdZAa9L4X-P0b2W7mAf9lR8gKkP1E6++6o9ILxFBExpBnpqqqjTNXMyRShV
+VvhPn3xImTIwnTHB5ojBLoHNx1nRwwsTCwtTBCbnDCrmnk5mjD-T7D0T6wwBwQwV
+VvhFwPnlLlHlblDD5T1D6T0wwZw2wdw1nmrgwluDBSUOykAyBWhP+nS9E0kSXI6V
+Vvh++6o8ILvEq9D8ZmJeQ0PoQ1EkQz0ngDBlAj4mQX5mXGAvg2xcrf7BAH4AZZgV
+VvhElD0L1L3L0H5L-97P+98PLTLxxPspiCBLWYZnN3wn4mwTWmgP9UMn63wmGwwV
+Vvhy1HCRHnMMwlrD9SHmLgwVg3AFwBQ3wJrb6lwj2o7lf0QBUU++XEfFTl1msowV
+VvhDCRpmpk2m3l1lZlWlJlYkplKkZlMk4l7hgKOT3aLldZwRtT7KbpsprpzXKyRV
+VvhOBPtpdaAKLkQ8JFqiYCpeX90O86gFbcWlKOV94RQ16NQ16RA16UvmN8we0ywV
+VvheFygiFygiiINmuwcmu8QeIyAeIX8VbmNNwa6T6WKm5dwNw-gNg7gFgFg7gNgV
+Vvh-gVrX9lgz1odlP-MBkU++XEgFzd3AxpBlxbWrGrHr2zPLONB6qHHBYoXQx6sV
+Vvhwx2tDECTDECXnnr1rDDQDQwxkxnnr1r2r1rDHPxBhRhBjpqaqZqi7hbWTMXMV
+VvhsbqCKBTcbMxxgwukdXU6++6o8oLwEwKRD2nJVwZA7QQwNQEwVQ6wdQ1nn3dAV
+VvhpMHCKDHDJi7QxKxgtKTAJsmpWAdMf5KPlYj+kokA5-H0keH2kcH4kpH6kmH9V
+Vvhlwr2oQHFlAz3n252m2H2lYT1kof1kIkQ8okw8Ilg3omA3JmfJAqXLCYZo67RV
+Vvh4-LGkDp9sxKhJ-PIEZp27RB2LGF3oINR+sLCCZmok4m2kbl3lMaAT8nALFf3V
+Vvhg7ct0++0B0h3z2D3bHkwtbP8Opm3kZlakpl4lJkalak5lqdwVsX7O6mLOQZqV
+VvhX8VDb8V7ms9ums9Zf9YTf9cNmuwNmfwcmfCAanX6k2T6k3P56ONgMVdalG8bV
+VvhP26eZQ6XeZgoeqR3b0kLb3WNpjbKXKyRPWXKy7L7SLlraQNtb4OdlKiQFvX3V
+VvhP-P3P0H4P2D3P3L-T5OLmwTBkxCQcA187+U++XEbIzdApSAk38rRDMpxJXAsV
+VvhoKIrL3QtGYYuGHcvFocwBYgx+oH1o1FADFAZkx2mHEDFAYo1mzo1fEsh+tojV
+VvhkuQKkwArgxNfDKSXpcYxS6DLdXq9ExXJqRLNpxTNpRbJqhHOpRbKqBbJqRHNV
+VvhB9q1ORUrbLCLpnaBMuTKCqpXhxIwMZgwMLcwoiCHoB0XoAgx--AFo1o26x2xV
+Vvh-0DFD36x2wF1o1l2DECoJACoMwCYUvCIcuC2l6BooJMpLHQn7xLKqR9TY-HYV
+VvhDJ0V-WMAQQdEFYfwG9lU2u+EFHrJUhhNDNKk9NKkDLKlDLKmDJOmDJKnDIsqV
+Vvhgnp4gmpKgXpLgHpLg1pbg0prcxRu9MSGqaUxdr9PRWr5IhpoDSQmrr6fewh5V
+Vvh2fiwh7j9mpT-gvdwCPqABvxwBQ3wEw8A7A4Q6w2VX+D-6rk1k0G9sw+aSyCzV
+Vvh7sj1jmZvkvstWuCyCkWsCyGkWsCxGmWqCxKnWpCwOnWoCxKpWmCxOqWlCwSqV
+VvhWkCwWrWHjMi6UvmPW5CxatVHjdicAvyPi0CzawQHk8j7jH4fm9smaxWxAejMV
+VvhinGPqPcoeugPV3atErhYSPNJWnGNgpW9394bWkZagviohvSpiPCwezakg3wzV
+Vvh-ssvAGF7yYX+j8lgFNX-H-SnlLUgVqD6RHmMAwi0L7ULmAL5liD4YLlt7QWAV
+VvhyQzsnsnso5o5o4oKoZoZoZooopooopoop1pDHIsXp2pCYxME+IZR7x0QvYjCV
+VvhbETGL30kL1s5XXgl72buAw7R7x0QvYjCbETGI+375KuXp2pC6xHop1pDHHxBV
+VvhBR7R7h7R7h3h0AyB-x0AyQyB0AVGb5QSCQP4lwL6QMmJ8AgmX8B6m1NwQsP3V
+VvhGakZk5ZgH4mPkf+J2+Flm-kK9TogVrsgD-b0X1vKT-dU7g+c2EHXY0+NEUEgV
+Vvhp6sdox8hGC+WpL7PQLdVaK5tVWa3FsN4ZKCZVKHAocf+blY6++Ao9IfxGBW+V
+Vvh3R2--aPQOaqJo4pqoKpKoboqp4oqp5oLp6oDPKTCJxO9xxNwTJX5pLo5pKoLV
+Vvhp5oLoroboqoroap5o4pbeAobXGoaXHoePNTELLTFLKTGPITHPHTIPGxxJh3xV
+VvhNh-xNwTLPDTLSzTMSjTMWTTNSSZxaDVxZtTMWLMwSbJPSbFtSzR5ZgR4ZfZIV
+VvhZaoa8JXGQpOR89+LTE0kdFc9XXh9EWzv9Q4geAj2lA94Nrk4NgBA-eKZkHl4V
+VvhRA3PD4NIkpZQNXH2O5l47QJaX3j4Njb2f6NNlNm5LrlcmLQwWAdh8AdyDFT9V
+VvhT8+ElE3Q4pTRaLqsk5qMkbq5l5prlLpblqpLm4p6m5ojX7TFX8TCjweAqweAV
+VvhklX7f9AMmI3QcnT6EpmHCAN3L5BLlIRQIrT1GJknZw-POoi5T0NpkgL5kgWgV
+VvhqA0kflgAQQdEGGzx9QKQuAz1mA98Nql4NgRQ-Q3OL2L1KokJkZlJZABQ-QRLV
+VvhH2Oam3JQJcP8IplaVQhVL6Nan9m4JwmwVoPCb7QrndmLBwuQdWXCb8TW3x-wV
+Vvhj1o5mwDx+-5Zo5ozTETHTDbGXCbHTCbHTCbCAqnPnHBwmwooPAIJn1NgdVP9V
+VvhBamZBQcsP6JJmHZQRLL5CplJZQIw3QBPL1D2L+L-OolaRgJbL7kwb0ndnsk+V
+Vvhg9UQ0++0B0h-z1POwhkhkxkhkxkhnmn7Qgf1EgVbMGlqhwNQBQJQJQBQNg3QV
+VvhO9L56ZZgMXO3lmFLP47KNQMqJKlWRYP3BqBwIcQalHZWP38a7gEfMLl0j0kmV
+VvhkA90D+kg6g50kHkQ9-90kg+w90k0kw9v92QKcgJWOHlK7d94MbQwJnNmlaFaV
+VvhD4NKIgNaN0lqRI95KJ6gRPX4L+T5L-P4L2L1L4P-L56KRgUYkwcbbAwhkhkxV
+Vvhkhkxkhnmqf1q5EtlmZpKFzp4my6-rNEQ16kBYobAfMBMncpoKB-hTnOB3RN4V
+VvhXGHKBsoYpXSBAxJ5XHHIC6oop1WBExB6XIDHwtXIDGGMp1ojCcpHoDCspHo1V
+VvhiAUxnWD+X6DPsXkMm1qjD0X5HOD0X4LND1X3PND1X1XN+JqD+Kpol6kspnlMV
+VvhlKpnlMlZpYlMlopXlclopXlcm1pIlcm1pTD5X6D-D2H5X6D-DwEwWAUw+wFAV
+VvhWBQwHnmMpnkomMpYknmcpYknmcpXknmspXkzD9XJH0DAXJH0DAXIL0DAXIH0V
+VvhHAXHL0HAXGP-LAXFT+T9XDaemcnPX0lfmQ6y98Y-R92L5V+staZSGTZ5oA61V
+Vvh+0HEWE3Qtw6-DAT3kQb+mclvnOm5menslcmuo5lMn8oKl6ndoZktndookdntV
+VvhookNo7p1kNo7p2iR4RF8yR8RItbHbJCDfHbJC7p7pXOhGRMqfIb8CHKhKQctV
+VvhBOpNmXlOpcmXlDjKX8D2yhSAZACxSAZACxSAVQCxSARgCxSAGQDWjLpQCxSAV
+VvhGQCxSARgCxSAVQDWjLX7H2sfpcmXl9pcmXk18hOAcw+mjIb8D+Afp7q1Hup7V
+Vvhq1GxCRUpfHbMBPodpoOh8RR4jFbLC8oNpnah0RN8bEbKGentpYiQyRJQ0QuRV
+VvhJA8QqRFQCQihBgGQeh7wOAah0QSASwuwaAH-mQD8X0+JncY-TE+apA6-U92XV
+Vvh5kllmZ-1ITd9+T60Ek70+Y9Mj3DIlw2h87WGoLkrMwxwRo9DP9MWnansnKoKV
+VvhnKoqmqpKmKpblqpW3gJxIlT2PK6qkrpGFw3xIpT+TJ7bhxIcSMp1W6TJ8bSBV
+VvhEfVconi4TI9-RMomkcGB6w82XG91UtoGl78R+wGGXF94Uco0ls4QwwT4nmmAV
+VvhPC97lgowb4nGmgPA99lggwj4mmnAP89BlgYwr4mGngP69DlgQwyFX59EUclWV
+VvhoM8AIx40b29FYdkmodCA6x82X09HV6kGp6K9DHVcghG5SWpLW6DIWLUhJuRmV
+VvhpbhpDJT-NGpakbAhNwBlDJT3MGpalrpamKpKmqoqnKoKnMnqnW7ghgwYP7PDV
+VvhBbkroGa7XG9-lxEwKxUU70+YA0EU5x+U6EFlm-o9GTR6BJQt23ff4HubLfJyV
+VvhIt24pJQt21YNBpIko0+w-5565Eh7xnApJnYECFYrJEPFbZByhJubDfYEKVYrV
+VvhJH0EdWABJJVKGJnuFvYucwHWKcL0ObP0sZe3kadqki7OVQ7eRg9XKcL0ObP0V
+VvhsZe3kadqki7OVQ7eRg9WKcL0ObP0sZe3ehgxoEK-rOxeRg9WKcL0ObP0sZe3V
+Vvhkadqki7OVQ7eRg9WKcL0ObOjrF-M5RDPei7OVQ7eRg9WKcL0ObP0sZe3kadqV
+Vvhki7OVQ7eRg9WKcL0ObP0sZe3kadqki7OVQ7eRg9WKcL2CeCtcLEZ1JJMJYZHV
+VvhyYmlPECrfCKpFIn3h2UwdfB8D6OnGlD4OnGnH1SmKnL+WnKo6Hj7gphH3PR-V
+VvhOnKpAqgJ7fFPMphoKoOqC93ah3hnjahJhnjZhKi1j4hKi1iqhai1iphqi1iaV
+Vvhhqi1iKi4i1iJiKi1i4iKi1hqiai1hpiqi1haiqi1hKjJhnhZjZhnhKjahXh4V
+Vvhk3hXh3kJhHh4kJhHgqkph0h3l3gngqlIgmgqlogHgpmIcvBgd6CnPAFIh3neV
+VvhhKoKhK+MKrLFOpbCOoFIn3h2UwdfB8D6OnGl96KnKlD4OnGnD2OnKo92KnKpV
+VvhD0OnKpD-OoKqD+KoOqCzOoKrCyOpKrCyKqKsCwOpOsCvOqOsCvKrOsCuOrOsV
+VvhCtOsOsCtKtOsCsOtOsCrOuOsCrKvOsCqOvOsCpOxKsCpKyKrCpOyKrCoOzOqV
+VvhCoL-KqCnP-KpCnP0KpCnL2Ko8nP3GnCmP4KlCnL6Gl8nP7GXgamoUvBQp3GoV
+VvhLDarDGKkk0Ab-5565EkTxoQpNoYe9v5P4mQGBG9Yci8GbW8T8GbmYd8GcN1+V
+VvhOmU4CCIc44TrHBYhUxQhUxQxQxQxQxQxRBQxRBNBPopjHKHKxRNBNRNBPppSV
+Vvh7RJhLWLJxhLppSFhJRLhJhNRPYPKxRPqpi7RNhPWLLxRRBRRRBTppoqDHMxBV
+VvhVBVBUxVBUxYxYxYxYxYxYhcxYgVf8EMstGULNzZA5N9N9MDMDMDMDMDMDLHLV
+VvhDLHLHLxBTopopjLKHKLKHKxRPWLJPJsZpTPJxRLYPJLJvJPILIt4pDLIxhHWV
+VvhLIPIsZpDLJHJLJHJxRJBLopTHJHJHKDKHKDKDKDKDKDKDL9L9M5Ng3ce0++0V
+VvhB0QgyYn4DLtppnlokHkI7Q+w-FWXe-WHa1ZnSKVXO8RHJw7nArla6mP8kwuxV
+Vvh9rofngD8MX7gNnArkbIpScMqVdQrYsYtUMcuUJk1k37A2w3AQxTbLLD4Y-UfV
+Vvh1558I2B3yXiqDJuoKqpl0D5Lhih3pHhUk0Ag-5565EkTxkcpNoYe9v5P4mQGV
+VvhBG9Yci8GbW8T8GbmYd8GcN0U20s2QQUR0kjr0XJLCFr-YrJHg6Ej0++0B0RbV
+VvhyYnLDLxRJjpJpKpTLJPJxRJhLppKpTLJPJxRJhLppKpTLJPJLJPJxRJhLppKV
+VvhpTLJPJxRJhLppKpTLJPJxRJhJRJhLppKpTLJPJxRJhLppKpTLJPJxRJhLppKV
+VvhpJpKpTLJPJxRJhLppKpTLJPJxRJhLppKpTLJPJxRJhLppnpkc-Yu-5565EggV
+VvhxmgpJnYRkNBpIApJQt5Q4HRJA8+cCkFlm-o9EDQfBJQt5Q4HRJ1BFbC0yVlVV
+VvhcdBF9YYiC0XmXmXmXmUc8FV+3noAQQdEElju7WWXX-oFX++z0A5F4AC8692-V
+VvhE+llmZ-1Gjd6o9+Mlk2ahhtQJRdAhBNAxBAxAx2xIwwhYgohggghogYhwgQUV
+Vvh2GlH+FD1D6T6D-D4kAQw+wFaH3Cnl3cwIu91L0938HkZl0l1Ug7gIgEbD-P4V
+VvhD1BXkJm1kXIw3ga7B1k4mcYoD+P9SHAw-whuAXk4n5cmsXhwluAHk4nLhiarV
+VvhnLhg-gpvDW2vTASn2w-glvAHk5mrgXD+P9SmAw-ge8AnkKmMcoD-L6aXEw3gV
+VvhOe7WkalG3tBXkZl0Bd80kpkWFrC1l3cqNmcwFaG4EvD4kA0g2wVwFgEk7G+aV
+Vvh60MU7W+a6-BQ6xuAAxiANBOAhB4QxQehFg5+qgo-90nES+pP-5565ExbxIn6V
+VvhvIUgA5UBLEFlm-oDNztAkyp6961+6q+2QQUR1-zsFt4WYd8T8GbmbW8S6dt0V
+VvhcWIm3mgRjlge8IRZAA+U2UU++XEH2zJ53B3h-wWtiPX6mAX6lx3h3h3h3h3RV
+VvhBBAVk-wH0++0B-AHuoTFHFP5i8aNe8Wce8WrhgP4lh-R-BAhAA+W3+U++XEPV
+Vvh1TF-2hUWHIEKoa7fNKZbRLZnTB1GjIbLLODQ5E168FI6++6o5lHqFyAhtRkzV
+Vvh2hkWwxcnwxUpDKBYp2RB77KphbPEpB9GpB1MT4U73UU++XEZ+zYvqA+W3kk+V
+Vvh+YoI2yF6Rge2N3CXDnkm9F6SEx2l9F6jD1AuBIN6f4T+4lU555Ai4-DnzdsrV
+Vvhp8p7pMp5pSJxBx8B0XpKo91+4G+2QQUR4+jx7xUhRRCB0QbEXEb7o6oppmq+V
+Vvhk0dS0++0B-gEx2TE5QDOLMTKbIIJoZBR-JKpROGIZ9Foo2JB71HIEIpY2hUVV
+Vvho-BT-5565Ek9y2J2RZUzcQwOC3NoEB+bTEU++XER2zB5NQJqhi7LdzFuRKhZV
+VvhxfNZlKOqNQJjL3RBFzHIYU2GYA+WTUU++XEV0jR2ZREMXGBfkqo8BZ86BXW0V
+VvhJXfEMwhXocURFN1+55w6++6o5EfpFHHGFKo4C9UNjKyROt49Uqo4JB71Y8n+V
+Vvh1++0HINWzK4fHLPKTJXIbIbIXJXJXJXJXJTLPLPLPLPLLNHN6+4fsYpy7hLsV
+Vvhoy8UoS8WnuHCwmbBEe1Awob9F818wqb7Fe16wsb5CO14wu0QIu4UlDCWb1sXV
+Vvhd7kS6uOPzWCcaxwuePh8eUijCgatGgc9Xverj9Png7hIg80owv8PB98UgjCoV
+VvhalGoc91nhdfnhu0iwvWOroiNepiNebi80bc9SVd8GmdMsemegd0gkEk++Yp4V
+VvhMjpVkYpqpLp6otodosososososp5p4pKpKpKpZpYqG+-gC7BTWPJyBDWcB5WV
+VvhcgyYnjAdnI8UnDB7moGUmjBdmIOUmDC7lnaUljCUb3CVcAHncdky6uGQ5WCaV
+VvhazsXe7jTCeavGec9fnf7iIf80syuhvmqwv0PJ90UhDCmanGmc99nh7gIh80kV
+VvhwvOOwvSUfjCsahx9aOhPaOdvWUdu0rcOGYgeKC8gef8Ugw6A++7BFa1xLwQEV
+Vvh4H+LI-Jk2t+FIJrpBRpJLPJpqYZBZ9-BR97BJ9FBB9NB39VB2fcU+TTWE-PWV
+VvhM-Hs+Gse+Esf5Sgxrn8Rl0fPwobOF8qTBdq2OhTnWRMtfJwubICkfHwv4R9WV
+VvhCnbEsXhNni6vSQnniNmYiOmTCvb6Gvf5z7lgj3wvyQF9ygDnkNkYkOkTD1b+V
+VvhH1ezwwKPswOfrnltjDH6auL6atT5eqf4g9CnkPGC8viQ280ekkk++Yp4KzpOV
+Vvhk3hVoch1o90lDEgeDEIcUx+sUZo1emo1gP1ECoXG4qI+70sY+Ksa+Iy+2i8UV
+Vvh2C8lrfDRwmbQEeqzB7qYGhbnORV4fLwsbKCOpTCdp1g8ozClbGsXgtoC6vKQV
+VvhvWCrbAwvaQd9agbnitm2iulzmQP9lTCzb2Gzf1ww4Q7A4g5nktk2kujzD3ayV
+VvhD4exwwSPnom7iZm7iLluhelf0ngw4oXWivb-c8L21++0HINRzJmwGoHHOmPFV
+VvhWkXDakbCydfCakbDWkXFOmPHGoE+98sY+Ksa+Iy+2i8U2C8lrfDRwmbQEeqzV
+VvhB7qYGhbnORV4fLwsbKCOpTCdp1g8ozClbGsXgtoC6vKQvWCrbAwvaQd9agbnV
+Vvhitm2iulzmQP9lTCzb2Gzf1ww4Q7A4g5nktk2kujzD3ayD4exwwSPnom7iZm7V
+VvhiLluhelf0ngw4oXWivb-c8n31++0HINXzK93M-Chx4HQCXqjClDN8n9Mt1gnV
+Vvhq0gmqTClDOCXr2NByU2q+0+C7+3i7U3DU-9Wc-1WgRunrTAdr28hjnGRd2fNV
+VvhwqbMFepzC7pXahLneREv0hDngNoi6vCR1WCpbCsXhtnDCtb8Gtf7wviQV9igV
+VvhTwb4mwLnjtl2jukzD-b0H-f-wwCQ-ACfznlNjXlejTD5awxAWPdQWPZwSfOgV
+VvhOkgvD-h6sfitkP1qlUtlmZpKFzp4my6-rNEQ16kBYobAfMBMncpoKB-hTnOBV
+Vvh3RN4XGHKBsoYpXSBAxJ5XHHIC6oop1WBExB6XIDHwtXIDGGMp1ojCcpHoDCsV
+VvhpHo1iAUxnWD+X6DPsXkMm1qjD0X5HOD0X4LND1X3PND1X1XN+JqD+Kpol6ksV
+VvhpnlMlKpnlMlZpYlMlopXlclopXlcm1pIlcm1pTD5X6D-D2H5X6D-DwEwWAUwV
+Vvh+wFAWBQwHnmMpnkomMpYknmcpYknmcpXknmspXkzD9XJH0DAXJH0DAXIL0DAV
+VvhXIH0HAXHL0HAXGP-LAXFT+T9XDaemcnPX0lfmQ6y98Y-R80slkiCCogyLDd5V
+VvhkuiGjvSoCwj96vekZuGsapK3hdiINfK9p2OnX+Ebgckf4lX2g90AOeX6aMmcV
+VvhWQe5bARsnLOQtZbDNNo3Gh-IbFLnfGHmfHEep1wP1IAOpH4hXf4kqTfNykp1V
+VvhsWfIAuonCh6pbGBOoHOR2qbEC7nnaAsubBCkb9CmX9CnX7CpX5CrX3CtX1CvV
+VvhX-CyWyD+auH1aqL4g7T8jQurpP1Msrr8r7rMr5rSJxhxeBWguroP9-0UdwU8V
+Vvhst-4Dq9xMPRBxhtxqBmRmRmBqBqBqBqBpxxhxhxhxhxE2I+F6+5dshuogPmmV
+VvhhOkOhNkshNl5hNlKhNlZhTb5Gpb6CpyQV9HYb7CoyQcvDti1h1gyGPUwLthoV
+VvhlNhZlNhKlNgslS92lNgslNhKlNhZlTarH3sti1lS8PUvQyGkbAClyQh95tmnV
+Vvhgjb8GmyQZP9tm3gtlqgtlMgtl7gekf0lgPqoDW+EE80amEfXY2MzMjpVnYrqV
+VvhrLr6qtqdqsqsqsqsqsr5r4rKrKrKrZrY+F6+5ishuogPmmhOkOhNkshNl5hNV
+VvhlKhNlZhTb5Gpb6CpyQV9HYb7CoyQcvDti1h1gyGPUwLtholNhZlNhKlNgslSV
+Vvh92lNgslNhKlNhZlTarH3sti1lS8PUvQyGkbAClyQh95tmngjb8GmyQZP9tm3V
+VvhgtlqgtlMgtl7gekf0lgPqoDW+EGUgAc8st-4Dq1xLwEE2X+ELSTQbOIJq3BRV
+VvhNJLIJpooZB79-B-97At9FAl9NAd9VAcfcU+VzWrfGlj98pf-epb1Wpb2Spb3V
+VvhOpb4KpyQR9KQUvLtm2hCGQYvHtmXgzasCoCnt7i1lTarH3aqL3apP3anX3sgV
+VvhH3anX3apP3aqL3yPRALXasD3sdi1hnt90Qkv5tmogTb9CmyQd99tmJgjb6KnV
+Vvhb5Onb3Wnb2amf0g94ljPEy6--90WmkfXY2MzLTpQm2koqqkKqMiBSPbKydfKV
+VvhatpsiBZg3hhAB++inW+Rkw19kQGh0gGR8AGRBwGRFgGRJQHtpYl7pnlDbLH1V
+Vvht7q1kzbND0yQQwAw9Yb5DIyQNBGQJRGQFhGQ8BHWoxGQ8BGQFhGQJRHtlYpCV
+VvhCQQxHWb5D4DYiRgw1tqYkDbOD-yRZA5tq3kTbLL0bKP0bIX0bHb-fFj+kAn1V
+VvhDW+TEA+nn+L55GITMjpV3BphlxiBeReReBiBiBiBiBhxphphphphpRxBwUy+V
+VvhI7oBOxXU9tq9ph0EIA+onEL55GITMjpVqorKqrqcqNq7qMqMqMqMqMqbqaqqV
+Vvhqqqqr3r2rm1x-EbEpfqC+jbMjKo7-E0kCgs3lloZ5q1xLw6R2wxQpwiQZFL5V
+VvhIplJJQBLL0GIkIh9H-GIkoRAJ3H5FGmG1z--b-lvmS+Ub7j5kN--k0rD-QQRV
+Vvh7FxRzJkooYRh-ZWsCPYjeO8PYsi3PENooY+-P+I7oBOxXU9tq9ph0EI+i7nEV
+Vvh11XaHoJ5zIPTnU2wc-LFkASx0gigyQqQuQyQmR0QiR4QeRCAaRCQWRGQSRKAV
+VvhSROAOROQKRSAKRSQHtq7ktq8kjbNb0yRag4ReQ5YbOf+t7qf5Olk3gSlqQWyV
+VvhCtqft9bOf+sdqOkTbNb0yRWQDtptl7pslNpdlNpNldpMltp6m7osmNocmdoMV
+Vvhmtntn7nOn8munQ15j4+Jm+2wfTnUgGvF1++0HINPzJfDL32-4AAxyw+xz-cxV
+VvhxGW1rnW0LTCg5TD+jTD1U-2QJE+fn6nE2jnAqg1FkQL+odlw1HT6ANopmH4hV
+VvhAwcmbHD8AtoXmXCh2wcobFD8B8o1mXKR+wcqbDD8BenXmXSQswcsbBD8C8n1V
+VvhmXaQkwcub9D8CemXmXiQcwcw0QYwcw0gUwcw4QUwcw8QQwcw8gMwcwCQMwcwV
+VvhGQIwcwGgEwcwKQEwcwOQAwcwOg6wcwSQ6wcwSg2wcwWQ2wcwaQ+wcwafD8D8V
+VvhanmXmtcwcwidD8DAaHmXnNUwcwqbD8DCZnmXntMwcwyZD8DEZHmXoNEwcx4XV
+VvhD8DGYnmXot6wcxCVD8DIYHmjDJkAfnpfmXpumjDMb8DNX8DOT7LNT6TNP5bNV
+VvhL3kRRPnR79zBonikih6AQQdEEqDuMQV+6a+VQ00+5t+TY-y+66+UU00+66+UV
+VvhQ07U6a+WM07U6Z+YE0EU+TCk4AQ-47XQT1TMT5TJT7TGX9XDTDTBTFT9XFX7V
+VvhXHX5XJX3yBSACBaA4RaQ0Bi9bPaTbRZzfRddrtLWfTcvrv9Wc-4Vv+g-4lc-V
+Vvh4WsvrvDuruGxqpyhqbyhidbPaeqOiRaQ5tptktpNlNotlsosmMoMmsnsnMnMV
+VvhnsmsobmLpMlMq6kMr7SE2QQ-Wx0UiRAAQQdEEqDuMR-+2q+FQ-0ByRuRyByBV
+VvhyByBy+25+EM-3U2K+FM-7E2Y+J6+5dgBasocaApvFwZvVwNvdwC9mA-w-vtwV
+Vvh7vmA89eAG9WAO9Psm6h6mcgdmdgMn6g7n7btndTuneOR0Jseo8Cko9+i8h8VV
+VvhulgB8k4h8Wsv1Eg1yh0YgAukLuneTun8aQmOf8ekb8amyQWPGQOPOQGPWAG9V
+VvheA89mA09u9uA09mABvdwO9OAa98AqLbGiBakkO0zp+llmZ-1MTdTlV+KA-FEV
+Vvh2b+EbSIJr3BRdJLMJppoZBN9-BF97B79FB-9NAt9VAsfcU+VukqPXGWMnLh5V
+VvhmLi5lbibksj6k5k5jbkbj6kcicl6i6lchjX6WoX8Wmb8alXAWkbAaTbCZzfCV
+Vvhddo7LWfEcv1Eg0seoe5f4kof+Ooe9XgB0kDuo8Gknf-TfCdzfAeNn7egef0QV
+VvheP9tm7h7ldhdl7i6l6ickcj6k6jcjck6j6kriblchcmMgcnNSR8sqP1-g9HJV
+Vvh1558I2BQyZfCL35SX1DQj+DQkODQIcUxksUZr1f-r1k9r1ksrVlJ+0RP+MlkV
+Vvh2MaBlwBxVwRxJwZx8AiAxwxwpx3wiB4AaBCASBKALspsksqMkNqNk6qsiRiNV
+VvhyRqLyhqabTZS8hyXjTgi8U2O5g0k2P4U2O9XjTgzfTd9rPLurOTuquaRiOfNV
+VvhetqNkTbLb1bJb3bHb5XHX7XFX9XDXBXBXDX9XGT7TJX3XMX-XQZt+Flk49o+V
+Vvhg8vK1558I2BSyZn8H1HTP-PRWsqtiRfuahePbPWsrKkKroko+0xv+Mlk2MaBV
+VvhlwBxVwRxJwZx8AiAxwxwpx3wiB4AaBCASBKALspsksqMkNqNk6qsiRiNyRqLV
+VvhyhqabTZS8hyXjTgi8U2O5g0k2P4U2O9XjTgzfTd9rPLurOTuquaRiOfNetqNV
+VvhkTbLb1bJb3bHb5XHX7XFX9XDXBXBXDX9XGT7TJX3XMX-XQZt+Flk49o+gGDMV
+Vvh1558I2BFyYg-wU71+Y60EhWwIxH5kGoca79FT1RXnrlrEgxghW9CPDXBPFPBV
+VvhPHP9PJP7PKT5PK6KlLpH3wFhMXP1TJ75kLpHJw-xIaSrpGVtXIC6VxIeRsp0V
+Vvhi4XHCsNxEg3pXH90V6oXkcGB6gC1bF92Ydo1l78B2gO0XE95UNnnlwPD96lgV
+Vvhsgb4nHmQPB98lgkgj4mnmwP99Algcgr4mHnQP79ClgUgz4lnnt4AQh00X49FV
+VvhUclHoM8QEh4Gb19GYskXocGA6hC2X-9IVMgxC4Wmp6Ru9JS6UxG7S0pLdr9KV
+VvhSrIxJw3Z9KP0Qmpbkr2xJwJV9KP5TKP7PJP9PHPBPFPBXDPC6amqnmFgZgwqV
+VvhT1TF8MaB6g55p1lPq0+Y60Ek70+TY55N1++0HINXzK4fHLPKTJXIbIbIXJXJV
+VvhXJXJXJTLPLPLPLPLLNHN6+6KsfKYftcvCXde4qadasSeatKfv0auChWu8iWtV
+VvhCiasCjWsCjy9Qv5shHgrh1hLgnhbgHi4g1iafXj4f1jbe2k6d3ksZwOemePDV
+Vvhc9CEQRcA++7BFaDxMQ7BRhJxGBCR8RCBCBCBCBCBFxFhJhJhJhNRNBYU+VjWV
+VvhhOGjaXguCacPOOaPVuePZOjg8Pcuq9ceu9YuuPUuy9UuzshngTWpCnSoCpSnV
+VvhCqSlCsOkCuOiCwOgCyScH+WYL1WLlef8dgyUgt-vqkk++Yp4MTpTi-qXq3pbV
+Vvhp7oZ3R-HLCJJn3RQh7H8GVH6GXH4GZH2GbH0GdH08f6+7HsfKYftcvCXde4qV
+VvhadasSeatKfv0auChWu8iWtCiasCjWsCjy9Qv5shHgrh1hLgnhbgHi4g1iafXV
+Vvhj4f1jbe2k6d3ksZwOemePDc9A8-jr+k++Yp4LjpQj2h2oqgaoMg6ntg7njeOV
+Vvhndg7nsg6oKgaooh2+1BS92gvuP90gfKklNi7lriNm3iioNmHj6mGjMm1jNlnV
+VvhjclnjjX4D+yAEw7wAwFw6wJw+wRfwwZfowhfgwpvRAy9BR87TJiRapreke0lV
+VvhrEk++Yp8MjxVoo+OM-Vk3s+KY-KE3c+KU-O+3c+KU-Rk3q+MM-VU44+NI-Z+V
+Vvh50+0HC9-jPi9H3gvGkmNi8mbiOmZj8mIjP16Gyf6D+f4H+f3H0f2D1gA7AGgV
+Vvh6wOg-AOg+wWfswakj2mej1n8iYn8iXnei2nf0qHEeqDGeoHGeoDIemHIg9-BV
+VvhOf+xWdHMeHqeRBekMxmZDScoreAk283+2TgU2v+-GU3ij7+Jc-GmqS91ivVlV
+VvhrUc++Y2rFzp4sh9Kk+28+Gu6+HoQvImxP7X3f6X5f4X6f3X7f2X8f1X8j0X9V
+Vvhf0yAmg4Amw1snOkCSAqziAqg0Amw0Amg4Aiw4Aig8Aew8AegCAagGAWgKAOwV
+VvhOAKwSA5-mRH9ogrAoyk6+Gc-1+pi9GnEcIDT2QQUQqJ7yYSoao92ao8oh9+wV
+Vvh4og1gfWHjvWHgKZqGyOLN8OnJ3j4gpFNKrEpiphoBMKuAKiZiX3bKwatKwZoV
+VvhjciIjcNPu9VPu3L+SrL+RJkKhpkKFQ7fNQ7YxQBPNQBHP1KpP1Iy7gF9JgF1V
+VvhP3CpP3AzT2CpT2AzX1CpX1B6pcmNpNm8p8m91HgAOno9D2hgqqkPb8iPqxlfV
+VvhqujwGziA11k9T-kg4rkAD+hw11k9Wzl9yujQOxjPf7ig4qnPP2gh4mlv1HgAV
+VvhShGgaRKQbspcmjXKUGlrgmluz5SmD5fWm4gXm8z5OmH5fwRPBARFL4KnL4IJV
+VvhlJh3lJ7gFPFgFGT1GpT1ErkZhLkZCA-POA-IeyGreyFK39l9VVGwFZBPZ9ZHV
+VvhKtFpFfJPdIOpK2S7SvFsZtCfewCfeXgPOyClhf2fOg2fOfGUdtUA++7BGZrzV
+VvhL9t9FBRf7hK90BCP0R9uah8P0RC90BJf7hR9F++qTWkPqvWolPCogAaPWgdvV
+VvhagdPmgZ9qkm2jem1k8lYk8lIkel1kv10H2f0D4f+H4f+D6eyD7g9lAefkwmfV
+VvhdAmfcwufVAukhYo8hXoeh2oeh1p8gYp90kHKekDMeIq8YxebHOg4DQdHreBBV
+VvhuXA-0VE-5v6-Ck+Ic-PfmE3O+IghbWkvg90Ms+U++XEiGTl5VBphlxiBeReRV
+VvheBiBiBiBiBhxphphphphpRxBwU+IaRP1oKRgtA-ggwBgYwJgRQJgNwBwGAFgV
+VvhHtkrktl5kzT3T3D5TPsrpQ5DlwmoT7aLlsk5lMkbl5l5krlLkblbkLlrk6lrV
+Vvhk5m5jsm5Sy97RvsgW5AMlW3bAMlG7bAcl0BZB5kmFZBMgqMnW5Fvj1iACg7ZV
+Vvhg7bV0++0B0t7z2THHRPPTOXNbMbNXNXNXNXNXOTOPPPPPPPQLQHT6+3CbKkxV
+Vvh3bPCH+P9D1P7D3P5L3P4T1T2X2P2yQBwCQFwDrlLlHlrqyBxL-nwTAh5mNZwV
+VvhSA-wKA7wFwFwBwJw7wNw3wRw0ARw-wVvyAVrjWmLSy96Vn4AMVNn4AIWNn8AV
+VvhEXNHFwAYNHK9BaAsVoSvkvX1f0NEg89W0++0B0t5z2L72-+xtRlxeRVFLKIpV
+Vvhp3JR7LLFGIo2hAtA3AlABAdAJAVARAUgYU+KuRP1oKRgtA-ggwBgYwJgRQJgV
+VvhNwBwGAFgHtkrktl5kzT3T3D5TPsrpQ5DlwmoT7aLlsk5lMkbl5l5krlLkblbV
+VvhkLlrk6lrk5m5jsm5Sy97RvsgW5AMlW3bAMlG7bAcl0BZB5kmFZBMgqMnW5FvV
+Vvhj1iACg7Zk7fX0++0B0t0z21FLI5MXGDKj1ph0XpZ86DKC67RMuoBMwjKDGXMV
+Vvh5II+4kY-LG+ENqrIlhcx7hUxFhNRFhJx7xCBBhDtobodorojTITIDKQ-fXQ-V
+VvhHErhPPh5q7ZxOATIXFTHTHTGTITFTJTETKT6pblxRvyBRrjWq5Sy9LVn4BIVV
+VvhNn4BEWNn8BAXNHFx6YNHK9BaAsVoSvofXGfFNQ0Jt+U++XEiEzl-dB7BZh-hV
+VvhS9XJatpDeOp7iRK9XLPEPNHGE+5OY-LG+ENqrIlhcx7hUxFhNRFhJx7xCBBhV
+VvhDtobodorojTITIDKQ-fXQ-HErhPPh5q7ZxOATIXFTHTHTGTITFTJTETKT6pbV
+VvhlxRvyBRrjWq5Sy9LVn4BIVNn4BEWNn8BAXNHFx6YNHK9BaAsVoSvofXGfFNEV
+Vvhg7rZ0++0B0t8z2X4POfKFYoncx5nk1o0kWnyEw6wwg6h1nk1oHcxB4HKfOM+V
+Vvh3sbKkx3bPCH+P9D1P7D3P5L3P4T1T2X2P2yQBwCQFwDrlLlHlrqyBxL-nwTAV
+Vvhh5mNZwSA-wKA7wFwFwBwJw7wNw3wRw0ARw-wVvyAVrjWmLSy96Vn4AMVNn4AV
+VvhIWNn8AEXNHFwAYNHK9BaAsVoSvkvX1f0NP0ZtUiCCoh09zghkOmcmwH2kgNbV
+VvhT+Nakok4dOL-D2NokJgwNZH1KJlaBAFcT2MZlKOAKwNayQGgVZb3b6RTT4X7V
+VvhRnm6maocmbsx3whwc-13+JkPJxqNTPX+TNX0TMT2TLT3TKT5PJT6PIX6TGyAV
+VvhZx4AdwuzmcnPmcn14AagglX7EJmXBwV1L7AslYJQQpT3FplHRwB7L1CLk3hfV
+VvhGsRw7bL0lQT0m8nMk9-ltkQQQmsbEjohldnwH7O4lKkIkplHkJlndgRMT3S4V
+VvhlcNwKJT4Z6ldFwVoX6R6mXOB8R9soiaRDsotososnXBwsnXBB5n1KAgqT8C5V
+VvhmHZgUvP4D-P2D2P+H4RpmwDDbHsrp8p7pMp5pSJxBx8B0gP4mQ52g5bc-llnV
+Vvh9WR7zIRYpapLp6ototosp6p6p6p6p5papapapapZq2q0+-3coA99NalqdgFQV
+Vvh3g7QBg-gFeP3OKlqTrlrLrmLDsmL8AeD4Aj2z9-0tRDWXHbHXHXCArnXCAooV
+VvhTABan1NwcsP7Cam1hgMw7QBAFg+wVbL9kh0A29-tuEQQQmsbGTp5oIpap5osV
+VvhodoNocococococoroqp4p4p4pJpIq0+-4soA99NalqdgFQ3g7QBg-gFeP3OKV
+VvhlqTrlrLrmLDsmL8AeD4Aj2z9-0tRDWXHbHXHXCArnXCAooTABan1NwcsP7CaV
+Vvhm1hgMw7QBAFg+wVbL9kh0A4kUic555Ai7oTxFQQRYxRRJxCR3FLDIpnJJQhLV
+VvhL8GImIhARA3AJABABAJA3ARA2gYU+HGB10mqNgReP2L-P0L1P+P2OalKZgRbV
+VvhxwRpxwZnyAZmX8XlX9lDmkEiLHscotososnXBwsnXBB5n1NgkqT8C4mHdgUvV
+VvhP4D0L1H2P+D6Npmw9EX-g5Df-lln9WR1zI42kokqkKkMi9atfuaeati9X-P-V
+VvhP1H1E+41XEkghaP5Oal3kKkZkqk4l4dgJdP5NzT5RTT7QzX7QcmcwMmwHwg2V
+Vvh9Zoy8BCRCBCAsnTCAsnHFwkqPABbmXVgYuP6CqlXkZkol4k1m4RQj0o6kP+nV
+Vvhv+Flm-oNG+-53AVgRwOAKQKQKAOAOAOAOANwVgVgVgVgVQdAcUjbfWkwGQKAV
+VvhPhNwGdsgc9+ovEFlm-oOGDp5mImKlrlclNl7lMlMlMlMlMlblalqlqlqm3m2V
+Vvhmm1ASy91lNlclypblOfWmY1+CSs2QQUR4oPzFR+RkxdRVxORFFLGIpo3JPJpV
+Vvhd7GIh5HEFIoYBBF-HKEGq01lTC9GpNpcpy+JTJey9NCk9Sw2QQUR5I6+EHH1V
+VvhFKkKC9UNj5yQSt49UqkKJAB++H3w9WkwWQaAfhNwWg5WmY0kbj+6++6o9IjxV
+VvhGQohwwdg2wirH8kZD8lVH8z8mWP2mGf-lmkflWl9l0lA1092AdkGl1CQ+QEqV
+VvhXEBrnnZwweTPTPPPTPPQPPTPxhlgeMP5kqP2NqFg7fMak4kq3eP3k7P5i4mPV
+VvhNwaqP9dLmuFwqITBfmXBcbntsVXDlibDbW4Ay1scnMJwprxwhtT7SqmKkKlqV
+VvhkqlKlKkqm4hghrTClRGQMA-RwEXXY1YmETl+p3p-r6oXqfkxfEcxdGW1qXW0V
+VvhLOCh1OD9qXocr-p3+0+5iBHFXFoR3oNh1FMfLJVGlhJo9FPJMmobp46hFhFVV
+Vvh9JPIMGpLoy8BNxDhtxRx4xCqshdBc9-pwUU++XEhGTp5ZBlhhxeBaRaRaBeBV
+VvheBeBeBdxlhlhlhlhlRtBsU+IGRL1o4RglfP6P1P3P3P1P5P-P7OrmLdghdT9V
+VvhRzTBRTXBV5nrDWXDUSaQyS6MnsDWXBVLnLTrmrZwZvP7P-P5P1P3P3P1P6OqV
+VvhmrRwv3p7lf-qwkU++XEhGTp5p2r4qbqMq7ptq6q6q6q6q6qLqKqaqaqaqpqoV
+VvhrW+-GNpQDENqn4hgVgBgJgJgBgRg3gZfT7SamqZwhrxwppyAq2TDQy8Ay-uNV
+VvhntsVXDUy8Aq3TBRzT9SLmLhgZg3gRgBgJgJgBgVfP9RrngLIb40kTzE6++6oV
+Vvh9ITxFQcRwxpRhxaRRFLJIpopJR3LLEGInohApA3AhABAZAJARARAQgYU+KWRV
+VvhL1o4RglfP6P1P3P3P1P5P-P7OrmLdghdT9RzTBRTXBV5nrDWXDUSaQyS6MnsV
+VvhDWXBVLnLTrmrZwZvP7P-P5P1P3P3P1P6OqmrRwv3p7lUk5Xp0++0B0p0zI1GV
+VvhLI5LXGDJj1pR0XpJ86DJC67RIuoBIwjJDGXL5II+4dY-HGrqRhhfPLPGPIPIV
+VvhPGPKPEPMOrq5dhddTORzTQRTXQV5rbDWXSUSaRuS6MrcDWXQVLr5TrqbZxVvV
+VvhPMPEPKPGPIPIPGPLOqqbRxrI+HbJg59q0++0B0p1zI4okomKkKlsiAKPb2ydV
+Vvhf2atlMiARg3gZAB++QCRL1o4RglfP6P1P3P3P1P5P-P7OrmLdghdT9RzTBRTV
+VvhXBV5nrDWXDUSaQyS6MnsDWXBVLnLTrmrZwZvP7P-P5P1P3P3P1P6OqmrRwv3V
+Vvhp7lUg9Xs0++0B0h-z1POwhkhkxkhkxkhnmn7Qgf1EgVbMGlqhwNQBQJQJQBQV
+VvhNg3QO9L56ZZgMXO3lmFLP47KNQMqJKlWRYP3BqBwIcQalHZWP38a7gEfMLl0V
+Vvhj0kmkA90D+kg6g50kHkQ9-90kg+w90k0kw9v92QKcgJWOHlK7d94MbQwJnNmV
+VvhlaFaD4NKIgNaN0lqRI95KJ6gRPX4L+T5L-P4L2L1L4P-L56KRgUYkwcbbAwhV
+Vvhkhkxkhkxkhnmqe-SyEXXY1YmGTl5g2oaoLo6ntntnso6o6o6o6o5oaoaoaoaV
+VvhoZp2p0+-Uci6XWh94ogthth6i6hSjriLhS7vW9JvSPPqhthqhG3vRfEWWrKnV
+Vvh6thpgGGogbQph9GnOohtW50ULjc6st+tAYbwFwRB7h-wyAuQqQuAuAuAuAuAV
+Vvhxwxh-h-h-h3R3BEU+MS9W6sfGlh9CPSPG9W9LfxvZvLWSsWpSraqxfSPRfIVV
+VvhSrOo6chpgmCPRP2Yh97rBPGogqh9SMVkc4Tv0CCECH75z2Kx5JDHLFTDbBIJV
+VvhmpBQZJL5JplYZAJ9-AB97A39F9x9N9p9V9ofcU+Oi9W6sfGlh9CPSPG9W9LfV
+VvhxvZvLWSsWpSraqxfSPRfIVSrOo6chpgmCPRP2Yh97rBPGogqh9SMVw-Nz+XXV
+VvhY1YmEzl-o2oYrKo4qsiBaPbMydfMatqMiBhh-hpB7++WuBO6sh9B9FbJbGXKV
+VvhXHvRTLTHsbpcorpNpDPJbJPH6LpKoW8BJR2XbJL0HGo5Qpoh9FPGpNW5c89xV
+Vvh0558Bn7RzYT5HGPETDXCbBbCXCXCXCXCXDTDPEPEPEPFLFHI6+4msfelhag9V
+VvhSle9i97vhfFvl9Nvh9NvgvS9Z9XriHijSrCvWpGwxvIvvrgnjsgIkDSlD0xuV
+VvhD1W2l5UwK5D4xqD5V2m5Ewa0H8xmDAsenjXEsaojHHwxBBDnozDHHHD0GnD-V
+VvhOlD-WkD-WXkcZA87D1SHlJYwQtH6FImv1CT8g5zy0CCECHBRzYS6qC91rdrsV
+Vvh+Ev6Q--tXDRgD9R3RwZnD-L6QXkqlb2gNgKQVgGQZgCAdw9rn5kTTBT+xwq9V
+VvhsbncfdTCbtTCWbnNfrnMhwpw-wmA-wlw3wlg8AdgCQVwCQVgGgNQNlD1P5QYV
+Vvhk4m5F5T8RQDAS6oCk5ry8Rn-pC9Bng0TzkU++nEhGjp6q6+JoE24NhlePNLEV
+VvhPLPFPJPGTHPIPHPITFTIXExhNwtLpcjrpblxKATJTETJPFTITFTHTGTHPHTGV
+VvhPITEPKScnGSB9GOBDGdhZx-RRx3RNx7hFxBhBxFh9rpKoLpao5pblxRgxxRvV
+VvhxxVuxxW7xxZtuLqMy5qLZxW7RXluRJhuR5ZvxoSKloOKiJGKPGMdKB7nJdocV
+Vvhg-Rx+90Vi+VlmXQmJzt-kIkonakKn6iAePb7ydf7atmciAlg3gtAB++YfWmQV
+Vvh13OwP+eAeA3wdgBwhAJwdAJwcwOAVATrm1mTT4D8X2H9xwEwrrkXnck2nzT+V
+VvhDFxuDGW2orUxG5DJxqDKV2prExW0HNxmDPserTXTsa+Fx+2jA-7+2jA-9n+GV
+VvhE-6x3A6x-g+x09DEWXoMZB47DGSHp3YxMtHLFIqfrLqEk2jL-lln9VQixWzMV
+Vvh5MDKDKDKHJHJHJHJLILILJHJLILILILIPHPHPHTGTGTGxxFxFxFxFhJhJhJRV
+VvhNRNRPppZpZpZpYpopopnq1q1q1q0k2vr-lln9VcixWwFqnqoqYqYqYqYqYqJV
+VvhqJqJqJqJqJqJq4q4q4q4q4q4q4q4prpLpKpapapapappppppppppppppppq2V
+Vvhq2q2q2q2q2q2qWqUk3290JJMD1t7zYXQfEXSotnOS3JZHLTEApRRJh8bTHLHV
+VvhdtoJouWR-h8sb4ouaPTHebhxGfL5pMo1o4prryobprpi60fHs-NxRxxxSBmxV
+VvhCxLWqYr7g2cA0CCECHB7zYXBbOlBJsHGT+HDP2DBL4DAL3P8P2T7P2b5T2b4V
+VvhxwKQNgRwNwVQRwYwXg-k25lsXWrwJwOQJwSALhNwVwCwGrsghAikE+o6st+tV
+VvhAobyGAqhb36wxtXBP-TAP-X9L0b8L1b7P1b6P2b5P3b4T4X4T5T4P6T3v1T6V
+VvhSC9TlSq5m5kvl9TWmomkg4sC1JJMJZ-7zYXBf4fPkw52pMRMVpobkHJw2x-gV
+VvhEnP2DCP4AKlXn4lPlKmalPlLmKlPlNlrlPlNljT4f4b4P5b6T4T6X7L5T7T8V
+VvhD6v+T7Q-3wZwW6sU9AJwZwSQJwZwWALhNwZwZwCwKwKrsghQhQj+LEwBJJVKV
+VvhI2byGBmhKk4RDBEXrcVLW7r5o2Fx-xhhB0PFXOPHnFbNPHnGbMPHnHbLPIjIV
+VvhbKTIjIbJTJfKXJTKbLTJPMTMTIvGTMTMSC61jIs-RxVxVx8xGxGrshdRdRf+V
+VvhDW66++6o6-zxFnLGJbo5GPYeeWytgTmA4tgb2eQGBG8p6iGWpGsd9J8S6hIdV
+VvhwhId9J8T9J8GpGYhId9J8VpVY1U79EJJJW6O-jwMqA+yL+U++XEU5z-5YRMOV
+Vvh9J8GpGYhIdwhId9J8T9J8S6hIdsWpGbY9J8W7P6ZAVSW3miP5wXD4tgeeWatV
+VvhFx-qLGIkS+Zv0++0B1A0+-jS0+Zw2++1NqM0+-jPw+tdN4JiR4ZaOKJm63FBV
+VvhIj+JMqxYOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoNa3XNK7tR4Lo+Cc++DLqV
+Vv0xjMJV
+Vv+V
+Vvend
+Vvbytecount 23312
+Vvcrc32 6bbbd358
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm-uu b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm-uu
new file mode 100644
index 0000000000..b44b6ae573
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm-uu
@@ -0,0 +1,44 @@
+begin 0700 cmr10_tfng: please wait
+M <D $@ /\ )@ 0 P !0!8 H (33G.X0"@ (5$58(%1%6%0
+M U1-4@
+M " #J$[ !^P =L %[ !6P ;L &; !VP 9L ';
+M !FP 1L!$*$+ !"P ?L '[ (P #.@ "[ NP +@
+M"[ M@ ;L "0@ RP 9, '3 M7 @L ([ !W$ "
+M, $ K !%PNP ?N0 "]4 !_5 =L K !$@;; &VP "] !UV
+M "&@ !# !%0(0 +VP "Y N0 +D "Y N0 +D "Y
+M N0 +D "Y (P ".@ DH !TA *2@ "K !&!VP ;L %,
+M&+ !FP <L $U%K !2P 20>L &[ 6P 5<-L '; !*A.P 5(A
+ML &[ !VP 346L $>';H !JP 4P0L &; !+ANP ;L 4D)+ %)!NP
+M 2H;L DO$K +; +L ML NR "H K !$0LP 4@0L %""3 !
+M0!"P ), [ 1 @LZ!580L $Z J .J /L $9 K !\P 3H0, $Z
+M"S !0A Z 4(..@ !S @P &@ %*$# !2P\P!1D9, 4:#S \Z!1\)
+M, "S -%B(P# +L "Z N@
+M
+M ;X @
+M 0 0
+M
+M ^Z! 0
+M &_ !OP ;\ &^ !O@ ;\ (+ !FX 6\
+M%O !;P 6X !? 7P %\ !> !RP ;X '? !WP =
+M\ '> !W@ )4P '<0 !OP ;\ &_ !O@ ;\ @ $[ "6P
+M +L "[ NP +H "Z NP 9, "3@ FP )L ";
+M F@ "L K *P "H "[ !"@ +L "[ NP +H
+M"Z FP +5P $+ !"P 0L $* ^Z! 0N@ #+
+M 1QR $XY !556 7''0 &..4 !D1& 9/I@ ''', !XX[ @ @ (
+M , "#CE AQR (<<H "..0 E56 )QQX "@ " IQR@ *JJT "N.0 L<
+M<P +55@ "XX[ O''@ , ( ##CF QQR@ ,CCL #558 YQR@ .JJT $ #
+M ! XY@ 0<<H $<<@ !L%L !=ZX ;CC@ ( "(CV D5G0 )558
+M"?++ I/I0 *KXT "P6P NV"P , #KKM \GT@ #__=ZX :0
+MH"4 ,<= #CC@ !558 8XZ *XXP #'' QQR 0 #CC !F
+M9@ <<@ 3Z5 &R (!,@ $ :0 , &8 "P!L T )X " #^ @ A@ ( *8 "
+M@%V @!I X ; / "> @ _@ ( (8 " "F H!=@ * 8 !< "< (@ _@ .
+M(8 #@"T >X M 'R 8 \@& /@!A@ 0 98 % && !0!O@ 6 8X % $& !@!O
+M@ 4 98 % && !0 N@ : +( & &^ !@!E@ 8 =8 & '* !@!A@ 8 08 ' $^
+M!0!#@ 4 1X %@%& !0!Y@ 4 98 & &^ !@!R@ 8 88 & $& !H!U@ 8 6( %
+M %> !0!!@ 4 5H %@%F !0!T@ 4 =8 % &* !0!Y@ 4 =H %@'> !0!H@ 6
+M:X % &6 " !O@ @ >( % &2 " !C@ @ <8 ( ': !0!J@ D >8 %@'> !0!T
+M@ 4 0X % $^ !0!'@ 4 58 % %& !0!4@ 8 68 & %: !X!7@ > :H (@$F
+M"/_[CCC_^N.- $^E0 !QQW__QQR__^../_^JJK__CCC !QR XXX
+< 555@ "JJL <<= ;CC@ 0 , <<=
+
+end
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm_vve
new file mode 100644
index 0000000000..883d598e9b
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmr10.tfm_vve
@@ -0,0 +1,67 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-03:21:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmr10.tfm
+Vvh+QY+2U+++Dw+7U+E++k+-E-M++c++++6HHbCsE0U+++6J2JM63F3K3E+++++V
+Vvh+++++++++++++++++++++++++++++++++++++pFBIU++++++++++++++++++V
+Vvh++0+++1e2v+++-yk+++Rg+++3v+++-Kk+++Pg+++4P+++-qk+++Ng+++5P++V
+Vvh+-ak+++Fg-2829+++-0k+++Tg+++5v++++6k+++1CU++0v++++ik+++9U+++V
+Vvh0v++++hU+++Pg+++0EU+++mk+++NA+++5H++++hL+++Ug+++6v+++-r2+++0V
+VvhA+2++f+-3kik+++TiE++0xI++-zJ+++Rg++++f+-2UPP+++4qk++0x+++-pqV
+Vvh+++04U++-1+-3E6E+++9qk++0t++++iE+++9Y+++0t++++iE+++9Y+++0t++V
+Vvh++iE+++9Y+++0t++++6k+++0CU+++Yc++-oV+++8GU++0f+-4-qk+++Pg+3AV
+Vvh49+++-ak+++Qg+2p3f+++-Gk+GESg+++4v++++Kk+JQBg+++5P+-8VCk+J6VV
+Vvhg+++4v+++-qk+HIKg+2S5Pc++-ek+IkEg+++4P+-9Vik+++Pg+IY79+37-ikV
+Vvh+GcPg+Yj2f++++9P+++9g++++hg+++im+++0c++++f+-2Egk+IUEg+300H+-V
+VvhE-0k+++7A++++v+F+Ugu-JMEg+2u+e++++Ce+++Dg+2N+f+++-wk+HcEA+2uV
+Vvh0n+-EV+u+I6CCU++-n++++Uk+++4U+3821+-Gkwk-FYNA+IO1n++++wu-Fw7V
+VvhA+++0n+B3W6k1++9g+++0u++++iU++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh+++++++++++++++++++++++++++++++++++++++Ps+U+++++++++++++++++V
+Vvh+E+++++++++++++++E++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++yu-++++++++++++++++++++++++E++V
+Vvh++++++++++++4z+++-jk+++Pw+++4y+++-jU+++Pw+++69+++-as+++Kw+++V
+Vvh3j+++-Pk+++Ks+++-T++++Lk+++3w+++-S+++-mk+++Ps+++5T+++-rk+++RV
+Vvhw+++5S+++-rU+++7Ik++5QE++-jk+++Pw+++4z+++-jU+++Pw+U+2v+++0KkV
+Vvh+++9g+++0v++++ik+++9c+++0u++++ik+++NA+++0HU+++ak+++7g+++0P++V
+Vvh++aU+++0g++++f++++8k+++0c+++0v+++-0U+++9g+++0v++++ik+++9c+++V
+Vvh0u++++ak+++9Jk++29+++-0k+++Eg+++28++++yu-++EiU++19++++++++++V
+Vvh++++++Flm++2st++-JJK++L55E+4CCI+-YF4++NDdU+555A+-ssv++U++U+6V
+Vvh++A+01XZ++Vlm++6QQc+0CCE++ZJK++7lls+0U+0++dlmU+8eeo+0iCE++gQV
+VvhQk+9JJU+0ssv++j55U+A++6+11Xa++llmU+AXXg+1JJM++tlmU+Ceeo+2++1V
+Vvh+-+stU+EQQc+2QQU+++++++-g3g+-Rus++PXXU+6++++06Xq++YJbE+7JJM+V
+Vvh0T99++dDdE+8fso+0kKk++iq0k+A++++1ffh++wboU++++1zzRus++++OE++V
+Vvhc0I++AQR++1XXU+-JJM++Msu++8ssk+155+++llm++E++++++++++1XX++-aV
+VvhNU++QQU++HuJ+4m++6-AU+2+OE+A+4M+0k-g++o+7s+0+1y++U+VU+6+8M+0V
+VvhU3q++U-d++s+P++D+0S++U+zU+6+6M+0+0a++c-RU+8+M+-Q+0Q+6U+zU+C+V
+Vvh6M+1U0o+Ss+h+5m+M++wU4++DU-VU+E+NM+3+44+-E-jU+K+Ms+3+24+-U-jV
+VvhU+I+NM+3+44+-E+iU+O+96+4+4y+-U-ZU+M+RM+4+58+-U-VU+M+EM+5+2y+V
+Vvh-E-1U+I+Fs+3U34+-E-tU+I+NM+4+4y+-U-mU+M+MM+4+24+-c-pU+M+K6+3V
+Vvh+3S+-E--U+I+Jc+3U3a+-E-oU+I+RM+3+48+-E-tU+I+Rc+3U5S+-E-cU+K+V
+VvhOs+3+4K+0+-jU+U+S6+3+4G+0+-XU+U+QM+6+5O+-E-eU+Y+SM+3U5S+-E-oV
+VvhU+I+Es+3+2y+-E-5U+I+JM+3+34+-E-IU+M+KM+4+3O+-s-LU+S+Oc+6U2a+V
+Vvh0DzvXXXzyiCB++2yZE+-llrzzllmzzyCCDzyeefzzXXX++-lm+++sss+++++V
+VvQ++JJJU+0eeg++QQR++PXXU+E++A++QQR+++++8fzV
+Vv+V
+Vvend
+Vvbytecount 1828
+Vvcrc32 f6409a48
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.300pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.300pk_vve
new file mode 100644
index 0000000000..5d67b2cc18
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.300pk_vve
@@ -0,0 +1,251 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.300pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX2p+8+++C2v0Uk+-0Oi++Eafg+zEEk++VwQ5TwQpFrWrDDPV
+VvhxBdRYVHM2Ypm7BQHHK6opVFREZHI3Yoz3ooVVB6MLEoh+OHD4ogQGlo2bloIV
+VvhRAJ7TA+pEUhJK-oP5DsPHJo3UvGXd8GIgtx9Foksx9G2d7GId5Gx92Z8GYbWV
+VvhGoTXH2R9G2d6GYZ7FhO+k2-10ssv5VkSz-nERlgq70Yu2WYh-5DGBXonLnpGV
+VvhExMIHK31plDWHOt2qoplBBMJwxMKDI3nolYx6O9E90gR6r9KTA+wF+kstW+SV
+Vvh5DsPHJopVB-9D2kvxB+uHEGCBB6sHGFooXRBArsYoYRB6sHFFzHGC2oHZB+uV
+VvhH2d9CogwGHfJkA+uFEfXY-kP5DsPHOVOG2kyC2o-VB2MFVQMx45HFGooEx8xV
+VvhB39HsYMRB43lTooVTooFVB+cH0VAC2dIqJ1+9YM8QQcP4Vny4oqMKIV9DXVAV
+Vvh42o-V43VXoMR739GF1oPoYIh9XFVoSJBVBZRHEo+k2F516sv6FkSz-nERlgqV
+Vvh70Yu2WYh-5DGBXonLnpGExMIHK31plDWHOsYqonHopBBF1HHFTDHFjDGFno3V
+VvhUh-88W6fBWIR3h1E6IUA++6T5lny4oogVNLCF8HCJ8H+3Bt2dAtIdAGYpNKAV
+Vvh931E3YY3lloD2Fnz4oq3nYHCJAtInZH2pMp+k0B801XZ3FERzVhx13oiFB9ZV
+VvhHGtIojG1J5xIFoF6BHYKClEx-R1+GogAQQcU5lny4oo3a3hOH1lA5FGloYcRV
+VvhB75HGFp2URJ45LFFq2ExR1HKEl3BJ02YpI2HLIJIp2NBF5HGG2ojGIoTGYo2V
+Vvhh9H2hONgKn1+6Yk8++6O3Vny4ooQLIt2pCJBHYHJGlsZH-xIgKGWJ8BIV0pmV
+Vvho3VB1eeh7WMQzVh7+Ga3+FP-3+23rl3B2Irl3A2YnlB82YrlB72ooHG-FB32V
+VvhQIHD3IMIHT3IIJHFN13YoKEVRA3o6KHT3o2LHFRMHFV6HFUtH0UsH2QdK7IZV
+VvhlR-0HUk++VwT5DsPGMe3h9OmkFGloFKVrl785D32URwJFlrlN45D42ERwNElV
+VvhoNIVoOEVkPPT53rlpB2-+w6-+gE-+Nb-YA--HkllmW+Q5jkQo5pHMx2tD1keV
+VvhDEC1oXMxApHHF1pHBBInDKAi7BOCDKES7BJ1DIF1p1JB74DFFoo1YwCnYx6pV
+VvhDKTEk0dE0iCE5-cQzVhBL3R8GXZ8HWV9DWR9FogsGXZ7CIV8oB1XHMtIq2qJV
+VvhpAoEk3VF15586-kZz-nETJBXoHYwCncx+sDGBXonJBB2DJAopHAxMmsYpcsxV
+VvhN-HKAjHJEnp2ExEpFXN4BFAJBnEJ2nYm3V6vAFNB72BliL5JBVpHIRMo9KbLV
+VvhTMPOFw-+IUj55VwR5TsPHIopQx37H2d9Gnjoh7x9GYgvGXl7DEFooB1HFnoYV
+VvhUx36HEGHo2Z9t2ZAGIMIGYIJKXIFlnERdH1+CJA6st+L3Vvy58NFUa6WQdBmV
+Vvhcq90LWD0FA3IpJpJp7oPmwjFbILJHKwosVoHER2Z91Ew7Ica6WMr3Lb+93E9V
+VvhXXgS5-nw4nr0FpN08IYW4YYG8YYGwPGF6OGV2PGVoCBBfZHOtIqYqppBCRUeV
+VvhJEk++VwP5TcPp8FPFoocsooMtIoMtIoMsYoOww4ngRCF+F8-+HB0+KI-2AUzV
+VvhJUk++VwR5TgPm7Bh-5HG82oVZB2PHE4zH-l95EKVoTGFojG-opMRJ45JFFpYV
+VvhEhN25LIVqI6Rbo2RfprDDRwhIAVZJl-lmWgd5TgPl9KHKpd5GpgcH2gNGpgNV
+VvhGpcOGV384YcFGGdM2YYQG-7M5DFlF55Ex43IMR333YIR7I3YIRB13pARF142V
+VvhARHo6NEVpI2dEFpY2OEFpadRV9LMH1qHo1qHo0qj9F9Hk2NM1++05lwQzlhQV
+VvhGcS3lNDGGGopURJ55KFVppERZ19NIVqo2RlRtBvprKql7BcHHN33pmJBQKLJV
+Vvh42p-ZR6PHF8pkh-8KqOakwUvKEk++VwR5DgPmMBh-5HG83oFdB+PKlo2cR3NV
+Vvh5FK-ooQRFJ5KFFpZARV05NEFqaqzHQDQt2r1r2r3pwo+k1lO0QQS4FYQzVhhV
+VvhNJd4CoQfG0dM4oYOGFd84JpopopopppopopopppoYOGFd84IgNGWV942gbH0V
+VvhR8FYZKpak0hV0++03F6GzF3LYp82IbBXMbDGwuVoEqBHMbBHQowsAoR1FV2mV
+Vvh2XEGAGBYAw+jMUXXY-QG5TkQ7h3B5ZDFsXoXB6AGEaFmF6AzCWDWCXsVCX6uV
+Vvh6nYnC1B6706Y7VJ6o03X-lln2UwGzF3qQnBGJ17XAq70nWCy6x9GcGC-Eb3WV
+VvhIMNEk0xY0CCE3lERzFnFPHHZonoy6uEnUY6HMcFHUpCHIeBC6uAy6uBT8XIsV
+VvhFWR67037Eq9+7KI555AG2-9y2LO1Ea7mErAXYW8W2u6R6HnWDF9F8lAd30UKV
+VvhB0ZKk07a-CCE1F6Rzln3gmCGEsAoQp8C6x5WCvjnoSIx5ZDFDGGuUA+vNkU+V
+Vvh+VIK5++GpHh06WUX6F6r7GELBHfXBXcpD0Ih+n9E2YoVpz9LjAbFQeBVo0IhV
+Vvh+nwh2Z90QP8GQwSUk0Nc0CCE3lERzllKoooyIxDWDIApYl70V4BjFnPXC1LZV
+VvhC1IsBYR0Yd1E3qY2QQUA0Vrz569rBm-ANYQqtHPZBXR1YR+UOUHXY+oE7EEQV
+Vvh+E9xDG-vT2owtHnZDCIp7HJ2BIAr6nZNk1Jf05583VIRzllKp2pCIxHWDJB6V
+VvhMqG1MdBVgp51ER+n5FAHoMl0D1B9B1goGXIuBIUrC1NIYc9E3ak2QQUA0lrzV
+Vvh53NotLByIrtHTZBnV2YUo0Zh1JJM702Gzl2qBaO26J7-IcJX2aBjG2UqsnYtV
+VvhBSItCHItCHN6G28HYt1E5as6st+L3-9z2HMpV-70V4BjFnPXC1LZC1IsBYR0V
+VvhYd1E74w6++6J2l9y2MOmIrC0ItAngX909WD4sgAWkX8nAtBHQrBGhc1+9b+6V
+Vvhst+L3Vc+2IMoh-70d582UrCHQu7y6uDWIuBjCHQsBoQsAGEeAonWDJsnoto+V
+Vvhk0tl05563V6OzF42IK7-AYBV2nC1DnYmsXclsXcn8XAtAnV27oMY6HV1DGsXV
+VvhoSAwYR+OQUN2FV+E2jwFBWBq2rEYJ1BYAbsnnZD1p7dUo0Rn-Yya2+wGzl3aV
+Vvh6I7XAc6lYH8FAs2pi6W6l04H9lcW806s2m2J7-BZo-po-XXZ2+gOz-Zi6NwcV
+Vvh81R3jnByIrCCAp2jB-EX3YHM5LI6st+L2F9w2KJWFoAsDZ6sAiAsAzBoAqFGV
+VvhIFFK7gUdRUVlmVMH2jkFV576BHUaC-Qr7nQMFFcp4jB-gn5EAVo12R3R3B6xV
+VvhEhEQq1lr0ssv5VgGz-40Ub74FXEs7mIrBlQqFVTnIFBFUo2XENB-AY4HAI6lV
+Vvhgm316Pwl3H2QFYp5DHUU2GUU2FYPk0ts05583VMGzl2sC3JIYq91IR+o5GAVV
+Vvhon2hFBIxQxJBEGDG2oo-Iw3ncbC2R3R76A+sSEVlmVML4U+FG2RYUtC0cs4nV
+VvhQfBll35FBFoTB-oXAREm5IAFpJpIpXq0qD5MwR2o5Fx15GAWp2pEo0Ru-llnV
+Vvh2V2Gzl3BEqBFQp7nILBVMr3HoxwxBFQq3XQJBlIs3HQYBXHIk0++0U+04VYQV
+VvhzVhBW3V6GXssGlXokMsopyJBTZHLHMLHoA1+FE2BJJUX5Vry5BMhvnrJqqqlV
+Vvh3BcGLM2pq-FBQJLJ3ZpFRBEMLGwOHF4pkR-99EGloJYRB69HG-p3MRN39KFFV
+VvhppARZ0rm+i1+IE6AQQcU5-vw5B-xIqDFCHkvCXo1Ux6qDHBIooExInHJAnpXV
+Vvh7BN-ElgHEIDECDDEB-ElgHEIpY3BMmxBJ1DIF1p1JB74DGBnoHYwCnYx6pDKV
+VvhTE1+BUA955AR4Vrz5BERkhfnqTHMLMPK2JpV7BLlBBHlFBAJLG3YoT3ooD42V
+VvhnlZOwPGT52UgFohHZQ-E7+E8eeoQ5-ny4pQTFlLX3j4qwKQKRdNjOKTlNloiV
+Vvh6KwJ3i7C7lLE5kIA++6T5lny4o+RV8LCF8HCJ8HCJ8HCJ8H2dBKJX0lEk224V
+Vvh0ssv5VoQzVhRhJoJNBAqLG82olVR6NHG4JoFdB2OxRnpr3qorGrVrVrVoVgRV
+Vvh6P5H4VomUhEM5J7lpHMRFJqZqp1+9UQAQQcU4lru52KpG6UtOG7IF2JnEbCHV
+Vvh6s8H2t4X2hYV9NLNsoqSJBbZHNHOLIoOk1w60ssv5VYQz-iB9GLLsYpMoI7-V
+VvhCHF1FXJ3B1N3AnR3HlFoKC7oO5FX6rFI74FHEpFHMoEncmEIo7pjHLHMLGoLV
+Vvhk1c715586-gQyVhx9ILNsYhLFZ74FIHoJ3FSB3F2N2F2TnJ2FzF2B7B278AoV
+VvhAwAY6x2lXITNxBZBdRHFcA-90UiCClsP5ToQmBEqDECXZABoo2JB6pDHHnHHV
+VvhHW7BF0HIAoooBBApDGFHoXQx+sDE8Wku8nke7lId7F6K4FMG3VUZ2lMM3VC6V
+VvhUzVsEB+jA+U++VIF5TkPVOAnQa7j80EdDmCH6eDX2uPYclCW6tAj8X6e6mYnV
+Vvh8GIb7WMc70dNo-Ul0++03EoQz-imYrNGAusXbZCSIttHYuFBk1Em0++03FAQV
+VvhzViKgZC-UqwODoG1wpUoCHoYoXojDGDGDGDGDG9H9H9H8-Qd3VcK4lLFHFHGV
+VvhEA+nAkU++VIG5ToPZP71ULBVUpsYN2BnoXoHoWoWoHhhExDnoi71C29pR0G1V
+VvhAsElcp41QZCaUA+nB+U++VIG5DsPomoWojDFHE2HkGCl6v6XcXCVEt3HUKBlV
+VvhMr3nMbBVUp4HEOAxLYgx2x78gQ+lBEU++VIG5ToPMbBfSMaSERAREHKF2Y80V
+VvhMrwMDGDGsY6sEjG276Ald14XIMBVUc71hN1+CXM6++6J2Frw4uKXEM7lMaBGV
+VvhN27oArB0oHoGoHBKAGEZFmAl3n9oYWsXclCH9W8X6dAnUZ7nIb7mEfK+k0wrV
+Vvh0++03F6RylglozomoW9-AQ3-gI4lp-olololomoloz9G9Gwx3B5noS7B1WHGV
+Vvh9E1EBXU6++6J2Vrx4tKmIc40Mc7S6e9nCGF57ZEbMWZwSsUXNWJY82AeAmgWV
+VvhsWkW9-Af70cJ80Qp8aX+D1Y6++6J2Frw4sKWIM7WMc71UXCGAtAWcyAHclCIV
+Vvh2tAXV182Ea2HIJ2XNGDFDF9FB0UYFXF47HMa3mUICZf+HmE6++6J2m5x5gwRV
+Vvh7f6l6c3-IK3FIJ3VMH7VEzAa2o6p31Ap4nEPIViPeeiQ2JkHD-EZ3VEnB-IXV
+VvhF-IXBFIX3lII3lEZ3VEK3FEM6l6fPHwPk3Qa15586-oTzFr1r06RcX5NwY5MV
+Vvhwo5MAlqGERYX5Nwm5OAFWMCogw8ogf2HgP2XcP2oUP71UO7HQOBXIP7nEPC1V
+VvhAPC16QCIcGCHcHCXYIBm2r3WIYB0ZMJko06z-ssv3+wRyVlLMa7-YW8Ly4YvV
+VvhCngv90oR5GrlrW23bnhA8w+dDUSCClEE5TwIch1oo0-EsloGoFoGoFoGo0kwV
+VvhD1o1UmC5Ym8W6t30MqRUo-6E-5561+YGzl2qJ4DZIptHIqEdo-gF-CCE1EwOV
+Vvh--45hADZgvtHjZB0IoF1F1BWAsK+k1UN0++13FIRzln3oHEf7mYrDWQsBnQrV
+VvhC0Ur8HIrMYkp8nMdBnUs8CAsBiAtBXUrAWEqAY6rAm6pN2T+CFc9XXgS4l9xV
+Vvh2JRpMp70EZFG2b71NM6mR79wCWTLF2DGBHoWQx2rDEC1o1V82HV72XQVBlEoV
+VvhAnILNqL+CVgAQQcU5V9y2MKJYZ7GEa806b71Vc6Xd76Wgu6Hgu6HjG2vDC6vV
+VvhDF8YoHZO2XUl8FEbAXQKB0Ip4JZZk2EQ0++03FAOzVLJ5I9I5I4a2N7HQrBHV
+VvhQFAnQH6mUH6XQIAHMJAHIKNVIlBFMlB-Qm6lUX6lQnAFQpBnQp8F3e5I5I9IV
+Vvh5J1+L-oCQQcZ7Fnz4x5OpF3MHI2YcxAWGlp-B95HwIGloj32kR5lJ45K3YMRV
+VvhMKFGpFN39KpRILFGpFR45I42MREMFVIO42MK4VVB+N4IkN8IkN4Ygc8YgN4YV
+VvhgbGIZ2ZBNQ-a5V+stWca5jgQo4+EBhO2ROFncwBXgx+KD1o-JADE32o1o-ExV
+Vvh+x2HHECFEHDFCFRB2t3ooHUbHFBnNB5ERB2s7y7B2t3ooHYI2Yo1oVAx+x6HV
+VvhxADF3Hkx+ZGYo-R7D1UsGZcpph-hgB-T5kllmW+Q6DkR+Q2--p51Mm8XcV4XV
+VvhkeDHUx2HMx2XJA6nEx31BA3HAw3X793o38423786cMEIYNEIUOEIQPEIMfAYV
+VvhMPEYIQEnERB1ARBH6RFZorHHYwCYcf2nIw3boU5+c-cV-5561+YSz-pWPoIpV
+VvhsYLXBiAasmTlqDBIMa0U4Hk2QQUA0-vx337TFGoiAKsmLWBGLXBCB2BEg1oXV
+Vvh1JJM6lwZzFn44-mC6b95sWQgTmQgTW7mlmQdo0oi8mQgTW7mlz7mjG9EbmQgV
+VvhTmQgTW7mlz7mlz7mm-UQMA-g7EpJK0AP6TcSJBAY6loHAZ51AaC2Ar2M2Y8-V
+VvhYYC-YYC-UZC-QaC-Mb8-Mc8-Id7lMdBVIf7FIh+I3GoYIbHF7GEQ7GIP7HMNV
+Vvh7WQM7XQM7WUL7XUK7nUJ81UI8HUTAeBlAg7VAh+Z2moWAI5IFS+F7kFlm+k4V
+Vvh1DYQ4DTB--0022MUo0Uc-XXZ2+sez-vFkP8mgg50gfwfwfwfCz8zCy6ftnnXV
+Vvh9Frmoh5GoE2-QB+f8EMstF+C8U+SQE2-+E5GoR9FrW91tw9WgzgfwvwfCmgvV
+Vvh8ngfwf8mgf8mgR1+80c6++6J2F9v5dsWoVYZ3G6o2oAm6XS9x8AF2bEV6oAmV
+VvhB-7GIN9G5Gwdk-cf15586-cQz-TG5QwhfZ9Osmg0TZkhfZ9P5F1U20k2QQUAV
+Vvh-Enx+njSQ6F06F2+s+ci-5561+E2z+Brxg+p9kU++VIK8TwSq-pmzK9KwhPmV
+Vvhpj9K9KwhPmpj9KwhPmpj9KwhPmpj9K9KwhPmpj9KwhPmplq+Y-+u-5561+QGV
+Vvhz-30FDAxvnB276+LCkFlm+k64joFIZHoDOBDFHTlPlPlMK3kk-+x15586-kAV
+VvhzEwhkhsBDS9Q6A-GE+llmW+Q5TkQo5pHQh2g5-oVcREM5K3VV63FQY7lEK7VV
+VvhQH3WUo2lIsBFsV3HYp9XItBF2K8HEG3XR22lMa2GEI3mEGAWEMJ2QRwRwRwRV
+VvhAt8Ko8fE4Zg2QQUA1Wby5bxzQftGjZ8yIftGjZ8yEgRbQB+OLEFlm+kC8E6SV
+VvhTrz0tP8yIftGjZ8yIft0RqRks-3U-5561+MAyVk26EUV--0vtsnU1V66++6JV
+Vvh-UXr54D51VVkkS+D2kU++VI5-zAQ1XllllUU+CUB3+U++VI8-DQNkBVXw51MV
+Vvh2VI6++6J1+Tr5-cjYF7l6oAsJJ160FM6++6J1U5t4B5U1lQAw1MW-kTj5Fm3V
+Vvh1-UcXU1E2-U555AG0kXxzZC2YtwrAc6Oo+oU-5561+c2zExnIZBGUC+ELUU+V
+Vvh+VI8-jQQ-+C-gAN+c-1U0Zw2QQUA-+Hs54zqo-Fx0++03Eo5xlkzB16oAmIXV
+VvhwZ6mIY1U1rs6++6J1UHt4ls2zXMzc1XU1bw6++6J0kHr541SDwSkMA-Ak+k+V
+Vvh+VwQ7zwaoWr2r1rHrGrHrGrV-35S9QwxjoqZqG3BUGHL6YplBBMXHK33p0JBV
+VvhEKHHwLHG42oVVR1Go-dAwPGll95EGT5FFolIZw1+Gg2A++6T50Tz7hYxhBgxV
+VvhgxgxghoEMVrWrDDPxBdRYVHM2Ypm7BQHHK6opVFREZHI3Yoz3ooVVB6MLEohV
+Vvh+OHD4ogQGlo2bloIRAJ7TA-BkUk++VwQ7zwapVrHqm2hYX9L3VpVUESFrWrDV
+VvhDPxBdRYVHM2Ypm7BQHHK6opVFREZHI3Yoz3ooVVB6MLEoh+OHD4ogQGlo2blV
+VvhoIRAJ7T+k2f11++05lkZzmHGFVorAh6XTG3n-u5S9QwxjoqZqG3BUGHL6YplV
+VvhBBMXHK33p0JBEKHHwLHG42oVVR1Go-dAwPGll95EGT5FFolIZw1+GAEA++6TV
+Vvh50Pz7R6Z9Jx1HJ7G0J5S9QwxjoqZqG3BUGHL6YplBBMXHK33p0JBEKHHwLHGV
+Vvh42oVVR1Go-dAwPGll95EGT5FFolIZw1+GwIA++6T50Xz7xMxflERXlIRYH5PV
+VvhA5kRshnnqzHOLN6Iq-7BQWHL2opWBBMILI7Ip-NBDlRB6MHG43oB9E4Ynlh9V
+Vvh52gR-7wR35H3GLn+LAMCQQcZ7Fnz4x5OpF3MHI2YcxAWGlp-B95HwIGloj32V
+VvhkR5lJ45K3YMRMKFGpFN39KpRILFGpFR45I42MREMFVIO42MK4VVB+N4IkN8IV
+VvhkN4Ygc8YgN4YgbGIZ2ZBNQ-AlkiCClsQ7jkQo5QPBWEdCV6d9EFnoXMxApwxV
+VvhIYDK32pVExQHsYqiFBhBQHHK3TDK3Xp-QxANDG4Wo0kf5GBmpbq1r2rHrTDPV
+VvhDKXK5O1+FwU8st+Q4mTy7h+hhBgxkxkhkxkhoEIRe3d6H1ssHE42oFV43lXoV
+VvhMRB39HF1ofooIhDWFVooML3zHG3zHF42o0VA82ksGZHNIA-3mEfXY-kP7zsaV
+VvhpnqYqXqXqXqWr--hqcKYVADXVB+MHF42ML4DFVooIhB2DGjHFGoy745HFVQLV
+VvhxB6LxB2MHE82kcH1V8JBZQ-6mUfXY-kP7zsap-r1qW2hUX9K3VpFUEUxe3d6V
+VvhH1ssHE42oFV43lXoMRB39HF1ofooIhDWFVooML3zHG3zHF42o0VA82ksGZHNV
+VvhIA-1mkfXY-kP7jsZo0IhHoBBEZ67vOVOG2kyC2o-VB2MFVQMx45HFGooEx8xV
+VvhB39HsYMRB43lTooVTooFVB+cH0VAC2dIqJ1+7Ak3lloD2GTz7b9FHFDGDG9GV
+VvhDG9H20zEVQt2nZHCJAtIlB-Mo21E6Ao3lloD2GTz7U21pBDHox6-2EIBVQt2V
+VvhnZHCJAtIlBKBEB+WnUL55EwF7zwagE2HoV8mAd3VUM23nMLCFAtInZHCJAHJV
+VvhXI1E5Qw3lloD2GPz7L7GToB57G-hq3nYHCJAtInZH2pMpA+yo+kstW+S5DsPV
+VvhHJopVB-9D2kvxB+uHEGCBB6sHGFooXRBAnocFzHGFooXVB35xB6sHFCIo1dAV
+VvhGYgvGnl7ChL+o2zF1++05lwZzWE--42-Jn6-EXQ-ELA8eMe3h9OmkFGloFKVV
+Vvhrl785D32URwJFlrlN45D42ERwNEloNIVoOEVkPPT53rlpB2-+w6-+gE-+Nb-V
+VvhYA-CoUllmW+Q8Dkao0r2r1rHrGrHrGrV-0TJBXoHYwD0cx+sDGBXonJBB2DJV
+VvhAopHAxMmsYpcsxN-sYpIAxF2DIBIoYMx35HECHkvCHoXIxNx+A-AokllmW+QV
+Vvh8DkapnqoqnqnqnqmrF-TTJBXoHYwD0cx+sDGBXonJBB2DJAopHAxMmsYpcsxV
+VvhN-sYpIAxF2DIBIoYMx35HECHkvCHoXIxNx1+HxEAQQcU50Xw7hERoxgV9N6mV
+VvhplMRMM25NxIqDFCHkw8Xo1Ux6qDHBIooExInHJAnpX9WHKXXpY5WHJEnp2ExV
+VvhEpHGFXoIRB+tD1gtDGBHpbo+k2nJ15586-kaz0HEFVorAh6XTG3n-rTJBXoHV
+VvhYwD0cx+sDGBXonJBB2DJAopHAxMmsYpcsxN-sYpIAxF2DIBIoYMx35HECHkvV
+VvhCHoXIxNx+A-8pUllmW+Q7zkZo0IhLoBBIZ677xIqDFCHkw8Xo1Ux6qDHBIooV
+VvhExInHJAnpX9WHKXXpY5WHJEnp2ExEpHGFXoIRB+tD1gtDGBHpbo+o3zM1558V
+Vvh6-kUz-o-kE25IQBX6eCW2OD0cxC1oFBXoGBIkXB1oIAokJAnkKAYgLEIcMEIV
+VvhYcWVV-GFZ-G-d-Flh-FWgmFVh0FFl1B-ooAlopAVp4LHRBCHkuGWgHBHkKTGV
+Vvh+Q1+CBYA++6T4mXu7e9PHPDQDQ9QDQ9R231EGYKoRB+csoo-XZHE4CJB+MsYV
+Vvho-fnkPClo1YR6c5IB0ppog+rqUk++VwP8Dcap1qYqXqXqXqWr--go2d3h5HEV
+Vvh8CBB+MtIo-XZHE4C7B+Oww4ngR+t5G8-p1EhRR9+ChgA++6T4mXu7h2RkxcVV
+Vvh9M6mpVMRIM269EGYKoRB+csoo-XZHE4CJB+MsYo-fnkPClo1YR6c5IB0ppoUV
+Vvho1HQ1++05lgbyWKWIU2zEo+H7G0gp8FPFoocsooMtIoMtIoMsYoOww4ngRCFV
+Vvh+F8-+HB0+KI-2A-5rEk++VwR7zgapHr2r1r1r1r0rV-pmMBh-5HG83oFdB+PV
+VvhKlo2cR3N5FK-ooQRFJ5KFFpZARV05NEFqaqzHQDQt2r1r2r3pwo+k0zS0U+0V
+Vvh4VUQzVhB1GLKsopwh5GIUtG2V7CDGIN8BzGIR6G2R7FYZ3KfoCBBNBRR9A1+V
+VvhNxwFlm+i9Fvy58NFhZ40MW8GMW7mYt8HQeC0cq90Qg7S6w7XkYH-NA3IpYpJV
+VvhpJpJpJp7oNoPmwj9mwjFbFbILJLJHKHKwxQosVoHIR2o5F7VoGIgBWkoD0MwV
+Vvh7IcbGWMW7XUW7XQJSVJtk2GM1++05loaymKmIhPoBBMZ68f7Uqo2RB6cLF4YV
+Vvho-hP5EGVoJYR3M5HFlp3IRN35KIlq26RZ-5OPPxBkxnYHQDQHQLLnE1+CC+6V
+Vvh++6J2Vrx559GHGDHDH9HDH9I21FtBGV37nMq7nojCcR2BXIq7nIrBDC1B5EoV
+VvhMFAV6o2X2XN1AA+rsEU++VIG5ToQoHoIoHoHoHoGol-5SHIcFGQqBWQx9ne5V
+VvhF1MpBWQpBnHnUnFoB42H6GB-6l6qEn1+By66++6J2Vnx4v5HDF6GkX8VMN4-V
+Vvh-0SHIcFGQqBWQx9ne5F1MpBWQpBnHnUnFoB42H6GB-6l6qEnk1HX0++03F6OV
+VvhzFZoMKQmIXRFQkErYp82IbBXMbDGwuVoEqBHMbBHQowsAoR1FV2m2XEGAGBYV
+VvhAw+nt+U++VIG5DoPQZ8DEoUZ64NtBGV37nMq7nojCcR2BXIq7nIrBDC1B5EoV
+VvhMFAV6o2X2XN1AA+qtEU++VIG5joRcx1lEPwJ5-AR2kK5Yp82IbBXMbDGwuVoV
+VvhEqBHMbBHQowsAoR1FV2m2XEGAGBYAw+ttUiCClsP2joFJrJXIY70J36GQYBZV
+VvhUX7oYjku7xR2Ex6pDG7noHQx+sDEC2cFC2YGBm2r31EnBFRbNQ+gtkQQQl6EV
+Vvh4zsFVcAnMZF0MoBWIh1WDC6x2h2e2nUJ7lQZ4KrHo2oHoTD1S55Gk19c-llnV
+Vvh2V+RzVlWo2o1oHoGoHoGoV+jO1Ea7mErAXYW8W2u6R6HnWDF9F8lAd30UKB0V
+VvhZK1+9iY555AG2-ry5B+wH1kwD0oF-+O1Ea7mErAXYW8W2u6R6HnWDF9F8lAdV
+Vvh30UKB0ZKk15e-lln2V+QzViVoHkV8WAc3VQM21hcB0Mb71QmCG6e6HcVoVDCV
+Vvh6x2h2f2mYI8-Mo8JMA+hukQQQl6E5DsPMZ7jEoMZ63hcB0Mb71QmCG6e6HcVV
+VvhoVDC6x2h2f2mYI8-Mo8JM9+Pv+Flm+k75TwQEaFXQr7nQc5GNIMyJHLZBHN0V
+VvhYB+PvEFlm+kC5TwQguGXcuCWkEEqd9CiIutHcvFtIB+SvUFlm+kB5DwPUPCGV
+Vvh2b6mIK3-UECKZ8CSIttHYuFdEB+OvkFlm+kC5DwPEZ7DEoEZ63deGnfZCiIuV
+VvhCoSJk1bk0++03FASzVrF4IENaVF73oQK2Xo-AhLmpT9IC4Aa7H2YC2AtEXgmV
+Vvh91sVD4sgAWkX8nAtBHQrBGhco0Tl0CCE3lIOzlaYMNQmUXS-QkL4BNEGEdFXV
+VvhToQrsnUqtHUqC1R5Et8Fk11m0++03FARzVm0ooonp1p0p1p0pF+uOmIrC0ItV
+VvhAngX909WD4sgAWkX8nAtBHQrBGhck0zn0++03FARzVnGDGHGDGDGDG9I22tfV
+Vvh7HQs7HYnCmAg6i6wPWkm90AfAnYpBnQp8qX+ADE6++6J2lny4w5IDG6Go0AfV
+Vvh3VcM22Zf7HQs7HYnCmAg6i6wPWkm90AfAnYpBnQp8qXE9TI6++6J2lfy4MFVV
+VvhRn7WBq3n-NOmIrC0ItAngX909WD4sgAWkX8nAtBHQrBGhc1E8zM6++6J2lnyV
+Vvh4s7GboB77G-yOmIrC0ItAngX909WD4sgAWkX8nAtBHQrBGhck2Hs0++03FAOV
+VvhzVLJ5I9I5I4a2N7HQrBHQFAnQH6mUH6XQIAHMJAHIKNVIlBFMlB-Qm6lUX6lV
+VvhQnAFQpBnQp8F3e5I5I9I5J0U8jY6st+L2Frw558nGnCoCo8oCo8p5RNK75EnV
+VvhUyIXUmsnUnwrEnN37F33Ma1E8Dc6st+L2Frw5+21pBDHox6-2EH4JWFoAsDZV
+Vvh6sAiAsAzBoAqFGIFFK7Uo0fv0CCE3l2Qz-il+FDG2f6mYK4-UEFqJWFoAsDZV
+Vvh6sAiAsAzBoAqFGIFFK7Uo0Lw0CCE3l2Qz-hmIbx1FmIUOKJWFoAsDZ6sAiAsV
+VvhAzBoAqFGIFFK7g-1zEVlmVML7E+Qp1pYpXpXpXpWq--QV5N6CHUeC-gr8nQQV
+VvhFFoHIR5nER6n5IAVp12RJRJBMxUhXlqD5FB-oTEloX6hFBL+CTs6st+L3mM-V
+Vvh55PKHKtHpi6xQnHEAGEfFmZ6CDCWXWCXsaCXQu81YsC1V68H2Y8nBB1WDKsXV
+VvhpYozfE1+CDw6++AJ3Frz5ALFB0gb8HQy7nUrBnQs81QdBHRWH1IfBWYrC1UcV
+VvhsnUqsnYqC1Qm71MmEXQn6XJYFw-+i+VlmVML7++PcZ9Ex1HE7G03V5N6CHUeV
+VvhC-gr8nQQFFoHIR5nER6n5IAVp12RJRJBMxUhXlqD5FB-oTEloX6hFBLE4RQ5V
+Vvh55AG0F9u2c3lQa7WMaBHLnQbBmXmUNwHo-fr-lln2UgGz-6lgO8WcO8WYtwrV
+Vvh80Uc80Uc4Ff+AEg7JJUM5Frz5B-YL1IFAXYqF1UqIoQrFGXWC1oS6sCxazC1V
+VvhoSIsDFtHUx2sDGC2iHa+k0gA0CCE3lIRzlnEPEBFcqC1N5BoQs8DDIsXoRJnV
+VvhR5C1PZC1PZC1MsBnV1Ys2B+a1EXXY-QK5TwQqPB2YpGHN6snUrsXUo+IXnUrV
+VvhtHUrtHUrC1V5F78Gg1gC1JJM6m2Rzln-RKkHMGBFcrJXUrJYQsFoQsG0XnYwV
+VvhLWCHkh7nYrFnYsBiItC1PZCHUqCHUrG2R1Yt8F1EBUwBJJUX6Vrz5BRNgq2XV
+VvhF7BpJ7BpN6C2UssXYsBy6tC1E00DCHUrtHYsByItC1QtC1V6FoGHYd9U5G66V
+Vvh++6J1Unw5-UMwDT5nEo2--+EU6602--+FUMU6A+89EJJJUsA+jw75N5U5Jk6V
+Vvh++6J1Unr5+E2602-0+UU6E22--+Ei9jXtsSA1AU7SkU++VII+Ts9pvU7T-++V
+Vvh+mcd+Ts9rT+DOKFZPbFdNaZZQW-IHJBAw-JXPqFdPaRnMqVZPKIUJ4JM65FZV
+VvMS5Hk14NjPbFaMKBZMbZoNTE+uU++xTPqV
+Vv+V
+Vvend
+Vvbytecount 10104
+Vvcrc32 506a9d00
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.329pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.329pk_vve
new file mode 100644
index 0000000000..7086423b3b
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.329pk_vve
@@ -0,0 +1,270 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.329pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX2r+8+++C2v0Uk+-6kQ++GA5A-3EEk++W6S6DsTpV+E9SwxV
+Vvhror4qW3BcGHN6YqFBBUXHM33pj3YpT3op-VBENHGwOHFox2PHE53kR-9wR38V
+VvhwR779GJZoJGMoA+wEUhJK0+R5zsSLKoJYx-7H2d8t2hNGoZ9KIh8GYh6LB9FV
+VvhG2l8KYh8GpbWH2VB-6xAK2l7GpZ8KIh8GJPLYA-3EkiCCm2R6TgToaQQBWEeV
+VvhCV6tD3RB34HGBjHI7IpGFRIYHK6ppVFBjXLOt3r2plHopVNBIKHI41olcx6PV
+Vvh9E9E8lonMxRh+A+wF+kstWAU5zsSLKp3ZB78HFGonoo2jWHFGYoJtMHGJoooV
+VvhXWHGK2oYZB3MHGGTHFGYo2hAH2hAGoo2Z8ph+A+xFEfXY-wR5zsSLPZPGYkuV
+VvhHE8IoGstHG4IQL5WV55IFWpAp2IxDXFlp2p-RBALxBELxBAMHG82oGVB2sH3V
+VvhDQH+A2M8QQcS5Fzy5ZqtKodACYo0ZB2iGIoVscFlp2MhF3DInHFWpCB55IHPV
+VvhtIqor3ph9F1+GoQAXXgY5W5v5x7r52MY8YcGCHo3Ux75DHBnpGNBIZHK73pWV
+VvhFBQXLL32rCBRjpr3nJp3HopIHop2PoooQxB6DFKHkFCncH92MZ5GTE1+8oUAV
+Vvh++6W6Vzy5Zo1o7KZojGooSJ9HFsohB9KoYhB5ZGooSJ9HFGooZdNo1o3k-l7V
+Vvh-QQR2-ATzltR4JojHFtIoSJB5ZHFtIoIoZbFIA+dGUUstFQK6DoSXFo3pTHIV
+VvhtIpCJBHZHIGWN7FIVJG3ItFIYMClMx+IDGLFk3B915586mATzVtR3eZR-R-BV
+Vvh2h7B+h7B2RBA5JGlpYcRR75MG-q2URZ55OFGqoFBd1LOEV7BV02oq22IHMJYV
+VvhpoRBToVBLWGYpDGooolB3B-B3POB3AL+8Ik8++6Q4Fzy5Zoh3hTopyJBTZHLV
+Vvhsoq2o-RA3zHE3okbH-XogbGYR6IxYw-gHEuefGce5zsSKRKdLJLGxBEFHFwGV
+VvhDG2Ioj2XoF7B9l6x+HHFwIClBB9lEu32oVEt3IoVIs3IoT3XQJHG3XMKHG3XV
+VvhILHG3nELHG3nAMHF41ALHGwMAVVB6MAFZB6NGIoGYuHF8HZB368Zap7R3Q-AV
+VvhHUk++W6W5zsSKNiZhR1pkh5l795GwHGVoj32YR2JG-oj3YQR9lR45G42IR2NV
+VvhF-oVZH5GwOEloj4o6R5W5ELGwR3B2h6x2h6h3B6Oj-f+GIwAQQcX5G5v5x3xV
+VvhN3DHC1o1gvDECIo2RB6qxBB2HIF2p37RFGHJLX3RKiDJIJp3BBFHHIF2opFRV
+Vvh74HFFoo2ZACngx+sHGF2pboEk0xE0iCE5loTzVtRPFK2o2ZAGYd9GiB9KIh7V
+VvhGpZ9GYd9GIl6HEoB9ZHPtIqor3ph5G1+M32AQQcX5Gbv5x3xN3DHC1o2cvH1V
+VvhZB-5HFFjHHF3ooFBFGLIIYpJslLJfXpJ3RFHHIIop2FBBIFYN4F-EIFoAK2YV
+VvhZ03V6vAFRR+l3YoYIr4r2b5KBVpXIRQo9LbLyBZhh51+F369llsV5m1y5ZpBV
+VvhJLDIG2oYZB-8HEsodQGYl8L2dB-7HFG2oYNBHBJ59JFnpC76DHG2oSF6LFG3V
+VvhQJGJMKKJIFoKEmqpEA+yIkXXY-YK6ToTdZ4GIW7mZ4CXMfBHga9E3S6x+JDKV
+VvhHJLITHfEj9o8oqpIpXpjEyAR2o9E7GkZCnJN7WAZ8-Ndk0VI0ssv6FkTyVshV
+VvhoYR5EWZ76Gd79l4YguGmsfGltPHOtIqiJBdBdhDJYAUiJEk++W6R6DYSoIh3V
+VvhlMxB+dtIoFbZHF4SJB2OsXoFgx+QGloHgR2u5HC-pHIhVhD6EZMA++6W5m1uV
+Vvh5geHPGJYp0Xop-ZR6PHF8ooFnoo-o3gR795Gx85HGFp3URLoQRPoMRRI5Nx1V
+Vvh5Ox05PPRLRxBvn+E5L16QZQEQQcj901u5gL4YplfJJo2o0VB-B+cHEHE4IlRV
+Vvh+NH3kOGqkOGl3O4pcGGVnoYHGFoDG-F65FFlJ55GFlJK5GJFR35IFFR35Ix2V
+Vvh42ERLoANElpY6OIFpp2PEFq3lhVQLNHELNHEHODFHODG9Q9G9Q5H5J1+HpUAV
+Vvh++6W6Vzz5aleZtPEKnooghF95KGFpoURVK5OFFqpAhl15RIFrzI-3+2TLT2JV
+VvhrFBBkIHP7IqVNBYLLL4IpVdREfHI53oVoIo1oJdgNvX1m23N1++06W+TyVv8V
+VvhcqoZRBEdLH4ooVlR+h-B+R3P5HGVp3UhFM5KFlppIRZ29NIlqo6RlhtRvWHTV
+VvhDTt2rnrorpqR5F1+EZc7llsQ4Vzx5apqKYQwFXl592UQG0l652YPGVdRVBVBV
+VvhXoq2q2qDHMHMGlZA4IgNH-VB+LL0RB+LHE7Yo1JQFIhJq31+9426++6L3-HxV
+Vvh2pWmMdFWV4BnQxHWD6ZHBoMqFXN5BS76B3R2JV2n2YEGEFJYEw+oMUXXY-YHV
+Vvh6DgTIx-h7BDnoiIx6xAnK12YBYQpwtAncnt1dD2uEXcnCIAtB1UoAFMp6lEqV
+Vvh3JXE6KA555AI2-Hw2rRnIZBIAqEXQmH1nXHCAxGV6t30UK7GVa1+AKE6st+NV
+Vvh301w5xEx3hBDp1tRAxAuIXUZ2HMrFHV2CXB7B1cnsocnt1cpC2MbG0EVG3BlV
+Vvhk0FZ-lln3-2IzFC3YoBXMoBnAtAIYlCbyhjEsnoIgGCVEd3XIdNUk0Fa-CCEV
+Vvh1VAUzVzEHE6mgXGGF6B1YhDYDGCwnXDGtHoiIx6xBAi+k27b0++03lUT+-HLV
+VvhCpEH41EV2mQpB-QqGYQuBobWFocqGnMwF1o-7h5lqGqHqQnFjFUfFWoGIh6YV
+VvhsWomIh2b90YrDEaUk0pc0CCE4FIUzVy1oap2pTDItHp1pHBOAVEsAFIsFmUsV
+Vvh7oQrt1UqtHUqC1R5Eu8Eo-dd-5561+gTzltnTpN662kpNoXnTZByIrC2GG1+V
+Vvh84c2st+C2WU15h2x5po2oW-iCroIojDFtHoSIx5ZDFBmMqFGR28GEfOUk1lfV
+Vvh05584-MUzVy1oqpIpjDJtHpHpXK4BoUr8XMfBVgp5EB-oHAh2mDFAJo1AwB1V
+VvhnnIvBIcqCXN6C1V4J7C0o-Vg-5561+gUzly1JbHsDZQrtHTZByIrC2GVo1-hV
+Vvh1JJM7W6IzVBXFLJq6Y70EcEFMm3XV66FUcCHYbG2Urt1YtBiItCHMtCHR6G2V
+VvhCWceo07i0CCE4FIIzVBXBLMVErEFIsFmUs7oQrt1UqtHUqC1R5Eu8R+ZPkU+V
+Vvh+VQI3DoHVgB1Us7XcYwvAXmCD5z22wAXh0GXEtBXQsBHhd1+B5+6st+N4-o+V
+Vvh2sApdV71h5CXV7CHUuCCEuHqCYQuC1Z6CHYsCH2KCX6ICnBR1WDLsnpop8oEV
+Vvhk17l05564-6Rz-C2IKAm6YBV6XC276HlGH5XGX5WCX77AYV1C2EbFWEVBpAxV
+Vvh9WDFsnoIiV1E5L64F2MG2FHy2qAnJV6XJHFYB4BGNBt1rZDH+EGfMB+eQkNDV
+VvhdV6D3DsHRG3GIo40Ac6mYGC-AxGsW7T26NAj4W6d6WUWC-AV3GEHNR+SR+MsV
+VvhtF6B5DkPUPsVgeCIV4rXEttHYusnIIwo3WAMFR+UREXXY-YG3DgHAsAKJXFoV
+VvhHnUntHUnsnUowrF1N47F34Mbm0pq05584-IIz-CJQoYpCWMu41YMC-bnQOFFV
+Vvhkp5DB-o1AR6m5GAFopoop1pWpVo+m2Zr0ssv6FsIz-CGV57KG1Is8GMs8FQsV
+VvhC-QsBlYqFlYq2GMOBF6a4XIGB-go2nEQAWAn5EAVEn5EAGIW5FAFMW5Fx5HHV
+Vvh81p0YhEO5A+nS+VlmVUM3DwHCIVYR8Bmkr5FBFoXEhAm9IAGpjHMDL2HpF6xV
+VvhEIDG3HoFQw7ngdC3RJVN6A+zSEVlmVUN5E+HGJRoYtCWcu51UgC-oDBloIIRV
+VvhAp5Hwo5IAlpX6RMl5LLLHMDO9OwRflqVonEh725HElp1ARNRMA+fSUQQQlEHV
+Vvh3DwHLFIrFFYp81MMBlQr3noXojDGDGDGBlQs3XYJwt3HYYC1HGH+6++8++6QV
+Vvh4lzy5ZqNKIyYgdH0t7HE5ZVBbZHNtIqIqZpB9A-F+EpJK0MV6DsTq0+Fwk23V
+VvhrarV3BoGLP2pqlFBcJLM3Zq-RBQMLJ4JpFdBEPLG53oVo2oFoJkR7Q5HGlp3V
+VvhYRJN5KG-ppMRVK5NFFqZARhH+F61EA-H+UllmWAR6TgToLpYIxAsDEGXhACIV
+Vvho2RB34xBB2LHF2p37RFGHJLlJ-UILlJ8GYd35pEM333RJFLIIop3BBF2HHJ2V
+VvhooNB35HEGIkvCno1VB73DKTFk2210lln6-kUzVzJ5S9QwxjoqZqaqD2Ypz2oV
+VvhpVFBMILI3Jp-NBDlRB9lVB2NLE4Ynlh9wQGVo3YR365GFnoINB-XWA1+7kE8V
+VvheeoS5Vzy5ZshlFqGEhYJwRcEQz5G5EshHD5G28zW5O3FqGHWr30k7EIA++6WV
+Vvh6Vzy5ZoNKokzGokiJ9H0tIhA9ZGokiJ9H0GokpdNkHkJk2A40ssv6FsTzFtRV
+VvhlYoZNRArHI7pomVBAjVRATZR6TdRrprIrJrHrWrlrlrloVkR6Q5H4Wp-YRIcV
+Vvh5K4-pWQRMq5INRhRlQ+k-kllmWAQ6DYTFQJMW1de4pgGN2FG2MAnUdAXYe6XV
+VvhYTgVDNxRfYHOtIqiJBdBhRHHcA-60+iCCm2P5zgSXHoqqTHNxBWBB-EIh1EoV
+VvhUpF2J3FIFJFYB4FY9WJYOaFZ74FZ74FYB4FJF3FIMpF2UnF1h-EIosqC7BZBV
+VvhdRDHUA+y0EllmWAQ5zYSTHp4qjHOH3R5IYN4FC74FILYFIJ4FIF5x2FIR2F2V
+VvhV2F1coEod1EnkmEYob2xNxbWHOHPLIouk3680ssv6FsUzFzFXLBXoncwGodBV
+Vvh-6LEG2oYNR73LHFTLHLWBRBILHFYoZPooYRB37HECYkwD1kvDF8moWcd3WcaV
+Vvh2VQO3VAa4FQI3VYK76a3W7K6VR+nA+U++VQH5zkRZfB0Yb7nQpCGItDnCX77V
+VvhEXdCEIeCGY38AYZ0CY9ncnCHIdBHQr7XUoCqYA+NAEU++VQD5jkRkgCKJ0DCV
+VvhEvtHjZCyIvD2LG1+Cn66++6L3Vvy5OTE7IcMG-d4wPFIZTFMJ2Z48Yp3p2p2V
+VvhpHpHpHpHpHpHpGpWpWpWcM8lQQ3lo-PHLHLIIA+uAkU++VQI5zoRZv7IUMFVV
+Vvhd3C2F6HoFpzGHGHHDHDHDELKDJDIHHLHHGJ0ZHG39pVGGIAPFFcr41YYH4b+V
+VvhCHE6++6L3-vy5RHmp1onoooV2x2VDF2Xo-Aw2nkICmEv3HcKCFQs3nUMBmUrV
+Vvh4HMOBFgopyH1onp2n-1+BXI6++6L3-zx5L8GT5m8eAsVpS6RMHKl2YCGQr8GV
+VvhQODIDIso6uEZZ0GY6vAll24nIOBlUt71o3f+DHM6++6L2lzw5QKnIN8-QbBWV
+VvhR3BoEt72oXoYoXoYBLEVEpEFMoK0DpYmsod-GI9nd0CXAtF0YpBnQb8GEwKEV
+Vvhk1Ar0++03lATyFoVpREREhAlo-Ag3-o-EQ5I5I5I5IwREREhDmonomozDGHGV
+Vvhwx9WHFsYomoUo1ss0++03lETzFqakZCFYb4WMQ9WEg70gZCWJL7aIcQGiBTNV
+VvhYXRmNK4JEeEmkn9G9W6-+W6-+H9FIf7WYN7Wld1+D1Y6++6L2lzw5NOnEd7mV
+VvhQcBHUoCWDocmGIslGYwIZGCIAsJ1MFFGIGFpAx9ooXoXIdB2QpFmMr7lUd3HV
+Vvhhf1+JWE6++6L2mLw6R+RERBQ6V6c7-EK7FIJ3VII7FMI3VEzAa2oAa30Ep4XV
+VvhEPEllwatmB-w2nkHGlEo3VEnBFEmx23GAL3GAL3FIK30IK2mQI2mYH2WhhDWV
+Vvh4w-a7UllmWAU6joUo2rWARkY5P7VqHMRYb5MsXMRYp5OB-qnARkm5RAFacHEV
+VvhGnoHkx2h-B+R+FD-o-6v5E2ocQ71YQ7HUQBXMQBnMPG1EQG1AR-7AFoIZ92oV
+Vvhcu3Hd73IQWBlQp7HEeOJUB+bDkSCClIC6DYTJa7HAMAFYlBrxY2bGXcuCXgfV
+Vvh9-kgwQsl-H8oZOGXcB+bDUSCClIC6DsKcfGJd8A3DX5D50kQwf8md8CYQVFbV
+VvhO5AHUGBmAZ7aIB+I2+Flm+k73DwHMnNIxXtJBSIpBY8Eo-oF-CCE1V+R+lDHV
+VvhZwHxDZkwtHnZD1IaB2IZF0QY8KX+D-Y6++AL3G1y5wPF70gpCWN6BYsbBoQrV
+VvhC1N6BXUqBaB9BWcqCTBnTWCHPWCIsoCIIsFX6YBX70BnAWBKF51+DVc9XXgVV
+Vvh5VHx2pW3Ub71EZFm6aB2RM71VMDx37Dx2uCBZJExB59HG0oYYh37HEGIgFG0V
+Vvh2e2YQX8-F2BGIbSJMB+w4kllmWAU3DoHVdKXEaB0Ms6mMoCG6c6nhMAXh7AHV
+Vvhl7TwCbk-P1rWD1+ECpp8Kl6t6WcIBmEc3XEq7GZeJg-45+U++VQI5DoLpVpFV
+VvhpFpGdW4HEt7nQcFGUG71QH71QHAXQIAXMJAXIZAXIKAWIKAz7-Qn6lQoAFUaV
+Vvh6FQbBmYp8G3f5J5JwRP+OFoCQQcd7lzy5h9PpV3NHxIHGmp-BA9I2oo-zH32V
+Vvho-zG3Io-oFJBwZFlplN55K3oQRMLFWpFV3DJpxIMFWpFV55I4IQRENFlQM4YV
+VvhQK4FZB6M4YoVQeHF4-hB2L52o0QQH0QfH1JOGZCJq21+PlsECCMi805u5x3UV
+Vvh2YLLcsGoV7H1R8HE7Ygx2ZH1oVFQDG32o1oVBR+x6HHFCVEGLECVVB2u3poHV
+VvhYbLFC1RR5FRR2sBiBR2u3poHp-3B2xAGHEDI2ZkxEGL1olFADH32kx6ZGYoGV
+VvhR7DFC1VAKILMlxn+PVwAQQcX5GDv6BwR3q51Mn50cV4nkuDECHoIQx2FBXoFV
+VvhApDE6nEx2IB1o-J0H-N0D-R-GmR-GlV-GVZ-GFe74Y368Y364o35523452ApV
+Vvh5EEnEh+oB-o2En5FBX2R2rHFCHo1ggCl2tClAqD-Nx2hs8+Q6EFlm+o86TkUV
+VvhMqspsZFi6qFiArsmXW5S7oJKFXOU5Hk2QQUB0G5x3a7YFJFHqC6LsWPWBWPXV
+VvhBSB2sZF47f--6kpJK0MV8TkTllYQbmUgXW80mD80mC6c96sWUgUc8x2xDWgcV
+Vvh96smUgUc9+onoOsWUgXmUgXW80mC6c96wc974Flkk5YZ1JJM7VsZyW3opFIYV
+Vvh5H70Ih2Z7Wgp7l2b6GEr2r6ZBlga8-caC-Ybws40Us3mYr3mcr3Wka3Wo0ILV
+Vvh9F6lQhB59S7oomQX5F7XER2a7Vka7lgaBlcbBlYc8-XmUs3mYs3Wcs3Ggr3GV
+Vvhkr3Gkq3GoGMI9G7FEhEX3FpYMC+J7kFlm+o51jUTCDbnwu0-+UUEEEEE+A+tV
+Vvh8+MstF6E9jkVoGo-oFoFoFoGo0o0oFoGoD9Ewh+x1mo1oD9Ewx1X9EtHoSEhV
+Vvh9moVoWoVoWoVololUA+i8EMstF6D9jwVUR2h2h2R2h5moS6h+yfE9WkzkgDDV
+Vvh91nmnmnmkh+R+g90kg90kR5+8Gc6++6L2VHu6O5HsmUp716o31Im2XUl2GnoV
+VvhkV2HUm2XIo316p3HXX9H4g+S8kllmWAP6DgOolrCEhjZ9PsWk0bE9PtGqyIhV
+VvhghoR6C+J9+Flm+o51jo255rvwu-+UUEE666M+C+A9UFlm+o3-Tk2Azvr+A+rV
+Vvh9kU++VQK9TsVq-zL9xMhPmpj9KwhPmpj9KwhPmpj9KwhPmpj9KwhPmpi6hPmV
+Vvhpj9KwhPmpj9L5M0+2nc2QQUB0-Hw2oBDIoIhgZEpF2B+o-cv-5561EYRzFBHV
+VvhLpF4642aFDJIXlTlTlQL3lX+21oAQQcX5Unw21rHrksxwxokg3p+15586loUV
+Vvhylz0T5Bmkmk-kFklgQIN553lV63VQY7lIK7VQI3WUL2VMsF-wVItBFsl3HcpV
+Vvh9WMeBF2KCHIG3HYo2lMcF-AKBV2n3-QY6X6Z42J55F5F55BmkYgcL2ako-dPV
+Vvh-5561EwhzW45Rst0nZ9CIgtGnZ9CIgtGnrXE4Zo2QQUB1mo-6MRrrY9CIgtGV
+VvhnZ9CIgtGnZ7zSB+JM+Flm+o51jYTIY3FLlLlLlMFAi7HAxUD2UU++VQ50DMTV
+VvhwoF2EpBGMh+F2kU++VQ70DATQaBIEpBHIa7ku+wI0++03kc3xFm+qCRUw-U+V
+Vvhq-AJ0++03kk6xVzlcdG-6L6WEoRYIAU73UU++VQE+TYOoy+E3knkBWI60CoUV
+VvhD28-UM40VbXE2FU555AI0kbwzZC2YtsXQmUVcB+C6+Flm+o9-ToFYb7XMb8EV
+Vvhs-3S0++03kc5xVw0+M1kNX0E4+H+13w2QQUB-ELs5W6h2H5U3Lo6++6L1EXqV
+Vvh5lUNkQsCsCM4A1A12-1U1rs6++6L1UHr5Fk3z4kz651E25w6++6L1ELr5W7WV
+Vvh72bnIHIlk35+1++06VsfzWfGwxtBtBsxwxwU20-c2-+hvnrTHQPO6IqV7BYWV
+VvhHN2oq0BBUILKwKHJwLHI42p-ZB9ldB5HoFhB+QL-o2jloIfloYYh7KLFJ7XEV
+Vvhk39-1++06VsfzWfQ9SDRHQDRDRDR9S64cE20rjDRxBlhcVHO2YqG7BYHHM6oV
+Vvhq-FRPlNBLlRBEMHI4Ioj4YoRDF4oo-lQ5EGz5FGj5GGGoZNR3IaB+A-IkUk+V
+Vvh+W6S8zseq-rmrYr06hcY5N3lplUEUl+E9Swxror4qW3BcGHN6YqFBBUXHM33V
+Vvhpj3YpT3op-VBENHGwOHFox2PHE53kR-9wR38wR779GJZoJGMoA-Ekkk++W6SV
+Vvh8Dsbp1QRFn9I74pFMkV-+E9Swxror4qW3BcGHN6YqFBBUXHM33pj3YpT3op-V
+VvhVBENHGwOHFox2PHE53kR-9wR38wR779GJZoJGMo+k3121++06VsdzWXH7WpYV
+VvhFBHpBRIpA66E20rjDRxBlhcVHO2YqG7BYHHM6oq-FRPlNBLlRBEMHI4Ioj4YV
+VvhoRDF4oo-lQ5EGz5FGj5GGGoZNR3IaB1+JAIA++6W5Wny8xNBkI5OsVMRYJ5OV
+Vvh30qo042-+hvnrTHQPO6IqV7BYWHN2oq0BBUILKwKHJwLHI42p-ZB9ldB5HoFV
+VvhhB+QL-o2jloIfloYYh7KLFJ7XE1+OQMCQQcd7lzy5h9PpV3NHxIHGmp-BA9IV
+Vvh2oo-zH32o-zG3Io-oFJBwZFlplN55K3oQRMLFWpFV3DJpxIMFWpFV55I4IQRV
+VvhENFlQM4YQK4FZB6M4YoVQeHF4-hB2L52o0QQH0QfH1JOGZCJq21+IAQ9XXgVV
+Vvh5Gfv5x7b51MY8XcGCHlLHFFYoXPop0JBIYLJ72pWBRMIHPspqiFRlBQIxBMKV
+VvhHJ3Yp-UxAODG4mo0o0gRAqDLPODRHSDSsXr1psplqg-7m+fXY-wR8zseoTDRV
+VvhHRHRDSDS9T65HPZPGYkuHE8IoGstHG4IQL5WV55IFWpAp2IxDXFlp2p-RBALV
+VvhxBELxBAMHG82oGVB2sH3DQH+GgY8st+T5Gjy8hghoxlBgxkxkxkhoURhiJh8V
+VvhH1dB+dHF9XZB6NFlQS82QRF49InIFHoyB55IHI3oolTop-ToolVB6cHF82oHV
+VvhVAIxlA-BmUfXY-wR8zseplrWrIqm6hYY5M3lpVUEXhiJh8H1dB+dHF9XZB6NV
+VvhFlQS82QRF49InIFHoyB55IHI3oolTop-ToolVB6cHF82oHVAIxl+k2b90iCEV
+Vvh5lodzWXG7WpIFBDpBREpA6rPZPGYkuHE8IoGstHG4IQL5WV55IFWpAp2IxDXV
+VvhFlp2p-RBALxBELxBAMHG82oGVB2sH3DQEA+bn+L55F+H8zweTnooooonp1p0V
+VvhpG-7oNLGxB5ZHFtIoSJB5ZHFHGKR3Q+dnEL55F+H8zwep0onoYoHoXoXoWomV
+Vvh-9oNLGxB5ZHFtIoSJB5ZHFHGKR3Ek0fC-QQR2-AfzmfE5I9HHF6WkY4lQN4-V
+Vvh-NoNLGxB5ZHFtIoSJB5ZHFHGKR3Ek0LD-QQR2-AdzmW0McF2xZBLBH-MoNLGV
+VvhxB5ZHFtIoSJB5ZHFHGKR3Q+yo+kstWAU5zsSLKp3ZB78HFGonoo2jWHFGYoJV
+Vvht6HGIxC3RBB6sYoZVB77HFK2oYbooIdB-9H2l9H2hB-7GhPEk3TF1++06W6cV
+VvhzWTIBlq5AhUYPN3X0gaPdPLExQ9FwGGloj2ocR9lF75F3IUR9lN55GwLFVoVV
+VvhV35F4IER6NIloj4YAR9lh05FsVo3oj5FHF9GDF9G9FHG4fkOk3HG15586logV
+VvhymfEwxpBpBoxsxshwUMLpYIxAsDECngx+tHEFooXPoooFBF2HIIZp37BJSAJV
+VvhpOsxJFLIIop3BBF2HHJ3oYNB35HEGIkvCno1VB72HKTFk3LH15586logymfOV
+Vvh9RDQHPDQDQDQ9R64BxN3DHC1o1gvDECIo2RB6qxBB2HIF2p37RFGHJLX3RKiV
+VvhDJIJp3BBFHHIF2opFR74HFFoo2ZACngx+sHGF2pboQ-Mp+llmWAR9DgepFrWV
+VvhrIqm6hYY5M3lpVUET5pYIxAsDECngx+tHEFooXPoooFBF2HIIZp37BJSAJpOV
+VvhsxJFLIIop3BBF2HHJ3oYNB35HEGIkvCno1VB72HKTF1+IxIAQQcX5Gbv7x2rV
+Vvh5HQmomFhEKA5pxN3DHC1o1gvDECIo2RB6qxBB2HIF2p37RFGHJLX3RKiDJIJV
+Vvhp3BBFHHIF2opFR74HFFoo2ZACngx+sHGF2pboQ-IpUllmWAR8jgco0MhJ2HHV
+VvhxHLIBH-vTKFHonUx+vCno1ZB-5HGBjHHF2p2FBFGLIIYpJslLJfXpJ3RFHHIV
+VvhIop2FBBILGFYoIRB-7H1gvDEC2oYFBNx2A-iq+llmWAR6zgUrloLMQBXAQ8WV
+Vvh2PD1cx+tDFFnoF2qDF2nIx+XB1oFEoDE3I7A3Y6w3o397o3942384I374cYOV
+VvhEIUeEIUPEIQQEIMQEnIR-1B0o1Eo5EF1AR2qAFoHRB2tDECmkv2HYv2nMw3bV
+VvhoGrUk1fN1++06VogyGejDRHRHRDSDS9T65DFGoL3Xoo0bZHF4SJB2NtIoFfWV
+VvhDF4no-l95FCloHcRAs5JBGq4ow+wqUk++W6R9DYepmrHr2qnr1r1r0rG-poIV
+Vvhh3lMxB+dtIoFbZHF4SJB2OsXoFgx+QGloHgR2u5HC-pHIhVhAA+yqkk++W6RV
+Vvh9DYeolrWrIqm6hYY5M3lpVUEXR39FQKDHE8SJB2NtIoFbZHF4i6x2PDE52gRV
+Vvh2v5FCVonURIp9MPHk1fQ1++06VoeyGWmMhJ2HHxHLIBH0AoIh3lMxB+dtIoFV
+VvhbZHF4SJB2OsXoFgx+QGloHgR2u5HC-pHIhVhAA-DrEk++W6U8zceq0+EDTHSV
+VvhDTDTDT6-+UUweXPGJop0ZRAPHG53o0o2o-oJgRB85IK0p3URN55LJFqIEhZHV
+Vvh5PEVr4rZri7BwxzYHTDTHTLNoR5+ABs8++6Q4Fzy5ZoR7RXopzHMjFFIl4GoV
+VvhR7G2bYG3xoVMG2Z5GYN9FIjB1YHLHMLGoP1+QxwFlm+n9m5x5uNFo4IN7G6gV
+Vvh7G6b8IcdFXctCXMfCGgpCmYv7Wo-Yh+JsXo-Ux+JDNDKHMHJLLLITJTHfGfEV
+VvhjFj9oPo8oeoqpapIq2pXqHpjHMEyAR2r5FB0o0Uh+Z90Yg7HgsCnJN8JYa6mV
+VvhIf6mIc3akKOEk2mM1++06W+dyWX0MhV2HKxHLLBH0RmeBh7LHI8JolhB6QLEV
+Vvh9EHE5FKloocRFM9IK-pYQRRJ5NF0qJARh05QPSLSsYrnryFBwxxBxRbFoQ+sV
+Vvhs+U++VQI6DoTTnp2p2p1pHpGpW-CWmMdFWV4BnQxHWD6ZHBoMqFXN5BS76B3V
+VvhR2JV2n2YEGEFJYEkk1bV0++03lEUzFzI9IDHHGDHDHDH9I63097WZ482MrBnV
+VvhpC6wWJArFXN4BYQpsYUoJoFK2HAGF-7-3KF1k1jW0++03lETzFvE5J9IHG6WV
+Vvho0EQ3lcM22i97WZ482MrBnpC6wWJArFXN4BYQpsYUoJoFK2HAGF-7-3KF11+V
+VvhBSA6++6L3-nx4tBlRn7mFc3X-AWmMdFWV4BnQxHWD6ZHBoMqFXN5BS76B3R2V
+VvhJV2n2YEGEFJYEw+qt+U++VQI5ToQUa8IF5xHK1IkGcga8IMcFXQrDIsXm7InV
+VvhR4BYMqFnLWG1FLF3MFAl722Y2JN2AA+utEU++VQI6ToUdB6I5EsVMQ3Fo-EhV
+Vvh3+Msga8IMcFXQrDIsXm7InR4BYMqFnLWG1FLF3MFAl722Y2JN2D+DiM9XXgVV
+Vvh5VHx2pW3Ub71EZFm6aB2RM71VMDx37Dx2uCBZJExB59HG0oYYh37HEGIgFG0V
+Vvh2e2YQX8-F2BGIbSJMA+itkQQQlEF5joHVsBGMpF1N1BnBB+x1XHEsnoIcHCFV
+VvhIc3mIdPTDFHGDGsXo1W65H1+9yU555AI2G1x5pwx3B3B2x6x6hAUF3YoBXMoV
+VvhBnAtAIYlCbyhjEsnoIgGCVEd3XIdNh+kuEQQQlEF6DoT+F6-+xH1oxDG+E63V
+VvhJNB1MqB1QnCH37AHdzc-fSAk22gGCVEd3XIdNg+luUQQQlEF5zoSgR6h3A6WV
+VvhcY4FQL4---KHEqBXErAnYlGH2uTuqx1XDFGl6u30YKBGZa1+9Sg555AI2FrxV
+Vvh547WN2HoIpIpA2-NB1MqB1QnCH37AHdzfPoCAx392XcI8FMp8KOU5Ck2QQUBV
+Vvh0m1z5owsG2UtCGchQpNoXnTZByIrC2GGo-vh-5561F+Uzlw-+hD2gwD1kh62V
+VvhwuP2rnnZDCIwDIaLo01i-5561EsTzluVkfGG6b7-ML3-UEE1VeGzCiIutHcvV
+VvhFtLE5iw2QQUB2-rz537WJ2HnIpEpA2YuP2rnnZDCIwDIaL1+DD+6++6L301xV
+Vvh5qF-dl4eYKK-RK4-3B+HHIDJwxIhIsMnMoAHEsIndD6vEHmCD5z22wAXh0GXV
+VvhEtBXQsBHhd1E9D26st+N3Vny4vBlZn8GFe3X-YApVW31V-3HZ58HUcFnXYC1V
+VvhTZC1QsC2R2cd2A+kwUU++VQI6DoTTnp2p2p1pHpGpW-FP1EsC0Mu7DCn6wXXV
+Vvhlzl-D16vEYcoCHMrC1IvOQ+mwkU++VQI6DoTp0p1oooXononomp0-HP1EsC0V
+VvhMu7DCn6wXXlzl-D16vEYcoCHMrC1IvOEk1Do0++03lETzFvE5J9IHG6Wo0EQV
+Vvh3lcM22tgB1Us7XcYwvAXmCD5z22wAXh0GXEtBXQsBHhdo0vp0++03lEQzFiHV
+VvhQLQmQYO-MkLakoC1UaCWHngmD6swTwEHkmCo78B1YqBnUpCqYB+ixUU++VQIV
+Vvh5ToQUa8IF5xHK1IkL4koC1UaCWHngmD6swTwEHkmCo78B1YqBnUpCqb+FjU6V
+Vvh++6L3-nx3xMRIRIRIeMVYoCGQr82Ic2WEr2mEr2n6r316q3H6p7H6p3X6Z3XV
+VvhDmELAmALB12M7W2L7nQdBGYVOlpFpT5KU0jt0CCE4F6UylxjCKGKGKCLCL8MV
+Vvh9LC13ZMoR2wsAyIsAyAsBDBoEqFWIFFa7s+hyUXXY-YG6DgTZmZXZIZ1ZHZHV
+VvhZGZWqHUlNKB5FDC1DZC1DXC1HnR2BYMZ2INWQA+iykXXY-YG5zgSkRAh7B+WV
+Vvh8mEO3lUM22+sAKJXFoHnUntHUnsnUowrF1N47F34Mb0+8Tk6st+N2Vrv557WV
+VvhR2HpIpMpDHC13ZMoR2wsAyIsAyAsBDBoEqFWIFFa7w-AzEVlmVUN8E+TpmqHV
+Vvhq2pnq1q1q0qG-ZZLR7CHceCVks91UR1nQR335HBFozB-p1ARMm5KAFpppoq1V
+VvhqWqj5OwRcRAo9GF-ooAREn5KLK1+Dzs6st+N4Gc-5vDKPMHNwxXZDMDNApoHV
+Vvh2YD2QvwtCHctt1dDQuG1ctCIYtCXUuAFMvAVEwApoS6xXWDMxBKx0x5+DDw6V
+Vvh++AL3G1y5wPF70gpCWN6BYsbBoQrC1N6BXUqBaB9BWcqCTBnTWCHPWCIsoCIV
+VvhIsFX6YBX70BnAWBKF51+GPU6QQcM4GM+597WoIFAxHLEBH-TZLR7CHceCVksV
+Vvh91UR1nQR335HBFozB-p1ARMm5KAFpppoq1qWqj5OwRcRAo9GF-ooAREn5KLKV
+Vvho-nL-lln3+gIyVGVYc80Uc80UbBzCHYewe8WcO8VAB+QxkQQQlEB3DkIAR5FV
+VvhoQ90kg8njnYt8Wcd8Wce8Vn+B+g7JJUP601y5x3ZLEFG2n8nR2GHR3G1V3CHV
+VvhYhHYCHonYwrAsnYxDZCHoyItDHCHp2VB0HiEk0YA0CCE4FMUzVzFLFBGgq8XV
+VvhN6BoUrCCExIx5KXXC1TZC1TZC1QsC2R2V75+8ko6st+N3W1y5x3V4nIuBIYqV
+VvhG1R6BnXYC1QsAxOCAsByIsByIsBnUsFoGGcEk1YC1JJM7WAUzVzFNaoIIGFFV
+VvhkrJmcrJoUrK2UsG1XYCHpXYx6-CCAtCHTZCHYrtHYtBnYtC2V6F7CHcEg1cDV
+Vvh1JJM7WAUzVz0Nb2PFG33CXNaGHRLG1V6G1V6CCEtCHQtCHDIXXCHYrtHYtByV
+VvhItCHQtCHV6G2GHYu2B+V6UU++VQE1jcT6qAzJ37XMX2IAFsZ4-LlUJ4-IM3FV
+VvhUJ4-MAU79EJJJUw8+jo8px+TL+U++VQE1jQTIb7-UJ4-LlUJwM3T4-MFB-2mV
+VvhsZFHBXD60Lg6++6L3U5y1Bac0LkE++Ah9+5y1B5k1qZYNKtoOKNdNL6UJ2pHV
+VvhHD+JMqxYOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoNa3XNK7tR4Lo+Cc++DLqV
+Vv+V
+Vvend
+Vvbytecount 10980
+Vvcrc32 96c8c870
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.360pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.360pk_vve
new file mode 100644
index 0000000000..f4ce13d90c
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.360pk_vve
@@ -0,0 +1,295 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.360pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX2s+8+++C2v0Uk+-Dgr++HvBv-BEEk++WIV6zsWmFp0ojDFV
+VvhxB-gsVHC2YnG7AoHHA6on-FQflNAblRAUMH64Ilj4YlFhAL2lAL25-H0wQ7AV
+Vvh5lkok-l3gQJ893G3kpKdn7kFk2V00pJM6m+WzW3RahjEGplAKzHEKYoIyIoYV
+VvhyIoJZB-OHEGYo2h9L2ZR5JoIhQH3fooJZB77sYoZRBB6xB7MHFKIo3dAKZdaV
+Vvhr5qOk3-10ssv70+YyW9HS-oAIfNXAeKm2tHFK2ooRBF4HKBIpmJRQZHN33qFV
+VvhFBcHLO2prSJRvoroqVFRYIxRUKHM3ZpVVBIOHH8ooGo2kh7LDJoBZx9+F2EAV
+VvhCCMa6m9y6JqR1PoohR7B-B3B3B1ooYjop2fXHILZVBJLHKGDHJK2pIZBFNHIV
+VvhGIp3ZBF8HHGooYlB3B-ALEKabPjMoQ-4FEfXY06V6jsVLxyYo3hB6vxBAfHIV
+Vvh4jHJ4i774-d69JGFpYQxPx5KFnpYUhLoYRPoYO4DHK42plXopVZBIdHI8YonV
+VvhZR-YzTL+BYM8QQcV6G9y6JzTdB-PHGCzHH8op-fWHJ4jGFUOG0pTGFpYQxPxV
+Vvh5KFnpSF75KHTtIrpqhDIohL+IoQAXXgb60Hu6hBs5ElGhaAmdP6HZB3MHHFoV
+Vvhp2NBMpHL7JpmJBYILN32qVBRcHLRtJrjHFpRR2xRN2LJFYpINRF5HIG2oZZBV
+Vvh3OH-6gNXAh1EIRBx6A+jG+k++WIa6jsVLx6x8Zo3oiBB3B9ZHFHGxB3BDxbHV
+VvhxB3B9ZHFHGtIoIoZo3fx3B3Uk-p7-QQR2VEWzW3ToeLGsooiJB9ZHGtIoiJBV
+Vvh7OoZoK1+82c6CCIO40Dx6OzFtBBBPZHKtIpiJ782ZKGDNYVZGJN74IgMDE71V
+Vvhp3oUk4N915587mQWzW3R89LGWfLGLFHH9IHH5JHG5KHE9KHE5MH-qIgRd85PV
+VvhGFr2QRp59RFYr2JRl22Yqo6XHPEFNBZ-3oqJVRV8HMGZpohBR9LJHEHJHELIV
+VvhHFHIHFLHHGHHHGLFLGODoMlEk0xA0U+05lkWzW3ToxFRfXHOtIqiJBfoqzHHV
+Vvh3ooWRB6LHH3zHG7ooGVB+sH2ROMjr11+TIoCeeoi9m9y6JbOdNqPcFDMPGwFV
+VvhDL2Iol2xMGHH2XpF7B6HDI2Yoz2nolBBAHDG32olEx2IHH31o-JB6JDE32olV
+VvhIw3IolMv3Ioz3XcKHH3XYLHG3nULHH41QLHHwMBVVBDlUp4Ioj4XANHHwOAVV
+VvhdBAPGooWgwHFGXhOyr7x3g-KHUk++WIa6jsVLuj8PFHF2IoVol3R2RDl7B2RV
+Vvh9lFA5HwJGloz3YcR9lV65HwNFloz4YMR9ll25H53ARDlo2ARAR305G5GEFozV
+Vvh5HLHwRFB6hIx3BEfyx6Pk2tD15587m+YyW9GTNFIp2ZB2wH1oIZBAsHIFnpYV
+VvhJBN2HLF2ppwYq3wJq8tBahVFxBZFxBVGLLEppZFBN3HJFoooVB78HEH1lB37V
+VvhDJBXqMoUk1FE0iCE6W+WzW3RWxfFGalAKoo2joo3stHFKIoIdB-NHFGYo2hAV
+VvhH2dR1IoYriJBvZHSLNzFpQ-bIEllmWQU9TcWobqIJBF7HFD2kx37HHC2p2RBV
+VvhJ3HKF2poFBRGLLIYq3wJq8tBaS9NITHMIYq2BRNIHKFIR5FnMI3IV23VEuElV
+VvhMWD16LPFAVNBJ3G-ms5LC-pnQRUq9MF1q8qdqcr4rYX+HZ69llsZ6mDy6JpxV
+Vvh9Op2dRBAHGHEHFxB-QsooJlB-R-B-B-B-B3AHGGJpB9LG1pochJ9DIxADHsYV
+VvhlB5XH3oIlL3YlK3ZlK2R4JEGoOEmrpH+G3A6st+Q4WHx6gNleY82Mm81dM9EV
+VvhBmoHPnoWLWDH3jHNLNPLfInGoB9BKRVRZBfWFFooHlp1IhAp9H7WoXMx+qKnV
+VvhQlFYUXmFRv1+AJE9XXgY609u6H+E6-2YZ6Emh86ll92Wl92Vo2gGwQH-5W5EV
+VvhH-oYriJBvZHStIrZpzpPm1BJ1++07G2XyG5x7gJR77sop-fZHI4iJBEOt2p-V
+VvhjWHH52oVo2oGoHoFoYkREu9KFXq9r4pEi2tK1++07GAXyW50j9k8FQN7H58YV
+VvhllhAMQ3AIQ5ol-kYklkokWl2kFlTH+54x956x757x658Fln2MQl35BF0nIEQV
+Vvht15EEVoDEFoTLHwxHmmUm6xL2558An2XyW5EPEPPP5h3o3oIVR3B6exB3B6PV
+VvhHFHF52o4o-lB+FH-o2kGH-o3gGGloYcHGloYcHGVooYIGVooYIK-p2UZG-p2V
+VvhUKFlpYQKFlpjFVR45LFFV39LFFZ25MF-d25MF-d15OEVh15OEVh05PEFl05PV
+VvhEFl-5QLFLQLFHRHGHSDGDT9HDT9H6-+REhSkKZUA++6Z7G9z6Kkahg3vhfL2V
+VvhH-94H+96GlmIcQdM5AFlnJIgt35DIloI6R7hFBJRJBJRAFHG2Zo0BAwYLC3YV
+VvhnFRAkNH84YmGdQUQ-AQQ3QIQBAEgBQ3Q7Mz+b-CsFZYA++6Z6m9u6TkQ0ZL3V
+VvhGJlGk2lFkIl-kZklkokVl3k-lYgQRO56GFmIUQdK5AFGn3EQt15DIFo5oJoiV
+VvhBBAxDYHHDHLBz0l+k2tO0QQS5VoWzG3xZhZqhLHEG0oIUh379EGVoIcR-85EV
+VvhGllA4pqoqoqoqpqoqoqoqor2gQH-hB+OHE8Jo-dB2NHF82oWRR2cHFBooINAV
+VvhRTqak1-V0++04FMJzFFckqCJQcJnR780cxLnoMdIC2QrG1MtBYYpx8B3yIFMV
+Vvh2HAGFG7-3LJ1k1RW0CCE5-MXym7IoboapiExLZDJB4Ym7HQl4GN8BTD1DZDEV
+VvhHlDEEXo1AwEnko6FcoAFYp6mIr3aYA+aMkQQQlMG3TkIW6BHMaJ0RHBoAt6oV
+VvhoHoSFB2x7B3A2jClEs7XIeNkk1dY0CCE5-UXz09LHITIPMt1pyIvMnZ32XUsV
+Vvh2HQuFXkpDEB2kpDEBCBB+osXo1JABXh4CZQs2IUp6bRYQg+bNEQQQlMH3ToIV
+VvhZeBHQrBGcnCX6vAIglDBrXojDHHE2XkI9-Id7nIfNw+aNUHXY+wJ6zwWoYoWV
+VvhAgAogXKXBNBHfnpCIwzEoCAxHZDItHp2oDmEk2Vb0++04FcV+-LND4AW8HEVV
+Vvh2nUpB1QrDDFnjWFoh5DEBYoGMx2F70ol7hDW5Q9PoB1GjHUvJWomLmp0HmpGV
+VvhIREa9G80o0gcDGakk0hc0CCE5-YXzm8IpLpKqSExXZDMBKgn7Gcl7nbocsCnV
+VvhR8CCEvByIvBod1yngB+OOEFlm+sA6jwVYdHrK1-eBaJsGTCCIstHV2ylk0deV
+Vvh-CCE1l6g+m5G9GHx-R2kYHjroIojDFtHoSIx5ZDFBnIqJ1NHBoEd70hPk1xfV
+Vvh05584VcXzm8IpbpaqiExbZDNwrZnV9C0o1QR6q5GBGonERInDIAJp27BAoDGV
+VvhBIoHMx5nQx+sD1V8G3KncfCHo-Vg-5561UoXzm8INqOiEttHbZCSIttHZ3ymV
+Vvho1-h1JJM8WQJzlFnJcNrAZ7GIaQGQm7nVOGXV8GXUvCnR8GXXYCngrtHgvBoV
+Vvhd8EzgvCko0Bi0CCE5-YJzlFnJbQmIaQGQsKXV8C1grGXXYCnTZCnR8Ezgv1EV
+Vvh94w6++6N3VLx37THItC1QuBHknDH7BEH+EXX+ETk222k217AEnkoCnMtCHIxV
+VvhOg+nQ+XXY-kP5k+IUoOb6ZC52MCocuCoYwCCIx-DMx-5wwG1h7GXYl42cm7HV
+VvhkoPFsXqiExTupA+nQEVlm-cI5zkIVZ3XII3HQG71Z1CY6vHlGn5XH15XGnAuV
+VvhEnYFB1QFBXEWC3ExHWDHt1oDcQ+UQUN2FVEI3TwIQoJ5AHAr2XFY2IFoMcDHV
+VvhHHt1oyIxBAz6o0ln-Yya3-2JzVFr6J7nEd9n8WAf2mcIHMedaq+FAVgmwQ6WV
+VvhgH8W772m6K7-Fa1+5rE4CCIH1Fzw5csVgfwPweCIXOsoCSItt1MHwp3HAMF+V
+Vvho0Fp0CCE5-MJz-F1glxrR2d3wvBCIvBCAvBHd3CF2q8-34BG7pN5m0lq0558V
+Vvh4VQJz-HuNoCYMv4DCVfnUPBlkq9EBFoTB-oXARB05Iwl5JHKDM9M5F16H5Q9V
+VvhXXgY6VLw388YpGZ6F6G2TnYe4HV64XRM4XQFBlkp6WQQBFAa5EB-Ep5EB-EoV
+Vvh5FAlIn9FEVMX5HAFQW9HAFQl5Ix6HJCWpmchQP5Fk1Fs05584VcJzlEuK1d7V
+VvhR5H1UR2r5HBFpHARMm5MHNDPDNLL6HpWAxEYDH7XoVQx+dCYZ4y4cg-+SEVlV
+VvhmVcP5k+IHuNsCYcv5DCVoTC-oXQRAq9IBFpTB-pXARR05Mwl5NHODQ9QwRnlV
+Vvhr-p2ERFI5IIlpIARQI5NHM1+A5c555AK3FLz33opGHIeBGcq4XQNC-Us41p1V
+Vvhp1p1p1p1UMG-Ut3nYaCVMu7HcoCXHIH+7k+8++6T5m9y6JzRdAGoo1hB2fxBV
+Vvh6Ot2oldBrZHRtIrSJBpRXHoh9H0kK+2BJJUe7GDy6gjmpYpDLH2JoT2oo-FQV
+VvhsKHC3Zn-RQgNH94JmFdQUQ-AUQ-QMQ3QIQBAIQBQAQFQ6QNA6QNQ+QRP57GlV
+VvhmJYQh65AFmn3MQt35DF0npDK9L5Nk3k015587m+YyW9GTNFIp2ZB2wH1oIZBV
+VvhAsHIFopIJBN2HLF2pp7RRGHMIJq33H5-GY5-Gi7B38EQ37EQ335oqJ5oq37BV
+VvhV1LKJ2pYJBJ5DIG2ondB2wD2oHcxIqDNXG1+GUA955AX5mDy6hQE2GrzDSxBV
+VvhpRphjl7BflBBYIHN33plJRQKHKwLHJ42pFVRANLH4Yoj4ooT52o-o3kR39wRV
+Vvh785HGGooVB7IeBaR+A+e-+eefG2W6jsVPTxRxiARoEdloloj5H5HshLH5H5GV
+VvhwRAEdyARoK5Q7S9TM9+c-Ek++WIa6jsVLxKYkZkyBA7ADZH0H1tIkYkyJA7AV
+VvhDZH0H1L-KjkYka0kIUM9XXgY6W9x6Ko3oKL2NplnVQQdH58JlWdAQOL44olVV
+VvhhQIQ-AIQ-R7B7R7B7R7B6xERERERAgIQ2QQQ+QQQ+QUP568VmGYQYd57C-mIV
+VvhQQRqnqo4k1A515587m+Xy07JoJO9V8aWlv6aFYNMF2UuAoceAngTklDQxhrWV
+VvhLSt2riJBvZHSLMpB9Ho+k2Y60ssv7-oWyW4TpBJRjXHMfHEY3AF2EsFYIqFoV
+VvhJ2G2N0JoR0G2Si82ScFo3LFp3LFoB5FZB5FYJ4FHV3Eoh0EYotqiBBhRLInHV
+VvhYA-10EllmWQU6jYVbxHMLSsoo3Z7IYV6FIR6FS75FoLXFoR4x5FYR4FnYqFYV
+VvhZ3FXgpFHl2F1oHF1DIAI3BWBrXHSLMpB9Hn+L+c9XXgY6GDx6hCBZ4HIGXoXV
+Vvho2kx77LGGIp2RBJ4LJJIpZsoLKLoLJJJpINRFKLIGDHHGXoYgx6wDFDFDEDFV
+VvhD1omkd3mgb2VUP7lAL4lQI3lcM3-QO3lKOZNaZaNIB+qA+U++VYJ6jkUhRB1V
+Vvhcr81UqCWLngnGnwnkz7AAXlCEImCD23AAjGo9ognGXIuBHYqCGUr8XExOh+OV
+VvhAEU++VYD6TgUoQCZKZIXkvtHjZCyIvtHh3+Uk1wm0++04FUVzW14ofkpOFdLV
+Vvh52MR-JGosYOYFOJWhBRBPopYpYpYpYpXpnpnpmq0q0q0gN5E4-oFQR2K9G3RV
+VvhNDpZk1sn0++04FMWzG0ro8cqJmZJGIJMHoO2J7FWZRFBFBIxIxEx3xUxQxNBV
+VvhPWHJJ-lGKJ9qZGOIBNImhJ8YQqKPo5f+DHE6++6N3W5x6BIRQhMxLop-2xAFV
+VvhDH2XoVAx2XDE71o-Iw3HkKClQu41YcCFYs4HUOBlgq51M-zZkxJB1x+kk1wpV
+Vvh0++04FMWzG0-kMBoTFXEav2LoD5Lslq-Bg2GIt2FUs8WUPDKDKsoAwEZh-OYV
+Vvh7PEZgn5FF-o1IQBlcsBYih-fk26q0++04FMWz01EPFaoMdCFUrJXVJC3J7FHV
+VvhpIpHpIpIBdAlIbEVQaEFYZKXF9AzKo9XH29WGoEvBHcqCHUrGHIwbFOkk1IrV
+Vvh0++04FIXyG2lpXpTpWpG9G2z5G2loVER2RMRMRMRPlpVpWpHpGpTDIwxHoozV
+VvhHHspoi7REx9+GHU6++6N3W9x69TEenN68WQR+Z9E7FoGx0oGEx+YGmJN7qMdV
+VvhN0iR3xBx+WSGJr83MeJ0l19FAmoW9W9H6WolAx2Y9E7WgbFYeh3ek26t0++0V
+Vvh4FIWz00ao8d3C1UqCHIvAognD1sWH179HW3AHmCp6u2IAtJGUFFWIWG3ExHoV
+Vvhp1p2EuB3UpK0N6BVZ5BXeh-go3YY0++04FIcz0HT6-BheI2XBnAZ7HEa3GIaV
+Vvh31IZ71IXHnBGBHBGEox292AgU-0Rf8q+203Q6onmF2B0InxH7H7H7HAF70InV
+Vvh7WIZ3WEp3WAq7G6sAW6ufK+HsWn+QGMAQQcb70Lx6x7+2WARzmMRob5Qwr5QV
+Vvh8-r0QRkr5QBVrHIRso5TAl+EAV+GH8cx0eDGLEDH9FLF5G2XoFoFAx+R+YGlV
+Vvho0Mu5E7oYQC1UQG2MR+uBFo2d15FGn6R79L-BPGmBPGlJ86HYaJIB3C9OfOqV
+VvhUB+mDkSCClUF6zUWJs7YEOAVglGNy6Ym8IoxDHox6-+U2F+F6-2E2T2-2U2SV
+VvhAENG+EH3pBDEk0ky-ssv4-2XzVWnoDL2oG-Kt-oi6R6R9moGoGoHlB+x-7AIV
+VvhWDWNEHgGCGEq85P+3-+2QQUC0lLz35BKFrGDByIrtHR1qR+U2EHXY+wE5kAIV
+VvhozZwHxDZkwtHnZD1IpB3EoInJ27mEdKEk2MN0++14FYXzm9GLJ71oHMwC1gdV
+VvhCi6tHsCIYtCXUvBnkpGKB9RXo1UgC1jnYtCYXngssXh4sXh5CnUn7IUmBHUmV
+VvhF1Jn6nRoKQ-54UiCCmEV3ToIOMO1QZB1JL6mUYJn2dAoZ8B0cvDGGnoXkuqaV
+VvhJ1pYQxJ6DICXoocx79DGGYo-38H-776HgGG0Ad72Iq7GZuJkk2YP15587mEJV
+VvhzFGKhfBGQoBnUZ80Iu6mYnD02eAXo2glHEGn2x2wTFqS9FDGHEHGDFHGHEHGV
+VvhH3o-6vAGkI8m6v31Uo8GQZC0IfP3QA-F5+U++VYL5zsNqFq-q0q-q-o46QBHV
+VvhgcCGUF80UW7WYH7HUIB0UJAnUJAnQKAnMLAnIbAmMLB0IMB0EN7HAMBW6N7mV
+Vvh2N8HUfBGkGPEwRURURUhUA-l5EtlmWog6jsVozrxQGH2plBB+xQHHF9KwIHGV
+Vvh5JwIHH5I3IolomJBARAKGFMR6aGFqFN75N7YYRYLG0q-V5DMqhTPplV69L4IV
+VvhYRQNGFUO4YYM4Vd73lcPGFQO4YpFblhBEN52omYQHG8GlB2rKZlIyYr3k6ASV
+Vvh21XaAmoYyG9GQ-N3quGRaHhB-7D2oHRB-B6aLEHH3YoIolJB6xEILGDI32onV
+VvhgJ2poYgJ2ooogJ2ZooccLHClVREtC3pB83oxC3ooYsLHGWXpongNLHClQFLGV
+VvhGlQFxR7BIGLGDK2ooXpFFR-BIJHEHI7Io2omRAHGC2dQOIXOkqqx4Bz+UFwAV
+VvhQQcb6GPv6k2lorUR2rB-o1gl91o2khAuDICHp-2sDH2nMxAXBHomEpDH3IBBV
+Vvh6KEnoVR0HF427B+NEIo0Z-HE4Y3A4o3952385EEHcR-0CFoI6s9FEXUR6nBlV
+VvhoYAq5HB2ERB3Alp1Mm9HC3onZBAvDGD2o1kGCmo-IqDF7soW+G0E5m22QQUCV
+Vvh0mHw6rBzJYPWJiB5snUcsXXX8S6RIcFZR5Bkc-kw-5561UcYzFVXPpJ59SslV
+VvhXX7yAqsnPXFSBJFXQ9-26kpJK0cX9TgWm-gQbW8WmD8WmC6e96we96sWcgXmV
+VvhcgUe8TpiCmcgXX8WjxOGcgXmcgXmcgXW8WmD8WmC6e96we974lm+k6UZ1JJMV
+Vvh8W2cyGFopmIY5JB0MRAoBWoHIb2Gd3C-6nEGMd3HEaCFkaCFgbCFcbCFccwtV
+Vvh4GYt40gc40kc3mo0QL9G7FQhEI40pIUcHJ7mERAb7FoWQb5E80QR+b8-kbC-V
+VvhgcCFYdC-bmYt40ct3mgt3Wkt3Go1UJ9FC-Ih6b3GomQI9J3VEhMX7FqHQC+KV
+Vvh7kFlm+s51zUW55rvwu-+UUEE66666+1+D0U4CCIH2H9w7BAR6R2h2h2h2h2hV
+Vvh6R6h2h5moT9Fwh2x5moHoT9FsXoSEh5WDGtGoy6hDmolomomolp-p-X+D0Y4V
+VvhCCIH2H9z765I5I5H9H9H5HwhDW9HtGoi6yHF9FsXoT9FDFwh2x5moT9Fwh2hV
+Vvh2h6R6h2h2h2h2h2R6RD+90c6++6N3-Lu79sWpT4XIa6YEYF1AXC12GD4oXoaV
+Vvhkl6HUn6nF23I2q3XcRLX8d+T8kllmWQU6jgQe-hGgyIfDZ8nweLKyZ8ntGgyV
+VvhIfAfIOXU3Wk2QQUC-kzx--lxyzCUE662200000++s+ki-5561UI3z+EnzjQ+V
+Vvhk1oj0++04FclzmHQ5P9xchfmqj9Owhfmqj9Owhfmqj9Owhfmqj9Owhfmqj9OV
+VvhwhfmqWqj9Owhfmqj9OwhchkRg5+HCUFlm+s63TkIIZHnJ1omJ1J2Eo1E4ng2V
+VvhQQUC0Fzx347Yx3IkOGN2xJGD3y6L3z3lQM0k1XoAQQcb6+nv2FzH1YzH2A-bV
+VvhE+llmWQU6zcWobqHQxEh+R6RAf9K4Fq-URcL4JcJ3nIc3-Qd3lAL8lQG3Wl2V
+Vvh2FMx+o2FIx2o2FIx+p9YIx2p9WIx+p2FMgFF2KCV2o2VQs2XEH3nIY6lENNoV
+VvhPl+H2-ARV59HKmdRGw1E53g2QQUC1n5x76xzUgtGnZ9CIgtGnZ9CIgtGkhxsV
+Vvho-lR-5561Uwl+GGDTx9ZkgtGnZ9CIgtGnZ9CIg8DSC+KM+Flm+s51zYW+UUUV
+VvhUUEE6620tyzD1+1E2F66++6N-kfp6V72EpwpBGPmMR+G2kU++VY70T2WMpFHV
+VvhIpBHIq3lUBUE3+U++VYA-TIS802a6n6pK1LM3VI6++6N1Ubp6VkjgF4W2O2WV
+VvhUX7HK5JUm+YK0++04F6-y-nJs-AL1D+q8+Y7v0AS2B+c4+k4-6Mw+B+F4+QQV
+VvhQlMA0DjyItGYZ7C1V-Yko+sU-5561Uk3zF8WNXQaMt1E3Js6++6N1EXq6b4nV
+VvhZL6WMY70MW8-2P5+13w2QQUC-ELr6G6h2H5E4Lo6++6N1kbp6YwpAnIo7WEpV
+VvhB0MY7WIL3FQKs-7y0++04F+3xm+C+Fw1AMF+y6-ko--z0++04Es3xW2WQWFNV
+Vvhx32qAP-Pk+k++WIVADsjlWoYoXozDHDH9IwhEENFp0ojDFxB-gsVHC2YnG7AV
+VvhoHHA6on-FQflNAblRAUMH64Ilj4YlFhAL2lAL25-H0wQ7A5lkok-l3gQJ893V
+VvhG3kpKdn7kF0kKw2A++6Z6H1y9wwx3B2x2x2x2x2x6RAEW-p0ojDFxB-gsVHCV
+Vvh2YnG7AoHHA6on-FQflNAblRAUMH64Ilj4YlFhAL2lAL25-H0wQ7A5lkok-l3V
+VvhgQJ893G3kpKdn7kFg3z01++07G2jzWv85HDFLD6WnWEgka988-mFgEUVp0ojV
+VvhDFxB-gsVHC2YnG7AoHHA6on-FQflNAblRAUMH64Ilj4YlFhAL2lAL25-H0wQV
+Vvh7A5lkok-l3gQJ893G3kpKdn7kF0kKwAA++6Z6Gny8wMs56JWlmAY563Zm-UkV
+VvhV-p0ojDFxB-gsVHC2YnG7AoHHA6on-FQflNAblRAUMH64Ilj4YlFhAL2lAL2V
+Vvh5-H0wQ7A5lkok-l3gQJ893G3kpKdn7kFg3X21++07G2hzWn37mmIJATpFQUqV
+VvhA8AREh9noTHEPC6InV7AoWHB2on0BAkIL8wKH7wLH642m-ZAPldAIPH3lAH3V
+Vvhl-kIkj50H-wQBA+QFP53GWlIVQBJeQmQ2P-SlEk++WIVATskmIo-EgrlMQnlV
+VvhQQkK5C30no0b5I9Gwx5oo4nW3AsGHB6YnFBAkXHA33mj3YmT3om-VAUNH4wOV
+VvhH34olQH2lQEQ3A9lkYkT51H+52KllIcgJ6L1JObAb-5+QQMCQQch909y6RDxV
+VvhzL2YlBQHHEDL2ooGpj32oVpT32olp-JBARAZHH5H3YYK5G7YYRYKGFqGN75NV
+Vvh3oUhUMFnqBfLqxQMG0plZ75L4IYM4Vd74-cOGFQO4oYL4VdBINwPHI4FlBAdV
+Vvh52oWYgHFBpdQJDdBlP-RlkiCCmEU9DcWl5UQ5+IfNXAeKm2tH0K2l2RAJ4H5V
+VvhBIm0JQUZH833mVFAgHL92pniJQzoo2mlFQcIxQYKH73ZllVAMOH28okWkIk0V
+VvhkpQwP-mbnHoIoYoIoHo1o2mNlf-Im+fXY06VADsjlGoYoXozDHDH9IwhEERzV
+Vvho8H-Koknjol0hAIOxAMOsYYM4YUgN755FnlzkgR5D5G0ljGFlzGFcMxAQMH6V
+Vvh4DH54IlWZAIeH2CJkKHx-P-JmEfXY06VADsjnXoIoHoHoHoHoHoVol0OzEdAV
+Vvh3PH1CzH28olFfolVfWGFUOG0lYYQR5D5z0loQwR694x755x74VXollVAUMxAV
+VvhQNH48IlGdAEtL-NDo30kKAc8st+W6Gzy9gYRAx3QwW9C70n0Mgcc574l0IzEV
+VvhdA3PH1CzH28olFfolVfWGFUOG0lYYQR5D5z0loQwR694x755x74VXollVAUMV
+VvhxAQNH48IlGdAEtL-NDo3k3990iCE6W2hzWnH7mq2JBPpFRQqAAHxyYo3hB6vV
+VvhxBAfHI4jHJ4i774-d69JGFpYQxPx5KFnpYUhLoYRPoYO4DHK42plXopVZBIdV
+VvhHI8YonZR-YzTIA+en+L55F6IADsjUhFBExLnpHpGpj9K22vx8ZoiBB9ZHGtIV
+VvhoiJB9ZHGKh7R3g+fnEL55F6IADsjp1ooonononononp-pF-YzGdR9XHGtIoiV
+VvhJB9ZHGtIoZfGLFP+9Qs3lloG30zy9h+RIxBR2W9E70ga8GUM4l-RzGdR9XHGV
+VvhtIoiJB9ZHGtIoZfGLFP+7gw3lloG30ry967mV3HqJ3QqA55x8ZoiBB9ZHGtIV
+VvhoiJB9ZHGKh7R3g-8o+kstWMX6jsVLNoBjHGpoYo2oIoIoDHGGzHIGiBBFS82V
+VvhpJwxKJVBJLHKGDHJK2pIZBFNHIGIp3ZBF8HHGooYlB3B-ALEKabPjMoEk4LFV
+Vvh1++07GMgzWjJC-r3MhgX7-r-NRkMAA9uj8PFHF2IoVol3R2RDl7B2R9lFA5HV
+VvhwJGloz3YcR9lV65HwNFloz4YMR9ll25H53ARDlo2ARAR305G5GEFoz5HLHwRV
+VvhFB6hIx3BEfyx6P0kLR6AQQcb615u9wAh3B2x9noXoWoz9H23twd3H3GIkXk2V
+Vvhk1kYZAEsH3FnloJAR2H6F2m3wYmJwJmOtAegZFxAdFxAZGL6EplpFAR3H4FoV
+Vvhl2VAB8H-H+D+H0GHlXMweAD+LRAAQQcb615u9xgxxBwxwxwxwxwk2-+F26xxV
+VvhZ3HIGIoHlADFGIonVBF5DKFIpYFBR2HLLmHMLlLMfYqOq35oqJ5oq37RR1LKV
+VvhJ2pYJBJ5HHG2oYdB-AD2oIYxIqDNXG1+MBEAQQcb611u9hME2HrprG6hkY9OV
+Vvh7Wq0URQP26ZxZ3HIGIoHlADFGIonVBF5DKFIpYFBR2HLLmHMLlLMfYqOq35oV
+VvhqJ5oq37RR1LKJ2pYJBJ5HHG2oYdB-AD2oIYxIqDNXG1+LBIAQQcb60ru8x6sV
+Vvh5KJWpGAY5K3ZpVUkWrqIJBF7HFD2kx37HHC2p2QxN3HKF2poFBRT7BVT3RWiV
+VvhHNfMITHNITHMIZpoBRNIHKFIpIRBB6HGGYo2kwHFGHpHMxaB6A-NpUllmWQUV
+Vvh9jcgoGQhR3HJxILKBX0dTNFIp2ZB2wH1oIZBAsHIFnpYJBN2HLF2ppwYq3wJV
+Vvhq8tBahVFxBZFxBVGLLEppZFBN3HJFoooVB78HEH1lB37DJBXqMoUk65M1558V
+Vvh7m2aymA-ARBs5FBnER+vAGkx-A9HCXp1YxEFC1olAqDH6nIxAYBHolJ1HG3YV
+VvhAx6LEYoFV0HE4I3B+dEIo-d-H-h-Gll-GVo22u5EEXYR30C0oI6s5GAnQR71V
+VvhBVonF25HFHAREqAWonVRAtHHCnoXlB+w2Xgh+JBXoGSB6U2Ug2DN1++07G2lV
+VvhyGz-9GHGDHwxAxAhHmp--qz1P+JQB7solFfZH34iJAIOt2lFjWH25+H15-H0V
+Vvh90D051H+53CWloMwawpgM9-1qUk++WIVATYjmXoIoHoHoHoHoHoVol0Nz1P+V
+VvhJQB7solFfZH34iJAIOt2lFjWH25+H15-H090D051H+53CWloMwawpgP+FhgAV
+Vvh++6Z6H1t9hEE2X+ELS6WrGEhga9N8-q-gEcjoalJoYbXHI4iJBEOtIp-fYHIV
+Vvh4y7BAQHG5EHF9FDF5GH-p1chN4DMjQPJk1vQ1++07G2iyGn0QhV3HKxILLBXV
+Vvh11zGP3LGGSBBEOtIp-fZHI4iFBEPsYollB6R-B2h2x2R7A5ICWpYMxWxlhKkV
+VvhJRoA++6Z6n1u9wgxBBAxAxAxAxAxERIEdDkQ0ZL3GJlGk2lFkIl-kZklkokVV
+Vvhl3k-lYgQRO56GFmIUQdK5AFGn3EQt15DIFo5oJoiBBAxDYHHDHLBz0l+k19SV
+Vvh0U+05lkWzW3TohJRfWHPoB5Hl6KoZOGYfodSG2hMGZV9K2dNGJd5OxDB1FtIV
+VvhqZpToR5+VBwFlm+rBGHx6gNlo4QOd0iY82Mm8YMm81dNCZUh+t9EBmoHUh2qV
+Vvhwx6bDG7S6xALDH3jHOHNLNLNPMPLfIfInGnGoB5EogogpNpNq3qJqIqYqi7BV
+Vvhd35HFVooHlp1MREp9HBWonIhAb9H7WoXQh6qDEC1o1NPC3grAIN7AIN66wcXV
+VvhmFRw3rikIdUA++6Z6mru9A2b99FImTJ3mXMkkTkQ0ZL3GJlGk2lFkIl-kZklV
+VvhkokVl3k-lYgQRO56GFmIUQdK5AFGn3EQt15DIFo5oJoiBBAxDYHHDHLBz0l+V
+Vvhk1vU0++04FMXzG8GpYpXpzDLDL9MwhUEK6kqCJQcJnR780cxLnoMdIC2QrG1V
+VvhMtBYYpx8B3yIFM2HAGFG7-3LJ11+Dy26++6N3WDx6hIxJBIxIxIxIxIxMRQEV
+VvhQ6kqCJQcJnR780cxLnoMdIC2QrG1MtBYYpx8B3yIFM2HAGFG7-3LJ11+ES66V
+Vvh++6N3W9x6R2RQxJRAW9G70o0Mf8-cP24aABXZL83QrGGUeDJwx48J1V5BoUqV
+VvhCHN7BTGXFTZ2K-2n2YIWEFJpEw+wskU++VYK5zoScs4JMc6mEN3ZYMA4iABXV
+VvhZL83QrGGUeDJwx48J1V5BoUqCHN7BTGXFTZ2K-2n2YIWEFJpEw+ut+U++VYKV
+Vvh6DoTYb8YJ6xIKHMkTskqCJQcJnR780cxLnoMdIC2QrG1MtBYYpx8B3yIFM2HV
+VvhAGFG7-3LJ11+ESI6++6N3WHx6wHI30oT3VoD3lo-MR6I9HE6GABXZL83QrGGV
+VvhUeDJwx48J1V5BoUqCHN7BTGXFTZ2K-2n2YIWEFJpEw-5tUiCCmEV3ToIOMO1V
+VvhQZB1JL6mUYJn2dAoZ8B0cvDGGnoXkuqaJ1pYQxJ6DICXoocx79DGGYo-38H-V
+Vvh776HgGG0Ad72Iq7GZuJkk19b-lln3V6Sz-G6UpBWNI7pArEnYXHFDFt2oHoYV
+VvhoIkGwv31UaBGdU2HoYoooYoXoHoISN1+BSU555AK2mDx6b9HHHDIwxExEhLmV
+VvhpF-COXIrBnIeAncmCn39AHnRsx9nooo-6w30kJ8GQp8qQA+quEQQQlMH6zoWV
+VvhonoYoXoXoXoXoXolp--XOXIrBnIeAncmCn39AHnRsx9nooo-6w30kJ8GQp8qV
+VvhQA+ruUQQQlMH6joVkREx7R+W90Ee7WUc3lgEL4cpBnQp8XAuAXglGn2wrSDGV
+VvhwxBB+GD-Eg3GYbBGhb1+ASg555AK2m1x5r7mR3HpJ3MqA4xeBHQrBGcnCX6vV
+VvhAIglDBrXojDHHE2XkI9-Id7nIfNkc-vg-5561UgXzm7GV6CTCHYewe5MBKFrV
+VvhGDByIrtHR1iko0Dh-5561V2Xzm6-+xHHoxDHok2-+F24MvObp+2DDSIxtHp7V
+Vvhyq1E7Cs2QQUC209z6O2-+wKW6d70Qa7GUI4l-NCaZwHTDCIwtHl6yp1E5yw2V
+VvhQQUC2G1z5p7mJ3HnJ3EqA5+vObp+2DDSIxtHp7yqk2Tk0++04FMYzGDH8YIeV
+VvhUGf83KYMK-Vh6WHE72pXpzDL9LwtQnQpAWIsAGEuInl0DEEIo22x4CDFTx3-V
+VvhDFAYl1D1EvBXYtBHo4fE9z26st+Q4Fzz5hC-lK8mAY5-NQ4108BKRn7GNl7nV
+VvhVOC2csCnR8CCEvByIvBod1yngA+uwUU++VYK6zoWYhNBMxTnpnpmqD9M23hxV
+Vvh+pCHUrCXIwAno17B--DFXXoLzFEHoH7AEnkoCnMtCHIx-e1+CzA6++6N3WDxV
+Vvh6hIxJBIxIxIxIxIxMRQEQro1ItC1QuBHknDEAYo22x4CDFTx3-DFAYl1D1EvV
+VvhBXYtBHo4cA+xx+U++VYK6joVoFpnpJom6h6Y9E7Wgc4VgEP5o1ItC1QuBHknV
+VvhDEAYo22x4CDFTx3-DFAYl1D1EvBXYtBHo4fECDI6++6N3Vzx5eC-ZK80AY4FV
+VvhNN41-xTHItC1QuBHknDH7BEH+EXX+ETk222k217AEnkoCnMtCHIxOh+qxUU+V
+Vvh+VYK6DoTYb8YJ6xIKHMkYLopCHUrCXIwAnomHI2k26sk25w---A-+mH2AwB1V
+VvhgqCHYpDKcA-Fy+U++VYL5zsNqFq-q0q-q-o46QBHgcCGUF80UW7WYH7HUIB0V
+VvhUJAnUJAnQKAnMLAnIbAmMLB0IMB0EN7HAMBW6N7m2N8HUfBGkGPEwRURURUhV
+VvhUA+myEXXY-kK6zkWYhNBMxTnpnpmqD9M23MvATRrF8FTCnHZCnHXCnIuFHYFV
+VvhBWUFFXIWRKFkk1Du0CCE5-MXz09JDJHJDJDJDJDJDK5L24svATRrF8FTCnHZV
+VvhCnHXCnIuFHYFBWUFFXIWRKFkk1Lv0CCE5-MWz05F5LDJLH6WoWEh+a8mUO4lV
+Vvh-bCn5rRoGYLngotHgosngpCYIt2HMc2IMp6bJYTE9jk6st+Q3W1w5t7md3GDV
+VvhJ3YqA6kvATRrF8FTCnHZCnHXCnIuFHYFBWUFFXIWRKFkk2vx05584Vgh+09MV
+VvhDOHODODODODODP5Q26buNsCYcv5DCVoTC-oXQRAq9IBFpTB-pXARR05Mwl5NV
+VvhHODQ9QwRnlr-p2ERFI5IIlpIARQI5NHMk25y0CCE5-ki+G8oq5q4rCExjZDPV
+VvhB4oX6ZDEAFYgGXjnkttHo2xno2Ux+tD2YwCYcuAFYvAWIx+oPGsXqyAxhBTWV
+VvhnH1+Fjw6++AN4GDz6h7RIYDFBXksCmYusXZDUtGHYuC1grD1J7MohqDEC0ksV
+VvhCzCHYuGDCnXWCoPWCoQvC1AZG16pC172BLAXBrFNk2is05584Vge+-z0Qh73V
+VvhHExILFBX0RyaS1d8ClnncR5nUR6r5HBWp1IRLnERMn5LEVqDAFqIqXr0rD5QV
+VvhwRkRF25IJ-p3ARJ15L3-qIq+o-vL-lln3UkKyFOlcO4VcO8GYd81Xncu8XcfV
+Vvh8lgf5D3+o-vr-lln3UoKylN-kg5Fkg90gv90jnYtCGce8Wce8VgQk1U90JJMV
+Vvh5GAXzm9HNZonIWAmo1RIGnRIKXRYKHVKCXZBMuDJtHcx1xvEsncxLZCXpSIuV
+VvhDJGIoPCud9f+9Ek6st+Q4WDz6hBxEq5FCFksGXVNCJYtGXcetHpDqNCYbWCnV
+VvhXZCnXZCnV8FDgv5+8ko6st+Q4mDz6hC-9FBYkrH1RPC3cuGjCnbZCnHxaiAvV
+VvhCSIvCSIvCId3yngUk1wC1JJM8WUXzm9HRrp1MIBVoHYFCFksO2csO3YtKJYtV
+VvhKIcuGWfZCnpD+LYvCYbWCngstHgvCCIvCnV8GYHvCngEk1kD1JJM8WYXzm9HV
+VvhRs2h2q6nNABrRABrRPC4VOCJd8CYguCngttHgvBD+LfXCngttHgvCSIvCnZ8V
+VvhGYLvCngUo0AW0++04F2DyW6nQnJJwKFWAFIl5q4FxFYJwN3FYJ4FIN3FYK16V
+Vvh0Go3JJMF1+9x0xjE6pk6++6N2Ezq6a4FIN3FYJ4FLlYJwN3T4FMFBF2mxYMYV
+VvhN280AAU7SkU++VYM+TsAquU7T-+++n6l+TsApj+DOKFZPbFdNaZZQW-IHJBAV
+Vvgw-JXPqFdPaRnMqVZPKIUJ4JM65FZS5Hk14NjPbFaMKBZMbZoNTE+uU++xTNAV
+Vv+V
+Vvend
+Vvbytecount 12104
+Vvcrc32 7d318452
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.432pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.432pk_vve
new file mode 100644
index 0000000000..9080ecdf5a
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.432pk_vve
@@ -0,0 +1,355 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.432pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX6k+8+++C2v0Uk+-Td2++LuF9-QEEk++Woc8jsdnj9NwxVBV
+VvhVRPqpT2Jp-7h6XLG33oT3Jo-NR+LLCwMLBwNLA4amlhQflk3mFkJmFkKlzmQV
+VvhPll3lFlJlFlZkllpkWlpkVm3kGm3kFmKgwZNP5NTkA12k3p00pJM8WQdzWVxV
+VvhnErxFgPGLGLFLGPELHLExRBjhRJThRFfLIL3oqhRFQLHLELGLFLFLGL3pBTJV
+VvhLFLGLGLFLHP3p3nppJfYLKOJpZbppaZRJeLIOpoqlR7gPERk2Nrgk3t10ssvV
+Vvh8mUfyWbLWlpB3mobQpDEP0AwPH2IhRNOLLKJqIVRd5LQ7zLR7ZrWJhsZLT74V
+VvhrlJU3CBU3CNU3KrlPprlNRsMLR43r-dBkOLO53q-oJpVopompJoGq4VBfGrtV
+VvhpQ-MF+kstWsg8TscTRp+2BVgTKLHLJLILILJLHLKLGLLHFxRVR1XLNKyJRddV
+VvhLPKi7RdexRdOLOOZqZhRZfxRZQLML3q3o3ppoJpZoZpJopp3p3oap4lx+-1GV
+VvhrRL+JYI8st+d80by85+IM-L4oblRNDlRQzlRUjhRYjhRcThQ4VseL-qJghZNV
+VvhHNpRXJqJcxbpghZQ5NL-gNxQ4ldRgOxRcPLN8ZqVjpqGhRUvLLD3pJhhBpw-V
+VvhJg-1FUdlmWQb8TscQ-BU3APGP3pIlRMy93pmypq0ypqFypgO5WdP5NKWqJVBV
+VvhbIqBHNKHqTKWqTKlqDKlqSBE3CJE34rjphT+MYQAXXgj80ju8RS95IoL9GRnV
+VvhIx-g6nlhAFGppZdRRNLNG3qYRRkbxRoaLS7KrWJRwYPT3K+Isq+Isq+JxhHOV
+VvhqqFhhKsZqpRRdLLNKTLMKZpphRJgLH2Yo4o-AxBcBGpB4-ptpQ+oG+k++WojV
+Vvh8TscTIPIPJLJlhFhLYLJLJtJpJpSFRJRPTpRzKt3pJpSJRJRLZLJLJPIPDp4V
+Vvhp51+5YY3lloK40by84zJlhLYLJtJpSJRLZLJtJpSJRJgzJP+9oc6CCIT5GfwV
+Vvh8AzIpaqiFRfZLOtJqiJRfYKndOK3fqVOO2hMKllB+OHG42p0FBVhIA-qGkllV
+VvhmWsi8TscTIf4pOn4pKoppnpJplpppVq3pFqJp-qJolqpoVr3oFrJo-rZkRxOV
+Vvh9TKV+FKF+GK1+FJo+FJZ+FJ-7RxI2prpAJLSIVNRtF43rKZRpPLPL3qzLELOV
+VvhxR3RZR7RRRBRTpp3pjLJLJLJPHPIWTp7oZ0kBIk8++6Z6mby85lgH5maoSFRV
+Vvh5ZLFtJoSFR7QUS83m-bplldQMdL58TL48ZlHdQEvL0Kai2zGIA0DHEuefHQtV
+Vvh8TscShz4nR2PkFHRTJwFHQ2Jpj2YqV7RMGHN2ppFBBYGLK2oq-BRPlFBMILKV
+VvhwIHJ3JpT3YolJRPlNB6KLK3YoFRRMLH-VRIMH-RRPlV943pj4IYNLK4IUOLJV
+Vvh4YUNLK4YQOLKwPFFhRPlh253pT5EEVlRPlo22R-RMR-R3RIh2x7RBgDFPDo7V
+Vvh8RFkk7RC1++09GwdzWVvox-goh55pKol3hIxIGLK5K2apFpVBRIRMHPI5J3JV
+VvholpVJh6RMKLG5K3aoFpVRR2RMLPE5J4JkRMNOlpVdP5K4acRMPKVpVhd5J5EV
+VvhK-pVo4QRMR3L5K5FNVpVoZMRMR7Z5J5IJ-pVp4ARMRJH5K5JMVpVpZ6RMRRFV
+Vvh5J5MPKwRZRPlqYpGqnoqqGoDoBQR+A-WHkllmWsc8zcdpdroNBh9DLHFHIHHV
+VvhHGHJH3pYhRV8HNK2qZRRh4xRlIxRpHPRMZraslPSnXra3htGxhpWPRIqr4FRV
+VvhlJLPNJqpRRZMLMKYq2hRNB-RFB7BBBFB3BR8HOJYrtpUg23E0iCE8GUdzWVwV
+Vvhr0oQJg-gFQBQBQFQ7QJQ5plKt9L4OplKhQNfL4L+L3L-L2L0L0P1L+P2mQTYV
+VvhLKtJpiJRNh1wL91+Vp2AQQci81Pu8RORx4HPGYpooIp2oooYp3lRN9LLKYqJV
+VvhVRZLLOJaqpJRlIPQJ3rJDqrKslPSnXra3htGxhpWPRIqr4FRlJLPNJqpRNGJV
+VvhVM3-V8FlMKGpIM32o2IM2ooYEM6Ip2AMPLAVVBd-3JcRCFCVrHcRot5SC0rYV
+VvhQht3HSzByk2N+HQ-JO1+LZ69llsg8Wfy85qhLSq4dxNR3RJR7RHpopopoqoSV
+VvhFRFh3RBh3RFR7RBh7RBBFR7BJR-BROLMpRhPDOL2q3o2pzLFHJtJoZoy7R7hV
+VvhDpoaULLGNlRhBa2RH3IGpB-22-NYk3hH0CCE6FwfzGbGS-o9IfFnAuCm2uDEV
+VvhKHoYVBArxBErDK3y7BMLLJ3prKrKr7qgphDHoxHGpR5MjPTRPRsZLW5MFFq1V
+VvhLmpoIxMqDJFYooRR6rAWl6AoRN7R0laB+9+wJ+iCCmgb8TYcDM9N7eOK6w3QV
+Vvh-090L-6lkpkV6gBQ6G52L02j51L12SAQFQAQLZLJtJpSJRLZLJPBmgH9kQ-1V
+VvhJEk++Wod8jUc5Ic-8R3apadRUwspqFnZLN5CJRYQtJqFnXLN5ExRUR3RQh7BV
+VvhQRBBMRJBEhJBAhRB2hZ9DPJnrw+GTO0sMJMA++6h8Wfs8AH0nwD+FwZdL9CpV
+Vvhn-k4mVkZmVkjL751L653L553L454L394L355P157L157xQ6QdQ2Qhg+QnpgQV
+VvhpO5CKGnpUR1pQR3K5GNFozJ-pDIlpK2RTqqDLOwxjmnki8tL2558DHcey0XwV
+VvhBgGQ-5kql4ZQFQQuL2L58plJlVk3lJlGkDL3L35-P1P251L1P251L02KkVl3V
+VvhkV7Q6QHpkFBQ2QJQ+IL+55KlFQ+QRO3JgQVO3ZcQXpYLKFmJUbK-maQMK-mpV
+VvhMcJln3MNNVn3MOJFnJIPJFnJIPJ-nZEQ-I5DIlk3AR-G5-Ilo36Q7F5FIFkpV
+Vvh2R3F51PGP2PGP2LIH3LIH3HJD5DJD59K969K965Bg5-M1++09GsdzmWDl6kgV
+Vvh4A3wRQFAZgEQlQAQpg2gtQ+gxf5FKVoaURFL5JNFppEhRX5NIVqbr3rKrJrTV
+VvhPP2KqFBRUIPK74pVNhELPH4JoVdh+Q-Qwg-gog7QoQBggQJQcQNgUgRQQwRgV
+VvhBwK8kQ12H0kAF9VMKEk++Wof8TYclQ9Ekw-Mm4dgcw3Qcg7gYQFQUQJgMQNgV
+VvhIgRgEQVgAQdQ6Qhg+glQ+Qpe5DKFo4Qh3L5GNFoqERJW9JMVpp2RVhdRdBfYV
+VvhLOHOt3qYqaozlQSkNpc7llsZ7Gbx87o6o7X0OJlJdAJPD3KnlJk0lKk-lZkFV
+VvhlJkGl3kVl3klkqklkaopopopopoqopopopopoqopopklkpklkpl-kal-kKlFV
+VvhkJlFkJlVk3lWhgMeP48plXdQN7L3O3l6Tx4+k1hV0++05VgOzFaconNB+PCoV
+VvhZ8KIVOGId852qi7B8wNIdMGJZ6GoRPFZh3PWl3OpJe2IEGK-722pIYRrR21+V
+VvhG466st+V4Wfu8LHIyRXZHMtIq2qIJfEmItEGYrKoNB+pLEF2oJsnHGHX7B7GV
+VvhHGEooJ7B7GHGEooIFB2pHEBX2PBXANBmIKCFRv1+9KA555AP4-fw4PbEC0Z9V
+Vvh3nd4CpF8J2l1LE3IpjLKHKtZpzHG3Io-Qw4HcPBXoLf+FqE6st+V5Gfw8RlDV
+VvhpttRhBjZHPHGN2l36Yd72IYv2IUx-LHEFooINR34HGFTLGFIoYLYLGFTLFFzV
+VvhHFG1o3Yv2Ics6Jgp6tZZYg+iNEQQQlgL4jkNhh32CnUdCHQuFHkoH1BQEYo2V
+VvhwJoBoSNRPooVEx2KD-Ut8XMh3t1+9qM2st+G4Gfz8RJRIo5GB2o2BQF3kqGoV
+VvhQR1opyJBRBDx9GsYpyJBTZHLtIppox4h8g-QNkU++VsT8DwOrIoKIY4YEm31V
+VvhYrFHUsFVV6HFK3o2ZQsZZQKIo3VR-MHGFop1QxEFB2p0BhTl+EwU21+EohHHV
+VvhohH1lO9HG1p1TnpHPWDKBXpHUxAu9GD1kx35HKbGk17c0CCE6Fsezmb2qDbQV
+VvhtIrCJBlBp3TFEmIx-041l-4IhOGjKofXH2bZH2bZH2ZPJR+xsh5E54Y2QQUFV
+Vvh1mbz89CpyKdOE7B5y8xOtIfZGiJ8Jg9Gk0xe-CCE2VIp+mXIDILx7hBRB+k2V
+VvhntozLHtIoyJBDZHHtIoy76BXVIG3EtF1gJDEPE1+Gqg6QQcU60fz8QHOyRvZV
+VvhHStIrYrzGOZ8LEGXoYcRB85IG-pYQRR45MF0qIBBR1LLEV3RNHLKx3LJFZooV
+VvhRRDoVR9oZR38L3Zro1kx2wDE4qk2QQUF20fz8QHrbZh9tIjZGyJ9tIjZGpTGV
+Vvh+E9EDKoBJJUnA-fz4NFbdtZ0Ir7HWG81EcCp2OEVd8Oo2PGY2PEFh8L3l8soV
+VvhpBGSJBHIbZHIp7L3lJpBE-ok21+Ek0Ri0CCE6FsOzlaIJtYmIsYVUvIFZ8OYV
+Vvhfph8sol7tIl7tIl7KpLEDS9Fk1Bj0++05VYOz-aronIwCHYvBnkqDEF2oIwYV
+VvhoYwJoY3B8iDGfx3FLFEzHEFHl5CYYsD1JB7vk2Vk0CCE6G2a+FaoJh0H7HiFV
+Vvh82o4hB-AH3o2jYHFLXZB7NHGGYoJZB7NHFKYoIhB-AH2o3gx-042oIAKDHF5V
+VvhpS7BzZHTLPoBPFpUk2Vl05566-gaz-b4UNFGIcCFEaGl6pH-32HFF3oIDpoYV
+Vvh9poo7BB0t3oo7R72xB72LEJIkFFYcGFnYGGIIXH4JBfWHNtIqJpR1EoFk0NmV
+Vvh-YF43lUOzlaIFKYWApYFFMIFFMNIZKGTLKsYpiJBPZHKLGoNod1+CLA4HuMMV
+Vvh3Vfy4OR-Qr6GMfBGo0Ex+Y9F31oFFB+ILITHjAjAjGXIJ-o2DX9FAno0Ew71V
+Vvh2O7GAaBVNs1+8rE4CCIL2GLv78sVoWoVoj9Fwx-AGk2i7InZHCBB1oUHsoUIV
+VvhFlMr3XMMB-hKo0Np0CCE6FcOylZIl-yLZTKpLZH2LZH2LWH2PohKGV35CF3MV
+VvhBW8KR716DLM6QQcU5Ffv4R-xW7FR-6HE8jHE4okQKlo2cR379FGFoZQRF55IV
+Vvhx45JJ-poAhR15MEVqJ2Rfpqor1rWrVpEm3xr0ssv8mUOylbwCpZ3ZOFogw82V
+Vvhh94Ih84oZO4oYFCFl62XYQG-6s5EFlB55EJVB45GFFF45GF0Ip5HF-Mp5HEmV
+VvhN15IElR15JEGR05KEFYm5KxOAFpzGoqGkxch+hcR2RD+EbU6QQcU6Ffz4Iz4V
+Vvhi4Zh-99IGVpJURR55NFFqYERl05REFro+EI--BwFHR2Yr-FBcJLM7YpmVBIdV
+VvhHI8ooXhB-PKDeACkJrY6QQcU6WM+4JkLZQ07ZQ3A-Q2gDokFl2k-lJgQN855V
+VvhGGloYQVL58FlmjFVmpEQp19BElnY6QxF5ExR3B6xEhHlpD5I5I58C-mJMQdJV
+Vvh98FVmoIQoJ9DLD1+Crc555AP4Ffy4JppGpIh-39EFVo2QQG-h64oYOLLHLHLV
+VvhHLHLHLHMGVZ84IgMH-RA7Yo-Poo0JB+oGpHME9+h++c++WIZ8TscTGPHk4kKV
+Vvhk3l2k3lHsg-QMjhQQiCpm-tOLHtJoyJRDZLHPBz5lf-W+EpJK16f8jodo-rHV
+VvhqzHOPMTM2Jpl7hIHPJ33p-Jh6KPF7poFVgwNPC8ZnVhgkQ-ggg3QgQ7gYQBgV
+VvhUQJQUQJgMQRQIQVQIQVgAQdQ9lmqk-nJjlnaYR-MwR3a5HJT5IMxkj+tk4w0V
+Vvh15589WUfyWbKbTFYqodBRB3BFBBB7BFQLKGpppdBZMLNJpqZNhhJLQJ4r3FRV
+VvhpHxhpj3Y5I34wKHKHDHKFVxY5I343htGxhpWPRIqr4FRlJLPNJqpRRZMLNGYV
+Vvhq2hRNB-BJB7BBBFB3BQvHOFortpUg3M10lln8WIezWbB5LwhPopDLHxh6FPFV
+Vvh2ZoD2pnz33nVJgoKLAwLL9wML84KmFdQXlhQTlk3lVkKlFkZlD51L1wQFQ6QV
+VvhJg2QNQ1llpggROD5K4lLH+fCj10kA+E8eeoc8Gby86zJxxK0oVXW5H3lol1aV
+VvhsVmFljmwLwj4sVmF1Z5J3SARIK5I7hRS9LP+9UIA++6h9mby85+PM-n3pKpSV
+VvhFRJRLZLJLJtJpJpSJRJRLZLJLJtJpJpKp4nxFhFkg3w40ssv8mYdzGVzpbP6V
+VvhW3mpVgh7LACKn0dQkeP98pmmhgcg-gYg-gcQ3gYQ3hXqqDPMxhVBYxgRgRgRV
+VvhgQYQIQcQEQgQAQgQAQkQ6Qkg+gof5C8lnXcQt75CGFmsXJTJTKSkEUQAQQciV
+Vvh7mfr8KL5K7keKw0okOkGkskW83RMKZJOD+F2k1kHFA2Q70HFEXon3BDn2xHWV
+VvhPJsppSJRLZLJtJpKngX4mQCkKUU9XXgf7Gbu8A1wXAPHt3o9mo7FL3FJFA3KV
+VvhJIh6JZV7JoRMK3JNK4BdKJ7eKJ9qdNkC8ZZVOZZHKZVXKZVJK3VKK3RMJpR8V
+VvhJZJA73IplIBFH9jFt3oqnAX2mP0kIEYAQQci7mbs89z6napSFQFuKqBNKZLpV
+VvhZNJjKJVLt3VMK3VLKTJpVNJpV8JpROJpRA-5JZk2NLH0FJNAB3JIlIFIH5EpV
+Vvh7Ah-bEXIt3pKngX4mQ9+QEc9XXgf7mfv8RKRt5LMGopIoYoJp2lRJOLLK3q3V
+VvhRhZKLOJKqZJRhi6qqqsWPPMqqpJRdZLOJZqKNRZMLMGJppdBR9HKHEDKDFDJV
+VvhDHDIDHDHDIDH8z3moWQI4-oGUI4-oFUJ4-o0UJ4-o-UZyh0af9Ogdw-DA+U+V
+Vvh+VsP8TkboKpIEx6sD1cuCnYwFoo1NB2qHFHWFB7DBR3HHGLX7R7SEJoZ7R71V
+VvhxB7GLGIZoYBR3IHFJDHFFTHEFnl6GncuD1Ux2pDJTE0k6n26++6S2mXu7wEgV
+VvhEgB9Vr35F2kokiJA9ZH0tIkiJA9ZH0JxcA-GAUU++VsQ8DoboLpfoXNg8ZcQV
+VvhO-oJUR3a5GNYo3JgLpOqJQNXo3qKqTLNLNLOHOHOHOHOHOHODPDPDPDP9Q9EV
+Vvh4moFch6N9G4GolUREbprq4qKq51+HHA6++6S4mbx7x4BHB-4KmdN5EJohLKZV
+VvhxadLGpUfPxVRVRVRZBYxYxOBlBkxhBhBfpqS7Y9GMZoK7R3Gxh-WLFJD5HJVV
+VvhoJQvKIRR1Ep5kA-AB+U++VsN8DkbqGqGqTDMHLLK2IpF3BIVHJ2Yp-BBAIHGV
+Vvh3IoGFB2ZHF3Yo-RA42gNGWV94IcOGFh652QR-492QR-4+ZzGHLtIppoTom1+V
+VvhGnI6++6S4Wbv7s9F82Z7ouoeoQnF2ppC6RjY5Q34oF6pD-2NCmgu52qIqiBBV
+VvhXpEx3HxR-HL3FB-I5HFFoZIR749EG-l78YgqLFfITF1+JHM6++6S4Wbv7xBhV
+VvhGx358oYtCYUuJnhKGoNBYxZBVRVBXpq2JeImMcIVYqIFgoIFkoIFl1xh30xRV
+Vvh70LFIiBB7GHGEooJDooIIx-4DEC1gtGHh4HEjITEk2Er0++05Vcey0V-r0qjV
+VvhqXqHqX5L2mpVERMJ5J3FpFMRERjlqlqlqlqmqlqlqmqXqWqXqWqjDNHNDNxBV
+VvhVRXoqCBRTWLNDK1+K1U6++6S4mbx7x7hLB34H1Z891Yh2rDFBmoXsaDGBYo1V
+VvhRQBqctO1e3D6Ah8hKROREVXF77crW1ZrCrIx3IDHInp29WDJETDKAnpGExEoV
+VvhDI7XoHUwCYRQoBFwk3Et0++05VcdymTEPIjFFXh7CIgrH2JB-3HFBDHGEZoYV
+VvhwZoJslLGIJoK7B3j7B-YD-3JCV7KC-BLBGF8NJq3q2q3qDHMHNBnl4KYRNG2V
+VvhZ74ogbHFjHTHk5+Y0++05VckymnHsWq5pAl16Yco7WUa7lQb8-Ir8-Es8-EsV
+Vvh7XEc7YwnUZInUaBDFmo3Ih7X9GjHnGoB5Eogp8om7hAXPG73oWJB2aF1QbAyV
+Vvh7K7nB57mEN7nEN7mIN7XIc7HQM71Uq6nd16Yo9p5qS6h690B7UllmWsf9DoeV
+VvhloqHARQp5JBVpGQREr5Hx55HC-onQRB55HFVpDFFpIERN15LEVq22Q5+k3kQV
+Vvh5+H3P2L3D5H394P3542Yl-lVBQAQIJH0533YkFlGNP5382gQEsKFl1d652GZV
+VvhMQFPFVl3hI52P+EllKk32QPqkJklFQ7Q2JP+P+7ZcmKGVaBJMuk7f1T-Og+tV
+VvhDkSCClkJ8jQdS97oMeF-o26R30D8ytmPLHLGLHHHHHDIDIDIDJ9J9K5K9KsVV
+VvhpiEEUXp3oqoKopp1og+tDUSCClkJ8jsRoHp3oqoKopp100t-pWpj5K9K5K9JV
+VvhwhIhIxBBBBBBBBBRBPb7yukmHF2Yo-Ev7XQuWA+J2+Flm-2B4jwNZDKDVSK2V
+VvhXZGCJ6JBkA+Z2EHXY-6H7UANoYydzFLZoIoSJB5ZHFtIoS74BXNIFZErF1YJV
+VvhCqj+JFY6++AS5mfz8RJxYpDJFnooVB38HEConWGpyYhPGol8HEGIoIVB35H6V
+VvhBR4KDJG0p2VB77DFGYoC79HDGpfZH3bolOH2h27Jh1F2l1B2l2B1a26oaKKkV
+Vvhk3IO0ssv8mUOzFacdwBnMpCFgo81R8AHYrKKgpKagqGZl453lC9KHEHErOJ2V
+VvhqpRBZNHMKYpphBNQHKHEHJLEHG2ZlR6GL02x+HKmAg3JUp8VRJC1IvX4YA-GV
+Vvh4kllmWse4jkNhwTFBHUpCXYa81UuAnYrD12vBHo12vB2o4l0HGL27B7B-D3RV
+Vvh7B--HGq-spoYpS7R3RPoo4oVEwAXo-MuB0kMC0Qe4XItBHo5o4b+MVk6++6SV
+Vvh50Px5xohoRoRrlrForAR6pLECHkuGXcG8HcWBngHFIcIFHcKB2cKB2YKF1YLV
+VvhEoUbEoUMEoQNEoMOEoMNF2IOF2EPBXAeBnAPC12PCXgw8WoIMx2HTH9R5R5RV
+VvhwRoRsA095EtlmXMp8Tscpz+Ir-7wPQ2poYqlFRAxgILI9O3Jp0qGJREhYJLJV
+Vvh9M3ZpGq-NRMTplRRMRMMKVURMLKVrz43cRvlZN9R4ZRBrRrRvQ8ZUxkPKGqlV
+VvhlN9P53Yd5EwQKVYR+R-O4Fo-o3pVoD5FLK5D5FLK5-oZpGkR7REv5HLHCnoZV
+VvhoYZh-gRQTTP4+EP+cFsECCMxBmjt8RS+5ZPToIfSlQPFOooJp2dB7RItHHLKV
+Vvh82p3pWRRFRMaLJHL7JpYpmFhNBUILKLM2qpZo-QHLLLE3lwapoo-dhVB+OPLV
+VvhL0dhROGapxOKqBKaq2guPMH0dhRQ8appo-dhRQ8-5qpoo-UGPLHN2ppZq-HqV
+VvhpJq-JRJBUKPIHM3poppmVBBRMsLGLJCZo4p2hQPFTEGhvHFU2BO+3Q0Y5kllV
+VvhmWsc9zcf+O2-YRSN5JFnMREwAmoXoY2R6xFB6xNAHLGopl38DL6YVBMXFoplV
+VvhIqHL3YJBMLF3pFV2HJ4IBREdIZp-dFLI4p3RAQIJoVo33R2R4h2h-FLE9FIJV
+Vvho-oZ3Q5HIJgRF0KVp37N5JIZUhJ1K-pJF55KFIMRNJFFpoR15LG26hQuAGpnV
+VvhhRQx+xQx6xIx6FDGHG31kxAZFopFaRQE4F+Oo0AV-5562Eofyme2VMxbJy7bV
+VvhsZXXGS6tGSAusmjX23YtK4NcKHXE6nk2QQUF1Gjx5MCJVaO3YkKSAPsmfXCIV
+VvhbWCSB6sZTWNpTqVMG9-N6kpJK16hBjkdnWgh6uDEsXcx1ncx1ncx1WCXoDCXV
+VvhoC6uDEwuDECXkhshwxv2CXoC6uDEsXcx1ncwLS9TDSkHcx1WCXoDCXoC6uDEV
+VvhsXcx1ncx1WCXo1cx6f9Bk8wZ1JJMAWUky0mJqmQZ5NBWQRR380pIIeDFJHcGV
+Vvh8W2pD-CWBXkR33DE5EFXo-l5DE4oUx+PC1o-gtDE4YYx+NGXo-V9D-VB+g41V
+VvhoGgMDGCFVBAd3opGQLHL70RBZNA-QuLMG0IRN67lp2Uc5HG0cR6sCVoHUw52V
+VvhUw4oUx+OGHo-Z8DE4Hgx+MCno-V9DE3okx+KHEDE3IoHkKDH9-IxEf3Ip1YJV
+VvhHK8FFBUb3HqWEa9QKB+O7kFlm-262jMdAoIq3mMn2TQS7VPlMK3VMK3kk2+cV
+Vvh-XXZ3lAxyGnJ5I5I5I5H9HwhAhAhAhAxAhAx9nojDGwxAhDnoiAx9XDGxB9hV
+Vvh+xHmpDDIwhLmpT9J9J5J9J9J4g-48EMstFQIDE+gcRQRQRQRMhPmpj9JDJwhV
+VvhLnpT9JunzHHXonoooy6xDWDHwxEhExEhExEhExEhEhExEhEhEhIRIRIRIRIRV
+VvhEhL+Cmc6++6S4-fs9B+hXWDMwgBmQmFWJGJFJJF-BNEV7B0BLop12FDEEV77V
+VvhEmBJJ0FHFWN0BmQvsXq0q1qGo6+W8kllmWsb8TgWbGf1eiIufZCet1aREOrXV
+VvhaHeiIufZCewukdnE4Wk2QQUF0-9w-HB3BVQaAl5r5WMKwK3VMK3VQB+C9UFlV
+Vvhm-25-jg36nIg7HAUg2Yj0++05W+wzmnG9x2zo1oDDEwx1noDDEwx+x-B+x1nV
+VvhoDDEwx1noDDEwx1noDDEwx1noDDEwx+x-B+x1noDDEwx1noDDEwx1noGoh+JV
+VvhCUFlm-284jgNMqLoN3MkYXNJMqJKBR+SCkFlm-297jkNQrLpNJQkcHTpJaJoV
+VvhflbW4T4FblYN4Z+HDEllmWsd1zkJC+8-C+1wU0UHU01+VY+AQQci80fu8RO+V
+Vvh21Uxgh2hQhIRIRUh6RgQ9Q4lrlcPP-UOBFgL4HUP3FYu4VIMD-YI41o3II3oV
+VvhoIMG41oIQG3ooIQF41oYQS6FRB759YRB752FUx742VVB-52lRB-52lUwJVENV
+VvhCV343-cd2nIK4XIYB-QQO3YE4z2-ghp85OHE9ILJCaqvow+aKkFlm-2GDDkgV
+VvhbWbWYx5ZDFtHoSIx5ZDFtHoSIx5ZDFtHoS6x9WaEk0NR-5562F6w+GmS8S9GV
+VvhDZoHoSIx5ZDFtHoSIx5ZDFtHoSIx5WCS8N1E4a+2QQUF0-9r8L3VMK3VPlPWV
+Vvh3j3l2nMb3XJ1AB+H2UU++Vs70zAd2qF3JJFYMrBmUc5E3-A6++6S0kji8MBoV
+VvhNJJIN5BnQc8FcBUH3+U++VsD-zAZ8m2rAnIpEHVeDFX64VI6++6S2Ejn8T5GV
+Vvh9x2F5E6GkH4lEcBHIrWZU9U73UU++VsJ+jMWrh+M3knkBX+90yUeFJ3FAL2FV
+VvhUO9WYF3l6Y7IEB+F4+QQQlgC0zfyPodQGyB7EeARo+wU-5562Es4z-OnVZNKV
+VvhNN9+o-VS0++05V+7x0aF+ED2gW8GEaBWEd2mgF9Fk+pT-5562EM4xGUX9I3FV
+VvhER+RTEU++VsG0zAdHoN1JJB4F1QoBnIc7HQp80MN3VYLo-Fy0++05VA3xGRIV
+VvhYHVW6XMX6LQld21E35w6++6S2EPo80C17KIJL3MJJHBn69-hk+k++WocCTssV
+VvhmXqIppq3q2qIqHqXqWqmql0cwhbnq2q3pjPJwFLI2aoWBR6ILFwJLE3Zo-RQV
+VvhvlVQrlZQkOP94pmj5+L75-L75-P5z7lj52L353L354L155L095L056L-96L-V
+Vvh57OnmJZgRZz+kAGkPQ2A++6h81byCBMxVBRRNRNBRBUxUxUhYhcEez9NwxVBV
+VvhVRPqpT2Jp-7h6XLG33oT3Jo-NR+LLCwMLBwNLA4amlhQflk3mFkJmFkKlzmQV
+VvhPll3lFlJlFlZkllpkWlpkVm3kGm3kFmKgwZNP5NTkA12g5501++09GUszXTEV
+Vvh5ODMHL6WpGEh6q9E8FnmgQog2Emz9NwxVBVRPqpT2Jp-7h6XLG33oT3Jo-NRV
+Vvh+LLCwMLBwNLA4amlhQflk3mFkJmFkKlzmQPll3lFlJlFlZkllpkWlpkVm3kGV
+Vvhm3kFmKgwZNP5NTkA120kOgAA++6h81LyBAh75AVWmmBWD93rn-d+xT9NwxVBV
+VvhVRPqpT2Jp-7h6XLG33oT3Jo-NR+LLCwMLBwNLA4amlhQflk3mFkJmFkKlzmQV
+VvhPll3lFlJlFlZkllpkWlpkVm3kGm3kFmKgwZNP5NTkA12g4n21++09GUqzXL7V
+VvhC1nJNQlJP9NKn3JQsrADHmqTDMHMLKxhLl3REGPG6poVFR5lJR+KLE3pnj43V
+VvhnT4Jn-dggPL8wQ-QYQ3QYQ3gTwb4wQFQIQJQIQNQAQRQ6gRQ6QVQ2gVQ2QZfV
+VvhD7KKlqLw1+l+g5531++09GUuzXbCLK3Fp-QR6M5P5FsVYR6L5H70pY1FwhbnV
+Vvhq2q3pjPJwFLI2aoWBR6ILFwJLE3Zo-RQvlVQrlZQkOP94pmj5+L75-L75-P5V
+Vvhz7lj52L353L354L155L095L056L-96L-57OnmJZgRZz+kAH+WwMCQQcqBGbyV
+Vvh8BTk3BkGT4r-BR7BgILHDP33p0qVJREhYZLI9N3JpGq-NRIhUKLK5xQLLK5KV
+Vvh43cM5K3pcRzlVO5SwNKGrFdLHRrRrSr0dMDQ4pYhgQKGqllN8FoD53cN5E5EV
+VvhKVYR+R-RMR1loJpVnloJpVkR7RIg5GLIClopongx7R77PEP5L5rqlU24g4f5V
+Vvh0ssv8mUqyWb6WllQ7mkrQpD-P+6nk4l-39L5KZm3ZQd6L9FpnGTpnWNQwZPDV
+Vvh7Jo0Fh+JPJsqpSNhNh+KxR+KLD43nVVQoOHB4Zmlk3mFkZlll3l0lZkWmKVAV
+Vvhj1o7pDHMLOHNsopoo8oFov-fm+fXY0YcCTssm1qIppq3q2qIqHqXqWqmql0zV
+VvhpKpg-gBw-QRDk3m1z+L79vL89vL95vL+4VseL+58KmmZZAf4mQP8KXmjKmmZV
+Vvhk-mZk-gNxQ+P4Zn-fpmlhQceL94zL88pmHhQUw-QNPP2RTpag4j70iCE8GUtV
+VvhzXXIDMHLLKLKHLHMDMDM9N9O2A9JPKk4krk3loz+L6Dw-QYjhQcjhQgThQ+OV
+Vvh5WdQ+QdP98KImgP7lgdOD8xP98L+58L+4lbpk-gOLA4jL94pmWdQgPxQcfL7V
+VvhCpm1k3lZhgFpzKP+Pgc8st+d81XyBxsE4H+LE-MW6-EY6-2q9T8FrWgRkh+EV
+Vvhw+34+Jlh7wLKHwLLDwLM9vLN9vLO5vL-cS8ZkRZP9NKIqRLMpRZODNxP9NL-V
+VvhqJkP4TL-gOLP4jLO4pqGdRcPxRYfLMCppnlRJPPHRT+JMA-bmkfXY0YcBjspV
+VvhpnUxlKLPJKqaJhhJLRBn+-4E34+Jlh7wLKHwLLDwLM9vLN9vLO5vL-cS8ZkRV
+VvhZP9NKIqRLMpRZODNxP9NL-qJkP4TL-gOLP4jLO4pqGdRcPxRYfLMCppnlRJPV
+VvhPHRT+JP+9wk3lloK41byC8DMHKLLLLHMHMDNDN9O9O25TxL4pSFRLZLJtJpSV
+VvhJRLZLJtJpKnxJg+lnEL55FMNCTssqHq2pppZpYpoq1q1q0qGqV0+zJo4piFRV
+VvhPZLKtJpiJRPZLKtJpaoDpL1+Ags3lloK41XyBxERYxRBMW9I70oHMg8Fgf4GV
+Vvho-07zJlhLYLJtJpSJRLZLJtJpSJRJgzJMA+gnkL55FMNBjspcsCZNNJKVZOJV
+VvhJPBn0ezJo4piFRPZLKtJpiJRPZLKtJpaoDpLk3fE11Xa9WkdzWVxrI+Eq4lxV
+VvhNRBRJRFRFRJRBRNR7RRB5pq3oCBRZPtJqaDOlIqQOjLOOjLOKZqadRdPLNOzV
+VvhLNL3q3lRVR-RRR3RNR7RJRBRFRFR7hFgTE+EohrJg8XF1++09GwpzXH9GFosV
+VvhMh6XMXoVRxAOE+30j2kKkAD0k5lal-3gMwMGL5552alVllBQMQQHP3543Jl-V
+VvhllJgAQQKL1553akVllRQ6QQLP-544Jk-llZf554ZgQQOOVllhO554qYQMQ3MV
+Vvh555-NlllkZQQQQ7a5551JVllkqIQMQJI5553MllllZAQQQNW5555IVllm32QV
+VvhMQZgTlmZlz59H49AD2P89-z-m-kEg5HG15589WUuyXX4DNHLLMLMHNHNDODOV
+Vvh9P9P28KR-4HAGnm2kYlIl2kolYk3lohQZ8H8K2mpRQl4xQpIxQtHPCMZnqslV
+VvhPDkCDDMKnp9qna7gtHPBN3nJJQlZLAJpmZVQZOH7GplokJlIkol2lIkYm2dAV
+VvhhKHEb50kRBAAQQci81fuCB6xVBRRNRNBRBUxUxUhYhcEe7o2NAl9D6H0H3H2V
+VvhH1H4H+L5GpmIdAdMH9Jpn2PpnJHpnZBgtWLDPX3gz+swxVPDIjPCManZBgpYV
+VvhLBJJn4JQlLL8K3mJdAZ9L5H-L3H1H2H3H0H6GYmpNB0QQ9-rp+llmWscCTcrV
+VvhnFqXq2pm6hIY9GBWo0YQwf5B9-2ASR-4HAGnm2kYlIl2kolYk3lohQZ8H8K2V
+VvhmpRQl4xQpIxQtHPCMZnqslPDkCDDMKnp9qna7gtHPBN3nJJQlZLAJpmZVQZOV
+VvhH7GplokJlIkol2lIkYm2dAhKHEb5k55J15589WUqyXHLGFqsMhcXMXqVRxgOV
+VvhE+2+bTFYqogxRB3BFBBB7BJALKGpq2dBZMHOJpqoPpr3HprJBhpWLSPX3hvCV
+VvhDSMKrZ9qrK7hpHPQN3r3JRhZLPJpqJVRVOHMGppYo3p2oYoop2oIpodBdKHTV
+VvhbK1+QRMAQQci81TuBRIsDQJZqpJhdZPPJJrHQkztroNBh9DLHFHIHHHGHJH3V
+VvhpYhRV8HNK2qZRRh4xRlIxRpHPRMZraslPSnXra3htGxhpWPRIqr4FRlJLPNJV
+VvhqpRRZMLMKYq2hRNB-RFB7BBBFB3BR8HOJYrtpg0Yq+llmWsc9zcf+O2-YRSNV
+Vvh5JFnMREwAmoXoY2R6xFB6xNAHLGopl38DL6YVBMXFoplIqHL3YJBMLF3pFV2V
+VvhHJ4IBREdIZp-dFLI4p3RAQIJoVo33R2R4h2h-FLE9FIJo-oZ3Q5HIJgRF0KVV
+Vvhp37N5JIZUhJ1K-pJF55KFIMRNJFFpoR15LG26hQuAGpnhRQx+xQx6xIx6FDGV
+VvhHG31kxAZFopFaRQE4F+Og3PN1++09GYuy1X2DOHMLNLNHOHODPDP9Q9Q2AD3V
+VvhfHb0NgReL7D+spmVkCJQcQ1ZL85+tJmVkCBQcQ5pmFkZm0kom-l2lllYlGlYV
+Vvhl0m2kWmYgwlLDEkBBwikJhcA++6h8HfsCB+xZBVRRRRBVBYxYxYhchgElgKhV
+VvhCQ7alqdQYw1XL85+tJmVkCJQcQ1ZL85+spmVkTL750L691H652H554H394H2V
+Vvh96H098Gnn3Qx1+ormv-Oqkk++WodCTUrmVqnqIq06hMY9HBWoGYR+f5C9-2CV
+VvhT3fHb0NgReL7D+spmVkCJQcQ1ZL85+tJmVkCBQcQ5pmFkZm0kom-l2lllYlGV
+VvhlYl0m2kWmYgwlLDEkBBwgA-Ir+k++WodBzUpoXUxpKLQJKqqJhlJLSBn+-6BV
+VvhGU2doKPKOZq1nXLN5CJRYQtJqFnZLN5CBRYR1pq-oJpmoYploopVpIp0pIomV
+VvhpooGqIgxhLDTk-7xc9-erEk++WofCTYsoHqoqZqJqIqYqnqnqmr0rF1ElQ9EV
+Vvhkw-Mm4dgcw3Qcg7gYQFQUQJgMQNgIgRgEQVgAQdQ6Qhg+glQ+Qpe5DKFo4QhV
+Vvh3L5GNFoqERJW9JMVpp2RVhdRdBfYLOHOt3qYqaozlQT+Ehs8++6Z6mby85pBV
+VvhHJqa+Et3+EpRHLoZdh3PPExQOpoJjYLFPtLFOZoJhR-fL4lPP3hh-OPFpx9IV
+VvhpTI-1ZI--hfxHJ1+exwFlm-0E0jx8R7s5IS-o9Ih8p8oQnDEFnAuCm2x+v6HV
+Vvhcx-QDEKHoYgx76HHCYonTop1ZBErDK4XpVTWHK4IpVRRINLJ3prprKrarKraV
+Vvhr7qtqgqAphDIoxDHpBDIohLGpR5KoRWxaxhxpxphthrWLTJS6RV55MFFq1URV
+VvhUpwhR59LFHpXUxMqDJG1pINBB7HHFpoXdR6rAWl8AWl6AoRPAoRN7R1E7R0lV
+VvhaB6NXE0kOdUA++6h8nPtBQEsDEJZnpJgtZPDJJoHQk+Fz3kh11k3X6OamXkJV
+VvhmWkamFl3m-lKlVlalGlql-m4klmZkVmqk0n3k-nKcQxN5ENmoJQR7Z5HN-pKV
+Vvh6hJW5LIFq4qZqYqiFRdBfYLOHOPHz3lkk2nU0++05VgezGanqoqJqZqYqoqnV
+Vvhr1r0rGrF0AXHBYo-gvGIdNG3d7GYcQHOsYoflZGZV7KIV9Fph4KoJi92JfJKV
+VvhcFF-7M2YEHJGFrRoEA-AsEU++VsP8jodqXqYqJq3q2qIqXqXqWqmr-0DXHBYV
+Vvho-gvGIdNG3d7GYcQHOsYoflZGZV7KIV9Fph4KoJi92JfJKcFF-7M2YEHJGFrV
+VvhRoH+Hy66++6S4mbx8BIRkxdBYW9L70p1Mh6d5F8lkh+EcMonNB+PCoZ8KIVOV
+VvhGId852qi7B8wNIdMGJZ6GoRPFZh3PWl3OpJe2IEGK-722pIYRrR2k2TX0++0V
+Vvh5VgazGLEGFi48WBWCVRv4Y0yXHBYo-gvGIdNG3d7GYcQHOsYoflZGZV7KIV9V
+VvhFph4KoJi92JfJKcFF-7M2YEHJGFrRoH+GCE6++6S4mTx7fC1lKKpJeNKhJLEV
+VvhBn0xXHBYo-gvGIdNG3d7GYcQHOsYoflZGZV7KIV9Fph4KoJi92JfJKcFF-7MV
+Vvh2YEHJGFrRoH+ICI6++6S4mjx8h7RUJ5K3lp-URoRDW4Fp-QRIY9ME8WBAqHEV
+Vvh4nh7GZZ6KYZ8GVlBfWHGj4J8K2ZNG2h5KoNPFKsgFKhJOV322ZUGF-BJ75RrV
+VvhFA-JtUiCCmgc4joNe8T1QqBHYPB0UrGX2tBpZfBJdfBYdQFVlQHWpYo2oBqZV
+VvhFBhLHNKIq3dBRPHKL2pYo2pJo2oV7QLG2ZkVDE2pgX9-JMBGcLJHUpCsld1+V
+VvhCiQ555AP40Pw4PbEC0Z93nd4CpF8J2l1LE3IpjLKHKtZpzHG3Io-Qw4HcPBXV
+VvhoL+RxBRRZBXXHKH8o-q+k1zc-lln4lQez0a1popJpZpYpopnq1q0qGqF-sPFV
+VvhF1gs8HYrCYIwB2knL27B-D3R1R5aLKxB6IDF3XkMCGcq9FSEk1zd-lln4lQeV
+Vvhz0bLDKHJLILIHJHKDKDK9L9M25hh32CnUdCHQuFHkoH1BQEYo2wJoBoSNRPoV
+VvhoVEx2KD-Ut8XMh3tk25e-lln4lQdz0XG5MDKHJ6WomEh+q8mYO8lUh+EWKoIV
+VvhEvC0YtBnd3D1FAApl0HEHlLErFtZpjHG31oFMw41YeBWoLb+Cyg555AP3mTwV
+Vvh7cC1VKJpJaNKRJKHQkcKoIEvC0YtBnd3D1FAApl0HEHlLErFtZpjHG31oFMwV
+Vvh41YeBWoLYB+Wv+Flm-2C8jwdMvGJdOGogwD0oh2334y7xNtIbZGSJ7JQ5F1+V
+Vvh8yo2QQUF3Gfz8RIxFBBR7R7BBBExExEhIhMEPooDXHxRDZHHtIoyJBBQmB0+V
+Vvhk0ni-5562FEdzmXE5JDHHG6Wo0EeBWUd3mgJ9E25FAyB9poiJB9ZHGtIoZj5V
+Vvho51+7iw2QQUF3GTz7aC1NKJJJYNKJJJnQkYIoDXHxRDZHHtIoyJBBQmB0A-MV
+Vvhw+U++VsO8zkepVoIMh00DB1E2do-Rv4KYN6IYM6oonFBAJHOHODOxBfnloGHV
+VvhImFnZqCqIwN1o4BB3T7B7T3R7FHGISBR7FxR3GLFFDHEFXl6CYcsDEBIorn+V
+VvhBj26st+V5WPz7RB75FVWo0BWDE3roFd+oYJtYmIsYVUvIFZ8OYfph8sol7tIV
+Vvhl7tIl7KpLEDS9F1+FD66++6S4Gfw8ODNHLLMLMHNHNDODO9P9P267xApD1YtV
+VvhCnQwBXo2FB3D7B7D3R7-HGfXoezFIJoIDoo2IwFnd7C1kpHGSw-3wkU++VsNV
+Vvh8jkdqHq2pppZpYpoq1q1q0qGqV03THBHktCHgrD1Mx-2HFHmHGHlLGEIoesxV
+Vvh8joJ3R31xB-3D2QuGHUwBIobgA-5x+U++VsN8Tkcp-qXq2pm6hIY9GBWo0YQV
+Vvh8lch+EZLonIwCHYvBnkqDEF2oIwYoYwJoY3B8iDGfx3FLFEzHEFHl5CYYsD1V
+VvhJB7vk29p0++05Vcaz0L2YOVWYXMXYLSVd+i5p1Ix+tCXgsD1Qx-3HFEzHGEjV
+VvhLGEYoZ5XLGITLFIZoIHoo2MwG1d8C1o1JBBwk21q0++05VYbz0OXUuJZZJO4V
+VvhJdJJgrA8xxApD1YtCnQwBXo2FB3D7B7D3R7-HGfXoezFIJoIDoo2IwFnd7C1V
+VvhkpHGSw-Wy+U++VsQ7joTrGrFrFrT5R5HQloXJR+tD1d8CV6dCW6rClB3GVF3V
+VvhCVMoGVMoGFN2CFR1G0R1G-V1FlZ1FVd1FVZ2FFd2F-gqAmcrAlgsAFguCnkeV
+Vvh9FFXoFBxAhoRoRrlrFrUk1Tt0CCE6FceymaXqYq3qJqIqYqXqnqmr0r-00H2V
+Vvh5tSJxPJSJAFSJAFS7AFjGpN82IQt2JUq6dNoYA+ryUXXY02O8jgdqHqIq3ppV
+Vvhpoq2qHqHqGqWql03H25tSJxPJSJAFSJAFS7AFjGpN82IQt2JUq6dNob+Cjg6V
+Vvhst+V4Wbv8BERgxZBUW9K70onMh2d5E8lgh+EZYl-yLZTKpLZH2LZH2LWH2PoV
+VvhhKGV35CF3MBW8KR7o1Dw0CCE6FcbymOXUvJZdJOKJeJJkrAA-AETZtLphJtIV
+Vvhl3tIl3sYl4x9JYcFFnYFK1MWZbGEg4Xx0558606q+0bDDGHFLELEHFHGDGDGV
+Vvh9H9I285-SJk6aJkIk3kGkzH-52H+53KllYcQR795GFm3QQd558x459J-nIAgV
+Vvhp15CEVnp2R1poIoXp0pD5IwREREQcs57JVmZIgd459FFnFIgxQz+Jjs6st+VV
+Vvh6HQ-8R3BjtryJBzZHTE--3PJEmIxB-8HoJhB-B+wLEGooJsuHGHXZB7NHGGYV
+VvhoJZB7NHGGYoIhB2wHEDEKno26NDFElMxB2TJsYryJBxRfWoRMA-JzkU++lsTV
+Vvh8jwdpLqHIxJ5DHG2oIdB+vHC79LuGph9H2dB-7HFG2oIRAUpoNMxJ69IG2oYV
+VvhYx38HEsYhAx9KiJAKTH3dAGoEZKoB2H2AoH2EoCMEXGNNP0kNvU6QQcU6XA+V
+Vvh7gAsD5JZlZJgJZP4JJm1QkrQ3tL+WNL-H+L-91xA2QFA+QJP54GVloYgR756V
+VvhJlmYQQfoMQhI5BEmnIAQt05DIFoDLFHGDI9IwRHlp-p-mXUQZK58JGmYMQh3V
+Vvh5B3Gnpnko0bL-lln4kwPy-g-+R5Gkg90kg91gvCnd8H2kxwxDGox6-+U2-+EV
+Vvh6-+E2FH+9jQ555AP2Ffu4Z5I5H9H9H9GDGDG9GDGDGDFHFH2lADEDEDEDEDEV
+Vvh9F9F9F9F9F5Hk2A90JJM6mcezmbLVapYQWBFooZYHFCaFR+uNJl8NYhAG-oDV
+VvhH2qCJAHMH2pD+Hoi7AHMtIlBXZH2qCJAHMKppAHFjEHFgA+r1+XXY02T8jwdV
+Vvhprq2MhF85GCno1hAGZh9KokwHRtIrIqTr9Gpjol8tIl8tIl8tIl8KpP2o-o2V
+Vvho-1+BUo6st+V60fz8RS09IFooYVR2tLFCZo2dQsYl9tIl9H2TxnC7AGyJAGyV
+VvhJAGyJAGphLo1o0oGoG1EIEsBJJUmA0fz8E3cZk3pMYFW+HGl382-39Knp8OoV
+Vvhl9OZhAKphBH1lBE-nZHI+QHI+Mw0mop9KzHIl8tIpAGiJBH2fZHIl8L3hKpBV
+VvhDF+EA-+U2-1EHUwBJJUmAGfz8E3dW06-BL32R+2IcVG3+EGaZE22deLIheL2V
+VvhlQHDHIl9tIpAGopAFz+gnWHIl9tIpAGyJBH2jZHIl9L3hLpBDG+EA-+U201EV
+Vvh8G66++6S3-9t8HCHFLIqNVRL7aMn2LAFxlgS7VgKwP3VgK4lMP3VgK4lQ8U7V
+Vvh9EJJJVED+zoCoh+dL+U++VsI2jAdQP3VgK4lMP3VgKwP3i6P3j4lQFBl2nNaV
+Vvh7pQKNXJpEtAki+Zv0++05Vo-zF1Fa+Zw2++1D1g-zF1Fw+xdN4JiR4ZaOKJmV
+Vvh63FBIonk3KBjN4ZiNrBXO4JhNG-INJUUR4JsRD+ANaxiR4NVMqJWSLFZx+1eV
+Vv2++1pxYnkV
+Vv+V
+Vvend
+Vvbytecount 14764
+Vvcrc32 ee61d22a
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.518pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.518pk_vve
new file mode 100644
index 0000000000..71a26b47cb
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.518pk_vve
@@ -0,0 +1,423 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.518pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX6m+8+++C2v0Uk+-mlD++QgHu-fEEk++XMlAjsllGonoYoZV
+VvhoDPDxwuAuQnm7gjmBgcYT77KmD7alz7qlj8KlD8akmg4kmg5kT8mP+wfBfwfV
+VvhFvovJfqyj9yw8rOvCrOv8sStwfdfXmiqhmj5hWjKhT8yOoCyOmOxSdieOogwV
+VvhWmiEk6300pJMAmwlzH0+2RE-HLTGTJTIPIPKPHPKTGPLPGPLTx3hVjo4qKzEV
+VvhPMTEPMPFPLTEPMPFPLTFPKTGPJTHPIPJPGTJP7pxrMrxNhFxFhNhBhRh3hVxV
+Vvh-hZh1qqLnqqahhhfsaqbhhdgPNSqqalhZwPMTEPLTFPKTFTIXFXGWU3g+HoUV
+Vvhg5710ssvB0wny15Ab-56ku94S2QwFg6ZH0P372kJm07A3QdvPAOanKZgxMPEV
+VvhK3oIVh6rPHBjPIBLp1JhIZTJ7KpWHWTPtrr4rKpWJxIZxxEbPI7zPH8TPF8pV
+Vvho0kJnWkan0l4mWlam0mJlHmqkXnMVB91ptmUk5F211XaBnAlzH0+2RU-HPTFV
+VvhXNTIPMPLLLPMLKPNLJPNPIPOLIPPLGPQLGxhlh5WPRPZlhtfPTPXhhtvPSOqV
+VvhrqjqrbhhtgPRT4rKlhtgPRPEPRLFPQPFPPPGPPLGPPLHPOLIPNLJPMLKPKPKV
+VvhTIPLXFTH+IpE2RX+NoI8st+l9n5xA6w-fFTIbFTLPFPNLFPOHXoKqntB-hohV
+Vvh-h+f9Xlh+hpgDROor4dRrxXROZrKhBpgDQsao0rKo0o0hh+g94rWhhwfsarWV
+VvhlhowPR94rHnqr1o4qoo4qJo5q4mBGa+QM-hkg2R40b589mslzH0Dqg7wKA7wV
+VvhRjkamYsw7ggyH-PB9-P-8Wsw-g2gpg+wpfHAOZnTmQpeLBOonKk1nCFg2gphV
+VvhjZPPt4qrqdozmgmkRoQAXXgs9nDsAQmQ2QX1cgNsFnl4kWJA7gIYH-L66YkJV
+VvhmbhglePBOKnpVh-MLFG4oXRhAqxhEpTIBKpGJxIZPK7C7xjZTQxwXCoMFh7ZV
+Vvhxx3ZTENy7h-cxgxdPBOpnKhglg-gdw3gUVL1L4AYl4kXEwO6JWmQGFn7mf-+V
+VvhG+k++XMrATokXwVwX0X5X6T6T7tKmKmSJgZgbZP7P7P7P8zJmi7gZgbZP7P7V
+VvhtKmKmSFgZgZwVwWQOQ57P7T6T6X+7YY3lloO5X5yA6zNoNqLqiJhfZPOtKqiV
+VvhJhfZPOtKqiFhdxaR9MXNU9+xGUUstGIZAjkkkwf1mQmR3x9ZPGtKoiJh9ZPGV
+VvhtKoi7gBA-g7fP-SqkDWakMdQ7uP1Gql0kJlWdgV4L9kQxwikYIgAQQcsCH5xV
+VvhA6mA52X6kQD1X7f4T9P7PAH9PADAP99CP89DP79EP69EP5DFP49HP39IP29JV
+VvhP19KP-DKP-9MP+9NOmqacxdcLONrq4SBVa6LpqIXPLMmNhNW7qpa2dPIMGdhV
+VvhGA-hBg7hDqkqoal4o4lKoDP4PDxgRgtgVglgZgnqmamzP9P7T8X5b6iwawNwV
+VvhX+lbg1hA0U+09GYlzH0DmgqBJxPZPKtKpiJhPZPKsapzP98amWfqmmfqmWjqV
+VvhmHfqmHhgV9P5KqlKhwFuX-dDq30kqYoCeep0En5xA6kRL-X-pA90XHX6XG6JV
+VvhmG3R7wcVLF6JmW7R+VL86Znm7Qfm7QsXL76pnGBQcYLA6pmj73mmFQcYL87JV
+VvhmWJQYZL77Zm0JQfmNQQaL87ZlWRQcbL37pmWRQEcL783l0RQccL183mWZQ6cV
+VvhL88JkGZQfmZQ+eL78ZgeL88pceL8wfKGhQcfK0k3mWk3Qg-QYg3K9+L8wg3JV
+Vvh9-L89-J0kZmWkZAg7Qcg7G91L791IWkZmWkp2gBQcgFwBQcgFgFQYwFQJQVQV
+VvhBQFgOQ3AGA53cum5l98wSA04HUk++XMrATokXx1Jox4BSRNxZRQVPNDM6KqGV
+VvhqT6aq0qT6qpmqD7KpGqT7ap0qT7qomqD8KoGqT8ao0qT8qkhXmo4chbmoKYhV
+VvhbmoaUhXmp4MhbmpKIhbmpaEhXmq46hYhVl9N9NMGqGqNqGqcq0qrqT9QPN9RV
+VvhLMDRLLLRHJbPDGpBUh9HqVoUg5FD1558C0wny159bLkx3rTAP+P8L2L5P4L3V
+VvhL7L1L9L-LAOpnZdgtcPENpoKNh3ZxhBjBhFWTIMapKsVTJMKpQ9XpQ9Wp53xV
+VvhFWxxBmxx7nTGNKoKNh-rPDO4nadglfP9P-P8L1L6P3L4P5L2L8P+PBNroQHKV
+Vvhb90kIp+8st+l9n5xA6oQPImLkblrl4lalalKlqlDP6P1xgVyH-P7T-P6T-P7V
+VvhT-P7P0P6T0P6P1P5P2P4P2P3P4P0T6nQf8nTPQtKrCJhnYPQTPbImQv6nv0QV
+VvhIEllmXUjEDUlmtpwDFRrn4k4mZl3lqlZlKm3kqmZkKmqhgpOPCODPENaoKJxV
+Vvh3oPGQroqBhFj7xFj3xJVTIQKpQ9XpQ9Wp53hJWxhFmTHMrobBx7Zxh3bOok4V
+VvhVeSKdN7GVPNmQaL-JWUZL1JGUnL3J0YVP5ImZwdV8KnMJx54ggSGGmoYgh9oV
+VvhchBMDHJoopJRH1pA9JkRT+pvqNr3k9-uIUj55XImAjokXDmx9CT+TAT1P8P3V
+VvhP7P4P6xgRgTqlrlSFgVwJgRwJgVgNgRwNgRgRgNgVgJQdgBgdg3wnAngbFP+V
+VvhLDP0HCP0LAP2L9P2P8xgJQfqlKmCJgJwRgJwVgJv44lMYcP4SGVgNs85lbUbV
+Vvhb4Nm97kKEnmAGhtag5BH0CCE80Inz154WVkw3mkYV2D+H+AYgwAlGXlKcwROV
+VvhD6GHmIVAZ6H8C1mmXommXpmWVRFhBxBx8wz0mwL7lwT5mAP7lQn0nuocoboqV
+VvhpDLJFiAgp49BBmn2NAh4H9BomXVQV6P5CLl2Z0H-GXJMH+7wD-4tl9-0J+iCV
+VvhCnEiATQkDxwrhvQZkbkJ7ABgB0D2P1EWlKl09nlKl06gNgEWwgJgIVsmlalGV
+VvhmCJhjZPPtKqyJhjYPPTObEzDkvVCJEk++XMjAjIkz6j2OAWOT9L+PBD-t4nGV
+VvhkSJgog5ZPB9-tKnGkSJgog9WLB91xQkgFQggJgcgNQYgRQUgZQMghAIgpAAgV
+VvhxA+x3LLIkRZww8-pJUk++XMnAjQk4rhgSqgqewabk3gak2gqk1h4k0hKjnhLV
+VvhjWhzOx8sOw8tSv8uxfcfjqiGj5hmjahXjahWjzOp9+Sn90On90xf6gBf2gJfV
+Vvh+gJe94OHlaYgRr97NmmTNWmaIgho9AxX9BMWna2wuR1roTPHxBHnlPXYJl-lV
+VvhmYd5AjQklsltpslel3b3f3ablrmJk4mKmXkTP7P890T6P792P6P792P6P693V
+VvhP5X593P5X494P46KlWlalW3gIgVgEWP396P26al0mKkmBwAgZgAYP098P07KV
+VvhkWmakWJg2wdw+aP-9AP+7ak1n4gbP+9BOmVeDBOXVe9COWZdDCOHZd9EO0ddV
+Vvh9ENndc9FNmhr9FNXk4Mh7a9-NWoaMg3Z9HR0kaIhFY90N0pKAgBY9JMml46hV
+VvhNW93MWpa6gJV9LMGla2hWAOBZwSBZwRxdgZhdgZRhQdRhQdBowhBowgxsgohV
+Vvh2806K+k++XMqATskasepasaqgv0oesWrOwSrGySrD+Sq9-Sp91SnD1SmD3SlV
+Vvh94Sk96SGmLUghqD9RHnLEgtn9EMWoNosorpKpLpKp6odoH3x+XPD75nGNgkbV
+VvhT8C4mHZwUf-gQf3wIfBgEfFw6vJg2vNw+fVfwfZvofhfkvhvd9lfVfi9GkhvV
+Vvh0jhf8sKcMpYA++6qAn5rADi9OoKfmOWzKmSzCoSz8qSx8rSwCsSv8tSu8vSsV
+Vvh8wSrCxOr8ySp8zSo9-SmD-Sm91Sk92SWlbUwNrD6RWmLIghYD9QXn56gvto5V
+VvhoSBh7R9YPGLGt4oLo6mjiPmkSpc7llsg8n5wA8zJegFeX4Oqlqk3lrk2m4k2V
+Vvhm4kHm4kXlrkWlrkmlqkmlql0lalGlLlGlKq4q4q4q5q4q4q4q4q5q4q4q4q5V
+Vvhq4q4l0lalGlKlWl5lGlKlWl4lmkqlnkam1kLm0kam1kKmHk4mIhwVA-gVPP6V
+VvhOalsZgKszKb+Gq26++6Y6Fzw5ejLohFLPFOJnrdQOphQLTxRvWLKoRBpLES3V
+VvhlOKqhOP3Zh-MPFK4oJKDoJIVPENG3h+FFG7f2YIWOGB274MoZgRuSYP+IK66V
+Vvhst+c6H9tAMLOfNjSxhvZLStJrjLTJroJHAIYNeWpWB-LPHJZp3PWLJJCJRNiV
+Vvh6ZpaBRNILJN3pJFRJYLJJKopNh7LEGo3Un8pV2Bacqn0aB5+BaA555AU5-zwV
+Vvh5h8h9GhMK3ZbKLNORJlYLEJ4qJqTPMsqqCBhfpqaqjLI7JoWRR+dKmhaHEoBV
+VvhK80kJaE6st+c719wARBQugqzoatR7R9ZLGxQNqL1k2L-NY7PKn3OL0OZkqZQV
+VvhJML4JqlZRQRKP4JplpPXP5JSBgRLxQRLxQNNL2OJkrdQ49Km7Q-aEbkQ-9hrV
+Vvhgg-1NEQQQm+Q5zkSoLpQoZJPKIZ9G2o2NR-ILFIqoJBR7GPGIZop3hBFrVrGV
+VvhPMsqqjLOLK33p0FRAaHH7ooGZ9CpNR1EpLj+C4M2st+K5n9yARZxWxNHLHJ4V
+VvhoZJh3JTEJbo3RR-NDFxRnZLQxRTxPJxRnZLQtJrCJRnYLQPPXKzIoQ-gNkU+V
+Vvh+WEa9zwT+HHJRrofAnH3J-73h7BZd8FXdAHIHEHHLEHHxR-R5WLELGLEHIH3V
+Vvhp2lBN8HLGIq4JRUWjO3LqyAU3n+KpRTMpRXHqh-R3vHJOIppXoqITWHOFzHNV
+VvhGIpohBFR-B7R7dPKpBihM9-3O+XXY0UYAjslkJnenPojPGtJoiJR9popRwJJV
+Vvhj1InNQ7G8Jk36Q-PIFkJjqkZjpkpdg7Pt3kpfZL1KiFQBOP0OLkLLwFAEB+WV
+VvhOEFlm-EGATsklBOri7WrhhEABMdvhwtJnZLCJQt3lfRz+FD+D4c2st+K5Hw4V
+VvhABdBhhZxaBSBZxZhh++GpRLvqLqiJRfZLOtJqiJRfZLOxQ8ZhMGqRPRYhqHEV
+VvhNIoJJBDBOBH+N4g6QQca7H9yAR-Ruhqk2jM-9ZI-9ZI-9p+HxNo8Kso3hh3QV
+VvhHHL0pJghNNDLK0qJQhZKDOJGr3FBhGPPIG3RdnHNRIq3RRRMHLK3pZZBNNLIV
+VvhKop3hRBQHHxQLFP4lwRxBB2xBB-+o0-g-5563-6mzX5JWbjwPZlQtJnZLCJQV
+VvhtJnZLCFQOrTk2W1+HKoBJJUwC-zy5eJro5ipiPanBZMqL56dJ0ZQIVlG53hFV
+Vvh5EIFo3jqoKoJjpoZoZdh3h3Pt3oZoZfZLGLGKiFR7R7OPFPFOLo5o5LxBBBBV
+VvhAA+oPUXXY0UY5zsSdLSvKtgnNQQWZQIVlPIFo3jqoJjpoZdh3Pt3oZfZLGKiV
+VvhFR7OPFOLo5LxBBD+F4w6++6Y6-zw5h7xbEp3Nh-OKoo3ZB7LLHFZp3HppJBhV
+VvhJWLKPX3hPC9KMKpZBRJXxRJILIJZoZVB77LEGpdR-aLIoBaB2A-LQ+XXY0UdV
+Vvh9E2So3RxConFgYNhGPLHXELGPGPFLILFxRFh-RJQtJpaseLKOzLJP3pJlRJgV
+VvhLIPEPHLFPGLGTELHIGdhBHBapJHBRKXNsZ+KtJ+KxE3b+EzHrA-FQEVlm0MVV
+Vvh9TkSobYglXdaBHVe6oRg6XRR2VFaoaJhBYxhJHxhJHsqpZ9XPKJ3pZFhJIxhV
+VvhFKLHNpoLRg6JVdAZZaEZn2LFRpry7RvZLSxRtxXxAg+kQUN2FVkQ5zsSZKNeV
+VvhK3cnBMMWJNElJdEVNdEGR8EFqKqJqI2RbYLNtJqSFRZhWBDxGw-2QkNDdVkOV
+Vvh5zsSm34R+HV5RYhKDEBXoHLWHG7JoGJhSRHFoB9BDB9EoRGRRY9GMz9HIjDHV
+VvhEooYBB6oLEBKgpEIR47B-lS8g1Bo-XXZ5-IgyWiy6gPnlWljD3H2L1P0P-WhV
+VvhvqL1tJkyJQDplCBN7C7N7JUbG0RK8JEfb0KEk1Bp0CCE80+TyVtZoZ5vapTEV
+VvhRiJR7KtJoZPYLGJpoKNR7LxR3bLE2JVA2ZV96ZZL6rb2hsOkk2Zq05587WATV
+VvhyVsR4Bu9KAW4oJdh6wLG9ExR2h3R+hBQ9HKmp3cxFO9JO0ppUhTpQhVZ9OJ1V
+VvhqZEhjpAhlV9SIGrjTTM-3E2I+GwxUAVlRkiCCnEl5zcSoXo4rXo3o2SbhsL3V
+Vvho2dQHFCzL3o0lfL0oJhQ9FKagh7OSWoZYVKGoqUVKGpDJmB69JJWFK9KJHFKV
+Vvh9KJGJJ9MInN2DMImR29NIXR1DNIWVG9OIGZFDOWY2hnqhhrplRtB2k21oH+EV
+Vvh9G9Lg2ts05587WQTzltTkqkOWMkqhQJfD6KXmKYghM9BJWnZIh-H9FMGosp4V
+VvhpJpppKp6oX3h+nLE7JnWNQocL98KmGhQUvP4D-L2L-P-WsXw4A7+g4Nt0558V
+Vvh7Wch+FuA8A-wC9k6k6kqkZlKknlpkmmDL097L-99L+99Kmn3cwlO9BO0npUgV
+VvhzpQh-Z9GJ1oZEhDpAhFV9KIGpjTLPNLNHOwxjmqmqnqmqmnoYgtM9DNXnaMxV
+Vvh-JDFF2otpppEk2Ru-lln6-wTzVtzqrP3RB3MDFKHo3ch-OD3ggL0hg8pkfLQV
+VvhLQLQLQLQLQKWo3ggOmlPCpkfLE8Zo1ZR2sLFC3oIRR3KLERTr40k9k+8++6hV
+Vvh915xA6zMkbkskblKz0P6HXkamHtQ3ggiL+PNtKqSJhbZPNt4qLq7oTmgc80-V
+Vvh+EpJK1koAjkllTDJLHxh8B0R+VTC6bnH7woYT97LmXJwcbT685lnZgQeT38kV
+VvhT28mP28mT08nT-8pP-8pSz8qSy8sOy8sSw8tSv8vOuCvSt8wSs8yOrCySq8zV
+VvhSp9-OoD-Sn90Sm92OlD2Sk93SWlqYwRs96RmmaMwdp99RBIzplq-qP04+UllV
+VvhmXUjAzUlmtpwDFRrn4k4mZl3lqlZlKm3kqmZkKmqhgpOPCODPENaoKJx3oPGV
+VvhQroqBhFj7xFVTJMLIgQZMLIgQYQKL9L0spmpkZ95753o957L3xFlPJMjPIQbV
+VvhoqBx7nTGNTPFNqnqVgteLCKqn3kJmpkpmJlJlalpl3mak4nKRx52pdmkg4A1V
+Vvh0llnAWomzX5G9SwxpBpRjqqjTNXNbL6Lpm7hPmBhIYPJ75omJxAaPGwbPFwcV
+VvhPEwdTCwfPBwg-gnmkLmj91P7wgFgXmlLlj95P3wgVgEgZgEgZw9mmqkHmqk3V
+VvhmLeASKkfpflkc1o20eehA0wlz10C9Axwpmm1MwUzMgYq977WmW1vsmj0iQ0sV
+Vvhsw0twfkfXmj0+-8j987i6gYb96BXm0TWnLzAU8+t-Ek++XMrATokXxGnSuStV
+VvhSuOutKiaiiJfdffZOuOutKiaiiJfdffZOuOut4iaibiLiNhtgfdfdvZva8-dV
+Vvh-UiCCnEkATgkXBTCVvmcSzSLk3Zw38T+GbkHykT+Dv3vwzgbjmynSy9vFwzrV
+VvhnzTDxwxwth+x6h6h6h6h6h6fwfMfwfMg+fIg2fEg2vAg6fAg6v6gAv2gAv2gV
+VvhB9+gBO91OGkbYfykXBTwq9-J-kllmXUjAjIlVgdff3hw90kJl9kolOlHJMW2V
+VvhMYZcOH6g-aL+P-JJkJkoJABABHH2D3Eol-lzEYqI3BglHPAHrDTQsar5rCJhV
+VvhnZPQtKrCFhlxiR9wn40kO+U9XXgo8n5sAA9wnCbLTMt4pfoAP8Qa3wNZN4kaV
+VvhRaOpZbOJdcNpddNadeN4heMrheTlT+Ob3vOw9Xk4j0k4dlSqhlSqhXxfOaJeV
+VvhOKROO4VcO3k3RaP0NKFgNmMLmgTEjKt4q5ptnjnA29-Z0EllmXUiATIkkTnBV
+Vvh4RdxjYP5P1P+kg3g00P+OqPqheNzOqZcOadct4ddOKZdOTOaZdOaZPxOO4hNV
+VvhO4k4VcP+O4Rg7MNpkqRaL3JqJQRJNYmIJYL9IqBQpVkR11pdqiFhhxeR5wn3V
+Vvhg6o80ssvB1+myn59jKlR06PAT-P7P3L4P6L2P8L0P9P+PBOanaZwtsPENro4V
+VvhRh3y7LoLsoTFRTTERqo4VgxsPDOKnahgpfPAP-LAL0xQhQFQZQJQZARAVAVAV
+VvhUwdANAdAJAkwIw6dD2CWAdD2CGEe928WEe91CWEe918WIeD-CWIt908XL0kgV
+Vvh7jkg51P0kg3kk3Qk0++07-wkyWvHTMnIJYoYZQGohB-7HFG3oJRB7KxRB3xRV
+VvhBjBhBXLIPW7hFWPIIiJhFVt4p49qoqBRFXxRFIxRBJLHFooZRB76LEKIlOKZV
+VvhlMLFJJpQq5okk0Yl0++07-QjyWvK9LHILHSwZmK1RRJRHZLItJpCJRHZLItJV
+VvhpCFRFhC5+V0kLn66++6Y6Gzw9gJwj-lYNgEuP-9-Omkafml4VABcP-TWOA-qV
+VvhT-RbkKVQ7gtwvqnanpnqnanpnpnpnpnpnoo2o2o2o1oHoHoHkWkHkWkHkmk1V
+Vvhl0gwEf948WlXb9bAXBTwqA-RAkU++WETADgiospx5GJao1hP9FKGoaRgNrhjV
+VvhO9NblbOrVAPQPPxhhhhhlRhRhhOhWE2IrprZrZrTPQsrIxBnPGQjXFQco5BxV
+Vvh3nPGN3oaIhJa9HNnoKYwL3Rh9Fpsog-OB+U++WET9zkirXrYrIrTLQPPTOXNV
+VvhXNAJqG7RUXLL73pWJRIoLJBJpGNREbLH83oWZR2sLFCJo1dR+fL0lP9EKXlOV
+VvhDEKHoJYh7M9HJmp3M15XpZrCFRlhiBHxMg-OBEU++WETADciYhIdKqbMfKjKV
+VvhnIoR9H6qpz9TtGrz6-+ZTI6goW34HFGYlAGno3gR7BvXLRsaJB7ZPFNDTFN5V
+VvhoJJh3ZLGJWpJMhFLDGKGoYgh-ACZoINRLBVxEA-cBUU++WETADcipbqPpJMxV
+Vvh799EGnl8OYdtGrV9S2o4RR-MHRLQxRlhlN5HJNhYmKAcG3APFa6QFa2R33XFV
+VvhJ5oZFhBHxxBWsqp47hBXsZp4BRFILHNTHHJYoZVB37HEGohB+uHGFZpAq5okV
+Vvhg2sr0++070+lxWx0oXoR+x-AxQtQtWmWMgYa977mm0UgQc958GlWoT9F9F9FV
+Vvh9F9FDF9FDEDEHEDEHDxAzpnjLCPCLCsanLnTPBsrnDTCLEDBk4cs0++07-wkV
+VvhymvITMnIJZoIdADEGXoIYxB5HHFnp2sqHIFZoYRh2sT2W8GcV9dIo87BDEpfV
+VvhqOpx1HEeo2KfFuZ8Zom4HGR2p4DopZAxRGsYq27BUnHLEopnFBN3HJBYp1VBV
+Vvh38H2lLLHoBSB6A-dCEU++WETADciorqAp3NB77HEGohB-7HFG2oYRR7JPHFJV
+Vvhp2FhBIxhBiEap4waoqBRFXLHR2orFR2FNIo03ZHE2KR86aV66qb2KtNRlhnpV
+VvhrDLRG2oJRh-5T2VvGLd8OYgwHE8ooXRBLBVxMA0F7+U++WETCjcppy6hwhqBV
+VvhTEp2AXHEBWIvBmMtBmUcC0Yb8GYa8WYZCWNJCWJZ8WNjEu7LF77ZJ77nN79HV
+VvhJmp4MhJo9JcGpgph9IoxHGpB9KoBSxQXTJ7KpGNRIbHJ82J682Fb82Fa8HHrV
+VvhMdB4QdB3Ud7GgcBGcd7XYcBmYbC0YaCWUZD1MYDFEm7BHEq5ri6hwhOkfWMAV
+VvhQQcsB1HwAghE2MroEhor9PC0qYUhboYhXpYhV89MGGq3YhVM9NJmqjJWqpIhV
+VvhlI9RImrZ6g52kZ2g92kbldlpm4mJmHmpmGmqm0mslmmW7QMgcXL39874kmmHV
+VvhNQAgUrP-96C4k0m2ZP96GacgRPKGlpk4QgVQ3K96P-N0mKkaAgZgBG97T1X2V
+Vvh7Kl4lGJgJQIZP3P17pl03Q2rP-AokGZPFJYvNZVZH0kQ0wOAJw1+FHw5XXgWV
+Vvh4H9pANbFoNG3N9J1oJAh7GHFnEoDnB1AMYo4pKpZpZpZpZpYpopoq1qDDMDNV
+Vvh9NDNsWqSEhcEbYpqpS8BFxNRUxL+Fns5XXgW4H9x6xExVRNxHWXJPLE7sRfYV
+Vvh9NDNwhYxYhYxYhYxUxVBRBRRNRNRJhNRNhJh-0PAoAzB1EnFEKoWBR2ZH1RLV
+VvhKR5Eaf+M2+Flm-ED5zsSdJd9VyKJbZKSJNt3ZcRB6A+i2EHXY-MO9EMSq3zGV
+VvhjKTZpppyJRTZLLtJpyJRTpYeK3V6NpVqG5N8NIhJHEnHXF1+OlY6++AY719yV
+VvhARWBrBZJPKGJp2dRBALFL3oCBR-jhR-gLELEL4o3hh3OPFKZopVgd6o9FxRLV
+VvhLKKIp3hBBQHGL3oS7R-QxR3fsZoZhR3et3oadR3eLGOZIcKpF4OpBKL3BJL4V
+VvhBIL4F1OOKfdpoQ-f4UiCCnEk5zkSex3h9Gb9JqJJKKZHGIRuIIdKSdl5Oro3V
+VvhNQPFLOPFLOLGLxZh7RZRBRbRoE39YprrRRttLROpr4lRhh-Rdh3Rdh3hIGPGV
+VvhPI6aoLp07h--HG6ql1DF7Kd3CnRqJoR7oenFXISUk56P1558C1ETz-vFXIPKV
+VvhnAoJNMJJhOFYZ7HEF2dLHGEYl4LGEIo3FRFx3HLJTFIppKoZ7hJh7GLKPGIKV
+VvhpZop3hPR3hPQ7hNRXXPKLOxRJhdRGBIILHXI73oY3BEZHFEooWNQFHoGVOFnV
+VvhgvJZZ5HEoAnJTJSUg5kQ0++070AhzGLIDI9I9I9IDI9I97R0lwH3Jpl3hA7AV
+Vvh-g-A+lGYkG77H-6pRQ+ZFok1J4L+7ZJP7pFP83FOC3FO8JFN8ZBN8ZFMCZFMV
+Vvh8pFL9+FYMvJYIw-5FGk3RH9-GI6w-9T+H+P+H0Kol4NQP1lmGAUhExEhEhEhV
+VvhExEhI90m5EtlmY2zAToknDqx6VX0XF6rlJoGBgRB+YP5HE74m1zD7Km1nWNgV
+VvhUwopP89B7amWn1NgcgkbP89wgcP89wccP+9IwdP+9HweOnoWdfDH8aZR9JoRV
+VvhPF9+OJo1k4dB+g-g+h1mkKk0nmkak0cgAg7g+d9191P+8Gkmkan0kj91P990V
+Vvh92P99092P8D-93P89-D2P8D-93P89-D3P7D-94P6H+D4P5H+L2T3ONkckdP1V
+VvhTLP1TKT+jVsECCN7EHDrAReU7k6BFr+JoamBCB3h3xJgPHPMGqp4q2dhJhYtV
+VvhPKPNC4pqqHRhVhYzNhZRgZPOLP75qKqmFhdhgXTOPG7mBhhR6gTPLG94r3oWV
+VvhjrqqoHhxhh-9PQL3jrrBarqqlPTPPEGrqqoHjWTPLG95qaoWYVTOPG807xdhV
+VvhkWTOLR6bqZr0FxZRkYTMPQ7Kq4qnJxRhgbPLLPBrpKqmZhJhcuPIPNGqobq2V
+Vvho4oLpaoKiRCRBb+LpE6RaU4kkAET1558C1+sy1E0+k5n+U9Qamqh7mq4Vn9LV
+VvhPEIHpZp4pJpopJqIooqaoIqclRYmGpqHBNLO7JVBcaJpqGRKLNBqJRUtJ4q0V
+VvhdILM8pBhQgIppmo37hMx-GPJDFIapGoK7RIh7VPI9HMKomp43h6xFVPFDJMKV
+VvhoGpZ7h+hNWLE9LMZkhVHKnpqBODMMpchZIO0qKFb9OJZMxZLJHqZV2DOKJAhV
+VvhdPEWqolxhB3hdBBBdBJBRRJhJBMWLFLK7KVhQroxUvbQ60+U6R+b6EFlm-EDV
+VvhAzYmZ8OC8CBrTXSCBdspd8sZfWGyAwsmoENodcscRtKncB+bD+Flm-EDAzkXV
+VvhcvKLsbW4d+NlrX9CAvsYfWKYfXKSBcsrTXRy86OYY8-l6kpJK1kpEDcll0gmV
+VvhlzCmD4wv6wPWCmD4wv6wPWCmD4wv6wPngXli6v6wPngXljCmCppmq1pyCrCmV
+VvhD4sXgXli6v6wMv6vXLDM9LhHgXli6v6wPngXljCmD4sXgXljCmD4wv6wPWCmV
+VvhD4wv6wPngXlmgml+kBkZ1JJMD1+uxXKp+E8crYR2DRBnUhd5CIppN8HINnhhV
+Vvh-rH03ZMHUx+Xo0C2o0UqG1oGooVB2h77HF9FGYoGoHhB2h+vHF9EGooGlAHFV
+Vvh8oo2oGdB3B+fDHDE8Xp1keHID0ZBJ88IpnYeDNBmcxd2CYr6dBtPE-tALSCsV
+Vvhr1d39OGIQhV7GGpYcu9KCXghIuH0oocx+h78HE9FGoo0o2hB2h+wHF91o2oGV
+VvhhB-B2eHFHF8IoXoGZB7B2dDHHF81pHo0VBIx+bHKD0RBR97nqHcbDOCGRBgrV
+Vvh7orHEsDTWG+FKx+P7kFlm-E83jElF3MyG1EGy0sb7z7mQbBmMqC-UA-H8+MsV
+VvhtFkMGTUpqGpnpnpnpnpnpnpnpnpopnpnpopnpnpopnpopnpzHKxBPWHKsYpZV
+Vvhpi7BPppiBBPppihBXnqC7BXnq2qDDMHMwxYxYhYxYxYhchcgk32d-XXZ5-V7V
+VvhznL0qWqWqHqGqHqTDNwxbnq2qC6xXXHMDMu2zKLYpYpjLKsYpZpi7BPWHKsYV
+VvhpjHKxBNBQxRBQxRBQxQxTnpnpnpnpnpnpnpmq0qEk2Me0++07-kTxXLGDPsYV
+Vvhqy6x-6C17L7p7a7aBZ75NI6qd12ooX6FHKPP9OTKEF3B712odX73NZ7KBa7aV
+Vvh75Bp6sC1oTDPsoqnob+b8kllmXUjATYdYWdTCXtHcyIuDZCXwsua5JXncyIuV
+VvhDZCXtHcy6uId6B+P9+Flm-E83jg5F3MyG1EGy0sb7z7mQbBmMqC-U9+C9UFlV
+Vvhm-E60DY571MRAKB1g3Mj0++070R6znLM9NDxQxTnpzDLwxTnpzDLwxTnpnpoV
+VvhpnpzDLwxTnpzDLwxTnpzDLwxTnpzDLwxTnpzDLwxTnpnpopnpzDLwxTnpzDLV
+VvhwxTnpzDLwxQxYhXE4Hc2QQUI1-zt5aFqJpUsJpNo0vFqLWV5JbFko06v-556V
+Vvh3+shylu2ZbRsK5RqZ+qoZbt5VgwfsWjmjmgf8mgw58+IDEllmXUl2TcNDH9IV
+VvhDH+-wBAxEhAkk8N+1558C1+my15OY-TG+FOJrJoYqXpnpnqmpHrGonrmoG+GV
+Vvh90+HCWoKoGYgj1QuJXkb8ZUv7WdA8mIdHE8mEdLFJmEcLGJmAdHHJmAcLHJnV
+Vvh2dHIK02cLIK02cLIJm5Y83p3UV83p3UGsWVRBM6WZBBL6mZR3b6mdB-r3GZPV
+Vvh6JMZ8ZUmJGMfJIBI80mpaGoKdQ602k6H+VA02k2Jgxph3BSBJQbPq+2QqA+cV
+VvhKkFlm-ELGDkpnWjZgxPZDKtHpiIxPZDKtHpiIxPZDKtHpiIxPZDKsfn+83o2V
+VvhQQUI3oU0BQsftRMxPZDKtHpiIxPZDKtHpiIxPZDKtHpiIxPZCy8wo-hU-556V
+Vvh3+cKxH4-UqBWQr7mTmTW7z8031t6BZF+o-IG0++07+gBw12HRKxaNZRLFpR6V
+VvhG2UVo-MH0++07+sBun4YZMNrRbK3VMGIZ7CmkA+M3+U++WEG0T+h2R2FD136V
+VvhEoJJIJWOPEHG4gUQ3EU++WEJ1T2lsWp2zH6HoGAh+nCnF7BZJ6meo4a60FM6V
+Vvh++6Y4EDo8R9E4lQAw1Mu1UrXAZK6EpAmQW806dHWYW7mAp7MRK1E3VU555AUV
+Vvh2UrtzcxQXLpE2C7QL4Zn+EGck-6U-5563-26yljG93ZdKJZeHE5Hk-lS0++0V
+Vvh7-69wH4VonoJluEHYoBnJ3Bo77AHkl5F69+CLkFlm-E60DAkAoIh6ZEno03xV
+Vvh0++07-IBw13IVDFLIqNXJpBLJ2V3CHJ6FHYpCHMe7lgMk-Ny0++07-U5wmxZV
+VvhgKSHCpExQoKYCLMPJg+MTkU++WEK0D6kB7F4RWRb83opUbNmNqF7Eu-yk+k+V
+Vvh+XMlFDt1k1oZoTPFPFLGLGHGLGHHHHHH6DQhAx7B7R1qnzTCXCbAwWP9wXP8V
+Vvh75mGJgXmNgTmRgPmZgHmdgAf-gAf-w5mgakD8nOz8oSxCpOxjfmzj0hqinhqV
+Vvhimi5iT8uOswfhfQflvMfpfLmjah1jagajLePeah9D6gfY8-zkEk++XMlFDt1V
+VvhnYoJo4nrnqnpo3o3o2oIoIoHom1u9HDGHGLExgzrncndnD6amz6qmWFwYZP6V
+VvhwaP5wbP4wdP2weP18kP18kT-wf7g1mgqjmh5jHhKjPuwjvkfRfgvRfgfVvbmV
+VvhiaiD8vOr8wSq8xOpwftfEvtf7fpuaudfGnm98t0UVQ6A++6qAIDyEgQREx7RV
+Vvh-wt-DBB1mnJAYrH4GHlHgHlFgm+-6WonoYoZoDPDxwuAuQnm7gjmBgcYT77KV
+VvhmD7alz7qlj8KlD8akmg4kmg5kT8mP+wfBfwfFvovJfqyj9yw8rOvCrOv8sStV
+VvhwfdfXmiqhmj5hWjKhT8yOoCyOmOxSdieOogwWmiEg5v11++0BX2zzXvEKlorV
+VvhYx0pHEmB-3fFCLolhE+HAU2X+FE-3RzqrjTRXRbPwWPOwXPN75q0JhTmNhPmV
+VvhRhLmZhDmdh6fPG8roD9-PDwg7gsgBwkwFgnBmwv994P8D4P895T6wgZgTmmaV
+VvhlWmrlGn4lD9BP1DBP-PASdmOP1khT-m+c6121++0BX3-zY0zGIl4Rg7qT0VMV
+Vvhk6KA7qT0Nql2Z++JAhAx7B7R1qnzTCXCbAwWP9wXP875mGJgXmNgTmRgPmZgV
+VvhHmdgAf-gAf-w5mgakD8nOz8oSxCpOxjfmzj0hqinhqimi5iT8uOswfhfQflvV
+VvhMfpfLmjah1jagajLePeah9D6gfaUVQIA++6qAILyFANR0AkpD97mmWUgcd96V
+VvhsWYgcb99BGnMnp+-80onoYoZoDPDxwuAuQnm7gjmBgcYT77KmD7alz7qlj8KV
+VvhlD8akmg4kmg5kT8mP+wfBfwfFvovJfqyj9yw8rOvCrOv8sStwfdfXmiqhmj5V
+VvhhWjKhT8yOoCyOmOxSdieOogwWmiEg9941b58EHwlzH1AzPoW4A8B2XT3LF6qV
+Vvhloo0FgRB+YP6DwwZP6DC7am1nHJgcgoaP89ABamWn0RgcjmmVgcjmWVg+hHmV
+VvhZg+hDmdfDG8agxAeOJohLFph2g-dLED+OYo0k4k0oD9-P+9D90P+8Wkmkak0V
+VvhYgAgBg+d9190PA90wgBggg6gFggg6gFgcw2gJgcg2wFgcw2gJgcg2wJgYw2gV
+VvhNgVA+wNgRA-QFwJdb0X0ZgBxRgBxNv01lkiCCnEjEDUln7kFmACWlbV5D2P0V
+Vvh7IkalGFA3QUWH-L8Sqn4dgpdPDK4o3VR36PGBqonPqp1JxEpPJ7LpGJhMYsbV
+VvhqyRxlhphMZTJ7TTI7qp0TqombqoGhR+g3Qsg7gkgFgcgNgUgZQIwhg6wq6HGV
+VvhkxSRjprMrbrZry7RpRphdxH0pOo+g6160iCEAGx2zIDADTLSxhthtRxRxBxRV
+Vvhx+22+EE-+U+FHxj0T3b0T6P0P8L0P9HXkan1tA3gsg3g2f9Xk4kGnak1nahAV
+VvhpeLCz7nadQtfHCP+DBsakGnakGkGhg2g+g-gwfPE8y7gwg-gsw-gsg-gsw1qV
+VvhnHkKn2kKmZkLmKk6lOPRPQSkUAY8st+l9oHxExdBtRphlxlhlRpRpRpBtBtBV
+Vvhsk20+-3zqw7wKQ7wVg7gdQ7ghCD0PADYkKnWkKkGgiD+P-9CP+DCOonKdQvwV
+VvhbCOZnahAtg+wrWP-9CP-9-8qkGk0k4nmhh+fsanmk4nXk4nWk4nXkDPBD-PAV
+VvhH-P8L-T7P+X3dhphlv03mUfXY12jEzp0ol+FDTLRTPEHqXExUpHKBoooYx6wV
+Vvh+x6Q6U+Hrxj0T3b0T6P0P8L0P9HXkan1tA3gsg3g2f9Xk4kGnak1nahApeLCV
+Vvhz7nadQtfHCP+DBsakGnakGkGhg2g+g-gwfPE8y7gwg-gsw-gsg-gsw1qnHkKV
+Vvhn2kKmZkLmKk6lOPRPQT+Tgg8st+l9o5xEBd7E--bPSRbrcKBm3XSRbraRU22V
+VvhZ++Ljk4h3xGR3xRh3hZR3hdCDFPPDYo4rGo4o0giD4o0rKkxpfHQOZrTqBpeV
+VvhLROorKkxnWPE9RPE9E8qo0kgPS8qrmjWPS94rHlhogPRDDPQDEPPHEPNLETMV
+VvhP6p8M-lU4r1+CQk3lloO5YHyEx+xpRnqr4r3rJrIrJrIrYrYrW0rzNoNqLqiV
+VvhJhfZPOtKqiJhfZPOtKqiFhdxaR9MXNX+Cgo3lloO5oHyExtBpRlhhxhhhRlRV
+VvhlRlBpBpBoxwUkTqR8RdxjZPPtKqyJhjZPPtKqyJhjYPPTObHq7qNk1zC-QQRV
+Vvh4Vt1zY9L5TDRLPTNEHq1ExMpHIBooIYx+wDE5F6AzxbFbNTOtKqiJhfZPOtKV
+VvhqiJhfZPOt4qbqNohWBa+k1XD-QQR4Vx-zY12ZB-bOrNvVMa3WrNvNqo2Z+xjV
+VvhqR8RdxjZPPtKqyJhjZPPtKqyJhjYPPTObHq7qN1+SR+ACCMrAn5xA6+Fq+3BV
+Vvhhx4BZxFhVhRRRhVRNhZRJhZhFhdRFhhR7hlR9qr4oS7hpiL4rahhxfPSTorRV
+Vvh3vPSSqrahhxfxhtvPSP4rLlhpgPSP4rKo4rJoKr4oKqqoaqpoaqpoqqZp4qJV
+VvhpKq3papapbp4psoLok3BI-5Mg7bF1++0BXQzzHvDKlqLYxOpHKmBN3fLCLqFV
+VvhhE+Lrw54lA8AWQRwdQUVP8D76KmWmj6amGmj6qm0mT7KlWmj7alGmj7ql0mTV
+Vvh8KkWmj8akGmj8qk0mT9-OWmj90OGmj91O0mT93NWmj94NGmj95N0mT97MWmWV
+VvhmL2gcgdV9898b899X79AT8wgpgcgtQYwtQVQtAOQkwD3mGkwH951c6XG1558V
+VvhC0x3y2CvDELDxgxgxR-R-B-R-B3B3B2Uttm9H0RrjKgKiphJi4hphZiZh3j3V
+VvhgZjKg3jpdfxcP-NpkaNg7ZxgFjBgJWT3MalasVT4MKlfDXlfDWlL3wJWxwFmV
+VvhxwBnT1NKkaNg3rP+O4jqdfpf-flf7fhPFPZfNPRfVPJPhf3ftbT0hQSPk906V
+VvhokllmXUjFTV1q2rZrKr5r4r3rJrJrIrYrYrX+E6DaRT1oLRwlg-gdQFQRgNQV
+VvhJQZQBQhQ3QlfLCKanaVh-bLFNaoKLqoqwqp47xFWPJPW3xJVPJkiDJki9IQLV
+Vvhp49ror9robBx7ZPFNao5RgxcPCOan4hghg3gdQBQVgJQNgRQFQdg-gpbTFlBV
+VvhOQikXhEAQQcs9oHsEh2E2HrprLqo2xcoDMBIpXRBB7DGD+DG506+2TbLkx3rV
+VvhTAP+P8L2L5P4L3L7L1L9L-LAOpnZdgtcPENpoKNh3ZxhBjBhFWTIMapKsVTJV
+VvhMKpQ9XpQ9Wp53xFWxxBmxx7nTGNKoKNh-rPDO4nadglfP9P-P8L1L6P3L4P5V
+VvhL2L8P+PBNroQHKb9g6PJ1558C0x+y1v9KloLYwupHCmAt3fDCLoFhE+G4RT1V
+VvhoLRwlg-gdQFQRgNQJQZQBQhQ3QlfLCKanaVh-bLFNaoKLqoqwqp47xFWPJPWV
+Vvh3xJVPJkiDJki9IQLp49ror9robBx7ZPFNao5RgxcPCOan4hghg3gdQBQVgJQV
+VvhNgRQFQdg-gpbTFlBOQikWRMAQQcs9o9sEAZ7HFNqnrNwy3XBVMnrNwxbPFGIV
+Vvh+-HdpwDFRrn4k4mZl3lqlZlJmJkpmpkJn4hQtOPCO4o4RR3aPFNTPHPnPIMbV
+Vvhp47hJi6LpK3hL0sxL0shFlTIMjTHQjTGQroaJh3aPERqnqVgtePAOqmqkKmZV
+Vvhkpm4lJlalpl3mak4nKRx52pdmw12q+llmXUkCDUo+UA-wk60r7ghfGQhVcQmV
+Vvhpqo32xNRFhJRRBJRZBBBdh3BeALNAYhRYnKJqWJMHO7ZRRYbJZqHRZLMCJFhV
+VvhUeJ3q0hHPL93BRQh-GPKDEIapHoJ7hIh3WLJ9GMKp0oq3hAhFVPGDIMKoHpKV
+Vvh3h2hNGPE9KMZo0pq7Q9MIpgxRXKXq4BO9NJ4UhZYNmqZNKDNJpIxdMF1qZZHV
+Vvh9OKo6hhATPHFPOHHHOHJHLLJPJHK6ZoJpWJcPLBxDMCtr0+U604EMxYA++6qV
+Vvh9oLpEuUw3Q1qk4k3kJkIkJkIkYkYkW1oyecONcedc5fJcafncyFeweDZOj8XV
+VvhtKfmcyJeweDZOj8YsZfmdTKi8aKh8bOg8cKf8dKe8fKc8hGb8jGZ8lGWCnJpV
+VvhheCvSl0ENBcA++6q9oLpEvNA-PxftvtftPxPxPxA-A-A+w6Uxzee4aO8eO-uV
+VvhpO7ewuDYOj8XtKfmcyJeweDZOj8XtKfmdC7OweLpfWdZfGdqf0e3emeJeWepV
+Vvhe0fIdmfodGgIcXgpRPOXirgEg4bP1++0BWx2xI9B2-2xxRpxh-DOB1q1JBMrV
+VvhHHGHoXk1oVkW+-Czm9l4X6abmpk4nHkSFgog5ZPB9-tKnGkSJgog5ZPB90sZV
+VvhnGkzLA92L993P894L795L697L499H39BH19DH+DFJppA5NTDg4HQ1++0BWx0V
+VvhxI13GIoKRgxqTDVMnMKAxqTDNqoIZ++KfwWwFcm7dwhQ-gow5YPB9-tKnGkSV
+VvhJgog5ZPB9-tKnGki7QogDpn0l3mmlKmWlZmGlpm0mJlWmolGnIkmnok1oJRRV
+VvhH-qLnu-trEk++XMnFDR1loopoaoLoKoJoZoZoYooooonpG+-6Di9OoKfmOWzV
+VvhKmSzCoSz8qSx8rSwCsSv8tSu8vSs8wSrCxOr8ySp8zSo9-SmD-Sm91Sk92SWV
+VvhlbUwNrD6RWmLIghYD9QXn56gvto5oSBh7R9YPGLGt4oLo6mjiPmkIhs8++6hV
+Vvh8H5xA6z6nspLpiJhP7mAj4P+P3P-P2P0P1P1P-xgFyD+P3OqlasfP3TvP2SqV
+Vvhl5k4l4kKkrkKkbkak5l4hwH9lgb6sqpiFhNxKQv7mAX7gC1T2QQUI2onz154V
+VvhWVmMcQD-QgP-Qg76F1lIV2D+H+AYkok179D1AIkXkn38D3P0D3OXlpkHlpcwV
+VvhVA2wV7D7H+D7G2mIhAZ6H8ComXUwgg+wgcxAgfH98DL88pmWVRRRFhNhBxJxV
+VvhBxJx8x4wz0ng99lQj3mQT7lwT5mQT6lgf4mQL9lQn0ng9DfGfGXIXGTJTHPKV
+VvhPIxRRRJBV4smnIYgp49BCWnHQgl89AFYmoZAh4H9CYmnRAcvH8C3m2hQV6P5V
+VvhD+P5CLl2kLl2Z0H-H-EYkIcpK2knJMH+7wD27wD-4tlliQGUSdUA++6qAo5rV
+VvhE9V7H4Nql5NwG3X0VMl5NwFbP4GI+-TTi9OoKfmOWzKmSzCoSz8qSx8rSwCsV
+VvhSv8tSu8vSs8wSrCxOr8ySp8zSo9-SmD-Sm91Sk92SWlbUwNrD6RWmLIghYD9V
+VvhQXn56gvto5oSBh7R9YPGLGt4oLo6mjiPk9-Ws+U++WEVAjklkHoJoDPEPELFV
+VvhLFHFLFHGHGHG69ywX1lJRg7dL+xuL+OphQ-R1pny7QT0l5JQ3sL+KZhfKak3V
+VvhZg3MP0K4kZKDkZIVP-NG3g2FFG7f2YIWOGB274MoZg-rduFUk41V0++0702mV
+Vvhz15SHTLSPRTRPRLSLSLSHTHTHTA-2UoPpx9IJqoKZQxuL4hPL3rzLSsZph5HV
+VvhRJo5VQKZhfKalNPEK4oJVh3JXx3J6Ko4IVPE2IIWOl736aYXF0FaB7P5Sbd4V
+Vvhk4LW0++0702kz0zM2-6k23rbr22xgoDNBIpnRBF7DHD1oloG15jLohFLPFOJV
+VvhnrdQOphQLTxRvWLKoRBpLES3lOKqhOP3Zh-MPFK4oJKDoJIVPENG3h+FFG7fV
+Vvh2YIWOGB274MoZgRuSYP+LCA6++6Y6Grw9B7P5GSHmpHBT2Kh+tTG4p1ejLohV
+VvhFLPFOJnrdQOphQLTxRvWLKoRBpLES3lOKqhOP3Zh-MPFK4oJKDoJIVPENG3hV
+Vvh+FFG7f2YIWOGB274MoZgRuSYMA-Vt+U++WEV9zkio2ZB7bPERbo6K9VMo5NxV
+Vvh-bPGGI+-0Ppx9IJqoKZQxuL4hPL3rzLSsZph5HRJo5VQKZhfKalNPEK4oJVhV
+Vvh3JXx3J6Ko4IVPE2IIWOl736aYXF0FaB7P5Sbd41+NSI6++6Y6HDwAhJRuBcpV
+VvhDN7mq0UhUd9KsWYhUb9NBGqsrJ1kjLohFLPFOJnrdQOphQLTxRvWLKoRBpLEV
+VvhS3lOKqhOP3Zh-MPFK4oJKDoJIVPENG3h+FFG7f2YIWOGB274MoZgRuSYMA-fV
+VvhtUiCCnEk5zkSex3h9Gb9JqJJKKZHGIRuIIdKSdl5Oro3NQPFLOPFLOLGLxZhV
+Vvh7RZRBRbRoE39YprrRRttLROpr4lRhh-Rdh3Rdh3hIGPGPI6aoLp07h--HG6qV
+Vvhl1DF7Kd3CnRqJoR7oenFXISUk2Xb-lln6-khz-vGfGofK3VNNpZqKbJQN3o3V
+VvhFhZRbqqCBhXXPOxRdhfpp0JR6bLE8JgfNYoB1JU0HpqMqbqZqy7RZRZhNx1FV
+VvhoOoUk3Pc-lln6-kmz14nqpqjPOPOLPLPHPLPHQHQHQ693xLB7JKpZ7GoVB-4V
+VvhLEJ3oJBh3HLGIaoZ7RBFPHIRsRoaqCBhfpqZpVFREYLH7YomRB2dGnhKLEoBV
+VvhJv1+JyY555AU5H9wARlBhRdhZxZhZRdRdRdBhBhBgxoUirpgopJQKId9GIo2V
+VvhRR-JLFJ4oJFR7HPGIpop7hBGrWrHPNsqqzLPLK3Jp0JRAbHH82oGd9D3NR5EV
+Vvhpbn+Kic555AU511w9xMRoxhRZxR-DKB1p1JB6rH2YvD1gR2UebpQoZJPKIZ9V
+VvhG2o2NR-ILFIqoJBR7GPGIZop3hBFrVrGPMsqqjLOLK33p0FRAaHH7ooGZ9CpV
+VvhNR1EpLj+JSg555AU5Wzw9fGIlbObNuVMW3WbNuNql7EDFxTBFJLEKIh9GYo2V
+VvhVR-KLFJKoJJR7IPGJ3opBhBHrXrIPOsqrDLQLK3Zp0NRAcHH8IoGh9DEJZohV
+Vvh1LTEo0fg-5563-2mzX3npQxgP3pRHJp+22+EE-+UQpSaibjZKyJPtJjYKqdqV
+Vvhw-2Uk19h-5563-YmzX5MHLLKPJTJPJLKLKLKHLHLHLDN67xR8h4xJxPZLKtJV
+VvhpiJRPYLKPJTFzGf+Ays2QQUI3n1y9x6RUxNRFx7-DFB1kpGXR5GHMwBVoG05V
+VvhLEf9orpCJRHZLItJpCFRFhBwzGX+9yw2QQUI4Wzy9bGIVbNbNqVMG3VbNqNqV
+VvhV7EB-RCh8xNxTZLLtJpyJRTYLLPKTGzGg9-mw+U++WEVAzkmmmlZUgKI93k-V
+Vvh94kwIYf34MkWhw2PX+8WBQcoL77ZoIoJoIoJoTHFLFH2RYkQ2ohKMIZOa2kNV
+VvhNAC3L2R3lLBQNnL4MqlaBQRWsqlq5WP5MalpFQNYxQNJL3JpkpZAB8L-H+KZV
+VvhkaNQP-mskw-7wEXXY0UZ9TsgpZgRNtDHhIoxTHFOp1ZxMPI+24JrmpifAqLEV
+VvhQWZR-G53lF5ELDPFLDLGKqoJnYLGKyJR7Pt3oZhh3eTERjoool0kJz66++6YV
+Vvh619wAQ2x-Qzqnqnpo3o2o3o2oIoIoG0xT8kQJKP-KZhA3NH1Jpl2NQJIxQNHV
+VvhP4MZlqslP5kC95MKlpBQNXxQNIL3JZkpVAB7L-GpdQ3aL3kQeA9+KDA6++6YV
+Vvh619wARtBtRphlxlhlRpRpRpBtBtBsk201DTNoBFKPEKZhB-NHGJpooNRFIxRV
+VvhJHPJMZpaslPKnWpa3hNHLJMzLJJ3p3NR7MHGGJo2hOLENZpB1NXFk3ro0++0V
+Vvh70+kz0zM2-2xxRpxh-DOB1q1JBMrHHGHoXkx6R2UlLqR1IJao3dPHEKIoZRRV
+VvhB4LIJDLJIqpK7RNiAKpgshNVPKIppKDppJFRFKLGK2oYZR-9KZo4NRHEqMoEV
+Vvhk3Lp0++0702hz0nGKlobYwhInLl3fECLoVhEvrqh1JJaoJdQHEKYoZVRB5LIV
+VvhJTLJJ4pKBRNWsqpa5WPKMapZFRJYxRJJLIJpoZZB78LEH3dR3aLJoBeB6A-LV
+VvhxUU++WEU9zkio2ZB3bP5NwVMe3X5NwNqoIZ++EJxbEp3Nh-OKoo3ZB7LLHFZV
+Vvhp3HppJBhJWLKPX3hPC9KMKpZBRJXxRJILIJZoZVB77LEGpdR-aLIoBaB29-wV
+Vvhy+U++WEX9ToZp1p0p0p0p1p0p0mLEgT2lJRQFPH0H+P+H+AIdA2WGIkGBLL+V
+Vvh7IRA+pFZk0NJKmRIKmVIKXVIKWZIKGdHKGdIK1dIK0hIJmk2N4CpN3D+FoIgV
+Vvh-LImkIZ0D+Grk2k4k2kZhAFaL4kwQYX69IDI9I9I9IDI9J0kFzY6st+c619uV
+VvhAQ2x-Qzqnqnpo3o2o3o2oIoIoG0oL1ITiPJw3qtJkpPZL1JiFQBLL0NZkpTpV
+VvhkaRQ2FK2k-7MGm7NJmBtk2hsOw-6yUXXY0UUAjclrYrZrKr5r4r3rJrJrIrYV
+VvhrYrX+E6ANR7FythLo5PZLGJiJR7Kt3oZRR3aLGJzLFNpo-3MH-7MGm7NJmBtV
+Vvhl9S4gA-AykXXY0UUADcjq-+FDTLRTPEHqXExUpHKBoooYx6wDG5F69lR7FytV
+VvhhLo5PZLGJiJR7Kt3oZRR3aLGJzLFNpo-3MH-7MGm7NJmBtl9S4j+FTk6st+cV
+Vvh60zu9h-7HFNqlqT6K8VMlqT4Rh37EDlR7FythLo5PZLGJiJR7Kt3oZRR3aLGV
+VvhJzLFNpo-3MH-7MGm7NJmBtl9S4ikSjo6QQca8Y+-ARJBZRVhRxRhRRVRVRVBV
+VvhZBZBYxgUyQ8A-wC9k6k6kqkZlKknlpkmmDL097L-99L+99Kmn3cwlO9BO0npV
+VvhUgzpQh-Z9GJ1oZEhDpAhFV9KIGpjTLPNLNHOwxjmqmqnqmqmnoYgtM9DNXnaV
+VvhMx-JDFF2otpppP-czUXXY0UeEE6llJp8ovqDPMtJqCJRXpqJRwhIkAZGFalsV
+VvhhQKA3QFgFQBQJQDWL4L-tJlqsfL5P+L5L-L4P-L4L-L4P-L4L0P2L1P1L2T-V
+VvhL3IGhQJHBalpH+mJOAjWLMtJq3qDTKbEz4n+k4jz0++170EmzX5MXRnNJKpYV
+VvhZRF8LHH3oJlR1XLEPvLEP3o3o3lh-PPFKaoJdRBMP8GB0oTLJppZZBFPHHL2V
+VvhoZlR5WLELDLFOy7R7PLFOiFR7eLFOZoadJ83hIFahHJZlHJJlXJ3lYEqaZeuV
+VvhRR4kT9U6QQca8Xo-9gR7HANqmbNwe3X6VMmbNwdbPAGI+-Ew8A-wC9k6k6kqV
+VvhkZlKknlpkmmDL097L-99L+99Kmn3cwlO9BO0npUgzpQh-Z9GJ1oZEhDpAhFVV
+Vvh9KIGpjTLPNLNHOwxjmqmqnqmqmnoYgtM9DNXnaMx-JDFF2otpppEk19L-llnV
+Vvh6-6SxVzGDFDFDFDFDFDFDFDFDFH3lQL3lR3B3R3B7B9ooYoXonomononomp0V
+Vvhp-L+BjQ555AU3-vs5o9K9K9K9JDJDJDJDIHIHIHIHHLHLHLFLFLFLFHGHGHFV
+VvhHGHGHGHGDHDHDH9J5K0kJUg7JJUeAn9yAQm8T9kJj6NnBHL3KOFgF8dKkoiJV
+VvhT0GtNw3PZpkJkLYw7Q7gtQBQrZL1LBxQBQXxj4xQBQrZL1LBtJkpnSJQBQrYV
+VvhL1LBP0PAT-X5z2H3kg-51+XXY0UZAjslr6rB1NNnpZgxFOLHGroIlx-QT3o4V
+Vvho3o3oJoHoSJE2Z+HKePk2gxR3ftJoZjZLGKyJR7Pt3oZhh3eTERjooolk2MBV
+Vvh0CCE80MmzX5QUmqBHKNqp3ZxB8XGGroYlx3QTELFPExR7QtJoZnpoZTk2h1pV
+VvhoZnZLGLCJR7QtJoZnYLGL4oKhx-rzHHH6A-b1UpJK1ktAjslr5o6rB-x1NNYV
+VvhFbDKKn3PDIGudRB9aroImATEKtlwL6o4o3o5o3oJoKoHoSJR7E2ZoZ+HLGKeV
+VvhPk7gxR7R3ftJoZoZjZLGLGKyJR7R7Pt3oZoZhh3h3eTETERjoooool1+NUwBV
+VvhJJUwCX9yARmAUmqB-xHKNnFbPIKY3NTHGeeB79aroYmATFL6lx-R-x3h-R3hV
+Vvh7R-R7R7QtJoZoZnpoZoZTk7h1poZoZnZLGLGLCJR7R7QtJoZoZnYLGLGL4oKV
+VvhoKhx-x-rzHHHHH9E8W66++6Y4-PsAIGYJcMyG4Uo2bEGy0ki7mkbwg7mkb90V
+VvhQvBmkaCnMvC-oM0k0mo3JJMM2kHx2FshUR+eL+U++WEM3j+lUR41gqCnMg7nV
+Vvhgr90Qg7z90TW90Tmkc6IQVEyG4UqVZGYE7U7SkU++WEX+joHr2U7T-+++oV5V
+Vvh+joHqT+DOKFZPbFdNaZZQW-IHJBAw-JXPqFdPaRnMqVZPKIUJ4JM65FZS5HkV
+VvI14NjPbFaMKBZMbZoNTE+uU++xTNAV
+Vv+V
+Vvend
+Vvbytecount 17840
+Vvcrc32 ce1bf5db
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.622pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.622pk_vve
new file mode 100644
index 0000000000..535639b59e
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.622pk_vve
@@ -0,0 +1,521 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.622pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX6o+8+++C2v0Uk+07iG++WPYe05EEk++Y2vDTowmmrTHPxRV
+VvhfqqTXLyROhOkpD6coz6soWGB6YbE7cnnOAwbXCBsnWWQktXA8cmz8kX8wf4QV
+VvhXmgslz8oX48pb38qX2wfSAAfWAD1kTlA1misjmj6jmj7jGjcj1jcj0jsinjsV
+Vvhimk7iHkMiGkci1kci0kshokdh4kdgejf3vSqnzhPoP0DEUhJK1ovCzsufNmhV
+Vvhn5rgmgKQmAWQeAaQaAeAaAiASAmQPWXBX4yAqTl6nclTXBb3XBX4XAb3XAb4V
+VvhXAX5X9X6X8X7X6b8X5X9X4XBzInslcnMm6msmbmMn5m6n6lsnMlcnNlTXCX2V
+VvhtMntkco6kzXDb1yAuQGAqQGAqQKAmQOAiQSAeQSQWgSgOw2-10rgLPm+c7-1V
+Vvh0ssvDXYxxnj1ap5+hP2vmuZ9ekVMCtaoFIi6i1BPO9gWOpSyaoT+WnT-SnT1V
+VvhOmT2OlT4KkT5KclpaAYuT8CMmXXsmnSQgrXA7tn0SQoLXJyRKBLYbJyBKRPsV
+VvhpcnFXXXA8TX88cmGgLmGgMlmgrlmgslGhLl0hrkWiKkGiqjmjLinjriHkMh3V
+Vvhl7ZgSvmvLFf+g6F211XaEXwvzXehbCrAjSo8l9nsm7ncmcnMmsn6nLmcncmMV
+VvhnrmTXET6yB3wOB8ALsorlS8BCCL1XIX0XJXYkcp7kMpMkjXIb0yBGACBCQ9sV
+Vvhp6kzXHX2XHT3XGX2XHT3XGT4XFX4XFT5XET6XDT6XDT7XBX8XAX9X8XAb6bAV
+Vvhf3f5rgXRmhbCc6d30iCECngvzXei9Kheif0rWyWrX+KsyA39TWX1Crscl0hiV
+Vvh8AIfPWWq8m8pschWlMhHlMh2lMgpl6galS9+lMgLlMgplDWpD3y9MgK9MfIfV
+VvhC9MfEfDshWhGgzX58oX4CoX48oX58oX4CoX48pX3CpX2GpX2CpX2GpX1KpX0V
+VvhKqX+SpayaoeugNpsq6ptc4340b58C1YvzXei9Ihei90rWwWrWyKsy9x9TWX-V
+VvhCrsckWhiCAAfPshGgGhS89IgHsh1l6goksgol6gKlC8zl6g5ksgolC89EwG9V
+VvhIgG9EwDWWp92scpSKBLXXJbIgAn+kjkQ680NFkmCCoEtDTQvkthFk9KlCwidV
+VvhGug6K1iNh2J9W9UnKqWv6ahLjdh5k6grkLgrkqgbl4gLlZg5lpeARNX7CbmXV
+VvhaAcsyAgrb9Bsn0SQkbbB3spTbJXJt7pTXJbKscj9sMlOTWX4WTX3WMl6g5l6V
+Vvhg6ksgLksgMkcgbkcgrk6hLjshbjNhrim7fVvYXOtWpBJiuZLCxit9+hP6QCgV
+Vvh+9-7G+k++Y34CzsufCXCygqQr4j9jCssncnyKAuAzZXCXDtMncnsncoC9SoDV
+VvhXCXDtMncnyKAuAzZXCXDssncntnNnfmvlgqQqjncne1+8YY3lloT71jyCdshV
+VvhvIjRssriKBvZXStMriKBvZXStMriKBvXXSbRjIzSbRekFoc6CCIg8nnvCgLWV
+VvhnguxPXXKtMpiKBPZXKtMpiKBPZX3D0X2P-X1X+X0yfX0ecktiACPT2WrlKk5V
+Vvhlmkqm0kamXhgl5PEkRGB+90mGkllmYB3CzsufCkwPunQH4lPnPmso5nco3o6V
+Vvho1oco0oco0osnWpMnGpcn0psmmq6mHq6mGqcm0qslmr6lWrMl1rckmrskm+EV
+VvhX06-4A2U2ch+2cdU2MZk26aRy6fTVW8Ru376rcEZXSUmSBm186r62fXPf+XPV
+Vvhb0XOX1XOX2XMX3XMyAOBTslspcm6p6mMpDX8XHyAiB8AmB0AqB1sncnsndnNV
+VvhnPmvmw90nQ19XCkAiAv+md0UIIk8++6qAnjyCez-jA12gAvXXDtMnyKAzZXDV
+VvhtMnyCB0A2f8A+f9WX-8msck0gck1gck0gzWzCnWyGnWyCnWyGnWxKnWwOnWuV
+VvhSnasamepgKoZzGP+w2oCeepDIXjxCep+4RGhE-XIjI+LpRIlQ-Oxrm3k3G3xV
+Vvhzm3k307xvmBk2W7xzmBk2GBxwYTT75rmFxsZTS7LrWFxzmJxoZTTwaTP7brmV
+VvhNxcbTS7rqWNxwbTN7rrmVxUbTT85pmVxzmVxMdTSweTI8Lrz8bomdxweTG8rV
+Vvhrmhx2fTS95o0hxzmlw95rmlv9ETT9ESWo5rmo5Yh3xsh3t9ETT9FS0oLrmobV
+VvhQh3xzmobMh7xwh7p9HTS9HR0orrmp5AhBxzmp56hFxzmp52hJxvmpcpLrmpbV
+VvhpbrYpLpbrKpJpcqfoopepRP2nPfLkwr8px+gr80ktIsA++7-FXjyCelQj6f3V
+VvhmwSwP8lwSgugmwxgsVbDHD6cnno08QwgwYXC9E77nGo0KAoh+ZbA9E7cn0o0V
+VvhOQggwcX89E87mGo0aAYh+db69E8cm0o0iAQgwg0QIh+g4AIh+g4QEh+g8AEhV
+Vvh+g8QAh+gCAAgwgGQ2h+gKA2h+gKQ+h+gOA+h+gOP9E95WmnmmMYh+gaM9E98V
+VvhW0o0mdQh+gi59E99ZWnmnMIh+gqI9E9CV0o0ndAh+gy19E9DYWnmoM2h+h4xV
+Vvh+h8h1moto0p6nmpLoD9KPDHKLCPJL9jIH5lx+wT6oGlwXG55g7ND1558EnYxV
+VvhxnjFfTlRdrXIT-PGP3PCP6PAP8P7TAP5TBT3TDT1TFP0TGT+THT+TISbpLaBV
+VvhK5XKVsprPsq6x6qMCRa1XOXW8Re0XObY4ReFbNYTbOYNqc8RaHXNYsqMGBWIV
+VvhXMVMptKRO5XJZspMWBG8TISsock5oMkMo5krnrlLnLlqn5mKman4lrnalKoLV
+VvhkKpMRxb4ruo+c4FE0iCECncvzXegavn9XCjOhOj6iMisicicisiMj6hsjMhsV
+VvhjNsvO9uCCpWyapWyWqWxapWyapWyWqWxWrWxSsWwStWvStWvSuWtWvWqaxlPV
+Vvhz0kcpiKBPZXKtMpiCBORKknPv3yzlP19IEllmYAtHTQvoOrwLORsp5kKoal5V
+Vvhnam4n4mamLn4lrnLlLnrkro5kbobk6obk5p5dxJtXJVzXKVcptKBW2bMV6qMV
+VvhwtqMwdqc8RaGXObY4ReFXOYTbOYNqc8RaHXNYsqMGBWIyBW3XLVspcSBK6XJV
+VvhSbkZkLi9Wsk5cp8bkLYc85krQe7blLIfB5lqIfArmKEg+WPAMmk7na6g-x3lV
+Vvh8apNOBX7kWn8BA6hZA6hZQ+xZQ+hdPDOKYqZZBhaPPlhj3rDlBv0rw2-4k2tV
+Vvh+JP1g6VG0wQSDnowzXehHFqArOoekOoMlNnslsncm6nMmLn6mcmsmdmiCAiAV
+VvhbXX9b7X9X8X8b7X9X8X8X9X8TAX7TBX6TCX4XCX3XEX0bGoBLCpskLpMkqosV
+VvhlKoclaoMlboDX5TDX5XBtMm6nCKAWQiAaQ+S8cmNgdb8WWawa76wr1VmDClLV
+VvhIYngP++MVf09IkXXY1+hDTgvmckFmA8HlQNnl4VZD2L-EokZlH3Q3QSA3AZwV
+Vvh-QdfL9Kqn2hQp8PBGjPCCSBwseTC4sqNq8q9pgDHlgz8nAj9mwj9mwjAmgv6V
+VvhoQHJkRShaRbsqjSFo5XW9ERy6x-cDEKHnqZAtNLBOKn3dghPT7L+b4L-EZkpV
+VvhkIJsT0BwT28gD490b60UIJE9XXgyC1jqCZqDHNGP8P4IOpWoQphshYF9W9QoV
+VvhCtWrB1i6i1DniMiGDmiciG6fi9YWwfe9cVsmisiWjSKBHZXItMpCKBHZXIssV
+Vvhp7ov54sgOr0cNJIA++7-D1noCfynojh9W90zenX1OpX2GqX2CrX38qtMlGhiV
+VvhKAIfPZX38qtMlGhiKAIfPXX38rX2CryAEfWAAfdwAfdw6fhw2vlg2fpvwfxfV
+Vvhsg3fkgBfYwJfNARfBQa6T9iQyppNluWEJUk++Y2xDDIujPbCyshqgQ4f8QFfV
+VvhGAN9KAMvOQIfXsl0iTX18ub-8wX+CwX+8xWz8yay8yax9+Wx9+y9kg4PcgC9V
+VvhYwC9YgG9UgKPQgKPMgS9MgTshGm7gmmcgXmcgWmsgHmtg0n7cgu89Cy79DZmV
+VvhoMQh449GVHocIhCH9JUmpTUWpjgBXtqMqbr4rDLRxBwgk8XcJl-lmZVIDDIuV
+Vvhj6jP1Cy9mlhqgPWliP0kavaxSmWwWzGoWwaz8pawWz8qy9m9sfTsj6jGi6j6V
+Vvhj0iNitimijWueu8vy9YVWt8wWs6ci0jMi08PQfqPMYWq8zWq76hWjzWp7MhGV
+Vvhk6h0O9Eg49Eaan9-am86gWksgWW96gDsgGa92gHsg0e9+gKN8kaGlsYf4795V
+Vvhy68mW0mDVmgsQga48oZHmNIfK399V0hcEwi28qV0n6AfS1DAUmhsAgq08sYHV
+VvhnN2fa-9DeugAyfeh0Pih0PiR49mR49mBBvpxDqjapDKzLJH+HKH-DL90960UV
+VvhbJUA++7-EXjyCf1WjP0thv8qgPufdw89hQGPgwKPcwSPYgWPUgePMgiPIgqPV
+VvhAwqP6wyP+x0P+h8N9Ha0pNMxKJDLYnq7AheF9PgBqhqRztry8Rqkqv5P6dqGV
+VvhCRUZbK7dpHSRAsbH8doGg7o0gdnWgtnHh7mnhNmmhtmGi7m0idlWitlHj7knV
+VvhjNkjCzazL+awWyetgPingTifGxOthPpUc5lN1++0EHwvxXcTjPbEiPO99-enV
+Vvhb2Oqb2Gtb1Cub18vb08xb+Cxb+8zay9+ax90avD0auD1au93as94ar96apD6V
+Vvhap98an99am9AalDBak9CaWo7Uh4LDGZHotIhGI9KYWpt2xWkqOqy8BlxnYXQV
+VvhTQt6r5rCCBiRekofv8yzkP0LKUb55XIoCzgukDr9rA1-lckNmNkLmdkLmskZV
+Vvhn6kon6l2mtl1n6l1n6lHmslWmtlWmdlXmclmmcm0mMmGm7mGm6rsrsrtrdrsV
+Vvhrsrsrtrsrsrsrtrdrsrsrsrtm0mMmGm6mGm6mWltmWldmmlcmmlcn0lMnGl7V
+Vvhn1l6nHksnHksnXkdnIkNnJkMnKk6nKk6nLiQiPX6kOrdzSf+Oq26++6f7mXvV
+Vvh7h8RvFqZVRQwLJHELHPELGT3oTX4o6o3oKoJoYoa+Hsq+EfOoxOmPJVqosZhV
+Vvh7vPFPEPEPFP4oKlh7fTGOjTHNm3x7rbxBb6LobQWPF6JQWTE6JMYOn7K7KYoV
+VvhJ0RaBebEWB09Jv-eMUXXY1+aDTQvdgrw5BkBBxHXPHtKoyJhBhFbX3NQ50MoV
+VvhRQ3WCok42g7NMGl2aAJMT5JzP6NamJLZP8PYBgdnP7QzP8QqmaFgZoP7NKm4V
+VvhJgZZT5NblpRwNMIGl3Z19-KYIfKnQqP-8Q1ET41+H4A555Aa6GXu7hGRXGp3V
+VvhVB3R+gLEGYoKVR-rLEVZoMJh42PHN5p2JhpxphrWTRPRu5rLqFHqq0JRQaPKV
+Vvh7ppGZRAfHFDEH1oZRBLFqMoEg5NY0CCEA0cxyXjMPx5-oQ1LTMsqpyJhTZPLV
+VvhP8Rqlw34lKN1P1L+6akZkW3g-QGA-QNvP4Sam4dQZdP7ODP7O5mKVgdbxwdbV
+VvhP8NyFwdbxwZcxgdcT7OKmKZgVfL6Oplrk3lMkIl03g7A6WT0Gn9-dLEw5+k3V
+VvhkQ85Og-CNEQQQmMW8Dgap6qh5JNZopdB-R-9LFKJooVhBKPIJZpKFhJjBhNWV
+VvhTKMapqwLpq21ISVxxhcIxhYZLM7apmRRMdLI8ooXo3hB7bHKoBiB29-+NUHXV
+VvhY-cZDTswnqo9n4IwdJP6JLlpKANKX3NclJVgJdH4PGt4oiJh9qmy98mqoiJhV
+Vvh9ZPGtKoiJh9YPGX9z7kwb20kVqQ6++6f9Xbz7QVvP5kJf2NJ7HL0KLNQ3PG2V
+VvhkJk3Ug3Q3Qdg7QZQBQXqkplyBgBgRgBQVg7gZQ7QdQ3QlA3ApPHCOInrNQwXV
+VvhkB+pXG9TsnrorZrQbCmwnAmwr4oQBgGQ7QZw-QlPLBOTLDKC7R-MxQxNLDGoV
+VvhnZhQlQ3QdQBQRQNgBgZeTBlhGwikJKU6st+k8nnyCwJh9w5GkBVxbXPMtKqCV
+VvhJhVhZcX7Ng15N2NQNXCJlK6fP1MWkJkq2g7QCABg9rl4kalKkLl4kiFgJg5ZV
+VvhP3P-tKlKkSFgJg4AC4z5HPD6k0ld-5563lMuznbHHIPGXWo7o6oap21pOjmRV
+Vvh1FXGtKoiJh9ZPGtKoiFh86zJDKD+Fqc2st+O6Ik4CRtBxhqC9PbPXRPTE+3tV
+VvhPLzEph5QXRtKrSJhrZPRtKrSJhrZPRsqo1hR-NP5VfW3m5LEVooLRBB6HJBoV
+Vvhpwqbq9-uOkVlmWohDDsvlKpDkRH+qbqyBhfZPOtKqjPPxfkw3elA3g0gFg7gV
+VvhRg7AZg2whg+wlf9COWnacgxcDENmoaMhBZHGMqoKCB-W6Zo7BgxqPCNqnaVgV
+VvhldPAxeP9Oqmak3mak4m4kZm4kalqkplqkqlakrl6kNbwRQFAVQF+k0dg-556V
+Vvh3lQwznjIPuo8nHTIsqoyJhDZPHtKoyJhDZPHtKoyJhDYPHWTpXpnk4Fh1JJMV
+VvhGIEazWLEOMosoR-h0x1B-3NMJZjEAuJXdR8094EgPGMWoJAh3R7V9GIWoZocV
+VvhosoqoTTITIPFPJPJPETITIPFt4pKpKoCJhJhJh1ZPJPJPEt4pKpKo6ososPxV
+VvhNRNE4Ypopw-3PUXXY1+f7jsZo4WB5EPAo2FZjEAtLGUWhh7W9ELGMGoJocoaV
+VvhoTTHPFPIPETHPFt4p4oCJhFh1ZPIPEt4p4o6ocPxN+4Xpw-UPkU++Wga8DgaV
+VvhpNrR5NNapJhRBR3R-BFAHJKZpZVRRLLNJKqJJRdXPOMbqawaqqwLqq3hjFsxV
+VvhjFqq3xdlPPQKqq7hdmTNN4qKFhVZPLNpppZRJOPHL4oJoKhRJbPMoRuBIA-gV
+VvhQ+XXY1+jBk+ZoaSBPELEox+oRR9E6vHKUGoJpK2h7RKBFRFxJhDWPLPFtKq5V
+VvhtAPNT4q5nqqLnqq5o4proKpqoKproLpaobpKorp4p6oapK2h-RNX8apqEqPNV
+VvhNQqqRxvq+PtK+Psq+PU-HWphw9-aQEVlm0oZBzcZlbcgCsD-NXMvOHF7P+6pV
+VvhVg6WG4km3LP3RjP4RKlrFwRZP6N5m4FgZXxwZXP7MyFwZXt5m4JgVZP5NzP3V
+VvhS3l6ZQ6VOJkG7eKX7g3KEqkg-KlLRhDqoiJh9XPGX9sgQg+sQUN2FW6X7jsZV
+VvhlcKgOMl2BLknFgQWNwIWNx-G7qo32cLFIGcRDrrjTTsqryJhzZPTt4rsqDqBV
+Vvh1MoEk3Vn-Yya6VwczGPGVlnEAuK6ZAO1oZQxF4HIBnpWPXHK7ZpFRhmBfBTHV
+VvhoxHGpB9IoxDJoRaRlp5KNC6hRIDLF1pnHopYFBMpLIFJp1Nh6qIGl5EnVMBRV
+Vvh0WWB+A+tR+MstG2MBjUooT9MsWqC6xTnpopjLJPIPHXF+sRhHZPItKpCFhJeV
+Vvh7SJe7i7O7pYcO0bpQfJ1o8oqcA+yREXXY1+Z7zUZRhFVsh0h-cocTZPINyJhV
+VvhFbtKp4TXPIODPHS3p4bporZR87LF6KdB+WSJgWo3NYDETEHEa5Nkg3Vq0558V
+Vvh9GYayGETlOotkZb1aLlZk4lXkjP491P392T293P194P0D4P095T+97P+97xfV
+Vvh98OWmrYglc9BNnnKQgtp9ENGoDN0oKAh7m9HMGp7pDXKPLxRXoqWnP0-RkiCV
+VvhCnsu7jYY5wJAFhEwJg7Nk6kMZgBgBPP1L2H+P1P29-P1P191P0P191xg3w6gV
+VvhHqk03g+gJu6pggRe6pggTqYYKWmDO0Jc97RWRL99NWRL99xZ83MgnqEdN0njV
+VvhMWhH9DMGk36h-V9+MGo6kMoMkbojP1PHxQFRFAJBJAMxMgQgg9-VS+VlmWojV
+Vvh7TwYT3T2xgNwD-b+b4T-P8P-HAT+DCOno4Yx3d9HNmp4MhNY9LQWqK2heBlxV
+VvhrqrLqtqH3hUmTKB4pHNhEbPH8KoGdwwg-gsg3wkw7ggwFgVQFgKQ4ez2b3L1V
+Vvhf3KUTLY6QQchA1Q+76htgchegbhtgv4PGPJvRPVfQvfqhmirhGjKh1jKh0jjV
+VvhOn8zSl9-Ol9-Ok90OXkbYgFcD2O0lKQgNq95xZ96N0mKAwdW99xV9AyAvqnpV
+Vvho2oXoj9Gwh6h6x6h6gMP2gBd92O1krUgFr93RXlKMwQcD6F2mdnZn9-USUQQV
+VvhQmMZ7TsYbx0LkaZQFeH2Onl4k0l4k1kqkGkrkGkqkWkakWkakmkKl0k4oaoaV
+VvhoaoboaoaoaoakGkqkGkqkWkakmkKl0k5kmkKl0k4l1hgIuP3CalXZgN6P3NqV
+VvhktPx7u+y++c++XMrCzsufWofOfSfS9hvS9lPW9p9W9svTWWzCrsck0hiKA2fV
+VvhLZXHtMoyKBDZXHtMoyCBCR8kmg1+z-k+c7k-1JJMG1wxz1nBwk23rjPRXPyRV
+Vvhekq04RQlbL6tpGGREobI7doWSR2rbF8NnmeQsubC8lbA8mb9Cmb98ob78pb6V
+VvhCpb68rb48sb3Csb38ub18vb0Cvb08xb+8yazCyaz9+ax9-awD0Ww91au92atV
+VvhD3Wt94ar95aqD6Wq97ao98anD9am9Aal9BakDCaWntYh0MDFZmodPSLk21+FV
+Vvh9kIUg8201558EnYxxnjFfTlRdrXIT-PGP2TCP6PAP8P7TAP5TBT3TDT1TET0V
+VvhTGT+XGT+TISbpLaBK5yBO4XLZMq6GRW2XNXnbNXmZWmWO0ZWmWKGVgtdt-ZgV
+Vvhtd44naYTZWmWOFZWmWO0bNYsqNCBa2XMZDXMVMpsSBO5XJW6pLdxFvXGX+TGV
+VvhT-TFT1TDT3TBT5PAT7P8PAP5TCP3PFT-PJS5qQPTfE0UTEA955AwBXrxDAXnV
+VvhpzHKLKPIxxDsodoeoDgAwlXD6cnX8AvmCQkYbA7Mmz7cmWSAcbb687m0aATmV
+VvheAMf0AMf0QHmgNkz8nX08oX08ob+wfKPzmhsjj8sWxwfaPjmisij8wWtwfqPV
+VvhQfuPQfy9Pmk6hIjtgajtg8iv3fOmnjgfkO---+eefHYsCzgufHsdp7otp7DCV
+VvhCS6h+csWoG+-cyAg2fr3jCH3jGkGjC6g2U+VDW9F80o1Xmo0YgwtDCCRCS9IV
+VvhbxCUk2231++0EIMvzXeU9zc0vJbRfRssrMriKBqBvZXRXStMrMriKBqBvZXRV
+VvhXStMrMriKBqBvXXRXSbQbRjOjJr7r8zRXReUXEM9XXgyCXjuCdshOOjv8dktV
+VvhegFf4QJP4gJ98QJ98gIvCQIvCgEvGQEvGgEfKQEfKgAfOQAfOg6fSQ6fSg2fV
+VvhWRTtpzbLyRTtptpcq4qJqnqnqmr0r0r0kWjGkmj0l0iml1iWlGiWlWiGlXi0V
+VvhlnhXlnhXm1hGmIh0mIh0mJgmmKgWmLgGm6gGl98kp8pNzJeUN+QAQQd1C1nnV
+VvhCtT-OmgPikeni9C9KqhKhvCsGtgPYvifgZWNaJ393tSlEHgrRvBfJaSpGqNaV
+VvhhYhqFfQvVYKs4vIqnpBR1p7R3FLHyhDWbIyBGRHZXItMpCKBHZXIssp7ov16V
+VvhsgCuk6I60ssvDXAvxXfHw-5L+F+Gg-nXU-rXU-j+3hXSUM4BZpV5paS4TGS6V
+VvhRwScVuSsZsSse4WshpX6i1b6i1XEWt4R09YNmApSDEXBLEX65tmAYNmAUdm9V
+VvhV6m9V6m8Vbi8W5e8Sba7PES6Rx7rVapbK1TOUM4BvM+Jo+5C8+5SC+5N+Qg-V
+Vvh5W+Fog010EllmYArCzAuoj+Fqk2E3f+Uss+VscqdocohLFXEcso6mJX6o6OAV
+VvhX6W9X6Xsi9W6m9WCK9WsZvWsbsi9WMi9Sci8Wri8Wre9T5e8X6a8TEWMZx7tV
+VvhWLoba6TIRsVxJrVrprO5PNNcJxhZV5rLC0Q-5O+JpU4v+Usc+Vss+VY00k3SV
+Vvh6-5Lg8I80ssvDXYwyXjFjSlxS6XHT0TDT4PAT7P8T9P6TBP4TCT2TET0TFX+V
+VvhXFWsosaRC7XIWDbIbXORKSBNpNPtp7WBG7XHaTXHWcock5obkLoMkbo5krnrV
+Vvhl5nqlanblanam3nZmJnJmpn3mpmpn3monjH8H18nmIcY8nmHgY8nm1ga8nlnV
+Vvhga8nlmk0MfD4CmQfD49+7ncwMf8DlAL2X1lgCTkwL2b1lg8Ek5Qk0++08mQtV
+VvhyXTLXToRdaPLKZp3o3oZoZo3opnppJdRNNPKO3pqRhVLPLNaq4Pqq5FxVzFhV
+VvhZnTNTnTNN4qLDYTNQiFxZnTNN5q5HqqLFhZYTMRKq5Lqq4PqpqRhRMPKOJpZV
+VvhdRJePIL3opo4oJoZo3p3dhNaPOoRyBT+9H26++6f5HXtBxkhlBhRZxOezJi1V
+VvhTNsbqCJxXZTMtLqCJxXZTMtLqCBxWBSe-70kSH66++6f8HXwBwaR51nAT7JtV
+VvhlYkLl1l5kXlbk1lrk0m6cgdt6Gm6VgS5X4XWSQK5X4W4lrdASBKBJxKBJxJxV
+VvhKBJxJxJxNhNhNhNhNhNRRRRRRBVBVBVBUxYwIgMwMgIwQgAwUgAwYg6wcg2wV
+Vvhcw+wcw1FjGfGfHbIXxGEg5An0++08mItyXT5bBkwX5lKSA7A3w+wFv93SakrV
+Vvhy6kbWQ3rb-W6kMVw87L1Xx0B3x3x7h7h7h7h7R3wiwv-pKpKorozTHTGscoSV
+VvhCJL4Z5l7GQCHf1YuksGg8Ib1VMl6JwG4D5W0lrcwFw-A0A7bX3lwX1nNlf-mV
+VvhB+U++WgaCTgspGpnpYpJp4oroqorocoNo8nn3wslTD6bnWBwoYTAB5mnJwcpV
+VvhT97bmWRwYcT68LlnZwMtT4CblWhwIg-wEg3wAg7w6w3w6w7w6gBw2gFw+gJvV
+Vvh94SXlLcwNtD5SEJiL7TGsrocoOmTnA99EA-lBEU++WgZCTcro-q0lBFASboBV
+VvhfFqR5NohXHphLIpm8xYU3SIU3SAU3WOBUXoREXFpom2wHGLELFDHLE9IP-pKV
+Vvh+HxU2iBk2C83HLV4pcCBJnyRG1yBJoTJRGqbMhVr9MO1pachJg9HPEH5oaSBV
+VvhLIqB5RXKk5kq0++08mEty1TOTRnNohNrHIOnoZoGo4lfP5dgWZo6ZR46PFS4V
+VvhoaVxEtM--k24+ExxzrrsNx82n5EqKcAeGM6fK62h-LfFNdopKhBYbIN7p5DWV
+VvhXJQsp6DYTJUy7xG2TIRLosNhBrPHO4obZR7ePEP3lh3OPHNaphDMoBpxM9-JV
+VvhBkU++WgaCzEtLmpppTpXpYzJLILIMwsb9C7nnGUgod9A8T9A8WmmpmpmpmpmV
+Vvhpmpz9L9LDKDKwxNBLopIpTLIxRHqozPHxx9WTGyB7x9YXFXHTHPJHF1+WXU6V
+Vvh++6f7HbuBxSBrFqRHJO4ooo3oHopkxJ9DLHtDMG2q2UxZ5HNHrLMFppoVhN6V
+VvhXHGNoXeh+wiXoARB9EFBHE3BTGqh5PoRjGpxLIIh5GFh1ECR0YmtHFhoouQxV
+VvhO4HLV2qLExhXHPMor39WHREzHRB2r1NBgqHOBoqHZBQvHJDELFHGO5pBLMoRV
+VvhqBKkUnY6++6f7HbtBwSAv-mwH5RalKdQBQ-Q7Q7Q-g7eP1OKlJXrlKPrlaKAV
+VvhNZX3RMlMsnX4UslbHslMFwO2T3ZKlNJgGaP1dakeVQ2VWJglWYcmWpMoT0h6V
+Vvhl5OB5WTFxx7h7tH3OKkqZwBdX-OMkKeA3PT-L-L-L091L1D+P3G5lwH8kQxwV
+VvhgA0j7+U++WgaFjZ+qzA-Ln+HXSoRbJpaAmPIJ1NB74C1o2Qt92Uu8YYu8JYuV
+VvhC2Yw7pYw7ocsNZcrTqKXODJdBrNdC3RdCGZdDLS1psMxa3DNcnqRDOoxfIqBV
+VvhPLphTKqBLNpBjFqn4xcoXOBMqTBbqHRhUsOHYsNqUtJbUtJjVnZJVnZKS1ZKV
+VvhOHZK9ECIQwC3UgC2bmgsGXcrH0cqHF8HJB75App4AlTLoxfErs+Iwk3TDO0UV
+Vvhq0MAQQd1DXvuDA-RiRZ39LFmpIUhF79HGk9FKk9FGl9EKl9EKk9Exf+h-P2hV
+Vvh-P+h5pch3d9GO0oqQhHqMhJZ9KN0q3AfOshNhvWpWsi9JfqkiajqjKk2jbjmV
+Vvhk5jWk6jWjm3vkfsmSv8yB4iWjWNvYfobSs8xC5hWjHZvIfov-vEfl9-vAflPV
+Vvh3v2flP7v+flfBt8wSnS1j4hLQflvJq8xSqR0jbhqAfxvRl9+SsWu7LiKiWO9V
+VvhZfYaWsWr85huhHZvF0SnCkOmJKg2gbRsVZh9SkhfOoh98vauWo1+JHw5XXgdV
+Vvh5XrnDAbJoh-MOXo3QxBJDIN0pa6hRVPIMLox5Wob3hBmHHTOTNTOPOPOPOLPV
+VvhLPLPHQHRDRDRwxoxshsxvmri6hvZ9T2DpBlhdxbtqDXOPQHNg3Uy-ssv8FsxV
+Vvhz0f6DBP9yAbtmbn3nX1i5F9Dt0nnny6gzmnnnmnnnYnXnYnInInJn3n3n3n4V
+Vvhmqmqmrmrl33wH0sgD1kr3gJVP66almFQMZP1BpkIZcL-kwKg2B+O2+Flm-QHV
+Vvh7jwZpjT4qstQPCJgtKnZPCFgVT+bk1UF-CCE4Vss-WLPPxHEox5NXZqaqiJhV
+VvhfZPOtKqiJhfZPOsqcvKZZdS4W6KMROVohrHEG2oXRBHBRxL+YVY6++Af8nvyV
+VvhDBu+2x1TNKr3ZRdOPML4pZo4pKo5p3oLzHPFTXoaoboaoLoaoboaoaoqoKp4V
+Vvho4pKo3palRNfPLOKoh-bpB-LpR0JqahBVh-BRh3BNh3RLqoZp4oaoap3oi7hV
+VvhFh5qp5nZPJSyBhJwPJPEPIT4IuPEN3Vh3XO4oKBbPGMpVR7nG3f383j3BJnEV
+VvhOk3Kov0G4UiCCnsu8DgaktlcmAD-kAFMOJNA6w3KKIk2kZFA-8P-MYkJZw3FV
+VvhH1JskOkpSA4QFLX0T3NqkrlKVAFgNjnrlasgxgRgXOkxv-d4q6VhNvPIT-PHV
+VvhT0PGT1PFT2PExwJgxwNgcIT3T76rlbmGBwOAQYT3b575l27AMaT0F2l0Rw34V
+VvhH08LdMGnhrKpNQ91kw15b6T0k72P1558EnwcymPJTNTPoBDEpZRB-ZLHKod8V
+VvhHFLEFplAHHFJo3dBF2LFO3pI7RBLLKfIJZpup4FhSRJXPNXJMqqLpa7xZxNWV
+VvhPOPLPlTOPLMLqU4hc-ASBxdhvXTNTSTMXTPMXO3DPLbN7JpZ3RQaPIIZpmRRV
+VvhF2LJ8JoYNBEfHEK2oHo2hOH1oZNh-LHKoBHEqMqboP0T5+U++WgcBTkgqWqHV
+VvhqGqGqGqHmrQgb-AgVKX5KalYkYl3kpkZkrk3kn3A-AEWKZkmBNL1ApVgAZJpV
+VvhkmNKP07pNQ6rJKkWVJP-8JJg+eJJk1ZYP+8aFf8qFe9+N4Yw-YOGkJJc9-NJV
+VvhUw3ZK0kZNL90NZMgBMJ1kpVI91KJAgBPEWl2k6kokakol3kYlZhQO5L66g97V
+Vvh7cmnqGqGqGqHqGqGqf1N5EtlmYtBCzouoC6-LL6elepmFwdxMZT9LL7Ln2pWV
+VvhNwoxMZTCDJwaTCDIwbTD9H85nmoXRx+h6cTE9FC5o0oGZx+h+tTE9E8blGYgV
+VvhwtT39P8blGqj8rlGqT9+T2DM9+T2DN9+T1HM9-T-PMrRTxvK90T-PL90T1HKV
+VvhwgBwExIgFwEw+gQgFwEv95wgFwIg+gPmlLlGggMgNx2wIwNx2gMgNx6gIwNxV
+Vvh2wIgRx2gIwRx+wIgVx+wEwVwwwIgVwxAEgZwtQEgZwpQFAVwlg7gVweA0gKAV
+VvhOsz4XTX4TTakxlsECCNLHnrqCx5++X+OmrXRm5kRj5P1j4f3T3b8T2P5b9L1V
+VvhT6bAH0T7bBD-T8XCD+T9XCCsmsnXeAmAweTBXD8MnMnmWAtx+byAxx+ayAyAV
+VvhMc7NnslWUZXET491bET491XFT490bEX3D0bEX2H0bEX1L0XFT0P0yR5DkdoBV
+Vvh10bEX-T0bEX1L0bET3D0fET3D0bFT490bEX490bEX48m8B0AMe6zbDT48mCQV
+Vvhxx6YbCXG77ncoHKAuB2aXCTG7dnLoHSAmB2cXAXECMmso1aAiAwvX7XDH+T7V
+VvhXCL-T6XBL1T4bAP2T3b8X3T1f4j5T-rAa5rwg-jEk+3+kD2T1558EnZ1xns0V
+VvhcU8G+dA-4h+xvIchpdRWqqoKEhhRJVDNPMTNLPLMPRLKPSPIPSXGPSAJoKrXV
+Vvh7gPT6qlhsZOarWNdTR7rRxorRrr1ZaTR8bJxkfR5r0loTPD5CBcx-nTODFQcV
+VvhqWob8BYhBmXM9HUbq1os4BQxG-XL9JUMpWpc4BIhS-XI9MULp1ps4BAxW-XHV
+Vvh9NUMoWqb8B2he1TEDOUrkxhoSnqsFv9QRLchppSGrLRcDRRrMxpsRWradZ9SV
+VvhOqEhxgMWrqo42xth8BthFhthNRphVRhRZxVhYlPJLOAqoZr0NsTR8RLS9Fc-V
+Vvh2k81+d60YB+k6EFlm-UGDTUwkxOseSC7bXWiBvOy7vsqnWLS7BLSB+2CAk2SV
+VvhAU2V0UHKhuyNy9PIkA+lD+Flm-UFDTgekwOjXsaLhR+kW-omoHoS6h5WDEsoV
+VvhnWL2nXKyBesra7sbbXWCCMWal90ElGABJJV6E2rtCvgeUfx8N9pOJPp8N9pOV
+VvhJProdYjJdJjIdYjJdJjIdYjJdJjTGaGxKZKxGaGxKZKxx8N9pOJPp8N9pOJPV
+Vvhp8N9pOJProdYjJdJeR-R6xBB8gKZKxx8N9pOJProdYjJdJjIdYjJdJjTGaGxV
+VvhKZKxx8N8rGDHHGLEeIdYjJdJjTGaGxKZKxGaGxKZKxx8N9pOJPp8N9pOJPp8V
+VvhN9pOJProdYjJdJjIdYjJdJjTGaGxKZKxGaGxKZKxx8N9pOJPsuQvcA2a7EpJV
+VvhK2UvFjJ+oJ+M9EY-J9F1+HKIUU2JZ7DTKIgxleD2qadB-RNuHF6IoOdB2XR6V
+Vvh3OLF7R2phB6eFphR6hVALG9LL2ompZlRAhJR-RAhFR3RAhBR7RAhBBBRAh7RV
+VvhBBAh7RFBAh3RJBAh-RNB6h3BRB6h-RRB2h-RVB2gLOH0lRhA8pr2ggHSGGlRV
+Vvhws93+FBHlE2tlE3ZoI+dLFI-JR0E2Zo2Ek23o1UhtR+u9RHECmr3l99PL2o0V
+VvhqJlR+hVR-B2hVB-R2hRR-B6hNR-R6hJR3R6hFR7R6hBR7RAhBBBRAh7RBRAhV
+Vvh3RFRAh-RJRAgLKLG9EHLLG93poomhRVB6fLNHG8ZqYoWZRhR+eHRH0dRpA8JV
+VvhrngdI--78J+GC0ZE31IuE-OQ6-ZR+B+T7kFlm-UA4j6vJ5NTUy8XMGF09XYdV
+Vvhwdwdwd8T8GYcCGf+MGU4CCIV4pPqEBoRkhcxcxcxcxcxcxcxcxdBZBcxcxdBV
+VvhboqIqJqIqJqIqJqIqJqIqTLNHNxRZBbpqIqSBRXYLMuJqSJBfXLOsoqy7BgxV
+Vvhjoqnqoqnqoqnr1r0r1r1r0rGrFoEk3sd-XXZ6FlKzY1F5S9S9S9RDRDRwxrnV
+VvhrTDQHQDQxBkxnXHPLPtIqyRRdBfaLNt3qS7RdBfpqYqjLOHOLOxBdRdBdRdBV
+VvhfoqjHOHOxBdBdBgxgxgxgxgxkhkhgxgxgxkRs9-G8UU++WgW7TF+lXoi7R5XV
+VvhH38YcoK2ZGRoRmVYO1VHKKR1G8QX7wBVAKlw58bDLDb9kQRVAKkbAXScAoVcV
+VvhIpYsMqUqUsMpV7Ind8D3xB5XLFHGD5-UBGgAQQd1C1XrAMUdvXGQKQt2b3bCV
+VvhF7lNnYGQKQx6GT5N4TUyF7lNnYGQKQt2b3bCB7lNnobWWR+T9+Flm-U94jc6V
+VvhJ4N5DXYsF-9t9WUcwcwcwc80Uc80YO1+20s2QQUM0Ebs01F47lrT7YEkg6gjV
+Vvh0++08mtLzY1T9THRLQLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRV
+VvhHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRV
+VvhHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRHRLRV
+VvhxBwhwB+OCUFlm-UB7TUYUsNjXoZLRNADx6NbLtHsNcFko0Uv-5564+wqyWGXV
+VvhdcyDOLSJgk+GQvKLTXW5ZhwgsWnW9D90nmkg90oE28+LDEllmYAv3jYULOLQV
+VvhDRHQ+12BkxpBlRd+gAl+1558EnUyxXnEfSlRZeLJH3HFH7DDDBD9DED7DH95V
+Vvh9K939L929N909P9+92T38mkg128GkKNA6c9-KXkWQg-A6g2a9+H29+7WhAIgV
+Vvh2Y8plaUX8plrQX8Zm5QX8Km4UW8ZmKUW8KmKUV8ZmaUj2dP8O02dP7OIt7P8V
+VvhOIt7P7OG2dP7O09mdQVd6WhQNs6mhQK670hQAVNmIg-A6WNmIg39B3Mb9-JZV
+VvhN2C0kw0NcgFw7Q+U4m+PwU4mqpgxRw+xCAEwuAVAaApQ0x98qQ5Bk1NP-556V
+Vvh4-lLyo1GzEzFoB9XHOtIqiJBfZHOtIqiJBfZHOtIqiJBfZHOtIqiJBfZHOsYV
+Vvhqy9EoR1Gk1NR-5564-lL+o1GzEzFoBjXHOtIqiJBfZHOtIqiJBfZHOtIqiJBV
+VvhfZHOtIqiJBfZHOsYoi9EoR1Go-xU-5564+gOwniVYc80Ucwc8D8D8C6cwd6XV
+VvhG1stC2NXIB+M2UU++WgB2Cov76JzRzRrRcO3ZNGYcvCl2A+O2kU++WgF2CQvV
+VvhlAOba7SLZeOadfH2lAH1oVoUm-cI0++08lE9v1MRJB3wEIZ2JJNGKOiB-RAxV
+VvhIP166VI6++6f4-1hCz9LHWpW5mpG6xAXDGB0oHIwBnd5JZbEmx7vS+YK0++0V
+Vvh8ls1wX5Go-gL1D+qFV2DrHlqWpBnAe6j92shHw6WcXBnKsNkk-YM-lln7VIEV
+VvhyDuaoTPGbGXGTYoaoKoLeHopmQ+I6+Flm-UJ0TcUp2oLiNaNWeXELH5Lk-tSV
+Vvh0++08lEBvHilpHopoLm9EYZ2FoMqCHEvAXo4oIp0g+tT-5564+Y7w1YoFWrmV
+VvhN2DE7Lo6++6f4UzhCrGYTqVZRrJcNKVaKJNNJod5KJR8Fod6CnUvCGkek-hyV
+Vvh0++08lk6w1VpoFOPB9YooJF2HGEsl0m45GG+k-Zz0++08lU7vXYnl2Ka7sp5V
+Vvhp4p5p6QaZYD2A80Tk+k++Y2vIjpFlIqpqjTOxxdxdhhhhRlRlBpBoxsxsE+HV
+VvhAhroqzLOxhbspzbKfKgBHm8BDmCB6YXG77o0OAwqXD7snXSAscbACMn0eAjmV
+Vvhg6mj8lb6wfCATmh6lWhNlGhclD8rX18sX1kw5wH+wfi9wfm9wfmPofu9kvu9V
+Vvhkfy9gvy9gg0PYw49Yg89Uw89UgC9RA8PFg8P8fulSrhgzvKx280VkEk++Y2vV
+VvhIjpFpIqqqLq6q5q5q4qKqKqKqYqoqoqoqnrV+-BmrTHPxRfqqTXLyROhOkpDV
+Vvh6coz6soWGB6YbE7cnnOAwbXCBsnWWQktXA8cmz8kX8wf4QXmgslz8oX48pb3V
+Vvh8qX2wfSAAfWAD1kTlA1misjmj6jmj7jGjcj1jcj0jsinjsimk7iHkMiGkci1V
+Vvhkci0kshokdh4kdgejf3vSqnzhPoEc8P01++0EHhEzIzC5SDQLOTMXLEYpIFBV
+VvhB4DGCHo1g1nXgXn1gnn-hW+-NWrTHPxRfqqTXLyROhOkpD6coz6soWGB6YbEV
+Vvh7cnnOAwbXCBsnWWQktXA8cmz8kX8wf4QXmgslz8oX48pb38qX2wfSAAfWAD1V
+VvhkTlA1misjmj6jmj7jGjcj1jcj0jsinjsimk7iHkMiGkci1kci0kshokdh4kdV
+Vvhgejf3vSqnzhPoO0Vkkk++Y2vGzp8lpglmdg1m90Hm9BIm2Gom1Wlm0gMmVh2V
+Vvh+-OGrTHPxRfqqTXLyROhOkpD6coz6soWGB6YbE7cnnOAwbXCBsnWWQktXA8cV
+Vvhmz8kX8wf4QXmgslz8oX48pb38qX2wfSAAfWAD1kTlA1misjmj6jmj7jGjcj1V
+Vvhjcj0jsinjsimk7iHkMiGkci1kci0kshokdh4kdgejf3vSqnzhPoEc8121++0V
+VvhEHhBzIn3ClHAKambWAWLX6Zdm6SQW6T8OKn1gI+-cGrTHPxRfqqTXLyROhOkV
+VvhpD6coz6soWGB6YbE7cnnOAwbXCBsnWWQktXA8cmz8kX8wf4QXmgslz8oX48pV
+Vvhb38qX2wfSAAfWAD1kTlA1misjmj6jmj7jGjcj1jcj0jsinjsimk7iHkMiGkcV
+Vvhi1kci0kshokdh4kdgejf3vSqnzhPoO0ZlEk++Y2vIzpGnKpv1IBnoWch5mgGV
+Vvhny6f6gzmgGoGch6rDIgBRU+OUhroqzLOxhbspzbKfKgBHm8BDmCB6YXG77o0V
+VvhOAwqXD7snXSAscbACMn0eAjmg6mj8lb6wfCATmh6lWhNlGhclD8rX18sX1kwV
+Vvh5wH+wfi9wfm9wfmPofu9kvu9kfy9gvy9gg0PYw49Yg89Uw89UgC9RA8PFg8PV
+Vvh8fulSrhgzvKx291NlUtlmYtBCzouoC6-LL6elepmFwdxMZT9LL7Ln2pWNwoxV
+VvhMZTCDJwaTCDIwbTD9H85nmoXRx+h6cTE9FC5o0oGZx+h+tTE9E8blGYgwtT3V
+Vvh9P8blGqj8rlGqT9+T2DM9+T2DN9+T1HM9-T-PMrRTxvK90T-PL90T1HKwgBwV
+VvhExIgFwEw+gQgFwEv95wgFwIg+gPmlLlGggMgNx2wIwNx2gMgNx6gIwNx2wIgV
+VvhRx2gIwRx+wIgVx+wEwVwwwIgVwxAEgZwtQEgZwpQFAVwlg7gVweA0gKAOsz4V
+VvhXTX4TTaUcwQ9XXgyCIrrCwCPIQ0pgHj9eIif03UvaPF3GsWsAphcim7fJvuPV
+VvhFw09Bw3vBwBf7wFf3wNP-wROX5KMmHdwctX8CDX9BtmnSAkbbA7tnFSBLtpMV
+VvhpSGRLspNpjXKXB4CCAkdyAceX78lT78lX58nT58nX38pT28rT08tP-8vOz8xV
+VvhSvCzStD-WoL2aKlvj9hR4hFhTqq7q6q5qCFhRhRxCQmpnf56c8960iCECnhGV
+VvhzZ52HPLOxxfrqbqaqqqpr3r2rIrHrXrV+-Xi9Kheif0rWyWrX+KsyA39TWX1V
+VvhCrscl0hi8AIfPWWq8m8pschWlMhHlMh2lMgpl6galS9+lMgLlMgplDWpD3y9V
+VvhMgK9MfIfC9MfEfDshWhGgzX58oX4CoX48oX58oX4CoX48pX3CpX2GpX2CpX2V
+VvhGpX1KpX0KqX+SpayaoeugNpsq6ptc8H70iCECnhGzZ5IHPPNTMXMTMTMPNPNV
+VvhPNPOHPHPHPHPDS2+4GshOqeug9S9u9SA-PXskIhy8AAvTWX28qsclGhi89MfV
+Vvh6fLWWq93WpD3WoH3WnL2WmP3sg13WlT3WnL2y9IwLshWlMhWhGgshWh0gzWqV
+Vvh8p8nyAQfGAMvGAMfGAQfGAMvGAMfKAIvKAF9KAEvKAF9KABPKA7POA-vKPuPV
+VvhGfelbLXMXLaUegc8st+vCp1yHwkRsxlRdxWBR0HJF2ooMx6tDECkDCCmDACnV
+VvhDA4q6+50shOqeug9S9u9SA-PXskIhy8AAvTWX28qsclGhi89Mf6fLWWq93WpV
+VvhD3WoH3WnL2WmP3sg13WlT3WnL2y9IwLshWlMhWhGgshWh0gzWq8p8nyAQfGAV
+VvhMvGAMfGAQfGAMvGAMfKAIvKAF9KAEvKAF9KABPKA7POA-vKPuPGfelbLXMXLV
+VvhY80YmkfXY1gvHTtAkngIn3dgdsX6Zsm7OQW5b6W5maZgkv3++TrWpfOfekhsV
+Vvhjchsk3iDX-Grscknhy8AEfPWX38qschWgWhS89MgK9IwK9FAK9BQG97gLWkAV
+VvhK93wK9BQHshHlTWq93Wq8p8nWq8o8ny9MfIfDslmh6lXh6lWh6lmh6lXh6lWV
+VvhhMlHhMl2hMl1hMl2hMkphMkZhck5hNjdh8if4RSBWBSEg25A-QQR5mFGzZ52V
+VvhHHLGxx9roboaoqopp3p2pIpHpXpV1nsgz3jCssnyKAzZXDtMnyKAzZXDtMnyV
+VvhKAzXXDbCj3zDbCekEwo3lloT7J9yIRFBFh7x4B3x3x3h7h7h7hBBFBFBFBExV
+VvhQEzy9DlfnyCB1ZXEtMoCKB1ZXEtMoCKB1ZXEsso7nvljnunfg2bC-QQR5mFEV
+VvhzYzB5KDILGTEXDEYnIFAh4D8CHm1gwMw2wEw6wEQIU+EzWnwKwvXXDtMnyKAV
+VvhzZXDtMnyKAzZXDtMnyCAyQuwLwyQug-1nkL55FwZHTtAonlBFOPGS6o7SB0KV
+VvhbEVto6Vx7dPID2+-HC9SpPriCBzZXTtMryKBzZXTtMryKBzZXTssrtrfpTreV
+VvhrP0kWh+ACCN0DnjyCeqQvQmxvEf2jDX6bCX8XBX9XAXBT8XCX7XDT7yB-wXsV
+VvhoLlcoclTXHT3scostQCBGA8BKDkcp7xRL2ZhD3b-XJX0yBGQ9sp6ksotkjXIV
+VvhX1yBCAGBBwKB8AGBBwKB7wOB4AOB3wSB-wWAxwWAxwaAqAeAmAiAeAmQWQmgV
+VvhKgTSmBr8qQul+h2A++7-FYjyGhRQ6E37gk2fYk2g7I+GFAA-6sk+2Wk6+I51V
+VvhE+6olQj6f3mwSwP8lwSgugmwxgsVbDHD6cnno08QwgwYXC9E77nGo0KAoh+ZV
+VvhbA9E7cn0o0OQggwcX89E87mGo0aAYh+db69E8cm0o0iAQgwg0QIh+g4AIh+gV
+Vvh4QEh+g8AEh+g8QAh+gCAAgwgGQ2h+gKA2h+gKQ+h+gOA+h+gOP9E95WmnmmMV
+VvhYh+gaM9E98W0o0mdQh+gi59E99ZWnmnMIh+gqI9E9CV0o0ndAh+gy19E9DYWV
+VvhnmoM2h+h4x+h8h1moto0p6nmpLoD9KPDHKLCPJL9jIH5lx+wT6oGlwXG550UV
+Vvhfh6AQQd1CJDrIQ-BZRXrqDTMTMPNPNLOLOHPHPDQDQ2+3QfEhghrX3SmP1OqV
+VvhOzOtOxOvOuSxOsSySqT+SoT0OnT1SlT2SlT3SblbaAO5X5Vsm5PsmMx6mcCQV
+Vvhe1X9XW8Qi0X9bY4QiFb8YTb9YNms8QeHX8YsmcGAaIX7VMm7KQS5X4ZslcWAV
+VvhK8T3SkX1WlT0WmX-SoT+SqSySsOxSuOvOxOsSzOqP0SmP4VrmfTEf-0UgBAAV
+VvhQQd1CJDrIR-BZhRxOBNxNxNhRhRhRhVBZBZBZBYxkE+K0h0qmrSAJv7gBfNfV
+VvhxfZfpfhfdvpfVvtvNw-vFw7fBwBv3wFv3wJuT4SMlcSAS5X6RjX7XoX8UtmcV
+VvhCAiC6dms8AiSENmt4QeFyQiFb9UdmdCAeHX8V6mNGAa3X6ZNlsSAOLX4W6lMV
+VvhdwJv0AC93w898A3vFw-vNvtvVfpvdfhfpfVvxfNg7v7gO5T8hx0g280pp+llV
+VvhmYAtITRDmFr1qZq5pcpI7BB2HFFXo1Ywsv+wkv6wcvAwcPMU+Mqh0qmrSAJvV
+Vvh7gBfNfxfZfpfhfdvpfVvtvNw-vFw7fBwBv3wFv3wJuT4SMlcSAS5X6RjX7XoV
+VvhX8UtmcCAiC6dms8AiSENmt4QeFyQiFb9UdmdCAeHX8V6mNGAa3X6ZNlsSAOLV
+VvhX4W6lMdwJv0AC93w898A3vFw-vNvtvVfpvdfhfpfVvxfNg7v7gO5T8hx0g4kV
+VvhfhIAQQd1CInrGh3Q6RSPDJiHpQ7IpIH1pHX+pGk6plko+-burwLORsp5kKoaV
+VvhlKnam4n4mamLn4lrnLlLnrkroKkbobk5ork5p5dxJtXJVspcSBRqyBWDGBa1V
+VvhbNUsqcsWbOUcqdt-bOYNqN5tqd4Re0bNYsqNCBa2XMZ6q6KBSJbKVspNSBK6V
+VvhXIWbp5iB8A-x4A4B-wBwxwJwpwRglwZgdglgRwtgJh3w3hK5TNlhyh0kfxMAV
+VvhQQd1CIvrHAww-BZOPLS6pNSBKKbJVtpMVxRdPND+E+5JfTlRdrXIT-PGP3PCV
+VvhP6PAP8P7TAP5TBT3TDT1TFP0TGT+THT+TISbpLaBK5XKVsprPsq6x6qMCRa1V
+VvhXOXW8Re0XObY4ReFbNYTbOYNqc8RaHXNYsqMGBWIXMVMptKRO5XJZspMWBG8V
+VvhTISsock5oMkMo5krnrlLnLlqn5mKman4lrnalKoLkKpMRxb4ruo+kD5M1558V
+VvhEnZ1xns0cU8G+dA-4h+xvIchpdRWqqoKEhhRJVDNPMTNLPLMPRLKPSPIPSXGV
+VvhPSAJoKrX7gPT6qlhsZOarWNdTR7rRxorRrr1ZaTR8bJxkfR5r0loTPD5CBcxV
+Vvh-nTODFQcqWob8BYhBmXM9HUbq1os4BQxG-XL9JUMpWpc4BIhS-XI9MULp1psV
+Vvh4BAxW-XH9NUMoWqb8B2he1TEDOUrkxhoSnqsFv9QRLchppSGrLRcDRRrMxpsV
+VvhRWradZ9SOqEhxgMWrqo42xth8BthFhthNRphVRhRZxVhYlPJLOAqoZr0NsTRV
+Vvh8RLS9Fc-2k81+d60Y8-yqEk++Y2wIzFFj2r3qzTPxxhxhhlhlRpRpBtBsxwxV
+VvhwE+NGzgx9vGsWkjugskqhMl2hcl1hslGhiKAIfPZX38qtMlGhiKAIfPZX38qV
+VvhsslGhsl1hzX28sX18uT18uT08vT-CwP-8xSz8zOy9-Ow91OtD3OqH5OnL7W5V
+VvhmvbDhRKQQ80+qUk++Y2wIzFFn2r4qbqMqLqLqKqaqaqaqor2r2r2r1rl+-a9V
+Vvhynojh9W90zenX1OpX2GqX2CrX38qtMlGhiKAIfPZX38qtMlGhiKAIfPXX38rV
+VvhX2CryAEfWAAfdwAfdw6fhw2vlg2fpvwfxfsg3fkgBfYwJfNARfBQa6T9iQypV
+VvhpNlkc6LP1++0EHlFx2z35TDRLPTNXMEYpYFBF4DHCHoHg1nngXnHgnnFhW+-V
+Vvhm9ynojh9W90zenX1OpX2GqX2CrX38qtMlGhiKAIfPZX38qtMlGhiKAIfPXX3V
+Vvh8rX2CryAEfWAAfdwAfdw6fhw2vlg2fpvwfxfsg3fkgBfYwJfNARfBQa6T9iQV
+VvhyppNlu-zr+k++Y2wHjFAj1gInJdghsX7ZsmNOQa5b7W5mqZgov3++UGzgx9vV
+VvhGsWkjugskqhMl2hcl1hslGhiKAIfPZX38qtMlGhiKAIfPZX38qsslGhsl1hzV
+VvhX28sX18uT18uT08vT-CwP-8xSz8zOy9-Ow91OtD3OqH5OnL7W5mvbDhRKQSUV
+VvhZxoA++7-Dp9qIQtBxhpxmBlxlxlhphphphtBxBxBxBwk2V+-fzjPbEiPO99-V
+Vvhenb2Oqb2Gtb1Cub18vb08xb+Cxb+8zay9+ax90avD0auD1au93as94ar96apV
+VvhD6ap98an99am9AalDBak9CaWo7Uh4LDGZHotIhGI9KYWpt2xWkqOqy8BlxnYV
+VvhXQTQt6r5rCCBiRekofv8yzkEg4rS0U+0BXAvzXegvBzBpPrSCBvWXTnAzDnBV
+Vvh18X-f6X1b5X2b4X3X4X3b3X4X2X5bYksm6kcmMsg8AWQ8AWACASQ8AWQ8ASQV
+VvhCASAGAOQGAKQKAGQKAGQOA8QW9j7oAjCnQbFtMriCBuRqxLBnTngo92Erl55V
+Vvh64-RDTgvmckFnckFmA8Hmg8HlQNnmANnl4VZD6O4IwFQ31H5L-EokZlH3QJQV
+VvhIlL-L5X2L5X-H7T2H7T+L8P1L8OpmpkpmphglA7gl9LBH0LBGanIkKnIfqnXV
+VvhkKnXbXTC9-TC8bnVkbnViBmBaRiRWhehWxaxP1pQDHlh94nwfCmgn9nQj9mwV
+Vvhr9mwjBmwj9nQjAmgv8ngXEmB52pAHJkRT-puqeqNqtqTXQXOxxpt5ET+5ESCV
+Vvh6h-v9ERy6x-fDEO1o3k1o3Ywxg+wxdHCL-HCKJnKk3nKZglQ3glOP9L0P9KrV
+VvhmJkrmJk7lZl7lZkI7QBQJ0L1L-FLVwJ3S5kXT5lnT5l0f1mGf1lWkdmmkdm+V
+Vvhc7OM1++0EHxBxYmyClHEKanbWAmLXAZdn6SQm6TCOKo1gI+06TjPbEiPO99-V
+Vvhenb2Oqb2Gtb1Cub18vb08xb+Cxb+8zay9+ax90avD0auD1au93as94ar96apV
+VvhD6ap98an99am9AalDBak9CaWo7Uh4LDGZHotIhGI9KYWpt2xWkqOqy8BlxnYV
+VvhXQTQt6r5rCCBiRekofv8yzkEg6DU0++08mQxynj1HKLJxxLrpLpKpapZpppoV
+Vvhq2q1qHqF12bDkghML6D+L4H-L2P-L1T+L0yA-g4A3Q7g7QBABhHXPFf9lASmV
+VvhP4Vql6ZgBvP0P-P-P0P+P0P+P1Orkqfrl4QVT1Rtz2Nm3wBr6akW3L6bkG3KV
+Vvh74gmJWJdB3EbNXOdkMX-WpSkVS26++6f7nrvCxBBNhFxCBBxBxBhFhFhFhJBV
+VvhNBNBNBMxYEm7nw99K3m1k3lYkJl4kJkrk3kjX+P-X-L0P0L1H1PIsqoOmwH5V
+VvhgalcRgG7P1SqkakKkKkak4kak4kqhwBexwFb6LkrSTl4QVT1Rm7g6VJm7w2VV
+VvhJWFfAZMZOHFI7qMqeQ46kMhLg6fW0++08mQvynbA5NDLLJTHXGEYo2FAt4DBV
+VvhCHmngwYw2wQw6wQQIUstnw99K3m1k3lYkJl4kJkrk3kjX+P-X-L0P0L1H1PIV
+VvhsqoOmwH5galcRgG7P1SqkakKkKkak4kak4kqhwBexwFb6LkrSTl4QVT1Rm7gV
+Vvh6VJm7w2VJWFfAZMZOHFI7qMqeQ46kMhLk6DX0++08mQrynLILF5IanofYx9FV
+VvhJB72oh6snG96p-oY+-57rh5OK3pnlRJB-RBh-R7wLFyAPEXELFPFLGHGM-DXV
+VvhM-0hfHpf7hK5PHWKobhh3h-h-h3gPFP4oahx7exxBb6LobSToqQVTGRm7h2VV
+VvhJm7x+VJWFfAZMZOHFI7qMqeR06o6hL1+UyE6++6f7nXvBh6wHKKap5WB8LXGV
+VvhZdocSR86TIOKpXl++FaRvFqZVRQwLJHELHPELGT3oTX4o6o3oKoJoYoa+HsqV
+Vvh+EfOoxOmPJVqosZh7vPFPEPEPFP4oKlh7fTGOjTHNm3x7rbxBb6LobQWPF6JV
+VvhQWTE6JMYOn7K7KYoJ0RaBebEWB09Jw06tEU++WgbDjgwqa+FjSBnr0chjmkhV
+VvhbW9E9Nwg9P8Wr1Qxuk2K+-67rh5OK3pnlRJB-RBh-R7wLFyAPEXELFPFLGHGV
+VvhM-DXM-0hfHpf7hK5PHWKobhh3h-h-h3gPFP4oahx7exxBb6LobSToqQVTGRmV
+Vvh7h2VJm7x+VJWFfAZMZOHFI7qMqeR06o6hL0kYiM9XXgyCWXv7gCQOAX1kQ12V
+VvhK4ZKH0D-JZZA-A7IH+GakK7A3NT-IIkpSA4gBLX-b2JskblKRgBwJcH2P4PwV
+VvhxwNi9DP5P6qgDSkOFhW6PKSqp5kKorkaobkqoLl4oDT3PDT4P835lLmGBwNwV
+VvhYXT4X575lNlmFwF0H47bkYFAEbT-FYkWZuK2gvRphKL0kwD+ltm5kg-StkQQV
+VvhQmMVCDcap7qB9IK2oJo0lR-8HFO3o5RR04LFVKoMFhBYTIFKrLrKrS7xphrcV
+VvhTRTN3DPM7JpmNhMbLJ8JomhB2x-ADGJopR5NXQPRxhuRuBtxvYPRPRTNbGoxV
+VvhHBSkNCU555Aa6XrvCw3B3R1roDTETEPFPFLGLGHHHHDIDI28eAj0laNQFOH-V
+VvhL-GpkZZQF6P2JalJNQNYP4PnP5Mblq7gVj3wVV+a5cTEP93DP87JmGNgUbL5V
+Vvh8JlGhAAw3PH1Nolw5AX0g4Pd-lln7W6xynjFHFPDTCXCTCTCPDPDPDPEHFHFV
+VvhHFHFDI28uAj0laNQFOH-L-GpkZZQF6P2JalJNQNYP4PnP5Mblq7gVj3wVV+aV
+Vvh5cTEP93DP87JmGNgUbL58JlGhAAw3PH1Nolw5AX0g4je-lln7W6vynb85IDGV
+VvhLETCXBEYmoFAZ4D6CHlXgwEw2w6w6w6QIUl6mw94NZl3dA3Q39L0KJl2VgFKV
+VvhP3JZlaFgNjBgRWT5Mam4wLm420MSVx-ggIxgcZL77am0RQQdL38oknkJhABbV
+VvhH5kQmA9+Mig555Aa6XXvBh+wHFKalsWdS8Zde5acVwOKoHl+xMqh5JNZopdBV
+Vvh-R-9LFKJooVhBKPIJZpKFhJjBhNWTKMapqwLpq21ISVxxhcIxhYZLM7apmRRV
+VvhMdLI8ooXo3hB7bHKoBiB2A+qv+Flm-UJDDwvdBBR9rojTGTGPHPHLILIHJHJV
+VvhDKDK25xdz6oB0B5ZPFtKoSJh5ZPFt4oMTxIhMg+vvEFlm-UTDDwvrIrKqrqcV
+Vvhqbqbqaqqqqqqr2rIrIrIrH+E2AZhPwpR1OXPtKqyJhjZPPtKqyFhiBHxLBP+V
+Vvhk1ri-5564-kuznbK5RDPLNTLXKEYp2FB74DFCHkvCXo1Ux2s5I6AFhDwoh1LV
+VvhXMtKqCJhXZPMtKqCFhWB5xKROQ+ovkFlm-UTBzwqcwGpddS6SLVtOLVtS6SKV
+VvhZfD21vPKzBLEqcqyJhjZPPtKqyJhjYPPXIzJnKmkYz+6++6f7nzvDR+RYwVeV
+VvhD6ZXlw6XlwX5lwQbkAMfb290X19-f-90ALk0kHBwrnNgkcPKLLxRTppzL5ZZV
+VvhlA7IkaNXKphGKZkeZAKMH4ZplsNQW3L8R4mbFQhnP9Qbmrwan5wLn53gllsrV
+Vvhn53wlWT9Qan57glXP9QrmaJgdZP7Nam4VQVOL4Kql3kKkZkqhQRbP8kh0AT+V
+VvhLz26st+k91PyBRdR2RaPDLiHpx3IpoHGpnXBQgXN5GE+3cO6oh-goB-2NQo1V
+VvhCJos6fPHMWo3oq2h3RCB7h9roqoap4oLoqoiFhFh5ZPIPFtKp4oSFhFh4B85V
+VvhzKHK5LDL29-rwUU++WgaDTgvkopJpDTIxxFxFhJhJRNRNBRBQxUxUEkNng98V
+VvhNalZhQFQ7Q3AJA-ANOL5K3m3RQdJP8JJmqBghWT9PmPAPlTAMKnA9XnA9AMLV
+Vvhmr3gllPAMamr7wdYP8N4mKJgVbL6KJlZdgFQ-g7Q7fL4NqmQ9DX4g5bn0++0V
+Vvh8mMxynjHHJPHTGXGTGTGPHPHPHPIHJHJHJHJDM2AKQv0maNgNPL2L0L-H3H+V
+VvhH4KZlpVQVLL8JKmZJQhXP9Mbmqwan4wLn43gn0swn0n43whlPAQKn47ghmT8V
+VvhN4maFgZZP6Npm3ZQNOP2L+P0L0OplaRgb0nslf-yx+U++WgaCzgtn-q1pZp5V
+VvhocoI7Ax2HBFXn1YwcvD6D-D4D0D4536ByQv0maNgNPL2L0L-H3H+H4KZlpVQV
+VvhVLL8JKmZJQhXP9Mbmqwan4wLn43gn0swn0n43whlPAQKn47ghmT8N4maFgZZV
+VvhP6Npm3ZQNOP2L+P0L0OplaRgb0nslg-rxEU++WgaBzgpp3oFotgx4tDFoJHFV
+VvhFB9FCAoGmBAR7++FSRrFqKNhJPLHLFLEHIH2pJdRNMLLJpqJJhZJLOMqqa7xV
+Vvhdj7hhj3xhVPPoSDPoRhVTOQKqr3hhWPOQbqKFhZYPMNKpqRRRNLJKaoplh3RV
+Vvh3fLJNqqB5SXJk5Xq0++08mMsynPGD2pJdhBsXFZsoNOR45bFW5oqZhIwE+2IV
+VvhbRoRZaPJKpopoJo2p2lBJOLKK3ppRRZJPNJJqaBhdWTOPmPPPlTPMKqx5XqxV
+Vvh5PMLqb3hhlPPMaqb7xZYPNN4q4JhRbLLKJpJdhBQPFLFOppKRhXFrcpEg7zsV
+Vvh0++08mUpz0nO9NDN9N9N9ND9RmmQ2mm3OAROP4H0H2L1L0L1T+L1AIk2l07OV
+VvhL16pZQAnK4kmJLL17ZNg6bJZkXRJP083Jg2dJKk0dJL+CKFg+eN4gfN4cg-YV
+VvhOHk4Fd9-JKUg3ZK1kKJM90JZQg7aJWkpVID1K3EgBNImkph092H+X1H0P1H2V
+VvhL0H4KplcRQUWkgYaX9DN9N9N9NDN9N9Og3Lt0CCEA0Ixy1j1HILHxxDroroqV
+Vvhp4p3pJpIpYpXpnpl1JP3MS9-f-OAC5tKlKTZP3NyJgJbsqlKXql5VQJdxQFtV
+VvhL1WJkW3eH-6bZP6g3KN1kLkIkNVqQ9-LyUXXY1+ZDTUvoop4oboMoLoLoKoaV
+Vvhoaoaoop2p2p2p1pl1NP3MS9-f-OAC5tKlKTZP3NyJgJbsqlKXql5VQJdxQFtV
+VvhL1WJkW3eH-6bZP6g3KN1kLkIkNVqQ9-QykXXY1+ZCzUtn-pnpJoroMo27At2V
+VvhHAFXmnYwYvD5D-D3D0D3536D7gJVsg4g3cksTZP3NyJgJbtKlKTXP3ODP2S3V
+VvhlKbpl5ZQC7L06KdA2WSJgWkJNYD-T-H-a5Nkk3Pw0CCEA0Isy1PGD2p3dh7sV
+VvhXEZso7OR05bEW5oaZhEwE+2aPIMS9EfEOB85tKp4TZPINyJhFbsqp4XqorVRV
+VvhFdxRBtLGWJoG3eHE6bZP6h-KN1o5o2o7VqSUZzo6QQchA2s+CwdB-gtwqApwV
+VvhpwpgtgtgtgxB-B-B-B+xAE+I8ramWqemSrangNh7hLhpi4hnijOr8vSp8xOoV
+VvhCxOo8yxfAfxv2g3f2g3f+g7eD0SGl4UwFc93NmlbMgTqIgVY97Mnma6gjq2gV
+VvhnsnjPDLEHGDGwh9moWoXoWoWlVgGkqYgFcD1S0l5QgJqD3NXlmUwV2H8bCLAV
+Vvhg6Hy0CCEA13C+Xj7PMz-qA1STTsqriJhvZPSPTNso4L-nKB5LAMXhAhV90L6V
+VvhMGl2m6lJlrlpljP6P3P7L2tKmatA7gdw7gZw9qmbkamakqmLkqmKl4m4l4mKV
+Vvhl5lqlLlplblZlsl3m42g3QZX8pmaEqPANQ1CNroTPStKri7hvsr8pTmQz8nkV
+Vvhk79z0++18mgyzXnSU-DErqJhlNLOKaq3lhNR-hJh-xFR3zoqoLsx7h7x7h3xV
+Vvh7h7x7h7hBh3hFh-hJh-RNgLKOqpqZh9ENxHEJxLEZRdfHMPEHLPFHKPFLJxhV
+Vvh7RFh7h7hFR9WPIPFxhFwtKpLjXPJT4pKo4p5lZCao4FMPFMqVh3XNqoaBMLGV
+VvhQoVOlGVPlHJQo4g-JhCUZvU6QQchA2Y+Bfcv3A3OOzS6jNS9qKaxVtjMVvxdV
+VvhP-ClE+4Khtgchegbhtgv4PGPJvRPVfQvfqhmirhGjKh1jKh0jjOn8zSl9-OlV
+Vvh9-Ok90OXkbYgFcD2O0lKQgNq95xZ96N0mKAwdW99xV9AyAvqnpo2oXoj9GwhV
+Vvh6h6x6h6gMP2gBd92O1krUgFr93RXlKMwQcD6F2mdnZn+k21L-lln7VIax0TLV
+Vvh5K9J9JDIDIDIDHHHHHHHHHHHHHLGLFPFPFPFsaoqopp3p2p3p3p2pIpHpIpHV
+VvhpXpXpWpXpWplMA-+xkQQQmMM7jQbMRfmqWqWqHqHqHqHq2q2q2q2pppppppaV
+VvhpapjPIPIPILJLJLJLJHKHJLJHKHKHKHKDLDLDL9N5O0kMkg7JJUmDHryDB8PV
+VvhTHkakAtsEpMwlg04P7P+Zbm3kNOARQ4aX4P-ZslKkcZgJgC8H4P2THt4lKoyV
+VvhJgJhDqlKnC6-99P3PHtKlKoyJgJhDZP3PHtKlKoyFgJhCACAnwRAb2lpmAKkV
+VvhKEk6st+k9HryDB8BP0o5RAtg+ghgAgZQ7QVQ7wNg4AJg8AFgCAFgBwFgJQJgV
+VvhMwPWPOtKqaqqlKXWqQFgCADZP3P1tKlKkyJgJgDZP3P1t4lKksksXwRAQgRQV
+VvhQf-J1EXXY1+iDTswoepQAHn5ZghPT7OrmJk6m3kMlpkclakclKl5lKl4lSFgV
+VvhJgHZP3P2xgJdshb3P3P2tKlKlCJgJgHZP3P2tKlKlCFgJgGAC7z5H5D6D6CkV
+VvhUUsBJJV6FHryDB8QCBP0f0oLR3Ronak1Bg+ghgGAAgZg8Q7QVQCQ7wNg8g4AV
+VvhJgCQ8AJQCQCAFgGABwFgJwJQJgNgMwPWP4POtKlaqalaqqlalKXW+Vl4laksV
+VvhkyJgNgJgDZP4P3P1tKlalKkyJgNgJgDYP4P3P1X2X1WDlplolmm2m1m0g5cDV
+Vvh1JJMG2MxzXnGf0fJktklDBS1JtP9P-6phwZg4vT7P-f+X6L0f-X5P0b0X4P1V
+Vvhb0X4L2X2T3P3T2P3t4lalKlCJgNgJgHqlalKbW+VlKlalKlCJgNgJgHZP4P3V
+VvhP2tKlalKlCJgNgJgHYP4P3P2X2X1WTlplolnm2m1m11+Bm66++6f5FfqCpHEV
+VvhFqhZy7Uy8bcq2cMGF08I6iCGoWbmoWbmoWbmoWYh6dwh6d9G8GoWUx2t9G8UV
+VvhO+Yh-JJK5FM3z-HLk1RQ0++08lkOvHiVolYh6c9G80oWUh6cwh6c9G8D9G8DV
+Vvh9G8C6h6cwh6d6XcWB6a1stWHWMFfNXoHI6U7SkU++Wge+jkLqmU7T-+++pNJV
+Vvh+jkLpz+DOKFZPbFdNaZZQW-IHJBAw-JXPqFdPaRnMqVZPKIUJ4JM65FZS5HkV
+VvK14NjPbFaMKBZMbZoNTE+uU++xTPqxVJXV
+Vv+V
+Vvend
+Vvbytecount 22252
+Vvcrc32 dfcd4efa
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.746pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.746pk_vve
new file mode 100644
index 0000000000..eed2760a56
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.746pk_vve
@@ -0,0 +1,630 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.746pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAX6q+8+++C2v0Uk+0ZFB++dIHO0YEEk++Yp4GTp6ojE-Pp+JV
+Vvhxk2zU-9t+FykrzgRvn4RomfQAtqzB7qXKRcpfMwrbLwsbKCNpXahHng7ozClV
+VvhbGCmbGCmfECobDGobDCpbCGpbCCqfAGrbACsb9Gsb9Ctb8Gtb8Cuf6Gvb6CwV
+Vvhb5z7lgf4Cyf2ww0QDnkNkXkekHktkDD2azwwKPswOfowSPnnm7iom7iZm7iLV
+VvhluhelP0ngw8oXvisq9X-g9N00pJMGIJ5zIP+rws-99+Jo9mOo7n8nsnOncneV
+VvhnMntn6o8my8B4gfsoesgWBCjm6ofm6oem6oum6ofm6oemMoPmMoOmco8mco8V
+Vvhmsnun6nenMnOncn7o6mdoMm8oxTKqRGAiR4AqQyAyAqB4AmB4QiB8QeB8gbsV
+Vvhoulsp9liGBKgLspelS8BKwKBGwKBKwKBKgOBGwOBCwSBCgWB8wSB8wWB4waBV
+Vvh0giAuwiQqwf+mQ12+LlU3QQ-990UhoA9XXh9FIbpFwefYQOrhHkfmmH+g8OYV
+VvhjuhIVPqPcqOvaxBKick1BvaA6lWrb2erX5aqX6apX8WoX9WnbASmbBOmbCOlV
+VvhbDOlbEKkbFKeoJeR78fGGTfHG91HG8p2WhEsgBIcfTsf1TfTt91TfTt9+-0hV
+VvhIdsup1ahAv0RAv0R6v4h2v8R2v8R+vGAwvKQsvOAovSQgvaAgveAYvmAQvtwV
+VvhMw-wBA7w3AG9pQO9dQePJgmkdx0xpPTQgAOkd2EACCNDGoTxFg1Tp+2h2-LKV
+VvhkASxOgihKQqRGQyBCR0B4R8B0RCAyRGAuRGQqRKAqRKQiRSAjtptmdq6mjbMV
+Vvhb6bNb6t7qOtQORejlNquswKRewGRigLWbOj3yRegKRewLtqeljbNf5bNb5bNV
+Vvhf5bNb6yRWQaRSQeRSAeRSQeROQiRKQmRGQqRGAuR8QuR8QyR4B4QyR8Qqh8gV
+Vvhih9-lg1A+JnU2h1Tp80QFEfXY2N3Fzp4gS9SiP4wgveg4fiQC9iQFviQJfeQV
+VvhNi8ub5GvyQUvfZb7Ctb8CtyPUvEvbti1mthomjasD9yPRAiPNQiPJgePCAjWV
+VvhlAiP8QiPJgfZarH8asD9sdi1hnhjbACqbBCqyQkvSQh9SQgvWQd9SQh9SQgvV
+VvhWQd9WQZPWQZ9aQVPWQVfWQRfaQNvaQGPWg4khv8wh8+EfTc-0e-hFUdlmYB2V
+VvhFzp4gS9RiP4vgveg0fiQ89iQBviQFfeQJi8ub4GvyQQvfZb6CtyQYvaPUvAvV
+VvhbWasD7sdi1mjarH8aqL7apP8anX8sgH8amb7apP8aqL8sthomSGPUweRzZbTV
+VvhtNryCRykr9DHz4lwP60UkIQAXXhFFIbpFwefYQOrhHkfmmH+g8OYjuhIVPqPV
+VvhcqOvaxBKick1BvaA6lWrb2erX5aqX6apX8WoX9WnbASmbBOmbCOlbDOlbEKkV
+VvhbFKeoJeR78fGGTfHG91HG8p2WhEsgBIcfTsf1TfTt91TfTsf1Tykkg6Okg6OV
+Vvhn97unObWfCadnNgDfAalyQmP8QiP8QePGAePGQaPKAaPOAWPSAOfVwOPdwGfV
+VvhiA2lSwWyEbjNioFfyPNaL+g9-tD1jf2gOth-mf53g3F61++0HJ35zIP+sh8RV
+Vvh96kQv-ofo9pC8R8RHZbGbItNodpCKR8RHZbGbIbGbJsU3BLtodpCKR8RHZbGV
+VvhbItNodpCKR8RHXbGbIfFfGkgr0mDodofosovg1F7-QQR7Gh5zIP+ozjImA9GV
+VvhjJsdpSKRLZbJtNpSKRLZbJtNpSKRLZbJtNpSCRKhD0mBGzow+9-MGUUstHIpV
+VvhGDZ4mjowfGpQ9RjTsdryKRzZbTtNryKRzZbTtNryKRzXb6P4b5X3b4ygCQOwV
+VvhCQOwCASw8QSgCAWQCQWAGAdQKAgwOAowJwwwBx2w-xFLTMkxqROUsYgAQQdEV
+VvhIYTxFf51hvjv51hfmtgg8ojv12gACQOAKQNgSQNAWQNAaQJAeQFAiQAwqQ6wV
+VvhuQ2wuQ-AyPxB0Psx8PoxCPkxGPdBGPdBKPZBOPUxWPQxaPMxePFBePFBiPBBV
+VvhmP7RmP3xiP0BiNgBaNgRaMAOq7QnbMZXGRWIFdptB5bKYoaRKGCkbJYHgdp9V
+Vvh4nbIg9KRCfOR9tiNoNiOo7ido7ientitndj8nNjNnNjOn7jdn7jemtjtmdk8V
+VvhmNkNmNkOm7kdm7keltktljb2f3b3f2b2gACgGlk9D+hPPwCnk8l9Czg+c3pAV
+Vvh0U+0EHp5zIOlsgP7gxKkqC8RXZbMtNqCKRXZbMtNqCKRWRbWb5DvGQMvGQQvV
+VvhHWb4Cpb3Gpb3CpyQJ9KQFPLtkphdkahNkahdkLhdjthdjP0pevgPGmhfJxhxV
+VvhdxhkgHpB1eehLqB5zIP+m+2wX+mE2gX+mE2Qb6kE2A5Gk+2A1IwlXSAMpH4BV
+VvhomXIAcrH4BImXQAcpHCBgmXJAsqXCBLnCBYoXIwpXLB6pTBMpXKBIpXJBcpHV
+VvhOBEqXIBsonOBLnSB6rXJwsXEC6pHWAwtXICMnnWBItXCCMpHeAotXJCcn1eBV
+VvhLneAgvXIww0AYvXJww0AUw0BIw0AQw4BIw4AMw4BEw8AIw4BLnkcl1kcpHkcV
+VvhknkspHkskXkspHkskHl6p1l6kHkspHl6k1l6pHlMgwGBIwK8D3XJwwK7D4XIV
+VvhD4W1lcpHlsQwOBLnlsMwSBIwS3D6XJD6V1m6p1mMAwWBLnmM6waBIwa-D8XJV
+VvhD8j8XJD8f9XIH8f8XJH8b9XIL9X9XHT8TAXGb7PAbDkgRgf-mAn0L1oQ1AkoV
+Vvhkx4wr1D1of0kyYsA++7BIITxFg15ngn+mArAkAbAnAb+oQ9DkB8R9+orow5HV
+VvhLIANoop18h7BEnbGDJAuoHpHGR2xIofEDJBNo1p1OgsxIrbCDJBunHpTC7nHV
+VvhpHaQkxEub9DJwvb8DJww0QYxIw4QUxEw8QQxLnktlXpTD2b3DJD2f2DID4b1V
+VvhDJD4f0DJD5b0DJD5f-DJD6b-DJD6f+DID8anpHmecxIwiODJD9eHpHn7YxIwV
+VvhmcDIDCZnpHneMxIwyKDJDDdHpHo7IxIx0YDIDGYnpHoe6xLnot6xLnp72xHnV
+VvhpfpTDLfJwxWRHoqLp3qLorqKodq4nw9LL8nB7AjAonmgrI98g9VD1558I2F7V
+VvhxITLg-b5+GW6rbkbqblbpbmLorn5oLncnbo5n6obmcp5m6pMlcpsl7psktq7V
+VvhkcqckNqdiRiObQadrNWRuLfSZurexOrux8+Efng-0Xc-4i6f+Fce+FjY4k2PV
+Vvh4k295Wg-4lyk298k28CxyofTh8ruKhupfSderPShmcfQaOqueRefbOb+fMb0V
+VvhbMb0bLb2bJb4XIb5bGb7XFb9XDXCXBXEX9XHT7TKT4TOT0TSW6+Glk4Ppf-rV
+VvhI+fXY2N3Fzp4kBvD+Fn+3B5+lfoOmeo7n7ntnNndndn7ntn7o7my8R0geR0yV
+VvhL6bFjWltoPm7oOmNo9mNo8mNoNmdo8mdo7mtntn7ndnNnMndn7ntmdoNluoxV
+VvhXJpRWE5yKE5yKE5yKE5yKE5yCE5u+RkU2zohfHqUcDpF1558I2FQxIT6gBesV
+VvhosWAxvBwhvRwRvdwG9lw7vy9xw3vqABviAG9aAO9SQOPKQW9GQaPCAeP8QiPV
+Vvh0QmOfAadnOWgqbfDZunuxOo8Gko8Gh4jCkoOCh8j8koe8koP+eof1Y4kof+OV
+Vvhof+S8kof+TgB4k9v1Fd8o9-DfEdTfDdtneWQuNfAedn7g7mtgNhKhMgtgdgtV
+VvhgtgHMv0PK9+e8NhsYf2NWsZmgWS9e58mBMj6IfEYSzV0h14A418ogAFm8ob5V
+VvhQWgrmtgLntSR8xhmkP-3hmo3hmo3hXo4hGoKh1oKgooLgIobg3odOB8vp9fIV
+VvhytpPXKhxWpqfDQgRuU25hf0nIUj55Yl8GDp4kBfMrhE-5NkAGxWgWhSQeROQV
+VvhiRKQmRCQuR8Quh4QyR5tnuo7nvniKR0wrto9ndo8ntnvntnuo7nto7ntoNndV
+Vvhodncotn7p7mspdmNpdm7q7lNqxHSoE2Nkrrtlar7m4qtmKqdmLqNmbq7mcptV
+Vvhmrpi8QmBLWbAbHtNn8oiCQmx8Qmw6g8Qmw6zk7nPkHkNnfk1kNnfgw4gyf9+V
+VvhkguOBB95a1LGm7J3owf0+YWEg8lH0CCECHJ7yYTDb15BkvD7m6H6SKNARgB3V
+VvhH4L4EplJmH3gFQiQBQmQ7QtwBAxw7R-g5poKk4oZk3ookCFhBA1roXkLomkMV
+Vvh+FY-0hyxz-rALNmBL9owvEnwzDnwzDnx1CognJmBb3rA5TjTc-0E2M+GscYhV
+VvhRtDKSCAxRdwxRNLJOTLJKZp3hhBPPGKso3k7nokNnYka3AhABHH6L2FKkql2V
+VvhS8T3GQb5D+lQYgKgk7-gJ+iCCoh2FjF3PILJLIOVdO4YcKWdacVLeteLJemOV
+VvhdZKgagJIfNfIHofdfIEuyOp1GjahEofdfYAuyOt1CjaiAoftfXDng7fXAuyOV
+VvhwmsXg7fnhTbEtNoCKR1ZbEtNoCKR1ZbEsto85BdPvWjOo8VlJEk++Yp3GD34V
+VvhsgCojMgg8ngv13arb5Ssb6Ktb6Gtb7Gtt7mHiSKQYvbZb7CttNmHiSKQYvbZV
+Vvhb7Ctt7mHijb6CvyAYvjsm1jDX5CyyAIvyAEw3wAw8A2wFw+wNvswVfowdfdAV
+VvhlfVAtvBh0MTIihSprdnEc8dK1++0HIZ6woMQ0wpzj9hvH3gvCkmNhemri7mqV
+VvhiNn2idn1izf8Cxb7Cyb6Gyb6Czf4Gzf4D-yQIw8QEwCgAwHtkXlTb-D4ezD6V
+VvhayH6ayD7axH7axD8evDAavDAyPcwrui1nthno7hYo7hXoOh2oOh1ozanDIamV
+VvhDJelDKyP+xTtcxWcDOZoqdQxiKHPZXr8ExuIDSyHDTyVA-5v2-9v+-CU3TU-V
+VvhPr+MxE4THH0VD3QEQQdeNYXnFVk91+gxOlk9DKgA0nj5gvqnjPCmgA0kkOh8V
+Vvhkdl4htkdl3i7kdlIi7kdlHiNkdl1idkekniekdkXj7kdkXjDb-f-CxyQ0kk1V
+Vvhjejf8yD+ayANjXkDaxAdjHkNj1CPlA4PknawD0avB8iYkeiXKPcwGPYqatH2V
+VvhatBdiHlNi1SPVAKPUrasD4arFtholehXWfMwWPJ7aqD6apCdhHmNh2ePIwaPV
+VvhEv0PEwePB90PEwePAv4f6wif398P6wmP2vCP2wqP-9CP2wrtg1h7g1ndcvKOV
+VvhDDaXhOYwycCra1oNUvSMDFyLCsZnodMvaKDHZXiOIxCYCvZ1pNEviIDJyHCwV
+VvhYnpjYXjN6xSFCygxSmjv5NgA0lqP1+gBeg4kqekOqtkeqtksrLl6rTT2TSxgV
+VvhJhxQNE23lo+FD6DDcB-M1++0HIx5zYOmz0gfqmkP8yifOshQ8ljP13g9yAWfV
+VvhxgefxQmftAqfpAyfkx0fgx8fYxCfVBGfNBKfJBSfExWfAxef3Bef-BieHRe2V
+VvhreUk28Mk2OJ+2eB+2u7+3O2k3f6-Xv+-fu+PyU4u+Ng+4DgU3X8U31CU2oCkV
+Vvh+FFO+EFe+EC8rXahp8fPGkfOGmfMGnfMCpfKCqfJGrfHGsfGGufFCvfECxfCV
+VvhCyfBGzf9H+f8H0f7D1f6D3f4H3f2P3f1X2gA0kkf8vhPyqhDjPX-SyiA3u0XV
+VvhKEk++Yp9FzF45w4xq9quaolfCogAafSkmbiemZj917Gyf7Czf6D-f4H-f3H1V
+Vvhf2D2f1D3gA3AOg-ASg+wafswefpAifhAmfgwqkiHnui2nv0qHFeqDGepDIenV
+VvhHIemHKelDLekDMg7HNe2qeUxmaDRdIreBByXA-4VA-8n+GgU39+-KU3t+LU-V
+VvhTXY-Ts+Lst+Ly+3yCE3zU-TXY-OU399Pz1oQD50Ui3c7llszDYTuFfDxKmpPV
+VvhCpith94yeoezeob-apX-aqT-arP-erL0arL0asL-atH-etH+euD-auH+avD+V
+VvhevCzewCzaxCyaxCyayCxfNbNbNbNfMfNbNbNbNfNbNbNbNfMfNbNbNfMfNbNV
+VvhbNbNewCzaxCyayCxazCweyCwezCwb+Cvb-Cub-Cuf-Cub-Gtb0Gsb1Csf0GrV
+Vvhf1Grb1Kqb1Opf0Opf0Spb0Wob0anb-enezgP8fiqghOlzKgUk67V0++0B0wjV
+VvhymrMU-PG+FNqrYlRkx7hYxFhRRBhNxBhKB7hHWbGTHXHTIPITJHJQ-jXQ-HEV
+VvhrxPPl5qNZxOQTJXFTHXGTHTITGTJTFTKTEXKT6prjsprQz4BVrDlXLVvpsQmV
+VvhXKVn8BIVNn8BEWNnBxAXNXJx2ZNGRvBaEsVoWvofXIbFK9-tMUXXY1YiGTJ5V
+VvhiBDwDGkxaReBjWTOtLqiJxfZTOSNmLP1lbFLT2QYkJkr3ABQ8gNQ0gRfb7OcV
+VvhmbZwldxwlrsbnMPWTBbZFwuS6rndFwu3xwqIxwu3TBVbnLTrn5SAhsX8SNm5V
+VvheQVfIXlKkIEwBg3JD+P1FoRwIukhOQekLKA555Ai8Gzu9Qeh12mrRgRg3AFgV
+VvhIw7gQw-gNPP4SKlcVwKLT4ZcldKAS4X6NcmYSBHspDbHt7oyGRLWXJXCBLnXV
+VvhLsn1RwgtP8CbmHhgUw3gMwBgBAJg-AZbPAkx4QKkWKE6st+tAobuFxyDqADLV
+VvhkxuRy+2C7xzZTTtLryJwy6TAkpT8RoFwVg+nT4P26blKlW3wFgSQFgaABgeAV
+Vvh7glw3wlw-wpvXASzXBSjXCSNnbaQpuXCSSCQtst7nbeAtussnLk5nLk5n6kLV
+VvhmrkbmckqmNl4lulKlH4AJQEmb3P+EgD0NpH1lA7gD5WLk9-YNEQQQmsd9zchV
+VvhmNoQDANamKdgNQ3gBgBg3gFg-gNeT4OTT5RrmKOAZZyAdnb8Qsmcwdmc8AhmV
+VvhzP9WbIXIsdpSCBKAspTCBLnHRgorT9CKmXdwYg-gUw3gJABgAwRQ-AZbLBkhV
+Vvh8AOkFqM2st+U92bwGBFxP+oaMx-LLBNrmqSDmaSQZcb6S6m5dgZvH7srqCJxV
+VvhXZTMTEsgzCxxXZTMtLqCJxXZTMtLqCBxWBSwvWnQQ80jNkU++XEsEzwgjcgqV
+VvhjPG90tRZFYKrOK34OqKlSKh4gqZPFvBeCpOoT+SpOzSqSxWqSxWpWxSqWwssV
+VvhhcjDWpWxWpSzSpP+SoT-OoP1KnP2OlP3SKlW7ZT479H5BtmWqi6xboqTLNPLV
+VvhjgH-kgD+kw11jASuKtg9RPuPJA7vFAFfBQJf3QNf3QRP1WL6KZm3gIm3gJloV
+VvhgZlZgolJh3kphZkJi3jaiZj3jZhrk6eAOun9500kNKU6st+tAYXwFwSBTwDKV
+VvhkxqRuBzWTStLriJxvZTSScnLT0mbN4P7R1hQVnD+P5QWkblL6gFgJl93P3b4V
+VvhP3b4T2X5T2X5P2yARwHXT6T1tLm5kyJwVwDZT6T1srm5kslskelOPWmomw+qV
+VvhOEFlm-kOFjp3pYprpNp8zGjx8hCRJxV++L7woPzGp7pMpSJxLZTJtLpSJxLZV
+VvhTJsrpMp8bODxZ9-FOUHXY0+aKkN3oop5odoOzDjwyh0R7xJ++VOAfWlB0h8BV
+Vvh9ZTGtLoiJx9ZTGtLoiJx9ZTGt5obkphw7uT-aKkja4ksVgG6L3S3loZQZ4PAV
+VvhkB-wo80DOkVlmXQqGDp5i6nDhAioodospC7xDZTHtLoyJxBxHWSliPFvCni5V
+Vvhh8ibhMj5hKjbh3k5h2kLgnkrgIkrgIl5g1lbZARsH6RomLJQZpT6R6m5CgRlV
+VvhELlv+rldNgKLT2WKl5dwBf3gBf3w7f7w-fBw1qh5jzOpSyOqSwOrSwxfVvhfV
+VvhW9ZvWPSPOlavWsLvhvZEk17g-5565-h6zITKXwofohKROBTWTKtLpiJxPZTKV
+VvhtLpiJxPZTKtLpiJxPZTKsrpcpOfWqY1+RaoBJJVKHmrw9B3wXLXIoNoR5FoRV
+Vvh3pNfJaoB3XhNCpp7Ex-aDEPJQnoLEx3xFX9IMmp4pDMWpK6hJhFV9KbKTHXLV
+VvhXLTHXLXLPHyBSBRxDXTMTMTGtLq5q5oiJxVxVx9ZTMTMTGsrq5q5ocpspsoOV
+VvhpOpOPWqZqZqUk3Ji0CCECH6hz0nFSspB4B5FoLFaoB3HhRGID4pLAh3xFX9HV
+VvhPIMWp4p42hJhFV9JTHXKTHXKPHyBNxDXTLTGtLproiJxRx9ZTLTGsrprocpcV
+VvhoOp8PWqYqg-fPkU++XEi9zchqd+IoxxbTPOqq4oZpap4oqpZoapqo4qKhhdeV
+VvhTOS5r4SBlqTRRMrLJxuDCBu0bRbmXSbX4RvJsxuFbSUdrNDsrMHsr6Nxi5TPV
+VvhSLqLdxZgPMPFPKPHPIPJPFTLP4qbRxzH+IbNc6Rk0CCECHZ-+0mrSNjPFfGuV
+Vvhh2Jri9EYgKjN39Bfqkhaj8i4itiLiciriLj5iLj6i5jLhy7vu9PWSybZh5jtV
+VvhsfBvyPFvy9Lrjdh5jshLjdhLjchbjMhrjLi5j6hsisi6iciNiLidi5iuhajLV
+Vvh2vBvpnCkSzR2Rw3qgwBsb4xxPZTKt5pjXJfBsfn5g63l0556Bmx-yWn9b+D6V
+VvhkeD3VYVABw+bH0P17Jk5lGBfT4AZhwUVObmNZwi6X9Vsn6OApqbBRcnbKQtpV
+VvhXDR7nrGQtpXDRCCQxnt7nrKAxpscnbSApryAm6T9WjT7arlm3w-wEmT-P1ArV
+Vvhkqh1T3RZJwT0RweNTQxxjZTPt5qzXOfGsggUg23m-YF480UhzGn0SKj0SdkZV
+VvhF3X0EpT+YmOA7m7sz0MWSQ7V8Lkq2eL2X+D3XHscpC7xHZTItLpCJxHXTIXHV
+Vvhj8sgr10kPrA4HuMd7Wzx9QSc51l2D-OI7A-A88H4OIlqVAZMH7G2mYVAgrsZV
+VvhmnNgcrT885otoQ1DlAf6lwb4mgL8lgb5mAj2nvodocIglpDAN2n4HXHBJ2nIV
+VvhFghIP9FKmYNwZ4X5Fp2gN5InkYZ3GKcrlA+fb21+FLE4CCIc5Y5rDxExrXDRV
+VvhxBoxrorDLPPPLPPOTNyBShOhE2ftTNtLqSJxbZTNxxfXT1TYT1XWSnbrcvOHV
+Vvho3Yh3bDGN2pOqLn+FrI6st+t8mvp96TLQS9GnGOhGcXKWCJxRstLprXZTLSCV
+VvhJxRssbprbrpcZxKNTJWjPJaap03vPG6chR2XapgnobNoHGXFPGiMS9VkRUVlV
+VvhmXQm9TQfsgb+lJkAOvX7X-X8P0X8L2T8H3T8D4T7H4T7D5X5D7T5D7T4D8T3V
+VvhH8X2DAT1HAT1DBT0DCX-DDT+DESoo5gx3uHFWHozS1p5QxK4DKRHprFBRoDMV
+VvhUYqL6xfr2xjurTXSTTM-3E2THG0sl5Q9XXh9FWrr8wZQVxdQSBZQWAJPkfkgV
+Vvh0MlblciANwNg7wNgVABwNwRABwNwQwFwNwMwJwKAMwKAGAIwRwCgEwRw8wAwV
+VvhVw6mP1D6T-EakXmLkHBg6wdvEqkHmrgoT+D9SYJfDASXNfDASINeDBW1ReDCV
+VvhRoRdDDRnVsDDRYZbDERXdbDERIdaDFV1haDGQnk5ExBnD-N1or6w7XDIQXkaV
+Vvh7BFlD1MXpekq3BOQGhSQKRTslcq5lrqalrqZm4qpmJqomYr2mXo+c5Ns0558V
+VvhBnYgzmiDiehsiOi9Clgv8tapawWqSzSqL-WpH1SoH3SmH4WkH6SYmbVAi4HBV
+VvhRIncBB-mHGgBChLsprpspOov1HAMoHBx+pTCBcn2Rwh6X7Gbm2gLlYgcl2h5V
+VvhkohMkIhrk3i5jLi6idhthv8pgP1Wi94uI80OSEVlmXQvEE+fbWif4qgv4rg9V
+Vvha9e9i9hfm9hPtvh9xvgw-vcw49Yw7vUwBvRABvQwG9JAJvIwPrh1lrgnm6gIV
+VvhmLgHmbg2mbg1msYwptDBS1nbRAu4DERIo5Ix3oDGUnor6xFlHIQHpOptpzXMV
+VvhTOPOLPxBnnr1r2r1rDDQwwd9Awdf3Aa9+we8D9WHn5ZAlsHBKInnZB-JHIgBV
+VvhRhKkQrc555Ai90nx8tzLagJuT5Sam5hQVw-AWA+wWA-AVw3ARw6wRwAwNwBAV
+VvhJwEwJwIwFwMwCBSBVxVxVxVxVxVxVxWBSAAwNwEwJwEwJwIwFwMwBwQw7wQwV
+Vvh7wUw4ARA0AVA-wVA-wZ9T7KbmJdwZdT6W5lfTxW+c2g+0U+0EI75zIOlshitV
+VvhgPemiejeitk6itkLitkaidl3yub2GvsdlHiiKQMvbWb5CtsdrSKRrZbRtNrSV
+VvhKRrZbRtNrSCRqkqfDFz4lQP4cB2-1JJMJYh7yoXJA-lE4a+OQ-W+3t+Lc-KkV
+Vvh+IgE396-6lc-3-c-2mgBwofSF8rXKkr1Shh5fPC91NCeq2ehUv0kpXgepIgeV
+VvhpHgv1HCpfGGpfGCqgB+vWgx9WgwvaknHiun2iun1j918Cyf7Gyf7CzgAQw4gV
+VvhNA4gMw8kl1l8kol8knlP1-D5f+H5f+D6g9swefpAefowikinnOiYnOiXnf0sV
+VvhDEerHEerDFg9IxCfFBCfExGkgXpegIpegHpv0XqOZBadDOg5DQdU4a+PE-kkV
+Vvh5H+S29KUkk6AQQdEF2bpFwWkqfXHW6nrgrmrhrlribl5jakbk5jrkLjMkrisV
+VvhlLiMlchsm6hMmMhDX9WmXAakXCWdnceAyMbDZto7SR4TKR8IfGZ7otChCHdXV
+Vvhk1SHZnk1ST8bD+Bt8blacdT4SiEOT4SVZwNu5Wdnk1SVdnk1OWfHcjfHZ7oeV
+VvhGR8JbFdTbFZso7WQy7bCacnNg6nMgNmsgsmsgsmchMm6hrlsi6lMicksj5kbV
+Vvhjrk5kLjbl4irlrhrmrgrnsWBCsqf150Ue+A955B6EIbxGB+k2Y+GI-1qrzTSV
+VvhXSbQyhjv1OgRemq9DMAOq18RTnCRMobKB8pDBOozBtoXWR6sfEwtfDwv0QsvV
+Vvh4Qsv4gnngemzCob8wvKQbnhelnhulni7ljCtb3wvegAvigAvmQ9njNkIjNkHV
+VvhjejojejnjujYk7jXkNjIkNjHkeiokeinkuiYl7iXlNiIlNiIlOhplOhalOh7V
+Vvhkv0mgfyoSuhROppPL-0UIEE8eep3FIPvFP9RgRvWgRqlzSgIpYgHpog2pog1V
+Vvhq2gC6xUv1nqH+0JCEwQw9BkSLBkSEwQk+hoxgtwxctwxgtDOGTDOCXqIdBROV
+VvhzTfW+Efxyk0kH+IA++7BIITxFg1W+dm9ofoeoepC8R8RHZbGbItNodpCKR8RV
+VvhHZbGbItNodpCKR8RHZbGbItNodpCKR8RHXbGbIfFfGkgr0mDodofosovg9o4V
+Vvh0ssvGoN5yIOy6-yvowL+fMkA0xag4hiA4xhw8hhw8xhQGhlAGxhAKhhAKxdAV
+VvhOhgwOxcwShcwSxYwWhYwWxUwahUwaxQwehQwju+Vc00k68+Ug00U69+Uc00kV
+Vvh68+Ug00U67+WQ0BU7I+aA0Mk7X+ZE0J+7I+ZE0JBUwtBYwpBYwpBcwlBgwhBV
+VvhgwhBkwdBlAYxtAUxtAUxxAQxxQMxxQMk23lH+EP2DTT2DTX1DSf0DRkA2xX3V
+VvhkE5Q+-uz+Sk+c6+51558I2F6wISlX4Srgg0mgfKxhP0siPWPeribj9KvOxh9V
+VvhpPumjYZP4lgJYqgOef-XKnaNh339OMWqEIhsS9R-CtRci22vdaSuOvR5iXjrV
+VvhFhZXTNMqqjMaqq7RpFPRIJrjgBvWfTsdruryKRzZbTtNryKRzZbTstrv1QgxV
+Vvh1wb3m9ykgkU9XXh9DYToFgTWpxf-+Kc-bWU-bZU-T-+EmxSVUdocK3XCS6SAV
+Vvhe7WLlse9X2Wsk6kNk6k7iQ4A4Nb0X-a7kskdOg8ACYygCACXygGAClj2X1gPV
+VvhkslAfXl6lAf2X2cPksl94gGAGlf2X2cel6kv8gGACYf1X1ZOkckuOQ8A8bb0V
+VvhX0aNkMkNiA4A0A8A09X2WciARtWMmcS5XCVMKB8GUNqAg-1-+Lt6+Nss+Nc-V
+VvhP-qjpwzKm80n0EllmZ-0Fz-4hi96nv9PfSscriGA8Pa9ashsi9+shchtTshMV
+Vvhhca9K9K909G9K91sgshMgSC9C9G95YWnWoWmWnWoSnWmWoWnSnWoWmWnWoWmV
+VvhWnWoSnWnWnWoSnWnWoSmWoSpSmWnWpSmWnSqWlWmWqWlWmSsSlWlStSkWmStV
+VvhSkWlSvScg5j5e9-fttWak4a7P0NsZgFaVrlaK3T7QsCAllhR4tpv5Qt6riCBV
+VvhuhimnzmAH5jkgBI80ssvGoF6y2TLk+3wY-0NbPX1XKb5XHX9TEXCTCXET9bFV
+VvhX7bHX5bJX3bKb1bLf-fMb-bNeuqOeheefOi9qfsbjPjYOxmqjPhzfQhzfPi8V
+VvhquahetyheffMf+fMb-fLf0bLb1bLX3XKb3XKX4XJX6TJT7XHT9THT9TGTBPGV
+VvhPCPFPELFLFPDPGLDLHLCLJHCH5D+HBH-B1k2nIk1Iw2wlA2pD-DAD0BHkImnV
+VvhkHMw6wcw6qD0D8D-FXkXmHkXQw6wYw35H-D79-Jy96mAWAX6ltz5mAWQT7leV
+Vvhg6wk0++0B0t3y2DAbKkx3bPBOpmpkZm4l3lalKl4lqkpm4kamKk4mahwdfP9V
+VvhSTT9S5n5VwmDOAmC7MnMx7n7GAqS6tnNCQq2XBYyGQqGt7nNCQq2yAqHbBYzV
+VvhbBVDbAZ7n6KAq3yAm5TAVrn5Vwi6xwhuP8SrmKk5m5kKlrkalql4lKlakqm4V
+VvhkKmadgpqPFkxOQn+CH26++6o6YHrEk2G+FE--RtxmRaxHIoA4Ad6l8XRXQtMV
+VvhrCKBnZXQtMrCKBnZXQtMrCKBnXXQfNo9-M0UZ166++6oAIHvEvygapkvf+O8V
+Vvhj3gdiYhci2hthXidh1itgzCxalCyeXk7dPuNWwbtava8ity8ieWPidSweZj8V
+Vvhn8n7n8n7n8n7n7nMnMnNnMnMnLnbnbnbnbnqnpo3o3o2oIoIo3o2oIoIiXiIV
+VvhiXiIini2j1hnjHhnjXhXjnhHjoh1k1h1k2gwSnm997gQalmf19fAf9g+g6onV
+Vvh0++0B0x3yYDBfJlgxcX9L-T7H2T5D5T3D6X1D7b-P5b+X5atlOsuf3eslek4V
+VvhltkXm8qTbNyRaReBeBeBhxhhhxhhaBH-pgHSTSTRTRTQXQXPbOyheRfWfMyrV
+VvhLAhbmvKQeof8h9m9GwaoywaZf7ddmeRgicDCaXn7hAeQ3AaABAOQJQCAW6f9V
+Vvhmgz4pOmkg6Eo0++0B0p3yYHQDRxBlRhhdxZxbsq7pupX3xIlTJAbpDAronFxV
+Vvh6pTFBLoHNx1nRwwsTCCLnHZwouTAwvT9D+T8D-T7D-T7D0T6wwBwQwFwMwJwV
+VvhIwJwIwNwEwRwEgVwAwVw6wZw2wZw2wdw+whw+glvDASXnLY4jWnsqCKBXXXMV
+VvhbLkAnWo1g66p0++0B0p3y2D09D90L7L-f+b0ogDFlB13ngTBlwn7mgj6nHGRV
+Vvh5nrSIxrZDRC8n1L1mXBMP6AIkJlql3lYlpl2m4l-mqqy7xfWXNtNNQqJT9ZMV
+VvhmtHumdGQi3b8ZMmsNwm4wwy5DCWHnLcwlvH8T-D8P1D5T3D3T5H-X7NtnATEV
+VvhkxKAo90eBUU++XEiFTV1odpQDFRonak1n3knmKlHlplnlZlLkqlMkalNkLlNV
+VvhkKlNkKlsk5lrk5mJk6qbqcqTXNbNXNyRWhWNX6Zg92dIRQCY9+L-Z0kZiX91V
+VvhOe6gJdcGlab+lrX+m5P+mLP+mMLvmcKgiIsemeGQiXsemuCgeZb8dTX9dMmtV
+VvhPsmeOAeMT8WLmNZwa9P7T+T5T0P4T1P4P3P2P5P0P7OrmrSAr5oQDKb9g4krV
+Vvh0++0B0x5wYJn+EHSTQzRxRphlhlxiBe2onZB6uDGCYoHgx6vDFCnoHk1o1kHV
+VvhnnkHnnrnrnrzDTDTDTDTDTHTDTDTHSxBtBtRrprTLRLRxhnqr5r4rDTPXPxxV
+VvhjsqdqjXOsdqcqiGRfsr4rXqEg8ss0++0B0t3yIDBbKlB-MPBH0L8D4H5H6H3V
+VvhD8L1H9L-HAL-DCKonZyYnpsdLDKJnZbrnJaAhOb8H+b6L+j3L-kABQD+kJlAV
+Vvh8Zlg82mQ7JmwAYngPFlBD2pADGlgv7mpH1mIT1lZf0l2kQ90H1kfL4k8L6k6V
+VvhL8i2nONQuJLEVIobHpoqDpp4BRJHLJFDLIJDLIFJooNR76LFCJo1hQsw3QhAV
+VvhBQVQJgFgS8T9mQz3p8mkg7ot0++0B0p3xoD9bJkx-bLBOpmKkZlql3lKlKkqV
+Vvhlakblqk5m4iAVtX7S7mMSAe4yQe3f8VNmtsnf9Yumesmf9cemf8geYb8dC8QV
+VvhapX6k3X56ONwT+VgMVeTP26edg2nb-KnGQ7aFOlA3elcaRWRTtqDXMyBXsqLV
+VvhhQZvT6SdlbiQJw0QJg4AJg7wJgBgJgEwRgJAFwRA3wdcXAlx11p8oA1I7+U+V
+Vvh+XEhIzRArzA-nn+OY-HHrhTOQnBxVJBppYQtHHK1dB38ConogwCogx2zZADFV
+VvhC2o1oHRR+vNpo1drHECcsaLECNNR+tVpo1dcOnl7xfDQSXr6YxmMDRZXrfExV
+VvhvJrxE-1LrBbPqhfOqxbPqRnL+EpBzJrXGxsqfRBtrHWBotTQsXhxgwO3gwNrV
+VvhcwNcYx-KsdYx-KWXo2RvD3Ql51o3Qx2x-6DFD3Ux2wGHoHh9DECogwCol9CYV
+VvhoHgtHHCXVBF7BZpZQoPMQnBhnKrx6-GE4jA-nWDTcEka1558I2h8yYX4M-WUV
+Vvh33Ik2YUk22chx9+xpP+xlP2xhf2xhP6xfqgXqS7fAxZf6xZv6hdv2xdv2hhvV
+Vvh+hluDQSHrLYhts9TRm+ERW+FRG+GR0+HQm+IQWifmtQGivmtawj9aA4njrkeV
+Vvhkbkrl5l3lLl2lNkYlG3w6wIWT-D36sjnlGG9wwEaSyD27sj1l0W9gwEeWuD1V
+Vvh8kWtD0GlWrD0GmWqD0KnWp90KoWoD-OpWmD-SpWlD-SrWXkMhsYw89W6D-asV
+VvhVnkdiMIw8fa2D1euUXl8iv13evexBej6jXOfq9ksaySwC7jNiXafd-SsGdiIV
+VvhBvN94PN4SoGnamO6g3hOVv0LOsifGrj9Osgw4fyPQ9-bDkSCCn2YGT-6kfmgV
+VvhL3KLkIkbcwJsD5RXm6Ewa1D8YJmN3wT4swP3ls7gSHH6bCbDXDbDXDXDTETEV
+VvhPFPFPFPGHHLGLHHHHIDIHIDIHIDIHIwxHXDItHpG+-FooqoMnunS8wqgyB3hV
+VvhBAykO1s5XXgl72bvAwlB7x0QygrvnTfCbETHE+355KsnpCExHWDIHIDIHIDIV
+VvhxBDoooopoZoaoZoKoKoLo5o5o5o6nsntntm2CARlb5lS94lQS-X6QMmJ8AgmV
+VvhX8B5mHJwR5T2GakZk5VwH4mPl8+Z2+Flm-kL9Togh5anXvGnaoWotLhCJvHZV
+VvhSotLhCJvHXSoWndh9l1+DF22st+U6Y649BqC9JoxihqCLRTRtLrSJxrZTRtLV
+VvhrSJxrZTRt5rLhPSbdtaKftVfW4m6LES3oYZRF4PLnPTMg9MN0++1B1F8zIXIV
+VvhbQkxRqPIKaoKk4nqkanKkrmqlKmqlLmKlbmDT4XXlblssgJwSANwOATrlblrV
+Vvhlbm5lLmLl5mbkrmrkanLk5nLhwT1SQb1Rwj1dh3w3Qxw7QpwFQlwJQhwJgfrV
+VvhlamLlblrm4ly7wVwNwWAJwZwHYT8T2T7X1t5mckrmbkzT8X1T8T2T7X2T7T3V
+VvhRHkLl5JPT3R5dgNoSKlrFsP5V4ZQSIKJkQBXVg91QpT1kskBtwWkiVc9XXh9V
+VvhFWzu9QWQeQv2lA98O4k4NgRA3OKZlHl3RQ3QAwNJL0P-L3Mpl4hwJVL3Osl9V
+VvhlbaQGwRdb2f6ONl7mKaAKQZtP4X8SYlsmbpMmbshJwhxGAdws-16+KlPJk28V
+VvhZxuQ-xmA7xlwFxeAJxaANxWARxVwZhRwdhOAZxNwdwsoX8XBB6mcn1KAaQkoV
+VvhX8b9BMmI3gcbX5EpmHSAN3L5CLlIRAMuX0KIkok6hfL+D2VqkpRQT3lg9AfBV
+VvhX30khVgAQQdEGmzu9QeAuR50mA9ARpl4NgZQ-Q3OL4L1KZkJl3lJVQ7g7QRKV
+VvhL2P+L7FJlKhQdHL4SKma3gRcPAj6NqnOmKNwqgZpPCb8R5ndmbCAuQdnTDX9V
+VvhTmXDX9Qcnsmb9soBYi8B-xDXXETIXDXJxwyBJwuRJwuQspPBjBBKnPn1Nwj+V
+Vvhn1RghGL9CJmZBgceP6JJmHhQRLL5D-L3KIlXkpkphABAJQ-Q7Q+wZLP4JpnAV
+Vvh97kh0QyAI8185+U++XEkETgqomoXoWoWoXoWoWoWoXkcUg0nEftbMHj4g5j3V
+Vvhh3iphZi3hrhZi5hKhm7PFPQXOmKrB3gKhmJeOr7adfMqOKhmRdOq85RfMdRqV
+VvhhHZqSp8bNvEf-qOoCkRLh0gLJvAf7pSm8nRLgHgrFv6fBpSl8oRLg1h5Jv+fV
+VvhJpSWhaNt8qRqUvNcO0hqVb8rOKMfVeJHhqg4EfVP3X8sKnIXhqh32fRfJvRPV
+VvhVPRPdPJPlf3PoVNrjHCok0SQ6h6h6x6h6h6h6x6h6hCV2loCQQdRL2TxFgTWV
+Vvhrx+lgPamnnGPqgwpWzXCBck5nXOA3goqX1LBBckonHSABAorX2DAwsX2D9wsV
+VvhX3D8wtX3D7wuX3D6wuX4D5CkX4D5CkWtDHwv49Yx9ngMiHoXgciHoIgci2oHV
+Vvhgsi2o2gshpo1gshpo2gshao1h6h6nzpwvMnXhMh6nYhMhanXhchpnIhci2nHV
+Vvhhsi2n2hsi2n1hsiHn2hsiHgXj1i6iHgXiniMiHgXiniMiHgHiniciHgHiniMV
+VvhmHijCuX6CuCvX5GuCvX5CuCwX5CuCvX5GtCwX5CuCwX4GtCxX4GtCxX3GtCyV
+VvhX2KtCxX2OsGxX1OsKxX0SrSwX+apeuayengvWkiPCfiBafiBWfmBWf2X5V+sV
+VvhtaZTGTF5pw6120HEa+3guA2-HAX3kAb-mclvnOmLmenslsmuo5lcn8oKlMnNV
+Vvhopktndooktntookdo7p1kTbFbID+bGXJCtospHeh8RItfHbJCNp7pHWhGRIrV
+VvhfJXKBupMmXYqfKX8CHOhKQcwKxKQcwKhOQZAKhOAcwKxOAcwKhSAZAGxOQZAV
+VvhGxOQVQGxOQNwGhSAKAHvpxL2jKpgGxOQGQGxOQNwGxOAVQHvpsmIlC8xOQZAV
+VvhGxOAcwKxOAcw+nfKX8D+Avp7mXk1Dvp7q1GxGBYpyhGBUqjGbLFzfGbLCNocV
+Vvhpoah0RQvbEbKGuntpJk7ntpIkdnOp3kdnNp4ktn7oqlNmeobldmOo7m6lvneV
+VvhmclQ57kgmA2-PCWE3x20PJkU5f2h5kllmZ-3IjJA+b20UU7W+a60MhewIxP5V
+Vvhk1p6Zu9HP2Nmoam4Eh3ghW9EPDXDPFPDPHLBTIP9PKT7TJ6KlrpH3wJxInP2V
+VvhTK75kqpWJw7xIbT+TJ85iBEsSrp1a7XI8rWBEg-sXH9-VcomkcOB6w83bFD1V
+VvhVMoWl6GR2gK2bE94V6o0lsCQwwS1bCD6UtnWm7CAsgaGbB98Ydn0mt8QgwiGV
+Vvhb8DAYdmWnN8AcgqGb79CYdm0nt8QQwyGb4DDYtlWo7CQIh42b29GVMkmodKAV
+Vvh6x84X-DHVckGosSA+hG6Smp6Zu9JScUxG9RnpLk5QhJw3q9KP1R0pbkrAhNwV
+VvhJlDJT5bJT6XJT8PJTAPHPDPFPDXDPDAZn4oGFgVh6bP2PH8baBEg55pXlPqHV
+Vvh+a60MU7W+b1+Cm22QQUR3IbqGB3R7x0PfXeyCejWaujXbCCB1WTEXEsroSBhV
+Vvh9XLGspoyBBHXDJ6A-BBh4Aei8uf6oKoooQ-+D+Flm-oKGTcnoYoroNo8yvyuV
+VvhmR3xF+mVpy6xLXHILIsYpCBRDXPGxx7h9XTFssoC8R0B1XbCCfsfifsfmR3xV
+VvhBB8+u0ABJJVKHJnsFvEtgvZ7d9VdVfTpaJhqa4hpaJhqa4hzKNKrOMOrKNKrV
+VvhOMOrxNZPRdVfRNZPRdVfRNZPRdVfTpaJhqa4hpaJhqa4hzKNKrOMOrKNKrOMV
+VvhOrxNZPRdVdvATCLx-QuYKNKrOMOrxNZPRdVfRNZPRdVfTpaJhqa4hpaJhqa4V
+VvhhzKNKrOMOrKNKrOMOXnozFHDT9bpaJhqa4hzKNKrOMOrKNKrOMOrxNZPRdVfV
+VvhRNZPRdVfRNZPRdVfTpaJhqa4hpaJhqa4hzKNKrOMOrKNKrOMOrxNZPRdVfRNV
+VvhZPRdVfTpaJiHangkgKYZ1JJMJYNHwon3PTD2fRH-JHqpk2YhZfGXpqhA+xJuV
+VvhH-HGWZkZnsdQBwiPL1AYlfhQIYL+MKhgIplXSplXX+JvP4DBP+P4DAP-L5D9V
+VvhP-P5D8P0P5D7T0P5D6T1P5D6P1P5D6P2P5D5P3P5D4P4P5D3T4P5D2T5P4D3V
+VvhP6P4D2P7P492P8P3D1P9P3D0TAL2D0TBL291PCL1D0PEH0D0PFL-90PHH+90V
+VvhTICnkLpXYgBhV3D1POf1PRP2M0BwFhlwChdgB3DMP0GGpakYcxFg7A+x7w3AV
+Vvh2x3w3Q6x-g7AAwxg7QAwtg7QIgpgBQIwhw7gIwdwBQMwdgBgMwZgFgMwVgJQV
+VvhQwRgJgQwNwJgQwJwNgQwJgRgQwFgRgQwFgVgQwBgZgQw7wZgQw3wdgMw7ghgV
+VvhMw3glgMw-gpgIw-gtgIvTDL38ro3l1hh3QEfPGL1Cap2kXdhJQ2eTKH+8bq2V
+VvhcfPOC1hhl3D-HSf0A-3gAB+Y7kFlm-oC5yt5N7NsKXynz1dNN09C6fsWjmjmV
+Vvhgfwf8mgf8mgg5P-k8+MstGUVNzFAp-omoHoHoHoHoHoHoHoHoHoHoIo2o2o3V
+Vvho2o2o3o2o3npo2o3o2o3nqnpnqnzLDPDLDPDLDxgxQzWPDLDsaniFgvaPCv0V
+VvhPEtJoIoS7R5ooJoTHFLFxB9ooYoXoYoXozDHDHDHDH9I530kPWY4CCIc6KTyV
+VvhHAIREhEhEhAxAxAx7B6x7B9oojHGsYojHFsZoIoSBR1qux-SXDPYnanpnyBgV
+VvhvWPDLDxgxQzqnpnqnzLDxQxgxQxgxR-B-Qzpnpo2o3o2o2o2oHoIo2o2o2oHV
+VvhoHoHoHoHoHo1oHoWov-W8UU++XEd9D7AmnqIqCBRXXH6H-D-F3k1k3BvCbCMV
+VvhG7GLC7S4Bck5IpT2QnBwVWAan32VLFfIxxGx-F6Kn46WT5R0FgG2BLk6MqW6V
+VvhUrZMYtUrd8Qqh9MokIk2mIqCBBXXLND8Y2+f1558I2B3xXiwDJHJLHPHt3oqV
+VvhoyFRBhDYLHPHt3oqoyBPLL62gRURSqxRBhDYLHPHt3oqoyFRBhDXLHPHt3pHV
+Vvhix+X9+Flm-oB5zU8N5RNGiEfBl7I6jgi8WfW8j8Wfmce8Wce8WgQc-+i-556V
+Vvh5Eg9xUd2NYUhccFaF80W9kU++XErNztAq1qIzLLKPKLKPKLKPKLKPKLKPKLKV
+VvhPJPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKV
+VvhLKPKLKPKLKPKLKPJPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKPKLKV
+VvhPKLKPKLKPKLKPKLKPKLKPKLKPKLKPJPKLKPKLKPKLKPKLKPKLKPKxRUxUB+TV
+VvhCUFlm-oE9DMfd8S7xexPOaa5d++Kd9OMSZsfKbWKh71+BXg2QQUR2Y1s8wH5V
+VvheTWjSse7dwE+47H5ftWcyrydao2hDmoi6h9W9Gwh9moWoj9G9G9G9G9H5I0EV
+Vvh41oAQQdEFljs7apLppzNLL+2TxVDqYq5p40l5o+AQQdEFIfpGBSk4gQ-BvPTV
+VvhL4LPL9DMHDHJHGDGHJDEDMDCDODADQD8DSD6A-+gQk2HlHlsm1knlQ54D0D2V
+VvhNYlXk1l3ggIw+w7g2gIfD0L292CHkZlWknYw3gMwAcD-P691Bnk4mMYqD+P8V
+VvhWHMw-ghtBHk4n5YpCrn5YoD+PASnwnhwlvAXhwpvAXhwpv6nhwpuAXk4nLgmV
+Vvht1hwpvAXhwlvAmk5n5gmww-gpvAXk5n5gmD+TASXHnhwhvB1k4mrgZD+P8WXV
+VvhIw3gWOBHkKm7cb90L5aXQw7QIlOWUw7QEmOHYgBQ31O1cwBPBaMvD3JZVJD-V
+VvhD3kPj0D6T2T3A0QU7n+bA0Qk7n+GL2DSX3DPX6HKXBDGbEL8fKP0kBjB+IkhV
+VvhEA+uKkFlm-oUNzZApDoi9HohHWLRtJrSJRrZLRtJrSJRrZLRtJrSJRrZLRtJV
+VvhrSJRrZLRtJrSJRrZLRtB9I1+CZo2QQUR64Q0HBHx9Wox9SsZrSJRrZLRtJrSV
+VvhJRrZLRtJrSJRrZLRtJrSJRrZLRtJrSJRrZLRtJoyHGp+o0FU-5565EsTw2TFV
+VvhguCWjmgf8z8z8z8y6fsWkWFG3ogy91yYZbZ4o-kG0++0B-2HuYQYley7aNa8V
+VvhWcdvSqlgP3pRLI+E6Q+Z2kU++XEK3C75oporoMo7z7mB0B0B-x3x3x3h7h7hV
+Vvh7RBRBRIhQRT+6-E6++6o4UrdEF9MPJfGIKlXOKNpS5BgoB4xCBNhUxgR2AUkV
+Vvh3EU++XET3Cd5whtC9R6Gr12hkW9PAXqWAxYnHLBHpXNBF5HGG3lONrnJoR9IV
+VvhoBVx64U73UU++XEZ+ywvqB+d3knkBZEK2xR6ZxiIQrCXIwAnon6-2y6H+FPkV
+Vvh2H6U2H6xAnkpCXR4GPptk02M-lln9VcHxjv5pS7xOhOROBTrpcpbzJTJXIXHV
+VvhbFdRKB1Ek-cU-5565FY9y0TO9LLIXFbEbEbFXFXFXIPL9N1+83s6++6o4V1eV
+VvhFx6RgxZBVhKRCx3GP3FPJZZMJpdJHEF2oY3RGBJ-5M6Eg-3T-5565Eg9vIJ2V
+VvhNnblrWYrJ21E9Lo6++6o6-DeFtL3brdrWMRuRzSbRuS4hcOqZQKKhdL3ZQKYV
+Vvhp8L3dBGYpA6-2g1+6bs6++6o6UfhF8LI4NoHSwBx0XNWVoN5UpMvo4DEdnocV
+VvhYRFOk-hz0++0B-o8uYIoooFh-mWxOhPtpepQUao5FBAoYAH+1++0HINWzK4wV
+VvhHLPJyBGRGRGBKBKBJxNxNhRhRhRRVRVRVBYU+ObopzLKxxHsozbGyVoDcgznV
+Vvh4QsmcAonbAwob9BNmnKUmTBtmDC7lnaQQtcALncNlDCWb1CXb1CXcA2uKQ-8V
+VvhKQ+uOPx8OPwuSUjIe7jHeNj2eNj1edioedineu0tGgatChasyuhvirCjc9LnV
+VvhgNhDCmanCnc96vGP5nhNgDCqajCrc8svWOrniNf2iNepiNebi80bc9OVd8GnV
+VvhdMygeQadgd14kEk++Yp4MjpVoZpbp6otojbGXHXHXHTITITIPJPJPJLKLKLMV
+Vvh9O2+3dxBTppjTIyBDtojcR1u9DwlbCAe1BAtnDB7mnKQgpcAbnSQXnWQQtb5V
+VvhCO13wu4QHncdknctkncu1-CZb+GZb+CaazGaazCbc9p8WPouaPl8aPkuePh8V
+VvhePguiUiIf7iHfNiDifSvhnfu0pwv4PHngdgngu0mCoalwvKP1nhdfnhu0iCsV
+VvhahwvaOl9aOhPaOdvWUdu0qcOGYguKDf8b7eP681BkUk++Yp4MDpTpl+NA-R+V
+Vvh3a+HY-4krp7hpILQJZqZVRVOLKGmHJGoHGKqHFGrHG4u6+5qx+3jI-Lr+Hy+V
+Vvh2jY-5v1TylrjANrH8hknbPwobOBNqXKhXnSRTnWRMtbKCOpDCkbHwv4R6v8RV
+Vvh6v8h+vGQx9GQwvKQt9KQsvOgl9SQkvWQh9WQgvaQd9aQcvegV9iQUvmQTwb4V
+VvhmgMvugHnk7kzD-b0D0f-D1b+wwGPznlNjXlejHltjDD6avH6auL6atT5eqf3V
+Vvhg9CnkfGDivXMiA4UlgAA++7BFZjxKgxPMR8PAx0kgHo98Xnq85HDFsBQwv0mV
+Vvhnngeo1h6oVhZ+0EDE-Pp+Jxk2zU-9t+FykrzgRvn4RomfQAtqzB7qXKRcpfMV
+VvhwrbLwsbKCNpXahHng7ozClbGCmbGCmfECobDGobDCpbCGpbCCqfAGrbACsb9V
+VvhGsb9Ctb8Gtb8Cuf6Gvb6Cwb5z7lgf4Cyf2ww0QDnkNkXkekHktkDD2azwwKPV
+VvhswOfowSPnnm7iom7iZm7iLluhelP0ngw8oXvisq9X-0UkAEA++7BFZrxLAh9V
+VvhJB7f7x090QuebCydfCaencgMo4gboYhH+0mDE-Pp+Jxk2zU-9t+FykrzgRvnV
+Vvh4RomfQAtqzB7qXKRcpfMwrbLwsbKCNpXahHng7ozClbGCmbGCmfECobDGobDV
+VvhCpbCGpbCCqfAGrbACsb9Gsb9Ctb8Gtb8Cuf6Gvb6Cwb5z7lgf4Cyf2ww0QDnV
+VvhkNkXkekHktkDD2azwwKPswOfowSPnnm7iom7iZm7iLluhelP0ngw8oXvisq9V
+VvhX-0UoQIA++7BFaDxMhJk2f1SFnr1cxcv2xUv6xUfExPWCoDJwvExQfExQv6xV
+VvhUv2xcuDQFYrf+-7k+Tvo+KxE3TQ-Ds+GyE2TgBzv5SwlbRAer1CRjnGRcpbOV
+VvhBOqDBtpzC7pXaRMtfIwv0RDngNoXgdoXgeo1h7noh7nnhNnYhNnXhen2htn1V
+Vvhi7moi7mniNmYiNmXiem2itm1j7lzmQP8lXjelDD+b1ww4Q6w8g2wCQ1nl7jzV
+VvhD3ayD4exD5awwwWPhAWPdQWPZwSfOgKkgvD0h6yviBWskO2HlUtlmZpQFzp4V
+Vvhly9To14liP9DB7jOnnK9yAsqX+TCBckKnHOABQoqX1HBBskonHSAEwnnWAEwV
+VvhjnWAIwfnaAIwbneAIwXneAMwQv0AMwQv09YxDngMiHojClWtDGCmWtDFGmWsV
+VvhHFCnWsHEGnWrLECnWrLEGnWqPECoWoXDzLnhXCCpWoXCGpWqPCCqWrLBGqWsV
+VvhHBCrWsHAGrWsHACrWtDAGrWtCmCwCsWtCmCvCtWtCmCvCtWtClCvCuWtClCvV
+VvhCtX7CuwveAUvcviAR9cviAQvcvmAQvcviAR9YvmAQvcvmAN9YvqAN9YvqAJ9V
+VvhYvuAFPYvqAFfV9qABfVPqA7vRvmA0PKfePufCni90tguisqOisq8j6q8cBP5V
+Vvh0ssvGoJQxIT8et54hvIw8wgYk90ad9yfJ6KxauBaitjHJfeA+nStX0AMhtl8V
+Vvhhslthcm7hMmch6msgtn5gdnKgdnagNnqgNo3g7oJeh3ObGGeoYbuooWkooWhV
+VvhF6fIC91J88ry8kruryGkruryGk+EfJ8SChEtfHCkbHCkbGClfFCmbFCmbECoV
+VvhXDCpbCCqXBCrb9CtX9CuX7CwX5CyT4D+T1H0T-H2WxL4WuL8apPAg8TEjRKrV
+Vvhr91TQ-9WQ-CU2t+HU-Hr+HU-Bk2jQ-8+2M+EbSfJhxWmo70wm+fXY2N3MjpVV
+VvhiIpapDXHbHbHXIXIXITJTJPKPKPKLLLLLLHM6+6CsgyeceqYeu0mc8mPG8mPV
+VvhJumPNeiPRi8fasGgyPYujZauCeavCeyOYuIufteHj7e2izadCwyOV9mORPmOV
+VvhNfiOG9nWhPmOCPmONfjZacGvadCwsdeHe1dzaxCbayCbyPouWPl8WPkuaPh8V
+VvhWPl8WPkuaPh8aPdOaPd8ePZOaPZeaPVeePRuePKOaUge4ccuqZcB4Uo81Fc+V
+VvhY9r70iCEFYJWzK5DLJTHXGbFyR4B8B8B7xBxBxBhFhFhFRJRJRQhYE+QzWnuV
+VvheWfOGfc98Uf7h6f7hLf7haethqseiPV8ntiHeyKPcuePgufteHdHejadCwacV
+VvhGvyOYvnte2j7dpj7daitd6jC8pj7ctj7daiyKOV9iOYvnWadCcCbyPouSPsuV
+VvhTtjHe7j2e7j1eNioe7j2e7j1eNioeNiZeNiYediJeNiKeNi4edhredhNeO0mV
+VvhcOWXfOKUoO1EcB4UcAL80iCEFYJUzJzI2-Uk3Y+JM-8E291SIar3FRhKLNK3V
+VvhppdRJ97BF9FB3PNB-9RB2PcU+ZfWrfalj9Cuf-evb1Wvb2Svb3Oub4PWidloV
+Vvhizb6CutNmHiNmXiTasCoCtyPUwiPRAfti1mzarH9aqL9apP8anX9sgH9amb9V
+VvhapP8tNhomdi1my8PUvQvPtn1hdnHhjbACrb9Grb9Csb8Grb9Grb9Csb8Gsb7V
+VvhKsb7Gtb6Ksb6Osb5Otb4Stb2asf-g9Smj9GU28ru+EeUiAg8st-4FJrxLAV9V
+VvhJB3f7wy90QqebBydfBaenMgMnqgboIhH+18S9SiP4wgveg4fiQC9iQFviQJfV
+VvheQNi8ub5GvyQUvfZb7Ctb8CtyPUvEvbti1mthomjasD9yPRAiPNQiPJgePCAV
+VvhjWlAiP8QiPJgfZarH8asD9sdi1hnhjbACqbBCqyQkvSQh9SQgvWQd9SQh9SQV
+VvhgvWQd9WQZPWQZ9aQVPWQVfWQRfaQNvaQGPWg4khv8wh8+EfTc-0Ug35A-QQRV
+Vvh7GhWzK54HOPMyBSRSRSBWBWBVxZxZhdhdhdRhRhRhBkU+JDHyxH6kh8xLWbJV
+VvhtNpSKRLZbJtNpSKRLZbJtNpSKRLZbJstpOow96p9zHk+g3HB-QQR7GtWzK5QV
+VvhLQTOXNbxWRWBaBaBZxdxdxdhhhhhhRlRlRsU2-+-FhD0zImw9JjMsdqCKRXZV
+VvhbMtNqCKRXZbMtNqCKRXZbMtNqCCRWhP0mxH0zHkkg3fC-QQR7GhUzJzG5RDPV
+VvhHOPLbJjHIaoJFR-KLCK3n3dQdA3AZABANQJAJANAMQYU+LPHyxH6kh8xLWbJV
+VvhtNpSKRLZbJtNpSKRLZbJtNpSKRLZbJstpOow96p9zHk+g31D-QQR7GlRzJn4V
+VvhH2H5P-T3WtkueTkuagCOf1X+X3P-T5H2A+62ow1xH7khCxPWbKtNpiKRPZbKV
+VvhtNpiKRPZbKtNpiKRPZbKstpepA97pA1xD-0keh+ACCNDGoTxFg1Tp+2h2-LKV
+VvhkASxOgihKQqRGQyBCR0B4R8B0RCAyRGAuRGQqRKAqRKQiRSAjtptmdq6mjbMV
+Vvhb6bNb6t7qOtQORejlNqulNqfxhj5hxb6j2bPf3sdqflTbOf3bOj3yRegPtqOV
+VvhltqNltqOltqNmDbMb7bLb8bLX8bLb8bKb9bJbAbIbBbIXCbGbCbGbDbFXFbDV
+VvhbGbBfGf9fGkQP+n+3Qs-9ErxE82RoEk++YpFKzpOnphVrNgnqv0lDPgeDOMcV
+VvhRBd5UpqXg99OCmfPCoXR4qI+AYi9yxgPayjP4ujPqugQ8nk951b1gQFwGml3V
+VvhlH4QFAImf1H3AtknlXCg6wMob0D4B8kHlXKQ2wIqezD4BtjnlXSfswPnWPswV
+VvhMtaxD3Cdj1ljCkavD4wv4PcwMv8PYwIvCPUwPnh7hnljCpaqD4CpepD3CraoV
+VvhD4CrenD4CsanD4CsemD4CtamD4CtelD3CvakD4CveXlXj7cwMvmdD4CxaHlXV
+VvhjOUwIvyLD4CzdXlXk7MwMw0ZD4D-ZHlXkOEwIwCHD4D1cXljD2YXljD3YHlTV
+VvhD5gAPnm8ljD7b3xAdwJQdwFwdgCQZg0nm3ivr1GwjQEviylGiv1SoUllmZ-2V
+VvhMzJVoo+XM05s+UY00E66+VU04+6L+WQ07U6q+XM0BE73+YI0F+7G+-yf+NlkV
+Vvh2cWBtw7xdwNxNwZxBwlx3wuAtx-wmB7weBFwWBKAOBSAGRSACRWQ8BeA4RePV
+VvhbPadr7eRqMbSZurdShujKhyjGU28wv+Ecu+FfW8k2O8U2Pt-g-4lg-0lsf+FV
+VvhgTg-0mg-0XjTh8rvGhyZfShOreOhqrfQe8r7ahiebOetqdk8q7kdq7kdptl7V
+VvhpNlcp7ltodmMoNmsnsncnMo6msormLpblbqbkbrcW+2gQ-axM91UokllmZ-2V
+VvhMzJV+NI07k66+TY-vt+SU-y+5s+TQ0-k65+UM03U6K+VI07E6Z+Y60ME+PmkV
+Vvh4QQ-86XST0TOT4TKT7THTATFTCXCTETAXGT8XIT6XJX4XLX2bLX1bMb0XOX-V
+VvhbOatqteRmObRa7rdShuLfSfpfTfoc-0jCk28CU2OsWg-4Wc-4yEP+FgP+EgSV
+Vvh8k2P5v+Egf+EcvrvGhyofTdOrfKhuafRhur8WhmNfPedqeiReQ0hWQ8RWQ8RV
+VvhSQGRKQOBGQSR8QaB4QiAyAuAqB0AiBBwZxNwNxdw7xu6U-95+NjKcCHI1558V
+VvhI2FVxJzF2-Qk3I+IM-4RykrJ7hhILOJZq3VRNOLIGmHHGoHEKqHDGrHE4u6+V
+Vvh6agBesosWAxvBwhvRwRvdwFvpw7vy9xw3vqABviAJvaAO9SAW9KQW9GQaPCAV
+Vvhi98QiP0QmObBadndWQyLfDZunuxOo8x8oOwv1FcuoesWgB8WfGgCEP1Gg-gBV
+Vvh4k5WgB8k5v1Fg0gB4XgB0kGh0kGh0ZfDg3fDdenf-unOWgqNfAedmug7mtgOV
+VvhmNgtmNgtm7hNldhslNi7ktickdj6k6jsjckMj6l5iblrhrmrgrnsWBCsqf15V
+VvhgBbJ1558I2FQxJfLL35Tb0DRj+DRkODQMcRBl5Upr1j-r1kOrHksrllJ+0TfV
+Vvh+Nlk2cWBtw7xdwNxNwZxBwlx3wuAtx-wmB7weBFwWBKAOBSAGRSACRWQ8BeAV
+Vvh4RePbPadr7eRqMbSZurdShujKhyjGU28wv+Ecu+FfW8k2O8U2Pt-g-4lg-0lV
+Vvhsf+FgTg-0mg-0XjTh8rvGhyZfShOreOhqrfQe8r7ahiebOetqdk8q7kdq7kdV
+Vvhptl7pNlcp7ltodmMoNmsnsncnMo6msormLpblbqbkbrcW+2gQ-axM91HpUllV
+VvhmZ-2LjJQool2rqkLrMiRiebPydfPaeqsk6rKkLrol1+1+f+Nlk2cWBtw7xdwV
+VvhNxNwZxBwlx3wuAtx-wmB7weBFwWBKAOBSAGRSACRWQ8BeA4RePbPadr7eRqMV
+VvhbSZurdShujKhyjGU28wv+Ecu+FfW8k2O8U2Pt-g-4lg-0lsf+FgTg-0mg-0XV
+VvhjTh8rvGhyZfShOreOhqrfQe8r7ahiebOetqdk8q7kdq7kdptl7pNlcp7ltodV
+VvhmMoNmsnsncnMo6msormLpblbqbkbrcW+2gQ-axOl9RUAQQdEFJ9pH+7l+c60V
+VvhMU7W+a9Oj3DKlw+xG7SWoql4Qh7gVY9FP9MWo4nsnqoKnqopnLp4mqpbmLpGV
+Vvh3gRxIlT3TJAql5pWFwBhMZT0TJ7rk5pGVvXIC5hxEtWMp0hsXI9+S6omkMOBV
+VvhAg84XGD0VNoHksKB6gG2bF93V7o0lcGB+gS1bDD5UtnXm6CQsgWHXC97YdnGV
+Vvhmd8QkgiGb9D9YdmXn78QcgqGX89BYdmGnd8QUgyGb5DDYdlXntCQMh0Hb39FV
+VvhV7l0ocKAAh8JX0DGVckHosOA2hC5X+9IW5ghG7SWpLe6DIWrQxJw-r9JT-RWV
+VvhpakrEhNwBn9KT3QHpLltpLm6pLmapLn4oqnqoKnsnqnn7Qlh2YP6PG7ql4omV
+VvhdtXI9-lxMwKxYk7W+a60MU7kY6zN1++0HIJXwK4kHKPIyBCRCRCBGBGBFxJxV
+VvhJhNhNhNRRRRRRBUU+UjWh8KiWXguGYcPOOWPVuaPZOePZ8ePd8fYauCetNiXV
+VvheiKPcufZauCetNiXeiKPcufYauCfyPYunsiXfDWtChy9UuzshXg6hHgbh1gsV
+VvhgXhLgHhrfniKfXiqeojKeIjrd4kNVwKfm8PDay0EYBcA++7BFKDlMQNRJxCBV
+Vvh8R5toMococobororoqp4p4p3pJpJpmqF+-nC8odOu8Cnd8GVhde7i5eNiJedV
+VvhiIediYeiGPcufZauCetNiXeiKPcufZauCetNiXeiGPcujtiHfDWuCgy9YursV
+Vvhi1fzWqCkWpCmSoCnWmCpSlCrSjCtOiCvOfGxOdGzSYP-a5lOj6dgyPuEaRgAV
+Vvh++7BFK5lLvkRYxRBNhCR4Vnp7gpILAJZmZVQVO-QN8BAJ8JA7ORA38VA6OgUV
+Vvh+YXWh8KiWXguGYcPOOWPVuaPZOePZ8ePd8fYauCetNiXeiKPcufZauCetNiXV
+VvheiKPcufYauCfyPYunsiXfDWtChy9UuzshXg6hHgbh1gsgXhLgHhrfniKfXiqV
+VvheojKeIjrd4kNVwKfm8PDay0UXRkA++7BFJvlL9x9JB3f7wy90QqebBydfBaeV
+VvhnMgMnqgboIhH+17i91h9q990gvCklNhtlri7m3iNm2iNmIiSGQYvbZb7CttNV
+VvhmHiSKQYvbZb7CttNmHiSGQYvftm1izX7CvyAUvnslnjjX3CzX2D-T1D0X-D2V
+VvhT+D4SyD6OxD8OuHAOsHCSnPEa5p9fLhRuQqEmRoA++7BGq9oMQZRhxaBWRTtV
+Vvhpsq6q6q5qLqLqKqaqaqZqpqprGrl+-yjgev7feiOKrd8KVie0ccPhuiUipfOV
+Vvh4uGjc9cv0UiHge0rGmc9N9GUhHhO0oCqcP79SUgIi80lCuc8wviUfYj80gGxV
+Vvhc8kvuVeXk80dH+cORA8Udnku0aD3c8FAKUcolu0WD6c82waVZAeUVAiUUwqUV
+VvhMwuUJAyUBB0UAx8U2xCYouDJcROUq7q6qCCRXsqCCRXsqCCRXsqCCRSUpODAV
+VvhyokfGs0kVhs8++7-DYTxFg1WoRr++Lc-bWU-bZU-bFpRHGph0AKgyASgqAWgV
+VvhiAagiAegfsmumMmvm6n8ly8AqgTWXBjwKAugPsnPlcnOlsn9lcnPlcn9lsn8V
+Vvhm6mvm6mumMmemMmemcmOmsm8n6lfnMl9nskA9DpR5GpAnOsc+NtM+Nss+NY-V
+VvhT-rToRHGp83Crl5565BiGTd5k7h-lNh-jfGkD-h9+vetV9utV9ZtNYjbZaGsV
+VvhOoFIj4h2J9RPR1KvKrEphZiX3fdPclOpKwatKwaoKxasKxanKzSsKzSoH+SsV
+VvhH+SnL-OrL-OmxQ7fNQ7f3gBPJgBP3QF9NQF95YP2GpP2GlxwAvNwAv7wEfNwV
+VvhEf8BOB8RKR4hGh0kov1Egh4mnPPBhgetmfb4jASwl9z2jw5+kw1+kAD+kA11V
+VvhkA1+kw1-jwGzkvr4jQOtmfb8hgqqnP9Fgh0kov1EfIfFbJbGXKXHscpcYgVvV
+Vvh6gVtD5SmD5SCAwVf6wVdwwVPAwVNL4OmL4OTL4KnL4KZlJh3lJg4l3h4l3g4V
+VvhkphKkpg6kJhMkJgNk2hdk2gdjohtjogq39l9VVGwGoIoiJiJB9ZPJ3OoOuFKV
+Vvhh4hIS8SuFsdvN7ifl7ifUv4qjXgPOu8qf-8qex0UjtUA++7BGproLA79JBRfV
+Vvh7xK90RCebHydfHaeosgMpKgbpohH+1QjkPrMjPePH4gvGkmOhv18Suf8KwgAV
+VvhZ9ugYvygUw4gNA4gJACgEwGgAwKkkIlek2luk1mOjXmejImuion8innP0tDDV
+VvhesHDg9NB4fMx8fIxGfBBGf7BOf2xSf+xWkZBacHOe1r8MxqZHScoruAk2O2kV
+Vvh2fA-8m+Ig+3O+LY-S+3yCE3zU-TXY-Ts+Lst+Ly+3yCE3e+IghjwDFkwQ90UV
+Vvhs+U++XEjGTh5lorarDXPbPbPXQXQXQTRTRPSPSPSLTLTLTE-+U+J0BT1oaRgV
+VvhxA-QowBgcwJgVQFgRwFgOABgLWb1T2X2T3P3T4H4TQsrpQ5Elwn+FweNT5b+V
+VvhT4X0T2X1T2T3T1T4T0T5T-X5T+X6SzX6RnwMmLQz4AW5j6Vn8AS5AclW3bAcV
+VvhlG7bArl0BaBLkWJZ7rgqN1W5G9j1iAKQ7M0kcS26++6o9obvFxpRpxiBeTqNV
+VvhqMqcqcqbqrqrqqr4r4r3rJrJrm+F2+2bXLkx7bPDH+LBD1P8D3P6L2P5T2P4V
+VvhX1P3sdkrl6l5lKlLlYlbrCBxL-oATAk2T8aLltk5lckbl6krl5lLkrlbkblrV
+VvhkMlrk6m5jsm5Qz4AZrDlX6Vvm6QmX5Vn8AMVNn8AIWNnBwEXNXJw6ZNGRvBaV
+VvhEsVoWvkvX3b0K90dsUU++XEjFzh3p-+FDTHSPPbNjLIapJFRFKLGK3o3dQtAV
+Vvh3ApABAdQJAZANAcQYU+LOBT1oaRgxA-QowBgcwJgVQFgRwFgOABgLWb1T2X2V
+VvhT3P3T4H4TQsrpQ5Elwn+FweNT5b+T4X0T2X1T2T3T1T4T0T5T-X5T+X6SzX6V
+VvhRnwMmLQz4AW5j6Vn8AS5AclW3bAclG7bArl0BaBLkWJZ7rgqN1W5G9j1iAKQV
+Vvh7M1+dCA6++6oA29vEBhREReR2xWwDMo8DLMcRBR5UppnjEpno8q1ocqVp3+-V
+Vvhkc+LoU2aRhxALRDGPODIPMLHPLTHPKXGPJsdobp6orpKp5pYpL+Qsr+Jo+2BV
+VvhPQl5qdZxSQTKXFTIXGTITITHTJTGTKTFXKTEXLTDXLRn9sq5QmyBS5AMpsQnV
+VvhXKVnCBIVNnCBEWNnFxAXNXNx2ZNGVvBaEtVoWwofXJbFKQ0Rt+U++XEjEzh-V
+VvhpoooqKo5psiRKebJydfJaepMmBRh-xZBAk+SC+3h6-3bPSH3r1oaqHp4ppoqV
+VvhpboqpMoapC8R7xCBBxFhFxJBJk4yBk3B1Tphj2TNaLpdlxKB3xCB7xBxFx7xV
+VvhJx3xNx0BNwXLSzXLRnwMq5Qz4BS5jLVn8BO5AcpG3bAcp07bAromBaBLoGJZV
+Vvh7rgqN1W5G9jGiBGR3M0kfSI6++6o9ofvGB3xexN5DICXoXk1o1kHo0knni6wV
+VvhAwrnknnmknnnkHo1k1oXcxF4HKjOQ+3zXLkx7bPDH+LBD1P8D3P6L2P5T2P4V
+VvhX1P3sdkrl6l5lKlLlYlbrCBxL-oATAk2T8aLltk5lckbl6krl5lLkrlbkblrV
+VvhkMlrk6m5jsm5Qz4AZrDlX6Vvm6QmX5Vn8AMVNn8AIWNnBwEXNXJw6ZNGRvBaV
+VvhEsVoWvkvX3b0K90utUiCCoh49zchm7mdngH2kgdcP+NalokJdOL3D2JpkJknV
+VvhlZJQ7g3QJXL2OrlK3QJfX2j4SNl9lqaQGgVdb2b7OMlNmLZgOAduH5X8TJX8V
+VvhTWpLmrp6mbnU2AU-P3hL+EeLrdk5r6kbr5l5qclLqMlbq6lrq5mKprmapcmLV
+VvhpbmbnXGAeAooX8XABMmNn1GAeQgpX7EKmWSAR1L7BslYJQQtT3FolXeA7NH1V
+VvhH+WqhQ+wG5P1JplwL4kgmgqAI9-rtkQQQmsdEjchmeoAH9RqlqkIl4lHkalnV
+Vvhk4lZhgNtP4W5lNRwOKX4ZMlsOAVaX8FspDXIyRDYbHt7pS8BKAspTCBTXABrV
+VvhmnZgcuT7Cqm1kKlXkqkolKk2mKRgn1oNpLpS7xOhOROBTrpcpbpTTJXIXHbFV
+Vvhf6lgj-n+g65c-lln9WZ7yYT1HMPKyBKRKRKBOBOBNxRxRhVhVhVRZRZRZBcUV
+Vvh+GGR51n4NgZeP4L-P1P1P-P2P+P4OblabrlrRwZaX7NTX8QtmbCAeD8Qe0X9V
+VvhQjqmsdp6pC8RLXXJXCBLnXJworPBBrmnZgcuT79+P6D-P3H1P1D5L+H7NpnQV
+Vvh9GX4g6Hd-lln9Wh7yYTNLNTLXKbxKRKBOBOBNxRxRxRhVhVhVRZRZRghoE+EV
+VvhyRD1naNgheP6L-P3P1P1P2P0P4P+T4OzT5SLmKWAZbyAdpb8RMmcHtmcGAhoV
+VvhzPHWbKXKsdpyCBSAsrTCBrnHZgotT9CqmXk5mGkam1kqlIlKknmJk2mqRQz0V
+Vvhp6m+g6fe-lln9WZ5yYLE5PDNHMPJbHjFIanpFQtKLAK3mZdQVA3ARABAFQJAV
+VvhBANAEQYU+IGR51n4NgZeP4L-P1P1P-P2P+P4OblabrlrRwZaX7NTX8QtmbCAV
+VvheD8Qe0X9Qjqmsdp6pC8RLXXJXCBLnXJworPBBrmnZgcuT79+P6D-P3H1P1D5V
+VvhL+H7NpnQ9GX4g5zf-lln9Wd1yY52H2H3P-T1WtkOeTkOag4Of-X+X1P-T3H2V
+VvhA+4VbGkwpaP8OalpkKl4kqkal4kKlahwNexwRsT7NsmKPsmbGQdoX8Uzb8UsV
+VvhmrDxgy8RKBLWbKsspcnXNwsqTBC4nHVwguP8CrmGkKm1kalIl4knm3k2maRQV
+Vvhv0oslw-0v+Flm-oNGDp5dBRhLsp7p7p6pMpMpLpbpapqpqppq3q3q2qG19SxV
+Vvh4johCRGBHZTItLpCJxHZTItLpCBxGBCcqWzNA7-5vEFlm-oaGDp5hZhbh6gtV
+VvhymamWnWnWnSoSoSoOpOpOpKqKqKs8u2DBuuYfTdPCPG9HZSotLhCJvHZSotLV
+VvhhCBvG9CUeuqZygdUg2ri-5565G74zIL95IDGHFPCbAj8Iam3FQRKL3K3kpdQV
+Vvh3A3A-AB7L3G2lYYQYU+GNwX0lzkwqQuAvZTCtLniJwvZTCtLniBwuAqgL9jwV
+Vvhf+0kECw2QQUR7I9xEPH2H+P-SciMedy8acaeWA08P-T+H2A+4CT9kgfwDEbFV
+VvhXFtLoSJx5ZTFtLoSJx5XTFXEf6mw9wf1g8zk0++0B0x9yYbK6-2wlg2wqcDAV
+VvhkpDAlGDAz8n0P2mmf-mGkfm0l8lWlA1292ENkml1CQ6QEpXGBsoHWB2OTRxxV
+VvhpxrqrLrTPRTAa4mAFKlaRnP2Oq7w3gBGP+P3k9P5iam9ZgecP9drmuNwqJXBV
+VvhZLndGAuITDbnXDYdnewcnt9XbDYSCQyGbDUtndHsncLsnMRwm6TASbmbhwdgV
+Vvh3gZgBgRgJgJgRg7wZg-glrTFlBOQgA-qwEXXY1YoETl+rpp-rdoHr9kxnEcxV
+VvhhWVoqoS1LPCx1PDEfQDGXS5II+6HSsph4B5HoLFaoh3HhROID4prAh3xNX9HV
+VvhPKMWp4pa2hJhNV9JTJXKTJXKPJyBNxLXTLTItLprpCJxRxHZTLTIsrprp6pcV
+Vvhoup8XWqYqW0kWD66++6o9YbuFwNBphjsqdqdqcqsqsqrr5r4rKrKrJrZrZrYV
+Vvhrm+-GtpQHENrn4hgZgBQRgJgFgRQBgVg3gdfP9ObmrVwpbXBRbnbKAtpTDXnV
+VvhXDUdndwcntslbDliDDYNns8QuHyAu2yAq4TAVrn5ZwduT8P+P7P0P5P2P3P4V
+VvhP0T6P+P9RroAHJb8g6fn0++0B0t7yYTQLQTOXNbxWRWBaBaBZxdxdxdhhhhhV
+VvhhRlRlRsU2-+-6tpQHENrn4hgZgBQRgJgFgRQBgVg3gdfP9ObmrVwpbXBRbnbV
+VvhKAtpTDXnXDUdndwcntslbDliDDYNns8QuHyAu2yAq4TAVrn5ZwduT8P+P7P0V
+VvhP5P2P3P4P0T6P+P9RroAHJb8g79o0++0B0t5yYLH2-+xtBpheRWxNGPIJ3opV
+VvhNR3MLDKZnIkIn2komJlIm2lYmFmG+-Q7pQHENrn4hgZgBQRgJgFgRQBgVg3gV
+VvhdfP9ObmrVwpbXBRbnbKAtpTDXnXDUdndwcntslbDliDDYNns8QuHyAu2yAq4V
+VvhTAVrn5ZwduT8P+P7P0P5P2P3P4P0T6P+P9RroAHJb80kXTI6++6o9o9uEAhQV
+VvhIQeQ6wWw+wX-cwRWVoloS1L5Cw55D-f6D1X853I+4gbKlB3bTBOqmakpm4lKV
+VvhlKlpl4m4kamak4mqhwhtTBO6nLRwtqXCRbnsHsnsCQuHyAyGstnt5XbDYdnsV
+VvhCQuIyAu3yAq5TAW5n5dwdvT8P-P7P1P5P3P3P5P0T7P+PARroQHKb91+VjM6V
+Vvh++6o9YDuERNBBBVh-xO9bIedpDeOp7ehGAXKPETMHHA+5PY-HHrqRxhfPMPGV
+VvhLKPIPHPKLGPLPEPNOqqadxdsTQNsr5NxppXRRLrcwsrc8RqT8BuSANrhLXrdV
+Vvh4Ru0bRYzXRVDXQVbqsRxhtTNSbqKlhVh3hNhBhFhJh3xRgPORrrxA-GRY818V
+Vvhy+U++XEkETgqomoXoWoWoXoWoWoWoXkcUg0nEftbMHj4g5j3h3iphZi3hrhZV
+Vvhi5hKhm7PFPQXOmKrB3gKhmJeOr7adfMqOKhmRdOq85RfMdRqhHZqSp8bNvEfV
+Vvh-qOoCkRLh0gLJvAf7pSm8nRLgHgrFv6fBpSl8oRLg1h5Jv+fJpSWhaNt8qRqV
+VvhUvNcO0hqVb8rOKMfVeJHhqg4EfVP3X8sKnIXhqh32fRfJvRPVPRPdPJPlf3PV
+VvhoVNrjHCok0SQ6h6h6x6h6h6h6x6h6hCkNTY6st+t8obpFwFBdhXsptptpsq6V
+Vvhq6q5qLqKqaqaqZqpqpqor0+-ILm55Wkw11OgKcX5WCJwVstLm5XZT6SCJwVsV
+Vvhsbm5brlsZwONT4WjP4aalG3vP16chQ6XapgnkrNoH1X0P1iMS9-dyUXXY1YgV
+VvhGTJ5qZqbq6ptzKbKXLXLXLTMTMTMPNPNPNLOLOLQ9S2+2oT6Qi91kABulOaAV
+VvhS7tLm5bZT6SSJwVttLm5bWT6SjT5WblddwO9xgOPP36Lk4km8A-Q6Xb+KnD1V
+VvhVbFACQ7gD+a5Y9-iykXXY1YfFzJ3oFrHqoqaptpPop7h3ILEJZnZVQlOL8H-V
+VvhH7H1H4L3H3H4H4576+3nT6QS91kABelOWAS6tLm5XZT6SCJwVstLm5XWT6STV
+VvhT5WLldZwO8xgOOP36LhgAWWpkWCPKnD1RbFACA7gCtVsk49w0CCECGh1xI5IV
+VvhHHHJPETHWtoOeToOah4OfFX6oqo5pIon+-q5pr5WogoafIe6pcXZTLSCJxRsV
+VvhtLprXZTLSC7xRtxxO7TJaLpMfqpNdhEVSqoW89LF6thPAx7qR2ocoKofa5WUV
+VvhiTo6QQcrCpo+FxFRdxWBSRPtpcpspsprq5q5q4qKqKqJqZqZr0rV+-oC8ugPV
+VvhOngPSkiMicisiqj6ipjbiojrink5iXkMiHkbi1krhokrhnl6hIlLhHljSoD5V
+VvhSnD6WlH7SlD8SkH8SkD9WHnLYwpsDCRoncMx-pHERHoLEx81DHQXp53BFlDJV
+VvhfLbLyBVxdhdRjorDDQDQHQDQwxnnmYgnmagImMg1mccwi7DASIn5VApNHDCIV
+Vvho3JBGkpqpO0HzUXXY1YuLE35j6oDhAyopdpsqC7xTZTLtLpyJxRtb4RfH1R3V
+VvhRw3mGmL+QIh3juhpjOi4j7iaisiribjKijSxSssbjchy7vuSKpSzbWh5jthLV
+VvhjshjSyapxvy9Nvu9RvtvXrjLi6j5iMiridiLitiKj8hajb2vFftnClP+R2RwV
+Vvh7qgwFsb5xxTZTLt5ptpTfHggnWjgM90qzkU++nEoGjp6p7rADLRap3dh3g-gV
+Vvhxg7gpgBwhgJghgJwZgNwXrlcswNwSC93T5X4T4X5xwNwRwNwVwJwZwFwdwBwV
+Vvhhw7gpw-wpvT5krb7krT9kuPFT-LDT0LBT2LAT3L9T3P8xwNgZwNwRwVgTWT6V
+VvhT4T6X3T7T2t5mbl5mMkyFweABwdwDrmckrmbl5mMl5mLlLIw3wFpKrlLFuP4V
+VvhR5ZgRoS4lsFdL5Z3ZQ51MsP0krBLkwCA1ST6c9Os0558BnhL+24zGpH5OmT3V
+VvhWkb1edkzeOktegC94AJf7wR9Ik+erWif4qgv4rg9a9e9i9hfm9hPtvh9xvgwV
+Vvh-vcw49Yw7vUwBvRABvQwG9JAJvIwPrh1lrgnm6gImLgHmbg2mbg1msYwptDBV
+VvhS1nbRAu4DERIo5Ix3oDGUnor6xFlHIQHpOptpzXMTOPOLPxBnnr1r2r1rDDQV
+Vvhwwd9Awdf3Aa9+we8D9WHn5ZAlsHBKInnZB-JHIgBRhL+HBQ555Ai4Gvl9xchV
+VvhYxVBRBRBRBRBRBRBRBRBRBNhJhJhJhJhJhJhJhJhJxFxJhNxNxNhNxNhRhRRV
+VvhRhRRVRXpq3q2qTHNHNHNDNHNDO7kk2nr-lln9VoixGxmrXrXrXrIrIrTHRHRV
+VvhHQLQLQLPPPPPPPLPPPPPPOTOTOxxVxVhZhZhVxVxVhZhZhZhZRdRdRdRdRdBV
+VvhhBhBhBhBgxohs9-p0kZJK1l6GTp6q7kcqQGA5JS3FpHGP-EaRQxgGMTBP1e6V
+VvhmrkuWQdwCsb7T2eNmKlOaAZgOPP7T4b+H8T5TOsbm5qSJwVxbZT6TNT6TFsUV
+Vvh4wvrm5qSJwVxbZT6TNtLm5qSJwVxbZT6TNsrm5qMlsq8lPny99LAm8-b1+XXV
+VvhY1YpGTp6mNnPH7S2lKgXkahHk4hnjLhKj5hLirhNiahdiKhdiLhdiLhriLiJV
+VvhibiXiroiJx9ZTGStSi9Ei5hei5i6hyJvZvTZStSrtLiLhyJvZvTZStSrsriLV
+Vvhhsi6hehebWj3in0kNEo6st+tBYbxGBWhn33B7tXEP-TCP-XCP-bAT0b9T1b8V
+VvhT2b8P3b7P5T7T5T7P6T6sbm5lyJwVwTZT6T5T6Sy9TmDT6T5tLm5lyJwVwTZV
+VvhT6T5tLm5lyJwVwTXT6T5X5X4f3ei99H9E90O1UpJK3NGGTp6q8lerAH+lBW5V
+VvhK6RRFw-3T-DFT2Abl1nqlX3gQwpgKwJglgKwJwhgKwKQZgKwOQVwKwKQVwOgV
+VvhOQVwOgRwVwWAZQZwZwcwdwZk2iJwZk2iJwZk2bmLmLfW+glrmLlelrmLm6liV
+VvhJwZwZwPZT7T7T4tLmLmLliJwZwZwPZT7T7T4srmLmLlcm6m6lOlelebWmpmpV
+Vvhmn1+YUwBJJVKIobxG+3upP+Pp9pFE-46G6WRxx+pTETRTGEbo6rKowoNr4owV
+Vvhodqqowotqaowp7qKp9pNq5p9pbq5pdprq5psprpy7xVxVxPZTMTMTKtLq5q5V
+Vvhpbq5q5jW+vpzTMTMTKtLq5q5piJxVxVxPZTMTMTKtLq5q5piJxVxVxPXTMTMV
+VvhTKXLXLXJfJfJei9OLOLOEA-16UU++XEW5zF5NBB7PFNsm3eeDvanz6kueZatV
+VvhN0926gsWpGjW9J8z9J8z9J8mpGjmpGghIf9J8mpGghIf9J8mpGkRMR0U10o3V
+VvhJJMW4kPw4-sxbl1+EZk6++6o6VzcFx+RMPDICXp1chIfwhIf9J8mpGjmpGjmV
+VvhpGjmpGjW9J8y6hIg6YkWFG3u6LGtgy96kzeeGPZbo5ZBB4-k0bg6++6oB+9wV
+Vvh4lrVo+hw2++1NqQ0z-gEnV1k1qZYNKtoOKNdNL6UJ2pHHD+JMqxYOKtbQqBcV
+VvVNKpZ63FZK0-oNLVow+laPqtoNa3XNK7tR4Lo+Cc++DLqV
+Vv+V
+Vvend
+Vvbytecount 27168
+Vvcrc32 e951de65
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm-uu b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm-uu
new file mode 100644
index 0000000000..e0d10a3b3a
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm-uu
@@ -0,0 +1,49 @@
+begin 0700 cmsl10_tng: please wait
+M ?\ $@ /\ )P 0 P .@!8 H (X3L*# "@ (5$58(%1%6%0
+M !%1-4TP
+M " #J$["H ""P =L&0 %[ !6PQ ;L- &;"( !VPE 9L# ';"4
+M !FPA 1L.4*$+!0 !"P4 @L% (+!0 (P #.@ "[ NP. +@!@
+M"[!8 M@: ?L "0@ RPC 9,'P '3!\ M7! AL(@ )+"( !W$9 "
+M, $ K"!%PNP @N3P "]6L "#5G =L%P K"!$@;;R &VQ0 "]"T !UV
+M% "&@ !# )%0(0 +V\@ "Y"L N0K +D*P "Y"L N0K +D*P "Y"L
+M N0K +D*P "Y"L (P$ ".A DHL !TA/ *2@ "K#!&!VP< ;L %,
+M&+"$ !FPO <L&4U%K"( !2PJ20>L"@ &[#0 6PS5<-L+ ';"]*A.P 5(B
+ML- &[#0 !VP9346L(4>';ID !JP 4P0L(@ &;"I+ANPT ;L-TD);#=)!NP
+MS2H;L.$O$K"\ +;V +L-0 MM NR# "H&P K"!$0LP 4@0L"%""3"1
+M0!"P4 ),'P [#E @LZN580L $Z J!L .J2 /L)$9 K!0 " P 3H0, $Z
+M"S!A0A Z-4(..B0 !S"@ @P5 &@!U*$# !2P\PN1D9,+D:#S"8 \ZN1\)
+M,'0 "S"E%B,PI +L(P "Z!X N@3
+M
+M ;X.
+M 0 0
+M
+M ^ZN 0
+M &_ !OP ;\ &^ !O@ ;\ (;"( !FXO 6\(@
+M%O"( !;PB 6X(@ !?#, 7PS %\,P !>#, !RP9 ;X- '?!D !WP9 =
+M\&0 '>!D !W@9 )4T0 '<1D !OPT ;\- &_#0 !O@T ;\. $["$ ":P
+MB +L "[ NP +H "Z NP 9,'P "3B0 FP? )L'P ";!\
+M F@? "L K *P "H "[!@ !"@ +L& "[!@ NP8 +H&
+M"Z!@ FPC +5P0 $+ !"P 0L $* ^ZN 0NB #+",
+M 1QR $XY !556 7''0 &..4 !D1& 9/I@ ''', !XX[ @ @ (
+M , "#CE AQR (<<H "..0 E56 )QQX "@ " IQR@ *JJT "N.0 L<
+M<P +55@ "XX[ O''@ , ( ##CF QQR@ ,CCL #/ V U56 .<<H #JJM
+M ! P 0..8 $''* !''( ;!; 7>N &XXX " B(]@ )%9T
+M"556 GRRP *3Z4 "J^- L%L +M@L # ZZ[0 /)]( __W>N
+M &D * E #''0 XXX 556 &..@ "N., QQP ,<<@ $ '
+MF (3 "3] W @ ..4 %(& !9(P 6A4 %[5 !@N 9FH '=X
+M !\-@ A, (BN "*TP C'L (\- "@'@ H3, *C( "R0P RNL
+M ,W" #4Q0 V/( -D" #:%0 X:L .1B #E<P ZR@ .P8 #N\@
+M]H@ /AM $#;0 !&HX 1QV $E\ !)W( 2?6 %&+0 !4GX 55: %>
+MTP !8+@ 7M& &"VP !CCT 9F= &[O0 !PU4 @ % (+8P "..8 QBK
+M &R (!,@ $ :0 , &8 "P!L T )X " #^ @ A@ ( *8 "@%V @!I X
+M; / "> @ _@ ( (8 " "F H!=@ * 8 !< "< (@ _@ . (8 #@"T >X M
+M 'R 8 \@& /@!A@ 0 98 % && !0!O@ 6 8X % $& !@!O@ 4 98 % &&
+M!0 N@ : +( & &^ !@!E@ 8 =8 & '* !@!A@ 8 08 ' $^ !0!#@ 4 1X %
+M@%& !0!Y@ 4 98 & &^ !@!R@ 8 88 & $& !H!U@ 8 6( % %> !0!!@ 4
+M5H %@%F !0!T@ 4 =8 % &* !0!Y@ 4 =H %@'> !0!H@ 6 :X % &6 " !O
+M@ @ >( % &2 " !C@ @ <8 ( ': !0!J@ D >8 %@'> !0!T@ 4 0X % $^
+M!0!'@ 4 58 % %& !0!4@ 8 68 & %: !X!7@ > :H (@$F "/_[CCC_^N.-
+M $^E0 !QQW__QQR__^../_^JJK__CCC !QR XXX JJP 555@ "JJL
+3 <<= ;CC@ 0 , <<=
+
+end
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm_vve
new file mode 100644
index 0000000000..5c11e63efd
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmsl10.tfm_vve
@@ -0,0 +1,72 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-03:24:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmsl10.tfm
+Vvh+Tw+2U+++Dw+7k+E++k+CU-M++c++++6sHg81+0U+++6J2JM63F3K3E+++++V
+Vvh++++++++++++++++++++++++++++++++++++-3FBIok+++++++++++++++++V
+Vvh++0+++1e2v0c+00k+++Rg4E+3v+++-Kkl++PgB++4P06+-qkZ++Ng1++5P0IV
+Vvh+-akV++FgCI829-E+-0kI++Ug3++69-E++6k+++1CU++0v++++ikC++9U-U+V
+Vvh0v-M++hUO++Tg+++0EU+++mkX++NA5k+5H-w++hL-++Vg6U+7906+-r2N++0V
+VvhA+2++f0-3kik+++UiHk+0xKg+01Jb++Rg3k++f0-2UPPm++4qlE+0x0o+-pqV
+Vvh3++04U++-1+73E6E+++9qwU+0t0g++iEf++9Y8k+0t0g++iEf++9Y8k+0t0gV
+Vvh++iEf++9Y8k+0t0g++6k2++0CV+++Ycg+-oVD++8GU++0f1-4-qkQ++Pg+3AV
+Vvh4902+-akj++Qg4Ip3f06+-GkeGESg0U+4v1E++KknJQBg9++5P0x8VCk+J6WV
+VvhgB++4v1E+-qkNHIKg6IS5PdY+-ek+IkEg6U+4P0d9Viko++PgBoY7P1R7-ikV
+VvhnGcPgC2j2f0w++9Pq++9gBE++hh+++im1++0c4k++f0-2Egk+IUEg0300H0FV
+VvhE-0kI++7A5k++v1Z+UguiJMEg+2u+e-g++CeG++Dg72N+f-E+0+k+HcEA+2uV
+Vvh0n-VEV+uBI6CCWE+-n0U++UkJ++4U-p821+-GkwkiFYNA9YO1n0M++wuiFw7V
+VvhA5E+0n0Z3WAkd++9g6k+0u-s++iUH+++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh+++++++++++++++++++++++++++++++++++++++PsC++++++++++++++++++V
+Vvh+E+++++++++++++++E++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++yui++++++++++++++++++++++++E++V
+Vvh++++++++++++4z+++-jk+++Pw+++4y+++-jU+++Pw+++6P06+-asj++Kw6U+V
+Vvh3j06+-PkW++Ks6U+-T1A++Lkn++3wAk+-S1A+-mkN++PsB++5T-Y+-rkN++RV
+Vvhw4E+5S-Y+-rUN++7IoE+5QFY+-jko++PwB++4z1E+-jUo++PwC++2v02+0OkV
+VvhW++9g+++0v++++ik+++9c+++0u++++ik+++NA5k+0HWE++akT++7g5k+0P-wV
+Vvh++aUT++0g++++f++++8k+++0c+++0v-U+-0U+++9g4++0v-U++ikM++9c4++V
+Vvh0u-U++akX++9JkE+29+++-0k+++Eg+++28++++yui++EiW++190A++++++++V
+Vvh++++++Flm++2st++-JJK++L55E+4CCI+-YF4++NDdU+555A+-ssv++U++U+6V
+Vvh++A+01XZ++Vlm++6QQc+0CCE++ZJK++7lls+0U+0++dlmU+8eeo+0iCE++gQV
+VvhQk+9JJU+0ssv++j55U+A++6+11Xa++llmU+AXXg+1D+q++pJK++CQQc+1eehV
+Vvh+-+++k+ECCM+2558+-556++++++++P-P++LSi++4sss+0+++++W6xU+73No+V
+Vvh0JJK++bmmk+8HuI+0eyB++g3g++9hUg+1+++++uuvE+D7x6+++++zzrSi+++V
+Vvh+4Y++8+Z++155E++sss++JJK++4CCU+0iCA++llk++AQQU+2+++++++++++5V
+Vvha+++6H+++0Hx+++r+U++CCI++364++-N6k++KVI++3vJ++-Ui+++Nac++5RsV
+Vvh++-wBU++VA+++6Wi++08ok++X5g++6wB++0U5U++cHA++8X6++0mEk++mig+V
+Vvh+Ar0++1IlE++qD6++BY0++1O3E++sOg++CFW++1ZQk++umU++CkM++1iwU++V
+VvhxcU++DVh++21PE+-4cs++Flq++2Zw++-7r6++GTK++349E+-Ibs++JJO++3SV
+Vvhok+-M9U++Lh4++40qk+-XXo++NaR++4vjE+-kpI++U+3++69Mk+0CCM++lWfV
+Vvh+4m++6-AU+2+OE+A+4M+0k-g++o+7s+0+1y++U+VU+6+8M+0U3q++U-d++s+V
+VvhP++D+0S++U+zU+6+6M+0+0a++c-RU+8+M+-Q+0Q+6U+zU+C+6M+1U0o+Ss+hV
+Vvh+5m+M++wU4++DU-VU+E+NM+3+44+-E-jU+K+Ms+3+24+-U-jU+I+NM+3+44+V
+Vvh-E+iU+O+96+4+4y+-U-ZU+M+RM+4+58+-U-VU+M+EM+5+2y+-E-1U+I+Fs+3V
+VvhU34+-E-tU+I+NM+4+4y+-U-mU+M+MM+4+24+-c-pU+M+K6+3+3S+-E--U+I+V
+VvhJc+3U3a+-E-oU+I+RM+3+48+-E-tU+I+Rc+3U5S+-E-cU+K+Os+3+4K+0+-jV
+VvhU+U+S6+3+4G+0+-XU+U+QM+6+5O+-E-eU+Y+SM+3U5S+-E-oU+I+Es+3+2y+V
+Vvh-E-5U+I+JM+3+34+-E-IU+M+KM+4+3O+-s-LU+S+Oc+6U2a+0DzvXXXzyiCBV
+Vvh++2yZE+-llrzzllmzzyCCDzyeefzzXXX++-lm+++sss++eek++JJJU+0eeg+V
+VvH+QQR++PXXU+E++A++QQR+++++8fzV
+Vv+V
+Vvend
+Vvbytecount 2044
+Vvcrc32 086e58c3
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.300pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.300pk_vve
new file mode 100644
index 0000000000..f6329a3abf
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.300pk_vve
@@ -0,0 +1,260 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.300pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAH6s+8+++7YkSl6+-0Oi++Eafh+dMEUhU-ID2jgFN07WB372V
+VvhEaAnIo7XDnMmsnMnBHAzMn2GF02WAG6VB2AUo0VW-pka2koRylkafnbXCSAtV
+VvhAXJG7DBG9XBasaAHMWBH6a6mIo70IX7oQB+TMkRQ7VAC2jgFRLB-Ia30MmBHV
+VvhAfwut1gt2HUH7lIY7pPEAKE69M+J2Frv59Pk21sxDSAsEHUXFmF47XIpBWMpV
+VvhwqBCAqBHIn2j7XAH726I6l6W3IEoo07Z-pka2koGyl3oQn3GII7l6q2XQGBGV
+VvhC2t1ct2GUG7lEY7ZIA+gNUHc4UoI7E2QoIoW6w6ngn9DDHt1o9nYDHt1oyExV
+VvhDWDIwhEw6mo16h+W9GHGo0xb-pka2l+OzF426b6oMYFGMoBHIaBDBXDXBXEpV
+VvhBT7XMYFWB6EHrnnnIa7XEq70Zd1EA4U69M+J2Frx52M-1nrXDSAxAYUl2mR2V
+VvhBXIpsnMosXMpBHLnMn2HIo2HIn2HQW2mUn0E5qY2u-cB0Fnw4r7XQRYp2WDlV
+VvhAlwHBXLWBTBS6n2jAVF1o0Je-CUO1EwY+FjGkx65B82mXlEbwIDDCyAvsnjXV
+VvhCzBWEbAXQWCIcB+pOkRQ7VAF5ToQFU2DDSAxsnopFHEH3HAHB16IAn6J716PV
+VvhAFlASX6twnBy6oAlAoAVAq6VEbB+o-hg--P+0kYRz-kqxXspBSApsnLXBSApV
+Vvhsn6I6FMoo1th1FKO6VoGz-2YJ4FV6W6mAX7-AV3H2JAlAqFX9lArBnPnQrBSV
+Vvh6rBnMrBXPnQrAl6rBXEGBnMn2XQs6VEc8HDE9qs6zhcL2V9w2GF2MG6VAY2mV
+Vvh2IAlApAj2nMqwqBS6qBXIqwqAl6pB-6pAl6r6VEcAx+ZPkUhU-ID2jgFR7AmV
+VvhMa70QXBmAcDlC4scAHUWBn6r6nMZ7GQX8IX+AL+69M+J2lfz2JF1UG6G6awHV
+VvhBGHlAqDrBXsaBXQq7nMrBWUpC1IcAFAdAXjnoiAx7B0Oo0hl-pka2ksOyl3YV
+VvhAJ6l2Y72AaAXIn7X9nMlsnMmBHDmMo72EXFY2vwusnd5ch+WQUOz6l6E2jkFV
+Vvh72F-6V7-6H6FEl2nJ1BW2HDTDCAwsnkk20nE75A4WgoF1V9x2LJmIJ7VIZAmV
+VvhMYCpZsVrh9AWQWBm6c6VUY7GRK1E5LE3IAMC0lfx4M8C6rsn8y7HTXByArsXV
+VvhEHAlIW3nEB+eREWK9FMF2jkFB56l6pAj2nIlwIB1PnIpsnIpwpAlAZAlAZAVV
+VvhEn2G6KEn6B+dRURQ7VAD2jkFB46V6oAFAoAFApDoBVx1QS6nQIBVIb31QJ7VV
+VvhMZ40AOFUo1Vr0e4B5-UGz-2oUZ6V6qB12HBXEl2nMpDoBHQTEqBlsXBXQIBXV
+VvhMJ7mQJ7XQJ7XMKBHIM7-6X8JF41U9rU5P-IH2F9x2EQC1AW2CCEQR-km1U+5V
+Vvh++C++s+-k+1U+5++Q0As2tkFZUW901Vs+B+hSET2olEE4jkFB56V6pDl2nJDV
+VvhEoBTBHHXBHHnIqwZBXAtTTD1Ip7XEq3WUHCYcB+aSUO8nF2D2joFMp3JEIQGV
+VvhIJBFUR5FoR5FoR5FQJ4-Ep707o33EKBEs-cE-CUO1EUGz-2Q7YR5XcsC5-kQV
+VvhC1VlQL3mQXnE6F23IAMC1Fc-2MG-AjMI9p31yXstCSAtsnbnEY7H6p6mR61+V
+VvhH-Y6ZWoK40I-5B7hAoDE7mnnQzcsCXQvBmkr51QcRlo1MR5nIh1nMh1nMwBnV
+VvhcsCjCHbnUtAWIeAWEuAVEgApo1pzDM9I6mp12hIW5LDLk1IO0r9a5VYGz-5FV
+Vvh6ZoaEQNVcWC-QmFlQYC-IpBWIqZmMx+qDDBnjnR72HR62mNL3GBF70R16oPEV
+VvhBFg9QiMS4-9v2LFZQX6nEJ7G2a30N62XN52mQs2XQq6nSIsnQvwqGF2p6GUHV
+Vvh712b3FAY70R5Fg+x5+UhU-IG4joJp-zH5H4o2OAmYZBmIF7XIF7WIGBDB-AnV
+VvhB-Aown31Em3GIl3HIl3GN380Ie6mcFGz5H5H5I1+Ikg7o1AN60I-5B7oHG7HV
+Vvh6WD0Ml6ngq6HAgCHoncxDXCHoncwqwsXYxAuDHsnYxAuDHsnYxAuDHsXYxEeV
+VvhDHCWp1YxEe9E6m6a9EAVAo9F6VEY9HBZpA-+1+XyqVQM7E2QoboXMg80grCnV
+VvhUf9MsnpnpBGy6rCiArCnMvsXQvsXMn3nQm41UW41YtDM9MDM9I6mp16RIW9KV
+VvhDL1+FEo7NsMM4WI-5B7lDEB4kaOnNQC1jnYvsXUvCHTJnWC1jXC1krDC6sDDV
+VvhBnAMC1AMC16NCG6NCXcxchcxchMX9KAVpm6hUxb+NksC4ocZ7WI-5B83XH7HV
+Vvh6r9E7X2s90QW81guCGgu9OCHqS6uDNCHpU2PsXcsCnZ5DDCHUvCXUvwuBnnnV
+VvhYsCy6uBnAMCHUm4HYt6VUuCXYuDNCHqWcxce9J6mAa9JAWAo9K6WEY9MFZqEV
+Vvhk4gD1YyU7GQZ+FnGRb2x+oAmJg7X6aP0MWBZku8HktCHguCHjncsDDCHYs+FV
+VvhnncsD1YtD1YsDC6uC1nnYsDDCXUwCXQn4TCHUn4GcsAVYuCG6NCXcuCHqz8XV
+VvhqXchMX6mIhQm6nEhQW70Ahd4LO1+Do29t8oT4Vry5BPmqjDNxBUFDL6Hpl6xV
+VvhMHDK2opD3HolMx6aDG3noT41oB1E4HkOCmcv4nflkt5FBmoHMx-1W81EBI69V
+VvhEloR4Vnx4r+Gp5GnZC8XctCnyHd7CIYuCXYvBonQCHguCjCYXXCoQvG1gtCYV
+VvhYtGHV5+HYA-0EkhmtVsP5jcQoKMPFGAe8V2sCoUx+rDFBXomIxEJHI3HpFFBV
+VvhIIHNsYqSBBfWHI3IolQxALDG4Ho-gg5E8GoXIhNh2B+pF+kIRVwQ5DoPQ-6-V
+Vvh35HTCXnnguD2yHotD2ssDIsbDIUxC1p6DHYwGHktD1cvCncwCHksCU2gk1R3V
+Vvh0hdk5-gQzFhxSYcuD0seD-fno-cq3Vcq5Hwq5IBGp8oyAq5HBVQNDF4TDE4TV
+VvhDE4XkeCmcuFhRw+iFUdlklgO5DoPTKd7CXgi8XgOww4XMJ4XMR9nMRAp9HfGV
+VvhsnMR6q5HsXqSAxZBLB5+EYQAM96U4lvu5B3a4oIX8WcFC1h6DEBnoHMxAZDIV
+Vvh3Ip-IxIIHJ32qS7BboqYilHGFCBB6qwx2sDECGl88V6QBHAR3h5+82U9t8oTV
+Vvh5lnx4rgfd7HFsncx5XCXoS6uDGox5XCXoSAuDFsncx37Gf8rk-l7-Wgu2-6QV
+VvhzVhvdB5XDFsnoSAx5XDFsnoSAx38hw+aGUVaMlMI5TgPax-BDXDHsnoyAxDXV
+VvhDHsnYZCHIt7WcKCVIw2noIoEk2V912pO60+QzFhvO8H2kx+h2w5HClp1cREuV
+Vvh5JCFpXQRUq5MBVqHIhYoDNAV2xUm2npn2IDLFHpnQxLnUxLnYxAuDHsXgx39V
+VvhGPKLk0NA0UYK4VIQzFhwlBHXDIsnpCAxHXDIsXgKCVMv3XcaCGQsBXR1pH1+V
+VvhNIoCK9cZ7Fnx4rXFWZoIoF2x-B9l2w2HoV2v2XoF6v2Hoj2XcGDG2XYHDFwHV
+VvhC-Ax9lAr31oT3HIIDG3HEJDG3HAKDF3XAJDGwKAVMx6KAFQx2LAFMx6LFnoVV
+VvhQsDF7nUx+r82eI79QA-0HUjYfFwT5DoPRsangx-99FsV2u5FsVAs5G31QR5lV
+VvhIq5G3WMR6KBFoT3nER9lUn5F4H6R9W4X2R5W51oGo0o1o-iO4w-1Hkl2E0+OV
+Vvh5jcQo5p1Ix+sCnctD1Qx+qDFBHoYBB71DHHmHHHW3BGC9IETHHEYonBB71HFV
+VvhFHoHMx+rGnYuCnUx+pDITE1+8p+8qb+Q4Vnx4roh35D1YvsXcy8Hd7CXYuGHV
+VvhcuCHgrDAoS6xbXDNsnqIpPoUk3RF12F+6-cZyVnETIBHo1UvCXYvFno1Mx2pV
+VvhDGEooYAxBD7BBC6Ip6shF-xBB0HHAooYBB6pBIIqB-UrAlIGCH6J2Hgl3Io2V
+VvhEq4dMREZ9I7Fp1EhGBNxNhUtk1dG0uj85VcRzFhx5GFXo1UwsXYusXZ8C2ctV
+VvhCnUwBXoOoXMh6r9FwrDCAsCnV9wsFFIsF-J7El4qEVq2AA+sIkXyqVQK5joQV
+VvhlI4WIG8FV64WUP7z8mPmkL9LwxRRGB8R8BJRPnpz7j5E7T90Mf7mgLGFUW7GV
+VvhYJKkk0tI0r9a5VcQyFgxcnQrAWUt6VYt2WYt2Vct2VYu2T4XcQDNsnqSAxbXV
+VvhDNsnqIpB4w+gJEjYfFwN5TQP4oZ2grD0XWD-XXD-XXD-XXD-XWD-bngOwu50V
+VvhYR2a9H3FpZokm1pK0yGh5lcRxliNUnoIIx6Lwx2Mwx+ND-fngPGFo1YR+s5FV
+Vvhwr5Gwq5HBFp1EhEo5JAlpn6RQl5MLMHNwxfmpgVmJkzvPGYY5TQPZOG0GngoV
+VvhD1gZCogKCocLCV2u3ncFCFUt2XYMCF6s4XQHC-cr2nQPBVEr4nMIBVkp3HMQV
+VvhBFIp5EB-Mp5EB-Mo5FAlQn9FAlQn5GAVUm5HAGUm5HAFYl5IGX2RF8HJCopHV
+VvhgxMgDK90plo0pA-6K+jYfFwT5DsPSaWoZB2v9GGFpHUhIs5KFVq1IRYo5OEVV
+Vvhr12RpBznrorF2xkGDP2oqFIxUKDL7npVUxINHH4noVkx2gGol6ZuIAUsKEjYV
+VvhfFwP5DUPebEx34DF82o-cw4ngfGVo1YR2s5GFVp1IhEp5JElpn6RUl9MLOwxV
+VvhfXDOsnqXpvoEk1dO0R+n4FYQzFiBG2YsCXYeGFgu4XcOClYw41qHq1q1q1qDV
+VvhDMDMDMCFjnYPCVcu4XgNCmV88HcsCIXIUA+X++c73VcN5DoPTJd6CXci8XcOV
+VvhsXgODMsnqCAxXXDMsnq2pAo+k2E-1FKO6VgRzFnL5QDOxBYFDM2Xq-7BMIDJV
+Vvh3Hp0IxEKHG3ooT4Ho-cw4ocfGVo1YR2s5GC-oYMREp5JB0pHERMn5LHl+c1+V
+VvhGk6AF2+U4Vvu5B-xEpDEC1guCHh5DEBXoHIx71HGEnoowYoo314FBD31gswvV
+VvhB-ElYHETHHEYonBB71HGBHoHMx+rD1YuCnUx+pDITE1+BEA92pAR4-ry5BLmV
+VvhqDDLxBPl2xLl6xEHDHwIDGwJDFwKH-RA41gNCWYu4XblgswQBmkqCoC4cA+XV
+Vvh-+eVXFkQ5DoPTxVWpFTW5K24jlo-oDogwR+Ecy6RML5J7jq5k0M30yGh5lwQV
+VvhzFhxiYcx5XCXoSAuDFsncx5XCXoSAuDFsncx37Gf8r1+DkM9QiMS5Fnx4rqLV
+VvhHFG1oXUxANHG4jDG4YoFgx2PDSwxpBrnrGrVrGrFoFkR6P5H4VolcREN5I8-V
+Vvhp0UR7Lq5qL1+9UQAF2+U4Frr52GoJrQsOF72EoJXAqC06s806d5t6Gpy7BXWV
+VvhDMsnqCAxXXDMHHoAk2660r9a5VUQyViR1GHLsXpMoH2mCXAoBXIoBHMpAoIqV
+VvhAnMqHlFXODMqEIMqAnMpEnIqBHEpBXEnCX6lDFXJsXpooh0Ek1s712F+6-YQV
+Vvhxlhx1HHMsXgsBo2qBYEpBXLnIpBSApBHMoBHQZBHQZB1UZB0YnB1YnAngXAXV
+Vvho13hFhTWDMHHoA1+G+c9QiMS4lrw5B3xF3DFCGgvCIkrHEBjHFHWFB7DBB72V
+VvhHGBIoIMx2rwx+t91cfCmgh+d8FEd3FEI80EI3GUJ3-Ib3FJsRLS3RrPEAX+6V
+Vvh9M+J2Frv4uGmAd7GQa7WQa7nErB0UnC1As6yAsAiAsAi6sAzBnEr7GQaBWQZV
+Vvh81AfGh+RAEUhU-ID5DkP+E5GkgCZQmCyAvsnjXCyAvsnh4kkk1om00q+3F6RV
+Vvhz-iYkY8FQb40QMDp2lIy7-EJDn3-Io2lIqBWoWoWoWoGoVoWoVolgJ4VIP3-V
+VvhgYNGEXVFJp3nQA+rAkUhU-IG5TkPdP7GUL7lYZ4WIH3WsY3-Io2lIqBXoHoHV
+Vvhdh6xHmoyAoC1AsB-co4HIN7lQd31hO1+CXE69M+J2WHy4x6hAy9FDG9Gwx6hV
+Vvh6x6h6x9moj9G9H5H6mcXCVEt3HUYC0Ir7XNXBFNJ4KnnoSAx2xAbk1Ep00q+V
+Vvh3FARz-i0Qce8a9wRHX5I2ogF6mca8FQc40pDDH9HwpC1Is7HUp4WMNBlUc3mV
+VvhcID3gA+sBUUhU-IF5TgPl97-Ua3mIqBHMh2h2x2h2x2mFn2X7YMZBmF57C6sV
+VvhAmUnsXUnwrB1Mq7WQZ8FEfGUk1Qr00q+3F6RyFh-6r2l3Z36IHEmEI7V6n80V
+Vvh2I4mEP3-gY4lomolomoi6h9moXoWojDG9GsXoTDG9B+qC+UhU-IG5TkPhA7-V
+VvhcK80QLwc9WIc7XMbF0Z08apQ6IcXG-N47nIcBC6e6z8WEd7WUL7lYY92cA+sV
+VvhCEUhU-IF5TgPd96mYZ7mMa7mIr7GUnC1wnUXsXUnBoArBT7YMX6GV0DFDF9FV
+VvhDF9F7jBGQK8-EfKkk1QY12sp6-YRz-nILK7-onMR2r5F8Fkt51QvBnks5EwxV
+VvhXWDJjIsnqCAxFu3NcI73UJ3LEp2nC6FpUA-Q7Ul2E0+Q5zgRdBcX8WUZ4HQbV
+Vvh41Mr4FQb8FMqC-Qq8-QxAMDG4HoFclC02NElMH4HEJ3FUo3-ML6FAJ3lImBFV
+VvhUJ8l2Z3DD1IHsXplHnpVMhILDH4GoVgg9EBnpLoEo0oz00q+3EsSy-poUY7FV
+VvhQIwM6VYV4W2NGW2rAHMm7IZ7GIYuCz7-QX4I-F8oZ98ko0oy00q+3EsSzFGmV
+VvhjockIIYG8D2mguCYVMGIIWFH2s6GcF8F2e2T8FAM3-QK30V5k3wR1VzK7GIQV
+VvhzVjHqBMFGHpF6v9J2XgRLlAv5I2nkRDlEw5G3HQRQIBlplIr5K3XQRMKBWpRV
+VvhLK3XMhILBlp-Ur5I3nQJ4lUr3FgMD-gND-ccD-gND-cOCmcOCWYtCIO2pL1EV
+VvhKVsDkccd7-vt5BQ-oo+IYrKHUsGmQtGlQuGlMvGlJ9D-FAD-EwFlEHH2QMH1V
+VvhQMHHQMH2McHAToor4DH2QMH1QJ2okx2zGokIGnkKCYkKGIgbCIcdBoZ8BE2xV
+VvhM-fEL-wAF2+U501v5E5F+ERFopAVktD0kf9HYh2GUh2WQw2nIw31Ig3HHngKV
+VvhAngLAncMAnYNAXYNAnUOAnQPAzBVgoBFkZB-kpAlob6Voc6FodDGgg91cg2XV
+VvhIx3L+E2-o7+R6EHc4Uo95jkRUcsYQrx5sXUcwssWYNwdwRIcFYUcY-gw-CUOV
+Vvh1EgSzVG0XoQxHW4S6csWXWBy6rsYPoUck1wX1FKO6VsZz-nJwb9Jwb9Jwb9JV
+Vvhwb9JsWQhLmQer2ri8WQhLmQhLW7mjSHQcb9Jwb9JsWQhLmQhLmQhIb9L4-pEV
+Vvhk4wZ1FKO6VkVyVu1olQW5F7WEQ7WIdBXIFApQa31AaBVYbBVUcBVQcBVQdBVV
+VvhMeBVIfBFMfBFIh+Y3GoGAJ9IBGMxAa6VoGMY5E7GIQ7HIP7WMO7XMN7nMM81V
+VvhML81MLwdBVMeBFMfBFIh+Y3GoGAK5IBks-2b-CUO1EMAxlkMwww2266EV01EV
+Vvh9WU4WgoF20fv5U20oh2-+h9GrmohwhwhwhDT9HrmrnrX9SEk2CEU2F+F6-2EV
+Vvh2j4ko0sd-cfB2F+e+-uz2-6E2G+F2-5Y6-1YDXohwxwhDT9Hrmrmrmohwh9GV
+VvhoU2-oh6-+A+c8UUhU-IF2jYSch5W8GEJ6YAHBH2WBo2vH2glFn6VBHAHEWIIV
+Vvh8S6h2e1+5GgAF2+U4-fu3h6RbX9MsmqC6e+Xsf9MsmqCAhYR2C+E9+Hc4Uo3V
+Vvh1Do14RtkV26W2E1U0ms2u-cB-EHw+nDwkA+q9kUhU-IL8TwSqFzM9xQhQhTmV
+Vvhpz9LwhTmpmpz9LwhTmpz9L9LwhTmpz9L9LwhTmpz9LwhQhURY6+FCUHc4Uo6V
+Vvh2jkFIZx39O7IB37Eo-Uv-CUO1EYOzF3WPoMUM0MpFXXlTlQLwL4+k-+x12F+V
+Vvh6-kAz+xBdBkBDQHOEA-IE+l2E0+O5TcQo5p0Qh+f4loFYRAL5I3VR53FMY3lV
+VvhAJBVMH31Un2VIdAl6IC1ES6FEtB0sYCHEF3GYn2VIcB-6JBYAH3XAW6lELFIV
+VvhIRrlrGoXUcLEag+ZKkHc4UoF8TsSdtSi6h5X9FsmoSAh5X9FsmoSAh5X9FsmV
+VvhoT9Gxu1+7Jo2u-cB2GY-5eSLoi6h5X9FsmoSAh5X9FsmoSAh5X9FsmoT8jSUV
+Vvhs-BU-CUO1EQAy-k422200--+gTDXUCUB2UUhU-I30DEQtnXX045U2-A69M+JV
+Vvh0+Xm5+A51VksMA0+u+wI00q+3Ec3xFb+K4BkQ+U+u-2J00q+3Ec5x-m+M-U8V
+Vvh-gATUw1M0FM69M+J1+5q4A1U1lQBHDUX0+Tg5Hl0UM40V5XE2-U5L0MH0UXwV
+VvhzowrG1UqBX7no+oU--P+0kg2zEy1Iq7XUC+DLUUhU-I7-jIQ+UA4lWMC-C+8V
+VvhLkHc4Uo2-DIQPzvU35o69M+J1+Xp5+kllnXX111442266C+DTUUhU-IB-DMPV
+Vvh1+bkYDY1+C+BTkUhU-I8-DEQMPnyDkP+GQ+9t8oT4WTy7hHWDPDP9Q5Q9Q21V
+VvhvmqjDNxBUFDL6Hpl6xMHDK2opD3HolMx6aDG3noT41oB1E4HkOCmcv4nflktV
+Vvh5FBmoHMx-1W8k2n-0yGh5lgbzWPQ9PDODODODO9P9Q22DmqzDOxBYFDM6Hq-V
+Vvh6xQHDL2opT3Hp-MxAaDH3noj41oR1F4Ho-cw8XkPCz51cR2s9FBno2G6cQ-AV
+VvhkUjYfFwO7zsaqFqmqG2hQX5K7Fp0MEPz9Owxboq-2xQVDL2XpVAxMHHIwJDHV
+Vvh3XoWMx6LDFwMDEoB+ND-cv8XgPCj51YR2r9FBXo2C6f+GwA9t8oT50Ly7BMaV
+Vvh5IJ-p-FREK65fmrDDPxBcFDN6HqF6xUHDM2opj3HpFMxEaDI3noz41oh1G4HV
+VvhoFcx+eDE4nnlkv5FCGoHUx-3W89+GgE9t8oT4mPy7RIY9JEYp1BBEZ66vmqzV
+VvhDOxBYFDM6Hq-6xQHDL2opT3Hp-MxAaDH3noj41oR1F4Ho-cw8XkPCz51cR2sV
+Vvh9FBno2G6cQ-BlEjYfFwO8Dsbpoq-ERPlMRIJ5K3-q2-lwhfnqTHM2Hpm2xQGV
+VvhDK2npVBBHlIxAKDG7XoVQx5lUx1Eo-Yw4XgeClguwQCFoHQh2qDEEsWUk3z4V
+Vvh1VzK7GIQzVjHqBMFGHpF6v9J2XgRLlAv5I2nkRDlEw5G3HQRQIBlplIr5K3XV
+VvhQRMKBWpRLK3XMhILBlp-Ur5I3nQJ4lUr3FgMD-gND-ccD-gND-cOCmcOCWYtV
+VvhCIO2pL1+HAQ9QiMS4mLu5B3a4oIX8WcFC1h6DEBnoHMxAZDI3Ip-IxIIHJ32V
+VvhqS7BbXHOsYp-JBALDH3noVYx+P9-o0Yh6p9KPMDPHQDQDODODKTIk2960hdkV
+Vvh5-gbzGPGsXr1r0rFrGrF-GpuGXcw9Wcw4jDE4XMK4XMRDnMREp9IfHsnMRAqV
+Vvh3lYx2Nwx+Nwx+OD0cv8Xd4prk2H70hdk5-gbzGPO9PDODODODO9P9Q23HLd8V
+VvhCXki8XkOwx+OBVMOBVozBVp1IhGhDXBVonML4HoFbno-bno-cw8XgeCYPLT+V
+VvhFQc8qb+Q4mTx7hQRkhcV9M6lpmIRIa26LLd8CXki8XkOwx+OBVMOBVozBVp1V
+VvhIhGhDXBVonML4HoFbno-bno-cw8XgeCYPLT+Egg8qb+Q4mPx7RAY9JEYp1BBV
+VvhEZ67zLd8CXki8XkOwx+OBVMOBVozBVp1IhGhDXBVonML4HoFbno-bno-cw8XV
+VvhgeCYPLT+7wk48ncE2WTy7esXonomp-p0p-+niYoSAx5XDFsnoSAx5XDFsnoIV
+Vvher1+8Qo48ncE30Ty7hIhExAxAxAxAhEhIEDPlBDXDHsnoyAxDXDHsnoyAxBAV
+VvhiQ+dnUMfCV+G7zsaoFomoG2g6lgZ4GMEJPdB5XDFsnoSAx5XDFsnoSAx38hkV
+Vvhk0LD-Wgu2-AazWKWEeEYYnGGIUPPhB9XDGsnoiAx9XDGsnoiAx79iB+ro+kIV
+VvhRVwQ5DoPQ-6-35HTCXnnguD2yHotD2ssDIHKGDDIUxC1p6DHYwGHktD1cvCnV
+VvhcwCHksCU2g1+HR29t8oT5mLx7BIa5LJ-plFRQK67psangx-99FsV2u5FsVAsV
+Vvh5G31QR5lIq5G3WMR6KBFoT3nER9lUn5F4H6R9W4X2R5W51oGo0o1o-iO4w-BV
+VvhoUl2E0+O8DcaoS6xgxghkRkhkECrp1Ix+sCnctD1Qx+qDFBHoYBB71DHHmHHV
+VvhHW3BGC9IETHHEYonBB71HFFHoHMx+rGnYuCnUx+pDITEk2zH12F+6-ccyWPNV
+Vvh9ODNDNDNDN9O9P21pxEpDEC1guCHkrDEBXoHIx71HGEnoowYoosVHIXWp25oV
+Vvhoo7BAnHGEooIIx2qDEBogtCXgsDEBHp5oA-Ep+l2E0+O8DcapFqmqG2hQX5KV
+Vvh7Fp0MEPLp1Ix+sCnctD1Qx+qDFBHoYBB71DHHmHHHW3BGC9IETHHEYonBB71V
+VvhHFFHoHMx+rGnYuCnUx+pDITEk2rJ12F+6-cayWHG7VoZER6ILG3W-iTIBHo1V
+VvhUvCXYwBno1Mx2pDGEooYAxBD7BBC6Ip6shF-xBB0HHAooYBB33DFBXo1R9CHV
+VvhcvC1o1IxFx1+HRMAF2+U4WTu7R2Y9IEYonBBAZ66NxEpDEC1guCHkrDEBXoHV
+VvhIx71HGEnoowYoosVHIXWp25ooo7BAnHGEooIIx2qDEBogtCXgsDEBHp5oB-QV
+Vvhq+l2E0+Q6DgR+R2--p5HIm51Yw90ghCGoF80oG7nkHBHkIBGkJBDClMnClQnV
+VvhCVUnCFYmCFYnC-cnBlgnwq4nEp50Io51In5GQW5GUV5GYx8mkgCWkGBHoJQ-V
+Vvh+E5Ek1PN0yGh5lYcxmOi6xcxchgRghgEGPGIGnQw8C6w4CAw4CAw4CAw4C6wV
+Vvh4TClfncQ8FoGMhAJ5KLHk1bO0yGh5lYcxmPJ9NDMDMDMDM9N9O22ioZ2grD0V
+VvhXWD-XXD-XXD-XXD-XWD-bngOwu50YR2a9H3FpZokk1fP0yGh5lYcxmPG5O9MV
+Vvh6GpWARIZ5H7V-sh7F9BnkcsXkMsnkMsnkMsnkMsXkNwv4jCVkd5F7WolIRNRV
+VvhAA+qr+jYfFwN7zQZgY9HEYoXBB6Z670oZ2grD0XWD-XXD-XXD-XXD-XWD-bnV
+VvhgOwu50YR2a9H3FpZow-3rEjYfFwP7zUapWqnqXqXqXqWqmr--FebEx34DF82V
+Vvho-cw4ngfGVo1YR2s5GFVp1IhEp5JElpn6RUl9MLOwxfXDOsnqXpvoQ+frUc7V
+Vvh3VcL5DoPSx7BPXDKj1N8BncrHXUsHrC2UrGHQtBncpGtoHpiAxNB8w1+MxwFV
+Vvh93ch8lvx5AJ-hI4WIG8GIG8FV642UO8-cc4mQP7z8mMf7j9-Mg3mpWpzDJDLV
+VvhLHLIXEXGb7oco6pJoppjDJDLwhMawR+Z5E7T90Ig7Wga8mQf3mgLGFR7406ZV
+Vvh806Z8FJO3Jj+EtU9t8oT4mPs7Q70pI7BEnHI7G0QebEx34DF82o-cw4ngfGVV
+Vvho1YR2s5GFVp1IhEp5JElpn6RUl9MLOwxfXDOsnqXpvoEc1DU00q+3EwRylliV
+Vvh6v6v6fAPAfARl07WB372EaAnIo7XDnMmsnMnBHAzMn2GF02WAG6VB2AUo1LVV
+Vvh00q+3F+Rylk-+hD1kwD0oU2-+zEWQXFWF37XEpBGMowqAyAqB1In2T7XAG72V
+Vvh6H6l6W32En1EBC669M+J1lnv4v5GgV8GAM7FMa22J07WB372EaAnIo7XDnMmV
+VvhsnMnBHAzMn2GF02WAG6VB2AUU19X00q+3F2Oyla0MKJ-MIJVMhJ080B572MaV
+VvhBHIq7XLnMosnMpBHAGwaAlAYEVEX2W6JF1FkAiE69M+J2-nv4r70R0FXB47GV
+Vvhro6b6oMYFGMoBHIaBDBXDXBXEpAl5mMn2WF02mAG6VF2Ax+otEUhU-ID5jgRV
+VvhZ83-XlML3FUI4Y-KEWMXFGF27XApB0MnwqAiAqAnInDqAl2YEV6X2W6HF19+V
+VvhBSM9QiMS4F9w2R2WLGN-la4W6s3n753mEs3HIq7HOL7Xo1MwwrCzBoYFBoUHV
+Vvh7ZQJ6p2Y7oAXFh+btkRQ7VAD4jkFVMB-Ma3GMnBHEgwvt1kt2XUI7lMY83fnV
+VvhlBDHgvBrUB+eu+RSPFAB5TgQLWCngg50kEAoQn3GII7l6q2XQGBGC2t1ct2GV
+VvhUG7lEY7ZIB+fuERSPFAD5TgQogCngvCmkh21p7AlQZ3WQIBVEr31IZViEwCFV
+VvhAc30QK70VL1E9Sc5LaoH1Fnv4u4mYV7mAK7FEa21p5AlIZ30QGBV6r2XIXVCV
+VvhEuCF2c2WQI70NJ1E8yg5LaoH1lnv4q70N0FHB37G-YGHAL7FMb31MIBlEp7MV
+VvhPYD1YH8-Eb3WEcJkk09g-CUO1EURz-ky6qBWQL7lrXEG6j2ownIosXHnHWAlV
+VvhwH6HEh+ZvEHc4UoB5TkQgeCHYtCGcf21At2WTlApwHCXbWCTCS6n3jAVV50UV
+Vvh7is2u-cB0lnw4s4GQV7GAI7F6a5IBl6ZwHAz2nUrsXTnTWAlHn6KFR+ZvkHcV
+Vvh4UoB5DkPEY7271AoAZ63Et2WTlApwHCXbWCTCS6n3jAVV51+CD+69M+J2FrwV
+Vvh54F-VV4-BL3YMJ2WkGCVEhDX836a73EbEnUmCH6eDlCaseAHcWCH6t70UZ7mV
+VvhQYCKUB+swEXyqVQH4jkNca43EM33UK63F2Fl6W2mIH6FEo2nInwHBXTnMqsXV
+VvhMrBHTnMn2nIo2nIn2nQW3GUoc0zm00q+3EwRylli6v6v6fAPAfARp7AmMa70V
+VvhQXBmAcDlC4scAHUWBn6r6nMZ7GQX8IXEATA69M+J2-rv5+20owD1kw9G+E22V
+Vvh-8AmQa7GQYBmEcAjC15WC16s6nQnBmEq7WIc6md7o11o00q+3EwQylilof6GV
+VvhYX40IK7V-4GHAa7WEb6nQX81wHVi812s6XQmBmAq7GIb6mZ6o0zp00q+3F2OV
+Vvhyla0MKJ-MIJVMUIIgn80Ma7mIr7GUnwsAi6sAnUYBnEr7HMb7GYX8ofE9zM6V
+Vvh9M+J2-nv4r70R0FXB47G-eGXAb7WIb71QY819nUlsXUmC0ArAnQYBWMZ80AeV
+VvhGQ+xy+UhU-IG4joJp-zH5H4o2OAmYZBmIF7XIF7WIGBDB-AnB-Aown31Em3GV
+VvhIl3HIl3GN380Ie6mcFGz5H5H5I0UBDY6zhcL2Frw56sXh1h0hFhGhFroQX2XV
+VvhImwHBH5lEoBjBHLXBHLnIn2mIn2mIm31AF6VN1AUY1Pu0DvO3l6Rz-ma8ZCYV
+VvhCYCYCY8Z8a5KFmEGBHDlApAj31ErwpBiApBjBHAI7HAI7H6JAl2W3oAno1PvV
+Vvh0DvO3l2Qz-jF+F9G2f6lcZ40MEGYQX2XImwHBH5lEoBjBHLXBHLnIn2mIn2mV
+VvhIm31AF6VN1AUo1Dw0DvO3l6Qz-iGEdEYUnG0IUQYQY2XInwHBH9lEoBzBHPXV
+VvhBHPnIn30In30Im3HAF6VR1Akk1nx07Mh3V6Zz-nH9GDFDFDFDF9G9H21B57-V
+Vvh6pAz2nImwIB1TnIqsnIqwpCD7HUnCrojDFBnIcB1UK8VAwH+k1fy0DvO3lQZV
+Vvh+-mKpzDKsnpiAxMmLEAFEgFWgs8TCGbnYy7nYsC1UtC1UtC0cr8X2ICn7R1nV
+VvhpiAxNBCh+A-AzkUhU-IM7E2QoaonEx+b9DBnyXUuBngr91QQBmVr5EBVoTBGV
+VvhoDBWoDBXkrCXUuwtCTC1Ym7Gcm71cm30knLEDLwxUhEX9IAGpG6RQxT+C9U6V
+VvhZWoK2WHw4t70Z0G1B67G-XFmEGBHDlApAj31ErwpBiApBjBHXmIsAnhx9noHV
+VvhQp81Es3WcHD2kB+MpkRQ7VA72jUGUL3lQL7WMaBS6rwc4D8D3R+NxkRQ7VA9V
+Vvh2jgGLlcewewdCHUc80Uc80Uc8-fE4m66CmUJ1Ent517GDWEoxFMTEK3-MI3VV
+VvhEK3-MJ0s0Go3iLAD0UDx0R9U5Jk6CmUJ1Unp5+MA62200-+UEE6200-+gKDbV
+VvhntwQCAU7SkUhU-IG+Tk9pPU7T--P+0cZ+Tg9qT+DOKFZPbFdNaZZQW-IHJF7V
+Vvfw-JXPqFdPaRnMqVZPKIUJ4JM65FZS5Hk14NjPbFaMKBZMbZoNTE+uU++xJF7V
+Vv+V
+Vvend
+Vvbytecount 10528
+Vvcrc32 2f350617
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.329pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.329pk_vve
new file mode 100644
index 0000000000..519a076e38
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.329pk_vve
@@ -0,0 +1,293 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.329pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAHAk+8+++7YkSl6+-6kQ++GA5B+kMEUhU-QH3DkHV181AGBXV
+VvhJ4BnIsB2UoC1HWG1DWG1F6ApxnAGBYAGBF2n2mEH6VN3Ax+jMURQ7VIE6DgTV
+VvhJ7TCAwsnnnomFn2I712JAoMnwrHX2sTWV-C16rEXQo7XIZBmAtK+k0BX-pkaV
+Vvh3F2Iz-CKYp3mUIBYB4EnQnG-DWHCFB2v2XcI8FMZCJT+CqE69M+L3G1w5xFBV
+Vvh3yDIDIsnpDCoAtAl6sBIUrBnUqG1MsBi76BS76BYUn2jFnAIBYAIBF2n3GEHV
+Vvh6VV3BR+bNERQ7VIE3DkHZNB-Mr31UHCF772XYGFmB-NJfXHHov2HcHC-IZC3V
+VvhMA+nNUHc4UsK8E6Tp2om6zoG7B+n9FwxLYDFnFsnpSExLZDJsnpWpjDK9G6mV
+VvhoI2h309G6Wp2ow+rNkRQ7VII5TsHd18HAGBnJ5BnMsBIUpC1LWG1HXG1LoQrV
+VvhBYQp2HUY2Hh0DIwxDnUbBoIrFHYZCrj+CKU69M+L301x5rHETHsnoyAxDnp1V
+VvhB8AGAcAFMbFnPnUpsnUpsXUqBnEFC1AGC0EGBnEGC0AGCG6X8XG+8qY2u-cCV
+Vvh0lzw5c8DFnqHMW7FAY31AI7-An31TWBy6rB-An30EHB-EX3G6aBEk0te-CUOV
+Vvh1V6c+VvG9GxB2kT2o-AfwICT3HUJDGsXoSAx5XDFsnoTCGEsEXV18WAgHA+yV
+VvhOkRQ7VIH6DoTRATGsnoiAx9nonN4BFEIBFAoB-B2AlF2AVMYAVo12R3B7vAnV
+VvhfnEtBHEGsXIo2nMX2nQX30V2o-xg--P+1+cUz-xYByBXPXBiAqsnPXBi6rAlV
+Vvh9XAlEW3XIB-6PEoJaWIV3DkHAqJoQG6mEY6mIHAFQW3WEHG02LAz2nYsAVAtV
+VvhC1TWCHUqsXYsBnYrB-6tC1AHCHUY2nYrB-AtC0AHCHYW70ceBB+qPUXyqVcKV
+Vvh3DkHAqJl6X70IHAFQY2oUYwHCH6HCHTWCHPWCHQsB-6tAlAt7-AsB-At6lAuV
+Vvh6WEfBB+cPkUhU-QH3DkHZQB0Yb7XUoG1EtEYZC6IeC8Y37EYYoC2EsBWQd71V
+VvhlN1+Cb+69M+L3lo+2rBIcG6lEb2n2JBVB4Bj2nR22nVC81VC7nV6C1UsG1UtV
+VvhBnd3CX6HCnBB1npiAxPnp8o+k1Bl-pka3F6Rz-C2IKAlAZBF2ZBnEsAoUnC1V
+VvhDWG19XG1DoQpBYIp2HMY2HZ0DGwx5XDFwvgko0Rm-fwX2l2Iz-AnJ22W6Y2VV
+VvhB3AFB2EFApEFAq6FAk2C6xsnrXDH+F9Eo0Rn-cfB2l+IzFC4Ua3WUI80EbB0V
+VvhQZ6--PWMaALH6sATG06t3-YK3WVbo0-o-J141kkQz-hmcssnXnH3CCAssnXWV
+VvhCHIGwp2zB-IX3oLEBLI6ZWoM3-Hw2oCGEW81AH7nAIBXAI7nAHBn6IBXTWBnV
+VvhPWBnQrAlAqAlHmQn31J13GEG6VRIAx+gRURQ7VIG3DkHErAm6ZElAZIFEpEFV
+VvhEbAFAsB1UJsXYIsXYJws3jBlQq4HAgG+o1pr0e4B5VgIz-B1YZAm6cAoAH7nV
+VvhFF31MpEFEbBX2HBnQoBXUJsXQs3C6rC-LnQr3XQb3nN440N34HEG7-lIJw+sV
+VvhS+Rg3FIH3DoHMpBW6X2lEJ6FAn3HB03XB03XEW3Xoy6x9WDHBl6XBl70Bl70V
+VvhBVAm2GMH3-6X7IF4k1lt-wHH3VARz-B1YX6WUm2mQm31Mm30Qm2nQl31MqsXV
+VvhQpsnQqBXTmQrBIUYGZ2xDnoXN4BYIrBWUa8VEwL+k0pu-cfB2l6IzFBnQKJFV
+VvhNn7GJK4FolololololololololYK4FMO3JIZ6sIJNFQrs02E-CUO1UcIz-ACV
+Vvh1A6l1YAFm5+s1UC-k5+Q1VC6kb0AEn-ko0IF-J141l+R+VCYgH8T31xlIq3HV
+VvhrWDCAwsnnXDDBmEqEXN180AeGg-N4EWK9FUQ8E6TpKpmIxEbDG8GoTCHz1YxV
+Vvh1nYh2s9FCFhs5HBlp1MhEp9Iwq9IwqDHBYoTC2oC6tGnZAAlJAAXEx+m71oHV
+Vvh6XDFBIozDQwhUWDLEGpo6RYW5PDOk1sO0r9a6FoIzFDI6ppaER7r4n764HF6V
+Vvh41It3YJ63XQr7XUlNoVAG1oHYx1oYwx7GV6sKFAr2JQJB02m3GVI6pPEEFg9V
+VvhQiMV5-Hw2tG3YY71EKBW6b31QV8-AsK-AsGF76G-77BmB7AKJ7Gi77D2VAG2V
+VvhcGBpcGBm2d30MX7lMXBFIcK3MA-75+UhU-QJ5DoLplpVpVpWlG4nEf7WcbC1V
+VvhMF80MGBXIWBHMHBHIIBHEJB1IIBHEJBHAKBH6ZBX6K802KC1Qe7WgYCl7Q9KV
+Vvh5K5K5L1+Kkg7o1AQ70Y05xJaLI71EWDG72AWHFB26mHF7WAY9FsXcxMvDKsXV
+VvhcxDQoHgxPXCXpXgxPXCXpXgxPXCXpmgxPXCXpmghTncx6X70Ih706oAh706oV
+VvhEREX3GAhN5LJk2wA0DvO4Vod+VzJbJC-omYx2sHF8Io1ch5WDQsXqRPFCHoCV
+VvhAtDFC1oS6tDFwsDFCHoHYn4i6sAlctAlcu6VgvD1rGrTDM6mq26hR09N6lqoV
+Vvhqg-K1EZbVVgT8E6TpM6xApAHoWNx6qTG802x2vDFwuDFwvDFwuCxTFGXoSAuV
+VvhDGCHoi6uDGwtDGCXoXcn4y6tAlguAlgv6VkwDEDT9TwxcX9OEWqI6hgX5RHQV
+Vvhk5sC1Vh880gd+VzJVdpHInC-omN08HoHN-8IoGUVCIo1gu9FCmrXcxrWCnrHV
+Vvhcxc-HECncx1WCnYx2uCXoHctDFsXgtDFwuCHoHgtDFCnYn4XgsAljnctAlcvV
+VvhCHAOCncW4nggD1cxsfDRwv9N6mEZDMEWB29MEWB29O6lIY9QFpr+k62D1YyUV
+Vvh8God+VzJRs6xAoB1IlDG7IAaTGBI6qTGBW6s6HoHgvDFCncx9ncvDFCngx5nV
+VvhguCk3R6uCnoSAvCXojCXcx9nguDGCnYxDncuDGCncn4zCnYn5DCXcn4ngv6VV
+VvhkvD1o1gU21ck20gxwv9P6mEZDOEWB29OEWB29Q6lIY9SFprUk23-0yGh6VoUV
+VvhzVzN5SwhoxnoqqqV3Bbl7BUHHLwIHKwJHJ3Yp0NBELHHwMHG4JoR9E4okfH-V
+Vvhl9wR-8wR379FFoo3GMnED269EloU5Vzx5b+J+FGIp8H2gwGosuH2yIl8Goh8V
+VvhGoZB+F+FG3p8GokvsYl7sYp7HHZBGIl8Goh8GoZ7+Jj+FoA9QiMV5m5u5xBrV
+Vvh5EFWEfCl6fDEGWoYYhEsDI81pGQxMaHK7THL3THRsorSBBtBQLwxQLDK4HpFV
+VvhYxEP9H5E9E9G8lpHMxVxAA+xF+kIRW6T5zoSTJp2Yx78DFGno2kvHECy7B2yV
+VvhCIoXssHGHWRB76HFGDHGCIoHdB+uHFCYo1h9DEGXo2YvpR1+DYI8qb+T5lzxV
+Vvh5bqvH1lB+gxB2PsooVd53ljoQRN49JFWpgpjFWpS755KHH4THH4jHG4YoVhBV
+Vvh2fHF52kvGpTOUA+kFUdlklsS5zoSTOh9D2kgxB+PsooFdB2PsYQRF55JFWpQV
+VvhpIMhHXFlpCBBnXHQLMoBEA-6FklUgWAS6TcToqQR+q70gu2Wgh-7DFG1onTnV
+Vvhp0QxIaDK7THK3THQsor2rIn0xBF3HHFy6xB5DGGHoIch-OD-2vCG6h2p7FoqV
+Vvhow+jG+jYfG6X5zoSTE9EhOLGsYhB9XGooiB9HGGooxPHx9HGsohB9XGooiB9V
+VvhHGKZj1m+k0-7-Wgu2VETzFtx0poi7B9XHGsooiBB9XHGsooiBB7Po51+92c6V
+VvhNaAM401x5foBBRPWHKsopiBBPXHKsopjGmR8FYbpJ8FIgMDE3XoVExFRAA-FV
+VvhGklBKWAX5zoSTEOPL3o2o1oYo-p2kRFA5JGlpYYRV65MG-qIQRd45PFGqYFBV
+Vvhd1PNEV7BZ-2oq22JHLJYpoRBR6HJx7HJx8HHGooy7AHFL3b4hg+gH+c73VoNV
+Vvh5zoSTFoZpy7BTXHLsopyBBTWHMHE5qHE3okbH-TokbGmV8BoZ2q2k4xB1ZWuV
+Vvh8GcTzFtspNhBFh7BFRDl2x6FHG2XoF3BDl6x+GHH2XkHHG2nkGHH2ngHHHwHV
+VvhCVFB6ICFFBAJC-FBDlIr3IoVMq3Ioz3XIKHH3XELHG3nEKHH3nALHHwLAVVBV
+Vvh9lZ6HH4HZB6d8YoHYdKtMKm+k2pC0yGh6WATzFttafL2oJo-oz2IkR6GGloyV
+Vvh6HGVoj3IURAJJlolN55G3oMRDW42IR9W4YARAPEVoj522RDlo3oVoIoz5GDGV
+Vvh9GDFDH57o-n+HYwAF2+X5G5u5x7xQpDHCHo0kuDF8HoXQxAqHIBHpHExMnHKV
+VvhAnpnwYpnslHLXxR-HLAYpY7BMnHJF1pHIxEqHGFnoIUx-8Cno1Yx73DKTG1+V
+VvhA3+8qb+T5Vzx5bpRB7DFGXo2gwGosuH2yIl8Goh9CodAG2oR5HHQsorCBBnXV
+VvhHQLMnJ1+O32AF2+X5Gbu5x7xQpDHCHo0kuDECHoXQxAqHHFHpHFBIzBBMmHLV
+VvhAYpYslHLXxR-HLAYpY7BMnHJF1pHIrBnMq4IQo3FB6B-IGGXAJ2Ho16JHGAFV
+VvhEr4r2M5K3mpVQRMp9KB0ptpsqKqoYA-1IUifmW2R6DoSTIooRB37DEGXl8HXV
+Vvhd9HtGod8GocvGHo2RB5BF4DGG1oIVB-7DEGIjXGIh7HDGIMJGIIJKXIFm0ERV
+VvhdH1+FJA6zhcO4W5x5x-a4nIX8WYF8Wgt91Ux+c9F4C6x2MDOxBZxShDBCxGRV
+VvhVhboqjBz5GBloWQh2r9F80o1Uw812NCGAa8lNh1+ApE9QiMV5-zs5YqnFYQoV
+Vvh82YI4IYH4YYH4IcG8IcGwOGV2OGVoC7BfXHOsoqiBBfXHOLIow1+ApI9t8oWV
+Vvh5G1r5Vo3dJl6sYoFbXHF4SBB2NsooFbXHF4S7B2OxB+QD-o1gR6e5HC-pWIhV
+VvhVhL6EpM9t8oW5W1r5gaILGBoomVBANxB6OHF4zHE53gR395FGVojGFozG-p2V
+VvhQRLoMRNI5MF-q2ARbo6Rfo2RhRnorHrmrlqEm4pL1zhh9GYUxlv1hdBOL1NOV
+VvhHE8DGYo-bodA4YdO4odN8oYFGFl72IUR-62YUR-62YQR352oQR5oMIFVojFFV
+VvhJ35HF-N25IF-N15JElR15JElR05KEVV05KEGV-5LOI2RXodRbnhBch+hgh+RV
+VvhkR2RQA-EK+jYfG6X5zsSX3f3dR79DIKVpoYhR75MJlqYMRh35QIlrY6Rx-9TV
+VvhM-3+2i7E2-3RsHHR6orFFRgKHO3oqFVRQOHK4opGhRER-B6x-B-QOOT4m2-NV
+Vvh0yGh6VsTxlv8UqoXRBAcLG4YoFhB+QKloIch385GK-opQRJ45KJFpZERV15NV
+VvhIFqbqprDHRDRsYrHrSBBlBbBAA-1KUbEAlkR5zoSbLVeGHl892gQGml952kPV
+VvhHE4Yo-dBhRhBhBhBhBjoqoqoqocR-953cR-952gfH-hA8Yo-dQ8YktGZbLb+V
+Vvh7k+80FMR5Fzx5bqPGXl99DH-jXHE4Yo-jWHPsoqyBBjXHPsoqppx1H1+Gk2BV
+Vvh3NcZ5W1x5xYhvnrIr3r4qV7BYHHM6oq-FRMJLJwLHI42olZR2dLF4oo-lA5EV
+VvhH-o3cR3N5HG0ooURF55JJFpZIRR25MElqJ9T20v+JU6AF2+X5G5u5x7xQpDHV
+VvhCHo0kuDECHoXQxAqHHFHpHFBIzBBMmHLAYAQ2Y315-BC6IDFCDAQ2o3BQmHKV
+VvhEYpXBBJ2DJBHp1MxB5DFG1o2cvDECHoXMxNx6A+u+kgHIlwO6DsTpz9OwxboV
+Vvhq3pz2Ipj2YpT2opD32oz3IoVNB2aHF3ooD42nlZ9wOKT4pUR-59EFXlHZQ1+V
+Vvh8UE8cMoS5lzx5cqjTOXlq-Tlq--uwR+R9WohAR+R6R+Ei-q-TW5M4Bdzqc1+V
+Vvh8EI9t8oW6lzx5brvGpoi79HGsohB9XGooiB9HGsohB9XGooiB9HGKZj1m9-AV
+Vvh-UhmtW2V5zoSXBVQB7L38YlGdQEeL34olFhQEQ-AEQ-AAQ3R3B5poIoJo2oVV
+Vvholololl-kVl-kVlFkFlGk-lVk-lWcgMt55CFlZXAXBX+CEQAF2+X5G1r5pL3V
+VvhNtV7SH7IJ26WQoBm2MAnUF4W6t2FcW8VkVDO6Gqpqy7BjXHPsoqyBBjXHPLKV
+VvhoR5+FEU9QiMV4Vzt5dohBRXWHMHLXGAY38B2ArBIIpBYMnFYN-FoN-FYSC7oV
+VvhS4Fo2rFn74FYAqFIEpFHQoF1cmEIoNpiBBVRDFf+DkYAF2+X5-zr5cohJRfWV
+VvhGpR5IYN4FDFYJ3soJ3FS73FIN3F2R2FIR2F2V2F1coEocnEokmEXoX4BJxbXV
+VvhHOLJoR1+J+c9QiMV5W1w5xCBN4DGGHo1kvDFCHoYQxB4HIDpHJDWFBJDFBF3V
+VvhHIBYooNBAsDGCHoHcx2g9ED0kx+g9G8WcJ8VMI3GYZ3-Md3VEK8-MJWMK6ZMV
+VvhW41ED1+69M+L3Fzw5QI-+YCXMsBnQt7nYpCXx2Z2CYB8Eocnsod0sYd1GXEuV
+VvhEod1GXF7F2YqCHMsBnQt7XgYDKjE5n269M+L1lvv5E2D5GkuGG2r6nkvsnjXV
+VvhCyAvsnjXCoPGk2Mm00q+3lETz-qpo0Ef3nUMBlcq2lMp3-Mp3FIy7-IJF-EKV
+VvhBFAKFXNBAxAxAhEhAhEREhERIQ3Fo-IQ3FkYNmIHhFK33qMMFw-+AkUhU-QJV
+Vvh5zkRhh+ZCVUs4WQPDp3-Qp3FMp3-Mq2mMrC0pHp1p0o5p1pmpXpS748ILoV2V
+VvhG2IPFVZ54HUMCVIx-g1+CnE69M+L2mTy5REi9HDWoXojDH9HwxAhAxAhDmozV
+Vvh9H6mgXClEu3HYZC0It3XULBbAp7ZIOTDDGsnojDH8A+qBEUhU-QH5zgRUb88V
+VvhWdWz5Islp-pFB92GAe7WUbBlUxDXHFF1V1G2B6B1V24XINBVYc3mYYD3gA-+V
+VvhBUUhU-QH5zgRo3ko4WMN7HUZFmN4BmMx7B6x7B70GH2Y3pMaJXJ5B3R1sYV1V
+VvhwsEoV1G1F5FHQq81MqC0Iu30o3f+CHQ69M+L3-zt5I2nUI2KQH2MIId0BI6XV
+VvhErAFIR+I9-IQ7-o0p0p1p0pDDHwxDnozHGsYoi7B7R9op0nECXU69M+L2lzvV
+Vvh5PL0Ee3mUN7WYi7GcYCGJ63ZMbJ0VW4rpgWVBb7KIcFFco8XDW90DlkY8WIeV
+Vvh3lUd7Ghek1ot00q+3lATylqpkn8WMc7mQrBHUoG1F5HWB6EoUosXV2BpEqJWV
+VvhNL6m36EnoYojDGBWUpFXN3BnMc3mcID3kA+x7+lCBGAP6DkTpZq0ERIq5HC-V
+VvhoWYR2t5EC1zEBoo1Uh1XDODMfLwxfXDOsXqmkKWlKQ31FN3FK37VEYa2VN1+V
+VvhOmMAF2+X5m9v6AHQ7-ge7VZ68-R6C-Us7ncLBYYM7YcLBmcMDJ4Hp-chAf6YV
+VvhYF4pAK6lcp3FMN7VEL42IH4FMl3-EN3I732GMJD3IIH2MIHE7lFBYHxBYIxBV
+VvhUKDL3npVYxEe9H5ED0oYQxSB6B+pDkUhU-QF6TUUZ970Qb7FcJ4WAP6VkW4mV
+Vvh6Q6XYmFn74F0NAGphAHH+E6-1mEP2ll+MnrplBD+o1Ey00q+3l+VzFPGpDhQV
+VvhA3l92lcI4FEU20owCoh9GoInBY6rEHYl8l2v2T8l6e3-YJ4-QJ8JUA-a5EsTV
+VvhpWUd5zsSpBjM2IcxUGGmpz2okRPlBB+RLlFB+REIHE5I3I+G3IQRYKFlqFJ5V
+Vvh5N3YQRUaFWqBTLwLFlplV55L42QK5-V53VkcHF5-ZB+Q4Yo-kNHE5-dB+Q4YV
+VvhkQ8YgeGIZLZBSA-k5Uz0WWod6TYTob+HBRSnV9CYZA8HhB+MD2o-RADF3Yo1V
+VvhoFMx-B2JHEHF32oHYI3IoHYNHFGFZB3682oXUdHGo7xB368DHGCFZB374IoIV
+VvhoVDooHoVIx-B2KH2oFNADF41hB2MGYo-cuH0gsGZl2px7xv+QFwAF2+X5mHvV
+Vvh6+2ForMR6pB-o1Yl5E91kx2fDFGHoF6cHE2nQx+IBXoFEpHE3HIx+KB2kLB2V
+VvhgMAogMEocNEoYOEoUPEYYOEoUPEoQQB2MQF2IR+pF-o2Mn5FBzAVoHZB2uDFV
+VvhD1kh+FCHo-AqDF3boz2-2B+T6EHc4UsA6TgUUsxS7ZTWG1V6sXbW8S6esV-4V
+VvhCDJoUt1E5nk2u-cC105y3d8IxpUkFj4i6dsWbWCC6ssYRLFy7MC+k2UX1FKOV
+Vvh7G+dylzL4-qGQhTmQhTmQhTmQhTW7mpz7mpz7mfTA-50QhTmQhTW7mpz7mk-V
+Vvh2xyWQhTmQhTmQhTW7mpz7mpz7mpz7mpkk5kZ1FKO7FsZyG4Hp-QX5G7WIQBWV
+VvhMtBXQFApQc31AaC-YbC-UbC-UcC-QdC-MeBlQeBlMfBVMgBVIh2Z3GolAa9IV
+VvhBmrWNBEa6loWMZ5E7WMR+Z7lkZBlga8-caC-YbC-UcC-UbC-UcC-QdC-MeBlV
+VvhMfBlMg7VMh+Z3WoWAL5IGB+K7kHc4Us61jQTEoLmMn2L5q3j3VMK3GPEB0U4V
+VvhWgoH20vt6E2F+E2-+E2-+E2-+E20ohwh9HohDGox9TDGrnrmrnrg6-2E2T6-V
+Vvh2E2j2-6Pk1od-cfB2l2i+04lp-p-omoloy6hARDa9WoHsh2h5noT9FDFwh2xV
+Vvh2h2x2h2x2h2x2h2h6R6h2h2h2h2h2h2RAA+e8UUhU-QG3DUVfW9HwNB0EnAmV
+VvhApAV6t6F2gxA6F2dAV6pAmAnB0EtwRDW8g+R8kl2E0AP5DcMoy6hjX9PsmqzV
+Vvh9+8SD0qyAhjX9Q5Ho-Ag-CUO1UMCzEEnsmHp5o3-HlEI3Q+A9UHc4Us3-Tg2V
+Vvh2loFAg+v9kUhU-QO9TwVr-qmzO9OwhfmqWqj9Owhchfmqj9Owhchfmqj9OwhV
+Vvhchfmqj9Owhchfmqj9Owhchfmqlr+U-6u-CUO1UUIylBHFDBIDNBDIoEpo-YvV
+Vvh-CUO1UcRzFBnNDJKA4cqsoblXlUMwM4-YA+EDEl2E0AS1DgEDRDT1XrnrH0kV
+VvhO2+AF2+X5W1u5wBwYb938mkGklgQIO554-V73VQY7lMK7VQJ3WUK3-MdBFAJV
+VvhCHIG3Hcp2VIuB-9X3Hcp2VItBF6K8XIG3XYp2VMsF-EJC1II3WNI3FQY6WAKV
+Vvh43J65G5F55C0kYk0VQKQ2A+bKkHc4UsG9TsVjrymoiAh9X9GsmoiAh9X9GsmV
+VvhoiAh9X9Gsmoi6hBuSw+bLEHc4UsG9E6VjrzH9XoWoiAh9X9GsmoiAh9X9GsmV
+VvhoiAh9X9GsWhuSy+JM+Hc4Us51jQT+UUUUUUEE63XtwyC+CUB2UUhU-Q30D6TV
+VvhlnX542DU2-A69M+L0+Xk5kMD1VksM20+u+wI00q+3kc3wlm+I4Bky-U+q-EJV
+Vvh00q+3kk6wlzlcd2FUV3m6Z75N4160FM69M+L1U5p4h5U1lQBHDUa-kXe6-l3V
+Vvh1-UkQHnE2FU5L0MJ0kbwzqBnV7CTBnQmRB+C6+EKk+k9-TkFYb7XMb8Es-3SV
+Vvh00q+3kc5x-w0+Q1kNX0M5+H+13w2u-cC-ELp5W6h2H5U3Lo69M+L1EXn5lUkV
+VvhsQsQMAMA62A4201U1rs69M+L1UHp5Fs2z0Ez65XU25w69M+L1+Lo5X-bXzbzV
+Vvh5q1Uk2r+0yGh6VofzWfL9SwxshsxshwRwUN-rj9RDQxBhhcFHNwGHM2opz32V
+Vvhpj3IpFNBEaHI3ooz42oVZR5Go-hA8okQGz5EGj5FGGoIRB-IaA1+Hw29t8oWV
+Vvh5Wjy8hshtBoxoxoxohwRwEOVrz9SDRxBlhgFHOwGHN2oqD32pz3IpVNBIaHJV
+Vvh3opD42olZR9GoFhB+fHE52nlo2jloIch36HEJNX-k3100yGh6VofzWfP5SDQV
+VvhHP6WqGERUa5K7l-y5SwhoxnoqqqV3Bbl7BUHHLwIHKwJHJ3Yp0NBELHHwMHGV
+Vvh4JoR9E4okfH-l9wR-8wR379FFoo3GMn+HQA9t8oW5WXy7xN45JN-pFFhIKE6V
+VvhERzmrXrTHQPP2Iqj2YqFBBXlFBTlJBMKHJ7YpFRBHlVBANLGoh2PHE8oo-lAV
+VvhwR-9wR389FG2o3KMkQ-El+jYfG6S8TscpmIhR1HJIZpIBRMZA66RzmrXrTHQV
+VvhPP2Iqj2YqFBBXlFBTlJBMKHJ7YpFRBHlVBANLGoh2PHE8oo-lAwR-9wR389FV
+VvhG2o3KMkEk3130yGh6VogzWjODQ2lqVERbW3FqGARh+UFrj9RDQxBhhcFHNwGV
+VvhHM2opz32pj3IpFNBEaHI3ooz42oVZR5Go-hA8okQGz5EGj5FGGoIRB-IaA1+V
+VvhNgMC5xMc8Fzy5hHPq-38DM2YghTlBA5KwHHE5JwIHE5I32o-p-J+2VJ55N3YV
+VvhQRYJFlqFN55M7YMhXLpz3oQRQMFlplV53VkMFlMQ82oFkNHE5-dB+Q4Io-kOV
+VvhHE5-dA50d98YZ7JtHLWkIgQ9QiMV5mbu5wFr5-FWEfCl6fD-GWkoYgIsD381V
+VvhlWQwQaH57TH63THCsoniBAxAULwwULD54HlVYwIP925-9-918llXMwZwox-BV
+Vvh2x5nnnnnmbm+k2r60hdk5lwfzGfJ6-1n+E6-+k20+F2-2UThiokwHE9DHF4yV
+VvhBB6OFlQPx55KFWpIMhPBPoMhLWFlpYolboolfooVdB6PHF8ooFlACohLqc1+V
+VvhHAY8qb+T5mjx8hkhxBsxsxsxsU2-+E261PhAD2o0nooFjXHG4YQL4zFlpYMhV
+VvhJ49KnKx49JsYQRNBANxBAOxB6OHG4ooGhB2QH1h9Jxe+k2v80hdk5lwfzGfNV
+Vvh2-+xtBoW9P7-qWMRUb27fPhAD2o0nooFjXHG4YQL4zFlpYMhJ49KnKx49JsYV
+VvhQRNBANxBAOxB6OHG4ooGhB2QH1h9Jxe+k2j90hdk5lwdzGXJ7Gq2BBNGLKEpV
+VvhpmIkaRiokwHE9DHF4yBB6OFlQPx55KFWpIMhPBPoMhLWFlpYolboolfooVdBV
+Vvh6PHF8ooFlACohLqck0jA-Wgu2VEfzGempTDJ9JDJ9K5K62vEhR9WHGsooiBBV
+Vvh9XHGsooiBB9XHGKx-w+hnEMfCV6J8zoepGpIp1p1p1p0pVpV-JoALHsYoyBBV
+VvhDXHHsooyBBDXHHsoopnEUA+inUMfCV6I8zoeoVpHoooW6h+Y50MO7l-To9LGV
+VvhsYoiBB9XHGsooiBB9XHGsooZjET+8ww48ncG3Gbx897Gh1GJ7NEpcZA4HElRV
+VvhDWHHsooyBBDXHHsooyBBDXHHLB0+k29E1-Fq6VwTzFtxLIGHoYcx39DEH1hBV
+Vvh+vsYoHstHGDsHGFB82VB7C7ooYVB36xB6tHFCYo1dB2uHECogx-8DEGHjJo+V
+Vvhk3XF0yGh6WAczGTJFVqaERcIPO3Y0maOhQHFLE5HwFH-oV795HsVB85GwJG-V
+VvholJL5H3YQR6LFVoy6MFFoi6OElolh05GwQEFoz5ELG5FHHwR6x6h6x2xAQbEV
+Vvh5A-NoUl2E0AR9DceomrjDS9SDS9T5T643xQpDHCHo0kuDF8HoXQxAqHIBHpHV
+VvhExMnHKAnpnwYpnslHLXxR-HLAYpY7BMnHJF1pHIxEqHGFnoIUx-8Cno1Yx73V
+VvhDKTGk3fH12F+6logyWfO9RHQDQDQDQ9S5S24BxQpDHCHo0kuDF8HoXQxAqHIV
+VvhBHpHExMnHKAnpnwYpnslHLXxR-HLAYpY7BMnHJF1pHIxEqHGFnoIUx-8Cno1V
+VvhYx73DKTGk3rI12F+6logyWfL5SDQHP6WqGERUa5K7l-vTLBHonYx+gCXoGYxV
+Vvh6rDHBYp1IxIoDKAopXAxQz7BQyAIpszLEIpn7BN0HKAopIExIpDIBYoYQx36V
+VvhDEGXgx+tDGFHpboUk3XJ12F+6lodyWTHFVp4EREIPI3Y-vTLBHonYx+gCXoGV
+VvhYx6rDHBYp1IxIoDKAopXAxQz7BQyAIpszLEIpn7BN0HKAopIExIpDIBYoYQxV
+Vvh36DEGXgx+tDGFHpbog-PpUl2E0AR8jccomIhN1HIIZp2BRIZA5dxQpDHCHo0V
+VvhkuDF8HoXQxAqHIBHpHExMnHKAnpnwYpnslHLXxR-HLAYpY7BMnHJF1pHIxEqV
+VvhHGFnoIUx-8Cno1Yx73DKTG1+QRUAF2+X5mHv6+2ForMR6pB-o1Yl5E91kx2fV
+VvhDFGHoF6cHE2nQx+IBXoFEpHE3HIx+KB2kLB2gMAogMEocNEoYOEoUPEYYOEoV
+VvhUPEoQQB2MQF2IR+pF-o2Mn5FBzAVoHZB2uDFD1kh+FCHo-AqDF3boz2-2A+zV
+VvhqEjYfG6R9DQeo0rjDS9SDS9T5T65DEKZL2XWHF4SBB2NsooFbXHF4SBB2NsYV
+VvhoFfoo-kw5ECloWcRAs5K7Gq4pQ-+qUjYfG6R9DQepmrIr1r1r1r0rVrV-po3V
+VvhdJl6sYoFbXHF4SBB2NsooFbXHF4S7B2OxB+QD-o1gR6e5HC-pWIhVhL+Exg9V
+Vvht8oW5Gnr8hERsxlBgW9N7-q0MRMb26rEKZL2XWHF4SBB2NsooFbXHF4SBB2NV
+VvhsYoFfoo-kw5ECloWcRAs5K7Gq4pEk25Q0yGh6VoexmXE7GpYBBFGLIEppGIkV
+VvhXB-OJQGC7B2NsooFbXHF4SBB2NsooFbWHF4jHE51kR+v5G8VonURMZ9MPJ1+V
+VvhHRo9t8oW5Wjr8hQhtBoxoxoxohwRwESQe1PGBoomVR6OHF4oo-lP5FGWoIcRV
+Vvh7M5HJlpIMRNJ5KJ-q2ARZF5OTPLQxBoxrWHRDRsor2qQow+nrUc73VoO5zoSV
+VvhTEp3qC7BVBax74H2R8sYZ7GXscGYV8C2d6GIZ6GYR8FojB5oqCBBVRHB2A-xV
+Vvhrl2gKX2l6ToTo4MONVgp6mUp6mcd2GUd2GcfBmgt91MgC1o0Ix+c9F3WoFXWV
+VvhDF3HoFUxQxfopYqLorpuo8owjBCwjIbFbMPIPNxBNBfnpnTloXER6r5G7FoWV
+VvhQh2o9FBmoGIh2c9EBGo1Uw7XkcAFYqAFYt6mMc6mMf3acKPEk2uM0yGh6VsdV
+VvhxmXE7GpoBBJGLJEppWIkYQe1PGBoomVR6OHF4oo-lP5FGWoIcR7M5HJlpIMRV
+VvhNJ5KJ-q2ARZF5OTPLQxBoxrWHRDRsor2qQokk1nU00q+3lAUz-yWpDDI9IDIV
+Vvh9J5J62h181AGBXJ4BnIsB2UoC1HWG1DWG1F6ApxnAGBYAGBF2n2mEH6VN3AkV
+Vvhk1vV00q+3lEUz-zI9IHHDHDHDH9J5J23718HAGBnJ5BnMsBIUpC1LWG1HWG1V
+VvhJ6Al5oQn2nN12nIFAlEY2m6LFHH+Di669M+L2lzw5h2REx7B2W90EP7VYb22V
+VvhV181AGBXJ4BnIsB2UoC1HWG1DWG1F6ApxnAGBYAGBF2n2mEH6VN3Ax+uskUhV
+VvhU-QJ5DkPd44KEN34YKE4318XAGC1J6BnQsBYUqC1PWG1LWG1N6Al9oQn31N1V
+Vvh31IFAlIY2m6MFHLEDCE69M+L3-rw587Gd1G37MEpYZA3h18HAGBnJ5BnMsBIV
+VvhUpC1LWG1HWG1J6Al5oQn2nN12nIFAlEY2m6LFHHEDiI69M+L2m5w6BA-2H5FV
+VvhEQsVIQ6l+EE4p181AGBXJ4BnIsB2UoC1HWG1DWG1F6ApxnAGBYAGBF2n2mEHV
+Vvh6VN3Aw+ytUhmtW2R3DoHp0BRNY5GRlgmG-YoG-UpCFN3G-MrBmMsAKR6H2UxV
+Vvh2tDEx7DDGIcGC3YHBl3L3HEVAVIcJ0BKo0zb-pka3F2Rz-CKYp3mUIBYB4EnV
+VvhQnG-DWHCF+21gGCVEd3WItLHok22+FA-5noxC5f+AyU5LaoJ201w5t9Fwx2hV
+Vvh2x2h6R6UDZYo3XQIC-At2YYGCF756o3ZKiBB+x+v2HcHC-IZC3P+BSY5LaoJV
+Vvh2m1w5xAhBB6x6x6x6hEREEHpko4HQLC-Mt3IYJCFJ57Y3cLEsoonongICVMsV
+Vvh40IvKQ+puURSPFIF5zkSo-oXo2kW8WEN7VQb22-OB-Qr3HUICFB72nYHFmF-V
+VvhNZjXHFDFCl6u31UK7HZLk1Df-pth3FARz-mGIdEoRGJoBM7H-7L1ENBlQs3XV
+VvhYJGFIt3IQaEKVR1XHHDHClEu3XUM7HhNc0zg-CUO1UcUz-xGXnUcC0YN9FBGV
+Vvh6Y2mAIAVEX2n6IBi6qsXMo2XAH7-6o2mAI6WIo1EACo2u-cC1m1w5w92gvCnV
+Vvhgh5F-7CW6d2mUIBlEc2nQICy6vsXgo3nAM7-Qo40AN6Wct1EAys2u-cC1FzwV
+Vvh5d4nZ66WMY3GMH7l+uC06b2mMIBFEa2nIICS6tsXYo3HAK7-Io3WAL6WUr1EV
+VvhAiw2u-cC1lrw537GJ1Ep7HEpEZA2Au6WYH8-Er30UHBlEvsXjWCnELAlUY3nV
+VvhEM6lYW8XYA+zw+UhU-QI6DkTV24b2OalFN3oUK2Io-AxLnpGpTCK6rB02pBpV
+VvhEsInZHCIAuEi78ES78EYZ1GHItBHUr7nYYD4cB+zwEXyqVcK5DkPh44aEO34V
+VvhcKE4+qJl6X70IHAFQY2oUYwHCH6HCHTWCHPWCHQsB-6tAlAt7-AsB-At6lAuV
+Vvh6WEfBA+nwUUhU-QH6DkTchHnp0p1p0pFpG-AL1Ed7mMsB2UoCI77HW38XWd-V
+VvhGI77B1V2C1Mb8GEwKQ+rwkUhU-QI6DkTp0p2onononompFpF-HLEB0cb7nUpV
+VvhG1ItEoZ0sYd-sYd0GIB7BHV3C1Qb8WEx-O1+BjE69M+L2lzw5h2REx7B2W90V
+VvhEP7VYb22ZQB0Yb7XUoG1EtEYZC6IeC8Y37EYYoC2EsBWQd71lN1+AzI69M+LV
+Vvh3Fnw4uFVZY4FFd3Y-HLFB0gb81UqG1MtF2Z1sYd0sYd1GIF7BXV4C1Ub8mExV
+Vvh3P1EBDM69M+L3-rw587Gd1G37MEpYZA3lRB0cb7nUpG1ItEoZ0sYd-sYd0GIV
+VvhB7BHV3C1Qb8WExKUk2bs00q+3lIQzFTL5K5K5K936PB0ga8WQsBV2c7V6qBGV
+Vvh6pBVApBFEpB-IoBFEpB-IpAlMpAWIqAVMc6FMsBmca8mEv2ZkhMRMRMRQA--V
+VvhyEXyqVcI6DkTghLnpGpHpGpVpW-9CGEW81AH7nAIBXAI7nAHBn6IBXTWBnPWV
+VvhBnQrAlAqAlHmQn31J13GEG6VRIAkk29u0DvO4VIUz-zJ9JHIDIDIDI9K5K23V
+Vvh6t7G6cB-AbB-EqB-EbB-ArAlEqCC6rBy6rC1Qn31Mn3T7nAJBIAK7-6W43EoV
+Vvhk2Hv0DvO4VETz-vG5JDHHG6Wo0EQ7Vcb22Ut706cAlAbAlEqAlEbAlArAVEqV
+VvhBy6rBi6rBnQn2nMn3D7nAIBIAJ7-6W3pEn1EEDk6zhcO3Frw597Gh1GJ7NEpV
+VvhcZA3gt7G6cB-AbB-EqB-EbB-ArAlEqCC6rBy6rC1Qn31Mn3T7nAJBIAK7-6WV
+Vvh43Eok2fx07Mh4-Edz-zI9IHHDHDHDH9J5J22st706cAlAbAlEqAlEbAlArAVV
+VvhEqBy6rBiArBnMswbC1J772hFDIwxArFXR3C1Md7WgIDELE1+EDs6zhcO4mY-V
+Vvh5x-BRxfXDOsnqjDPApon2YDEAFQwGHguCndCCHhC81h7CYYvCXcvGGl5D16JV
+VvhDEApozDOsnqjDLjHk3bz00q+3lkd+VzJPL7Hp0Qx6d9FwtDwCHoDCGoHUh2tV
+Vvh4rURAr5IBWp1IhHnMhHnMxAqHFwsHEsXZ9CIkn3IkmB1o16YDFAWAx2pHHwxV
+Vvhnmq06xR-9LEVqG6RgxfEG9U6ZWoM30Pw587Gd1G37MEpYZA3Qt706cAlAbAlV
+VvhEqAlEbAlArAVEqBy6rBiArBnMswbC1J772hFA-Dn+GBoMrFHUq8GMf31pR1EV
+Vvh4xQ5L0MJ0lHs384FYN4GUc7nQrwt8Hbmce4WflLE5DQ5L0MJ1FHv335Fkg50V
+VvhkfCmgvwtCGce8WYe8Wcfo06W01gc3l+CyFx1IoIpwa7XAFAl3lQTML3j3lMLV
+Vvh3VQK3lIa7g+99EKtQl+A+zo85N8Vo03Q01gc3kwCx-xVQJ3lIL3FQJ3lLlQJV
+VvhwL3V2Y2GDWIpApAkm+Zv00q+3lE-z+nLi+Zw23g+9WY-yknRw+xdN4JiR4ZaV
+VvhOKJm63FBJ2bk3KBjN4ZiNrBXO4JhNG-INJUUR4JsRD+ANaxiR4NVMqJWSLFZV
+Vv4x+1e++1pV
+Vv+V
+Vvend
+Vvbytecount 11976
+Vvcrc32 f53d1d59
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.360pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.360pk_vve
new file mode 100644
index 0000000000..79e9c3ab74
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.360pk_vve
@@ -0,0 +1,309 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.360pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAHAm+8+++7YkSl6+-Dgr++HvBx+pMEUhU-YI3TgIV18HAFC1V
+VvhFLBXR4BnQqFnMrBi75BTFnN5B-35B4xXEWBIEWB02X70AW6lN3F+o13W-pkaV
+Vvh3l+Xym7YXrrnnXDCAwDH7KAGAZFHB56oQmC16rHX2sTWV-Bo9nQo7XIZBmAtV
+VvhKB+ZMkRQ7VQE3TgIZNB-Qa7HIoBIAqEYkwsYjXH2gFCW2t6mQp7HRa1+EaE6V
+Vvh9M+N3GDv6hFDo5pTDIsnpCAxEwEXcn2HYoK1MsFXUrBoQrBnTWFnPoQrFnEGV
+VvhFnEVx4B0ApF0Ao6GAZ6m6X3oJ31E7aI5L0ML1lLu36K1EJBWAr6YQWC0356IV
+VvhMmhDGyAwCocV8G6qB0IrJg+pNUHc4UwL9E6Wp3p06x6WHFAYoHAh6hTXDKsnV
+VvhojoB5YDKt1piExPXDKsnpXoX6x5o6hAW9JHIk1Zb-pka3lITzVGpAe6m2sBJV
+VvhQqG1QrC1N6BXUqsYUpsoUqFnUrC1N77JYYL26xLnpC6rBnR582Me7Hlwk1xcV
+Vvh00q+4FMXzG82oTTKwxLXDJsnpHpXBAAGAuJGZKC2QswsByAsBzC1UrBFArBGV
+Vvh2sB06rBG6rB0As7-At6mEeFEo0hd-CUO1kgWz04DBoUUOIMW7D6n6YAj6nUrV
+VvhsXTnUn2nEWAm6o6XEI6mEX3YEA+jOUHc4UwG9+6VoXzFHG68-B+H8lEt71XWV
+Vvh7HoSAx5XDFsnoSAx5WC1AsEmZ0CW6h-Ak2Vf-pka3lEXzG82nrpDDHsnoyAxV
+VvhAxErFXIX7HEIB1EIF1AJF1AK7H6R+l9FHHTEAXgoCXIeBHIHBHIj2pBG6pBFV
+VvhAq706s6lEdF+o0Fg--P+1EgXz07owrXnTXByArsnTXByArwsAlEn6i6n70AJV
+Vvh6WN3o2th1FKO8GIJz-EoNLKG6X70EY7mAl7W6a7WBLJnHmF6G1EYCHYtG2UuV
+VvhsXYtCTCHYuCHUp3HYsBGAtCHEYCHUp71YsB0ItCGEJCHcX7WcfFEo1Zi0DvOV
+Vvh5-UJz-EoN76WAXBWAl7GMXJXEYFnHmEsCSAsCTC1crBFIrBGAsB0ErBGErB0V
+VvhIs7-It6mMeFEo0dj00q+4F6JylGJgn8GMb7nIrEnV0G26tHW37XWZ-G276B1V
+VvhR2BnMaC0EfKEk1Zk00q+4FMTzlFYJ66W6X7WBIBGB470F4Dn71QyC1RC7nR6V
+VvhBnUrCIMtFHd2CX2WCn7B1npSAxLnozf+k1Fl-pka3l6TylG3EL6m6ZBJEqFHV
+VvhQoC1B6AnUnsYUmsoUnFnIrBHN47JMYKI6x9noSAx5niqkw+aQUOz6lIG3TkIV
+VvhB2J06W6m6XJ12XF4F2N1MV71oSAx5XDFsnoHomo+o0Nn-cfB3+wJzFGIYY3mV
+VvhIa3HxGF37FQwS6W8L2klC5y02t2mUJ7GRa1+75E3IAMF1Fzw5d8iAtsnYorKV
+VvhCSAtsnbncp31Ij6p6nEZ70IX7oLECrI6ZWoP3lLw32GWMH81IIBnEYBXEZBXV
+VvhHmErCXMusXQtwrCXQo3HQo71Mo7GQo7HMo7HIF6mQY2WANJ2EB+gRURQ7VQHV
+Vvh3TkIF5B-AZElEoIGEpNHNTErBXQasXUZsXUawr7nQMBVYp8WEhG+o1lr0e4BV
+Vvh6FoJz-F2cZB-AcB2AIBnFF71MqNHMrLoBnQqBXUasXQs7S6rC0PnQr7nN541V
+VvhN48GJJ8mAW70pJG+k1Vs-qkJ3lEJzFFYIq6m6X6mJ1AWN0EVQnEGQo6WQxDXV
+VvhDHwxEr4HQV71QVEnQVEnMWAoMI2m6X7YFJ1+E5Y5lBAM3-zw32GWAH816IBnV
+Vvh2YBX2ZBX5mErBnMrsXQqsnQrBXUbC1MsBIYYGp2xHnonUbBoIsFGYp8WIg30V
+VvhoIo+k1-u-cfB3-6JzFG1IaN0Jn7WFK80Mb9G9G9G9G9G9G9G9G8-Md7GUZ81V
+VvhFYB18374IaBks0IE-CUO1kgJz-ES-a4CAQktXX5+C+s-k1UC+Q+sXVb4QAsEV
+VvhlVW-sB+a2EJElV2E5k6Id92mYIBmEy7WIyD1nXDCAwsnnWBXEaEnN180AeGUV
+Vvhk46N07Mh4loh+W9KTLBGpGUhAsDWoHYzo1czo1Yx2t9FCHoHUvRni4DIBHpDV
+VvhBWpTBXp1NB6rLFC3o1ZB1nd9wvGn6LH12qH12pH16aDEAmEx2oPHDR9RsXpnV
+Vvh6xR0DLEWqG6hgxj+FFc9QiMY5VLw3BIXLKAGEh84913L8XB681It7nMs7nMrV
+VvhBYT4G1oXYx36DFx7DFGHgFGIcVG3cWC4UXBl3L7WEVAWEdJ0F51EEFg9QiMYV
+Vvh5FLv37K3Yn7GEb7W6q7GQVBmErK0AsGG76G0AtBnB7lDGHnWGHp6Gl36GW6rV
+VvhKW6r6WUY7WAb7WAp70ZNFw-65+UhU-YK5zoNq-zL5L5L5FIVkZ90Mf7nYb2HV
+VvhQb2XPnMHBHMIBTBFIoBFIpwo3XIn3XMm3mUV3nUV3XcaCnEh+FLF5LwRQRQRV
+VvhUA-W0kbEAlwb9E6WpbNRMpAmAxApEWBB6qEHBB6r6XEh9WCnq1kxXXCnq2gxV
+VvhHSnRpC6vDMD1qCAvDMD1qCAvDMD1qCAvDMD1qC6vDMD0qHgxAnAXMhB16YIxV
+VvhB06oExIX3GExR5PLk3AA0DvO5-sh+W9KXLBXp1Ux6sHG8IoHYx6xrYDRwxfxV
+VvhPGCHoIUx9WCHojC1ojCHojC1onUo4XYo9WYsB0ct6mcu6lgvHDDRsXq1AhV0V
+VvhDMEWqWARlBj+Kko7NsMR60o06hO0DIBKp0NxAqTGC02x9ncx9ngx9WCXoXgxV
+Vvh6uDBSxXHCXoiAuDHCHoy6uDHwtDHCXEPCXEesXYo8XgX8ngX51lB+xxBzWDOV
+VvhAmqY6xd09Q6WrYrEk66C1Vh890sh+W9KZdpnMnFXp1N0CHoXR-CIoXUW8YoHV
+VvhkuDGwwDTCnryAwDTCnqz+KoXkuDGD1YxAvCXojD1cx9nktDHCncx6wCXojD1V
+VvhYxAwCHEPCnco9WYwCHEeD1cX8ngv6lgwD2nnkxwvDTwwDNAn6qDNEm749OEWV
+VvhB39Q6lIZ9SFqrg0F1ktDc0ok9E6WpbWGDIBHEqPIBIAqTHBY6rTHBmAs6HomV
+VvhkvDHwwCnongwDHCngxDWD1gxAwCXnk3xAwCnozD1cxEvCnonkvDHsXkuDICnV
+VvhgxDnkuDID1co51kuB0gvCXEfwwCXEfD1gX91kv6lo1gx-B1nkk2HkU2Xgk2HV
+VvhkxgnAnMhh16oIhl0AoExoX7GEU22Vhz+FI29t8oZ5WDx6hYhvnrIrJqzPOwVV
+VvhHN6Yq17BUXHLwYHKwZHJwaHIwbHH82oXVB9GoRDF8Yo0hQ92jmo2fmoIYh75V
+VvhLEJDdx1+G269EloX609x6NpR1MooZB77LEGooC79KolAx9L2dQGoo2dB37HGV
+VvhFpohDHGYoIdR-9H2lAsYlOHEGzH3h9KolPGpl8L3ZNq8pw1+HIA9QiMY5mHsV
+Vvh6hBb9Eh0lZAXhN6HdAKIo2ZB36HGFop1NREaLJ7YpWJRMZLJ7S7RnYLRHSxBV
+VvhMaxBIbHI83omZB6eHF92kh389HJXpPqLpA-5F+kIRWMW6joVbKoRXJGJoodRV
+Vvh3AHFsYo2lB3ThB79HFLXdB7NHHGi7B7NxB7OHGGooJdB79xB3AHEH2o2o2lBV
+Vvh38LFK4jMnKoUk2h30hdk6W+WzG4ReBjEGZo2kzlB+zlB+gHF9C757GjoQhN4V
+VvhDKoBLEpYMxN59KFXpIQhPoQb8YoWdBAexB6fHFCYoWhB2vHECpdbr4r5k1R4V
+Vvh0b516G+WzG4ReBjEGZo2kzlB+zlB+gxB2gx57GjWFmpYJBLx1Kx4DJsoQhLXV
+VvhHSsYrZqh5IohEA-IFklUgWQU7DUWorQh4o9EJX6vKW2uH4ZB37HGG2ooRBIqV
+VvhLJ7opWNRMZLL7JpWLWLRsprZnE7Ao1xBJ4xBF5LHG2ooVB78HFGYo3hO6HlaV
+VvhAWogERFxEA+rG+jYfGIZ6joVbE9EXEDEzEGopCB9HIsohBHWGopRPIphLWGoV
+VvhpCB9HIsohBHWGop3hB1E9EXEDEX+6YY48ncH3W9y6MzFzEHIsopCBBHXHIsoV
+VvhpCBBHXHIsYp3nx4+k0p804NX4VYXz04zoTp2pyBBTXHLsopyBBTXHLxABYh4V
+VvhGjJIh3H0Qx2ZDH31pJp+k3B912pO7WMWzG4R-PXFKx-APHH1pIo0pYkhR8DMV
+VvhGHq2YxZ69PFmr2Mhl49RFGrYExt1LQEbr22lHQQoqpJBdKHOsYVBV8DMsYdBV
+VvhPWH2p3lQo3iB3AX+9Yk80FMT4W9x6NoPohDoqCBBXXHMsoqCBBVBbokcGmXoV
+Vvhkcx982gsGXZ7G3RYq2qIk5pB1ZWu9GoWzG4Np8WhGjo3oqp02x7hLm2x2VHJV
+Vvh6Ho07BEWDE6IpT6XkWHJ6XgXHI6ngWHJ6ncXHJwXCGFBEYC0FBIZBmFBLmIqV
+Vvh7Ip0Mp7IpT7XEaHJ7XAbHI7nAaHJwbAWRBIbAGVBEcAGRBIcK2pGV7HHJoVRV
+Vvh0oBR0AEooM1+F2s9t8oZ7G9x6NWPWbnEKop3gxFf9JsW389I6YYhLW6oUhEZV
+VvhBmpS6ZFWpCAbF0pCAdEWpC6fPJ93pC6h-BBR+x0u9EmWoA-EHkl2E0MR7DUWV
+VvhobpnIxAsDFCXhACIo1VB35DGFYoYJBF1LIEop3wZp3sVLJfXpJ3RFGHJIjHIV
+VvhIop2FBBIHHFIoYRB-6H2cwCocx+sHHB2pqokk1NE0hdk6VwWzG4RLBXGG3oIV
+VvhZB1XGosfGph9GohPGol8HEGIo2VR5GozHRsorSBBrWHRLNoBHFp+k4RF12F+V
+Vvh7Vohy09GTLBHonUx2uCoh7HECDHFFYoYJBBHLHIop3wZp3sVLJfXpJ5opJ7BV
+VvhJ1HIIop2FBBIHHFIMqFnEcG26K2ncm3V6vEFNR+l3YonF5542b5K7WpHMRMpV
+Vvh9KB1pjbLXNPPGg-6IUifmWET6zoVbHoRPIFpoYVB5XGYnWGZl7L2dB-7HFG2V
+VvhoYNBDBN49KFmpIQxB6DHsYVB5XG3o2Vh1oVZ7JZI6h-JEVoKEmqpEA-0IkXyV
+VvhqVkO7DkWoJIgYWkpOmVOCIYuCWgtwvCDD0YxfoqKq6pPovp8pbqJqSB5sWo1V
+VvhUh+cD1Uw8IctGHYlBIcXb-Nh+A+nJ+hmtWES6jUVHxp2R5EnZ6AnV7AmZ7DmV
+Vvh8YYX8IcWsWd89EsorCBBnXHQsorC7BlRPInJkB+qJEjYfGIS6zMV9IgE21lYV
+Vvhl8H1fXHGfXHGfXHGfXHGfXHGfoofxA9TCm+ECW+GBn+IBH+KU-ZE3gV4JUjYV
+VvhfGIU6zMVmReOJBB6xBAexB6fHF9DHE9EH0oJgh9ochB79Ix69Jx59KFWpoIxV
+VvhR39Mx29NEmqo6hh-9QTQPRxRvorzDO16NJQDyqom9GDq6QL3qZlOFQL2VB-AV
+VvhCTH3kex9Omh86IcgGH3892YWGGo2UmG1o2UXG0oIQYFnoIQYFmojFWJ49Hx3V
+Vvh7YIhHoEbF0pTEmV19Kx08I6hTo2eEGqDOqqTL3qjHEHPwx2xU9-KK+jYfGIZV
+Vvh6jsVbw-PkJdQJOD6GWmIYgdLD9FXn2MgpI9DEmo26h4B7hDppIp3oroW3B2WV
+VvhHE6pnWJAopHABZmmVAcdH78Zlmk2lXk2lHkJkZkJf+T+Osk4m2JN0yGh7G+WV
+VvhxW58qNh3oYVR6fHF92o1lQ9EKmoYchB7DHK0pIQhN49LJ1q2AxZ19OIGrDPRV
+VvhLSsYrnry7BwxzWHSLOoBLFp+k2NO0R+n5loWz04Dq6OYZ9GIl7D2cgGmh98pV
+VvhgfH0dB+dHPHPLPHPHPHPxBhBh79EGWl992cgGmhA8YkeHE8YktH1ZAG2drzMV
+VvhUA+f++c73VwS6joVbMXNo2VR-8DwGnz2ggsokfsorCBBnXHQsorC7BlRXFohV
+Vvh9G1+JE2B3Ncd6GDx6hgU2IrzLSPRTR6Jqm7RfmFBYZHM7ZpXNRMcHJ8Ip1ZBV
+VvhEeLG8poHlB2h-B+h3A9GH0oZchBN9JG1pIUhN59LJHppIhZ29OEnqYA-6EB+V
+Vvhk3c012F+7VoYy09GTLBHonUx2uCoh7HECDHFFYoYJBBHLHIop3wZp3wJEa73V
+Vvh3Id8sYd33I7WFFFFQIIYpJ7BJ1HIIop2FBBIHHFIoYQx36HECXkvGXo1VBAoV
+VvhHLPHk1g10lBH6VgXzG9LwxfoqTLMxhTm3BPm7BLmBBHmFBDmJB9mNB5mRB1mV
+VvhVA8IgtGmd8CYcfGT92UwFol2yZn+8+E8cMoV6G9x6Mshm0pnsb9M6ADmo0oxV
+VvhHGzIoz9E6ADmq0TW9M8Blzr6g1+30yGh7GIWzG4R0B5w39H3sohALXGolSB9V
+VvhH3sohALXGolSB9H3sYhAJPH-kGkMkHkMg2o40r9a702Wz04DnNH0OIl2ZQEuV
+VvhH2DuL19+H19+L09-xA6g3R3B5poTHG9G9G9G9G9090919-919-929+92CmlGV
+VvhggIu93CWlIYgFcn6nM1+CkQAF2+a5GDq6aKpS5VNOXh96pEoIm7nAr6GUmC0V
+Vvh2d6HYg6HqW2hhRhBhRjXHPsoqyBBjXHPsYqppTox+A-50+hmtWEO6jUVbxDHV
+VvhxBXWHLXGAI6vAoB5F2F3FIIoFIN0FYND3KFdsaFeN3IJJ4IYJ4EoJ3FHJ2FnV
+VvhB1GY3-HGXLHMsYq3ojotk2Q712F+7VoWxW4DoxPoqy7B-6Fp74FZJ3FYPoJ3V
+VvhFiB3FIQpFIR3FIR3FHV3F2YoFHcoF1h1EoknEYoG70DIjLPPHPsYqppTox1+V
+VvhLEc9QiMY60Dw6hJxZ3DJGHoYdB-AD2o2dB37HGLrLGLWNRBTJRBKLHFpoZRRV
+Vvh77HFKIoIdB-9HEDED2o1kx2vDH8mp0cf7GcZ70Id7GIZ8FMZ7GUa71MM3WKcV
+VvhZNWZa7PECX+69M+N2m9u69L1Ae7WUqBXQzIsB2UoCHwoYnCIsWGIslGI5WGIV
+Vvh77AzCIAtB1V2wsBHQqBXUa8HAwKkk0El00q+4F+Vym1G5F9ED1l9Jp2rAXoCV
+Vvh6wsnnXDCAwsnnWD2Tx2Uk2Ym00q+4FIWz013oGEg7WcbC0Us82MW3YMX3IsZV
+Vvh7-JC70EJFGAJFW6KC1MxExExExExAxExEhIhIg70ko90EgArN26vEoZGNq82V
+VvhQA-1AkUhU-YI6jgUlR+Y8mMd80Qd7Wca6FUi7GAKBGAK7W6KBnQhEhEvTEPIV
+VvhDJDJsnooIdF2V2G1IsFFcq82McC-Qt71o3n+F1E69M+N30jy6BIjp1shAxEhV
+VvhHnp0pDDHwxEhExEhExEhExEhEY8nEu71cZCHIt7XUaC0QrN1KWB1Na4Mo3oXV
+VvhoyAxDWDI8A+sBEUhU-YJ6jgUUe41MtieefXEwhLX9J6okV70cqCGQs8HpHpCV
+VvhF2CIHoZ2CIIeBWZ48HQrCHF9XFLEo22q00q+4FEWyW1Jq9F0YpC1J5BYMs7jV
+VvhA-6k2jE-6nGI2Y7pMpK0JMB2YoG2BMEy77Ey6tF1YpC2IsBXQrBXYoCspQ1+V
+VvhDHQ69M+N3m9u636oQZ6KMadGKo7ZEXBIMWBXVZD0MgBHka91IgDLDKwxPnpYV
+VvhpXpjHJsYpTHJLJsYpJpTHL9Fk26s00q+4FIWym13oNgoCXMsBnTnYy7HYqFnV
+VvhR583IeImiB3x7w6acYO0NL82MeBHcp8nHngoCmIuBHcaCHQcC2F8bFL+o22tV
+Vvh00q+4FEWym13q9B1YqBnQqC1J6BHYy72Yy6oZ1G3B6F1Z2C3IcJHNL7037EoV
+Vvh+Fx+2X+Gwq81N4BoMcBWYoCspR1+FGEAHXIa50Dv6hRRUo5K7Wp0URAd9FCGV
+Vvho1cjo1VACHo1Yh5nqy6xaxGhTWDPsnqy6xRx+ZX0IYGmEY6IUZ6n7IBW6aa2V
+VvhVd1+PmMAF2+a60Lu6wHRAmgt7Vd67mZ5Bmcr80cbBncawrGGQs8GQxMcDJ8HV
+VvhoncmGJYl6lQW8JEZ70V370IcBWAa81IX7nNH70UZEYIV7GJ9MmMx-H7IoHEZV
+VvhxBUYxBUawxQbDK82p0cxEQDF9FD0p1QxWBDEC1w69M+N1mHq6sGGEa7VIb6mV
+VvhUX4G6d6VcV8W2dKW2sAIMmFHApCYd8GYcw9GEbwI8-AeA3QvxOGnkB+qDUUhV
+VvhU-YE7DkMkwxPH1-RD-AO6mXmEh9HkvGoh9FGEqEXN1816e6WYWwe6j8GAc70V
+VvhUK3lUI8YYA-k5EsTpWke6joVpTqxUWG3pn78DL6YgxMXGnpWB99K72ghMXH0V
+VvhpGFA9IB2khEZFmAhDmJ59M7YQhUaFXpmN4DLzNpWV4DK7oQhPmV57GgdFmEfV
+VvhC2QZ8mZB+f8Yo0geH1ceHE8mdACWh9CJd7JeHNOYq51+RVsDkccl8GHr6h7kV
+Vvh2nLLgspeCJZMGZgrGokqH2kqH2kaHEH0JB-B+YLEG0AYHFG0AXLFG0AXLEG0V
+VvhVR3683oIN6LFoLLFoMsZoIQsLEG0booIUZ6YoIoGBB-B6XxB-B2YL2o1J9HFV
+Vvh7YhB+rCZksGJZdFxWYLMoKrkk5oT12F+7W+byWA-6RFq5HBHAR6t6VoGkx+xV
+Vvh+wDFCnoF2uDE2XYx2GC1oFB4HE32Mx+JFIkKFIgLF2kLF2gMF2cNEocNFDGFV
+Vvhd2G-h2C-h3Bll3BVo1Mp5EFXIR+rB-o2Qn5FC16R2u6FoHgx2x+h2h2vDF2HV
+VvhYx2I7XoVRhHl+G0E6G22u-cD10Hv6tC2sbLrFpTXG1XoXWCC6twdCT9OCDJoV
+VvhUt1E6Hk2u-cD1GHy47CTK2YkHD8jCj8i6tsXbWGC76xMx6xMGWf+GWAB3NcdV
+Vvh6Gru6hUN5Mwc9LsWUhTmUhTmUhTW80pz80pz80fk2Q80py6c9LsWUhQc9D+FV
+VvhfmUhTmUhTmUhTW80pz80pz80pz80q-YRUA087EoJaWYW8DYYdBId6lonUY9FV
+VvhC0IwC1IV4IYa6d2dBWge7mceBmceBmYfBmUfBmUgBmQh+r7WoHMa9GBVQhAZV
+Vvh7Wp0Ea9K2mMhUr7nq0MX5K7WEhIZ7Gp0Ma5H7WQR6aBloGQq9E7nQgwcBmgdV
+VvhBmcdBmceBmYfBlYgBWUh2a4GoGIc9G70UhEW8FpXgB+L7kHc4Uw61zMWEZEzV
+VvhMn2S7VPlMK3VMK3kk1wc-cfB3-6mymHI5H5G9G9G9G9G9H5H9G9GDG9G9GDGV
+Vvh9Gwx6h6x6h9noWoi6x6h9XDGuGonoz9I5I9I5I9I5J5+k1wd-cfB3-6mzmH-V
+VvhpFp0p-p0p-pD9HDdomsx6x6h9WDG9Gwx6h6x6h9noWoXoWoWoXoWoWolomoWV
+VvhoWoWoWoVolp+k0se00q+4FEJy0H0pC6hIP7VInB0EpEW6tAF6h-RAhBgAF6dV
+VvhAlApB0EnBGIfwRLW8u+X8kl2E0MQ6DYPhVk0jiAfvX8ysmjWghqm8ysmjiAfV
+VvhvX8y9+4qo-Mg-CUO1kUDzUF1HWIn2TQTMK3j3VMJ7g+A9UHc4Uw3-Tg22loFV
+VvhAg+x9kUhU-YOATsYr-qmzO9Owhfmqj9O9Owhfmqj9Owhfmqj9Owhfmqj9O9OV
+Vvhwhfmqj9Owhfmqj9Owhfmqj9P5Q-k2Xc2u-cD0FLv33BTJ2IxspxIFHPE4Xg2V
+Vvhu-cD1-zy36CDJoUkX1XXGz4j4j4VcO4VgA+CDEl2E0MS1DcFDxsCDxskk4F+V
+Vvh12F+7VoXy09GTLBHomch2R+f9G8Gp-UhIa7pQa7WEL70Ip7WAZBmIX71V16WV
+VvhIdEm6YCHEi6GEuB2soCXEVwYCHEW71V22mIbImAZBG2Y30MY6WAJ82J5whwhV
+VvhwRIs5FGmVRCR+A+dKkHc4UwGATsYnqkh9X9GsmoiAh9X9GsmoiAh9X9GsmoiV
+VvhAh9X9GsmojP+k0ZR-CUO1l6l+GHDPH9XoWoiAh9X9GsmoiAh9X9GsmoiAh9XV
+Vvh9GsmoiAfxg1E3q+2u-cD0+zr6b3VMK3VPlPlML2HDq7IBC+E2UUhU-Y40j6WV
+VvhMwQQCC45111E2lA69M+N0Efk6b7XJ2FHIpBHIq7kq-+I00q+4Eg4wVsMFH6XV
+VvhAqN67h+K3EUhU-YA0T6W2N9t2FUV4-6a30AoRYP60FM69M+N1k5p5B9U2lQBV
+VvhHDUd0Ebd6lsMa5Uw5UwBX5U+o-2M-pka3kk7zDxjCIcuwsC1821E1W+23g+BV
+Vvh1+Lw2dBZBnNWcC+HLUUhU-Y90DAW+E-U5Uv1XC4s5UD+13w2u-cD-ELo6FARV
+Vvh2W9E45o69M+N1Efn6X7WwXIm7W9nIm7W6pAj7WDU2Ls69M+N1ULo6+M2T0AlV
+Vvh2DW-UB+ETkUhU-YA-TAV6oAICT7FB15+Ig+9t8oZ5X1x9xQhtBvnrzDT9TDTV
+VvhwUO0rjDRHRLPxhfm3BYWHMAYq0BBTmFBPmJBLmNBHmRBAcHGC2oh9Fox2eHEV
+Vvh8pkgGz9EGj9FGGoYRR-Iybo+k3L-0yGh7FskzGzT9SDRHQHRDRDRDRDRDS64V
+VvhchvnrIrJqzPOwVHN6Yq17BUXHLwYHKwZHJwaHIwbHH82oXVB9GoRDF8Yo0hQV
+Vvh92jmo2fmoIYh75LEJDdx+A-LkUjYfGIS9zoir-rmrYqn2hcn9MB0pnMhMb66V
+Vvh6hvnrIrJqzPOwVHN6Yq17BUXHLwYHKwZHJwaHIwbHH82oXVB9GoRDF8Yo0hQV
+Vvh92jmo2fmoIYh75LEJDdx+A-IkkjYfGIT9DofqGMRRI5L6WARQILL3W089TwxV
+VvhtBtRnqqz6IqW7BYmHN6oqD72pz7Ipj7YpT7op0VBAsHHoh9HoWdB2fLE92nmV
+Vvho2jmoIch76LEJTdx+Q-El+jYfGIS9TogpnExN1HxJGLKB10U9SwxpBpRjqqjV
+Vvh6IqG7BUmHM6opz72pj7IpT7YpD7oomVB6sHGoh5HoGdB+fL0l9wh-8wh379GV
+VvhFpo3HuTEk3P30yGh7FslzH1OHQ6lqWEhXW7Gq0EhYX9PE8EhvnrIrJqzPOwVV
+VvhHN6Yq17BUXHLwYHKwZHJwaHIwbHH82oXVB9GoRDF8Yo0hQ92jmo2fmoIYh75V
+VvhLEJDdx1+QAMC5xMg8W9x6RLxjM6YVRQmGXpm79DK6ogxMXGmpWF99K6okhIYV
+VvhH0p1FA9I7IQX9HwZFmq0N59M7YMxQaFXpzqRMcFXpWR59KwcFmIf8IQY8nV5V
+Vvh7GgdHE8mdB+f8Yku8Yo0geH1cfGnZOGJOYqKdBVkk3b50r9a7-wgy09HNmo9V
+VvhEgNH6vKG2uH3ZB-7HFG2oYRBEqLI7ZpGNBMZLK7JpGLWLQt3rIrjHK7jHJ7oV
+Vvhp0VRAdHG8YoGlA9FGWopMxKxZxkxx+21+EwxsxsxWBWkKwU8qb+W611x9wQhV
+Vvh3B5nojDG9GDGwURQiAn-GZkIk1z+H-Dw-A2g-A6g1WFmIfx595FXlw54kQR4V
+VvhD5FmloMwN595x57mdAAeH28jH18okXdAAfH0CokHhONwpgpkk3n70hdk6W+kV
+VvhzGzS6-+xxBtBwxwxwxwxwk2004qcqx-8LEH1z2o1z2o0lB2gsYQZ8zFmpYMxV
+VvhPEpR1KFXpYQhN4DJFmpjFmQeHG8YomfooWhB2uHG8ooHhB+vKaTQPQT+Lgc8V
+Vvhqb+W60zx9hgE2G+EHRAGr1Ahco9NBWq0QUcBeBjEGZo2kzlB+zlB+gHF9C75V
+Vvh7GjoQhN4DKoBLEpYMxN59KFXpIQhPoQb8YoWdBAexB6fHFCYoWhB2vHECpdbV
+Vvhr4r5k3T90hdk6W+hzGnKB1q2BBTp7RUoAA1OXPo2dR-ADwHEDwHE92oGnWFmV
+VvhIfx59KFXph1JoBN4DKFmpYMxJ59Kx57mdB6eHH8jHG8ooHdB6fHFCoo1hONxV
+Vvhlhlkk0vA-Wgu2lMkzWz0pYpjDLwxQhQxTm-MzFzEHIsopCBBHXHIsopCBBHXV
+VvhHIsYp3nx4A+mnEMfCVAKADsjpmpXpIp2pHpHpHpHpHpW-OzFzEHIsopCBBHXV
+VvhHIsopCBBHXHIsYp3nx4+k1DC-Wgu2lMjzWvI5L9KHHAGoXAh+o91Mf7m-ezFV
+VvhzEHIsopCBBHXHIsopCBBHXHIsYp3nx4+k0jD-Wgu2lMhzWn1EvEoyZ7PB10+V
+VvhzFzEHIsopCBBHXHIsopCBBHXHIsYp3nx4A-7o+kIRWMW6joVbKoRXJGJoodRV
+Vvh3AHFsYo2lB3ThB79HFLXdB7JosFRFpfooZbooZdB79HFKYoYjooIlB-AHEHEV
+VvhH2oIdR3MOxXBPG1+Ix29t8oZ7Gnx8xYa5RJ-rG6X5R33rFMUk6asdwo3hBFPV
+VvhDIOmpS6VGWp0779JsWB69I7HQhLW7IMhHX7oEhHX8I6hHW8qpGlRHW9EHHLEV
+VvhDEiWoAch+A-QoUl2E0MRATUjomrIrTDSwxshsxvm-VTLBHonUx2uCoktHEC2V
+VvhoIQx74HGFIp2BRF1HILmLILW3RKiDJIJp37BJGxBFHHIF2opFBB3HGFoo2VAV
+VvhGXkvGXo1VBAoHLPHk3zH12F+7Voly0zP9RDQHPHQDQDQDQDQDR64BxQpDHC1V
+VvhoHcvH1ZB+sHFFnoYNB73HIEpp2BBFT7RFS6JpOsxJFLIIYpJ9op3BBF2HHJ2V
+VvhooJB75HEG2l8D1h8DEC2onFBRhD+MREAF2+a5H1s9hQRshpBcl9NAmpnEhMqV
+Vvh9J7m-vTLBHonUx2uCoktHEC2oIQx74HGFIp2BRF1HILmLILW3RKiDJIJp37BV
+VvhJGxBFHHIF2opFBB3HGFoo2VAGXkvGXo1VBAoHLPHk3vJ12F+7Vohy0jI7VpJV
+VvhERIW6lpFFRIK65txQpDHC1oHcvH1ZB+sHFFnoYNB73HIEpp2BBFT7RFS6JpOV
+VvhsxJFLIIYpJ9op3BBF2HHJ2ooJB75HEG2l8D1h8DEC2onFBRhAA-PpUl2E0MRV
+Vvh9jUgoXExJ1HIxGLJB10MTLBHonUx2uCoktHEC2oIQx74HGFIp2BRF1HILmLIV
+VvhLW3RKiDJIJp37BJGxBFHHIF2opFBB3HGFoo2VAGXkvGXo1VBAoHLPH1+TRUAV
+VvhF2+a60Tu6k2Vp5MRApAloXYW5F91o1o1kx2vDF2Hcx+GCHoF6sDF2oNB+IFXV
+Vvho-J3H-N3GlR2H-R2GlV2GVZ1GVZ2x74YF64oEs4oIr52Iq5EBXIR-4BFo1QoV
+Vvh5EFnAR2sAVoHcV5FCnoHo0oGoHgx2FCHoFEaDG3qpD2-6A-2qEjYfGISATMjV
+Vvho0rYrjDTwxwhwxzm-to2gR2wNAGYkusoo0fXHE8iBB+esoo0fXHE8jHE8zH0V
+VvhoDCmoHchArDJBHpsqZpkk2TO0yGh7FslxWzM9SDRHQHRDRDRDRDRDS65jEGlV
+VvhoHlYl8H1fXHE8iBB+esoo0fXHE8iBB+exB+fxA9Ewv9FCWonQxIpDLXOLL1+V
+VvhGRg9t8oZ5X1q9hIRwhtBgl9OAmq1EhQq9K7m0Ho2gR2wNAGYkusoo0fXHE8iV
+VvhBB+esoo0fXHE8jHE8zH0oDCmoHchArDJBHpsqZpkk29Q0yGh7FsixWnEB1pYV
+VvhBBLp7RMoA95EGloHlYl8H1fXHE8iBB+esoo0fXHE8iBB+exB+fxA9Ewv9FCWV
+VvhonQxIpDLXOLLk3PR0yGh7G+kxWzM6-+xxBtBwxwxwxwxwk2001mhaPFR76LGV
+Vvh8ooGlB+wL0o3gh789HGHopUhJ59KFWppExV1DNEmqZ2hnqrJri7BwxzWHTDTV
+VvhsYrZqh1JoRHEBxs80FMT4m9x6NrE2+3DE-Xo+Nk-5RFZl5HDFpsuG3sdG3d5V
+VvhKYRPFol3LRr+2S7+4C7+43+IrE2Bk5TT2GlOBHAYz09FJGo3IgYWmG91JfBKV
+VvhgcKWVOCIYtGHctCXcfCGgtwvC1gsww81kdDNDOxBVBZhNhWBGBKx4xCx4xGhV
+Vvh8hNxJxZRRRbXHMFy6h+r9EC0o0Uh+cD1QwC1kcD0Z8C2ctGHZ7CH2pGH2pGWV
+VvhCP6tkKP-Nh1+INU9t8oZ60rq9B+oDMEopzIZq1EkjQfNaoLGG3oWhB2gHED3V
+Vvhkh-P9GGWooYxBM9JFmpYMhRIDMEnqIAhdF9QxhpRvWHTDTsYrnry7BtRfEpRV
+Vvh5I1+ES+69M+N30Dv6d9IHIwxLnpGpHpT63318HAFC1FLBXR4BnQqFnMrBi75V
+VvhBTFnN5B-35B4xXEWBIEWB02X70AW6lN3FA-3sEUhU-YI6zgWp0p1oooYononV
+Vvhonononp0-HEmYn2HUoJnMrFXQrBYQqBnPWFnLoQqFnEFFnFjMo6XJ26XEV6mV
+VvhEX6WAKFIEA-3sUUhU-YI6jgVoFpGp2oH2h+n8nEeBWYb64318HAFC1FLBXR4V
+VvhBnQqFnMrBi75BTFnN5B-35B4xXEWBIEWB02X70AW6lN3FB--skUhU-YI5zgSV
+Vvhga4JEN6WAN33YK65B18HAFC1FLBXR4BnQqFnMrBi75BTFnN5B-35B4xXEWBIV
+VvhEWB02X70AW6lN3F+o1vY00q+4FEUylyHEtEoXp7NB102EmYn2HUoJnMrFXQrV
+VvhBYQqBnPWFnLoQqFnEFFnFjMo6XJ26XEV6mEX6WAKFIH+FCI69M+N30Hv6wHGV
+Vvh6lo0EfsWIf70kX9FE5Z18HAFC1FLBXR4BnQqFnMrBi75BTFnN5B-35B4xXEWV
+VvhBIEWB02X70AW6lN3FA-3tUhmtWES3TkIpGBRMl70ocMgAJQeAoUcBHYbBXUbV
+VvhBXQqFwN6DGCHoIUx5oYx37Cl37GW36KW6sO0Ar2JQa702m70ZI72QA+ltkRQV
+Vvh7VQG5joIhPB-Ya7nIqBIIqF2oHoS7B1XHFGlAu6nYZ7nQZCKnnoYonozDFDFV
+VvhC6fEACU5LaoL1mDu6b92nnrnohDT62ZMB-Iq6nQWFm6s6IQVFX8ox9snkvGWV
+Vvh2d6XMo7HRK1EBiY5LaoL2GDu6U2G+EDIlBDHoxDH+E63JOB-Qq7HQYFmEs6oV
+VvhQXFXGqxBsn+ECl6u6mYYBXMZCJXEBic5LaoL209u6Q2-+hGX2dAmQo7XMZ7mV
+Vvh-OKHEKBWEr6oQXC0756YMnhTHCAxCl2u6WYXBXIZC3TEAig5LaoL2G1u5rB1V
+VvhN1HpIZMoA53OB-Qq7HQYFmEs6oQXFXGqxBsn+ECl6u6mYYBXMZCJU8+jv+HcV
+Vvh4Uw96zkWIcGDCTCGYtwhJ46WHmAm719mAsBy6rwsAlAo6XAWB06o30AY6lN2V
+Vvho15h-CUO1kwXz09GkvGYgvCngvD0-6GW6cwXBWEqwXD1jWCzD1ALB0Mn7XEaV
+VvhB-UX80AOGB+ovUHc4UwC6jkVcQ8oUl7nAZB0Eq6mQUGoYW7z6nIYBT6ngusXV
+Vvhfngn3XEZAmIo7HEL6mQX4ITEACw2u-cD1m1w5pB1F1HnIZEoA4-86WXmAq71V
+VvhPmAwCy6vwwAlQo7XAaB0Mo40Ac6ld61+FT+69M+N3GHw6xIPF0dl8egIKVNMV
+Vvh3qQK6Xo0ExIxMhPXCZAs7G2qBpIsJ1ZHCo78IXh0sYh-sYh0GYB8BHYqCGUrV
+Vvh8XEx-e1EFj26zhcQ4-zw5U20MRJ-oW6loILFMUUoN76WAXBWAl7GMXJXEYFnV
+VvhHmEsCSAsCTC1crBFIrBGAsB0ErBGErB0Is7-It6mMeFEk1Pm00q+4F6Xym8GV
+VvhoYojDHwxAhAxDm-6KnAd7WQbBHR1C276EXZC6IaC8I36EYUoBoErBWMs70hNV
+Vvhk1jn00q+4FAXym9I9HDGHFHGDGDGDGDGDH62xQAmca80QqBoEsEoV1CI9WGIV
+Vvh5WGI76EoUpBoIrBmMt70lO1+CTE69M+N2W9v6R2RAh7AAGgn8HEcBWQb63NPV
+VvhAmYa7mQpBoAsEYV0CIsVGMsdEIV0G1ErF1Qq7XUY8pbEBzI69M+N3-zv5f7VV
+VvhZI4G6X4FFN3W-oLHAf7WYbBnR3C2F6F1Z1sYZ0sYZ1G2F6BXR4BnUaCWEhKkV
+Vvho1Hq00q+4FAUylyHEsEoxp7MB1-yL1Ae7WUbBXR2C2B6EnZ0sYZ-sYZ0G2B6V
+VvhBHR3BnQaCGEgKg-6y+UhU-YK5zoNq-zL5L5L5FIVkZ90Mf7nYb2HQb2XPnMHV
+VvhBHMIBTBFIoBFIpwo3XIn3XMm3mUV3nUV3XcaCnEh+FLF5LwRQRQRUA-5yEXyV
+VvhqVkL6zkWkhRBTnqDDM9MDMwUKIca2mUp31Qo71Mo7HMowYBncqCi6rCTBncrV
+VvhB-IrB0EqB0IbB0IqB0Ip2GAb7-6X4JF2k2ju0DvO5-QXz09L9LDKHJHKDKDKV
+VvhDKDKDL63h87VAcBFErB0EqB0IqBD71QuBXfWBnbnQuBnEJBnEYBXEZ7nEZBXV
+VvhEZBF2X7mEG6lZIF+k2nv0DvO5-QWz05I5M9LHIAGonAh2o9EBWkb64l87VAcV
+VvhBFErB0EqB0IqBD71QuBXfWBnbnQuBnEJBnEYBXEZ7nEZBXEZBF2X7mEG6lZIV
+VvhFB-2z+XyqVkL6DkTkoD2B9xGL1EkYYca2mUp31Qo71Mo7HMowYBncqCi6rCTV
+VvhBncrB-IrB0EqB0IbB0IqB0Ip2GAb7-6X4JF2k31x07Mh4lIhz09K9JDIHHHIV
+VvhDIDIDIDIDJ63787-AcAlErAWEqAWIqAj71QsBXXWBnTXBnUqCGQtBXYpGWFAV
+VvhIHpTDICGQsFHZ38XIf7Go-Eh7B5+Fjs6zhcQ4mo-6h7BPrqzDOsnqiAxcxgnV
+VvhLHAGEh759EG1ktDDCIsuCYyHd8CXgtGXcvCHkt9EFmo12YDFApozDOsnqjDLV
+VvhjGnGk49z00q+4Foh+W9KTLBGpGUhAsDWoHYzo1czo1Yx2t9FCHoHUvRni4DIV
+VvhBHpDBWpTBXp1NB6rLFC3o1ZB1nd9wvGn6LH12qH12pH16aDEAmEx2oPHDR9RV
+VvhsXpn6xR0DLEWqG6hgxj+GfU6ZWoP3Gfw5vB1d1HtIZcoA5N87-AcAlErAWEqV
+VvhAWIqAj71QsBXXWBnTXBnUqCGQtBXYpGWFAIHpTDICGQsFHZ38XIf7Go-Eh7BV
+Vvh2B+QpkRQ7VQB3jUKge8Wce8WcsG2V6x8x8wvwv8njmPE5TQ5L0ML1VPv3awhV
+Vvh91kgCogvGy77GIZ7CXcuCXcu9B+X6UUv8-cF1zQWEb7IJ1xXMn2IAFsa4-PlV
+VvhUK4-MM3VUK4-MM3ki+ch-PZn2Uc1ykjF2B+YL+Uv8-cF1zEWQM3VUK4-MM3VV
+VvhUKwM3j4-MM3l2o2HDqBWJ3EqBAU7SkUhU-YJ+TkAq8U7T--P+1Ah+TgAoj+DV
+VvhOKFZPbFdNaZZQW-IHJF7w-JXPqFdPaRnMqVZPKIUJ4JM65FZS5Hk14NjPbFaV
+VvCMKBZMbZoNTE+uU++xTN7V
+Vv+V
+Vvend
+Vvbytecount 12704
+Vvcrc32 a389a6f2
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.432pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.432pk_vve
new file mode 100644
index 0000000000..2fab732f7b
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.432pk_vve
@@ -0,0 +1,381 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.432pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAHAn+8+++7YkSl6+-Td2++LuFA+uMEUhU-wN4jYNdRIo2mgqV
+Vvh2IYrO1Z6GITod4KIPWKYLXKYN8Fy78FKZ36XVJ6XUFBFEp6XEZ70EX7pRI1+V
+VvhDK65L0MP2mfs8LGjbFLFsooSBB5XHFEoV-70NZBJN1K1B7AoZ0G3slGNsdIIV
+VvhZ0wtIXZ1wsF1R47nQpCGEh-9k1-X-pka4lEOyFaqkp82QaC1J5F2RHG3B7ApV
+VvhoYojLFspoi7BBB2FHE6XkYCWIsC0IvS+k2VY00q+5lceyGbNHxGRVSDMHMsoV
+VvhqCBB-HH1EGGnMFGXRdCIZ7GDGYRNFy7OFiBOFod6sYd36IZ36nVJ6nUFBFIpV
+Vvh6XEa70EX83RJk13Z-pka4lAOyFaqgo81QaC0It72YXGW7N6ocWK1BJFPTYLFV
+VvhxB7B2FDE6IgXCWIcBmIuRw-2NUHc4V6PBU2dq2q0ERMnDIAop17RB0LHEnp2V
+VvhqSFBbWHIzHoyFBbYHNt2qSFBbYHNsYqXpGBBF0HHIXp36hJ0DK6mq2q+k2FbV
+Vvh-pka4lUaz-bELIAm6fBKYqO1V6G2ToZ4GIPWKILXKIPXGIR6G2RNBpca2IgXV
+Vvh6Io37BTopi7BQtC2VLCJMuFXgqDFTG1+GqU69M+T4mfv8OHJyRZRbXHNsoqSV
+VvhBBZ2LFEWEwEFQvK1dcGJZ7x8GCB8GC78GIZ7GYZ8FG77FW77FV78FG77FVB8V
+VvhBGB8B0BA6mIh341EAaY2u-cG1mXv7vCzKYgkY2cWBmEawYFD7IEYF0J9GjGiV
+Vvh78x9F0HoIYF0F37HEaB-UX4YMA+yOUHc4V6KB+6bpXpIzILJAARBAX9F71o-V
+VvhJ97IgKGj7YYaHJsYpCBBHXHIsopCBBHWHJCXJ7J1dHCoEgB0oZoUk33f-pkaV
+Vvh4lUeymaYojbKLKsopiBBPXHKG2V46mR331R233J32pN233N13XR05HEVp22hV
+VvhFRNhF-LFEoo2FAFId4Gi74FG9oQp6oQp32Qo6oYX7Gh4o0Vg--P+1koeyWaIV
+Vvhx7VSC2XXGCB6soXXGCB6soV7sYAXF0B17TAmMW82MB-UPEoJaX2h4jgNJ6OJV
+VvhkH7HEp71YIAmQn3nQYEGUm41QYOKV37JdNFT7Ih8F0J9GYnWGod9sYh8H2h7V
+VvhH2h8H2h8FGJ9GIMZGoZ43Ih8FGJ9GIMKGocp7Yh8B0N9H0Ac9G+EFg-6PUXyV
+VvhqW6S4jgNJ6L-AZ71YIAlQr722MBmFcFGJNFT7Id27IdAsYd9sYdAGIl8H2d3V
+Vvh7IZ47IZ43Id37IZ43Ycp7Yco7YkX80oIMB+rPkUhU-wM4jYNlU2IEwBnZ7BoV
+VvhcqGoFPF2lGL37BLlLOshIJp0HJ7BEolHH2IvFYcsCHccD1Ek2an+HL+69M+TV
+Vvh5WPz4NFpo-AZ6ncIAWMs74Qs73V47IcqwZGJEZGZsfGZseGZh8GzGZh8H2ZAV
+VvhKIlMHEK1oKMx306nooBRLorCBBnWHQLNnIoBEA+xQERQ7VgJ7jYNdJ41AX7nV
+VvhIVBXNZC2J6FDGIB7Ey7NEiBNEyB7F2V3FpMrJmMFG0AVGZ7BHooyBBDWHHKzV
+VvhoI1+A564jmAN3lfv4JFaMH70EY316KAWFZEWFJIGJ4IGJ5AWJ97Ipi7BLXHJV
+VvhsopSBBJBQhHEA5A4WgoM2lfv4OOnIcBmMs7WUzIrFHUaE-3haeeefK+Fx2CHV
+VvhDpUmK1Et7GYp8GQp8qbE8LE3IAMI20Lu789TGyB9soI09qGyB9sojXGonoQXV
+VvhFWB56oMZBVMp7mEOJx-1REWK9G+Q4jgNNA8FAtFlIdFVJ6FGJ5FVN5FGN5FGV
+VvhJ6F0N5HIRAx6H2RAsYV9G2nWG2IjJ5FGQrFFUq2HEdAmAX93JI1+D5M5L0MPV
+Vvh3lfv4KGHMHBZEJ7ZAJFJ6ZFY6KFY2aFn2ZG3N68IUcx782UcsYYbx782YNx6V
+Vvh8IQfBlkq5FB-p3b+ILQ8cMoc7-fv4KH0Uq2nZ4J-IdFZAJG2NG7IR6EVN5G2V
+Vvh2aFoYl7IV7JYR88IR88DG2ccFoccsYV87y76GWXoV78IRM8nRM5EBG6q9FAmV
+VvhEo9HNpb+ErU5P-IQ4Vfw4MJZUY70Aa7W6YB0RIEmVHImV2IWZ3AmZ88IqS7BV
+VvhXXHMHNx76mN66oFM6ZF66pAVBlF26HMK70AY8IRLk33t-wHH5FYaylZYka2nV
+VvhZ23GZ13IV07IR13YR07YR07IV-7YR8FoboV7FobWG2XXG2boR9BogqL1Bh7FV
+VvhHMxBR94IZ6CZN7JndKD0Qx+aDG71p3okk1Ru-cfB4-MOz-aXQcNWS27uAbBKV
+VvhQe80YhPmpWpWpWpWpWpWpWpWpWga90Ig7GkpRIIndGO47qMdCB+g2+Hc4V6CV
+Vvh4jgNJ76XMY7T72DmJ172AZGYbobWGTGYEjB36oEXFGEo7HEL6lZ3k1IF-J14V
+Vvh3-Ia+VbFHG6mo-Iv7IyGNDUbFmRBHWHHsooyBBDXHHsooy7BEsBYRJC3EtFGV
+VvhcoDEPE0kTVY6ZWoU6nM-8Qhwp3D8C1m1ZAN8D4Coz2Gol1hAF9H2x9D3GXlIV
+VvhgwJ994GWkdYw4cD6G0m2UwV697x5D7FoloVAToVQN7L3GKkyF9L0H+L0F-RAV
+VvhB1BJko73H2EXMwF17XlIEYD4FZm2onozHHDC71nI7AlGDBIWnY6h+H9GHF1+V
+VvhK-c9QiMf7-fu4RUZLOEXEhS59HAKUh2mOGkoKWd3GmYrGWV5KWR6GHR7FYV8V
+VvhiZZBFOHIGoophBBOLGKpoZhR+FKakVGqkVGbgXG6cZBm3-7nQp2YAYCqEZO+V
+Vvhk32P0r9a8mAOyFaphQAnQo81MoBmMs6nUZCH2t72Ze6odP6odO6pdO6oh7ApV
+Vvhh4FJirsphB9ohR78PE2Idg6IZw6XYlCmAsAmcZBXIbBnAs71hPO+k42Q00q+V
+Vvh5lgaylzR5xkRkRnlp46RAoDGBmoHUwC-2uC-6tG-6tC-B5FlF5C-F4FlJ4FVV
+VvhN3FlJ4FVN4FFR4FFQrF-R5B-UsAlV6AlUtAVUvGGl69FBmoYExAGPI5Q5QwRV
+VvhkRkRo9080kbEAmIiBU2dmcZQcq7mAgR5BGEwMrF1BAIrIo7QF5InBQF6AoEwV
+VvhIwBAjokomzH0H9sYkomokZlRSxP3sYkomokYmyBABAjokYmy7ABAjokYmy7AV
+VvhBAjokYmy7ABAhA7Ajokomoknn2kYn1kolWB381lY6pFYlJ6oJXlZ6ZJHlo6pV
+VvhFHmGAb7HmohggA-U1+XyqW6YBU2dqeqYUxQvDJCop2dRB9LHH1p2+Gso+GsoV
+VvhrTrBDolBDWGooolBDXGooyB9HIGYpC79FGyYd38Ykp4oko8oo0AgHFLCB+2nV
+VvhrWBBp0DRIXrJ6ht0DT6m+FE-2A-p1EZbVWAaBU2dqMFBQr6YpIUlHIG23BEsV
+VvhbIG7p1clHHHFHHsYo2oooIoyBB-9zRpDHEHIH2pC7B-BHolBHoo2pCBAHIH2V
+VvhpS7AFGdPFGhAFGhB+p52o1EgHF6mlBBR1WE-Ho+E6oro6xxGDTIW+EEW+G6lV
+Vvh+IE-A90l1UsPGXIrBU2dmciwd57oUwQtBHgwItF1hAF6InhQF6IYhQB8Aok1V
+VvhlC7ABBBAFBDXH1HHH2HCw-12xABA-ABAF9H2sYkok2l2kohAFAF9H2xABA-AV
+VvhHokohAHol2hAFAB9H3xAB9FGZAF9FGZAF8FGdAB9FGdABA+p4okok1EeH2H-V
+Vvh6mhABABQ1okoool2ool1p2konmAp8Hno6oG1nZ6YJnnp2oJXo26ZFXoW6bBGV
+VvhpIdhIA0z1ktDc1IsBU2dq6loHKBWV46YpHQqC13BErFHV-HHBpF5bHFpEsbHV
+VvhG1F7AIoooYo2oYoolBDWHGHEHHHGH2oooolBDooYo2fk6BBBBAHHHGHEHHsYV
+VvhoYlBBBBAHHHGKopC7B7AHHxBB9HIxB7AHIHGGopDHHGoIeHGH2IexB79FGdBV
+VvhBABFhBBAB0hB7B2X92oYoZlR7+2oon+IxB7+31on+E6YIdDTEIF5DTIHFLDTV
+VvhIHFKA--07IMk2VAbB1+JGa+Jg3R-0yGh90Iez0bDwxLop3ozPGxx5m3R+WLDV
+VvhAZnmBQvmFQoZLB7Kmz7pmWVQYsL78JmD8Zlz8pljlwIg3QEw3QEg7QDmkpkWV
+Vvhl4kGlJk0lZjnlZZgFZk7o7klk3l00oAR8WQdz0WhfHrRJePIL4opo3ozLEPXV
+VvhoJoKo3oZoJoKoJoJoZo4oJo4oZo3ophhFOLJphRPLJLELHLFLFLGLFsZoanXV
+VvhLHOzLHPDLGP3oao3oKoJo4oKhfrfrB4kLIA9QiMf7mjr8Qa754kK92NnEw7fV
+Vvh6YkJkakIl4hQNOL5KJm2bpmXVQgrxQkbLB7anGNhHWPIsqpJpS7hJgkcxQkcV
+VvhxQgdL88pmGhQUg3QMgBAIgFQAgRA+wZaHAkR4AX+LIEA35Mh8Wbw88qhPRq4V
+VvhdhRR-RNR3RJR7RFRBBDWLILGLJHFsZpZo3pKswLKOpppnWLKOppplRNgxRNQV
+VvhxRNR1ppJo3pJoJp3oZp2opooopoop3oJpJo3pKdh9QoxfK0kOII8qb+d8GbwV
+Vvh88zHkqkLkpl3z1L3D2L491xQQgBQMwBQMgBQQgDpcb91KWmzKWn3YwlMH9z3V
+Vvhn3VAlND9xO9AKWUg7O7mkZcc90L690xQQg7QQw7QQgBQMwBQMgBQMwBQJABQV
+VvhBQBg3uotou0kHIM8QQAb80bw88zGkqkKkpl2z1L2D2L391xQMgBQIwBQIgBQV
+VvhMgDpYb91KGmzKGn3UwlLH9z2n3RAlMD9spYghN9AsZpiBRPWLKPFlQf4mf-TV
+VvhFklUgWsb8zQdmMYQP-MgFbB1kagWH-L0P-H2OplZdQRNL6GTL8C3mnTpn0RQV
+VvhoaPB7apC7hHXPJLJxgD27gZaP7KC7QZMxQVOxQRPL3L-H2P-L0T1Kn6wFbB0V
+Vvhlg7VmMm+k1x60yGh90sdz0Wjp0pB7h-hXXLFLMspoJqCBR3RXXLFLMzPqTLFV
+VvhLMspoJqCBR3RXXLFLMsZoJq4o4oxAxChEhGUk0R7-Wgu3lgdzGWjpB7hXXLMV
+VvhspqCBRXXLMspqCBRXXLMspqC7RVh9xGUk1V804NX5lseyWXFzHpqqyBRjXLPV
+VvhspqyBRjXLPspqyBR+sLEJplbL4NR-LLEG2oGZB6cHI3opWFBVhWkQogAHJciV
+VvhA0bw88lMkOlMkAFgFwRQJAdQIwhQEgpQAgpQAgtQ6gxQ+x-PDEKmoZchBN9IV
+VvhK0p3QxJKDKJJpJFhFITIIm7RBFAposFR84LFO3oJZR3OLDxPLDxQ-QpQ3QpQV
+Vvh3gnpkZmpkqmjL2L7P1T1l5kelKkuk1lA0UYK7G2dz0WjpRRhvXLSspriBRvXV
+VvhLSsprjLTLH4pomsdLH8ZoWdRAeLGCZoWhR2uLFGZo2hQKaa3rZrpk7hB1ZWuV
+VvhBXUdz0WfqgexbEoaqLqD6IprqG3BMVLN6IpG7RUWHJ6JqT6Yp07RYWHH6pq0V
+VvhBBAWLN6ooWBRbmBB2YLM72o0FRYZH0FRbmJ97Jq0N87JqT7YYaLN7YUbLM7oV
+VvhUaLN7oQbLNwbFWVRUcFGVRYdF0VRbmZ18Jq0d08JqT8Y2eLN8ahRUfOZqGhPV
+VvhLMCphRROGqox-XTHfFMqp81+Mos9t8og9Wbw88yvoRBh3hNx6xVx6hbm3R2hV
+VvhUWLE9NsWBQ9M73ghbW7JchXW7pUhYcJmqC6dJWqGdJ9MwfJ0qT93AhUh-G9NV
+VvhsWoJ2hUh7xbW9HPMwhJBUxJBRRIxDEoGox5F9H1+OIwAF2+i7Wjr8RVxwqHOV
+VvhCXpno1p2oXoYooo2pIhBN8LKK3ppRRVLLNJJqZFhdILOPnPOPW7hhiAKqq7RV
+VvhhWPPMaqpBhdXPOJ4qKFhZKLMNZq3RRRMLKKZpIhRFB-BBB7B3BFADLGIqXNBV
+VvhuBSkFZ+8qb+d80bw88mwLClqdgNQ3QLpkZl3kasw7QBi9-L1P0L0P0L1L1L0V
+VvhL2L-L3L+L3KplwT7xRPXLKsppiBRPWLKPFlAj3mkg6lF12F+9WMqxmb7TEBYV
+VvhmncwVA+wJA7ABAFA3AJPL4GZlpVQVLL7JpmKJQdYP8N3mqwqmqsWPAPX3glWV
+VvhLAMan47glHP9MqmpFgdYP8JZmKNQZLK2VMJlELGYMK3IhJ3lBA324-7AB14-V
+Vvh3AJ042m22LH9FJYQG-CFnHUgos5CBmnIMwp3DCkAuwyh4R4BBQ5+K369ewcgV
+Vvh7mfw88qBLPpqZhJPPIL3pDLELGspoKzELFPFLFLGLEPFLFLGLELHL3p3hBJNV
+VvhLLoxdMDOKIpzKopjKppCBQLHsplh9WLENWNh-Z6hCJIGp8F-+HN+k3dH0DvOV
+Vvh6W+fymbJNlofEh34AXo1ZwCpkx-9DFGYoIcx6usYoXbpoWdRththqBjBXFphV
+Vvh5KoRXBeRpxvWLTGC6hJ5wxF6DICHooVBAtLFCZo1glCXgnFYkZnE45oko27IV
+Vvh0r9a8mIdxGVD+XBdK4B8KoAvL0DnlQ6z93oW9JoW9JkX93oWwhLG+HI05XI0V
+Vvh5XI05XI05XI05XI05WI03U4T+L+Gk2BJ0yGh90IewmUTp3oKPGOZp1nWLI9CV
+VvhBREgspp0nXLI9CBREgspp0nWLI9ExRAh5oomoZoGpDHE9KCnpoYxZ4DRc--hV
+Vvhg9VOJUjYfGka8jAcz1j+FwNNL5GZlnhQQg1plWkTL390L291L1D1L192L093V
+VvhP-94xQ+gRP96xO97xN98K0mpQwhL9AJWnKIgvpEgxH9ExG9FxF9GxxBhHppIV
+VvhpnpmoAWmJkzvPHkq8jAcoaoLrKobl4oLoKRRBRAtxRBRAeLGPG8poaoHhR3xV
+Vvh2gLFTE9ELE6Jo0o3o03Q9FL07Q9FL07P9GOWBP9HKWBO9IKGFO9IKGFN9JK0V
+VvhJN9JK0JM9KJmNLDKJXNL9LJWRK9MJGVK9MJGVJ9NJ0ZJ9NJ0ZI9OImdI9OImV
+VvhdW9PIWlG9PIWlF9QIGo32hlF9ETRTFTRTFPSPGPSLHLTLHE--BF+22p1+FDJV
+VvhA-2xIhqkPJU9t8og9Wbx89kqkfkqkQJvT7P-HAL-DBL+DCOmnqch3N9GNmoqV
+VvhMxFJDJN0paAhVG9NXOTQsarJr5qcqH3RUmPL6qpWJRIaPH7qoXVR2tPE8anmV
+Vvhk3nWkKn0kamnkpmXl4m2l4lakrkg4QCA8QC+g3VN0yGh90Udx0UQD+o9k4T4V
+VvhOZlok4lWkalHkplGl3l0lKkWlpkHlpk1m4ggZe99KGn4Qwlb9CJWnpIh-XDFV
+VvhImoZ6hDspKpjLLHLsZpopy7RRBTWLKPFlAj3mP-eKUbEAmIZ8TgckDnPX+L+V
+VvhP-L-H0L-H0L0D1L091L190L190L29-L39+P29-L39+LHLHLHxRBRBRBRBRBhV
+VvhBRBRBQ+gJQ2gFQ2gFg2gFQ6gBQ6gBQAg7QAw3gAg7QAw3QBA-QBA-QBPL-WjV
+Vvhnf0kCk+80FMZ7Wbw88zEkqhgBQ7ABQ6wHpkmkzL291L1D1L191sZl0kppCBRV
+VvhHXLIsppCBRHXLIsZp4nwL6lgU9-c+EoJaX2c8jgdoGqHq3pjPJTIXI6KoW7hV
+Vvh2YLEB3o0JQwaPBBanGVQkdL98ZmmdgYfP69-L5D-L590P391P2D1P293L194V
+VvhL0wgRg+gVf98KXmZcghc9ANmnKQgtK9DJGo4Ax-XqGqVqlr+k56012F+9WMfV
+VvhxmbMTTBYqXcxRADIHFHGHHHEHIKppIdRNMLLJpq3RRVZLNN4qKFRdjBhdj7YV
+Vvh90FWNBB4slNBB47I90FWNFo-FWPPIqqaBhdIPNN4qJNRVaLMJpppVRR8HKGpV
+Vvhp2o2oooYoIp2kxR7HOBYrcpkk3I10lBH8G6ez0bR6-9n+Fx+23rzPSxxrm3RV
+VvhkWLQ6aqj6qqT74q0JhUaLL7ppXRRMcLJwdLIweLHwfLGwgLFwh-R+h3QDFL0V
+VvhoZgx7P9HKXopVh3olxqB2P+l-+eVXGUd8TkcjWoeofsWnWfmnW1d5357wgEgV
+Vvhb6mC96mGl0mD926CTX9E8D9E8Tp6zIakCkI9t8og9Wbw88zMkqkZmSBQ7QbXV
+VvhL0L7spkZmSBQ7QbXL0L7spkZmSBQ7QbXL0L7sZkZmKkKlAEwGgIgKf-V-UhmV
+VvhtWge8TgcfxGalchQZThgYw3QYw3gUw7QUw7gQw7gQgFQQgHqlWlTPNLNxhZRV
+VvhZhVRcxcxcxcxcwMgMwMgMwQgIwUgEwUgEwYgAwYw6wcg6wcw2wdA+gdQ+gW9V
+Vvhououp80kFEQAF2+i7Gfn8LP1O8iKk7hA3w2wBg2nRJFo2tF2Yl8nB8L+EXgVV
+Vvh9+EIggB-DFsboi7hDWLHspoyBRDXLHspoy7RBgnwT31+KEU9QiMf6Gbq8AzKV
+VvhpqriBRtRqRRFIIoYFHGpFJGINKFoRKJJRLIpRMIZVMLlO3Wy83X6K33bK43MV
+VvhK37MJpFLJpFKJpN4JYZ3JIh2IooY3FLLbRxRvWLSPLzKk9-M0El2E0sY8TAcV
+VvhjwT9PGspoZkqdNMZZMJJVLJZRLJy7LJZTXJpNMFpNMJpNMJpN7JpJNJZN9FZV
+VvhJPFZJA-4J2kJFIL0F3FAEoInlnBFH7kQuB5poi7R7gjwT21+REc9QiMf7mfuV
+Vvh8RaBtKHNGnpZo2oooZoIp2o3p3hRJOLKO4ppVRRbPLNpq4saPMPpPMNaq3RhV
+VvhRcLLKTLKKZpJlBJB-BFB3BBBAxBBBB3BIx2xMx+xQwD0Ug7mEc8mUY80gb7GV
+VvhUe80Ic8VUa8FYc7gb4mPStlvas1EHX+69M+T4Wbt7k2K+IB1+EBnktCXd6GnV
+VvhUwBokzNAFJl3HIx3p2HJsXLJsmLJ9WLJBRF2pHLJBRFDL3FBFTH2QwC1gtCYV
+VvhcsGnQk22Ek2q+F1+9n269M+T3GXt7xQRMhIhIxFBBR3h08IYcZHHsooyBBDXV
+VvhHHsooyBBDXHHsYopfIDJAA-QAUUhU-wP8TcboapWIxAMDE8XgfGVl79EHr7-V
+VvhZDMZ43sZ7VVTEa43IZ43MY4JQH4JYuHNHNHNDNHNDNHNDNDODODO9G7noWQhV
+VvhAa9H7WonNR+aAaN47R-WWb8MUfKEk3En00q+5lkdyWTHPL7WomYh2f9-o1chV
+Vvh+t9FHWQY4YxWING-ING06dGXgxhBdBdBVRKRNxsxoxnWHPsZNB-KH3PplKDEV
+VvhJmoIUh-85EGWgx+dDG7Xpbokk3Ao00q+5lcozGTO9OHXq2qC7BXoqHqTHNDNV
+VvhHNDNHNDNHNDNHNDNwxYxcZDGB2oHJB+qHE7Yo0RA82gsGXV8CIa3Fx+YMsV-V
+VvhAQjHXJHMsoqCBBVBcf1+GnI69M+T4mbt7u9E8YV9ogoQoB5B6VPJ9Psmqy6hV
+VvhkXPG6WIh369E8XkPHOsYqjLNHNJnlKxPJKdKKpMh35wh-6CoceGnVB+pHHfKV
+VvhLI1+InM69M+T4mbt7xJhORB49FC1h5KYVNG3Z8GHqYqTHNHNxRZ2P3AJCZ2bV
+VvhCDIFcrOoNQFKl3xR-ILEFTHEJDLEJDL3Mx-5D3QwG2d8CIgsHEF3oepaog-BV
+VvhBkUhU-wQ8TMbMXGmMVSGMVZmT57aEq7oQZBYYHFnhbDGBmomQhAr9GBmonQhV
+Vvh6xkxgxhBgxjoqjHOxBdRdBfpqS7RbpqKqS7RZhbpqnpEk3Ms00q+5lgdyWTHV
+VvhPKfHBXoGYw8XggCHky81o1xoksKXZO8bQgRGo66x8hKBSBIVXF76kaSXVsCaV
+VvhQwNHoJIx72wxB1sXp1ExApDH7noGUx+eCXl4HFjJTF1+J1Y69M+T4Wbt7x7hV
+VvhKh33H2UuCXZ8FohDNAFJl3HEHoLEF3lS6po3BQMplJx9NIcFJXYFK0UGKGIXV
+VvhKpJBVRVBVRXoq2qHV8C3Z6K2Z6GWYx+aHFfJPI0kJ0EAHXIi6mfu8QtR+o9AV
+VvhBmmXYQYu95GWlnggN994CYz3GJlIZAJ994sYoiBAvw9BxB9XHGsooYookmRVV
+VvhD27Q117HJQAYBbk0Ib6YYq7WFYFmEreahf1+XWMAF2+i80ns8h7E31Eh2x+bV
+Vvh5EKmUgKXYQKHcgCIYx+dC3kdG3kdC3kdGIgeGVo0dBceHNCoq1l1HEDEEGEOV
+VvhAGlZ81AgFWQZ91Qa7md53WUdNGMc86Aa8GV1G0YbLG6HIbHHR0NRBo7Zp3IaV
+VvhLJBWLWLS7jLR7pr0ZBkdHP8nqWlBUh2xQhAxIhMx2hZ7DSfLk3+z00q+5lIfV
+Vvhx0eqo0If4FUe7WkK5E3Go0Ah2X5G6WoGAR6W9FAXo07PAZcnK2IsHHHHHGHHV
+VvhHHHHHHDJ9JBGga8mMQ7Go-Eh7+UHp3ojPGLIDG1+HHs69M+T30ju5RAxBToKV
+VvhoJon-tDG6mkZ4mMOwa9IDHDHHGHFHGHGHGHFGHB7EYZGCZ2wEGoG2x2V9G6GV
+VvhoG6h2H9E6mkY8mMO7mUd7Go3gA0L5EsTpXIp8TkcqT+GrG7fPR6ZoIr0BR2xV
+VvhknLG9Q73oWqz73omqWJR6xcZLG9O7JomqHJRAhYaKGIhUbKGrmNN9TwbKGrWV
+VvhVMDRBpUxvRrRvR8JRBnmZN9Q8ZYa9H8pYZ9I8ZYa9H8pYa9H8pomomlRAhAfV
+VvhLHDG93omoWo3oXoWo3oWoWo3oXoWo3oIoHo3o2o4heSQLSb3rO1+dVsDkccvV
+VvhBGjq8RS+5IPRoYbQoIhR-gHEHHGooIonhR3BAuLFLI8JoYpGVRBBIbPHHIBpV
+Vvhp2p0RRFBIaPIH0EaLJH0EZPJH0hhFA8qpIkfPJGnhhJ7KjPJpPPJGYhhJ9CqV
+Vvhp2kfPJH0hhJA7GFhJA70JhFA7GJhFBMZPIHJ7pp2pGRRBBIrLHHJ84oYp1ZRV
+Vvh3REeLFHICpo2oolALGHFGplx77rBB4rRS+3Ug86T12F+9WYjy0jQ5P59SFmHV
+VvhN356CXAQQw2l54H1D4D4D2D5H0H42HkIlV79H42odAMIGYlFJMH33ZRQIKJoV
+VvhlFRKL243NQANJJkldJL04pJQ2Q-IxQ2Q-JL+5-JJgQ7JGlkZJO51JJYQF4K-V
+Vvhl3NM52FpQQFLJVlIZ353KIEQN8EllYh055D-AFlnkZlXl1lXlXl1lV2w2wQHV
+VvhCnllMqH64Mmlqlr+o0MV-CUO2UwfyGenhS8KZNxdsZbWKi78sYjWCy6wwgDDV
+Vvh64QvKTOJgv1E7Xk2u-cG20jx5QD3yadQA4rW9TDGrWDDHDDC79KzGy7OsZfWV
+VvhOKhPGv-P6koJaX2eBjYdnmcgznYwvnYwvnYwvWCHnjCHnjCHnjCHnjCHnjCHV
+VvhkRcxhBfwAtDCsXYwvnYwvnYwHODPHOkDCHnjCHnjCHni6tDCwtDCwtDCwtDCV
+VvhwtDCCHo0cgv+e0IB3Ncl811q9AHM8mERQt7GpHYb9GK1Qx-MC02cSHUXUYZ6V
+Vvh9ECIYgCYYfGYYeGYYeGoYdH2YdDEGFYx2t82oHYbHGC0RBAs3op1QbDK7WQxV
+VvhQZ7oq0AbHOG2+LCIqXUY5MFmIhN57lpIQr9HFnUhAsC0oXV69FFoYh-6GGl7V
+VvhGGh7GGkuGGgvGGd9GFdACGZB+t82oHUdDGC-YxAr82p0McHJ7GYxQX8WqInEV
+Vvh4GQ2u-cG0F9n8JBJsXN12TUTQLwL3lQL3lQMk2Uc-cfB4-Mxy0nM5L5K9K9KV
+Vvh9K9K9K9KDK9K9KDJwxLnpHpIpTDJwxJBIxLopHpTHJwxLopS6xLWHJuHpz9LV
+VvhwxTmqD9M5M9M5N5Gk2Md-cfB4-MxzmnG5N5M9M5M9MsWqC6hTgDxJC9JDJxBV
+VvhLnpIpTDJHJwxJBLnpTDJwxIxMhMxMhMhMxMhMhMhMhMhMhMhMhMRUA+t8UUhV
+VvhU-wL4jEgoC6xQhTngq7XB37IBI6pN12oZ-6Io6p2pIp6o22VGIAHFZAYIoIZV
+VvhEnMaCzDL9LsXo7+b8kl2E0sY7TQUemiDCqsnhiAvPXCqwuOt5Rdy6vPXCqsnV
+VvhhiAvMvUegB+N9+Hc4V672jk3IpLWBYAFy-xlTlQL3lQL3lX+10s2u-cG-UPtV
+Vvh-GAhYX8kIGw69M+T6nny9BEhIzonozDHDHHHDHwxDnonooonozDHwxAxBBAxV
+VvhDnozDHwxAxBBAxDnozDHDHHHDHwxDnonooonozDHwxDnonooonozDHwxEhLEV
+Vvh3Hc2u-cG0lft4LBpxKJLA8+rJTNJQr1E5ng2u-cG1WPw4OCZy4VOAAouGKXpV
+VvhdBwQwQwQwQ5-kQ5EM-Ax12F+9WQDyFJ6ksp6kDaACBGAAA06E+l2E0sZ8jMdV
+VvhpcrIQxUw9K9H5H9K5F9L90qGchgN8Kcb81Ic7WQs8-MLCVUY7Xgb6mN9J0AZV
+VvhHEF06aDFF06ZHEFG2aDFFGwGJB33HXJB336T7Io2IW3Yo2IW3YlI6mJAFGAaV
+VvhCpII7nZY70Qs2YAZ8GIYAWQdNpUU3l+L6-Qhgt9LH0oponZRaxH+AZg2u-cGV
+Vvh3nnx9B9WXXoHpiAxPXDKsnpiAxPXDKsnpiAxPXDKsnpiAxPXDKsnpjDLyB4BV
+Vvh6A+mLEHc4V6LD+2goi8CDKDKsnpiAxPXDKsnpiAxPXDKsnpiAxPXDKsnpiAxV
+VvhPXDKwx9soMoUo-dU-CUO2UYGx0a-QL3lQLwLwLsVQGAl3GxnJHHE2V669M+TV
+Vvh0+ji8F7IFIx3FHPnMq9E3-A69M+T1+jf8NC2RKJZN5FoR68GcBUH3+UhU-wDV
+Vvh-ywZ8m2rEXIpAYReH-XM3lI69M+T1kji8S6R9w2FgG8G6c70IqW3Q9+83UUhV
+VvhU-wI+j6W5O5E4VQBHDUm1EjY8ZJWII7W6c2WVDUV8-AL6mILJR+G4+RQ7VgCV
+Vvh0zfzToZ8L2jWGIVGZQ+E6+EKk+wD-zgLoFh6NpRLOHn+43s69M+T2+bk8N5FV
+VvhD3cl8GAqBHEr6nYV8n1E1Zw2u-cG-kPl80EZ90IY6B+OTEUhU-wF0ywdIqDoV
+VvhFIB3F1MowqB1Mp7mLmQas-Ny00q+5l64w0Q1+2DU6NkkUlV+y0+Q+B+FTkUhV
+VvhU-wE-iwc6rAZKzGpIXQmg4P+0yGh90Itz1XB9KHJLJxBNBMxTnpnpm0MwxLoV
+Vvhp3ozPGxx5m3R+WLDAZnmBQvmFQoZLB7Kmz7pmWVQYsL78JmD8Zlz8pljlwIgV
+Vvh3QEw3QEg7QDmkpkWl4kGlJk0lZjnlZZgFZk7o7klg4f-0yGh90Qtz1XMDLHKV
+VvhLJLJLJHKHKHKHL9M68LnpzHKLJxhHroz6JoW7R2mLF6poD73nmJQwZPBwbLAV
+Vvh83mnVQgdL8weL7wfL6z5lmkJlXkJlWkZlT91L292P193L094L-wwNPP2Nw0QV
+VvhEg0QAv-hkUjYfGkaCDkrolq1pZp12hAXDEBHnXQgot998n0xwxPopJpDPHxxV
+Vvh9m3R2WLEAZo0BQzmFQsZLC7KnD7pmmVQcsL88JmT8ZmD8plzlwMg3QIw3QIgV
+Vvh7QHmkpkml4kWlJkGlZkDD4Kal4P+b25+b18kOwA9t8og7nLwBAwd5BJlnG6oV
+Vvh9B3GAgoKLC4116wxTopZpTPIxxDm3R6WLFAZoGBR1mFQwZLD7KnT7pn0VQgsV
+VvhL98Jmj8ZmT8pmDlwQg3QMw3QMg7QLmkpl0l4kmlJkWlZkTD4Kql4T+b29+b1V
+VvhA9-bl+jYfGkbBjkpnHQwpJLwhYP9JJnHQkuzDLxBNRLqpDTHwVLG6ZoH7R2XV
+VvhLEwYLD7JnmJgrmRQkcL9C3mmZQfmdQbmhQXwT59-L4D-L490L3wgBQEgFgAgV
+VvhJQ6gNQ5nlZhgFbk7l0k7kn0kPwI9t8og7HfwCR3R6Z5E7WnWUQsc9wkc9B8-V
+VvhnlQgwZ5HI9rnpTHILHxh9roT6Jo07QwmLD6pnj73nGJQoZP9wbL883mHVQYdV
+VvhL6weL5wfL4z5lGkJl1kJl0kZkz91L092P-93L+94KzD4KKl4L+bEb15+ZwMCV
+Vvh5xMpBGbw8Bbk2hoWOqrG7R3BkXLFDQApoWr0FR6hjmFRAhcZLGDO7JoWqWJRV
+VvhAhYpLH9N7ZYZ9M7pYhwaKGrz7pYhscK1rHRMDSrRrSrGZLHQwdKGr0dN7WomV
+VvhhN7Gp0dN7WomhN7WomhRAhAgLH9H8ponoWlRAh6h-R6x6h-R6h6h-R6x6h-RV
+Vvh3B2x-R-B-fObb3rdlRqUg4f50r9a8mQpxmb7WFlg3Wl4QoD0Om7A3Q7g3AFfV
+VvhL4KZlpZQV7xQcsL9BzLA7pnGNgoaPIsapCBhJRLWPJPA8DLA8DL98JmWhQYfV
+VvhL69-L491H392L195H+D7NYnA5FXHHKHLLNHMsYpYpJntnf-sm+fOQ0YdCTksV
+Vvhn0qYqJqTHOHODPwxgxgUlTowBg3wBQFTkplHl3lWkzL591L4D1L491L591xOV
+Vvh7mkpcgjpcglNDAK2mzlQlMHAKHmzKWn3cc90KWQg7O80kZm0kjL590L5D0L5V
+Vvh91L4D1L491L4D1L3H1L1L1P-ShCRCf-umEfOQ0YdCTkspnqIq3pppppoq2q2V
+Vvhq2qGqW16zHkqkLkpl3z1L3D2L491xQQgBQMwBQMgBQQgDpcb91KWmzKWn3YwV
+VvhlMH9z3n3VAlND9xO9AKWUg7O7mkZcc90L690xQQg7QQw7QQgBQMwBQMgBQMwV
+VvhBQJABQBQBg3uotoug5r80hdk8GYsz1TG5PDNLLAGpWAxApDFBmo1YgsfACXxV
+VvhD1P-T1L2LwBQIwFQMgDplmkplXkplWkplmkzKWQgBO99xO9AKHn3VAjwLAK2V
+Vvhn3YwjpcglO80kZcb90KWUg7QUg9plmkZlnkZlmkplXkplWkplXkplIkpkpkqV
+VvhkLfHbHekSAg8qb+d8HPwBQkrDDJJnTN4nJJQwrA+2GzHkqkLkpl3z1L3D2L4V
+Vvh91xQQgBQMwBQMgBQQgDpcb91KWmzKWn3YwlMH9z3n3VAlND9xO9AKWUg7O7mV
+VvhkZcc90L690xQQg7QQw7QQgBQMwBQMgBQMwBQJABQBQBg3uotou1+Bgk48ncLV
+Vvh4nbxCBAhhBdRfoqoqnrDDQDQ66XxHGPMspqCBRXXLMspqCBRXXLMspqCBRXWV
+VvhLMPGzIf+CQo48ncL5XbxCBsxpBlRhRhRhBlBlBlBohsUbTpBJhjXLPspqyBRV
+VvhjXLPspqyBRjXLPspqy7RhhLxHE1+Cws48ncL51XxBxURoxhRYl9M6npHIxArV
+Vvh9GCGo0gkdTpBBhbXLNspqSBRbXLNspqSBRbXLNspqS7RZhDxGw+pnkMfCVQRV
+VvhBjopoXQx7JLx-YPEJJoXQkmjpBFhfXLOspqiBRfXLOspqiBRfXLOspqi7RdhV
+VvhHxH+k3zE1-Fq9Gcdz0WhfKrRVePLLELKLFLJLGLILHHHsZp3oZpIoS7RNR-RV
+VvhJiD3pahRRKzLdgLKOppplRNgxRNQxRNR1ppJo3pJoJp3oZp2opooopoop3oJV
+VvhpJo3pKdh9QoxfK0kRx29t8og9XLwBAwd5IJlp06o9I3GAhEKLJ41+-1ziw92V
+VvhP0P5T1D7T198wVL0976ZkGmi6XL+9773ggfW7JcgbW7pUgccJmmS6dJWmWdJV
+Vvh97wfJ0mj9+ImmGkJ6gfW90IGmGkrmi6gFgbmlYmHlYm3lXlA5092kg6gE9-tV
+VvhoUl2E0saCjQsmGpopZpjHLHLDMwxUxUUaro1NAguD6D-D3H1D1H2H-H4GoloV
+VvhdQRML6JpmJRQdJL9J4mpFQhjBghi6an4slPAMZn47glWPAIqmqBghIP8N4mZV
+VvhNQZaL7Jpm3VQROL4GplIkIl2kokYlIk1m2ZAgqHDX60kSxAAF2+i7XfrCBExV
+VvhNBJRFRFRFBJBJBJBMhQUbbo1NAguD6D-D3H1D1H2H-H4GolodQRML6JpmJRQV
+VvhdJL9J4mpFQhjBghi6an4slPAMZn47glWPAIqmqBghIP8N4mZNQZaL7Jpm3VQV
+VvhROL4GplIkIl2kokYlIk1m2ZAgqHDX60kThEAF2+i7XbrBwwRUxNREl9H6no1V
+VvhIwsr9BCGmmgkiro1NAguD6D-D3H1D1H2H-H4GolodQRML6JpmJRQdJL9J4mpV
+VvhFQhjBghi6an4slPAMZn47glWPAIqmqBghIP8N4mZNQZaL7Jpm3VQROL4GplIV
+VvhkIl2kokYlIk1m2ZAgqHDX61+SxIAF2+i7XPrBBcd5PJlqm6o9P3GAhgKLQ41V
+Vvh1DTTBYqXcxQx+xFB6x7BBB-BJ9HKGZpZVRRLLMJpqJJRdIPOJ3qawqqasWPPV
+VvhPX3hhWLPMaqq7hhHPOMqqZFhZYPNJZq4NRVLLLK3pZdRJ9LIHEHHHGHFHIH1V
+VvhpoZBcqHSXL1+RxMAF2+i7XTrBRUrDPJJqTN4qJJRgrAD3xwqHOCXpno1p2oXV
+VvhoYooo2pIhBN8LKK3ppRRVLLNJJqZFhdILOPnPOPW7hhiAKqq7RhWPPMaqpBhV
+VvhdXPOJ4qKFhZKLMNZq3RRRMLKKZpIhRFB-BBB7B3BFADLGIqXNBuBQ90Wq+l2V
+VvhE0sd9zUfr-qlmrYQYqFFm1cn55D-AFlYknlXlXl1lokYlV2w3AMGGolVB8H4V
+Vvh32dAIJK2lFNLL33ZRAILJZl-VKL14JJQAOJJkVhJL-5+JDL-5+JJk-kJJP50V
+VvhJIgQ7JKVkpJN52FZUQFKK-l2RL52JpMQJ7FFlJZ254GYAQN9EVlnkH2QQw7QV
+VvhMwEwMwMwEwMFD-D52ngwQKBYm-aAgRgRk9-JqEjYfGkZCjAsl0pYpJpTHKHKV
+VvhDLwxQxQUfDlJkaP1OZlHkC7QIg1XL39+splGkCBQIg1XL39+splGkC7QIg5pV
+Vvhl0kjH291L093xA2gQvD6GHmYMwuh3gmkJxc9t8og7HfnCAwxJBFRBRBRBBFBV
+VvhFBFBIhMUfzlJkaP1OZlHkC7QIg1XL39+splGkCBQIg1XL39+splGkC7QIg5pV
+Vvhl0kjH291L093xA2gQvD6GHmYMwuh3gn+KRg9t8og7HbnBxYE3X+II-6l6-2XV
+VvhDSBHr1Qhgt9N8n1OzILFNh7eLIDC7REgspp0nXLI9CBREgspp0nXLI9C7REhV
+Vvh1pomoTHH9GLF9IxB+hMvDLGHqIMxqU24qw-Gr+jYfGkZBzAponQxdJLMxYPMV
+VvhJJqXQk+E1xFR3aoadREwsZp0nXLI9CBREgspp0nXLI9CBREgsZp0oDLH9FxBV
+VvhAh7R2hHoo0pXgxR7DNFXrO+EPP0kOho9t8og81boCB+xVBRRNRNRNBRBRBRBV
+VvhUhYUkAD+o9k4T4OZlok4lWkalHkplGl3l0lKkWlpkHlpk1m4ggZe99KGn4QwV
+Vvhlb9CJWnpIh-XDFImoZ6hDspKpjLLHLsZpopy7RRBTWLKPFlAj3mEk2LS0UYKV
+Vvh7G6dz0WjpBZhzXLTI-1HpRHIK3oZZh3OLFxOPXlPOplQxPP3dgKpo3dh-NPFV
+VvhK4oJVh9IpB9KLTspry7RxhfHpBHIk8PT2GlOE1sfymbJNloqQR8o9Eh0oIMmV
+VvhD2MmDECLgtT1hPCpkx-8DEGnoIYx38HFG2oIcx6tDGCi7B6sHGCTLG83oWdRV
+VvhlRthhhthhhqBaBjBLBXFox5KoRDFph5HoRXBLBeRWRpxdxvWLQLTHRGC6hJ4V
+Vvh9JFzDIFXp2UxErDICHooQxB6HHBoonZR2sLFCZo1ZR+vAHcuAHcvAoN8AoNAV
+Vvh7QgZnE45oFVxA9-ba+jYfGkcBjEplHQwtJLAxYPAJJnXQk+EX1kB0w-bladQV
+VvhRA-gMg7gIwBQIgFQEgJg6gRQ2wRQ+wVf97OWmpYglbDANmnZMgxJ9EMnoJAhV
+Vvh7G9HyBJhPppopy7RRBTWLLHLsZpaoQH9lQb+GS+69M+T4Gft8Q9NHMLMxBZBV
+VvhYxfnqXqW0+LJB-AfBV37BqUtG2Z5x8FZZ4sZd3spd4GYTWGYJdFG6sJG6s2HV
+VvhIIBG6o7GEY6mRLJ+k2nV00q+5lceyGbODNHMLLLLLLHMHMHMHN9O66ZRMo2mV
+Vvhkq2IcrOHZ7GIXod5KITWKYPXKYR8GC78FG37FGAsJGAs2HIJBG6o7WEY6mVLV
+VvhJQ-BsUUhU-wN8TYcpFqXq3pX2hIXDGBHo1QgCGcfA7BRIo2mgq2IYrO1Z6GIV
+VvhTod4KIPWKYLXKYN8Fy78FKZ36XVJ6XUFBFEp6XEZ70EX7pRIo2nX00q+5lgaV
+VvhyGI-2d5JQR6XEh3GAh3Z+E410oI-Mo2moq2IgrOXZ8GIbod6KIXWKYTXKYV8V
+VvhGS78FG77FGEsJGEs2HIKBG6o7mEY6mZLJg-4t+UhU-wO7zYakrD3JTdYOZJQV
+VvhBn0pLKB-AgBV38BqYtGIZ6x8FpZ5sZd4spd5GYXWGYIVGIIXC3IXC-2p3HIWV
+VvhB0MY70AcJpL+IiI69M+T4Gjt8hBRIZ5H7WoGUR2c9D80o0UR6L9G7FpZ0NLJV
+VvhB-AfBV37BqUtG2Z5x8FZZ4sZd3spd4GYTWGYJdFG6sJG6s2HIIBG6o7GEY6mV
+VvhRLJ+k3Xa0r9a8mEOyVbM7JqY6o9LVmon3c9FAaYgB3ceFIgdBoccFpcbG2YrV
+VvhGIN6GfdNHIKYp2hBBPHHKZoZhR7PLE2Jdg6Ihg6Idv6oW87HQVEGQrBF7171V
+VvhhY7KUA+ztkRQ7VgK7TgNo4oHIeFmUsBoR4FpJ6JIYpLIHIxRDXLIsYpIoFBBV
+Vvh+YD0Mu7nUu7Ho5ojHIHJLLHKsYp2opeR+A-+u+RSPFkH8jYdchBB7R9oooonV
+VvhpDDIDI63xfB0Ur7XUZCGF76ocWKGB86ZUnJIKrt3oTHGHF2Ho0396ncZ81QZV
+VvhCbT+FCY5LaoQ40ft8RUxRBNRJRJRJBNBNBNBQhUUU4onEh+r8nUeCGZ782cbV
+VvhKGV87pUsJIewt3pjHLHF3Xo0N981ce81kZDGTA-3uURSPFkL8TYcolq1pZp1V
+Vvh2hAXDEBHgr8XYc8n06PGB0kr8XUdCGV77ocaKGR87ZUrJIavt3pTHKHF3Ho0V
+VvhJ97ncd81gZDFSw+yukRSPFkM7zYacrCZJTVYO3JOBn0cPHB0o1QfC0ct8IYcV
+VvhGWRN82cbK1VJGfnYLKxBRB2KDE7YgcCWccD0Ix7wo1Tg-CUO2UseymZmh8KjV
+VvhGogwwwD0-BGG6q70LmF1wZEmF17Id7x7sYbod29nFGB26oIYB0Io3mANFQ-0V
+VvhvEHc4V6J8jgdpHp2opoZoZoYoooooop0pG-fHH6Xo0EgwYGj7IcYGWJBFBDoV
+Vvhoy7BDop2Eex38YEeFGgo91ER2X5HHA-1vUHc4V6I8Tgco-pHopoH2h+XCXIsV
+VvhBmQt7GgkQ2oW6w70jmF7wZGGF77IooojHGsYojHHF0boIdF0Z38XEfB-o0ARV
+Vvh791+DCw2u-cG3GTv7bBnRJLpN4JJJnQkXIom6x+Y9D72fmJ872cZHIHHxBDWV
+VvhHHxBF28jFGd28YIfB0ko5F6loonEJj+69M+T4Gjt8U3lp4966hn-8Q3bgMKVV
+VvhVk2m7E2GF+41+ME-Xn+MsYlYCHImC1QlBXdZGaF9PnH47QIopGxRIS7RIZp1V
+VvhHJDop2H2J9FngsGHcsD2Ek2boA-OwEXyqW6S7jgZpGYRBL5H6XEhAJ6molNRV
+VvhEMA976L-AZ71YIAlQr722MBmFcFGJNFT7Id27IdAsYd9sYdAGIl8H2d37IZ4V
+Vvh7IZ43Id37IZ43Ycp7Yco7YkX80oIMA-6wUUhU-wM8jYdkhVBRRToq2q1qTDNV
+VvhDN65lh72D1QtGHR8BYh2KoFAIZlGHELlLEfWo33R-0HEIYo2BAIol3CoN8C1V
+VvhYu81koDHPA-BwkUhU-wO8jYdqXqIq3pppppoq2q2q2qGqW09PIF1oHQvGHZ8V
+VvhC2h4KoNAJ3lIHEIzLEIi7R-HLEF2o3FB-3H3JAFnh6GXctD0Ux2oDJPFo2voV
+Vvh00q+5lYdyGU-EE4H+LI-Il6-EXA-2pDHQgCGcfA8FU2YExBnd7C2crGoJPFIV
+VvhlHL3BBIjLJ5WLJ7REopHHIFAJ2l4CoR8CHYv81ooA-Bho2np00q+5lgayGI-V
+Vvh2d5JQR6XEh3GAh3Z+E410qM-F2A-2rD2YuGXZ9Fph5H3JQJIpIxRIy7RJ3p3V
+VvhHJJBFYlKH2UvGIcvCHocA-2oA-JU2R-5xUUhU-wO7zYakrD3JTdYOZJQBn14V
+VvhM-B2A-+rCoYtGXV9FZh4H3FQJ2pHxRIi7RIpp2HJFBFIlJH2QvG2cuCHkcA-V
+Vvh+oA-FU2+k45s00q+5lgaylzR5xkRkRnlp46RAoDGBmoHUwC-2uC-6tG-6tC-V
+VvhB5FlF5C-F4FlJ4FVN3FlJ4FVN4FFR4FFQrF-R5B-UsAlV6AlUtAVUvGGl69FV
+VvhBmoYExAGPI5Q5QwRkRkRoA-HyEXyqW6Q8jgdoWr2qpqzHQHQDRwxoxoUWokdV
+Vvh2nZ53GZ43IV37IR43YR37YR37IV27YRB-5HDG2l5HC76GoVAsYV39pFoIbBoV
+VvhIMBV2o8HAX6mlJJ+k3Tu0DvO6VoeymbRDQHPLOLOLOHPHPHPHQ9R67FA8VAtV
+VvhG-IdFlJ6FWJ5FlN5FWN5FWJ6FGN5HFFooDG2o2RB1WG2l6HEsYV37jFoIcBoV
+VvhINBV2o8XAX6mo3JJk3Xv0DvO6VkdymXM5RDPLNAGq0AxIpDHBmoXYh+fA83AV
+Vvh8FAtFlIdFVJ6FGJ5FVN5FGN5FGJ6F0N5HEFonoVAFonWG2h6HC76FGxIR37nV
+VvhR341MFB0Yn6mAgJJEB-Gz+XyqW6R7zga+FBn+FJJzKFhJJ+FBn1JH0cHCIUJV
+Vvh8IQJG2MZFoQKFoMaFoMZG2IaFo+EForoVBForWG2l6HS76FGPoR381R34HMFV
+VvhB0cn6mAhJJL+Njo6ZWoU51Pv8RkxhBdRZRZRZBdBdBdBghkUXokd2nZ53GZ4V
+Vvh3IV37IR43YR37YR37IV27YRB-5HDG2l5HC76GyB6HDFooHRB2qLGAqpJ3BjoV
+VvhqYoFZAG1o3NAJno3Mx6bDH7XpGExRRP+Kzs6zhcW6XM+8RJBnt+EI-1XE-1XV
+VvhE-1XE--2PLEWIxJcDIKXoZgx9olB3ALXlB-S8oo3lB-AHEL2o2o2lR-AHEH2V
+VvhoJgx7ODHK2oo6ZDJEqqDE-1XE-1WE--Rjx5Lg5vz00q+5mAq+Gb9TBFHmXUwV
+VvhUtH4GXlXhDl2hAEvH2GolDGnlIcwJ9D3GmlYcg8ND-e1m2UgV6D6G0mTFnmIV
+VvhRAR6H5x6L4GJlIZgDYGpkYk3kYELH1EnJQB0FIl26qD2EmMwJ271lYNQVBAxV
+VvhDoonnWEwp0HAIXnJ6gt09E2moYoEk48s07Mh6-knymPFBnoJJTlYP3JR2rA9V
+VvhxA8FAtFlIdFVJ6FGJ5FVN5FGN5FGJ6F0N5HEFonoVAFonWG2jXG2noRB2rHFV
+VvhBZoXBhJFHPxBdB2NH2Ux-KH3Qx-KDG7nomMxIYDLLK1E6RQ5L0MP1ljp4x90V
+Vvhkg90kvCngvCngvGjH1lAwxwxwx9HrmT+9DQ5L0MP2Fjt4rwhAh6x6h6x9noXV
+VvhoIoHoIoHoIlAH2lAH1o1o1o1o1o1o1o0oh+b6UUv8-wI2jIdIsBJNS6qJYAFV
+VvhMl5s4VxlcLwO3lcL4VQO3lcL4VQO4A+99EKtQlIC-DcC5RsVo0ZQ01gc5lEGV
+Vvhw0a-cL4VQO3lcL4VTlcLwO3y6O3l6p2XAFJ-3GxoQpNJC1H60Lg69M+T4k5uV
+Vvh2Buc0LkEKk+xBE5s2Bfk1qZYNKtoOKNdNL6UJ2pIGT+JMqxYOKtbQqBcNKpZV
+VvS63FZK0-oNLVow+laPqtoNa3XNK7tR4Lo+Cc++DLqV
+Vv+V
+Vvend
+Vvbytecount 15960
+Vvcrc32 34887d2e
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.518pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.518pk_vve
new file mode 100644
index 0000000000..94f8b83ae3
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.518pk_vve
@@ -0,0 +1,446 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.518pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAHAp+8+++7YkSl6+-mlD++QgHw-4MEUhU0IS5zYSo4qNAx32V
+VvhAJh5WYZtKKZPKIlML3RfK3lLxgJiBgJi7gJqlKTvJW3AJW39NG7NRGB6VGB5V
+VvhAJEZF2B17tNuKYL+FK65L0MV419sANLFyhJhLXLJsppSBRLWLKIqZGa32pBsV
+VvhN4OIHqdTBPLX7QLX3QjwMJlGKq9phIGZJ8FYZLC3V4GoFB0hBR1+BqA5L0MVV
+Vvh4Fzt5h7hCwNHdMC2Z5GJN7NJZYKZFfBJpjPJsqpSFhRREGLI6JomBB6YL1N8V
+VvhG3NAjHSUk3VY00q+7G+myH5SLxahpiDRLRsprSBRrWLIN3od7R72AJo2SAGLV
+VvhhNOphPH3dQKKhOL3bqlMsqlMsalNP3MGxfJWBAJWB9NGFNRGJ6VGJ5AJEbF2V
+VvhB18NNwKYQA+wNERQ7W2M5zUSoKofhJGIV4KXJPB3knP1BR+mP1BQAqd2NMHIV
+VvhTAxhLYLKLI2Jp03BAWLF72kqGIV4GvobcA-BNUHc4VMUE+2lqprMqXBBUnLLV
+VvhEapZ7hN1LLF1py7RrYLRsZpzphRRrYLRt3rSFRrYLRt3rSBRtBvprjHMB2ppV
+Vvh7BRWHLMXq36xZ19PTRLQk37b-pka6FwhzFvIPOYnoYElL2S9GLdNOZhOH3ZQV
+VvhK4hNL3XqlLsqlLsqlMxfKYlOGqdNP2VwFso2F-LFYZp3FRrprCBRlPGpdOKqV
+VvhVPO3o3Nh5GpOpQ-KO+UhU0ITAjclhRXur4rCBRnXLQsprC7RpIPGIuo36pH6V
+VvhRPSIduGahNL3ZQGSBQKC7QKJhNxQKJhOKpQFL3Mj3PJm3PJW3QFm3QFW7QFGV
+VvhBR+o72oMMhFKo1Vd-CUO3V2kyWzHpThfLH13KrYXFmJ37YIZJD7ZEZJD7ZjWV
+VvhKy7PxPL3MJJGHpMYJGJ47TFGQnC6h51+Fqc2u-cK51s19xgxhTqKqJqn+-CJV
+VvhqMpWFBEZHH7ZoT7poD83nmVRfpqSBRbXLNspqSBRbXLNspqJo2NQJJo4FB-YV
+VvhHGIZoupqpg-VOkRQ7W2QAjclhRLuqKqSBRbXLNspqS7RdOG3ZrK1EaJmF4JVV
+VvhJJJVJZJGJZJ0NKImUqImpJ6hNF9LTLbKjIIaoZFR-JPDJZlKK-9WJpQWJpMWV
+VvhK3MWK3MHKIIXKIEYGsMh3K1E94k23g+G1n9tAOLpeKstKSBNspbXKSBNspbXV
+VvhKSBNsZdI3CBI73EJxH7Y6cSYQB-nPEoJaXgp5zcSN9Oqq4hucnF2FJBIYYEmV
+VvhVGBpQZIGd08IQZSo2eFWNgOpIaP3lJ7ZpQFT7ZpQLTLJlQsZpQLJpPLTLJlRV
+VvhLJhE23pPJlJRL3MjJRKpQZLJhK7JpQFmJRL2MaLJl37ppRB0V+22+EWH+FA-V
+VvhBK1EIas6zhcc6Vzu5aGam4aXB1F2YYEXNL7MV57LZ47adJ7ZhJ7Zh3waKprpV
+VvhhQsZhRKZrphRKZ+EKZQJKpMjJOJmJOJWJPFmJPFWNPFGRQB0VBWH+GJUk2FjV
+Vvh00q+7FoTyFvGTKnHJIo3V9GoZAJooINR3ILGIqoZBRBT7hBSAKowzHMKop7hV
+Vvh7WPGJ3oKFR3JLEJolMKZd7L3JRCxRx5+J5+69M+Z6Wry5eGKo6KPAoApCWF0V
+VvhBYUZSIQZOZIaOZxGNPLo7ZlTlQLXhQPuL4hQL3hfxQL3hR-PHEOZo5VR3rHHV
+VvhIHFBBHbIJ3pzLTspryBRzprDoRT+GL25L0MV4mrt5h-b4tIeF1AsFn35GLNNV
+VvhNZhKH3JQJ4hJL3HqlHsqlHsqlIxfJYlKGqNNO2VsFsZ2EJeGLEJ3qTLMspqCV
+VvhBRXpozopk1Nm-fwX5VgTyVtYVbV7InEXIo722qEWJqIWJaMGNLMGNLIWNMAjV
+Vvh7ZqTLMspqCBRXXLMspqIqXpkk1dn-cfB5FMTyVv4oOh3CIQrG1QsHqFpN5FZV
+Vvhp4osofj8o8o9jFbHPIInhGKY9qd0KnB9Eml38YN4KPo5cB+hR+JElVUG9DYfV
+Vvhkk22rXLCBQsZI0PWRQspnXLCBQsZpM2zK0DpQYxK7JIbEnaAGB-8REWK9GMUV
+Vvh5zcSRE20aAFnB8JXJ7JWN7JT7ZVJ7pVJ7ZZIwbK3rpZRK3rWKJnWKJpNJVN7V
+VvhJWxJZK9qGJIbG4IbJbEdF1718tFk23V3k2-q-pka6FkTyVtpgrWJInFrApFbV
+VvhAaFb6aJq6aK32bKI2aKaxpgdxQ8JgdsZkcsZkdxP8jGmjocgK0oIQhB2DJbMV
+VvhLA-SRkeVXH+f5zcSRR6dBso2RJAohKQnJ8JbAaGZNm7ZZMMWNNKJ2bKJd-7ZV
+VvhdOPrKJkdxOL0ZNL0bWKZkcsZdQ8TKZgeGokeGogfKJgfKKYgK5Uh3L6IQx7IV
+VvhAoIxGZbMOKj+GrU5P-IV5lzw5eK3iJW1F17HMbAWJ384JI8KFY8JJX8ZJI8ZV
+VvhMoweLRxRnXLQsZrJgR-P72JP6pJP6qFO6zN4YZF035BXEXFHVpapVd1+LLY5V
+VvhlBAX5Wru5bLG7co2EnGpApGZAaGZwWNNIWRNIWNOIT7pZOxOKZZOsZdNspdOV
+VvhKJh8KZdPGZh7L3VR-5PEJ6oR9IMZrDLPxPCZhNKaVPO2lMHEG2oWVBApLJfNV
+VvhPK1+Erc4WgoR4lzv5fGWdr8cMed1bIcqSWo0cg9P9P9P9P9P9P9P9P9P9P9PV
+Vvh9P9Q9E4Wo0Yh2c9FBmoHSKGBNnH57uUcSGd9o12E-CUO3V+TyVtZds6oMZF0V
+VvhN27JDmNH7JDmNOsZfWKjKZhK33IjBK6pIYFWHoIaAnS8Fg+v2EJElVUN9EASV
+VvhoppcomFB2ZHE7ZymRTccLt83pzLKsppiBRPXLKsppiBRPXLKKYNNJJdYGaFAV
+VvhIoo9oroUg7UN07Mh7WZ++H5DXGkgt5LACZmXk3m2k3z5H-LwNQ3QNA7QJQ7AV
+VvhNQ3QPpkIlZkIlpkHm3kGmJk1kg0nkvgwdOD9xNDAxMDAKHnDKImzKJmJdgVOV
+VvhT5KrljL+P3L-T2sZkal3kKl3kal3EcP2IoNgJGJZlZ75H4InRARIBIm3KgZLV
+VvhP9HMxRXWHGAooZ7B3WDGMIoZ6xB0DJTLHL1+OFc9QiMn9-zu5hkqPTEvqq73V
+VvhHMmHpI7uDGIqkx3IP1lKLECaRB2tK3o1ZNHECJd9GJh4WJjHhfjGP2qJo2q4V
+VvhlRTWPEHLPELLPELI2alxAVP5oWBPXF73dVD0N76I2uC3ImEYN8coGx3p7qjEV
+VvhMlg9QiMn8lzt5hX4+Fi9hKBZF7G2B7BocmGXNOWnJPT1JAT1FQPHBgP1FRL1V
+VvhFhKYJhJMJh+GVhjTPJ+IsapE3TP4+JP4+G2olk2W7AQ-2XKY3B7IZ1D0N6F2V
+VvhYsFYN4GZ3NjMpf0kQ-k69M+Z6Wzv7hERIhAhAhDmomommN6gRVT5FnlYZAF8V
+VvhL0GW2w5ocWGocXGZYYGYYZGJYZGJUaGDK0NMJmRMJWVLxK83VJ8IZI8JZI8IV
+VvhdH8Jh08Yk22eH-EGcwBOD2GXlYRAT0lm8QXmomoz9H9H9I5Jk7s90R+n91N+V
+Vvh+H5SWprh-tqZR3Eoq2VIEpzLG4B1PKGJBHLLGXFIDLLIHTxRBRvpp3rZoqrjV
+VvhLHLSsZp3pz+Qpi7RFRvpopri7RFRvpopri7RFRvpopri7RFRvpopraoprjLIV
+VvhLSLIHTLHLTHILSxRFRtRBRzop3rjLIHTHILTHIHNAoMtHMIYJLHMMXJbDNMXV
+VvhJaDOIXNKDPEmR3HRSPrplxykTUk6zhcc8Y+-AQyh52nJZAgw3AYw3QVA-gRAV
+Vvh3gRA3QRQ6wVRXYLMspoh9+oQTWL-L5L+L5sZkJlzL+L5xQ3QTWL+L5L-L5sZV
+Vvhk3m3k3MQ3PJWkDL+JWkC7Q-J9+L-J0kJkYAg7QBwBQJAFBbpqS7BAnHHIYojV
+VvhMXop6xF0DKTMLL0kVEo7NsMe9I+-AQyILAkWL9G23QZ7IJz6GPm2dFL6Gn7QV
+VvhTpkplzL2L5sZkplpl3ly7QBQ5IkRD6sZkpmDL0L6xQBQXWL0L6L1L6spkZmCV
+Vvh7Q7QZQ7K50L-JWkTL0JWkS7Q7J9-L1J0kZl2AgBQJwFQRAJBnprC7BMnHKIYV
+VvhpTMXpZ6xR0DNTPLOgBUC1Vh8Do3++H5Df-fFkslAlNFJdAd8J2kIm2dXH-L6V
+VvhGa7A3gR9IZkKlZk1BA7QRQJQAwVANRZQNRbWL3LNxQNRbWL3LH+Nk+4ATWL3V
+VvhL0L4xQNQ3QTplJkZlzL3L-L5L4L-L5L3L0L5sZlJkJlplZkJlplZk3mDL3L-V
+VvhL6L3L-JVkDL4L+JWk3lJkJMg1plJkJIg-QNQ3J9+L4H0J0kJlJkoAg7QJQFwV
+VvhBANQNABQNBfplJqjH4HOL3LIAoMtHIIYJMDIMXJbHIMIJaHJIXNKHKEXR4HMV
+VvhSPqpk5qkgCMD1YyUE2B++H5Cb0Z3nA4Q6ZmZR5G23QZ6JXZFL6G4Itj6K4F7V
+Vvhj6GJFNIJlpcpGn7QRQJQBQVANQBQRQNQBQRQJQFQTplJkplzL4L1L5sZlJkpV
+VvhkE4g2-b6sZlJkpm3lJkZm3lZkZmDL3L1L6xQJQ7QXplZkZmC7QJQ7QVQNQ7QV
+VvhVQNQ3QbplJkZmJlJkZMQ5plZkJMg3QJQ7K9-xQJQ7J9-L4L0JGkJlZkZEg7QV
+VvhJQF191L3L3T2H4L5H2L4HQxQJRnolYr3lJpXB4CIpZ73K1pa6pNopa6pNYppV
+Vvh6qJYq26rFYqbaxpQ-xqkNo29t8op8n9vAREhoxhBfpqTPMxxTspW3hLm7hEXV
+VvhPI6roj7KoGNh+qPE7qnz84nj8KnT8an0hgjmk4mWkKmWkLmDmwQgFgMwFgMgV
+VvhJgLmlalD95P196P0D6P097P-wwZfL7S5m6Lw5+lUg6300oARAWwlyn1+nwXFV
+VvhmrkKmKkqm4l4lql5lalKlTP4P3P4T2P4P2xgRgFgNwFgNgFgNwFgNgJgJgNgV
+VvhFgNgFgRgBgVg3wZdb8mwnBmakqm4l4lalKli7gNgHXP5T0P6P1xgRwBgRgBgV
+VvhRwBgRgFgNwFgJwFgJwJgFwNgBwNw3w9HlB15g5R10r9aAmonxH5BWlmg40lrV
+VvhQqD4L+72l3km7AFQJw7QRw3QZg-QdQ-QhPPAGanIbqnXZgwsTDC4o0Vx+cPFV
+Vvh7roGRxbWTNsrqaqi7xfWTE85nmfqnmdgsfPB9-LB9-LA91L892L794L596L3V
+Vvh98L19AL+DCNoog5LXA1+RIEA35MqAH5vAArhY-1QT5qaoaqKp3q4p4pqpJpjV
+VvhPLLJPLPIPMLHPNLHsaqKsx3hdiDEPOT4qqoC7hdwPPPExhdx-hdh-hdx1qqaV
+VvhoKqKoKqZoaqKoaq4oqq3oqq4oqpqp4papKpKpKpJpqp3q4oaq5lxE-5Krhb+V
+VvhOII8qb+l9n5vAAw-PITHTIPKLxFhRBFhUhHXPN9HsqqWoao-cRDWP0rTP0raV
+VvhgxtdLRzLradBtfDRsqkhpg9-oKo-gh3hkh3hgh3hkh5qqmoaqWoaqmoaqXojV
+VvhPNDGPNDHPMHHPKLHTGaj+LikHYM8QQAj9X5vAA1xP3T1T3P4LwJgRAJgUgLXV
+VvhP792sqmWkqk-cQHWOmnjOmnqcwxcLCz5nqZAxeDCsqggtf9DP+5DxhjXPPsqV
+Vvhqy7hhxLwXC0kSIQAM96r9XDpAQqA+Qf0UgVrBXlak0FAFgAWH2L4T0P5T-P7V
+VvhP+L9L+P9KqnIdgt8LDCannZh+sTEC4oGVx2cPG7roWRxfWTOsrqqqzT4lXTBV
+VvhRyBwpdsqn4hQhg-gdg3Qdg3gVw7QVgFQNwJQEWH4P+AolrR498kd5BXBk2J6V
+Vvh0yGhBHMlyn1DpKpRFxFxfXPJPOsqpKqiBhJhfXPJPOsqpKqj+FqzPJPOsqpKV
+VvhqiBhJhfXPJPOsqpKqi7hJhdxFxHxNROkk0l7-Wgu5-wlyn0zpxFxjXPPsqqyV
+VvhBhjXPPsqqyBhjXPPsqqyBhjXPPsaqrpTpg0kEoc6NaAa7H9tAAPwTBTGsqoiV
+VvhBh9XPGsqoiBh9XPGsqoiBh9qlGk4l2hgBdP1SKkrZQFdP2KZlGk3lWhQUdL8V
+VvhBKn9o5nEg6F912pOBnQlyn1+z4j0lLm5mKmJmqmIn4m1nam0nalnnqlWoKlGV
+Vvhoal0oal0oqkmp4kGpak0pak0pqghVe9NOGqKUxdbLNNaqKJxVZ6KpqEWPLMWV
+VvhFhRV7apK2bPJWKp5dhFfPHsakKoakaoDP1PExgFgtgJgvWP4PAxgVghgVwZwV
+VvhSADwSQGkg2FA0UYK9GMlyn1+z6msoboy7hDXPHsqoyBhDXPHsqoyBhBgYTdgV
+VvhUeP58am0dgQuxgQeP58zP4CqlHhgJ9P2KqkahvZTp41+j2oCK9d+EH5vAAk-V
+Vvh1AnToBFxxxfm3RpxgVLQ6Jqm3RgWLO6Zqm3Rjm7RcWLP6ZqGBRfmBRUXLPwYV
+VvhLK73qWJRIYLPwZLI7JqmJRAaLO7ZomJRgaLG7Zqz7ZoGRRfmVQ7pqmVP83qmV
+VvhVO8JqWZO83qz8JYdLP8JUeLOweJmdRgeJWhRgfJGhRcgJ0hRjmlH93qmlG9EV
+VvhLO9EIWlRgh-F9ELPwh-x3Rcx-h3Rgx3R3RdB3B7RVx+x7hHGYtpPod8hKw-uV
+VvhHUjYfHIqATgkmxHFnBDFpKpbqDXLDOwVPK9O6apGqy6XPI9OsWJh6hgaPF9OV
+VvhwbPE9PwcP0qWZf9PsWde9OsWlc9P9ENmqWoKMhgh7K9Pwh7Z9OsWp4AhghJWV
+Vvh9OwhNV9PwhSBchVxjW9NPOwxdBdBdBVxcxHGpWpR9L5Jg5VD12F+BmknxH5AV
+VvhXJkh-aPAKpmZkJlpl3lJlZkplpkZmJk3mZhQhdP9O4nJVgpaPCNLnaJgxYTDV
+VvhN4o4wrnrsWTETX3x-mPEQjTEQjTDQzTCR5nLJwpbPARqn4VghdP8OqmKhgVgV
+Vvh3QRg7gJQJQFQRQ3gZPLANaoA9JXAg3-E0hdkAGslyn1+ngXFmbk5m4kqlzP2V
+VvhP4P3PXl4laswBgNzkalbkqlal4lKl4lKlKlJlal3lqkalqkKmQj9mAthjXPPV
+VvhsqqyBhjXPPsaqrpTlwykbZ2AF2+r921pAQmBL0o4NglPL8L-L5L2L3L4L1L5V
+VvhL0L6P+L8KqmaZghcPAO4nKNgtZTCNKnqFwtoPDTnTDTW7x-yALo57h-mxx-mV
+VvhxwxnTDN5nbFwtZTBNqnKRglcOJZdO5VPJXIaOqIb3KkJEc6qka6d6ZlJ6d6JV
+Vvhlp2dT7SJn5Jh11ggS-Cmo1gh1nch2tDFFnoYJR5w9HkBGxKhSBdQAA-rIUifV
+VvhmXEiAjgknPqRvPSbqKo4q4oKpqoapaoqpCBhFhDWPITHPIPHPITHPIPIxhBhV
+VvhFhBRNh3hRh-hVeTNqRjLrKdRlgHOPELNxh3RVh3hPXPGPJxh7xLqoapTPGTJV
+VvhPGS-Zh7s9rPHRmVhFa85p4MWpgJ1DKo8+NNUk5BH0DvO80MnyX5MSFpQMhF4V
+VvhF1ongWHFHEPFHFPFDHLEDIL2pHo1pXnopXjXHL9DI-FU2r+GY-1ErR9PoxfHV
+VvhqhDPohr+2M+HQ-BU3CBP9LKi6hV99MCnpogxQwDKH2pHlREx-h7B-h3B2mCnV
+VvhoXF5HH7h1I4bpv-BJ+hmtXAgATAkLPHQFeSqBA3g71D0P0B0kqkXAwBgAXwgV
+VvhBgAmwgFgAX91P26i6gFgEW52P356saqSBhbXPNsqqSBhbXPNsqqS7hWB1wn6V
+Vvhg3FJ0yGhBGkmwH+jlekbT5SzP8D-xgcg5XP89-sqmWkSBgcg5XP89-sqmWkSV
+VvhBgcg5XP890xQcgDpmGlDL693L595H496L298H19AH-9CCno2NR9+pboEi4xKV
+Vvh0yGhBGkmw11wL0kIX8S4n2dgkvPA9+xggg5qmWkamGkzP692T494P494P395V
+VvhP2D5P296xgAgZg6gdg2wdg2ghg+glv9Bxe9COGnzO0oDNmoKMh7ZDGNGozQmV
+VvhpK6hNVDKMGpzXMxxZhfpqorHrGpEiBZL1zhhG1wmw11wGAKQ36l6lLRgRgR7V
+VvhxgRgQuP5P58qlqlXhgNwMg-gNwIg3gKAIg3gKAEg7gEVP290T16KkmkrkW7gV
+VvhAgFg6WP093P-6qkWlKk1Bg2gNg+YP-94OmJg+gRf7KgwRe7aggVe7acgZd7qV
+VvhcgZd7rUgdc8KUgdc8KQghb8aQghb8aMgla8qMglZCqIgpZ9+N1nKEg3Y9CN0V
+VvhkKAwtX90MmnqAg7W9EMWkq6h-W91MGoNl42h4QGBBwKBBwJxFgNxFgNhJQRhV
+VvhJAVRNAVBQwZBQwYxUggh680+K+jYfHIpATkkgjhch9SPC9hvNPtfMw-fIw3vV
+VvhEgBfAgFf6gJv+wNeD5OWm5Ugdb99NWn5EwpXDCMXnr2h4B9rpDPIxx8B2VTDV
+VvhAanXBgsYTA7ammRgccT68alndgMv-wIf7gEfBgAfFw2fNg+vNfwvRvsfZfl9V
+VvhZvdPZvSPOPDvGlhdi4RN0yGhBGslwH1wP1kJX8San2k4n1kLmXkbmWl4mGlLV
+VvhlmlblWm4lHm4lGmLkmmbkWn4kHn5gwpv9DOWo4Yh3rDFRXoqMhFo9JQmpq6xV
+VvhRW9MbNXPxhlRnWPQLQsar3rC7hlRnWPPTJz4nf-xKUbEAmkfATckkx10oQ8AV
+Vvh7g7gFgBQFgEwNgAwNgEwJgIgJgIwFgMgJgMgFgMgFgQgBgUg7wUQBhVhVhXqV
+Vvhq4q4q4qDPMPMPMPMTMPMP156P195P294T294P294P393P492xgMgFgMwBgQwV
+Vvh7gQw7gUw7gRA3gNQ3gJw-gCfzHk+g1g+0UYK9Gklyn1+zIlLkLz3P3H3P4D3V
+VvhP493sqlmlCBgUgBgYQHWPNsqqSBhbXPNsqqSBhbXPNsaqLozmAmUTE2B3NcvV
+VvhA19vAQUx5oo3nrnTXA6Kmn3ggWT76rm0FwQpP57alWRwErT28Kkmdg6f-w+vV
+Vvh-w+f3vwfBfsvBfsfFvkfJvgfNvgfRfcfVfYfZvQvZvQfdvMflfLmjLgmjbgWV
+Vvhk4gHk4gGkLcg7t91SGl4UgJb94RHlbIgRooHzH21E904+Ul2E1QgAzIln6pQV
+Vvh9ENan3hQdQ3QRQFQJQNQBQRQ7QVg-QdPP8OKmqVglcPBNanaJwtZPDN5nbFgV
+VvhxzBwxz7p907L7plZTX3plZQaIg6ZQbMQAJQbo59rnrBwxYTCR5naJwpbPBNqV
+Vvhn4VghdP9KpmahgVg3QRg7gJQJQFQRQ7QZPLANaoA9JXAg4610lBHAWUmyn5HV
+Vvh9NwxVBTppjPJxxHtoj6LoG7x+nPE74nz7Knj7anT7qnD84mmZgctP88amT8qV
+Vvhm0k4m0k5lj9-T3wg7wEgFgAwFgAgJg9mlakT95P+wgVfD6OYm4VwKIz+j30kV
+VvhFkE8cMok9n5uAA5KkBTWjMcxAfwhEewhIe5K2+2w5858wgYgfwr7sgr89797V
+VvhwgYU+KcRMP9J8Wp0chIe9ICj9I8zpvq9pw5KkA---EjYfHIqATgknk5RFxJhV
+VvhfXPJPOsqpKqiBhJhfXPJPOsqpKqiBhJhfXPJPOsqpKqiBhJhfXPJPOsapKqbV
+Vvhp5pDpZpfc5Q40r9aAmwlyH0lm917gKiNgLiqgLjIgajIgbj1grjGh4jGhDSwV
+Vvh8pOw8pxvgfNfgfNvcPRwtgvrnanjTCPCTCLDHEDF9F9F9EDECu8t8w8s8w8sV
+Vvh8x8r8y8q8y8q8z8p8zCo8zCo9+Cn9+Cn8zKm8zOl8walm91wWl0kKEQAF2+rV
+Vvh8X9kAMP5OOkeT+kA-Q8g6wCQAZG5R36sNZYlCZJOAGk2FQ-A32H-H0EYkXkoV
+Vvh7A6QJ-HJEHpcpX2xTrpqpzTLsapyBhTXPLsqpyBhTXPLsaprnzmgU9-m0+hmV
+VvhtXAbATEkkjmgmBBxHWPIxhCgr3m43VT2MqFQ3ZNJhaNZZLNqRbO3NcO4FdO4V
+VvhBsOKBdOK7tOL3tOK5WSKZlSKZWOKZmOKZXOKVnOKVYO4VaNqVLNqRNNaNPJKV
+VvhJg3XN3lK3VP6lQuRDWPIsap5nDmgA9-d0El2E1QdAT+kkDmguBJxPWPKxgJgV
+Vvh-fkPOb7dOaFdOKLqZcNaVdNi7cO4PXO4VbNqVbO4VbO4VMO4RcNqVNNqRdNqV
+VvhRPJqNfJaNg-KNZkZJZL1JKFQJHN3lp7WP7lgr0oNpS7hPWPKTCz8lw070UhmV
+VvhtXAiAjYlrN+IoU25NhlgLNLGLKPHPIPJLHPKPFPMPDPNOqqadxdtPPTsTPTWV
+VvhRxhsTPOLqbZhhtxhduPOOzPNP4q4o4q3oZpqoZppoppZpIpYpYpIpop3pop2V
+VvhqHooqXonqnoYoVUx6s3j8GoHUa8GoGUb8Go0Yb8Go0UcC0kd8DoAmQn9jEiUV
+Vvhk3ok00q+7G+ky0vJTOjKJIopVB39H2l9LEGYoIZB76LGG3oZxZoaJh7ZLHJTV
+VvhPHJJoqHWPHMyBhBXsqoqFRBYxhBYxh7ZxRBKxR7LxR3MLEKYo2hAH3dB3MHHV
+VvhJJpQqLpUk1El00q+7FQjxmvN5M9xQxNBJBFhBx--KL3OF3pTLIsppCBRHXLIV
+VvhsppCBRHXLIsppC7RFezLAA-nAUUhU0IUADcipaqupoJBIsHH8ooGlQ9FGnoJV
+VvhcY8JYZ8JYa83y0QcK0McPr7mVb7WZa7mVb7WZb7GZd6nZOSKh9LRLRHSHSHSV
+VvhDSHSDSHSDSDTDT6-+hMc9L7mpmQhUb9L7mpnOR+roKJXLIQcoLCfUgaGoJj+V
+VvhLnA69M+Z611t9hNxbBN4HHGIoHlADEGnoJch7TYY8Zsc7WZTUZ8JYY8YheL2V
+VvhhBtBtBtBpRShaE22+EE-1oryFRpcHFNzPENao4RR3bHGK0opYx7O9FKnlR+tV
+VvhLHBapQqLpg-VB+UhU0ISDToirWrYshlS9PLPsZr2rDLQHQLQHQLQxBnorDHQV
+VvhxBlBoxpBoxoqDIFJonNR6qLGBpoWVR2sLEC3o1ZQCZgvKXhOZZbEBLG33KDEV
+VvhRF6RDBKhRRjXLPspqy7Rov0kLHI69M+Z6H1t9g2gEg3NL0lgD3kwL2kwP-m0V
+Vvh7QjX9Gsmoj9H75m08wIVFYl3ZAAvL09-H050HFspny7d92NpkaTqkaRg7ML0V
+VvhNol3bml3cgBP90L-9+L0CYlINQWwlgX+OXM69M+Z5n1r9hVhaxJKDHGHoHkhV
+Vvh+vH1hPCqd9OIlNHFCJrIrJr4r3r4QRFYXEIvhW7odV8HZV8YVV4oXrlKxx-KV
+Vvhxh3KPENS7h3ZPENjLFNZoJRR-bLEK3o2ZQKYhPGoo1dB36HHFIpfqKpUg3YrV
+Vvh00q+7G2kxGtmJA2a6sgb6eYb6fUrkrC6F3FqUoG3eMH-EHUwQcD5C0m0UwQsV
+Vvh95C1lnUgQx3B2x5ooDHExB-R-B1pnzLDPDLDxgxQzqni7gtwvqnjTCxh+wb+V
+VvhOnU69M+Z5n1t9hNxaxJJHHG2oHgx+wGol9DEGYo2cx3DZB37HEGJo2bqh9OIV
+Vvhm4HEZ1ot6xHEpeqepwp24h6of2OPGMZ9S2o4TooZPop2LopIJBIqDJFIpIMxV
+VvhIrHHC2oXZB38H2l8DGFZpAq5pA-dCEUhU0IUADYipbqeppJBF6DHGIoIhAH2V
+VvhhQGZo2Zh-7LFJqoJRh-aPFPWNh3KsaoKNh-qPENzLES2m6H5ZO2Kd72ah52pV
+Vvho8Bh42PRLRPRxRpRt9DEKZl8OoheGqgwKnoGkx6eHIBZpfqaq9-W7+lCBHQeV
+VvhAjYloNow1FFnnoYwp99AH+99xA6gZQ6gVQAgVQ-QVPPwRPP6L+H7LMspqCBRV
+VvhHwDHxRXXLMspqC7RZBCwIekQIckgMbFLl0Ubb-81QlOmYqArN8B2P0k7X+kZV
+Vvhkakkg9+a12F+BmwoxX93PPb5D1F2l3kHUgBg+u90Oocg7PGmkodA+gEuGJl0V
+VvhdNL18oZgAeKKkWhOH08pk-kmk3nnk3nXkJnGkon1l2BQBQB-an6w82CHEg7bV
+Vvh80Qg3M7mUg377WcfKGIf8bQa8me2BWkGVFZmkGVHKG6s7qlMQbL4VmNgNs7aV
+VvhlqUZP7G0PqpGPqp0RRIbxREcLH8KoGhR+g-Qww3QowBQggNQUwVQJAhePDlRV
+VvhKwn+LHw69M+Z4HDmAh-xCx+qGXcsD0Qx+q9FBGoXx0onAhEm9JAWp26hEmLFV
+VvhEZo2BfEqhIKKJ7PJLJPJPJLJPJPKHLHMDMFGoTBWoHIh6o9I6XpKq00RDMLKV
+VvhTIyBFxNRUxP+LHs69M+Z4HDu6xMxVRNxHsp5pZq10R9MPJAWp0Ex6ZDFwaDFV
+Vvh7Iq1q2popapKpJpKpKpJpKZ3OJFPMohXHEIYoJ6xEWHI6XpG6xEXwxAYDG7HV
+VvhoGMx+r91UuCYMx0xBx0kh-oC5xMzDH5vAAvxTH6bk5om7gFB6XP2HF74lHoGV
+VvhFgIh5mFgMh+ZP49DBKlWnmJgQgvmNgQgobP59B7am-nGRf9IBqghEcOmoz84V
+VvhghAdOmomZeDG8KZB9xDF8qZB2eOmoT8qgh+g-f9D9+OmYQMg-f80lGkKgc93V
+Vvh9-P6939-P792D-P69390P69291P59390P69291P5D291P59292P4D1D1P4D2V
+VvhD1P3H0L1P1L-T0T+WjkLof1+mFsDkcd5DXDoARiU7+5BNa+Gp4eB3xBQTILFV
+VvhPFPJHEPGPKD4oqpWlhFRQfPIPL8apKpmZhNhQcTKLM84ppq0RhRhUaTLPM7aV
+Vvhq3oVMKTMLF9EPMPF95q4oGlxVR2gTNLF95q4o1lxVfKzTNqATMP2lxVh+wTMV
+VvhLF95qJoGnrq4oGlxVR2c35q3oVQYTLPO75pqqGJxRRcaPLLN7qpaqGRxJhUcV
+VvhTJLN8Kp4q1ZhFhQvPHPLCqoapno4oKpYoKlxFRBeXFXIRU2hQ-rOY-n+lFwAV
+VvhF2+r9nfqBE6F+U6-wU5mrcYhnFMhdLMmqJhF9NHGLMHJHLHKLJHLLIHL6IoYV
+Vvhpm7B3RMXL3pWFPLL7IhRMaKJpWRMPJ83VRIdJqp0dLLJ8KNhEeNaomhZPH94V
+VvhJh6h-ZPF9FN4oWo4Jh2h3ZPE9GNKkhBZL0oqJg9HNKghFZOWp4Nd9JNaUhNLV
+VvhNmpaRb9KK4MhNOJGppdI9LKpAhRQImpooI6hRR3xRRBRRRFRNBRBJBVR7RUVV
+VvhL2qGBbLO7h5P8crT60+E6Q+p6EHc4VMHAzUmoHoKnWWrjsjWT4lwsaoDLEPEV
+VvhsZoS7B5WHGsXoi6xDmp--oDGLESzWro3oXoEk1Iw-CUO3VAnz0DFDGLETvWrV
+Vvho3oX-o5IwhDWDGsXoi7B5WHFsZo4oDLEsalwPC7vy9Sy8APFDF0USGAB3NcvV
+VvhAI1rAQEf6gHngHkzClD1wv2wDngHky6v2wDngHkzClD1wv2wDngHkzClD1wvV
+Vvh2vHGDHHGsfMv2wDngHky6v2wDngHkngHhx7BAx8oClD1wv2wDngHkzClD1wvV
+Vvh2wDWClD1wv2wDngHkzClD1wv2wDngHl0gWl+kBQZ1FKOCn6uxXLHLS9FXQDEV
+VvhEnqYkqDMH1UxJQCIopl7Oro1gVQPo2gXgYo1kh7B-A9FHFGmoIoIkh-B7A9EV
+VvhDHH0kxFA8oookfHIH0dBJA8IpYgdHLGmYxV88HqIYdHOCGVBgs82rHMcHSB1V
+VvhYk26Yk2od+62dE2IaBx7B1rIYq9RCHUhgtCGqYV79NGHchV7GWpoZ99KGYghV
+VvhMvD0pHhA9IGokhBAH0oYlA9GHEH0oXoIkh2x799FHGGmo2ooch-BEv92pIYgV
+VvhHKG1kxUs91qHQgHOB1lBmB2htR9E5GQ2u-cK0lPkAJFaHswdC2EGsc8D8D80V
+VvhUc80Ur8FcA-H8+O8nFoPGTUpr0qmqmqXqXqXqXqXqYqXqXqXqYqXqXqYqXqYV
+VvhqTHNxBboqS7BboqJqTHNLNsYqJqS7BbpqSJBbaHPsnqzHPsXqoqzDQwxkxkhV
+VvhrmpEk3Qd-cfB5Fh7znLJ9R9R9QDQ9QDQ9QwxhBjWDPsYtRgyTOHNLXqIqJqSV
+Vvh7BZRboqJqTHNLNxBboqTHODOHODOHODOHNHODODOHODODODODP9P9P9P9P9OV
+VvhDODPk2Ue00q+7FkTwXLHDPxBjWDPDGBnQoJXNHNGJZN0FbMmBPIV7R7VDLPOV
+VvhDOTKMHoo6WGqAXJqEZN4IZN2QaJ1QrDGwxhBgxjoqnp+U0kf12F+BmchxWSVV
+Vvh8jChsnfSAurXChsnfS6tfO4kyPChsnfSAurXChsnfTCj8T1E50k2u-cK0lPvV
+Vvh-qFaFyAsF-9t9s8D80XmUc80Qt4Eg+si-CUO3UU6y+QoBVoVMoCkLWw69M+ZV
+Vvh8IXyBRgjqXqHqIqHqTDNwxbnqHqIqHqTDNwxbnqHqIqHqTDNwxbnqHqIqHqTV
+VvhDNwxbnqHqIqHqTDNwxbnqHqIqHqTDNwxbnqHqIqHqTDNwxbnqHqIqHqTDO9PV
+Vvho-Uu-CUO3UsTy-uHZbscNrOI1OGKRqy4RqZ7k0cv-CUO3V2hylv1lescZuP2V
+Vvh1vDEKrbWWLhh9moT9Fwh5moGoGoGoHo1oVoUg-Ex12F+BmoFxlZBoxtBo+5HV
+VvhrIrXrI1+cI+AF2+r919pARi+3B5TK3qooHq2p1pXpnp1qHoWr0oGrWkhwu94V
+Vvhkd8egc8JIuBmV78WMcGmYZ82kd7GRB3J70RR3J70NR7J6mRBBJ6mNR7K9W6aV
+VvhLHJWsl7ZopMW7ZoZMWwbLGJW6bLGJGAbLFJWAbLENWArH5IZ82e37GV7AJEaV
+Vvh8JInImQehMYgOJcU5H+R6-sU5HrYgxdh-BJhJOXNphyxUA+vKkHc4VMOGDgpV
+VvhpMzIbIDNsnqSAxbXDNsnqSAxbXDNsnqSAxbXDNsnqSAxbXDNsnqSAxbXDNsnV
+VvhqHqjbIXJk1hR-CUO3Vd6+HLJXxGRcyDNDNsnqSAxbXDNsnqSAxbXDNsnqSAxV
+VvhbXDNsnqSAxbXDNsnqSAxbXDNDIyRGBLE54+2u-cK0lPlAN4HQc80XmUcwcwcV
+Vvhwd6IHXUrFaFUo-IG00q+7EYCun2HLpFYJIJJFYMrDr8-o-MH00q+7EwBu14nV
+Vvhl8KJZNKJZ8GYcvCnkA+L3+UhU0IG0Skg2R3PEHV2FIN0K6hh+xAOk-sJ00q+V
+Vvh7FEBv12Fp1zHHx6V9F6Wo16vB0cpFYT7bEKUg+gK00q+7FM1vmYRwQbE4-QBV
+VvhHDUw1ErSAaJcEZAWQV82sdHs6WInZZLE3-U5L0MV2Evt+7HC7QTJrXKpZmp8V
+VvhQA+G6+EKk-6G0DcPoXlOOZdOOooFpA+QLUUhU0IG0yolgRAx3ASY2tEnQqBHV
+VvhQoCH6v6GoG0k1Zw2u-cK0+XiA1Aq9G3XEx+WTEUhU0IJ1iklMsBjJZFKJIR3V
+VvhJZJ5FIR4C1MsBmYbwd8-cN1E4rs69M+Z3UXi9rClJd76QYAnMY7XAo7sEdNFV
+Vvhgr1+3bw69M+Z3+XhA1G1FaIbLGxBB57aJ1Yng5f+0yGhBGh2yoDFDPxRdhdRV
+VvhhBhRhBlBkxoxrmrV0q9RDPHOxRbqqDTLyBMVPJwWPI6qp0Bx9mJh2aPEBao0V
+VvhRgzmVgvmZgrmdgkfP9wg-gcg3gcg3wXwj592P4D2P493P3wgNgHmlqkmm4kXV
+Vvhm4kWmKkTD7OpmLVwW3z-kAOkTA29t8op9YHvExsxxBpRlRlRlRlRlBpBpBoxV
+VvhsxskxW+EDSHRxRnqqzTOyBYVPMwWPL6qpmBxLmJhEaPHBaomRh9mVh5mZh1mV
+VvhdgwfPCwg-gog3gog3wjwj892P7D2P793P6wgNgTmlqlWm4lHm4lGmKlDD7P0V
+VvhL7Srm6Xw5+lXg6500yGhBGl1yo9N5SDQHOTMEHpoAxIqDHBnoXYx+v9D906+V
+Vvh2A9SDQHPxRfqqTTMyBQVPKwWPJ6qpGBxDmJh6aPFBaoGRh1mVgzmZgvmdgofV
+VvhPAwg-ggg3ggg3wbwj692P5D2P593P4wgNgLmlql0m4knm4kmmKkjD7P+L7SLV
+Vvhm6Pw5+lVg5z10yGhBGszynvHCloKYh059EAnMh+aAno0SB+dPF4n1l6-+xtBV
+VvhrprDPPxxfsqG3hXm7hQXPL6rpT7Kp0NhAqPH7qoj84oT8KoD8anmhgvmk4nGV
+VvhkKnGkLmzmwcgFgYwFgYgJgXmlalz95P496P3D6P397P2wwZg7QZvT6WDkQ14V
+VvhA9-vl+jYfHIhETh+o2Ux3aLDRLzBV6nMFwxaLFCH+-EWrnrIrDLPxhfrqTXMV
+Vvh6Kpz6apWBhMXTIwZPH7aoXNh6bPFwcPEwdPDwePC8qnT9+PA9-PA9-T8z9mGV
+Vvhl4m1l4m0lKlz94P4wgRgIgVgEwVgEgZgDnmKkJmLdwW5z-kAMf-zlEjYfHIfV
+VvhFTh2q3q6pWIxEb9H80sh6d9x6c9I7HpNq3+-0mrHqoqjLNxhXrpzXK6KpT6aV
+Vvhp0BhEXTGwZPF7ao1Nh+bPDwcPCwdPBwePA8qmz9+P89-P89-T6z9lml4lXl4V
+VvhlWlKlT94P2wgRgAgVg6wVg6gZg5nmKhQZsT6VTkQ140khAMC5xMzDH5vAAvxV
+VvhTH6bk5om7gFB6XP2HF74lHoGFgIh5mFgMh+ZP49DBKlWnmJgQgvmNgQgobP5V
+Vvh9B7am-nGRf9IBqghEcOmoz84ghAdOmomZeDG8KZB9xDF8qZB2eOmoT8qgh+gV
+Vvh-f9D9+OmYQMg-f80lGkKgc939-P6939-P792D-P69390P69291P59390P692V
+Vvh91P5D291P59292P4D1D1P4D2D1P3H0L1P1L-T0T+WjkLof0kVQQ9QiMn9HzpV
+VvhAQq958kM95RnMwNQ+YH2L16Yl3lLkZlrkJmKk3mZk3mphgl8PBGTPCCKnnVwV
+VvhwsPE85o0Vh2bTF7rqS7xbXTOPOsbqi7x+cTD8jPD8anWhgog3Qog3QkgBQcgV
+VvhFQYgNQQgVQIgdQAglQ+wtbHGkRORXpr5rJrSBRhRZx9-p8okc6560hdkAGx2V
+VvhyoD-DExQxgxR-B-R-B3B2x6x9mol1Lz6hbhLhai3yqOtGqOu8qsqimhSBfkfV
+VvhFf6O4psagGjzOl9+OkD+OJjziQ-eH+OkCzsqgGjqgGgFgqgVg0gqjWgqjGgqV
+VvhjWgzOx8oOw8oOx8oOwCoxfgvFfgvJfd9JfVPJvGOz7g+g6570hdkAGx2yoDRV
+VvhA--BtRpRpRpRpRpBtBtBsxwxwk+FXxT3T2T3P5LwJgVAJgYgLXP892sqmmkqV
+VvhkFcQHWP+9Cxg+gxfDDOJnjmAxeHDOnniBg+gtg+g+Q7g2P90PB90PA90PB90V
+VvhxgkgBgggBgkgBggwDqmXkqmXl4mIl4lpl5ktfxWkg6L80hdkAGx1yo9L2-2xV
+VvhxBpxh-DOEnq1MxMrDJCHongh6g6U+HvxT3T2T3P5LwJgVAJgYgLXP892sqmmV
+VvhkqkFcQHWP+9Cxg+gxfDDOJnjmAxeHDOnniBg+gtg+g+Q7g2P90PB90PA90PBV
+Vvh90xgkgBgggBgkgBggwDqmXkqmXl4mIl4lpl5ktfxWv-zmkfOQ12jETh+noUxV
+VvhBaLFRLnzV6nsFx3aLHCH+-PjpwJwFwJgRTlKm2lKmGlSBgcgHXP991P-4VlCV
+Vvh7g+gvqk0nqgwxdLCz6nqdAxfDCsqk0nak0k-kakFgg7gog7gkg7gog9qn0kqV
+Vvhmmkqn0kqmnkzP8D1P8D2P7H2P5L2T1ajq90kEAk48ncQ5oHvEwIwzpnanZnoV
+Vvhnpnoo2o1oHoT9G271wX3TAsqnCBgnXPAsqnCBgnXPAsqnCBgnXPAsqnC7glwV
+VvhPwT+g25B-Wgu5072yoDGDHHFLELELELELEHFHFHFDGDGAATwX6TDsqnyBgzXV
+VvhPDsqnyBgzXPDsqnyBgzXPDsqny7gxwbwT11+FQs48ncQ5oDvEhgE21rYr5qYV
+Vvh2xZ1DLBXpHQxEtDGCmoGoG1LzLp5qyBhjXPPsqqyBhjXPPsqqyBhjXPPsqqyV
+VvhBhjWPPTJzKmkDww48ncQ6I5vEAF6D3NZkrJzkMGA42T1NZlHYkyjmARwvXPCV
+VvhsqniBgvXPCsqniBgvXPCsqniBgvXPCsanbmDlw9+Rx+A35MqAH5vAArhY-1QV
+VvhT5qaoaqKp3q4p4pqpJpjPLLJPLPIPMLHPNLHsaqKsx3hdiDEPOT4qqTxf5o4V
+Vvhqblhhh1qqbo4qao4qboDPOPFPNPFPOLGPNPGPMPHPMLHPMPHPLPIPKPJPJPJV
+VvhPJLLPILMPGPMT5p+2RPSqP0IoEjYfHIqDzgyongRZd9MVmq1Aq9M7XAxUbXMV
+Vvh8KqFgk+ICwL0kA12kgNgRwbsm1mz6Klmmm7gMgnW6qlGmy6ZP19A7akWmz7qV
+VvhkGnD84k0mmZf9AsWde99sWk4Ugkg3b9990NWn0kpMgnmkqIgjW93Mmn0la6gV
+Vvhjmlq2gnmm6mmmLnC6gdgjnmomomomLmnlQD594kwUQOkXB6AF2+r92LpEwkxV
+Vvhnpqqqpr2r3r2rIrHrXrj9T29WBL0o4NglPL8L-L5L2L3L4L1L5L0L7L+L8KpV
+VvhmqZghcPBK4nKNgtZTCNKnqFwxYPEPnTDTW7x-yALo57h-mxx-mxwxnxwtoTBV
+VvhRLnKRglrPAO4mqZgdfP7Oqm4kJlqkalJlJl3lpkKmJhQlaPEkhKAk90Aokl2V
+VvhE1QgFTJ1qHrIqpqZqZqZqZqYqoqoqnr1r11bXJkh-aPAKpmZkJlpl3lJlZkpV
+VvhlpkZmJk3mZhQhdP9O4nJVgpaPCNLnaJgxYTDN4o4wrnrsWTETX3x-mPEQjTEV
+VvhQjTDQzTCR5nLJwpbPARqn4VghdP8OqmKhgVg3QRg7gJQJQFQRQ3gZPLANaoAV
+Vvh9JXAg79I12F+Bml2xI9I5SDQHOTMEHpoAxIqDHBnoXYx+v9D906+27XJkh-aV
+VvhPAKpmZkJlpl3lJlZkplpkZmJk3mZhQhdP9O4nJVgpaPCNLnaJgxYTDN4o4wrV
+VvhnrsWTETX3x-mPEQjTEQjTDQzTCR5nLJwpbPARqn4VghdP8OqmKhgVg3QRg7gV
+VvhJQJQFQRQ3gZPLANaoA9JXA0kXxIAF2+r921pDgsv5DOGncQgsnBWnWMnDC7sV
+VvhnWZgwPAC8BL0o4NglPL8L-L5L2L3L4L1L5L0L7L+L8KpmqZghcPBK4nKNgtZV
+VvhTCNKnqFwxYPEPnTDTW7x-yALo57h-mxx-mxwxnxwtoTBRLnKRglrPAO4mqZgV
+VvhdfP7Oqm4kJlqkalJlJl3lpkKmJhQlaPEkhKAk90ApUl2E1QgEjJ+moUx-aLCV
+VvhRLnDV6n6FwtaLECH+-BspQ9ENan3hQdQ3QRQFQJQNQBQRQ7QZQ-QdPL9OKmqV
+VvhVgpMPBNanaJwtZPDN5nqFh-jBwxy6bo5slTEQao59ro59rnrDrnbFwppTBNqV
+Vvhn5RglcP9OKmahgZfP6P-L5P0P3L3L2L5L-P7Kpn4Nh10pMn+kALM12F+BmwuV
+VvhxXI02E60+T6-whu79QoK9OJqAhZPIGqIoZq2pIpopZpIppp2pm3B7BQWHFLKV
+Vvh6plRMYKppmJ9LK7ZZRMbK4pGVMLJ8JRhEeJppGZaPI8aNhAfNKomlZPG9ENKV
+VvhoGoKFh6h-ZPF9FNKo0oaJg9HNJkhBZP0oqJf9INKchFaOGpKNc9KJqQhNbNmV
+VvhpZVa9KKZIhROJ0pphH9LL3AhRB309LLFTLLHLLLILKHLHJHMLGLM6JlBYXNpV
+VvhqWPFqmeBrm+U204kOBY9t8op92LlEwQxnpqqqpr2r3r2rIrHrXrj9T2BDwOgV
+Vvh7rlrjqmXkTP89-sqmWkSBgcg5XP89-sqmWkSBgcg5XP89-sqmWkjL891xQYgV
+VvhHpm0lJlmlolWm3l0mYkmn2kGnXgx-4LGkBNx29-dqUjYfHIgFT31p1rIqpqZV
+VvhqZqZqZqYqoqoqnr1r1+-+jlekbT5SzP8D-xgcg5XP89-sqmWkSBgcg5XP89-V
+VvhsqmWkSBgcg5XP890xQcgDpmGlDL693L595H496L298H19AH-9CCno2NR9+pbV
+VvhoP-iqkjYfHIgFD30nlrXr2qbq22xR1DJBXonQx6tDECmnmkW+-7DlekbT5SzV
+VvhP8D-xgcg5XP89-sqmWkSBgcg5XP89-sqmWkSBgcg5XP890xQcgDpmGlDL693V
+VvhL595H496L298H19AH-9CCno2NR9+pboEg4XQ0yGhBGl0wI14G1o4NQtpTAy2V
+VvhXAV5naNR+tA+3Gz4f0RwRvxgcw5qmWkSBgcg5XP89-sqmWkSBgcg5XP89-sqV
+VvhmWkSBgcg9pmWkzL792xQUgJQQgRAMgVQEgdAAglA2gsvDEFZog1KTF0kTRo9V
+Vvht8op9YHlExExxBpRlRlRlRlRlBpBpBoxsxsk+EvwP1kJX8San2k4n1kLmXkbV
+VvhmWl4mGlLlmlblWm4lHm4lGmLkmmbkWn4kHn5gwpv9DOWo4Yh3rDFRXoqMhFoV
+Vvh9JQmpq6xRW9MbNXPxhlRnWPQLQsar3rC7hlRnWPPTJz4nf-KrUc73WocATgkV
+VvhkDlgxxLXPJsapgP7mQReP4OqlKhwDqkKkzP-TXkKkbk4kqkTP0T-P-T-P0T-V
+VvhP-T0P-P1P+P1P+P2OqlKZwP6lwT7sapSBhLWPJTDz5mEgBLT2GlOHIcnyX57V
+VvhSFlrYQP+MgH+MgJ4F1koN2D2Cm7A6v6YkYkKkIkKkYkak2kakXl3k1l3kHlJV
+VvhgwJQ-AMvH4D-D5CnlnkDH5CYlnjXH68Ym0kDLHLJPGPITFTHbDbFkQj-ngD7V
+Vvhkwn2mAH9lAX2mwH6lAn1mQDCkAn+oco6p5oLp4oapSBRBP96KGm3fW97GGmIV
+VvhggYu97Cnm2YwV9D6CXm1k1locwRA-AMvH4D+L3CplHkKkohgBA3g7A-g7A6mV
+VvhCnkX6vD1B2RA6oFol0P-kmP-lFdwMOT6g5mM0yGhBGt-wI14G1oaNR-pTCy2V
+VvhXCV5o4NR6tA+3Wz4kw3MmbdglA-gkw3wcw7wcgFgYgJwQgNwMgVgIwVgIgZwV
+VvhAgdw6glg2wlvDBSmnqch-d9FRnoLMxBa9IR0pLAhRWDLMWq7qMqzPQLQsar3V
+VvhrC7hlRnWPQLQsaqrpTlgsA-Os+UhU0ISAjYloXrTLQPQLRHRLRHSHSDTDTwUV
+Vvh2-0RPNYnoIElKoS8GLZNOJhNH3VQJqhML3TqlKsqlKsalLP3NzhK6IlK6IhZV
+Vvh6ZZp6oW36oQlJ0J2EoAbZbdOFQ-QsEUhU0IUAjYlrn+EHSLRLRLRLRLRHSHSV
+VvhHSDTDTAAlhiHDHF13R-5X2ZvKKhPKolOL3ZfKZlNxgKCBgKC7gKKlK2jOpMXV
+VvhH3MXGqIYKLIZG6IZFn3I7oF1EmaKT3d5k3zW00q+7FskyGzO5TDRHPTNEHq2V
+VvhAxMqDIBnonYx2v9E9F69FhaHDFF13PFsd7SJZdKpZAK3lLOpVQJzP3PXP3PWV
+VvhP3RgJbypMVH3MVGqIWKLIXG6IXFn3I7IF1EmSKSZd31+LyA69M+Z6Grt9BIvV
+Vvh5HOGocQh6nBWoWMnDG7soWZhAPAAphmHDIF13R35XEGLlNP3hQH3hQKahPL3V
+VvhfqlNsqlNsalOP3MHxfJWFAJWF9NGJNRGN6VGN5AJEcF2B18dNx-OGA-Ot+UhV
+VvhU0IU9zYioYUxBaLFRLz6GAV5oKNRAtA+21PPYnooElLEFsl7SpZfKphAKZlNV
+VvhOpdQKTP3XXP3XWP3ZgJV9qhK6olK6ohZ73Zp7IW37IQlJ0R2EoAdZblOFw-RV
+VvhtEUhU0ISAzYmq3qcq0IxMb9J80pC6d9Iwc9K7HptqZ1NPNYnoIElKoS8GLZNV
+VvhOJhNH3VQJqhML3TqlKsqlKsalLP3NzhK6IlK6IhZ6ZZp6oW36oQlJ0J2EoAbV
+VvhZbdOFQ-dtUhmtXAg5zcSr1Nhx1jPMYJBX7DJEbcx7HP1oJFgD3NR+uNooHZMV
+VvhLECJZB+tKYh7KoO7KxCqix7gHNLEHMP3py7h-BRh-RRh-REGP5om3gTG6piBV
+Vvh2YKa2w7YYVEHcsJH70FYeXF9oLIbOw-4tkRQ7W2O9DcSoqp9o4IvK1Z7G2ZLV
+VvhGKNNNJdJOnNRTqpiBhPYPMLI2pp07RAYHG7JkrGYZKHEjITJsZq5qJqSBRRRV
+VvhJvoB0hD+HyU5LaoV419sAQDLxRNhNRRBRRRBVBUxYxbmqV-xPGipJ7G2NOBJV
+VvhgoL1BgApo17gApknOYFZVBFwnqpSFRNREFLI6Iom7R2YH1N7G2N9jGSUk3DdV
+Vvh-pth6Fomy15QDRHPLOLOLOLOLOHPHPHPDQDQA9hhSxBJHFG2hOCZgtL1VgC3V
+Vvho1RgC3ksOYZZWRHApDPOt3qpp-NREaHH7poGZACoZB-4HHjLTG1+JSc5LaoVV
+Vvh4n1s9xQRkxdBVxN-DJEnonMx2rDECHgv8WoG0XPJjFJIl6GJcsKnRQBakqLEV
+VvhBKkqL1NeFqK5p8nGxhXYLNLI33p0FBAZLF7oktGIh4HFjJTEk2zf-pth6FojV
+Vvhy0v2Ux-aKrJza2WMFvNZo1Ykv4pvopJB36GpcuKnZQC4ksLEBqksL1VeGKK7V
+VvhpAnIxhfYLPLI3Zp0NBAbLF8IkvGIo2NBCxRx6A-0v+Hc4VMEAjclUwxPOplAV
+VvhL2o2o1oHzF9G22ZOS0B47IEaF0JHwaImJHwaKi7OsZfpdPJVFJ9nJWBJ72MYV
+Vvhx37XArWYMA-CvEHc4VMNAjclq1qIpppZpZpZpZpYpopopnq1q10PLKTI6ooWV
+VvhJB+aHE7JnmNQ7JnmNRPWLKsZpjLKLLJVo3IgxK93Ih-49Ex39GAnospYog-CV
+VvhvUHc4VMLADcjolq1pYp5oY2x31D1MuBnYtBnga9F66BRFx6XHE7IgaGmJOwaV
+VvhKWJOwaLIsZpC7RHpp3pJMPJGfpMeJGh48zFGo1Ax4BFB+A-7vkHc4VMN9zciV
+VvhV6CKNLRLxMG3V5RaKHYkl3pbp0BB6ZHE7Yo0JQwaL0JQwaLKsZpi7RPppZppV
+VvhMR-J9DJWlJ9EFWoDFGoXAxCBNB9+PD+69M+Z5nDtAhoRF69HV0ov2hHFomChV
+Vvh6bXF4ao0aA4G7hQYLL7JrjHTsorzHGRIn1GoNFGIaMGsRB-qHFRJoLx3oaFRV
+VvhBXxhBXLHMy7hBWxhBXPHJ4oaFh7KLGJZoJRR-NHEGZhAK3oJJRHBZxD+Oz26V
+Vvhzhcc6mru9BQv5JOGp6QhEnBWp0MnDI7sp0ZhIPAB78PEVdgnEoF8726qK0K6V
+VvhG0JtFmNeJWNPJWNPFj7ZhR5phR1WKpoJdR5phR3OLGKZQKKpMaxOJmNOJWNPV
+VvhFmNPFWRPFGVQB0ZB08DHJw-MwUUhU0IRAjYloXrDLPPPLQHQLQHRHRDSDSwhV
+VvhwEaLpgopJB-MGoh7H3RB34LFJ3oZBh7HLHLmPHLX3hDDoq3hBGPGMaoZFR3YV
+VvhLFJJo3RAK3dOGJlJLHjLTF1+KzA69M+Z619tARwk22rZrJrJrJrJrIrYrYrXV
+Vvhrnrn1CTNnKJIopVB39H2lOHFGJoJRR7KPGJZopLqopHXPHMzPHN4opJh7ZPGV
+VvhJpoKRR3MLEKYlPKZo2ZR7JLKjOTIk3vo00q+7FskyGzO5TDRHPTNEHq2AxMqV
+VvhDIBnonYx2v9E9F69NxTBFJHFK2l9GYlMHFFpoJJR7IPGJ3opDqop9XPHMTPHV
+VvhMaopBh7XPGJJoKJR3KLEK2lNKZh7LEJJp9q5og-SxEUhU0IV9TYgpHgRBd9GV
+VvhVmoXAq9G7XAx6bXG8KolgknrqgppJBFMHGGoo2lPHFGZoJVR7LPGJpopPqopV
+VvhLXPHNDPHNKopNh7aPGK3oKVR3NLEKolQKZoIZRBJLLjPTJ1+KTM69M+Z60ztV
+Vvh9h76DHNZoLJzm2X6Fx3aLHCH+--LqQpZJBBMHFGolAKYoIZR3LLGJaoZNRBJV
+VvhxhBIsqoqDqoqFhBJPGNKoZRR3bLFK3o3dAKpdR-7LGJJpfqbp9-ky+UhU0IWV
+Vvh9zgap-pGomomoz9H9H97YWlq3wR5D4GIl2dQ786HkTGW79GWB8KGF8GGJ7KGV
+VvhJ7K0N6xM7ZVL7pVK83TpMcK3IdGJEdKJEdGZAdKo6eH+EGdA3-8XkpcwF8D4V
+VvhFolw956dmD9H9HwhAhAhERKkMDY6zhcc619uAQIx1pnqnpo2o3o2oIoHoXojV
+Vvh9H277Q6dX+FnB8JXJ7JWN7JT7ZVJ7pVJ7ZZIwbK3kTKJkJVQ5WKJkC7NL-KJV
+VvhMKGJMjJNJWxYZJ7oVZ7pNo8IEmEmiIT0K2KkMTc6zhcc6X9uAR6xBB3R-R-RV
+Vvh-R-R-B3B3B2x6x6kkpkWiA-7AodMBIZM7YZLwaK3QbK3QaKJPmRML1xNL1K3V
+Vvhky7NL0sZZQBNJVV7JWTpZK8DGJIdG4IdJbEfF1719-Z5l3V5k4Lv0DvO80+kV
+VvhyWzQ2-2xxBpxh-DOEnq1MxMrDJCHongh6h2UiZoGaAFnB8JXJ7JWN7JT7ZVJV
+Vvh7pVJ7ZZIwbK3oDKJo3VR1WKJnWKJo3ZK3YZK9pKJMjN7JGR6NGRKR0Z2AYAfV
+VvhZ5oJV30kMDk6zhcc6Wzu9gJ6D4NZl5JzkcGA82T2NZlXYkzZkWiA-7AodMBIV
+VvhZM7YZLwaK3QbK3QaKJPmRML1xNL1K3ky7NL0sZZQBNJVV7JWTpZK8DGJIdG4V
+VvhIdJbEfF1719-Z5l3V50kSTo6ZWoa6I1uAR2x7B-QxQxQxQxQxB-B-B+x2x2kV
+VvhjJkmaA35AohKBIdK7YdJwaKJIbKJIaKZHmRNL-xOL-KJkS7OL+spdQ3NL0GZV
+VvhkJdQ78L0GJkpVQF5P2J6lQD6MZoDLDxQ6uL0KJkKVQ7cH1K2l2VAMcH5BJmOV
+VvhnKmUg4Py0DvO80R++157LFyhJhLXLJsppSBRLWLKJ5mZCwVFFJlsZANfL2P-V
+VvhH2sZkZsw7QBSD-L1Pw-QBg3QBQ7Q7g3QBQ7Q7g7Q7QBQ3QBg-QFfL3SJlZ2aV
+VvhL5Ivm3JgjppSBRLXLJxR1wH9g7Xz00q+7GZ++H5DXGkgt5LACZmXk3m2k3z5V
+VvhH-LwNQ3QNA7QJQ7ANQ3QPpkIlZkIlpkHm3kGmJk1kg0nkvgwdOD9xNDAxMDAV
+VvhKHnDKImzKJmJdgVOT5KrljL+P3L-T2sZkal3kKl3kal3EcP2IoNgJGJZlZ75V
+VvhH4InRARIBIm3KgZLP9HMxRXWHGAooZ7B3WDGMIoZ6xB0DJTLHL0kRvU6ZWoaV
+Vvh6Hru9gF6D3NZkrJzkMGA42T1NZlHYkxZkmaA35AohKBIdK7YdJwaKJIbKJIaV
+VvhKZHmRNL-xOL-KJkS7OL+spdQ3NL0GZkJdQ78L0GJkpVQF5P2J6lQD6MZoDLDV
+VvhxQ6uL0KJkKVQ7cH1K2l2VAMcH5BJmOnKmg+opkRQ7W2G5zEUp-omoWoWoXoHV
+Vvho2o2o2o2o2o2o2o2o2lR5poJoTHGHGDGHGwxAxAhAxAhEL1+BjQ5L0MV3-vrV
+Vvh5r9K9JDJ9JDJDJDIHIDIHIHHLHLHHHLFLFLFLFLFHGHGHGDHDHDGHGDHDHDIV
+Vvh5K1E9W66CmUZ4-PnAJGINbNDVMwdGHVMF-7Y2i80gcwf8D8mUf80gc8mUf81V
+Vvhcr8mYQ4UY+ch-PZn4V+2yF2RER+gL+Uv80IM3iolYQ4Hcr8mUf80gcwf80gcV
+Vvhwf8D8mXmgd6IMVFCC3UrNoNqN7FUa+Zv00q+7Fw0yFDIK+Zw23g+GHw0xlDMV
+Vvhw+xdN4JiR4ZaOKJm63FBJ2bk3KBjN4ZiNrBXO4JhNG-INJUUR4JsRD+ANaxiV
+VvFR4NVMqJWSLFZx+1e++1pxjPkV
+Vv+V
+Vvend
+Vvbytecount 18872
+Vvcrc32 41c3d9db
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.622pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.622pk_vve
new file mode 100644
index 0000000000..cfd10615d3
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.622pk_vve
@@ -0,0 +1,560 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.622pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAHAr+8+++7YkSl6+07iG++WPYg-YMEUhU0kY7zQZp3ruqpIoV
+Vvh9HJn7B38XEGslQSpo5dR3ePFOZopZhBMTGKKopXropVhBMsbopTXTHK4opbWV
+VvhPHJdoZMlPFNX7R3aAZo5MmL6IoGn3JB3YnFGN6B2ErFIMnCdZx-R-41+La65V
+VvhL0Mc5HrqCuLJnHnJjOxhfXLOspqiBRfXLOJalIeZ73GJ2sFp2tJch4T3Jh-IV
+Vvhxh3jBR7iAZoqslLHnWor3RBWLGQjHHMzHGN2oKJB3LH3VAGIh9CYo1VB6pLIV
+VvhfMPHk2pX-pka8-wbxmLJTMoBBaHFKXlB+tLFC3o3RgNalqLERKo4Jh7JPH7aV
+VvhqzTPPPsbqiFxjWPQPO2ZqH3RUmPKEppIJBErLFGIlPJqoh5KXF1+TqE69M+gV
+Vvh7nrrCk33rwrQrv+IxU3CBE3CBE3CBE3CBRZKLLd3pJInLIJn7RB8XHGsoZlxV
+Vvh3R-x-R3h-h3h-RBQPHKroZlhBPxxBPPHKy7xBOsrophhBQsaopMnPGJXFh3aV
+VvhBJoKMpLERXJQVHR9AJIrKHB38IUoF1d3FXAx0NTHLEGEk3BZ-pka8-wbxmLJV
+VvhTMnINXoKYwL1dR+tLFC3oXRh6qPHBKp1JhApTGFKoYJx-KSLTNbJoDTPPPt5V
+VvhrDPQPN2aq13hQnLKEppIJRAsHFGYhQFqoh5KXF0kMqM2u-cO8Iw1DBBRSBEoV
+VvhDGBXo2JAx3PCF5nJBwt2TBJJnZMwzppyFRTYLLLFmAb7mAXELLtJpyFRTYLLV
+Vvht3pyFRTYLLspq2qC7RVAwqLCJInaJApoLBR2naIwxJHEBXoXExGBNRH+RqQ5V
+VvhL0Mc7HXw7RVU28r3Io9IJn7B78XFH5o3lwLESpoKhh7OxhBNTGKaopbropXXV
+VvhTHKCBxBNTGKjPHKaoadh7QLFPDLETEKroYcVLHFn7RF2EppOBRVZI-Dp+GspV
+Vvh+GxR+xBAPFL4o3lx-B-wHFP2oohRFMPLohihYA-qO+UhU0kbDTcvoJrwrQrvV
+Vvh+IxU3CBE3CBE3CBE3CBE33RxRJjJIpJBFGCIoZ6vHFIHlB4B-B3x3Qxx7QPHV
+VvhL3p3jqopnpp3jWLIL3opnpp3npoplRFQsZopQy6ZopQnLHFnBRF5App2QYLIV
+VvhFXFRF3B3pXEpLLVnqYX+FKY2u-cO3HftCBAxFR7zo5oZp11uLFX1EuBIYaG1V
+VvhNL7pPnRJsXRJwrLGsZoi7R9WLGxR9WJnLWJnPoQrFmV4C2IuB1mB770kL4c2V
+Vvhu-cO6Ig1CB+x3QzrnLnpoH+-Vpncn1EwcaH682lXVAItH38JlDCJkzCZkjCZV
+VvhoDLDspnyBQzXLDspnyBQzXLDspnzL2CIkqRQBbH1RYl5JQFaH3JYlnJAegpQV
+Vvhk9-yOkRQ7WUZDTcvkZng1AkAuxDqoyBRDXLHspoyBRBQBQ-Q49KoEuKXJMKWV
+VvhNcKGNsK0RsJmVcJmZcJWguJGnJEgpI9CImnp6h0B0B5+nJ4AhJL7Jpm3ZARNV
+VvhL4KZl3hQHWKpUosZhMBJhLBJk3QpL-FmNQ34BZkXMaL2B0RQJtD5KR+oP+EKV
+Vvhk-MGDTUvlLlQSwxgspnXLCBQspnXLCBQspnXLCBQsplRsZMnspMoxJBYIbF1V
+VvhUnCbp71+aaoB3Nd4E0Tt7KLETGTHSfix+nBpJ6JIgoFHZ4CIcpEnh2CoUqEXV
+Vvhl1D2UqEHo26x-6BMoMoJPnNx7x7KBaoqopMqLILIJTBaoqopojLILILFsZp3V
+Vvhp3oZp3opojLILILGxRFRBR7RFRFR9WLILHJnsZLILHJnNRFRB5BZp3p2QqLIV
+VvhLIFmRRFRF4Bpp3p2IrLILKB1VRFRS8DKDOG+k4pi0DvOA0cbyGJZo5orex+nV
+VvhBpJ9B2ItGXJ1CoUqEXl6BY2x-6BMoJPnNx7KBaopMqLIJTBaopojLILFsZp3V
+VvhoZopojLILGxRBR7RFR9WLHJnsZLHJnNRB5BZp2QqLIFmRRF4Bpp2IrLKB1VRV
+VvhS8DOGA-OPkUhU0kW7zQZpLqwpqJRFNHFL2lR-OLFKKoZRhBLLINKp4x4pKBhV
+VvhNj7xNWPKTW3xPFshNlTKMbpL7hNXPJQqpKFhJKLINZoqRh7NLFKZo3lPLFGJV
+Vvhp3JhTBhxI9-uQ+UhU0keBzwZk3k4lbagAnBYJA2oF1VA+pEXZOBY2vGXNw-NV
+VvhBLkJXnNg7jQqL1PqBZl4z1L2PXkZl5sg3QFw7QFg7QFw9pl4kpkqkqkqkqkaV
+Vvhl4kZlKkJlLkIlchARF8Ym32sH6InJQZIf9JanJqCBRXXLMsZq4oy93nEk4VlV
+Vvh-pka802rxmLIKVoOQgJHIvJnB8GX38Gn37L5VR-rLFNqoKRRBKPHJLoZNhBJV
+VvhxxBJPHJS7xBIsropLXPHJaoZRh3cLFO3o5VQSYi8KH3PG17QFI7R8ILIJZrpV
+VvhriBRvXLSsZraqBLFzKOkFL64jmAY6WTt7KKrdshnAqFYEoF1V2BI6sMXN-C5V
+Vvh6qSL6pSa6qSa6qP+B1NgQqL5BalnNR5poCBR1XLEspoCBR1XLExR6wz+JbA4V
+VvhWgoX5GTu7RCBPB7KHEGXgx+tHECHo2VAK1lbH4RAK2o1bpqrqQpR5HoRDFoxV
+Vvh5JnMXOTOPPJHopFR7HPGIjTGEqonFRB2DJBXonQx6tDECpRR5EpMoQ+yR+JEV
+VvhlVoMBzUpoHpy7RLXLJsppSBRJP+tbXLJsppSBRLXLJsppJpjKnJOBJgpKmNOV
+VvhBjKHRMCIQuFXkpDFbIL+k4Fp07Mh9WUbyGK3+IXKCHExFLBIopQaHGJnNR3LV
+Vvh7poJMrLFJXRR-KsXRR3JwrLFLGxR7R7R3R9WLGLFspoZoJoZoi7R7KDWNR3KV
+VvhBpo4MrL5ItH5ItGm738oYXF1l3FHAx4rTISoMA-RRURQ7WUX7zYZVREsXGJXV
+VvhEx-ZBIi27Yi1BZhn7plWBplWBpo3wHRR3FBpobxponfpp1dRAusZp1bWLICZV
+Vvhonfpp1fponjpoXlR6h-R2h7B+x7B+hF99JGWppMxexpx6A06RkeVXHYo7zYZV
+VvhVE3HWBIvJXExBNNHJB7MV0NB3NUnNR-OQmRR-PMXRR-PMXRQLELlBpo3o32rV
+VvhLELFTrLELGCjLFLGCZo3oXfWLFLGCS7R3R6uLFLG8jLFLGCZoJoWjpoJoHhRV
+Vvh3R+wLEPED3o4o0oIlwDFH039DHGX399JG1B79LFXJ4DNhvr5hx5EM5U5P-IcV
+Vvh80Tw7ROq+Fdul2FHJ8BoAbGHYmBaQuRbMvNrMgNqMwK4MhKHTnpE3DDJ+ZxEV
+Vvh7CBE7CBE73+ZsZok33orCJoqK3kqNqkpRqgqRbcrNm778IQnBngpBXIxa7+GV
+VvhOar+TrY5lBAe7HXt7MI-4BMqB1p3EpHHJ0NB7IBZoJEbLFInRR3HBpo3DWBpV
+VvhoJ9nRR3QxR7QLFLC7R7PspoZjXLGLC7R3R-R-h-QPGH4oYhxB76Jp2J-LKgZV
+Vvhq5FE2p+GxE2ooXoJoJo2oLhR3vHGOooqdRBAHID2pHhBQsHOBJr8rrqkg3tuV
+Vvh-cfB6m6bymL1H-9-Snk7Yw0sCw3XhJFHh7eni9H1D+D1D-D0DHDGDGDGDGDGV
+VvhDGDGDGDGDGDGDGDGDGD1D+D2Cnl2cwIuD3GHlXaQ-7iIZ3JJYskNGA0XeeD+V
+VvhWnkJkQ+u2+Hc4VcI7zYZVR09B1YpG0N5BZMbJTBpHWBpHnRR5WLFsZoS7R5pV
+VvhoS7LDWFLBTFnN57oMrFHYoCsoIX+H-23IAMR5XU17RRheBR2DJBYonVB2tHFV
+Vvh8Yo1ZTkuLvCpyXhRnpqyBRjXLPspqyBRjXLPspqyBRjpkuGqVPO2hrH5NQNoV
+Vvho3RB73HJjMPLgA6N07Mh9X7D+XnKbOkhNbLHKooIkJnokonZkpnIl3zAL3HXV
+VvhmplJmZlZz8L3L9L3HAL2L9xQJAnpl2nJkolg11H5kA7AX+kIoDL+HEL+HFKpV
+VvhoTKooZhR1pk3o3k4npk5nZk6n3kbn3kcmpksmZl5mZl6mJlLmCFQNwRQRwRJV
+Vvh5+T6J2dwVHKamJBNP7J2dgZICamZEuL9JGZQl5BJnJWwtOPFI-3+2S7E2IqHV
+VvhJRVILLN2prBRRnHMN1qJFBcaDPAorL+ELS1+ZVc9QiMyBWTt7E2XVk3ZH+33V
+Vvh7aA-0-GXrN3ADNIcoHpqBx6xNJTGDIJbonoaRhEx3NPID4dREwOap1hfLHGqV
+VvhlR3PPEKblh1Mo4oRHHTFLSTGLSPGLSTGLSPHLRTHLRTGPQxxBhlx7xUGTHTLV
+VvhALocpn3x8BMnPFbJB4o9onNQUHoXRPAJ3AGJYmIXh9NI7IFZofFKjKRnZx1+V
+VvhXVg9QiMyB0Tr7RFhFxOh1B7JCaMx-LC2cvGXNACIh2DFC3h1DGBpo23B6qLFV
+VvhXHBKoLp1JR7xEoPGPIB5oap1FhBRB2THLFJLoadrPHq6THpAxxBRfWTHLPTGV
+VvhPPxhBhhh7xhh7xUGxh4BQmLEEIpXBR-0DJB3l1HHBYh3DGBpZ4H2Z6G1h9FIV
+Vvhh4LGfFjKPJTEk7MQ00q+90UryWo-cT+N6-UU40+MwU40r5Ihim9OJI2hVNHMV
+VvhH1polRJB-hBB+VHGHE6Zo3o0BB-B+YH3kZGzL0N8L0R8KmROGmVNKmVNKWZNV
+VvhKGdMxN8ZZM8pZL8pdK93dK92hJ93hI9EH3Ah-QImo2oI6h-B7-9EHILEHJL2V
+VvhpnlBV8HNNJqW9BcZTQwU40+M6-Xm+M6-YE4Ug9+90R+nBIFD+nnLT1PNkA0RV
+VvhJaG2IxB9BYQx39FIRB-9JINgx8QpJwtNR2Jwx8QpJwtPJ3NQxQ+pJnnpmIqiV
+VvhBQVRbYL6LNsZm3ok2Qc-99+FoSBQVRZQZRbXL6LNL7LNspm3qJmJqSFQVRbYV
+VvhL6LNt3m3qSBQVRdAZBfWL6LOH7HOxQVR+rFnhB-KFZZQxZJKZAxpFLZAxpFLV
+VvhVB-ZFaVB3KC2VBAqCHVBIoCoJBSA4hhQFhWUa+k6zhckBYw1DAaknPP6OJlJV
+Vvhh1kphIkJhJkIhLjohLjphLjphZk2i1kC7RLYLJt3nwSsz6jy7PNPxPRPzXKqV
+VvhKzsphZk3hJkC7PNQ1phJkDKqL+KpL-xPJKCrKqJXhyBPJKCrxPNJCsKrFGiJV
+VvhhoEvZPUnCtKuSuKwGvxRNBPppYnHRAlJL9NImrJAhoHANIn3MwsqDEB1ocp3V
+Vvhoe0k1EZbVXAuHkAwmNovFIlKV2L1GmAZkogo3Q79BFL-GngQ-P8lkIgv5+KoV
+VvhIJk3hH7Q-PZQ1WKuL+KtL+sZiZkDKtL+xPdQ-PZPf8iQiumg1XKtL-KsL-sZV
+VvhiJkTKsL-xPZQ5WKsL-KtL-spi3kJi3ki7PVKCtKrJXiS7PVKCtxPVJCtKuFGV
+VvhiZiYEvdPgnCvKwSwGzGwsZqYqjLEBoo3NAxZLCxpHDNIo3Mx6qDIB1pcqJpEV
+VvhcDEC1Vh8H37D+nn6eqggmogPX6NoZuL3KlBphHkpgYJ9RA797IGrP+GmQZhbV
+VvhjpgL7PNw-97mKqSzKnIZi3k3h1BPYw3PdRTXKuLLt3iZpqiJqDKuLF+Hi+39V
+VvhY-CzspiZi3k3iZhpkC7PdPVQ1piZhpkDKuKsL+sZiZhpk3iZi3kCBPdPRQ-PV
+VvhdPRQ5WKuKrJXiDKuKqJXiDKuKrJXiDKuKrJHiIiZiIIfZPdPZ2CtKuKuAniZV
+VvhiZiripiYjYiy7PdRV9hBXpiZnXR5ClHCJYNOLBNJJeHBRIJtLBRIJtHCNINdV
+VvhHDJXV7HFBXYtHHB1g2JRK98kqJhLpe2B1ktDc2pIHkAwm6i7of8nh3H2NodcV
+VvhF3kZg1V96mL0GlFogo3Q3P-KGnIJkIg5F9Clk3doKmgQ39-oGngQ-P3IKoIJV
+Vvhk3gXJPImL+GvKtL+sZiZiZk3iZiJkC7PdPdQ1piZiJkDKuKuL+KuKtKu+IiEV
+Vvh3Pc-H+spiZiJkJiZi3kS7PdPZQ5piZi3kTKuKtL-sZiZi3kJiZiJkSBPdPVQV
+Vvh3PdPVQ9WKuKsJXiJiZhpMvbWKuKsJXiTKuKsJHiJiZiYIfdPdPd2CuKuKvAnV
+VvhipiZj5j2iojojC7PdRd9hBfpiZo1R5ClHEJYNOLDNJJeHDRIJtLDRIJtHENIV
+VvhNdHFJXV7HHBXYtHJB1g2JRS98kqphLq+c6J-0yGhE1MxynnBDLxBPqpDTHXGV
+VvhyR5uoDALnn7wt0TCArnHFwooX9wqT8BrmIRwYsT6wtT5wuT4wv-wIv3wF93wV
+VvhEv7wDngskTCpT+CqSzGqSzkPvw8xwvZvkvdvh9dvgvhvfnj5iHjMi1jbhzCzV
+VvhSqD+SpH+SoL+SnP+Slaxa9KpiFhvDAhPYP0GEUh15HotCzgukxL9qQbOnMlMV
+VvhnLlcmrm6mbmLmbmMmLmbswVwhzlrn5z5T9X4TAT5T9X5T9T6T8T6T8T7T7T8V
+VvhT6T9T5T9T4XAT2XCzFnrlMnLm5mrmLmbmbm5mslrn5lrn6lbnLlSBwtwFwxwV
+VvhHWTCX1xwuAHrnMl5nMlLn6lbmslrmclrmcm5m7m6lOkxn2qwTLmEc7710r9aV
+VvhDXcxx1j3ao50h92vutYvqcJoish1JPdvQoKsSuAZi5j7hqjdhak6h5kLh5kqV
+Vvhgrl4gqlKgalZgblZgLm2g5mIg5mHg5mXeAcuT8GMmXeAgdscpi8BPYXLTLyBV
+VvhSAgeyAcv1WT7ClxwUvBgQvHrlHhal1i4kXiKkHiqjnjKjHjqiYkKi2krgpldV
+VvhVwatnPLGb30kXIEA35N-DHjvCgDJnxbBqR8AGR3wOAxwZwtwdwpwhwlwlghwV
+VvhpwdwtgdwtwZwxgVx-gXWTETXlboLswJx7yD2TGX1THT2sbockrorl5oclDTGV
+VvhT2TGX2TGT3TFX3TFT3xx3wNx-wRx-gRx-wRwxwVwtwZwtgZwtgdwlwhwhwlwV
+VvhdwlwZwtwSAuAGQbOmhbBpB0kY2I8qb+uCXjvCgDTkU2ADTmMlumbmbmLn4z7V
+VvhTBL7TCD7srnnmDTED6xwwwVwAfD6xw6vD6T0DJxw6xPrkIpLkIpbhhPwnJnBV
+VvhNvPKxw3BLWT0DKT0D-94sbkXkHlboHlboXljTFD5TEH4TFD5TEH5TED6TDH5V
+VvhTEH5TDH6TCL6TBL6TAT6T8b5X5j-+Fk+2Q6-1-0UOoM8QQAsCHjvCfHDgx0oV
+Vvhnve9SfhvdvdvljibjJibjXiiBvwvbrk1iTSzCtT+CtxvAuCtSnD3sbgnlbgYV
+VvhlLgnlbgYlbg4lfr3yxlbg4lbgJlSBvAwLWSnD4Sn94srpiBxPXTKxxOQuxlPV
+Vvhz3jQI90NFklUgYAtDTEvotkloAGnnQSHn7VaH8X0F3m6lHFQRwUmL5P9b3TBV
+VvhX2TCX1TDT1TFP0TGP-THP-PIL-TJH+TKGrpohxQvTMCcq1dxV7XMCcqGbWU-V
+VvhHWU-HYU-Jk3TX9mYX9mJXHaMp5hxFvsrorkKobkjTFT1PFT1TDT3PDT4PBX4V
+VvhTAX5T7b7T5EJmrkpBAmNNInQdmoAKlp8of-TG+jYfI-2CzgukweAf1n4nAD8V
+VvhX8mdmNobmroiBwhx9XT9TGsrmroiBwhx9XT9TGxwhxDxbGqRDWT9TGsrmroiV
+VvhBwhx9XT9TGsrmroiBwhx9rmrocmcmweAf1n4nAD8X8kkg1R7-Wgu6GMvynf0V
+VvhzAkgj8bGTGsroiBx9XTGsroiBx9XTGsroiBx9XTGsroiBx9XTGxx8Afwn0mwV
+VvhA9-CGUVaMmohDDYumi99zHXNsrqSBxbXTNsrqSBxbXTNsrqSBxbXTNsrlpkLV
+Vvhlrk5ldhwOPP4arldhgS9T5T+P7H-P8D-PA9+PBCanoNhD+prou0kGklBKY72V
+VvhCzguh9inhfCxgPSoivCqidj90zSyT-SzL1SyL2SxH4SwH4SwD6SvD7SuD8StV
+VvhD8SsH9SrHASqDCSpDCSpDDSnHESmHFSlDGSlDHSkDISJp5VhBsTHRtobOh7pV
+VvhAMo5F1TEQoFx-mBrnr2sTCQHZwuf-wqP3wpvBwnrhLmrhMmbhbmLhrmS7vVwV
+VvhTWSuT4SvT2SwT2SwX1xvpw9rjck6jOi9imi98xg9aniv8sgUg3dA0UYKBX+vV
+Vvhynf1nAjCmwnGbQTQsrrCBxnXTQsrrCBxnXTQsrrC7xpwoQ9WTBD-TAD-xwowV
+Vvh5rn1kLn2kLn1kjT9H-T9H0T8L0T7P0T6P0T6T0T3b0X0k5rKrMr5gD7B1ZWuV
+VvhHJ2vynf1kxT1kwHKlQD1pgH8fIfGbIbGAKotozAKoX3hAlPFAaoX7h2lPHAaV
+Vvho17hDn7gwnPGwoPBAqonFgkoPHB4mnJh6pP9B4ozBKmXJhApP7BaojBam1NhV
+VvhDnRgMrPGC4lHRhDnVgEsPHC4knZh6tP1C4onZg6tPHwtP-CaojCqguPHCqcvV
+VvhPHCqYw-h6w-dCqozD+O1k4onk4Qw3h9nkKMw3hAw3ZD0PHD0N1kaoXkqAw7hV
+VvhDnkq6wBhAwBVD2PGD2MHkqonl7l4onl6lKoYl6lKoYl5lKoZlKlKo7kplLmwV
+VvhOoj7kwWYf9kwOnkAb10kaos9t8p+F1jvCgD0mAP1lAP6kwD5lgiAiR0QlR4gV
+VvhlB8gkxDn3wgx6mT8DHsXBwYx9nJwQxDnNwMx6rT3DHsXVwEx9WCbkXonhw2xV
+Vvh9nk5k1ozD-SnoXkbcxDWD1SHoi6wJrDHD4RXojD5RHozD6R1oi6wdmDHD9QHV
+VvhojDAfHwwqR6wuBDnnroYnroYo3oZo3o7nZmwP9H8mAcwn4n0mv0MHkl2E26rV
+VvhDTEvotrgHMS4p4kKoJl4nalpn3mZmKmqlqnKlKnal4o4kaoKkKobhxBeTIOaV
+VvhpLVxJzRxNqTLRMprJxVoXMR5qLCBZnXMUrqMsWXNXX4Ba0XMUcqM9WXMUspsV
+VvhGBRpXKVMpbRxK5TJS5p5ZxC8PHSroLk5o5kanrkrnLlKn5lqmbm5m4mqlqnLV
+VvhkqoKk4p5RxX3rdoUc47E0hdkCXYvyneolPr7iwb+WoazSqWxxvZvnribii7vV
+VvhlvZviCCsSwXvRvm9VvlvZvi9Vvlvbriribibibiaj5i5jLhcjbgtjw9-jwHrV
+VvhpiBxPXTKsrpiBxPXTKxxOAyvlvr5iwSkkJ2AF2-0BoroCxCRv2q5VhFg3h3QV
+VvhFgtgNglQZgZghgRgpgJgtgFh-g7h3g3x3vTGSbp4dhJsTJTrTKRbprKBRpTMV
+VvhToXMQsqLwsq6sWXNXX4Ba0TNUcqM8BZnyBW1XLVDXLRMpbRxNrTJSDTISakJV
+VvhkLhfWrk5Yp8LkaUc84krQd7alKMe7KlqIeAqm4EfAKmqAfbBMWhx3V8Kp6RxV
+VvhT6kGn7BA2hVA2hTpk0q3gxXqYxZbHONKqjlBj1rA9SkByk2N+IL5g6xG0uj8V
+VvhDnYwynf1oQzKnBTEX-bET2XBT4TBT5TAxwVwdwaAbrmbmLmMmCBweATrmcm5V
+VvhmbmLmLmLmMmLmLmbm4n5lqn5lbnLl5nrkMoQrHnBJw3hBwBR7wFR-wJgxwNQV
+VvhzrlanSBwRwjXT5T9srlsmbltmjT5WXdwS88bmLYuT7SGeAdcAwf1RXDAkqIpV
+VvhmgOk35SkYpA6zhck9nruCwu95AkbD8l3D7O3BAVQ-0H5H1b4H3T4H4T3H6P2V
+VvhH7P1L7L2H9H1xQhA9WLAD1L9H1L9D2P992xhpxmRexb0pQLHlx56oAXFlx94V
+VvhpAHLkBehiBlxrrrTP+9DL+snnpjonZk2nYkInJk3nIkKmokamZkbmIkcm2kpV
+Vvh2wJQF1H0L3BKVgN4lgQtkgYg4AmUMZE9QiMyBHjlCbozPIO93v43SnSnNJh5V
+VvhhJJ9JvN2GqSqF1hrhXF9NvQowvRvQnCsSrAzCrSsAjCsSrAnhri19ni5i1jLV
+VvhoiBx9XTGsroiBx9XTGsroiBx9XTGxx4gT-jQCwkfk8-fJEjYfI+sDCwuCvgPV
+VvhQvqfYvilhuawapSzKqT+Grsbk1hyBw+vTXT+Crsrk1hyBw+vTXT+Crsrk1hyV
+VvhBw+vTXT+Crsbk1iDSzCtSyCvxfovlfkvpfgvxPcw-fUw7PQwFPFANP3QVcP8V
+VvhhgumocmUc7FK0yGhE1UwvXcParhFifT9hvJtk7g6kagckZh5kYhLkXhjT-CrV
+Vvhxw+vVvwvZvt9Zvsve9kvlvkvlvgvpvd9pvcvvriHjri1k5hok5hnkTWpD1SoV
+VvhD2SnH2SnD3xv6wNv2wRv-ARv+wVuD7WHmbUwhrH9RnnDRXnLIwtoHCR1nrAxV
+Vvh00DEUHob2x8hDtpDXJxxNhRRZBYws9XvJkzvPJNCDCsum8m9qcmOqdmA12OgV
+VvhWQWeT8TAP+xwdwlA7wdwkwDrmbmnl5mbmXlLmMmXlLmMmHlbm7mHlbm7m1lrV
+VvhlvlYlrln3wMwXrlX7wIwZwInT2D8T2Erl1mbl1FwAwiA6pT1DAT0BLkXnLkHV
+VvhNw6wpw2qT-DCT+Brk2nbk1Rw+wxvC5hAxvC5gx-uCLcx3tGLcx3tCbYx7sGbV
+VvhYx7sCrUxBrD+S1orQw-rDIRXkLQxFqD-RXpLIw82HJRHkrExPrEwFnDLQnlLV
+Vvh6xVmH3QXq56wNlDNj5QHqeluqtm8qtm7r6mNr6mMrLmcrLmbrjP9PTxQlE22V
+VvhnI+FDCHNc8dM0yGhE26vz1epiP4rh9ifWpiP0siv0qgA49ZwG9ZQO9ZAVvVAV
+Vvha9Qwe9MwlvIwq9Awxv7Ay9-B08HGSXosUxG5DKRXpsFBS1HNQYqf5PgBqRu+V
+Vvh25+EscrtrOr13xh-XNEcq2FxR3XKBcpHVxEtXGGboIg6nogMnYgrnXh6n1hMV
+VvhmnhrmXi6m2i6loiblYislHj6l2jLkZjcjsjMjOiv0rhvKtg9Woif4rh9ek0UV
+VvhUpY9t8p+CHjjCVifX9hvMPashbb+ekX0OoT0KpX-CrX+CtSzGtWxGuWwGwSwV
+VvhCxWuCyWtD+SsH+WqH-WqD0WpD2SoD3WmH3WlH5SlD6WXmMYwhsH9VYn6JAq3V
+VvhDDUno66x4-HGgBChGRPrpqpy7xRhTWTLPLsbpqpy7xRhTrpcnvj5jAWvl80OV
+VvhKUbEAnIqCzcuhgfvL9hP4rSpetSqWuSrOvSsKvWrKwSsGwStGvStGvSuCvSvV
+VvhCuWuGtWvCuSwCtSwCtSxCsSyCrTHXHTHTHTHTHTHXGXHTHTHTHTHTHXHTHTHV
+VvhSr8zSrCySsCxWsCwWsCxStCwSuCvSuGuSvCuSwCtWvGtSwCtSwGsSwKrSxGrV
+VvhSxKqWwOpWvWpSuapSrgfHAgzn9GUGU+80FMqBnjvCfHBgwuonPe9OPhvVy8uV
+VvhSvKuSwCusrjHiTSyCtxvovbWSyCtTIsrpCBxHXTIsrpCBxHXTIsrpCBxHrp7V
+Vvhn9r1jwCxku0P+EoJaYMtDTcwnnqZqDPLTKyRGhCkoY3x6mXEAsnoCAwoXCBbV
+VvhnIOAkrX9C6mXaAZ8T7CkX5ClX4GlX4CmX3CoT2GoX1CpX0CqX-CrX+GsT+CtV
+VvhWyCuWxGuWxCvWwCxSvCyWtGyWtCzWsD+WrH-SrD0WpD1WoH1WoD2WnD4SmD5V
+VvhWkH5WkD6WXmMZAdtD9Vnn6NAm4DCRHnrHPwhkETkg86012F+EXQxx1jHbSlBV
+VvhVsPIP-PFL2PCP4PAL7P7P9P5PBP3PCP2PEP0PFP-TFSrobdxFePJS5pLxrpbV
+VvhNxRpXLRLq5x6q5C4593bC3D7B6C2D7BMsWVQxMslVQxM7pD7BM83D7BM8459V
+Vvh3bDsq6CBS2yBRpXKRrpbRxJsxxFuPHSqobk5o5kao4krnalKnKlqmqm4mKmqV
+VvhlqnKl4oKk4p5VhX3rdoUc5s10lBHD16xynn9DHxB7R7h1rnzXCbBygnn3wjnV
+Vvh7wfnBwbnFwUpT5FLlnNwPnRwIsT3C6kzCMkjCckHg6k2gLk1gbjzCnSywvFvV
+VvhrnhLjDCqSvCrSuGrSuCsStwvZvUvdvUve9PnishTCwWoCxWnx9tv3fq8avZvV
+VvhGmiFhf58gfYEc3+20e4BCHYvyXepni8onzgx0nD7HWgXmXgjD9Cm9A6+4k8yV
+Vvh9+sXjHjyD1jzkw1njHjnjHkGjW+060nWgDDBCksXn1gDH9Clof5x4lof5FgxV
+Vvh0m0UJUI9t8p+F1jvCfHNhBioqPi9mABvlwDXSwT1srj5kyBvlwDXSwT1srj5V
+VvhkyBvlwDXSwT1srj5kyBvlwDXSwT1srj5kyBvlwDrj5ksisj9i9iojKjPGvWvV
+Vvhh806-UhmtXswCzYugxDv9Igsjv4nX1WoX1SoX2OoX3LvKAF9RwF9Tsl1i6knV
+Vvhi6kYi6kXijX-CvyA+viBfsqi8BfsqbqcqLqpr2r2r2r2r2r2r2k1jYkHjIkHV
+VvhjIkXj1l1inl1inlHiXlIiHlXiHlYi1lohnlohnlphXlqhHlbhHlNh1kf4oofV
+VvhDHgjovCUOkQAF2-0BHniCuSyOmg9akenhPBvOnhJhv4rGtetBaWNNWKbVeIJV
+VvhgKRf3-GnJZh12vFJKpOqJ3hKhZBPNPRHGr8uIZnZ7Azp3B1WbFyB9rocoiBxV
+Vvh9XTGsroiBx9XTGsroiBx9rodm9yzkPyzjg0C0+hmtXsmCzAuphrOrxfR+HY-V
+Vvhm+5SBk5S7k4w+Jpxu-QbqaJpPKNrNx7cSKo4ZtSbduOLhvNrhwRLlwR6lwR5V
+Vvho5m0X5o6sVXETEoy9ETEUMo5m0X5o68ATEQslwRLlvVLhwRqhvS5duOqdtPEV
+VvhO5Zh7bRqpaJpPNUb4BvL+Jk-jr+Rsr+Rxk5N+HrRfTqhrK0kVkYAF2-0B1jiV
+VvhCgHCnR1BnhORy+2CBk2DT8X1T0lQ7w4HT+T-Rbk5k5XrhvSTSbhuSbduSrduV
+VvhsrduSi7uSbhuSLk5ZuT+SLdg5qdtT-OLZw7dSKkqZsT1S5VgJbS4laRrP5NrV
+VvhNgZaRZmpJpPBJ5FgxHQaoa50pQHPfTxk2CBk2DQ-0RPCnR1Bngmkekc9QiMyV
+VvhC1nrCxChv4psVxBw7gxwJgpgZQdwdgVgpgNgtwFh-gBx-w3x3w-x88XHSbp5V
+VvhaBFsXJS6p6VxKC7spMsaXJVzXIW6osaBBuXGWrobkDTFT-TET1PEP2PDP3PDV
+VvhL5LCP5LBP6PAL8L9L9L9HBH8HCxAZB+wVB2wUwMtD5CHQtD4CXQtD4CHUu93V
+VvhCXXncgIeCHcgEeCXcgEdGjkwD1j1kw9+kgD1kQ52kQ5+Rn+69M+g7HbqBxZxV
+VvhvBdKLKKJp3hR7R-B3R3QLGKpophRBdLIO4p4VRJjRhJjNhNZTJTpPKR5pbFxV
+VvhNZPKRC7xNnsrpbDXTKR4pbHrpbHrpLLqpaNhJqxhJbPIO3pJZRFdLIKZoplRV
+Vvh7QLFLELELGKpp3VRRJPNoBtxYA+zAEUhU0kSCDQrrlrnzRDRHQLPLOTNXLfIV
+VvhnFYKoLBh34POsqqiBhfXPOsqqiBhfXPOsqqiBhfXPOxheB1QHRLQE90EAUUhV
+VvhU0kcCTYrmrog1CJZmnhAYw3AQw7QIwFQAwJQ6wNg2Z5-P+BGk4jnMg-zYr9+V
+VvhTWUs9+TrC0k5Ur9-S1Qg-tBWkLYp9-SmEg7g-w7g7Q7hNRNRJhJhJhJRJRJhV
+VvhJRJRJhJRNBRBQwcg+wcvD9CXn1YwktHACHn1Ywl7j1GQK4YqmNCQOXj1cw5-V
+VvhgwCg+wJg69-zAkUhU0kcCTUrmsoQ9AJpmIk2loknlHlIknlokHm2k1mIgp52V
+VvhKXIgBS8HMgBS81Qg7O7WkZgnD1L+T1L0H3HLHLHLHKLITBkQv+oPq3qIqIq3V
+Vvhpy7hPXSWmLZAVsP4SDT4S4lbZQRtD7OXm4gwRg2gRQ6wJQEw7gMvP7Frmw9FV
+VvhXA0kRXE69M+g72bwBxEhJBDXLGsZoi7R9WLGxRBBDpooopooopooopooopooV
+VvhozHHxBBBBBF598Fom2VQR5L5G3lYZQMuL3CZlHhQF9L1H+L0H+L0H-L-H0L+V
+VvhH1KvVOlIKQUZVOkK2HkwX5kwewpR9XLGspoiBR9pp1kUg5Ip00q+90MtxnT1V
+Vvh5750H2H0Sakwf2mQH7lQT5lgUlj8BWny6xPXDKsnpXNwcnkAUlJYlqdAJQ3AV
+VvhFA7QAwBg6gJRJRLWPHt5YgRsL4RrlLRwJbX2RrlLRgJsL4OHm4YwReD4P+D3V
+VvhL-D2L1D-P2GqlZOAX2mw5ET9k6Aq00q+90MtxXTRTTnPohVrHKKooqo1oZo3V
+VvhoJo4o3o5lR3vLGOqoolE2p+HM-9q+GxU2b+GM-7qTJRAoLEqLEQXdAQHl8xlV
+Vvh9FKNopWBFLyBJaTKNjTJRS7xNpTJRjPKRapaTqpLRhJcPIS4p4dRBfLHL3oZV
+VvhoIoJoZlRFOLKJbqB9PnTXN0kQ1Q69M+g81boBt7pkmUob-C19+k1UlkPC151V
+VvhYtlsG8N5GMYqK5k0FdP0eJlI37H9CImoZAd7H9GHmoZAh7D9GHmpcghBRRRBV
+VvhRRPppapZpapZpjPJxhJxJhLrpDTIXIxxGBHrp6pDTIyBFxHWXITKLMDAk6csV
+Vvh00q+90Qty1TOXToRjHq4RhNB-BExBB6xFB2xNADLGopogxVC8Yq2ZRR8PKGaV
+VvhpIhxBAXGDFXEDGeIp8RBKpHLgYqh5Rk-0xvEqxDNEvpYOxEufFH8lB4PHHaIV
+VvhpMVBRsHMNoqZQxhKxBhJsYr2NBh5HPC2qYVBcuHMCopno2p2oZo3p4VhTJqhV
+Vvh5SbMg6gt00q+90MtxnT8XEkAn1mLNQROL3L+L1L0H0L1L+L2Kql3dgJcT3O4V
+VvhlaRwNbP5PqT5NblbsZT5RLlbPqlrPqlcNgK6L3W3l7ZAAVSJkG3vH+6bk2cXV
+VvhT-FYFgD+FwJrTHPHTHPHTHPILIPILIL+H2Oqkphw7Q-w3Q3g3Q7Q3QAw7QF9V
+VvhP4JqmQH9kQyAo8047+lCBI6oDjYwn4oOnJIwh796Gl94GmD2GnD2Go91GpD-V
+VvhKpDw-PMvxPQvxPFfxPBzjZgrjpgqk3h2kCBRDXLHxQqtlPf2iQjWLHspoyBRV
+VvhDXLHLIKw8mQZing9GwCPOvCJJvksGKiXUuWsCHd-KpG1d1KnGHZ3OZcsG4NPV
+Vvh6pGkh9GfCkhqi5hUgC6a12F+EXcyxXn9M-KwgwRKD6P3GWlql2gwJwBA2wFwV
+Vvh7A6wJg3AAwNA3AEwQw-QBAMw3A7gMw-Q7gIw3A7wIw-Q7wEw3QBQEw3QIwFAV
+Vvh3RRA7RNABRJABRJAFRBQJR7gJKL3IHl3CQB1H1IKEg33D2ZXgrH1S1ctD1OHV
+VvhYuD1KXUvH-OXQw2w3dC1kHk6UrD0Cq32G1kXdXaX76CaJfAKQtT8dnZgmLC5V
+Vvhn7QsTBS1Rx-6CC7xkrxxksxxgtTOCqqXhhYw-hYg7hQw7hMwFhEwNRAwVR2wV
+VvhdQtAlQhB-QNRC8TMmBv+oQ-kDkUhU0kSDT+wp5pwp2NB38D1o1cx6d9IBnp1V
+VvhMxIpDL7GpnExQzAxUmDMEXq16xV0LKAqp27xB1TGF5o3NR-MDELPLOPOLPLOV
+VvhPOPOLPLPLPHRDRGGojCHoXUxAs9IBXpWIxWBdEyXr4qjXMyRWBdhlBakR1s6V
+Vvh9M+g5nrt8ghAtglwjtmcmrnKnX1oLAX8Enm1MgQrD481lTC1lGUwxAtAtQpQV
+VvhlglglQpQlglQpQlg2sP-JZkbFQBoH2N2lKBARHD7AomHAwcYD7B1mGIgYoD6V
+VvhBWm0QgQr94C1l1cgAvD-D-8oknRAOwdwI91a5EsTpYlACzgupC6-1OAcl7qHV
+VvhCARhYnT7LMB5mJpoFwdBQpT8DLwpT9DKwqT9DJBbn1p2NwkxErT9DIC5mnp1V
+VvhRwkxAsTADHC5kGYx6tT-DQG5kHrHZw2xkuT-DQCbk2qndw2xh8T+HPCrk2qXV
+Vvhk5dhfNqjqhYw3uPMH+T+HND-T+HMD0T-DMD0T+GWmzD0T-CXmXkrkHcwZABwV
+Vvh2tD8D1T08XmTD2TBD7D3TAH6H2TBD7D3TAH6H3TAD7D4T9H6D4TAH6D4T9H6V
+VvhD5T8L5H5T7L5L4T7P4P4T5X2b2X1j-l6qw14PPkQKBf-gD+S1w88JIoxwnjHV
+Vvhg06-PBRxf8T+qAZg8QOQRgKAVwNgNwhQFwRwhQBgZwhQ7gdwkw7wdgow3wdwV
+Vvhow-whwovTATBCjTBPCCLnLnHZwtwotTCP47XVwxgIqBsnblHMrTDT3D1yAxgV
+VvhIwDsnrl2kro4l2kso4kLkzXDnw8B1Ckso4kakzXDT2H1XDP3D1bDP3D1XDT3V
+VvhD1XDT3C0LsnqlHUpXCT3C1KAtwwqXCPEBrnannVwpwwsXATCG6n4nndwhwt8V
+VvhT9TCCsmbnIk5manYk5mLnIkbm5n3kqlsmplKlbmqlLl6mMlqkdlPmKkBf8VxV
+VvhjC+LoP+KcDcT12F+EXl3xXw-+RwhshsgWP6gKpYgBsNWkagaEg3PNG9+KtT+V
+VvhGwKzKyKxKzOvKzSuKz6Zi3k07PRQ+XOpOz7Jh4jmNPFPwbOmOy84gKjWZf3fV
+VvhoeOkOy8advof-eOx8lOLj0gaZfkfBcSv8oO5iWh5VfcfJrSu8pRriGhbRvUfV
+VvhRqSs8rRrhmi5RvMfZrSp8uRqhGibRvEfhrSo8vO5gmirVv6flsSl8xOLg0jKV
+Vvhdu8yObYftf3c8zOlO0jagaQfxPBa8zOoJGjqhJEfxfNW9+KsIGk3iLk3iqjpV
+VvhjJjZjZj3k4iZk03fNQ2YKnL07bVgAdhgIf8QUhshshwE2A-+6EHc4VcKDTQwV
+Vvhp1p4ocsh0To6o7oCCB3x5soS7x7h9roi7hBRDqoy7RDWLIsYpC7BLWDK69ExV
+VvhFh9soDbEXGPIHH1+Enk2u-cO3nrw8hFBJhBx9toMobp4pH0x9LwxPopXpi7BV
+VvhLppIpS7RHqpDLIsaorozPHsbocojTGscoS8B5WbEbGXGTJDIcBYX1FKOFXtBV
+Vvhxnj9CoDBKmLAx9BAlP7Ql9BAlP7Ql9BAlP7Ql9BAlP7Ql9BAlP7Ql9BAlP7QV
+Vvhl9BAlP7Qnogon3gZn2gon3gZn2gon3gZn2gon3gZn2goiRhxphtRqxGnHAKmV
+VvhLAGnHAKmLAGnHAKmLAx9BAlP7Ql9BAlP7Ql9BAlP7Ql9B9rRLSPRTPiIgon3V
+VvhgZn2gon3gZn2gon3gZnDGnHAKmLAGnHAKmLAGnHAKmLAGnHAKmLAGnHAKmLAV
+VvhGnHAKmLAx9BAlP7Ql9BAlP7Ql9BAlP7Ql9BAsfIgk92Z7EoJaYMwFjF+lppGV
+VvhlcookoIh3Q74DDL0G1nJkYZAdg78L6P1Gm2wCQ7A+lKPkZk1D17QBA2qZ3kpV
+VvhkHlZl2kXlYl3kXlJl3kHlJl3kXl3lJkXkplZkXkZlpkXkJlpkXkYm3kXkJm3V
+VvhkXk3mJkHk3mZkHhQhQ+vLAL+ConJgvLCGmhQx8CZo2YuLGC1dRB4CopHIvLKV
+VvhapqJk3+OL-LML+XKL+F0pIh59HKYUx3OGHo3gv9DKogwpPH+DBGpk1n3hA2wV
+VvhhPL-D8L+L-D7L+L0D6L-L0D6H0L0D5L-L0D5L0L0D4L1L0D3L2L0D2L3H0D3V
+VvhH3L0D2L3L092L4L-D1L5L-D0L6L+D0L8H+90L9GnkYn2cw7Ql7D0LCCGkZo1V
+VvhMw7R32D1HIX39KL4o-wb-CUO4UkOvHhYRZXXCIVI2e9WYdwdwd8T8GYd8GYeV
+Vvh4v-Y8+O8nGAUJjF+oWoHo0o1o1o1o1o1o1o1o1o2noo1o1o2noo1o2nzHDxAV
+VvhzononpnzHDxAxQxAxQzonzLDHDxQzonzLDsYnzLDt2ny7QzaHFwx5XHFwx3BV
+Vvh5WDGwx9noXoWomoz970kNGY4WgoX5pPyEAYR2h6h6h2x5noTDFsXo2oDDEsoV
+VvhoDDEtYsgtSHCHCxQvWHCxQvonjLCHCxQvonZnYnZnjHCxAtQtAvonjHCxAtAV
+VvhwwxAtAwwwwxAtAwwwwwwwwwwwwwwwwwh+h2R69-J8UUhU0kW7T-+m1oi7B9nV
+VvhojH48XcaGHZ3K1RZNXRbNHJeN1Bg7H6plK2VL7jBTEHEXAj7IH3QJH6pkaEYV
+VvhOaIpNrMqRJUrN2YtFWcu95DGxB6x9WHGD6-UEGgAF2-0BXHp9sYthNfWGOKOV
+VvhsYaZai77dNfWGOKOsYaZajG0bFpFbMB7dNfWGOKOsYaZai77dNfWGOKOsYaZV
+VvhaYb1WB+U9+Hc4VcB4jc6N6NjVDctK4EGjmfmfmfmfmce8Wce8WgQg+wi-CUOV
+Vvh4UY7xkV1FWzK7YEkc6kj00q+91FLzo1K9KHILIHILHLIHILIHILIHILHLIHIV
+VvhLIHILIHILHLIHILIHILIHILHLIHILIHILHLIHILIHILIHILHLIHILIHILIHIV
+VvhLHLIHILIHILIHILHLIHILIHILIHILHLIHILIHILIHILHLIHILIHILHLIHILIV
+VvhHILIHILHLIHILIHILIHILIHK9K1E4nc2u-cO20Lr79CqbsxtS7Oo+-CHhdy5V
+VvhyLWKh81+AHg2u-cO2nPu7B2x3gyDeOX4oI+-NIoKnsfWaro4pD9HwhDW9H9HV
+VvhwhAhDmomomomp-pEc-Qx12F+EXcKxm-hRxZhdRY+A1qJqaqLpq0kr2+AF2-0V
+VvhC1voDBCRz2qaZRNQBB7AUwxAgwowswgx+wYx6gUhEwIxMwAxQwAgBwAw2g5+V
+VvhkHk1k3JA2fCpYw+tCok1gt8okWgsCYkncrCYl4UbCIlaQpCJlaQpC3lqQoCIV
+Vvhm3UoC3m3UnCImJQoC3mJQoC3m3UnsXVQZMAiAsL7K1DnVQVMAnZQVMAnZQVLV
+VvhB1ZQRMB1ZQNcB1dANbBWdAJrBXZQBrBndA85Bnh9EJMsD+CXF3CWkIN4B1gwV
+Vvh4tX+D1T+L1wk4X+O6-cxVA6xJgAx3wMwqAZAWAtPjHmRf+o+k2BP-CUO4W3LV
+Vvhyo1MsgpwqC7BzXHTsoryBBzXHTsoryBBzXHTsoryBBzXHTsoryBBzXHTsoryV
+VvhBBzXHTsoryBBzXHTsgq9qQ-3LEHc4VcVJk7+qC9BWk2C7BzXHTsoryBBzXHTV
+VvhsoryBBzXHTsoryBBzXHTsoryBBzXHTsoryBBzXHTsoryBBzXHMjMzBWxYB+VV
+VvhM+Hc4VcB4iwvkP8Wce8Wcewe8j8i6ewf6IIVNC8XZMNcBx+M2UUhU0kA2CQvV
+Vvh6dFqRLNpXpVMG3V7x7GG2A+P2kUhU0kF2CAvoGoIlPOadeKphPKphAH2lB+xV
+Vvh2A+P3+UhU0kJ0yUp2hBh--GZB6JIJMEaegTGLHDK5A+d3EUhU0kM2CUv2RQGV
+Vvh9KHxMV9JAGpG6hEmDH6noWIh2pD1QeG2NOoAfHP+c+gK00q+9-o1vH2RsQ5EV
+Vvh5FQBHDV62UzMD6OOQqBHUnCW9nhi8n2uAnUoFXOeOA+R4+RQ7WUI2TQ+hB9WV
+VvhLFPGTHLHxRBToJoYoJlooZiEk-MU--P+3VI8yG5L5IHFStaNaNhx-RERMA+XV
+VvhLUUhU0kJ1iYvo-pXopobo6l0GYF6FIR5FIZ0H13B-x6l5I2Ek--T-CUO4UY7V
+VvhunZ1FXQRoL7YEx+aTEUhU0kN2CYvYf8IZDRMJZVLGIR7FpVLGIR7G1csGIR7V
+VvhG1cswuCEo-ty00q+9-c7uXWHkMOXKM7XEr7XIq7WR1BWa48aUQGEk-Vz00q+V
+Vvh9-U7uHYoh2OK85pDPJO-Vs7dN2goc7r+0yGhE1NGyp589MHKPKLKPKLLxRRRV
+VvhRBRRRBXoq2q0+-2npzHKxhHrosojbFyh1n3wwmTCEbnXBwooTBB6mzBbmXRwV
+VvhZ5T7C5mDCLlzCbljCkT3ClT2GlT2CmT1wvCA5nhLk1hbjohbjw4yz0jTCtSwV
+VvhCuSvGuSvCvSuwvlvYvq9UvtvTnjrhXk5hIk5h3k5gqk5gNjNWphPYPSnn9KtV
+Vvh280UkEjYfI+sIjhFqWqYq3pqpapapZpppppppppoq2q2q2qH+-6nqTHMxhPrV
+VvhpMpDbHyh9n3x2mTEEbo1BwwoTDB6nTBbn1Rwh5T9C5mjCLmTCbmDCkT5ClT4V
+VvhGlT4CmT3wvCADnhLkXhbkIhbkQ5+z0jzCtSyCuSxGuSxCvSwwvlvgvq9cvtvV
+Vvhbnjri1k5hok5hZk5hKk5gtjNephPYvSnimhfKtCUdw69t8p+BZ1vHxARYxNRV
+VvhJxCB70HEF2nYJAp5H9GIm2gHlogYlXh1llhV+-11pzHKxhHrosojbFyh1n3wV
+VvhwmTCEbnXBwooTBB6mzBbmXRwZ5T7C5mDCLlzCbljCkT3ClT2GlT2CmT1wvCAV
+Vvh5nhLk1hbjohbjw4yz0jTCtSwCuSvGuSvCvSuwvlvYvq9UvtvTnjrhXk5hIk5V
+Vvhh3k5gqk5gNjNWphPYPSnn9Kt280XkkjYfI+tGzh8nHgFn4cwaM98B1QgcpBWV
+VvhmWR1D88MmWdgkP3++GAxfoqTPLxxOBLtpDfHwlTGAboI7x2nTEB5o1GAvnNwV
+VvhorTAFrn1VwjnZwfndwbng5m1gLlogLlngbljCnX2wvJwAvNw79Nw9-kTkg1nV
+VvhiLjnibjYibjXirjTCwSwCxWvCySuwvxvYw-vVA-vRQ-vNg-vGPqP0phPZ9SnV
+VvhinhfKtGUbgE9t8p+C2rvHAV9-AZdP5Vsz3ZdlNOAO5X5OKmIg1+-WHqTHMxhV
+VvhPrpMpDbHyh9n3x2mTEEbo1BwwoTDB6nTBbn1Rwh5T9C5mjCLmTCbmDCkT5ClV
+VvhT4GlT4CmT3wvCADnhLkXhbkIhbkQ5+z0jzCtSyCuSxGuSxCvSwwvlvgvq9cvV
+Vvhtvbnjri1k5hok5hZk5hKk5gtjNephPYvSnimhfKtA80ZlEjYfI+rIzhGoaouV
+VvhoHMwwsDBCWnDCkDWmXg1mncwosDCFXo8p4+-VXqDHLxhLrp6ozbGyh5n3x+mV
+VvhTDEbnnBwsoTCB6nDBbmnRwd5T8C5mTCLmDCblzCkT4ClT3GlT3CmT2wvCA9nV
+VvhhLkHhbk2hbkA4zz0jjCtSxCuSwGuSwCvSvwvlvcvq9YvtvXnjrhnk5hYk5hJV
+Vvhk5h4k5gdjNaphPYfSnilhfKt691alUsTpYlACzgupC6-1OAcl7qHCARhYnT7V
+VvhLMB5mJpoFwdBQpT8DLwpT9DKwqT9DJBbn1p2NwkxErT9DIC5mnp1RwkxAsTAV
+VvhDHC5kGYx6tT-DQG5kHrHZw2xkuT-DQCbk2qndw2xh8T+HPCrk2qXk5dhfNqjV
+VvhqhYw3uPMH+T+HND-T+HMD0T-DMD0T+GWmzD0T-CXmXkrkHcwZABw2tD8D1T0V
+Vvh8XmTD2TBD7D3TAH6H2TBD7D3TAH6H3TAD7D4T9H6D4TAH6D4T9H6D5T8L5H5V
+VvhT7L5L4T7P4P4T5X2b2X1j-l6qw14PPkQKBf-c8P50r9aDXdAx1j3ao50h92vV
+VvhutYvqcJoish1JPdvQoKsSuAZi5j7hqjdhak6h5kLh5kqgrl4gqlKgalZgblZV
+VvhgLm2g5mIg5mHg5mXeAcuT8GMmXeAgdscpi8BPYXLTLyBSAgeyAcv1WT7ClxwV
+VvhUvBgQvHrlHhal1i4kXiKkHiqjnjKjHjqiYkKi2krgpldVwatnPLGbLxRZhdxV
+VvhhRjpqpqTLOHNLLTDhB0kn80cm+fOQ1cuIjhFm0r2qaqZqaqZqzLPLPHPLPHQV
+VvhxBlBkU+MXEgx4oo9e9WfhvhvdvpjibjZibjniiBw+vbrkHiTT+CtSo8kCtxvV
+VvhAv+vZvAwPrgnlzSmH4SmH5SkP5yxlfr5SkP5xv7APWSnD5SnCm8rsbgngXhrV
+VvhkXhrknhzT0CsT-GrT0CsT-GsT-CtT+GsT-GsT+GtSzKtSyKtSxStSvasWsg9V
+Vvh9GgR8noP680emEfOQ1cuIjhFq0r2qZqKq4q4q3qJqJqJqJqIqYqYqYqn+-XBV
+Vvh0noPHEici8iriribjKyuSyKuSzCusrk1iTT-Ctxw+vZvEf+vbrgng1iLgnljV
+VvhSnD5xv7ANv7ARv-gTvr4jQRv-gTrgYli7vAwRvAv6fTWSnCmCrT0CrT1CrxwV
+Vvh6vVw39Rw6vVw39Vw2vZw-9Vw39Vw-9ZvxPZvtPZvpvZviPW9Wkgh8lofDFgUV
+Vvhc9980hdkCXdEyozE5RDOLNTLXKEYp2FB73HFFonoZAl92wh97AcvEwgPME+MV
+Vvh9Egx4oo9e9WfhvhvdvpjibjZibjniiBw+vbrkHiTT+CtSo8kCtxvAv+vZvAwV
+VvhPrgnlzSmH4SmH5SkP5yxlfr5SkP5xv7APWSnD5SnCm8rsbgngXhrkXhrknhzV
+VvhT0CsT-GrT0CsT-GsT-CtT+GsT-GsT+GtSzKtSyKtSxStSvasWsg99GgR8noPV
+Vvh690amkfOQ1cuHThApIhBddPMVspjZdpdOBS5XMOKqYgk+ULTkU2ADTmMlumbV
+VvhmbmLn4z7TBL7TCD7srnnmDTED6xwwwVwAfD6xw6vD6T0DJxw6xPrkIpLkIpbV
+VvhhhPwnJnBNvPKxw3BLWT0DKT0D-94sbkXkHlboHlboXljTFD5TEH4TFD5TEH5V
+VvhTED6TDH5TEH5TDH6TCL6TBL6TAT6T8b5X5j-+Fk+2Q6-1-0UHQk48ncV7Z9vV
+VvhIPggVANgNQNgNQTplplolplomDH6H66DHvqnj9iQBwDXT1srkyBwDXT1srkyV
+VvhBwDXT1srkyBwDXT1srkyBwDrksizjPCwh6-EnEMfCW2dIjhFfGfIepeaeKeKV
+VvheJeZeZeZeZeYeoeoeof11myTa7uUY8VuXXScsreCBuXXScsreCBuXXScsreCV
+VvhBuXXScsreCBuXre6cDbtWSaEg3TC-Wgu6GNEyozG5MDJLITGXFEYnoFAp3HAV
+VvhFomYZARA+wNA3AIwAwMQIEzTnA99mdoboiBx9XTGsroiBx9XTGsroiBx9XTGV
+VvhsroiBx9XTGsrojTGX8zAkgj1g2rD-Wgu6GZByon6GomKZgS5XwKKb3ZclcSAV
+VvhRdP7Gn+-NznAL9nNpLpSBxLXTJsrpSBxLXTJsrpSBxLXTJsrpSBxLXTJsrpTV
+VvhTJXBzAlQj40kYh+A35N-DHjvCgDJnxbBqR8AGR3wOAxwZwtwdwpwhwlwlghwV
+VvhpwdwtgdwtwZwxgVx-gXWTETXlboLswJx7yD2TGVx92SB91WR12X2TGX1THT2V
+VvhTGX2xx7wFx8AFx7wJx4AJx3wLroLlbo5lro4lro5lrnrm5nbmLnamLnambn5V
+Vvhmrmrn5mbn5mLnblsncl7mRf8qQrIo80soEjYfI-2Gzh8nHgFpqcxGM9JB1QhV
+VvhIpBWpGR1DJ8MpGdhQP3++RGniPSohPSth9Gshvm9mQ4PpQ8fpACfowHn3vkwV
+VvhAmSvD2sXBvcwDnJvUwHnNvQwArSqD2sXVvIwDWCbgnl1g5gXkzClSlD2wv7vV
+Vvh+wAvBuD2sXh5YwDWCqRnl1hrMwDni5IwHniLEwDWCvQXl1j52wDnjOlDCyb1V
+VvhCzX2ww-wBA-wBA3QBQ3Q4PxPmrj2ivavCxhvofmUgB6AF2-0BpDoIQEhZBRhV
+VvhRRRhRRXpq3q2q3q2qTHNHN6+3BbDhQZsP3OmP0KpOzOsKxKvKuOwOsOyOqOzV
+VvhOpP-OnP0OmP1SkT2OblKdgNsT4TrT5Rbm5KAVpT7R6mLFwdnX8QsmMBweC6cV
+VvhmcslX8UcmM8Ae0scmMCAW2X6RMlsKARrT4VrlbVwJtT2Wal5g5kbgLkLgqk5V
+Vvhh5jbhajLi4iriLiKj4i4jbh4kagKlLRwaqntku0mokl2E26rIzFFp0qIpppaV
+VvhpKpKpJpZpZpZpZpYpopopoq1+-INnvL7S4lKgakZhKjqi3jJipiaj4i4jahaV
+VvhjqhKkKgqkagakrg5l4dwJeP4S5lbxrlrNwVpX6RLmLGAZoT8QsmbCAa1T8XWV
+Vvh8AeCAMmc8Aa0X8Ui8Aa1X6V6m5KAS3X5RrlcRwNsT3SLl6dgFv-w7v3w3vBgV
+Vvh-vFvtvNfpvVfhvZvZflfVftvFg7f3gJrT7hgyQCUihEAF2-0Bp5oHwoRcxRRV
+VvhNxGBB0HFF2noJAt5HAGImIgHm2gYlnh1m-hV+-FdnvL7S4lKgakZhKjqi3jJV
+Vvhipiaj4i4jahajqhKkKgqkagakrg5l4dwJeP4S5lbxrlrNwVpX6RLmLGAZoT8V
+VvhQsmbCAa1T8XW8AeCAMmc8Aa0X8Ui8Aa1X6V6m5KAS3X5RrlcRwNsT3SLl6dgV
+VvhFv-w7v3w3vBg-vFvtvNfpvVfhvZvZflfVftvFg7f3gJrT7hgyQCkhBIAF2-0V
+VvhBonoGhMw+RZeDKa0pnEr9LBHMhQbEnpmaBQePN5+E+3ObSlBVsPIP-PFL2PCV
+VvhP5LAL8L7P9P5PBP3PCP2PEP0PFP-PGSroqdxFePJS5pLxrpbNxRpXLRLq5GBV
+VvhVoTNQsqLCBW1TNXW8BaCAMqM8BW0XNUi8BW1XLV6prKBO3XKRrpMRxJsTISLV
+VvhosdhBvTFT+TET0PDT1TBT3PAT5P8T6T6P9P5PBT1PFP+PIRrqALSbG0kfhMAV
+VvhF2-0BovoHB39HLOKpMSBDtORCKXIVspKZhR9A+52bSlBVsPIP-PFL2PCP5LAV
+VvhL8L7P9P5PBP3PCP2PEP0PFP-PGSroqdxFePJS5pLxrpbNxRpXLRLq5GBVoTNV
+VvhQsqLCBW1TNXW8BaCAMqM8BW0XNUi8BW1XLV6prKBO3XKRrpMRxJsTISLosdhV
+VvhBvTFT+TET0PDT1TBT3PAT5P8T6T6P9P5PBT1PFP+PIRrqALSbG0UyhUAF2-0V
+VvhD2LqDk2-rmrWrWm7gWlPKGkrVa90OmN0kJhZ6g-PZw-9lPxPtPpPxfhPxvdPV
+VvhwWKsL+6Zhpk0BfJfwZKoOz7Zh3jmRf7fscOlOy8KgKjGdf-fseObjGg4dfofV
+Vvh3dSw8mOKj0gqVvgfFcSu8oS4iWhLRvcfJrSt8qRri0hrNvUfRrSr8sRrhWiLV
+VvhRvIfdrOp8uRrh0irRvEfhcSn8vS5gWj5Vv2fpdSk8xObcfteSGjagKUfxf3cV
+Vvh8yOmNmjpgqMfxfFJ8zOpJ0jqha6g-PVF9+KtT+KvOzKxKyKyKwL+OuL+6KhZV
+VvhkGFPBQ6aS4kmaqlGgdm0rWrWrl+Ec6DN0yGhE1VHvp4y9OHMPMLMPMLNxRZRV
+VvhZBZRZBfoqYqW+-RfilhnjOiHiv4rePmPJvxPNw-9TWT+Crsrk1hyBw+vTXT+V
+VvhCrsrk1hyBw+vTXT+Crsrk1hyBw+vTWT+CsxvwvZvsvjqjHj4j1jKinjpiXk4V
+Vvhi1kZhnl3h2lZgJm4Vgeqnf9GX80UVRc9t8p+C3DjIQshdBVRRhNhNhNRRRRRV
+VvhRRRRRBVBVBVBYk+LevgPQvqfYvilhuawapSzKqT+Grsbk1hyBw+vTXT+CrsrV
+Vvhk1hyBw+vTXT+Crsrk1hyBw+vTXT+Crsbk1iDSzCtSyCvxfovlfkvpfgvxPcwV
+Vvh-fUw7PQwFPFANP3QVcP8hgumocmUc6rP0yGhE1VFvoz55PDMLLTJXIEYoYFBV
+Vvh-3HDFonIZAd92wZ97AUvEwYPME+KyvgPQvqfYvilhuawapSzKqT+Grsbk1hyV
+VvhBw+vTXT+Crsrk1hyBw+vTXT+Crsrk1hyBw+vTXT+Crsbk1iDSzCtSyCvxfovV
+VvhlfkvpfgvxPcw-fUw7PQwFPFANP3QVcP8hgumocmUg69Q0yGhE1VCvon9Goq4V
+VvhZhO5XIyKbIZcpMSBNdPMGn+-vwf+lXn8m1mg14eQiQFwtQJwxAPWTDD4srnnV
+VvhliBwwwPXTDD4srnnliBwwwPXTDD4srnnliBwwwPWTDD5xwswVwowfqn1mqmnV
+Vvhn4mXnZmHnqlnoJlXopkopJk3pqVhb3rQ2-4BY80RrEjYfI+tIixFnWqoqJq4V
+Vvhpqpqppq3q3q3q3q2qIqIqIqX+-U9esmvSq4ti9Ntk8g6kah5kZhMkHhsk1iLV
+VvhjoiMjIicj2j5j1jMiXjciHk5i2k6hYkMhXkchHl5h1lMgYlMgIlrgHm6cwa7V
+VvhD9S2msNAm3HBVHnsAx00DFUIof1HfIbKxxRhTWTLPLsbpqpy7xRhTWTLPLxxV
+VvhOAyvlvn6iwGkPxs80FMqAXjvCgD8nwnDmhORtxvXTSxxz7oQnBnwhw0Qdw8AV
+VvhZwBwVwGATWT3XXlLlrl5m5sgFwSDkrlsl5lrlLlcl5lclLlblblMlbl6lbl6V
+Vvhlrkdm5kMmbegfCnAnCmB7xvXTSsrrjTSXLmgzAnwfD0l3RwF93dQKnruCwu9V
+Vvh5AWlnA7nmA7nmgFHmAFHmKVHH4O3BAVQ-0H3L+EYloktl2ktlYlLl2lLlYlbV
+VvhkolblIm4kYm4l2mKkImKkpmJkJmJl2mokImokzL9H+L9H0sZn1k3n1kpmok3V
+VvhmokpmnkJmnl4mmkKmmlDPOPRTNTQbLbOjJjNkh90pQLDlRD5nQTFmAn6oAXAV
+VvhmB55nQTGlgv4pAHElBT+pA1OfKfPXMXQTNTRxxZxrqqak0npcgxQ1XDDKHnpV
+VvhjonZZAtQ-At8HCH-HBKYnJk3nIdQpA3gh9P9H0P8KqmZkbmIk5mIkcm2k6m2V
+Vvhkp2wJQ3FD3L2EokZkYBA7QIpO4l1JcP4FgP2FgP5CQ94CQ979-X79-XAc7iMV
+Vvh0yGhE1ZBvomwGkH8OKm6SAPtOQOKX5Vsm4Zgd9+k+SWuiAirhViPWqSQ0f0AV
+Vvh7fFw7PKA2vSA+vZvx9a9p9e9l9lvkvq9cvu9Yw-vVA09NA49Mw89IwFvEwK9V
+Vvh7AK93ARv2wW8D7WHmrVAi4HAVInMIwy1DEUXoM3B8koup7pjTLPLsbpqpy7xV
+VvhRhTWTLPLsbpqpzTKXDiwSwm9j20kTC+69M+g71rrCwMhJBBhBRBhBRHpp3p2V
+Vvhp3p2pTHJHJ6BNR0glJB0l3QmH0GckIiA-Q-vL-SZkadg7eL2KKl3VwBNP2KDV
+VvhT2K4l3XWT2JyBwFMP2KS7gFKb1JX3g7aAZkaMmL-RX7Q03B2glJHFNAoIaG1V
+VvhF2BoJ4AneNT-L-FUg5zV00q+90IxxnjK9KHILHPGPGPGLHLHLHLHLHHIHIHIV
+VvhHJAC3R4gpJB0lJQmH1GckYiA3Q-w-Q3vL0OqkahQFOP2KLkpdgFNxwFNP2KSV
+Vvh7wFMsrl3ZgFOsal3MlP1JX7g7aApkaMnL-RXBQ03BIglJHJNAoIbG1F2C2J4V
+VvhAniNT0L-Fw03sUUhU0kYCzQtrV+JA-7E2LrsrY7Bl2HOFIqIRBR7HIH1ooo2V
+VvhoXoXolp-1SLTfPJHEhBLAYoIeB-9X3lvLESZoKdh3eLHKKopVx7NPHKDTHK4V
+VvhopXWTHJyBxBMPHKS7hBKbGJX3h3aAZoKMmLERX7QVHF9AJIoKHB37YUoF1R3V
+VvhFXAuaLo3o2P+UyA69M+g7nTrBRYw5MOXpNUhMoBmpXIq9K7oAxMdXK8aq-l+V
+Vvh+FtE2erZIo9KJn7BF8XHGsoZlx3R-x-R3h-h3h-RBQPHKroZlhBPxxBPPHKyV
+Vvh7xBOsrophhBQsaopMnPGJXFh3aBJoKMpLERXJQVHR9AJIrKHB38IUoF1d3FXV
+VvhAx0NTHLEGQ-wt+UhU0kaCDQqp2hBJdPHVszFZdoNOB85XHOKpIgk+HVE2OrJV
+VvhIo9JJn7BB8XGGsoJlx-R-wLFP4oKlRBPPHKboZhhBOxxBOPHKi7xBNsropdhV
+VvhBPsaopMmPGJXBh3aB3oKMoLERXFQVHN9AJIqKHB382UoF1Z3FXAwaLoZo2X+V
+VvhUSI69M+g71vrDBlhuhkqDOC1q1chTngxLWCnpXcxUsDNFXqurq+-9JruqpIoV
+Vvh9HJn7B38XEGslQSpo5dR3ePFOZopZhBMTGKKopXropVhBMsbopTXTHK4opbWV
+VvhPHJdoZMlPFNX7R3aAZo5MmL6IoGn3JB3YnFGN6B2ErFIMnCdZx-R-41+ZiM9V
+VvhQiMyBWTt7E2XVk3ZH+337aA-0-GXrN3ADNIcoHpqBx6xNJTGDIJbonoaRhExV
+Vvh3NPID4dREwOap1hfLHGqlR3PPEKblh1Mo4oRHHTFLSTGLSPGLSTGLSPHLRTHV
+VvhLRTGPQxxBhlx7xUGTHTLALocpn3x8BMnPFbJB4o9onNQUHoXRPAJ3AGJYmIXV
+Vvhh9NI7IFZofFKjKRnZx1+MSQ5L0Mc5nPr7RJxXEoqNB3OD2o1ZR2sLEJqlaP5V
+VvhNR-pPENKoZJhAaPPxxhhjWTOt5qy7hlhcGLNAJq17hN1LJFIp1RR37H3hLPGV
+VvhoROBjpr4rLrZrjLSLQxRpBlRdx9Govpkk4bc-pth8-wxxnjH9THRPRLRPRLSV
+VvhxRtRtBtRtBzororm13TMnINXoKYwL1dR+tLFC3oXRh6qPHBKp1JhApTGFKoYV
+VvhJx-KSLTNbJoDTPPPt5rDPQPN2aq13hQnLKEppIJRAsHFGYhQFqoh5KXFg51dV
+Vvh-pth80AxxnjI9IHGLFPEPEPELFLFLFLFLFHGHGHGHHABNwr+mKMwNdD2L+D0V
+VvhL-D-L0D+L1CqkndgEtP3CKl1ZwB7P1GLkJdtSwf-lgLro4oCFx5qoKmVNgYpV
+VvhP6BploRQN7L2D+H0H0Gpl2RgT0mslg-ouURSPGUVCzQtr-+GDTLSTQXPEYqIV
+VvhFBR3HKFop2ZB3ADEHEH1oXo-p-1ATOnKNXoqYx3QD3o1hR2uLGCKoXVhArPIV
+VvhBqonRx75PGFro3VtSRaxLGxxphrYTSxhthYIPMAqpnJRN3LJFpondB3AGpoIV
+VvhRhHFq6okk4vf-pth80EsxnPGGooqZh45XwZdmKXEVsoKZhB9A+2dTRnNNXpaV
+VvhYxFQDGLEDFLFDELGD4oXhhAuPICaondx78PGGbo3htTBbFpRLr+EM-1YQ-5qV
+Vvh+FPN3qq1NhQsLKG3pIdRAx-B3B79LIFqpx5PXK1+ISk2u-cO3HrtCv9JHHPHV
+VvhLHPHLIxRFRFBFRFBLopIpG-uLFX1EuBIYaG1NL7pPnRJsXRJwrLGsZoi7R9WV
+VvhLGxR9WJnLWJnPoQrFmV4C2IuB1mB771+Kyo2u-cO5XrtCxshtBlRhhdhdhdRV
+VvhhRhRhRhRhBlBlBlBokjJqcq1ExMpHJ7Yp1NRAbLGwrLFsXRR5nRRjWLPsZqyV
+Vvh7Rjpqy7LDFsZQx9oQxB59IFXp2IxMoDMXPHJk3zi-CUO4VkvyHbL5RDOLNTLV
+VvhXKEYp2FB73HFFol7GIksHEFnoXUREEd3q6pXExEpHH7YoXNR2bLEwrLC6rLDV
+VvhBpqS7RbWLNsZqTLNsZQwsZQx1oQx359GFXoYIxEoDKXNHH1+JCw2u-cO5nXtV
+VvhBeGohdOMSDSKZtO6VsZdOogkxpqsqHExQpHK7YpHNREbLHwrLGsXRR9nRRnWV
+VvhLQsZrC7RnprC7LDGsZQxDoQxF59JFXpIIxQoDNXQHK0kYj+69M+g7XzsDRARV
+VvhUwVOD5ZXlw2XlzlgQaj48dlGk6kmk8kWgmP-8oBgopLABan-VRPppiBRNAW4V
+VvhL2kIL0NZ7Q38IJhQ0eL0aJl6VQK5L4VZlsJgS3L6V4m5FwVoP7QzT7QqmLDWV
+VvhT7Qi7wZnT7N5m5FgZZP6RKm4NgVML5O3laZgJPL2L+L1L0L-L2KZlqNQj-nsV
+VvhmQ07wEXyqX+fBzYprHkRleDNa0qXEr9OBHMhcbEnqWaBcePQ52+-9po5p5exV
+Vvh2nBpJAB2ItGnJ1CoYqEXl7BY2x-7BMoJTnNx7LBaopQqLIJjBaopozLILGsZV
+Vvhp3opopozLILHxRBRBRFRDWLHJnPWLHJnRRB5Bpp2QrLIFmVRF4C3p2IsLKB1V
+VvhZRS9DOGEg5Dm00q+906xxnj49HHFPFLFPFLGxR7R7B7R7BDoooom17TAkAVZV
+VvhL3KIkZk2k3kJdQ7NP1Jql3RQJZP3PoP4Mqlqwblq7gRy6Llw9Wlr3wRWT4QaV
+VvhlqBgNnP4N4lZNQJaL2NqkpZQ7OL-L+KpkYZQJJP6kAlwM9-rwkUhU0kZDTQvV
+VvhpWpYp3oqoaoaoZopopopopoop2p2p2pH1WTDkAhZL6KIlJk2kpkJkJkZk4kpV
+VvhdgFOL3O4lKTqlaNgRZxwRZP5RC7wRnsblrFwRZT4RKlqNgNqP4NqlZZQJdL2V
+VvhOakpk3kZkJkJkphQJ7L6JKmw1DT7k5ro00q+90AvxnbS2-Ek2J+ETSXREYqoV
+VvhFBZ3HMFopYZBBADGHEHFDGDG5I2BVxnBVZLJKIoZlB-R-PLFKaoZVhBMLINaV
+Vvhp4LqpKFhNXxxNXPKQi7xNlsbpb7xNXTJQqpaFhJoPJNKpJRRFbLHO4oZdR3PV
+VvhLELEKpoYZRJJPMnQTK1+STI69M+g7nTrBRYw5MOXpNUhMoBmpXIq9K7oAxMdV
+VvhXK8aq-l++Fxk2Ar4JRZNHKL2p3o3oZoJoKoZlhBQLIOap4bqpKVhNbxxNbPKV
+VvhRi7xNpsbpbNxNbTJRqpaVhJsPJOKpJhRFfLHP4oZoJoJoZo3p3hRN7LNJKrAV
+Vvh+ETOk5Dq00q+90MsxnPIGopKZhC5Xx4KbFZcocSBBdPJGn+-CLrwqqJRVNHJV
+VvhL2opo3oJoJo4oZhhBPLIOKp4XqpKRhNaxxNaPKRS7xNosbpbJxNaTJRapaRhV
+VvhJrPJO4pJdRFeLHOqoZo3oJoJo3ophRJ7LMJKqwrrqQ0Ky+UhU0kcBzch+O5kV
+Vvh4G+M6-UU4D6-Uhlp9PgWqZJ-9MKIq2kxRALJHEPHHE6IoYo07R-R+XHEHE72V
+VvhlQ7IjpkaGZkbGZgbKYgcKJgcKJcdKJYeKDKGdNK0hNJmhOJWlOJWl9JGlPJ0V
+Vvho2lH9EL3Ah-B309EHGEGo2p3o2pJlBQwHMGYqKJRcWnO7LrD6-UU40+MwU40V
+Vvh+N2-c9-wyEXyqX+cDTYvmWqIpqpppqppqDLMLMHMLMHNxBZBYUtJpMlnYoD3V
+VvhJnJAFL7YkpQqL0JmRQ7KBpkZMrL-Ji6rL0JTBpkZkzL1L1L0L1sZkpkiBQBQV
+Vvh7QBQDWL1JXsaL0JXRQ3aBpk5ItH+RHZ96YIfGGB2D+FIInD0hrlLh40kTjc6V
+Vvhzhck8HrtCxchdBVRRhNhNhNRRRRRRRRRRBVBVBVBYkw3pclncoD3K1JAFM7YV
+VvhkpUqL0K0RQ7LBpkZQrL-Jy6rL0JjBpkZlDL1L2L0L2sZkpkyBQBQBQBQHWL1V
+VvhJXTWL0JXVQ3aC3k5IuH+RHd96YIg-76oEw33FHAwCrT4SoSkVjg6zhck81jtV
+VvhCRARcxRRNxGBB0HFF2noJAt5HAGImIk1m2kIlnknm-lF1SLJX5CHEwJLBIl3V
+VvhQaH1JnNQ7L7pkZMrL0JXRQ3KsXRQ7JwrL0L1xQBQBQ7QDWL1L0spkpkZkpkyV
+Vvh7QBKDWNQ7KBpkKMrL+RHZA-pCIgWFGh76oEw-3FHAw8rT3SoMA-vz+XyqX+eV
+VvhCDYqq2hBZdPLVszJZdpNOBO5XLOKqIgk+IxE3cpXgoDIKHJBBN7YoZYqLFKGV
+VvhRR3MBpoJUrLEKC6rLFJzBpoJpDLGLILFLIsZoZoyBR7RBR7RHWLGJXXWLFJXV
+VvhZR-aCJlpColpCogWFGo2YXF1oIJ3AnovRxNvG90PzEWK9GscHjYvqGqIpppaV
+VvhpKpKpJpZpZpZpZpYpopopoq11eLJX5CHEwJLBIl3QaH1JnNQ7L7pkZMrL0JXV
+VvhRQ3KsXRQ7JwrL0L1xQBQBQ7QDWL1L0spkpkiBQBQDWL0L2L-P2L+P4H+P4GrV
+VvhloYVL6FI3QemLAR3pppjLLH4D0L3L-H3SplLhANfH5OZlok2m1k2mHhAgsHCV
+VvhBJo8ornkg6Py0DvOA1-B+HjBLNkBT+qPrjPSspriBRvXLSsprZRx3IkQtHFZV
+VvhnJ38H9IHkImckZmLkpmKlJlqlZly7QRiD3L6PXl3m5sgBQVwFQRwFQVwFQVgV
+VvhJQRwJQRgLplqlZlalqlJlrl3m5kpmMkJmZ2uL9IoNglJkAtLTFLSspriBRvWV
+VvhLSPMlh5wTF0kkjw69M+gAYw0DBORf0paRRBPHFH-LDH1HCL1LBH2LwlQJCD9V
+VvhL3L8L4LwdQJQhQJAlQFQjplInDL2HBL1H4kABAT+kYmA1-HExQ-B-Q-B3PLFV
+VvhxPHGKpoDL+LEL+PDL+TCL+XAL0TAL0X9L1X8L2T8L2X7L3T6t3lblplrlpIQV
+Vvh-wVIGbm3BOP7IpZgZIGamJEuP8J1dQhJ8Jn2QpLBK9nZdh3E2I+FsZ+FHNBJV
+Vvhq3FRRYHLQpprBBVYDNJ2qWMxgnHRQ--Rs90Mi+WK9GsdGTYqm2hAZdP5Vsz3V
+VvhZdlNOAO5X5OKmIgk+HVROAQuB1lJUpH2K0NABMBZkZUbL0JnRQ7LBpkJTWBpV
+VvhkZPnRQ7QHpkpl3kZlC7QBQDXL1L1spkplC7Q7QJQ3gJQ-gRA-gR9T6GG3QZ3V
+VvhEJmv7QpoLMLLxRVAQw7QNQ3ANvL4SolqhAVeL6H+H7D+H8Con1VAwpLFfITEV
+Vvhk21L-pka8-UawWTN5NDLDKHKHKHKHKHKHJLJLJLJLJLJLIPIPIPIPIPKPKLKV
+VvhPKLLxRRRRBRRRBVBUxVBUxbnqHqGYA+zxkRQ7WUO7jMbcRgxdBcxgxdBdBfoV
+VvhqYqYqJqJqTLNLMPMPMxhNhJhNhNhNhNRRRRRNRRRRRRBVBVBRBVBVBYhgA+sV
+Vvh6UUv80kQ4j+vNAFqdZW6snZtG6VI2dEGch2i8GoGbmoGbmoGYh2dwh2d9F8GV
+VvhoGYh2d9F8GoGcR6Pg+oh-PZn5lM3yFES9S956A+xL+Uv80kR4icvkR6P9F8WV
+VvhoGch2e9F8WoGch2ewh2e9F8j9F8i6h2ewh2f6IYVFG3b6KHWdeCLZMW4OaUxV
+Vvh+r060Lg69M+g7U9s3xAs0LkEKk-MHU9q3xXk1qZYNKtoOKNdNL6UJ2pIGT+JV
+VvfMqxYOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoNa3XNK7tR4Lo+Cc++DLqxj+JV
+Vv+V
+Vvend
+Vvbytecount 24028
+Vvcrc32 94054009
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.746pk_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.746pk_vve
new file mode 100644
index 0000000000..7677cc77af
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.746pk_vve
@@ -0,0 +1,678 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-04:17:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.746pk
+VvhxpYqFoNoPp-9616iAW-jRLFkRLEUNb7jPG-BFJF-FYxCJ0-jRLFkRLEUAHYtV
+VvhAWskAmskBHcmAHAs+8+++7YkSl6+0ZFB++dIHQ-rMEUhU1If9jEgpa+Kc-7JV
+VvhBHppYXLJKm3xBQfGLEfFLGXFPGXEPHX5oslhFwTISzTJScp5hxJuyBJuTJSiV
+Vvh8BJtsspLfrpLhxJs6LpLWi9IS13hJsATPIS1Bh86AqoNQpLEAKQpL17b7pcoV
+VvhJXV7BJIuFYRHD9iBBh3ck5BW-pkaA0B7x2T5pxDKzGrjXSsrriBxvXTSsrriV
+VvhBxtxxrPGR9o5B3Kb76KL2vK8o2WR3KbGNTXHNLp5snTJTX7xNyALph9Wpc3xV
+VvhNmxhO0PKQqpMDqpLFhFpPINaorNhBcLGOJoKhB3QL3oIhRB6LKFKqArKpv-PV
+VvhMkRQ7X+Z9jEgmcng57RYlphABg6g7QEw-QMuL2OKkrVgC5P2Vbl5NwJbT4FrV
+VvhoMoLoTXFTFscoCCB5ZTGTD2bnm7gsmPBAqn1JgcrL6G3lodQFA3Q3QFLT5kwV
+VvhqQKkZqE69M+p9YboFxdxD2zGkxfsqiBxfXTOsrqiBxfXTOTCNrn8JwdJB5m3V
+VvhYWT6Km3wRQ0gNQ4gJQCAJgCAFgGABwGABgJwBwJw9rlbkMlLkblbkTX4T-T4V
+VvhT-sclbkCCANw5rlbkblbUYT4S1DWT3S1FgNsBDP3S1NgC6BakdQsL-AKQsL+V
+VvhAaQeKXFKCoYpJHkIN5InkviARg7fg4BZ-pkaA0Eix0n7XBkQZbH3OYkakIk4V
+VvhkYhgF7P3G4lYRgR4T5HpT5FLloKAR3X3JMl4OA7cWOXBj6lDXETEt6oC7x7hV
+Vvh7gwGPD6KnX7gknP9BJmXNQV6L4GYl2kIkJkpRwT0n7l+g4xa-CUO61-S+YXNV
+VvhPQfNFHpoUhJKLHJaoaJx7YXFR6oKKB3aPFRnorrKrSBxphrYTQt5pAv7nwbCV
+VvhozTQt5rCFxnZTQt5rCFxnYTQt5rCBxphrrrS7hrqonVh3bLFVKoTVJobJRBaV
+VvhHIJnpWUxUpDObRLOg7Fb-pkaA0p0yWnCPMjINHIwdN6plpglT3L-f2L0f1P1V
+VvhX1P2X0P3X-T3X-P4T-T4T+xwRvX4T+T5SzX5SrlrjWX5SiCARvsrlrkC7wNwV
+Vvh3wKA7gJwBgGABgCQFQ8gJQ0gR9ALlpYmT7FJBweoTBRbqjTNsrqS7xZwFANwV
+VvhBgFwCABgGA7gGA7gKA3gRg3gVQ3gdNTBlh9+nv0BO+UhU1IjGTV5l5pAHHz1V
+VvhqzXPsrqyBxjXTPsrqyBxhxlsXARQ58R2NQVnGJlr6w-QNlD-P3f0P2f1T1b2V
+VvhT1yAJw9slbkjT5T-srlrkS7wRw7wNw9rlrkjT4T0T5T0T4T1T4SGFwNtDW7wV
+VvhNtArlLYnxwNtAzT4OHBwRcB5lqUZT6JmNwVKBamYF5LAaXnpgA-POEHc4W+NV
+VvhFjR2pnq3pbzIXITKLMA+4EPIbGB2o1N9BpccKHVbwsRjCLMsRjCLMsRXZr85V
+VvhpTTIsbpDTIsbpDTJS0RtBbUqxtBbUqxtBjS1RcCJUeJnh4DEF1odp4ekPac2V
+Vvhu-cU8Zc2FBYxZhTszKTLPNE+8VPKbHF3o1RQssLBCKmndgcvP8CrmDD+T5wwV
+Vvh-wTnkLlXkLm0kLpzTKsrpiBxPXTKsrpiBxPXTKsrpiBxPWTKT5H+T4OblcZgV
+VvhS6P5WJm6VQdcL9K3nINR1-osoP0JOkRQ7X+gGTV5l5oQHEz1qDXMsrqCBxXXV
+VvhTMsrqCBxVxZwJg7wCQ3w348rkHNOT+7rZv7sZu86Vu86Zt8MZs8qdr9-GbQhV
+Vvh-q9FRGobEh7o9HQmp52xKhKxL1oL8QtpX9S5mbZwZuT6SrljT+T4T+SWNw-uV
+VvhBCBw3tBC7w7dBLkaUpT1O1JwFLBbl3QbT3FXRgR2C3mNcwlPk2Ng--P+4VR7V
+VvhxoTGSBDroh9soiBx9XTGsroiBx9XTGsroiBx9XTGsroiBx9XTGsrojTHRmRrV
+VvhBSBrBS7rBqQrxaCTJHhHDFXHLA10PEoJaZFB9jQgVhCBJxWAoB1BInKINOJZV
+VvhoXJKGJUtPEBZIwJXhR+bMno4EwOnRWDFMno4grMHob2x3tC7ouobbnWBGRBsV
+VvhC6pMp5UsXJTJSDC5pbpLQsTKTJSGVxNxJxPrpbpLpS7xNxJxNxNxFxPrpbpLV
+VvhpjTKTITKTKTJTKTKTITLTKTISGZxNxFtDWRxNxFtC5pborYsxxNxFtCDTKTIV
+VvhOHVxNxJcCLpbpKUeTKTKJmhxNxNKCqpqq2FALMLObGDODRKkk6Ji0DvOCXAiV
+Vvhxmm4orq6nBInK3NR6pJXZh+qJHhR+bMnlfBq6x-fBq2x3tC7obbnWBBsC6p5V
+VvhXWC5pLQsTJSGVxJxPrpLpS7xJxNxFxPrpLpjTITKTJTKTITLTISGZxFtDWRxV
+VvhFtC5orYsxxFtCDTIOHVxJcCLpKUeTKJmhxNKCqq2FALObGDRKw-gPkUhU1IcV
+Vvh9jEgq6+EoRhaLNKZpKlRBR7R3RBR-RFfPJOKpaVhRbTLTpTMR5qLCBZnTOTmV
+VvhXOQbqcsVXOoy9OUMqb9rqc7xdnTNUrqLHrq5JxRrPLO4paZhJfPILELHLFLGV
+VvhLHL4pJdRZKPPoE26q90KQ+UhU1ImETsgkqkamsiwQnJoNAIpJHZAAqJ1dQ6bV
+VvhMXk3k1RVD-L+BtkacsX1OjC5lKUsT4PWUsT3RnVwNs85lbz4T4TXlLlcsgFwV
+VvhOAJwNwLrlclLlblblMlTT4T4T3T5T3P5X2T5X2P6X1P7X1L7f-L8f+L9QGhQV
+Vvhlm8Jn5EpLCROo5Rh7xvXTSsrriBxvrrdqAbEmh17oP-sQERQ7X+cETEgm4k0V
+VvhlPYwBZBokZYZH-KnBQ-Q2WOpkedgC8P2WKlMVwK6P4S5lbTrlrOANrT5RjX5V
+VvhRblrPWX5RSCARqsrlrTXT4S5lLfql6dgCPL0b-H-f-Kn3w7MEbkpJ1T4h5m4V
+VvhRxJxHXTIsrpCBxHroumznAH9U9-EQUOz6mke9jQgVg8A49kNApR5JnJJCZIqV
+VvhJ1dZ7q6uUnRVCsArasAsX+UnWA3YC5koEsX9sXVwgsTB85pzTKsrpiBxPXTKV
+VvhsrpiBxPXTLPMLODJk4dn-cfB8WAiy0nLXPoBRLLIH1oXoWoIoXlBEuLGKYoaV
+VvhyJoLVh-tPFKaoXhU25rtrR5MpBPJpBPIphHKpRHLoxfBqhuBzrQxNZPJJTXIV
+VvhJMp2KBFJTJFppYQxR6DKGXpHkhEx2x-BB6PJoheREA-CR+JElW6QEjN+pHqpV
+VvhqKqCBxTXTLsrpyBxTrfS20ey7xTXTLsrpyBxTXTLsrpzTMT0RwBTT1Nw7rgqV
+VvhT1NvBrgdOXZe8aYgK1lLDFJ2p7pqoQ0-REWK9HQk9jQghE57q1o2FBJfBZp4V
+VvhgbLHSWVh7tC4obXnZh3swtTFS1Zx-ssXZx3rCLoLYdTFTLTFTKTGTKxx3xPrV
+VvhobpboLpi7x7xLrobpbobUdTGS1Vh7sCC7x7sC5oLUuxh3sCaoLQvPEVnlQZmV
+Vvho4cmJXoJYnJHopMqInpfaBZwOA-sRURQ7X+e9jQghRQwbIKIFB7rBZo6QbLEV
+VvhZGVgZ1Vh01CKo6AtPFTW6tTGIi6tTIEHZxIn8LpHoLpHo5pXoDTJDExxMx-xV
+VvhIx1rpXo5pHoDTKDExxIx3xIh9qpHojPIDHPHDIPH9JPGDKPF9LPE9NL0qpYxV
+VvhpZE-1+2rpg0gRkeVXIIz9jQghE51mRUx3NF2pKlrBZp4i57poriJ84obiIC4V
+Vvhobm1CKoLo6AtPFTFTmCLoLoZAtTETHIi6tTFTIEHZx3xIn8LoLpHoLoLpHo5V
+VvhobpHoDTFTJDExx7xIx-x3xIx1WTGTJDC7x7xIx1robp1oKoqpHoTPHPIDGPHV
+VvhPHDHPGTHDHPGTH9ITEXGDJPE6Ko1paklPE9MOXBQ9OKHJO9QNXRZHTmg+HTFV
+VvhXI1+TrU5P-IkAGvv9BBx-xStnHFIR4HFC2IsL0dHC4gfIXW79EIGa6DEW6UxV
+Vvh3tW1oLdcDFWoYx3xjWDGTODGTQ9GQ-rr+Qsr+Qsr+Qxk5LomqronqS7xAxdxV
+Vvh6tGcoXVdTGC6Vx6sVsoHW66KktVn7Q8qQnKXlLBJUx34BpJBCufMPFPIg8NtV
+Vvh-wHHAWl0xmmpqNmXV2H5NXNQNa7plLIcP2R1VgFzAtP1QzCLkrAtT0Qy6tT1V
+VvhQXZwBo8Lkrkrkrkbl5kjT1T0xwFw7wBw9WT2T-srl5kbkrkql5kjT2T0T1T2V
+VvhxgBwFg8AFg7wNg0ARPb5KH3wVZELmw+bnLJxZxXrqKqLlIl4lKkbl6kKlMk5V
+Vvhl6kKlMk4lbkJlqkJm1kpmXkJmnk3nHdQwqPGkBNx29-rSUO8nGcc9jYglJknV
+Vvhl6kHkfgw9+gw50Yw52Qw93JA3aQokJig6wFgAwMwAwQwEgMxUxUxUxUxUxUxV
+VvhUxUxUxUxUxUxUxUxUxUxUwUQAwUw2wUw2wYw+wZ9D8D+D7GrlIiw-eMbRuFwV
+VvhOnb2gvkfGw5+D-j+D1b-D2P1k2sE-CUO6-Yixmmap7oXFB+qGnRO83YsNzC5V
+VvhPnZqC5PnZqC5MtRmVxLrpC7xHrpC7xHrpLUbSHNsBjSHNsBjSHPrUrO1ZM8ZV
+VvhQvFXo2Ex8RFeg4EF-J146WJ0-0nBPFbCF3mnRQYsL78KlmdgMuP48rl1hwAwV
+Vvh-wAvT29+T1ww-w6w-wEg-x9roSBx5XTFsroSBx5XTFsroSBx5XTFsboLkohwV
+Vvh7eP0y6P0W4ksVQJcL4K3m2NQj-nrn81d4EWK9HQwLU36ndp9LDRqmqgJmKgpV
+VvhlphKlKhZlDOrP0xfVw-vVw-fZzjriLyzSsSzStSzStP+SsT+SsP-SsL-SsP-V
+VvhSsL0SsH1SrL1SrH1SrH2SrCwhPN9mphIjPKoH4SoH5SnL5SnH6SmL6SmH6srV
+VvhgZm5galbgqlbgrlTSnX2SoX1Sob-Sqb+SrX+SrazxvW9vYSuWwSvWwsbicjLV
+VvhIv7vppKkWxR4g5jbFeSzR3g5jrF9-vxpClP+RWg4kLMtL1RoNQFegAJv3wTrV
+VvhqjPOTOsaoHNh-ZPDy2LEUpoLFB7YLGJIonNBIoHLXOLNg9QO0r9aGY+ixWnMV
+VvhCrrZT-qqBbHMQpdBKFL-HFlQ7AxHb3HAJ7lYmaKQNAVbX5H5O5m2lKaARAJeV
+VvhT6H1Sqm2kqkKm2kakLlZkakalZkakqkqkql4egBwDAlLlAT7T3PJX3PIX3PJV
+VvhT4PIX4PHX5PHX4TGsclroMlsoMlsnFCASAkmX4b9AslOmnBwOgcoT3j7BalAV
+Vvh55Brkd3AMtP-AK7AEvL+AaAw7A3OAqEvH2NYBaFalw-ZT-n5YuX3k8gP0r9aV
+VvhGXsix0nLPNTPnHoBNZH5NBFMGZdB3PFpo2lQJJoIhR32LHGKoJ7RF6PGIJpIV
+VvhRhCxJ4THfKFap7pYNxGRN3xxKBN3XJXIJbpboqOBNx3cXKSOZxPPiBPKozXKV
+VvhTSsspbrzTKXTTKQ-1rpM+ETIbQ2rp7qn7xGRcnTHjNB4oa3RUpPGIZpnNh3HV
+VvhLKC3o3JREuH3RBAvKZZB-B-MKnhBBJLFFapfpB1OTMXIcAcQ00q+BH71yHTKV
+Vvh5J9I9IwhEhEhHmp0p0lcMgGnAg7aIGkZdQ3P7PxPFPpPFflPEVKuKp6Ki3hGV
+VvhBPRPIYKqOo7Kh4hGJfFfEaOnOo7qgbgmVf7fEcOlSn8KgLgWZv3f6eSkSm8bV
+Vvhg5gGg5g5g0gLfrg0gLg5cf7v-t8nOlS0grgKYfBv3c8oOmNmh5gaMfJfBa8oV
+VvhOoNGhKh4EfJfNH8qKrImhJi42fJPdvJPlfFPpPFPxP7Q-eL06JNg6XgwAbX3V
+VvhwhEhEhHmp0p0p0pVpP1l0kbEAnxDLU76r8largH-fORph3DML-CIUhNQ3LFpV
+Vvhp3kKNKPHL-RKJx7g03JMzFP-V4KB-w7YRaoKl1NrDGTBPRxwlxpgpxlwpxnWV
+VvhTATQxwpxnWTATQxwpxnrn5p+5QY-z7+RoiBwlxlwpxnXTATQxwpxnWTATQxwV
+VvhpxnWTATQxwpxnWTATQxwpxnWTATQXATQTBTQsbn5rKnLr5nLrC7wlxlwpxlwV
+Vvhphrrn5rKnLr5nKrLn5rKnLrTPBPRPBPIBqUw7h7aNakJocJKWqocFaWposFLV
+VvhWZp5J6SopKJMOopZN7Koq0R9CZqXFA34PQb1kRxgVxuUj+k6zhcuDps0GAymV
+VvhovbCWamqhXm4iHlZiZl4iKkqiLkqi6kaiMkaiLkbiZkqj1ky7xnYTQt5rC7xV
+VvhHDiR4tnw9WStT0SsT0sbiLkjSsT0WsT0StT0sri5kiBvVwBvRwDWSsT1xvRwV
+VvhBvVs8tSsS1iC7vRsCsSsS1iC7vRsCtSsNniLiKQvZvZb8uSuJXibiZIvhflHV
+VvhCvSyWwSzOxTRxhrrrTPRPIBqoaNh5sJR82LHRIp4NBFKHK81q1FBeRpRc716V
+Vvh1EZbVXp2LU76ju5Ae3OvSJFvVeImSsKaILhpda3vNeJlSpxeKZhKdeKpObMLV
+Vvhh5e17vJetvHrfbhDShSoxutvHWShSoSiSosrfLhDShSgz2fACpsbfLhTSgSpV
+VvhxupvLWSgSpShSpsrf5hberhi7ulvPrerhjSgSqxuhvRuhs8gSgS1eyBuhsCfV
+VvhsberUunrf4Qulupb8hSiJXfLfZIutuxHCjOmWjSnOkxxDqoroy7gYrP6NalzV
+VvhVJm6FQZpL7NYmZNAkcDCBHo7opo+YJYC1Vh8Kq-S+YWzcOmYkuaYevu7KVWVV
+VvhOvOZCKdoiJdZNegvRONZOfKpKaR4eqh4dMFOhvBeO1OeWnOaUaesgbdqBehvV
+VvhBeYoSgKnSkOiCoSjTDOkTCSkTCsbfrnjSkTCsbfrnjSkTCsbfrlU2Oc-Cd+GV
+VvhgzSjSfSmSkSfSmSkSeSnSjWeSnxuxuhvBuxudvDrg5ebgrfrergzSjSeSnxvV
+Vvh-udvDWSjSeSnSkSeSnSkSdSosbfrebgzSkSdSoSjSeS0ebfrebUuZuxuZsCdV
+Vvhxv-uZsCdSjSeS1eTSjSdS1eLg5eLUuZv-udbCeSjSfNnebfreqQehuxulKCeV
+VvhSkSgJHerg4fZAuluxv08puxv3etf-wtv-gxuxwxf-wzqg4nrfrnqg4lXRcCZV
+VvhP2NZReFQG2NccZlMFLWWL3V3S83QNpG5cJlqJ7OVL6JYZO3QcbGVCVL9F2coV
+VvhRQyOKXoaeco+YL6D1YyUL4BS+YWyc8qVmeOae3OuRpcrZISrOXCVOYAbhpd3V
+VvhZOJFSqKYO3dK3vJeBrKZQLhJcsNeGZhKcsJeKZh5csJeKZh4dKJuNVSnSaBqV
+Vvhe17vHrfrfLgrg5fLgrg4fLhDSjShSnSkShSnSkSgSosbfrfLgzSkSgSoxuxuV
+VvhpvFuxulvFv-ulujk38g-CpxuxulvFv-ulvFv-uhvLWSjSgSoxv-uhvLrfrf5V
+VvhhLfrerhTSkSfSpSjSgSpxuxuhvLrg5erhS7uxuhvJv-uhvJv-udvNuxuhvNuV
+Vvhxuhs8gSjSfS1erfrebUujrg5ebUuhuxuhsCfxuxudsCfSkSeS1erg4f4QuluV
+VvhxulbCgSjSgNmf5g5fJMulv-upJChSjSjInfbfrgMfqg5gafzSkPGSjTGOkTGV
+VvhOkPGSkPGxf-gYrO1dJm4JbOXP5V4O87QW2JscZm6FLWVL7RIVu3QdZGKcJmpV
+VvhN7KVLB7ocHcInoF8B5LGWacxJeeBA70pEEjYfIp-GTd6lnooopoTPETDyAvtV
+VvhnTcAmVmu99AMmX8Acmb6Atm1GAQpX4FMlXOALnSAHnWAAtX0GMkXc6kHcMkHV
+VvhcNjncdjncsjXd6jId6jHdMjDCaWvwuS9cuW9Z8W9Yua9Uue9UuePMuiPOrhPV
+VvhWoiPEuu9DnfsgjCkWlClWkGlWkCmWjCnWjCnahCoahCpWgCqWfGqWfCrWeGrV
+VvhWeCsWdGsWcKsWaWqaXcfCWWeeQGdfleOej0Ui269Elp7FITtFfPAkx0zogK9V
+VvheQG9mQ7vuQ3vyA3vyQ-w0PvrkNjjT-fXj5keyvT1awT0ewT0awT1awT0axT-V
+VvhexT-axT-ayT+azSzb+Syb+Syb-Swb1Sub3Ssb4lgb6lrislLjMkbjskLk6k5V
+VvhkMjrkNjTT1awT1evT2ausrlNiLldiS7wKfVwOPZwKfZwKPdwGfZwKPdwGfdwV
+VvhCfhwCPhwCPlw8Ppw4PtvyftvyfxvqfyPeliBKuofrCkEc9N10r9aGYF7w2T9V
+Vvhas55hfEwGugHkf0KZA0PFLKyasFKjMioBfm9snOvX+ALibkui6l7i6lchslsV
+Vvhhcm6hMmahMmqh7mqh6n4gsnJgtnJgdnZgco2gNnogTbEGkfEGkbFCkfFCkbGV
+VvhCjfSseriChvYfTyE27oWgS8R2v5WbECmbDCoXDCoXCCpXBCqbACrX9CsX8CuV
+VvhT8CuX6CwT5CyT3CzX1D-T0D1SzH3SxH5WtH9WoPBeLoPjJhxigiUeYEA35NCV
+VvhGITtFfPAlwz2ogaPWgWPegO9qQK9yAGA-wGA0A8A8A5sksk6l6jclMjclbjjV
+VvhX4WwyAS9nsltsveAWSCtX7bWi6mOi6mNi6mdiC8AafSAePXsmOi6mNi6mdi6V
+VvhmOiDX7asyAaPbsm7iMmMicm7icltislsisltislsj6lcjMlMjMlMjclLjsl5V
+Vvhk6krk6krkMkMkck6ksjcl6jNlMitlOi8jx9-oADAlu0VFEfOQ2N3FzZ4hi9NV
+Vvhjdj94yb+WyX0SyX1PvuAFPqAJS8xX4CxsslnjC8AUvmAQvm9UfAvm9QvEfnsV
+VvhhnnC89Qwq9NAm9Qwq9NAq9JQq98AnWkgq9BwnXWqHAsshnn6hnhWijWrCpCuV
+VvhX7CuX8CuyAYviAV9eAYviAV9iAUvmAR9iAUvnsloj6lYj6lZj6lJjMl4jMkrV
+Vvhj6kcjMk8iuj98oqvHxepY5R40b51EoB5yIObsgWjagcOyOyDfsgayjWnKiWoV
+VvhLWfchHfiC9MurWWrChWqChWrChWbCY8hy8QvnWWbCxWaGwWbCxy8N9q8JPm8V
+VvhBvrWgfm8Ffq8JPrsdYjCC8QvnWWbCxWb8xssoCCB1XXEsso6oNne93gvmoivV
+VvhCw0khIQAM97EEobkFxagMRP3kXogb+DFeKZAyQB5LBb4FKn6mXBgiAomP8TDV
+VvhALmLoOlsodlsp6lcpMlMpcl6q4l6qKkzXOP0XPL0bPL-bRH-XSH+bSD+yRt9V
+VvhbTGtrnihwvY-+uyU5C8U5CCU5CGU5NoApTbDnZbNey8ReA1XbNX0yBWACRSAV
+VvhGBSAGBOANxOAOBKARxGQVxCAaB4Qdx0ghwuwlwl0LCX6Ipntl3NB4dVoowiWV
+VvhpgP05OfNg3p60yGhHJ35yIP3sgygzBjCjJbEbLssoMpyCB4BTXXFXLssoMpyV
+VvhCB4BTXXFXLssoMpy6-5MXFXLssoMpyCB4BTXXFXLssoMpyCB4BTXXFXLssoMV
+VvhpzXFXKjCjBsgygz3g237-Wgu80t5yYP4nwPFlgzDjLbNssqSCBbXXNssqSCBV
+VvhbXXNssqSCBbXXNssqSCBbXXNssqSCBbXXNyBWwzDlh54nwOkMYc6NaAqB2XoV
+VvhFgnDnR1AnxSxuRzXXTssryCBzXXTssryCBzXXTssryCBzXXTssryCBzsn2l6V
+VvhmqksmckMmdkMmdkLmskMmskLn5kMn3krnHl5nXkro1kLoWk5p0dhQqTNkRqBV
+VvhY81AGklBKYxFFzZ4hg0qiPP+hPeqk9Otjf1-gQCQCgKAGASAFgaAFAiABAiAV
+VvhBAmA6wuA2wyA+wy9xB09tB49oxC9kxC9kxG9dBK9ZBO9UxS9UxW9Qxa9JBe9V
+VvhFBe9Exm9Axq96xu93Bq9-xm8XQWNr6WkqcUlXOVYCBa3F6qMEqXMV1WBS1CMV
+Vvhps6uXLgP4BKlgcpOh6pNhcp6hsosi6ozWtXGWuXEy9iB1sj6ncjMni89uAnWV
+VvhX+X9X-X7X0X7sckslsl7lckul91-gffWk9GwhO-fH+c73Y2tFzZ4hg9-kw10V
+VvhmP1HbJsspSCBLXXJsspSCBLXXJsspSCBLXXJsspS8AEvGAAvGAEvGAB9HsknV
+VvhhDX1CpX0GpX0CpX0GpX-KpX-GqX+KpX+KqWzOqWySqWxSqWwaqWug9GfOnXKV
+VvhXxKEgGlB1ZWuLK35yIP3lU2AP3lhz5lQTSlwqxr+pPrOpn3xmhXn3xglTMALV
+VvhqX7xTn7xYmTMwnTLArpnFxMnTMwoTJB5q1FxEpTLBLp1FxUpTHBLqDBLoXNxV
+VvhTnRx+qTMBrnnRxUrTCC5pnVwsrTMC5nHVxXnVwktTLCLmnZxUuT8CLq1dwYuV
+VvhTMCbm1hxQvT6CbqDCrlnhxUvT4D+TLww-wIw-xXnkLknkLpnkbkXkLqDD0T-V
+VvhD0TMD0T+D1TLD1T+D0TMD1Snkrq1krcwFxUwFtD2TLD3S1l5qDD3RnlLq1lLV
+VvhMwNxQwNqD3TMD4RHlbqDD4R1lrpzD6QXlrq1m52wVxUwWgZxQwagVxXnmNmLV
+VvhpomMmbpZmLmbpbmKmbow15L7fBmg7Q5ClQf0H0ngL8kXkwv3g9pC0yGhHJ35V
+VvhyIP3lQr8z3lgn8nOoPp8obpPoZpvoopzAMoXpy6nXEDMB6nnpzBMnXqDBcnHV
+VvhpnSAkxXnWAgxUsb8DLwuX7DMwvX6DLD+X5DMsXkMlXpy6wCAExUwGAAxQwKAV
+Vvh6xXWD4X-DLsXm6gxUwa8DLwwe7DMwwi6DLDAVnqDDBVXq1ncIxTnnsExXno6V
+VvhAxQx40DMsXoc2xTWDIfMDJbLDKXMwxRxRBRxNRVRNxRRD+pJngfFHCmh2wz8V
+VvhoWnkg8lD12F+Ho37w2TMg-P4+FS5r5kLq5lKpam5obmbo4nLnLnrmro5mbobV
+Vvhm5oslbpLlLpckrpskcq5kMqMjsqceBi7bPbrbQbqbRbpbSZ8rdGRyTChui6eV
+VvhruslfTcS8hyWsereDtreGRuJbRdNrNORmabQZzbPa7qdaRe9XNasq7k7pskcV
+VvhpckspMlMoslcocm5oMmMnsmrncnLn5o5mboblrpLlLq5kLqsVk2QM-OxU7-rV
+VvhI+fOQ2N2FzZ4dvmok910hde80paec9C8qP88uP48y948yOy948zWWlbXfMgdV
+Vvhsum98UyfWmc8m98Oq94Uf6gdfMgNfcgMfsg6fsg6g6fsgMfcgcf6gseth6e8V
+Vvh0qi9WoiyCB5XXFssoSCB5XXFssoSCB5so855sf4zcCxF12F+Ho3Qw2T7gBSrV
+VvhobVwpv7wZvNgRfZwBvhw3ftvtw-vlw3vhwBvZwG9RwK9OAO9GAS9CAW98AaPV
+Vvh0Qe90Ai8XAWNn7xtnNxdndxNntGgyIbDfnfDfW8h0iAOo85WfEcjfDcto8DtV
+VvhnuGQyJbCdNndOQqabBZzbAa7mtaQi90AeP0Ae949FfG9C98989G9+qCchbctV
+Vvh4bhsUf+cStS0gGNve48m7Lj5Mf6nSyRGgX3w3o8mf1Qmgclb6f7wZV8kTAZuV
+Vvhnvmp9+g2Kp9DKp9CxfEgxfAwzrgHo5dB3tLFRroPbGysovTIhhOopvDNgRihV
+VvhtfikgJ69ewd9EoXtFgLLpBjErROQCxGQORCAaB8AeB4AiB0AiQuAqAvWXBbAV
+VvhXCbAyAugiAuQjWXCf9XCb9XCf9XCbAXBfAXBbAXBbBXBXCXAXDX9XDX9XEX8V
+VvhTGX6XHX4XIX1bLohbCrMkaqclJqMlZq6lppslqpTX7PIyAZx9WX8TGX8XEssV
+VvhmcoCCAeQzWX8fDX8f-9WiAig+vX9eniAqPCsnNcujBa1DDlcQonwS2FQz7kEV
+Vvh5MWUgpA6zhcuCIbsFwKPAQCocw0rUvxsNYjagYFPlfMnKvKtAJipidiZj6iJV
+VvhjMi4jaiJjqi3k4hqkJhpkYhy7g79Nw6vTqknhrkIhrkHi5kWi5pzXKbJgBGmV
+VvhoPLDiAmumPr5jQWxlvr7igmsnfPFghGkpNpjXLTLyBRvEgNfHXD4OnsYlKh2V
+Vvhl4h3l4h3l3hTL1KpT-KqT+KrWyKsawKsMIiZiJB9VPd3KoOvBsVvl7iPov4pV
+VvhjmhOke-lJ+hmtYd-Fit3XSxxxf0naodchchsNfW9ZZKuWuFYisiYN9e9h3x9V
+Vvhi9h3CwWvF2isj1Lnj6j1Evq9kowvm9onCxWxAnjMj1Evm9onwvq9owCBrXXRV
+VvhssrSCBrXXRssrSCBrXXRssrSCBrXXRyRemni96kEc5hJ0yGhHIB6uoMy9+h9V
+VvhikgA4khdlLi6lZicloijX5CusslniiCAQvfXX5CusslniiCAQvfXX5CusslnV
+VvhiiCAQvfXX5Cusslnii8AQvjslXjDX3CxX2CzxwAw-w6w3w2wBg+wFvswNfowV
+VvhVfgwdPZAlPRAtf7h-sTHiBSor7oEY8pK0yGhHIF6uYMOuheFfur1fOa88qceV
+VvhCPduO9heS9hOW9h8a9guftiHf6i1fMhofMhnfjWqCjWpCkWoGkWoClyP6vC9V
+Vvh2vG9-9G9+vLsfnhcfXhsfIhsfHiDafCuWeCvWdGvWdCwy8Uvq8Qvu8N9u8MvV
+Vvhztd1kMcnkccYkccXkzWVD2WUD3WIlMYwPtQwW4D7VImMIwfsEwi1DAUYn66wV
+Vvhru9DyUo7oTXGxxBhFRNBMwWVJpQDyqpbLYXeFVj94xgvUPukjP9GgPqmiLgPV
+Vvhqlj94lb+X-WnX-X0KpyA4A79OA4A6vTskMkHi6kMk1iMk7k1iNjtjnisjejnV
+VvhisjejXj6jP0yCwWwgPovq9klWwGxWvAcj1jcin89gvy9cnWvCzWuAsiXk6iHV
+VvhG9cw09YoasD-WsBci1kMi1O9Qw89QrWrD0WqFshXkshXW9JAC9J6WpD2WpCMV
+Vvhh2l6h1e9EwK9EuWnD4WnCkWnD4WnCkWmD5WmClWmD5alClWlD7WkCmWlD7WkV
+VvhCmWkD8WXgsg1mcZ9C8D9WHh6ZAi6CpWHn6UvK6DBVnhcUwq5CqVnncMvS5DCV
+VvhVXhtIwy3CtVHnsIva2DEV1icEx01GuUnoMAvi0HFUYis6x80CwUIoc2vq-DHV
+VvhUHjP1Ig9ukp90yfJezfJezbLX+bLX+XMT-XMT-TNP0TNL1POL1LPH2LPH2HQV
+VvhD4DGYAhM0yGhHJ-5yoOdseyYf90YeuGqcOuUidg5j7g3jdg2k7fYkNfIksf2V
+Vvhl7enlNeXlseHm7dnmNdYmcdImtcon7cYndcHntc1oMYx8LDHZYp6JBKHHKYYV
+Vvhq66xaWqe5QcBmRuBvtrcrO1PcReWqI4RR1XKF7pHKRErXHC7oHaR-80Ax84QV
+Vvhp88Ql8GQguKQcuSAYuWQQuaQN8eAJ8iQB8mQ78uA6uyQ+v0Pwv8Pp98Pl9G9V
+Vvhh9KPZPKPRvKPKPGVgOGkd8igeOyXfOajd8iefuCEbpY9t8pBFITfFVfuv1fOV
+VvhcOujeLcvSVd7icddiae7iYeti2f7i1fNhofdhIfth2g7h1gdgXgtgHh7g2hNV
+VvhfYhdfXhtfHiNenideYideIj6eHjNdnjddXk6dIk7cokNcnkscXl7c1lNZAO6V
+VvhH5Znm7MwaJD9Yomt7AmFHCcgzu5FbGyBBxDWXHTHscoroy8BBxDWXHTHscorV
+VvhozXFcQWkkP5+g9mUi3c7o1AzE2TsFffEytoPaoiMiP4wWuayWvSzavOzavP+V
+VvhWwL+WxH+WxKzWyGzayCzayGzWzGyX+CyX-CxX-Cxb-CxX0CwX0CwX28vXQXQV
+VvhbQXQXQXQXQXQbQXQXQXQXQXQbQXQXQXQXQbPbQXQWv92WvD1WwD0awD-awD0V
+VvhWxD-WyD+WyD+WzCzayGzWzCzX+CyX+GxX-CxX-Gwb+KwX-GwX-KvX-OuX-OuV
+VvhX+WtayetWxg9a9eoiB8rzGi+c3U+0UYKEI35yIOqshKyatg9uPm9u9xi8yX+V
+VvhKxX0HWjMkXjSCAAvnWX2CwX1CwX2CwX38wyBrXXRssrSCBrXXRssrSCBrXXRV
+VvhssrSCBrXXRXSbPgR90mQD6kgY71++EoJaZF3GTV6mDHKLJTHyB8R4UoO5DcgV
+VvhslbBENnHCAkob8F7mXKQYrX6FtlnWQMtb3CUb2GVX2CWb0CXb-GXb-CYb+CaV
+VvhWzCbaxGbaxCcawCdavGeWvCfatCgasCharGharCjWqCkaoGkaoClanCnWmGnV
+VvhalCoakCpajCqaiGrWiCsagCtafGtafCuaeCwWdCxabGxabCyaaCzaZH+WZD-V
+VvhaXD0aWH0aWD1aVD3WUD4a2ldUwSLD6ZYmMPKHLDM9N67E81A+Ul2E2x-GT-5V
+VvhmP1Lhx7sTBSmT7SqP5OtT1OwT-OySyT+SwT0OvT1StT3SrT4SqT5WoT7SnT8V
+VvhSmX8WkX9WkTBScnLaAuDSAyDOB03bEVMoMGR42XFYtMg2aYtIw+qbmZXk1OGV
+VvhZgNdslZgNd5tP4OGZXk1OGZXk1KHZHk1OHVmkGOHyB4IXFVMo7KB04XDZcnsV
+VvhTsncWAq7XBSkTAWkT9WlX8SnT7SoT6SqT4SrT3StP2SuT0SwT+SyOzP-OxP1V
+VvhOuP4SqT7OnTAW5ofTLgAY80O+kgHIoUwGTd6p1rIrDLPxhfrqMqDbLyhPv5IV
+VvhwlbHAdoY8R6nbFF6oHKB1nOAznSAvnWAotXAGMn1eAjng6mjClb6wv8QQvCQV
+VvhN9CQMvGQJ9KAIvOAHnhskzCsX0wvaA2veA-9eA+vi9znj6jjCxawwvuPgvyPV
+Vvhd9yPcw0PbnkciDD1WrD2WqxAG9JQG9CA8P4kjv3vWpoPKx4rhfqUMkE8cMp3V
+VvhFYPsFPTNyqqjhRipqfJBEvLnpHh2pHh1pXh1pHhC6xMk+ikgIgQwEwLWD2D4V
+VvhmgLXmgL8li6wEwIwEwQgIU+n6hQfIxMvDWDKCowxIvIxF9FBEvJBB9LPhS9OV
+VvhhRerqPOkKUI9t8pBIITtFgLW+YnNoOpNoMpyCB4BTXXFXLssoMpyCB4BTXXFV
+VvhXLssoMpyCB4BTXXFXLssoMpyCB4BTXXFXLssoMpyCB4BTXXFXLssoMpzXFXKV
+VvhjCjBsgygz30EbkM9QiN8FoTrFeTAyanOSPGZdtiO0cauWcavScawOdavOdawV
+VvhKdawGfyPh8nWavChsdiXfdi2fdi1g7hng7i0g7pS8RLtpS8RLWbJbIXKPLLMV
+VvhHMHMHMHMHMHMHMHMGs8oGtCmGtCmGuClCvClCwCkCwGjCxCjCxGiCyCiCyGhV
+VvhCzGgCzGgCzKfCzOeCzOeCzSdCyWdCwcOUvWadwibn8Pwmb0UUkQAF2-DE2XeV
+VvhFv8A89OljP8mhPapg9SrhsifKsSvgvhfmlj3jP0m4YSOe8Qpgca97GGpS5h3V
+Vvh39RqSqEHi5NfR-CtNKi5iaFfYlCuN3iXjpBhRHLMIaq37RbWIJqjfPsdqy8RV
+VvhnWXQssrCCBnXXQssrCCBnXXQssrCCBmBqRelnwH3lgL2ku1+0+hmtYcvFz-4V
+VvhjAD-lQ51mv1KXMsrqCBxVxSlnvj5YL8A82RbjbRsSuW5ZvVuSbhMdv3vC9-vV
+Vvh7v493v88WmSma6gbh6S9BvG4anSoZ7h5h7GPBvKHaoSpbmeoSpYdh5hOsVeoV
+VvhSpcNh5hO4fFvKVeoSpYeh5h8CPBvKIanSod7grh7KPBvCLWmSoW6gbgse93vV
+Vvh893v3v4988SlSpWLg5hsVtSvRrRvu2Rbkd3mb5iwumpSBxXXTMTNXKgAj1kQV
+VvhL-kvk80w0El2E2wyFyZ4iAD2lQH1nf1NXPsrqyBw09VvaqhrhuBvNvO4SqSpV
+VvhSLh5hLfrh5h5g5h5grgLgrh5gTSnSnSlSoSnSlsrgrgrgS7vBvBv7vBvBfBvV
+Vvh7vBv7vBvBv7vBvBfBvBv7vBv7vBfHrgbgbh5gbgLhLgLgahqgLgLhqgLgKi4V
+VvhgLg4iKg5g5iadv-fheSajJdtOyO5Zg-MS4kZRqP3JbJgRXR4mq4onvTIgBbXV
+VvhTPsrqrr6qP1CkwH3lAD1gCA80r9aGYF6xYTPg-b5+GWMr6krq6lbpMmaornKV
+Vvho6nbnco5n6oMmcosm6p6lspNlNpcl7ptz0bMb-bNbw0haPfOauqOsufOfWahV
+VvheeyhaffNb+fMf+fMb-fLb0bMb1XLb2XLX3XKb3bJX5XIX6XIT7XHX7XHT9TGV
+VvhTATFTCPFPDPEPEPELGLDPGLDLHLCLJHBLKHBHLL9HNH9H89-H8H+8Hk2mXkHV
+VvhUw-AYw2tD-D7D-CHkHm1kHcw2wUg6uD-D5D-CnkGm0kXdA2gQw2vH-959-GwV
+VvhT5lg15lgT+z5lgP-lgP4kwL5lQ9+ZH+69M+p92LnExq+3B5TNar3dRZR-RRRV
+Vvh3RNRBRFRFRBRJh3hNR-hRR-RVfPMObq4dhZdTMSKqLy5qLxrqbxcqMNxeDKBV
+VvhdqTOVS8Be2ssqcHXXOVC8Be3XORbqcKBe3XORjXNVjTORrqMTrqLVxVtPNSKV
+Vvhq5fqq4hhRgPLLFLKPFLJPGPHPILHLJPFLLL4qJdRlaPTo+36rf-9AEUhU1IYV
+VvhFDF1pVpXzIDIHHLGLGPFTDbCbBj8MLlNBwGHT3NboTTEsroCBx1XTEsroCBxV
+Vvh1XTEsroCBx1XTEsroCBx-x4AuwDGLHPGI90rAUUhU1IkFTR1o6qQ9IJpoXk3V
+VvhnnkZnGlJmmlamGm3m0mKlXmKlHmbknn4knIgJg9nQgFzk1UgFzgt91XWcu91V
+VvhXtCWksct92WXYgC98Wksct92SnUgGA+c92T-7ml5kXEwFwGAFwNQNhphphphV
+VvhphlhphpRphpRpRpRphpRtBtRtBxAwQBAww2x2w+x39DGCooIgx6vDGGXoYglV
+VvhDBKgD2OaD+a8GAqnj8gw56k1kwL+D3kw2wSwAwdgI90WAkUhU1IkFTN1oMqAV
+VvhDHNqnpkInIl2mYlZm1mJlXmal1mqkzDBP-DCP+BWlqk1QgJvC0lLsfCGl5ynV
+VvhUgFw+r93P-BXl5kWIwJgFwNwJQRhphphtRphphlxaRD1pQ5Mk+2J+EI--E23V
+VvhrzPSsbrSGA+gu9L9WrmceAe8X8ScmcdwhvP9Wnnbk1nLkWnLkXmrknmblHm4V
+Vvhm0lqmHlKmokKnoVx92ptoP0HB+UhU1IgKDh1r1qzPWqLshVxZhbrqKqTTNPNV
+VvhxxZhZxbqqLqKqLqTPNxhbqqTPNPOLOPOLOPOLOxRdRdRhMDDK3nJVgp6TAGLV
+VvhmpZwh8T8GbmYhwZA-wVA3wRA3wUw7wQwBwMwFwIwFwIwJwBANw9-dw54Jw18V
+VvhBvOwG-3AL-KAb8nAHEkRBxXXTMsrqCBxXWTNxhgwM907BEUhU1IiFTF1lVnGV
+VvhlJlplNiAPDlgz5ngXAmgj8mgn6nXCh6xvXDSsnriAxvnrnSB+okgkmNpmn3AV
+Vvh-AdQBQZAJQQwRgQQZRrWPQsrqiG99AWpmcdwa7X7W7m6aAa7X7SbmMdQhvDAV
+VvhWnn5k1mrkHmqkXmal1m4lHlqlnlKm2kqmYk5n3SAz3ow5LXFg8Iq00q+BGt3V
+VvhwoDHXLkh7bHDL+DAP0D8L2D7L496L2P4L2T3L2X2L2X2L3X1P3X0P5P0P7D1V
+VvhTPPPTOxxeBbsqTXNZsmdL+m6F5L3YndQGG9-L1UWkakN2gFQ4wJg0wJuywNuV
+VvhygS6ygW6yQa6b6a6mNTtmNSQWMscmNXsm7Zwa8T6ajT6WrlskKlrkalbkqlaV
+VvhlJlLlKkrlpkamKk4mphgpaXDlRD-pso+g72r00q+BH33wID+83m0gpf3CXH+V
+VvhlHcnkgAuAgL-Cn54k2cllvGw-Zd9iJVPb+FpiAAoWrlQ5+L6MXk3o2k2o2k2V
+VvhoIk2o2k2oIk1oIk2o2kHoIk1oIkHo3k1oIkWo3+EE--RxhxRxhxRxhxRxhtxV
+VvhthtxthvrrTTRsbrTTRXRTRscrC8BnWXQscr7rDXQyRmBtU22of0rC+UhU1IiV
+VvhFTJ1o6pw9GNpnok2n2komYl3m1lololplIm3l2mYl2mZkYmpz-L9L-H9L-xQV
+VvhhQ3QdQ7gZQ5rm3kclZl6l3lNkolekIlw0YmQ-onA-Ing+YoQHHkRP-pg5IkxV
+Vvh3-kQt2kQhLkAZ8kARA1+l3kfkpl9kJlek3mNdQi8HAWJnLVQtsLDNzLENi7RV
+Vvh3LLFG3o3VR-7LDKJnodQt9LBH-LAD0L8H2L6H4L3L6L0P8S5nQXEkxOQs90hV
+VvhCEUhU1IiFTJ1o6pw9GNZnqdApQ3AhQ7QVgBQRgJQJgNQFwNg9rlqkLm4k6m5V
+VvheQVuX7Ttb6WMmMy7mMWQWTSQaLb7W7m7XsmNXsm8WAWNX5eLm8ZwSuP5erlPV
+Vvhk4l04Q-gAWb-L16Nkpk18QF9AtlJN3X6k3b8S6qcqTXOTOXOTOXOTOxw7AVwV
+Vvh7gRg8AJgCAFgCAJgCAFgFwFgJgFgNAJQYwBgdA3glbTDlh90pdoUc7wY12spV
+VvhHnt8xoXITNgRJaHGKXnpgWnZh0n3hHmZhXmKhnlqi1z4OtD3StD3OuD2SuD2V
+VvhOsP1SrTwBvODkbhckrhql5i2lCBxjXTPsrpPn9yxobqyBxjXTPsrqyBxjWTQV
+VvhP+8qULjngvT+CmiA+v0tk1g5GkjYdOaxCZg90uCkGkgfUv-9-HWoGlGZKP-PV
+Vvh77K8JvB6KfapFJgvOrg9OnirisiUgFwa12F+HoJ8woXDQ00x+wpKHBL8KXmrV
+Vvhm3k1mMlpkWmMlZknm6lJl1mKlKlHmJl4lXmnl3lnmXl4l4mXkrkrmHl4ksmHV
+Vvhkrksm1l5kcm1l5ksm1l5l4m1lLlIm1lLrHlbr1lrqnm5qXmKqImLq2mbpbmLV
+VvhJgd-D7QflZAwX-IwF3H6e0kZQwWND+GXlrgvGnlqk1dA2wNg+tD1D3T+CHknV
+Vvhl7ctD3D0eWYwMw7VG0cwMw3mFHgwMw-oenlnk5Ng2nH+CrnX7fCrnX48CcnvV
+VvhcuTEenaB4PCMobk1WBFQ+tsc+JCDU-Ity+31e+30i+2nk5+H9-Q-6w3k2HkqV
+Vvh+F92TTD3PSD4PRD6PPD8PNDALLHCLJDFPFHHPCHLT6LPX+U-18+LkRWkXnw6V
+Vvh9M+p7IbgGAZwz+mpRARA+wIwAwAwIw2gQw+gYu98CGmnUwgrDAFWnIIwp2DCV
+VvhBHnIEwt2DBInnZAwpHDCIpmpFgZXX4R6lLKAFqT2S3kscwCB0AyQyQyB0AyQV
+VvhyB0B0B-x7h7hBRF896KHmDGXm2YwZ6D9Bnn1MwsnHEXGE+3DHHTFbDfDjBywV
+Vvhuh0R3hFB+90DDUUhU1IZGTQno2p4oNo8njjBjDfDbFTHE+3DHGXEEnnXMwkrV
+VvhD9C2mHZAXndAUtL68Yp3oqoaobo6o6o6ntnso6ntntnso6kneABMT2Rbl6JwV
+VvhK2T4UqmKFQhHLCApnHBQsnLBB2nXFAopDCB2nHJAoaHABnmnUwgdD88XmGk1V
+VvhlmkHlHknknlHk2loRQj+nrmEcFcR1VzKKph5yYPAqQjOnBbHAOiP1GB6j6oXV
+VvhFvxjoHJw-R+qT+LDFLkYnnNw6wznRw6wvnRwAwosT1DAG5knn1VwEwh6T2D9V
+VvhCLl1mXdwAwgtT2D8CblGmXdvQhQv-vQxJ8SrDKCkSrDJClSrDJClSqHIwv3vV
+VvhQxEv7vNBB97vJRAv7vJRAvBvBxDGohDGoh6vFvBx39FvJR2vJvJR1nhLhno1V
+Vvhhbhno1hbhYnnhbhngWk2hbhngHk1hrhngHjni5hng1k1hri0gHjzCsT3CzCtV
+VvhT2GyGsT3CzCtT3CywvdwEvsvdwEvwvdwB9svhwB9p9hw79svhw7Pp9hw79svV
+Vvhlw3Pp9lvxvlPhvxvi9dvmfWli6i98piNovGuXHhfWRCpgH2S1w88NZh7voTNV
+Vvhk+9k5h85+Go5k+2AtgGwawlwOgmAdwWQxgZwaQxgSAeR-QOAiR-QKAmB7AGAV
+VvhqB6wGAuB6wCAyB6w8B-xAw4B0BAw0R0BAvbFXHCsobp1eR7xEtbGXIC8oconV
+VvhaRBwccC7p5mHYcbHX7D4fHX7D4bIT7D4fIT7D4bIX7D3fIX6H3fIT7D3fJT6V
+VvhH3fIX4P3fIX2X2yhLHlOpBH3fIX2X2fJT5L3fJT6H3yhGAVALup5mHljfHX7V
+VvhD4bIT7CmORFwYuBdosmHcqbHXJBtorpXSRBxIsfFXJC8oMp2Wh3xIubFTJCdV
+Vvho6p1iR0BBA0QxxEw4QuBBA8AuBBA8QqB7AGAmB7QKAiB7AOAeR3QSAaQxwWAV
+VvhSQuAeAKgmgiACwX-nbkE2R05+Hok6BT++U0lBlwAF2-DGJDoH+8z60cU8W+eV
+Vvh9Tj29Qlg+hhsSGqKkqMhVgRJ9LL8MWpZnMpZnqpKoKopp3oZp5o3p03gtREWV
+VvhPBPI6qmqp0FgdhEZP7PI7blromVgRhAdP4PH8alLoWhwBxAfT1TG9+T0TG9-V
+VvhT0TF90T-TF91T-TE92T+XD93T+TD93WsnmlMiAsgO8XC95WcnGm6eAkga7XAV
+Vvh97WcmmmceAcgi8X79AWMmWmseAYgm8X69BWclmnbiAMgu9T49DWrlGo5k5l0V
+Vvho6k5l0o5kLkmo6kLkWoLkbkGoMkbk0obkrghBgFu9HT2SGorlLYhBgRc9HT5V
+VvhNmp4m4MhFgdY9IP9Mmp4nJ6hFguBFh-xBh3hBhBh3hJR-RNwphMWL9LL74lqV
+VvhpmRgBhUdW5qmkAPQ92jT60cU8W+e60gE9A-F6EHc4W+PGTF6ppq5pdp8shCxV
+VvhChDvoy8hGRHupC8RKBKRLWXKxxOBPWTLxhRxTWPMxRVhXWLNxBZRbWHOsXqXV
+Vvhr01vHMTKbIfIjGyxChKRNhZBQA-FD+Hc4W+PGTYnpoqKpdpOzHjGjIfIbKTMV
+VvhEDghkxfWDOsYqJqTHNsZq4qDLMsaprpzPLsbpcpjTKscpNpMpS8RHup7pC8hV
+VvhDvouoy8xChGRNxVRQ71t6koJaZF7LDF5kne1lodolTKaL2OZP2KaL2OZP2KaV
+VvhL2OZP2KaL2OZP2xONQFeJgFONQFeJgFONQFeJgFONQFeJgFONQFeJgHpdZl4V
+VvhdKl3dZl4dKl3dZl4dKl3dZl4dKl3dZl4dKfROBVjqaq97ONQFeJgFONQFeJgV
+VvhFONQFeJgHpdZl4dKl3dZl4dKl3dZl4dKlDKaL2OZP2KaKlqKzOLNXJfZdZl4V
+VvhdKl3dZl4dKlDKaL2OZP2KaL2OZP2KaL2OZP2KaL2OZP2KaL2OZP2KaL2OZP2V
+VvhxONQFeJgFONQFeJgFONQFeJgFONQFeJgFONQFeJgHpdZlIdolne1kv3k7EoJV
+VvhaZF6Iz3Ampr1mOqIm2IxRgN5DJP3GWp5l3cx7wFQ+wyAJA3QmAJQ3gaQJQ6mV
+VvhD2j3L1AqVlT3L1BQErlKkna4T4L2D9P4P2D8P5P2D7P5P3D6P6P3D5T6P3D4V
+VvhT6P3D4T7P3D4P8P3D3P9P3D2PAL3D2PAP3D1TAP3D0TBP2D0TCP2D0PDP1D0V
+VvhPEL2D-PFL1D-PHH19-THL-D+TIL+D+TJL+9-PLGmkKqHcg3hd5D-PQF2kLrOV
+VvhkL+EP1M0JgFE24kdrakYIhlw-69OT+GHq5k2ghVg-PDKP+L+DJP-H09IP-L0V
+VvhDGT+L1DFT-L1DET-L2DEP0L2DDP0P2DCP1L3DBP1P3DAT1P2DAT1P3D9T2P3V
+VvhD9P3P3D8P4P3D7P4P3D7P5P3D6T5P3D5T6P2D6P7P2D5P8L3D4P9L2D4PAL2V
+VvhD3TAL1D3TBL193TCL0D3PDL-D3PFH-93PGH+D2PIGXl5p2YwFxMsD3PMBIlZV
+VvhqdmHrJmUo0Qb-CUO6+wTu2S2ZrZex9DDGpQGN09T9C6gwgwg9D90kg90kg90V
+VvhoE2+g4kc-cfB8WJbw2nL9KDJ9JDJDJDJDJDJDJDJHIHIHIHILIHIHIHILIHIV
+VvhLHLIHILHxRDpozLHxRBhBRBhBRDqopozPGsaoi7h9XPGsqoiFhBRDYPHv2LJV
+VvhsYpJpS7BMxPopXpYpXpzDLDL9LDL9M5Cg56d-cfB8WJbzYnC5L9M9M9LDLwxV
+VvhTnpYpXpjHKDKsYpTLJsYpShSLHPxBRDXPHLHsqoiBh9WPGsaopozPGxhBRDqV
+VvhopoqopoqopoqopoqopozLHLIHILIHIHILIHIHIHJDJHIHIHIHIHJDJDJDJDIV
+VvhDJDJDK5Mg46e00q+BGUgv2nADMxRPWLLsYpomIh9FKd8JLYtRMUsVcQqWMIqV
+VvhT-R1FwJXAqm46WPAIMo8ozPIfEkQpGAKm5AXT2R1Fw43BMa5BsO5G5JtGKJeV
+VvhCpMvH+D7sYpppzHLxRRBUwmEH0gAF2-DDnzmC9kx3B-gzWLDPDsZnqny7QxgV
+VvhzWLDPDsZnqny7QxgzpgxAUElp-ovBgzWLDPDsZnqny7QxgzWLDPDsZnqny7QV
+VvhxgzWLFCvo0Mg-CUO6+wTxke2ZrZOKy6wGpZo6hwgwgwgwgwg9D90kg90kg9FV
+Vvh+E1+2ms2u-cU1+jo0ZFbGGchblctFbFEc8Aj00q+BHtbzYnTDTHSPRLRPRLRV
+VvhPQPRLRPRLRPRLRPQPRLRPRLRPRLRPQPRLRPRLRPRLRPQPRLRPRLRPQPRLRPRV
+VvhLRPRLRPQPRLRPRLRPRLRPQPRLRPRLRPRLRPQPRLRPRLRPQPRLRPRLRPRLRPQV
+VvhPRLRPRLRPRLRPQPRLRPRLRPRLRPQPRLRPRLRPQPRLRPRLRPRLRPQPRLRPRLRV
+VvhPRLRPQPRxRwxwA+XCUHc4W+I9DEfo2oamPfti9eeb5oI+-hIoLmOefXvafb4V
+VvhoYo+k1sv-CUO6-R+xmjHHJPGbFfwivo8o7obp2+-yYp5odoDfC8x0h4BB-9MV
+VvhwhTmpy6hTmpmpz9L9L9LwhQhQhQhURaE41oAF2-DF-jo7boMoqzJPH+2GxFjV
+VvhpJp6o60l+Y+AF2-DEIfkGBWU3wM-3tPRL3HNH8DKHBDHHF9FDI9DDK9AHLD8V
+VvhDOD6DQ95DRD3DT92D4T5D0D2kAMg6gBaH2D+D0KXkngw3g+w6uD-L191C1kJV
+Vvhl1kXUw-gIg6rD+P4D-Bmk4lsUqCqmLUpCrmLUpCqmbUoCrmLYzEuT8SHAuT9V
+VvhSHAuT8SXsWCbmrcyAHdwhuASAuT9SX9WCbmbcnCbmbYoCbmLcoCqmLcowvP6V
+VvhWHIw-QS7BXk4lNYqD-L2e1Qw7Q6lS0Yw3Q-1NnYw7OBKMuD2FZRIH+93k8f0V
+VvhD4T1P360Ak6m+XA0Ak6m+EH29QT39NX5DIX9DEXDH8bIP+kBb9+GkRKkIJg2V
+Vvhu-cU7qTtHArWkjnA9BxRLXLJsppSBRLXLJsppSBRLXLJsppSBRLXLJsppSBRV
+VvhLXLJsppSBRLXLJsppSBRLXLJsppSBRLXLJsZpg5Bsg9BkQukIpo2u-cU7qQ-V
+VvhHArWkgn0ng5KxRLXLJsppSBRLXLJsppSBRLXLJsppSBRLXLJsppSBRLXLJspV
+VvhpSBRLXLJsppSBRLXLJsppSBRLXLJsZnQ9Asg9BkQsB+aM+Hc4W+D5yd5+E5GV
+Vvhkg90kg9D90nmnmnmnmnmoWFtKosgCpdNRtG+o-gG00q+BEoIsIQYVaRjVbO4V
+VvhRzRqVcxNKIfocv2Ek0AH00q+BFEIr2THDGxh-wWsi9T5lwTEPELFLFLFLFHGV
+VvhHHDJ5J165lE69M+p4EnWE0prp23B3GKqFNJpNdJ4hFPFfHTKLMDEk1+J00q+V
+VvhBFkIsYQFql6hdC9O6T9N6Wq0AhQn9L71pHExEqDGBnoHV9GZRQoh5EoupqoUV
+Vvha+gK00q+BG21tniq5L5E7-QBHDVK2VDCG6OeQpF1YXCX6fAHgl94sgLwAGgmV
+VvhCWAt7IIreaX+5lU5L0Mk4-Hp+B-hHWTHxxGhJxNhLYTHTHTHTEdBJh0kk-cUV
+Vvh--P+4Vc9xWTO9MPIXGbFbFbGXGXGXJPLDO1+8Js69M+p4F5YFxARcxRRNxGBV
+VvhBFHFIZl3GoR7G2V8FYl1HGAYospKpm2RcA+HLkHc4W+A0yN3J5N7Cj5N8WZ5V
+VvhN31E9Lo69M+p5lHYFuH2fqdjVtRrZrSLVeODOaVeOJhNKpdAGZhOH2dAGnovV
+VvhDHoE2Fr+6Ls69M+p6EfaF9HH4boHSg8AccBZUc83Ms8gUgdnoLcRB91+4bw6V
+Vvh9M+p5+fXFIHFF5hmaM5WeBON48UqlZHFF71Ek+jYfIp-MjdVkooao5oDXETEV
+VvhXETFxx3h7h9popoopDHIDJ2+34DHHHLFxh-wzsnjbByUn859cgglX8AcmX8QV
+VvhUnb6B6lnKAN3X4BclTBslDC6knaA77X0CUX-CVX-CVazCWazCXWyCYWxGYWxV
+VvhCZWwwuO9jndsiXe6iIe6iHeMi1eci1edhXethfSpi9Gth1fcgzCjWmwv092vV
+Vvh49-949+v88wvC8wvCOovGOovK8kvO8h9O8gvS8d9S8cvW8Z9W8VPW8O9OOCWV
+Vvhgu88edl8aj4deeyEpg29t8pBF49uMRMxLqorocoMoMoLoboboboqopp3p3p3V
+Vvhp2pIpXq-+-LHpYpZpDPHTGyB5toDcAyVne9CAMnH8Aomb9AtmnGAcpX7FMmHV
+VvhOAXnSATnWAMtX3GMlHc6l1cMl1cNkXcdkXcskHd6k2d6k1dMjzCaWywuS9ouV
+VvhW9l8W9kua9gue9guePYuiPari9WriPQuu9PnfshTCkWoClWnGlWnCmWmCnWmV
+VvhCnakCoakCpWjCqWiGqWiCrWhGrWhCsWgGsWfKsWdWqaacfCWcOedfneuajGdV
+VvheewkYBv00yGhHI3UyZzC5JDGLFTDXCIIn37Qd3H7FoloVAN8-AF87A38Iw-8V
+VvhN9t8UvsucfwE+NExBBBR5qo5nzXCyQru1AcQiWmn4AcmX8Adm1CQUoX5BMlYV
+VvhKAMqX3wrX2wsX1CMkYaA6u0A2u4A2u4Pwu8PwuC9suG9p8G9ouK9nndcizCbV
+VvhWuCcWtGcWtCdWsCeWsCeaqCfaqhvKsh9aoCiWnwuy99ng6gHgMg2gMg1gcfnV
+VvhgsfngtfHh7fHhMf1hceohcenhseYhseXi6eIi6e3i6dchdcu8ncceeb2eOwOV
+VvhaefkYBf10yGhHINPyZf4Ga53SYD0c86gCWc0knNM9183MwAe0Wkmce10CYT3V
+Vvh4aE+6mDMHMLKxhJxHsozbGyUoO5Ech+lXDAcnn8QonbBB6n1KAh3X9BcmjBsV
+VvhmTC6m1aAR7X5CUX4CVX4CVb2CWb2CXX1CYX0GYX0CZX-wuOA1ndsjne6jYe6V
+VvhjXeMjHecjHedinetivSui9atiHfciDCjWrwv09Mv49J949Iv89EvC9EvCP6vV
+VvhGP6vK92vO9-9O9+vS8x9S8wvW8t9W8pPW8i9OOWWgu8XeeajKfeOxeaefp0EV
+VvhoQE9t8pBF3ruLA78FA7u3w0NWzse080yaNjsc6kKcakod2+0cnpYpZpDPHTGV
+VvhyB5toDcAyVne9CAMnH8Aomb9AtmnGAcpX7FMmHOAXnSATnWAMtX3GMlHc6l1V
+VvhcMl1cNkXcdkXcskHd6k2d6k1dMjzCaWywuS9ouW9l8W9kua9gue9guePYuiPV
+Vvhari9WriPQuu9PnfshTCkWoClWnGlWnCmWmCnWmCnakCoakCpWjCqWiGqWiCrV
+VvhWhGrWhCsWgGsWfKsWdWqaacfCWcOedfneuajGdeewu1TlEjYfIp-MzdWqqreV
+VvhqnJBUt9LCXpWg1pHg1pGgHpC6v2xHmgHpGg1pXchQt9NFHqura+-pX+GE-7EV
+Vvh2DPTTSyBrtrDfPgBelqX4BYmXNAdpnCRQoXKBMpIKBIqXIwrXHwsXGCMoIaBV
+Vvh2uXECkXECkbCClbCCmXBCnXAGnXACoX9wvKAfnhcmHhsm2hsm1i6lniMlniNV
+VvhlHidlQP2lwD6knjMkjCyX-wvyA+w09xA09ww49sw89sw8PkwCPkwG9gwK9dAV
+VvhK9cwO9ZAO9YwS9VAS9RQS9KAKP8lkf49asovWy4siPuV4gMC5xNPKoTuFgnNV
+VvhmxfAqRAletgB6oWwXGB5jqzFBLk3o1Nw-Qx3T0HDBbkXnzBrkXnjBrknnHVwV
+VvhAwl6T1DAC5l1moVwEwgtT2D8CbknmnZwEwcuT398Cbhmpng5hnpIdvQxMv-vV
+VvhQxIv3vQxIv3vNBHngLhnp1gbhYoogbhJongbhJongrgrox9Gox9GoXh5groIV
+Vvhh5hJoHhLhJoDCpSrDECqSrDECqSqHDCqSrCm9+GqSrClD+CrSrClCzCsSrCkV
+VvhD+CrSs8lCzwvVwIvwvZwF9t9VwIvwvZwIvvnibl1jXibl1jnibkojXirkojIV
+VvhirkYjXirkZjIirkYjXj5kJjIj5jrj3irjrisibj8i94sWsgfKtbHh9eBCqi7V
+VvhovKUnwQ9QiN8F3jkFwiPUQSqh1l9elD0g7OIk7h3RPuPV3OxWvEqj6jXBfiAV
+Vvh+lSuT1esX2asX4WrX5WqX6WpX8OpX9Oob9OoXAOnXBKnbBKmbCKmXEGlbDGlV
+VvhyR-90h-90R2v0h2v0R6uyhvWfSsuriGhzt+EbG8lsdoHgS8R+v8QwvGAwvGAV
+VvhsvKAovOQkvSAgvWAcvdwcveAUvlwQvtwIvyAAw3w6wBvxAJvpAS9ZAi9FgqdV
+VvhTFixKrqurzQ-5r+Gc-Bk34+Ht5+FQ-3k2LrepPTLghGEjgU8qb-4FK9tMPxBV
+VvhNhFxHsp5p6p5pTTJPKPKxRRRRBXoq1qF+-nC98ftfO8jalWjWnSjWoPuy9JOV
+Vvhu9NS8iWrCissi1fS89Yuq9Uuq8YeEuq8UuIerse1jS88Uvu8R9q8Uvu8R9u8V
+VvhNPu8C9rWgvu8FvrXWbGxsse1jMe1dmezWcCaCfWuCfWvCfy9cum9Z8i9cum9V
+VvhZ8m9Yuq9V8m9Yursi2fMhofMhpfMhZfchKfch5fMgsfcgO0gc8qXdQmZz9dUV
+VvhYA570hdkFYJWyK5GDKxhFxCB8B8B7xBxBxBxFhFRJRJRJRJBNBQxYE+R5WmeV
+VvhyOqWftgMfsgrfsh4yjWpKiWqLWfchnfiC9UurWWtChWsChWd8YChWcCZ8hy8V
+VvhUvrWWcCyWbGxWcCyWbGyWaKyWXWxsfCyWYSxssdojSC8Uvq8UuQejse1dXesV
+VvhiXesinezWuCgWtGfWuCgWtGgWtChWsGgWtChy9V8q9R8q9ROq9NOu9Jeu9FuV
+Vvhq9C8u94Uf80hcuLAdTmuM719mUfOQ2N3MDZTmVqHpZpLosoZ3B-GLCFInIRAV
+Vvhh6H8GUH6GWH3GZD2GaH0GcD0Ce912+6SsgejahceyP48y9Buy9FjfshJfchZV
+Vvhseu9QuvXWsChsciHfMi1fMeGd1fMe1dGfTWcCxsce1jcdojMe1jcdojcdZjcV
+VvhcsjS8njcd5jSC8R9rXWcCxWcCb8fy8UuMui9cui9gujsiXf6iIesiXf6iIf6V
+VvhiHfMi2f6iHfTWsGhWrGhWrKhWqKiWpOiWoShWnWiWlc8mUfOCZn8Lwiac9f9V
+Vvh0hdkFYJRyJnBGnHGSkTEaMny8cfCaNnseB3f3hB9B++mjWqPuPmljdk6jckbV
+VvhjckqyyX2KxX3LWjMlXjSCAQvnWX6CwX5CwWs8nCwWrCo8wy9QwnWWrDBWqHAV
+VvhWrDBWqHBWpLBWmXAsg9BWnTAsshYnCC9Qwm9QvMffshnhHicmHicmXijX7CvV
+VvhX6GuX7CvX6GvX6CwX5GvX6CwyAR9mAN9mANPmAJPqAFfqABvmA89qA0fifmmV
+VvhhBiozOhEg3rA-Wgu80tWya5DHRPPTPyBhxiBhxnrr4rKrTLSLSHTxBwk2-+-V
+VvhEQz4oQPDnvptqSCBbXXNssqSCBbXXNssqSCBbXXNssqSCBbXXNssqSCBbXXNV
+VvhssqTXMjDnwPFlgz4c45B-Wgu817Wya5HDGxh-wyAuAuAtwxwxwxx-h-R3R3RV
+Vvh3R3B7BAxIE+JT+iw8vkAGkn7niCAvXXCssniCAvXXCssniCAvXXCssniCAvXV
+VvhXCssniCAvXXCssnjXBgAH+iw8vk9g9-enUMfCWUiMDdTqF+EDRLQTOXNIIppV
+Vvh7RJ3HIFooYVB38HDH+HAH1D9H2H7H4D7D6982+3xnwPFlgzDjLbNssqSCBbXV
+VvhXNssqSCBbXXNssqSCBbXXNssqSCBbXXNssqSCBbXXNyBWwzDlh54nwOkKQw4V
+Vvh8nccAZruLAtA7AtvTAaMmy8cf8aNmseApg-gxA7++Z9Dmh58nxCxiRrXXRssV
+VvhrSCBrXXRssrSCBrXXRssrSCBrXXRssrSCBrXXRssrSCBrsr9owz8oQfDme0hV
+Vvho+kIRYt7FzZ4hgn5nwHGmNi8m7ielcjNlMjsl6k5l6k6kckckTX1X+X2WyX3V
+VvhWyX4SyyAO9nslsjDX5bXicm7svaAaS8sX7esX7asX8asX7eTm9WelvWPXsmOV
+Vvhi6mNi6mdi6mOiDX7asyAaPbsm7iMmMicm7icltislsisltislsj6lcjMlMjMV
+VvhlMjclLjsl5k6krk6krkMkMkck6ksjcl6jNlMitlOi8jx9-oADAlkcC1F0yGhV
+VvhHJ3PyJfIGp5TSnDQel9RgO9RBZUhocJXrGelrGgOr1grrlhI+17vOyizhfSxV
+Vvhivug8klOkrlf11L6gAFAXn4AAwXWAskHmHGA+wXnK9wwbnO9swUrWxD7wsWwV
+VvhD7C7inmDCciXmTCkWtD6ClWsD7sXgchnmC6vG9IwYvK9EwUvO9AwbWCrWmD6V
+VvhsXiMg1mHiccwXnisYwbnj6UwUvq5D7wvu4D7CzVHmDD+V1mTD-Unm1kc6wbWV
+VvhD1UHmC6wKgYwOQUwSAbnm5m2m5lpmJlrm3l954Kziw79yvkXk9j19+0UnR6AV
+VvhF2-DEKDkMQZ+2KrrrzXTTTXTQ-1r+EM-3U2TI-7E2Y+Hx+2n+I2+4GgBSrobV
+VvhVwpv7wZvNgRfZwBvhw3ftvtw-vlw3vhwBvZwG9RwNvNwS9FwW9CAZv8Ae91sV
+VvhmseAm7bAbrbBbqbCbpbDZ8ntGR0TCgyi6eo8slfEcS8h0WsenuDtnuGQyJbCV
+VvhdNndOQqabBZzbAa7mtaQi90AeP0AaP4QW9CAS9GAO9OAG9SAC9Zw89eA09lvV
+Vvhy9tvpw3vhwBvVwNvNwZv7wm6TGhxSkmEcAzH12F+Ho3Xw45QA-5qrrrcrMrMV
+VvhrLrbrbrbrqrp+EI--E23+EE-3+2X+I2+4LgBSrobVwpv7wZvNgRfZwBvhw3fV
+Vvhtvtw-vlw3vhwBvZwG9RwNvNwS9FwW9CAZv8Ae91smseAm7bAbrbBbqbCbpbDV
+VvhZ8ntGR0TCgyi6eo8slfEcS8h0WsenuDtnuGQyJbCdNndOQqabBZzbAa7mtaQV
+Vvhi90AeP0AaP4QW9CAS9GAO9OAG9SAC9Zw89eA09lvy9tvpw3vhwBvVwNvNwZvV
+Vvh7wm6TGhxSkmEcBPI12F+Ho3Vw3zI2-Ek2J+ETSXRIIqp7RZ3HMFopYVBJ8HHV
+VvhGlHEGoDDGpHBGrDBCt9C2+5UgBSrobVwpv7wZvNgRfZwBvhw3ftvtw-vlw3vV
+VvhhwBvZwG9RwNvNwS9FwW9CAZv8Ae91smseAm7bAbrbBbqbCbpbDZ8ntGR0TCgV
+Vvhyi6eo8slfEcS8h0WsenuDtnuGQyJbCdNndOQqabBZzbAa7mtaQi90AeP0AaPV
+Vvh4QW9CAS9GAO9OAG9SAC9Zw89eA09lvy9tvpw3vhwBvVwNvNwZv7wm6TGhxSkV
+VvhmP1ApEl2E2x-LD-Oqol-rbkXquk0rA0Wr1NM9Q83MxkekBkg0hgw7xsQF++aV
+Vvh0k3gM-3sTQT-TMT3PKP6TGT8TEPBTBTDT9TET8TGT6THX4TJT3TKX1TLX0XMV
+VvhT-XNWzXOWcqsaRiTSRmTORqTKRuIfSZ7rtwuresWfTfX4hyVseru9WfSczbSV
+Vvhd7rdKRqZbRZdr8ORmLyRiMbOaNqciBaPXMb+bLX0XKX1XJX3XHX4XGX6TFX7V
+VvhXDX9TCXBTATET8TGT5TJT3TMT-TPW5+FlU3fq912pUl2E2x-Lj-QpokYrLhxV
+VvhiNXOseWhaNbOWcr4k4rYkY+0rP+KlU2LVxlw3xVwJhNgVx7wdx-gpwpwxwhxV
+Vvh-wdx7wVxCANxJwJxOABxSA8BVw4Ba9yBe8XPWNqtxtr7xdrNxNrdGhuIbTbnV
+VvhfSfW8hyiAOru5WfTci8huXyRuYbSZNrOKRqKbQddr7TtqtWReNbOWsqNiBWQV
+Vvh0RSA8BOACBKAKBCAOB8AVx4AaAyAhwuApwlx-wdx7wRxJwJxVw3xi6Q-54+KV
+VvhjM0lBxUAF2-DGJDoH+8z60cU8W+e9Tj29Qlg+hhsSGqKkqMhVgRJ9LL8MWpZV
+VvhnMpZnqpKoKopp3oZp5o3p03gtREWPBPI6qmqp0FgdhEZP7PI7blromVgRhAdV
+VvhP4PH8alLoWhwBxAfT1TG9+T0TG9-T0TF90T-TF91T-TE92T+XD93T+TD93WsV
+VvhnmlMiAsgO8XC95WcnGm6eAkga7XA97WcmmmceAcgi8X79AWMmWmseAYgm8X6V
+Vvh9BWclmnbiAMgu9T49DWrlGo5k5l0o6k5l0o5kLkmo6kLkWoLkbkGoMkbk0obV
+VvhkrghBgFu9HT2SGorlLYhBgRc9HT5Nmp4m4MhFgdY9IP9Mmp4nJ6hFguBFh-xV
+VvhBh3hBhBh3hJR-RNwphMWL9LL74lqpmRgBhUdW5qmkAPQ92jT60cU8W+e60gEV
+Vvh970LqEjYfIp1MyhVh2p4obojXGTGXGTHxxBhFhHppJpIpjHKDL2+4tsf4Zf8V
+Vvh4Vge4baqSdWrKfWsGfy9UujXWsCfssi1eyC9UujXWsCfssi1eyC9UujXWsCfV
+Vvhssi1eyC9UujXWsCfsci1fDWrChy9Muu9Iv1rh1gLgngbgXh4gHhLfnhqfXiKV
+Vvhf1ipeYjJe2jqcqkLVwGdm8LBb00Eahc9t8pBEqDfMQQxHqoboMo6o6o5oLoLV
+VvhoLoaoZopopopoop2pHpl+-ji8ldOmVcP8VdthbeMhpesi2ezWsCfssi1eyC9V
+VvhUujXWsCfssi1eyC9UujXWsCfssi1eyC9UujXWsCfssi1ey89UunshnfTWqCiV
+VvhWpCkxvEv3vAv7v6vFf2vJuwvResvZekvhOd9pOV9xeBg3sT2eQWZnNkUY8HPV
+Vvh0yGhHIBVupyz5LDILHTFXEIInZ7Ql3H9FomIVAV8-AN87AB8Iw78NA-8Uw+uV
+Vvhcg2E+UbWgOKgcO4mcOSPNua9ROi9V8jsi1eyC9UujXWsCfssi1eyC9UujXWsV
+VvhCfssi1eyC9UujXWsCfssi1eyC9UujWWsCgy9QurshXfchHgDSoClSnCmSmCoV
+VvhOlCpSjCrOiCtOgCvKeGxKcGzOXP-S5l8b6dQqQ8UZBk9t8pBEpvfLA79BB-vV
+Vvh-wuNXBseWgmNbBWcnqgKoIgo+11i9+h9ikgA4khdlLi6lZicloijX5CusslnV
+VvhiiCAQvfXX5CusslniiCAQvfXX5CusslniiCAQvfXX5Cusslnii8AQvjslXjDV
+VvhX3CxX2CzxwAw-w6w3w2wBg+wFvswNfowVfgwdPZAlPRAtf7h-sTHiBSor7oEV
+VvhY9vR0yGhHIJWuq55DKxhFxCB8B8B7xBxBxBxFhFRJRJRJRJBNBQxYE+QmjfgV
+VvhCheVfeydSXhu4YauWaauOcauGfasGgasCharGiapGjaoGkaoCmamCnalCoakV
+VvhGpaiGqaiCrahCtafCuaeGuadGwWdCxabCyaaD+WZH+aXH-aXD1WWD2aUD3aIV
+VvhlcVASLD6ZXmNIwiHH9YYn73AuWnzcR4R9soroy8BBxDWXHTHscoroy8BBxDWV
+VvhXHTHyB4Vm91-gQ0kj8-zrUc73Y2wFzZ4hi8znupsqSBxbXTNTOkAP0lAH-SqV
+Vvhb+SrazSsayStawSuawxviPhviiCtSwfXi5jOhrjdiDSxesSxasSxesSxatSwV
+VvhetSwatSwauSveuSuevStevStewSsexSqezSog9xv4mkQD1kAOvmiBxbXTNsrV
+VvhqTTMfDsfz50VKBwF93djPYbsFwKPAQ8PAQCocvuocw0rUvqrUvxsNYirVaGyV
+VvhOmF3iagYFPlfMnKsOqApipiH3PVPYlKvKuarKuauKwWqKwWtKxWpKxWsOyOpV
+VvhOyOtKzOpKzOsL+OoL+OrP-KnP-KrL0GoL0GrsakYgqkYhbkXgrkXhzP1CnP1V
+VvhCrT-GnT-GrT-CoT-CsT08oT08sTHTLyB8BOR4RKknv1IggqmoPL8hQyslvXAV
+VvhigKumPr0jQSxkfr6jQ8xlvr0jQaulPfAiASsnfP7hh4mnP9IgAykpNoNpjXGV
+VvhXLTHTLyB8BRxBvEgNf2gNfHXD4OkD4OnsYlKg2lKh2l4gIl4h3l4g3l4h3l3V
+VvhgJl3hTL1KmL1KpT-KmT-KqT+KnT+KrWyKoWyKsawKpawKsMIiZhK39dPZHGsV
+VvhKqIoi3iYJPFfR3KoOvBsVvYrW5j2atiIatjHgPKvClhPwfKfsfKg670ua+jYV
+VvhfIp3LShQgod2krcLkNaA1Wc6c9yNb+WUX0OWP2GYE+ALfuv1fOcOujeLcvSVV
+Vvhd7icddiae7iYeti2f7i1fNhofdhIfth2g7h1gdgXgtgHh7g2hNfYhdfXhtfHV
+VvhiNenideYideIj6eHjNdnjddXk6dIk7cokNcnkscXl7c1lNZAO6H5Znm7MwaJV
+VvhD9Yomt7AmFHCcgzu5FbGyBBxDWXHTHscoroy8BBxDWXHTHscorozXFcQWkkPV
+Vvh5+g9k90Js+UhU1IfGTF5mIqaq5qDXMTMXMTNxxZhdhfpqpqorDHQDR2+2kPLV
+VvhfHJHIwVN6plZgVT2L+f1L-f0L1X0P1X-P2X+T2X+P3T+T3SzT4SclLhwNuyAV
+VvhNuT4Si8ANtsslbfrlbhwNs6LlbWi93S13gNsATP3S1BgC6AqkdQpL-AKQpL+V
+VvhAaQbKXFKC2YpJHd4FpAw0vX2P0O+g7fV00q+BGl7x2TQDPxhZxWBSBSBRxVxV
+VvhVxVxZhZRdRdRdRdBhBkxsE+HphWhFJBHmJYXL5Km3wJQ0gFQ4gBQCABgCA7gV
+VvhGA3wGA3gJw3wJw1rlbiAJw-wNvyANvT4Sy8ANusslbjrlbk5lbUWT4S15WT3V
+VvhS17gNsAjP3S1FgC6B4kdQqL-AKQqL+AaQcKXFKCIYpJHh4FpAw4vX3P0OP0WV
+VvhsUUhU1IfFzF3p-rHqZqLpspZ3BFGLGFIoIRAx6HCGYn2k2mIknm2l2lYlXlXV
+Vvhm0ll+-O4puopIpD6KGBQNP6Ll3k8kpkOkZkskakskKl6k5l6k4lLk5lLjrlbV
+VvheAJvT4SjX4SblbfWX4SSCANuxwNvT4S03wNsfWlLUlP4S15qlLUnP1W1Bg8LV
+VvhBJkH3bBJk17b7pcoJXV7BJIuFYRHD+isl4kaUA0SskUhU1IjEjF+r2olqroHV
+Vvhq8khb89NBZUhYcJXqGfBYgfMDFTP5HE+5bM-eU3ZIpDPKGBRZP6LppmhNR0hV
+VvhJR8BJh8BFhCBBxCBBhFxBxFx9rpLoMp5obpLoTXJTFTJTFscpLoCCBJx5rpLV
+VvhobpLUZTJS1HWTIS1JhJsBTPIS1Rh86BqoNQtLEAKQtL17b8pcoJXl7BJIx34V
+VvhFpAxCvXLPFP+k7DY00q+BGp1x25MHFHMSrpdaBLWe8p7aRK8XLP4qIoI+-yKV
+Vvh+Mc-FJBHqJYXLLKm3xJQfILEfHLGXHPGXGPHXFTHXFPITFTITExxJwXITETJV
+VvhTDXJT5pLnWXJSyCBJwxxJx-xJs6rpLUmsbp5UnPJS1Dqp5UpPGW1Jh4LBpo1V
+Vvh3bBpkmNmZOB3MuGHJJD2N5InoPiBJh3ek89Z00q+BGh8x2U-3U3e+HBI+ECGV
+VvhrncxsfDRCnrGkxnWD1rD91rGgxsu9TCG+FFH+Hc-NU+NFU3e+GJHIxRN6ppJV
+VvhgVTHL8oZo8oJocoKoco4oslxCAPIT5p5jrpLeBFvTJSjXJSbpLfWXJSSCBJuV
+VvhxxJvTJS03xJsfWp5UlPJS15qp5UnPGW1Bh4LBJo13bBJkmNmROB3MsGHJJCYV
+VvhN5InmvXHPFO+g9Ta0r9aGY+ixWnMCrrZT-qqBbHMQpdBKFL-HFlQ7AxHb3HAV
+VvhJ7lYmaKQNAVbX5H5O5m2lKaARAJeT6H1Sqm2kqkKm2kakLlZkakalZkakqkqV
+Vvhkql4egBwDAlLlAT7T3PJX3PIX3PJT4PIX4PHX5PHX4TGsclroMlsoMlsnFCAV
+VvhSAkmX4b9AslOmnBwOgcoT3j7BalA55Brkd3AMtP-AK7AEvL+AaAw7A3OAqEvV
+VvhH2NYBaFalw-ZT-n5YuX3g51b-pkaA0N+xGn9XDkQdqH6Kol4kWkpl1kJlXhQV
+VvhFeP1SKksVgG5T2RrlKVwN6TGXGTGyB7x9WXFssoiJxBwwHTD6qnXBgooPABaV
+VvhmXVQV7L5Gpl2kZkJlJRwX1ndoTTGxxChFxJhHYTGTGTGTDf4lgX-nP-xu+RSV
+VvhPH+YGTF5lYoqoLoTXFTFXFTGxx7hBhDpp3p2pTHJDK2DqAr-mKRAJeH0P-H+V
+VvhP0Gql2ZgJ6P4FqloNwRDJwR3T5FMloKAJJX2NckaW7eAqwX2yB-x1YXEsboaV
+Vvhoanl7gwVPCAan1BggpL8BZm2VQN8H2H-H-L1Jrlw9Ab2g6Pd-pthA0Z7x2TNV
+VvhDMxhNxKBGBGBFxJxJxJxNhNRRRRRRRRBVBYxgE+GeB9-naRAdeH5P-H3P0H2V
+VvhP2H0P3H-P4H+P5GrlofrlodwR8X5GclJeAFfX0P-WOkQr2mAbspLpSGBLWTLV
+VvhPLPD3qnmNgsrPAC4mndQcvL6H-L4H1H2H4H-L6JrnA9Fb70kXSc5Laok7YToV
+VvhFR2RUxJRFx8B3FHDIZnIJAl5H8G2mIdARA-AFAAwBAFA3AMw2wUg6E+I0Az-V
+VvhmqRAReH2P-H0P0H-P2GqlIdgN7P5G5loTrloRwR5X5FslJSAFcX0OcaenQ56V
+VvhljXGTGt6oi7xFhFgwIPD6qnXFgkpP9BpmXVQV8L4H+H2H1H-L3JrmQ9Cb40kV
+VvhUSg5Laok8YDoEQNA7ANvT2aMky8cf0aNkseAJg-gRA7++QiBD-nqRAheH6P-V
+VvhH4P0H3P2H1P3H0P4H-P5H+T5GzT5GrloiAR9X3Ksl4k6kakcag9BlQX8yBNxV
+VvhPYXKsbq4q4nlVgwbPCC4n1ZggvL8D+L6H0L4H2H2H5H-L7JrnQ9Gb81+OSk2V
+Vvhu-cU4IbqFx-BRhJxLspLpMpLpjTKPLPLxRVRVBboqHqV0iPIbGB2o1N9BpccV
+VvhKHVbwsRjCLMsRjCLMsRXZr85pTTIsbpDTIsbpDTJS0RtBbUqxtBbUqxtBjS1V
+VvhRcCJUeJnh4DEF1odp4ekRyo2u-cU72bqFxExDqoLo6nsnsnro5o5o5oKoJoZV
+VvhoZoZoYoop1pV1wPEbCB2n1NAcrL783m1VgPnVwLnZwIsT3wtT3C5lHZwMcTFV
+Vvhxx1WTExx1WTExx3s94SHlLUwLrYwJsD3xtD3xsD4O1m3UgZLD8FXn2EwuR-gV
+VvhY8-zvUHc4W+VFzN3jFl1kJk5jcjJ39hGKtFIi2R9N6GpGYgogIg2h1d9J6GrV
+VvhC1iGYEzajdj1F9cqGsBphmVPMsOowsSnwtSnC5gzCLgnVvAtSo85jzSysbjjV
+VvhSysbjjSzS0h5YvBsCnxtCnS1gzSHgzS1h4UvNM8rJni2Mvd2CwayOr0kPyw2V
+Vvhu-cU7IDqEQ3A7A3vSta8seWdaNe8X+P+P0H0E+47PFbDB2nHNAgrL883mHVgV
+VvhTnVwPnZwMsT4wtT4C5lXZwQcTGxx5WTFxx5WTFxx7s95SHlbUwPrYwNsD4xtV
+VvhD4xsD5O1mJUgdLD9FXnIEwyR3gekgz+69M+p92jpGRYhowhQ-AecD7kZD8l0V
+VvhD8mQgWlAgckAYg0gUg8QMgCgIg6lT290ArkWkYFx2qPEBrnXZgwPPOPPLPxhV
+Vvhjpqy7gi6L6kZL3NpFQFOMZkZkZ3Q3QCvP3ealtZgWMP7brP8ZamtJwiJPAZ5V
+Vvhn6GAm2TBUzXBUrnMDWXBUi8Aq1XBRDTBV5nLJwm3TARjT9RrmbZgdeP7Oqm4V
+VvhkKlpkplZl4kqlakKm4dglaPDkxGQkA0awEXyqXcoEjN++FHH2--x2xqg9SmWV
+VvhrXNM9S83MxsenS98rHoL+E5HE+6CPHTNXApXBMJZonJKCKoHNJCpoGRXD4krV
+VvhMXo4krMHoLcsbGSjC6orYsXISS6sTJS1VxJu85pLpzTJTKsbpLprp5pzTJTLV
+VvhxxFxRxJxRxFxVxFt8bp5Yssbp5YtTHSHbrp5YtxxFdCLpKUuTJO0hxNL95pZV
+VvhMwPMF2o3qdonrJmkWD669M+p82boFwZBRhJxLspLpMpLpjTKPLPLxRVRVBboV
+VvhqHqV+-4coQ9ANZmZdQNg-QFQBQ7QFQ3QJfP4OKlqVgVbT6TpT7R5mbCAdnT9V
+VvhTmX9QbmssVX9lC99UMmr9rms7whnT8UrmbHrmLJwVrP6O4lqZgNfP3L-L2L0V
+VvhL1L2L+P4KZmZNgn0oMmEg6vn00q+BGl7x2TQDPxhZxWBSBSBRxVxVxVxZhZRV
+VvhdRdRdRdBhBkxsE+HyBL0o4NQtOL8P+L6L1L4L2L3L3P1P4P-P5P+P6Orm5brV
+VvhmLVwdrX8RrmrPsmrNwi3scmsHWX9VMmrPrmsNwhrT8VrmbXrmLZwVvP6P+P5V
+VvhP-P4P1P3L3L2L4L1L6L+P8KZnZNh10pMnP0Kx+UhU1IdFzF3p-qnq3prpMp3V
+Vvh3B7GLEFInoRAp6HAGYmYk2loknlYl2l2lXl1m0lF+-K6og9BNZmpdQRg-QJQV
+VvhBQBQFQ7QJg-gNeP5OKm4VwVqxwZpT8R6mbFwhnyAhnT9Ui8Ai-scms8AhnxwV
+Vvhi1T9R5mcFwdpxwZqT6S4m4ZgReP4P+P3L0L2L1L1L3L+P5KZmpNgr0ocmg0FV
+VvhxEUhU1IjEjF+r2olqroHq8khb89NBZUhYcJXqGfBYgfMDFTP5HE+5dU-TF+GV
+VvhNZ+EKZr4lRdR7RVRBRRRFhJhJhBhNh7hRh3xRwxxVvTNScqLdxdtyBdtTOWCV
+Vvh8Be5scqcWBdtxxe7TOSbqMdxZvxxVwTLTFPLPGPKPHPJPJPILLLHLMLGLOL4V
+Vvhr3dE23NU2h2-SBz+WDM69M+p9IDoERVB3BVvTKaMpS8cfIaNpMeBRgPNHFE+V
+Vvh5vU-LF+ENZrZdRdgLMLGLKLHLJLIPHPJPFPKPEPLP5prfrq5ZxZsXNS5qbTsV
+VvhqbRxe4scqcLWXOVcqbTrqcRxdsTNW5qLbrq5dxRwPLPEPKPFPJPHPILJLHLKV
+VvhLGLML4qZdRtKM-1F+JXRcAfs00q+BH71yHTK5J9I9IwhEhEhHmp0p0lcMgGnV
+VvhAg7aIGkZdQ3P7PxPFPpPFflPEVKuKp6Ki3hGBPRPIYKqOo7Kh4hGJfFfEaOnV
+VvhOo7qgbgmVf7fEcOlSn8KgLgWZv3f6eSkSm8bg5gGg5g5g0gLfrg0gLg5cf7vV
+Vvh-t8nOlS0grgKYfBv3c8oOmNmh5gaMfJfBa8oOoNGhKh4EfJfNH8qKrImhJi4V
+Vvh2fJPdvJPlfFPpPFPxP7Q-eL06JNg6XgwAbX3whEhEhHmp0p0p0pVpO0UyEXyV
+VvhqXckGTN5joo4nbnjXCTCXCTDxwxh-h1poJoIojHGDH2+2wLCauCmF2hqg1NPV
+VvhNf+bKpSWVfFtC4h5XnZfBswtSnS1Zv7ssXZvBrCLgrYdSnStSnSsSoSsxvBvV
+VvhXrh5i5griC7vFvTrh5i5h5UdSoS1VfFsCC7vFsC5grUuxfBsCagrQv-f85ClV
+VvhKlZmgacmJXgpYnJHhJMqIni90MirgKWUdTc6zhcuAIbqFx6x5qnrncnMnMnLV
+Vvhnbnbnbnqnpo3o3o3o2oIoXp-+-GJntiXgoF9Rf2qKqOl7phLg0VfFuC4h5bnV
+VvhZfBtwtSnSHZv7tsXZvBsCLgrcdSnSuSnStSoStxvBvbrh5iLgriS7vFvXrh5V
+VvhiLh5UeSoS1ZfFsCS7vFsCLgrUv1qgrUv-fBrClOmVngZgNQfBeAZMvFNApIvV
+VvhNKBZAvaka9lv3d0kfDg6zhcuA2TqFRYE2Xrprbr6qp3BZGLLFIpYRBF6HHGYV
+VvhoIk2nYknnIl2molXmnm0n-+-W3rNmHkIFANfBZlKgbL2SWVgBtC4krXnZg7sV
+VvhwtT0S1Zw3ssXZw7rCLkbYdT0T6T0T5T1T5xw7wTrkrlrkbly7wBwPrkrlrkrV
+VvhUdT1S1VgBsCC7wBsC5kbUuxg7sCakbQvP-Vnk3k7Qg3eAZMw7NApIwFKBZAwV
+VvhStX8T+O+k7jw0DvOCX71xY5RHFHRSrqtaBfWe8qNaRe8XQP4rYoI+083+SbMV
+VvhDGF2pKo1NRFh+bLHT0Vh7vC4obfnZh3uwtTFSXZx-usXZx3tCLoLgdTFTNTFV
+VvhTMTGTMxx3xXrobq5oLqC7x7xTrobq5obUfTGS1dh7sCi7x7sCboLUwxh3sD4V
+VvhoLQx-h05DFL7Qh7eAZMxBNApIxJKBZAxWtXPT4eUljo6ZWorA3rrFx2x1qnbV
+VvhnMn6n6n5nLnLnLnanZnpnpnpnoo2oHol+-EZndingIF9VeBZhqcbKqSGVfJsV
+VvhC4hLTnZfFrwtSoRnZvBrsXZvFqCLh5UdSoSsSoSrSpSrxvFvTrhLhrh5hy7vV
+VvhJvPXSpSrSoSsOpSrxvJvRvFvbqh5iKgsiKgriqgMj3g7j3YlSxNI3w0l7w7pV
+VvhTCTBxwtgtvd9JfdfBva97fe93va97fe93fhv7Plf7PovFPwv7Q+v3Q6uL2BaV
+Vvhlv59T40Ucjs6zhcuCZk+FwBx0pnzhBTspyBxTXTLsrpyBxTXTLTMS6m5KmlbV
+VvhBLL1QYgIkb2vFA4fJQ0PRPuPVfq9dPrriqiyBvly8tSxStSwXXi5jMsfRvq9V
+VvhVvpvVvq9VvpvZvm9ZvlvZvpvZvlvdvlfhvhvdvhvhvhfm9Zfq9VfqPRfufJQV
+Vvh-l8nP-QWgKkLErT1RP94RsmLpyBxTXTLsrpzTKfCyxlvn60UuTw69M+pD3s-V
+VvhGAuRGpnrRghf3QZfBQRPJgJfNQHqhqkjOsT+SsT+OtTvxvZzjri5jriLjriKV
+Vvhk5i5k5i4kLi3kLi4kLi3kbi2krhpkrhokrhol5hnj9KqGwhPJ9qph2lbh2lrV
+Vvhgplrgom5gZm5gYmCBv7QVv7gNvBgNvBwLrgsl5h6krh7kLhdk5hsk5htjzSsV
+VvhWyt5icj5isjC7ve9ppCmSxRJg6jLFf-vtoObjrFP-vxoGkSzRHgKk5Mf-g3qV
+VvhCJkrR4L2Of13SlT5xxfqqbqi7h2qPENKnzV3o6BR3oHGN3oZJBAqHJB2psqZV
+VvhqP0zi+WK9HQlJzR-nIkYnLhwiNX8seWgaNb8Wcn4k4nYkY+01ZrdmXkIFARfV
+VvhBZlagbL3SWVgFtC4l5XnZgBswtT1S1Zw7ssXZwBrCLkrYdT1T6T1T5T2T5xwV
+VvhBwTrl5lrkrly7wFwPXT2T5T1T6P2T5xwFwRwBwbqkrmKkcmKkbmqk6n3iQlNV
+VvhALnKJ-TEk0TGRLrbrTTSPST8H2P8P0T7X-P8X+T7X-P8X+P9T-LAP-LBD1LDV
+VvhD-LED+LGCZp1NhT+qrpUk2jL-pkaA-civGzP9ODNDNDNHMHMHLLLLLLLLLLLV
+VvhLLLLLLLKPKPKPKTJTJTJTKPLTLPLTLPMxhVRVhVRbpqJqIqJqTHOHODOHODOV
+VvhHO8kk2nr-pkaA-siwmymrnrnrYrXrYrYrJrIrYrJrTLRLQPQPQLQPQPPTPPPV
+VvhTPxxZxZhZxZxZxZhdhdhdhdRhRhRhRhBlBlBhRhBlBlBlBohwA-66UUv81IWV
+Vvh5yp5VB77T5SOZeajGsgwTDGshL2dQGN08o6h1mp0nW9I9D9I9D9I90p0nmp0V
+VvhkhEg9I90p0khEg9I90p0khEh+RIR28+A9EKtQmIO-jQM5Wpy6Q-4L+Uv81IWV
+Vvh5yF5oFpFo0p0khEg9I90p0khEg9I9D9I90p0nmp0nmp0nmp0nmp0nmp0o079V
+Vvh6YSOZPWosgT1i9KddNeLT5ZB76-s0Lg69M+p9U9q4xEM0LkEKk-eLE9n4xXkV
+Vvh1qZYNKtoOKNdNL6UJ2pIGT+JMqxYOKtbQqBcNKpZ63FZK0-oNLVow+laPqtoV
+VvFNa3XNK7tR4Lo+Cc++DLqxjMJV
+Vv+V
+Vvend
+Vvbytecount 29312
+Vvcrc32 ee81d491
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm-uu b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm-uu
new file mode 100644
index 0000000000..0e3f659cc4
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm-uu
@@ -0,0 +1,49 @@
+begin 0700 cmti10_tng: please wait
+M ?T $@ /\ + 0 P 0 !- D 'F3![$@"@ (5$58(%1%6%0
+M !%1-5$D
+M " #J%+# "*P >L&P &+ !:PW <L.@ &K"P !ZPH :L"P 'K"@
+M !JPA 3NOT($;J( !*ZB DNH@ )KJ( ,P3 $.A0 #; VP> -@%0
+M#;"< U@B CL "0@ !"ZD :,$ &C! U7: EL+ *+"P ![$; "
+M, $/ ["]%PZP/ BN30 (+ "+5R >L'@ ["]$@?;Y 'VQ #=#8 !YF
+M$ #&@ !3 -%0,0 -V^0 #9#$ V0Q -D,0 #9#$ V:Q -D,0 #9#$
+M V:Q -D,0 #9#$ ,P* #.B@ TI( !XA- -2@ #;"U&!ZP= <L $P
+M&;"$ !JPU =L&TK%["P !6PP1HAL& '+#H :PX /L,P '[#5(!2P 4$G
+ML.@ '+#H !ZP;2L7L(4J'KIL !NP&3 1L*P &K#!)!RPZ <L/$:*;#Q*ARP
+MX2 <L/DE$[#4 /;] .L.P ]N4 VR. #H*@ ["]$0TP3 )L#%%"3 E
+M10VPB1D),$%% [K] DZ9 -L$P Y" .:T )L)@ K")&2(P3 1,$U,
+M#3 Q10TZ,44).F0 "#"910<P4 $<' $#!, DPF 6,)D9"S"P PZ9 '
+M,+@ #3!I%BHP: -L+0 #:"D V@C
+M
+M <X/@
+M 0 0
+M
+M !"ZL 0
+M '/ !SP <\ '. !S@ <\ );"P !JXU 7\+
+M%_"P !?PL 7X+ !O#@ ;PX &\. !N#@ !VP; <X.@ 'O!L ![P; >
+M\&P 'N!L ![@; )4U@ 'L1L !SPZ <\.@ '/#H !S@Z <\/@ %+"$ "NP
+MK -L 0 #; $ VP! -H 0 #: $ VP! :,%P "3A\ JP7 *L%P "K!<
+M J@7 #L!0 [ 4 .P% #H!0 #;!$ !&@" -L$0 #;!$ VP1 -H$0
+M#:!$ FPM -5R $; 4 !&P% 1L!0 $: 4 !"ZL 1NAP #;"T
+M 06P $Z!H !5#& 6Y<P &*SH !HK- :_(P '7"8 !UYM =L%0 '
+MQ-, ""V @[* (9F, ")8M C^V@ )9X8 "= S H)%@ *<<, "J&- K:
+M< +$U, "T,= MRY@ +J\H "^2M P4=@ ,1$ #$U: Q.-0 ,8+( #16:
+M U,^ .&TH #A_6 Y/H .6+H #\** _[;0 06P $2Q: !L%L
+M!=ZX ;CC@ ( "(CV C\E0 )UUX "@XZ IE_@ *KXT "P6P NV"P ,
+M #KKM \GT@ #__=ZX :0 H"4 ,<= #CC@ Z!H 8XZ *X
+MXP #'' QQR 0 !@6 X4P <\4 )=3 "9" GG *@;
+M #;F YXH .Y> #U,@ ! HX 0\" $0. !'2( 3/% $TG@ !-7L
+M 3HX %0-@ !4\8 5:P %8+@ !94, 6IB %XX@ !@2, 82- &)&@ !
+MC18 8\% &A7@ !I" :=" &M" !KJ4 :\X &XXP !NIH <<= ':
+MB@ !X5X >IB 'L\ !]<, ?=X '\F "(/X BL] (NI@ "/I4 E"5
+M )3#@ "8OT G)U *'90 "EU, I]+ *R+0 "\!( P ,9\ #9"
+M:0 , &8 "P!L T )X #^ A@ *8 @%V !I X ; / "> _
+M@ (8 "F (!=@ ;( !@$R H!@ %P )P B #^ X A@ . +0![@"T
+M?(!@ #R 8 ^@&R ! !O@ 4 98 % '6 !0!R@ 4 88 % $& !@!/@ < 0X '
+M $> !X!1@ < >8 % &6 !0!O@ 4 <H % && !0!U@ 6 08 % %B !P!7@ <
+M08 ' %: !X!9@ < ;H ' &R !P!R@ < =8 ' &V !P!T@ < :8 ' $. !P!/
+M@ < 1X ' &B !P!B@ < 58 ' &N !P!V@ < =X ' %& !P!4@ 4 68 % %:
+M!@!7@ 8 98 ( && " !O@ @ 9( ( &. " !G@ B <8 (@"> !@ !JSW_^^E
+M__K? P !HK, -%:__[%^O_^74W__Y=3__\NI@ $ !;ES )T#0 !HK,
++!N.. !!; !HK.
+
+end
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm_vve
new file mode 100644
index 0000000000..98cab06499
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/cmti10.tfm_vve
@@ -0,0 +1,72 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-03:24:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin cmti10.tfm
+Vvh+To+2U+++Dw+9++E++k+E+-B++Y++++5aH-v2U0U+++6J2JM63F3K3E+++++V
+Vvh++++++++++++++++++++++++++++++++++++-3FBJ2Y+++++++++++++++++V
+Vvh++0+++1e391++08k+++Sg4k+49+++-Okr++QgCU+4f0k+-ukc++Og0k+5f0UV
+Vvh+-ekV++Hijo62Pe6+-8uW++YicU+7fe6++AkH++2CVE+1P++++qkS++BU3E+V
+Vvh1P0Q++pUW++Xg+++0EU++-0uY++OA2++4X-+++pLO++Zg9++890k+-v2P++0V
+VvhA+2D+v0x3kukD++WiHE+69+++09Jm++Sg5U++v0x2UTPt++5ql++1R1M+-taV
+Vvh2++14U++-H+B3EAE+++BqyE+1N12++qEl++BYAE+1N12++qOl++BYAE+1N12V
+Vvh++qOl++BYAE+1N12++Ak8++1CWU++od6+-sVB++BGU++1P0p4-ukR++Qg+2kV
+Vvh4P02+-ekp++Rg4of3v0k+-KkkFcVg4++591c++Oks++DgAk+5v1J6-Gk+I2bV
+VvhgCU+591c+-ukPGgLg6Ie5fdg+-ik4H+Fg8k+4f1-7-mku++QgD2O8P1l8VmkV
+VvhsG+QgDYZ2v1I++DPx++CgCk++xiI++qmC++1c8U++v0x2EokH++7g1330H+ZV
+VvhFEqkWFY7A233+vfx++YuN++Bg2k++t0+++COo++7g7U++f074G6kH++FA2pAV
+Vvh1H+lFEouAII7CaE+010NFEQkI++2Q5++21-A++Yka++KA7YN0n0k++kuN++5V
+VvhA9U+1H-d3WckO++Bg9E+1O0Y++qUX+++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh+++++++++++++++++++++++++++++++++++++++QsDU+++++++++++++++++V
+Vvh+E+++++++++++++++E++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh+++++++++++++++++++++++++++++-0ug++++++++++++++++++++++++E++V
+Vvh++++++++++++5D+++-nk+++Qw+++5C+++-nU+++Qw+++7P0k+-esp++Lw9++V
+Vvh3z0k+-Tkg++Ls9++-j1U++Pks++4wC++-i1U+-qkP++QsCU+5j-g+-vkP++SV
+Vvhw4k+5i-g+-vUP++7IpU+5gFg+-nku++QwCU+5D1c+-nUu++QwDU+3902+0ikV
+Vvhf++Bg+E+1P+2++qk-++Bc+E+1O+2++qk-++OA3k+0HVw++ekL++8g3k+0f-QV
+Vvh++eUL++1g-E++v+I++Ck3++1c-E+1P-2+-4U0++Bg2E+1P-2++qkF++Bc2E+V
+Vvh1O-2++akh++BJm++2P+I+-4k3++Fg-E+2O+I+-0ug++FiVk+1P0o++++++++V
+Vvh++++++EKk++2u-c+-J14++KtQk+48nc+-cfB++Oz6k+5L0M+-pth++Rg3E+5V
+VvhlBA+00q+++Uv8++6NaA+07Mh++XyqU+7NsM+0R+n++c73U+8QQA+0e4B++fOV
+VvhQ++92pA+0oAR++hmtU+9ewc+0yGh++kIRU+AF2++12pO++lCBE+AM96+1FKOV
+Vvh++pAy++C4oc+1VzK++tDc++CK9c+1w88++zvPE+EKk++2GlO+++++++-g3g+V
+Vvh-Rus++PXXU+6++++06Xq++XwZE+7pps+0Usu++dZzU+8fso+0kKk++iq0k+AV
+Vvh++++1ffh++wboU++++1zzRus++++OE++c0I++AQR++1XXU++u-c++Msu++8sV
+Vvhsk+155+++llm++E++++++++++-UK+++sIk++QwI++7RH++0N0+++bb+++8UPV
+Vvh++1Pa+++tsc++CtS++1pAU+-+cs++Ew0++2EC++-5G6++HD3++2obU+-BLg+V
+Vvh+Hcs++3EBU+-IwM++JOk++3M9U+-NIA++KdW++3ssU+-UGA++MGB++474U+-V
+VvhXFM++Mw3++4VLU+-d0+++OR0++4h0++-feI++Ows++4ssk+-idc++QQR++5OV
+VvhWU+-sJs++SdW++5gw++-xQA++TRs++5wa++06Ds++Wgx++6idU+0DdI++Z0JV
+Vvh++7H1U+0Mjo++b7p++85NE+0ZpA++dx9++8m9E+0w-6++k++++ANw++1N0++V
+VvhOE+A+4M+0k-g++o+7s+++1y++++VU+++8M++U3q+++-d++s+P++D+0S++++zV
+VvhU+++6M+++0a++6-RU+++P6+-U2m++c-U+3k+7k+W+1y++s+VU+C+9E-vU0o+V
+VvhT6-U+1m+M++yU4m+-+-jU+I+NM+3+5K+-E-mU+I+MM+3+24+-U-DU+Q+Es+5V
+Vvh+2S+-s-FU+Q+SM+3+4K+-E-jU+I+Qc+3+44+-E-pU+K+EM+3+3W+-k-LU+Q+V
+VvhEM+5+3O+-s-NU+Q+Pc+5+4m+-k-mU+Q+RM+5+4q+-k-oU+Q+OM+5+2C+-k-DV
+VvhU+Q+Fs+5+4W+-k-WU+Q+JM+5+4i+-k-qU+Q+Rs+5+34+-k-IU+I+KM+3+3O+V
+Vvh-U-LU+M+NM+6+44+0+-jU+U+N6+6+4C+0+-bU+W+QM+6U0S+-U+-enrzyyZ+V
+VvhzzfT+k+-cfA++B3Ozzv3yjzyLIrzztRHzzwidU+2++++-PZn++7o1E+-cfA+V
+Vv9-iCC+--P+++-cfBOV
+Vv+V
+Vvend
+Vvbytecount 2036
+Vvcrc32 9d46ef63
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo-pk.uu b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo-pk.uu
new file mode 100644
index 0000000000..2e6f1122f6
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo-pk.uu
@@ -0,0 +1,7 @@
+begin 0700 "dodo.pk"
+M]UDqqTyT{UakhcdNmbaO}wqP}wp`H```fIfUcP`diJX`abzN\`yFzvQLzwsP
+MaFyI{fQI}o`cxF]C\`yFzvQLzwrHcepioIhweQD`fmoKNCKP`ViOx_`fyFEL
+M{fETX`B?``````````cPdvEDyvYTzvyIywh@stydsTqo\aAC{VqI{F}SxVAE
+E{vt@utYstducrtyiqtsPcfyO{GqFxvmExGETy?p`Z@``]?{V]@
+`
+end
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.pl b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.pl
new file mode 100644
index 0000000000..5d1829b5bc
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.pl
@@ -0,0 +1,19 @@
+(FAMILY DODO)
+(FACE F MRR)
+(CODINGSCHEME AEFMNOT ONLY)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 7170451431)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.0)
+ (STRETCH R 0.0)
+ (SHRINK R 0.0)
+ (XHEIGHT R 0.0)
+ (QUAD R 0.0)
+ )
+(CHARACTER O 237
+ (CHARWD R 0.0)
+ )
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm-uu b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm-uu
new file mode 100644
index 0000000000..28a238859c
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm-uu
@@ -0,0 +1,7 @@
+begin 0700 dodo_tfmng: please wait
+M "0 $@"? )\ @ ! $ 0 &.>)3&0"@ ,045&34Y/5"!/3DQ9
+M !$1/1$\
+M " 0
+)
+
+end
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm_vve
new file mode 100644
index 0000000000..b51c78296f
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/dodo.tfm_vve
@@ -0,0 +1,30 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-03:24:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin dodo.tfm
+Vvh+0E+2U0T+7w++U+-++2++E+++++++++4CS7H4E0U+++AEIJ4HItDJ0-DHYlNV
+Vvh++++++++++++++++++++++++++++++++++++-2FDF2w+++++++++++++++++V
+Vvh++0++++++E++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vv7++++++++++++V
+Vv+V
+Vvend
+Vvbytecount 144
+Vvcrc32 a318729f
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/excm-fonts.readme b/macros/generic/caesarcm/caesar-fonts-generic.dir/excm-fonts.readme
new file mode 100644
index 0000000000..11e8fd9a68
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/excm-fonts.readme
@@ -0,0 +1,269 @@
+
+ CaesarCM fonts
+ Jan 1993
+
+This directory contains:
+
+ (1) Three "tm" font metrics that bear the characteristic mark of
+an "extended cm font" as required by CaesarCM.
+
+ tmr10.tfm
+ tmti10.tfm
+ tmsl10.tfm
+
+They match the "tm" fonts of Daniel Taupin, posted on ftp
+rsovax.ups.circe.fr [130.84.128.100]. For use see
+CaesarTeaser.doc, and CaesarCM.doc. One such marked .tfm is needed
+per extended cm font installed. A recipe for preparation of
+further marked .tfm's is described below.
+
+ (2) Three files giving a complete specification of the dodo
+font, which may be needed to work around driver problems on low
+resolution printers.
+
+ dodo.tfm
+ dodo.pl
+ dodo.pk
+
+The last serves for all resolutions since since the font consists of
+a single blank character of zero dimensions! This is not an
+(extended) cm font and a fortiori not a marked one. See
+CaesarCM.bugs for instructions.
+
+ Beware that the ".tfm" and ".pk". files mentioned are binary files.
+They can be moved by ftp in binary mode. Type:
+
+ binary <carriage return>
+
+at the ftp prompt.
+
+ They may well be posted in a coded seven bit ASCII form known as
+uu. The uu encoding is available on unix, Mac, PC,
+and some other operating systems.
+
+
+
+
+ _________________________________________
+
+Extracted from CaesarCM.doc April 1992
+by L. Siebenmann
+
+
+
+ Appendix EXTENDED CM FONTS
+
+
+
+
+ By a CM extension class we will mean a subset E of the accented
+characters of the range 128--255 of the Cork norm.
+
+ By a (partially) extended CM TeX font "belonging to" class E will be
+meant one extending the Computer Modern norm for alphabetical fonts in the
+range 0--127, and in agreement with the Cork norm for the subset E of the
+range 128--255.
+
+ In practice it is reasonably clear what "extending the Computer
+Modern norm" means. It is perfectly clear when, in the range 0-127, your
+font coincides in all respects (including name) with one of Knuths CM
+fonts. But note that cmr, cmti, and cmtt differ slightly; for example cmti
+has a pound sign where cmr has a dollar. The Cork norm of 1990 eliminates
+such variations.
+
+ The CM fonts of Knuth, the "TM" fonts of Taupin, and the
+virtual fonts of J. Zlatu\v ska are naturally of extended CM type.
+
+ Unfortunately there exist incompatible extensions of "CM"
+fonts, notably the numerous adaptations of Adobe Postscript fonts
+used by Textures on the Macintosh. (Many other TeX's use raw
+PostScript encoding, which makes these fonts "non-CM" even in the
+range 0-127; Caesar does not deal with them at all.) Such
+noncompatible extensions can be regarded by CaesarCM as
+simply CM fonts (ie as extended CM fonts of class E where E is
+the empty set). The extra characters do no harm, but they cannot
+be exploited by the smart accents mechanism of CaesarCM.
+
+ For an extended CM font to be useful to CaesarCM, an
+extension class E to which it belongs must somehow be made known
+to CaesarCM, which is then prepared to use the ready-made
+accented characters that belong to E.
+
+ Remember then that an extended CM font of class E
+may have some (other) accented characters contradicting the
+Cork norm; CaesarCM just ignores the latter.
+
+ Each new class must be made known to CaesarCM.tex by
+adding suitable data. Currently, just three classes are known to
+CaesarCM.tex, namely
+
+ --- a class CM, the "trivial" class of Computer Modern for
+which E is empty,
+
+ --- a class for TM fonts which (roughly) has E the set of
+accented characters in the segment 192-255 of the Cork norm.
+
+ --- a class AD, the Adobe type one font distribution
+reencoded to extended CM, August 1992 with N. Jungers.
+Coincident with TM in Aug 1992, but hopefully to become
+somewhat larger.
+
+ Other classes can be added with help from a TeX
+programmer.
+
+ Since for each font, CaesarCM needs to have a specified and
+known extension class E, we have to provide means to specify it.
+
+ 1) By default the assigned class will be empty, as for CM
+fonts, but this can be changed to TM (say) by the command
+\let\CaesarDefaultClass\CaesarClassTM.
+
+ 2) The .tfm file may carry external or internal markings that
+cause CaesarCM.tex to conclude automatically that the font belongs
+to a certain class. See the following appendix for details.
+
+ 3) The class can be (re)assigned by command at any time by
+
+ \skewchar<font>=\CaesarClass<class>
+
+where the current possibilities for <class> are CM and TM. For
+example with Plain TeX,
+
+ \skewchar\tenrm=\CaesarClassTM
+
+assigns class TM to \tenrm. (Currently, \CaesarClassCM gives -10
+and \CaesarClassTM gives -20 but these numerical values may be
+ephemeral.) Such an explicit assignment takes priority over an
+internal marking as in (2) above.
+
+ There may be several font commands, say \tenrm and \myrm that
+refer to the same font cmr10; happily the above class change applies to
+all at once --- they are indeed the same font.
+
+
+ Appendix MARKING EXTENDED CM FONTS
+
+
+ CaesarCM uses the notion of a
+
+ "marked and extended"
+
+CM (metric) font. The marking serves to automatically specify an
+extension class to which the font belongs. Note that the marking
+can always be replaced (or overruled) by an explicit class
+assignment as in (3) above. Marking is thus an optional extra
+convenience.
+
+ *** External marking by name prefixes.
+
+ CaesarCM automatically recognises the following two-letter
+".tfm" file name prefixes:
+
+ cm, CM, dm, DM, tm, TM
+
+If one of these prefixes occurs it tests whether <eaccute>
+(at Cork position "E9) has positive width. If so it
+assigns class TM. (A standard CM font of course fails this test.)
+
+ This is a test of last resort that applies only if
+other tests would say nothing (ie give the default class).
+
+ Norbert Schwartz and Daniel Taupin have recommended accent
+management based entirely on prefix tests. (See the June 1992 GUT
+forum proceedings including some macros of Schwartz.) CaesarCM makes
+prefixes one of many useful tests; its use of \skewchar as the basic
+prose font class identifier allows this diversity.
+
+
+ *** Internal marking.
+
+ All fonts distributed with CaesarCM are internally
+marked to assure that their behavior under CaesarCM is (normally)
+independant of the name assigned.
+
+ The internal marking used is very strange; so it is well to
+explain first why mundane solutions seem to fail.
+
+ Font name alone was not an acceptable criterion for CaesarCM
+since from the outset extended fonts under standard CM names were used.
+This is was natural to seek marking devices that are name-independant.
+
+ Other sorts of software, tend to use headers. Indeed, most
+data structures include headers. The .tfm format (which originated at
+Xerox Park) is no exception. Unfortunately TeX seems to heed little
+of this information and passes none on to the TeX programmer.
+
+ One can readily store accessible information in extra font
+dimensions (see TeXbook page 433). Unfortunately, when one consults a
+nonexistant font dimension, an error message is produced.
+
+ Here is the primary `mark' used by Caesar (version 2)
+
+(*) --- (small) positive depth for the ASCII character "5E, the hat
+accent.
+
+ This indicates that the class is not CM. It also indicates
+that fontdimension 8 is present, which then leads to further information
+on the class.
+
+ The hat is a character which, under normal typographic variation,
+will retain depth exactly 0, since its geometric "bounding box" is far
+above the base line. This information cannot be tampered with by other
+macro packages. Seemingly, it is reliable inasmuch as every alphabetical
+font (including PostScript type) that is likely to be encountered in
+prose will have hat in this position.
+
+ You can test whether a .tfm file satisfies condition (*) by
+installing it as indicated in the main text, selecting the font in
+question, and then using the line
+
+ {\catcode`\^=11\setbox0=\hbox{^^5e}\showthe\dp0}
+
+ While only one font class is in use (the class of TM),
+no other information is needed. However other classes
+will be distinguished later on by special values of
+various fontdimensions. For example, it is expected that
+
+(**) --- a small negative value for fontdimension 8 will indicate
+that the font class is TM (or AD).
+
+ When other indications are needed the above rules will be
+extended. Contact the author if the need arises.
+
+ Postings of extended computer modern fonts will hopefully be
+accompanied by .tfm files that provide the above marking. If
+you find that this is not the case, you can use the command
+
+ \skewcharacter\myfont=\CaesarFontClass<classtag>
+
+Alternatively, here is a way to mark a given .tfm file as being
+of class TM. Use a conversion .tfm <--> .pl, as provided in a
+metafont installation, to be able to edit the .tfm file in its
+readable ASCII .pl form. Then change the .pl version by addition of
+a line
+
+ (CHARDP R 0.0001)
+
+to the entry for the character number hex "5E = octal '136. This
+makes the depth .001 pt. (Negative depths are rejected by Knuth's
+PLtoTF program.)
+
+ As for (**) you add a line of the form
+
+ (PARAMETER D 8 R -0.0001)
+
+after the line
+
+ (EXTRASPACE R ???????)
+
+specifying fontdimension 7.
+
+ Since you can expect to need just a few fonts to obtain adequate
+hyphenation this "hacker's approach" should be adequate.
+
+
+
+
+L. Siebenmann
+ <lcs@matups.matups.fr>
+
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/excm-pk.dir_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/excm-pk.dir_vve
new file mode 100644
index 0000000000..1ea06f6822
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/excm-pk.dir_vve
@@ -0,0 +1,49 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.03.30-08:53:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin
+Vvh++M6oE+A++2i++++++DFfE+U++6i9U++++M6sE+I++hXPL6lA0srB1NkOk++V
+Vvh-UXG+-++-Z73EIFBFE++++M6u+52++QiSaZkQ4JY+1+iAn+kQ4gi+++++++4V
+Vvh0BA+4++AMqpnP12k9XQoBb-f+++++++40BE+4++AMqpnP12k9XMmAb-f++++V
+Vvh+++40BI+4++AMqpnP12k9XIlC5-f+++++++40BM+4++AMqpnP12k9XEnAb-fV
+Vvh+++++++40BQ+4++AMqpnP12k9XAqA5-f+++++++40BU+4++AMqpnP12k9XAmV
+VvhCL-f+++++++40BY+4++AMqpnP12k9XAkA5-f+++++++40Bc+4++AMqpoOH2kV
+Vvh9XQoBb-f+++++++40Bg+4++AMqpoOH2k9XMmAb-f+++++++40Bk+4++AMqpoV
+VvhOH2k9XIlC5-f+++++++40Bo+4++AMqpoOH2k9XEnAb-f+++++++40Bs+4++AV
+VvhMqpoOH2k9XAqA5-f+++++++40Bw+4++AMqpoOH2k9XAmCL-f+++++++40C++V
+Vvh4++AMqpoOH2k9XAkA5-f+++++++40C6+3++9MqpmAH+iBX6mQ4g+++M6sk+IV
+Vvh++hXPL6lA0spAHVkOk++-UXY+-E+0qBhQX2k9XEnAb-f+++40CI+5++9MqpmV
+VvhAH+iAn6tQ4g++++++++++++++++++0U+0qBhQX2k9XAqA5-f+++40CQ+3++9V
+VvhMqpmAH+iAn+kQ4g+++M6uE+I++ckA2BjPbFZPbFn++++-UXe+QE+-WtXMKBcV
+VvhNE++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+VvW++++++++++++++++++++++++++++++++++++++++++++++++V
+Vv+V
+Vvend
+Vvbytecount 1024
+Vvcrc32 6ee5897c
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/readme b/macros/generic/caesarcm/caesar-fonts-generic.dir/readme
new file mode 100644
index 0000000000..80398672f7
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/readme
@@ -0,0 +1,10 @@
+
+
+These .pk files are simply copies of .pk files of D.
+Taupin's TM series posted on
+
+ ftp rsovax.ups.circe.fr
+
+with the prefix tm changed to cm for more convenient
+use with CaesarCM.
+
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm-uu b/macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm-uu
new file mode 100644
index 0000000000..e97f13d630
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm-uu
@@ -0,0 +1,44 @@
+begin 0700 tmr10_tfng: please wait
+M <D $@ /\ )@ 0 P !0!8 H (33G.X0"@ (5$58(%1%6%0
+M U1-4@
+M " #J$[ !^P =L %[ !6P ;L &; !VP 9L ';
+M !FP 1L!$*$+ !"P ?L '[ (P #.@ "[ NP +@
+M"[ M@ ;L "0@ RP 9, '3 M7 @L ([ !W$ "
+M, $ K !%PNP ?N0 "]4 !_5 =L K !$@;; &VP "] !UV
+M "&@ !# !%0(0 +VP "Y N0 +D "Y N0 +D "Y
+M N0 +D "Y (P ".@ DH !TA *2@ "K !&!VP ;L %,
+M&+ !FP <L $U%K !2P 20>L &[ 6P 5<-L '; !*A.P 5(A
+ML &[ !VP 346L $>';H !JP 4P0L &; !+ANP ;L 4D)+ %)!NP
+M 2H;L DO$K +; +L ML NR "H K !$0LP 4@0L %""3 !
+M0!"P ), [ 1 @LZ!580L $Z J .J /L $9 K !\P 3H0, $Z
+M"S !0A Z 4(..@ !S @P &@ %*$# !2P\P!1D9, 4:#S \Z!1\)
+M, "S -%B(P# +L "Z N@
+M
+M ;X @
+M 0 0
+M
+M ^Z! 0
+M &_ !OP ;\ &^ !O@ ;\ (+ !FX 6\
+M%O !;P 6X !? 7P %\ !> !RP ;X '? !WP =
+M\ '> !W@ )4P '<0 !OP ;\ &_ !O@ ;\ @ $[ "6P
+M +L "[ NP +H "Z NP 9, "3@ FP )L ";
+M F@ "L K *P "H "[ !"@ +L "[ NP +H
+M"Z FP +5P $+ !"P 0L $* ^Z! 0N@ #+
+M 1QR $XY !556 7''0 &..4 !D1& 9/I@ ''', !XX[ @ @ (
+M , "#CE AQR (<<H "..0 E56 )QQX "@ " IQR@ *JJT "N.0 L<
+M<P +55@ "XX[ O''@ , ( ##CF QQR@ ,CCL #558 YQR@ .JJT $ #
+M ! XY@ 0<<H $<<@ !L%L !=ZX ;CC@ ( "(CV D5G0 )558
+M"?++ I/I0 *KXT "P6P NV"P , #KKM \GT@ #__=ZX :0
+MH"4 ,<= #CC@ !558 8XZ *XXP #'' QQR 0 #CC !F
+M9@ <<@ 3Z5 &R (!,@ $ :0 , &8 "P!L T )X " #^ @ A@ ( *8 "
+M@%V @!I X ; / "> @ _@ ( (8 " "F H!=@ * 8 !< "< (@ _@ .
+M(8 #@"T >X M 'R 8 \@& /@!A@ 0 98 % && !0!O@ 6 8X % $& !@!O
+M@ 4 98 % && !0 N@ : +( & &^ !@!E@ 8 =8 & '* !@!A@ 8 08 ' $^
+M!0!#@ 4 1X %@%& !0!Y@ 4 98 & &^ !@!R@ 8 88 & $& !H!U@ 8 6( %
+M %> !0!!@ 4 5H %@%F !0!T@ 4 =8 % &* !0!Y@ 4 =H %@'> !0!H@ 6
+M:X % &6 " !O@ @ >( % &2 " !C@ @ <8 ( ': !0!J@ D >8 %@'> !0!T
+M@ 4 0X % $^ !0!'@ 4 58 % %& !0!4@ 8 68 & %: !X!7@ > :H (@$F
+M"/_[CCC_^N.- $^E0 !QQW__QQR__^../_^JJK__CCC !QR XXX
+< 555@ "JJL <<= ;CC@ 0 , <<=
+
+end
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm_vve b/macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm_vve
new file mode 100644
index 0000000000..fc589a714c
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/tmr10.tfm_vve
@@ -0,0 +1,67 @@
+**********************************************************************
+** This is a VVencoded file. Implementations of VVDECODE and **
+** VVENCODE are freely available for many different computers and **
+** operating systems. The master portable C source is available **
+** from the Aston University TeX archive - the home of VVCODE. **
+** **
+** If you want to find out more about VVCODE, send a message to **
+** List_Server@TeX.Ac.Uk with the subject text 'HELP VVCODE' **
+**********************************************************************
+Written by VVencode 0.93 beta,
+ BSD 4.3 Unix release (27 July 1992)
+
+Vvdecodeversion 0
+Vvoperatingsystem UNIX
+Vvcharacterset ASCII
+Vvmode binary
+Vvformat stream
+Vvtimestamp 1993.01.31-03:31:00 GMT
+Vvtable
+Vv+-0123456789ABCDEFGHIJKLMNOPQRST
+VvUVWXYZabcdefghijklmnopqrstuvwxyz
+Vvbegin tmr10.tfm
+Vvh+QY+2U+++Dw+7U+E++k+-E-M++c++++6HHbCsE0U+++6J2JM63F3K3E+++++V
+Vvh+++++++++++++++++++++++++++++++++++++pFBIU++++++++++++++++++V
+Vvh++0+++1e2v+++-yk+++Rg+++3v+++-Kk+++Pg+++4P+++-qk+++Ng+++5P++V
+Vvh+-ak+++Fg-2829+++-0k+++Tg+++5v++++6k+++1CU++0v++++ik+++9U+++V
+Vvh0v++++hU+++Pg+++0EU+++mk+++NA+++5H++++hL+++Ug+++6v+++-r2+++0V
+VvhA+2++f+-3kik+++TiE++0xI++-zJ+++Rg++++f+-2UPP+++4qk++0x+++-pqV
+Vvh+++04U++-1+-3E6E+++9qk++0t++++iE+++9Y+++0t++++iE+++9Y+++0t++V
+Vvh++iE+++9Y+++0t++++6k+++0CU+++Yc++-oV+++8GU++0f+-4-qk+++Pg+3AV
+Vvh49+++-ak+++Qg+2p3f+++-Gk+GESg+++4v++++Kk+JQBg+++5P+-8VCk+J6VV
+Vvhg+++4v+++-qk+HIKg+2S5Pc++-ek+IkEg+++4P+-9Vik+++Pg+IY79+37-ikV
+Vvh+GcPg+Yj2f++++9P+++9g++++hg+++im+++0c++++f+-2Egk+IUEg+300H+-V
+VvhE-0k+++7A++++v+F+Ugu-JMEg+2u+e++++Ce+++Dg+2N+f+++-wk+HcEA+2uV
+Vvh0n+-EV+u+I6CCU++-n++++Uk+++4U+3821+-Gkwk-FYNA+IO1n++++wu-Fw7V
+VvhA+++0n+B3W6k1++9g+++0u++++iU++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh+++++++++++++++++++++++++++++++++++++++Ps+U+++++++++++++++++V
+Vvh+E+++++++++++++++E++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++V
+Vvh++++++++++++++++++++++++++++++yu-++++++++++++++++++++++++E++V
+Vvh++++++++++++4z+++-jk+++Pw+++4y+++-jU+++Pw+++69+++-as+++Kw+++V
+Vvh3j+++-Pk+++Ks+++-T++++Lk+++3w+++-S+++-mk+++Ps+++5T+++-rk+++RV
+Vvhw+++5S+++-rU+++7Ik++5QE++-jk+++Pw+++4z+++-jU+++Pw+U+2v+++0KkV
+Vvh+++9g+++0v++++ik+++9c+++0u++++ik+++NA+++0HU+++ak+++7g+++0P++V
+Vvh++aU+++0g++++f++++8k+++0c+++0v+++-0U+++9g+++0v++++ik+++9c+++V
+Vvh0u++++ak+++9Jk++29+++-0k+++Eg+++28++++yu-++EiU++19++++++++++V
+Vvh++++++Flm++2st++-JJK++L55E+4CCI+-YF4++NDdU+555A+-ssv++U++U+6V
+Vvh++A+01XZ++Vlm++6QQc+0CCE++ZJK++7lls+0U+0++dlmU+8eeo+0iCE++gQV
+VvhQk+9JJU+0ssv++j55U+A++6+11Xa++llmU+AXXg+1JJM++tlmU+Ceeo+2++1V
+Vvh+-+stU+EQQc+2QQU+++++++-g3g+-Rus++PXXU+6++++06Xq++YJbE+7JJM+V
+Vvh0T99++dDdE+8fso+0kKk++iq0k+A++++1ffh++wboU++++1zzRus++++OE++V
+Vvhc0I++AQR++1XXU+-JJM++Msu++8ssk+155+++llm++E++++++++++1XX++-aV
+VvhNU++QQU++HuJ+4m++6-AU+2+OE+A+4M+0k-g++o+7s+0+1y++U+VU+6+8M+0V
+VvhU3q++U-d++s+P++D+0S++U+zU+6+6M+0+0a++c-RU+8+M+-Q+0Q+6U+zU+C+V
+Vvh6M+1U0o+Ss+h+5m+M++wU4++DU-VU+E+NM+3+44+-E-jU+K+Ms+3+24+-U-jV
+VvhU+I+NM+3+44+-E+iU+O+96+4+4y+-U-ZU+M+RM+4+58+-U-VU+M+EM+5+2y+V
+Vvh-E-1U+I+Fs+3U34+-E-tU+I+NM+4+4y+-U-mU+M+MM+4+24+-c-pU+M+K6+3V
+Vvh+3S+-E--U+I+Jc+3U3a+-E-oU+I+RM+3+48+-E-tU+I+Rc+3U5S+-E-cU+K+V
+VvhOs+3+4K+0+-jU+U+S6+3+4G+0+-XU+U+QM+6+5O+-E-eU+Y+SM+3U5S+-E-oV
+VvhU+I+Es+3+2y+-E-5U+I+JM+3+34+-E-IU+M+KM+4+3O+-s-LU+S+Oc+6U2a+V
+Vvh0DzvXXXzyiCB++2yZE+-llrzzllmzzyCCDzyeefzzXXX++-lm+++sss+++++V
+VvQ++JJJU+0eeg++QQR++PXXU+E++A++QQR+++++8fzV
+Vv+V
+Vvend
+Vvbytecount 1828
+Vvcrc32 f6409a48
diff --git a/macros/generic/caesarcm/caesar-fonts-generic.dir/v2update.readme b/macros/generic/caesarcm/caesar-fonts-generic.dir/v2update.readme
new file mode 100644
index 0000000000..3422341e3b
--- /dev/null
+++ b/macros/generic/caesarcm/caesar-fonts-generic.dir/v2update.readme
@@ -0,0 +1,38 @@
+
+
+ These .tfm files are for use with the accent administration
+package CaesarCM operating under standard .tex implementations.
+
+ New versions are needed because kerning involving accented
+characters was omitted from the TM fonts of D. Taupin 1992, on
+which the first posting was based. In this second posting the
+font metric files are instead based on the parallel DM virtual
+font series of Brouard and Sullivan 1990.
+
+ Included are new versions of the font metrics for extended
+versions of
+
+ cmr10
+ cmsl10
+ cmti10
+
+as distributed with CaesarCM (version 1 or 2). The tmr10.tfm is
+just a renamed copy of cmr10.tfm. And dodo.tfm is unchanged.
+For various reasons it is most convenient (but not necessary) to
+use standard CM names for fonts that are in fact extended to the
+ISOLatin1 half of the Cork norm 128-255 range.
+
+ Incidentally, CaesarCM of >= Jan 1993 indicates quick
+procedures to set up further extended CM fonts that may prove
+necessary, for example an extended cmr9 for figure captions. One
+naively marries a TM series .pk file of Taupin with a DM
+series .tfm file of Brouard-Sullivan. The quick procedure relies
+partly on the constructed font name beginning in one of CM, TM,
+DM, cm, tm, dm in order to identify the font as extended CM. On
+ther other hand, the .tfm files posted here are internally marked
+to be automatically recognized as extended CM *no matter what the
+name*.
+
+
+
+
diff --git a/macros/generic/caesarcm/caesarcmfonts.dir/00files.txt b/macros/generic/caesarcm/caesarcmfonts.dir/00files.txt
new file mode 100644
index 0000000000..ddd82c0761
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmfonts.dir/00files.txt
@@ -0,0 +1,16 @@
+Files matching DISK$TEX:[TEX-ARCHIVE.MACROS.GENERIC.CAESARCM.CAESARCMFONTS.DIR]*.*
+ (listing updated: 3-May-93 05:55).
+
+Last change Size Type File specification
+------------------------------------------------------------------------------
+ 2-May-93 01:05 467642 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]excm-oztex-pk-cpt.hqx
+ 2-May-93 01:05 5926 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]excm-textures-v1to2update-cpt.hqx
+ 2-May-93 01:05 9006 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]excm-oz-metrics-v2-cpt.hqx
+ 2-May-93 01:05 3592 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]xadobetextures.pub
+ 2-May-93 01:05 671200 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]excm-textures-v2-cpt.hqx
+ 2-May-93 01:05 784 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]excm-textures-v2.readme
+ 2-May-93 01:05 1766 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]caesar-fonts-generic.dir_vve
+ 2-May-93 01:05 1766 txt [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]xadobe-textures.dir_vve
+27-Mar-93 00:38 - *DIR* [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]caesar-fonts-generic.dir
+27-Mar-93 00:38 - *DIR* [tex-archive.macros.generic.caesarcm.caesarcmfonts.dir]xadobe-textures.dir
+------------------------------------------------------------------------------
diff --git a/macros/generic/caesarcm/caesarcmfonts.dir/excm-oz-metrics-v2-cpt.hqx b/macros/generic/caesarcm/caesarcmfonts.dir/excm-oz-metrics-v2-cpt.hqx
new file mode 100644
index 0000000000..099457bc24
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmfonts.dir/excm-oz-metrics-v2-cpt.hqx
@@ -0,0 +1,137 @@
+(This file must be converted with BinHex 4.0)
+:&Q9iBfdYEhSYE@9dFQPMFbef-LjMF(3!8%&$9%033e3"!!!!'2F!!!!!S$F"!FE
+!!!!AJi!dCQ9RCQ9RGeH)Q(L(KRH(GiQ)Q!U3!+QCB!!*!(PjN!#*U(UCQCQ*L!J
++LRKhL!QC!*Q(US#BLC!!#DKkQBQC#C!!!%L!!!#3!!!)J)!!#J!!!!S!N!!!#C!
+!!(N+#P#3!!#3!)Q!!!!!!+!(UCN!N!#3!*!!#3!!#J#JQ3F*N!!!S!S!J*!!!*!
+!!*S+KJX!!5489Q!!!'F!F!J608C@9PF!F*I2'k!q+1qLU,m84cB["#jbI%qVliq
+!%k[Nmh3!QV(9kfICeH6b`491)rjZkiM2!QF"0k"0i"-!%c'P(4#%C9H9HU"##*S
+JPM$%@G1)T"L#8N9B)p*b%AEN4I8!&'F"+GH)d!KhUM(q&!*4BVP[8dcrQ%(fJJ#
++D"MG@rp4##8r@&1S&0r%@X-YjBU#L-GP"(4$iJp'+d@#d@113M4L,`)[9bhbP'#
+ZA)hcG5CYF[$b`4hPFZ&`'iC4A,AafB4,[phA,Pk,6!3&NZ"RGZ)hj"&M'CA,`8F
+`9dF,K!3MRIi+l[KETD39`G%I)#$E*U6+T`bmbUZ@TG`brBS*GALPH9BTdk0B-DD
+8@GU)bDjCPKC4KPTe!3FDP@R,8b$6'-0,J%YcPa`jjf6KSc-c$4[mN!#Q6TdCkLP
+1((bq$K[ZEJ)S"1VeZIJqki"mH3&T3ABbHhD!q8`MJlKSY"%%qj!!4`B[3mcY4'@
+$%%B)$P!)34JJ)CU`X%C`334JK%!*GrHj`0qNRFZ3!,Ur$Gq6G%1A0JaI(hG)#,,
+d%34RKk#0%0@90%2S3QLkHlq6B)$#`#Sp61lQ"@ZRrQ,@jfBSjQY&'hR4Ed[`Lhj
+(P4EjAa4MC[miaZaiXA)X!5c&`1A"KFkId4F'PhQFf,Zh`$qABLm&,ferD,`BT(&
+)FT(P)J[L#rTIM&m5A`TMKc)"Q3-+L-9"bS)C@hS&6SPAjm8Ill8@pcX%h2H2Ir1
+,ZmrU5r@LlqAdaHjA`aHr[eiTSVLRjD52a'4frqaNm6l"rDaIr(N4dBMi1(%'Ni)
+4)H5l'R&MYEN@Fhq3!"0Q&`HjTEN4d1K%'PjFAqNHY1*mLFKpIMS46(V4Maa*f)m
+F#D)%r91a2d34dBb!jN[jbIT4k%F51#',-p%#H"(ZJ6hJai`%iXHR1e(mCd!LL2A
+R42B"('RE3aiBm'GZIkf&,B8Yal)%f3*kB%idmD18*2fJ6bb!IZ"(Z-H1-(ULh01
+1D(0GNNSM@'(1"(X!6f3*cf[1S'2D"(U!Me@3!-Z%-Z4lB-rJ#0J#G-##L1P1kQM
+'#K#T#U"6)jJ%93e5FFi#DdmDHZ"1P1j2cCh-ArZaTB[dh1Zcbb@hRBX@EXiX38l
+ZeYBZkYQ'b&[!i1ZT@0VidRC`YFU3!-k[@Y!!!!#!0@GRCfCfH(GSL)HCKiH'LAH
+CL*L+N!#CQQ!+#CT`H)UDQBQDLTU+LJLTQBKiLCUDN!#)PhQ3!*L+LJUBLCQCQJL
+!S&L!QJ"`S)L+L3#U!*S!U3"j!+QJQBQ+UM#3!+#JKiUC!+UUQJL3!*UB!*!!QCL
+JQUJ+S(N)U+!!UDUJF*!!!*!!S+S*P`X!!50&Gh!!!)!!J!`6089f9QD)K`!!!)#
+M3M5!I3M@aDLqM(MFaHK#[lq[[Ek-`%lEk'ja!*YSiI%kLVY[UGeY!6J8a(qG,2S
+4L6%@jbSkF%B-qY'(2Y4K6PK6m!)Z2#2+M4cdVfe2eB36%33#9,N4GBm4C(PQFD,
+01R"'jLcZ[#MU!TBVa&p2&M#ZF+,B%XlLV'+4c9U3!(VC4!+)U6`qR8!a-hB4Cjr
++M%jribDGkM'NVG$eiVG$64CpVp-@r(dd904%9EPM"U@LB"bcb18JMi)Ia"p'9,P
+U+Q1"0ReX@mAB4Hl1)[CrETlFq'D`SfQR03B8qT'TR`1`kBVQQRdGAUTecBCGccY
+aSTNURUpCTCSlRU3SM&YPRhG9EjQ9'S)*D('&2SpHMQ(2pGAV!*KccZX`jprjHN)
+j8k(['1Hk#1cLckGp&6-hbe*Sl0bMYl8iZaXA2,l0EFX'8A8p+TCamh)Y64MT4GF
+RYi`*m[#U,I&bM(Y!5cFhHaYBrBE'rapA&jFc)Vh0Y&DQhX`jp2!ZCZ&KA-h8B&c
+c)`-I0kLaFm@,0ccqQkUjq3SR&LcQH5"&`IGiHGR!I48!@bJZ6JFcPJI4X4`mq)3
+4K'FJMKLk%`ZAkNG0RjD#1%CfA&hRqbJMK'Gl*Y$+'KPQIP))i4R)*P4BlVYQi*K
+jjQ##)),-22cSdTm3kXNMZf(Zi$dT"%-AD&M'j%@*"##)*QF)fK##1%-Xh8@RK##
+-)c%%h3d-)2%,3X34K!X@!@ZCL0ja`q*HeGrkm9HMb)Zp[N4Gmfh&E'k89Zff89Y
+Vq@,c8q*&japI&H+J%ZSVKbZ-+qrpL+idXEIFaBjZU2ikT&k&,hNrQLp$&NF@3jC
+(PN3($B[XEr%A`N[JTICrBaSK"IK#r'PSMPS3@JKSqEL&AZk*qY&hrEPa@k2(*fI
+C-[iSXB2QNcb)XI$r',hDqI&lqMM4CZjLcqUb51)[qCrZ-$@qf2kZKmBmL0j%CQX
+L$5m%)S(P((aiUF[SaGDR``*`)ULk[HHBGCRf[9r(%I0U4"UH1jV4(Gp9%GjJa(I
+Fq)h4%2"hX4j(Na(#l')mVpN4PrRL2[Hj%FAJa(hp%5c94(RI-L23pH)p2YBMf2J
+L1Gqk)phq%4lh`a(mb1Id)KlrT4(pqrL1PiN4m'ZL2pDH)ri)2LbiMr[fBSZJ*U#
+iDRaiSeQI&'Yi!%rP&'bkk+1jqiD)lb+1qpb+#U8F(C44a1JDBqG&(i[0LMpIUa4
+qrEQmEZ+PR*LSEAZY2k8EkQ+GT63BPI4i-@BhdD+0E68Mji%a3*mUQT6pF%Eb,m1
+B$r18lU1p2m2U3aG8iS%kk1#"1%'0J"1bMGdeBm#Ql"&h(fUEZR*"(D8eN!$(dae
+p0DRV@+9JT@MaJ*`!*Z`*fP0j'e%RDJ6k*!1i"(ffH1B2bLY5R'j$QiD5AFC!`lX
+%H+"2'!RI[22($(N!M`J4pKSCA)CAMb3CP!M*!Qr!JSMHdf%dCJS3U3UJ8b0Z"&8
+0X6MZ`*N8hP1i!QpTVdr5TVk(rq2MD(rZMaSSl,m-8FfhSD'Ti'KS"6j16bG$j-E
+Sa"qEV`5TbCEpVUFRdNSEf"HrSC`q*9!!!)!cCQGhChCeGhH)L(LBHAL)H(QBPjQ
+)Q*!!DUUCS)"kQCU)U)J+USU)ZBX)HTL*QBU!LSQBLCLUH+TjLCLDLJL3!!"SN!#
+DUTQ!U*U!!+QTQ*!!S*YjN!#EUT!!#UUT8*QUS*P`#JUCUBQDS+#U!*ZkQDUJL+#
+UHDQ3!+UDN!#DS(S!UUZEQCL(#`!")d9JF)!!!!!)#a-e4'GJG`8!J!!)RQaRJ2R
+4dXAdAFDf0T&b%,MNfH*RSbSL[Ml(FBB%aii[GDDYMl6(q1#Efe%HcS+I0M%TL0,
+6N4c`)`+IhaK8qa'$65&-S%G+m)lZ-rPmf[IjIH4RJ*d)%k)#9E1cLYMD#+"j46`
+iSYBi)qc&'llb1J#PcAL,l,j%B0R@S*&'hl5034cSe)19N48XcHeDIak+mTkQ-6c
+1RM$'Q*kRjbDF1!aRVMQH[&ac,k+25rG'Phep&A"L,Dc4SDYm6!18FMP))q%44i6
+q'2`bVCk1+Z-"0PmD0,TqRLMC+iIKjl5dpZF`QcScN!"JdqR'NTi'Ud4A0$6jf$T
+kGff'@p1C&l6qQ006kQ(S+Cef+&%BdV,2TDR5jH4(2dk1cIdrG)*jh3SjK8ri`HN
+TraUF+ReF2#Trre'I)j9jRqB[+ID"(eiSmR@49b[(A*,qJd5jTppXEQcU0M46hZM
+ZE1Zf0A,jXA10f4C0R&AN@SUq&k3Nm'+JJa"KIfGTXk,2[YM4M$J89l2*f0aCfX9
+XR*Lq83Xq$'"Cj1MX@DBZa"F@I,LLc[m$8fHd)Tq#+-VaJ*p8p(qAKCRYJHL3!#f
+%&l'qbk32IX4`Xf)34K'BJMKLq#B2PqR'LcD8%F)c+BYmh-34`M-c$8-JD'@CZ3J
+MK'BJQ4&cYY`hSQ&QQB))JJX`Xhfid"iKUM8++Db#1%C5#1'B0RFaFkcZBZUGbJM
+K'9Z680!JMK'8[V'`LrbUl#%%B4P)*X$8$#0[KaILa"'%$4B"IjH%f8FAZVUYJHE
+&Ef-',EDqM&YjRE4EkV'LhihkSYrbG"&aZHLLihA!Lib0$&ab[eaAeGU+r`ZML[[
+ZaL[pM9aAjh,Ljl2kFA2TI!LkZF#,VYI2Lkm6MaGF[*LaRpY&MAk5,("rR&MlRk)
+XH[pk,[3Ga&hX0E&hY1[LlrikL,[Gq6&'Km++0RlFAR2l+,c6IXLmkc+Lmh'A&lq
+AM4Hql`)[Z`L,rTH[,AE66f%@hm2,LhpE[S1maAlcrF9rHlq,RpZkLk[-D,VHmk,
+Vb12&LfTLaq+`IeF4HCIpS[FArdIeXlQMb)hm4PDL)r0T)JK%(1jll'LTjIV49`X
+N#F'+`ZVmpJ4'Xfd4fhS4(J!MNNbm2*L2(jq)jRJa(p10%Ihh84rVhm68lk*[DN6
+IDb*dQ*%r!p#*kI`iRU1*%i`8f[`BREHM%pE6%lMTSRHkq*qC[)RKrbLH,d%6hI(
+LHp+4am#*qYE42LEU*mE$LIYr%LI[9iRlrrF6j"##b6Pq&%PmRPmD*p88Hb3MfXf
+*rejm6rp`iRhMSf(cSUDVUSUG0pU+R9pr&6DJ6EAN90jcBUF(K48qT[BU(&+RrAb
+)UH6UiUCZHLUBe9dHE&AXX-b+lMI4BM)LL-8rarKJ66J6T,8@[P!MIaH"bpIjc)Y
+6DfGUTDhFEQ-@-339E@R!QVML!6Z3!-G5"1VYC&UY(cl9Y'p!R#!R"!Rb`*VV9[(
+@@VL0H"2LfVLerb#2S[+%`I+"TDe`)h!Jfi%e`%kdBGF#2R!6)!R"!R#!R!!REJ6
+I[4K5!MNGS"0i"2NJ6jS%lJ#I3!LQQ14cVJ*eT80Z"0lDVNiVP%Vaf3%l%#GRDVf
+Ze!Q+)*qje@Gl[pGERHjr'V%q,j84rjeqGc[3pc1jhbYTRChJEE1cM`bXE)Zae1h
+SC)[a#r2ci[P!!!!!*!!5!*m!R`!#!!%!!3!"!)'#"`BjiP-C!+!!!!a"48C06Np
+8)%p16&N!JB)E"%424%m!JB)2J!!!!!%!JB)[J$49CQGRGhKh!!"iH'KJJ)GJF)!
+!J!"fF!KiH)L)GiGiCf#&F!!!#(KiL'K`J!!)J!J'C`!)!)H'!)KiF)"`J!F(B!!
+!!!#!#!!!J!!!!!!!!!!!"`!!F!!!!!!!!)#!!!!!!!!!!!!!!!!!J!!!!!!!!!!
+)J!L)!!#!J)!!!!!&#!!")e"!"J"J!a*!0)L5#I%#S*aEI[L+RjLe'K(8MUddaSb
+dSdTF%[V0%hbRqqG[I#r[fm2&EhplJp[U[qkh`kHPJ`hq'BHhU20HH$H+M[pBQ0D
+0H)f,%FQ,,jIRjrT%9GBV2r-PXd916&C*8'9A#XD[Mj'6PFl8kHRQjr2cZKfH[f1
+eUp[Z@0EAl[4YE&c[@5+aVS&VCHB"XbT&CZrc3*U4BTrY2fLQ)Rf3!#A3TFM+VH$
+$l26I`a0bK$r4(SZ4SaR40,GPc-)jZ1Q9i[*`4jBRLU#0f+U-FC'3!1T-TAR'#3)
+rfFBriVj1!&G)'6dAYQk)G#J`J8eD0VE-V'e4ZH(b!MacrSpANa9jrf#)M!$+M&)
+LZq'@Q'IaKRV3`!!!!%)!!)L3!!!!"3!!!!!!!!!!!$#!!!#CJ'PJKiN!!!J!#C!
+!#CK`!!L3!!HB!!P`!*!!!!!!"(98CQ5@9N4T499QPi!!!!Q3!!F!!54&CA@)#L-
+d4%49GA9RD)$#2qrrfqI+HNihkm1NF+CcdL9ja`YH0JAldej4VbR%XFCeeL@A5PD
+DDhPV5eF1XXHFZ-iqFTk5[mr+,GCSEVaMDZ8lapIYjcrU,9MbPM5ZYY18BfkGGYC
+hdhi*JIGr%qmGJ2%JeH9R2+H8HNmC*KmjhUNM5[DfIC!!8eQ6b`aj5[,&)b1mY)Y
+dTU#mF,fk-H[Rj%%ee"VK(M[McPYeT@2$jI,ilKUBGq9-@`p`TI6@1YY'2Y)cdPT
+2,I%I5S3ddM5H0Uj1NBDi*0adRVHQ,dp8VTV13rdJ9(58(8G'HFmimI+1e,kl5cD
+Ik6[314`IYHfdVj4)8hmlCjdl5BkrJfCrEp+ijl+@'c'p1JH[-[3B6MI[d3iQ!r9
+mpP#b5Iqkc,TbIb1BX2CMd[iI"`+dcG#pD!AJ6$NY$8p$#XQkQGd*plL-M`J8Aar
+!SBh*kXI1#0bJGUDFPNJ,4lY0VmDBbcMR@R#IZLK9BDSfM9-G2A!XAqpLjT4HGCG
+!qaYep9%6(@L6I(kNrC@bXb*`bfUDNVa-,GSDQ4VdXleh2I0q%ITqFIZfX[b+#b'
+KU6*rQe-HH(@pXCjEA"(@aHQXEGBiEA+EHS-4$GhDmT&R5pB$MY2#XmCk#S&LfXj
+G1ZCe+VmGN!!AbB1m+F46aM,UZ`DEiqY4!bTfRRkL6Zc9dPaPcA@rVcCKkJ0cN!!
+bcT'km(a)qc4lG(i[Yb(eFUGN8*i0LJU2-1Mp"I8A,R"Lec00MZ*f4Eb9MRP('PA
+2)JUBTIRjEKbEX2%#-HQi`EG'4D)3hAUj3c,(T`p@q!*('eAU-8Gi-U'c!B`I)4)
+@[F$AKiA"!8Jc[TkE9BkTYjRXBU[3(0YEG$rB0bJhFr'FDdqbkDreT([VB16q&[(
+GB+ZN+*II[`1I,B1'!!!!J$4QC@GQC@Gh9iLBH)H'GiGhLBLB#T!!UCPJ!!N!HAQ
+3!)QSHTQCQBQ)#!U+H(H)#CN!QBHUJ*L*N!!*U(UCLCN*N!!!5)!!!*!!!!L!J!!
++!!!!#J#3!!!*N!!!H3S+8*!!!*!!LB!!!!!!S!HTQ3#3!*!!N!!*!!!+!+#C"`Q
+3!!#J#J#!N!!!N!!!QJU'#`!"*&4@B!!!C`"`#"-e4PC@9`"`PmmES$iSlk+S[a4
+(0Lm%,R*m6k[[Mi!6Uq6cG!#DXGAVCpR9j2,"&8iMrQlVL-m#C`%hS%hJ%`!6-D8
+G%)4P9j9kS%))QL#@--4CdiLN')*549JMdR)4GZ4&p3!8C`%TeiM3#(HU-Ii8!P&
+LZ@p662qB3ID#!)TS'0eEre%)*6pB8kJ8hm4D`bhPLS+)af8%G%2L$dBV4B,4Bij
+#0')[!LpA,I+8B+jFMI0e*Qebm2,"(H9biA!EKP&FYI(CK%ZrhGFZASY-"!@5i'G
+fiMIN%@-CPF["4c"A4`Z%"#1GrJVZq&ZPT"A"d4mJ)0XQT-UR$,c+UjDPh$,pLJP
+eH+9j9LR6SeJaTT4CfSM*VPQ@&P''@R8""aU9DFY6)0-B`dZ!5h1A($RRC1'M-c-
+0'rb3!+C1R4RU+8iFI,i1'qjZ!LJ%k[@jq$lVJ(aj!@P"GM*lGS$j6#1$Z'Ld%36
+lN!"("Lp$c1e%CB-34JJ18!K"'#!KQV#`4R"""'#%3!PhplR!hk5Gbj!!ZVm0hj0
+d3jFf$&mIGdJ)X[34"'H(S)d3eC8d3qK#D,Tl[j0JJ-,!+Me-lZB&DkIqBYERCLM
+QDd8EHG&[5r#,INH9&[PI&'0QrcM'l(LaFL`",-A!jF'&cTr4&`DAHCcBZlI!2jG
+L,`8[EApS["LNF8KbNH8L#q),qPq-Aa*I#Q1(-J'C!`U)a8(+JKPEHJ91L9IRa4r
+[Y4Eh1`6FpiprmiZlcqT,pD,[jI6&lPI$&lqrALQLZ+IPT)r%C(Erl'6a2X(pV&r
+mH4(4L2JiF3D6JK%Kj,XDF@1eZ4CcIj!!%fBA"lQPZ4(3k%3DAPaIk4kdiRb*b(e
+q1K&-HY'2(%RBMa`*SJ6p8l%r4"(4M)$Q5rR*qP(S4a)i)BXcd3*i%Hk"2H$(M!6
+LakFl8IaR3#+)pHG%pJ%FDGY$(KM`CfjrVB8YK5h(XJ6C!RTJ6M6aSj3NrD"2,)"
+qi%Hiaii`HU,FdijSFef55L0BBFi%H`"2C!R2DmkJBpS%HS#29C!!bi3bj(YJcq!
+)f!*d`)+)k8lUD-B+%+N+S&-MQ!49$9*acJ*V6aTki%k8lNr0RFaIql'PLr6Fkl2
+,*EHGLaCZcLa"6Zl@eLlUfBE)@m$JkkPBf[M5GR#ebT!!cUpDd!!!!2*&jf8!"`#
+5CAKME5e[HLeYCA4bD@0c,ABb!!B*Bfeb-6!ZG'CY!3!!!!JZG'CY*f"$6DFYqHL
+R,IRX!3!*[f@h!!3!!!!!!!!(*!!!!!!!!!2d#Q0YFf`a-#jdCQd"!!!$r#jdCQd
+RB%00Tbhk"+FYqJJ"!2H4Tc`!"!!!!!!!!!Im!!!!!!!!"6)+BfedD6%`,R4QE3%
+!!!NZ,R4QE5GJ3dfR,ISJTbhk*!%!BVN3R!!%!!!!!!!!"r3!!!!!!!!&K`KNEf4
+[,R4QE3%!!!ke,R4QE5GJ3dfQ#"5UTJJ8UJ%!A1H0B!!!!!!!!!!!!*!!!!!!!!!
+!!%!@CAKME5e[HLeYCA4bD@0c,ABb,Q4[B`%!!!le9%9B9&&&4$'RMef8TiqPG3%
+!FQr#-3!'!!!"pJ!!"6X!!!'J!!!#qJPdEA)a-#jdCQd"!!!6MbjdCQdRB%00Tbh
+jk+FYqH`"!!QrCEF!"!!!!!!!!!FN!!!!!!!!!r5pS3!!:
diff --git a/macros/generic/caesarcm/caesarcmfonts.dir/excm-oztex-pk-cpt.hqx b/macros/generic/caesarcm/caesarcmfonts.dir/excm-oztex-pk-cpt.hqx
new file mode 100644
index 0000000000..cf6b2dd7f2
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmfonts.dir/excm-oztex-pk-cpt.hqx
@@ -0,0 +1,7086 @@
+(This file must be converted with BinHex 4.0)
+:$Q9iBfdYEhTdCAJYBh"d!&""3e4$8%08!!!!"5dJ!!!!!*MF!3(*`!!&*'b!ChG
+hGfCRGhCQCQCSGiKiH(9QChKkQkLBG@L)QSLULBKfGiL)QTQDLBGjL*U,[,bCGiL
+*QkUVQTQALCQTQEbEQ)GiR,Z+UjbEQUQXZjU`c+Q)QT!!X!Z`#J#,UV!!`!$!ZfL
+*QkPjM,bjDUUTQQUUUlPTH*QEHFQX[*GkUCQDUib(%J!#-e8P93CRD!#(F!K`!!#
+3!!NM)N4RCeGQGQD("QL!J(L)J(QBKiL(!&H'J!F!L3!!!!!!!*!!q(pZ9[ppi(H
+m(XX'ReZ,Jpli2JGpi2J41E%LI-h(qAX4,,pRmN5cQH[@[DPe%Xj&eHDYhfp$l-%
+[N61pQBIFk-kKNF'[IBpc`q*HA9j%ZrqY+PSi9'P5mI#Sp2$SB8(R9Vr)ZI*q9HA
+)0pj"$N3F@AhraE[cF59XCFqE0Rj&HphPeYrENAB1rjX+PUFAGCA)SCY2LdmVif0
+TAqpMp2bVZj!!0k[hVhSAXbAaC(3jN!$Kf[3mbMGk[+VklI4mhT+2rDT8F+CKbk-
+ZA4RGcU3p[6m,'XE$IhANr+NhBGj(PHKc,UVhGPPh-5pL9HVCHCGBfCblM5Vc1`5
+8,`)(&lc(`kARqeKd1,PelVjGYk@[Z,F#hHIFSCGD4f-AEqe(LK(eRZBqcS8FM5f
+(CA@EdPM(UIVjGeLjPT*[SRjlM,Kc[)!Ek&[ihLejRCaiPRG4`4H$lH*Si8ZP-S`
+I9V`I-[2krYbj3&[Qpa4lrJ35mQAfJM1PSc)*P,6amI#SBHP"`$#IaH,BaqKFfZ(
+*mM(KLmH#YbmHiLhq$Y,'0@eRD*!!!PSqmiZ2Zm1$fX6Cbq,6aq2M9j["0Q(ek9(
+Ti9#P4m$fGMh0E!b9-CECM"Kd)+G'RehCkkAHr,JVkh+ZI5`&G[jm,#dF1PKBAK8
+X2Ti@&K82!aV%rYB[6mUj5`(j1qk24UqpiZ"D@R,jI4rmejA#1eMm0$G8U1"i1(R
+9jI$-JFEYrVE'G2RdX6HepCfc3VPE'GSi@XdD0pS`Dl4`kq(mf6Qp+E-!ePCAF8-
+V*bXHThY'94eQT",JrPJQ3Afdq6UCApQ6PeX(L&$RB@28lq(2JmrlA4p$R5qG-cU
+I)amc+fhA9llpYYQff&K6pTXD0l$VB0GlA@FH[V2h)hTB&e'%9rflf$6aqp`pM4f
+&#T,iAC@*@C&L@FH,'eB[KfYVZGjirr2rTp+[2iU6P'#9YqRHbYV4QHc1PdCNURB
+NFDi[qrM@i,H[Li1I&PEHY2il"AUhH4j-14+KTpE8bBDH4-X51j*AZ,hNU9bqkYH
+Rj9ZQjMD3!%'M"YYeQED6BRr[+rhQV&m,LFcQFcJqpb[&cmr2hQhVcIR)XTZ$h(6
+[T@fScIDQbmR'UhRclA0d,HeN4,cBE,+h@C0Ub2S)V@Xbb[0RXXMh+G+6TA[lmA0
+k8G)qX5BYVCfAKq9`G[J4VASl(rYAZZl3qYJ0lAhCI"Vc[ShI$iNQ4'L4BDHfSSa
+KNUBeH9hL[L$"HE%R[8LQi%SEIkPeHiZAjfhVcqq@I,X%l9NQedCr#V6mf,Qk%H0
+GkX@LeBP+mQ$ZDmMN@qmhd@i4CS`GEP6FUaHGrEpTr6&YJVq,aZA[SIHX5r!Yp[l
+8@hZiPeJjple-q,Jr@qAHejAJQ%DHe%5c-+(&VbrT,-i&+R!S6*fM+eQRMD@Xm*,
+NlX#[q[L5S[-l'T`Sr0iGTHaH9T62$*Im2eEDdLFVQm(HI$bUmra&&K)C4GMScCF
+lHk8Mq!frpA%mr&q[Np5[+L(*6bp5TZm,!j'(hp@qXNf!T`Mc2lpaa01KbCZ&Tm@
+([i-rAeV'[XcM0)Y,V,lUhUlRbr8h2kI6h0S!c&Uqp@RfPcIpqZrlZ,l4q4djH&S
+cD1&"Mm(3Q@XIq[lGh(!cAq+rQcIJU928[DqKH@a[HqrlY$LiH(TApZF2YAmppRA
+Xc2aE5*PaE5ea[+T$4bY,Z#rc-LGKl@(h-V`m'YVBT0-6[GM`U%%(6Sd)+%&,LDR
+cT0DqM%ba16K8k'kKS8+1T,PmIcGMRf,q16RBAQijHAZEMPHpVE2,p'ARerahr6$
+ELV4fleEUM$$j1ENbSGTJeVZ&"@h!V$5lIkZfX6DC*G[p6!Ni23Ylh"qTXkYLEY#
+,q*HAZ,[l5dZ2jF$MFUa0fT&iZ,l'qqR3j-@6Jj&La0fa&pjTp'eN5V5i[0DKGea
+&lrHfFA@3!06PfdHMbUdcj$1$eh+m+9PC2Hcp2["HA0fl8%alV!l54XHAEJYX6G`
+h%%fpaFRr[CaCZrL@0C58APDXL6Jk2p92Mq(iHhiRf+I$[j0MAiCXa[E2'T!!!l2
+cFA)Lm(QH9p1,QEqCpQV-hGaj2bSeZ##EX*XkE0dmIep6"Uc0db,4YRXY6Y*XfGT
+e*XQYG59bB&cmXC,9VZ8Z5ehC4CLC+@*pp&L@JNQ*Gi%%%&$p&#K"RCpVKHhBRDe
+E@4G4iPAr'6j[kUN@#eKm5VBRkjBF6'rfHeclhGM!R2YFREMB$IXc0(XiZTmll[(
+r*jhTk-@*BSkqmcHP,N*GGe,Q,2NpR*mb#RDmH4m8Vke'Pr&'ZU&lrTbH9B`m#6Y
+rEQbN*Y@rllc0[fGrIhR@fNbbrAb[4Um@ahh%fr@hp(bFANr&B`GJVr*eEb*MIUa
+I[AQChFcSlQMk1jb0$DjrIFDkfGR%d)m!R+fXdmI[(d)qjC!!f0f(iDfYSVJX10r
+H33q0"$eqM8KqCS``q0$$Pf+@%Sk,6m'KRdG-C5lc2T5XE+XU1G0P5HCc0jMdSq$
+hfP(f+U0[UhI[jGDEL*`8YTfV)U3lZCTlV1lLGTj16AQr')[1RDIF6Y,B!GQ6E%R
+V'FkT%QKfAX522jNQYHIY,*phUh2HC2l[YCR"dSraf9qbpr,VaZY80Xp@baUdrCU
+HK8lh!fdl4RD)"1R1dmZ[(q5T+,8HaaUpemT3dD3pM`))+pcekVpYUh&A$Uf0IM1
+Gh1$[1,p2l%EbJ"qCr4[Z,%aFAUD&cr`3pY!am$eD1KFrm@!k*)hAUdV%I,-lr3p
+l5MbdJbdY1VGmcP@)maJ0kPheN65Mc8$EDckYeqEPD9c180YHVGq4p+aAM6eN'be
+ER[V%I@*`dYE6rHlqIPf,Up64+fYZVUi[SD85a'`8DV@cLA'jX4qh9#$63mk['lK
+Q`kmaV%Iq%M2BmHa(mCPeZrSmU[(j,)EHDNZYIe9k-60@A$d1KC[1MR2eh3)rQml
+RIMdIMD-VB`GGTdqklH$+TEERkrSNHbHG+cSI9H%&rk#N%[9PBmV0PqXp$r0ehSN
+rhF'bkeiphrq"(XVkX(eRKlBSrHIrIY@Jp*FC*Mh8$X1XkbI[pCBSk#r(8b*,Nf8
+56%L@@Vj%1ILiG,dGKbj2&l10bmAIDl9'-hTNQXSQ-qNh5*0Df@0[(m6IqL6Dkdb
+aq"2C0S52m9UD#DI2eq(lY$$UbIrC%UP5Tq"Dab[mL*`9*8%2V!Rd*(U%8e*IV)6
+9pG@Gkd82%ap6Bd0M-`k1&3q[Ba2[Vj35iNUhjAaiJcGIDJDlm#li@DA[941IVI`
+NH&,[@he+MUFA!bXr6`k0,$hR2[ra%G@P[iRSIehUXeT@PRUZalQkheLHLPFeflf
+-'ZrfHA2eRj&Q0,1ZMI`IMEV$@eRj50C`P,YYYlP$0bFcLirMm'YIIQ)eQG#9cSE
+2VQacQcrcNFl5$CEj`e`2mhDI4bXV*ie2N3mZ9jdVql+rTaUqXrd2XCh@Tr(6TlU
+KMd+Ib0e3lV'VGCkmVdX'I-&k9'9aT8&2*Tl#P0T5[MBHrh[EF2Ilr8m[hk-lH!4
+PEf9MeYIjMF!i-,mkl@*pJqRq0JLkjVV$BRq`4QeLZaNF6'"Q6L#lTXCRG04NHVZ
+eiMSapNQ2Gpf,aA"RfL-i[BBVT+pYmmmTRqUr13qbQGA-[SH*%dTQNb,AHGCa)RX
+jR9Li1mX@*RZ%@LilJYrm)Y"f(+)YS62G)YU5kp1C5mR$Q5iG#4qK0*VDmXVZG1e
+m[JCP+Y)rqVhSLe5'#$lLFKCAqa*))C8U(SJQd*(riLQT,r&5pZAMD8lhPm-3`DH
+$cF'ibHKblHk(piUcp0Dk$U66PC-[mc@T9@GU%aPCZEkfdQ5[CR5TNbR9RIT)aNj
+15f-@*hkL-5FQ6%Z*94KKX6II2[KYHI%Y1Cc3mMQ29RI!5rB3E,lX-1"8Ak2X6IL
+I[mjUc[eRY4"cZGqGV9qV1rB4M-cXj`BeRqj'+QG+c)IbY$A2Qp3M@cJfADdH"Ne
++P2YCPA@rreeMPK*cFhmM[@H[IG9H`B(AAqU6X0BRkVjcdjqYrm&5$60Qk-%2E`5
+Z4id&5$KF'aFrM6EID4HV&`[dHRTAA`S(@S$[(ihAGK@ePc'iI%ZNrmf40KKKdB+
+RCEV-UC'4JeTedBphQ6$`)2$U*)&()V6EYd-9-6JCP5P5VDkmApk3!&jZ663CrKU
++Ce+06)VAdK`HU)290N$LT5SdY+lS,pV$P&kQebGpJeifbYZ(feaE@85ei0LlrGB
+(1VGll%mle-@['rj))4V+*EH9S4[&Na,5E-!Ckh[r"m(`!!!!!)"RGRKhChGhGf9
+QD'GSL(KiCQGQH)PjQ*KQD*Q*LDQ+L(CSLBL*UTUBKiQC[*[+UTKhHBQDQkZDQ)H
++LTZEUjbBGhL+LRM,S)Q*LX[!Q`!!UTLEV+$!X!ZULC!!!,#J`-#kCjQ+USQ+V+T
+TQDUULXZlUePiQCU,c,bUL(LVQCUXL)F6!!)M96C9GQH'B)#)F!J!!*!!!*!!)#*
+&99KSKfKfKhGQ"iLCKiK`#BQ)F)Q(PfCf#)#CF!!)q$q1$FEIKErGr(Qe1eT6Grp
+$KF$k(#LHM%LHhh9aG4,,q(p-5cNrk@029ZSPRHhGjShIQcrYpce*r$NiAP5U1PS
+bjqeaV'UVA2Jq&HAGj%Zqbb+fpSd+&#M3qP4S8GT8b*q48hQ(5Ke1eZH4h9jGARB
+ZlEcrTdUNA'lDcVh85[fPRAfpT1biE&rYVVBqpHhJ3X2)hQmaplKGVVpAJkZ9KB1
+&3Si2p81TlZik2*ZlS$qdkIVA8I1ZXA0e@AQc22c*Q$Cd[bGDaU0[FC223J`keEp
+e'9J`5F'AifK6hrCD(dph$UYaGFMZSpfAhRBr0YF6B@ASh-5C%cZaCFQkVqYDfeL
+a-h*Np(#"KBA4VC'mb2Qq68b0lK8-M)X4qmdRi06E4L0p'YiHmhY$)X3I'ME(hEL
+i%c1ik14jZmfNqMhGLImHkbHIHhT*k0EHC&EJe-bGbTr+Nr9NIA`GCJl$3hQhScE
+&phYa%XlUj",Ur*UFLIbXAUd*0$"`Cr+K`rNARp[pdL5"VCaIEVm$BblDcVmcd-+
+ADFf[k(S5F'clE'h&e(k0R-aqVY)N0$[PLlCkUmY,fdZE5jiX'E"cSr1Mp+2imIb
+jY+E5q'2Bdfk-*QQRJC&DTMkl9ppXGe`CqmV90pZl'RhCSLeA+M+&GU2PCq(SIpH
+"B`-9$Q3k1C-LYJlle26RHG8XB'mZI`B#9Zl,Jl`6R#"4ie$#cb%8DI#a)CRIaZM
+bEQh%iVc0r&K5E+[m1"&bUrPq44Kk%R`$B9FhRAZrDRl1KJi(JDc3mHPd*IJQ5Gi
+)Xm6`kQVNqjUj@KMj&ALm$SDMq*`-lc9bZhPdCHK9iH$TY#$lIGD'9dX2rK(bHI+
+NJHkr9pi@-F@C`1*b+@[jYVi@9q'ETqfLlL*`)EbC%iN52M4,%l`LPQXIEdGj9iN
+rP6[5Jr*VHkJ`j'(*eNV9kAAj'2d04r'dhp[4Sbk&p8eNr66Y4dHcd2Xid0rraYr
+`B!kJ0'lfR[Ar%MqV5YE,+aVrDa[@f1hdfM%KJaid5cZ)e[SaVqcXm#I@qPhIQ`b
+mJc+M"4aTZAQ@RbXLV9Ue[9j[h)Eha,DrqIEfY[f)haBdh-M6q"$,hbPF@b"AXp[
+Q!'i[e2jSEha9+qjQF2-M91"BJmDdk2*YEB36YHM6lI[UZpdZeKQI-,m+D4Y4bS)
+h&V9Fk*jP@EbGcYDpLqmGDRcq46bC0DRXkGAA5T&A%Varj,6*jeVDAZMHDl@eYR9
+edLRANI0+jDbE+mh@Ycr$Upp9Ue-5'Ar,'bHIF4JK8SiKEA80CXGMfQffhkiEhb%
+33-di*%qI3h8-cjehi2K4l`6'mRJIIRamfY1MF@K1MmAi2r--Rb8JJMFc0fdq#hM
+FAi-U'2[c(0X*2l(rRG6+A,fh!Kdh!*6FAF50h&V1Y+XIEB-EQpV'XiQ9diN-V*M
+C21Z,Dll%EiR)"IlHhi8D21KKMm'effhM@aA2)bl1dMcHR$Hr2YGepQ0DJ6q,+m,
+ZHdp6T`b1&Dl(hBeVGk0e(fYeeXb00rkFUPdS2S*6J3"pqYPjQN&-ZP"j55[!Rq[
+EEEFlR@8U8hT5rjNf"J8rC`YYYYYaIMI5eQ[Xk8m3MjC,ELhL4[jqELHM5Y)YP0c
+IJbV&pr1JZ*!!Q$Jp@6THT1bB1(V1Tjd[Z)Brd6e)'+r0qp)UfRH6qYBJL,h0GPd
+DeAhDRRD[K9p6C'K*`cbrZpc"V*hF5F,U9XA[kZ46i-l-eYH(8fDh3@fAaU@&&aY
+PpAmQbk[Vl+eVq0G8aJTTSYcIr2''QMGm26pAcS0Ae*qrNi8RYZT[+'&AdeTFIfr
+h#r(4ZpGpZGPqc+PqrMeIDQ36*(m*YI5k4G6qY`1f`U2Zi9(3b0[K6BG6DXE4"Sq
+k[%Q3!'GG4iE@*M@N6,Mcl2'rEeV&pE-3KelZ6YG,K8j&1V"pAkfmq[V1&B[ic&f
+RBZpalq&[TpDI2h95K8R6jmMBF29m'aUEG6RZ1(4`CrIcjfI2(A,1S6Y[i@Kp2%K
+e0`[IlHm6NBhM@H-*4lkda[[aZAmD9dIal''956V"ZqaGArGh%bPMCh%Z*@iL@)p
+-LpU"HV3hXVhCA8f%1PU*TL&J&j6R6V+,CfND22VGD'qek@q!B`)qEM6D8-beLc[
+6cH*P3bZf9FY*Q,kA(Rm10(a2TeiG,fkT-'"fNfEXTm@,&ifff-1Pf$!af,UmJQi
+Q*pcQjQCQFA0i&L9h#$!P()mI)aFI(hm[2PjmZ(5l&5qrV9Df4jQblhM%[Kd[FZ)
+SJR6UYA"e0PCfRe"Da33BJl&l'MAq(hRHERJHAIbj(+qarhi!UrK,BIG@8f4C6E5
+cmk2YBflimI0MCr'eHbVb0TEFMZVHe%"bY9+&(mr8rYS3bGQ`+k0['aSN5VD6Sdl
+MeiEU1EPBSl)GpbYj$BM`(Z5dPhC4URZ9IFTdjiR"TSd5+G9YhHaKF6*i'EYTdI0
+h1f&mX[6X@d#mD(AfF'M2Y*['Y1$h0H'AU%L%h8HjhqC-fQC'aZ0'p6*&$EpQ9ea
+C@@"2l[[1mhI"hhPiQ9$3e0jNmq4($,&dE,(LipRMfH2DFkdjelm-Eeir2MqV1c*
+h&k[@K`X#2XIHP3'dM4j'alfrSANZfdm@6CI[bZEAciH"c0MhXc"[jZMdiCZU5!B
+rB[)P,k-ca,A'r[Njfb`HEXYVcYEDl[eCRKfN5'pR#A@N1`rAe*q&%LILK[0N4++
+*aGT%jAbIR4,'S`8dVMaHiFQqk-Q4qUK*PHYRbEi!FQC$2SNHZS1[HdU'Cjh1cFh
+0j2Rfmhl&ThY[1J&m0DK+bkm0cUd9,AXAINIe4,%V@*V9d[B[F@VZT8V2PIkbqTM
+dV%[XL,ffPLAY2*iGpq[!SkAUBSV[M3`BE(K1E"HmfFcCrKMal%(CT*Zll&cjXll
+8ljA[kISbiERY''D*C"Qk&[fT$V1cdE,%X60F8+i#hpDGm-cUHF!1CRN&dd0em4$
+89ql5*DeiEhZNQJ0JXQ*%YFLKPG#jq+M9T1aE9m,diG6L0Da1,0Rj1jp$MmRqZhj
+2pHRj(0L6FIiE%Mj*3,80@[pfRhf,hf,9lqPBNI,B&E)#Z,lY8#Z[T3h'-N3@[AZ
+rQqMdVL3BKLfR@Zq2bBEL5JE&rKGiF6TA%SKZNXqYGIia1PFk9!d%re0pAk&[,66
+ACGHji%0aIAA6f%I54IhhIQHCBZCK``Y0*f0'IeI%KYjU56Xp'ff80aiD)-AVAFr
+dZKEleLFAA[-5'irj+-r'hd0ajV,TGr1bZKFF0N0[0#4Be3rJSq&T1M)arBpA1X[
+Y1rK[QDR18LjITqRqR2`qVpH4UqT8qCMeXAHBZ43f(-eAUU3CIT`HI6r3m)X$eN)
+T'M"`B-Z4d(C$k1TjUSHrRDh`hN"i(hP)1&Pdq+m3BD(hhrlD,&$m#A-b4`AR90V
+2b*h"N!!K,9BHKPb-QTMeDfqjAhCQjdeHMcNrYNQ*)amle26r,pLKVUf,@T`9+IM
+C&2)TcZV4(i&S6r5jP$ee+1AbqAl$i6`dHHT2%bT9R0L4)ZMG8KiHIHQCI`c-[Mc
+*fC5`EV4VmbKq&5J6'rm0iMB-["NDUTLe-HT@`jYL9q*14i*kHA`FRll2*1[+rp+
+,j12MrSmRYU2ZdG$EcDm[mDLq,M`9DIjR!c*r)ScY*fYr1Z,-f`pjMDkT`EkY8i0
+6*VC&6)VEcZGh$fRX*ZGN4))PLbaSKpU(pb%VkRf8lB*2BNBSSEd0[3`F+4SF,Sm
+Ai*p%"IGmbrpT5$cqAbrc1ar!r+SrNmZ$,Tqdl)G6qCRPA"N3C-MmVaJr1U$[CfY
+rFqXKiC[3Il"+aIrT6LNC"@9Pl2X@AMG[dCq6Xkf6ZX+A3QELaTrrDMrRjfGClGd
+1hrq+MZ6R3FZRCi6NIp(6Ij+2L(GJk1p9rQk@-(H$4C9qI2(dY"rK8qlKq0BQIUA
+pjiA$l,aF(YF%I49$aGCSH9ZiHcrdJr"0PbMcrbrBQB0,M5Bf25YBZ9`0RE9qQ-b
+Z"-Lf@9XUI'p@CmI1mZaU[3DJHE5IH2%Z&McqdEZ2'ZV5)hLplDM)mi)Md-jkM0T
+F323cTHLZpUlPZ6(h&-G4U"pU0M2ZU-hX'!j'IHI[P4*r@Q9piijYCeTS4)C25C&
+V[%iPT%pc(l%DEki,2p9&V5G%D&[rLLdIl')d,Ir9&[RFa`@G+mrfCh3$EAkp$rY
+AX3IrL)k3!!M9TdrClkVY*05'$pLLNrdSP,LM*,JFk$pULQK)pUKlNRUDqE$,kDG
+iGlf,bdkNhdBRIIfF5eZYCLhm5'qkLCG'Hpb2b6lHEaDdk2bFhGHA$TG"$-3Y0Qi
+f*E39H*DbYCb)N!$THUSaCaTX4XBrFSa'eQDf-5[pei8kI`SNA0p&Mh&Kd[[UAl$
+b)MdMr#r2eT,rH[q&QajND)[0+'Ar"4JHqN4XBrrU-4T8pSBVbqXSaVTfYp@TfY@
+V"9R90I*VkMVTcAN4,[,bm[r+TY+G2Hb,k#qd"[&m3IIIB6jj!p8qY6bj1mTpp1a
+DG@T9U8kXR`jh#aSCQLqHh2-drh&@Ye1e[I[HHPeqK2)50eidMb1EYiE[i#(k50f
+)dkkem%ba-ZEI`I#ZMRCi%QV8mQG9q12ra[j8ZKfeLCG,dpm#V6ckIK8kM(6kJ25
+1lFMIHE1U4QTL@09H*d%)c+%HCp1VmX5'"`#!(8UPA[leXL*l9q4*p`$R8('h"S3
+hNp+lMeLmEmA(PBSp2pET2"rLYY*CD0TZl&hmT-QEAVAF&6h+FIS@rp#Br@@MT16
+cVIc)m5,+NJ-r2r[lr[qq!!#!CRGSH&ChChGfCQCRD(PhPfCQGhL)LTQDGfL)LSQ
+DLTQ(D(Q)LCQ+Q)GjQTZDQkZ*GiL*QDZkQBKiHCUXQVZXQ(H*LBZ+LTU*Q)Q+UkQ
+3!,#ULCZTS-`,$,U*LX#`[-!!#QLBQjUDQjUDD*UkV)UVbjTCH*bXHmbkc*H*QDQ
+CQCKi%`!#)dBf9QGiH(GfJ!L!#!#!!)!Q)c99CP9QCJH)!!D*HBK`GQGfChKhJ)N
+!N!!!J!#C#!#A#'H!!!!*pljmRCE(`0jYZbS91U`D'mqRi'6p2`)R)L42*`Ik*85
+,m2f)PK,rE$FC%(8jGRSir4JeANkVCmA!pA[BC1idId-#2SVESfZ4"`1VdrLlR6i
+-0[Z5+@3*jr(SEq$FC--hG)FJQXSd&$Bq4JIAPAhkrcCF0[h649i4+UpchFE1ZV+
+#9%YGaLbFh&lAEi@l`mM&Nj'2$-l`PQMYG##kfRPAfcmLqeYa3iN5'Gp%TZ#fd,A
+"Z,LK3kLT5h@*LGK`q$R52j5LV%*cr5rkUYb*Rmb*QA&YYlcF$2Nl[#hH&NE$E3c
+IT)PLId-1`MHRpc(pLPfr0biEE[BdkYSV%2,GIIih'll,cVR[V@Ej9aDK(qVhA(r
+jBRSiP+M*Mi2$i'$R5Gh"SIXY)!0HTb[-B[BEIH&V-JcNF'Iq$(KQj+1Lek8'Xdq
+RNbC-UTe&#KVrDKPEe)Kf[4J`Y9Qm26rIbF1$`FkhbV,mG1!Rrl2+Z-103$3lqbi
+IjS0%"+TYZ$"fYD'6i'LfhSk24@ZK)Jf2bH&L8E2Fa)C2di2Yp5M+UqCjQ*LBRcH
+ceN0[p4C4l(bXEX,lMd)CRr#cm[l0VCNQqMj9r+a1,IIPe@XL3br"dIHcBmH2dS1
+QRGK&LCH[[p9hX5'EpA4qKqJ2I3JSiZ,5T8X#qZid(#bBEIqFY#bMk%%cPF#iirF
+FR1NA$Q@&H9*,JdGV&JUpc*kI9cHI0PkU'MT#iE39[@0E%Z0r3a0D!5$-Z+-&(Ci
+%D*PmL!,+kY-VpeYD"%@A-hA#rXcX1#R)cITCF-hTP'*rSHE2jM"MFJBZf5Cd,1,
+&YTf"f2Bifklh*bmZ[4Y)pI8b,B+cFe-A#NbFh$b1iaF881fq&NBFQ6KC'Takp#3
+DZbd0eNBHEKreBZ(Ki[CdF2&`j23Qdmr-NmAakp1eMpj`C%JNFR&UiZ,lNfCiQIL
+iZ(h-fE0NhZ&MGGT*0eG9ZUYVETZa&DX5elA9!q`rFR6jdrQl@G-Q6TFc2b-2$#c
+k%kC5cmMIbF,M8q4@`EHff[)P5LBl#6Li9'S,C[FR6*IVE@G0QCT1!RU14MB@4jH
+,aT1(jGpb+peKfRXrp,H3!#b[aVV6l16TFqP[*Grp1CICq0IB&HmUfQ`[,DeYZPD
+pAZ+QiUeFAZEkrqT6e@EIhfC[ie6M`hQ`-IT!Y3XI(r*2e0KJi&KMf85YY)f[f-&
+',$AZX54-qTEfa3'99h',YkZip[![Vqr[jYpIIDK[H[XrfC0U8lHqrJm[Ick(jE,
+ApE&j1NSFZbZ-(`j'qV9qRf0R[HBK&eQ09aK'M'SdFDMiQrPC9(L8[-qhN`hQbNB
+r+$pGf"c2MNDrdC&(-cUpeXc"fi#"eNlhEr!cEr5reAq"clr![lr)h0H6f&PmMV)
+)j(IG`2C`1IJAqjVc1aJl[FfFF*&"60[U0p*[pCA[HbNI0lLhYb9hf09bUQ98hp,
+M5[`r2UDE0Tk@r[XMY+mhD@FHG)X`4I+ph5qcTFfqPdk91MaBG4mfflIr[+PQ%X@
+'(*ZjfLm2,j2*R6V$d+hErFNrJX09@f8q$Q@%rPp$`SN0pfDZqp[G('dFDdi8IK4
+q&(p+$dVL[FHeFC0aNd-Ihk&HmfXM%ek3!0YeZ+PA&UELMPCXV`2HT6UGr-TkAVk
+mrE'6-J)I@lLTMBHE9UeDREEHTaZ$Mek@+Kh+E(IAB(98G,YFUMZ+NUMX+AJHGje
+(`q0VkpjM@Rp[TTAYVFS9lHjIAp2!lbPJFqRIhe'6Z-1'IfKYJMLHHMi(Sdl',@m
+(Tl',irTE6ZSDphfUc4e!f,dDQ&+T#`E#hG,lY6MH$VqG2qFB3fYYmGVZ1jTC(@e
+FMVD@49aFM$i'6cZQlC4[FeF#Cd"5UG6RdTp(5Hhq(j'Nje2q+hq,[TNS$f4ME@P
+X-2Ddj01Ed+0+M[+-ZMFqhX2'[p21RelhYbK$92emhF90rKFDMq2AG6mZ6U-qPaG
+6[FEVm#KcVVjlK663Sm#RFi@Nl$V1IU02hF0hh"f1@JJaHmqlf%rcm'bLjH2)m1i
+mr@qMKD%5[1L'Z-bAk['%PrF[TZETqITp0hGDkLRm#TH(TrEc*B[!0hq&ZC1r[14
+$H@#e@f0EdCp1a`GCfRHDc[r6lfberS`ENA4cl'dPpTE&DjRhY0lHqNi'I5lQAIC
+p@qR9Y*'1#C6(AH4FbX#m`m,IGY,[0VFb[J`Dml4,1[jJYCpPUeETl)e"@S0HXe)
+ZeUi[DBHlTHGjf,Lj&82EV-'[Fk-Y'dY[LYCHTQcX+6KE$L91*8hre0Y$G3%lXa&
+fpjHAMr@llm@Zr2UIerhrNVBq$ed5'lMX0rMYEH((NGrV0hqEbIaDl[['Kpm4Pq-
+$pQQ"!K2Sr$NF[lQXXUh1kDbaq"5qcLpRpAeBN!$-`8hef[4N5,lKc00Y[2m5c[[
+4L3h'%4I451MD4q"4Ji&'6$$0U0X1C&Y*dQRdq&B5,LM9cIkiCQT9"AH*kI'SF5`
+M)JY*UN,j25N4BYKB@%D0"CbUAJIC'5-%-c9UCb["pL`YjGPDh@ki)fPkaLLk)83
+h@q$LHK`1"`KqIERj4')i'0EbZ,Aep#KF334V#`LKrDeTHIBRE+h`2%Xifb#*kYA
+AC4j0'M4Tp1'"`XQ[GhdMXp@)ek&V[mbMNB@05pfIfqNcER9bC91A5e-0jJ,0+fN
+bD0+`erAq,IkAMjRT4X[C`BGM$$,kj-CK+UIamEK9I&S4)R-'mEV8MAEG'22V4*2
+BlVFkI*K[Vbf[Ie5EJ+Qak8AFaFL`mq`mq0k8EdVIhir(NmH6`U2#TcrHpU(!kHh
+mrKbj*X$kA"e[ShH")TfAD@0(`rDjI1VHRMj%rHb0Er6VDh5V3d,e'eFG'fLA(@b
+-MJi2+Pj'XTlVAE(dZkNEEJi1hM4+dQLGk'L#ckfPlFZRQhQeTeVMA-&1P(klUIZ
+dHYTI*TelbQQE!mD0p,ZFfAFbjRUhdZCc!&%0R`dVp,Xj2afpa+hqdp$rVXr%Z1,
+(SIIMBN(PbT0+99a*QCP`fQP6(bbq1elhcBPHETMNj"0d,IHihFcTfIZk1lh[M6j
+YHjdl"MT@rFcmrLBZENEbGRj!mhmQ'6U%UJMr(E`3GPUTre[Yh&#[*q3PSpVdE6H
+rG`qbcFAlY((KY1SBU1P&kJ+L2e4$V#`d)XZ[T2NP"@J6RPr"T-rl`!f!fNcq4@Y
+HX*4'('cj28jP+K@Z2PT%BFbqZkRf+Q(edZCbE6jL53dA4dI6FlcSEcAYH"ARh&,
+HkEl@LfhcY&irr1kl2d)P$PqeAQIaTe-#Yl6RiHl`ce-hPcUkmcq4J[%YqdpR))U
+"HEUiE6(@,ZRkR,cSmSZQ`MI$DrDKXjC$,'0m&VU0IR4jK$BeKm-MlHGCc8$!5q6
+rGcSmj+64ILY-H'cZEADHrF4V(hVAkX--LHRkmd@KdX(r(1L3!-HJIE10BD'Med0
+RYdX%XILYC2+VaqjC'MiVDAR@Ir&%eBK0H2$(m*XXlAZ-kchb'9Km0YkqA@kHXR#
+ZAS5YlkY(pQIjR(c*@qPB'I8rLaDZeQdUZ2@kIPU3!2PqAq'mr#qH+(*[I28Ki[Q
+EqMqPj3I*[HBK&+d*1C*c*2kRNLj&lk#S6+PC8ReRY#IiU4H(Q8I$HN*$IHLrlqD
+p2mLEMTI4YGc4UkQTMG$!PD@9d2[D8A"hmfCFl2j'SRl1kVi(T*S4,k8VHq[4Lrc
+2'G9(''ibEI8q2@`2bU8qAjhilcqGpP2*d[TU8mAPFDMqMc4bcQAmfP+QdTrEdG+
+!LrQp$$aU[9krNDAr*5V+PEq6cAi99T[U*TF#SADFhHBflUlZTZ1f`DdhmbM'C[G
+pH6Pj&9ThUU-Eh+aU21EQ2*RIR)cCJCaT@0*r9hI3m+Vi96+l[AelZZlp,DQi`+V
+A5q[U1DRTP+k8RLbHA*X20eIZkZG*e0cRdX,Hdk1pU8FLV*hZ*[TZXRArcTYDMkb
+Af5qM+b29SrVf01q[jH"5Z9cYaDY6`0Y@SrS8NiSTGah[NAbDAqDNQB+BrjZN6bD
+Ak@h*@6[466p,SPj&,p5SVF#Qr0G%X0$R2lb"VhIkdc#Pr(+a41lYVrSB%[fF#AQ
+i%brR6*qbVAIl&(m`6NlYm$r*[2p&(pk*YHXmFaZ6HIq9)-B63rDm%&DpreGNrUU
+@4MBBrE@&hmRMq4rG8mclH2ARqZG*V3qpHqdhGCY1qTAe1qlVS(K"U2fbHSlLE,2
+6M-pM"fQiRq,Bf-5YNhHMc)4e#L9XI550K4JfQjdRJlH*bEhlMXbRVRI0KAYq-4X
+ZbEp[j[X+-4VKf'-e4L$#mH)d-61HZ,dcE4,(X2)a2VbZprG@KQqbTIV2Sa("I0r
+p+-@epNZ4MpckrX8lrfF%),ET$jB(dA3SdV["Rh(YCF-[1dHhlk2C'!'('LEM&q'
+#MpHY$,rf8@M8A!Yrm8@Jl[AYaDErp)XVMXBp,i,#0TZ*%cVErG0VJ'2VdIlqarN
+(fPqp21`#-V%NHTLF2e)C2rjF5*2+LBALdEMm!qXrrl"6Sf[VjF6FckY(DBm-lfN
+KGEp'fX2"jA)LE(b0PCc00aCicpcdeJ%GV1C%L0Db5qJcMmX&Z$2h(NL&RYU,-JX
+f&[F8@C!!@B,5[G3@05()L0qp2m(04`KAiPR-l$a3arIGIkL'Gm#0m'!p4S)M@[8
+li9'E!G*()cm5M-D48L14Rie'HQZKre'KQkk+IE-V3YBSpHBM[h,[0"2L@9dV@4B
+44hjlHT*Z1&L$q+BqAVpIi-5'MdNi0[hA@mr`+KMK3f["biN5,(a2-T5B1"jq[KZ
+,MKDf*$DIq$4ZaJq1#rrIaSC([%1M3G'#RUGCY)EDP"m[6@HM'82GqT`ll&LFk2e
+1LrlGrSidA3MDq'fqJSl5q[+kMpHAcSrp#5)Lk'Lbr5Mr@Z2iiNbiLp(4ISphq(m
+!!!!!J'KfL@KRGhKhC@ChGhGiGhH'9QCfH*L)L(CQQ)Q*UBZCGQH)LUUkQSQAD*L
+DLXbUQ(GiQCQEc+QSKhL*USV-ZTPiLBUDQmb,QCU+UU#,S!#VUDUlUV#`#UajQE`
+,S!`-['L)R*L,QjbkHBQXZRQXQDYUGjU*LXUU[*L+bUZEZUPh'!!#-f3PChB'H&D
+3!!!*#!Q3!)!!!!!!!*!!#53L4@9PKfCfD(@)GiGiN!!!Q)#)J*!!N!"h"h#)Q@L
+(Cj!!"`!!J!!*rcq,"lrHFEKpem,AdGTLDrKq*aZ*iR'LIAL42KpTrIq5*BF(m85
+`mAYmrA8l5*B5ED$8NCIikApNZ(kdZTmcKh-klQciHlb0#rU@Hri%&U"ll@&0dTm
+c#QcGer02QD@(#!bKk'I1aV2bZe8Jhp#T6N`m@Ac*2Q`HKk'Mcr1Jmk6jX[k&(N9
+DRLBZKHlUdh(89QqhK6TmhVmRYXVQGI$Q6jZ&-rRkXhGf@PjNM@JGe1Yb1AUmLP%
+jZkjmE%lINFZdKbC86QakfmMDRZD'"[,,,p1fY!6qK1QB8V#KRbCNV"KSH"mQ'Km
+QMmrZUf`prDH9fXU3!,"Z96Ne1,6jP(cD(R3qGYGR*qCpLKpLMc+I-UFR+hhbTH[
+d*A`$,IKI*bTmhqVU6iH&NG+dq$f(4[l'2"%NH9kY(FCm(lmIFIPY)m'R)Z[ce0V
+$$+YqbkZ(m+dbr68jrGr$NF5Yb16%LaidLdaEc0ffEPj[3eAMaE#0'Y)ehDrZlE3
+Z1iXSPJXCI,k[Bk-q6K3i8UG,ml3fA`lAqRlPc+!amAJc2SlfA*bj2FbCdQE*T5T
+[@Sd+1pPe)+P1V9T9+XkMYqVKldaClREF6F9jH48VFVR4qI"bTINdr-mHA&U4Z9V
+)mEF@RZamrAGbBHhr*UeFcYpK,kQafXRQ8FbV9qGh@KGpdCdrccU8q9SciCmV#QI
+1kQ`m(2RikR0b$Rak6$QAX)CP+C,Nbje(i(#`HC3jN!$r0cpIS5kYRdF#"'2QcG[
+KA1MK6X+jRBA(Qcp+GK6TNR#PH*3Vi'qMkAQDfb"*ZHEl@ZX+fG'eAZp[%VhdA0V
+lLcmMkd6T5Hl2Cake6'dUZ2qE+jZ*S@qr-U1qUckAjm1i`VUEHEr3ehH14I$QGIN
+Gl$Nq,$6qY$,rXQHVa0$XIL5-[dlZk&ZHCPC@hfdl4R36VRXS*Xr4Q5TPj$+K[G'
+AF5pGYYcScm,3RF"UQfqff&1ZjQ(-[CHZlMCrUmk(cCR)UCPA*bU[#REc3`2LS83
+"9ih#`jhCh@&H6VbEVTQZSAmZ4)kQclqY$rXXHMJ,4VA5UX19YEQCFE$VmcQIBak
+16-bBFZ6Q5I$epHjbBm5`Y,+ce,,FhQEL@Q$IHT5e[3ar@jZKHj5@2fBArJqeX*H
+fT@mk9l8k'E-T@mQPAPF,@Ah&Xii0X#CN$4"f'6$ICplhcJbe*(Gr@UEk66T8DQd
+U9D&@R5he[APGq6+qKaZKU9UeC$16i'Vd[-eLAQBe56T3lcHmRHDr2[r"@%i05bQ
+@m&#PSdDG$Gir-qIlrD8DX0(GLd2`ND,3'[lrYGM,hG+ElFf(+aDdMq$9jI5eND6
+%JPie2mHkkX14@Jrh)[aVU`JTJ6h[Se*0(3erqq2PqQC-3eCNfCF3h-ZklbAYSC`
+$D&A&k9TmK8S%Hkr6*`Y#im2@lrJA&[Ca,+TME['aT[YcTd199lV3Jq5X%!BTQ"D
+pa`dMba58p$c1"ZF#feRMdk(ciQKHm4E(*!,"-ZE-C-ZAYY+IhqIHjFI,k@YY*'T
+CGP,U8U0AD9-UM9TihGbIZdI)d,A-MEVH@-F-h&SE6-Qj9H$LaZjqeBaJaq0IF6V
+9p,bqecFq9aSfir,BkbfL@[Eh%fP`[DRD8-UKS3H)BKUEVfjXfCYUH,S@rbNPqP-
+-HR0QD-bidCGeScHVJI,5qb3#[r6lp$dD(ShR5[IJA[KA[K@[%Y-5da,6%VhR(3i
+4-qCTFfmLCpV%b0C%cS2([[p2FcpGmaCTL6YaE`e0k1qU'$bSIjEJ6DZZckXVrJD
+GDR4mMPmZlS8-R5e0#iL'ZlMA6YBF[md)e`6G8*ffm!'14dreCm'jNl'9lkhf%hF
+A-r#fr@j2"[CPp$dlr&cjYJe84QS[Vre5mHEembTF5IK090clb,Chh&@T[$efMfR
+!dC-r5Yjh@bU191`ZPFDZbrTqiSjq2pYreX[ZITA9rTbrqpIT@hB(%$TrTNTXbd)
+Bae%p2$Kf%V$Kh%V$`DR6qrIAFUmNhN)"*IUjphV$#8cIEEE39*G6(Jaq&q2l(p'
+*Rbij30apD(l@9$$4SdF#'S,MU0''(`2Z`mh%cm'a*rm$rTKGP-S6CNcfTN-k'A2
+PblcifMf2Mjq&C&'hR#aU2*PqEJ8IX3HE$bD()UC@2Nd*H6$3Td1YZUHIFiLh#50
+5fT9+1eZ)1V1Ph%QC0TCpY33CeNM6YU2C5iHpmqIA[D*+pc,q[h@jZl50'X,#,&e
+9Mf([DHIHdQNM(SG[-RpI+hh-j(Pl[EbEHCMCplf4(FR-iHfkdQR$4KS8CG6BD9A
+[+plYQKhYlU2Ul$9FIdUF5YNEQqXBr(VhZh)lDar*p6[SdA,p,RC(ZFIXYG(jHic
+lVXfG[NL$q5lJbi-Rbl[VFRbl[fTeHph"0lk#lp6`+AQHlZ*p$1iqj`,(PK8l4b1
+b0$CB&Y'mIKH9@b-+P"Gm5[Jc9(EI8NapAV2iYIbpj2NI!lDfj'4cIIc)2*RHAUS
+PI$`M2f0%Na1qLG,9HC&aGCJmZd[T((Pjh*S@RIAIKBQ4jfPZH2RA2EkcbZeXii+
+jY#RJcC`m@G+rfZhYmkilCJcCd1(qpY+($ZERVlUR1eqKD5&UD02+GbHID`,h*b,
+#bQrSh8ZCVkq"H4iN85bL5,D0`V6SBRUF2LHM3jFa!UPX[6r82`MHV6K2#,,qVNB
+PESB2[HTDBJ#2R@8cSa+prVPMa+jEMGIb4X#dh1$lZ*LC'4@iA2hANm5[A[,jCI@
+fTDDU*mrPpphQel2k2VpAm(FF,RLA'e[lA,p1iNL4YYUCZGNE+2CaGA@TiRQGaVj
+PhEDGK3cHA0aV'4@h@*!!fNIS4[fkQEAff")h(8ZlJ'@Xe2Fr*cZADk[&iQhLj[e
+lkI%bEZ,GeX(dSRTBND9@iRe)ZEpkqMeUq0mq-#U[XX&BQPDN%52EHCNFlNHPBHT
+Bjd&I'jhcq6E@Q")h1,mMNI9LheTGiRFjZE%V@dY,0BSp9B,rD8lh*JV@fjB*@F&
+cpfRIbi+er-A982-lbU&2lXZRm2ZFP!I`pl0YlhfVHlVdTbN!T[Z,#MB3G'lq2D5
+idMair)j@,ZX@jaGA-cCQ[Pai19)jmI*MiRNape'h@UV9l1HV4(dj("jRGjpjKTX
+BMAQT*akG1T6lQEEp@GFGI(Uiq6Nk&jX#1A0cF),Glb8)CY[Eh&Hil&QiFD-k2cI
+Pqjq6h[`rfmU`L9VABXd8f[LjIcGTmZkkYRXQ0pKl2-qPS@@d81LkGKN`CplY94!
+`HAJ6lV4ZY&!43EVCYE@qq8UXp1bJZHRN`9lAY9%*'RCF(0L",mQcrH9UeQTBr8k
+Ie+q(LQq(@9X6)cCGpZYem(b2Y@RUAR0TBRJC(Tj2d[IlVLq6%Y0CV2Fk9RrY4+e
+GjTbHppIXZPCr(F"d56[IAfeHcb$BlX2JrpZVC58L',UrHNH[jPHbP1!hpXMKi[9
+XVG!hX)[[@hr2bHVDA#efeHR)mIX)+fKBh+KqUdpEa+pRG*XVl$9rkb10P9kpTGT
+ZTMGKlfTLC'Q,5YHZRQ,%XGEqL*AXqp96$E-rVN9l,JV#mA8JiH4eE2jU$FB$Ihp
+apL[Cq+V"&dj'9rVL9l2aQ"d(KqcR9TGCGVGeUA2"fFReC'$IfVkq$Xr"ja*2,f@
+cNE5rdZedC1`dEHIp6VC@2bDQC1hQI$ce)VR8Z-[e[2NqE3eAUYraA2Pp!NY@Kp2
+k&'`jc`NKp%YG@6p'9c*-AcRK,Vrr**H&riPDl%fEF)epVk6rpSqIf24@ULF5RhN
+Rjr6kIcZCa-rBp*H53J,ZGPXT%23`TNq92K`j-f9*Qh-c#q9-`Z[6S3mMVMP4,jf
+IXIl5AH0f1aIKGAfATUA#bH`LEL,N34)RMHl@p+`a,c0lL(*LhH$@p+0"LIaC[FD
+[)Q4I'ph2fRpaADNRLbXb6BHa4bU1A4c)H4#&@RP8I"bU2$$9Ki-1A4bVk4@Jp4F
+VEU*Fi-qIImIp-UCQeS2r4&1jRB6"59rHSTFa,LK`UNQK3rSF#hhb954c(KNqbRc
+PSB'HqCd3r9Uk-,@GQGLHUkTjq(H9G[5l1hkdR*T`irFbKUKQ@r@UbqjZCG[GGPG
+c1cKq**cYIdeaK5jVC3mqrr+hNcRi2V%M5jRCF#G1Rc1[c-$+mrVE#C2R6X2Ijm2
+i'C3'jRrUfMjf[rpNP@(IBIT)r`,8bjMkED4Af@Jrfe,1[IAD`l582e0h$aHfmrN
+9FR-Tr6(kRr%piD6h[jDcllril`Zm"dGhhX1m"0ipMqG0pPFT43,qAC3p#rp[H8H
+6[X[-bHCMmbRjp$d)1G,[YTPFl[p$AIM1ml`Z[pZV8U9HfSj80@M5hRbBI)b-rEr
+i`G(AhYdRPT,lkA$5UdTGA(Ui1&Ei8'af'a`r"lr`I#ppZ2IEMBp[Q81,PdmZ98a
+UN!"0bCZ*RiA0,pP5I3PHI*LreZi!kF'UYFVr$ZUq"A2V[L@QUcGI%L4HGcBX6RG
+Ee1KLHaYVrY-f[JIN*$'e@E@H%0pSU3Mf#Mkb,NH6%YSf4D4GCdD9Td1*q$MG5[I
+D4(k&YbXL)q$q"l4Ap[Ip!$lF!IP*$I4q6Vq)mJ$U2jk6AIYVlLMqaZFmE50&lE%
+VAR98D#dQ-AfDG#AZZidFbR,SBf[VARjL1*M8k(+phrpBT@dMFI)h84kk,9lcmj0
+rNIjI)%MASFk8Mp"jZGHVMp0FjT(k5*p[-QhmhHmR#cj2q5LFL*E5mD'6"3i`&Dd
+VrmJVV)09)NbC8U6*r&ZqV-b+pplLrQF0['q0-X+f*(ih4TerF'pM@k[dVk*@ZZX
+[d)%UM3lr*SriYCeeVhVNjfZ(Khr3U8CH2J9+X'2$4aX5YHrU)l`F+Hl(Dplrr2#
+k2DkhPBX6mR,j214c[E(PlL[HrV)l3`B-f)k(FkqrB9H%ImLM*r"f8b'iJpTR[$A
+[2GI[pfCearSHZhEl(BhmfE[FbT8TGf1((qT'1(X1aFM&DlrDCFirfH6*bk(V0Ii
+61Zrh%cSbH&+bT2X0$GE"pjHKGb%l$f&rqY[SISB'Q[8UkEqf%kQrX'"QSr[&(1K
+qm@5M*hdUV*pI(U6CZM-ZG'AGk1`k`qmCI&iPHfr#[SEBkGPDF+ljeKUir9NIjU*
+@@RCFL,'Y+(,U4-qkXl(Im#eYJelZhU8SG+'TmIHmQT[jf*Rh&SC4l[+Te")ArN"
+QG1clI@NBhP@M[D06X9&kepDT[XP!AhpaPBe1T9"P9rMhA9R6BGp8lUYH@c3rFeF
+B(&@TXe(FQYAN3TET(MkNLTlIYbjFZTbY#afIBEr[)mD`LGJ"ricJIdj%ZT8jA+p
+,fq&S@2r&"1ce850RG+arKN4)YhG!-r&qX!!!J&ChHAKhGhKhCfGRCfGiGhKf9QG
+hL)H)QQGRLBL+LBUBKQH+LDQUQBQSD)QULVZUQ(GSQSQUZkU*KfQ*UjZlUBPiH*U
+D`,bEQDQ*ZTUE[-#jUBbJQX#`#kPjQk$+V!!,bQPhZiQ,V)USD*QmbSZDZlPULCH
+CR-bmc)KkQjUDZTQ('J!#)dBfGJGRH(GhH!!'Gi#!J!!!!!#3!!!!#5NM099QCSC
+h"R"RGiH(GiF!L*HB!!H*Q)PhN!#)Q@F!GPJ)F)L(N!!!!!#3!2eI-ZHchR(lcj2
+b-+Gemh#lc[Z2aZqim(fi)2dGMD@d&G`[9JVZ4ZDZ"2!C'Z,R8LqAXHRf29KmZke
+h9SI[jG,KANc&Ki'99`U&Vh("Z53Be+Ph-kR3T8FRpUM6hX1G1TcXkG`mEG9F2*Y
+I&l'jLh2@LppMdGpFll1RmZGjR`XD0XY1*FBeeI4pIGbEbCVrPeC@lYYYl-D+8A6
+T8UI#ehAc0IJbpI,emIA60G(eehL620UiIaE6erX45VpP3iG#RlQZMc,U2-NbmA[
+jNR6RirEiXI&QBN[4UkhH@QCq1iY`8E'K[k&,h-@2,ZSmZ6$Lr3kFZ6TrLf(leA&
+l1fmAXEThDf&&aI,jQ2c*h,Rje,Ir8P6DXRiaL('#-aFA*iI&SdrhH43TpjLiG1R
+9ZHdkldX#cXb0j2&Sm@MhQ(6Ub2Mf@fdVDd#Cf[$j&(N8*mkG$[SD@99f(b,E-r(
+'Z5@pKNdU@C6bmkIc-Id*@KGFbjMImTh,SHAKkl%a-A%aFM[FZV*l@dJVVM9JYeh
+HrHSqGMDHCqR%ZX5AK`qK@f[E@rp(p-L3!!El+$kZfVkQIEee6JfX6+f0RQjq*AC
+FQjm+T[*F56iPKh8f,9UC2+VVH6E6FVhr5kPAAleB&BIbXQRaC8E,m'0KhPe-N4j
+GjeD-V`C%Um[0T*aGGGm5lUc1h,ZZ$'$1SCG1IbiHA'jNEcihh1RprQ5ZC$R6kHr
+SI@bUXRj+d)YDJ+2"j&$SBhIeH[hb)+3lS,c`JTFkIFimEIj(KirPblf'qrEb+Z&
+4YI5`8V-f&1MaC`49+KhHG3j%kM4Sim0,AC-@V$[l,erXDZf"(`*8qK3hfja,VBE
+IJr4fqhK[)Eb0L3l1A'i&5pi"VaZ,Ri)Z"Nc*8c$ZHRGiGjTrPSp$BICk9lh"L(&
+!jhY,Dc0,A4rBeehLb-56-eRaZP$mT4cjp%9jhHeNDHAi1(*QAdZqdjAiT@"Ta)R
+fqPX[PaFcmFQ3!!PiG+MLGK-a0T(dpp'hh#Q4TPj,M#Yf93PH0+Zj9ldpTYp1RQe
+-6JP+QREDBP(Idppc"6TSA0Ap2Tl+2d)f-,2GGHBQ,-i&,RBAc(*IEA$,8#l[CfX
+KeRE@mlSi'Yf2GeCRl9Rk@$F'-2b-LP3TEkPPlr,Sk'Kd0MKb-5l0RH,(a-M4V5F
+ZbJVVDeYG5deYI0hN&6hZpNm29k2Dqhl-&A@8M)!p6XIN8-kkbBH[S8Be#kSA8k9
+,h9DliHU[qpYE1ekeTVC25q0E@0I%cG#9F39F$ZLE@S0Z2l'GZidl)KSBp(Vje''
+K2b0r(LeVVjj1,)('$NCFr8U9+QK3h&@4a,$erXDUdZB)[G"5Br6SF5Pb+2JiRG9
+X,ZdF&cU@Q$l2GH*Mq(0l@mVS0eFHMlqAclhP6HE0qV"9[IS-TSJLl2qHKc,VK`j
+-lHd+'jQ3!0,GCpep'`c1GUY9'JZ4DhkQlfHP-dpT&qhHIZ)VVb[ZDI+TqTfHedX
+Af"3R$Kr&Ub[hE,-r(Up@8CpkKk'(3R8FHR+cVRl1G'cSD8kPNGK-`UXAk5*3NRX
+d0l4lHAPeF$kHVlMJhFHeJY*NICm#GFcXR*SEfK4SlR$`iD9(j0@4a8FC),VJ0R"
+@Zqm-(c)E"[I+qKZ-'ieAKk-ZhJUhr'*MUiX5dfGeh82Fd+0#KNd-QG4ZZ4$c2*i
+eE"c,,-jfVYB[@Y,ILE,PBAdYAbFrD@2Sq*a[GJU5Dq#Tb+XDRBl[H@GS&MLj-14
++hY!b-ZZpXHhmfcXK6CJC&,+lrF@qmjr2r$@MmHaffPCf0aeVH,Nhr[mf6Pq(mcq
+l&Jk9hhb8r"Y#MRXYm-6NZkfH2ZZP*qSBa@S'+0#C,Q4p2(hpc6ZI"ffRPHhJI[*
+M-!hqcm[$NrPPImFRY,(qE9lDriffUCHEN`9Vh[bGf`B(eHViPrQeEH$+YiQIG@-
+Rp0DVVIhb1@iKMf%bM3T6r"PbFHqPAhkIaE(UmR(cSI)qh@NI`'VQd"pZHGa-H6[
++q*rZd-H6d1T9[)$PrDk!1R3c2FaY,'drZmDT-L#KH1FD(RE+2S4[4KmqGjp$ak2
+*TFRKjHG4cYpj'jeN-6G9YGA,Gr%kPY0`TZEN3I5Jk8(S@[3pVbqKKIc`6)1IAf9
+YIcEM0Ui0IDhrHa6RVm@(c[Kp@0bCIJh@*eD(#ZjNLCK`dFUVV,#drSrTLR8cm6C
+ER@4F@m[2*qeH4FAUqI$jQjp5THGFZGACE2&fQPLiJ!p1Rm[&`UQ(BXemJiVpGNE
+DCViqfZpGGl,i@beZ"FmRIFRIH22jH2brL9p@qe6(Cm%@C[m6Dcj9$J6q(kfah'P
+XG2rRmQV+XLKEF3*i2+r&X1*$$$Td0RlNb9,PbiBF2q$'dr+h9AA@DS(Jq4SF1KN
+4U%2EbiCNZ9Kh81'#D'9LbZdqDL2a,4QCcV4IRje(ICdlPp10c1VViGG-NhH*L5)
+r9PEk9-q,-hFfYIc6B0D4HYFA&K`l,1bZPY,@ap(2qPV,$4QrfC9DVGBj(p8"r,f
+F-Eek1P3lH%@#6NYDLkPaUZ9*RrBb,'#T0X)QEP4E#*C6pElA[9Vl)6%i8YCFrL6
+C-Qbh&I"QmEFE1qNJGfDMX5*Qe+fIjADpV[-RFeUQ9P6H4@[Z`8GLq0r[m+ZL3IK
+iNr0U)GG5YIE44h9@1liQdViRrAfId9ZThqifPl*lqVHl9)&#,dVa[(NA-L6*k[*
+cS16iX2)$b[YXTeEfhLF6)[I+p[FEA(cqrh%J(9Drq'j4%T@CL*Hq(,q[P5EE*ar
+#p'T@P6%(ir@M9d'Ee+-cI4qfLpeF41TXE2QE(q+Ciqcj96G9YKL'KXpmpIQf1EB
+CYYQffEUi,IFferE@9r&qPKFh#jZkdFh4X0(a2UqpRhQjeALpMDf3!(9KbYhlQ(K
+iH*)kH"$[kAbFqpl*JeU@Y$KdI6kY,,TCG'P2MEZG-QeEL+E[,%h%j'P1h-199Mh
+*c'@F@[Y1"`p+PaD'2$1KhHkU`hYP"AfacUmHP1kG#K3RE106KScqjR8+%qKN8*B
+b'9X#qCEL1chFC(2l-GhHTl8f6P6DRSq&rECG@Y@`0BPGKb[EMLINq[I@fie[[6C
+Z9Pe0(`[il,p&DYV,p)Uh'TE3EU,lh%aqGrdqRj(d29lZ6iQiLfd&E)`,I-r(Gaa
+L6LDR8e@UJcjYV%L6BYeCedh0PbG9U3Eb,BCH&iFDbbTpMB4DQME5IekQE@fZ$&f
+hXMCS,6G6hj2'ie5TcDq*0[qZcH0j-63NkU68eZM"Pfd6`XqhMC@fZFfYNepIBhm
+Qie+eEBke(GGGDjJVUrfj2'h@A%iPKdT1I+b[VjeaBB-AFEVY)RmeM*XYYPHY%JJ
+UA8Sb,ki+QGkm[eiGcJ8CFl#U4p`NS4,fGNc[m1V[Cfjb*HcPe*8Y,LKYJmbIpk8
+!1IfhCBNHqkXrkHckFHqpH2I4lkY0`b54Br`4Vq*1VZ(iP,Mk&PS4G$#d0erCZ[S
+CYcE9dk`P@'ACCFA,`U'&5hAGCZfV@Z+9GAfA[aI!jImP@read&@9leSfCPjBmYm
+26bq,3lbmkH,eDHCbGe9[pH`IJM6q66c14$kqCkp,,lc%NBNMNjeKH9V[B-e&r"'
+X,'kfAi1TqMi2cIbfeM"9MBc6-pEq,[[@[)Q$Li(X5DeVX@,RV9hJF[lP@dkp!k[
+keGGaUYrm)SM9K6qMqc@GAm@XkC!!8!C"[2U9,MET(F9+3j%2qB"+dEX8%KV0aqH
+1&IGbD%-A0Y[L)YY9eV1pqGVpp@efkDpFGBGFFAaBd1Zj@rXI0eIPC%hLCA2RrbH
+PmEp0P"C@pae+XIpXSqb[G50ZrFNHc)dT'P)k[(h9@2mjJ[%ME[p@$a'#qlh9Deb
+PN!"DrY2qhYfFB[bZX2pS[pGDdZL'@&KqZ,Y1GlGV()EBerl,MmQK"lGYGTP4X2f
+4H9DC'EdV13JI%pr9mDYDAPYe0TG@&KqU,QH69YC*eCf2AGE8RF,lPDe`NUEVp5c
+X2p)+eVh*0HZ#%ZIkS+eT`Q5#pqjm##YEH!UIl[rKX`iq3JIAqr&RDNhT@[JY'9F
+`mc#U3e%pFlc8NH2dG2SaF(6r,,r&'er9RH0(aI*NBI9Td+H([+X2SU5k'KSG'Zp
+CjrMX[33PNDPhjRTqK+mbZeVd6D+NfG+mR1KVZJp%hpLV'R$j2,KVr1H#DT,rY8Q
+mMSkb0Ii6brDf4cArb$9FEdNf(RJJiiNI1`VR6mhQCp6'jbIYN!$+j*N0*U[Pq'`
+rZ8Zp!b2m"m,FEmD&SMMijN[%rVIKGrh90dNMcfcfA9,[RTa5"G2mEAB(h9iV9*(
+j&'"bFc29iqddX65a02jH&8[2bS-KQjG1M+RqSe'Xqmk#QFk(D6SHLe'UXZUlB9A
+2e[K6ZA1mHKR8163j0'PmI+Ur#k+E@8UBj[S3efNrEp-rAqQPU9jeT(*d023`0*l
+[jerU+@*,,qel,0KrHdiP-PMAGFi,FrArq&,DCX2rbi-c%[*Pl$Vj@`PBecX0lMI
+(K[KY[[-2Cklj9ABIq9BV+(2XZ%c@f25Il5CRkhr"2kKHI")c0(6dF$m'dPdpl4j
+1p%RFbN2EVlqE9`[98LjRTqR%L9hfRd4e-,mk%FMi,[Np(B`kc!r-lSEr&804Kmh
+Q3erlcX4i[q6G8q6h%ZQJk-BRN5[3PIIrcR4)N5i(',"rcAhhaH9c2`8U(#`jQ*V
+Ce+G4SC(bUIRDrkPAXI@ZI5`Vkp5B2G#BH@*Ld4-H2LA@0X0[Yq$`HlqMYaTlaSE
+b@*T4a05@*V6"0MZ"0V&mTcGPGiEUbD[Vl+jk1RcH0@`Uc5q5,B$d!%N)098jpcQ
+cHb[qE*dH0kQhq(QeX,p#NBh6@cb4i26Aa3L3!'91X))1bXFVa)R*kRXcHEV2$rP
+k22VB2VU3!0M2plL""ZT$KH`UPY[4pl)J%'hCND5NHUJ`TPHm-M!pPmm&DYpl5BF
+MY[l#G1M6jA)R8jq22hG,aTI$aDellDB2$YSLMmi330X*+elrk8FVl'fG"b6rl3F
+(MpB@dl#EQrra6I)h13(Lf(+PerScEG"&aq&Ki$6FR8Mrr8f9J@(d[Pp,i[BD@(T
+lc#UarrbFZ)X&a[U-k9+r[b8jH9,[rqTG$$L3!-2q63[VAr86l)"FEI@h2Si8Q`r
+Jl[,qf21M"ePYiQfJUDcUTJQ%G5PF5M$kdrX+%c)QHa-PkG$%Q9,l68p1C[lp#''
+KFm$Tm$h)EUCXkQX(G@`G1D$mqlKKQ5V[HiIEd*8l*h9DqpaIe0A9pM3JJkR2dCl
+6I!0iIqUMYYih2U0ah2[rG9-*R&p0d61Xpjaq,UPlqYIQkIjH[`2[c,V)dSe!I"H
+4NakPprXSj6Tdq6qGcQM8eRl%(6k[Ce+9[[8Fal2eR[UGcSGj3KEMe@Cm#BE5)NA
+QHKk(SehchV$ZVKGC1Cej%LlXI#eehVTc4qea109Ke(p[`UiIi99p+(`mk'[Zhhl
+9aIc*pq,6i,5`P@@MBfdA#VA2kL*kUdkeTKB@9PC@M*bi+Z$DfIFF'hZ3!,6[Sqr
+R"@c`ZI!T82&Sd2'QBY(Z+YpE,rQZ2`mHL'[r&3(9'IRXI5QXeD39!lp6IMSjh-0
+$Ed4d2SG[-PdGp8KYcjQh46NbRNip(*!!I8IiphKbqbhq'+j+0$$fH(8Ph"*Bj3F
+LPNMT8%04SI%q,Kc*QN!3%fd[iYD,#DH,+b(r'pVKbT9#KiA5XpPehFI+XV'Ze1Z
+U9S[c@$r[a50q&cIDj[5Xri8b6405acqGCr9L`9mQm!Ck[q[ZqllS!!#!CfKRH'G
+hDBG9CQCfChKhH'9iH(PiQCU+KSKjUibD[+PeD(LCL*UCQBD*LTUUUkZCKSQ*QUQ
+kQTQ'LTQDUmZXLQCjLCakS+bBKj[,[*QVX+U(QkR-#l[+UTHJ`,$-`!#jGjQ-UkU
+FUjYSQlUULTc+bQZ)V+bEc-c-PUZVQjQSQ)JD!!)M468'KfK`L*PhKi!(HCJ!!!!
+!!!#3!!!*,b0&9Q9@GQCQGSHBN!#(#*!!Q)Q)DAGiC@Gj@3Q3!!!!#!"iN!!!N!!
+!F!L!PiL3!!Q3!!!!J2mIL`pRfALH([rJdpaYY[6m2aI%i[Lq*)jFL4jZhrFQb*2
+HH[)NmIXEP#[,pjCQAq$dX#P1Pk1IPC-0rp2e20Xh-6KkriqAJbiHP"aB+GV3PH$
+aZ((9d0$3j'piYbGhU$J00K$&RCeQcCYGPZVQ0a%43-YGCcXkR",m(YFQ+$PD1IP
+lRV1rNA*hI1$@2MX0EH*hmVf-AAi'()JieL,RelALmHTj8IP9+m1KaEQ,mJQ9r"d
+m#qQFcL6F@rPD'lRE#cR8mQRFZC(b5VX#(T`EU6H5-k#9VZ&qDT,U`bkX(qVY*[M
+b,Q`m!TU8&Kqer*PEckR#jG(pSL0rKhN&Vm@AcjY+Md+23Scje$VlQ0mT&58C+P"
+(@IZEc+Rc-+99fNl!d*&b(`C@(UhdS1CXC16a-rHr5rhDYc)qAe9$kNk!*l[DAm2
+j[-jR+j%()LPa5iVq+E9QeCPc$m+AdrAkV!"$hqA[[,ciCHK6qMPD@9YlNl`bh+[
+)MY@V@K)cpeFb1+4I"JkQ"LFMl[QHA"9Jd)+X[akIa*BFp,eqVFaE$(RG,!QHESr
+GbXfEIb[*bmH3!'L[jpZGaVldGRJ&+cFV*bId8F2SBGhKA*[c,lkAp1"V`,Bfm`0
+IVVb6j%1VFRq*HlrlNZq`ZPX))jAZk%Z+90hhC5,Q(iX[prhL0KYjqqQXE$,hfRk
+&bGibdm9+fPT3j16Nj@95ZB[cF$6rd`G85r!dH*ZmQ'$5%IUZA&8[Z,FTI1erJd-
+("`HTJ61Ia0''46$K-Q9TDAhj&c&rEer-rVQ&`fhc1*Z)EqAb+ZcKepR1cc"5GrQ
+,B5m(Ti'*4bC-UA"&9ihdlQ`JF`*YiF*F&,J[-$JGh&&Bk&I`UPHT8hHGEfQ)A#G
+8+MH4DMk&HYZikmI(LU@Sr$`k&$$bX1(XZIL3!1akbjMBZ$a[c`l!*+mh@2$jQpM
+MpbA,TdlANi'EfIEb,Q0X9(jQkqp0c0r(Zre-(lr+l2B5,Q2M*69KG1B(-j%U1P[
+*IRC@pqP$R`hZVCTb,I@i0rEh1&0,$ELe($&l9(%`m5M4r&GXD9IkXC!!@)!YL'+
+TjHjj9[-Q'0"E6aE&D[r2&r(AMm++YiFqM2QcU!!iCp$DE'lT`kRS@mcUVrj(Nl$
+B%VKVm$fU'(GVllk""[$S8EYD)@Dam2[-EB`if0Uqqf'`f2D"fJ+q[X9SDeDer2&
+Bqa[+8r$jp%'9L2`k)6Y%*kM3bU@aZf01''2@cGA9cF,BGabd1I%ciDmF9AS9V&E
+Y[IG!'e'IKSH"9"*af1"fm5'rfmh9Ydim(mhf*Z`&SAfZYZ`rDQiNl(T"0dI'Zeq
+mScqVLi1rYdkZ$ZmH(#"([VA$k&De9X9Zjm#[aUeVYiY+1e(aZ`hqVPlXdFi82Z`
+H*8i%F8I'Md+QR&U4DHfLjZaQhG1TT9V&LYqpaEF@I-Rq00J+-dZ(AYH&&T9G,Ra
+kFHP(TpaL8+1dSd2pP[,hQ"kr&J+`q$AiI2V@UdG5V8dSrhp)%e511T@YGi((lRr
+IEfACB&Mdm)YjfPIJFm1[$YK(6bH5+4+A2aYMmR9k[XjR#qh0I,-HpaiI)Ke0Y%&
+e@iIM3je[)hTH40#-hQmVfZ28YFDaDYI5j)`XT8D@(`H$ERlkqkhX,mi9lb[akR'
+ip6Me,(ICeZIfN[[qpQB)8AG@[Ue2Uar9LlbG4r@YpCm'CfhaTX*,Z[Vm1aBY9p+
+YTaqG8e)SG5',lG68V*8GBdYj`G[ETGVJAq(K6!@pPDqc8mll06l9(C!!XClR&Th
+1[lEBI%rj8+!'m+4mkPVVc1fq"H@Gr2NfUHEJAP2PAmUc[Fq69TaC0jI`5prChFU
+qTChYmQcEf[EUirGppAih(LKVfSUh'LMY9)r+LM%4i[+LV`mDaheIK@iZiQCqF)K
+KmZK9V@)p+,6Zl(EGGlh8Kdi[,UFDV@j(&YiQr@P6I@KGXBL@2NFR(k'2MI'YpG@
+4!BEp)#VZ+N88hGlMb+QN+@Z61aFfh&`-(qAe%U2hZP@&![!VekrMI@S8HIKdF1G
+0ScBIKELhXZj0VKHPa)De@1Yh'(2ZqPkIUaGM4RBFl0RcGjEaH#PpF24JaiDfI(@
+b)UeEKqV8p@TVIlH,Eb2K&hf%"fK[+R'lFYIhG5eh&+K4SL`hDllRC(G+3peh%@P
+h&,(&`r*RiPd4Gp'('r4brBkriH&dIPdU!)IErArENfY'I,MTeEq9"Sdq49P9B-Q
+'mTk)Sphq9*YCd'")eH&IDk46JN@qXq)8bN1-q[`l9I6Me+RT4Ff'm`UF%120ajf
+aRiZ(5SdHVSI#hI1Tr&*E!@'i'),S10@&Jp6@Qkd2V5GK8[,cm(+Yl,iak%bqhih
+!Vm#[iB[*al@KIADpHa@j[iadT5$(YU`-Aj98H(r0CYpAH(VR*cUHYV64AP8mX@L
+@Uh'*eDUfSp+TTe05(9Qh-Z5X2lbj5i9RNAP1pN6j(%[rVIRc[-NFZ6CQb1CI8UH
+4)YiqZ`ChF`'PAkfeZ`mQE4Ze2$Rd,STGRAE&$0YiXSkfMHjfSF2TbV&I4Y9j9J"
+IDjfVXEeG#2E"i!Y9kZN!9Ueh9bEi`1BGqAcaBjDpV(UFh(KjY+KL8!#6k@jjQVM
+kpM8p'$FlZ+1+T$($9X4ml'klSBh3aXAaVG1@8,e3F6m25p(%llCcFQIPEED80T2
+Qj-lDH"Ge2pHrYjGqU$q(Tkh$V9BDa`4'$rBcjdql(&ALLmMd5M-c!CU4k8(Lk&D
+[DMdrdE(C4DIBKLF2$%E+`Y%LLU9-h0cVH0Ydld)1PKGcAU4mR$Qd*[3`iEYIhY!
+GdHmYiG41hB$pL[`kX0MKq&8(AYfF&c)h$1hMTi@ZYD1e[iFR-mQ#9H50@R,bC9V
+i'80Lqj9-kqqLcp,+l+R"mk5FFE924MZ@iXe"qKe-,5k&VNdVYV5KVa&b'E$8UaG
+lBmU,1ZBhAUJjITka1j0cQ40S1jMHq8IefY!0MmZ9rEc)i1eQJIj'GFYihkc'Lph
+#bSjZ6&&ZiV%9I6qYLFr%jq*G'fEG*Zh,35Xr*KPk1C5h&2PEr-RcB2CZBhq4LE,
+RS14("RcC@lKp2PbaXP,HdmUCfrATVhrLdaTCraS8FDlr0pV'Zmf[P9iXU2FjZhZ
+GCPQQb!j,ANUe,d)*8%b#$)c*ZIZ-rYFr1bV-Zc,X`Cd&2KE+cFSpL9IVa"R'hNb
+PYl8bRDfGNEbXkj4q!`Dk@$*!KV[SbCGH95fqRRm@jZFIBE,m0#H'%NG6fC2Mb0r
+"HhNMP3AprH9*%f$AG54N`5SUI)bTHG'1p,1mHAZZMe*&cFj'&kAdU-mfAp6fHpm
+HA"$HAP2EcpGIje5A*JXpM,[S,0I-PC9R1hXbARD[NdYeXJEEEC)ifGdSC&j)r4*
+Q5TN[!JQM0#VRD'GS4bDXV2PEfA[jHhfqhcZiN@C'V0L12Pk(IGaNEQGXqK1ap21
+eBIef#[6`BrARG#Gd*h2RkZ6XdNKKp+$l8l&Ze2Xa92fFM,)9m[+jml&!(GUFZjY
+YSQNkIlXfC*bTRP@-(2L'qr4bDHICV5-rK3dmq1$3!R6dE8-R2edLjJp@99VVlS`
+E6D5,G(-6DrLHl0X$S$`l[KM+Ef"9P[lH(Y@$A8QeVAPDI2!m"d@4h*h@-cYk-f9
++Pq"m#PQre`33DXhV8Z!`[GkVbS[9UI,b2IBh2TA-(VQ+cU5-Vcj(1[pX3km[1P)
+JYih[5KHU#HrUf@Tk1aZJ$p(BY!ph9p$"l"I##TcTh,`[IN1[K`)VINji[0hpQCr
+P+Z`YIdVrDpYYDec,cR'UR1XmLaPl5RrCSF5rj@ARHEIIAQkAUEVQ5*FcCDYZMq`
+89,a1R0lRReKGI'EXr#LqC[lG,pPJe)!d-[d[-)hh1rZB2#BiEp8'ehdMf-#D@ke
+dVh)2S`A-'F3fpPHh",mf4l'$2)GIDlh-,b1r!G331"6j0,q(RAq'JGHIUkVKA-#
+MeADqh2P5[d`H"YVFbNIXCHh[5N90ahPDjJdcq'ElAG1rQ$JhJGfLJehZ3C2RFkr
+laP!(Z3KFrje6ZmTHGF`H1PK@Zr9"Z2j1&l&rp!KdUmpZ(PHKY090`Y(TiHPk9hd
+XIqTVF9M3fSl&EjSi#AE&AM80jUpAV*mY`8Fh([25eVcUGGGKp'ELcXH%kfrp(d"
+&Za`10Y0j"Ebr54*BI6SDQY$Te*2*Gr"h9f[TSN`8qG&T3`k@6HIPH%VXqBV6kF9
+llepCApArc9TI5eSZEkFRd@NK"!2Mp3TI0'rDM3k[*i0DjZIZ2rT"eHXrS6UES2j
++clIVAIVmVd1YqkQ2!BfekGhdmIq9kNMe[hP,ZEcI5eT2m$dAGGkL&`IhTmf(8U5
+IP24IYIqLTh5L[II[*CUd[[T+d&PEkf*MqHiPMk&,qNMH#D4G,3YHYm6%k'*YHJ!
+@Ph@VLHUKX'4(jPV92apd1-r9RMCKm(PiIp6D5Lr#i'EH9EI%dSp2-V2HDY6QTp!
+%M4V3`kf6*r[If61VPqXPq0(hF1acE[0JaGlPE5M2a*Z,XSIYmrdZM$LcF6CdFVD
+8ZcYjIpDP1YVIEe*2ehM-IUrl'T9d0*+ehhRMYI`+9D%9U''eNbH3!2"CPIK9IfS
+VfHqLHjYZFrfX6d0Rq0PKA4`kjUprHI[-bhXrA8Qe$9Vj$X6CAr9Pe(4S@NUYq%l
+%mArC8EBL[GSl%QAq4*EPBhPjkh0NqIhd@PiG'MY-5ILM$2VSFHR6k%%'2m@h6rl
+Q6[9(HETkRh,'lV9kYIp)m6FUKP6q[q*Ge22Xfpcq@(V[MBP**dQGCRE@-la2(8p
+,c[6rGp@,8%p42HHCmQIBRlXr-9JJdhLZkrZBeaI4FpffG)NF*dp&mMqeRQ4dS*'
+G6fm%L4H@I-bB13!1,-p6JJKaHHZ-%Q6S8j%M9mc2Ua43D2Dpr`I[h-ES,pHlkVT
+lH4)[T2#d4mdUX()rLfYEc,Q0qC9j+Xb,@KHZ9hMIq'rjM*cXkikXeMIRHIh04rm
+TbB`R6e&fmZAl0c%pMAphmY2AZ#A,P5*$MRKUihpa(#Y,9MKerbGI1R6a+VKmqPK
+cCf9Qh+ArT$X13PB%,SGA-6rfU@[biYl$F2ra1`)$G@+3!-j5h+2rdLJfB`$CA)N
+8YrTjfK+`-VIm+j2rr-l)ZPK3IAcVck@Cbq4"`1dTA+(rp"F'180X9pQHGS34ll-
+i9c'pPAcBm0rR5*FVX0R&bprYmbIJ5p(j`I0G6R3h5&LI4m[LD8SBKj1qbYp-ZBR
+k%l`6$iHcE(*,cdeFIqpBHD3r92jII6TmqGGVEBIF!G+IHlqjLrTF`liZI9MTmXC
+Y``F@jMIi1BGXcKhV@rEPl(fPEFI#T+*lSmAUik8DRFjec(pYjma,Q4lL1@,ERfr
+#H["2Z-EE*IPm6kQa"$qT5&V4ZkN10d9Ha*[-l4N5*Pl0cfRXHAmR`EQ4lUS"QKT
+e2mVT*r6aNJfS+[+q[&,(qPUlI4b*&N9cBdLhXqQRP&Kp5$ZG6l06cq08VaekeD2
+Zaj!!mI!U9jhd-@k19qdkLEJAjkX4Im#YEm,9M+kZRb[ZRh5Pr6cmLm[)0(al0b$
+m4Vf[X$Si%`Iq+A"6Xh)Im5*kr!k@!R[6S#UqjX-QAlr-QDqqpf$*hNh+V$*$hPl
+raqC,[EcThZrZE$il"hfi-Rk-rHk3!"hpa)&hR5[ZApfrqI"qa)T6lchElmAq(YH
+el3!!!!#!D(D*D'GhH(GPCRGhGhKhGiC@CRCiQ)L)GQDBLBQTLjPfCiL+UVUDLCG
+SQ*U+c+UBGhLCQC[-UDL(H)QULXbkQAL*LTUEc)ZCQSUUS)ZJ!+ZTUVZUX,!+V(Q
+C[!ZJ$!bmD)LFQ)ZER,TjLDbkHDbCUfThQSQ+bUUmQ)V+UjZkUAFB!!)cC#9RGJC
+i9T!!!!N)#C!!J!!!!!!!N!!**#*&C@@(CRCSGBKhKhL3!!#BJ)L!N!#3!(F(F)L
+CD)GRN!!(!!#!!!Rr2iX([pjaZ(hA`YI4fQ*Vq(iR'iRLFD*pH*%q(fRprj)PK`I
+a4,$aHhcpG6Y)PK*YS054PrMTIf5iIV5kRc1(FcVZE2Kl[)d,qTClrJ3@S([YB8h
+5Rc-+E0hAmdqCTBF)$+(SCml'Xr+l95$Id+P16$aCI-NqE"k(SD22mk$cT2QbrS8
+H49UH*Lk&lZV6FG4@ElH&1RcH[bHfbZCem1C2Qi8cqIUcGhCDAQ50D"h8kh)jHVb
++86QlVRaX6Yq4bl5(*P41E(VEb0UHjSB'mXX[dlDd"2k%kCK5X+'I*Q5X''Ki(bB
+D(bD2cqkVE$hpTjADbT!!X'j9168iY2Q8I0SHG$jfefFRjRf+(f+2-TmbTbFVII+
+Pkr3PI!-Yq&mR+RcIkZT2Ki@4dV6i2BG'rXBm%54jAUdGaR`I[apaq@dM`DFLkr2
+8fX--Uhl,UiI`V6,p06Rphm14a+h)j-5,(M5,6&[-hECZAQp$9H2&X)dDdMAGVql
+YY#ilLbL@#aPm[UpMScj1&$K5Td[cY$CI$YIkIZA-S$(aH$-qM[CFR,Npc*R5CXQ
+P+QpDM3SlfA8JU8kY@P8UcU1hkZ([6&RZGYa0aAPj&5YbZG(jm(+Pq66mcajF@T'
+j@XMaYaDHl(cpGh*KlImQV9c1hf%[UE(DbHC4c+YAjhGD&hh4R6r21T6j@M2KRbX
++CmlUE$`FqIMUFh)1I(T-1CH`KQ8TNZ6,R8IJF,"jP$Q3!2mh2eqK,UfI4`)%BqE
+0fq&Fk1&1`VQGKFHE2dTf&1Q5F+9iP#[JEk2THCVE)%Qjj[YDk`VCdE9Hlfm5[I4
+Ff[Z,2b2V41P*lXpR(V9-E5UirjXVQiQKElmbSlkV2TIR`lM#ZTYj[p$AGij&m1C
+eq4hX16iX02kd-[qbCk[%d1aq*)br6ZlS@jjQ9PEIE6Y'G"1ZHbJQcp'C+QAN-U'
+pdCGa,effh1M2`Y#G`'UEElEB8klQBFbpPklZ0RqVcSI0QFLTQ9FR+Um+G[0$!q+
+K4!&AMF,$RGRGB9j1[*ZZQDkKIbj%MUE2[kd2qbak1!Y'YG+U`j@eZCPaX1[c1Cp
+M(Sj-c*Kbj1C*m2AelR*Ma,#dXV28XYcHCZ*DB0pkP,@p$(pEQk&lP*BrCKIq$l@
+`PlDPEcTAY6SCXbPEbD9H9`YCIF@cMJf`*Q30%(BC-0pRh[I1$,8NGhpDT[T01P4
+UE5T9S9DG,I@pH9hj-Vk('k'T@V9N-j2JD[5mc@*HCM9*1P$[0lbGjVmqrm&B6Je
+,+CE`8+@M4Td0hMmcjr[pT4U`dGf,3r#4SY!Dr[qef-[GdT[YcBFV&V52i0APp,@
+4T-5#AM8ralVU`j&D$rFLr'ZV##Q"2HqM8NdG$ArliqAkCNa$9Q6CPa$FblV[*Hf
+KR!0S9FAT@Rb&5J4lVp-R#d,M`pE[q"F@pR%XUQ0ZmE'Qqh1R3j9AZY#$j+`3"LQ
+B&Vh($52,&*6d2-i'j`,E@H26SI2LD&la&XFN!X%bjXaNbjHfdTrIjplPam[TDfd
+NDPPf8ZT5SeGT8bU0@RMGh*ql4mM3YFb0ZYjBa`cF@KY-bEP9i1,'lRl9M'$(iep
+a1YAd[,lA0cjA'MEMmYMV,D*Dp[F6DA#pUGT3bU'K"iKL'TZ[EQcCQfTiZKEr+5A
+k8`akFfCSc,M4Ph@M0kZ"mY,l*!+rp2[d24SHMHG+pq"Hq&Hq&Dm5da,6%Y-5[HF
+G$K%cjQPcEb*RfX6)eN61JmHqrdpc2ehc&QQ*1h&[$8hSlkSB2+KrPZ"0Ukl2Ub[
+q"TeUG(b1AblZK3bG,8d,L)DlZ0G1eKbrc3MA"0e3REE`!Bj(6r9R`EQ6XCA[VIB
+6GaFcm,EpENm'pQAd26[mA2Qf$94'DLq[r9,aj[Ac+Pa*q%e8h2[)YRIF9DQm2AD
+2DF$4Ncp+hRGE+Sj8l#k9aUl,qRlLMRirfhr@bqjqPGAqR,rleqPEGJF31RqQ5Qc
+,3KM(86dm1(B5X1(F5X2"UG2lppGbVb6H3J%PqVRhHX-*60pYYY"8Pe-H$(iAirX
+IdBQI,MP!h(eSIYC8-0'M4`)DJZ1SdBBI!ql$cF62`E%Rr`2qQ&f8bK0Q62DQ3cS
+CFqA,[2MD2Bq2Ri9N8EHF,'SmQAjZ"4qa"jX2*SFLTPBq63Pj-0#R3kfkTjpcL,F
+*)e,DP8Sl@iJkXkAF5CNfPRfe""R@501fSpP,KlhcjpHpSNVh-[krGEQlY)dD`X)
+XA9@2BHpTjpl5D5-HKfmbIemVIFcNHAZp[*YjQ0Rh[C%GbFcKlEV5DF0''K4Pe0K
+T9HmVhZfD(HhZSqVX09ar5Ta+f4ZEkaMmH[HlFMYV(mRe1qM4F[dZGNHjaqbedIP
+lM2ZZcCfq5)2j,Z$,JbI,ZqYbI,ZrDR9lhF%h[S,[e2!THClZiRd-lMlR!XH@&6Y
+()l)d0PJ@dEaq&j9E)`U8&ha+q$08GYp56(eHXrLer,hNq4m$YVENC(0pr-JmQGj
+HUL9m2#-rBd56%lk*dY9jNA&eQ$bl5qNFHARFQKDGpGq&LC(RD@jiqGFp[V2+l@c
+MJVQd+H$0R$aCdVrDlHhcVMYQ$0R3iIlfdSF1jZH[ZUFlAk&T)@TSdmTh*jpV![F
+R)X,+EqMG5jQ[Vi&j(L44,+*)YSh#Y1KLHT`q*k0$Pc%#U@bp2p3r#0kY1%m)X[k
+Z4L9ZKJqpkPTL!)qGC61M%VhqZ@2%VPZ0er*'`,6Fi2ZiQ*NC&EKFrGH6a+pHm[P
+PpEDPTUSRcqAhhHEAXrSq[eI`Ga`ZH*FE@rYF[dlL5*'ffTQjf4XSpR&eGDRLHCh
+'[QAGYTf&$0jFh'XC&EGBN!$D4qK'rEUCYIEB%MFG5lZ!CDc8pcmR1jGVUmALEH,
+QrA[Tm6*ZiYh@`I5LHPL4T9ELI8Lj[hVk2@Vihci`+Uqb`9LD9U34)pYjQ4cZ4k9
+KkPMR39mERI2j0YDB%MFi[b14p@,I@PhLGcQjX5YE5dXeLMe9J[pT6[FQ#YEEPJP
+C`A2hDGr,JVAmaG93mc[+S8rZbkI`qjb8"r$hXfh[IDYlZ[5R+3#QqiX+0K"dE[i
+pT,M52(MmMPBZkaER&eFc0QDqA(Jj8MRamQ2LH6(h8EGDUYAXjkY%I6NF(QGhRhQ
+'QaL0HDNR(TdkP2ZCY[eCeaemHVMj16SAQ`)jFh0`JYh[*3KQfp[F9lMX@EKaScS
+r0qAlRj2Hr$rEbV#*@YGLc46Dq,Pr0fRblVUfHbBhf(Xmck@KCE43k,Tf'6"RhZe
+9%$"jH"2ZY'kd8"&"ZYQeYElj5Ucdl+#jkH6"AYHe83NDGP`Ff)%[bE2pj@V@DPM
+p6Tr8ViH+EiGC@a-M0PhfkhA`I)qeDHTHFfPLH"NHRNr5prZZ,j-5deQXpcT@Iqe
+%V9hQR*lheqbk9RmG`(4*1ppIE9l2)0MZ`q$rfkYP*5)BZVpk4krQ9l+8i$Ifb1(
+Lp@bYd$H`LqpEImr*kYTF,AE9kFMaq`JVD&MFU(kV6e[%VfGdQb[X0ArV)if9AVf
+PfQkQ0f([DQ*NDBY+ekkHBX5ae[k)PHcle9-0XcqZ4AXZ#X,aG5$Kj(9XrQS0aJ0
+rIh(f+pRiUX%A6NCAqZ*AXr'B(3H(l1G@PePfYh@TFm(CbI9NB0rD[Vi1cm(R%Nm
+[CE14Y,r5lA4Nl$4Yjre1YPBr*UCNlHCm228LZG5ibr@mq6jY$9HUhr&FqAd#5eD
+(drS8E$R2#5(d5eeC2dCA-NaI1H%Z[rmNPiArL9VX6CY`MAf[T2rfMjrBp&DU*a+
+IH5IRp2Tr1jR%cpMdPj*#!Zjf@bN3p$#Q6j8q($NcC8QEFc-,j8c#kp1K$b1Z19%
+[RCqarY*GihBl&q&eICHQTF,*l#*Z)Z4"%LH0lYEdV$%[-hZ)FQ,Gi0EdSd'*r&Q
+paUmLC&mEhFrDIh&GU5H,+c*0Kl&(+SjG(-Kj%)9DH94m(+Sm-0@(J`jG(+[T&D$
+e&bYZSPcJcjprardbTQE@Jrp%8lQGK-&*ApkLPc%Z+(#U5D&$qK`,II*9*(-H'6l
++I1@KJCljR4$p@VS`YCfCf*kVURRiGj9fp,XlIV5FQR$Mpc+'U'CEpDV,lQjPfpe
+f9h-l1(iNR1er6A'&,QYP$clrmVH61IJqX50,QGP`*dkI-kr-`-VcqYX*NqG1`pr
+R`rJCP!EQIqVD2RDrrf59BGpKqNMr!Y6,Q2TYT&ICD$rE8XkppGV$Y*3r8hF2&lE
+cq49bFbRp-IUIm6hKT2HrPV2[[rM[#l`(4hIH`l`%hMf2jdhf9bP&![jGP$d,rfp
+j4j1qbmc*jQ2c+IRd23JjdZqfQ9cZrd0Gq-lc[#krfkY5T9lDMP3eD0,HI*KmM)c
+p[rM"dGIHh5H@N[[TF0+V5PeFHVJi9[K3E(BE($m([r"m,hfippZ0MfqC3iZA6bj
+96'U3!%h*QiQIKFd[f9*p#9jmQ,r@lJ$T`DUeb[m1kVi&FqZq*DDV0em5*&jh0La
+1Ge[8k'*l'f[qdcDq"q3N-E9CYCi3hfLT#2B+2V)Z4j-5fMC&T&eR4T@R3iRi10e
++ppT%IS@h+b)Mi2i(Y&Ifprd!2Y`"q8N0p(j1[iMb!1SrRT0Gqf[Z+2l'jcaY)dA
+YX5YHG94S,5BaICTd*HklM4c+FZKMDqYHIQ)iQ06SFVhIreLPE50amMG4(VSYA[2
+cNhq4rPmJ50HKcT52d(QjekZ2decQNIT)RfmbEIcGlbF,2Nrj+*b)PY,aSC-&$M!
+9V5[rb#ZXJe8L6*P5T-Rm@lkXc)VhhZ,qC`fmEidb`VBNIMG'RAp`Ef0EUr5[SPD
+kkbr3J5U0$[mQMrLeRA@[HZ6RDiH(Ip#T4Piq"8U`Bm0('a+elqSM["`TlXGVh[r
+mm,SpVVH9La2bF[Nmj(1pXHAZ+plqXMY$"JcBMSGcVlpK9i4rb+-Rm(C6)EL$fQH
+m0HmpeqrhCRA(qKklG[XGMIcCZpc+P5PhBiFIkNBiH`l&b-9V[pTPcMrCj-R,SHX
+erK-klrF61M*i8V+Nq`d0eX(hPk&h)6X2BArkfqKqKJDDp5VT[lB6UEq`B'DMqm8
+Fk(laC+-RI5UXRemHT0Qk-bjdCGhSl$V$laPmAL9lEm+qKYMTf9T`V[R@'VMp@4r
+QSPCDGPb)XDdSFZT%clUcXGr`,@f$AZlHT5KdSDRaplbDQrRBQIF@KP(ZmUR8%KI
+q3'Cdl2YpD4MH9D1pSe1a8AVAeUQqb8"IIh'9M8kP8'9Aq2GG@G0Khe6ZUejE0$p
+c9aJF9DQc8GbDeH4#PZNH2U5+RYqh,PbkR+d,(CpK[qmMaV#*f!(rM1"r6N5kP6P
+FVd[Ei@KBrm8%l294)fGdV(q'4%LhGd!cmAk`!!#!H)Q*QBQDLTKfCRH)H(GfH(C
+hChGiLTH*KfGRGhGhKUQ(CRKhH)H'UDGhHBUCQCLCPfGiQTQlZ*QRGhQmUTbUUCH
+(LDV+bmUCQ)L*QT[3flUSL(QD[,`,UTLBLVZYh,UVHALDUAZXbjPRCiL*H)QCLTT
+jUDZkbkRGU*L,UVc+QBJJ!!)b4MB!"f!!!!KiCiF!!)P`#B!)C`!)QBL)N!!!!!#
+A0L0%9PCRGPC`GiJ)K`"iGi!)Kh!(J*!!!!#3!!L*#BQA#!L3!!Q!!)#CJ(!!GQP
+hKf9jJ!!*!!!!N!$prFf9hGC(LI0[DH0XSe2iRLj(d2&b+I`-Ea0l6bpYJh&efhc
+-&4@[YE@0XYRBE,Cf9YAakrCchh*kHPf[VrSRY49rH3%c)eaUTl6kqPKp@PQk9Gk
+mARk8#Aj852cG+KPpYVCG4iZIVTF1(Tr0pLN[IPGedCZhVZYb2bEIkHGAbING[h%
+1LTHT5Fc,hqrif4PiR)m12bF(NBQALF2)mAl1`fphZ,UpffjXIdlRYVRNi)&C'mc
+,D9mMbVHQee0e+Aqh&bTNR'iY4J6EQ48f'KB5*06c1dS1E!NH,rRcT',dCH&8mhA
+f(,SC%6(QdIbU@cVV2k'GBA1UY2e8p)LaQhPlZ0[ZE6TcE1A#a-rEG1GBrjbi[6P
+e1$RlB#-fkPpCNFVImMKm,kRFk0RYZaplc+9'RdheYaGEQVkHIL6ZqfXr3h@YSG+
+kKlDZr&YUi"&e48'eJ8d8$(6RB1ELCG248qM@hABi[jU6@)GH,YpYHeA6p6"cHR,
+S,V@8d@kT0YmVr[Y[PHpG8RkYV3E[RCPaGkVbVH*5Pf14-NmALe'90Zj&6Kk&P)N
+i(-Lp2Qd%M&qAJqeZG$3`C&cfdZ2JD&edTeh)S-Ve)A&iNEN6,l2rMcS9iN4D-+r
+0pINlLmjRPHVPlRXml9EIVI@Kk[98[9T2ApZjh-fMh'TY2ISCq(eD54j2VkDjPB2
+bkUjMh0pKiXVcI)cVUpe@,qDRT3J[bqEZEcFl(FdPl5lL(U1"RhN1,Lk&e$ZElQA
+-LjXG#6!PaiN@GF3TG9Jjr6b*YjZEcZp[Hp2,bq6`r`ErqhDGhR3pcf-pTk1K#*Q
+rNd2JLm[5h1[ZI6ZH2JmA"i@$iX2&cT%[X[krl+Z)#$qMBG2GeAP4+#E![1M&im8
+9EF#2j85jaERbSQ$IB2P4-5[a2,eYaVEc5SVbmef`Zl6BA2Qe@CRAAc&H[l($lZc
+lbLJAY&dB[%bBr!bE(*bER*mZKZk,@A9&dFLqbGrFC2Neq6`krbk1648Pa4G(mRP
+`p4NjpT!!kM(ci[rh3CP[fb2P5#MMl[-XC%,KFMNF+ECb+R"RA-L9fXZjUHEArjb
+m5&cBh6jFU4+ZCffN9120YEHhYC%,!jRMCe4me+QpD'(jHAPErKiQAJmM[ERNh2)
+`F["iH*PICl(r@AfITCRcEiU1UHbM`m6![Ur!akqqX1&%[iA)JG[Rh0R4rDKbFAP
+f0GFf(apal1piHccV5rq4ke-,,qT5D'KGbp4`q6PjI)qp(j2$j'APjI$j140rbMi
+QIH504[rA`H(rKYlUJh&P3ELjJHY(KqE6jPTJDRh[-eX%2MZVk9Ie%EJ3DRM9'E#
+cDDTQ`*G$Rl[X2qhr6qErV0hG$RbiZPRpp0L@p4%Si949aD(aFbR`8XmT"J+KjYT
+GaYKH9(4bq""bq,TFRLI"Y*IRD'Kmh1erEQ,!CRmR$h0Rm'*0efdSlfNYSHRiQI@
+`l#6cHkcV(G0-G9*rqC@lS-5G@5iRNcGKdjY*TAX29lH(3j-lTiZKfpGfffKq(&V
+p(T`1G[I[brAU*ZGHI1RmAmhbUd((i2`CAGpeYYcZDc5[HlefilUMkI!Lm$Nj-A*
+pLlS,ZPh9"G`qbLhf*I6Y+945SGc%mQ"c1R!bi(0lVGr9LqVSk9G"p,-ZHi,"Kb+
+6FH"j1Aa8jNFQGG`l'rjHfKiPIl0pAEq"cjIi2DPriE[J4ICKE[#ZHC3lZ0[*e&,
+JHEQjIUHVaIbH,pffrNcShFSKkDPRU6r(KlZJhmkMhHRj-fPlZ(3m5GYiGMNmZlK
+p[ImhE3prAmkrKjF$fYlkqAc[mFbdlVX2@TYG3#V+(KGcI@mRiH6AmQip#ibllKk
+%Z,1hF@GdjdZUREIAi2%ZH2Bm@2airU4r6LmLKmf(KCQa`Y62DHKJ`HT!Xq,JC'"
+LBFc(RG,qlIf'(Ki'2IjAc+R+Vi14Ae&p8`,U96jf`Q*62#(5M[IPm,3X1iViYCG
+eGV9@XHfLqrE@&Y&YBpV9AGA880C3EUEVm2VkA(JpN!"-lV'Nhpc'`DQC'r(JC[+
+i&4`)f,IbI&fZCX-4L1kP,k1KqZe[l1UJ@9CYYK(YBqaX2IYSqaMfYMX,+XZiX5d
+`1rQa0iL1eF(U`0j[T-bC*he6P3I3qjV2HRD(%U1*'bEqrmRDjP&i'Splc2NkZ(2
+8[Nm'0KalqjPArHi(mhP6VA,c,,jjHDPkX(2Xj8',&X+Q2B8&A@HpC@GA@al@,X)
+0l$MFZZY[XpERaZ08INdXq*fG6XDUbY2*cU6`8D5J4m[QF,Pf(FaU#cVpC@AGPqb
+dX1$jRQ32#e',RDVX!24[%ZUlc[$p#`mcb+,q*''q49GC5llblbZqeq[qU[UXL*+
+M4BZ$RE2q28i[jYBX2iqrXVUbVE,A@0((T,#PM@pIHbED`fiIqmXE5bX`1Ar"mM1
+eAmLU,`2Jd,A4eqpq6frF4BJJ2Kq"i8DKX+'cVpE8DfX[,bbrCDfYK`Z&jQMVI$,
+BS40QYQe(L-TUkX$`10+aYpIm@`'+1Q`19"cDRM4Z,Ill(PHMhqM@I3-9+-(lDPl
+YE$K5Z$Jif(![mHUrT`qGpbEX-A8iZGV)9(e)'*IBdQSQBX'rhrE@UakVETNHYR"
+r9)mc4SFEVVQkRrNKGc,'[JaHR&X*2c14ifcQe'2ehEHL4LbL4X#*[YIX)&T!lRk
+hRIBm,FGYjZ6"JAm5bfFhAC(A@R[cqUSqVVZpVr[l#dZZ6rTDrTXD#US,$@bG(@H
++VhEc`2f#'eh@AFH*Di(Ije2r+D+`-q6-[,(TF$al2AD9M5G+[p@$0k8#GT5,Mc-
+keri(*b#2IEl'ZVUaXl1UXl2@@8#Xe[5[S9pPA%DqqhB3V#MM8065G+"J329aS%h
+TBqIX+k*`2)c1cqLLISB-p!SV6"`pr-if&bVM2M3kQ$S5m$Q5l(3Jb)%Ve-$dm2L
+C@4[,6EjhCr5,(#KCcBlYSIE8Gc4bU56fG4A8%fE@q-bAI9J3i@(8Bm6(Vm5[`lM
+!bq0aXZqPB9KLaCP6Le168iF1IcU5HA1Rl1$[m(LppHd0lXSZjTY#jjIH6I)c,R6
+#UqTTKC&Rr$d1RlHpip"ci1li%I4S0hLi20eQl[XMPd@lVq'-NN!C*1mKkMMjrG3
+i[!d1iKh1,c0e$a1qKlq4dG2qh-ZY1pHSqAi0Ial65NGCP8N,bqEF5-2Y*GcBFZ2
+,Li%kcNGBKKRf-Mjhh-b[kcj&,M`k-9RH[8Fr5Pr@pRSd(0Jl[[S8Z6Bk(4`Ce9Z
+kD*N6G,AAZP5EH(U0pkZ4k0VhRRdHSl(q[q`jc[EplrY$kY(Aq9XHik2'Rk[hU2m
+@CRD[V9km[Fq$eGaFjZCRA(A(@@",fSZIIlZTXCd@AAlDG&hF6"R81lJEc4Pq6Sb
+rYbq$ciI%jm1*Lk'XKh'&S9816FFZ,$P9qKImq(ambYkm[J)Ef2i1iq[EH&8B'$*
+JipKMm+Thh#U1"kF,4h[Nmri)r1hX[@CPYU99qpKeIXk8[ZFq0F@dH9Cf0cBf@fX
+,VEA([hGeFA@fP@@fXE'jXimUfMA%MAFh5PrbcXrjZC'l!UJ([e)GecY+pqGGGp&
+a-([F6"ZFI"ZI(ZC@hMbVH`NlQ0*N3YEc2UIda5XYTf*@3Chl8lEAYVD51X`8q9N
+HG*N5UDjjGa)PGT,Lf%kak8fcYlAiI6[VrJhrlYGV)&$@98(5q[NcBZc6'02M3CL
+F@6M61qVDQdMI$aDEPFESl'SY,$iGpIc-D6jhcCX'[3Rq65r&5610r,If(hY0MqE
+,QpT'*i'`lIJhq&P9r&Vq03IBqPr[AfZdlEPHaY0T)VXRIDLYS0K#f-+MK6Y0TY0
+!Ql1`9AEVIArL89KG5EZ0G5V,Fp+G1RHMTS1QeqcRj(6KIBd[Sj86KA'9IhrRI0c
+0P(DG0G*l&G8jr6Q`0T%fN!"Yi9Y8fe"Dd0T9@QXXpEC9PP4@1ZMl#2c2eFMr[0f
+9LUNU0pHpei2PAfQJ@1,%Ni8#CIipa`Y$S4B2RkANmL*``SXHC+mh[jYRC+Blm3$
+`TQ(*a)f4'hhDb+k`lH034Dr@90j8APIE42dfhD`H0#i-E+M'#hSI0c+bc3kJ!kJ
+D'KdCd6e1dTB9*$l5(%R9d5Gm1I)epG6@%hhjF(c*XHd95EcJbFA*[Z$FFAC9(&U
+H$&aYYII1Jr4qljmbbNlUShp4jhi2HcB2(U1**hf"I#MHcYA+,er[V$I4Z&VdBZ[
+f0ID5Df99`)m@$Bi(DcY#0[Sq0(Q5XA#aTNRd2S6EU+6U*e+EbkA`DQ$94D#&98-
+(@DbbS1q`V,#N`Vl)Z2V322rRqajr%SH"BF#9"[V[Td2Ed0Q#-!G"38-,@9-(AEh
+Sr3c2Q9C`UkrU3mVRe%2biX2`l#ij[5VrCM3mU"clccVIEl6Bl5MJ@qZJffZS,6A
+4E5Lq($`XS88j&I`XU*aZ(PmEL3Z(NaXQTaC0r+Nq,j1eQkrYH[mUhS0@-10h-`k
+rK3[YD@9QmVdmh0cjh3[ZYi[XEQXQa2PY#+JQHaZDIZqMd+qGRcXhPFMNH[8rAi8
+(L4XEjqecY92R15QEli+Qec+#!G%e(eN#lq$`@ZL+EBkl8ch@8-%C)IjH0+am1C[
+ZpX-U9Mi'0Ki&e&i9rP6-I'`ppheT(pqeX,@,'X)mD`USdDT`m'EC8D@+dDDK[&`
+-#0Iam#$M4F6I4XMJr`YUc6B-VCcpP)Xj&EY,6DG,Im5&-U-Q`NbT1k$Zf9)N,SD
+CJI0heq*!BdE'MF'$[URcH$"j(SFMd25S2Hj%lND(Qm5Si+15RE9J5I*mhDjNLP0
+Fp(eD(3KeqKA9rR3-U9MBprN`E$&UDM'M3X@krG3q*IH"FBm'0M9-6(M30pJBf2+
+bGC`!@D%2CjQjKpPLrQUUJ5RrSrXL81rR3GaADq&H`i%IdrALA2UIMLB1&SDbkKe
+q*IcZE1eZfVSQ4KCp&G3pI4$aRUpGZGC4J$[DVBlLUfpj*iI0Tmc`DDIY2eE'UT[
+MTI4dh@E[`E6FAGVZDZhNDE!j8fJh-M6f%f4!LS#6E@JJb)A!a-qeeNZ&[X62Xl+
+A$kkA#am62Y"X$YGE,kcJAe"0N!!qR8L"fZjN3,RN6DUhNDI$iHEPEr,iflrNh[N
+6F$AR"$6p5(TZ"l0rb-#[ih$ih)i@KMjm,!R9-V2X)rUA06Ri&6kQ(Vlh@rmk,bq
+"jq6r9qqNZ,+PM@-10FdXU`KaieGBem1cN@Y[EEHfK@0[9I8RpGQ3!#)P8'ST[LK
+`BI8p5Zi0&"Rmb"Y'JT33D+$c[f42c`CrdZdU6R6(KaQk9CfIKbFEm[[9RCc-EqM
+66[HiU"QaR3q`!a')aiG4MCZCi&86)@0A1K@9-1SQAr)`m2+aX@YJiH6`I(Y++Yk
+@6MF,*QFE*[mh&QFV#[mqUSDk0Ac1AG9FZ6-Vp#UUSF(!`XfCLjZ"NmA$bIrGCDD
+rIC4-[6aFENB8bE9DbZU+r*d,RhCqX4VqYeAa8[cracGr83)%p0UDe02RBl(ikEJ
+C16NlkHmHXq(akbcdUcr@ddUfdq(lH`q(Jm$LF6LD06X'%r8TU1MSpGX%'FVbUMb
+Z4TBf16+YSU+LedfSf*aa`HT6I9'%LqS)dHTU+R`I[lMkdDSM5UQiSDULpkXQk[j
+66-TVHKQjPTqbGQHlfACQJE9I&eRLI[J3+LmphXGN4(8!4rG0VHd+9f(8TY0!dfR
+dTh3U1K8G#Sr2AD9GT!%q&JH"'RRr5eGX6L$m8!42k%6*LHP3fj%U04,jGKViN5*
+XmbIN&KG9e0A$p6SDVmAk2ERmbrfUpDRhHC@9d(dq21ed1iaHE3dAF8'XMkf&V,,
+@`GC@ai0$D4i'Xf&MXYYDf0AX,'"3fPM!3AePPF`YC(Je0"4B0e$r4d)HP1[0Kr*
+phm1UlY'!krBI&6HVm(Nj[iG9Zf"mp6C[`H6k[ZcrIXLKmG,UIq@rNcrph3lr4l+
+#MhGGerm+AT4l#9IhhZpP#B)r[TDA(pI(e-prTmQJ34l(8I`efCSiIlGRS`D&"$9
+GIm9,dH0[S'68bV6%fZGf'X39l,6I(4CrZk[@TT!!p6erqd2D546**fNfISNerpM
+erm1TBC'rb-I$SUHEmQR22pU1VUmD9+Nr3ph9pk90e[m+69DMI302j'edH`lj#,V
+04m9,Q6B2e',6q&,XUQ9#PGT99&98qlUrUPDDMik5Pe(a4HeTl6hHbmFNi-qrm69
+rYrGefCY-`l!kcUeIfj(Uqh)d1KAISkkQU2EdTIhSP"Sk8+AiF6"jI4b*eCZi($c
+mqEX1mk2*p2m(hiHSi-hjfj`IYCQCY288rd1Pl8[NHe)p2h*qBpp[1Cm[0*r9p@U
+QehU41I33mR#jY&2r5F)(DFSS'UkXAMBZKL3kqkd0EXr'F(pYkUX"`CR,kGcbkZR
+mehEhmK2DhUeR*$GH9%`Y'JKjIAp"a$hFrPH-U$E+KFqXHkBFmlqfTFb4`qI,iI1
+NC@KpM-PCah69R8Ur(NEr4NF,Reh%khi211l#EV*HRlkA!`F,&lf,K6GYAI)!*f3
+#KZcPa0+jck(TcDVFeHiNmkRc*Aq+SE2kAXbmIfC'0cTr[ZF0k1EiN[6BNfUkHHd
+Yhe&r0r%!4!V#bEQG64CF$[THR5hQZi1CY[c&$9I8U[6dB-2#Z1AV)F6*kqZIaMT
+[Drq&4'0-r2FbkZRrRI'm,-S2r*Yp&G1[YG[E@rbTqY5iA-S2mP&r,Y,bdY0M2l!
+LqYpFLi`-Ar!LBYaIB9INpCU[Jp@jc-bJpK4U$-epcF9G2Y%-FkdQZ[&(hTGGi2c
+)VciVCPpRR`3UZT&i@,RiN!$JA@IVGRp9iY0fdip(9Ee+[bj(*pU4b[FVXrVIlRc
+D[QA@JU)RG,Rbq0cj(&pZIlckQ"JCj)qXajeM,LbZABG2PbC'(6C$VpKV[PP%eR8
+UXhfS-2JA(Xkb(IC2AeMlC2Q&&9D3!,jf*$LA8l@l2(IE*h209Npp-d1RFk&A6rC
+I5(Qi'LmDQhPUEf2105TT"bqI)j(YehUGGp2ZERPI9jX[6F,e-[MmML6GM$Jj1K(
+VYjpc-f228YRG,R5q&cT("pUIm&jrcI-l2fL@T%VR`BH6FFdH4f6erYYdj@qfTI[
+TNlTh-kVTrY0de)p`h$eNp9m[THj,d2FN6[ccrM1,NY'Tk#qM(qAkGV#dEZc[,+m
+ffhXIdlIYVRIi14LB2mhhX(fr-c2"r2!pDRf@`0qrpUAmm)hqEj,rmFHcf-*KiD6
+&eNM68(0Pd2-hB!q`crrVqrm2rM1r[rrIk0G0hIEji!jH*1NC'PRf-1Kq26c"0fX
+5Ep%CaE"*bq-*cfrRPdDZHUZ,-j[6ZHE9dr(Gq%-Ih6mlKTql@4&R5,$PeeaU2q$
+pEm-b2qK6IlmLJcj%,2VUr8IAGMHadLEdR8SmDG"KkDiiq&`-R81hZrQ@([-le1T
+VT@,i&aKA@&MkLlGMD[r5ccakP*'QH2FhGA6r2mDUXpX,J+b4fP[p'9C@9MCf0E(
+dV5`J9NU$93DqJa)df2lj0+EU3m(2Z2aa-,Mh(,kjUl1QelFhX[e2ppCmbVrc1e)
+@fZFcHIElQp[EDahmhBrk'qJIF(Y0TZC'cRkHIRlhZ)YA9aDfSY+rBpeT[$N9eY"
+f-+YSDUY`CYEqY5hlG[Hfp[A6qjG#[jArSPG*eD1CkN6LA'6KB@6U2&EmLTYErU5
+iGKY4-lDjZDZRhMG-re3[f*hFGL1@[5b-I+i2!RI2rePEIdU$i&ilq*BMpG9N2Qq
+(bV$c25eRrm5fNRU16La,kiVm+"NqjmrpPKYmbKrrd'G95kDNDG4Abr#q#Tm+Ic,
+6pV)dG@(a2*VrY3-REC12Li940K9dRPeeKSI$pD0J5S-RIaXZ&P`IbqqjAP6DISR
+Jf1'q(Lr@Z-QkbFIVIV@2#L5XH"-b-I`q9P@Z`c1cq&PEr9THfDb@mjdQjQGRdP,
+rm'XM[4G#qEAG0NKZV4ll63)QHC!!h@h6d-2PIl020,AB$5[lVGdp#lBIZApcb@9
+lI4rLMfGE9E'TYShCa2IfPIfG4E@'aUUfXMfhJCNMrGrraC6rqer`[I5,RPb-$Qe
+f&U2blS8#BH4MC'2*KHECCP2rm8MpL4(d*&KS9epU1Df)kMq")a"$JmZ$$LA%h@8
+P&2hMEqm6DEiL5KelqCpZjfpA6q1f)Fbcq-mLkT)LL1P61%G22h8A+lkee[5aIkD
+Qqr`X+@iVYAA`pP8m[Sm[SjGaPer*U-fScjFpQGTe#QkZHTGCbreb*9M`K9eMBr"
+`q&JFA[F$M5Z,JF,!i1*MBm#rbUVlf"SGjr$c*YMeAjkRCNIm*D5+NA2,ZEbVTri
+Rlq0pGl+@EDQ$m8(&`TRI99994qPKc-E'aFE&bG'MrHJjf!(0GVU+YVDfXXqPJ6"
+khiZ,Lq4Q9(b1`lIZ++M')6cYY`Vm8Llb2JBPc+b"rrmVl2Rr"8jARlIDjN29)rp
+#K,0XGM@E#bZl1lY+hp-L(mi%0jHCQZq5T"r2aK!R+a2UiH9)3Ffq`p+Xl*2b(%!
+jk1kp5bJf1aXl[B@HkZl5lZl8)1efPG@IXX1&PEHef(T4G@e+Zjidb&JF,HBQ9iZ
+*Mlr+qVJF,+N+6ql5e"php9eDA[rRrAr(mZE0mMIkLRU022`0-!1HcZ`VZYlIGGP
+mM6chBFlhDA['&IrbPe1TmMrPU38l@6TjqIp,qleZK6GrhqGf(r&"qJddpmMfI`p
+Kp1IRZXf1`!ClRlHbm,%hRKj(KH"i@maUI"PhrlD($m6%m,`rRiq(i1mhZmTm(HG
+a6j'mqMNIYeAJH*iH4i'&KlbCp,)hR6R[r8p2IlIZ!!#!KjL*UCQCQCPhGhGiH(G
+eLBGfCSGiGiHBPfGRGfH)GTL@GfGhH)H'QCGhHDU*QCLCThGiQDQlU+QBKhQUZXZ
+UQCGhHDUFcEb*TiH*V,h-bkQCKiUJ[EcEUkH)LD#mbpUUD)LDUCZVfUTRGhGiLCQ
+CUCZ)U,ZpcGcDU*L+UEZUQ)NJ!!)M9MCA"iF!#)KjQ!Q)F*L(L3!!!!!*!("`"iC
+`!!Fl)e9ACQGhD(L)KSJ(LAPf"hGi#BGhD*QC#*J*#CN)N!#)Q)LCGjJ!N!#CLC!
+!LB#!J!#ACjLBB%H*!*Q3!!#Cq,`,+kZFEbHq[0K&lL,X2*m['mVbmEBH0`2*hf`
+Ph'"*ZHplc!89Vl5dLpah0Kh(Ff1eLaDqaeAUDV9IilEXHce@Xf2h5#60[*l29GC
+fp2"mP2T`FlhHPlR6p[HF+KjXr,i%2Q8%[#MDP$[,E!dU1AYpE,U-V3T0jfPG1FA
+p&0H8pj!!Dcdi+('r(Z2U6,'fl,[ph"68r9TTHmkh*j'EaH,`q2kGjGEU2dq4PFA
+Km2Lihi0RZ0cZGacVbkjqkZVblh0hZGaZ,R8mkChG[fA"ff[TpImG20qP6@82CE@
+If9GV-A3XT&KiXLqYp5KPi0[c+$R5rZb[FPlq0U8A5e+14*aG(A5+ML6GR@`3Z"U
+I8Q@XVXirq@`ek,ZabTYjDlVEG1EYCHXi-E3MbiH0S@FZ`mb(SA8Z&PCped`*d($
+QlAGEQmfejDlMDkFbCYEMXHIpLR4hAp2JhHklU2,R-V2T,R@dR6`G'iVSe[SIJMA
+fMcVQ#0JlrcCG4jXZHbTYAZU[G4pcJHehdcZ,RXGrq@QT5Hrcq"GhRG4pe5!r`F(
+dEQ#(ID%U46D&aAGa'`FrS5mVfYj,l696*9efI"fe3qRi3rFh@MShmZ9'dEMTD0c
+dY#kNGEN6Gc@90EC4)+1E0U,XaBpZ9aXr2p,mmVLrR`1,-SIdS%H[aG2d[jYRhdf
+Mh(@qa"fdp6r*65r2r2+r2JIR`2ci(VkIr(ZjN!#h2AaqK48-(9T[UpR[1iPD(3P
+paJD(6bF$cF#kPAGMD8HfSC(@cCPjHGR[rbl"&(e[mrKH$ZVAG381GSEQ#0Pk1iJ
+PBqRF`BelcC8M'MDP[25m#SKkFQJhPaJD9c,PBfKGbpTZ*IElQAV14b2ApElRcr#
+lQC8lVXG9eP,4P(8qmlb9TG#AhNV6[0I%hAEi'GLF6!cF$+VZ"0hF[YIk[kpMX35
+lLFfARcP(bD'FkhhjkA25qM3mQ(qLJh-r,k-E,MCmE(PCmVIb[d89c3bqMJAZ"Ri
+PILCq*8Bh*aUM%pr@bGE,eZlPdPh,T,6G9FIGA@bhIT42acEE[&KMZ2q(RmMlr'j
+0$RCp&k[[cqjTqM+arISVU$SiQ$qLNP3G(KeqIk94Rm@Sj2hrITpjdG,2R0AbTcV
+2AR*crhj2f*NR[6"0)[IUhq(RfPVDeNM9j*Lp`0'9)[ifRB5-2Z)HT`C'*ViHREb
+*9[T@-Z(Kjpe,eHCbq2QD&M)mHE-V1q0Hp*-[$qCZGcDER[+ZmlUU[,UmMlQdh&T
+GlQE0jm[Ji(0PqPTIQRCQl[8@-4UXGYYAk@0$U4HQd@GcCA0M389R'SU#dLdFrYU
+qMP`lIIrpprTf8&rHkNDZmMQI9qYlGe-lZql,f0Ifm!N&Pbl(&cp`*8VcEG2NHRH
+#9VFfZiNDc'QcG'kN3mR2ZjHXc*Zi[2eEMGELjSGcF8AJf-pl%D$lIFc,5rkrRrB
+eY(VqV6rF[FM#UH"QF$0`Z9iN,P5Z6JDHmlr5rST[m2m-rqLidjINaZG"35Fq*Xi
+eV%h1aUGMCdAdjQc`%eH+IikD4bVVjGYXYa8dZiRkcF6r4j'A8FAeClNHU)$rG`2
+Ek%[Lqj[*GTcDc[c&r63I[TY,Lq&G5k[Rbk6S!$PdR1Pd[5j2(cY(,R*r(R,#fR0
+l16[XlIjC,B)2i8hXjQqeQ0S9FZSiHI65jcm@k'aPe[Ujr6bp$TiqMmZ$!`G1iJa
+,E8P3HA8HeE3HR*JrXhRk*([ehIHc[IQ6Zrr,@l)),er@c2#m'k[2#UpeHDkmm,A
+ARJdZjRYb!6F9QlRpa6hFrZkITlq9[j[6`F$"clLMZ))NR%[G'heYr"+VmU[dZR8
+F1Sdj1bN`BNpaCl8rLhQ9kh0h8M-QJ$V[l+kIdCPcZf,#hb8hKlRkrRrMc0$F9eM
+MkGe"LB2-`)1(&pUqJj%plZmr9qRp[[El1Kqh35mZijN5A[plTdNZ6k@K65jreZ9
+0h2KH0pcPqcY[!4qG2r#Qr[b8IR[*lLcDE`S0CkZIi%&&Mk0e"FAZTF3Ef[jYY"`
+jlfppq+AbrGr8!5Aq2QIQe8bem(X2BeqZe`X+ElHq$FlDkVEZXhG0Z+AF8Zjefma
+ZC,aZB`$Ec'bq,PmAeH(RF2LC@GPFE'j@0aF6dYpidbY`H[eA@88r2p5HqCQAf9I
+BZ(KBZKd[kFDh`lr#aEr&lf2BA9[Fcd@IM6pI#a,#CY-)bE6m(adqacjH[[mrR5)
+8E*RlE%i%V*fqeKFlDpe8E@,YB9TB4l#lKe-2Bd9h0U-2VUI&Rqf#JqMLf&pJ4F1
+``VEmm,m-,3d29KBpY[m+pqYhdcDBK5e$"e+I2hdESD-MZSA&X-LfS-,+[mQrc,l
+0lb&Qpe#cI&V,'2Fe9h$U0aEi8b*[5PTfIkXpp(*YX,J@q,#i96a+$L39&VcT%rR
+eY"XU'VSifbqA-UI'eR2qafNq,VRiq2#i9[NaX@qi-,2jffrZk@Id*!H")Krq21Q
+EEac!1MTp92kHfYUQVK9%rCa)HYXGVcl,Df0V%VYA&QcmZSjR`mcrkr[cq"Qi-d#
+@hVTqqj@rih#aIBp5CXIR-1pq5RqASbqk[p(R5,Hac*qfbX2bEUbjmHak%HaMf9e
+EF,l%h@q4V0rl2CpL#R)q+cf'kmDkXZKCG#bXlI,Ql$q)ZQRBQXTjcV1T)f(m[e*
+GVd,AS@[3XBPM+XEHcK@RJ6,(q2Vprq@MSLTY+AhPrTFk4IhH(LC1&QB2([HA*Qf
+%&"3CrmeYDf&j'fdEFf1eXEZcMf@"`XLE4r2+el)R'0d-Ac,rc,rc,r&bYaX*Zbh
+hDGrZiG42r*2@9Pif98AdQqmr$Rm2bEZlXZID@PMd!#@PTCAGhECQCpLEVrS)q-P
+PMP24lF2b6@#S"%IpEMAq,NAqCBFD,bZiKINjh,UH9&ipKQAq,Lhhhr1QGaj5DqP
+,UTkjMFLIYZ,`-V*aFc&iRQ3XhRAqEj0TCal1kMem1XX0ecT(L@'Mr4UTRFErVpr
+l0(2d[8RXUp`T-@h`D#`bG[D4HGYDrRE@`V,!9k*99F`kL2Eb1iKCr2YFZE5m$j8
+UjRCdZUKI4S-D(J@'*&mb`r2Im[5rjr0Qe@,mV[IZ6[E!GmDSYX1,N9qA&bl$(XI
+lI3p$ekM-fP,8eG6(S+LLKd'pQ`BhbSr3RHbTIMehd+MdkZVXlMm9J)Em'`[GT'S
+B9(+jX(PPj-p2r(2Eh#ZVH2h9p(Lmq2BG,'X-5q[D(jHapRCI4-9e!#$+i&hBapM
+(eYR9@G*F8YM5p+6akqE&JeFpRlbKd*&YT8r0YIT(D0TJ@C'4`,QjM4kU*CfHYXV
+R@p+pS,h*N`T1C*LbFb[YUrMe&[8ILVk+[TlQAG5)q`RU[B6fZTTRFIb&9dBHV(M
+prJCQ&blfE'JK9'MAedV6NBZR,N`Y#JPcPrbFALBZ9MI-h'`Q4rTNaeSL&ZlV%bF
+c)cFIMm$Mlrelh2XB1h"eAk8@#hRY2HB'T)b1EdHEdFq0"fp["#UG+AhdfUrh(8f
+RJV*G[KhZ,IBYlLi1([lr4pq4BkfbSl1LXk+24@F1bMD8cBDShmMX+br3hGhZHkM
+hP*dq6`Bh-k%[c-$Q5r2dCXbCF6JX!`YI"eDI8V[eb02h0pR82Ycqmal(Qd-[Ipr
+TdHm[FE5T0jY+@A2HYbCYjADc1'bC'b0'lJZ-(8Z+l%[HCI`F1Zq(V2JQA[@1&jK
+jcc`p56Ede"*YjXIT6Be$AjdDKe*-[$fN[!X0+9)Ym$3ZC%,&*eD5)9rUI9e8bbe
+IC8q,"5LAE5JjAYp,fZRcGjpE8RYjJ`p2SaY,SbY'LhP4LCr4aT[4b[dDl`HMb26
+Tl[Ch9jIqP-lk(V1arUrVTkF2iqCfpe4FqMk2hqMip(p(l2Nq4ir4mH$Z+MbD+Mj
+hH99&0lIV9h%HlJb[YXB`J"Xi`*NRj4N@J"&[2@hP&LD0P[+R+dD6H9($d0F0Yl2
+TIfqlqhhGjb2HV[mId`Iik&0"8CfM5`4FM5T),ihl,MHIEp`Ed(A'$3RiTlMeV[d
+,6b+R!PA',EBZC#b-bJbmfIpUSV[5pVRbrYB(YG#A`rEhNZPQEIVbYGF,c(r'ZLF
+cR5phRfdQdM@pcBh%DbZ,#cZ1pSFEGml'qGMBF,'`)H*Ifq"IiFU`cBG$0rSmQAM
+FhH9fYQEAX%@G2qqQqVAA(YFkmqCFhecF5ZRJB(L4X#9L5TAQf-UkkFU0Q5SHE'X
+1A$KCpIraZ[DkIY5rYk@IkNbml&*5KYMqcT@8M9j[$jH00Z*F+rdHpMD2H9-Z9$d
+V#A'MD0M)KhqKCL15E@E2DeYV@99&XSNr4kkMRk1NL8&(58G"k'6rVr*hFhDGbGK
+5HJq1Qmr0X1"KH69`pPYi@C8j[2S2ZIUcD$L3!,-fPC&V)@bX0P%UYMXDZ(@H"0T
++mQAD"rr'c2SheKpf&pUrqeIrD[mcLbjND+Nd)L2qcaVr(bI*TG[+bHPZieT)Kk%
+MD5)@J!148k0G&dD[@l+MTD1QSXqA3k(Gc,#`5Gf$U8hTFDhamA"bI%KiP[Lk%LJ
+d+kTcpY[VI4k@KcVH2EIYaSH6BC9IQhZ6`,rlRR6,#-KX&ESee6SG,2PcP"bB@G#
+id,L@(UfqAIiq([m2IiZ%%GHjNR0NH*H"(lR1Q9pLUX`XAq2kIqrl8R4JNf1A2ff
+4KqE5"cr1YSpYdmU(Ner&+S`FM)Yr@qa-fYNX*2YjXR)hq&Khf*EBeKLffH*aE$j
+GI$LA8+[eXATm,Z)@E3CRF91E8jPKNAf,IF$J@hVHG-fPQ`XIi8eISp5,S92*Vq6
+*cT1GT39qL!1ZVp(iG#ZfNLKcqPRmkAfX23VY90XSl-$ll(b09KC(L92%k9T$ZYM
+J9@&X[UIbqK#mD*L9G[@@&E8mlCe1cS+f(@89A9@0CmkCDfM@-hL#Lr#b,I)X1&B
+*'GQd($S-b&P4FUf`D#p[B@pK&hXDVKh-DjL@@aeYA3lA`CRH`dLrU1TVrd3E(M9
+p6MbEh"[Efp`F',Jfr5f0"E@0$B@00'TVkQrkIeIp[qXpiG"Dd-5MSE#043T9&#X
+D+&VD+KeT%U1LSD5&2eZqfp0-qCX6CTJlIU3F[hDQ$L9rYI$*j[5Nmf`Ji8RfS8(
+TaB-fHrhj2)ir+j('cU$1cSAUjdE(%JA%[prQiGlaX@6amQ[iq68F[KqV#c29X-h
+,Yq"3Er#[VHfp,cr+Qe1hklJlDKlB@Y[QB@&*i96rbremMEBq4V0RA339h4r68GE
+kHfh9E-fAG%PRB2NSH*0kFhBGpci*r2!("2cGRDfSPEKIAc+RL3XZf`r(qE0Rjdh
+`q`0e6!`qKIq*Ihq*XTY02("Rfe,V*lkr)jI3iriErm0rEAmUhP@'&BHIjdb2VZ[
+e@VSMJZr(RaUfUf9Rh99(Xl1cMeGRXV'c`YeBeYPXV12(UqI(&qfbMfF@(C4EDcX
++Qaa,UCD8V(K2'4$bm1qYVE![TrJ@qpb)Z0`[MfY9c*9Z2368iZHPVq2ZCk2Z*qc
+U,1KM@&MVI(hXcDdaV+kmB"r2p,KAepEB@48m#hqYN3Z,`URMm5J!(q#SfeVcYY)
+Rq,RfRJcmH[f9$94E1MM4,(AH"[CNUR515PkY&T`@fP"*qj2F)B0lrId&K[iXA(L
+`YrEd'$Id&lia"F1JNiY6Aj%@[aE#H'p0LhfA4qVT%flkCiF(DlrmX5)2-YRqhTc
+flPbBHESe0j!!5BfGSp'9RD(4PFR2k1"JkP(F`B1*IDG(F9fq&bUqdpEF`5FV"dU
+5jSU@NZD1P()6Pm2Nm,KmR,i['b1,R!'aZ(`pa,hXcaYI1armUcBkrq&20qE1f@T
+PHAaFA0jH(ajY(Db*c!jFfKPkZE3b0ARd%[9jFQ`cl6@bk$,aXq295k$&a-qD3VR
+)*@P$2bpAS8%J!R6jHI4@XMV-$LcGEZ,@2(h2Jf1T0hhhT[LpZPeIBI("1FQFkkp
+jH(8j[%RXhPCZMNjp"Kjm,!j9KEjp['j0rBFR$Kjf03qVP82#p!!ZA`k((iY$[q4
+3iA(Ki2)Kh[Vf%R4Ykr4[kM5hZMMD1Cbq,a-k`[q6iqK1628TDK+l'[q1$#mQiXH
+GFFqbjqajp9dHEdX$#qEkQZY51pIVqT3hhLMhM9rd)[L3!+qm5`lb0Epppk4#0lV
+YiR8Trb8P2`DRJHacUVCqE9E2c!&9@bQehF9V!Cm2!r"8cI6DMI`N5pQNTrQc2Ra
+#J+DSrIVm$4K`S+#,HmZ,Kj9K[k5IYXIK@i!aVYhq2`-2(`Z"Mi@4Mhh#himFppa
+VfqQd0&A3ll'ciN1RL4+D*CDlBe9*XE1Nf0AVGM(SkU249FHKf8IYiZE[i[+`BXf
+*39e6AbG+iq#HULmcjACrl8p*mAjYC1j%lFl#E9eCaaGV@I(VmrNmEMFENmVMILV
+IKr&@lEiIaEER9[qGVckk$iG$2d-qFR2+QeZbB+p9Vpr1$9*)[qQTjIqI+jh(rK@
+p)'GEYJ#I$aXI)kh1Qc+ZX5DQIrKVrY91KVSP&8aU#hLe0RrlG20RTr'U)9[&M6p
+pHm,3JfQbQ8YDBiU@Rq2@k%(k+llYplI2VHXmc``%qj!!6[`6Zc,Y1Yl2UD[EITm
+V+YULHeA`GMh"%pCV2MeId[h6,(D*`DE,j0IcB1"e-,8q(8q%!PGj0Gj*"&#!#+0
+J%jN(RIBRGU8,e`SZYTA5NIVX*82cYEYNMV(PP[X$Tb-h[ELck2NdI4`F(bTNl)5
+`*fI8lDZjAkHdNFlhGK-[Zl36(V"'lG`-rCdm&4kS`lB1$PBpl`,EIbF,"hpIKC-
+Q[[mQpjdm26lclr-[Cl#c*04KidQ[`X'INbH"*K9-Rcj@rpq$Sqr"BF,l-hqUE5q
+%A"GVXZVVr0mhJIK[[`ha"!#@hXH2j8fPhM!leJ(H9d1-b1r5mIb[JR[QX4Yr[Tp
+C8GI8DbGrZrcrQq$YCm`Eq9era8q(l(DdRPFRi1fS#)pGeh5TqeYGrl&*X09rTfP
+#4,XGCm@ZQFh$rCjA0Rk)L(CpGm925l6,Rpr#YirIppl2B8C&HeR2pU62q$YYEfI
+l,+TklV[e`8rRpR59I"e8fGT$j$1bkrUG@rbXcdl1,N8XhY0JRUKeR8lE&[Vqqml
+i*ha%8hb[LTpCUmIlhj1lp5Gq$XI&BM%reTr*rG0SIUTK`#ffmD,'X)N,iEk,IGh
+m(EHBLieRqe0VpCeE,EqT(q$YI0)Pf@Xq+RqEqREqapljXcG6%kmkVj0MS9hVql)
+dIHVJ"rikbpr6AISNILPrEpUSPim2Q9*kYB8["Z0+*,NiQMdFE3T*G4jmh3QdZkk
+2)c[AcTZik1IGEV!rj6*Qjj+SrfT()pb4arFNFEhTh#GZ`fAbP4ZT"Sqj89h#Lmb
+MJ`FIVXYq1GjD*#*mN!$d,Q#cLk%,kY4LpGkVXME[ed4Zaq5*S4+laEHAIAhB2b'
+Yjq0%A9r*9DNMqbKJp'LJbkrh1jqSl3fm2mMaFhFVQqkpK2RPX@fHVkZ6lX[4plT
+Hj)qGU3HT-Z[C6lleA9f-fZ%Q2,pfZ!(RpE!kCa,Mqp89c*(&pZ4Qqh)iRZcZqp[
+cq,PF[Rj8fN"EJlmCd!JT8LY#2lU(Jk0cVGEdp$@p22T*I@CA+bZAPIEPqP-ZrbU
+L0+$Pqh89f4&e+1#paq[N1MNlIr"%AXHV%(`VlfhPfepf(rTd3d2rl5N%5Mm$2Pd
+!hhM[`cZdQXdR6Gh0lZEX2c+6cQVdY(4dG#FRZYl4[TbQe2je)mkFS0#IidA,`FI
+(khmcb*B2d)5Lbc`,lcEHkLE$IFh`reEVSEVS!%Pl[5QGe0I09%LV&86pe96Hpcd
+iFiR9KcQX`CcjN@FYV1FNi[Brr$[R4lc36`&eIaLZ+h6#e@RC5+$-jI+cCXH4#`p
+'aPaVI6X*GrBDNAR5rRFr8NmjZipU('QYh(YZY&8Mc'CKr&E8fplT+Mp*[Q*mGhG
+$TSNYMmF1Dc-Ap*XMpcU)MkVicBTBQ0E3pQq,cAM*JrZ6#C(pT0!pAqrBm6h*I(p
+f4bJ"qp1pp0h0ab-DD0#Xj`F#D0#dj`BFe0#mfdJUFI5M9hPk%bcpY6[5CeT[R[X
+kf[Z+GClIV-9fX2DAeR"M-()3(1PcRpPV6ED$9jHK9`@pYc0jX*XEh82DVpm6LAd
+jYlIZk#*X2rPpIN1CGHmP+&9r$BkFJ@@H@(dITRI,GDA0TqNr)HN0VEY)QTcjIe1
+4MF2*iH9PCRSlLjh0Rdq(MC@9MF2%iIIrpK9MLFcHE1C-mIhjlf0Kh&FM,rI,-m)
+Xj`Jcf3'Ji"D,$$5BR*`05AhiDR6hQic`eJSpcrk0GT!!%*H*UG,Q&Y,dG(8rJKZ
+E)0hX3hY8@rMR5&rZ'N59r1MjGMr#*aVl8kFE8LE$qTeI&(q"Tb*dr!d*F,4N43"
+k8l'qRBeGa9@9P950TYIVbV+aXUUaXih5bBf0'`D#SK5B8rC@rFc,2r&6[2(,0)S
+"lH0'GZRq1ZFaPKkP0RD-LIRq9&pA"bmI@96Rh!4ZHKe5p6ABf$im@qXlh&ePQjQ
+pKqT9M`,ldEHlLE$aRfkHbk#'f[kN'E0k-Rm9&6d%&"e[eh0AfRq6[aLE2r0+QUB
+8Pj0KKB&YKfq&I6HFP5pC34k+UeX6AEl4Qbk$2kA,rNhqK-Lrk)AMV'`TX[9R,h)
+Rp#GfRcSfaUSGR&Y+QXU0V8D&"qH&RedrR4FZfam1fp,jXcZ2ra6@EDlUeYE@ZRY
+CmTm-2Arq8-4+4kZIDe&C#Uk2@dNlYR*5ehrkTTKAhNfpc%f(K2J`qp6IrbH`mHl
+5fa-2&i',`-I3hYchAIf23XE+fqa0T[r5HFB$h(iZEQj[%j1XXZ,arZhrhEr0j(d
+qqQkrrr)pfJhIXIMm+Ii%@p`C12UrXm20BqRrNGh0TIeSIJKYVl[EH9%f(JraAQe
+k'ek'efeek8bdrBR0eVqV"Rkk9V[qG$Z0EG8Fr)R)ZRm1Rm1P(`pM%ViFHhY,EE4
+GRh94Dr3fFAC`Uf`Y,'cXl'YqG0UZLHdULTINeh&`Iq8A)XmI&khmPM`jqfiH(jY
+eCM0"d)ic3A9[`XZCh2`STK@eb0'ABD3r(NLfdjhDraa,12%Y,$E3YR8mj`6XcDG
+*623265HQ65RHmHjPh26Al8FR5N9-r0K9SS9RG`rKR0V[fY-h'ZbX(k8A#Xm(&kd
+G8MflaCYEqj9(NAhTfqiLE$c(Zj'9rUmFkbFkhU9Rqb0L1(IJFHmX14YVB!IV3DR
+biH0BC23KC2F$p,fG[CA%5HZ-,jXfVrHTDea+DcmML9eRm%+afCYf*c@I4F5f*mD
+PV6&*j$elrTP[e%D+*UUI5NBQT)`p54KFfGm2+qMGfNHXMdeR@fG2F'frdT1KB3@
+p4T9m!YlBI0V[4Jp'#JNjr6Vp#+02NbdkT9fYf-j6r4e*Id,r8jdM&M6Dq(@h@bZ
+ir5iR"(md`mh&iQ6QC16PC!rf((M6HG)qK#e*HhrV&YEj'he!l[qe(H`p96F5qQp
+100LE$chrGe0eh-1Vef%rqqIapr`-,#`X1rm8I[qVq((p1JQd[a*aEcracpIRF6L
+HVa1)1,bVamMj@ZTCPIfABGrZk5!1eQiRKf-p&Y,+9(XVqkXlLVjdH4Vi@6q$rTd
+XR2k!#lr*caiRXVr[DHG-VHc68r*T[YAHjZ(NiQ,MBZ4k-M[)@ITJ+bISAi!mR$b
+FA+Y)ml0f2D*r`!AHeaj@CJCQ*`E$*mb&Nph3qM(XqJ!11)+h8VKF,lffl8r'+S"
+6bI,qI3B-+pcI,`mRbm3Id,&bXMdE5em5&QFV3aFc'aF`*mJQCNiHCNif9M@PTXT
+fECGX6kT"pc2!iq$#PCRPi'CjH*Nj@6`B@B&KQC2Gl$dE3+mJJ",52(ZlU9QF,KI
+""8TbGGRmG258Rl2LpMmhDDc@6Xljf4eNl1phFr+f'`QGMAGEhrbqel2V2Nl#$,q
+#$`f#dFcfXf&41GIei"5BIfrhFrr2krmhCqcf(mT)+'Fk[CFcqhX2U6ZUeGCXJ'H
+pqcY[)a0lp$'mMa[)h[!f'",[peqbL`r*a2)qKiq,Kr1hZqhZ``0lZpKMEhq6'rC
+fIMH6p$'mE"`plKI6aYldp9rje@UrEqlp`!!!!)#)Q*QCLDQ)QBCfGhKiGhDBKfC
+hGhL)KTQ'CAGRChH'LCGQL)QBQBHBTfD+UUZVUCURGTQUZVbjQBGRLVQVZXQSL(D
+*ZkbX#TUBKjbVc,blUTL(Ll`,b`ZkZ(H+blZmZkPSKibXVFh,Z@GhH)L*LDUkR(H
+Gblh0cFZSKTUTUTQCQb!!!54(@(H*!*L)#J!+#!L3!)S+J!N!!!!(S!!!LJQB!!P
+!)c9@CiCRCQGiPiL!Q)HB"i#!#3#CH)LBH3#3!!U+Q)QAB*H)#@KhH!LCKQUCU*N
+!!!!*!!N!!!!!!!#BN!!*J!UJpcp+9i@qiRQr&mAD5HqNl6cISm6Kr4iQdqG5mhb
+pTKlhKB@qi2MF*`9NApr*llF`GpZEh!Nb*-[9HTUY9rZh2dkl9GVFrbS%UlA&eXI
+M@(H9h[3[*Liej2hNfM"3QdI!P5G59"H`H"4N9fmYSXL,EANlD9E['lMjGc$em6h
+V@jqjIkPrUAmQpRfpDIhd(cY1M$aSe#,M5D%fE2Nm6KeGR44AhBPrSj'&2aCY'03
+NqVJHeJhm+A$ZV#hZ[MeC(NTF`K'rm[bE$Gc*QT,`TFE`VIIA0lHbVQpV8I'JSd+
+%M[lQ#(EcDq0A4E$HAP@,j6'#*ELC%LIL6FH0LaXH02Pq01bq6AFH,McC[PI&UEM
+jhDrifH[VlM9fZIKaBh4JcC2V60h1Ureqd!fL!XE5l1PZSdI@4DX@2Ek&A[rRT+E
+#cq#&b)Y+maYj2ScU%qM`C8'T+[,fpl0('hQ0HFL(q2G9Tq04RBdhl2T9GcqSepI
+"Dll9pj-e*QT-Nq()Kh@mPAYk'QQ!irj%1KK3k%L(5YT02FqPXrS*UGcDqrD8U12
+kplA4Za"XiFUpdlfYj%D4hmQ[R9EMp9%AH@qVY0$1d1i[1A*qaAhABRHYJkQ$U!*
+@aTZ4'T4[6p5VHrk%lhL[EhHhN!$X))Gj*Vi*0KEbE54Dm$pQ6IeS2U4TdL#GE3B
+eY0b2"UfRkhDf06ZZjLHrDb[cEXG0lU)%[G56AfeMH9GhjH[X2hBX5Zpq&Em,bF@
+,&NbC1&*K8)9#4"j0([iGpI5Uf4NH4'b-LMN8I0[Vk#Z[T9i!J%5iYIGl@#VhrQD
+hiH[XDj)(HBX@f4m,kKhm19+V8I)M8D0$c3Z[EbZ[3d$1#VFHDj0ca-U6MBdfP"5
+Ndqa,mblN5iYp*[SdUiZ,U0YI$U51'LL(Crj`Z&1im@ZLqE$[EIX38IFPEZjPAdU
+k!5l[CGlGb)HeNi0E3e*P[9rGUlI(C0pCPp@42N9dhH591"4lq9)e*8QpJl0'E[*
+Yjj-2eF$8`2#jP@,5lIeBeGX'2c#Lef&E$mK3F+$'K3IMh@TZY6GERBELVEj(Er@
+rYKGhAI"#qM5a*q,2S5FDGphpck[RFr0LdSe+,Nff60Rr4qE9LF6Y[LrIl[ZV2i0
+PNqM'qT!!EI6SI8JqS5Pi8%LIE%SqfqMVIXal'%+bmT5)a'#pNGLG1me5ShYDK)N
+J(3YTdLZY[*JfPADrVU!rH)YaVD-03!k(YbYR1ap1$(RBXr(RBmr&aX6*NFhjY@A
+jha1ApHeXN@C-qfM83V3*4SHhHhfcR83bSimkMLck@22SJ(LdD'*Ni8@6rXhRcIC
+lrkAFIV@%1%3ElMZpGq$N5rDYH*DbHleAFDV@FE@FE9e09l1UiHUiFDA$rHKICe[
+q[@brTDUV(rBlMTD0IX,03'YSe$X3lhJcThc,fme,fmV820Z*8&rjpE1+4Tf,MFH
+$QqT9ZIf9(h["48F6if&i9GL8-6Mjr(bGEMiR(R6jYeKEh#Sr&pQcf#S#eT!!#YE
+R`[#p(dHlYE@ePbmI(ak9,G9ED%T'0ICkZ&b12*r0AprL6[GhGqcb#9TXfK'0R6M
+91"XP)jC'$R3mZ#G9ZYa@b2GPi&pJhfi[V@qZr1LDc&ckdqV@aUYDMRC'A6qjIhp
+DRP4CqA&RCGY0cVfV-iXc*dSdHGAG1,%b1V8[E2ZUArR[GN0$2Lq2FiAhmAQ4Z2N
+@q25RFHK3aU(d+9'V+h9E)p@qhm+qm1(Fr)X)f*Eh8k0[UYlD)iXPICmUP*J`Tmq
+ZaC[NmH0j12*b12'b-D$pMaS-MeC@rKAYYG`lH4G@%1hYlV`Yp8Q@U[deeRm&KTE
+24L51I#bj2+S8X5ZSiPGMBNEJhN1#mKhPD41R@dmUCS3TrNcmQIc*2,Vr9L50'*i
+05KhAFeB0PY&$rLBF@JBZk0G"Qid16RC@MJ60h!!fkpMqk-m!eS-E5'9TEDC"c0+
+rQ6HC9M4EQ2V,D#ERaDqhM`H9T92"eb`-XN9mq0MG(*cFM0bFcVDNc)dY,ldE)rP
+Jb-fL"(hSe'4NC&Y6bEDRPCA@MdqY(QbG+6%RaHT-iG6HkrZIRrY@9QN(Mc0C[ZM
+ml0mV1TqVIi1R,`EqqkIpdDRpk#RRC!%HYI3@8X!j1b[iZb`-#Cc1[-jR8M4k0Ye
+BXHRkp6jrGphDH*FA+4(SIANd)e+VFb*HiZSYhJi&rYm#2PjAVkH"-bXVUDZddm!
+6IKEUYP8mh,TqVJAb#[[4X[)N8mUREC@9bVDRPjH9Pq[Ic1CPpIE4jmQ6MG16'[)
+q0&QcHY[[(p+TrSlcZq$kPaG*9IVMcR5IMp'M&qGdFD0j@Gc-V1bXV0bmVeF#@*E
++id,eJ*[lrGAm[G#f5T3MJAd'b!Z4bXX@'AbJ%&Ml(Cbq[J4mD6*Rp9+kP&QbH[[
+[(p5Ti'&hAYIbE1cLI$Dp6XpHYkrYpD&-T3qVA6-@$U3m2Jf%b44d,QCEC'If+G@
+V9f@kXm(EB0TJGM1j1II4iG'V1qUH9@Eh8k*%XlAi,6KefPa-hdp-9fEqM!hpr[m
+$![m'qi(iEr"`-#YcI4Jjq4ckHEPFh+p2+j($KqP8QcP2ADGllYVRr1Y0l'fffK5
+m(`jQXb-q9-Nd0+``m+Kdkr$a0jkqRKrD[1[TiH&`Y(Bc*'4SE+CUmcS9GV(M6qT
+jH`UhZmeeIq[Xl9LpeGIa2ai'kVCZAd[d6,rGH0,QH0G62$Q5`%[pe[peIlV!`F(
+!!HAJD[F9,lHr%kr$YE3122rCm6!hAIEEG@GDVCbV'cP42!P4*dr5rNhF',SbYMX
+TN!#qh-eB"jI4bmc,j[PqG8llII%amkd8,r2r9hq"JppYX'cVG$,aF6,aG#YLk0l
+(`0$8P4)f,SkFcl8(ViIbmqT0m,AI0c0Sq)8IE`qErcVp$HDQ('mfC$TeErFH*YU
+ke[B)PMRe,[`e,2XaEI6fr0p22e-#ChX'ARNfFGJ5k#'rm6-rRU@ZrlIEi'`VVAi
+E6kI0cp3''!V3Va2jkPciQYqG4XDq*leTr[UiHlJdG3U,B#mUKP819MFZMbk(3Jc
+m2B92$mAABIbYTY%Xre1EdXkV(Kp$4`BNlPk@"%SFRUAd5RLpD9%bTrVhNc+YSI@
+N`jQ4#RGAHc-M)kGDRdkcF$fERq,[rZrZ9,RJI%lQaXl!4IqRTD@T-mD"J,TDH$B
+i&L!PcIh8Z9I6ZRZDRPBIGr*rUZ,J+ITCre[(Vmq&-lA3l%2S3p#&Jedb&'jd23l
+%EPaY#Z[iFcC`jF1BF$eI-fGKHembfSB9$3X),'C#Sb+'Kf+0Y4d,'4XCN!#b)9(
+3f2K&m+RRh8ZCV+A)rLQq,`kNhaR*$r1reCZE9m@2hYY$jHIT`jF5fRBqIf+',S@
+0c%YU1*RpM)`Y$X8j'IXT-6[VE,KCqRDc+kV(eP@drGY+NlJklHH$Y,-[-eI2R8+
+XX`PEUqQDbMRhXbh[0#G-[1cKhQRAkASapjXm1mYp'$$Ylc2hX`Sf[[&[m$"'E3d
+[2e96Er&8j6*N)pINCf8BDp-SPbd#&*14rhcf6&DNcdqRrCY+Rb-4LdZ(CDB2K2`
+Y0#p[Gl+[,+qJX+krNf%,"N@'(fXl&rLaG+iMcF65[)rKp6crRGDrUB%rZ[irqhH
+fF3C%5hSe6C5[m$6[r%Pq*Ii-[G5TPRS5SmDPReXMqk#RQmMeCHpX*HmX0r1KImT
+X6NEQT,S,FTXHpq#erkBA-a)[*j((jR(c1,YlRXp#PeDh9mI`p$pqlkIMqE-iYcf
++YafHMMCP,RF6Nj-@IbIMIc91qi5`MfGVqLdQCGpI5EXfrVqZfYrA@GrAE,!KGM,
+jHF3mC%&8SBGT8h(aP,jXSRZ@PT[pjQj(4p'0d24J!0J0'k(fbT!!jI4j1IFaj'*
+e2(h2i*RafiSIFY2pe1CAd0$BeXqbV,%9@jh2j0@rLDcMjpE(C9h%R6G+mL8*(9N
+a-L&e[(j(VeZ[fHTq#PmM[2Hm[DfiJ2pR0bI&`EcGB0aJq,Bi2LE(!KB!#ApPIeb
+"*GRI3d#AeT+Vd#5V@pX%#AX6@B9(%UhPMH4)FM)Njm'aJL4VDRED-LlNa))@9#d
+[%N40jcHRJiG$0kQiQBh4kX6Y0+TiIb@c`I$DIXrUFrdmr"Mfr*kFZ23ir8hd5RL
+H[H41EEIKN40,mGEmH(R`r`edcRARVf%cMdHVG6-@RdpPKb-h3*jqPcqPrUrCq,q
+#AqNNAD@[jl6rMa*PI4cl[$eHAd-h-jr,)H3q2SEjBVEf*`P$DRAGEarZ62jB1[U
+6-[UrfE#TJI+@4AC%lIer$hm[![pY[l6!Xm#c`GPZV+CPGDC6kdcl#"DI*p@rG"R
+"Zr%fZ",[r$dZ08MDTB0%HqImV`m$!llEB&RTi0R-p'!b!-"H4TIfkUT[0@ZAbd2
+@PeBQGerEpH&-imEV9f(LcZRB6*Y$5XF1fiQIf-UVClUdm6Eq*%eR*cjF5-akiR6
+[)p$#kN%6LGMY108mAY(P8@mU&kq4bEcX6Xhl'#`+GU(f9*lTfU6[GCh81K%XMc+
+G2XpDYeIEkRBKp2X4Y+(-m#[QGrB60RBm$Bm#b`GPJEA!XlrXC[f,@qh%V"RIYHT
+8MGUZ-GEa[&kf0dpMTa-AYr9LDZVm'il&ABCB(Br6ZIJrEUA2E1E2RRreH)mGcjd
+"`(Vr6rMfr$UH"fkSDL)TrF`kqRS5jNMdp#cVD&RK`Xh2Y*Rq8c5r&@r&(rmILMj
+qIDa,ERD0R%NF[5f85Eap+lLA(RrYq[`kRIG`SVP&GV[1ImMcTId+lH6Yl4JSj-E
+*bB[*r4E4rU@r@dhK+PKc0G8QkeRSrYIGY2hpIEpA6QI*cj%R!J[*9lHAXUpJhXU
+#9+i0I4r8r0+`Ym"Pl1"B'Vb!c[c,,TkFcLD&AdUQllPLfYIFY22epjeY2"Phf&+
+PE`+ke#Kj%&#JFmP+J!Fl*S6FU#GP33CN%DV)m[I#aj'M9U92$q)cJD1Dr2mrH8-
+qrfq$Im#q`pCjZ(AkHmd1$HD'm`ih#cpp-Km@CV19RFc0c-bVYGVAl@`VkqlYkq`
+Zl#[X,U`X2TI4mld21rAUbGbkCkE6QjNRP6k@0M8XE)RC%fR"6JbGh"6li!ie2`,
+km[VLkZC9eFAF'hm5V%N-jRMSaeHVd1MRI`C%Eld(hS%#IHJjrkfjU6*,11f*lpT
+cHM0j0,(bFHRq@(BEXA[J5-+KK5+&('d)mA3MefK%Lk%54cX6PiR1`XcI6jX[%q4
+LC($UAd$L!rJc*r(TBr+a1CL5-E6`QRP(2Q3riG#C`BqlJR$R`X[#bX6PBp,Nc[Z
+qT8`,aKeEr$DD%H$6cjNA3VD%H-!HKfG$Xk%H4SaYY'`+qrX*G[,Z,kjP8Efaq0X
+[eUaNmKk0e8[,eR1D,I*TI@qYrYp@*idM5Kq,#MEDjfZaZl+2`CNR4V8+G$*S8m6
+QBZ9Mj2(TFZGrdrQU5j6NJI5c-,*aD9#M3aXq2$!22Nq&)MA1qZ,khm+hdjF&h!!
+YE)R855@IbC[2p5TIAcB8rSY-+0Mb,(%m2%[*1&0aBdR*KB@CK%9-,RD)pBrI44r
+0JEhdE2VD'iUbTENBqIdF,Pif6Mm@llkiZb@,HE@EY[,qAEH*'m1aheeHhGjTlD0
+fHC0j@-T"j[5p5T,[hPHaS8Tj)4@PaK[hdkq[Hcj10*VZ4'cjPF!HIFeTq2MFHEp
+hqDTI@qZmDp+,[IYG,amE#dC85(MjqeYEqe2k&h8Z*hNcdBh6rXmC8@q&brdZA0h
+[(a2N6X5#Ab2SmDTmZj9r+efI[41EeiffZlMCAeeC5VlCE'kfYM+Pl'9GQAQQCHB
+@A$bBATb-@4PB@*L8m,#aD8+4LBp#0LFHIcUl%i1k[BHR-aq$-a6$j-NFV3Y0a(e
+Q4dr2f&@2i#JThIHrRLF6*QiQ2`E+,XVDcYYPiPYI5*8Qihr(bHe`-(Xi9+4kIE9
+h2p2-rQUapfd`q#[c29m6FiQrVV[X5Fh,j[SFMdjp[3Kj0GbklNeh,fHeKf9IXE'
+[Zr#UI-LGhXqSHIEiE64kh8KEqCL4XcTef$%qC$`BQ&"d0(X6ZKS@&p%-q29!I&S
+ir8XC8Iar(aD)k,k*K8mI5f0pB@PNJ6G@K[XhE!Bc9@H"YEqrhh)kI$Ur+lh[1Mp
+EDfrHrSYHVUp(`Dr+qMP8q4QC(Tml)j[1SmrRF,0k'mcZK1k@2KAR5aq4RBr)dFI
+NG,'j(rILiGpCHf`5a,c1cr!mAJ9rLlUa`1"BlraEUrm6Dhfrm5peFcjYR9qAXf5
+IE6hSQVcpAh'*Sd,E1bZMdFc4j@IAC1I&b1K"3k%kId+("`E'$"f-'"C3AqbNhqb
+JPfF&pD39XA0RBR4SB@G3ND&+fd-Q&SC@KQG(1jR3M8-rj'VeHVUqP%YP@hhAHqr
+%bI4YmMLq&TblZYk-ANrEf[BkGh[[$Zr5Y0ddJq'[bIXH&-mDfqe&p'+GAmEkP[j
+[KhG6`)ba`plFHqETP)!fJh6dlU2mbkfhiF2rjYN%ar)Ld[l2Dr$c(8E3V2TG@bL
+I&UHEF*!!9VEHlhY24f*VRaX,Sidr+SiN1pTBXk64aH9NBZ66aD3"j@,MCH,2cF6
+'cF5I9Yl#2A5$)hFc*10ECpcEa1dRN!#M%c-E&jMXDFADbV(EAYMYlf`MpTK6mq0
+Ba*h$pQ&G+#AEklh,@bVHYfZ`bGKb0T9lklA80X0YlhHk[Y0$2!63r((MpRmFIXk
+2iimcXrMQDNIfYcX2DfN,B3J%VZar09llDY-G9h[Ul#ZB,3[DfQ`pVGc)pC'3!'i
+I4qcSD'JEFZKUp98ZpXbVUZr4h[-cp2DfpK&R'Q#,IB@$`2&NH&*YVf#(0Z+rDkF
+HZp5T%fk[C@9RlYMS42Y5HYU4r4LqT'dbYU2k-ReiQ`pRBEK3"lEAI"V0PrI`q40
+L`Y9l2GGm`6lAhpC"lp5T+lp+cBlAr2[IAfI@lrUakA9l29l+"1V(iXILS%H!QkL
+2@LHPaS@!jC42qC[Br-i9j2q,9XX&Rq3(e&a[0hfdqEFhZqPpMLl(BpM(ie6B6'6
+Yklhqm`qEq(Ac1Per"UF,`@F0F4F0FfP9fpT%KFR4f-6#aH*MiQ0KBmLKLiXLG6N
+@dr+N@dkRKDF+GP6G1GPB8*!!M2Ti9Y3mQ4)SbBXM#iR#a2aGMm8H0NqK9rGUA(k
+DBX,Dr$h[r$pcq@,RkNI[C,!9e#XrXk(ZHT8Z2(D8DX+0$6HK0U4pRY[Fp6fBIc8
+8GaV[cf[El$#l6@l$`HG@e10rMVkj4ilE@qhDri5p6@i[Xl#'K$@khXfZXlMZl@A
+mfTa[mHmVd*r%lEmZbUI*Sm2Kkh9Ii`V"JPh(Yf['qECI%lI1fG1TeZjX8+Dl9rQ
+XURXpjXGI`2caYEh(rZ*ZT[(iq6UZ4p+VX,*I2hiQYprr2JhhKbj8U6N9GIY&hLG
+ef[`Gj6SBe(MHchRN*"GcfrjEAY0CfrhlRZqepRiRc%mqelAmYVj[`qcAqHa3khm
+YVVT(r@AUDlFrIXX,@l6fHmqSKIApVqDdehFrNp,p'XeAXkrLXEhDqhDi[pI`q"f
+p6Ie'CX,ViER5djQEl%ISIKMp$@Ij4rZ62YiI(Kp@fQBmEU3jQ,HDABSD0M-LRpZ
+c0RC60IVpAPG!VKjfEpbe14HNCh1ePr@UF$S-j2"'IKMj[AQCCeTL4lA`)rUc2ZB
+I*KpDf1+lU`jQ2HG2X(&C-Nd64(hpP-LDq%Z,2EEUd`HaRF[2PaiH49hReHA8i(4
+FEIVa-celD25NG5iL6FAYrmhbh[&cNMl@iq'hkPc%hZ&T9rMi@0h(h)rV629`qA$
+pHfQFQ0eSFcMhR8l&$Tf-bE4dYM-m#bQ4pIEC@ICc1dbkYTZZaRFl2[ijm+YlpAQ
+92%k6)@A2`h(6Yir#Yp+$$QcpErNrq&@(rdC#Ulq'kkZ(am,UGM&kGK%aF,VH$M[
+R6*8qCppr-F6haa91"reCPd2Hbr@SkRl'(RIK@a,mr5U6I`-d`AA`A1KTc-lm-I2
+1@EYSl[TVhRrdiKHZl6IpYKZk(h[rCa$p@*dH[E4mQ4eEL*2aGEilZL*[rfa%A2`
+A'Lm0L,ZIJGd,GIpfDRLJ6q@0Sc*1P%Qk@`JrU`hfe6DNb[rMiG6DrfSUV`UkFHG
+Sc)%A4m6@HadRA9Qd+i(p06Drh1*E2L5Fqfh%DdZ0PFl$icqNaFHXLb'AkHC0jY[
+PAR+Rp[l(22cjhd$!9S9i[p&@qU[AZEhR8m1YT8p'Q!Q9dMkVCfAQjZ@!p2e+kT8
+`mpR0&FI"Ep1jLI4`ZVAq2MihFp9qp01(S-hFl[hENkc(-5ImqPHc0BID2+cXLV+
+Q3k'K1`lH$4i0[Sq0EBIKkHPKHhScF1!k2-1[S&m6@F60bX[0TeEfCi9@T`G&a)H
+[(brAQCAVc19eir1eR9IY*I&dR%Pdhfa02T*iI6BNlRhEI3ZBPaKD&IipYMG[rJq
+NKe'*#kpficlH2[&Aj*Rkhjlp*#Vm[V2jPfHfADT+pGQZDlp`SS@$L*QHaX0rcr6
+m@qh9hTlUbe!$B$DHkf9ERIF`,ADRTBdE#*j@M8[qZiFp11hibj2VaqAf[r0r[CC
+8`2BF20#*c1YE4mD4dlL**aHire[JpPIKBHhAZA'C0)laVc3Z0Tk6iH@pr%hIQr2
+Fp4iiTl2rK1+jDlN+ch"FXpYmA5[BjCl1LC&YeT%Id1[@09TUbQI6ckQhr[@R,BV
+lik'(jN(8rVPH*IB&pidZA`FMN8q*PC'9NCI#rTcjJ0BHhU9+2ii@iq9(fl,FrZU
+hAP-Yi9[4EjMUhjA!Bh3TG52aCP$Uq2HkAepESI[I[hGAkraY%Z-SGAXp4A(a1dq
+CZ,MF"CYlVEl(El(Il(If8@iZiYaYE$j9KqR8RIl@lkhjlMScHR0`jejTA'drHIp
+fNqT"l,0#-6hVAc)fCJaFfdNjX6T4FDmRlbE4JS6D2J5T1T+J[B2!Sb+lH@d@4&Y
+VbGY+Ylri4YX!feIDD1GRCh4299V2ELdVc'hKi2(K&`C8'T+[,f#&fD-L,[,D5('
+mREQVHDEHRrhV6RD'CAFU4NiQ0LpV`RZVq0*e'CJ,2hYPNi[PB@,[6S(QhFE`VII
+A0lHbVQpV8I'2iM3NGrF`3lHEAaUk,BEbmiFRfQ13!&C5Qm5hShQ02r(0ZSfqYpl
+FhPlHh0j@SlXm5U%MCh-&GEcBBDeqmJUhRria`plld6dqAKIBXGMB@9ICq$mHEFa
+YlElbjJ[EbjJV8HqJ(A"qD#&EcDi0iHmNe,hrbqIfTGIi-riSmFI3Ti@0Lce%6eX
+(fYdIlVAh9MEhIbUh5dG(0cI1ieAEIipaj(P`pH5CH4'cFcSG(SDbmb*%r%QimE&
+MBmDI,mDGPmQZimA(QcI+q,9frrkLeAPG$1cFh0c1MRkc5bT&,%aMrhTf21Rr*mb
+GRFQ6ajZ2M6I3iG@2rkBQb02,c19A8T'0L6FA@D6e6hrma2"KM6I*Yk&j2Rp[[(p
+TkT&rpXpLjdplZ04aXHPMrhhPG&l&j@[Ec6[+hM4T(BN`jY@irrd5km*Fc,bMp%m
+cRDb$NaH,$[Ha"PrDMIE[p1#aV@h)iIUA2raRZ41crMmUPA6j%h%LiZPI9eaf)2!
+Kbll6[Uhe)dMJbE(HeEMr*L4#QE0hP["H5CrE6RSNDN[mME&2IYI*`[fSA([FIbF
+A%Lp#0bjZMUAFqjYq&G6TFQrNlE`)Im1RP`qC'bSh+Qj-qP5RICie@Af&q'BGRlq
+bjQ,k'&aplamEYYj[-H,E5F56#RB8&$`)FUqV8I-M8FLKaC8%1p[)ClD,k,BAGjk
+RIpPjdkk@9*aXDE5JT5DIBPqCGb*F@qNhdD9FA&e'f[KeC&CjdipVfZA*TBdqP1T
+6DIIbj'R,Nbiep"I@mUjZ,Z0YYr9h2Y[5QhbAXTqrr+qp02E9qE*bA6A9i%Z5Dk*
+GZVNbj(DaLj([rc2[60fr0HcAU62cXl3,2i,$5fHM%NFq&PbH93TBPG4a+l'a)h"
+[)F&j$[+dLG1YTp#&3S3TrNcmQIc*2,Vr9L50'*i2UARk&*`TFr4MFr"QrGY*rhB
+RYdT%DKhj@Vf*dlcEfpe,dldC%N!k&Y1N9eYj-'dp+9lU0cjEf[m1fSFh!RFh!Qr
+`EE&kRK@pGH`GL#KhpIHAeDKjN!"3mfpJVlJ!j0K"#Ll'G"9PHmaB%aHIUkl3VXb
+4c-6*aHejVr&P9JppLb$RP6I6YkGjNcqiYk@&'0KQpNKYaEf9UAXS0TS"d,DJ'h%
+Jh06GI"VIXal'Z,&Y'1Ga--lL6kIDbmHKepLiP`B2Rpr-Kj%qR1iq0bi1P8UB(`T
+Dl'ie9VpRUeZTU,H6Nq2V)8hTBfENrE[pV@bY2)bUG1Q!Q9NjG,,K6XfiUSSmR4r
+Ne96JIjU9ZbZ0ADk(P`6UYeZ+f4lX[!,CGaI@YpGqG%eQ,ReTp@YM9De(1b-ZRpb
+r[ke2+LcmZ,1blDERAY@CaCQ6T4SmkZkF@*NG@T,rSC!!,Yh@)2E[c!HVCG9E62F
+ehjklMiq2MRdVSq4'iYhCGRl&K9fAZ)ElUZpkZqCClEXrFfYr,Zq2NkfcUfNA@i0
+hBDrAISYC-rGfpjq@afH&Li@+J6#aILrdGc(lEqR)lciQXq$ZG$fBRbd9GhV[bf[
+EklD,3%![DkhDH$cU2q(VIEYCIi1jqQbH,9qrhA6rSlRr6X2dp9YVM9qphAVrNlc
+k(Nq9jR%qKmlk(P8YT`X2KErmPK4mhbISHCmr)SrUH9jIPE6KH9mRDF6b[TF6mQZ
+qGj[QF6jf,4mV'rBiRPHhU[r@UeAj3!!!!)#)L)L*LTQDQBGfGhGiL(ChGQGhH(G
+iKSQ'GfGiH)L'U*GhChH)H(@CQ(GiLCQCPkLiGhLDQEQSQDH(H+UVZkZDZ(GjQkc
+,ZTQTKhQVUm!+QTQ(HDZVS!UDQCL*VDb`#kTjL(QDLjV*UQGhH)LCQCUCQfLTV,b
+lb,USPiUlcDZBL#!!!M*'0QH!"h!!F)H*F(Q)#C!!H!J!"`N*LCLC!!L3!*!!"cX
+M49C@CTK@CjKjL*H(#*KfP`J(C`"hQBN*N!!*!*N)J)N(KjJ(L!!*#A!!J!QBGJ#
+)GfH*#*L!!!!!N!!*rjlZ[YVA#m6Z0h59QaV+6a1*KI3iQ&5Gr`r%i9*"DAGMDp[
+fefSV(fQdV0MXUhBl+[fXH4(V0&jZLd8'dr4rRSY0rA3S#C8Lal(4D5,4dR@Smh9
+DUC*rhTrHQ6F(S4*AY6*k$`iQ,Rp,*cXh0Q8-(C4-cG`j'0QlQme&[pI4FcCfABE
+hZU6@8I9SZGkQ0Nj1,jq&bI&PHTImR#mr#bFA(qhVpeZVIFlZfhHqZ,ApGa[ELeh
+HqhGYEllZjA2rLbV'cl$b0Y%eN6U8IVi'0Hf@$je,IHV#ZXb9*VC'I5bEQQj[D6[
+1QS2SrkHh"pbmi&0cS8RJ5-qGNf0pQd%R4j(T5kq6DrdFb4+l'`rC5`dAfChGaEl
+ZifX'PajHjkHCE36[L38hKiZEmfRJT[%JR-+AZ30F[*j(RirmrmI-X,6VqKpLMeS
+0rGiR*mQ$5BZC336ILdfE2fdr2c,D(6AZEl)"1KE3pM6Cp&6`4r%JLhqC8GlFqp5
+FbVYH[`2BSY@Kh[H6iN'N[mbHJQqKGjY&A@d26AX[f3#!il,#jr#M9H9ZEEXI)fe
+04"dIjX$,[E,NHG5idZDX*00KCeIdqE6`AYhcjbm`*AY3[fARVHcH@NVQbVb9[i*
+AL35-,0h-QQ"CYYV#f&V6`pGk2Y8'j5$k1UcXr[HlrfhG[Sqmk1lhAHhHG,jRClV
+6rQKkVXU2V8@CDqCqVGAqCP80[UE$iTqET1V43DZmSZIDcmUC[C9VAcpV2f&0YZl
+jREl[XF$f+@L#-c2ilAeXA-Ui*VNbk'iKkEdXbhKdhPCfjKbX$QfX1rZHG+JZklQ
+f8h"+L5-kaR)+krcED#QaFcTim[Tj1AbIbh&[FGei9pQA(-SVMVp&T+'I#5cIAj[
+4PFlS3D1ljAllLHhG4EehGEcfp9c,5$X[[rJUkF%2fqmY1Ei-'pp#*#cTUhk9,Q6
+G[-KEH&Ec*cDcP[-RE#GYjNpAce[-Rj%rEp,%LB[S4-I(aZ0Nq0KrChGcHDVQ@[E
++mIqhe1plV[YTdTceI1T[5r$#YpCdTAPHGGmAm-pEDcTBA!ml&hRiGA+eR5bBrRF
+Q*q'KXGCdTIH3!1Fr$$TFE0UEbElheHibYYfk2%S4"[m3G05iQANiqALCQcJR0r"
+)VXkjkI0XIp,cHcR0X[hjeedmkdJR-(-X,MG@p`)HbZGiA-TZi5F&*KZGjq,Mj',
+NiA*m1lp5lj0rNi@4Li[fpErpJqMQjRSj9h[#TDTa8Zi[+kQ+Pk8&h6jee")PApr
+Gf0M+`Bpc@iX5jTXHDlR,hZE+YYErC$Xm$2Y)eeCmhm(GmrkrMqjCmbdZH`r044+
+)5[jqIh+3!%0e"fG[FG#hld39'jm0bl0pQl[XqfNQFMBJKQEQmdhMB&hir!Zr,i&
+VMlb(2@F2e0PP@&eUHKpM9cBH*[YjFh-@aakc)l6B40[%Q5G(4`8fCp6qrmIrRm'
+Sc)1dJTZKQAQNQqA#p1QieC5h0MhrFC9*GT6l3Ki-20YVDbUYe&k@6jdhNj(3j2T
+G([S2Zjh0lMQ8fp-+`dfCZlAe-@AY1MKCQYd*F25qV,fd1PmV2fFDkhRYq&c0V[Q
+Qla4HaMF+R[mqT[+clN%ImP0Q3qcZ)Flk@Edr1cZkMG[ZBIKdh!pVTf2Yh-Em0P$
+r46qr-f@UKdR-lcZG9JHafQ`"lkhVihKH&[S00,fF'Q&`l6bpA-Z1qeXbhQlHKlU
+Fh-EXpc1EQ(1m#r`-hTm#ri'GD8&T$lH935SGh@H0(jdbbePP$mLRpEfi*ch0$-N
+qRR4[9cSHLbZflSXd+'+([IRICmrN5lL(6)aXVLmkeKm6HHe+KqA%pfbKrT[2er"
+"c[HQS25TrETEcLhI2RVbj`ZEUi)rRjQ[JQJDcZ4QERjprq2+jQelY%M5")qaNF+
+RiQG9`4r8cD'mdHC"Smc[BFMMjhG`plJFqf#FpZdKqA(phH4XZDr9HGA*pqmr"Um
+U6hRb[c89$28I8SSI$lbjfpRX*826EMB5U'deZpeX(E`G["+clb9Rp22kITAIUfR
+UbZ9)PdX'Mh%'NTTFI[1"l@UPaZ"UG&T*qFR1V#X26[FHpaEl$a0(mbPjq6@iYeJ
+i0rJr0TX5d`V'F[l'PXU@*[EZNbSekNcXk1"#cc2jrQih0VHmMdeKEE2FeqdVp$)
+qEGC26fYGY+rFem5IfF@QUThI5k1qkkK`Cc9"3I1`EQkZkfrVH(Z0[m8'KSqcfX+
+`RDkT[mUV[f*,UdHC*RqErmfYeY+D*XpRDk'0[pV)q+hVY$)[XDqaF(#a,+&jqcb
+UAJSMjUFkd,[mDc[VlYl#XfPCYIUrJr*'Sj0,k9Ck9Pj9pFrClA+S1rdh3qaf@UT
+0&4qAakc$NAdLkZI$[[kr-cpTbFVCr1,X+2V6QGXlU,69XUPVT%ACerklDefGKAE
+5cfNA[HPc[MjX[kmrQ@A*LjRcC0C0jP,X+H`fRMj9&i#042)lV0rRm2'jeEhYC19
+FHHUZRJq4,X*(TrBbSAJkE!jRBpI4k+LVI$Tll5i0ViZG@qEPDhq0'-l'TdP&LH4
+6iQQZZjaHMr*(U1*%P8Y06hm[Cq&UF$f+!b(k2VY(ff0Sl2ZVV#`H(MB'4`14[1A
+BjeCR8ZG1jG,bl2N5XLk$bVr%`F6#`H*9e@9fAcd9hB"dPREH4m%MdCG*`[PlhZU
+LP$fl1diRdSYPC@@40Ad5qqjZGcBG(DE54kI(mfA3H'A"S4ehdSJ),hlPYBG&'pP
+dRL-Q)kd,k2,Xm6%hqeVG$Pd9hPp,EeZKNA@*L@IVr3bShd$#Q'KpmkEXdJS)0ip
+dNZpRNA@2GBerKAq$JcGPM9hSB1CrKPGTJDR!jP"1`qV#i1mieP&`F#E[m+qaV['
+ZXMYVX10ZmBbXm#&L@0,jpEcIrFR@bjhKkL9DcICSd&0VTUXhpR+P8r4X16,TF(8
+G[pfEq@*aDq*@A86$SS[P3Z6pV`I!b*V(rKfrPm1EQVQ*AGV,eQ&U,$iT[jG$eYE
+iF6mYASH0`[pE2d,2HA0M`iq,55k$L0AGiPYEH4RBQ*KFE#ipP#p6CmbPqLB#!Em
+["h0TYGG-fQVd-$mP,[*HK(c,'0fNH(fe,cYCc,6k5HTZL"0aXAKffjVV#UU,$D6
+qKJmA%`X$'h[!b0j&!*5lcN4l+ajFHcMjF5cLbimp&K`TUqQXfeJh&K*XX2Qkc9j
+9Cp0&G2cQLKD[FhH&MB14`qA`-b4$VBQI(MAI2NiA0[0j5jdj*QVUA8EHJfY6EEQ
+9ihQmcY2j#dBNlFfMkA1QDhTf1A(c+@()cFVArbXSikd+00l1YeGE39Y")Rj8rYp
+[F!$fFjB3Yc#X)ZdQpT&X)qEUZC3k*F&2Ylh([r6m5iRVMBed'Mk1pJhd[0rSp(Z
+0'NlF38ajF2F5D2[ZP1rSQlM-V[r8jFHP[IBRVMbZ*c+#i`2,pI@A'mp6,SG0bk'
+Gj9$6HV3ef93b[5pE[+'rmVmhG81,JIjEkKbGjqHlSF[FCd2Z-UedMRa8XpJPjhR
+6S*cd+E*r$Bm@hjZr(&TH9fiJNAHCE5B@,Piq6bm60P3Grk19@DAX+("T)BS#c)I
+qpEldbmp#*6He-R"NG[mqC33E'*NbpEhh5br5PpjdXcG4Th#PhIpN[kfXdhArIr!
+DlmlSHCUU2TICS*Rf[*eI!dp&(mc1pUFdki6G(dqpl[iD&TL3!0eU$NC'r9le0Qh
+0j@efG63@0TR8ej&ZmkG[)PrQcm(Pqf!1marENqRlX2d[GKa1,R6m1ai'I6`lQaj
+dk!AQeX1dMHPlfUbS[A&he*e+1ZpEZ[VEMl[R9dUdlQbYYaM8[P62aHjdE[h1&"A
+jADkP9MH5DMfZK"p20XE'hXl1fP5V5dY,2HfPcDfYMq[I@ZmYE@bhYTG!8P5VDcX
+lHaXB+RRp#$amh1lM+NI++S#$i8QepbCFGcEEqQ[lrjZ,GhH$Gh@,+PBdUcbC%MN
+5+fA@@8RBFhkrQ5#ZVAVc81*F2[Ff[N`XMNF[(bm,-Y,bGPCeRqbmVT'G+[*hIY1
+2hElEBE$DbG*am#piplJHGJ69lKm#*JFA!U[qfiqYKbkMC*ZV6G(eBIIj&RJhelK
+h@*mbYb+,,bCN,)TX@Ya,R$[Vl"XrZraC8h(3Tl1Lq5(`qAjpr5rSpcEEh0bV#X*
+p4!qipeJBQmb)r*QXZFrm6-H*jm[Iba8M*K!$cBd8!HE9cQ[KE#&3J2MjqUbUkYD
+VNRH2)iRDEQcfGjTjI63ffh#NCdQQcHRQA1Xp#TrYXYECDb9Ukq4EprP4T"hKk,V
+3jIajqKR3GT05CUPPp+Yp@cr,1l@HfR5&brkZVVpCA9GGcrfFZAk@9XUj94@FE[[
+#rPqYk'mciAGc90XpGAkZZeF(D$&0#qpr$qDXSDc@b0C88'cTYYh19YDp62br6hQ
+*JAf$Fi9RK9['Xmb#MNcPGIa,190F1Za1dlZ2qZhlH&N`XLYaJqM%[El$Xr8rLbU
+RCX2HT$QXr2k@G%PcI5P`U'(Z)FI1k@GdXlimf6&cHK*SVr0UjHfX'c`lh!iecal
+(PE',bU89ffR$YERjd6lAj[lm1[i(IfAM4H4%j[0QD26D24aH9(pAHHG`ld34fQd
+E3kXNAeeL"LFLMYbbrPd[M9Q"1@GM6F'4-%L&PM5-19JfH(`-2LhAhIk-VG8b(QU
+TqT%mQKm',0e%j16Nl1cG21cFp29mj[q"Am#bKEc#XF@2rCrErhrlIhH96H9@rFR
+2&TThCcZc"&14Ci&d+HTCUU[++*p$+lbS2b9Lp@NarHR)I(XIEU)ILe[!jqK[2Dd
+,(h+@(b*VraIqYMCQfNcA,Pd2IDfEffY(`dTYTV+HfePIXpCXkl@@dV@EQYeZkMd
+0[EcHe'2ID6PK&VkHZTj&6i1pPaGaehNEDGl)8MfYlGELJMl2bEqE`XM)b26r,X+
+(BI&UV[Dc1mVjG,maS5ceek&2NDIYYjqRB81[fZeYpVE41Ri(dZ,5m1YhRdHebZb
+e4Up&jHcC9a264UiKk5&M0p@HVe1LdXr1#lMiqE@qRGFE"m@c`Vl"`El%ZZjVH4G
+Bh$a-(kYKAf&TY+lpQdPE5ZV+fdV+f[V+bY`GlPEE@*5[$5ZcaZ(I@GE+iFAKb1*
+L9Q2LCQkqC'dZ4pI&Zj-LqcE#61BN[GA'khIGpj0@%@UK5UkRU2Thq9mc@T)95*9
+&jH4CAeEIBGC`lR'Qm5YimhL8[UBd,PrhI*YIUFqCbmcEbCccmcDa0I#USiVNTDU
+HNDkRU["[mUaS6-R3p@IcNRaqc%`E2Ki0caCZbiFh@i&,&`,+&J@[r%liQmlqa`C
+ZaiF@2KdXhJeNeKhA$`E2!U2+(SHKl,+hm2XX$f+US'@cr(r(H6Z2cC[GaZhKA%1
+2+j@EdT8Z(4cSbk6X(lCkfKh0rJFfIYSHm`Vh2pV2S,@0BiZ"RDZfKlM9MR0eN!"
+%`-R-RqPbFbIeX'Ni'A,U0IF8rH@pPNqh5CAcU,9@(l0M8a2NSraD1Q[2jE$GlRG
+3D6kZlNc9rbmbQlk6%P5j-5Z3!"*HeR)8%,cZ*QE@I[)A'iQCBE1mKJ+a1*QE6A6
+,b&jhN8mZ6BddZ6(VZAR6Pa*MlrGbBYrMjP9BA&[DHe,iAQjA!Sc[Zd[8T2GKcel
+b,k2kI(QXMPifCB4K[069G*QUfcPdYE"Sj90kYh5bjk2F6rNqPpEc[YFElAPIHrr
+DhqQKlH&`*GB15kYV*FLYK`VUD($p0iQCY0[YCUVem+[fe4`TVhI4K4"1[m[6a2N
+T)82aI+VIe`p,3airS`YZd&Tk&3aj2C@2c-D(J4r4l5P6"04MkVmVS91`m1b`rAr
+A8l#p`rYc@Gd12Kq[d+QVcSHVDM(KaF2PCA%TbC!!TTPFfSTBGPFh1C6eq[VpG0D
+k*89-h`kM3i[(`H,a[*X+#UX*rAe-pX0G2l#[RSdh[,h1TCq0+iI`9-Qj[BqG88m
+1,Hm#A8DkKefZSDL`eQZX+2MBR&`p&MFArQVX!DcdE5B&lQ9%l'Llbjck@IKhhDr
+$#eb1"e(CI*4i2lHYKDUae-6640&,U+P-B2BE(U421mVLiHQihNe2aq4&a2)Lq4b
+2-LihQ4I`eIamIc[5!cl949+8kd"qXUrMr$9c+VD6+VrEjP68f%bTq2bDQUeD$-Z
+NUcG+R1T%m@biGc[Ub45aDA`2`frMeN@XXkAJdqaYYG,QYHd`&kchp(T*Heq(9CX
+[iB@`D-rTQjRmVXGLC0Y2mQQK3iNHA9pS8j'kN64cAlY9XBdDC'Q)#+%0JUNeAQk
+VDNmR2NK3YEBbFE@f-IcCrE%6KY"1FeNj-XCNIF3S@9UT*C2XHTUSHCm(bj25r9U
+XUkl9IEMq,R9mQ*k[+c+VTFfIS0c1cp0VTbHU*q&29-r0p+kaV'D[FLjq+kb,Qpb
+0jdThD9de29-U&29%e)K6p0&TCfJY,ETI"'ZX$0fYKH9Ap(iqale'$kk0mN6,k2V
+FVmIBhM!rV419dI@brKKIa-H0e+28f@TXG65BIlHYp6iIDl1E4fqTe2r9(SAGpIA
+[$iF[93Q#Ar0([j&R)VUHRU2Dl1F36kr6r`SDL*68["YUEfS8kJPf)0jQXQU#EU+
+@QT[(PFcj8mC"0(e0CRI$06kBYrPDRTdRc+6cGP3GMTp0p5A08#C4Z`q9reeE2&a
+r-TF'TLHE,l+N4Pq[dr@QX1qZEUprSq(9I0+Ye(m+,XHZa)rMjA`kViHahjE[6p5
+LMrYprC5jcqGLprK4d9,G6Gl#ZU1SLcm,iHcm9"IXY0mN1KdhbGrZ+5`q'DqU4,6
+r*4E+2rRqhqRhk,CE,dGaP(lBDrV9Ih**`jM$E5I0Kd9,qQChh[a+EmmbFZ2-LAr
+jTP"FEr@A&aYrQ4-UiSSR+hG$+aZAZHqRVIq[9C@ip98&cG$hi-lhj2ar"'q28G,
+4pP5qr-[2d4+Eh"N[mL*ImiC,qheN%Q0XBQA,Q3jcdXlG5DEaTGrpkAP@2++#UqY
+9CNETrULa[6X[EU)h&iZTmTf3!*mcPP#92@eh)`1GI4Vf[jdrX[qlYqP-VYFXS'U
+ke6alhRbS0lDFf9"`leq'%h(V&"l$VDre[HRBIS4m$h*f(kfTp9f3!&[rAGli,lA
+`B2c(hleErDJHI*bIGJr*5qh*h1I$lA+PF`pUf[kYAp@6bIHNm[hSfEqUNm*lpX@
+9+rb9$jfKlN'0lJq-NEdp4qVrqlhFp1A8`6@,QDkC"%`X$!m@Q`-feME!!QaNB'E
+-JXCPhR6h6cDL#Ei2U4Z9P@[X&$eI9UZ9lX('LmqQMA0lRd'Ua(kC#dr1869G@T`
+lh1P36YTQ5S+bpe-Pq@4jQVrp(91)Zk(*jI,j8Z0T0,$R2"k1IpQ$9C9"l+MRh0V
+ZYVYYIVk5Y@`c@rS)f)TA2*idAKf9cHf2&d[XUFkhp+$hCe@LUBYk-`PT65V+pdd
+DGrMk1IpdIZlDbhRVINCZmcI'(GkikjFVHCKqMe6eGGNB'II4V+[cjrCH5lpZeYQ
+QmpX1T9q6*bre5Flp8DClp*mhKAmV0X0[ElUih-Q%2Rpdmkc[+lY),ZLmEQlb#ll
+4imaeYR+LXr3pf$)pf6b[HMFV8DKql$-VGCj4@[kP9,MCIZ4Bf(CFkSMEcLpGp&m
+)bejV5c%2dcVk0@9qG2l,kEq1Ih21+*UqT8mDpcj8&2D!AXVer@8i(Y1pIclerC@
+bpXc@E$UL9M2pq6d2IMI(m&*K1PR'9(pa622d2HJj([5Fhp8E0klK6R*m,ZS0,jR
+2JQ[bbG(,fm25qPQl5(Cm2Qed2l2Sj9ElT00Ie4#[2pf,'iePckL0`1,UHLqTY@H
+m6DVkSN-&iUZY"F'ZEejQ[SlRp4e@#P,ep#AFD%Z60jNDEkl[Z[b2Reh%bkZiXI8
+jG$Tr964l6qPPfq`Y2+pIZ4SkjQp'MVf,UKpDEpQaSILPrkh(lrcmVl(-UII6VdR
+NmVrAcqK"h[*ZmHraF,#iPrLq(Gq0qqfheVh0ThAXI&"Dqc3CAJI"0IQT+hAQe+A
+`CfRLl#RLdfVhHVXk[DeGCmI+ih+KFV%j9&5bak`U1$&cB-A-rRlRf-hqrr(@reC
+RrRm&A,iAIjJ&ZRl8&,lIE5B@!,GF1A%f&KX)qfUYY&h9AZU@,ADq,A8dpmqHi19
+ZIY&d*iCIDP3F'd%lH(Hr+q6lpIQpcH9Q6RDfmLHY,KcNX@LCe['V[+j[F`m,!jq
+pKiqmpZkKqT0qpB`qEm(qX(aHjQIBbV$i6Q-(50Z*-VQbEVQaVhR8REre9&9De0V
+B9-RYU@Ar,Cf&TXpRAfeG-h-MZC8eDbTZ4&V*hHf@9BIjUGrTNb-f6@jmDbck6H2
+8lfNaQF,U`m22JLaCG0VkLVS09F1Tj,VqJ6bKkZYZX$akc$Vq,JkIQ1ZYDABIV*c
+$kY$CAZ2+iPTK5Z0HkImEef)f(a%lLG@Ni1C1d23Rk'GKcZSDfQCmb6eck(HfrBr
+r-K9rqcf486IDefFQMCDe`XkA"1CNcEl2qNH1Zard1cJFq[D5Cc0NdZE'V-kNPH$
+)Vkq4SBP,M8[phm2GQCQKQlD&VjbURUkU[mVBrr&-IbbG0bf4SdcTETXIp5BMVki
+HCF4DZQUDMA8'UXA44Il%aKpDKV,fr'P19+[Eh66cQS[[6[rdqlNDmY$#a-6$ih'
+cT(c[pVVDqE2G&"MX3-IFX,D`fP994Y$[r-p5ZirQk[rG"RX+,43lR&[4X4LhXea
+HEAH"rYG@qUbYAqe"cXSHMSBYl)P6YT15UbpdY,irj-lCj'9BIZC+ReU6dXRHIDQ
+[[qG[H,ih!`+DA#%4*0b!2l0EI@F+cmEFEAI`ZCm6`f55iR52G11m6"`2ZeR(Vr1
+`G4G0pYH9VrMC&hV8IEYU',RjmL`X"rEGaYiraA(E`ZAZ0VA@&K)frcXVBD#PdXI
+P#PcT0N+$G2D[,E,X1QZN(M0dIqhFNp,U[hXMPeYEI,(,rKb6F[Arm-M,eU'jE4P
+rBmQ*XIrc[dh$TZT[rpI22IbErRbF(RaX2fU6ZV#4KI6k1PEH!196r`8Rc0$Q`@I
+0Nh[1MAZRb%m+*GKBE2GDkhTSQfZ[SC94rd5J2Fir1JXSZE64Y*HqVaG2G1"6,TI
+N*5(9AYlbCAPfQ2+p1pe$Kr1-VEp3l9DT)0Cm&ERLCZ0FkHUlQ4LhA(m@PmVlQce
+XbZKpR@`jbEcG#D(T*m5'2&L93fF1EMjd&*P9[92QI9[6r&@fcMde9@pjm8QlcVc
+Xrm*Hckcjr(hibep3N!$r*PH0DBXVMhZQpYl0G,SHHP0hAcRb6JcYk,Km2Ki0pIH
+*B$SPUNk+G9l9$rbH@S%"cTl3!SmR-26F92Z9jZ9&l$j@plV@`a6*q,Hj0c#V-6#
+PAh%PAZ,Hq(IBhfrmZMCihhpVh'93pLMdTm%[hFfZf!d%lV3`[-ZXhRHCRf&GMrB
+bYAmY4rqrPhA)ZmLrmc"a)2"k0RLGj9qM8pNR896)S1rjGT0fP$#iR$j(%`Z2LiZ
+0Li[QA@0PjrQHYY0TAC'0jZ96pQe+r"blQFZZ4a,r)3Ua[-[XE'l@%2r-5LA4a6h
+TpPeD1&I8pT4hh!McNHLTk#MXH,fp"18%j36R-q9'dqphhCpIT1Yer2PdII-,[qJ
+3%LkA&lD*aGj#XB31VZjVir-q9r-K&2D24GMlIh[PI8e@LdXEB!-c2hGPi0r`I$`
+["lr`H$`k5lJZIh6YpiPri2Kr1`El`1$`Z$5AI"lUN`Z$p2#rGf2Iq*iH&hr![Z$
+HrbBA"kHLred@LrH!!!!!J)LCH*UCQCUCKhGRH(H)GRKhKQL)L)L(L)GhGRKhH)D
+CThCRL(KhKDLRGRL*Q*QAUCKhHCQUZkL*ThGjUV[-UTQRKhQEUmhDLTKhH+Umb`Z
+lQ*KkQmbp#UUTL)UY[0$+UfQ(LDUEV,UCCRCiGiL*QCQVH*LmcEhFbkLBLDUUUBL
+D)!!#)e8fGhH(L3GjD*!!Q(J!!!"iQ!!*!!N!!!LC#3!'KN!M4'CQCQCBCRPjF)L
+*Q!H)KhL*F*N!GjQBF!!*N!#3!!P`L3HAL)N)F!H3!*!!!!#3!!!*!!L3!!L*GRL
+CLBC`!!!*!!!*rC`+rGER$mVjPa89QcV+Mb[,`rSqAKe(NB2PF+SJYEZch1pqAGU
++eGMBeQcfYEXpV'XUbXUpYS[4d@LrcfrFphSTlrjTL#5l@cl[4GTUUHSq28jfPdY
+9rY(pk$m[5UB14&k1UJieGd)N'*Djh9[qIeF20T),2*c1VP6Cdh83D2e[9QA(9Qf
+r9c0h9D[ajYhr4-PlLdlVIH$83p6mG2HF+Lb*QlhP[EqrFF#ihB",HhZ,Ea-bEEE
+bhm+iYlMJD'mYS*ll1mm(H!FY`2E[IjrS5l@4hA&fp6$UILe1Cj00AaGKC8&MZ2!
+JKAqCApI0eF&eDmq,"HaXk&"q50d[I[1GR`Z[R8F&cIjY*(Uq6QDLUl5CXBGEICr
+#d8[F5HlX2p)P3M$fZ6Q@m%,QHc"2INLcEH#LkQ0QH""AF@,QH$"&bCS"Il))@9-
+Z0j[,MHA%%pNrG"r(YHjkISDP('rkq(ElbbJl6*Ql1aJUFR!`0$'`-hFe@mcE@2h
+eGJCX&RKcY0emh6GHG53DV'Qkk#Ka[@MmkAYGch1"qHRG%"Zi+PJpNbXhp&GHj[6
+h816lA8JjRYhR#UY,,Z0ehI&fm@R,pI6TYc&f&[3@-I5BZCZSpEKFr@3A9hR4Ebp
+Njm5m`*2Yp1mr`[2@r4H@ZpJZpl"*mU#Z`TeY(SXMeD(PmLXjelFjReG&,f0XC6p
+8@"l@CarZCRAjNhUA%&2AFc-cX`"&fJI#jQCiA!Q4p*,TYhT2c3p,3kRq&2H8YjY
+!2cHSJ,"#c1"0qC,ep[fpKe004e(CTrX3p*cq[Qp5$jGf!@6k9rNhIRAIR5XQlif
+,kPp-K4pA0PbVMZm$mm5)9c4rp,c56)+$-Jl6-JRjfmKhIUCe[$`q0d,D(MBR4h8
+2+Z[DN`C8ET@P""M90Gd,1&"jerRlU$cED$jXA+cH[c*fmJK6)+,mAf)AV5pI[1j
+dAD8e+8Y98HIemrU3!(QAHIdi-DCTYjTZZ!A@lbNkr+`mV$mk2N5rS3GjrGphBE!
+&R!jrr5mhfCemfIJe0"(UB@CeBNfJJfP"(dGG0kXMe+l-kXMN5Fb&Bd8&6+a,ZEe
+El!ZmbMVk1#T[VR$c00ADD#T`U['QdPETS0T59P*"8iXrNjP,Zi+$)bTZ[XB)A%q
+jr6GAP&,hRbeMUi(p2h2`c2KjXhUaI8c1VAFM-kXRM6D+fKl5Mh82DDEF`kR'ZCY
+,*Ke2(Ua$m!R-UCZK$dQCeCSLMMd'C93Xc6rpY2,hHp-B"J$0qVIbTeK(lAPmZCB
+`6f')"6T-%Q6Qh9jDaHImfV[2#kI2ZEbeVXf8"@GGhN@rQlS8ICB,l##,*c[Uk@A
+Y2Q0+4Z&4Bb9'A&[dh#SlGLS,j2bGRGXd#`kLAiebLqel4I6h*jQANc0e"#%meU'
+!YGAQh8'qkG&cr[4pp4"GKJ*-%D6IhprCfFR$Uq$&bDRJa1A2qA-Uk1#,+`2rZJ`
+-k[KhecRee9r,RrYk2#jRdCFQklVme28kQS$+`El#cEB9#6,H$[+llR1bZF!5CZi
+)@0QEQ$HFrG99hKCZKE4kl'QqrEAN,cX#lir"mIMh-1MN9AiIP5qqPG[dr3TD1Tl
+1Tp1jalV9B16IFQpjFVPAXbLd)qMPCd'qcIUf8crYq2ZCh#Zmk2j8MT`k'dQD[CD
+[EaZ"V)QVee(mqAVVXq5UQe2lkHUc0eZV6AlZTf'lfNrPF[+j@Kc28kR-kA8JqpG
+p+$djh2p$epR[M,($U2h8mfiYI@qc"fRpGh0THT!!6i"p2S4jrPc+DiKd2U6E+(@
+iR2M9ARc[AY0q6(8e(lkImq4`YAIjZZkqE5hP6c*ZaJRrCJdFc`iBQLkr)REZ(Di
+R2kq"RGIJjph$rXN3r[fN2mAZAR[3IlEA5`rSq[Jq"TF$mqdf33[VIPb2%rMhej2
+60G!35HQ8Zm[0(NqYkZ9q,eFVe+,NIKj%ANHcZk(G`qpYS9Y$KB&hJCQkSYr$eGc
+Kh1EDkDeKlf655BILb+@4$[kRlNrRh1SXiIRIPk(LAQ6-!("bCX(*c+VQjP9kXk(
+mbA[I"BT1rK6r3rLqhpUCiFHZj@EF3lrMCpY$mlJp+eKrKV2EN3qI2qpm1MKD28h
+R9S[FSB29NqeUi14Ip(6AQ"NjfR[,6QCY0H9-f$YC[KI3mRqr,pHci"593)k2cmR
+KD[$cGIH9I-c+Dml5C"Sj[K`klNC[Je9VLCfkKqAFp'69FHVpUdKrPpfmrpaIHMr
+(*pk2erH[2kSHPPfRKGaqDRTY2UHc6m,kAKEVFERFEVC@e0E!%hHSYp2HBh3Jqc!
+J,MG#iTGj5J%T)0(jI0`jQQJl5rQ4[%YEMIG$jN[CF(Yp&fQQK3Zc3q$bVh*[FDq
+`K1rZ2jj@fh0IZDrG4Y#fV[!NlqIVD#63@G&Ib*GGHQH'KU2Le-UC`SXlVCR8Ma*
+eEi0A&"CeXLYj2I5-VUf9TC9YM)XDk`VUZMM4)9I4H$-UElj&0K3Y,#l&$p2#ZT9
+h@hm6#LjIX9hX9ZEb)R'Y-5pZ[2mDA9hj6F+Sl'TcBp(1hZEhej@cV+kX0A2eqfY
+E#6C9ZlVV+YkG[@qrC4V$FkffLe0Y+`*FAabQ*m0pjf4)[Vk4K9Z4#b+(qhprY61
+R(KHT%j&TaVkkqeidZ,j%pdr3lbK(%2-Jl5Xj9GMbF@4Mc[IMa2qhX9SF,CbXb2A
+IprV5l6b6%C5DR43XrEhG$59e63kf0ADD[YpeCEEGk'kYkqiVpa*Mk2@6HVdDV)k
+2q8hmG*XGc98&eQ4G#UV,UEVGPVpY(lMdCG9miZ24"@BZC`T22kfEe)mMRe[K9N+
+`Uk+`h@ZX0EZYYlpKAp5`Vl$EEU4kAS602mqH`2Al[ZK1jKHE[lDShNEbEEVHC+m
+b9KBflU*HZrL,Fd'Zl@RQap6H6fC8F2Er9KCR@Qp526bJ#d1$IApeKfQ2DILp'AZ
+2iqh`2cdP'9`DhZYcqT(PCdEcpYEEEB9qaVp4'KpVCcDfUSBNfV[1eVFZ4l-EEaV
+H[XUqfX,$FhH4a*P*p"'(U2iDR&hq(qh[[!fh8fh8!*B5H4-f[#q6[["eQUKI(3h
+eVjIdY9D@PTM6pp8hf0a*rLBZ4MiH0LqC)b-MKbXM)[XM)`mE'XYKX*QUiD4#NcM
+I5UC'(2bXE"aH*KiAQ5-AKbX@qaF2$XYI-eIP,2hjqA)aH*IHP[G[@EMLlMcHG3j
+F6Q4H6)b,l#aCAi[3Pehd5MD5(SU(&MHR351CKFR'b-M&j2&NCAkl,G@9KBfeMBf
+&M9dGP@3Y[@hRH4-rTam20qlTCGCJG[JH[58%2X810FheCUT("e9EM4FEUlZVkG[
+9k&P@EZXYT&K*eZjLe1fP4pR%QLE(rmdXb(JpY*h0"2PZDhId%6I9erAAeeIql)p
+f91dFprpH0-f'&ffpp1Jld%(Pe0e+Xq*@F5Xid6%VFhqrkrfqG8j'ddqUeqUefUX
++'TSSY$imbR`qfX1T3I*TZaU-6mP6bZ6Nih#kFMqZ9NIHVERHee(%T,@C8H@ADS)
+Aa80ELdHrVX2Hf&Ee,#YkGKAGE$NAplF`[)e[VeAdM+[4#(A(`Yh'XYCC8PM5@&,
+eX$+ZFZjpQZKpV9jPC$L6mkmVXf2Hjd24H[ZrTRH"T`BBq0JlqfM@'[ePKVp0B@'
+QX0Y5eqkTDqIeQRM8""+l89e$A8eC%VBIDe-LVQ9HVe81KRlfTQpI$RDk2DBqETk
+DA@rb&H8N,q&$BferKmR"bm#E'Ka,5G@98LJcZ[d)q"3mqJMfFM-SSmrKFh#j@4j
+hPq$`+LAhrmT0U85Al[`-2)b25j2)bq*PiNcVB%feKeYc1keRQeX1qUFkVKqAR`B
+[5U[[`r[`q41VUU,CcT%149jejid[BrlM@Y3KFAP&YV@PMDk[T0YTYYTSm6-kfB!
+AEDD`Sl'Lkh'PBmM&JLbkM4(P'e"iN!$rM`0lPFV*j[[j-bRm'$qZlk28JbHPH3E
++AFk-dK9)Jjd+LIkfMdRZm,r1&lP"HHT'pU&"b0pd+1ma-22T,bjir2dm&Rq%ESp
+6-JRj[L3pAkXkiKf['jr!Khq*RlmEeI4YBIh+[fT@MS1eq9,PGSkB8f['VeEZNKH
+,4@p[EfZT!9FhMPa`6Yc"#`aK"fqhMpVMCPV(mQE,XqelUQ`ULQ$9Fq(SHhe[Dkr
+5[26k(9Ljr9VKl(q$DjY&H@Gr1kZ(QGA'QdYjSmVfG4FGARFLC`)F,%'05&Ic,lk
+mZAVClZIl[Zdp1)NIQeAV3mHdk0&eHPTF,UjN2[+VHGA-d[hp#(b,RSaG$frQIJe
+HNDBd+A`pjhpa[0RGmcQp4N(Z0j&jQAiA!pAF88Z4fb6UMc9ARjB0AimlE3@RPcY
+G"@IY[+[pej8r[[2H[-hh,bGlY9eIHKpA-TSG6kXl6e9RaZIVSI"a-l@`llJj[Mq
+eHHY,f[b$&P69(lY6DqYi2el,q,8H(3AmQkRm@YiQ4%ar5LFEiUQ2rCHIHNXi*2`
+jXldCGYfjA1Se2a8rf)pIdH[dH[d2X9d+&c+kZaEZ6GhGhDhGrAAprXpAIraArMa
+3"hi$pm"QqZj1,A51C#K6[XF@,dB2Z6TheTIIG`Lqe2lUIkXIFp,Vp,HH"ZVVFlQ
+6SEQeYIIYEAFfXRGGH6GiFQ6M5C(*Nef9A9ZA&LjQ"(mRSk%'9l9j"C5lVZ8L&U1
+cUC[f-+qR@@iZ,H#HmkB-9IMjPVH9hLhNE3M$eC9erQErVjJQ(bCPP[0aZ0aYip"
+bXcBDqMf'XS00Tk1KeP,TS9(5dFAqIc[VmIkrR6+hDQm*3kRX3rYFZdam(#`T@2+
+b1X,VeTCI,XlILfpREN,Y1YbDh)ZXL9KB0pLb"H5TDXQhHdrBKmh,qeGa2BNINPI
+NPINPF[RAP4,fpB4bMTrMKrfc0AEdPYTpceHCGmIVq$Gl[Fl##ecB*22MbJ"N'UV
+h1UVhNF6e-$eF#C4cVb0Qr-Pf9DQkTUHc$qhbV[%aZ$P5XD6MGIGH,Q34CdHYR4p
+*R4j@E"'R3DZdipGjfdm'khFM8@ZRfe*BaGjmqABeb(SAHEm'D#k#TSCY6(RiNbK
+h&$Z)@hLlHLXU1ad`ZPdQfe`ZRDH0U+l2pr,R4j2q@PPemC9cJire2UIm2qIX922
+d)I"MHT35-I#`FI!j1E(qAA4-V9j-A+LFZVjeRblRNi',Mb*RK5ipHXBAVFZjam6
+"`Vh$PBFM(NjNH+!10Ke-LlRlkeiRIm#XkG[ClZdkf9%j0ENfKM-`FH4khS5khE-
+)$pd1TjqE$Y*eA-SGP#Kk1cpA0KfHE$hS"DV[kUYR9AIK)GE-d)+H,1UULCheJVA
+qRcCA'am$dZ$cG#djYTbTATEl"mLkrQS2lmrSiqf`I(i2(Y-UXbkc-fHUdIDDV4k
+1XQhA+[H0Mh[jI3PlLaFjHF(&PBXMdZr%YhbkZhhX,Ma-QYmk4`B9eFaI,VFcVMb
+lA@4*`V["[X(!iR'PILr",hm9$r9pLTQ3!1cRH*UU$A4B9(Uk+LSk+&Uk1&4`ZrV
+1$A9R"Y*&cbE2Q9Ij[mIq[Vc2U#3@iK9e(#VBd+XkpRG9H!!1jZH$DA2"V-#cV10
+9kVm8l3e%[b0BB6e'Ul04-Jd+[fiX2PF(Sem2(`1KS9m2)ZHPA3qA9qh@3jdrrba
+TPa(SFZE96db(Sk(eCP"YiHMVZ4cC('jXV%bllJjH&`HCLfI1aDZCZkZ(#bI8VZ6
+b*@9aV["LB!p)&TkI(qY-e[Ir)iZhSZm&`lIhXUVaCr)SITrVXpEEf9PCEIBl+Qf
+A9pLVdPCc12PFRdCQYljJUq1Mp)L1NlkVpQQf90m(+j@9bFV"KH6ml#SF5*JePej
+(c*N,5RN&lJEr0pAhIkqqhdEU4Uqdp#C$Rck"Y,$l@KRIEjhClla0ae0ae0a'ePG
+DkZ6VBZ[qG,h&,fqLlA6(&Rq@E&f)[bfeIm[@lEGED`VlD[X+q[[VL[f&IBpE#mb
+*NF1*Np14NbXDqe8LqLa-+XLEq6p'AhfRB[jM)(jh%`C&TGi1U[T2Pm54jf,fB@4
+fD(NrBiph(VX'GE98A(QlXI!he)A%S14&`Dc%Nb,UkqRar'QEM8*(SH8RMmQd[V5
+qiPCI5-I9F5Yr$La1CN821qhf,,kQMqK(d0aYG,Ylbhm1JXG9X)@fLkkMVUr9krq
+,Ibpc6*3C6GR6Cd1jjm1kp1Tb$$A'ZX695-#XNB&E%`*%6JbSPe+LA0pUVQqlq,T
+Uf*TUkVT0C8kE@lEAaYI8raJikZG,qI$lc!r2VpD0mr-pV1Rq"[HI3h&9Ceh0cD'
+$4pQVNc06Q83b[88(`AH"RM0p`F2!cY0ZDUjaTA2cqI5%*`-fPh81c(8GLC@"`H0
+NjP*Ti+R"bTY*U)*r!jdc@dfmeZahNE`VH9aqKmUAj92TE$r6CkkTrIUC[M8&VRm
+R'jQ0NjH(P60CF4k#lbmb&iNHTNc)p6'!*A6E+&3ARDmM'Qf@Q[+((mZEBEDmKJ+
+aH('3!%KR+SCe""fZE3H*(XpAPcS@mMeFR,c0AE`8'(N6E#`hR!YHKqEfjI$e+F1
+-6iUMhSHQi1AI9I0p+IjHAbCPM(KB8fIVimr@bTN5ZMcmL4-SV6H8GTZ00Ch'YXl
+LNXlHPXphTrjp2Cff`XlE8@HkTV2FddL0$RUfdQ9eG$RT&A0VkZ(3iFfaMpVbX[e
++()p5Y[[9mQE9ITp'QU43GmRZDRX9&p`ifKGm1*Im1YmbXiY6lZYYGrZDrdBHi)r
+h&6fD1p[l@lPG$3dfKV0#[eR6MG16SAHjeRi,1)Q(AApM8rQTDEqcAE,LkVLH[m(
+%pI3B#YGXCXI[YL!bX!CX[NeXhlcQ2r"a2mD@QqM,rPeC3P2Urhe1(ck+,$V,5kQ
+k[@E'0VCr@e-AE81$UpYU0CVY2V,#Pe[@a1*SXA%`FM!`H6JA[0i0l-eHQUU#V`C
+fkUY$$RDf*$S,kcQkc@8fXeZSeQfdqYfe,VYG5I!6$%[H6LAA,`,V,!(`EUEV)99
+UVQdcBP&$[r'r64Dd[$mM[2fkQ`rGeZYk1*fREk@cRY,STGMVMMAdZcl&60UY(0K
+cmf(36+VY#$I"-q#C(lfUl8!r@QG1Ulb90pqUfP98jJ!kUTR3k[kd[CkmRRHl2q&
+6L6DUJ"T0q#ES9ADrkc0RXZrjZAl1bh(`HcX[JjXb(fR0a1*T29QbpIX$"bJKI[U
+H41kHZM4DbZK4UbJX+ZIfAAjXr3iY6%P@FL*FbZ,@6Y2,TpLCSG48I&Tjd2f,6fZ
+T9INe8[Ac+VmPd![PHj!!kMp0&XQ(4l-p6I9q,VHMmVL6fPU1*5D,p2Gl-M'NdRB
+RUhirfD+AYYSR#&9I(8p$8jqdcUVbUVbL#+%1)C`p9RI"RI!361q$2Kr@qY3f442
+EMeqb0l+YDVPAFD6)q9-dqh5DQ(fD'9iYhZDMJkb6m0hpR6GAcG0TY055p,(,Ddr
+GpM5ajh[Gj(khZEAm&jmT+D4QNj[e-,"bpPSr9TU[e2@TDE!`-E%i1$DB&cHm(!X
+lh%`"lJl2i++aM8pA4@8ECkcB4TqMXBe"4@0G3dHZNd0(AcpE#ddA99QVT,AG#5@
+Q`X(Qh'Zm6GrJQDI`bb(HKi2j[Tm@dpLkpLk))36fIj*QR['"h4JGpec(I0rNQ8A
+M-4JrZe0eCh2LdA9m@MRkc3P9[3lfJ-@Ab1hrAUHY*Nb*9eHc*qK)Ph(EpE8i0pG
+b*3%rSrqHpK%8lR5I$6I@k(rMa[e8QLk&$4%5lX((9p,*a+R"e8MGArc2AlLM)YT
+G(ql6c[dkA6GhqU[eIEp[rkU0aDBQ)+CI2rNQ6p)HCrZZil(abXE)rVLB@ZUI4QG
+j8&QZkdRCRmI"[Vh"p$p-rme&EmMpHTl64r@r9j'ep#NRTIGq+a,4qfRe992eIkD
+,kT)rNKI8P,k[XGjqRr6YYV@pVTG,qR[I-)ahNpqb(6D6XI3lqSqM-d[QS9D6pP2
+UVf,ZqYFaUZAFbdl'YMmH`c1YlX([ql(kh[9'PU2R0ZbDkp98TlG9drFJbrFMc[F
+UY$YZ4SqdphVHjerEiAT3ZP33BmASd-(%VZK#[2+Si2&dd&RMCY,"Y02"$Mcr-Q8
+hL3jlr#(#qr$LiqC[lbLhIf0&,ZqDU9k%2i2GJjZUk8@(aX$2T0,LYQXqCPSPpGm
+HYcGY$h9CQaH&FhhEfECU[QFj%RVrMedl@99r*cIKMFq0YH)fDDlpC%RX[Mf1G"k
+YRdY#MKmDjk8+UjREm&XeAcrbYlp,phkIQIQ6AjX(eVmj2Z3G2hG#2Pjrf-$T5ph
+kkIJ)6*cHYlN'ElNITql9I"mL"mke,Ir&8Cl991pZ$Pqh(brEUXcj(#I+0Jr1U0c
+iHKlN(+eA4L`m6!cU65mAfZ2c-V,bTQ[JS1Q2cIZY06ki@6hZEqL6+R'c(0dd&Aj
+X&RjX&AMCQZJS-DEBEb9lIbTHlrlSN!!6TCQXUVZ61q'0QaYVpKr8CVImNX1f2m0
+KjXHZR39ZE(Y1I8EZEamcVVBZ!@$9re88[ArS8UcDUYc)+%jp+UXR[aZf`ABH`TC
+-'Ab#JeA0Xr8`10LD6qTf,GAl+&Z[rKVZ*HidRpFV`)fem&fB([TMmq-r[ifC+RH
+GKcVE3JeH0QEZ#L!,e`-ch-jh1jR1jNcGfqG-Pq"06j--9Zrc9R3Lm,MAhFriYpC
++DbE[-6JFfAaE#Bi6ppYTXkeMeZ,-1JJp!83G!8ND)Q[F[DMY)FG'mQ!D0pp19,p
+*aS'lEE0da,m(09-$T2FU%IU0qmI5bjA2Cf+kfEYSHfV*dAK@GpmM2EYM,Zmj%YX
+2Leda`TbrhYfYdX[Kp"[NmIc*j,XZLQahCIZf(hiqElN%lhBqKle4K2eXTPlMT+H
+jlPG8[)A-m6`H[-el"f8&pk*0e%I4mle*ZhKd2)R@%19GG$KE@AhhY+IcRP,VpKm
+-"CHfL"f(lYGbVhRbB1rPANL9frk(`[YllL@0E(pq`k&4TBrA1"Q2m'Ml6YparGA
+Mr`fR(RDL#TpDBFfp&kNkhKf[%cI"Khq"Rlk(NfR4P3qC8qh`ZTlZK"e[Hpm!N!"
+m24QcCHepeTrTiHVk(Acq[d2a`V[RAr-`mR'rVNqGqbfm'fhHkYpcF@YaqM[*1I"
+jfC0r",`[HRrc9&EY%fN62(TGAUYPUp9VGIEkrFf9MC9qaXGM'fq[fqXUY(MTYBa
+CP&(b-k$'jpjjHEpA`*hhGK-r(U2qmhmIFjRhDr1i9hd),lSar+JaZqUa630YqZU
+ZdZZEMmf9bmAPll(iq2HePebUbka2)pAb23PlcqK(lerlpGcEhS5B2+PAQ&+lMfh
+rIL`r5RaB'V(cBmR0JNFq2GCe4m[rieQ[h1Zh1ffdIjF6eq2@iGpIherKI0LiYVK
+f["SDZ,CaCrIbGV,XIme1mfUN6S)Kdq99TT1hH2j(Yp"Rk0dmb(GCX'Ue8b,6DE6
+dQPZ(ZZSh6CjcG4NB(dkc"h1*I6hV[#fVrI3iKpQQiPlNbI0PH$'fYZpeMCG4$QT
+l04PCN!#Kpj8m(eEQC#USAE@$`YZqrdIAclPl2r`RL$6pQKrQaESHfUrVF+ZQ4qm
+VMiJFLYieeLB0epVhSm,-(kLQ@(eiHePl6rbKL*'[&M`TT[ZkUG85H"A9pIAEDYX
+D[GeGPj[hIapj@cELJXS@[Sif[mLCYIre6,4d'MlA0bjdl-dIDD6I1GZ'MqldpVT
+@KR,Urp8-a+(kJmr20eAT@I''+bHSRIE*9Irb'JN"[EfrNpH9[Sfeq8p@Ap'Qrrd
+bj$`ahYKE$pKl#U`YrKrCCm0FHC6rqL2k8$qMl5GcZAPjI0c*lVHRc[H6VmMl[lF
+bSrpNKl`@mFMQmc(e@$CMhUiNpf[RjAq&Pe,,U@@hhA(Q8rqb)5(r#QZVflNpD9G
+aYVZl,k%(@pL9l%V,cIq2dCHir8Y-prCrfcrph'mI%m[JiN+C3L&R@jp9+mqY[T&
+$)mkYb[JfpQkreQCXZUHrqMT[Me(,`2YeQ2ZH4IGY)MHI8b-DIPC1$NF6'`Z,)aI
+-PBZ&Lif(Ekr5bpVm$V8KFr3VV#`ePP&kh,LH[drcGLch&CYl5hVV'[feK'frcjG
+CeRhU)VhYEK@pGV8$mYh9FcCr#mpcR5Ik1kRQE2pElEQAL2CcGcqe[USCe8I@f2l
+NYh(2$j9MIrDhGppZa`Ik+V#HQd,ke9qp5llH[[Z2Zj((XCA(epldE#VmHqh8RVB
+[I5XA[Uh&hZfNeqjeFrZEhk-[Cr%KJ1l6eCe9&QDVBaG2TU5Nd[bRi-IVDrX)B`r
+LTX'p`j2`bYr'())eBfA[1bPVZ[d@TckV)k%'&d)q,d+V(lEJ2pE9hraPGdZ`dHT
+jHG`XESpESG52Lp'Y[+'JNFl#r`XE'bXIIXYlKC@,bFM*b-MNi[*RllPe-M,M6G#
+2aBR3kr2r(h8fAZ2i0[[jZrldG$@D+Qj9l0NlciBdb0YI&irdphBf@`XUD`f9K$l
+hE3i9c1M3qrVLfGC$[Tr2[-2S4r5kA9kA9k81YY-b6$VUX24iqG-TXp-l%,pm,NB
+r%a1*ff&jSZ,I"kATFMdZ4YCP0q`M[bBABK9FfE0'PkHjBH(BE$Al!"G0,VZklMI
+H$U+J120mHmRVUKV1AKbFM$ZmA'PC'2QqrBakh)r4rPdl'2hdV)RG3KfEE3GaYr3
+PkrZdV#*[H80eblhNhq,KiSUhjmH(mlTf'fkJ!l$E@&KZT10aTHaq5d,1$U)eP'h
+GIEEDffeKli)Dh1iYDDkQDlGhX0,,XHm2fkL%ZmMK3VQ,FjIPi2*m[$aI,aXA'aH
+,)b-kaMe&$aDh)b2-P%%b-M#b-M'aXB4FkAm&PhURR0mM!e&V8fYPAq4ZpYi&X,e
+&KE@([f0MYV'aVFeUHc+R9*eIGjqr8a,l[lZk[VfVK9G2Uk5LkZ*FiPb3!%a2'pI
+Z+V5ElIplh2DGRZFqCUI%B-2fDQk`E-$hLNVm@NSjqZ(@jGbUqYpIZ2pkI9$4r(h
+I4rjpap65k,YDVC!!$*[kZpqIIq2`m2jrNI2mI"U,Z#9[2e89pj9rmrKq6KAhc[(
+iAMe&hirJe'(irmQ(qVZr)mVKiINF'qmHprP`r(kqLred@Lq(pB!!!)#)LBLCQUU
+DQBGfGhL)Q)D(KRCSL(L)PSPfGQH(GSH'Q*CQH)KiH)@*PhGjQDQDQ*QBGhLCZVZ
+jQCGhHEUDUUQTTiGjV-f`UDUSGhQmV-c+UVL)LXZp$!ZTUBH*ZlcFZkTSL)QUUlh
++U@CfH(H*LCQCQhLYc,h0c-ZiKhVDUUQCQb!!!54'D'H(LB#SU*!!N!!!#UN!#J!
+*S*US!!#3!!#3!+N+!!Fj)c4QCfCfGiGRL)H*PjL*HSHTU+QCN!#TKRUBQS#JQBL
+*F*URLBJ)J*!!#AH@#RN+KRJ*UTS!!!!!!+RpIJlMIEh$m[[H"X,(Ef1`m[cF2c2
+0`pKiq$jINl#$HANhHpj`Vab+b*FZafpK*fpKCEQaN5E$5Ibk65IlE$k96T02pIA
+)%Sf(%l12pA93UViB@0BiXL,IAPpKAH,EBXr&i8E&lU-"9PqZ68lLI8f94*K4S9G
+@Eb64lQpl,`pP9kRBI"@hRqcp%Rp%Rf*PM[T&9'N9FRHbG$$kX,r9Rid,&LiFA#R
+AeeGi-RdrUd)YmM+S&,r*NA1$L6lq9IbF+9LGe'r4E8V@Th09Y+cBbr!S@YqQA9l
+$iDh-JeA9c*R#NjQKcC14)LiYjLi@&Lhq,IB[P4XAa)`&51jhdQUh%qU'Y9M@eHm
+XU1ciV'X+6dmLEIB%r%NmH0ai[(MB-UXllm%UR6p@&b*1*GAISq03Nq2TrmHhl@X
+fQQ&4BaILUBe'6(VCRL6kAjpI*kAkCRLAI5kXbpcG$0MeeM5QakUZbkk2E8k&Rj!
+!P"93rMKFZa'TKAQ&KA`fEY0(K5XAaGpClMI@94D4ULeR61mQEZdfGR[,2H5pMDr
+5S5rhP$&9X2LVF1MjrG5DI9QEZC2PFUTXF@S[F2#mZdXZVD@@IDELcP9&T*UE508
+fFUTY)Y6,VSZePI9fhcNl2P9[`krMIChdc)[DkjXCXq41QbC%rkNAkNA#!N$CXk4
+G9ephY$Er[SZUDr6Dr,Mpc"#l,SdB@fkdrleAD9FcEaDA9QDq5!YE,M@NkdRl@,h
+("SGer!S9K*YrPbqV-fmR,d+HihYP999P#P5S9Y*UVDaV)eM$l#ST3E2+NqT+Pf8
+UTcl+9#h%@&CaDU[YU0Er$TkbKfRb5E5rXqVIH9*mU5J6bSZ&)fifSPphY'hmRjG
+ArZf-3QBNmA$`+kaR6V'jNe'$%[CXVM9'&Zi8ZdX3%XmqADEJ",1@4p,Y*)*aS3'
+!4&K5jGG'fZeP8GajACr(e1hV')Y)T)J3hH3TBJa"#"Xl32`qM3V32)X,FedEE5U
+0IjEQQAdqK1am'q9-16'bFqUrRcqA9C-E)Ridr&[F((Rq[pUKZI-4AUSHNKB9jb+
+k41`*04Gm59IHA#XlD&DF+[Y1&Xl5hY,3"*GRZGjZE'&DbB1fQH9*cG$-rSdP#6J
++8qTKPmfj[T&MGh06Gi8r&PBXPAbp[+aGh[V,FEbbU0a'U*FkCh+Q2d2qPK4fH$f
+2iiX*ART0j0VUkE%PAG4+YUL6H9%QpU*1Pl@,lXRhC025e0'MXm,XIirc`Y69I&#
+qYaZ*HiNlM6X+GJh@Pe(pIfrYq[6LiYEEedZUePC@9rN8GKKkM[IbGYfQZq(@i2+
+qa*qc+pHdkYTeE62Pf96SA1lP9FA9EbMCHEfImNI9e3Yjq21VX@4Bi8LII5*f&)N
+i85II&$KF'`J1[T(HE169@8qVM90GUVb64lMq*N5Si`V'Z[*&Mhe42[+LGK9%R&R
+iRL4H2`S[(m@dV0$!`Z*N@24qV4QI2q6b25eqYBTlZaVX@8+RH9%qq4RI9%R#`Tp
+m'f&LF)"2&Xl1XXpRUYa[GAXYjV*96'eeji&#dmlX[iDZVK%DAehHedL40ZUL6)Z
+j85q!-SKTjj5h6XkQ,Ce-i!pa#XDMC3UUTLl'fhY$GI3l,Sdkb%6(cmFA85a8-a*
+f&%Ni3`5(r%Ni9pIHKXl1bYieaFQdY&[lkrZm+pielb*rVd+%Ik+PZU4GB@"aERb
+,'kllLFHR$N!'d'TkbXePCfpAhfaLqM9mA9@I[a05Vrhb5+Zel6Rb1eRe(j[-Y1e
+l$%SHCVZeKIkqIjRejpKjP(Be#QBe-263ZAkYMpkUhH"Gm5lpf+X3aL)XifiRELI
+AaGVF82"eLQGeaYbG,bF'lc0R-VXHPSC(`bjRE5im,M8THYmk(*`-cF4jpeQD&lQ
+D&p6h%&ED3GV&bFV*k%Lmk%@I4XBdb&A5D9P"ZjRX4q0&cTXI$LHcA3mVU81klIj
+@$rfL3b'-b,`r(QjIcpEBfqXP@qVXTGC[,HXXl2C@NMb,IJfmb&N8G()pMIh&6DH
+$#XkM`+Z9%XDZ[[)[IdCZY5"ea&16k121RcEkpVX#IJe1**p(%Nih(MBf*'b-'9N
+9PjNrJMC(4aZMMFL,j[)Li06ajelBi&l*ZEVd6H&hqZCi,GGm@UcSI%cBGlkm6+R
+Fbpj1&Lm5Tih%Lhee&Zq**ZlQIGcEZH`'Zj&pGeehI4,hM9&pLi2*[HC2pABmr04
+hjP$j[b[N8C1ZM+5haq(1RcSZA'Red%+fLaU@bLaSq[LmV0YCRP4H96pZN!!4*B(
+0"T2+cYXd'MqKZCKK6ZXZG&RaieG+QjN@VLalrcHP3lcY&KfKT2IFZm5RY*N,'TE
+5$X165cjRk)[XjY+A-l@6N8V5CViZ45d-8$i@4)r"&aC(+b*(+j-6+bZKlNIhTR'
+XHR1MiGGl-@(cHT3lrjIb2)qYVDe*,M6*0h#bpPjmAb-Z[L6)@95d195d%$IfqI9
+FUPeGc-Lj'ARlQCh-ZC&j@AZC1YcjFR@J2DefZh8cX2HMrk616Bp5G(bDlfSX2-p
+ZKp6YHeeYaAlC*Rkhh,ZlNiP2C6KiAp6NdUq*,Jl$+j0+eMpAPHjRfXbRbZTT34j
+9(2Y4jFVP8Yc,)#bL!q9N8N*j3rmV&NIMh-Z6fpUJ6FefYYHih@jQCq9lQKc2CLa
+YM-aUk91kFk,E4q6)ZThYllKd+'*fhDpjr,Y)kB2cb'jmmKhBcb(l`L(F9eSSMbU
+9U3MZE9JASCA+r$9jB'kq6PFV,d18!J%$!hHj)mbZ9)r',cA!a)bXVQ41KPG#MDl
+$8lQ`e1fQD(-pT-6PM%kLBR2'*lZqiI[d*XhjAkIk+k(X2MVICKrj4kIYk2YH6b+
+VfHY'kF+$d+U$bkZ#j[mcC36F1ReXE,eR$Kap,cHIcHGdIa`p2kN1Uak@qJe'rq[
+4h8lj8q(X0I@r&Vr-Up,9C1CbqMPG(QpAPp(p["Z1"`,MJEq$5kQSYq(FF$JfZI`
+GrR`Eq#A"[h!h[p,mfK[Tk[3eX6peE6qI$dpl1b[9VXUMF4if2Q@NbGLp,Cc,frc
+GMSjeASqjeB2GPHl"JHK-`-,0eNbjb-c@aj&'2TX[E3lZqkIRf&#CEGT9Ia9eD-R
+cq(EC'AF6+V+Sm'eJl$m8DPh8Z#,eFE,i@cJMBe+hdFZA"#jG(FS&YH"-dr+Slqe
+k9'Kh@mq6e2-V@)$rT`Ge"T[BJU2a5X[YppUYESi'E[BpjHj[jr,hXIa)f"Q`52[
+3528JLF[,eX&6cD@Zi0V`2!kReD&K[INi(3ekN!#[2rjF$GF(Z0'MVHV"8FZPVFr
+I3lE!k@pMq'!R#PB'CeB2d5[EiITI,lZKEllY2'jNAAU2[)KpJ4pb+lQ8Gr-UX@R
+Ck"Z&A9m4jQeHMlI9Jk2ZF(Rk1C[)*Ae)Y2I6)f45Z)qSjA1KC@2A8V,B`pa6SGc
+EUiC&5qde(e[[jHI`)0[+jZAeH""'jY20Tk,!Y`*E(lrpQkqV3f'rl(EEQTUNCI+
+iHhMCI9"pJ+d+qE4mbKh&afIMhfVeH`q,Arfr,XXh2JmU9Qp9J,"jI!fGa[GrqUm
+jGjkZ,4V*N5IQF1`SA2!l5$`SV'*f2qr`q(Tk-b04Kfh1c1$$[29cGr$aX6Tfm2*
+`1T[BI0ZZTE3F[FHc1UB-QSPG1E9`HEIjfqJ`mETD16dY(Pdq""h8ESd[$m(mRp0
+$Z1$mRj&C$eL5N!$f1GR`I8PCh93,R`Be'Y[k1Ui1ci1UdHIKmc'j@(N`Be$bi1e
+qCrpE6DKIjh5rh`Eh,JhP2V3XZSJL4D94"ZkQCTBe1Th8+#**jdDR#YB8'lKEQUJ
+L6q2E8kZdUS0h9fGA"%[Z*H8qYIA0r6V*@UJLB8frTkU6US0hUV(9`GcV,H#4NC1
+AY0V"#ar6rjm6q(kY#$K1CHISIl[@k0,Kk@ReUVRCG6`)IG4*A)bqYHBP1Vm#()[
+m$,e@p"2'ZF[2lHI$NFf*PpESe&2V8H(%T3EZ(&bim@P-NIh8GG3iAHGTEGh&KNk
+QAjq&GdjFc6G$P8YT-Li4iZCphdT8bqPCXQCKGH$#kY9RICcTX'&'cCd&p+k9Y-Z
+l[-h%%E#T@j5VP8CFb0Gj[Rl#KBGkU@@A@1(+*qCQRGYU,J@Ya`EH#($P&%KG@kX
+(Vp2mrHd2hVPM%fMcBJN'-58-5#ld),k0R@-&qpQ)9hF6*`TYc+aCYc'j8LjK8E'
+VJLe%r!rUU-60e8ILB'EC4lkGRIFmlfI*j[fU%qkq9rbr[L3bL2ci*@(5hiqqMbq
+VbqEqhJA&a`,Le"$$TIRYVl,YjP9M&j[6j2iT@6cFRf0r[D[IlbVm+bU2c4SIhl#
+K[,YBqZhLI&@dI(eYP&fZdU0VYTIF@Nc6FDPUmqC8B[8dICmrk02mpVQIFqYl1Me
+0$d)FA!bpR(KB0+[MpKLmr&U-M(XEheI(Sd*0ic*K@rXem'9[Gp+Vpr9DcI`Zhhm
+,@A&6Y,LTkh,j&4bq44ci2`5ZTe@!X(hmbR3S5HqEL)rAViHSqriG[R`9(hC9,@'
+$e`$rGM8ZhdD1Zh82X29bpV$NiQEXBreZPqDIhk0YH'hpf6`iZ(6VeKBL&@!9r0K
+eAUdVL(h1rKlZh9AZMa-fmKidhTciIhTd2e*X2e[EdIFQGIhSIf[cH6i(EI"j-ID
+#'k(p14iAKlM`S00pQiJd[hVMJp[FH&VEM`GY[kMIklIe&[$dq*'a+0[8lk(9B%V
+!TD2%YZ*Pk0cHA01fV,D(E6Eq4dTqUR`lb4Ka-fGUjd1rUFDSc[R6BIfEMKrHYB1
+64MmbM$je)bKGlmaY0rakrkrKH[pr,i%cHFM1hmI$ir6m#(bq*l@mKq[)pfG$dDR
+h['U1lUFr[G68F2r#9lN@#P[2DV)14KqcUq(JF[0eX&ekfC!!p2Pc024m2jhmhj2
+cGhi,*#DhpH[r[aI*8K2$8Jd'PpFN$MeA)brQ3l)hIiI&Z9)*)pQjKrcHe`rBJTq
+jRJ)EVAXrRX+%r`Pj')C6*pcc[hprZVMZ1"VZ!!R"%0bk2E`HYl8(0!2fY&!Ya$d
+rUq[b+)4EEJkhJl@$5rIjr,k'6prlRd+'cdL`f*!!hRrllMGF$Z0(RILP"pTIa4[
+DkX(iT6!AfZ(jrbl#K`0+Z@[ARlRHc(rbQCRYm2mR8UB12+kF@$%hQE9m2aG9"0a
+UHXiG6kDJMSmkM`BHSj&,`BFVM8fA$qq)0cVC3EGHpUG[3lr62f`C[h[hcpG8cCq
+ZKF+*2T@QKVS6e`Gc*6V"h&[PJlh2BI+KAGEfjq%1GeqTSHcSp2KqK83HA8`H,#J
+laEPd%5rTE+#S`k2@a[BeR!khhr[DhjN26i0(HlUlp1K3fZRAU2A!MkAUHIr2eZR
+UZYdp6p(V8BHhMRMjKa+1TrVKiRe)R6eI8p!hrGTU(PMrq$J'-jjilh!1JI`[Qp$
+mhiH$f+[ba!Xq[dr$PHRkqei0eprSlA`lRQq[VI$Qd1#!FMRF1UTIUT39G'#)Xhq
+ZQmm!pGFmlAA9$AF5KVVhNrNPkl#irj2QIpIVp1K,l*NRf`rA@ppkrNIEhrd,'m[
+*eGK6m'SaC1*8FQ,akMNeh)jm,U4)rVHeR[+i0eB2@cD9+K[1c6,lHYrEVrZ4l,T
+Q061p+,'UZ9E5F+mZlZr[T9rIe@(Ie9rjfIKqGIiF,$`SerIbEqmRhPhK@drP4UU
+PpcbTA6iFcYk'lq3Q*VLN2dSrIG62i(JEkkhZpYY'r[2%PAPjiNDm[,qmYX1f[-1
+fYXB1ED9bT8VS4SZA)p,`2C-)R5T8D&jmP-VAQGqRk9rICHrQGKd-Sr5+0K8pl"2
+r9"GjpYdZmYMK"Rhi)bFA,AS,TGa(l$Rp#Mh%HZj2)ZZ4a*YeMh-fpir%QhZ*a2Q
+IEqCrmI-req04h9Jc0l@r$$pI5kDIbVikRmI#b,[PD1rYYc2Z*pa*kYa1c`)P-$T
+@rYYrZ*HiY,1cPl+eM62i+0E)4rff[q#(THfKpaZGr%XiZkYHVDp9!J#Eh,SEfaC
+djLKpDM'ffUY0ACp[Z)9CC99CC9GAh8DVUlB#S9C[Ga"*Tc,(-Mf1C$RCN!$ZHGF
+dD[A9HZMH4XBAV9ISkVapA[U(GbA,UrTSl(FkZdlICkhGh-h#ZEQqZCYpa,'q`Z0
+dTNr-MpPQ6-(0QH*'[FRaEHfYpjVGlV0pV,69lQVQGM3S@XTR[pfIa`mcEaj1IPQ
+IQaTk&12*Taph(hFHaXHC*p@Ib,[(Zq0GmHqa-,b*0eaERqEf'r!b[SELbBI9[`3
+q0JrararEr($i8JG8VeDQaj0laX,!aDI9JUTq0+aT@,2aT[+ZFMLBq)[j*r$3l[F
+16QMiFVYpPV0MDE(IE,HfHbQ4XX!jfrN4Y9hqblqbhdV`*qIEcp"L$YX-j[X@q[Z
+0GmLG4m+K,XfbMIYKcC1*0V-#4UlQiR@4qd1&8A0'UlJNUKkE-MNIREJFrflJ2c`
+ci0MPk1Ch&(FfMPIqYcjh)`F6([FI2ZZ62alc%iYljXlkd6qV0r0b0aJprGBecbT
+h+lUZjqledEDl(DkV9l6BlEpqK-P[)pk#LM"`QDPEE$cdjZ&&aTrQcq,HmA"XDV'
+NjF(Fc)YlLhM2GeLB,2Ge-MGT`V+,V5l[Qm2M6HPZ$IHbpT!!iA(SfQlSfF(BFDM
+eCR+kIp(S62`5HTRc1Cc[h[9m(R6pjalRjPea*fra[4qe3rJf5[FeYGm'`k2YaYE
+YGPV,H[e9[DDZdfHje@ihqVf9aUV2DkY9fp[(XHC'ip4kdLpNFUjZH*Mm5EJBec)
+ipp86C[([)ec8m5lpHjYZMa,DMXkU$MlZ$Mpj"LAfGUTR%b-cDQhGZSmE#c[5f&'
+bhDLkSLIXf'6c*f$Jh2)ZH6)jN6Ra!%Lj%B`26VrSqYcHM6dZQd[E4YE#ehGhdcp
+A4Td+-VZNFDQ*m9CPjR`H(BH(`)AEe@XUYKUBqkY6L$hNRF6V1E,NEDSYDMVqVAF
+LEalR%`,SrShaiIDeZEAl3i,-cfZR8A%c%MFc1kdVRC[@P8BILe8'Pc%#9IGe0A[
+SI([m$f@Jr6f@pMqPjrSDVI3m$'`-l9lkXeb"+q#Sjf64eaiMA!2cZAcZIbqCbmR
+drS3HG3mcApYcriiqdLIYVF[c)9PRC@0PF[*jq4cD1Vh8'P`qK5V)1`T9Nc6dUZ$
+6dUU#&ajYj5Pkb#Uiq65Ykq#,aXR,SrHJUZ0pQ#+#@r"R,KD0+C%Zk-&4Ip'P@F%
+iJ1E5eCP9jA,jq9MIIk-(Rl2hD'"@XQjMI"X0,88riSF@lQdCFL(TZKd+@fQ9@45
+UDq$5bF+M9ELBGQG'VXTQP[VERB9YkZ,+pA'PFM*PFIPbX6QaQ!dV!k&Ya1MEA0'
+bYSHR[T&+cd)P)jBZ95h@kMk8d03K#H46kfPe0'YL,Uhl5*m'`aIXq*X[!clHdYm
+qARl62fZIUGlDIU`mAl9'Yh65,ikc(bIer-X0le[`9hhDllXAl%Al%EcF2kQaaIU
+d,H+XR@`fR`9ZGUiH2JjhA!0J0Rl12k!"l2DqpB9(2G#AFD@&lh*HT)JEc+(dpLc
+K&f2lBQ4QDU,$VVfjk&lIC&pJ3V)fFf0pLBq&LFE5)%aF6"b-5pj@"JmV![FVLA[
+3iPe5f0A(N@0lQ@FI21H0Kj4f@bKkDk`1IGi(-[F6NZ$l&I*"AZ9JA[2iPl4f0C(
+VT'"Q@p'XfDM(XqerA@cpjelk4UUhLHA@9PC9l+M+VfI-(ErYLD@SdZ*a[PDE,pk
+2(Q4jJ#D'Alaj[*RrRB9'TU1Z$hFkQTeY#CY%B9'hdN6eFb(0Taj&22!6rYYim,2
+T(IT@ai9,VdTP5!E3DP(LCFF"J$UD81`SEADUp(8eAl)Ri+kReXLG2Nf-QlL4FHS
+UIBi-5SfPM8f8Q,*P4TI@TjqeS3pXTrGEV[hDX8hiV(fZV(r(h'QqlZQKI1TdBAF
++&ZalAiY2*kXEp9E0Qpj999A3l6ES@e'Sq$6`SG4Bd,AZ8XZhMrk42EKmciZ6e1[
+e1[e)rU4r8MY#h!Dq3H`2pU(3qV8lPNR09m%+lYY#mQC(HAGYC8GCDXdX3c84IrU
+lq`rIh(9hr@qcUpAeX6%qe3e-a26ApTm'TQ8rHl@CSHjBIKrHlYJRX2h9[3qRMi2
+VlEZ+RSDhAA2)r,UpA[kc94YR@9Qbe9A@9pC99QdXS9@I4'Vh+"*96e@"))eQe!4
+"&TE99AD("VXVbVe8DZLeQVlkhKa+@Z`Z0cq$T[4pIrKUD'cqDcr-)raa2aqKc-[
+Uap[BX"A38J@ZTr4qP3fI$D9DB+UHhQ9ch,FrEI4qPlpAib+Zb*r00fH`ihCkRZm
+5qrlqapM5Iir,U9+cU1ckpEq@dr,Ujr[kQ%K$XqcrcVHalEYGGDH0hIeImHfUN!#
+IbG4SDlk[HhhQIXeHNkG99S5l6Xp#Ykh*ip4aUM"VVVIArMIQq4@)AlA5rUlHPlr
+EDVjI"rCXZbl2raX0G[1deGKJEUM8DYGd2b[NI$rTIB@0NIHXl1a`k2Dl"IDMj@S
+q'S2VrHi2f[IU2%BV1bdDh6D@KrRipKp[ADHKfRLYR,r9Vkk2852IUr24(mXAZVX
+2m2dDla[bGTX*rBkRBHrfhe',l6rUKkr6r$'hH`mlhp6k$(2U0(Af(NICrErT@q0
+lp##JcPqfhalA1+c-rhCQIld2VpM0phVqj-pL$qRU9%(hUQ$%PCh@YXhVAR5V)*e
+rQ'Fh9`426TCG(@m(EF(AF$V8EMV8Yr(UX1MHIES81mjc13m5(Zardqj-Tqj-brH
+KpEXH4lhApfCld(j2DU)28CQXkeYRGDmcDb#k[qPUS1meF%Mdm[,-eqQjY(AF(V8
+H"ePbHie([[YmkKh[2FZ,fSI9pZ$Q9hXaSI'iQEXp6p4rhahS3G"MPVrMfHE[BII
+cHP9H6FhrCcArZ2SX5'dq1[cYM(`jA5ZZ(H@@EXE$M3rp)r9pc4p[bI9UZTeShX`
+S2Xe8(S9F(%[qPXS,R$c1X[A,(Me(0SlBpFrX3p2q1(9FQPE`DM`IVkQKh[VXMEZ
+2Mfh8QFk4e+U(pf*FV@YfG3r8cIMrNH-L,lC%I`hAj@DPc3$dIRkkUEUAjeah%V(
+pHdh9eLrNfHk`ErmZadIc9HMqMUm(rh+pMJiRSEV%`[bkcGF6)pI@pa0jaK*ffZ[
+VlqlkG1M"#TD(XEV3r[qQGGAjQDBYYm@ek@`e1JIM*f!#9'PUHbrp2cTai2pcP)H
+h(dIGQG8Tk2$9Tqcq@r+2iAplP(qcUG6-r6lPG(jNhUE+(aX$j(p$mT(JIrE%MY2
+LVqPXBq0+cEVKhpPRE'`rfqecHKdD2FD0)XILF[!`2alk(IhTBhr$Qk0ldLbbrTk
+c4Tp[SjIE`41E5fd&4dHKcI@mrqHKY[qV09ihqCdY$T4l[T4q*Ql$K8I@253lkZ1
+V"XIlHbS4rcSZUe,C([-`rAQC12q$e($l6Kpe'-a2G5Q!V3V`k2eD'hr3j6fA$Zk
+F&GA8BfZfAEl28q+qLKfhX-8*$[-ZZE+p2Bj0PbE[XB(d6mkLrMqhIf34S+qhJMC
+q(Pfm&8H8R*TEQ$X1@JAQPTmc6j(p[$dP$jP*R4*Ar&Xc3GraQp5UmRNArbYSmDG
+@kGI"bfG!RFIZfY0fa#DV1XTNR)SpaZCP6NCGR-NhqCC6,ZIQbB,k6REZ0RGe)Jm
+liX1UAb(M!VH6qPC6*prPlilJ+0aDc1`b-[H62)bk(K8h+FkNI-pZCd2EQFrhBIq
+(BfE`R@ThKjMP1jcda0r5H,2A&R[c1NiX+fG2H`pl0c+VbCYrfAp6`qf[[jZDa0l
+ApeI6f-HrPCPe`lDbk@aX2S[$jF2R!kEaA!r&F&$Gqbh`CIVfY&e30f8apl&+(Gp
+4bJXjfRXl,K[m3FrfR+$c(T1Pk9(`Zqk2f)cZJJ(%[kN'Pk(1SfX1Zj&1dKhYedr
+*lfK0pYL'f[kkqLmjRIV[p3N(Z0bNU$A@8RX[q(mqibl1#ap%h)6Jj@Z[NQZ[BiP
+2`)Gja-dq6DecqR8G6cfDjIGM!*+pZ$rK6S5IG@TrYeK&qA[&f@qcrE'[qMKrJMC
+16bXr'jH0bJ%bFR'jH(bm2qbPSp2U`HMQIRe0$crHU1im+4)CDhfkYGVf@`9kYMX
+bfAF+fHlSemHS[@@fAG,9c-,UD1E"rXTqIp'Mr4Z[l+IpRpZrTIFqYQH6pk#rkQK
+R@I@bj5Yrf-1Z`D8TE"0M(UH04XPX*[PX,[QE$Z-YL2)0LI#qfh+db8TePDilpDl
+0ell2ic2IRbFc3CS9ZHPX1"2Vj06Z,,HfGPD5VH9D5XqhNjp[+Yj2Li8L,Ib)Yc#
+N@-faLAphB81kr`CdeKrQ4lDR-AB[dSGcU)eMN5)Z&H(qqiYjLhH,iNE&i8B#T&E
+[T-,F6i9P85DU0#VY9[*9$ZXpZM2iGI5KcmZ#TVZI0jR%am$6ieMLb)YpHAc1N!"
+RSrlU-"9PqXE-qT%$#%$@Eb64h29CfeDliGEbq*r*0iqpiprf09BmU4&&IKB@,Ii
+YpLq9'6"[m@4h1qNe@iRe3HeBHk[H@9(GITBriI`klNhA,PHMXFDbal[8FerEpSp
+erq-IX6iGK6dY4)T6Id4,RRb0,Tqac(fIY$Z[qbr*U(9I&#c)[$mHEPr2eYMEkb9
+EkZbPeQmYkbcXpPD52)Yq$Ec#TR4b2Bhpa8fRJ`V1Sm#VP4,'VVlb,hp(ZIqkcD9
+%2iBAmQ4FR26IbVq6K5X6ZShk,E5pKkXAN6Z2HhITdkHPdqPKD@YQ6,6k0#6rMfA
+LH69kNQbak@K52D5Hc[BGei-UXXkUdK5kRIe-ZThd@EaI#kX(B8E@Sh-+dUpMDGr
+3X[re'bRRTaj@A-LjFbZ1CR6rUk%h)`-,%[Z2HFHlipjJhpCk0(UQTbeUYc@@QVf
+0Vi0#brm)iU#ir4KaD2"VYV'eQbe@ce2Gq&+e9QIH5A#hm+A#hdDEircHUH9beUG
+c9@PCXCIJ8*2rmaB%c12GC-VcGMKfA'Zp2kEkUlqAZIr,2CN1DkqcD9pTY0C(KA9
+G0XC%q*1N5BNrbS[P4EkE&,[X8&CeGGph4X2r5-Zf$,Rp(+bXVQ8U@Rb16AFHaa*
+q"1a*1"2r&&r&&bTZ&)idh#QmD4Meh+qe4NrqdCr,)6iq9NmDZ[CYea,(!l$PFDZ
+`,(L6lQGa*0c2ql&ql&b*Yh)[CYh0[C'$AB[Q8E(r*LT)4ZVUmP@@aP@8kldmPr+
+VSE[r0cIHaT[me4rmqV[12KiR%UU-+CiXbkk@Kr*&`Td+lmfIk-Rdj16*jHhMF[A
+aZA'bC@4Gj&hLi1&McrbIbdGhePrjGBARZEa2q-hNEhNArBpKaF#ZXCec*U-'E+i
+hH3TGM#PfHI,h'I,Xl598bj-+A'K@NU&,L`YcA4YY+S5HZpUSH$iFVDE2C+TfA1h
+r#LA(f0V0hmlIbV5fY0aXpT'hAJd,23Hp6&P4PEACl1dXVHbPcpq@ecFqiREqI[l
++dhPTCl2DaTQSrPSEM4I1T(dqK11B0Ad-Q0Njp9r2RmZUbBf42aTq,HVkFrDS5Ie
+2@SR8@9+9YYRAfQiYpa,YYr2&BGlUleE6HfPTXpY'Q9IiD-VrrHe3AVdjh*`F*B2
+XQ9NZdV'-5XB2*Rp,q@K[rf09[aDV1Km60Kh[Va-UGc,hNi@,a+RMF5,IA8@liNQ
+lZCph0Zjl!DlNAehAAGp%[H08Af,JmQpjNreGMccdLCTpaC[l90)T,(EM-i%Z0A9
+mQ&XcEbNe@cN`V1aUYaCjpRZ-qcXl-faj09em+42[*&e0VSRQcl#K1rFN*9L%Gq1
++,Mh9GLcE(#QclkE1`TXN0,ll%A#qT&`X9"FMaGR*Ul+I@4UQZeGj+S@h`-C*,fp
+12HhI$-Sphm,'B5TZUcG4P2KPA(aGRr*(eG9Y(T2rTqVMcUl&N@,$'GK5*1&%Rh`
+J[+NQpCpNSAhmEJA-c[*NR$[X1laEh([I9Rd5ZVZrM63eZddYE4JqIe1UVIY$fT2
+$Ne-qM)e@khpVZEAFm+ADm+[YGrZ3!$GcDlrZ0pZV'VQGKC8p!,[8QI5Td2"rd9b
+rAE669[5mR"ZmcCc+ihIFMiCFcYTFH&aU8[@qG$Ni'CZ)mqkc0#pc0#q224@fN!"
+fXA*bXRS5,cS4Cp'aM6)9G*T@8'lQHa(idA1Qam1*l0G$bZT4Yrkf4CXRHk&K2kL
+U`KD'PLZSVk9'MVFjR@&9IXUZ4aq2amIMFE#`[3Pl5Aeq6b16kPA4ehkd2I,U[JU
+VQPcqGcqIPFc+r(,PlADlAD!*YU0GAGRDeqUe2DrYVCph[,,VhYp)K508@"i(PkU
+Xe9B!PAXYP3q9(e(r2#e2DGKmAbBH2b+-6`dCpYfZL%ecJA+"-$aG99pE!iP60UH
+kf0P*Zl$mhb2T-[`kAiHdc[krNI6e2cG*YpTTIJl6h2mqfqGImAbX2jhMr1iZ$X,
+b#mhrqGAIHAIr1mVb-+qrHi[NmABAR&qCX-2LqGKrjpTirPq9Kq2a,lLh[d-2Lk1
+NrmD65IU!!!#!L)L*QCLCLTPhGQH(H)KfKhGfGiL)L*HCPfGhKhH)KTLAGhH)H(K
+eQ*H(D*L*QCHCU(GiQEQlUCLAKhQDQkZjUDL(H*bmblZDU)H*`+UVUUQSH)LYUkc
++UCLALDZF#pUUD)L*QAUEZUPQChGiL*UDQDYjQTZlZVR-Z+GiUDUTQ)NJ!!)M96@
+'H(KhQCQ3!!N*"iK`!!#3!'!*!!!!"j!!!*H!!*C!)eC'C9CT"fCjL(LAPiD3!(P
+hB(N!PhK`LCGJJ!Q3!)!*#!#!Q3#3!*!!Q)#A#3#!N!#!#C!!N!#(L!PjH'C`!!#
+A#!#3!!Q3!2Ll[@E,BhqmlRD88EXie&[2([r'mHrS["hZmm5LJXj&IXGVh%K4@SV
+Uk0fIDe2CpVV0E898DUcAfmeQS+lmrqQDchaeK"24epIS-eR+DLLp5NjQ96k@PpR
++QlEh+1UrbbTffmqHYYlirVG(KqVUHqVq6cHEc2@jI4j9YTD2QE6SqVXqbNB20NI
+aqa0B[Ef(AlIFaBP*e+2RrfrqYThGYZB1U[jHbpq#G[*Hb!AkZ$kI$mlmAHffcJc
+f#"'G[*QarA"65*IG3GAHHYIrKMqRd2'Nf0MerQkkPL8[6T*ANk2eG4i9,TqpR0C
+"1b-DbJZ+V*UB0lqf$Ip'ji-2f[&mVQqhdZK3d[3SDVR6X&[Iimr"4mId[@[TRj[
+Rr8aGECD#Yq$684F6q,lm2dqE+fN%2M60RQBeTQBqbbS*(Li14i%M)f-&R[),+ra
+V5#PiFZeJch*p2b[8jrSiZaXqZplkP*T3Hp2rD$UX'C@`4X((Rmc(dm&[p'Pi1q[
+q$M@P29Af0diJ"E5Rf'cLE$Ck1GJ[FU4Nk(-b00"BhQ0XB*hY2GSXA@E(VVhf+1J
++*q#$UVbCV))ejMk(-aqdNC&$)i1qk@cL3pr,f8HKPJ&!9lfcLD@rbHR6jU6YGPS
+20efRSNB@*S0Yq(Hf((j%AKbpc"9Aq4V),Zmje0QFqPkA3K`F6YYhlPc%cF%6XCh
+*Xmc*f-%MGiqbJXX('fF%h#irT3[`hdD9kd5XNiXrD)pNZ,KbrqC%ZekIerKKbl-
+"[UI-fI9H[%R1`!h+q'GXj8QKYHYVIek1(&kP(i%ciIXE(8@HbX[hAQaZp[HEV#h
+epKf-V[-AZpTS,hf025&'k,lN&9aXEXS+L9"4bi*ZC"QmDfL@A)b,@*HF(R@N6"h
+[2f-I"fr1XTb#mU+V*X*f#40hq2ZB,,MBfCbCPY"3`Ck9"$pQ#Pj10D`DEDbrl-@
+NYZZc@FSG'8j6pYN3IDUXDKN6+D#M[*HQJcYjcEclP$lFeLfX(BIHqrfHT",r$SF
+H$c[3Qipl$r"4aFLFYHM8id+ebSFHEX[`8GabT(SD(@k'ebTkYRVA+RpC2f[4`Ur
+KrJSq,4mEd0*Y,6[1bXrMh[P6@,Z1i9QrXFrr(Ebpc0`8IS6N%ha+U9SiAID1(ED
+2Sb14a,cLHK2E24cpTSqM`lhLFEGF6Mfr%j0[k&"CD1*RUMd)N!$Sq*-Vp(dFE[1
+MMfX5ii'26ILR1pQ6XQ[fTDJ[(aHKV)paaCQ[em%2LieG(Z,r)XmcR@25jffc1KA
+rlA2RC8lcVL#rXmME`52,JUZ(,fPY"#iZ4V)reC1,Uqj-aTP%jrPIHYHlYYa"R[,
+JKq,C5p["$[*AG3CkrjZ$arXl6iFpNp1*05GeESXUGd@4KcCh1hXQbdKp#`k6+ff
+@bf9R$RE5bd-2Cf1KT0TBD'MJK6Hlb,1ZS2liPp[ZG@8prGFk4X1Iprl[Yq9Mp[L
+pcYZ[pI5de))3C-cSBpVFd[0PPih9FfAEHp"1mQAE!,P3ClQ60RFakHm`XLeMf@*
+ME5#PjNchVD$5d[UbVEF6YYi-l"eALDQcQjI'U2GZ*0IFGElhe+#G$8q&ZZpM@9h
+592(Lmf,+U-ZC4j8HSSB0[MH9U[mr[pGqE2ihL@@4(NC(F4l2'SkH,#PdRHaU6Bf
+-Adjlb*0()0hQK$8d1EcQcY,$9fY*dHEb+(XYTfdI2FViI%KmlTpeLdfhChhk2Tc
+hT`8hQp##[a-DJc*N61biNAPifYTj&hc[[qY*p6AGd5LNLr,4r*T10hejp1f[Iad
+[Ud&$E9(,lkMjQCbU$[kANH[PE1JmrC8((fhq@CErQbV'Jq@[LGA,c-E+l,Ym@qh
+%eHqa8pU$lTp9+qKCbVQ(Ic)+6ci)Fc4`6X[5CNUjcI0j9,bT@Cb+AN5l@(Da1df
+F2Ca+VIAQqaYaSGP6f9lHAZ4XG0h854ZX(GC1CEi0[cV,4f86kGMSl'*`k2QdIYC
+NhcC[p&c1qhQ5i2GMe2Z8mEhBP[,NlMFSl5Nq@MSCAcZ"k[UbUHQj@2Y)Qhi21fF
+6"[HKYiR*YrEXBQ41HjAc8efmhh-hfmhFr&lNj",Urd8X()[1K2A1p`HGSi,Idc3
+DD#ZqTkVMbphmIhmeLpYhDTVTk$Kh-MJBqVJVr9aSQHQ4*f96dXSdApiD,pa6i0l
+l9R%p1[C9%6TC[5mRfqRSj0IhQIpI5k@IT1R4d23dh*UT9M(ceK+XUH(YDI2@mVB
+p(Qj1CN`Eb$H3!&jNjR+rG"Qj%ZKXTF@#M),#TCGKEEVTm56fZkkh0Cc4D'GkN!$
+VZCGqG[H"IH2JAf&NjF[ra)VGP@@QXc-,[kALfI$ViGl#Vk@hUD2F5++69h4P@Ri
+[bdPMMr&cS20`ZI9Ic4UDZU0&U,@XeqXepR(c[IhFUbMjfijYac,cLlfM`0r'Z1$
+i2M5D@lkbJ[Y$1"9q6JA&eZl(Ge2MdZ"8brJJLc,DFem,@cZTRU[9EZ69AM#IkP*
+MapVj9rcrppGH9eA59YE0eQYf1[UlDVMjhZ,b8!D4c,[QAh'hr"Ki'fdrNE+6TYf
+8p#RIPKr2iYa[F#i`URLdZ*!![Ar0lN&6M3CZ,+KDkGVTl@D[GbU$`Fplhe1aQiZ
+DT12aBf"9AGAG@GaFH,IHId2e6QYq6Yj2EH%M)dIbcZ2D5)908e%+UUkVB90pjY9
+Ir6V0E9kkaee*FpM%hr1Mq*edcbUVAEDRM8H2hp2YZM6aURQAH"kRM5D,q3a!D)X
+rNI&ci2YBA3U[R4UE@e%rACR&mf9VUVipGp+(iHH[FAX1Z$qURaDDlpfTq+mqMje
+6rG*LIbPc@Jl,18H"jY0JG9cHPj2FFl#KEQdUCf08aYhfmR@rcGEHqaSjiTV'q,*
+JqMKFl,mQi`F$Im@pjQkP9F5&Ac+Q2#RCGM(cYPc,MQAH*HF@r`X$#`F$JE$%qT*
+Q[R&DGH6hDr2Y2Kbi2U5S[LI-fqje@R$Cf1bqImqNZ,#im+E`+2!i('iZ$aZ,jZ0
+LBQea-6dC@Mm9)N#6E(rY5%Mi(&`52lA%p'6U0ia$rjBIQ5YCA9SD(Ae0YB4i@P[
+*GI(K8[0UHCFF@q`-+lPIb5UIaNHa3P%"@lLE`-(Lhh-hQ[XrJMl@a5&Gp0i'"5A
+'&XIahfEf(iT2DA[@hZ,SjkKkN!$mLh`VH0JAY*IF'FZq0i'dU[JYU[AeHdeQYf9
+GDDLEVUUNedL2p'qa[MPD2HpACE'(0Pe9PTk5026GP96GPCA8Mh1Ck(UbY2IGAYI
+Z3qa%[faU)ej5F+F`k(9cHYQlEqVrqq[ml[EEDmRN3Z&16Pe4l(Yj@N[qVVIe`Z`
+SIPd[Lerjk6%ihpd6[m,mGaZVL[hYI`++93H1daq*YIRr2YE6pQZVF[MB@qKi@fd
+rQE,&T2)553$rmGc9FAbpGSX[JrMLhXV,YjQ98a0V842&Lmr5BYImmm#P'#Aq&GD
+9@"`l[KBGpKF(!`H$KAXj[Z,H`VhLlU0GINUi9A%cY4YUqAPe&a86+LHT)Q`U*kS
+LGa&`XR5D2&lAb992m1lXVr#haJ(6`Ur'M4*'6(`1G"EaFD&(T,'ASGI2kh89ZcU
+[hq(La[jd-a)%r,R1McmUJk9I+Z)Nh#T*N@RXmD6f[d'*p[PKdmDZUG6Bk1Te09S
+UZIXjq2#PaiFZ2#hea`E,Jf2#UH*8mLP`i[$L9q,3jTV(CkfdlSBhaMNSpj!!8R[
+5-E5j-M(kHVp(ZmfCHUB85HY%mZ2i&c86X`BQkZ9$YZMYrck'fPq2rR2fh)mlf0(
+EF(dm@JchVd&,k[C8h0S,,QGPCmZJ[19f@lNd'$k@,hP"aZ&l'jS1E[ImqkS2IYr
+CN4-pX1G%qT*fZFIM%mkBE1PAmUebS)IS!(kEPKfGF9NQ`c[Ad&p&dSGG,bUIrl5
+qhiRj*Z$L8h3k09ciGcjFl"ZYhNG%CjlRBD)CkTI4j-UJllSbYT%RI3L8["aYc6e
+9r,NI`qaDD62GGpllkCYIYqpZiRjk2[Ch[kE)lqMlf*qH[hIfrUcI9,NYbIf9GVC
+H"aVAYmAZ1V6Mc&prTrYJf00Ne0cG@@65h0eCj&0"ZVc)d0cAq2M6m(UqhFmd!Ik
+DIr6h)RqRZa+rJj%r%h9lcY$%hY[ck@*[krS8X6!U-Qkpb*dC1Vka'DLp1NXjIGI
+AiIhH,kh,dfaf0(U,+deY9VGA'ee"'MmZNr6qlh2K[qKdkf6AGDUrm['bIIJqYMf
+&IE@9MDE'cXmbr[+V"[p,Ym(aiH$Il$CE'cf0RD@9ME@&I"XrDpq$HBhcC1Xck+S
+(RdmES#ZMKqGqfdY,2r8C%DcC9ZCHAR$N5-54F5UUbMaDUTakq[JrUr6lm(RihdT
+-(A*MZ%GIrcR@F&6L5SqGa*PG"5hq2Ch0RCC0Mm&cZkV*XVQcm##bmZ#P`TQZbj8
+I15UH&LHA2D[6cFpT*kFRY6TjbId8r1IhmAq(eU+9UHe1p"$T1T4H4c,(#Zll!m$
+@e0VBC@[U2KYZiSpI'YE(,iYaJAehK@2VH0+Ke",*UMq5Li10kImZlLqjQm6bmh0
+5GK'4"dI8S[#rahrJfr(U1E85Ur[+r`rbFD(bD6dqR5c,QPQ$"*(!'!1[b)P[bVH
+9$L6G4,T)P(6fr6h8RAe,6KImF$GlEM@2$Uq"fRGf0T)e0c5idHUQ4kRemQ2)ai+
+['Jf'feG[DrNrZiFlje(cDrMAGjrArKidRA962#P45rfj-I`)+q&M8FHSLc)8HFU
+CF12QlMPh(+Zq4IBGpa-$Ji@r`Ki`F5ka2Qd2`5Sp$+QT0E9U[Bh+NAhLD'9r4`G
+0q1hbBIKcP0U*ZIeQUdfNMq"(lLPKIPb[rQ*15V#*RBh*X1+&cq(k8RBDa6[Mb[V
+E(6eYA@f@A`+RLf)G2(UV1rT0Y)QprC6I#Uq,6BN2QD@bj[4epIY+RA91YXUkVVD
+bce[f2#NpT@)JS[6Sj[*Tr!bBQfL9%j-R)P(X)NhN42!L@q46fq4qh(bmE+MpY96
+2JZDRlFRYkeTV2B`VbkiYKbkqA5C9214C9*Y+AZp$i-pIDVl(P6q(Tprh@kmb`ip
+*cD5AFdh[$0U#'(VUEBl,rrm+6X+jXJj&m-4GPaDR%UH5-Y([feIVkrAEE@h'TQl
+,86GR68QbNE85"Be9VDRTB&PJA@"[EckrVI8Npa5P"6QSkG,p1Rd2hVqFLh%Dhf&
+9TTZVTTZcTI,feEYV'(BB9Kje*phlhpher8`jh$UZ&Bm+bK@'jbSfiX*'pfe(G@0
+*YV#`X+QiT)Id2Z5mV85EV6*l'UEU4H0Qmj8Hj642Cdm6m&6HqePlVp&A%jPIlQA
+4ql8D6r#fp525mc'l+EMdI+Lbk!2Dj&ab[5Zq*k9r`H,JEl%`YebH(EmRLer0a+1
+9E@dhhYY1@eV&fINd[G99RTr`rArQhFV9l$V20edr0LKrFEqlYm+Sa)IeXV"KF2Q
+ifqhqHcHFcHFcG$06G&0rVQ["Mj9c@bY9fc*G2hIZ8f0eILlV0cQEQmh3d8e468H
+2"(fG4P@ReUrA6QYKkbXmL60659BQRABH4X[KK4r'NcmfP9Y$R)H#k989qLkh0Ch
+4D%Bkrr-ZUefRVUbde0ClpGXDhC9YE@9fXePpDH4VDbZVDfZV0EV-[MA'*hpabE(
+%Z)dLiTE'lTDQXM91bXrQbGKScG*SMQBrmhehYVLchXDqUlkF`UE"iY6`m6T`ZCp
+RMb)phIBpT(f'cMd['PjR'PGj1DZFY)ZTKfHQUp2p$GbE$5'25P06Ii4k8VLqhqf
+[VM$MB96bjcLd[UiN+AVr+KH[,k([bip6+Z4bIcQ[SkI0e1('j&a[pY`Eki[YYq(
+m2FbGM3*+C3p64-6BDUkd@QVG4Tp40dfTR)YE#MDQ(4jHqlUpm'km(GH4dTqSTG&
+59-r8dQLTU1IdeE@Dc8cRmSm824b)RFbI"LGKHqa6Rh0qKlZ2#fPcAe8U2Ae8ZRU
+,+C%f%1!B'TdFeZKfHKLGMSGR%h9r`FQHY+IGAppNG2lpKJhf2SV5RVq(`Gp[3#A
+[')*`Ehk0(bFI3d%%EGFfC9pP"$XZ6k[DFEfk+6r6TCUYq#TTkAj+6&cGhiRrUZk
+(&j2Ui20PeXI2602"RXE3`3mDPZ3#38Z2#k8cD6X+#aj&[9BqZRlQa`q"MeeEdXH
+B3F"hdlQaj(!apG26Gc8mLpRCN!"ZJ#@q`ZBH4$JKj%l"RXHQlk#T[1E-f@dJkVM
+IfrqpCqLArE*Nr2S8[pDETaIGLDMHbYC9d'YM8&1-)'YTl(#aTZXMem@4M3V+28A
+&9M6YJ1F#,-RidHF`)F[4Ifj[l[,qlb[8j',Ki[%PIpiNr[jGI@a)Y,ZTPKCa+UT
+YmDUXBP9F8H2@9%5T`FHZMe2'PLCrAcZXMjcbCN6rVdB9'CT1UTINL`SRdH48rVL
+CfJU+MdB@[C&Tq&39%IX,IYX5*He%QULQS#+1C$'bY96r4MBI1ppJ(e@Tc[fYFJA
+k0G`X2RHm`,%(T-2'Ni0-KZ,V%MRDHPLA@pYmI6kH*#[VlN6Qphe,96Pp`EL``1$
+bm$JqPjpGSp9AD,9jI"hmV86p2#[GlMDHHTl#hhZ45ce2Jlr"jfSKX(fQL4VkpQD
+I84*cIm(j04AD68ee$KmAJm,%i1rjJ1p628mj[Yl-V*kRMEVHj&0SDHpVppcl,p8
+26Q*6Uqaq5N[[rhbhmeAjkL`CV"c8V9DJjZ0"'kG,b1)+-m2KF6$qe5IDT-)!Z*q
+#Ni[i+6mG*kA)p,dZ4bJ1mr9DP5fJ!IT0AUp*UmV9j@UeZ9U[fGYUG6AC@TbY6UY
+'!-MXR6kT,b%ldkAcE$IhAJf&P&M90h13!,lNZRd2&R)9h'UD@`f0eGHr[rTI8Qp
+@cjqD$MrmEEMj2r(HEEMrUKpNbkr216Vj1Jl0*'ZUq623SP'*%qd459(6TFH*'bT
+P2fG*-bN"AS&1JTfP2f[fjV@SKThj)F,59mIhY*Ae(fjlA)*d,3Rh&9TBX+&dHeq
+VS)k1Hd(6QmR3H*mf6ZqhA)KLp$88qfjFb*8F[)e85pi23RY&iFl2eHLKcfSdm+H
+eFp1D(XV+FRBqGVjZlP9IClZ2#f`#*X#0[0hA0Yj[HmQ[U0l[i9I8B&[B9&[rj[,
+h0e'ET-h8FiI8rPmI(qpph3GkA)pC8I(5qRm-lLIGd&b`(r,5iR`c[TrUKr0BCrT
+dR@f(@er@d@rkrmR6brTFqDR#b(@jrq0*Pb,LlZlVHlf90`Q"2pe*i&9C9999de0
+TZI03b+D$U[ikA88HQLaU[q5Qjm1G)Rf'Iq1NbU#KQq*5EqTXGcJpcLjr3T($QqR
+3C(kSFmFYrACr,Lk@I[1ZcId[Q`mrjQPc8UERckV0"Rrip5amlLmALr[MF,55Z`S
+Np[(9I,1F,ZY2TYYp59#lp&PeRmD2EF2HLQL0G6Q"a*1Jm"Pje'AR5ThbL5r-crm
++6XiYa#Z1dde*qfkU,hYre6Rd8p%R9I*4GKQk(19(pREr[qPidUDmY(Bp9mG(#Zp
+,6@F+lQ[4Y*+Cd1ekRDHJG%X@C(T-DRMGET4HSYZT4`rcC8+fr(4b2bp'rpI6pp[
+0&EEEcZET,DfYYImlY+#(bXUJU[b8%MKHVD@eRYIlq9k1cj5S[emZ9"R4P5Pdmj,
+SX"ir"2Sfh,4'GRe+IQ8m2fD6XTPKrPTZbi@raG(0H8m)q6Dma%IfA8eI-hf6h85
+kM4XR3h1k`1YrqdQEl#Ppc+Qi2cdG9l3mV2djk#kmI)k2$ap6Fe(*aXDCN5qM+Jl
+#MQE6SiqcTaeV52irCcASfA04'dr8l,LhIVj8M[VklcrZ2$A`HUL(U1Tf[+YXU`r
+cd0"q1Mhhq@KS1ABIRlI$If+6`I@F8mYkHHjpG+m"I8I1U,S4mMh)r[Hj(pQ2iH6
+%qEk0aLTfC#(IRkr-pQ1)HC`3mkhbrC`H9ZEDT`HEU,DhqREEDrpDHbYR2cfcS,,
+ImhCDrDmX!S#XcJJ$iNM&dY0EAZmYVUmpA@@ePHF[EG215C(j95f4PrTJa[damEh
++I+pbLqUrrDY*h(X)Pa-j,TrIpZNTm1`jqQTlVIj'MQZ%i6@erb40#9V#ZmI+NA0
+MGpIf2ZB-VF`4F('e%&Ip1#`[mKKJiP9[mEC4pK,!+!V-i)!q*)jfP(,K[)0YHBq
+XJUVbAYZRqhRcrqDGVJB2,j1*c1CbjNc2IUd[kU'4h1Pp'Hr-ShjqYYGEVGGUpA4
+4NlJI4dRjd'K&$YZ6`U6Hf'fZSfrSq*R2cGK,NA1DmE3qb4lXDIjHbKAICdeR&Zm
+MprLqGHEcc-AB5RaXdTFMf[iGr9`EIT35,c(lS#X&9Jc0Q#@9Y0TZ2dIfrebI"P[
+[22RriIQrVp1jRGm1X$SdX[4`S-ha+[PF5bjAS6ZddHKYG(dErJm6"hhSD,CD24l
+(4k2Ek25@HMk20Vq*+XG(dCGKSiP,0qK%Ur3L@A%b+fjX1pPdhiU2ZI4lQBR#M8G
+0klqh@IlHaV0IGmAQDr1bEDPi[0VYIGhrV@HCLf25aGYQHaArlGpamUGaELf`E2e
+Y[EARPfeP`qAY,E2F[@kqlZrBrXc8RZFC8RNjIZ`CIZamY2@AR1YrHrhEh*ff1L6
+l6TdmbLQS-UNpZPTm1kjqSTlhLGEp9j5Zeb'Hk*lALr8H8PDj+*,XqQ,b'5*YVZl
+kjmZIqIch(%Zmm5p9d'I)JpB+CrY1Ar4)jQjrjihUk6AemR-jP"#jG"8bHbXF2eY
+MVrr(j[RCU69HdTZj[iklB5rk*%cFr$`mI54kMfB+19(QjQ[TkR$b0M(qKlIcT1X
+r3K[fR8GAZCrhABjl2ffI-de(GelXBqM"qP0AhDr,fQ,Pc"q3!12&%5q04HImP"R
+l2eV6[YYbI9S1UjY"$jP"6FVXUVP8%MNHYhP"Im(&h(CF1prbXk$eDrmeM3IVR2C
+ViR962f@hZm[lH,U[F1RA4(6V%lDUjm[m9GDERClM-ipjbI&NHRdVAZYRZ,6Fihf
+G*m%'`PqM*rSpfEpHLV1e5aQ9j%lLD[%TGM'e@aM4GEhHYff[Y0IB4mlJ'bI6ak6
+5aFDH0PR'b,RcXEb[Rc2[f[qFcf*8Z9rlQIQcq4pR@Fra,,fS,Mp%H33EZ)pMZXH
+jMEdfLlfC8#!!Y+V6DCXcDIrL,8Ik4DRDI95,XEeH*Gmm0CJAHJp#9q@cb,5jX16
+Md&bRKTFj`H'KrG(%bGR%mIHmrC410ErSN41E8ITYkIhj[hHjQrf3!(XbrYbBrkN
+q,JqH'eMhQ6([ZG(h[2TpreIqlIp'4rp&3%V,b),M)Mh'66h@64H0pM@9fie'iV0
+c@9dIH4jrMf1$IAq"[0R9j9V9GhC6HbQkUFXi8DGmH`Nl$+Bq6R8SZ&N`@&*-TDI
+1AATErLF6UrlflJYIlb)+KkQPZppjfki8D0`Gh`F$UrbYcqYpp$qLkP$BhIfUDc`
+V[VFqh1krpD(G,e)YrM8Y20lU9P6m60lUA5dp9e[GYd*X2JFFmmQSre6l`$91r9L
+hcCZ26*TISDhkSrTp6rXRIB2K#1NR'Mf12(X-LRfh9ccYhmbDRrG6EfBp+,Q%b2'
+&c2UkalQe9r`KX02fraS*bNjGKKh@rhpla1Ujch0qcrBK[4I,3e0hiY0ChGheR@1
+aMLk,rPMC"QU6,`F$#`Z&KiHGLRC6#f[fj1Mq&GRRdkcC9PC@kM88999I&IqE,U[
+ic8QJrqNGd&(QU*Y@KRE(`2*fI``[!iNQIrr%Il#LcG#cSGch[HAp$DI$#m[$Nf(
+r6%!IPLm[Mf(hD6reb1ki2!hhQAZpUCG,(mXA$-[RDUmeQXU+ZYU+A@h@[YlDhMc
+r`1[H[TZLQY!DlX$IHVZZA'MFVGmV!khQ2TCA9rYBZ9r,5H!fRVkc62LcL6V-Y6L
+@j6ahrLCfl`X#qiYac+VQaCG4m%%1&,M@eMVk[@ePEADb2eIdT0CQ,pZ-0cRFq"h
+@G9dQ*e2PdYmp*e1XkYh0qerFa1CmY$F-cQE&h-pMqpad3,d3DRq#lYYj(iI3MmA
+fSq(qLRp,V-YpGXNR9Ia8XQCI2J`1I(`1K6m,S8@qee9mAclrMHELBRdpEXkfEfG
+A5H6HH0*l,id,4'0kA3JhY*N8Y2'ZTHSTmha1X(mJG8j+TIN3[$#AGhqHQXqCGpG
+8[Xi2YqQQdZR,eFQ#lbBphcUIHmkLhVqE@GGe%h)GQrIr(Dh1AI1ZHfeFU6Ar+ik
+T"e5Dle%L&e4IKq#QXq,GpEX12J@YCPmMckl5C9C%l'VLGR&U-I,QmR+Mr6LHE4M
+E&e94,Qie254XHjl@9THFEXAAD(ip$`Gp[me[5#EfqZpj@eYEUG6UG&UG6SjVRkA
+iL4pH#25D64kVIErUY6ACGpIEm"2"i2"qh*e(AjrElQ*3LlRrKYqCZSYK`[)XYlj
+&RGq4Ch(!Zl[Kc2JeZYkIqr`e2&r*a[6NaG!@YdB+r@al1RKF(Pm2Lm$cklZpEVI
+ear!k'&a[Y60G9r(VT0&ma5Eejb8)aHpe(H9[GkhCrkkkUkIe[KUF6`"308GJIS(
+U#LI-apC&+-#1mlKmAc#N1l&HIkpG(m$0rckl@l2iBZ)$-Ii,XqaD02qdjMA96IF
+bqKE[d[-i!0-,cZ0KFE%qeGL8c1H(qUFeaF2VT9$5*ljZakP*#[UEEd0jZULGU0,
+9k+KVq$YG&$d8243mA2dr9EIZT[3CcjH[r4+SHqB,[idPI`8)ZM`HiU1$E`VH%$V
+ElDXU-A2rd%LRmhQY"qMlZIrTQXeRBe3!c*rkl$`lcGq,Iq(i2Kl[Hd8L$EIp6Yh
+[,c`r&m+qZrj0hiQlST'lh0&Il[bErrV3H$[2&[r"h9hZlVqHrhHCQ[q-eQZPqi!
+!!)#BQ)L+QCUDUAH(D)L)H(D)KfCSL)PjGTL(GhH)H)H'Q*ChGiKiL'@BThGiQBL
+CKkLSKhLDZUZTQCGhHDQVZlQTPhKjVE[,bTQBL)LlbUUkUULAHDZkV-UCKjL*R,#
+pUUThKhL*QBUTU@GQGhKjLBQTZiLB[0h0cDZhL)QDZCQ)QL!!!L-e9AL'HAHA"j!
+!Q*N)L)!*#3"jJ!#3!!#3!!!!!!!*"8!M099RCfH(KSGjL!J(Q!K`H!GfL!H3!!"
+jN!#)#R#JJ*!!N!#C#3#3!)QJH)U)QCN!L3N!Q!"j!*S!!(!!!(H)L+J)GhMq'je
+Hbf0eiRd0VT+AZDA5H*ieei[MA@Nm'im6`Y*"A@FRBlE[,0N9T0EVDAZG96GcUUM
+A8Y,592BILl$X2pDVY1el$-I*V##FD#6f[BGMTD',mX6f)GA-kQ,eCIeZK#rEQj8
+b0l-p+j02qb&Z[5cXVm1HPAGlkqJPH*2bV$NFV%a19L8%,NjA*PD1JTm'JVX$PE5
+MXr,`p[q6pRpmlJepAmhElL,T)Rbd0Tphh*Heh8V`1V,lq#&m8%EiS-j``&jLrPl
+ADlVCfN1dKHTLFVdJ+c0Rd)0,G6DrUc0`K(+lr[r"jrNIG`IS9RcI-USfNMI(%Qr
+BKpVBqVDd[SHR2F2&h%&2GBfaJYE2Qk@dZ,2fi9T`+hR6eTaDMhHPDIl`GAR!3fe
+TGff6RE6HAZ22`8[)aBqBj-c[T&TmlqkCJeYEfY6rYTSTEhhrRISTr8Q3!'BaB)8
+[Uc0VeFEDG'#Zk9lMpp"EHE"Ylh(fF&G`mC!!&fN&2b*NS%mUdc2ir[rrH6Li1aV
+Zdk2R4+%)IGqpIbr!JLrU#SaTrUimrd0RRjq[MfI!b0P)m6&!,EAQ2eH"NGAJFAc
+B0jHmh2pA)d%&M`mDLJTZ*,YZ[m'$UpMfP[c+&e423JX254%l[C`lDjb1Z!A(pm"
+I[G+$i1G0aTQ2Jf@blAc+V6[l&b(DA@fY,DZapM"Cll'f8&EHc0c"R,r#LFZeTCF
+Z`Qq4T-(8ejR0daCmb44@QCQG'#&-k3"1VL`E$fjS"ZjXb#BX'PPprei@,p,"Kl2
+-qY$cF*!!bp!&rFfB-%"G,qE5JJe'dl+Tk8rRi[ASI5aIIQ`H(Cj(5!,`EhL@hQq
+$AllCplXp"YFr)l'XaV65B2JlAYEIQDI6QCc8HT-rkHT-Y)8f2@cBGR-KfdZ2E5i
+GlKHhYBGraIFfF2%YrGf8I'YZIA@Q**MHj9aB141fhYbFp"a2,bGT"HqKcGV"GHT
+M`CM(Jc10"#aS-j0JM6B0,LfQQmh&rkr3`G6+l6X1adG!AT0aV6dDIRG+$dE2RGA
+h1V0cd%5kQCk#NmN"',U)-[HiRMIMe22e@$j%(crbrQlR8Jbh21p$lrhZ,2C2KDQ
+GN@m+E1b0j'QjZ4B4TNp)NaTZ966Ck#NTTN+#NV-8JX[1380P,!9CB9R0cY9R)0K
+RGGRB+5ei!8p5&6[lHkQj@rhPk!@`iFc+[U6KcFUqSEqESGV"%iq*Ll5Ulrj,Mb-
+lJplhM8c(rIQH&#aCf#KQcYT1cFU0L`p6#P3pKR0V$f'GfN28jq[Kl$3E+(X*rB`
+p639X1Nj9*0bTGC!!k6&UiG$-N`pK$U*Z9M34-H4#aZiq5CSF([0XCD'Z2-mMKfB
+XAcf*KiZcJTVh'&(GRN9X&e@mhGaXRGjc*p'$lZ6BGAfl$Uj0MDA94N@F&YCiqbJ
+TlfCY)-aKiQ,Xj&PDqhp[5B02p!l$58rrfFl&fReTAJ3CMp8'Ck2$aGc"#[jD!Ze
+P5YTDI1JMIZk8(ll2peTq(&am(kGJM)MZc)JXf'4BfRM--VlR34N3AUXLkZVRH5E
+1pNlbX[k6HaF1Kq[LdZG"YGrVZqE8`lQhbGA([Dc*r0q6RIEjIlUr"lbaqEkfLdX
+@+($j%ImeEk%f9"'P`D1$-rYTmAG3CQA"Q!"iS&H*M61EAb,VcmIDb0Y+NGe'a-A
+SbV5&bVHfj@mhh+hN23@HEaEqPpkc`Dqbl,SqG36mEVa1AErPUlfeLErd,bAV)mp
+iNL*p',0c[9pZdrYj[jT8bA-pRFj0T`qGd+k(6lD(@@-fSMdZpQDZ4PppalQ&EAQ
+[i(MmE"T,024M%q1Ke8jT*f0`lfPj(RdQ*J4-6!SCHecH9LB@LSCFU'a(MT3G,Qp
+I`2ATYZZk"m9$ep0bV50q#RaTrT35I4XmDIpq#6qQ00S)+'A"Qm@41c*81Xmr)f-
+MqcRq&p$r,[1p*Y&Lr(3mRmrjqdVZAXj9aIqYSC@m`T9KKGA%S)f(38r*Skh#S0h
++bh,kZ"kr9i(XG@ljQbS-6HIXVU$'UrCVD$hk5A9`qfN`p(DE#4YU2mAVqEhdjEm
+bQT!!*'Ai@Dpckhp&G,Y)APiX%6dKYHk'#&Ld%'DPd%'@KB8Z9Qj82-i%E!QE5Hf
+X10aDILcGR#fN1Ri&GGieITDq(@hGYEj'bcZbKq*XFpXBGeBAYMcDl39X1pNhmR*
+VCqXKhp$b+6R9HKUiI)RF5Kpb635BI+aE6PBX'0-Jk-b4djS!p*13!1Vj['lrF'%
+HPLIaSIVDEeF,qMeI8a*@EjFVXIAfY"`q,c0a3BP[l1hSrIX2DXSF+KQH&@ipTCi
+pT53TQEY1aTrDMEVr@fpR25X,KmbIPF(d2AS-ake"R1938q*4e'&ZY,jZ$rI2IjE
+(FT)!69GDJl6EmVClUa`4(U9*j1kT-193iQkbh,fY"ih&pICd($ZqChY"L@2l,-4
+bpU`Kr-aE6ZDHE)lUYQb+MfHY4phJpjhrCqYSY&$LGHKmMqhfrVqTG5kq2#[-ACa
+maaFAD3maaCHeS*@KY14lN!"b2F8'Ja-$%`Z4,Ri1aiJ"ChKLh0%mB!XpGBZaPH0
+erai1UhRCGKf1JcZFkm,q6$YH*FHAFhA"[,l(kQ,rdXkRCDb[eHYeHcU1VI9ha9Z
+iRDE0ed56R2'V-(@Edf!Xl&q5*Cc2)df4lmMk0PMdre+A5kbNd'QfP4e-2ZV+AYT
+kA9b-[6BP0KeFlI9Nl`V'PXVI`I1`G0Dr-S,R1j[1GD&r9[l,HlkVmDQZUEJdq,)
+d9ELb)f,+cI8`+bmYE(mILi1ZYLSmr&kd6Q`E,'m,c+cQp+UYGEACZTUCh@DlBkq
+SNCHY`l+A6p'$,pj&Pe%V9e@aehI9-lAe%6alDi`G2[LTTi36rY[V+jZE'qTVk,a
+iA(R[CrG)e-LRPj[A`U21G[TkMZ2Ti1Qm(-G(cZfcNAq-5C!!4+A$Tr6U,kSi9Pk
+8M[,,fTF[SJ(aZP)VCI@ml"VrTQ-dr3pKR2EepV%lHRSCkTU+I@DcAp@jr6'ZZ4F
+bpA"QlA&RBdHNddhS3q6lNZA-r48eAHakAGak[E4l'`aY0(LAN[Z04)lIMB2FIb'
+$HJ#diH2j(HqhlmMc,,*U2jDE5d9*TpEeElImHk[[-V12pQbipeIl$MmDA2r8c&[
+krcqe&#h"iIm0aU[Uk[IIBfI8mbbmbb[GYJB0&p8[r0dHASCNH0emcLkVJ9Am-@$
+8b0&CB[5),V+M9fHVXYC@p['lM`-(BIbpPEmbIRbZ-Mb2"jh[b2`@AYp6qDj[H1,
+Ad1,[*P4(TT1265+c1BeA"69NbSJRVA&kPc,UGI8l5[fr(mrMm+ARrV&QI1+#qRi
+2SeRi,,m&N36Kl[djHUm,jfhh&&Tmjr'&FplpVak@aXE(kHEZBPcjGrIAYq)+#"T
+JXB,J,%'4"U,iD4)3c"N$$blkpGBJ8IL-d2rh6E,KEqj[V,$TTXE'RXYfA4bhc2q
+*b6UTbPP9Q[TkV9kh@e%MkZ$6H+8VSG(f%,Il(r#*CIr8l[q4IAh)i@(jJS6YCHb
+kQ*[q4`llK6YlI4,,$f1,d*(SeR0q2'`DDhl+hpHIKD2V3[Y@&VB5E+hL9R$TVq,
+b-VDdR4P8R4fY0VUc@cY2V*h9dm5TXj(H4C[[b1fiZ$T,M09ZaK3M!'Zf9*6Dc0d
+pY1eYe[Gr0JlUXQp+46qekmZMZFeY[a`Th1I,#mHKXEQVi28SS[F6e&#JrkINqpp
++GTG$5jA*LB&,jmEJ8Y$[C1aqPJk1kc96dTljfMkfLmbKp2p@KkGp`rYqM6khTDh
+hpA2G5`XU5plZA'mC,2BXJeR(dIMh@dVZTaqmXZ2hP0al+rXZ"2EflK@YMTqpfAV
+dIec@Xc`*rMqR@ApVJHEVTrUAI(Ym2HbkL(SkH(&T*YA$fe*$XmL4HC-1FpH9ijZ
+%4!AqIIirEepEHh[NkfLd&6AcqXh%rV*h@8&4%dp"86fQKjH6@@%ZRK8m1HT,+Pa
+D[1aBG01h%5E5CkNKlD[JX[2jY&(Ym$&`DIl#9kK&RAEMAE1kZX1laGC$TV$(TSG
+V3j-(#pb4a1E3b0l6BdD45fXc251ai9r`r%qejq$hIma0c0jY[arBefdUU$UFA&k
+Ph-"h[FDSKlZRKfY*cDZ(jY*$iI1NFRRjA2bZI$VC10C`kkNakb(EbIEJmV"eAmj
+TkcJA9T8E1SSULLeFrV0"8jqTcmLXaJ"b+bl[E[Im#ji0VaEAcl+qV,k#Y`G2f"i
+RG'F&IZhq*b*G9"Qre382SeXfIJrGCqldL#fRfj%H2UZ0Z-XE%QP(*eq[Tj%'fY+
+61BZ96bi3hI2fjhGBAMIVd%V!iRX6qkZm'9Gi1khQ&ZV$$P@'(ZU6%h9$bj9$bpe
+P[@m#JiH"l'jS14GrXf9(bYjqfZS1V9qeCC%Hhp["hAB[5TGc[Rf&TjHFT-,D5F,
+DG!B'U#&`k#%a9+cIGapP)VEfEVS*i95kjLUADCIjY"FaG'(ecCbGMraNIl`BrZq
+&qV0`HP23F#Y(VeYp[cFl"iQHJX,h(cpT5F33le1KJdBhrjHkK`[e$IeQl111(Uc
+rap[lrBB0&Q1dr,qDKL#12KIaY2Kk-2&l5hQ`p6$T*[3ajX1NQC8fFr`!V[1ITHK
+lhdZ0U-bekLFHrj1klURj-VZV-JM)4bC94KGreSh*qPaV(0*3+0jV`XcLll%qRZV
+Rbr@lH9FF6Pd8Uhp$PMJXp6P8'Bj9"QCN'P!(-JLid16M3kAP8%lke"PJ"q[SD#m
+i[XG[3F(JHa8d($Yr@q[lAKCV"T[Q**Q,rc%fq,h[pPlq6cr@p26E(BlLYVpG6E5
+LTUV4iFpcrKphS@RlkeM#jpZ#2)l$"fIC&P`aGZr$MBpTqQRbIc8mD&L9YCHfePE
+A9R@hYYTEUkMA[mr3[IjlfkcPeifFZVURZYp6h9YCfePHfG2b)dDEprdDIh,5dP6
+I1`DcXdB86iJM-QdrI6bpcXl'[VklC9pGd0PXUlSl,CE(Uh9YG@ec`VDfiGRDmHc
+XJU-@RV*&C#KC2frh8k02Ai1kl3Y+KLpH*0qh`lE'fNL,,P5)h%QE1#YZXIBfQhX
+mMk02DElUfQhfi$UlIBeIeCZdN4Z2-emLHaC'AaGI)TH6`,MdlHKZr6Yk5h`,H6E
+m@l!*ElRmQjqlZIZI3Pk[9(FQcN6VD6e*YCIA'rhpVjqlUUEDl#Q`qR+TGIhNQ9j
+Q[NbUAUmM8l@QfP4VUM@k[@kM@892)qV,Rk3R2E82bD6&`r3lrEaF2p0PqQb)*b2
+SD6"f&+4h2d2bk6Pc2ce(e*r[U$B`mcCmMSE'rV[3h[)jX(L3!&YN!$JYHE)ZHE(
+[-Q2HB(!Pjq(1fq,RBp$D@hAhf$h9-Qlp%kqNrmbrbk[[ZhfqcVYaYYMHfI$h[%a
+S+h(N@@0)cf6)ZFL$`if2Cd&MZE(iH*TZ(8F5Pp5a[lRIIHPrci-LR4!d2AdQ2$Z
+-L4Zi*-m-BP*&(pIjZQPaT'@XX+b`VA!ZH,[q$[q"`V[KAGpEmIHBIdY(dX2(JlD
+AUX(B9$,"Zm,IhANCqApl!cd[+j[4KhHV`XhCF#GhpjjphamL4iG26BQPj'G[p,b
+0,ak6&VBHAX-1h[YrEIjbrjF'VeDS,VD5Ai@Jj'piA!hrM@[PfAPfI$XXH!!GRUq
+&5@0e3h&Y1m(EheEapKi&AdC9Ad0V@e94VYAVDR@E1SerhmlaX'SeL63$&V5#!Z4
+(XBp$X)G$56)81Gb)Hmb)IL!&Mf@2(hFME50Y"X)1kU*R3Y+bCJl1TFT!IppAAd@
+RKpMBbp,$cI9MjZXPaYVTGcTr"lHflMlqHQq4f1Ri2IA(Plhd+[%TF@QMa1jL6BN
+HNTX@0(l(HqRG@hjFAkZ$9keQH6mF[mYG8e1VeY3*ikEApe%P8ZelbKPED,kNAL`
+UEL@0h#hYM'mZXaZVM5+fX[UlIlHmYYr[1(Ff[jCIeTHjM)KG4eSh[D5Hm,mNQ,V
++E5k@RdfFdZQK9'PM9%AE8eM88eM@EDYSkbMmUFqrrir0j8j3lU,+kGE@9GPX,,5
+dYPTDDGMD@QdfPdZGM9'GLk[5a+QPLDlmhdTlS8H$EkBfDSfPkm@ChHEL`rikD(-
+YqIe,IRkL(bEIRkb(KlchDL(dC2[8dj18XjQjAjC(DAdbdbmf2R-@(3aF@(1ddZ(
+f0EJ5p0VSIBhA!`prGiPl[*HZU)HB[k6&fY,$MHTK9()p1Sj'"CqI2F(I@G2CIfI
+9pAeI+PdZ`qCjP9Rjd@S1q[,D6I82(KIFrjrVTHhJNAGjQ0)-DNj1N!"-V,C[,D+
+Nc9MPXabXDE,`D2ZP0IPcr(Pr"LBZNlhhiIFd-b(UBqEaBmpL5j'Bi8,qVrRlNQU
+cHYMD[8IA`B8iDYrQTJTf9ejZXk@Xk@XV2EPk5G2&l1D2,`T[aIdlDEdX2pYPqfb
+`l+bVUbZTV1VZ+[LHGJl(3GPf'Ad"`ec,5aV-A9kqTUZheh3eZfhr$iA#&99cKfI
+pY2rjYCG64e09e1&`VrcDUTk&9XHK9E+UUDE5ep,890,@e&c&ePeZF(C6k@[a`MI
+8qe[lLbV0[F8YjAA1Ei92`lkV[Z2-fXL,KrQr(Cb"mpUq4@AbfZpS-IerK4Z$2B%
+DmTH$@f@pXIl[3mA"fHK5D8iR29ipMFePcH@0jCHI5m+Qj1E[SX[DdN'BimpLkrb
+)Ii)mm1HbC)K%'P@Q@LmI0i9AkFA!V0r9m'iXVbapAPH,Jf&!DjZHdIbk$fiGhNa
+l[*KjUK`l,dpr`E[0hPj%h[!TE+lV+ZlXUB!G[DdfmZDDaZDAHA0ABEqVNm'bT0r
+[D(Jh%l`H&HFHa`Y0,bXNS2bX'hKr2YqC(SakFC[Akp['a1E23CF!QEb-UYQ3!2G
+Mj-ifFJT*ZP!*RGRRBF5fi(YjhC`q#!I29mHl[ER*jh0pcQjq[Mfr$i(0d!k%TmJ
+QccdrS3#6m&Kq(3`5H"L6HhS))R"a-A@GrZV2ii19Jlr46P6rY64iha4*RLjfZpb
+rqrpbUJc(#"!)GkDdc%h1`3TZF'pK#Y!#38f"B9%cDjbHJTm#`dXhDDLdTX$bmE@
+e0T!!DLdN90T6m,b`+I"0UY!"LhcNcDjkGq#C"BD@C)hP2-N@&G,JX,1A"9J%TEV
+%Q91dhAe+rRBIKIScr[B0hSc-e3kEj)Z@T"db6ec*Pe9*4b-abCZZN9R#aTfTN8P
+0DcBY4)TDbbQjbXJSEDQQCkVJREf0,d%Q$XH(#PcmQ9SC1eS*)j5ClLbk[@`i8@m
+aDZTKaDDhQ9QVKdeE*Qee0$V,@*0UE5QiFfUN4F5AVmh94mYC@Z,TrYa-YT21dG#
+PLZ0eSYcj2Hl(SGldGPdDR8G#Tk2Ep#(BhZqZVRaIa8'[*&fNEVjqem6El+2qqNm
+bPqc6H(6H(6r4U,1emAM9X8m-N@2mN3AMr`422pITqIkr3SU2cD+Mma3fLlIVq(9
+!1TI2r9NF&"*p#,f0$3H9JreD8SHKe(a4VVQk@0$XU[H6DI9ajkaYmhIf9h&Tmh[
+H"C9GV`16Dm$dlRJHH!2cGES1heZIlM8CqMe'HMpMEh%c5jk2*NhQ2AkL#aZ*-h6
+k@(%Z,HAU"ZIh&hbEQlp2Im$Jm+lr#$1LeZHlM@jfMeZFMjHlXF@TcNH*Ef-h6`S
+pK[+[)Lk@(`[&rdcZR--IQGYrc%S2)q6UILlZmc%jT,cXY*f'$Vp3ICE1d[@M6BG
+$LRDm!'2l*cH,dmATJ%ND122!(k%M49B"HjXC[3Ml#256Bp,0'$M2i1[lG6rq-Dl
+&4+#q`Mpe%Qp+2h-Ahm@2SSVNJbMSqEQ3!1)`TSG$0`D1L0Rb&R2MMITLBq9I@1p
+M9GE@8Y0[jf,bjNM6BHERYr5LYKCcfmYH,Mp'Lml4p`Z!Ej+$r(3f2(kAFGeBmIT
+qKNI'`&paBIirkCfM@&(Ac$R#Mr6YHj)cQFceXa6I,r$X-'4U8pa9*r'0ciITpIc
+qGdqGdb#-K$S)Fk2k8IdL#!%mrR`q0iXpVLMqb(*CBfI8Xj&,Ce&E@Gh,d084EXp
+(ei@pYZVYp9p669[`@IQjlSCl2C9[Eq9a[Rb%IhDr*1k1EmrE6Cc"qRhDi9cL`i9
+cM4mY-Kd[Tj'JKhGhcXpS1rcQHU04#chEjkHchFCl0jfMVCh1b-[*RE,&Tjh15-[
+BqrCBY4h1PNCH`RGlL@%lDm@HNd0cGaC0*Ff0A55IlEVa*bHR*k(Hh%h`++dfZ$,
+S2!,ClDNkmEcI*[2ff2lE%JLJh*pll%ZJY&(mX"qCdZ5i(r0qarTRIT,*AiSRBpP
+T$*+ll(rer[lADpK,RFfC$I-l6i)QEVDcGe&4TZR[*HERL+GRfH9%YE1bZlc-lbh
+mV*R)4&1ec2`D,881QLdY4Z+M*cZF)RmrXrJL8'T`*hcjhLa,bPXYaihd[Al21NC
+cH@rjS-Ir5HchDrmD[8GRfIrb,STbAU-rfZDc(fYH&YRcMIlAX[Nq@biGr`q&[lh
+3DUAmr5*mBFcemhjrJkc6@[R5mjp%SIjhCI$%Yq2a,L*[DZVhX5lRF$"lAGV14r#
+KL4jfNPk$b%`p"MlDSTULRddBJQQdZHcQHc[qQEqb4bFc2m0*mr,D2,MfmImq9iX
+ZFmP(aQIKSBPa'h29X0A5FE`-&2XCU[Pe2,MaTNMB5+DE(fdH6QV$'MkQ4Si-eqf
+KPIka[CL5X@RrC&PB9Gc-UfpM+Z[AcmUliI,bVrPD'9ZT8VG5F+9UD#0KC@(+bf*
+i&"CqIbUrG9(IrhqaK6R'm$#C6hY5)@+F4)!k'E1Ie0jZ%cFFEGmP%pUIPlRQ3kE
+&hA6LIYM8I*h[-e&"`-$XU&Z!$%!-0&&4r,h(,UD$bplkd@03AHqpI2kUpEJ!X!0
+aL)RSrbdI+dp(`l2e[JV[AeHU[QdfUEqMbN6G*mZUpL$,9IXj@mrCP@rl-l3IkeI
+YGhrJfS9ck@r,E[5[pHPieTkbGPP(mF6%qa38'ClM`DDLm#KeXV5hZ*XT9REHY85
+VcEq[TCA&VZC#PB&4qZHhAlp[lA9PbX!#(`HaRCA!hhVCq9[,r%lL9%`TABiIIDr
+ke"rKl*UG&$1APb[ZF[M@IVTRM&&h+HH`CmcbCGrKH"+T[e5U[NFUIk[,A2M4fh!
+pECDrbH5!@k[1AeH"kacibVHppI2pAeY"+h[$j9&+V1*K@hAc2'frX-TIpVMB&ql
+eqdPCcNBG9e3dl$dT@mp'0`,Zr[1AXk#kZI@ke'!@[Sr%fG"j1cR`NK4L%l`qAfm
+Ua[m6@lV1lDAp$MEMQ)Q"BrpKdXIpRYRrHH$BrV40LKUETiplCj(`9h0eHUa1[mF
+'Cj%bUkXhZ)*2T3@#[$(DlVmK1lca#m-M2`@ilrZ(Mp["9hmh@fQDfh[I3`D,pLD
+1"%LmaS+c(kQ2)XFMTj%jhRASKf3XpSB"HrQ@QG`HipPNYaT!l2UB!Ff4*ajbfGb
+k2qe#i4,P`l+EDCZ*,MGaTZhe'Id-jD1jKT[D3`%),bi[E2iE2[YAUVGh+GT,HhP
+ld,h(hFMFlL$Eh@4ApA(h%&R`mEF`9U!Yr0fX!c"3CMP5qrqTlRk2YcQ$[X91BS@
+MXHTKmVHqj&M3m,IFr2kVNr(qImH,"1`TN!$(1K$f'EJRCQ9@i8h+Xm#EP@h&QC9
+lGcFVKfmh+[pj-bX560S,)CeFa566r"SFBD%TYTX)GE-Mf@,"9rUr43mEM@Na,VG
+*mHT`iiVikQ4&Q'raQIrA-VT9R`q6VmaJkq0`m5TP@GckeG+ZUhekf9jI6PF6+hA
+hIIjRrMLD19k'MPF65q[@EVaUd$pYGBPI+Tlr#PCI"P4Z&bpAVrmF2"Y*V+Jpb4e
+IHNG3!I[DUFR*fFme[Y4Bk,2TBb+$9I(h1416XMi2GL4q69ml64lbljZKR2kfe'`
+SpeMXG[[F6+Q([YlMLB[HEl)cqUrXE6l#Ih13!)Rqjq1MaG2(ZV2(q#Zb0AU[b0T
+aK1AH5habYmFSijH0@HfYariY6K10ZVa-2kfCh92q#Rj8rdT9Kk0RbTrhj9KqQ0L
+8'B`aF*Si[*0`LbmreYMVr[HcpEkA'V1FbKZBiffIZGE9i1h`pRd93C49EbY$d*8
+R"P8Q&+LFRAd)ZdmVA8GeDqaqI)jH$XIFAJNq,ZFDFcHUR,6S42GM4r6h[YkL(Gi
+(DDQCpEEc0Rd9m(Mi5eZ0SHK"5BNb(Q"m+F@('`XEA4lDebIdF[(`Hkjk)RZILSq
+6FC0G"iPRDA0VfZ`I+"ifhpe0%@Uq28rVF@p,p[4M5rZ2kJS$q!TQ2DHM'pbALcF
+6bq4a,qrp,DI4VpVZ0TZ!#ERCprX[jC[Xr1d9RcV6GiZ,Jh[[6[VD6@9#DT*Idjq
+rlLre'aTD,BdZSefjefiMjIJR9KHBZVkNc6TUecdLNm5#rpZdiRYq&pVQrQfQ0l0
+(-PiSeJdH2pmDa1*lF&rcZK"If%hBTV,hQ--eHp1Y#iQkD2&Z$V9hm[9q"8q"V+6
+Bl1Nf0I&jNAf-pr6R[k10BrpNLT(q1M`Y24mLcpMi+lQD[9B6F8Hkrd6r9"ePm%r
+E[UFf4FC26bCcFIpGAVHqe(IDcCkLLNEZ4Rr3V,fjZYrDm+fi@lfP2Zq(AAFp54V
+'01ppCMkUIkXS((N@BqiJ!mH4[1E1H+rL#Np"MUASF@(FipT5a*LG0&haF$0IpRM
+a&er44#D2Vk+qZq*[EbPNm$IF$IjVr*i2pGlk(qNkqMi0aIfIQfHjeHUmPm`!k5(
+XEVaF6'K4p(RBIECk(PYj-K4kIXUpiB1brfEb*YC%kArdQPA42I5VPKN4Taqpm@4
+#rQml"U2ra2+3!&B@iQ`8f0e-D49ir6ajc[2Ue'XeP448fZTDUNfY*VrGk-cU6B-
+Y&`U[#XH$Ff2Uq,Jk[rpC1*XJ@rBS!jNLNaTbeI"cV2rD()VDB@0)dXZ*4aU,6DM
+8Cl3cQkI"e5Irb(3QVZ,LkXrJXqpeHUm4lQRiY&rm6Q*(dkXEhIrKeZYSZRaFQSY
+[(VqTpQbqcCA982rqrrb3!-k#(,CI'QMPZbf@bdlQVAeIm-E,GY)k8MT50RmRdTF
+Epj*C`DIH,PX[b[2LF'VZ0lBhFR!c2#r(rGLHpVqPVqPVkrj2S5p(rZL-dRmG(Bh
+&Q2HVCk[9H,9I9mMZjcUIZX[h@@0q(eF(CIm-cicD+ZSVZLjQFqTRpaRr#L4TFC0
+N12j1YZGC88ZPUD50VV,AeFM-3TFQ4RqMLq6LbC%p'a+E$V12Dm,K@8[kX[8j5H@
+fMrMSTYhbYlkG,*`YpKErXVjq0)@$VZQldiH"j'ACdS5k@$-6f,jNM2GH&2BVbdR
+jVm@$9G4pUE,Pqck4eAT64kdZS'9rA9'[TT'AM2[#fTq"fTNqCcAkmbCHVq&eTJi
+(N!$5cTB!BHCUTcbFYQ*l,CGb@Q4q,"X2q@qY9fkeDAiNeE4HXjc"pl98Rm2(VEr
+Ge92dUURk)rQ9GVCh9kLGf04%mDfmA"T[MC0A1AIK[8fU2N3fLGCpCCh,mqH8[ZH
+XKaT1Xj4`rk[98pjedeA4q`LC-LrjdLq!(cT'"cjcq[irTlqr[X$fYG$dB`+fmh9
+akb`aqT*b+D(G816e*hfi,lRarDKqe$`XDYKedR'XSGR5Ff&$iH6JbIP,#S1jbd6
+NC2NIDjr[b2dfAZ8rK4BPP,T0"4l5UkQ(q#bPlDjPemM,m,%i@(Ihep1m,MJGTr#
+lQ,lR4NFMQp$fG9Jl(q,HA&R,MYImNJp4GKSq6F6+k$YV1dRVAXrHr(pMAE5US1T
+aFAUAFc@3!1QhZ083ph6`l@NjYA$mfNKm2R516cmVRjA2KeXR'XiGG5BpC$Yj2Y`
+H9,dA06r1-lm@G`1+2qCmrJm(JlrcGGVU,AGah'KlLJbZlPk,q")IRChj-l*j1&L
+mRNmRMqRbIeDd@plZmc@KS-'TqEfHhh%1+),cI"Y+DaLdX[@@HeePRhqXYYc8plV
+YE"Dhf2dYG)lEpd[Skk4p'b30Xq(LmIr1rrc`BrDQ5dq6[b+cHBZYS+RD91jeZje
+Zdee&dT'fp[KAri)[(mbb!(alfrfh(`-(Z2R%`d*-,Z22@f(GBIMFIblkrp+UeSR
+&krhHL3J!HYfPGmP81q,jjr0'S*Gii6j8-k&(r*Y+Rq3+8!HdefdSZP950YP[jUV
+AE2S9998p)JJ"0TY+hj+UUR-(ApX8&fk)),(HdeYKq2GBIMq0arYHAIF5r[VrMhh
+(iri,,MmIECEqISe4A4"![b`+V55iX3l0dlfhaa+DjU0[P@fpT-j5D2HF$i0"R-V
+J@(!X##F!G68I-lI[ChYHakrcIFPaGdTPm-6H-%'l*EZp"RCfSRDAiGM'YUZmeAV
+pRr3RMhP[PlAh2mHcrTR1`bp,5!-b2q1fqTEEl`lVkRJr8heaT,1#bPImCbem5fq
+TiIdlQerNhhKEl5@Hqh'NZYppLkrilA`I%m1km(H@Zqh[mee[ZVf(r[X1`q$i3!!
+!!)#BLBQDQDQCQCKhCiLCQDHBKfCQH)H)GTL)CPGfGhL'U*KQGiH)KhDBU(CjQCQ
+*PjLTGRQDbUUiU*KfLCZEh,LCQAGiV,fJUCQlGhQYV-ZkZUYiLXZ`hGZTUSL*[+h
+!#DTUGiQCUlfkU@GhGiKjQ*Q+[(HVcF[1cVZUGhQDUTQ)QL!!!54'9iKiJ)#+S!N
+!LJ!!#+!!!!!!QDN!LJ!!!!!)Pd!M099QGQGQH'GiL(HBLA"`G`#C#CN!!*!!!)H
+BL!HD!+#3!*QC#*L3!)H!LAJ+QRGjF)N*Ki!*J*UDN!!!!!#3!!N!#JVpRK@0[Zq
+0a2RA'[NGh)er%mVMH6jA'erNAr%iH[R@ehZYh[qpZh"AE@GR)l[DbHlfYKD50Y*
+NG9pcUZUrilArI8G9U[MP)%Tf(MGG(mrYi99mF,#NBQfUF'fSd103SdEkM3Sr8Ld
+H&Ef0["UlH$L8*N5lQ4*P4)Q5)Hf[V[[+Hf[IPH*@khYBRa`lldq2TIRNrRNj'A'
+S9%LlR`Am&'*Ja10S92r$2`URME59"@f%D9%Xr"TaU$$39RUBQk[lfI2QhFQqLj(
+ji[iS1Gq#TaUR$N8EUIjIck8bq68UK1CQrTmIK5qpNjQK,Qmk*bGY8iPYJd-+KJd
+H04SdI0LdH*EbVH#SYi+c6S6*0h-NMKZK`mDlqG6VI(5Yl5Uq+&b-(G6lf6IaEq*
+J3Vq&3fHrZ0$FEII9PG$XB)dV[k9Kj'UrmGafQYMkQ(QANb*P3je6&bC-H(d0#Ap
+56PG6XZkQmrp-[kNhRS2jmZ*%bG1(P`iphQ8V2k#809V[NKHY)aT&6Jpp4[X'M4`
+El"SB2e)Z$iX'$I8F%$m2[X1fjd60dXc2P5T9[XGhXSfirMTERrFS4Db*e)H&NrX
+jqPQk%[aC1E,S3C&4*qlGHT3`U2Tf8V3XT@PJi0(J5D0e8i-b*4ZSP'C*`0e*`j%
+cPI1Tl2k+HhB3qR@HR+hQ[qMZiFA4N`jZdL@8V2$IE5CN54%Q40e-N60YIGj5fRd
+NA9&IUDc+h161Kr,e91TfF+cLf@I'Ppe*bG"J,,lU*JbF+4La-D(6ZD@mqQS23Ni
+[EiqrPr0NjHK,NjNVGf%50"#JJK@XQUYC1XM5+[UkM*R5UFME`@PKXV#`UE#`fP6
+2ZSNrJ5EfC%`0Y-aHmTaIi09V+ACGK%kF2MDAQDAQbI0NS%mf6jeP*K5BHI*La+U
+(@fe2[H(f99rbVSe9di8(Mq9K`j%bC-[j04H`lfpX2+Slq,[0j"&Xl1chQmY-m"p
+,%a16LB2!RiQ$G5F6%Q63)!5C2a-2G6m6'NAZ0cIR8l2kRAI*l[c1f54[K)5Ef68
+A9lB8*PU)kbXp#bXp,"j0(J6k0e*`CNfMG6D-bIJEUIKb,dNrXZ)TSDK8emb4KhY
+r4RmD6K4F+*Ljm,l1IL`X+,JcH00ShY$!QHYr,5Xr*C1GV[h`Vkl`)F14Hf%fkJ[
+CPV3dSXVjYP+lhB5Yj+XT9RZl1fY,@dfd2Eb*hD+I$5brLT8S1+T89'Zq1&b0eIb
+)Fr[TYp2ScF'$"Ni2cBZ$hF'$"4RdCppHppHff,%bY)QRefhrZb+9EIpEq1*99#J
+jE6"C`l#E83EZehFfpU*VNk&6PaqUTeY(VIVIQKGT9G5&LiHk[lVaTr`4ED0VGaj
+RmRe[%ZGYCHGJ92mdMd,Uk+pB['kcjhXk[XYGdqk`r[5IkC1*1jpRS@HKCkA*i%f
+kdE#*"'LaSQ`YUHhmVV[X4qjeSZEA'mD4Jm!MY0S6*p$IaC9TBfQI+Xp+MbD1kRX
+&VSNN$R!U*&rZSHfp5elbRAq@SA9+2U1kNAHfQfe40lqIiqR+XC9ERf8E2XUh5[k
+2&`I'a,V'QCRRdpar$m[qVdDbVBVCqkNB0VYTY%-U(N6k(PDFU9Bf0P@jmS0j3F8
+EqMIFA"[Vh$lkkjFL(-cE[ck9PjRb[i+V@`L(Pp2[C%14)Zj-1qLeP'#SSc)G%YS
+lQA0iZ*Ie%frK53$[BN(MES*lkfqG5lcq,jA1bqfKDj,VE5-'XQd4Ee%qKVSSYbZ
+1ad!)XYKC@0PBEf,FF#A[jFR!SmDIKA3qVVmNc*RG95f[rXTG9![X'kmLCi%LpYV
+h![Er+M``$D$HKHiGeJA@$ZjXhBh@lZU(Nrj4ZeCZ+N-1kkha[5fhq0Rk@fT@ACk
+K!P+bp,YrCmRmrDqcfhSIj8kh9UDcYGGUBA+r")rQQhmh2[CqKN+q+!N5K-[T0p)
+`*(+qj5[Hh8ee@EVR2ip'kcGM(Ni1INfHjTfQjTfFZT`mN!!A"rk8I`d-b`PlqaM
+m+aPcEl+PAP6b+GR1l5dZ0,QmbXif48hf48hH4$S8j-@A8l[,PjA[jmZM%k%bAaS
+IZ3ir-k0+flMX,rr[&lSHfE%[+&4-b[Ueqfm$C5GjXE#cf"'5aP@0[l1mPa-6*hN
+[AEfA#a2`3XA'KFM'LI9`*2&UVqpQ9-1CkNbemQRZZj5)UeATb-54G6,qpLAYeIe
+0r0mV!Ni@(&`X#6L8B2k0r[GaRlfA[,M9lcI3jA"KbSHaLeX6B9X5`LehK@p,HI-
+EF,kREjfZk&AaHK9e9CMh@2HmZMKm@T[q,%iPM8f&M#X0,J6j[!Rm+$@@%R@@-M@
+l'XeYP@DbdVG["(e&9NeIR)imqPHpKep16VYJSqHAH8*mL6Pf%b*1LAe6"P5SF%I
+ZiR-cYa,p+6c-kiPc[rA[jQIYjH$NCfJd'HBBKM(pcEbj-Q*HjFf(E5i)F%h0L98
+@Aa[,k&+If+[5GdP,k0'KQ@8Z*KC9G1UF6+Pp+ElqPl[8iE)lph%a-V5`FV53!$C
+GP"h&R"hGGC3E+cLE+dLGcYlR5*NX'4R6*H&$pf*9mlSd[$l,VrSI9UpHNYJ5j[I
+jPEaj2d-UbV*HdY*HdfiMZ6PEHA%j2j[pqGPfN[Zj2*bl1Amf*bF[5a-ZdJlQdJf
+@IC`E,Ea0RYiRc0a1k[p%lj)RZbBr+LHl-Mim2T6UG,!l2XqjheIhD6hf2Y8D%&$
+-XCPR,LFDTaFUbKl+G8j(*bY,)r4YjIb58$IMe($L!PZ,1A*jL'8#BQAYl5@KC"H
+iXi1jfpS35!RCELd&aYiRFlMFA,%*qrF5m56%SHj0KlZ2bSF&eld5UM4rdqAdUAm
+hDGR[rZ4pUQ,jQ(,Qcj[NCPK0XH2*[SRm1A+L%,*'4c-[5!6ElJA2-bmrF%`H4bI
+Ee((NX'H6QEG#+'E5A0#&#HiY)2Q!*XaRl-%*R-b1A)b-MPlDRYjHUTk@4U+R(e%
+6QDLTb1M*Nf-IQb"Rc*0V,bLQc8DVk[k+9YZZ`r6rE'lS`kHj(rfPjR[hRiq(kYC
+1`iZG)RB%(3dEARk0hQk0pQD2'bpM1*k-V*bmRC6Y6kf2c[aap9kXH&Kj9[HGC[r
+kkG,H61`QeF6A`qT@ID[1bp'$&bYlHDVQdmqim1jZG2eZGphRFfR[Td,&#k2,Jj@
+6[JGjh1r2&pMP8lM6pMQqYc3%jhhIBp6lAeZK5T6TUV8edApX2,qK(l#Cl-q*kf(
+8mVf-@R[Cd,#bVHG0mI-VEbk[ZI'[,h[Xf0RhRjlEhjhqdkpiNkkifCXEb4Lj@bR
+9(1amRI4l#KQq[rmCP+hYHaKHA@`dfq(9qMGqTPlkmKFl*cjfUjf6`ZEPA%kUd19
+PH&1Jqp&b[#dmVJcS[0b3!"IacSA1Th-l9!*#qlNq$p21r0`pI5Z,EjIZq6$C#Aq
+cSdb!Z4djh9p1GUHGNeqIEaYRThr2hF[KpPHGPI81IEalkKQfmIL@q`f8k(bX[CD
+H9Xje6bN#mfRYq$p$hZ(l9+9ZrPmA)V(ZM[ER9(YL1ca"hHEe1biQlPq,"IjZK1r
+eLp+mrYUjdI[+9hEpMmrPl$AU-Am-IZCP2[j'hi0CDA2d9+,H6S10Qf0jGFEReT'
+$S%CI&MHrSARqIjY6Fdpc1Zq*1YI+b`N`XSQ3!196m2JeQimL4(VpeQFI[+8VH+d
+C'64e02dHVTp69Fh-d,LGhX(0c-qiRAR$RF2aBVZ*@h0TdirA8jIA8SHpkhCfP6V
+)Ib9RTj28e@CS"%`&D&Cmkfp[*mqP(hhAH43lMYiR6V2aj28YHKS6[0JB#J,jecB
+h'lhh`AI0ZmHMNaTHfQjYjhP+IFGM1i0E@TRpCq(*m1RFm1$)cCfTjpc(ih*cYl,
+`X6h0j(jYrlflMmkppqfMrTQp+EHFlBHpZYY1pU$Spp1qlIHlRlbGKFR1cpp1qT&
+jfCiRL8r$p'&q@PhGcm[VpCVZi5@lR+bp21d*hT3-"FkGpZjf0aXG2(p1if0aCEk
+chZmm#qcTf,5imlXr"rkaiiBrmFcqcqhIG6V-[Kc+R+iI#V*G4#cDbAUBZC!!jHT
+KCZM%aiZE$fm5G-NmZ,Qa,5*1i85cLcTNh!YFf0+LcZ&'XBdkC3ZLXmm0ZE@bGK1
+Q8C&pQk0'(aXhBEEBcTQ$8FE0f2JcVV#aF[`0jHGK0[1Zjd"(HelebCEl2mre[ik
+IKcVEQCRdirL`i@0Q3pk"%'"Q4T3%AGlQD'`YBrHb-@(QCqciGel'CRap9PhR9dr
+qXIXFDR5qG[qaYHmVDXYDCA(ScmZbPe2*jZ4Ldl+G#Sj@lR4E[-QhPV"QF+0QH,@
+AR"d-hJAPY&cEV6c*mkeYFZlR3ACAcUX,RFR)j[*$56Dp$Kl@PBr194qZ8Lr%cXV
+HAN,&Tk&ahZcZ2$Z,J",RI6Y9LdpjH9FIFcZP"lqK1k8AhlclAC6U[[+Ad1!aQ4h
+GQFdCQRNTPCFqmX(GPDHEG6VZ"j-UKI8CQ&K9RM5H6@H0%jZVmHRYYB0(Lqc8FAR
+eXHIih2X)p#EcrhG$dIXG(I8YjGGKrpIi4GG%((,Uq(Dq892pe"b[caIZmle1GbQ
+h8Gh1h(2hFHq[mfhP`B1@@Y1kJj&2HF2Y0jimE`VZ(6lkC9kbE(pE[+8bH[$[h%A
+T`mR[Ur$Vl$kHai0R[E5dfGRTFcdpaA5r9RIBc[4m2,pIIFrMqTlQKEjmIUm#RXG
+aCELZ+#V2E@'qLIdDcKp95NhE-R%2pYC[rIYH0aT1+FAq*)aF64f@pL9fqKjqbhd
+IXi2Hd*hjf!XAhVcKh1E5Tf2I0[br$@4lMYHeh&pcZ9NIHJbJ$D$!(kXlCkH2qME
+krYE6Ae%VD`V$DkccqhqGV2bl[[dFkm1IlrGrjAHA[00YiQSpZGUDGc(UZAPDH0P
+lf2[pj(i4GY[HKE5q0GCfR-pbE(jX2SlU2lA[F2p&jrY1rI,qjqAar!l6iq()ML*
+pMf2Gm6JfhXFl#Th0RTqaMqVFI6fHqV0pAlhE!)8SDV"Li02H40j(KApV4bEH,Ea
+pTZiflMlQfVED2[l8TJi8hBcBr%Q9db2jfkf@kMqRp2KrEm5mp@GUZMTC-[cr[pr
+i,EG[b9RfkAKrNi2LGpbIblk[aF2r$`0acD(q1lVmfClFf2USH6k0EPr"QcVE,im
+1&N`jfTX2caVR,ZrmE(a1AKIi9ecKrGpU[eAXlM9HaZ+V(m5UrqrP8[TrAkhmYYi
+6)P3rKV2m2FrRYLQf(cFQ[RGAl'26m12&)Lbl$!,pj%5lPi8NL$pfSpliII[2pB[
+k*Ib)%@rhf9i8pl[JVaa9DrJ61qVbXAQi[1a1GMFlPmhPqYbqEMmURA6ZEdEcQp%
+"Y-"F1R[UqiV`%fGcXVN`lmV)aFM&jf&rAjfGjp,Cp8Va(G+Vhq6h#UI9FRTh'jj
+h,r2"MrLHPS(dDZ2(ep,[Y3Xe0BBTqMVpA1rIHIprIiq99G'(HHV&RBGhR9Yj3mI
+Rl'GGBZCCcTRhFVChP6cXQ2UUFH&Mj9c(MBfAi8Hl`FhH&Z6SGp,mUkpbeMmU6lX
+h89R9pj5i1THpLcqVKA#UTPlE9@qhfI[VC"8,JF9@225iYP@mZ&K8l3pFd[Um,,J
+RHAPdY[eIB9-q(h)pHKTHlTqjm'Gm23dBA2dBZES`CQMDjHMGj@MIC1MaUHMKBq,
+c-APmVNmV'j[fkrHELhZEAi[%TE(9,M*V#-2T4rbak1IIjf[b0'R(PcYTQCHM6!c
+1f'I(`24pVUIPqrYHXGZ(RVXRT`ZEl'KFA2L`1JGf$XqiZHqj[j2b9rEINh(EIIR
+GDVK0BTb2cBZ2p'jYI8jeTFcILm545ZC&,a)Ij02(VkV*RDkmedjePjakq(N9p3!
+I1Vp6cY[AhA,pLdVjq0l'pVphpIm[j[2TEIj6*%a2KKq2khQHCiAdY[F4,Z#I$Sb
+EqS`BQ"8BG6Kip6lYC(pESc[@k1K1r&!`&k1I1pE0kN[UU9[ebChF&LrfmXi9-qG
+jQ9YTQhNcEHeYEDfYS,EGc0hZpr9AhdFqqqPIGp9AIMaEZqJZlZIGfY'#$P3S@9k
+2'$6NCA8Xk9[el'3@k26bqITLKe@&j8@qmHlZllL@eYZp#fYVH`YVF"VDfXVDehX
+&YD3@ZhQcEQ6-R9%@*QH[jI4RILLp'mi@A6TARbde0HHd20iq,2cGl,LmURFlLGU
+Z9NlfG'rCH4Xram[KGpPprH3H9PH"H4FA*m*C%,LGeG-mi14NlHA)jHCXYR'f4r)
+PG'M4Ul@4SfaVBYMffXMIfHTpRl[fIX8l6DV,[8`rLerVC%M'[F'K3Sr"C3Eb#ch
+-'**aFq,Lk%,&lU,LaF6FfFfcJXVA5`Cp'K3`,h%NqapqP&fb2HeV2Meq99e&2FE
+Lim$J5T%[XiMV-JCNZGjf6Vk@pN-k9SI6erXC-@[VGPX,,Bf@ahF2@EZ*9Gl'LeA
+HaBY9E4+S%E)c$jJ"R[`Pc-f2GBmc)Q!*+[TQhQlfkqKHiANdTXPRafKr(VrBTaG
+R@efaf&G@l+YV1flZ0%ePK%ePE$eNU9(QCQhir@jNZHG$d&eLfZ&Di-r#i(*[F+p
+`I3SiFfRiP+eJBKYRmQ[cGTQI0MbFb2[jFc-dX[5c)md!f!dbCc*Z00aTq*2`k'"
+3`+2PcH$%Qq4ihfDGj%28$mf*QE'PC@$B-r(Vm$qV"SIcrr2rcq'RSjZK(ZS-HSQ
+FQKKdF$%cCIHfXh&hqpYE1ff9MAEZZP5V1#ip'UTdpeBYJ4m@[cFlQc-5IJhG'qS
+B(%fY4YDM6e%5$&U*RP81q`1q`EA%YF+``[QaFAjX6&QiNr#Ri*r8P$%QrKcD9+A
++5%eSK,U#rZYCHr5Z[$QH1GCel%SI9RiplN)%ZXMS5q*,iNZqjm[L6[&LjZRQhJ$
+AR#RAq65Q@6MrpM*rRJY,'bP5Y,%cjq*I8H0ImLkql)r$NmIBBpEME[!mHr`VhNc
+q6GFcIlH$EaV5`Y+fcPE'bYGppUUT8peCZdb1Gc*Z)QpJhH$2a-qea-q$&Jj%'&0
+aC[)ZZ42mHrQ3!,&Je'Zl`K(TAZ$I810Hi0kS%dk9Y&l([E#YqBI,ISAQ$ZM)"-p
+$,VSp6Kdl6D8l+jXjI9iH6TG(2PrcjRp[Qa1MS5ra41Kap6i12G@[,Q6)@"G5Bdf
+pKr4`[UrbdZ*@U[IAa[LLFlhj1cXkhZ0jX+khPE+9XGPX*9T@kA'*NX1McpM,ZMd
+i50li@fLDf(AAFD,XED,'f0M%VGMB40KBciZaM6,DXM4VLK@bqXNAH6"'dmk,Tje
+ETG$B5lh#c0P,h@4NakR(c*8[q6,Tf@j82ZdLr$%`X1CHq0GAmM!ff($`kc'U-DS
+p6'UF'&3Lcj-rPHKJDVNiq9-mk&XDRCEA`0[m(+jKN!$rQXUpLp2YXMfr$ZGVHEL
+TlL*XG'CPCH4c3[ZTYp%[T'$$aSH(Y0P$dF14J623mELqK-jAmY,bD[XpGckrC'r
+4Qp6em#,b1K)hdZrLmcRa,LAH`F[RaEL2H`BqE&ZBmfeamb0Ea)qjM@mI![Vr1VG
+h,[lkKd1TpUp`U(2f"k&pLCBDkhLl1b341e2,j92Cl+jY$$(bq9NBh0jRUFVe2T6
+[XFV1mQPjIGGTMr@feG&rC$b[*UE$SFcdIT@IKH$[[$PA&cBh)"h0E1e@2GdjfTY
+M*V&R3X#4BC1mL4,c9B()bGjXEb&IFM*bI+bFRdSf6Ef3!#[f`LZSZ61U)+Fk(ZC
+fUbB[L6ZVZqENeTHiSrGb-,e2XB[(qYECf6`re8Z2VQ6TE$iSQSV-cbkZ62ff9C`
+kZSb+FYQkpUkRNdkLcPkZ*Jj06ZjfSYD&1UYVR@@eaVE@jeYVFGYDllYjZqlHedr
+jZ9DqKcC[SFfIaHG2mDRBf&AUU(!TbS+[98GYNf8LVUFE9L-UDFHSBNm6*K9XZXm
+[-rAU0Ir,@9LcXGM&q1*LB@IjAl,I`0$H@@Rk86dSRfkkcdIGX[Jif$r,6V0`L6X
+S[bGYLIEm(Hl@jdI9Y0(ld6qQ*r6&p+,kIJkITq$[YP5hd4Q2U2m821lHVp2Bar0
+Ki(3d3$`1KRl'2j`"l(CIUeH1`13hXDrp@Vp9d-[-XdF!2[2TI@M*'`pMqk,bXfZ
+L9FR!QC0P'h&PB9RElfYKrc9eMXpPX0PXT3"efcPE%!kq9X)r9hplNf0E(LH0IjF
+BVJQA[2UDf2Jhp(1VBPAHhXc0M4SjE!bkhB9F1KaFRB@-I8dErfpM+fGG+f3"X4I
+EepMXBp4if(NaYM(Kc-$-KeeA3qr6eZ`82ZZl6iBFblh0$EGe@kcpIMHKJGCj0,F
+l&R@0)q1,Q9HfFdGEE,!D@"-6+Ml3#!$dXSk%J%NjAqNH6Pk1C9c!$c+[J8U@jVQ
+S,pmAmQDk&Yr(NrkCIGbdB24"!De--8+99CPRPSl[C0qmRlBZ1FK(!jIM6j-bEG`
+iQ*UiG1mNCIm'fU+k68f%%@6B4YRq[0cpRpb*Xe4KmcArZlRqljQTr&SE2r@3!!,
+Rm[hq@d+!@[e(pe2@9lBDI*UT[HaT1VrCV['mELDc@99E5l(Zd-pCeRakUTUpA)T
+5pSPrh'fq5,leAbqTMHlSqlSJ*(p@2kU"(!J"("YS-`'k0A5mQSY%Mq[1YLI`VZf
+Pk!#f02Z0ZbP-lrX(dr!hQeq[CD&aq[eHirAr8@DrITGR,8!1kl(iYAZHPfHjk@e
+TAhH0m56Vc0l+2UkHcM`m2-lD2GA[PAplHlUrQ6lUpN6lqkN6F+4$ZX@4$QiNc2U
+*[*YG#EbCQZLfF%1,C@Y6'f%q*'X+b,#VBX1*9E'fYp(p%IpHEC9F,PmM,qee9+Z
+m0RI13Up[q#2hFM+d'!Vb#RB+q'P5VVaTCU)[Ym14S%j6m&qcq'P6e[cfbUrC$iT
+3YUZ)81m@Th0lG`IjGV8+6R@r,dBG$f[Q@ArErKf1eTe05K2VrPrUKhp#lYCj50H
+q6RGV#3Vf(@k2GGYE5)NRb0j@dpC9)6l(Vp'(Um2pfVlDXlDSVB85$bphqAVpBc!
+GU2JqCPIj91Yl+jrEAGIerqN6ZZfqcjQilVY1bq[jR98pAfbl4qakrTr[iPR[V3r
+fEBpj6l2AVlcGMeR6U-6aj9MHrFrbUI&BXqZdSHSkVjrGGRNIArlIKlVUkABm*YT
+c6V+QVU)G2YZ1LAX[Pk4pYY'`N9X25R`lf*2fPE%rbeIQSEl2V02ApEU[iiQflAp
+[SHI6lAcQ26V0+XL6B9RSm#$E8VUNcdSEAUE6S4rdp,5r4TISMkAk0(VF$TDA[cX
+hSr$lZM#pb(1`BZG%RHG&RF501i9E1hq`R5-,+XTdH29bkJ`AH*Ah'M6hfMNlf2&
+mURGr&aqUTGpq4a+rSMk([cZGlm[,!2hjHIeZ-qdai'1a-E6UGhleASp+Gc+JdYB
+-cS@-Hp[qZK[Y0AH3!*0Dk[kQcpbYUr+hA3Ka+[Lfh3eQ[qY(rI,r6dVcfq(q1XR
+BdAh*%l$JcY'ek'MGmr41E!d5cT1&Pj@9PV46ke1[ZG'RFD*S[LmLRhhaFI88[RF
+jMaMp5[k%%ZqJkRI4ZI"YIZ2[j2Grl$%RYZTYIGRBqfpf,(p+(GCd@2Kb1MhR+ID
+CmRfAM'NqXDAKHdc5rA['PpeTIpkATkMUp4fN[3k8[q61qriIj@Ih#8LHe(KC1Nh
+""Sr+m6m2q2j0piN+PZD9c8p29INVp9MerCaEqkr(Eer'SHeq6fIbHeZpaaVm"Ek
+rpV6[lrPC'bZCRUh-MQipSJAEh06khr2q2RrQmQPiRplLHk@[l@ATp+GTISPJ(TD
+M8pG`hM8JY5(Lri-6jETk2Dk[ApV1bkMhT-INc2FXBq"Ir,l*i8+82JIrV&#8Xmq
+#AK3G$i)fG"YDAZqMkqUql6ZGccUB"emkSr1b,3MZI6cDBS,j+@l[qHSY%[*(UcM
+hGfL"G[1k[e[qI(pRh[*TGhrLc8"YINfQ2cjh%PqG,[qK,mlAq$e0G6HZSS"BZCi
+R8lDP)r-iBp#23cCeVQR(Q!FZpkceAaV"NrRBDl6j1lc+Zrjmk68C8Q2eFc)[HAI
+pDr`ffIYX0Srb9q40jX(aAAK`EAch`fGl6IlpEHqbm+mYq$T[RkhcmPRXAEGJcGe
+ljGJbEEhpCVkAr[q(q[mh@Fh-m1AZqAQjpC[Smb,KjZHCp*NqrcFmchGl)idc-d$
+2(hX2ql0Vlc[BG1GB8jIBBe2r#2e9,a-TQ*MEIYfQA(c2IdZPTG+2SG,4kh@p#`P
+bF(*Y0[FfFlUm,*YjF@qbVDGDf'C0R@fMH@fI9C[hTII9@CG6ZqfNkfJc,@GB@ZA
+E6S['Tlbjhc[cDm,,F6r4MjI[6ZEld[)!2hTH9eXTi86LLmE-BSYVqhZqK9jr[cZ
+68Hj*MdCR2XBpeIr+rk2#NF8RLjVVA&XmbYUqqh@D5li&YQkcAqDmE2(ECjiI2BS
+HlrEAj8%XcNI"'cB0VpPi6cXRZ2R2(&krR&l5YIFE`BI$Y+Eca`r+qeU[`C,VAp6
+f@K1e,S(32TdcjJdp,Pj0T(NdFf`PqClYjj0+hpea$jceaTr+pGqd9[HLh)lm2Gj
+VfaLpI,IY'62HBM1lq'[TV&"Qr!X8(i+Ga9e2Xh1qZE4kS)"r9RDRmGc(l6EakR'
+bj8ZI2k(SrGk&,[rICV3fT"YlH!cFIfrmHEH4H3ZbMR8paiNIV1APEk2"LCIJacI
+'hFIbTZG0PiXMhH"(p[Kj[5c`j3*Rc[mrGTjZ6Q8jA5@TMZ9H"TpVU0rhREDHSrS
+e&AQH2cZ0lG[iYT[2&VYj`EIJfrKfpcEAR[dYARpjf`"r1KHrU1bTI`rSeGI`E#5
+cE$(kbkr[Krh`mM[qChr,j'0b16LiQ,LFR%j10c-2QIEfpPYl,5am((a2F0ZZ&lR
+$mM1p(HC[VpcPq[h1CrEXZIar!pbmmVh0#GKHE$TbQG`XI8i144b-%-XANi6%9L9
+0f!H0CmZcr*j(j2)TdZ"pPN6Bl**1F$2V[jf8lVr*R)#Fc@(Q6Yr,i8ZkcCI#er!
+QedR9f8(J@-VGbT9MEf-UaclH`dk0p4h8+MZrKJKf&V$JV)N@*$LDbfYD9YrfF3K
+dXCFk,Pbj)"jFZCeN%M%fe6Jfe'KaMRh[U0#Mp5,4i9[Bfm'VYi1*3Q4,ZC%Q9%L
+C)KlDqZqmT@fHkq&9CNeGeQ6UQSTbGR!G+f`erM2bd+Hkd')MAI(hA,mEe0eK`pY
+r0EIcA[bRkCP2j[k@)6Ar(VX5EL`HRGH&"YF*qSUf[qE%#HYRRC85Ve-cm81kjFc
+(NC2HIa2qNjrhCq#UVT`Xf*H8+LCPI9VpYi'bNlcBf&RX,'bf!I@rXlbA%a-RH5p
+G[CF,%r"#aFD&b-D*pA!Nm@U[lfC8`jRU6,AbD@frrPk'+MZZT#pEQEV$[D-qKGc
+lkebCIG4DHK1KIJNidR$ZU0r2qalFXQrh-ZTbE,ke2Drq2PH,`pEfN6iSGrc[EPk
+@9PrSeqpm'#UXBNU(E`l+XYkcGb1ETrLNj(0aUM$L8*Nrb[Rdl(r4'HV$289'Sk[
+-jf@FXQSe2@GpbGe4[CprDhmh!J[i+&aa*fKYHefp4D4+k,Bf-Dcm'RBrq8FGV$q
++Xr*U06QFQSa*&'C3[EUrkclZ*ZU&l0[i,q6J4Eq,3fr#ZG#AYpAD3kk*Bf%Dbm#
+R)rrc&MVrLee'EI3I"GGr"YH,`B0EBRl-YiYP%YiQlJrZdqP*e(9rJLBdM$Qd,fI
+kRRrFfRrTFYAB(CTGBATfHPKiRfiphH`pr%N4C'M*`I0LHGC5DQ#(*K`3i)4-9V,
+@RY[rqM,Y!bbXMQmVQ%&XI9B@0$p1*BaE(4Nj(iSRipa*eX&E*VB+f$YSQaLGa[+
+F(qU-qc1l[qV(jZ$88C%qC0[C&rUZEK`r1L@%@`dC2-qp%pAEbGC"'NaS)d'YLE#
+*fp[6f[qc&9VqRVTmfeJdVUlJf[cpp$f1M*[C[%LEMEjqhdXME%A*&#C3h@!GC[+
+mqPEIUCTRLp1*QpcDl,Ll,rkKF(@H$VISD`rl'DH5cRk&T2XSeCBbZqXVZcRlHC[
+VVEc-qih@IF60p0heKCf0RXC@bJPpEpbRZreVpGpYVZRh@Se2MCZkbSHfbEE*[HZ
+J[X1()NhXQSZVf`S6,@M[iYPCk&PCk@$bD2!RdEU6Jc*Y'kQdCNr!h8r$NA[+qG5
+XG&0'S9eA+RE3S2N&#Q[hRKbDkYf'`X*8fbQEbCCpl@EhdUlGEbC[)*9V+XDfbLl
+2`U@hdQEE@A5T191KC4cNJ(,NDVi&Yp`#jl0`S-+6Lph&CYe`S-'IaTp'rSBFcf2
+Z8V26BYfA3*'9FlECbDk$Bf1`f'[lpmVUR+q"rGQPYPb1AHiG'MaTq&DQbFqN`ZB
+$Y[9dA!SBdc0qr6Jq&MdCC9K3IXZ["Jf[Qq**f9EX5ilDf8hH6E1CRlhGCqpQEbE
+[,#9E5T9ECaDrJdYjqe'qXeh8lI1eh3Uq,d+ZUV-HkalhPdF2Le0raBR%XDQ`XB9
+KTF#I0i%rK3Db`NkbaNDhBeQYXUc@@PEYi)qSUXQVmj((RdVIpbQieT5lMp#Gjd[
+djH"R5r6erKEkYUGMB3T8%@aJM@-'M0SmQKpk*4qh+Y*8&8d@f#'BeKUiQ`Le%6Y
+lZeTA(a1)VS4k22RAI2Pd!$jmZrkcQihM5-(J%mddh+D'rLbV5aY-q9Ck9(NdGe2
+B,A4D#"cJ9%Lrh82EHTDpj5ZIMBMLS,-Um$S6TY4PbBp6-Tf0IX0Ir!qQl6YHQa(
+P6@40jd(ilVa)0VK[rK*mlUGGpL2h09(kF2RajqC1JCrL!"hA@4FEG5-(E6D-1E3
+Kck'dLbV+aXXq9+d!)XpJ98@'qLh2!--Fh$Si8r&ZZ6GFZkT`SmA*TE[j%fZjMkL
+(P6Z*arabr[5IGd*I*k-QmNPr'h2rYb-6fl2[E5dhq*bZ6bHCLJ*LC'(6Yir9e%h
+*NhQj4KTG$ekr+TA[leD9UiqTKmrMdEV0f-H6Jjq6ClQRDEQRCbkR$b3&`IqP(m0
+$-X*HrXBr#2bGIC8UmUH46XjhD@PaTFhQ9R'b+Qqb+Qlb)G#R*LbkRGjF[+pr2Pd
+BR3Q5q0$pb((jR4TElm,)Jl,TklQ6H9"qkki-'em[I4DRBbB8U4&XC%DaN!")M"S
+HP%SqE*!!)`k1*3a,['YIBUFh5c,2B@9XILU`fFD2U*Q91l@RmcS,JBl,@IYeR,a
+MH@j1&KBATll6pAEkA,jRikfR9rX3pfHXq2@F52AlL[fpaYlM2hTe6fRSB(@ep1*
+$klEl(Z0@GANbrZc@j3fd)e[pYV2eqKihSH-J3"2*r$mZ2eRrj4U2PpAmIBC2Ddi
+[L0-p1(aABMiM6,Le1kUGc3[EZlXB2bpIr[C[*DMTpMRIfGIr(f[Kp9*MkMiqab[
+eGTp'qmIkR'qMj(dI([pIGcV[HrUUU(%[[Sr8qK4SIl[(iIMkqlmI`GIa[(mcMIU
+l(b1*p6MH4ie$alhq,MH2Tp9rjkVU[Jq%!!!!J*HCL*QDUCQDKiGRKjL)GSQ)KhH
+)L)L(Q)L)KiH(Q)DSKiGhGjL)GUQSKhH)L(GPQ*H)GiUTUAHBU)KhQEVDQ*QhL)H
+DUYZlUCLBGjUk[,QSYjL(QlbqUTUBL)LUS-kUQRH(H)L)QCQBCRGfGhL*LCUlHCU
+UUlfTbkLDKiZkUTL*)!!#)e3fH)GiKRQC!)#*!!#3!!"j#3N!!!!!P`N!!!#C"8!
+M4@9PCRCSLAH)Kf"hGhLC"iN*N!"iCiG`QCPjN!#(N!#*Q!!!N!#*#3P`N!#BQ3#
+BN!#3!)#!#!LBL3L3!!H3!*HC#3"fQ)H3!2qpTTDDPXYcp2ACA4H"SXVZE1bq[Cf
+@9h'lh0MPBY*8d0,iIdUP4A3d&"S[!d'Mm$3DA`G$T0&THdrbl6Y)Y"l[qrDBhqG
+'36epG3phfRDcZDcRCcI1a*hm%hKGH6rGiH2Jd1P[ZV55-6)4ZcPVAh1VFqeR,$m
+FcMHK-j!!jmc1FrRmlfHEeEf0iQ@jXEk1@jmD9pQXe&[kA1XrPl[Zp9ckM9pe9E2
+16HEl1DkRk1afmH`Jb(+[[V3DAK`8Ri+6!qV"5@prid%pFheC",mcQam1qJaXH#F
+j9r9JCNl1$BfH$X[e`EMVJ*!!@D@h[['XHiqRMYlrakqdSZkqlTml0jhXCZprXQC
+R-jhbU614XISl@pbe0'h&IckU0aHY'[*lhF[BBNjdF["+G@aP*HqrGBcerBjL2hm
+j(apKeClhCH0)U[Ec%EM@[3b8EGmVQCkFZp46ErRm[h2rA2Tk2Zp0qc`-d'bpq4+
+GjTBpM2AeM,i%'0NaS+rPB9A"`,R$fQ*"ErGR1RX[q)29km&cCp,kQ,dYRLiHdJX
+lR"V)+VQ!Y[i1hMrBP1kpq4cpG5I2q(d-fBJIi3[1$VDQh`Y0LiHDq'$Jf[6Q-@l
+Z20M3pV@6Y9E5Ha!!A&imQ0$m5FZq0AqpP0,"FHE"k0RKcm&PCi00BcqIP0KqE68
+[cpel1Cbi4hBTV$5f[0ddEHHE'hhQ6h3Q)eaekc*C6-9Nc9HTc0TU0Vc!#J+q+XQ
+I%YirPrMjejG9e0hIhG2Rmd)Y,rqb(&Q*h-f@`N3GVSqCIjEA3E'j`YT"EHI"b,2
+hmaBheIm'BJkZeXHV95RLH6+E'6IbmQrb(6Vl(PEQ$PEMTl+#jmq#hYm1VJXq9*P
+DH#KK&$Ahp8p1aHqKrB[ZIP2#56mY&5i'b[rXr(15BhBqAijk6@EfIfZ"BkVmhd0
+CMHG$b%U#("fAXB0CCi0e0khZG0q[[qqcRBc@jNal(b2Jf@Ff1XUZ[Dl(J9pVZZ6
+`EEe0r(QiZPZZICDlZpel2JCXTVAFhHl(PB86'i81F`BFp*KdQ"$UVq(Ahd1cN3l
+@2$Yl[TeN2PA(8fN16[[If8AQEMhUU9Jj9$2G1SPi,I,9r5erI3HGk@&@3@I-`Be
+M94i+U4"55"#L$8`!&T*',*%,r(h[KH(JHRPHI18rcqdl@FbT@pMX[Iq1eq$iB0e
+m0IJc',*c-&&Chp0",q6cXr+BrRedA[IpIa6qL"4r6i1CBrYr6+aEZAph,6I6amE
+Uk6$PSf*#LeY*dCH,3eAZjDZ[XK'kYP(Q)da@Gp'k[!ieVlZ@YZ$Ep(*8f5MBQ6T
+-R'kYlSHClZ@Md-2'hFL,,mL2&PlQ21c'eMqMkHUjrPr59m(k)RZ6[ElfUZ*I"dq
+2JVE[-5CQ@Jeph5B%c#XG$Ge9r-j#$,AHiN6-a"+hGV(QHqX*R)aTR*9NcN[V616
+UjQCfNc-r9QBH0Y,Z4XTRUhfaQBFpVqM$T+'lNe%ceF(B6-1cPHM$mklk8EUp2A4
+1*Fp2-4m(-4m,)A99iCM&c)P'[[6q+bk@ZLedH,4B%5E`)Z-`GG&i&[Kl,&kG9Lp
+5Skr8ff,m'[rGBrXPrJf'*BmfHkP6BqVY42CKl5,`$2055)V$5fX[J$jY,p-ccc4
+VdILq@alIPAeA"2@q"Xi+@cNLZ(XDq6XJ&J3RVHqUieKKb2MRT6Z1Rf)[dlUbek-
+MTAUb0(I+RAdC(U`IVcpMcG6"c+VTl'VeQbf8h-E5Qb'3!0E96%h@9-a033Y$[)@
+"UjMHef@h(5VpG$ch'l(*Z2HeNlHlcU986hqmrIqVqFThdT4r6jqif(GFl+Cl0jc
+XjVTbII`[(XDq2BdPp"2Am%jIQ[GP+V!XFEJ35j%)XpI4D35bmV#`2HUiY[Hi8'-
+`B)8Q!%mhJI##(iB-aI3CLdVllbXK"TGeXVrBbZ"c0I$LibKP0MS,UTU1jq(d-YN
+Jr(l9TrCX+qZd96ajDMMe-5EdPrSiP&i%h*bm@Ycm'[c'("pV#p1$[)HH[rd41mK
+kI"h[RBF($mL*jf&ZF,3a+Q&JD+#DdFYHDZMXYK"fq4qhkqFU6C!!X`(iGrKcR+Z
+CUlMGYPqA'aqIQClPb[bANDDq+pMD(prjkV!m[p2YIAjqJUQ@Nmef0E(f@$9`Erf
+2IJi-H,D5-A#KcH$$Sm#GSm#(A5*feir[E+*qq8Q,rmhdYL621CcjXemY2RXEjIT
+@rYDH0GhH*'Z,c&jmc5mh2E@0@ml&[CRcVbCiFE,HcBGVl@,G62kUZCrC`HMLfNM
+%f-28e-1PbmR&bf&L@2$LqaPqIcrZl,(EVfBRJK)pM-hhq00IEh5fZ""YZ9I`EEp
+-&**KLcP3b-@rXG#(PAd28`5Xj)Kk@2Mi1e`)fAX)G9GdPh*mH&'Ker'TEM#aEL[
+Z-2DC$D3q(XqqfF1jh9VZ[HaDfjVHT9C+UKrUUCQTKrVd2-d2kXA,50KMXGViF[+
+bRIf1PP*brqR,GD6US85SP2%bq&1kVel(CSk,0r0QZr[ImFMrEQEb04Ff`SHI'd2
+XPb-TlGC-i0al[eBH0h8MF3ma3i&4$f1@`GlDp+ap,T!!MUPE(Acf"0@1KUVkBJl
+AbHMNBhqrUqhRE$MAFDijGK[Vb`hA-M9[0X0AcV#DjmEZ,hc[PchGkVmhdYSU`q@
+Rdqbk(M@(%ZShUAGK`Eb0DAS-E$Amk-$(3p#`PIDM5[YH2-bH0lRM62AhFIC3mKV
+lqZKkA3bDfGVjA#XI`AF(RArbaZdpHXUrRFl+6Q8cIBc@IMjVPe%DPdR-UG49E$Q
+9fHVpKc0MRU@YjQbkYlXjQHpZ`jRYaZElFEQ1!Qmlk`d0VHprCmc)4YKXHC14YY5
+Fk&BEDNjZMM9fBjQ`MDE[j'1ZY2@pcfRDj6*j,Xj(bX$5aC6NFRLA0YEmAKFQi[H
+RL4Fpc+kji&[E@[&Xq6CAZaa,hBmVAbpcVj[JcHKT0KT[Uf@JZY6YM0Y$cRcCZT`
+[jHp"l[*kP*B`Y&8AZ2iA&PH4Eh[RaBAQaC[b+kqfY6I8X@AVT&0&PV@phmVbH&P
+Z&apAYl[bImVV2EIZ*RHC2)"J2llcH@A'UH,T,QEj8hH6NH@Lr5Xj-@UNpDqPSXT
+8mDbi2%fdIbEU*A0,(Xj[#LqEkI+kRrp&c&(HEDEj("K@h+i(-hi8-+[N8[@[U6p
+N%hZBXhjX@&`1C`Z0#iR"R14X+$dYT(RDp9Ik@"4F6IlbfU144mR5AQILm12P[LP
++18T*6`p9+bd@Ae%ai15dXlj0ePGaM2Kp$(b`G$bVc9m+MhP*A8QhfpGZ[-i(ill
+m'&&R1(IDUkTrU&i@5cACb@(i9R0bmpSS@NRk64de,,GDfql5@rRkc@de22kL9RS
+NT2b-5Gj([42aCl!r&6DLURG*Sm$4cZhbQM`G&r(!dN5DhFI18dA)qKGCVkTG&P#
+p2$rPe)2Jj2[dQp$diqVll8815dp$NYELmReVqRT1aMj&e,q0M0ecjA[",A4rGd[
+!lLEf[fpTmGG&MhAIr@,Dpl2GVQVEm'PYZij@,pra2JiXYYjHSPk+EU0&X2*qRGD
+haqjhAXj9kamGEqbZp@fiPlkNI@3jZd[kD(4eXQNKee&*eGM4bXhJ9%'NUK!+EVj
+&0"M1"(m+0V+c@kl@eHYVZa,AAVik`,$pk8EYI[eIaf8(DA8lBpj9E24k$*I0NDR
+FINrpkZShG4pc,lr9lrP5[&bh&j-VbCANrMM4YEmHNMaFCYC%5@NA@9mK(DN`fAh
+p&8IFb`+q*bCALrMV!6AZeN6Z1ZXpZ5qI)L2Vler2DLJS022a1ffXA'DQ,0j5c[Y
+V#[U,V4k6A8fRS+$86d5Ip#kLIA55R-"*E%*,l'2i(&PH,Eh[!Ml)eP*F9P+U+*)
+NV+Bbe[EANfdV`Z6PkQpTElrL,jXLqZY9ZZjhA2bZ8c(Cb2UfPlX0Kb1$UlEM6A!
+MbZQLifb[UA&%4ZNm5[[`%dd@EXiqcLiffid,Lm'E[GKT*&R&q#f`qaMVV[phfp(
+5c%)Z9T-hPp(NFY28NV59999EH[[[MQlqVl%j(d@mlI`r9lk@$P0R3d@laqLj'IR
+FYr'8P)8LAP-KlhTrfrqZI+Bh[mGM[)bZ1XFYVY$9jHDQ0(,q6GCHblI6IVQ-I1I
+00rGd0rL6ZIL3!+2'N3kApmA+9eTA9ZrVH&3mc3A@9Xh$dEhDrHqr@9IacGlq2A9
+RJbY2TXI'dXYrKCHKcp$j+5#!MqAlP*(m+,feY)bI@ZqCaSr@Z,lV@PrXCh`k@(Z
+D1(CjI$kf@kH,e-5*r[)jp4j4Z(jSQQRfP*Em@bj2(iHYef5eYANr#mDCm,(d!"2
+#KicE6HkN8X+IK`UfMVElV81hepr8C#LRI$eIID1(95[!aq$Lm59`pE&iHSLHTbr
+HKbYeciRp6KL[VE(dVILAYaIH&1k6GB&9$VU($eF2eHR"Hqr&id,TCD#ddQ&,aGI
+CArI3Bm0GVY4iAeUlqIPmqMq`L!%,(kF9re$rqjEi)G&DAq,@K5e1[`Tb(FiGeTr
+raDlN2GkkLce4$aP$Hk[P80lVq6@h1"&Sm##M`)Y*JDh)DkAV*HRK8me'K4C654m
+['d@Zeq(M[c6AD1+3!$-f'3YEh64UMcBffmbHjdaL4V6prj)hlHIm[PilerV5JRC
+d@GcRBcI3KrULITJqpKbX'kc'#-#9,J5m'Kh!Yd5[R4mM'k[UqlNidLkX12Gf!Ye
+qMH@!YHl[Q@!YhE$R#jpBD,S@!ZIBrfV#8pbXQIfA(4fN2Yl54XSHBVEqUKdY$*U
+1a)lEr+kJl9h`#[R`DGHK`)AZk6"TqY$SDIi0b-#(AkQhaHT9BSmCGVEBHY(Q@`)
+)9p&Sim@Zj25TS[r&pkp4fhG61mcNi+$HE$mbDNiN%rIG@ANCDaqK,4[Nd[Zp@Up
+bFX1M-4Z2j2Xp@hk'EX22bFEGrNj[9Zif`Zl$`jQH[-pTHAeHC'ar-X2S60RaqGp
+E2@[RFbbrTq(9DV+icjrq[iXdGf2+DAPr&N,M'r5bhLbrQD@Fmc,H,MUMiXKHI@k
+AjXKM9a1pY5@'ipM"M9rjEfcqABmcmfalG-Z)[@GMEf(fY,l9(BFQPpV5@(,f2YC
+MVqe-@&ajpKFHGd1rp+rXG,I`D@rXG*J4+h"KeZ$-h(p*RMA(YCZCZq$lRI60pZ[
+Gc%cm1[pfNQC0$l9PJ40KJj@km(Z%H@)q+V"fITjZ0qH*NC%lQEl,fYR[XIFeA%[
+DRPak+,fXM4a*@qdHJPD(9Br%d1JKI(FbP0e1apcepGh+XYjr3pRHq"54r`h-j,h
+Y*8dm+[UEQcVl1eXpVY0R8BYcEj5PZI5kYAY+M&Yl@UYE1cXkrLep6GJST*bApRm
+@8T,lbrap$krVd2cNBX)lKp$h0liP*c2(V0Y9eG9Lfp[jPVDfYYDm$eTbcXq6Cf9
+heUqZ[+5UTkQNSqG49&2aCH&dI6qP55I,r9d23ZU[jk-N((araA0I*TiX[)V"Md'
+2kcfX&[THPYS19P0alfjPrHf&Mk@TJYpV"CqE&XVD6V[ibBREAm6,hqDQ*h4E[I5
+-e+c%lMpeRqqKbYTPphbphRIDqMR2CbYeSp!P&@El1C0&90V0Ci4SXm5EMdA`LLf
+4"1I#+,X5,M+L22kI6Dc@8e1D-IAll3NfPXer6-mDpe%jqEbS9P4hRacI,qTm[Lh
+AKD)MF`0CRl8IfG,p60emcA3mEUBFj,qhqI%jN!#jZ"ZF#$`aZZaDQ6&fq$%!(Ym
++GhH&1bQfN5ml+l#qK6ZKSEqD!Rf0pG8qMF-jIHh2l61E+(MG[bUVeI$V+VAE(1f
+1jJXX+,[m1*[-$qlNp+,EG+,DiH,KGI,heE&QHahFIA`5q@[pY$RYA(f1GfG0@Hi
+EFfN4(jVXjR!q6T422LqE"@`T29Qm#@LkQ&&be6)kYG(Q+FEr9Yq2*Dc*q&RI#QD
+BE6dHPlAa0l0i9MhprG8FmMQXhf-cST%jXk@rhZDNHRmq@XHphA5Pr(PTbJPFhQX
+l2`qf`S[Q6H$LDq*NX52q,'5Z"UiFjPVkMK`YAHlELlq[rrdMl&eiHP9bh1[rcl(
+`GCQr"TYCXGEXG4T3ihVB8(QaE2Bfp$Ykr,lqUbh%T*@me0MM-a)SB*[+6epiQ@L
+cN[)fXh)SiQ-UEhEmRIfh&V[D[rXA8r2SNK`fCEhSR$kFlk26bq$,GA"K3pI3bCH
+(3qp$Z1ReHR$p6T`rac[$RI`6@(L42Zk6#rE"[ipeVp-k3qr4feIkR&helYiqPRC
+Vk8eID6V50*'d[eXcr9TVA1lqGlUqp2DAhjj[lqCmkJi'SVTh)69rUiP0*mb*p56
+PiP&0hmh%bpGb,@br4hQCp#kee!k*6mp9VGCTYG2kLNLpYiF@&i%pI8)mlN+qemA
+)I*&lI4hF[4A%j8EkFfpE5HP9BKLj`UA88PA5eFrVD$1H$2drk*qkZYV0SrA3GM2
+HaPj1pQEE4D2HE$B9'fh@VhGT0EZdbqqYYpp6%hfdhHhKE[NlEPE$mZLpU2lFIp(
+GqjQj'@h[DkAScP2Q+'Ic(i-aQI+c1Yc1Ak[SlI,lkSeHlf'fffMi'LKIKNEhb-[
+rPkrfX`GH20ClXjblLl[3bCb(SUfqrMZSr`dd2k&,$lqNKcG$JD1(8bZ$3c2GMKY
+b02XHA6lDpTkfpX0IHBqRSEb@MCDmPkI,FZFM5R,c01!5VQF[EA&h3E1CKA0EbpG
+5c-[bU(PaXD0mQ&PVb`PlcbjZmPBdjGjH0h&e,I@QYCQ0M5990GIfAAPj$aEV3kR
+Z2ZkHCPah+I'p5bhA)eplSC&$6qYRGIU)0*IJ$Lk5rLE#50Q+(YX(pf1hmAk1P[p
+CGD6k,$5(`,riE(5Gcp,,B-lj&$Jr**q561e'"%Sa`9!$[-T1Ir,f&)am@8Sq0[0
+jrTpHkaf15NihmeT*b8UP*1BlA)flQN52VXMh2DGYP-N-'rjC64e0rCFLfYVIImR
+c+2P9ecCFAJ@eY`1,AIBR[[lI!hr*iA&YZ(VI#kh*XZ9AA[N@A-UEfZeGGAD5MXY
+*4F$4dG"3d@dU[Vh@`b5F&)l[[pAqI%hQhSpeb0A[kRLCHfT2[F5NZH64FUmer-[
+F3AHIdIYVSY[CB@dLer&NeN@U[-#$'Am'-[V#$-FZ@MiqVQY2,E5FS-K9DDHcIq1
+iZYINdpaCm9dIHpY8EqMiASlEIlcMkZfUH40F5MMq244Hh[*Z4B8-@EMm1qLr1[[
+Iq+qLe0p&USpMYB[EhdYVY&%P+ML8A'hQrfr"iP4`YK(X4'PiFbNaQBl2Ip*V@#p
+52[*QHee"3H$6DH9R[imE4k5iSjVe+L&FI9rP-HIDIErlb2RC+KRXjSU2*8AmG$b
++L9j&Pa1&`Z68AFr(REMTJ$k[5Z[,KplZ[CdZK&ik4r#@k@2XFEK`S*S!QM`S8'V
+`CF!R9UT-2Dj#$Ai(9Xm'(SE1iY,l%lkVKh&[FG2)l5Gp'hhr5l(afR+hq(NpT1f
+R+Z-,%QD[)j'(MEMJm'2"@qL!6K`jI"llUhd'`Y,k#LhB"0[I36HaN3G[RqE+GVG
+F(+Bl6IXLDA1r,Qlrq[+8[kT'YpqpjXMaiX[JH$&R*1QLcf$QB*l"c%&*K5ipq'k
+T3#8Q$"DCmF4FaMmA$LbR$XH"br5`pEV1[Kb@JHRcGM`)q5kq&&P,6)B-#!["q5a
+UJj)!PM5BFZ%CQ)*l#c-%jJkB+6@"@DkR(dee[`Ae,+GjXj6(H[pl[d[5CrXCh#K
+m(RIIQDQbVEcA88cSlc3c1MjP20Fl85h2efShdYEFr(de2D8GGcTZNTl5ZSqG-88
+EE@FjcHqf&2@m@EjQFSBf[rqAXcmrjG$GrKbh,r(Gc2Jh8cVH0c0IVFp8cGacGAX
+jQ[R0hcDLQQE+MVHI58HHXUkKjp0UjRJF,(mr`Bh!j21TiA-e'KPVc8D(5FQmb&0
+6krlr1Km(#pI)CBccG[RIkCb&$rhm6Jd@MriR)I*QEZKrbPp3`CK`XR)Tj(d[4S[
+!YTfKSEV865B-KQj`X6`BR`D2LHrm,!I`BPra,V@Bk()!KYq*lrJa0"[14a2Iq*S
+HD"m+kj%iKq0QfbkQFQjhKHMZX,`Xh$UGpa*'cdmVR-Yi@RPZ*3Ck(0F+2$aJ"1f
+iNHCdm58j2)Mj284*6L4iNTE!%i9pRXM%dI'i&rTqqLE#ihq&QjL,[Ye[qR0jU*J
+@dTa1,e+#EREEIEV$dfEKlIIA%QQdm1Lhr'[`PT[IaiFXa,Df*+AM5@iYj(b86YS
+q4LCHlYVl6P-lq6R1qLlEJlr$c2I428eIUG5PZTM-Q)hZ-Ir60`Xr@b)8Vm0ELDr
+Al@APjH22jSqAl[BRp-p)Zl6IBcPmIp1Gq6NFINFIf*VMqaSrakhrR6pEf0(brGQ
+ZAHFZmk-lmPpI5*5dhhFiFrQfMEXCl(!2KcXlmRkXpU-pU-pLDM2I$TqYrcb2jr5
+m(6jh%dqGdqGdrbITcZGcdb%h$ZY(R%Y8j,XCleUMMlcGbpEAbq[UU63ch!b`Xib
+erLhqKPG4UmIi94,909,krBj$AjQIc[kr"m@9cV2$"PrXrYj(fIJrEqANICZTM2-
+FKMAXj#kl[`%K[fi'SI'SEVk1I4CkMXCl$cq&p'Gfq$L40c%mLD!1J+J+j%@#1jL
+E[$rVahJSN!$*Idb-,)p@,JC(Ud2pH4dk#HBD%lqFb2"m5HbNh#k[K`SAeHmL)e[
+d1a,rPllq(m[IZV69,KS[[6q(KG+GbihRm#(DAd1iM`l[MI"NFRB6'5RXlN-MTXP
+,j(`FP#ll8C'@lk,M+h,Eq45iqBL`Uf9i%LQm$bSXhZ`%5S%Ge+ML8P54k(ImbYd
+2#Z)9E3m+ddH[er%f&4SUhmPV`C5iP,L8Z2IeN!$i[,N`D2PG2p(DIkGh@&X2RDM
+qHH[2Mp@krdlZ"S2qE2AAaqVHA8aiV6brPcD2#a*IiFK+d-MUlDK`jE(Q,cjrGIb
+cFr5l'QTUE6DE6C[+ai8Xd,GE0lbZUUQTUG[Yp[ZphrAKbd)Lrd1irP1Ch,6qMRY
+,SD#XL6'(NCFLdVhAmmhLBk9LCD(Mml0C1&QjbHRrm0MqEjf3!#15rDr,PrJMj#B
+2N!!IRpereR0*Vk(3eZ8SE59VG$3e1JMbhI(+*h[GIqGRDkfXV0GeVDhbHKMarSC
+92A&frcC$LfZif0I`[AMj$a%Arc[jC[GAr+i8Y[0(89'Lp((mL4GGhY@5)CSb)4m
+M[58BlZ[r-hi%hA6@mQkl2cqMc8emQqSH$p12#ma0l,'rdc0(F6qkd8pSY$j@KiZ
+UMbhQSi6YrjjUDhNp9GrAeY986qLpH0G*NcS1cTVU*EBF(!1&q*a1R%p6hXVrlEd
+!$3"kmDl92qh%i'%F3pPKa"L+p(TCAm,DI+If[,42kEXcr1Km6$JfmYJD1*09%I0
+jl%irZ6-VhIZjITBNAcE(Ci(9R,q@XFr#JbQ@VqMLGp'r9NSh(pAfHVG4Z$Gf&Tb
+ihp[p[PrKh-c5Fc%QDqma*QeZjQjj(3fPKj@eZVUppIDAL++Hl1NjHYQHGZ[EQUM
+2AIPHhNY9effq,IE1p41DAXceh2kMpG9lIAf2Ye8EiGjp$a'fh$EaZBLEm(Xd(-L
+lUKNj#(p'KY,r)$(0KDUqEES0eGHAc@llErhfrAqVcNp%iZq0e!1DJ26lq,55B+Q
+6eKK+pVmmMfIAm6RTT!%`2)NMf6(+C8(+C1l[jrQbI1[I'M9e[cp0Lp$0I$'Z,Af
+TM&ZXN!!%QGc@Ck[YZEmYJ!A&ir0M5R0a)dTaUrfmTTBh'mf0kPRd*q0`,2R8eK6
+Cr"b[Vq*d&82Y$%'Q,c!L$mTl#6PIpHaXl#PYqEV)frmq0k2hClfHq*r+#V18+Af
+P2ZHD38+bkQI)R,V*j#0Gr$AKK2Cc-EK@I2TSePj0lZqaY[AfhXSS42*cBHh`)*U
+@Mk28I$8HhQmpkR(k!RNh,EKNF0GE6fN8SQ,[0jdUU$cDqaXkVT6qJrQhfkRYepI
+,HfP@3LLPZA6bph6cI,TjUme'M[-pUqfl&IpRikrmX(Laqrpa55r`1CHhYlIhpr+
+GV+GVfrD6HbpMYD6m[dj[emYlU%3L(Y,c85r)PZ&Spj8E$dG&amYGilA-l#[AbI4
+3N!!iCdfSp"!`Hjq`MphT[fH!IDplmL8lc5aa9NIeCMC-BCK-+VJi&cKl6%JYrZc
+R6fA``ILqEQr$Ap2Feic6HPjX&[jm&VEJMVq8#dD$Ck2Bpak'1r4lq1Z[lC!!YL#
+4VBIjGelde86['mVhXPUT6*0kB(pd`H[Z,j1p4i2B&SmdBBFAJBF6KG+*k26b[qA
+q2@X[Cee2CAG28Fc8D6Q8m,RDkRYVISE,&pUUaIFU1[lQfaHMVrh@(APqMX-5``C
+lh+Q`r*YBh+XqKY+HfZHG@4UVPdl$6LfA4rad(VlLr98qh%XX'#Z`BYGK40jK40p
+KjAL0UPf92MB#+QJl!Y4m,#JU*BIhL@U1MQmpIFIfa0rQqM68r&DaUe&j6e0h6fA
+*k'XM@rQaZ9YBdR8f'$Rif,P21k0E'aI!c(ZEH0*TIDVmAfYP'YlESDf0CmVQ4TY
+KTl006rb[,VEb@GKTJErRZZQ)'h(PG2*DVqEHUaee@A@f`88drf*k22a"fMpIBp1
+UJ[0jp$lr`8d@fj1$&aJX!-qD'(V),AcB,RD`Fc8f20cm(kmTjh`9X(kr!c(8fm(
+-THRA[[b#IH`fmP6H5Tmj+YAdQA@hIFbpMjDZlfA1Uih#pMhBeaGdr"jBreZNjdc
+8mc292-QE,PjkhirYl,8I,hQC[IAeI69#ZGaLlIY#d[[-llVlArZplrQIKPr,XlR
+SDIprkrCQBA3QFr'Y,bRhA-TpKc+IAmkRbr3V-pc0jdEUqm[9A@UkL)QIl*JP*U[
+HkqapkUJ[pjfNV`m$m@0hYIFiHRq16dSH-`iII`EUqLeZ"&eH"&SF',Mm1XRH9[2
+JZTAHk$er&pp+Rk$jY0lN6Lp+!I'5fkCL@ir[CAffkX@9BmqJq!p"AIRS+Lr8kRa
+3Hr"hRfD[keCidEkZ,(qT",qC950a",fB#mEDmfer*ErHr&BB%MpX(1`Ha&aeea2
+e5[1bZVdijmrY@Q"r9hh+RFlX+qZd8IBd8jVXYU0GPY*&a[*Me-5Ej&p44G(a4Va
+8A%`0&L4GKE5F[&VEE"aq,*b-'[c(`@0VqU$lA[lhl([HR"hQplb(1`Ckr`,rp%5
+,%lb(B`p2d[dI8prHqFK,`i1[m1(63r1`UDGmRXEcIB@KL91rNd-@LYX$4369cID
+23kM6k(8D5ETUHETU5FMajb2@rhhf4qhkm(pk2&d[c6h,RiQ0U[GkqapfUJlBaNA
+Yjb[,p,d[Ce'0pR2C$S6-pcjQPjdcXHC-fGlR[*[*RdVZCj9h-rNi`kFm(Jp(kNl
+MGe)ViHPSErE`pMMm(A`r*kAljI$XG6c,UkTrpNe+Ml-e([4ERTaH6ldANG5*HG5
+G[Zj`RR906rlUMm"l`dp$Hd9G(bHRe[Jl6@9HXdqYQB[V6GplHaeZceQdm+VTUbQ
+Tk6b-p5H295YA9Br@BqLK98ejhfU+km2%4(L%&he)PcKk'*Yp(J6d6,qM(cZHKbR
+cjpjD'Qq&%PQ1c1@9aqAGFHHdA'mVMFAZqiIa&4kEiN4@Cl1BfqmNeAkDrakU#Id
+(ZrAPY,&HMTG9NF695Vm1QTreSLXlfFjaHP#KlUYNr&hd2AeZ&#Kfhcr[2,SpKqa
+[MJIAMJdrl8dC#UAqqmhPPaURLk5jQq90hNj(PS[dV16&UT2@[TD,+92'XZ$a0Y(
+q[NZY*JVm',Z4qbpTrriH9ZY6qj!!q%LqM`3@44YZEFlENl[ZidXHMm(66p"5DI5
+DkLTp&eSr$MbRJ$#R"YBZ@dNHAe%ai15dXlh(Lh@Tri9"Ad5T6q38FQ*85BQf`FV
+j0MM+,LErH@e4b+2Nk5mcmAjhBl6(r%iC1SZpjF"Nr*ZY9rbL#%TPaK4+Urd-5@d
+Gj8HTk1qiqkMilJ2bJip"rr)Ja$1LhPV9EQ[h&9Xjr3Ikf,Ui(TGMYFTUS@UKI6K
+GD8PG*)D2-,aF1CrHRTCcRDC[6kfVefZefSe'SRFVX+ArbhpD8UGV(M`rMD(rQcI
+)iY[E@eYa1*a12amE8lRlPArY,dRBadI+rr53!(d-hfQDG[80fmhj[rl@Il5p+#1
+Crk*(+jQ8c$d`9ll@IqFci*5TmqqZS[m%j$K,0)(hDjqLpZlS,[bH0Em(dB9T[ad
+#(V%i3!`"rPSZ&86Hhi8Y8INSSp4eSqjKAhVEfFkX@Ee-A'92*hR)iA#[+JG2(JG
+92raQ2QR,DiNH9$ampST%a[CALpj4l,lqLU2ZCEImU9iR*PH,q1Xe[ak5pfXLGae
+e%q4VUT&LXrLp&LDlXlaqjRaRqS+!jr0V&aQT'IZc[YU-rA@MdQZTY238'S1IHkL
+Ia9!B$h[3qG[G(8AR#iA)hNHHkdHLkep3rYJGfae2@Ce0jUlkF5e`G$%SY(I6d6Y
+I4ir(Z)q1qmm),6BV19%9rI[EVdCl4F(bZ$aHkc,`hXred1dVhFUUiGIie9@6qJi
+c`YI$rmEjKR2-0SIj*(d*E0jm%@6lmAi[JLr$qU*r(p@9af9rp8p*r,l&[b[@[UI
+@pEPFLiKAPT1APE3Ijkbkd2me0-'*JG5#pkN@ppq*Iqr%a2Jb[i(`D6hp%0-hmfD
+N3riqr"b*ETD1*[+L6Qjh4FHqKbRG8GlYI[IIV+[ijZpr(VUc`C@Rdf2MD@@r`X[
+3ZThj81-cmfBhqm[kU$[kqaPkUrRp"I[K8E(XGcZ[CbX25PR,hhS"G$j*ZKa,lhm
+V`[Pqj54r#LpYE5-ReV[QFD2eVLqkeTIl'Gm1PKlQMKfHA`qYPZRLp6%LIp3rrZ@
+q#(4@PrLeZ"93kRAi8j!!lR$ZU6XPLBFrmfEUF,qA[3HlbHT5@-,49&lMq&aCAN@
+pljm@&jX@EmLZ[YV8he,&Pkk464CDe[EANfdV`Z6Pp[HdYpqk,q6"a*&p(ehc0pB
+$YeJIQ4eqM-6pp93I3Vl('e9p2k$Q[mkZ2PX)l,IHC,qH5ih'irUHTa1&`k#JS2#
+eZYdqRrMb14aqAblZ4)`jcrY2KPNrjj-I9['3!1G!,RY3!A6pEK(B[Y0pMEZlZim
+I`1kqG9E1DQ`kl$h'"ZjVBF5jUGrFe@mp@UVVRH9elDHC`,hp2Dj[rE)8qUap29p
+M9BlkGeQHl@9b2rGAEZrdm1@iNI`D`E8eA6kIpXAcqTaH9kf&6dRBaNHkbrH1#VI
+6XhC5+#,fe[HA2*ZI@YVhDp6eX-%Z2NA@Qldmj'I",)qarGCEDM#5ai5Rj1*(dre
+UcAI@UkHXUiZ-[2BXSmAcj6TaFB%l&aJf)SJ1mrp"`GrEhdlT0hT,+4TmX&,rREh
+Rj,RNrN#SMdp*r#(kf'TP(bqA6j0BrXjZ&`-rZ+hr[C3T@Z(,TaX6AmEAmEDj1Ab
+F[NjIr6jdlMDVB`[SGYmhHhdI,aQM(rc0Z#,%bF[m16b%V5bY$rhXZVZ0Yi9$qEj
+hf55`j6Y-G)r[qGjH1l6YY4Tb'I`lhaUk[mLbmEFH0Al[+e-ABI`Pp[ZDla[)qT[
+0[p@[XDr+e0IXmVC9rp9Pr$ZpaZI)XYa@lH[fhf,+[khDImpTfQ,e`!!!J*H*L*U
+CUCQCKiGhL)H)CTQBL(GiL)PhQCH)GiL)H)DTQ)KhKiKiGXQRL(GiL*KPQDGiKiU
+CQRHBTiL)UE[,UEUSQ)HEZpZkUDL)GjZkh+UDZ+L(Qkc-UUQ)Q)HGV!flUQH(GiL
+)LBL*CQGRChH)Q*R-L*HYhYklbkLCKjZUUCQD)!!"*%GBLDL)HDQ)LJN!U3!!!)U
+3!!!*!!!!"`!!!!!+"MmM4@4QChKSD*CiPkH)U("iLC!!H)F'QAGJL*L)TkN(PjU
+JQBLBQD!!#JL*Q*LJ"iQTQ3DB#RUB!(Q!QJ#JL!#3!2q0TSk[@EcFr9erKD(a0$i
+@jhZmqc[Gji@ih@jY[#Le9IUGCj2r+[F&DA6DE3q*ifLm6aUHSd1Kd2MGYrMfhEI
+qY2p2[1fbAmDP!R(MDR[1fb&*RY"p'IkIaB[aiN@iQI*KGQHPj5fcG2+RB2"RS*U
+dNCD0r[Pih`6mDppMh-c'pQ&NZI#RZI#b[0qEm@jK9@"#X-#&DAd,HmZMh[,KA&l
+4h&l#pENmrD@[f[-Malq2"UZlX0RS-lRrSchTG,[IReR-P38-Q#LN38mM(`GcHBA
+QAN[l%&9JB,!@$*5S*k6"3i%[$`S*jK9Sm#A'am,b[KJh&e-fQ2-mk#aZ`adH"+Y
+EEkAfC[mIqXIbpAhIhp2iHHm2q1I`rlBFA,8QGhHaN@ZFe&Y5cYj-mU$Hh@,VB10
+[IHcZ2eU+$Vf2[d-(aDci*lkdlf2V6[lIV6eYfGc"fE6hm["*Z2Hc%@pZqT!!S0p
+*JXX'$3i8'8a20LrST2iB8ICe2HDAp[L8DJ$e[)bH*DqPDB-&K,JUX+#RQ381(&m
+'#iNGL#krABG6cS,cp0$e22aqTj8(XAI8fX(VIXJZX$%M"""[C-&T+JX-'#UP`88
+Zep,YXR+kf&(XDVkIBr"Rmm*[l-lpDHjNVlF'hqD$Gr0"kIb`F,jB1*mXE-H"S)d
+1kpV&fNAmF(hS,VLiZ2l@+#0lb2b4XcQ)14l-(%[-A33F6pN(#[-66`E[!`YVED6
+c*UaMk[@I6YqKR8q[fCckdlc*9V"Ai%ckP("Z[P5Fi2bl861eKhAjFACaIaaI[4E
+VKiZ2qA&aq4LBr)aHap@Ga[UcYYr[-`ipR9pjpr6q+m1hf2V6hb5qTeG[EARS829
+f8&h[FADBq)'9jK@X&,35,DDd@$jY254F[$rR`Sp0V9Brm91rV*GYBBA-PfhPMZH
+AB!)"&Ymm(cqJi)!*BblAjpC,qc(m$AC,Q`mVP`hh1&c-,i81Bc!9!YVmpM(m@Xl
+R5ihJ`p"mfHpfA-Y[deA8aS2df#"DVNhGhFHcj[PHEVpRYB8@DidV,aG98iPYp@2
+pVApjEp$a2%6&9R-`[cmc#YUI$L@'($hXb(FB81kP`lV"KhNU(J5BH&)Kielm(P8
+Q2a*UHi-e3lqDRYj06eT06fTSIJVjb$(TE$hpKPB-DEZ1Yjd'&HG@0"qb$*G6(N`
+A8U$Hi-(h)+UCMi8&KK@fMPrfI2VTAeH26e[dqfb&$R"FrEYDhlIX5IKJm#`Nid(
+J98U0[Z[FFkIaqEQ)eRGFh2ir-d%EBhGrTie$l(k[*PI9MqV&llrYqM5DB12qI`F
+cT5FcHc[@p,c*Z,HcdcXd(8bN&P3BXj!!9e0LJ96BNj!!EQGLf99-l06K6d(QC@,
+5f%cXlH9PB,,EbFY"CEbpZ-,,eZ@Jh1AeqAJh-rVTq#bZGpGi@BeS%mDhZjRCj9G
+H!,UF$#l-M93S0c$b-h)JXT%%pK8Nj+JdGp*YIRlV2NDhprr*b3hqM"N@XU6cF+f
+TFVK4+kKQ3l+L`SGP6J*SjF1ZX-'(C@-U(C@J#EL6$XYk!RfT%1ZZVfC2rBKf9hb
+*QBmq(CAR%QCRcSGG)fF1bNIAKf8RC!*Z)GP+X3%Y)GG,ViGP,fd1b`YL!PR$XTQ
+`Kf@(A3kl%YYc$ZTRCkNABG@*Sm@Nlq4K`qfMfINU4eD4NcmIDfr9em6H5BY6JaD
+$#VB0[HBPC&ZZ"e0P"bYc"JH6"KD2V@F(lHaPIIkF6pZ9prBI*eV1f`Y(lfhJ`,$
+UfN&j[FAC`A('a0I"Yj%&6+LddZ,1iGC&Zp[m(irVFI8r9Fe%2Yqp53V'2De9p'T
+lq03i%E`BeMm0jc2X4V&!YT(M@&l'UZA'SVk0h&rcqEm-(S@%c'Jh%MjSh(Mre9c
+'TdEXe0C&GQTPaKUF2bSYeFBTTTEMUf%'"V2HVi-,alDBr,9h0eFEl8m$M@pPYlb
+Zhe6)UX[14D$8qR1bpAPlEGjVJG68chP3p01F6V9%2"i2[k@Nq(GHr94IpqPmXe2
+c@NQV$r'2jH`l[Qq"4k$3%b(k)2p[8rbQ%Pm&$,am'#R`EE`+UAE6f$E6dZ#K`ED
+K`BY9+Lf%L,[E[%`ZVYBPhIiN'4`mH6&mZ`P3I8SC9Yim&&[Yl+q[PVE4f81YX-T
+,N916bZhMlABpcf2`CV`I$qI2b[jSIGl$PE[4FAfTcLb0T%S1"Jk6Y5p*%X[kD#C
+PS+lHpDfQHpq2mmc"`F'A+`T1*rTrpGDfpqKm[0BP9$hrQ8Qmf-c4a+rEi0A"R0h
+QlrIdfpi8(GcrhZfiqSVeV-jh2r`cd6dm@LpMeXjHaXMQqA'bP,I4XeQ`%c9r'cA
+L`UHqQqa#UVk%mk!,(TG#rpbpMkZ`@NARp"qr23kbDcmRF622Jhr6Tm@&M3F(Tf$
+3HRaBIIV@ah8U,Ei-@b`SZU`SZK`iZ8aGI%[0hm%I+HPrMqUbX8KY!)DrjIZhdHV
+jrR4Z6HG'&h(3K823KH,'i0p'hf"'Ym#0CFb0X1C'VZEDd[2M8[2aqA#Zlf&lFH&
+lZeKBA%kHdSmII5-HhNf-1LVX((e-[(TF+bKrFY[9JpQ*qbMrGqVp1bbG[d)P3+6
+jY(IrLb2fp(IqG'UZE8!*iFD`jN,*B%EB4mI!M9elDk1r)B@ZT)HjAP`UVPj50QV
+r([Cb00i%DDUSm,HmK![%X14c[+b[P3[9fQ@fN!#Z[6hZqk(em[Xi9jCh&[dE'Ih
+%,!XVZZk9KQE#&K9ejUHRA`XPUIGf-,*8XMB3Tj!!,3cFQZK8k"G(+YGC+YDUA@f
+%ZYVm,8E[#e'kQ8ITc+2IG,MrCfDL9m62rbchUhrpe(PlhlHp[kheVq&JAd+CHdH
+0(SrNj%RbSG&[THbKf0GKep*pUPaGK$rbpk#CeS2JYZ4P699hfXQ8&YCELAPVDPZ
+T@BYTU2'q+2DbZA'NheVb-#0a1CDqRcBfljYVT-$ri[Bpr@dIH92kYRY%Xr$*6F$
+Pb,k2XqGjpVaEf0qAPf["[b-+eXZCDl$QfZTjeV5p#0Q[FYFKdBded[2KBr"NIAT
+*kh+,0(UF+cT,(0&$hUG5$MG6i8#!*EH2JFhMrAmVZZEi&$3jrjmpq2ZC(q(,mk0
+BFE!fZSX16J4XKJ@Xec%lf8,&Gr'TEkeTHAE8kQrJdE!Bdb+I""J!ifTjGVUEfeV
+VdMSM@8H0Cqhc0"DfGjc+L0YlV!mf0VIZ5IZap2CGcff3!2!c1BqHIr0Jk1,0FRP
+A0hFh('ZH0a,rUGH,iI-Vl[JA9c`19[H9DFUakprBhPMa*h8d1qS066l#Vp(HH4(
+eYQY1l-D$q1IhN[q'*M4I[eq*&ZE(PD(Bh18iHpj@hN8m'4UC2Pk+,3GLJPE#,38
+dRB4D'JPDZ,1e-QRLp[YT[NlDPiHkVYY`I4imHNfhdS@lc1Ac(c6rrL4TFrVmY8D
+c6epCAeZVJQUqCMc)[S@Q(fT8p&QYhHm2LFRE5IqFHVfkACH-cr[H6Kq["bZVM4H
+9+fpE9CZXedhVY20kf*NYj)UiXlD5GC&S2-JS+q99I$!"-lpb,1lq4Y020eQPc@e
+Tmjq'di8Ia,4,V,#kpZ68kI5jr6D5SUY469ZLMDU,NHc"hXRpX'jLjV9bFVU-[TY
+"Sk6,IJMq,Z-Mf2`C5Id(mXrK3E(8bUD,NDHrUVlEmUhNGV$aSZm`IRT2%S!*rTV
+`&hZ$*r4S)mEkkHE`Fpr,-GD,PGKUH0UmeUq([0M[q"CF$J5GR"NEVTd0eJA-MC`
+C,J5UZ,Uph,QkD,UY(KpQDlr`XRif6P5m'9,[X$mZ$VBQVqj%f2SC`Y1E(Ii045C
+bq[T0A&mk9(d2QU)c`"NEr%rKlf0&kGIld@AXT1VSBQ4c@r[jZj[10l1eV1a@kl'
+!1YefeX*%6VbC%,cXMEmkElmQbj0jr$cr+mMKeIlrCmV'V-DXaUbajFU2i[RU%Xp
+6p[RTF5UqHL`B+E[-Ml[ir(JqTAi10&B#r8S0rYVLTZ0AFk[NE'4EGY(erf1jYqK
+iAK*KZTr$hmD,rlVrILrbehr@XJb2&P9N1QiN[@`p[EiHXKm$9BZVLlbR`p90`@P
+2-l9KKDb#QhZ$fVL9fVU6@4YTk-M84*bqNCQe62j0)lrMepVVmEAib"!%f8UDb%L
+*EGlBE24H0Q2j6pcpIr,m1Uf1kf2pQEhqUhpj0mE0FEf190mVM6B#hH"IrTTTF[e
+kp!NZAGB'""&mL(i`kFI1qJb,*)$CIKd1arXc3Gh2X2a&2(d@j8IFq5[Ir@$6kM6
+DE6k68D1)D5hNd%VbCk9UBZJl%VfC0G"1q2&b1a[phaZ([lk[PId4pEpP+$088e2
+mUaNF1Kdr"cdAZ19)VDf$)rV*NG0&SEQ9@4CkjPE5,2FD6ViZ4[lq4Y51hJ5GAPB
+P09iAALr4Ar""rThYY$qY(eY[h0[c[#c0&mdrc0pFl$BErJkVEmM19pkDBG5,D#J
+m@#QS-(9I$"68-UTl8UTJb31EIL8'li0"Fl#QjPHDJrVeq,""h[HcFHLhAF91Xbf
+A80UVcXhSYT0e9a0eAU9peYrb3HK36-D,k&I-JT*q9q#2TYhh(NqaPmVQ2SRrmY6
+ZpeP,2Nl#434-KUT-l%QkQ41`9H$rRlR4rdcaIYb2e0$*d86)D[PkZEr,X0$YV,k
+rhBrKlcZ0,MCDESIPS2djU95CU9m8Rij&EVjVa+'YaUhX4HreXjf0E1eH9dQ9dHA
+TXcBb+,HXS#c(bcpIIq$rIGBpjjGIIJ(jG"IlRAf0C0eHQQpRSmhkfmr"cSRfPBH
+KK6)p,qZjJb2!ND$Y5-c@`YV$b2%NkkNRH$+f81TYjIDXX+[Klc3iHVKm$0BYG$p
+Q$PHp%kr[`rUmlc24CM8%"mfRfP9GFEHFRPm$PFLjjA%j9ea19`CcJhqqcL"0p)U
+jbVKj+bTV+996ZXKd'Uf0GJe19TiG0SG[5bpAPYA$VmT[-e-e-rSBHjmUPKrFemA
+KAh8T-Ke)FhJap9r-QLc3lhNmcpAR@f4pUA@3!1`hf(9`lQZkP6$[meeY6$l8eNT
+V)r"0aC0"ldl&iPKL88AGF$#cmA9FU9TiZ5[29r0IFICIcT!!ZESZfRif@ZSrpPe
+HeZ5[D2akfE[kfD`0V#fr%jZZSpj`HGXSA'YqKfV,h+q&,d25eF,iFelYFE@ml+L
+DUAfCICP`p6d0,#ZV,S@&(aV,h+U&*f(Za[h4p2rc@V22NLN'pepK5C(B50C$b0[
+IllPElPF'l`iZm!-!m5XRkbIej9a@d8@Dh-A)9mLQepILH4ak6YP[)8+hbD,"MfZ
+9MaUQ2'f2A0GAjBfkl&jc[!mU$kPKJib"EAi1Ec12Cc42$SI$d(cjq4$`HVfZTEI
+eBNh"Ed@&1@eG95jkfc@iNjf#Ep6hCqekphdmcDhXHepUpMFJZpheUH(eAIZE'VZ
+F!DZrH+[$[KIXKIYi-MCpNUZTr-Kkb*brhDD2ZFJp+JAeif1cYiHTeRCfmbYl8c@
+H#Jame(A,DMSYHl9(DH,aYiUMV(YqlKE[38*k@HP$qj5EQ,j-(MffDbXR+3Gr14[
+j6XEreBp,+a[GbdEpQAMF6eZIQ)hUjQ0pb&NZC#bZ"#SErXhdEabr&#XEf&D4qcc
+GV4lhLmhCfZbVITp2r2aZ2if4qRrfr4RXq2"kZ&raKHR+brAKdY[Jj2p[AKF(QI0
+rRjRZF`#HqVX+Hl%1ZXTG&KqA5IDMq*NR1"Rl1CqY#`-*jj*(E)`pXN((mcZ&-(R
+c`,IFQIDjhpFDmp6h0G'[[@k1JMF[f2Fm10lAYp#MlMRdC54P6e%iRbBRb!*&iI9
+KmJ!qI#VZK#e2Z3U8!qM#cA4SmKd[$KGING1SKI$`HRVSAk[[E,#p,kr(eAdP'MR
+G"raRl6Ql2m@JfXIPA[jmTIIhC[2E,Cq9BH9U-M8ap4190l#S+#6USQLRF(ijbAe
+lEbkGjBCZRcZCcllMq9h+DHKcrmFp(qEqlQB2``GhlQUVSeIB90lBf'[eYMXpGXU
+[Cl1`fQcfhRE6BHIY0KmPhq,[Y"Y,,cpTXI+fHfmVCf'cfGMXpPXpPXUbaX+fJX+
+I!eGG@rrCNrdI4jercq2aklZQ0&RrhjlpR1kC&PIrmpVYYTj9KMh9eZGTXpPm1ch
+hTj(CE6(hYaGEhJAHphYh[Gj(Ul'0NE6HFZUXDfQX+r!UDqYhP23HjUIapc,q&VB
+mZ2Er6CZVD$jFrKIMq(HiQ[8Zdp,VB,#l`c'apV&XB,ZakPK"lIAdI9p$0fhYk-X
+SHaBG5aJpDd,&A!ZLc6[19-Lp[-L6Q&%d8Z*SX'*Um(`qcZT@GRF[$bQqe1qNjHH
+bm2)EkZhdM,d2mC(XIRp[mrq8IbI'CZFCrjXl*YUr9bY,U+LSdqQe&A&lIEbG(&R
+H[8b[*Tj1aLd2BSCAPkQ#KSC@Vl8VB-#)*kTNerDNeADN9HSeZ[U+M8D@*1E(#p,
+YZ2R+9*+FchmFlIdHU[YIr9EeG6@dh,aUha+pJ+!Y$kAq-IBD&%d,2I2RC2TIBPD
+1ed(P3[0Kcfq*eU,Eb,#embapZ`jQfN3HYLiq,"GG5,aJ$30%j29!1NjFM-dNhq@
+92dQDi@$PiHUp,dF5fpE%qc(Lk*X$4+rHVC'XfZJfN!$b@m[0lGr*jqbeqcm2FiN
+&aL3A1,%iFclerld6PG@,l-(Vd@UP@F'9SC1`q54C`6hN`kFrB[6l5V0LHVMakfQ
+CHdchcCh&T1%ZB$Hc*Z,A6Z&QSYG35jb,5e*59P+Q63aC[Eb-Y@jIAcpCRJ%c'Zc
+1YK9F2)fGrEb0CN2-P,!$"i1$i8IAdk4qBcrbjhdj1HefZ`IdD#6dC-j"rbcA9q'
+(Hkb6P+I86FrTr$U)8@jkRBLqVAa*lai-P6i&6)ViG0A5V#(3@FM@`YGS0ISi-a,
+p,*al$4Z)l"YYI*Ur$efQU0E8E,6f1[eNAKiX@ia)[U`F#aZp$Ch'DiGT0mQUQlk
+UQlralDGm@#J)AGKZ)#HmH,1l'4V)RElrNh2$-9(qPA)Me1NBQ$p-p6le*l28LF2
+U8Z(18PPUCNp$VUl#bX28pAXXe#rD305FAU!(5Hc%(Ar),AYBRBJrTSF@*pD2Xp+
+j'C+YSdR@9ZQV+268NjZj1NT-jepY+dFAYplIIDi[VErmfajfKPISfNcmHUbmQJr
+qG*rAT[4dqpL6fV`GM%UI%cQ&UIMQD+*X0A,TSQUfdNXZ9FD4,qh(Vp-j$U33keQ
+RefQeqNVDU,NDq66GU9US+$iS*lX6dUZJbY"*h0")fqSQl#SbPMTCcC8p"@@K+'a
+Ti[$hGrDFEHh2!ZH$b[DhNRr65B-Il0!a,q0mY(JpHNrUPp(9jZXTU,28@GbfGcd
+pT-p1k8!k+Qce&j1Lp1`dATlEbDZNb@`PEDNm2"k9*hX2[D1AqM3d@$R,E0e8UKL
+j6Ek[GE[kP$ClZQh@ke2#hHTi@kVZ&YYKkHaYr6eHrXp&aY$3$di[AT2#irhU*8$
+H(4r2S1E&iG,Kdm2Bf@&RBHVYm(Y@q$TBHLYm'VKdeP,l9GK9-2EdZ(USI!Qlf2(
+M3S@4`,@U`04[-#Mh'"#XU#rK@92I3Uk[jF+Zfpl#f&Tb-$2Dq&UlMJhp4VB96Gf
+9rYGC#UVc8hpVNDA!YFP0mcj,f05R*$0RV%b&TaD(KHTYV$EIRlVmqN[I2MkEarT
+IIdm+H,I(mhYEbcifTNDU(1jcSI,q,rT"6bS+E"LP#fVPa0KK8PP-T23c8ciFRkF
+5U`EE+i-'VP4p0p4Tjp%15i+pciQTQ8QjKfFb(CiAaB9*XF'+)5Q2+jrijrbrRd-
+@ES*%lTk,59(pFHHbDUPle8SirUh'0`2[erhkqiLaip$0VGpR+,Yjq9j2rAjjl'N
+aI!Vj1-JAVkc4k1[ePIT+R66fRqa(X*rZHflI`2"A#9kA$f1&9a+EJ5Db,fr+kG"
+HIaeqeepE@4FMFbGE&RGjcUH6kd5[p1AVBY"``LlkJjAZkrbXDYfRD`10ImV9@(+
+TUQrd96Ik[9riDUQr$DFH2BCKZ#db,IjAflffai2*e@rhR&R1([I@j0Kl(*fphIf
+@"IpHC&b-MVAG6eGP&ZVR%mU,[H9-M46Cc2CRQU(!P(T*L692l@K[E$Il$LEhBlr
+BrUjRi)q`c+Nid#h6HE*Tp,6e'QSXpTDM4DE5DLPdp2%lHFj06)YG9&SEqJP,pHk
+#4UBY*[Za"3BAAJRTRDN@fDeGpR*'9U+DMbqPcZJc&2TUH*p+4jdHcK-YTdAcq$e
+U56eSI`3j1$ZiHFX*'Qe&4@9'8cp4Qp*TjbUV*fUU-V69Q9TYGPDR6CE9kh1k[@j
+I9eFrUpCQ0AV*qTUXa8e1CdHLd'Nd@CdY,QDM6kM38NlYT-jk@Kkd16eZceSIrQ2
+rE$lkhk'MTcDY`rh6[[C6lGYHdmU,b+V"LFLUPdR%X*G*`J%i0KK8QqY%#62"`cS
+$QCIbXZFj2%q$Xh(%prXhA#kfBf8AVGEVIlFZlhr[CRD8R)`1&eB@dcm2[iAP6m1
+DN!$!8k!Zb9hql$RTN!#Kd1&4`k'ATiG2JkH*3bYGEGacBhTI*c*VZ)r%m$*kApX
+65H(r$2iIhI!XIJNeR[i(-NrB,ZYC&SF,64DHCRSY9-cTQ9SS+r$SB0[Kd&YYm5G
+JY-5FYM2c13Ef4P["SX1,0HaL!*KaY"EEhMHaKc2@a-,f-6Ae&Y`1@d8NCLfh[,h
+hJffmNCI+@fm155da*hj-+$I@'&&hfiPaGmG21ki'$"YVL9"XEZ4E90jc*2TC(p(
+qe0pE*c2ZcdIMH#bPhaIiq(0F5Di1(q'(AlZbPkM48QFPDQ(R*FA16+d[EiFh@40
+e3F#CR+Z,El(EiH9USYP[+V#bp6&VVQRPjrB3DQlRTHCVS+A!RT82*6dQ(Q*0*NT
+k456dp)Kd-pHi0GYBG63m5AX0T$X+(dm,9l1(B90[-UYC$Y+qZ`k[9`pj`-hKe&,
+5EZm`iREiF61B8606NSp"GpJd0A&V[`iH6RmRQ*'Fc6*`r$qA3F#ipAkqbkreq[X
+qaVZ[TYGf+MXH(f-RY00XpajZddXM1DKT0mm2IhAUELiiH5pHPrASIdk+jpI1H[6
+IISIkD,HrFmhCkhMl61+V@NdIcCrTq(5CcLb1[841r!1SLGm"[aZ#(EmAPqr5I(l
+pqdAB+DL$Vr"%re1HKT%mKKJ984-hlA5Mqc3T1Cla[hdGeeFl3`q(Cfq(9CkNVpK
+aC*FQd'DTp41IPdHSKQ`Y$b1fN3UZ*0FVIb-cTBNebH()c'ZL69caC'AeqSbmA)A
+ZrNq(PiQFi2!`FrPSZ`YpjKd'G2pXQYhGiQYSBHhp1hPkh23kEdq*+dY4$R0rHhq
+r[4%1b"Rp2%QYrb4%4*VHAdM+aHhN6d@F[GYJdFp%eA)VjHQRSYR`DR%cXp%r,UV
+2hYR)c'G8@RFj6j-rSUV4jDLd8hrai&&PHcCEldmPpQ2j'H@5@FLI`Sm+(U6K``D
+6ak63i)"a!$m@*iS#D("q19f)RLD+9fTAqhEbrLPr(,q)YQPXqZ`U6BB@BMkc2T!
+!Fl%lDMiQ($Ym-YhI&-q,#LHC5HB!RPmRjkEXB-5Q`H[%qTR-(ijG*U`$B$DU@Bj
+D69B81Z!2#KkV#MkI3+J$,jMpp()T2[jc%q+qh@lS,1`SDk`Vp66h1DS*(h[-LkZ
+ER*'UbQZeHFX+qJf1XSY9T-lTq[%p2%LF+4ph0q'h#MmZEr(S,lrYM9(kGMrfq(6
+IMe2k1aq&"H08Hc8F[m8M-8EBLrQb6la&b1qm4$RdZiqA*CbRSk(4H&apGiUC$`Y
+4r+MPH,*mH4%lq*hk"!%lH32TmFMid#1"$b#SQ4Id9S%bNU429#6[dcclEDdl@hX
+I'i@MX0YD@02)m$6SBlXiPGh[FHdfAMF65BpMDEcfCrVcrCi2j*qIc(eCb)S,jr[
+rQRY,N!$IDAY[QqlRTcl[K4r8mKQSSFf%clZ6dX6fT0*ZKaX5NcA9K8Plb2Jc'CY
+F[Q+I-jDIdZCRTqSc%pPp42cZALC+Ze1mNkc+CH*1fqDhNQVQm[%S,IVcHmP9IL9
+F@JYj[IbJFLj'hT6P`R-[U,'GRkLEeNlQ-r18q9c&238f@KHEY-RQHc0HeeUb(aT
+&*9B94EIrH$(SYUS!C68I04q[Rq[`j10%m$BX"AQ&5H[%m62rJMd8$5QD46+qT"1
+2`@Ccemrq#4Q2V0MMricpZ4XC(FjAVjAXfmjSmlPDI9q0)R-SSdqkl[imr1EHUX+
+rElEGlVdpp)RCa#hGphrlcqrhPS#fl"EJriiNj1SAlrkAad2KjV5D+RTp6TI2LCI
+RCLH3!,6BJqb5,cF2)C5pTH4UYrXGMr0GrGr9h@93l2C$j-hlmM,jE[2hD2aZll[
+rpd&9A9e,EcHqr,eq$0fqEe9Ij%LEbkp!IIGhr(k0c@4YIf0GUZ,$NGri5EM[Ziq
+E+mRe,'a2HI)brPT'j2ZZeRq$0G[IqeQq&UYYCkVJk(NC56(lhc%@pah'2RXj5DQ
+Ze-L(k5+mS-Vj1XeGKXGC8k5QdP2RU%"++IbXrPT%lr5cI8b@2RDrJk@ccHMcQDp
+'PihN5*hlM)'GafXpR0r3fNp'XCk`d@lm,MfdGC8FpT[Sd[3LA1'UFM#mBC[DkZ6
+r0m5hKlLCmQ&fCkAP,E0dmUGJm'HJQMmcShqqAMI"2aVhf2Fc-EfB@5jm+H20pcI
+Qr&ZB99J3V$!K@Pp#h[,Splbi9aHdGaH`[@j22fPVpVc)mHripYHZ,#C%i'("D6$
+MrLEr%T1&e-RrhG,"m,#hjE&KTISdNL(aF5,ZXhK8&*R,14RiAaFMT8FhhRl+6mN
+6JBN'jY[-Qi0645Xj"QUU6fE#4PB*VHp2Xh(5l0edFaDmLmk(CMaZ$HJ(DrFjr-l
+0r'VM10c)e,cBfEjXE0Fk0P1G'QqIpM8AAVFfdqE[1mmMMqII-@P2p&0lQZKFkcp
+c1@HSj(Sp(-H4MZS3[L%0VIX9ZMqLRjqPe'&DG'`YIEXHMB4ZaZqrmPe"am3FYm"
+L[U2Sdh6JXUkAPSHDhh9Kq"QZ$+bd23kUCj%Pe#0l`MMrfmaeJ)GB#(TJ)irRmeQ
++JlQHGrE#MCfMdQlf0lDj$44lA8cYjcI+MA&ed0E'j@pk@GaqR44[LXIGSB-KV*%
+pEHASm,pYYZ*'9aj'9MGQikHAM5H0dXa'j!rR,M@pr'eA-MC[RqE@rja1kPpV%Ji
+f,f)ZmNISQm(MrBjc2`86AmjhRIrCK@eVh&pp[*FhbBmEIr0NZIiYjd2&[2Fm'mM
+jM`0"'QZKYD1lZHKc1Ic1Kj@SpN$)m+lMjQIaiqCc%DppQ-5Ek#0b2f4[bhR2dmE
+IaieTlGr[IRh((qach&G,GjhH@k9cqeG(p$S-9a1hlq6Rr'bhNCA0q&1d(K6HMT2
+Li2[q($jFM*rZQYC04VE1i%cbF$$mI!a2&[-AaEcUH$HA[%kphHiZeT,UjaF,%`X
+AbSRj!-[F@-,'pj&heFaMp6-`F+lkQCamA`i0rHBHSJX2E`GlqkHqY(q[lM&L69i
+HPLB&TeE#fpLa2iB`Ghfdhq#GqY2Fb9pZ$Er0"ZrQJp2jB1&mX(%q@-S1`lVfXAD
+4Ia`IHJZZ,LirYBS)h[)r*'c1BJj(X`F5maG""a2f3F+ma02"Zm$#fYYT2-QV'2i
+[4bA0KjA,MNP'PTK`Ec%Llr&LF,U8R%qPpc#jQ&m,IjmFr&PVmpM(THNM+I$,&Gh
+lqlmm(F62KJp#`QBc!9!YYhq&pQ2SHQa6$JbiI$`iYRQjG"56PRbq$lA)i8M*rfI
+2'AZGHDQ1@chF,kdHMpeLT)KH,[lZdZV(e,'kX16ZrTqcK5,Ed+TpP&M3EL4mqbM
+q9)lc5rYm5MA5*e[)bH*DqPDB-&K,J1IDRQ381(&m'#iNGL#krABG6EG6!LrLmr(
+kJ"q9"l&he0V"khl),V!a)`43Ef6"D5S,$"JUTF&&,YI5lE*bZYKFImdPR3Fc[d`
+p,CbXjCa-ek1$Q2)QY9rR@j@2IFZ2p[FAmhDlEQC50Emh+(5r14J%YDlQ6dE8mfH
+YDAQj8Y8C@ecA0bdB",@EjNr'QZE2rBK@phb1EQ22K@pja1EQI1K@9lXi9[HrAK@
+r,f3#EL&EheL!PT!!V,!Vi9[JED&EmcBJ*C`VIQl#&EmkZK@A2YIZ3V[QpRh+fck
+1SeR3Sr"[HG#bI(hNTQf08Iad[-GjbE[mH4fr4eqSi(,VDqrVDEQ9Z5jZ[MA2'k'
+cVEcHp(@Br5VmITl'erE3qlk&,Dr0hfSq6+qlX2NkGRDifMk@hMB9KdE50JEhSE1
+0GFERkq0[,f0AheE8i&E3FkXVEcEb2aICiqm`A&[+Gj9rc1PZreEqM,BYp0r(5G*
+lhG[jj'XVErNmkYS-#YUEkYfmH0[,cRePEGm$h0P'[pc'`[*MBfMkGR'q6XCAhBr
+BpfbYFIaEApY%-G-UZPB4ZCBG(C4VZijrP9YcHFfYRX#YTVqYVqA@m$MHjBaHkjX
+Hh`Q,V4raTX2A3re@I8*8q*k29*8qf9Gf[L1eGf&@PGf*@4EVJG6C3FVF`B(N`B@
+MkeR"qhXCAhqR%rDqDiEKYF-&5l9`eN@lfjA$(YjM&TT2idq%pHmahrm2JeNAPFR
+$LcXZ,65SYIJ60I"`10Ll1,GlhUkc(pk[aqYXEDC3qrk&,EIkpMhl+fa[&YTP%#I
+-U[H-h9KeGP"GA"abm#mQ4FP,Ld'$&UC-AHFEU@-Aq%b2aX4ePUGCDRlbeFHaa92
+&RkMpqP[iR'a),V&EQBT1Alf6[X$p'QjHij[RaZ((l%EL4mC!MX%!KHir2K821Sk
+ER3URQ`Y[J8Hh[k2JFZMih*k1bLGjhZNpcMf28F6-L*FiN!"[F1,`$0ELdRjHVNq
+Brp-q9e@*R6I[dR3KmR&LqRQjP"5D+cNjq(N14dk1ElllIPB2iU+eqeGmr8Gp6p#
+&heJJ4f#!3m&AMr6[UhIApEEmbYf(-VG9cUh0p$AkM!hFL2JrEimH[pjLGdRlkH9
+TBQ&DHpB@hYf**Cf0hff8lfXQXr*h%cci0rdkI&KBd("kGJd(Tm8qmqqN`EU9&Ym
+',CB8A9B8A3iFA+BZ[LAQlq#2P25rairRpC*I`p0r$5bBR+kM(QEmZqYNj'"bj&p
+(fI1mqeiYl'r+GPYqcXUjPVX1EDkPRC9Q[FYFKdBded[2KBr"NIAT*khP@N24kR#
+Xk5ac@(A3r8kN('kR`S%!5fmI!jXI9Hq[q@cLZ*4BX(X6AI98ehX%AdU(f*1eYZr
+MIBJR[ee8RFh8Rci*kmNIBM@ZeYGVEC,f*1(+Pi@20GpB6AFG6ji[eBrrIi*[Qq&
+U[)m2jmr+rQKeHqNAP*iH`j@ld8LVd94Tme%lIfMLAM4-P`j@[L8(!`DL,S[Z4GA
+Fbp*%XZ,-bhALf9c-bd&GGB@@JaqYEIY!2h[arq1Td[lTQ$,`F%"*FV#PB8QC*a2
+p2qR9p,$4&ei-IbmeL9F2J9f*TBHrmbNhQk`kU*YYr-dF5[hq&V)Y0Fi0A"R,Z9T
+0$4eQKSpESU[Dk+VfP$)N8-MNIi5TrlhEFIcrm'2"Sri8prTBQ5Y2GX,ApYMlYK"
+1'ccmdDNlc8C,qle2Bk'SRZK4dA2K9A1K@2-KEM!SrYAm,e,k&GmXrmQM`)m+Ca2
+GfN2Z0e*f81LVX(E`l(0i9R$hXhL@ehe)[kDT!R8LqaJr0'qc(VIr,2QDGSh*kX@
+k(rkXANqp%jClD1jjf$SiXebH9FhGcFFDjih%[qTei[Kmb[Zq"GA2!j@pj9TbV(V
+hpMH@2%RG63lkJe02X+[dGjj%HYrp1)rU410LXeqHScAjpl*qVpl4EH4QG2VUcDD
+hbYG@9N+,qQJPIjfPCXpGY0EVk[DkcDeAS8G9pL`mqEUFTXmT8cPK3HMk06(mRVZ
+eGHH`SGpe)[#cH(38QVXj@IKj6N'hPa(K*9IBBNU,jk'4VXckQJcPR8CEqM-H4qY
+i4@Yq&L+c[cdA*hq"DAPMl&MH@%M5H0rSm)[kZ-a&q(mqJP3EkZQCD(UGpeSIe-e
+`6bBl$9BRNIQH%RBIYGI#"rR`JU2raI[$PcNArm50,RpIPUM@DH[V+qYeF%eAc-H
+C&p#d`qdD1jVGh[$iR*fdRl-2YBF&cLGL,YqK)KrGMq2rqSpbfJqE2lr$Lf%`rVD
+,Zm5*kH,5F(kAU5DR6kA2kE59&9U+DYd8E9,qhZpNrYJh*FNNjA8CI6D$4dQ@r"(
+mIrr1),$LEI#0b#,Ac)QfQ8Qka-Rr4E6ZVj2Tm2Kl[ME'qUEkR[k#4j-p)khJ@Nc
+Y5Tf*0lDphr#iYR*rRMkRrqBJXrmfHP3pr-Ll$0i0"5G[Cqe`IbmMdca$[fK02rr
+f)61r04ErIh&T[E(F@1pX1(ZrTj9rd"*'EreCaS(8RYZ9GAI'jA*[ZA+Nj+Gh2pQ
+2kpIkpIkpIG4SH6Mq(rXL@HA9a%UF'#K@d+CiU6B6-RZB[IrHmH$kPIJid8"Bh1N
+IGMdIrY&dlRrjCk4$-jQEcFLJd'McfIbhKce*0I5UIGqpiX(L9mV'LJ,YHE)qc(S
+[pf*h1rbSYY[l5dX,(@@0KBE[Gpe1b2hi11e,Bd@Rk2hZjMl2pc0(2Kr0S*N1GXj
+(TkL4)bRijVdH4kh"i8l`I6TX'QLdYIe)[&kRDkRamfTiHaS0hrIY[Ef2-eFME4C
+liSY$fB+'GP9hBJSI"JRU'68pU4V04VDLXdX6Ykr"qh(dIClRXIJcAJ8AmU("ed2
+,fFJ[pcASbFaj%UUrRiG$TH&Pp2A6pCjpCMmVp00Iq[AJ(Ih9j"fr[dQ6Me2a-lH
+b82LiXAHiN!"`-@,`qT%r,eD6NGcRF'Re'QdfRdQSdF6)e-RbD#9j-p+e-A3GL9l
+-QZJRI(Lj(Bhqlih$hppAb[k)p9mEL(III$Z25d@a[Z(`q6ZllE5+Q,1r&&S$291
+b[da0"mmp25GAfT&9U+ZSefPe&2&c[(MeIDBL#`K,HY2[KjLNQZkf6q-PUXGMfdA
+c80r`Ic@I#dHFi2Sm6MGhr9,2V[`q,bGrIEZ4943cS$ZSS(jGIb2NBajCEHR"Mr`
+rM%@IlhAAFqZZl5I`8RqBd(bjrLp5,FBX&b@"qV%pVhU5plQJ[r"r[ZXHmmZ[[`$
+mZJ[pcVl'XQk[66HcdHEpEHIJMk6q,KeLZqiCF9ZTrKr2jQeX-DYUJ$kpEV1eHEI
+L6Zli-p[l22rAedHSq9KeRrP)khYYfqe)bIV2dHb0&mc$h1r+1cH@PhBqYBhGKIE
+[[-Lr6@mIcIRlQhk(KC[4pYRrGL8%Q$*5)Xl+LCb95D'ANq*HrcaZjr$'RBmE+Ah
+D[B96(K@()jPC#hR#jZZKA&[d+Z&l1XKAQTk@VSjG,dp9#ajZ4MbBZFPdRN`r*+d
+)A&hh2XB9hX1KV)A+VZP28H2lXHaqK0$QY)B'B[l2ar4Ar"M4He0C'a`YA3a+E+F
+16Y5jCU)-MbT2Pe%@Jl&c+fN@JidRD4D'jP9N@Gj8R8(aifX6)jVKbGAPBP09iAA
+LL#Jr653rV4l$q6VY$I2D(arVrUC%jSZfSVl5kMHfR-X,@aXHCB4YrZqppl,A8Iq
+bk[Dh*AY(ipE0hpE0B'eKEILFhA8Hmi21f8,M@r3l9PlPI#Pk(TDZ&m1DpfZ2&N1
+YUTICPpNrbRSD@&G@A3X+2M@AZ98+6X2GMIZNCr$AjBGrQIhjQDQT-VPRd9[Z6bH
+6aZ0Ihh`4)P*%m,*q&NmQJ5ERBrLIm)VQmar(-9dZ'Xq$)lmi!dQ,1hprI5$k4J(
+5C55!G*0i-I9phh9KXmjS#*l$p5ffqkcPGJklEaCcf+U48@NDXh'[VGE$lqYLrIV
+lr%VB[Nc86a+#ra-CSJ!paH5lq6rTNC2(Mk6[&(kRN`r5i&R,V)HFj-M6eYCYGIY
+Dh84IIVqY&r*lh+[2f9YCM!'`'fYMIQJL4NiqMle(AK)kp1NUGj+eX%jG5DL$)hI
+6S,rpGIImUrqjlc3S!`$[,cdQ0pi8LZljIDraJjQ[0r[QYlCe0R08h)RH*06YjbC
+IXFUrpZlj@"HFUAIAmZDkGI,QJ(pA)Hj&eqel8Zrr6AS%D%AH"H@d@*NmRibF#4r
+blp*5P58mlq[0c92Ee1mQThmXlF6@4pLk!5lPqhGhq"Iql&VGIM!*&VD[pe(dk#@
+-`J4S4HB&jk88M654m+4RmfV4NlP2iCr4F1UhZMh'@f9&Z0&0lZEric2J8@Cb[Cj
+&Pb,*!J#ICr0h9*NV#aRHrlIjqqP5-r'DFI(RlGj%@jc19kk0,HF1VEFChCCAF8q
+peI$mEpAGId)XKcAcj16rKhAfmRfhEkM6S-rGhrREHdp$HHGZ21Y0ei9I&f0EqkH
+ffjfrRHKpIGlEcE5fY2#Vl6Cq&[,6qEHIZlcFERd0jZ,,E@PRr2[,6YGYrrGYff2
+mJ!!!!)#BQCLDUUUDUCKhH)LCQBLTL(CQGiH)GjQ)ChD)L)KfUCKhChGhGh@TPhG
+hL)L)CUQSKhLCUCU(QDPhGkZVZULCQAGhQl[,UDUkL(LFZmZUZEU)L*[!c,QTLjK
+iRVc,ZkPiGhH*QCLBL@GRGSL(LCLCcALlcVc-c,ZUL(LDUUQBZL!!!54'ChQ*Q(Q
+AN!!+U!!!!*Q+N!!!S*!!!*!!!+UJ!!#U#JC!)cC@CQD(GhD(L)ChLCHB#CQSJ)F
+*UBLCQ+QTUD#*UBHB!*F!#(U3!*!!#*U!UD#3!)!!H!UCL+L)P`L(LCKiN!!*QQI
+p@heYC9hRNq&BDD,hXA6H6HhRfVfmdhLAANh1QJUVACeIJr9YA)VV0KX)[HkZPlh
+9aYM&eP,5pKr9f(BIck[lXjf'IrE)3*LE(GI0T20lcZHkrCh2&QddlUYES+lAIBf
+&EA9QGa0jKH4%iReSh%Z1*jF2LE6#Xi@$C`[1RE+TXi94Ce&4&[Eh`-52ZrQ5D$Z
+jh8rVSVceIbD(*kF(dkB"CkQ`*bSm5dYVL0Idh!TX+(Jp1HrRcH$2BAIE#cf&6eF
+#T[0hGhGT[kLABBQVYdJ*iA[VieRJA9[IfYj)[DE"TZ"'Q3Gp+qR'QCX&0Nk#$XB
+@,8m+d[lkdrrhQiPEF*iGeUIf8@Ci1Aq6"kI3Jr"6G$T`CqQaYR$iqkRZ(p[JB@&
+KIKVkcEeQEZ+[TlLXVkh0VkV6ee9#epY#eqJMD'02de"$K`Y4YEE%eQmBrN[Z28A
+peEheT[j'rTZ&%3*IaVAFqA9C1G-Jd%l,dpK#f-68Dk*XIhX54iRCrkGe1GhVFp4
+G##qfI1TBp66CF@964-UTMb-cr+$qQ(PpH2p4J8`&NCQE"`jX+#4$bV1296mfSMl
+Z,d)20a*(LTGpa3I,h-Z98aCrMl6JH*Ii'"JHCA9GG9jZhUZRYk[TeeC@eYCYpGZ
++$3@%,6`Cq(cmlRCX&h`-$"Zq$Em5hip[Nll6BPKpK30l[8r*4F5Eqc-PIddfCdi
+!&N5TkIUFI3AI)[r6`1$KHPAe[68"UkZVUqZVkUIVUX!jaJ61emD&Add+aK4+5Hq
+[,Lq-SR1fe(b82(pMF@'VrPVjrA3k$U52"L5)FL*B9qGqD(kYK)KjeR)U*&RD9&[
+Xll@F6kq*p6adDk+Ql'KjdHekp90eIX`4BZ6$MjkepDerYZ29S+kJJqY$bqR"p@Q
+B#jHE"DF1ei06aDA$U-DSQ5Y0L@Af@3,83NcpR1PH46FlT`!,@eYA#SDUHedLHYU
+UGfNLHfP6SYG8D@QdqAXk5Ujec)d168`GR)alALA(jSGaCpp@4S9C'RUbQK9d+*U
+UZAU0lfHLa1fqMUIfd@&RIcI@epEdkhTS%B$9fE8`T%+TLG@,Zjr!q[,q[Fr4d2r
+,@8RGI*h0Vjr"j-@dUE1Tr&8aE[@AGe)R,r6hpe9qMJ@GYaF,`b!+J,BjYKAf!#@
+0KA@+"UqUL@&G9S%d,J-d9KAaU#`VkDJX,'&U+66G[9iPEj(cIpqM2r65M`H6&5J
+5Hd!R"0LD%b*J5pIBeeMAf)Ka*#4B%k)4`M8M#52AH5TFHi-l2PCkHUFDl`Z"HF1
+i`kV$NC%6)KcIdb[c8PP+U),1#TXE5aUYP9eq[f'ae&26DZFhZ*!!ID4ep1JrGh1
+&Hbjf*#f-p&S0I$mAA`pY9a+r@p5ei04DmA0`q,Qm6LiI%pL[h+CHhXGY"Rlr*m5
+226p,P9-V`i1E6I"Q`C'Cc)2SP(IP+6I3d"Rm@9r&LhGR1frL@Q"Di(Jee6A91EY
+kMTlHTkGG)VDUXfQZfY"S+f&TkqcJm'$kP0PCX%Ef-R`-69hADHa#lR4U#[LEU,8
+9'cUG2EcpADcp9E6PV[*beZjmR!+f2eUDEdd#`A@A,eGhfRr$QGa1KRkI(XeC`hG
+reYG9DqJm$3A2r,rTrdp6kqJcURJGrYSZfTYK%SSe&3aY9idZL[-riA+RZhLIYKm
+,iV$Tf(6UZalkir26IRT[cdf(leC#Ui3#40ESSe$$lVDbkQpqEk0*TY)*qiaIa8Z
+&j9RKEUe`,1e[0eFAPQ!GVJ9&aHCGjleEBePMQeYK@J,9GpDhPRGhPPIlUGU1"&L
+aFLfm$%TrYU$#LBZ1"ZUAHE1chQXYEDIYEM6h&a1A&h1@Z$FAf&IIKVY4@kM0VU(
+1hq"q,dUfLV09VY*VG,1l2,fq*CI[I2r,k'SKXBYrZUA#%$K##`0j2fYjJDHi[-#
+FZ,cJ6PVJF'i[1&KAR#r$@eqSV+r8CYEAd)#DM1`0rKAYpalhcTFDIeY*1aDQSb[
+&fq*8rFqC[G$T1klVjHj`GjI&[VGlZIUDLpN4F'0&`+UI`V5,KF,#0#JT)Jp+ZK8
+&E#NEDIYDf&DDIA6dM6kh43i81LV0VL@Alrc-I+d[Fd#E3f4X$A'YV,LmR`$Y8fZ
+*HHNDIGGQeUX8CejalcMlc'eXbbJr$"HIfi@&Im@ii0haEI&ZjG"(RkR,PD[%ehm
+#P5d3fZ(GHIZrZ9(m%@lfPe`VlImlUFkNhB"Y"ZGUU#ML8F5MMAY95m@JmqKm5Le
+mZMlG@YrT+ErI`Yh8H($UHTDaC%@eiRT9fEACh%U1V9&%Y9$TSP0SiAFe@*'d#Q)
+d0"f2Fj-%r&Pk(C42"hpaqZKV+'$kX2+kDcPf!ZE"8hpaHfQ$8i9R`kQAFpKa[,l
+P6+3LjIbr[CGTlQ[Tlr#j9I6fq(mXM$apPBJ,RFI)VkHeiq4B8Ga`XAqHRlUrpUY
+Sm"![T9P2KARXeYMjPE*Z1$N9fpqT)j',Bjr&ND1aTU@faULUXC%+hakQJTl@SUH
+99bF$+Mpr"5mf(6jF2hE1RQcr0U+624CN(EiQflVk&erje82Z[fpcd)NVL3UMRr`
+dP,SVl*Lq04dfie09B8@Z*J0a3eYGVUkVVDrr[Yi+VLCGK"'`mVF5SR)QEQ9RY$k
+H,2H[LchpIV8hmA#Y,UHR,ZlXSF@TpHSfRQiPPhD6F)Y'FMNBe,Ge&rEe*B8TEkd
+i%l[j(Sm+Qi[V8h&i8ELm+Q`q"'`lLfr[mZ0Kc-lN6+qjcdm*ArML`Z"1qY5hmAK
+@P[ChGh5he6b2Amh%h@NCfdD$j1mkAHI"TH6m(kF[Gk@PUCQZT*fra[1RH(jd,#m
+k&`21TVcbT&hjdLimUeZ0eF@V!DiXVbiXVZmfGjGl1r[pCJAqX[q"Tlr$hq2IC1Z
+T)G6P6PcXrJd[[#4dX[MIm2SI1PdX6[546h2ij2$hGe&pQXM3kHh[+QQb0GD9%Q4
+HdXE(VD@46fQ0BqaBdh,cX@ar2$aV($aC-Vl[1b-d%V'(bqQlM2X!HKCf+''eM5q
+lB`rGTkEP3UV88pa#YEM)XkED8qmRlDdpQSM992[iYeDFZ`h['a2VpUVMN!$'EdI
+8iPrcpP(Y-2,Vj90b-UaMb-phY-!I5kr-lqaJqT!!m2+!DQ`mVTf%%MLCHEB9AIF
+6L@I%aV,$aUM$P`U1$3mfQce,m-+$,KG+cMcCriDL2e)ZHRXpfq*Hr4qGi[R`U!8
+HCJ3AGe$QeZXJNB%pPkrmNMq2,f1X0D)6dYJ265l$Vp,`B1cbl%V-5i2"X5R2Xm[
+Tf-%M(QjYM9DRFe@UXDV93GPCBmZQSi*b,Mj8Vk822H$i(E`S-k&m9R(kdrRZcRm
+p2kc25-pUq0rEp,kAGemEA+1Mq6r$LA9jIqcX)fbTl6#UF2(VE6C5C'$$j'0AdYM
+f@13qbV'4P%DJ$mhp(EiqGM@2CibV[!eL@-M'X,'4Mf&Mi+$3&+qS()@m-$E2#al
+#USV'3S'@&9U3!*)hGJ,6DQaNFQ&UV'QaT2E06pM8jGM6Hp#M892R3T&rcE1(YDI
+V6Y9EbkL*9ajqIZl1EAh2KBRXGYp,`IkSf[@ZrpqmJYphJEZ(0efYeqXJUEbd`*l
++eeV@INTVfTrMbUfQVL(-b$XjN!"6Bj4ZS`*PM!+Q$[`0VrdDE+3bKMkN0`-ddcF
+ND`'pr"6BHAR!6)Q@"(#4#F5B4Zjd`L!JTL9,+XDE933mNP9Kc*-U(RUE+eFpR62
+!RSp,RZaKfI!q,Cb+b12blq+bTYTUqh)JGA16Y$6D[3erep$aYVXrSIjHT4a06mY
+&lh9QjfA+lqjllIGjTjABa2HLbHT'j[8UZC%Nc0TbqTHqjU*2!`IEST2iG6*mc95
+I*pR)Sp$MdqKak1*MG6'Ncq2[Cc)NpMbYceH9Ypl9bIR5rakc%Ne(d+R5kQKS[Pe
+(UHT(k@dp2,Nh-DA+lq9fR6bC@LPbSJ$C-V3c*ADC-VY*NV2j@jZDVLcHGcpc+YT
+FU-`DqR%QEhTbYEl%V@qp+S-LCFjr*ZG$,ZG&krq2rci-RM5UP@Mk(9IUS[ErMdQ
+pd9(9hG6LrCRl(3iZpRXIl-RHFAfG[*`25Nm2"jHZkhZd-QCiR-S,RkY"Pp1jYTZ
+EFl6hG4eJ$jG&*iA)p[95ElNbGhM@0RMbB[Xf2CHhiPMlZPlMfX59)l@Hqh5DPMr
+ZHPjrTmq9RqG+d-f9%bj4EjP98b9Dj1E+hNZ9Y1RNFll-UpjX4!f4cYleZG*kh1P
+GXSKlE*44)bJbP8f@Ml2cI(ZD6Q4r8q[a['U[Rp(l9&4#JpA+aYlSmD69I,'b+HU
+j9(hmQkaT0[M$6!RVF+kaYa4qaZ+2)i(ZlDapM)!A)i(,kh#phFDLMLF+ka8$qe4
+pp*ZX@6GiVZFJ0DidQ-*Me0KPIeFD#VqIj@03kK+bCMEh4BdQ4mXE(TkV)&B&YTM
+5E0'h@hpeMEHMpMEdH4IqlYE(f-F"FLrjI6fp(b0rlZE+mL0cXf9iQ6NHjb[FihK
+eRDrApE[Aq4qI(MBp"lILEhJrJLHhYZYl@ikhXlQ6EFQaUq6*SFEFaDHVZkMPBZk
+p[lrQiRIeUcPqp6bbk5#JPh2i#C0!MN)r$lqCeRb%[`%kARblQ25jAU9'Ar9L80G
+fQUf1MlZLkiJTJIp$TK-`&GJU*d,R[JUepImha,I[2TkRpZSbH[(qhlr6PIRM-"A
+)9f@$,fXRaC2L5XrHbkf#F`TQSJfGjcSF(Rp$MAGKfX'ilh9MRrXfh*rXff*MlfX
+pQ6Dqj*Y1A*U1C*LJ(cC-rldRXTHjMjreTQiT)frbpY599h0fNIH@dfeZDUXbl5I
+P4Tf0PB%V8Ec*qa+d2"bGa*rGZC2lT1IjNR3mb6S[Gkf,*j'0[I9NeAYlhABf2pl
+8j'pf1*6f2crRD+*Te"fEclRr@0m26P-"3&kha5YCb-V[D+9&iXc8S&f-UIj'6XC
+8paCGK*h(MB2`bZYLId3I5fhrI@km2rq[4pcr(mRdD$-hhiG2"qpQDH$Gk%"E1*d
+*q#cd1Ce)HA2bYr$bS8UqTXS#UDC#PHP#JR+VS3i1aUXb*B`jAT4,#*+[VMK@fCe
+,MIlc-S+fKPAejIEc-0@Q9k9$9kL9IB&RJjP&)e%VdU+TST9pa*rJjR8iNjaFc8r
+CPAhVmA-e@jPAr)j(2h&KFaqdef9kQLeT)GEr9GTH[lmR+ZG&cYp#k'qRmcUD(*T
+,k*,T2kCq0Lp#(Z3)YZ&d-fKfe*[m'kk'E4E5Nhr&XqKe148CR8b)[3T-r2jQE5D
+'Fk&*3J4VHKe*X&r0J[CXH2p'FbXR*T0ALH0i2Db2!lfJ+`A3hh9Z1MXBph,Mb*N
+H(P3GR0X),MLmlE5Vfpk'ePF'fk0VFm@Uk2NkhSq42h2Vp24HrZjAVd([lZjj'Yk
+0[Fm@Vc,Lji1mk(L5X'pjqfPEcLcE#9)9aZ#Hbl'2HBA4eX(qR2ieAi5SU9Mlqcr
+#6rpqhkI+Nk()*9kV&mLRLBhN8HKaYl%aGl%,0i+FQ6EBNQfj(XqclI@jh69M3"B
+R1ZG*Bri5H0a[[f6(VV5a[[ZbZ1AXDI!a+HeaE'Qal'Hb0c*Z1,l1fNi0llHeNqM
+EHjFEhdkVPq6VHAj%r[H9dp&lZlNmUJphGlh)e[,Yplb+X(Z,[2Em56`Eh!`F(bY
+RHF6GEUej&Pj90bC(F6PM6DccTl)U1iXF$3AR,UY[T+fGr&c0I4jARFhA8HAEmbU
+Trr[Drr2Hp6ZFRd)h*a0YCr3rkqj4d1T0+,d*Aq2fr4QP`,)bqY,PGl'bI*PZpai
+"XrP5C99KcG[+hdILhr4fm(QEQ$bGc+qV'b-VTbER[BN[a+#jl5cT0KE6QAa0RRY
+Ei'*Z,4DXqQeAb88haG,UUM*UiXIX[q10b-DAB4jlLC0I(KIQKc0KeLY&rjq'jk(
+[mcd0,Fk@jd[hqMq6Rr$QbXlm%r0V1VPeXHTi'9@`8["+hhCFHGiI(TVM&Nbqihf
+VPe&UY2U*4GE8H$f0,iffYkrFe1bN`ZVNB[IdFUIT!$N`J*kNfCRShBr6!0S-d'L
+GMSXpk@Hqe1BP6E0lR(9e(HCFV4A0"aFZRcC94cBfA4p0`$Y"`9PpE+T1mJLc*8j
+PjdZNYq2ckk2K@r5rUlHjihpfifL3!03#'qACBPCbY[*[1,l1bNh@*eZ94pj*Xm@
+68BdQPaT-A(Ncq4[CcPGE%Slhe[Dkh#p[VErh0Y4mLljHeSmMGmcH8IqeV4pD,,k
+drNpDFQIUbVR`C9Vcipe,pVeYVfhbA02V41c,R4p+jSFHjdH6iXU0PE$VC5cfVQI
+j%bjRH4NlkFb-RIGM,PGMSCG*RjHRNdQKaBQ,NbCrFdP"`ShVC@iKELNUYr9F,,f
+m2EdPYI@frQlD*YU6HA@mZqGY0EYD5phGlZqKEDMD8Q$Ci0RQ@Y&E8R"U1$8G'de
+0V5F@,kFrlpR4fG*b*r)R2JXU62S&qCdYpSqP[Y&m0c3I$+MI&+TXpfHAi(E`91H
+RCZVd%HckA'ZGXfMrVkMr$@i[q'Yj14phlhSmQab166cF5RrmqYlhMdQKhmcaD6@
+fqAE4pT8FkhT-'Ic23rVq$0ZC[`ElrRQDb9Id(2KA1lYTY"FaIYc0I+RI4PkRHp6
+%Nj[*hZ,LlhMidRKiqp`-IHq*MIHSqja[[d@0j['ffh5`e&&RDM58rdISBRLmVaj
+0jLEhGiZpAF@aj04NEfIpQ61qc*l,f[XdISm,PlHMj9hl[LdIqHlpkfT1dTFQdT)
+NrPIVQh2NbVcRjU"'"(LC12bmMfq0iqiANjL8AbDM%qAhr[jr%hZKj0M%!2&Tif,
+4aXBeZU1*MdHKb+2Y'!fIbL4`NEM))Z8$BP(EFQMUZ64eB$"Ni0DI4-"Y$M@1I!2
+'h-RZ29j['ifbl"DDP!Y,HAMIChXE&XBf,6q$*Lih@a`hT`kqS+f0Pp-XE-"8#a-
+[Hr,*qr[I0ihf-mX+fS2BVNdR!k%VbERDjIS9'LQ6pc198ZQPGMEHp3Eh+m6QDL6
+Lm(PkQ6khTqhUYkDfPhb6[llfcaYl8ifpU-L6&j8R[U2lH*4qIkhZELRi[#jIf+2
+PAA-GS9blI-T2bqrTF6%ZZaHY29jMCF%mE$%Z#Uj%f[PEc"jqe+6qK[*ASP,dVdq
+VFqRe,LMKlZibU[Tk+#QhGU"QmdZHUk$hl5jp2@PYi*pT+mrH&Zfp`HIA`A()bi1
+c0NV*JNBh2VS1(FI$k(fX5fl,k%lD88qH'ETDDFkZHlc`1hPIZZIpYpm@RPBX6i*
+qjp@&FqP$ZElDG#JPA9lcYG+hH$0kR"bqTaFVUFLCe-M*kKAGbC-I3iXcFaiKA5M
+a[2bEcfHPk'JifXl0H[pAKIcdQTQIRRqEUHTcG0rkdPPlI8ak2mIhr`8IhprMdIi
+D1SqPjF@AU1T,SZ[@pHZifbclYGKk"Flp[Tb8#13Ki%)RYjS#Eh4Bq26eq44lMME
+VY&SHkNR9pA,p2PIb5H$mQpi(*Nm$NlfraC0rLlflaGlGBmQkarMj9(iGc`Fcimb
+9k23PF2Sa`$iI+SlF!rCSl6fU1T!!$pZMTIETiAZ8F,h+HGpbal(h*2Bqer*PHTX
+F[qVM9Ac&*'D,P&p['qarep(%rSXG(bDI@mQP[E@mRF+4`*cMdh&a+MCDHMl1HpE
+'fFIkG$-cERkN6+kFVkNCJ+E$fYphjI[H&LEIjUGQRS[Me([FjRj85XcRf9P"$UU
+EN99VKEbi[,hH@elHaVh"LB1$qRl'fr2U0Yl@fX[&ffkfffXpYYEADl@efQefPAY
++kUYV#4D3!%23k(RrNq+9rV%q'jmcRBR'fhcNj)G&eG4l(XmZjlf0-NkhLqM%i1$
+EB0l[,fpmZ*Hlcbiel[-#phJ)B0lFF'pYZ$[,M$hPYKlbea+ZeXG$99@,)YE'TUU
+AfD@bXIak6r6*kdc0P8(,qAlhJBPlmpQddHml-p$r1ic,#2[&h8j8pP`Cr,2dHi[
+1qaFNpALh2flhSH43A2RpDjmra1KYERlH$cp[eZGZ*9YMc6q")*l+JT6cUC-&TNa
+lHA(ZmE&[X@kU,leVi",Uc[Z&I@Gpq@qhIiYrIEhmHprSqlq2l[p(QbrUkYR&A4I
+XSFpSXp8e1Hl+laZ"`q*JFHraVc'q1aUT09"i09Pb*ZE'Qp1*0lf*0M!E'!E`C0V
+"9Cf2Gieraq"a1(JFHlchCe1HeTI+ll@*)k(8IXSHITGh0T,6,JMC0cmhL`q&D[K
+K%FB5BhU9-h9iNQ+c!K4IYSCPcZl6+lL2f2$pE$r,MlqAi0eXm,iiRFI@L8(FH(8
+EV"Xl,"hHci2PDcJm$LCN'&Q4`$!2J+HLNRlZC3dNAGj9"58ZmPd%Aa+Z*,hIr#k
+rQ[Z4r,L@Y+NrT"2j9cGE[+SU5FpENbpM5GP[mRkT`*q$Zl,#mkb`VkI`Z(arIJi
+R4J`C[j2&q'2P(q#rRLA%[D@1dkf4EbpV56ep,Vp,fI#imZLMcp[cYpUm5dTQ3jT
+Z[3p'NiLiiSI3cXb2k8(!c!$D$!(eFb2`V5C636YV,eX(Bh%ZKXG4BDq[epIX+l"
+V*F1hrLfHXjH9k&UFMLpc2#if*B4Q`-rC3m+AUDf`QFc55mRQ6qLQdRji[[jY*Lk
+fC2RqMAd[8drG`IQKp(VCN!"`E[)mRFfhMl6Fl5NR[-T1c[m2KF6Mi%Z0"XHG+m$
+%Y0Dj4dfjmE+Uc$$Kh[%`F,"`Z*`1M"k4'*eXb4[E63l'bSGIeY"`rYiHmapTMq(
++cp9,UXkADpB!b,ZXTpV6eYIAl#`em(Ce8ce2%QBN'ZE'MmG$ZkEeYhSprZqjZ[[
+AAL91l[,UdZ2a8ehkpfH`Z,GC@ZT)6!Ai)j'carIcZMRG(1k-VL$ecCAT5[4!EdF
+cVHr(m,%fQ[Fc!C9ciq9VBmj`-AKqYMF$'cEqAhpjMB2$i2#rVZ[CXjGp(e-hd2Z
+6G2k%j@i[Lm2q'rp1lj9TNfdH(i-HQqT#bkD25fQ93ajbrPkRBdpA"hFhIG[L@Z`
+FeR*PcZ-QUXDhBl(B9pCBH$FBpYMfX[`DUA)Nr@K5Xr'j8E)m1`hPIS0TX0"YY41
+EH*!!YcE3B23!21k%(!`1'3a`-,!iA!Pd%(G6ER`10D`qeqV'lf%@DqE+l+SphA8
+I$r&lHaSlcKHcXU1ipEPE(`FLZNfZ%F&[N3jR6XIpXAQCdcT`GkH*qQaU(G8p4*l
+@,D@f0$e[hZaXlU(`0hZkZ4G92m(Tq[aX6m&!V6ZSSrekQCi8p68Nl,SG,Rr@[XM
+KrLb1"`XE#i%ZLemQLVC+"Uk`e0ITHaiR4e-(!`qK6e-(C5pR$lV@8Hme&,4eG$%
+SpG381TV0&U+,H8'Se&r38@SUDfLSC8r1fGjPAP"+ee4[-ZfS*9TZrV42KS1YdU'
+9LiA`88(VFISdF&pNalV+MfI1McQCA4rrI2a2#lpP"@UcY6kmZ*UZjlM8d&(SY,R
+V1A#T*c@6*pJ,56X+A2lQ,Z+AE9@[0i#!mTB$8T4[CqYZr@h@,CbjkNKr0RFZ9he
+c%biqQa)2U**cfUrETFU2'kjiVDAjR!Q3!+MLGh3Gee0hPRT'@S($Q!0A8YG89eR
+XE+RfG*16Z6Tk5IR-QIT0"&0m@(UU$ZMGAL8QIif*rad[dZmjdD-A9mcp%jdTrl0
+c-LC-','bBq0'Q8Q,96+6f)FU,dBNU%!Nq!NA-M!*3EH*5Ael[rLS0[5IZSG[5CZ
+$Ip,AED2rqkA5rr61$HI"e1$[rJe1hS+5,b0rCjEJ*hH9UT8A+S`%e8UPQ!4-T-r
+-McmZ92Z3!*RXQ2RjF(DH[rAq19rkb1Pr9LHRp2YXArKXSfUq1LjrQk@Vk8bZq$*
+X*ADBjF9`mQ#Pj!#FA*P9("Q3!&RJj8&Rp[+JUEh,JU!%Xr%bl'(35VA&U0T0XG9
+Fb-Aed$f[(pHEAEMijXhejYIB)1bd+SFL3`)U0TPf-5*Fb1F!NfKP)%TTZZ!68A-
+2,f%V3jHT1d9XTACj9MBbSH6B5Gp$r*c+DjkAh-ppIMF,[&2[4Gpq[9I"TIlHAqr
+T1"F@AYE'PdPhbGCT,M'TlIP8p6l0M$j@JTjlP6PKBlUQiR+RUqaXVE!b0&YC0P[
+,c)dHdNl2"hQ0h0Y*eR&YXAZlD6S-5ekh*dQIYX65D'frYaED`dN5fr,M@fhdNMH
+HGMl6ED54Hq9MlADD5e`V,)fmM5A(%eR+X+KLY0iUhaf,!9Xll-lXUIbVHipVZI[
+rfPi#A3DGQAE9IXe2(j'Ek2"p,aXhEjZicDr0X-hCCY2e-EhY0iZbfram(MmDA38
+k+HheAAdZ0NIYmH6UlR0T1V-q'&leMeHE$j(X@!DlM0mEl1jX10ZB5m(ZTe[l+,h
+Y64rZf&2rX!H`TrpBA!j[9!0S-JENp'2Kp(jDAJFh0FNN($pq$qcYRlQ@`MpM`ZE
+LImiM2#hUrMSmISDU(TE[IfFhB80*%[lZAYYITp4qrVi9pA9Y*f@&[mELEr$iQri
+J"iHr`XIIm#AAGc(RGrJC1`SB)9pHC@[dF&6GAI1S+'2G@Gjd)9$"a-$2AH&dGI$
+dZ"G@I1V+(5fYhGC9CVk5P[lkCVkfNRVcIbkfZSkkZe9GA8HaVY9XUl8f&Gh9MX+
++$XK+DqLM`[1i'9VY4"8E[!Qa++2G4H&Q@-[ZD&3bqG1G@LY,E0eY6S2epjjAQD2
+cVlY1ia+h8-jZBrkk2SDAbRIQTMJ0EcHV0kXf2DX"i,5ER6BrK`H'!ReS8dqL(!j
+r8jr9jr8k(8k'P[ZKTIa6-5VSQS[pe(-d[iZK5HGd+6m%rd-fNm['kpVQY1dLh!1
+a0Z&3q2cMd[QiQ`e+Y!k2ZXkMPjXHkjr9iqlYkDcYBe4'Z0C6B8j25r3N6B+fAXp
+2A9-l9fN1dUSP6VD$CGARdRP`TImY$UQDrd6p@QrkkVm1bmLPpITS&k[TrpY,dI,
+K0$HRXVIql8mDAh0'f#RbjpiJTf[HSDl6Y2fCq&5Eq,aV,[Nci92r[4jG*DGHPbZ
+VP4kBjjSrIV4,3HlL,b*Z`LlLG40Pk(BT4r31E1l[HY[0VUrkYGEI(EAIfTIHE*R
+5G3'3!)i[krXEM9mcBehf1Ya2LdRkIHdRkH6jepfF[kml(880$fhl0$@ihS9Z*qc
+lq[br[k[%rLm"ZbcmG&c[3bl[S8p*ZmV5aHGTCcRdG*[q&lrFdAMd1SMDLJSGIU0
+&SpMh%1Jf9$#S,#eK4)1cU*qhbC%q"0R1@q69Gp1@Z69I9M36eRhL%p2F5kUId9L
+&0M93U$C@dp3l#iKd1[R+Q*44)F@KS[&ffQdIEk26D1NiqrjpM5(U!PIdCH*&h+L
+$dG2ek1CQrJMc[1kFIb+9J+lK6i"r9jrkmRd00L4C66A2-0EGpM@BM@AhAefbKCe
+&jhP%(2-dIkI,drP3YCSHqZlDQPcNiT0[Qr3reSTbeU["UUV@p@hhFZHR8+pVp$r
+j4F!mB*j+,bm[Yrr9d*fH3[fhc2pSQUdqZU)dD,@H2Bpad0(S@#`JXh5ppbG"rE2
+lqI[ULdqaJrDihcp%bl&f28Rp,q@Ah@MqMBrVLr4qKrPUEEGf94ZjrcTr!rATp41
+k1&%dGY,R1iArLr5qKqhphQ9eI*X-fZVE2JiREkEXp&LGYfhc2NdH6hGEiZef[M8
+q*h(eNNZhqGqLLr&NdqieP&#eXDQed,BDI9DZAp,`e&0mcY2dkL'IEb'4Elj&QJq
+KrY4@P[R996950E6G@hUEHcZ[$SD$raS[,3l1GTqLKl,X+RraTrakZrlM`2ekE5G
+K,d(Q-8ADIlDL&Ga0cRFLcedAMH*L-hUpKmZ[jP*F6CAK`A(1MqC(ZqIT[jRA(Np
+H2,MH2b8UD%923MhR1P@df9Dmi9X&ed00aHVcmlR5[$ZI"hhIkH92a-Q,+R)d[U9
+A[4*28fR-kPllZSNmI"2NIkZTNqPUT2iICpQMd2+Tp$bU1*N#VU-IHaFL62mU6hP
+2[2Aar&a2ae'*q1PiecLXrR[Ar,VXV5hr1P9-jP3SrC@K[cj@rjHUeIq29jfG0PH
+$Fpr[ZqdmUFL5iXVXBh[G5UjX56Ql6hHTHm[8(%plP&*p,8bI`kU6jRXmS`!djJ%
+LBiX)Z2[Cr)NcR+NpY6lcdmIa-6mHca2aaH0pR'C%l'q@QpkLdNhbZC2de(NfFAQ
+D+6rrArDrKMqC"[*[ajIkXVUD'C2bTf*N`TAE3j28Y[HLEhiU'6Li2,emReZ$lR8
+i[Yp6NHem[hVVNbEFrl2&Nq(4aXHMUmDMYX@MhR*k[+h1pUr[I1ak2jf0Uq0iZ1a
+ADhjBh-ee20Y[PpHVjGY*bV[kAX1P8qLUmR)C-pXIPf'6+Rl+A38HEjh0e(IHlU+
+1Cjh[D1MkPPPH&rLkQRH1KRrMbR9kTeHUHekVMH2l,0cU-kk9(lG+Q9"FFq9KG$0
+JZ*XRpR0ihh2DCd!PHlhD6LCNVdMEbMq`HD(6C(A2AEpk0Mq'BfmGBf2CSih+Tih
++SihXdIIlLKSih#A3$YkI)`1AmXR)`!+A4"`Vl&"b)!mQqa3cLHc6a(Bj!E)XBf0
+*e[*rJb[bE(MI`HfjAI2MiA3PA[2PAR3J`1K"[qMT[DG,elVhIHiaHPRQCTH2Q5V
+ZFjd)mq16VLq2cG9Urp(6!Hl!qjbf-!X0qlVUIV@h-q1VjPY*kYhf'JljeeN2[eN
+BQYpeQ46BGIAj9*Kp'9kX'(lmIhSq0m'QrLkm&!mj)Bh3cCARc1[AiQ`jL1ITKcm
+-I,q#9b2IPBI`3Br`362Kdhj1["Y(dbD!,Qb[AQpH$X-6CFe(QNerAeh3dZ9lmVJ
+6R3K4l5d9mrIbp9Uq,ei0EQG19r6'B#Zi8VkQ9el$%MHmMl5khVaTQZMa,EVpT9b
+lD9#ZqepA,blRmdESp18`&G`Vmd6Sh2JjH*LH(,IVlrq6cr6B%2cq!IhXPR!3bfM
+TDVbXZITU6CfFA,d8Ub[q`lIphpq,MlfJpRle,lIhS[ZG63iY([iR*Src6j`TlqU
+pEh-f*Z+2qQI[Elh04Y3)i1lpc8fe(k@UYD2eD22aIESp$2qjQdF5FpZMe`%9IYp
+6P@2!j9MJmURXG*2iq,LdIJFEpqBci"l(p@[pZN,Y(N`AR2MrKMhr3dhp$FDprbD
+HeaUGBeq9B@*aT1-Dr&YZADlhN!$mBerDfdQpi[+X*0VbE'4M@-2)XHbpUZXH2FH
+pprcH0ph+FVc,MRG0UXXrH+#eQ`E[RkEqPd[Rm,lbmYLqf(kYGlccUDrhZQ#pf$L
+IGQZ2S(6G'Ld[)mVhbAAqfcLqrSTA*[qer9m@YJiI$jmIXXZ#%c%KDiI1GX5'CE5
+Z,9p'eCL3!-fJprb0CFq[%-SjP-HF3jrBpUqZ)IplR-AfZr9'k'ZMmLfc2MUa,mH
+llE4ZPdqkkih#k$Uqfk[Y[aIEieYQ0ljI9eq1qAJTrXq@faI%a[(NfQ*QbE2%kD"
+()3i#!Bj*beGpBR9P2j'GbD1lirY9e2a,IQqTS[Gifek,P-Hp(YFYFm00P`5$""c
+Y0kVrdeLEIhfl$I9efCfqLeFpi8jV00S)8ITfR`DimYZCUYAdH[9C2L62(P920L2
+'9P!m6,T1fP4FR1bU5*NdRJ`GMcYP([1"Q9FISjlY2Ia,2i'*cAG@0PDk2aEESI(
+9p#fPF1ll$YqfIlfBmEaqNc*IX-lAbiq"cj@mjdUijjDrJ[Xc6BQ0L5rm1dqpiR&
+pQal6P8G"N!"GfSkV(SpTLdGlbDHpa+Icr@p[ak2NErhI&Tq9GFhD8I@XjG[(d-@
+CCdRIqKY1GeZI"jF4!L"1GFk5ar`NrbiP9m+k9*pFY@AQA2qmEi[#lI+QjHAYT86
+dFRF5Zmh(N8qjqc*NpEemMdmMN5paFjrdFREA1KmqCPjFcR5JZcCAap(+bm[,a26
+q,38Him$kMDMYEj8c$T2S+T1RC8YabTMMP69I(l2Mj0FURkf#HiFcB-UNem%,dT8
+rJP914m0cki"p,d2j[IjNRSC19Nmj!J#G$Q5HMq6q2TElqXUlb2LJbbVkVT,Ac)m
+Lh@B1lbpK(TVYCL,`fq*h"@BhJbpPV0MXGCXGP5eGI5eGM%jF6QClq(*-cA'mAqC
+NEfYcSf4VUIr1fphik[hED6db62llVXFH1ac%V[r#rDMZG6qbLaFaI"iiSHMeHM(
+iAcFr0TTh9Dh39fZqaX+fZV-lLEc#mL*a2V4Z*FF6biI%fQ&C`X'cKHG1f96C`UL
+cU+L,Hh[JBPMrr-iA"'G&i[(IabVICaFEG6h$qh`-,#`[`epCYkc0h&Adpa@9pEQ
+ep9TkkUKDqfKDr34Y$'RkDJK`i@SfYYL3!'DaYdAl040d[$k%UhR*X+2#Y*HZSpK
+UG9Uq"+Y0R&iqkRZ"pZr`X$#mb[Up[9jZiUZRZ+Z[V")q096q[YTm5%m*#)*#KfY
+V,XHQc%T3IXLCkFr&0mUC#U$pH-RHCl2Ard+V2$IbYe2FIlI$`Z*KHPAeZhVFhF9
+R6h&EAe`MTqZUSH[YSBMp%)qK%I4EADBPArNb+kKrC3BehN@hlEMalD6VYAb(pa8
+@IqE)U$h%j8UcXMP[R21bG44p5qPkM5kHkQ40,[2RF&r8KQfrmVD#KpeqhZHK%PF
+5&8Frq'NTG&IC-AaU1Qh'TUV#LeeIU+cF80EADkZUkf[rllH#UiQAB34X2+h%U*b
+*QjPCl3qRLchViXprAke0r&`V5kRTblZl+(&UIAU0TjZ*hrrr@l,SSRbGc,ZCfci
+PeIhpjHA&lDi0V`,E,Jm%q['AQ`@Z61`GM8iY[`VZri9T,hhI35*XUmjfE")bYaq
+6X-6`2p2QI@ZG*1Ne2#bS)Nc1-1QAeFZ28Criq28ApeEheT[j'rTZ&%3*IaVAFqA
+9C1G-Jd%l,dpK#f-68Dk*XIhX54rk5$lJ3Ejhir0ZD@SPkl9Dr8l#LVY4Ad1h!6E
+DqfVrm2mPV3j1LMpMFHYIm,KAq,D62[BP9rl5(dC2)p0chMhA$hpparQqI-TU2AD
+RAd@`e&G3ep"Y`%ffZYUlqrr*GT(*d-IXEAeV[KEqrpDdbIZiRe2rM'H6'm1liYY
+qZiqaEEMAD[rQr,*PklrkcfPDRj++k`q,kYKB8r9aXAXm[I`Yh8H($UHTDaC%@ei
+RT9fEACh%U1V93T%+UKdd5QdF,ZDV%U2rb1Y#(8f1IR$%Q5Qr(+SQkEl-%@&,KdI
+8NHV%ViGI%)rXiqXAI`5+MeDV8b069DUQSkE5cQXbV(%UIp8KCiU1Pk@dbT8l15i
+@aMDrA81`LDV9rDJRi@,8Ha$VZTDNM&VP3Gp"hX-NeN8@GCi94K@I$U12XjF,5`q
+0L8rqc'A3r*3AGhHfh@Z0jEEAAD[d(mX@AY2d1Dj1HmV,hIY6r`FQLj2Lrfi2jIi
+Fp&,1FM2AqH`-pq(9paQf0aX)dAAkl@DhBlb[Z,$bDEP4-LQQpp+XXf9CbUQ#dcX
+Z4MfZ(GmI!i($[mHTce$,a0aqRj[qr4RrTd(b4*Y&TBhPC4VfkbcLj@LPE1rqK$`
+H6&XkRm96V,ZkND#rZU[!XlE#m1*Ab)PIBjYIBCYIBeeMAf0I94+kV!23X#G&AaU
+#[TU#aKDLNR[ViPEe%pPR&B[3J[HHG%&qXXHrqCbTNLRef`VYGAkf`NEQ4BfFQcJ
+crkCAcmfAC5ZcKbl1$XkE)TXHd`lMKhr!i9rM919[F5$U[DN(q5jN916VYPAE#[e
+pK9lQVXE8r&QIlq9RqpL5l59fFLAD`GRDj&VMhH(JF2Km$&[mQQMl6*Pr9cR0)@H
+fHHi'H[FpD6QHU+A26YTPA@0[q&arReHHKe19Gm3kN!#m`lE$YFL-q-C%%LaYE'V
+f9CAl$BE,84kE9cYc,XHXpU3r%cdLTcdlGij9eKBGlKhQ4EC&V0m'9DCXUeP98&Y
+"9f1dXDhC9eIXYK(e'Vd&0Up$pI35kcihQN2PIARC'VlGka9fR@Qpl%QaXZ40NCE
+dLSchC91HUmpf'*Z[eYE2bGjdZmq$5mRi2djHldY,8RfeREr'mkGiIR3X,cSA!mk
+Q[2+NAIR5,MbV@ih9aDX"VLb[,LbZlcChPhXlqreQ"Ikbri'R[m2IipmHSJJl1A1
+cq$5qm*(5bm5drBTaY)@+CP*Mqr+pJp(%IiSq9dY0r*Bd8lX+c3d9ASDfUL9PASU
+bUS+bUL9XLJV)1c[2HVE'XXFfYX+d"DV[V@mXlZmXVrG6Y4`)X@,N@hJBQerDNYT
+4,G+1*ELRh2pmh$i-ATDE#XG61l#Yd0&@D'YUiPC@D+XUk#XUiPD*k#H[*HGJ5kb
+$k82!am#@*UJcVbc[lbbi!QZ'*UAE@f*Y[NBm#K4pI6Kq9rcePfIbXHT455jjl3f
+hAZ,Qfm,3Dl9cAXm[!lHXJcX$,[2K6a!@cmQXUY4VUVZGES+E8dX+&5$`m6Vr0p'
+NdfNe[b8A`(cJPF(-PBA4-*N(VI"T[`[`lHR@f1GHC1ZJRGj-TEQfR[IcZM"S-,(
+[jHdXGV(cp[-SBm@hQ`iplcX6FrlTr6qYl#LQ`Hpr,frKG[dr!!0!dLj[*qdQrBM
+eA$QEQ2heM"2C(6ajIeY9"RmHABS&Jl2)!RXmI*h-H*`mVE38`A90cq&KjQq"fmV
+f-RRmEbrh-j!!$@jkLjIhXZdpcAdprKFU[TlI$q@4KiqbX3&cZ2N9p2DmFc(A(#a
+IjkIZVrfUfM`%#qP@8q&HHc@f2Q9XQii14AEhkNMNBYMRm@4Sl'QTEE'U+UaN3VI
+(UD#RYDLTj9A*`$NHJTHE$TmZ(lYR6cCrQe&*RSXb$Ym6Grh-M)TINS-RA4p$EI,
+FEffP6Yhp$1aIa8Z&j9RKEUe`,1e[0eFAPQ!GVJ9&aH5kbacX$([1E$`2cdf"leC
+"1hQ6VC8,@cE+$f)1*NpcBeXI2h'4GbpT(Rl[+S)pR8mq9pHATqHZm,fhGpEZjQ+
+I%h'ijcPiIUf02BpAiSr9QCAa81*4rU4&S1lrChIQ8N8rUDC(lk2#bB*d!mQa#k2
+f8X!d$GM-Pd-rmhCDM[*kFke&DApY[-h@l5Td&[S2epehRPIPmcZY(h@M3)`'lM%
+qK5CrrYGk(kACrYqPTIKdmZLNY12d8ARIPmVm[P)%4PqRm[PkIm[P3V)ihYRSHq[
+,[D@f[T[DqGpeQI*R[fp[m2r2jhhZhh2B4ifHrAfr4r4fhMA'mmLmmEa2'hPeTV@
+#eV[dD'hmQimEb2&ZlIl'mZGjTVAHEE6AQmqjHISlAa2*mLmm6G@qmhIlpj[-lX2
+rIBGKe[M!!!!!J*H)Q)QDUTQTLAL(H*UTQ*L)H(GiL)PQL)L)GiL*Q(HULBL(KjL
+BGkUCL)KiL)KQQDQ(GhH)L'@TQSQ(H)QRGTQlQCL*QlQBUUbCL)QUZBUTQiQ)LDU
+lUTQ,L)H)QTZCUQGhKhL)L*L)CRGhGiH)LCR-H+QDbkbTbkU*ThQkUBLT)!!"-eC
+(GRPjLCJ)N!#!Q3LCJ!!!!*!!#3!!!)J*N!!!#!N&3#-f9QCQGAH(F*H!PiHB!!L
+CHC!!K`L!#B#)ChP`#J"iDS#*Q)PhJ!!*!!J!N!"`QBUJQ(QCQ3!)N!"iL3QS#!F
+!!)VjY4Pk22l(`qqd1+bZ4bZ+m1Xf2L9Qaa99X2$Ja9,4D6Zmrp[l@NB+j6ZHjbZ
+4bH@b16brGC5HbZBkceHXkbPlRQIr1Xkk&pY!6IkAZq`kc!CI+CAqq8j9lNqc[B[
+d4lcSp1Ck'8MqcM)2c690GhZ0Jm#Dh0[dq(+c8IXS8ccD$$mcTfFDhXkrQm[PAX+
+Yj&l#h2'[BA$Y1RbidpleI-HpAEVmRKm@air(efFqTTG2PZibR9bFYL1X`e[YX2E
+3Cq9"TV@kM39[$Zr[`EAf+ERH0"YGm"GE`lUZ"UiMi1fMc[Yfr4ZIKYS+16"9@Yh
+V`K[0EIhQcJhhi+ERl+$IE8#pcZ3jf@q3!02DYYV,Db@c@rqlRIUIJc8ph'@kQ8i
+qkl2LfHlXYR4d'$XTr040(2EhMi[6a[AVH9@aVUTjZPLi,2bXp&Qm[Ej@2PTfibX
+'LrR(d8cGIQr9ZEcjVR*6Yc04mjPlHFLj@QYTf,,l56MSel[[HKB2N`TrMd&&D`U
+fbS2AfR,iY[ZX9arZClX-cmHBb5b2C[$AHf`pe"RlQ#UYi+ffJh%U$FbB0pDp#*!
+!@RlB,Af*hhpEdS2Mr"ZIJmI'`I(YIIfGrlqYJZGpdGG"DF2SDm+1I&`Gj&QHG&R
+EU$,h%I-bUq@TF*fGaap04I6kAiXSNS2m[VrRZ21JfR$[06"[2CJi2XCISj!![B,
+EFbHiar5J`&jIfGjVS[UFj!@03rQRC-2e)-"*aX(6k9Em'1[rIc-&YkN&RZHKS)0
+lZHGXpYS2Xbh"irfFrp2lh*b@140I@mfhrbJV0ccY2"Yr``HYq$,p$(AX&P@bFKN
+Fa"J,UrXlVA4I$jb!XDKqlRj-2lYV,D$SpAm[IErlp(f(i-eQFQe,Kb,2GmBP`TV
++IS++dbe*2mI&a*RNeq$j9G'ZV$QkQ,JYc+d%@EfY[Q)q@VEM-3D,`iqLUVUFrqa
+rKVperM"fRJajRb)*RC5GC"Jpa*eXDrh[0em6iq(bif$pk-)@Ij&IRl6+dQQXTkJ
+fHdeI)Y2rA,hALHeLZm5aNN[R8mcMkcMHIfr'MEQbkX6)mH0ZE(cpRiI(Vrm2ci6
+3B,MBMkmcP2lj19Xq&r'riAQ5T'0lhVmcm8jfq9kZ6r$H@rjIBPXrjGV@m2lZ1hf
+Xh1ehhPfQlY,,HbU+#JjdI&Hek'Kl$lh*c1843HIffBmrr6KM,pkNbr[3UEP3UVN
+NFi@eij(@&[V8M[#YH,#ZV1&mGP#[l'(Jj%1Ci&YVU'GfpYV)*RCbDV&`B21jIQd
+mr'q1DVHCi@2MFlKqpANM8lbVqcMElLaYcD4YVD9pEDaUhM4UVM9p0aie0b)fIj&
+IPq6'br+#D[QH9jhRrkIEimLdpV(8RdqX`%1G4UrTr4EIa[lMT4Z"dUhNikrj'C[
+q2hNDXfYVU)e(jXMGpAbIDmbPqVrYqV1CS+l'jjY[CDbhmr$fpINXA&PjLb[CU*d
+jbb[FC%YTqbkG&bTZ*NCV5mLFLC+GLE#TXVh'a0&@@A6fPRMSNeYE((a-PMiN[Z,
++pb'Ub%6*GaU1i#b4TS@#XZRBk@%)U&1C@b"1clq&2f8,2m@*KV1045)dpDDVcj[
+Le[&hRkUlZ10ar5qdbDVUpM&c%IcIDjdEEEH6Li23PG1Gjd1Abph$a-h"Uj8j"ST
+A6UVL(,eY[$a11JQT@2JPjA6hdQ(,m1bPG1ei%U(Jph+KpGk%U(-J*1q6+KihB5S
+HA!62kZ9$Sp&+Kd`#9@FP3k[+bSGEPCA6jfVKbpji82%`rcbSI%PG2S`5r[aHYpq
+NJi[YG(-G@Kp$a0r8rE5H6*%3H0q@[SF2XZA%Q#A6M4+bdLELcL@&M%ZH(bpG%[Y
+ccDZrP90l"PmaEl#rZI#rK(dh5`p[iX'ASj9C"-eI0f8DrmcPq0'ZZ(bSdcb)drb
+)P0D4UfcMEfaLAHbP@GhZ[%ip$hb@aFHPbMX*DKadQ2-h%D#QiGeVVqleYrcYCm8
+(QI0"YI``9ZjZYF#i1BH9dEHmZ[NUTE6r"eBrq'rr&hkZM0[0d4Z'jG%I$rEJbrf
+BqBR9G8cFkZpMjM,fp4(`rJ`60E)d1XehhpEV*l(DqVRCf0-D[aG,CkA'jf*TFjX
+CcMD[(EVHc@bjHiMpY%`('XT%2"5)Fa`*@TSCRdEE6d1AdY[aELbZV'kNFlpAjrI
+TZ2pl4I8ihEcq8,42`ANYL12lA2JREb$2hF&0GApd!XF#rYCqlMjHlJcpe(qh"9A
+)+S36Yj'fhk[eHrYVqdpq#Bk%%jclqhLlQhJfYa&r"RlL$ablhiF&(ZrQJdhS9Ye
+V-EYUVBBL2-jf((lL@YHqNDc4pId[aBl%NerjrpIbpGMZmcfBS-YPk'D`fMZ+LKU
+CkkdG$jH@[-Vr3!qI0Aej03A2[arDk(ZlE%4D@(&a%(B`3k@,L21jqfih4JZIJqE
+ph4mMSC5Pfq'[-V&f-lGCEZk(,Ch,5TqHeQIaXVr(pIUlr)k4,jF-Qba2`ihf[AR
+,+0-6GR'QmCaBf@b8+QiZ,q@dM8Aa@XE4I*ffe[2dr4c2aHe3k9BbN!"$UHGaGCb
+21MF14'iYMmQAjF+Ipk&Rq9#dS"mQ&@FL&@FH&Z,@&`V5&F@G"m8L(1E'jXHGjrL
+Hei9-L!bf9qM*p5[LCIGIViR-L6-QJqc'kI&Vlfd[qA#Uq93H4'i()[q4#pIM8(l
+Bf`jGl'dA0[l1(eeM3iQ0,fpr`,Mlm2`GE$Ur&ZlrBAPrSZIXBIlDH(aX,lpr,r$
+Hq*fGlhf&qAh[DNDE#IHj2HdD+6Cf[kD,GDfer*AqCaif$imEH@0rb)flXifej%,
+lFEc12#TZ0Al#eMDfeK99VLifVYDr460T39YTLifLimE1CIL`[-XmC'bh)MCA,fF
+,fBde6@8,Kf-j'PrH[j'0MB$Pkr'kq&rhVXIVS9rk'jp#6Iq6`r*P9IF9F2*98+C
+eG[8`TR4A&43BI1A&4#bqFZDH&PmVGDZJc%eGDZ&669epk&6B@lm+&65r1rmiffp
+,M4rCMERS40adIkFUPYq93h[,KILhrNkGF&"H6a2'h@SpcZV2ckDeVpMakqRj0IS
+Z9AjhhUr'Fb00Ff[`-Rlp$1lZhfG$4dpe93pPRHGX+(I6A3r9arJJqEiBprm'fj2
+3QS2@a[1RSq`UVV,amljP[N)-CkmQJklQ`ThQ8'0pkJSd[58&Aak$c10#p+eS2Ai
+Y*a,+0q2fq0BG5*fhLIRLDKCV-Tp'6qIcYI4IlmlIeep`GIr6K9h5iGGEF5ZXrDV
+Z"lH[pEfkld2FVYKlYG6rXVY&)VXY)VXVC9d[aGI,mAlm+VmUefF,c0AbDb&kqFp
+lB8&e0Fcp2rNQ2NE#$Y16mrTj[Ikc8r5ihE`XCP1TNmPFj$LdpI9jIM9(p128d'e
+dI(V+$Ddr'Uk#Vf('eR6YGE#TT-I"bB1ZN`GP"Jd#lp!f0R0pDBq[d@jYFPYH0MB
+hLeI'bmEbUEN6PH!Xp'fqIiqMMEA'mEB4Y6LEV#5-liAApCJ*[&BRUp[VlUfYp0"
+efdifiiQppIK@&Tm(lSXA%Bh5bGCUYGUGIU)fR[j1Q[B*M6p@@`fLQIq*[46[rUI
+bZIeHSLDcdYjQj(fY@Q`a0jAk-T8p(jjDCPXM+lkAddHLTHaQ*ZXNprQY9(Q0pEp
+l&S[8LkADA0AIA@Qq1,9Am@TV!-ZG2"2lQfe2G`m0`TU`Xmp95F[bjVdT%M,drAG
+YiZ+lA%rhlINbVEI9QdmbSpI5q[4F5INk5,YHGIFlii0aHApj&h0aM)ZFSMGN`'d
+i2T8mQ6FE1459$6+r[P1M&jZrl2lN[mNaFeX@(JBZ$m@FY1"-F+9pq,1lLidppFk
+D$5q4&UIZe9eTKS3DAm-A5lLhee,Ppl+Vp$P)Z#mA,bC1KiPG)lUTBb1*Fm["DAK
+EIEm,BbD+,eY&+dF@EREE`CLhph*ch5[,kmJp5,STqhR+A+e%V(D(ZUUPl#jfFLF
+UZYkAiTRka"DfJc8R5GlTGCTGRRpP6E,[00U-cre&a0ec1M&Uj29dfrm'V@B6*Ih
+a2-T1ZfATjDHUG0T0*YkM2F,4d9KqfN`hX89MUIk@1Ke86VH&CD#NbqPXjVh1rdh
+'a%eE8)"pY'S22lEr6PE'cV+5URZ4RD6FG[RZ9R+6EjlMCqNdRPfIHkf0fd6AlrI
+jA@*"DF5D$QI2E`IDXSY&XVA5qj4CDUXY&N)NaLl#alrYTL4HaTb4r'TXp9AiI`E
+5JllIpTVHYqpam0K#-ZNiIjXcZH&p+Bm2rEAraX2ATFh)afZ54V#rCkh*bD@CjQC
+YC@ENH(jdRlXY$Q-T[CMcpMKkR$e%l8CkSMH[iNM8krVr[FQGQNAI2qIiIZB6j*L
+@l,85DcfYlD@PR+e9$1HYEkLKS[+ZG0$V0AcY,$h'HjfMLl6#iDlmQ,9D@jde,TI
+,Z02&Rp[EkQPR0l+e9,-F@6%L4F&B5GEAH9eFp*hrCaNFICSRI$rjMI9q$99Pe*l
+Q$XG,Tk$ZF6p(Ee1bZq9U[6rhbe9SkUkQYlPGlFiZ`bPKFpRFpRFmbGPX(,B,Q5e
+&,6%Y-F5lZr"PXY,CD@bFR(IG@&#RR+e3G"`'c4NdBF45h*b1km0*YF580FER5EI
+64HYiA#Nk#PQpMF89pFD1pLe2EeYei8@TRELR[VM5aCcBffJT8)Y0&SHamb4)TI%
+@a0$48Imd[Am$2a[#lVAam([VE8aD,FA'XLPJqQV&Xce*BJZDXXmA'XJR5c6(`9K
+,f&T0e8R5FZFUlRq(IGR(rEFA8M[[[GIplMcXh$'Ek&YDd1$Tp(DE[1f&P0lf9Lp
+""1l@h%Pj%'PV,UQq1#T%aIh1RLkADfqYLNEkk*LiQTQSZ$Tjq9*SVMCGp,Y*54M
+GKJmpRqfqX3,dY9h@Rb'Fce6PFr86908BZUU*IBq4hH)UVVj++kMpPFq*)cILi2l
+HqlE$N!!VCpr"J*c[+LJcY,JFY+bYl5c8j+QSqJP5[eBqhr,N!(cm[EEE-A(N@qf
+aeYP)[@c2#aQ-V-V5GrXr%N6Qa`HCq,YTQ&p(FIQbYeHd2Jd[fiZ0PHGeI-q5FZ2
+Me%lU1d[YKZ-llFUTNBqXG*S,DQqIdq(+MI*TED*I5Sd@@Q*0*LiZ#hFj+df@JKD
+(MkrMjQY5RR'"CeFGaGYefiYY$&aPV+SHbLbpYHa)Ifp6$ql1H6cVl9hP43qcT)I
+0d81mq$jTEkXj,C+KbI(ME*0cc+)Gib6'lcdZ*YE#6U)e,KE$LbS85,J*0pB@8V9
+Dq(1HKKYhEkM&kL(2q9-HKFDE'Gj$dZ`RpKFdf@TU'Td@NeGhTCc5Qq0XFlcY(MF
+p$h'9V-VclkAfmed1rarI`qC1m2i,fPkf@`&Y$aAYD(CXGA8bpMV2am1`XY958AV
+@QYK9RNmLQS0lRH9Uk#jQZE(a-%jE3GIc-T'YTrhTb*ke6ama'TpaDpa%cXL*M,'
+*-50EjfhkRD@AYGribSiTFkQCNGjBq0%RV#c-SY"LBNeChX6!@PpZq0HkH&kP0#h
+fGj9pR1AI6A-hAd4qhR,IjEMTh&$pZ(R12S)9Ei['Ui@eeI)UD$HClh[dhr,NCrl
+kE)rebH2*G#GY*k6T+("jb9T+("D1ed9VUl6B@(NlklLePh&V3'hHdi&E`+bbUC-
+j'RS-$45TZ,KF[+bdA$6R'a24`RY6R@-Urk[QqIMYb9@eQeirH&A[5ME[m'Aj@4P
+9Y[Z[fmRLqVrK,*E&RmVeFTqcjEUqZ2QY[bbmc*QUrTjIQ6GIE8h[6YI`$&TAqKZ
+H2N+qRhpIS[q+r1m#[b["VmC`UqAX+r!m1ZkI%VZPl9GEIVVV2fklJImehVHjAHK
+lYGjAl+lBIYVUH4AD+aVXlC9f9Xkl'F@ZPl5Z`0Vpq&X[4iqcKHPi[*VBA%m'kqc
+cX4kZrmA!2c`Y[2ejaiQ5dA'R,,pd5`XVk&X)N!$I2J"mL0IlRPkq0`l'*B@F6F@
+N5XidE,mQ*-F[C4qfSI'ifrqjJIUGYiZ9KQf"b,fKq#Fk&l(r*cZR-hFe(m2'3D2
+-A(6TVHIMj,'`BAC5HRZHEh0Irhh%DhiR[AX+C1F6,mL&4mITfNEB@YIiF+YY)AQ
+FATQl&bDqDj8E$FQ0JZ6ifkehJfIZH*kZ3khkIqhkXQP4REdPP#mR#mI`+$GpMNF
+VlRFIBT2UIBb[ZBVjqP#h[8mUAimeqlhX*l@(`6-RI@cYIk9MmRamL0fR'fTailr
+AB0HD``5iLbpr-FVH4[hdI0U+qqTT0&(`0Ac6NifA0aeIHlRQCQ[[I5jH3M@hVhN
+IFhNIdVb$dVb2kN'mk-1b!2S`qE#[C%,Tm$Qpe$`'lPBq(0IKKicB@fIKcQLYUL(
+fQ9j[VG'(Ep(&EqLkjCMFVe-T9mMlrZDU[K3TMLb,1Ne2&brHIMcmhZDhEi@494-
+(Bk@*-@HNT*lLji"-l5CcUE'E[1lTIfBlS4rJjX(Yfh8j@reAAXH[Xqpc2eH26AA
+ZpKAq[1iHeUDL01eY9`pV@lRFl@Yhfjm(AkkRVYGX)f$iIEeFMArH!M'm2erXkrA
+91ZeYAVGCVGC9kqVUSdl6Cqef(K9rkBre,[iS2[mcUFMIk2k5ZB6dMUF[)G$iMP3
+MGY36-MbK!q21m2IIQh1qh0K[Ya)[GEV)daZGTCDbVM6qeV,6698E5eY6aUDTLEL
+QSZ96dm6iqfl'&5klSI%dp0Rp0DLLbCDHl342hl,NaTQeM8eR'VE'0ZH(bYEImZV
+MArJercCq96r((`qAP9(cFfX[qE99ph@m[@a,RIFVAhh+L6()L6h)T+,M40*aU6a
+H03HAD8RSfQDap"Sp[rDJbflrRN)@9hFekeMh8eh8+ApD&3GYPZT#lDEXV+aa8M0
+j00ZA%C2Uj(LA8QfdXAVG[`Z&Yj0(&`94E89l&R2X89ahrbCHiqlLiY&1fe1#1NY
+Xr&`@aNk$3k(38Z#dYY*ZUk4pI+)Jm2N[lC'bZUA5fpGb0KU-E&m#@V,MCi$#5)Q
+93GlA*G6)rMZ1AeY9Zl$bC00$QG&E8m22cGYi8I"iRclEUi1CPDZP`phim1YZi0T
+cJ$Ll5mTGZ!I2SI@!-!j@1Kc@`Yjf(PGAF6N24CbjRZI3m$SC,SiU4U-XarrRZT-
+UMeqDe%2"l#fUSP6AE'pVkRAeY)@#Glc`$LlfmLq$qAqR`8YadBYTd)2Ajm(Xq,$
+SjQfYVf9E5[#MiHF'P6CbhUSFjj9T[Df6+ZI1ND@HAcJC,qq4jhbr"5r$&YHKmh2
+aFAdCLmQS[NcphPSY24A8j&dHPZ-[&cPCEjL,M0TEBq,,lf6h8A!@&PDF'di%R8`
+jMdC@SKcRNfqQSCra-TreG4H0FpAlNM[TpB*j2UC(+h-jVURR3E+kfhHfeP4@rr8
+1bddR'FQDbqSaH3lbNSk($IHYSZijpl&r01N+i-4p@(L1aQ*QfdA6Z0*$RY&E8F2
+"H9[1&8bHATYr)qjPf3(YSmDfde$e[VF,JlcIHAkqaiP6a+MMD@668[l*cRaE$re
++T[mUMM8q1cqVb&&UqfchKBM$CQ9SSmjNSmr-h(Ip+$2p+BZ0A5jrTaCrlG,19%U
+MTHYfpR`[@$fJ*j[XjK&(fq8kQ5Q[KTIKq'(HpAT82NjcR6R6Zjb(X2$Kk[i)Glm
+(6q#(dJ$!2hkAiD(iDAQaIf6r3k8(XE,S4EHiN91CGUDmr&`1ppD6hP$KYMECqKR
+[!RVM24CkLYjq$$9GRXpjrPXIdD6NibfNh(ZrIZC-V1ITchkmckrGEQNmZPaXf1)
+rS(m[MG,REEbTZlbY,86ec28ZGU,E-kV3kD,L1adqrNH"h,UU1A2k9UaCeZaPCqq
+YXpI@qLrG"4G[PlM`SZIrR&c%jEE#,fFc25ZcU+5AUHpQUV[-C9mA@l@,fHik%AI
+Fqqk"'[`Dr2ee(ACRApe3CVZUAVDQhphC5T(q-fXi2GG5INp+(q1hNbFlM1pRjc-
+ih'cZ1adhMmGPHjameN!$a[qFlqE)6Rkjh[p"MFVTiH#f%QUKiI15[pBF2X3$S,H
+6E@dQhjFeQ,DFJPkQ9MD@Am['H6jFaX2p,h9rNf(ir*p$#l[d*VGq90E[bFjk(Lj
+hbGK6l$9q9Uml[FV0bHAhR2k8,IlZG6b%j1HkZ9iXARG$23r4f&h4`rZcISA(5e%
+2lHR-%peID[R84J8jqLKf%eBmAHbpPaH(DlSk1Y,b+5Xip"@mH&Xq0#eFjD`YAPl
+5&SY,aB@LUV+&SkbbKChF5)@Hh2!Xp6UB@HiINm@*JpKaBNaUq,'R-jD4Th+fNE,
+bpV'Sl6cp+FQfP15qQXmC%cNaC6F5DRj%lUTr8jM6DHQd&PlRBBkdf8M0rCklm'D
+Q[V&j6r+9+fqdmALk+9SiFr0bZrJl(kX,`SZ$aNU,9A8@UZBY6GdZaje$q'Kr$3q
+T$p'mrIL[8TDfjk@fTV[3b2XIBF)2'EblJm$-h-'aqPrIBARbhN2e+(bqG3qAGrd
+ZSY6G3H$"65XV"JZhRHAf2B5Xj&bXl+QiQAUp4+NrNhrCi4F8LEb,-6XR%pQZ*f(
+e[EhArRZrG`'%`QMq[hqRihGe[IeZFUXpRmrbGP)m(khApCJC[&(&[+ffkZG,"0l
+L6SG9UYG5i,maP[Li,F@ZiY0lB@'pY0VAGjkG'FDXaZ*1UT09USQT[T1S[T@R[T9
+A&R2(V,DULcPChqiV-p8l5IUGTPk,F6qNh1GSY9UGI9ILN9Aed[DC&+ej9IEEVFE
+5SU0PY-lYk[FBcKDEmmR29dIVG,DbSZeYUADfhJ3kbhLaqM,DIGaIheR4edAKf(2
+JkfmJQ1G&R,Z#FZGYKlMEBHhaF'&`eY04XY5i$-EI5F$690C8EEYIHffBr`N4Ze5
+LV,'&VfVL25Hp*TY4Rp$hY(h1JTF$Sq&XEE,82@k@flZPkfLZ)ma2h%HER,Q21Ic
+LND+QhrEG5hf+'T[)S"eA1JSlb,4h-e&l`V4Qm-C4m02@dl5i(55FGhY(SFK6DLQ
+TH`Nm[-PEqZlCGRD(rHFq#(m[`J($qL(4jbfYc'bBhl6Ef@'f-QDSUA!Cl2@HHRl
+,5cGR86GPXF6UXGrYMrdGcqM)Hcj2Yl#d`e2aCc4@NpRH,RXj*SXj$khBbr&h(&A
+f0pM3c9(FG08X!IrZ4qA%I9qpbHlS$0AFIbq[m',r,er`Bb#LpqEJd[4Qi+J"2&k
+%iJ*"j22R`%kG9cSIjTUY[)H`fU!PP,B%"1bamD(mZjX[KkHqi2`GaVB[rFY5feV
+Z2IKDqKXlAJp(TbBd2pNe+MC$*F#fJhI"!6J@k!N(SqX!QlZ)23i&a"j@lZ8")0M
+YlL#TfPa"6Df9YZdqcErFQFR)rAfq%c2ak$ZmYmq8Z[9aZ!l'Mm5BYpIqA(5S-2G
+46p"9R$Z)2,hec"k1jZS240$I2aX'ejml(!5$Fp#EMJ*"[N",E'icjZK&QVASaCV
+L)#G',K3%khLG'*U[Qk0iJ2(Y*1KMfNV0I-$r'#[Qal#faq,MllhmPMEb#bci#8I
+1JXUER3F(6AF("UlU$JE@kJpEFh-(VEkiJfr$YSqdYC8HVPDrmZ2YpP,3IFaGjkZ
+(NImiPI6AQHT25h"PZR,I,d2p+(mZ0Kl,CCDkLi+DZBZI0MDiTGjE8ZqNaIaf(2Q
+Y65l[2ELmRY0&hG68hQ0dXAdGT4AQ2dNAbGlPl[ZYA"X1(1AF2"60e3pKG3qfZBF
++iSB9a$S,H(5@e$5@d1*+KaT0$'N`kfBXZGSY93l5GhI1eHYKlQImUmdQRKlh5k[
+RdfPSGl@CcRkI4`l$FBARkVZiI#NaH&E8ZmZ+AblL24A'9Li+kQpP(Tim2b[ep$&
+BR*pVk[DBY,HrAjEqf9Qm[L2JreTri8Aa3pjPqflqRcRUpT31"['6D#0,l'Lm$HI
+Bhf)P8qFm5PaL9+jBrdAm9lQG(kA53%B%1!M-k2Dr"pIfImJ+q-"2PfQCpA0p,D2
+%S%"q+4rlR&5"Y9E5@Pq4m'DRk(LqYi[2lhZD(bpj[,MACU$VYjCBI[H$*Ql,3d1
+!p'Ri8U(PZ,+KcB#Bb65bmUK`dU(eXUPPj0$0bS9$25ZiT3%SG(*lLKTj13TDLbp
+ERCV)81hhHhjrFj!!SE2aI4q#IlQPrVkdY1F(!CDdPX,q[i1pRk'hpEaHKhAF`pj
+YphHGeQSIPEbbZZpSF"GCUK`&cQU@AYp#!P"5bpY3pE+KiCLa`0Y5br&!5cYk@Ai
+0c3i$K!*`EUNb&$jA!hR1lh)82VHKkh4c(G80[Sr@q(GBVXp0)lA'T+Gp+CrYP*[
+2j,r'jl5EPqPX,h9q(1cXr2jLCND$(*rHrCk$qdrE3jH8!F2#bD(XU(!bD8!`$l+
+Kl+Nk9*m9*%rM5i+6m9,fmp+rT+q@95i8!`$Y[PYU('@d2+fi"iVMk$(Y)cU6l3P
+$aPY3j+KaM#l%d1*4!I&5i,q-QNm#)*IqNRj@+M!JA3i&@#!H+N8'3AF$a28RqC6
+bFcQFTTXa`m[i@aRYM8BE@jh#dZ'l2$A-IdEb2T1c`dV1iA39''U0M2IHUX[a-ah
+qCc0$p@RNC[XqiFF)q2m,im,iA1q1C`[K51eK1)%pFmB%lrkZ4@RAV`Hbq)lZRcN
+M[-NV#lcU6r4bA3qa$pERhY$l'-jrbY!kJVJ+pPi#,X6qc3m$SlqBlT8jLIlGZUF
+cIh-li9a-cf+hq,c5M%0b-IHpl$c[5eGlSY(SY(SY&Sr#ll[2Ud+b&GRe2VIS`ri
+TEr'lNINcE-K&eq+CYTE"lRSdXhH8Y4G82VA&$Cff+`N2!5de`*E1HM*J`[NmUbf
+&KT,,9lcdH"SYjCF$1ELchH9h%UVQXI&R0KNXG&RpK,lHidrfYR&S[,!M&JMj-[Y
+,I6bk$md&'-am6CBc)8QbQ-KS-VRjcZ0,RG*MB9Kq1K`Hpi'!Pm",i$#i$!bda[1
+M"KVZ2Rq4clZ@lDhr(f'U54(kRHIeRrEq6Cm6mIB4@Jrk*rLI*XrENGVpaUB(jmT
+iALk24N[9l1p,'i[1Iih2mr*U-j*Q*G*F1`l(rc+BADH49riq6eZSd'JlVZX9*Q-
++d-IcbRPE5rUDQTUUDMlc-pcN12-BC"MXrTI0$a%ha0[0k65c(MHPCfhDFl%6#$%
+af2pFTHiV#ppfIfCH@PmCEjEJjlEkA5ar6ZIm20qP-S3I@`2ciqfNpTKdifqal(q
+19SYEPY(0E$Ymjk%[X-CSqjUFh*`hD*cBGRf2cIhm1*jm%ATDV8E#@`2Vb-,LPkE
+q[qMYC82"ERFERDlb9L-9)lA`&CRe2QbRq0Y3i,LEI$E'HdQNRYMM24`[#YX*)qV
+i+'RAGIrE*ibIa(mp(PC1)MSAiEXIQbQHmZpRkcTkE4pjRIkHARI4d@ldISq&rap
+b4-q1Z6(V[lC,5rmDIbZkTk'RbrVCRDGVTC1'mKC(1[rVNj[EjHYlI-kHCVClEiV
+eGE)Am)jlqqGX+'FPAmU#CP36&[5ce[3jfiaAcAY$NCb6mh-hA`iZ0CiIPG2,mQp
+R)hi*UYYEh(a[YpaJl,0GGBp2J4X$`+lk1icrl-e4qlmrrlQ6AYDrf*VfpIq#Dpc
+Aq(h(am,3hI!e9h[r6r4iGK`2eqVVE&LXXk'FNhr0MAr0J`8QP`aF*Ym9rCY@1kX
+hrL@5Uc1rhcR[B6#j2Xi[cHrhG,`TkmSUABl'klQKdI"Z1fbR@BAYmC,G[1I$mh[
+rPjZ,Ji1(jr6bpjHcN!"ime@h0lMi2Xpa"KH**kGM'q@aVrqi@AjG"Q2HkR4rC0F
+D0qDDj%EacR@m'&G@G*aV'*a[emMFp5NlEr$Ikbc9CrCr[pLee@)c2P5Yp3pY(`Z
+ZPCREC5`kc#rBE9EZUkMLUUqlr[Qq,S+A,eXVTE6E60EEk$0bfV[FRfGl&qL2HG(
+Tc23bNIfFC"qDDTVZpaX(J6@jYqR`j@DMpP#QHE3BIQG1cM@pRAmhPQIUYj&l#h2
+'[BA$Y1RbidpleI-HpAEVmRKm@a-dYSURS[ljlNaIqZK2d1lf&jql(`r3f(2Rk(p
+I`Gp,CKY@[NVC(jE9[$JhK`IV$K[ir'A2kHJ$MlVXq,ClZbfG'I&QIc864cfpiq,
+dmEekhP9XDkUHETBZ#cmV24C[,fq9MjDGZ-V"S[jap&-hAj[eEQmqDjb8lFc8I1C
+HhR)Z9TMXkPpT*adDphh[3X(bB8rak#LYB9EC8(Vl6Pm@hr,j%Amr2JX1KdSZiZi
+rB3rVfZrer(qRd[aC6Z-peFlBd0KclrR`Eip[R4TH,dD'hpr&Iek[YqITq(b09'h
+ZqjAHhr[GedSeYl%lc-I'Pq"qE,f*i5i(Nkk*l2)3&!ZpM5r*[l'&,eXR)jL0dr`
+aZPYHCMlrPpc'iZjj@SMHPjYTk29XprVq3aAFfKX,brjd'ejaUfTGjd+(Jp(&G4Y
+A2SVYKb99fGkZFj')YqK&p+llZPdNpEd9+F5(Fd(bm(Q'aEfIrI3r2DHG'h($j1T
+MF,fBeRl'AjH3!,f0HlQalM(p*&&)S0p[H6e0d!S&qa1SajHaaX'!k9EcFGImc-a
+Vhe)e[ZIHd%D`h2)fIRkMl24bFLVj5VAZqVQcmpfYEcbd,[UhSPSA6rbq[qHimk$
+DF1me-'mpQ$JqaPqMN!#pJYYc*&A"J,brXlcA4I8jb!XDKr01bBIU3B#6MB1RdUh
+i-GIqrQB,Ee),2Fp$33EhFmlClE3ICPZ$kXhlf#if)q[-PhR'F69H(VkVKJ(U[,p
+V3q9q[0HKJiH(mllA0erH4m*kXhbf%pKQUb`[q&Vmr`YITE$3e(%cALqeLUQ9Xq&
+r'riAQ5[9a[-8R,VIq[k`SVTl$ImCh[D,[+1MlR,jV!pr`X*X(3Ua(08U,NmhYmr
+@j(-kHGVFpYq[fc&Ml99*l$-r(Q%d2feTFmIcmEaSe0DaUhLaYVCaYlC4YmG8XL0
+D5)ecqf0G%m'Yk8Drr"PqEFp6'NURMif0IlAQE1rjQYMI&[ZAVSec`rH1TH4'2mD
+$[F(6"aBfQi[Rif4Ff9YD52pj5r)Ml29qaFDV#B6cD(q&2m&em'Ar9d[0PTD`kc$
+I$*ZEICFlcYYYH2H8Z!QEb(LCU$bC@-Jf%VTjqkKbp0F`m61`Cb9MB-V+kHe0k[F
+bSH*b%'!PGa'KiQ&ViF[*e`#H-BI0E$PlE@!*XSF[EeF1AZ+S"+b(,h06$PlUS!6
+aBF[Gdm2%`pV05SHjPjA6jqfPqK(a-1eP3lQ65h&VdG$YV2b,Hma[Uq0E,kTk,UC
+hK81#jUqDL0I5UA$5MIaaArhGHG5BhCIXe8jrcVmrl@UfR$e@pi@UY1"U[Lhq[q2
+Hb04'`IN4Th`*drrDMb8DUlIelAamTAdHAiY4AifQXUU[kkYNDbZrIZIfDr"qjVj
+hfpI4HhULJ[Dm,Af(!eAlpPCF,MqRrK[pREXANUK[[I[qM"Dp'#jpqPrGm0$mXYJ
+1br4GfFVC9pcBa0pCaUcM([[L6jSIjHUMA@pjZSMArN362J6Y[6amaNS+EYrAZI(
+bMM6c65UU[qDYjZXVlYV6l'h+DIBe-lkII)Z&AHHkQFj@%l-AXIKBDmcY,XG*FdG
+,RI4Yme3iZc`NYLRPpcBPbjqjYl"PmaEl#rZI#rK(dh5`p[iX'ASj9C!!60AcGP'
+[r-jIM4VVKmU0-mL-G&e0D4UdTUXBPhXT9RGlVa0rXVP@&QqTpLde@)l6bZE[U$U
+9rbklQjREGRBGC,ipZ6ak5HE'k9GCcUCZcd&,-e[0k@dmqrVC4F-qfh*Lp*-C(r2
+1EV)EV)IqXMm@L[&YV8A9cZpS*L4Ib)f$N4X&C8NhC8'@Xm9IIfrfq[9IjqerVVV
+VGklphVIrUEfFKTIBb&9qV)9J"rTb'irhb'irfb&KqI)A(Vj$qQpc@#hIF8@aiRV
+HhrRq,m@Ljl%V`D#BrEIrXerarXeppqfNkfaS-,CBVrarNV[p2d&5ZHkVm4ES1Tj
+h&eR)mj,S[&XINbr,K6r[3XrbS@P!2N`UcN3UcM`YaD`Z&D3VLcS2LN3jcBh0Mc[
+2m6Id[490jcU[#MVA[kN29qplk*!!bfHqM1m@KSVCVJ4R,DPRVLKcYcLTE&r2jf[
+S[pqG[kkqi1[rT`UlTF1ZYZ*A@IY9h!p[AqYlGGk(Z9f`pfZTrf9fLN9f@N9f9XU
+kAiZ[Pq,pq&9q9Dl1&jQVj0C#pI1HpX+#kQZCqRrb6(b0K"fR*qIdmhl9&m#H$%i
+E4(8mrfVEii+$ciRZ6XL0-f0G'aZqXpG'crU4U2DfQXq+0TUfdePraGR'c'j"E'l
+kaVYIApYlN!#mr`0cEHIqhMfQrj[`pRaX9he'Gq[jrpH4rRpDaf&VBl$br,cYThQ
+Hc&"JFYa3%Tl2&dQ@XmA48&0C8&0RH0%`['dG*@5+5Xbh)T-$b-l3HY)S2@b9*kh
+#j19rTbZiT1"NSQlX16039A-LeR-MkEhYYhR[Hlf[)XZCC@YTbV5cYH6DfA'j('X
+3%X`3Y3Bj(ZpVbYYhR,MkEPUDFfqZr(T,Md1Aj([Ge3@H'j2HdQm`h*c9*kdjap$
+%mZGie"Jq0PZlS-lBJ*RFYC8'-beP2cfXT-YRr,eGI#d9IMZehAh[eqVkXEmDc(G
+hp'EiHJT+UYiT1pRkfe*h[(EQ*H8a1rdrrY-NZ+1kfRNa2S5raImf,KNpee$0I8p
+2M@I&ddE$l54ifUqrUDl3a-&cIh4)d,-D@aeQUefTeqSMB,m-DBmHGXY,q'al1La
+H[Pk+DeZ&dFh96QiNDcdYjQj'Qrq-6GfqYpRX2qEUf2R9efdifiiQppIK@&Tm(lS
+XA%BdkN'NhTlq6TVf#Bdr9PX0STRrLEd8lrkRmVRpAU)LTU*HUQXReFP+IDdlEB5
+bpf#(2eXRCa($lLrrk+jP@eC&`HdiHpheKZE6m-'#mHGPDAm-PhI9VrPpr250&dP
+6m2U`YTra+mfJhe"G@HZXr0PGVhhlR`PHrrFU9bA9b04Yj9A'*ekZ$$EIV-*h$iJ
+4T[L9+CEUj@dk2jI4dI1aX2amjk&hMBIPD1mr,DI9mjm*UUq0[V3I[V3crldjHZe
+KrhlINbVEI9QdmbSpI5q[4F5INk5,YHGIFlicK$[lb,Z6k8CbL+[m"Y1$k92*Nh(
+LBbq[0YZHI&pLIjd@VjH)qRkXLPrqULFVrI+D2RaI8Jh0i!FAKG#Pi24SE,kI%ZH
+AJY,`Y[Yq&XC0&&kfLPD1,0cYYi-aEqlNjlTAPpH3!(U4G&2QNE+e%V(D(ZUUPl#
+jfFMlAr6%KG81pjerG`,V2A@0d-9l%H**dZUd'Jd*r&Y,*cd@BRlE13(eUc9[JIY
+82U4GcHAecM)Z9dP[1QSMJlkS1pEr#4S[i+NFRrI*5F4Cmq,jPehG,RTkfSMpQ@I
+Sm(Jrkff%hVh5ZIrr+P6@YT0[ZDhamcTkfYfqhl&lbAcAm9c9jAV-TKC-5rYE@eY
+'Ehp6T[lF2QFr99R9bFM'I)K,,Tf%8-ae0IVpI'L8[@bU(#ff+m26rfYC2bEhMH(
+EiU41Ire4H6qM*2(2"i,%GP*'*rl3SQ-P,C&cQJqRTIfrUREIj0lEH0eFY)Trj,q
+IXYrI+h%1Im@ffm1&,fpYEc(kTIcC13VZircb'-Lq64A8l&q,i+AqR`4IhI#!Z(U
+2G`1JdhIkE3phRkAVp*EE'PSqR&SlfBZZC(UTLkd8'Iqc&SY,EDDPQp[*d1KTF&@
+@mRR9mMZ[jpId[aBkFKr4#Y2q,VcD([DHiZVM,rUc[QhADpp,GITUq`p[JjH$"c@
+pNk,YBZ#l16%,1R-ZBXja*0CeFlFEqPkDZ-SRmAQa2qiham`!i[@QL193bre0Pb,
+(LkD*KZ&`V(38NpXE5L[V64hX5XlHYihK4+bGY+HqY0,%RpMCk#N3Ldd5NlEdT%L
+Pq9L3!1G3r&dErS3F2S3@R4TEMi+(TI$LZ4(fhBcpBMlkhEfe(5jl`BY&pLFZZrr
+I!qmMZMrSU3+GVE#B358IHBERCfPU0*F8G,P[4YXe3pQI$0l*E3AcM8[#h(r%RcF
+e[XeGF(AF(cC2DpprmHb-Slp8B4$f1hNeH[k@dmkVJkhEpPqrR5EGHf8becHaZ++
+qZ0(HaDRYkfkm+,8cYa6heaTBXjXEBm5el5k(XI-N50Grihh@[jh@lrl2p9Sf,*R
+VA-AlF'IZ!$Le&e5dph3l$XGTCdhcqR`l+0p@eL6mLqXSf#XHcLBD4LiNaZjbbdf
+@M8(@qjeq[hqErXa"Hp3k@h[lD#GYS*qhTFpFd1MZX9d)NriIkrqBdl)rM8fF6XS
+Nl)LGR-@0*J*Lae-e%R2&bpR)d-MDlq4R[R9"PUZj`NcNm0hd[iQ%lZPrG2G'LTG
+jXEcZD(bZ$GiM&r9Q,C'E+MI*TED*I5Sd@@Q*0*LiZ#hFj+df@JKD(Mkq4QHSU(b
+AdC(HEHkUi2YCR6h&A"8EIV*H`HTh[kRUpIplNcZ-cIdC6P8-r+[j-'$N`6%UPQl
+HKbeaLZ2e-c)lbamD*2@&QG(0"LBNeChX6!@PpZq0HkH&kP0#hfGj9pR1AI6A-hA
+d4qhR,IjEMTh&$pZ(R12S)9Ei['Ui@eeI)UD$HClh[dhr,hp0rGA(hI@C5XjRcfm
+(fV+,4E+edPMCk+ML6Q&X*&I1F2Lk'*TICL91iYGCIFE6r(%VIQL9Qd!bee%DLhe
+RUUqENGrh%5BQkUbdNMLdeIiqiYrQPEVp['YC(Jr3hiZ2AaFpAlRY,#1KqM)lIEm
+1Vej+p`U[Ae'hl,`q&jf'ml'lMKD("F,062"c@5e@9i9lUTIKhflpUpdrFHc6Ga`
+mllPpR2fAdeqhGGPAj'Fi[bfR6Y+$`B@LrAS1if[Lqe9paZGAlG6QZ&R[Gr6Jrf5
+FKGTY$pPLIkiU@PVDci0PC@I"i2#hQmhQph'iX1&aH,cD5NT+%dbiV#BV#B6Mchc
+)@brErea-21A&$PLDS!lDPQlDPR*8@BP4)N4,S2@bD(#PjX!`$Ym4Nj(GI8qPTG2
+N)C!!TZ2mi)Z#pfCm@IceKqLQh(k00Y2d9GCqZVV2DfPC*mE-aCQlrqaCb9r,kr-
+k-@FZSrA5HVRERa*%pf$)fA'fprXGciYe%Kd9KEDU$%a)1bLi16&QVEiqq`ZSiIm
+THd+E3CMpGi0a3jZ4NHaG$Id+'25deEEkL21IMPDREB,fT-5[Lc2-h&Y6IbPd96A
+P2ND$kUIp(h+'2RlEhqZNhP9RUZKUH$-@9aU[6LcRkq(+[[efXQqNaaCc0Y$b06E
+GpKBXjkIKi#-20&bL*9H#-chC1U-&peeaFeHGUi*rH6(T@fTr4YTMrEmmR9HRYX&
+q[M@NQ2-fKMcjQd$m4Ib@MXKj13QPqd%crI+6Hmcqeb@erarVU1deNh,l%l8E+pe
+GPiF+GK6ZDRme2jV-BLCr(p+(JY,6GT,pEp(Cr"*b%4Sj[mTi8VaH$Sq$Sq#TGH`
+ThT3XELk2&ja%Ar2Dq6V+M[Fjq2k9FKEM-"eQ&k2HI5Vm*eQ"lbM!bmrPpA@e&6p
+hBkfUeY6X-9T+A4IbQ+I`kM@rGUr&TpC8`91+dP6Tm9XDRCl(qAB9AKrGf09i928
+k[aYM8rdkcq(@GCIAi!!!!)#BLBL*QkUCUTL)Q(LDUBLCLBL(H)L(CjLBL)GiLCP
+hUCPiKhH)Q(DUUBKhGhL)CVQTL)GiQ*GPQDTjKhLTPhDTUTLBLDUkL+QXL)QCUlQ
+CUTb)L)QFUUUjLiQ(H*QULCKhGhGhGiL)L'CRGhL(L)Q*fiQBQXZmcEZXLCH*UUU
+CQL!!!50BCiQ3!)S)L*S*LT!!!!S!QC!!!!#UQJ!!!+!!!!S!TN!L499RCfGiLBH
++LSH)H)HBQ3#SQ)U!Q+S*S(PhH)J)L3S*Q!KjS+N)#3QJN!#TUJQ+UCUDN!#U!)N
+)S+J+#JLTL*VjG4189$X2'qhTFPR1hcQ5mDYf(hDhBC+UV2'Jb81JT1qSIYICT(3
+VQqjlR1G[h'GlIZ*[ZXjq,bm4eAUp9eAqrGr5klUZXKID3*kYAhhAG9Kjc0jck-h
+F6@GP3jH4e19m[*f[r((kFaaZR1FA+f'hTV[Te9edkkjkIS@r6heY-iUfQHXY1R`
+)heCQFiNc4HjhG0lRZm2LF1CV[iGhAI`QI0p[Tr[Ur1QE,K60eC61"Bp2hD[3ql9
+c(ZH6kAkk[5c[jCRmpRq+IqR5e'Gc@EqIZ2`iZq`d2BbSp2I381""1B%HBjF%abr
++N`E6jm9Jq0)Jmf4"Y*-'aF"T-'ZP38pl"3hm'@[ihU4rHfhce9p(4abi*EQ4m9J
+`I9Jp(P3EkbjeAdB2@XZE'Jp&J@j"cPajE!MiqqfhC5[mX0'`dpNYr@D(kIjZlcf
+Dc[mmhar6aGhEEUjqr46Y$Dbp(-A'9SmGGj1Mah&Viec[Z4Vif&Y*&4&l(D5Xr"R
+I'Jd02I6F'QTlqAJeIfFYc[ialRhS0@"hbhf@JRr+JcRkS-CBb)@1j-+Bim+KiX+
+UZiARh%lC@Xlc2-P@h,p2eE2BD,VY"m@IcV5jjQ'Km+6Y[4[S0TbiYGc)Y9JaDE"
+JSHE&SHG&Q1I&c8&c*k-'"dVRS9F(8q#bk&I"m9PlpAe%%A2[@%'"Fp#0"J5),q5
+&%&P+JX3$[B0lI3HII`E2!JUX#23m[EBqp`d2lH,jPRVU$kA`IRcDTKjf'rGMlle
+-H6``BXYcIXcdYc[X3m9ldeLT%cfml"KrHM6f"`HIiNAhqClhL4F$JJIbCL40B%L
+D`pP)K3S1MCHr-p'$Sh2[6X%S"HTcjl&Fk(LX',eR-MEE[rZC$lRCrGhp&3r5qpa
+FefkDZEDf&4Df&GmdaaIXcXaa[X8FYb)8YDCRYjh&@N,!Xjh!i2(m5*lpjb2%LB(
+"j%EUq2m-E'FL$hDERI$"`ZEkRHFAMlrBdAAIQl[32rUJk8IP@'errqbSC96mXQT
+MiVm%a)m2UFVAaX#aj&A'ZE10keT'm[(@d6@C@hMC63h2ikD&kHNb&jaGrhZM9dc
+2U3PhBEA,h@emflX2ddej'3)J6d,b0l&raHL"(53)!R`J*BHEGqRVl5mMHMGf(il
+1BdQ*ZXMpIY-hp(FHGJbI8p(Qp+$r@QB&F#[KJpE"p5Dr(JrKhmphr@k$T5m[R2Q
+lLfiYYHFIe-I+k8(Edc!U"CLfSm9DeFE(f9Rr2I@Rq86,EkfdXDIY)QVheh3a1(N
+2PifrrmDAV[[FA3Gb4CYGVN0(GfPYEEAr5jX,+mM@r'M@h(MF$NaYebSfhN4[,N4
+[(NaYAHaY0I4TqrMCc!MBh!MBcQ4X2JeFe[YhcI$LllBmcAEEDD[(mZTbN!"ACbU
+`0APS+V'HKIH&QB0(C`6PV"hNDFP4U'4'TT(8ZBhpieGbBfdimEd12e1,'iNDb[,
+$elVdrbm2dVQ`f[ADlIph4r5kV$c@B9!1,b0Y6i(5Jm@QB&`1M"j8EJElLjRUFE-
+p6Lc28[1kkPjhFEc,+ke8DQi9[j1eq[pVQIEhr0Kr8rAqkId+NPNBRC@PpDfZfd&
+hYXRMVcYSZ@i[E4FCMZ,NiZ(!@*djILp1Aj18LEHEj'8LEUJiq8LHaPBR!S1,PBQ
+kTH,,a0[5hNa%mZPi[6UEUBLEUTZFY%h9EF)&Ym[%fqcY`+fGYPiQkmqe3,DCL*l
+'BLBIHhQCe@CLEUah@pi[6XG[Bm@CU)@*iX,%ePR%fpT6!Adl5PKBlL`XG2fX6G@
+ZRK5r&K5q6YSQhYY-JZEaPY%h9[B6I&K80[%h&[%TEZ*0fmEAfP(Sl5ihIlI0Yq"
+`r[fHdqbm@fj&rHbGYj'"(mrPpY"Z1Cfd'h`HR-FbDr9P)+cQG1Q[jVp8a"2i26V
+VfDml-3Bc"kHqN6AkTQ00HG0BVGB26NkqDr906(PmcThe8"00TX(Ti'Y"[DC2"Q[
+0aQ$0HJ!RqH$0H[c*VKB26jm'hpk,X[HLe[[3p4cTkDKqA+[HENFP[pKpT9m,1Hi
+hU@%pMpMaif+iX5JZSe6F422YSPMD4,Qaj1TMI&Y*'ZLbe9*UHTHq01AfVMd-aIq
+,fdHQPVqeq#rYHMIIHMd1DMjr04mYRj96",98MBaZTY16iNDjXZ0'PZ,%QlZ05h-
+DYYiQqXif"XC0[JHR[prTrYZY%REC##Mp'eX0MEaUUjM8ee'qe'fPYe,[m&(,APK
+,AGJJDmM6&hB6&h'R,U03h-DKZ)e9Df'ejrlIfqr"bDERp+$Nd22MqhIAR*Zq9[r
+6m"T'pkpT'aYRE4YlD4V+bj!!50mk$&%Liq2SCAMajbF[['bepif2[r#Md6a)q#Q
+c8&&PVh@0*(U5GG9dH+fRVHK[G[TYRC9PC8fP0PjH*0kEC6Ga5CMYSeER24i[KCL
+0c+H6Fm#kfqPQXV`*AbEUpU*kEf&l5aD1HSjU*NE$Vkr"p5iXprj1QqRGGT0jc1&
+a,j[FKIaXl#kYSfqZ)hSA-EcSeGGG5kX2mD'lX+DkX+DlM99eB99e'VVQ0Y,L*[J
+QY,$MmIrlkNYCa1TDdIa@X5jYiPPEa[BM8[&kPa'r06A&KAA&KY,L[l+08EIDA2N
+CH0V[,mfjqrP[6UUb&kFYSChDprd+VIq2TqYq$mqAPmlmfEZImXK1iq&PI-d0R4p
+APICYXhhml6EZke-ljQi[0(4lRc1,S*hJHG4m$cLk[I3CqpMc2+YH0FAPeGA9hFh
+PaalAPIZbmU21Af&Id2`3Vl9mM2`VI@mDKSrCf(&d%6c0TGGcBD,Fj@dlqEU+2$f
+%lLrEYpr2dL`Zp[QrPlM[2Icr#i8[Df'1bYY'cf8YifHbGa'Rme1de[Ni99Ej2Th
+%E6GTR,Q0TV[T+rk`+fS&pAP@hYICT9GYc@F`ZiqEmY[iGhrTB@0R'[E6iBdUdk5
+"(34'P@[4L5VE#im+Jid+QiX+T[)9DBH,Q&`EL&I@d,j,1HaeEI@Q$BIbp@YTNSj
+h1I,h(CemD[UjcpPjkeRUTLcdXjCph3fFc6F6ZkIhCRbUZ9l9ADqhAm$pr8rI-m5
+Vfr$VkchD[@Hl9k[LG5aKGCl-+BpQ&QU[*feAM,LV`paiN!#UYaFkq&XDbmed,p9
+9#hfQif`KFV@3!,!bI*m+GriNI,*kPlmPpmGalA`drBIHi[Id3mA@emMPlAa,I8A
+(lG4keeBHICa[3iXlfS#`XYGaY[EaYTH3!+KZihPh%Elpe#TVVDkZjMDZ@ZB99Fp
+X6KM6maF3YTEj102hNE1CqfKHKEC@0Nq,'bG0D`YpDbmE'm@``p9D3VQcQ$#E9jD
+0Kq49jIa*h!hHdhA*m6-DqGq,FHKYj(KjRAc@+mIIHA*edcXCU@ePR968aUl4J@T
+QXr2fY608-rDkfDTXjE)&YpA09@6Z'"I#QUl'A2K6AilREHMG!((hej!!EkmLf2&
+!1(HmB!jlSmLDl$eIae#Sr1'YVkAq9MkAj,,fGr`IfIMi9AGF,5rai8lePP#apM#
+crXcZIi%l6rl3YG[iAQlHmqr#i@XieE1mZIj2Mc@+bFRe0"HakDrMdepYXa*cFI$
+cR+bYK+UZ2PV$Gl5mlQ`m[IaUcrD`dhXaTrJf'8XBf0XV$$qe9p2fkq9r#VY[i9q
+miGAY2iIPd[dkrkApUZCfIVkc80DU,!2lIPUk$pPjkr%e@@iRGdA%QGGlNcXH(hI
+Qr`QI4rI-m,fTQkiAGi(#QIif-cm["KBrJ6Z2i%,2lq&4(GXRGGiphA3[4dh'eXl
+`XTakb&rhkR@5IJJPjA`S%JamMDqalI$hpIUIm,VY)8cQrQlMf,rpG[iQeUV+kMB
+QkX-4GaJ$aYh'bPeBC1kX-jG4J$Rbj,F@'QZ)0Tc!$MX$3HDi$!0E`UUiK8ec#SQ
+"U'kK6Pe1c&h1iqlK!0,ANlLVc5f(Q@FECf9hiNElrSA(YI2Vl25q&e[9BI+pYf[
+cGTqcPbVkRJP[2jANa+[94)[pi[r8[J5EfYLpCXlMHf9M[VMd*&4"MYT*TI1Nd[E
+3BV65dM&d'6UmC3C2Aj64C@UchSAANq63fIJDYD&(ECcqQEfI0rGkA3kR3k8ArUP
+k'&lp2(ae(FC@UpHar()Ti*ZT[UESaDAl0,JH,NiY90i&*&TU#rB&TB*ZUP8rI6@
+*f@FXI-d09ZieVqL6CcQXkc)H2NXJ4&+rG06048DMADLZe0E%eXA%d1$&r9"qDFj
+R`3Ha&hh0`VkALj1YNCM9609$krVkMeGr6De3EPFjmfE[BRr2)iNVaBX[+k8A040
+G8feR3@P92kV9C[8a*MHff[L8ZcZDH08eYe6-#r"'VImCbkTm)!lR84+(clEbBRC
+@2!Pl1URl$)BMq'ai&RSDPe#8Q2%P8ZUe'NdZMKiLTN8NA(6NR6aCHBPDD,0beli
+(3b-SKrQiA0Lq&3Af9Ljc@hZ@KicFqcBe-L4IepRS+V%I"qH@l8a@i-ImZ"TiXh3
+bU@$(8mLQMiQYNDLHl@,bDARiA,qH$`8%p*!!,m-@jjffmDqNfFEA+V@BcApqe`f
+H[pM(QFlRVLNaP"`Ga8lcHDcH@pp$a&l&a&lK5)[D5mL,,b)HLZ,kMKkhHF[53pT
+5mc*qjrjTqGm'5arF5erbqCImbpjXL,Mq$Ikq(@qG$h2i-VcD,j-(53pK`Ek,L*8
+@Bp$![ZGqllQrS2$FS6p'EY#K2ZCU$Yk98*LcHaZ+AKcHGUEA6CL*LHfXp9i'3ah
+%M5r%L6HqYG9m-5EreTEE8J2[VAAf'2m'hSqpNC2AiMlehf1-1dhEi(#pVp(#XVl
+VT[r+[iA*TH65J*3A2#mV$BfcRI%8emMhQ+lMQ`l,"MrSjHfp("Ji29Bbr[rlB-I
+r@Pj[5LX#J,K@ZpXI-XUhKDhKDf48`mG5A[)m1qXpE9pEplLc%Z4C)Lrmqp[mCe-
+0fp+!H'cAfmEKHTp,9EE%f8Q*$Ql@re8e8lMPe%ejpCJddp[G0ck5(Bc(1m$YS[V
+Cl"VBHcVHA83khCi'SKe2RhfUKd&MHa)IH4)XYFh9e(cdQHcdM[C'5M0)XClrr+[
+qEaBN6T41NJ3"2KL9HarPM-PC`i1[TDLGd(Dr4fQpf-L[XIEp[fCbQR)PCQ+6-40
+0N!$6C$9H"NF6Lj'UkNQ$(F3XCe-%Y*eA`S*k5"@#J6emIV*&EmqH[BIF@HHm9UK
+Q82iDVdXl8h@6mqilDiX@4G9K"IM[GS'2rp3(JP[4BjXp&ibVXb5Zrar8kqJUT'T
+e82%lQ96aFp8he*KAqRJTTI!mA0`4ZMJH&"8cGrV-)cbk#TP9%2+qI)dZTLiUT[T
+'$YZ`XkIlUIXa0BEY*&2(lZMNm#KJdPMHlE%bS*L6&S*1&I3BQrLG+,9G(Hi&AKA
+mD,5h!#d-L#ENRc@4m6Hq"QB*[1e9r5FLYm2"k2fjETIEPX,$Dl$I9[HICq"plVI
+[AFafdd4$j%+jlUUQp"iQ8SSf6cmA'GM9'fP1IDJTHmJTIX6Q"T[JJUD$!T)+Al8
+&"8hZZLiqZYFGY0a,qKVCIMd%RBaISPbpGrh&rMc2RcPRh&CLY&3j$)%l22U[%U0
+6RC[DC1Ph1ETYcfe9ZFCX0jLm'$cm([XMqQJ`HP&!@$mGlmqPXp&iq+qe[XKpF-l
+[`28`fJSUl5ddpeHXNcI4Kj1PNbm(NAdQ4+j%l+N5Ele+kIPDcThZQq1pd-2+jk9
+RS[9dhXdRBl$9`qXarq@rcZ`a@Jk@3ad,qXclZ6ZIMZBAM6Y*Ea*beMGPqlrZTYZ
+P%qa5ff&Er"U-VdG4,e'@dH@TXa562Tbrjl21eUSpNZerVfP6+m$qhT8mLZ,3rLd
+XUQ+b+f694CIbSXY@b-A88H-U0,Np46j6b,IKE6IfHNVPFXbJEC(XZKq@SZpT*e-
+'8Z*8ep@,M*-A$hX5DQq"IDQHS0eIq(09[Pm[#V1C8c@pd20T*VLDHDZFCd2!Q[q
+ir8`f1`hBiE06hiE[lfa@cCQa-P6f+k%pLC&&kh#fGa)lq*!!mEa)NA$h0MDbG9%
+QXG[Z"+e2Nc8[YmGYlh`qfe%epURbQMQUA9d'V`+A28de8kDPdh-dmjSTlCjcB6q
+$TXrSClcmRXmRcI!c(J6hVlc'FrU@A[B9ad)H0`h9bHil#DbI,hrfI[U3!"PZer[
+fRJfdEkrj0V1@0a9cZchGjVi9MjI)TSA5ddM6c8YM,hE80r&VEq$4bXh"eFh)PiR
+4UH4PiR!p#mQBQbXVQGae[%PV6m[irQl+elhIeAN*4c*C,YF[Cf'JiI@fHeR,@*6
+@dl@fd,cSQ6[)Q-id6$mE93VMGmI8`X$bq983[ldmeLY0+T*kARlh#cPpi8e8ic!
+qAPPEd2f*lL6A!jdp`1G#q6EmQSKG6@FQURX6Tj1LKpcbi[fl1LmPDJADPG[PFkZ
+Z0K*U*l(EL4UCV%lZii&aDf9VBfYMciY`!B"lU4US9A#eAGa*Q,Kpl)lQ,MGR*d%
+AXDf664HXm(RrFhqDkTF%m*C$1CDf'JYE#QqDBZcaehRf)NYaZhLBV"k8(kDC!Y$
+Jarb5IQrEk[UrL`b[-CiePlMilq,hN!"Pj(UBI(mR*f&lPZ4PE$J8r&Ql$GE'lbp
+KirSA@CX00[l#Ii%DIi&KNrCX-CBaXCBer6XUrSqe9p(fUpEMhm+[Gr`VcFGm[hD
+[arGVpAa+r6@PASE5[cPVAj1hUmEEeq(Z2*K9fiZ[[`[0V1,96[V'icIpjbmMq,"
+hqd`libF[ja@H&(TXITVUAm+YK9P&,4,'eq!"00GCAlf`K9P2MhYLmE+A%k9PaiQ
+1id5E[)MebPkcUrTj$amj0'Q4+Q[qjkqpk,a)2BMrS`I8V-IbmR"if8Jde$Ij@2R
++HpQ)-ePS1ebm(eFaBIpc-Ehi@+ir6Y,$f)8jHG1hMHG#TlRTh8E`6[X3[3YiASf
+[6idE'mD0LEcbGVj%DC`1(pheCl%I5rAqlZ-dGk2md,P@(,KE,@AIHDZmR)@heI&
+bAp[JQEAfl2f[JXrEkI$QI1QEAUXCl%,GH,Nlc,)Qbh4j(PFIm2UpcLAMLa[[CVr
+@pZ[hhlqP9S%G"$c$2K!5[p(fr5mMJI[U`Tr4kZ[a5cfHicIpZif[,j2Qm2ekrjI
+4Xp4BGMkeRhpKMIlGCCpjrYAr(rE,F60HcAp(qe&b[PjAbJ*BI&)RXR+QJ$bFUCk
+GN!!(#`pM#aR"KBhfB@6pQ&P1"#c[q`"`Xp[i8hZVEA`XYYq*[pVbrQjQrTHXDd[
+R-,0l6LeIlG9B3S@1Yq(RVMpZRTIaqCUp*iH[cN,&90R'ae,D4-p5@e(0jkhRD62
+@q3mUIKlRXHGQiIXihRr,cqM"G,KAH1&b9mh(qj[r$ke5%QFhr2Z,AjZ2rabirjU
+(!pcVShV6'2ZDR@aTLZUV(d+lcppY+hIHK9ElI80P[XrCHYrqX-9kf2XZ'FY($K)
++i@2XV,[+[a+Ra0IVY6iCkZiQ*VUUe$hA6'2iYe)pcaD(Q4r)j2cFIX0r8ri+3IE
+j[#lLdqENI@jXIhD'kM6PRDfNEVCLcUkVU@@qmUVerKq*iRKr$iQ[r&jH*kQqp$d
+0pjr%e2KeHSm10LYTY,2`pG'PpT@ffZUSP,A8Ye5e9(ZDDJifReN6!b'4kkHejjX
+cH@lAMh'rfhdQU@cRpXha[FM4HYfR(Afe&MfcYifpYBeN@3llNkq`rLH2U2LUk6q
+#AMiri++6@r,)f-'+fR+qr'kRSFQVMB&Paif1im604,'hLHIF40cG8IQAG(XZ,4k
+hLdG*ajh6fZBRG$ZXjZ,IZFVQB8rZTrG@hG!6R0eTYhDGe,pc#bHlL3S8amd,)6P
+VDfRhE1RlKE%hDparAYlf2YEkQ1hlEm(Jb0*$l(CbDH(,q0&chJaCcii*bE[[&bF
+&$-AfQk8&$fP$ID[UAZXLd2H4D$l8@ETEfLKbq`PD1,LGcFEhHh'cNdX@*c)rF@H
+BcD@XIQ[kp[J6@`[SZIiISbqbVEq,pQP[ZN`+JAiBY$HqEKq`hrJja[!EQ[QlHiX
+1(N0E9@rG4XCD9F+BpL&3qCEH('ar4m1cVV$(kkdm1*-FQ`rlMI&bSR8j-E#j83!
+m,P3m4)!1HaXQHaYV#!2'fd,UlHCRCrJA1CKDcdrEikXLXiZGFP4rEYlhE4mM,e8
+MZp90BlEbYG'eeIihKf@ZZDlKHCFmq$L3!&PcS,MR4E,!rGq6$GMlmATG#+FQ'Id
+plim'@c@faqANH2(amj+eX@Bder968jimRAcX5RJQXMpq9CkR2-`%JZK2I$ld2hc
+GbMq[JlEFBl"bFAbj[Pj@,Uk@rcdA6dYr-4CqY[F[&bIRPml'qI)lU,Kl'eZ1")e
+-lUCl%lL6U*UAmZpTjUJqjQrJ`)[*S1I"l9pmqVXp60ZUTG[IjM9DrQIZUm$N3mM
+0CbFjI6prT6ApmPf%[(Ri8VYU'(f1mYlIfC'Ub19k(`4HK-8LqpMl8H@ST0,",(F
+8-10p6cd[Yj@PQX4EEf63UUM[E2`jadZi%IdVqQRXV`*'PRHrm6[r)d[hp,pq(LU
+f483lrRiA2JZ2r&l5qPVEc@CI4kIXk(9j#Km,)pM85D52,d0lTrP[GAm"@pHkcSa
+D'E[U5,1H$$QpDECABlQ4TG,$k[H5U',4PDHrqcRfqP20p606mUHb29b+2#j-6iS
+@keGj-3Y[@AHAK9RPh@BKDZ6dj-eM!$Nc`"pA)KK4rHMr[%rlLI&bBRr8ab,$hih
+3cr(qANaHVj&RiQJG@PVj@I4HahPY)lqHl(F&LHHmHqqc13p&8bU+$'qEErMhRVq
+CqqNNEU(2GI9i2lSrAjl-b+$pP&rklrdD2D3mYSVl@I*JDHHVHhb[-RiHbch,d-2
+ap&J8%26kfqd#SPF9Yl)jHfb9RVqjIYGVD6f)h-R4`mV@Q-228YpSS*[l8%jm-aI
+H-60*QAZ`KjqJNiZTKiH@T*',ehIj2`p(P0IEkVd)Yb85`[HdF2(9dLLX0(Ak6bH
+rm65cX2$m'9RiC8VpbcrmC9QcZ[kcI,k-edrHfdIVp&R-p)R*IZmr-GcRm[Pp"Q-
+YQ-a-CR-5rG6&,h8[8jQBmE3lURd@hUD6Eq2VGZ@`+(9hq`QY6M-$N3681HKc81D
+Jkq[jH8MkDQ,IqQf&rPk$4jI4Dl,k+Uc'HqA9lLKV0a3HAYp0`0PTYeYpCYpP@EI
+ar,fqXhAPkHfeHKNk(*`iIAqEd#"-$Irkc#dSXpR[QcR'qhLpYmNrlfIQ[Cm[Qk1
+Dr9T*VcY40HCZZCT*VClIQ,%hcF,9mkPQVLIpl6cA5bGTEf[J3S9(PVRdkflMHIH
+6YMH3!+bZiAYA8,G5pc#h8hF3Ye3fd,F90Y#f9GD3!,CE5cKHCjr!Zqrm5&@f1hZ
+SQ+V,Z*MYAGaTBmZmaR,b00j1mX0"Ebjk8*H05J*6@f@L6q1Y-r'aZHY-aUU$8Gh
+99&64`XKp1jfY2CfG"hR@IQl[*r@-#hqFQ6ZGRVE(3bG205q9NmMVrUmH4apA$a9
+r"8i%8!pEbiH`jNpjdpXX'Dh'$dCVp-rcH`r6$VVrSlDL`)Zb[l1Lq`iNI2P,kHf
+H"(qcPlq$BIiIlmhi3YkH$2EF!m'HfA-Kl$PT-TX#,9Am')Q12)jA)krVT2I3C1E
+Nbp(RkI85C(qQrl,X&NqqUXCHTd[Qp,crdd[kDAp0"k(Q`mPCp[Le[rrAQX9fR-m
+'9lQZkA,LrJTHAdQ"B[PDM-e&4SpG89fMVZrUG,5`qZ[6`XeIeZYkVUmUZ&hQEER
+i0,"VI2[ZrLjkiNa)[e*Z4ieM)M4F6)L3!"[lQ5$HhY4'hQfqR4FZRLe1j0pUEYj
+84H+@*K5D[SaCHaNq*m-@BhXRa!&dfcXG&9@-h8h%h5h-h3A1LR2p06qqYNfGApG
+X(#j,j-%eQ106e0,U0ITp*4H6i(IdhNqR49FI%e0c*Llk6&hXV`F'#A`BXhJqp*`
+fPh%AjDhSH4&`,(RaSYP)4"[T-(J6%U#IQ*-HIQ*(I3mR1@qGNbrL8(GjqZTk,55
+[fbGY4HVCeRCYEVANTfe$JFINBkTfG,Blc@lRFb0&hp2$bZ9YkQ9hd2%d&p(adhI
+S%JPjJ"*I!JPjE!1-,!pk@`1I-B%AmdjJ4IBLdh0Lk1rl',S$M+b[Bhd[$l(25TL
+*36f-fHmmFidpcX*%MMhmHRpAIf'3!&RDC5DqHA[TkI[TUI30#p'IZVHiTiP"`E@
+Ma4qAABlbdbHNSmC0eYR,d9(eG*8fFa5kV,8QUbp*UG"5DR-8QSc1Re'CT+MZU5S
+QD5RKBM@kbaeZRXk+JKBQYcPTT*qGa(#XdM5r"YkU*'RDc4hFeS8d)'qh[q"NIUI
+Hi[IGiE9R(qIh-Rf9VYXCRlL,M*bkKiHK3*GpjbTH0XZ6-4YPb*Z0ZZ4-4Yeaj`"
+-Y'hAcF$DFA0FA,aX2IG2d,1Dlc-eFpNppl0lQGI&QSZ4JaPRVi[9fIL3!2$fFE$
+b1RD4X2bS8aCRF2YBf(fpY#R,2-),YEATfdEJ@X+Kid,*fmEGfLr-M'[!6F4YaD(
+8C4pAFaYKCa++ierTjHep#fMeeY(eeRl[DGKS2LdRIChjFhcI9bf(kqLqlMT8EED
+#6"Mlq0"1Fc5`82-lq#Q`HjJUX(339f$Ri0TJpiG9A!+Nq"4B-(!SHE"`-rcB-R@
+6R1Lj1k!5jjmA*m52C5HlMf8M5`A&aa)r)p+2CA(#jd')!6'qlPN8"MYmH![PjEQ
+`@Z@jX@8!PV4B)#Fb#eTZC"l02bi1"AFZ,l1a[i1"k&r"ZppI3EQbP4r-N3Br!JP
+[E[I8R2Ziqr`q4rd`frXlIY9EUlM3Iccf(k[$I(Km2cr5Q[hCDDfRQjcP`BR'i%8
+hJYKIaGcH`pp*Kq[FB1FdXAF6IRmfAU)HkUDh"be0&h&G5mcZD5$bpl3FbCdm&CF
+6I,QX6-B%pLCLrRXG-Ame,5pr06%YI68j,AXe3bdUHSCD628dY*QUNq,&9,b*UZP
+lAQDI96eG0l[QDc8cARd2Pi1Yede[DR@B025cfpmc3mh8DHDh["bI1Sir"N`EbpK
+lbrKR!K5B'6Lil!Pr$JmH22E,fqINXPNZfNCEYQ[-jhqQFh1qr0PrJf2i-rqDFr6
+0lcr@Areb[ZjhNjb6LYJ#qamrfI9NCDGF+[QbQlXI4k2hpT[-9plSCcNjhhFVrV,
+lcr@Er61IQcri-rq$,l6HIRpAlf8@A#ElhqZEYjR1AAam#GmEZmTFp%"!,mA+1"l
+j"Iam$ZiYCc*lm(Gq1i+)%eR!l[EH2c*U[dlkQ6jLeCl-,[E2RbkG1ilVU6GMKX2
+kr3SY&2A[MqAcD,ZBGEVGjIDlZi1Xf&V,8f0f8M+5-TjNM,cQMRXCHk1(M*@NKib
+6hi#Gh$aNK!QPKibhYj-c$a%R-`qaN6-pRC'CRY$DlbqRFa$T0eZHAh1CRYa@E[Q
+k,ZSGh[1KUZpl5MLr"lA2lUJQYjZDcQD656@YhHk`1klZDdqmYEh[jl$bZrKiH6T
+BH(5V)RBH-YT%2'F%"0j*25T+RJ%KicFAX2'E+rRX2jJ#E$!RFY$f(!mI"lV,6fl
+fq`jfIbd1pd1bprmQ5aHUNGRPP6hk8YmQEd90pM4jl'IclI,CETePCipCV0Cq,m0
+RTmZX`ICD6qFhJcAMmZH!0`'f#"SEJ5!IP3r'Kq,PF$S`kN"2'Lq,RX$#`2rN2cT
+lmf9jRam`#2-jRaYJ6h'$0EVQ`V2`-`iVIhQlAQc@kBDr92IU!6c1CdClmfHjNpq
+Ec2RUIK`%PCA!3*d8[I*JI*J$Q!DHI+HF'eR-Q[cfG$Q9T9j$YHT0bTlhFVcZM2B
+MCE+AV+fBeG91DDLUCqFhQEcdV1BZ(9FkDpE!ll&`mVQmp[Xj39@QTTc9e@9mHYb
+Qbf8RiqGm%2fCAhFY-YPjcIp-aYmci2GIBdqlk5"IMr0[XM8I'i'!,P0lQ-P)l1%
+j2[qh@2HIHrqTfk(ZYkhqR@C@Fb1EeQKhp0QP%@@dIpj[Q6@iqIaqAmI,q0!Mb#'
+S15@3!#1JKk"c5iHKU'qhjNMkhG*UklYIkGTVDkRU0"6df`qR`Dlr(,d90X2Zb-R
+hD(2U6ApZdmcd0MpqSf0GZH[i2SIJSYTbTRSc26iNbEhmlN29l'H8XmhLrkr@RXj
+I6hFBEq9l26plh&R[ZpE4*cRmmhcIciq9KTEcrHLjAQUQ2![jk9Hch6Nj,'3XPMH
+kQTD6Q)A$crG8dlPXc8Gh-CQMQCI-3m2`*rcj02PF[&Pkc1EQpTmTPiXhiq-h0p8
+GYPiY"jH-fGp6pYm,b#UM'G%(I,bD*Xa&PUc1Eb4XFGQ09fe0,jQScP,-60,SD6,
+`V(r1DPYlDiI'iI'S%`f1pRhS1ajHfTEcRFc$C$Q@HAe5P,Mp(mdhbCRTHcJG+Hm
+A6X#[-+F#ZM`l2,aA#[$SV`(`8p,ZqM`j(CrFFY2i@Er&XYCUr(V+cbXYdFYdr,l
+(l'MR+6[C'1aLY(I6krq@EaYEie998p248qMdHMlD4,Be$(e1[rqC[HHIY0MA9Zc
+fIQERFlMJ@GRfABSCaRq(mTV&bFA1j[4k'JTI!U2p)-4+q[Gj$()EahArrXhdCV4
+I2R-E*bNeeHGpR4ELTT0VqZ4Vrari5b(rVGAmQBP51carAIbR1kqTer`CbPr(SG2
+R+c*NqHMYmR@Ch69&Epb4,GNZ8c'GIr6k21LED2p[X1M%LDram0L2AXmCNP)c&pE
+rEXj8,8Dr8DMa)H'[E2)IiY#AdrrfErmhXpMVVHBhFD(ak66l$+lM'ff,Nj,Ir8m
+&bi$mIFCfJQXR5Cf4fdGb*rjCZNmcj+I6e@XTp26dQMS1jQd#Gc1CR,GRf9R,IJ4
+*fA@I(QURrEAEMZk5HmHJhRFehCdeRfAP)CPZYkIFClFd0GPYFV@PG@Dl@k63qVq
+#cAP6cHLqM3fFp,b9l"T8A+J(H`mpHj,jCV1bSF[)kR+qANlArMMp1Bih6R1,PE$
+EdehdkUkkGGFp2d,ITlkfQF9E62@@R6i%EkXc1F5CS[FlZQpchH(a1(-ehm1lV[i
+62QqhdrheIR60P`TQkXTR!XHRlYASIGUjMh2*p,pGATChmXcqIeI+Y(8!mQ(MT%E
+jH9'2jaa-L(f-Q(MEh*IeG`%r-"E1eD!Y$p%rGC(3bS[@FR[Tfpd2'Qk2FE#jdNl
+TrpTh`2Cb@'bEZ#(iJMIrJYQJM[2Sq`F@HIh%LaKpGYX4UC2FamhBp9MFjKXSHZ,
+(Hre1Km[[EE"jh6Q1Edjc"bXIbkEPp1U`1RAAr6p#pkHqP6-'6i5fPrl`TMN`Xra
+jfKir)ih*id+UiXl9F@&XE[ThNEbS@qZBA#Z)9cEp2N4Xlb)dYar*p2r501c9KN2
+`qVq'hD!HqqM[H*T+1KVV@ZX-[8@HcfZ@eeVVSfLh29Bl1AXm9Yr9MIhX2rI*p2P
+C10a-T'h9&H5mEcTL0j@@MH0Q)hfXc'cQr!1`l@CQ,2Tqc9p2JeplBeI1rqFEqeV
+`U[fH&9m$fUrp8c[[DkIm+ZXiGIUrFUr"QILi2Gr&`+[Prq[hllJqcGm$fr9fG`d
+"d(dD+jLpEajZGi&CaF[#h@hZqMQ)@kV100`ZCb[YiE,ZkM(jU-i&blhIRHlmrhG
+qhqbZPM9cAHrccI(p2&hGYZVRlp&1d0V,dFaFC@MaehNk2(F@[MA1qj'[MB@dN9%
+AXGT+cm'GmD$3dpp0`DDR[jH$9rCbh1rM(ZIHJeB(I,ICD#ImU$1IUJaPM)KBlN`
+TMM`U(LMh#mqiRE+eRHCjNUfjIUF5,c1K(kA[p',Iqp"kepDhrlZUhriE[kA`IRc
+HDdAck(Mcf%I,Z$THr&q3!!2$BM$BM$BIUXApVR@YKU,@`fPU[4&`IJYBeYm0T'k
+0T'aR!q#cMBcNaZVj0A4i'pj2cHRm@p!ViV1Gk%aD3[LY)@-XV5%6jkGP)QHM'kG
+R'#lSS'kR)RCEMdFYaBQ2[)h@h'qpk#khriEae!I0Kp)%6lV[H)LKr$d)I`+!r+G
+`'r%"l2LY!HKqHI[H`aFpKHp(i10jZHRYP5B'IKjlF5ThUj@3!-Re@0pph"$l`4C
+rJic34hhcplcG*h[BDk$q1Zk'cfeh8G#ZMr&ABE%ERUXIa-0ql(hhUBrP`5f$&PZ
+EpQHPZGpL(L[HQX9)QHhRB-2ldDH`1$cr%Lqrc2Hm5,JF%$q5ICCJ5*V$f8L&#Jk
+0PlmcdB1MFqp1`5J&kR2RX9cSH+`B[@Fb0YZrqjN2ZGRpfclRMiQkb2eqd,m%LH[
+qIe'U,2hJ[ZJ9(C,KI2kReMj(8h0k8$!VJ93mf2rR+jQfr4Cpeb%HGU(R322V!C-
+fjd)Gpld1ppr*@RcqTQ$QCTZGdS'"A!UKjdIreHmce2ml2[15cbAeqANIMpk,`X(
+[TlCD(!QiHKf%R56h9fdM)icV[li-Re24HMj6(-jkf$kNeq2"r$Ck$P-rQNKElQ4
+VUZZVpRq6CrPVUrA3BMFr9mE"PHTkcdHUER0qLmpq6"r2Cq4)kl3I&RmkAJ2`i[Q
+BD(`T1fp'qJfR,Leh-LR"M6B-&$cBY$cSXaciZDJZC24J`1PFp#VJkPPd2+KqpMl
+,S9m(a@A[eI834FqpB3B&cd)d'")J[j)@`@8U#a!1pJhYp"jpr"Xm##U`)p$bpYM
+lh$3rYi[QErr15hm6Gjmrf19UXMk1i`,'('ffYe2,lQ2riXHUar[fPcEfZer*G@'
+pZqfMEZmlD0ZZ,djLmKHaP)hPhR6TVQ&l%a'dh&kGGE`[eCL0Nq,dppD3!,f*Q0K
+lcTfRL3[BK6'hi[6Y[$KIUK8fVi[6ZDN%UkI[1RHDZ&ZVcld,GFA`J%p2GFEDlIM
+R1RJF@&dVbGk9h%q'jp1fYVLmK6Y(rYEHVq18he`d(mp$r#Ha2+kME&Z)!15E''5
+rMkIjD2,E(h+Z@rKUUAfUZYXY9[H$UVMJDV!hqU`Ypa2$M5eEDe8DBm'03r('TXY
+FDZ09G((h2K4U[l%l9rBK8q2Z0AmY[@I,EH2B6P-%q2VV2`k[UElh+[&F1VQ2iDU
+JpZVUH&9l1ae9PrY9r&XE@aZ[5Xprq1pG3Ac([S5r9rcjGY*f0KFfFEHfm5ZZBP,
+H4*[M4-GakZ*dYpbI$Ja4f(35hJ`(Z0SFYIDZ#Qk12[r#JLG[241hQU,(hfVq@pV
+2P2lYQ+B*qXVZ9iFEiYpakZ0C@NEHfd6DA%5UZSP"aBf+j'ZMj#(Vq0[rcAc3AS[
+jcmPr'KELrk1i4IU%GTIY#2HrcqaaY9NFIZ16BdIrhDr$UH9h-I&f29BckcZ#AkJ
+RmQ!d%crmqp[0*$PUlP9eKr1Sj'cf[bklPDk$XGceABrm1i-Ih"PREmahQFGjR(H
+CajCR2ckc"@JrQU$#d2VcZ1XqTCaX6D41a!1eSmVDj,j2krVq[9IjIq[9mQrhALI
+(ZrKm6Tl[T)%G"(LG2HG(8p2HiAqZCUIhCQZrEQGRqc-qIq[-f2VjQqpE-r*[CRX
+GehFh@f@lrKApKqI@medc@9(LH*9rapfVkA%e@&a+2%(iE@Z5q9fcZQIIkrR-ck,
+#Rq3qf'ILAI$SGVq6eZ0%aA)RHdSH4#l5Q3)k#14#lHAj%,[)PVEa1"F4YeFa$f8
+HAH40AaU26FLMcR+SqVNdm@Mb2SmVIkhRXf6q&hY`qPKNYl$YRFCr9mMhNcjh4I,
+SEU(0bS-Hf01AP'0#(REr*BE*Ifr,9d(l,ceq*UXYa1lSZ*-klh*RBm2Zr0rK-qM
+qqCiAY60e`Zl`1&-raXCRjH$#ar!RFI`)@Ihm+L0XZGehMhGG#p(6FE@c[#bR(V)
+ArIUGC*q##API#J5$(b0Vl(Ym2IkESI5kV$c@B-'rRAI+fe2JG+#0kHeiG9CaUDd
+M80V'R,D0fXDL1lG6@9ciXc'Trl4U+bYl$&@mD@YV#@YE#BXl#Ki9[aVQmZrJJm@
+K`)qSj0jGhGj[rrlhmAGC,lF21r0QlRr,)ISrmfeT@A0T@@ZMd8l5HCS5Xl+f`#H
+cECZMbPYQqrRDDeRDEGh86'h@TRI-Y*hc0aH8I9hQMSpc`3&hI"iZJRH"Cc[!mkM
+i("ifA`Z,-a0eXqA&SF#$2hmF!jQ6`rQKIrBA$LF1*kGKkGKB!*YBhlBhTJKa`Br
+V+rGPllECDrMcQ""pU,@hm2c2&cR)dN+qeI)lU&HeR(lq&EkhMD5Mi1YihG8IXl$
+Lph4l[ChHPLHCY,UGa9eh0KSV5`d@jbYT4pMPE6[jZSSml5qCCjDfYmYE@RCqRpl
+flIeI*r3e@RII,h[YD5MUUkhVV$4e&VXpV4DkhedE@Qc,lrY@A"e2$rdr,KF#[q2
+Jer6XUq9`UqfpU[i(YeqkrKAqA`krarFUkchDr6F5[Rl5[bPTAj1fVm2Eq6#efbZ
+GM1qEUlbYK@@KieC1h@6j2p*%IY*b9&lHK3**MpEaIl'X6UrrjZZl1I0Ql5HadMU
+5)-6*LpL!FU(PC@5iR$fXl5eeVViReI*LBUaXE1,p@*p%[G@Y[@a-IXl28kUVe-E
+%qKD9%DAfPV5qGDd[E4TE65eTLk$*eH-S-RVmTSXV9Cld,2BqY[2Z@Ih2ph6,d)H
+&d)1Ald&rd$V3Kr*lm2im0M1[l2PbVkRJP[2jANa+[94)[pi[r8[J5EfYLpCXlMH
+f9M[VMd*&4"MYT*TI1Nd[E3BV65dKk-Pej2Nd0R8p&Q2Z2QcA-l$'Gaf%Aq22lkH
+pR3i-h$mIBAfNRXlEAThXUpfd*SLI!c40I0#PDV)jEFFDNj&K3IZk[dCACrErjpb
+208&G*em6jGlFf0MFHrKG$SaB-MRk@4pq)dkp4"LGT*''SqI(#h8pY"KZaddarYP
+G0-EI26p$V0*'DGAKI#bqIrh)dN1BVT&G(kfSpUS!I&9dV5GlK[m(E)c*8p*Q61r
+0R,q,rljXh2EHXjQAQ[,fq"dFa0HA@B-h0Helhfrj1fKQLVq*hd6[mk*p(r&HB,)
+6AcGT+rG06048DMADLZe0E%eXA%d1$&r9"qDFjR`3Ha&hh0`VkALj1YNCM9609$k
+rVkM$rDLrSjXIHmlSaI2`B0G)NbIhC+cT[rE*CCIl21Lqa"[ZE&XHG$!1hjm1eqR
+MlrN5p,BlRFm(c*&$&a0"*dm'1Qj@Q2ka[I!JQmMr[ld`c4[F$XBXr3AXa$cQ`Nj
+M5ph64H[kqRhpR6rm*Cb)Xmq(Bmf$dF'$cqE&h[0Km(R3rCpl*I`MaVfPLDM[p,T
+)H)VC&,&ae$*T)X[15Y2&QjLpdh3QVf$p-jcX,R4I#T53!(R0KHjFrAMfELTNb-#
+`Xp6rbdCPcr!b0lcS[Sm[[Tl@D'qQiH8f&[Z2CY[pT15rA(L5UA9DM5DA4`m48b+
+5,MTb6TiX[-5Y-G-Gli(3b-SR&cF,QaI#S$TEcQY[FXHe%k8T%LrVl1Prq*Gl3X9
+i1jZDleYGkp4q1SpEAEkZYpcp@LjI)S+@4U0,THrKiMCb+D,MUD65aCHKP8N@ER,
+h6p#H[S2pCcRiA2Lq&8hda&cRQAZB2f`pN!#LDkrBb*'CrqYk($UfmHrj8D0&L`i
+[HpKh[BGlf'5mHRhhlkrTDVTDVTDViG9iPGr,&j+ccRrqLhkbrk1(@i%&2I`8Ul-
+$VUKq2Jj,p8A-bIF0A1,iY+J@J#'6mqCXmlrdhikpap'DPC(CB%@LPGp2Bh3fe*Z
+pKX0aV,E`T15mf,p,MAXIl0,IG++![`aD'pX2RbpRQ[qdEIAcAdG[X0cY+lADl`k
+M4e'Zee9AHCZH[a0lqkC`)lVX1q',AB%I05Yr[kcq6V16id+TmZih-+*KS8DGdhI
+h(eYVNq&DGRYF2ZT[Ljk*YkQ6$a`"bIN2RKYkkMb'0dY0i@Ne2k+2kfYYYR%SU#i
+mH*VTZjeNDUQlV9r"'VZdQ,V9aUfJZGEKA0,%TDffe&(RYlD8H*hYUIlMN!$fVDc
+dRrlVIJr2PjHDqL&JDV)klFAYM$RSqHe0ph-I`V(UZ`UGMaY9qc1e-LXc%A%pYFA
+',N41T*LB8V93BlNd%V9G+,,qk!m%YkdLZqI2A[BEqRkDN!!j*Y3Gkq&[h,$pZ3T
+DUde1USmGZEDRLD+TZ+6#ZG2'UTHkmA0aV$kN+ZPVV6a+V[)P63A&0%Qr-YY*%l'
+ahYT94)Q3!2AYE1Sq0dYG"liUZZqA"NAe0"LGl`C'SKbpEHd-@Jqe&TCbreF@Uq#
+@`16098YJDH,6Gj&TD#qTSX[jNV54F4Blf494BIArSNfFAj'@f[k2ID!RZfNj+iM
+qTep"9506USH*h-URLjkT[U6#[p2"65q"iZEJMG(!m+#TQlr@B9r54D#TP9%2+qI
+)dZTLiUT[T'$YZ`XkA#I&qcrZ2qlVk@UNkQ*$a1mP9%A29Yp5L*!!8dhJD[i)+VY
+*M!eF&63AqY`VqPLd&E+e%2+lf44kQ,,90r)jZfb9R6p4SiF[bbeGGDklU2AU,VA
+A0G*,mH*Ip'@rX2jTDbNemm[I6drI68qJD&k-rG@pa6a+$JfY(LMk-qahPTNp*4i
+bEVE1ASU2Uk5TXjLPe@@T09Pk68k#Ne1BT04QG2U-c59(G8P4-dP2#a'YePMVG2C
+d9"#a0ER,656mlL1&CT'Pq$EPJdl@D1lQY#QK!hfpr4Id9L@5cRpAdYMF'*0pVlG
+MBBraD@fTZP%Qr&S#fA-90Y6i9VVSQ,ahQ@H-U0,Np46j6b,25rIUl24reG*6pkp
+UQ9i(p[5Tj&FA#2&TC90m-@A-GX@AmU,,9XM&e&'k5lIKE6IfG(rCN[Z2k[YA0`i
+XZ3h(ka*L8k!Tc,9-UR`T1ZLiE(HCD5rQF#AmqXcrTU'U$jQ6mer9leHr-rT)hrN
+r2e[hZ,-CR[F0Qlq(jr-Jf2,JVHC&fI-KlR"KlMRC,qPVYHXY[bfHekffM5pa'cY
+e%cPhK@X,cl5&BfF+ai((e-lFEVNH(#`[,j@&@5+QDPp$+T*V[02081-`2!Q['Me
+f$&h20q2RG2R6AXmkDi(+dN,THAbUUGq,@5+@Hl(4A[U9Yr[r$qK5&c2IBI0h%A[
+lhh21Jr05mcT4I1LqIXH05@GjTU'0pqaZ0VMVH03@d5PYZM%UE6T4+lSf0e'a0e%
+aec'aebi$4*LhL6PY%SV5*5ibaZ0214UfMklcr$ih4LLG&mk2Vj(c4V1cUrlpEeA
+9jA+V6ifh2`D@$@qIIGr&cea*L4IU6FMaV'4'2IK%Ja0P*e-'1hYl84YjY[TdA,T
+iY6ZEl93jZhP4)[D5mL*K5D[SaCHaNq*m-@BhXRa!&dfcXG&9@-h8h%h5h-h3A1L
+R2p06qqYNlq`pTU,6f'lHkdP(Feh&VV$ekLlfHepEAFAA4VFm@FlPl1`d($kfcfX
+jDa+DfRDffKHG%bGj%aR'LBIMDU&FE[MkQ&JHAbUL&rHRQX9TT9*25mrHi@F[[#Q
+UR'B(bmZ$cm'(l%pa*VJFkHi(1KI*Yq683ZTV1696f*dmR43qjjFAlGRR1@h32fR
+8l@92Bf5!EJ02GMFILm[%YIpbXVj*82+AXmHir1hTGjaeR1I+M6XHdrRfXrJ6@V`
+*V6hmm!HL[SB"cGl&Qj-A(1I8JMd!`iRXjIj(lQrT[Tri8Y4QFk8Dirq9K`mG`pT
+imh0h'ShNE4IVTVE5qIBCAfpGDDVdBQ1Y2)RCHeMG+fLG#PYSR[a*ZlqIKq0%Qq3
+CiD"'#2K!50-FH`l+kqE4A&VCdAA0UXLccpYb1[p$am$96e"[Eh5aqaZT%5`LiSq
+%8Q,MC25qhM2Yih8llq@-j8@@pfPFe9!(-mbbNq*(kcaVf(Ql1Kkp*8`NVC6@fKe
+9GIDL2R[APD@2PEU6%MiQ6"p@,,mQPP'"QRrPM*'&+L#+K"!p"+L3!%Y`T'a-%'5
+XpGp6Vk@SRHj56(khRb)rAqKVD%KM0kUHdAlb'r5MpMGh8M9HRB40X3reNJRR!4&
+&Pm0,b[Yif,,rVmE$aX+8d80%c!VDiLLjDil4LDj9R9I969h5DYU4TePpJDl2Dk#
+JhQ1p'plrpHfb[Ym+94l@2MKZLpC*-9X%[)1'"4LT$'L(Ke*4j#,!V!T0C52NeFI
+V'NP$cNM-j0[maP[jj[4EbQfRf0(iHHaQ`aRmiAEjD&PZRDePV@@[Mqc@@ZXpR@H
+cq+6q(Ir6QX65dhCBh%I2LqdQ[a5-c%F1rjC[m8RC"&Uf,+bemU&PZLMlbqaV$if
+q(1E5NhRHrSr`Vfe&-2mq0jqMr`X1`kVUp(4!CJrbqVVpE8q,X0I9DqTV-P53!26
+dImXGV2'eZ[mAAH2V2$UB+R*8P68C,B92hpKr,VUVa[&f&9i@XUGAj'`UINkVrRU
+ZU`ZS!!!!J*L*LBQUUTUCQBKhLDUUQ*LCKiChL)GQQ)KiKhLCQ(HTQAKhH*LBGjQ
+UL(GiL(KQQCPiKhLTL&DTQiL(H*QTH+LkLAH*UlUCZEZ*GhQVbVUUUSL)LEbmQUQ
++H)L+UlUTUAGRGhGiQ)Q(CRGRKiL)QCR0H+ZF[Gh,ZETjQ(QDQSUU)!!"*%CSD)L
+3!*Q(L*!!QJS+QJS!S+#J!!!!UT!!!+S!!!UQ3#-e99CfH(GhH)H)L*GhQ*Q*LSK
+kU*K`KjU)Q!U+P`QUN!!!S!USL+F*U*UCLBUDN!!+#JQUQ3LBTJU!LD#B#CTkUIM
+ep"U+EFH4pE9GY2Ga2GYj&KZ2*X0afeIY[)MpY88Y6he0iAJe,N9dAGGe2GaSG(h
+'KRqlRY&SjrU[bG9eAq1Kmc,G9eX2`N#A00ihc)RpF,YFer$YC-Ir(4bU64E$8If
+kRbpIiq`ep2VSZYfS#C&lpQJ[IXcGlBhZcrM9p[6eIEkUZcH[X*V[l5De'LUB9*T
+p21@rfUbPZD@Ykf,0p[p'Hq64@dVjF52iFrLG+-!Z0'VU#fceTPpCj@bVlA`YTiN
+raqP#[HP-mVUH0&eH`VHRak6K92"f9YYl5cfA'T*2jTq6FkABT%I5'MK4p0IDcKH
+ECfZiYYPEe9[5m+QiY9cFM%k8I`kE&MGp#Pp['RY*KCb,3H"hpA6q[TIbA1Zf5JA
+fdpr$4HliR2r0cHPlNEhCrh1P'pf&,f8E23X+Nd8E+H9HHRalIMmIMA[#[EIMm+p
+r("VZP"VXD$A`9H@b12@k5pVG*b0A5qRUkRlZVUG[-dHiT0*2Iil1pi2Nh0$A-Jl
+Q[Nl@9(RH28fYRAF#UiY,Gd&h2bCk$4aG(Y+5ZXjGPJar$THE'lkCPp[86d+9R+H
+Je2IdfUpHFr*Fe&IP2q2TjMYZpb@Lk-ERG$4e(Qcq,4akkEjZRMEM6iZ0'pfPpc'
+ME[QiU#Ih-"8#p+0qlhHRl[aFl59&KR-@YU,'DjfVSV@Hk1ka2EZGAXdcme%rPfX
+Z2rjdC"U,U2[DRl@[fQ`V+IAaGGY3%b,hlG!!Glk1eV+HXe@dem(If@Sp$+8Nc+h
+dDPTIFkIYp+0HmEMm,KFLdj&T*UiqCL9Q*FeIf&(r06hbk,MmljIEMmbI#8"FD0L
+8f&V2cGC091"BITYI8i2$ipYHfejq+I[IlS9lEFImFAAl#Xf'Yl+,9k#CiqfQH2@
+c0jYTQmVB9jUjq6T-j8I4VCGA*lRae$lXY$mZJ`m6q1eMD'pf(Pc@SK8Xh5`UR(V
+U1Um+Ef'0X-EBG2Mh[M9@Vm+VcP9#TSAaD[Ek2l['mQje'd4hfReHVd(4SZ2r+hj
+mELp9PlERqK@dNZ&86eG+al#6MfQ$RBhV4[a6r2k6!9S9E5DD,94XV55GP83S@(q
+DajYcife8Fqd8(X6jHI(FPH0'iA"Y26X20SklE8PGie99H09e@VUkUMVUkHmfZRX
+69a+l,BZkm[Qq[5cH&8aZXUm'VLeHZbf0VGEQpE9j[A!(9jIAdXeVk61DVHa*RaC
+-1$+CLjbhB&F(KG2rcpRZYIdYIdN#1!M'V+QBk96R+QCkFpXXhjh"mQ6Yird*Rra
+TTr0I,fZbj()jfeqe`0*58ZXUGp56eT0@'fUXY`FhDlE@mE,F'YVllMkZ[[Eh9ef
+*HH*0aSXETiPlc)@*HiQ*arH!k0X2VGM'f'YQBa-1Ua12YJ%VDV%[!)[+d-YABBQ
+(4fH5bQ5qCk@5bq5Rr&Nk[l2c2jp$1jY,EKi(Mm$5D5Nhe*09ffeeRYYEDeYI`YA
+AFI9eh'm5Ef%ETmIQ3Z2LF,hYK'V2VGM@DfCf!S1&YUVK9Y9aYY9FDYVZ0Ul#lSl
+2RHPNSALh0*j#VHCP@YGe"Ke94ePRaZ0DhZiP8dDCTF,@4i8rKq*0iIKk+23rbS-
+aKkZ20U4qBTC99'kcFAYT`Z$EAY9Kq[ZC9c8q5N2QiRmqei0[*Y2`D26crGjbMS1
+rKHAU)@dUT[DH)0hiTZ,iPlHp,MhhbaGV&Ll$Dp1p[H2*f&4PH&*mU0fHi`rVk5S
+RqkPe-EGa[jcr[G+0r50JbX@je2p5SmqT%,XQcqTECqNdIFkM4DM8f1[VpK9dp9&
+UGU!Q4Hr9S!$[I#fYA6eHUVpIpM[r+e(pP*heC[Sh@8[2kI1k8EqkIjh6`rj6pc3
+EE+qa0GVp44rh[PDR@D5DeP(5CICC[@efEUkr,9eMPUk`cGGjZJQihidC-0qP'YH
+K4H6FphYmVrEl@Cc!FhdVre5peU0,hqPlR`YPBE,F9dZ2h1&q[fC2j[Rq[p,$MdZ
+Mim,Jk$D8H`dHUdm1Pcp06DreqYr**LEMV2VAhdFY$rK1hH5bRZcr-RqC#qY0ieJ
+"$!c%qjhQZQZRY[#Ui991DIZ[2lq6i&KmbhL6IE#YX-PNr[hQhdR#f06E9ZbY[%Q
+pG96QZUT[Ae12B@R[Dq0VSf0ViZ0Vif[UmaU5KqfVFM8e8jhpG19Hice*2DHGYI*
+l(A8YchYLbafNEaI+YYCT0cSkRCcfbfHEVV(0eeTPV#ebeG`rMf'HkFLfZ2a3T(p
+d+4q2BCriVMf2!Kkk*-EE$T+,Amk,Fq(ZIRIPp$3cU3H&RY,k'8X0CT12Xp(8m)4
+(#%6EEd",E,@&Y`FYAF,Kr(ViZHkI#N@eY)r&#i3NH&)r(@E$2kURcqUe8lVpK1k
+raiHZmU*-lDBfq&8k1PS[!er1mIDh1UmVVB*RYmeQZTf[#Y2pGGjY*2DbYfqEUGA
+[DUMYkDMYUZHi994m,Bq&Rih[1,UIk*1`cP,X*UUf%eXUbDb+EI90(-EIBdHNeRR
+DrMlhqqjMHAeYjKcADa%lj[d-TTp*aaf$Vaj[AkZFeqVQkckq2B@hV9PCVkc'V0I
+dJ)f(J9PCX2!f'TLkk0P,'68qKQBP0#p[Tp(TmAKFHfiGTb,1pXj2Ie'EXm1IM9R
+2Mq,FkIl5V'I8cAmHeifrp6EIje[qQRr$i&"pU*Npr)k-5i!0S-d'pZ*NYr*cd6,
+Eb9TBQAm[CHKXp*IcRqHGm[2kU6SZa@Llf**@Zp6HD5YUD2C8G9hNhV)@Xaklmm,
+mm,eUcB9Fa9D#IVCr9dPEi9,0k25rfdecTZb9*2dSR9pVKa[XBHFU-Y8bC[a,L`q
+A1q*[V6&kI0k8El-q`&D&9P0VkUXfAJE+ReP4mr$hAEF6lrdP5[RM!4JqK$KrZX1
+AhFAJA-@cZI%[kHCkPGG4GP)Le8LR!Rb)XaI4CLrLjI!LjENaHVNA2&Zred2#i(+
+kITF[TqEbpI3i1[TrBem@fiH"@@9KqQqkGc"9A9Pi-+4"5h8&+!e([Ec@8d&9#VV
+l9kLRVY(Z,qTRkHdV16VB10cZRcXDSQY*KDZSc%eKH083TV$Sk,@iY4j0cirdrRl
+Ehp($)Qqh34rLdh4VD@SmrdX5Mqe43U#lP9-&$9aZViHiPGeVSh9feV*lUXe@Tf&
+0rCX-2NIV`S+LfNe'p[FA'Mj6&MpB!F[,3EUHc&rK6@`p$,8[$bmMCEkBbr!Y0CR
+-jX[p0*UT9K1E@6XIU*@6TGZjepN[UIHiqaVU5eXp*k@ii'Fi&GrRaDVp0h8hph5
+hf(3Aeh5iPh6BR"Um6A9FR,EhSqp(qY-BdIkdcNAf5Ull*G[T,r*C[1Aq5bdr`CM
+#UEA4b0PCdRT@Hbf@bi8cq$RFhLF6bHdCSQk$q-h,c1V`iNpKii#mRI3l(Xlr881
+bYEc`)ZFhqAZ[LhqFifrdR#he*`Gp8f`"lcCHMVT[ADfFeeARGEdkfdY0ADfe(E@
+e(Dm+HYZ0Qq$FppRkHBbh!ZkbKT1"IDLRXSHfcf!*I["241qa,RmAcrQbG($S#L$
+hI[4[qHYr$`Ya8k6RGr8kIa-A[pMTiqbYTqIaI!dP64@%ZSrT'RrGkFZ0r[KarJ!
+V'M8Z,rhfR0!IhHRKa[qS8Z-i&RS(afQ8ZS"6iN*d[ZaTrhQ"9*le45qp88R2dG0
+h94DCbUh(1VCrCd9[09Hak'VS+ZLidpZ+Rh2,pIThr[F6lIA+rlReA"r0fP2L@[+
+SCMNd-cJ8q9[kI-&F5rLc@"'rZT65cL3rSGTpZ&G4E#jLS(hFAV,rTh3&h-@`D$f
+Pc9pSDppcdlQVKpI#ZDU(ePe8`jQ4TiF+lXTqpTk6Rp2Rie4Sp*KkZSd&E46me,S
+k,Cmk0j2%Y2SI0fHpcm4-'eLm[0aH0Cc2*e2er%`06qbci8cJDUH&92hr6["4hF@
+`D$jQRc0$rF"(SaB@"dlZ+D--@d!HIN-#lD49pT!!VUVKjU,#VEV'L`YAG4CqMN4
+D5HZiZY[)Zi[DM"MFc1Fh4e&GR-6)QZEUk,F6A2hA(k(%jhApIp6`1mlj-MeITbV
+[ckHpYDVJqci&66c'"i'aTjR!m#Y)SkV9aFaI4HVdNL,BAXA4i&2AFq,AFr'LeA2
+kGp'r&#[BfKqPFj,crY`Vf,#[ZRI4CQrkB&)&*%&X30)9q&`&)GLeeb3$!kd#(aV
+N-HXVEN%+Z(f!$%J!PeGbA!b3!2HaG*2&`ZmXY*I4GPGaGPd1RHa[@TpPd)Y9,9%
+G,R+VcCC4(88da9l,%+)kMC6@ifA1m[eq2FlVLF6hq`kr`[bGlTb$I-rbce,blVr
+,0aH&Z0`5SlqVlVkm@chZXr"JDlC%X,DPYTQrV*mPS1UI)2%XViPm,JQ09AB#JQS
+2cpeN[9l(k@!3-ZdrS@"&VT!!S'+DP8JS$cE1F$0S3*j+LAb3!(D[Y-d4-Ue"-R!
+KBR$A5+U(-hd@%6SUVc6`jqp*edpGIdp,I9'$&U[Eq+qU,fpME(5E'ejZVTGG49m
+e9lMQeXrAe&K09fbje(TDDSp6m(Z4HYpcLE2[[RrZr02cXpr(45iQ(dDMeShiirS
+lVGqK@jM%ajZA04k25i@29bTZ2eGI*R)2kCf$i-p"lfIJNFMPBpc"[lS!l,dH9I`
+kDqSDDqKeGlMhd(K3l'lKlf43lf4$YlViH6YB[TqGJ@R8l6V[&iRh+2jqRc-pS0&
+r(3h1$J5Z9CCMN`8'""6Am'S[S+Zpb!&[V+Q%$"BhN!"Xlb#[D$AS,`!Z&!AGRbI
+(rbpApR,p[KhF'pB1rCQlk$`D#rXT[!Jlb$FhF&MGX"Q(QY!1p5HdYpCGR)`lb6I
+m6FkGD1X64p24HeplY29qM$h1hf0p&bG*H4Cl1ANA@b)ZjZSY[FaH&FaH2b1Ai%%
+[mF(5Ym(ZE,iGl*cZkbHpP6Qkbfjjq0Z[aDAS4rccR3aYeNr1`FrNB1IJaZ4l81C
+!2P`jrfBG,bBGGI`l5pKm+lKhYc3qrZ-+kaI2ZEQ`T1ZQ,'Jd4$lf[qIlqapZbhA
+$`Sp[,MEfA(XF50j%H`a)pM,MfQ((YX2'Mfr5P4q(dT-Ie,lSaq[QqKC4q4*b1KZ
+XVd)q9k'kl#2`j8HhP4q%(q&(hZ'M3"JpVm529iNHUaBp,cSmhcV,GGlfA0phRh2
+Md[cZKj1L8YX(*4p4KlUQj[L5iqiPapj,k8IIBI5Mlr#Mj,mZ(M342HJLHraIGmH
+0lf,lZdU2Ii[ZG+#*cC&e+Mj+iP4j%U1`'b1M%QqK%Qd$8@JMqPK4r5`ipRKakl$
+h@HpE*HCa2"T[RIeAHJlK84IbJeYhC9GpiPl"Z,f$HA[5JhejdS0rG`C,mYjME@(
+m'eKj(!`IX4IJ[m(akI)i(-k@eKqrFB-'5`FMSp+2qfJk10(r6LG6crrI%m[8GGi
+YaTHi8lr2bAXb0jJEQJSDqjcP26AHE-kLbQlp8LpCbSZ9j@`JPm2QH"&q(Ki2G4q
+Vmk6h-I,HG+cXI0lR#R0d6Vk@kj(4q1q[Y,l@jk9PcIa8(,fXANA-($ZS[$ZS21N
+4GlH4GRHaD21Ad(9k5rh00$pA2GTc[DZDA[eBCS&(R%MaY4,hAjk$%MS%FK#"2@b
+@CpL29p$T)%FK!#B`#EV85rj9h0iPc$e19RHll60#)pM&PlSJkb%6!9d&!,0p(GH
+*cERLDI`2Q9qaQi8pr$3hh8XXA#k8IZ+"J+k#X,)[BH9[09"3@phjF'PYVcai+AK
+ATGkRBZmY[CRi19*XT2%Xp9ee4@DA5UCA8fXLpX[1j-&YbS,AP`HEc)0jc)0[J`9
+XU$9i8&'!H("25i-YcB-Q!H,YBQphr2mH*EqEd0R'YkrRefkhZVc',XXh(XFh6B[
+M6FHVbeMLIf4p4`jHeMr9QlU20b)rB38%R)[)2I[B2qLdAJ`EhP3HGbE,bV[UHAH
+F6L8P2mljZBL6E'2jrkX,GI9QbR,kY!`&D&3IiI,"[1(Ijp![Gj!!"'fpL$BmLpd
+d&6b,cB36IkIpI%Pq,FrXU1[ehqhHpm)IPj,VZAldQAZ[Mk'2-qjZVLCp[Yiea-p
+(0aYr#k2Ea[BB%CZ0[TrSBmrcTU0l'FM9Y,d)8E9d[4akUA#MA&9KcFEIef'"9GK
+6FEf*Z0PV$SBpT)X1MRGKRBeaDEqfk'HV-l'pM2Dr24VLfhR#k'2`YY`ZMRkZGMA
+((eI(k%1TRBhX3pC$MA&lQj-EIbG@"8Rkm6V1MMbGe-p#LbXU0aC8DCk&4-B8EcT
+0&0bm,d[`l$#hhjYKFrDm&c59bTFVPiFV%Ml2RI*LdAVG[(VHKQiqVk1-D8r3aS8
+I0p'EMjESBpM*LHaRB)QrYlMSifIfN6mqE[YjdBQ9fh3LCLYk-5&@p((`Ui&CHaL
+A'*@a2@L9q@k12LqK[qGZ[fj[Rar@SZ$d+MJmlGF#AKFf*'LIeBR%mV`ZZT1pdX-
+XKm[d)X6+er,f%AK'UEH4DTPqF[3GCl1`LmLhjAf)-6HqeA`HrVHCA3C'S`GP(b[
+`fAaidj*qhSYeeXh*fhaJ(JlIiqCZ,,&e[YE1#rXHApL$N@rXl@#hj'""-hm%hHV
+"RBA8&YaqAAaqZLDlPm6khePRpXZ(mc!PHcCGEJ38&q9V+qpqbGLrl0$3AflN3E1
+l@T99J(H`99p"5L+[i-abH9bX$Q2RBH[m(LILqZb"hH[Y!l!J)(3F031[RR!lQEL
+$ihL"eNKUbpp33jT"$apIirf2+f&A2cHeVTbCJQD2H8%LYcfELe@EhdcIrAcePkG
+Ybl#2efQKq9PlL6TSRBGh%brT5Y44CbUPG5*3r3e@*qEbZK&d0cZGAmrrel1NlLH
+05Ier`rmrTp6RamVcSqBaBmhcBp!D@9-DMfS``(B$5mK"FD[P4l'6(h[UFrRp(&p
+cD4Vkmk%IV1IN5SfpP4rXd'&(m521BQ3d(McRh,I#mV3@1(ZFl(TUhcTGIQqEHkH
+LMr1b9[iYcYpBZkY0k2jG&c[,c-@YPde*4D1icNUSbXUSc%ULRj0&5hQ*4GAcD(i
+ZETZP8EE"qY-H,Pr*bhprBbIF`ZMKp$$k'(dF,h,RX[km[j1Am@Bk@`L@(jmhcY9
+%mhLiZUSY[GmfRU0CHbk,+i54ZAQZ,KD689%p(qKhhUB[%U+PQpPS[Kd-EMHh6HT
+b0*G3Cc4b)*UMZi*V4hF%phN1JZjl([)*kHZi+2Z-hH38IEhN(em$'MrLS1IdQ!V
+J+QqGk(BF[!iP69+aC$R[hk(3AhUcPPZIBJi&eNHc$l@J3)j#(b%0"&hphdq6$m+
+,[,f,YVqRVF#,4qc6ch,TmYc004C5Z`VRQlVXIeH49Y5rrHKkN@(-HIkQp1fpGmM
+P`q`JZ%Rj[N`qmJhPjC9Yp!!HV[i02I`8H"NAF1hN3q(G82$ZSI)ZBGrFHeNErQH
+2$rTpL*f'c,4Z&A88hUm2ijiY$9qAj[M40hk(SlUhk(6k04Kqj%qYqVRkhX2iaqr
+la,,[lhr+Bmr[lhF`@0rUFLrJfr$[i0Yb,mZcheP@h-'c[BHB[I2eGe"VVb(0hRE
+`8FLbRXaG`p,)cF%pH3CZEN3kZkQS-hH`GA3A8-`H`CDqfX+$*hqeKE@KXGrAh'"
+Y*[D3!1hheM[q6imjj82KlbhhRXrBcfcKmMEF2EFVCjq[KheEb+hPefQVSI0eGcX
+U(QdGeXSI[dGeXD(hjk4XBH425+f*PFhGX"I'LI5[%#HKTEd!pe6A`"akUrMe1"'
+f@"8EINJ(4EcP41fr*rAVP)kIdA8d0ar(l('r6q$ZIeqCAIYfZaZGVV,Vc+1lfXp
+HEA0h[QGAIE3F'!02EFU[KhqRpS@FeJre42SiAabmLAmH&k'@l2"RS1P3Fc1@8L[
+j8j!!ErcX$2NA,l6GEHcXhH6Y"GcZSZTf[ZG0AqaTYcqfGYrfDVdrpYKkIkI`H2a
+IikVkRMrUfH[6$lM4I[d28JSCRcr8iI,TmVbk(XrCSCcfBG0bBHY[iHc[SHp[D(H
+hX2dlZ(kNL(IA9$ImAf[-Kj'rNq2%l2EbV'LS+fAZ)QYRX@YSV(0mlm2hqMNHh'j
+NfJ4b%'IRIFcLEUXAJ2RG&mZKZj-L9)mqEN38eh&TVbKVlZKVlbKUldfq'EIemBK
+iG0I`k$!KcQ"fP"cSqpjf3J@2k+"GlcYe[HG"SX##H+@lkbSli"S0AH`9YjN)jSD
+#rSCX!m!"UFlq'B[E,+hIrVq9$eA%dh9,9%KXf9DI@h@l[B+QpJf)FQbVYMC9hPh
+"rKH2&P$RlV[-$PrNh@5ARId*MI`+,09(@B0PlhRb-abY&"F6R*QV,HDLrRi0YAh
+djCDIFhQHJRZ()RHYZG0eYc1pRl%l3IYde"qfGe(l*h@rVRGRqZGXIpThHrkc[Tr
+TdhTrTRI8j%lIFI(pIc*lp[QCZjfZAZGVPVVl81FhehjF1QhPlXiHcePpB3pc8CI
+q@Lk[[H*[FQqplppp2((X)HEeXj&V[Yk+`[YE0kZ4#feMfQLeXipp2d[QmVB4H'p
+EjTNCH9mfYk[jqAeNpR5*1(%r(4@C`cj'*mF[q'&MpR+cHkkZJNjb$qN+$i*Z$hT
+b$"cX&aEqch8'riI*aq4J3mVJ3qY[XHkX[%KcPj!!kDlSDDlKeFJhUXe$XER(`0V
+3lhJi(f,,Aq&FrXqYa04P&b4D!V@AA0ZFA'pIqfLR[BL8IV40AqAQpMNU(Y2bqcM
+mQ(khYFR'pVfBHqj12bHfb@dc2MA'*RiP([`&drV4+2f-Aer[BSHA2IGBmYVl*Hj
+U(YYF[IZQX#*[%MqT,hAKFf0YIbER+V6Fd'LrKSIdB(%j2k0VrMqMc14qMc*GaYC
+GajPhaI-`Z0YF,MI(qbGUrf6[LHCFFMDh()mcm[kE,hqCmI-Jq!"l,rI"U1VP4-Y
++LGA*dfrreRC(kJ$RF,p-lMFJ!jh(imlm2'!1(eI&!1GkGa1j(k*hNLTkRhZaiQ[
+ke8ECqHrld@p[r(pA2fAAGGeNMeCUlrbRURcYaUqjVpISZlUUc43mT5h02-8Pe6j
+c15+(5Cb4fP6-BRI8Af1ESU,GlUaaIM2a-qh3B[5B#S&aSqj`HTk[pI%fhc&"DFd
+AaD'4e29`-2GH$0QU2k[YaGlQ1c[0MXSZBUkVN9pGE@2h0jP,5[hZpTVIHkAHfp"
+EfmjEqRfG[EpUd(QlIdjZh"EcU#hhY0[GlAf0TBf0KEepGakZVZK#9HBc'"Hmcm2
+eCZ@GUlPp6eG$a2(qDS)jl4IpQf6k[r'*Z[XcI0b,f$+rXqTY0YiqdfAMq2AC&[[
+DrHfrfC[Hlhl0"[GlBf1pX3'hYSJ@aY,HaXEHaX12Ber(VkqjUkq,#UkUlUYP&UU
+#P[pA@`Ij3Hh%qPLBdF5PPm(XhpcrCmj3KlJpJ2ZIhc'&NZYVrEJM@f&'Vc@Xa)e
+"cBqBjd'4cpV(iIUG$birkINhAkFEFp(bYeb263Gq12kR$k'eb1I"(hXQ2DB8Da`
+SeKKaUl%U0PcDLTaDLPa6MISY*d+,4p'LcQ&p'LQ[ZH4RSQAhPE[T@GR-p%bHqff
+qNjh1pc$cfGrPeh*jI+pIjrj,Q0S@Hil3r*h'*Z[rA0UULIXj@UTkI94XT`C@TU-
+jDBAIaS@4'Qk[#VSdriNHIUX2CBdHJ-Dfak8HJTF2CC!!!H&AG2$UqRKDhTbYG'k
+cJb3qV+LCXm1UM4HIZ[&ZG*SNS1cd(apacmc[2jEFFdZ2TC2IDrqUXT)hL4["RjI
+5B#[)+aSe0kf,SEREcc@[m[FFf2rYLdY4V,2$RDM,AXL9UU+Chp(EEl9ffqVE6j*
+c1kkEc[NEEEEhE9Y[@X"YYUlIID1fp5hih(pb0,pfSrGlY%!B"p,hU,(b@6jZGLE
+EEBXj%hL"G[imR5bUlBaY4RC@hrpEcNlk9X,Ra0'eEI`lMQlVr,Qde4T,@93dp&P
+1,+V)N!#rKR-riHGQmpiQm&h4m(NF+mib6p4LB[j[m6ShbQ5l#SrR5qjpLSc'lMj
+@[Nl10Q0aKDk*2qPK9N5CiYl*lU0Skr%pVdcTJdM-a&&r,Z2GLIZa[Em1*aqMM4V
+cfqRlG4HJ(lIaHhm5"2E1j%!G"48P9Kd%DDVX,5aXhD5ZjMGAD5HkLphX00@DDXY
+pI*RpaD61aNf'@c0$LIQX1MdShlCm4Q(a1*'RdT1h)$A81MZYI&K`8-@KLdp$"fQ
+mKFVT41iRX,(`mjCEbG[HhTUHPYE[64FhG8rEb+MYCr"a[(KdeK)fH4)fF%+dNE1
+RTIa`kAIhH`K`VU(eNMZkHTVX$pPpJA1dS'GB@Kq2Z1G(r"L9G&T25P8-6Uq0GmI
+LmMJmLe[E@9h8DAlNDqpZ0IIe5pPk(@DENC[FF2,HPEjEJlhXZ0k0P9r(*UmL99a
+mViFh+VSq9mL0Q+k9VBf9X**kP,Dpi2(ih'Nph86&RKdY4Y6e#F6Ak9X$HRh'fUE
+UEQ[[6QErmcQEr9TE[ErGT+QamfNY2r0RGGph0$Y[0[qjKla!ZhB#Qf,+q+6m8Ri
+T-E+5HRJp2"JkH$NB-AqKN!!qCCI!AI[JMpAbERDpbf"+S[r"L994T,19TU,UlcM
+AR&Nq"8C6J5[#Y5`*P,D6UFMMFLe`0P*YD,ZTUA*j[j[p-AfU6kH&T29T[`DRqc9
+H98CAGe%,b+LNm5SUDR%S+)"DDLeQi`qjU*UePH"6drJ8@FVTIYHG,ZI(lTe5lrT
+Le945HEKkQSQ10HAR([1&*e-I+@dV@ajQaNemI-BeI+UmD2Q+q6BamVZih@fH"Ch
+pYqA-F(r#Eihp8r*i%Ik00lNEQqjdrFMIZiXQXLq"YG9Y09YD(B8@@Zm,2e'RVZE
+kr$jh%VFjehJcjT[r`d8Vm0$p#Bfq$UD'AFFZRbI+q+4$YT%1dZiGSHKcNG5`j'"
+&bR*Edrq&GiEMU#aSeVKrXeIUpTUr2KeZieYjRCcr,,HEYmaFHPXG,XZ"533rQqI
+ear)QKiR%QeSjk$5C%pHarpEqKdKPPbjVfGA[j'em#(#ieaGq"6j1ml[8aD2K@eh
+1kQ#Hi9[)RDbRcI(ZHdRVQ,m0c&k9e&`VZRZlc6aCqlllm%p3jh6qP4b0RRCb(-l
+cEEbke-hRjhA`Th2lQERFrCd%2,@RdYYGCh@Dr0pc13DlE@&pjdh"XpjAhrf)8&V
+[2)Mk[b)p(BBNjdjHGM6e[+RBf6&$G4F1lLh&p&mh!Le2+fN(8ME$Ph-E[&-6k@M
+ajk6ZY0*S2!l[ZD'FSZVVC8r%Q[LLD1HPcd6@CZA4a02#P8FE+8('S125fp6EiNC
+CGM,jcDMFFkLXpA+q&KM4bmh49I1lEm0&DFhGH&k'SjXEcHEFa[UY8(bcA0G#rcF
+,R4a,jbLcHXPBqaP3UMcHG8EMQRM,DQ2(TI(UGKXG9XDMV-j+eG&4j`5qVQTFem1
+'`aQk,UpYGqE`1$XC2Vk@6a10QH[cA0lbL0EAQIbh8p1A1kRTZmU-h3AP4PUDpSJ
+%LCV139XQ&"@i-q!N+$EFc(Vlq(K@)#9q"fQ&Bh%[5l@*4lfi`mF"-pYBNpEm$#c
+hMe'J`j8lip4PZ(F5XINA%Q(PEM"!6r#q!AH'li`&`)C[!lkmS8%b$I+Kd&qmJQK
+1!cE'aeI8*`)l'mSD#pTi9h"2h9P1A2p[8l2#iPcbHel#4rEU2Uk2iY&dIbCc*He
+Aq,PTHdp$Xm1,ZU@9(c'*8CA#Ml'q`ipEI5iffj%Z2YZ(L4pYEmf2Y[1jXEHEh&M
+EbaaBqmfB#9r1MG[iar%'@2#C+KlT!PS!PXJb63lVHmIf0eq(cpe[EbrjdIUlm*l
+rRaXYJZ#I1c'kY-,XmjZV(S!*ci@kX1K0al$RcNH[jmjZU[RChG9A2cdHQjhG4kE
+&ddHJ!5Ea6lm)qbP3EUP`pTk(dCGMNSRNjRSIhpTFhZDCREGhN6q6l,*j2*Bq5ar
+GrXLHeQ)R#XClRl$km5e`SeRL&$mDTaBe*Lp[8Cc&cG4-mfDLR&6am@&USeEA@h0
+R0G(eGTDBQHeXHMi9KLCk[MdI$Vm1GVSmpI9H&%bYA+LCLQF"&A*L6GA)`kk,%S%
+$l@*69HrPerMa+Z[hR0eZcL9pMYZEVUq*AF,9iYC8a,$Mcf,&eN6F5U1*B5YdDbp
+K,ME,&U+RR4SA1lH,8EkJ)D5ZMRr3plYZfl(YlQIlGGDqAdIb6dULc(-c[kIBqpM
+@8&PM4q`MC@6M4ZecNV'U1iQX,'SZmLGpeZR`Sh@qaplGGCK8ABh-r3Y11T05U+&
+*hIk[dbBdee[I5mI$aU*'&3MS3I6Nid&P"MHCmRkIfjfqP8ABrNmZD@l4SZpq24A
+NlQlciId82HDE,hEJ(aR3@p4RMB9&T-,'j$4$kXddEdfAr6K9'M`Z-qKSq%04h%2
+[ER&K*H6a26$MBdVd,Z6Tk,JhHaje2h0&9AGVKaG6YGeeGafIe*1UQVLSkZ4K9'8
+N5ULBZ!%N5DM15*0&T*&h,TjfSdNMM5kI2e&6)YHEUXp8ELip,RH"RU+eheVd1kc
+Y4aGjCqj3CfSk@Rp,*I-p,*D6Jj2+F,*6(hrHe1NSTIT9[ZGeh-6LqP[ZKhqTL@[
+TErRDR`)QiYEMQq"USQaiXM%de2%T10)`kHRLCbmB[-+LQ*%ULcJ`-jF5DM5Eq68
+DHi[-68`kMCHEGmlZBG&k@f[1KT+'S`*86rI#NjQF8c[RjMr[490IiASjlZD6,Bf
+mp(1iqm-6[QlEr$mPcV-lPIlIDc2e06mNrlDq8r!k&%!I!k&3d'!EJJ(crLjra!*
+M9(ikLf!L0q,1)%1T[rHSr&XZMdU,f+MpXedDMf+,"SV[fiR[42VA1Ycc8Yr5Ia)
+Q&lN3&J$`D,MG('S[fjcrISr9hA"jrKd9Ue%Z%Tq-6[iaBJ'JDeG-DL'`!G`"R4Z
+HrckdJHdc@22iE9[46@hfp,XDkJeGA9dG0BcdraqhKBAM89Md+,e1Eie&T-hR142
+6pM4eG0UkZNfeGTp[Ym,iHM8FASr&dD,[IkiFkcGMLC%jqA2r$qETGhlZMB#rQaZ
+kr0qALI`iVc%[KpE2IpbHdKYN9r(VGPAkMT%LIiD!N85,hQmfrq(pr%krZ%2r-qC
+mR@k5Jc2El(6m6`p!R9RZrrR2p(3G#Lp,Re(TFriHIm)#%1D,mG&q-"(`+[i+Yrd
+C2dHl5bkr0I*f[T@rfmlXl'eqK`EIFq4[GciqTZFrTN0pP%rMfYhIIRc[Tm1ml$L
+bGKjH0rCjNI34-e%c3#(e+jD94GAKCRYZ*-85L4%l,irT9'(lY4*b4Y0p,h1pZIb
+pkcl1*lTk,Srec%VhYG'idULXjG&XF@Ldr2SXhlF6,Hl$LI$[lk4[[p,MH@fXi'f
+Xpp[kfcZ0pUl14[YAZ*99R*b0-kZMVX+UQTbSRpA29f&9paQjZ02e[5beGKeB&3U
+h36J#jZ`4&'QDfHX*0I0D@RX)@Gm#dKCh8k+TQmp9D2@6QIirpN2akcYXcSFcfhD
+pYQD,ph&k%I+(C9rcjr0plerklR6E"3SqRhrmCr%p'Aq(6mrT8AiY'`&G"6h&1I4
+HYq([m5jddCTpNQ(h!kA2IbIH%(dRY2&E@3rIS[m25ffmC@,,,1qQ2"lR5dfbm@6
+-jC8Ir0krrrd@Am5Tf995e906DA[0Ypb6Q-ZKMX2SImD,LhR#YLd2Dm(Jm$Lm@jZ
+HcQ%-jEj[rf(f8VBGph0*5de(V[[4qV`rTh2Dc+'TMk(rh4GP,lc$m,#lH*PXh*R
+Y0T-r2dfSj2iHXr*a2RjK%1Bk[i-pQIhmQ6p(XrS8rb82d2SHl29hf+2@C[ECDca
+VAj-h#dG[95CMk2@aC[Yqbkrq(9@[-KAq*lXrar6LH"j0cPZfbQBZFYP[QI,p6#S
+DcD9PCYDMXTGcfRKXD(crqG&qM$STLri1AYG(YpMV0[Tr5QVM,5ZfiRAq)h1`rkd
+1MS)KRB5FhZNB62ArrG&XI0mLVUDZUe&+J688hFd(FkA26Q2[[ZIPr[Nr8qfaeI-
+rkd'hr49ll[pYTp(@dHadG(j9(ErAi[Nh1BhE)8r-rjd1NmfQVTb0S+M5ED[UHkd
+I%qeFXq-G*r(6bU,f)h$k%EMG%r5fSZrFS[HLIrRckhh+,MG$Tmr)jhai[bFhYir
+LCZ24d%ZDh@JK4mYAbD#2Nl("aplc-HhpV(iI,RB2BKjAfBHBpQ(fH"e2fEDm0Fi
+bM`H*$Vlc([i*l!JQX#$0mQ$080[aq6j9Ppha,Uj[Z*CA615NA[ZdAaHj'[IE!10
+HHj85rFSZPlZKb1fl'LrGlR6p[)k2ap$j1IfmIdFh(fe"Lc@km5&(Skr$S)mpBi@
+2[C@2EbFIKi-l"m%2+qe$c(Y3qcjA8rC[lb$dVb$IAX(S`kqr&p@i%'X`)0AbB2#
+SEH4&p2p1"pdcDl(LIFN-p(1RrM4mr-p,fkMe1Ghe&Z0'I54Sp[KGe4G@B5XheAB
+b2GSVcSp2SC(2q-jeqhMq3FkP"L6@kl`jdUq934mYBbFIHi12Emc(iIY6X"Kmj82
+-FU(fI*kRl0jH3EHmJfel"j%1[[4L8H""Scb3!2*Jd&#CK[6p2!hSa2'iQlZf4$l
+cq2eF26CR-Ek6jd6Up(@bC[4d@6mU6RSrCFAX-YNZVpfSpk0JarBhAVHK[XacXHE
+aCU2YY,LBpA,QiqMVm1FMk$1ameRSrBCq$(j(-alQ$#ZJ$X[Bj5jE+%jEk[!-U'l
+Kf,RPcYlciH6"#j2Q@AhI4*LD(LHCH*K41qrMhXR[k,-9f$BE[fV2cqGU-'[MCId
+ZUQ-hle&,p[Tp()k(amrj1GfmIGjZ2@d(0QYei8+229q&34mhBbXIHbFHh`FIKmb
+GJpk(PHA$c(,KpRl28rC[Vb$cE`q,`Zkqq)JD[!Jdq""4mQ$[+'hZS[TqTJHF4!V
+H*ZlePF#PrM5Fk0phQ`U+Mff(RHiLC[IIbcHmP`U,Amlkf5qI%`qM8HY'r((p(GE
+[d+h-BQ20bcqe0,KBpA+Qir9emQFJrTRB2Jcd([Cq#4b184"hpd!GPk2+[eLAA0l
+HN3I#Kf0h$hXLKhXL(EhA`mRDaI6ml!Y"KH,a10I1mE,['brc'ca,5rA'9%l`rrr
+lhDHVp'(ZG[XEk,NcJ*RXjH4GE)LlQkLP0(#ZB[(j"kd*Iii1PEi2FfA`lf6RGeN
+pl+R0ePYccmEGILd[3MRb$aYeNr1`FrNB1IJaZ4l81C!!$jF1IpQ(5mQ(AAm1d[B
+I#ZiGlFd2[lM#ZZEq(dBerlNEhCrSa[6`VUAqE3rNqjJ,U*d"E%ZU,X)Z4JRfl4X
+SH)A#SY"%dAd0hJFMc0Eb0VDIaVrpG9Arl6[fD$pFliG"qbGTVMkIe2$Qrd6[p0V
+PVRDpAFq2X2kIkh1dTmVa00r1Jr3[cXl,LlAYq)HQHGS2A30hKjMGV)AQ6fYhaXM
+pHQT[ekDVrfe9AqVBDhMIq1Tq$UZ*pcNZ@*lQKl'Srhpb0L!(lLr#3iIIKkVX[4a
+Efbe&l"BG5V`+HVj-2`cSCm'Jj81JZ[TpTi-hF`rJJbH$YD()YZCe22b1#"Ar9"F
+`rIZBH5N3GPF5)-+4")30NFZ'M4!e$hN(!Zi1"H3@Yj!!@&jCGekh1*SHbaL'HEL
+pMf4G1hA'br3dp&jZajZPSYCk@(TSQENGYN[UrbXYEH@9AIq*H`@GkD%(5JhjqmY
+aG`GPq@maS-Rc-LjKj(&`I(Lr"JB1dTmMLmcT!T!!C1jl5EZ[U3j[fSFhbd$D##4
+GSd!ELhH4l0$3Hb@jUHQ[iZSZrr(m[[F6GmTM),Cq$hp&39dU`X[k@IRr*U*9I'd
+ITG9Q2JGa+I[%V[HAPChZqdc4-kpSIk4IIjNAiX',m8NrA#Lc86YrQpKJAYPc+$P
+p+"J+k#QK8hbl,b,qjiRIHdN(Qa"Qk2+MGC*!08V6%ULQX,3hr8mrcX(T3IcS'!V
+S+D&Bd(amRU@@KZDAQ-Bj0(SpLALIEhA"br2dp&YpMLD@LdrTB@Q--[EB[mYeU(P
+Q'GCN(!9M4rdiRmS1*hQ#N4fj*'mlqKUkklX0hG@IRr4e&hAaGCkABHYJApPre3%
+k@!VS+D&((Pk0r)ZGc*kkBXD$4'I&lAr2prBqhCEVKi8HhPaYl,Mf1*'mL2BBNHa
+Pal6$MfarS0[dT8IKp+6(p5qk1crPkZkb[3XSr)Nj(3!Q2PHKZZ`Mm19(Yj8IK#"
+`Sqp`dE!-(pHIG+BIX@25mk20mkbhAHpPcIGjr%YC6298fmpEllRHG%mh4e[1,cf
+mmVRCk2rKaHUQ00Hb,Qj[*&p"ZH6mQ"3qafm'fj@EJVHAM68'Vj@0#JRZA0`C[PB
+pMG3cemj2PClD`qCQq([q9M3mV[$8Ufh+KcGDA+khPiphA3rfjZpf-14I9X2f)GM
+PZAMi(Rh(*XZCQrCJpLKih+Tq0bE,LhYhIRP4qjIF6cm*Q)'PkHRjG&JaZ4d6P(A
+Eh`rGS[JLI[qIph%N5Dq#pirXaCQrLdYl&VVYR2FA6H2b[(Jj'ppVA3Ff[jPGCHr
+9i1bXXLQNq4TF(lHEhA@p,Xj1fMpES0eeZJX[MlbbrqDMfV#b2EjZ6Sl$EKmMNl@
+$Hh8@aN399l&TEq,Q16X)YpAbC'*jpca22`h,2jp&,k-EKG!!ih"k04aZLEqfKrq
+2LTcNa5Tb+IdapL$%HG6Q$XSq9+R-DFNrEd@kkfE+M@9)I'9(BUU1[fe(HcYB,Gk
+e(A8$USlI5f-qNkG(,IPVVrIGaNIh'6dF4M9lhTr9jQQl6)hh-mk(dY(@mbEdG$M
+H9c-p"qrLpIRAE5ILHh0BdU2TplbZrSXVAFb`XX'cmr!e(-Vih9qPe@AmTfchp-q
+j[HFliRAI%kliRA2%la2XFpQ*@PrITlpl@R2SGjIHV1@@jpL$JA@4l-2Y6XI)%FK
+$d$0"&hphdq6$m+,[,f,YVqRVF#,4qc6ch,TmYc004C5Z`VRQlVXH*ir3FUZ@m@H
+-PNqTY*'j[r--%HD2R41cBJ4b%23-NG2fBIH4GpHG2!Ke9r$h&p$Y,b(`EZ(HA82
+TF@664SId0R+iRfHLa@8Rlk2"IDbVP[#G`GHX(IXHfaBdIlqp[RYAIQG!l9Ee9Hk
+paZq1T%2EI(bAAp5#KQI2p6KmZRb[,SHcpQKR&hQSHY[iHcFpj2dlZ(kNL(IA9$I
+mAf[-Kj'rNq2%l2EbV'LS+fAZ)QYRX@YSV(0mlm2hqMNHh'jNfJ4b%G(GH*IFcL9
+IZr1qEQ)QG-%&ce)2Ma1P(m1EjYpbH6Il5#[j&lYE,[)-aGj&epZKc%LbbYh"QS*
+bkJl1kB$5!DJ"6+hQeJUr6[X#r[q6M4r$S$hiDh"kPPrIa-6hZbKeP4i'MqA4FRb
+qdh2q&pFeYjFeYl68P$T0PTlc6CZRQVM15+I-A92Q*&20h020b+'PZD'PZU'UiYl
+&bPpTUIBh9$Yq,Id2B8qhi0rTZP6lcJi%2X)drL4jZAZZc`rm[i5VVPAA-Zq6GmZ
+m`,cP)%!6PJKc,RPh1&k(c!PPaj[%k8DIZ-$A`l6mqEj1TKfYabHlKqPaF$8d0Ra
+F$Zk(cEQKh(![kGLXZBZXipl3jLle8'NZS-jF`Cb42DDKQTVLhHNe&208Qi[*ZkZ
+jZk[ITfAMHTJF5bqqbH2I-V16GG*X,,i,2crq04*ViddBC0"IAGeV[Cqe"HA-&hG
+@A!N@4N2helCEDqXR13LbR[CXXhbi-[br-SF@i`GT%bZqPEQLl2BiGI%e&(LEH*B
+c@,@a2l1Ik(X4lhfmC!MN)2Q4kN(rZjV2rE2m+2E(K8A[,TZ1R3pq4LXrTfhBpMq
+'2rMSj9*SYKU2lG6jH[mIBDqRedA@l8"-Lpqc3A[fCZpXEhCraUqhTk[Yp9AC[Af
+%ehpT0DM49-+NdqRR,Il9C5h-ArmC9B*hhRMF-kkqk2T8@Ndmc*e(RkRc0IYGKX+
+HXLkrDJ*NA[pe"Hrh6GlEh[MD$DeFe6eFeUUl1Dq`KGrD3K2cJRmpEf9CU,Ra-CM
+md2m0"d-cm2Z9(kHIhe&Ck2Qd&&Tp[Kpe4CHiNa-YmqQjrT88aTjRMH9`I6YVHfi
+pVHfPlBmHd[Gh"9p+#VaS0E"9l[MeXaHeXab0A#p29k6lZVdQhQD1TT0*2HAXq&`
+IVA2LG*RZhLI`KiQQc0"[X,cSNeSkh#0M60q9KCk2SZ,eh0p[dU+Ndmc+e(SC6da
+iFHm[H2Hm2MmHppD$Ap+$Aid&C"9jI)ipE5AYE5FM9eATk[CIGeHb&&CLLrml16@
+GrFeRlQ4Md(m1i`QlNHl`1r`('j&f0!lM$'rhC'(4r`RZG'rcjd+LVGYLCf*i1Eh
+d[(hKiAr,k(eZHrqL$arIAem3mem[Dqh34rLdh4VD@SmrdX5Mqe43U#lP9-&$9aZ
+ViHiPGeVSh9feV*lUXe@Tf&0rCX-2NIV`S+LfNe'p[FA'Mj6&MpB!F[,3EUHc&rK
+6@`p$,8[$bmMCEkBbr!Y0CR-jX[p0*UT9K1E@jT[rLbUr6Kr,fZ((e8QZdfZlV8p
+rUGEUDrAeeC9E@JMEZ2pQJj[lSpT,bmDMKBHFU-h9AHii0YXT2VkM%aShR(T%Rm@
+0VIAqKml$ZI#rikh`irEr4R[Nd9hLp2Qakl&U,$&U,2R(RpaqKf1kMc[(UE@cVZ"
+9F@PZk#lRj-p"SiZMfP*A@FZb`BrKd[0MGp-bqhU*k&+cP23DR[kE9H[1(l2IrU5
+@C%PlEaImrA(mc$UMrLq2`1&aEDlhYhD5G,"h-AZGTUDlqbAbjH4d2h4Z2,c%DMf
+@(14XYDhI'YC008DE&hAEA09rr*,I8d2bD$&c0hd+McZEhe&8k2$S+,,lH6h@Qdf
+ILCEje"LH[-e0jCfh!Y1,BAGIGedQIJS)Y"Y04AHG,pA#b1Gqk0E5jL04dQ(#MCE
+FAGVDmEC5[AeXQjm,rrBlY"mRFARQbDrB@'lqrhrhp4b+k6h@Krq[pG9(rpANPl'
+HqA4HEJl$DaDH,8C564CIq@@`Zae0Cj8e63U5ET)@XakkHUZmQkc'V-DXkI#irM8
+ZVq'VQUV18fFq,9l(4q9`I&ZI"rj5&qN)AR89VLaUlQJ'YG[FBY&j[1d2i)fcPc9
+4QkQ60e'6UX'EL`SZ2AFh'MICKFhTmf0BH0*USI6VEh9bDD*f&+@Sm2d0PKA2Jrp
+*)pRSIPd'(QI0jY4U-,[U+BdGhXH"Yr5p,Eh&E+lEcBfS`TUSbG6FE+iU[@Qkb&@
+BpG,aShJ`TI6PaUVaZ2Ur@Umr96Y01r&Uj1MS[SbkMUVR8r!aaD$jHiXr0YklFkh
+TfGTClQ[erGD'mIKZ`IpUdeQLdelQCT0jKfF66CDA+`jVmfEmU9p12Nr[h@qQmA1
+4YY9HlmA[G+SrT86P6bp*aUkBYImE2p@iNf04fG9+hG,KE+03Gj(S*r$f10(S0"(
+S+$$UBmh6B9A'K9dV@aZXYC2JE#RedDCUTIYHRKh1erImcqI3cXe%q@(LkE-eHqP
+qG%1C1@A5+2bTHHMrAi[d-j`j1pr"Sp25H"R+1Jed,l[I`[,e%hY+ZEf!"df2AFH
+9dq2*aYK'QH%"-UXM3Z&r9AFHYmLXeXh@"$U!NR0K5jf,T-p8I-i'(VERABkJlQ@
+AP(dqMIj[TmhfTqTNkl9DV8dqYU*LZP9-D&3B@XM6q2(RqPQ-2"`r'McmhK9XH&5
+bYN2q6VDIA9PCUBY9'+DqaZGKm,p,bArcRqeA91(VULBiejHm'9UBdcBB9A(K9f(
+9C'(8p+1Si8f(94jZV`YE'c&K+edEV1$HmIK5G6'K9A0pIe*GciIa2f[)l2&pUPU
+C@ZTp9i&1+H`P98D&6B96'RqmMcrF8'(if4KeXHIS-,Bai99+VSdcA5GG6kqXf'T
+MGC95rAml#ZI$kEpEb(ap$fV#TPkkScR'Ndq`U*MK$NK@)lTrb)mriG"Kl,)`kk2
+2eq&Aai9T+qa'QED6X+H,@4TLf`kU0jR4hAeVRAj$mlaqYIp&lLH6mL6QEd(mCZA
+QGAKa*l$a`&j1qKf2ChqSSGPDhRJ4Fj[m[GI&[mjaYrT1&[U6JlkTYJ$hQbp(A6H
+ZeXjVU[1khTeYTDDZeYU1fYU1ei8pEFE0m'jll2dmaPZ"GeP$5F#qe&2C3pYRX!5
+rH#HLGpLF6aIi+[afaF9[AYb)r0K5-pjq8fqNi@aUEDYf9YiNhVUUFee90kqTal#
+dZZREA@ZLpV#YVR'em@CY['f9Y@p2AeHJf9YUpa[GABE1MYG2R*lrA850G5m6a[P
+5McBSh[`[hFA0rUZG6Sr!edrUGG0kR@ipGDED`Y0YA@hN6QZLpjViXrDABS1iK@e
+hVk[k1TUjcTfeEk1TUXphpGRU[F6Y*2DH(p,8AQZe&cAIaC!!(0![fher*#9fhqd
+E,II[(eJC*kGY*edEVi9Yc)9Y*epAQ069k#UYUh)e091GrA6PAZ-m+LGYGe-fIeZ
+*i[8C!`d)Vh[k'[VVb`hFLcmr1kLmViZap,X2pj%ljq8p,5F,c905fhE*UDfEep@
+++lkGYGkk,p@&E5#"drEH0CfeEZpI9jhiVE9fZpeGYXk2M%EVUeXU@cmRLHAr,jP
+[%QqhlhjG%CRC-ATi)"VaT,8bPD(eiXppqke'Me9A2q"9cIJ9@2A@fVX,E9eh#m+
+FemA09K-QkaUb,emr`VVAaFj`VUX!@4U53YjU)+A[lfl`+f0f%AqN@Di8MAaFaD5
+2X8mrChRIdpEChmr&rmHe"q6L9rme"qFlhUY&bBfDr09QiIiFqJ@&cDQbi@Q`2Vd
+XAbV@qfX@QZUI`B8M`k'&Gq(3c0hj&c&S,U,2b)Xfd'N4B9h&QEZ$V,cDaGEEAhe
+jZ,BDE!US2BDM2%MGKHFVLIIrSci+plNY&JqK$KrZX1AhFAJA-@cZI%[kHCkPGG4
+GP)Le8LR!Rb)XaI4CLrLjI!LjENaHVNA2&Zred2#i(+kITF[TqEbpI3i1[TrBem@
+fiH"@@9KqQqkGc"9A9N0b#PZS+8"U2HhQXTS+U&AAfVe&2AD2FAp62dpT@FR@`FE
+RG2RBe40D6#eG4Q*V#mDSK6@(4d@YaDMbH*ZIe-Q"4I,h$aj!UklchRc'hdR(f06
+`UhCF,a*[Ae8jVkUEV#N@fZZQTDpV#i9cdP-L4i%@Ci3#ja8FdPMH92RaD(H`T26
+`HR)lZ,#YVVl%@EXl[A8p*ChfGTp[9FReHEl0cT-9B3FYQ[LlDAQCl#LC[#SXZU0
+`$D$8mE04TQ9m@&86@&8D#LdH(%!2[[*ZD$idEc(Dr(QYYcBQXa!$SYC,U02,U+6
+$M6q(86mS03$U-i(1(4D0S0,c2LbHicIc00RBAdFam1LUE@[XI#Y24cfTlRA8Q@f
+@@aYjFHM1jh(Z0jFEa!Paj[!fearKGINr[qG%kcrAEr6l(+I`l,-pp*Ka@Rhr1Lr
+`Z[5#&&)E)iBHlkBV6i#Dl5l1QXGPDq,prj[Q-l5'6rKPjHZqECGMX1Ue2HC2im[
+c[qq`mIC9hfGaipIipGYZfUDLTe2rFcXI)fAMrCfHhf2f+k2AGY8efZlEF9hPEMr
+[VUrb2XlL[mEBeeEjHiV[LkVrqkVUZRNC!!!!J*L)LCQ*UTQDLBLCL)QDQCU*H)G
+iH)GQQDQ)L(L)PfHCQiQ)L)LCGkUUH)KiH*KfUUPiL)L)L'DCUSQ)LBLBCkQDLBK
+hHCKQUjU*QBQ*Q(LUM)QCLBQULDTjLCL)HCUCQAGfGhH(H)L)GfChL(L*QBR-HDZ
+DQTZUZXU*UBQ*ZCQ*)!!"-dC@D!"iK`J!H3!)N!#3!!!*#BL3!!N*Q3!*S+!!J!!
+&3#-e9R9RKh9hGhKTQ)KhL(L)QCKi#)N)Q!Q+U3J+J+DAJ*S!!)LTQA!!#BUJ#!L
+CUT!!QU#BQ!LDQRQD#DQJ"`!+qI1cZ@bZTllmAGBA&pMLm,hfUe2jp9UF,SY4hdA
+#d18cAr'9r$q$00#[Cj()i[XI[icXI[c[DGRMFANHJh(3G"3j(LrrZJ[fffD!Qil
+lrMTHJ[Ir(D6re`Uq$aF2bVb,qZEipjkIiCL4KX6FFc,fq0UrXQSpjVH*c+VKiQV
+pc&4ric(U4rqCc)@FpN,2QEk2h'qUqfR0CB6fYVrUKG,R[XR+hfjbepVQHeXZ,-H
+jX[j3-*@`ZVi(-Nl,3@'fapIYZXp[e2dcQZce[@q(N[YjZNRmG2FrY16BqpAr"Cl
+c1fFIaE'2jNQ2k9K(VE#2`Dq2DedHlV[LMmRh!(33pH[3ChFQ2YE'2VE+2RE6kk$
+DfFI@@XDNYSq3!1&(Qq((`R%MhlLED2mGEaI0Mmlq1XihlYU"2aeS*L-$m6IQ@'m
+chjlrYrqrGX+cBpap[pFpfZ-RrTRZ([-ADf0G!LHC#lRbY6B9H(cGI(d'1VShRB,
+Im6c)h1UEM@4Ch`*HLTmh5A@ETp6Pq4q()FR&lIb*[PBZ4[IpEIHi6hZ`NIqHPm(
+1q$k2Gl+EpfBfqjb(+`dMCdPh08q[dR(QkHQmZjR+I$F#9!`G[!b[&JD2K3+UdKH
+P*S19Y,HeZV(PEcm9EU-RdZ3q,*GSN5lAhV2Pm2HGc`SrLfXIGm'2D@NIN@FIqYP
+(qHaNG(*NAk`NB1`NB5[NBL[N6GG)apGH5-KlH3ZI'rlNCMiGVFq-"hZ)-BL[jea
+'QlH0N!$M4X[aBe*a)p*`ifXYSp9`D[aV(H3IURq(&Ur(VGCP2YI$imp1Le[,e5p
+CDlbEiNDEid6#@p,pk4e0IcT8,VmK,JB5A#[ec!kHEXS'!VVb24FER@-,R5D$R9m
+6R`2U!B$2XMpaaZGC31H%H5fYP!aImC[MiVRAADFkkR1GFcdM'eSJC9"IVLP[h'M
+&KRH9Gm[,eS+hm'9qeqLfb(CUZqdhRJe[#edIMl[LphcZ0h21Yqdq'4J0hFGYYCA
+CE@aJA[i3&pb2M1&(`r#Mp&`VcLS$!CcT-,fk5aJHhAb1&+[,HeV2fCETIecf6b,
+*%mBN6`r-KI[mV8m%N6D%LE-N6C416*MFk`Tm(B4Cf[TjfZTmh@h@HTp6Zq4Q1Gb
+FKYr)UZ9N*'pm,Elh@HpL2$kRj2(kVRF,LGAEF6UjI!jee9EI,rZNCIGbpP6j#YP
+4qMP4m(F4qbTlp*MIfXSeVCaYc0@NI[jVJeH0bPYk@LS"Fr93AZ9[+bYl$,T0+%N
+*H,(q2H@ePrIGm@2hX(qrHm12mGP[,EpF$iq,ZqSc(3fRAIHk`*,hN!$q(HmMCDE
+`m0AGRh0qb(r8$$`[Vl6pX(r'RjIrhV2'SF*Y,HUMe0jr#TrKV0YiXE`BND$L,H$
+dFVY)ZDeGhEqp)r0@eRGG,qLflKLXNfIQmAf5AY*F8'XYk#UYi'lid#YiX$Jm5"G
+m1"mI#JFkfJhkeJi6J`CZdJj#cJjHbJdPM"dNQ$V,#$99m(DqYbI'LeAPhG9YpCV
+Z286%M58@AZYK-lI,i[@A1[a-M)B$dT@m[dUVQlL2NEH2PlH25FD2RH,(dR&MkcL
+4pE`ip9`iqei8Ic,D2ZlD2@fXIeq$(i2"MhGT(j0R(q1cMrfXSrb5Gj`qU[1,A@e
+EpqJqed&lRHb4jfr'pVpXZ4lHAYm6(qAiGVaX9H4rKhI%lRRF2ZirSlZeedI@r[N
+ehBiAU-,@q63p2qrdr`jHHq[Y,,PFMkiqNp2aV+ml#RTX(Cmc%A-a'lfBamV$4Zq
+`p2HmYChNc'[-jChNe'X0(Cmc`,E%!l8m'E!Ebl2%aZqa8E*HMChNj'Q1"CmbZMA
+ZZ"L[m'"Jl1mJBMAf%E[S'2TT)*f1TJ#*JCbBXJ6dYQ![J@NE0@FE`,'*SH$'a9M
+5khpF#2I+lL9[[rJDP6CF,P@hZf["mhLlbFid6*GAaU#LQlH"6C!!id#Qb2&J8fA
+!5NiN#Qc[$J8fPi8#QeJ#DffJ8hLfX#QfS#E[J`+EdV5"69S#9dHQXi(5@8#QVk[
+*@F#EXB&0B9H,Xi'4X)&0BajLcJ8PI!TV+V[GR!dPG!TV6C!!#HE!TZ$jN!!TVAa
+B&0E93#HA!TZ&8`+EKe!#H9!TZ*XB&0aGJ!RN3+EME1"6@q[J8eaqS"2CTT@mlk$
+N5NQcjPe'TZ2%cA(TFVak$&A1Bi0[NIUNB$akcAIK5blN#E[#p2qm@TUEQ*0@mE,
+F5*8F+*ZV@*CfN6iV+,d8QRk1[Tm4lP2PYVFe92SpCakLRUIb6GhiQhmAXC[PIUq
+6EqPK19VrKfrLj#lf'hd[jC'Nm+4Pr,ZI"N6I!P4X(EaXIaBfFiFE9m1*Y,D*`,1
+0b,'Rk1ZTmY8hGRbbBrGIL6"2M#KklNqplApqlXGjPq$(b&V(QlD2K1&(qj(i0E`
+r0MhImG*a2hEALH0(YIj!M`Spq"d)l52Pl+VKd&2e[mH&)q5k[1,a+cq2ieJC3ZB
+'4ZMHN!!b0r9N$+f9icL"hK50)N$2SZpRcPJCrU4Zqaa0hj(1ZpMcZ28dqMUVRaB
+dcAq$XYPX["af+MB2AkqTNk5Eam5MT[1Sl63iV'a0TN[2QZ&Rm9ra%j%ajY[jNM-
+D1li-Q"l(95Hbim5Bim6!mL*I14Tk(`2*j1aLeG2[)ZmKm1KiFrrHrhqX`(Mp9Sk
+fTS[YfRApY#KFrY,VMFRKHlFEcV,G*j%leRCcNRA9Np2fk6K9G9`Sqe!e"10@fXE
+Jm'0GfNEil+R0AD$de"rM59p2Pj020f8A#@F@r@FER!jD4l[JaZA5F'2aD6JeIZ4
+r&VZbfYVYX6(hHjmffmAX1,*eNaaE(9BcLfGGH[!r0@E$-hliI(qr-P)pG9hZZX0
+R[0&NG*S-Y%kR'k'bl1MS0CQq$UDAGC6KCRjZ*NSPcf-eaFA%jRC4VbEiQ'TjZip
+2lI&Nm+ci0VC@eM`T2#Nm+aYN$H(BFEdqVZ*')P5-4e&[YqN[,Mpe[YqKkRMIMS2
+Lqp5h8e`Xc(f18`0TP1iTCR3CEDGr'eQ+NlQ[hR3EM(CT-HQ2,`[B`GKYZXp6BDH
+NpE2jl@EqLrh@l,8pP2E@YaIp*cGq[f%pZrAr*29[XGMDHe)R1Yr*!m(GrmCYENa
+36HHjk[Vq0AI`b%R6dPMhAHfdHLVBf5pIR5Ccq8DBpQ0HrEdrbqjTlb[dpK*drN@
+@Rlqdef0YGV%i9Ap-21qeZr#Sh+%pReprTqYkbXUk2eBqJpDVc1rjeP1Df6298QF
+mb`R2j4m"r2EI,l21pbFrcXTAZED`VZGr1"eIV`T[ei'4VB(iGPU,,ECQcf9&DEE
+*F(RHV!mcH`2jE,!F,cBA"h2%mb"rQUJI4RlHSJpA45ZGNTIN3I`kq$hZ+Zlb4r+
+,aF2bi'&VDr1Arp&Y5CP'&`SrXp,4qcXVAf+[dZ('[h#MrdNakhL`Zf!@"Q1&(Nf
+A1i8H`Xk[dVD&i8IdVD"i["l#2iPVcJ'epY9df3XiAZ4`'J@YMM+ZLiR1XCQ2NZ,
+9iE1bB(f4jJe5EpAiqV`&acUl%alh+f@4fd(Y['R2'JjIFq[XlVRDq[US1NepIjF
+(`UL"N!#QZkL"ND,NhQ`J8Q5pfmem$@6([hQmmhPeIVr"cZ&iGrMFLpIHLFHp62'
+r&JIpmEYqTRm$HU+iJ@qife)e9Kemjl[fpYpfHdrhI'pMA@[XClqhmiA5Ha!5-r!
+KCMI`-l[S'Yp@&iZpJHCkN!!pIcZ(jN$NkrME5Ik5LZ2*Jj($A2l)1HkE`EZ4jR*
+qMNlIrRdkEUlR&lI&j'9-lHqDAMBLV[2-iID9HpV+[FlfVm6eBq[pDVTYr9pa[k[
+*9YA-Ha9hcf+ZpqcYVcfpY*p[EHYlQfmUZffNp[q%pphqH2[2AhhYEZ,R8EhDchf
+GTHHel'reh@rGqhLE(6jfalVaE'Fmb62HPB6PVA6R*pbHrYlFjp(Y3ZNpQ"LIBJC
+(ei@BVB'Gi%,5lq"i[V32-p@&k@pJH[kN+eV)(+fI'fXrdQSZ0T2iQLPqG"cZ'ir
+l)1ZklaZ6YrEVC(llLmpcJ9Q`l[T,6VmG16hdPT!!NeeTX+[DjcKE'*@k(KE5Ji2
+Im1TS2AlrKe8,er%iAL`YhZEEcB'lhYVYS'eVS&9ap[T12cZ2)d[(ND4!X!e$14(
+epG(fIVfXj(h1li@*UplYH(0eIUeA$amHATH*1U#alQNiZ6UlV,m62aq4N!$KE12
+(kLmjGrVUE[,pd&lR*UEqUDhI,Z16R)ZIXVQKk'A%Ki5bYqGCm'hKp&F4El+r0JI
+KLrqmQAapl&bqVPH$&`HrYi[4@GaTkI"IbTjVG5p(qf$1khkm4U-&FGKR1`Tlhe@
+SQV$(8@9h19aQFcqQNAk2XXh@8e-Pm2&6r2RYAFAPIaj(kl',8Dbed0ICjr,8Y(K
+Yp*lb"-f%I+9mE3edE9ErJkD*jAmSQdfPVV1EED6iiRSr2%h93"PVTBP4ZZ$RSfL
+i&R5p$J,'PkR&f&,Kqih8QGbX5LUqQbdQZc'Ik2VHrQX,0rA0A'hTi11f0PEpT$k
+RBfqMKhkMYpM$`Q9Z2%LcZ9ZFRmr[Fhh[MTq2lrcqrcH6KSZ[RH4-aDE3h8h$aIS
+A%$26q#e0cEmRaUc2k"MaqZHZ)[A`1ZdPhrI+fhJ4)h8a+236XR6c%5CX1`LG9Ba
+qKXpG%dHq(M8IZLE5TYG*cEE4r('hAr-6G90VTHEDkDPfQkY0G5q"A8Y*AdZAX+A
+!i5[cf,Vr3lqJqlAd[@cHVr2A81K4jGK0mqDZ*'hkDMd-VZk'qfrG3qTmU9R)H8S
+lR0`k2YSZKa((SZEb,Ikrcj,qR,j[,qIPmhPBD,XmTGc-A8D(McF2*HK+Jhf6+dG
+$$kEGlLXa@L[[`q2eRA6rf3V1*XV,0`XESDr0kl0q04q,S[&dHQc[Frh`8QmYT2q
+-&E4qeJHA@H$SdPcL-McjQ[ed6THUrIQmch&*Q0AR1kT-I3G6qc99p,1em5CNd[A
+k+6%kU65c9I%aeI5jU[S06kh"cY"VqUcI"aGIDQj0GhNrrc3l(MfYT`l(L5H*A@r
+RfAPd[Pj[Kk#Jrkah&c0$d2Aj5hS[QiZDTE,3fe*5l(I@0,L24Xl2KeeK@3Y)P%%
+j#+8C9jAmL4qfaLl5UYG&A@QJbY,SXCj9P631KXHmJB*+@C-HGX,b0PE$qqkXSQ%
+Ne&j`BAKfrAD@qrSi1$`2DICNHr[A9FMfm6`,UpB(Tjhp-#YjGkq,JrLRUc&kC)N
+i+J[Z4XB@KXBhBiQ`MC5cqrmIkF6Af%I(rihQ9`qk`APB6Bi69rHUFcSmhPmY1jh
+fF(ipGTY2I[d@d(%Se2J[,HpCHpGlFrQ`9jTj@dYVH,dFU,d0c&[R(Lh[NDHIU21
+j1PJlrAqpSi2(TZASD(MjAhXr)hq"QIGmL,k1Lj1NKl5SZp,&eISFM64G&[lU*$S
+l1jLp&,jYa&QT8A"5SdMlAi)1UPfq"L*!,UBAf6fVr6"i0kkHqC@lr0fYGPi[6CZ
+Nc'6QZI-k[blQRJp&EqedY[QY$j1KpUqGT4pT$Qm0CGaC5qmJi+B%EJ*9&"QCA1P
+b*fiqHjTmVFIifPe&SlH4N!#A8AR)SG6b+l&pkY%5)ZUZ,H*a,lPFpEicbT@[J3j
+h!@iIh%1EP4H[a%Z,er*Lj@hN6IH`Hrj&GhAI-['mqDP52mGGY0&G8X1CZ)I3bmp
+$cIlSHUeA*cGj&fRDcAZpjmG2`2p4GrL16hr0j1KKq9SZ4SiHUmUkcd2(@m2UT9,
+$Sp&bEMPb-,A8hjeQ,MaKkbiYiIflI'kVdlh23m',c#5iI4h9,6dIZ4GAZZ4VBY4
+qk,8e(*dRaaI,eI*dR0ZpC&U0S#fVhA(dp24m#jL5*Uhlb$d9a6GT&QXESVR3m64
+H"bIqrcB+4ci02ipGhRk,pqMJ`F6MrVQCAJ`BRIh1LRCqDh16Z)GlaY[$`%cCbZ`
+cdA,IbLjcbq1@&2qDI9e&hSrMTkLSZp*mr)d[05a(ZVVA4FYC5j(3h(B4HUX*U9h
+H,LcZIbYeC4DR9hV[GrHU6PhR)VTc8G&NmV-GF8'D,Bd'PJCR*pENU21B[1DUBdH
+U`(JDV!E(Bi$rjr((mRr'Vj-MXB09A82Ip&q(G6(h6!4YDD4I*fNf0"S2PPpamYe
+LlbKTZbKd@)Zj%ATS-+jpV2A2Y82AGGRE[8GG4i$Mb0Cm2)04(XiH6`8[&aF0MF$
+*lM'l#LLp&0Q4[8p&N!$rVX1VRHIMIEbA*q%RKi824A92Pj9hplhIeh-A[DMFl(F
+l(Cl6AqKVpp6@qDJiQkd0GM08X[-38Fh1M[,IdqPN6C6"FaH[QTG2f55i[H#P`lh
+K#&P[[p"2p,E`qQ-"eEh'V5f"0cA2`pjCEcUU[)HACCk0RkrQfF$YCUaJIPL6&R'
+[PTcDk"ql6324m6KFhAm5md8$l0""k2$A(0Q*Gj)r,&r6Kq6!r2`DI`%b6j&%0Fd
+-lF(M0UUI"5Y0&QCIG&X+%"NqDbCD#`Ga"`GKe9[2c3#`Cf``9KFmhFilHh@Q`fQ
+JppT*R1`GAVk2AhI0TY9U16SX4SS2mY"LFh"hq5fQ5plQc'qaI[pj28d(r-MSF"m
+%LrAVTjU9qE!AP$NleNZ2"lHYl[@*!E&62fBHmXif@rK9iL[L8GI3H"A3YTk[#dd
+#der&dF,QjQid%(%6&chNr5FL,8hF@TiqhSX(,`dA$C@hRBR-m$LBQ**h9Y24YRA
+a2%X)QIXBNl*efmk[[B(D@9ERpDXBmHlaMlD*NV'0KV,Qf%$`SPli2J`L-[ZD5"D
+CrLFfQih0b9[U*rle0"l@EZZEb,bKrG"rE-FRQFQ"F9d$IEQfqIAm,`%+-j!!2Ke
+p[MTr%h82#ee*i+DUrhTRRiIY[JapaS)FeQT@URjfQPk+Ia'IZ2!Jc@[Z0,"k2Cf
+qQJ4H"bUIIql&i(ZaGrlXE%dplfPa0aCM`*@)LiE45mG6ic,A-c&lM+h@-TmR1h0
+&&Qr[AVU+f"d$Q[fpGC[1lV5ZEIlXV`ZIicI&l6iBr-hI'lA)b,hrM5b2i@pjEfR
+MrX[4J3brE6re3[@q@iqEMI2a2SiAr[@rZQ+[`X29rPQU[YTZV`'iUlhrmfA-h1f
+[21f8VcpYBHKXYlZYYZI4f@chHflrdYY6I[ffCrKYXP[0YM26fdar(EB(q@f[GCj
+[bqTjYj[I0PqVjYKkhQqV[[0h1rmhb1"jZ[VI0lrer0T[Bmh-rcmh*HcjZ-pVcCM
+fr0`2ZHEHklc)A9kq`mZ&NBRcIAJIVl1qp[@5,fmq4Cr1-U4ZjZQYTVpAd!,Cr&%
+q+cjX$FkA#!EVhIMFTmYZj@bTm4Adr4bB[4@86iV5*CfX6GF+*8F50PVH0dGcV+H
+2&q6K9RkEjp[VHrKBir3(LARhqU[2aB'mr2e&jYrTjI-`R[pRYq0KT(Uj(PBIElQ
+Nj11fq[dYhL*(IkhMcHhTYVGC(Ej,dVRQ9XZ"dNVQ9mM!@'hqj!1A$-FAQ@8H9Ce
+I'J(,,iYYc,@2XlDVrjJ(+eDfI-iNHLiYAq'!HRhqeI%j2X@YGhX#PkfXh%#qrDr
+IkH4qr2I9fRA`mA!jRhSAcI$FB@p3rKJB$IIp@@q!IS2Zm[*A(jH0fF$QGM$l2Gi
+6S@[%0IYVY[Shrq0ClQbdhYEZmpcCIrpaX1LASA0p2VU,kmr9rEkQVb(Ff1TUk21
+f@EhQDdYPPU[-q$Bj#VS[-XF99i[dT2D9H,qRT,#FkZ[R-6aYjp&[9rqmEEp)S6c
+VL,MEQISVVQA8'LX*bQNcP&BcQ5XTc&f8p-@Fj-@NjJ1$1IFJH*ZH$Q)(NkqecN$
+D8eVUS(Lj+ahY$h&e"cpeKDlm24V++&p-pi(`4Z*9lH$$a&c,ZBFAVY"b1*hr*p2
+CdRQl@LK98IXjqDU*8@Gd8Z(PG&Fd0(PEUKd18im'SQVerj-c0lkIZEhf0kb&lkf
+pGlKHSYkc6hjU$2Y`B-$TZAV2HVq2DmEArUMqM5CDcm#SMBqUm#[eY9V["mA@kla
+[!MAlJIPMhkYlD2K+lpAa9H%V[hB5[MhlYJ5cPGX[!ehMDh`I&efYUSf$U[!NKeS
+k6,@`L2Ufm6VZAV2IVT9j+h&C$k4B!#ZVlb9b+kpGMT1*(b%QdX)q+b&I(`RkCZZ
+MhlpYE@e[ZDlC4[ZH0idIlhJq0'QpVYC1Ym@0qA@98E`0Ci&VSkQ*[p*SZ*UGK6p
+&N!#GPm2N@I[L'ePkJG0qQ$![pC8ID5"f1KI92@[YEbRb'eidE"m10R,@*Y,10`*
+-EN9mEjkhMH06i2Dh&6cTHaqLAj-LNlA@hANFkkf(d5r+jdZTjeai[ch'ZqIM4X&
+aSRE412C8YeDI0`UApe"kh#S2*VX93H6jrUfXpf'+S06ZHbR)AIlfBVS'SVTLHJD
+MeFCjePfQ0q'aXV'PK8Xl*Xl$lpG3II6D[`q4q[(h%MLGGUp&Fph$QE)fK0p,c[c
+A@FqEN!"YAk[YFVbHmraR16qRXiZda()lm%Fhb+1,4q&$cIP'fYe9ZEF2SA1LLdr
+AF'iV1Xl0%Ief3qM(bB9c`kAdE6q(eDIa)hmIJME,ajkXLBY"fBb(eBqZUpj#TBd
+cVDk&K2)Ne-$58A"e8$bmAEDqPeQ$Y2d4iRj)9*Jl-$H,(rVaBrqBhqBhpH0%j['
+Lp$E``$kQiS3$8'S+,cV6&30IXq$N)'cepYL)'pTZ&MVLK`dZ$Llbj`YC%aLUr)Y
++qDePG3G(jdR@3XjUl$Bam4q6)eqaM6HKNeA@jcLmlLUSlHPj[&LEEK@&a6i+iLi
++hTqMih1ih1iYjXiQG`PMDI9#m+6qVHBRUj2L4X[M,6B`Y(hpMVD$"lqUX,1cNfe
+AIkc5ieGcR)mr)FAjH23rPKj8adb1VYr6[H$ida'q(%FA$4T@@iH0M@'Fi8e'ml4
+RUBfG6`FK'erPfQ+MCrdE1FM89G'lLZMBb[MBZ`MBD`MB'6'`&M'[GPVS@FhYRi-
+$`2)Y0Ed2HlcdC9Ar'"kPGRmFe"[[,[%d16f[PqRr$Nm54de2ed@$3j+FirbBA!i
+L4NU(TTLCe9[f%p5d29HV,lZ$PIrPe&qbRjq)jI`kq(T-(G5lUjqZKlDkr46dRC3
+I,bA)e8rSZrZG,2cAV@G[58m'($klGh&GVCeT6A92l2)Ph1MKi+`YiZ!he[hF6@d
+Y9$[fVYkL,K0&+d92MGAblbRjH)jIJ4YMl(LC@Neq4cQ[R+2p8(SHlPCVdjV)bp4
+YmVf@hbf%Z[dANLNrTJlVAaD6%A1[TmYPER8aFV4bpA&QYM+dNAS[3Xl,GA'LTjq
+ITqQi&[@GeMedQ*lkFM-FHIcFZmim'LZZfZHiiXcc1,03*@IiH)jR$Qi'pZS2j3B
+-%ZC!1jSHiZIpbiH0PhN2XSXc+[)[AjDhq14JTG"iGGi@3DJ9Eb26kk,3c94Ed23
+qY,lQ$S2%j'9RpKhdrj2i-2bFR$f'9j'6TmeSlR+lIUI"YmMl%pD3!+hbGaFG6,P
+mLiZlMNh&eFbZiZ*-AV-MD`Z"2rGc0cj0$RFCGkLKm[UH9r,h[fcphlq,SC1(ph'
+d2RC2NcY$hqaZ6NlY+L9GA9abT(39hJj&j-,TUHIaqLZ005a1lLp9j8V4aFGSjHK
+LjA,A1JTmYMlUQN8IBjGBfB1krj`GcXiZBa%[b)Z+bNVd$G`d1pQp9j%hXG"N2i8
+PTi$+0G(3j8X#5-&T,M151LePR8frG`qKhXU(I,+9PUHKRi[6EZjV[fiG&lKFVp2
+Eb[KRl[NfpcFh&0M-pQjh,dH2b'@b-ePqd`qB!1HQ-l26(FchCpcN2Bar&a8lEqG
+Um&j'`Q[)fH2m59T*r%Gr+mUIl6'A-Se"lU9alMMh((PA5"GeFA@-frFCbjRDIYX
+I&aP4Lr1U-&iNMVmINH$NIAb2r%'qH6-5GM-5GKM29f'5pA8jRcY6Rr)d(LH*Q[2
+cq6XmCJVLj2,6)rmaPaZ1,0*h,qdlAkS9E$UVV+3FEU,M-32QfI'lQ"rj-eN$Lc2
+U3,1XJFE632JdX$iYIaY("kV8A'KJc@5Pjq$PCMJ9[UGj1DlCB5YVI8ehZrEdAZD
+IDHjhA!pbFY2ERMr#pl0Hc1EfGpQFh0(l%jZG(kmjj'VVCcb+RIcRNEVIcQ`p(eT
+cbDcABZYlUDhXjXGlVVh@kI(lQYdq@epEVXYU2AefFc2Vkl4j,f0Gi%ar2A9'!pR
+CDcf*MA9)#HA@i[CHA`-2V["hf1ef6RI9aqZkV19QAUI!UHlVDcIlhe[@h[!fflm
+HZr$fh4rVRX6emrp-,dVUAC92N@qMJcY&GCq$SjMNGj&SHZRqaJiM"5p43jEkr,j
+8AG!(bSGMle$Bqr2h2[cr`6pjbrPjIpS2q[ZI,lm2JFQmfrPql$PbUlm2DZ%PLT,
+SAqjrUpG2LqAm8(r+'R[d-[hk(M80Mld2GFVQmURhA+TmRL*IHAP2"JcrAC5Dj%a
+&TXVFif,M0&EpT54*Gc9fq![kq8+DqbCeEU[HDkKDpmKICQ5qeGIKpAIZJ[Nj0GV
+ci9c)radfqSl[-3p"[VNe6$RBYid1Dp[4(200EqiedA"@Ga$k*R2G$RGTkI44VHN
+iR53k2I(ja69[$`31bU8+THHLcZkPkhQh1PjYcV)Y(qZSZ[#eGeT0"Q0CcCfSfNl
+Upe1kVdFRUSGpQk1hc1ETqLh(8DHXU1XAT222ak9R'L3ZYkAUUMbU2cUr1CLNS*R
+0El9eqCS1UT+l[+#Cr,(kZac8HEXG"%apPSD$,@G,b,2[B4[64D[V[Nmq,59%[A4
+CU[Li+`2j+LI2Bd[qBe(`rRXiJP2-XSq[`GP9kM"f15S+E(bFE3C+MVmV36'VpEB
+lhbp&[Y"A5E#[XDZTh&Girh8d[qeAQ&m[P@mZhZU1*4`jRe[2p#bYm[3Gh$`qJYm
+l$bH61C20c-V43p-FbrJh1ILe9d!R(SUHUirH4GU!Qk1D4!6FGCrebS[a!(bC()Z
+j(aAFMFc9hYpR1mIdpRP12q1KeqEZU+(U0$Fj1(4E'9PD(*HKEjH(J,,e[3p@94a
+HKe0eEh2%f[+m'XfI@Vh!-GpF#j+SMG+Rk+dU)&,KS%lT*2Ga-2B8(8bFp3CAbT0
+65j+Cd-R$CZPb@8bNQCc-6$8Fc*a&&5iE960K0rMjYILDkZa9GkZmqh19hRHcpU"
+d[h0RApj53*QClq`SY&!QXGQE$0CZ"MXTNV(0jQ"MY6-@1BMBhG5Fp5c0K3Af684
+-P!J8@Ni,5qZS2EeRVGGdrk,Em#CaE1m[82&iUcfq,beY&Q-j`SZ!cR$Ki$1F5Kq
+j04[Kidk!R-m$M32K!5mU8"10#iXajG[!h[Sf@*JHjLSe&G'F+LZ61$h&c!k163i
+Z[MB+AlmVkrm6&K'`9a#a%QKqp!apM2p2-@*X,GM!`&P'SYlAmbcTjL[JD1iKIFJ
+H"F3-"D8pmVS&6E`Vh`Bhqr9i-EjDk"jI&S,hDaVVeZ$'Xr,Y)flm'bUk@qAPR6r
+lV2Kkqrj$iXjq#IrpRZ&AA[#pCEDchq$'kEfG(*pR5f8E1fd6,@GA[l#09F1P`GV
+(ZDk0Zq,24UhLpSIZCNBr"if*MAI'QqGa)r-1qEmZNiXLpR`"TYIq@2cV1E`rd@m
+DQX*'$-mPa'c0IYm(C3ZVZ)f6!Q[MGILEMM+%U*I3`JXi'*3b[0[dGR1GK9mkca@
+'qMLb*M,J*Q1*)Q+6L5-#!Q!eR$3%NAbUi8Lq(BKr[dED2mYG'f[&S-(`BpeB4Y,
+`bf09lZaM6ePA@FETZ(jFMqpCphM9h`9hpr[,iFqiqRYEhM,hVlhiPkqeF3IIcX'
+dUFrbSZ#bA*LdH!j-2blZ([VZ(GFH(m9c$qH9&[-&EaIKQZ"bm0i-@mSr,pr(Db,
+HD[`2IQpA6bDR1HrLY66f(!bhZchIb0l`F4lX("iMP6i#3F4K16"Rjra*FZlJd-r
+hpc,imr$RkEMblUILcrF'h*!!C%rM,ZA,JlA"bS2SiLiR`%Jm#EX2GeqbRkh(lhh
+Y6i-(N8INHrSYC"j'Ve(,dQLRrLfP&bp0S)20hq'jFASX"biZ)q#(PHA$d2[`pMl
+X1Tj-2Ci+kLl2+h%AcY(8qpLEVhi2@AUq*"bprIVZZl!drX*dNrp%,'IKr4I1arq
+GrmQEq6(hr*Bl-rSjH$afC##%i)-9M-hMqZrrGrQr[j,"r*M[Nc2bIS[RCB2Z2[q
+2if'5YLI2SGkZ+erXrlhAGHKk'HrMKh!1l"cc&HjLp4dI+mpJGM@!q68(mrGGcZ+
+IVZXleq%-d(@'lR2[erC6+XdfBI3[@SPq(e9$ID+pBkae&k`pMj(`8Xp2fGMBmQ*
+3p$aip$Hm2F9F2!6H@`jk@SH"Khf9LXY$kQA"e0a$aI(Kp9,Jk#9$aGe$QCF(+5i
+H,ZD(+5i11ZBH,P3mh,JiIM`mAF3p6,Jp$Gd-aF82PA%(SH5AqIGSEhEd0ME`)Gc
+BEli*k"fprc%$mA8CD"q,!j5$IEeT,Im@%Kp$Hr@PrL`82#AV0@q8`Z"TFYKHSTF
+aKEr3hcHmZPS)0PBfm'aYk'pql5`bc"d0a"mQiSCLl4UD&'T3M,cBe,Q(MTF(*M,
+P`aU60d05Kd-Z$e505Kf$'TE`aUAhP-DPPle$Hl(Pd%j$qAHlkpAhCf0k`qSXVeM
+D+hlI"5*LpH8G2q)56rfZXqLHaP(PZbrCr,UmC-IdepjU2#a(-!5E`GGRTY-fA8d
+IdG[G3HiPJ(2ibA2pXJ,M3$!ZKl+Kl($bSIC82C!!#GMMTAqjAq*QArZAm-2YU(Y
+J%adZmSI`d2i6I6!-r&DIr,2jQk!1ISZ22dA"cf*42B'MrplIVLTRZ,QI!2m+!V5
+GlDKl9k*hkqTZ2KKrHSI[!*e9aH8)&81'P!'!Frf8q!S"iZA"riZUkJa5lYmcp2E
+h(qrJKrqC19fRFpRRFaDCD9S0*eH6c'Ab@AUFAMl6!B1AFAFLjpq4)kl(i$"fQ,a
+p9NX[Q-RQ-*S)Z)beVQ2apTh-rf16q#(rQK[rjX(1,HCb(dpRX-6rjqV,jMrA*k[
+RIJr9Q,cB@rA3(&!YqH+"Erf+c%k3!#"Na-C@IRl*@jR"Z3I[8(cI9r[M8[f8(cF
+C`$Z`FlLVpPUJpa"[pGeID+aTRk-1eG+mpcGQQCj4bGH3!1Bh2rSr9GIkm6Xqabh
+Bc8eH6A-TZqa'#`[86ka%`AdiA"GRGG"0Hrq22hqXihEU+GVp-,KHRp9$Y0eFdZ8
+Z)ARF@&m2#RljD`FPD3DDbJkq6"h0I"X+k"PV+FJ3ZPaHcX+1JaH[VqkJ6'SVUA!
+@%e18Z,VjQFTD+[`mj5k,Aj,d,6`-0LSP4VjMd,A56(-fPVT1`a86DH6k&YTI`Df
+*ZN#1jLE6Crka)#i$d,A5Jl8E1Bp#deQ'R+A4kr&lkbUK$B["Dr*#EafSTUrZX2S
+TU"-k$3paVj0GjQjXBdcABAlZ&qkJ*"hhUmL0I,Q0h('MkVJeGRAHe!p1Vkh`phd
+fH5*h6CcjqhprrlKY[iqlkD'`3qcYq5#&[EpGqCNX2rClp'[m,%BMQH&L,c%IdQj
+M'I4eRqYRUG$M,I#B"*1p2IqE2G6ql5H"8kc@kAZqll[ZZklU&e&[K-#`ErmR[*r
+GSpA8D[9k5NT-lQ-ah-,VH$K1T3EkRlAc6[ACUiMIm8QDbZ@SXlr#4d8[%m'BkT!
+!E`PrqHHq'$UVVYX"G6%rM-A,`mrJFc*lrcYMSG[e[Tc[MkcT-%K,epmrpl19EpA
+Jdp$9rqjmF+MmE-jrYX9f(p)(CB$Fic2ph8ILVZX`LIUTe0rqERrT2QrK$,,+q%h
+l2"fF[Z[(VX&K8Jhe2f[Xl$MpGMEIAEADlAc*&pPpGq+ZkrmLYlTIQl6Ch0$0@qb
+b@BbH@bZ8brFGcNSACcr95m,AArmVLe,N@V8Y[KkGMhqDHcARrNQUM(q"1e'8mV+
+J*Q[2r,h19RXI!a%pN!$VX*AIGr5K2eYqqM)DUi`@fa[Vific@6Kp6NI@RYTeh9I
+RVX(i5SAT2Rb1(XChGB54q#DZDV"EV'f1&h&6A*!!Pl5Lq[mI!SIj4I,Zj&6b6KZ
+KllhBIV(M&pkIZ1J`(-pkmSIic9hH51pa9cc*Z9Lp[pl$b,jQ10c0*aF49r"0al$
+c1&c0hEANjK1$c29MjreBrI6P*BcfGNmcJ4m0`+[ldQZX[FjRmpPHHcY[JR,[fEb
+FjhXFb[fAL9qfm+"N0r3BReBh9qTr$r["hR!hhYELTVfQ9D$+UH4)m$N8qVj-2bZ
+6$mrP82Rqk-V!c$E+I$+Mf#XVm2erJVS0MbMJAb9#F'19SElX1,h0",p5&*p@&[G
+pKEehN!"iZ(j9j&rA0mHmp2m-a)`f*Z1CPlI'eIf68Hme[%jP9`m69qjLSrmCMe)
+rr-jN,1Hb&Rc0p(lMI9IE6QXX*l@ere3ZPchf6Kq#eVlA-pVCF@BpcCIbJB5YKGA
+`1C*f@JX0YMkrEGClIUITR0GRVIF98P@IhAepcl'Hl1efemY+cb,6eFeDC6eE6)e
+PT2G*DrGah3B,*0aDI%@YKBUbk(kk$JGee0YTSP99@PjY+[@94Scmre1h[@fELNr
+-8YMC+amcpG&lNA`EQGRqba8(TmPkN!"qjLS1'cpckHVk$V-!h%pla2V2@Xfq)4[
+L%Ira#EMcE4HVmhVrDrKN[BhhU6QZp+Hl[bY6kZfaZEhZbe11p6AHVJUc6rfmZZU
+Sf)U,(4aXVSl20ap$R1$Niq`q@2jf*YXA(p@EiICGA`q`MbX*a[Nfrh*(h+Z`jNH
+`a2#`dIHj#fQBqcdGV04p48fQ*M89C'aPC'aHpMB$IDIQF$A@(Vl,a2jlE*qhk86
+lZmdp,l(&[)Z*P5-4+LpV1Rprm@Vdp,X[YefimMJrDq(ajkGSZIq2Id2I4FjFb-Y
+G8qLim29FL(UEZKf&h2rXk$"IVJkI&Har$)HhVXKADHEVmpf8I$lhR5ClXFKBcNh
+Bcf%XTcVj[IcNakPjXUDZjfqKAleU#rEf*dm$T3'!clQbc0GcYr!kF)k,DlqFbAm
+CZdaA1XqdjeR1IFMjQXMj1XMpakNI'qT(QI8Mp(kQbrY@I`rKJEcNG[Z2)Y@QYCM
+@bdZ4MjG21h820h823FHKd()4VHffeRqDhPfbYEm22r"lN!"f((LjH9NU'qj2Lj@
+JXGKEGc3H4kN,a29KDJ`8l5miqprKqreGPrAeBr4Ef2e@pjeKhAC4mC[IKMj,HSQ
++*'V[8F%"'4XXRAE+DVVbZ3'!`G[h"k"([X6XUEeX9H4p4r+2Rrj4kDXjeP2Akal
+Ur%(C2GB5`cf%VYGK2Efhf[Bp6YB1TV2em*@e3mqJXU#qh@QLj#UPAQdfmh95p0&
+c9Gfpkpfm[9,ePV[*[L4T[M4-*Ed[hT(8er1P3Z[b%Z"K*F+rA*%UbJB#Z[)p&aZ
+GB`MYLjeI%jm$kJ'!cl)rFFER@8$RK(NYVC3-Ar'Eiq+jeefR1ZTcRA-p)aYD)'9
+3AkiTEpaSeqiQfhPAI,bpD$FBRKp$DGGplV#3!$KrBj[VkkUVGGjIXDId2jjlIIc
+lUapRZT2YArblhN2iGlb0PT[$`fiaA%D,1"hAmY28m$CH"`0GUrAchPH[R[2pMZ[
+2rR2A(5EM$H-I'VIlXir*cLU@PJ6HmUKU12)bH(PC1K[ZJpEBH6jrL5HrZ*f$LqP
+r2raiecrpQC(Fq(raA6('8Z)XBHaSpeN+VXF6TCZURGeQV(Tlqj*DhA@r5j!!q,*
+GSI*2Nf[[@I,iHmlRK4r&YBqli-HdY)r)XirpE+2mpM)k16)[aPbX*'%Vj')Vj%h
+A5-IAANM)HhN,Ra[k5+(r0MqbACIYb-M-I$YERaJApa#(%9r1Z)dhEaXKaSfAiXD
+NiNHNiFE@@dHUi0AieM[)2e6r$LeIMeRcA#jdHkjrFfe,f(+fdrX[)Zl$0AH8X,[
+)qeiRVmVVCRS1ZiG,l@mp2fD[aGjmPKl20XH`Urpf8a)[GRKSr-Xm09hPRKipjCc
+*p0CQVX,1DUplCiL1!PAZE1EUpRCiQ2Xl2&4pICiUVe&R14p4C`,pC`+DZUk+cJG
+AB`+D`Mj)mbmQ"65DZBXi'AX)&0C4m"C`-lA3+DcMhZcJDcHfF$@lQcJH,Xl1"Y3
+%hH[Xi(T#&V3%i00C`,84&f!RaL(rYLl1"p%aC`Em!Q%`&R"qlC`F9CmbA9dec(l
+k$R,1$SV+Kd0M&d&KkH6Uj&mrG`EM%lMbC5q)2-r5AqIqB[JFH4Sq46e&fRH!mNl
+`(+Rr8k$U["ih!YGC'Sr9LB2IDli[AdpRr26lVfY28HjTp&AkI,9qZa%RAIFMCcD
+f5I,5dU)hPrNQlAa+[c1aQq&qVj+[em*`YIm0AjQ3!,AB9HYr,(eRK4k6bl,`Bq3
+V)f2hXE"qYV[RhqZj&ETq2l'RhrXkl`2EefFVpGJl,@4YY'rppRFH6,DDpQ0I4h8
+M1A924mK+N!$B&5(*4Vr[EDlrQ[jPbVAr&p*IlmqlLk5jb9$KmREj@JrTX1(h0"k
+[U3[1p@&Xbrh8lckBhPe0PTjf[efFp[6l6fG2[rBdr(VG2cGr%`AV4X([Bf2V2RX
+YE(T+Qdm#2V0(DkUmMlA)fZc[)pEerTF,pNHYl()f[N4pVQ,6bZGD921X[&MCcGb
+GPdFRABL[ef@pcAD2fYG8HeTper26fR!ehpGp'`IU4Xj8f[!ihm+kXfGdVFS2TlR
+Jd[BFIE6rGH4Ff'DZFTBA14pVZ2AijD#k[cHAChHXTmVB4HMXBh(i-6Ifd6DF1*U
+q,%SlH*MlH0Jj@ZqHjeXM,e2(m#4T0(GkUmN9@4ZpRH50herTFVpNMGpMNE[b*&9
+Q12jA1ip6cVRaDI,EZ9XUI%9p2dFQ0r@bM@PT%Xl@*ZZ&'dI%MCDhMG(FkbRMaIN
+i9Cir(9UrJqP+NZ4TSY*9A*8PPkSUGe*8PaI6r[&UDQjL69['bh%L9(#LEUeL(5[
+m9NG*02dGI6iMh+I,E@jUUI4kcMe&28rNQl[a0[i[BcI+r9mQhp,#FVAr$Yr&b&h
+X0[TIbb0*i8M,qAFq$)Qq"+MB1hMBrLaXj`ifViF6D@d6J@FEN@02dGG6jDTZl2P
+lbXV[lhEHDC[0-hQQIh00Z-pb9dfFccraeY$aS[!j8MdIGTl2hSGelm1jjG$r6Pc
+rqZJk[[CckClDlclAUajhI4mR[rllZbR+QaR2h4mAl(cf%jD9djmAZ6h0pZ"J[CJ
+6[V`U2J3[!p@JmbSiIVmEIA@fYpaRZ8dRZ#*ldH6)m[Ndqdpe2)5chR#HrDq8pqA
+h96hiZIq#[Jrdpk,Zl[*81JbGcPD($l#hlQJqAe)A`qV#P%llDmpceIAmDZrKN!#
+6Tk5alV[ED249XE*H[cT-jr+0-Hc'[IYkIjIFdpjAkH`NkIb,,6prDDl'fZeLF+V
+qQ(RIDh'Fpj9&q$Rd&EhA8m2640h9@T`Yl@U1'Dap6Ylhd6j696lk*VYD,l2afY$
+rQ,DHl)i(Zdqrpp+12k&((`IIkLrhVGhRYHa[pGe[hIYiQadqGXHkm@aR2-NchT@
+%jDedjbIFR[lHh1I4l8,T2CJBRf)'4pH&Q+f"RH"#dZrJH,kd$c29KHP[B(VqT#Y
+Db"bYRaYV2p*U,MD6q*STIR3FlKZ2qb$VZZmENlIfkf4qqi[2Fi&E4m[lA3AZGl%
+f'EcLfrTrYdR+iGYaV5iXMV6Mj'`MjL[MdPI(dPG(dYEDE+2VGh`I'rV(mADm(aZ
+GDHEcV2E4mlA)4"4LC1bpQKk@*rH2[1,Zq6kI6`2lq(kR5r"e&TKIcCZIqQHVUZp
+m5V[GGBE2K@'chQLK9HLb1Nd&"89'6eGIh&"SUrZ-V5jRUV)"0"D4meDE'PUE'PU
+FTE4-GED#PhdQPhhE8YcB8Yc0F5J`A%b9j%q'[LI$0FD"JZ0-I2aB'$iXa(P9mH9
+MrITj[hT(@FVdrYmRfIlcp,#pQ,!L4k[kUZPhRppj3HclhX`N"!%S!3L51PMeF1&
+5m1$%JIqmVdqVphEi6hT')9!iMhrdGGdGGeh5@qZJp*HA'RJpApI4HVElISDkIk(
+UH05hhMIMS2LVU$i[[8YeAdYe0F+PQZ&QBqaNapMP-$D8!#C6Z+@CXJ%d'@fPRNp
+ESmID@Q2Y0I[)@chRD31Xi8$V+lFH*Y9PP3rC3H[hA8mA641$9F)XQ9Y8@9rk&Nc
+UfjA2H9eC6rr8r,@DRrURY"GFfjTmK,TmYG4FhaiHKip$UH43prGhqZMr9!p$9fN
+,SE+JkUaLG$B4qKVqGA4,pAdZ#X)R8bB[i*fhhQmS0G0@96%aqkX0G%`9I%k+`dm
+DDrP'RGeBk2pX$+khkXIU-&BGKR1`MB$UY409f'cH(df(cq1eFlZkqUVYPQkcp2r
+jTJ@e$q@,MdqkZRQVQ(P,Q(QVUKcA(RreG,N10B@fFLGrA8ZDVkA+ee,0ee,pk2d
+9G(kU[L69I36Ycm-Al9YBfQpL8QVNq$%a'rViQ#VSNe`,$6I2*dd6+kfmXG(qk6i
+(B4*MUY4JkrX-j-4,hMU,+lR+ic1Cr64m*([fqr&AH(H+`HdqV)5X,JZhkRmf!m1
+rj+KrTNrHbY$jq`ZqjSHrNmHI`0e"aI6hI,Z16R)ZIXVQKk%qT'%XVIR@I"YiI4A
+%@qb[cB(iB[r[*PmIHaF[Ucr4-([fIAbR`AmUHDh8[4rYJcZYq[%DM"A"%@R[C%@
+`FX54ISqbcGGi2`U`mIp@1mUikl)qVFH[2pGe9$e-2VX$YVLHfrCh(iVeJT(q1Zm
+V9mH&$bG[$RE+iM`rZ4iNMSEH,JVHKQVefXlm(TlHIdmeFe-A%ESqhh4@m5,JZ"F
+DEjj@QLcZY[*HMrG+m$X)T4lJlG)JZV!0[9F%L"Urk+[FKp8lS,'jdd@EUVJf-X*
+9"lNl(S1Sb$F0ReKYrdUjlAkS9aqEU26q(2qpc0cb[k3)2mX9"NjrPlMU2cAVUfi
+E2D'eC8I%hS+Ed&1G"82qUG%Q&b(eR4&6`FGXE+hl5(e1aYp($[e(El'(K-VFH*&
+RFVFj2jrHj[[I(6mIhrRprQmR$4GI1mLCLdfKZTZ(Lr3Z)'HRm&UEQhj-MfjVhp[
+Gqr6mIPr$&XrHTr-Z*F[fVr@D$id8(B6r2RY"EmhM4[MiXEjlH,d0a$kUiSF1I`9
+,[qkMlcVG&SC2Gd(8erG8Z(mU6R+A0dGPQkA4GY%e@)Y+,Qm'[qV`mCr6MFhMI2a
+ZE`X0%h18YCQ*Vp$D6G,4HK*JG6A3Th8fGI`['V0$rCT6fe$pb*rAL4q4a)h(ie,
+mh'KhfhSElF6rCrDfYYAfHLTFGjpI3G6[V$-8Z1e9PQiQEcGRRqED88E9GP%MrHi
+0ml@Jqb*pNEl)QpREE$dZcSq$08ZSf0PLMpXD#q5G(341YVGaADAj&9(DFmZAG43
+mhhj(VBINj1Ke1JZX[3ihcj8+I`0a2hZAKH,)fr68HKPGh3hfhlU(e2P5Xj!!mT4
+h1EKdIE4G$L124Fdrr,mq5rTbqEbrRjI0j@'Ll2+AFc&e'Kimh$bAS5S0pNbY(3`
+qQhHiVUArY9CN1H@fV2GEZUrELG,YDVGEUaXHRjh*YlV43jRcb$HqZ-a$QG9FjZ,
+P-hGCrQmHLTp$f8@Rqjb,lf*XMIjTrmaGc1mR$`pI4mLDKdfaZF9$Q,HJRjV8h9[
+b['VTcqkqX'&d%pe-VQh&2IVHR`FU,-bcqZ+(*TfJhr`G*HF14er`4EphX(meG!r
+`KGe8,l*kA3pY&`G[)k1hTqLP3jQ9$aXZKaYc2pjIXVqf"Eb1aq#,K2d`DDZaArL
+Th)rCN!"ipJY3k6RH9f'rbKEK-IHTefkZIYr&aB%Z4q6i)ZArM"cpCiArpEQ(EFq
+IYHZm5ddd,6jQcX-CCr9'TSh5dAVf-$#@%$&9d$!iMHeq-m(VF$4m2(dZpmTGBV[
+SII8ZXe8Q`bPISXrh9,d29H9BEZPc'UXr+qEJl#Pp(YCUfrAf%6KpM(Y2p4,2%@h
+Imffd0,k'Li1MTGMj9RRUA+9p,-bDASE2440j!jdQZlRr9qq(ar[cNlcmGF3qSZp
+Y2kIb12FCVMj5iiq4pV2q[GpGeA3B,"99aEa1*IFVRVI'H9+em#(1i#hLc@!Z)Fh
++LpIL*FAVq6&bY[)QqpJprb+c2maQYccjlB2',Q5BZGeSV1Pk'65c0I5j6I@HGqE
+JjbPp$mNeECqmL@IAe2$m,"F1QMHMfd6GCZfSiP4UZ$RDA3lkaTHUX+A(9e,SY&E
+@('MrIV-rmV5QiEkBRp)BRp&%d0G5ik`THUXFp5k(pe,XG9ECZmLEVYCVKpjmFCp
+iXeQNrfc%*cmKC3G6G4FKFC+JrhNq*PD$eYKDpc3H*A3ZrX)90BiArmh"&))ee0m
+c-0R2afqH-0LGhEDD+kTBFcF3qKPjk(Qrh3p9UZ6Qlb,Y1eQ[GlcikIJIkLlr%FR
+[qEbG$$mV4FM4`p9j9eRSH1YiI95U@(4k,Nh(,NB@Zr*c@B91I1l"ki90)B90&&c
+GP+Kp9E`mG[VV1r0b-j!!r+r*0FR2hNAIpI8qli@#pfQTr,lD,Y-hbD1,Up9b-l$
+cHqPQLU(-f9eSSZhklij9CXqFLK`q1qZ"F`D)rk-!l5SJ8Z'J6ZNNph%`pK3G6*c
+e"PI+Ne0,NTR3bF0QkA*C6+5CR-a-04c-R%89,KY9-f%hq2Qeq*VUl&9hUlclFjA
+HGl2fS(5rFfGIhP*!QCR[l#Ld8#DafCX-eQi'1bQ5XFhQB'1e-aBjL0MGe*ce,-f
+&"IC04%b8#"4D6JY,kkJp[@8(d,DI+E2@jA0j029AG2jI+LqJRh[(C*3bII[pk[8
+5Mr6!kb[VSq3X2llUbLGM0@-EYUA)5BQ!`9M5i$#5HlaGI[p!Q)b[Ne1Mh&"rkdM
+kkJpb*jI"Me2"M9&Y5qKE8[VF+JpEK`[rhh+2Ik1mh[m*c#HYXZerRTp&kYjTmjk
+hcHYXXV[H`dqEh[BE,+HG16R4D#HR2Zc1ppDTdGCq2k94jCNi,ekm+k&*X)@pXF,
+HX1r6MVXYp5T3P4keMbG0&eP9ab9'NUM,cj0Md(9I&Fk1mYr6k@40h(q0TFaH[QT
+G2f5A5EhJTF1pi59hH,YprS*rTEH(ddhUrceNEklpqLfJcIi1I2F5Km*I@MFdq95
+kE$,TZTZjrrjd(8GM!lZ[cXRaBfEi&R#qp%TT20XB'@X)AjBNaDFdpURR@[0h2#j
+Z[iHVKI"SS(fD#$dH'Z1E-5lb4q@,qR$mRQFQmJrZJl2LGEHq&hF$q@XJF$8"4GD
+MLj!!Jhc-bY[Qj9C&jk`*r"pNp85Vb[j%MpYM&fQXYY$AfQIbe,SX0[V([)%c*Mj
+5`MD'[MDUZL9'rYFpcEA642,rG%hAlDLfm+SYY+JCY0e`G2%f0G'd9F&!A)DdhD4
+-VMG&Ck'Zi1MMHhZV[RFIHFq"[2(V[$qbrG"I$`HFq&Fb2mG0[U1lc%23Ekj*k'3
+5hM3jVfp%C%TVIRJB`9RF3qLCNDKcZdp2SSe[5F6T)G([MG1QVH(JJGP8S95mp&R
+Ge,e[0ZG,cER@4D2pG4GH&UlV5D$-DcQcY4Y*h9lUGeASj293ll0dG[QFh6p&Z1S
+dpCV+eD-XacjhbDkJeHkXUU2q$%k@aUSp(ZV5J[[3G9qPZLjl8A9hDmK-E1"QHG0
+A-(&bi1-P6q'P828h!"`qKYiIh%"5'%8JkDlmc+S8eiTFrh&c2j+k*i3Iam(YrR4
+!i)3-(AhF(a142pqHk!!q23k&IGIQlQ,PEQ,01-Cm2(A,-D8rQ3$!2NGGqHZbIfq
+NcG*LmG2rC#ZpY6qR0HeSYKMXr,Lh[UY$F3qNdGPEl6C3qNeQkYr,m@,eG4ZTAJp
+e$b[ZrhLj@AHA[VZa[A4A-AGbT(D`G$b2$V1hk9+HB!KlAEd%(S[%iN5pm+PaGV5
+c0T5iLbLB5ajYK(bNQ21f-6+fF$[GTbLEX'VRC-IYEH*4f%I)ITJDUdV*hTR+$p1
+&fF,Il5eddEBeYT5hkcTF)L$LBm2T2pm&CD1mj-Rr'#XSNh*UEcJ`[$V2bG2dfET
+-[Nd1D[)h-QVJp(UG%-(!6YG!heMf#-E)f&,UT0@-R&9mIm-3bVC5aMPdc1)ciP0
+CrfLD,P40%*LppE1fF6)5ImG&CSemZLJS2%i0Gq2lM5KZr6kbp3F6+`2+eQ8dX@S
+YmATUI9A(m*'KZ0j)cGakGqZB[@@mLGPEFaaBQA&aaFkPIhLdCGq[R6%EVU,PEL4
+N*96H'0EN9f,Q%l[AhHXqZHaPaMY2S2"e(dH,eRJrkf[NB[&B[XF["Q,c85X4c!$
+PBL$-H&"Q04+QqZl2mqNk5$d1ESqZ`A3rCe)JD9L"rh2ISPi4`5Z$1mJc(kFP+Qj
+MY*M'-5fcm(8kI3cq"qr9G*VN0F9HqJ`IZcI54Vrd&mSmf"R)rrp2TG"SHpe1Pd@
+Pd1S`ZDSD,rre@Ill3DA[G(hqIdQKLk(#jV3dQ&e1KeQTrrp,SZqlh8k,[-rSDE@
+kR3rlk$j1Jk$jZEcHD!!!!)#BHCQ*LCUCZTU*Q)LCQCLUQALBGhL(CUUTLBL(GjG
+hUCU)L)L*UBHDUBQBH)LBClUTL*KhL*KQUDU)Q)L*Q'DTZiLCL)LRCkUULCL)LGK
+iUCUCUBQ+ZBLkH)H)L)LCL*PRGRGhH(KiKfGhGhKhH*L*h)LBUTUlQVZVLCQ)LDQ
+CQL!!!54(9iLDQTS*#TTj!+#S!+UU!!!!!!#JS,Z3!!!!!!9!*#49CfGhL(KiQ*H
+BQ*Q(H*KjN!#)Q!#SHDN+QSS(J!#3!*L!H)LCS!J!S!LR#D#A!+!*#SQJ"`#3!!S
+!S!N!#US!#ZMQXENmPjANrLm$Ym9p[&G[j1NmVmfNmVYkA4H6%lHLb2LIIbAiI"m
+4`9lUHRX9p[l[GrEqlM1ma@+a@,kEe1QkErp2pCe[6B$DDp!RUDclr@p0,IIRk(k
+D$L`IIS[GT2j426U20f[NAG9FmqDZ1I1frFe%[hmUBMr(Rl@CMmh6mHDUC1cY-6(
+pfE`&Rcpe8rVQjfajqmMjcHe1@hdIm-hTj-hVC-QXqM+rAQq"lXhCHl0m6KcI`m+
+Iq(K6I5pZIkAY`1Vi0"fA"J6A!S*VJ3*hIjA%Eb(L0hl2rH%hqqYIRcGY9IVaheX
+[QD'IRrUlcFe1jY)ha@GI8f9P8lIL91cXiqciXI6fP6q@DidIbBplp'8imImFHpV
+ipjB4q*Aaq*B4l+aMm#bMlIL4pGCap2aBqIihdjAT@%HmXSr!XiZcY)ZYY)qRi`,
+92iir`eh1Mr0@e'!Np+eUHpMreVSpk!E)%i0M(rMBe2kE(FD'X[h@`ILT1&rYkRl
+-IpEp8rpkHSHM2bGTi8MHlUIi[mI!pR!CQIp,HC(`0E`1lcHIpZAd1BpcDC146cP
+CU*b6SCQZd1%X-he9MiXI5E2LGj&pECfFldZ,190ATl5CUDhbq0K+MmHec0em'er
+(8CUlk9h(Y[e6YTL1PCiQ2Vpe&eqkMk+VLk+VMjEHaFG[iX[`BH"p[3mrKkLVph8
+HK@8q4V[5KkMKHh5GT)U[1b(@c[mmGhV+5rfY1(rEV+lKG+bUIKXipjaBpPaSZhi
+mICfXAdkMUV,T@dA2fmImG419r-U*hR5DM+9Y4QIJVDM[kbSc0EdVQTqj8C5686`
+&4qpU*fZ#DSQQ!dcB9(C@&4K,%J+2d3$iNHmXipPaBqhY+RA@Qim@ajGPbV1pirU
+ITb2@FhpNqV,2qB1KmMfUVIdr`lq2e2!k9Ci(k*U62rSQUkEr,09i#EkEPplc+I1
+9p2iGI6j#[TmCA8maAmb4Adq%3CdYl3IM3jR0l0cZqQmG9p,I6H@UqPBcH8X*r+@
+%hP(!R-emrQDl`-cA-"T1Ec0EQmr)e'DpcDIJpVGEA6hP4jIUH0NZXr2CcXma0m$
+b1!*YP[kIRF$THk*YB*YE0rPRC-hj02PYe0rkc@pJIKTmIA8q,Ndq,VUI"eh-pfZ
+TqU3Cc%,CDZTmI*jJ$mbSrec0ecDM0A09D5+hk1flIe25bI@rURmJlD@qeTI-Tq,
+rqMq,qLDX0GdUrA4mT94FT94jhG4ChG4jVGaCUVLi$HkMTEl8AZre'lQ1"U0IMH$
+6q(PrErMQ*rNm'"pE0pa*h(69AIj4E3H5+!EMiH2rMM92[D(Lm,rbGimIkXbJ4S4
+dZ28Ik3IlIAMr$Dmj!M`%Fd"+Qpir#pZ`ie6II4m2(p54LHrkQa`[fZj)-rG"rYi
+(+jY4rjQHAcQ!Vb&FfSrVbZ(q(Pl@qUXRq$!6[1J6G"mrH9r-ir(iIjCflje4qA-
+X"@!YI369G$l+6(`&ErMJ9[r%HHi%RD4FT[kq(e9M!aYP!Q,1IKefPP9Pc8G09E[
+`1Yr2Cir)U3rLS2*h([C@(Qq0`Z"+Lr$+T-"+SCU9"!1Gim(-mD$Rl5$Tq,"e[%S
+GEa)1hXS2!XB0PB3EbZSIKN`HP*lIVim[IZbV1h`02hf"r6q6l'Zr0eqZf[5r6lq
+VPpVm1@bR,ml$e(`iV6qpUTUSXX$`16Z-"bDQD[SmlI4mTH4mcHG+`U20MkHlMkf
+jMl1jk9R8Gl(i&[(XT8HmPG*8qUEhMF,fq,@e['NF@2mA@m$Mb,2pRUH&PHXkD@a
+[GMVr+Xi8LZUZ2c5YC9KJ,p8l+Mi(GajEGm`"qB"%IT`1UqPlXr1qji%llM!EKjZ
+Gi@KRIDe%p`0TLGlZSQ(qQBNIhS[p2q0cq(,6rdpjZHql1jh2IGPFm2[X*GAAGIQ
+`I$prZ2cB,Z)hqHir0f-['rp`hjX$,a[miEmhf-0'jq6prZ3&jH(MFc-F[ZBhqF2
+'Ymalr2TZ6-4ZI6Adc'jQQ[J+del-aZIV,a![)QShqCU0R0PbqIl&cL)hqF6'aAX
+HrLBd[[rIQif"hr,J4TEIqrcl'YXIIJDL$eA[`HUp@9'jmVbi1%jF(#Dm#lE6`F*
+lm'Cd9Y'rc"QFjEaZIEk5$1FZ$1BkiMFqjdF'FprRh1LJj-"[c`FabqIGe'Bpq$6
+AFEi,U06FU*PlZSpQiS[)ZVZZihYFL6aV2N5S([HT9Fl`AQpr#iAkDrLf2#KlL,j
+R(h(&YBI-l1eb[2QV@KPX4D`1IP12"PZrid'@,4CE0@N'@,5TE3F@"cpEC`CEAF5
+$,E-"25XS-X@V5h!XB(2N91@P31bVi-Y@911P3*UZJbeE8iU9!RC-$Ree6JC8$-e
+N'@VkQ@P3-r)JbeKY)-YBdm$Rm6A3CELE1$,@HY!6C3CELk`"0M!jr'mq$,FEdB-
+Yar1!6d)-YDkS"0I!jpYr["PVEKbe[ZIV`Ck9"bPV"c%VRhF2j,Z&r1kKHhFj@,'
+kHaXVD"&U1iXDVBrK9q4EBGYZIST2Bdpc&`G[$Sq2$eGT$fh%Lf&M&j&I&k-Q0Jk
+f0-b)dj)MC2f,VbkM-kHleP4T[*U0EmP4Xjkpe94YqCL,l8e(mIJl1qrEYI5qeYI
+ipRIDRDqP1h[S9'cbPjk04VFcb0KYFrTlVC9'CeYcqQ0Nbq(e9Y(l+9&R,@,Q10&
+dYT&f0R$)UrRAa-*@4-cTVf`prFp0kRMrL@kEhLX"fR#iXIrZqh[XfA"Tq"l92Yr
+ETpR`UI6m-!rh6qIpcp8rQIFfQCpbRcr$!CS5$@Se[#e'cpX!p4Y`ehfdpl0r4!Q
+RR#*1hHecI@mRi[aqlAeA&m*P!+*q9!-Qr5J(9+J&38$E3$cDM2jrNE#Se[IhRR9
+'cq2Dl2RlAEiLpelD"9(mAdS&dVcckM6UQHCeYejNA$eQSTkH2eAVCEf+cbjUDLc
+QLp@QVp*0iZ,TFY9cR%mH",6&TRB(9mI131UY[ciQ*QXrHF5YJ@H,VB2SeX(B5+(
+B5)2VeGpiY&krSmQPLF+*`U5eVZA@qr@AlYEp2AkMNe@YbheV(l2Hd0!C#D,#aq9
+ZF6@ERXUqTk9M(q'bMhR%Lf9QF2P6rc1m@2qkGiY5CIp[CY"PP6XZ*&[,+,m0K(q
+'[U-"@l@$ed,qfRV)fCNa*f[L69K%l+`MIAMkDe-ZR1MkfdjdIAF@2k8Ml1*MqPZ
+r5XrdiMKE2Ad([6ZLS2Lc'@b[a3qQl,9e92iH!j[l2Z`D(jjqcMrBXUhd+q`dGGR
+mp3C'Xaq9`pIh8,"@-IXH*&kQcd-,Hlkdm#&FlEMIJk((RZE&jRXFIYDMdVcFdph
+*Z,#eXl6LrlkRUV5cipPE9ee@FMFqPHp+qk2lC@RjN!"kVp''PCqKkRd,A3CARE$
+MD#(AlELjZ,X*&6RUc(3XC@C(6aF0&LilF8'FVDRrEe2#m4HM+GRqKhP*qZLp(DB
+MGHMSFc[0(Qp2[XKi'Yhq,RpQ!K[hI(`DIApl0lIJbmh`1$,mrfUIeIXiVfkIeH(
+cUM`FcFX"3&RERDcrEIPJD(mfhcfA@'#JS2NlchDZhqI`0E9Hll-l*d*jMFrA6qR
+1'A-S%F#(J)RDqEdpG2qE(ah!MiVfSS"brYaH`i82!m28FrhG$c+c3eXR3qKAk(a
+l(3icLDf,lG6mp*QV(ErXSe&&$3I,hR$i2(qHRdZkV2Ca&GSFTBH"QE#Id&I0rVM
+ilJp+60raV*ZbN6pP)QlchC[q[Z6IpH(!`($JIATkfXfRUbDId*02VkkRe0IY0&A
+l61@02R,(TEf"VUZ"Yph3EIG`1"ZU$Je8$LHVard`2rGG!qE4@fXJpPR,Ick'Dbe
+ak%(-iUkk8[Gr2ehkpVXlk0BHpm[+q6hi%MEr$Q1[r2CjRa"6i92bHYrpTq,fZPh
+A!hA"UUVDF(KkLDi92mQmTq*lXhQZ&6mrIG,K8r-hi#fr!Tl,K6ITHhY0hlA5pVf
+I9p[TF(Z+IAm+Re-e`*Zmi%[Y0&`pTR-T[T[TElZDI1HldYlKkI,5+I(CrH31bhN
+aY-9@E5AeZlJ6ZlQUHANp,GBLR`0GdUV%dmYAqP0pAVl(A6ICDqak@ThHYJIVeNh
+1k,LDZElr`q*X*[-jELqG0jr(S&aeTUT[6pfJA&FE8cHZl$MIYQpRJEAfICkhr(Y
+ERUrE!2DpP`J$U*cKaZpd2mlRjIGT2%N8AMeP$SUf"rYkQec+VpMM`#eA-iG9`Gr
+ZppZ[FpRf+fRhYGY+Z[fRV@1depPY06Cl61FADCEME6Zq0Y-0Dl6Tj@dPVIdS-pU
+EVBd1Dm2NHK3kl&AhlB2YpGIFVDrjf[eBMP9A*hA*PpVVjkm`qecQJZTcDphVVM%
+lA!e@ePYh8mbVUEMH90A[DRGlqTer!UG6l96R2EUI$i96hI$UIZ6rcHl#k[K8rrA
+"hAYeHkqIfI!Zq$[H(q6e)ZD6"hTIDqe`q$+i1qTi(D9G6NYp8j!!i06hIY91+pZ
+TPq(8p2`kQ@phDFb4Y,HYfPA@l6eT1dp@[fQTX0TSV,DH(CE6,@HdaA&fN[DE6X1
+0Y*EMrrd(Up6EE+Ka(Kh'`JprMV[A`I,l#mUVhFqj0Hp'iq83)!NlbGVl2A6IaIb
+pfXUYPi[9f2fFCLjrjqmNI6aIHN9PK(l2L91%XkR#F@2Kl52Ll52N1,8iqdMJ(iI
+&MjcLe1FXkR1fFI4@FI8m52Vl+TepP8G,hkMjZAY3'kA[Y"YVr9!e4meP!fI%JDd
+!l1"jGR!-D@I!1dJCRM31rY+$+FDJR3$ip"L10PHcid,XZ0$`!"mE892"i&P@ERq
+[drp50$if!kD@QjQDqHBYpVrE#q[jr)S+6a*9*MC9*-epYdV#98G6E4-&Ed8aI[[
+BfrGCIA&hZiQCdYaVSNc[VD*Ij86"f&Y$L6'rYr)k0a6Ga'QI,qR'k,#@qQPiQ"`
+@LQCAF8IFk(&8H(d',m5CTFEr'9VC92Q+Vb-iYbbB-BZfihdGYlhA6PccBRhU1ij
+d6'h00(SiAE6',dPCR*r+hr!eZDmD"N0RAjQ,T20KkZPiQAjd2EI"ME24`pPhX2f
+-ECq2$f@5iQHKkZMiQHLk@QXFa&chRi'Zc@2JB,q'@hYASk@Xa%L9&r*)bZGkVYY
+(-Ga0IiQ,RDe%()qGE8NYAb[`8@$mq9TU6!Ckfmq*f@5Z2(MC#Mj8DljA-!6iBh)
+[Hak&jKk648Yh-dQ@f&a0dAB5XV3iIbVUf[DMVkV5q1Rc%d2q*qmmQfV,D4b)hkX
+Eb1G%r44mL(l'PXDc*9p,MiH-N5m2$e[F3qTVSr8f'SKdffX[)KE(Bm62p$LCq,X
+GACdh4XkD(Y[dC-#3!&,-&0Ma0"$eHpXY$#ddL&QDc+il"eZ9PjQYm$&9RVq93GY
+e[8ePEV2)NH$RP*%Z@4h04ZF,4jkim@LkQ9i&*JYKFC5*M+@jSk5Mb9ej10Zmj'T
+CMNH6K14ih6q&m-ESAhBp#p`p*UDAN60*R0KFcG&KT@ESTMbVZ9b55ZqTHSj[l1d
+`p$p9"Da2V@QHS2ASl,,aG*QE#MMdHIVmc$Sr4X)RfmPEmk*pb(lN$FEi#IYdE!@
+hq#*0FAk+QJUHqUYC6+hIlFprR$f@SKaF&Z-PPm2M+h0D@&JYjjeC#kR8eN,"@F2
+$m5&M,,S5BAk-E*Kk@6#eGE$f&E#pHXK9eCPEVHFI3CASjke`dL9M+LAprQd2bFZ
+NpkTq,K@PT`[HLGYMDkT`jjFl60`V[diAbrU`mV-r,DjU&mQmiqEK9pC#pH6#dPK
+$a[%mL,ld6`1,9CI2UaHES2URkq*pbXYj&j'rGMEcR42e8Gj%f1YiP,)XI(b8+Pl
+[B9qFQiH0Pkb&MF$@`Tf6$qj&b9E$Sk`"[J!IR)%!4"NHGmQaSUZbN30"e(jl,#B
+2[2mcea4C+hr9"kZ986&chhbq4p'eklXRcSRqZkSFl)bIN!#UTh'9[mpbk,SFVp8
+(JmQSZrIlkrHA%mf9Gfh[9(,Sq9cSM!9S9MC8r5G6XE(9m$cl,55YC4B6bVM+8AK
+q9b10l&j9HCSF"qHcJ`@5Mq'XZC&p'pc'hh1LImdGpd16d1&3B2FCA"b0`2fPVFV
+XDbJhdLJX0har)JIcp@ecp$Ip&EdX('q*Ejf*Jjf9R*HNk['fZPKrcd[(cm1`f0T
+d0YaG$$fdL&YT%29eUX1,&0,*KdXQ,P+cd[SdPGPI2VZqNBQ'Tf`P"rQIZI*h2@F
+Cj`3-"A!Vi)NlkGh3k14im6VX[QHrb%ap@(PD#SRED9%qY+ih88HCSmh+l[emlkp
+[UB(M`)Na,fhK`F&Eq0"`m[EdNeF9'0YZMFaXPE4+1kLG8JRi%&Ik!*4bZF`,b5#
+kLGZ0Ap1HZraGT4H9b*'4r+bj%SRcp4KErD5XKRZ(dmp568[[VI13!(U5'm&Ee%a
+EG'iLB1jLG9F42Xj+j)43)!J'B#heIdq2I[@j%MmRNUpT-'b4GEAPBABdYeQk6'@
+e*e&cPD,,q[GjQNdQN[F[%f'A[Xl%fdcIH6-FRbF*bI'LF2l0$`m,[X*IIRLEr"m
+R142BQEhaiQab9jRSQPdR)c9*PpYF3SQ#YY$58HP[,EPe(iT%2mbDrZ6R6BHhTUL
+*e-UiPB[5@mV$EblrhJi+k+#A94NEQ04h(-LD@fjd6@I"BAX@*V,@*XV@*V*866@
+`,!0'TEF)if5ZDLB$2UE[1iQ*TFI5hZHifqdh,k&qpbM[hZBfrF#rH$"LIhUUAmq
+!r2C3F21Ii`pKjN#Ie9C5ifId',lq(,Bc9eX[P)H+`@PVp,d,$53p0Nl%m0Z6X[(
+Kl([BZaa[%c[`4GMpl*f5a!f00d+r6`XTX+hZ0"#`-akrV6&C4iq(!kQ(Q0,FG"A
+iFEEarFJD+41k+rj$*5q',!l$cpaS)q3aNAZmPBbp0Abp0+bdc%kR!qIEH&LF,hX
+Erf0p@0prR42USrIq#*dVckDMVUMVj'CdGrr$YTIl8ep-aEkcYLeR@qMBDUhc&$N
+2(ZCbKcRjFAGc&*i@PpkSh()Z,LjYlQhZELi-9feXI#Zr(jN(5BrNC#KdIiD,amK
+GibNb'AZFE%`fH`0GjAGqIUU6V*USkD42H9IjhRGaf@0k@,YZIHFb$qV$FMiq44H
+65&cLGYZReN6`D1jjd6`FPGH4KqGj%ac2&QFe0Cr%I,SYlMj@ja[U52[D4@9BHCk
+@(dYcih-PEQre%eqLMZDER4-NJIQa-PqZ*1HIFk$jEMbk5Df&Yh(N88Y-l$G`HTT
+FI+MG4+fHPr09CR5V"2L*MjZjqeAlQHVFe*p+,RT%21e[3X)'0Vi'6VS&(*J8YE3
+8YE!ddL"XC%$dp$!fhUmAbi&KUH068&hSZ2T)0rbdVSBkfcX'CPlMaS2Ih25ZiRQ
+R,[k['U[pp-X`rH-K[+j+jS+1Yc8L2f@aN`mC[T-,)5)H0VS'$N`m9*Kc%Q"hX2#
+9X$m-1@`FL"Q29aQlXI)`fEJHES1jm@"q[2iI2`0PR0*SZ,5c1BJHlRTUMJ@[MiM
+ai(rZFQr$JG$!b-Y"[q"NH0"`&C8GP@a[Z3mEFI,A8Q3Vk,a,#KcPM!UUVaY1TIq
+jKrmpc&c&Gd,#,3GR)UDDXKlDXbYM)S2jeFV381$epa63FPR,[ai1QPlhaS1hpk0
+lm6NFRDqKJlc&4XlNVV'a-GTEM%4-$l&V![r(JB5dS*MLd'5XS@5VkRY2j9e6Pj1
+ibrU4[,85IGR1QlQRm[GdrNE[8HA9lVDGr[G4T1"SG(lA3hmh[pl0hHmRl[H6IrZ
+KaAZkM!eQK!1@VI)S*RAefIS-PUDqQJ8fFXHKPV,ai'alZccN$hI'J@XIrf(mXUL
+`e[clIRfm($@m'AX1e`-R33-PUT1RJC249qPS+21f-e3HGN,1TjeT9INmaBfF2Kr
+UlRdj@bVG"#bAm+l3d'5N3-P)S-E@3*bXJBfYJ6!"bB'$VS&rYiNaEa*PJ0-!fdH
+B0p8dKVTq(iHfVqmKjhBf'8KdHPNl(kCRe2[G-[K,1-lRC[b0rl1Rp[8DIKC[@m2
+`0ElKh0qk!NJr$1XQrpFcFFkSqm`&c0acDLHYkUcN52SlET[8UEmBT-ThY$p&"a[
+M[h8m[SFUSpdj&Y6fI)lVDk+HZZjfZ2lqjQ0V,qAE6Qe`2T@Z*UHEr(McICfNhL1
+,2iMLcIIm5Ec9P2jUbQr,X*[A9mrVUqErM*Qq$@cr"VCZpN6IpIGRrkql!k[K`1c
+i9"0F+"2He!lrJd'Ci-$3Eq"jHqS0E[S(TEb"r'VS1$Zi(%h8#pUU$q[Uf[T3HVe
+9YXS1)LFlqrArGqapcUHhU[hbckk&RrHjEB`29cq)cPRKpIUq2S2Jl1(r2pS%ID"
+A3GRR,1BH[G#h4$EaF*E2YSKc'XESKMG2pEYY(3Bdlj,,iq4mPh58YcdEMT@qea-
+VjqYq2XV@AMmfDir2RV6ZDQYc2&jqIXjQ2k[Pf8e8kRCf22fpK0i#`QqVVM[VlfE
+RDfEbPE0pr)jqpfRqC[6qjcq"6qqFe(2pZRrP0fA"jr$fQLpcDD,hDIbB'!h[JI0
+Zp$me9l2Yi2IE[Mr20eRUIIkMV2q0c26Tk[Gcpl%A1eRVRd122Fb$,IUPlEYlpkh
+0JB(Ker#q#[iF$!m,Q3-$dhFIHPlDDJp2qZ$,DqeRU$Ql@HjPckGakNMlr8ZGXhU
+IFra,IfcA+h2,RH8I%p!MJ3r-3#$q[[EANhh$T1*lhmZ98AhU9&rCYVcrq$pRG"l
+2ciQTR[q+l3pRAj[Y+r`-4Aq"LDqIRUqIlbZRqrVTrm&G0jUZQr&NcHJNcIN9Xhj
+GE0qC@6HZj(cFMjN#FMDjqmLE$Nd0AbB0Eld'YVCZhNcGEA6HlVTreDqEp@`QpIB
+6qTXCr1J(C6q@iRJBi!q*Qm9a0$,m68B'b1GEGe9cZFep2LqTir9+hbGS2MRpP@D
+'ElAfqXUq"9dqEd0([k[JH"Y1ep$frChHCp,d[#m$#E,GIIRjc69HKSkEHq"5dZq
+m$5j,IcqVb2!lAHifem1Nq[PU6"B+iraFFcDrKU1rHHMr-h20U1rZ+UbjNRfT(Ri
+"6[hCqAGarIl()[hAi'UlEQrlBAQrlGV)`GjbrprpkMCCR*hG0UidcVG0BlI@Ha`
+0PV1"Ymr`0rQE,J6eP`*f96rYfZ!i2CfA'reSF"aU6!@AfUQ2qfTMkQTTr1MJ(qR
+9kMp1Ymcp2QHAVSR9Dh6@qQeF5Qc-jI%+Ifrf`8UrFHD[h,REpHhlLhll2ErBYj'
+UkY6I16rapjErhqabEpeq$UZhj[qhFFbSrMEe%'Nl+9ke4J1*QE+9UimI@dmI@p,
+JF$@fA!r9QH"`0P`1"kG26kkRTr-TrddqSr5!mAc2dapGqQ0J0RXVIbpG'QGRV,R
+6Df0Q02TZ4TGC%f1Ic(*chR4Z41c0q`[UB+l[hYbhqNe,ICRCEXjEkeqrelIl()U
+[AkaRe9S2m6pY`rLMDI@h%@CYBY+YMQ,[V+,Gf%AqPFX&hC5+MXZ"FDlDcZcZGEm
+ecql'lA0Fh0A@aqDjfG4P0RFHPdVMp0405)dc@4MaqG9*Lp'ZLp#`KrdX)Iml+&c
+Z*#ZZ,#Vq,#hYT#hR(q5cbZ+Uq*q$ZCZJp$GikVXTqBQk$4l[19GM!PXj9f%r-cG
+"R*%chP"R0hqZZVkk233jlk+#&hmQ`VIf500peR1a2IiR148I6KGY5mMaD6)bU6$
+fp*e0a#q@km@NcfaZmr5DA5hQBLD@P[+ASARP4YCmN6C6PljXiF8@bqpNlh4I"'!
+raifXr$%f@5344hQNk!9FLQLD69hHJT-pkpej%6)epa5AqfT-2+T-MYVZPLER#p,
+N5)2G+1X,1r01Hp"VZ65E+lriqR0kU0qkC[1G'r9Q'!V3VQaYEb2q1SrC9HALNBB
+LGqLFiQelDJY)Z`mZ`bZ%VU$*eY"65+!i20EkYRjIF30EUl(@4mrc2,V`'eGMjQ9
+dpe8CJ!lU0QEU-!e,Ga!$TEZNdR)T2+[+,cVbLe9l3CD`S-jAd'LNd'TNd'[VD$e
+DbJpD3!GY`m6ElQHZIeh2l+V4pfSm`j5DaUIHS)m@MdpEPF*)S-RZkrc)FjdSmcV
+Uc692CDfXeX@Df%RpFUS`PY'ANqYiQ(YS[YmHX1@UiMGl'R,IQ9(fCl,f(SaHrlq
+6k'iRZmNqGZ-4hmRciq8c&GUk$6kQambJbFM+i#YTSm+,(S,f`UY&LfFT-pmmlG3
+G(Gd@AZBNjF4*bhU1cPEMim*aqkLmqCiq'Lfq6Y-A&UmaCib,ZkDcQBZ[ePPL)ZM
+f9K24Fll&K0aFY)LikXLiUYLiDXLiDYLbmQ,JDk,,9qSJ8hV9rQ8&0k&MjI8rPKE
++hjXDDYYakGT@mA[T(jmBj0FV#kQZZFVjNEVYcKGVKGV"U+'*58@LQlhYm&cZh`A
+0lI"c&4UD(#il&k5ilLJSLicf&a55ec$`Y(IZpr*JHEqEVqCjp&TmPGkUSc(HlA+
+Gl8CM*h@NJqaR,c63GAUV[b)0(@h%6U,%cGdP&8B@mZj%A'U01jRZP1AdEhVfhZp
+04C+VYk6!bSHKKqC$r65B$B@fYLB69fqIMBrBhlUVpIlppH0rQ0dUDhmkdmV'q,U
+X6hqTQmcr["kRc,DPfZ-m@imIDj,[lR4mbSc%lFkVi)fCqp-h2R4XRQ,M9a*c5h'
+IL61`Yr)LAq[X,EaBQ0TEZi[*A+MINUX[1-V42r*2IMJk5kqR1hIiEUNb0cRH2-`
+1CSq003,IAfQ)jpTLB'lj%(4!(b)2QJ,3jflq1lS[adALAAbh2bh23Z1KFG'hjNE
+lP4-fr`9(CA%E'h9&emMp-kj8[N9(+`ZeSU29h&&e0Y3ib6GH"3q9me$jhRAQ8SI
+4mUpr$T,c*dRPDZlbP4Lr5Yqmh26mAeT9M43HSSU+r88D$ZF,`m,`i-DNb-(#pc%
+klTpVeQ9i0&f[PA(X81ImINHG4E,(mR1d@qaI[CEQ89chY&FC$hXE49IMhdj4HKk
+2)Rk,`j9*f*65LT!!V*G9@URQT[c6PM(q,YZ&PG05erN3XC)KBHYKAqYmL(MGMAj
+RSep,dE$24kA-eqNMjRQcYKUSp0q'2QFRBHG&c9(Al#(q#PNlD(LI2V1iefElVp2
+i-96dH,LcH8VY,8ICQEESR&Pk0IS)H0f8R34m(Xkcb)q#hjdZ9N+AN`ZlN3r%ePM
+A@GCDaDU4r,Z@9VbAcGpbIM[hirZpK8If`ZeT+AZjLjm6'dAFjh95XR23-ThQ*lr
+[-4QZmRHrS*R08%cq#GTI&R20chVCrjG"1DA36ZBd%pL0"3kE9FM9d1cm1ppDKfY
+$ZD(Fd94%M4)d5ST0V4F2#eIDhf,U2@c0lmG0HcN69D[d23eHPe@`TY9X2*eNpPp
+C28HRRU236e("kIdG(*mr8bI1p1ERI`Gj1CA%ifL`2SH*Ej2Zk6*GhK14FAdVhrp
+Za''Kp6e,bB@mIpllhq+#45F'pb-(bY&GC5$N0IFH",@fEPVE`-$+cB"bdVS98(U
+Ge"kQUJrDm@$JpIEjq$MG&Fp$1A@HJdZ1[2$Qp$6jVIm$Hdp26dI$U[Dd23iF2U2
+Fe(2NDMQ5+IQHlh'SVIFa@ShIZB[3qVlNaU0I`jR8DRKcZScR$RY4PZ(2p9[*ZZU
+Y4LZ&Qm*ZTZ[hHSPZ&SCcAm,86QUi@Kc'Li@Sc'FiHSTXGlQSdTQhdf"NDM@qeKp
+4XIDQ+IBm'BTpE[jV8HC[Cl8C#CUjqrl[,k(U0hTY2Umhi'SqYSG$i(J6I"pURlk
+4PqpkVp8rL2Xd2ad(%ZVH9QI)SHTdGaPk(*BklcN(5i1jmD03rCJc1$Z0&4'"ECA
+d6EAd6eq65EhNd9GbU'ijAamUKjR,SIrB2rN[bqG"rqq[Fqp%pLpqDmk9p%VVfUc
+2hQ`ap'*XU#li[5iRc@F@[irhIr-,JEAi)(af[-JIj!D"mI(b[0iq9ZH0PEUdK9p
+T#X1,$hh&LlqZm+,PIY`+#JR-(Aq0$e-aBpc#cP(*R)ABl(ckb6AlMVjADGHY((B
+6(qF2Gp'`j2kS82R3qF!R`3r2r[-b*hl#plRfCfriINq6FbVLf[Ie8QfEf*-"3&a
+[VEhepMXYAVI2fHNfrPErbT@8SX0j9caY0G50IfH!kETjZEqpp9"brpZ`PHrRSPI
+X,laBRRf&h5ApG30*K2TaYYqLKQ,H0-,GE@kpMED*NT4e"dP,AhHKLDABfmUQZC@
+BZT@`[Y$4DZ94D@fSU@fT2aa-2FVaNC'hjN6*@h3ZB[1LCMh-EG43iLC1`m2E5[(
+c-6"ih9ffGTSNaM22Yp(P2&VjV0eq-K5Y$IU1iUYIfM13!*1SQ68jqbNeNLZc1JS
+mVKUbMc@9kLYm6+p4YUc1CA"E+Xm,+ic6eQi!5Tb1RVBTl%BY(jeG$TISk0Kq@"d
+,'(8ELKq,Y-PHDf*6EiqrDiLc&[&aYY&b8VSem2Sf%2pq6ViZ[R,"!NI4C1[UG&N
+kl(CA18eEN!$+il69Q5bX[X[AmkVhqNhZHVC-Q4Be1XVC(lHe@`KhUl(Sfbj*eGA
+HBSVrPlM0rJr"4B+9Ni@9SXAPjALd@3b0YRk6a-2FCLNmJrARc,RaiRPh@GLE-"0
+ND33%LEBdLAd65i5q[fjp6X2XcPp%rmR,f0r5mU1KH9(lr`a2,0+ZH`A)Q)Q4`jT
+Db'4ZX45GcijTIkRcVDKkMHr`Nfp(%kNdcA-UpU2BYUVdqf@fY0Bck)&p"p#pJkq
+pJqKaG0!UH`JHIRl(aBIMeZ9b-Q&Kj-AUC2GCAU+kAm@&LXCX*2GjQ(LX[T*-a4`
+jI5CkYR-[$Pr2Skc%CH(,H[Pj%pim1@ff5hHqbAUb2(d&"ImPVkc,jq"Jm[UUc2C
+Q"KmpSUfPSi'-mr(bFciN$'E$&5FhMS'3!*%I&eX2&ed,ZE$0`XrT,+AVH*-4kYU
+8!ep9AZ&rdr2Cq$46rdpj+jPqT0&LE$Fk,*fFE1CMLdQLc&T4CbQie$R-aak(mFa
+&jYccp0D`F9V,@$KY0+JbqXP3H`!6!l+9"kF"*Ef+r%32Mf9I"hIX9m(q4`2h[2N
+4FIH3!$UUkKemL,Llb!Fap4b[0jGh!QDb*SUf,Ll[RbBZ2ZM4235eL!dr!mf"Nkq
+",@(2ViZ@hGK!TVDJm1`MB%#EH!"2B9m$6@d$`l'0dpI!eNUJapP&q-#EA+ilL4H
+GA30PaS@3!,+,B9X2@@FIV+q2SIef&4dV#0me9dIXpI1rcc(iD(S6pY)P[ZpTaG2
+bV+,KH&TC2#mL[LjUcLj+aUGl*LkkdbXca+QiV)Zhip"eA&MmhJ!*Yl52crBidIR
+l-"0EaidYjXISbTMT@XI1DR0)&c-U,R*1ekU`J6YY&cPEYF"Ad')P4mJ"-Q&0@d@
+BVIQYV@Yf[AGD#Z%B+iL9&m1Yh29"1d`X)!0jcGc3#qVhY6dE#E`e6dEIZDRi8#@
+f-Mr$E6%IqP[-92)YTb2C@de(XT8p(i#",@IMl1eb[9F52cUb,VH0#R,#TX+iNQ2
+Q*1id0M&`YTXihd9ADbT&qlk4rppTRY@ar4qp,HV,Dq@p#rGT+SIlIJJhHbcR*LB
+2(FQNSq`[BQX[D6HhN5kZiRmlQ*m0[%jZ#YSR0Q,$hm0$LFbMfh,Q0"'Yp0TZ91D
+D0*f00bX6T)eE[mRld$bSeABcYp3p91Ae$K*UqJc-eH`CbD[)-l-hP$1pPb+(+GP
+b)1Cl+lJjrXVU$TqbZB1Y`Pc3kIXVLKe[CA%(CpPE`IBQVD$Yjb93lHFNmRbY43m
+$*l[hY*jN(NCMAmV6CqKj'Qc[+dqPJrcff@jHKmH$d,#Apq*Iq`jF5DjF6*FZ*RZ
+9%mmc&hN6d-(G8RVBfhT+fQeR+a&ebi2DAlX*E9%arXPIGlJm3ACB'Kk9"*Zq"r(
+Qklpdlrc1Elh*Rh-Eam2bqjZZALlprThGqqcLVph(@G4GlrqATG,IA-L4h9!M2l&
+$mq*Nf(m[eklCEf9ph@iA&@e$pQAYZC3rkB[MiHZiq-pc'rmcQcrG-rZRIe6fYfe
+G9IXVm-ZY$[U,jTrfm6UIGr"ir$mA,m0S0mQfm#kpI0h,3CJ0lli(f$2mC9*KVLL
+a0HmPlj&,b*rJj35iH9r&pb0kLYp86Qqa2qT@6'(8N6q5qA[VEmAC3HV[hLEc(hl
+'HMUEpJ[4p$hmei&$BHYAAhN8A8hIQ8@"l'friSX$1C6"H[EBHfaQmYm6Nmh55pj
+PD5Aj%+La9h#T-9G(-R"b0Y5BUiT-2F3FAF8Q+Yk6&h%($h0&LVDNm5i039&,fe&
+j9["kRN8@"P8RR@d#NrK@er*bXh59flVZAhm#Nq28epql$`kqr6eIIXpEGpL+6"A
+l,b[fB'NkM(hlUC8l"jdV[)0c+Ri0IAE[N`U+@[B9*,AP*e&Y"mk95B(N8R8@m(2
+5U5AZU6"@m()fp*,[G%aPa"`9c5BU95CHiJ8QHYi28FLNPkrN8@+hYj45qp[D+Ap
+HqSTIBFQNP[iFV+iQNZDhBHr2iMmAAprL2aB'Ga(iZaaRHGpJkRYqcT1QPIDQ9E,
+e[DFqIm65rMeA-pEaZjahfjl%Frdm4cpIkH)a%e2BQ4idd[N2fY(d1qj@&VEkKpB
+!fJep4HL`'p1Lp'pT!$D$HMHr,HdATY"rhBbmq#Nr9X,hR8Ar1-[ZE4Hjh2*SIGS
+U[NJ(49I[80Ele$*pk$EmV#pI)rea#L6YU2kZqYX,c1A"jMI2AmI+q2hU+6lhbHp
+3mI&mQNpca16r5NrKIIcT2hC'pjJ%r,I8AmJ(T2j840B"rbS[j8Am,lj,kLrJZ[`
+!b)B+#IH`[rr9CE%Vb9bq(q6[V#KqhKlEQjA,I`pE)qGX*RbY00H2Rjh`me6Br+H
+aKTQ6ihG3i[EIaYBAcF@XX3-QF91EIZmTRr$c8lRFrMG9UmCjf`l[q(V9rb@h029
+&3IQr*M*YRC&1p(ZYEL2r-A8jVMj"!M3LebRIrrA[Cp,lch%q1%GVhr-edVl8"9d
+qYfRq-"iP,Nr[6dlN-$mhfjUDjrkjVRkRrI8p6qhe*(ArE4$eI9p,!B[*61&pqBb
+(hDURqicqdXapAIHr"q6P8PIbU+k!0S-q3Bp$$r6"pa[j2IJrhPGThLBHZ`r5lR9
+D[bIeprQ0*k(erNeG0q2dHP5qGqD906k(IVihr(FqYY[erVd'Qf&Adf"dHpfAk*h
+@E(hi(-JFb"ckfeJ3)%(Vq[p6#8+U&2i2jZhT2ApkKZIHkEZZZNmULVll[UUdljP
+A2[G#JPERiU6Bq[GCAa,E+qKDd&aaD(Tq*3iUaJjb[Jk+ZJkqYJlZ3Bh*Z"!kh(D
+qXTFV,kQXm@JPp&)bX[@6%$U+ikbGjA`-$MYlBCr$6F,6D,&H[CDE$BL(Up6,q[a
+-r,iL(XG6JIAXmrpc!l'ccrF!Gk2`E'cd(Jpr$f1[`*rbm[crAXY",cF+Qe1+hYI
+VHjQi@+`HLba$8aSXY@H"Lk1CJB,2H2Mp6*NHPkYG&`mMYqelIYHIIYhbFh3kD43
+cYG3I$CCACmD&pDhXlfXidM'jY88lE-I2he[p2elD9EmfLrjm5q0KGJ+pJTl"AFm
+RQ5JSNBfNDFp1djj,q6QhBFb[YINEGPq1IrIVp6UG6qYPf(Q6A2eq'bKGcb@Gr&+
+l,!UkRehArfRqjmrcG0dG0TGAjq`p(q(V9Hkkq4fRB)Eqaerp*qZX2BfHbf@afff
+ffmVUkZNfq&lHbl6X81pMpEiXEKI%YS[hqrb'ASmYQ[CU1TZ+(`UUbPm%KhXL&HI
+b2"Jjcl8(,BDi`e$KXGEBbJR1mbG(QTA&Yp4TqV`D*IXp2cqkYjADi6VIlih*IBq
+[bU$5drKk2&HVpb"i-(m0E,qVhHMcHVr0)l2XPr!Q#krTI9YVES@qeQVIp&&-@d6
+#IaSFCa*(BpZTL`A9rilHjSX*`I5p,p1hP8RGFL4pRr9LrehpTrGA9$M,D,6il[m
+KNmPMCl&cq+SErE8@1U[p2aYfA[lcf,b8(Rq2Mj@(M)bl6krpTrb[iHERmpTY*Rm
+pRkA08HDc(i-QJ6m'8RjfIRS'*NGVqK&(EB$qmlT,E"l6&m(&fhLC#LlQGVS'V`[
+Frl51cmeNpGArj2GhAC(E604NlQ*NlR@6'aapGphe26N,9"2jEkI#Vk,Hhh4[ZMI
+4YYbBQppkNVZ94A(,SIrh6GKLZ9mR*q@qk&ldZ4mehZG$ehiCHSlh$9%[P,IZGV,
+CqeaXIRkIMcNIQDkdRSpEYq,ckU2r+El1bjpA(mfEbPK0jU[QmrAFrIam9`)p"3I
+DVT!!I[Vcq%!HdYrFTj2Z8pElY29ql6lZ4Y23V+IAeY2UUfRe-QRmUYfQ5VGTLIF
+h@Se%2r1piIAqTqqXFBVULhel'eYj'ePj%f0l%f0p4EcNJ'Q641XMV*kQfV@-Ri[
+Tr$am,cIHT2B[+MbZjZXK4B[1fmp3p298(0hG"*Uk#XhhEhkPJqr4Hl5IbLHR8HE
+YI)ZkUjjmeFFqGYqjU*I[j8a(q22fXc(jZRime8bGRDBQ2lXhJ,-l`[ecFlBmrH4
+mj[DR,Ek2q'EdmQEeXQ6@I4PIVcI!pfEX[GQq*`j[iH&2r$`T[THh2p,fi(9m'Jl
+,J`*VJ8%e`)%l[mVL0j!!m4ZrCrl`QrheVmqEY[8rI*Bdq"p2i,(0peCl6Tl+Up#
+bUr%XXK[,+Gh9P0pPCpVN1Q`H[GUDl8he28VQ-P&p19VjrXE6aBIXDfbf8IAD#be
+P6VGCCk#(*hAIAlplY4hDMqTkpHaMm2kFYaSQSkl(k1ha-(l8hJEAQ6F[DmrG3F$
+kY[182JGGTHQl68Ze,GUA9AYJlRQGcc1jjRljj[8pDaCp%D,ScmRDH&)hZkRq,r(
+`2C`'CRr5hQ4m$@m$ZmhRrEPp$Q2FfQ6N8mj@DLFNk'CVY$K,$0p9Bq,(dQciRH4
+I@fGR1p,LcP69kHdQDQYm[MB5Sr(YFcGI"YIae'DZqPGalEp8lDBMT@H*MkrG4GI
+ZSqLUiZLUiq@hXA(Eq,,m'(JIEd22iHSUrGe"Al)ehT3p4`[ET1dZBRQa0GH9'X[
+2JLDAN4Tkdh[(h9PkRUfA@FhpNr2jEk[#VRfa3GPrj"d2NHe9EqRq(IaqTi(5V2!
+r4056rAUkEr,09i#EkEPplc+I19p2iGI6j#[TmCA8maAmb4Adq%3CdYl3IM3jR0l
+0cZqQmG9p,I6H@UqPBP[mqA3XSi%jQ[RmcAH"QDjJ0*cHCVFhRj'ScAZE6m(YEVD
+kHmU2,p6q(%FCEPka4pRpYeRGCdcrm@E'ImAeIKY(mBTUhQAHqpRfIVDIh+I6b-h
+qZ2f1rjNIZ`%afqjNI,EiCph0rkc@qJCRHd'ChQ9c0A#bQlKrk`1Yc1kLJCq%N!#
+k31*MTmj[*[[8lGl(d@mMjd`qla`*hXI`pl(b'pMipJ0M0l(`qqMp9[GTrAHHcl2
+CmLSe[)rCkRm1+aYS[UbXPkh"[TGCh@G-p9pqdkQa`[fZjCHJaP[dEISRFCF4-CF
+dQ3ZU,`lZKmEkrhS(dC[Mmf2p@CYHF`&H3VQarQir#r(De2r99Mq-S%`l,ImPEaZ
+bYSf%YPh5c&a4C#j!1Kr2pIkS(dD'ejY4rTQCA1B#[)9cDMUlAKH6DlMrZUlrMX5
+LipaX,REQNQC8Ij1jif3bZmcYR28'UUl#Jl#ZS-0AGYPZQkmJam+8M(fV&)VlF8&
+&NGYEkHSk[6bYMYF"jFV@aTMBh0"heqb[-jGe`rr*hhqG8I9Q@!Vb&6[[lArZkqR
+rVP999qQ9eXlr2(GkIrjZDRqeT`rlGCAF,T@96m0R([1,(XZ-IRbHpH,kG4e9PdV
+D,RlH2q1SR+rQ9%lcT04P+fSc2d69ckG*#lq*3CUXU-c@p+jUIZ9'8Ne%m"8I[DL
+GVJXU*TJ0-f&4f9K8B5a))Mp%!q*([,12CF@2Yl5TeeTZ2&XHACFUc[H2ZTDf@pR
+N[!qVm()KGaIZrUlp0qKIS'(ll!j#6IX0(kE!`-"I[[bHqPXAAm@bh%,KDL`Xl'a
+h(r9T`ZKaqiUINYCH2mFUAUHIDpc(jNVZDQhPBH1!P6@QrB!P6Zl@DMqV+QURAbX
+4(!5Te-V%ap6+QiqLYB(9em'@V)q@P31cVS-Y@amG+JBL6"PT-I&@X$[kb$,9mI!
+bS'DN3CD`MbdU"S0h+JDIGfX$Ckq9!p,8bS'h!6q1LP31!!R"cPV![##,dJ2i3%r
+VLT8$T!*md[D`Hb`-U$fXU$LCA2Z0V,A-IRh8Ekm'PYD,2FH*Pq,`mKBf-UJLe'"
+XE+hlEmhUImfl1f$`qMi8LLf&jdEcShNE9hX6BAe*r"RYiV1Q`9R+hh&ddI-EZ(M
+GpSHK`G$GqhSIBiHKeRZDLQNDM*eZKR*1S`PGU-*AqC&TYRBDb2Tp2CDATF6pH8X
+p98lHGi[kTHTi%eaIhIIUH$fGRqhjZ,qfTi')Xr3MraRE2cSrTC6LHI(efD2m+d'
+RX0E(c2X9qS`%QR`PE6c9CU-R)e&0lQSeI$e'fp[3hI!e(3hd1ChF22kDchmVFGI
+kP9F11-ULf2)MCqlM8efH0k*TE`k@`$(2"pBkjZZEk1HpZ@1IKG(m2%`XQqT0CGe
+(LGcFC#Ll(1bTkJjY935Gh3HY9d(lc&08ERkd2IkH[e%a*d0,lZKf2$d1qpV8%(I
+dhdAUYj&Q+Z,1EU,Npe&c(X@(PamrTa)eRNapRmNIEceRUSr!jQ)iZTMm(i1c(2q
+2fKqiZTU4fp#2YmTa24Ml2-f@`UG2Tl$C4mrVDrp-A-98HGh8@DhFI#Eb,e@qe(p
+1"SH4l@Kha52hG$5eZSQ,$@4ICMGC@9Ar0daib[4r"E3Zij'dSFhk&e@q*GC#6G6
+XLkJB$NGYLqQl2r([eppTUM*eN5BViIml+(B@F2C@N!$dh'LjLeLcPY$QEH,e9a&
+kUjmb0Q0RGDbScqRj'Pk9jq[+AZUfZcRElp8[YG[0Ahl[[lAq2Ch[lIQ[[flAEiL
+pp#Sp+G[I1U0GP,cckMbmeGkbSc@RZYE8C6f,R89%e)MGP@9(95B[4Vi[)XBGMa)
+Hf)Uim1MYSZ$ZYC'UBRq*99r+lBiq$dFVDd(8A[La00VEVC9'Dd&eV0VQGCb0"%p
+#4heqZYcp&*l'R2jQYiG(aiHVY)HfiN@`XB[)Vi[4NaX(@aTQ4'R*%E*qaGHA8CR
+6L$T[*U0EmP4Xjkpe94YqCL,l8e(mIJl-E25qd1ppUGU0rS9'cbPjk04VFcb0KYF
+rTb-FcVERp-E*m#hMp9E4qbP4CbeLjMM4G,D4GMC`b+[jem3ih-cTVf`prFp0)rq
+[(G6lZTph8qrpUIp6p&kXA&"iIbH&`U+[j24j24j-EIHp%Vq95A2,SZElp$rpdhC
+q"mp$pcHF#RqYrLVMidadEk2MpqF!(13)i%2!4cBq@hi2G+Z2Aj0q`!GE0lqXRl#
+XQq4lXhd2FJB2K3-E`D#Mhf9dYA#fHXi["YGlG92j[8rf[R%'dSV#qME1pME+pAf
+mfapZIH!0)G1kK[K$mrNX3r#q6m0IKIMj9*[lfSmlZE[)8@3cYa282B99"mHlS,L
+VS,B`TfAZeG[mrJDfUphfCf6S6M(cpG2kFp,qC3)i%2!41emhTkkImf2MZ"(aAY4
+3$PrELpK`SH"iHSjrZk(Q9QKVC1Kp#[d2Mf1KaR%eXAfkRjk60@2UHElc%M`INb[
+#RqaihL`prVH*XSrTD$LDbT'c33lMGGp,G3kK2K#fA+5&hZ@k(KFHLk(+M@A[4V(
+hSPhbSPhbk,j2I!2lZ"kqrIbqINlAkfdcqlV2CRUl3k#Zm$dT-rr'60m'YQlf42h
+XLEqEh)(9m1"L2ES-4l9"2He!cA!JD$I`0G[D$AEf"r'VJF(G`1*ZU#pUS(pI9PE
+1$fHMYpK3cf@ZI4Jk#Aj(lD'Rklrqj2-U,(h[J3)!R0U1$I99[lPRmrdGI941AeR
+65f0lXbflMi[Iiee`qA1m[Q9(d@RdI4aZYfpCZ0E*UG2A91IViqIVkR-f%I+@2lX
+V1f8HDiRkS%eC9-eC4jfa!DTQV'TRE'2P,#TbJ69`"e1IVDR@qha*A&ir'iPYcUM
+rbGjHej0eaZ0p(a5Yeer[rBXHhr*582ccpR(qaairf,+Yp#cVI3Vl$4f9KSkl2jk
+JeHVm1ZKGMLl%"+f&iH#V`%V)@RVS@RV-VXUl+l+4#fdQ&YYlaB@-iZEKeeE$VYl
+aXVKq0q#(FeN1jrP$jYC$j[lTcM`-*am6&rr9XArp`2HU25j1er6IEQR[H($SB9$
+34)%2k0am@iY1&lh#i5"(J)Y!8q+SkfSlDLbY&#`XA#qCIEN126U,+qk2+m[#p9)
+`[9IUPj@SJp9qM$5Y$3hr95SA6bXe3G#43G$dH2#l(MjU&Gb)9hXE5&Jc0K[Df([
+Gra)8ja)A9f%,[l#&f1(N`[%!6XFaV+r)kH,KSXA4aBZ1h&"Vpa3CbYUGh@e2qhU
+E(CXYGSZKPIFRqaPH,$rTVE6C4q*S,6@90PV12S)R6PjrZ(EA(iYFeArq[d"Q5bb
+64Ckkk0edEU04hF62FLNmUmSY9Hd2lHYlqeVH,QB@UN3[(V)@5V)8j)KIFMhqXMi
++YKiH6PFEFmf*fR&VV%mdHPVYG$R0p@`m(@3jL3!F2'lq6j(4VUEZ)XjjIdC,4B5
+6TTH(,i,460Ch&(h1Ka9(Kp"Lr%QDA'raV0E@8qBU[2rr1)ea48Yc'REL01A%6*A
+-6*A9&ipf!BNDje)IiNITjM%LIqHHY-,k()T-aF9(Fpc+b'9q$1mDHS+ZViP"f&M
+3BDalE,Ik6cUDrY0NDVQX6CcjcmFrXA1dSC[d,Hfm5hb&[Ec['Pl+j`[Fp0pMLFZ
+f[Xc5D1[ZU,UEL*e0[&T2Y4iQ!P8Q$YU6ZEImRBFhmRAlRFd1KQ,V@4*hBfqSLB1
+9%[pY$LB1`Yp$'Q2j4XESX*EkEdlLQlL0-k+BYZic%['PX&R-P9iI18ISC((DA1q
+4YF"8B$HrQNDVi')dlmq0Yk#LcffZG28BM6fqafXejG[VBf5f0fHc$XpVrE#q[jr
+)S+6a*9*MC9*-epYdV#98G6E4-&Ed8aI[[BfrGCIA&hZiQCdYaVSNc[VD*Ij3L#6
+-EqhmMSX32,qPLE,a-#8-P2R3b9VC43c@mjL0pljk#qr*pMKmh4qpLB2Z`)2lTH9
+"p1""hIUqp182rGq`I6B(UhD)[kSM9DrqDq$[H6Acc%QTcpP*V*&GQG"4jA$9P(Q
+XVe&EiQ9kME9QFbZ#f9Ci@9aQRV0`!P6NG2@aD25bBY(jeG$TISk0Kq@"d,'(8EL
+Kq,Y-PHDf*6Eiia,L,-@mA'fdA*5ZMA`qMB3rhj1[LkqFX%#4p&NkqTd@6VXGPFj
+69Z3bZ1deCNXV,l,er1UprT0lRUf6*N@06V+f4rVr4I22Z*hr%aFl@SJj(cVDNPU
+q9q#L`IRbY05B$2@hRa1bb9aimE)8I+MAI+jJ#I$'j&lf23[-25D+PZjQNbf`Z*Z
+Ll#9PD($q9G@el8@(+k(,f[`mZ0rjNZ9%j&lYB0$PH49H2m+L'A-%9C4B+9dCA4P
+4VqVN9*h0a4GhFd2hqXfr&VE#PKC(q&C#l(HeZDKC$9ee($bqHX2(Kd[a`p,-f1F
+Kk[rk,Uq[Q2Xkb9$hAiBIUjIL6%28k5aa%,,Eb63B,H5DE+aHfXUfUTIkZ42E8@$
+YB[`mH,r6M`qKD`qK+SZaYJ$)Tq&f+@a6SIqQ45E99RKFIEdR9FH2FpcaFKPI4cY
+P28'GUkkJl#YS-0@pYPZYbMXA-Lk4R2qf4FE)XUJSX&YV(@radrmG"Yr,fqXX0ME
+8(II,8ER#dHHZ2&SZTPH"5B,BA'8LBbPZD1NSmPGH6ME[14U@Bj(Ni6NH0drKI$'
+k&pf23[F25DQPj%c5CcBA-h4BD9Qk+BmUlPFQSkq4MILCVES2mcrm,LNqj'qj'QE
+H*MELNb0c4H*G81GZq[mh3I48GGJ,ER42XdE!@fq#*fAQh8(15*rqb1IY"cbU+lj
+-EEhdEf,k*[Z6%hh[89cbJ$qlerAm5*j2'T1Zfr*jd6h+0J,bIJLF#jqNheT&$ri
+cqVHmrc2AH&Z$lXZ48H2h0bDimlE6e"2pj3p2UVDG`Z1kh*A(d@mVN9(kU1mjd4J
+,qV*AP4pUkfZJNB[reNI6RqFEkeG[GYXYEjHRm[3DIbp2V0MXDZZq[[V[k,U9I9$
+NDJ,NZ68IKZZ0$U[3rZc#Ph[cd-V#qKCH43Dl1f0EKV'bXE'aQC&K0e11VBq+V0a
+JDhZSXY@Gh&pr'`kh9hG*jY*jY*jX,bmpA9[L9Y,RFhQmYiX,%qMAl2+k$5@1VKD
+h,fIP3rBb2&dF2Ic2&mfBY20`PTqH(BrCR,6mm@`QH,SSGM-@QGKlqFXmp$fe(a+
+@(Ur2X[&KClI9d,"eX,'lfaTSHiJi#aNIMrq`(0rCpf"MIUaPp5IB[GT3kMd14EH
+*b-KEmLGifLXVdm@Q$eHYYj819+b'Hih6ce*1bqqZ-j!!HTZ2'Ji+iU*Lhk0a%Q,
+Q*K,L*pXm[RfD0!J#!Cf9[V2TmHl`ZMj(Ae@QjkRLBCNabpcdERSh-E*A86,hG*i
+r)SY(H82qr@pRakfcTBHHhYG#`pCPI%NCA2H[BjQ&jqNXm[$pI,mA1`pp-mAbCLd
+mR#@RM3l6lG"D3,$#F8QI"fQF*hXr(KlE*F623pAT,,03XpYUk&Ikf&-Ef`TSG6!
+k9K9HAmENGA&&4h%DDYfhBBQ09f&AC2pqYc6XH2[(Rk2NC(M-M1UZk6*fp4f2FfZ
+3!-VFjfdRMSdXU$X,#J`eKff@kljR8&k3!'4T[PBJYb'h'dSHep#fY[%YXKEfdla
+X$CA#b'qAbVDpTBQAhYa5B+94C#ZZ[&T-pjr)c&*X+1pbp*YXEICb0YZI%hhrdEI
+B2Nfh0j0YbI'MHaJq6qH*[TLqd8EBj+pmH*Uk2N8e*T0KGH,%aPKE8Q$hYe64+M#
+r$G502d'4dh)$PpYFDHSl26ffaf[CHAEDf0MGMG'3!"l(DmV#l'PZXh5BbfT1SZF
+V4CIel[-dQNdPlPiQ`bppRBQfQElbCMNq6K16id6KrCSH(KGpK,lmm6Ii2Njb*l%
+b4aXFPHCk*TG*b-e5%1`SQ#YY$58HP[,EPe(iUVdqNSlQXCp%#qJqKH`GIH`I3iZ
+QJ92B322cpMiX2akh+j'6#`mQ,e-RZXVe&G,q,#a@-f%RZmc$a@AdNQBSiF[T-p@
+cQAKbrRdGCL-[$P[AbmLHmH(,EE*E[IC,eC(Mk#J[q5epCPmr!`HAe9CRXc!`qHd
+9E5dF$'HIMj1Cm5"M0KLT1Ead$)5)q,VBH,VSAFf'EKCr5@8[@m5BMeE8S"VkUbr
+c,C``p$dMB1b0adEMSh%E'h-6)h9*iPh4ChN82jqZSkraZC@EM"ajhp&(Adh1KdD
+"qE$Sre`mRjpIS2PV[,K6Z`VHimM+i'Cf'lJB+PapC&l'XfHPr09CMr$N-A$p[Pa
+efaIL'SAcXKUIk4I+dGe56PY8G4h2(b'9VXlaCkJp#VXD$X+qJ`eIff@q[-2r`r)
+SrSC$mldPEFrA8r-4-PpQ$eNV2fqXjd6*ISSlQQ32MER2p#idp*N[6T*cB@qZT-$
+Jri5TIbmh,bU2ak(UT9&eHXT[8fAdi$mpR"qli266pR4ArMaEcM4H4aSImq2$rRD
+dA85J$SHkkEXC[bph6q4Zp4jGAZYThqpe'Ni'KdIYG$IcHrhXhGlbIZpj0rqk(&H
+lU-$@D%!jDYmLJQGIACqJb@TVkD"6Cbak'@X[(JE(Zl2132GmD"DarrBIbbU,$@r
+2YqIE`F0E`CH`lA!bG"!b@UNkH"Np&Ak@JSmlBc9"jf3XkRR@P9jhe+Fqkm'@Rq*
+%rA@ANMPa[Ua[,jd6rbMjF6SDH9RUcMCh*`V$$EcLq0!`pPid$)@8I,f-A5@(3XS
+G(a)AJdGRqA+c&R&Q1*&qj$pLYKlD6$f8Q(XDk(Uki"SZPV`ULjkaMj%1X&a-l0`
+YYMk@dcdMMddEl5L(Q42rDLcZ[SUISh(pj'[rcJ1QkHEQr[I93F[rEX*A[jk*Al#
+qm@*jpKGdPrZSR9A0*K2TaYYqLKQ$k#fdC!aiI,D*NT85MP8P,AhHKLDABfmUQZC
+@BZT@`[Y$4DZ94D@fSU@fT2aa-2FUleNEIQ4-PEG#jLmk*Q2FaYe&$L*Nl$`pY+m
+I-a-(MGAECfQL6'-mqhdH8m@[QXhAib&+d0qSlMe0P`'@EGrdf0pUIl'XmA3p(@m
+2C8plS1(V0THDchG"$l!eel(Il5DhhXc1rfNrfHmfQBhqEeHrRrjD(4HhU-Y`p$M
+q(SFGlR3Uj[SlU"J`$US%akeEjCB0ACq"4k+`dX$cFp!eH1iQGS0Y,mASB'dkA(k
+&V5G4Ed2h)2h)-[Ed-[E`2'h8$'Uj,1DQZdd$-Cf[TD$4DUbb'9rMai8L4hh)AS6
+`8amNcb-,R,U$iGc3iqjSFAF83"J(M,FcDa-(EFaimi@4EVfCVjcYh"!2mrj*(IG
+&3(f8adCRaVlRhd(eEfKp!!lbLmi!q45D6N8P,Ga2*@FF`SCGQ&2,ZCd0(b+(4AZ
+&p5Uc[eZVbqCa9$3r93@qdM8%a)iqRap(3@%M9`pM)f-AckcBap*@ED25eQbMdGE
+VSG(*r6PD@ZMIHb9I%qp4em6[BG(DFbr30md13)i%)LRC-HeXFV8jA5@9I9CVV9H
+LJU*UL("kVbZ2$PZ,$aA%KBHbK60K$l+[Kc9G$RDk(19d2,em21f(-LImdCa!eqI
+jPk$%Nf[8#1"%Ri!%Mc[kl(+k+aKD+UbrA+(2YU(0c#lUJXGMaFh&f*d[B#bKGPB
+`TU`Kc9I$bGI$b9H'pF(pGd+r3FbpVhJ03)i%)KMc[Tf19dGP3DUUe2qRACI-j6)
+U'+QGZkhF3F*j@B(RTmE)JEkZMiVL3m4@`[2Ne*)'*V)p(*UCU[K6dQ2NUk150Q+
+q&4f#NQ(5hh1!5(5mQ(5NRbhEC+`C+0,A`r["%T3H3[i%&cSKIVXBAP@-$cV+Je0
+9jRedLj*)Zia0e*UHkS14UXaXH,$`1-hr%KpU!RD5)rReZil+a%k25L,B3XTA4D1
+[LUEb$r"809h3!AphEpaA[B5C'lh#r"&JRh+5GGp'N9!-VUV,lXLFPejIX,fR3Rr
+%PC23jlTE2lf*mc'i(9i()5rSbr0ep[L1H!E!D$,qR"P`4JbqUYTk$,qTRqVJp6P
+k2#i2UISl(N5*b%S'lEY2l6rllMXi-[UEHDB#mp"(k`$JbrkTG"q)PqmPmAVY9cG
+Rk'Zml3dY$f(iYEeHS4eLCEk-*bCVUi[Ap0dp(P`-j(prVk$ampqAbY"5k$2D,Yr
+%S[$b[pm&RI*mI3IPTY(RFrRSQHlIa-pQHhmV2DIb[lpE5q6qAbUAaXlRXjjIPCl
+j1QrkkET[Pk(3k!!!!!#!U+Q)Q*UTQUQCQ)H)QUQCUTUSKiL*QBLDUTH(GiL'CkQ
+TQ)GhLCGRUCUBGhL*PfDTUjH)KiQCGUQXPhKhQCCAUEUSL)LEZ(HTUjL)L*UjQ+U
+,Q)LBLVQCZRLAH)GiL)LBGhGRGRGiL)GhGRL)L)QCQXf)UCUVc,bkVDL)L*QUQVS
+J!!%N4fCSL3"iQBLDN!#J#U!+#D#U#U#JN!!!#J!!!!!+TN!N*9C@GfH@GhH)L)L
+RH)#TGjL)Q*U+UjZSLUQ*QUQ+Q*QJZ3Z3!*!!#UUT#D#*U3#CLDU+#j!!#CQU#CN
+*Q,QCN!#)LHRiFj3d&CjAJdADpeh2GGVj@RV2aDHXlA5qAj8IYD1IT1mS2!ql51"
+Al@EcIGGcpQDlRl-hR1kqe06[c0TmcjRk2Xb1`qCeAUHNJ5hdIq(9CMr(,j2+p1C
+a)hp2GTFcQ*ZVbH&hpMLlDlPE["mk0N2A`[)M6HaPk+[Q3&kF[44j[mf9Pk(R9mh
+UjIKmf20q2KdhfSq3!+LC`Y,h8E'e%cHk$2@FaS*rACR`Y(U-pRDbNU*VpHb`Bf,
+r"ErImE'aFTPZdRZP#fr(iX2Mm(pNIrLEjR1M-"G[TE[[p[Nk6BBl8kI(E$6@P6G
+df$5G,#mUE`r`pe'R1G-5q0Q*fBPq0'b[f+1FlZMbQH`Y*4c&CGkQ6Vl5cff$QU2
+*8Z*l@VPfp(8+)IUNL12Af2d*c4iAL3k2U0KKCU0M+fmdXV5B1RMp66BG,(lV5ql
+drGMqjPHCqk[pc+Hp(rfQHApU0U-Tb-l'T+6%RBf2ephZkh$`Z4BpGEqISe0M+ch
+6KBUIrEaIHrECBrTBVlXf!E3EPddEcTrMdXe'RkZCPprBjQf`iYI-B0IM-+2e1&(
+aNZ,(QlA$!AK9mh[*G2cDqEriRCG2(Qq0P*G004jQSS-,5cFE)9&,JeXh&e8l4ID
+TCh`jUIlE2jR2CbIS*UHqGXTFE&rRYp"T(8NV$%dXpN0GGh@h`Fh'afU`jf2NY,,
+QiqGTTFhAj1Q`jq[aP6XUrp((`9*ZKplTHp(rdbR+qe(UjY5BTCHDSmIYYh*E*Lb
+U0,LriI6qRfhJG4$Pa[-a-c2C+S`Cq*d+EMCk$McU"DAM8d2qmEmFrbIh4Y2KAYp
+IAYlJa[adS(-%f![ij[P8IjTRP41IT105a2LT1,@4H6RZ0T)I4T-'FRXPRF5adQ*
+Eee5RbCcAbc2+r"ehYAHJlh%d2G8H6h1&%VmC+Zm'4'b'm`r%k8[`kqCpHAiCG9,
+TrjTe"rl)mhkq(j%HCZm+Uk*8GDiIIr@MCQVQF62Cf0iNhbY*i11k1+lQEaAf)h8
+5iNHB[-',Ai["JSmK*Pd8DIeI*`rGpVmp[@kCY12k3X+0m[[mAqZ+m$m'2jhJJ'd
+'aqKVp26mI38Y(2j,AiIK3U1BadR#XFAK9maJ9mcH5iXDIi8HE`)drlNcL4Bb#F#
+00hH*&jXDEUqE-bp$0#E0iP$04XpjFrL8'CMCl36r)c-h'mbVjQIYjrae8c-Ccj-
+e,RTr$mr"VjR%qcr50f0eRGV5HPSp4T2,drP6Y,cCfPjqR`qE'lQC!Al!$eIhjQV
+mUKRD(,8'DRmjQBGMNrcf8Ab&"(eU,U-eJcdaJG2L`G(#qcLYC&rKa-c$pE4hZ@L
+9'TZmh%m,B5HIX,VRlHjjqh`HMJFk,rj0X"A!9rH,RGIG9-@FV,UYL80,*dX5PdF
+UELIlm@,EfAir*C4SR"FaIqZXiR@IrCI5Pmk0pZEB#biXhEaHahGTRG[YDA9HYTG
+9k96U[befUm[9kVbpMU['Xp[iA&T-[aqpifJbr4q[Jf29B9[aI[@'lTEl3aG9VjA
+KaG*Yj02&ql-l[8)%TGh9dY[SCZ,Mr,dPa36NA*H0T*1CbXA3kk9iH$QDV&j#hb(
+B6ha`VZ#,)`+VR4HG&3)i#%#4ZE66A1TXcdG"Sr#V-lU*VFBRjlIr@2p#BreS2ZC
+Aj*R5B0IPCIRErJp40DHNe9*Cjl3DqSeqeT*UdcYTU0(NT-e*e'Maf$hXpLp4SX+
+aQ2+R+r+iG014jbA66NDIa+ARk@A(Qm2SiNDI`ZD#%Bcp@Kk"C[$3Rh+&+[QdU"Y
+*L&H)#jjJ,jHR!@S3,S!&U-lUX50jQej%pY[mEH2q(U[r1CpRYfVXll'$06Y,4CQ
+IcIIcHGKCqFlf(Rjc['+&0ckP*Xh8D4L8A!Q)q'e%q`a",M+MkASCaNGd-ib1+#G
+8DmM-jSM)ZfH*j5[5rACKEi(*dNDIeq&&L4XCYm,`imc@bp$'S+E%mUJip4(d[mk
+r5j6NIMqYAarUCLTb2)mD[d18j&4(d-jap((TG*LD@019Z(iFDBfq$&Tif2f'*5a
+i2GVr"X[1r%SGlHGr[-fmAUEccICQTV4dPaQFpQSR88Q5f'edH1Y0V8frKcF%ak-
+j9C6TcN@Fk8j&S2PQj2iBFc*r(PjL6"-bDUCN`IBLd&e&R,UU!2+!MGe8aG`Bqme
+X66pKYVhlfDLDUDTEkNpRGkALa[c6I+jdBa(arYjH,JfqQrp+arkdkC!!ra1dqRj
+GhS0"Zk[-lEDirE@H2f%V9B0G'b&EK9-DEdXZPVjN"HR,TBmhpr+bk3a"II+j5Aq
+&TSf3!09JqC&mkLrcm2l92RqkLcrHaZfRm5QMG(i1G'rlQrJjXEiZ9am,qfPXTrb
+qTi@5bIee6@eh'YUjV4k21jl1kR1dQ5eH5dH1eQ5UGPNY$kq5UIAb@PYmc199AT*
+5"F,Si21MI4Qf!S#pE'b@"EdeAe2qI&bADCAqNc,XDV$TU2&l@c`Fh4p4VX(2a0&
+$UBP6%d9(e(kSeVbq,'l5Hl5H!5,bV(FFb2Zp",T)dc1BIKG2$cXHDRjHHRY"85j
+fHb@Z`B@KMGTp$4B9[pZXaRJhRDGM1r(0i8pq1Cir1MIIQ`&TE,0rT33`0!@0j92
+0q*0dmh6j6a*cSkl6kMAeHfU,V3B@cRlHhdHRkVBjMZFX5Le@+cr)cHCRTqVT*HK
+bP(-NLG$PBda8DI#TTf0M2`j,6i4R-B4B&-iFDB,!TR#j`#!F"G4cG)LEUDM6bY"
+V`$p[*q&DHPQFl*T0"0B9VAd0Tq#hM9UTTNP%q*QV'CU-lJk5ESY6P+,86P29j@,
+idk!FE'Irml'Q-GTm2cp2,cR4a-j'Q[q*R%cI0MChEX$qM,KG($Ka[Vi-EX-1MkM
+$SrQiP&Q+6eZ666hXHrApVEqKAI2rfXFhQ@5(d(SFH&6CQHQpMS+6$d@TbP(-HR0
+D6"m5VbXE'Ec*DI"Tb,@4AM-(l`#iARkI"MC,pK*214XCKjcQJ54SJkB`qhk1&'b
+@h`Sheq&'Q-+&'Q-'('kP!Q$Q-I+ZX+*pDLRXcYFIlI(cmehfBV+LNU1ADm'9Di@
+$q$c-E96'@bf9q@Cj'maAdr1Njl38QeV1kV0GVXPTD[F904[+laVbYU,[9q0apGj
+mpi12jr(qEi[Jj2R!(i16m'CjXEl12M6ZEM6QLLcP696GGj-j@qG1e2eqqlDKQTf
+&0cNh2HRqIX2)MfrRqEMC-[YjR0+9hBmLF+DjfNPdK6A1k6#T#QXeTm,3%R2YP0I
+#+DaHMKaBdaaTR$TbQIZ6H'C,*M"*$aBq6[-1LVmck8aL6rH4[*QH9@H$M["l$Si
+V-iFp-B8E&i8L0NE6$mQMR0[,L8HGNmH&4eHTjNh'[rfepPCIImjANIVjAqXcG41
+`Z*%2jfZYlD&F9'lT0"DIkfGYDA82U,U(MVQHQX1Hb3"Y"R)5$dQ&$cfeZmj$T0G
+HC[eFAkQ[ep,5kk`qPRlIDrll@heX1BZ,I1GFY52(UY("eZCcFhRmT3cP0P5`2lZ
+5drJ6XEkNbD#`#p(#jZKqhNp$0p#VdIPeP4@D$ACff`XrEa1[A1@qTQZSQH6(h2*
+1GYSc@Kaf[`Zh0QrjFjiYRZrk3Sf"'pbEphR-"A)9dEVEEc9Ec8fYC+dPj@B1KSm
+R5FIJk[Nf9cp*Fk6Z[!qE$j'cpR-DA6bkHMapa&k&e%q'kLiNRaH*&T1G`iY,IaG
+*mZhZiZlZiPh*Lm+,5F6SbBR(ZSP9eQCP@pc%X1Xaq$dEHMaP[4c'l`ZMDBG2'kf
+,M-',e1"&a['Lp9a)Z9iNA,F1,QVq,3hmA2hdA3h[lSY6+LedUPl2'hY*hm'UQrA
+[Y"iG9X-pkpp5CbUfqGfr$THfLbDZPiZLi(`q[KH$erh1[j[JpI4kkPj9*'VFpbD
+Z0ACRPD1Hf'HjQ8RV2-qrq,VShrZhf2dqVm[i[YcK8MLXPV-9T)Q+RmT8BVUXIYI
+IrdL6f`bf&29XlKcfNd1(26p6,RXT@iNp-E(%Kq4'cYjkq*!![*MCRHAH&6amCZ,
+c"j@$(l5MRF+0qr$MI&KX"TFENJ(Kam#[R2HVmVbZ`VjhNrDVmXJ6N68IkA(c-IU
+jFj&r*2C,6fFaMj1`edcNV6H8NcRY*KfP0`DQVf@$ErQl*,1C@fp(SH4lA@BG,R0
+,2BbVe1eY0VSlVAfQG`Xe6jd2X([+2*D6#XCUQ`Ur1dZ(AjfJ`iqGS3%S*FE-d-Z
+0-D($mLZMchS9mp%kFZ0raPCFDe`ir#McRZamU!I+l$TB9M9c*!P40R2jd%r*c-Z
+FSTmKIAk16Vp6U,5dT,65BIYGPb)qK`EIBpQY4h,6[p-aL[p[jI5lAXHel(YHarR
+L[bqpTma[rVmbPlc-DVAmU*29Phak2UCG(mh(QF9-i-EjZC`D2jZHZlQNi8A+Gr&
+b[Idq9m5LbhKdq@m2a1fm2`qhdA4p,El$mZlf(Pl[Eq0GlIaT1lm+lhIHi-63CM'
+AIGB0(MrVi0(Nq``D1I`D1PNmQ(4kREF[54[@br-QDr!FalL[p-9Y,+bk[jf$06H
+H1QabB*cPfp[XkE4kR35k+FSCl(fP*@B0&5d&9d0a0k(MH(@6m$!QRT+D,dEHEd-
+2She(ra0hXEp-q!NcHa[XpIIiV,fAAiA1LkVPaGKbhJ(H!Ip`$S%3)#I-LDrQFeS
+2dEf0e&C9fQ$68(KaHP5df[`022qE%kG*SG6Jk5Jde(-9'Te-ZFcHDSp"RE5Nj0K
+p2hBY"bYTkI@,@fR"c[V,LlbpmH,5fN1EhF5BhFA(lZ4d0h)k)"lb,LlD(p'Cirl
+Shhjr!P@hbkhrbChP2dE@RrmQpiJ5,M0h&qM-lb,eY25fi@!Gp@RTDLeTp*8@[13
+6dGj5`Y9DcrFE#ecd,B@de#f'qNEIJ8A#MD2NG(N4*GCa+@,[+6KkH*DjlLD5*Ge
+('R*lU-lKf-rKl5bqKmkTeFeR%Yl1&2a+E8cpe4C+CZU,-c&c46FaF88,XmClHkB
+$fRhL0ZkLicHL4[RJ(%rB@r43G6qcl(UlrfICqM0lf,-@dAkNc[4Je9adGk"GY&Q
+!(Q`(YS[Fc0Y63YKDdd,p+#Ie8qUd'pTpYi@qTpYRGp6fFe[kH9`+,SF$QaYYc1M
+JcY(M0(JD5,r(6a1P5B0-G6mh400bihJl6SI4qMfAIa2#(1ppMbF[`k,XV$9eQbf
+ph6il6lZ(0qh2d9CFd8cRV@UaIYqA6e2#TmM-lb"i#jX5mCD692VVLRfr*j`#IZ!
+6bGKbZM[ShABkfa9&qI(F)&JNhe2TlIQS+kfRfpUJ@f8V39B&6E3Ue*0J98@h4ha
+3C!c3c6k$Hd@hhT3VI8q[cZpTp[[TU&Ypp6fZrTpYlP&lNc[SfThp(k02Yq01d-,
+(mDQS2%LmLPTYYa5k*&j0*SGIaY*3H2%k04UGIK6QEcG(0CfbRifLpZbjG2SH4rY
+p$VISq"Y+1N8YpErPKqhCfP**UHrdfHLc0PQLQ9c4BqXXqmLc&P6-T[MFpClUhm5
+XTqil2(f9BUIEUNTjqBYkI*8T@(Lpq8f*3&10mi#L8Zp3+d8ha-fBhf+L+9Q`*h+
+Y*"4*mV938bEm`JTNm`+e9bK3VH8bGkd-r8!e+K*9bEIICj6+9Fqhi%L6[eA96lI
+Q89Tc#J*DRZL[(5EI!dP,j#Y2f#YBSqTT0,Vm+QcAI8Fe8DlAmI-`XA5mR@pap$G
+lZ[rafQUlcUrhHepbFR[k`q,2HI4q9(m#[c@(mQ&r6"jq4`1kJrGPH0035k(LjQ`
+i8j!!E@Z[U'$ADbpjqbPFrFAR2XS0"ZS-pZS-llF(G`XeFFrG`G4[*(3hNMjHbrM
+Fm(Rlf4GEk4DEk4Clq4qb&+hX,P@d,ppVcq&)U,H45@mLIYj%jEb2TF(dphZplf8
+L(`kIr5bp,[HVc[D6fEKIecPeaq(bllQF@`dA&Jdh$Jp#rJf9r"kGp"Z1GH`@[be
+h%mq9"EAN%S"T8&VH`EJ!lj%HXiF&G`i00a)-ra[lGRdlZ`j)AKXKQ`VZ*"AF5`U
+H,"pqGid&$J3IGb['X1lJrK*kI&X+(Lf'K"X*,m!l$@A[UqKGqc2F5Mi&I"qIDHP
+R9M2cNpd)9hkRHA0TZSArhp%,QDUXhqYcY,[T&A2fdMDc0Y)[VAbIqGj9G9D3!'4
+Y)*bcJS,1UT[EUY*lF'Nh8'TXS0IC3DkbJfZj[mj"Y[6[mjBHhqR,FMQf2iFrbDr
+cl(c1(frahm,k19[SAeB04Ce9ADG1lKD@6#eGc#f0a#hR#KFMJ`ZP[SQ3!,D*1fF
+AapCIEhLl[$pA`E+ach@BqYlbHC1V!jI&jH(BGpK3DE!JfA'Jh(&JYH*"HF1$Nhm
+(aAm(llk$TAYIe0lcDr'mkmVmMcVZ[b[1Neq@ZUqGNmeS2AjD6dm1#K`l#K`i0$K
+@'K`S2&VmMH9q0P9r8bJ'JkGkS&q)!lq#9`e$ZiiLLRc10BGpIFbrjI&a-'br22r
+2jRiXjR%SIYZF9eNpm[Tb[C+YpPa2+[S12I3Fkqjd(2[HRJ`r4!H$ZV1pkGc#Kkb
+jR[&JbA)kGa4k'iSkRHFMjH,&iS$JKpr+h-p8h-2X,cQ`C+iKe1&$UF1(j9IMT9I
+LlaJ0+VqS[B1JJQ$SAX(`hX(([B*9l"qZ9B5,M&GRmcVa#klDH63I2rpA@D9dfd`
+,2"Y-$IDhcYr)h'qNARpGa`DIFHj#riRH&#r9"e'pkI#KE+hKIUN6@ehXLDZqE)Q
+Vb4NlYJ0H51T[1$GrepkTXUUTh8AlmlC`r[j@cKe0RPr`c[)jeH![6j(UrrIHTrP
+TrHm'br43pCq$fmlQbj0,pAl@$*Xq,+eh%p25a0cFjk,k&hQBYGHpe&VH(kZK,YR
+'X*h!JRF+UbZ(9C'A9C!!a)Z4im6'mLLVkbej-+[e'jj@FVp6kI+cPMkAkFYL[ZJ
+(Rm9SF9iYK`0YBF$B@1Ep2%N9p$lNl,Jb'("pL[b0e(b0e"dlZUkGj9FUmJ[C8(k
+,k#XQ1("0jRLISdN6hYaQ1XTqdlr$X[&ck`2jj8G[l$fBGja%$rV[YRPH(Apc1S%
+F"$3Ml%&V,rYXmaXrY[c)-1`h2$G3ApQbRHqkRZ-jpE+%4A2bm6,m$pH'&1(cQ!V
+S+HJIpL[beqLRl0Pph[qUdY4Q-a$q61Ar0iIpXebqGArTR@!VS+B#bSZ4P3Bfmp5
+$api`&PDf#ZYkVAh&9YELUZEHUPq[J8%H(p#ZPl5bSZXSr%le5YY0rClbci1kY8%
+Ele1(eI6pb$)m+,1qj&SH$%UH!!F2@Eq(XYp$h'pKlLfL@YV%PEb(qrGJ($kGR4i
+hfk2)lUHbZkRTfbRU(BBRQ4jh@5klCjAb-26rDXFERTh"UmpAih*9f"rkc8(lmGX
+Z0l'0i[UC(Lb*hLG2G`@ZlX0a[)0PD`ITbYY"q2+lk#Thm&$`!$X1lNFQjkIZ@(9
+F(f0E[qie[FHleIU3!)#1eX[%LI2qGN*cl+T"a1(aZ(a-2Cb[HjeIaTeJ+j!!V+q
+r"KA20JPh%&eFG2L`rUJ2"*!!0ZHR`iQ4iF6+hmA+he9PEd!i-VGqVPVQhVq4lpM
++X[jdIdG&[U2lbKfkj0eG5H4Gh9eb*0rlAIiHcll$qe(cF[Rj!"jV)BAG4mPP-)#
+XTJpe(l[ZUVRcQ(ck$Lc8HDS1*Q3&iFh(b90`mc(lZEUYUIZ&9Dl5iI2dYl14qlR
+DUSVF209@JVCI2eFR04jV9h@EMj,Bh3&E'jcFIZmh9Blem2RlbcpHA#mL&(QYjVV
+H2NVIai8IZiI8kLhMc9[8`mKKmqidX2)5iH3d&c(QVR4`mTK`jbDZ3LR-PG4jUkr
+`Kd'($S-F"FReD#A$cph(bFQ`TX1*3hC`Ce90JqV0hF(!mQL[VUpfhXm#(j-2V29
+qcCHTpecHbZEfmZT0jHh9e+[1(BEh"p@l`[CNiIXh8[Rj(Kcf5bYr2IEb8lI6hf*
+Z#VPmqT[*l*9ef#@XNchFj,F(hA@Ya2IBKifhRZlKj'c`iH9fX[Q`jhABI0Kk'VP
+`kQS`qI+di0kc1JPZ-P,KfZ1`qIa2DlZ(bm1(r#Acm#[bB"i-BrfEmlM4H"9@PrH
+hm2L99c`l,dr!kc2IFlfG@'cCrp8HXeH*9C!!`SY"aUV6m5,YlkUhNUUj&h9I&*M
+p6FamKF4mVDbr)Vk$eq2jPISHRAe06bG2BefKj9CBkbKjGABl,0FV89rTmh,F[mh
+fV(dmYb[bf2TpcPZ9U,(c-q%fQdA)VUr49`F81bPrjajfe`S-EJ`C3aGm@#QiN!"
+@QUTHU,16G4mKEak'Zj9hm'clADH0i+db'D'Yh`ElIhe[VHqi8M6F(Tlf4J'KjcC
+%VHb,ER@dLprVAF$@kcJ50P[d$IUN@Zq@Lekr!NDcJb00lNM0m+jZ1&*kEG#9J,c
+UrbUr6B'rPF'9[j9PFIHC-#MHCJDAL4GLmc!VmMDiIR2DB(RjrP%[ZIBqJm5mb[,
+*HCEPeIaUAhJ@0FTH9*,cTiRR98aF52*eX'0ehKE+jdf@be91qAk@PZp,fmc99[K
+E@F[G(h(fUVHGe[H,ihF9q3l$BiQXVi,$X1*VSRBFU*f(*k0[Q09CmVTDlPe0(kp
+0c2PSq"2F6-IpI3rVL[TBUIP@ASq&eIXArGjZ'ABX,!j(%j1$BI5`B-raB$0"AF3
+eFYaI@(kPd&I6[HG"ZCA6-bTUR(3N[V!"YaHe8U995Vb$NbB1RF@2Cqr$iZKZ)ml
+G4XV*MBeDCmAqm'Pi[10Ba!R1JmbrJmfrkFVr213HCkfi[[0cN!"X[5h0rTTUrZU
+fDiPeT*Zr[,,(eePVY![YDq`H1AMDhXq*PBIXcm2BkV-hXA&j19%cGj%d0j%UEZ*
+Uj-6Bh8AB5BPTGG(Ka1jQH*!!j[Ka*[K`k$KjI`)r*plCqablRMhFZ9KAZ$Hi8V$
+[-56bEIQHeEHpArYVrfeAcF#,p'D`+ISFD,Lq0%ar&LicLa-K`iQ8@,L*PVf*0ik
+lLjl-h-A38fV[+#mPCZj[X[f2%fRM8LerTZ&rrjb[lZ23Dh)lV95*fcdP23lZPSY
+$[-p491mcd+ZhQCSUQec22YC&A0@dLVlZ&A@hGFm#CUeNDMl%,@@d,N[M'0dm,fB
+1bpk&a1iYpTj0+X&qDKracN,IpP9m(f0G[peDrVi(UD(K8p6EdAimVE`[acU"(!3
+mL!#"*k-JfXHG[qP`B9j`)A)hm,Slk(e0Y$QE@(2fN65EU,UpAIlcMHhKf'dfQ[T
+QaGrhR1bp54plI@[$YGhjY[kR9A2NjDjTk'jSY$F`[+JaeVdlH&V$-elP&X[FKER
+J3T3"lq&bGp4FRI3[ib0G`T'SYj&CEb+Ziq2G`jfdKd0R%SE1(iXM*ANM(5T',P5
+1S[I1KqRVVrc)GV@F1ZKi&E$j1JieC%rIRF#VRZUb@$q5HbZ1`rDl[Cq"Bq,AkAN
+aYIbiIrZfrVSHYrV(T[ZL[HqcVHCBIkmceE$V+$fImVhrFk0p9eS#Rc4`A9edlq#
+cNRe*`p$I@'eZcr5X1T[I9eej"rPH`kk9`0(+JUmMH(4RU-VG`pPGc8'G[i-p1bB
+HiNjQ#DiGKNY$G3j9c0`C,L`Bik-2*Z*b$(FD$U+khLI[Yjf$U-#4QT%6TfHXXm(
+cXhjdpNGIXYVKHER20RXVUGaVX2c)AQ6dl9fl!@ZRU'SZ'!YE2D(3A1TSp$S,UXR
+[+V)G$0FQVKk(*FVbiL"BG6MZA`+l(FcfI1pheImrGpAr,hV$p([@(Tqr"ZIIJh(
+`G,KarlaE[&B[LrFkq(qlPl6rI4+L[H`[PcQlhUjqIXDfRp6UpE[qVmRV1ahX'Ih
+XA6Ef*V,D*kGV$h1mKbYh$j9R$kIYa2MXU2UYYKqG2CV8BQXRUQSj1TSr-c2,mZM
+pMY0rp$Pr"rMehiZZjYMmR[qeGC(hHmXGIPZ9RUqXdA)R,(3Dc%cGMNpaK8A9B&&
+f2'SThM3Xra)@LiF+Z[iASAY&k%ULh&j4@eh#[C0&bEQRrK`YEbZ$l'rkZ4)5I4H
+af8LLpMjQde(KTYcF,q1Fl,f,$Ib2m0lEEccEIf#k&3h02SVL&jP[#fA#S[6i0&Z
+H"4&cMPEk&r$H`mEE41UhN6XGj$bflKd0T$dAYa0&ZSPGZSISE@qrbKfZTiHVLAY
+*aG9$q1D`IbchBir$XTIYGpb1RbBrimUJ4`%FQ2jl0)IJAZrNl6rAa&rhkFKIdcQ
+m[rkaGr6pPAE[f0P[0EZ,AbE@fTlDeTj9Y45Yl4@S"lk&Dlq&ZGp4HR[i@ii%,C!
+!"m'&V2FK9dZaRCGH!Fl,XFXm"0IQN!!dMbq&)UrFNDMJkh8F$@kMJb0G`*'ehmM
+E(@,hdLkhZYY$V0Ef4*YT&hDb-5eNFIHDfmhHYYYh)rAZj%MZ)R$l[L@QdlrjLee
+*eC!!RLfI'Y1,[YEiqrNDcQlk4Zb!YpcT%[Hp2h$TkbplcC(1hYIpfGa1F`&G"9I
+i&Ihh%i0e`VVJh@dp6&,dNCZHrT!!m#Hfr+kA*Vr+fIIbl,$lb[b@@`CU`k'D`-c
+BFkTiY"BAAQF20@'ep1qlmhEl#Vh9KSpeB9(Yf'JY)-pD@%eZl$*Eb`aeVBBZf2V
+ee[1hfYa0pVCHreYe`C&RlQYerZDhAF,@kLheYCF5+ZjeZJZYERVV@jf6V6E(b8V
+@iZ9VHS[ImiITkqrmf(E9I%+9e('dm2TdI#c&aMIj@AVI0IA+Hr'UIUqch96QY"I
+CR8DQ(VY&cFY&k2j[YDV!d@9d&p0rPe3*CEr$Kj!!HqUr(RGjKXbXi091mDUTZ,9
+9[$UY@f0T,-V1VEPCr(e(9il33qk1c(`jlZk1C`ir@`IhX2qH,r6L'`4cmVImqG[
+ZI3hXh"@D'913!(P6X'JePhQV$ZmhBIBcPKMV+`aHkJkMfj(pi8llR2Y*(lB@Ki(
+2hNLcYC'fYC'eYT(kS@bYS@iYS@jhR2hqYm@&HfN,P@I3pb4N1$rRkQpN8AFIkEc
+GArYlhVYTi1,AP4cCCGZq0cE6!rV2GA0AhhHib9r#qa$XrEbpcmcX[QqjPrSj,J`
+[r)F,qpeEmrJ`ZI`BIBHjf[cHebr0XZIaBAdFPa)A@a,2GBHkrYfADGafRC6h9pV
+Y+E'11P0DFZdpfdjHreYlG5*9ecN#1!Kj%(d&1R`)-e[pE`lEIfR"mRhD)"pTk(8
+V8eK`[NcPR,rVQ+,0F,G@GKQV5`RE5`S,5`TIkk+649dQLmq`cYYB69YBC1fX-P[
+[MZ)A#X1ShpMqbaribh-q2Q9qjjGIZrHSj)"S'LG4lN6(F%!iQ5i%21lm!iHJhd1
+NhX1ShX24fd1XY3$KkIH3!1YhF1ThF2`l5(h(C8IF6d,l%ZcfRNieAACZ(rh#h(Z
+H6h(9qTmqchGR)mQ&5fZkYD,rAHcQQr4TCRFD[Ec'kUI*aq2XkDRcZ1Y+@RTYj5!
+*S+I5@ZJS[,hhK4IKbH"dFIJmhCr9X6GiHr90lDpiA#Z1&`[FYrcG8TFpe#jqFj(
+[mcp[-pr&C[&AZ+q#GaA`CA&F$&4Urq'4b[-dQRMk@ZUF26HE(kRCE,FEMepPDlb
+ZYC@KP5Xr+P81$"q@`VqUj[Bi0Ip$lHBaZ$q5aaYlPT@##Q0c8S*,E3fXUYYEA@E
+MepjZ0MJN"j5ZVH33MkH9l(i16LSZ+iAiZdjhiZdkH+jH+R[IpVqhYHrq#beRcP,
+r-`[qmj*ih&`H,aZ4XrMaAdCh&GE"ZEU$,aFVFDk$'h&E"MEIc1RDf[k[1NHGq6m
+Z,NHGjh1mlc[1j[R!IjX'0f@iYr0mkUqVj(Q`C$CE+jmIcDUFf@XZ[-mbUTUl9hP
+6A99EAD@qdYE&hHKTZ,59P9dCh+BIq&caj2ZqerImAAFlmAAG2&I1j$)iiPPl(ce
+0[03qR#Pqere(mc@5edc#h$BAm(VhY9b,bUrHB)lU[aTJMYkr,EQAjeI3qRLHCBk
+(d-6d+r4Fhc12qE+@1LmqacrS5rmV'Gh1(VDr+fr6`S-MJ`6Q$98'"98f"&djYJm
+@UeCYLF1,Zq(%a,q*r'*Vm'(UF+(U,c0`k[A9HZ[-j1jZ(8Dl8HYGjc0FreV[Ymh
+R-[hZef[V5HflrjBF1&GA9cEh0eGA&a*Z,LhV[XVLcQFhdThPerrA-TSfNf'*6Rf
+&8FaK4BdcZjG2'R0KLDD23DVMq9@mIbY,b0*Ak(SakQKj&CAk@Qj&CcDqTqh1mLV
+jeI8d()V1Q!I(dr5j'PMk(bSp0@iQQM8Z`a2(M6qhPN&AH%HhBK(%d8E6dh,`IJV
+rcfrGrD8GI8cA6RIfpTcrl5rISl[hBfijGMjf*aITC$#Uiq2d[-jdIrLFB#ZJS"I
+f4pcJqp4mIh[Z@AjqkCrkr0r)IMCPqXq(5F1&%eea%UcDDNaCUlLj+mUZ`qpF9A8
+H&Eq6cr'Yr2ehPfrimYQX[MHQ!QSmZimbGbq0ehMA(QcHAb2YplFe@0ZDUCZBqNj
+%DQimHQimDPimHPii'4Y(bD1V[m[e&r#KfHeiQEKh@[3,VZ*hh!c2Uk,ajbqehUq
+4#ZYVFA&RGHce&h9GVCHI008rMRH(BpRPl[6hd6&bSNeG`k5kKePa$e0[$epRpk6
+iNhPj[QklaVVlq@RF[-qYiec6c81EYi*ZjL8R*SkcNdHNa)2Hl2rVk(CFSfEk29F
+RQar`c[VAhQa0CUlcc1RHHC991`PHE$f1e[I*KeYaPp2F`k@6$bPj#UYIAF1j`V#
+hXUh-T#bIII,1iQBT*I1MGbZ@J"HM,SqlMCNp'B"Y"TI3Pp#A4jR%SF[YUbpcm@X
+dmV2aG(X,c14G"YlZ&&cflZSQ-Z3$L6&a%QEH*0lr9Hc5H(Hc1UpR)GI$Kf%%2f1
+,'lQE`b)C[$k1*$l@bdmfSjbQEkFlGGRrTFa-pFqG93rCLHV%p@,""9DMXVqFbrr
+Q5j(1R[`cA)2#p$kc86'MPH4%TEJ+BXeG9AelXUdjXIlG$k8Vc)Y6AAGG"6HC*VS
+0$@hIQ4G,VVhaiGEYEbUkLlLiiVEZ+V2EbmTV#`LF$Y-E`lI86MBik8llpIm[ZiI
++VU25@NZ2e''Fd4mDMU6Ra1bQmPa$iaBlm(BG,&IBr"f(iZ`r"f&EAk'*K9Nj'aZ
+5fdV(5IfIqXa-ISPk+aRr2XDDTj'P,a*HFd2(VHPb+f2TI2Mk'YiqQ0@,%mL01EY
+AMm+MQ$NCRp[b+D[XFa`2ff2jl,m8kf[RS6[TDHkbfCpA(DM,pCe'Sl2XXepUkeh
+UqCRrASHqrbR0&"mfJf0cqZ,5BrAm20a,6AhrI4,6AF0J,hd2GqY`k26mQMdjj[#
+`F!qPaqPakqQir6a1RL@2J9qID$q"Bd1*cE'Kj%E8F5hrcc5M2+PfcQ@2pZdi-pU
+khN8H,a*ijK-pK6fMZZ648GCCmVl[EdHTf(*lq2SrAijcBAZ(2GMJchEkr%h&(6d
+R*pZMpVY2HaA9r"Jql,jHGi1MmR%cRYBqrNiAU8HEer(p#MVY6bUQMfpAlY0d2GT
+HE4bG(lY$4fHTjQISpVYZ8I*$"Smm94'&Z[MHefRr2+XYEQh&IerBpCeR%Kl,55[
+%LdY[&,bdcG4FC*TkUIpHldd"eXkQ$5eXVbUQ9TB+RQk'9Ti+RbUUZmUUdfPZr3L
+k,95Id41kb1`Z2V5)RcFVEprNS-ISk#kYk'lVUqFPJ(AcQ*'S-502fm5JhPe6`60
+["-A&9-A-@BZSFc*SUV59Yp*iGaJ@'$Y0ANqXql0plQIYr*!!q*(qRaD@(DHPHdA
+BAP&NT0&05D,[EULd&a6k$jFC[)A4YBA4Y2*k0RjrZ8ml`UHFYkI2@r1MIEQjI4i
+ZpZpp*h[$jU$@#8DIi(FC@Chm,Uk+kp6bE2BD(JCV[[*fZSh0YQmjhP25DME6GRh
+fERr)m60Cr5dq5T,+dY2BKGA@fdMm&PcFSXLqFqhdSI$r"-F#cP8d29hIIjHYNd8
+23h86(5B-RF`kDiL69j%amQ(9fmA-hN2(h098@mA+AB%`D#hLj@6$Q,U,REJce)N
+abBNcb)Nha`$L6mZ,5iG95k5lqp$RmhGCf*0j$[ELIKpp8@GCGHCR-h$R0GVYVGH
+*QS86)E@VZ)H3!0GU,L(e@SUlQ&rKRXr$bAVj[Dj28H[6@H3UpPIlM0e9p9kcLE,
+03FR89f$RmecDqkmq[Z[4Vl2CFb&(fZmjF2UHAPmTbBH8j%1Ja)HNP`p9K3p[aSP
+h`k2'ANE0EMPA[`@q&ErLlYQQ92IbKiPI"L8&(MpVGB1FR[VqPL6XpRDMMcFpjIK
+FR-ceAcjl8C,PGk`&M9%jLGlAjQG`mpAic5B1LRXClXEeqC'hI-MS'pf0DHr2BRT
+BI2ef(QTkDr,L6NpifJj9MYqYf[[4rf@2Sl2d1C(NmZbV2YU-rUchbG[`iRaF5$K
+HVZH("b10pRS4EfrcX28H0+RBIMDLljqSZmY$k('LI$aBYja+Ul30&ir%UXGUlLQ
+Lj@IZUb*3CklU)QRQVkDLDkD[mR$efG[TR,kl1hXjPrbqA+RF[8DL6R-[0@Ga$l#
+dZTf*j0r"i0PmADI4qVb)N3qJR%jZ+qKYFY*fHZc8U2VTfqMDLK[SeC3hp(9k'rR
+[2Qi,2NFqTiFpS+RL6fH!61eh$RXlV!%VZ*26@X3*FGY2C,CA%p*ePa25`)ZY`J5
+hSl-#,4"&VEdHeYr1MqeXrfFcP`mMkr+LBfhSpGF3B[P3mVF6fSZB-Akh$jpc"MY
+VI`jficN2Ah8'1e`&h2E`re3k(L`pGG`5Ef)j#G$a)C[m@Pl$UH*%e$!QZ[iYC+J
+f%U,8he9TEb$c*2Ujqki(CjrhEHmMm$Xp&c,LbrPp6VERr1PSjlR`TGPpI&9A*Vr
+Ch&[bVkUlDmp@YZl$@AP98m1,3bS0hG9@biFA+(DZZB2AiX2)hm%ZhJYH,#JPFA1
+G2LeA1fA&JPRQ!!5UmDSeQ"9D#SmcM3D#SVX#$3AAaJH!X'HZUrUC-60B09N31`,
+QakcrS$-SdDX1PG`mfLL`kGh$c3EIPm8%me0f(lf!Z"1@(aB-l"m@!@Hi'DX*A'c
+pKHB'FJYH0hi#3V$FF@*MEqUrGE`E,La$a@AGe9HC`iY0H3EblJcppB9YckY2I9A
+d2Ch0I`2rH4`V,)E6qRe9IVKcr5l[&BVpZBj[`CIr,fm[6q(Pjh9q0Fq6P1pZ+I5
+IAYkIC@p&Gm+Rq(Jdr5hp2dpp6rc14hjXcDaIQcQlmRqG,DH6r25@P2r1Yp[bHEU
+pej20f1kmR$pHbmRQq[Z1$h(8q[`Hib'bi(FC6Bm$Z*c@ErZ+$@ElZ+(9llZ0$A)
+%h[F90GEGaA9)#9eVh'XVYjh'bVYhh'iV3%VV6Z,8"0jV,2Z,A@Hhh%V@EVZ14XV
+,Z14Z2@pcb20lMiYeTZik3#I&lG6h(4Xp,h(5Y+AZ1PZk6Z1P[2'bq-Y[[CI'Ef$
+'ErbHM`DIiIFTlZhmREfre[*dPaNkHEZFTjP9hAU9AKHhk[jIJc(0rEehA@rh2VB
+[q(drTj!!RZR$a*kJ`rcCMjhpZU`GRp(0B9Ip@aqTPF12pL[lR+5ihGarYc-[Qa[
+Zj2%jY(pr*FMYE3+rM`IN`E(+BP(pQhcX03(NCljHha+1QPerf0Rf1(Ad((qc`Fa
+jmpj9(8FMQdILaU6Mmf0i%I`)hhFT,2ePqhPF-fk1jbf&cE(kREB1cbf(Ak$%fR,
+b5h`[YdI6KF1&RH,6c2%k&R%ZrELb@Jce$(X*B&&QH)',3CkKP&QGllYIb2JMHlL
+2i01$lmEi[IVprVhq4%k$(`imhGjHhh8c-U6N1Jk(h*8E`Vbac0e2jLBZD#(dER2
+`q2Fpp%pHjlq,UlULqY$cGc%kLBp5jLp4$lU,QELFem@EZ)HNNa-PH4*pE0m8i!!
+*RckBVU,T,Q(-bSZ5Z)TdLXRHS*e9c$aPp&ae[&fpa#LlZhK4EZhK412Cl[M8AF4
+HKYG[JppR)f5e'hPd%+Md'JhI)p50X,I`ITaCMP4HUj%A&plak+Kc%hYY4KH*hdp
+M,2fm#RSSI(Y,H(LEZhKhGTF3phZlL(YlH,MVk,M,Q(UVL,NVf*-h-26J6+LJ6T,
+U,NRKELC+lL8V'6kmQ,T,L(0bSZ1ZBZUYiFcIa2Qh-@dXlQ**fYc&NkkjLmldVQ0
+e&4FaXIREUMcphQ0*HB2eFUVTA@I6rr3Y(@k,RC[2dRBHYcI5r9fhm`%r*qA'G[f
+9PSmYe2qI&bADdh3qjKjM(B1BkM"RJ$D$B[!SfJh8B-6qm6qi#G$!LS(k1!!I3`!
+(rZK#,riGHc!rG%rmQF$iU2kXpp6-iA2`U2kQ5`qIKmr$R[VbmahHAr2CD6YP%re
+DErclPpfRBBHBq[K6heCi+mPJdI@chdFcJmr"q,lZAq(ph'LIaLrpj2MG(MG!"!-
+rM%q%ajJFH-$pc!Fb"mr!LIZ`)E3ERS*D$CMjZ&fRDf9,fke$IVc2m[ZAXph16%(
+SAREjc+'C(46ZNdXl8k5EmM4c99-pe0hIq(eS[UF@[aH$BF1qqppU,5pe0h1MbIN
+D5EUDfFdqLRG(hfES1hcQAUm2SBDJD(rMq$[1i@HP1CRSrBrbcHlrej[IEG!MJ)B
+%G$mZcl6lfce$k$5"1qZ[3`HebkSCp$kIp1UdHVmV8rdcHLdIBF,YrjrX!2YrbIP
+kRZ1cXZYlP%2c[RG2UXl3IBj'8chfGTBIB8MmcSIlrFj'BdH*'cf*'Qm5MR`$!1@
+Jm!h`+[j*hpRQHj'Br"JpPR%`pG-p2*fHmr9k2QqCXE6jQ1efmr9V2N!VD@rfS5(
+XG1IdbH&2C$!p(pHj[-,lQ+dP(N-$r2QqTAp6LIcPrcPmh-Gd!fBlX"mah@*fRJl
+6)cc0PA)G2YBpGbiqhjIc2Xcf`jNICFRm&Plhh%0CVlI3KbpRmY(kq`j%A-iF68B
+%5ciX2RF1HkLqR[VhZBcYh29&e29GePjfkKpKF@pa$kLhTBRB@Hlee[Qi86U,2dV
+5jlM0Cb*0E@VfdR6CA0a0,9k$BAP60jU,@eHGeplSXcQSZUe%eVll3J6X+[1kUpd
+8ec3+e(Fc@U[Y&0Fp#'E4&X,h3jR0aG2U-lX,c6CR1%$H0YVZZR-h&RDZVfecV*f
+&4Gj6CU(e'ecfJpDiS+$-`SICHRE`jfhLphpRkIfITpVp1He0c28ee2(m3mUqLHK
+aUIJ`pRl2d2Q@qGTe1hkfKrVpcPFhL`FVQdIrQCrEcQ!VS+HiSj!!VQmA@mZhRic
+B'qDS'eZ+qMNhiJ6R8HYjAbmVJrR`IVIJEBhr'&FHhkaKCrCfrErcriq[qcZ2V6r
+eY(cGVX0ATTh"l(X&BAeRAI[KIAepETkh6qMSY&Rp&hh3erTGGEpPMN0pIeh1KB@
+Baph[2ApIElXlLPT*NbF'H"l(SHQ1VrK0pK,Mi[(lI-kUNTG6P2pj@('QZ4fG[fd
+`KlXHZrK#krNpKQ0(rEaZ`irfXaiAem6ZTlZTV$QFaMY"GHAYY6T2DkcfTbhfR9j
+"&RDG4rqqefRrpFB2DC(k%6imrf(@mU(UrpDZSd'SQ[@qa#r$h(fXj0CV-d%jr[T
+VIY1aaXA+CE(pIdrQ@Kf0mKKejZ'5r&`Sf6`SYCKdrjlI)GVLmKEj#BqImReZ6fQ
+H`T(k2dISp5[aQ*fRi,I*IIBir4rjKB2D9%Z0PF'`lh[mpRjqKSCr[ZpLIDSmEKr
+Dl6[1ZYqZm9YqhrlQml36[DBAPk21i18VdFr5klrQ&kAYkrAp248fLd2I82I8,!E
+2jc00"ZIYIci2e2aSTqRmlrjQYGFD[Dq(q@Sc[Pe'JmEaUbDmEdr'pImNRmp[f2R
+XQYmlrR0jQdS0MPUr`)p0q6@IPmI4d@CfQcYe`!cRKIeqpIjM8Ykm(*k2*M9J"mV
+SFUMr,mcVjVNp$NG,%kFZaqaXrUqee[fS1IPH0hX(1RH,QB*HIiI2UEqGJepGICU
+$dFh"jqFJmU&MEZ&NC0&NC-,+hA2Xl$kX,3fm+Ti9&8m+ipcjHirDZ,RFEqLh'rK
+@Zqjr!NDiiRIFNHI#kHmKihGa-ED4FECe@0hAUF[@dp2rTDfI%hCiG0TF-p03`Fc
+-EEP4UhN4p,b)fRj)"M$4kRP8HZqCf%ebqKbZPb1Ral(`0RhIYIBqeAil+i2Her8
+6Z"QB1IRq,ckRL6X&TAF203IXcF(kXj!!HM#aXU&NEbLb0j!!XVGM&hF)p9e6F89
+5IPRm[FIh29I#h("SYa`B9V`"LXq$VGVlKiS1RE3mEDa-E[)Z0hG9ME2e1Al&26k
+keXprh(NdqZfQiZ@9"q$rA`*IDDlN4Y$,XFRNm(242h8R&S6Y&hY&MT9&Nlb&RCA
+CIiI-kkkGe'[rU0fYdcdDdApHriX,Vq*j%2p(jEr-cZAfZJmDrbZGKqYkGrfp9FE
+VlQ+b8pqbMr8[20arNa2k5qINF2ZUr(jA#QUrU+("c0Kr'FJPeh%SB,V@F2Rl+rj
+qi[ZIC3DMG39QkJUrE((05HIZi*VH3C2H3CIXrUh0ZHj$Rlk4qlI(Z@2jfAq&Eq&
+qrIFrK50GEb06Eb02Eb0,Eb1qi2UGA6dq[+N)ANdq[fRkC,+mk2qX5pSXAIH29HC
+jRbq(iphXE$6HC+mHUepPpR&Ij6hkU2dBrP9qLa2NPrd`qINF,ZUr&jA"QS1I3RQ
+'rE13!&eAF1KJXpCImrCAh2h&k-0AZS0(ZS+Mfi2&KCUk'(*Eb$(lb$Xqckfji5q
+'1qNBQqN5pr)`&li$der[hS`YplZNYj&0Eb-h`IpGhZpl#N3[EhQlh[fGTYlY--l
+S2kq&KamjK6N2RkMLjc,i%,U1EI`ZSiHFKbp4aU#HqILIJa@VR[4Sr2Mq,AjqAmQ
+(r6#jq4`HkJk'9`*U$R82'c0KJ6N&RAAp$"YGCIFrCA[2h%SD+MG38QkJd(Y`H"#
+c9b0'1hN',hN(@GPrHjp`D*HqN56r1Yr)i8+9[SA+hX,ppX0&AEb0(Eb+@hN8&[)
+lEJrS'MZ*%,G$4fYPm9ilhP(HmSlhP(pEbQdpH8[)cR)R3KAIUGjFfQkKIrId3ZC
+UUcIkh1dZqN9FrE50V-fdLqYI*rjhP9e9T"NE5#FXi+#cUUEfkV5Hh"T0e"UE+$A
+f4kmB0VZEr13EEdlr1@(YrTbh)jYMq(2mQ[mqamcKp[mGr#qMPEk&p@$8@G99fR6
+Zi@PN`YAF`YMF3Yj`SA)i-,TEk*N,D*1fFAapCIEhLl[$fIRaYMc+rGqldIGMIUM
+EEPaUl!Y-'biQdh0lmrQILcQF-mkpc%RQ4pZ!D)l3!rHk([8GcmcXE(UjlXU2Upc
+EHaDlq4Z1$j@qNI$[Ld,R(X`kGa#r8!mM[E)ipCUbKE+cKq9)QT4bL92Ya+kbU[2
+i0j`C8MU8)rKbYR$VV1&pHejXLDpZ&AA-+ZZSAR`C+fJapU`'YS-G[B$M&!R&lf4
+dGl)q(Hb16[C'pYYEVHVc(FGTh%pfADl6rHqF0I+'Z0XH9(eI+ME$PJ('er-SpYc
++1cqCf2&GYVYYG0[Yhl'ddJm(Y*I-ME,Nf1MbH*RU2*dQ&3a1KVq*4BlKd@6[i@G
+iCT!!IBjKfkZh9bkfAVm0MUCp((SU2epMbYCBq9XGRiqQj1XXGAXHC4ICqEM2fh1
++kbHqAdjAXlLrJfA%mUqJipp"cVlR3FqpkH$$p%"i1kXlhTh-+(V,QHm@$*FMTh&
+(SELMUGjb2PiXALJ1#(hmVFce6F`q`[1E"NVL(8i81T`iIP9q1P9q,['!dU[kLpJ
+k##B1KH`I$H`FHpJPAX(kj9K)Z-9fIc1[%,VYT4m6UHicReXSA#prPp6H9@N!19d
+C4I8LePld,f*qAVI!i0R`0rkXlGFk$lE!9d&282kGeVH%&0TrMi2&8)GX3KlAEiR
+XH*krkr)f2kr%frqi"q*Y[BlqdpM[lVVIXIUp2p1dr2ZI1r01lRR-"A38p!rdI1p
+$DI*mRqAr2jl,3mCM'A!F2Y04aie$Kf12bH"RSQ*5F5KLEEAbSR8(J)ZiFeHGRpl
+VIfm5jiGrXmUqI'+q3Idm1`rB&0eC8H!aYCN1LE(BbYCk0hXI9m26AQXX+hBhe&p
+R&92bm5,`1AakrlmlaqF`&G"6d$r&Vp&a88rJX[5`HXapEhNmD5Yeam$PmAPiGKh
+f&"TX#!r-lFF@#eiN&j`i16I`I&I`I[[S1PHer8h[0VmEcVb[b21Zkr+mk6AjD[b
+p$BjI0E2V-q"PeAcS$5HRK`81(B81("SF+`d1&"iYINEb[aXU[kQ8!d(6[9"Aa!(
+I`5Z'SLh(%8AHCaV$[VlQAr,iZ*Jl5f`QF`lFV2*mLHllm[(c-lQ0"S2'iq9cXpi
+ATmIYirrSbXiPR[E@dhGV[E5dYVAJDfqZ28ipcl'*GHa,Nmr)m#(0CAI`rZj+Ghd
+2ZjZ4U*22UE@(09fm",@EZ(p[*ELcKjfbNC+kjqkNBk6crENG4G3ThDbHE#SGGGF
+f&8eFQ&A9&eclE6`r!KE,1JPDj+6#PBkkjr"pR`)Ar0e#q16clH$-J(F(E`Lr5i9
+2`j%RIlhI`[GNBI!fPPKVUXcZJk(hT1Ber*MkF!q9dH9'e)"m[SFZMp,jQ2jH"Zl
+ipp[Ye8cZr*k9Y6mIIdrVm$bGAlRNkAKH66A(NcKhK,U4MC2N38hVhRQ3!&6di+k
+T[G2BDc3heCBE+K[kZ`h'D[Y4"ZHEPVrmhfV$FjDqr,BERZFYIDL`p$2K0jQLP9d
+'QVJid1bNrje9$C3CAG3C%f1,54qrHH6bEEbEAHb0LSYN8&cj132llp5Uq5kfRYb
+h$RL$R'dV2B`Hb%!cf+RVSe(c*Mk6YeGZVjZZqa'1[hZKi(&l6DmQ08iPMQFRKCk
+*d+6M8-56VlkLael4C19#cYkD-H2mGfqZhel2YPDFGMl%k(ImL(LZAj%pirjH5AS
++[3H0b5p"jITmRYirqP[pc&H*XrqU2@D[%UXKK4D!q44mKlkUhNUUj&h9I&*Mp6F
+amKF4mVDbr)Vk$eq2jPISHRAe06bG2BefKj9CBkbKjGABl,0FV89rTmh,F[mhfV(
+dmYb[bf2TpcPZ9U,(c-q%fQdA)VUr49`F81bPrjajfe`S-EJ`C6!JRH,"6F5#Y[i
+0CHU,16G4mKEak'Zj9hm'cl@brij$(Il[3LB9&4eZaiqXXHlf1ccHQa0CBdfaj*L
+mNZh&fi[CafRp18liDRI$8liDRrF0@de(,CZFD$q2h[F2[VMkS!qAd6AZ@[Md1C4
+qYmc)q6[qbUq$l'ZhqkYIem$e0$`UHTYk,mH9YiAije!MJ)H4!"!Np'3YbVIp,J`
+VcJ3Z4[iA4hd2UED(-fX1IY)QNh8A9kZrhR'p[$X0TY09c(#0aRfhXFMl$Y)IZN@
+2ZX52[Iam#9fPRbSeGal(2C2$ce(Lk6!SBQ*VlqLaep4C1pKCfq-1'3rUl8(h8,,
+m[[-82ZraLF1LSpAXH4V,(`0MXqqdaDTTGMbLdcq0rEhN1r[BIXpCj(Ulf6"m0h"
+d$AejpiE&k"(!3mL#**A6id2@F@(qbUZZ(9@I%UYVaSZZ`+UV`SY4,LjRMaFCbG0
+(p@0lhAGIBrRfQcppRB"m*8GY1A'eI*Me[*MDVP!'C,U2AmZMf[c1ak[f,$Ib2m0
+lEEccEIf1UZI*SEQRd9a#mbhKE,K8ATm'Lh2!SPq!fqKI`hX2'fd6UYj%l(H3!2,
+EZ(3fN!$dAYa0&ZSPGZSISE@qrbKfZTiHVLAY*aG9$q1D`IbchBir$XTIYGpb1Rb
+BrimUJ4`%FPEp@"[jA![Gr*X[+q$jrcXK1GdZJlIi(%`,rNE2pr`Fk[rMAr,Xqci
+R[I,DfrUlLjX0PG3Db6BIMbYhqD(SC8&$HrMbp$+p'k0eD#ZZi00*Jdeh"8hN'L[
+)-q!FU$YVf$XErc[CpRrVLF6rUabT"hrFlm(6q#aJpRjH*m[Xrbh8aqhVm[iN@RR
+[k3Z0VHc[Gea,QV[EQV[j1J[C1J[Y0S)QPe@C[BZ,bGf!NU*Qj-60hN63bBQK[)P
+6G4+QlLDZjLDZ6%f0a%f0e&f&a&f%Q*DA%5dZZM`iQ-iF6ZCRL3mCa)Ff`0Qq($Q
+1($S1(PmK`m[i%IerIVpPlfcmhQF'RjGcKh2(Zm#lPbZ,+`VhLAZ#!Q%"Q(HFDma
+*1$*j0[L@r-pVb2GXI3pk[fA[p2PerlBrVfqAk2VB%Ak-eJH($k2#LI$Vq0&aI'l
+q*qkiLFIEF@,M1,hmA%Z+UdhR$LC5rTkVEh-'[Yi0IFf'TYl$8hAhSG,F!**cTjA
+J%Zj[69@GTYAH8&j*S,b9QlQmcGcICIX3$iQdp6dfA+U2q-6J8@,[r(U[3mbmq6a
+lcBf(QHCHq29EBri,r$I@h$YGjfAUDfTpAjpPBC5dJQGhBBkeX$Frk'peZ*[YE*i
+%LkAGpeV1h9VG(FDfSZGES*-M1hHYbGhVFI+NBkprcKqRVZ(jN5fdI%e86PD$!e%
+pe@5`[b8IFI3cQ*Xr+VkhNme!MJ)!6TmL`rV`*(%e[!qjC3IqehNFR2G1&HCLNPa
+jX!m6SYmM2(k((Sr#qKT-(fE[3Gl*d2G4-RZELLX-CEb)Z4fpcj&9P0[*m1URpCG
+!,k-%rUj1LjX%rq1GNk+URrdj566HV0e'3ZG,h8A+9%cF9[G4HUd'HXjM36qZc2K
+D28Cl1eP*86AkpPF4FIq#bmrrq8Ic*(l2k)R-12P-100b`$MCR%SmpL8HJqM-BAX
+mI3GlGL$QGcFd9K-@m'-Z*%A+EbjmQ,2q[*m1#E!ATT-r6PC1Ljd%rXC2LFfURkM
+)A90h99P+LEZG,04FM86G[UTZLqe5cIKc8rPFrQFpQTqJQSAk)*QiSEI9FeN`BA6
+cI`GG-ICl$`H[VrMq$[D16RZC2dH[V16he(RVUA4i[$RXP,l6[2SI$qhfYhS1pPk
+(ZU2(lR"SV#,)MBhEiAN4mKYjIKaj[@BB#qMAcHVPk,Qemhq1GPk+20rTbNZQfFc
+8C$#d[G4XK861#6,e@C%M-L4P")R4)cRk+r'B0"EkMR*)bXldj[P`qdeHeirTjJm
+([)Qjc-(Jqj(E@2MH[bZcqjL[UH$f(YI$S1pj!KClFbk+aQC@&'aZ$'b'$(b'$'Q
+lbA6emb![6PdmHEpc+br%jeI0lbA&jXHEU*c$TXc(b&45i@PQif0U+@pd&B83dj4
+$AP%0X83`Id9mhJppE`IZ50P-edjc%SU1Qf-[@HMKE(Cr5df(V,'Ff2(0&c0H$er
+Y&$Z1)1Ch1(4@-a+`Bf0Zm+UMj#l8DlM$!ApPI0q[,m3Q*qQGPq)**-6ZSmc86Q&
+TFb6&Rm'Yc-A96K-@F*LjBQ,QbBX2p&I-i1IYrbI#bK[fqR$pk2rmpkFRYVU19R-
+ajm+HqrNV2NCbHe'SjG"2Elp[i-9Q)hp2GTFcQ*ZVbH&hpMLlDlPE["mk0N2A`[)
+M6HaPk+[Q3&kDUrr0PCHK*LDZAiC-6am1Qqd6$Q93c'e%cH[TBRJaXAq#hf2a,ZK
+cQ9q5Ca@5eQ+dN6&6q8U-9e@2f[[rk4*lBCE#RUfG`jl5D($RTqTPcf8VF5HQ0ML
+3!2b)fG[2Aa)ANaXc[,[#Tiq-h&jJmV"MpT4cZ&'rIKa[L`f!dZ0b3$`iq"AcR[9
+q9jAB9mlbIY9q@3*b*U2p,MjQ2eFZFLrNRXPTl1BamRBDkCb9T[+5CcfN`l5Qi06
+9l,"Yrm2hVLiqV1G1CipIBr3R0(KH*$SqSf'&QSf-VEc5bY*JkH2e00KdXIZY,l[
+6pf2lQ9jRlUrh-TldIrDCjIfSfSbR)cXDNT-5GMBrAhHlVF2#j&M`SejlpIm2`G(
+i)f"'a2HMEM$`jI"r&Eq2r$'rIMjEkTI3PjMSHr(ii"SMrF!IlHKqfMrReQKjA&S
++M#mH(&cNCNHC+Y`jb208f*0ajV3iFr(bHK`DEcDlPl10eYI[2GrGAi%HmjIB4p4
+N1604Y(0mHIM6@T`ZrSSY$(c(DDE#X[aImU,-N4CLCM2BD[#p6JaTM#!10Mm1MbH
+(4cAd+RLfppTBHPedQ,e&c&aab#@m@DhPeR+V1l'lcG9RGPGGp9CRCA(LHE)[lLm
+ZqRJarSd1&dX+UrfdYp0e@SdmUKLk2B5BH,ZBQ6hFQKUS-[EAP[@Ir&'IeM"ElhA
+GK2G(i+qpph[D2AjlNcp(Skc%lkMapeJdH,ZX1Ha@*eh%VrCj'PRTcAB8@('kMGi
+4mN0MKjU209Z*1ajUZ`k'2Nkl"dAQqEbq$'qaAmMhrh9rmBraF[(ap41FQEMD1Pi
+p$'QYYK4++0Mkh%`Z9BrCYr`rr9'q6,9X1LSjcBi@Xp'qmHqdf$V,()E'@@UpYAq
+pbp,2DAABN@HQF'HQ-+HaQ($Mj,H5mj(c[VbmjAj2em2[kr'@ZbiZcl50i[iZZr"
+ehl[aGIdX9N1ANBqSd[*c8E4kVMpr'QX'Maq(44Xp@mR#pfar"ErHrkAR%Q*lj)A
+YmHMR*FB!r!M0rrjiY(5FIYI1MGMGChDdRTD28D6bp2j8l5mfGTHITcqcHjQ3!"I
+X!29rIQD[bU'GSFY3CUIcQCKf16r2Edrrj3Tp3K6i-aqlhSfmjNIeqC'hIZJ'Gr1
+MNqp4bqVir-XG4RH40dIKD2%R)hGDI$jqR`ZE1a[UcXEh*RhHDJASqlcG$2I8Q6P
+!UjG$Q-p8BNr29'Gj9MDFHhmArY3pfF,j-hbAYqR(IGp%c9(Lk[$cADGjmqIj9M8
+Ch%Qk2ZY(KcNEX02Jmr6mE*DI!RBhkCRPme![4jI0d--LAVD'HarPiG"2C23BQCR
+Y0bk2l0[5Ia84I9cAb6QfY0jXI6mcTl(CE(d0CrPirNdAfHR'YZAQCkVT14P+23D
+6%bXEZjf0h156rlh0MFDC!A!!HV`b&qlSCl2HAak#HT0"bFc2HRle'G`Eq60$,Zr
+MRTIDDLpm5(jY4+Z-P+q@Um[bEcYr9m+hX1kYrCq[Cj5ilM1e8ZPiNj9A'Uj(4j(
+1MD1peF@*MiZ8dNcFGrpkRLr2fpcqL,Rp9Gkb,TY*+e99jP,HkQUeP$HeP9XZlJf
+8jI9I0JfAFj@qUi0LK6BdelTkV9k@pd8@Ye9jip95lZ6&aPe&QEL,2lH9TB[!l2i
+lkhrbrrqUrmjRfHiRINQrIKpTHEAPqRQ0VRI,jKM0pDXQZCfeMkhVqmBcIX4XELH
+G`FG0DHNZXpS0ICdNeDDl4j+6VY(MX([TZaQ22R+qCUp,,d-j'Rr+R$+`C9HjQF4
+I1chFDI2EM'Qm50pZC#$QaTZVdmZKRBfHUp2L81@MCkSe@*2jU08ChBFR@cffr2C
+9Ime1(kl-d@C`Sm`!H(dF10N`$Pp#A4peeQbiP[Hk5,5kqjLiZhLc'hZI$UTZYNk
+',68ehj9"H9&9@rcJVFT+r(pD#$ZF[AC'9id&6P*9499-jHD1UdQNZp,&S+fkm1,
+-lHiLicGh2I4D@Q[EIL3IJXUlR[fc-jA!Yq(T)ZUejY*h8@BZ)XcEe4Q-m5,6DZl
+UHPHD@UVI&JVDD9@Ff#ZqhPC9C"@k'mdp9@k@mVDV5eYjiF@Qf%Rb+UEYe9a-A92
+&T0KHdY9`1XkGpEer38GC*QC((rCkr`HZVriHrhY(DClPcp(UDcNGp4jQk`k2&i8
+pNX-c)kchZ,UkAMq(4c-R"MBcGiAL4jNbr4U$5iQNkA(dFI5phAk@Fj(Pmf[UIUC
+ANHAAk@GipA(dY"akb268h(d-DJdm[64jREi92'aQ$6aXRX125al$hUrm&[j[4II
+-6pAmAAF@mTHAiG(T*1*'aQ'D1NFbp4Be"kq*ir5iqQMkAckr5e[)V51r[jAN9YI
+TDlMedI5k[MqC(TYMakH03EZA94jNdUX10M-5RMD2BFZPMm6&BhQ@pAdRkjImhAr
+,lZNMDVAmH,4cE01cU9PahH*imHJp'269[)d[6j'PMU-k`MV3mM5eqKd[)UBqKV4
+5TG[LH4'R0i4N4`DeZlirI4Y96HlaHRblIBr'Sfbdlr6-BVrEqAdZel(YHalAXIj
+iVm[[DI-Erkr-THmc'Uer+L6eCGmHMkQA4r0-EIcCR"MI0c1$4r0cehFdR#Lj6[i
+Z9lqRb[L8@@m1RbhKq*fhKq(fqLk2TEIBIPhH`m[GlIaV[Eq0*hIKAHllh"LD$-B
+bllSdD[Vi0(Nq``D1I`D1PNmQ(4kREF[54[@br-QDr!FalL[p-9Y,+$j&I(baSCh
+lilkAdDAMf&AVXlGk'EL6rPk1kd-j&QI,dpc66X@CU02F8h0!Ma3%ZZMG4CZjLrE
+QEU,h-fB+ET!!A6IEbM#E5cXA'k$AfqRcG&pHIlM[XPRSH,T0"0A0V"SE6m&Pq2q
+LMrYL2hfjFZYaR)X+[Djfld3JrPdGeSK"r,TlR3NDeHRZ0#N(bJ%NL$2h-AlUMS3
+3$!ZQRHD)1UZ0,QK"fe[Tmi)1AaITCR1h%r2c81&AANLKXYAr9N`$69P[I[941S[
+BQ2P3jUpl2lhd2KGc+IT-UhNI+NRYc6mj9&4l(BmR@HMapMXr$dafHkhBmXXBm$`
+FKBe&RRF6`jZMQr5dH(iFj'Q25dq&STf0-DM6i1L035Bmm"-3cYjr#MIGQF10pZE
+-4f'JZQcA0M6&4X-(5jZ,Ti866`L2X`TMi4-HHK9h)NCqbp6qh9E(-GcP[Zr*#jE
+m[hQqMYhqbr3*pZCZBXrF98rEe@M!1ePGppD,UD5B[rELbTrNa[+M9Pj$QEZ,MlZ
+4&d0THH6%VG[+LBZpKiZqK4,28mDEMI2P`IbXYAriTZICSm9#iXEeIS3I3p6i1Pm
+(1MIpcE!Ai0$Ac%6XrKc1Ni[hZrLE[(A%6Fh-ACA8ABhF@Y[)[ijQ9q'(5h[iBFq
+GRZE[B*q9"2J0He9,+JTC99iU*0,+3F#mhI@%aIrHcNAGjR5m5PYq-3`f)HE'q,P
+AQ&mYIeePFrh@!IZ[!qE$j'cpR-DA6bkHMapa&k&e%q'kLiNRaH*&T1G`iY,IaG*
+mZhZiZlZiPh*Lm+,5F6SbBR(ZSP9eQCP@pc%X1Xaq$dEHMaP[4c'l`ZMDBG2'kf,
+M-',e1"&a['Lp9a)Z9iNA,F1,QVq,3hmA2hdA3h[lSY6+LedUPl2'hY*hm'UQrA[
+Y"iG9X-pkpp5CbUfqGfr$THfLbDZPiZLi(`q[KH$erh1[j[JpI4kkPj9*'VFpbDZ
+0ACRPD1Hf'HjQ8RV2-qrq,VShrZbp1f9GREGpmNiq[QPc8E65MB4TG455G&P)NhU
+0*Fk,+Ufj@kc(imN9kmr6h-A`)Xh*,H1D@fFj!J(PYeh&b&h&kQ9%kQ943DRdTLq
+RqmLlqCiYC'eA*k2+L9Gc&dPa%UGhH5)PEDA[N4G6Ea0GEa0VDF6041I5iAY81$E
+rFj+f`1abRmmVbqdeh*RY(b+-!`$TH2'!-!k$%MJ(3FL2T!$j24--c-01S!2PmrP
+chTIRYqlkDJ2kH8k@9rfpfHfh-RV0I!!rC)j'0J[fLeI+MqM(,d'PFBUp)X9ba9V
+&MbmaC@qDq[e8,,CIXrTrbKD16@q[S[3jfEmh2qK5GKVq`pE#lRYXaf(kJ$c(BHP
+KGYr2#!i#'!ZBl$rE$l+bqKQ-C[D[kZ3aRbBrkQBjXVYEHHLU#qdqRrmKA'(f@B)
+"lGJ+`&rQJMpQBl$rMkk$1iqYhheTrke6pE4mhepVXYKk'VmM66h8ILp$jdKQ5hj
+[aj'AQ[R3GG6r-dAhIQp,)mVqA@q2Sp*q'XmI5q2T2,l@NSk6[[j6&4j@MmIm069
+e'QdNI5GV5D64GV@D6c+cqA@DAb[`eQPr`U0*ihQeQNk(c2rRc2QG(TG)!!!!J'G
+fCPCQ9@CQCiL*LSQCQCKhHALBLSLCHAH)LVZ*U*U*LBL*HBLCUTPlLTHCL)UDQRL
+BLRLBQEQ*GiL)QUQDZ*K`X*S!UVZBN!#!J+YiQE#3!*!!UUQjQEU3!!N!Q`!,U*!
+!!,N!HDLDL*Q,LCPjUDUlDCUTZNQBL)KCQEUVL)UCLDQ,U)B*!!)b4$4@K`#!&"0
+&9QC@GhC`D'#)G`!'GhJ*#!#3!2QeGYeppYHq[qaYmlGhP[hfffZ(YYV-r(-QI@k
+Vf2IQ61EI)%b+R@djPV3LS6)V[5Cr*A-Y655B'US6`3j@Tq6cB3Tk@6aG$3R8,-A
+JH0iq$BTkDRS1044IUH*NpE,9kk2KlS[[Rc(NB'AajDPp(LF'*(r-eQrkA&K9kqR
+iZK$!2mej[iFcLbeG1X`pHkmR8G2MbbDLI`1MR634q'kp'@6X+1JiXqD'(`jMd*D
+hBdm6JdD!1FlrE5q(q(3iYLTp@1CDQ3Cli-TbHQPVI@UqGjp+L#((`X,Ckc@@CD[
+C,)IHmcr29l,&K8l0),2%6fZZbhm"8GqPD-Y&a%U2q`S+9Q,[q(P[Pr4PTDZTNi(
+5'"FQkmM8AH2,(pHM`pe2Y4![MlH@VfLA43pcYATUqP&*i#c(CGENXRFbeHeHY&i
+Pj[TNYIYUq*`Bk3)qYrTrPIEl@qKq#@VUP5@0p6[H&MbeG@T(KH91%@PTkbP`1NL
+6,Mi[8eI)K(VD-beRcTdbEXYl,6lP+3R"EkPpJB-)pG3k,D6TS1E2d)8pHTcZHQm
+l$K(pY6RK!jK6Z(ZTXkKD4CflZF1&2B'+8*Nh`IB'MG6ZNG*GLkj2CA1BK*XCf*k
+YV0SfP$4dpjN8ql4j0MY+&aqAKh8Y2[+1*`@d(IFL@6qdV"'[@'JY2[DQ"UU0!6A
+qRjZfj&L6C'-JIRZ9Q)4pmYLYMM5bBCUk+C0i[DpP#6%SiRUNGhIQCQ@2CaDDq0G
+r$Kf)pT&fIQ%EbXr#2DaD$LcV@+C2qcIbalB`-'Z0X*Bqr0,JEbm+@6lKcU!hQmI
+a*BrZZ0pp,*i"'L9F[ZHRX4q#YjGEIbe*LkaFc8q'-2e,4,'TMqjr&rV`)3U@UkR
+pr`rjrTamLV0Nk,D0f"[EJE"9CdIRHHc%18mRX-[Mf+XppL'fZEH@R%ZbR0e1"b,
+&5JX5Z,[5C1pK6SUIfIHGcK`U8P2iQFlDfai9Bek!hYeZq`rIM`N[$NN,Rl(amD%
+GkJkeLXcpYK`NcVMH5qe#62+1`VM'K*Re(E,PCQ%RdP(DrlIN`NrU8GhA`M1EqY"
+dd42jEV&K*S(3E[""ZUG)YjPI9MZM2D0Q,fVD&ETPlrARj0,i1mbmb@2V+(Lk%l%
+mbM,(SQMChprr%XGFkJcV5Ekf(N5@aeXLY*Z5iGe#Rcp'C01YH&XX$)K*d#k,EIj
+rX3Tp#C)"hHk,XF'%R40SkGPI5lU&ESkZ*`6ZlSZJZqVkMBqc#YdPI3FD1L+"m,h
+Im2&rapcF3UCGflhakcLimY+i&%cE3%19,5kYSbGj-+[5R!ihQ[Gcbp[iQ$,8c")
+LeIXrlrbmrD@+@C+fECL[)8mdR5'E5Y)XhU%d`qL`ICLr"Zq`aB4jY[B+,UH9#TR
+'d"2Z+A+ViYLPdlB2-[,&+l)bdXc+m*1T163JQ"jf,,5qQ68kc0h8Y,3NC&CQq4B
+MqSBG0XcF#rK8dDfEfQpp,dS@*2X)TYD3!,RkfhX5IC8GGkd5["GAeLPNNPGTDfB
+VHa5bE"R13CP$3GTCRJCca'"*Sl&,+[M(d%kf@SBD2)MbafAQc,1AcYLPEQAfNbD
+%[F2Q2fQfNS9jD@h0fE@C&jF+AK,)F'a5h$@&#hb+f1GMBjP,UHKiR5pEFJPkDNZ
+Xk"K+TqJNU-bKGkNFUC&EI%K5Q8EhVHi6QE(VHSV5jpYX'r5T,,j`NS9YqrmI91!
+Hl-Cp'BAG3VqUHIJdYmA4DMBFper)KApC5GI4Y*eH#5BSl2F6'a1dh%+rr+T,bBa
+*,6i4p#JRZYVZqhK6pG4qR!q@6f#2%#pkkhNY2f91ik(DZ3[a,jmTYqZbq,#Yl5f
+ZVlRhGMjH0,#YqSi*MXdY*-Phplqd*2E8PF0*92eNP4Xd0Gj@@i'bK9rBhdY4ZHM
+bfrd1(#YrdV2"9RBIZhH4@pafEI2RdAN9[GGQhPL5K9rDZEHHq6GkLkm6(VIZGQ9
+l6%GIhP*9p(RXekFk[#@RriRK40`q2JE@%YEppY`,H5J*c`)mVRmeLBX+rM+d[*M
+'N!#R"[,d@QLq-FfqqSqj3I*m#mEi1bhX+I$8lG&Ca#2&5i-a2Gr&8p`Llicp`$a
+dkbMfT0crem,&PNP2A3,0eeQUK*m+MY2eQUPNq)MK026jJrZ2M)i5A(SI(#6re1`
+kH`G2Vr4K*r"4edJlq*(4@NrACJHE[rL1(aI"Tlb&2N,9GhlrJBd+R*Ap%ZE6Iji
+A&j6eaI(`B8rj2A&!q6j(A&f10#RmVea8@FYkiS25IcIhie6qGIp0TUZ%,ima4pb
+Jq6rp[kY2`H0X)8rk%FB5"p6QRhf2VLjVB9b2qIcLI"!IaZ[&CfAlcI8p%VidI*m
+XTIpTIFF8c4a6mcKN+dP,!e89!Ack5rmhi2[p$-b+Y0)c%#9lfH6dh+kD&5SblYT
+&EERKmr#&DURN+LM20CVRAHEh%+eCa,0j[RC[0lL@1j22FfC&qFH(1SRi(DMLbCD
+ejBqhBCXNcpihG"NIChpeHC0MT!CZ[PjI,!!!J&GQCPCP9QCQD*HBUALTLBKjL(P
+iL*PjL(L)LjPjQ,UTL)PkHBH)QiQCLCH*LEUUZAL)HBQ)U+Q)KiL)ZCL*LBQ!#TQ
+UUCQ3!)#)LSZ*QJ#`!*!!UCLDUTZC#U#k#ULE#`#CHUUVQ*L,UCQ+UDUVHEUUZ8U
+jQ(TUZCQDLTZCQULlQAB*!!)b4$9AK@#!%b*&49CPCQGf!'GhF)H!Gi9`K`IqIDC
+$V,lFE6Vp2Ejl0hG[Y0cZ0VZGa&id8AlY$,6LLq1q3%K9dG1+C3MS44ffXm(-qhL
+3!+ZNTB'V)M[1&U,r1Ek&2Uk@rd0#G3aipei[PBN+el6[-DM33Jd[JFlTI1LK9qC
+,l(!DCHRJC8)Gp,KmQ-L2eZYeP@+&6V+Hrd0'H%2HDlGAi40+MUL*Vp,`ICm$2a3
+ThmrMp"1R!5ff@[B3TkDMHFZI1S@3!"r@J`dp2$j0'L"lZEUm[0KTIGK8kf@+C(2
+!PKdEhl-)9rl+[PHC*)"$ErAm2d1,VI9q+&E8+bl2BIQi[JG5)(kj%G)(h(Mj,6l
+k&AVhBje'M%89H`*$)K$N0P[VZ&A8dZ2P#4Gd*0cH*#Pf0(f1"2QL'GMS2Zf+[C*
+,FB$XIY,fhqT[V&A!C8kc(mGa`Z&I4@+ZU84p,SZGeRdiV&IXkq(bCC!!#2ZHAa2
+#[YGd2!K@eENRAHLqP2ci0ZdF0[(Tfre",rpXR(bND5KZGEJFb%ZXSa6*mkG&0ZH
+0BTDeB6j'KfX*GG3bHhR630lElX+H%JfP9XlchP!FlC4cHJFemlf1"03Fjc0LZ96
+Yd8a9'EhPjb,rI3UE"$Y+`kbMVmr#&,BcX2dCNfMD8,H2a)92S%pPY+&H,2CDkK6
+f9($j*DGEQ0Ic)8[SNYS@NH&`r0K6lLTJDZM3$[[2YpQ"hCPD!IYmN!#KHd@KHki
+N+@e-B4a6GcUY4#PKdF2d5(E[bFa#AE4hYmBpf1ej8ZhMklb5'mlS)5lL1mjFkC(
+CRlhaX@AFQ6TeQEfYVBPr[5&d$IpF'a5lP,@c`'qCrM#%[G'-JKDRD3TESKSDZa&
+$CGfNcS0l[C`Ua*HPQFQP615TD*3kH+hj$`H(aa2-afk[mNZV0TC2EZFNI,'RXkA
+b[-16qpllJqc`22LK@RVPM[G,`EK0IkNCK`+[GkEAG*L@+P"9AeU0lPac%SVc%fh
+YHb(544r$k6D!IUbXd)$T`Y0dIViN+GfFMSiTqHl(0AF+@G32QLBY"a3Qjj4hED6
+-Ge#PRcB)"qGcSX(S'"eQIp$haB2qT4c3ER+3!+A61"hHF5a5kGLVMcqEIa3TALM
+QIk))h8+ME(cVU&+i*94Xapaprr1&DjAFffc0jQ-,aGj#Pe9$Ik%kKGa&E`Pq@JG
+-S@CfNmf%YFh+R@JbfK5b"[Y(D66I6*8BTT[TRqR`19#PmNb),EI+j[D`TmqM+Pp
+0lm[6i-+H6E61GcrQBfLK@k#VKmQ4)$VC(RXTdZDrM#YP+pjM5d"9,[HQqMcGYhS
+f"bUeNh2q@"XYp#AS4"8d3[(f9'%[pE3fGT2Y3VCG-dSj,-GYVXVRmDf`B9HL)N+
+BpYMF6U1fmQ%QB*K0XakZ&6-TTI1NY)qF[IUppE`TjT!!3QJr[H&TJdG'cC'c(R2
+IK8k4N!!YQIAlrhUqqK*G-5)SYALbCY!bdY,-9H&21'X34,Mb2)"2e**aVAT)8Y#
+JC0'VP[d8A+TI+44MQfCZ4lD[#TSR+5FEcpd-prQNXNLMf1DZ!(r282`Z(`X6&N`
+5icFH1laC1F4aY*Q2(EmU5e3-Q!-YF@6R5'@Q22Ym@6)U-D,&Nq3r$(28qCde'E-
+q12"j8PXH%jN9R)iXPZ@qdLQhI+NrZIP6Y@8Tak&Ha*hKPkCCMqj#6HU5B1,*hV@
+#KE`ViKkr5a59p&(EDh`G$G`VrK86Si,41Yq)LFN9'MV2Tfhf0rq@&EmEJPSf#9I
+mLQpX0,Q*AqbLH6fUTAS2qjeAMRFm@2kR8prQ[$(krk*m9'%mVFIHr`kcQ3VmK41
+MJY%kh*)QN!!2EmLkjIBI&#[rZT,E40*DRj6jU!RHd-YFDL&6dP%,PJKkC%!Lh*p
+&e288J`53!&EP1i!m,KTJ#[qBm(Slp$rTippa,La#YqFjXbimQNLrKICla"aTkUL
+@AD*9Id0mfdF[d'Cp$8`K9r5SMPQ#0Ep5QQ#ddUBVlNVApCP6V-P[[ZU[lMb1#"2
+rP41[L0%khkf@CXdDrUIR[meFB-+rl&*EZ*6MpVTaRpKq1Md1*#TrdjlPm(XaeRV
+H[N12EdU)h$efNdJ!r3KAm9e)DDdi'm30FY-f@eK6rFSIDN2rlI"rX+(mi3rf5(d
+BU&h&FmD&2PU2GbJp5aRpa&5rHI%`k'k$XGR#PB1a!+p,e@VK5rJSGG)(Iq2"hY%
+1$*Jd2DK5pXlD$e9FD!HU[F31R!1YBdqMHkq$riN2'!lZ,#e%+I-@(Y[3q[J`UIb
+A'13LaKM'RlcNN!#$p2rebR*$rII"r`1533riAC)'&kIp(Zhe,QVrikA[20K5rq8
+1ZN$[rhJliL(8E0$"VFD&6icr6$JqeRjl,$*r(2Zi#'Ybq"K#-V,hiM8mdPmU3+Q
+&j2q%RNGa*Z`K*r0d-V8T-$9aTXMP1[qcbjHQLj9@QLc'*idIA@[9qpF`Te&qN@[
+9$ir@URiL`bq$6HH,Y9R",X[Z%5PbaN1E&(JH0LbG,2`081J88b[BPqFHpBl$IJh
+f,*hC*J-MV([+m8f@3"R!q$i3!!#!9hCQ9Q9PCQCRL)L*L)LCU'KiD)TiL*LCGiQ
+BL,L*Q(Q*L)KiZBQ+LRQ*QCUCHCQDH)L+QBLTKiQ*LBLCU+UCLA#3!+#,Lj!!HU!
+!Uk#`U*!!S*U)QlQDUTLD#S#`!*!!ZU!+QAZBQiUTQTLULUQEQhU)UTT+Z)QEHDZ
+EQDUDQ,QCZ+Pf#3!#-N3e9fC`GaBL4%9PG`D(#'CPCRGi!!!!J)H'L)N*q(Y,E@A
+Qllbpkf[S1NZDrHEcGlRHEZ,K44F'jqTMSS[N[%")8GM3cq$1Q6BTRHF@&,C6qfc
+FkE2LMfPjIAm+1c323FcYc#PY%+8(0"QpaIiXRd%(,@ECQFq&,ZCZ,PCNb5+2EEb
+aJ`PlSSdF8cHH9BK,Y5`JiffMq+&(E)9fS$Y6Yi8[SX1,51[ErB`B8ZlFIYCh(#K
+,YjZ5`jK1Fe@aCF#RNI'S6JiHGlfja*0a3aZ9(-!GK`SpiBC%6I3mU%Zj)D(cZZj
+ed*HpGJV0`SlU2cmc056qhV`Spp(i[))EYVq%ZlRA[(Q!SR@qbr,L5EbKrMRc,H$
+LdHrC3GQCqq[Lbq"4iIeTk3*m1lK#Mp+IYmLAM`2GaCGl2p(eCdb1c-XjU+&(kEU
+lLb9M1B$HALbfc'QeQFc9AN+@84T5Z-rlhJLZ-V,Z[DRaJTdhGq2#A,+(H%JGd,C
+BQj,IE@&@@6Np0('$R6@21klV,%)9+58M1!PT+(Xk5p`B9+FRGEpJMpNL0Y8UCE@
+b8!)p9FA'qeZ[f&laB@e@TmhK-&-lR5+F+&2UjHEq#I1&Yk(Sl2,Am+HSPe24%3d
+QYhA%`i8Y5N-6Cq0(hrh[-`i8p95b(IY(pKa!mDZMbYc2M!Ke2q@&SHP!MH8Hpid
+C%I)i'BU43TkbPIrk8*`3G,j1pkr"K9rY4aRJKd9l`r3mA4!Lkb22D@D95KU-b1M
+1YSGcXcdCh9[dH(#VeY,jPp33aZlhq(LIhp3$(A8C-P'da%59[Q91cr(*)"$TZ$6
+hr'mMQI&bDZ[9QcA-c0eEG1-dIQdY9Tk#56SH$i`NQp51@56XJkdqZ)r)Jriq'+)
+f%[%p05$L3K5kp,C6CpQ2TlbaK`UGJFV`(llbc-p6X8F8%I#eH3f'rLaDAC))SiF
+Vc28`F@VmkVcm#M2!IcllcF$r#`$,Xf'3!+Uf-fjj!V[Y&3p[aU#+P+q5r#1QLfR
+C#qX56ZmXhD(fP""EBANk`4*DZ6(pa*MQ5irVfAEikAEUc8c30LH"DBGYGa3UcPU
+Dl[H(U$NC'NX)Tk6#e26$)bHURZEFGH+G"4rHd[D5YT%(dZl[FrZ%%+,##+2+DhB
+Hm1e9bh-LGSHamU&'k31YCeQEf3crd"dT!hRrZiF*HQ81cAf`1G13!1S46V(hI5K
+,S@$PQGeRBJFd5KhIG[JiXZM81q$l)(2l&EmGQaSlT&(1rj`XEBTDr3L5V-HK[0D
+,'jY)k5eZDrcmHq[)S5p8cEQc(R1+0-,XaA2XcG4pk&ASUQApH5J*@bq9bYhRY"l
+%+[bU[SH+ERAIPpKlHlmm,qA@UG(q6f"+'B1,!CjbZ%lU@lMSR9-bFYT,-H8`[kE
+h#[i9-dJM(3%&qcNXjUl%*2PN[Q@BpV#TF*Uj1NYBmT3qVeG#[#RR%%CS2lHfa`i
+rSjeQk&Q2THE#PRQ`01YqPe@RK*dE%QdLl2%Nk4!bdY)SUd+A5QE!LCc0"$NdUlC
+kL%[8'1Bl5CA6$@Q0i*PQCp,UF1PTeQ2-Crji4HeAb18@Pfld2N[hC%NaaXEDidG
+r#6(Z"Q**N!!KPTM6Um*-Lq$'53-Y!-9X56S+HZq+KD@[pBkr*NbCl[@X9R)iNPF
+qEl5+CFiNRF1*'**mpNcidqYLbH%DEYE-IiB5EjmB2$B`I*2V3UiCh!Sa58-'fi(
+(d3e`rfIK+Rk"%U%8r*hQCbI,K8ia%*)U&$a,V*mI%K9p&`cLDLrlU*9P9q1rp4I
+bR839Pd1bi&aaXR#&Emai14)dp@ijP2V3*qNrLG6db*T"r[rAZI@mk&EmlK*%dNU
+qSH&!*fm@kVI9eJpl13r#92p"%JNE(mfSYZK`k[k9)XaqUld'2aqJK6j,[LlhaiZ
+VIU1Q#6cAq2MIh9,Mq8+Ikcd9SidPLCfR"mb&2eAd3THX4#KM6pQ4rrK[%p#`cZ2
+kkPpGKIL2H`pEpKh6Sf4BI,pGUmK`a!R+Ia1Tbb*d,-qkjf3kl@j1&EpVK*%T[qj
+dhbeck&$8MDhf(2JI#6b(@rIEG(I5b$3+kiGE#f@1ai5IY1T,6D@#qSEM4iN*Ii2
+3lrTF$E(cKS*c(Sjc@i8ReiqI#Af9(,#$RY2IN[rYRSHdQBl8lL&(&RpaJ*X9(Xr
+FK4pYd0aD2m5'M%(kH,#Mri3d8*TqI#MlLmll2E`SrqZKZ,4pdKSL,N!dpiKSK26
+mZ&,q5rZ1Mk#q[q6,r-mjKUc&YVS8[I8GX4MqUTIdHKm[`,a[IMm8TFjp,2rL(T2
+%5IQAa2268[aUcA'"aB5rr[3lRN1%[l2!&YrkN!$K-&HRjX+Ab-j,Xah[KMr&e-C
+IXqkSE,lr!(eYCCL&[0G,r8Pp%8l9pqpK*rbIqD-,GR#6iA3bMEd1SZ*ddEDAh#a
+*-r1r&hdfdY,0V@K4lCi-r8+i"NDpH$@l@+M3!CJmi!!!!)"RGQC@CP9QCQH)LBU
+*QCQBGhPiQ)U)QAPhL)UlLDLDLBQ)LAQ)QDUCHiUAQBL+QTTiQ)TiQ*QjLAH)L*U
+TQVLBF,#D!+UlQ*!!J)#VH*Q`N!#3!+UTZCQkN!!*!*X!#kL3!!#j!(QSQSLCLiQ
+CHDQUZfQDUET*Q)L)@CQkUiL+QBQTLkL'#3!#-N3d9SF!J"3649CQ9RGfF'KJL(F
+!"RGi#3J!N!$jYAEGIIEA[VrXEI1hGjEppYYVKlEDc2ac*ReZUpMhjNcQhb"-LTe
+Y1CDd)U%b+ldQIb9c,8dNQ"UU%m%19UINmf%+HPNmA3d*e#c&i(MH2Jf+HQTk$M8
+8AkRLC2@beHZMiHk,ljmaj'"PmH@TI4iR"L4rc0C[qPaB9H[Tq,S3`$r0HEq(-iX
+YA6V-2AZ[*e(6imXQSRm$Sjdd%IKZ[4PNl#MS1,2QKKm1Bp#@Yf02%i0'J$R1rfd
+[KrKd1,BUI9MQ@TN'Hq$+FRTTDheU[RHI5SJKam,#fHXePQ@Vf5b(h[-rceHbaB9
+1c5#ca%pVVXYr!9(IT@M,4F4+MrX+#PCLlrKjEjIdCD@VUC1"dKJA*Z[)e&hMbar
+ASm2G6l83,iqhPUpSPd82Fl9kD[T45H!XafA@j,*h-YAYAV4H*HEkC,AlD[LF'1N
+#2VIkIjAfqe[SIJPUkT8PMI8lhKBmYA9U4iAP6K&TDHXTF$T)Nbiq,e0Ab)4kfM-
+YCmkG-Ql,Hbdqj5N*`@qTIB'$#2A81LfNkD$Qcp#&2AUFlRT[1`i4rE8ji31B8lK
+lUE1S@N@GZlR$K6f"LP#C0m(f"Sh8lT(5ABZZ6f9cQ)5E'GLHVDcD0T3dG2HC&2Z
+dH6Bl5KFIPiGe,6lbMLF&Y"hh)PNrY+`4VeKS,6lfTJDUM3%erTqEYZ4BNf4M)(j
+lPCL%II,BVBidXQ'DZLQ6H,f[C3Na+1*kT(GhjQCPMfF@Q[MAI`iGL2D4GRjK'mV
+2`MfX@JiXkeLQ6rXhmXHf-$"VME#@2[c5i'm[#PNqiFkJ0j[(m5@2lVMII5bH!4S
+PA,lRTl%IJVHA@hmY5BZXA-e2KM$p5d5aUBrZIaIkm#%+PUZTrIm2qIkFI)UcC1L
+fMGJEfi'`9@G(jhRXa$P2*l$,ipLV2IBKYVQhPTa,XTcG6JFLa8S,%VLldQ6[B8k
++RpRhRFiF+P*6q*R1fYXH&@0HJ0lGE[X2him*,`j*#jqamI'K(HS1YBV-rEBF*-k
+ihN[Y3NcbMX+iaS5Cp4fbj@CK*p*4f[qhj-*2kP(Gem)cQrV3G0%6q@kaB5D"d'l
+`3EUR5,HCAeBlScfMCLpUfK@kCHrejq65q$[-[-PMkbKiZK1a2-Sbak*SfGrIra,
+(A1S-kdQqYKj%PXGE)V5ENZ(G3Tmr4Q66VAKE,!b)5G!ZLfhqIl%+I3Q5!GhZLl(
+"K*d6D1RCAdZkK@k1VLF%lZk,S,[UqSf2X`VG*Ad('MSLJI#phr$aImIFh%+QAGZ
+pmHXiZ2,5Z"4-fd"$P5dZVD-RH6#VdT`10jVhFm[Eq*Jbe-`5)YAl2qrm[2fPLPQ
+5YQfBVb&20*dKQdV5,0kK0-2SX(fB[`E[X-@%HEEf#LkRP3UCaY!6lLPbUq,BTG1
+f$c,ba5Zb-Y,-b[#6U6Nd)*JHGLbd[TNe1XcGe,5d*'4@C[N@)rU'(6E-h![i90'
+YQpT[I5p+&L6l#+E@N!#jqYYl%Rf9(AHY%V`A9pBTC**AD@YQ+hX8XQ`CcN'C3d(
+D@Ci'Fm4J5D1a5bViap"1YPU''Mb)mXGPjXbcPmlBT@jPpT-QK,h$jMpTYT+&H@P
+YcGQeQ4HA#Pi5b("X8Y`eK3YmLYMRBf1C5kRSH*d[@h)*HQT,V1JB5UIS*+M-SAH
+T(+Q4@ha)8TP'pkhZ%jQakhU+dZIEE"[dU5bqF*+&EI[r(e6J(Zc'I4Q&h8+rURR
+i0,I&d@Sf(2GIb)9r@8RAdE5GAJNQ+1ch%aX6Y0a#[rbU5mQ-55dq%I3S*lVDl[Y
+i8rA8IT`2PNpJMa![HZYj,6pP6Z1KfVN,m5qI+EIVX[L`VHdYVUqjphBqAM5`VIU
+1#Bl0,56*GrHrY#6fe*A$596pC*8E0$AH9PZ"XS9If0p,8ERSmY[p$K`VIp+c`9C
+f(lYhN9[FGQhcjp&j&EhACYjBNS9IfVQhR[NhHSZ[%akhlRCPHda(Apj59I4jl0H
+R1V`PTrq*i86F2Mi'eK,@rIEF#hNS#Fm#2+jr0BQ,#[ibY,bBaT!!T`Ebp&TS[M(
+0[[U2Z8(bI!['q$XYl#R`e1h4@F3Ma8Z$-6hIa92F)Zq-rF!mG1XSpU6FrpI#aCC
+*6ed#cGGCUS5I#Sl6pCUTC2L)i66dqB2lMib1%Pak(a`Nrp6X1RX(6krdB5I`8GG
+)1rL4d9T2efB(QlriMKmA`DHmK6j#eAGqri'0#Tb9r4,QdhqH&aH8pFAam'&2q6e
+a32Nq4eaGMM3Tr+pF9&R,HZ+$dRmhpq08rRAr6DDVK#q2-8IFS2NrrEqV6m(ME#&
+2qK('%JI8jTppMkiZDf&FMrRmiR`3(mEVa@GPqmhe24+q0(bI,+ArDAh(&-dF8r-
+iC#Y*5`09&3&mqN[r0q$lr3c-LV65-a!PHpRNp0bZQK8U-ZlD4@fjiI2`K@UTj#S
+Scc@DjehQpa#Y@F5cHEjfEcHiPMZ6ch0Q4IR(KcU*q"fSiXQ@YH@2Yf'E*-rH0h3
+C(fGrGAQ6Bk3'EVjHAb`!!)!fCRG`B(KiH)J!!!J)F(!!B(H!J!!)#("@CR#(KS!
+!!)G`CB#!!)GiL(KJJ(L(J!!(GiB!"i#(GS"h9J"`!!!!Gh"`!!!)#(!(#(Ci!!!
+!#!!!J)!!"`!!!!!!J)!!!!!!J!!)!!!!J!"iJ!!!!!#)#!F)!)F)L!!)K`!!!!!
+!"`F!!503"9!&!a*64BLFJRM!U#H+aCc+9Uh0jlFe+R@V9-56UiNPEVbBYA'p!Iq
+mFh'UG5RM9HRCQd-ZA(Vj-ZA2$&LA-XGk@[68Bm-f0Qkq%4Qi)*[rGiIeQa%rmPC
+lp,8TbEq4aeFQYmra&k-d%ZjNAqf4Ddr,DYkQj2kh$amr!rq&i(80jSD@IV8j2MR
+l'ccYbr[mAIbV9[9pNlrI,DLM`lFAF4YqfqL26Vm8e[bD0V6eGkIkqKjXleDQ[aF
+ZcVD*"GL,kmbE@RRD&U)fMa[DMGMJ!RdMGRBB%k-A!CFMkaFRB3%`ihJC[--F)4&
+e&j&%%&8JLb,C9riXFVQ8U2!#X%'6jHcP@!CJ5f-I)"(5Pl[Fli)U82hbFKcG'Kr
+!4%9ef&$qX-lD'!!!!%)!!)N!!!!&!!!!!!!!!!!!-!!!!)B!Gf#'Ci"iP`!!!!N
+(!!#3!!LAQC!!"iN*L3N*!!4f9'GeN!"(9'"84AD@N!!!!!L!"`!#)N4Q"8!&)c-
+c49$$$#2Ypr`r@YjaIdPF!XirErrT2kaaVRHd9iaT1eDDhbVR(bhp8IMfp@'lir(
+UL@H-E[Pf4,5FCe[&VJ5PTL$V4U%abYI6,b4lY`r1[1IY26U+Pk4`PR'AVbdVl6M
+TAA51@NrE+I11&FlCBcdPj8kBCFBYVPFKNHJ8&*il3p)hE)MmX5V+!VXPS%[DEc[
+Y&kN9`rIjpI(+Nb6%ZMhjeMP6@`JI52@ZNpL5QrC(IAej8Q+DQPhq!CY+6i+HmmV
+qN9dabcPTd!jJrX9r6+cV2Ab[,,1H-HqdZQb11PI8U#10q8DDfbciefJ)fkjjGGV
+kh[jbd[YaR%IhZhpfhYlYZlEZhrjKKr9GBm2imIS*f,-HFikdSjUXQii,RN"RbRK
+RA+`cTK!BPl+0GQ`@hrGEAC''FlhecijHHZNNL6B6F21Gm'l+FBcibeTGk1-p[+P
+jkCb[2"fZmAa[l5TU0FIXVp4rZ6IXq(`*Mb,mpTdk&ZIElqlq6Q9K,6[Vb,N,(LG
+V6c[P+JpiCjDAV1-,F0*c2qjHFiPC&h1ZY-@G$HIrAe#P#Fr6aMYkqlH!!!#!KjQ
+UQCLCLDUCLBL*LBQCUBUBLBQ)L)HBQTL*L)L(CjQTL*L(L)GRUDZBQ)L)PhHCUTL
+CL)QBGjUUQ)L)LBKRUDUSLBL)PfDVQjQDQ*LBCUU+Q*UCLCKiU@L(H)GiL)HCGhC
+hGhGhL(KiChH(GiKiQEaiQUUTUUUk[+LTQ)HCQDXJ!!%NCPH)J(#)!)!!QJLTQ3S
+!!+N!!!!!!+S!#DS!!!4!*#4PGRChKUGfLBQ+L*UDQ+!(UBLD!+L)QBH!Q*UT"iJ
+!LD#J!)J*#B#UN!!)H+S*KjN!#JUCL+#JQ+N!S!N+UDVSD,)c'Ce2i[[c1&lVZ1k
+`[iY9UIakV8iA5HCq+I`XeQ2#ll-q"pl`R"AlQ8bRGGah12lMZFMPIZC$(rF[Qj[
+PmQXTCrrVje2K65"0cYHq[emk5Dc1EqV09Yjph"ARi-"dC6Z-A+IBaRCrePrLlU0
+9i[QFr0m[[plqc)aYMj9acpVbXT[I&bXE,aplhXYf%QmPXTDANYSV1mP[0ih2i8A
+fH&4IXPZ&Ac2$V[TLch&m@@[DZCqH4ckQ,KkQLl5"P+L$PIJjpCZ1G@lciS(QmAr
+9IZ2h9qifeG[2+VBp(4e0*qR'F5,eP0lZ@kV2D(0pl-I9QILVj5"ph!fA&pHaLf0
+K$jGI$rTA3rRVBR8eN6X+b*K+Z*f-MSbD,[BQ-UVb*PDVSbH,MSQ,N!#&H64CUdS
+Y$b+,6@G&VH24E6M4GhBd90AdA0S1VLrcXSY0ai[VFL,VE5,TZ6&d-Q,QT0&Nl@L
+ad619-5CU1MEdAf0EEm5*iG4dEELp4E8@$YH,Jj2&a)4ZS8Xq,SZ2aCZ`UI4`FI!
+e8TMI[lRfF[eAkCDClc0r2-50jkA`8Y*,@9PKZ((fhXdfichRm(FHTT1"3ffCSiI
+eZhhm2'GMJkZ2(Kq9ZkrE`phYE(CaDl@mI9aIik,NH4'q[R,6`Sf"jqp`rqGlN!$
+&fhHpMeHA`P[pcHrThdHkqHkqMUm[HBZfaqpaq9Nph'`hKmR)aZZmQdbFARqYCj@
+,DaiY([iG(4`r6i%288X21m+(Mq*$klhk(R9'ipQ4Z2)VBqfXDHcTEH2`kEdHr[f
+6rMi'B9&,18JER!mQSVUIUE+L[H2&q6N4E#dLm,NaIFYBHhYBZeYS[Qfm2cH9$mR
+P4G&F3p&F4I!ME@4'p#U[EU,MShVe-Eh+RiihZe(pBfmq2KFZLqaLVULl50YkUpZ
+B[Ha[0UifYV)hNeNE49XE3edE09mE*f%E%f-E"f8@pidAPmDLiI(U+lLrJ`*@V[I
+TrlTYPQ1TjhSjP9chNTG`,paHbcPT4CZ6$cGV#cGY2CZhR2!MH29aY49hYa"lc0h
+-$[BhTe9lA3-I9I(&e&YHeXeQkbGcGA2jZULIHPCF"N'9Nli%AalER""H4G4@pj-
+aU1S[HA"qc'h96Hh8(Y)hRe0lF6Q+j8pLVD(LV@,K16aEpIZ0Mlb8re6D2-p6q5a
+bmXa*ieq[e&f@%j&&f(*KpK*KGKDchB@djfNE`UQ0SkQpj8(l'EZ)(f-9FbdA89A
+H6FA8@JNAfXREl9cppUSRf*@A!C!!C@6[fB[MfRm3JrYQj5EP)%VqQ9R2qir!Q,p
+qQ@ric"ITNdAk,HYN5q0i[A@R#ed(j+[3cPKAjQHTZ0hmpkh)bd,D&jZ*,9X6`kb
+*jYA%pD4'pDUM8Y9%VUQ0bUL0r'SMI,`rLQr4kc`rRP-"qcFhr0lRVXRp%TMr3P-
+[k%Trj84qdqINmRXE6NpMbkRd,[h2Rj[Vr2GlL0BF2Q4IXaZ%AZDU*lP9'fmL0YD
+Z*Y5(Df*j0G%cPI%bYK'kAVl+(cXMaS[XjQcSXpj&T`pT0BhQ5mj#lUkU146B[0-
+aY+TkeLC5TXkQZTqUX2lAXQ,qr#i#ar[f%Q,Z,6L`ZbrYf!2GcAi,0rAVZclEY!Y
+q[IE6P8rkHN[EQRRllpHq4jI1G4NriGhM-ep'CU,beXUUeh[PbQEi&Ekm,4EHVpD
+miZ8SC'eSXTlNLKKjUSR0$8`0C)JD#XJC+ZJp2Bk#&rDAbPM6FUC[hj,(lm`a'V,
+'Ll2XS%YDm8`8lHhRZ&EcPKE`EUfJAYV,hf6,pKbCI&@N[P14,jZcPp&ajIbH0,q
+EC5qeXCIEf%[lPI,m+ZPl#YPlUXPrNUjHpNGceNA$5RB92hqXLp2m@iLA[Zr$YkM
+QqYpb0GDM+AIUj$Hm,1q6c28bFEh-Ikpek8Y'frA9-D(IX9FmA0h&&iI+LqEbSZe
+Yi[S@dAEfaTG4IGNaH&*Lf(*Lf0T&ZV4@UrdXiYlCaVlaih8mD0f('+X1&DK64IX
+M5eG6ihXS2CI6RVbeUV1Qlk$e0mk6[XSTCYlHUP1UP1mjRSi$R4Y(mI#YbbZfJhf
+eR,lDQ$lYUQ0JUQ0dp6&k06&q5TLf9448ABe&E)lc#i6ZGh6cAf2Gh[Lk&3*`lAK
+lL9l('82CpMf2lm0Jq4pbKq$ZSGVLH*HBq(4j2LFr0@'3!+(hm0SDlZ`'deCND(i
+-P$aqYiPjNiIAE6LFre[JbJ,lZRbS$4k'MMd2`5f$i8YJq*H5f*TCE%m6RdG$RD-
+'k5Kap)$HKhdYS3Edfki)+8ZdPYEa1I6E+@fJ*qYPq%%'l`h$"RL4q)"PKaD(ph%
+h&I`YI5dp$YH(Vl(JErK6GPf(dIelZMZk5@Jpc`Vppjbb1[imTMZ0ak,Uqbl+Fk[
+&9e4D`YKf&V1HRK,@"ZX8!Q8N`0ePH6!h@E!61@N$GD)"2*j%$GH9C`0ejS#EAM`
+0ek('JEVEJ*lPP!hAZf-$GF)"+L,kGM!kQ[JEUTLl#aJBUZJEUUSY(B`-T@`0e9a
+FlB`-j9`0e@4F[B`2*N30e@d@'XB(Qe8$G9e&eeM!fY6!h9K&k@aJH[4f-$h!%i@
+kXB($)2X!%ZL$ZAU,'"mJ#AT#2cjfaPlk!RBCHaPm*Ml'Aa3#C6$@-[PHZXCI0pG
+BmqhU,(RmVLlUiS[H@"(eV'ApZ`RGYAd(UedEp9C8h%haj-cp20amH2kIJ,$CPc(
+9D4m(A5Q$pDlKC+jKDbhKED6$TZ4#k((S1[XSQ$X)Q6VSQKV1MF3mRG3q`ZS[8Fb
+KMF,pNDkmlHm[bILr9HEhjjEiYrHERVIfrfkU8l(#5Q%lL@q+MqIi[CTqCiZpjIR
+EhKlIQH[[IAi9e&l50jXL0SUb0P+k*Nl#*Jl+(dH2$ZH4$TT-,E@m23h-2"hHfp(
+VDk8SE5QmElkeEi"HPq'YP-EKF"B9&EaI3XD,cH0&mRMaG&CaFhb)Z8j&&LV5,LV
+5Ll#di[fBf%U2j4ZaqJ"le#-A&!k%B8KH'YM&fYG4Ef(ajcrGTk1#Mi#TjGjDmRF
+h(r#R[[jcjjLTMmZQYGV$rR[iHli-2@F1&QZ,$`I[d24U+'jUU'QUk(eUfKmfYh'
+QVk(49qilf,lQqLf(ZmEh)[bITaGRl9j[HTm#2D4qphZ,lMI4j-I(Eh&pjM1VkVk
+`,rLS[kE@cfp&Bqp&X0pZ-r5EM*dHibG*Z1ZdFIFD,f2Bfp,YFCdZdi@caRDkhLE
+,'BE3drRic$j2i0MM-2LDRBBc'BfBlAIaklmq-a9M[1SXrEL5ePqLTMiLQa[mUA'
+r05ilNDr1mLKb&TVmIbIARF*V*2&Nm5fqMHcF6Ad'[Rpa0F59rT+B,dDEhI"kUZq
+e"c@DqV-m[PI&bC59KAk"eIP9qpd9M'cGP[F9aihB'1bcSVhN4EhN8AbFMLr&'kR
+MraMG9aLVciS[cPaI)Lr)A0FQ,FXZ*hG[&fPa&cPeEAFRiBXaGaG,biZXZS[Uh-A
+EA%Afq9&TEHpXSRJ4Dqejd@`Nr(&XH6cSYPD4E+4f9pie48pl`Z2aHZi9RaHPi9R
+a*ELrdSk,X[kHR+`2*p+AJEA1c8#L`[Dl12'c[8FldFTM9N9Lpe)N8G6AHR8H6Um
+j2GYQ2e9ZAd-jkH#e9PYS0cj((mqFk'HY2(RF&i%lff4NjfmRmKNEE(p#ear4Nj!
+!LE@ihZ[YkUeV,5[ih'X,1Zj&ED9[)VH4A@GJ"pT@@Y6bUIbVQ0rc%rCqH9mVk[+
+[,MhZ9lh+riRFpJEE`CrZqhNjHJ`16j(K89YRm"CCR1cQae@CUp$-EAcFVBEUSV+
+M'q()MbrK,[kjE-r6Q1i`[Dc-MLic09dA6CQ`Ll,)f-AeFG1F+am'mJf&PP[MJAA
+'qj!!EVMIPJr*aqmj[*p(XSrB51CHFbThIJjjPf*H0[+ZMprFBh'BbE[fLTSZXi8
+Acq(rIX,#@Vl$'A0I,A9G,IcVTEr%24e(4Ui(Eb)%a930"830Am%$eDH"`H*!Z+@
+$dD1Ga1fYq&GF$iD,#l[pHI8+jV0Ilc0j8m6LDq$0bf-[fhi&&5dX@XTU+NiGlC5
+h$X*RN4I6Tk,8qr&e(`8@MU,fXJB54"adA(b+,!9FAVUbLk@Y[IJJDkRJrmlLeX0
+j5@1iSl,HEVMA[#JFZPJrih'Sj'mm+dh'Gj1mbmQpSjI+lkDm$FGGEql0H6ZVMh*
+IrReTIer(jGlSqCl-eBCIQlUArak8[p(FpCHEk8afj`&jqBh8-(rUZhIpY"eRj,(
+b[)6$84kLMiQRQE+CjNYf0qkUrB5NLiUVeqLUSZHi-A&eFcqR&98A,m1mLiUUPZ'
+&3kp9IZPTpjcZ`pqCraZ!'P[RiZ2h&A8AS$5+RHHcPH("afih@LiF$+F,-EcdkZp
+TXPZ0K@EM8kkPJILh'Mfr"JHE`-h[-lAhQibmIFCHa[0aKYrZ-0CEcTD6FI@iel(
+PXh(JF[dq$Yi2q0[,H6kI)pZ@fZTY,h88ffPm*i90qkDahkTEh-lDqT-qlPlDpar
+&p1Ad@(i[X5ri[qTEj1ZZ0rlqrZEb284q@-r-KjUlk&A3FUYRrm6RNI&"f-TdYI!
+lRFefKCH3!*MrHClM'pMM1C,DIF6HmaR-kVq[9G'ThRc9Hmre@EcRefmYUrH8PK[
+#P(UFEHDRMla8Nj'm+5BqehQ!YGi8JPpGXEMGUM[XcA$br0pLDrV,r4KHYhdTf0m
+klFi$jj615QFP-CI,r[T6UTIim*m12hYAR1AQ0lZYGFjVHq2kr+PZTYTRUED@aFQ
+@cPT-jbdP[+XjEd10-qKaTEhE'CiGI-f0I,IdVCRjkZ$e0A!aG9"aG6"cP4"m1RR
+[$iX1CkVFAi`+6IpG0HHr691lfZL8PCbBrq,'UIL8*Be-hlEde&lI#S[hF@Lp5RM
+emcr5[JG6@`HTV)1,Ui%YIX29d@'VD,keE4G,AlcR@%IL`IGiX#aiF'aiF$qP0"r
+VeAMfQmdFRHGr*hQAYYjKlD2(Q[+MbrSHTFqj,qlUHA(dGhqkArTN2KhAFpCqhl[
+@r4KHZMNaHAaI4`1j`'rZVb4a)qkm1qehfZpamamqClM#i#""pb$IVV`q4qU*IG,
+DHe2pKUZ6kdle,!ABmREc9ppRNHl"[D5chN#pU)(b9-$Pe-#kUS&McBeecGk!Gec
+Bh,!0f([8-id$&mD"LZ2!l#cJG6C`,lb*DLq2KFL@MG,lYTPBhAH[DCZ0J0V*Q0l
+JI0NjrHi,bC2N4ZhcR*f-E"jZdpQ,rETB[&bej+H$8Drm28AcT-Kh'1qQ9j2Si'6
++G0UqE"Rpe*RpKE6rN@drS*0"Nl@Ilf0fmQ0NT23YU$,mVmH%jhim"DI$bZC58'e
+fh+Kd'Dj0"NV@JlHfS1[Yk$Tq9#LD@ZZ0IdEM@Hr+l2AhPaXrZ42"`@S`GYfZPlU
+*h@4cXa*`rNGh3j(4j2Cc(%NddRHi,lmI8H-Y6rZXhp8aVELmNFf0r2i[lE2i[0K
+rbRS(YjM@9qSJB'Zmb"NDcmQ0dPA&f8L,kY9$pZTk('KICKA(`3VRprEfHeq5&mR
+4KIcfh(fr3irS3VLPie$#VUL&@e-2fUU,XkVm10f8M`B(N9QGJC'Yc%(TUkBQ)AT
+aCIGedIa0(drCDMZ1hahe5YE&qQ$kZbV*l!5*c1e-jU2DVY$#d'bVGP#d@JVI8Kq
+6-9qTKl20@14LBU6dC2b4ZpLC5eLC1cam,RC2Mj!!K50$CC'&ZYRBC5Hf("VB'#U
+i'CU)1Pe9P)j%@q9'VmGb9j63bRPbZ&l,dHcr0pVqqXq(D8'plDJfHTQ192CDJcm
+RlP"Q,IHiLiMGIFa-&G41QjN+JTDEQDqJV[HL9fhZr0k20e[b4VMpH*jZZk0hVqK
+GJlAFZ*dpe%`9c'a(+hZ4Y[Z4-M*lU0Q+ZAaZXm+6bC-r+k(e[aaj[b(*DV)Pqa[
+"dPGj8pQ+QHlD42G09q92CreDl5p#ZeA3X04dE$c)Hlrr`q,i&PpEZ*h[-6DaXRD
+`qGNV2(`l@Bif4RT'PXFR2HRl9I,6fMUTc)9FpdYITCcLb[8904MY*pERHMKHe20
+hFd(&ZFr,jrb,A58'#mRkG,Z00krQkrA6Np!r[NVHmq'erl`9"r2Q8rhT@[Md1P9
+Mf1breBf4&a%L43e(NH4i@LmRm1CddjeqbeG6j8a2C(f21KC+Xk&C#lc69N2[B@J
+V1K)KDZ42HV8ch!UCbQpAMGVj%p*J`,ccE6q(FpC0I,m-rrDlh[C8'0Ri%l!PClk
+pI`Tbke9TUjh)q&Eq&1jr)A(Jr(1kV[Ch2Cked%eN28j-c1@p61F#VRXrAkq&aSf
+0l,m%I[p-bm[Q[THePfZKh%,'qhiqNX09M*cCjDSRYCh992DAYC%,3AqXRY&@J(#
+qpLDk&plN3YR9F@Cm['dPP8GVj2e[b9rCB,-r9Q09Dd(B@FcBFQJlZqGGY[bbXVI
+H6%lL8d&TlA5rIU1lmT9@GK0r@c&Y1k@fMGa-bBdab[[bRNITa9V*hZDrll@hmbE
+r*V[`lIm0lXX9jmaXXcqV4rZmraq0*p#2qM6p4q5abAh-dD5A+[*&h'ZIKrYY[K[
+)9qp#&MFEfmLLd&A#ePA1ED41Hh)JdY9"VUQ"r+SJG$fE6cCVVpM*eNeN[)YG92j
+,05G4[H[`')j0(3G6S14YSAmpRCkk&m8pdr'RZ[X[QUSAY5)AUeF)`kl+XKDZYKD
+5YKjqZKCqZKjQZLi5VU2%a[YerSi'H8aGHNAp1,m20rZp$blAACc"FbSd8reHHd1
+Im#9qR'kcKFU00GKbIcrSq[UGA5DZdj1Mi(Tm#hmq9kEc,5Id'@Nq4+iLhdFVNZk
+YD$-pVEHC+c&Yq'9dPrj8rQErbSfPYEb*VELJlciD$Ch0"f0Y6c2Pb[lZA1lQSPr
+,CHF80deYbBRCpReqCRqV`@-RG$i0EEkQ9`4"rEfhM5ZC)+ci#D!JE5f[prjA&"f
+0V`EcPc@jMk(m5XUP9L8M6N[dfVifRRYP)RXr@6f4VTl"@'RKEEfV,bB9,jd+im@
+(Fc()e&j$k2fY[b2erEKp([-6ar2KA(R3UAE@'[9R"CmMD[dmp5kbcV,D,q#Sr*q
+0LhhheBh@qYEPY2CiI33T12VEEdTIVlAmmV-@XE5bBfXj-6E@P"ZklQ3ZKc+(SAI
+SG#lfp"FrVfh0pDJZIf8&KqbJVrHS+DPjF1JpZdLE2NKF'Qpc0Yq5Aa&[jNc3DA[
+pCFkU6bpE%rmj2iqbMi#mjI`e(QrNkMmPINXH4TbSR5mcNqTFkc06@PNH2Ecq'c&
+Y2jIZl@ImE%5D$c-&bD$DNE9r,SBP06AHZM9flj[Qh[0mf*r,p1hq%"[f4VMhSPa
+m%5ZVc(ebiR8A*GA'lIPIES-PEGUDB''S0*)Q,R9jkJh[Ad&eYT6rI*r(fFI!hR,
+U2ZHCdhIjR%pV+r9MGCkXleqkj2KCL9`(GkcBBMEDM%IXfADqEXVrY[9[rlYh)pr
+%mhqpGm-6L@ejGqM8H4U1Qm$fX9fT6rKrSTmKP2*bfDQX(U,I55qUm+im,r9ePjh
+e1pRGehXrkH5ZFI%q5liqpQTfJPBRCaZVMGR'PD#GPk+lhYcf[-h[$Zpl`l`"1Ch
+drl1#ZXY3E(%mV,aZrc'(j1Blr4D$*@[k1&89(GkRTXRr$%pThhqqpY2i5rrRImh
+jE[jZCd1A%fpa6c[rlrhVIhh0"lrYb2DUUAG9ZkVIBj1QPqfr4EH2,kIPkZSlc9-
+V%lMkFEVH9Y,b6ajAX,H0LH9%lcQd'XYEbJdeV3D+fqDhMCqeqf9-GV%ch*`dE29
+8e+p2U*f9PF&*Yr@fG0S0@[QBlU9rhM,b`U+c6eY4Zl'(epP1C+bJjUaJq,#h9Gd
++q"Y+f$qb&Sl,S9F#[US2a3X0b1K85r8HcbHKZVASE#ff8eiZVPr1e-[Y-2GG$$F
+bmh[a42piL8l5$(T[BeLh)mbb'Tc@eNh)SXEIBZJVBI6edpUkQ&Ukq$hX,5ed#BV
+BAMeR31%@YKCZVJkbUiZ2Vi@'a%L"Y+RZTl$f%,khEe-$fkM)6hA@0$N*lkePVZr
+em#Zh@NSq0YFMj8(iYENr*JIce'bf2)k'MpV8FR9CA55q1e-$TXlDkL"dfAYZKKU
+V4bqJkkUr*,rLSXceea&cGcdDf*YUfJpkHfA-R22Zi2XmdiQ0cjQY8rj$'rrBcl@
+-pbQh(Bbf-cI!h'di1RTH$0ep*0rcSi26lq$fmH$Npe@E5$TG6AkU$lH3!,,p%$Q
+GPr5dk-Q*fr*Lr4IVE"mE(`U5BX-c#e1YV-h$lrfj%cep6-iRi*R08mcTDHCeR%Q
+pR6DrDF$FEAIErJErbmC3pMZGhX20C66[LTVKllJkIUYIK+'Qhq[i0*Vk[JkqNi1
+[Sk@Kp5Qk(#P[HeqSiP$iA&k(!P[mDr(r"3i#Sk'qJBlA3-RXD[@`0$U+hSD1Zf-
+(CjH`r4"plc)&RLl2SfPj2ikDlfAb&VclARfXeMkUCap6TqZUD(TDRd)'*p5UfX$
+*HR@D+"U28Vma"iPqrPBar*ebqP6%BhkXCMVM+eQTKDc29rR`GYipIV)'dmHZfF(
+@E'Ymf"T[6VGG!d&(9d-$*bD$YbFT0"LH5`'N31RUjD&RGh@C5(i@fVFT#e'dVXR
+#f'XVmc$f1KX-a#r9-@'MKl+BVYK#QmGFiAGj@q2(,*c0p[Z([Yr[2kEq,e'rLpI
+[iZ)hmAZpqHZ2&9NYMS[KEliiZMhacJrfqLqfdH64eej@dqjS*4DVdcQrSc9Kh2C
+I,+Hpq2"hXTq+2+H"[j6(GeZHXjqFq(Rq9Gmrd1AcrGZHI[Ylq+@bYYcq"[FG,Dk
+djr#S[m5h$ih2Tk,hTEjkrRe0&q+"PD[ReP&MS'ZU1IBEcr%$KmARmIHHp!qHQjr
+*hRiTI+dR2YpjMTIA4qIGHjcqClIrZ%m@8NIqrDkc6lRf1NFr%kTMh90*fX1iT)@
+fTS@PiF,*Hr#kHSermUVAeeAVrEVGIY+fK10$3@1[c9M3ik(AaiImrf4INr,LV6p
+9j'a4aQilE31PmhY2EJG,VrekbYerkqhJG,VZ`e&4N[5MC[Z-A*h9l*p6Hp6iXDq
+kfdfNAj2@Xr3Lf%H(AlrSf0$QUqKdeE3l1YerYeH[VUVArbU)A6qr#bA$KD@QKED
+NKA2V5DDkMe1jrCd[9GPU-ehaN!"+[ZErHIIkbmS2r-TGhNIPlqkjrBA2GEhcXI'
+dHFYqISVE)lh[FP'`qZj22fpTQk,Rqlb*DqfFce2(PX*ajE&FDCaGP,C@bPXhBc1
+FX*E`l#@mQ[QI+VTEA9h2TSZMi9&iXYlPA,F14cq,&`e24GT,I*85hcr"ckMFFkT
+2h*aA&JCALFqVh(XeHmp1XhRTeZimqXhQNV0jSUVIEkMpqNr,M0j1GCZHjqYe2Zl
+h-3&`jcpY0H&hQ(Z-YmF[kGml5cbpG,IVRZCq[,ehFp*U2i5p,pAUGGGGe0DRZ*r
+rr6GTpGcQAkVbDI'9fpaGKrhKBf+X+IUUir3EpFVNlAFr[kCRlHQmEfI2rpkc19R
+!m1`hdcI[GQlp6H9aYA(ifPMmE3d9C3hkVh&qi(VmE0al,14l+@kQbPX*BRPfp2I
+dAUEqLp2Iakq@bYI,CbkMh@ppeJ+i&!2YqC3FVQc[2q+A!2Rr&0I(m-(dkD"ZU@"
+4m'"5F#")i%#eT)0V4`HG4`2Mhm$r@qJI,(PrVlUdm1Dq[kPTTTVTpKDE1"mqMXp
+pRE(JcAar%E9A2h2Mp1b`h0I2-&r(6ihUMJPXT[UYI[20i90`YIa02`+HNTjRqZ-
+jhUlk2[[*a'qh&phhM61Efp*hdcT[@i0$VGE5krEDcKDIfp"`p2`Fra*Eq@5ZEc4
+crlm4JV[jF$cEb2m2pZ&m-IQ8R)[+rJ4rqZSFUBUVcPFZUP2+P2el58K5[dmIAB2
+#5I2mq(r2@kfafZeKkhGlZVh&$&l#SKhhK9-2X2f4F69ED,Nj(k[RN3mV,5)FYMU
+,09IlIimA09I`B5VKjc'!PhY&Nj(lJMfel93m9Y`di3H9*!QDhHlVL%YhVGECqIj
+m6&i2#A('q+UP2bl58pH8RTApmV2BAF`VkbHa8i&jA@P(GlhrHY232`q&5d0$dZi
+de,kh4i&$TSr1SFe`+(Z0p3j1NSCLMSCMJAP$LD1Kd1rSFP5kr%dH[eZqSF66G$I
+82Em2S4k(Vq,VU(TkIA826I"j[S6hAl6eC'QfNpS00Ukrb22KHhNmPCdmRKA1qq(
+qF6jlZMY,bZi-Ip[8UT2lZDqLBXkJkJ,$Dh%205BHdj%2GmD(r1`LG4A4-6@4-e)
+MCZTMH6`q9lXEDq[Fqhmr,rGp(,T0lBpjZ,ZMhYMi&2[2%aI,p[jlRh,fjh&lbSZ
+$j82[BQDV+#BVZK*KHV*R[JRqQimlpINI,CcZ!Xi12U)2ae(iUQ$9e2HpG8`*&6h
+A21K+UlU$fYMMF2MkV'qa9C!!JhqaaZ!qp!K`r2qQ&$eGGB9[Faj[Z9YABc-I6Pk
+b0!JIaeGMTcZf6fIN6f4V*lY*l9m'`mQ&YYPCD@mK8[L`kDBiqSrK$ZIY9m@krKJ
+q2X,b(6H*fpPV1KBHE2HVm$d0X&ADHHpV9fFLeLrIh1(qiSHlA[qKPk@"N!#UR1R
+prFF6XG2TmCeY$LXe[mh3rlZU(qR%Spc,4rcGdLI&Grp'AN4ZbJm@(Ur3Ui1%UB1
+ESklE`0[jd$KChMqR!q6(fIX6PeJl,rU,4ITJH[rrKqlL,,hV@0PE@pYEfeMCUf!
+1*S,HJ!25FUI!28h-eX3$30"p-p504!Sk1bPS%MGFI+31GX,20BhrAQFLBj8rUVQ
+Dp2Ppa+lU2XFHj849lhXTlJl5[Ji1VJk#UJDfSJHY4f'hRYVY+hE4I*r,PDcfiIP
+E+Zph'lIP4[$YlhP42a400F8'XZ*r@@m5rGRMCheVU*YVUJfPc%mfiMILh[PiZhq
+MZq0[iA%l#aXITLr[a[Vi5`h82hFMa[e31AiA'fd(h28X+'Fde62BUVfN@(4F@Ga
+GC(RXJcEpc(eGrE5pYGr,c*rhU$eVQpZ0lq,lP"RHhYZINVA)8'1lZJkl5fR2eR)
+bF,r'8K@[YmERdYP!kHajp6#p1UKImR@%C)ZI@3M)ri#keGR9Fq`KGGB`[X`+@Mi
+fZJA'jdrpVpdERHceqq'9[NIAGfbR1BqM,q0b-A1IUpbSh(*U,5Tj&9Cb129f9EB
+9pGBj#(rj8bqkeeKN+ZYlV46fAkkUR1lV*c$edjIl#Hk5aRpCFG$PG(PFk*iQ+lE
+Mrp3Z02FAmZ0STkQ`I'r2#X-G!k13!,293,R4mE@3!#Pp1`em$C9-'BN6RAeQXL`
+iA&QVl@aiZ4FTRC4)%$q@UXTckeI1CHYR2'V*caj%jRkUFd042C[JeKr11fVG[#e
+QfX2$S$,Kjd6m8E6FUpj@hKk+&f@+m,9m2,m$hHkUY0l'0c1Zl@XdRlFETCbrE+F
+[fcJhlD5eKkA&hH1i[ZGT4F,Y+,Kr`l#bpl%fAX4IFm#(lQDXGP#fqPX0T#fRUeq
+ZKD@SRY*96fCUjl%9XpdeIV)I&R[TPm9@4p$NN[ifBqI-BrQc9GGAR0PE@lm$Q6[
+Y6@'mHeb-eKY4*bI2j18PqPrC,p,ZZ4,b,[RhFZl"kX#TVi*VJFbDq#GpVPc[lm4
+GAKI5[+$p1KZ2ja[qD#MXirYC0kfk`EICf%(YUk"j&A!mqUJIZU1Ia[$JfqaXp$r
+VNCqmR2Pr&2I`d['d%2JE5ad0&UYa@c04)JhlXX"99AXeG9XDf4i9I)`pPAFHVj0
+AbD[N9R'lkVVqrUkfBN5-j)UB2CBb$!a8'Hkq$$`-j[2#iqkR2NlDdr41i2!bDMk
+TRR@qpm,"@f@RHrlDelqG`qBj1CRHPmqcbXj59%pXDU&Q+cD`i9&aTh#9NIemSpm
+Edjjp91D541CQXR#UlTklbS@cfPKTSHfmQ`eF2Gq"&hHEX[dI2CISrJbQ46(X,(i
+-6BdF2FC1[U*L[U-rAIEpUHmE#D5XlAfjl,B[p99K[GQmK[0,Q)Z0kq,SGZ9TPEA
+PiRPG(p9KjX,@EHYmf,T2FV02&Q+BZ6V*l$eXpPkbHcaZMlBR%ZGh04BiG,[Ejhj
+i0[cZj`'pjX[%S-rMmRbI)b8jS-TR-hPFhPCDBcN$)c-[d[Ib,6)3CIVZfNFRZTV
+T8#@AeG,[IX5[5aXG)p["5*'5Sq9TjI5lVPE@AeZ`Z2DPk(,h0[G@peFA!#fr,YZ
+AEhA+Z3,YVV)8q`mQjb8E8EDibN64qhbTDIdG,E`2'Qi(iGG!Nmldl5dh9TC5reZ
+ZkfdPrVBENS%JH$,pG9jHdJGr,p,5H&)T0()pRB8IUEVGE'Vf'Tj1IlZGb@2lHhj
+9e*q,dF"mF[prp[6BKGb[-jckFeaI`GGZHXc%[ErSjQLPre4jAp8HAe@qPp9[jI2
+lqAce(,rHb0(,jQMP30d'qPp"(Pp,(PGCZVMA5Zcp,PkDAp[c1CUj@Zm(QkQArPh
+AaHCM0jC6&riR&T0aC@@JUD2K`XT6`mPm%,ZkQ&PkU(KkQ,KURlF2TDR$3ZPU-23
+mkSa'[jh`G[3b2Ja@[NHrP+(GHr,G465haak(B8mcLH$,@jrC(&dq6T*Dhi&$KUI
+6kEI5eG`D(TH,3khdkHKfQ`iZifQSTpakfGprFE[(r"Z+E$I"Z+lVUMH@&2pcH9r
+[peZ,QRlVHA2%b'iZZ(N0j[1af1Li@AerMqE`Fp3j$EdHKSF"[[ESElT+2L8P,5m
+$K8I&hPl(Mq,h[6rTP[ZBI0r2QUMLd8pQ2@UB2AdGCVFEXp(AkU"kf2X[d6RVGIA
+ePG@mkYrkKHEfeI$[H4dH4$k0T3G2D6q#Nc[E5Ch)@S"cZ3YTI`*Vlf'YTVlhTmV
+V*60c[EfNArbCXih6bCclmHFlah%@2URS-IIP-hfIPlS--0EIk4jhXehFQGa!"mQ
+IkMN41RY#+BR89rJaGCpV+9YEA9PIq5(qV%fAG3peQUr)`Y4XU`kU+McCk$2ELUM
+i(V'FUTaDl2mZ0JGK93qmj8,#IJa&4LHYCbNCEkf0YRjj1kMpRBG4I1Pb%VR$QIr
+0JH6+G0T,[bTrp9T2k[NcqINd'4YTr)QHDfLICRp,Ck$P823j8+Jd0FCpEHIkm'$
+S%YCr*5CqBY*r5l[Mp[%PF4%PmA2lDdRGCbCh5JZ$YY2ikJcr*S0*D8"d5ch3Z0I
+d,RAG#jf[3Z[0q5JpESd'ffecYGA!efUQpGUI0er3Q29VXck[#m,eCr%BV3bG4Ri
+f*MpI3Ab2ql#-rJl(I4+e0&Zl+VUkUYdX,TY*)Jp0qlpe6!c1TUCZ"T2#ND+FdQ3
+Up0#c2E9QNKcGET,fVSYPSUb,Xr&KDD`1$1aRm6BrPPq[XS@jkbXP*cXG"cG[38e
+43HY98'cUk$@9JYcqJVjr09p"MSHfj-2fl2i,'(c,'()`GK48H$X1qR0eNUr,cRT
+j1Yc%jU0"@6%jRGC)cFjMpY86HRQGR#a'UUUbZUUqLZDL2lhBUeI0VR(Lrcj%L[U
+V(5cfCdPG1IAUI$R-a)Qi1"UTc2HT)R2VefJJjRfUr26QIf9MRCc5HICIKR0PT10
+aGPS10aGRQE1,YXNJ5cLqeLE1,lGjepT#iX[dpP)qUqGEr#dS1pS1RYB9l*Kr*D`
+J$q5campc12Mi9PamK29Q"-iIYB+bb-pqlZc14jqHX-T1DV99dY1Clp9C!`-LER-
+I9L4Ti1NeGCTCb,!Lihj14$[NHQl*REcllkFMbrmhFV)!1lPH4ME$c,'4PUr5rKa
+ZVTDeGi,25*c59-jTZ"AGVSTlaXMjpGKp"2H0Rr)VFMRTlaYAQDc*D1&i1ca&CP2
+'R["pV%9H-r$#bh&a[G9&993,pMHeUDUTJGPMEr9994!aZ0k549I4MCM"Ha@H0j-
+$2iMdUhaYC!d'4mbYmI53!$5Cr`Dh5H2MGAUXYAD,`FEUUDYR1RVTc"9T9USjmc"
+DZ[`mLalH,b*@UZjF!kUlrcbircGRpMmPM1jmhrE+mP1EkRCAk(eITj[MEhBD'cL
+DR3fNrjf4LB(PCQ*Kq9NN#4-IEc%6)@f63*%bpVQJ%jrV@d[K`%af9LCfdjp0Ebr
+5deI,fH'U)H`jPj!!-(Abr[3-6A6@kUSINA8$*eNrkFL(NlU8RIqC5Ie0A$bGa!d
+0C2kLXKq4bS1KVTV4eX28mU"TUqAm+YKl#hjpG$f&6!lp!hHeF$D9m$TDZ$Y,L"i
+%$eVL"N,#*imL"Zq9"apM%dFL"6FU"hX#QYi1'id6`UU"Afdi"2Ie8'[YCc$mD*L
++QFVq6#kHbKh[ZQ!f(MG2B9AHBhh*68llVrYGCNriq6iQE[CLdUZP[Q(Y0V+6RmU
+U8J9eC8f&4B`pIak,Cf0&dDf(`l5&SH0[F&9`rNNcQ8Xif3USYlD`H`Y)fAUBepY
+TQ0f&YR,f6'cZhYBfGrjhZ8YmR'cI+b1p3*Ql(+GfIpX`&JH(bSHkUrS3,mpa$p5
+46kf`Jbea$mm#DkH!R0b,bRS*aJ5l%[2")*I[Ba'P2TV'"dZ,!USlURcB&ibfME$
+`0lQlR)8q8ZHlhS#8q+Z-c[3%Tq`Z-R[H`Z-T[ElbXj'!5L[H9-aEfhR,lCa[#US
+YeE6Q8XYlNDZ,lXNa'lfqed2AfI&pDVUE#4B`m,JE2DbP"I-4E98TqEIBEY'H-,r
+MjjQ8rcdQAk6,G*PVRLjffVUQ9a2VHPbB@5dI)KDc,FLHi2DfFpdH22i,Mcq4XTr
+2f%qB[2'`9C3ChVkZImE)b+$`CLTS-lS+LJm(5dY[LI0LCIDE1haHXLCDQdeV,E+
+Jbe6USRG9@aLBB"1eNE#0Ik[dSh5eIT4,r@rSLG*AIRLmqZVH4MBFpH@&Eai%@HN
+f0EaXEaCkMXUfba['R[BipEB3,ZHp+cVDr'r62DMNIp3r-Y2d3r'j2k)HGj2k)Z@
+j2T4HkNqR$`dRB`qeYGM$[pYjp$,j26EqffHZPG"Y0KEEA@bZJp[c19Vp9,k#TmL
+9dP9U*A5b2b5qJV$TMVU$5@%rRl+Ib+P@(meRfXp`H4KjleH4NB@5j1+fX6YDQZY
+S%hFiA$iA$pcKm,fPTKIYQYRfI9C[SCVZp"P1Xm2q[BGjlILF$mZGrkkDh!r+GKN
+Xph0TKB$XMak)d+G0bIejhm[!m6fqmiA@H'L2dID`bj0Xh1I2-F,+lUV[2$mqUmV
+9e6X(GJr1I)Up!lhHC,mRkrjqElck)`(plQpCSHcYHClVk)hm(pAPGe`[fkRYQ0*
+XmlkIk@PS[iF$-3DbNc8$fU2130P4c2A9ZRb&("b@rQqlU+(Zk6lFYB8FhRF$5pp
+Tqli'2dq"a&*0k1Ee-hQH$NppT+5Ee([kI28XYr$JDIBFA6jqQPZ$`G2X1*0kZQP
+[DTG2X1&TpP65hkZ&TpK6DIeDD@eI$dq`TC[JddYT1*TpK`02EdXYj([cHSi'RrM
+`CE-e%hSk5F`2!PXc8cHGSjlZk6'CLVQmI4chK8H-b0G-pG4cRUEUMRMClRU[`U5
+FrT`*r"F$m'$Qp9bG2SV26priA'Qqrf&MTmKZUr6j$IBhck1EBq`-c4cH@Uj[Zq"
+!a!q91Rc("JIAT02SrJdqBTCEq2!(DEmLQPUdGZ*Tp*65h!'hKkFG[9TKfQaYf3l
+8ZRpUQPY80["dilCqRQpK`*[q&,,CmGU66r0`CE-9-hSk1H(E)e3l6QBT-CNDbCa
+qrR[)hdYhGI-hqMR[8h@rRU6B8FjE$YHdX[fdHS`hEU`1rGTd*MZp,QmAMYpc1al
+Hrphf[aqaHHPq[YIfBV&Ijp,d[5rEk04Tm5[@aJp,d)0e+l#i!1Ae!"h%[U3$j8e
+q+Dr&0H2b[Pj8ej!!"NliRE@mq!Rc@rbfracqHYrljrP6[PjN([Qj9j1k3"21RG6
+F!(mYa0ImcAr+i6GJ!Ge,qQ!Ge,qPbjIdUr6iT4GeqP[B2CqN4KFbi"J'SYZ*VcT
+VcTV8[%@q@piYYThlfCY[PY[QYVbGc)#H"1q&EJ(mY[0H,0H,0H&Ec@Mj3"bi"J(
+jPa+rRZSrKiYRKba[c`DfAr,UVL"UDQ"J1fU)(em(ZYhJr6pE+DMcG0Sp0lHGd&9
+U-I#dQ'a&M)XkI(8'-Xj&MihG6fPaq5UY9hHZf@4f@fbATlA+IRp$+rRR1PU2"Jp
+G8`G4FIbRG4@qMJmBcY9jMjjEJbrL8Nh2rNkMrrFF(qZBYjEm&4KXDlTee,kTeZH
+XlKQ+2UJQd'8l1Tp29Cf2XFFaad[c`ELAmkGcreCkhRr&RFq6)l"hX(2X-!1rCZ`
+(Z*ImHjl$+X@XEd-Bl@[[mI2DMrUl9ffja-X`Fqkp4c-kMp(cpPq(f26rilM0paN
+m6rRrN!!2%iR&B2l[Abl+SZaqI%BRG3qckf(I1pkLTj1$NHKKGp+IGB0CcjmeD4m
+(A5Q)i2`cQHjF'Nj8(r9V,irNbqGj%VkA(PGrC5XQ`PImef&kh'jf8kimc9I!kkY
+U+if$Y*!!Fl4eIK`-ll%LFl@Xa8$YU['jIp&92H$9p[!`9E!aqMUCcB9AG`-&BEA
+)31QX8#fAQiq"dpPVZkJG0aYGh9j,3UlGGG86ea`INTH2VjlTZ2Vqmqf#G'#D"B9
+,[mI86c!AGlV(e-pkfkbp61E8"Clb[BmBLAVr62rFbf4p,p"(NaU0K9q(NG,Li'C
+mICCHMVDLSSZZVi@CUqjlE#iM#iK!Q&kkF`h``mIc)IMmU(5FQ,mYM[Fc8e(,imT
+MFEDDhUjY8*qcTIPJerpmeMHje[9cVS3rh"N!KqDS`hi(9J[4Q2q[Bp,dPIhrAf[
+kqerAP[BlEZZ[aRCr"f1,a8aj(Fe'&[k[jGGehbc'!j-rdpI`Z&69rjrdI@VZ62i
+)!q5ElIfkMY1ZG%IpCMNc@#VUEh0[Zciqd["VDfYY*hkeV+pc8GVJ%3pMeIqZq[p
+cfXehq#Nq0Tr)mR5kVcG4#Y*02QlLGh9hfGmVm9J85pTJ2QQ1G+r`Zqp[phf[2jH
+2jpchF[Sr(YTLD`rkZ"`GAD@dQ6E@Pc#dep`5,1fk@pPVQSlAVekSX"ehajV9f1a
+mI1lV[B(G5YrqePq6pb9[q1JBr+phQFe4D@Sl("VfeB2VZIr[pH5YYlQlH*-@rm+
+$*5BR8bqIY)p4f'&94@$kVkZhZCA9@X5qf&SJ5*hGa+rQU-AiM(cV2p6&TfFMPcZ
+cj8E-B'6RChkqHi'UpRe28T06DCLD`q3YZqQ[([pcpZdkla@86kVSjM[pASHprEb
+-*NmrUIZfREd#J2XqZjmaj&CUq$HD$frpDl9DIb2Qi2N9QN!6m8jS*UBreEHP+Ar
+dDMYIbSUqhe23lrp9YJiQ'dmLIkR)q$Y-MNrdCr+fQMXY(*fRCjMdDMX[1C!!Ie2
+bjM)5Fa2p0NkEX+Im8E6rp81`RqQm+6Pr4SUKRXbmEk[`lbDeI+S0$E4XhE40$EJ
+(%d&a2kX!lLGp5k`XT[,bDr,L,ISfYjZH6HHab2CXqILZ2PYcaZIQl,[pcBmrbE$
+-lQ[jqeVXTZDhRlQ,RIflQVjrX4Hm`hXaIYBEfYar[$E[FI&PIFiQFphU[HbYK`X
+jBp9rc`kALm(Rapai8IFdR2hqib'rh1rjp*Z-"5EQ2cq$kr2TGcqrRdhVr&-lIH6
+HhphAqKe1ZkVAB6161,d0j4Hl[r4SUPa[UTV9fp"QV@0LV@*N`$YBNaE6qIYjmeK
+2('q1e[DhZfrFdG8a[r"pALeh@GKh2ArI`2iqZp(VIq*hjHljZHRH"UZAQjVe)me
+UGr0H&56@3i-eJ+DD[r$`XTd,clZ#[2`B$SbRFBZ8qaM1crV,r&h8DVaI-jqEjII
+lhpQ4ME(bVMRlAPC6Hq,PBfAMlh[CEX*0j,C5d[*E4@Gj,HEaZI`S[Xm+LrC,F+[
+QH(AI6&RZ,iXXGPIcb1I8aF28dAD3!$+9%(+r"ckcFFkY1XAcH,rU[h(lUrFEDZh
+RP9XHMSkQNr6M1*&kcFql)Bl6IeH(86IiC0$Pl52[TIUXA,rAa1`Y-RqLGkAH5[5
+lk2D5fDNpMj&m`rFBH8m[%5RJIQ[pjZHX[0pm0(cHILV[,Ehi-K'pR1AA2mQjc1p
+ml*aY(kp[crFYTEUEARlk0h''Sihf-0`)[rQ'TB[)PY[Bc2Vf(2iNABm5Lmk`VE+
+Xjr`4Hrq#LldipcT"jmL,pD4[2rS'Lpq"j92cklFFL$YH(1EAK3YG`D,6p9,31ac
+9ja1&8lRpe@aYRIUR1,-prDkI%FQKkMNELqfIcq[ClLqmLKkMNkI%@Xchpma[lfY
+$@LTh0&@-D0(pAM9Ri1Zh[q[(ZmV,qp,GGGBcZVRijE(h1-lUkjqqPpeZV[-cAcb
+Q4[Q&q`e[Dhe-IjUeZBeZBeZBerqBhFdeFcX*-SmMHHPm&,55ePCBEKapYl00Z-p
+jr"h(UD6J80YQD1(pEYpr$aRBi1VMaiIPEZ[fm2Gl@afF@Ze[(eFAq1Lj(N4[Vjb
+dm+0JHI[F2rRHj$&fhHpMeHA`P[pcHrThdHkqHkqMUm[HBZfaqpaq9Nph'`hKmR)
+aZZmQdbFARqYCj@,DaiY([iG(4`r6i%288X21m+(Mq*!!qZpmp-1ipQ4Z2)VBqfX
+DHcTEH2FmkJXEZ0FhG"m1JjP"ZlQLrV3GMMHXh2Yer8mldFchTU1dXemh`d&cGaV
+#lLA20!1*FI&2r-!IaIIkhl[@i@8q5mq'Nhh&hr!SX*`)Z6i%@Bi%A2m#,j(![Dk
+Cd9I,H,&f0*mFAdk5pXCE[GaX+5@lc0dd$aGaUDcFH4@EM2eQibGCH9D"N!"RN9P
+l5`I%bP0!m6&8dYU2MMaC'q[E+Cl3N5pXCR(4IeEqpVj[+9fRbPC3j5Vh',USqqh
+e25GjKHXqlZIDX('UcQ[QjY"Amb0lR-L8`"mb*AAFrbZE2mViChij5rhclArNVr@
+Cl'baRKe1md8LKd9AVp&@DI49XhiXA8m#,X1"Hemcpl0f%Yi%AG8Gl65fASrMh'`
+5MSZ$1D,J6fLSiILBf#!b$1$1+3ZF%&jZ0K5pj-hhM5hD4D3ECE(4IChplB6H1Lq
+I4aGA4aG$4aFh[k,'G9f2Bmc,hNTpEFal&M5I1$9pCIqjkbGrPGa[hB'jcXlj'HY
+Y"1j$e*-cpDdQF2Cc2ImDCmHaQGMBicf,jp[rEA0VR(pLbBjQSMA`FKc*l"A9$%m
+hKFVjrAj@iMDfQZTl"Fb$N!#qGaCiAXj&4C90A[HTUif*Uif5UifCUifHUlhP3Ff
+@QaY6)q10X*&lG3-G&e%L"h'EVTI`)[MfdA2@dA-fdA%fejDS'3CRVDpVCVlf8VT
+Ilf+VS'Mq2KFb"pQ0l04HmZ"fNEe+QpZCcY)fUUSfNUSfDUSf8UGlf048FD4hQ&l
+6lY4Mq0pHZl2YZd,i1!jXrAFb*lR,MEYhI#S&ArcCqhq+DrcpRmhhih9kHjrladD
+Kj9Tk2hkM)FG`fjNebM$cG4YVG4$iD!(lI,Rq$c*rJhFl9r&KIUq[IE6P8rkHN[E
+QRRllpHq4mVCX0bX@Ul2VZ41A&P&r9JDl1cQHcdM36Q(p5TQCQ$J28N6%(`[#VXa
+MI5qcrlhdAXYIBIpi@,Z+kTp([UL9j$$dSIN*-a2p0SDE+F,(Hjl'ip1KmqIkE8b
+IZbNmmaE64E5rC2q2JCJe1ILXj5"ZF$bDLZTqTXU+pimAj14&X,5,`Z6&pbeKlHe
+Ll@fLqEE`r0j82bH9&d9a$d9a&m#0YC%Ed+UpZSZ1MH[8a[FUIMMHl8I('hRCdAi
+m&AEkkVrIPSfmq2KFZLqaLVULl50YkUpZB[Ha[0UifYV)hNeNE49XE3edE09mE*f
+%E%f-E"f8@pidAPmDLiI(U+lLrJ`0I+30lp2rHqlMNZE$R)R2q*6"b*Ik+LAqR#5
+rbiRBI%E$R2SZcjp46mq4qEVHbcemaR'KfPrqRMFZSj06@9%Q,#k[*9rh)hGf(h0
+lMl(ZSf2XFI'`eMMpleeMN!#-!Qpk@alZ0dYMNB[2XFM4Fkab8AR@16LfYMNk+4B
+j5,)XFV&Sl(+d@kXCD,ZV'"IE!re#Lf&M!l#[JEUULkLaJBZYJEU4&dGM!cGC!h9
+A4CHaJD+VJEUYLiqaJH9930eA4F0B`0FI)D[LpGB`0[830eBEb"ZV(F30eCHZ!RZ
+3!$GFEE`0ear@!6fi'kXpY!hA)p8"2h30eDIUJEVNqS!QkJEU6kF$G@[T!*qf"ZV
+ErU"ld[1AlhTI6f-[VV(Rh-AGA82GFZ&qUkKE1kR[0ZTbFl29FAQiIi12DbdIKb@
+H4c4r2q'[qlf[i2YrM`[jZdp(Y24l6mf&r0K8#IQ`[iqer"f[i%#GVpr$rG`q&P1
+H[Z$`IVAF,*A-,@@m,E5BG0b)A3ip"epP%`GK%bGG%d0CdEJqLq(f&e&kMQ8-EKI
+XMAAREhPq6mAkVcHr2,I&[lcFpEqhqh95RBi58`RF5ha8Icr&l02c2&h[,mlHm2E
+mceplkr#ZS[D4[0N4Y&@4XTA4-RB4-(C3qMaiGcb)G0*KEDhKk'jKi1lfhSpEA5P
+$DERK@VMlDIGklm(@rMkb*Hr$'k2a4!$k-TdmTddTJT6"!*fdTKj6`EjpVFGAZ)Q
+*pEMkqBX0IXkhAqh)SDqSKG2lm,Yq,$a2$KjUQKkEJp'[SFeBd1+XGaJq03hhMEH
+pXpYmpRl8Dqq*Ll6G4l52h',NrYrVf29ib8hZ,lL@k[UZPqHdpQ2Car&S[kHG4@1
+hihVdAZai[Z'XRZ-h@lMbD[FE5VSGh9%4d2mrIKp4aBH5iF,6F'(kfrKhAQbDDkM
+e1jq#fBqIKqIaDhV-&h1!qrIrapC'rKJE[1c[lXpFk#Ge2UFUCqYE61(Nc2IfNci
+pR-l'cAEmrUf3!*XK2-K4k5hC)8jmrKfFjr`CZ,[Lp,Ge1kZr"fN[)fREAH9UEZ"
+e9h!bI`PYIEcFT$r(eZeL9dLJfGG3D#`S-6C3qKb)9abB90bBIV@X2@fm2aBQYN4
+2@UBfhU)P0`ZCYlhQlEjqEl8Dpm6&r&ZUIk$`ei6l94(khIERVIBje2p(HlhjjRQ
+m$jqElIcmch)h#pfkhNEEe0lF4FTEaG&DaGED`r@j*J8Kh2(Kp'bLG[B8'KV)QdU
+BPKjXTfAim(6hb2qrP-Gr%qHFXB13!2LRX&cD'*`Z&brRpIPlL068h0RX&m4VJil
+AYF@Z,fFGpKVPZLCZLCZLCZLCqY%hSrNZRHm#r(&9dQ#[1"l2[H[,CA+q9f2NqjZ
+0RlZir9[2lBVKj@jiH,rR`XVmP0PHM6CArkKe'qk2!PXP55fJSjE5lk@f8H@pVpm
+Y@d8Yr,G`HSpQFbHfVIGXIDj'jSr4r*bh)dIIK[k6X@aSpSder-C'RiIUm@Ql2GA
+-lTED0ff"Y-l1I`ch'd%j5HTBjc!9qFb&ER2#UmjUDV1HT9B[IhcYZmaRKjbph9(
+Z[DrE`IAfp0V[FiAKqr9EMGEfKpMpp$kIlpaX2HSGKlh4TCEY+(1dH[br!eq2i1[
+kkQdr5m2bZGaI+NHrVYM8HKQ*'eKH94Hl2I2eAFlRm9fb2[%IMlcmIiQ0QCEj0r9
+ErJ4kcFE@ZeqhVj[pr*LqRaBIT8m2B8mA8Hr$e([p'YJICKjHUKBqVKBDXKG,ADI
+Rf'RYE,6dI(eqTj&$hFRDd%h'h%lr5Uh1qjUM,1H0rpq'eqlK2`B2mIArQ`ASi(d
+F&qE"IQ3*J[cGIq2Vr`B2m'$!6X2[pKphXX,dN!"[+QRiP$"QjDC[fhTU,fq&4IZ
+iY&kP2(VjRqPI!kQYJp6@3FA9`*DrBHVSX0@dAeUfLk@[hR1X)r&JqlaB&M`i0M`
+i(p+D$rAU[(Y0jSj1mlq6[-[EEc$fdH20H9(Pr3p5jpbAph8mZ2Sl[pd[r6)I$ZZ
+jkcp[hHYqM#pG(P-j+HAaI4`1j`'rZVb4a+EmR`p6I1Nll*(ebhNRP9%Te-Th'dP
+*IX[l`DHHpDXSYTA8@QVk,3f&&QV'LbGMaF6C8@1Kf06$XUMSmHLqaVH2m&0ak,U
+10aHSie&Jl,Li1bSX5%B8KH'YEaG0@FA@e06B@eP*ir'YIlG4+BZ8[h9qA+ifdrE
+PrLkfZ`ZSmM0r2-8QibeAZ-Y58NH"f-cdZrT[6q#Qp2IH6UjRq1fmIfU2`TZYSr#
+d8hUHliJ#HI`rZDIph$qjTCZ`i8hBDRhk(e2If8hr1QQrjjkSeqUU091B+PR-&Q+
+V6q49H2mXLEmL4RClZq"2GhhQ)UjR2eHARXl`*l1pl#br!KCI[BH2i%2(jVP3p[E
+aI3YU+KkZ@[fRPqUJ6-pc*lXBZmh(-Zp2c0jp-cp%1r31UKGPMHaK))!5K"6H!jc
++,F8ABKC-b[BihAKjVVDL)*rC%deMdH9qI'kbMaZZqR@Eq"VVb[dq'VrHVY2Kklh
+UkEb&Gra1H44cRNB'XQma@H$2CLNRXafmLCd%M,`Zfi%,YXR86HQU2#hRadZmq22
+i$Lc1b`(&c1GQr8i3#DV-m#ErGQH"SCMDkqNeZfp2HEb4[2GPZadr1hh"hf-mUTa
+RP8Qjp[eQ@A6[rdjlmchpaTm4Ed28@Zi[XRjrANlLqfY$e&[Tm4F''$)rPa[BmbQ
+T+bMT)pKZ23XGIkpM0f0K-mbrE(hk,B9&&ip44H&98@AN4kU$R+U"j94"mUSJHKl
+m$FG99f1mNFEHHcaYjZV2HE'cMm'DkRJbq,T*V&dN[R0r0629I@j@mk@jpbDp$dq
+AlFe[1QPl(1r$ZTVqQ2P1T`%TfQrP*DqB$Fi,qYK+H(+6-Vq['bdH2khrDr2RZ-h
+p-aXAeiSljJ0[bT(*dXpmG428FLHp1XRY9@6fPN3Xe9chJ4FP)Lc%MS9N,1ee"lq
+5YkRN9h'T)@hfeG$kHXKp[9`TL4#d&9#dY6#eP4$eP4#fI`3pRVlb`eR[ihDDM"e
+[fp,pb(i1)e'*Um0j'3KGeQFlSD25BrDDRAm@@Kj@UmL2YrrcLhD[jbN5RhSdp,i
+,9fF(TV+"NE#"RkkFcpE#b9A$c0AHb)@8UiAH`Y"@30Cc1G36RCI6#XTL`fm,@e%
+,3e8+BUi@5V)AEeX,Vkk&e&G#kH[er4VaBff[[+rCrFKq0JY4JkcYG,h82,C(1c%
+M$q4hG$NG(NpR-F5465+,%IIMqaH-A*MkFaBGCeN[r#lS2FZIq*hb1lYXp1pYUZ6
+QjVke*C`F"aS13XB2K9m(8eq0p+qB,j'd"Ij3'SpIR-CFYp2hH61ppFa-0bZ,,cr
+8brNBRBFSbLk2HpASl,P5q*ZHcc&ml'qbNlKHXdXrE9[,Pm4FbqCj8lQEHJlHeLC
+'e[C0"LV@Jae"-@d[TC6pq5P*VUrlcr%Q,REd'QVVD*epUD,k#Bj0"S,5JdYIbS9
+"V2JLDcAhPcV2IPGEU-(ELl%b`ZfSZd(D[#l6ib*Lq6j&4qVif,ZAqR[[CNcAUfN
+rVDDhh%E`2FhZEi9[3a0AD6rU(NfjISi'6+G0UqE"Rpe*RpKE6rN@drS*0"Nl@Il
+f0fmQ0NT23YU$,mVmH%jhim"DI$bZC58'efh+Kd'Dj0"NV@JlHfS1[Yk$Tq9#LD@
+ZZ0IdEJ9#VLifIh)RJPE9X9Y41k+fT,dVDNddRHi,lmH0r"LaR2Tc9E2qlbXc0Br
+GFRRe%[dP9MIpjHUJIjUTAl-$TH6PCI)H2bYll9mkrDYV9IlT,IZrL[2ePXGp%V8
+d@lXUZVUUh5`ZQdNL$dhl[h9-$-kQTQi'Nm+4STc5C#Vdd,-pY@D5(0eZN[DZLf@
+LV)Zcm@&TV$@3!$D@-rLE(mX[epP#h2@9NT1GMS1EYk#QU+$eUUJfGA3DbXS$Dcd
+&I2jU[S-G$fh*KqhCr!HMZaKb-(B89(Jl$[TcGC+[bmjkH6VFa1DM39Na1Ch@5-h
+1BrE9%hTjRC`X4UUUXVUU[SVQSMrNrN[Dpfq@qU9VB[d`I9f9C2B#41CfTR04l9G
+SB@Jf9EXS@Ld&EkN2bCL[e-2CjUab-6&5HM*q50hX6+'6Qcam,RC2Mj!!K50$CC'
+&ZYRBC5Hf("VB'#Ui'CU)1Pe9P)j%E[(RhCeYEB90A(mhqE)dcIe6(MmUId&X3A'
+bGY%c3"fe"T192J(j&c0IS[R@kDdUV,56fVpUVR-&96Q4U*l-qe@H62D[cS@Xm@&
+YZpKlE%f2r1$XU[kBq@rKDhMbRk6M#IXV$+X6qfN3Fc830PUV+UY)I@4r0q4b216
+0D5fS-R*MGK*LBN!j-6*@XrQEDIc*rR0cKC6XBPqa["dPGj8pQ+QHlD42G09q92C
+reDl5p#ZeA3X04dE$c)Hlrr`q,i&PpEZ*h[-52pV$jf5XmI$YCMMC'HND@abFpkI
+Y9mY2(`1b&A2G,Ak@FiXVe&6(r4r4NH6(eCLZl2dlLGd&V'`1"j'GR,I2@@JR2Cp
+5`QB1TUB2K5)13V)1!VS0rX-,+C!!DL[P&e(p@)ZAqV[YM)Jj'TRX(6F,KHplRZl
+MF8-2"9-pN!#4pf8f$BfI-EBrqbplhBCUq6'!Vjl@9X-`ck'YKkB!kf&XUqH!2cl
+'$l(9IbrIM6m0iIPmU&R2eihFamKrG'f%cAe6&K"p@ZKDDXLJlS3$V)HPVCl9edp
+UkqFf0PKH0Vlb4@4G0AIhdYClYjBrGU-TriMIXFcrpQ(pIeaKIrm+mNfmE6A(rH"
+S2$pq9p12+ri4jfH@[RIC#4Q*l"(C&aI1Lkml)Tl"H%91IFKGaMB'eX)Ilq9#p#T
+)XMrVrp@Q4+c2eC[Mb[2XClVV+PJdAE3+,m-(hV'aa&ABBZTVXEM+h'c0AMB0ql@
+VlU,Ik[(aC5Vb-6TGCb-T#rclI-S1#!Gh2d[-qDlR[Ff9G)dPATI(RX4`F486f4`
+AY9P4kYG66fidYK`ClKk#bpQ&G6((pl%mIf)9lHB2N9[bFMpIfiI4lc%mIci9ajd
++PfeKVjleDQHeFLHcpC2C'[dmp5kbcV,D,q#SRIrr8FldFThAII6pffRHqZiQ'jI
+&Pple-[ql%l$PQZpZYleHkXZA,iQl0Gl#p26@h*LGRfIAjQIk["BbGd2JeY[UCA"
+@qMPHhY['PFcEIKPFq!QJ,Dp,DrhrPF8(Bf["[1A0EQ2U[mXU",8I8*)jF6Eh8Ee
+ZA%hB"mZJVEZI!1Xq'D[,jJ-hEb,65ceE`DqHb0C2Cq42DZTR[9TE$A6h"fePV1K
+ap9dH2XBA3lc%mMmrb49,q`[)GcS12V1KCHE#fh"X*l"9cXffA"XYC#rY1jZYMk[
+RZ4aE69Ebk$eVQ0jYc%fJ"h-6EA8rlA,RrDjNl5I$KC60aTbAkE9mE6cfbG90edp
+JV$6`YYl9Pj-+Pmk&FH,$ZCMNDLmKp(l@hIh4'2jhqQ4bBKV(XqIcCfPZSfU`0[R
+ChZmpbG"1r@p6N6-'fUB0*)JqT@3G6A3I--3fQDK2LY2@r+a#bheIGNc[IA%6$@r
+&PjhUCI2BRB@j@RRGleHGXVHAa0`9Ti6EbNe+r0UqCTjr9b9fR-4bTrTVR6d'cpV
+Pq63Hhje"AH,%VjMiG4H42jrDfr`rVqh%rRhQ*Zr2S+lcU$fpYFkqIf9T2k4dEA'
+RRrEeR0YT6+@mIc2QC(CMq*M&h@deCZ)[JHj4C[K9P$$+dr80+53fF(a6+Qk+MA'
+Gpp14jIqEZ9N!(Gb[)aYKjPM)beITI`ih9dYE1Gh@6QHN6QNUCc6F#ZlA46hMC(c
+kl$k#HmE2q4@j(26hMD[-eQ5dF,`GRL+c+H02H$l@)UmCq'&PZ,MHkU+UUJAl'pV
+8e96!l,'hqUUUL"MFEdNLUqM'c'#pLXmEbB'Ia(T9[MDb"S-MjPEiqNJD62q$@k6
+amEUp9PUl4H$MG969XjdpG1B+YR-`b1I-`@VVm2)XHhLmL9UVZA!1UZrmm[Fq*HX
+Yq2YGMc@)j0"e()Lh[)LG4D!(%kH62iJ!j-lhpYKC6p&$Y2dibCl'CbP,Z-e682L
+I"VpY`,cAl6JDrcH$me,Z0A`2Ykr9dRDd1USm0Z09[X25Er@Gh58P(TjRcGTq2Fq
+*mlN3edeL,5&dE1,G@F2qB"fCbKcr6@Nrdh*RF!4$Xhr4$TISC%*YKdrCjfeRH[j
+%@h`0PRCcp@HVY"1H2kPC-r@N61(UCR[rJQI(TjRBdjqA'%TUEDAP*[U5Mh(QdP$
+Y1"rASF,Aq*fp03k#Ph(iY2jY,Tr"kqPdq@a0,0peP+@E[mc-p[U*ZCQFM58[VE1
+SdAdXLSqbZdQX2cCrTZC3a0[`VRjrAZGa'pDQjNrdh0QX2I1erRbYTH5H2+pKEaX
+6bSRHFfJePVH8'QYD$4@hc@mE2f[fk$2bHeLClNiD0RUUDPHRe%l+bZ#NfrVE2Fq
+apA8INXFPh8lrYqDTprHF2IF(6p9Vm*3dfrer"T0I9m(AdR"ep(5d2U8h3i8Ylf[
+e(%SI#i[3i%YrMAiri+(!9(3hd$(Dk"NpM9kf"SG4@p$4efaJl2,f(k)2[HC!XmA
+Cp'd[*r(6AHbq3YHIDmqeQXI9612UG2ee63p,8qK!a2U9@eJC,dkc4304kPIQ)2%
+[hmV'2jhqe8$MaPfPcH5$pA*6l&Iq2V20Kp#HJ8ZBePKU)'"Vr-JC'Yr*MG*@4GP
+9aI9N3rEUZKaSAD3VLSk((SEb&r2pqfXrfEDcp#&GHp#ZDAM`ZRid2Tq0#krM6f*
+XCl+9m,+9mpR+fFd[A5*l@BHSRYRhqXXG9)ifYLIBU+$rH+ZkQf[12Ce(l2rZS[R
+5j#9cReCUjr0JH6+G0T,[bTrp9T2k[NcqINd'4YTr)QjIE42XcqPXp"bU(S(L,d0
+FERe[2pH$"ZQfXrNT-r-@NrTGhaqhL5Z)L5q,RpYD6ZXj-lT3A"ffRmG3CrNd'N0
+iLZZ*lSA'[k&cVZKFlASAAQr*3HYdD$EEDjfZVJDl96HZe2QkrS6(UefCpAKH&kX
+rL-9SC1ScmE%aq[S,j(rE6-V*d(qqqUB13Xjl"FDKKqj`V$jrAX0a&hG0aTl"@Cc
+SBIpq0Lhl2m@HkQ(ZkQ&l8L&59N,fDb&ZUf(XDlS9m$pN,4f-2[l,S9F$iS@'XiI
+eZ4d+LAl6A5q*f0VVCI0DLhk'Mj@aQYCPlRp%eqcc*IhmAcHMm9jq$VIp5Q1lQrr
+G[r2G!m[J+UAkDSPqSSl6d*I"qTbGV,p[kGYSTI4qTFCLDhR0S24U*QiAIMkrZ2Q
+aecfH`j8[Sq90H&EJ(1jLfRA30Q#K5UXS1h@qj-@e"Q6QpYjhb191rL3,j(+QY6F
+6@SZCIBA-[qLSqpd&"f%)1khQ5p*bjVf3!!qA0IUZTd!d$A-rXJ$G!ea3D#h@f!!
+HUZ*d!h30XEQD!0!h,PGc8ImG9IFpSB(HC[rHDZple(`fXAPkh2H40DbdaqJRFr*
+pZJlZepZ0JEAGaZQNdd@IbZhTEAhGI3CcJ9e[%k@dRpCmApqhZ+$bm,LlAr["8'X
+q+JeYh6beZI80B4mjIQB1b&12'STV3E'6#qYb*l,mHFdI'R-rBcdaB6fEVS@EVHK
+@4G*A3Y,AcQXX)(kDMmI@3YEqQ9qR39XA39d2a19#fFMLc2jFE5@8Il[9[%'lf,i
+-$SHYaji`Li1bR-9BcQ8X$#@3!(6fLVB4i20C@cfcV2lC+[eYjm9CrICem+@Uk@m
+XS-H2jIf1VcfKcrhe!G&jA-N90AEl23l1GlHTlZ&eeT2CI)eF$q0EpbHdI'RTZXR
+[DV1,S,!#BZXV1,SUhS9Y&j0E2HEAM0$r9A3YYBM6#fdTepK#fRkF,MDb&YUk,S!
+-V2lk@`KED4aCZX)`R1"C9%lpPb-E[HcFT'J@f'q(DD$D4UkdlqJkIQ6q3a(*LHe
+DmIX,UIJ5BfbYH2P,LIQED0TEDRcG[3H(bSQJj8E@@mrXlQJqp*S0RFkfmk@Rqp+
+DbjS0R*TjQfTEcPc[lZA8GjfUlSQ&l6kTMZj1IS1RcI#aIZilKElkBIBlMYlrlGr
+l[YH"f[aqaEpaLTA`IepVEiVr0Z"2l*A`I534k9[Lqcr$k16[XVpI2CrYF*dhrf$
+ZDM[*ae"[rXarebX)l*h4H(9ikJ6ijA`IBlEIpYhAAqaeq-h(D9r)l(FB[hF9`TL
+deFlfhFkfqkp3$MqN[RBr$e&pKGCI1PdZN!!-jRr[f2*mIb2,e2Nk6bI)mc#q&0H
+$rlJG(q,ar*m[5kM4kEb*rb-,iAND(#kRb0EUIrEpT2aHAUG*q(4q4ihQkRb2pAc
+qPm[Rbr0mhc!!!)#AQ*UCUBL*UiQ)QCQBQCQUQTLCQ)L)L+UDL*Q(L)GRUTQSQ)L
+)KhHTUTLCL)L(H+QUQ*L)QCGRUCUSLCL)KfHUUkLCQ)LACUUEQ)QBL)GRUBQSQCL
+)KhHCH)H)L(GiH)KRGRGhGRGiKhKhGhKiGiLCc)LCUCQVZlZlZ+QSL)QCZb!!!54
+'9fLU#TQCS*UJ#TQC!!#l#JUJS!!*S!S!!+X!YN!N*'9fGfKSPiKiGiLCHBLBQB"
+iS!LBH*Q*#TLTU3QUS!N)UR#U#CUA#!QUQTU!#D#D#T!!N!#TQTLALU#DS+#T#!V
+SCr)CI,DIc[bbhFillf1lRc[3drRqKTqjdRl21R1jQ-VihKCEa2bH-i+rJb@5ahh
+ZqarhZqm$*il(Bl)G4YZSkMrr+Ar!p4Ir'Q%#EEh2#`28G6-CE-rAQ,IqmPjhjHa
+k%Pq,pq$k8PpbPq,kHirjr"3h'+jH2SH,hp$YmrHq"5IbNk(pf4SG&Y,[*8RL5R@
+h(2hP$KYk!G*IYp&r[[S[2hmAipr&jh!SkhJaBp2&he2&TUL,lP4&fp64qP`SZXU
+S[lT&IC9mTrDYjmD,q+"KDb"LUZ"NSh2VD$rk"Rq*!mhK`099FqaS0pBd(Zf0"XV
+#LmfZTDDQV0pr,K8pj6eG,`2ai$ampQFVPrVbdEiZ2*BbPl'fUYVE4E+eKh[(Krf
+id2T@N5rfI0LGVCG'hpr'Dkiq#aLBZaLBUaLC0S6)LGY)"f*I`$XiI6Y%CKc)YSH
+kj%2eEMNhI+ZBG4b)I+YBI4id6Y,5*KE1*LE)0qMF8HTZDVp@BZU2b)RQeh0L60G
+%PUj!fJViNYAa*5`C%0JSN!#)5'rpE1,I@8D4'VC+&qMXE!D0Y`FTJ2ibNYPFcp'
+AXU,r5[i1rJBZclZ05qplR&S['p2Kd'hdR#S,M19-1r5G4$`hDF',QZ$$eA!KkrI
+`pc[SG264E$HaE[HaIklb,rMH82f+@Kl(GmM382GlZhc26Z-a5h'BT2$p@jb0,GB
+LNrpaIAG2i[MTILT2rCEU-&5H,r2*h15T-I5d)"iEH8Q%hY#!Gqhd-Z3FlJ3lMJP
+aH(69-2B9826F5&SSd,[kb&f&E2h9I2qlC8'FY+AF@h$ZZ$bk@[TIFm2!j(q[L5c
++Ch-PMF&f0h'X1(jYR5CrM81CYBQ5YSQ&YiR@h%2TA-2jlQ,bVU(bVU,8FQ(aD(9
+@9$VV,TANAAmU,r(-mVhjVc,hi+kKUHGA80&@d06AFfKSUlTAY(RlfUmLKhGIdZ9
+4kVP4G8`'rP3kq3Mh8f5"[-Xk(2fP$QH03jMMd1*!1eSHdj%AT@m@pYk1TYkZ[M@
+NP0IrX(EI&FlD,PErc[@bbZYEcQr$8EbUTUQMlAK4FM`SZAi8A19-A5FfTLkIKG+
+aP2IcmL8fPP+He3DcI)&Xk$6fA5Ti(&S02Cd'MXk$1@9"NE2QeYR3BP"Rb!k%I0S
+0C`C6cSXIJ4EMJG+dP09CbfUXj6Af3$1JRAb*RAb*ED@-cVl'EepK0l5[RGT@d(U
+eG,`Gl9ElEB+NkFPIpY1CDrrVXXTiE&rQ9'mi3[hrK4F4`SXR`SZ@UBZF&rbZ&dV
+!Al'8pU,X+LJeP0+Ica02!3*m#4p()BZfA0VE+Ja,!c4fA1S02)q1JePP3rqjri[
+NSIrFPm9,bkDiqU$#Jr[feAPm$r'8r-m[B2i[BB[V[rU@XV1e!1dhZVifkjY(mqk
+ie"rP4b0jdV48+a0P3CLbS-c)S-p)S2,XD$8ep&VDqJh&E48pAq#GXH*q1GjA#m1
+EkA!dNeJ-"eQ`Mm6HBbES2#XYjA8[MCKB&2c+pecEHKaN2YrpZiaGY`rbBQhSIbC
+p!MJ4Ed1CYk(mrFpKGG*m"VmQ5Yk(0FLNaQ-jH-rPEd1,Z)NT5prQIX@(FGjLe#p
+ap0cBeP[`rciQkq5Kr2Rf!VX+3,NVUNJBb*,IA!kLPcfDqcNINm$`-adXYCIA!T-
+E0Bfqq,QZUFX"A39cS[U9mA8edAcU2*9p8!H4X+V%f&(NE',NV'(Q,+DceR!m[M3
+-lD`*2N31XZFl23jAPAHfjXYJIefAjI&9ef2`H&p2EbNhCd'-aFYp1"PX$NUq(Rk
+q$UUqAepI,l5ZPpe@bp4(JFUXJI29`2RM5r5iXae[%PF6`jA*98VQDQB!22e%ajP
+2+krJbZdi%VZYp-!(88da)hZKNEbHU+@*88(AE5JlMDDcYEcCBqKeqLc0jXFY3kV
+[p9Gl$-d1I`e,3jme)TEYXPFdZrSFR`+(lp"Y143E@fS0eE8'lYD#Sip"CFDJjA'
+S,fdS2RY+$qeR3G+bLhq4&`XL,fYM&a0M&a9K&b9IdUfMcpG4jQYTBp(,G[J)'!Q
+I1MddDMPT6kHSffKPlre(8q&+XY#Vj&0G8YjcD(q1I[2NB#Y#YIbZE&dhdjQ[P-c
+B5Rj-6AbQIVTE2edTj%AaYr&bZrk8HCmbXQmr@6IQ9FljR&S2-iG,[k,KGY,BZEc
+Yp2ELqmrH5XapVGdRND*9Vf-P!Ki(eX(BaT%Pfm@(JX&9fmD5`2AH*q#*cZdZ[`4
+,M%A11LA(DA@1L4m4GBq*6)&fq4ZZINH9hm6a2!LDE-AA2cehi%60jkkb%60qAFj
+#*P06FC!!LH4*a-0UEVRkkfb-60kkeb86+E1e!VCmI*4-hZH-J@dbF6b-R$TUHjj
+mD(X+Hk!E@4SQEM3p09a-h9`p&9a-T@3mh9a2)JBLYJBLkJBL2!b0e!b0B`'Ui'B
+ZB'BUd'CL0!c&e!ce0@a-hAHV!ceecklA`2,ZB(Pkb[LCZ`eX$blVRf(U306G306
+Ql'*Ql(dS'ZZB'capL3[Xm0)LCZ4rR!h0e!SV+*Ql+MTlQAhGP%mDbLdpc08pR%N
+l+&BfmAfE5,p@-p'bUl'dV*U9lI!fRIaq49F[(alHPTHRq4kdlV$MfNDaieT'N@P
+T)MFLXYBaTrGG*h&AFD(+B@iQ-TLVHBbQ5YjA0j2N5ZEc)#CUfPFhRlD9bRQmH9c
+HU!69mD9mM)aELkb8@2Fj1,6AA2U,+9mL"eXL9cGA&ePc!a0J"f5V`&c0G+jZYSm
+TF`2-MbZEVk2$A8$99NVQl#M`Pe!epA+jZaSlpF`0e6A8$GlHkJ9!#91`ZS%J",)
+JEjp0G32lD+kJG)"1RQlU9kd",rP,Q9a12ZTA&BDkjpakmVj%VQF*FmqliIN5ZVZ
+ZIH82L6'bZG$XVLHpQhSI8YDcNc9(aZlXl5iJ8I-r(C8Y2iLk3AKQ'rNdZ&X*,%D
+liB@([B@PZi@bZ)9Kb)AcFHHkbdLBHbLCHaLCk[LDQYSG6(SGI@40c9d1kU,lDd-
+MGFcCd2ck[iGP5IfqLNkIppYJ[JP*+rj15lAQiZ5lA&5AEI(fdPfhE5@!qhLj,Y[
+Z8Z#hY,JY[`rTcAaEkNkHJq(IdRp[0jR"T,,eHAY+5Th9l481kM8Q[V#(+(99Y$R
+kq*QE#Ka-Jh#BI4im1mYSG2F3YPG`Y,H`X2m1ZrIJl#5S,ZPe(jA1Vc'q'eNZhMG
+Kb)eI`qeXU6VE5,dZ0&qIMaC&V&N@dALBQfSpeEF5Der)iQ-eA)UYIb+2D@e9Y,D
+MfR)LlT!!e&U!RimAPFD(miFf9$KE#NPBQKd1[N[rFq!E3D5rpb8Pdj,PpcK2VaY
+*+lEEIAqCP@Xep'AXD@pTlMA3qK63Z$`B@SUB@BUS@(iXrd+ZG[)ml6eXrXkqIe9
+I3CqaRcTKj%arfG"eYTYD14ZZ0ZD1peGVXU2Tr45Aq@kkrjVNI"+GGfZ6YrJaIAB
+V&pGfh8dQ,qei9,Ed[Dfp,p[&pGLj,k36qRVZec9Y5q*5Arb+2TkVMlQ,mqeY0h&
+N8X@ShP"R0r2j,Hd'5TU$#D+PS-p5iV%d'TpIHB@Ierl0lKjrFrXh[J6pMiZqlZG
+k2ippq#(fQ1he,@rXaHCX2fBZ6Xk$XlAC81,[[f9G,PH$MIX!(`*AUprMHbhdVf9
+0-GR[*M$dZKa2Pfr#ZDQjqQKQBNh26qKST@clMqdPeR!TDEaF"BIEPmeQ#R9lHI$
+FbAF4F$,AP(k[*LlUlLe&e&NA%AjlH,rBh,q4dV@NkfeU[q-rE9Aa81!ip$Il@,p
+0V&kGY&k3!!I)40mea&NA-@RZiZdZiZ[[)ZI[VRiH4*B@22G+[R*&M19%LFh8LHf
+PP2DqbLDUcR[eBQdLIRa0T3rKcpT5IHb9T`m6D9AG9N@cV2a4SYp9`-,akUr9FAr
+@QUk2Tlf0@FIDprEf'cm#hXIBbYaC9R8jMeU@McIfHGkf5m$-p2,fXAm('MddLap
++ae@NPr4Mj@AdGIP*Vaj(i)19Xi[J@NA[12#lqeKGjE3IZD(XSdjhNE3pr'q1Flq
+0d,H"fGaM1dNX,*AriZ(pAF@QKLa*VK`2pm$pAqIm1Vq[!rlicM685,SE6Z2Tq,E
+B,eZ[rIJqEVmEU0KGkRR5[Sqe+qKl&ejRdA@Jd19i&a-cRH8pY0GEDbq&im[h[B@
+F[i(If-eiHFM`I$e1iVXc)X)'"Q[AVU10kd(aPPhm2,IhbXjPEV3jEfrGp[h2Em[
+GEAACfLfZbcP(YIHmHMfYGie*YERa-emp*iH6k9*P-dJ6jrIbQ6k5"2IaqD!6RdZ
+ejf2q$Dmrlf'TGVcprdVEj+(l@IB#Y#ZG3hrYlfCriaGlEERpIMV#*PFarhPZE(h
+h$RmCLj58`1Ii-A88mAdkL,k94&f04mCmMRb)%F#(33$&5Ech&Kl$KG'aP,8i&1M
+A5R4VB(Cai')Ui'AM30,a)(UF1"le6,ep2,r,66R@kfjUH6[rKLfffhHF8DCR-Fr
+,G[J10qkUi8l,c*'fdi&(`DH,`+L,@e-@2`ZRC5R+N5Rcf-YmpM+G1[PZRA`2Z4F
+h@4FT(SmI@p+XJH4&`PI4(Geq1aS1G)S,Q43A&P48eT38eTdUQ"m9&V,@JdeY3H9
+E8'Lj&&iI)SXTFG+QPFc[CA3Eb9mkJ[h*k@h[0c+lV6hZbPDMbVlfC@bbR`l'9rj
+f%VrplIIGIp1#`Idp4K0Yf24N[1mrY2SN[DQ1qpZ"RF&qZbmh5-EF$J*@ElF"-$J
+*5`TZ(6F1QhY,'TDZLc9C&bh"LiQYQGI@4I'TiZ*VT6D$98aF9(P0h@4F094F6@5
+PV&l@VP2LLi$!hlL8AqZ,jdDJjf&iN!!rbS,M%m1"KDV(d&E9d%I*98$%m,[k,h+
+bLfqIUB'CU-K3E'YS0KjP4!cp2*d(T9e"V096`2-i1AS02Ad@LpAJ30I[mc3D+aS
+-hZYr!fQqc9"Qj&"P+@JbPP3Gq`'aqmSX0CdABEfJ`eT3B3e)Z03G8JET8XTQD@"
+mqhhqeJG,ElrG31RV1$XjA#S&qjXT6AkDhpQ8fQLZ2CP0VQlMh*5SbPeX8#p,(e@
+`PI1pH8j@'j2qNTrV+cZ,qRZ+$!i"!RAEZVTEfMl@qLiUqLj(Q3Xac1K@chr-(1I
+&0D15qaBH$em$@@ZfYXmUl2%brrZ@h[eB[&hf-lE&rkd8h2c@,lDq`-cJ1MBdAq,
++LqLdS[Mie&FfY&(YU+QYk,BA&&k9c4H9G8AMFQLbPj4BqpSZ`[D,UVlGc&lkA`l
+R[X&lhIGIl[Ji2Eq$K2kH$f2Yppf@pN[j8XPm'flETb96*8(8GTp2FpPMYYf'2ff
+%bP,*GKS*,U[0NVpk[`j+NZGhI5er[CE&ANYNlb8d&h+HEG5fVZ*EeEH@hI)P+Qf
+P,hMbRpZ0,G1cPlrC5q+N3-RB`0"AbqJVB1JM`jE!i$!i[&m+CqQEm6KdpA1rk`q
+cffhckP1@brpmYpbViGj`kQJPjZ8PX$YH$5f8lZl+CXm$XH*4l$LdHXUk2bUZMmD
+24j5YSmIA8YA,qE'PpA'JEAL3!$Gm1AUH&,fA#JAf!f&V4HPDd[!Q1ei%VLYr+jU
+QQ-e[CMcGj+kZPPCrVCMDqPHlQ9XY&c2GQ2lGrm@hllVrEll"ddPLqjl#PNY"*DU
+5e-Pqh*5Al[hpRc[@l2S[3Af@fl$Hhhe5[E`22fe2S1YX2YrLr$PqRPUEkjR'c-T
+-e'qhR%SXeaD,-eG"RUZJdYA3HM9dAS9P!!ITeG"XDZLf-DLfpA3Hj'S+D048h&S
+Sr&S,ML!(3FlKdQdj9$Y195HUJDKfV3Dm3Ud'fR+G&[1iG"ckULje94FqULhlK4F
+*8J(4J0f&4&lZRLiqRSqli0(hr"Lq"`)Z3hp(hZrSm2[iZ)hdA%ddAYDDLqRYX9`
+Z"[E[HIA0pc'rKqRl28G6hrhr[r6MEcprC@mPfASr$,k'2EcQ`ZCcd,LFdYa1Ckh
+R$ZTcf4Z*l,A-pieejrEFlcq`Y[LZlkYRYTXVZ,2ClN6f4Yjk6ZCl$h8pfGh2ICZ
+i868F@*U00rh%eS#DQGj1Yad6bp0L,VlZPad6mIHkD6Z-0T2!RX(R2&e&0T-TVY2
+2m2&a-cb-p5kVb9dpI['5#RZ2UPFC+l5pLF6$h[b6h[jd"GaY*(Sakr6jf&PqlUj
+U6l#20BU[QVrB6FAfGcCDU&Aqe#X2fiIMHTcBA+q6,mIqH'KI2Pq2kI3ifak((p1
+&HDAMDMS@QSKm(A@@ULkhG@-hiX$19IK`-K9q2!kZ2Pm[#cG(MI-XUA3k,V1hdhh
+X6prTifbT-$,m(dE#$f&E"cGC"ddD$Sq"AkU$jHYVYP#mcbkrf)HTmZadN!$pc8h
+24ZHPFI(3rKc0ecBQHirJ3ZGj%12U,2*3G[Z*%T!!GC9`G&(JprA3HUND@$D5Z&V
+UAAq8TFajXSr&r+mMmQ2m0$dC,l@(q,j*lrh1r&mN,SkfdMjfbe(K`[8MBq&T+hZ
+S@FVrZ`XYB4FY)Kj#bKplD3ZcY)A@FDGKf(&KmRi)Ibl6MkU,bGcap9cS[brac2(
+eF2jIIb2'##&ePT!!qcXi@(XSH3N4FYB8HFV[`3r(VFG&cNEmFHXd[M4kfXJ`06X
+Se,j@MFQb43p[!Vp*)mf$SkZ$N!#2"l+YJpAAqE#dRY3Y4U*'NKqcj%2FC+bdd2F
+rq4GcL,2pRelhQd1BZHE3rRb0e$jfG*cZ24idR#T[CXXR#pH-TcmD2"apK0%jcA,
+aZ)VkA,k6UZGkhFic-r9Q,QHJpGhZLYXl0AHSXp,r+bdXAfGIBkQ(VIHN6X[r16[
+2NR[ijfmR[YBck[q8%X$Q![1RYGbDVrM'F[cpYm'P9Mf4bRrf-iNrN!$KlkI`'bd
+H@b["mcp1@Qp([090jDQmbCbp0jXTR0p#kcIcI3i%lH!([jrNm#Iiq4i%rDcqHiF
+rRH,1jb01jHVQmY(QFK@cIC9fUJq6hZGVqlheK*aIkA[0PIDQ2Dd2XmRL9YA@4id
+H0(UV#TQD$!HKa+$aUbGm1YQr!VT[XDqEl'`QIYGjBk#Dp2H5rTlbDdqpQY(65rM
+lkDm$J6ABdmcr@TQDlL61SMHV$Qk1clIZDA4q@UlmGQ2UbpK%rG(Zir-SIQq,Qch
+r'Gq(j%#kZ(bB@-h(PD54Tj5DeZ2M3G4h9C!!Xlh9E"cZ$VS*p41IVi@BX!$Jq*!
+!p4@mk&VBrb)%G"#%)HTV+23IUaQqXif3!2-kVpGMfrDjEkmVGc'SZU(0IALrVa9
+a3jfmm'5rC#j(&YlQKceemNpqI1X"8#bGe%c9$YrVf0,qEc9FGlfCk[+h%aPlHKl
+Ak[TqVTfe$KlV`HTl+(lq-Q,rEa2[Cfhq5HB#Z"Aacf(Mc-,$lLVfN!"qrXi14p5
+YedeRI6X-c0E(5@NDfK@ffrP0rCrAC5H3!-apHATiGV[V2I@p$NERQchiFlFI)J@
+Hr*Kpj8EkGP*6@lkLh'rRl$IcIblkDkcI5rCdd#6hNZ!HATB'Pf0KUCI@kH4k%eX
+XlBkH(VFRBIVm+&1hk&jQN!$6qc(XeZVKC$H3!()Eb&hZpKGA63[mT[,mAr'rRIk
+m#GVq$1fXhVH&0kkSRGI`D#E`[#Rr6qRJe(jBf1JUTrYK5ZrjFE&fpe3qAbHE2IU
+cYhmM!9f&)&jdpjGeZqEHq$'p'FklampR2%a[eBcN3SQTZH43parRr$UZccNhR*c
+VZbP-r+D(-j5fdNVeGeTTAXmTb*l,Bkjd@0becrMZVVbFER,Rp10mblRXMbBQSZ)
+QTj-jq)"Clm-RH6fY+!Dfm+"Z`YJX%%6YEUNd(kXElYlSGY'mIp6,ZUMQGL6(DFM
+NFM6k5fj'EhpcXB%jRFFSXZ*c,GeFcQ@`GdJ5Hb*&Pf40TEMR6fS)B3)d)3K%m[N
+8QDr9MIF[BdhjbYrqmAm,heZ`Z2LdXp`1"H6RHAFjPVLFdG[1HME6RXm#pmfHh'Y
+jHPL@'PjRS416RIKrPNIKrK3mVrb*mr1`[`hA1q(r5KqE%mcBG(QHPdHAkNp6kLq
+e8pXYabS-jkR)R0)+Ge1GRbB-jZ04m9a*CRPEE@qHT'bAKG4M1$UU#qbfqUGpPG4
+6llZpj0mVX+DE[X"T+ULp6K8'bUCrJe%lB9%lBdmlbH$cChjZ"cChjrNhdldZE66
+[5hdldGrd1*3CILcqGiP"RH*2kAKcqSiFlVDUIe2#RpG8cqdU*hG8ml8m#Ej1%TT
+hNiqPRHKiHSUr4TSqTLqFUb2MR[1LD$MFfUX+Ar2pIfIef-Rpr`ZRM,1,IV'XfpG
+kQBPj10KjI[BrH6A@9f'Qi@LlcJf2hI0KE6C@HZKdqTY28KmRc10k-2jFrar3Kp$
+-fZRLr,RVA6mk,d2`jQe"(mq)iqSKmRpd1aeYRk[3N8%,pRCaS@8`pA"amR(QmT!
+!XlSmlB9QSXYT2@Xpa-lII(2F@*ZlIQfIFd[KIXk[`mYL-4MIVaPCUTZXeFA[2$c
+eCP-l'f(H`m2h@TqV[Hke9CqR%`XKJrGVBGqVSRiF3@iINcYcmL"HG2CLiU[IaR,
+lkPml6GAiR[BR[I[rAME$Fp[!m1"f@alZ0,iMh+rc*IdI5NCkAf2T@@BPkEp[H@H
+3!)1he&PL*l*FL0DeYPBf"kJUkbVj&KBfGEDm2%frTib`cGTj8[ArNlrMH0,h1@X
+r'Jll1@@@KE(bl$,rQaRPHKMkc-jA-qE*eXE&aI"MCA6pANINa(fr#k(iVQ9q((m
+cqr-PILQ,A3m#qd2![ClfSQVZk6`FedTlqHGjAb)&k&lcS8RmF,)mfGbA3fr!f&Y
+RmEf@QYr+Q0"bS8E,qJVTQ,qpp'-e[*rAcEIMGl5CVAAHZ,)[ijhNkPd$mfHe(Y6
+hPl+kfNpR[JR-rlecpfGR1ka'rj''S*R(frSkHBa()R-AXp66qIk+eA-GMHKLqE)
+M9deJCZRN3qdXS1)XTV,f8[RE+"TC%[TC%$8f%$C!(A`0aA5qjVB&K(Pl#2!j0C!
+!2QUi(3M5[@EkfRCAXrFj'[PIaDQ9bqQZ[8PG,Qq6TjM8C5mrK-E,$A[3`PpdqCd
+IKR[m5ABbAh*MZDHYe#qGI,%Cb*V@hXeUH90DkZQDbUaR@`p,Aci#3F2A`I5M`Y,
+B5mRA`Y0@`Y,A`-lA3p&A3maA303GN@`KBZ2!eYCMS12XBABGl@30P9iq$KV+GbN
+(#@Flhm+r@HVbXh!X0[T+Dde@@mf"HDcdG[ap4Pr-JG$6Dh@@[SjR5b[@D,hY0EH
+KQY*+pTP1"SVI631XbPaTS(CC5irC!lh(h)#phFrVJC!!`eh4j$X,Z,QZ6&cr*k0
+I%eYK2HpB6hZf-j[j'KheP-9YP+p4Y[4e+Ukb@-rqaImUQLe0446mTfdTLpT[k#a
+i%ld1"0GT[jH6hd[RGl,qA5bqYpbbe-[6q9a[3PrQlqfrC-B[VXRGG(NcfTZU58k
+l(pTb-I2Al1mI)3kh8@HBKl(F@-YfGI,BLYPX[(PXp9bfSM61YiFlVUQJeA"hZrh
+P,cDIH92jGYYG8SjP2#kM&rcaG&fdh+GY1i$Ce-r6m+EXH&-r,`TESF+"eP6!l5S
+JBHRJ5I"Pj2J`-a[jI1lq"jdlP,#GapM2pK)RF*C6[9@8lIV2A`16X10UB(bkIMq
+T+pCieYk"LkYpC+bH'ZIec'A`Pe5DVNp'mR[H[G$aCLePBr,Q)r,jr,jpP,BqbQq
+`N6pqX[9J8q`Y09,f(TFE2br2f0Yima,GGk0e5kE9V)*M-CpH,pVNl@ZeF,8HpBc
+XeVBd[VSd$A4TI@eF[U+`V&JD@2,jfY+ei'AVi"X-'[d!E!D*U3H"Y`HNl#"K`$X
+B(D@%[pQaPqX!14,3[Bh%M33[Cf9MVS8hqkmrIYTEU&b[rMCb[he4[+RHe0&rEK4
+IXm+,fI#Lpl8aFVp1kVCEL(J0pr2ejkfE!"1CmP$m1IB#Y#ZG3hhA88Vpb[VUq[f
+h)NPMTPXcp1BZZqlIm[DrSlAcqdrIfIVGRYZaTC+@`ABEf5`hDbABGV*B6&pGcme
+m2KdR1QHZMkZqbp*66rAE$GhQDT0C5dYh+BUkPX9G5KA"[k6Zpr5BEJ8YY+HVDbh
+UfXT3B'ii9(@m+MMe9,C5RpT%YrD4+I6JG-cLKd9C5eX$04jI04i%cJF*B8I9@&(
+IV'PCa5l[K`1&J+EM8AZFDLfr(TDH9[r"Q,r`CAYX"QlLLm1iSXTFdZpPI0hLiVj
+frbZef2+h8V4GC+fAk1er4fhJp[hhFGpp["ErE4qTFr#4lXpqAiN($aTeeR[VTdc
+hkQaRmp)Rr%KdqpKb+@(mfkirU`qPVclk1YeA)pV2fqaT-6QEMB8Q5bHLM5H`f8#
+rDVrcF!,LS@NrTXUr9r(fX,5qf"(fm9TSdRlB-qELVMqR6Z0M3iV-frX82Dq43iA
+8ffcLp(DFID`q95`lcH4DHQ2ET$h1rKklJ`Y66`mp8`mLZ6q&ePA1r,@cI"X*h8@
+Fl*fZZL5N5L`2RlEFhl!G[TXai4mDEE[X(i1$r,J[mI&d2KLI2bqRII6ee&h&&MC
+q928pMU(pf2SG&QE[[k6a2!T2a5G$KYIEj'Nrbb9(rp+GEaj6#mH8l@djqpSq,+C
+Qb2l0pU8mf`P0AB5Q[VqI84I)P0h(P+Q2+5+cRm1,f($Li6L8Apq*4FrLdAaR(*9
+d&c9d&a@8@qV++QMdAZ9Y"YkkJf)"ee&k&G4D5ZSXc(TGl[H,[TfLd-hSCQD`@fr
+0e9rhG*PFVP[TbZpjQmq(QlcQEckrpH`ZjE#FQ@kVNbeq[*El@'[*6r+9f(8Gjq6
++@%$'F[lFebrYj5`llUHC+dhY5ZhpU9TYKHjRRhZ6PGMlR*d(ep2Qb9rq[kHSTCI
+l$[Q8kQ,2fr$a9[52cjNR[jL(bjM1(eE0FR,p,,F6ZIZF+iVSe*!!m$J18I@,$lD
+qKBUqKBZqQXebjH@[TI3Ad[-hX[jYp!Qlf"Ulf"1mU"k[+J6pj!fYj!S16!hI*JF
+AEIGfhFd[FS%F#'K(VGejq'r4hRJplhhHpph[IGji2HH#J6[*M@FHBf('!1BfpT-
+8eQ!Fa(-5dL9q1a!19r[B5[d9i"ppJTV0bA9eXVd+f9k-H9rY@5[,`1%[+kVNZAe
+(fq,*IlG4Y[hpBc58c(rHAhN25m(HaYl[Gr`pr5dp46d&&1lLUhr#Qlk@ZZ*[H*Q
+CRYZfl(B6IDlZPd8cNYT[[c5hQDlJH&,DR8m(`T6CHA6q&+HpTDQEi1AUC6SCEPD
++HpR)A[q1p[[*d0efA-r0SIqDAiHE5IqiNq%MmHH@KqRVV19rbN9eMaD@QqbU"rK
+2X"X1EbEfVN[0N[jiL5rRRT+&JX&CmRfri81)cfHiqTeX2Fl2C@(Ucm2-8mD(KBd
+2VDLVKiAD9N2#kq2$a2QeN!$bIL8H4MlITeX18lC!NH(,qr!c&EC9X20!C,GV@S%
+KjV&!i!Q6c8H(NY!'[Q9N2&DUXKiRD%'dpA$qc@3rXdpD4,U0RXl,@kf(mfHce[k
+rqG$$TF&9bAlFa*Icb-PYC+$h(`FQeZl(E8h@UVRmHArkbh!jYMDlfqT2q-4m2a`
+m686p"2kQRT6[1kVpdrRZ"Vjr2EqIqc[Tr28[4TTr2EcR6q4hdrp[-8drQ0k"8lN
+Gl2jLQR36a$d*8c3DIbqpRm[[jd'-l[Cq6i%rfQpRr,hNrKkHGl6H6ZbTCr$e%lp
+RH6["h0,1f'jTC[jGRldEc0I"lh8qc@k6@`Y*RXl)dfXKf(ED(YU'GlMMjMiHG%r
+YIEfeqU(,c[r9,GApRjRjMSjINaT+&kf#fP$6aiRQ@%6)fFppRM`[QYS94b)HdZ)
+HUZSHIZiZ5j0(fYj&`[+SU6DlZphG*46pla-2`q&mFhbq"`q&qkNXrh8R#p@qh9*
+4He5EZT[+1rhNAYH64iRNKY$ceh&ceh$mZkKkfkKE1iKF%!lH&Gfm(q[)R2XFM3p
+PDcRH@ZKm$Mk(aZ2,kD0,h0Ahm$UZ0,hl0eF#YUr!JB5dJBE0eF[69H3JBDbJBE4
+9N!!fpAPS''N3-0TUb"X+[,bq%NBcXIfib($eeMBf(Y@&MBaB8AcDAqAI-lJq9k1
+8Y+'$+pPk2'QjVIeNekPE0D5ZJjD`Jq"B`HpN3HVXTZ&lh!Xp9d,28`V$@fRm[,Y
+2ipj$[2laC'Bihmm0&j@5ihT3q9q(-mEerMB'G(ME#,b[a4Eca)XM-fRT`lcb)GM
+U,6@KcCklS@HVJlMJb)2@@-,XV#&hYK"beG"dNH$kPA"plhZ0k-jfmVjPT'bAi%T
+GeiI3bNPJj,X*,l(`cdMPF1BQ-$fPPQ+hFmb*ampbrNB#Z`U*amMbk5K`(f2hlEB
+ij(Ri2$qR+F@MS*U8SqVp@UQF68bhPdmYUZ"+EVI5P46FrKd'%iQlJGEl[%fNr)k
+9"8HV`[Dp@Th0"8l+UhFcC@P()!0!d@mid-rK'mid,jH1!F,r&VSIX@fKkVN6(B0
+"UQ8f)"m+8p+UP00`j66F58dA&P-haCE+4T6+4TD"1`*r'8(Ed(Ed@"UE5MiA88X
+6(XmK19kH8ie*03ImDkcQZcN5qAX)'SVS'ZM`0T9`G9'KkUSV[IbG(S+H[SqVX)Z
+'XD6fU(fU%mGQj[BR"[T`!pRFeGh@r$2I,c*lNmZ*Bhe$m&*ZVhQdRmZ$0@HPXpr
+&SXeCEkURjD4[[TNHl4lAc,,F3DR@FID`*'qXS[B5)IIemAaim2AHVCf9VAh9(5d
+[TGqP$'jATq(bcK%VVkFh(+1%,AmQNdAChAi*l0iHjjmRFGr2BE1mM`*l#D@fjqS
+YFM#jfbif5KA'iY1I`E1"ePP!l13!CNCjmGCCG&A3Xf!GI#-Vril'%C@m0)KB3!l
+)bT3ZTY*dbTmE9GAa-CdEcj)RmFMH8-,!mI'hkPrKi$8ISj5XaRrPC0Ha9dI@eP[
+(j&EE9h(X10B@NLbXl(MGr3rFPIKcI-q59Z29Y2!Mf@2cd(@GK9cASeXej9K0H(B
+`I#Xj`j!!lQa2jjr4mEf)94RV2Bp1bf-@RcpPl%1RdYTkR2YGE!qEBFE9`,$I@3R
+(L+66TkZ(l1UY,#fMh81fTGhN(,3EHKQTAXp2ai0qY*V(b)1EX*V69meRBm(29N(
+2eF,2eB$3G6'KDL0#pL0%h&l%pU*Y19%pUKp@mfN2A`FCQ['p#2lQ-qa9l('Gj8i
+k2j[p-CR0VJkrc)eKUBeMk-D3!!(kIdfATdG4q6&@AZ4DRm1+Xp[4l[2fAZp'cpf
+(8HG$hIPf@cKERC50T#fI!N3ZX,@Uq&N+q$R+f$k0C"pRJfHSKmZH,A,1PJbE,a1
+ArmbZQNZUq'HYHCp(-R+rPce2HqPFC+B`fhYmR-B5QYj59`P0b)&qYS'%Y3$PHIm
+8VrmJ8!rlS'Q2qCMirKd2aD(iY$GFcr(,rabjk[jI3[SR&2!lZVhSh[0SGcHr(3r
+"%VrKPI@TIIb,DR1PP103`CMl(UFDAlbbJH9B5rT9d$hBm[[kZAVUZ"mQqirNHjD
+rRa-ep(XFI2p$MCq([peC5r@f-eJ+kDlI!q"(M9Fe,iUDJiLALpj09@1PrpTcYjL
+"-5mVM)2qdAIbm$B`S'MSmCiGA@9N[!aFe"[me$qc08ATFEhTVjr(Y[6Q-2iQKb(
+iY$P[!ZXhSI'm63jAa0$iIMh'@d2GqRb-PSEp[q2!l%dH@-d95kRF@FLeVVNdQD(
+*0[*G$+@C@EeIS'XGl0BVYfFVS*4($f"Up6F2@l14UBZce0PkR5,LHjcpRr2(dG4
+Nl,hmG4e1+XYl4l[-fAZFf,3CkaMCk`qlld+&pQ$j2Dqe"r(L[HUmI&l'Qc0CT-V
+4brC8IPl5mSIh82mSRmSRmSQbhmLGKDhG9ml&cXD,R+Z(R+b%IdKR+f"k0FAjTIX
+l,biGT2B'9c9Y'ZHlB`C[S5raFq5YHql8cGI$bEh6BqHp20qKGjI*6(JDch14QT5
+Ar[64pp6FMm@aMmM)c&qj%RSEp`23YXRU*LrERQk1fbAXk'rE-$r,Qi'Cra6F[9b
+YMX1AXjAPD,iGp+rlk(kr"`A*jI+[Vfp[ElPAh+jI*NZZQ2Vd21P[Kb&*FDVQC'*
+FE,Pmf8RUD[p1QVp4YkrbpKECcQl59qajHhYX[1`-lq$YjAl'Qj%Ve@Xj%$25Z%V
+GKb*5@PEp[K+VDEh14+C+Baqhp+jc13d1Mdf@[00MjcM6Repcf(VGVcj,MiEi[E`
+2HVE6PXedmaArSl6EGKirIB2-GpJXeMIldXVG8XVAEb9i'mPGr[CAi*[$FVQcH2j
+3$c[GAXlK,fG`Gp1p55&BE$QDV'r,r$iY4h1#p(ZH[p$ZF(Tqj`QQlRX2fBZLXpP
+Jq&99&"CfHcUkEL`X9@3T1YKC@ZKH(A4HlV[Z`X0AGe#`PGKTrRehGcr2VHpRHG@
+iHIMeZ)RkDYa8rYiq,qc831lhNrTUb@a(!JGj66rLeNcQ0p!l,Icq'Ujh2Eb"fI"
+p@"fR"em$%8qZJB@ReX$%e(T`-98HP!bG6r#"QZ&5ee&8m2)89Ma-K4AP9ND$j3%
+j96NU,h1cTme3E'6i%YKH"PTh`kDJlhA8XcS0E5l+ERk+@RE1ERi(Dm@JmqPd[iZ
+XrM+IJl[-rpCLXUU1DmIC9F[Kp[ADQ"U0&BqP!fH2X[p*VDGRB9r1Vkk`rK"eAIf
+-Ajl@(dV@(dE@HkbfR1bj%jf9[-H"Ek([lLBbPb!D"[%PIbBqjq59mAU1`dpa1GT
+DdI`i[M8I4j%jhpV5qAq&X9I6Ml5B`pY&kI'qRMG2Md2@A(Jb@AlMp@2ZIMPIbBC
+e![plMqp`SBlfhd*%RCfa&XppP4c&p,)f(kiX,mq-Jc@Tl5arA$pM%@H1KlI,b2!
+KDI89ZDJpj'e-+AJd&EYZm`5r(EXcaDEl98hmYp68'Bhhb6[j-k`&3,*lkIbFjpr
+"4TAVebLGeq2UmCc2iih3bY6c2ik(Nmcj*liFk`&D&I(2FRIm(FEMDHcm'cQpG"e
+fKkcdlI-k(`p*bH0`EbPi'&qce&qlr[mepHBZD'dPG4T,R36RC4S2q+b$GaiA!VS
+2!VSAXem,q8,bqGA`Y6cDk&UDq&jGKd+q&U+q&VDk&XUf&Z)m,JeN(NaSA*i0K(e
+8JpImIhZ4#l'eKGjaS@9Y)AMfF,1@A3Vi1b$1aJrY`pM#dYM$cXL&q6,f8,,b)Ii
+F[C3j1bKILKEQ2#h&E#fGE#f9Gk%$Xkhd*Q&RF[leITp9"e'Ap5`p,c*V9CAf+Z2
+S[8V)qQcXH2$kljE'PUHeCmU*jNE',ZZ2@eYCCHA"k[5@%[f2ZqlA3-Vk&A0Bq[m
+HDlfVQXji&E0`Xjf0G0`jD[e8@@X2-LjUamb,QC(Q3mr)2DRCDZAe0P2CkbrEMFl
+CcfBXSArl"@-P"QFl*ArCI$&kcP`m2bi@A[BHGj825hN28AN,fH6#pklKl+lKEMM
+pr$h2'!5dm#(Y,6[iHkXr!Kl(XV,$`p2i%L6Kq9ipKNSAMDH[bF2[0M(PrXm$IaS
+'Bp'2RCU&03FCCFD(q@Pi(E-[K,h93rRj&CBePTU*V,D540IBUp"0D12S*VXDfDm
+Idkb$hPKR*V,4TVBq2A6Fel[J(-&lhC@(P`E1adX'pND5&Hb23Jr2CDH&mjl(`%K
+G'crGL,@(`3%h(hiRAH[cBR@A(1LGCF`qMGG#eLChMd1GimARCcM99`!NI5fFDdN
+i1rlbcb8elZ3XX9"p2aj%T0HKk&K!l'Zcm[SSmei'qMbrMaTV[)d$f24Vml0@Q-L
+ihVE@(qAE@AEV%PhhKI6N,M'iDha[G@mVh5"S')rK'T[am65rTP+qPRDlI61ri%c
+kI"RG(6cZFi2G619i1'Qqmi2Ic2CF([20QrfD6hZ"N!$c*[pRSqc`-4U*[bGPk1r
+bASc[LlM5ll&pCT0p+GCRGpLqccY0Lm2RGlLj21lb8NmZ`)aHAcY,+!*LmlRIkF$
+5DV&kAdGC`2,m[&qMkRl1$jQNaIUHlQq$0pAq1RQHbae2-q"KZ$0jA"m'Ec["%+C
+phIc0I[*Qhl,8F2(lk0KiSf-G@!ealH%lMlAkl,3c4p-GKcILY[`EbShYVhp"Hf[
+J6r42**eJ#GPaXK$m!"1ridQJ5(P,6RkkYJFA)`mhCFrCed$fXR$cGMcpcA`005`
+p&B5RfDL9r&+GT85[hd#iEHcq`j%YL+Fkm8rk9Y,C(Jk'r8drk!%m#F[fqRmaDrA
+#rhKmlIcqBimYRZ""jh!Rr3iaPhPlMJcrT@NYUDHAMm'If!%e%TKUU8e`$F+8fE3
+DSP-*`T6FX"YR)P2JP0cBbQhi826e-T6f%TYkU(TN%bf`B%f0I,E$K`r+U*5mVTE
+BF5(P3*VC[dZ($b&2-hPC1kLUKpE[k,GF5LP*5I`&"Nq&%f[#LHV9429hQ'qhJXM
+rAc2)c2pm[bDbrB,ZlECb8(jUZ5Pl'ZM5+ZbKc['SpPC8I4X)G6E3[,Y+6XUk(bV
+LDbA(SHrMaHPF5q*YU(+9I5j&$P)e$L,U8SFMGC1Na0eNU6*A@5SFcGC'Nc0e*dQ
+HZ`%XXPN+6bd#jqbJ60e&fpG5HC)Pp"G`p[AF2bl+"S16$f0E``5PVZ,kB%em,0(
+c@9[dmQkVH(13!%&Fb`9PVZ(kB+KCc@PVSr[f6!U0Mq(Q3,r&`mcHGr`mab[!kGc
+%eNhEd1RrG5BRNj+Ka(*c0*e[*P+(VEZ@SqPG6A@fY$ieC&[EQDa2'SFY(Lb,L$R
+l+N`pI&fYY&eeK9IfXSFefmA'@0@9%qYfI)kQFQZjqh[-EpaA`XVi[d5r8rVkRq(
+8q6e2Np6j0l9CZlX)dVQ0Pr5iJjEpP["p6mI)Jm$ZVD$dE@F1qCi('RXYCcQPN6h
+LpPB6fEl1ZRXhN!#YR[*bmHFmR1eNpiZSM6hLkfRZFM1cf8fHcZFAUBRiifTLBkV
+p5*MUce)Q'V26SF*(p1*h9Ek9$JkldU(UDrdSR8f'XLmm"1GBkb,cE(B3qE)pH,E
+fAVaDbcpH,6!*Yl6ei[p10km-")[VmIei[m,AeiZQ!64@Z`Lq6EE#,i[)p+,q1hp
+1(MVIf)H'Yr8Ki5ip5(JlM@`qTZGG1idN1keHZPFa`G0G3ZXrCG3ZcmQlJbIilZ&
+*iklKCh#A8,9A8,AA8,hVU&Ah%(r()*KJmr[,5F`H@XCcZ[4VCc(EMCh1-lHHd9G
+`pJfTRUI2M5Rh6USGaf1CraQ14SF2E8([j2LC1LjY"4Fk,cSRfX2E42Y5I)jdjpl
+`,IRD(m2Ih21PI&`29'ehCHrLphBQecb)hJ`%IGPQHRMlHBNq43hrkH,8b142H(J
+IEj20PIcprFk(mRGh)GC#hk&[1IH)+LIDa*!!RNZ2Nq*LkRLBX+ZrYrhr0KPq9-a
+0G(,ll*8e4QIFTr-p6Jr4Y*RdGR0qJ`'rGRrBi)*Y"Ri$,l$l4RqGT#q6krXFIh(
+kN!!q"cjX$qrepKD`UKSQrr(cXCf&"+Gp[2-la6APXhcjHZR1I@dPc9q2+lq0QFE
+l1qfr*QjHrA@VPq`Yr9QZmYI9QT1cS*V(phAm+DmA+a[dcF(0c@LRCV43rX6X(4F
+D$eGI!VkZDdeR"l+`JHp@3G0)2#"!eXH$TV'$N!#`JHT@`G0B3FjB30*A`G0A3Y*
+B3-[B3G&A3I8Vi'@N3I*VB2[9d$)@F(0eN!#VUf"Kq00IMM`INM`1pYTI$9Njf0A
+M1pZ*IUDbHbP09cfLpH21HPQimjZimjGe[k-0#bh,KC1pJprQlb$hIVhF(Zp[F`H
+lM5Z(UjI#(B9V*AUkbAapV"lb2!rV@6ALmD$i&G!1alQl+&i&I!pk2"d8L$PUq"k
+PG00@p,A1P[1@%(6(HFX)'@XB1QM`IC2eMN3G09`[HVi(HfF(49F'[Vi(9mD$Qid
+(qYG+3[SVXA2IBVC5Fl'YaFjhNI*cRKeQ6R2(Um92H9'a8pkAp1"Hj'8R+h0eFar
+DXllVi2I@hGiG@0IDqjraPr+pR8k$m90p@6crPGeaqkiRGFA&rqEhLi[r2q(9icZ
++Acm3ZF[lZPr[,h2FBlN5Z%!0S-JDBkUfQ2X@`$D(UVDDqKJCpLeJr4D`IrTVr&U
+!Ferm"[03*"ribh(rV"riV*clAMmLBqhhR)r[b0$pbBl(NIhYrlfmaKJ$Z1IF5Z2
+Z*A(A2ErPTIeBPXCrqbpGh(ilR'rMB0GhEJ'LrQc(he!-ap[`,Er(qYYqH(rMiq1
+4$cS2r(HYLpNFr4DL+!D9!,&m!jMUZ4+pJQkBHT!!lpb*AZVLPmR&,VYBR'Iq5pR
++l'mjfKrMhpM,i5Vm1D[dE0cZ6dfcc'af@4fAU'd[Qml@kE(`[8`hHfRj[Zk(YER
+SA2$qaJqbY2*lU&U2ajDYp,`)AfG&jHZeQUcf`fFRlQib'qi(IeF[e8LBrMhj#@`
+X[@m(&V&YP-VrL8UTAaVV3j!!Z2M3)i%!*cTR3rXkVHARF6[R2F-X#-h`VE$BaA-
+HZqjdErj@ScqDq2&bH$mEZ[TqpLX9cF9rjr6i-8A--Afqf`AhN5B$!Ii[rKk6-Bh
+qRTD6`pYr6lkPq6+)ANVXIVp#lR0'!E3CJ0R,[3k3!!0S-r!-IU-0"VTlS)IN([e
+'([Lrk,b9rIEIFbDH-&M2mB[h0aVrmI"-qEjQYpcU1bpcJE29rRaHJe2XlleSf3P
+%4B2`HMLkf`hA4q#GpAAlLYkMY0MBI"Xpcp2lYe3H&MIaBhlhG@r0a[hmEpmb8Iq
+-b@peFGai2VGT+UR@AlESpl1ChNq4bY$jr9IZ[2%[CM@h2k0jpc`@E*HDqM-FQPl
+@`NT2JI&0D1qQUDmPrlh5XAcGY+kcMbZhY*@2C5[1XHq`@-ddPK+k"UE'"MkkVVi
+''VG*,k+0!bZpVS&qV)1$VXA!lbYaQ8f&C0H6(b8$XUq"MYC9`Ii4j1"eFMAj#"e
+GNJ@ceAJ31VY09i%T#X0KP)d'`TZH"90KZ$aTh(5N,Nlh(m(MD[(&p#GahaJH$&T
+1ir'GCD6Z1jmD#"mC&J#lIa*5&`DBJ$Jld[mlREjZVJkpJ,r6pPC0DVEkDXQXhfA
+p0C@6@8lhBH[(QZ`b'XfmHCb'NP)(Mk2dccK6AE9@'XB@AVZq`rFiI[X2hb"-(0C
+6iBHE[SITAF1iYk(l&P5D5XMAh'NTI'q$'bFbUEGcTHP,h2erHaXVMIbGjc2Nd2`
+q1`&GK6iLN`Mh3Y2HTG([r$pchm)HfhGrSEJIrkbr)TY[r6Li[&i[r``-m3`39RG
+q,fFYq('ILpcfG9PVEYm'Y*lVm*rE,phAr"VpTY29pAeCfGJ`B1Kd1Km("IGMGjK
+%2pPf(0bpaSC2N41YqU,%qcE41Xj%pfI)R1pYjc[,M3q"GBhpI*MGcf#+1ekljr#
+`Gj1D#hr0"dAQD6d06TS0Yb1(NEZFePph'#XHql&%Ih1`rYPrr2Kr*MEI"m[m'0V
+1k[XG+rdar+amaTXhGj!!Q2$dp[Q*V3D@&GFLhZEDmRZjm[VHb4RhPqrjP,bfa2C
+i(rV)H0f@%j1Bf9pXG0TY[Qiq2Z-G*B6Qi55l,rVVmGh2Aik9am$`-R*jE-m294[
+ZpS[qIlA#IirpX,VQchQhG$jI*k&h%d[ejfkLCLiSHed1HYVD0f[FUU$#i$SiHpa
+[SA-6#fe$e[)LGTb)Q@j10pD0L2cXNr"Ifbp[h&0bTMe,UKP14iX(aTR1Cr2Ch3H
+2-G9iG[i@Kc&eiAFI``9,erN0e-[pmViHPbArI`iQ6mE`EE'cb2qj++qaAHeUp4V
+pEUp4d0aU0akR!p6JHaAHb!RX9hZA2ZJ*lPc@5@$M4ZkrDcp#Vrr[iIZh1&SF*1a
+jkrj$bGEPX[V-j+@fLYYa+iMr5jd%EY[h)PlLrrfb[Ih(KcR@BMKqEGp+lT*Vq%j
+eRKh(IqY@aPckjEbIVr696(ShA4ZD(-h-62A861hFpT161HMbG$kGjSI5jAFb@kr
+[bISZqKFp'ik9[dqirbrTDmr#mI(EEMBq,Dpr&TXrCq"YT(2e9McpIBC+,TYVJI)
+bH&VHIr5,MpZ!HfUmRRifDcmE*qCaFejR&bHV`&cZD#ih9"@lUJMlZJhflS+DLfe
+4QT&4Nq96r646[#dh`EEImrH8(L5Q*TT6*i$$EkJqj+CqPjr!f[2i1fpq8ep*ckM
+DeY4YGr8EAF8qfh'fi(YqjlP0l[mU2G50e[I@VkYb4lI3k@jLC+hk9[%b0a%NlQH
+bpc1CbkR2(Zp$Slc'qhe(CHe-IZd2R6hL42a82hrEYZRM2r[`4HGLX$FC+djqCXr
+!LdfJ`2Y5FAq@4LkED@'5feGcrELq*Nm6(bH5Mj2*i(#Hl&kVhBYqpkJr[le"cpa
+YZ(QYI`mRY+V0E5UbHki@DhA#bG6J0M4d'`T+$q96`H&`FRdm"j%TKGpcpl3BqQf
+fpP-c[1I[k$r+8mci*69hrR8qeq+8fP(,E5LQGTZjheErUm"j[DjU@bHHkGP&fY"
+h1fieBb5IdIAj(*`@&llXr"l,p'%pEVkAi[&R,V+m[1D(hI6[0"SI+hXaifqQ1mi
+%af("Q2Ze2FbAq2lbARIPl(S5Ai[hi2T5Ah+Ai[TlMrRm&$FBVPiqKi[Id1hcpli
+&*r+6SIhC'Kd@dZmP5H*+GEFFrH81'hS"dPqhdAqqqLRaTq2IaHG`+1Yi-@26aGp
+6aDDSLqj84G[8dITF+,V+U,qk4Af9I+IfVHI'LrLJB@XJBUVJC+0ckfJrqJCrL32
+0iF$99A2XD$I@0"lYM3E+`S[0VU@QTUcIIbi92H8pAYUq1b8*Rkp"Dc2kEHJapY5
+lb9`'+JIia'RYF[V*VRdZpYC6&@dTQ,IYY(e(GrjH$fAd5ANHIK1M*IIpEVrTklr
+lHI$cm,c-G54mPIFr-h[J81hd&jcp9bHIVl[*81LfYcck@Kr&+B@hP-6EU!FcDbf
+CYC62mH@cr(P20Y*E9@NTVl1@epR+E5bPYTC5QlXCDSXC54BI9&JdHLiP(iN$VBr
+2UiZ'V+2#4i[q8$-mARee"cUqLZ,#JYB'[i8[VkQDep4#eI!SjR!5N!!aHBqRK4*
+q(JYY'V@56SIVQV1@mDhQm2E6r@mIGaIqGe4r2Zq22pTE6H(YjE0p4M2j2*!!hNK
+[V)I)VQ5(S[VmQkmr"d[`jH9MlHpP-*H5Q'[-AP,[QbQ8ZZI[TApQqPG0[CA@Eb9
+fqhjH@Q2pHS`IRbArVbp!m[32THJp[#9lc-Nmc*2-b6c-Nr6-PYVZ`APVbXep'AX
+U,r5[i1rJBZclZ05qplR&S['p2Kd'hdR#S,M19-1r5G4$`hDF',QZ$$eA!KkrI`p
+c[SG264E$HaE[HaIklb,rMH82f+@Kl(GmM382GlZhc26Z-a5h'BT2$p@jb0,GBLN
+rpaIAG2i[MTILT2rCEU-&5H,r2*h15T-I5d)"iEH8Q%hY#!Gqhd-Vpjh!Kh("+p)
+G08`e+h%KD+0#lqXKGK@cpeAcrZf9"R,5Ph&Y`lVJmZPq,cm(cI2`Qf`RVB6prBG
+#5b-P*bAhr2`Ilq[rIJU(qee`EcHfhV99MIqGkf@bTX89%aT$'I3j+iLCLjLCHkR
+XjGcK[VqKbG$TlcZHTqecEAGrdT2FSYY[GY4d'BSk$1dG"T++Jp(Qd9"k9(dUM*m
+62e*VlC2i0VX2G3,9EAdZ&dYe+@Zep+Uf[S9@edR#fZBUZE[kVDj*"Rb!k%I0fZ`
+h16rG3A'iS1GZ1P`mRVkV0DqUbHdi3$1JRD91JfP6QYe8D$D9(Ql5RmhGF(9lVIl
+ADi$&GVkZ6[G"ehDpGIqZlAU2@iFKarYG$REL*LH4dZ4%a&[%`pa25Ga1CDjR-VG
+D(aq6MIp1SlIrh'G2GiUpc96J-9Ij'qp@4[pA)i(Qe("r9LULRc9V3E#Lq5JfjXq
+E[TEV*jX"C54ZCELM*dYc,50a-b2HQkMh*rMiZCNEHJ!cLCrFbe4ZT6MiRGC2@*k
+eA%8MlQJVGc34pe3Ejk#Ge3HlZU$h0h3HaZU$fGe3HTZk$8EZJcqkffpp[FlHNph
+EFME@`#EDZXQ5!BhVR"GThhCH$f2k-(kf#TIKm@FVXVICc3qakI*d'KmEHc(KlkB
+l(J6(9F'BkqTlRUG"cIKU0j98e64pV`SZ4i8A,m+,R+Q,T1E8aG2`ZPBbR[jq3Dd
+-Tl9"V0mJ@cS02CG+RJF@JdpR3D1cS-jC8'4XqE@fG"L8'I)$S4mfJeR"P21Laq"
+&Z1"dV58e9R,DUcP0IC!!$1JRAb*RAb*ED@-cVl'EepK0l5[RGT@d(UeG,`Gl9El
+EB+NkFPIpY6fE*)0JfaP['j%hKl@IkhMEZ,m@kSq9Zq02pTDcH(j"X'ilqH0reS1
+fXj6GeG&84jqSVCfSVT[G9rkXAZV#@iXA@92b4GJD`P4dUH8bJ#`+MJbr`#pdZ$,
+e(!QUMI`Ge63q*M*HShX8$2Icr"Ppe6`1*LDH8dbG2-ibN!"i-AI&Up2&pak#DH,
+l&2&f04&p1RLqT6aI4U)ZPU)ZCTk2YX"1iZcc8PIrLff#fe,qDdqaBGahQ,,`GI-
+HpHG(Nd1Uj-6AAN6@mUHpQpR2H[G$[ll3llPpc*CZiqQjXDbhiIjm6GI*3rRcl!9
+f&)&b9e53!$'4*Eki(88[MFC3TpiK6Pk'`[BQdq[AhN6CmU*XVfHh&l1F#qR0rbp
+$AI$h1#`8PPVLXqZAUXE-hR0SIijqmq4J+l#N#mkKp@lV,1jV2VJGp5k$MXDblGE
+paFAdalh*SCQim@Fl(+ffFQ[Np1dd%elPA,Rl@k1ZPr'VjIp-MZC,dAp1RjE93lM
+#X1[Pr$X)2Cedr&bHkqV*l@2YD2)aSHFUi@RVHqkRUVL0pF[&aXTGmfKr9Rl[j'!
+VX+3,cU(cEQXNA-Eki'#TGhEB()rem5@1SC'q+jNXEJZaZieK`r0Xk62mDKc0V%b
+9Y%`Y[%kfiKp+jKr2FaH9G3q9G4DMN`q,3kUbSGGCG+mLkrP4IijRPHr0HCHr"A8
+06A80&rLqX1$bV'Uc0p4rRa0l9H43lX&+lTAY(je$YE#KfPJ`'X3jfR*LlVN`pd!
+eh&U,U,))H)NYiS"QT$KE@Ka2'T-9CdQ-lH$JBhBmH5a[AIAi2Ypab&YQrQEZXmb
+JapmEV2#a8Vlf)dplPpCSG[5lfpP-9I5QBjKZXik@RrT[ZfS2pElYU+q[U,YmA!`
+(Ej+2[+f&,Bc+ehi)[Kef1SqrVXI&apIMk2$9rIa3%Sm*Aq"&`PGN+,RemR3!*4F
+k[jq[iN$4E6K`-hZUU"jdTe[#!A#e-$4EfJf&G+C+R!l-m%"Fr`)'Lhp&Qkk8e@q
+JD,Jd@2Vj6Add$48p&KUq8fQpJD+SSX*A5P45`0&`Yh!d99Y3%h8$4F2D!*ZB'Ei
+ZbJD,Lqp!d8Ef3%pf"SU[f!%pb"Qiq`JD+2r5"jd$-iD[jpGrT!mL"1i(cS(Uer2
+N4I)PpaA64cMHp(Lqc'TV'CiA,lqUiGE+F,rEaH&5r$EV`bH(S[Sr6FH$K[dIGk2
+8pEe2@p6pRUHdkRY1Tl2UF2e2Hp6N1Tb(8q"e19kR+p6iI8q,e(h++5LqIJpG%q@
+XRYaAcak0*1dRZcim2jED&Bfm,Fh*bq`r,j-2-mQ(NVb,L,f(KEfJSDMGF[Dd2+e
+r`l+NqI9r$m'Jq,i$T4mqP`@hfhAqrh9,erp0Yer%m+PkrH8Z#hR0!IkC,!BZ5[m
+Tm@qT2TcAaHl5Ikk$iIHT,l9m[FdNMDhflSGh8AX@rhNA%J(bBZCZS[Ph-A9@mAC
+mL,6fX2jZ0%qcCa*142D@[RYa@6hcDk5aRRiAKrSTIre`j--Pl"+2fC,T5Ar2VIE
+rIpcprh2hrFmrZI2lRcqjr4php(hIdIGr,hAjHkr,hIFplJT+UTF,B5@)eh``X2H
+`Y,G`YPF3V$N3[QimpePT%`pP%bpM%ceI%e0E3kQ23kqXLEQVSGe8AfeSC'kjQcS
+5BGP5IfqLNkIppYJ[JP*+rj15lAQiZ5lA&5AEI(fdPfhE5@!qhLj,Y[Z8Z#hT2r$
+*Khe*dp"m1rT2lHEc1$5@AUm[D8P6ZVfLSGe'T0I@%181UVD(2em6-f&$LC%6#fF
+2SmH(H@d1RZ)4m*p,H`X2m1ZrIJl#5S,[EI(FXQ2p2dH4b-&fIIGMi2BISkqKqRV
+VV[ElaY$lZM[-pSG(lYc,GhF5hKfdcj9V,DHflEqR8Ge0pG44-MVV@GNl1Ge&K1l
+LYRH6@6[4iX,Xq($Nq&$cY4$m[J`pG[iZZhdAD8d1R0GfPLb0eaYV&qIAfZbSqPU
+lAi0"EI"QZ4m%TehDj1h+aVIqP*LrYH&5fp,fhAGY*Fd#2Z8[)TFAehDbRAB$UU3
+!lrS,@Pd&Vle(rVeP(HqVaYT4f@kXk,VE1Jl@43C)!l'JcpI3DQZS0I(S0c@8&M'
+RqMa)ID982,e-,8F%qiU&dGGF8pl5f&,bVTNccAdD$NcAj[LLiEQ99qjPAYqAj1Y
+Q+h8q"bj5VjF$YHC!b2aG[ir8BIr9jC-mXQIhC0FAE*Fr2p%eF5rKr&"l2Q6p$8l
+UqkHe[YV58mD*GeFprHYlkrG5mXCH@-[[Bc[-EH20"Mc3Bmd'20"Mlk$2@rPbPMY
+bZLrlr65[RfYm"cGpl[[qV+C20CVY[-h0"VGe3HaZk$BlXl+haQrJYr4!MJ3J3'+
+)lD&V2lHMk04NrLRpCm(4i%TpRIbQ(hdTNGl+ChH5QSq#8pRhj6J88YGlU@k(Z3F
+,VDkLXIHYD$rpkhVAVLPA[VfLZ2LmeS2Qfp0lRZHh`0VVkI9l5Sd'kU-eZUR0HrQ
+DR*qqG`K!MJ3`)"MLd'`SqM8L[X+6Sdq6rqRp&5cqEhXlP+DI`frRF*`GAckMcHG
+`[0hh$mhBmA9jDVfF,39AU`HPa2@fPma6r6rhj&9h'`j-aT!!j-ZhqM[H0ideAD1
+bcdekHfQ[+fm[ihZbrHELAl$FbrhD,ZHTc$bUpr09qfLFYLjqIrZDiVpXZ2kXC+5
+ej[DbQTU@ZS09B6Z[XCRD@-YY*%Yr2-b*6qCfkN#1"$!J'2JLkcKG'4+F@(V+VSf
+%Trc$cI&Kj5VKBqXKi5YKAk[RHGBcGaC6IZ@NhkA(RFKEE1HPU5Gd2cmEeT(-5K,
+H6rIp-M3m(P40IbHNjP'fA+-SdjlYpSGrc-Erhe(h2Jh[[b2ISYV-k[0D$YYhIr9
+lEJd@fi@J[Hfpci0Y8bPr`'`hZfi-YLX"j@qffrP0"J-T`2EhXYUm"f&2YYj+EZr
+mrKEEhjDb[pE`pY4bRpZefmEEEUA[rDkHXffiJC1rk+ZfhZ5qJ[rIf'frT!p@ri5
+4lHaXYYk9RYYCaYYSZ2Y['YGYhpYYXIElE#A(ZA'hZ[EZpYH81Z-V2mSRmFPHG&d
+%mREA@hY2TPmA,I[TI8q'rp4e2KIK@p[cH4c)dPUj,qH)N[jjk5SHid-aMCcl0G4
+p'`SlbaSkH44dpP4r"$UC%2K@-1bX1E$[3%[[Uch(Sr1KheH"d1cVd%fGK$XV&%J
+9EX!l+(YE1(kYT$Qq0$PV@(JFCpHKlM'br'ppN5Icb-PY*+&h(aFLjYlRfrbI&ep
+Kh1Qr9QHRPie"i9G3H&a0p5`1fPVp8e(TF5Sp+Se@NP[PpRbUHEm2aUS"1$-kI`1
+%!R!QG[f95!QrQC&4-b0p-mURQH96623TjRSEkAkbRPqXTTVXZ$0GP[ISV*[4eNh
+f8HCcNHCl'YPY(@bhfmY@bfFVCElN,(m#&Mpl#r(`)Aipl%mZhSFrb+60@e,F8YY
+[H4[H0`10`,+SXUL[UV#UVH,@m@VM4idC!MS)U`8Mm1[iGH%PN!"CaJdBH8QDj&$
+RlH*jGacBRPq[Bc[G@1UJDMH`04r((f-hKV(c1IBc12XFr0D6Hc@NpUDdG00D2hD
+kCbYG-pA@c1@VCRUf-RfDZCceA-i@0,HC'PX6aCE9F@@b(B98YkJ#CA[kLCpJ"2'
+cQqQrF!6aY6Z+R,qV1q9389E38@XhR!iNTfdhr6J8H$i&&EEELl0PNfKr[09NYih
+*Qm2G6r@h'lSIaEUNb@lZ*rY,UE`r*,GT2lpA`lcKe0",cFT,B(Dm'PXThGf8cCi
+(Bm5Mf(&SpC9dIP9G(idHMbPE4iqZTDZAmf0,kZ0!f[%JE[Kbp6`THbi8#q`'`YD
+,dV@Pi%af[!PF9[jA08daQYl-HE[*A9dXV2pE-EAdVhFbYPSZClXarE[rLfrIGIl
+IIB1QNXAh2B8XPS*,95@TN[fj+5rGqrXqGkhCp&k#qbfhBEfqqU9lH"jp,Y[rbp2
+[hmcp1AX*Mq[,k0p3e&p%XHA%X1C2AI`cRpIKd2dI&SIlbA8p4f2fH6(Yp,"r['Q
+VL2"fpG"p1YJkLYJqA(JrRa-H&Q+f&R+k&j9I2FH6ZUZfX,50Pl,D3Y9'KHA@3Xa
+(2FP#Nkq&Kl#&fPK#qcBc[4XG4q,Y*!#@1YUYGTX4BDh(3r*l,6BLZlV5iq&q2)D
+,1eRHD2$cZ3mV)kh-F+26edA[2hd[Yrrh'2QD(Nhd6GIAY19%h0l%h&p2F'qR+rP
+cPGc0$GI&h2Ai+5`m5&+plk0V,rBid$)@8$1@-ePV#&PUq(N+lQaC1YKjHZJjf[P
+p,bqG26AFB'&DG9#h@bX)[@9m2$eX16VB@GM`Y,@3!,89F284SHYiX2@kErZ(XJ%
+edlBM$UG0L+rlZPad2aHpddR@iE5H"#lV1H,U+E5C6ADHIUT5(Rkc28ZkjV'6,r6
+PER"GI+rhq'FU19`r3lfkmE3jA4fqHd2f2Gim[f('PqrXTVaT%[j9PfrVp4fIP[+
+)2pSK'pcR*XllmIdq$ID(`VfK`Pj95X5rb[SiM6mNll'QiIADDfT0CEa2EZIbb9C
+qrXlH5lhdILPp$F@mjYlQFp1iR04F6RPfmjqI%fmpQ,LHcPc2H9GHIfr1mrXED5k
+kFY-[Hl5He9KGa1cZBQ(2@aF6fGYjl5mL*TED*U,@*U00pq*V3%e1Ql6Nkh(a2,d
+f4Z[ZkA(a2aplTX[FBE5C#H`HFmA@P%pRTjrMBZ*Rq4Rie$mE+*j6kI#j-ahr+R1
+Xj-r3k$GAA6fYeYD62@2*R1Xj8aMqSqhNC+FlRVp,1I(AFZ9lhP5Z@j1Kb&h2C#k
+LGlFmfK`krGkFbpe-Cf5iNR*6(AIA19@Aj@dR[-X,U*fG`ZZ4PlHHc[)RKHdYMbC
+hSmNS(H!*bGE`bZqleZ1LH+8(Z5JmpMLJr)Gd(YkHjSHarI5dRb-B-ep1Bj%p4AH
+APFTYlH"IVD"K,E'BrMmf"Mq0cim$rb2!jpA+hk0+iEEh1@Q*Zpmq5rFmXMIqXMU
+IkVcjjElr6aYM&hA(VDfXX[,JpAT,#Al(hIGVS'9p#VQXIAq20Gl9c@Fm#YQi@Fl
+'ZQiFYAkU,,@(Q4FeBqC&c-Mc)HINDU$jGPUjI8f8pRV,pZ0cYR2CLbKIrX&Bb8'
+CcXPIpPm-AV1A$`r,KCHpKjhP3p,H3p4H3[Cj-,hVZ'F$fiirI`pcaJ%Y2!Kl5dl
+q(ZV2`)Hal+b`m26q")NiIPH2BC+&ifRVmR$l`qh(l2!hmD"Q24MjfDK68('@A'K
+rPTG4mUrcR%rMkH0XU6!br"p'`JpK@`Fh@3G0'Jk2J9iVkfZf8,c2,VrBKkRbl(5
+3!2h06Fp'jk9amG$q(-hA0LClMq"#jhN3iqSXmP"fqiN5N!"ePA"d8H$hpG"kU4T
+B0T+i@kR[ciHlT2-ZiRlTlblZHmLHcar-2)SiF'UlH05rjr-b1MCdMc(UAI4ZU(2
+h86bcrG162HMH6RUAQKpMPD(Bh[FbAGd2E`+r5520Jk1VJj!!M`HbVB29erQ`Y*l
+8,8DL4T)IXq4$h'5XY0$h2rNAFiLcrCpHpjY$Q#b2mq4ZSI1cS[A(SmD6K8hXf@6
+KH['5pidH$Ml#D&kDjH0a&I5qPmk4-@)R+d1bj-6c2VHN68FN4*cdq9SIB[XEb1S
+`A5Z)r(dN(JHpBcAC9b4mY@3G*'KD6L`Y4XT(P`rCrG$h'IX[3KlRa)Zjc&RTrVh
+h0SI,2(cqh)mQ(cY4aj1&FHcaXP#TZ"C31XNBc[E'"N+kAcNH"l%DAi(S@YCF`rh
+d[UrfC8APqRPEClI(hk-Vamj09hTf@JQ[5UjI6ajI+ed[hpI,q%Clr$H9+2T8Tql
+r9*Z+bR6m+YPr$VS2Cajq,fZkqVYGV9l@Ml50$b&A#mDYlk5pZKaN#ldPPjX(d+Z
+$PSm([Df$f9I0`Y*m%,8Df4TBIXqG$h'CXY2$h2iSZjb0RT[VTZE3jkk13R)hF2R
+DAMj#&FHTaXM#T[HXT5&kpA"ePC!!I'VB12XCVUV,5cAqf0b0K'r(rX[rK`ZBq[,
+qjbCcb)QCZD(-A4d0cfPZcSBR23[$SEQ2A`2"iIDrAMFPFa2bCfjq5HB#J,cM$pZ
+Ehlr+lleX[rZS&ldJAJ61PhdrN[Ta1pRmM66mR[Th,lkEcQrQr(i%cSkI&qhrP*q
+rlP*djR*EkIr*RGpmNk`&!AR6ZBTYY48RZp1br45c(r#JVZXYpH9XqibP[-GPaiY
+RCH,"p2+f'FQ[(p12S*VX+ZAkU2QCVa[5VmbB`F(TE'XX2UJFVM`rq-larNK-"3&
+jd,jZ04cA#qUMkLPm(rP3KhRirVm,I9X[eGAUjrCl[f[9fZ[hHZMHV"l10,j6U1d
+q@cV,,kTAVH4%qhRH4mNm`&!AR6hD@e($U[[f8HPq$rTQ'1@kHCZqjkq"AeF#peP
+T(cGTABDdqUMV)-[[D2YrAV+Vq&E4q6@aUh'H(KBq-bQ5V1hbQHYj1*K0Gb1eR[L
+RZ6c2mFbHq+Fj0TXi-2+`G*U-K@cIN`ZbMq,"kZZMF#`UB-rl0PZB06U,2hSA+ch
+'pL&mqBiqaKG,R`qPLH2m')YIAjdATIEb4p#R4bA(f24irTp(MDf&BkfdeF,FF'b
+JpP)Jj#`JjbZJqM@3!,fBd'`e()VEZ,5a[4rlqcc[@bAIq&pAJr&SI#q'K`R,UTA
+MAq9i')dpmE,P0`qZTVDNMfm6rrFrPkR#6X5Fl6NA()dqNYq4QprGl'"1DM(FLHd
+Q1Z*c5GeFcQN`GdJ5Hcef!CGGdYecTl8&IL"'K#%$I!T-er('qjHpc5klra99rH,
+mGI-AGpdEfKh9l%Tlk*`HA29r-R,[QD(j2Kd2ar&h-P,8-e-GAU,5EJqc(Q[4VS1
+@X*V)@-(XV+EJm$F@HTKAHTihS`[Pch(p#&dHI$k1*irYBLerRq#,pAkS(5`YVr#
+,mriSIcH*$[0,DDf&BE+beF,hSd(fDb$k0E"cPI"`pM"kZce%pJCM2f9,k[2F5hf
+p0Z'H*VrLEkrpf*TUkA'#`8VmI-R0eHF24plFq0SI!dI)cdep(ZmDAl#dPqrN6AM
+@-[j8KEV2@h9EED@&Am#4"m!VJVB2S4i2U9F(hZ"CqE#i1YifPKmR5mId)Ibjfer
+PN8MIq3qPcX,Der1YIp)Sal$SmIdZMa[8K@1SY09#h'iXS29b)2Hf%(,9d(59N!#
+p50"i1SYUfkLlDPLI3c5Br(dr"XjVmeP&`eM9AkaUp[BH6VCI6kR`,#8Ul#"fYM!
+b0NCd1eNAGEb0,#Zq"C3I!X9H[p#YJqT@35EZ"`E293V[AFE83[Pm[MqM#k2L3bb
+IBG&rPQhUIiC9+B6,ZBlqmR1XZjqKc@kZHRYERDdQBXEZFkbm-PIF9%P-5[q04I6
+FjkP[SG*FcQ3Zp$h[*R1Vj8h1HpZ,h8ceIUHAk-pbFpc23R[Qjm6jX6c2Da(`rcr
+"3rlrRPIR`[`r`SH9q+*HH*%XG,IDfHi1bj@VR[CVlbFl+lR-KFcQFj%pk0IHkLH
+q[[Z`SI@fePd@EcIKI6N,M'iDha[G@mVh5"S')rK'T[am65rTP+qPRDlI61ri%ck
+I"RG(6cZFi2G619i1'Qqmi2Ic2CF([20QrfD6hZ"N2-QrfHMl2!a'SQr*fASlr*H
+M1q,Z0,[XAeQNhdTeQGhf,l21df,`qGhZ,NcM1NmZ`)aHAcY,+!*LmlRIkF$5DV&
+kAdGC`2,m[&qMkRl1$jQNaIUHlQq$0pAq1RQHbae2-q"KZ$0jA"m'Ec["%+CphIc
+0I[*Qhl,8F2(lk0KiSf-G@!ea5k2T,8-aHCqM,eVjqmRmd,@rEaN$!j!!Sp"VV$A
+I*#e[mFlBkPd$mf&VIDKDRC9qdKHAm%(c2HV[ZcX((BMIeQ'S*R(ar4dm[NDb$+E
+28d[QG044M#+,h3lLmLDVkcF*e2*LDLmRYEH6RXmUFpLpd2Zm['rrqS`QAXIfFf2
+'MkZZh828rccYMUL*R32r2$f1Vk&KkX,c0aAcrq+qJJq,fFBLU00GeNSa&IUDHAb
+9C"JGEVI@TIeI5b9-[p'9j$r[[bdcbABhNr8b-FTp(KA-ahpe1GCF6p$fZkq[YGV
+b0V5GTBh%jePdV'pEbIemfhihHdQDeehVM#jr(1mR8ZJIQcfSpUHm[CA@dRXpm%j
+RrHZIZcXjh@)hr)85frSkHBa()R-AXp6YUMkrXrVXT18d28CHjC3+lk6j8#lMl@,
+SZfQj6YTh!E1TRkIK6GM`TRjH&,G$K31XUB(D9%$$dm#6i-[*m'"Q0r,jhI`21RF
+TB6Z2XCrX*%lK,+GkUbREpCkq"bGKaY6!qA6mIe*AV2'Y[3PHcbP[V*@6`ecqZBb
+q%ZU69FRShNmA@Z,-@XV(jFa(jI2jI2XTE(f8hf%LI[ePkX#Rf&TUTH`p,MCqAjq
+aY[(Q*EV[4ZYYX2r99$Np$*CHULIjEkeheh3kQmjXpqh1mRj%#kU,TCZANmVU+[p
+NYhNEpFYPH,4HK`k,e+UJplK6r"UCflUHK`jhq1(iNrqh$m6qFcRH,r2&jILd'Gi
+Xrjdlmqrk(&Rp,a*r8F5GrP1mQRRl#S$#JfA#S2CUU,5F6pFTPZ*TT6XSfRbm,$c
+F$,kq`k#Ll,mQKmLNP-CamArYqLPi(rhfHS[hIprQ[Vc&c3fNVU0*Fk#Fl+0"ra@
+3!'lM`Z"A3H"A3[CViAmSAPmk[KDRQed,8em,bl$S9m,89m,@ed,C9X,F4iA"V)2
+*M3Z6`E#2UT!!F(FIhZ4#l'eKGjaS@9Y)AMfF,1@A3Vi1b$1aJrY`pM#dYM$cXL&
+q6,f8,,b)IiF[C3j1bKILKEQ2#0(fcVB@bV[3JGR@qK-`XlPrHVp2US1SbrU@(TH
+C0DV+qa9ap&kPC(dfGMaiIAI,BlEJ8l,THGkM`MbN@%hKkkIkf2Zi[iYe4j,Gajr
+Y+kE`pJCNX9m,bk3mZN2MG)M5r*@qKKI[IprI[FEX,bBdr*!!$D$6'RZjc1A3"Y"
+Tc1h*k&9[6-hUG#!IThRdAQKp,PIhj8aXH9+J(r6cid[d&"rFIHqMlrl2KPHGm-V
+FmbBq+B!@Z1YlI-faQ!fi[Cli(9XZY[*le18jEF!Gl-Ekq!1BTZCMIre,k'!kham
+p!c'Cq[-(Xij9E$lM1qRPr'Yi2BGlk&V"c1Yid(*kkcKC2Af8+8emL&QYT)Jk$Cb
+)2QF#4#mb0,lL`R[I`pM2'#T!NpXV'Hqhh2EFIS1a*`)B%5GM2E1`LHVA9ArZ-hp
+TBlE5i&@[H!4a)Lhd[X[5VT[$9NhQidhTZ(1jbURFl`Th2e-hjP3!Fk!HSU*hf+Q
+Gfr#R[[Cfhq5H`p4UqEE8mljY21klJr*1l*!!)i%-#1F!NrVZ"4HEr2&eh#lkPdI
+A++XJTLT,6mdaKpRE3Hcim(Y12"`YT#a0R#b9P#c0P"cmL$U*%,85)1YX6@rX$#8
+J5`KDhLBhk[j2B4F#%#Fi")HTVk23HrM0pCq$5lAlAAH2RXjiULLMmhPQrcHDh2D
+h3jH0PB@%j%,+BHYJIiVr`3G0aS-cA3DqZUXlCJ6&pQZU[-XB3%kf[S`*mdM'aKq
+a)KE+bJEL4jq$q5&XT,lfG!Q&XT'Vj[8fJaK(XV'(qSddpPAJr)K2B,D&mj!!AjG
+M$eeG4qEAlVQfFe[l2[ShVrj*GcBZb@VZUAYVRKrQm(VpGQ0G3p#fm#HkcQ6hGiH
+fLAGaaX,bjb"Ed2!Z10NVfFJA0$l0c`mrH6dYGcfYZk%aCkRNchlF1BZV[j!![-c
+hkXkJX#ThQhlKrZGL6f(AX&mj"IPmQ*UEUNd&eZqDV"["MC6ZPf&HkqjrI,q9FCQ
+Fl,8f1JhIiULQqU(NphRkMbZkVHkirGA@,jZ0mALJ(MI&hYeLrr,V&X#'!U"FCh(
+kEEEB('rBmI1Gefh9r9fRfjAfX&'r(00KAjX[EGaqQQZFR+j6qMXk!J!`$)AiRGA
+@-lUAlV+rGeIhG288h0XBr6hHCU0,EDUBlrp(RhqG8#pre2eGYh(rqf`%,"G4IY,
+T30`A(`ArAqAQH9SreDIc0*jQMrCh2M6'EPrqZadARH9jRkY,TY&jHMR0(h2MD22
+GcTp(UG2reJG*jhkY2T2dk,4q6UY2Srlp4rEU1SqMr!!!!)#BUCQBQTQEZCUSLBL
+DQSQUUTLBKiQ)L+UTQ)KhH)GRUCUAL(H)KhLTUTL*KiQ(GkUUU*L(LCGRUDZBL)L
+)KQDjUiLBKiQ'CkQVQ*Q)L)GiUBQBQ*L*Q)LCH(GiKhL)L)KRGhGhGiGiKhGhH)G
+iLBQCcBHEZTUVVDUVU*QALCUVZb!!!50AD'LC#BU!UJ#JUj!!X+!+S,N!X!!!#J#
+`X+!,!,C!&%4PCRGSH(UBKh#SLBZBLBL)ZSKiQ*N+LBUJ#SQ`N!#TU3X!S!J!QCL
+3!!#`#C!!X+#EZUQ3!+#lS,#3!!LkZk!+Uk#i`2)NCLAdhQILQIYH$pc`IYHCTp0
+qV6kEl@Mmhc+(l@EbqGr",q,q(1ZL[JC6+H$pclf4qjpl*jA`I!b-RefkklVY[pk
+&pAVZdcZE352UIcpRN!$pH6ahh2Nar3r0KYepAamR+kIdXRcjclF6*mbkRZdZCl'
+A0$M,LKNl+lM8-aCAN!#`1IV+1BUZIV1YcpC%QrFaR2eGr4cIZa*ZUjqUqh%QpPe
+,c9H"3cHZqc3c'ZNEVBj'KqYTI(Z2!RmR1q$2b'Jb@HNmcNr(bX[-Cb"ak14ZG*(
+d[k-(1i[lf*c2b6&PHhI3rmb(p+2qFPm&r%B+"BQ"U,V6FR"j,aplhf[fZ%iHbZ-
+aZHjmUkdA@Zp&%Q,q5jrq[Ja*qr`r3ZZTd2pSNrpfKdQ,k'PSFri9$0bpjTk'AdG
+hU+'4epej8pKUQjRCfH`[$Zma2H6RVlQp#pTTc3U0X89Kc)hmX4YI*XTbDNDh(iU
+[JGMBj@GPpTADU$*kL[f%1BRl#IKq6UEQM`pceVQ*pM'A&r4rBQlU(rh)@rH`Er&
+mh)`Dl2Fb5RI2epPQTh,9Nlh0I0`iF$Sf&0YI*9M[Z&+G+*!!2&ZUlTGETAm6h**
+JS&h[1RiI-QqCiq5KkrdT#cR2Y`p2(i'LV1"ipG'ceG'Pkq0*9mD4X)FPB3rZ`jq
+XM6GD"ZYB`m2B`rXBbaKrjbGM$qc$R`VVCLae@4kN1Eed[BkV*I0BDU4JbHZdGEY
+C1G`Q'dZ[Mq$2idYE+&VB'&mR6j'ZimE89Y"6D(4+Z1q+iY)h6a'ddeKjFeLkbDl
++YQB1@fPKQ)2NkLbPiHQq@(TTZbbmE6Cq`mH0,k5YdRSElQmL0iY(JlMiU2r13ZU
+(&freB2pX0c["JedMDj1GhHLXma1q6l&I0B@XRFRUE+YYUA`kEc0(f(aphpVlhj2
+TCMSd2-k1APG0VHIRTl*k1kd86&jLjde(KXrFk1K`qPZiR3pqr!Ra41G-AR1Y,Hd
+jehJG0$HRr`JV#J,*Hr3r$%q$&qrmeh*d1'dpcVk(l1[RT$al[4j[,kASBb9efFk
+@jjr5T[6Re6'3!2%qM(mkKLhQLbF$HHPNl+Fm#(ipC`-[@m#4VSdMAaXAB4X2B4X
+-eLZhKkQVXBH$XSA@XS828mV'@@X[ifTj8PC3rmj!3@!XKM+4VU8IH2(i'QU-2CH
+4i-2dr(NZC8`lfIk@"dEq*qk3!1M$beL*iFRA3Fa@J1$Rkb$U+b$Vkb$[0VcE'kM
+fp04k4C!!RlZCkdaAa*V0q&AHpe[H[iR+NQ#J@UkHUM@8lL0lPY&CkA-cZTa-HGR
+m*@3G"@`FeA3mTA`r#-2$$RlX28ePq"1T$e*KY@i&NXM&D`fZKcrT6&MUr[pl$Rp
+R*@'Vb1"BS*j@4KkMA6&PT-9$erQcpRRT'$l'@dpYZ)(bddHFmTAXr@Pm$,AXVVq
+Kjej4c(3RYGeheZb[0cLFYF5-c*D$'H4*cr9S[-bQSNp4eGVSD,3lAcD,Ri&je)R
+La2`b&jJFr95'VNG9)i'cRpGjQVNF$ADMAHTVGjTDR3h'@PHr[2,T[dq@SHaZJl$
+,G'9fPle[r*qpSI6kl'iESER*CHiNTfrer0bN'SpRQ5N(Ge9ReBm2cS'$XZV@3p$
+@3pE@421LITNZKIX&GLSRkC!!k%264iHMhYMk%(9E#bp#Gf1[jQNRH(VqE,chEGj
+*h00kP!X0XHeRm4QqhVVlVAer%rC*-&!Y&dBHHVBH8V)H&r499NMS)IdY6YDI9EA
+epM4H[XGVk@ffZYiQpmfXc@Tb'$r4FkI)5(LA@Qb%Pi0jrT+k$RmQGPF2hr1dmDU
+SZCUiHehYR#KqC$`CNZpHIMkc*Am2$l2m-K@q9NiH,edhAD6*`m[TCq[Qj#(RG$U
+,,,5FlYphE6NHAJpKKSrGiI-i%aGDUl`,UkkeeIa2Z56"ABTlMm#le-KUFRIkR*p
+68b8r*I0SI9mH8cNVh9h1akfKrblRFCh0rF`-IX,ZMQlk0FA(0cQ6p24Ec4A@6cf
+Ccq8SH[d@FX0$`lL3!0$+pP,@04U-6FJQSe'%Z[p*A$l2d,[Jb(UbG(QE[95G(Rl
+`#cI2eA9SZK%Qp+J[T),d-!#mrU4*rRa*rS4*KKk#c(3G%lf*2hQVlp"I[b#$5F5
+IZpA*T(Xr4#(P"$Rk6+),M4K0ii#jk8SG4ICDDRYIdYcLHP+mqQMkrp2Crqp,+j&
+U&LE'fjq4cqHRX6iqKfPa)q2+6hdY4N920a35Aje1PeUqVX91-aqc%dA2e-QTSjm
+6c'Q@EDBN1*I3fpL6(TE9TCQ0R4+9LAm"5RRYGY9+'LmfU8QqIPV!NVhjb2"maCc
+FBD2,lpIFA2[D1Hp6HFq$2C1kRZjZjlXEbJSFpY1KT+(8DQpmkE[Y0%fXRdG,%h[
+pU2Hb(5rCpZMi2hmK[ZkkAQi(5eX6HbA4ed6Dq,%STZpe0$U0Kd2+SFpa,bHl'lR
+ZjZTl*f22d%pkQMpkj`AChe0Y2e+,r"r"rlMkk$Ll@,b0,Np0j0KNr(bNeNG&,Eb
+YN!$p%$XBmPqH"h-H5TFAZpMAHAeD+`dNR$dI8ee&BDQ60TfLXI1XBFrIf%25G5[
+Kk5`KcpKJ@-DE#GK'r,$Rl'(0f822@8DBXSd[CaT'dMC1di(FmcJGMDrkBkGXZpp
+5fdf6RIhk#ie0$)1Yd[qN6q&pDA(-Z,5jTY9rSXff-r"mQ2Xi2dV$L`*(1DDYmM&
+6AFe'6Mc[eFA`khfi-Rl0Ik%(2d9KXB-r4@1T`,,84Tr8f@SkePU)HTr6M,,6QQ[
+p-PCDQrKcp&BDcjUrC3FT`kfP`YC`1jU-2@jra)H6cXPBe-2BDRRa2`b9jIS,JAI
+!jGYAf[kkEmAQpPbm6MmDXKGE'lVNI@b-h-6C[RH2)jh+k+3r4PGG*IRP0G*8QZN
+ihCj(BeRNbF2*5faYHT*`kLLjZ-I2FMe&p2E[Rar,d[CE,Qih%rFkf2[D2NrjDI6
+hNe+iQkb'&ZS'EPYjGD$0i[jjl$l#ieG$h2Xh8TqEZ)RcqrFhejd1IHG#mk#$hYh
+dZEd[JSrrY6+k22FraqYHH24jE2hRMa-lTqK-5ZQeh3c8VR+fmPF*FC[*E$RhA5h
+2Kar`kEXIa@2HiMa2Qm2Rb[$k0$qb5[Eq*rUJ[RDci1ia[+N(3p`T%SUh8ehjBFM
+$N!#&)`j'&*3Zrm[+HAMI+aqIJ6FVh1@[0cU,Q2rYTqcfQ3N[[&b2$`9TI5[BCER
+d%M25p2Tl[@BbKN0RX,V9GADA1UkZeZG9P)Q$rCLGVFkR+4-2k@eZBQTZBNrG'B[
+$p$!ZSNrFQQUkLIPL5(3L5'YfYeUT1KN0Gqb3!!4%`qZpfK`qZpQje-T3pRTE#dm
+fim[`Fp+pcXmRR,[251FPD$EG'(T)qUe#b)+pAKhX$FjIdmYGDQ4RZcmh6h(UBb$
+kFR3pRNGTFDl+81(kQ*fYeih8bN6,B6Dmr)pr%cPc%cPa%d0aJFq9lF$Jh!k%VJh
+"S8`r2b(hD(1AAcANV)hFV,hH3cee+k1jb'SZ-KkPElhN5[3cZ#lE"5A3Mm$8pTk
+e(Pr#D[kiZ!lRdmYci*(d[9qETlZ&kKF*aCEBA804qdLA2R&`N6&C(Dh%6*rF3XN
+dNM`8&ZBQ(jmVJlT55TE,Q#B!QF1F61Fj"88PVQKNHI+rCSC'mPFAGd14Zk'3!,Z
+9NEU*i0j%l1kPFpFIESH[k%(`+(k9pjH4RFK[0RirVp24b@LcIq1"JT+jSr$MqGU
+X("lRlhJIFr[MlZ*JlhLmh*Ch6H6FbHANjh'jb6S-GidRk'3l(kZfeeaXGM+iIED
+kjeQNPHkUGRFa19LEU*ZlU*@hAkZm`-&cT)"i+hr9hN6`IHLC(Sp5*NHP%a2Tlkk
+Nr+LBRBd9e*d9(K0MVF0AEE5iUYiQPbHlX0,iqZZCH5mI0bRYhe$KVbQpR9i1[Zr
+"arL&f24TGhjq@XY()cZMr4Tl$6ib$-5f`Vr1b1dVY,eGVADA+3j$lq*fYGjZ8Kb
+ALE@ZKb9G$N+mhpj+Y`+q()9d2lJ1qa*-,1)$lX1BVBFPAr0A3jHYM5pE$dFH0Tq
+,CH4i%2BCh$fXH3jZRLE@q`1M3l@`QTH`Jb&I'`eK'`E"ZbXBIFf8(ZE1"NqC!lQ
+eJGMcFV1pA4h8IS41iTY6V&RAaRh2RapK1j'[MB5Yim$(pV!a(I`-4-3-IimeKTr
+*9Nj`-6A`FMB`-MC32%XCAAA`$F$2S-PGGCiM)fF$#!1dJGID6-$Gai(Te9K-mMX
+[CN06l%1JbPI8FM(60C(JIAM`-T@3!#AVSriHiELN-URX[1*GkiPr*qS[NeaALGK
+MqE3r@jf@RDM6fNR1qPY,,'`G$l0MMSFY99d$"edT$m52$m+"Jkf"Jkr(i1k`,Qr
+LIBNQ#Za9ce)Q(VTQ(LrCVHYX+hB`C2Af'NRG&Vl1ARH4L-#fhAm2V,Z&`2bB,-F
+lFc-lJDLeS1jY+!jKFpB8'LVrQUS2hD#LM`U+23EAqq"aI1jF+LjF,DmZ&Y%6KE#
+XKDqXB0@`[2VS@RVS@Q!GI#d[)iI%QE@Fc[*iG606p60DQSRG6869&6cY&6cAl**
+"i-r8!1(q@&*em,-9d,-eN!#mU2#e8H&UqAJ9FAqFaaSYPai[1N10&[Fj6`VhakD
+,Hbp0#rI,lhPkDF`I,ddcJqATj6$4p4MZbV04P*f5dfLVr,TV#&Kl,!kAcG+*lQ,
+ZC'Kl,2@r@bpaVTl$jDkmQHa@GZj(0jc,AY([1M69AGpVj[r1Dm2lRcBqqP)Rr%2
+[1*)kDqdZJcINGc@C[%6[I@qFTFlECfPmRQD+PmQcRifQXY*$mq`mU-G&X-Tk$jp
+G"`eQG'm249X(&f-lLkk$)ed'ApZZK`,DEVl+dKjlRaXpH4XpciHM[)fMZifSZid
+rGG50UEQ0UJ(cF*'e9Yi-EbVA)aY"Dj'(jI-b81FY*'$0BM5kQYrhQY$Y+c`2d68
+Y`irJk'"heCS-Mj-T05rNb2Nk1bMk+(L,,Clk`MlrkkRVlj`#hY$YIHjXVrPSmlC
+H6HCr0D$0pc8kHiQThacb6h1@RXPY,RaTl,E#kr(2Ch8AI*cXrGm(bG(HERbCm#I
+PLCrSCFidXmI-ASk1IZG*4cqif[3pkVk(3ZqYd)Rmj2S42rSQNq'*2i,YiQI`@$[
+0c@59jZDL3[0cZj+lj1cPlVmmpVXpGH02DA4h1FRY$VlMajk@pL`deh+D$b-hf&a
+Rjb8cH6mHjPk'J[,MT40MHEVQBKZ%5@qH5k(HH0HC$aFKiM"Ec(k6p&I8H$@k2mH
+2a@mV*c&FZFbr*R*IN6RLGcaTcaX09cRMC1UR2'br%S2%ce63H-"2%dG43H*U+H&
+i1`Tk$a0K`SAJl6K3Zpf[#S1phY0#36kY0#`G0MX2lX,kA#KB2ekH&Jr5U+$$kfS
+KBEdJ*VDQJaIQe-,&rSiG")rSUD#AmEKd%[iR$S0&i2%R02i2$R0KpAKcQpiFjBe
+-jckQFq@RRHbhPEp[23HpP)(JkU`rYH%f-&b(jqI6IppVp1ib2KH+H4ETm$4r"Ae
+R"hZRUFjI6Z%p2@p#GlR6DHmRF0SY(GcZ(cdhG3HcmI2rqBDXmr48H$VI*e&$KUq
+4e-V)FfKq'(CHr"[HR$[HRe)GPdm$Qa1G)@d5h"q"E42$lbd`Aq2fpjGAiD#5$[G
+#qc"$ic+!8pi6!m2SHq3Gd1E%XZE3hV#IKJp$hi23[*,53-AGD24`HjZYIRSY$M*
+I5F1lmqEf8p-CfLUHISXr3C[4H6kP6I5%cPClGjDXPk'dVUciB0&m'kj(E,`qH%9
+TEdphaHGXS2%iN!!f(&JD,M6X[aB-MaBFM9aXAa3($N101b2)JIIN(2,[e)NerIF
+rATImIFN!e9QeIaBIhB9&@aD+YKE@Y[`8"+k&UDlU!I!USFP9kV(E@Ve8Tqb3!+V
+95P%k%l@VRj6Dm9"*r(EhMCk8h['mH8iR)cNT9FU,CFZJ[IIqEhm!#8-YU,V4Vke
+-CPl[6jZAmQmcfEr4VVl*C[f[IRYeqfcrbqR2l#9ba2r,pDfhfHiqVcX,BEc`B@[
+pRmF,6qcqH&SpjrT#r,jHJR-pl1miIPkM$e1XedK`r,rI8i(Z3[&ePkJriC!!i-+
+B!mP`85i(q-eE5Rj!RqA@@A$`1$#r*)F#&0JH5i%+Ihm,p)1mc@9A%`'$e@XUYE`
+0CCDlIhqXUYG[qS"H"JF#IbYP`Cr'h[ZCl+h[ZH2PIhqlR-Vme2XX#SS1hLH&3b9
+he)1ce&RSi2RDqGf1AY021l6bHCRTUYeh1bFVp1lRZZrhmMr2r2kqDR2c04I!pLZ
+pVf0rb[3d(GHY3F6HC6bp0aG"SY([j66qcS[,iI$d%r,lqJPpjjqJUUMbp*)qh&N
+ICe[PeG2V04)lq&)qeNYCB9%,X[FP*MhBIc8d2pp0$rR)Hl$rT#`I1kQX`1GJ1$r
+cI8p["CAp[eDM!ph@94VQEq&)8fXhY4V1YlF,`YCJEq&*Hk$X"LB1#BBKB2fiAhj
+"'8+NUE@E@T)4Bcl8+B$'YpX(kV+lAhGCYGGl3p!c%I9eQ"l3ABL1jr+lhhGCa0+
+,Gr2ifUph@@'KpZ&Jq"iq9UUEbrq-M`0CJ8fb[IGKBEh+$"mk&f9[V-#hS-(Er06
+3F"8E"d1SefmJbqLe(X6ZBPp*kmlRm[UQ#qY1cqGS[@RG4RGTkdlVr*p6eThep0k
+f9lQebfDb@RYpaS*A&qh4pGr[j[Erjq,ZTh3PR19ZZ$kh-pRfGpRZ0UG"*HT-9AP
+j(e[,PT!!UY"Pr8hRii@LpM5D$2BIKqA*DFbFH2ZpKjHDR-pZpHC3*KJd[[0&V0(
+KkM@D(8El`6*HC)5iQp,AV*kpKf$i"P@pd&&`eP8PT,fTeKNcQ!G[rkiAIi+8r+k
+(e+Yjq3@#HQeP9`aCCF0@dr+M-fKb[MiE(5ei83TAK6iBiJ5e@0XJ9VYqeV1@'Y9
+P5b`4(1pefrF)dhPf1P,1,&lhGCBqE`)@$i1HbYP6DcRjcJkc!-C2hql#lVhD$"d
+rPrr3ZbZYCJA9"JlUJl+k"KEACPYChBCl8EZ$UPEABUfS&pDGfUYVl+YV`eE@k,D
+i@h9YEVCHA+jlfk2lhlH(q$YILi1Er"QISc&P+j+lR[Xd1$YqYc[Rj[dGYc-4aXI
+8Gec2"ME[[l2)dZZc&PNihNjqaNBhjC+0iXR'b1fVFc'a1kMB6eJ(5GAek6UlZ,I
+qa&[2BLhHmLfq9dR(kZpLl[I4I6hdACqe&ehYJ1Nd1rT+#&14CQNP[FLq&PHY6p@
+QLi6K4H`i8AVkICG@S!HiZkRFAI$f9Ga0P8m6C9&9X[BUYPZk[CHR9l,AeHbdR%h
+'9af9aRYqeAqel[GlMfrklUVm6YCE[-cPjMjjIL@eGFFZkX)[Y9m@dVBAm+b&eUb
+&mmH(p2PB&C5IdKphImL(MIle9G5@9E[l+YT,*#D5pV0rHeJ'T2hak6!jG,Jq8!k
+A$mLPNZ05cGA5`B0,'e2(M6I*M5(,MBH2'`GC&),q'(P14$b[(KjRMAm2b1,$mVL
+p5(S+X$`p"aBINFD(QR!h'52+!2N3qrj-2kh+KI3!qA#kA,T0rpHMR1$MZRr,Z0e
+a*CErZ@c2pCLeT2pV,L9-#Chq%VDEDHR(T-[Tq95HIRZ6&UC(N4Eq4imEVm13!)9
+FE-eFE598E9F50XH('pRKaZ*8d[%UBeM84ZI88[2TkArLRSq`i9,mR#qHiQHdZ*R
+kGc+GTFbRdlV+r4m(8i2mmVm(aF(rlp[FER[H&e0cK!*ep25p@TM!1riFDliP,A9
+8DSUiflid2GmD0VZ4$d[+KjcPaXM@3m6A3[NX)9jC4I6YBX[cIDLIAj-j%ieVZ[E
+bhEBA8IKc,@dXVH[ZV5Nf9R5HhBaHMB4HYAVR0l1YMBbXkeG'l1[Lr(B4IMXBAp)
+fNj(@XSY['eGraShSAr&MEIU9FEF9FEEeFEfU[U4Ya9!IV@Qrf0T5E(Q8QaY0rk)
+DkeT5HV'p$LaYX-Z0'eI(MDVMX'j%E5FQ0R`(bSdhbida(M53!!kb0h9E'l1ZLr(
+AU4Z,BErCFZkV,LZYV,GHYPqdkAkTGXN28k2+T,Akrm)mAikf&mGGjR+MCINa[(k
+R*MD(NhmE5mMU&GJH,VDL8XkU8m6NGDUJFl'98#qiNeCX'[Z(1he2'jf2app83qG
+*m5DjdR93"6qMMGDUP-jaSfciaB(V@NT9fFc[Q$9GR+@GNJe['dh)MH6b)fLj%Ea
+q6'Pq6'NZ4'aR*MGTaprDil0mIaHP`rfkQAl6r5ZPTBQ6Hp5cphFFcZrRphdIGLi
+[k1Y8D$ikRmQ0q2KjAqFRa-Vm'-UXVIF6+h`'hZ9m6JpEHbR1aQpP,lfCQchXTm1
+bmRNl,aq4XT,Np5Rj'bP`CbHYl-ccT0k5Eh(I"*RiAIjS,fGc5raamj+@Xcaj526
+F1BlEme2q+@-41M`2cp#`VCA(d[Ah2YH90I2A6%ldE(,`E2QC'$9mh`B1pYr!Kl@
+ji'UZUA9ANE5Fq0RqK'c&p"c(4Jq&4qc@dI$VGc`kcFhPC4r&(h0r(qIi*RFr*aI
+KP1$eH,JZ[phGBMUEV%Aqka(aEV[0cfh2qHhjhNG(Ip6Flk2IlRE9[@[Sf8[BfB!
+I3M6r38-DQmTD+lMEDjTGlFF#Ujh)XVEa*hil216[ceqHcIGlE6AGVkr3XDh[2Ek
+002CKE0ribl+`kP[`2mHpcZ6j&aZIpC1jSd%G#(e)IDqTI8IGAYqJMS3qa$VA0(3
+FlNI"MrSYl#Qr"QHb0LIlNap%[BfpMFf0[EmR9p'rSrh5E"ABTmP29SiYZc+aT[d
+CVXp(SC(*CMj*HfYqEF@e[HmRq(`hp(rl*X&GLRZ2keY0CLeJbI-MGec+8"iHeMG
+eDaX2E3qkYTf5jX#Bjd#5Z)'(ZXIJlc'd1PRqM@Hr4rYh9Y-pYQp"iUZ*iNILFAL
+4q(aN)j90@F+ZTFVB4X`HY+dMCDeMC)"fdE%mk0K,H0ep[&q5iLr&FaEZlLe`$[)
+[XFq,kI3LkkpLkkqLkASaFldSZ@k8@@kFA)qr&a2`4F,lmA"p2C8GRYqRXDETE(`
++2IH6*p(AjDMfdYT,lcj1Me@4felVFV4`[Vpecq&6dHJUD2b1*4jLUSj1VSr#LlD
+kLlkikh(SqhLfI1Lhh1kNAilEU4Zc+AY)f-Y1T'Nl+0QE'0PDqQV+IMG528mMKlU
+JQZdqRK[`C48I@ePG(VE5QZpcq56jpr4X&GLR"@-Vj6-9dTQ%'QI&MC'TkeG+CqY
+QFr@X'V*c2eNcT)mjRimjT1A3D6P3Y*bB@Nj&*T10691rS*2SHMcrfm,(j[r22mD
+Hr1XSeMJZfJcY$rL(1a2j3rHpq2cq6dVh`)R-[ZVKrHm#*VX2d["LHGi-6Cb&peC
++pb-65c(3b-6dFP%cNaIC+*,6GlNiNY-Af6LC'E[ZV0h8M%mk5LGI2hdP$kZT!Yr
+4AXR$[p6I5F1lSVlUd9YP)QPfYVP)QZh[-3@dbS&Xj5*TDUcbX6dC5(TDUqP)HKM
+a$i(@%$"ham%FM@40,@`m6@424J5&C!N,k")4i%PH`*+1KNP89d6A9fXJ6&p!Q0R
+Aa0,BDS&p@`e-#E[S%hSE'*TE(8)A2jba(mr,@4$&&LE+*VV2r5"4Ad$C@N65fR!
+*@Y+ADhXeYZC%d9T$h[3Kl6Q4)(EDHdi(6i'+V1GBFbYQXIr+Gi'*VZGB8h*r#pY
+I@`j[-ra1`EEJG+jj1DZSNjG6d+lcIRH"4iQpkQ4Sq[[XP'kYleFrcTAdC'0GhXP
+'VVlUl'ePGGk(-PI1bXEChh9Ul19dXH0TElU3!$ZV'9rea0G'PVk"Q+k9dYK'a)8
+dPB&,1,+kkdf8Vjd$I$#ef-VTEDLPI4JAfK[S(ajbpkY[jmVk-VfH4[CAZKM+ic#
+A[8PFeI5[NAXVT,lUhX66AX64Adp2hXp!rbmIRFbjQ[jF(#@r-ZXIr@Qi(LpYP[$
+mAm"SY[UE$@1#`p&diH([SHHk%'LZSHpZ)0lcBH"Da-(c)NKCa*1aL6GK%dPG%e9
+E4d9C4lEPdHqhh[HKZH,JEQdqEFp(jGcr$0I"kHjqIUm(q28a[`qji("qMl'0q(e
+qT`Iiq&ZIijRi28h25mMhpTZHCjA6f[cqpYYcl@hk8@MfpAI8[dlf0M1K'Nc6lGa
+Y*G4U+jMEDhM9A1M(5bSeXP'9&@4+ZL`@)r0KZ6q[pZTr%YcV,,E@j&6(TUhLEMC
+GVj(YlUSfA4TpPr$KE,VF,CI2lXAZ[GkNAker`B[Ihr!LihYpr&a[D@G2Z,lKEVJ
+4Hri-AkhZ##,fB$TN[q1Rf9R8E,Le1bfADd%@,-mU6Z6r`,"AS9eVMeV,UF,PlVq
+RifZTRIkc&T6AY9GDU(Hdm2Dm5$U1,$NZ2$`h+KI[M`V+XK99G#fYI&e0K&dPM&c
+&P&Nl1,M,5NqRc)[CfZbM@HhY[9eI0pAbZGk[N@rTm$jmcEqlPEIh1pi2DArGh(V
+G6JpTphJI4P,MGr2Eqa5r2j(1hP,r$bZEl0,dI1TE6d,AEdYA64[DTSfqi8@AUBX
+R6aFC8aH[d1qiQXbRG`Y9VDE'3YVVH&Li@qr46iU&CISTmM#rIie2i%2$q*6m#5m
+'RM6rHdm2DI9TSGTV,INF2(pVf%jie[1H0c[QUFIme4!rqKB5ieQE`rUA1TLIAh2
+hDZlUVcLG#T[DMSm,hZ$rcakEKH0fZrjNc,CJeQlfmpkiprS8XTH8[P'i9G4YpFa
+UZiMFAR4M3"'k0Y'rKEGERF#Vje,bXB`HVB0CmhJ@I0!e,IFf0mGY'keU!k2XqC%
+aPR4bGM4jLZh-6)8[rrI9Y$[V#HfeM2E'bRY9C82jBfd[1YD42ZB`6m`hR%%jP,r
+lM1C`1Yc1"pAU9GV`1[UlAIbNESe&AcGaPH4dGG!raT0,0Iie@@RIm8[FGjXGe8C
+aIBGP$mm,#Nm#ZUGh(UYGbp9SjRrQRbdjBm6)cR$i[J6R$ie*[14&p6NaGKbU$e1
+A3Dq23DLXR02@c2qZ,VCQIVC6cS14USH&USH%UiIHeF6cU2bZI6AP2Fm1hUlEM@R
+*XZ6CJ5dieY9mlLA02H8h2h2Q8HT[HYH`[%XD$m14XD$lrI@&"PUqJbi$VjcmXlN
+q($lRL3qaUS[r&A5@&AqHChR&cNcVq0PjbAimPXB9I58Ph`Z(bmGS+hGIkCeFfhi
+*IqHASrk42QTULNc@NiNA9D1VLl6aq0&pMbH1"10&UIbc0Aam[+@I(bdc9mM*pAN
+4Dk@j-@Zm@8Xq6NC5q36NC*!!cUmQ,Gee(m%Rlpq`9f+F&I$ZGrMrjiq0h'kKH1Y
+RQ@c(r8[pr(pV-mIYHfq[f[P@%,Bf-j[V+Cpf0TH-FRk#1K$i)2BCe)fPir@X6N4
+cR*M5h,`$f99X$$eN#4M`*MP30(bB'`im$HF@DX+UDrjTk("d9h9hY6dpch(lH$R
+P(f@c(mCIZrip,rIhH$AF(fYPM[,aZ8ifXdR(m[9FI3E(MjVEFI+ql5E2J4GG`BZ
+Qi-A5qjeZ*PHY`j6XkQCl1TP2XdQ*U)Z%UB[B'BRKpEhC65Hj+DVJc1Ui-Tk1iU1
+0XYhapPkI(f@cj(@hab65Raqc-r(l-TrpZ*DXf@4VGPheEXX6AGEeS'Bh8$2qRBH
+K!mcD`0MSE6Ac@fcR-kdYDkk"CppEDf"m2VfrdIjI6ZHXIV[3jISC[3fIV6Fhfrp
+k'Ir)6KpHeq[ldTrYbUENdpe`Z66m@&pIhJPpD2'lUS2&I1IP!XcT+b0LDVV9NE#
+9FEZSmTYSp,er&T2RjFT9mVIpAMaIimS[QTJ,b1&b5r6`)YIbBY4M14+I(ar"Le(
+,LlZ6imTeZ0NBZlMaGRQ10!l2Lj+NeeC&efNUi(G9FM&dYE&dZUUS'-iNa&d0G&d
+1aiFe*m2-4FjAaFjYUQDc&6PBXYB4CEI9%$59%TfEJDRJDURP1kTi'Vi8ThA#JED
+QP-Bi'TS'qhG4&krQHK-bHlYI3P-akGVXC62l1f!ZZjY&+D4JZPjf`P08JZVcP[V
+j6E-&PVMcj6I5eaVTRIC'jedT9ppFkfCUm6GDf8Xm,GIl5PpK,[rD8plr+ClArS#
+IajqrqMRlrjlf-E8RChd2ZVk(KqM"N!$ScXMdTh*qp0CIhTV,G1"SEVpYVReN+r&
+-IhPrDkRZqa`+Ef0rl(%pEh0eaU6"mLNl(P8RB4pam9CZ,bZf9IAlLSX0aZl,CE1
+ch'PY0aj2-f@GYGaNVEFGpcYaK,IFGIFqK+prTE[DC[-ChRl20q9hepVCAFC$fqm
+jRq9Tm&(r6Fr(lqkpleZPkr4r"ZG0*p$,ER1H4H59(NI3ZFTZH`h8Ej2@TEcek@[
+pLPU0j5l[HaYR[UA5qe5q6lFE1lqPbA!THqpb0LIGTH[TU6Udp*H8p*Ae-@TiG*k
+R$T06`k6b+ReZ&l"0r!pVhGh`IDphf0rlIZl[p[Uq3U1bmare,php(mXVd[@pchI
+DeNTV1lc2'fAPFEbr3ifDiYAQV5Vb[4UXer$KjVjkQCqR8bRIdmTP1&+CQQQI)pb
+CmVh*69m'8fqrP2DpZCpVfTQcpU8k1pP2iHc!l2H6Adph0I@hF#6pH"QGe!mMdl(
+Bc@VdYRY)'hcPVXjVLppEIlcAmFIrpkecZIZdCkT8%G#(S4eVReV-j[ip0b0e9k"
+Hf6`jMV5r'Z$qJ9*-lELm,N4IDj8@UjG*a!((Lf%H,H4i[2jFAiZA5Ar,T2LjFAj
+19'krP4X*b3(5JE%mJ"a[%ip(Cp2FfI6!cf%Zb9Tl`*LdpI&U+k,A9Y*A9P*A9X@
+lV)Yr(!FAUY#r9jDKIX&#mE#mLPl(N!!'MGcaif'i`$MGRaD6q2&LqpfZfie69h9
+9rjM[elV2pF[#6q"[jEmrP8P*f[m14&q2PrTahaajbqVI`ikqVC6i*1Z2UGVj5cV
+T5c!eKMVGqfNUqq$FmI[-IMk@"'arlIfam&rPh1icZAc2@c&RmR3RTZlkeeZHlrb
+l[%I4Mlrkh0r"5hFREC+PpM-mc*dZce9R-8ZPp#abP,R0e5jEeSdYkp,LGh5iAGd
+Z%pLPkrfB[9hY*HEfNZpp59hY8P6lF@ShjS"T0G`D66F'Nd[ZaG$68Q@TU5@i9*N
+DL,he45B5TT1[iHik[%h(a9@b[k[F9h&h&6a6Crh'lj'bfI*h'Qj1id[+h'KjHic
+XICCbXh'4VGaheEZ-6AEM#@'bkqafdej@ZXYV!p$bE6BG$0k@qb(TI6m2G@hdRA)
+8q1''4j!!kiBDfJA$$B3Y6B`TqbLc&T!!T,Q3!,',KHLi2Qkb0HlERHMUVIdG*FD
+rFpRRlRcpch@BZGRY-IpAbXTR)mMk[Ik'2)qPY,(bVrkd(4rlr2"dITE5"erP"A*
+l2e!6*qE@B[CpDjp1MlV2h(U8ICk5hfNEVHG'q2Bmhd)el63l1QKeI#MEfSKl@TK
+dA%Kcp9$Qq,"Q10$N14$`I+S2QV+$S9e"l*+GT359YXBQ1L3ZfrEZYaerDi61CL!
+HRfmPEcTr,lhcG,!k0(k1jmlJqC`VcUr@Zr"h2IGrGC(FiA-A16SqhNBhrdP'rT*
+aV[E@fCM9fqYHV64[GP2V@I9TkA5e&,j045k'TTFl`ifFiNEaC699h9UihhC6E9N
+T[Smc[SmT9mXh5[k5R4j(9j9*8FZNpMPdQlMdRU`-C9p@ZLk@[LqC0CMKcZBU)hI
+m+QjI#K4ClkmjFeA%j1kd2B,rkd[,pE,eA4r[3ql`rHiI5iHEPZ(eHI+CERbNYd*
+5@jmTq(%p$lhd[jBraV+",@(8J5eMc,#rjPKc,%&f%#@XXIihAC([Eh(CcS5Rhm6
+d*6aCA1F19be53&QmN3Ce1P`qP9G(L8fJl&hjNIT6A4ZH$j!!rajM(hme$d)mkMl
+VSFMrVQVl(IaIYpAXP`D6%aJ5qpY[SJp,9e1mhY*Z1dp$ME,d12V23j(PlIMqAYq
+4S0[b-ebk5Ti(8T+MJp5NhIZ8RRqj5DkQT0,68QYTYcq6[qImr2kL$lR-G#KdppQ
+r2!EJDqQGE8c1cT`(-l[K5P4`T5ZTT5[pf8ZrGP,ch*5rpb8q,JbRbF!"bRblq8q
+Ef`(+B(Y5Raqe+FcZpG9qc[EAHfhXrijRkYeVX'YC(`mar'BTif-iKZfdr$i[$TU
+UUUSZrR+,Me((S,AkpKbDDRlZBh'qhZ6Tr3LiV[Z(US@A`Y9U)ANi5Ve&"TX*aG&
+38A'mQJfH%ihNcQljHFSG2NllaU(AiVSp6mFpl["jAIqpe0ccXCdlqMjdQ`9f+kG
+(dHP`VH[X,'`VklG4qc9e%T-IePq4A9PK@9eV6G#MrC*Aer%SVhK@r(X[pr0MBbB
+Rq9UG9#he&YD[@Db&Rpl`S8R63T!!i8A$dqbLb&2YSXK8d8@5UGK5596kG*-!55i
+HcT*MKqVMDQ&j(Ie-,3G6Z`,pB#)3"2)$1DbP4#mM-e%,0!6-q483XTUUH&Q0M6`
+T2IF+&M1&#`r#Li`LI2l@QKDULf[(e1TKI(-6pEr[jY,#j(r@3r)dZp'MS1fj%$%
+6Z)P)qkj(deBRlmar#AUkk[+8je0dD2P5A[Am2XkZ&58'TUYh#Rq*X)8r`pA#Q$h
+I9*rCZ&-9%,$e%+Bi@"83T,K)GpL53VU3!)$b&4#N@$!15T`P31&C#SS2&K5&2#Q
++H&Kq(#`p23DJQUUS-2`U!riMfA&S-(63[ChY03F6HqcbG"Uk$rQLfNI2kU$LY6S
+l$2DH$U*+AYIce0[9AP0dEq)5j%XqM6FjTYVUDrl4[DTQ2QQ2HT[V@@#aQfkFD5[
+SdrcihXhF2SA%Epr1Sm(E8IGFbMNl1Mc&P4q4BER59qjeIq1r[UAkh4p@2`G[aZP
+5F(FArYp,h1ri2Yql`GaaZM5pTIF$Y,kPlZpT4**hY+HQc2p#PmMRaMV(f0j$fap
+%9h$UVU(CA-2rQjJr0F82CA%pLVHKa9[2C2R6fGjXpj20cHRYFhkGV0H[@6AX4qr
+JGKc)'%edHDfGCP)'%Y)'%fGC!eeCPB'%XmILGh@3!$5eNT!!2UJ[f+c(JZDqVCB
+r#mL($JpY$J`qhXV'aV,'aXDk`XV#YMqTpjIX6Mm[eCEhrei@jq(4d0K[1M2GMHc
+hFp#HbGj2CHlRXpFd1LZ+(6h%pX1*IHA%f(Xp(bSP&Y1Mje&dI1e25ml5G(B40pm
+Y([CrTDrU8Hqr$*p,clm$icTDpLG([XrdY4eZMX-$TDQ*Y[1LE@L[YA3lADAfXqD
+qS+(8@+L5KlRRd1,1De422DHak1JRV(4r$FB,-I"662J+@1qbhb5h3lc3rq5ejQm
+RG6f,ZBIcmkPplQIRKq4*9qcKjkIZF#i[iRqFN`9f+G#X(Fa[qUkkRT'kr&69AJU
+$[[CI!PVLMTFKPp2G31aYi'+jZ2mHeaqMY-IVl2(l5aJE5`JEfZJ@0GNmIRUhUqE
+AqG(NmI-IhbQ2NqTZrAV[4fIVefbbQ2c'lp+ZLih(bHlp+[K5H2c%I'BqBV*$(c&
+ENS%aAaTLaRG(lp$d!(d`02!2RX'q,i*li[KQ[qkkDkYC+i52+i@SZT60S,+ppZl
+UCm#"cq"!PrCJI6f@BjY4b0r!a%EVkk`M`*f"K,,NC(Q3!(m90kq4FRVjTDjSidV
+)kLhRF,cCV,FbDd9R!p5aJHcA`1*AGAQ`F*cS2ArSXS2AqEB%X6I8U25Vr1U0EA`
+`K"`QKViIHjb`Jc&M$mHb8[rm+BSQhZklRePp(`AFi,XF&f1#l(iIQq$U42Jc%I(
+r(`l@,$hfqjQbMEd#`kVL@X@"qq2![Dh(hYE!UUk"[E#"X,2(kLdJCkeQX0EjL*M
+mhUlQQfH5E+,Rrlbh6PHAqR)EAUAd6DG(!k0$kVJIDp(jZL#SRUd2Ud+#E6T6hXJ
+2T6hZcfmk8p`pGEjqGjq`jZBKeqeYI)Ke1pjQDKqa9@NeJl1D`pP0BHcJ5&P!NV'
+"-@!$J6GG06pE@EfXXCZ2c*,LFM-I8QThZBe,`,E0pYhLf3'daIXN1Mmh[32c8hS
+C05Ypc,r*,@1)ZV#GdpK54S2q)2q)ImSeY`14`1"E4Vr+h8Vr2)r"IS,eIKNU2Vj
+V(ef,dpVi%ef(-RFRD6AMf8$8@@)p6hqT3mk5kAa4FICm-Z4fffY0M5l(E@RS4YV
+[E6C6Y98@d@"C4i&9@31*@UmrB@!eJCkcQT(Q6@$YTZ0rLHJGjUVQQhNLj*R9PVZ
+MKj!!aHQYjhVlD$LHC1beT1rSXjfAXCfBX*h-9i$RFrA3Fr@`G4@`GRA41*ld6hB
+Qqk2@k2@k1eMHe1pYXFYTl$Cj@Gc2HeNl*pl@`IVI9VjhkpK"l@`eRpl(@I4CE(k
+,2Br15pk'aY0VmpTYDAd2fBbdfh@Xp[$ffpXpaJ@F@(UUb$UDf$2ed(4f%l0f%'5
+XTh&fN!"l+eR)23dP[BAGCHdIA8hqmNTSm$,rpbdI'6ZYU0"BCA*4l$+j'YVXVi0
+K@5RJ@-I0H"C92)l,362&cmj5pKTkZZb8@(1iMXE2p%$XELDl!"h,JDDkpK1%B6K
+,LG!hHh(iZim2Z*lj[K!E"[JLImJ2i-$hm$hqT%q'*IHr%q$'G2U8ChRHT4fR6kh
+6qITdIr1#l#kTUU6FZmq8cqPhQRYjVX,DDbA-QX[C`00C6@RX*VAemel&I0EbYQZ
+(rMZE@G`YV1rCRH(@6ZmVB2U9Q"CcZ-X9CIb+kDmZXQSID69,JjUfl'DrPp,0iM0
+`1mJpj"lbDPF,L-4m8eL1($lEdq"ffQMakqGaeG1c0C1qA(RG[[,AC69RkR0e8lq
+rAfmrmYaSqT2GcTlR-6hBkqic-lm[U@qDRILiI0QZjYS'+8Rc@LX*hAeX(HdA0Xl
+LZk&,rqTZ$P(eRV4@rPcA2V*VKeXlX+kGe&K1ji`hXB2hBHSV)H`MaU,fV2@4YVm
+kbZqMk#`(`+AEkY#$iKHM'f@aXp['eQeXrDK`[CXYr$R)m(a2V4i2Jpr@6[Jr@VT
+hVqrVjR)d[Mq6Rl12j(-e9'C-qP%h`$k86hBII@F2&f8('@%'6Vi-Q`DBVi1HVi2
+Nf%lXkk$l&C!!E(8fpMG9[3h2fYek[IGYq(*q,pr0B'B[)P*hQHmQkd%$jDI(rm9
+12X1(!hR%JE5UJDLVm+aS0RB3YRB8'lVi@lVk$B9d,8riNZ*k0E#dPG#e&I#mq[E
+G*[iNjEF[Nh6JYJ[+N!$T`ITF6rD&eDLUMbQ1MGI6F@2+B1ClAiYjlA*bXjf[DlZ
+QQHeafZTTRXC1TQF,[2)TTc[[8f8h8CM3FAKjHFP+#&fY"+9A(LlVKICaDi&-[QZ
+VQ,IpAfZ6er0cdecqCS)&9Cc[AfNE6eZ2feM1j'cMH2AQdE"cPSDl%#SVjh5mb",
+em(Ged15Y)%[A4YRA3j1cJ6&E'eeH`Q[Jkk`KjfcJ6I[`*rT`06ld#Lk8$DG'DfY
+p0(Z#fZHjRi)'eaeMR)%EZB'@cYR[XILY,ClH"f'lXS8T-`04(bXeK,'$eqcVS%h
+(bN$)eqibN!!cPElII`0$@rRc'0JD'Xmh,bN$3ap0[i'PMkL$K-P(P)GrLkLUjhJ
+E,+a[ll[Hh'rbP(pDSfee$krBhNlerlXCJXjk2kqjbR@`8Y[X&iPAJXM(r9K-IKm
+&LDcpAe)%MJ[Uem6Uf&$If0$GfG$8FbKfGY2DER6fFZD(#hF(iVf(VrHMGRJZfh@
+(V,kQp(`PPda@CrPQ,5(rMYZ'CSZ[X)'4VS'F0mU2MpRkr-bQ2U0GDb8#[r4cF[!
+[*ERC0"FY!jq4jfFB,1m1AY0$'RmaBDH0-6pIUTf6hGG4pREd[cfk$GDiSqcZ)Q,
+ZU(*hQDaq[fGRmQlXmc!p03IAD(RC(0pRGH(J[&cFPFd[d@r)q(NIaZ0cKVc0pG6
+HMppb8X$)h'EPlRFpTc[lmhNI4ElR$hD@ibiPS&rSED5J9(RfQ8Q[4bXeV[8XmEQ
+m[Gd1,ZSRCNA+0)hcX'b1qVXr$*8em22c&MVS1dbpVR*frbI0b+#j+D[mYcFR!3@
+DZ[*8(kkelq"kqlY-IepPMm)jF$(QY0Tl@2E`rfqYhIHIjrCk%j1(BREG'ek9YdE
+[`0r5IjBR-FLMa-abr-ZFR$l'iNBIBfqAKppEb-2%fr9e0E!rT*3mMcC1(NEE-!5
+6KbeVQ!*P)FYc-V$b,d)mEQC@&jYl+B1UPFl[DU9d00#d[2P-295ZFi8,bEcUm+&
+TEb8N1*QmP6`[(Zj53iFpN6Q&ZlUk!Ge+6&4%`Y6#mHjP*[KchEbNh95[Am5&TEL
+8Rq*0G8%dq2l!$F+"ep8"T6UeF,5db'DhK5RrdT4@%TeH,$bh+QA"1FjA9id1@j8
+T[Dq8"15j8T99dcHFH(h`*VCa`6C9NjHFL&JFLFUZA#Uq0#jPA`UZ,&adjYlZTie
+(+8(SAI$iAJIBlHYf@MR-cr5Bk-IkApIXA9&JXKJiq#lErQ[j&*E3r,YSfpXkAjV
+5(YlH$UZCZHaXBh&Z*h2fe(heI'[VU"Q1G4Rq3qYG3-CF4-M@8IChF$kGa4j(Lh0
+(NDZkL5hY!6Eh9(,E+kSmMYlZ(kqZp#mKl2d[3ZifcXH$*fN$bJGBm'B3Q0Xl$Jj
+LcQY!%V$JcD%aY'%Uq0i["RS'J[,aKQDjm26XHr+PRj8kmae"&1JZl2lkS,4jc9h
+F63J61E+jSd%bfbZBQFpT",LMPZ,F8H5MdZ"H32VFkMb9E'q1lQZrjUSqcZTh2fY
+(heM'pUjRG9D8Z"CaYAcSfqX1"c,@0+@GCcSIFI8Z+,"5[h[YAXIkAAF+5qbYPI-
+jcj*VkA,qeMIYBhl@0b(pkr)@d(kA[DV9j$D9fMb'`X[(b'RjRk-KSZE4k+hS6a+
+(LGa9j%l'mqh"ri[1pJp#ma-(LARI3IC[-9"fPjLiHTZmC"e&hhm(4hH0JcGeMSF
+PGJ3r@kYLGl@3!13ZFI)9N6kYG$`paMjL2'rYB3m(Eir2eD#Fl(k6IFl(kVIFh(l
+(I@f2fff!QqYFHFKq2UppDBqcfcd)heRMllI@@2rI9f12q1UXFIeUU`-)iILA%E"
+eq3`GC$m'iMBHYb'(VBIeEQ0)4mK)9d,)50IV-K*9qVb%PBD[)50PT-K*@8rN*Hc
+dH3PqCj13!*Hed13PqEif3PqG4bpa%NEQKNEZK`h2RZak%2SG$[ChKh[I3G4Hb%'
+4[Zrf-5RMf26amcm,PdIfXGh'2MrMqhf(aphpVkqCq6-AXp4G$FjVUAI*bYhrHlk
+R"c0jp&je0cRqIZIbBcSB(3Srdb&lmel%reaGpmYp3rXaA4q6SchlZqkA8PGhdrY
+IhcDFAR*qlbFVcpcSqMQre4ra`()8qI)hZEfR3h1JrmP,VNjUmh-rIH(rI)9`epc
+[ZM2HVQrhBUqSI4R[fBZpLHG3rkb(3Sr-LITaR2)akQjm8MhUF(`L5HTbFUR%pqV
+p[ciPHUV-c[b6&GPGGCCV6@(bqc1bqmJjG`-paRLk$49rPjk[F$2S-F$2eEX'm[h
+p*IHCdU',LRm`XkJUFlcDIqEcSdHJriIlN9r%PU!l$0DDbbZZVZ&qV&+[-aR2qjU
+eRUkdi2TfHAPG4Bc%VRV$0C!!Q+r35XKAc[AfmE1eNlCf%lKV5PmHYm'"-f%lNC'
+L`i'RCD(RUl+E#(SMSUXB-Yc)1S0jfbJjbcJRKUe0R"cPM$"-rD!Q$l0JH0D$R+q
+$B@%#AYS1FVSGMB3*$Q`CDYKrmem$&fm()eY$f0I!`ec1j'XSFPABr$hFlK)m6,a
+i'$jmlp+XSG06eP$XrAV+(f0,@80IPUb*dUcpAF3C(k@HVraGa"lri)2IH0diIBD
+hT3q`fGp$l#R[S2Be(3JpM(PFp@6AHhN(ZDf9N!#21j'jKpcA5Z$V*f@Z)1+Vi(c
+9X'@jd(*f%$S9d(1@d14Vi&N#E@(,f%$L(""c$a%30TBR"6"e&K!SLPE+(X$R#Y)
+-YC3GjB30(DcXYB`E#[J6GY1j'`KmqZamhcTh%f%(jDb"RVQDqVB82I4i%[HCU"-
+AQCJ6(3Ni'H[XR0D,T8ZcpqGh9a)5#eJqhqcmFajqeeIPr*8@mc0r9mR[IKar8ar
+pVI(irqeErYVF(Fi,VUD$M1bfA0aZ+Rrkc9lN0$cmKR1I+J0JfEbei!jj`-!mRH'
+kVmYhmU#AG$N`(Gr0GchK82h-AGG5Kqj)h9r3rFPlZHqr,hImX[cqTQr(!QKk(bG
+#9mRS5[R5ZP[FJ!rpZG6HEhlNArqcA1lccEl)Dfp$[R**jJZkQEr,2INllRrpINR
+T(rc*hGq4#3T)U(X@STqkj'8L!h!`9D9RY0(2PFkKL%UJla"[che0qM'VIraQ2rP
+0@dVk-pqR&A[8cHQY*QCbrPjVapAP02XC2B88Mk'[NBH(PTL`d14Jl$[FAEIMSqd
+ZrQ[1$ff)jq*`eRTF6$Q*DBV0INr3ST,B8@BdqVc1LmZ8cdT0GIDG60kHpq5pq@p
+cHZY[fc@1@d$iAKIfNq4+i@iJrqiUh34d)H`crkFPI"l$`,c[*54YqT1r-JMS3l'
+6f%ipaLmHjIrJGSArk#FkN!!QI)daImAq1Vrqb,riq%qiNrEGVmRDCfIc10b(Uph
+P*I6ILh@lqkUaqq@Qq'9q6i+(Rqq!k'aEcQ,cXG0k*2d+[`RIrJljIKPIkam6P92
+Q&arbBkicH,Y10mpAa[ETBQ&klkqGZBHipZVr[Z1,Bh@Ekk2pq85E$q(JBklcHH2
+HlrMMmRY,MFb&jiH#qM0c&eZHhi(8j2DA0(N[UhhpVhqele-Kjf3md%-&!Z3rfk2
+lHkP9HcP[Vr*LiRGAIQFqKqpf%cHHCcjl-A(kq&p,`fqrV0Iec&pZX2Bi,$l6hjh
+1p'DhI3QVZlcIeEQ9m5hPId@fEd[-PGhCbYEC5YhB5[pUq"2f8$%emHaarHefMQT
+D2!a@lVT5"KSm!p'Fli0G*`1jVi'*edH$ieE*31bXB'%mf2"e@Zd2%Y09Nj5(YGG
+R1*c09NJ6XrNbX2Hl2)lfeeH4"1lkQ*hYVV2[q"PBG9ZrX"A@H$e%@b1pjQVb@9K
+lAGbh%Y0CNZVa,2d-R!l'bp#4JGPBEH4)ShdP!a9Ei'Ulq"h-H@RmS56RY$ZkqAQ
+ml0I5X)rYeX!qZAa[TC(kAJJ3$B,X+r)@9KN0YC5ZBYCAXlHDpUmJpYrP5dheDcR
+dhija@KN*rjjVQp5YraEBriClmQ6jpq`9f+IQ8IN8aA3V#!qE@FkQcNmj#Q#8+@e
+EcUcSI+rl#H6jr8RHRMqGMmIdm4rqZ-AqCc-Tr'B`@#ZM-&f+c&0Q4rYGGpUjcm1
+2P0"j'Tp2pGapIkUe[rmX,rr6(IE#ImcBDMBDR!e'`p(b2)cAbE[KGa(a1%4l#iA
+Tc&h+rGSF(CeGA9@9PCA&$f0c2GcFcf&ZXhNHIhRiV2l1&5EkhEG6`mKUEcm'ElR
+&F6,qTTp(kN[`m0Fm'5k%pVVL2plZ8La'&kNap6h[Uj!!pMUG,lIpZMhZ3e[JhZ4
+b(Qbh2b8V,D'kNTA#HI8lc6mh)GjrPPEfKqeYZe`bCrEkrpmTa1mrdZ1q`rq8eeX
+ppA#Fl-E$fp,RCEdXMZqpU-*8I9XHTBIim$(H$PF6P-9Pj,fp*(qch@$RFAplZX,
+m[AA&$q'3!,[![1$0p#Kr*-AF55ZiRDC[2A&0(l[lABBD2hIGpVmdKdXKX,bMlqj
+h2eVUMaPe4jkpPGe(lrmM86p6iTLllcGhXp2hP(Nm,Fq01jHCQ-cQ-aQTHDPXhLH
+qZaAp[[0e(`RjA0JlrR,jh8CR+rpp('pr-H6q+ib%43&pR#r&-HaAqljIQ8@ee1e
+e1ef(XqMjHNm[bTcb*c36@D35DQC@8PCAZ2UGj(qhrUe6GTrcPUQllZ*K0C@a[Ae
+fLeZYeqKe[!e[-dYcV1mb41IR0GlfPrPmYFjD&jZhrfkQqk'hlVI50MRER,IYZ)k
+rarq$p(dIRVXhLlL*fp(JlLM`GcJA*p5AbhFpNVcj,b9r(ef&d0hQmRFr0F3rrSh
+p+AiGeEHYDq[Dq"'hH-jRJdZZbPRNSfPcpMPifKdPKeG9ApABef8MGpYUh+pR@CA
+ZUc+r@jH9lrPj@6j@9c(*c@Bj19cr)k[XaHAPG9aXVXH,QYMaFVYU[+lkVb[YF6+
+mAL9A$UkRLe19q1Sk[ZaIZbRCm+8lUQQHkTT6'Hl+5IZbQ8i-TQH$+CrJ5QNhmcT
+0r+DVfjR9Hh+E(fTRBlkFf2XaI+hIVe(Vl,fkA0EMr[f[Ephp[3V&5H@+6k%Vq@K
+NVUMlUjSm2G4*#kL(m"XZIG2HC[1p#9rfklZE[SC[4ARcAF6lY(pRFp[ZVIeZGkr
+1m#0GicQq$5e'8YFP'hHIY-['fHNXqVUV,Ul'abNE1lD`b[Ceq9lU[b[eUh+pr@j
+@6V-VQ)qDc%I+jrPP,IdbZUj19f2)c@aj'9fh(bZqiq9pVLjALm@U0E,Le@9q2L&
+,IPP1cUC6ZULClUSP-C6bNQGUG-GUFTRrGP0*lNcT2FP09`CR9F'8f2!QGM[jcBq
+e&mVf5P[@p[f[Gb['h(b&-IHrEm&DepRj[Sr,cZmcPe2BHhMImB@fmDGpM1fNa0D
+Ecl(0GKAjV[Uc0Cb2Q[*j@Deh+b[Vm[Z-&kFVNVZHqc3i1hkh1qIQr4fh-a('ap4
+hA-m'0ZqrXmM5kl-@@6MH6Rl'4MIPNShLbFE)lDYc-E%lU0K2@!G*eIAT1VZiYrl
+%@mpL,Glb,EjA5FIUlf,Zpp&p2I4GRl8AAHf!k63lqNS)8j&QD5@pb,i@9ke2eDD
+,K1&&l$K4H[TpPeDJ"lLlUGaGm2C9h%f96a0P89@bpLUf@lUpPkGAXYI9l,5F6FC
+A(CA'Hhl9IlAZphZ2ErVqhT9bU'AR2Sd&MQ[cf'XPUhGH[MmVMIT9dMRmIi1[d0G
+MHdarJq[ZUh+c&KhINpGLF6IC[Ap$jZI%m@Mm,FrGh9ckeakpai%EUibhm'PZmTc
+FP'VXrDjH08D6QGA9@R9f0RP)fQfePPHcXFVh9MPIV9q9lq[bXRACA-9ZDc&EPFr
+@GAfBhEjA9F[+l(PCVBmV+lENjAIFR+qeamVaH29FDVi[&iZ9q1V,r[1P1ciNThA
+$QHkiFTM+Q8NkQ8bP2+CQRP-r`T658dcT+D8eAZc1Upf8f2Z61ai-jXGr&mVI&rf
+l,rY"aYamaIpq,pYcAYL[2I41eZDbeEV-2(fmArh'pRZZ9Yk6VEU0K[AJj,f2$qP
+ZcMIR[&-G1YFr2FI4fhdBMq12[qkj[JaV[[lA)dY4Q1CNihTjqdNBhSb8EcT10SG
+YBCQ0R0e'P[@!G,LIATF6Zif%pL0f(X4Z[hNArl+k6P&pph[SYI[SYGl8@SpX"dQ
+chp*53SX@&5DAh)[QCAVF-[[PZ&&bA#Lj'RLiQS!G*ep65GI`pPeH*X[LiQb[kVC
+AP9XVZVf9I9l,KeHbfh%h(Pil+ihZrEh(9hrYHlQYalI9hA`f$BTD(k2dHp3rapl
+*j[AHPHj@9r465ZFTTAaZ&+rKa2#PI&af%jq1krSCA)DAdZMPjAMI"qE"G$lheI$
+qVq,Z2Qq'*r5Mq(Ffr"irq@rlcGpedI"SpRhplNGcTFad-R4jh2mq4Sr&NU2`T1M
+a1fZFc4i6IA%TfGa+I6jdTpER5Q-jXT*fdc*fdTQ,AUm-l3p*D5QUXjR9@FTXE+8
+feP+EH`P2DX,'[XUkcVT5qVHVbShfC6V4i(CmZDl2P`1kj8$'FU"hr)JC6N3-aai
+'IideRq0!dR&QY*aB'UUjV998lUZ('mLRi9E`SY*4bNArqUq,b[@lZaHGAVcUpHG
+AVcUpIjk[GeEf6IpeR2kc&V5Il@A%UB%c[m*@dfdp125CI6mUNmr2FQ,8b2)LhmM
+aihAiIM3mV9aXc9aY*94Y9a)faiFEfH('iP65m5TM@04'jp45mqRTIq+HMl$K8[b
+F,jlLCl5iQITh-TfPc+I6ZXVp(`G6Jrcb[`I&`Ir[fpaZHpiA8h1%!RAdp,eDQ-!
+lrKaV[L8YG94ULVME[M3phaSfZj%25mU(R1A'b0C$a0G#q5`KAPP&p1eLbr0pU*p
+INcN6MI$JB,l2k[UlV#IU`[jX*mAk[UIUqTqVkN6q22UVfR[2fmUcl6TIUPm[qMj
+rcm[0k1m0KbB[+1Bjq"ck(4p$jEfHdepmPp+rlpGL1GMrEqIJq[lY*hAZaC,hBX[
+p(@iHJq2LINa[ae@9rR*eH9q$'FA+heAPElfXE,F(CDlHBhiGPVZ6e0PVZ9XY0b@
+$FVCD,PE+6j28U19XTMNhi@[a$XYG[FEbpPV[CbYAaXV9mI+mZ,Zq"&p2IX'i%AC
+m',jk$GDVc9p9!23Ah%d(am2brMUGCI9'bq2KEVJEVJl[H@fmraa[cIYV,4e30e+
+qC3c&fZ&b3EL!PlbHmIRJ20q6HP#GjpKj3MbK(hS5ejM8*qEjrbmc[0Rd*kEZk2&
+B@imDGq,1mfBQURcqCQZ`XmeheKQXjAjVbDh0DkYb[VehFI5qae1ClZik@0qIKE,
+V9'Xke6jRZaI(pb,SZTlNA5qjIaGG`HSSreh"fATHaPElICAaZ$eYp+I"M0p+I([
+CQqB0mIXcRalZ,m'1P2MpL&m%R[CRi*2I5JTmhIpEICA3P"Eq,8ErVFE+fI&c46B
+'XeFmJh`aI2i-A6F',Tq$&dAZ4FplN@Bi-@6pb,hID&"j@GjRjEAfGeaV9U1R[RR
+HE-j+kKB1ifmErh'l,REHPkfqZD$$AFcNZZm(PC!!T2iFMKFUPl2P4T!!j8D4r[m
+GI1AeKq6(AeM+I"*f8TcXCCbPRC5PR9il)mL,TDR(@mA5fh8LkAQaI*YQ$Ff,ir0
+Libf1Fk,*@eq&Vm3aG,a-GlXA5m18heT+ElQ5RZaYRaihRmCJh(-d8E6)0eV+CXl
+%"cPRB6PpAd&pA3V1YLhdIImEN8p6le6rj[ra8dpEGNEdAh$jM,I0p$hSR,SkVhU
+1UkH![hdq9I[9mR`rHlMZ-&q#hXEQaYlINk[Shp(qk6B+l&2NTkY(&YfC@1kr2c9
+%(JN30c`fmEiqG'rIE`m#hLGPF,RMlQjcIIACi!ZjKpVb-Gb1fQHfY1GIa[jbE"A
+BTmP2k4[HlDD62YDDQm[R03Kr(ISpah%VcqQIT*q20kI&Fr,j[,DDkc'E`[X0rZ2
+)fXePV5Dd0T!!0Ec1i`84rG)dhN@l8LGqER6AIFk&$Y0YDp6IF$fY[Dl+0d)m(j+
+h`rTH0EmbjjP[GmRLqrIdI`5E"ABTmP2KSl@lCPc0e`EMYX,U2`jQBqHAiPYC@pI
+G@P*XV1NpZaLp'`LpD[2DG'l1YMBbXkeG'l1[Lr(B4IMXBAp)fN-*BY['eGraShS
+Ar&MEIU9FEF9FEEeFEfJ6kYR9qhC9G*k,h*eI@Y!KYq,eV1NfeT&heR5EkbT+ZbL
+eE"V1aLheJ!b(SA@ViICe`$Kpe@4XC(M5I+MCMNdZIip,S+[IrqBr[1fJ@hkYerq
+Z9[[IMR2Rd&j-rMq'&NHR[rUqr`[Apq4cq3ZYISIIa[#pr(Ghdj55q(kqGkl`B9"
+rebq*9FRMmVJBlYY"A3k$YXRCdeI0HMi%E)fI8b-E#@Q5MGICpA2mZ"kXM&[l15L
+hCb+FL"Xr3im$dFV&hGSF3qcXj6ZUZ"ql%dmA5fI8P-a`i'ciF@@Xj659!8USZ*!
+!TYUD"Xq0XS(SbPAXl6UmMB`0GbD+"kXTmHKY*6VCbckXIci(U`1kb0R!aQ*Y1T!
+!*2#@I8JD!r"kcJ'VqcKqIC`p2D6ZTXjfCa'LjI(VCRqr)a-IMef2klGFfkEqDfK
+rVqHdm2kP$JI$e[KLGEiIeGaJB,XX&KX&pRmAeIaI9m2#I*JXMJ[`GGpE(Ij3SNK
+4Ff&)@N,4f9"YDk&99P"qrP3m(b)H(im15iX2-981IiN299-2Be%EDdmEI8h@-QP
+RYlEeGAcI9mVRHVj&[kI!qI-h(Uj@hpc[H$fPrhGakh8i2DIFaY[ZrRYrBTIRmMR
+EbPrKjA0pQPk2R8YTk&VYk@VTShY8dEEm+P)1e96'dR%MCLUM5I&KicM4Zcj%,VF
+U&HeN+UVS9&B`TqdK5&YXBQ1L3ZfrEZVHlG8Kdr[I8112irIScYUrIm%6pr`d2bi
+,XF&f)%l$"BA"BP8P#H8NmT*rUNZKH05AjrkrP[1i`[h[UILlJT6mHEiH+k1AcIR
+kESCM0jhf,ZC`Ya-be[-jhQc1PjXTkA1lM"IrUDpUVV93lfRKlAL3!(8F@(*FH(K
+Z9#rI(K@64(YDq,U5*V+,-@F@6Y)@-jNAYieA[VEd+@d`+ASr05r`q@PqI0@rTlR
+kI9i(dG6'h(ZH"`HdqaMEMeqT`2Sm+PqM-frU8[mI)jfdTHPjA0f[cfffTH,Yl@,
+fI-T1cY+6ka"eP&c&M&dPI&e9G&fYE&hdH,CFZ,qrNYC#V9MGV6`l1LZUUpTV5QY
+ZHe-c[pG"ldeq$i)H*plJI5kFIeqQDleEVp$dmE(kH2l6hS%Km')bhAB[YF&"r0p
+694,+XL89K3k1cL5(-LGPcBGlE`kUiKlfkKd9h'RqI$QqK'NVf0M,k(hA4LpETE+
+MUp[lhUk[TqVjA[qVj(`HR`IiCRiI9b[`&p2dArGr#Adr4pc'r"ZrRq$f0cr$b2I
+hQjk2PG2fGcDHGZH,k(5fqjheAdD5Mp#2ZG9@dHNVU22f&(*f0(M,1*h9T'keV$q
+2Q`l*See*'9p$`r[E(pAe,("8&p69r3DMrbIeREfDllhi86LlETG6IF(ElFNUaMd
+2a'RRhkE$(ViSZR$`pp$ch3Jd9e$hYa"[HE$`,@*JqC%N,1**f-5EX)QNVSK(9&@
+8HfjG([YplhSERLi'jY2Qh24qAFr`cA`HRZIRk["rMe-Em*HYp(f-Em2Vp6Jram,
+Frac2`HTZHPj([l6FmcbZRYIRplEERfY[dSY(YkZqTITPbI3M5I2MCqlMD5kM89c
+'fe['UZG'[ECSeXP'9&@4+ZL`@)r0KZ6q[K59mml((RBiml((RBirpf1IYf[4@hG
+,D(rVmp6QjHk2Y9N&i1X#lSCHmqARcfGA[JrdklkrlXGhHJjRGrAa[Gk[LDcE9@J
+Uk[0FZ,VYqFNL#1K$i)2BCe)ZZi(@UMMfd2Z4Fj6B&6+BHSP*#RP*IK5NhlXTU2F
+P0T`*6Kqh-mrI62cEZ$Kk+[pUchR0TIYIYh(5G5eC5[Ld-KFdICVd54-2Fa-AG6f
+6Z`'[J-5lr0j,VrNZqalc5lqIrVm[,lc5hNp*A0(f1&jhM6YIRE@BQ[6mqccAB@1
+DlkZc@FVFej-I0Dk2PIAV1iqPp2UF,HF$e[@Tr@hY*2qe&dqrLqI[qY9jAP(clS)
+k%2JJpKQ-UmUH!2JpELCAiq(+G[#PZ&#b02#a063B6KkcUeAPhr&mZZiqJpMNk$c
+qAjFM@DU(QUAC6[4VGekI6DCrbIp6YE-j+iKB2REH0m'0f9YYk@qhe[3BDj2#0pl
+qH2l@CirDpYpIYI+X)@aXCcI@8clXE5mDr34d)I""lM1T'd[(keM+@mE1FQ0,F[!
+VS'$VB'(V)%M(J6(+JD2N`0Kai'miXeB98erc6d1$SVZV[DRTlRZ2fmVhe+qAr3X
+'hhqQr%Fck2jCATHYlRZqeV*6@GhQH0X[+ihPqKaXeaD[0@PAPHM9CVq($cAce-c
+p1TP1r1YIK(@[-q4lNcjAZ5QVi-TYpr+HelFclAY60Rl8TdGl+I`pQ"fHmQ[TlZD
+qYZi%Rkm$-lU"j(Tf1aQYATE2D30[R,ACcA&lkfrhQ[iirrleVRFrGSj+lkL#1K$
+d)keckeR69R#Mdh)hARI"fRdm0q#!Y5R8jG[`G9dEq*qk5k-6JGY"ame0BIL8Z$U
+U6!Uk6pr&T,,M8P[#i[(KFDriX,QApA#k99#rK9i(*hp&bD5LB0YH4[pVb!05EhM
+lrHmEIeA&!HrXU[Ih[%hq"8dh,KIAaq)J31fS14lNNj%Q"IF$rh(Iir9kfIq(kQ2
+d(QITc2@Q,#Nm#YT2!VURGmUThFHUeh*UYGbp9SjQUf(NmUJll,mB#FLJd16U`*a
+jcCpc9J6McRY98jlA'R,2L6PRaCbqiFjI9G"rc`k$rRLcRcF1FqDVRHbUChXUU$h
+04"lQURHqUCh[UVU3!([UL$hh%KiQSKiQUqDZP*'ZP06@6-P@61TV*5BV*5LVFG-
+9Z1SVZ*je(M1KZIVFqQYkDmTqE6h2$jR$YkZbUlEM@('Y16@mQb!PQp#,3+@`Fjh
+%Y1*FLbm'R2h2eZKeVUMe,34Ha*+TaqMi@2dG6I`0(630(8G5Dce00CkTQTIK68[
+8cX[66S'br#RF[`rPVTc&9dj0eNj)9Nj2ajb5McQUj8jQ191HKb*cb141E$#mDFc
+`%p6*9FjSJ*l(Me0"TJ*8DULiXPXB9I58RTdP*Gm,KmH8q[1IfiHrkR$i(f[fmEE
+0Lp2Ip6Y4QXYADc$eQhMIjRVcjHhTHch8E&q["bhXH(eq(phh+lJqhhImISfZlU[
+@pLNhhXdRXlkNpMIdRRm#Neh"T00lP*RIGT-Y68NY6dKe[B5TT1`iHiq,LELrUYa
+GmAF9('h(XFEFHRb0PXq6Z0,bYaSBqbcXIFC+Xh'4VYPLDrFGIBEHDdRRf@eJHKS
+E6e)(&b9Vk8eDBARH[Er4hReVVVAF6lq-34d)F%H&4phL)[EIAa(DpV(T[8rr,lp
+mGQINQ,60qcI424Sk+qSk,Si(4SICkAbqp2926q6TbYcef%l+pi16cQFXr)a-lSU
+I$emlfPG1ph@cXR@`C1XJjL2$c%H$0aiFhbiFr[V#&$RrGM6qpXGCe)drqk6XGCJ
+@)5eZ(XG9lQ2QpGKV(9H"meKUXM"NpG)eZebFlK-0TI(Mq$2b'Jb@HNmcNr(bX[-
+Cb"fYAA`FAqZQh(rmTBaj,(6PHA3l@qSp9HdHT[SP&I40TdClHG)"jZTkFVrrGGK
+1KIF(,jc1@K,HRTm2B6[D9mlhGG1bGG"*Hc&C$c&C"Qkb(0ab4ia-Nrbidr9@-)P
+ch*1aKB&M$`GMUZpKcqZqa)@'Um'$2kllX'Eed[AE(*3HrdZLV2!Rj'Gkr&qEVph
+Pp$kHcmI192NkI)eR(MCkYmUQpIU0GV-I*Plc[,[T6fe[D24B@mmDHll1h-a0I*j
+r1c8eAajVdkk"jpI0H6B`0$Cirr6VX0X(PJRp@#MrZ[e-[hI%q6`qRQr!pk*K,lJ
+C#PpISR,ck@[d24a[0p,QAdVKrHlc*GGpM8B,fm&SXjR2HmM%chU8q([ChJk+ii2
+MRqV,UMPlXd$dFMH4*+mLIGL6Gc4c&d"ZYciQ(jm6l'-jm6r16jm6l-5E#ZYQqIU
+XPe)NaVXpcp9NrQ[09*81-efSZGVP*lVm0TI8VXAj[$,#ejB@j*KPC5V[D($4iqc
+q*6$N*Ej2`AfE`Yp#LH9YZHFTQCfr2f9(U,(Sj[#pGpRDB,CB)`Gk*,4JlcjhJjH
+ii16ZU14ZU2&hG(KlZM`ej%`pj%lH*0fGj%`I2KpER`iNhcXCci9r4cG[%QlJPH5
+jqUm&5[)mr9C%PI*NVjkjfXNTAdj+rU%Vq`5[AQ$Pcak22A2ParAriE"c0I*Q$TF
+m["C(1i,Vr5q(+b[8U2IP*@kVZRe)%VEiq9ZUMi-VN!$UqPJX,R-&PF&SqZqY,LV
+&Cc1AT02Mdq(ZjhJiUii2Fh9(KVUMl+lM(0PH3iNabiNh[Vb&%QrGSj[Hmr@G5MQ
+rh5I2eQ"c`PVF2cp9lQ3Q0GKZHB1hQUb*-XMFlA*UCI(*Pdj-[RNbq`6,DeCafIV
+TUVrPHa2`rZI0Mlk8LIm3qmiNMTVl5k$0q4h0CQm41ppEjbPcYYRDAbHCSUAbE1I
+MDDbdN!$mq`mU0TV$biIRed+$jpG"`eR0BZXKk+YJiZaRFAA3C'ZJbrYed1"E6GI
+C@N22Fq0RVb0RZI$dGj'dGh'e"iq,VU4Y6FaY8!qEK)fUY["MH9Dj'0S,A)`r,jQ
+5KcPT)`CV%DA8e[qmeSGT@H"qLDPZ((m(3`1qV0"NI*P*UAmQ4mR4f8I43m4CE2I
+@&0qVpkr6c&q(mZ2YBhq-4[I*XjbDPkh(j1[JGcBbNl,qcADZ$*l#[SSFaUE$53r
+*SM[chA@ZSRh-CFhp(pbEZiIrFPEiQ$Ib20b8'ZdI-Njhcr8XTQGbeE1pcB6F10!
+rKFi&eJAI"Q1I3rK-D*!!ZSId@0MCeR0TSRai2mP$pl[MB,XFh)h-6l0(Kef9B&d
+Fh(bhNpPZImR2PIcp[IFfXY*qDchX9X(#acFmVmc"cZ`XCL$TTqbm@EXX[$dfIXX
+['mI2eqMMB[BlL0leRApDiLIjjLikKbZ3!(r[&frfi0rLlE)`DMaqC)c[Rkqac8e
+PUbDlQZQiF2(fPI6E$q#N$[b3!$Sb[Sd-rck2-,qYd5Ejm64p#Hdpk!mhjr4PH&e
+heGpG9R1RjVfIBXS1&X)2I9m(,9X(1eN(bBm(699PQX#bc826Ekbc8EappAd%E&e
+RSF$%G1DMHV4cI2q+Mr*)AY$U,I$`IlD2R58'Zf&VPChGm1cQZjXCV*'b&@6Z[e0
+Y@h0,qfQSriU5F@E1pchQZjmp-A9(h1&Yr'REc1fda0HajpTQTV64jV,9d!Di@aJ
+B5carfqZ`[CfpCDcmeU2BVi1&VB2I9N(,F5`c8(bGTCCL(T[1KkE8f8a'dfUX*Z0
+,l'Ym[d2EjYCCf+[Zc&ee$MCJrpbk[YPlE*`DM6UqhH@-ef&I0C+XRI(e0T@mkPr
+06IlIp+8-DG`'aQZq0%fCfeFHSE[p[AE+0RLYDh`m&DdF$%I0TVAbjVB9NeSkfDc
+eI050K0BZaQX0C6@$XTR!XTQ(TUZbQBhMQM,Xkf$M0a@mf`XqCeZK%r6Q1Ke)Q`[
+S2rH`Yj!!Jhq`YXT"U1(c)(BfFeLV'DbeI0DDXRI8e20VEUPh8Ib[j,YKqYQIQQ,
+M0kMRa2bPN!#MQqKJG#Ke&lmYp2HIdINk-VkhDImhQja1@Z*'CNY"M2)NjrUdAQC
+685HSkZed0&SGVjY&cm#mkN6aBRiC#m`1IUT$9b1UNF$CcqZmc9b1"VY4V[8eZmd
+Y6SEM,5[IhRPdfTrre&RI%@ANVi9$KlL0eVH0JA%6"h%6$A-pLVS"j[*AKLCBh&,
+IjDfNCVGkHdaNlVYKBp@LX1VYE#6KrPbN2189KP)Ik++j`$,hfm6r13Z-#je@2Rp
+RBDU"qA9`*[A@'"Xl$!eeMT)'[eYT0`2Bd0YPS(m,L$qhGHGr04epZBqE,mR%5eC
+1i2P4HIKH2idjkHGUjLCmRcq(QTR*F+Cl#TbXcRI2UT18p,rIYrqH959f@idM-kl
+6e@-R0$X+RUd94eGV85F,`XT#b0&8C5&iP&bm$PG5&r5&r13j@"bp9MTMCe'UP2#
+eFT*DkS`0R8B'ZUG*+D,@e8h+HISH0PT5dj9"qUQmcqLN,&5hcIJV*V[Ub&#fqbk
+QqpVElMC4Zb0Hm`Up#KqYEj+DZr*YC+GpIAfNR"mk6KqCP)HKSV(Ul@aNiHKfYPM
+$F#qa)A1"Fp3lZFKVE,9`*rA@1"Xl(932-eF$c09!e'ZY-rMpjTE@AJANYElR$Fb
+QU2kY`"62bjRSj#lYChX1C[S&,LS(!m5"`+@Rame6aZfp+2`0E@d[k+lJH0@q"$m
+5Yb-2[Dh,4-*SlL5KhqdYrVd2Xqp2FZKjFpbXADl'GMBUGcfRbpIS2d6Z+VIac[F
+eh(Jk$fE,E`I3f&TkZSjQdJm@EYI8JfNaEHI'XjMQklVFhA3lllq-jZYkNDqNqET
+X$QqI$[CZfem1bmb(9DRQDZ$l2XfP""f&C"dpG1k+[Jb0LI+GjF'adG[AAP,(Mqc
+rhfIr[5bZ5m6j[$`@&ZqilL*K2Ii'3rPkr`'p[e0ISIJa[0kR-pq9`q#`9hiId[m
+k'5k-EQk(*kr4AH6cf8SF*SXj`lQ3!0$!JbAk*AXUl8B5jeNRZC!!pf6Sj,Cl'me
+I8NiNhVU,Rkc'4*Zp`1I%r6)Fq*UEb*jb(AN68X0SVc9if*-E2pNKHD[+4*,CqU$
+29L5qcf[2dQ9LCl@eA3QmI%d@KXEl,C[XHPZFMlml6E(qbXrM'eF[ecFpGp6IA0E
+ED1GhQmXB2BemlNkfGbpC1jlL@2P3G4X,1IKdAb`pV-Fc5aYl*@[RBbemf(9p6ZV
+@[kPVrY'U[Z`kZ3YG,$hdPc00J@QRKd@SXp*"e'dXD#$ipC1jHYRFRAc[C@1JRGj
+Sc3a'rE6IXkVmDV1YckfidFlra[1C"l'cRFRBcZAX*h29d(4eN!"e%H$X+UceH"D
+DU([G9c06$U[-M98rDkrU4U[m1-YGI'U[-KeFrDkQ([Y6c09J@QVKdA%Xi2C@8($
+@-'4X*hakqGd9G1kq2"hQmjfHSHfb'IjY0Y2N8SpqfU#S[Tl8mqMbq&Z['RZ`cY[
+-69jjpYQTVf)meTUk"j0I0CDaJ5eRMciGE'kVHESjhKlbbJpMB6Z6VP8aT%dIXfA
+P3GK4@HS9`fpc(-dd1Um+0959UC@k[l'-YGE'U[#KeFPDkD([TMQDI!Y04$SYKCP
+RICXB2C@%lLLf9G1q2(JkIH@ZHJp2)BcQ4rprPIM8TYX&%lMkZMr&h'JRV'`k8pL
+VkHbGl25r2SFpGd1MZU(8A-68fm5LUZMV+2DlhTD[VG,9a0pqc'G+LkP([YMdYAJ
+G,d)Qph[4f86DmZ*4@9l%`el3i[S8-L2EbHdph2DqkRYjBp23ILlM2IQqVFi,9I$
+(f2c2he$eH#RZilM4chr'mk8&2p&GchMhLK($G#Kl+pJa06lX5Lf[4e9(YD,TDRV
+G,8a0pqR'G,ANQD6TDR!k9&%hY&dGM%f[Ua+,HhX1Ke&a3k1j9$jIRcf6k"6-l3l
+cHI"R[cGaFi,2qrZZCeP*IJbhcbA3lcaVc)H,N!$a'#hQ2dRk+qSm'YdIimILYj@
+6Q+jFjPq615r)R2%lRM6RMBDVR2'bG91H0Pq*3H*RUQJmB#H*SkLJm688m,`GK6d
+(LE$K3["fR#KGlYH&3Gl[DD%JReDD&JkE(BIhBAdZ&#`IVdm,"qP88'(eY4#`hT!
+!%eY63B[cDQ&LrdF1JNId90",q0`k#Am6Kd'Lm(L6QRm(KcQ`qV`jcHm1FXDQFjp
+61I,6c[CEbYqhRS2HbN$`G9BIf[#E'#j$mr2h@kqGE"AhMZhF[0pPcSIp)hlemGF
+#hSHbZ2PZCl#hAbA8Vi(AB5`je*ZkI,61STT'FdG0)6Nhkq`UGA*d%ak18S*,dFT
+#NYGYDI9G3%DADe'Vlq&*F@&*9F+BUm#SKHL"`Ee)8a9B&6#SUR9Gr#Q0GX+R95B
+5ee&8DV+r-"+#5dY03Bc5m+FqYjY2jIJjk8bHcbHFiHHNFj+4ITaDVKD6GEck&-I
+J%ah8VpQ$JFk0IFf0Hmk(qrR3rQYjlXEJ"j[#h8Vq$VX,kP[5EZS*Qi4-h#*QTXC
+36'l*UkZdU0@EM1VbN!#N2hBRDe'U*UpIDe%,He%,De-,e5F#A!Kqk3U912&K6'Y
+hY6UXT36'Z#5@kkQ*RP1bU06+BDRST6&F,Dik4hH+d06j'4mH8d@Kd@4iY0YZ4#`
+hlDEJIhDaCh[qMh(eCAjIJL@I[IMcIUBUpbqEmR6AQBcH5pLjQZ`jdeNHE0CDeQY
+$D`0EEGaJYM2G'dJBA,@0")cZHTp2Akc'3C,Cl#ZeA9fPEUZVYDh9C5(KrfBRDeZ
+TbN13!25fYE$SUf(UDk(jd13XX#ZKkQYKrkb&G$mb(*@815eZeVY9*`C,AIXN!4$
+N0GlX'3ehXeZTP)2GD@21r6mfX,,`-8@AVbbm#&YZC$l,pFHNr`T[m%hE2IcH&IE
+h5f2`'ZPhZ[`Am,k9ll,FqKkr4AP$p,6hF2'8-K8E#keR9fPcV1VYER@C5*JrFa1
+eZ6E+`p2YEQ)!k+kLHM%`ppJA85LZBRl*#k0[f3[MH)2a#bY$)Dlh*!%4-2VVHK`
+qZXER8b[CA&&+pcDHEG%[bU`fjj,mV&fh[3r,h9MrjfHdb%PpkH`*LjPHhJr[jXD
+cYSeNHqMQ`rqHG1r,EJ20pKFQ,H&aA1T+MKCDCf'ld99jFK16rTE$KkU6S*[cLrr
+cXT!!TJa5e*Le-D(DYPm-9kU&0V%ccJ1$HT!!T[LAl#kZJ$($KDNb*8%aaD#6iY"
+*FHJlVN6Rdq4j(J3ZKRF2(i8K@kH(qrQi(1Jr[idcRZ035A&Li[M4F1`E$FH&LZ4
+3BVNbQAjFTLSmTh0EPCf@dGP`V@(qEGH[rkV6j@GkkBVSRDc[re6HpDp[iRqXN`8
+#kQqe8DLR-I2j26ehQc1&VIp*6,9QrmH25DIP8Q`j-AHFR!ip"bT,NIkilDmQ&YH
+4qb8SZ6qc(DRNaD,N`U*Jfej%ADmL%af&[H439A(KEhM`UVMd&RaD!p2r4UU$q2$
+RF(p@SJiI[H&"`mYUDl6dpMUBfeG4jjd6bqGrIT`VEpHkrKrmY#F$mQ#c(1h-c1i
+'SYD$ZE5JbGP1Ck`S0&Ar093IZd&&(K88HJf[pm$LqGbi9&bi@ejF,D)R#f&C#ep
+B`DYK(6aTkk&TJ(A`Y,b1(a*QeR-lbH(8c8r8c@TU*h8e%e48ml48meqb53H$2e!
+$KrPK5GI#c&G#c0C#mU2#e8H&UqAJ9FAqFaaSYPai[1N10&[Fj6`VhakD,Hbp0#r
+I,lhPkDF`I,ddcJqATj6$4p4MZbV04P*f5dfLVr,TV#&Kl,!kAcG+*lQ,ZC'Kl,2
+@r@bpaVTl$jDkmQHa@GZj(0jc,AY([1M6FZV@9V`*[!r"cCV[ZE#KmAEF`mD'hfr
+-f8DaM`9q6[qFpr$Q'GDb-kfMTp2B'GDBfH`Vc1XCfMAT-jaR@VM1Y*HPYDk(4'F
+b[-kdPCB&HXm(qXKA`rdb6#pJM%`Ci,6jUk(Y+f0Y+f(a)mD`iYYj(J3c+RF4j#k
+dm6pr[i(`82lqC05r-Jb&T'`h-MB0JhC@X2ZED$h20JC1hJGcF31aZXV25fM[Br[
+42c4jQpAPHl[lRrrphhXKZqM+l2Sj[cll0YdaZG0-pTqK3k2S(N%ETq[BQS!Gpme
+p2E#qR[9R[8k1Ep6Sr*dXhZ`(dXhkp0(QX"3GpMlR9ql6r$+pAi-hIr"QrLpqH[2
+JcI2prjIIRV(Td0Kdk'apk*a2HLFZ*YHM3lASS0l25!Fp`rH!HEVqRQh!eIlq3rV
+(c(HpR+Bc*plpRrrQ22ZXc$e1ifRYHl-aB%2j+[KrkGrrTLr%ahLC$YmKiR1lfma
+rpJ(HBr)H*Ej$a+e#'#[3V)B,Rpjh'klE)GMaG,LZll,!lVl'3reqh(Pjeb'[LQ,
+R[2ah$l0R8&J0`-!lM[CR[CMFHT9e28XUkViIYEcFE@(Umhhhkp9p1%YDllRd[Qq
+[HGep1(h%jehPchdZVpHqrVfrPH6S[dkEbY(j@Lmhl@GcHGc2pHjd2QH6jAkCr5k
+(5D+KdAfXlSXrpV6D,9DEq[ED2c2dkE4rRd1Lr4Up0S[Nklq2AGGm[cI0m`!!!!#
+!9hGRCPCQ9PGRChLTLDU+L(H)DCL*ZUPkGiQVQBU*LTKhHBL)KiLCQAL*Q)U*QUZ
+CQCLDQkQDZCL)ZBLDLCZ,QAUJL*ThN!#3!)U*HBLCN!#V!*L+UjLJN!#3!!QTS!U
+lUVZTX!ZDQRUBL)QlUBUVZDYjQVUD5AH)L9UlQjUELCUUQEZCKJS!!M*&0&9`B)!
+)&"0&9QCRCfGiKf"h#)H)N!"RGS!!N!$q2@@qTe'ffH(V,V3hPlGE2ElEDEIE4F'
++,TrQIQpH+bq9l5")9F#5+cSaaa8-cpAkdk[T+rX65i02Al'1H#I[h2Ap2Fpl#AT
+DHmk1M2MX82QjRX2VA286@fQNdA+Sd!Lq$'TA1Je[Hc@fRTCHpMB5k$)mR$X6@fS
+TEAM%Pc0hmM)aDZiKEDQ3!%(S#$k6`,Q2fr#cFeA9,2IB`F([F("`IBQTi9V`rMc
+V3%rfer&QNeFHLj-qF'I,cZGql09eNQeiaBIZkEBl6k@UdhXC-[68SV1JP@p,PCM
++Z0T0@kHAb[,TdJ4pI*l6QpAV[$VqMq'DVe#bRKpPVYGUqSe'9#AU8KL@9[Y"f2I
+h2Jc5iD@$CEI@ph1d8+ZY++Na&cAJaAXeAA8q(Qc#2J`F(FLXFZ%R94jHpS*8IGl
+bqmI*YZV5pL)Z"IAHAJDqVNbkpCjSHNeYcFB16EE"dMSDfBbXp0FI1UlAM58`5pU
+E&mV-B2NkqGIiXeABUSj9I-jR-k!BYeHXEI'[FjU112065GE4iHE0!Hrp[Am#%RB
+aa@FqeYBTfbiA4BNd[C*6b@9r(1cHRZHZK6f9$0GcDcJJh'0f%*Hc8rQEVar!d(!
+K6qLTrCJr8l5GPlfGDaf9$Qk199hN+RmjMXF8l4llKkLmQPqNp(X+[jX*1eREAL6
+V5M&(IbBm12*fb3#dTf8Ghp[N9jURdipVaNId22Ur`[[l*UIp"A!Ka4PC,fp6Al'
+P4%lX9mI#[-QD6Z$(J4pq[Mqc#6CVCVEE,QSTTGS6e!(KMI,&#TYBpVa*pU#1fi@
+IMK06rTRkE8'aIZkD%+IFcqTqi4hEGU"ffRk,NfYT3LRkclJP1h@8qTAap*0*h4U
+F$r9hf$&08qSFNJ2r9e[D9kmdQi8rkNIPiNe6Zb2%hpA`F'ia*UIH,J&lAkrEQPL
+A4riER$`*fNKE@5@Q68@VKrfpRUZ$BK,CZk%pZ0#H2E@P20GbGHY,Q14EeVkpKE6
+UAPH@5@jaIYHILA9M*PY9c*hQYZEI3hXdXpHXPMiQUZYphddY"B[l@YR9F$13!*B
+e4ER8m,IqZ#0&8@j`[SqQK'NU,[-cf1lq6lN+PkjPK3ffbc2SAN+GmK#d#(V+rL`
+Tk&4f`aq"#Td#V-lZZ`lqmK8q@T!![YrjQ,UCUImUVZAfhF3UG#Tl3hFhSANdR4)
+32-E1kE63UD*X0hfRe!K[c(D*jVGG0#5ZBE5X4kci,'UKEFkPLN["QF2lAi1Ujh5
+`Tk@K[1M-ZfpHcK6k4`GDhpIlXe+UH@iaLiYjakGZG)k&P1VFL[#TcFF9SbFErb1
+&Si92LVPjhAIBZ0h8+RaMX#K$l")CSda3LYDIQGGq++&EimZeialHjcGhHUk[5i@
+Ze2qF+fEUk,P58K4QPm23HVQYhXVR)X3UjacXl((bH&iRfHYfX8e'l&-@PNPa*U1
+NF'@[!KEjijjMBLjd(cZAZkAIBI"KEmii8MdrHF,6fIJEr9iZ64cjD@PLKH`UD!m
+iDN8I2B9I`Xl08jjK#a(M9X,R0"#6q4cSE(Rq,biZ2,mJdG4X6qN[ZGblkkbD2bA
+)C&Hj0'm)bbX49B92P($Q5a(AmM(eer04dC1@YLGLc8HM)bKBREcL8[QQ)Jafq`K
+,IYjaHclRTG&k@66qHLUcNLMk6`VV*Trc+1[2#%Zl"YKTU0C*GCfGLK[B8EKJcQ8
+1`bD0bD'XV%m*-`4J5IjC0(iM6'64jT0BV1cq'KI`SjP1UJ5@2SC0'k-ZXSV5kK4
+kjAR9j0(Vh,64eCU2pDQ2lS8Hp8B*ChcNJMi-,McMe#Ta8VUV%[qmKFIM8Y'r&[2
+8Y9d$aEmM9PddYpkjb#@NLThG[qM,jbYFkDY@d0ljeaq99ZPjr0k(@hHQ`,[2Ck&
+Ed(rb`Um-r!ic`C[IGqG#Ya$ZqP@h9$NBAMmjJrApk&ELU9MH+mC5YA$D9Z24*88
+TS)SVELH(T0AZlEfjURqKhV#[&ff2V-5&6r95'JB3r-T$Ud)6925*!3EJbiq&Y*V
+EM[F$C`F$3Z2c[A5E[9ErS1Ip1a5[m569MCV243YrpP+9A5RqkP,ZrD8p05P[%dT
+qNP*,&2$LLCkpK9bApe2ip[kLdEGr9r*RZ6Ei(blVMfrUU8`1a8T@r8T5ql'hqq`
+Vje[rblN0kc2A%,MpEfEMI3&6eNqiNlCjH2[[mFe#YqbhiGe86jZf[)mE2Ebpb1E
+cqmKFq-X2'),AN!#T"Hkq"&`pAXi92A8KEX)C6I!q)5'@T#X8%[)*!EhiF8r4p9Z
+)915U(C-J2+IG`*2B2kk2fhFBhC`QNQ)m,pe2pla)5IY8IA)rrT4qV!qDTrf4iP[
+"L($XdRXTdaR$KhG6mlRi8rr%(Tl0`qcm@%RY+GeB1c92h%I4XJml,1l5DTlDe4b
+F6hKq-brqVr%fmA5*r%e1@lGSHB)92FGZd5(ZZhD*$plYfN)5r`GZe3e&pY)92HI
+I98[[V-Vr%k(#VrBK,rmT'Ui4rr8MGhj)fh`%LBT%R&8,Ei6lmT!!TDbr[c1kcm8
+eAQ&)#62rKdSk$f(hiTEIi&V65$e2*b,[43Srm*JeCcV%lYCU2m9'H*!!Udk1[f0
+#-B#jb[AjPH[Al5&Y)NJS!RQVrkq9NBh33YUM5@UmA+d`*9T8mZ8NEieRd[-jc'c
+Z&jX+eXk9cZXjPF&I$QTCdpd,5+Kq$%bD22fZ[f%iH'E1kQTI3BCjK-re'rBmCBH
+64h0@+dNTJCplpi!!!)"AGQGf9QC@9fCfDCQ*ZAQ)CfPhQ(QEUSKhL*ZDHBL+HAK
+iHBQ(QCZCLBU)QiUCQTTjLCL*QDZDQ)HBL*Q)UTU*H)#!QiLJZSZ*LEUTQ3Z3!*U
+ES*Q3!!Q!QV#JUD#`X!S!!)Q+QCQ,LUU+QjUCZRUDZjT*L*L*HVUEQjQ+UVQjQjP
+R#`!#-NBd4RF)L!!)&L*&49Gf@'CR#'"RF)F)#)@(CJ"j!!RiISe1Rdqdf1TkQ[S
+-pIepMYGTXYVY)[)LLpV4d*)V62qmJ*!!Tk@5+eRaaa6TXNPDYT,(Z3Z-5MV0E(1
+!Rhf,[H2U2"lk%ZQSll4clH1c1qIQXIGAhM3TiXQ$bLEELaGhGhLBRb3Tp03j'rM
+B*mrT,h%a,-+HRSC(&)RhphHk5m`m2hi5p2)j+mHqmH&68*!!"2"*Xpr[1Ripc8R
+mD&,'Y[6jfEE!8fmH*Gh8+A84i2*YlD2-RB1lZlRaS91TNb1+66[I#ScTQkZkR'K
+FG93LYCb4VYX2FfYpi1iK9rTPi2hk0%#@bf'Dp'YplbIYeFlh8+R9YF2%hh6@1"J
+Fhk%*HX435&HN[Zcm$S2'KFDP+'2*#Um5RXS8qY*(3B4jraSX1&298I6cE*%Zl[#
+XBQ*b)8[S4mMIcNLR4DRck(Bj929T2%B%2Zi&hr(QIJePI,TkaPF-bGlQ*ZGe0hH
+,YXZRebLI`f,bm[Vkr[mZVr96b1,*4!RbX[HF(Q00Il#6ckF+QY@20$[CPT&Nq4i
+2'bkId@RYjd@Dc91RJ`TGI2p20Q"[VD[AHCf8*1cMLYEHfYSTZ"krcXR,TDjBPiG
+2fr5`S5GT1ZYRE)2k+ljq+%[DS2fiCC+I@DHmql#6AU3D(fJ38YK0j'r0RHERmF@
+GPlC&i'%h5H9GGf1VN[EUJiqkP[EcmF*1iQj(%Qc*m8GHhe8)5r84"QdE51R&J@,
+(#K5rVMb1+1Mm8lXipRJGK#Mh*-!)GV`2$K,p@PV0E3RKrq[FkV'cf9#6ZL`!4fh
+pr!pf%Qa@MfLl6QK(qb)p13HkhEbL--L2)iP[E!4dA*cXF)5GhEiZR0$p[6hd8+1
+cYqXmZfQJ2fZhK#MY,I"j0Y-RCP[e2QIJbj0UCUYXbEl'[cZ6PbGiBS!Iqc0HK&P
+dZp24d"rlqjlRUY4#6E)2T$(Fm16+K,Yb(KilRmNPIqd0AeNU3M9hRVqr#iL@q'i
+aGlDadpY#iY%T61&Q*,lVE(EiqC!!PYAABqUEX6+0eXcGL1RMriiZplf&a0SF(lj
+%X,&e2YBGI-p5TE,ePcA)Zp,RkecS-#&aET&D,Hip$HEQD-hCCbVIG9*Y2GCZ%XD
+pSp*drPIiF-#-p5,5Bf[mAMjZ&a39&dRSd+fSmlB3TAjVf",DGTQ[XpM#MJ))6!)
+I-&ZC0!JG0!GHpEBlU&,3X,4eia,r`-p#Pd5RY6lHIhqqK*r3TIY02ar0K*dDKr4
+IhH,pc,NqF`2Xc[L[-AH3!+@#e0kMYI5#EdMS+k2HC8+9i5qKQ4mphZZlV&K6jp+
+'TVC*@ZZFk,9q*Z)8HPREl4L,E-lDejX+1%`1c,D[0rbK3TQi3YAVmp#5SEi6V5D
+bph0aa6(Mhk[PD+%[mb5ZPi0(R29UCh(K,cKfH62$1mHHJMG(1+G&E6H6`I-iN8+
+[1bj(&1c9ajqSk#PTIMk(HmeK3ZFh6`H9*3%)p,i9pl'NqeVVlHMZ(R(Rca((bI+
+m[a[`ph&#KGL(CPU+@DbeK3dM`0YX2J`TmmQ3!%QdYEVHrk$TZPqpN`ThV`6Mf(a
+m(8rKpIVUq92cU'GT-XcVq&aI*mB6D88Gb+VlcGiF+R3)*@`%UqlTl[%TlcH43Nk
+&QNBUGqIPaHT,r1B8RjP[eH"c2)`+m*rc$!Xb+,@j8r2&HY-b+R#A2Q`dQC(8ZE'
+,U0j#KSL8M22$bB8G'JE-'F0HEj(%SI249YVDc0qPH`P`ebm`2GrKqMBq2#Pf",*
+)Sqi[2*i'2#Pp*4$YH"UXE(K2af3&CRG[PclP(DeYE-lI`Re@"RbcXI+ReMGkdXf
+prPcqB)B#6cFUIc,4M+Rme*lr4d*PVmNl(K3c4e`Q4CQGbB6kjFE@+EJ`RpNTlUm
+UIp0P,l-G2,RrB8Br&#IZ&$0PP6qr-#fRbaei9H%I&p'+K(0LEqC9I28@YA`@iE5
+bXp&[b+,58fLhi+hS%@NLSiRkHCjIdkPE&Ue0"I`UqLTE,+p3r5Ip`262D#MQ6Xh
+de#E(i0eAii[Aa$KB)011*Z'D[qULdem&Z+SX)`D,9[bN@%05$K4S[FIQ1*!!&ZP
+LjBbT`BA(je%ULLA'85XC*%Z&6r34)*YMeZVd&Ai0$AK6p4mi,q*1#qBrf1iD6((
+&,XkR%mR9DIRX(*K8p8j,dE0#[Kbp4QZcqcfd8+Rk9&)h#RV++AEK6ee&-#*STrZ
+455c4[iSRRph6bRpVM9r@b`ZBP4&aY#Vl#L`U)i@rBdX[QLh#VIm-k2CP(3HcS-,
+!V9+e@V9dd+[r,e$EMqAf8mY*qJE,Mih3HhJ`UrYUHRAT*k0`IhAXfrmqEAmR`lV
+K9[%FUDA3A0DljMPl(QG$#P"Hl9I*l6Jl'&,fP%)f#((83UBC%13h`9%JK,lC%"L
+h0461GqKYS8Z5T$dR#*!!mTqliHiQP&[(D6EVGh0rrCAK5bcka"PTBZfiI93TIZ8
+3U-%2qP%,'5JK,qmL!Flq+CKA12PdIG1YS)GjS2$K4rl81[N$[H81eB$T2r#(!la
+c`hllcNbGNBpaeDFQI![*QDbFfR*P,PZPrD*jjrJkAb)IaG,j%2j1Pp"#Arel,rP
+i'bK,rmr2TfPm5qhp,DILi[@3!+AaU)9'#(rkL&MFS)5r)4#IQ#Re,bp9YS8rP2V
+QJ)6`qF[rb4mp&#RC0"`*Tl6VGPTXQ&,-IIXIK92p#E8BSp"qUlceLmq$3BF*rkN
+UcDcE-hkQ92q&!bd!B2re4Rkc@cNdccPjH@Ec8DMmd*C&QQkhA5r0[21K,5D)m$[
+ld#058riK$AJ6mjbq[aVhmF+P`i8aZPjI8Beli@A3X(IUCQ6[mmR+Rr0YYCedfeY
+)V@[#Kf*mR62PRGIj'92qZDN@QC-e192lkR&-NSJ-r"r)!!#!9hGQCPCP9RCQChH
+CHTU*H@KiD)U)QALUGiLCQiQBLTL)H(Q)H)QCQBH)L*ZCL*UDLSQTLDQ*UDQ)UBQ
+CLlQCQRQDLCU)LDZ`U)Z,QjQ3!+Z3!)Q3!*QDLiUEUlUEN!#`QES,ZSL*QkU,QDQ
+VLTUSLAZEQUP+LBU*HCZELjUkQTQEUEKh#J!#)PBeCS#)N!#3!"J69'9QCfGfF)G
+RD)HAQ)!!N!#B!*H(F!!*q(UDZLd1bl,5p&Ac(blf[fADE,BGTXSYh&&i9lfpD+b
+qCb#%K4qK(Pm1GD6FHCf[m-@6@cqUbNfdMajrSpKXS8HX)kc"[Alk%[d5SQ!hIC6
+Hqj!!SpDP31GYdF+@ZQB[,6*P'+IQ-TJB'$#6VNGRL+HlZi5r5FG46pESY6q#%RA
+PECd-H22Eh$KDkp1j)SkN@ZXB'(#AX#mFADMh)5I6QFT[V5d!rVE(PiY,XD9aiG'
+H*Ym2p0jjfXaC2U4ihV6jJ)FR9rh`Nl*5N!!lVr$hd+@`)kE2LQGRT12NX1%QaHf
+9mh&Sr9RIKb5S$Ni2#SpR1frTUUEV-`Nf8h5rLQ"41jV*rDaD2D4q"PeJrbIJaD2
+DY@[*if,,fe(aIjSj`'qVUGIX)5l1Ip1iR6CSPqMrZLaCIj*rSIRR6",[dkV@lk%
+RmTN8`(ZGbN-5K80Df3GkA&Se6,l-@RiQmK6q3CG0&bEl8mI,G2Y)S8Z@NqVaiji
+Fh@Tj[fKL2mNN$0[UG6pl%K5b$bTCY$LF2-43Ub81&QCmm3'k`Ik10YUeMFDb&58
+i5cJ8b(HA@@bHj[iS9+9$VZqF*lRa0'LG[Df[bG*4S!Rc'jS8q,TY(HER"kL+&a6
+YHQhFP%Pr3h1MaV'fZqTZm(143Tjq6MIfd*iaBQA0liZLfhE3ThmQJjH-NXjBh(&
+`0ch%+@J0V*XH02jrKak6`B8m#@hl901JX#cGAZ)8qKSqYX%dk#mqr`2(`ZkK8d0
+(BqI('#@GYZCc@9VjlhS@ZLPeRPd*`JrcHEhILCE)3Ui*RP!*-hYGVpMJC'V9pH&
+,4cZDjqE0"60E@rUj#&,54klV*ddDAl2DhpYF`Up&,dQU661pr*2Y1lcpAmN,ASk
+0$P*miY,q1aZ[p)@h5@[8Ij55%Ml0cj0[`0je0YSZUK9k9TIQGVYqp[r&`U["K5k
+DA!ce"8hS,RdHUK6dV85+pb@dUE#&2#5+L%@RZI5pHb&pG0*phdD"T[S+YhR,Zl`
+12#PTcLfE6FpTGr4qh#RU&PF#(GH"THlXimjLdp5jHM'RmMEf-(F@0KLdqRG*ELl
+lf@jViYEq1RmIBbd35phKp$KEVAI)fQJU3UG38jPfEZTBlQjXFM&Tp5pGCr[*JY,
+5e4c[9J0eS-X,!4("*c&$F@FbTXi@YNGFT`45hfMbGcpD&+cGVV6r%+kYE55fdmC
+Z,(NHqZI'r`K6Q(N`B*G@0C[m2)pe#V0Di1GfZefPqXF,@FZ*!M'Fm[DA[NCb&V2
+-B18hBqT(AfQFK5ME2lCrepKXEU&+JdjfIhG9jee#eSZ3!#LRbkE4f0lM`P[@fLj
+c`[#mU%Ym`qfeYhdF*F`f`eYTkfVK5c+jFJI8p$k&(l-+I0SJ10%H"GeI%b-8*HF
+D!FhSGE`B5mkk2k84kPr%j!-HIVr([kXF*Fdar-klq`6hRRYM2UhN,@a,d[1#RFH
+I(TXKAld9GP'UlVH[rapE,CU%QGA`1#26DbC#6S("f20VjIc)9HAYHBiP%h!TplS
+,rIqhcINIUK9ZUI!fmY!--lihUIQi2PD(!aS8qBHF-ik(%jreH@id8*-LHP*l)C1
+a-K4cLpqK&Xp[B9-NXQ4T"EkEm1&d23H0K`UC0i6MbI`HCTI'iRKjk&$j5CfQ02k
+L&A+RU*0T@8FHe`-M8fPID4F+VPR#N8GpeH&aElZqmQCk%[-V"ZEMafh5F@+&Vc5
+XY3aTe@2T[&M%8[()T&&e'*3q@YbV,(L'QAc%iPLMM-I[kX8+22T@1YfH(B(0UM4
+[9AQE[JbI08AQidcjeLT#PRQcGc2XIjirjH&8eC@6CE+2-IZY[CY[CYXP`URcR5I
+[h@CY[CVC+&$@1dpL8+aRePCmQIAK3YL-X`-eQ*3YeLACBdkpa+&`aLqa+(+)CCF
+QGAa+(+dZMq+MCfIacllK8,PIU5cLalL&#Z[hlCa6-e#KeDK&RM6p4L82RZ9YbBk
+Q,3lPM(QBP$ZRdJqXmN%GH&EI,Rc*&4(%#[[qpSjcS[0K@hl&E0m9i$&BmUp+qHa
+@@Sk9Y[34@@+58Ib[2rASfqcrUf%+hqV+aUbbZVq*rp!+RieVp4ajq3m[l@IbGce
+Q(#Y`9Z)Cj8X[fpEr2FAIIqp#YrXa@Bq+qLkUbVT@fp*&A,)fR&p,)Fcd2+`K6r)
+Zc!9e-2Be0TGjU&2df*4X5r+a+lF*EkTrZL3KPh`aPAE@fBK6i6l[lb[MM[lFIQ@
+bj`AQ46YM9dZme(-hI2$jEp4F$*-B62CGpIEVcB8rcX5MBPqKL9fa,KX5[SR#96L
+)P,M5AX9TipppRb0p#RL2pcLVIm1Aa%YVcpPKAH"YKrDkhV-9MI&Iq@+epfk9Y[A
+Fb'-NLYFAaX$E9Y%)VqPq3$Ebe+rem1&,p4l1,kLp(6H&N!#&Yl&@me9+3HcQDrC
+F6,hIc+qmqi#hJ[b)qhEh0I2cad)Jmf3Ri1ElQ%Rkf(C8MZ+`l8%Gl,$[T!G,aN1
+(Lc@6qb(i9qaYeXa1(N5PahppZHd[(FqbQ9V[RB3NaCr9pL[4Z$Qr*K*lE$XU4hZ
+-1e!(5rp)FT2XYpLd2G@Vi1qa#Mrfmkk6pE[B5FKcFq+IU,'ja*2r'p%j6M9B5qm
+eR1hjA`Vb%[l9jD0UkI$r"#AreMf"12Gcpc$l#(qq`r5)IqpKrd52TI!KjXp%[62
+a2hrD5Ir'9QM,(GI(#Aq$6QYDmIM`Pq0Kq6)qPrqKiKPl&b2UDb&,NRmaQ$Q2BTF
+2bEb&6'EaCHhpVBm$lHJ`i8mG[PT[+PVjUDb'b+p2829ArTQBmcTi82KHM+0h(Qm
+V1Q@Q22e1la+'AQqGfCq+l1T#Me6KR'4RYe8&PMfQHa+(F90A&,4!cGr[q!!!!!#
+!9hGRCPCQ9PGRChLTLDU+L(H)DCL*ZUPkGiQVQBU*LTKhHBL)KiLCQAL*Q)U*QUZ
+CQCLDQkQDZCL)ZBLDLCZ,QAUJL*ThN!#3!)U*HBLCN!#V!*L+UjLJN!#3!!QTS!U
+lUVZTX!ZDQRUBL)QlUBUVZDYjQVUD5AH)L9UlQjUELCUUQEZCKJS!!M*&0&9`B)!
+)&"0&9QCRCfGiKf"h#)H)N!"RGS!!N!$q2@@qTe'ffH(V,V3hPlGE2ElEDEIE4F'
++,TrQIQpH+bq9l5")9F#5+cSaaa8-cpAkdk[T+rX65i02Al'1H#I[h2Ap2Fpl#AT
+DHmk1M2MX82QjRX2VA286@fQNdA+Sd!Lq$'TA1Je[Hc@fRTCHpMB5k$)mR$X6@fS
+TEAM%Pc0hmM)aDZiKEDQ3!%(S#$k6`,Q2fr#cFeA9,2IB`F([F("`IBQTi9V`rMc
+V3%rfer&QNeFHLj-qF'I,cZGql09eNQeiaBIZkEBl6k@UdhXC-[68SV1JP@p,PCM
++Z0T0@kHAb[,TdJ4pI*l6QpAV[$VqMq'DVe#bRKpPVYGUqSe'9#AU8KL@9[Y"f2I
+h2Jc5iD@$CEI@ph1d8+ZY++Na&cAJaAXeAA8q(Qc#2J`F(FLXFZ%R94jHpS*8IGl
+bqmI*YZV5pL)Z"IAHAJDqVNbkpCjSHNeYcFB16EE"dMSDfBbXp0FI1UlAM58`5pU
+E&mV-B2NkqGIiXeABUSj9I-jR-k!BYeHXEI'[FjU112065GE4iHE0!Hrp[Am#%RB
+aa@FqeYBTfbiA4BNd[C*6b@9r(1cHRZHZK6f9$0GcDcJJh'0f%*Hc8rQEVar!d(!
+K6qLTrCJr8l5GPlfGDaf9$Qk199hN+RmjMXF8l4llKkLmQPqNp(X+[jX*1eREAL6
+V5M&(IbBm12*fb3#dTf8Ghp[N9jURdipVaNId22Ur`[[l*UIp"A!Ka4PC,fp6Al'
+P4%lX9mI#[-QD6Z$(J4pq[Mqc#6CVCVEE,QSTTGS6e!(KMI,&#TYBpVa*pU#1fi@
+IMK06rTRkE8'aIZkD%+IFcqTqi4hEGU"ffRk,NfYT3LRkclJP1h@8qTAap*0*h4U
+F$r9hf$&08qSFNJ2r9e[D9kmdQi8rkNIPiNe6Zb2%hpA`F'ia*UIH,J&lAkrEQPL
+A4riER$`*fNKE@5@Q68@VKrfpRUZ$BK,CZk%pZ0#H2E@P20GbGHY,Q14EeVkpKE6
+UAPH@5@jaIYHILA9M*PY9c*hQYZEI3hXdXpHXPMiQUZYphddY"B[l@YR9F$13!*B
+e4ER8m,IqZ#0&8@j`[SqQK'NU,[-cf1lq6lN+PkjPK3ffbc2SAN+GmK#d#(V+rL`
+Tk&4f`aq"#Td#V-lZZ`lqmK8q@T!![YrjQ,UCUImUVZAfhF3UG#Tl3hFhSANdR4)
+32-E1kE63UD*X0hfRe!K[c(D*jVGG0#5ZBE5X4kci,'UKEFkPLN["QF2lAi1Ujh5
+`Tk@K[1M-ZfpHcK6k4`GDhpIlXe+UH@iaLiYjakGZG)k&P1VFL[#TcFF9SbFErb1
+&Si92LVPjhAIBZ0h8+RaMX#K$l")CSda3LYDIQGGq++&EimZeialHjcGhHUk[5i@
+Ze2qF+fEUk,P58K4QPm23HVQYhXVR)X3UjacXl((bH&iRfHYfX8e'l&-@PNPa*U1
+NF'@[!KEjijjMBLjd(cZAZkAIBI"KEmii8MdrHF,6fIJEr9iZ64cjD@PLKH`UD!m
+iDN8I2B9I`Xl08jjK#a(M9X,R0"#6q4cSE(Rq,biZ2,mJdG4X6qN[ZGblkkbD2bA
+)C&Hj0'm)bbX49B92P($Q5a(AmM(eer04dC1@YLGLc8HM)bKBREcL8[QQ)Jafq`K
+,IYjaHclRTG&k@66qHLUcNLMk6`VV*Trc+1[2#%Zl"YKTU0C*GCfGLK[B8EKJcQ8
+1`bD0bD'XV%m*-`4J5IjC0(iM6'64jT0BV1cq'KI`SjP1UJ5@2SC0'k-ZXSV5kK4
+kjAR9j0(Vh,64eCU2pDQ2lS8Hp8B*ChcNJMi-,McMe#Ta8VUV%[qmKFIM8Y'r&[2
+8Y9d$aEmM9PddYpkjb#@NLThG[qM,jbYFkDY@d0ljeaq99ZPjr0k(@hHQ`,[2Ck&
+Ed(rb`Um-r!ic`C[IGqG#Ya$ZqP@h9$NBAMmjJrApk&ELU9MH+mC5YA$D9Z24*88
+TS)SVELH(T0AZlEfjURqKhV#[&ff2V-5&6r95'JB3r-T$Ud)6925*!3EJbiq&Y*V
+EM[F$C`F$3Z2c[A5E[9ErS1Ip1a5[m569MCV243YrpP+9A5RqkP,ZrD8p05P[%dT
+qNP*,&2$LLCkpK9bApe2ip[kLdEGr9r*RZ6Ei(blVMfrUU8`1a8T@r8T5ql'hqq`
+Vje[rblN0kc2A%,MpEfEMI3&6eNqiNlCjH2[[mFe#YqbhiGe86jZf[)mE2Ebpb1E
+cqmKFq-X2'),AN!#T"Hkq"&`pAXi92A8KEX)C6I!q)5'@T#X8%[)*!EhiF8r4p9Z
+)915U(C-J2+IG`*2B2kk2fhFBhC`QNQ)m,pe2pla)5IY8IA)rrT4qV!qDTrf4iP[
+"L($XdRXTdaR$KhG6mlRi8rr%(Tl0`qcm@%RY+GeB1c92h%I4XJml,1l5DTlDe4b
+F6hKq-brqVr%fmA5*r%e1@lGSHB)92FGZd5(ZZhD*$plYfN)5r`GZe3e&pY)92HI
+I98[[V-Vr%k(#VrBK,rmT'Ui4rr8MGhj)fh`%LBT%R&8,Ei6lmT!!TDbr[c1kcm8
+eAQ&)#62rKdSk$f(hiTEIi&V65$e2*b,[43Srm*JeCcV%lYCU2m9'H*!!Udk1[f0
+#-B#jb[AjPH[Al5&Y)NJS!RQVrkq9NBh33YUM5@UmA+d`*9T8mZ8NEieRd[-jc'c
+Z&jX+eXk9cZXjPF&I$QTCdpd,5+Kq$%bD22fZ[f%iH'E1kQTI3BCjK-re'rBmCBH
+64h0@+dNTJCplpi!!!)!dCR9RCQ9RGPD)PiL(KhGhKiQ)P`Q!UTPJ!!N!HAUJQCL
+*QCQULBJ)#BPhGhJ+U3#*Q*Q!U)U!#CH*QCQC#U!!5)!!!*!!!!L!N!!!#3!!!!N
+!N!!!#U!!H3N*8+!!S)Q!!!!!!*!!"i#D!+#3!*!!#3!!#J#JL3F*N!!!S!S!J*!
+!!*!!!*S+PJX!!5489Q!!!'F!F!J608C@9PF!F*Gb0i"m8H"&8ASSMCLk%-IPq,r
+RlBq1)Yk[Pl2#!QV(@kqKCeHAc3491)rj[DiM3!QF"0q"-S#CJ%bfP(4#%B+m&fS
+%))QL#@--4Ce)LN')*549JMRZ3LjEL,bJ!ScJ*6X4(##(IU-I3S"+,&FYqQQKmiJ
+q`%!463-EberU)35RkJTlB8i-4MBCC9LS+)am##1L(a"k-9SX&SXFNK'M%A34GVP
+`&+-bZA+i$G5CYF[%h`)lkZA%cfiC4A,Bb'B4,MEfZA0d@Q!J,*CqGfiMJN%@-CG
+F[#4c-VSiR%!K(10Q9h2$hLdJVJk)rX#$E*U6"6KPqbUZA)ZBCH3S*FALPH#a6U8
+DiBe%SXlF4IVPPf&P''@T8""ab+Y5A)b66'10,B%Y6Pb3!1HGI`dCHAKSi0m+Ap5
+M388T`j'qiH'mjZ!LJ%khAp2-lYX$j%J,5J[3[p['!q"K(-laSY"%%lU#1$&k(Pp
+U)h`-34JJ18!K"'#!KQV#`4R"""'#%3!Pcd(1"[dNleZ&eILZr*ZL(,Q`B[MlQQ"
+&Pk#))c`p"'L'V+QL(d)64G2Gr*X%"KB"8HTRGc!XEDlNBflm%8Df[&'jR4DdrZL
+ejAQ4DjRpBamhf)aqcqU,F@!*CLf(,B`YlAdaE'Pc@fBZEQHIbl%A3TGfrPLk'+4
+a5(+4j5),`J[DIhaH%Pi+C!Fb3CNM#SM&3FU#'$Fi48k*9rZLMrIDLeZpNQjlalr
+iaFb[L*IVaFr$r%AHCr5,[cGL+D+iTr[54q)bHhrf,qPpBraXAraj%G+)q2La"T1
+#%5(NZcU4Bl@l&R0pF#G@&`HhTlX4dHM%'PjH0m-G5F6j8j!!q[4dBTMU4N4T6X4
+ii%d3*i-l%r4"(5M*$Ppr16jmI[M5MKKLc24!RkBrN!!6qBBr@"2'MdTidHV1J%8
+4kdk*p!%FHGT$(KM`TfTrSB8Y"5e(Y!6UJ6dJ*ajimF`5H5"20)"ji)pjMaaJp8@
+TTaXKcBC*+)eaKcJ4l)%pS#HQejlBBp`%I`"(m@3bf3bh(ZJce!4d!*Y!384djh%
+dB`8)9)93+C'X"&808R(1!Q[2(RX!6TcYcrE1hLrpfG2&q@lf'H@5h-l&LcHVLa"
+6mp[EaIQYQ'b&[!i1ZT@0[j%RC`YFUPZC`!!!J$9RGfGQGRH(D)L)LBH(GSKiQBQ
+BQT!!QCTJ#JQ+F(QDQTQ*QSUDLSS)UBPiL)LDQT!!H*KjN!#*QTS+Q)QCLBS*J+"
+CJ)S!F+#*LSN!UJ#D!+N!H3#TS*KjQUS`N!#JS)L+Q3#UUTS)N!#DQ!#3!*QBS*U
+S#U"i"kLJ!+QUS(#3!!#3!+#U#CB,!!%M4AG`!!#!!)!-%c9&GPCQL)F!!!#!Sq5
+0)"lNDq,-AmBmEU,i)A[4l'q[ic)LYNI3h@+"-L2+iQXZmMkRGE3%i0-4rR5ck-B
+Xa&UFU1Q"'RRei`jpZ-+FX+IJ"&Yi4aBdFp+qXcp@%%a8%!P5h%A@2%@"jBR'La6
+U34ZSXC1qM@"5[@L,qH0'&EiF@J*Bh0h'Y)jVP)2AbL!848RbZQ8!aHAf8@1IkFB
+[2r'66[%BdPASHa&ASDD,(YrTLe`G0&694&hEVkHTC*J(,()p0"(`3rL$k-U@l-9
+-F#E2VBYDhXS[YR%AdrYe0UI%0B8E68QS-+I9M%R[q`e"A002*efVRUf`bmRRER!
+Q5UHYeQPQMEG1&%BY-XqlUlA-bSe4",)i`Tj2ASjKcrAAG5"-1HGeQ(24qAT#191
+KljMR[!MY)XHTIa8c2$@T0(BYdGaCR@l'[EmcY&YbZC4G6dUPM(jHiXc4MT4GC[F
+4JcjQ&8@q,G'2C!PLh[0MCaq`f1LapG&lEc)V@mL+Y0VCKckH$EjH&K@qAUX'hjX
+B12bpCAYq0&Lhk'SkLhq3!+*aSXCR#!Li2[-21cJ2J8!@`JZp`HCbJ2Sf)iHK%))
+`M134`aG#BA+p@04SCD#1%CfA&jSHdJMK'Gl4Y$+'KPQKP))i4R)*P4AlVYfi*Kk
+"Q##)),-23cSdTm3kSNMZf(Zi$dT"%-AD&I'j%9j"##)*QF-fK##1%-XbBX[#%%B
+4Q)*NM3`Jm3XLa"'%#aB"CjQ+hR(PF5qZprl%AHIb)[0[Z)[1EDLVMG++[El++Ze
+r,&lLH,&laqaLY&3#A89Jj@'&EIqc&BD9p[ZSVmh9RmG8Lq#PpQrQLq$&JF@!jB(
+PJ3($B[mEr%AiN[`TIk'`M!%'L#'L'PNMPN3@3KSqELPA[+*qY&jrEP49cq16Xqb
+CIa4AdrR%ch%9rKrM&pYI3Lqr4jF@,bBXIUX%ML0&c2paJkrh"rGh2M(N4i-4QG6
+%'Pi)432+12Ma8j@I&eLH)"1"&f,UeljTeQIDpGmF4mfT%'Tife@)hI84(GkH)lh
+Ra'54$`2#L2)i84`pK%FApN4PrRL2[Hl%FEbBMlq!5c9a(Rr-L24pL)p6YSMfIJL
+1Gqk)plq%4lr`a(mb1Id)KdI5L2lpp%G,aBMi1VL2pDQ)ri)2LbiMr[fBSZJ*ULi
+BR"LMUG#+0I`!*r++0Ped8EElKSMZiSlhhBS+T4j1bLMLG!damk+2aHG&(kr@LMp
+qh0ihN9,'pLSEAZY6k8H(6&1dTS-5[im#,%H('"'[TU4mm#Dd#I+TU8rA"(JaSJj
+J[mj6NahKrKp1',UR@J6VSmN#F--GN!!6XihP0h(IdhJ)[)qe6H8ld%GV693ap-G
+I69TkeLP8+9BmF#F!#E`#GV6HaY4*f`%qL3$Z34pYRMQ$mSUdTaZJjZ@NPj'i''l
+"(M!6a`*hcccJKMb!4[J4pKSC@)C@MK!c+"'p!Qr!JSM`UDkD-`8)9)93+C'h!LU
+'36MGJ6F8hY1j!RK8eUIT8eVRrq2MA2rCrPa4fIiBSjYUjFa1"FZ"6j-h0ZI*MCm
+3IQkm%UCXYqee-hdNSEf"HrdFfd!!!!#!-fCRGfGfGAGhL)KiQ(PiL(KjQ*HCL*L
+3!'UUQD#!HTQDL+L)#UU+L,Q,#(UBLCQ+J)U*Q)QBURLUHBQBQSS)N!!!D*!!QUU
+CJ+LDJ!#TUCL3!+#EHC!!QkU3!!UUU9#CUU#CF!S+QDQ*QU#JUJ#EZTQUS)LJURQ
+TN!#UQT!!QU"k!+UVQjQBK`X!!50&B(#!!!!!#!X6084RB(F&!)!!#*jXCi$jdG,
+&p&h'YMD4FK#ij0RLCk-U)Viqah''"-H1,h@QVBqdarMJQpY4(Xk#RcBa+BM5dj%
+Fm#-#RpmB92X4JddK6+"(5[#1lM2jI0VhqAhNCi#G#"1L!P@cXiVBfJLJH88m1+,
+@1#2Xa4ZqmMS!TFeiLqbq4'$CeU#44YqdM8%Fk05$PC%9,-hY@RmHL[+HTM%mcTi
+`aTLHTqFQR$J-CkijRVaFFbqLMd[h4TGpI49`BLfXdD'VI%`$P()j5#2K%8H%rKM
+m-UfHMLVM!6CI'M5kITiSf5Z(iHHdY2ER-*Xk-j!!B02TaT+H"UY%9c3dqGJkHRG
+YKP[6Q4HdrTM68qTKk#QGGLK4'0+bck@TdZAN4cp1MXhp2h5#HGd+1B92q-(T+Im
+DR#TpA$`UIrp4Rb19HCrQ,bRfJ4pH+2*eN9FVaeb5rS0%ZDIIE'jXkMBd8plSlQc
+VYM9bqE&cMGN@6Ca9j&U+[KHN*2"LS)-3BApRDE1LcllBdB`i&&HcbGMF@GV&E*b
+B[P%,2JaJ@H6Sl&QQ,X3A&RbiSXlr!e0RY#+IJLM+mB#I924rPi@ClB(SN!!YK"H
+a[XZN$hl%F,0L%%B4Q))iB[JQ$jITaSXfP"(#-bQ,I0c%%F)c-`e$)'KPQEN))i4
+Q)*N4FlEF0k*KCTQ##)),-,0pZ0!H)DSe#LQXJMK'8JMKQ$Ch-A1XlQ,URFS)i4P
+ENe$3))i4P,kaX)[mUZ`K"'%C5#E!e!`MEiFAiX34K!d@!AqAK0P(&lUkVB(Qa@p
+M"Lff[SaEHCfd@qUaSYq0qU,ImR34FERSSZ0e`)Z-M3aFFVpF9pADL[m,SiVllXB
+VrBeF9qGbiZHcqR&ckA`)ZVR!LklAciZ[%imAA,bBXCrE4BeqNLa`IjaBqjqL,(V
+rHLld(F4Gl$@aGl6ViZrq1SLlhINa4SI#LMCqh&jcqbLmdhl)[1XbS[0aPaHrPid
+A[Zm#,lX)LrkAVbefddpK&Yr$biYr@lk$[-9qmrh&IhZrLjrEZSZVc'Lkh[1LkmM
+MaBYUBXILX(pA%AQArD,h&rp(pE1jSmL0r%C@SL2cD5))4"cZHqaSUHAkd9F,*!R
+"LX,Ur2B%4V0Y%GYk%4i!)j*-[$bBMaqIL1Ci-4r6M4(ppe%Ikpr%e1qLEfT%hfX
+LG*L42`23LHRm1*kML41-&0Vm'*fhSa2@da1ikD*hZ[LIQEb*iImSRLp"%phaiR[
+5NFI!LIV@d6iQkLI'`iRlIa)RleH*qrrh%q33JXNjIK4*I*jI'LI9&(XN)pV0LIp
+HI%rrF1*pik0Kmk+QUkU+R6IDLTeIIa8fS%fej&6HFf+R"i892UEf+Ka5TremL+R
+NkZ+QERSUQ09G(Qa9l,$-LZihd@)b)SM&2mIiB%di%k5e&Vj3)hmAJF[AqFb,8fY
+RDU@Yh'jM&M%%&@eT`*UiiJ%lN!$(8J6Ul@4DV4mqeE4[3*`J*`3*mX#DkeEaePU
+iMAJ6iYUiYImJMk,bK-(bJD@YF#0`)0Z"0F"1Y'(A!Mj`%b!*`3*`J*`!*fi%hld
+B8J)j(D!6H!6j)%qD"1i!Rd!)TTMNFki#GD9$EJ6HfUj1+j4+mGN"1a!RCfUpVY3
+*LL#IZG9RHlrA@jhZIaUa2Lq9%IqGIRFld2FcZGmVDCfGi'fcXim-V'b,XG6Yk'5
+,m3[cmq,j3!!!8aqTb!!f!*9&H(4PEQ4PC%004QpZG(-Z6hT8C9J!0Bj&H(4PEQ4
+PC%00,R"VF`!`K$%d0#X!!`9dEA)a-!%!!!!),Lj`DbGJ3dfQ9HRGTPATj`%!1q$
+Z3J!%!!!!!!!!%M!!!!!!!!!02JCdEA0X-6!"!!!04LiZF'XRB%00TPA`CUC9m(!
+"!0%Ef*i!"!!!!!!!!"0J!!!!!!!!$V3'G'edD6%`!3!!'rSZ,R"V*f"$6DC9lrL
+Q9I!$!3$f!Xc[!!3!!!!!!!!6a!!!!!!!!!mDK$%h-bX!"!9MEA)a-!%!!#X8,Lj
+`DbGJ3dfQ9J$bTPB!rJ%!QmM)8`!%!!!!!!!!&B`!!!!!!!!3A3CMEA0X-6!"!!!
+lF5iZF'XRB%00TPB"'DC@!58"!,N,D&%!"!!!!!!!!"H)!!!!!!!!%Ci'BfedD6%
+`!3!!63mZ,R"V*f"$6DC@"r1Q9JJ!!3$HhdZ1!!3!!!!!!!!Ab!!!!!!!!"&X"A4
+YFM%`!3!!ARXZ,R"V*f"$6DC@!2+Q9J$q!3#Eb-K6!!3!!!!!!!!9M!!!!!!!!""
+GK$-`-#X!!`9MEA)a-!%!!'lB,Lj`DbGJ3dfPl8I*THe(b`%!K@16HJ!%!!!!!!!
+!)S!!!!!!!!!DP3CMEA0X-6!"!!#*E5iZF'XRB%00THe(kkAY4qd"!+q9B[m!"!!
+!!!!!!#Gi!!!!!!!!(P!'BfedD6%`!3!!TldZ,R"V*f"$6DAY5"#Pl8J5!3$3b[R
+S!!3!!!!!!!!T)!!!!!!!!#"GK$-b15X!!`9MEA)a-!%!!-JD,Lj`DbGJ3dfPl8I
+-THe(cJ%!R+0P,!!%!!!!!!!!*53!!!!!!!!G@!CMEA0X-6!"!!$PFLiZF'XRB%0
+0THe(lUAY4r!"!'Nh0im!"!!!!!!!!#VN!!!!!!!!)6F'BfedD6%`!3!""UNZ,R"
+V*f"$6DAY5"1Pl8J@!3!+`Z+Q!!3!!!!!!!!Zb!!!!!!!!#91K$-f-#X!!`9MEA)
+a-!%!!5[h,Lj`DbGJ3dfPl8I2THe(d3%!4Zd0XJ!%!!!!!!!!+4`!!!!!!!!JJ`C
+MEA0X-6!"!!&-HLiZF'XRB%00THe(mDAY4r3"!),1Hkd!"!!!!!!!!#p)!!!!!!!
+!*68'BfedD6%`!3!"FDmZ,R"V*f"$6DAY5"HPl8JC!3"FGPN0!!3!!!!!!!!aS!!
+!!!!!!#JTK$3b15X!!`9MEA)a-!%!!CRB,Lj`DbGJ3dfPl8I5THe(e3%!FjAj1J!
+%!!!!!!!!-GJ!!!!!!!!SS3CMEA0X-6!"!!(#H5iZF'XRB%00THe(pDAY4rJ"!"'
+H,G8!"!!!!!!!!$QX!!!!!!!!-,B'BfedD6%`!3!"mbmZ,R"V*f"$6DAY5"UPl8J
+H!3$,Gi,4!!3!!!!!!!!q@!!!!!!!!$-CK$8a1#X!!`9MEA)a-!%!!LC),Lj`DbG
+J3dfPl8I@THe(f3%!ed0hYJ!%!!!!!!!!2#`!!!!!!!!d%3CMEA0X-6!"!!*D@5i
+ZF'XRB%00THe(qDAY4r`"!$(N#L3!"!!!!!!!!%@`!!!!!!!!2!-'BfedD6%`!3!
+#PP`Z,R"V*f"$6DAY5"qPl8JM!3#q2#BN!!3!!!!!!!"*Z!!!!!!!!$q2K$Bb-LX
+!!`9MEA)a-!%!!YAV,Lj`DbGJ3dfPl8IDTHe(hJ%!42b@e`!%!!!!!!!!5T!!!!!
+!!!!!3Pd'BfecE$%`!3!$'%JZ,R"V*f"$6DAY4rkPl8J#!3!J-V%&!!3!!!!!!!"
+@l!!!!!!!!%VR"Q0YG'Na-!%!!f-[,Lj`DbGJ3dfPl8JNTHe)+3%!DrUrpJ!%!!!
+!!!!!AG`!!!!!!!"4YB-h-LX!"!9MEA)a-!%!!l6N,Lj`DbGJ3dfQ@(8*TPKe$J%
+!AX9Vr`!%!!!!!!!!#i3!!!!!!!!(pJCMEA0X-6!"!!1mfLiZF'XRB%00TPR@q+C
+Ce[d"!1NGNL8!"!!!!!!!!!Zm!!!!!!!!"rd'BfedD6%`!3!$a0FZ,R"V*f"$6DC
+B@"kQ@&JM!3#lp"Q$!!3!!!!!!!!,J!!!!!!!!!Hf"A4YFM%`!3!$c)dZ,R"V*f"
+$6DCBG3QQ@(81!3"Ha@[r!!3!!!!!!!!,K!!!!!!!!!If%$Fb,6%h-bYPG'0548&
+%688"!!28Je4&@&44483aTPRS@kCCl!F"!2TJrad!"J!!!EB!!!,P!!!"V3!!!IZ
+%0c3f+`!$"@0YFM%`!3!$f#XZ,R"V*f"$6DAY4pqPl8IN!3#84#bR!!3!!!!!!!"
+E%!!!!!!!!&,j"Q0YFf`a-!%!"#XN,Lj`DbGJ3dfPl8J$THe)#3%!&UiKQJ!%!!!
+!!!!!DL!!!!!!!!"I'`CMEA4T-6!"!!5+2biZF'XRB%00THe)+UAY5$!"!"&q+fi
+!"!!!!!!!!(+!!!!!!!!!D$1$1$BV!!3&Bfeb-6!"!!6bFLiZF'XRB%00TPJh0UC
+B0c`"!&aiS-`!"!!!!!!!!!bJ!!!!!!!!#+%'BfecE$%`!3!%qa-Z,R"V*f"$6DC
+B9PUQ@&CJ!3!8cqh1!!3!!!!!!!!-p!!!!!!!!!N-"Q0YG'Na-!%!"33I,Lj`DbG
+J3dfQ@&GVTPKAF3%!XHdfK`!%!!!!!!!!$)!!!!!!!!!*!39dEA)a-!%!"3dJ,Lj
+`DbGJ3dfQ@$FfTPJh2!%!A(LJc!!%!!!!!!!!$+!!!!!!!!!)SBp&H(4PEQ4PC%0
+0,R4QEA-!!`PMEA)a-#jdCQd"!!89`5jdCQdRB%00TPR+FDCCbR3"!$cM44N!"!!
+!!!!!!!FJ!!!!!!!!!r)+BfecE$%`,R4QE3%!"4Qc,R4QE5GJ3dfQ@FU(TPR+LJ%
+!pXZ,Y!!%!!!!!!!!"rJ!!!!!!!!&-JTMEA4T-6!ZG'CY!3!&(Z8ZG'CY*f"$6DC
+CbT@Q@FUB!3"LZ4#F!!3!!!!!!!!(p!!!!!!!!!@(FMN!!!:
diff --git a/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v1to2update-cpt.hqx b/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v1to2update-cpt.hqx
new file mode 100644
index 0000000000..9104077908
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v1to2update-cpt.hqx
@@ -0,0 +1,91 @@
+(This file must be converted with BinHex 4.0)
+:(@9iBfdYG'9iG(9bCA-YGM&dEc*eF'4KG'8YBh"d!&""3e4$8%08!3!!!""S!!!
+!!)"9!3'jpJ!!$mq!0'CfCfGQGRGRL(KiKiKhH(H*LCL*LCLED*Q*QRZ*LUZ*LBL
+DLjQ)ZBUBLBL*QTQ3!)Q)KiUBQ)LDLRL)QBN*J+"TLjQVH*UTUSS!QJZ*J*UlHjU
+TUjQTLUYEUDZlL(QC!)QjLD#,UUQJQkQTS*ZSU`YiUTQEUlUU#iQlS*ZDQDL()!!
+"-e4AF*!!KiL*L3#!N!!!!!J!!!!!!!!!#3S+!!!!!!3h*&9@CfGQPiHB"fL(*i9
+BQ3N*!)N!UT!!QC!!PdN*N!!!!!!!!!#3!!!!!!#J!!!!!!!!!!!!!!!!!+#)N!!
+*QG4%A`#4Z[KLK@XmLaIfpDK'2K6r"mEiBLYciPIa9S@rIH6k0hKElClR2lc#hfm
+hZ(KE[2plS0jm[TplZYTh1m`T`IiHl3%`pRf@XdqQP(Jm#blB"DelTIlFpSqB"9(
+-mDbLbM1amlN6Z6T!4S8BkU,U0RL80"Ad1$f(a%%mV(9aR)lM%XZZ`m,#34cXI0M
+2UCpB4(2RD#Z!pP2kI"kQ)p$TY#9#PhIT@)bmrr'Il`#Be(9E2@EE[0[(AqC&cYE
+V8Imab,r4a&hhReXeIdSLccF[p)b4!@4(44@LeLK'`LQ#&,9IarLjNBS&Dh6l#r!
+6@NHjQKXpcKT'138q5U14N83LbFaE3",d"-U!Q8!6-!*GX&(3K!LiQZ+GB#%"%0%
+"*a#8r44&3$%"+PKJ4XA))Y#P0UN!"4HJ*8em4IJKd#3ab8J#86TTC9$6-mF)2B!
+J"%M3'-P4jF3J*8pB&1p"6,PXUmXT1V!SJa`N"(3KlL$b'*5LF8SRGH34J4&-#+F
+dXXN8CLD@Tbc+bANdZTZJ)ZCTCZqCBbK0,Ae9X4,2C1DACB$"J%!XPIAZ0%CFJ4,
+-AFdZQ3Fc%e$0jX"#(-pQ*V6q,**9"+B1K(h!)-ibXPa8Vbe&DD@PY+mY)N#@LC+
+6A%kTSU'Z"M4)86rXa&[0+lR*DL[,49J%$M5eY&,5fa9Lc$5N!P'a,V`Fl#hVd,Z
+lVd-[EJTEk+KQ8K5TAUh@DVfVQF"#J#H$`0PQ-HN!p90TDL!ZcYmDb!Hi84c(0+P
+S#)#Bk!MJBR!1lid4G!BJ)S3$P!#%"&#!3[%X@"&k##!LK##!#@QXFd$I%5FfNZU
+r3Zm8h3KbQDKLF6l6"!4,AS#)#,NHJ)`)B@9Q"$hJK$406hGNe#!B5`&Bi*QZjB+
+bqCbSX[Di881ced819Ha4`IELMTZZLMf2f)XlcGaCr5kZ+86J%Ra5"bN'&,jRhiT
+"TDGRX)Y19I(JV1LQ#P2cIY46"LS(&3(+JH9!JY3JYF(h)Y3NY38UJjE!CE"K@)B
+V!j@"#ij9qRL2,qrj-82q10&(f[SNER$MJqp&TP2UNAkk,6rlm%8qamSfFm@+P#D
++Rq93Kq)Y[2rE&[R2aVcjj`H4'fL2l1KL#UF%%5$bAdY&%lMrTLIHES"--k3H$`+
+@$qQ)fZeL#Um[MI8MF@)XDQa)2V@0V&50a&@-jBR4r)!Q!!R4f*eMY`)fd@`1@lk
+(,'aMYMGM0!a2XB!#Cq2!!6IJaS`%q0(Ff,+-+a3!LK(bl&#aX`)kba43-H"MTV&
+'adULP%&+-Ed"--"1j!6V,&R(BK*eS#I()!q3!!4hkRMKJmP&'`KaX!Feka*3MA"
+KfJ%E`"0k!QbBHGk$(I!4h3%EGB-T%'8Sh`'E3#0Q!Rc!%#L1lX@L'LQ#33P#%SJ
+8-MX`%5L'Y)il3"0GBXl'[!6Zl&+ar,BTC(`r5`FMi2Dm9FV*FUpb-Lm`mM)"6Rq
+EpR)jkCQ'C#Ci'JkDT6[0me#GG#ddU3-1X&Rr#@3aEcLVHLG@qCeG1eI#h4fHjhH
+id&IEr'lU0[d(Z*!!j2FA2,AR6HcE4Ljb6SakadNa!8mB#+l!M`KFpXA0@FKG@'L
+!QVHPc"&c,!3EEl(ZPI(&ck"c0hiZEmm$E+-!Kc0T%(*fM&c`9A,rMk-A1,&rl(N
+%DGXJ`,R+&bj&clSZA,&bdBZFSkmF9!4d)HiJm"Nk[@&`"1[k8A0'aFp)A0daFm)
+V*k"d0`MVKL#jjJZCeE'8*[9&bBSTk+VQD"4"Lp8Xm-A0SaFa#"2-&a#$rI0p#!Q
+BQp8A1B,RS#Tl*CcmJ%D3!&`pk1,Z%V)aF`"FqQ,QV&cILjlBZFGLjZ"Fe!ZI6&`
+biH&cZ4FkNA-f,Q+,QY&bpBZFFA11,R$&cMLj["FmUkk#[pFS*p!hGh`#DNd)lR-
+Bq1pehM2aG6J*GmEd"9a%"(!M(a"9r#J)i%Bri6*$D"S@XjZd3%F#-G!6D#lTPd%
+c(0,B)#)#"CQ1EMQV(K4d4%MqVZr&dm[jJ)3%3%aGqrDlX@,Za8-8)a8"0L'KBJe
+3I+laKG[eeim(J8fVcrekephUQX6@*kBV2KR$-jej[R4(a$kq&Cil)m31dk#)lA+
+4(F(d2f*#'elZ)llI4'rkU)m2N4("qh%I2pH)mA`)MK95,,k)mRU)Mc$T&jh@a(i
+2ea(i[miMf28L2p[rBMma$R,)3r4jX4lHbL2F2Y(qc1a(lFY%Iq""rrL4(lpc%Ti
+#CFTKHGl%ZKjX5cQ'!RjBPefILACI0+NGV%ZipH*&&*H"ed5rRjC9MiX5iReBPk(
+Sa,NpQCBd)R90R%ibARjEc@hfEICYpQhfEICYpRUqdll-bmUhhIGXT0P*XT0P*XT
+0P*XT0P*XT0P*XT0P*XT0P*Yp'bNfq$C5E+69aUieFDZ0A(r5PqkA1BYp+UhT)e8
+@J)@IMer!b6kP,HEBA(XYh-h)M0(Z8[TYa#E[h8hjcQKqSk9c!TLJ4dV!M`SbH0c
+U9aMBNC)"-f!R4!*2VkQ,,4A-*[h9Qhd9E'Y!Mb)Ul(%AVqLh@aZ&'AVk4!5+Z[l
+Sjk64R8L$NRi4VbYjmhSj@fQdFCVMk&I(60HabL00mE[qMNV2Pqe&Rbkd9I@pQ,l
+DPIKES9kZ8RLh9"bV`Z5J)k%49iMp"Mb'6kqG,KJ*eqSLq`0$&8@kXhq'@[TYiLI
+A6pijFr0Yl0ZHNbT4c+6HPPm!q[U@-ScBjjVrK-&qaIMReQF"4"Lq8Xm22Af0Z",
+Zkpa0a5"25cD$Pj0lZAk1EhFpH6Fbr[*[hp$Nb(*r,rG&Y0q`#2'LVpc"LILq@PC
+,LUC#@NfJdpTAk(6eCZ$GfPIV022aZG&TSYS8Ne-6q&BLIa2@#6KR66JhHD$#iVk
+V8eDqJdpA4"`&&+[iqRXkqVLbh@kLXN)%Nh9IalZTAQLe##cVmD+YIEA@HVpd3Tp
+f+Z,pF"%qq2FhQ2llfA+f-QkVLjH(RJJ)S3R@a!3$%i#CIMINM+mfC!4`)ajSSRF
+e!43Jr99kF@,c(,@FhF)#1"'1J*Z"Ff#k#AR0,B)#)#"CHFhhc9M`Sk3b3Uc@5!M
+J4LS#1"QAVpX,Qr0`qf3%F#-AYM*#j3%F#-90@00&aLdP#%"&#-9!66'5"BMAhjm
+mlP!4`)$4,!A'0H,DK*4ZZ4&PrePiSD[ld8-EGa4k6444qIkX8H4d%@IEG&&Rh'j
+Lch'8Lcp6eiTCqa&,Uml&,Dl1+Ap1ILPNIQLdq9mk,6rAU)TfPd-2Ta6mRaBTm[G
+48bHXLTeYl&6$pb+R&qr&6frY4Dh2HaDkE54DkVYBYIjZTLef2h)Uj6L49e2[aEC
+MViYXcq@,EXF@,EBBd@rTq*&[r$Fa@q5Hfh5pUqh@Pc[U4DHch%8cj"8m,R[mk`9
+lIaebed5bI&rGRFhKJ4a#-[kpdGlFa%IR2d$qVa$Z,h%4lh6a+FG[EHG%Uf$%Vh0
+4,U28L@KrULA8q"%Y%#QVkU*Dcld5edd5f(64,#kf*GhXSP[[d4,JG"%[$0lI%+%
+I4ZSP`U%5mRZ)Pj9r%[,dX5qh5LAphP4)rTmLNN[2iLla5jIL4,p!8IV))rD6Vlh
+Ta,hpp%ZFFKVrRa1k6iX6ZQqa%imaCfV!6@@d6YPcSRBHpLGLB86LUNl&l#*hRCq
+*hZj)mZ$fKZqE%rDAleKQ#mTr-!%k-acfi%21'Ab1ELa)pAAjL'aZ$%,Z$8p*F0Q
+&8a,f*IhV3%q1GPIN!3jIPI8Pi+!dX*HhB"!G[9aLRS6fJ%Gi!Qi!6$!6HJ*Z3%h
+J#ECN-*%"$KJQc-1fCG'cMEJ*hS#Gm!L4TV5(%p4GF83ekr#'N4`jM&h&[bLq*M'
+aR!JPaILj(`rpk6)q$(,KI@mk)r(fZ4cr[I"NFrYp9NC($eQ4N!"QCC'8LFSjfmU
+U5,I)fI8`HhrQ4DIdAkIlK&j'ZL-pVHZe4R&6hAN(qETXA6ch$lqV&'rLccX8mpL
+k[J49[iYd$2)eQYM*hmA@V!cd(*`CreY$H-$8a3!!!)"&CQ"JCJKh!!!!L!"`J)F
+!3)F'!)!!"TN'H)!!#)!!!(KiCS!(!!L'L)GJJ)!!B)!'"94iL!"R9B"Q9iK`KiF
+!Gh!!!!#!!!!!!!#!!!!!!!!!!!J!!!!!!!!!!!!!!!!!!!!!L!!!!!!!!!!!!!!
+!!!!!#)J(L!!!!(#3!!N!!!B)!!%M"!!&!&!$&&*6K#C"2Q"8%q8)I6$kGlEKBKp
+E26Ue3jqLlc!H%,F0QA(2`hkjFGI&SPT[r$"A9YmA[Sc9brbLUH`*-Q,eC22L`i*
+K[f0RGqerrrA#&MH1Jrl9'%haKGrI0UjqLe'&VNKGrAhik*F'@I66QiC4bBpV"ZE
+@hPP63iPbCG0HMh8qcDl[,HeiaMbkq[(,RPArZAIPAiCjr&lFfM(2A+X,iDR%G-E
+ek09-mSjUD)m&@L1E2RC`HJY%-UrVJ6[3f0A9UkP16Bd%#Qj$@Yq5UR029#ET#Q`
+4(CC&h)Gq'l#c#c#i30YlM0B5@j[`*%%IaPhmh1Y3#Zd$,1,*iGd3p[%IL#RJaH2
+bj!4imAQali)p$YIFXraYK3$,6&)3Z2$)X-rV$-k'!!!!!%)!!)J!!!!&!!!!!!!
+!!!!!-!!!!(L3!(CJPh!!!!!!!!!!"iL!#!!(!!#!H!!!!!!!"@98@'3!989J4%9
+hGJ!!!!Q3!!J!!L-c9@B'B!3L-d09``Mr[rq[YePD8BeP((E2'mV4T[@,pC!!#+A
+MD9kcb)Va61*d)eJ#,D0p)rcfr2V&C@hiVN$P4k2DAcIJ#d@iRI,'ca6`!e+QFXi
+pj9Y2HPJM*"rTPYAbreJUfVSAHE"Gd)--E4R1`LI6Li4rLGqXHQ-VBep2@2"PD2+
+!iHIfjUYr`@$pbYq-jhLqmGT95J'9VFi"Q3l,HSQrEHQFkIh"bI4T288-Zi&q*fk
+KjkGiaCjLH@p1FIH@XJPQcEkj[qEj`0-k(46(BY[&,fmBTZ)X$@R'h59@QIkd@0K
+aM,(Ji21HQNmZ0Epr'1qr!&k4[d[M1Q&CBjpq5dapQdUhaeheNpmCJ2NbAm53!*P
+mjEFVYl6PlqFH'f0VJLlETFMcfPqf'f0q1eZE!qPA-rJ!!!#AFaZ*!!)!'@9iBfd
+YG'9iG(9bCA-YGM&dEc*eF'4KG'8"!!!!#(*cFQ058d9%TbSmiDH29CB"!(aIY5J
+!!J!!(lJ!!!!!!!!-Q!!!!!!GCAKME5edCAKdGA*PFbef-A4[-R9`C'&dC5jNEf-
+"!!!-S&4&@&44483aTbhjAUH2TP8"!"AYR"m!"J!!!IB!!!**!!!"XJ!!!Afc3`!
+!:
diff --git a/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2-cpt.hqx b/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2-cpt.hqx
new file mode 100644
index 0000000000..0cdc5f984f
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2-cpt.hqx
@@ -0,0 +1,10170 @@
+(This file must be converted with BinHex 4.0)
+:&'9iBfdYG'9iG(9bCA-YGM)YBh"d!&""3e4$8%08!3!!"fh4!!!!!&li!3%I6`!
+(Dm@!0QGJD&Kh8(K`J'!!J)L!KeKi#)#)H!CfJ)!!J!!!J!KSF)D!F)#)Ci!)CJ#
+!J)!(D!KfKJJ)L(CSD)F)F!!!!)K`#)#!!)!!F!!!!!#!J!#)L)L!H)"i!!J!!("
+`!!!!#!L!!!!!!!!!!!!!!!!!!)#!J!!!L)F!!!!!!!"iJ)B)!!%M!!"8!&!$%M!
+$L*b#G8#S*e10`iNPL-&b@@V(CZ8+0@G(hc0j9rr&Qh'TX6rMMCph2Zdl&[5lqMI
+Ypl+[GZr2'pLYdl'5"9'1'F'-U2&TlRhdIRjJcS&4Vc5DQa1THV)l8rdm#[mT22A
+dE1EbUNBG5T%R`lYVNmkRYHkjN[&,fN%[Cf*plI9)QlQeTJleh+!+mP569Y@TA2V
+e,(QcXM1XCZ0a)aIaQ@GR"0CqM#-ImS0[l1crX[kdc&9BPSp#lSGEVhB`If)QpXB
+RMeM9EHhIQ$p+)m'Y'('G'[&f2Yi3e3h38p%BRke4"3LM%J)P$1fj!*!!)raSa2,
+XBYJ&Ed'6kh0VSCZkeMPjB)i9ESj[5"((`[hJ`%(*KI`%4(-94KE,$1HKJ!!!+%C
+"68P-@5"ME@eT-6!T$5K$6de048j8)'C[ER3JC'pNEb"[EQ8JBfKKFL!R-M-h,#"
+ZG@aX+3dS3dp068919#"eFf8JBQPdE@&`Fb"[CL"ME@eT-6!T$5K$5%&5380849)
+J6b!b-cF0)#!J+3f!0@CQCfF(C`!!!'!!!("`!("h!(!!F(G`!(!!!!F!F!"hF(4
+`!!"hGh!(9`"JF(!!"3GP!!!!"h8!CfF!F!!!"RCJ!!!!F!!!!!!(F!!!!!!!!!"
+`!(!!!!!(!(!!!!!!!!!!!!!!!!!!"h!!!!!!!!!!!!!!"hJ!!!!!J!!!!!8)!!%
+M!%!!!&8#%L#)Q36X!U#GFCFfTI`eBDYUHRbaq1+R`fm90'(ZTa@!r2,"2X6Z%5`
+$cG'9rhZI2S(k#+qJKjJ5h[aRh1@V[SlDUipBqir*Y@E@b9al)9NV"84[I'A0DkJ
+)K!3fAb&U,FA34H*(1*jU*l`d-Gl4ri+d`CBPama[4T5Ri1%%DmZMRk34Z@IfZXJ
+lYRq"%4a!beCrc$14$!!!!%j#,Je8D'8J9'9iG(9bCA-JC'pNEb"QEfjd)'jPC@4
+c)'j[)'*TG'eKF(-0FfPZBf8JDA3JBQpbFQphFb"dD'pcC5"[CL"dD'8JB@ahBAP
+c)("bCA0PER3J$@0YE@Na-#j5!!F!!!!(!!!!"'0YFMHZ-MNV-Bk4&@!"Ucf4!XF
+B+,&iMCm"IrqZ-MQ1N3KijUX,C'pNEbjYCA4bD@-#!!!!4NC*6#GJ3dd"!!!j!&`
+!JB)%4NC*6#GJ3dd"!!!j!&`!!(cZ!)'#$UB'TCi!JB)'!E0bC@f60LiaNf+3!,M
+MHC-SQ`%c-eZaH)fI!ArrVM)j+c+1N4+BkE%lN3'UU(Q0R`&rrkijMT%%I(1VACB
+$QjJpNc'B+CB$e0CLGA56D'@6ECUiih9cG*0ZEjKhNf1BD'9MQ'Z6G'KPNfjPGj0
+YDA0cD@jRMUD0N43!!(*PE'&dD@pZN35)L,&5N3&'qUXZMU'0N5d!!%K[PEMMGj0
+PGT0PFLb@"#ar9j(r+UTKN3#11'TZFRPLNfaPG(4PFT0MBA0dFj0cCA*TEh9cNh0
+SB@4[QVMMGh16BA16G'q6G'KPNh*PB@aTB@*TE'PdQ(Q6EfD1TSf4&!!!9j[r+UT
+KN3#11'TZFRPLPJ+``R*PFh9XG(16+'aTEQ9cNc9l-6H6EfD6G'KPNf9ZBfa[Ff9
+NNfaPG(4PFLQ6J$CQ9f"P"h#'#(#)F!#!J!!)L'K`J)!(J!KSJ(#!!!!!KiG@L)G
+`KAGSKQ#(Ki"`!!J'G`!!!!L'J)KhB(J!!!!(F!K`!!!!#)!!C`#!!!!!!!!!#!!
+(J)#!!!#!J)!!!!!!!(!!!!!!J(L!!!!!!)!!!!J)H)Ki!!!!J)!!!!!&#!!")`4
+3!!"3!a3M9BLNJQS"8%m04a,Uim4e!*9biPrA@PiJRb`Caq4VE0laj@[VE1[XHE@
+mq9JXp,9[hX&-2hEAJZcjM`M0c+8E@h*mJ,MqheD22L-5ZFemF6hpfe0d`GmqL+3
+4[h-klc!4`DZEjI3#2[20hY)%IZHhSA34rjlQP-4&1DI4li)id444)ZFPiCY2ed8
+@)L[%[iqPMS)C5lB-q(Dd%-UH`'@p223bYN!crCqp439IAM'Uchr*iVeq)j)3pdH
+QPc3*cSh)i!*pBh%-T@)`K$#%-)3`K$G"Ql(f'NN9BV!M')ZV)C*"(rQ4,qDf,UV
+h3-TfZbXK(+YAFcX!M*Y@p'i#,06q%TYEGDTa016,0e2k`cZ)B!!!3J!!#)!)!!8
+!!!!!!!!!!!"!!!!!Cj!!Pf#(F!J!Q*!!!!!)Q(P`"`#AL!#BH3N!!!!!"'98Cf5
+B989T4%9RK`!!!!Q3!!X!!60%939`"`"`"`Sc-c4&4@4RL(L!Pq-G1Zm[aIDXVEZ
+REeEmYFF-)IprrXmZ8V5KaeTH'NVeRM$M219S4UJ@V$B$hT1r+&q8S4aaP5q%FY*
+dRDpBhRV5(112hMjbKmibY'[cmBDmj)'kHF0UC5V$bDHSDd`mBicTI@h+(#XDC3a
+edjlAP@fp8KlIT,dKd!H&PL&T+@8XSF*Ba4'IH9D)@TdkDjp!&B-5S)mH8Daa3Q3
+p)KYdRG![aVVSUqm[&A3"VM$ZhiH8GZFk3l2MmHhma03p18m@1IM1YV`jkf9L)61
+%E5bh`Ki8"$1f&TBkLpF%DM9rS1G,AP%Ak%&$-#[$Q+M21@F1laKdR@qdFf$qdUc
+56mBIYAAD0FS*)rYYRR2T&9Alf5IfH&-FpNM$*'p0!H[U2XR#F#a*&RC2JU8QHl(
+5[ClfJUfES,[-"H!rFNjA2JA0Nc#hH8lQNb(C!bXk[#"e!FU&+"+2mf+*LL88b`h
+9P51L,HkUBaAADZ-SCbk%3fXP(Ic+hlj6[eEm2N2l,A,8*CdXj"6c5aqm0[50Ckl
+@#&'b-fGd%ZKD1"EI59*Q+`h#fK68!NXC@&Vkp8,kVUYVP1*8Bb%5M*-c)EmK3-[
+q(%kR"fHJp4FH(fq[m*XAC$P(2LfY-2RVAlKZVT!!l1hp1[Yq(`JE(jbEV4'SD4Y
+DI4Y[F*hdMc-S(0hrAkGcX1A1m(ALL'#qLdfRI%k8cX1p+Y-HD&,HTfXfVAA2!KG
+CIlY1S2YbD")EXPIN[acce*F&,6I$$$$jCRZG"RG*IV#(p(JKm!jDMD&5rHRTp9F
+r8F)jPJCHUl1QTRi+H81EUP6aKE3$80ZH8EbFqfBBU,L-L3Hrh1[ipV"6KKrDGUE
+KClbQ@FmiT(85QZH82bmZraHQR$eAdN&ERmCJ!!#!CfKhD(L)H(PeGhChCRGiGfD
+)L*LCQDQCGhQ*Q(UCHSGRL*QBU+UDUTKjQDLUQCQCGiLCQCUUQCL'U*QBLCQ)GiH
+(LSL*UTUTPjQDLTQjUTLBQTUCZjQUU*LTUCLTQ+L(PjLEQ*UULUQBUTQBUTLTKjH
+CQUQUQDQ(Q+LBPhQ(Kh8J!!%c4&CQGhL)QCUYX!bp$+!![!!!!!!!!!!!!!!!!!Y
+!)d4&9Q9QCfGhGhH(GiKiL)L)L)L*Q)QCQTQBQCQCQTQUUTUDUDQkUUUkUTQUUlZ
+`UlUUZkUk[-`0Zmc-c,h-UiN5FL4)Z*ld5,aIH!bYLA1VP8A0kIX1TkrU1TkM1I5
+Y+kYj,XUqdLK4cR1ClRF[Djck3B23C%R+80+2mf,kIh`)RSX01!qU!5G"fFLibGR
+Sf0RmGMmK3C'KibLJSk5PMde2)Ne&69C+VV*8[*j6+jEMF[ah(mKb2c15j2P+fZV
+q9c(,F[QE$j[-FcBr1c9P-XmhR1Dj[R-lmr2I3qMc[d[Tr8jl2fR2p"d2eG"pEkr
+4G(dR5p0dpVED(4G4e29GAeRf2XrDkhVZ[dHNQrEd[BGMf@QdrCpTfZSe0[FDUje
+F5keRh0EVYIfhhI[G[prm(FGcGpehIHIKf(iZpllrc[rarNm$Bq$X[#r,iIj[%mA
+rhrla[(r2qMp1cmMDIUmRpIPHAYIfHCjZfrEYpaHHGHqIZI3rrp(GHPqlprm0hr(
+qATqT[2jrdpAe[Ah[pIlHa[[lqc[llfVrfrFphr(qIHrer[hrJrjm2!`2Li2rH&m
+I$q6"`[PiQ(aF6&K@6crX#[q`+rl!VrX#XJ@,SH,@41Ue@-XTb*&kHKKcP26IBPd
+Q*pR*h'pq2kIl00j92LG$d23``iR3`k#'(eZKkF"0"$`qKZ'KR6`qe1C1###NJT)
++qYT*b#LT-R"A3&)Uq##ZVJDVkqZJVkk[JVi+q$'C5@`NR+k[!UNT-R5+&emZZjI
+3bf)B"!h3%F#(f)2S3DDY#%3V3G4!BUND-+%!+JQk'U2*qhlIYq%"Q6!6+j2lH6r
+lrhr[kQKr(FINmRjk"Q6bf6Vk+[VCA'pGedEe,D*NkD,4dGI4eq-ifFlR'FGN+bq
+[[Im5bmlBiZ(FARRBYVmq4MjL89MBeY&q-SLLp,5ah9&@d65L9EAFVQ1Ac,+(&$A
+UKMj3[TR9#hrD%rrH0ihJaFCSXG1BbHRXC"16NjL`ib'FaBKM(M6kBTXK%RbYD*%
+ad5*bQ3L9-%50"%S)kAA88j%aaGTbF5IR)R(cN6(aSN5GL6P$%RCf*5eF5GaN5SL
+4-D$'0LG8!dmJC1B`3aN*Lp,aC86l0VM-h%aN@FlVZHlKqc56[YAeGaZ,Li[qpcl
+p,QYPUH8+8T4SPKS!,Z(+3G$S2@38Z)F+FTFVNk1GVCA03Cc1CcPFi#XX#19!fA,
+jA15q9Pjc-Cc-Cb,4e0(5Cc1Fe@bmaM-j-c!6B`)ZDc(+c1DaQFqIFdQ8bY,PD@N
+!2+C3`ZC6+jA+j4+Sd#XSJ)`'8)#(*J0PFTbZ8j949!4K2P9(%"mQKrPFTj)8q6P
+FU"q6bNZ#Ub8%h2fd%Q#r"f$JS#e%&64dZ3mkGaP"%L8'4qIkN6cYjrAAkbFXl1A
+p'MNDqAUZFa-l4IFa-$cXr-Rq-`VcfF6Ci1m3,`,M$`G0Lj1C+V(Q5H#)C*C%QTb
+@-Uj8[+Bc+jChNK6*"QIQmcmkbXmjcI1I2qKc[e-rcr3k$kr4p,dpYe(9GCpVVZ[
+5[NVil2Y%VeeDejVAPh(FIKr&hhIrNf1br,qEaIr[(r4XpTj2PEAc0YYlbph2rqk
+rGr$q2TlakaV[hM9i@3pfUjQ9MXBQTc(4)Ck*3F6%a)BQ(#!K@1Y%TkG5[((Z8Hb
+-5*8a)Q3L4))U9qifA%MBf)8pRDXX,LBq,%NP"Tb*c'-LBqML6dp%b%j%aQ6L9%j
+%U-C%kR'a*i2&T$19a5'LqcaC-jZr"aYHD%jfHSBdr@d9VMXCMj(@IU`q4fIp-2i
+IHbhlqZr$Xq5rPrciHV`IiiRr[2410ml9GU(%r%aPhFj@*V1jLCMhF2l[RDf,p6(
+br3bA8G[Ur4dQDplrl+kVkIcq$kPE)pcb,Eq9hjdrj&CchGfehrAZ2-q(2C5$Df2
+BGEX,MrP9pla2MR-EMGIR[fHPrMkRprKm[lr1Ihq+V"EaI"apKC38Nhb[hrLmck2
+@kUjPhp[lH&%P9X'Njc*mElR9p,+L4-C8p4V-GaK#'UaRh[EfAYDVUEfIRqrqPd[
+,He%qIdQHSU,+f18q+94d2+IGmAZj(P6hYj2VXVf&ajqAbRer,kbCh2"lMhHfaeK
+jH2m#Gpr[)Z6MId`-lrc*pP4GRjF`'r"L!ha13m#cphd2Tj6U[kB'FrjNrYf@9lE
+rfMUmV2AF[Uk(kA2kZYrmfAHprbrIGT@@e*Frhch15qYdrqUEQ[ZIMjRrrkI(D(l
+10r9mc0p6r(T0Cp2'cFYpElQdhAJrASkDekH2BBbje8@cPcriYT@edrp,hI`aE5c
+m#jRSQI*#c)f26&V1409k5e5dIGIQ+UT9CLCMTiF2C`qAdX1*TY[qV!`0Vl'qfqT
+j[aZPmVXHKpES9`Vp,d25Q'``dqYd2$k(3GMl2V3`hhXp2$FHc#DY1(`qapB),L(
+6B-1Qa)F(&iRMHEihM!*X`HaBFAarfbZ1er4H0ihrZUmE`TraK(IGj#*Vjr(Iqq&
+ihLICqciPV8H0b(PqX-r46NIRN9RdZKqKj0`(@(LAf"IH2m'5mEa[JfX)-&NQfKK
+iN!$m'"Kp2[ZKd(3p$f23m233K9Ji0p`rDJkRSHT#AArjd(8p6e2CI9rjrRkZJkQ
+##SqIIbi10cjUAMp6",SZHaQBjEeXRr,rJ8qpr,qA!rPr,qA8p6cA8pIe2mZTrPe
+2mZac(VEhTHTqVrre[r2Hl,3DE6DEqR'kMfGlpATI@l(UHBjck[eJVk@dj[-qYk`
+QZHhIr0hZqhhHlhI3p$VpIV3)kVUZXkS5P$'RYhZr`IjrjrcGrQplT0efrErrp*d
+ReHUkVdH[kVUYhd25E[3G*dAlrrqNkd-0edAjr4kVl-(YmRNmRbGM[mdQi0lQIcp
+TRpcS[FVc)er(PH9VdfQ10j9%T+P@R`r$m2*r-cA*mEbH6eGeUrFj1[m,lIYcIYm
+RQIQFVZH6jEPXekh*qYbZ6bI'mUCL-RlQ6r,Nq0jI+@0Mb[2mrcrZFrPZ9pbkZZI
+jM0FaQZ@jE+FVlR,jVjQppciIKram-hlIKH%'@LjH[jIPIbjI6GPTZak(Q[Smep,
+kAXkRPIR9q6cF(Y4*9UBGmLFj[(4+Q94dXl%RmBBI,Q98611LDZFN6Xr%eN654+f
+jP9hKaG92bS09-eAaDV@Bq*aMJTi-USU,1PRFG2aY$NS)*Nje9(4`IPq+RiQc`-1
+6hhIGa$$mZ5Rrji@VSm1TqAaqqZm'$mX-VlZXl2*IfZr`IFmh`r%fHdrpqMf[DiI
+e1iKb8rdfZp,le($hp4XI-l2ZZ4QfIQme"Xkl`&,Hqj!!DAEEZ1C#lXBH$kR0rke
+'[mfM`H$rm&fkllN[ekIcIU@G4`Fm&r!Nperp)rep(a[SEEpR#pRLq6N[Cb@0k$r
+e`Yf[brfhAICIDk6@HV8F5AU2ERrrIRll[T2E50CjYjYZiqGI5IQr0VYj)m-BMCF
+TI30,Y01e'[m+XmqIrpc[pZrlD4pccIr#h2$%ha1$hIGphNTrh`Zr,4rIi04hfTl
+VXl[65kc`i2rI#qAL$%jhqhIIVZrZKGX`Zi2Xlhe2Z`ef6TkM[Ylq3+C[KhY,rE`
+Tr@DC#AVX-AZbr9qVp9VNkE`[rZrl2ICI[UIYDVRB,,ZG6jRIr0TG9+[N33388j4
+dP4b&4j[HEAmRkK@l6pQSjfTqEMj8M+kR[T0,USXrqcKEEYHeqTr$PJVUCe#bMfA
+MrrHCfZAllNG*iZIXrQcmZ#4PC[IFI5kbSbGR5jU#$pN2dHijRDlApH(mq#$Jc*N
+%ZZfAr[DrrHCp[XqkfZXJr2CdNrNj'9d`BA8LNXkcZ1elMj[IFjK35D48h*ehrej
+hAIE("q1$-3Fcm@Vh2LppGrcU)0AFbjI)336N&E"EFP%XkQ96c++,%qhUUfcm(94
+XC&hRJcNVp9,A8XZNR+54%J[jbreG*0QC1SSXI"CdF%(d+L,TpPUS*%%5NM`F'Fb
+2F`dd--I)D#Nkr)kU9+jIc[3JmLTQGENG9-TI"jH9+TI2irb2"PHT8kV9GE+e@6m
+lcTQ6jVcTN!"-JL6-Ei1UZI4mM93kV99GeB6F@b[ILb9rl@RUrLqGl8VAr&$G3h[
+qU[Q[QePcU[5cdV9A[Y8&Cm9AFAm0jm@S[,,%Ki81kmki[rLq+'j[iGl$aEMJ`l(
+0I,Jqj$KGYaZUdPKMGejhYG(j(&e(pD$cU$cU$cUc#XBF$%K[-(LjUXiciZ-q,M+
+[BpaLf@&$lN2FBZ0QIlQH4jh0GGa[&rV-QGEBHGFqGEDUkKj@ke'&MDV*j19VmTQ
+jA4krb2`@(19I0G$"-p,1qGT-jh'6UXA5HeaY",hGYfqjlHJ[GEjfNpV18(SqIbr
++qGR,QplhXi-rmqC+kf`D[FKR1pd9"EG[ADffZYc3EQJmkfeX[9Dkpe8V`GjY*@U
+qleZVqVlZ4TFarA9H$eXUjmil60GFjhAd'EcHXPIJ[[NmM[E$RDUSPFehF%cRTFc
+lhSFpk0MNpAPD#JQEZJlH$Yk$FqGT2)jcVD$UU@ZZV$9A[f)1fQ6*@UP0@echZ8l
+H$@fecplUZU[I4PkUkcNbcJmkcJjVAdf6qY+cRY#Umkk`[mkK&9T*IeV$jRc+L9V
+qlSjR2CIcTRcp*r+`Xq1p#QS21jfJjh)G[3HIj$92Fkf6lRlS"6985QT09hY*cV&
+"jk+$YkcqZFe8V0ffUY[1pUkjIUZY4-fHNX2fFD*LlSjNQ9-jf9qq9-cpI6C(9Fl
+SHGqRfp"k(NGlcZRkUZZI[FCSIhGpUK,$XLBa[Hph4k(RFpVEE9IZeRR@2R@2R9f
+VkUAUVRAreQ@hGD(@FVeA@if'qplj5X(h,$'k,q9KlPlAplcP9-er"TGMi+-hrj+
+eAlq-pVZU1QNLRS1FlHJp,b1hjh6lV99hhZ`lE[[fdr'FaNZ&jQNrPdfAd[i2Dpl
+5IlrY$`[!aG0KiN1UZYq,c+GlGD'JXaGqPk#V[PGBLlp5h[CfrpkVQlUUkUZr"Ji
+fUX2YmCTIaqpmhqADr`r*UUl`0$a4P-hIj[5DbAb[0jMckqXlhR02@3kI`j3ah9d
+GMqcr['E(&lUMc10qA98&[aRSmCaIlehEmlr@ipUZrK+c'[lRR-RQlhAj[jm[Ymj
+""fhAjA@C[*`AHUeqCdQCdQCdQ8bPCGI&EmCH[TMp9kQMZILNq$phM[#bGhhZ[Zm
+RcAE8QXPjZ#JjUBaM1ScF[0kbA,eIjFA[GGhY9mrh*4JYXr#bISGRh9(P-MUU!K5
+JS2q9fYjfblffeAa$$Bh9j[QV20mp,cG(QdB#lS0I%bPPlL`4eIaHPe#VR-kp&cS
+[1dpl3HINr"lRZEfkm,Z8@Z9Q55DNVPHAp'J9E3hAbq&Ak6pQYT[c5Uc&JQHG$GD
+Z9q2r9(4j6'T9TcQ0hG"k04VZGmkShRJj#VeGZ,I5#hcQXcGT3GdEh@&Vjc+CGe9
+pkAB+ZrR+Zr1S*hiSEdi3',lr,&p+NkVU,VPqAmp9j+eH6Vp*BI0Si1jP604"CkV
+cpA,Jc&N,RRHh&YG-@fUbHVQ#hdiYjRSDZjk$RV,iV,iV,iKETDEU[5c$&Th+,5X
+ml)cX&R-BX[G4CC@99HGk&I-ZX,M&@9"+eH3b[eV$Mkb(ZN@XZcmr1DZAFBZlXpE
+jh1lX[IU,RdD#Jp#SQqG"UXhUjQEZ5UK*5pb,M9FpCkbcePRV-jUZpjAGb4GDqUL
+G9h21#fd-l4Z,6ml&T3#dZFK81,2+rMX2Td%VZTGX,,0f(Rjc0bjPRVCREd(Ep[3
+FVZGE"3A2Sj(GqJ'[R8'ElR9c-lFj[RAk@ebc%jVkVUZUd2YHI+QA1KRDCaEFFaE
+@@,EG[8`ef0UPA(c+lQkEQUlm&Kk-VS*G,0P@Ge+er0IAeI'me+qlPrDXpECkfJP
+Q@1p'#[GEA8'Uh0"ME$q9"jdVcUU`jc[E[R-Rc@EjSRI"ffEbYhFp["UQX,Qh-bj
+Q@h0"ji%8(RER16[,q%YVD@YIGN`DbfjbJjV`F@baDZVZ)H,$$@Aq,CEV*ERmGPX
+I2V2jA'[a[+rbX2Hm#iZSIrrDP@%cm[J$06*X1kicmGK+QlVfVQjq8dT9GNDGY9E
+QREh1&$JlZ(fTRaF@r`Y6IiZ0e9"+ZH$K@pCKFc6mcq6KHpIHjld1rKrEIk6rI#h
+0rVqemqXeA'HG,pc&XJ$!2hX+aZ'kK9e#G0mARFCBi9[6k[Jc[p[HUM%l$f[mY6l
+e9BD5VpcpR!jR@C!!r(jdbCl8UCUN"D#BJ44bU#9mp3UVSmUCj[LQDV9I&35UV'q
+GQV(cY2BkI0DV9BhcTNURbR*f(1CrTHXl#iqpq(BrTfplrrkAm28pEqrYIiq(#b&
+4b1CjRjfFjl3G4T2YkE8AAFAH`lhBq*qIbI0[I5p2Hlrr([Ilq$"a1-UF[AfAd1K
+d1Nl+hqpq(a2eqGr$HKa5jIPXjc[e1KqXH*!!qap[6h1Zqrq(BrPmAb2+p$qAVEr
+hZ"`[PS*16j'ZjMk9TS1NarAirVk(6AAFGri[NhRm[lHlJF6)38q5j#`jVRZNkcX
+00GAHar4Y[hIdrc`2NaDDAPq5jAjYPcAcrT@Rep&pQETlM@rGZqrr0Xr-mrq(p2k
+8('C'*aP"N!$)FCaP(5a1-aXjaQ4b2'BhM+#MicM-MaR'!Y5mCaP"1j!!TClM+1F
+b-jMEAM+#QRFK$$3ICqraQPb2m-MQ[mI@ic5J(pE)E$)C$lrhpC4aH"rMeH!#2!J
+i&,P1-dZXeR!qr`!VeQ0mc'qC`!)f1XVH"%eR'D@fYZ-d[q)2VFCmc)kbJ`H-f(q
+-EmcPZ-dY"pQMjEr!Q!Jf13qYrMr&,pRr(q+$+DcJDcJ#)b(Uj$eD2JC$@8IDkcl
+q3i'3!1eaZka[Vihc-Kf[eZelAeH"5IhLF$@Iil@Gra"`2VC(@C(@)#BhjQ0qBJ*
+aRc"+FCT8"1-d[UmCTB[q+$l00"1m$kdAeC`5mAJHV`*c)GVN1"NFE5C()(&K(Mi
+h)J02JE(MmC56Z4b&*4a+5MV9"TfNR-M4dC!!$c2c*cir3p8!kIMFVM+qFSDVM10
+RjkGLic)8mp16m53k$Sb"dA(FE2aQKjhq`3JJB)b)al@p0$&2D[3%1c0UjeSA4im
+p(-@Gai$a-E1cJ"`mBHd9LmG,Sjk[2#"F9m6k"i6q5Z)N6N!%aS#(`k8%@*2(YTa
+840*%L8S-ib*2jH*'jf*1#VbF5*bd6(j1*3RKmj92FURIbU-6LHNN$iXD*M$fmId
+!E(rMaD1,eX6(B85JMBbYmk41DU$'fX@LRHXmE$Z1Rff$[iIaIT`0lJhRVI"QI@i
+H"`p[`q(fZ(kh6i1crCqE@5plpcRkcEa)Rh*85,kXQRiN60q0%MqReH"lr[mIlAh
+XeNTr-AY[0`D,lQVbq"`YRkfhiZkiRMEMY15Z2UkA1rNrYrhaXhIaHBhZ,pVlhhq
+RKrTS2Ik,&pEKp2Er0Ul,CqCiAArmqE5bp$XXPfZ$bhq24ed2`ElKrDZ2XqEXjAX
+jDbKdhcrbErp@XqCd[+l1hrcqhrhqF-1eprkZ,khBp&dHMe1,JE6QG[cI(b1Je(f
+DcpRMmGqJm@R$qI@I[mEaqR`G0KDUGqPd'@dfN[IrBIEfILIUiimY(ZHrh9aq(Rr
+UiAR(RJX1ip$JI&MjcNIfIGbr6rYj[X2Np6lN5Ir*Q[rX(jHKjEVSNj-R[bkrLpI
+JHGiR'lEMZUl([r$h[dY(iA5r@ZGVj[IG-)(Hm5PQG&BDRd1"mFre[Dmac[!mAX0
+YrVEr(p(m[GI1i(Lhhq1JpE%aIZGc6E'XdR-rYapa9I[r,c(FI,bH(bR$SrpHKrr
+[rIQB[3r5kId16p,)I8fIHrNhrq,,M-lS2LrpKlV!r9$d(*p[bAqTh`EMN!$a0RD
+mCrc9IViQhfRXm$SrDq2X,LSKqAP-2P-5drelIiZ[r0dIbp$jAD@N286hLqYH81"
+p[mH0r9NqppIErZdIpVMa[aFj6EEXH4kIprrhMr&M-19b@Dr4fQQdp,`ZPSk6BEA
+JHadq(aChcGTYq"j4,MiE,94-r1GCImTlQfmlZ0IlIHbG,$pAIDDqpV@HS6Er6Ji
+0C`p2%LkU,c4jPU#C9ERRZ1rV-e8pQmAP+dT0r8XJ28)52kc'F#hp2I`m6J3rcp2
+E`m2"iZhr4$Kfr`FTpR&a2'i'JpR%k(Ki1e6h%!$200d26p$d2VGL!R3c",ch5p$
+d'[L5p"l2Xp$`-,8qcLEhTEipe[eZRl(THKpRHk$!iI6kRHp$S0"HI$ihM`q0$Lq
+0$JB[[q2jf6eqUam3kpF59Mp9%LIqaI#Rp9VrZq0NcfH[rBX6aSQ3!1Zk'2caE&d
+*lk8pcaEcM9pkMqrqZ$lrQq([SBIKkG20IH3m6bpYHFCirq['`1(j4jV0"d1I22'
+Lqi-2542bmVqAi2brPj!!c@imhQ-d!IQm`S2NrbrPq$i2bTp!pc4b,Q4q@3G1I-9
+dLjaN6QXj`[`IJ2F`bI*J,qAm[jI#r,b&IqA+I8XV,m[-HElI*lMcFeZ,ckAM3m,
+mX2+rPqKc&Ib&PBF,k2#iAYmKc&EP19jJm9I!i!#q$+m'[j!!bGIj2NmVc(Lq0ih
+[mKlr[mVb[NmVQI'mRa['[k2fICpRqIe-Vr2k2hYp[[9jVQ[$b[0!0mI0FecAXqc
+lSb(KJ9-p6e0[bR+CIqIUqcqMkAUqVr2k@qpRDEIqIdI9jVqIdF20lIP,ck@GpAk
+(0H(p-+H8pAQ[GqKp!#Ebm[-VbQ9bYj[[Mb[0AR0CA0r4`r9l$0meiI*FTbQ6r9Y
+0[l2XqacAKr3jVhIGjVRIdEEbH9jEPH9p1(Q[$qPl)VrbHcl2m8#2Kfq[lEAh-&f
+HJ#Mb%rM[)p65H4cfNL88(BBkLVB2"p5*+afULDV95p*"P-G46RFrJ2SZlfGafU3
+5VU1YZmFJR'LilAa+fC%D*k56j&c441p39PBb*&TmBKhq+Flr(3Gl6GakRY6XA)9
+-%&hF`HeaXEMYYfe0YUr*IDrCZ1fh%R[2a5ITF(ldAc0AbeeRlRm2rp(b[1Irp$T
+Y0bqQj[lH`k6XF[AbjQKX1@qCcrk,[U-hePI8mErjf[ip"P[YerkqVqha[56D[1h
+GhIGjpZdLr-dYTRYE(YY&jA@@R6mYVq@bA1Irm,+pYe2BkE6H[Tp$*d(*ep,MFYr
+APX[mbdV[QdfXiqNPlMXZql2UIYfRfkr0pAAG69`I(f006f(bj[Qj@6hA,CAr9YR
+p(mfXqVd&TdHj26&eJbQ`l#jNjC%AhA@p0p[Jc2QDqd%6pcFhIf0AGe2eIXD$Xra
+D$lGIcRB8elrVPTX&YCdR0rrUb(clET+EK3HYe20jEp[,G9eA9@PTpi49[mq$ZY"
+TY2Sj2'rrqpbP,&TFYNrrmTeR5D@lkV9`Gd)[1ppf2[9pIRG')frNIdND$D@hdpj
+5GjdR3Uc2fZEr(SjH5FCRl#-cad%(,DE6E,MGT-jHP'9X1Nce0E5j1@kU2pbll(3
+9pIp1jYVq4R2UklYDDPhqmT@XacZ@p'#A)qVciKqHqejQEjD4*d0c"5D$6GT"X2q
+G2UD@*eRBM+G$HhI@dBbI@I@q[6p*TFTPIV8hAqeRpG6@h1lrHDclLXGf09E8FMk
+k)EkY,PVE0e2+ZQ2jrUq`BLlAAG5L,h8QUSi1aqac[h,[8p*AmYeN[UZ"'ph"JTU
+AVVPL+kR2qM`11q[bf@iA5)LFjA+L-cTZekK80hH1l%RabfSQhHINkEkY0pbRpE4
+5rUkZQi&"THd20lFqPdLS6rlSBrSjr2jE,FYj,$pV$bG(r(kmVUE6Q2VkD$Xp0p@
+2Fraq[AemIV*IJBl-"lfqV@[ISDS1[JkLNd6SkpbE"X1,kdVVI-QbHaqV9IkZrir
+AdZ8ilke0GhG[cAD3!&lFp[pclf1l'Up(JCqZq[hZ1adAZpI*q`f3!#+rke2'eAc
+),h[EfUMrKj+Qk(UqfT[@$fjqabF&clX%MXqDjlck#NcqHbh@fdHNrae2H`F'6%l
+flSVZMX,RB@hci2r#NfYi0h"jR1A02'LhY9*lH#plZprrqVTXprjea8IVF'cY[*a
+r*rVJkc[1mjkd4%FjE99+)Hjd9rU[mhI!R22frcj298Yc*m,3DEX0$fdY%4(JlPU
+*jHUriiLHFbpREH4Klb$YZDRTG95Crk'`f(&THKkR[HmQfIi[4rEf-lqVGF'`rC*
+kfNb[EGHZ!+f4%hp%e%F$R1hrjdfPf(qqE,+[,dZYUChJdhhqml#Hj2Ae@PY1Flf
+fdIf2ZGp"Uk5QqhSZ[qCMrTF[ADcYZYcq8c(@X`T684@SSi[Tm@#pUU[mArqSl`B
+l6FEEH9T02F6RHIES-eV)rCkflqa9Cql2MBZk1fUVEjN6Pmp)JSS1$[1fJcFr)NG
+CjP,krNI&m@llq4c8Dck#Qlrb)+'*$MU,e0j*lVe2LL42Llr)j'E"YiN(aDH$jI"
+i%%LFNq*mfLRS+1MRi*I(`GMfhEcRIFj63GcMC&rAD5c[kllF(YqKE@[G5,h[DD*
+0aP22ibRR2QA0YDd9lhXQ*NU3!2MYRHjKU)F@Sb9T6kl)e09j(@q4rA*61CbFrqc
+J623rCrI)mC8j1UmL`khM,$#mL`rV-UTA,pE2pE2pE+QDHCNiR0C@CFm[$l8rQT9
+aZX,M2LV06l@&aQTq,M,bcpU(fVL(hCHEerZ6qEVl'(8A(aA'($Fm'bV)Ec&c@,a
+PPl@SV-AiVLa[)H,CB9am[b`qjJAq($HcrGqPlAYD6fU(M2DXIki1&Em[-RiF+XV
+)3l[X@p$20DM#q,M1lq+'rKh-1ZKed2CqPr@UkfTjM)pEZZ-U[FPA(&dATpaT2Dh
+9GV,hA6rZ@&lj&YZEVKCZMqYd[Fe@jjMfV$6e9RZZ,T,$0qIZlfkb"dl@&lGDkUd
+QLmMFeAYD5f[ER4A@EmcZIkhh,kEfU'UqCj2SJrFh8hh24eZYh9KrI*m$3mcrH92
+rNi&l*P9@NQD,R[5Q9fYh1jpl*q4P,QUi@EX-hh09FeNVdG2VFR@D[,i@[jVFbTr
+4EZIlH`dPYfpRi0l2q4-[FjQrq6*rmZNjG%l2k@Ijc5@fjeZNPjc@hAYIebGKeZk
+UHFUUc)pEFmRT*PYT1HQAri"1qI9B[YH4Ah2N8hFj[*LKRVRA5Tr9ppSUIV-GfqY
+h18eqKhIT5[VI@V[kURp&UqDPHK+Q6mT%rb[Hp9pEPHUhIHr@%r`EQIP6q4eP9eX
+Vlq3RjA,j6MG*E5Y*m9Ypq5+'jT[)ihZGCNp2c3R0L*b6SZXqrUqDjVUZGqY-DQC
+AN60$UqDL)PZGRU6[H09,pk*I9bEQIRqDRmR-cZ&+hGGhbSl[0Cl@8%IcAJchQqe
++aee*ZXK2br[hA1jM(G4c[Hmek(262VFl55ILlf8*E5H4Q,ER*Q1T10jh,8Nrh[0
+HIa[1dPABkIiVRYa0Dc)efFlhdDl[Ub(dq,$kF2b``f0MmlFlUKicYpCR*HXSjrA
+lVi2qbVV)5rhAAdE#Ilf[afljh[CRSGlcP**mM[Cq9A@0GRE$j[YGIV[H[prSkZV
+k[Gm,GGaTkVYERhF@i`I!e-2cF#a`iCQ(HSZXT56mccqF9FDkj&ak(a@2'!(99G"
+9F,dkZKfrYD5`UU(M,(KHQ!GCfIl-(FkfclfXq,FXHcR2XDrZkl9ehEp[ZFMQcN6
+RZjZHlmq9G8P2hmcjEU`'9h1llhd*+-VFq4hY[2c+lQ-j8cCrdVr9j1EVG&BkIFp
+[SUV19A-qKHkhdE$A@fdSEDj'4lI4HLaM[[h3ahqZ,Iple4lmS#q*P+$*lQZrPAG
+[k1LVZpp+ZlIFlQZp!qPHi9MZp'0p5fm+kKlILhACcr'DZp[4L+VPIlc0*GFA[Dq
+(Gl(LmCLe%h18NR&f0N-499%c[G#*I@k(FfI9$!Df`ZT9G,dpG2bmj$lQ%AS`ja@
+%ll9M#GCEr&ZD$1ENUJeGR+2Qh&e,eGGFqMF9dSA+@rb[LY[EmmJDfZVfIbQ8[C8
+ZkbReTAipehYIe[HqK@EZUVV2Zj2Hcmb6*UTRa)jZYkMFh[Hf0lVEVj[Jef84D$k
+@IGSX0TV4B@'-h1lj@k[IDq,4D(GLVZ[4Xkk9k-Rb*NX99G$m9arRcrakbrcG0jp
+C$,ZTr1DHjlIQHpVl&+0dE&68C(MF,iZVq89(@)U2L&6RUl+@Aa+UXZbP,&IIk`9
+p9U+bpq,89N,9VEIjBYDkC+hH4m'f&TQHSp$`0ClFVR+A3b[DPh81RZZGVl,fX`U
+aU*Rp&@1AlhiZUeFUfeZS4BkHpeZ4qP89(&ic#V2LXM,lFYYGQId4DE,ASmH4hHP
+UYeA!+iY[G&YCh@LYTNViT9Q,@akhd+Ep9I+eY9e%VfV1kZY2AAA0GK+jIR4CEbZ
+&MR2LkVA@fYkp&Iqi9hY9%bSRcic,P,hCQm5pldK6hq[i`8'jFNIeV&*SCPYFbXm
+LNkcd-[FjLiKpX8qB26r,[EVV+kkp'iKbRij9Ifmr2p9Ae%bEAHj2d0$He(aG9V,
+E@p8L`lF@2mR&K2j5IjbC04B6rU#aer'C(Fk6qqC!9UdkVV&@PGjmbfQA2E#drEB
+I@q,rhAQDf9NkV+5UUCUl1jPFl,Z[3q@`P60&fmre@6Q@f4jHZZDLflhRY&MLS24
+&N!#,,@Q91CEHHU[60LLlb$LX[ieYZCAEVBpmrMLakjeYI#9EA(&d2aF%@IKmGVl
+ZZlFdKbU2ckDaYT9K9HMLjc@@ecfrEiNU`SIDh20829qeHf0r+ZHBQcq[[pGm3YH
+hh1LUXh9E[phi0EB@&YZGck2Y'N1fmr@EQKNj,1jreHab@Gjl`SaHEfl,cI8VZhd
+QkdQkZI3VmAM)F,0FCX8lV80lLQXMiX(dqif2b`paC(rr5a-ReAQNeRdRY5Z-bQk
+ZEQ92f%1,BmCkGcm@NqT+i2a3`kLb0Ef&mTVGrCEeN!$JG[FI&@HeKBY$i'&ZILX
+SGhp26qplKVLeh#Ki[b`qR990crcLrXdQ$VGE@CUbic09LEB$0D0jK9R'0eer%ZZ
+VkL!h&V,QaahYIjqEq$4GlrRj[FBbU2mmrJXV&-VeAqhYGeqhYEfjrC`T8r-'9Q6
+*qIQ5Q"Qj!`#YcN0c*QDrAehTFC2c-hN22ibCe(Fpc@CU[dNr-bXV86,#hX[DpUU
+pV6r&l@5qCmhR1KdAfqir*qIpRSEhhrLq6jH,2mC5e'9Vl2k(56GEfehiAMrYrKr
+,eIBpcr[$`m@RPFIAmccAdp"SZUqaTpIq,a2eqI[0rlr%adRMXaRIUp6pZjlRrcr
+hDqMl2r-6(C'2*UmRPZ8jM0r5k(THVd[Ch(hHjm2b2-p$e2klrr("`jl)6e22C1H
+j#HjDHjfHY*lkmp2G92G8J)i%2X3IJPTTl6)#1"$l%(q%%pUjl9S#1"%pGchJcfc
+RYa2IaR[lch!RZ,MUE+@%cjr2G2eqTlI[r'mbmrPl2r-2(e1AcAcl6T1UdRDDrZH
+pm(rhb2,rEjrl[jlrh[Lq@IRmK2cp42mE2emrQTrk%rd-r2rCRrXmC5d&(3j()dY
+,26dr4camSY(5dY(MXG4cp(N-K%Sq-T+2(8I'8d5Mb*p%NpNFKNFKNFM(2mfikJb
+13RU2)ibMMd'1VD2)BbMibSM!lM-M$$3riT2ldIEIIichIDc0(f`"jR)qpNFeNFe
+5IhT2ll(jq3q$)I!J*N2JpV(plN2J"r)I"(eR)8IEE(Bj$i+6qk!J'BlQmGcH3q!
+#IqJXl-hB9%f)FfH3!,1MlEf[Ec0(beKaRF8IkrDRqrXU2YU(r%IqhY8IE@&(fhh
+XMQXclAYA(YHe3hBKJ$44j(0Br[8""LFMQYMmr[0M5Ihb1D3-lc(I9ah9ilQ`*c2
+HGiM0drV-9HapV[-Cl8I@CQJX*r[jr[d"+2PK3dIE)#8IEBr[D2YShY82q+MYATS
+-cMqparHS#Br[D"9Xl'd6L3JJ*hLM11Tjl)C$(mC28Q4RkDPTCq6*b%r5cp,*b"*
+#QNcmQHRiK+ZHTif3!*rM)f3RXM6de26db!J"a!'B(ikHT&%mKMmIaP06cM[eBaH
+dRFe1I0TH8b"kJTfKUXG%aP"%b3(ifHD(j!$q682b+KmjNXCN@&`)B`p@))4kCSM
+2a)X@*9BNl16XiJ*1cNp1BX5'F!Np9NjM)3*aNp4C'01(dVcf4aU#d6(BfFLU#a+
+@F2A9%a+@G2AALeh)5)hcTbFk1IM6Q2j,jdjdLI82S,L*&jp!3pEdj14CcMJ)29D
+HV1,4(eA4-FHV-pAR'a-CRBNjMSN6NiQ2Ma*b-[VJmU*%ik)I@G3Bb*2GU+IP2Bi
+Y('e(Je(84*cf[1aQUaY9T1-q+VX023GCi@cKm@qKpll&PZSEc!Ka)H6aIRBHhkk
+qa,l0@pPKfA`mALppbRGrMaElYBIchRbrZaBElHrQKaIJfH,irQiHp`2lImpIph&
+rKmlTm$Ep2pcp2%hreI+h[`rcqTq,&KKrYHGISriHVrc`+lFHRTX$jGYqhfid6kA
+iFel8r%p#X`0RqEl[Vl696QJ`rHR*hkHab([AhTqpJAhjGTYIpp(LqRQ[l62+jhQ
+-ISm2"KlA63m($l2Dih$q$rG[jAk24heaIB--1haEl5iQc`FABiPaq$qRVF2"rhb
+82ZrJl[cIMXZRhq"$Lrla-24`mAM-(Hq3!(b,BIAAR`3heaX-#(bp6j@"YH*d[$K
+ffMZ1RKeAVrilRQITq2TpaHBPp$LD#(eppIB9CJBPCC3hhAEA%j5'(r[Xm2iq-eR
+'I(CI8h&jJri`-2"`2Jl,dXPjIprmD#qK`lM"mEfFAqhDDE5``l1iKh'qdI%Khf$
+rMEIlh1,EC$@m1qkIEBAPAN1"qMI5Zb`lImPpQEciBGriq$KpGr[pfcKaG[EiQ(e
+hP`q*$H@r4FAmI@lQRUF2FAQQpl4h%2!pR`XEpUml2fIjB2`hQ(ke[$efhl2PSBI
+CBBIT```pfmh%0af[D``q[m0&8r5`rjD2dX(iGVKqYf82AH9jRh(CAl1ecA4I(X`
+VZ1CKKqVm0(j[mHe`18rcf[aprLHrYVMbrBr[jj!!cj29IarAh9a[H[hfaj,YEkh
+[SFA63`rrHaPZ`rmKpHqhF2`DB5f*LH9Y[+K[Z*r([q@pII3p,HDE8HAJEIdpam%
+2#pVaI'pr"mbKj#mlVmrqHeiGj$if"KiIfZVahMC2YZjp+LaQ@lrPrXI$YH,YZbp
+rjIXAh6ITfHZTr(lc`EbES,caEL(%j(CiHFq#mr0pVUZCiGjJ+FB2AC2h2frNpk(
+KEIEGPrYTaehmHRr6qUbV2dkRJ@@N`)811KfHqlZ'mr2b0[ZVH(%iI5`fAf04m-2
+EjR16Z*krqrdElDr8KK[ppYG"r$VqVrTrUfq2dlr!kh$efTa+Q'(JIQl,mIXiPaY
+[Vr*P1&T4Brf`mjlfMpEkPjm(`F$DrakrfI0l,I3d2XqEZ1Ml@bf2Ur8mD2aRDr8
+r[c1"rSpFrPq,mH*r$LB[eI!p-@2#UX5mkbiq(jI(iA$rjUIU`lI$`5Z2,)XG(bF
+2DlA%Yrei'TiQYfq*C#apDhf1de0aY[6kZmk2&qAm',IIVcAbF23Hpm'riRmF(YF
+(!m$IA'jf[Al2B3k1(Kr8iR$Qlr$`IipVKE-Rllr$[0$a)HbqRrA!pIdiIr-#($q
+cLD2XEHhr4IFPV[Kl6Km,ID2jHbq(e[qhh`Rf9iI6rrFc[EIc-6&d"qJRiZd[Y[F
+EMmRNq@6+a2mlD(&pMBiH$6qplrXrplA$[Vc8I*[XATGYe1SfZ(f2DFMl'*pIIlE
+im$i$fLpA1qCkq*m'*FBH$rbirhFBIhp-5@cAbF$h[6pEEqlJr(heIfIKphLlDhp
+MjG(LpTYlM%fIVINq#mkD'm+)3i1aZ+M$kIfm$$XM"4lR5hN1SqTYm2Em,Kk28r1
+a0RdfiCB$Z1Ma-6FAd2fZ(Pqd`,km`1[$M%dh6qRZ,cKlhKh(bAf*kq(FB[%'SZ2
+HprIqEfZSr4d@e$MFHcj1ik2hEbq3!11Vl6!`G[$l"bUhR5hh#`0Rd[Bm@qa,c"+
+@`rTfHra2CqALEANpKIH2pAp'qkkm`0a`,MBBR*I9fX2XBR0lrE3i'Qq6a4BAfPi
+ZP`-(SIYAR!hf(KP5@p`F2X[dmA%lAmAdG(d2Mr9q(bllj,l"qGKfriH*a0RLGTq
+V!k@(6ED(RbS(q(QI&Kllp2MF2$Ylkqhq$NZ*HAQqmVTrHq$qqfk2Y2Khb04HBRQ
+D2IB1ch[VE2i1(q,Y-$$fppa0M$LpKN[hrfe(MHCpRiF(iGXAc'"(&KkreZR[2(r
+l$UF2DpIl2Pll&hTNmdHr[1Rk$0FGd&a$@BH5KrqKKrap+(&r&qri2`BY2JEh!Z)
+IXI+0ALEEKlM&[rFa-%am3TMI`Iaq9HI[Mj'eiR[I*J@paK68H(ZV,"`mrb1iX1X
+kHb[Y[Jm2!pkVKKrcjr'pTKll,lDm*EHpeejYX2&i9[L5SP4SX2LH[kprXI,qPQi
+Q0mEe0cYZa`r)T1$El1LdP*&mAZmcaIQGGb(Jpc69AZrSrpZmR3a-IHAh+lMjFlm
+ra0RFklaqTj!!f1il,iHK`-(6A(Mdq*HBZh`qbZ2BqPFH2Z2(h(43r"jX26q0LIC
+KfHpYm63ElSFA4rdpEcGal'ei@SKj2i1ZkI$h'$i(`r$JiIQlh[mAj-26F$KkEfG
+!IF6lrMITmBr$X"['e85GR)Rk35m-rNId%5*24)NAa['l`fSD*2lIFecRMD'91a0
+*M)Rr*86M21R++LL6*Q8j@C2b*N5FeHVl$94""cJ@4BRAJ41fY&c8`rY[-L36QUR
+HD4"6*L)ZFbX6(q2aBNU*M1fqAfSQ2jM9GCad@,HkReTRJe1(JiIGqYKGcUPrhZa
+[NI5m,jRJq$lmVMZ5LHTM-C-S)RRHG15-,Lpah(TFAZ-RPXRpErZ6ilJfNViZ-qh
+UpI$KB@&$$h(Tpak5")4B38F8[3!cLi81llM6FKTY2K#9i[F8(%!IAkrcSRTmAdZ
+*frTl[dS0"$dr$rrl6a[rGIfm6RX(SHNi2$KZ1Rl(d[rI6Z,M6B26h&aFEVJm2SH
+KhITDL(LG!Ib)qKTK!GRTY0TYlT[Up$rJrV(QmRNmhNjCq#e&%LC#E%aX59YD,iS
+Nh`HHQ9q2am%U0S*bLkZHS*A"YC@3!2"R,A'6dDGPj+GRDbFS[SFC%i-pcf4RFG5
+ih(BfG"E'He43Bb,%i-D92icfV[(j$'a-h"kL#NETBP&SH-LHeGa21Ve&HjSS-G'
+e-5#GV1-M811ae&3aY)dAb,4H*AJ[MSM"HlR+)&mr489rE3I&%cB04TN%(kU@E"(
+TB)0V6C!!B6eha36dH$Jd8(NBcR[S4XM1IUTB2e3CQFM`6P*Rp$"m9Y5D6(C$59h
+d2S900"P1bc1Pk1A5DIm@XqTY+@lSkbEFfF(I8fIep*A4q-hRLH*iN!"j'GcY06G
+Vb0VeIMjqjJTpT(%a(Jrli%'ES[dAG,QjQfTTHUiGI`pA,Nd9hkZabX&C"5@'LjD
+QmV(GAR1bTSRjYI@cB0jr6TH@ZGKPrkr0cIpDl6hh$ce088NZcYXr`C04e1meQ8J
+l2*G6*T2Q9qjdT-qAip9qU[!0!DRJm(QpjY1$Qqpc(6r0cHXileC(UpKSB)-l891
+PcqIcpC!!5mc(fN[QlZEbrBG*j9IfpIlYR8kAMkL2Y0cd&RcG&P11NIUk(3l5FjD
+2@3E,ej[rh9hrk2ZHTGrIcIEG6r5RZT2838G*f9rjprfGEf@bdGr[0cPYcPYEc8I
+TrMcI#Tr[rpkMj1LYUFD(3`5mP5mI6IANG6AA-hUDrFr-VmVPYTKj@!!`$i-fSMG
+,)NAHEm[qR0meafEqrqZ4kZAjbibh5D'#RjZST1JTZbQe90@8ZIjrSip,dX(9k+U
+jD[hHjj2R-rAepcXVrFr9Pp"RjcKCE"ZEV3M5Fhr-FhCA0a8F[bGCkdR(529ilBG
+,ADHZf&R"Y+AkZb[ri8h2c-rXXpNUVZm[qk[l'fih+8rhjG0Eh@KhAqZAV1#04e-
+(*8NL4`MVTlceFV,Zmf09AD(D9p955lf[US*Y41mPNQ02`rA'Sc%MeCGRRq1kQ#2
+Ae&,RqVkZ#pYVRQp$RGT0jZjZUDhY[3jrN!$FmRcG258N[CA2SI9M5qHiGCbfRUH
+Aif#FkRDGP(JJTl1rPlPp0(Rlqpqe5j@E4e&,6hFQZl1ZqYEFPTGEPq9Tr[r0HfS
+kZUYVq[NdZIZHlTY")fPFM6`10263H$AbDQ2X2kC[TGD0,CrIcGBV5dGI88ddD@#
+PqVPHeYZEb9IeIqDVUkrmpIlZIT+6,e'5UZEYBRb5krke4P-h-b-RUpTT1HQM3pV
+,h2FZUUqUJUB1Ed0A98eIAGA",f9GpH$ZkIZk2J`G"`FYR+IljGR6rkjIjP[G@d'
+bVi*ZYNdZAUkA2lZTfR9e05PL9)RrQP65CqNcp*RaT+k6"pIVXaPVkM@`fAQim'Y
+cm()`E,l00iFf$*8[3FEeIkp"HmhX[FifhY[4dU5*JVXc8C+pp$X*bQM)dr+CLX'
+SUDIb*Y0p@RYVr,8N&efEZ4YY"0jZc4UYTeHbYULNMV)fA"jAd+2S"UXT*b8'Rf'
+AlC@Uf964mh0hQKN8Ph(bAkVYNLqEJjZ$Qi1GJm'lT)1ckl-C2H%LEElqErA,q["
+ffKJT*G4"X['JJ[qEcI9GVQj&,S*2,GAEA[j8D@458QIm+6HqM0f90aQET-f51Xr
+Lb-QUfPaVFY'qV[1bUiq8b8Kidr9CqjjZcSlqpdA(`6A66f8&6d'bbeRTpjQkklh
+P2VqqcHQerI@C9V83E6+pPY0$88N'Iq$NhFNUA2dZITFr)Jm'rTCZAf'mG0E`mh(
+Zj(H5i+krU)+MCGHaVUq$1e+0EAl*C*FY85rfeA9rBJYIMJc'@ZIrSr+b)QmZr[8
+r&d22FhIc9Dhm6ZVrUBqCce,Rk1rmlQlqS[B'eIdMfe[hqlj[6rfX)+EY'0GpAPD
+BVRMeI5ZQZfQ9Qaml"d%f2Fe'4JjZMl2UI@Bf%(hmhf#5GVS+5!DqQ[kZPk#AeIN
+bk@EYHVUUTVA9k0GpRh"VU5NcI48f8VVRCC'6NUIdFY1mI,QrjkNDlH[6AH6j0,R
+lC@ZJ56I(NQmbp0G(qlhNIlYh98R)-DhRl1$*6E1MNkP'YjAPB0TaY(EFE4lbSRk
+2UD2BG,qA0mN@9Eb3!'*FDH##ZJf8'l9TmreIN`EcQk6a*V*+j,PCIK8PlHqVE@[
+#Vq&QmrV0PCmV)U-ENKU1Iq6,3CZlQrjkJDRaAM8h2CpYq[+jqVUThTB(ie2U3FM
+f%()cB0SfbQZJTk@#AY8D2+*SLUD2UkX!d"Yj88&(eI8l$TH9FDV,mhGb0U09He%
+&9Hl3DUEeHf+aKUKp+U[pfElQ8Pl+NUUMeEEM1@q2,5)#VfE[,[ZZKVZFPdR)dp9
+rRU+0jC9Rq"q[S-r"IqFCCB0PQrVdEbVZqc[,IUhP2)NdXZEFhF&5fbVRle@Vmef
+eGYpQQihCD(l00b8(JaHFjEBG,51QTXb5Fj!!3E+V9U2Ul+S9U24Qe9AqSNR9epI
+8$MH[EFCc'Ecq[NdPGUXM*Nj@Pd-&IY*[mZSdX&bmNC9qAf!deleF(mS+LPbf`kN
+DHXFb3r(D3$3jXDUSTlrCH8XN,'#!UdA*!eTDJ!e"VZfMihUG&pEBG,r60mP`@f4
+adDMC@e6,UCGrcGY8M@jrPjY98NM[DC)fUpHeVrVk(2kr*+de*5M6FMCcIj8YG)H
+E*ZJNElUqEJ-MfS,DXZV5bGE4lf`d1PVY2rAj[BrFk[#lc0k$#lcDAqbclb4AlHG
+VpcPDr1!(,T)0PjB"J(*TVfYk[UGCTpKdV0&bY,r2YV1#QQpDF%eH0$0fd(Z1QQp
+d2QY26G$Fh2+b*bXhPhQ+C'RcFhq&*qUUq9fdmhi&DEQ2Xr`,drVdide2EFEPcIe
+d(9qPr[-kMm(GmMIl+DmD(D*ZXCYF-e953AYG98P*"kR8drUjIqh8lieimKGI-pH
+cqrAfI4FGhFZ$Uc1,5%K)0Y"m20dRqEC,%UhhFU-jNZUJQ9N'J`XbeRFhlNUEb1G
+UVrr[c2p[dcG4r!TCLUcDEqRf4RIMrMlQCrMlR,@Ep-fNGj@[H-l1blI0kRBG,mI
+1FPc8MX,Mmh5FV,0'Y*RlrPL0UVE3ImFCPb0qNbA83@YGpb4`D5ZlK'Ek#AcfIVr
+ejHU[qiY(M1CrIPJP@M1lNChK9#-lG*bBpBR*KmrYV2XHilbRJf@bH-rZ(GJ#Xf!
+YebFl8IJc(4@q`kA@F2KE$qZqXqfk$MFV""beA"cGAImf0$cRDl5Vm22mce8&lQb
+k5KEG*M*%f'j9RkEX*IBBc*rVTkUrrV`qqHX*$,SSqj+1I"YGVp@fSmcEDA6FYqU
+$DfG(YE1PQefbHVQ9MQ$D3@F&R"Ck6Q1eJc1pXp$)JVi+GM$8[4l5Vl$2mVE3AZL
+Gh#eIVdXjVXPFl)U"i*[kk,*Pp&2be,cH3dQ2RUY-C&69e8(R`HJ-&*R+1*pQPU+
+T9TP,PQ`&Yh)2Jqp"5`8X&,N+()dXUcTCI8cm&Am%'dU+QrkY&jb0G6mh5F[!Xil
+r*%"5rR99AkY*+h0(XS2ZA2CLr[ipCaD@66eG&hf4cGbBSU3a4Il-pY6bG93FP"R
+B0P(Ncd6C@fbA*P53!#lERZE`I6PH90iCAfQIU2h5bXh"QkERVQ$DIUU$K3UqEUD
+rbCIB6IeMlTSdJ0'G5aG33A1VLA1PVY95C+2@DmAF&rMRDlpcbD@Eberjh*`H*pZ
+STXrh-UFSf,UTDZVpQrp9blB!kZADem6HCZGPXIJjA0Y66IGcr+mMAdqGUHFDqbl
+SHd[I*TH-Xkb4"r(5fI$R,DARk@V&a2pck[(8h5eddUdrjqZlc0,de91Ap4pQAXX
+h*MFC19"`pNXT15TTGcmf$2qUhKiG,VPRDkTVEPUbNk1$C)Zmh6mh010aAfXdAQI
+ZlhbrX6X(rHRJrPq8AP94aip0NKHbRDpr[Y,QZcYrHfdQ#DDHT0&E5jH0Sc[X8B$
+8lM%0jUUCHFZMGX4RBcda1GJjD[U+[Qk5[rARq`k+VTQ3!#Hl"P$R!cqm[I,TrDc
+GCPq$9q2Q-Y199R"RmriQ5TlEfZjj[iR',QrPd&GpNBUTTQ-965iah"+E+aTY0S6
+Y#l,D*-c2lbljZ4*VZTQke@-Tq4JmMC912JmM`HVRAE&q[eXIUaM)2GY-ab28dr0
+j*aLjD-A0pNkj-ZhM5kH$qA,j1FkL#2SDL#jl+Vae,Rr0mMeH1+c%dK`9-Q$p096
+9G*6Cp'0N($ch16VT(fZIVZTLj5#ji1IfAkNBrkae%QGSkPbMH-@QY0SM)SbheI"
+9P0#@198IkZbkDNjqAHqlDFhY*[DFhFh*1M++b[fcLkQrJ'9TrDd1@k2CGaAbUq$
+kX[C3GK9ik2"k[e[,e0GTI,k+U'4eCXU9G,PCF'bd-Q##lT-Kj-&hNXhQpep(l%'
+NfaemICTpERpNBkGTPHP1%VUE[@mr)TkE5Y[Y1mNePkRD5pPh14TB-h5`%@H*D(J
+*k$S1KUU[QrVpAY1Tp$TB2X`9@KALXkRRmT,mD5M-pcd16rpNAABb[EMfI"ChIq-
+,hrFk21hAepYQi)0TkeA99G0cj[4p60ZpP"IdNVE6Pr9a[cpKY1QJm&!XP(ImY8E
+bZm[S1QTkETC'EVUHlpITB$*i[M*U0T436P&8rVcp6kQm-BpQ4I5IPcqGd[2cE[r
+I0e@deR*FhGpR6E+#[Vb,[MU-cAl6CFrmbPJMaDMJeh'G&4m(CG68E$5IIJi2M3H
+jS1EVrej)k620-S92GR)[(Ndp&[+@9NB1jdIbI9JhP&NB1kV[eE@@hblCE)`)ZUL
+[qNN(db3Ic'BZI0lik[p4YE[QM3PCkUrJM`dRB6IGibMf@8TqRUI0T*&Vr@#RJpE
+mA+b,[bFTfA-H4")-I-&6S-M"Qa6fe0pARN8ph%cpR"8cEA-RS*STcmN@cTGP"66
+NH0QCf*p#,1`@feRH-+Jq$`GPM0*Q4(l+fVXcCfZGcXj8cD)mbfeSZ-SVZ215ZE6
+cZF'FVi)N50'LaB)N%Sq'5,5cdlNk1QPeN!"aNb$2amC+ZB*b*MS1DJPpcaR"VU1
+Nb-%lRHTJcF"bDC+IL40j55i28e@lJJNikQmV'Cqh[k5IR0XGY'4NFKj%3df89"H
+lb#Vb&,+jDSi&08a+RDG9Ri+UK"bjTE1#4NH-q+$e+hQZDP`CrZI82I"L409U[8p
+5YcG&h2U41jLBb9%fN!""16hF`mR$LFRbYE[H1b%@KLd9$DfY$'YE@GRkfYSDfYa
+dl2f-lHblqCmqIXE(jprBd9r1Rq+0A"IkbhSYCIfYV+Q6p[DfSE88UYVCfIRE+,V
+U','YCNULP88r1cp$%Lc)XbIRD+4@bVL0488MjpVF4CNLYXUcA@A&V,I#SC8l1bV
++kYE@4aBhT4YCC@8biV,@IRkh@F@XV*'M`T%L0DaV@0DbV,&V-+iM@8lELpSF)q+
+L4@pa@3`pEDb)YVFrX%02d4qlfXKi[Yb+5KeN@eXD,85,@%r4F&)6kaUhG)$HiIG
+eL(aai@,HKG*","KZP0kcLeQ"LeRb`iF-0&49ZjepGBm'EU,'(#Y9AmDeZ"C!)'3
+"S$$#A9$3h[S$M6N0l$$F3M+lZplfeYD+93fZLa4dT'ZXDd@0MXF+X`VI#VC&c3f
+YE2d8A#XE(#`T%DLlHGKYGCG4D+peXLYN9Z,ZDb'reZYP8-MPEQXV-,89Xpq20A9
+cK9QjP5Ul+GclPM`G,qfaV'-C2@XDfR,R080M3r-qX+lKDfXYC&MBeYL+c0Gk"&$
+3f0c3d2U6mr49XAV1XVC&&dNA@4YEVZhZT8VLh0C$jjrH@aZF,85U'KlfYP@XbCA
+dRJlQ4E6rZf8L41hiQD+KSCPM46XVZ5S5Gi11V*RFbXVBf0$'SVH,@H4)XE@ar(E
+IMjQ(ij9$1h-l3d*1f42d9M&eQYZGhVHpQ5V(B`qKVCq,3h2lDITT9Vh0&+La45C
+LIPAXrDqN8FRa4mSe4fXD42i8`&*Nq!e$4G[NBYUSMQj%LKSZQLq$3cpM)YE+KRE
+UGTd9%LLiXA@G[F9ZYQ80M2aZjeRmU+jSB[lDIkJjBUDb0&e!VCfC2fX9&0Pk+KZ
+H646c+'4'LcX@X,)j%UC&VCfb82NA0E3b0MaBY$Dcr&XIfh9V3cZkMFUURJ46eY$
+3p*2q$Zj9C&XEhm%kLQm$b*q91aE'G!5eVCNrHcX5RRpGE6PlPk+aefjkY&9K6Y$
+2LERCNU*46*8LIS8$Cq93crFIYLc)f$Bh9$2jf,P#iKLPemLeVF,qmr+r['P4E'j
+XracrJCI1b[aq#+DGc8l&e!TC!T+,m&Y1@H8SYG3lR1ST04$VK68-rqfC`E(FaCr
+kNA1#3Y5UIqm@-*'iVF,mFr+LrhSBN`EQcrE-SN5Yeqd5dr1PrN@emMb+hkdLI%a
+i%Y%akICf2[@1ZZN6GMZN69$2jUCBf1jN4TrkQEXidU9DeY&&lQ,0hGE'`TqGSIl
+b*NbGXEfCCc2fc*AFCh1#EP+Qk)6H&K9ZSRmT&X3$!-8)6fD!NYLRZP8qDpk03aD
+%8Fl489$-ZBdbB+1Gm'GVFcfpE'Rj%lq1YXjNlHcNcZ-lCbVVpQ%*fImJH+a[k*d
+Qj8UA1'16qAcIHLUNiZ$'Ld0$&XCq9Bf-2&Z)IFi1&aH&@DM#re488b0De[U8-l)
+V-+YVk+YM5)XrKB8rHrmhGVFbThXlqBLQPlR8'5kIm(#VE@*@b,M8FAKCUXi["VY
+eaH$ZH,aEHhc9CFi@&RIHra$IAA"aBI6i@(aELm[F1(#VF+bH-MBcNbaP8@,CB8-
+p&h+-T@4Y,F9R&Z+`bchZ&aE,h"%B9[@I'")"f9lK6EHG+YkbIPB85ah0V0ZSdLL
+SSeVK4TqF-r-lM[Qb2NKQA8UIXH#0,IklA6*HjZ%DBQKHj,@kf0N0c3ehT6EVAd1
+FjRrIEqjFbV1GXjfcRATL-LaL*hYFALhYEHeYVZBaMUYHCSFj3lQC%SHbN8-lCBY
+M&KL@0e@mbC!!@944HAh1,4'MHeamEQ)e%CBKIAprlLVbb`T9&U*qIX5GN5jSCIU
+9Xh*Gc)SEQYX6DGiAU4E@4R)eM-Rf-+BKV'9BU`NQG9K0IfF-0c3h9c3ffZeXD4)
+L9Y$Fa+feN4+'C3aTp@'pUaZT(Eq4DddUYKRErdEq'eLQ0LaVFArPkM$9N!$HhkC
+jIm+aN!$@BSp&&Bd@D'1eXLk[BdDEHb1&1aCP&QmdkB@eXCb&d`mqV$qNIpdA0lS
+ZhN4KHf[FAXJb"DffN9YEN!!b)aU&'+M)a9ErH0PlL'Gpk0FHK&')VD+IrE@`d0e
++SZ$IqlGAXba'$XB@-(De[mSfZ[k'EHd1jr(Iq3BR*NV9d85IKK'dE-LZB[I8XX+
+iVDh-rXSI`ERq@PN8QZL80&K&B*LJN4,'KrV'd8bYRm+06hZVRCd@Il+c@L`5b(r
+3XXe,h0$$+0THaSUbeVGh@kffSC[RLbRCh9d-c9eJX4lLVLX9Bfe%UaiZ&bmMb,@
+0q$FeZlj@eVN@#+fLL@-5K`Xj-STP&'JZVNbieXV#YBfjLc,Q9@eRcKBh'%,+AZC
+8b9+LLZi[i"@qK3lUK`Xe3cqVSEf,3eNV#NB8M#N2+@AmT9RU-,0Ari0eaE+KSCH
+k0Eri*@SXCdV0SD&2kY3h5,5LN6pEDd-c#YEh@6,19+b3!,'aZIEDX*h89[&lL%N
+Ir*&K@8-rV,@p-jM&6h++QX[@+V0DJ`0Q'V&XZ+aC@E&MBd-q*'kSZ8Xj8DLmLLa
+Dh#`TNbbK(4$B9%UkL5Te0Gr&r!9lEp&2K8-rk%fpP3i4[@)#!*+k5@'+!NZ9h*M
+Qb8aQD'ahA"XGe3[5aQCSi%V'4HdA+6++eMH449Z+Er(pF)c6@Yl,9CH$G'*kXQ6
+qDX54G$0pj&RaD,d*[Yc04@kLYe&E+kEfTFVe'CS%8Y$3Qjqf3eb+6fr`'YrJLMZ
+IU&X0V+VE@a`T&V+lfCHfGM@8Aac"2c*NLX%l0h5cQbP&k9GlCY8f*4i!j890&-T
+9$DUSX8d6j+pDT'+1XSSZ$H@GER,AclR1a98XE#XIkLRV*PcCd0EmFb9mkC-SX)8
+Xl0h++D93j6b2pFa1r)iT!$r!LR0QHYQVMh&*Db)elDb'UQ4ILUq6m&&&LmA&Q5X
+j)p(1aIQd8b43c+d99l)kV)hY&&&C@9XbCmibbQV(@SV0chXU0P2"rec%rf%UKMC
+Ue!-!iZZpUcP'hY)dX8d[d-r@6Ge0-VeU,hGmV@k,A80$f&$G88@GX48aZNLqkDj
+FPk3VD)hFm+9q1jND1jRl',HPT8`fX,UjXCPPDLcrPqcA5e`P9SXkLLl!hP*Nl-!
+6A@FjHbU'jRqBS4B4UN9e2dRl)Xl3Q%UeqfUZZC8@IXC9VGDAm(1q4&kb0&[Be$3
+aSab#84PT[Be&&1&qjqTZjfaRD'pV,@C4Cfj-RNh@plG5idfK[C!!,'YBUjNlGA+
++fKRD%ZZ49dR1pl@R#aDaJSCNaQCL03c8kMY&Bf9aGDAYq9eXLGM4Tf#eP4+frM@
+@,-S[`4DcrNDrSCqjRUfCDd2FpIFfYE`EQcaCY#QaM1b*FUC%V*``iLQYCf4'Q88
+LKVZ$Df2eUErm"ZNPkf,)RDfIVD'*@aM5K0,r-8k-X+h4AGlEEQ03b,'04fYc)R8
+@0aLbMX8aYC'V2q80CG84M6[kfep68HIkN@-B[lhQ*-E@aUQpZBEfEK82-C(-5,2
+FfZDZBPCDaCbjSDfKLeXr&,kmM+[HBVITp[5IPRIp)%rJNEQ-DD6N&h0r3khVpEe
+rB5+(5RAjpkia5q+bZ0MI`i9aHHpL3eR#aBHiq@'(JQlG6h#pM(LcmD0aGA)VGcV
+3VaC&E$k1VM52q@9C@&l5pNqYcUGJ6hDc&`-+Y1[c+[6X$3qIZiBGE@B9CLa)E@Y
+Yk,#`[FcA&K`"0A(bp`3"kH&@I0i1kaFTU,H92i9a43`aBN1&1!'Q9RA1Ha3jfAX
+@L1bp"HeZjV-@%k6EHXeerHQllVKT6XfhR[F@i%J#13`Z,h!"d@PYme+N@8DLp#X
+1C1LiZ&aIQ@9a@8@SZX,#6Mq6Yr9YaU+bGV*qb1@bLN85%fDV8jGj8l+VC4dT88E
+0*`I!HFmb"eMDcPEBbYBCZ,@aN4T8ETU`(l@aQDqaQ9S)G0)*Z5,@a1cP@b*RJ(&
+,@bDfKNi9C@b)SYDb(#XZ,$V*&aL`r2NA&E(jAkI@A(IIUrMrQSc'HkDim(rlpIQ
+r[pIhIqI*&RiZ6Lf8A2aG,&lf,j-ApX@,r',m%A$NjMjZFqPdZSehhZrmIpRTIep
+rL6Z2RDQGj'GjQGXTh16ZGRG$1cCfGlqGfXlkFlrUHRUQHVTlk8peFpTCkkRYM2I
+VR[@RX#0MidZ0Ba[V4[Xa[Z4YM'fdEh)d15VZEjhk[eqQZV[`r*mreIpF(Lcmr)R
+rQcrdTrTjrlFrpbIlUIf-rimrH6rmjriFG&adI(C6(CR(@Z1kh(GTMYEMZiahF)#
+1"$l%(i*ISahk%"(!KpL$r#$'ilqq1`XI5iqYar1irV-Iph(rPaqfarp-Im%6)91
+3!-[N19b(dmKeQ3ZXKi'3!2-b(Uj$!b'$4r-jbel6[IdH[rVL4-M@j(0j(T-MpR)
+pRNGINIaC(a-Mj'4mc)lR)qRNEr)m1KSC0$b0$mkKqT3r@SIXd0[3pe3q*3qE3ra
+SEqKi9$`TkSRXT25Th*6dp@6dp+!1HN8p2P-T1j'IMa`$M4k'XRk1GMcdl+RBmlP
+Sh)"B"f8RN!!3`G6e%"8UK!@1!Fp("a3K3D928Xp5KM@6`Ra19-p,RUa$q8,EM4B
+UX+bHTjd&k`UPV+bHNii@mB40228B-dH4&[6cZ4RDDGRFU"+$&01d8l4!*6JV6!*
+4aq3$12(%(6!)L,B$CEfTkFR988S"N!!594U(eL!PB-,bEaVSmp28Fl4cU!P'G25
+,FFp!5GMN"!I6S#6Y-$%-04N-RjNVV-#Th9C-N5ZX!14)qR6mE6mENr-bIQC$ZpY
+5qY5qXJ*5qY@6+2lP,k`3d[VCE`13!,+9eQ3l[)Gh5qYNr-3%31SXa4CLPpC!V)q
+kJdl1hB8KTN1lPGC5IST2d5ZXV*Q5eNLXpASkRPCAkUbC(qa+kbSb('epC-PGCdF
+VV2cdr'b+bC@613rSJ0*db*0!4LhTq0SrZ)#$3dr'M84mA)GhNr-Tq032MiY&D8@
+MSX`J9)MiXI&4ZH2mGaJK9BU*0!4!6,H")R1MV294EbZX3%PGC4rF4RA#'Sb(*mk
+p1,)SrZ8Ih%"+2lM(3Bb,XK4B*)4!52LS0C!!b@3!2*)#1"&04de4N!$)8-lN-Ia
+kKY(4e'3amU41ir)C$,BkAMTH2V-KMZ3ah)BkMSXV&bXlMZ2aLQ9*)T(%%L8bf5b
+%6*BlMmKMZ2RXK1j#QSd45!Q3!-P(8Nbc98*qQU+DS3)S9"QL9''dl)RB['jA,jH
+,aZ@LmEaf3bb"8AM@!f@ilMSZAif,Pip(Mj5"FA,jGA*b063e'29`P$@!f2S@Kp$
+84dFjJhPXKaZ3!-PSrmj$QH4R2Mp$e3$dYaFD#iZ*XppRSVM)G&56hfF[d%L#Jaa
+LEjD*4i`mA@Cbr3bD*SM52`4L[BMQ'L-r8p$)G#85ISBdlQFF#F'4adik%mCBBkT
+irMhJT1Bc'S+mP1dl"@ILaD#,MFK%R!DSH3MBH3KKKL4*dr9GN!#*%RP"8"BNm!X
+-j%K3*3)RXK16L#bJd5JB$6N-p%iS'!21iF3'jiqEUG8(RC`"B3KB$C!!LB`&aEc
+Nk,((iqVR+QK4K*kIR-INDbFU(BENP$Ca!h(8,!d4Nr%RCqFR+8$FC1Be'maJdMS
+4L6N@)IC'SGM-D"X5*5d-j1ic'J5SeaXj1cS'aBN@,KJS"mpMIP3I2A0%TN4NpaX
+j(R)Y(MBY224-K1ih,88ZMZ0(24-C5mMF!4&Z)d5KRjkPLA&aFBb*'LcND+JA%$U
+0%R1dB&2!Yd&aBNl%MBa3f0%b-6'KlMSR0"hR!HL40c)LIHL40G%LGR%LGE141-a
+X6k%j%m5*%rqL4*-@)I8ZI@Tj!p-5*(L6[1a-M24)RG4SN6PmALj('rRm'9h85Fm
+l'DVfXEaRa99A3cYKT1Xr9ipjI%S26KYcpFflKhY[I3hN1$e9a[[J[,bidf,aGhk
+IqH*kH(QH&FF2[Zre&p8hR!pIVrqlA5p(TY(JAR`CRYI,mU(FARDI"lq$FEE$YrK
+lA"q$m26E2X-$XEb'(iHRr4Ki2BBKp)f(@BR2fA+5INdImZqqGrjHHM)S[UrrmEh
+X6l[18(AI$rMqfMKiZRL4rSm[Sp9&bI9qQ,[I`hrrGp$ef$j1MiG(ar3iRlY[II,
+dI$k(LEH(krIr3pMCr,`m,!KKh(6Afc16lmRDHrJrd`F5ihZ"FI&m0a$mQ(ql"Ke
+r'hIDIpqjS-AeYVF@pjKq[L3qAq@(8h()R(cmR$[,LmYiF#(XSIHrhj1,F#)q6JA
+(bBYpf`EF[GpT`Z@hm)4pPXllHqYJiZL$Edm8JVIH[LF$EpTLl2%pM$rT`rF[Ul%
+[)EMSre3`iH&aPpLjEf2TBr"Mp-iFEhepaTBBH,p6rb''qKk2")'iPj[IXISdI34
+[MmAiEci1*l1$m*+VFErJa[kID`I'mh"`GR[SI+YlMbpaYCSd0Pm%-2AEHipR$`F
+$hiHRplr'(i2LrQj6P)HMpI!mI4R-aYIdfI&iR`rTr6q(%q$j)F6TpMm2MrSr[TL
+IAIq6JpP[[aBQp`m(JE2KpPU-2V-2rIm2i3q[J`qZ9-H[`r5XYld[PHYIpVfR`hP
+aS2H`rXr"fZ5KKa1bYq"[[Y`qE$EiRVB[Phd2dEl&kFrB(dHqPB2dZbhZJiR6ErE
+D1(eIlB[XH2q1k"MTGMYYVrHmi(lIlEAbVMiI+Z2ji-1$I3i[VqlqljhGp,`p6kp
+pYI`El"iIC@rPqrldT+'GVQHbi@0a-(IEAr1ciHq[2Pdd2#*@IDq6hI`Ier6a-Ah
+p([[6kl$iQfZ,MXG0j'MK[2&hrmICa2k3!0amR`r"im2qId3r`[)H&rc(rpmERpV
+qE-IrpV[I,jqhaHe[,MFk2!pr`2Njhf1he(Xi'0Rq0kIEprjZ(iZ,JI$[YlS)F$p
+(fZad(rF(cEMr0j[,L(hVk(LIfT[bEAN[%kk(RqqhH(m[!a)FMHARQpTfAq1iraT
++Ukf2%raHHChqcmfii',l1hl'ihqrd[IpMbAFGVj&eSiDbbaG58AmErH(pQilqip
+Er+(X)Hl(cHddf$$lR4Ahp-1mrhJF$UX2!f1(YGVer5p2JrqGjiPZ6hc[ThQa)Rm
+Ep2AmAIr*IF2l(jIlHR`YjJr*8h&jf2&`#Q@e`qV`Hei9prIq1$hqC`G(erXqEHB
+(,IDkAKh&p$[L,qif0aQJ(iI53kREr$$jTH&HIqB'arAZIC`p[Khfi[VM4i2Tm$b
+IUB1QjQqe%2VEIEDEhiIfra`1bpBp14F,`18,pc*Ik[m0aJrKq'(LEhi4YIP`rT3
+hff[M"lIAf*YX2mq*Lm$hZVi#YVLG2Jpr$LqEHBRk1T+arriE`XPKfhLDET[eEL(
+!qemQ*aF(83q)@IrShm1(JB',$LEh4hfQdZh`IUBQqhfeYpQIH*!!qcdq,krQQ&M
+fiEJI@("kh!fqLe0a[rLq(Bh(cXcIF64`iR%[X#(F3`k1(eY6UG0TX1ql#(f9EME
+#ck'(iIYAN!$TXA!`F&$h5rbffp[-@(Eq9[XeLpVJ3r(I3iI$[)EkqYiGVJrkiH*
+l0pm'TrT$fAbI$Jq2Li'([q(S)I+r6F3lhEALae[1-qGJEq(q',Ji2AGVa-#maGl
+F3r$ki-9Q(LhepippKmVb[c-6m@T`ppYFACiGjpVSilSpa8bjB(cXA3BI6i1f`ml
+[YlUBINlq(%mhdi4ZVMIBIall&i%2Xl(p@"HDAUVleSG0I3qaH3q`*ri2C[Vl[`p
+plKlrTqBa,MR-$rPCSqP`BIBkr%a20`,b(!Z"Q1([Z*`"`P2IBpD(lA6Q)C!!pa3
+pKha'H"`prF9'*UHbq!2G6mN2XBU(Zc$fmhh$q2IDR6A'"JI,JqcHAQTpq(ErS`0
+6dj'9C$f2r2Kff(p%N!!mAQI6eYjdr5qELHEm1"Lhf(dppHB1*`cF0KKYlcBk2aS
+ElfBFeKlA"i&jIEAb[YG''2k,D(!fqhfYaK#lh'Zl2iYlm(`ARdq5kI%Khf(m(bi
+1,$LhPmQaK[Iqr$`qR`m2DqpIDE![YVKr*mRk"ZSI+r4CBQ$YI,`%m3Q$pA!dFhC
+p0a)Ilp&HF3R"II,$LBN0aH#B[YRm1qpqm`F(4r`+Z)GpJr$m24H[ihMQ!drVYSq
+Z[X8)rhrrErj2FkErlK`rm`HRfj+6!iX2b'9Fbm`r"[4%kDmfferaIA'ckEClEXK
+HG$d)hGN9Ph@c0JH(m24`r$X2CY0&ZYj$IEI8rf[X2LPJ80jpmmM1,mT8ITSF2j1
+'-CEi&jmN1XPp+Kphk(f,l!4HrbQ(YHLe2e1ikI'i0[d(br5kVCpPXEl$hq,(mR%
+KrKP2i3iRXm$!rKr2KQ5E`-6IG&,Rq3`BF$6CAp[Nr*e(lk+*9H0,h@$RqKdIZF'
+bkl@d&,p(k2Jr6KY-lm(Zh0&c10k2krrREAF&K%mEj1Y[[K[[$lV[2'mD,q$"rYR
+V6"a2Cl(Sm$SGY$pEE&mZJ`,lfH*p1(a2Ir4EMPi%2#e1p[1R5rEqH!8`Kpr$r`B
+D#+ElXp0Z#5S%D28hR#aElp[#kEec5[JIldI5`l[iIK`-(elcYICk(SHKd&SEr`%
+G+!RR*`@pMd23c08F&Nq!N63G$d'UUZNR)Q0RHKk!rm"M3G$5a*k2q(TB)r3Gj2G
+"[2rqKk(QiP0l(MIGmElX5,ihlr'mE`H3!!-r2V,QLALJL6ZIP!646)Ni#8j-L4-
+VUNiP2'P6X5BLXPa++FL6+,P20rpL89%JM441Ib2kqJTHJj[QjkPR2)Ph[Re-rT*
+%(h[hrGrErlqhlhm2ZrYbZ6qPNr9bHEPr5bFr1j(cq3hHlhIm0hqhpZlhIKDVmh3
+p$cd5[k(mh3rFjASHKk2SS1DjVQ[T!*QqDjVf4-ISqPl2XqVcAXqb#8bC-3F"hRD
+ARITHVk[D"&l2XrSpRk@hpReICpRkAXkcfHDpAeG4TVhfG[p,p((DrGrbhIRlAhY
+0Tp6ehXlheHDmr*k(*Sfm%%&qR*Y6DUC2a-GUXreP"1aBXr4GlMBRF`Bc9HR25k,
+94CfLp5*hQ1Pd12L5ZJJViQF"ARTNp,b-6S)Ph4iqJLcXpCdNUHbdUdJaNpPiPT4
+6-C+e9Xk'FC!!6%'C!-fN5[Rid%V`I1P6"%ip4U0M11L9f53EaXD2%LFmLMD0I&Q
+09M)0jM++*S!ELaTAF["h(Bcjm5ZJaP&Hjq$)j""r'5Sdp&4BH$AfJd0VDDUFJR*
+bdJLHTi1NYTkFR+DE"(JlbcJT,N!k+*cb)Spi+A44cUi8dE5CQ0UXE1G$"5D59B(
+qBj1@T)+A(Fe"hN65FpE4qXjZ$Ui1VJk[SB)-RB@&K"cpcp@$C8YC"qqAS)0""S+
+1fL6ZPqjbrEGKFdA,515Jr&GjcMjR+kc[-c0MbkA+5l5#rV+5QPpj"'ibFNCLLqI
+GeqJM5DVkP6jf,9`6P2""CeF(lr[D#$SFEq,6D@MLDr[U+AQDDQPr9i2[fR[fR[e
+rSm(m[)3m[DChJHh5dF&*,[l5EE8Y*mbSYUqpm5NqC5aqcPf(H3CR-`IPce*FpA*
+j[9jQQXqkYSqUVpcP,1#EbR5FKk02rMkGKlp9`l2p25HR"D3GPCdPc68NZVJYT0R
+cA(fF(T`Fr56H6Pq["Ri+V3Ge*ifQjZCRl[Y+qRc1""4F'fT)*GR"5k$3Iil,,G$
+pMU-Ed(jH3VrbmKEHR69@QJSk5jMFj6FRAcPK6Hprp68f9V[+l+Uq5Rp1fe(#qCl
+R)9qcjD$jN[EE6r(+5B)1JbA"cplAepYGb-`!Gh5e9IGe1Jd0RFefBUDZZZp"8CL
+Ud02Gp"55lDfMk5Z'hp1#EV1GiIkG$Efe[d(ZFFMGrQl6p0h(P`D'4(QhYYA`Ap*
+,d0ThICb)2+l+A`EUUh0RGhG6e0R)Jf9ciQHJd8[MFj+YZ2k#[d(3389*9dNHPJT
+10Y0"q(MFTRmrQ(MKDHTJZimfNjbNUG"1D#6lhlUDQbpIHD$`Zbi1kdG9f9Iqm+H
+'A0HCb2GHC,VaaDHQJfA3@eG(l'ES0""0pH5LmZD6QUQXNajZBb@KN`5mr!1"6er
+3E`F$m(mq(Ep4mK,U[rPX[6k#NU2kD$frIkSV)N`A2eXP*T,1#2Ck'[dAE9-(Njc
+kF'Yj,-AGhrp"jFZE)J[ERr2(`F'QcQ2Zmpd(jqIbQEk$a"aD1Nj+PJTU52cP0PS
++5Cf2d"`Ura+VJfhmGjY*-'JTk6R),XrpEMcH$U,EMDIh2QF2k(KldF6JlV4I-r0
+p#[fHIJJUV[pe9GdN&h""0if$CHYCk'riGREeR38pr`CYmkFUQ'GpDEQ+23jqlJS
+iqNk#cQl6T+IiH8k$hm`VNlKMNr6j2m[L-FQ4"hA833#0VZTlDSJmR,0FRc"b3FQ
+rIV1kZk+[afml[N1aVma(qMSEqrR+kAAqXP1ZJYY$`S+RPRTbPQECjLfN`6Ed`)k
+CVNmeACbPVph6rPj$Jdp989GA!12qiXk(5SkqVb92`HDNjL3!FQ4NNFH$lm'BPl3
+T4NY"5@I'jB*jHJaR098#Z2j2'T3rN!"+(jrCG"`H,c'K+*3A065bH0Xi-P6dh'a
+qfN3HAPTXM3rdjcMkQlUG$8`IIMcI[bEZlSS1YUT0IleIe%IRDq*Iem&I1mC"d&G
+SB,RbHJH839`TBi@@Ql4A#jaA#cP,ACcjPlfPIXafGPIhr$I6KArDdd[E!(65piA
++fdMH8QEUGjA2(#Xp"M-[95k6D@rmq(p6FUiI*[Y`i*D6*hNh3fhe[`pV"jK0Vk@
+FcQHDiG*Ch0YGap2"h0lHbG$fA'fI3EQ93dN[+5Y*Iamj65pPHq)p1*cBVl3SISF
+a!1(f9,E@pIkI3IR9`lRlSiGcY)+cS24d(Sk$dFqMKlcbLdVm&2r"r6KlcD5+23C
+r-8dZlTBqNYTXIN+IiIUG"hYHVK&#a`E[[Drrib*35)-r5c4b%F#Da`-Sa`)*'mc
+%LQNbB++pQeMY[XjaeG-[ir0dh*l,CE4lF#PTXYY0"DC,-D'0P,1lH1&r4mF23rb
+kRRImp"r,U5h*MLA2hDDA65kDchbd'ZD5$EdNR*9-&cPZaT,-`YfHJae2"dh)8pr
+TUaVKFS6%jbSMjk6GFK`BmZS($VU@E4SiFMZjX'dSj'TbR0pR8b5iX&'1&[*YlmQ
+AkLPk#kQ)i@9ZU@FDiAjRPa(rre+cR)rB`$JmjCpdMJj,XPS0r(-*F6k8JZ*N9-%
+("rKeAc2,d2m1U@K+Z&ph*IbIMKhEY`Yl(dR"[Br*dpr0iHHZZ06#IpQUiIe1#Xa
+0N!$JK9!a`EAYXa*Ia`D5$)dp9@D'EAfGTd&ecFXF6,epe5ir*4qEd1rIELbrJl2
+[KaXTcNV-D'QPajY2EEeNb(6MI&)TlEXUIl%!cEMJHRFedLNJZFaNYSY"S+kTJq[
+",JMdP0FMIApl`IM[lHRFS&aT3,r03N[lNEk4"FbB02",N8h'bj(GfBr(ka`,2YP
+F#M(!JVV[V2bjr)k$CI84`DiF('eG*,ilPZ8T+@#S9`k9kS2Afhl0KPZaMdLZ"C[
+ii',"4d["Jkb$V)1XZbf+$*91Ic%%MDHBaa-bZ3kAad'BUB2VAF%[bS,N`Rk(*6G
+"1AYhp-S1j-AQ#Jh)IQ((bCF4XM0YGdpccpQMMe@`XqkU61,r'NXr-4al1MZHk4a
+p#12d9SMM@h3A9R(((be9bYBBKpTj9RSGr8'c)mFM3k(arhG4S)%FMZU5chQJV+H
+fp&D(qHq1698d&lE94[jPAE*RrHSrf$N$Qc8`UD'MZD5cfNIYU0djG9(dQ2b@bih
+kP2IpMF0QRP%Z69cH3RLV54"E-Fc+@G5lFcD&6X((569Kap0b(3dAV9Bj8hJXZ8f
+PYD390'12m)irq(P%24T14fhGmh0,PTlXmcNSmfldcA(bc-+jRG[i16GZ20X#@VC
+TFLfDA*28dMFV,FG"5I5USpc4IafA'jIJfp1A(Yc[P'p$iaRHVr"Y#m+#ZTpSVMh
+03VMh+1165mKCSephQ2Bk'HlLlVaalrS,VQM5r(TSmZ1MMlcC9%GiihlU6RI0l[X
+8FEHHYfCcCde2f9(iLZ2d#c00U@'$+hpQeaU52fcNc-qfCRfhUCMTa+2CA236prR
+-[E@p1jY5UiIk@Z(Q)qdT,Q4[LD90PTIqqSNbpT)NISBiG+MKjKA$eYYAh@6fQb(
+$R#jU$V)mZQmUTk#QqT!!90Bp85ZmapiF5XT1Fj,*D$m0c(QffSYZ3@j[mfGC[jF
+F&N1Ib[M6HGYZGYZGYV2YS*E(&VQZ,f(Vh*-Rjm(+SiZIM`3E3j9Fa[13!)-EIk9
+(%bhdrbr8kQhc&Ilp9`ZFj$h2TqqQ4qQXkiEpA$PcGJBB(("N*3VXk6kAjXr*aQY
+VZJh16j'2mr-6),q[UkUNlQEm&GHG"6C20dINm0j-Hpc+1%6'QrIZlQAS+6,rZE-
+DdEbpIF1,2KdId2ZpMfQCr,fQCQpY"CXF'TE3V8YiXE1$khi8idPhTq3Jm(S0r5l
+RjL1$fR8I*S2FcK-6-IjU2FqRZ2%j-k[G0,Ri11hReNcQ*FGY)2Zlc-5DQ64,-,-
+aqdjq$UZbJqKA&4Ge+4[i2`cYAfY6hP0NmR4p5p0lS(EHdFHEDGTq(NePpXklqkp
+E[KlNkh@LcZSlI3(HCZA6GSh!hZQ@J&,FdLA#pfihRBmR"M15qTd(rrc+qhTqE1Y
+VQF'[[r6i1ckRY201U9D3!"`rFLEL90,N%ZGT"UrKT,2[R9[qCZp"qD0f@5U[FUT
+%IjpI139er`D214GS5hbQ6Y1TQ%Lh'jqXMFbFTcQANIfUFqCdVI-GCXD[mh*rQj2
+CF'`r$PGefR08YRc9,R#h5DaXilCAFFp@k10RTE2'CI-EM-EE3jfir2DIJbRJ9'M
+k6rZbk$Xi*bMfKT,d-I31QVZc(K1,M`cdIY-rmACFP69hBV+5NJbA04dcDfeT5G"
+21VB)q[mc-D!iIp$[0jjNF`rH*q*Dh+DE66DDEHQhp"4mINlEMD1f-!ehd,rqeLl
+MG6"Ura5ZXlfhqVR12Xp,EjVCIrhA3Cc+4cCZcpTY)#5Y*RZSNe-%MNeV1E*8lN[
+)Cr'rBPeG*S2VG"G6P*,Tj[69*HC""RmEd%69$4QK6U&D-e[cDHED`4),[SEPQf3
+Y94YMmLZm5ZA,HD#5kBk*M*IYG""XSmb[2'Ch8H24Pi#-1-!FI@)b-S%ek8R(`D[
+mY&S0&Qi,rPZal2jpE"E38YcIl,rmkL%p-r,b%"'0BXBk(33CM-D()D%jXiqGTSR
+JL)CRpN0TaQeB[*mGQ$M@G-6NHkaU-AMi1JaNZ$2p4"RjG6"VCI8Gh0UB2,G-4,e
+XZjd*"qDSUIUFh"5CR3GjZCbfJJcGkR,p4CM(eqbU+ra)&SrhehBCr3CM3aHS)6V
+jYV%UkblU@-2[,PH*V0V0j,q8BHZTS2b(CISY#p-0Q"KS*'KV&BDfV0jQ-NaKVRU
+*&0am&*X[L[HbJU+6-pRcYE(b8%I*eH5Jk$2fdES(TKlD`creQX0SCYVkRY$$ZG%
+p5hSRbETLGTA(G9YT1mJSi)dbCAeFp-C0RNFPQC*da%)I*RY!52ZS1ZFK'j1K$Mi
++V'fe(XZ9qIe'jR+R*4lDZPhk`Kq&j0IYHMT2Z3AA15XTCRKJd-ffY,5#cR06"A9
+A"jAeXRABbZra(PeGCE2rQEJSmaNI8H-pae,S+D@qfHimXrfP5V2pdI*c3@e,HmV
+mqP'JVQY"R+E(G"M-ip0&5rCVcf+i-a"Gk#Qbp058PRD8A33@P0SZDXkhU0$bY*!
+!9GG`@ajh'@XfpkLMr)P#mV)#ile%HjT*Y0CbCG&"YU2-a*6TSkqjjZjkL#lhJdI
+#cbGjAXB+l-CpC!rV09echh(`4j'Up1$1CM-rFk$a*cRi,DMJrlDG"Af[iE1$[I)
+G0(5I4lUlBdQJUDCC$8fPT)+f[JTHJkVlFH9rEjqI-Bl@MeZ@PZ[C8ihJT)D4(T2
+T91bkQ6"pD$-`G4"h8%j(Mh2a$5hqbC6#Qj+ENarY$[)2[k'Nce9890Id%!l#02E
+(P2Qp[@D%mK-MM,6Xkr3IrcQKTS14hP0PXRd'Kih(G"NXIArPcR)@eiQiLH$MZND
+5RUUE**)QXT1ETS+q0"HdpIQFlSV1rk#0NjYC"IedNK&@UT*E2G&iffBdq8XpT`h
+M69*bappTSZ-PhmHcU%DLMhYT,fRV6EXlThVbp"Gl6DH6R,-NJQ6%pc1jUT'drcR
+M!Aq#Kq[d&I6rQr"m8XNGE9q@jc*NMk[`Ibjc19&YHD(3RK-Zm!mX-("-5mheNj`
+EqdN9N!"d%6-8m(RF[R*HbTmC@l5rV,BpkhZVhbFTp1#EGFDHk`[`Cp"QF`kDcr(
+(qT0MfG*,TZ-SB+k$[#aQ$S),e+Yq5cNZUqY`E[3bDH4SCIE3G`'@bJ1VFNNZTXl
+Q#jr,RS,q$c[rD5$qA3BXl68F&IEFhfG,Dp6,T2daZGc&Y`GahfAVlBDI[TS'e1J
+T*ZJMblEb+,9@QBJaY)CCT%(N6QdTZ5c&(*XqSkZ2pbcGI',QFcS1kT1fqM*Mk@E
+8D$ZA'HadZ6hLb'J4RGAk[H4klMlRlQKXr-j6S0$9F%V0kZMSkEeb3d&lfFZrJqC
+'l%SIa[Bj69C+#[JXrZ@mLeVS0jff1bpT`Errlm20r8JJiqlf(19N(Z5qJMh-&0f
+q2S-C,UmDGDE'`H$33CMPT2ldr@6"S-r%eRBidK1[JYILpVXTI3Bb$CCqPJjkZSq
+1qEmq$BCE15mr%R,SqE,j+L*NSp45`AIlj'dLCq$HGPMl1SfASbrhdr,fYC!!Gm)
+'#QUP8Nka5HTHdR(c1mR'I4lkN@$RSNmQ*8`ISlqmcmV[)R9aY914j-bFj12"Cde
+GhQ1Q3Icb92DQ[UEhQCJdQCqY14iX@0-LCrV)P&FfFSq[A2pCNCbGNRlS-CM)N!"
+M*bLV6p*V5#LRE2UB*G,""AbV2,CDA[)+)m@@52drL&ep&26EZPXcfYV@dXb`LcS
+Md[`8@1lQ*3RUIUk('(Q1Vi,DLX1JTqV(%YB$L*pUelU*%f9*Cee4aNp0pJ1KYp,
+,h0RCQ+UFJUS,1SaNV[SN3m"@JJe@KRCN%pT1D1663bCl534TFLHdN5*T,1RaNU$
+fY*`D['3I&T-CMFD#HNVk('mC"lAaD6RY)%85A"IcNlh-2+`iYEc'JqC34BeC+Q6
+*&EDfYE@c*PcBf1Rdpc@aG2TjNbYh29DkIhHZS0cK4T&Cfq&U*Nb0)h1jee[@kfb
+NDk4DlQeVD#JVX,6kH9Dd&"ZERADlG@ZLedL*@lP%ADcmbYVDbYM6pc'ZUf,3@XU
+LZE@4)S+#4'M6pV3@@&46q[lQJS,+LV*@&CF@hYq,+XUh8b)e['M88r38&C4@m@9
+C6+#jZU+9-LcR&VCQ&,SVfh2dCZ+bXXSBF,qpV3@0*Hh[lC8@,SSBC9aIb)hlYG@
+kL,35+#XKiYcVTb(JRikDH4SSIFeebIRcaBE'aKK[kb'03HQIN[#RqK0NIQhL`h(
+#!q(rNA@aTqXXT&Pc1&@A9VD`iYa1#X2qQB940PJm@'b`YGTp1!HZPUIEN!"HXR!
+TK%T'YTqIiQkX8&kbbXX+bS,'XX4Qlh)9Xbii1&)M6r14HYYCPZ-rK9XE06pC46r
+dkc6i9CQXeKCV#e&C%c8rkGM@A1&GB@&@9P[IrmLpa44V(0DLkr"&XTlmHDXF+XX
+VHYQ9R&e&P@9Q&2hp"2cpELf0M'ZU!9plK@9PBjUap5ILaFFUULcr'fAHc,HJM8%
+54'XZ,H`i4-bLM4Z6XG2@aSYM@eQDXC'lS)fDZGh&llBpb+DXqrK9P"3G*3!r1@1
+R*!6mrTiPck&C)NA-bce'RdmDeXD#flf4&L`DRe2p9Y"'Rq6VCR-50GfqRVC8rCB
+AF3eXLIe!H@-UHj6P*r6e[T4F+0+lHImMdj8M0DLZ`Y4K6pLLEXCl'DH,Tk+IVC&
+VbYr2cqlh0GIrkQ4V@9Bf-RFj$#Q@GMDf-LaS+fbS19Ka)03&&"2eXb,)ZGh@eYV
+)i8bLX[6Ki-LJX49d8@aQ)Ul%9HR`T8r@G[2p9+M4TPVDjUX&FK"2#U`N9FLeY[4
+[k+YeZjYBdDT[m,(F'JS+h#e'DV33a`YFe2qpK4VA#Ph9dUbS*qhYCN@YZ+fYXE+
+0k8ZJXD,84Y2)YE'Hj6,cqDXIkaKAc*%@JSTq9-M4Y4K89l3!rBkH*BL[e&&Dd%M
+LhpVZ4$j'rRieP%N9PMBa,AFaB,%99C2m8VlS*HZed9LUaBYE@fecBcdVe-j35*9
+E-m#0TjqeXIUC5Ic@Rjk,&XCr#Q85+UC38(J#Iae*4@G"&QDHI,h,qrLL`XD+'C+
+M6*9V&ZC%JV4STq4)VCNUjLd9MBi1RlM883UidUL99PB0YFrYRTAFjbJP@XbCi("
+&B5`L[5ZP+VSV9ER(DY(fSXe+di3bX,8@1Ri0MU*9Rh(F@-ULY5ZVVlqeYEJ6[im
+G+SVV)c*8V`1&&$L9Bpa,Rk`YE91kHa`T9"&c9"6j#jk5-a3bXkUJc9M@CVK!(@*
+)+eXCNU42aC@Re&MBkLj&,4Ga2JRDb*q0IcpVEEZY[EQ#9Bj'X`V18LPRp4+XCm8
+qRc@%9CaD,6f1RQ6m@aS+cZ,fh4Dd8X8X@B+HIL@2#XH&2ST+bCTl'IQDJX+XG4G
+6,-I*9"&d-rTLe$FLKNeQ&@fFVh"3kH9BdAF5K3DG%lU+,6UQlS[#DRf4'*[Njp%
+hTl'JP88ba`SZSXG5BQSH,CERLfAi,M8@@SYjPc+V++LQ@XMAaBhB3pcbp")VGc-
+%$*mbq`V@jS[HdmrK@-U9Tjr0DMjeM&V+,84E%9fZ[FeCEV#pbXZSHhh2F@9lU+c
+GD@pq@iiZ&C3qRL`kl$aIHKdmr#aLbZa'-V1+CCqQSNVHaDc&V!%iZ&aEHbV2`CU
+hYk+XlQrKpbic@&-Pa58&CFA9rZVqjh@j'DVCAcE@4K8'Re%UYS+fkXmTTm,#VSH
+"Dh9&&h5-cDUc2Cf8@8-i9&A0VDreS)e6ZHjYq,ZIPeXLeZ*GCr@0*ehak,#Z02V
+Y44@*rbKBPH$dbQrP$+AYj@BbYedEAEQrh2&i[!aFjZGc2hr&XYGLeQj`VLari-a
+$aFeBkLpj@kd9d-V+rC@iZ[S&C(jRCiYR$-'2efRN%8@)adfX`PBr6bU#Yh2JQ5(
+Q*8bHdrad"MSSQX"4*Hj@A+,qjm"@!f1&aER6b!$!2GaVUj[FeFeQ&FAm2&`Xd@d
+jVFpPk0V+V)CPr$)SKEh0EfNrFA-*RM&dD*MBEKi["&X,qraBYVQY3E,drBh0MTq
+,2d8A05R&[@'T,#KDZVUB,RfqiaBER6h1RZG2KIJhAZ9NAkbVA6QKMGF[k0VDeNL
+iV4am+9U*qXmbkSKjBF+arlTiXS90C$F``aCKGlDd&cBd9MFkIVCme,cpV@@XqDf
+8d*Mc3ePkLYeSV2Ne`f%5YdmC&9FreLLV-RI!cA!L``ePE4@YEADJ9NV85,+kSPU
+HrlBUU88Y"G@-Updp"2bYC&RjM%qLp5S@r43IJ&"mBb'RrCq2qA[A[irQrMqEFlR
+mF8Rc2eZDdr!rj@aE@XSUbLYFGDf[ijPE&e%M4A6,@[MX888@IeH3!+`8FbpSTAT
+'$0VJ2&"q00MEpRpq"TP6RZ8#TZ9Bi[&LTGpDcpVDfFbYMDc6h1&@dmUjSTr"%lF
+F8aZkp%pV+5JeeMIhp&G62kPEUTjYJA"41rX%lTkc#dr&aEJ[AiYPTSZZ`U+CU"2
+6iRSSRmj'p$#VG4Pj4L@40@,8[AFAA@2cEqr`T@VYCNrBUQ)VdQ8f$G2@4-9fQl)
+XT,eY1QrLQ)LIPFTbG&2mjF`a[5`Yd*q($6)"2b[5dm@rNHK+ed2&jQr[m@9UjNq
+F&&NP-X@(LaD+RZU,6aE1al0-F5+60DIm'Rr"Tr`($jFB6dU,@ac9%++IVERNkf'
+J`LjQBE$f(&djN!#Cq9rSJfrlRdTQ&BT$d-Vd+h6SiKQaDS2R0f!d8HSQR+CBXL$
+A'dSAEm(`,%h0NfljqYj29eY"4$2'l$+YHNBT,&LN`TNAKGck@Rc@Z018cd-+Lek
++4p+*GJ,6Qc[TA&,lf[&0BbX''Y+imlRC%qF6RRQr(U,hpNB8PEZjP&mT&GM4Gc+
+`Y2-LrplRdSPMV[6&(2kkCl[cIad8T92P*@R1VT@Apr)436*@QmjUI[Ge2LKP&4F
+bcRq,F89E&qG35UfLcZG6HGMCVd+f43F9&9Dd8V6i5D8e8rrFeTl'AGAXrV[p5I)
+PIe-+F@IPZ++04'P'BG5kX[kbrTeXSZVUIS2kkG-Z0R%0NLbc9"-VD,1Cc`Ip6mU
+JcAqUf4)iYk+)U9YCq82aU$DKXCCXKr-&*Ta5j+,i-Ve'+B)6'I%XI"H+@XdkUE9
+d9"kQRQ(A!,(T%EQF[br*d9lHfTeLC'DdpE@b+h#M8(cIj6%89!LMXr`DL,eXZjZ
+D$ADH0i0Ua2Q!(6Q-@jY42@YESfTlmIirTjHNRr)p5CBLFP6mrq2YDc+DEME@9Hh
+ZSS*qC)j-6fSe&E+P8&ar+0-09Y"BkH0+Xr!Rp4eYM,ZE'Jed``LQ#keSP6Z-dpk
+EiY%+$!BS04q2YqFbN!"2crJb02LTdDhXbX`Z,q1EbZFd@FVG434CqYqSF4&[U$P
+NZ)C4`fcmLii"YHb)TSS`T&RaD,rPM,m',Dcm1&N*mjIp2)P'A'FXCK2,GA0rTkG
+!4!3d)@FUL1'qYBU0cK@@&KIM[EqpZGcKH4U+$leVRIj4N9%-0&+M88bYZ1"@@mS
+ki@&@@Tea*@&aFdGCZ4CAZ&HkHYXUcrRmV2[E@JUDfiaERqYV5C'0Vk$-eY"Bfr&
+1[MU*JB(AQXVHXPH4@d&VKB@RXEV@rEk[+)#)#EQkM4VUpYGcZC8DTNGIEIXe[r+
+hjTGRLRX@RDiLB81kaH,CB(&K[X+(Z-5(Z-)l3rF@9[C@m@h6f$VQJe&VDjbkS$N
+cjLeV1,)YE@9mhJ9R&aEQpR)IP01XM+3qjhYC$VX@'p0rb'rXSERfqVM3`c,@'bi
+X)MIq9PclQ&HQ-Hbq8dC3f@a!IKBZkpcA3cq&ZSXV&iYBG)NcLQ-DF"m+)6Ydh4K
+9)e1icmUGZP[ERQDZL#2Uih+h@&BJ'J0Li5lk*UP%a@3qmGhMBqjKGaQV,#aCRZ(
+GDLd%rDm8Eb+3!-@YC@FREf8V861,@88bJQ6R&V1,C61,+YcX,4TqZ8Pj-jQ!0VD
+f,C@T9h'VDhTbU5,'N4T&Edpa3522-'3'6i'@+"T[)8%rX6TGVI3p[f`NS)Y&XGA
+@8%LeerSHK#"dUXiY!+E#dq&Tm@IXTqLaHjXV@Rk#EphaEhfF'Nj6RG&fRJHIZrk
+rkrlLaBY2&bFAPi[2aG,&qj&mH,r5,J4IPLiZ4qCBp(fGaphm2jVhGEcermi8RNE
+,2k,XGGhhJIPrpp$qI&RUQHjDHqT2GE2DkHm'Hh%p[TlrFpKaT-DYMG$'qh'r"'m
+@0ZBer'iAc2SkEBHAZrkHhr[KI,$2dNradr2r5RqQRq[RpA2pl2q&2rTRpc2rbRq
+$MXG8ikYah0ilS-GEBlVmGV-Ghf1fZ1rPM[Fah#aq1ar,Bqcare-IdZ2k[(p@J)i
+%2X3IJPVXIVN"(!KpL$r#$(rMarid"(!M(lE(qaMrPb%M)CR)I9b'Sb'`b'db'lb
+([8"fCD#JqC3Fc3I@S1aS,ZJr43IZS2mC()j$)jI)meNEE)fq4lr)lE)lc)m@Lb[
+1f[BAHbr9ZI9raJBFDPil0@R9GTq$`[dARVI"48924I-SV1Lk'Lk(MCl+5XR25jl
++)#5iY6&NaC-AMB['a6Xddmr6dmp6j1PTjH8Tq2MFR2C6)aXM6ch'c`#C50NCkMR
+U-#`+!bRTif-Tjk*6S'JIP*k224jl+C1925mT@6f9bG&6j6N-R2!AP*Fp*Pj2*mT
+NmR2#-b-r6cf4RXM6bD@65aDH5H4L,3FE*Tj-L*4bC%Z,)N!Y&j+ITie2'TmMNj'
+-bI(cdZFV$4$4C34`TN"-T'TCl+HGNjlPFC6br1TBZ4Lj',N4*qG6aU@RR*-L66`
+`klMFGP+cpAAj-fTFS!FV"U2"Np**k6MFGaZ1S2dj(rY0r1QrQJ*6IcbGM5jkQrQ
+%G0r2Mq@j21j5Jr63ITT[jmEMN!!3$6daIc!I-S+Zc9f&)Ad(kFT(r"(r"P"@p$+
+`FR[kbLb@lbQmbGM4GV6pMP0GaqpbGMP+bLbN[[T25!pBj1aj2rD!e6rK%SJ)aCb
+HNTFmJ)M1bHN4TC&23ITih(5HN33N8m&r4`)%5X'46b+G'ej,mcM#C1aN8k*4!4!
+6Mq@PB+FbL!P&fY&fU!Q6hq6XI1bP,RKTh#IA9qeHR-PB0,RUA2)#8ZHBl$'BGN5
+,C*!!k!NLR3Db0C35U#A35XM@C'X3-B$!SJ)!NLPNC+JRk#IRU#IJb%rb@185TD8
+*CH3bP42C#A38((ir,Br,C$*d'2j2(mRMk@#9PjFA,cf2j,99L(NHA8d%GU-3eDU
+'"$9X`3S12b)a5LdT`Dar*8'2j*,(U#45SZN"+#96XDMMQY!-K)b8M*)%863p"'P
+V+bJRmM29%par'mMb-AN11irjJT13!%#q28&b0Cahc2Q4H4irN!#RTFKP%#Z3!14
+4L85Y&NXK,%)JANP"FK,SQ$&25M!),FI3FK35V,Hj$QH4R2Mp$e3$TELiZ02FA(D
+cfPj6TZPb0Y66h)FemcTDQNSFI1C'VjLFMic(9-pc2c1QUU6)JMNZBL!M86h-mMd
+e94j((a+$*I0IJM%MaAf)a%%FK9p08dSPQL9&'RV()9I5["1,4Be"2N[Q23T1ci+
+ir-6e68dR'$!cm5,&b1-ae"%L6J18A*Bdk1U#'*La)f,LBS,'YP3DJR)KqSp3@FL
+3!)$`X"jbFL6ND*N@Ji1!2Kj'FK38!@G`iJ0aSQ2L4*d#&"if3L3Ji"M!E'+PJS4
+144B`j#JbNj9mC16J(BkFb('C5FbA'#CD(5iVi(+(6b"d@0&TN!!fGLck1E%G"d5
+,M)P0aM!ZF3,R*fG!S$*`pCI(U(4BNDF2XB')"#HRiNl%RjbFaNp$LX%aPULHKRi
+RbY'+1*86d3qZl(FI16P2&LdXrM!3b-342(dH9Ph(CcdjM+I2A!%BcQEM'a1-amD
+RLC-VB(r&A8S&BbFaVX+L4DK3T)rR'#X@*24)`)S(6X6(cQ0)KaX5FPJIM56XqNL
+CcV`1YJZL42T6N3XlLSm!FM06Q`LBcM)Q-b-5,RLS'*4kqGLG%$PMl(&bf1U,A,D
+5*UTc'Bhc[Dq,M+''UdqNRHdm,acLIKK``%q$%iGaJ3`k-$Hd`2Nk5idh[F#'h`0
+rLqRpr&l+idf(rcq2lq,i1akVUEM6F2c)GpmI#i@DfZ([m#qrcdrIG2HF6epYJq[
+qM6F2TG6JH9XrNKc2)p0kqpl(qRhm1(a[(ffff[jEcLiH(KpPm(&f-Q(4iICGAYZ
+Lq(i0el('pG[pMLDATGr`2km1mhh%k,aXAmrV,aPqpc-2TrY`)Hbq$pN1h`06$fA
+8I$pRl1$T[+fGCeRIE@hYpVr(6GVYZTk2"[-YifcmEq1MAN!qAII"hrVGEIAf*[Z
+8iAk-$&`lLhl$mN[%KjISSImG,HBQ"FG2mZfmharQFcfKi&)I'`IC["lH(l2Xi1$
+qR"iA-``hQ$$fAf[NfF2&h&p$Ym[pR&j2VIaARQG2$$f[5lf(Vm$a[lGai',Fr$$
+Ki&a[X5mK*4B1TaIFYphdZ(XHZa-5(fI0a0Y[mANX2$`IcI$dAVIah%1$YX#(!qe
+Ki(`qc`qRVSBI8fpj$FHRYVMD`l2ClrSpppk(5L&fZf`ElDpVIHYCA(bI(Yr(kl3
+GPjZqr[J#pr6m1ffZQpE8hd2qm-JU(jF(4r*`1"JA%2VBR%qMF5rUIie2,`r*Jh'
+f`BHeq'qfZfl6kIVEAaYYd[5rjdhT`iZpq5q[YYirkF#(ibS+("pl%[2[EEEEH'(
+6B2CrDfr4D1ma-1(IG2`m'iaF'(iImlrZq(ehfIdrLh[CrNi9a$j@*YG0`2Iq$E3
+iR)KeJHRKh&*b[+pV$Lq2erL3!1pfh[I*$IB-1QpQ(E`pV[X6,qrIHYdZcm$KFc`
+)Ell@(Ei(Xlf(63`q*eA9GIaEl"i2+mVQEb(hr,`FAj,c$Um$%`)IfhRmq[r4LG$
+l%2G)C3rDd[CB(Xq[`[```rrGphhIlMP[CiZlhImF#(&r4YSHCkI%[X%CcIkMi1A
+qVLq0qL(rcKFcrN8LQArGdk-X8-LV2Ci(&a,LikHq`ll$c(QH[e[k,Me[i3j6r1Q
+rM$Z2jr*JAffr4rJrKlYrCpQqc3CIbi'"diC$ZG&$m'($fZ$eqpl6q2pGRYYYFHl
+UIj&A[XG0l0jJkREqBA#Hb9Ur"l0prcJF$K``qrljpehfX$CrmrmaI@q$6#Qq'ia
+1Ap1ZrlkF1*JrLc0aLB1MdI9r*p[c15phaIrF6#$VKE26A(NlEEA`eQepILISZ,r
+El@iYp"m(VlMLB[l[(q6Ki2DNqZR`mMQZViIJ%Tq[kq($i'(JElVmcM06jrjUcEd
+qQdhCDR&`2NdfQqf,I5lr$f[qU[jf$rIY[5a1&IAh6`pVl1,i1$fZJYpYdm25i[9
+m2B`i1"erdiF2r2p-$rqibrdHZmrC`f@T'%[Y,YX6mRXrh[)BFlrE[q8m$AE("`F
+ReeadQ$Jlh!*1q2CEr[qRh'piRrppfIFH[fX0pqMc1B`2Jf-0j`pVLEI%qMjI@ll
+J&Vf(q6IN!IiKKpMQIKa2UhRlEl$ic$p2LIj[-@mZ-'mKq[Lm@qpEj,cj0apVGfr
+Nhf,LGGr(Ih(5F6%Kfqiq'(i1R[1U[Y-)1qi'$eHQdh+&LZrqer,Eh(LlAc-A&[Y
+lYp6`m-S0YX$"ra[pR[FAKheGa26KqAKEA-kR%d[`B2%K`pVJEHhKf2QS`ZhpR&r
+"`1"dm1*Xp6IEIY)I6klXF6%[0RfN2`DD(YB4cIJrAIE2jIJraZp3-*U2KrMIA(d
+Z*LB*#PpEiQaV1(l)JZeff*NNJR$kIYBHeiF2JEkr`m1'hk("pG)*`2dHc[H8[1R
+i@prKVrPk[jBGafAqF#(aICYq*IBHQ,$riGaqRJF$J&C(qZ"`2H))K+6l2LqA[Ek
+q`iIYiQ$YKaF2i1Al(pfMpR$qGeRl1im[4l'(q"8Ia06Ji(VhQq)Rq2TE`3Ar2Jk
+&%&J``llLH[l&me!rpa#jM!Z2NiRmG[fA4r*dq$kr`G[m[j0Y$$bAQED(!pI"q$e
+m%382$e1*TY0TZVpIalcqhIGm9(EAKI1kZmZ2PklChKNYkl$-6frKpR%f2-I$HIm
+[2Kr4JbH&c1QKaHLdZQK[YRJAh`'*kma1*HFAEEEEH6KkDqrjZphr!B@(fF1q[&B
+EE3qALBA%''i',kIj0pdqpa2A`rpI,q38r*I0fejm2Vr*JF1m-!f,L9Q,d[XqcrE
+jGYSrmp9e4RTq(6F$%"ISrYB'"l*i[FAiBF'm`Hedh!q(Cr"Lm6Hi[6mVYBBImE1
+m`F6cGrl1,YI!-H@pqcl)rm0phrPi[9G9e9`9Sp0f[mX5(r(PlE&a,lEl$%a-cLi
+1,JGImZJhZ$`p6pVHp(rRXX#(LlA6Eq(Dp([Vcem'q[,MhrKk2F*X[DAXVlq3!12
+`1"l(`HRfDZ2FAff`GYl1flmV4Z0VErkiH*!!p2dA$[Z9)praHEK'%iIP`lM%`m$
+3D&@%h``P[`1"IDEXYldA4r8KKplbrPYm5%[9dY`34lf"khTkAEq2m(6iLE"(bpI
+`2R3k2DlIVYRJEDh`r@pMDVSfrcm0iBA-(fICf[Vl$qRMp2LI$XlLmdhqrBq(qj@
+rlRrf*LHPJmcIH2$dX1fr)+rEQCU(&f[k0[LB1"$dAMp0$aF6"0@f*lrMHAa2jqa
+f2fX6ElICi2!fq(dZffd2DmASEb(&krp(ViR6i[m0pTMB'`1efhJ'b$SqMl6IF#q
+aI+kBqGT,PF24Sj@$TZZa1@m6aqKKdH*dq"[H*mQfdfeaF(jIrEM6FAeZMr4l%1*
+@HAJD#("hq$mI#0S2Y-,k[TpPLqcmKIf9RF2!fe`PL'fffMrqaf@hYjKiZ(r[FEE
+3IlklHk(0`GRdQZiA&`ISISq$eZ"Epaf[DGrQBINq$!q1(p06eh5FjTTljejJ&F1
+(ir4h%2&`G0FIfql"b25Frp2$q22I-jEVpKm'dPcqimImZqa2dHYfYph(bARJ@r"
+Vp($LGakILiQPpIl2YmVhR(r$IGL0hLG&qL(jRNl$Cp,p(P1Zll-IVfrVq[iejYG
+rj@*UEl$[1*YG0T['mE3F2b['iH*l1*Jp2m1cd'caF$JH2Kq0`bbUikI&mIHi1ha
+IUH,Jk$C`pTaGMi'*kqea0llZ(JHcpUhq$j06iqqh[Xi2Dm[Z20pM$h'r`G6fZ"m
+&jYqKk(SIUR&&d2VFm[%ad23a09%RcLQk%$MQ(jZC4E,fZDk'cmLMLIZMjrk'Ucq
+Ik(2dR3mjSICrMLHckhBmp2I$ihr[MH0i-AN!'mE6HEiej`1*i`Fq&Qr#eAY9Xl%
+L5["j$aZhi(MIGmEa[#mEBC6kA0p$d23G"CLNk'HLFp1@IeBN(MIRrIihGr(b[am
+VXFjCCcQ,[iq9LI&rjbZlrIrprjqImrjrr2`pmE52IIrIr+$GprpihjrhGpihrRr
+flr+KVihrhrRIIqH0hqdTI3jd@2e1JjVQ[3qKc(Kq(cAe%V&qT$`iIU3r&-QH'Ja
+p6kRSFlcAKjkSjhQZmp2Lr8mE`rcFec4aJm6aS3Nm2aSI'qTmIarKZr$hC,[phI"
+kMJq*pa)!5pB"2MjVk2+JGA333*%Rh+@*%qe@a*Rh+8kSRNdAa4ZHa[NGc&jf*-R
+qHP34CbC%qeA6Xp%PGVMSZ0UiNc(qG+Jq+95if*4cf2L@[Jk5eTSNcb+d+DfPSBY
+EHbZHm'*i1NdJ+mM@biXj48X@YpV48&&PCk*MmE3cQ83AkMe*8&E4C5*TkfpL+AF
+""MU)h5aCbNSU,+4D('k5pLH$jha0-HUQG6kNUMJR)YEMFE3886M!apUML60##mj
+,SU,H33@XERJbpV'U0LkbXAk83-C`'SL$3m'-Xim'I!12%3NZ[DRCb9Dkc'pp"8c
+,A'pcp`,Sm(f$p-V1A438PG"66f3LD65@-&KcGh"A8G2RqCXpYf-(,hG*RZXl22D
+(DChbZecp6Ce0QJ*PHIJr2"qG!3",Q*YSNAbTAh[+qpj5!L!Pc4q4b1dj'fVUbfU
+)0CYTcEEEYHcJqa`S-Kq[lhcr*JYE@QfdLTMhFMpI[8G(&jR'FMYS2Y6hf[+SjhN
+DkE4EVNFhh@dfRDk5hJcHbR+AbV-C@$mq(q[lAl2X5k6lQ0UGYqcbG"Y2+UCNjj0
+r1IU[BrjkLXk,U2HUSrMmhYZUjMfq@p,Lkk5M6p66!(RjY(p1MqQJ*4r6JeBdQ0b
+FrY[VEEkb!L!NHMmM,ArRqAPB2%VlrCIR9TG00qRRk,EI2rApkZTUkQaidfmm[2b
+2eqIQkmDE4EEcDll8pYZKTjf#kUTrUl6BI6fQYSCXHA18[,8fdJSl[+r"Y0KYYe0
+j[RTZffhhZ@l@TcrkpYj&6c'LR2,h8'5jMYqbp[RDAG4p&qR+lUQjLEk2,BZ9XCZ
+FVp6Pk21fF%&4"XJ$N8qCVZ2kRU,RHCDRV[AcpePU1llV2jDM!0!E2b)[cUUMY,1
+SSqFU0&ECrkZDbXh4@p0QS24Vk[jX'-dX%(B3D+$5`I6JdY4,dZUNbFT4fPKmq$U
+*Z`Xr!cYR)iq#MX19ZDE2b+l`EE`[a4r%Mj+Td@LbdZHSkkZdSh8hU-P6@ReHEYT
+10UmV0bXh+cI#Xr%mQlp6(8NLQae(DFp4k$Ylq#jhA,r6bhfkl09(Rmhf@CTkSF1
+E@@d'mkQkhPYlGH1*93AS"h[C5+Ejp0mp!5Q'-9cFr[DlHCE*G4*TGj5la!43D2"
+UTG99j6+`E+QTZAqIPImZ1K9C@AqIMS++R,$)0jTB0,4jNGE-r1VU22j@MqVmq4"
+e'Yq[e%Rh-Y"V5YLcZD1ZN9e"0mr`)rGFY"6@19bd%l633I6Xi12Uk22C,*DA,C6
+kQKJH1T5F(e-G")TTkQXrb6Q@lHUBkRC8GA9E,R+ZEIMTm["lF&c8G4Fe&YSU@#S
+TrR8I5dI5S#8IeS,P(-fABC+E"PZ$VDklqG"mk"!4!5[f8L,93Hh(JJYY&P1bc1L
+p[1deLVQF(SS2heF&&)-H'5Tkk4Cbp&6efIp,-f9R6@H@SrUr6NC+QqRf1`XqpJZ
+j'LJZk22h0('Ti*RllRMpjqDNcm[4HIQl2C6X'mU+@Lcp(d15Tk1dbN[*88hfml4
+jfMcY4PDM3ebZEMUHZR-YIhYl9e8dA-hV*%QPYYGNXNVQkYVQfe+-&[-N!G4526U
+EaP,Gi1R0NdQmT0iJ)S0b%'UYYP6ai+UQTZBbQQc,UEh"rmJZlq#FhN'55Q3j'PT
+C'Cc%(8&NQIZGje'p*Zh-%LfSmr"Gh0(&RCkSZH2MdZIYY&PV9(+bR"Q4l2HA1@i
+f[ZmP5HdmFZ!FZXZEAjDHZeA"bfmhG9"IlUQ&TIkL255p0"le9SXrPDURJcpkacj
+U539d-rc8&h*!1$[DkQqINU22kA*38HIYT-ZjPh+!LJel)R,ZQJPhYYSYPQ8L1Qq
+FVP3H084bEJj&c"5Uj@9NCQ`bd'PbA(dI3b*&0p*CY3Df$U!LhQ-LCr38GhRHETU
+c4E,kX6+eF%(L89"89fmQjDfSl[CEc02+5ff5LAF!jNL#kJSqPUQZCEjIH6FrAdm
+'Z(-&,*JQjEaIT!*6`'b6IeF&r9jD1'+c4J*Sdd(G5+144S#)#98'UM`5pNVME66
+T$QLpkrd9r0[DL$2p0*Jad%%LZJ0&H9TkqcZY,4hFLZ4aUIPrTG3VMA*J3NC+#lJ
+PCr2dHI((TZBMfX@c[k5SY[1R%FDEACqVHTTG9"AFMMS+5jYH#B2hr('JJV*&C)3
+%bYCRdG5PGZCA5hh0+,CdG44e90A1R0d`jY9"XSmHrZk+lJ&SE1C8IPDI-r0,RS0
+A4p%MQj4(0hNJ(bDH9i0(2CD$,8[BCr,8QLfA2$R8Y49Ge@l,FPeHJT)m&qp69c-
+(f*'INeP()TTPC[-N@GCEHAYlQPZcplq018QQb#l+Mcp2AAG2*kMrh+cGKp$YkH$
+D1R9kLXr("ReT(0+4mr4bDHZdS"J(")M9mf6"Ih[eEYdja5'U[9QhPS*irHPCdKZ
+"jBQhTHc)TZFYXVRU1ShNNZVb8&b6iN5+6JdF@c[FY5k5PPk+llPablZZhQKd('N
+fXSmQeSS06H`AI"4b5aZZH14qKp14PG,qM+rEd(-IhJQQbqkFQ6"RlY*Y9`j2"*Y
+hEA)+iY9TF["XYb19Y(6PGI6CUS@E(qE1Lcph"6G2"bd(bUjG2Q5G%LMk544r9qP
+!Nf+bj-Y%JT0+bY94jrR0Y"0d9hG`$Q5mrX[hC5FZi"cHU(0d6djYrIr$*hNQX-l
+dj`DE2j4+9C2kE(2k9p1IG9'@dpGXUHZl##$Jh2"Z3%eYGc"XXDZGNb8QecmhqGB
+MSGV6l3!`$[j'0TUkph-fpqVc21Fa8dpbQ(b[+8E*CY4"ck22dPh@'IR5PTRBNf[
+[[ERf#1IYi*A8lc+dX(eB,mFr58GRIbB2rmT1CrrX'Kd'LM`Hmp8Pc9AN[EqXbEN
+%M,8F"X,qIP@AFGLkZijklfb1aRcIKZR6PDk[X'C5,Z"CZjR*5rqmp*TYTpS!`$U
+i09T,r43CfUMk,kVdjAj+VcB-rpEZ5iI(@G,mX"0LZcp0QFr""6h1@[EQ5Y**&CF
+ee&[,RYB*9X12Ri#N#1089e04$4j23IDmUTmalQR6j,9r@JlPA%ZlDMqXlQLlT"D
+8RCbD5E"88GQ!Z560%lFPMMbB&QSE#*!!2'NdeRe!"J'19SS-U66VYJij0FVNhT5
+6fKbFC"p4*X'0[U%QPTk2Tc*kNdVZk`S+kLN8pG4aYCrfc-YGkbkUUi@I(+b8ZMl
+V3IB-1[82EPr1l$5bCbj'JNI0J(,[EhTPFYhUBk'AQGPRmc""XXUC3pPAIBH19A2
+FdMA0,SqHd9fcU-Te(*&G5aFhIjA4A[eDM4H%c8eAQ(Q6[0h8E,C&)1FXk+$MIU,
+0@$+SjQQVac+9*U6pJVPfGr+k[S$ITcp46I0NTU9p$*8e&f0*r1$MrYr9qbrEQGK
+*ib46@H5T2qQTR3999(@MHQrdZlP"[4cED`m,PER`[SIE$(aERNAqh-bP(chfYSk
+kMXfNN622jbEK4acDGjZi$Q5GPRSprRk,1e`jZIT%FfcMUjZEG1EBh0,"N4QIDkR
+XZA"lH4fZGbYRFfdpP2jeh(pVjR9q&Gj+PHR1T[SH[RE-T+ec[Uf098+jhCB,13f
+RUY&d9Yp2cqDZHTrpcY0dAhUlc(HU!VEBjfmr&qa+49'mbY2PSffFFc,9QLTD,CD
+#X[l6RBpYT8j$rjr2TXcIk,HE+pk+2qq2lGf1C+JbE(-JmA2b0T6p4PVq4"kUZCc
+-'ISVQj,*jABfeYIQlTRbNd#EZ&RffUJY-PPD2m@flVck6qIiAYcFmMQhGce(hS1
+C(0Y1G[kLjd[Vr2bhC-k,B0ebqHm@rjhU-jrRT,VkZDkRd[+IZE-L6fT0QTVU2DG
+U8PiqM!0!Ej+l0cdI44mV*YZF1L5[(*ZIAqG89@9bhjmYpZlS[R`FPNB0#abYT8Q
+(IlGTdd&cNLklEGcGE5TJMEDQcpr4crkp&634q0XfZ6Ircc1UJcrmpTarfqRUY$A
+rqHeTG@lFMkl*Ur2fQVU4b-rdPA)q[VZmd21cIUmalI1k,Q1ch9,pAX1EjIkeIbr
+eZCZi11VRkF4F1IN`FM6q9'FR,GbDMU)q8LjrmR8ILNqIcpY0q[DFhcqCqjcYlr,
++G6pAMi*fjSS-Y4j*("l@[r%VKFr0N3DcH5IYHB8B($qY4p29crkqSmQQU)rbCPA
+%TB+Z$+IDVSU1*PZ$e((rba[HjfMd!iPRiRcD0kF)hqUMq(h1pl1djEa2TcEhSXV
+S0Kc(kImm`[IZ"'QfP(TAj425YZJr44fIfqHGZ(EFpPGVYZerCc2dkMrbpk(aIZF
+hiZeTmVrM+jqLqP"UVQ$Zf1"8mjQFr*JTj1@c*NaA2dBCXr4A9cPZ$lAhZFcm[38
+pFVI8qdZDDAqZPRXX8-lVTkMhT[3I@jlXp9N0YYV[MrbG4f#j,VP,Nmrr6q$1J@Z
+j@#Af0*!!'IIXi1FPmY8m[)Me2,dF%(81Qqi2(YDVU(Q&q6`Db!!`$q5NlRl50rH
+p(SS0C9dR9h0ARGTXYTpM2ehqF`FC9G*VTHm-!m(h,RX6&$04`+C-q2FQI'c1ejG
+hqLRHVcmL2p*VJe-&05dXI,C,+8IGCrR1kJc[2DAfiQffhQ8IIH[RDj-+92@FGB9
+K,ZpUSYG46NL$UA'S1h)b5&0RRHPbZNZfTq,+4TQLTk(9HGi1ITl2X,1RXk@$ZcP
+Z(4TXrf-'IhP24dc@FZcD@T,Q$*!!celf%ABFjap""cmMPrQbCc2m'#QjDPV-rRj
+G(DCqCl@9Q`'if9Y%RHTZC+C*UFh9E+$,4aRq-SFM!GUYe[R19BjCC$i2+rc6PTG
+Xp,M9Sce"Mjk$XBpRe%&QR9+bfCVT1mI619QV'EJZC046c12kLfS!,pFCV8`38I,
+8XH2"4jDNS(fc+F310J0Th,C@pUSRYEbQJipebBeeh"*H-L6NSU+eGX6e*ZUEb4A
+)a02GacX65lBmFb@!3B8Y1%1$jdFBR+fhR38Cf0TP(H`9f9lUZcqaJhPYPUr([E&
+G4q5MV*&K66,D#RXmYe!a@NUk1ZNZ-9E%1Z-4d$ia&YlYhPJ42BRbfCj@SDa%Z4"
+mL`MNT%[-R20"A@HLRXVEF'SJ6f2jN!"RkkNSr#VV,2hH5TU2RjAJ4Fl"6dHGJbY
+4pLMkA,8GC6Ua&0R+23@-(R4UfVSl0c0VUamNBMJk92$eCbj-%jkM@*ib#bcre*-
+(c4@k@Mjr5efbdYh(1cp)4M'3!+Ec9VfIU6*jL,p@XJf8'Ld@bk#FT+5Md5XAXVd
+K@Ybcb&FYr2kfIPm(U,RU)ai,qTVXYTEfUSUl+8dp,TB+V438YR4eP,4AX&Y9dHd
+G-qH,eEamaNVBCr45Dl*9f53%3%VD+)lDUc-)ebHdAR5-kl,+e!h2,V'N'VVNm(-
+%[1HGp8lKY0bpI@QRIMDlN!$+5mrA(ELLp0MVEe(66r0SrT8HdTS1TZHSL`35lC'
+QJbZIXlDMVHLirj+1Z1reQ[YepG1AYYCdGGrQMqL@S-Dbj*,1AUVHRCq["4p$69h
+G`IdJrSJ)J*9cC%50AD6f[1m(RZ&5I(5`5i+HZkLMk$5fIk"YUHZrR6ME8Dfpq""
+)bP0CML39eES+3k00&S[2VB+k!NlAacQU4Yi)1XQC@E(dZ9QqICq*AG6NTcj+LMl
+fQib@2@aZ2X36XAB@GY638FM-Fj!!4B-SH4lr)e$PJjkD'r1RNQqk"r-E5Rj9lP4
+AA8LYpYb9GRCC[P9miA88HJc"+[UDDZPk&*GXE6Jh0GPS*+HH@Ym@#MqI*SqF'e1
+LQPj#fPhF(6PRdV,Ap6rLZSmlArLcCURd90CqT@@m%QjYIqQq&4TC$Hh[f+@VRS[
+Hm[6`D,MFrPkUkc-%@MkQ$+`Cr4D+$*10e98d&rPEr+S#Aq9b5qK%EfZSrVb+@Le
+4hbG,9MC6EqVS#98[Pf0RPU23FY(ZG,6I0Sl2ckC+hfGrQ6)TB,[H&HQmV+25irJ
+92Peeh(qeDr-JTUq[qV4bDZ#chRYek5XkL$,GKarBCDEPIUefPb8jVci-1-NdeGX
+S-TPY&"Hl,l&*4H$amfAIdHEXq6N9er9aD1cTUkShR8D+#cG0SHj#@r)#A285'I)
+Mc'5bY24jrHCqIJZUHc'cZS2Damp&6!aNNp,1JqE(dZPhQPSmr,bENTHpVqNN(kR
+qS'`JkZYlApN'IkVTZbaZmf@LbIeD2rkVSqGb@5bXV2bkl+jqMlhRH2eRRq"6ILJ
+Qj+FhTl`r"Zbr@McIeIS34k2Qj%(RHGd@1SZHr29qpNS+H,96QN[I4d!PUim(DH$
+l46G&03%d8fRjckV08I(dqEcm%r"ldQQcrM4V25`DV`FG19apS02CmI4k#[jc3CQ
+VJU)rB8Gfj*VhV1jJT,Uk2)e69[)lDShPRfXR4@pV,YY$cP(Gh0YNUVMj9h,VTHL
+f9(hZEqYAhHKZlqrb8jfYGFfZIZiq9JSqkY,12188jMTq#413!'PLcQUch@lcYI-
+ST8U9b*HLj9hlIkjTVbL5mG!Ib`QdRjZHYZeVT"qq+IT0YDEEk2k[-fe6j@ffYGY
+Y&8rVmqcfa8aY$ql1fR[[E6l4pFdcX6eB9eR,Xj9(,YXeSU1lqR8l6`Tl(dG*"QD
+kMl[2eeTq1XpZRJl@TqYpUHJ2DX[C9,"-m'Jam5pdPl69XVf[+YQXIcH2[DLpU%"
+22rAE)ahP89h44)Q0J[ir2@dfrNCqPL3FR,GXKYS0Td92Y[TcDPM)E6E6hfYT8l5
+$+4mBI`%PcHUfN!"GrRUIebZHrI""56EfMjUPbZbUU2kp2Y2+eINCq$fVf94HHp-
+2QHjcNmc#*M#!jlRLqQ*i*brc*f-Rm9UkYR$BE-chrdI)6jpEQCUS-T!!9f8Tmrp
+b#Ce0&"T)Q-L(m[*bLJJRUb)d,SSN@XJL3"6%VTN[J`8GEHdKpim3c%!RqF`[@YV
+Mr3Jr24ee&-dX(4(B4STl`BNj6AG,Cd4pq0&P)*`d(d8jai94S[Fa-HC#DkUaXj*
+JJpV+`Gcp#UJT)1Hm(JmHB9l1Ld33c`3iq0@dFF%-r,jlPJibY"aKpSiEaCR(a)Q
+9&hNTk,-r2MDkUaq2p,+eG4Hj+$441$(m(9H$ch44)R86P(cf@M4)eRUS0,NH-LG
+ch-50@j@Hap!Cl0*lAa(i`[!mr,1*MDf*M))-K8icZFcLmYQZFh9GNBXU0)Rl@IV
+E@VUkfIX+c[CPC2l[09PKhS#9ZDV0hVUb`S+bIeZDV+$09Pc'NA1DV0EVUbYM4U$
+49ND4'M!a3)$524YD#JNHMQUbeNDkJYE@JSXd#mLJPDL4'PDLYVBdLYRj3#6,#eS
+SXb`N@YE39FLJYD,#XD#fN9G(DeZ&9d%r@4XeLkM%Ym+ha*rFi9"qbeM@9V@edZe
+YH,LeXr4@A&XVQC49Xc#aPVLcQ&Lc1,2f&YQT&KaE#0K9Q&@BlFf-LjlL0FrJRlQ
+jiXraDbeM6,@XQ@YV'M9YCCF@XV1,FB9GKA'&CBYpaF@XiYPKHjCB[&`X@qp2%`j
+9EDh',fq"@@&aaE,'@YelRFBYPKAh&Z0A@@@&)X*PahYKFmAA4X+b`L$UcAG*rHV
+Rj(&lR&&"rbrYCL++XQB9CDh0[2MTeR&M#U`U"a9!CB@@PG+UC@r,FBY@0GU&9GC
+Z@+bipfXlfaN6,'YXC&aBaV'VYERLaXeG@2bh'&9fYP9eY"389KRG4LeP"fm(e+Z
+C@A1UYF@b[lfX`U+94@&MU,'Xe%@aXDbVe&CBeH&9i9AKDM#[m,K6+l[IPUmeKF'
+XLi@SlLXc@A!bVe&EBkUXXF+aX*PKB@0RK@&MQVV0I0ZC&AB@9cQZpM89ERI0S+$
+)5VqCG9YXG$'&FBYGZEQ`XE'J`X+aUl'Yj1RTkZV+Yj8r3B9EU,RK4H9S1*3CV#Q
+8&"AG[KDLJ`ZiV+Z`UiT8IBG9-e'DQE[#X1Uc9CU*NQL+%kkJkHkV+QJUl(0CU`X
+0G38&EFjfJeD+fCUk,4AYK+h0MFFAjZYc@S&E+j1RT+Z`P4C8r2kL9Bqj&jH0pX8
+Fc#X*r#lLeUidJ8F@aX,$FLMX0EKER09P[@bUbJehe+ZXZUL*9LIeYKlf,ZGGq`6
+p2+QDf4epEGI,-&"fIEeZD[i[lE%G'VQCI,dPK9h9MK#RSTqaQCVFf-b4)Rm+99a
+Cm8%jBFQ56NA0"SY4QVD4K8&lFlLXh9"SV@eN&@XEA51iXDHkqE9ePKBEZbXGGHa
+[aaC&"C5SdcYb',UClfDTrUBFr*cAYmApZDUa@aV(,jH#VeeADbU,86qDUiZjX"9
+d9e@eC"d@aSTbabpMC5)e&QV#V,VVVqqjSXdA-eZZe'&6d(cDchL,Yc'UkX89a+M
+G[3@YEVU[#pkVc-cL4C%RhG@++3LLV88ITeQS4589A@4VUYQ89%-Da5jULq+VcZD
+S,,Fc*qJLc*8B"+fLRjqeQCH6i(FA0KB6-j&934"`1,JeHAQIEN5I3M9HDX414Df
+,P-l49ITkLC+PDJED9&'e3%8'ee&9c"RDX80e9cpMlNbIP6-,8C5XUkZa4-jh9f)
+QHCP5,f4'kqYi[#c@GQ4C&6Vk#C-F6SR,R#Ulkj42q"4DZILcel@ceM-I&,+&-6B
+*XjUXc9BJ*QUbkSV(K6*qC-,AKAX9Nq+f9)mq,)MD+Yi["c@kQ9Fr8cmJ9QSRa@B
+9&2bpFm9dS9eAIi9EQRaAG`eA25YSV($&9Bjc#UlS98@9RE$9f%r2aDfJQ9[ZLZY
+Uf0BkkC49I+cj)b,BY9e%+kaZD[Ih-b9-m#9k&%UYaYA-GU'FXH6LbV($XE-%VUj
+L#CX,#449ZlQ@[Zf%5eVBeEB6+,+89JA')Nk+8*'VZD[`,R#P6*Ar+fa`UfXaPA-
+FXcXITaV@al209XA0#2e&AZE`[rV0GVZ$Lm@Xrk*QLP6pEaCPVrVr9D*R1@1DPCc
+qr[5+)6CKF`V%ViUlV89Hi[C9M-re+XDhFiYPCA9r)iYKCATQ8iYrK9QVh2&cYPF
+EVLf9P@B9N!#hV&[,eG&U09aGr-XG6aE+iiYCFFA#Z+c#Z1,B@&[K9P[KI,BAZ,C
+F@I`XeFbU,09IZ+b-6A@&e@d%U`-q3a0"&jf4BhYV`EUY'+4L+#94$$jT'(Q9YEG
+IbpcQ,$5i9PHlRjEV@m,r219Qld9mCYdBD`eB`q0RjLBmeB@jm#IXG4@B9cBA-Dp
+[E#`Z+bpiZfq@k!kbeeCZF+riYlLhYkD9FeC9GAlP@B&I4ZDfeX*%DeXVA-aV@fU
+dBhR[R6$1JM%@4[cM%+a-@CKB8bYQ5)elbGKf&eK9HjiRTI(BIkifXp6j,dHUYmr
+'cpC@A',K0BB[2e&aK5,@Xe%B"Hh0U9'+hh%X+"V%9H5YD+a'(V+[h$'"rcFb+h)
+@8bk`ELiUc#j3@9"Da[R@Z,F)a&!M%mAcj89',e'D[H,K5V(04DhFMI504KA00kR
+&[E'IYBdULP9RSBb3!0BDi9KlUVSZ$BkLbaEfXe&CrAAApKVV(LkL`X,@42A0M+U
+kh0FA0B9NX$EV)fZ1X0MZVM@IXRl@YN6mc0A&crHiY4H6k60i[S+[+c0AYPaC9M9
+aG4UDhG4,#9BlQVkfcRjP&Di[r-C49L6"BYGE9bX1ae&rB9QSZE#Xr"lRi*YKU,'
+reeK@eYJ9AeHDP88DV[dPeJ3@',&S-MUl#LVC&&Z,$Bc(&Kk9L@6V9rLL[MB[cUf
+alJfDVhhU#cST8cr8qLZC6E8)X1hUlAY#V1*BErGErQG4BF,dl'aN6pK-XE@X&B+
+XdbF#LN@%8i()X89PM@rYX,A)489mJ9a5he+YaBf4J'Ur!c9E%&GCdAN'8DaRmE@
+eLi(0ABSV[aeFc8@1&K@&KrIqr-f0KTIj@&"DcpVB6*QDLkJe"9GkL[aC9&Df%8@
+0K35UfYc8VLf0DU`X#i"&MCBVTBLD[DbV1(+VX,q`h-VpNrmfC-X+,'bQV1V4CrX
+Ul'a&MaH,C@0KIP6YC4@&AFjSdjeGM%4@5Ub``S`VV'JM8%bXVE#VQF8h+j(+aCK
+N)P9P@,+9CBXr+RfV1XMAU,+XiYKlPKZF+9Fb*&A-XU,'@8UCbNUVSSYQiZ"Ef!V
+N@A&GVT0QbVL@'&9c+f96f(l$2A)M(04F'3ELf-MFLeN5V+X6*6+`N@KRTUlQ92h
+m8@L22BB!p&l46+,'A&Uk@,eRPL(#4BEN")M9V+X$K,c8S@Yr9bT92qdd2p[@rXV
+EM#YDc%&Q,+JQ5RLbX4CePc+erYXNaBF'`h0c-[5UrcTR+9G&CeFAZADYX)YMC@&
+@k9GVBASV%fM,%a,f([#`bpM4)Vc&12"@aBhl"@@)V$DMSQUZIPDrAqh3(4QfSHp
+QHfQ9[cTQGRkZ9FaDZXHPPBf4ck@,TC&V&A9q"fX5``+ZpQC39GVKASUrlf0E3DZ
+4-BUT!UUZV&0h2rCmCR#L%&lN`*qh+T*Xaa5eFAe2LUk!eC6-N9[f&@iSC&KlCIR
+K6pCG8',45,-Q!LTUj9AF8'&jpE&V&9GaFaH+Ca+)9YM)P5U)GDIQDre2M+4Sk[+
+R(22UXFS,(1&M6&NkGA04YIUNfVRd[+dANDaRlU,39DV[&mqC,QA'&35-,hDfXV2
+!X%A,&[QM`#)mNce28q1YUmK@eHZ-9aH,2ffZX1`M6,C9[)1K#-@!cPMh,&G@9PK
+U,ml5TP9,bV@fY4B6pe)UjqI0arImT&pZeQ#NX$BiVDZIV+[m&K@j%fXMPiV4A@0
+AHcpM3628e%UVU4B@2+5LDjMPYYGNZ`Q61B[@+k,kL+ZeUA&9de2&kE),MPQf(B@
+-rK9G&V,UI&P3#bQh@rbq4Lp4K@"c1d"Yc9YEFd9PQT%RhV'h&ULbmqaQDLVjN9f
+AV55G@+ba&Ec"'YA&ZE#LX+*!39r-Z+rkG*&qRMV#`*HApIBGKB@Xr)&IB9D2"TG
+ci(1jb4Q,@034[ff0E@ePl+bYM"CB-D9If2&Q(AS&M9eIYaX)Q&9pU,219CL2Ul#
+jUk#ceaNPRaD9FA99YMBmV9eJV3&lhA5l$A888bqe!9&YqZZLXVLSV0dQZLI1c6D
+a[iaSeALRF"0j,fkf`XX'4G'9A8@-@h,ZIqRG"X,HV`kh@c,#0FmT4@@,B'dprVN
+lrTV#`aQSc9D+@VVCPKUV@aXG40j1RrCdd@rb(h%#1h-"pKBD[)@%p&X-P`6ZVQp
+*HBA&-I4[Nf@&JBYPKRFK3%aH$q#kZLTB'-@+2l@DkkN(HCh0aIi9MHh*!"ZrFA#
+f+Gk-kBm(Q,,jKP(XX,$VGAmf0@hATfeCZM+PC#*V1,rRq9CLj'jYVhBf&P@@9C`
+[6XZ,IA&E+r(UVQakZjcZ8[HiqhB`HNJ4'MAYE'X*&am[FF@klM&0mb`jA#Nm@Ja
+BeaB'qESKP,!DprEABA&iYC5!YFiTZUaF8DZk1qMKA'$BR"caGMFB8"hiGb06F@2
+1R&V@SeA&Uq,C9Pc@HmkDNiq+c&RlI0@pC4@8r@4E*@ViYa49R&d9PGBTU4!A#Ym
++b4SZ,h"JjYm,(B5Emf,KA"ilFe@9Y"K(N5eH&a8LZbYlFrDEQV+CVk+YRiUHb$U
+VH,K6,L3FcKh8YB!NDR,2D++EGji-e%+f`SX,85T8b3JG@'jP+P5$bNd(+ApE)e%
+SaAB4j5SY&3FT@b!SV*r#QF'4@aD$P$Gi`Y4-V+,#i0EDaC(e%$qNTkhc-elPNFC
+RFA&E0aDkJ2+VSXdFENqG+0E@BYC2jUA@iA&Skh#S+LbkI8ppjRVr*5FVD6I[IQr
+M`iZ3!)Y*&UBZALmY&cXA2aHPLk@,hFADaIi4IMPfI1jqfeQ`mcIAr`r,N!$NDlj
+fEk$V1hm(brhlrrXp'RULHV*l+ch(cfHRZLR[Y6hhTlajldTlr%DHMC50C4ZRMA%
+ElmEC4Yc'pQ0a[1D(9q(jRpF+IU*rk%reXrq#Im5Ir42lHIp#Ip5IpDIhdr`BQ1U
+FGbZ1jc(D$(GGMYEMZjahimGj11h'1raMXA(dZ2qCMmjMqJaqLamh(rGaqbarRir
+qf2b%A)9'3qMN2VC$V-Kf@3ZFKFS#1"$l%(i*IPb(j8"(!KpL$r#$)HEN203%F#-
+Kl'3iP"88(-8(48(D8(jD#Jhp"aFM8C'`b21C(S-MSFM0b0hNGTNGjNH$"ACrSqe
+lrEEl$bA,p9U1krph(Uqr4BqLSZ8SXh4G$4GC4D@LYk,lY&hY&qQLh9&l0&`S-G"
+@3FY"-Jk#$VS0E"XB2f3HR"ld'*!!BPCb%pPmT,ba,6,S#C@,NSNAN!#,b%r*S*-
+r*NcdR,6p0*bZANmP'j@HbmD62FK2!*Pidp56e)"@AM34Tk6*MBb624*-5-)1425
+*l,jE+6f9ih*b`*SkM,eR*jDHbq6!bHbZ@bh+jE,6eA2LD$HQTSXQSj!!Ne&,5dK
+rJ#S!k,Aik6'NbFY8Bc,FP2CA9C298I'Ki*C!6,ddpPjc,9NpQFC*bXj64BZ-Ndd
+QSNj2+CA+4-RP-RNmCP)pCMXG4cf1TFMMUr(C52(Tkc*jA)mE9cf4b[*8((8((C(
+,8&I39p"(TFRmc,4IQ6e"A8@6STG&,8'bG&NmSJ,(V*'9V+#4UXTNmV%bH9bH6bQ
+U!ENXTPFR%&*39e"A6dI+4mT(bP6,bQ6qCP-T%MePC(MdGCUSpC(bZ9ae&26eA2F
+P"b&E@mR2I-j+ZbI*!5J*b@6R[Q9eGbNpbA*e&0NH0!VNkh*jA+C5LPdGC"+b19M
+eL"N%TJ0NFV4U))19&06Y(15j2+8qQb(-mMmISHVBh&aF9)#4VM'fmpFA('GE)aY
+[ApC94q-L8%jaN5ACa*'-b&A'XklUkUPib*N(3RNSfEVZXb9,41bE(j)*R3R+XQL
+GDd6SABRN-QpLNjMi*q0Qk!&Bm%5JL["A11K9%M15*b,4cmm#[+eci,6f1a`,r0R
+SPcUjh*1$H1L4$XCcZ2b-j%LcQ-L6e(bZ0Ka)3Lb-*p8d1,$LcN-j%MBZ*#!E4GS
+Y'a)D'*%R*c'JN!!8J5%+LF4f&aCb+d0R)N-@*#KI%S8#m9!ZK&r%LidJb+#E!Nq
+RF"`4!MjBNpa%2`k%V141-R!r$-$59#M63e!bHB'8#"N-@&i&Z%3L3,b,3Z0LiU"
+X5FLS&8'4bmj+J%'IYKLih(Ki`4R'L-j33!K4Y%*p"$,0%*aJIPA"qH3[LaXI1Bb
+3!1#11aJTjji))`Nj1a(JL-5JJM!cdmqJmq`dR%#8j%j0`5)bRb&-C1a%Qf6KKKL
+6R*Jl$24SFGK3cd6(Jr&aNC5#)9-Y)BD$)S3NP(C((L98p%b(*aBNjM+M'4DFDr*
+4TcM"6FP(iqYZ*fiM6Nl8IBZ%#FCBA'-+qCfFSSRdbj33K25ILBcR'"U"N9i'6LK
+JAU'mf`0aNj'L6k3NJK1NUjbI"mULjd%-DRmd*kFRmJq"dj@A!iq-9!cfAL4+U*%
+P)$4D1)A5cPT6a2GR*crf*1H6%L9m@FlQ*1C'*1GSP8%jfD8TLE6(40e%LINR)Nf
+,1G[16[J4BR)a*c*$*a*bPL4!*cN3GFZ+R5ANdC+FLBNp%k#FLFJ5mY2bmA2C'#9
+bq[)JeAYI&MI1ibXdm1D`ThY2#mH(ir(q#mi(BpVqQ''bYlb("rEi(jX$Tm2q',m
+2&a)HLpRfGYJEEmAp-6!qV$fZqm$&i(e2UB(DFVlffdZpKplpZiKrGIB'$`SEMIG
+ea26j5mq5(&f-1hpEP)F$%d(5`lM&pRhp(m0p[pMkIA`llLA(f[&Kd(DqcErdhZ"
+kf*SZRK`5S[j-A!pDih&j[rCl+qfIrG0dX1$fZ$LiIqI!KkIBfqe[)F6$iPjFE6d
+l,FEDh`F#(&i(HAQ*J3hN1(hfql($h%1$mQ(HBPaJqEXiEMfF2%pMq2c[YDD(LE2
+HlESll%iN1,dpjrAr2GpRTZ,Xlk(%pEMa9rD!Rp1*pP-23cepJBI[`q0HBQ*iq$H
+3!'fl'(j,ll2Mi'Q`0r$$LE1qfHT`0(f[IBh!hh%fZ"$$HI1h(Xk#'($hZclAI`q
+c[qMq$aiEM%Kh'$$LhN1ciRMri[ZM`Hei2Dl$dlc4i'(Z-'ipQ'(JHa$Ki1(Lhfe
+mMTX5mmFAQ$`X2%`F2LB1hKhq$XiElcGpHEl!mV%[)F8,IAKq5(3DI6I9a2lkLhr
+aj2miF1(%`Ec&KK[Zb[X1qfm2bISrEjr#q(Kk!Yj`-("`m$eb!rK5ic!hfMiIqp6
+aGVrc!a2NKKa54hkEbjffe`-2h2N`ISA'#*L''iKKffMa"eVMTYrpM8r*a0X*M"l
+AEHcJiI4%[%)HaaGVa28rYZ2Srmq%%,c&fU)EZHrf[qF2aI,plrHMaElLAep$J$*
+GG$`m1q`-$$lM4`r!3T!!UKHM[Je',l("i%2BIjdIIr"CA'*HD1(bSBIJ[2f)KGV
+jI[3lIdqZa1RKK(Uh(`hN0jfZ*$dGG`iF6jep$$lfQlAF3rDK[S3-Ki'ir[IH*X2
+K`qMi&p$Sm1(iHMf1,YX2&q(jGarcrPi2h[VMkShPa$JGrSqe(4`m(qAAA%2e0pe
+ejc)aAbkQ("(EKdhBm2"jrp'phX1qaBGpXE,%dd1"[Z&f2p[lAd1,m'"Z2iiF2!Z
+)G4[Ze[VI"K[YaTIY3m6LElVYYl1r`,cq"4JN&KiIk1Rl6F%`llIGVJ`rTaG[HDE
+TGMq6dppeqifh``hQrpk'(q1ea-(!Z0[Ki(,hN!$YqZm[fH"JDDqq("[-0+TGV[5
+C',Kp2HBQQ'TiRr2qF#hhh5i1r`Vc"`aiIPmZ(FBQ"JhPalHqKiRk2,hfh,!q+8'
+l80INaFA&K[Vl4SY-#qKkADppJEkh[0rKAf$Klkma2Ph'#`kreKUGEA4lA!q6$hr
+q#C'([J%KKe1$I%@lHia1bhrCAR`m6"lAKG2I3p858q$IiH$H&U[jF#(hqkchc2C
+h&m8klAm3efcZ,jE`X1(Hh(BhQ$qR[pr[BG[dA`frfL`#qaF6fEM8``lI6I)!hqm
+Vh4JJ`m6FB*8j$m!jH+Q`2Kr*IB26I`Z-$8mTjQeKaI+qYa4(B%1"l1$JhaGCTZV
+fZ$KGVSlcEqjq[ap[Ejl+lA&KYiG(Ym"'``GYE`lH'mq5qKiGaLp2kjKEK[[,KrA
+mRXB1qq#irML3!2VBRQTEFL0i@Q+Ur@jREGYYFChmlr(ph5rQk@(j#V6"-$pa$li
+aGpZ1,$UI9`H,@CAmHcqTZXADhP`-p`pl$pVRq(`,cl(PAPjLpYiZT%B+34T@4Jp
+&ififpAUBqcbT2+(IGGjF0pJAh```q1A@3rppEEpTZll&qGjAPE2kQJ%E$$[e4[4
+m2JH0`IJZ,L(RqQ*A)Ylcr-1iKa-AmRBkEY0aa2(hrlZ(JB&mL0"YU0[1b`IdF6d
+r6KqGHEAC`k!UTDMHdrRjA!fH(I&@(L`qcJ`i&j!!f9ar'mk1($a13`1"$UHah[k
+1l`)Gl[hD)-*RDI4rK$j@(mQcKkG-0!`)L1erR`a%B-0jIE2"jE8`iH!@Dm+ihjM
+8rIZ#8h6iN!$lZ,LHm@drl+V3e(0`,ISrU3i1ql)4"8De%IC%4XH)49LB1$pNG4,
+KVF["Kl2p2`&q2$K[YMp6!rP[EK86iU)R&a0REp(p&fL3!'d42d29mVJEEIp0[iI
+H[Y[dp`@SiQ*HCR%kI&iA5m2j0Y$a2JfF2LKBE!f,LBYp$a"fm2$p2Ir*`pVHARA
+EAhiF6I3pVJSlh5h($q(k26BIlIir$JBZ*mZ5kHiYd4F1Ca,J`1F2I'3(p0j$IEm
+T-Q2aYCRqla!fi`mA&hq,LHA[r[3i)8*MAa1aK[YVm0a`1&YGU2&aHKqGUF-L[&K
+lmaBBYjm'i-I[5h&aHEHmKhZh`$)lH&d8-2e%4aUC0J1(D`p$F*MG-SSid1ckrf-
+2%plTp(IBZ(LmKi'ia2K'dZ0LQH[Tm5qdF2[IT[,cTrjiN!$df$Ym$5r*YZQ5h9(
+@5l5i`,M&[X6S8[ba,FTqM1HcjA$`rjHAIDE&`iIdq"Z$3h$$Spq9e'!EIMXI1l(
+%aFAAB#Bi-2Bq9l'$KkR!qhJ)cYp`LcriBICkG+QGk*qihT9Rf@p[Z"c'qe*DT$j
+[f61+iM[Nf-2VZ)lm6%GhlT(&C1(YZ+N@AQ(m#"f!0&HI"Xm@(EIDq$"r*UGa#E#
+IBEeFSh%Ym(&q'(iFc$Z-28SMq)-kL#aH[pREiYpf[pqr6-6C3hL#Qq04J$Q(Mp(
+Di[Q`i'(YBG[lh2k2"kI8iRpVLifi0jI!%hLrd[X2!fYpJlhTll!rd9@$Zr*JB*A
+*fX2IS'f@#pSkmdI`X4aX!rijr4iHc`Gpl*@,[SFArV'FmSCc8'!R%`iDRQ8U9hr
+XiX*Phdhl8V3q@(%`#GK-MKNJIJ`GaIINi4-MIB0aLh()EkipQih'rk@X`EMI3lK
+8ImR`lA"h"*(THaa2MKp$pr$%GJhKXGBKTQ`2BpID`rNK[NUIq'(q(6`pVL`pVm1
+"r34rX'k(FFJ8F%IZ#EShAZQrY[X6II"JDRbm2&+%Il`r[qc[Yq9c@9iD*cD"K!c
+$Z1[lrCiKXlGGkYjLi1*fZp`iFZ&Qh`,M#i[3QpKKkREQdTK`i',SiH&f81Q0MlI
+D1m,NFABqCjR5SpK[e3h(P'`9F("GYG0m'f[X-Z4pRl81"FAa6Apa(I`GTdq,FEV
+TY($JE8U6-K@'5Ti[5hJ&F2j,l4iI`E2dr&`1[dfM(Vfj[Ghf"SlL%DUmq(fH*`-
+%bakRDp%'H$$dd2rEMp0jKErm80jLIGrEI'XL(4*R9!2-`r&YNfdYRZ-1i[ZPYm5
+b`lLm4(i"a,`k-`3JC$`-$HkEEl@($q(cGl$[lcEBH($r%Clh1MkI&Kq6Q-1il("
+Ka2(i#3aJ`f82bhP`5&fF+*!!l6%XSELmqedAVq9`#SV%dG[$a@T$XH5r-#1,[6*
+VY4LEi5&rp$TlM!q6Y-1idf$[F6i2K-i+Air"mUiXIJq$l*6RTX(kTTDpMer+r4F
+&6KL!fm1Q@k2X2Cl28h&pYF(KmcYIH`-5baElFHE$rMk&aS0(JpTYVM6IimZ(l@!
+E6'"TF@(Hi)CAN!$q+RpH(!r6j@"qK*f)bQi[Z[mII3iR`@5F-AGG4q(krIh&pjI
+PEAY8iQEMLHEmRMEqirKYEJFkmi@Q`#I',LG&ZYRefp[[6`F(TrJm,Um+(k[drTr
+`[PhTI9m8j#IciIAEHbqlpR0frdZch'HNph8pIFI"IB[kG[ifemhLr$`SHQiN2e,
+l$raXBIHh[jq*mPpp["aF6Hm6"prr9airbC6rr![N`!ICY$H5`pppVH`m6IiPjYF
+1iaIHra[X(p(Bri`2Nq$8PH[k,MeZR`EcDQK)b2pMLlheVl%q#mq$alcf)G"#F2A
+Xh(PBZc-R4%1p1J$3Ee1Z*pU(KG2TYlFE2%Z)GY$LDEXX$p0m6CiIVEEi0VJp2HF
+6HfA[PCHiiQaj6SFed81qrqlAeSIHhhprN`2liGjKhR$k(3GJGmhS5CXV9*i%1Kk
+$9(F8Mp$%RBk!djd-p-k#HjZPj[S*cQqEjEQZEk'FJk'CcIPq0iAMH0USL!hr[h3
+'mIcN1k,94$ZKcTfkjf)U-jl)jLPTHJXl2Qk9"DL"Q4"hh+C2Cj2r[+C1XbF6iXR
+rpmh[Y4HdR+mVbT!!eCC5(K3r&@eZCiA+mVC@9Pb[+dPPC3f@P"aG*Ke(M&aFDA6
+A"PJi3D&LRIGphfGdfQdhD@5%I+J*SH1bIkXR,JJAb!eh26XVkL!mr+LHG%mr'4i
+J%hYA1428m'IrG3bV6ZBP$T2Ljk*46+#$K6ZjSBNbIrF0*jfNRZ-L8A56XDZTjkZ
+b-lD4TqYmMXc[)qI1e-6RTqFSCkdRTG225iQKS3ClQ1$-jDbSQER-K2D'HPr2dPY
+4GbSeRTcRSREeY0&L5Xh1D50+Y+AA4S-G'PHeGC!!RFcMC%U*fqNYY$%JQ9eE6a1
+HY+@Y%Mc`EA5$HZMFE+R+@$1BbNR0*N-J$@ZSSMJjd'Nd)EfG,@jbR4,q4D88VC4
+TA'1$mP$Z#PVFh48m6A"h1bTfHF(SNjh1I$b$16mXmK0E%cU%%4Sq0G*M+1`Bb#L
+cN5GdJQp9HdIaGA'dJ"rlRI1eA2ICSHjdRa+@a*c0cmE5Fa1H$UY"M+(ZIDJql66
+B2ZdXl&J%$238fBJTk,1(YTq4cfZmrfi2pe(1pAD8e$AGA(ZrZd[1r[ql9IRLb0P
+eG("fe9aZ`jV5p&DA[JDIGCMpe9BHGi*8$hmE1`IXVSmZQafdJlHDHjrHmp@hH1S
+J$ZmG9AI"MqGfqkJrGlm%Z#VJ[DQ2q(c[1r2ZHY[HNlUEpHPr0mb*MUVcqhUS+@9
+UYP9lZZrIY1YSZhUEU#U[Feje9jrNDMRI"mk413Fp6A[5Bk$b10JU+D2rrqq2jmj
+TS*0,@jq$mhRbml4Cb$1`AAYA99k0lp#VPdqHVGTZr1mlGrmk6Gde9)hFhVI2YHH
+j12PTcT,fUbmZVeI1k!Hf2d'lfAlr1eF'Cer(H[rpr,SV6ZlSFI5D656C(,!pGbF
+l5kHZZV5$Yp2%L6mYkFQ$T*r6edhph[dXZ$2mYcYYFp*3BrGm[ZrqIKrGQFr9mql
+FLE9l[-@p0qrk&G)[C,A*a[rp&jeA1epA1GE88p,XU,Fjr`)0PEIkrI9jfIVLBBj
+Aj2+VkA-EU$9`GY"EARr,flhI@jfRdqIl6RmK9EZJS2jIrlZpYVhYpe6E[MD$RZ6
+NjhRSqlJlb[JjVPXrJC+A0T+H2)b[,ddMMDDTNdqVXmlRpYFr*Qk62cIZ`D+$0k'
+Pif@S,Rl-GZPQhGeRBr(9d"9e4qj"pHQVSphSUE,6GPlF(Y`)#+$8AYcq@VTZLd9
+2R)*'VQq(hYeRim%Q#6S1INh9eeZbXpCC@h0D5FedLlTV[Ui*%Ud&,"lNM,D'$lZ
+Npb6""crZ8QHbhCAIej(Kb2rDZIf@JJd'Ijq$3IATI%PSr1XjDAXYA539ALFY,Tj
+'bcNj"c0c)iklN5j&h"ddZ#Qb[jT'Bj()4q4UDD#TJcT4@pYU,kp$A@[J9f1MpK0
+lfFTTXQdd-%'ReGY5m[5k[1Cr6j@Zl+QTHA(kV-jPS0MFk(rGccrfIT`Fr)Qjk$3
+`A0e)N9bJT8Y8dXf3!&NGhECf##rU-P"Ik'$mdY!63b1aPl+#KRimZEDCmI5PcPh
+*eRD`DH@2TVNI6RDQPTl5Xm2ZFG(Qki6FZ6)VE36N'KMd[L9dIZG#*(9k(1dmH`Z
+pG*jUlf@HZHIb0e(VYPcp,Gal#E6`)qrBdYGXZmVYTNUVpeTRi*[d+@YJXqVXiq@
+@V#4c-'bfP0,QjZ"fr068p*63HTVSd[Ui2NPrkaY,aeGUS1IJf&0,JfAHkIPq0Je
+I(@R@FYTrQjf6E@hHGN2p5akQPTZ0lcCFrS0PIhpe5Ure,0TCU!N%LESHIUkDA9`
+Eb$C33+rGh8@e0am(L3D'PZkL#SSCbfcdLZNh8'mcfGPbGG*,J"r-kMq3!&68jk6
+ahcDML9%5D5@McG9Gh8DZ-'@KJU1VJq'0PUkrYU@QbXf2Q,[ACll&45pl)dRV5qI
+cdHZU2S$qb9IffcY4RFlGiF'bVZ(,BrYccm%H"+YC0,02hEddZZi06"l@dY0TY,D
+$D8[B6GTqb$*6qNd0A'PrkREXXrlNIh[SlMqjrPir(CLEhe06)rqdf0("Fk1MU+D
+Ql$C@QJZpTIjb"mIlqXHZjr3dh*`Am'5)"b8'bhPA6CH$C)#8h+3E+S"Qr3%8'),
+[mp5cIRcFP5pjpZ$[CZbrCQ"aC1HC"G0RB-l0q@SL9fKN6C&hMipESK6dd[D4jY&
+SG$6FE"Ck'l5#-lrXJLERXMRb!ZIJrVGmrRS*9R*JVHAJQq(0l1TTGP,Y0TECb#l
+,IVSaikZ$1T2(CD'ESD1#Qi0@p9M,!p6'PqeGfGr9r3R)pG*Nl5dJNM(@eY(T,Dd
+ZXl*ZlEU*Z`+`q$,N8h",AqVqK(bhCe0A"A3*!m&h"GS#3CZdNF["DE4%bPC#eM9
+e4!J*SB0iq30-pUTJce,VS+AX#"+kTZXkL#r0AGlB9d'dkJNS3(,pZ40TEZ$k%I5
+D)8KBaS)2)d0Y(if@N!!PGXYGVPJ5Sb-(2mr(XS0!3[4aFC1@QINe&dAPAF[PZ4T
+M@G13!'Z'3TqHcNL$CFrA-IqLH9Ml4EK)ZKUmG5e-&Yi-"J6Zh(rTUIDA1ET+HQT
+VUQ(qJJf@Z''IMrl)Yc!5lTHAPkkrMee0b8&qA#%VLXE+&B5!Q8#HV0PY!4!5PSC
+b#5C%FkA'h@5fAP5lXV$MXIqQBrm&q2rXNIqE!NJBmh*HeSEq2bpFVrlaVrj)Ir3
+akkV9rcIYY))2rDkEY-p4jY+`CfYfP55CSY*G39%M5dd[+f`LIIITrbLpAMj%&0+
+Brp'ari1eN8XZZQfh@9aF*Ge*B6D9-"F,(behY2-I(qm1EcP2IdYh)e-(2l+QZkX
+a),9p,'j3%PUi@K3%8'eAYC,*3F'lXhYrmNbi)URT+bllQKJJedj"p+RaSSeUmrp
+jHA65j(C$r`FrNT'Rl,212q5dUp%9SfHKV*f96335HITkMDGY"FfNIMT@Fb%'dU)
+)*QNY+b$CGY,d0Rpb#2,U(Z!E2RBa!00,pVN)0j(qFA!Ck6(Pbl[[E$PkD$DAIEd
+[Re4!I8ehVT@&Ij+PZqIUi+Lfph6cI@ihMmpY,Z#XT8XEcXLfIlIqV4a+BF"J08P
+Ad&hcM,I,[bjHbFUp[c$4"A5Fp%[i*'NhN!"[1jZi"QKr92j'QTDDA(VT'Rl!dKD
+k"MpdeGcp45dFl41hjMbl69cYDPiG0M*kA`DLPlUQbXQdJjqTI(ieP00T%U"d0A&
+f@5JjpAjhMPAG64rLNA[1bpb@qFrNNUq0$4Rb[kAB8[BehjZ6NklDIfJJi+9Jm(*
+9N!"[%"IkeeT"p!e@G&"pL$fjI2VErNaZ8"+&q3"G`9fb5!IDG3$8V9qN!lQ$[G*
+3`Eb4T)-P*a`S46*Yfmq"(EAD9I`DlA8VN!!F(2beJ1XcNl1@d%(iDkEijJB@V`P
+,"9dYEE9*!RK8h(,!Q5f6hPmZFP)l0N#cP4"VZ-5hrmNI+h6N#ecqU[pGEHVf@9r
+$,r$c039Irm+[f`%!Ye(PISJcfbNAFHE6C-fBRPBeVE9&C(VZ$ckJV!UQSCflfP6
+,MjAX*[[1kbUY)*TdZ)UUk6cm3Y!edj`B1jZa3PCJr5ij-mX&9FM6c9Z*Uf3@E*1
+5JTjfF-1j@G4*"1@5Xb#RUj%TX%br`K2Y2'HkcC%[HD"N%C'$C50*`@9Qr2VQA$r
+VShp9Qdh'e'G[pGDEcBFMRL#Ih29C[V9h2cP+b"q9TPJHef90Mb"0Np`#!YVl@G-
+r%&TRFl61i$TLih-6@9QE#9N%C-emipbXcYL(0$"p!`j8FHZd,PC[YEb2A4kq$Rc
+-l838U3(0l'ZQikFY0jcqIjf!V1V,qPQhqVLeCb1'"C)'rCfMh!e,AINfRqMEZi0
+BBMpi@QqdbY(MYFfY'c[Ap36"eRBDQQbehGq9c'4JjTlV3jq2c,N%CQQPT"&Y8@B
+"N!"-IGcHNh5JUJTaHcpGIajHdjr1jf2jmNfJp$8*V85XfkfM),lR)'165HhA3H$
+XPV0Rh)+hPRSGT,jqQX(+cCHmbhcQ9R94a36KZ*T"G66Gc(j+2be,rrMLY'fTDk4
++VVqX`()-h()2N!"QBe0YVVpX'$Kq",T'h26@jR(b$1jV[DQpE5lU$T*IlUXh&1f
+Hm6RV5lUeA%lS)0&0d+iQi2$!1QP@fbNEZZlIFU#U#ajGA29eXCCXaf%hYjVhQIX
+1CUHYh4FV9GcN*"""RAV'`61R4YVRF%af`6GYJQH))SlZ$98h,eeFN!"%R'N%9h1
+mmZGl9RX3efdTZ$G`D'6dPlcfbI-81Gc[Vj,AD%JG-8HHJcfLJ)VNPcQGE@R!q9T
+IlT1GMehqi+Bk[m&T!DpI8Jd$lJ[Ej(`6Z6RCUqE9[+dp$2''NFC!4!5dJpUdTS0
+&6*!!5+abY#k&[cprjEDd$QPdR2Aq*&hL`2l@H"#E6FKMk@Qj5fPmr)dk`2q1Zd1
+5Sc%l2R08301D$1CcRkFfQk@Z,QTj+c-Y,Y&J@NdFP+cGP(UB(ZXblNhAVFN30+P
+YJ@P)&U#"C,QDPrl!XiF$ceF[SDcABqJZbZlYkk2fM)&+eM+L!Np0f8[YLZY!4!5
+kJpVR[%JiFZESpTR6ZhpXlJ[QbY6PXe8fbjUBKAQmJ[fcT+1rri0rCk(j))pGffJ
+A&,ZDDZhMe"I4D[1A4"HbN5b#dc8CE*jp)+JihP%JVBp&"RpTNRe"I2qYc'ZjqQP
+@G0,[i1$)ZkAmdfCcjC!!5lYPbp)hQcjp1E1TZma(PqBmJQA9efLcaipA9CrVbhm
+JSm9i#*!!9RU-jbP"9"ESmIZVSDcKbl[TeJkSI1EjN!"e*"h-jSS1fRih*3@DjXk
+E52F'jjDeqjd@5JjDZMe[E'8'MZpT4F'j@$1#Ehk`C5b+-l21-Xl23T!!ARhe@Tq
+ZlU'`5A-`9PA)lUSd%LH2',D9$HMc1Yj[ZTAQqmbNXmrGl+fcYR@@NQMfQbUkE+h
+G)p30afNm(pd(1cC'jJd'mpYF8-ZS2E6!59S-qr)(`TY("SFK@Fr@E,3E62%$[h!
+f51hp+R0$"h1Ud,N$6QJ+(rCMC@Qbb@I[N!!Zb0eMMkQLbh1dZ9Qc6RQJFJ@TJ[i
+p&baLF)&YSlp3*rlf-h3ccU"1fSLX`lRl+c1JEi"U[3*i"VZNZEDSTlE1kZ2,lcQ
+D[ckEFqhRS*Vbj5MGeP6IEk6G*!Hdf@Gd0688[C5Y"cd(d-h5q(,8&8&q-j2Tc#V
+UcRlD53$RVU!m!qmZpP[%dimrcprj90RDI1`Gj@cRYH$-FJ'2ZS#YiJ1Hc$h!HIh
+NP,P2b4klfbXQ*"(imJ@l-[Zd-dpER$[r3@GG6E,'39e0,Zi0hGbc4kpCTGG"kh*
+IGefJ0"TFTeZkUq1r(qprZ#1rJdr'`H'kkK2VrZMr[)+6KIFJUcecZXkVbfle*FT
+9r[TGh,rjXZGmqHl'*iH2Q!(iH2Xkc1`6Hfb-LZVX,Pi1m-dfZNlakJDkfRPFERC
+1G1SG142"jqA"IVLDlH$Yb"HYrI2GK6CDZMef5)&SZjdA53EY+alrRkD@9McXI,b
+)1`hQdid[h+b+k4b*9PXVD$T*8dj6Ih39AlU1$l8'qHUcIf6FPSIkT@E3QD@QhFh
+3iAirhr3)'fKlb6,NT'VcreZ1c'CTkD406hN)00UkA2@NRRpTrlQT(CC,T0PflkJ
+@4@ZS%[fh**!!!N%PbIrVB%QH'IUiQk'FbXhNDbkYZ#9Ppl*TFaA5E0,LZ9ZYTqc
++hIHr0U*"!A'FrbCi18V)TEdh#1fT["eeRSH1)#Tc-hMSh,AY9Z5XAm1l2(*Gl5Y
+Rph)jICA15T2edZ5G`("h0efqN6XlIZ6Y,9-(V[8!q90TQ9MD*DaUEP1fhIKl)a*
+IKSi0PrlTqbifARFqciMZaNjc3k'rm5PqEpDZlb6UpTG(a6pM5hY82qQkDkIq8kI
+r3YIphFFEm-dq+r(8QGeGrG@P,hPh8,m4e,"GpM0m2PC[l-ahRBj@PdNjkN6Kepr
+"lDeEe8"mY(EE,l-lhP0NlTel!FEPXNGR-UjpXpX3IL9fmM03C,leRR((f2YclRR
+EZL(`0k$JfaaPCqKMmbkYl1dSY@XpA,9VSZfhHb+Y-rhZ6Jmrd[XrCddh1*p(0Ka
+h'l$`032hQ02@Cb$,364,Im([j"kc!h,V$lf@DIHNI`I8hQGU+A26YhQ0KQZ2efK
+Zr9p#pUYAEIKTG2fHJcplTUR1I2bGYFd8jaN6KeBe#p%R@j@DY8Id,-r@Ccm(l(h
+SbjrJmI8jZI[GG"NYTRkKfpH0U)0*R'[CRmhRq1PIlk*P8(H&8"l'fZrpl'Z'36,
+G(X1kU)*kZTE(,mlU2QDha2&Qh-%(3dY-26R2U`Gla[39ehj8M-`GCPC[1d'9Zmf
+rYkZaIak[Xp*ahd*h6l$GIbp,Gmlk(Sb2pap0rjRlhT1qjZ#QZS2ecI"LA2Y`D&+
+NT9KAD#$A8hJR&kMaYU3VYj50bQ)mHVMbVhAAX(EIelmp`&Vc98hC8Ya9`6D1DFl
+3p-MPUI6efPSI`rTaq1hFE'&5(D*Y,GXZkrcrE5bT$(qId'kCP*Tk@VCr'k$U0NQ
+K+Pf@JUmV)m-qacC(l-,1M0f$+hDClAA,EFqTl'16lIB1Iec1IJfNd"+D9cp3IRY
+6IQmqLlIph@kMrREpKU-phQbU414p2GrqD#69mYqlfrS8ehfe+9$jkKP(aFRLR5T
+Z0f0FFcabbC*lIL@F,'mMeZZf4p)A(b)0&1A8U$DE6k#2VT-i2Vf%'Fi-%fcQl5Q
+V*-'m0+AY`5rk8-INh(ee+FVrd&IA3CLlTEZXRUk4mf#dRC8V14TCbI31lfl54NR
+1F'`f$hbH@ZL4e*ce28ZimUklRb-l%'plD,SBX&bH'YCkDj2RAVY$i1bXlD5kEfK
+BhYI"d8HZedQ10l)j-EkPf5Yl6A0C"Cb-Y"6`10l4Ch)9001E3q&$DH@PL[pHbPk
+'Gf@KUjrlCeA)2Ljq#f'!Q6TmZjp#lbCYP(VR1kEQ'Yc,m1QbDGdl`4Z+,(3@KqB
+ZGLIAJrpQm(MDkPd8'B2ir%YMhZr!1USDA+9VFi6-#0qhTSZb@ehY+DYUC'@VGP8
+RY6@NI,cYGd-("JMjDTTDkRUk1VKU)10bG&D2MGDkrT+a24hVXU-[IRL00+pT2ih
+M##-mZcHkm!lTZUlmcIE@Dh4pCm4*Aj!!RG*2(!K@@Cpj8'91JfDMF8VTZ2G2JKG
+5ai1m0VZ[JqZFaKF(STcDA0em9faZ+h18[q$XTjqj2UrQql,`1$XU1QbG&E2MFIk
+QXEM9RH8UjClpSfm6ZH$cmM[$TcH[J5SRAQ1IA`*'q*i2Y1TCA050bB6RYZ6hmNp
+fJlpBh2(-lb9#A"Q'!r*6RkAZUb#2+UC%Lb&pH(8j6JVcjeG+2@NXUDc2GYJm)E[
+D2'lUmPRY""A*hM*dpY5ES8E[H%I41$G8[KhDB)A'lVim[(lbPrmA`jk(*-Ea2I*
+4ZkXEZVP10j!!8HKV$`RhG'-cf`Ik'#6lDHH63lbPZck4)pGCXPVUMjRkk2bX(f)
+pGp#A`Hdb%LPVS*Y689%H@Q4FrYc8dIh%ENrALEpGC12MEkklTdmlbY[SPkIS,5L
+cF&&"@cp*16N%LZcZl&SkF$eCGY9PaQZhNIQ$icckbQhcXF5rU)djSH-FVhR)16P
+dTP,Xi0FI1DN[B2!#Fh4j%h2Si,I4*1%ZlpMJ`8[cBdLPVc+cY0PX[@j'QeFkBM*
+CU"il2kZ#ERi+JIZXb0&cpQl[UmUZJhQbVUH#VifAl9Q)U1*PA&Xj%5cJSTf#Fi-
+M)6KpD`jIlS0!lYmXkD"kqP[1[8bkk#Sq+ei1LL1jQAjlFp45R`5F(20QBK2SB0G
+(HA!DZ$H$"@dI-`IkZqIJJcGhT,DjXcr9Ip948E+dfR@5Xj!!FrQk+#Mqj)Pmdac
+EAH3H4r[9kVDE5e2ZE0hI3(mjECA-pfG2TTMefI%jXVXr(r9b)1HaX((36B+@TTj
+CJ$eFj"DA*9@1Z5G5Z&VX'q&SC&ZRcVEbV2XMpflH6M2ZafFEZIX!'!Ce`0!kH,J
+hC+D#PJhQZJU'2#IJh9mqIPlcmJVlG6YPRp#Sr,bqIQeCm-09""hRFjr2fFQk2Xm
+Dm@FSZ$"ahjNH+j2YFQMaIrmXkRDFjTpV"l-QLd0A-2qPUDAFZ2$rLZJLClH@Bk8
+(f2k51dT-j5eX[CGAmCl`m'VTDl2,3*aj6SqGrLP69$e2S81cRY*S!$!-5XM59VM
+ar(hKiJYj@C+!b)3E*E%1bVS+R3(jr@P+p2)INar92jqr0J(NJSZmlQdqYad(iFY
+ZEr*C+2(RDk#Zib#MZT%[jmfcJU)pF2&ZKi8r%eHeT[-P2RqR%IXPU$'MG2&S)+,
+RMrI-qpASE[3D[9`D6+l,mY20jiFbZcd(d(P3*8TD@P--PY%q*$H2+J2X(jr1hHd
+&'CJVSH$335%H(@C)MkX+q-mfS61RCR-KalppQHK(RkaceUjj(JeaK$pAC&Nq1cd
+raYepcGpM6ERDC+$2mpp1NSZ$6dGcf-(ccaF66'12$,SQmPp`RKG+JkAmMALhJdp
++B-i*TlP4m(Xp+lEQMh%pTpf4fFhbZ`Mbj-Ak&C,VV@fMe-LARU4*EZkKFl65+il
+aJQC-'IE8,Rd"+ECCl2e%r@h3"J("S-fIHChCMAZi,U*RBPRXVU#jeFkH5p%2SE2
+1DiqE@ld0d9Q@e-k[-lD40b@V0q%PkQ0JqN$ZFjq[XGhTGTrcQB)1LY*lRl1XTC[
+(8qI2R)VULQJYB+1$Pk%l4H5Njkk[bpXU'eeR)f#[)6pXa-qV02ebeCMLRkh2Eb2
+64S,[k(j2QdfZf90%Pl+fSkQHPfeqGR3Y"2`L3%fKq8UH+E2`36CYclE+L2r6&Vr
+lA@fZeEaiIm@%[k%(AI0ad(ebSRe-l%V%Q[0[i)2$VLbl2k(9h4aibDLQbSR%H21
+0U*2"0R64i9rmr"&JZrLr*8GEZY699eAR2FjqkMDiH'Z+KrqAB`CqNdiDLXTD(jr
+`EcX1p2k+DiU(TYeHd[L5rG0J+kSYN!#&-N0dBkjXQGdQNee625YeeCqcAb)Y&Id
+9e8dGY)r00FrXV!IqP5B-l*NCLEDA@HN(F$Jj1ZNACm$e06FG0P0GQIVT('eeR6H
+hT0N6lef4RHjp5683CDlc8XkRe3IrS0%I+rQ$Il2S`p`Y&k[34qpZrZfIhEQrd4d
+!Rr(4lQ0&"4AILE[X`,mrT-Y"TTr+Db$JrFTmr9rZJMQa06C#RJPjZjNh51[kYGf
+03@&8AekEFrmQr3pZVR$(Ph1b%aqbA(0CHHRHjcP&cp"GapG(VD+,1C+IdfmZkVp
+p0&pVN`$rGbdSrVe*cY,TkkkY2q8Zke85*ADUGPCX!`$aeAZUE38%[T!!pGFljeE
+Gqe)p$GrKrGrbpYH6mkrUphiHRV[qAXRYjTjD,hT2hd@Ne&T64+['bl@#FJPHj6D
+5hVUkZTD@#MRc2"pESHmVUDaZi0TeYlGib0R)*GRCjlAC##PTj%ZAq3q4b#plIGG
+*a[Sa)-GRCbLJkQHY)Y,T1jPP,S,U4@dAN5S*hXkL$Gl+e4XS[r1qmMU*Y6G'#fe
+lqV[DUE%L4EelE12!0SBQmE1qGA8YT0j1FlIRIhG*i'lTS[r+'$Yrhdd(Eh[l,$G
+9ETYqGf9V1DUZTCbLTkR9I%MAFr6p[Q%DrjpGDh9&@fL0GRFlN!$Aeh3blBC$8Se
+YcVBKKbJR+@H2a1LCbGdQVTDf*%Z"prpc[RDVR[Xd2FfI[1Q6RY)Qmc'P'fICchF
+rCRjbYihZCfpMa$4&A@eB8mY,ZcVCNj5dY,AD5cN@G4"leAMFI"i-paNlN!#,%VZ
+HLDZL2qjk,1dAN6UKe,m8&%6Q!U#Y,2cV8ib*USPc%!@*Qjh'6XVJbUh936Q-LCe
+!f*%eF69(q11JVSmZPPdYEUjb9d#AX`Cb*%fN#$@NL41Hhm69if00TVL$9(pkTPY
+)Plmf2pA%b2YC1#IPD62HT%L8-ZLjkKZkLZSZHdP$ACbV0`VRZH"5HLGY%LC!#E@
+KZkbA(MBk$QU(ZU@DG`fQRT9$,SiPV2pc%%4chN#IRcJ3M(YdC,fXK2eZ4[k@Ljl
+b*hmJi%rT-K2CbGlQ*d'BQ`4*h540G%mJCA`FjND('j')AhQ!'GVI8pU*%lQ9'LC
+#IVU+*h-@*Da)QNRSNr,)"jk)KY&JJS+U,h1EaCRd1Ue2-88ATk'IQ80$BD5KSDZ
+LP9G&Bd9A&Uj9&B@'SUV(598ULXG4T+UVe%3$+ZaSE'94F$JAYA-UmP&[31YkZUd
+PaC5U,G@9AZVfbX1,HJKC@p$B@'kp%&VUbUVVZ,h4HjT0*)[38XY*Dd(&ST@NM@%
+EGAZ,)[E@JUSdA598r-X+#edP9T+$4@0"2aY*94C%r+YE@IP4Be"'VE@0'N5+#ba
+C8LJVE#UXX@C)N6mr-!QbRm@iZImf9PFA(HkbiZ-AIk6&VD)Eq`XT(&QA&&B6p$&
+Q9GcCA%@ISGCT+UjUU'biY$Be9jFA&PLpA'XBeAE9ZLLh[&Up*DaTmDQ`dNLiaHi
+h-6&Z+ZbVX#b#@bZ1&481,3A&AHA0KLf9PZZ,F!(LeGM&aH,)aD#VP4E'IQF'a%V
+9APPLk5VT*qKc-ALfA"dNL,ND#IXV@4BF@9C@8LUN8%MLhAFA!QZ,9h&@k6F@93h
+A"aD'VZ,+j[jl8BYPLhV&$9eGMk',U*(Ek5,U049DLbiY9Fm'ie&$U+'bX+V&LdQ
+SXE,Q,UUN9X@bi09C%Cb+[&iZ+6VLf2&hA&YkkbaG49fr&YjU2*aH,GFApJTXPZ3
+Vh1jb&[CD5bd9eCF@bi[&aELbUl'VreM,MpRpl'`SBYM3h0c939@NXDUVi2&UZ,9
+@qSX1,9fXb,U*G9T+ZkX*%r&UV+jMA1NUlQ`iYK-XEI4f@NUBXpZ#YlJd1SYH,3r
+XQ80KlRrDZaXVhdH9YiZCZE'ae&2T+'UX0*180PU2laG4&Up0qcZC9#9j80$C@2C
+kLY5[E8F8AGV&SE'A3f&$[lRr9E)RV'VZBeeT,'0aBfSYE'bXV#,&RYM49HSi0U+
+@,U+!U4dQPq1V+`lf,3kqre(&Lh0$3kM88N8X8X,(m(&iXAh,+VUVIe*L@!@09T1
+,9aZ8jQ49eHSe'NX+UUP4BYA,M5*r5#SZZiX,r%RlHIlLjQ@mL,MYL@`6C8@CU,H
+I&**pfVRkZjLd2Ff(&LfYcDaV@-UMXDUaLf&9T*(&LPXY93d0[NDlJa,$4HjEa,$
+Ld-EkPa8"Y9f0KBD659XDia)YACaT&$8cp$Db+'aZV(`0*0[jqKlHceFUhe")r(G
+`eC89[B6p"9aD"a8`4E%3RAf&9B8'SLfY9B52"UTPa9@Y"Lk3!,Z+U,RG4dl&2%U
+VMLkbVXiXqP0T&ABkkKrC4@8@bepcIkbhSTNr44FGVU,8FU9c6pP44Y4B88r9aC!
+!B+*@SZC8@9&e&%8FqT)S+U42f&$V)eE3d1NVIab+ZKM@09B4Y*B4GGdq2UTqbYl
++h&93)TV'@+DbUV'IeY&&RlVh0IHcqaQ&lYM!+EJLSXU+9'X++KRkZ0)MDV(1P-6
+Ke'ZRq,)S+#LQ4U+0DbV'0'Lb)YE&ZVkIU[H[Y4U"3%UTqa2Q"&"B@-r3l',&RrF
+RjNrXEfC2kLB++k449p&C89Ue489"UXG2bQU,8)SM%l'M@Y"9d%UJYB[FF@IrEZH
++LCe!QTPc498LbXD+JSIfA0MCGa&Ld8AhU+9ZG4-Rq+9RA0&`Y44d9"C5TM%h2kU
+#IPZ4&ZGGU+,A6p$+lLhrC9Q+B5-qL0b@NXD+UXI!%GVE+,4Hp9eG&3d@je%TdMT
+rkNb`TlQKb&A3mAiU+#jSU,8%f4'4C@kRjPM&%GU&4XLbeFUUN4E'9&UZi%E2aIH
+XV'99a4&bTL@989PJY4elaD'VSG3U0Rk+I'DpldpMC@9['PHp2aE*U1SSYPV*JMk
+UC9HjG)MTrG@8UULaGG+P6db,CM#B1SLd9&p48E9fmU9U*@S3%3%ST9)q*VLc-',
+a95pE%LkbCBDL4&Uj(9h0ABd8@VSYGU,+9BSQCNr&XlHLpl88ATaH#A"9EfP*8Uj
+RfT'N+L1%9QA4NT-I'+AN4YIBA%LeUr5X0,DNFdA&efTpkm)FP88@j4)kk,mX859
+P9kkYZVhLh[&XE'bQ6paLh4QhXXA&`l+Bq+Ta8j54Em,Lm@baELiYpcF@A"XE'i[
+H,2fqXLXAG$FlQrZSX@hS04h0KC9[U'e9T#UQ0FEqCC5UdA&PFqRU-@9VM3j'X+'
+pUkh5@&$eF5KcPek0#)ILeZN0"eVB@&lDhYGZGmkB[96*8U4)&rLfA9d9PmY$B'e
+hT+'aX0cT0,IF'kdQNX$(a3d099mALh&aHh&llNLb'25hE89G&ZDUjdP#-K2kL`a
+C%r9m8C+C&VG*4@&VFG[F604C@UXVh'SPDl8DLb0L86P2999eGHN-KB@Y9aG*3iG
+&Hj6r0K9lRfTMM#lU9FF@LLf%bIUT@NX*qUdP$BC+qrkC,G*B@ZN9K049rmSV,A4
+YFM#'1Vr0KZDU0Ef0&U1&3k5JVD'Y'%Lb,@UQ@9a-XZ,&&rU-@eYc-U1(3kk`XER
+e,h8f0AUE$Y-GR2q'GLKMDZppUCDUZYG-eGaC'S$582cE'aX,'K[IM&Y@kM8@09r
+V59ZZebBbV'VaG*leKBIXS+'hiY&U2FUj99F98bKaCNrC@9k@1f9caG4U"F@4#0$
+9paT28[BhcU[jeMU,'HZN9X@V[d[@49HIC9HSXMJ2dPl99@Nq1KSEQ424,'IPDlA
++TG4ER"0Lfr&PDLkUT99U)Y$aF6hX@+LQmm`rf9cF@8c8'CELLPehi,fIXERqmr9
+cpM&MHfQ6$&X[3*Z@1SpcZ#hlAEQrS*m59&BfZZS,T8l9DL`YkT%rBc04aE#Jbm`
+e046EVZ"45,,d&8-684CqbmK%r9hY&BeGA9#JUiX@aYrN6*KLf9$r`QbEAPMBHjh
+!#STk&LRQDbISQ+LaRp4mkh(dSU'hS$5$8aSZG+'f-@mVG3DGE+ep*99U,'ie!VH
+8m%9[TaEQpP"bC*kZIRi[aYV5SIp@A&Rj4IeU)-(IJri(Tqp`U+aX4Q"@6'+cjeM
+9aU'LM@p"F@%MLk5JZK99GjDf4`!c"@paC5[89@eG[&SXkLUXEQpQ+UU+*2fV949
+4H,BeET4DkYdPMBM(51,4+ScB#LQqV)XC#*fJh&K'e&!*baPFAdl+8bP0&ZK0f0e
+HSQIfeG&2pc2kU+c#hLR88Yb[fae',U26P#BA!%5CXLV@,H44,f!Pp*Vm@URd5mU
+aPDMhMC50l-cqh9$9kLk[Ep%[aF@VP@0!CDrDLbXK2cjNL&[Uc&e3DKUI`*PMBc#
+FX4@e92#IUl#kLk3k[AFiZSS)XUUXZ+DJiXr4@4,`i942HmUH%l2k36ca1qHc1M2
+h"ak#I429Y[U+TNYa#MHR+&@ke%qG5U+D3EM&`A5HRp4+SG3LKrfa3fYM2d4bpbX
+JLHHP#&ebGFJ8GLCah5KQ#KS,#43k6kBS+VJ#KSMS6i9[44E'L$-Yf&&&4`l'pi+
+U1i155LX*9&+PBkj&'+,ff++`VF@V1"a*KK2+1$8R9B-9"T,45p0U*r5@&M)NEqK
+S+,P"6LE&4h)TpCVp4-0-4HLY6r&F8V0Err6@p9$p%a42p`FhYVC88rZDZaV@TqL
+dNJi)ZQ*2@&M@f1rSE#JRmk*ijF%8&ZLKlQC3@k+(Nk&UL,p04BQfAUTqJG+BfQU
+'B1-565+EqIYjNb92qpIEJl1biZV'CBeXLKUp*Ed3UVA&49A',2hYefr"*+fZS0a
+H9kQS&I9cqllQC2La[Y4GC5p'i'd-#8UU1$%h4C8cfTq),2LA1SS8[13%FGmkeYM
+If-r%-9eVDY@jQ[X6YZ9@NYkfaaGL,A&YcJ$&EU043@-rkAU%ke`E@UZi+Rj499G
+V+e(Y6iTJ$YlR86Nr'Uq8R[ff02UqR0f&EaD#-ALm+a5YbC)Q@YV+C)qhUk#VQ6*
+"ehVH9EdAF)ViXDeZBd@C35NkdRT9[l'Uic"f0M)UU[Xr"(!,lE(fU+Ye&E@L`e'
+Sl-@+G+0MG!DaB50CBf2rG44A-b`Q5TM&D+k,0UU#K&IT,LCBD686rF9TfFN9XqG
+!9"B88S9ZZm#LBlGA9SVU'LUjPULXLSV!BjQKR+*a@f0*p4GKQYeiVC9bBaA&C)0
+(3VDSkf4ea%9eM'P6mfppij1#hE888JDQYQ#`m#LdJViL1h3eXcfU+*T03Ha0U+Z
+FV6$Up+@eepLGR`KHpLfYEDXMqakqIplQ#H9E)VDhBNK0*T*9YGH"'Q4C'3ZDZ++
+A5$TbV"A30Vk3!&Cce`AeZNS03UZYDZaR*4fbq,U,UhUBYA2bpF!YAFqS,+V1r2H
+Thb%l*QSh9&BEQIUp*9e9$)N@(F#bX*%DV[Gr3bV'bVFKU$URC,8IXSFP9aDH`Q@
+6&YN+Z`LdjYrkM5DK!43C1i1QH'8F#ZSj5Hh'S+kDkLX*P$48)99AlG*&b(+'r&F
+AplaELbCRJX04G5USkl0[Bf8@`SDQ`lLJN@Y[BiY!GhQVSGr95$P1VV+C9m@YUqj
+aH6SEMpP$PpI9@'AUY3V#d2D8PE&bp93kV&dKa@()!*D-R9Tb'NrB@,jh,krJeIJ
+C5Np#,X6bc9@NLJ+["3F5PK5I8X2p99MCA&m(ATkkii@kplZ26aF@LdPUR([3b+S
+`FiYrBf1rXH,kH,FER&aE8lKYaLeYAFHPmbae%ELfAl+(G5,A5@%K2*GFHj`6Idl
+1kd9laC'Xc[&USaRSZ2H!2&Z)`mdr"1DLiaBeA'XYcZY4)ZVr4F@JZ0GHf&E98'N
+VEhBk65!'cP%Lf*Zd98rT-TLpaBIjRp)-mpXla6h#l,&RkZUaD$Le8ba&)G8MhYr
+FB[TiZFaF@3M389aaDZbjh&9S+)dS@!Z8CkhXMRPSVLbeh&RiX8pdaM1RP8XC8i"
+%C0K83'af0PRH,CER&Z++rXT&a2iY8Gj#b1-$Lf9P3p-&%VATeHE@V2F#Z*@,&L(
+DVSD#JQ9A65V#K2IFUj9DHaI'S@#-qGHk`M!CDJBG[k`f)%'ea-!Zm[E#KdNqI!"
+-dPMBD5mX+%mpeLGpHb4%h9&+SG)H!QbQ!DGN5V[6Qj'h$1UQDX$E@3-YB8-LYM'
+EZe[BPNGDHLRl)iEaSiTZ,9DHIHBPDNVk2fraHElFENXrq2Im@,b-ASS[9aHaLh%
+AYS[HaIrSZiLqP&pH,6@AeZf[2mr(a-MBI8l6`[rYVrrrHHRXI25CkHjHHqT2D'H
+l1HlUHmHHmqHhdpmFE)aZ0MI-M9jk&qRMGK'lD0j%EqXELb[RpEq$bprJ6mr@cr2
+6qVRr'Rpj2r(MUR(FeMZQafXahjmGkq2SXIc'2kM(k[(rHarJBraFIjH2rEMpcMp
+rMm2)3C!!j2)FeN0"N!#EN!$Z-Kq2)H0N0eN2@S*kJbP"Bd(ek$68(hU$`+$b+$q
+9"m'4T-M@j(k@4d@4b1fb2m-M[mMJC(%b1)J)i%2X3IBK3jHKbk!MJ3qa"rK"3me
+3mdJ)i%82@d2H82lD(hD$-G6fhk0j`k+64FK4Fc4Fl4G,4IFS[d8AUd@("NcrPM5
+3!'TJm1$G`I(4e9(c9(ep(pqMp+MpbMaD565CLNqT5ICT1jT2%T2fdRmk6r9*LdY
+"5e&,ap,c&,cp,0TIZd[jDApY,ke,`+ALa)r+amr(dFIlmIaSqkMhmHrbdpAch*m
+Kah*6h)ch*S#6h)j5A,Vkq#MaeA3eH1-V8DVT15ap69mMbGAbmEjdpbF%&@'3!!R
+*`8mp6J6bCq(dp%U`$RUY!BqV2NjkURUUHj2NZ3RZ4j2Mm[2FTb902FRPXcb8pbI
+(ch*r-RTI)mPbAcZ5j+Hbdr"MkZ$(9F%D#VPe-ZTSkZA"4bS19PeFZ96b+HA+j'9
++-m-@aap@-2"b8V9FPbmpb-jamj6FQ)X8U!R*cp62FRM15bdpQp99mMM+NqKi!kZ
+AM+ZIUDZFPbMrlAMb4I)dA)3FI"ak"M!B&%"!%P9%VMD,)8@3!+@Lb&2&b(-j"4+
+SU10#END(P-T'j'LSk,PbZkYqC48H4qGNIRC'STq2c&(b1BMC'aSq2Sq1Sq18'iq
+Miq$N%"N4p9b19UQTj%-eG-#'X3`3SZAJ'F8@j"`Db0L+LaSXG"'SU198)ab!P&b
+((+hI,0E-D19aXVM8#)q@D))*9((mI4C#MRS)f8MF[5FVmhjX@`RZ@jIQ%95"LJ[
+,`FI2FYc(-4IQch,jQSSH83+c2c8C"MB8['dQAj&B982T-Zi%FM5Y%d)UZTU(C$b
+p&QD,N!$&aFKc2)r(k(UeP`IkqpPFA&aaYa2Y"j&aCh&a56Ya9J9Bh'@UD@*aN@N
+LFKRiZ5L6e$PTr2r0Z-Y82BTPFDJT*2ifJTare'#Nrccl&-Lk&%2(k&+-&*bVM!R
+Rk(,ST*cM-B`8Lj'QamrD83+e-Gd+cJ+ifdSZ1Z-Ur"AM11X[R-&N9!,Bb*%M8#$
+2(["R2a8'@$(0if*PA"R)a*bGL6Y,'b-%@FRCb*1a-E6CV(a)BQ&$"$LcJ%cN6&K
+!2%L48$jq'(%iQ*!!a#4'#K&%3LB3K!$d2%a)N!!Jr14Cc(!pLiX5ML+&ZJTSJ*S
+#jbFLaCc'1`q*LaCc%3I82H`f&3d#`-aL'Z-488N6'BZ-80!SBfFD,cL!f-LBS)B
+8)D!LJG#dILa-C1!i3S"f0`J2aJGa+'++aS@"@08+Kia'"KaQ)"F6M'0A#!Q+JNp
+L%3%8r%m$Cb*2Bb)(X$`2L)(Si-j%LibIaF8N!b,#%QL!N!$M18LBcMkH+IJNJ[M
+XLRj2FC10&NR'dAaR'4q5I`8H#MX6ij41FL6kLH0S)Z-RBm6'6YBl&mBMma-H,M'
+ccXDMBb*3+fFl'L23Sb6lX8L4Te"8Db0%V+F,`5aV"++i*4XD`3,))R-+4ih'd"'
+iDN"4)d9m&XB4HKC24)4@4-%Sk8ULS54!,a8$iBQ0L6m13LF4E#TfFak0BdbR#d9
+fCZc+LJ,+($2'cL1q,h(6P5VUC10%b2-,,fA1cZ5S*k*PTqFT%rV%A9CQSc(elM+
+h%r16dVT,MSN#TfIk3aN)%mGFC#*6a+((4*85[6(226L9PC!!+YFKMjb*A)*SRib
+3!!C"!S-PD@*1!S2EN!"+f-Bd9)d5b*!!8L[3TM"iRJQJS"`F[XA+r*p4HHL4@+S
+2S)N8C'Faq2L49C('Z#FA(j!!D*j#,(Ld'0LirM)Y-2&FA!Pr8L4HAL418L6PI%R
+-R%aKAZ'S"dN3KQFTBNj*L6NH)C8J5-D@-)TaX3SpMH-LBfKL4J$SSNB`"M-Bf*1
+*5"SBP6`cp$%LPXP@Pb`FMk4FK%5De#IhcL4"V!BA!A%ik*'Pa)a"8U*1fXUFrI%
+R,b*1HE%R2-L6PGM)RqiN6J4*c5C'F[TfHiN5Hmp*KcQBL6f84STq+PKXBUHcX5,
+mq*1Cf*1H224)R@q&aIYdIrPVcZeL6RRBc#ic'qeU[LV)H,CDMYI#mH(Ki'iKaGL
+Il03lHb[#K@*f[L`h%-0jK`hQSK`)BF-&,lrRb3i2$kIdp[H3!1"LE'q29pLpTTS
+BGYrD'("q$j2HpkiK[0YbPal&j$l1apQ(JI"m[Dr*kd-26`hN2ME2Ei'qd&pa-1'
+qiHJi'hkIKkD(Kp0ipi*H(iH&$$UF@i%M[[HKi'(IE2"`iEMIhN2bBYaKlf(XEb(
+XG"K`fqfrKkfQ4PZR4LlL(83`kD(!f0P$FG2F3qYLqcKmAF3lM%q%)G0Jp$EL(d`
+im-1"mlEHRFBN0aZ)BH"$q+m`0M$ld2[I+-*$LiF2MiPj$LmTHB&jpUq`F6JAhQq
+2JhfQh`j26h`Km$%`aj5Z+mZ,k(rF1$XiIKheaSq*r(KBQ"HHb2PIAf!MHJ*JqQQ
+#M%qVK`pI$FBX0pkBhq'$!"MBq2dqpZ-2JBQcK6#KJEfqZ-!#HRkmNIkZcpQ(TmA
+%`"9r#SmM[h'!Ajm2k--0Z*R&!E$[X1iK'43Gr4FBZ)+[C`iQ(CB%2%KKq"'%frd
+-6Ir*Jl2%`mA&[Vj*jEliF5mff+MHG*Z%EN&!'a)F%GeDKK+IdZ2P`lH(YB5A",V
+&KhX)a1p%"`1dr$KlJ5ppIEd9H'BaKHiQr`El4`m6rF-2kGMJiYj$LI!58a%4K*N
+)"(r*U0l$[iF(m81q'#fH#Jl`Vc4MDI3a06IBF1"JH1-365e1MK[XA!lA!m[$a1`
+KKhZM`bT,&iH,$H$mB-0m-D0$fQMaI6f1$Khh#f,8H0,LHlmT%[DHVXplqrhVk(8
+iP`-q!R%[SEc%m$"[ZZ`I0'I*6iH(L0CpE2%K(EF+(qr`i'"HF2jX*9Q-eF#+hrD
+l%q@FCrP[d``r*Jm1iK``@h'e(ZdHh`GpUH"HA(%[,cf0pSpRdjC1N[qeZ)IK[)G
+lJI*Km2EhQ,`!Uri+@ie0jI3i(Cp0L3r,Lq9iralqm`#9(`AN1$l`1%!m5qlA!fX
+0a`SI@a-AeppFGS-f+M&rD@`hd2`A&[KqYHARDm$DhN2r"Upp$Sm'($`iGRH@AVq
+9dhIl2$`2N`!2KYaa[N(ar4JlM$Z2A(bkIIGNl4N1MKa0V$a2@q6fG(FH8K9UEb(
+qb8*Z,MSm$fH(qM3H*`iG6mRXT*lCNlLT+qiHi`El!l5q`BI(mV%mZqhjE,`dXbj
+5(%`G[lrVH9p($kFLLh[SIIiD8bfYjY[Jk,Cr5dH,Kr$YL[AKpU3GrD($aGV[m2i
+F$Tm8%F2VY[HG0$H%`ll&kH($`#rV"*@A(`EBTcSlM6$RIqG(LB1qdd*L4iH!*6U
+iEc!e1"jHriB(H2l1,[ZeYpZN6AP`2IUF(Y3hpl$KmhJ$Llkq9a#mqifYaL&Gj3H
+q,Xm(FB1qdID*N@i%,&qBhV`QRZ-2EPj2#a)H(JQ4(iF$qA%pICr5l82dT$LHq4R
+FE@'qhZ"UI,`GRkF1*Li(bElIH9fZi)!Yb`6&`m!Zdp2"KkI6$ahf*JEIVq,kHf"
+Qm-'Hc5'-5m[#UIbpq94iX1QZ1*Lr$FB&jKr,[Y`,bm`rJKK-U81cfa@[Kh'$Z1(
+c2NfjKea60&LlFQpJBZ)6E+L,kXHMrKF!X!aBF!2da'l2ChQ$JLq-R1!B`)F$qp[
+LA'pfDB9ViJVi6"[@&KSX4eH[a1ef0jl0pLhQfkI$`-ALiHi-N9jmU@DBD'2$q1'
+i[X-aRNZq(Jr*H!X@6DDifa5cT,I8h&m1V$`1(rL'(4iZ$$Jm#(8`iB#l$!h[QBH
+*l0pUBI+-0'"p5(iEj-1Hffff5k9-[82Xi2bBRb)SqR'd[M5U8I[X24iGjSpYYm(
+hYlL&&BFA!kFV5Z-5mfGjLD2J3qaJpMZc,aKi'edfT-3*X%EHbKfTKiiZa#hFB%2
+XGH+E%[X&-HF1$[8`p`mAj##4CBZ"IB(A`jUmfC1+("l3c"haFrJiPpJ3rCpQqbK
+CCllfQ#X$rD-rLhRDhh%X[ImFa-m0,Kh%aLQG%5fh04[BHA$IG2[8dGiHhe*UF6'
+(Kk$i)HLfZppJf&r0a2Ni([MlT9&r40AZ,X861"[G[$m'(ih!*Rp2L*2M8THPI3r
++ZCRi,MfFAfIR'59-e"9BMEh'"a)F$IhPpLlhFF6HQ3Zq'ad#l$&aJq+9@`iPN@`
+3iCBeJkE8heaHBYjKN!")K&e)m,8M#Hr[XACiQilALiR$e)VX($r4f)0Q%,%[%GA
+%`GQE%[%e1(ia@%C#BIAf-1f-GiffQdfMfeN5G[1P63iC6S5bmeM#am8Lh!`1*HF
+6jF$KB2V+jQ,m#6k)*64*a$D@Ki@"l25i+`,LrVKa!)fU3+@PKGl1r,CVk(VN[45
+cJY1a,*-QhP`k#(Tp6Ym$adZE`F6IqDCrF"GNRTalKLI()HiE+4Qb%Zc&F*Xf+NS
+BHZ(%DNY`D0m'(IiSN[C`GlLm5mh!iI6p,m"Y2m"#XC`fANfH5UAeNKhCMPGSQQa
+(%KdDDMpYYVjGEaD-Pa5AYAfcKi&pJHpFH1Edr`&3Ppdq($Km6!k8XAAIf6"L6!`
+F2IQY,EB!(TIRr5&F,!LlFDmZU6(#eqVL(6AeaC'5j0a2CMp#j'S[X2f8Xl(r0@#
+@c&9R5i0pFI*HB0pL'r1cCaK[#3f,`-$CVIq10L)h`-TR@`Ik3iYjY8eiA"JL#hE
+BH!*Hb6&kLA#kq1(`M-J$l4K-[[jHcl*+P%@ZY82d$dD["1@i#Z(Z1,$UIM+T-AI
+Sbf,dbY*TX&%ac)C,ajLBrZ(T9CJllbVMp-1"lhANY&ImB`3b9dTSD`)H!#)jAVi
+I#a2PBPd)QTI"`4Ta,i!Pq%e,QZ&qdZ)-Ia(NfbF%L*SB'b`06LBTFIKm2%a$MBf
+d1M6*qFKiJ[00'!NdhCSEIJA"YQQbCZ0qFQ6B&5MTKE5Y$L*FiEdppLAa-9*pB&j
+HAhj1PKYlc$0cRJ3lic[,0,!Kfj9!V*Uf(pEI&6)hIDQmkC'8YdE$%mRE'#3A"1N
+c'jV!%-#b0N%QTa06eHJZ2CKl)fr,JfANkY!@#CmTBlDq(kX#irL"KQFq",FFAi4
+!'[p'H6VP*-V&e1ra,M"iR#`%RcJ`pVJI"m(-EE&`%jIF@b`cK'15e+TFA"hTS,*
+M,32EIT04J1EM$Yp[L*ajB[X$9,XG*%CcD&`[Xi!q2bi!IR*KLi2Tlh$fGNEJ'"m
+1(dF0mFRm2!-BH*!!r*a%iq6MRpQhKhbD4Vl4lfm[2J,fG0[5T91Z)PH)Q$F-`--
+f'`kA-UDcEHbpR8TZ%E(Dr$dm*9G$J'ZF,2Bq"M'*SR`-(XG`e0B'p(b6%86)0Xd
+(8U"pRf6!IKiZ##1!9+T+,"e(&Z200X%CR0HXEqjY5)Y-5miIQX`+Te(m($jLqKq
+("&MSm(i$Km%Ka0RLPd3qC0P)SfaVQ`F6i"0BL-cFBQ"qr$iR$f0aEQ*H(Uq(F'h
+)Qb0F3f@qKk2!KZ,`Xl4iEMbId#$0A2bBLF*#9*m5m`bm&1+YFHf'UEKpr$Z-$%m
+a%h`q"qq(LHceGmDprpiGjeHC*HSLX2E`m8XM192&q3E89jEFFckC6GpLBCeQPjF
+lc%fT[`!lY8cim![U*4H2m-0jmKh46LmlrN5Qh9ld6[`BGje1C`55l%kG[j!!*q-
+R3C*EJd2P*#da0d![&6)[KiRb&GZedfQl+qmNQ,KQPQ%Y3[#V!hfF(&rmkdciF2B
+p1GU6hX@(B&P4Z#TJc6VQ+c[e&S,Ki"SSZ,M!h#G`md8Nk%c2BH"jF-2Am$JI$XH
+V+[parREHbP0-(i-6p#3[JFSNbIVF2DQ-Zi`2Pki[B[,c$5XA&rkPSPpJrl0(aD*
+[EihAX-KK+N9cF*fUdX2KaGhZphIFSCr-(SI6d'fkIpT*Sm0L9eF2B)5IRl6f#9e
+PLBZea5c24TFPI*JT(%`IK0e`$Y-LH5a0%m9H%"TV)!l&q6AkrAhfMk-UQk(VY"Y
+VlpTP24Q$(eJheiHpYdRkr`TZdBCIk9CBCJE*MBI%,4BF2rT&4Nemh!jmV6+rYQ6
+Be,1rE$HHm!h!`GYY[0q6!me*QD2"lATq,$I#qK[ZPZ1Ra1(LEHh`I,[0V[Zea$U
+lPC(TR!PHHQH,1i[0RJhh`HaHErK*iQ8ZQhb0lf"NGiIMlEEHBN3VeHNjKH'8"fh
+`E2!`2N[,MiF$iG-C,caXNkX6&fH#8JiQ,JB2`3i2XI*XbjY1$SPmESjh"F3dhR&
+PXq*mYmGd5miH(EllS8U`Z)HbAIV0clY5aEDpGd+2dE'@(f[3Q`NZ9hl2V*j1pXI
+4LF#k8S[VIeZR`F#mhX1Q`-Aadm6*X%TX+h"&1f+S5!H!XD(&+FmaDYL'eAIF40c
+I%1R6I,RZ[#E2r4`8T`BCGLGE`m5N2MF6mm5SmEaSQ2mIaSN5C-SMiAH3!2'lNp-
+`a8cMZ1La*p21F!FV9mG%LmKNr'bI((Td"((5SNHC5a*l2aqK$Nq!qV3ce8qHH5c
+qXI0*2a*fCNj8rb'2j$AcqHf8V`I"U*cMMc[U5a2LhF'fbI)j2fmR,pZ9%lAE!TZ
+0YjIf[YG9eAfYYp(G`Ch6D5*6kDDB&qbkS'rrlM6DE"dfQl$QJ-qPi@6bHKZB$iJ
+XB,5aPe@N&@S4MJ3aRR`EU*hN5HrP%L@YIMBQBaNU*dPr*mMp-6SmGj(U@-rr+IY
+E('5Y*QCrfYF$8h5@-p-mq$9IbLIMmM9HKM21lIfZHm1d"rlf4mla0*Aa02MDI)q
+Gj'2m(`)R-ir`Ia6dcqH2R")D6p13!2$ar86q0afFP6G*'L@Q-dNr-Y-CDq&26dU
+6T+r'cf1cQNm+Iadc[+r(CkCj(iZ-RT@XLH&25Z9#'0r1FTK!HTAF[Mj@UlV'FI-
+lc[-GDjK`L"ARYKr10!%ApjcBBq*@k[m3JYK2c2LY*qCMj5U2(DQ9q*!!KmqIirb
+2"aNr"T%3@Vic(cU%AJrL%&QHH8KY-IR[)m'*Mi,@[ViQ`amViXG-c-6@4%)-G0S
+Ur'iq9i[IRbL3!'-bNV)!p-lV(H4M,83E4r'q(MqcmM94*bL$j"q[S)RF["l@0(N
+)-ENCRKFC"hQ-RXC+q,["amCT0JM!I2QDa9$M[1JRj%5CV-I+i-Q92BcM-G+4$Um
+ZFdPHaK*F&&FkV(5Q%NrIb,qImMa*l5HV1kVmH-RrDmHHYIaX0D%Fh'ikA4Bl)pT
+-cRSceVi'-RVAPjr)br%Jlb6Ie'Nc8rDa*b##MlDc4(ef-mlZXI+QIdmr@m'NPpG
+R,hT[%U[Y`C'A43H""c09r,*5phdQ3jQ#$aC0rNTHYU2XDIl'R3%3%YZNbXIcl2T
++6Gc28pVq'1p('I`aqkR[3b2Rd&""A8RmT13RSRYFKk-QGM8@dp5rjkSR09P2j8N
+VGfX@$mrdU56+Qp0iNLEplmr[bk6bS2jp[lAmD$G8AmT1RrGIllaD6D5,E`-C+SC
+'lPqM9@IH342cbkMGhp9m1dr2k&MMph"HdN&E,mkShFMc[alVNYe2lZKNj#UmlRU
+MdDMcXa"bmrClUVJc04Hj,hlf2jrUI5am%fLJNlUaYTX(Fh1Um(T2RifNS)p*Y-e
+""HeIJq&h258(NC(GIhhHmlHE150hY-PZl1JmhGd(f2j8Rm*%lNYh*hI*B%&I6HM
+BqIdfrUYe5IbahSdQkNHK8HI([Ghr[dDVrrc[0[IacGr)mrmGY[j(PIHqX!IPIHc
+qXN,"hK4ZHr&m@BRTRJBcD5Ip@e*jXf4e0Q3P8*!!PbRJ2kK+4P*NhTYr(fR4Ibr
+2Cp$*p&X)rhmrYqhj,F4lh*IllH9Aa,rYr2UVEd+5cS[)c-(jrj8RdVrmplVCJ#G
+!f%Sq1hIBIXmMYr1[r"mRXE1LU24r(ZS0G"VTr5pRe-'YN@IQhY*UChRV5SYU+#4
+pRNDD#4jm&&DBcpQ1[kfphFHS[E(jqkqlMq2R[1rK%r[UGhr'pG3RN!$mrRHMq1r
+k#NLj,GdPYlr"N@HBMjQVcqVfRKE54Cq&Y2Vfh#QkcQFPaeRi[J39(cpTedM5hre
+qZfrMq`!HhmIH6E1ECdF(L6ZCJlV@39hK34q-U-K@3E##NQl54RVDSbNf[JpA*FI
+8@hUe9*IqINZEY[[9e95ajZ5Nb0Tp@ZU2-[C&rjp*5bEhH`HIp@#ceQ-pU2"Y+VN
+,E9jJ3Aq),RqIrXfjeQ5bRQAr3H"*b8h@mcNXYZi1JehIh%HcprQ*PI3bGT(QdRR
+e&qNAe12[j&*Cj+cmA5HUaDq,"plSk2Si29V*'dp@4Y,2(q6"Hj,Mj&*ECS$Iaal
+DrU,D4-lIV-TmqceXRXp2NTG6NYhcGReNZRp@SfP&!CeUH#Lp@$B8ri*&r5ArLC,
+5h&4bQXe[2qEiH2Pp"iX(Lkf"'-cer"i[pj'kNqIMrDQd9hNTPM"[DbSbN@#cef`
+Zj&RGm(rkfqKP))+L###QT[aE#283DbTV+b60lc9deC5kcSHKk(S+A[+@$e0GM*G
+Y)NcB-a")Pe0*Y+5fY*%hH9&R"D9F'mlqNXimZ#redHA*mbrMmP,jI@L3!,1cm,P
+k5feRJ3CQ#6EC$*5i1JJi2L`Cq4-lq0@3!'db94,@2[SFT6Gr(U0K8`E+2*YYTi9
+6"Imr0c1`MQ$(`UDMf@Pl2l(,'M'Ec-(Kd"3(-`H4j%h'@d(HEb2,h[N@Q5Nl6-3
+@QXJjIS-P8@dH@-R5@d[e%AX&r"Y0E5@hm`+U,DSPG[EA2iT&Y6DcZXr*YYhb((k
+@cC(m("i-%e*!Db2p#Ec-IMTZZU11j#Ncdh`2#am[`YC"V-c@8RCffI'8NFl)p'$
+'@YT"k%&A"DBkrU*GrVZjRTILN!"PRGe&04kZZJi-'bJJY[a8f`M`E**!8Y05%+p
+eAH&8CbAiD4m-AE3ILJT,2m8'LJee4Cq((PfQ5JhN%&A5@G4*fPA)QfN(Il##di0
+*ePR"Y!feQCT,E9q!5`NcBbap86B#2FE"8`CqjU2RcC0Y4k[jCZdcqbmbfJf@If&
+685pT!XH3!'lXr#JNFeX-a8F[M*9Rbm(KcP*Cb*YAM[DXb1k2qFH@15LeN@Hmr&R
+mP))kfR,ajI,`9%VPpC!!$&'H")ljH$9Pm2Efd&YVDD4,jZ$PkUpm,-ILJe0Rpk#
+-6ZMMQ`C'cU)0Ai9*Y2$eNLEXYPi@Hde0"J@MlMh13*(NQF[imUVJf@`NrBL@NI-
+k`FqlcqbfNM19N!!85f9Yq+NXaZp@NHGe"X[a%+50Tpi!d"THXeFLcb8rT#3Qd@r
+6-39p4,c-H$@9N!!B5i0T@8NdVGCB$0+bZXP`@e4R)1Ac&*E9eA"h9&CqS@3H(")
+Q`9'N*"H""Ri2$ed(-`51Elb$2q,56Gj)bc+IF&C"Bkcm+cUk5AqbcrqmL[Lb*Y4
+-JVbRhYH"MTI2F[""r-N(jIa@J@jNV!hP,`FP5@dIMr-mP+I`Dl'#m',JhR3&L!c
+hH%KE&*!![iUL$Qa$9hKDcB5IT-N,8@HINfGQ5'JT2S3F[)dm[A38G2"0IP2rRb)
++,PjkAhk5$VVm6qd53IK%Jblbc*!!PY`EDA0eQdm52QDc@5EE2b2RfHdi2bbkL6e
+&C)JGb(Jc&bBqb3r"*%e*HYUi1m+ZFN-Y8@Gr(irD$N`DaXKc#P5GC16DLcNq6,j
+HNJ[j-ZGb8jD"5&d(Lilb,2DH!1mb3h0FrCM%B4)IQf5(MjNE[RL3!0`EqZU*C)D
+F53hmk5IY[!ahY!N+L2PV1df(2@RI`EcPb3dZc-*XIMr*pa*#hp*Dm[UT&R9`*M,
+Mbk+EVS-B@qD+ERim'Z+XYA65HE,-#3-Lccp*apR"25bY5NYZAZ5U'ACe%haTAK9
+((@FM16H#9'TFaV+4C!l!N!!jFi10C"46d[JpM"`BpXj)(jCZHqM5@aHad8[jEE2
+l6-TB4A%I5mrF`IHi2hZ#J)J*FNkX`B8*bX62pY+@6EH$6j+$[i"YT(CPqpY(bPX
+3`q5%QHi0I"53!'mNbl5#c@`J%2Uilb1mlqN'0l+$m$NK2BXaH-`Qe$*#cI#Me-Q
+$2eRKGrM*4D(iH4PkVa*1-R(8K1AY*l++YGC4dX'mm##djI0*K1Ui1raR@6Ja0R8
+I5JjHSXk)eHjLfE)AaB+MN!#AY1mf8QE4@e3F%PY)iqA"MjbQJjH6qa+Rk1XU*[Q
+[rdK2a0N*iDb%c1IV),C5!+[Pl21FLrZ3!*53!%LmNAL!LJd(H3GiNK)jX"`38X'
+dcmQ#K'blq$PqAJefZJm2QB)mYQC,ZS,5$PjbcU*PF2K"AC+$ZSmZP@`8%+BN&bp
+*`C%fR"c@FhQ)-ri8FLqNl&PJhK,K0R%N$E9MC"G""iFpCiqflQY*F%a)pRDDl`j
+lMTY4R"i8N!!QL"XJFKM,8BAZN!#JMq*Q$BrNGCC`dR8`H(93H&i9655NX"Y[%JZ
+Dq#LfP54jIP6%(mkb4Cl4qB3ZDT*D4lhNk+#Ch3lf5)qT06"`DB[[#%+mcq,YYTb
+mLDD@2l@hepTbk4lN4jlp0KZ3!29J8QcNVK'cm&C"C`Ge"Y1$*PikrNqjY+6pPY)
+qc0U0,I`HSYJ(Nbb`#elb$`q-ZApalh@CT1$528HbaFXTp)bbdqU*FINC1db@mC(
+YT"iH2XmK56mj)Xd5234q3qKTp*D'r6QM#(CfH5JG4l%jHFp6rFY,eI$JLDUcf%%
+'ZePC`GERipRk$NHH$Y2%JT*'0aeXM'b*Y68`Icb4[pe$mTaCej`GZimb8pb8SMb
+iJi*8Zf2-aQGK*QjJe$apK(f%RV$,pm@I0+G3QdYp5SqSJ)S01cUdhP`EbPJNbkZ
+XJjLAlAId2,`GrVS1Am1$ACU#XS9TYAT6E(&0[kPFU1[53H(*0KifcT1dJU51YC(
+0NRl4CrV1Ec,)kYYJb1U6QdMV2b,E`S2#+elk$Jq%EK&rNXI-m@LfPEkK,hPbKC(
+Rcq1dPSUeG4jhlNHI&lQ-YM!9"Cm'Le4[B`51dXj(8`G"9@G4PTGqGpT-F4(dGe(
+e06`E`eR[j(hH9(Sd'kRTIG3GdXJ0j"kPTr1*D3CRJR)-jIeKCcBF[*h9*k%MckL
+pMfh2fhIT6kH09-(K5EBi&2$i2KS#!*i-aDH*Yl@GC*P`3Dr2Hec-rE5IIQdRP@F
+M4386+G%iEAZM"@re(rKamKCdfdV%blf``QbMm[*mTPqZCC`LG-F)L4rdlBrS[$R
+lE)8RUHS-Sb2mX++dk#$@ed'XT5rM*%IdbaraQ-YD,h-Fb2ph+e9Q1+4rReTj6e'
+@JN42a3DXjPi,Re*QCJi+arX+@!c,jM[hkMmb8p0"c+4qEj+arMqEQ$[6Db#rG4p
+RY&EIMQf0Rfm[mm(e4b[f*B!QmE8@II`F(HF'di0SJ)!R2-Ml`k@#dlU$H9X%M2H
+4r5eee$iF(IP-2R2q4l9NHP,U@$VcQmeR0pr29!Y5H,+H5Ha@RNH@EM4bNjqXU11
+dPI3`BqCbp&IrIb*VQ)ATKPl39mm5#d3K2a%I(9-jH"Bqb+amGKrA3Cl5ih'28I5
+E2`Xr"UXG0N5kbSJN(+U3!#F["[#2Zk)qPjRQAlMlm8'mU$PmPTdF(P(m2S%TdAE
+1ilkTqkFTVZm159[NHla!3"28QI3hEb1bZRm[NH[Mp*d%(JIcJjRjd&@brQY5rLA
+86-q5qC`@dKX-bqrJ0mk!M[2e%ZMJfNF`CrAmm[h&UkTc6-TceMZ213Q9q3JpV`m
+CY+(**[a14i,#Hj+A5H5j(KZ#0M`Ra9d11[cJ+Nj5Zd4(aYQ52S@HIe9R55h)mb5
+aj2fFGlMclcpaj6`HE,rTe*S%VcYS4j9T"MqddM+G1X['XIbrGb2ZC*!!!"J(1cV
+kM[@cfNpLCD82UGrbdYp4cXRpac`DLANMF[12$q6kMHTrSNEbG+Ai0MI,5PMI(Aq
+N[l4kMMe1rRZ5ahNfN!"V2QfaP[m-i0&lZAY*Z`qel6)ffRGGe"-c%Lc0P,`ip*1
+cm(K(FLr[DT(-IN#1DHR0AP192(9eNk)b#fP*UAkflV-i&0C5IC12qYC(AYDlaFD
+b1rU1imr%rmMbEmZdqAD)#!*j8p1'R8m5%IMjH5T#jc4@ZJb-cqF6`1@Xr!C(XpP
+B1AaQ2QE,12h(Re-Gj"8Cce`CXpC(URe(Y8YpqCc04,U2SM9'@c'5YThq2QAmb2+
+m1!VLjH$b2$Mb[!RT3VC'F-NjAQj5p-8rJ80$!Hc0hA-bH2PdZ-XpBXF6d(S6P4b
+8%'5p&FYId-Y"0ZH#4e8@G+4e(lVA5HX@1Rlbhe-'dc1CUqAe`26KIR2@IJ6r@@X
+aEp+AJZlpFir-Z(#RC-j@H,@H+J)J*ch2FbpCDNj@MjA-M+ahZH(*mKFXqdMjAZZ
+AJVLQC'rjri3G[r+#a[C-5+H(qPq,[bUFbc&0bQIpl0mMDN5Q4j+2"C'RMNDFcMj
+RH6PTMcT*++e12Xl6(HeD#VE5cPh9,1J&Rhp$18PYh0*EF(25kA(5pCHQ%K)dQ-T
+CeNBbDkZ6b&Rq+4,@01kcqCJq[adhB88(2GQrG+c[CjR[cUlXM((T'0Y*Q@Ki8RZ
+P[imSrNCa2l`IhJ3%!3QE"VAU00K"X0Jf00FrqM6)&+E5$kLdUU0d6YHD@S1K@PH
+Br&86V,j[3)fjI(c+qFm2(c9MDLeM+8f%dj`AqSeQXMAmrdTGYi4'XNhLRNDmGCp
+j)2h1`H&5FK568T4E6NI'`2e'ZH1eGX1AjI[i,4b00&Y*-Udb4'NNmK,NDGir9m1
+CMhpM,Y[$NqK@FBR9-N6AUpUfNZAY@&Yhl,fMV9$HQ&5IQNCH,")YM`i5Er98NXq
+[l,Blb09X#e[S*2+GL4hV)p*k,kM9R`QCkfm4jHrVXI-rT1#3!'4VVSmT+9DdZlT
+FM"hlBdqaMmmGe*Bdm#456FqXDrrGMfFe)eT&M@I@-k5NQep*-@-ch8B1JlVA8Z`
+TcKqT*Y@r9lTH,iC5XMHG6+ZB#HAjQ#[RTHm18aj('Br%lk$HAAS0i8h2ep085qm
+)emA(cDKkMA'@e,hqZarS6hRj(cXCbp)fNd&T*'rJU*QYT6f2%m0XRD80&5C'6,l
+VRZrRmCSMXk5H8jYBc,6Nj2pK*kPjjHXrV0K8@cR*mI(riZ2QHT[(8CjQ2+2`BYT
+&R5j'Kb6)`kQpU1c&Pc0$N4@AlNBl,l2Q@HbeK'*r$NM*-TY*5@h@5mcMDFl!P3F
+$RLNB8a'"I(I[bNfFQeP4,rCS[X%9pd4JCSC%h1H4c2J39YT(6XrehK1C8H&RGJr
+mM2ldrY)pRkQYH4RhMU-qrIU-kIPkGR6$hp&IcPE[1k+QC2YBc5bEDQNjA2dZC50
+1C&aD2rBdm2(k6R[T50)I1DQNEeFC0Y$qQIINY*RUAlkM90RBMAC'[[ZULSpbAXY
+CNTk6E5CTT%SNep5EE6`F[MDI(`-M6[0GhMBdIUNHZJhPT9kipVkdaP#Q3Dcee,c
+*ke*%p,cqChPC59((Z[$GR1c6impA83IA,h0JYlQ5N5aPl2M)1hRldM,a(NCGehr
+MD6mmcT*ApiRcErQA9lIH&lFKBcTB0E"5E5$`++LNC(+5cpm'DLDbZf%&YA@RK,'
+G,8ReB[kM1dfRI`Hbb-l5HdRJNCL95-ppMVC)cm"BcSfDp-IfCL'jQKajeM$hGbY
+)T,fqbJ)`JYU4h'(kqfXj0r*cdcCIMPe(c`Bl2jrCbpT0rR(,Lhkq0bcMajI[k8h
+HSMP*"NU+dU-SHL"h52jFjCXmVhK9Q`bA-dQR6iiC["eG6ECp)aXEBapbr8k0j'9
+GhrLYT*9[+5$I`A*h#r*YNmJ58Lb0&D9a514M,A`klB5ISdKll@F0!@IXi'qBbNY
+YSI&06TP,b4P,m)ml@`JiEBbb0VqQGY0FI8`Pl8IcmJPlGGIb,2Jc28rXbNeViT1
+DNmMfYF,#NQq&AiqXr'"'mZmqEAMNB`C5A*h8(HGjMcK)qIP#-1Xl1A6j+A`GF+C
+paKp#c1lfXBBpP)YEhR-rhrJj')d,D3peQ+Pek$2k-p"Q`V1$V+RDG&P*XHXMeL!
+LJhilf6ZmP,p6b(@[MPj%Rc@dYVU6DG*r"Bm2(cX1A6bANHa@j8D,H6f8('SV5Hi
+kPUC*6E`Zkf#8X180RaNF[8Rd+b9mU'm0IA)RS*qdHJQSikCAih*4Trb1kY1ARHr
+C5lmrNF'dR1Nmr'#3!#22kYj*-IfHLYU`MhQ@4l@kV5cH$r"2efCBpPTFURCT(pl
+q1LrK4@G3C92Rj`MkFJY[jeR"ef`IU2HEXir0`H,bm#FkK5kGT2XC6El[D(d!Dc-
+q&@'fSfP["N5k6R*%hmYRUj*(QB52+D$`pK@G"VMhT*B"S$EZE9EVqH5SAP-hmMI
+GbraqLF$hEqJNEmc6TI&4IcR[RT'mp)TDQNJU11ch(QJc2fGRiDHSlQf8[VeTHFN
+RK9P65ArK9NMN$rk1LmMPmGPXTDjlD,5k4ZmIZj9&+2+"NUA)cbaM'arClZfb@jm
+MfU*XApC0crVRhJFGPS+irFBNAfe3HhT4AZ0JrqkNLlGT&e,q+fXkM5q8r@8dq'r
+H9#8URTCP4lQcjIZQ8UT0,TjF'ZG4E85$lUUBdJ56FYii[Ci0Y8CMm4q+Glr22rc
+ck!LJhS`HMr2*4(G*S(9m15F[KHSZmRl!)c&[J1UZ5jT,AJpj9b+`qk1[0!mHRTk
+KIiF8e64l53Z8qNdXdppIm&6Ui0CiTHj3i`mdr,`Gji$+3f2R`Ihmr'E5daKqU@2
+5j(([NBa`(-UA(6mEmqkMalq#QT5-qH)bdQ0TMqM9&8j,d-E"ih0YM2V0,"R1FTB
+2%jR`RkT&,2U`@NA3-T&j+8LrR4@NR5kHcJC*T)e2dICqH06*2b*)dTYPq,-4rS8
+hGIcm,qIK)#+$G*Y)rm(e'[D18NY(0*(K@NNZQ-65D5Dh[k9Ef6YrdNh*5r#R1m2
+cGNFGT4E@HIQcGPj*qG[K@e+[)h8Vi0T&rePR5GS8I2ClpUZm2[dp0#4P3HK*1+3
+qr'd$UCkRL2Up1R2Cr+5DVmrS4chTGKPS2#b@2j+#RL66pU8(a9h56Dq[ar"Y+GP
+kAcjY4ad[68fbmRpR)2bNhmi2&C5E(c9T0hpF8Qb8ZHPe1Cc0G5GRY,6`kZ$A(i5
+bIS-riLUEZ40[pj[2aDZQeG0d("c(mpCr2@)#+$G[Ib2j2U-2S2b-(VAa@rlP8U8
+LQ'rP0MfFiHXDdcqXefVUB0G(TU2BGrh@bU14JqQIQ[EF[8phcQVU*GY(m!CIB*5
+(fTMe&q4h4SZRTGTM)m[@9'9b-rf,jSr#1d)[aqlXl5pJT,6cmr0i0%j4qTJq,V,
+NriNe@bY+9QN$jmf4b%R2DI+H6fNV`kMjlqi[Rh8AbGTd&%H#1TfF(h[amhlp9fA
+Ef2*HEb-'RFrbT)k#49I5klUGCQGTRr&m+rr,f0*e0*e+!L!N'4PqTp+@RrPVQ86
+N()`m0qS`THAe6Z-*'dU0*Y2&UU2eIjq,iR3AI@AZIpcp1ZNIkXpGk(p1YQh[2qI
+Bb1Ira"iALdY6iBc(qTY*,TqradVZDlAClD8K834MM242G8b*a8e&QNBicQhb-64
+QHq`F[QNXI3MkLA"d1@bhH3%CbCK'IreG4D@Ar#4)afb'hm1jAR*28PUm,1Fjm[f
+20PE,p*HTbkhUH'AUI5Rp58#)ZRlB"3!!!)"@ChGQGhGQH(@(L(CQGfGiGjL)QCU
+DQTPhLBQ*HDPkH'HCUDQCUDQkGTUTUDQkUVPhQ*L*USUlL(H*L*Q*Q)PQL)L*Q,Z
+*VBL(LBUUUjUlQ(HEQCUTUEZTKkQCZDUDUCH)L*LTfkUUQCLDL+UkU,Q)GXQlUDZ
+UUCL)QDQBZCLAGai!!54&CRGhL)QCQCUUZlbXZm$HlJi0!0!!i!!!!1"!-d9%4PC
+Q9QGhGhGRGiH)GiL)L)L)L)LBL*LBQCQCLCQCUCQCQDUCUUUDUUUCUUUCUUUCZUZ
+UZTQUQTUDUUUlUc2cm$AZ,Tp(R[EmrrVcrl-6d2TlrIF6k1$-r,AqK,mqahfChZC
+rmrRIkrcrerVreQHKCd[VFhq8kr@p!'`$I@UH"EF'BrKGYQqh-j[qQ[RDkerRrp@
+hh+Vp(iId6U(k0,k(drdIcqrpDfiIr[jCRk2NcGEUr2&ec2rR3d[pIV@hj-AHfR*
+Xrb`jlJdZehHHTYj,e0T$F(r!Vq[[Z)I"C%+eYR,[2"RHRRRGDc1CK8hl*jm5(39
+0jmfmKlfI-cZiXS5YMFUYLk[+VUVbPVpGfX2@jjcIqKqYLrkf1prblRd,'VXIi8d
+(mBm(HF'@cIck4ZrR$5k5QaIZ#erpFj4ZZXA1JCGrLHT$%Q8Ur&Pk1`p4Phr`)I8
+1HjrPEGjCiYRLS#-!flYEcJc-lH1eU1K(,`2#U,AeB2@Pp`qYrVCjM38dRF9'F&S
+TVqkkcI5llr,mre[2Mrcr,rVJl,dDAmIK8MbKqT!!rBVmAe-Akh6k#[`Hml$q&rr
+V$CI0c1,BdBIZiYIEGVIA(U8hT[+fACmkaUbeSY[ajIaj0-kkL8l`Kh*Qlacr+"5
+$6aldl'AAjLSKh(c2KBV*j)GIfd2hIqZUTZU`D@[emcUF5acCd)X'akVQbh,dPI5
+KZVEmeAHH$VVHY`m#TrZ1fiG"5U1X`ThE3k#pMJi(@`qYJFL$GqT*[1$ARZ*[(ZI
+hP`FJA@bI6VEM32U0PAJp0I@rlEAVChK91"S+FlQ048@&ADl[NGl$RT@cLGE8qT!
+!epY5AcU%fY95i*em"kI@VlrCAQbRHQlJkZ[H3Gm*iJlIRB3`Ca%hArBKPmjRBFp
+%XHDj0GYmp+&RcYYi5MRQ5$GGS2"U5jC[QA,#A%l[1$Ak,kQ,QChJ14-QBrH5lqF
+Blb$AJeDJbII)kJcq+mZ$iPfGUqCq*p61IFHCR,lTYhmf#p[I"V-Y8dUrRCAh)Rc
+DLmK2NNE"L)-9l)"2@QBZ`Vp6*L18`jLSEeNUJiHr#1d2eEB,ere,ANc-lAhpTBR
+Zc%&qSKTVhAf'D24EeYLGm&R@5KUINfTE3bbp#"J"(`AH`i5l2F6`+QrlcFe&YdA
+4CD!rh"CVX31S)a2a@h49jf8#Lrf+Vb*Q,MYrT5fkdCr-,jDEldlh`DR8deppZUq
+&MhY48*kGV$RYlh0iGD9X%ECI!jERq$e9)!J4(a")*0T@eSqF[8RJ1[jHlm3d+[X
+@lB)jRZ9"'ATSDZV2JY)al+'IS)Cm["V["6c6NmYBaj)I@qRJfGicj+Mj+Drm9Y$
+eX[TX$NB"liFZri*cfAMjZVL[`5GC[cGh&SjmhE[q)hQ#G-lJRG`jlKEh9@bl(-1
+%N!#&"5ic6Z#X0*kJV+22V%ari9[U-JUGZ,391$XXbIm%c81iRpjB8Z[m'I,L62p
+iDZfKc"UJ'Nf[+3S,6ha"D(JRk)m*R[U4,5T`IYh!H[#k,,8q@8&XAJRYM2%&YHp
+3@KG23[CjQ'IH0*)%l1GS+VGh&FfILUKcei36lbT[hc"1fVf`8P`rBH+NF$JVl&p
+Gi$N&0c$pNm91C2b&KQCfAp6&8%i,DZm''(ZA(RCp,d-QaHjpVqcXp"eX1$EqS[Z
++KUm(`&",`HLbe91L9pjAre'T"5H*qiGP-HIaCZ)Abp-q[[Vh$efHU[*VDQ'"Vc`
+jl-A(G3`p)G%[#+L6Bq[p!D&+p-p*!A40JSkmpNSlY-5Yehfb#PIEEL`q,1k)JMB
++#2F$bH$CDkV0#b'(kDJNcdbU#@@Hi*HQGLca)pH036mm'Zm+'N#cV4iiZAKYlcF
+4)BGa9a+iiEBDk%K&mVH`R++H24eHIENk#T`2ihNcbNM["E#)$d1JYbhKf&YS+LV
+UDDeqh1aiDTapSPIEG-AFM13Krb24kB&8qj1,eX0fJ,S,LcPeNlJc(AS-X-X%bZr
+KE62lMZ3CkCcIDq$ZDE"Rf%1+8&l2`,(ZHFYYf%XS+X0H[cQCk$VJS+XEASSFqmd
+'pCE@0#(VHNMc,E-hMN+`BCR0i(*Q6ZeYTFHQ`5*9iC6iQ$6@d0Gb$dja0IAp6$R
+rpGk#Ph-SH3`r6heVqCq("21h,l@'Ib'hj5l4Ak+*$i8RF16,cX#(e+DeHiDq"(&
+p806i$@`em+(DS#l1ic+KVARXrE$@)%cNI`YUpN0BHQhh@p&9B2*)DiV*R-q613B
+,Z'XcY&JdZ*H!GIQerXKfEiKYLf0rqMZ,DrYV("TCR199Y2AT'E0)&U`Ked'`PrK
+K`Dl"XErCG9h1jKX0b!hI@-2HkrAZ+#*LmU$$Ka0hq)mFQ#G[kAdd-qpI%2mX3r`
+pGElHe[*K86eY-kQff'BZ+"k6-HmT-VVA[Yk!r-,-R#0r9$eT3Le3SA9Gql*YXc@
+l+(SLPbC(Kkh[+V"pq("XV#[cYjhRJ3r*jZf[Q6E@%1V43X&pZGTF5qhLH$$rek2
+"VJS3m&HK&[)$iN1cXCPYT-[$XfIepQBEfpFQm289pZ($Jm+aTH,Jf%D(k&IQp(R
+iIfrL`IX`e9jeY,lm[Q8SR0Ld[DL6mc"5T62a(r",qAUm'akD(%2D*He(UMB0UDD
+ULdm*E[c-lAZ@S0IeT`dCL%ZI2P4X'a&'fF2KA&M,Tj)MMBMf9BP'YV3JH+R-Jkh
+[)eM-`E,l0R[[QeprjXcR-jpL$%&&P3RjeGE$E@4%EeSGR1XEDEk2BEdL0e@,kLm
+R@#++D,m*i3E$&-Cc)NI1!MkBf$)NiG+ZJkrHr4TE)qd[rV&h(d2qEE%TAqIK`pa
+HF(k0,SSDZAEClB9pYC`R4-Gf[E'rc@@V$f#iTF+0SdeR0H@rQ+0JT4LHE`UhFep
+pie6Mfrq8Le[*IQQJR$pRaIUBPp"2[l#SMN9i[`Mr,Kr!@#(QAFNZD34$rVBHYk+
+(`EL@p+ID'Y,S-m12D#e#K60j8FhIAq`h-E2cGm,"eZim,l-(13hhJK562jFp-1J
+QH4E09(kGVXiGPpZccIFBXrCf@[AZJfeGS*R9(`"BV&3qiB,NDe&E09X0C89'Yc1
+,RLSQc[jZCmhl%[qSqJLA1Z,2-iZjQAfbf4fBpK$`F`EKEZ+fcKU)IXCSmj4[&RL
+Mc0I$VpNqP4KqhZDrXkQqk5Uai28KlhK&XU[dIV@%&4pZCZlhl'(Zq4dZiX)IU(m
+A3krB8k`r*8H5IqH#I#J+"RA2-TPV9ji1&ThKF'Vlk$VG"%qRQlAUFhqM1`rEXFh
+BrmGV1qhp1(!m'[5SpBILGpRANq1HPfYMECL2Rr+UErIH$p[-E,`-e,lM5mai1cK
+p-mUR45SIYNTF$2@*mApG2@4l2jD'YKa*QlkfSeYMIi9M1i-VVcqm,rCdM$CXkBa
+I`ffJUGAHDrC5j-bmc0ilM$AhPFEedmpmXpZkIC(L)2XiY'BSV"BSXqUNUrkQ$S*
+hH8flm##6E+-AH3plrcpQ#SZkr([HN[Ghb04F@%1LYV1fej2bc22DU2@jQfaFd4S
+B9CH@HP5fH*Ak)aU3!2m,qcPi1JJMq$pQUlA9lIj-[p'GV*@bXF(kGVhRm2KDL(%
+VlE,``pH6pp6ED#AfYjX-YBdm1j`[+YHpQmjm,&kRUK8p(mVR-hIee0If'ci0r-T
+',1i(Y`E+S[eU#E,,'R&,1@li94VDr"AK+PhPReI&fGITMbjk!98aIl1QqRJbm'6
+AhPMHApMe@$QFhH(e0`rB)r'1DaYTjq44Z4blE#qfj'E&c1GKd!1E(T6a!k#Gd99
+IE[,9&6jYi[IRmhdZLJqC5ZkLQhHlj(i,L9Ar6-Z@*QE`c*H%2P$Ak@[0QA`LiS@
+NB6e#T9IXZTF`Rd(KCQBYTViHmVlkTKh2Jehclcb+HMBrSYFrS"#k[U-pZEbaKf0
+X%$qfmX6[R9q,iA45lAJhYj-YV$`URm@qRrE&C2hPqD!U((TVqdiAd)LfkpNS)rF
+KRQVRX-Y-hIlF@[`CH!FaZ(dr#U2pqYmbmqhqh&m'Zqh63pEMmQaRIEemZZi1bKq
+jpZ%pj-[Am(`K&1LTVrVCH$`64*kfdKi2fl'm`S@aPKc)Qhf$Ddm,"m'bVl9URdf
+Mq&IR4amhlrYi$BbmJ9#("lc`BIQjQfi4m`rh2X'dYAkA0hrY5L+0R-a49@&E[+L
+G`6rk6R+hc-Zm#j!!`r`KaIYepp6AQ`f@BUGpD@r9jR1f[dBIbf-2"UqDplTXj$L
+@2&,,rRHH-hAi25&B@ZRdm1iKeH"hYeQTRe0l2`XACE,k1DKTIEJd%1qqMI,FSPc
+U@c2dIYZYVqjNeppB''c`UDqf%5ZfGAk#a6hq[Y+fQKa$Uqr`KemAViISAF2Apl$
+`[%KcZ$0Vq6i0CQSIX(Z#iT%+acH$em-2UBAL@Gj[E[,fIbEr[F+EChRAfF1pf&0
+JIBV)14HrCa1pKem[cI`rKR9"&Zed&E*V28K[2em+(pFfmqR5QfhcYV$YCX2HrFl
+f9ZCPRHH$d9ILm*K9XElVj'GaE2UD8[&i8[&lH([CIiSGlCr#r[*Ipl"Ier6@[J3
+rFTZR[*PVG`m)X@UC@jch#KKqr`65Sm6rUmX)EZA5Q@0ADhPIEB2KD#TqR$Q,MNq
+"pL[XFl#9Cc0p9dTYMqAccCSqD+Cb6J4XErK6-D6j&pE@-l3#N5$TVBm12MlLFG9
+AD@%[%[mc@c+IAFj%[E2dHlRH"6BXcq&rAqCJbp(e@pY,'XUi2BMH"$"ZBm%%L(m
+YISrXE)bcc0hrC9AhS5GhpMjPYAIRVrdIRZ[dI*p'hKMIjEcB3qR,dGjA)H6Ibe'
+qQlh$pDUr4fr55i+@(pRjX2Ti0GD60,6`B-VAN!"$j[fj9jJi0MrGjm259p95fq2
+XpfGI)JKh@J$$jPjZE(r5rXHkYUk(khjl1Ak%"r-FlC3iF1liR49GVpL$SUHSJhG
+91[EV"ZX&i6qkhIqZ"p'GreDlcHrj3dY[Zm1Yp29rPGTj-lQTRAqCrI$IIf5-!6c
+2GVEB-M&Z[dH4qMcrpI@L9he2d9'med1m[6c$`rS`2pEEp&M@frqASI*p!6[EcDQ
+2$9qK$k-H1Y(B`Mrkff$Jbp9HCRckq2-VDVd)KpJ2`Vlkhm22Kr9k%cp%M&qYpDm
+Vpj%PrSaIl*RR`4+qeZYhRK1Z[bdbGVX#URH#)GDa0l$[-a9EbhfYAZrR9@m5490
+V89%PR'Y$JGl8AhcSY[QEkUhRcJk@0AI`c1QT5T81Im1fVkEH@[l"DGI+UIfEIa*
+X2fj0jp[EhhH3!00DcXp"b)+De`!C9+c+9FHVYB)+EI3qJ+&$'Kr[KTi)),UfQL#
+'eKA`e8j`(fZ$AcTf,A3'68%F-j!!*MaF[96UZeVX$ABYV$$J9f"6B(Ja%'Gc66Z
+eYFp8a,lVkUGZDDeraRI6-6IfBGH#lGjqS`+k$l)CXr@l1TUEAB5IYbEl28dl2df
+rYIYQrJFbHecm&EXj0p+J`p!#IB9AL9GA66XImS,+V!qY[,XUaQpkF(&V"hppq@V
+qc"X*(HJR[Hr[XY9Af2fpA89P66IqGYpL'H#Al0pHq##EYkQGpLQ`2rrG`35DVa)
++VGdTR@6X2dmHl"3AT*[Haj0A1U[%Kh2#TVA38emK3$A$amI(jbeed&P6IqGZDKN
+h[DH$CJAjbefqcUYfK*@N!,llF(lGhdPE*U[-kIj0iC!!b6DiqJJrKJ9Fi!m%(fk
+DGd90IHRB99ppZSYITmiFpfrqc89@lqh"Ri1YBSIfkUGS*-HUhI@e+kBL$931I"p
+L,6B&l9AhJa,hl%"F&U-X"6!h-'"VSmH$aNd&0J33(-"rkQaG[Hr,qIZ23kH[LrG
+ZF#Y`-#TZEQeR4D%fhPi&e3Zl5qNA@VY+&'qN8+(+3'i[j+kK3q0[FQdSd2@!KYV
+5jeHpbD&eUk1pb3(fP(!eH6[FR9h9'dbD0[,eGTG@PeXlS#3,lV!Qh0cG6D&TGA1
+aQcDfk`,QYZEQdQh0e@h1"[D0EFkZdZF#TUDkYYEA!R6SX@Z`*Gp'MAep'Yi)e'0
+I6BdLhPaX#dPblQ4"NdIESaXN'PeEb*YV4TiY6DhGTJA-fYLdFR!YE@EJ6Dd!Nh*
+bD0'0@eXM)Y,5AJ9Xh*Sl1M4bFQ#M)SmV*b16k8h!bE[*b80k1c3VbEkMIAehXEZ
+lbCGf'2"SDqP@kZ0)M8C[jEUjN9Y#EXlT%#MD6@N#YZGMXmE*ZkT`LDYT&bD0G1T
+ph3UB-QlSlhYl[@5lVM8D&hpUYVBeE*eFLjVEHjPkZlJSd+0'E4bH90`0lk&h[D&
+h4ZmDYVD)3"%TYb,6D4YA@l1K0ZYANd+163f0(q&C,eISC*!!0M!$bDfMFj16Gi0
+#KYU2j+'6bTGp[q,q@lk5lfeT3Zk&#M3SA-QjNaU(RhG$*SlVCKHp(T*Hc"l,ME8
+(Y#EGh9$9kZ0GhGP3ieP4LAGEUlVelId0YqM9hG(fl[cN3VZlSB'"Ndp(BaYlNl(
+qF@M6NbNE`!-j1feN[Ck[)#CEaZ,'MC1cQhfaZX!JG'XY20`-#A'S4[3Yr5hAk,Z
+AUk2V9Z64bE5KUk'RZl5K'ipD%lmQpbGC[rjj2+VE3MVFbE[m0#KNj1pT5k'cphr
+QE0`%8rGhdf4Xl54,Sd-#M)ZqJl5KGAa0c3MC16k&paI5qeGbq6[C!@+fKFd1d)%
+4[3QKB#IbI@VI@&[hZ6Fc+(i5(16GAA+h[mie$*M5jXfqMF@#0rqZVQjhr[5r3Y*
+FLKJ5d@lPTFNC16@l1qrkp#AGbb-XDJdZ8)eTXD1a#eDHhYV6Hh9eUlVHj-ZAZi+
+&TUl[fDfKIETTCbB)eEJGcFh2VHK'ZVH0aU&[EhI3D,**JjFJRTScGRI"AVCG$'i
+fRk+b'dM8*G$48*!!34MDZk`0MU`XGaXlR!#YD5lI*NlXUBZieh@i&'Mkp#qY%C%
+Bl69JMfIjC'"3$&GhfL[k'VDBTYVEhGc)Z@PqYBAVql'qS%"lQjVE5jZGA!V6&e@
+i&EUjG[3NlZdSH[GhFd%&pGaTGcFL%%k42PJ8)hjCHV[J`80&Il1MUjXZA0Sbidd
+1&c0Yk10aZ2fr55,4KK&JM"l`*Z"1QeS"TYV0VEQG,[U0#Ci(TFDKGhG63)ZAaAQ
+``6C%KKJVE3-1pfe#KEk+qfe(9b)NZYN6FN,p5#cEHKSVKTISA`Fk%DANhep)[Uk
+ZN5*dk4I8p2,UDQ4I8*IJ80r3$&@b,khN1'#kPb,UklQj)hr@YpAJ"J[THr[L6HV
+N35q0,N6CG[Gk[*BBCHp(j,aGm!--GcIAfVN8CIj#JDlZj%LrYjV#PaBecEK5)iA
+G'AG5,lZ+9T,SAdb-&AG8C%XHIMA)Vh&eI4AHVSb)fahSF'&J+p+K'Ypq*b9`3)V
+63V5jGpJB"9hJ+qP[VNI!+BiGp-NE'qD8U('$c,Zh`63QB(VAepG5,H)LA,PhppE
+fl#B3q#AXlQl`-(Bhep3NAdb@%UK3Pbm#KYS,HAXFPT,Ypr'3!(T&ZdRAhV@NDh9
+Z!*b*0Z%Z4EQ'#jZllNhdDL#bhf0mAHLB[EB'"I"(Pb)e#h4&#'9EqplI2d)h*Y*
+"Dc#,4ZlFB1!Me,pl!-)&h4T@M51)VNbllEAep4el5*J1%5K3plfp23MHpENaKA,
+Vc"YEhhH5rHZEQK4Ld[EhrTA9m80""J)P)I3&p1hhUXUij@iLAI2*,ijEDpjQ$L@
+@EDp3[B9U16Ehh*pfhjH4Fd#UVHmVerAZBe[)bD%L0I89Jm#iCbf64pDlSl'MJ8G
+IlF4&qYYf'"TI#*aUfK'MdGXAL0INlqYhT(QlZk1V`)Z"3SKBZpM4VGIlH!`X6Be
+p%#UAX0AXD'khZaSAFhHl@lpi`$ErILlPb0KES6F"KCh4E!-0f6GEdB6Mi`9f#AH
+b"Pi,ZEDA9p,$$YVU4k+,i'fQ#04lVMD[hVZhpDlqeUqA,`16XrASAHVZb*EfACD
+Z18V69Ph2PDrhV5d!3A*U'VlUE[3[hGhFfPp4,E0#0rN"kE4M@m[*$jIE`-'aSkq
+MDA@apl!ZlArpGlI9j-Mfq2Gi&hJ8*H!Ak40#@iB9DqMHhD'Lc4pic4"GeGhJ8CE
+5pUl6DkZ00ZjT-K)hHppk@Lr4XT!!a2qmS80MG@R[hFlqQ(GAFEf[CZlkqYh#e4B
+@Ufh9aNQ"#YDHqM&GF82pcNZ&bliYe)bCYh3Ph0E3ScDA[h2+pH0EP9G("Phf5'+
+4k16Gl1d-GrZm@l[U&hNi&pJA160SeSAP'5EI%0DE9V#YUlZkeH[Y-$dVZqY`ZhB
+AGY'Y*Y#j4DeF[Nj1Vp[IaVHhSC0#AI8%@IdAIp,3ceS,khS-Dbq*aFNarrDSHKk
+e,Il29l1l[X#L*0GhGeYUfdPm[9lhG@i5l5hpl!lLXD5T[[5f+0)4,*60*6MkUc(
+d2@ZJPh35k1pN'!f*GmD4EaX#hZCY$!pl!ZJMi#LAbk&hEX*-[S0I)ZrHZpR'Y-R
+!SQQ'k*J5q2MFUlplfrAp+dZbMD*Gm@EIB([aLA)5llZV5[M@pm6CdFPd5HeemX*
+1Vp'08d%jlZ32*-[(R0*@c)HhI&P`'ZM)#0hA30)E#&Nbj%Z05epZ%50qJT%4%FV
+P#,lE`4I3M'G%8ffjX-9YZ4NY+AGD+ebD!5Ei*iU+L$Vp@CmiMe%eQ(Ujhkkd4pI
+aj"Ce'%0bEH0CAdQqM@KN'SAA*Slm%`,TCXkQUl,QK,+q6#bBSFQM)k*%ZAEhcK0
+ijDFSM!8)dLJ60'F%LEFaTX[9Nq2YdE3QLD6XNcEfiN@pSkrPrN42ZjCAHqLKkkT
+&er(PQVr)N!#YdH[GaV)4kE,-R@"4Y+&56,Q3!!D8$8F@Y-@6eYf9i'3cS$*fk*R
+V!6*KpIk9bLFCk3N1[Zj&`8baUfkN4JTHfE!eT1#L@1h`J`j3LjS!fpfEZe[,d5X
+h@(EHPGf6UpArp3eqfYeTI+U'h"lGl0&%hAmQ0DA8Q0FhF[P8,Ull9&+4[@&1A@Y
++NBba[48Sj0)C[9kZK3epm`T9U6VId,Zk+KEXi1C#+XfkNb%RpeDEheU49#i9[Y%
+1),ZjPeZ0J'P[IA0r)48+lG@XU1VlLKVl5qZkdKY3PqPaU0cGhHkZc3`PcBecGAF
+X+&eDHK'[PE1Yj(V#hfpppUENhI[5c)HC*`SLP)SUZ$*C12UpCGAH[ZVZ43-Z36m
+Bi#c*I,0EfAFaU'VZV6dUd`Rd-#KNK4"rNrKZBV5MpD-dT'cFC8D"DY#EGXT)`"c
+U!M&'AJAGhj`k!P4A9GEZjNA9TGqNEVY#KJAG#EkepJ9Y[Nd0hEp&I-+YhIE[l9E
+pTQHK,B9U0'dj)NZ"fpN`XEflqdAVEFN5&LK'p+YY,F[aA0cI4VU4Fbiee0SfNXh
+`EkElYp@R%Q3P`1h[YI'ZbBm,8eKD[LG&QMr@mX,8[!lHll6GG"',M1rZrY#'$pQ
+'dfbCa&MdT&S@!Qc+``fkeM$%P[pr0#4GHk3r8KZh[U(TDmdlphrcFPmN-*(m,qX
+MAFLAbU2D5(#p3hZ"4+Bj#,d&h3NAI&fIfVUq`$HeYibLBFiijje'dpIeLN*&kA@
+cH9&,*[3(SY$GiBA'&X6JQfpHQr*4hmLrN3&2Rlk&$IN[idXc"AGhbEZKUj&TYYM
+rcUlih(SdfB@E%"U-heY@9H8EkAGC+,@aZLK1dLqGJ+,`k9d+iF,4[!"ElIHblSk
+1)LCMPVIGY*AR9(2d23bEHM3VEkY$(@h8[!`*XBY!'l0NfpS4fj@VY"4bd@VB0cU
+k2+Tll@8E34$9j-Q0jbR-bD-3L[I@QrZV+kXN"%"2@YcR'Xj$$2UQh9edAR5GATk
+2S8XNeC!!0)0`3i'"@aTTbfMA1ZFQ@FLI+eCJFSd25NAHVqeV-#kj96h('QhHVjF
+`0jN,A1Q[VR!rkrkem@lZ!"Y!c!0d'p`*YdEpVFh0cGDZll5lQHPhAS,8[,Me'PV
+cUXB'"qA9R1%ZcD#$M@cERP'Y6Xbh6qLKJb,6P@p(!Qk[HR41pkKJNlKdRPbF'U4
+4ZlASll*fZeTT(*Y0IUpIG!AZkld+h"ZpY[pR"NlDMkh*fd5MVie(!`,5hek,9h3
+Sk[9fRVmUMk'rh[[C1VbDd1'6NmUMJ'YjNdU2S#)5k*PK1FqDqQ6GfP(CfQcY2rU
+16krVC1cTC1p1S5`V8FRIdGI@dCYm&AGeTM@hi8`T@p'MI&br*j4U+j,K5VR43$+
+`NSY,B%0%Z-D0eeGA0[@p&4R8Df3BjSX@qPaVNjd0cEcHLY*"L$AY8S'66!Dd&h4
+d6ec4,kjl5kPe0E@i#"9EG@Y['*!!YcIB'RZcRH%0Z2NMG9Y(!p+q1cc)SqN9hbc
+PNPm5jZFQk1b`GD5YL8F#YTiY'LE2%XQaMAh-r3fRPr&qTZGr&Xi[5aHdLiFApXA
+rf,8jM1r&qCIB1&MHe6`dr@8qeTr0Tr4TredrX9&V8G*8DDSm#Sqj8IKU2q+MrZ0
+AaTXERSfJM6ifQMGh'`ihQa[qSh+c'HqArEUGPj(k2r+R-926e1"8rEUIc92Z99R
+9GC99@iUYh98UZVk@V`D[$Urq+ZXq&@G6@DUXm+XrC)Y*(bj'`NH()hFMd*(U52@
+NIaNHh*Vj245HYNpY*`T2hT2jT2(NeZAVFr@p2@d+hr5YheEqqVcIaEh9IDrirRA
+9h`Ulj9GheGpbZmkZr9AIpehrD!MS%2S)2S)(mBbN"(3)I33Il%%2aBILS#1J4$p
+@(r+(p-16PqIbppPrmX[k'ApU[XkrUDrYDrr#[h9Ij9IqH[pr-I#c(cmaXmar[Q2
+r-cQ-cQmceZCeqChHCieK@f&jBD5`rfX2df(X5T-ViNVV*ApdVlFVrH9`CAmjF[Q
+*I35qRPr1Pr9Pl5Aim[dCIX6*%ciFcj-ck-c@6-1C`*RmE'aceMepMfpMfra,UTZ
+BfHYp"8jqTZ8"-r8Fj8Fh8Fh8A94G9'BX*'FVmj*cPCR+V15chV+M1Cq0FaXj'[+
+VUUQjU-a9jL0R+QkU3#A0AQ+ZE8c3&J+U*GAQ+R1CbVcJ"33jc19-'F"!#m-A-92
+-"`d(391Ik+ijqTZG"'XFlFr%kA390cF90cd06cHId&4S+Mj-B!e6cYCQ+h19'BN
+JmUXaR+MQieV'!*8@%B"JM94c04Q")qE32MFc86BdfSQJCjQSci"1CM@Y2R+IU3H
+#H!Sd!%Y!6l)#)#AP6RiPa'XBeLJ*d3IK'N",QXYDQjL"qq*8hY-3YY3kS#@Y2Q!
+MCJKJML+%J*R+beBKL@i202cG4R-aF9qHVqJVmpQ,M-A#"M3-"4!3!R-mcm5[+*C
+99AbE,,bIN5@")%I39ecm+Tbr39pKAc[Lr&bqIVl$UZUXVMieKd&2mDTkQ`Yl$Rl
+$Rf!DhX,I-h#!`0VES2K`fcKA4#F1E33iJ,3KAcX`)U`,Cjd'ZTVl$UDqXc&6Af(
+-L#!$VmpRHIBQ#+%6QILFcm6QHCQFl[!$h%@iLemR-jLTq&8dpjBI'q2mH,ddDR[
+1R4B3-TlaS'c&a'kITi[aidkRkA19ebJA6p,mG)#LMQEHAm5`jr,p!P!B$l!0V34
+PqJPZ"4#21fM`)CeIH9qHV1Nq(r6cq&@d6TZl#RkQM@-"(81J44V,QM886NKL@P(
+1!-kUA4q*E6)PI6biQH[kE0`4m[m5Vl,UT3&CB&C6b&B1TPdHHYCN9S@LjZ*'Kq*
+@GP"e!&Xe-LjLQ!YI4Fh"'VN,(h#h1[!@VfKE134hX,43,GLl#eIF1'p#e"H#QVT
+XKd'EDbI!CN[3C53[!Cd8&IRRf$04""0Ne@LVqJq9mRiMi$4pRG9A0$I9X$G3mKZ
+Ubb$AcDU*cVS0jD,%M4)dZTKc-@#+&D#QJM4+Ubq9)L3C8%5*"!!1#*r6)bFV+bM
+30X-U$+b-U*%bSX5*Nr"N3C19"N34FJ'd5*NC0CNj)+-M*q"$b"mM@"$@"Seq"$-
+"VJbjH6m#-mU#)#+*%Ldd5XJ#Im#qSN#X$X,)kS6T'SN&-`*"6!QJSJ+i&!&5R!N
+!@+m"D`F#`@N&S(b&iX@QTkDSIB+j&263I"&%9JX'UL3dTiU#9JiX3%DKmK'QU)Y
+2@#Y1aR6C+#90",BLp0NL-N+DC)B('@f#V!f$"SEJJpc*6PC8%XEC`2j3'-L*PC,
+"$lL$VlKm!q9@44eb*rZXB"&m#+Hk)`0)B"lH3qNS3MU)S)d$h!T%bl4'eMN)hpL
+)R,3MH4%qJr92!HLC-'A3(4'D(BQ484)2JbDb*P1##[G#!#-'8#,+I!M#3d4S6)3
+4-L#SL42JI3IG''T3H%!F$d5$-+H"m"q+mKpN`6JG)-J+)PZJlQ96B`[1"k##Xq$
+i#RPN,A$X03#K!YJ-8d93p#I-a-cm9j&P4RTU-mCaFQ$+)9[5+jSZX@#ed+DCJT(
+5H"*&ThBR5mdqHXh"2%TPDQB*)#hAQE(SRi%FCrBK"!m#(-)3L&34(3KL`9Ed)B+
+H*9dd@)0'd64ZCG#HT3RTa1%*kH*94)P88,Y%e3mLD*!!CC3HBSp4"9-%F@)p#+#
+$,!KU)+PpJj9-$K"9i$S(#-3(&6lP2!J2jq8+iX@+K&%LSIC98mRbR"'bZamL3`,
+ZhR)&0*%93)kK`5-06S6PVJK$6%4)kY3[f+fc8JV!1KC%MPfe(T`@3)@!HUPK[F&
+8D**#V%L4ijEG-$%@$qQ6%Ldi,LE3#'56fj13!)04-aQ6"d)IP('a%b4Zki-BiNH
+VLZ$YBGN2Jfa("qbj5L#!L*m5Xb%35V$)b'N5QF)P69aED+QVq(94F[e"E)TSd6Q
+idE1CD2%Jq)AG#p5&fVVSN6ipVGak0'*dp'XLai1DUU0%"hak0C'V1KGJZVR,0ZJ
+9"rG4VBNf*Pkb*c8AQk-H#)(iA)FqY!E&jULLX+HbFq*@S(4BaqIi*UPJ@&EGKC!
+!(D&N,%#BY3`@),$#dm%@5c&)l#c!UJXQ1B&DCd+fKCK#&iTLM'QUd&BNH*69&Li
+&)(X+9-&0QB+D5M2@a+E1dDTS3#E6!4TqCSbDDa'3!+UQNep2DdIM*4!a5))+iS[
+J,ai!eMVc"A%!0S'J-"-&A"6GC""GXcKZNB"[mi)-f`2@,+d'Vd!Q0"&bd&0$"%V
+S)T@pA*!!-#88"1@JTfJE,X!aIqbm&2cX%(`i+BTh,J)HkL#)C#@!B*d5BLl%!m!
+CKT3H*C@d&5!20`9GC""*JNLe569L3'M&(&8U2ULRJV4M)m%JDHTJ*MaX*)"Sm&B
+B+Bm&13j!IB344)Q)E"meN!!cRi),L#RqM%Jr[k#*Ea)Pa%LCk*%cm5*mq',@4kL
+QJT[L`4ED##fJX"0!Zrl33Hr642r)Y0qZ#*eX%'"'Jmm@(FIqI"qfafYVp2q8&0[
+-Y%bYGb0$MarJrqc@6V2"mFe$Z0NC@6f*U%j'-!Ahq0PC9(+b[CbZ1!`#J$-M+bZ
+2bXSH(*!!9D()p`re6NJ9iR`FIeqANjAFF[+pA+m[p@0aqAqcMHEPCA&irPihErX
+b[(ihXj@9b[0q$amUM4prP,9RjB-qAPFBqKJ"[(bJfGIMGLM(M8HA`k'0amVpReI
+jC@0li*2(b[GlMXHAl[F8IIb[XjA'b1kiq6PHVr+Mf2+bZ24b[JaXS)&%rd2lJ4r
+BbZ0Nj(,bXVMFVPj@6MC2,bZAMC@RSj(QqDNZpM*3'rF"l+jAZJ&bU2l-VPmX2I(
+,G#JrlQ4hAp-E*!lb[5bFV'qJNNSi`'IHSJ&pr+SK9l(ML3d44"&dS+9!(3%H1"*
++ebZ9i!2D2%%+mYJNG$i'Rj`3C@Rik#hPJ+miKVlQ9MBhMJK!Rbq9PFE'mlhH8#A
+pCRc!Cib+Q9m(,)4j(RGIaaG`MF[*%l&jB(1*N!#BcpKH#446i8H2NHapmd*XVMr
+lC!,rBpK&[PC9%&h,Sj9(MC0&3ZbI[j4!VaaG!BC5)[,rZmIh!JF0L&#"qUL(NC@
+0jA'h@9a[0%R)6mB9e$j)2rFN!r(P8ICih+rL"6aaQ#EhM*Q")3LNc16a2lXV)),
+mT*Q$[90QS&Rph*mcfmVMkcq9'J"V')M)C"@iR50+f5&Ep@9PIIp['rB*SR&bXMb
+q2aXBJ&amMbq-,9lH6ZZ0qc+pd5QMN!#L'S+j(fIl1ab[r1kdrXIYbY1JQMB3)q$
+br+aXVL%p((b[l2pY$bXRMpL$)j9H5#6d8HH0bmV6jAp-VPHpPI,)kC2'Sj2mQT8
+Nhr"r,mf9lrRHAr6p@4kZ9brC8J&[JIqHENFB,Q0P8IIpckJQIUkbMP&0hYqEapC
+q`BlL%[FMMD()jA''ej@9br(bFBS,b%EI[H2cq9jJ81*braif6a1hrN-F'IZ[GjA
++"8&['b1jmR+bIarjpeMC@X($eR&jAM$N%crZLXmIcZ2PIMjBU2UmEZU2+SmG4%b
+I[qGMC2[j2+rTaZAZXV*iP(Md3iJkmlLN"e"VMHrlQXb[CirP+@'3!$&%r+4G448
+hA+4SjIirC+VQ8KC2,m[pR+bZai[[kF)f6qUMbbfB,9aZkme8[NaIRHjl2YjAUrX
+SIYiQRbU*$AP*U'P4!V*rPNCA(b5G[P8FJIjb9I'l(Lj&(@Iqq@%63r,b[-"5)9j
+f9V%P3&1kjIUmE*rMq2jhSm5MbdNJ9fd,L**Y28r(aU19r,+b8kr%bLYI+jI(rCb
+XEXH,jK$$*ihbmMKMfJSjA,ih&9+S(q2fp(Pq0r,Y2lXE)8e2&5#L5JRiq0aXMYk
+2Aj2X"-jA%p)$[[qEr,PmEaqAqcjB+[B,EKHB9eE@HD)@a(ZkpRMj@UlVql)m[+a
+J[M%+LrMmVMjA+iIAH0PGYabXl)pF'I,iZ0j[[m[rE8mY)VV#h9bXVdK&IaL+m[+
+SC('l(k[ibm&jIZm93D)5K(+T10q2+rCNqabZ2NFVPqN3mjAQdGClR+qKr,eq+@Y
+q9Nq9N!"9b4FmhLL2FEmI+pRMqaeqKb-Vf10l(r5Ih)eM+mmUMNEV+aZ9p8R#dl+
+j0Cqci-EXG9PHESD19l[,if6pK6d84)Ij8GC4irUm[PG[b[aJSjI4DcSU2MQ"V+m
+IqcPHEPH1,eq-[KH`8++eL3XlR+qcr)XmmIMjARFE6jAlJ-&rA+mhfI,jAPj14aX
+EZZAV&@rj(Eq4frZFI+l(+pcqA&j@0lJZ[l#Zc6+S%HdHrLrVSqPlR+Sm3REbY2V
+&$lPVN!#H10)14fr(if6a9J$b2aj(RC2QUDVrBTk!9MHqAZ'AXQ81Bf9bbaRPHVP
+DIX3+qDahf5'mhfIFjAPjA,jA(ihFN5&e#Hh&6ii$&3rNIX,ArdPH"CCX8pFXcLQ
+hmLLVh5TmcS5`S5PAF#h!U5Z9h2,qfA&qAbZ+@U3)U"jJlj4-[a9'*5jaU2(bIaX
+F0N[q2PFEf-Vf8@"J-RMd4,Z2bU2&'K)@IVG*GN#AD(Pj(,ibJ&4*%,'%MRULcAe
+5p!k,jM,ik[%+MJ`HETL!j)4D('e6Pr5Lh,*MC((C(ceqh#RfrMrLbH0aq+&clq4
+p$i1[jA,Sj2,r5"lXFEqA,m`(lCrJVLVPTrk#5hMjAY%p3SI'b"k!kqaPCApH8-M
+aZ8X"[[jAebj`8#SEqEPFAcZkeRQj2MmIf19N8E)dB-DMqcP#HT*NR"Mbiq6j['b
+U#)h,b[Dmh+ihqb,9'Ml$'+prPH[h@X,LKR['FMak0(pRmK&qhaL&I+CI6jI'rPN
+j2'SIX,1qAPHEir,0-*N1NYi+Qe`mC@JU19qc)SV6XpJcT&HIb+(`FIak2,iqS3[
+b24&DSBa-BVPH8D8B-FM*aK1H2brS%l5S((l'-$8XiiU,+PZAPBfR08X-rBP5)Na
+T'X[%CA5Ibih,9dF&rEKfl(af6HY6`cqZ0fkH36cVmVbXEf0B9UH@BU9H8,Lf0a#
+Fp0XS(C!!TX3N-baXMkXrI+bZK,C,ClFEpR(p,arf-c"IX&N&BrPqRmBL2mLXJNj
+f2[m6MHi1@h)*la@4aLLbJP%ia(%6)K!@p&5@Cq45Zd`mEq@9krl2j)'r"lq3!&T
+NBrZ0-D3h[jAqrPPX2MCAqr+b01bp)AK&UBFIrc+*LZ2a[aNU+16l+*a8BQqCTdX
+c*ifN+V3&TY"PK0mDLBX[jC10qaA[@E2H0bk0(PmV)iaLfiL4EMCAG,Da"lqc+pY
+Cp)2IA-1*(AMUX`Q49-RTIYr'Q"qqJD-#6#-,C06ar0+c@EE+LX6*'0)YBV3(bPR
+F&fZL%P)$qp8a!ep*6%QZrf,ME"rb2-@5!Y`)*FEqAZ&`IPM!jAmZ8CiDBjQa,aM
+&M4#@)8kS*bZ1Y@0*6q*()YpD&8"r9m[ZQU8Rjj4JqbXVZ-MSQlQKZ0M&UJc)b1)
+Q)%L!cfR'-K!A3M'fHUX!1-c2(SE0+$Lq[rdSej(hr9paZlkRGih%CQ5rS'$MFVM
+FVVK4f"ePXVMqb)JfpFB9FV+dh,iq4ap2bbicM#M"U)b-2Q9aM"ePFV@Ip"&"RjI
+%*"*E%h9(6UY('-A*R68ITGH9YS1mVfH9ii'FEc'lBr[+EmeU2aPZ$f-V@FBJ!fS
+`K24ik`1-f30CreN"LbXSd4'BQ%PBUAMmV+mdeYc41jIFra*R&G4bIJirFV&(q2a
+e`fT$Q3-pTF)[PjA(SHrlKAQaCeCDcD`+m90`DXlc!!L+)MkUN!#8IGbK[2B4HbN
+ALBCKHC0fjbUQ+GMH2f2ihM0)cQ#N4QE+'4M($ih"XYilbMERmeNAI5bH0lrMrXp
+l'&JbXRYr0lSZ!qVqc*pGQZ3fdam'5Z+RMmEpRMQfNXj2MmShB6CbB`6*j9VAYab
+,*Ma-V6m[P%JFJCrLCAADF,SPh`FIk[(aXVfICB66@,E#MecP3#$d-Rc90@c5A-r
+TEQ13!*!!4+mj55Z$P``I"MFFb,LJFIMDI)kl'q$M(190`(3qFkEJ4$dR"m'hh6,
+(k[,@5Aq4SeFGKJC*KZJSEN,,5)fDR'Ea4qlPFrbZ2a%5[jBh'praXVhXBaKjAqI
+rU[3HVkY%[e-jRV,08#[,SC3CbDA+@Elc'60Y3&CfJ)I1#hlr+FJ(l2'ph+j4MIb
+-VKmBYQ&`,mBl25F4)6q2mCZe!qFC(MdI9jH9q-4RZ#kjPHjS3*rf+U#Lj-H!@J@
+2TeM4NbU$$UEi[%b6S)PA"X)'M4b[dPX-F-j`H9Nqb`GpbPQ86r0lIZKSc"IZPc1
+J6LN-Y"YJ"lT!$G-fi5%cZ!(+0P4F65im2F#mN!!R)!,JZb[J3&@H$b[&mibC&'E
+&G1,CCd*RbX34QGkD5q0NR-,bI(jA,pp9i'FpNq`FNb44F-CYHqh4)cCASXkIr+0
+9mNCamJkS[mH2jhl-R)pmYUpZ(aQRiLfa8%[rUmIYFJ)@-*TejALVDQ9NIEbZfa[
+(jI+8BLLDKl)hk,hXYkVUZf'(!dZIAmCdAZ1LmTKc2Q"Qb[CE#R(eQk-hTceFMh#
+r[a'8TD6+pAarjIb)C&Z`Z((5LCJcp9QV,bU1-YRa29aZANBhYrXihGH2NF[h$6G
+ED1A!2f2eH-"!h*&JU0Y2pLkphXFYDj!!e`29hAh[fHjNH18)R(eZXR)1ZJ&cMIM
+ih,q@'Nd9-Mh@5Z#"jH5@lqL9%IXUmdS3j'9qlPrf0GlmHkCTMXcVZ0PI90!Jj@k
+J*l[mmMjf0irlP%cLP&Iip8UDPKYlV+r)TEPa2MGS,3bD1MlQ0jaRKXiAQGFIcH2
+p9E4j4%&Ee6JB5&UR[MjAP*j2GC1ckAPmVq[cZ2aqfE1Ra-R)b&Rm-kcI(iK`pQ"
+RMR5B4i@XKNDGG[XJ5Z%YP()AefL@'Ep"e#1-6pqkafc"36@XJ9bXMf2eih,jIUX
+km[N#L'N%CCmRP&ZcPDF`EMSV,pMH`6$"6eQ9qYR4%-jjc1$--L[jDI+k"DVjT"m
+4"PFfXi8@@lmEfG*j40BV3CVJmI+dkj-MV0V*[qcP'-,PpHGDKB`&cb3)$('3!,d
+p%fkNZ10306cPHq(`MAaXNjZ,0*S6-cPPK4GCqhPp&a#D"KdirXV5V!`ZlS`1T9c
+0'jS5SQVKm+&a2@iHII&Ziq4NFVX2p[UkcYqh5A(H(3riS+Pc`d+29m[3SUq3!&V
+4@bH2lD3!R9ChDFEMmEpil(`HrM"B%l-BHQ!djMBb"!10bq*T[)rVrAfhXN"Z-Gm
+$PFIcI()$Xcq%pG(cQAPFVE-cPLD-M6lS#1LjABj2+klPqDYQVMj&%A*ZLNe'QF5
+bQ19TcPI[c2qZr-C*V%$AGcbrh*(2FbMP2XU$Sj!!bkDV94VSjA,pcbqk(YbD16i
+j`&H2lTlcaZbrLl%p`(XD2GFI@F&4#jI,rVp$kY(+iIpf9h5d"[MFFjk*FM8cJM[
+l0BcLkC-q!3X$bFRLHGaqa0PMh$BlrL9C(Ifmlh[dC'9ibe!'APXRPF2qaG,mc"C
+@9q,prQj2F'k'NBADM+C'Fi"Fc-Nhj5+A'miT-b-T&)0h`&@r(S,i%Q3jrL[FCj5
+j9$+Y$%mY0$PQVfYK&QKqJljCfK[I0eG0MNH-G,XTQ8kUjcZ6PIMihMra1GL-*r(
+PIVpbMp)%Y(h0CV1j@Pk*[qcbr,mCQE3hq%#6KUbIGB%M0V4kj5QrCP819lRBXk(
+r+-jP$EYmR)0[`3,f9aZGZFRK"%'K4cN,0ANBhicAkBGM3S9U23qDB@IA#,iUi`P
+Pk1(RMHPPGGed'CkldfIPreekcbSRh(@[AGGmk#$AFa"cCj0l9Rj$pF[aLVTdkpA
+iBcN$$m3BXiqdkG6`3J2bqPqp"QCd'ZJe`-[MI(JLGF#@mq2mFqMFqPXqlb$138r
+6`a,bH$q*Z)+Q*mhA,b'`3IHYB1Fr`2SScRTeelHe%'BVNFE8$1VMAmcVJ'6qZJT
+l@'dpQP"%K`U80KIfA`rCpRmIiralZ$UmAmI9rEmlmIir*[21pRfICqhp[prarNA
+Ii`CIJcI-Fac'GklVS3qkD0MVr9S"iqlk&d#I"!6fFE(dap390T*d&6HirF9Gp1J
+lD$23FM3GR'[IU`D#pr26CE64ZcUllJHT6`E#6p@4ee0D`9hE@[E@ZJl1(85IU`H
+lHeH(lZ2T*hkVf[hFk61e-Lpm',"HDlmYVi1lr`TV,,@XHqYHK4#TVA8`imk4MiZ
+hpbV[G9@8mZ0HkqGpqQhF&h(rXUEh!k1VhI53!02"le02b`(ir18mZ2YrfBrhkZG
+YkDGdFQefp#Yf9AE9dk09`jDT[EI8BHTXiq2dG01m+2MeHlk,EqT94mIq%lZiI6R
+4lk(HFMA8hc,h@9fITY[RkZG3JmD1`380P8cl1RJlCJKUj9Uq`Ke1bNe0l1TY*8c
+q"PMlPYC(a3pddlT%Bl5,hD%AM0%9lkNfpj%%1lk5ZcmI(cm5pY4*Di55QkDep2Z
+kH$2qj*aH")JLCLQYSpl3UXa66SpkHHY#'FK"R[8D)+l29e[h&966UDppb$!MhVS
+2q(X'"q2H`deY9aN)*-iBKSJedkVPfZ`QhZmJcd5Ze-5Zm'ZNE[Ejq,9ddlSDQeT
+K*-qb%f*ieA2#*6@X00YiDZI"9S5`CqQGL5ZR42'N-%06@[)KUh3K'XLH0PN)EbZ
+m1R"&@3H-)ARiG9$`lq[kc&Vm+Acmq[frZ3i(hj1lpb4DhhZ3!1qKiN1bKlf9Ip*
+dF[jpj0YU636QX@fc@,DfrjkD4Zm50DpN!-!C$ff#$id1qU[#be#(L%a8-D(2m5(
+L38LJ+$fSh0EH[frEAZqM@[q'@fmLVT@Hleh)f8QGpqYJce2$$dF2#VlD9H@&62a
+qbbp6IIIXEbcaE1fZ,1pfr,UIYD2a,b92lck[EI,`[rr4q*fF2kkEXiHmYTYpp5(
+3AQNdRPkDArEIHYp@9fF1QKpk(HjV#lcm28k2IEfrdh4k"J*lE#YJ"fm2jHcNr9M
+hhkphff@qV8r8UIU)#92e)2GT6C0Eb),(63fplEEbmef&E`aCY2,qT$"DkkfKr,j
+RCbiBq,iRCbkAEG6T1`i0ITSIU6IUFM59[jHcPaVr-@'Qd(PpRl`G[%qChhe5hIq
+AXkr5B@Jl+'#QqT(U+r6GY2rAIk$XUD*CkD#YKdP4iPrfh@4kMa-I!U+qXc@MUDb
+cdeRT,f$IcplBEIKereBH6lYpIlbEIG02c-+9([*prU)HNVrUe--l892e09KhPR9
+H*0[q$B8V#PqZfjI[99I@k6j'NdRdp*l[lp*TG*QY0qAM`ql$93iH,Ce&Gl[eIeh
+fN[2GY[%KhNrA5p(`SFp,dA8I9Ql$a+9MMl$#Qjq(l9YRpl,q&BD6k[M#pr`S@2B
+9pYV0lQ1(Q*YhaHpjIjHFrdpMq'0q6q[5DLadQSViNh56[Gar%dH@deAT,hZ,Z4f
+-MX8"*(BLpB(TmH#*qZrVkK,P99j%(HARHB@B5pDqEpAa,cAefX'BchHD2r1IX+@
+Ih[jGe'[[jk5mefNV,$6E2eqcaGC[E2c2p-HF'+md(e+r5@eG"hPpJ6qmZFApHQV
+rBR@m2*FAEa[6`2LD52"2p2bp*1j',q[eqbcmQUN@fNVp*)Y[%TGYSrG[j@NqM%q
+eDr*YTZ,APe2JcIUk$4k`KTTKHqNNGMd1(h%2TprIrD[1lcmV&m,8[`[9rQVqZ`V
+'XKp1I@0ARe1"0U*F5jdHB#0Iq[Sq$[r-[iEbG2i0T$dQTPrefeQ,e`HllcmYE$$
+LDrSI$e(JkVZjRII(jZE[ImFrdZ`f(U5rL-RZUVIBIR3%Um@*kN6e%")RU3jE65e
+2I$f6lVVXV1HlADrKa#Hrc,EHdZlm&fZpV2dP,Y[Rr-qI2c'pfldZh$pU(!Rm2me
+jq[65rNlHhPBA!KJT@&prAT*Ia)pCB@Z"89hQIK`T42GYBC%q91r2h(Kq0kN1qXr
+K9rmHIdN2hr'hQTk5(8pl$qH(24m@A$pr[GpQ)I"Xp[Vma9cX,AiG,NNqfXePPdR
+KphFF(U2@aY[K@rlqcdQNdRHDI6D65H*Iqlr26D5(hCljRhj2HfF5A%rKhYS,r$b
+CF[VqD[0lAiX1SPpIH@0Y5i253phdGM5XEEh-(CB0R$hGMEG*FG*FCkmSIeiRUb[
+r2'i1HXkqfVllciq,b,'GV-e%m+62r968[#KZl'mVh!1!HQ[l1PLGY2jB"[q)H,B
+AQDmMXT@Mlb(%c&RHH*2r2,`XQ(3@FER0($jrEBVJ0YXa'YHlQ`kl4k#(Kc+DmQ`
+m'[[1*-cH,D@GILhq$a,2&iQ$bl$2`qjpqAHHlf8U(Jkr`4,1XVTheC8LGiQ,QXH
+$Ebphra%qp5Xk8hjG0If0jhX0A,T@PMS,EPf&+aKi&aaE'(YZ[q2Cc[Uk#flDH)e
+,PApMIjV&riKlEXCpGl81XNrPkEbqEVm@EEEfam[&dF2HjMHI5`ZNe-1Xi82RYEV
+U2mjH,H5jmQ91fY0HA(H3!2p,1friPAqDmbfpIVqTXEEaTRJmM#Xr,Vm,Sl2&hdh
+QUr#iNffX*9KIjV4`j00f96I41A$aEIV)Im*@&GfF(L5ZXjUmf82M%**GYc9,Alh
+`BDrqbacH,`HlKPAP,`D&IH9q,[CPMLi8ZIi0ILkQ9HDM0Fe2rdXpIl@UXEc,`jH
+(!iP02iF5J`#a,(U*pMHAF2K9p*`$S$e82Y9q&B3lkAHG(0aCGjSiGpEhqeKk19E
+IIXD9REH&0aC@&YFYAbEE4`Z!b'KPVhAjU(K`mQJa`*FfcRjqAEGIHBAhiG6$-Pf
+f`Pff&kPIH6DqmmDcdQ,-)b9q,dQTc'[j%k(Sj1llDI0YDUULCqT!FCbA6F12$hY
+MH9e#a[,59kd1qQhPIKCU9mqmk1-)&)cFD(a61lc8rDP-mlZ+DIQVD[YIqZcm%01
+qKi1`Kj(U%kj-p+mfmXlb[Y5K#bKm+fT5iF19ZpV9f`B2cbmAI3`m$ZjP`@"6qlf
+q%)l3P8YKCcq(-B"iCM'liNDQfqQLEk(C@r8dUqmcm1&VSpIeQEaI#'liN!$dC6(
+D5lcJq($BkQ[mbfl[J``q[HG)0l5e-f(#mDCPbRU9H@N0,,cI`CQ[Z2ljYY2ciN-
+ffP5GhL5l@(EX!X25CH(B3L!c(!1J2A3hlY[jmZmNC[([qpKk1[KlLa-r626GhHE
+@*Ekq`RepYqHRPikEZ%EVHf3h9A5%5lZ9HE#`KpHPG`fMTZpJeZj@N["'-hKDQ9d
+f,i@[hNkPAlIL4lldkU2@5XIC9X2,Z*Gj-kEB4iH(+T9eji8V#c&f0'QpPmfQpRp
+`N!#jCSe3qTCJ'i9A1e%2Y3jk6q[UIQBT"V#iI$Kj(!c@NXEcZiDpfhfSQhPhE8V
+1(TTm1XUFIZiCCK*m+E%KerF&&qUcA$IkEr#PAdffPp06l@(@@1,$VSpMj[1$Il*
+jErA`P-CFQXbcf9e&,2kQ'NUI2Xcr'YXr+T6)F+`RrRi&K2k#PYHpQrNRk1[pQ(B
+@JdQ"a)PMZlDZKmD,$@NH3k!$D"J"cBRF&"0r0YYPAi96HBqqk50,Req&%m'(e*8
+rL42[a-#(h)G9ClZaaiHM'p`TYYCpIE6HDBh[0cma,YSHq[,ZdKG0lic@pMhNc9@
+2N8V59r(&m,[CYl1[,((iNDIA3B'UKfqb%%iJhe$iZl`CY9$%'mX4SGN)0CXEZqN
+C[GhpRE$GH00,NfbUl@(J3q(*iR"m+'(I8*IdBFePTrZr8XEcJ`er0iXXckFp$iH
+UXlESlD'9jGY$V+ZGkFZI0YVZZKK`BE3ZFEeq@fXX5[RfHl[ZMKlKP1[hiSpGM9*
+YEE2MDqT0VkAMCU(#lfcqP+Rq0+pJf6H,$idVek@I*0YEAT,BF#%VFHfd[,(QM%f
+8m3VE1hM!0[C9j+T%"160RjT`$X!plBdR92PGXXa)cGVIklSklJH'r6G5KZTI06m
+[JIIKlfckhB3hQ`KVlbK3I6Fa*QUVr))PprECp0aLbmILCDfVVq9(TS0P$dN2HpY
+$XUrTXr(Kj%2)XEcZ)I"$k)*JrRf9IYlrYT&l[Xp'$V[X[$GjSF$C33qRKrmml,k
+YMFFr$QSd-,'hjbfX@Y[d-[&e8-1Xbm0IZqNJhZZhdV#L3ejT18V#(i*P9$X"VU%
+ZfiGR2`N"iBIXfdUfBfe"0YKrILfFqcrVfmHAq(B&HdZmXlEHhGMLmQC,aH(+Y["
+KpJ6,C#5$EG*#bj6F9mqJ@q)4IIb3!1M`ZJ[0VX'!R2`q$U38P08UN6-6i@JIT)H
+iKc8LH9d-!XLI`)RK200Zlhh3aUlSkle-2e+qI`UbafmUq,8A3fFl&m@)F(X3YS`
+pld-2096@b'PXF@KUAECCpdf9aAp0H3c0KAp6EF#RL`l+6ZrD1#l!d&A)U61GPq@
+A"I'S4iFXQbZ,%CIljMH`Z@Qb`28NCZp[me)jUI+`M(c,aiPGV[hG#aX"5)H4IpX
+0K[CX2Jp$$d-1HUlDacF2K5Tm0IEBTS8fSpm*6,FP$@&$QZ5r,Aci@YIUBT(lj0A
+YlEHE#hMLIm1[,,RLQ5Im@ff%2q81I`LpKX)IXdXricMAbTmbf!@)(qIHf(B9qIP
+r`YQ!QmVmhH(&)8cGa$EqT#`$%8iDle+le%"+le*YU9Y1kAGC)jbp[kE#Nmh*YVL
+A1YZML@%5EE9m1bLeqhKbelAhPP$if(j$`e%h[CAV'S`ie*MSFDN#aGccjd)Ta"M
+L5-@ZlD(YUDqNAUdB[$+A*IPlI"lL42pb*i9I$iF1qVm)dTXeq&A&C0V[[$M3b-f
+09IEkaai*-6B$6CmDENbVr3$6`m'a[@Y(pq9Si6B[Kce9&N@eJ0&Vl1m,9"Se2m0
+$V)mmT4-)NrNGkm0&`dR#J2`l(`GBrq0&LeqEa@0&%VZpK!*,YV(HbY[h[F92PX!
+ZhlfEZl1fH'Ke%MR&5AhVp0"BiYP$RkbkL#%FhE%"BIrqfSCq(H`i3c`$U3$-rBl
+Z([S3,3m0P*&4$qH6Zq&$(dGIID#$e+N[*f2AP*2U9f$GbEEfSRKCU($heHCD(+5
+1p$r+fqqYqfN@hhi)26`YK$Vj[pGjLCV03i1JKY[#(em1QYI"Km'YKdF0TBfd0ID
+d+b4ECSc'kq@rmCbQ+b@-j9p4I4l1ff(!VlbBp-jj(a,E0-eMGp$3VqTaFdaQSqh
+bdLI0RcBIJK6,l#E[FcKG*$U!"PZH#'TaDi!R$KiH[k1TkEEl*J&k1T[2ca1!m@i
+HSYGpKP'eA1p5'aT5TkX3-Td2hiG9+LCV,AX[&c%0fp-[[TAmEbE2FSfQ1U0SrIA
+QDbh!'@hNif1q**[+lYTqJbel*Y9HEk%SeQmj5[X(lmR&FCH8m-[i3bpIMll,$,p
+(&XkqP%hRTiAJXC[aBErNbUrkXUHQFlYM193cQTXCm'ITj&Y0Y8V8Zmc85'ZIM*l
+UMGDCTC@V'DKe@"prYS-(e*I1QGIK@FmLGLNA6!"iBj&!UFiDCQfQ[KQH6[HiQ@2
+6ARUE$06C@&KH0$U!"M14Bd06HCG!8Cl`lZVkE(m*J&ZkZmmplCil3"4Rpq6E1-N
+DCq+ie1mp`VI[*@2eNmYR[$2BYQkCi5PP'QhlM2`lci)6P!FLGb2DNl[D`fV@HhH
+b06TM2I-aH4Jq&8i[,DcbfVqMQXdU+[(hc'H61jViPI%j"#@fP`m$C@1&BCU'id&
+YF&YEKbkDem1(24,#I+aI$Ylh2`kPM2&)TD+IYRVJT4ap"ZqMKe"@,,RB0I+fphB
+AUSjhViSjVr`r5@G8EP8q95cq`KhUdQG[Yj%NcZl1&-Vi@IXqEYQ04LbZFaC5YS@
+YrAE+&!@E8j[R-Ilrhk[q,!,MrIQiqDTRGY$95,8SkY5ZeqQGiF-lEpB6"l"c"MC
+ck#QPFYSYSkKm+(EppH6C!QZ`c92PXYHm5V`Y46El0A[Y3F5T[*GYAUfMlQ@[F(C
+90jr5*i8fHAlCj4h`f8GhBJ2K5,AHEk[fpYe2AhZD@9PM1eq&fc'Ga"RI8DcZ@+1
+ZNPree&ALMR`m5*!!d["*p0j+`Rm-pS,lmT4jHUMb2$FG(6B@MV%ch*VeLHG8HpK
+ApBYDMYU9Mp@(pFr08+rV,DEp&8J98'miF2U(##C2m,[Fr0qIE-"-8hAbMh,3eGj
+Pd"GjX1NH'Fqr9dXH`G-pC926-Slbp0Yr8K-FFD+)8A2LPZh[VDc[IFLF#9Mdjbj
+P4hcV'IdFVq"a(Z8H$1XD$Hc+V2Qb4q98I8q@M5GhiXUpZVBm0p5bMh9&(ZDN-Cq
+GBhR!VYp$lK4h,%"M5UEElk0,REk4)YX'9erVFd-rA[E2kJb)LqHRRUQIAlXfhl'
+fl[AA[M3p%QIhF0#aaE(&,34aG2`d---R5BXVqfek1(9-T!lD'iZiq&l89q@M[$F
+(PDD(a-@cdF2+TCre)H!bN!$,F0RE@C`98YlRjN[0hQpf!eYiaT-eIF52HqjAIIP
+)#jUTm[UCh4l+Qqd`#cZMQ4$$HffrZpPd,D3m"r$5FQ9MmQ9r#fE5*`+Pp0,Cr-D
+d["ACLRcEmT&Q8q@KlD6ZlLhDdXjM5f%1bX*&VJm3QKDdTSkQ)JD51)"XT&VkCBM
+UY9rqe1AJKZcE3emdF''),0i4dJ+jM3ml2Rf-rZpP$HDl[BHiN@eRdT6Eia5&`#l
+)r14V#KPb1&$i@PR1QM[iI[ameDkKaSV,N[rE4r-[0lid`!d[QU5"1ljcGmjT*1l
+e@@ReG*J&UmAq$dd9GJ1QKYGPEUNA94bh(F9mDIPc[m3l@&`'HSFkcSj',+rXf"I
+#YZ(,q*1,E(kjp$[5A6PZEZf@"iZBm'(EZU4qDaja8*(XC1,[T'lICSG[BQN"[SI
+c[63m4M3hmVjQCY(YSB'-r$,dPUQLaCAdVDI,'MPARTl#'C)YTEbdIM2iD16K@I-
+pa6B9Hbh4'KXFI"r2([6*,cjLmjejX'`Xr5IfdIcmAHqT-c9Ie'&X2#QfGYKHr1j
+bGm4m0*HF+Qi9-J*`UD`MZVFqAUHQ9)AfEhYX[Cfd1$AHj+RXX$KP3jDIUSGKPVh
+#VjNQfH'MdDb62KT0JeT0CRRKT1FR6SEIL4lmD55aT1pBdJfmhGq,A0D2L1fM[Yp
+'Xph[T*Bh$FA&r$A4$i0Eb&V4hM,FN!$hRC8eVhBh1Ulh-`m%mbHXVL'm)dRrk'(
+QUAQ0YefGXr9ZZP,Rd1*$`#ZL[9F1bM6bNhmp-rE6[hBI"b1!3`,%2FQcCq&Ap05
+f(HS%q&8H&8Id)+ZlGPGcPja)r%MS#F51r$6ApYkMM0-eifYM,YIFMM690YAc2'K
+mff%ef(H8RfX4X@Y0RYBm00cHlClYZM666QY0JZ00Dp'00hSda8+eTSd0XaTkPV6
+`UMiT-K%Ibd2Tkb(`Zi"qkT,Vl(&k@'(BH0+aBj1klDMR'Y4B2eT**U-ra0lQV!c
+49mFl$XZGlJeYR1YfY6+qP2H@TmM&Ih5K$k%2IdXra$mBJ%raRH&'kpjT0pH(8II
+QrRMrfl[YQ!AmmHrpb%d)R'YKf9aUMYXAm24kU-U9X$,9%2TiYM@X"2MCDpS3R,Z
+Z2'KjYM9q)S&[KUkpV9R8ZGYAcpl1K242Sj0ja+PV9aMYSm)[Sh&meUGUp06$B6E
+909A9m,+6j@%BQ+rkQ@28KBp4K5m9h5KBp4q#dK1cRV+l8&$GKF6EDah!eAVZ09r
+Jr695MLUm,LF#'r@h6Efj0,PTpR1dI#UecP#ac9&b0hBjPp"E2deAI4BI6[*[S`r
+BaG!HBJ"(QBrhipqp8Qi-VqZPa(TTIDH'Pe81bP(30X)DpP+YG95)0GE9p2"Ypj9
+l[h+DmK0@DaaFZ-E`jHEdMlfmqMDd@`S3pmkbGDkG$Y6fPUPdd*I1FD(4QM3QLqq
+id9ISidpiD20D3pl"8QqTfbT0d'hj0GiEUNhR+a8Q`hHXYU81`MP*K&I4,hD)CAA
+q[rA@3lc&IUaI2`q0,mhcHD`Vre%d"6l1pU(K4[RimHALTRqKp4jCr9G)rG[+hYV
+1$mYYBApIp5([,bEf81NVmHlTMGDH+4-+[VkAk(E1J&13!0flQ6Rl*ijRUN3CLTL
+`fmiDIc*hZ9Gj$b0NES1UmC0"ED5Hqc3,Nk%LlZdH'Jl`X61j[qG0$MTSI#bcTSI
+F'Km)D%h@'0$QY)EXVTSVlI3qlIc)H$A4*Ibckq@dMhfZ649fZR+N59kpYH3q-aR
+jm2YZ-rkakB0jK2ebD10"Qk5qN@!Sq0-kGSpV"JpkVFjj`hLh2pRjMpk6AIAPK5c
+40[kN2kiH()RGP$S+REqI'YZMTY[iViD5aVk6hES2QSIHN!$fr*+3!,4ehjl'TTD
+L'iB#SZIbelV[`iX1mT&hRq[&9ZQEf6kYdlITQqF#IK6-qBb@fkY[1KiLDHPXUYM
+6rIbdmkQNl"pUQ*N2#XEb4E9l`dqDG029r[+5VCG*L#([E!bK+aDqp000D901bNE
+Z1Kc&T$ie-aTl,0A%df$iG93Z2%2PfhXh,2de2M3jqcq*q(c+9qI0`ie1lpcaB-(
+aPdaAYUEM2Xm+$R1Qp4[1QH'Qi0RHlcEjqTYGjK9p08dRUh,h%0I5hdEI4N"$("H
+@,UN2Ebla-r$I(KQXV1fbdq6LMUV*PAF5ZcFlh+QXf&`I5d9(q%bNE3BT4a`hRNr
+-(LT%iF`mRTbc@Fk1RL(J5Nc[[bjhQEG-liXKV1qj(QiV@GP@,iCf'rpU4DrI2$`
+B(``&)drqPN-riZ@Kjq"-rQ+YYZ@CLDc8`q&6@bCr,jU[*M[&XBDq'PiCB6$[0kr
+0K"lrY,IF6CIIX*GjAlG@jrcQCGfd%*&PeERrVVr1ITS,4AI1'mXr+dFI4`l@9*R
+1k42@`SHMY2DMGP'l*!50mpqQLpTp0%9KBrY3F1i'0KQd+mAXT#KiLjc0Xmp-D+m
+Y)8LEcp"5$DcS652fYU0,Qf0,S*0YX[&UFI"dDPrBhQET'SCrKAlF3'qpUb+9E$0
+&)'k-f)$'8JkrJrm,R1H,PTA1hY@XPmjQNV$$U0C$GTSU-r9CVjJd9aL3!0aD@,+
+3!'3r9)2H`hFhkAQG6HAjmakT"VKSIc`qeEal'mAJK%kH2DS1r3llSjB-cZMjq%q
+ZIHfCeaH()UUDGX*&9$ff2fe+c[-$chLN2ScQqFHedPVT%",A4rIKm9eEMLE+(8'
+9*M4CLcYYhl9G`UlaDqI+[l,,@dQm+[SeV)qB(''cGY(i4[H[E4`kTm0*b2J2B50
+*l8LGX+[#qr&k1!j2+rXkPfdQbFD64YT*beXHYc%BdRq3!0%8d(mMM5GhqAS6iPE
+(EmRSH(@TTI,G0,RZNKYmpADLAlPI2pcSCXq[XCpL8M(G*KhR!IQNDcYT@&`1*i@
+bX$lU950H4,2&QiZDcF'$RjIa$eaq%mq#`aic0lAp8G+6rrYTJdq+GD!rh2HGa52
+LI1+HDj54Yp*Hk5I`T@@ahZNI8[&)rpH%pdMPG1*B41Mbar5QAN@e6H8f&Ehl!6$
+d2F4rUaT&HA42b3fIF3U,%Zfe+DAB2AdrMIZV#p6+lkmVXKV5qjPXI`kE#qr(qBQ
+PPD5VaA65l8eZZ[`T&VlMTTEadd[qCk6MQ"Lde1&i2kkH[TH,PLr9+aeEXeMGI@(
+Hq(i*130,QY(A`YD8Z!bjqbKj1DNchjT*p5(Z-ep,c2B[,raBHM2Kl65hNh'dQ0c
+9p(2iG2)4AhMciV2L2E6f,YTk"5G$qDIqP0AV*PLG0'fQbXA#m2hFIhDA%P9Vh5R
+hf-m8Th&MKB'%lDdR3m0M@ReG269h%b2Zr&LA%Zfbja@QN!#1fVc6IYUlLAEHS!j
+R`V(iqc)4%FqIA`0AE8m5`VDDqk1aap9J&[10fG05G09iVM9Ejde@%MqQUqdIXLk
+DVa[%fpj3Pi82*a$1dC5IZfdRcCGM2PI8UlD2QrFXBIFcbDZ*$hCj%-e$e,p09[S
+F(h1*prK@&MK9qhS-DSTlFDUPX1lI,9FjmprPU[rqfr62i$1kVX-r0*j9hD1GdNM
+56FA!flh5ci,a5cem2Lem4feG,I3q0B5IQEIfUkeiKchX($pc8+b8DZQRIRLBNZf
+eA$@kkeUbj%HcjrKU[mjiRahBBRE990IA(NEGM9jDqPr*fqeQk5`[HfVm+(`Y9h&
+G[T(iR,(DipB5bIq+[cPf4Nrf&GrT5m,36X@dPrj$!AF2M*U[)hHHL+PBFcSjCA[
+Bcira2PciIFZfYCX&Ekj0$B2cElQfdV0@IN0T@2HZKf4abl+(mrZr9pU`Ref$D5q
+E2kRS2&[rk8[jR1@eT`6p-$L"Y+&Me,MA8Y6K@KC0Lm20GICf0+cmZmpc`F(JrIK
+iRkqbKrAfAjj8$feRK[$@6lqa`VGYP@@dPj+L`iFR5$9hV'VbhAS%((rmDP+[ZiX
+BI'VrRfaeb90X!G09kpj$+`YK0YYmjicHpPck8bK+kDmY0mHZQmm(!R5S1fMjISk
+D9I$8b0*HrPl2aDReiK5TJ`q&F3b,ApUDL"02%66#&100b2RdXrBB8V&KrcKaH6$
+p5AZeEpce0DbbP,8(rHVcAHlq'SKk64qj$Q[Q9%0aKi82r0YaBGlB9rIfcmdTqj'
+GY09Z00YA'QXSm-[R$m2(YTZ[mM&e2Gf0YCfN255ZSTE,C3dNdq&5cmUP-i0RLph
+QZDXrkaTkAZH0Jm-DI[2U`pjpAmmU1p@rmASpHmY4ShLbhhHcK`,DaJrAp4@@DT8
+Qaklh'!L''TT5mHK$BiZ*hTheQBX0K$c%-c2ep+ND%EbeA%2I*Q@KfKk'qY2"XEc
+aX#GAaielJj[Eh&J@8c[epP!8UH,++9*9qeUpLVIeZAFiF0@qm,H&TP@qXY8F@[T
+FQ9E3rDkmDVpYRDZ09Bckqfe82U5E'fr,r#SKk-qYVh,GPNd2lKU[BKdI4p)r0+1
+D[EqriR4YYqVTX$9IIbkYr@hY3fZ$$X1NA9,H,IqbXiHQH'V[+A8hPSc5hY+r&e)
+CH*-I69q*fF2LGRqH96Acc5RU+r#H@VpaqQV[28YpPPkE#M9fqB#)BH4iX2HdejC
+@0jVr'24#[`!PfePE&+GhD$GH$PmZGD8YrDQbXHD["$r)TDRI8"28e@hd%DpjVY1
+DUcl8#PHTdKrd)XXrKH+bf`0,c09fqUHME5d@S@dYcBTlGc+@[Sk5PGjV4R[c62"
+a16$$kLZ"HCDjk)HD)mVPV,[2erDU)FqkE"IFMid0T`E$jRfEaqD@Y('qGCq4rQf
+i!G#PkE#9Di0R,jUmf82F21m2L`kQ[mbfl[J``q[HG*-c'ePAM+@V'fk6JkRZl6L
+@RJf@$hBdpTQ[QHA,6FD5P+dRmmA!k*kE$92EBEjldb(GQ&PCjZT[$`#hmKJ)KXd
+f@Zm+9HH&02#MifD1qkUA[`CR8fKm9Y,HiAM@@AQ@0jG`lfKC(Zai9MQm,T0pUG6
+,[1N`*eMMp&IHe&X08[Bf0P6D5mPV6)rRE*XXe2Bf9AhccTNq-c2I`Y'0p59-XL*
+qAXkreqbVjm[[XANbU8fp9-Tr9KrH&YX)GK%Pk@$S8f6,-P%hT)G6hHSk1dVRpYN
+I(`aX[&DfAjj9lJbrRfe,U+qcaGpdGM5p`iPq)DPY,`HNXjFq%K6E62&VmAI'c4I
+bjrJkrT2$e1`e2JQQ2QlcJRjVkPS*cAe-Yp6mmUV288mA$UqIdHDH0-fEL[@p"V#
+%Xp[%%q'bc8r4R8-mDaTE@`qIpQAHD1rlB3qAEDbmqCLc)G6Cf&IjIPhQ&aDmhVD
+ANH4E(PUZ2"iI5@QBPAQhR5mI%dFLeYZdkmr4+Z,L'NT6Cif2(RXE'fBf00kcc[2
+Ydd1q-)$DCKVqqqVAdhe,#PbDr&Hf[rT$hX5[dN-VGh#E&QQI$$BffTKk6Zmp3K2
+EcBf0ieX6qA)F+qp`Z*0hR9d4Q0MU$HJY[ceplJeriG(Q1mqPfIkjZJmcX[HX2iD
+2pHX(rkmchUA"k5(ZiEr`CZ&fILI1[0IVr$m22Cl@DrT1Ncm25CLAm`r)@PAiYjh
+HHXEla2cbSRC3[0,p`pd[m*qpkHfp5VpHp`9klJ$ereI%`Uqqf%h0D6mNA5DlQp0
+hRdY2T*@MkAB3pR`HNPr1pITZQdIfIU9reCZ&V2#m1`qT,Vl1Ii-0jD9ejL`l+*f
+@@hHUX1[[SIDCF,qT$b9TQhkXj1E2i82!N@ZICF,EckV&R80mAliSjmNaa$cT0jd
+Ih2Ueeh0YZ5@jrF9`cm0lRSRJ`q$T)H*@biIGRbYh2a8e5hT)6LFc'Tc'[m(`6rQ
+A[4UAH9hm+LYeelpM,&+AfQFq1-Fb%f-6[rR2PXlbh`CAHI5e,fd&$8``m%XYe-[
+qXmFRkVrZf0$e-2Km(2GhV2"a2"e2KdT9jLq$d0R$#`%3qlP[lFA!c9Xm8R(BarP
+0YIlEAqe!5e2jHGpj&jjphZCHcYI[kScfT1l!2$S2-qSHPA5EhhIUlcQITaHm%)p
+h4rHdIj)Hll2Zr"XFjTV5dlcX1f`Y"Lrm@2Q`k6l4VPphCkQ'E6jqJIc2l@@RDV0
+3h`ZDhQ$`Ip(8Qj!!acN)BcqXFCrh-ZaRpmGLcC1-rCcph*2,pr5ZZiR*,Fr)9)f
+ZFChGhR13!2jCmV&P6cac@fDVjkmC8-1Ik5deRKphdQc[*Ibp[TTGq-lr#SMCEQE
+2b1rChJmXicqUXae0PAB-Vl@MlcUG(q[V,rIr9m6Rm)MafRM3h'``TZIKqeECrHb
+rK3pjS-9M3I*q%Ck1pY1(dR"QF(8`prECrJR,jB#I6m5VrZaF#EL[E3IrRTS+6dd
+#q*3T"+DLN!#2`eV[DNc[&e8Hr9)F1MI$4IjqEmA4rN`V(5G0mU(3Fc5pl0IDFT(
+rGj[miG*hr`Urj"rm%q4[8m#RZqi'Tr26ajr*X)Nh&9[,Ap`lDNpBLDR90DQr4lA
+H@69F3DUiYVM#Xq[hFM2eq&a4UZ92p5'qDe81*PiI$dN-l8kV`l#f21R+aC[AM9R
+0m69p(X#rI3QG*,aRjDU3!(4&69G#HlK,T4iI'f%V2bAHH2mcpFq9mcXiHmYTYpp
+5(3APIhh6DCQm6KGXjlZ0r0`[eZ"fAf82jBfhlDplDmI666hMhGcPk2[hPIXhZM+
+4ZMYlmm3Xj!H`[6*TX[HY2'brHaU%2e)db([CIiEEEQ65arMq(R*`IXrkNVkN2DK
+dpURm@iQfXhGd+D(Nf#d48bZJVm+AddPM+l8CAe*&VF1Q9Cj8@-VYIcM+p[2'9qC
+E5VlfMiL*G+Qamd@`,#(JVpVr6cd2GkL(`l@GdQUcdh&VlCM-6fqlL-aq8m5@QKb
+CZMQ[aNqqcIHd@'hGK,aE'3G$dD+9F(MlX4SZlf&01k$EfhZ3!1!IG2lP0q5ep`3
+ML'qJ4!Vk[(iQ@RbN"VhqNU*`RM"Ikm0M#pq1!q9Yq+,b$rU8hI4X[)YGNJ2@CUe
+ldm8QhUphKCUIRj'lcm1#Pac9VCcZiTSGkAX'VLCCGPErY!l6'F`aFAAqj"fd@ej
+)2jPDXV99jj)[$KlE,@hK9q&GehK42E0+brQreRVmYFp$h[M3ph6dh0I-YZpKcd0
+IdN1qYlpH,mfKc1@T@H,,aI&2pd8*@1aDT*ZNGXU#rXVc!iI#@GV(d4jJCrLef$0
+PfZIJe-Lpp&l8HNE1pRZqkhIG)#E["P5R5L(qNHDRlkiGID4Dp"'kf4ZpV6@qMYE
+EfUQe&"fqITTh,Trp$9(KXjhaG[F641"XkQmPhPGbI[RkQ%2pmISKK@0j,hHqL1i
+iCHEQiE"IUGmXq$L9fK(#E,RYMK+`UZGQP$r0Fif(qblf(ADQVcGHBib(q,Cmj6-
+c8`ee"q)Di9J+e$El9N0Y+[`'+lT8,)ERkUme2QdX#A5H+LB4fAMpmiHfIQ(HSM5
+EA!@)Z2PVh96GhhG9"iai65ERTZf!r$YDZha*TS"NpV)FHjYAL(!AZpH*Yl@rYN8
+Z)6N&$mDiP6iGj)Rq&AlQ%Q-m+*bFdm3emAmm1aTY68r-VmA`MJK(IY9qMQ2PiDD
+mUL5dPF@Q1lNQHc@VKYr&Crej3d2iI1+kQR9XHICme2Xm,!)a2jQZK[m"bhjK3l,
+,kT1bIQYDpXm3dk'cR280$R+@9MYqfL@BEh801!m3dP2Q'RE5'c9bIN6jYVSSG9$
+A56l2Gc$PiBI'LFQ`PI)KpT@f+DfPFZ(AG&Mkqi2Mam0e$+@SCBVm3bQr1VX5[Uc
+CqPcVm!FT65i6a$+9&XF*iQPc9NISIhXIl@llKJ&lf2K3qjA1SDQhF9)dhfEA!p5
+2IHj*kZVfrECDp,LqZFTIT`Y3fhLalk(JPHPM5VMpA)C(ck8Zm[[q)F(e+DP$If0
+jBcRG,ZSMb-h'+EC2qj!!`[jAc)CN"$$rXKKHGk3`VrhN-)E1pcf@e-2Td*-1SE#
+kALbPeQiPYAH-qU9V2bl2QHiUBEG+I1[l((`4`BF(Z&5R(RRmq5lr"P@e`m`Zbj!
+!Zf90pUGdE!,XMSBHeB1U9klC@8M0hUKIh-Qe[YjXVASidLVKfY5j0""H9pI$+YV
+GBG6C$+TkRj*#q5kKIa#2fMC#q+lQK`0pd-DA1E$$NFe2TBpf3Ze80,B%,V(l%1q
+C#k65[+kK%PHAH(38)`3p`[2KUSDPm61B9pbH*Jq&TCf[ANP8,q6Biq!HVA"S+&d
+5ZJL3!&lHbVDAc9Y,jrQSG9A[0+[S6jGYBcV[`UEq,!,1ZiCZ,b(LD54c5KVZqMY
+r8M5+RTDEEhfmKfX5"h0(FG($+Rfjk3TCJ3XM1+UHQ)Ecl03ij"$M[6fD&edK`(C
+b(1lk0&A`MiQcJCbdA,kQdMdVZmVkUADPSMaH6CmjH3m1QYI%a@3jl28fKc4I#2Y
+J2K9Xpf3kYS(a$[4aV2bjApYVVj6U(GIMpa'2pkep)TAL9PC&VYh)L@9P6(ZH5VA
+9!%DT(1k5'iPAla0p0RfCESqrpqVrL`#irhc10p`[L[P5EYLNfYZ+4iVdT(hcrQR
+E4#mEY62qYUr#VYPF5lc-`m-Y3CUppk("2)4$[V(TBEXpC"r1,+FYC6Bqqe8Daap
+p)qFSKer0Bp#[q2$9@GkP)pbArAH3!2"TV@rc%-I(KlEU,bme`a&jAijPITVhe+l
+YTmV(HkFE#pqTCiYr0[Z'Cmc9)fr4jEQ#)Pf4%TkI-3efXTkQA$i1CXMR$al`hkY
+CQ,(q[jRAffBKeJ3)Hl`G4C3jk*U)GJ!2[,qaM6hL-[Tm1'lUqQar#B"EXQ8i4bf
+(FQUiJ0AG(UD[eT0Vb26m12PT-5''hVRL68ZP$Kk1)5@fTNMI#Z6Ehhm+9BcZp*p
+I#YP"adVQTUdVJ%[6p`M0)LGhUE'pS@+9k(AmY+r+5[iqHL'3!2VA5[RcbNp2U8d
+QfMirLHA5k0m4Tpb0aE2&jGIp@[KrjRh[Y*BiGl+fpfl@5(@3!0#K$ACk$Km1ckL
+f&-UD[#Pr3Qc6Z3Fhc@ERkbRbf+INpqISE)eaiQXKf!!qf[kl4[%iGR)RelYC!#N
+P6PT[QF+Gi9[kQ@NeGlJFMdm,#KViQlF@L*RiEMC3efM0+!Yr(q4elDM,Bm"-Zmh
+dESiF(`UR&Ki4p5jHaH&RR*Cp[[[6j,&Ri2aEcB9YMLef&$qA&pU(Np(`+qa[1$$
+1caaK4mHmPI9e1BPa2#KZbeNI`b,49lcCG(B[TCq%GNQ'rVckL,APZ,29ir!G,0R
+SHMk1(AeGl)jffp(SC@,Bh[K`kr&mE&dI*q62Xr0m[c*qHJaFef-rqQ*Q-p$VYIV
+)Hl!'HacfRKCjFL2YqplLTmYJ&frHQ*[e(YCV@r`qMS92N6l2iFLGrK6AhC!!"Sq
+$$+[YBkU[2PiXlb(,@YXk@Z8k@Za`TGjkP-*6*YMVj2De8+RGll84J*F1)D3NR(V
+kAK@Hl`["Kp1P$T!!Y8qj3p5[X8Y9Ap@'ZY)G6$fh0HAHHQI$[E@2Q5,E0AZ(kPG
+rV%a2ldYFUHbV3!l22[JF3dH,(&YIcX@[dB2#N!$Pcdl"pIiX2Ke0l)aVEriAIZk
+ZfXqbXHDl,Y2`cl2j@,e-2J`DU(fY(BB9M2XkRVm@@!-J6PVCiUf`i28V[8VN"28
+2'4hVm,,QjpRc$`XZLK,SHTPEZUL3!1'fG5m,TYGl81S+`V'P,TG$$f`Y4k,lDc1
+@TH'-ifp0[`!1H'XE)C@f4Bq`4KVYp`kV0@dfeiX!Y8ZfXkH(Y[UjUI0Rm5(a1lP
+6Y9*T3a$YR5TAPiX6`UL(BBHqKj)Q1",Xql5c@1,kL@BrJ&[jMbGhIemraV+5Hp4
+XSPR1j(HbBM9Q2UGm@(26[6p2mrYCMNLQ8f,Ck1[jVXY&m5(Jm,mm-ZpMcmec2Ar
+li8Z$`G6#G-Edm'Z2GbG6Q9q2"`klKeb!R$K+E(UkVV)ap"hfG[kR3`qTDqI8Rbr
+S$GYF&8ILjM23EHd(4C1Imf%di*!!GC3h&HMKqrAaQV*LJ0f3!&,eiF'C)KKm@a2
+m*G6Qpa*Y3[`mMI%'6qR'V(CcpC[1[TD$kZDNffbKm6`E6@CC6PCk("k6@9eM1j(
+GL`eaGD[E(qZe`ZiPAQbXmAJR0Tf9R%Y,2&VpZ6MG$-cpP*,HHb`iH&)RfGVkEP@
+ATr&`T@lUEhmrYDMpX2pm'TKm5(YZ[l,4`pf+rCbDD(0Fcmck0+ZT[,T@FUPCaiC
+0im6K8+f4)KhQpQX!T!A"ZhZFAGhrK`p(JF$23m0ZhMa+[(lDiXXYDhrdmai-'hl
+JqHEGfK12(cN*QLNhPHZK8k@+ff8UmK`CCp0fIX#e!"P,#BAQcKb,e,$`)Gpa)EX
+rmaDl+$`THli1pl[2FMQ-rBk6&UI,mbPBerPp4Zk-r-@ZT199Jjl@9eT)Nf*a,p`
+,0%YDrb0hKA'IPhRjckfJ$lh05UAH`hC10+cIIB8lDP9[b5FIK`m1TL5T9,ZkDmQ
+dhIEHeUEAIElSGV$Kak9PEqjSHaKPr%mh&KhR$&Pl(qZc[*G96G4K3pa#q&P,9aR
+J(Q(!'d$9erh$YD26*bY6',4IfEiia%XEGpr"bq@YG*q[UE@UTSIceHlp$(*bGCH
+((rK5Eba1%Jj[9,$dGGXXp,[+"eBN"['c8r"Qe3iZ(b0mG8"aDEkcNFe1[l1fQr%
+[,(&1KV8cVI`V(Gl#amfpjlB5p*LeIm1Dl5mm+9dhNEXiQ[0RDNh0F(2G*AHek-N
+pa,I9p,dkN@c-CM[TeIAhQbQiZpK5fEh4d&VD%kHTf[E@P@ACGPE`pl8fde,CKF1
+Q0CUJG9REq&*qPejfiX+9YiE54j'pp$Z)I#f"q[&GhY0#C+["-$Yh(qbEimFr'22
+*Df!@'[hH`ANI1(e`$`i9FHF0dZA$K&cS4V(&2#Kh&IH2#k98b9Zrca[l[UpfeG-
+NRETZ&mHmK[j@%IN(2Z!eG(,bdqTkE&A'SH#Y&rI5SH(+TCL(YV(,5,BS[Fj#L!m
+)C6$Y[Z$CfadGkQGUUDmbpATUqrLql2p6L9fJdGKp8mR@`ce6e28bN[2Gp0+XIQ@
+f@jh(lXp&CTAfFqZlfC%YE+dlL0Bf1,XXeL`hrM5lc0I1qBIDGhURSdRVk6EiLAX
+kJIM3eHhhTc+[6cmVEhNlHAG0MkrA8)E[,5ELCG`hIKq(Bi[F9FkiKVXr$i8G,M+
+apVBlXZ`-!X-2JeH+4!P8V&`$J(frp)IDGAETCr$4+ZZ[bYr@@0+K$kCYplIH!&K
+mD4Zp*iRMF0UjIdBZANR3Tm@K8RPGd%Sj+[&XlhfTP5IVJI3l0aGP$$`l2&`CGYR
+j@2p9,QD$MQeGBP3)C,(#Qr%Kp`!eVieC$U,Z'e1rpK4H$$V+krQk-V![mp8qCmQ
+9m6(eN!$kYrd1[ceGbrbirU3dXr$qHALl#'VaFI,a*pi,PEGk@e,r`CH+,NIBdA!
+Vl5AQNq46&E268kp%XbVfrU5SDi2eAMp(6`rIbelhP@I8ERUrErITUl@(6Ze&#9c
+@2S*FQcaqblDI,`Z,'jV4`ri3cq(68M6L-(,J(TH&AhhR`m@aPD20B[&XCH&Cd[2
+KjGKEGYmbrXG6ChRE3TCf,Ck1@alrkYcq5p[[H,[12bkEEp(8rNcN--hl8Q9p@Af
+AL&rFfHZfmLqiZ$aFembm$M$`-e$rKAR4'lfabf,rK)RI9X-@aXElLf*JI[1&,`X
+eLpP+dBG[0m2YM2ijGAZiHKS'2@(L9CbiLi&Bi9M9d["UH[kEjRcmIT)IrUrmI"c
+eGqIpH2HCq[KrS8*bVlT06%YFA%1H$Iri(hmf%qPB!(Y-eIq$$bFePXI3@eKpA0G
+RfF2ECUfPqY6`q$(`LGELepr$6I9Zi2#MlH(`T!Z9j+fqUVmHlMhYY,hI+rMLd2'
+KYjp[E98Z,ABAHI8ePGKE!jQl!,KE$0DD(mY,$ehmkb!6Q"dUfJKlcXiBIiFl'ar
+HT5lha,AhlA3E[3E[`H(H@eGpM4eqNrbqTQY*pAY[U@q&0VE258q`KYkAHpa$EbU
+A$X1cKj'hr,HB(e,',kH"LpP,V+M08hiG[@(AmKQ9mHeUlh%XY4LE@QYTZ,mc1@0
+Y)mh698ZfYkA*PeXIU0hUSYI$hZDM@G,JemU9H@&R$FDR0A(G`qTh%'&BeQDl+Ep
+@#mXEANpl6BrTfGGS2)RH099HliH@@8f2MkUTYI3jRXTA-pNp3Sk1lNGM)l&!54f
+-2ZdV265UQYhQlLrV[j8(KapfJ)b%eGX0jTXX1Vf9AHU%R3kpqB54Y("5Zr#JKj-
+1N[*Y9)l19'`X2iNF*K#+cUZfl16@'rbBJlA`iNVR,'GiF2Z5rQFpBcj20ir!j0I
+(`TGE@jiFfiPffmKKe@*iafJ2kmA%hQbqqS0cG(CpNS0qT`)mldjFje"Z6YeVR8+
+`Jhp'rPI4[RQ$9alZllcEpjYd"1m`LB([+8e3EU2%T2F'kP2r9pP*T[UdheBN286
+lDUdNr3I8r,KHlT2,dRI981mTIV[Xe8eX1NYGG$qZN!$pHRMrVFIVq[63klGclHP
+lYlEiYIDjr2`m#T[Db[RDk(`r$rAHH(AE$`Mm2Lp$@e0lKXJVpReXIcIb6jP#XiF
+ZC(dPV93iH,`E(4jBj`eliK"@[qV6AQXTV@QYGG3TV@2Zjh,Ulh9(IMm@*KpP'Y3
+"pP(RMIDb!!PAHR+[ebj(X(-eeaY6@l[G9B@X[Ejl,D1([*fZLDLQfq%0&f9I$9e
+mkfl+T[[eeC(I`klk[HE[NhheFY$Y1cNlI`S1KbflhGp*[DD,!!22dm%Hpr`MAZZ
+08A8eQ[X)pY+YI[amI39pp`V1GS$6KTD1Q[Gh""TSf2*JMlZ'2H`34XI6338flKT
+R3-m'QYGP$!`5`8elUUZfVS-$!L9f"!#'$GkUZ`qKMhN5hk'#Z2JQhGaPkDpUlDp
+Vkb2DJHeN52EE[ACkTPeH&%`r$JlDZXDqIHCLRc&0epViF'`Tma*kLeXBqleP6,"
+C6@ZphRPLam2Ke0P9efZefJ[Gl[rkj@,$+pI(e(3e-(RarAar4k'VVXp6bIT)mq(
+PZa[HQYDH4cYVqX*RKeIeChZHeVmmDbh4ar-[B$8ErqUlh`i0p[J9e0ll@MUlfYN
+BeVqZpcd(Je2LE[fM*9$Aq,6kk6&T[&Tq4RP`jT-26pV4e0E"qIfUXjRR54qbbh-
+r0Pcl1(iZhJlX&%IiQheNN!!l"VpK6qeSi05!ZXYrMeXHGB"JXkQImAEeYADkUQm
+@QqIMr(J18kK4lRZ9001hQqhd6(hG#2MehZHjHEcB9rIEH2Mq0([4+UrGlZ6HX55
+2Ypl[2[e1lp3Jl[UZG)QfH,9hP#K8c[#TXI9%1YmFm*X1,Z*66[8UGhVpG`kRGmL
+(BGa68XaQ+[Gpl(fqU'2[EZVRDrA!Qqr(2RcRDiq`M`qMTY[RT1l`098eH2pm$9A
+1YH"9cT0V`+BlQmHpp5#eUjefJaZpjRj0l`bq,`i,AaSq1"2aT&01iFQpcp9*[B'
+K,23DbTUBql(1TV@FQD&e1EpAIPX)Zh[[l2UF(4I-X)YeDDZE@d,HKI@p'q[U0p6
+DZqSdD(JAeTUlV@e2J4EUKVD0pGA9'dY*Y(@k[9kh@fP'hZpAD8EUjZl5YZlUlZU
+0'heS'YIVEUkZl5deG'E@k[9h@peHVhYeJA9T0`+1V`,69kZjeH!"HhVDfqVVZjY
+kH0&TiY2A6SXfkYjYeUjYe,M"8ZCZVN9YcG@p60Qh9TEb-#E"4j9'MbYA4T5,QYZ
+TGT8dD'V$cIDZdQfP(M8H6Fkqk`+%Eel5KIB&eGkm&Qrh@4aEkAFdGADEfM@h1ai
+ePVD&(d+&E3Sbk0EbV6r,@fi-'#RAS94VI@eT"K#hAbk0cDFDMTjFLleXh`*Ge@i
+&c4eS+Gqd84D&#MVGl4S8YRXjFLM'YlV@kq4-Srmh8hdY@#b,)VE5#MkfrhP(`*%
+DqhZ[SqN!rPdD2SHKEfP(9kflSdEX!Rm,k0)PdEUEXpl,'-$[4fdE6dD(ElqMD5j
+(JDqM3VGID@Qrf`h9#MGmHlip%@l9kX"p(G!5p%(e[4Zq9G6I3NA9h4M@I'MDH04
+Y23Y+0S1c,N"!hYeVk1aie#6DAGeG$[8EUM1Yk0',"4eY'4ZS+1"@b,ZhSkhPDfE
+k&p)&`Sb+#)FDMGqK)VD-LdYjGTY[HSd,IIlhA`8GM3Zj%MH8*C!!ZeZYZVHdeG$
+fb(rF825#Y0rbeC!!4Yj%LKEdGAbIdI[eFh6hdMl@VPdD-fK,[Y@&,dSdB61MVI3
+N5*Yf&Qkp$NkZKEl-+p'deFLM)PbjY'l)2h9eVD9+YeZYfB1r5QrKSDdL&,SAe'j
+Sb)c#Y,VENIZjVGRUpEEfqVM-,65a,ZV5qYpAkhV8,HYS8"589pj3Zi*G(@h8[@k
+Zdj1kZYA!&DAIIKS82HQh13`XBb,&%,&TGF5lShdflfFDkZli-8L0YN@[3N6EHj!
+!Xi&,INN,5RZVU36N#P8D(45jGZ'HAGkhZ0Y[EUL5&ScGR4PhflS$a9Z"J8+0cZT
+%DD`ZDfMYU(S9YSLc,4CJSrPN8CH"Ud@JVcD,#VfXZAJ8DfdZ[M%6VUM)fG'b41l
+JQ+#ZdPh9TVGEk&Z8fb1JPfl%M4*MAf!%U03`*Y'AfNb04h3"Ek0,N50&,Pha5I@
+cDfYY,R!Sb'&&%k-LI,#IGDd)Gp0TA8ES*Gp!LIFeS63Q4P)+dHbI[CC4KUbfhUp
+A'Tp@T*b1NpkM[D%C&1YPb*YpGblI9fQYM4JTlf0'lA9b`Td[bb#[YK8VEQhpISk
+fMZJ#ZbM0M9XZ0Fb,k@6k4VMhS+1[S95Q#)CSTA404D8*%EmYe[lr9bkCT2Pd@P#
+RVVlIfmJ!E#F%fM8dm@,VDk,)LaDHM@aU0ale%+&#44Qi"4hD6H2I+2(%Zk%f0YE
+VBhpc0SK5pEdC%ESL"Yp449D8D1"0D8GMGbk-D44`D)5YM3S6D-LhZ568hd),kM,
+ZU%Z0)ZX#E'Zk9c)Sl`*Ik"kHL[VF*ISpT'`+'r`*Zr`"a!SY*qrZ86Vp@PCB5k0
+ZLCXliZAh9['NAGh3MAG#j[T%JH%Pakp%+%MSS,kdSd0H(#-J,I5lFQ!#K[!4"8h
+pZ@[jBRe#J1LV-VHlQl1keXA!B4GE4#J*1m&$48Bcq5L6Qbb!a4k&)+0['*1K6Yl
+UE[Glk9eU`8@NJGS5`Rmp#M)42N)R+%GZk*49h4+$#hEb5(J5,Zq#6IA8hIkm)XD
+AD"S[Kp&9(k4Drd9)T6Sd*GZ60K"NFD@$fE4j0-$dAiU54!hYe0r,k9e'PPBJ*JH
+`-([VHh,3pZBcSIEUh,@`pqc,QDJrM3Df3$l@cIdHYk&e'YlQP58+,k0ESKEDM)Z
+GlblQdhZY#*X9C0@aViU5B5L1Yc4Zi+(VHK4SlfMI#AK1V3Qlr9rcrIG&@rYdVYi
+*)hZp,4Yhk'"3ffYZbmAV61HfeE5THm&BF!+p'qZ6fhLVUhScE[!QkhPq[[pEGkh
+!'+SaSdZqY0k&bM'hfVMIph3,19lH"0DAd@lkdVF#kp'leITD[@qYGd16Vj[q@YT
+E(fqi#iL`k,PD@Xi+0eVEVBkZMkrS"GZlQdSqL4L,!V[eY@BQb%A0D[9b,ZkM4Yl
+[kd-"%p')SdrjdpeFr[SHh[lI@lZlfhVHhUk1YVLqAEb0AD&R*2AGqKUlVp!8jTQ
+Mrj6VmU#k#K)pHMG5bqh'e[SDrP*-RC4ShGGr1Kl[llklhAlq8D!1V(MN8*%Lk#B
+D-9(MkflrjZpDBcEY4NeZY@,2epEG&EhSSMZ)c4epT4B4YEGmEqB4lQKD3B%LhJN
+DZA,9pdchf%LK08`P#0V6*0Fq[GbrdDfMb[E&2NHN%T%L-6#P&GD'rqI(PfiClkq
+S+DdB*PEjN641SDflZpE)S5aGK&j'YSfpeErmhIYdVN*QpfDU*D6[@41N8$58rRY
+P-P'G%dU-M"2pDMGd5$@YZb$Q[ZjCDb%(JSFQ3C[X#dZX#0b3!+8hI`%IT"%%dq+
+&bbamPclec@Q5LJUM#C2ek1YSAG$IbpDD%GD4T)6kfKbCGh"4ZbjM&S&2-[mTJX%
+@NHlD@N&$!0$UA)SC#E%IkLRrpdcVl4K)Yd5#'9p"3jGbE$PeELDFP%Ap$K&aJL$
+KA-e%&6X&5H3DI9$Ikh!S8-!Y24M6q[Ud))eed@VEF`6DHeU3!)YcrbL,'NESJKl
+dDhS9X[9i%h!QSMA)Uf43SBe$h[A03@l[VXbLT9PF8#AJ)PNH*&hM@RT%dFX`&)Q
+'J)`Pb*FjP0-X8-I+hI"1@C%U'PM"mZq#6'Pkh'ZpDL4)9L4KU4+M$k4U([50EII
+D,Z$`660[,JSj&&T0fGfANQ%ZMIBdE@c5XA'Zkflfc#EJ'BQhB6a14j!!a`kfqr$
+ETmT%PeEmeU*rT8+1!+e34&0+UdM@jZa6@%@MZPJjTP0j',h,#-EI$`3CFZQSmF(
+3SE#")eFdA'MpDKG"6#!dJU`N)FLAEbk&(feMA&)M2"'b&LMSqhk5XL@d8B8*ZVQ
+kfqZU2fU&b%Na38699-iTi*9b)Ekl564S`5aIJNK)TU0+LN68%3N8CHVQkXfqH0V
+G@L58UqN5'4)Spi+j0Ylkh"4k&!)+dj&L38qaUq!,hKVpN!"FNH`PfiVZkeY'li`
+5l8*D*4TKQQL%SaV,%+2`SF2",qY[+0fXm1#L1+@2l1L4RCDV`*YhM(!c4if",aU
+2S"-!p,MI[B5e["&ZDhejQ0@GUc+4)SrSV6FHSdJNhBjSLRS)QN$*"XVifV)6i!a
+2S@j4)V%`Q)PQ@qK)YpI'ejK6@Q`61IS9`VeME@)r#28GAG0*%fEGaMPImE"0$Bd
+53NSNHk5k[U0D)P6b,lBb+$56FK)rR,YlFbj#fSN&YDhSaQ%c@VKcPkqEGeSfA[A
+0eXk1p#'LDLBVU(['#@qf-hIMV0a0-cfEN!#Ka`dXTKYlXV`@4!Y5UjUD!++fpQV
+J)SlEIqpFQ6-EFX$@ZA!&5l,D@rZANUXPc!`UX+Q!LS)U&@keE#S0"@h1rrR0ZrY
+"8p"6$X+*ScF@A0%+VE5K,r,Eq[,`(#RJ4Lh-`l,JfaSePTmBKf&fMI8+(q6-Zmh
+!TLd"-`$ABVERelU00ZpfPIfHf`,iSr4HSN+DhLb`6"MVE5MFrP[[hh0!dpC'!Va
+CdM@&rM+bDKZLmP3qdY1jd@MF&,p2ZKDY,Xh#cH"fehJ%0'BGbT@3!2"EYmMplKD
+*%P,0bC((JX9ZYqd6IPj#K3Y+-DCGh)CX#lZTYhGR$Z&HKJ'jSLUF20'AaCFDl*m
+YDL[4rQ4"QbcE%JQdGd1LFe[E,'*0T'`I0M)Tb0AEQ5QkeZY14['eS5VHkpB2beN
+e)kjiTZB8e!cS[jQ&e5fYlTBbU*cZM1+Za)pI3ZH6b4,6QBR5QYqieCccYD@h,6@
+i&cG9[YUd3Y(HM@de(9K1-%5J#dQd,l@R'r'1Y*EdbV1M'S0lHYj+f"D&$ejCaLR
+28,Z)Pae(*'k-kUKaC+`)QPa3`&d6E6@hGE@R2jif0VBdQbk,6J)p)h6d5k+*5Z6
+EmhrD0%YZ'LT@Qa'FmVG,3eNmUd)5K4hCaEd0EMA-Db-AHYQcD2XhAXh6b8Sfc0d
+pK8Zk&P3dp#6bGj4Y0IIDFkm8E@i&-Eq8ReYEG(82iTYI5llMb)+1l1,c@f@mSh8
+R9k[d23ffaM&Y#AFD*`&)R&T`+&hVE+MTlZ6rcaq0aq6acP$fCGhp[)ZpR3ep(!S
+qP@eXbPD@PeaEI!VD(TA9ck&+PrPJDf4GpVD8+0,CdCZmScLc#M[pqZK&JErNS%@
+QV`,Ujh9%fI0EGpV@dI5k2dD&f`ZQRLZJqD@14XpH,ek4a0B*eCVVLdDhAkhBKFf
+dfYZVZAVr@Y%A5Q8Vpeq[VER@d0e4SEDKVr@ZJ$mRd0IJ'YRaU)8PT,dGAqLQSqa
+3`!TX+9+dQcH,)Slm*qaSb0LF`aK0Ypi0RYTQaSlhHNe1VN5D(+[YHXU4IS+kiaY
+A'V#ACV5EEkZ4D5EkdeXLhYieSFhZdB$p@Cq0D4&!IGbE54IAFf4DA8LkNfNZ-G%
+#AG6$E6MA9EFbpE-+HT&eUjHVQ@NkRYbK6!YpAd"h1,[9fr3@KN3SDZqk#h3*eZV
+[Y%E6dLheZL+BYE0eq"[k&S6#R-'`0MD(H#ZDhAJ4VDhBhdDE0LfKEU`,5MVBe[c
+qQm6L9R8Gcq$rb,CaHYLl1,j%AMC[Y1jfrJIkrmql6aUHaTje2fp2j92qfSYUM6e
+(h+MmG4jp4aSdf0G4ZiMH4'mf0`BhrG2GI)qMSqlmAm[m+QVUEHTkfTe06pUTmbT
+rkUIr+RfDRP9A2eA@9AeDVr5Up@VbpAdpA4Ur+UrhePCp#Xe9CrM@F146b2P52lj
+%Mfj2`j2D5IV5Gr*VHNVGV@rQUHJRI3qRVHlfhPFDZq&AI*VZdVYVAILV[d9hrk'
+XKKd81eKmQ(LjI,jc,jIjqAf1AmE,rpepEAk#[kk[Ser#VrjjLTc&VQ-rQ-qJ)k"
+$k#$l",8CM8)#1J3qJJrf)-ahqBlp!4d#-a`Xc@jRUFcX-cq6-qlBAGKJf(h,$eC
+9I+kU9STAG5[XbX@9r+Ac8[XCIfCIT361YQE5Cq@aLf0hBpcBrKXIhfA5@9rCE1b
+rfX[e@A[6C[cT[E6IXcI`cIfcIIXkfccGRd9RmZce9RKfIjE2qGTPl5jY2l,68fR
+fV6IfRXc2MrfrCmhcBfJUHTUZQZURSiej9AG9db!P6Ge'HU,HSYkMUDMUDL9Be[`
+l$iI`j2`k[iFfmjQ0m1TZih6I$rUUq[UZQU*GC,q(9G69!%UHQV*GCE9GX!`"94C
+eNZUq(m1Xq(8r$UIKJb!09-!`*3D"Pq&9I#UZQ[)haUUlMG,'k50FeAaiej'jf0d
+dE3I,%(kD0dJ"+UhZ`+hNEjmDmU,bUk'6,V[Ke%X)GA,#VEmcEaZCU,'-!S5+0m5
+SP4ZU-[!$rL4ZBjL0E!-q*'ZkMiJ"ZCTrKdrcK$C)2kLmMI%bejr8(IT!lJ%hJJ!
+F4%d"1QNFb(P(8!J,0"9Ab6G!4J'ZqCMFc'3%jQRPK01V'(%!K#9!54c+"pZJ))N
+"R3G6dh3AA4pr1r6Gk6TZJ3%Zp*RY*Efr8p6,XG*m2S2Kp!J*m2S*hkHC!FJrm2S
+2kZ[lrTZJPbrKp"e)!`&@hIfhIr$k!"-hp)&AJD2!+JPp0d(0rTj[p26")q-%ETI
+LrTZG*dhkChkHJjd+@Jq@"ITZJq+!6[lHldNi$(c`#6[djp&!!D0P[c1N!'N6Ya'
+ILGr,kQh!Am6[lEpR-CLflm"0f"AiRIT*[R1*a,RITq)3B4+D"[kV[5I&r6mAp+!
+P0d(5SkG-*ZJ*c)Jl`+0"I25HhHNjR5FbJ)!5Q5&2!E4ZTJq!6Pp*BI'PI'X2M5q
+NPp*,k59G0!eJ"*!!%X2MI%jRiPc+VT9G0Uj9GE@(cDk`ZqGj[RHEjRS36I'c(6A
+&@$kaPGCPrNCIj&KGbV(,r1brcX[REDjq6BhG4mQUbrAfA4f9cCA0PdGMdB#ZMQG
+)J0cfGjl3FhmE2@(0S`AD28TdIQJKL#1JK+kbAG-$"B+k$@Akm0AAbj%bUP@21mh
++q-J*c[0L@G(+ZTRaCRbT9e+ZK11CjhQrLG&m6SN#,63I%jVRZCjlQ3qG&cfGk5,
+dN@9A@06-UVLVMGC0kVVHYTrPe29aZXqBMHJE'D"ZXPp*8pAmcjP2He2bShpA1jh
+-G-JC'rUke)e+&fXILfI46EPLTA,3K0Z8I,(Sj[4CQcd$`)qGc[-p#l%2p8VqU`Z
+kcT2Ka2kHI`J"de%rer"UD1PS`GV4VH[B"Xr4Y%"rS8B1YSdHEkD0D4EQM8I%VG(
+UB2Rr&Sk$QV5,+M@F@llHRq(%UV$SUcYH[F#Y3mKA8`!@ZHDXiXURD&S!,5!,G*4
+k,QV1QPS,GY6ml"8f'JNZ"DdH!Y9CP"Ejc`&[M!@L9@BH3XL`r)@JQJATRk#qUGK
+H`q-JaQRX-FaPJ-bN'IK@Y0+M2)CVT2E!Cq,4k,QhS-`8qBjL&"Ulk5MS'KS4*SD
+M4)R-3b%(2TI3d(0f`((S0ePHi(2SZ`jUb",r3F!j!`1DH*&2`3U+Z#464DD,644
+rER3Ff$Q#[M!DTSZBJTUDTLe1DV-cA4UGHKZRMJGTiP6&Uklk0E%JbFU*%La)X@)
+TYi2Db-Mi-M)b-R*!*%bV(+JbIJbBXA)Al+!3JJb2Ib-U*PI"N`FZ#)#ri!#a)R`
+C0ENj@9PI"NF[+L"24*F*r*IJRj6r"3q##Q#INY*r["252)Na(d5RNNSN)M`#!qr
+"6r!mN!$BL4#k*"&XS))X93rTSS$S)X&2P!TJb`(XM)$l%3FB"39[!UL!h'JTi'L
+i$-'4m$XA0&F#-#&L,+&P-$B&F4m#U!HT#0U)S9N-N!#YJXLN28(V)!b&$5J"i!G
+0"8)8K*D+QNKq48q`VGLaSY$mK3kKA68e4"8(D1BJE&@GVDp#pTID,3`2b,Q-me3
+(B`q"#rPXRdI3aD-(f'-DQJpqQ4JBaE!Up'4ScG#q+r![B'SM'XF0VX[ZaIPQ2)J
+Qa4hB`E4Nl&p3KJ+fKHSD1KH!1cISBC%@"-@qi`3)Xhh'8$"P6!aL9$`kcNaFeJ`
+)f23`!15i$#$""TNj46`L[P2BcC4d@R("Si-rDb'KF'F'8`#Sdj463mMC$2i!'C1
+3!1KYNYCYri0e0Q$R*ba'CSc!QACrE'aH4D6$1aE!m#abDYY)c"UpMCJCL[NG1Kb
+m$L*+IJEPe"'D!Q5B1'M*p$Kf0f-irk'lXF0&,SHXQ$H"l)!5q"iVfG0N1S[5P4U
+m#eJXbFXj*0q"Bdkdq9"&U`@M%S@Pk&N4FTd,B)%,"j!!Zedi&iXAi!@a1APC1@%
+,bQ%9#jf,BX3Yj0$$4MP1KNq"LTp3&Z$&bAU'Ep$*f-*Ei'#KBi,LNYp#j#e2XlK
+Dj#b*&bd5QI!VXXTCh6MC[,hV*j@m[PQ+U)-JrJCZ"KJc&Z-p0i'Ec3F!5a)G[Bd
+3'B0(Jc4)Ua2-[kJcLaZKE'4iNkKU$51XH+&m%YL,9E6+dDp**Na)c)'1NbHKa"Q
+3!%Y08)Gf[b(NDm`$5,(C15m8UZ$2,)D*8jGVdU#l"R82f-`DX'MJe8lmZf"XrJD
+2k'#%$JdcElM4JfB%A3h)`!hLUEFJFdCXBebYb5pM#-R)N4-a"84kQ$01K[8r%H"
+`l'lSF4iV+df$SYq`PcfQLbhj(ELR)GYXfblA2"i6@`9MJdL2Jh`9ESAejQ44VE3
+S$*r3cV(JCj6i'GBXNaX$aB(SCeQ8f"U&lG!J&G@c(Zd@a!@a'#eN"@M"TJ9+)-a
+l#Hji'8%!-blXieV"V")0RCPjCJc)Ea(i'N9bC4`D9M4Qk'8%5UIpM2*HKQh@b0Z
+U*90S,D1!&I0GMF'c"UP!B0mKS9$K6aDL*98l#iERY-YI*f1@ff8"Uc*L2)qD2im
+%@%Le&L998d9Z%%bpZL#jL*N*!("r%L2NHeFA)TN2eY[r"m!RJ3kIVP)5-EBTYbX
+h(mM+b$FMb)NU0A)PC14PdKH9PHjN,DrL9P0Q)T!!&)&b3RV4QHbI"ebYAY+"Q6H
+5PNa*GL8AK4DqllP+VNLhX+DhfRC6U1Z!j60+CLV0kCi+HJN`I!&!Zd!f0i6i-JZ
+DY+CFBU)S8qFU&`dG$@-*ZCkk*'LddH,%Z+QTjf[USZJVB+Hc,YLB#6"Q)Y08p2c
+AbX%fV+DRTk0P&jZM&L!MTS+Vi85Z'-YkZHII44J`+0D9jbHe2Q6H!GF1J9dcS%p
+A4bp0c&0+VDDhTZGSe8@QbipP094SN@e*JIKKFLdcDK#ie%LjGD9m@2D891Z0f6Z
+&%P0PeXiddHc3[Tf"H)i&`I[J,J4GKHQL8`&`'-#m+`*8l!ZKF'&%@,6%&BVd'$*
+k9R4(!a'Qd5Q#RUkQ*6eV3Y94(B9!@d+a8&E1M@4DHC&Ti6!l69a2Mm+M)GK'RKB
+%F[8CURViNLRKP2B0D$DM-4*&4$+U*e(iP&[,Q00)!B!ki!F"J)!'DIS!iPJ!0S'
+B$iB#ej89-%!!rN`3D'##hJJkf#$qU#$@34-e"%Q3!%6-VFULQYLbeY&"8`(VL[U
+8%Lrc60"iS1A15"Qa@1cA)+J'N!!5'!Q5`%L*b6B6BJPCQd"J3a3'@-%&P"8X5LT
+k'#0F34Xr"8PF1ICK9Z!$9'H3!"8#UH*m*J'jeJ'Yf!BiFDpd#9L83XQ)#eU!YL`
++X"I30)aSX1J3`%(0T!3EiJZM0K1$-VG$M6))S"TF%5A"'#0Q)+UaJ1RM96B&[Ca
+A!58#9CbRDj!!*,PX%b#S+p3'@N%"R(a)&FXQ2)-PT)c4"Mml"@r$JNI#JMme"6r
+#JLPaLlJJea@+cKMrRBa2kIe366#+F2d%5d0'1##jJJZ)+qcJT[$JJq["&qB93`3
+G8S"#T')1,mf#$hS)10%JqP""rM""M342(JJrZJLI3JJqK"%kYBTi2l!"`3FkBei
+),f#$QB$3XL%%ZVJLG*!!4HP540!d6TNc86Ti)QbJJd90"mYJ`q4%TqU3!-i-a"&
+f-&2eX%AC344MS0l6j(p@Gqr1fQ,"P4kD*MlcNDl,IrI"NjUMV2iIGbXV)rPNDc+
+qrPHjamVfHAa19amV)if9P8D19bU19Nj19NCAmFS#'9p$PJ&pA)aJ$)&FVMFVPCA
+(pAPmI+!Pm(+b12P!*iq0N!!(Z9MFIPqVlZ9bZkbZ8&cPdH0aFVb`@-%2'pm+ARB
+hECA(j@9NC18',+ihmFEcD#ibZabXEMF[Lif9r)2f9r,*j@9hA(ih,!2V-R+mh*B
+2q,qc+iZ9f19ba%2,mDMT`*HVf2m4$IjFDMbqAPBh&jIbq9bq0lb+rMq[PFV)"jN
+mEPHjb[F!6PC(l-V3j@4bXRbJHrX8!Z23)183%N!FP*@*LHehrC3pP*Cl+#q9Nif
+0aXVbZ-"HL*L#6+iq6ak19l(,j@6PB`0If!5#KV-VP8-V+qf#88J(#(T"(R`D!Z&
+9iq9aZAN*A!AHD'VMrMpAPib-13N"dq9jH0PG[aq2h6'krXjCfI"2NSh[8D10PDc
+mD)2T"$%a3@56j(,pR+bZ[4#aP!hPJLpJ'`Jq6f+)rkmVhmE+lTh"d3lM!M*R12a
+mP!lMK,)6K+$Qa,Z@!blihEjA[K1b+"#NcPf+pl(BLCpMNrci`8q1`HC2+&6jIBj
+A&pP'['bL$E&Ib1-S+Hm,Z)Mfr'59d842jrXqSS)LCC2XjA'$Z$6l,&1bH-LMql+
+r@i5XVMmI+SqkKbfHRMK58r`HFK6J)#+J$)raqrlD%(UmX5F%2&bXVamVbfP2LSB
+j14l#S0mI)bZAM-D9#I6YHm5NRV!Gaqk!6NFVPF[Mm[cFV'SmYN6mM[mVGC@9d3%
+Y-b-q9PGZJ+$6f2BBY[,4(rClSQ2'l&$,mB&!-!N3Ria-F0'NNb[GbY2aY$NmBM8
+(lPCA,qPj'9NI))Tr3mj3Gb40M`,MLHllUFUMbZ)4la[,b[CbH@P@&45qmTU-C2,
+Sj'04ih'lIfFVk[XBh,'2b-V6qk0DMZ`ZrMbJJif9p$G+H1L5lbY1,[4b20ml+Si
+h'b2G#(ij'3BbL$2Yf6P-Cd!RGBe!QrjA'jIQKmmj(IMmZMjB'LR44Cd[+eQ9M%p
+A,lI+pLL"FY$kI'%djHXdi$XEPKBpcXGB3d#jP8HAM-PCN!$*pk)(H9j@9frRBhU
+jAVm6)#5"B9TNaIrRMHVM&b`VTC-[MC16MHAaP,6Pka'I',N'9Nq16-Ld"8r'(-(
+f0PF3Ti)*F[MdI(m[PHGPIUiqka[BbXEP)UC19ia%*P6hVU3A')(%iS9I1496PS$
+!DC(SDCU@&"ImKrK32j85d2N#`mI+dr,SN!#A*mF(16PHGPC'XjAmLQX*rGHD'&K
+"ia1rT[CpApEa$2PCARFE)j@9aFBAVPC!UI(+(4SrBic8r*A"3j4D4ijJepMpKGk
+!qSLJ9%FeRZ"mb1AbqhlEfI,aNm[T-P--4f2'&QrNTZpCaFT6rmIZP6-`2if6lV+
+R%`jBprCPHVM+pcbq2M%6mVdKJ1AaPIYrCr[l2XC'8c"PS9%NKTli0+0(ae&VbKU
+Z*PIXh3PA(iQ94"fU"[1b[[FV)dq3!!2!ZNMpY9`Dc)l(+b[IpceH*MBh(8j!6#*
+"46qcMH1ScqaNq@%lMC2QQ$&)i@,V$K4q[V-RPC+KS@h90!6ImIPmSZiCAZHrl2X
+FEM'F'+8aD`QqjNHrjY%Z*'-Ih-V)iQ9hAQm[f5jQ3Qqpb[0iq44r)U"fhM!NBh(
+pa,PprPHA4F498QURlq4fb#"Y%6reFESZ*a[1rPl`$qAlrMjA+aU2mL0K(iZa+%'
+6bmM*qi)Ir,GC(TCA+(m#-&EX3MH1U+"1#[ImG$6q9MGdc'Cb[Fq@Tq5BV+aQC0b
+3!)J2lK20PHc4j@K)QUb[h&Kb+j[0aZ0a[j!!,IjCA[qAm(')Qq1D"f9PH0ZP4Gq
+cPQ!cMUaX['UjmbZPCj*$4)EbaF9(r6Nf5C3[@jAM8H0b[,,20#X(IDV#,lq94l(
++,rjRXT!!le9Mm)%ibabFFd*&6L8fdFMhHAap2qaNm*9@*$l"K!S!iir[,1ImfLA
+E5JCP0L)kC!((US$J%+0Z9aZ*PFIbq0V29bZ'"(mC084!B@k2(irBmIcQAf%QRR%
+(e!%I&)BSCS,#%peMF[G-YXQQ*PIa@H!@pq),IaLA[MC'4pA)j5Y%,4F9fBBRPC2
+&EE,9Tle4"b6rr5YcS4m[+iB@IijA+p8V`6fqrPFEhFEMGd3%lFR,5&HU,ffH3aU
+j)MA,'IC")%2D)4KR9[PCJq-J1ba8XMb10arUXQYmlhrI,[+GqMaq@f&#,h(b[TF
+FE&e#)Kll3NK!`bUXa,U)Z6k3!!IZLlPqa2CPG[MCA[mE+l%M5`cFGLQ"X-TImZ1
+UK21pmZE8FR*rS(R)aLm%)UKcNG[jZ4arF6)IjKVeRl2TF[q3!)RqaQQUV6M-,rm
+eD&pd,rG8FN'[pB&I)lPQa)SZC@6lM0-XQclG88FIf-Mq4V6,3TjI%b"m5)4#B5a
+T[jAR&j4ZJ4PBhj08%JZT&3UdeQA`mVMI!VLhZFTD$A(b[f,%TS6+mc9"0UEMr3-
+0r+*h#J(afDEK0N6L!Z+)#2#cNH24lVM+ld&ILdH89LQ",MV3`BmDeb5lljCGkSj
+(RCA%-FH0PI!&rf!%'HH9[q@CZZ0lLf*fCAmVPHEaU"28S9KkiL1rGFIXHkbL#+e
+!q04pFV'CNk!FBCJMXB&DI#Ad$4R%&8"$GDjB59UDFBc$-JCMFXel#(qR+bM4GC3
+-VQ+`ckcP+U`LVPHUb3lV4ZlP44#XLSXrEZQ@S01Adf"r'j6G%N6(',B(5CA+)l-
+4APrXjA,CE(+Taf35qGjCNYbFVL&lA*8!P3dbD$c6+Ua$h8#f5"5FS,,%ZJ+3!1Q
+9VF[hQ,BRV'E0bEbd4LPYNcC$9QT)"2h3)j'K(d@Z`$N`RY+A'-aI'djHr@eHN!!
+5I)hZLf#S#'MV4C!!8#(bq04bD2(pKb5TDT!!AH@GNjE&aRJ!ZS#)R"2lbQHme#K
+Pj$e5eClBUDN+S1mCAfLYrc8*c3[0PT8'#(VIjpaEh,$Ff4q0bQ'0Y&4E$*arGjH
+9kq6aM@J9p4i@RhPSHj!!cC[(jEB)YD[Z5fQ)ca65N!#E2h[,0P"Q"YX-45@Eba`
+'QZNLHebr,lVf18DI#iYeU'VA#irPq`P-@dJXJ$0jeDbf-C+Z+*MjV-('9q0QQAl
+I+iaG("359CB)SMZ&dS*mYZiqX9D[-P%r%@@a"93$*J4A@PeE#3DJZBhDNRL5R+0
+`3T6&mSmFJQS80XGmh+p84F#DY@F[X6@%F[,'(Fcp5M&Fblh6@%h6HFEV%mcB%NF
+ecj1-2S$,i$Ik0,M)+-A0jFM8Z-FQ)@#DKPIZ%#4EEK6@!(PqaNPTR+d,-9aLJ&q
+B@eDJ@K!R'Sm[*lHLET5hL$M"Gi0GCP8Gd&9BhmM+qU5#BjENcfR9T*-jk5K@6Hm
+FJJbUa&Y&NVXb5)SQAX#C-iafE')32AELe9"J'I0SrbpK%ji`@$Im4AdA5FF['BR
+"U@,D$*cK@H24iR,bMG0Bq+dmK9XK@YQmja0#)dq#d-#CE3BmXjF2T'F-fd-U&%P
+`R2'ihZQh*ijFY4$@8eN`hUYjhlHNNV!dYM$SbECEBrRFEMmX`9-il@B@Z-A#Z94
+483R%e0rlX5Q*+%XI$()p9Z(%&h[U!*Ua'00DHBZI(mYFeYKdE1FF`mYf%1bf@Z#
+(Mj(Mif8&-h!FR'46p9B@M4q4*EKP%C0DYFiGEjp%$TV1TGPLPE'TFr0&cML,FI6
+Q'PFbjA3c46,CY%(2+3E#SG-GTJ1CSb3*ZYXfT$G8+QmJ[dR#@6k+45bI0GjR+8b
+-VLQQ"bXVeq@@iLq[PHANCAP!3!9f+[0j(BT"NjULbDR'9a&fKHj,C[XBf9j`kAG
+#1%%NYVQ`m!B"TVAmBQNq-J+FIC["86GlC[M%#JXQS#`XXSG)BDF3l)rNAX[pq@C
+mf-BeeQ%pe+8V8l,Y`B&DViqRpi5reraYkFe&LD-$V%QpbLEKTh*91mZG)bkkdY-
+QLB@P%pQf8c3'$$iiaaJVa[r2B*N$MeCClV2fF[X91UUBaYHhpmUrFjYJS5`GmVM
+mIk!dRh&fFMG#6PRGME6HY*dhSHAq``ILRkFkBAUZFC2(l(f'a#@FPlq6l#bXGZh
+fX'@UrUS&D`h3FRh#q[bdVI,CVNVJLC&NE-H6kZ9hA+2D`ihZR-4eA'i`+9I0lR+
+qUiU"#RXI9md0IXYDT3cjIP-M+TL-VZ9NF'6,EU8DLC@@jBbXEhqArCPFE3ra-P2
+ZR9lpMhefHQD+qQb[h0`8*2FPUHk&UHmT24a$-GNR%TPHEr*D#,("@pDXP"68#Ih
+LM99*!IpmV-)qmVPd1*NBf59BZ6Lm[SXP-S$YDNh+j@R1T6m!'U#iU21"bD[ClDr
+d'b[Sj2ZVL"CaJ-LUAAM[$#('T[4*XaEmEf$fXp160HkhJ91KNjDQC[N(Fp9)M"p
+a`*m[brA![3)3m9E4#kQ@9ap-S$mIZ[fF9Na'64pPFqYQZ2aM-k,m3&CQl68Pfd[
+@-bSZGcCHh@PKA#C4bZ+&TPY!6AhMTLVhf[-jBJbdGI06M"4A`FqiN!"FSZFXfMQ
+kiDi!(1Hic'YafFheXqhR8D2,0)$PXq$GQH5fQBF*D2fXmeEHRR1GrjMlIbbU1KS
+m4DIV1MUhLBCbb@DLhZZ'9AGe"[cU2BqNDk*lpl1NSXDQ5H'!d&eK2bZAm"EG@9N
+#DY!R`YqpPDIbNMjDkFlF,Hk-b!['8hDQ)6JM%FIar(pFm%ribD"[$FR`b$f[Qmr
+IMH[V++J3Kkc5T6"FIMkVcPd&e4+F#@9a[E04VLC4`-,j4!jT[@iX+19h"MY-D5f
+-(AGYaPT@P%c+[rb0LNJm9*XeBH9frQ(4C6%N-qkd*a+UGdSbEK9Eh9#`*CYNZkK
+4rid1-q&TD260VS*6ScqDTiQQGL%&DRXmIh!2"ECbeb)(mPa!H`hRJ&-,-QLcVfS
+dc2XADd-Fl(U!T`b2L`YqDI(cbmVYJ@C"mfkc`6(ZS-kG9AJT1`Uc1P,HZRj5qKP
+Y&,'cC%0A$YCPHGMGebreqCr,rEYGB1laKS'D5)caA6l[,45ikc+SqJq@m!@XefM
+U2N,5-irkIG1cHMDY[&3Sj6AfCJLb$QLqVbraI9qrq$pREVG+b2(+D9BfFM"S(($
+ph$V,f[FmEm9VAdSR01$l3diZ4N8rZEQj3FirPS-pd+2aq0kAdX(`2arl,M#bZ0f
+a$C4(Cf"%K2(AbeYc#Yaa&br*b[(18dTRFRi25irG,S'L(FTA"%fhXQDMPVbH+M$
+ih3r[lQKjUSA8&-UMUXVf2,@bZScVT6,aJFSkA[ie"*cLmC`cBc1FIiY%jkr+jAh
+mRfZ-'FlY*Y--dCq,NGaaHr0qrrB[DVT)mEeHkjE-Y#)M,[jD#lS*RieDJeV,VRU
+VQD"bB"9+#KNmVrVh[A&`@Z3cZc,K@"AV!br5'J@a5iPBH6`#1[ScB5aNe1mTI(Z
+k,V&RE1@H8R#FcU'I"E`f@mFMmCd(8c6"ZhHE85&Qap*NY3DF2'9qm3rMC2qhlQ9
+Dj@0ZXMk"U*,5HAc*Xl4"FA3,!J[VkEj#cVe*G5RIf-VpI+Cc0FE'bI+0D`Sj2J!
+phbNHFPEq*ld!3&bm2G2ZDE#6c6,`c%m['XYV%"fUEU,RB9Ef8FVc8a2UNG9d[#Y
+P0Gii625@0Efq2PHeamVRPa(qcPF2jX6jd&VD`9"q$TkQ`$e06"DS*(k[e(8e+r0
+cA(U)q1[5c6r(K33VMmT-cQ1ZKTi*d6VZR[HZR4)2QprplDIHqp"&qlVS1Fm'Tqp
+VS1IL6S!N(jcK3cQZJR-r59HNHGAFjY1EJVUk#Uk'Rc1CLAY4mH#E&KqEeh6J$Rp
+2H`Hcrh""l2XdZBKk#hJq,d!0UrS1Jk$r6S2Ler3D$0qcr2eZUqppl%p[S,Rl2ar
+MpGeaqDmANEL#$FRj!X"2DZ!P!52Qd"Uf#$e-iIYKXC&lTT(2eX%R$l1YJmJ#NDe
+jk$m%M(cFARir-Bq0PTYlMaVH0cp6Eq""IApGq#6MbHBRGjHrJair-3GpKmab04c
+e6HpcB@q2@BpCp'pmbU`kE99-rGkLe`kVR+UGR)21UVI4X*(rXlZiFI(NFL*XT'2
+hm'jh)*I1Mk#$K4lIG3HI9GA'VY4HlDUm5hhGE"kN'*ST'2h-'Tli%RRaZV[C-l5
+amH6(qMHjV,4mIZGL*cc&l9AQPNBrDdmHIEq90Ne2bJ5A1(TB14Im1Uj()S4qN`k
+QYJh'GJe9KMqM(YjfMXDb(,92dTdLpllD4X2,90RHlS*@LmbYUEh(UZBR4SF$dBe
+[pHTK"0@)6EP#D)`PaZN`qrM6L&P[%P52qidl!GLA92!PUHVG#@TRi(ScZcMa+lH
+eh)h[#Ji%IjeZ)Y0L"[f@aMfrDeX'Sjb$bCA)i&61L9d1@N6Ef4HhqTJ"*AA!*2*
+l0JNl,R)2)PFMbUQp"*!!FMJlZ4Hh`S-&[b+&C1l@2EimEaXHXa+0C8hY91Ked-(
+TqR)[GG(JiF(I)KX)ACl@$c*A)hIP3GV@`ph%VT0k#1QLhYCKe8jf4C6#,@0%GT!
+!HC*Ji%%lmd'RJh,52U6qhF"`4eF1MM6Yc$I3imEN",UKdXY64le%cZ5(86Ee0a4
+V*%(De@*B6[-Mh&J&#hB+Eh5aR3Tlq0HJTMAQ"Z`8A%UFK2i&06jC(M!&#lk-`6q
+!1V%VSpC!3*Kl@QMA&K@c-1GpGf*pc'52jDXVB)H4'F%e9e06H)6rAUVhNHR952P
+AYCdQ*BI[Kh@iNr5RAhQ4Efqhp9DdC0lDlU28irN3krZCZ*XX[HEh83bj@*qDAHC
+b(ArAKdm-l14lAAIQUXjAIZUH4Z*hSaVAE98kqZ+l$mrI`q6&[H6RBp#(F9Nl1`b
+,bbZF2IaDQmcPE"96Sh)h%rb)PRKjZX`qFMjf0Qif2Zq&$Z,f2b0r9Cf-)pfF2I`
+lL4LIAdG62Qfp,[j&,94Xh(j81dKh%DP+YH4kIC4VERjA2F#*,cI'PFpq#IcrCA'
+qjk4DlLef'2kPj+jqXjbEc(-BQqZ1bcIUHl8DM%X-h$X,bbcX2U4BI8q45jqbk,R
+V2jqEh8h1kE,mRb045XmjUSGpdGjC9%bYMFp@CZ6RDVRkbfMFa&cGCDkM1b5Xre-
+j$VS+R,3qTEqRiQ@KhG+cTTP4B-"22`kQUVC0E$VjR-BR-A(I3eF2i1PKp'(BH,%
+jA151HKr"LEkech2kkq[0Gc(qf*D@A-H,cd[0qT!!lLTcBJ9E"2fp+bjMNcHBYm2
+[S0p1hGj,jkcj0K%XqBM9F1`j&663l$RSQ"5br*MeYKc&6@qRL5ULbjk#me(15ZB
+j'2TDcq81ST@A15C'GKe&Rc'2X+@Za0pHef(fXDmQ%,TR2b[R6[+KjqUTGc(Yp4R
+F'qj'lh(2@9YCmQAQiGm)YU2T@["QjEBC[Q2DjpJ&r"c(-FpYpKc'GPFa2[Z4IFL
+qKhGEICDVPma2XqFKeh*Q4,,VH6X8eGeer2E(,mUP[ZaM4['[*[B`rBa*Ge2Xm,I
+FacQDS@(-I'jqqqI2X[!KlQ(43r`Z1ehY$DEE8m2dIm16Qp0U2kr)D#pacQUKjMr
+eM9eR2bHHUZBYqbcX@c[Gr[iepRFl@H0KdD,'ZJJeh*e&UrYVHrKar!Kr"eN-1,Y
+meVZ95%'G0ArV9fA-H*HE$aVcYH"$`-6dIm14MK[Kr"cm1qcGE(Yi[19P2$[Z6RT
+ppL6HXYll%XqXR1QXSGh(V4cpGl&A$[*m&m0C0XVhEl5Xi![I2bC*1,bI8jk6cmZ
+VX,I0"+9%Ii+@`cPrUC%1ScY9LGV'`r)fPK%iF)eXUCidrrLPDE,0B1bp56$[2rZ
+Bch2m``#m[Q1BjMrfTjMQ,c8Cf`bdE,4SPNieIFFQAPSG[$Q1IQbaUmlfHSrpa"-
+V+(YDl"f@LKQ`pci%2PE+'%Dc`)@8VcB6)9dG,8pcBI2q4e(ll+lXqMphbG0Iq45
+iG$YTrq2+BdNQc[ImH4TG0@GAEd*I44E$(mM,al+hiH"Y,1I-Yr8cNT02THbNeGp
+bE+YKp1ifmpJ*p6Nf&[YmIpeKL@8rFFjPmh+a+iDLA2[)G[QTX0#d%$G06ie2CFa
+LH9X1SZ0H)c5iEc5PMpV"3`0hH@GRefrX+Z'fmk09c16Y)0GF5qBaj9E,k1h`2iC
+HEMTU+Mr(15+H9c(h,D9EdDbhfh#Qr4QFQecXcP8TYep,Q-I1m2AIFmA(rpYGhfY
+6H6+8fM0kbil@*,mNDZTaq$KAd[%XUVQ2rF59mLiT61LmA%j1+rfeF(li14LE$1b
+lMJ@%5C%QCkI+[C%UifYj5S`jHA2l1ZdHpm#C5f8ZmKPBRFf8r0f9KFEfbTELIje
+RF5jq*Lpp$UBEq'9Fc0lTEMc,crP!IbHcQph+Z2*UEAFBG,b)pa`kRX14BBqbQH[
+Hi1kNcr2UF669A*bmLmmL([kVR)GY$[F[5h'*U,MXZSjk(X[RFj!!l!V1aV,13lf
+bKi80YC3fhi,b9cPRDl$UVAI@(143-kM%p5TcN!$SUVR*-rB`q9$f9jk48j9Br"l
+2FlfaX*QFc9P2d9T+a2+bpaLqM+cXfPqlFA(RH6$qB"qZZ,+(XjXbP+a2!KZ2*VB
+YY-%Kr"L@(294S`GRPkUeTD2md1SZ*A*j'SZ,#PJ516U,b'EbHIKiYPcN1ia,+mX
+iHH!4Y,$NDJS%h&a+cXZfX,cc)Y+E5e'2aV,$M@[P92-A(*l[YE+GRC@*$`HcXmH
+MBG*8E#md9Gi'SRfA)l@T[D82$PdZrL@AD@rIbVIGq"$[GKFCHPTLjlf81qPA&K-
+mA%aG9DDQcKrfRHRR042%rB"G42rGCiQfKh&jk1ScNVQ,bCce9ce9Dl[aHFKe'Jb
+fiKh&+E2f0K"aSI!lRNfNc1`B[Ff%qCbGlCblc&Qe--2Ff&aj8f'C5d8Zmi&KLE+
+b&dj*09Af(4hQbe9Pmk(H`PH(`@(V@8rrQBJ2F`phB6qcMFMp99FD@02mQ*Ca0[j
+8296Y,$kI*PfrNc)p+EHm'`a*Q(`SIc3qG$qk(0c-iNLP@hC4Z6YUQbV+80PLCHi
+PiNh%fd@mp'2ECHheqS[Ic5q4R*Z2U)e[qU*CA&P2Q@ePL5U@h`0lS[Vq9hdU'fc
+8Zif9NiN6%ImQc[0&j-2NcCqPP9CNGlQbKKm#9FApaj&E&a*A)r9'cN1iREI5aDQ
+(J5F2[TPP5QCb(XV1UcN1aKj&580CU(DlJ3(XTfEKi"MirG&Z0P$RBYaQiYj,-V@
+[X"Ll,%h%lcV1pM@Zmf'Em#9mkISSXr43jUCFIQM8ZrhFUfPhP9pc1`idHhlZYKa
+2c@%c$K[m-fephh-1,YT1*ZJUi-ZA2mU(elMZlq`Rm$`26p2JjS2h*B"Fe$j0PH8
+)X1a6hc[e5EIpdM0dfAZ*QF[Z6cNNR'dXUYV)Hjd[*lQ(1`lUTPBQ$$QVcHc5U$J
+3``k+9LEfbl#P$XV!V2a2+PhMA`h-VlNr4AmZmXTmf'dKq(+[2m*rj8"pT$UTF1j
+MbCfUQBm1LL@9lF9dLmYr)Kmq("X-IK`fZdKmL(G3i-c(i%1FKmb(IP5QGQ@e'2b
+EkrfY65mbXa)E#PPjjEc[02*KmkUKr9'a0aHq6BFMJf@2YpT*R3q6$jm8!ZQQFM!
+aG&U[+e-b(JjUmdXfIYCGjSKhjG`3bXVccl$T,bb6r9e+`a,M`*C!MC5Yc,`mI13
+dC-l8AYU2E%PcYr([)GhRBI`668imq(K`lc5`f[*X2&cN1rQCa+cCBNfhi8Z41i@
+A[Fk6[hm-cNbXk3"cP6d8D0De2-G&LDRAc-21blcHq"$C@qdKhI*h82P68p@f6e6
+,MC5Z6hpE$IalMXk`f!k@eNh'A)Ci0KLBYPH@&jfF1[Qq[l%Q5Q4c6!,$bE+mmQ9
+Mm'Ad4I2cNLGjmLhhQjXjfG[Z6qUXRi8b9@e0+9iRMf'*PjmcNE@BAd)FlC6prBA
+!RKAlXTJmrF`f8rZ45TX1LBTXhX,c`09+m3c@l*6)F59mHAK6Er,iZT(Vh%q,1`1
+&'JKlN8hF`lbXRQamA+j8@62XL@NSH[EiXbeG[4J8E$([pT8d[)V-5[!jb0T$hFV
+N3l@YKhmHibpkd'91(`Ud0ARbBGf20Tkc%lR9H6UBBH$Pjp#cKfV8GFHIbA6cbqB
+6d3l@(Hh'DXVbMZEcD9X@0*R'e6'al@(45,I4`qPC4CmfbYmk3Vmq(J"[Kh%2DlL
+4FELF@,+FU6HDlc*0jDjd5UrVZ(BFMb)H&'kR$e82C3E$0k+A1aaD[+S$cqC$ZjR
+*QPP2FkLI,j(DePl+[1bRkLC5Q8V&MdeNq9LE'6F@Gj`)F'9FBXfmPPC@,C2q26q
+D22i8Ajf@XlI&PBr*fq(YBG,TH6SK,Y48d[!PFQ(,cr+Qh'LKc%0#(JH6-)Ik@(J
+m#95)HPhpY5QUQAmS8LAF@9jB`rZmLCR1(BI#j0PTR!AMm1ZmmUBJKm#QKd8HHAG
+XIC9h$,Tfd(+h8LmQNm0KMfdb*+V-5D*rPjqiPBG'`YlrC90,bUc%h-@'Ta*F0'*
+,abPE8`jfTB$-2cT-l%XjpREm#Z[k-ENHC+qj,q42KXiFl+XiG00Rd(KlI)FHh$K
+dZjKj1dKi&aCf8rGEN4R(j'Zi99RB+06MlLpKlQ4Eph$YTI)cX2"fN@IPkbiQhZj
+KYTPY-kVNEq%U@h8cNYHh65E`%%BiFGFRVqIHhPJ9*h0jj%'GQcr*dSp@r0SrG'K
+a2PG&RBG2(Yr+LDU9bCPYD3pc-d&GfYK1hHmm#A1r9$[jXFcCem2ic3helqRSkUI
+pI8XHMcid)p&l0YiG,*Q9G65Pp&SCGj0RbVADc*A*)Ff9j[l$%T9m2LBPPmUIQX+
+`qlF6IT3i3p(*P8Q[4I&9UhI[)Z*Z*Cq0FEMV*rCEU(rHNd&kE(i&Gj)p%Q*-UVb
+``llbBHjMA%@05XVHfP9PaCcj81dNcpe%X-Gh8VfXINpR'PhZeXUc%e8QIMl5(AU
+SLV+P,c,hV3C@Br#UiEAp9CH403RNrI,d#H5f*abT4)ih1QPh$QG0%X2Z6b,(N`m
+2HHm)R@`E@5HeFaiEL9MlqX-pXEbrdd@IZUR%QPVYM`b,LcRF+CbD,EfmH6HBqGQ
+FLrVkbimi6QGSiNVNBqfiANcEH,2i-[UEL(b*0aA616$,[*A4fYpfYC%e8aMZpV+
+q4,MA'bUFH*hFNb,Th,'(&P%rRQGqr'F[*Kf1Uq[-l!GUG[j&lVeHYQiF1aN6mj6
+$ZG(mZbBlQdQ5Li%3F[0,i%1*hfPKmRJ3qp$TGM$`1$-)B#N0[@r1bd1%bS6S#bG
+pUJrib*pBAXB1"6CD22PBp6F@&[TBCR)`CXiT'fN0VZSI)NAQiL5m0qAF[[2XDR%
+KQ@X0pF@4FAi84!Zh8[me*Yr)VT9VkIN$Xh,ACpiMDa'R*Hk9iPlUSH$X4fZ"kE(
+DVDc$i8Qh`afp312Ypr"TjDhQC8@IJDD(Ie9jPiG42h2J5,JG+9bG3efXIG*fj8D
+C1fNdkZ1rM4#NMJH90q,"RF[$XI)*GF+(H6'0,SXe(aaflke(Cd8Vj&K'[1l1ia,
+NhNZP(Ke4PkembPB8V,%q-r8YG"f%rkrI0cKL@RckNGRbDbm6Xf9aQTSl0K`)ATf
+TQ*fZaKf2TrXT5[jAPPm[,%2m+Bef,ff-rZ(6A"Sih&RiejZ1XKl,#XY,$qlbCQF
+i0KKq9D9+GIbDD6(Rc)0,$XUfbK0&-S1Piqe0e@(IQ'L)V1h(Al12bHlM@965V-5
+Xk2$fN!$$Z)PK63qC(RfFjJ,Ji9-+PLCD`p0iG6NFe$3c540adZjH(5[Z(XBHlKm
+qeplV)4dC#G'hl+XMj`lafrJ`HbLcqhl$NCf`M1h2lpVRf&Xbm6YBXRUX21QHaUS
+e,paH[YlkYUkRT*X1r`pf1ITI*KerN4Ec,dcA3l1Zlq2Elb`Ncm[5*Fk1r[ZcPh[
+De@2K(D@[f1MF5q6-KdaN3IZ9GrUTPjEU9F$(4XX1(ckbir996YU6TFNkC%2pTUq
+B@#8"V9&qjL8,$UlLAi-QP+mq('LN2F'Cb@hK*+P6kd2CU8l(&q&$rZAM8l@PUCq
+2fCH#V,LC1iF0pZS00$j-6Zl#UYX[Hlqb`lqM&Rm+X0G826V(4B6U-Zp[phYDlc+
+lDGmT5jf*BFLiXXI93rUL-"P[*RA'"Kk@aLIfh[$KHh6h54Cadk$bkI!6Tq6b'1R
+9b,IK5-5Bae)plDlq$[l#ecYKpIF4CqeMmQEKPhk9RCR9BHrK0%#rl*b8R$6V5m1
+r[X(p3kZ(I99[XC-1rV)XbfX2pEb`XVI1&l)cMBG,#H&EH@"I2(5Rk1re8)kG#2H
+m+(6ef$+l#PZELAb"dI)IqR4[Erc)PRHl5cYpb5L[-eCcjXqAjm1aQ5U9QUP1!1M
+h&,Zr)KfPVaBGEH@A)YJ*3lTb8ATU8GaBANYpj3frGRb!NSI)Kh-QIB9A)M(&VbH
+cPiqGh&CLEmhHcEJfXc14,1FlP$Sir*eeqT392rTYX4Ef'M9AN[([Yr"R6#0ZFX1
+I3Km#2rlEf(!N6b"0rXHl0H,0%D2r8LVQ-qBmZKjkG$'bfji*Q[`re5ChjSG6'YG
+hf9[USXLhUX3P*YDmhCE,$h%2SU8hpYjZHqN%3Z&B1T65Ch#lk,2mb0B4q6Qk``"
+3GpCe0[`E+hmU'fh81Qmq'rmJfcp4#BaF)XrRGV)Jh-2&KKmUAmk984X2@'a04VX
+'`Q8[Vh"hTk$r$SAe`mZIjd6,aUAjSplY6Cdj2$*2q5p1GiQ*p5b0bGqT2VicSf2
+XBIKhQTi*Zik9S*Yp(hmFFQQUF59HqI$&J`CX6YAfFI,hVlZ2'*,ec'mKfXD4EXG
+'Gb1&6(4kaqiYpkkFBlF,l10$bAHCA$('fPBT+l5YTKNDbP+[GK2QmMqfh[Z()Yk
+XNY,a0rC[KaqeNA%YjFFU,((hmDZh'A1DYjN4G+5U[+I,3l'TRjH9bE$f,bEp#iQ
+Cf9E@%,*1pf5GMh&R52FEeprJ6Y&8MNkJFQ95e4i3k"#Prfj"SpCf0,aiEA66F29
+90+EHCV,NPaYlM#S%,@3Dd8)m'R,8H42PbIScp,TSVNP1&&Rc,@M'UEM,q6+kb(r
+#(mZ)`%l'0f'(U5l%8YkU4H9eV(Kp2JpVCBI#Se0,K99YYC(4fYrZ,H&ijHpp4VQ
+10(h)ifFUiG4([*G6)`iXl%P@ZTUlAK99aY)F$GDQ4C6KUPGH[&GHiX0$!iEp12[
+pM$TR6MaEhK9-1MLcme'hmD6Hlq"5-mbb1!ZI[iXrH&ebbZ0cUC&aB&eYc@Car)N
+p91cXfGIaF[1mL(cSNh%jb9HkREhN`lD6A%RfEA%1KKJf&)a45)1j8M4`kDT,a&j
+-cXH'rlQ9AAeUr`i8ZVVZFUZH+hVaVK'T4jdCVJb*mYrpZ"jlIV@Z0d&1cKf1&0q
+GL(0J3,MGHa`KNE"VKFMJGr0`reDHTbmlFI3arcDL0bGaE[22jGZ&ldlD3PckCDk
+U'qV-0S+T[6i98H$l!pfphTT2XN6XA*%qZN2Fa2fEaG2V,QiX-IA(+Zf0E6(f(MK
+Dl1`mMmd#N!$5VA1cEFEcp8@mH@rj(#X*MMIqBQrXa[mj@%QiG5q'piF1GmJc5kJ
+b$*[E+pl@#0TR'phG[j-Ble1iRB*lJpGIHR3Kr8rT[BCI-51B*!'c8A5GG+j&'ba
+ljPdLei!+hUk2F3dRqQrMA'&j0K5i0PdF2$dXcNX"G[Sqj9dKCZ,lI`aCpG4Kj(b
+Tp,Ib0"',"[-V2ZFLM-`hP[pFihp9c6q@rmQ(!rjV2S&#$*!!&`T!IQI%J1!j)#X
+a,$$mJN#HHS3R([*PV`Sh*VXi9A`F*jErK5E`[@Z0r+'rKT0ZK912`Y5"q0AHS'l
+Da-aIc*fUVVb8GR''fdih@iqJI#9+jb'(G'cM$ZqeJhQ#A2iE+`QdpC1dTa%BBhd
+-I(p2`)H*F@EpEI&a%KhfF92NBf8Xl'X)Q"ZTF#EchK[0Sp0jpficAIfGjBFr)2M
+5cX1`Nr+RkADaIR[6IFM45UANR8PXZUKi1PQ'q9C`q4(kr$AZ4lQ05X+bi1S*9FR
+G9AbVbcYrcDl6lLpcRjUcpr)e%c(PFKpQrYpaU5k$qU([M*AB6l$N9Q2*Z*KDUKd
+F1jiB8$H4h8LXqIER"!ZG*Mm(0#-8,lK2ZiXANXF@qf#F@GMhNUei8HfVZ&$DqG!
+FUk*U#Rq4Kjh,c[eCGBKpT-kLphm1iNhPmp1(R@Z(VTR@5jml94QZ(bAEKc&Frdd
+1$C4lH4(Ki*`@BYr`SGlAHI'aq&&q,(KX-5cBi[,IbiYGP[c4[jQm&VL3!$I'crV
+QA2Ga)RVX4[&chB`mV%i82CFMIBNcQ*mZe)@rGamkh+-CeVF31*TE+mf0R$`-,0@
+'*3B#pqR%PFa*RIAM8Ulb)C-qZh8bUqJrbiNINaUifiDqUcSiHrKh-@IB4q48imJ
+h*Fl$IERJ$IfFq`c6bhr)IG[r*f,@rKm$Hf'(jMMJ6EdF$N11"YA6JF+XIC`*pQl
+F'6e&lRF[HhmNZKf%6kqpl1[Mh[C`i(Fe-r0@(*PHe2fmr09F1k2G*KhK)$G$IH!
+a[SC&l3Nc[e@q#C@[6S5CmbBrR9)KJSHM@AA@'FM**"(fhffRGb#dcjN&SRmb#hi
+2)Ga(j"B%&IJfFbCB*b[*XiIefqUlQU[)1&([EqZmb'6H9p9EB'$j%h,c[1mk2c9
+VqVp96VYaf%43YI$HaEhD3Z0P4JfX$MMr+RF+68jHXUpPY+BkV-SlD@FN`N8*Ald
+KcQ(kAdMR[f@&bA3A6H@GE6`hah[5TA`Ed+,@mcPBDkPlqBq+BEh6*[BV`hNC0jZ
+)eG[LRbqPI4X,L-0hI1flVTm*@QUHDle-f8pa,Dc2pd@9KChN0G`beVqjiEf9r*r
+92FDkqA*qMeGZa[Sr)Z0V&qFI85fRiK!pdrIrAMrP2hRN14lm+J8%X"IZiHUS9A8
+2K[lrb,,VAT[q4B1qE"A1VS"6jBb-5912qeDL$ABC[LRf"arS6Z&PSRTl@Qf@PFF
+$SqIIK`,TemPRAh$`i'DV6VPPLK8PRVhA5,IIjD)FeGdi&ilF!qNjfi()i@ULpKD
+hmK8qFL90a1jKVViF+K@&15F+cp1pe,DIC2-@j6rPceEGUfRqSNh[4($im1(,mCr
+6Ke2b[P4C[8iHrUi#k"4TMP6kKh)+JqC"H8rj))l%@AKi1$KE5`6R@eR+dXIVmIF
+l$VclDBd0CL&VZhh&KMbm6m%lmQ2U,ApfEUHA9CcG40FqT"EQ,micJ6X%kU6H9fi
+J[R!9U[*NcYe%p25MK`pmG1p1*c&Zqpd$5rUFZJH9h*ULrGZ,#TYH6CbUf620q1,
+H5,L[cXC5%j%be(!efGe&lk0QmZ)40HR%kpVL5Z4B66r*diQQMeN1&TiD1GKXVbb
+cXBp'la)IK`fPKF@AcTXq'Zh-@Rh3ih4hMYaj[9[kFIHH9jr!PFRcllIRE@LhZST
+V,(cM`j(4[Kb,Mi"EApb-m5(bF'c1a(jpKL@ePe"ij0,(PBrer4P2Tb0KHr@`pab
+2cCb0bmI1EKq()N[dj&rXC-l!QhZQUY"S+8cU$UL%DF[D[Zj&$0Z13IGblFJrfr`
+i6hd2e9mM%ll12KbDbNAV$fU*Rb#8N!$`P@fYX[83`YFQXFFQmm"MNl@Uj',-8ME
+hb6b8e6`ip00[)D@bKmUrhF12ZBY9f()i8MeYc+EP-iF2q0XrV%I)N6HV[,rck-L
+hYaLlhF3lNjQ'i[@He3A9Dr#HlUZBcA*ImNPqk(bI-Ki2#QEL(5hpPeH*CfIb-I!
+rFqcNGNp142KH(*KZ+-1jX$mlU9aIfALcZ$Ibm6[UbSNjDUVBe-J4'Pfr#Mimfp`
+0cSU%1jS-NTFEjq(-ljabq$K2&eIK%Nb%%MaEIc*R@6Y1R,YGa&l$1e)eRR6F456
+`GcIEqXa(FNSpY$Cr)2b2e%DZmj1C9MQ3!--D-GREF4(EP`EUA5PFNFZZ[C&9HHI
+D6+AG`q9I*birBFNk9AR[$QIE1i3rFNr!V*m2Rl'A5mrF$Qpm-I9(YP(,9cT*Ib9
+*HCdB-APcYcPhmbAedH$m%qcfd2q9+`m'iXXl$rcbG0(LhQ!pBQ0V%fXV1e13!$L
+lkGfASaHMk@I$jc[%c$ARR4[,q8G[k`K*+f"TecYG)JUip28`EbTPiI#MBFfGJER
+5rFT5Z`DiIi$lQAfF6F1BR,-kfGmj)rE$L&-XMaCbF5Laa,8ZTlD,mkeaI-Gb1mj
+h)jdiHRDiFbQAU`C)l")p6+4YYCfX2-R9FRD`d6%jdG2"[0cCA'*hpP2X[N4,5U1
+@9JlL[KiGCe5ZXepR@bDGr6L8+bmc8hUEMc*YjRC&[U8iQGQARjT0`jmlK*,FP0c
+cGFk1HrQ5Aci-#hr"*!`IrdY3%bUVNELHrkF2V,arqZ(%1,(D42*MFM8pcd81U`Q
+A8E$Q$qQhcPIRFfii4#5`m5VE)Ie&G42GXml8eBiG[pbe,RKa+1R%fUF5[h5FADZ
+R&XVA86iH&I`jIjh)[k`pfKMLmQ'0(RbriCh,h$A'iGCH9qFE)ZdUKaG9,m@ilqE
+8r)LH!R%Q@eaCh[NXN6HHRMqR5PiMr$LBARk@ba222'a'1jAHjf92IkF2SSAp1(F
+6Fj!!qT2bpY-YG3@)@[TlM$l+Gq#5Ga52E2Ge+AKf&,XVhEIZUZINCb0cZ2QpcqU
+'bGqJQeZ$iTEl95mGA82h$N5Tf[Pb$Zi`iHSKe*eirc3Tcm$Nl'*j06DkVZHMKdH
+kE*6FCYpj+9,dk1*C159*+(fV9RllfjTDVIdfi8PH'I8EeqGUH4RHbV*EMT6YqHU
+4VShej+cX*pUkNYjTlZ@iRpmf5qUKfZL2QcQ8U,(4h1FUXGMTH!ik9jhpGXEkPhi
+kA)#S5@QAQ$Bf(Lcq0$3NfdbTIbkZPUEJG@EFHICL#NQ)Xr9(FACmk3+$ZpDSl@V
+clAR43ldrRNkeQkiF1Z1YGph(YQh@pM$[VbccX2-'+`G1GkHh3&Se9Vf8,h*cD40
+0,HT1I+Z(Q6P-I&KB4jqeM3qC)a$&#m6%`Y"FV(i8I,@8kAEm1(9GVK@#43P$$q$
+%IEf[h6RlU'fFFpGi#YJcNQGhP0YCAdEISf5H2Ya-3DFb`6QER,Tc16PfiT[N8ih
+jkH56Yprr@rN4Cqj(,i+NlCIqiR"XBHrPFQ9m5pmN[AGbbl*-`kL$HApKkmrYDlD
+$PalKjFZ[PH,2j-V(p@(EQX'rIH$`pT+THI3XabcK)*2jb922q%-qkd&&V`*4l"h
+[hKI+IbjAR`m1(iN1kHA*1510bAc*ZmdePDkIp8@XcXIRF2p@jmaqj0BIjV#IY*6
+a-!d&a$SVHI$,Yq"$SpcZSEm4%N[Em9p[H%R1G-#Cb6rM@PKFl`rTijmBXErkU*+
+IQUZMcUNVqD359YG1FcIAQM1ij-INlKph*qYK[ENrpfNfflk(Z6hL4bLCI4118F*
+%0$"[p6AD9m19F$PIFKIr(+RkU!p`rIdfrCmk4DM*,k1cR[I[*blalpj2DZHmQAD
+VbcRjIJRrQ,$$mQ694N"Fj&YpY$JIUHC,'HrB@9Vf@ELf[i-l(jM$rGZI1KQ[djh
+SMR@&lTiDbPAIUQ@qiRk-pd[cSBQ"qURNcl'AKq6$IQ!8lXDN[8L22RjeDYpR3fY
+BR31lCEkHUq4B@@(ZF[HNQ*'1DR[C4VA1lDTj1SGZK9@fSDk%lFALFljr)[YYjeC
+Ejb8I`eCXZaq9$q$Vlb8E&ACHI@APrj&6EXZapbZ&#9+qGHBqNUUAFalM04-[2a,
+1pf`j[I5[%FFfJrKcE+hdeK5mr"cFfmrG)2dAcXUp2TDXlHka'IG2T@IG2B3m"kN
+eTCQLXVb`mFFlJ3klJU66Rh6E4M*I%RlU-HGGb6A25DQ(!cEfjRel#Ef8EQ,IQ+c
+Q,h8Fj*mAUD82SZlXGA+j(I@%FidTrQ5+ACbm5qS`e0+Zhjf)cmDDlD`a0ZFVIJ`
+V!aB6-ilF`m#,2ZSN[(kr6,PkZadV+jZ*H(M-Fh84EI82,QePVXAEQQq4$EDUcl"
+1ErFqcQl@X2kR22G0DjXfAQp($fXcNf(1c[*X#,V*0bPdiiF,kqMm#2lY9LGUIGC
+b)FlB`m1Tj2IbTJPH9$II%K`(mZG0Ylr5cHUbpjjmh$FNeqU`Kr96IQCmpRF[bj[
+Fc2Aa([eKIGGHX,jf*CRh862JRVlG-5[XLCH'BD3fjB#X[RC1FKaC99cMflH$B@$
+e+HrIbl@LIPfYaKq4PSDq``rZiNZ(1fF-2$BlHjQ3!0YQSVjp!QTHT8d$PIR2q(G
+i0GMRT*jbUYG6IhrR4jqF9h[m'(SRE[jFZY0Gq,p*flf+XaqfM92ZZRHRf-'haCY
+KcNHmh%2C(Q#X-2J2,YlUCe-V$e$(Ee$Tfr!(Em#''qq#("Q8RmCLYr'2DVh6AEV
+@bTZ0HT8VlaT9,0)m`q5q(ErpT26YbhhG[@cp0bCDq3-pm6Ji@&TE$%Cll0RDllN
+f9*p1lI[KhG1pAK+9'Ua,ipIRCUm*5fNZUYUkrVkc%1S+`&4-e9Fj&[Ge$ZC@2S+
+81ARm''E2Cf9Vb(,`mMQSD'k2CIY*GaZSI),6FYNZTE*GIFT'qa,d-2NFJqpmPlT
+ahqHMpIbCH2UV1F5qUHB[D$`m&i2"IcHU(Jkafm(P12"bZ4j%Li[c'e`)EI&XZ[Y
+HcKYTI`cmiU%PM[@#Gl,3h(DeA--Gh'TSFlD*hGe+P$Zm'`bh!P3qmrLA&R1Sbah
+Y`1pMlqU1hk5khm0RG8hjPpP2J3mP(BqHPiaTq,LGrD(Sfq0*S3d#JcNFP1rK0[%
+D@(rQicANc1"+rR2dVmZr0jLGq$0M`4mGicB@@*!!f&SpAPqSj-2S`qQj,f*4UU9
+ph-[(d5Gr,2XlXI([X+ah-UP-k*pRGY4hFePRKhB@bkfMNZM61mMNfAbfI*h%X)q
+2cM(EdGREMYaZBam,,r1YHbLr2j'fKi4e*E#(cpbGcTcG,UXjCA(#N!$(EpkeH(E
+rPM3q6Z2I2ZUKf'aV$FZY@Bj1cMfm-L#fKd99c&lh)pHAj""G1pYjpT!!qa$I$ZF
+Prp1iTG3IQG1h%2er*Eq3!28Yr!P(fS2EXq)qcXqaHE6Nf@*Iq60Z1$Pq`PFR5bk
+6!Ap$Q-IB@hS`i'!q(BlpkGMUVBGM,11a&PFMG@%HAMkCqABUiEA!mL25XG6+Ke1
+%HN*6K11aECH(GB8UNNGa0M-j0NANh8Y9bi5@[clLbYT[@$XCHpaiGV(NiHUS`Qp
+c[eH6`*+PPE9bGMIZhBhl`l&2)[%kr*i8,`l&4rN'Ie*fMKhX[QEJl$0R2QFKdlH
+,AEb6H@@*XS[2@92(k+M$pH(1jHHahBI!i-[Nc1"B(GKIYhX[1e$`ldIN%ZX#4L3
+rUhPeL(f`Z1rXAThl59F@'*CI+RjV#2JLQr5K`Z"BkH'Jfmaep,0D@CXCAmVc5m+
+AF@9+rf-fii'ARmQM+TE8`!cCqGf(2aSJm&mq(Jl9lH$1M`4(,bq@US-$([Kh)-l
+A8CNlDf%LiLcir*h00$kGpRBe+ae8aFr8qr3`GYah3rq`fdcG3RrP"'CCUeZhEXQ
+1hiX2"1*'(JHRb4$kf)D$2kSdbfX((DfmlGNXE#S,aNh%,aN2N!!l2j[M+mC[#mA
+Zjfm@L4CBPNI$#RAQ@qhkM)KmLER+Q42jV%(@XZF*dNkfb6V9FQIBARGbHIQddIT
+2ZFQ92bmqS(9LGr[4e2j6p1rkG@imr00G8mESkYBmZUGXGmZV$SV)mk[d*m-1Ld8
+1phXbPj3k[F[XkTm`lm1VI4kJG65FKm1VUATeE`G9hSP3FMEakf09b+@QPiM(1UD
+9p[kj2$H6,LcMDH08iPISjN2GRedTf5lU1chd1&Pjp$03kDE$i&P2a0&+6XdPH0X
+Tjm2'%RCfN!$raE@FfIZSH!TDqC'dmM$[pa$IDqEKNRS,Idafl+NDj@fKmaI"RCG
+(1hpBc(3mZj+TKDPP-lkUTlk(D5qFUDbIm,%li[mlM%2kh(DlXGUE"Em!prIIChH
+@rDjfM$JCfZ0frNi0p+reKemcaNl@pI[4(k-paVb*Yjm,16EcdC&[f6,ahR-[(5V
+@TaplQV#i,kjYK[$YjJL%@8H6-(-2M@i%SGcXN!#01jf&+9LH"STAhEc4F1bqM$k
+-U`Z2)XTr$015PTQJ[![*P-1lf6hSN`k6j$eSNjHmHG%Ph,+ifM(6H*D(rCq"'YI
+)UEM[Y'321G"0+-$A09j+ic@YKRRq&l@E2S$[!+Z2*QBMAHCi4S6AKrEbBI+PFN4
+@YL6EIXUc(6Z3!2Q+@rUFp(YPMU)[Th[16[5r&REqTCVc*h[)XfZr#kGrF`I1L5m
+683E,,Pa(bDmrB@qH(HL6-2J5)FjCFaeG2(2&!ahU3lh56ra`pcXTI*bpP2IZA1i
+[6reRRjGbmGRAblrPCU9L2ThjYjhGKe9+E,0+1Ae')3Ka2*(Id6AIRQ`&h2Ff'JZ
+0P`*[dBC9*[XYH0%UZYr8j`Gl82Kh[TLP2$[@EdleY4UZ6IB1eM8Qm6dQmYp`GA+
+XD#CmV%QhZSV+bmllC3mQDGH3!(KY&a&XPrbYlQ,#ii%ZNa)V$%i*[Sk9PjRbE("
+AQhKKfX*44XKiMhk)Ie4lAcSQiRdBPNTHeR-91)RKh$0%cDZhJYRM(T2i6Q2A6`q
+48dQ2*UC-5qKfX[Ri0&Pb+'j)hl9Q[ACA[DeN1mKdXLG+Z1bcHZ[He6b-aipr+V[
+)X1VRphBA0jq3!%-IqUK0`H'ZIJ"b9jrF6klDaVcNq"-l$NQi-9T@FqfXVMcl#Pj
+9P$fTHGPBQpXZ`T3l+`Z0PDDLIXTH*PiGT0[*ALdY&h-[j&aj81pmU'dPBRCblc&
+Q``c-6ZE#mf9P$[ZFV1BrQEafGI$cr9HpikEF2,cbZ4i&K(a0V'Z"jp'qccbm5E1
+%Tmq9G$$jfc[,DE2hq$,a2)P3l([iIJRqY,[2*DN3PhIf9jjd[T,LbZ0PBk0IT,$
+i%Z'P5Kd@DKf9P@a,1FILG$RCA)Kmj9$pPcmLm6c8@20IV1!fKR!DGccV0iV0kcS
+Pf9+b2(-Xi1`R$b@GV9H,EEe2*[((MC82,ar*LAq*U1FKlZbM6k--9Q[PhdUZf8[
+jpjfGKmLihX2DfCmB8pM[fcMbH3RNk,1e@F(NYKj2c5,FpjBU*elYiipabBIlIRC
+fbPdYa+2',RE,%hpK,RPb'(ZE#imUDI'0STGjS[XNkZeKcXXp&RD`pRi%[Vm6&KP
+cm5(`*8r43f4R@A$!9BFaMkMRAfGqmI(&E0a(mm9XrD9h#"PUSeGjM36$[FZ6Um#
+ARX68I1cQAqjR-[HIZf%2Sf@*4Blpj5mUAFFP)rKH"CGITMqI0Mjd2Q@(4rGq8Ii
+32K,PBK(M03k)k*HFUMaN-GrDThi-kYIIQ@1lTe8(BIqRJ&H(GGGDHEF1hF[EkP,
+TEkIADHAcPaj1UKj(Q2,ZfI)mQ*!!fI2*h-49!XiV4hHcXV#ml@Aej5GhpQ[jNBl
+ZGFGhc(hGh0Xk*Y6#ZLCPlb[UFI,mQEp(0lMR0KdI0FpCfh2f@FhhcZFl1Za0li%
+bPXTGj$+a1jXTrDp[QjX1`Z1IPj[II4X,bA2XTP)rT$UVU'iK[j@*$XSCXbm3+Nm
+p)(ELCakGZBqAE08jiG[%Se9aIDNjB5GZ(D9fr2mLMmQTT51MRCfrQFa,jLI$R*-
+2U6HIp6a1BjcBIr8qScIi1SYDAq9YLF'9LFma'HFY+rZqbk6UHBPp*Ql,1GVfhhH
+Qf8hQ2jGIFGhSLF@PbC@*D9S#F[HjHGM4-[HEL*,6YE#fQ(MNMFhMVSLbM*AE3kB
+Pc3I$Z(`[EE,hPPEhk[1`ph8hZRiX1[qlR)C(+j1iqCCI)KflAHQM[@86Q,LEEdS
+CGY,RlZ&M[Xke1jP9hD`pVBprC6-6C3`qT*cYRE4)P0ZlkeBk$I!+II%1K'H(3mr
+Rl,j6kG(5q"%f@L--2Fq"$j35TRVmp$,cHAj1`ZXljAP65lj$BGILGVfHbe)'bhG
+hd2PD0!U0DkMPMR[AJ2fNbIB8Y4'b,Her"HkMmdRSlcD[2PaHZhS[,LR'[U*rQ+G
+H(F@f`cX1AYiViFhNk2qGYph#QGNHBceqFPI)d'EmRB@far"FIJkVprhIj`llRYP
+XTGe2PhPRhr*Q8Y[5i1PKh%60ePUG"qeK[M(6&*A(PbjH2RG28`lKe+@Ua(@1Kej
+rDRF6dj0qH1LA@6[V8TIIGPF9fQSd`iq"qCMMehDa%ieI98SE$Rc`@a1rKh8-@%q
+&RAMM8)Hrl@dKY1rlQaKmKjFI0Tare6Ecp4bYQZ2b9ifBIe'U4*khNpPrUqR)d86
+ZI+KmU0F@&e)m#,U2Aa((&d4)2cSI3a1jf8cqAc['Rf9lh-2JE+(4EcbSq(aT(`k
+8UVXlGjmYH*JDE%HR$elq2q#rQ8N[cEQ,mL2E9,!3e`m6p8&Y[XMR1bjMl[2klU1
+Bk61DLSh[kYpBpPEqTU+Ar'2cA16EE8H)kF@mjRa,ERaaZjhX[2FQAmUXcR)lQM@
+jIjp+9DiRkT!!m108jb`2mDdrQ,bi6-kT(pa1hp-kraefiYGXlAb"B8iYP)Yr-rP
+YBGReA13fiiejB(8VFFDAj9812(a,+(kCXla1fa*R*VVC5122[(lQ(C6I!KdAf,L
+EePVkNre+kZVZNM4B[5'Z)hb[b'pXc6f,YaiqDNr4[AV-h[Vf(Rih15-l$Z+R0eR
+4IqrbcLf%MUfc1HKe'*BCZ(BAQAYH0-"(@Cb6DlK!HTj(CBXUQ2UZH($TAfeZ(T`
+lprRe%9pCpbpi99E4Q!J)jPjffiX[SclLedf$,%$T@%2#dTjh2)06(b0,i&PKk8c
+h1NZ*9VZXe@Cc6eZiqK5PFLir0&[BIeBQA[BG1VS1i[0V&2deq$$91qAl!ThP&d!
+f2'YP(GYPr[b2)MYE+ZrG)-6N[4jI%Vir)1BCTT&[ZV#NA)+b(mGlJGp(Z,+(Y,B
+E!ULKZ*MVmD+c13liXjXXlCjfCbI6iDh"KEXZkh4EKES[C-F"RkDIZV'Z"4Vi6q#
+jZ*UUR(d@DNAYpVl,$cXB6H2b222l#h96Ml5%JM4UFIIJ'MfZiK`1qI$2e0iIh-m
+I[3E8VrmD#UZ2c92r[dVIF9NlBaKLI)Kf-Lhj&'`YIrFjLf()$,R)NhS)Fl%PFKI
+RIFHFi`hC9N0Re9jPkq(G$$kTpf(r$@@p''`1Jki`f[QdYc(+0jH(qU(HYBH4HF1
+YMRLmlZ`bm1,AALBHmGX2(j'QAl%kq9LHQY"qTCS1cRKI@Iq'rG8P`12bEJpQ-2j
+T9lYDbIb1""US0a&K`0cC22[Gf&+TRlLpqXIYTqE1&lV1EQ9E5hl9imTSVhVh[kU
+V1aZ6EqGUT0Z%NmeD9ZTYq4f9EZ1VK[J*q$1Khp`6Z891j[l,(cZi[IrkhcZSV$G
+P,4Ya-pjjrY+Ze%+b1pIb,qXrK@@qS5VCU'6KqLF"rH`qG+[EiRFm`dL1`j1QK`B
+p[j'AlZYMk@T-fPr`jX02BBGYpF`-A&RHR0e`B0PCjBR,j$CcSjT9k"Z"2c*YjRC
+1(YNU(`VLb`q&$jeJZPG)[DU#eid1"UE*jcNY0A&c5Tr-4Xm'GTr1Lp8H3EA2bTe
+ZP1h06qq4Ejf2ldlDhfrMhQlf,`TPlrlQmBlr0jZqqr9%Qh'AR&B%MSTmfiX+`Um
+l$1e2kLp%HNISh8CR5S5ipXb-fSM9hRE[b+UfZ*Ad6[M09(Af&,94L-pN6*F0XCk
+RerrVh(dY62Z1l8jp92dX@92QFQ[Ki9C5-FpC2IZ-%ZPjqiUeffEhFENCil5ppYC
+-*&qQNcj&Y+M6pFpaIa(`U1ARZe4YY9AbZ6IlQ`Ke8XZEqChdRS+Ra8TK@1a@p(,
+UEIbDQhdXE$f1@MCfYh(5(e-@%1MPeAbX-Z[F+QKh%'re36,lD6F-M0X'aQmcF`r
+#RI#REq)kPeVY4$ChP`e96p%paA`kVciE$$E,f("[Y-+UUCmiP9Y)p[fhm,bCMk@
+XRh'bX$P8RpdaC99bELcRHG(VT$q&6X*[8FM$Yp34MU[K$3m+(A`lQTaq54NNZ+V
+$ThQ-e#Zf-@pf[Q9A0FMIm+0YBTIcBPEp+V&kB9Aqq4Kjc$e'TUGGqB*061G+V(c
+YEPlNm4PJHCrNDRmd5b[,-pXDCRB@aYUF6pd@IR+crpEjhF(AjmjpPBdmP+[Z)eG
+qC+Z4X[2!PR*IL(r-iF+!9ITJ6h'AkSPlh'2fZ@f2C`pr(`plAf&jIq6$AB0KKm'
+U)eb-2"Ji,m5kmqEHF1M0q4@daGj8DlbAMjeUVU0HmYq"AIJRi'[X(R`FR*r&RHG
+jdIQVApAkURAEMX#"VbUdINher8dUcaEI1@qde8DX`q&ElK!F)@bGbiq[@fGr0&1
+4AmkV)bIUKh-@IA0M,TE2$cZARHGQbS!q@ADlQ(QVhK2-ZLP'[LpKDhmMrA(mL,H
+6,bilqb*rEJ8b*"T9'+ic#M(+25EKpV)i#8c(KZ0(Il+'ZKfXQp`%T0[%I`T1AQp
+6Kijrj1cRCf,25NkH%d6SF)M$Eq965*pCdYjJ3[AD+`6qqkcq@2U04*q0Erhe4U$
+Eq`j$lUCKjel8b(890kkLh89XS&pr$+YErAA%XLFHUab+mCiL[HrQKX(&*0h9X9q
+lM(9U!hIb,TUP5X6ckQpl-pZADa)0S+9Ch(FX8U(6Gr(YpHa5CPjSK5E3kHR$Mb6
+RX9m(*I`T9Rp(UlI(`miSTjf(DaCpKb5+G+848TkbGEq9AE,p8U*+cX,a&DCQ+bG
+`UclZ24h%Rj9[YEihPjZ*4GlmXbG42DG[YVAHChjdF2%[G2@Bka`FMcJL[#Qe9l5
+-9#8l1e-ZQKlX9V8aEbZhqT!!%klZ5,&R1mc0aCqGNA%1RF8rFZiXhZZi4h)EfrN
+h@'83APKFF11P+f00C6l1idhkSH%P+lQ2EkLNFajk8[J4rhbChkSrI3EU(dp+q91
+k+ecL8kbZZX[I!JcE91[Ya(YUCRl(b,f#mQAXkGXSP9H`9GC2UHVTB%1iRN+R8B$
+$Uq9@1V)r5V@e6iNINE@41Y68KKh&lADjl9A1&DFc1a029+-Q*+[H&$)k-TVVQ+V
+ErQF9@MZBHCN%bmph'5Tah&9q9Kq4*[EL`[2MAZ$,akk%9D6FI@Z*[9FR#X2Z@rD
+aEKLU8YcBFjIpQ+VQ"#G0IF+6Epa1RB9R)j0GH[R!IU,hFGC2&DdhT9@1CH*fGNa
+UUee&FGG1J4MUBPG9A%bpKUVI[UQhq[+Ka)N-UGKq"96m#$$)pkk$12-HBIH[H!D
+3!$IAqGLr3`r-SVa#l@CDZkKGc(j1UM@#U'apaAE5q&Hmq+,6"R)P5mh%)6e*biB
+Xk9DlQ(XUamV$0Ypq,$`T*p,l9K*G0@$C-@#cR1,"$hHBcXH(D4*-2NY@#Af$9JN
+6qqKe003UR&Km!@'XRD8@'FaBDV(p5'41I`XHiar!2d-i8Ajd(Ti'kUXk4kX&(U*
+ABq2fF1[VZcVDQIBIFMhQMl@ZKa*Gl'j(D`kQ`[FIZi8Y@!q&UrC*V,Icm$6@GlE
+E5Xk2NB1jKeqAILFc`$X'IGMfZd*c048iF@Fq*bc(YVkl14049APJ0,IIUH9S-p%
+@Mcj-q(FAQA[[2N@lYCblhACfE1[i[dFF@H`Kh0Y,[F+b`kq,2DY1*+5dq)PTlq(
+XkVU-IZCPjfAL@&j5lm@UTYpMI%ZHhRB0R'j(-6phK[PD6k%,DEHHC$[Xj(im(SY
+@VG4hPDMVViIJ3Dr[MP-k1Zf8(R`d09,QA'[d8f%#Kepi0'J6Y)HqPe@2XSFFALc
+jL$p6d[2kj*!!#Se0)hmYV)k1e2$YIjHpILH12AE5UYG&@A[TlL0Ek1aJr99[+qG
+I#,lDkqZr8I0P+&pmk'qhl9pXSq*qD,2mb6ePZ6ejfZcN0Vj,`[QaV$Fr!aIqREH
+M@@qmPAQSKmQUKmLURH$2i%1dZ0hqUAjN1U2cId4kimh$L@(cDVUXIY4IY!aI[Vl
+@Tk#Td#h%p9(Kp24eAm,cK6-Gpf!j-fmfd1i0-MZBEiq2r1hdLUj'"R,FV2dbc$5
+lbA-YqjJ2PFp'(8ehP3IZVjPrCGIpiq9qH"68`lcHEQ%"1,$L,PQiq,AGh(Uj*8+
+l[$cFY8iI$h96LHI9FR65,bedaMYj0Qm-$hdINkQ0BAZePeRLaRPJYPi&A*`qrY(
+LZM"dFZPQ)D06$KrZ6#cjA)fX1Zr-kB8hFjqeLr5YmlC@pX2ZpX,)6#RE0p2F@@2
+j%L*Pm683lq*C@qUUml0LjZbNA(eF5`Q,ccM#kLPD3ph1q[i%Dih0KQlrXl5CKc2
+RiqPRH6Sj*aYXBIEp&FCZ8qU"Mp6pV$jmU4H@%1Pi0K8XS(hPVTS[69ED"jmc(YL
+J$8aVIHHITSH$FGpBb*%Arfmh9rQ00$j8Zmmr65l#IAH9%Z*[b+8hN`efLMiPT@3
+e0lJ@rjRUJRGaXHfbpCFH4(P56l#cfIDL(chLd(EdC8krdG65ehQEUTT91(Z-IXV
+Im&laUVRSaeFDD3-A!lfNT9i-9Tkb'hr09Q*h9$+dKlC(4h$'+p',2dd8Y*5m2G%
+`1AUCfrJGCmq'Ab)XrD4V1pSTLl8m31iKhq@KmQVe82ICf'9c&ajdLidfeKQFR%P
+p61l@TKT5rQaq`apN8*r1X*l+%iplj3aXVNap'-EA6r&jb`YfH)"cU`bTkC!!Xje
+'41mq'r2G+2b56(HP*MBI#G-G+`cp`CAb,hC9Pl`Vr0EQ(aEHXRc09$EEMj%1pX,
+MKAqMee610[Dr1CcAE+UT9bS8KlkXT20#YP92TM5",YM6Zac*erUMppaMF5T`qFM
+jbTYGi!D4dA*Q@rR42Xp(KP$"NhE3hfe`-KIB[I9Q2F@G`fKSI6Ipm8aq9$fTdRV
+#UYLL$D9A*V[2KYGP)YlGfb2$6)l8C("hIN9R)*@fm2!hHJTVD'Ac"rTbim!BcPr
+k`q9hG91r42Keml9H"8cpcB@&Kf&,Z@-C`08aM,l"XiN5`Pr+@Q$bBCH)ck5ZcAd
+PA(kSh)mmSBRq4jmZ0E&Tl4`E[Ke1(`S'fRSGM9Chmd2IDlJ90[qVAlRJ&SrEl'(
+9HR`GaFf1DKS@Gc+[*@2TBN2kYIAq6$Bb,hNed0C(Ke,fa4Ii`0e$`j&jY)e,G45
+K+i6'HBm-CKdCP[IkQTTD1Xm@emLZfNA$e%lB5%"[cDF*H2UCR*lAZ5Kc3BPKKXS
+IUINfNbI,L!Elihh,lF%JD6TMHc0jJjY2Q&%FH%rfB81`lPeDTfX@@Q1[VrK4U@Z
+FBlHcE+QeeaD3!1qcGPKqBE,ZkjcHfAclhrkiKc"3aj8bm[lrZqrP@jDPfqpe-Qm
+X*E@,Pk'Ep"C8i6q-B4M*qaPBI"PhQrM+KE4cHVZ$SAP#el@5*hN5,eE"pG`#aFB
+[[dchkYIU[`4Vb98iPK0j'plUjr&i[*P$&h&KMkDQKXlQCe1GKr&Km1,$b)I6hH$
++[GHmXEBBIFeA)`CXlKf"lH0VZSI)NAQjL`l4qQ0cXLmHU'[%j-UpefLPCh5G4EP
+$QeKfXE$e@L+(I)XDAecF-e96(0j@`UV@rVYU@U`SRa#AQZcXcNB2R(UIdd0CHCH
+--F6SZFrVG-Bl![re91*I$(B'iKmLX2aIh1ZZ1rKp60f9[Y)D--cQ,+I[I+MkD''
+peAJ5)5KZA-a1eUrYBr)P6Z%IXe(ef&AA%5bqMCr3YcT"i@ARqG-2hkRqCBBPR2m
+Qb`cCUmq(8fI9iNFeL&3hj0C1i"3h3KN6ce"f@(MfZQNr)X*I)lZ(64U81laHkq4
+XF'CbH&Ipr$Y)iaRb*AcVABaC-qe2j-M`k-mcE`aFV$d8@-IS,E5UbiXjmU(D5Cq
+jN`[(3YY)r*lq0+YpVB6[-h%lKefdNRj+0i@Le,BAZfUI&ph1E,4&$253!1ldXEU
+EIBjD4iYh-Rf@'"b222DPHQ,0jUqcX0VTLKqCb0T$8YBcA1V8r)`Hl6'EL0CiIN@
+()mLTUVhF3l%eqlc9EXhIDDbRDD(SlDaQCZAH@96kr*9$Q(60BZYfm6YC0j,a1lK
+`%a8fbkfAKfeP5Da4l'"LU@FXVcD91'@TT@*RGV0UXi-AUB$9ki&CDP$Fb420M6b
+)0e(NI)T5UcGl52$BBrC5[2dhCkD+Bm,3@2G8d)#VrG4VbCb22bm5cRR9j[G1pBq
+r!UChTk@(BjD(Eq5HRHK$TC*9[#mFXf'2bI!M5X2Df&[jQi-S,baYCd81MMFMc0a
+XAE'90bQ-qjGbSCZ(b31D-q`RA'C,Nef[VYri!lrN(Khj'G*NpTB4CjS6efbKYG6
+)Z,*e3eX)e,C5EcH(UYK[q,)[04@@qZRCH(Xiej5l@`QdeKHEHimQ25e1AkUih%1
+LKhINCH'(0aq[6)RXpYra@Zmm#8GdRb*FmZ%jUQVSE$NkD,2p'95bl!,2hYPLE(#
+cNfITMG['6ph1l#M`)Yj`S[A`&5ATrJ+(X,`*%r,a0P@akVN'Tchp6@@qkKP@qSk
+6VrZI2`q'")rlpDh#e9,522*rFl$5XlbZ`CGlU"*)GfU(qrUV@X[6"kIp[fjB,j)
+#+'@Kl@4#G`4dbA)Sc)dV(fYKKqB[[BhMbbG6e9)*YCkr0IbqHGfC-R@IGRE(,5I
+jGR5`4Ipd"dq(q(GjdVKM3R1Ehm2Q3iTb[-l$jm2N*Qr6mQ'0HCH184lae4'Iref
+-Qmi%8jhpJIpcAiIDkRbm1jMp&L@N2ThKpKpPHlUA$qEC6$dTc6aqDq(R)rAfq`V
+jIcSHeX*f0Z,AbSHjPBrkSI2PhNV,3M-5T5CI%6,J&KmbAe(*cNf(!mp@Y0[BFaj
+m@iBbXI(j'fNe12-aq"-j&KHqC'alAApmB+,AFIr61MY[)NG6-00Dc[H(63Qf2Z)
+f2Y-a-a+q((`CSaqaM3m#Xa-e*[+&8HZ$HH33I`E$(iF0VY#F6G!-`mBm26YNV@M
+-j&rJE@`ar-m!bHqI#Z+A!3&dGM$`)pVjfSh(q[d(6)q0HP%RhIl&edY1'Z4H5q6
+01Tr4Kj'RKp2IjH(IbX8NeR3dHI-Y8c($Kj'SDbGUkC1mQhQdNhRRaCkphfCb-j!
+!q4'aimrKbVdr+VJd[6kRXBErIf8QI,jL([iea@3iZMXF[KlRYDhe1JPr)FC2ciG
+&+15)jEq!Q5K0#'IaE!#2lV#i'6f0Per[C`,A$6*lMRjA-IQNiM'8USG[YJXir*l
+Q4H8DQhfX@pS(!2&YH5I6Gj-1GNcUlNE@TTIaPA!HZ6CcY42mbT!!$qM-YFhB4ml
+-RefPK2L$Yr*Q4k8fpi0KL5mI'NBPP5Xm6,h'i[042cN1S*cG2+YGITkcrfN0!#%
+kE"G$LbCfS[I-h'AZ[S6[)UI'KhHQ')fN@4iPT$Q,1mXZ6`Mhjmh$q!c,ELmX,EF
+92*2X$bpaqkbaDlmaYN"ecJ"c8#Q@ZS[0aElLhrG+cX@idmLPCiHEPr*KcXZ5Ema
+5cTl#HG$XM86If%Qer"FHRe(23ph+Z0hq#P+YTP[[Tm5A+Rh(lUVj&j-a*HJ6&lE
+,fZ*C6p4*a0dVMI"m#*%VMV6jh,Vqj$"VPjp+AHBY(F6j-rG5EIp8@fh(2EcmfAR
+Cc!MBI"X--0QZX,IIf%DGjNQGhm@pi8@e1m@HC+4Eem(Q4V5AH3k+TYY4Kl#ip2m
+%cR*0KR)GaLIJMCb9XC@1GK$JRj85XFl*%rB`qP8fZfKhZATEM%e&af9j`E$1jHP
+,YYaL@A*e&a0lrZdX9PlpCHe@1F`12cP6QkRaIEQpC0[I-UIi8TH2IHC[#BIb+)a
+C5CbJ2f(23qTeA23pPL@@Ff%lIGIQiY+Xl[`+Qf2PNQFMdCQEKdXb(XVbCQj@EUZ
+FUZHXQ)YHm(,dTR15jp%$@Aa2`3JXcXZfl@b`r1Kp'2Kkk(J9feUVAb6%"AELp0C
+Q0$"UHqXm2j&j+Ri[Gq*hpKFE+Tj2-4,-'qAT8)HbRpP)PBGI%+EX[HjhFA(P3c*
+rP3jh[c@QSkL((mq99Fp9Fp*jk(Q2'cGCrlR)[43D8850)KaT&K1hhcXI9'##QLb
+*fiL'VPIc14j%5hV,I"reqM@GAHl[Nc+ZE6edU*VY"3Pfr*S9PjkB#1$YpM0Rl!K
+MR*90kFk26DAXUbVF@k6cm1hZ,#iXV1EHrJRE!fLHb`pM8jZ,b0PK8TNr,HTbCP0
+%[ZBl#R[SGGf%'Pd8HVKYY08eFb`a0["1jLPB4HHP9GGJI`Qr4T@&EZm5Zrph%kq
+MiHTKKmQZe-&C9G9HIQTZl,A1$Lk5il1AHkHcYIM6)G[,Z,#$bZeL@m1"j%2$LbV
+`kMQmYY%3lqabHjUF6D4XY'bd1qa,20lZ$5e0a`)q2[)I+mU4RG,99NlbB14j09c
+d6dp,%Q90[ZB2*UUrBFMXV9iKRF@h$NGAEkE!YZ(@A1(h(*PL3maH9haUH$!kVQ(
+a$'9H5@3`Z*9[f@(fDKKmLI52MRI--GaR*0A$jrN%0Z(jmb#RLmp$IFa5`-52@R$
+'SBcDZcjLUJlQY0Z(%UTeC6DUEEl[69YP0mU`2&2CdrNE5(EfFq`Jf@bUTd1!C[m
+Y,Z14,k$0CB`dG45Y0IXDUfcV)ArJZ*ZFhF(DapdSAD+4R4*pP"XSr@BFI$m!l+9
+CHeqSapa@'N(LEbmLB%ZQXVAXVAQ,Im%IQ,he-3K0+jLmPUCLRXmh@9G6"KkQTJC
+!MH%)L%(FU%(eiP+'Zb#(P[B4FlYrN4*G4YiRU%'HbYGjL5`,bAQ$dVQ)a"f99fA
+29N(I5,+I+lq$GhpP1UEH(B@a"U25p'UkrQ*mc,4S1jhQML5UbICAZGiIlmIXq'G
+,fVf-2jIPA[UFLqj&pbCHGKf(d)-2YC219@([)G`8X6YGSi0'D599EiHTMFMACLc
+R6EHCR$mrUV15-IXUUITfTpC9P[Y)f2Z,ID4DT*[,arh4EH(md6FA[I922aFj@eN
+5AHqG8cMULkU`UX6rI$e8dkQ9VTiNUTUBXh14lEm%kep5I0h()e%lElIYBeVhmLG
+IH"!dY5B[)h%(I4EIE9YC!00$CfrDakbhm![f5EM6aCfeUF6p991Ym##$RkUeJm#
+XJhPrL@%'[f&1JIhpC"(+2(B1Mfm@mGJqhUTd&p"1JUVhkm-&1JY9@pjpH$AARek
+Z21KPAPM%VS2+L9hI9D$ICe9aUB1cLCN!mHhlqY2#&hF06$9BIGbEI&VSBdj#6C9
+GKHaVHfh)"p&9Bq$I6#h0'Ram2C99[`kqTKU@#AbSQTLDl`)q(+REMU,fA8cSeY8
+c,M8cC&9F4lb0Ek+2Hbi[4cY(BePl[*8k###4)X,HZlQUaplSSqE[MfdGKHq9h1[
+dGFDApGheM8cZjM9ePHlMlPlUHqN9Pl[G%M$*qIKefLJiHdMBGG[0jq5GjqQdH[0
+T66CHVlkX[I!M9fkQcU&phfTJf3+!`98Ajq2VkbGkHGfY9b0IPMj+j2b05FJd1eb
+plUC1@L4q6[ifAUp(94X21l9&h!cRR92pNLG`i[9iqAaqlapdIe(ErUfG`F[#AZ,
+hXiX@*IDLcYl1YlZ2'amjjb'1Q"9TC0lji"l2$dTRlp(R*0chm[$`3BGh9FMKX'-
+h(hHQMJL%3U3dalHemJ4HbYqeMBqQUVcKbIN@P,b+VNbk@GV0hJHI%[U-fhPiG6K
+lS%J-UbhiHdUTfk2"[Y)KeZYT(U+lcp0BcCeYB8VAA'iaB9A*mq*fGC@@pV`pSN5
+mmC,1L3Eh4'1*ELXfiiFQIh0GI(#[B42+2SfNZ-9`SQTNaS`"C&[Z"jI*bpl`TPa
+(ar-UFHZPREKNcQ2&&[DR(S`(bEpfCmRIb,Hq[ip[RC&ZJe"Y+VN5EhKaM$K65*f
+"Ie8kemK&RN(4UNb,d[Tb,hEkUSbe6EXMr!RKYpj9@mCJ3dF&58%`IUJe0Fb2)8S
+N--rICHRfrDkIZZFl24@-@,IfPTUlUkY0$DD'K3d0cSBZKR9eGJD'jZF$3kh@kZd
+[VkkeHKd1Vd1"SD'KZkR!lVcYESH26mI@kfEJD(3qK@qKSEZj`0ESG$Gk(3l'EXG
+$SF$!Zp$VG$@h1Kd1Y[VkdeHKh8fdZm!,2Vi'KQh@V`2Ed0eUk'K`+&#jSDZkeGe
+Ul5jY!,D'deGTUk&TDA9#k#9GDZ,UlZdRDflPfqVY,HqM50A'Yj%D0I@p!4+heZK
+MB'aeXLqd0EI#"5,6!ZER3h9e,bY$kqKd2VaY$SEUj`*XDhPhGV&TpEGA9c'Y,Ud
+ieTGaYASH6Ul5kQeX"!M'%HplcVk0@kqKGA@[d1KYp$SDh3L,d0$SI5`F$CaTZKd
+2,d2V4VZdB,)!@50$k&S+i#`2'KUCZKR91aLk(dY$SGYFqP'VFV3hFQlZEQdJd10
+SG@KI,d-DKkm8Bi'0TSCYE0d2+bY$VH00VDhifKlc3e[(`+'K)+AfVZlX(G[)"66
+D(@hGhSEZY'(S4p$Gd,iKMFk(p'KY0I@k(GB'VeSkiMehU`AmZ3N[V8DG#3CM4`0
+HY'[T&ESD!PNhHMR80$0)(lr3ieEVE23hFBX5d1KQk'YY+E3d-DY[Y$GC5*ZrY-#
+D3h&bhqKY-$3k[9aY$G$#ieEM##kdQ4ZbJ$3U#hEXQIZp$bTeEjh+[UlZVA3keLf
+l23K#)MF[3k[eU#Q(QaK3kh'QL&D'kZj'Y'C`,RhY$0)`G[S9(#kY2@VI@'q`0#3
+Z*UJLh0c@N85'qKpl)rjpE@mX*&#4S5%J0Ge0h8h3kdQKSAFZk[P1kLAfT!d'1YZ
+pk+3%IHNbQY"IDHPSGAVGA@Z&23d2HqefrYkZk%@VE5K,J)1K3fdf"K4"p,Y,l!!
+YGD("#H"E3eZY'k(a4('*`)a!lM5qh#(Fk'YS@pmL(YVRE%AYAFkY,%L&5Y0$FSK
+f541KVG$UrAd-BRYeHKl8Glfp$@l23kZkeZKfeTbH8)cJ"2Y-(!Zk'!(%'1fZGR0
+#D+GEh@[*Fh-h3JCk4K,d0TGAC#!!iA[5SEV3l2!ZlQK54(eHfPd1eSB&$@h*,R3
+eU)`4EZh(#eC4T"SEK%+lZV5YVD&eDC'KlFUK&RpY*e,d25@QYd1[QqZKh0fH"XC
+Z"FfPhEk'Ef[T#*%eZ"IX(ZVQNiQVd0#dV5RKK#SFRG%EENR,k5dZb4B3be2Fl2!
+ei3jYEGhdDqY+e`N+&LQ9#@2(FkZKGE1Yd0d3XZU&ESIA`+hAlS*8Dh+lqeV3Qkf
+YpHJLEJE(AcGAJA0eD"0ZV5dd0elITD'k*iQVFABDklY0E6kZTY,V@eZKpB-h,b!
+bh-Lhd)5[@VDdR9YifrB5pLL6Fc@%QE@h0,CeYbL5a%jT$bkM5#ijG5*Fd(1Kf2f
+V8*%fh+M`NkeK+PlmF"`NmE!Z3P5j&bmNS*)i&[,M5)dZqQk(IeSJYc,MAehbY$@
+b!(c3L4T$5+0MFh2'd1V#+AUU@cY0@l3dQ"d0c[FBAS[1SI8*%LKfSGlNYReZ[Za
+,NeU(q"GpT'eZk`&!)2M#$'3,65K$*ES'aVl3d0rVCFM"B3p$@kmZK!'#&YV[6aX
+Cf2N2f(E3l'YM!0eq-5U3!%,k4GkfjPX%qYd-e$mLBKr@hGd5$D1j#(1rV5!rRD'
+@KZ$@h"U&-'U[E&*S!d0a"KH@$LPSCDUYpDYS521Ykh3bl[@heZl'V"XA&0$FlDd
+D0'$,EA+'G)iN*ZKYk&EI%U5d0FPm3&kQ1Z6"$GJi)HdY$k9ZKGbG#@XKeM&K@dV
+lNUT`T9Z5Ijk'aJ[C#I!hAYlSaR!hJd0[FSEhdE@b15Ce!0pDl0@K$4FfNh`,Z1B
+('MR3lV3qh0`)qKeCHVQh2(9I"Hm*Z0E0pX)'VeSeBhcXIK3+$VXU6pIAmEPk(ea
+qDed4Q$dQXS80XVPGmK9adT'Kd-LP,eF[hIEZbp4@Q(ICh)S0d%X4"#BU$Y0AXpM
+5+RfBH0$DEC&fd++L$QKpZdC,i%P!!BCk'Kh@f@6!DBQcZI5d0#ED&`fE5VJVHdT
+mqA[c"B@B&Z3G1kY#SV@h-fEkr(`23!KX@&m2+6bkE8Q)8V34MpirT8+!c*-NAh#
+dEJD'@!5K[3)B"J,eTF'5FNbeeGi&c@p[5-0fpp'Y[[3F*5NS!NX``+"F,SADbHE
+eB(S'-(V9K9d0[YJcEmX*485MSSk%VR"6ke+A[p$rcI'@#h39"ST9XVa'3,i'r@G
+rN!!64i-$d0MVD'"GrPG%S4[!ZX$9Mb82hqYErPd2&SDYf4+e9iQA63rP'%S6EV3
+aYD24k&$3rS!l!!6MA+QU,$9IfrRqqqr4MF@dZX!@N9XQ(C(-$Ak!Kh3a14)#1AF
+2d-(Zf`!*h*R"rcSImj'Kmkd%1G$TNYU'Krj9V,3h9"CkC9MVDf0rcSH@Kf`GD(N
+hH[d0Tr-%Z4GJ3d2*"mY6!JS!ANUH!$QY,XqK&i%(-*PE3Qa[H)G+$JRA*ZpMGD'
+YZjTT2FPbCK0B`J4$45CXNB&-%,Hh9T'Qd-#j3l8aq"bp$GSeV43CF(+)`',APjG
+-TPJFA18DeRTDZ40S'ITaJ*'S`(BKPFi&DdDV4E!66"rfHKT5f3C%&@M'F$pc3`0
+AaTb1Gd`0I'Zc*j5d*Qe9"V&U06`@XSD3!$Q%94F0H5qd*LSZD'kV3IUPK0@"l3i
+#cYR3q4kh@4bd0a+eH%44rj!!HQhTZUe@q@$[9hCXIHhJEUk-Lkfr3H8JHj@KaJH
+qPlHk9Yp2+QN`+#(#'`Xi1,63qhZYA@eV+'NrCA$[hSGKX3jYk&m4DG$Y$`9VdV[
+3qfE+,b2IEp!TC"kKh6&@f"3Y,UY&SCFe-rM3J&#F9@XU5hAYqN8La%%kdel&"Ja
+dA+h&fT!!af&MMXZjlVfq-8Cii(0e@Prh3h@e)ZcG$I0,D[R9T2#Ap3Y&iYSbC4A
+[p$[`3KPM@M4jGk[DQDGYmYZ!P$[PETChE"fC[@iD`hX,Ne@Z,[3rj!-VGdTMd&6
+G9QfQ8bj8*4k#*"1`$VCP%Qm*L)#U8J23ZEYDI*Xh39TR!UL)'NfD4)QN3*Z!CB'
+$[IMmE%SPTLTQYQcGD6qPdI3hHYQd+df$p$6eYSYM)(4I(4l9eTd2I@@Q`)F&bjV
+E[@k'@Q#M!*Qc3H'Eq60d1c*%!q9l#ESI16SNpQpF)1KB3SjI"Y$59VGL$XZjk'D
+@R0$CMBPVKK"ZImUd$'eZERcLi+L$V(C&101KS66#)%%pLI`3rBqYDDZheBQ0$3f
+C6TS5Q23fpdD5T99rd@Dk[Dh1V#A,4,`5N!!0UA9Ud#3P%5G%I!VHAN9YSFT#q)D
+5q@@N#4QKd0,@d,RBV+hrd@PI!ZF$cY$k8[3qh,-8KU6XhVfNj0Pkq8bP-Uj,69T
+@i([D&80A0Z1fZ*6eN!#AANjLT,`2qPT'qPFk(fb)cSQ+,*DlB6)%6&Pc&L40jC!
+!k*3BHYd2*,F&RkfV*q5hqL1l)fr02&Q3!%#-bj&k@0@p*SH1Df#*UXq-,ef*EDD
+Zqpl3qm,KVk5Z3AIRE1jT(3-Z9U5UfkG(j9X-eT(JL+h3AQ-#YZq86pfQVj1KjB3
+pLc!KGk(cYQ)3%DKFq[i#)Yb`L5bklaMPQNq(4i$#%G(2@Y)'336XpQFI%XSmmld
+#I69Jpd1Krb)'B&cV9ZPIK"qE[j5XV-3IR3PZES)'K1RrGk%)4[p()KEk(Rh#(JB
+&SL'c""J'9M!hD`8["%@JlUpAkmhZUh[&JCXlZ0G!QfHKN!"IeeHKmia*'&SZ!0Z
+D'H%-aD,&JRh0+l!`2Ad-h)VHmA9kSG(GLbQlRVE6CaJJ@J3#d-YH!kmL'*F$CYX
+"k9ZM!eISI'ZC[k#RNDc9h0h0p!$KVqFQY"hP("PG+C@d-GCcG&F$5BfRllZKXGA
+Fke8S&"4S&qK3Qk(YlZqpY@[$TJ'5FjabVC)0h9$'Ne[4G*aZ1J4DACI!S8,V@d)
+0$XGDFDKDGY,Rd,5YpGP#*I+ir&%JM,+Z%Hb,6jbAQQ6SH9bpA'SBdbYl6T0eaf!
+N1kXUeHYNk(MG%3M%CQ,1Cd1aS82A05EIcGEIFIE"-d)P2EQp,d#aRA8FQSpENaL
+djSX(EEhd%#G@V-G$3Q4Y$ZZd$FFR*TT'[PkpTVbFM@k(GqPXbCH3!'RIFqZ+Kre
+)d1LhKTH8T"PEd1r`0l[f!NTmeUlJPhFDf4k'Kb"2Z2aYR[qA'5Ri'KpI@hbl-Ph
+GEB*GcYGAGD(d$G[T8#V+leGTV5q6[pQ8E&bhDd,RAe[VDp!KD-"5'YYQrZjFECN
+dA(#RXG$Tk'K[[qFV3QjN(DDDmZVfG!*a-MVedH0LdR5,S6dP&d@KhZ"0Y,VHX4$
+Ik(l4c'p1D$jI-0N-%0,HR'@KNDD9+repT,0cE6d,H4G+(Y[@h-3VS*QTG$6k'hZ
+lHEUjHYdjH4Zlib+@M!B6%4VZATfJLhp)[&&DG[k3!!Fl6`#,3[aLZhhTAFf3!!*
+eGeIEDlY0@X&!#biSCq4@iA`0DUilZEJDfdM#ekdlSYc)ZcDaVBdL"Jm!jGDfAEh
+ChmF#YVV@l`*SPLZSN!#kq1cU*2dHbp#Tq2Y2rq,@4HULr@LrSUrMB&2A8r-dqKT
+qYTp(6dqkTr2TrqDHSXkMXDMlY4qU0m+0XihjShrk0l%RjhGIPUC&6,UEHTkLTde
+6Le2Qe2l+Rrp"9CqUqG99AhUVpPA9r$Uq[UpK9rl9IiD[IeISeN0Cd0Cf&CrP@Ir
+T&Y)l'4i8MeT0T*d8RaC2rr*pZYq,@pV@rRKqEYq&A6DlUDlD9hT`biHkKi'Abr5
+jHIPm(,jIlHAqjPr)bp+#[q,ArferI9rP9rrHBX-acZBkI-GYQ2rl-IpCQYc25CR
+ql-iHChfCrlX,$SE$Y,$rD`T5Uq9dFVqf9kNVMbkkAm5Adm[Td"(3)I33IB*EDAY
+N"(3)I33Il%%[HbpkJ)k"%bCeNc[TRlE'adGMq1apkbZE,Yl,rHbpbEQ*[36HYQi
+-hrHECk'cf&R`,5TY1VY1bY2$Y2jA(EqEDfYhDrk@["YEEiPYp#fr`Y[,Y[HjLej
+MU1Bdh-IAjMmR-F2Q12Qk[0meQrQj[[-hj'EcNR1I&cRDCcAjcrA1FA1efGkA1kR
+1q*RIfmc'jQ0H9AcUZpkQTkIV+[UkZp3%UZVMA8ESih4a[R4[R6EA2c-rACqYcpC
+RlAV)HHcp9eGl8jrk9Cp5V[E16CjqVqG9J%UEf6CbHEV1E!B!USjL6CeHIUFr*cp
+8!CJ&32!L$)$Gl9h&AF9GleR99I9r,q4deA2kc1eA3hYjf2@9GlmLV[IP9I4e29p
+C'kb0TBh@9(@9HKXmaRieRACq4Cb,1Tcr4mpdI2@ZIUHMQf[46DRje6dHIk2SZEq
+&'jZTk10d8EUkMSSh4Fp6jqRl5%2@IXkMV)h48h@I5UqVb[NC@Gq@&d2#!Pl@mp9
+hZ8&bmUqe5+S#)#9A9aqHTl1cU,1RX`a4mr@mm"ESkRSd"![p(RjhkIRGTHq&e26
+pC[rNdVh`N!!6j0+keR4prdIIr1l6jhD6IdrIk$pR3IX3%k$pR@ErRXcd(l%)qJr
+Cp,[rUA[K6IdcIdp"qcjhD)#)(Fhe[0pEd(l%#ZBfb$6`1hJ&)D6Idh[K@rZfrZh
+[KGC[qU`INd[Pp"mMEG0pqIp(V0rRF(SHT[I#RITl'VkcIh[KI)feliAbZYk2[rN
+dZXhr@Er5lG!E3r44D3%DIZMlrRXbJ)*4dIILAk$m-dJPdIIS(k$m20rjFhrjcB3
+Y"q(j0,3IKd(i9!(Y()*cIdpC[p"q&&4!4!6k3D[NEEj'f3%cZ$RF&!6jI3*#Vh`
+N",h`ZHc+64d-*hkHek"kJjmQPcfCjl-S#FpQ@`SDN6`)NJ#Ca!63IK3DQp4Bp9C
+G9Bp9Cr)Qp40kLbkPS'X3*)#@29D$iQJk@bVl+[YT0PQ1DXDrXkqaq6d22p$cr1h
+J*qUP6qNV!IfAdE$jPKmbaq6C&X$Y,$RHDkIjrbBhckb`l6TrMr(kHdJkHckMTqR
+k,RHLRFre9eCFqLVmQakT$j'Yd#*V$bk#&Pp'Ee0NN6kN$$JDX1d#rC9eR@@A3mr
+CG8J*d22L2p0CG6Cr)XrS@A8fA8L9r%k(Rp"HD#m3)cGjS1Hk,iR4I%$eHG&c[84
+HSLf9ID9GR9p*@4[T@hApPf9p8r3MI5d50J$)hdQ!@Ee&6p$4D+rUISa[l1Jjk92
+!A'rXl*)RC#b@I8FadYYdc)Ip+d)@`I8IlETCR9maH2!Nk$RZGF"`)[T@AdV(j10
+@G*m1*r6cq%!25d6cZ`CbM4brdk,J(HJGmDMR@!LTSdB-[4SdELI8jfQrXSaVR,k
+bVS`DAXD26A'GTTY6R+EUj0'0S)XLbkD%$(drl+26@i')c!a8!BXHP!a%qQ$"l$&
+B"LXSa1d[N!"LR2)-p"N')'IMmrc03d-eMJCblj!!cmPj$-$`'Ffd-a(b'DKf'4&
+Ap"Pd'EGq3cBp8r!Djc-CHXS`@D$HHjZSQah!hd85*'3FNY$R6A$j$NcR-a#JjmP
+-@p"b+rd()NDTL8c3p0q6JDCp"kS!p@bmbrl$l!reH"TZPGKqYH!r+H3rm+SQe+D
+K`2aiP0*!r6dBUp$00%JL34kf#ZTUHRTUHQ!Pdh5h&9&AjJ5kQQ!j6ddb#RTkZQV
+1CVE'[Me%8'&49(VXU!4eG0)JJX00ASA33C%'9P4DDQ!(64BS%ICjI,jI`3C!8rJ
+b-L*P@f9&bS-MPj@3!"6q$+J#V%bFUQbSN!"m(rf9b`%r"N4IH#[%JJpm!P4"%La
+HA"N9q6PC8'9"Nr"PCA`CA[j)DXK'B-00%La!8q`qM0%DCXTj-`H@QD+'E+LHm3$
+GQH#,&q"fC[rR$+M))!'*92[Saa-TKKTQQ'QI*Kq#"TJGPr)ID!S5SP0%#m0!!1,
+c%5!*b"Y264BJ#DCJM"m)B!D#,%V`N`I"m!930#01$e!4d#+CT(5UK(JB8'NQ-mN
+Q$-!(4Yq"L4",8)d*Q!9d5`$0*LL%6'ND&'j"j%mKJq5I!dS**f$CK05'!%#H"*!
+!QH#JLNJk%d*b@Pl*L*V)90'Mf55H*S@)MZ%T#Yl*F$`635"04+G)Zp%pJK3S3JB
+8AC55mNa,*jhC1&$!m`R)Q2D0[JQ!'H#C80*L4`&VK16bZbFL-qLFbTPi+,+Te&p
+T66P)U!@I"6&!E#pK1B5JSZL@p%TXie46aN8Bi6Bk#$m%ad[LMDr*-"'k*R,JJ#9
+%pm5"%Y4hD6%)NXE%`E#jl+LRjB*LIK"af9+IhhNTJZIBU[NV-LjE2`8@R"36!di
+9IHHLV&E0'@['aU5!2JV16f)Y!QF,++Er4DE*Gpbbi8h9#l,r,qLR8ZP#DP6pT5S
+6)STe(i+6"%i8b9k+G5j(eMB334Rr48INT[C5ppf9'3jBrmBKmi8c!Zib+U@+9iZ
+FDT!!jHpC8Qq#dUKfPS`,2rmY#E2b@LR'$i#()@kG"GqLiqaEcE!Jrm,65bblFj)
+YrNYUQpKEI4@C)8"VK93)4A9Ecj,#)VV#@'0j,J'FPC`B"N#(dCf6P0-k&,KQpp6
+DdcNAJTZM"ai1@S"2N[a-U)`[Q8%,kaiZbr6[N[[*G!Im$)"$I["Jq"Y8crfBhe!
+)!e1M'iC-KdC)l'TBrcj-$F&lDFSYEb))c`A!YU6Z8a9SkJLk,EUhb0T((qCFPIB
+V%2hC@MPhFU$B9e6HdVL-X,&3rb@(8E%h6j,'ED9fL&q#Z9U2SV246IJT8dd+D5K
+k+3"(XT0dk(JT-Zi2Z9%$Arm6e5mh"ZpNZ)%Y#&1kd20RJB5QCrMSQ15DIk*GNq#
+A%EG!F*q@3eB6ANR-dpXT&*JaF+4Z$"5b%%CU"90&@+0pLP*B8Qi@3KI!l+DV6EV
+e["8bAXU#q1&2+LaFP8,`8l*S6%d`T`4$&'fSTf8B-Tl+#fa!#8q3!+l#`QcASX4
+-TTCb!Xj3@SS8ACE+jRbPb%VdbMS[0,X5#cGPXVf%eH#eNKE0S&TF4Q,4,j,Mr4E
+JHLf`4KCD@+Cf@(XVS&Y60pSM1LRD1hdC*Gh1V6FYj+6[5lB8@i2hk*k*cCe(`6T
+!6B)P8LFU-&JC!3rXQ@cXQ($-q#D"9mNa82ZE3Ed5VBjFESL[C%JM0)M0&Z[plhX
+M*-merNMK)FY$,@qH#4%M*QJNX&6f5@jkchGiB5@keld6@D3c-MdC$LUD0hSR-Z`
+[`8+VT@m`i+$!kcIh3FI*3Fhbd6'l&X@cCS54UecGZC`!2R%R8p9A9d3kA3,M8i3
+E9hep&p`["AXQ3)CMV4KTXeecPZjm&Ai39+DV-F6rK8&$H5S9XfG0Dr1IJU*MSY-
+l,6D@@lR,mPP*BdXU*,5ccA@[HKLqa5EV(YaG-b9SSQ!ZU43F*V1%YGF*d6Rq5Hp
+NeT13!%UT'Td6dMMk*c,4$pT#kfmQP0QDeFpQ)`U0eFRJY9)3l2QTlrCCCbKhNXY
+Y-2m&NcKA#bh#Sl,M4ddZG5k,MVEREP9F,N&Fq5jPkU5hHR#kh6Vbd@A%M99A"c,
+G&Kl-P08eGccMS`12Ua6AS`$8XM)iB)&h(Q)3YkC')bYJRM8e2"@eM$'bm!i-QQH
+"i0$VfL@QTq$@kkm@A+iACXFh"NEBUd-bJLY1@+l0Mq68jbfh`DT,68kidE"qM5#
+ZU3rEDeJCd3('"CdN(JdY,E4qpQQ)'Pl0%4`cXdUhNba(bC@a34PURpQ9!DY3[UJ
+'f%6*BB'ml4KKBB#E!dP(J`-eRRl,MR"`dI-,K9-dY,8JH#bVVUJ!i@AD'QSX[IN
+,pSABMbAA`@)YDC%%@T6XY0lA6,S"*F,,VU9Z[DGH#j%GPaTCI*BbcNm8T[0ZI*F
+DQcdAAXVdcd9hFXUh*)N0"l#XpP8"cK@Ei$fV#rJV1T--Qf-N'@FQYI"AEFj#Z`[
+bApPKT"EeKh96X9j,VbQR`0l%$1qNdZa3ZZS8[*GdMKFG-djRE1b`M0,D9PmMV5Z
+`X8p68,U&4C!!!Gelp*SV2*6GmE,K6JVFNZc[46B8QdHdpH%ilJF@4)G&!!p1*kk
++$SM1J4A30*l#FCjc1hGm#b2243TQP"cP@VT6R!`LQI1-'BpYpNA86eTF33Ted8@
+H#KFTGd8Fa"6e$SSRL9q$i1Am'8cflrBq!m5F(`8e2(bY)$@RUUE)bJ,j(`C4mfC
+i[S-L,PF[PRL-2&ZBL+R-X-Q4m!pcGqJh$[EBD2JLe84TS)CX0!*fQJBCj0%4p'N
+j#RNdj%6)JTV1fKDi2`2XDUD*m&0@dmZRU$i9DD4A$10-jd`BXAfA$289&26e%I+
+MpSG3UR2U&G'bS1"NLjNX0Km`f4&0k[TNE!3!jP,hb'6SKZq$hcR9)h9$$G(TT%0
+4"RSbqYZGPQ'+bl3#`jX5kV+c35kbQL-*DeamfbHG1lA36+DRV*p[p'SSX'PY4jL
+$j0'RLI(KAd,eN!"d%@`6cG**[mY4eTq,fDSdBBPA%Kq-IM-qJJm"#,$dP'#eD#i
++QMB8r18ePPkET+HpSb+DRYDDQX+QQTT@BTJ)9P06bKGUH48aDD`N%I'#19%-[L#
+HCD%cP08pDTfP9Q"c-N1L$@KSQdi"N!!+"PJB",896!a8)-9#Z-!B09B$&fm"J[$
+4)Y3"LQLZJa*0JPr)BB')P4Q&(j`-4Q"KGqQ+p"L+d-%pi"Q"L-Ja6!BV)Y4#`,8
+eC64UP"8)YC61JV)B&DfQMCUQMCQ,(!RQDD0eP(,1"'TB%Bk#-I08dGS4X%%E#2c
+-H9&VBqBXh!E-!EQE124ZD,-D&BA#i#DS!D!abQ!"ME!$D"RB*P`4FZ!1!dBBYA"
+$9`42Na)1dJJl##)E+TGHrUCG0kq#SqM"(k9Plk'#21F"06H-"0I"%jb#*B33@*N
+l1J,"%jeR9C-XpT!!41HJL&FS6SB)1Z@f26GNJ0%l&J5aS)2RQRa"%q+`NG(""rM
+"&qE"&Q33G,"&Vi)j4VS%#95$F--h2X!h1aBRc'&I-`3@c#%!N!!f9JJY+5qIJLK
+qEJ1Yh3-#AQQ!R2`8fFJJk1#*f5"N(`M"BVXU`p'@$j,S%Pp6iV2U,0+i"PbmJcS
+PjN98qH9S2HHGBlim&-HMLi2#Bc1q)BG5`'9X&-aJ@Jb,cL64!r-38h0ZJC)CiDX
+kb"l0E)a#Mca+b#$iDj9X5@Z1k*c619cB1!aH$dq41Dc'H&HbJLIYJJeN5$QPrVT
+0@!140MCEkLZ'Fl"6b)*"5+C"68S,"XY!9k"qNI*JNYr*ZeB52pi+L6!ID$6R`TK
+lXS)T"[0`3G""6$#G!aQ6%$QS)-c"6-946fr%JMeF%(-`8`"V-peNk`60AdJ(0JU
+`Zme"!81RkqD5#RkQ#,B38fJ4[A`(@m%(0`8h8336))[3UF!%mA4*U`-3D*4aLr+
+BCZXJ-FX@eJLFc!Ea-3")9`*@b"-32BMJQi&3m'23T(!Pp##3!&$@F@3@Q%k(2+F
+@J`T6Uf6Dr*8LDIS8M)2)[4)%K4LG*"6"1ZS+M139(5-)[di+FQiq6"8!'kU#0SS
++R534rT`9&`SQe(A4#ELT,[fC55aHQJMk'#*dm%6U'!Eik!dAUB)RbS)2mS)#&T!
+!U%(+2L$C-Mr852L3!(pF%(EXR`je!BdZ&4(e8"PQJpKFFZpq$iF5R`kIl"Vb(9&
+U+U0(pcUImD[#qRplhrai(i2QIrI2k2)q,T[+qG"6i&5Z#V[&TiIYZS1YZB%%2ir
+rm5$"XC'`UrR`@YGXS09J36[@hN&Z8D@XkF4%YF"Id9EjFl03Vj!!+XaSpMpBrTV
+qqGA4C%5T1rpc&0pB5hF$TQRjmDQ"X"r$(ML('@Cc0(`[NrFqPmlrlkrdIirZmIl
+hMrHqpplli!r[!CmIlhMC@6pl*qplq9r,+iq9Nj@0P(lmdFVrcVN0IFrCQHhkl9G
+MPCA$klTqheA$qPehdZZklX-MrIlhqQ9r(lhMBh,qpii-38IfHaPC('bXVPCA%kl
+XHZklKpI`qabS-rrhrhhQIcqImAj2HCp!K!6lhFJ(c-0TfIK``er6`J+kDmR`eep
+%Z1bk@mZ1Lqpp`*IhZhqjpllhh2ZIFrdkEj(HCriZIlR2pcRqjl1`cQNq4Rrqmrd
+IFp'%1rPr6lI5D6T[kY0T[NG0HAHLkEj2fIZIkG,R*@FPCc1!HV1iraraqhfrPrE
+lE5GTfrEp*V1jk$S,R9rhrhh2arMp"d&hd(3G"98dEb`cGahhq2aqUqhh(HIBqTj
+IDICqhfheHfm[qhr6S1JllBl(q2q(6E5jk#jlI[0*jHNqRjIarTplUr,dQem[BqA
+f[Pk6qrr%%(aERDGGKBQ&L"%`Y3!R4k1rdH$Vm,R*I0Fh,c#kp`"*GYVkUZemDCm
+,i9YKB1&KDr#a-("`80D9jKG2HBQ&dq$LB1*KGPf@i[rXArJkrAbjFZajZAQjI0`
+iQ[h&jVpK"FA#!S"0aZ0KfACGPKB@i`Y`!8!hCARCE$#e'$f@[rrEMrpKGPIl#f`
+YIVm,8E,FEMFIBh(6hRrRrRKq(iH`epaFE$rpLI(fACk6kQNdICFakRYFacI-fd2
+"KQ`bmaQHZl!rC#GI39F6VVf#Rkl(dDZ4eaZ@iqGRpE"*rdr6ehkIeISr4ajfar4
+cAAI"k2k2dHc1rqpEU1"f2k2Sr@r4BqYp(9GMk2k24UZQrekkhRISp(qb$SBI@rk
+kl,HMehcHRr4qMJ@Y02Y1YklXH"FCIIp$RUM4r1kl-hTD4rXL`I-dFAVqBqE$eel
+QEETmlehA'JlJ3GEmhVY984Y[P5FV+N9dU4HCM$c'ZeeV1YElAAPY1k@Z+GX2AAd
+lBDl,iI0kkZbpVAIPYEAQ`+6XaHr"HE$08FVLFImPhFi(`D(Q2V9h*q$"m(kp,Fq
+G+cR6GVh%f4[GYYXMPqpl0()bF$rlpqYl6eXVfrEj9$68I[EHqhZZPlcEpVVUHqS
+D(PFIMBf9l[4pj,[pIre8r"JqRc%M16BEAAI2V[Mq$dX0YSZEf(5cVAUZ0m(0lMX
+mA`I0kAFrhfX[q2qRarNq$QD@bRr(r`cQFkVqqhr4eA-EM-HILCIQ1BkAU['[EAA
+6UlHCHR[ZYkI,jcFG9AjIUXjZ1PrrrMlAFG2Db2NlQ`RE,VGKQ2lqEq2i@GYXpQr
+8h`@qEjMFrhI##epUKDmhpl1jI`Ch9h'b[qPjh1CcUlImelrTQ2MiQAc0jVrNrHV
+N@!VGhRZcrih(9EQhhmM1IGkAr$BFhHH9iGEE9fFr"[mMPmV)bY*p6p[lGpiA4r#
+cAYE(kGVcIJrhDH(0ieCFE2(kANrprpreI#q6Hrk9RVfb+'qf&eaqLf[ZkIXH2rR
+lIQqGa1*aIrUhqfR[[Qkre[3ffABAHGqldhq(VIDr,FI@lEYY*T2dHPlhSpVrRdR
+phqr%drdlc-Cd0rQEljr1p9c'GbE[erjr$qA,m5F'c0Imq$i&CR[Mir5rAcQTcR@
+H,e9ljX1b4XehGl$0`paQ0ac[9Cc`IVEMFI*rVjMmH9m'bjZRfq4VqFqEi[@pAqE
+jSEqKjZmYrq[Ak2dD1fb[Dq22q6FI@l,e4II#4YbqEp)DEQ1CjMQ2#redA4pKrIH
+F[Qr#KPq&dXlTZJmqrkAZ`1H*eATiPGXVD4QHPBE,a`fGrmR5@hNbkINIAl[-Fhe
+[9DPTQVDl4r#q6eX6qrB0-h$cQirrr#kATlA%jLef'N4QjRQ[#fRCHQ'FJRpb(jr
+KI(RAJL2aqlcQGr[m6rLepV-"Rf%lr$BIkA(95h)*Ier(cNr2ee2YqR4QbqH*VqV
+[0afR4qMf[q'iBC0&UXjZ2lr#p[h[mmVfmRPmIprk2drElErMfKjr9pl*TCVe1[r
+K1cRh+(VH[QmV*SlA)bYll0(rV+phi2NB(DCV0@NMDi2TE$mRTH4rRaZNb21rkp[
+mIrHFrEG9YI6lV'k6P3P&qaLl2BrjHYi(+mhMMapTl2Xqak2DrjA2YqPGEEkHZbp
+V1cNlHBH`jLeefZ932ppEVYF"(H5pKc'2[GjJB'2rPVThjCXQ[XEEiA2p$dPje(b
+rRI5l6"e2EpaV+'[fAHIiEAl(JIkIlHAjZ0[0rqEp2#iRrA'rrH[l(XmMNrdpli-
+U4$QE(0@YYc(0r$jl2hA5Jfl2qh6pVV0Ih[IEV`rpXAm@priiArArIm2iqaarDp[
+qR[C8R,bV1ecI0r$craG$drbIkZYklk&pp2ql8GYV1mr`qYYUE`2%qrr[jhjI4rj
+i[rRmrEpr)NjQbYZDq*d(3p*dh9r-qKS[TkMYpEVqmlhErDrb`r#qlrVZr)m[mHm
+r,qIdq(qlM8[hrcpVrl*VDfXN9NL4@&ZlYICkIU2Dj(fqRqhdrfrkEVGHcl2br#j
+(b[Yp2[T'CkIjIbrCpRTrPq$i26r,pk,m[Tm6%kINB2fl'Ek(pI)rUYHRlAqI)kH
+EdrjGep[NFL4SH4b)[bpemVGI+m,GI,m,j2brCh@kq6ihNH$Z[NrEq6mRj9Cr,jI
+)q66mMIIELcB[p9Mb+RTrPG28mMYC0hpZTq8KT&hAbGe)NbDbXL#(e0C)LeNL)`%
+J'V)PCdR1a2kHI`J"k6ViPP-UF`ZY[89N@QN39&9(!E"%c%@#Xb)+aRr9$5MJU+k
+UL@A1GTp0IZamX#'`U+mkPlRFA@DJfrl)%p2"#EjhEVDqEpcbeJcEq!r@`4MPB"0
+M39PR"89#fHDHj0UC#dfPcD&U!2'`#")ee`H8k,TjP3'!'EmGKYL4rp9m`p$i1DJ
+rCDdq#*!!RBjU)e6bT80A[YGp2qA[mV[mE'rciRh[imVrQ#E(UCd6XkH#0h85Tal
+AA33Hm%IA`4H3!#C`AHZJT[JVM9Bf85#(A35l9GL@$H,6%UCHECpIZmJ"T",Cb%a
+0GI'r"rqrcrAr(bqjrcrAarkraQNbY0Ilr,rLDF[MIHrNY0lc2[Ibpm"aT`FGc6G
+klVZ[00hpR+qPfp(+bXSdY2QpIehAGMPF2kAl&TaCAqrh[aj+)aTdH0P-dk-M+01
+AM,6RjB-FE'b[(ffGqCmIUTHLkEUG6rKAp6SZQkEUTJ$8%HQlcBp8`*G0eRdZ`Xr
+TI-q2rrGEKF2Kj[V!'))I5!Z"(dq$*Ll#'mkA2D$qr[!eIhk6[2lrlqmlc[0Mdh@
+6+rTYMmMBr)f2b0PdZAl2ir6I(cr4G6dAprdqmkA0p0T2Mr(kEUZUq2mI2mfDTfc
+qRp22pCQ1Cc(-jM-Ihr6cp@DGrFk6a1jdeTD@PKT0*mA5r601l4!%q2mIq!ArLpp
+d(3@q"Ed[%!CfRDp[mIU1jl6`*Ap8Va2NGX$+adeMTTI3IUk$YE[Bh24G0Fr`k$S
+0"SU9+PiP,qU[m6ip,Sr%lr6@PIql[p&m8+`2qcTIip[fTUVl(lAADLre(6J5l)!
+QMcfSPj[i9K-VrKFb!l0jI24lA28r05TAa1DjRQZDcI0Fec*IS!cm+fkr16q[jV1
+I13AcQBPCMQXacGIQrLC[0j[QUri9Im+[jMBEM"l,2B@`cfiZ-pRX)e0lbm[04U-
+(8B1S`EcTEc#e&rSlcF'UVU,cTF,Jmem,0mec1EkL9+PG4Q*rBGKerAr2qCm+[Q9
+pIQmhm+C,cRaqXkRTEbaKc80P0KKZ1Bm(Q2DjMm'qcGYRI$klrcVZ(J,dbCDeklh
+1YklNDkSl'erT8AX%DSklVZ4I4,A1mM$klHr,mAV[pXacrq2dHBjr1rkrql,i2Vc
+`8FMdZlpVVrRIrCD4rpUHalMV[mGrTrZf[[rGMG$lRAHeehcHZJkI1e(cid'Mq[p
+Ik2BD2h2X4ZUl$VIXI2l#qRr0qPmhk946lI+V-V+Nq0RjG[K5,AH9e[rIDeeG1hP
+rIAeG[*%b4ldhY-V*pAmZ@VZQhqmdPrkASjrLr+q9DqYGCAGH4PCA4p[rRkq9lhr
+IZqPq2qqq[VrS1TdNZrlbAVFVZZ0PHll2DrjHXEehYrcqR1[*h-E,jqmq6r[fI`[
+UIiCLei%kM5qKmc2mEFpElAf0*T2jlceUrQr#h1ikVXTRIl6Y[Vmje@FqYcRh[i@
+YV1hHB4-k(i4Rljc[CreY&Q28kV1E69p6mVAr2jMd,DUfqbhR8lcj2JpPeA`V(a8
+8ml`HZcr&h0rlAFDEUIpXjQI)VqErerjh(9G+&2XJTmjpES1Fr[#R,45qPm2RI`I
+m-+@Ckd0[cjfmkAcY&rachLd2Eih'rEZ[lI3`Z(kf9a-6Q*r2kEV1NrmmM0IKrii
+[96Hrlh`IhmamLbN@Zak$Y24r4qfKkhDpePC@mr`rHLKh&EFqYrKRIj!!8,-+'bq
+MrEqMp(TIErZpMb16rMrMrYk[Uqa[2MpN*,-ric&[`1"e2BlV4iZUrarMECElh@j
+IX2RBiNrh[rrFG9c(c[XE6Q0`M"IE2RI[r0mqIcRCrlFlj&eqR+bIbS`r3jclhh[
+&cQdi,KKe2a[9pAd[ZCAKERm'NdREISr4qE$q2f@jq&m,l'jYq"dr8k2[[pZNk2h
+rCYZZh(q2@meb1qj[`GPZ1`#pqliU,dh,hhGrlIHqIjrB"IjMb,Vp'mp+k0"hpA0
+q$Y2KCcDF6LqFLlmISZhlI8IlIlX,[FSZq[kZkplPrjmErI)ir(q$k(p[lH2l0Yh
+r'YZ`aZdrImVrV-I"NmDMk(NF['b[IlHciZ$hR3G*Ml(b1fb-QMPF[S+(ijRrQmQ
+pKkrJGakrJFEqSL9pDhhpEr26'C6lIpf9bqkraraqYl2XpCKb2VEc,p6)PfZAR@d
+lH@pGe-L3!!1Z-[[1ePlbhrbVT%l,'J4RHFjlS1MRI)0!Rqbrl,4D2Y2UI9dfSeG
+(BplhhfZrqhi(qRKrHaI`H9q(mQphrRrPr0qMdq&rcreMqYkrm[jqal2Yqjm&C0@
+CESILp,e2@GEerdZadIeF(ZHmfReYYKGpZIVrirjiIKIFmEar*m[c21h[rrqRJm2
+p[rA'TIqIqmIfrIbDb6PUGQAcSp$e(9cq[qPSY*p6qh6kV@GhY0YZIVprKq*rVq$
+m2j0rk(jr5r9qcL8[r2iIbpRNrdpr)VF[B@0PQXhcA`qIk$SZNk5,9&4I3p4q,rc
+GGVc[iZGr&c[jpPXZSkLUlA5mlq,,rLkMU2aHVk[i[PrLaFAmADeA1rBe[jqeqaB
+rLk'UXHer&q,jHbjhYHek(YHebqbdZbdY9XUUlkMCE+lrlrPkZbZqGZl[5eAXpVG
+dhDml(qafXIm@Pr&(lASDbUjf1#Q*XV[C3e9l)GjA+bZbfFV+M,(DYUBN@UTXX[P
+A-m#UbDGISb[`#LaS*dr3R6K0!Nl@F5#XU(-T!+$kRiQHJJkaeP#Epl&@Y!bQYS)
+af#$3cHXTCl6B46V*J$cc0$pI[fc3r#@`(RhiQM*6KA@L*%d[`5B1EhN6qd0q$)T
+r@Ml@E@9ISGGFehPHVfr'qPU[fGKSrXGKaXE)p`b#rXb10f2'bZ0k@9NFTG3AMFL
+LClI+bZZ!fI4[c@F9Q&YcQ[YJ$meECcXqcl25l3"Iq',EI%QjRTrZp2QIFpAeGD"
+(lGj2qCAjM0em)"VqfYVE,rGkATIYp,U2kFeEFechb1PlEj'SbrEIGe(hG4PrNI)
+brb-[mMJcrQjR-rEe(%kI@p2QC[6qe`H`qEk(TGKjf,mhX2m0PmhXqc[lE1DEj(6
+jI+q4dp,RJBp2r6,p2p[,rGc1AlEj(XkM8Iqq6f(NpKLr4mETk@mKP`f%0JJ*$2[
+jU!qCVT-'hLaFV,Fem%1bLaHLTZKk2RmaF5qNjciA2D,2I%q,G5VhUHNr0ml,rQq
+Rp+0*qp95C0EA5C-D089&EpkZUT-EimEjFDZVDQSKLRJqCp,Kh,UMTB)BX%aIUBZ
+mSclm9-5GkD3G`VRPUBCb*r`[Hb2B9c*lHaVeRa#JVJUHXk2dD4fJ))2Qp2mqe!*
+mde!Fe8D,ql8A"hh"Vic2VkbPreq[hCi2!#@B"*3"-b!5b!*-F#MS%)%3lZ'VVJ%
+)#)D)#43T8aX$9J$%"+`eAQ!Je@N5+SePj#)!+,-!PCeje0J)CY&Mcd3#FlGa*5'
+QDr%#$KJ)!)MS"M,aZ)8+!%V26!Tf`&$a28p[%c+@DX3Bfk!MS%2S)2!-5844+)[
+b3N(be9B#+[Ga*D0&PZiRbTEN**ZlLG$B!)c'lLCbdF8bShF6Vj,&)LFjAlZ*eYX
+i'!)!XL@PRjKmfS4%V%cGa1H3!(,,Ge'FcJ"!ZFjCEZUjr,U##6"d#2`!)(M)53e
+P[%kQZhF6TDUhL6N4+T-S!!!!J$9RCPC@GRKhCh!*P`DBGjQ)L3N)#)#BQ@N!#CP
+iCjQ*"hQ!H3Q*QBD(#AKiL!Q)!!H(L)#AL(#*GiL)QCJ*N!!!9h!!!!N!#*H!#3N
+!!!#C!*N!#*!!!)F*!)N!!!PjQ3!*N!!!!!"JLC!!#C!!N!!!!!!!!)Q!#(QB!*!
+!LC!!N!!*QC!!!*QBKJS!!509CR!!!(F(2a4'9Q9QCJGh!!!!"`J!B!"`!!!!!!J
+(J!!(K`J!!!D!!!!!!!!!!!!!!(L!F!H!#(!(!!!!J!J!!!H!J)!!#1VId+YQPPK
+LbP&ee)LqkXPHJU8@*,0B#$M(V@C-Hp@mBD6!5@H6H"cd,ka5Vel&,[Vi+AeQPi#
+K5VBf(Hl5aH1A3%+!65dq,XHa-"cCKTDG9"FfqqPGfVpL1arJX,34"1`JMJa9$Vk
+acq"L#-)$P)%))`J)B5S@#--)))`K%!*8p0bm0qL3!2)YBVq%m`6H#(*cBBX$kQ)
+"&5p"%%Ddp"(4$UbXk)IB)64BR[-Nf%"K8!V&8c(FS&4dEF8GIT(ZAPa5YiCr[rR
+%Zlb)PYI*&2#jX8p6&1&apAR`[-(*KK0SpD*KT8hr"LTElmeUd)Z`TGk[baGKLU1
++SFUMbU)$S9&jLIT&i*,`+E!1AS-[4J[`DX(+`3[lHb*6T5I0kN8[beSPerGA'Q*
+[Frb+RHI#4IPa8rRlBZlA6-R1LEIHV&AjkUpMB[IUrD,lDrLfcRZ$b)cSMicV)@*
+`34)2*05c&$k1c&eKD!%jK`KdY1E%l*q[FL),&j0elmCmm6qM2)2Vb13G'mml3E@
+HK(Q!6CJ6E6d*q)#-ip(XmrMAmiHH[$2N$D"LkRfB%h%Hd"2E$(P!6G4Q6dBimp)
+%8SpDHP2QJM'RP3akBm5H@I`f+(M`"1H"1B"-`#Bdp1,3Nmd#HF3"NJMS-mFB2LL
+@G11#(1!d58SbaK`J4cJ*c`*aAARVKMf!4kS)j63C-3C0(XJcM!M0!QL""4(*RU*
+Sc"33T)8S%Q4[`)T3bL11%"-ZHR2`!*bCjTr2RQZIpUBPcrGISYEC*E`lPc#jPbi
+&1lUp5jh9FBA%+l![(@+9$9e8RDmYAe)BEB&pkGcY43rrY(JMB1@AfAZ89c`T-#+
+16k@0[JCYpmi)mMHj'pbLTZ2N@YlZ`Kep[PC"epMp6F@CIbVFUDEPr&(bEPcC3Gd
+N-mG$+2,BCib'5rH`c&3c"mYKQf3cFAU'8me$1(fd-h&P$2HrG$-(I)Cq(h)CLpB
+'5H$c8-`''G+ZKR%P"P!dq8+H+KQ[GX-h+'GYSi-h-$C82kb8-d2J2AQKrIeQVIi
+TXlMFIPml1jh3HLA-ah!`!!#!CQKRH'H(H(KPGRGhChKhGQDBLBQDQTQDCiQ)Q)L
+jLBGhQCQBUDUCUTH)L*QUUCQSGiQCQ+UTUCQ(Q*QBLTPjKTH)LTLDZTZBKkQUQTU
+UQTQ)QTQkUSQUQ)LUUCQDQ+LBPjLDU+UjLUQAUUQSUkQSQ*HCUUQUQ+Q(PkQBPhQ
+(Gh8J!!%N4@CRGiL*QTUJc3X!$D!!!!!!!!!!!!!!!!!!!!T!)d4&CPCQCfGhGhG
+hGiKiKiL)L)H)QBQ*QBQCQCQCQCQUUTUDUUUUUk[CZUUDUUQXUVZkbkUXUlflc-f
+lZmX,cBN5,%LC#Tcm6)5Xq"PG%ZpG0Jjh@GMeAAG6eA8mhd1Mk#bRmTfHCM"4ch2
+Frd()@r0p#'$d'AHZV2%ar4rm!LLb&9dB$pZ!NF*)XE)4k+Mb-LNb9,6C1RbNQ#S
+P9099eNZYVXVAf&M-QcZ1bfAir-FKb2`Z5q(bI+FVm5ICCRPXeQqAcQGchrA-CrQ
+G"CfPVcA0mjc[2D(i[2r'q2d(3r)q6d9YSY(T0,dI5I+qAmcTHQkIjZQYlM6p4e2
+9GAU2RI2qKeRdHYklVp6FpKUZal,XpAV2TGTfYeffYSG[Gkk*VpKp2Z0Mh2e2qrU
+perjhHbfGjpE[2VrBlhl2IIDqhpc[rZq"i1df[KIHm2a2rI[rJr$Y[&r&q2aY[Z0
+cq6m[j[(mMbI+r2jHkr4Zr-hRQh[REhcrdrUhhkrfIrHK[rfrZp(dVlprm2iqRr,
+JIcrrrTkRpH$k[#pDrpIf2lIhral2qIpHe`rpqha-$h-(rRZqpaII`X2i10LBZ0M
+`XNbrk"Ar3+rk"Ar3+f"C2rf,84I8fQ4qK%MaBe&N+HMN8dRcD6Yj[c[#a1[`1$M
+Bq&h[[IEp6LrdrVkHSp@(H3maMqCmU*&q4NXp`GT%L5)P&r2AHrfm5NY)rm1m`1N
+U*(Fep6QCIAG[$*S[#dd2M!eiIpl6IARGd19jAIerjZ3Zr-pDCJdhaH2Ka-$jfAM
+I)dN[mRe0[lRVmR`[lEA[rqr2b([crU9-10lrekL,j(*Ip`ipMqRlR8rIlrJi-5(
+ZXPTGj$e[L4)R@rprIapKZ)PleA9Ifre+r&p(NrhrklIQSN[V2QDDNq2q$YiN50j
+Zjd@TM9ApZ4[0Kp(NkMKqGDaH@kcRl-(-H*%U`Fl(MYMlr)AIKp"PrVB(RFj&hQD
+qRbXIa2klb*2TG2m[i8r)Fhc&CN)RTI,cHKMpcN0"qrCk#SV1cL420j6p[9q([mR
+-khTFKm@qqAQqNTZjb&eGmTLjIV[pd9lfr5hGlcremlCr[r*4lR`[bCMaV#TSm6R
+ZP`rMF($THhLH4ehRI*RkRQ2UGI1Z)R2p$hrr86*mEp86)41RYmK0LlMj(RI)L6m
+lp5Pc0a%[HflqZL8@2qVYmMPq6YiNf,XiQZjk*QH4,meT'Y0CAaSmrCPrhb2aPp+
+eXrIiF1&$aF6H3`d)FIaBF5%#D(&p2j(YFEEH,aYXAeG[Y[&fhMH,Y[,fhemKa0e
+jQmpIEqAi[%`1(jHfffmmcc!BmAEHCJH0aX6fYjihPq,kQPk65k8"1RdZQKK3CpH
+LJT35Ne@NYDS#,ERE@6"&cG9TG*qhSDRpFDejhSrYlDE%M411fhrHffffr$Y[`k6
+VaImDKZ[aiR&lEU2(d[6jJCA#e[%`2QrJj2EI$a2SEEfYYiffm$E3i'QKif2kQ2q
+L,@DAT"S[PrCq9fACGPVZblEXZbf+%,D#$mPjC3C`#)+VXS,+6d8IQZGkVPZ$`Ij
+m(Jm$T0&b(5GP`1Rl,qHNc(4r6e(5DAXZfk6JpcfAFpch2FFhV2jGAp2XZVq9dQN
+r*fACIGi'PkV-k6Z0&drCC2Jm(JrG!65kAlAf[XJ4pr9k[l1VeHVe14SZ$`33mIk
+I"qTrr`G,kITJa`1dl69pYkHPi2Tr6p2Gl[5m$rrGm(Jr6hA"eHVmZ$QqAk[UIjG
+AeI8p9c[1mld2@M5DMR!&qpeI9pAqrUqVkMPJ-cR8mjcR1C!!Sk,RG,cRmH@l2Ur
+VrAq[e(8rQf(aCI1I&k(UrjG6SY&TDV4q(e(9kM,m[br,IHcA,H4bfFe'DkhP1Hd
+QMdR2CMRZFk[0mjSqVlc[HMkc-H4eA1mpe22GMd2@I@d[bTIarMmjmE3kIXq3!1E
+d22IQqpHGcVrTkA0mGahRFGQHVqKFG6cR2mecI0mYC35I@h%A+4,5*%TVHah'jQl
+f,rUPpDPRrUN8Qih&TXl5rh'jh&jDEfPcmhF4-K5EMeQLPi#RZdQIY2"J[jp,%pE
+l85NN4XK6j@NbY*8dH3mqN`C9ED6GRj[VIXJr9ArUr9qVQUA1AejiGlJF[Ai04A8
+rflMEH"c'[lRZIKq9h['j(f-TR[KeYIIq(H`IprJqVrh1rjHB0G6rRj1XlMDmEm2
+`Ham(KrrI9r$XJNjRkhB9YI"YFlAEE-9Z$8rmqY"J`IIm8++RR[DqTPH9q$(cpF&
+IMIlhqrm[brJm,d1Gmhm[e2bG$DcYV@3AZ"q$ZIVHMJmaR[Vc*NUbf(iDAkrd1Je
+f9j,ZrJal,aH5cr+X-[crUrV6mjq6kp4,JlZr4KbHmXFVbh`[Nj@9C@(`UAkrPrp
+qaAl!-VJ-1*[prk(+p"hRpBRaIbANj&hYGck&2fZDlc+bS0RqIiffiIBc15f8-2Z
+ehj2[IViQrrqf[p[fGrl'8jd68UiZHlqMl(i-VHf9MhZHXX(FfAKIkTIVrEmEld`
+,XA+mPRql')hp6lHIjACrRm,,e%UZrcr[a[qZjVl#clb$"bZJ5DpUbXQ*6IrrH,l
+hYjr,C(`jeGrRf,VZrqZjjrp'm[[qBN%baaX[q(cIeq0ZFVQXK(NIkq4q$pIkl+a
+Z+Z*$"CCQC8p"hQqp$pN[hrSEDih12qE%iF(QFGq63qj0lb9h&eHc0VhPThP*6`8
+V$6l3DeY[P-'9+RB21Gjq,IhRF"T6iQjb[pX[3bNkVqeCCR2lcM9ZDYEc+ql"Rrc
+r)r"ah`ZmUklf)-a*paLTUrYlri*IrSCkHGBprHCAqfBf18q&CIpEEp'mKf[HFhm
+1YhGrPFIkrYI3fek'RkqlbM92mEMCqmlRUpYYU[ke*2`qHbR`rDp$M39[bD[rQ$1
+XZBV)*39qEbpG"eI9rULEM$m1hr9bIQELEfq3!-PmLPTpc*Yl6h2FQlM8lMLAP6(
+JVCF@ebN&G&J[iR,e&4"rQ9"PE1YTVZC"%[q[UDf#$(XFTi'Ch1irA"m5#6&YED#
+,4l1'VKKUjG,k-V9IcY,(FIcrRErcY-PmlMXPZ,6S[je`#G&Eci0aRl5#hlRNlIZ
+DAZGIkf`eeTh(,fIVC'cpf(hBG6kf2ChIZC68kc2f2ZGV1Y-r3pD(h1dkZGq[&bq
+cRqjMrXKf123pEi)PR-p(dI"h[VD#kd'8b1,NGIMlb("Khd0eKr"$[[4`qjeh3fr
+VGaEfraqcQE,Z*p[,Kerl)I"q#(`B[`3l(HqYlQ8pc+HjaF1(f)GPMfH(m'(GheT
+Z2FjcV[ZDbhjIZ2FcXZhXrFhZ[q$h*q4Vi1jjc,E#dU2kfR1FRPZlJlMUq1r"h04
+P[@RAZ4bQaXqlb1@hZGYlhZ*GaXI@cYI2!Qh[GKV0rcFZIVpIREc`ZKb)Ypah@GZ
+!KlLA&YlhAcpl2hY[1lLAUEHhJedrDAfjrlkhTILeh4I`YkRPml2cYlGr9RcYKc9
+TAp6[-2k1BPFGcRIGc8@N((I%Pl2Aj6DjHplkAEfZZPmGkhbV'hYGI2hmrcqEedZ
+dca`&clbSfD933paEpa&Yl8IIRVIRNUCpTEcqiYB,IeVf$ke6bF[kP[,ilj9Z+Up
+bA`GerY+cS-[9dSUGR85[@jbGXrdeGVXqFpI)hZcPfpaVTHAPqYmUVZ0IET@@ZZc
+YT@l#h[,I8erVC(1c`KBUlLhlVk2dDYLUeXrZ,5drVEcrPA[-pe[dQl6S16jH9cR
+1I8VpacNlrbGp5Sb1pRLArlPrLh(I9PaVVHIHpejpVX-lAEqmYqqDPGa,drFFL!B
+Pp5*I-*,jlU*m[Z[f6rPAGhkfSqehf6Kp(#a)F#([XVVqrZGlpVS*AFk(NF1$ZH1
+Zrql+mYl+#SZpIe&P%PfmrFCD$U,,AhGhX0CqZpJVqQcq(JDrX2BqEd2lXjPGMd[
+JiqFXp9qMfHBpcCerVGpQ*r3G6jpTjpTTl+ANGCNGCRFacFqYhZGb-DprGRrBl[2
+ERZ[q[kjh8hqpf&M(r9R[drUpDAk-r[TPhGfiaA0@@`drFfR9rpp6DIDPj6IjE-`
+iArGTDM&Gh8@26D$mXc(U+LlalIU2FXjFc$PqYC6mYHG4CBq8LAIFr+p+ldpV@e'
+[Jq,ceP,[2LrYm,QUMMZ1ef@Z0SaLlI&bQ,P02RQ-CmVRZERefpd'4jDeUEER0RX
+1Hdr1I8U-[cR(4qDJijia(Fme"X11lQdj[NGV$,k$Qre3HId%qlilMS02B`&dehV
+lIU,+2,b0[C6jeje'(CGaHhGhh2bbSA*9'ZJk,R*fdlQImAMZDU)R(AF[RTm(GC(
+&Ye"Hp`p2@XB(qIFFh2hZ8pDGVTGaX0RX0Gc@[PjMR4I9%[pPP,ZlZdkVlNYaH`j
+(r8kYcYIdh0`@reZLZmT$afmZlh--B$eZSU,+ACa*Fq$-cjem8*hphkArPAEj'#a
+YGG5rmed'TD`XmBAQ[NXBAUI@mrZ[LJ(Tl"M#C([KKIeA-DrKejR-D`f@jq2c948
+5lJBAk2UYB2R,AMUhj9IbHZJR3ANcMYGHmhD9'DXbHI0cimZI1VTpp[EMAh&hkAG
+jLhJiiIpfZDrQUMQY*DBFc(b2Z@GhLp9EhYlc@6Pj2qH6rRNrYFh2aFc'ilA12bi
+XkqdRAGhlPe8mLeEr&YFP,q9AmT!!rkR3Gcc8lAAYVTX@$qB4HY[Cm5ARCeI2`@,
+LlpE)jDhXZDjVAC+$jA16YVdAkm[mD$Q[VfX[Z*mklZ"DHGP',6lH[RjU0PaCE$Q
+[Tj+Tj(R$M9bA(6lIcM#I8mMX11J,S,hR*r35q2jc*FeahGcV6R)1Sj[QZDY$!C1
+ZqiYiNrIbjHRVlHd-5(A''F@[0er(I6mlA9((Gb-l1Pp&XqTq[1ZqqZjGl2YGGHK
+T,J!1,Gl#AHpd!F[rZAVjm[HbrR4[P@qZZjf`f#B6i[B4pKPjq8KXYG$[CFq[eM'
+'U1jr[9p"X*rFChQTI1C,BFGh%kdYr2f%lMZ1jcR1HkZdjkdhYlVjE@1mk@-Ge(,
+Dr)kRAqGVjHRjhcrqq@bl'0ikAH$'h![pGF5l6c[1@8)!iphVjr86qSRqI2Z0K,Y
+!rjb0T1`qVbIj2f6Zjf"CjmA[ZTMpecQdajN0MP,1'*k1,3`mH[ZGMCfHYe@(bf4
+c[XE+aSDq(p2VFjNDR9AYS-TNCQ2Ac+q*RHVlM"pL(&0%8ci-AhSQ,V,23824qem
+(ZCqCBj6Hi%ceYCNICpMh,2epEj9c`I4bQbSHMMi@*r@Xr4V1Sr2fYlNI@b2V@0R
+J`l,&SHa$-q$(bQ4ak(Xip#,l1,-cqITFrlQ8eZ4pEp&CXB[Xqahpc[Ur9HlhpcJ
+'#lBkb2UkAZZjViPT2Y,6Z3$Zl5dehV@qXVp6BqjkfIjc)kR+8X[,cmrd(bZTkrY
+GMpIl[r[j[1r6rpqhd[6rTIripVhBD@9PXeDFjmAj26G6UEUKp2Z[Vl6lhi0YqEG
+A[l2hrrhrqX(i+@XX-Ym62mrTHSkrYHjllDEEmrRm$fIGVXYbZIq0drdHdqRp@mq
+chrJE6m'imMc22p$q2"[rC`2Gb8'9iliAa-hc21fh5p9p(XZjrmqYpRYrZC!!qjf
+riHhr$N2brYrTl2[3@(`XhDp$THRkVVHeqVpRlfhh@qp$JIhph+@()jrR1JdR6G6
+p(@DhBIpl2[IYH"plm'hmVHIUrEr(e2@rclQ(%b04NDr)mINH2bQ6LC5PTFPNBZ5
+bQ5U+R+C)"mTNC'5Mj6*j2+C(*C5SbQ8bH8bP,P-T8j6+4-N&0,NN#8XI*9-3+if
+8U)q6Mj'6P+ZLb9,'b8G$N!$$p$rc+DV*qKNp"rIj@8e3"r+THpTDArcrcB9%ALC
+6q2%"(L3F5Tbf8e@`f(%rmiJ9l$)rRb2jq)"(Jl#4a)Q`bQUZ,M+DVqm(bXTbH6f
+'&P1pr[NH6b@EbQUqK8C[qiP`Im'Pq9rIqp6p$qrpmYX1*X1))DPrM5raU1*5l#S
+bADl$rbPiP,NZeb1qb2mXMqF#IPC,YFPf[mH*+rV%iQ`r[NZeMIhJiRbXRX-RX%#
+C(NmMbD"-TbBQFTUN#C69IabQULrhqK9`4Z*mU,r'1*b,a2im3GMYDALC,*C2)bJ
+&TDJlH&9NFQ!e2Nf#&994mPP*8I*C2*)3LS)bG,+U)NUSN!$!D9NSXS'L5Q5bG48
+6jp0c(*aIHmrq)"eI`Z2b'FLbDqRq&58H3MC#PVFM%M5)NYl$k5,,LdMX3Ld85*@
+aD5SP-%DDZb+p`QXM(IHM(LNb%5)ch'f#'3TD52%LaBX51"%6)aiZ4!H,P)f3!)N
+A*eQAU)qF2C-SSmDNRCb*d%@*&cG#,C8)XA+8!XLa!cMj#*)La-[(L88D*NZpL4-
+c%TCN6*aBQ3jD*N2Ka)RBa)`Zid6+"jNBNMcJ0Ul6&JMGeY-Pi85MLdf3!1hmfI,
+Md9["*NI1fh$Kfq"kZ2m('hR%SF2K`mEHEVHEI!iH)H0IP00JHTfX2-4+UGiRdp&
+iRpHhlH**L423dRbc!h%SZML5FEUpE`I&pIkHZq9k@AUZmSXEp2aY6fA3IQaSHpK
+rjh26mAUY,Lr0p$CH$JER(rmqafIkHRNjb'CKm2JIGrKKHr$TIQlI"kcfY[fRDdq
+JSIbpr3DZUp5LSD@bi@QrRY[6mRq%2[-)2&j,lh,HImEMBh#d[`F$mPlT[i8h$fq
+,THXkAmCj(2&dY$l(6kATHeKKi@$m(!rpjhj(UE,pfia[dp*irQ3`iRTr-TFAEHe
+ial!Aq)N[*Ifjc!mV0F26IeYY0r6qbr8p1fhepjm'Pd[3mjfm52%`p"k2rFh*4I*
+mbEPZCSA23d1X1K,DI,`26rmSImfhd1qliHl+q[3m(mrqDljr&aB2aIhql`l,qZ"
+UIhI@MmV3k2XE(N[`EDiqK%Y,6Hr8apEl2LI1r"KBIaZ*U[9mRY[MiA+F2DFeMqR
+j2EFEEIplHKKHI(Tp63hh%eP4bAGd-aihhXEKpRr(%drcI,MmPlrilcVr6dQPl5E
+2lHlp(Vr,a[4bA3k(CD1'UQ(X,IIp5ViYpPYCafAkALk@UkAYp0h-LTram[Erepc
+mhmF2q9Rl'PSIYmcfYhqIVqRU+Vqra2&SEEm@frrk,&Y,6lrr-$`2CqRpq,Ur2kE
+qAL`rFk$L`pAMqAX15pZKdF1PqPdRZ4F2Yi[5IIKchJj#KjhYppihLF#(Q2XiQ*q
+R'[qIk6qQ2JBr$q$T2FMePTbAiZHap9S+R6E(HjVTjf0aZ(b%2Xr9qPj[G`qRK``
+r8qKYl50bZcPFMfmf*A4TQKh&(jFL60P4X2+(a@erNNNXKTG,T*Xf*P+1KlHYp6J
+EcJ3`pRLG)!qVa[6p[(hQ*TZcfp$'qrkZ&l@&qrHIYd[p$ciH,YMcREEE@N5RB'q
++[4DHkc%b'ffqkm[EICrTLHAZ[#m[!KKpVEHClAPq,Z['r$2pVaKm2'q*k[m0,dN
+1PKaY,TH&MHRNHhjf!VELaDQ*D3&iISU,R+U,"9D6R1LL4qLMaG*%UrkEENYYi85
+0YSN6YmNI*"'bKk*-E%h9pl[&lETFcY[,rTC`Lj2443eG$6G*kHPi6RSSfffKdfm
+SGYaIBpAp%@`ilP19rIqrSH9pY!rYmSJEqh3mS"r+FT1P3IQP@8VpmU#9!"YP'LD
+Aaq5bhXIfrYcR1HpmMj(1FjqrpqkrIr(pr3jIprbH2m[N[qIMj6M[hm(qhb2EjAL
+F6LH*`Z&YY[bR*H&rcpr5r[rIcRlr,bhKI-j,PHFrI(ilMMd6F+((iRYJ4(bFER2
+imec3+IGi2Uraa[Ep[MKVIZmT`I9JjhGEVihj[(q2TG,ZYeZr$fhKFGahj0d4[Y[
+'#$mB%ED*0m2h[NrEq0Y[8hAPp+%e9T2%$(j2a[#r$ah+FPr6c#A[apYjIYIMhHf
+r*i[LrQr0qE,rQ$M`rcIQkAMEVQZPr*mImh`r&qjiILrdjhmh1HpleUI$ekR+INr
+Tiam9d2r2Hil,r$&4mc5q*Sq@h[,Hl"N5Af5b-qEe%6)j'fPC56&VGT2`-P442PG
+&N!#*f0(CG&jd%r"L@@dRr"6d@3Sp"2mhCj,)eFqpPC+6N!#YSl(*HYkhEdGR(TU
+5)#[EcpV%XTpaJf0245)p(Cj,)dFKd,p4+Li09G`@02N+D24jVXZUqQI%h9@9AfH
+PYpCk1pYYVe(4bZNUVQjUG9cPj+lLccPAkh1kA9G$r(rQQrRFhN&Cq(REM5k,RrU
+IAjVMrPFrPp(U+USb2II4lrjI0E(BGEqqZVHSjrU1NXH3!2Re'Nq[[ZdbrekM5kA
+9`I&rMSF(U2UI%cQHj(LarVrAqch'IPh1LeAe-lX1IirrRd[XeXVP[4q6b@MkZbd
+A2l$kh1j[1IfrjiR,rUYTYVq[T[VmIXGKeImlADq(e(bHbZIHeIdUM4I"[pAcA2r
+)P9A,eN(2jINrVhR8FEhER`p,VHLjrRqIeR8A[G5Y&RqHPf[fUV5k+'pprUqVqYp
+LbkMU0&crKjDirF+(k295EA[remeR[fCLjlUGBjHiqhfArA3IAPFPmAIrrD,QV[U
+kcpFZejVNr!JUi)12rGbdEi[0E$pPcGple%[XEM[Ue*(RrVi22GAml4`968Mk2aZ
+2ZVESThHpb*!!j#ApD$elRl1Mk$pR1hpGiHahp9Pjh9ePlIee6cA(rX[lRZ2ASZQ
+pfIPpKb23H"aFpe&DiMl[RURUqVDMZK`H,Fp&EI#qGX-YhreVRkF(plRAk2S,hkq
+GJq0d+4I*riV2B[kkSjVU[eq$@5q0N!$60C[lA(q"e&YerdDhZ2YIDSVDk%@H!TL
+,r$cGAVCh4C1YBc&h"l#4YD)cl[FAZLjVpeaUrmdPYhAe-(9bm'VrkBbRJq[HIic
+G@)M`I&h@ClM0A[bp9[hD1q4m64e,%KmUM[Zq6282p3@0cFe@DhfG%PhJN[hG(CD
+[r13q&q[lF&C,fX[0H'eRILl!5RUe[f[VrqIrGr9pAe%%(1jIl&PcpP9m$(c'4lh
+[ZElrl2`@9MFjqUi[3DUlq0hPhHfhkHSV-1MQ#&Jl[l8(kmer"L&j(BARHL&mlpR
+FqGRDc9pMC3GGfHEbqZqaC9SL2JikI[[YGrp,pNV&P@2c0(b0ERTGE,kM45p"FeR
+`I3q,rD#rXEc[+EMYKb2eUhXmlJk'Ue8ZXeHVJBJ2AiYPG`DMD6,ZfrjiQCZl@[4
+[RG"Fllm%&Ekr)rAJ[q[kl[2TdAe-[,l2P[qYCYILmRNUH4,qGUpAfE9l`TGP"U0
+V8j'IFl1f[EZ[VjA`EHfrjSpPVZABKa$IK[+L$`0%)HVpr[0I2TULSf(bXeKpRC9
+0eYZIj2*3E6DAF&A&PrJf1VZZSJe'akM4Fh9h1[JJkU$qf4b0E49mZ#pPFEa2qZ2
+cZZjHXVIRGaQmYU0MAp9DI)jAld(X`BqSc[,4,fGb21r8Q#2hrKr@[DMaUENV,)`
+I-rlh`ceAh`cePU,fq51re"%Dd%VhYYP[#jEZFYFA2IGaQq2e'a[IeD2*q*bQ@J[
+i2'kcXr5Vi%N2!k$XklS2QFrbG9QEZ9T,VZI0d04qca1keHVm#UjIpHqkM4Flbpe
+mk##Vq9TVcp+5Jd9Rah*D,-jhkh(pAU+hr)PEUkqGqV6Ha4G[l-(YAI5Db,FbrYH
+[m5pm$XkljIXFjpMp9PmU$U0$[rpHEFp0k20pch1`PDMZZqeICG*HhGjDcZMcHKk
++jq[GX5@PdA,E,QZcY[Xp,UlVIp4X-TS+D9YBZeVHTRGRmV3e0C+kL#bZF(NDR)f
+YAC@d'ScYE8e&9e(dp9N,JT2Up9f@5L@AJAHULi1SkM0k@jb@4Y2LdF'dSXPke[k
+f5SkHMYmK6a))X&P'fX'$Y1hJjH*dG499%@TUUUiPj[QlZeY#b2U)21LG4FG484D
+lU+VU6`Yhmkd`B,RU#39a@3E6)`51NQ@99-Ldd&PAcBY4"I4D,C`ed10B@(59NEC
+pARHqMEqYb2V4Uh@iH[pc-iXDCCpAmA[YI-eZrVDhUreaV6PSfChmD0@aXl'jUEN
+FM0kQlY,ZcaI@KpQ($Kq$e[@SAH2lQ&lQ8Z[FbR#lUEAf-2Z6)HfjH0V0pNEh[*Y
+TGAF-b8Haq&RJqMl1$LiqJSDreXMk1[pbCNBEUCKj(l-*mZQ[KfASl,dBFM[BGKp
+ACqjV,()jfRcrVIDm(&Q#-P"hk-2J`fBIql$Vr@aFMP*QJZZ(KLm3*lPeMrmb1cY
+2@Y0rDDLdlkEhhZHjAj''ppEQ-(h+r8j'YerFjlHpcU[8cYTe'Te0aHhZaeZTQq(
+jrqFRjhh,[eYCBf[SiHTcrFE5req[b0hRFlAqYP,L*GpaefqlMZ-MNDI)cUfEbr,
+BZGpc8kRDAph[Hi"+lpDih[FCf,kfGY-cP*Z,SICc0hHBGhKqYDqYBe'[XV[Bp4J
+rVbqph(RGR1bf`T2eF,AB2GCE+DriQ(q[RZiZ,[BELRMA[RFRcf4M4Th8cG2DF[N
+DH[cZTh!Mpa0QfPlVUDEVEfE[reI1pE@kr"lkllkENE@ac[8GpFDrHl'Cr2HlMR1
+`il,E#E@p"[Yce&CmlZYGh'@f&P1lQEZ+Z0Gh(Rpab22C'Pf(0(r(-eU8RFf*5dX
+Y2jmhNk1ED@IF4*ZrQcIecGI0Qlq0ceT'MC(8eqYkX6@pPG"5GKcA)E#dVHJi@Ck
+M)kQGrjVZFjcPTXl[K-DqihiQ)e,h0Ic9Sa,5TV%[@mYeHrk!5hkTXD05rDlT)Ip
+AHqGmVUC[06YKAGpfRV4Z@TEArcApcQZAQqG1lRF@@ic%EZ,MqIFFp'PHPe%fNPC
+MS1qld'GKcIFGp1b[,r4rRjp(0kZPhr9fH2-q#(C3r"#Hb[r-mc'Xd%EZ21kQEcF
+lZDr@ppeGT'PAIfYICE'[ll0GA0mlZFbNSHi0h'GPHYXp9Gh2ZGGP0MZ-($jRHkR
+h-r@qj[[dDcYGIHm6)mYKkZ'cpR'pQk`IGp(h+HdQCpLpMGa0mlBGp1TD[NrPDlB
+8Fh2DM1qjS-MKc2@Z[F`k2@Hl[GpVriIeXFTNGIHhq*k2ZiX1IZ[FkkarAbFUlKV
+prp(1h'[cZpTmM[khr(9lrUiePh(kTfZqGS5cUqc`lYCPEZqlM2IUSBmh[XeFIUr
+9hfFllRKq0Ih%`D2U,M[Y9[lR[ZVjXqD2HrUlV2rUphFlrIli#lMZE6,Fph54IGG
+db$YKHdFfYbhV61qjEIeZ[e(fZkSprFhZplLjrabeEhAkZSZrYEkjrVUkr9@AJlr
+Airkpr[EhZ0KqVHpe[XM$Lf[IcX2MZHQjr-9[k,h"lLbYHTKhpPLqjP-IV1JXZSa
+GPkf8M6YRkdDph(IG4cf4XYIXFl[lhFA(l2UGajeEjpIF8q4'#%(Kj(h-Tkf4`l,
+Ql(2kch2UDl*a,@dXEM$bPlPZkefKbY*%qRX,LlepPqUih(mrSm[[E$Z,JS8[HkQ
+jl`GrVSfr'+LGaVrUh'`YI@Y*hbZTcXfEcdh$kMbZlYHTqMCE#clUjlUYkMZShFc
+YRlNDpfQRr9QGIqZpfKmKrFHI@qINp1UNieaX*V9aH-A'GVNV1iYGTkAcXeTq85X
+&A@l2S*ePhAmapHibN!$VmElPabH`h&hD6ZJjVqGT-KMGalQRl1ekR2fYPX1EZ%V
+r@ME1efQZMBGlkfS`reCVArc[I@Z,ZrlMckliY2TpPLY@R*fT@*ac9aIl",L[pC6
+)bPhlPRMiV'#[I@pc@CrPqYD`9E1QmYlLAqHZpIhJ[YccA1EhZV5ENI@Y)IFk[UE
+2eXrDPLYENpkPe'MGpHqYeI3D"Lj`HircAI1l()fPRke#'lKamMLZ,ZGcC6MZ,MZ
+D3AI8G4hfUTlMIjlBriHPcd+A0KHpeD9pVh1[Y*Z,kbA`3IHjklU%[4H6EZdpcUq
+qrc0c9hFDqE1bH6hYT'fPh%M#pmVPf,h2GlmkZe02QTYT0Y,ZlMFjGkq0F@ZCkRp
+HcfGD,E@fR9lhU,MZV**9aDpAriPVNlhZKCcILjG95A&hXIrHHZkl+3qpm@E[GM0
+Qh&*h&aZ2e8N1,XV6UlZeemkRb1[VIe@PTY,Z0AEhUq@ermplFAGEhZTVp6PFl0M
+'0ERKD@Yle(kZkp+bLAGTceG[IPGCNlMm@E5dZ1ihUU4XZiqdPV6ldD6[[LjHi,G
+kqpqRXD6p@plQdqRh!hIR8PVZ0rPHSQfPTFDIApaTkH0NZ6XVZEQplFIU,c9a[Gl
+bh*kQ[PCfd&EjhFDkpedkMZprQqih(mNUkZ9%TGle$&2bf4bZphp2[I@Kap6Hq$$
+'ePdP6RG2X2r1k[E[BdqcY2dl'dcYI0hh`FfA)qcF6FlFAGlh&IUGl'lLRcYEIem
+hX[e6[1aHSepah0lqUbhYPPp6F'ELpZqiES@e0(jeIIpaf2l[YI`rke(3IkrlU)P
+*[Glcf@lRcqTM@9ISI2e2kUh(KajRX``c24pQ'pamA+HjV0Cm(ZA82SqCRcm#0EP
+-rV06lRZ'2c(b[VHYq[i2FY,6)j'(h-1ccq8[qSY*RXAm-1'IY5KQC(qe#cm(HiH
+0$k1rS@FE$QB0#Rm()i[VA9RNI@Xm@EpV1f02JqbIbcXrFX[Gp(KH$Cr"l2P@2Sq
+GIlhp(ZqYCc,q(H`l'(+Bmc&XrJ%I$-al0I2f*(dFA+D#k`rFpEK8HIeZ(+pE`A+
+bX'rpD*lRZ`qM`YMP24cYI6j(!jMphZrSmV@4V[8fPTAf8hBcBNDdVpKC'P50hdD
+0h'CQkq0DFjhhZ4TZGlV3@RFEr$b2VHj0QqjAfRGC3qJ(8j6eTXE@Dc$bP2-jAQ2
+Mp2eYerhpVm(jrdr[r[m%15TkR+mGQ16cZKk2XIqrYH$iIiYh[Z"l2YImidD084U
+U0PBeM'q('cFE2aY$'k+0mZ0Tih@4ZbMDf0h-Erb0pB@rhifhMH6'r9'p10rD0ld
+UGCFhd(4kMXIqqrmAbrfIcrYlXViArAa[Ph(clRXrTA@a[2Yq*q2bI1rGkI#rhlZ
+4P9r`XeS1Hk$SlM8hArIer"mMGqIrp*p,Yr5NqY*pEYq*MCANXpmAT[SpU-rZI,h
+ZrrVa-E)j(+j(NXMRXMCj(j'4qENHZb1Yb2Gj(`-MiZ4mr)qMNIkC(qq4pc)iP9B
+jMPHAd(1G"SqPkR8r5eheIVrGm2a[+mlIrbrYJif0P+QMU+I*j1TUFMND6*C'8IV
+VU-MNDQT!@NT+L,NDLPTBP4P*9459'8UiP4Nk1SbQ4b-D,NFR5j1Pb16b)"e@6MC
+2*a+5)!p,NFM84XR69&94dQ3U+@QU-TA4D@M#ZM"b0NiBDIqmVqY4p6rc+IfpE19
+(e!$cQ6pR*k$*k#9r@9rA`FMm@PiG,`d#8[$PFpNZqTH'%0,`kVBFP8I8m(`38rU
+J3$+6RD6RDAKJ6NIq!Zm0AJ9%m%1V@PYDMkRVH[R+M0jh+E+Sr0khh,1SqT6rhU[
+rr@U2UCfSqTpA*k$1(+IkhV8pi)8!dSmRS-Phb"%aH6d!bAer"PIebHJ3EpHNk1N
+e&*cS%jckredcYCkE9Ci2VIAT[@UYKR+21dIh+M0LGU2U)%U2UC,[UMkNAeUIqpG
+fVfcHFbAIC,[N#C,[U0LbH$D5bJj!Ref$14T+`q`r+5XR9e06@eY,8aUQYmh)dY,
+NmM5eGE@a+@SV)Y,P)Y,NkbVV+bV3)!F3"QKq5P-%XMND@,N6e-C%%ZqHHT@03Sq
+FLjqTc0,588HLbNc*4-KNiNf9QD@3!1JqQL@-VPUCSI5!I&QC$*JK4RceJMN-M&3
+M@5hBP%b%@,B4iXH+J3p5P&%L`a)BdA)!(%!B&D+$*dF3(SX3RXI3dHUZN!$kA-J
+`'2TBU89e0&(LaZ@j1Yb204SN@iNC',66`+dl2T[e&#*'Z%#8$iTBap*amF4kNce
+1Re-a6e)a-Z"-D*)qF[9I%j1*5f,2T0mL*%bm50NSP8I@cpb0%L6rGaDDMp'EApV
+%Lp[N20b2VC6h+qaTp6RFrb2KH,MBhD3m+'cra$i2SiN2$KiQ*KBf&KGIMEb(IiQ
+&LqclrAr"[24rEp[hqQjAhq[pfKLI%i2m)FEhk(%mAqN24rkeH2plqr#hHYmAb1*
+r[lHrrh`qNa-cr6,F2q(d[9pr6EcXp4i2#hQ0lZ2h&6pcbGrLrFch#pM`0Yq,p[q
+,lp9(58Ad-(r((FM*lR(K`Xc[0EMGh'L@KqZreZhXXMYYEjPRerm10$Jh@maXI!r
+YLBrSjIFIMh06pb'KME[T0j!!iRYlcdIl8+%2Jm+'(!lA(hKmTA$e[Jq6M@ISfH&
+MBZ*LkEj-0$GIhXcChhQjXp9980[M`lIbGA$kP#'kf@*aIHQ"Mp[#KK`ZZi10Zk(
+Arlm(j(-qr[00$[1$aFI%a-E3id2JG$c(*F@Ui810$aYedQ&m(N3p*qZ(HIkKeZ0
+L@I$S3lFqU2Y-Ie26klbV,rA6fH2$UaYICaBI*iRECVp[rACGP`X)0m4K[dIkiB8
+ErCiZmK#AJl[ViGlaX(l2iIj3i(!lEk!ff!MAfp"f@EpAhmE%DDi@Mrq(1i@YaZp
+4VKB!Dih2GrmRm[c%DGA326TerpI,jrqQ,ihAr$p6#`2pHhTZ&rMe1RiI`iBI,p[
+e2bHVj-2'amE%mRmHmff*$$ffQ)JreVIlrNhr!r(d[DHF+1(kA!`[JmcqA5rZKKi
+Z*KHh[1[SFA'a2Gp[e-+Kf[DqeMLFq2j2(q4eI"iIUHr`2*rE`X6pfmhQ0lhNHVU
+iBH"JF,b2cmc$`2*krdI*krMBR#K'*KrclrRq4[q&MG,VIkHrLBN1Xhf&$MpaJHL
+Il2F(GGP`1[hQ(Mih`HrlH"kN0$JF,H5FKj([E,U[3qKlF2YI`Uq!(rk1S!AQp4l
+2EB@Qk[T*YTrlcZkl2KlVYSGpKF6Vr*krVIQRTkV2dHGpR6I3i("+,XHlkMJr'lA
+fiI`G*L8#Y$"fq0JBf6i@0S[l`eAKG0k[XrrrPk[GH4`XDKVImBRCrirPi[*H,rI
+jQkmAfIIjA'p400bYR`2[qC`XIbHZcIQ3!2#aq0`-I#apMJBrpZ`a1RqK[1"LiRC
+qh`+(U(lrrkm,V[dG,pMphL`qRJF@KkZ`m(H%H`mA5m$2EZ'(q2DirZlclHbiAaX
+Ar%2TF'($aiD'l`[,p@(VZ$Z[Eqj`Z,`Gei[im,pQmi2CI*a-,#mE!p,mX1)IAMr
+MfYET25hQ&$pRYI4KkcHGYm2KiN1peH2l'kaXIbIQq,S)GjVIChRAhA!l2LH0j2#
+m,drSqRCm2JI0h@hq0`1%(F1*if$SZE,,Y9qL(hpel[lpj[1&Ljb(MIZKSIM`['p
+(HB(#hR%p4,IKrM`[EKKd[bHdrM`2'`-,am*IB(MqcqMXI(Ki@&fPelX2p2ZBL21
+*R-$%iN-1lKmEdH0lIUHBk2)3ml,j2'i#20j[%HIUjRf2cE,$df&fYeL3!2p-6%r
+IZJmmRfIIphHEc!lAr@&aI3qcbR"mRHF2GGR`1PKar(q9fmcLlI`HRi@"3kIKMCl
+ck@qkcJHjbQ*Zr-ZXIi003rjdQVKaXI('*`XE!jR3BrrrjHUm[UGh$drUH4jI#K`
+X5((Kr(GFEL3pVM8%q('rGc2r82piDcHIchRUlV%aqPiN10[1&k2%a0e$KH"i0$T
+pefI"r23hRQHhkR5GIZLAKGhie$9pYZi56d10MD[6IrEc%`0[3q#KZk'&Li81*LG
+C$phJi@VK`2Zk$KDB`Y"i9#m$Vpcj+DPTjem2cPB*TZ&lZ"MiI$i@2`X$6Be$QBF
+I(rT`[C`[TF+(%qrmIb5cEbH[kA!'KjRe-$Ve3cMF1C`H&er5m,qN`20Ml[ZB82d
+HbiHpi"IHdfqS3lcb2*q$Lkh#KrPrVpr@Up"LIb,@)I4e[UHTaGeYYjq2ihZi9$e
+2I`MC2$Mq*LiIE#ii(FEc(hR'aqeKlEYXEHHMi[Nlc(`[Nm#(Km$EpIk[Nm)qlhY
+IIpAl2ir6dZ0`rQlcHBm2Nlc&XiFILpEJHrPD'2k24rP`SH,$`2GiA`B'"MDhY[P
+l[!Kak'mKq4phQ0EaI--!f&`[*amEVYRNBI9iZ0MqjLLKKKrjYq[Kh(U3!2q1Bpr
+lQmp5%Np$rcdq&aXAm[jGj$MA@lSHCphrVXbcFKR!mRVpeDAF3r#A!K`Vr$rcLDZ
+(KB(rH2`Xhj1YrAUlMQG0KBR!XrCpAfpe[2(aY2j1VhRcqTlA(a-,!a[8`Z!B"[k
+AAUIQN40YMq4q,eV(4@(8IFe2Qa-+fT["qhp@(jePp,Jq,r$+FjjY&f[KqMa[6qa
+mcS*F6NjIqZKplkP44hN5EeN-2Jq6e[+pCR)Ecif&k9,dr!c'"JGVkH0kRp2dqeY
+iHcp[e2ZBAl-$MIFKpVMH,$3iH2i'0$iX2#iIUrGlA%dX2UHh$c(m[QIMaq&`[Gh
+ICG*[28a29kImHfKa0EMqKiqldhNieeq2JlEih%l6E,m%l5*&j,EEEbeUpL4,5*S
+!,U6mliN@#I%lH02MC)lE%MAC,YipTD'lK%LIpa*X6Yim50pBr,ir,q*&d[bSN!"
+fpUIR1),R)m5#5)Bridj,EE5*fm5PLH9h2rHfm@*5lVm(LlVGE@TmMUqVk[ZHjff
+fh%6V,MUqXr"iS(rUk[Ur)Z2)hAi1jlVIrr9HS"(k&aTp*SHFjrQZ1V))"(4)PV2
+L4)mDUTSPT&jHLMC'Ebp*"Er@SiQ8ST%@6QBQTk1LYI0e0[DHEQS06iH3!*X5R"D
+fLHPk@LPj2)@PTfi,@pY%LHPfm%fULHY`k+GfrTCU2)b&V@'p,N)M4EaD+GEj'MM
+8D&V56%RlkMQbS)Xq*k@dZC0&DELE46V$)@Pp%b'Trm3cD5TX6X+Br'608@5M40&
+"k@D1%LQp+,"DEA-j580PSJGMC$SXl""f)i9Y898%lSZLRX3Yb5Bk+,989*0SXR&
+V1IYB-ME`@SNXYp5GE34C86cC[di,b$j8(el,59RBQ)6krerTGel2IGPr!pK'SVk
+UqXV#qUlMJ`GABAdZAp63eA9G9eGP+YkVQi1`V+R[Fl"hm5mlcUaBe9pUZEd9CbP
+p,VZid9EGk'UT-c"kh1IlQ@9ME9'LUDD9bUC@Uql8`GRfG0V2YI6qRGbIT8PAFG(
+"c[5@1CrE8hI2jAPqkhrlGVVck**96"EC@Zd@Lf[LFIb9GSUcMrL3!&Eb&Vj22bV
+M"c2Zr2cXZY!-!kU*p'TbYjE922k5VqT,lc8CVSq,DirBmT%qYJN!ed&c9399C"h
+X!J2KI#Pr+k1[VCe6"f0jSX(-hRNmlD`E6PjQMc&GDjV59-A0IaYXc"@6TFc4H2D
+mhVI'TZA`[Kk6#j(LjEV[TAF%(4`G(hZNd@ecY$jm(8I4rlmc'p2NZ"Q[SHcS[Sq
+RQ,RDr4cPrHh%&j@3!&aIk+rf[8G$BeHD[VrU1GUV#C!!ARBD6Dq6@eI,hq$8m[b
+m(,`F["96T1CZ,MDk+VZG4T0ld(lERI9IXjV0GG9f1NbqKLC@#lJVNfFk$X+q$FL
+$V16[pIe&aeGjf%Z$+h0jIB06PH`XVLaNjVcTRTk+ihYVTH2YE5ic9cSUQ#jVUqr
+m6RHGc'@qE69Ipq5rKmM4IZd9ArVkJh2,jf$m[cqSj5aJrmk#qjI5I3l[Grfhepm
+Ma+rVVRpYIQ[SCVbX,0H9l9I8c),kURA[+5[M6-ebpq!HDjHjXFUQqP`FlDlQGeA
+0h%UiPA%(B3HYCG4FEAfFYepcd2BIUr[bAAAh@jVdq2q0"AGK8i8H,Z6p1pVZDfG
+QTPK@I%VS0IcHSJ[0le!HARZhGl,J[pc1kqAf%qaUFKcNlakQAkI(e@Ld@CMbZGi
+qGDeN&lZIbkMN,,PZZmhU2MA2lY&pqVqq-A"JeA0fX[53!(8@0KJ`F[r$RVlSdhr
+Kp9ImRCGGIAfpjlMZ1il-q4pr-q4I`B**EHf%VS+Uekq`dPAJqRDkLGZGcJeYC1Z
+mcT-V89qNjHSPA%lPkL$kd(ZFYcYaIpKdH&BA2b,P0p`G&T0V"iPc8IIMaE[Pkf#
+"MI`GKJr3JqQ)@mepap2R4[lMDbi0cZChS5q`LFG+YFVl&69k,a*)hQKq*SSe("H
+p6f&pbhAIYSmepq[r[b9cp#jc@e`CN!"T-b)+VXYVI3F[l(1Ah9CIrhrImHFYT9A
+IMF&Rrm2Kr3eA`qZ[ELC""SUqb[XeGpK,h2fCheDhX*IB9lCF5UUer,"qQeZrK3!
+'!FkC4CL$-II'iUrEUriFqb@e9F`IIMj#ijHYR33$Ef0Cm6Pr4Jf-lBcVcPjHNk1
+YQF[A3AGIPE+[ZrTfN!"QCfCJm[PZEkVMj1CJc8Ueq6SJjVjI)6X'eklVATZS*fN
+XNh19VB*AACTMFIejf$q9Prla+iEU`-#9MBD,UpY`G&eIiUXP[8D6+eXVUkb$IeP
+cAhZVJheVF0P[CD6+`H*DkqYJ!-!jdc)eGK8I3ZH"8HhBU@hE%YUkUVS0Yk9TT*9
+af%%"4"JhrBHlDhmZjVqaVHBjI+k65$If-&h9j@$m%[56,+9N*fLYUrlfDjI4ITG
+1$cfMQjV3$KmVYGVFI3HR%m63h'NYUJRaFAYb5pk'[dAaZZrE[AiiZPbrd26dA2&
+fm((fZj[-ec2dS2eePjAhIdS0pcGUR%ikA!1*i@NPf9i!B"e-(ZAelf&4rpf&KFm
+VIIi+"0#1,1fYYYDlD*aHaR5S*h,UJ65@-(e##Zmr,FH2cYUeaXdaaT8(4CQUUS2
+rZ@j[VUVNlE)6T8l09HLkV-dA+em(BHeA9G@pd%@Y$VH09@YP,dQ3!,ZlIqFEdma
+p$mITjMk-#U*Bj(f),LjUkb$bHSHR&iYVGhNZYJZdiGrHh06rpFZR$jediHfMj'G
+bp91Xl1#e(%Jl$#R3AH9l1Yr,FF9MK`5j9VZCPhp1eJb%&cE5r%jH$RH6ZB-c"QC
+9Ve9YcZ4RAV(!k[dRPhZDX-AEhqNJ(!epaFe-VVY&IlkSq0eh9FKHe0YmEDrZUp*
+BMIeeMKGjd(GJ*"FF[ZE'86hU0)ii(ND5@V4maKFM"K6UfiVELYZ,@ZTkqURG"qf
+bpZ$aURaXerIMlRXZ6c9I@AelArVJc-HmP@YY+ph"U5Y'aJ[2*R5VM+h(MfZ%@3C
+A53GIT*F'(bqMlcQXK"f8lk0YSVM-h0c"ST8lI@hKG&@6VLmj+ph[0mpkfDdAlD[
+lpIr$S,l4ITRISp#XR5Y40'mU+Vj$lEbfe&PQ08CUY*ZCM'dd6MDH9SQ0T9c+bGf
+ifXkY!5ebZ5Vk`EA0@0pAAra[Bq4SXj@D,p0Vqf[JmiE5!QP$"DP(%&cj-!f9hZG
+*@*XZMJZ1,1lI$jISqCUCYNBdIde@B2F#ZBSfI*`G%DCrce(i,,VXKc[*hhd,RpZ
+DrD9'h1*j@lV*d(,pK)c9CPS0*rIPFVFjIrhf0&G3Fl8lD[[qUilMVrPDb9DhYrF
+jU#$X(6FIC`DQXJYER+l'GGNlB,M"l#AP1`RERX-V@!,9`ELIh@jj[XIdI`jrPA'
+md",,59rE9m'rb%fe6HXPI"@I$[)1A`FVGi1NV8hX&aK*[1A[Y2N)2je)hGJ0h48
+8l-e'lXC)T[cf@ehZDUhU9fqV*Qkkbml##9U*d[59R(T[Uj0pQ8hYM9k,MTcT[+Q
+S[0c"C'dTar`Z%0b0pjAB2*DF90i!D"Xa"+Qr3UFjmEpZE'p8lZ9BhPmaZm'XZ,+
+$0UA&hS[c`5Z[JmUC9@UEZ+Qla%hG*8jQjdA2@,'kJd9NIi('iR2TZ2feA`r)r1b
+@X(dkL$5D+rqq6QdI+@AKh2apVe`fr*I%eA3HcQTEYXh*AH61E+hT"XS(6BjE-3@
+'3q09pMq,q&RIFP8qCT1+0Kb1NVq$"[bG"*1#$0h$,m(ji1M`FVZA*9XE#&MB9FV
+N0&bGFQ`JdX'LJZk+UUmVFc[Tk4kE#pd6*6lRPq`Y[TfY9d1N`8f'UcAY@hk[9c@
+mc9reA1FjqVP1bjlrlfqbjk`bX$CaH#f8fkZ@bQJd8[+G*"ZER+eJ#f9aCbG&mDV
+dAd2fmY`[iI$[[Mrhq6S[CV0&p1G[rEXZkfXUEDhC[(5NfYc@UElMD4ELjPj6[4X
+S+29heaCH*8AYcU+P0TE61Ar2'VDMSmVHFYUqHrFp@1AqNFQpap9De@KUGcmEq&4
+mEmHCq0f9ArIi[&j,0GPPqFjlR1Nc(MpKmq#lXUf9FHl@91jU+d!pc,`T9`@-5VA
+aDbmUk@mBfQ9V+UVP@QLbqer69r'kl5q2b1Dl[3eepkGa9j[Ppc9C$,ACVPJjFSY
+UZ3j'$MD6Fbm''XRA0jPCN[+CUZmQ9Eq2cI8qa"8kZViqYi&GAf'D[V3kSd'eV0R
+"[ILDUeZr6jIDD+jkl0IYUrljLrZH[U[LpaGl1UjqXZr*dN(BG*+q6hQAkqrk$q(
+*A1jph8FjcR0I`c(imce&8CP,cPjPPFr$JRIF!1$C'lZ5Sc4ZH@rji+b#XJV+bA*
+l,j2,m$j2dllamVK5r`e[,`I4dId$52bjbdXDZ$SCF'+QV`H`V,aV9j@mjHPmIQp
+Gl&45H"9fYc9f'DrK0JYUb$DbT-UCQTGCbqddRBGGQYh9rhj'rZIS101FcR4`GKb
+rhrUI1Z12ZkhQi-i*kfU1pYUL#`PeT[R6,)aiYDABYNXDq%dZ$E6+S"C2IGpfXb$
+Xqbr$mrRYcpVj(jFVmqiYXcT$KRPG39$eRb*F([M4PdM@LcGU50mV59(XCQRUDcT
++RPdd8UmP6Xj"+XKSS1Mk2i9&fFIFk6ZIRAl'Fj!!RGjF9R)A0G&Nl6keE,%-Sep
+IDe&J!HeUlPNDjXYGUi2f1-Md@cdQ4JfRd+1$eVM+e8VN*f9P35YH-A9I3PheAT0
+UX&l',JqpT-VFm["e9VBk@6H@*eBG9cIb2iG$d99""9@d&KACUVNlDMpLe[ZZd4J
++'3mMrZYLk6CrNd9KRB1`ZDk*NChfCGCDXBl"fZCVT8lDm[pPN!$h,D6mp3GK#CD
+f`"c,AS[V88fjVU0-G"ECRkah6cI3ZGI+kaM'm[HImG-GirafXEdiaX&aB9QLcAm
+1GLNKp,89eKPFeC5GTefDX+[qmkrZHXU[RH4h8%'NfG91cY3-A(LFK@pKGpLbd#Z
+'*pS!jA2XKSjL0cHCC-G1YJ$Q6KML(,HiXD1#UPI#P33IDJepC,jIFrq3!(9I'PF
+r-RGK@eX'j`EZ[imSQZ+R53Am@aJkL$XX[r$j%@SJXZQbpGB9q@jZ#1mBbXqGZZi
+DaPrVUMX2a`HE8(eXjRXV$PkUeA+rFPrUB!H$T0Aar0N2HkcA4+JAK@2#hNCZ6Jm
+h0C!!YDl)@X&9"CB0j@R"CbqDerci0$m5Ud-&jH33AIjELVj#GXH2YFef%(c+Hbk
+#ri(bIBq4&P6S1bUDk`PmIamb6Q[0R5[MD+acAhi0Vr$ipCeNkGHGK8399VJc[K9
+ppAbE+6r##TUk+0*[CA)@epbp9F*PlDp[p*A!(Ik,XRaPi*9f!F%VYqaSSPpAj#d
+c8'd0@PYJ`APDG"(HG4mAPlQTl#rd9b4-F8M'DqQaQV,ZY6CI&X13!2Nq`GDb$Dp
+PQEADh1Rd9clQLmhf,9kCc[EEMM)21Jc9G"8ARlB,h)3HPC&1G91U,#MJXVAlbD'
+8eSELre9VqkXc9IIh,fd9rE&rN!!-!ifNL2)mYUQ$ke4pDmbT(Qpe%V3mV@9K(PP
+",b[,hfD64r)UY$1h0PAl1fjUl[1a[l5#GA9QMbq9V-ear)6+,Ni,M5h!dZDqr8l
+Aq(aLSEPkLGf"),"c9HeTVqb[BePIe'Yc-lDj$5mjSTA(`F[8CeFf2HFhDhepFGE
+B9GAIAfMjekDE9,2k!B"f9PdF'DC)aV8lQeV*h`LU6[1Sq(bqLk2X,kqYL4M'TdA
+)6YIc[b+cPq`-0[l+,PqfUX[rE)DH$DkV,j@UirMY&IHp4FR+i-'Di[)jVlr,rKc
+@#028f[BTTkZV'RrG"Hl@mUkc)I&JfYIHD6iabYj(X13JpMRCh,jQA+@VcRCeM+Y
+Er0@09GRK6ZpcaH3j1AICV598kaJc8&r+Y3(UZ2PA!e))CP8l98[09YIf1CqYH$d
+I4Y[GkM3eIB"l@eYJUdrRbY$bFZVdN!"U*el"jZEbrhDVMY2NI2JUXcPCA)CV4Hc
+-Qk+iV,f9U*HLaZArCSVr"+9,M5GJ-eQS-eH3!&lHhQpYG&N,5p[Dk4SVhj&A96G
+6FheKQY&9G9cG9SIMeXUjUMflQHhV,cZ9l(Sml"T2VIPqT+e&ViR0105JI4GKmV+
+qeNi2h$UbXN5BdHSq6,lh5I@lfYVHMaE$SkZqr1MjHm$+ZqMjAPrVIPZr*YGVqbG
+HbTZPR@AlUQ,Df'MRA[3m[f2NcFcD`ED$Pll862BjlJ@&I9A(4e09mqGA3H)Bckq
+#lZkUedND,Gc-K,PjDidP&&Jqa9rDmD$0A(YbZHXEl0DLbqepIUS#,`$1`G8jAm8
+@AIRAiRlM5%Il',EIr5ZHe9jfAFprCIAZ),#5HK'pJR5CAa*AAD1G$GrrCV8G[1J
+hN!"mbabYlbJE9&[!Fp%VBfX&[ST8fiNjkMNjU90Ti2VcHpLePh"@AFQE'JM34S[
+iSd&9fm6j8%RYl52'"[[BP9"c[`ZEJZl5,"A`I,Z0C8`Db#+$-R)@N6[B)m@Lj#6
+*c85NZ*-f6+YiN5DIU4%6&L&eKq[@#$8heNH1#rUZ1Lef3JSmP4NE@N5LR9%&A"d
+9P""@4DdP&C@-3`U`HED4)Pb5eYDUESS),$*`C6ajerL5S0TjX')'0(P0`A,jUTU
+Ta[e5i)2@ZCQ8mHjX*QjJVmP&QEQmUC9TjZ*%L4UUGf%(,j!!b8(ZGKN1I2Mc[CH
+8LbG&9@QiL42@XUb2&VU+0I5B,H*C98f*%mf*1JNbGR'Kj@(&jEPXee[)dXD066T
+FHhN8dZQPcN#hZ[eP[0YFV4b1AMHaElkMRiY[Df90Ed*I862eHa4cpp65j%QC65q
+1Sl5QPbj-fQPlkIGf@,Hb*1[PbC%HhY+1E*Y+D6)!@2,Yj%D2)QfP[*Nbk%N-E5E
+)Pd*YT65,UkKhZYam@K,Y*%LdZXA$QbjGT,QcCFHA4am@2Kb-I$[EH2(RfYhVCNZ
+ACiG(64*1,(LBpTKL0N@P(,XiBDB"$ejI!IY-acmLH9[C@ZT0lD5C&T[BX0[6G"2
+SjY(*Sm1Q`p",Ph8QC%PdFb($TV1*$MRqdG(,SBX-1')#pKKXjN0!(+%-rPTJN3I
+am1c2Y4KSAF-0[)N6rBml9Dc@6+'(LhX5@$c&c&BL0l$IL(S-,I4H#U%k1MYkDQe
+LDk6VlHpKMkq22YjBTBGCm%12V0"-Y*-QdmbdZVU6VUc%TTYe'TT0[6Gh4lfI-aI
+1XiEHID6DD2hdqC%ZX1cYm1cZl[$NbEMm[Rlh(XrBZZqZY"-Sm1CGD`S'`C0T[YM
+JhqqeNZQd#6R-E(BiGeS-pGP!QDc8hA@mQMTTZDM38e(4iFLCC`aEH0'RkbheQXM
+D#MYjib-fEe&Eh1qRcjXZbfAq+Ef)fXRkc@8G[4fp(Efp0V*mZIZ,38AdGpVlI"p
+HEPBfqbZXeYTV1AlJ39([ICKrcD4ipTGbD1E(Sq@Pde(*eeR4fF0hEcimI@DbdMI
+0TBph4cCYT'TX160Qp6)NDqE2dpl%eP(V0C0MdXHdNDbD-$,`lH4ErUep(2Yr1Mi
+Y[4f8cp@[Yl+IEr0Y0C8rZeP(VE10D4SmIBbDDE(TV[(QbkD6XEZE6"&)Za5T5Dq
+MYjYT(%ES,5dqG(NL8LDb2V,YLNSNT5X+MXjmDhN5Bp[-Yl5baCGTEq$G#JrVCh9
+h-MfXH4)f8NV)PkbI2PLHPfNEPTmR3EfA()-MH"54pM4fJSSdQkY)eS@&fp['LBF
+M@Dq@+1NMhGh5*5akD0)Mb*jpm-Q42Ma,5I*Y,5B4C*rRl2PDqpMaqETT%LMf8QH
+iU0MGaK*mY0RfRAZ+K+RC*8b)dDE'eM&6(b[k-VqM+rSGUcHld2pC0N3aj)SI-`j
+2mlZQNDcQj%Q64hXfhPbCqpr&EfpeXBmfI)kLhRcEHdY2Nl'6(QP"mQ4hFHdR5)e
+(KfQJMq9jA+aiNU6XC-e$1phXQrNRlf,ZA,MDc`0C*`pI4b*'Xd-k**TK,Ck62p(
+N,HIG8df4U"PI4f8Q2(ZjXK(2J6T1'*[34m2$d%L*bdRC5EZDe@DcIDcI68PC-Z0
+2Mh8Q6V#B-XU5Slqdce[ErekLh+!j1qePV0fAGM3$$aT1XNGr*eNI$Mh8E@Db6PS
+f@MCD00QL5%KV*'qheSNI0`iKK1Z[!S&r%ZR9ih(XjQ,Lc*Qd5MY#d@Mq#erkKL@
+mR3qa0[pM%Yjq[Ql+2D08'XQJ*)jQC(RckDC3kZCCiZYeZJXpE)aCRJ`iCI"pRi-
+@KXLqKKcE2HiI88I88I8&IcM!i'"'eQ#-&DA@(Ld*J"h@YLiZqQBXcZYES*QY`ih
+qF@B-RViGCl-M"JM5*ZJeRJ5k1AEbjpaEcGC*YpC,Pdd0ZC9lHMQr+Yrpcl6hGI0
+TVf2V)j&Q1aPp"(Ph&cFH9,kMj&aVj%rHhZpZ*GREh1Xf0h-,#ZEMk!!`$Y*Z[Yk
+Dp*4B'"4YC$@8)D1pYjG(Hh(FEk,h&lErlhY[6DqI4br!p(fE$Z*1$$JaS4M+EAf
+mqhVEfDAhTG#G4cl5hY,HALk`Mq0VjZXhZ$(6%`PGfXNpc6AYq5)[GKGddcFDqhZ
+r+ePPEdGeDAY0Hdel6@P[XGkaI8c&pKkbc`k'[eNqQejJ8L8Gf,MZppl&[*[IBKp
+L2-Q3!-c`*FcU2+Y,H%Xb`l1QYm1lY-pk@24fND'c`iGB8JqZ996C*PFKD[CQc[l
+[HhXRBlh,4LpM6AFLlN!*MX,jXRQI9jReCFEf#d[k8c&Xm1lZp"h%6ZpIGkqrjAZ
+pp'ZjYqaE3prV+1MVG4,S3kb0JclHIKddZdkDdSl628d*-QAVpCV2l-@X1XS%dCX
+cD5qSZpM4hFhZjqqZ-Y4hGT)Sih-a*+d4Dr@3!11eDcik@[DBmc&SlXPCGfrGdF6
+[pIGl'Ae&0HmphHq(jY,remXY[,[khUjG[DDb2liZSf(,RfRIdHHTTQ[&e)ZpCV2
+miFL5R``lT,VU$,0GfRG6ppPSqZfFH0Ca'A$124)5beX12h8Z*hf[Zk2Z*BV,Hi&
+E(Zlm9-M+pFB3GC)5RRcUD0c0(HMGQiCGkbKKkc@1+HpY,Udj#keG(Gpra*'Zh%L
+0VM#e0$Kk9%P+LCS1rLH9Vl[Zl$bYAUYMhHqNAZ$*Nd)F5(L4eH8QfmBZmba4*Kd
+f`jQQeeT%NAF6@5"`pR%eQpY,63kb0MkXh3HBlrL3!-MBAmJ8d`!d$1+VCr5m$kA
+JI5Rld9G#CKijZ@`prC`lb(H!)eEmaGY@mfEV0CElf40m$QLqKEaXa'5fQBXZMlR
+QCGeD5*N-e2(V)mLd%YV0CjfaMk[AfIIm5KVj1`Z*1`AqB!$S3aV@E',A8@1,fDP
+l[Gke@klZpp*[F'DCC*%Ddm#0V*Y[X*I+al2$Pq$$LI5PfPhGh%NNi+FcLQC[qf[
+MdI%[pIGr5rVClk6h1RNl!T2Y!%Zah`RY%SGCDEiHc@6,fpjML@'SMGh*emBi+jp
+0*MGh'Y0K,Zq6N6k2Br5RqGUP4XNc*MIfjRQBp(2iPrqUlZIkqc(QrVl#EDGc%N4
+h%VX8Ml2$M4kDI6#6hdIZjZ[MkbdedMQGi)Z40L4jIFckD0G#9ZK+5GCVf*Ar2-m
+c'TKVSfXZrkaK,HPf*6KqZ+23Bb$5[Eh+6%D1aU,[Bb",(",VT&($MQU#46$Camp
+ldH64l1hTTBRVQIqVC'#FJL6V0kE1,56(rcCk!h%ZQr964VZAEpe'e%Hdp,X4QV6
+dSKR[DTTrB4`(M4ppFkcI5iXmF1bSjrkTFQQlZdNA@ZL5*00*PD$S,54662l4aBf
+jPPf'$2f4aqiSjNp+UdJNciqJN5a8p"(SlZAhBU9B`B*YBF+ZXRdBTp!a6dFHQ5T
+eL99-0M4bHlNkikKKe"09PZclZA',kNHE,kD4,Y)q`[jmrCDrAb6K#f-Z6D6Hlq9
+)PiBTGMhG[)Sl[@Ek4*Qkb-!B"cim[@(%+6#Nb$KLhf#+10'PaTD")erXDEDGhha
+Sha4YL[EfHrbGVl-QMSidLd&9EciF@dM5k2BQiDBN0BB#GCj9[V**VUTU2T[d8GZ
+BJ+2Bb$)`BKA&K0TU-H&82ddZXj@Lp#ll$T[+34r@1GBQ1Fl3#59cHBqq0[iXSZV
+UCV2B[pIVYIV-1I68Ie*rGQm2ER0AKQcLA4b+EBkr@8H,)QFYGBFI@8eT-Y,Vp&e
+0PiH,68IhIbdfZbG[$VlV@8ICbmR4kq6ErSRh4`U(-TKPkDh1JHhNiGe,RmKU+6r
+rcZcqlhk#0lhFLMN46)XYS1I0Rr0Pr%TUcZ+ArFqYEZNc+&$i#$KQlq'CKR1Im%-
+chFH(CI"$ChpRS-@0LR1hLd)B,fQSpEEhY(6@q[RK[Kbk'$XELQMkqI$-Q6iTd(h
+X2Jim1ZSBCRdKph(TTQ2KfN0rSBErPTN-Z@ENY#'QSl1ELi1'G$Yr$C`l(&KXrCa
+D'qKak&lKh1$[XH2VE1cM6F1JX(Jap"J+i&@F1(235)Jkr1(CVS[f,1M'dbf[Plf
+h-r&[6EhAiYR[GIV4RYMLiZ23aCQYhNc`GPk1qpRf2GMHaCiXHC0S5kD4Tb5Ge-P
+l'CCc+&TS*Z1G0&04ddDBEbZ,-Y-HCG4jNLcM5,F+l5Mf0SFlp[(M4`PPdG04cij
+AUFTdq06AmZQYlH4jabqbbqKEdF+%0M*mq5EZCH3&@8XqI*TJ2M(,AV6R$YqqYjP
+SF@mq4-Pde-ErGR-`jXml(@('Y*Q'G#&RKb*&ER0(e[e2`ITq#Tq*d&aUqqm[Hr[
+rR`[pF@0'b8DUMFP'jf0e%EXihh)el'i-EfBdE(X*rarRGGGIprFmIbreIrB12(J
+MjD2QiqKMr+Mr3Mh8Irb2pH2hmI`imIdSr#MiP&@8@CS[N8AdD,Bd@eSYh4IeS[E
+ScZ9F[4p04pV4rCSpc4rYSrDcQNlE[rcr[iQ+6ab4F0adM051ENG*)e%Mk8MC52[
+52ab0h)rI)i-M(T+LNiqNjLNk'NkHNqM5DZNlQNqj5H45EqNpLNpl*5-PCC,3C,S
+-PdQ5Z-PF)%G"$m%(k%YENYDJ4d%2`3Ik3C,l'5q`J4d%C,Fj,pZ5re5d9,1THCT
+G25kfPqe5rQTI4TIDTF5*6@&0bY0d&0eP0XDEle0[+Ee+E#LC21C24C2VFRh16m6
+*l[*qeNm@EQHFk1jZlcDlQprqrRrIhD2+mVDk68GTp2[[`qAk(pIGNj+6-Nc+1ZS
+mY)Qd9K4dFbMb8f4NTY&,*49P&PU,,890NmR939@6UXR98Y99FG88985TUU,Mk6N
+T%fQN8dLUbe9NXY0TDBcFbD5U"5LN8e&95+U498G8!B%8L"C%5QQd96NUN8dbMX*
+!K+2+b*e(-SU0*#ZSma4c*%ddT$!eNM*6+5C5I$SJ'SkfMTXR94J%TUE*8e9)V+L
+XSkLLbFHU'GTXR49G&68@ASUbMUSpC9d8QL@@kXN9FLLUipA49!QZ56DKj56!4Q8
+8a!M!EMj%@MLd3ZKE5*U"*%h*9!#6-P-3),UZSq9b&94e&(8)%&V6#X!3I`@!R%#
+98J8`Xka!NHVV++UKKVUAM[ccIRB'9hd`pNcj`"bjIb+c-9QBilmr(IRTHmTYe8q
+R8qQJ5Tp1Gq5SqR8qQ%96kI(q"b9R0qG5pj5pj8qRahjd#)1NjU6QURdd&C2qb'R
+Kfm#ND8[H6IR5[ab[acIR6,5`f%ZCr(TFVbdhmNbdTUVjmhjeG5jM-Pe2cZPQr1r
+&@CLA--`R*I`30@kY*4!M9a@CLSqQJ40(@CK0A9Bp,hR(IRV-`K#Uaj1LNpI*c5#
+TG9Me@1Qmq&iVTKCPT9Bk5U"%#FIi%Z,dX@QQIa5lQr13!#6IR9(ddd6SMVUAPHJ
+Hh+Pe(dkMkD"+MkEA9DbV`K5b8LN#9@1KU,lhRra!1RS8+(dD&$YU2Vq6qEmV*p4
+9dI`ZDj(TjF&0NSZ6L@2-4DU059dI2FMmfYJTU@)l%U,2FMdlpL6JPB1K,)f$Sh3
+R%T*0(4Ck4BG2@e'65GB+5*0((rkN@(*I%H#YA%LR!m#dq2Abj6"DNL4Se2(T+@,
+%M4-K(bR+89,%L3aBP&$$%TSPhVSp(5Y"SM3Q+$S&4)N@&#85,&B(S($#*&M)($q
++`1L)*b"mJ`3JB+d3B*X#f$V3Q',#d*34%5Ib#'d&4BY&$%T+@G'bY2'L4K3$BdP
+21M9e1"U$`1QaUl+1Jl)j*11#-@*&Sie&44)m5*)M4DP#&&'b-D*(258l$XJd+Mj
+'+JS#%iF6N!"#FJ'@"H2488L'0)(1M4i)PIN"RU2N!SPaSeA)MC@LLC1LT12U11X
+D&d+fVjQJ"%E38+M*dNZ`*J8H8TD+*99i&4XL1VNFKP3,b"+h)a)e5KCk#hJA%MC
+!J!DjJGN)Z5L8J18F6j`(DB(iN6`q3'HLdT!!R%Lr$C+Z4%b&&%ST%5*bD2Uf81C
+R1"Lj2)m@hREU*&lI)HEkf4pc+Dc2kR1f0Ib2j2&KiX1QKkb(6B82[rSKqiGQ`i)
+)Irm6#e[6qhJBh#pRXqZaH&hY$PpEJHllZFe[Ar(hRl2"qj!!rLi@&pcq'0e1*L3
+q,l@"MiAcF$dpEYraihUiRNpCqqK`rrZ,dN1VlEJI%KKi'fiR"aXjiQ2`F$rF0pG
+mrLqCl2lqVXX(l2rhMB(IjqhNdAiICk$6j,lI1D$qq2rrp$'eAEkRSUlJiQ(N+lp
+RYI0Kp(Gd1[KfAr)4Q[lBQ2qVRq5h@&r$KqCKBh%Kr([)FEXZ&r$@H6MFAi2EKaq
+,$jQ0`)Ghm2JC[#pl'KhR#hQlKhhrj`Fm,jrM`pehQPkcbGcp$H3P9HmhQmKkhKF
+,@E('iZ(c0QF,)+DD'(%`YA`SHCKm''(!aSI8a+'&VBIUFA!hpGTH[hRiE%JHK#(
+'0e[#KeKe2m,+($C[0AJ3m$M3iq0`F,'rea[qBAYd00$T[Iaq&MF'(eZfqPlY(`U
+lf[D[-,'*#ihYRIGkk('rY3r(fA#pf'(Vq$L%UdJXEHI'e[k-paZPi'&`1,[-,Vi
+D(Y`r0rVIq6r,bFIaXE!S((VLDE#ihUEb(k@Qa2ii["a0diGF-1Y[k'&mVb2%mRP
+-$Em1KeQ"M`i@,lIlXVfh$KhRAr'`SF#(!hBMGeMBAfFILfH&a-$e"d-DKKBq"`F
+,V2Ip6RrIm6(dh#dd1"f82#KhBFDErAp0herdm!$Z&fZ2$kQVphEr%aZ(q2JqTj2
+%aSH-3P`YeVI6`2[`iAPLDrPfIXj6EjVfp0j2m[Xq#FarEGIm%2@rdiRk0jMB(NF
+6fhLShRd-,q'"LEZKK3m2YG9X[GrTKHckK8i9+qCj-2#mMfp4mh6Bq&`YAVIEph3
+8-IGEUKUq*`X6#i@m6[BhMBhSk$dHeKiAAqhYl2J`ir'p2hH[ih&i2`8+%2EF(%m
+cJlU(MIirhr[e0j3a-I%pZKLG(*j6ihiG0MpYQZeiA'a03#1mKlEV)GhMFELBZkl
+6rV'mAVI2Np*e2lIrrYiAA3LTlAb-$eFEV1Pm[aq(k[Yihr826EIKHe$$aVleGjM
+ipe$$f2j[4a-,#SBh'i'*fZ*aIJKl$p2pr9UpRp#KLm2GBACF6J`ifUl29pE`ZCr
+KhrpXhbAkIakcQrIKr2i2QHQ8PlRQD(@r``SBGVihAkh(`)Gjmb(Vk'YhQmmQ(Bi
+rAr[l(K@ICF(%m[#iN!$MrRhA-$!pEq2VICXq(eR5M9G$k+KEMFEa[crPkh!KKiR
+Dq$p,dIC`8`2bm6X[J,#BF6c2Grpq$q(MBh"i(,pI$aIfrrqRj0elY#(#kcEi(Dm
+$!KpVVYEL&Ir!p25ih5pITSFE5m(%p%@q"r,c2QHMr$C3i(L`iQ0K6-hk2'`1$`S
+GA$KG0`IZp,UiI*1N$bmIeF-mq2Vm#(#KhQ"$f9MkI,k@(%i[EB2Jd0A$`[ad0j`
+[*dhQF$!ak'2a[mH9lqk`YAS-EK3qlR1[k6JiAiKmY[$KHCpRY)I`H2LBd1"L3m(
+JH2d2TPiCl2qPDIir%r2j!IqU(r8CcVJrmaKrirM)r,bfYKhQ0qhYHapAKB@m`[8
+[`rS3m26B%2Yqr$iq*$i1"[2,iR!fr""h9`rerEkRMi4HlK`Z($lI@IhpAHB(hm$
+fdhZUpAJm[phh0h$imb[a-6G3`pT$3hRAq6MIC,@2-prK`mA%hA[N[X6l@kl2c-#
+('`0EM8-EmIBlVJBhMPqmZMlRYBI$phc+V!hIMHck*AM$k)[rpHC$lAk+(Zif&j2
+bBIrHThrj5peLrYqiPr`rQEk(hr(rIa00lr#KaYj`X,'q$fI!kcTFEY-$V-I'`Ll
+5(lSdINBQ0jF-2#`Z&`Y!Ak0EqdVfi2"h@lBhh#K6IIehRY`m,%kA%SF(hF$2IMk
+hKIJqE[2cpX3I$KDD(JHhq(&m`SkmRK81AKi[5HelBI`id2im,VrjB(DJ9q2V2XB
+UARU"rkIr!rlEKEcjZhBId-,T`rfq,[0ja)HY`[hIYhRQF6'i1kmNa"H6aI-pXc"
+$"H2q2X0ji*JUhRj[Xqr$i[pr9q9iq&VE2Y-6@`Pk1(LEb(EqTmh(dfQ`U(NBRXp
+A`LkALF%[+ir"p@(XiHZdAfBBIkB@l)Li2Nm$i1[pZ(6I(r4khc-6HH$ZlViP"M!
+8-,JBQhKq*Ym6HHTfhZrNkc!h@meIA&2KPSkAH82*q&mFIlYI9fq&Mm6e1(MiA[`
+q0q(eBIhqT`Z&`[QrPi"qEH-24k1QKmI&mcEkh%kf(pf*[1Ri@kh@ViL3!"KF(%a
+[KI'kIjZmpVq9i@KpR`Z&aGjj1,THZ`XI`H&MqAfR&S8-6%+2m+(QD%0$Kqe$JHr
+lpd91Q6Na,pYTYjr6qAMkAYFIGqh@3qMME(#aKlIXQ1rlq&Ym+aaY$YpfXZ12[1!
+1,lI`IrqL9bH$K3lVaYAfV&hLHciZVKpcBFLIRRKINSIr`qjjAip[$$lfPSF,&iR
+Mihq[4mE'prEi(!qClH&`I%l2fq[d&9RSBIIrcjIYp*e[lZ&3hAUP+rpF,LF,VT2
+FIA)kpq4p,UZ,(jraml%X0Ym,d)FASr*a[fiN26q[b'ZmH*YrqZTkhjRbZarpq,j
+Z3h(CHRd2mHFrAGl5MY2ZBd1kp6HG6XpKb815f[iqcLpPME[Y[-rP$aZ"r,aqSiZ
+QKiI"a2rF$pr5BRQIbmNe8m@(KF2!kc9iJj[#mAYGAkR#K`-$%lAT!)iA`3q6q(a
+H&3i@*JI%rpfq*MlcGr'pll'*3i'"mrSpj[2iI3`0Yi[iqZmRYZ*YKmHhNa0YYYY
+Y!&L59[PbFPl3&a)P6(1,k-El8ENC%ArZ*VYFIf&"+*D414Qp[NT(K4)hcSNf**L
+dI0I&lPE'qhlH0b1c##4b-5EjhFj,NBQdL4+[5k3f9D@Uk-+X6GEVPZ@jEGEVGEL
+PS[KlVm[-HlZZ@lc5mYbh-HaJe0#2%d1Vl'TeF2Xk[9k[l1VeGM$crf[rrYCr1!G
+f21G$ad%%'jL4*m5,+L46jQlH#I%Nj'9Xj[44$rbhq@3QdY(UI@Aq+*%(ZDQhMC!
+!ZDUdY-cN$qb8%f6%N3HYQUD*0c8'Lb-HT"Ah)XqeLDR-db&mKfl"M)6Q$'3R4mM
+4DHQJb&Tj[6C$)(q1FeDCQ6QBNrYD5,"N))q4SqL[C-h8fl4Y'Q3T0aXl@#LJMa+
+2*`4UHLY)QL2p+C!!R@R4C#heY*(JN`5),+8H%I*`C$+C#EQMr0PA46FcQD+*Er)
+T*ZC##0+Jc-H*kAQhdQ,&UlQ#8K(B`3G&X'PHFk,SJBe0P94b2q`)'Ul6B8GbMQU
+eR1)lR9-6cIRdIE3G6E5ULbbd(eq4jlXZmUYYYB+Umk1$"UDmrd"Fpc"a+UefdUA
+,lL4-JqAX$alE1$ke4,l5SZ2PjLjf%(VG&9GjDbB-(jR9@YPpU$[YKdIBhNZ9SC2
+I9&I@j(`E,R+kbrrb[ErG`G,adQ#CDmpFfeV96UcT2X$&lLpqTmrM[U@fVb%cbSY
+K"8bllIePeHk[Ik6qqBj+ZdP$drrYYiNUGdN%'LX*9C9eF'RbZLcPpGh2q*8Ujr[
+D`G*9DUjZl(UG*8Cl5I8Ul@UZ3&Ndd(55Th,I&dPp`GIVG2rR2H2PYEGbZdXTe9&
+fX&P"ALM8-eAbB,[UG*T,+VJed'$9A0hR,Z$59@XRE@deYY"iQCZjIh*P9TpK*JX
+2NDUGE@YA1dA8k6hrL`FjcRZA[LI(dRq19erDkHadr(35DRA9YM@rVT+UjV),Rfr
+rG4HrbcAmXer,0HrQY&HlhQ[PGch&KSVh13E@9DhX'L[DqC+jhNl#$XXY1j[XV@r
+Zmiiip9cXVRHE[1TJc-S"I5fR3NUGl1[["cA9I*QIUV1,m5ilE49R[`9Q[c2C@Y9
+5`9dUm`FVAdN&lPE#Am19"Gh&p"T2iI#dPEBepPZG2Gf%!NY2GbZbYFcIbT[C3Iq
+jVXi0AIAh4r&YBYI,QFKQC8kVYELidAN5jA)FGf&R69qDrKmR4Hr@HR1iXkGZCG2
+"8DHlZFeeH4PA1D`Fj@qTml060&$SSG&HpRB@&Yrcq[9jhPGGrRPEZfUV@`Jc931
+KIAepZG9fFZCBjV5D+TdQRVDkUYIle9VYE@mdpAQG2@e9VGf@j!E+j10Jl@XVY*P
+Fjl[*kHpqMQVLpm'ic9l9bZDrTbhaY*!!C6+`AeE"PDkNJj1#rPmVB`E@pfYp9mT
+QHHRAPjq#aPed&k*+lfYKdQRZq@YDlSZIra"qLT[Fj-V+[NCeTJepAPH3!,BG1GH
+hZRfZedF%V*f'LiZBVmelm(89&M"Y,b8)#XUXaD`D5Yr6m5UZIZq4Vl@fmI+k+ql
+dG#Zj(UmjGQ'H$53EQ9FmM"Ik6"fZjqpFpp9mVPG*R0*8DGMRhqNVXc@eFkfH1G*
+h(a)"cC9$-rUj@kV1Sjk[Q$Qe8UZ[XckGV*XB0c""A3Ck!4m[PFV"Y4ZU[iGPcdk
+r[,krZpVIh!jQefYIe1RZjp9N1KZ-VYHJU[M9'$G99A"D3AZRV)-c"E@%ZVPedU$
++jPijGPDhj$kFZVimF[1IUq*@9R#qMQERRl,rqbrrc1jZ,ldjepHh'Ld3jphrjAT
+d)099`B1DUV'ZdPEYG2HH4PZbYH4UjejYG*Be9Vpk#mdp8"ZNU,[+`!0*h&P""Dj
+V"j1iZXjSqHVl(hjA335VApYC8$ReX'jXDQ##9+UdjpEZDl+M#kHbc!jqj6RkFFr
+Fl@ATp2Gj##TJiX'lU0r9ml-c9l(Lem%kjbN&aGl@pQC@bH19!ij0E,UV@SUZEZV
+M"ZHfprHjHfe9KUV$9I%Ul#`d9KAeG9amlidZA,[LRR+Mj`B1@d-Vi9A1h1SPb[X
+A2*2r14F`6Q16d'D(*Q1R*J(*ca#Fk##rBj'FpU$DhqZJdr,CLGZEcbbU1aUjfNV
+V'ZJlR-FM"jGP"(J`B-5Sr&9f[Zp!I[F[DQXRa5K1`X*P9*[[6q*SVMHr*Z+Z9"1
+VDQ#lfX&jb8Uj6PAH#U%qEe9CCDVPAMNI(kMY1Sl6U1dHR,ZFp,eeM9A1eVHNU0U
+kUL(+P*bV*MP@8RFFYDZ8*p"T((+Uf19MDH$)A19Jr,&FFVT+k$DeFkVbePTmV@j
+9169@V(*+%DLGN!!I(%U,hUGc-dM+%EA9E@N9#9pIB0`lS5Z),MjF&j1Pee*85VQ
+bIrR)q4eAaqUq2eAalkp96PcF6+M0@6QJQ$l&cm0e3RY5fUbdm(5@@ZJ!A2dY%-&
+cHpq6E9lA)X"b,$FjU[[VQCr1))Q6"B`A&M"V[lfZeVJkFFH"9-k3!%EHE@V,mR0
+5Fc"H3F2-fXc5E@2&JV+RrU6FeGAA9!ihF[+$i+lS0Zeal,Fjb#UjhSGV+q6qffk
+r5@h1e0Yp+Y[F(hi0cYE[6kI1IUj$rHRe[kZ3!1(!9k`B04R*F(X9A0h"Sp6Hpj!
+!'C%Fc6j@9FhFUlXDM19FlDJ0+mhh,L#`JeAkFamq`[H8dr9FKHpYBAZLlDCID+Z
+ph960T(%9A3Ip$QhGE@`AIHfZebZHUq1PbTF(hVQrVDl+Q$66jA2C@SUjGAPVYMR
+heMC@&6"9FP"HCR)`3DVREl)A0I9lRiNbaQEA8i2[eGCHpYSVfX[EkCfZlPA-kGY
+GahKK4Uq2DkR9$TFl@ARIc*R9aVLpZUbpl@$DefRJ[fZCch)5i+UeJlbaPbVRFkH
+YUq1(,lI1`CDVV+LbmheVhPi0V@ITc&Yr@SrPQ0&G9Pm1,BhfQcPPlNI-6M,a+fX
+$($Z1pYB2bhR8cYIHhGGR,'!pDGjT021r,FlLiZqS[H`b'4fShp4"FkIDeX&c"8C
+VRC-V9G*AeIDf@$fPCP*PaFA9CkI*`A8b$r@YmZ9UT8'eh&j+[)02T2k3!(X2T[k
+Mi[CjM05lbAH5lb`0XefiQBbmZ#md8&MC11*1h2,A2EjklXE*P"pPR*G265Y2A5Z
+NqRQ,*dj1rUZ3!,llG9bAZkUTLFefpq5j,a0h@`9GEVS-VdPAcN[Pi,Z@ebUVXjh
+MTbG2HkQbP3Ha"r$UC9VTpV&V$(*am%A5D5pkRmXbC"J[G"'$IrDmU9F`9f9Lb[Y
+39H@k(Dc-eLqR9m9pZ6A`A0l@!,YCF(q#4Z@+P,,4DHeZkfUR#RGe-jbAN!$[UKf
+jGA6a,l43C[Xp&FE9kS8VGVSYZU&DkRJZkl1`ENJqrGZAF5i2TXUAkRT02PHNbY(
+b0AbFQbPIcRDfbX0,Dk+Vj+6QBm&pBk@UDjZj`F'CA[9#d&rpTacDFKpac+pYXip
+A[h'AheaeqNG1C1f&A1JFS9Dj6lS8RAkFP!d@6aCe9SHUc&@VBZYH16`Xd16PBXZ
+$m$()JdAI6S2(ZHTZHiJZkYMMd6+%G18)j$[lZTiX(m,@iUq51X`EmG9+JLmld&A
+mHC1[l&lF@YbZFFF@#aBiekaaXeeY6eY6eHFlcS&3RmE@5q,DXF@pV),[6`18)p@
+earbeVkFKCGjG3!e[+Qk+SdA9CLir48HRbImZ3qpfeI9FKZIZeA`q,cXb*DlL$UB
+2`(&0"HA1CIaalAFG6Gk5pb&eF92&X"GDIDfQCJbjeTE+68P"C`)ApkmUAhYcqAk
+Ah0GR),jMMAm'RV-@XUH,b(#qMbh2Ah2Ah2CV[1KJr98G$GB[[r*r6b',SU(kH3`
+k[2AFVFf5dAA(FcM-,"R[bpppKF`YHXArp+,Y[[3,JJei$9F(-9q4(*kZXp(lha0
+&qUTrKmQX[VMj0CZHUq*TDc&LCQaJjJF[6R-9FNKqTPmKAA&G"e0D3Rkh8R@)XC(
+D9A3eNlSZEj!!emV-6),kXZrbcED819ZEq9&UXab&pVVq#$Ume&[ESjIEMYTA3jc
++jc@Q(E+f0EBjkjJZabUMdabXjEG"@G"@G"T2XFT"qR,d29rPmKc,prLUlk#8c4G
+,ebe+b[YjjDL,XUTUV@Ll4fie91NjV0FYcI(eRSHeQ[Gj5ljhj06feA8hrJeHDra
+rlHd0TN*ei&m[6QS213DL$6riYGGHH*!!E@UYEc15HTrA!101dPpf%U0dQ[P@'A`
+ERFZR'`E##lY$9&,j@ZXV,Z(TaZNb[5$M9`mejl(fB*F([jc-qRmMlINCc9@'DrK
+d1SZ0VIrjdQVamEj'RrabZRpLGhd'eE3Ab,mF1rdYVY1NfUU5R+TM49e64CERFeQ
+G&hrMr)UFEN+'Cl5Vj#Vc@Yrqr9R0TN-YFed(53Ga1j)F1VVXj"G[6LC@aSrL`Ii
+YI@f1edR+9NhUIT`HMQV'$@CASNiFb`Jj$-j26kIYTI+eqPq9T+HaGZ*T+V9hqN9
+&0jRZ3h-kA"aHbq(m[89(&Q@h[hdlAD'(5e9YTB,AkPh!a[1SFEc[RMHD5ZE3"c8
+Y9$6U2N1,mA1HRceeI9R!prN1HSA0ad25A%'0QFiDhh'hJbTfR"YlmEH8p0[VNfq
+ApcUrLcY*aCcTZ,rFe1aYVAQD[,kISCI+eHpkEPV5[V0ld1DpqX[Xer+ek6@l9MG
+3ClN+Jam9Qa+JXe1f%'`Jf'D[,k[JJeh1kZb1"HjkNRrGYF'[eeF@Nj@9V(a`[M3
+398&h"+[1he(FeRShq$Q+Vj1V[VM$R9Rckcjdk9apUA`CHRXYU@I3HaFjAFriYEY
+0mj,AN8hhFee9BFYbXM5Gc1UTh[c[X9PhZ,EPcN6jqfYEl6jLS[VZrP98QA%l&NV
+GGPE'$+jkUjZ4"JeQ3R5G6T*AdVZAPQ@2efZJ9LRC[E23G59if0UH$2Df0TVT'8J
+e1,4a,QA1PCLG,R*Q&*@lcN&Me-'jGXYC5dbrX&f0KQjZZU[Lk+$6c14JlhN,[h,
+D['BUH3'CZ,[P),'6T+DX[E!f--NPpVKeGV,REReM@EY,ZXP@Nr)@YCpZ$A'2E,A
+2Ff!0-C2U,`b&9adNI#dqjYEMFed(VbS$!KkmLEY*9T6C()#$UTFlA35qTP`H2Dh
+(f,@a[cKNq(PE,+`DI1$XrB1FIMZpYIX3EE+bXVdGM)JdRhTeA",PGpm@aLc,@$Q
+CA(DUGZELp`GVH8HLbHD[TQL[CP9m6A9I2rDUlAUE'YTFp9cLJV04-KDkdkTQRbT
+T`Z,l6j8CblXEr5A$@GYGUYAe6,1iP8-CkETmR&c86cG6QS21JYVZVRAm[5*RZSq
+am@#YdPG8ERmX'jUmYFk5aVED$Dc[X$1j@99AX@Uj,-f9h85Zqk#6"De0K9@@CQ9
+9I-J[*$ic(Xel'BRAQZJfZDP@N609RP`G5b01iQ9FlKe9cq#$`+[MkeDdGU+YD4E
+@l)hJ9+NRUBM)eY*e88e`9'SGX[HIBYGcb@9bcYQ+i1p*@ff9bXU`SZ5c1IJRClU
+Ef,9mK"DhbCH`QC@YR8caQ029mri9IDp)aQ,Zl)4c9996V@deGY"96+ZidA(bG&[
+DLTJc9CGe'NIrfVfZjVV8p[fi!D`[UM54'b(M3@fjU0*PB-acYVGjA59HHdKbNk6
++e'er)mTQh,C%hqjXZPb(+CRjGp89fFlc0AZTJdmVMV#993B0YIB0E0m5EHE2q(3
+`FANi-(4Hr1qRcpYr'UZEqmJJFE@$UFc*ceh",bYhch06ZLcR8mY+R5TeVYFcdM'
+eqR"SUfqdpcj%UK,P@,lE@S8S,N"TA(kPXSl@9C@fjc259'jXZTdNXh2XpT02R+h
+0@04GbS0c810TJl@GhPbaY,,lREjVhDLmj@ZcAHCUXLeNUS6DApPJi0rNY&9@[c*
+laYIX@Yj`,h1'qe"BedZ$Dk59Dhh8jL$)AQ@YELZirP1TX+UEe-&aB9@@YGUYJkE
+HeZG*R0VGhRq12q2A1fiU8h&cZGc,TD3mU2ElQ#bcPI[qFL5V@#)9kf9YIf@FXYV
+CDFSZmIQVhl(2FImLYcPDaZfcId8'eY4ZTejZDf9"j@3j[96YVhR8@N&80["BbVQ
+C@bI%RGENp*aH9Z2i@YYT-p9@YE-ZFm0TA$fA&G9D'URB1RVi2FcQ$96Y&JklZ+r
+6c*9TTq3J[DqXYXcPB-mE%q2YI[FhDjV0AYl9FIbPJE[M1*,+e+fAA0rkm(ElLm0
+akPJh8'HUE6)eA`jF'TrE"QM[*9YC+qaA94l4*m2Xl[H2c(+jbXV-ce-&DH&!l90
+ER02@#&!I1E@rVB*f,(d@RZE[PIPk1Ec-U$PS,qXV,(16rrB+rcI(q6TlMlZNk[M
+qEZG2+ZIY3ARHA-'eQ@0AFj@UjbUR99YYEl+al6Dh&9DG6T,hkGYZC@TdY1E[(Ce
+8lFP4GMQG*ACV43GPQ,#C@([RB*jMeeSH8bYCR,Ll`IB[,Rei20pbjUTeIP))+fT
+b*Xae1eP@QLJPDUeVEJEZj'lj5adqDZrbh1DHflkR0(`Rh2XGRc[)f*fQ[Fk(UEZ
+eZ2(bdRTT8`ShV-eJrhj[*39I)d[8kHpm(5Dc6kVXV8EZmJlcXl##q2Nih1DUZEe
+*lqYG"R++$-lR6`Cb$CaEqVq&Bfd%UA1kRT*9096[6RGY9eK[ZDl23G6YDh2DIAE
+RP[LbA'XLf@fikN1-ICl@9UG*"rU9fGVQH4j(RERBCA6f[mVAYUl26,MUHT1BkAa
+pce-V[6ZHjl+jlUkZ!pl6h$k+VDeXYME([L`5Td&9PE'ir,6AX&MTi2+d1Mql@jV
+ZFe@A%ZeqA@@YrhRHf%'p1a1%[H@Kq`IdY6"CB1LJc8%5#UR9IBp[X[5a*9cqXd+
+h(0kM8pA,[*-H$SSRaB0&&qAJhXQ#ImZ#UjcBICPaELrZ2k99h89eC&kf9DfYIB(
+PCJl,5`3FcHl8B243HpbprUmcTjPpCCHMJUp296Y4"9CDE"jZ4TBTpCdQ,9I#Nl'
+4FQl,DbH@AfL8A4A1Lb0(1C4(Pj&TDI2SpRU)YAHDM)66f3-Y""M9HcqA4'bkG@'
+mFErIe)ZZLbS1L2Z+LCQ,*dpY"&SjX5#IN!#,QBYM*L4)mH#LL(NS3r"Uckei-TJ
+`34CA0C'jULNRSXP"eClI%R+Hj%Sej'DD,C3HPJeFh23D,T)+r*aCCl@hZHj%LAX
+UmXUqMLk5#BHZqmZFedN&K6)GYC2T4)PmHHk`Sj[%Ui,D6YE$)DUecQNUS2FlH$Z
+B)*eCNUIeSP2(YDf$eY*%cNV8p[cQNdm(H6LCqRLbEZUY1hL4)XR04j9TEjQhM`D
+R44)0&4X%idUEEf85G8d8f,9!P5a)d&K*Nl10$bd10QqCm(NkD096HDTlHMM8G[G
+dp24dp06@p[GhG06Gp6aVZQhY(El'46ddfYf1Jd&2)Xqk`GG,Y0p66GPMcjGTKk$
+36pPS0"(Mh'(Jpa0QlkRNbGPXCXfMQD$3@PTXUDI)MfNZdQkqA0Nde[D6Bp22Y+1
+hTVHI4bieTD6E1K0Tipa'YlHKMbE16KfHJaV2@qp4fNL0*Y*NQ2-[C02(RfmDE0`
+l3CUQN6BdLE-SBFc(Qc0GHdFHD-R,SpE$$,XiBF-"2BaF@((S3reYlfN[Id8pT)M
+b*G[$$LfF1,-ZY"2TZTSj-b4*YjFX-VH,$KJlKX1-@C!!hF1[!fcS6-@''RXiD1Q
+2ie#,aCQ2Lj!!KYimDMSkD6-SjpRChXqI$$66kB"VMASl%6Ca%J`1aiEfRerbBGk
+"8b'(BaBCr9bq@TimL66b+&T*Tj1pZKAHcMiph6fNZ2)q*Nf-[X*fibY0)Q5CG[C
+fFZkQiXf2S)pe(QA9R-d%[dG"-QBZ(-`lH4(SjY0Kk#phdc$mb9S,Uk"LR+,m-#3
+IZVHQN5CF-qIVlF8-c!amHC6jk6(N@qKTTQYXlHA(PE,r%LC2TVLM[jGl$VV1'Ah
+&T'M6rQdqrL8f(EfmQ44e[Q@N[$d'[m(p@(KN3cjJm9[Edih0[F8p[0YrSdG26k$
+I6CmH6SDDQrkX,HA'MbUDA)TlHQjZMQ`dG#'E68FHAEr0RrcTUD4D*)cr-Y)mr&`
+m1d%6,Q8e26J4D8r,AmLEeGr4fq$(hmIBlqrYk+hY2R4SP2rZIl-1,2f9068mH0E
+bk14+PbD1Rq40T[GY)e2$68)E35ee,Tl59qL2XimL44P4YTddqRYjG2)Qh9e'5Mj
+#40N@P04h%cpAX5,Ic[BTTf$rbK,f&#AXUIBHa6cD6$Y,50S,URVCQbMak@2'Raj
+'VRbD2j4@AMbl3QaG5"16,F6dQ1Np6dmLMSlUkeZ(-eZ('"14b%LRSK44idZILqa
+Eqa,2c)MEdV@MEhC!,l&[6cB-@dY*mDcQ8mmT"J&*65-+hNdG[,j8[+cCpTR,U4'
+P4jQiMb*mDQY*T#FL2(pA*jceBk8'@NDp1&3MaUDEHfmDpTKjEZI64ieh(MAY20N
+cF#pd&2'Mal+4(+EF+hQN8dphXF2VLl1EEfPTb&e)MLHfNH40d%H0)BS*FE`)e*b
+(J4R5KPLKM4ie20TbmR0f3NBmBUVR-5HSY)e(j9[258q4(,T,5E0e&eG5-14+M4j
+L6&T44LmPdh+LCMq"4eZSm#MN3#BR50M*8-LBY+HEDBFDE6LCN4Sq`YC-JU$MdII
+fmqllZ0)TVZESC%N4f(0%E(M6*C5VS"(8dH$3aa'4jXf3!#2QBHqd!&&*Y2D4YIG
+AFZ2KhFdYpcdLMf0['NdfJemhIBC3V0R4j%B`riFb6Kb)mN4K-qQXYp654ridQeN
+c0"m(Sk#kM@Q#"dL26h42Ukf@[Z[C,YLf@(&SE+RTjQbXp"-d%cCddDdQbBe(re$
+k92VlH0'QbplGkqEX6%3a5iBJ0T*&$-QIZZTQ2h0eKl'kpM$ZT(S`ll!-)2SipRI
+imbK#B`Sdb4G6YLJDI)6$@NQB-,4TJj1a`k'(3`k%3ZeTkIIE+cXih`8pl$-aEVc
+SqJN5--C[@iphEclqrN4V4AljP('d'qY-1I[Yl0[idQpR5*%Dk`mH6*NBFfA2Rh%
+qAbZabF[BiFc[VMZ2l8q0XER[XE[jGRIdmc$-UXQdMP#cM"A@*`Y"KdbB6$Ql($m
+fQSjp15hf1peqYeZ(UjQcTlqR[b#YIKBf(CkfiT[1ND#'*KqL5kVEZpXVZ6'M8e(
+Lpc6&CHperkl6(hfpM6EfMRleV(d"Mc"M6dmQ`fRBIjZqqd%fAIde22PP56'%Y*%
+ZMRZQ$PTJlFb88G[4fp'9@8q[ZjQdB'df$6aY"[BC%1',SBhHmYHbD1cKMcjmc(P
+bj'pp+K[YI4cBe#'BC@XAI6T+AYhCiFQ00Nh9T,Tme,hY[,[j"E668eeD5'D+l5A
+3```KG,qI'6!A9TGQJ!ImbJ6jm[AdmFA%Q($ZX2d36QHc-pM[TY2)[jpR$2NblU6
+4lfAClf20MAG2$qbE*NDkC$G#9aC0e'QiFQAFh02'PlkAEb"GAXq4,BZ,fRGV1hM
+TC`d1rrF+lZqlYjp),$Bimb**+[2CpNfZF@0*r92PdGREfA66CG20MqcCQQfdMqa
+(Yl`V5f'(McBjUSRdqU[DH4k*D06fQpQb+HcNXNl$#AfTXc3BH&jREAXMf)mfcQ@
+Fc$r4k[Gph2Jf0r6aUH4-f%DC0NbCiVq*l0T64Trma@jDrlqdTl6fGp)DUTZe&9j
+q(V8UU+C2Tqe[DH6J&m[r&T*S`p5TRLSQD"a9Aph,$@C-`r+rVIrejRq[-bi0pId
+mHRNX9Nf*6ir%,!$Gf&6GfP(6i9h@&&aV@pf20KY,394IGN6kHKHdmr2Bp20MIlY
+#[04c*5QF8[Xb45@'(LqaLfH,CcR&$D6,5BP!BEE5E2TTehVkFSSK`a5dFE$PmJ+
+KLRQ*68iTj-r&5Scf23Tl3Gi8KF3m8[%QLPL3!,T6dpU+JT+f@JY)P1c@*a+D1+L
+61lKUSaDDR[m+RSpp*N6)IGQMQIf`jZJNi*A,6d+"Vm`mpMfBUEqdS,H-`jN+#)d
+QBC*jXbk`rC-5AlV3U1hee[VVIA8-1-eEhSYaF@Qad'bL8jNmMdP*HM[8IGaTiXU
+Eem+RTT-R"M@Pc*rY0Qi-f-4i1Q9bhkSFMbH3!$+K'Nk#EGH`C2"2leLAZdPLH'a
+MH"4ciY2,TT0*5EfI6@Y0hmDI4a*CN!"r+pQQPcEZjQi-D0FcF126fNhrRE@PdE9
+f&%TlRqZ$hhVp0IV'90M6)r)-`QEhAhq[!L'E*lHRh[PGVjADclhZpl6bGpG8hDi
+p(EaDI"Pddf058RR@mZePrSf&(,RhAXQ"bEh'U5MRpK0`jJTE6MFbP(b#8PcHh1c
+pI[rAZ93bEND8Q([G"GX8cY5frR#PQlk0'NipQ(9T&TrG&44`3HI6ipS+RZDHIEa
+dUYPEQfq+C+@kXp"4dG[dhXP*9chpPHjlFG66pKRP&d[QeVMZYI-`rABTDHBC-`$
+)YhZUe3UjZpMDk00L4K8B9e6%Rj2q5NI&Y,@IqMdUDI(ZYp,Pl%TAY$Ec`qa0S@R
+0JaUaDUr!XVhrVDG6'TqaTrqQ80mfUVqaTe[K[LUphhI2TplD4[B&AD8FD,6qcmf
+kq4Eb*mqhQmhErSM8e[)Y0p,J-e0T)TX1EDH"4dfJM6+B8ZqV0I&TlQb[6PMd$)e
+QhTA$Efj9&2YjFpfSk5LMISYDIHdrX8rX8p(rQMTpl([iqZScVQaDHihhdHlhrF5
+)P[0jk2Ece[9kqA1RcC%[3@pThpA,6Pkr,C!!TlMcUCUKQfmXk1"35lHCIc,qCIj
+-e('4#*HdhcUBM3bPN!$qYaiIGf2kZiPclH6h8HA4dm*I6TVLh1Sr,`jFrTM2EKm
+V'ZUEb[,YCFDKKrjSlAcTG(,Yp"KJ,ER+kFaK6jb[a)hVS%3*,QfmNK+2,M,K+PQ
+L[rVfHrh`UX0GEE$d'2$U0lVk2BdH[ZZQNGp''HSjF+b3!&(Gc+2$Q8eTKpeKk#d
+Q60"2NiGTS-2iNr@akHAV5i@Q[qCXUHphY268-Iqf6YI2TU`VQRdpe,QA9fEjGeG
+ca1BFbRNmUTcA@Jq6SGKlb"%#@mqhRRmik-PR4dYlVVIp%[iQHTrB-&&#JGJ#BGJ
+CRC2amFD2HHcM`l,$Ki@$$-a-I&am2&`k2&lH(Zie264*p(k90$6EhA`R4f1A%Ka
+iiI3`cS6"KMfH(2SBq2*Q3hZKKhp[-1QFKk'KKa)F1QeXh$eYe3Xa5R5iEhBT241
+%chFIf-(I3aV2fC-h(`jTKkNd,1,$LaB8$#CTb`"edU-l9f[&63hZad0[VcYQB[8
+8GPVjQaZm0!L")Jc(ZMLkf(d6XZ!EerZiH,MfGRX[4MBGr(`m1MScGASj1JRiZYT
+m8S,al5C)-FFQQQbCQ2CiYhLc-@cY-@EVE50)SkEZCp[4bE3jMSmQM+ic@)JbRNd
+b`9hmXd,ddZ2D8FH'A4hjLNN!A-M!EVlq5$aeq*P'G0hVi-hHdmZMMVZM8d[@Jcj
+rVfQYaC))dFZE,'PXm1kXmH%k(jG0Cd,1dMBmq6Cd,6+r,l,[2(rKJC,-Fje2DE2
+m[mZ&JHr$'T)e9'iq0bND0d-EV)heBhJa[e4Z*5eFfIEG6V[#r$qIpIp1,Lak-l%
+Nk2QSr0arPaqYMhFIl%Im%IG4r4Mq[(pU2lXI&SUkLj'LjHLdG&FdAGdALdAS8Aq
+D1LSmY4ml4r+SqZSlbMfe(r'Mpq92k(k1Zm$GIdN8FMNC(aC'RNA-LlNE14pZ4i-
+Mrf4jFMpXMJb-'NM8P95FT5Fe5G$5DDNl+NT2#T2*T23T2BT1,NU2*9@5il*CV*F
+rNY4NU'5ll*H,NVh*HhNZ05b+@UTCY,03)k#(i)2d*@P,D)%G"$m%(qN&,mZPq@J
+4d%8ZVTIX8[jD@qTF#QbG0QUDfTZZT[Udhi+Ep00r1QiG0Mj1$*f@6dH6bIrQ6ff
+6hf6rYNm!jU[K8r28r88p2Y+Imp2rQRaC1Ak#heZbfQjmlq(Um6&NddQE*jH6mD6
+mf6f%RZ*2fj2hj1kNrYNm+6Ja)-h"mD$ie&4CL4PU+E48A(8Fl*CD3!P(1SXV49Y
+&@d@BSXa(TUI*eNQXTkc*eQ5V+[MkQLV+1F8%eP&m+Nj@4PU2*j1NV-a@8QBSmY5
+j1SMe&*@)8SmR44+`+8#9JEJ+#P(NmY49@5UK@FFGkHG4CDLQ88M,dA(&HeB"Y&b
+9&a`16!%R8GE56XPae*ae*m51!e(4C1QV)f6bGC5j2*C1MV*&E8eY(8d92@89D-l
+45ip-04@dGC@bk+SSULSN9XZG(Pbiie9&bQ6V+DXTUbMbG*adX@h()%B$I#'!Q$!
+!)GhU5J3B-B!l`L"-Y59-M,%hq13*5FG48I,8Bib"'!dkMUD1T3*4e-I*amQJ3F3
+B4d49+DH4@S%PaUfLV$!YQ+6,62bGGadh#b`"cF+ZfPEdeEdfBT-a58hMC2rPAqq
+VrHJ5VrIPrp922eIl`MUrhr#cI+k(,8hM8hM9Ilma5)%!f##VrH!qF3Um0AJ8LqQ
+mE,9AGeAGjEMTZPQiA(HV-Nf'rbepadRYDcXXYXIKF$MXY-NjDGpUYkB(11jArA(
+FGPIlT'S%DV+hTURRd#*PUhTNcdZXT['c&*@p-K#A@3Ap4!JLEK5kbA@*VZ8m4d[
+H1PeQ3ili@EQi8b6-NS%NpV*l9!R(HVahEjDTjr,G[afac2N[EBcF+TjqTjp!P6c
+l@pD`M`L5L8@)%PeL'S[[HIr%!q6S8+&'!P&3SpA2kR6C6k&E4mRSH6kM+e025aD
+H*0Y)X[)C+[SY"bI8ep6Nk@,Nh3P4k$iEf*4`NjRiI8j8%SMXNB*5UI*!P-"+)N4
+563PbQ5$GSR"ND+c"5ZUFS)Z+`8M)8N6Z9XRJV@4)e&)3Ybp(%Q-&kH,NSNA)5D,
+*8d@*'LC#2*RdF00%La)BX-5MKKLC1+"Y(%GK,!Q-",S4L-1Bc!Q'0%K!S%SSM+1
+-0Lp"F8+D10aJk3Y%L!U`,G"NI%#*%c!l*)*L85$RS0ScdPAHZMM28F6*2!T"@36
+,8`J8`6!FEqNTX['X*)Mi`)8ND*55@#!`$"#NNjCpKq3D(M"JJ0I9Y$ccPaSN@1i
+(d8DN)e'5Uj,k$SN@MMdK"m6)*X15D(aFM%b'3L4N(89)"S(3NL"Xd+Bm0M45)FK
+5+"mK45SPM(3eN[KL[VBdDA5C#`SSQ6SU5eirNU%6)8++*(Pk@K3b&#MM@p$)j5*
+68GC%jJUfMLeN4-Kb`&a)iLRJBm'"K(BC%)Zb-6)j"SI(*,*YmMNA%Dk$iY,3'0q
+NM'*SSN6N19+#)XL*%Ra-J6PVNfNEPBNSHdTPjH,%pmSXXrAaDQNlreZ3!2,LG[&
+b(Qj(eXTlN!$Bjr1kc8pPc[5BrYiq03iH0MBm2'pZ(6Bm2&S3kE'Xr-KXm6!kr#e
+H&[1ekqca2JaZ&a-Il1kp6kAfH&[q*MpRlhf2Jp6r'QKqe$rrLFESrCaqUKqeLDA
+KkVa10[)I4kl(aFAhq*KGVrALIMcISrPkAd1fa1ZmAV[k3`qhaHMiR%iRJDEYY0J
+BQ2qhbG0rcVX,%qelri[SrKK`1,IiAm-6'hh&iZbeQ0lIlI(hACp2MlIhprkZ&#F
+DR9m6a[Cq$%reK3lIH3lVXX,XZ(fRq+'kbTaPp,`X$YIdD$rP#KZ-I(q$KqcJFal
+INqhlq!Gihl@l!D('r,UqNhAUkE(eF+&1Ya,V#hH*i0$(jIR2ppV3rV`q[KKlE@i
+q)!qmaphT[h@INB'@qN#F2%hH)(Q*[!&SI%p(H`pYl1m`0jKHT$GF,GqhpbKMjQV
+hrEI(rV`X#(c2kEcHB@"[1"Jl,fpek@F&#'X1)FZm10`FH(XZ8SGV[0Alf2$j-2#
+qKMF,Y1"rM@iq,e2iqrpll2,GP[%kf2LGC$Mm,G3pPqUcp[eITrlKK`-EJm+(e)B
+F+(LB'&m(`[DqPdq*i2q-,'hQ2$dQ2$r,M5SIJr2qrr'SqC3qjbAUBN*6jfhM``p
+I`BI,pLC`llrI#KpVKF(J`i`fh#aq*$`2VH$h(f2"[29kqKkN1"ip$!hH"iX-2h2
+ZpGeI&r[`r,r4Y`PKKp663qq-ciePMl[iH&Uk(ih&rM#raYC$r[SH"GHTmRVm5K3
+iHki@*`Y0[2frZqcqAY)Hbi25F$'*(iANlb(r@*jI#kEYI&rM`peZ[Iaq*J+8Z2J
+3k[3HCVIiD[T[9kA(iA#if"M3l[#fr[kV`q*k[QF(9rbp$hahX6KF,!pl'i1YmEQ
+I6pVaZ*JHTLEVH3MEiQmaZQif"TBH[`-EYFH(eFE6IYpRRq&phYZ0LEIhp0Uq[hN
+2Uim0$lr%iHlZF$aH"dr"i10m(f["Ki@kh@li@2MpY`mH(KFE#&CaYepcphjBDl%
+d["SIEa0efd12aF,%KhRCG2i[JihcGYa1*JB'rhm12MF(Jm5(L`mD(Ei@2[)D'"3
+r(rM%r&kRl[-hI5DEcr!iR#S3l[YXH(!i2!l6fBHNmcGIRqeqAhH@XiGjUpAdZm,
+B0[aXEEiQ"KBq&aZ*a2,rEqMKi(fG0Lr(iRYP+A!i@"KBACF,%Ki(D`PNh#aZ$$M
+rlhrlGE$liTrDmJU&r4lrNlIVZ*a2aHlrp$rImhq2UGYlr$KKpmU+aZ$3lEGjVc1
+Nr(k'Sq(VXjiq*ZYej,Sp`-A#mMqRUlZKd[DpIk2r[Mm6b#+rdHrYmjef"aX$eG[
+Mk2j1rmc%l)McVm,'amIHEckA[Hrq1dZGMdeEMH,$`H$i*90a0r[q"a)F$63fISi
+[f)q&hqLq0mhaH'9d3`qKip2a-Ec)H($iI&rYk(#mRT)BI)+qm$KmE#ir9r[iZ4P
+k@(%dfm)VARi'+p8BV[1ckh-hr6B("r[arYmEElI!`&80kH9h@&`X$6BfCiha1@`
+[Eqa$[2EhQmKa-I%`Z,j-2!hQ2TZ(ff"dj"j6$JGReI9i'VKlApQ*S2cpI$VD(Hm
+,eFEJF!QMJ3m$Y2Tm(mZ"TIL3!1rarUrlam6USF$%kr!'1mE'p$SFILm6GIBihUG
+,`+#R6$LHRpVlAh1$$k[JpElIYF,Kqri(prH`YjTI6+pX5(LrZ[q$prXpYYiIfiI
+N81fmZ(#a[*K`U(A3m,mr2lceGh`1dhN2EE[9L'Kh810m[lAfYh`SIEiR@rZr(VG
+jeQ"-q6f[&dZQiA#am+(KF6GpRZrjlB9Aq2jB'"KDD('mJ`4B9dVA-$%e[&k[L3m
+EL3i@VKeF2'r,bh,G,ZSI8`-E'rT$MqV`GAi"Gi2rMB%1krMfRYiQip1(JiAYrMp
+(KGG$$TZY+1mEJ82IKKif2`[*rrh@mi["i@1VFH+6YmR9`lcKBQ*im10Zr+`1C`-
+,K&$'lK`ZPfr6HCrZUki*HRkleF69Q3[r5ZJqr$q6%KiH*VI8k[(`10$ZYjUpebd
+2'`YAUr8h82#p[VIaM&i`aH1@GHL-A[-,jRprqA'hlBSZm[pZl(pKqN-,$KG*$kG
+#(LifmkrmYR3a2-iN2UF(l810fZkhAYm''(qr[,(reqYhASiQ*MBr#pP3aLILl6i
+1@`XEJqTLFEpDI'(i1cDKr9hM(6qApbc,d82Ak[9`qQ"2NkXZ99910Zq0J@H"a#i
+R`F6K&krFi(HIFlD(TF6MEr'Kp8Bd3fma[6KeHhKapjj2YpleISHTZYe[28@-d[c
+pE`I9p4a$Bq"c'"a1,LBhh-6e4'IRpR[28qE$ZmE'qIVFI!2j[ESmJq2l82NRmFI
+-`[ErGeIl2Ei2"iAYm6L3!1*q,IrYmMLB(q['aLZl(pAq[Bid1&fY$KHhi2Ui@mK
+p[K@I-q2JHl`Z&qhmC&d12r`Z0Ka0[Mm,HBQ*LF,amppc1&rM9i426(+128h@mrp
+hKKRKa1elAq'&$`IEKSI"MB(D`irpIG`I8eZ0c2CISrTME`G2i0@&r"i%2AkE%`X
+,HHefRNpIV9Km*k"ja6,Cd1Er`1TKH4aI[NkLTMh4dm,m1kpRrAAlc@q"a[!mIYD
+",mBcQH&ZX$(mREqf-CaHCdfVhITp*Um)T"-rTJNhRhrYqlfAd)F6%FBb($'-`[i
+m'(JmRKF6GpYaE,Q$*P3hQ&`XIk@03a#KMe"MISGVa-#J9BQF*)I#eIC81[mIhrD
+p1(h[Iqcj1"`YeLBd2Z$'`rKhQ0a[Pi'&mhc10jN*0`PMfd2Xq$K'U[#l+'Kf[q2
+%ab%4%*!!T*LKKGRMlV6GGiQQ`[Nr5l$T2Ja-AJGI#EM10jhLq6r6a2)$cfrcqV`
+1Nk6HEVGF#(Lr`p@(KI"U[UN'q4VHCaZ&KD[Tr6i[5Dh#l34d2PrbrPS[M92-BrY
+iRiZJa,2'mIKGT[IVcXphIHF6Gr3cH2$`r3p['rTLISd&ep'((`c59qMFqGKRM)q
+e6qeMDELF6qRUIam6a#GH"M`qTVV6RI3qKl(m2HmfPj!!qPj(h-$jABE$N!#ck2Y
+[hE[QYj[1`ihZiR[`ifai(rRJqMLH"M3k[[I"de,1qIc'Gi26q,qIlAj2hqViRa2
+L3`rZ+41$qMbH(`0,9irj+6VZ$3lA`D"YGGElH2YZ,dr!h@km[(r(QmI!l$KB@2i
+[Pi'Qa1&j2M`QRA6BRMJ36$a[(mI'dZ"j10$`[QDhEH6pcbIElEjrc0Yk[Am,p(&
+m6fY[3hRQI`prq'PdhSGVq6`H[i2"q#(Pq*Mp9Z[Cffffhi)N5dj,EEL*D4,6fYY
+%NR8fA,4a2`-k&cRlL(bL4TXBl$-5*YGI%j(NZjL8Qd#ik!Y*Bj,De29pAEfNIUq
+VkQlq,eINGAeI9r1V2jpchIFrcqVc(4JE9m6kr1&&f@jEPZ@XS)*+0)1L!E*6lDU
+b-5dLeX6ClL$NTp&2k+NMdNU,*bh44)*qTj,)4!9QbBNq0&Nff@LG['Z+QRb-qdj
+@LRd@cNa,6,4))XU*Z-Y'YDR*j'2%dF68JV*LbB,5dSTqAJY-SK6h*-5heAQX&EI
+k3,6mY68Q3TU+IP%-pMj[V334C0TDG[UieV0QqYUSc6,RXMd&2&JN`4TmrFDR4bF
+M2c"cXHP*LF[NHB"LTLbF["C9%qEkhZD164(V'B16VHjh(V@XU#dJLjD#fMa2F3l
+84-K"pH#eU)*`"e&*Ea05GZ'LJLC#eU+khYmMfmr*`GR"B9YVNHhM`@96(JVG$F@
+d&YNXY"d@8Sk6jpP9hQcUV[km&E1lRE6UbiPGMh[Rr6qchAaDh`YVmblqhDmPDee
+a,JJZ+c4eQM3*@D1#Y+5)P[rhYDlE9feqpiIr[fpM*fRi)1SR3I2U[`jQZfff[YY
+DrJch1hIRa0YDlAa2$UKUrQ@Ai+lkHeqV"mblU+M`r%fhLIJUI%r"Y2`aIQIqmPG
+pTYXlAA%(EqVFr-JUq5rkUSYVPVL#dYB,Z995B0&YVRlIrYc"f2HbF(EEE`qp[2$
+j+$E9ffrpMhHcXYV9f8b$9f&pPpAi1$h1f`HGZISprmMXV90KdG4m@$V),ffrKCI
+[Z2hh#"2hh%$MBh'ffdQZqpY[MIqrEr"Fj,*eF(8@d(1I-e&AYYYq1Zm1ZlLqqFe
+XUb#dZ+c59fZkVm'BJqCV[N10RPr%r"YDMm-AEG9CC$kPP,bq6[2rp*!!D6k%cSX
+YFD)E,,3C@lUi*%&4YY*p[rfGe2kFS34crcklRGVb@efhrIrXIAI*e-'fU+Zb`GE
+QDQ`brBG$Fr[e'EceE@Ch5e'Jc1Yc0aF`4B+U$,Ae6Ji0jCER+`!(ZB0*aeh8AG4
+XEMj94""EAN(4e&h"hPB1rGqjdFDeV-r939ICjq[e[(jqAIrNqI9G$@jM9GTDr@c
+h&jEFC$999af-&C8@Pa"F3D1mV,HXcP4CA[HB2jDbiUZGZ+hPY9"f1EZ)+q#$[)+
+LIrrRDQSe&E"p2Y2%jf$4ADFLTd&m9TerbULilb`PB(VB0jq68FaQ09Hr8Vi0MQV
+cN3el'#SZklDkV9DZ,9A'Ljq#rlDSl#bUqUXm'TZF[Ji0cTj8&RcpIb1ajq[c%bC
+"jX'9J[E'SVE#XJZpcGlP!PhZDM0kHi[maBe'SJqRCINYEfi[kbb[G*8&8ZjYVh,
+Ap6BaV64bkUbe@jc(E@AZjLj[ZYU2NeqMQCI8fZ$hR!ZEcF4lfmU,AXB+fSZ#%EZ
+A@9PI-XUqYV-hC9XbaXDUi[GCT+qYJdN'U[Y*"ZE'$FhHNU)2TdreZJJbr#Q9'ZU
+Xj"Q)-Y4@8'HX+L#dZi26XV[rbYJYCA[Hhr,*c+M3e'KJkq#VZDLiVFMCAG4FEQe
+VkUC@@X&9DpYSlQ$9HVPFaf8&6EBd'KUf[9FbY9HHGh2BhRRGAB39mL##`J`Db$9
+CL[c&HJ6-9pI89QCBp9a,YXVPUqTXB0*Ae9VQ),XK@GIbT1Nb048@ZUh1SjQ#mh2
+Af&AICI"p1brjSBZ$rrB8+h+a,@rUVA53!&E9*k),["YVhq-&lIk653APrIAqBVk
+ckGU3!%h&CCD6-C@$ka*I)5FY"Sq$-U[Re9R"8Mb4XpB+phFIh*GAQ@JcQJr8p2&
+CCL$CkUVJc0aZE+[J)UJdPCBDUjJZH$8D'jUE[RDfprA8pKTq[Q9PA1V)+bcU1ie
+@$Q,92(A`ApE"UUh0f[kEAp+",@p[CeiRK[dkeYAjDaJc&VHUZZ##G"C89TJcX[D
+f@S)CrA9hpq8P6&59-XF(f,R"h%FNcdFU#U+HXV"Ge8&ljm&lHTiB,rNDqYq88N@
+-&f2$T-V"fH9-S%'MJZIkc+UedH$ZBdrSThHIGV+Jbe5mV@e9P"UVqh[X(,h1AZD
+["Je%TM[e038K$[hZA(IVE#jDlp4bmUGFrbUH`Y8ld&aID1#pZF(NG4Ce$dm&aSE
+,fE,f8#@9r8-Ge8K`EQ[R@-()f9kfN!"XB,bG*dQ6bX&PCE&M`Af#lH##'C@6#N+
+p+ET[,`AF'jPP"YlqI-3AZjc(4TiCETiB099D'bh0CDlRFaDL,@9*5pJpM9FcPC1
+@b-@9pfTb"AAGeY9"PDqXXGbp2&ac(Lbd'BbXU#pbY4F%LVcrmSV-L0$Mma+RGV9
+e2C2(L[VRdCHNqIS`&JJmflBhGCDmr"rU$r5"$dM9lkH5@qRNTS)+qXX,,"Z2Sc&
+A*f4A*"CB-c"`EEK5iPVZDUej(SKj*45*I6UqA8A!#G9F9X&M"Ae[4XH6FP)YjPC
+982,,XUL+AXFVHF-[-mkRSL3Frqqcb'40-9lHA-'j[VRd+YjA6f'@V$6eQE*Y*9h
+Q'8P"1U5[qA'CV0cFD(59CFCF&U0PGP*A9F[aE1VHhRkde)[(GJ[i),h-Z"GE"*d
+N@!Klq%$Th09-bpcPTN'"-V,$"YimX`NG[bm'jFG[NDLl!6Z94rPDqYUA9(pU1eC
+ERFjL#,-Bl2a+bebfM[5Z1,8if@`D3GQYV12Jh0lF[G)09""dd'UR&)-AN@8Ihpr
+J`B*P(iATfZeYZqUC@&QHYX*QAU,Lpe8Z[V*ITmrPpm!TD9Y,KVXfAA3ApL!F%'9
+UV@pHB@)*fjHRJdDH$"R@&6PpckpVeA-e8(TfGCE@%(Yf0CBD5*PZ4,b6AJ&4PFU
+N$Q"i,qb[B0bCPGcIhX"DGIbai,[Fr`JLf-&V,[rmmPpkUV+r+bHLpb$VVDqbP4E
+CLaQG)6KPkkdX+[4i29@G4d-'A`ER"PH"H9Y31cfk`0`9PN2$b%b$Up(MF9r6`jM
+JD$,q5!TQdV0V8A%TYa%VVi,bY!1#mXRfmRj+LiXR+iDM8kSrpHX*P4YAYjUh4YH
+E94-Yc4NPbZ3ZmV83ER-9p,PHM%(dF(e8meIPE'$9C@aVdmd'ZJdF[+`5KjEJH@Z
+qp"@3!'jVGV9C5,1kfb[XKBe480K$cjKmHI"`F[kZUV5YDA6Q-Gajp,C[rRRlbqc
+(dZC*i`IAh,TjEQGU(EbhDH1pdQBPcYcRi+M+cUlleGDrqeehpZXfZPXUbIPl##q
+(Rq0Dhh0I(XF[9k1qR@'M`H,DheMIApck8EPMEcJh'GJh-iT0mhFq16%!6Ff2([+
+6DqYPDUpPcULbZrrEq9&X*G69hrqB,kbX+c+j@$lFf$h#bA)@&9Q*6(Slap24Fk6
+c0*@`9+T2*!bS09-XCKTTIMd5+lDPbeA++5)(MafcYiqDHhMMC@$E3*ikhm&CYG(
+"UU+LXVk[JjQC8FmkT+U#NUadPKpXH+hM("cUS(9*%AbE@A!J6ep'+4M`rhr!RKJ
+lI,5klSE#9&VmcCGGBhGK+J(INc6MK[kR)9p9Pj9rCpTGlDSHhG[VRXZZdPE'9)Y
+CDbkM)f@$Ii1M9aRTfY9-Zl@ce@A[VlrR26Xj9bVQ`JU,9!YaAQeRQ),*PaCLTIE
+[Q'fSbX'ITCfjPcXUjBE9&)Gcc-%&R-U1DZ#N1`9)F"5(rHei9KIAhDf%6,Cl)Q1
+A,hGHRLXA6aAYLE8CP0+kIQAGkAqCFDeZlfq[Tj`&jHrFH'TSSK608aV+pdHAJ[l
+1$13CH,IG9CMbCHq1,qXVG*mlqpaXaiS,%H2FcG9@ZU2r6jUXXE[QY"UY)RNYXpQ
+*9ikH3eLEQUG8KeF&6Q(P`NlFb[0bfjP`INJ[E*VZ9YPSmT1[S*f$JcTBlYIT-aU
+VlT)26d"4pJrYVkhFqP'XYRhN%((r&1(SVKbH9l%Z(l'SlU$el@[JqXbN$eK%lQA
+4$ZmcBCD,"F*hH2YF`ilePH9-E0e@CYE'G$,PAQ9HhIbYCCk6ZqMVBY9DP`-Z6UU
+bCB9(3R#6`F[1lD`UCh!cGPBD2UTAr*@$PLR(Pq5,m%'X*4UMh`$,je9aUXU,mcN
+jLUPe(-8@f'DR9mTQ@A,`@XrpmbSZCfbPF'UJqM8k1VdHAZCPA@@&KUTN'$PSPYB
+ai2BBkd&f5GPpj8AB#Gh"jh0Q$fl[Df#lmeBSlISmaAbV#E"PX'pU,A56*F[,4)X
+&U1PCDV53!%@A+`G(&bpcqr3PDP@Dr+c3DVk24f181BU#$25j0ikG$q1A1EcRDmj
++26jIYTATmYIr6jr,A[dqIVPcM[ESI2fZj6TF@el#idGhPpamcDYeVbL8&4De-fG
+Jk1B1G9h[9@@ScI2QhhFh[!XX'AID5*E9mH#LjZlP*cDhDeJjArIe,,NEq[bpPPB
+0CA`ANZ[LTcIPCL[R@%kULeYaSm'G9ePPJhHZ2peB*9Vf8@Sh)k1fU*9rp1I8D'`
+bpcIG9CA'M[V[XICjIp0akeqFjfe[-pq#pT)0(FhZA[peQ09l&AfA-i1Ae&cf1$H
+h[pqH[XhhQCrml(,pKrjf-(fl*kG6UB*Adh(9qhDpTFI-Zq5SM(6A`HZC0#MI,`D
+'hYV1UX[q@&rim[cZHe9peIBk6[*NZ[(BJ`EhrbA`,5LJh&V@dA0lPMY9RKeRi#L
+JGUmGZeAE5#ZJc&&p#ipH#qUSYCGfe9"RS-'lqR%p+iX,(,H6d8(4lR1Ip@YAHkA
+,FMkFrFqFlG[pphf1q6YP&PG@c[YhG*!!CDfbZAjV@90Yrc3eITfHMkf9c2&q6hR
+)pM8k,BfY9iFZ"fkI8$TZ9F9[KeRrY9q#SfPXhE4qY"UV,5CA,`@r9I*XG*HI8eA
+mEE4rmjklf8'FKJl$QYGf-5fNh&EC9A-9"b6e9Vb9`85pb!Re'9CeAcQ1CB`E99C
+f-(TERmm'L[B,mUbk,*aq4X),EjP9*Y[b9Rr9P8hZMdI)k1,SE!lN29CmUfc&Cd#
+UfT(EP8I(IAj$AcPhQCd'aZHVi1VPDM4m+SjiS`qC"F-c$-FUTR35[(FFUCT+c-9
+@GU2MaATb[K3@qArep$lIa[MH&FkZAi-(+GY@IHeA9k[4a,DA4QFqfh-kr+%i,XS
+2c!iqaXVhU"arLYUY-,HBSYGFApK)h@9Jj5SY8j%6dZIX)0&A@9&CH1Gl59HjI'`
+HAl+,0Scc0A#S-YI@l`URJ[,cZj1c[IhrG,Glk9hXU#flf`l%bfrAR9R93IHRA*Y
+5`3GQmS3P@caaQiiYab,VM&ZDVQrK3G[bAHrEq0AFMFGj1cfKVF'iX,[Y,@9ae5C
+Jma)2FkR(JU+$UVAA(e,,55qmUY3aakM1[((b20A&r"(h1jJmQUXVfC,UiN'AVi,
+Bp'5kIT9l1q91VXcfp4%qKYYV4UJRX6'-aaVLNJc&a*Mj'NXZ41akF%UE$ekU#SV
+qM-,Yj,@AeBZ*e4VVK[%K@3D5I1lI94E#LRa,LSZ+R-ER536VZTBdQBV*qNc(H9A
+0I2XZMdPPZC%((A'j1GRFf8(33(JYV-hDhm(EjL$Fl#5G'9lIDHhJZ+LbJUUQT0"
+9jUUM+bIXd9R!G$N'AV+bel(mqBmQbb0VH(KMVE,Sj0r9F[!IeeXTHBJcm$G[EL9
+4h%,d!kqGqQi69hGjUPVkU#8'ZMM8p&,b-@`L4,LUZkRj4Y,LZbTdQp4US2*'LdB
+e21mhPC+mT$@PcmTV5`FM4A%'HN`Fr"B9HBLbi-XHH#iYH3Jh1%G!q6e1M1X6PlN
+fa1aV2Mr@qGqGGM1UY,R[+VRcF&ZEL64$5INZ*cTT+bbDdF(R@,NNUc0meFDk#fc
+"Y-XTqJQbAM6@8&@H*Qm65rRc2cl,9+4h8265cQ0,@RG2h1RlISi),Q4"CIN[Y2D
+$4fAa)0(F@YcPE(95XV*I66GCIRM'[0*NDfbl([,+a-bCqV#UjDSZ#eeY19rFQrJ
+chQChphZ4G8B5@dkfe4&h$'RU)1DV9j%+JUp'RV@Y0@CRU-VC5$Xh`Ajhp+L#pd"
+fR,`f*mj9aMfiB,+iJ[rUmT9jFl3QLJ`DV6f9cPE#jPf@jb,h6Pp6-EU#$--NG@C
+iNGIh%NDQ0&69`109Jh19Jh8'k3*"q5Yc$eA,"VV+jQqHq58Yi,8l3-TieQS'Xe9
+CCDpieP5H2Lb[b`5rdPE8FY&UT3UrAr*IG9D3!(bS*db$SmY@`@&C8Dr+bGM%HT*
+jfmqTF(#%56V,)eBApM9RcJcT0`8IjH,2P(XF6MfHH@VM`cYQ4J6$bbEQ@J3j02V
+15N2$`E#mY@9&-8,0P,jX5$dSP(&U5ifpR36MA(Q-jCGjQ09@S%Jem$ZCGVE'q)G
+eba'jUZ`e8DSU-["Br$Phh96i$fNF'Tk1f2'4@9(8C@4UHaN['lVIRe@dJPU8QUV
+D`P*jeV""K338I)fdU$NFYK'dcPU,QZHk-q96X,,8H("hJd#F("[XUHREV%#3!&a
+FhE2&LcNDYFaSkfUb%(pQYr"`Ml&lL64dFDd1DXR2,*G9A0hPVhQNe9L!NaA0CLS
+cGVGQbRA&GXU[VkbcJrG@@9j@C8F24h0Mb-!iAC`39'Fr-1&C9Y9cFZIQ-'SZ+Z6
+Fhf@[p'ElTClBb"SEr936Zc1fPE&jr,R-VhNb#0X+UbYLeq#qUD,AQB2X,+i1RKa
+a,QqVkMk04p&!P3qh%dPM94,+YY6dKABQE(*ZR%bT%@jP$LkTVLk3!(&dKlf`iUk
+YYlT*HBVFYPDNFA23'j9D`AP&"dN&hIpe,ZBYK""99R1RQ1J[1aXYI'kq$a-MBVh
+hI(XV`3IVAGXGC)F,ScbZ0F+UXZmX)2Fj([,DjUXpCI#Up(E3@rbMp@8bSY6j+(6
+Lk1#`UZKUZK3*9@YcZAaaDqfk,eYRULpbD04ZI5SbC8RUdj!!G$%&kkFLie@NbpH
+J4mFLa6N@)j&f@`cUf6f'Ffjj'0P8d4jSM%[-JZ,c9@Sid(5HPUUbedQ$Srrc5$k
+ehUMVj@93F8YHXahll+#jXEb#XMI1ZCf#Aeq9qYPm[p@G"4GI9@%"eMFXCB&G5Ab
+[df8&rFhpbJ5rZDU[Em3d&jIDV"dPcQ1MbZMH19qk#eJ-Mea"'Y,I,j!!U,LlYB,
+h,5i,A99A1APac[1meFGMT'CmDLi1L&9,hIR@Zj2GYeAHCM['1APFRkrcra9eA@m
+hB9-D#e[[i&Vf@[Vc"Z$c,rmpcXD[XD[SlkjjI-3@-L`qaDXU9,P6TH[E$4Ml(c[
+kQd1&V,a[TjRQVZiNjDdk1#Uch-mMSkbeZqa[qM[14*GD6,`AQ$HB+"!%q9!H)2S
+ejY1mdRBjM4I6jh*j6)d9N[X[dN"`+p("*bbS6cI9I6AdG9&af0lf2e-VPq4dNZV
+q8!NXcre9`*f$XH4RFLEQIBkVhZal(99NHXNhRcr`CLTUYVfN(ljjq!m`eEAPcIh
+PpGdGp"8f(ZGMPp9PqMPi1A2`-U,[l(K`9QHLk1#lZ1426T-e0K4@9a96lLMLDL#
+hdpV*-bHAkci8(iDlrhEIplEm2rTih,h9AU"09HrJj,2EEr[Y2qqdrlfffr$4Irk
+()3HPlQTdF'ASj&GPD[Uef`cidTe4pV-e@flQ6bAe2%feGiH4XYYPG*AEAaqIfX&
+hY[Q9hfqIrpfhCp&4r-f[c0VUDQjSVZbQIAR5ULSJl(,4ULbd0`Hl*"+`GYPCY["
+"CDR9D1UcGVIITXXa@lA`rVE68l1UXXU5pV[rDb,jXiVDLlMYk5$Yp*!!HEN*F'B
+kUmVVcEI3r"YYYp[h-aGjLl3*Q,[m(*CYfep*YG6C5BR4CD2)VLLmhGj-DLJl+$1
+EEjdRjRrIc0V(LeeMH!(pZ@04fM'Sl60a,ME3ED6`+VR)R46UR,'`-NYFEE6dF@#
+9PG9"pM"ir"l'$"XG8-rFlElq5f[4IkM`EDij'3ITePSP,P)++bNdFI0p[V-K"C5
+J$SSN5E2M@QBJh(ElM-89V"E6SdhSZLQpkGCASVDUUV)``Rj,fP*C36UULJYYV8e
+X(4G(*Qp&DC'I%YUSrLPNE+ibf6JSV4SG(UZDRRp(jm5-!dH,1JLImL`C##Ed3#j
+D*%LbCpTPlL#9"%bFkeXUMRS)++QJ"'#SM6qb$Q#$4a$q$[13!%50Ql+UZi*NDHE
+DX"BKpF2B+b)F5XU$+4iYC"Jr+JYE#-EHP8EkRZ@i3@re3*SVM4`8H4b&,Hc),RS
+i,+6EmFIM2De-(T8QUL4-[&V,8pP@dJbjac3A1@YC0('R9'DT,+53!$k-KVdVkUR
+Rb`k2+8F5EUBN6)cjZi1d64@Q9+@DLhh%f3Ie2e-68jD+DViNfhL4+@*%XS*1efQ
+ccQ0c'Jq2`E,*aXh,R8e22Tl5dQb*0I6fP2%VlHRVkI$d%ZQZUqQSkHIDDq[llAp
+A6lqEVkqMYlqMPl'lTYM[EV36+IZ,IBdp02!QrL8eaXHESk2BclZkd&PX*pI4cpM
+4bjHJQ9mZ2*d&T64TGIDBFZ64b*Nq4AdmNrZjAbCFD2D5aC8mDdMcE54)Nb*XbC'
+TTXf2Ec*NLMQD#cQAH(Ec+%bKZ+H6(Riq((ZJeNdmQ0Mc,54CfN5C,QfNhAaV5E*
+Q6BZ,*Y-14'Pbk-E'[ak'(Cd-1CMc04,Tiph1XT-L64eq[aDq4GBHJRc-1AAddLE
+EfGRLbl2AhZ,3SBH,-`k',3`k&rXTQ(-aF@AD@pT-XqSS8H2CkqA66-@hRblF5@,
+-LBpIb&Q%@2LfG#cajFH4'M@Imie#IMfI`@H2-VlU06ePT3VaA9p2LrcqPKkfIfY
+I2UkD4(Q@FR&Mal2&TjpRVlQl5bQ*Cd080',#I'ZjPR[YELfIk*J`c&4U(5RcdqR
+Mb+qKKeqYZVVhD&e6iGeAkh(L5INr!*lf+1NhfiPb+1l[EZ*AiG$(Xa96-VS0"d`
+RVUCVG"Kciq[XX(C8mb[Sk1la32PbXRKa#"*PI)N8p04fmqe`k1RYjj6E*ZY9AiG
+d-CFaT-QIXX2r2r9[4lf0Eb,H4Y+Dp[pM6A9lKhGR68+HA2kEiRk)p26bj0e,`jm
+L0h&Era+#5#ARA@J`mYAdYT4fNfQRddMALMTkfYZT0E**l8p0@5G"bpr,ZUHC6iG
+2KrcSj-hC5bM'hSpI'&,0NA2Gdq,'ZU2$XmH23PembEKcHQq*jNHMNbBdq06#TlU
+QpHRTkq668dfkVif(GCBS8TU@dVb[1hPfq(,f*,3V*RhZ(VBNqC66m1RMjD6Q[B'
+$`kHYeAG9p$r0[)Tr+N4UEAdFLI)QblH`0r[[ipRKk#dQhYI-Y,6$Y1Qq6i%HRRb
+Bmf2,!E[SmF9mZAD4b&m2&jZd5aT,49A6lHI2lUEXBmqhYbcZhZ-2d5H0[,Y*NqA
+,BZ*LA006dq6d'()%,(TYI)RbE5IEbk1[ND#Xq*S,IHdpT-QdGhmK,+E*MaV5kBY
+0T'&T2NbEU2R-VNk2p(0LXN4k5dMTD6lH6'QcDqR)Xf-HhQakHAD%,8mIQk56Up"
+Ha+qRVidL[5XSl16*'2RddcPCYeDEkRTLmKVihGq")Va!5*NDC)Nfme819p2%Qb1
+3!*9*(ME'e5TNd`lZ(6cCmL2D5EH6*N@mD6))!MemHl&,i%5[,-*&(AcC%X8P(0)
+'TTNcj%hQGp6hXfE6BG[XBrGb-&LQV)qJNZe00d%R8FY@de(XHEBTTFBPCG$lPqQ
+3!#EJNkhYbX#2'N4dQLKLdRma2Pc1lY)hSdqZ'(`jXb0XC$%f36b%IAcCY[bY,5T
+0fmh3jD#4(M%963U%p&Q5BeTS+HD*S602fpH0*'N5,562lL666rBVa-dH(hGT(p'
+RM8FQAm!QpP*lZ0)pfdQcp"b%MA6"1@E%e-QllU,+A68HKHNh0++CGI(M6T0e%)(
+ZidL60Rpa0Ph-EP[1RcjQJ-RFMC8p1@[bC1(JT16GM'NH`),3b22Y(%eDE(QjdR$
+NA8I34TVfRB#TbC'NPMXk4(ZYM%Vl5AS+1EIfNrp8fIf%I14TmqMM8pT*`jFGC3I
+BQc+1CXBmMfCNfdd-RpGZNeGUH#SB,R6!!J5kQCD0D4TNf[MiIRcV@6)ZYP[X@cf
+0I6ll&QBXR34l6cU1haE5hXm1I'YlH2Ak'cQkdbJ8Fq19&6Gl-MaJ$NlkdY0M*Zk
+DMS8mc(Xkqcr9EfGI-Vm@p`l2HfFHKPUIQ-HKIipR3f123Zl1cB`FFdNbCVaJqEM
+aY"(-5G$(`jP$&-EpIAiGQ"@YY0I6dpRCkh@b0K1Y*-Md8cH,Mc0IXEIAclS`D@p
+Q!NL[q9AfXfcTLP+6DE'CAaY")M5GPLfQaQkmaGprHlhjaR#Q9rX8G0,QIUTTQrV
+pK3J[FI%ak'p%GMkqcXe2@Q,eq'Cfd#BC'mDQQBpI6krBepIHiH,Ldp2e'(HJ@!H
+p`m#chQ2MiGRCjlAimLkf0r-`r4ZmA(RrUZeGp0ZX@iTTaM0NeqdVl5CS*JcdQdd
+%c&Tp"CM,A9TVj[R6+1I6ckEAp0Am`-aArlRemcqG2-p+Rk#Ke'pZ-I$YlIcNb%L
+BpXK'*85*P$$`cF,!6p9hGP*P2-hScI8BK5al$M+rp'DC-PKqMArlhTYL&Cf,Id+
+-T$Qep0c0[6k$36$8cAbFFdMBqJXk56'0cZdmmhF+1[TUqRj[p9`CQkIcbh"DXjP
+Qp-((+D*PRMiG2S-1Rrh[DHA[EHk,4$AEXC&20C!!0AQ',IC1[PdG[3-`0RGc0KG
+5+1H83ep2S+I39p2-&b82LjXKFBCP4rc4ba[3hVc8I6eqaZqiZ+HMY,50AfIq9Mc
+0GYR0ZhM"dBc'd)'SjG[4bppIdqqVkqrf02AhmqQRNjj*K(f%l$Nb0NQ*Srh9mq2
+Eh90(QBFr*dFI[aLVHdVkHYaDIjS`qqQ8e1CeidQIKfND0KdD-BYHC2+q[lZMR8m
+E$%1-$Cc,HHpX$6$,D$&YkmB%81pTrhCk[VrBlZRpLA'D`0TS*(0aX-XD,mGIkYI
+)SlU4)jNd+dFBfrjpeEipe(N5*[Xb#qbF+1(%MA4,@[Tr9SqEVkq0-Z6'mapV5ED
+HGKk$$d#"$MMQi),k#kTkIeDIeHBhhUmcK5ij@60-SmQd9pAqY2AQIUkN565l4aU
+1DFP&rGD$p#9FEfG!DmF0+k[MalfM&IIL`(RM9RB4eF6',LV6cSZJY%T45IeTrkm
+a[[kmcK'iLa5c)m`GXSpaF9+5NRLPTSe-Bb*p#MVrAQDp+I&5RM4SqJ5Q[kE38f(
+Ac+&2l"`adq(AemIPT&#d0812DI0'bN6BpTkmA3*AiD[h!*LqMLfG1PID#[Y0IHX
+d*aNVTY[4QqKAaTGT68+2qbMkA0aF)aqLY0(Pr)1EqC6i#90IAdf@M5l0+MjUKTU
+SZVm9%bRZYk!L8dNe%'NHdhZpCPT+!S,5hSjK5K68eIEiAXdG0)N9rP@NI#ZKcU1
+0HajXZ4kmQQ&,lU8Z[VkH4cHZ@2Y4hi,EUALRTa4eme+2C5*'phb8C#pe!P&AaVX
+i'X,!SkD6)Tl54K4Y"S)k8&T*fIVcBb843eLdm`8FRQpKS+qE6hl-P8E`9VGN@Rr
+)TQ$[8)c$@fP9ENCApI(f8QkNqlUrd6bcDR029e"Ifp(S*mEA8e[,+mL[1MPb2C`
+c,"(pH4DD#EXrl@NDAc0aAhY2ArSVpp'Tj1[lVVP8Dq+l3HpP-2B-9YTAb,[YkrZ
+r+lAL@pZXaYr)f*d$BXbDaBATZTH[q+I'mm9X#9eR*MiFRf)mbQ&ES*ZdrY4bqCX
+bb2p"HcM8mfllRI9pT'pGUU5TZTIFhELQeiN'+F8[Vbpp0N!qP(jaEG0raZ*p['r
+@AdK5eqJTUq[Xblcf)b9(pT!!AMGSB5[+cdCQ%VI4TYKhfaY)hr'UG)LkTZq3!'&
+-ZaVp"Kld"+IZkr9IZZ%V2q5GkGQ*LVVrdD"8ffpe,NQi9Acj%'(*d&0'd&IEaTX
+bpMddX9Yh)d%qMY-1kTTIPI5QZPMD@(T8p(f1(G%RjLi3EHI(1I5@3V61,$p(a+,
+p&C'fAZqMFLcl'E[E3@FC,5AApR*kQ6,SjmQbTSf'C8UH61ND#RSp"EckqhSjY0,
+`lf2)mi`BP49I,mShDcN9VjHa!QRMpLaic'e4R9QNemLhTKAD$$Vp$)VmY(@4VBd
+p(QGI6pMHfpqDIC-CLbTY4*qFE3-[PTFI$TTP[6fiX$!cEc*Fc$ZkDAkp(S)mLMP
+rQ,fPHF6XYDLkC1E6fl10k)D!8T1E&G1Mdke3ep0QUAAmV6q9'cel3d%c(d%HK-a
+kFcp8qpYk2$+-CKU3!042Mq96@G2(VlU@D96Zrk$@cp"VF1IG(Fa`lVqeeS++C2Q
+BY(2ZHaTUq06'LkRM4jG%5J`c`$!)GMUcZMF3%K,LXirVS6A6I0ZD,p0C@!1PIGR
+%$4bkpCLkqhV,[jY(,S[5e@paFHr`mHKMRF)aD'barBm(&SB2#!6dFI(XUqQPhYI
+,ajPRmJfTmHI,*FdeQG'02G9q(,a@Gl-lU'1GeHCJfpRf%bNp8iPF-9IDG42TkE(
+Sc&fGa2$p((SB1qpMBdp[6HaQD2ZDqYaDE(ak2&RRIeak'aaEUCMRJ$Q!(HKC)Tl
+[!X,h`0P4pT@rje(hQ")`e(AbpIEiZ1QM'qQP%Q$Hq$[U1J)bI[kr"lXi#m-FHCM
+d"J4Phdj%c&d()BmbKVlZR1Y(,N'DZQX0LZqmG+p2Li9#KLb6`-YF@[TpP@l,&Sf
+12KfQ,MRLCBiQbBiPhKdmcf*f(IiXD4MimI$aCY$HF,$`-A#am5KME(&2%#1AKRN
+dQABj8Bd+iqqPR%AVmI$AK86JL1Xm@cP60MVCPkH1l&Qlh$`l5cTVH4*TXA&Xj&2
+LiBRV-fTjj[+ajX@K4iZ(Lkh(2,"0Y+DhTVHQScGUPdG2)Y+DED'ZJ+T0'8X8mL*
+D,bp!H9R8GHA4(X28dRBdeZ@I6Eqr1fl66F2(3IKepe0[kqr`DHI21Pl$Vl3&MXr
+9peDH[kjNGYj+&F9@+erRqI[F-[6RI0Sm-Z[Rh%`kcPR)S&mb2D6m1A4P@9$$Y#[
+#KKcBj`)QI$R1TerLHKlH6j,ih@Ghq$Hm108aTNEiNEPieR'q2'qA'kb0f-D0pU0
+jFEeBh&RI)krYHiqcjISakQ2PBr*aqCMfdHjMapK(qT(qp(mU2[Sr#Mm@LTD+G4C
+bLk#Ldp&Uk+K4Gc4I@S[b8@pS[idA[8G94jZMdY(4rDSr,Srk92*k2Vr!mrqdL2)
+bmM3b,Ja$H&)r6)pqNbY*S+6TD6k&*fY*rh5ICT1rT2[8Rjk6dD5rT2Jb90NTf5j
+M*D6*@q5l$*GeN[YC,*Irj,!TFP5dZCTHETHLTHVTHfTI"TIcd[mDAr906CQQYDD
+fTY06GC6GBJ4d%2`3IS5lZQlY!MS)IJJrdJT[`dhi8#1JLQrqTZ(NkE*mTNrNC2V
+mRpc*lV*rebH-GIfRdG2U+IYDIC8rj+IqG2KbrPE$a2eHbHIri8RS*2cT2hC2jC2
+l*2#Nm@#P2R[jSqKR83GT"rj"Y)2&Jr4"[i1$"lY469((9&4mLSkQSl5Sf04i&4q
+DSrqU+Mhj8%VP*A25ZHSTP&b9*b&&PLJEMk2,d[)8QAbA)8HAMf"iNUq2b8INMFU
+VDLYTkfRVD@YV14N9FHYSm[4mK49Y&bQ5jD4b&(6dp*@b15VFPb9(b&,6bSmS$J9
+Si+H2@eXLYSUfMVD-"+h*)&T`CTj()88ZPPLbiqLbe*Pk,-8A(88jJG88GG4FJ-G
+bY&ai)FFK5MVaMZ2T12T1@MJ04dG2Nkf-!P06j+RSkf4AeGI4M(M6dmHZ!6NSpI4
+eYIA4kQLUC9IACH2A9dHV'Sc02@deENkfMTk6Mki8r(S%B$FS,rMKIS%U++S3)-H
+,fNj"!P*b'5Uj()C,MmPak"+6Mk+C4jaVR0"U2,eG(9dD"+XATiNBibUB0d3b"IG
+[AedD[Me[[HIr(jY#K3c3#90#448+UK3NpRAJ6SD&C*bFD6&braBYG(T[Kk'bkqa
+UcfC!4d-A+ak@E4k'be0M95BM#6RQLI2@@TQ2k%hi*dQ@I"5,5e-LMd0,Pp6B9Km
+mf3F&FN#[aDA,pH#X9f+aT9)KA0Ced,CCJY4dL&qBb-5*PR3bIXRb'3U+1QbF@,N
+)N@245Xj)L3``a+H*&L4)BZ2&LC((ai6pk6"+((LijmhZ1!V#%!mM#Jb*&2TA%``
+,3Bp"S(4R3G%L`JIMa@L!NA3FJe&@3b)#j3(SdD+`0bN3AS'4FM'TaAa)d+#rJLa
+q0&B04%)(eUaDH-`3#Y,b,5TK8P(3J`2b+$i8)8b,R'"Ha$)1#'6BB83(XFYm%#%
+NAC0+$)0$iP0%bI`MkX`J!-EZ3,&#Q3R5XK'"4JR'TS(k%F`l%8)C+Q9!X4d+4-M
+N*!ld@ML4+3STVA"DMb'5!D0N)m4SR'"+N!!4MLlIBL04@bKU)P(4j*i)J9%Sk*8
+qP1TpbUqjC#%-50)9+dI)%a&)p$F1-"Y(4`j*NfR#'1"X50m368,#!r0Q(*%%4)q
+5+GBXHML9F@FIEk&Y,m6)"2Aj$)C@Pb%5GNBXQ*4Lkq*9mPc0#SSC',(bZYS)*Mm
+p3UT0,Bh*HM()'q*@e%68JHNXQVb86)DKJH`1T)V3iF&p"`(aC%A)G@d2b%3E'4N
+'MmFT)b41f3#RAX9,"&f)8N@6&TU+,)TS[2d"rmXa"aINa)QGL4GT1LIML42da)R
+l)N6pi"a)RSa)RmiN6RU+,c%L264)c*(a++*6ae0H*dmL*mFLV5G,Lr,bImjZH)+
+lIcFMkf3pc+BFb(@@1Jl,RG0$aGjf@"aIL8-EY)IQ3`mAKi%1Q`2dBm1&$Mm,#kc
+i)FEJNQF,lZ&k(QI2aq*lm1&3pMc2pD[p[-A2UrCK`2*iA`D[dI6lA!qr$fA5if,
+pcXI,r($lq"YYjLEEHD[dqdmD(Y[*`[iifmi1&prLlcKF$HBf0$mcm@&ZX,eISHV
+MIdmMJEU'(dp,e[NHVJHVKBfQKmci2*KpAeGeaHTiQ2`Z&p,!SFAhI8a1&em2Zid
+1*3fq0rVpANm6!`[Dff"e[NHTfa6raF,mI5irLi@0L81fq#'(c1fKa`9k2jZ"df0
+9IE`[*i1&$ff,lr$mRe0j`ZBKq$bG0LI`p[9m6!k6fYYa!rqN&@,MqT[09K3lcH3
+`i!(qCM`iJ$p*kQ0LFASqXq6eZ*lrfm#KJ#8a[("I(qa$VI9KmQCkX2&krfYYj2+
+GCmcK3q5$(mJG`U'QKi3`Ar&LFi@Q5(araBP$i-6Ej[mICBf*p,Xd98)I9p[#aSH
+[KhP$Vr8bQ"3rb#Rp-I#hF12kRUJ0d[#+qr*i@*MqM[1b*9Df(j['i@!#Rpp4kQ&
+rcJG*erc1(dZVarEaZ[S#dhIU#Ki)b(#lhKBm0p3prEIMKlAeBBIE"cbIai&$#Ki
+@"LHVk2+pP$UiIIKiZ"M3L*arj81[iAUG2ffmkcQF!D2(`Ne[Uqf8`rZ6*r(kq''
+qdhC[Y&3mErrV[9rVqVPHKa2*KaYjMGUNj$$iRJqTKGR`Y0eqPe'0`pAM3pU1j$J
+GQ2[l0$KEcLrh#[QIkEEbFE!l83SAqVj1lKiA%iA[qCpr1AAh-+K$LDhMBAmN[XI
+rfKj2q2lqCjRUH0[-$TGjLDdjeaU2p`i@0qk'(YHXp$j-2'lA'mMe1[a29&YeRUi
+@mkrTI9`X$#rKjIm[6rPJH$MI`SBQYrT[28qEaLJ+(%`Z`rTTZYi(A3rPSFp#2P$
+MGYrr3`-6l%12lr!qc3Kqq)IGpCmcq8-*6G$Zq(f[UlV6G2i[MBRYp*!!rla1[pr
+`FIH3!2&SF(i0he[a2bF1'KKGIq@c`L)XIc-AHB@0rm-E`r4KKp6pr2mIr6qAMrM
+9*N-1*r,#hR[q2jH&im1*CqTlH*KH+#QUiR&r0[2elH(KF(p'ra1&LF+(MBRCi(D
+m(E`i@mr3-P`qYmMff-*jK6Mdr$lAKBQQKi12`ZYi@lda&@YKkAiq,p@(dqfkA#k
+[YYjK$)qrrIeI9pZKZphMIhi81"d[@q5(K*c#hH"aX$TI9Kp6HBq"lq*em2Y#Dr2
+l1*`[QhR#Kp2#KaIrrq3rdKKi(UH6p,YI(arI`X,bD%1mkhb2krKq0SZ&$K%KH(Z
+q[kc#iN1*[1[mRKBqhKKk@akqcrKiHVKiTH6l2YYjlqmK`[Ip[eH&M80h$lI@Ljp
+6VI)j,4IADZIkB(5rdaZ"K&EHmaXIaSI)mIeG"prjf!22[1*GBfQhC'A"fhrd)lf
+"l@0`LM[k'"f[#p['iADqVMH0KIMfrTkE(m88[#`1$j2XqVqhmHVf@hrIjN-1hhA
+Sqc`Z!9@E[GDAdiF$YI,ihMBN1Q`X,'iHEa2hiJKHXhH"3mRLpYJGVlqkpAbBGE`
+[*a1YKa1ci@0i2!p[`G&3hN1*MBRNH0qlTI*mE'`+(f1&$aFEKFA3Bqm+[IErTif
+hKlATq&kH"crr+(k-ceH6frUrCm(fc"jJGVMEca4Qq,k[&mR%a2bBd25pCj(@rmq
+2SrLIrqCrBTG`X5(T1&mhmH*er6Q&(TiBIkrrqRVAL4hHf`2DhILED("rEqDVhN2
+%l2e1Y9N[UFBT9`Z$JG,$VIjH2p$JrNp[JH4r,qhSBq&ZV2K3if1U'F6TI8i9$c)
+F,6Br&cR&dd1h%jLGRi[L`i(d0eLE[mId)GhUiHGr(MmEljLH+S-EHESD(Y[9iTN
+Ka1&rlkP$dqXkrV1*[+'*q8XF%RTU'*MFTM&V(DkE(mHKKHR$YXE!KiANr3fflKm
+IGB'"lq0$Mid10r,bGeJIZDd1*3k6eF,c28hI$eF*IKjrbBGYqrKHR`GEMm$0LZf
+m1hiILiAp1Pa-E&KhH!9!DhKm6e-I'`0ALqSC(rEklEQ&2'-5Z&`m6JiAXUcrH+q
+#Ar29a1[`Yh`XE%i@0QX+KYqK`Z"3a-6T[6,iqmapi4D8hPpce4+iA&`[EKl3`)p
+E`Z&$lrNp*L3i#cAiR&aZ*LIP+46)Alr#`1ehRjF,HFE%kiH6Vb,-Imr*$f8-DKd
+qQiQ-9rIPpr#S(heH6`2*aZ(Mm,'mQKfd2Aj[HEIb&J#KhR#rTJEcdiFI#-2@0[2
+9`U(EEIV[6mMJ``qr`LY('rjTGiEc[&aZbSBRZi(UGVqhe1$$JEcTH(`r8aq,$er
+[r`hQkKmRqR!i3f*S0eX2Mia8d11RR`YjJGVk[Yiic*,cc28hKQcphHBd2QEEKB(
+[`mE(m[HBhqYAlH0JG#DVXEmI&iSmr#a)I)m%T&202KF*E5q&JBR5d1#)Fb!+P%[
+'DZ(YH%6DK-!"G$rScPF,E'(Z(JF8Y'kA`ILB(BI%54r$aI(pZ(jJNHUqq(A%p6f
+X!Yd6h82kHTK#3hISPp4MkF'(eF,#GT(KL4`YY$eq%e'pTYk!rhNkhp%1m`[&p5(
+rmFU(e2)h@keH"$Lm$q'&KFETD#CVmkbfBr#hDcHHVaJXa2E-#'0Zk(&*-8$3Za[
+mIq[`809`$0EYbpIU#9Qmkq(8Hb$AAId`0@%AZkEj--2qZfhDN!!qb2@@(3l[LiR
+%iDNGj2Ym-U``[-Kp3dG!K[2IpRKiRJE`TSkAHFEkf2kTA9L&@Z2$p&U0K%EJBIE
+B`bRUY4THU+*0hlm0"P$q*VI9hR'i82Di'0jC@[eqYhISp,J%&d2Hqclj6jM(S`,
+kACiADlU(i)I,ie!r1MVrE9"@m-,$0ZVhiFE!mNH")he2IiX2mLL%SjlD(YF,LGS
+8IQ5lrAa"CHhLF3NrJHrlI%`Y@88pPlf0Ml[`2ZY4KGE$L'&RJlU(%-H4FDPiCaG
+jMm,YBICrY$MGVl[[H+R2jL(LeQ*K3ifhKeC52erNr3KeHV+H00mRKF2rrLD[b8m
+jEH-dTbB%1"j#QU9'HTlr%'Did0R`X6N!3`)GY`["qRdS&I"Mm,ENId"UZ[a-6M3
+pG`-Iq4VaSF,G80[f[`HU6M`1P@R,(@!IK&Lh#a2)kd#m,Vr8mA#a-,Kim0$&+lB
+GjMq,S1ZUMH))[SE`[jB@&$pc(ap"[28mIJq5(R#`Z*`Z(kZ2K*SrjB#Le2,K$9i
+@2JET1hkQVpV'amBR[`S8dI$`15`28h2!hQ&aSH&l*I`aSD&$i0jJHa`bHAYlXdr
+3lc9`r0pq(GTp"!L5%-CDZ&$`H$K8$&[M`fI5B'&`m)YSq"A(c2TG*3i3NSGjr!'
+cP@(Qi@2em0efKbREV!kdf(B("Ki'0['-q9[,N46YPLf&KGY`[8(ihRSmA%K`mEK
+%BCa5)qPS#%E$Y5MkciIZKQFJM18VfH!XM(Dm6H#Nfh#fq)E*8MQBq8aP!SPaq*L
+HCj!!C6rIi'!AFUmSbY,phjHfKhR[M+BAPkhJ((G$JGYll%Ti0![1ih$iQ)C66UT
+HfGA-,pDcL0A+$kT[RpRT2ZjVKH6MihN3pVm6(m'(fBG-T0q6@qC[00LE[dBF6Jd
+1ep6EPD[NH,3($K`[GKl2bBH`bj3BF'IJFBaR#1iV0JkTQrE$`q&l[k2`j,SIbpI
+MBRArirPr$LQ@hk'&JG$Gqc`2RrXSHRLBSKI*pRYYejJcAk[8p6Vm,(ak(%0e'2i
+',CpPT1*f(e6U0pH@4Tma5ir+&0(Jrjr$4rflcj2*jA#r,pHCpd%HMhQYk#LUGjL
+HTlrQEVdD'&Urh'5!`iHVe[h5[re24KkAMBf*LDECF6aGAR2lrM`-C9"K$[$'#YU
+VJqVaGj3Kpli1,MH4rIdIGaXIdrlir%9Qf0UqXkH%S(dhYH,aH,dIEF('eF26irQ
+HA$ZML#apeMFE(fqm020$Em8e(QCl(hQhp2hF6YBIEpVYGjmfJUf2[iaf31e`-,G
+fI%aZ%BFpAj2QB(6mA!SF,(`-6EIEaSIXqhMI-ff0MlcK`q,`U(TlcfZ&aH,kITr
+&L4+V5a*X5*TG%Gfq0%lI5a1h!pH92NYTpD2QBZATr'feiGjUh!5SYrX5,5Y1m,Z
+me%LkAihi-KCi-6BqE6AYMVIlkA5r0iR%pE8dAqZ*l2cEEqqPiRJG+K(qr%iRcIQ
+khj[c3,[r3qebh5DA5kAID[9k[MZ1ilei,#"RYMj$cEH**L4-r4JERpa%Y!*p*"@
+iRa*%hm8hcFRSFKUFP4lL6%NkQ*Rpc8dF62cBRiUEFD+,d@FL66a25HMb(RC$*C2
+*a02N024C$Ckl)DQfb'Tb14YkJmaH3e1RMcI5p+*fi0G&fqKb"rh,6G&CDH,0M4i
+-KUHhqG0p+)ImJjX(04(R4jZ3!2daG2N++#HKcZ@MQDk,0b+2QU1"$XI-DQLJLe-
+HEfp[k85*fp[R!ilHiNme%jfMl28j#jNSEN$%M&a(3hcI4DM8C4Jj0Z)QR"fMe13
+fF60b*#5FHUSmaUIFjU#*"c9(*b'cp)rjBe0*%MkRd[5Z*0[&k,6kl+4jdRSS-c4
+h-&(*M8LpRGl)0G6dF3(SX%@*2fF@9(M9N5Epq4d@TmkQQJ(jdMF40$NmR4cU1*!
+!4*r@H&&h(eC'Tml*E2Yr@qIAA0A""p1MfD2mj,e8&M*NfXhV)m6m0,q'bP5[ep,
+q(6bmK""1qr,kDpqR8rTr&CI(UlckFZfm,V0$Br6eqEc(HcXrHHK8hYIE91qJcr4
+IXTB0$khci2R`)%qI"+rC8j!!hqrj2IEr8P39cHbI,hpG[kj!L")*(S50r1UGpH3
+3ER"qRq,Ff%'ITYrqMd,lZ[2dGcHepjmqTmckG((SUQphh3AN%Q4He1rh2iVEIj@
+QmkafX&G[Gr,mh[kqjqMd(dHJfISE6Fcjel9aHkJr6"R,#RZlEFqK"VXrFprFee&
+c8&983G&E5VR[I1J[*d&&NqDhph*mZA,e96HAZ9r$&hqrp#Zh[RA(dGpA`AY&qRI
+C(k-(hC0Yp'pq0dF&VRr$l+#AFD(0fejIhr3GTj%%&9mcCI8qhU04rIR8pPARS1D
+h-UK433@&M"IAl!8"CAl+jipqUqC1T2aA[iVe!L"0V@$iFM!am)1drA8hh3ErIrX
+hrhCHphm(RmeHc((VYS*24DLThpjlpj[mYSUEcXhThEfGljrkYlZ"l1hbpc*Ph[K
+3Fl*rcHIfYTHBY[dA2[cG(Ff'HPh09NB-j9BGcQkqfJk,24DrpQKNrEJkZTdRL4I
+dEUZk$-9HrRHK"Hj%HMZURXj0cp'pkf9"c9GeI,A0C"c9aT-YFk65@eYU*P6mV,j
+L#jbarCIr[RE[SjeG1PELaJJUl#$QVZ#iXE##r[Q!S#`35lRUUZfjqTlbTla!P6H
+@[1f9AmUjkVBX"@K9Y94!UfZeJJZ1VcA)CAR14JZ2Q9d`%I[l@qcfSe&IHeHUeN(
+T@r@9GcA6V+6"4C!!YUQmVFV9fh9G&e9APVDeUEcBeA-GC"eP6HCZZRH&"F4Cd'B
+YUZjPpREFrPDQ$Rl'4qASi*Fl[0(HCl1EfmUS1BPfe9N,Q9UX[STABhm(4Fa"Qi+
+[4pj"e9C8FeRZYLklADl8!(U!&UG*T,fiPkQ,*bfjjq6+h0hSFM"XCF'jUjhlrjG
+4EIfR9RXGY,Um[f2BpMFkHaUGC+l(MZSP3GRBFPDpcRUZjjf$DE1##qJZi01IG0H
+AGE,B#J,!-"1e!491M[1Gcc!@TYTAH@e6b-lQYF`&D&6Xh%JX4!!*eI0GM1lh3c,
+#`93GpVVk9dHBRHG9c[PA'BPI[fP&e8ZG,LbEkYb'cZEbTYXj-RDLAXp3+UhZGG9
+9GcZHIUEE3ed'eJZpTJ`B*qflRHBPjLjcQRJRG9952VpY9`E@Te9YcYIQi,`N0+e
+1FJcPVXE@Tc%'FMhP61VDZfr,E91AbdVXFVfprGhGhT`$di#e2BpL3c0h'$A`@3i
+H4h09B5ZLR5jh"J[jFlDrbl2[00Bh%Vi99B5k[-D(3kHi82`D+bYELlc(5eeGT2"
+PmMhPjSEl0`E624@a&SDU9FjZAPVEA-"Fh,RAm(1ZSPZHGcM!@TYS2bh-UAFf@aB
+#Y#S1GbN@$Fbi),qZUqcjVQUhU,BL'rX,#VlD$0kI6`CbVRDkedpYYGT4DHZb@8J
+LeZ3[*8kr)4JUlReD1j[XV9cULAPVbibXUmjfVZGVA&GQZbN%b9HDL$2Fq@ke(T9
+0YUIUDHTRE@VbqEUlQ9EAm"5jR)mk9FkkbUjdV8jk#iJ,6mj"CA%'LYGhk6kLA93
++*+f!6fCTB,Q$CcpG"E1iLU1EY[!Ji-Zle'K$!L+SJ)LZ0Ge9jIIIjqrZrTjkrcN
+&YA&+VN4N!k'Vl'je$!A3eGcI`DKb)p*1jhQQ!T%I[6S048eGcDX"@!Y6dAZ@+Vd
+Jh+L2-eZScerBYU*e#U*QPIYhDk'`VSR4`C+,*PEMRi,@aJjd-04-0)Q#6Teej"Z
+5Z66USEA9HT+Kb,B2)YYGcXUE+e8h[DUl)K[l[PVE83CZYXB+UTR-L,8@8Z#9UED
+#ZcPAFmdB(ED9HEKpe#XL$0U)*qjU,'$F%3CZaJZElq@BdIcE'ScGEIf&ph0Af1X
+Uma1[p$GcT969eFZVqAB9hBq",Pk1mE$mjN1`C[QUUVRD(6e2CX"CfKQ&r(A9GcU
++QfjfeUG*!`&jf#TJ,3G3J4J0@j5,H@BIj@$-CJKV6eYij$A1[U'VD6Y)*UKU!KN
+3GM4UAcBCbY6EDjN-e24%-P#%'(FN-a-c4C-bF9YG+,%la3[N06c4@KUM!Tc8@91
+e!aF(93C[+bAe#Gc"VUA+5VQ![,(p)EbaLDkC8h0r@@&KTqUcGrIpMFrRXDkA9pM
+feAfC#AEUKB@9hmpb%rY3Df![+`%ZCc)9Z+fiee6mUGcV!AA90YJ`E9e24b%l8RT
+I&TeAFS%3*"XrFcFU$3h-UrU02e1@RGl1[+elK861(8fh00KD9&h'jJJUEDl%&Xp
+4P3'U*I`L4qj,[PH1RFkAMKC9%(K5m[E@NHANHLJPA0pHAh,@hKFr1e@MYVqUb'T
+Ymj!!D-fd)#JQ##je'9P@hJ[lK@Fb&C8UfQ%+PS$U&HcZEcFlFK@je#[$8V,jHSP
+bqm[Zc[l[a1G[+brJVXKH9-'Zc0AFQCI2AGEDl@TqC"cV!ADMrM6XK1fUEC!!)#@
+eIN)k'#Td8(b(*c98UmCKNPIG@'509cTPhcY61[SPYPFPNUPj#1UlfEU-m@E0K,"
+jfAm4Njj@c*cl@VZ69TVZGJjh`S[Ek@+F#1HJej!!RPXXp`RXlq#VR'T43TShlK5
+jUr0`E4@pbUP3RPE(89X&c,Pk(3hRHD(89Z9VX%+k[@3AQRp*e1MlfNY[Ij(i@H[
+Y$U,DSJJb&Y",bd'SU$6ppf$qdk9H5Va!NUmJ0cTY[cUfUSJfXap@p8p(1JXT9p8
+AIFDU9mU#fpLmJ[$)i8!5i1DPj5qjfTbeYlQ3!,R2C2*6FV5P+qS16iHrD!*YEDb
+VV'SPAK5'1j-VS-p5eN'jJedrDee6E98AYqbTi,cQT9YAD'ZUG&Dk(RE'9UHDSmK
+FeYP"kA4AK4@-6QP#1Nk@aT!!e)b`$PJ,!ClXrIe9,8aKkif#Ee-6Dj@adpE"E-K
+,`-ef@ZUUfZh*#H$U,ZYUq8G6RPD5jrab0EQll3p9"m+##1mK1mXFj"RS-mJ3"$*
+l"VQ6SG6@R5i-&j2-RVZ0aGbB1CJeNX[VAGCBml!Ap)0bBZ,Z`JlI'UEDecGM%cP
+6d8LErdf%V#$+QQ+ZN!!#9XU$DhmiREFl5#$"fQih-l+c'3M+[$q+Gr@e-lRCPGS
+6'"SHGQ%(b&"pE9'Rk9DXK(f0$9cYcQp4ZI@+fEkl!1l!8bDeF(@b[!TB$9-CYTC
+aH55&0FlK63[mK1CQpGRY2@kLqr0fQE)8k"3T1-A(1P'PMR-'9i-'HB#i-UmRC9q
+6TRhF`DFXBD$3@0,)Jp+#83,F%jpmp`Y!bFplQmp%cPAd8M8[F,A*#ecAC9rF,C+
+$Djk#6ND8R+Bd0T+R&TH$c4h+lR+f@E)8cCIU+'l&N!#HZIe#Ip,[Ra9%jXT"VS2
+#Jb8'jrc119@lf(Br5VIlFM1YVca6Jfq)q@mkr[2Q924r%VGGr$kqUYULmV[0jf!
+1p4C90Y1cf$8B0Y+h-VFS%PEQGc$p`LqTcHYZ,k`Tf3Mp'jcGhAh2pVC@mc-&3PB
+hEN*ml%cN[8dHTf[Z1S5j%Sm3,m0b%pVU+k+@pdY,2,H@3P"*e0j@eF(1c*-A3R3
+r1qMH9*!!R8Ha8h0Yc@3JjfTJZjFb$qecTc+mrU&2rH4cfd-A#R1+PbFmV0Z3!+b
+hp`Vh1@Y[#qI@f'aq2RU@+p6Nm#9m5Yh-VG3F``&)8Z4Vf`T8DLS3)b&0rEG"qPJ
++`&)AJp,"PQ$kVj1mH3[!S@VGFj!!Yi4#dfMk,DqjJQqEFl6Fkj8IS&)9+h+jbG%
+(jB0cZCFdYphpjB3C%Zph0aBml-Jd-qTl1j[lLVrCfpc*d-UCDkHUUCYP8h0UlKQ
+mIU'DQGl@RqphaC-fGqdf,NlZ@['hJE8[!f'jf5KVN5'[iEpH)$k2S5YpPDXlhqe
+k$,E2F5AUGQjXX&h1SKMRhj!!a)Q3!$h#S#c+@RJfN!"GmkCpYbm`UV,0+lkGGlq
+qd06+k@*R+k*e@5QC46XVU@Ab4TC3,m4X,&ie3Y&bYPPHBC1[2rXJrK"'Jcd`G5'
+$3fPYSG4BeF(dHqSS)pc8eCf"TYNFZV)9hmk,PAjPP0M[fp$RYFCX91k#4FNl+fl
+1apIqfYdlr%Z9FfejidZAPCI+5VDld1CYEMA5l!i#lq@GbD$6bYRZ*NHjJ@mfThl
+QCPB1BJjK!N(-F[E%@'pYVTH@PjC!NZEGlQT1PG!L")*Zc[*F@AICXSLfZK[Xj@k
+'CIq`[*hBQ,k`PI+RI`YYcU+ZTeX6QT-Il,)5`CFlDAqem)R3`&J+"jI)cXT"JjA
+S$QecfHJfQe&eIf8QFEl`MU[NSpcTp2PC2Eh0K(R33APA*8'l@APB"fF[Fj@Y0@P
+K!3P""GhHEUG9pHKcZSPE-k#CX&(Fe%9lJUiZmiCAMGdh1Z[Xh,UG9PkZA1ZlkTZ
+6[(bVBeXFa&PERh$8ZEbDQrmZ$hAHk"+r+F"T%LQr+PcV*J,VT&cZAQl'!Nh24-h
+"fjRLkH`P`92E5VRkpcMf*c8f-&rHDFj,YGBC[+eGcFD(eSmkCP)reXPm50JQYRA
+9dfrfZd)3!5$,4lDVl4h"mV[,bZb4QGXCC#&6R*e6Fim'RfQRUq4REQMbFHF2VZD
+Z6DeFlRDk$Bj@#iZmcSB0cXbP@q19bqJPbkQjd1Ejeb%#2C295SYLp3Me2)UEIUb
+b%VYe#8$h#8Q$RjP'RiC0cRi2HHS4jqVG`Mb-l-X"9#-l2&NE!9S9CC!!h'TjfA"
+RAF,9*#h%IF,9YA1C#dR)52L3!'CC1AkFADj+GA5A)6l#6Jc)0`,Ikj!!LG[KX)e
+9c9D'aJdrEhE)4LFe"r#X2D[M`0K#SUlj3MI[F)R-Vc[1rQk1fcdCX*3Fkj!!PZ@
+`PrR1+FPKIpb@h@#YZjUiZpVY6VhhHE2!lqQ#mjfBHpij1'mQG5p3KRRmK$XmVQA
+b$Xp838X'SMh2)cVZV[XmXE@S[Y$@k'aHVG6X-I`dGjGhHK[adGaN*%k8FLCF&Ne
+"ZebA*35V#HDb'6NLR%6cm'dqqG8kremQer$FeLK$6`AcU%I[CNcCakQGPlDqPM'
+@2rPG+c&bqS5RFlSIMmle8VCjae#8Q#rll,@eMBf,1pT1eKYBIkXE#lfZj[LFNVX
+Fa,X,kqXG$GqamU9dFl[H8JVkZfpbmIj12Q+[4lrFX`IcXjVT@XB#cGME`CkbPGi
+`&D&@%@6TkM6eFl8AeD3P9pY9Ni[!bZEcf9XB19)5JjflX+V0bl[rZTeZELFe+fF
+q4b!dj#GAqQ#iE1A`S,,q%HfUG%pcQYS0c1)9LFqHhaUY(JeHAR3-KE)dF"k#UUI
+1UDl,CISl#!C$ell`ZDe&fq3[,RCl8-KI3U&raEk#ZmqmL`GlPh8-D+Udr1e9jIb
+kk"6RcR0G@69pl@FVRV[0kM+kIDqGAElUTP)p6Tjphe0qBXYcU1Jp"bG1rRCrcQ!
+XMXpq$8VmV!9S9B4HBN5L&6E)qkClp4IDM2CZU[rbr,d$EH$YehfMZIjmTGkMf0R
+(RFl(LDj8HP[23EQThmR`[aAZ5j'G!3V+edR"Vr3LrL[+rkpYAC+mJU#hZ*1kQmr
+Y"QDUc2NU*iDl+bEISVL$Bc+U#IFeF[,e24hXXC!!RCINGC1Hi8VR8+G8kK6HhN@
+9T-[Ff191*$5@e6Q+V1(*X9"edc0p6fI)`3IQl5ajflphj@@lfGq+flV[VPGdPN+
+G8He@lj!!+mPh-a$&G"d"kV'!Z5j(28T!1abC!1K@XQ`X0M,cHEUXjl(jIPma@`G
+jHDkq`FhI3IAq*A9GAb[1a,LVe2KC54a`K6Ur5VfZJ2@CXB-(dY4"re"lQjNl2Q+
+qfVqMYT0I"lX(`V#6&QI6XFr"C9@jZkM+`AHecdP65b(D9fpM3GAmb$8Ge"i@[)R
+kRNHdPG&cXaBTVq!"VkqfXV[D(2kMBe24G8CXi0r1fXld1BNi0KQp$U)-(FlRAI6
+jfqUCamjai+9!09R1DZ,k"bf@Yd0ph9jp(bRU!DM+p8lk%ZIQ1i#d1eUHdB#j)i+
+Gc"Y**leqEV1DZkf#qZIiD5mdR+rPqAZEbYcd[P),D#iPeI)jESU1$Bj+E)5@bX'
+dhm&r*jq#+-MfqSTGV-T6hTFKZHGJrX2kG&,(qm5CRc+!HMUmPRD-LCbMJYYG"SH
+4mk9UHVVS04G`H&RS,kie@VZri2TrB-pV[Hlh@A21al`l6pIjeG89rjGcP)-hR,Q
+m`I1r6j9VECbVUFYFp(@e9CDq*1e@AUXhC98(05S-j"qb!IEiBlV-%1MIj6`HEjJ
+,A12Y6bk[9IQlcSqdcH9dYp1lqVVq2mkm`Hm[IUFXH`cHIAik64`Dk40Sh(clU9E
+5G4"&kT2R52(cjhUM[p'!iI,lm`q*VjeNI*DRbk,)DQT[02"Tq3k#j2a320XRbUV
+M9jbfcFHS[lqBE$F%pNU#9jAa'8fmqUEB*hhMG'bN(39R8liHriTHVkZTbriChBe
+fL[lc4pMQ1TiqaPmeQi$cAI9JqFEbUZ,EC4j,e62!9U+#GU$L"0Ti@HTC9lqb#PV
+HdlVk[k23qMdhRI,Vi21ml[Dh2bqpcd[p0CR+VNHDLjbiVT'TMA!ERLaTMl`pG"&
+je2E42MfdGbRYJNh(PkLCiN&Am[Q,[6Zh`'*em(kDQG+ZbQ+#Zbej,bml5e2QfXh
+SZQr6[pC53F`8YpT1jh)ENTEJU+kbJJbN&PprUppHAKfEEQ$lpAHI(P35VkmJd0K
+BblNh8V@b[DkfYDLAH@9C"c#iK953!-TKYXbmI$RAkI!jUpcRmrH9e0qaMipeAAZ
+Zm+AEI2Pr,U2[hRHeT`!rPm+AqRUV'9HeHANe24`8Br#1#QE`Pek**P*PRG%Br%H
+mBr%LFaq,EFDl861UNjk#led5V6mD28`G40JR@&P999ZXYKaQ`3IIU2%P4lQrSU,
+Ip0[Zh[#Q,iqSfY@IIDbQ,Db4ppIE91TL4$iYf8I5UZfUlC!!)J6D[YcYV&cf8MH
+&Nk5NLl1RSjXARlJiUT4Y%MCq%Qcf*46!EX*4A'DfF&5eY**l%%(`T9c)2Ddpkmb
+"F6"U-jGlARFj&UmK',)qMLQV1!d@5-h6f-QrJTeF!85p,U)1ULR2rYC-bXbKe`G
+2%bP(SeqDV'BPfePcT9Me5"$XlmGU)0c-"U2dAZ@@Z1S[QkHRT*%5fqHZhc8kjM6
+kii%T8'Sm+BDYj1$c%'jYpG"D`(962!FGRQjc(Bf`-(FVY[lCEFH&"U-VSlc)@eK
+",l(TkkTdNf#dM3(hSfjlQbmL-R3dPEBdKUH0[H$RpVqEjUXq'AN'B+S)3rYFeFf
+RLc,+VHfb1XUlP$Fkl-A*mLX`TRk,h,AB['cjq9ZB1a-&TVYDfGAFc*-'$P$k+DZ
+3!&kTaXDYaX6YN!"r"AF'jcPEDmMTX1ckH`UHcQ`6id&rQHmZC9K"GcYVJPEp1qf
+cdfZ[kTVCi-VFf3fRef0T+JrMhPi8iXa@`I6U6rjPp1$kD"$KCl"b8q8'eUp6N!#
+fPG&khVE2Yk+89AjDm-,VTY+NE6FJ(!qQdAY)&miQp""dm&(4cVQ#TZ6J8kUq[Y$
+Ea)1AR9Y4R$Y2kq#q&,cX&)q0PPHGrQHHCaXEbeJ2N!!KXCSf2m2bhK@+rMBeETX
+D90Md6TXCpXGdL9+h*e41IVMeM10R"+6D6'6D)3cam"pC"GRaf%U5mN6EcJfG3Ia
+2j5CBkj0V%LbY2+YMMX[TF&pBP9P4N!$5DQm[2@1Upka6c8fhj[PE'$dh'e2!!I8
+`@%PY@CLe%5SLbB$iQllI['qefLUjfEJqpE9c!A0QE(4FklF'*%L9I46hTa#@2-,
+le,c`UJq8m[Bh+p*X'$I&"q9R@MlFA9AJi[JNZkRiJieN-2bPcJkl3hepTiQRLQr
+c8Fd5lZ$rlGZ6m&ZGd-@5lFLC"e@$qE58L`(5EXG9iimR,`3DRdV+$8`3C1+IP""
+C'S-VmECMadXBlq&iI5f`&[UPdjZHUG&'Lmr%Ge!'8`Lfm2ijVdq$IFdI9%I5TA,
+bj`2ENq'UJaii1G,UYV"JqYc@FJU1hj5GJl%pKb*Tk+!r5XS22lK`AiTSqNZDR8h
+YJmU(`D[FrPV4bM2h&AhD'@mrF9,L`9N&6(iqaXKa0$B92(399P"*R(#jQB+XqTS
+P+1VZ@ZZ[$5kqULTP@alVc,j%`LF",!pTDE1Umj!!91cLD'$3dP*N1Lp+X&JMGV`
+&AH$9cXUF2d'j1jBGV'dfXU$"cam8PYU-h!I-M,R&9P@[JhPERiGM(e9bICEq5$"
+mSqM16NZL,`pa8e9`I!'U#+ZEU01FMf3dGYH5VDm[!&XE'C!!E'9XpV"IQ9HC*,*
+&rX*RNmj`4FBhEZDSe++V[2qcqNZ$1JMCE`Dl93@lMdcY35YE@Gk9j-VB-&J+6mX
+LJ)r"P8J,qa!#AeAFfj@Vp1#8mHbbZ3jJ`DcQ#G$IIh`D[NMepeGcPCC5jA*lPre
+!IS[9kUfQ-HiN#G)*D,'h1id1KV)*hdCdbae&4GbDFE'iP`@[4QeM8`AQ9UEQh6h
+36FhQkfUcGE@J+Z6-rFRYB1)bVJiQMErG2Ic8(KA"r-,kYV9aD[UUUT[1bJNfA2e
+'FNeF(eer8@b)FFT9Nhjh2pb`&[mV"C(b'2Tka+Tkr`Q#1Tk)q#MXERdYRm)Hreb
+c3Y3REPIh[0Q*qUHlfTrC8q#$6bjdlDf95HfLj5jRS2c3DkiPcL[TA6VIDh1icQR
+dI*Eq$m8kC9k1VJMrb+X6lEZEZB+L$0bVB4+I'#VcQ3dGjhRH&,rHGjEFVBSrb44
+hZ6!$JR9r1'Ql,bRCb#j6DfYE"Qj(HlQA&ZHUe'UYZI`Cej,b&6i0CH`@'6UjfNZ
+9mjA1ZkBUFr`MQl&J+HF*05q@'Pr'V(fb9XI[JVZX9-QSNl23p&QmR5kXT%YM&k@
+,Dk$R96-Ii@h1SX+iIL`JRAGP+HRiPIAR*q&Rf2KaJbXRj9EFIL[Ebp*apR")ZkN
+m-8(0cS*dUfjSk,+Z2fF@$RFKpI[0(pI[,EmZMq[f0cHE8ULfY6ScFM,%,N449RH
+D(YlZA5l@bcG*)lbfZI5[VZTmMX0$BFlJbVDVQfA1PLmQle'FjfUArH(2e6P-pK"
+d96Fe0bJ5T+1Aj6,qq#VbH5jdrkmUqL(VkU6XqG+BVQS2rd*H$-@dZF[mbhq#I`G
+h1KJea@I+ZAakV,UY$,c%iii0c!G3``VAmAfkrclRI`9fKjL$QT2rT,5aJj`rGpU
+Ebi[XVB3@qKlFiQmKpIkqUdRelRmZUdQAYVBrEq8ZGeG&%XbZT+ZG9cVqAFf%Umc
+IT(m(Ec88Y(98Flh0Tjr)bjhhVQq-KQ3JcNA+b-acA0h0AEH&9rQ[1BjL$1&00pT
+l"J+Ik'JqqEkI-3&58i!j@jPP+@3ZHUP3I3qD@%pRE8NI8j[*j#jXZBVY(ZDMlpN
+DNVQVlkj1%lir-%fHUB#R1T!!6eQMUlEUTHUVX[HH&mqZRI6jLXjqAf0j*XS,qPJ
+hrRCZlJlU#mJYZLjU#G"HfY9"p2"PApGPYcJbmKdm5$DlM2G9TmjU02PHDcPamI1
+9FkmUGR"hA*Eicki1d1Q(3eTAjiA2`G&q'C45j[ZA'9N6FrXcPBLP6f3U)ZHSpC9
+kH9[rdbC-hY+,ZXa4Qe6I9E!@`21[EhA6G0hqc2VllkfSKhD@AqbVkVFA&AU)*AQ
+me(SUAq-k94E@dllpRG9q4Vpl'[*0Yl&YD@fEJk#kJcpYq,ZUr[p([pr[qDUD1,D
+I-ZE5jb0C"UGM9p&De05IqfIIJJUSTmN*C6E5lQTJ+pD+LL`3Hjc[!ZkMpphRVZS
+[ZIdj`$jrp0GHr4PdQdfGYD(',1VXM*r$BaHhpD$Cp[cX@qPaHhd13RbZLdqeZj@
+rcpY[kqphr*Er@HKd@E[jAcB'!ZE[rSh1jRmQR&k,SZLqCjdPDkpcq)r+$k9("e-
+k$2j#244je6NGVEXF@6qAIdZqJr&[V!b&h2mTe6jhl+Djr&j9lqRp1IhrRqIRpcD
+@m'4mf0*Z,#dRjb,@&qA25Z6[$iEm'VcGG[p4*k)F$eY$J3B"SUPGE5M+@hiUZVT
+0Td9YDG[El5Gpr*`4++MMk',9a-j%cNI-ARaih4DQd'3d1c2!2N1Lh'KL6ZDU*-f
+hYkbMh&(ZDNlQ"0LjYI[`A06m5$2amN#%R3feGfK+,lm(e*'icdVCb0a%pbI(NEL
+20"XqDHrNkk*%Y2Ua1DL`6EL#*%3h&P46b`&)ND*%JQS*b%R-aiX6)6S06PmM(L5
+9AYUCYTQBr(QmV*LAd@e&6N*ZCLG3VjJ14)R4FlZ$c4AP6ZC8Q*af8fTI*bX5hcQ
+3!*rdi2R`9P&%"i(qLLG&p8f%a,I*6ZDJPEL*d94"q'#$R*dV8Jh%d0(dZ4LE2kN
+(L4"ljqe,IqBLHPXkL$a),Q9(e2TG8)26dIDaUHRNAPA0b"JRX[@mZ$Yll2C'*ke
+4"iGY,LDH44pUC-SmhYmpP+1ULDL1BFXP"d@RTFT%cP2NT%hQKb)r440GN!$Cme-
+N6EI24*m68)6e-6YmhN)2@lI)$#kF%HDL83hN5I(QPL-Q*Nc'KHqEXqDaZHq0e[N
+rp5BeI0cY2UFlAjq2D@QIY*'IQjqkTl5kVlV8h92UE61h@TTmr6mY(Y-r2ZU1hkZ
+4GppFBY0HfP(,ZXr66l1KGlfAVmr6@HGSl21hYTUDqQaDr1bl2IHc6hG0VG6Vml6
+dGRAfNLpRalURYj',UDqMNkr8bie268e(0NlfhM""4ap6AaTmqQY*XqRTU1A65Fr
+64TG[,QfmZ0*Y)dL4D@NQhYj-qK)YjpT)e0""df0(e0#*D@I`BZ,AemH2'N@Ff[P
+ckHEUBmE8fFq0LfPRCipI*NjrcCGR(lI(aCXQe(F(&aF@cS8+DMcp(4aXr&Mdp2L
+d,5cL9mQAEemr&Sl-FX)FI(eq2Gip#[QM14X@KUFlCfHGar0PiY0jZ,Miq,Rif"K
+BZ*Md-HKEfFq4*Qr"D&(Q,Ld+'pZSmL4(cq,Cek-FrU0I+cQGNiXqh%a4fHIe026
+a+&lHT39P$(Tpm0!P*D4iq+(9RChY,GBrQjdFe+@caIe@H,MiYf0RAjh8jr@iZ,X
+BmL2b',UD'Ge1qNIZRLAZlI1l'QakDpaE2&aBp0UDrU,1caDb[kkcXpD2&Mjf4[l
+14[XABj8ErcFlb',4jfc#P!JZ0Elf,VGECfH6SmrAeqGT066h9eff,CqaAbj-I,C
+r@fHGd-M8bF@h[EHRTmrRDqiaFr6b*0[CrSV+qXq*5jr2jh1kQRaDI1bE[Z,16XF
+@[TYEUm@c$D,RlVHChYmrREU[TmreHIMEr[VU6(RcEZYcZITT&ec0eREUceplfFQ
+6(jZ[cZYX25Tp6bXM2bHa[E@RVm@hSlU[alQRQbF@*G5DciP*UCp00TV1kTXl'Ql
+'EG&!8RHh[QhA0p[Aq$*Tmr*ZT%H06lf0h'ITX@6LdfISjG[VjpR,ST%LkPh@[pH
+D+'QPkf5P"*Mk%S)r4)cpIlXQkZTXVj0*G8mf2D50E)ZK0pe0M#SZp6'[I0aHETS
+SRFqe1jh8hHbrGVBfTTpEAdp(LcFQ@*epI6@A`DqRYl1A5#STjGe[ZeerXIjNDqQ
+PdYe*VdUVIj-Z[e1IcpeRIq5GI)eZIYl59mQ4VDHhMfNZ66jf2DGpD4Y6Aaa9DrY
+kEC5IQX9'IVk10RDqQTkHA'Qbj&22MfP$AemfA"G*4dj4pHlhrFm8G2@h8DEAm54
+0N@kQ9qM8qr0f-H-+5kPE+4Lkh&Tl52*Sl1E6#Rh&TD8G[,NHEG-8rEjr8qLa94X
+r68eT(VqiPcjGI4bjqTcXQMYidq5A%5j0e5bC0e6Cr(XpIRmrAddZb&CRD1laC-f
+4U5QQ0CrfY+2BaY6D4bikk1ZT*ZSfYaBpTG4j-HcYj'T-&8HdNbr0ZUDIG8ee6)%
+*9E+DP[4iZGVc""0TLl1IELcYk1465jZ,G8K5hp,#cqIRb,U065mr0&P6kr&NfNJ
+`qkQcMdqbMPp[&PfplG4mY*eVL`Qb#ra)TTXQ-#5"'!ciYf,D2Rl50'MfNh2ajYS
+B0m@#k-8peCjr2aSpR)'YBUj022Tr+(HN8qbZT%Q06A@YPcE@kN6SdQ0GDfkaBiV
+j-Y+lcD10(Rh3))%&(&[Befa6b-rD9mLkJZYE6DQlDRLjkde02GreNbDqIRr!cY0
+V6%P'Tr"Tj%L0)5JjZkNLJXh5KM9PT0NkQPmVbUqdpCpU11e4b4bT'YRA@YMkN8-
+52VBNM8emfrQeqG`GPREU4'MbDIA&M&R,QaY$G6CdG0jCX6P(+-PqT-LrQN)DfIG
+6Bi"Y"NSGl)DSF@IG@NG++cMjqcLCpBZbVb0UC000VrAY-lc&rXFlG546hFQka@+
+9LNaEUkMamX19UFI(crV"QrDJd-PUKZTYe6LEXl@cZM!r)N5FA2bD28cBf[TV61r
+fcYRGhHTRP!CQhQh@Y+QBmDdN6BqY)J!50)bdI&TmA2jrcC)F6BYTGA8DdLqcXTq
+p)iZT'YY0ECdpT)M4,1dMl(@ijNaSE)c!a%SijAIl&2rQcaTpRUEH0*-qNh2c4*0
+8"3!a2mhm%LkZUHkXmA@cmr3aGI([mH$2mbXMQ2'pD6LX@'+PM0DXE2&SBjSGeZ,
+Rk&R3XjY!`A@Gl3f8HceTD8aJiQ23Zml%Tlfp01NQ4)Tk1KMPL&SV(UHdcYTLM!f
+NQE(a8m&e'NhA0im[1dqGpLh[I!cqGTqEcp[3TUqMTjF61peAdG0CricZmaFBBid
+"dIQcC-PM)A9T&`,4aMl1[Zp6RkI1cplXDH[0&Ylk0lHkNZbTkHIHd+(#`XA'Xre
+,FpBcYe&cjY9fP0RG60Rh8mb1Ch8ajFZhaEHrXkDd'CSkCmCRAaVU66aXlrZ6mh8
+dfIVpIRp62TjFf[TpaAdeRrQkTLTLQZSqIb)Lc!B-P4YC,(Qap66bBfGY*&rUC&2
+AjfM'@SI!EQG2RCHTDbImlH3E6H,[X@,Rr+e2GdiJTYIh"T1Tk,8cDHd[l1@-CRl
+5DlBZEGAFE@cDFfT2QQd6GmcRE5EDGrrQkPLkSc"cUGE)RqDEf,*YB&-eKpGRmrU
+a*'5UkTl2M8i[p668plGA90*BZiZIc[pG6AppD8,5M&cMaU21fPqBHcF#ZXI&q6D
+@M&i68ZU%E&Qh8HdTmlRFr0Y2dCd8TI3Nkf60b+S+XaBbic9PX,V2kh1epdPPAfC
+`m8pH,r[KCb-lG6F@ceXE&f0ekfI[IkkR1pr3S&+8I1ep((cp#[aCmDcZVXhl,VC
+@PeD5$@*G'1J3@IZV5d[Cmf2(NbE1I0S4i[#RdHa&A[mA2h@YcZIcZTe0lRmkElp
+I6hHGlqlNCpUQZYMGC(2qaUF(([BmKE"-r`X@E'ZVde"A@#l6jB1*rf060N'1,&X
+jYS*h8db6[kbb!f`-rUErHjr2l,HkN[kfQ,0NDf1@eT0@RXaVI#Tp64kf4)cZGN@
+G2@6BdDk`DDAChAr'*kJAQBdM6GYAa[T@ZIMHc0-Ha4FR5Lm+3P$k41(2b5i1kcm
+hkAZqcRmri'qM,#diT"4qc(TlHhMHrAR&A*Njh1bE1RaH3NZe2la#q++R2alUMNl
+,@fGIp,2arC0q54'QQSX8el*5Rak'IclLIMdph0-9jTQN%UXMRm$k8HRM@mf2AdG
+'95kQE4eq,S6QGMhA`4j&R3ZK3,5"*Vqecm[!S6imRk9(RmM'5Em(Ac40@HIjRYF
+,!cq$GHCk0q*ZhZXA&N'E**L4'Yk@hV*&I4kQRY,HkY056halhBbE68adRE4*k0R
+blr@QkE(1X[(&*Rm#cQb*2D&iS2BSLS[Jl)V!He2Jb,ZdMBZ,*eXLEGHMJbBpT+Y
+13NjfQVjZIY06LdqTeXQdcmI'N5E0CNmqAFNY#R14RFA%XmrGG[Rm$((4Qjmd9@N
+U,*NAmA`I!Y$,9Ci[`B@"`Vrp(Sr5-BNBe'cDIBQrk*bIR41cMBpRj*f!Sq0D#F5
+EMfE0[1d0$qGcqIm`f9@QI0k%fp@*R"%YLkr@hZIXrBXmAKHl2cqIMiX5ERkHk0h
+59b%h1QZr,DQ[aY6RkqID(C)-jpSN[)0rQ4CacA`*IYmrGAHIRkQdNamM)Y)%PHh
+Xl5E3MA@I58pLERmrGb,UED@PeVcXNcZEY05*AN)fTcZ0Rbjq[r3NT%0VhCL6BQ-
+lRp6AL8Xlh2cG6DI%5@R4CXMi)aKIG*AAfM%VD@Qbq#A*RFfNPm50EQR+ED8eI*Q
+R80N54)5C%fEG5FlRm,bK)&8YrRlIj0e0M5-M*BNZh9IeTG4VXYp5@cqImiYkY0P
+qLdYjjS)RFhHip04dqGq)B*VUh+Xclh,Ske(T5G6G%ZZfYdQYNe0HaRl6BjqhMbm
+M*QaEH4fhEP+!QDF1IBlDkm'RLCrp4ITM8H+a0$Xh9TGq[MfNZRVp6TZjZXr6MYK
+IG(-FEbUcd@RE6p6GI%11Qkcr#hXlerTCmjDFL'dBdQQ-UMSpGTU@pZ[L89e[42e
+plRl[cmr0a9G[EbFrjfG#R&Zrm9iSDE2kR6HNDE*1ISlV@cdRcAp2cmhD@KP6RkR
+iKHYZM"R1rYRMMemfh5LNcimDM*TfG&[IT(1VjfGZrejmCf50'8Pl+GqV8Q8ErHG
+Tl3jpY00TcZP8fGN4Q*mS@,MmlRl3hD,I8r%h[0aSZIhXlh[qU1QfLbpac[G&iD[
+TdRS*f@d1b[FrRlIp@TZrmjr2kf-*qDH'(C6[2&#6$YjHG5JTSdH[Vb`1RZYEU43
+RGMXr+0Vfke2a0He2rp8dJYXNcjChf(Y-qIU5YDkeZIM&c9[RmQH-Mr0dFJX[8kR
+C@PI6bD-5mZkZkHMN9j!!V)MfIk,UMe2a,XiGFrAa-r4Dqecm[2blU)m6(P6E5ee
+jA[Ajrr0h6QkVRcaMej40R6ahcpPAQN#-B206Hdmqc-,GT4b+1cTl28r)TidJVBT
+ml5@Y&Rmk*5kYcG6TlHI,cp0UFl@I6MHCmfXTI1dha+@ADDR8RM@@jVUIQePh49q
+Ie0RXGECLRe0[(Rbjjhf1Qc[,6kHkcZGSBY[UG6DDqRS@jf3pEVC',0XqjZp96dq
+GS8+HkMG0D9qTMDR*clVk8VD8G,6$2kh&lHcam@QN4XrRp6R4GmKX)rJq"+PHGG4
+[Nr*T+HQ1aBEUHG@ZkMRdrQI%TFl'0UNj'$K#L8$a(ipQJ3jFqS[9`6CqRSBqa0a
+dlPf,LjdP,Gjr1a-A8fjj@j12MhY(DIVeecRDHILd+HQXqqQMSjfb14ZcapPXYM[
+F$CDrAhI8AXZ[[p6bf2Edaj9XM3ZiNFh3![cqpZTG$Ahjl6YRXEhBM)9p-F!%qha
+k"Ypd-@KLNqT'ITl1rp%2DqQcpTe!dY!h4U"XJAQ6!3f8Bm5camrCk'KCiq[Tp6L
+bif,k@T[D%82jUpMh2XD2hTf`Yk1Q655EdH5KX["f@qm((SDrHaYlMQ6[&N4XM3a
+lZ2fph6Bq+HcM32BB%hML(al23P"Hp&&Rk&1H+q2CdFQKMbF+ED@G(6&TjR*'@NB
+XFh8i`3RGTTeQSTj*f&Xr(VbT#E0Y+H[NQNf0Aep20QepI0N4)eI,3ARE3k0SqGR
+dGTDDhAS1cmI1aee#l6@eqG02dM8fp[VE5[cYrHfqIZTHTYkHkVkqrZc1RIR3K6i
+Z2RDEHkkEVjmH[M(SVa6cJdf[S6GE'23A)VipeRF@c9PHGXk&0)cSh%qcM@r(p&p
+hpA&jhk&jjAVaSdk0E4YG'f8E`ShLa[)MITMIbMF10lmI,I(l+mr9M4q2MR[K4p*
+(Zirh)qpMm52lp&589K4CZLkDLkQLe9&fP&pZLmHLrA4IfSU1A4jQMk#MkZMZk2l
+P(iKmUQlSrm8H**cY[XG[kNL4b8M45,Z4pU4j%Mqe*5@P*ep*pQNhP*l15Jb8r*G
+*NXPYXPrDPU+AQDA6d[Bd[Fd[fkAE8ZiTI+TIi8[Yde&6FG6CkQd90FdfbT[!T[b
+dhm+Ef-R+bGPNrMC2V-Rh'6m$*rQbIkFR`XRLdqATqGTp46drhDIqG2l92M8pMAq
+YAf1KXG$khclcmpr*T*0P*qA*lZ6j%ReB+1$PB1MJkk$B`H$"j8(pUL98Fa8G48I
+9U2be(U9(Y5UL9c%VUCArNVb*9r8akRR+R692D92f+RF92S92q+URUXa9Fc9D5Uk
+bUee9XkVa+Vmp9qkUrc9dGA9jdrrMpC9l#Vqa9lQVp#Vr[9ePE@Fa@G0@GV@GV4F
+I4jQNj@Lj+Lj'Lj5Mq(6FV5I$TH9NI$MjD21McSqCMjQ2"85DU6*bH9RdQ9MdI`q
+9Sk,PmPc0*bTrHA*CQ45jQMjA*`C+XV+@4bX&(8b))p*4dFL45J*!R(SUqQVa1mT
+4FP5I$SZ9S[K8A)8Ra!1U`-iqLcP&bJ1I#!6Nk1GN[Kd[+8[+8[-aq8bA+8I(`5B
+d&2"638G*1bXl+akL1-C"84jXH!TUR4Tdf2@88Z4@5*alAr`imfE4C@MSmqIb$bA
++642mSJ4J0biYrK#h3*9Lh3)-I5FV5FUJ5Nj@PbS#*FJ*NZ8)-jV)dI`qhbSU)%#
+4je*PD-8dj!Nf01MqpjrmHHS(dB`)&LCbKNRB60SD1K3USNQKPJ,LFcNU((ep6%J
+Me-AP2Pj#G%SmTm+4TFr)3V&Jb!+r+B+mKNHMLCqNSFIPDQ,*G#e&6mK)dU&X`#d
+%B&ZNM-&U4SYA0&Z6k50ae'rX9"ASiQ6q'iJ4JJ@R4)e2@j+Nk5*6JaapI9[3aNk
+h*5%-*RAm',ARR"L-dBb%54Nk8'XRbEd0I,"TJh68dMT+IRk5+HTH+[XDq'k)mT&
+L4iP&@5-T"N)N9IZlM(Ufb-[QmNLD((3,%JKLaSBX5,$%KKaXKMaSX5'NKaFD)k(
+f$d4d2!8`HLe%@-+f*&b%@*NSNA(amB3E"4d)JiK"SH"N4Sl&!jM5Y%JK#11qK9*
+N'XG(Z2N(k(!-G$BQA3fQ0H'EXB3c(3X+6)-&*6JT#rX9!BD-LpSNKaH[q,MJZ#`
+,aNUf2i`@KF&aff#mD2%M![54@TQ*NF*Jf#jqhX&f(85*6S9"Gf-)1TiVJV5-&&(
+%-6+)8Ba8BK3@X6'KB0[XD3bKL-`BE!*5i`CG$8PSe&M(lmQU'0%U(i+!QK"#H3"
+1NamH&T5l&L+@Lm5,P)N(,4+,i8XL1+N!IlT)HLC+R83K"9FY%Mr#V)j6+pMFH*P
++UHqaPJ`qaFVeIXA"3'+4$&(64U+294)mHDk('$Dr'BNa5J2ND*l(T#59-1E(b-4
+JX0a%N!#&!Gb'48%ZaG$'6Aj,a+0$%fX4Z&dM*Xr,pf,"Q&Y)#l'`La1BGLE%!41
+U`FK4-VqH$V%2#2dVBBP&44)92%PC(jKPCF-1,#8)8N)KBFH%'Sj@fVfp&4UE++#
+8DZE!5,85Q&6#Y,@MLj-U+'RN4,#-PAb@4Lj6Q-K'))bp&4FG6d8Ai9*'U3aN8m@
+*RE$0r2S4-e3T)Z4ilUU$3Z2NYA32N!#-e3b9&U+&0%V)Y4NSNk,dUbqMc`4)Y11
+4Na[@#DXp'A8a58*K[k*pLd@P3YmP`@M)@%2'TAm&(d8ZB[+8UmD,M`4U1L9e,8#
+ARQ$'4L4KPe34'TD@*'q@l&)f6*)["5PM9@3Na*%DPbNEiY!N4rr%MCk*%j+)fP1
+,A-63%cSN@[5p$q,94)T6@!a50+L4E#*'VN-&563D0P%$C!B#QLC!`m$Q&F)$$Qd
+F506-"Uf*'XiN3PV9a-Kab"SJNFP%Me-5LP4++UL42N4)SJKl`YbJ0biPY'LHG%L
+qAN)[U'6q*(hm6)IS36N2a-"Y`JD,ic-V[K4)[(a)RrX5*J4)[Ya)R&9adAi+Q*e
+Q3X-XQ0MFI%,)5bQ254)Qhb%6im5,mH)[k2I6L'"R)Fr%b(f5!06iH,hFVaT[bIR
+4-KjTrj*NIFbQ(-K2M(l,RHNKiI!qE$lAJd00[)IHK`Z*i+V`S&AYe$[0jpr%K`)
+H&KBN1*M`rriX2ZK&$Cd)H$m(`3qc3reMpTfF2DiRhp[MEb(!`2N``p2Li'03i@0
+3aiFIf[-`SH&aBH"`XH(bpj3hQ&aGA$KGVl@"MB&$HEb''Kq''(HH,i1"MD[Ed+(
+'KlAJ3pUDE0h[0[TZ"eP#((ff&KBq"dQlkcK3iA#Kaq&kZ&M``m%B,#Ka1eKKiAQ
+F)33%3q"M!0j-0$EMAEE'hQ!!i#@F1mpAm2Di%10MF,KqV`SD'2md1H[`-IYX$bG
+e$lq0M`qrKBpR`4*$%`mD'(LRTlKl,"KaSFpaYEMi'"JGI$KB'0a-,hFIJEH'Kj!
+!([lHea[jH6fBfF0RL3SZ$V#p(%`0jJEcaGAKBQ2[1*!!m2`H&lHma)GA$TJGaX$
+!p&N$i3SXD(HBA[im1"a[9iHlKhQ*mf(XKbKeSI"%MM!q5[kq'KJB@"dHbK`[DlB
+(+&$c!jiA[iJ2Idi82Si'150@$L(e10K3i(%iN!$MmALGVM""lZ0L*6rb8,"RL3l
+V'K`2D[FIHFAV-3D6TBHZ*"ia#Z&j-2c2&KkG4!0$3KhR#hQ*aX6GEb(Gp,kX2@k
+h!a`4"IYU%10aQ%Q*[1&MiriTR$`1dSB9#(T00$a-409MBA#lE!&PK3r'mE!S%+F
+!Tp9"SrZ&fZm`2XG,Mm(aqPfr'3T$MM#BR&'kKkrbD'maXEk9R`-ILd0j$aYe$MF
+,YP5ljQ*JH2[1&a"Am,Gq$jRS``m5(b4aSGd4aVF$9id2YF,#pRJ%N5SL'&2(MDY
+U2mc'aZeXq"kZ0ej+rJ`iq"#8(`pYKF,V1ehR`3d2(fm2Jlcf4pk#N!#$282rZ`!
+c(r$MGG3+SF+J80BbSHiIQ#9lEc)Hfa10K829a"$iQmKi-1PKe'1*(eF,!pdUXi)
+*#''$S3m+K[1NhRDm,rJMZ0q('9Vm2p-$!d`MKk-IG!KKHTJ!CYp@0VMH3%@-KQK
+JHCLBf"fQ)293dd2U-Te9Zj+S5Q*ZmA'k6(aNrAp)F,EXFb(k@V+GI-KSH,$aIDa
+m,KHTer"+ZJiiJfrSMe8-$VqNp66I0hQ2[-H(%SB%2[d0jVBFEHBADr"aY[K&ffm
+e[mSI(&i9*BRU")R`dd1ldhUiQ*eZmh@1bNlJ8)IJ'DKa[EpVqRPTmLYL(hiBGD&
+IDih'fr!r2$VFEYHPa1R*&PaH%Qbi9$'iZ2LHRMB([qT3eEM*8'-P$JDZ(e-*44J
+F)F5'(5qAUl1(Jq,eP"PBE8$a%JF,hq0ip$YH,q6TcI[6%HU1U-3LM%e[#a!L),S
+8-EKqhSLJ(HG(lm1)-bS@%6`5&X6#p[bH'),b1$kVk34(h[Pl,HE`NHB`GEaF,m2
+dXD(eG[em1lhQ"Mr!bNB'X#(c-Ec-EVm$@m,VH$l2$)#KH-)%&$K)5KamE#fqQrG
+rF[NBqh`"!`qUB9bAr`B(E%8qrLGGJ&@DYZi2#*2m(EqCM8##bJ`VbKhR6m2JBRj
+a(`i'*$j2AXYr`Ye$jRp2-Kkq(fSIIiK#4E0L&IrAm,Y[9a2D`Q*cKB4,d`PIbhF
+1kql$KBh[m#'(VQ5E6EGYirEBq)0"KGVKBQ&MBfkK"lbG@AL%GF6!'ai1!XZ[&'$
+jAL3qh$J#M`XEKEcV1[Ki2EF1(%h3R-6@i@ma[8CKkhBh)9qqAdF$Y6%RfR&KrPJ
+GPL3m,feHAFGhJm(%`0d8!HS+b(!r3''mk[8&l21*1BM,@1!Np`Z*MPHIUF(!SBK
+I'hN1*lp$%p[!iI&iAXkc!KrEi-2(lIdm#KZX#(LB#Ql$MBr%iQ!2eLq#@bEbKKB
+([Q(l%jEQF+KrVlLSS,@60$j1*YpfBFKbF6YYjJBAAi$*%8)H+@hqhKB'"`pedN2
+pr4Kqck[YBd2U&k``QSLiA%iR%8'qUcMaiI#3!+Hrih%0#fmkp5JKhRD$jq#86lc
+M)FrTq1'KL$!#j`!9*(B'mi%2&kcMHrid2$`1bqEMBiq)Ym6briDdGYG0hLi"Ucm
+ELB'0`H$$aX3deij"ZYiSlIE,(T`&TJiT6aME`XQKjMHEcfJ4-lHQ`1bkrKrdh82
+Ll[dq[k6%+%KkXI6Bq)Y6496YrQ`L@iN26m(KqdD,a,&b!P[8l*,E6,+ckC-SY6%
+f5biHk+"H'8Kk[(0T((r,`HNiZVlE5`r"3a!GhCP6abmEMiQkh@0UpAYr&pXh!PH
+-55CQFaZP+X#mdEMX2E$rqV#D$@[r`Z#ER@"$Mql`IjFA6HBD!I3Ki4Ib'6m8aNP
+Jd1mi'Vl6M+qXUU-E%(chR3`m((mRV@EI1!EQa8c$fX1miD0P1Vc)H&Zq[Kaqefh
+'fq0UqfKq)4BU)pZ-,MEX[$m(Jm2KiRl35'S`29hCY(d-Ifq,CPAH2MBq*dQ%86*
+&&GT"[b@CNF$eI*KKjRJGPdr'iLUB(Br*3kpk5q-C18Pm,lQ*$jQ%U9qe%&C`k[M
+'N8fYXEXY0`XBhHaB&IC!q&#@`3lI`9!Z&kITk[KlTBHYj$ZZ3eC-)8H)9hPRHVl
+Bfc#jYl5qm5Ai,%[M#A`PGZe,ihZ[%[K#AlA#dbcM#YkRfLTcYI*%cMm6!(-k86K
+H+*eBf"MBKAT`[6pm[k#JrDk5I@-`(qh[1&ZiF$'ZQ@flcElIKE`cLHB0%3jLB(Y
+m8[[+ZRb6-HAcq%8PLH`#hRYXFh-X3T0pR(mEljR6+GXET0A$3CZfq1VpQ&j#iD-
+,(06jZjF)XG9U[Q%P9Q*mRQ1X,4FIfe"QkhQQCQAS'$0VC`T-EVm,dQ'EZhYpFYc
+Eb)F$#5B-P'm1@"bDhUV3qNaJ#B@q9k[YPV""iCQ,%f$iRYXP&JBqh,D1$`Ze"RH
+3!2Tm'KkLhkmIapdZ2Mrf(b4eiG-FSI#KrdcD+)3,kkbdl[KET*dK(9rr`lVGHfU
+Kq)5qam6VeSV`X,GB"3aUqRaSI*i81fiHmpY2M$mcJ`R-cj(#am3h&&Hpi@*m'%Y
+8$0&KY'&d'YiN2M3iKHV@jBG6AGEVf5qNNl`Z-EU+BIeF$HEI(aq(q2'mIeBI&ra
+`[*A#IMGCUb5Z2kKBNF-#9Zmm(LHBFC+hcH[-##4["i43TU`,#%[Mi@VeTY"d$$6
+YmFe8V"hJD[dGp$[2,iG#KZiFIp(AVH,KKrPj+X*reii&keD$6,EjRCD['8%,9+Q
+h9Vr$18&PeE@h,(Z'Cm+'hkGffrJl,JBA6pI`br(k[ZYPC$q2VLL+(e1X9bH-GB'
+((aq"qlreFX)h2U3qBYGJ,I*`Z%c,mXhN1)D4$)FE,#NE!dc'jSD[KElr@*YX*Dl
+$,QFp)AIa0(4`SGD+Nk)5TU(KIdq$q2#aPY&iRYQ)"QEf(i$80L$M($15dlAG&b"
+BRMF$M(&qU6MMSpRf2pBR*#G-&[!+AeelI)4M$ejf-0ej,l6N2Yi3R&e-L$[-i@Y
+`YAUYd@m8)I9iQ"mFLV(a1,MQqZ,hHBiBIUaV2YZNpAhH)Ebf!XEK84f``4acR*T
+a%c1mSF,qQ0kD6[#K,Y6'fhJT&VVF,8D[Q2-p[lR5F)PTqme#KF-FBmYjL(BlSBh
+YIShI&k6%i@0`FEMHr$a6!B@bQ)2fF+(J'*lJrF9XH"LBQQm`cr&r!S"CEXc8eMq
+TerUi[%pR9rrq6p"GQR%1Sf!khN#rq5Sh9R$$jIr-,dk'"TX)kI@5m(cA$TT[E5#
+`0iFmF1"`BII9##kq+XC,RJV12RKGEj2YpH3lp(e2(lD(9kYGcdG3Q1A5i`p@V$h
+qJS0ALF$'aXE%0UGM,X8P!`rRFXh5P0[0A[$Y1&jdl!LZR@Ue,(#mc%krqRpGrqR
+Srrr*pV%eT$TLj98Z%B6#rp$k#I$JH6j2LlcY5%r*,LPFUUTGiU*JUm[5Uc(#iQ%
+9i+KPGQ[H3rM'$`PA"k[q1Vj,bH&ZqNrTK$IF6LBKNAKm`aQkBibrImR(iZV96($
+h3PMRG11$'`M`BpYUc+$rerm+AVBH&fT3,`Mp0&I[S%imI#jEPUVEF$KVN!$IE)8
+pA9d$2LCNX6#pq(e+%1hdN!$Mq0KDhG(L`'[m`i%-"H*2KHlMG*`Z&aIiIeCB2VF
+6q4I3fkS*lE#hKb!-lBd1#Uq-,KIlklGmE#ppP6'rhq2lUc'qC`XIGkELq-C'k'l
+kA#a0ekQ2`9@mE$9F$MHhJB*6YMmEh39aY0$JHQAMm6GiA#l,#a&`dM2lV!1rjl[
+hFGLS!XS"dZQCae'd,YqNaZXmNbRHVYm6Y[jEc'i1%D$k$,l'm2('GU#(KD3l)X2
+53r"a6$NEB+S)C@bEbc0q25ZH#`kXA#Kl6#dhSi@f,a1"mhGH,kD'Pe9-$aIlqe[
+26k8N%ALIDhR"k@'JZ4I@lI#k-XEi@0LEcJpVLH2fN!$JEV'i'mpVLiQmiZ"KI0`
+2E0Nj`Ir0`&XXiI#hIDRD2@86Lp,iTJ!,J[6SIM0JTQZpV%k8[pEI%9$3m5SMA3M
+KHR$ZU(&kr(r($`2Dfhi)R*EEE4,4HrU"%Q,b@flGHp29D@dCqb#*%lF"TX54i3&
+c3E2H2q+$@4lHQ[Df*XlRkAf[Xr5X0+@4rkqepVlAHFKU`+m,MZFjbeJNL'J2Gcm
+hYiL$2Sb(BIFa0r0A`+jQ*SUX#pTdeT66FP)rC)rC68df*Tk2dY48a-KDcj2Ldmh
+kXE*HI%lUEddC$f3mkLr,XiRiDIcIUD+*UEL9D5HQh(l+2Cp*6fQ5Qp64DQ*U+1G
+%Tpaj9Tp65C'LQ`D+,N0adQiqIN06k@8N@QFL504)YBP,4CDEp5IUCm'Lb0C)Qma
+N06e'ch%6A8HHL8HcJLC2)5Y6XD+EE`G)$YTeY(0e&&XkA*@QSTD@4UB1hLIYLjk
+4UG%I0aamhDDrFDI)DRjF6FE$)DRFEM84CF5LrE)PE2Bj#dLDR4D,*C,TD1EQBJ2
+p[QD@PSjSHI,bA0X(YRXp&SSQdqA4cBQiL40aZ2(Y!Fc15bfcm+ML@qTb(0fQTf%
+8(#9fih'i"[01$I54-eQSdM8Jhkm6lp&0TD@PLbBPN!#8m+*4d8fLfG9DA&[T-Kk
+8LdLE#*Tk+dSYRmZL(3b%R`p4NTX6)6D2F5U1Vb'3!+@*X)b)FK'F)BXLVe2Ka)R
+8a+59&L@qiN@NfRZE(8ma4l2Bj+EddRck,cCr@b0al,KIJbBNk6%pR84I2b%6fBd
+LEiF@AXlLAFbp6jSJSXZjqT!!99c2NqH8JHIN,hQGK"STI@GajA@GaZCIeSm(V`H
+ZJ6k2k,@pUrfGefHrh2pT@jVTh6`H[+h2-`35l(R[MCENHbl1mkDqkDqPlq$TYpN
+[0pEd[3b@qNIXb@qTr1TV6IaDlI3C2T[3qM[ZkmlrIkFKNlIbU5UrE"khfmRA4Hh
+UimrMmMAhYA6EMIcY&"qh2h1NU+,cVh+bVlpRK3APMb*2AIrlhrbkV*rljAREc2f
+22IT[UQ#eL5CeIZIplRrHTZC0(jd(i[feAlI&UprBrXb9lBqG""p(b0r"[lIS21c
+rR5Ym,2cprhRlFP[l5#hZFrZ+@amkUhd@ADH(Jb[1X*&VZFVh8(dEQ,p'dJNb)YM
+ZEkiUTfaLa1kqa5`4Vf[UlcQ)),A6kQ9[raErpDB6m9c[rjHGAhh6AYIjm'rj[*j
+rc[3Yl(cjIl*0jBlqUhm[pGV96[qer-crGTdejAlQ[h)#H4k(RjqjqMhfqqMk(6A
+RiS23PqIAlRZV(cmraqqrYqc`[+e[m[YbTfCJr&He@re1RTGK"m[DCc+G,6p$4EM
+23G2U)1Bed%(qlQhp2Ipl[q4hrb0l4j2Yr,T+[R*2fk@Zhpph9lp(IbYrjr6EqFp
+4YQY&4Er,9elqcpP9qb$d1kfIGGrqlIrT[1LpAc[aHG+r6qck2G9Al+VICqE&M3H
+KBqKBlk$T))RLAJLmcJpejpMkAqi-p""hAP$MNEr4mkVq&dhl1khrl0KDILmf$eV
+Ql[C9*BqIAqPYDkdm1`Up$m[DH&mZ$bVfZq2*PkQ`JYC2E`H$mZrZ*9Vk8QRX*ra
++U0HjrFlAm99[[ShRqRb1[jljj(AdI1hrN4Ip`If[U5$rGlmqac8'CJfT(@9m1$6
+hfF`FjJS%rYc%[F`33Ifdqjf'FUmYbPAmIm@Sh[h2ArTpR$mbA9bkZ04lMXVQUbd
+k9ceV9bi2PbEkrUYcJbVbqUqbh-[,AN%U$`Uq$VB2``Hc"jqIJjk#prmUUiVSPcT
+elQr2P9mlTUb$crp3FPZE(@AeGH5k+,X*8kApL$0G*59fFfYac1L[Y4HCc"Uqp[+
+[l&p,l+mVZ5iqqlVci2[kIFklV+Zke%6TThK`@e9jdZLZC-@4ZCGAIf0cBG&jkAY
+0Dq["q(rbZZEZZ[+kekf$fDZqPcICkB&D[F`H(,[2[jq$VC9G6fZ5UVkVjkeVXY1
+cPaD`G&A`I,SLa1*9FPe1`c&Ve-Q65eePdeGcYlc-[Fr9PbqHjrlfji8@aq,Fbqc
+6(q&XB*9piAGA2lB*rRdeVElRm-UA56ZXJ[Vr)aTGcZD1G8G6Q1DkR-FhQ*eG"X0
+VX0UJ5r+@m'`J`Eq$9CJThk6jfEh0plhVq(9Ae9kApU2Ck5YJXZNJP6S1TP6YG"m
+ZADjbZJdm%ZeJfZ9JTB-'#9ZCGcA6LEpAF`DkU[[$PEQ$16)+UmJk@6IIfJ`I#J[
+pM"iIci0G"Y1RT8GDM+`DI1#)VGKdY9q@CAD'AmDC9pRFi1Sk@aPjDjV[MFlZISq
+F&ZFJfZ[fH4YV'Lp+pPE213C1,4hN(6mVDq&9HRD*I4DkeUq4ZI#PAdZj'"VTh-3
+Cc*FIZE'eceAH3DHaRH&dm'HX5hUeb345TeMchaD[Ql(*e@rQ3CA)mb9T4E+ief@
+YE[PiY&4A1Sce9IDlTC@jdm&CQZmZE$jHlTB,rA@%[-*NkliXkqUYciIG6[f`G2%
+JqM&f09IG[i&VR+Umf'4TlArhMlbMZDRUHHjcUHHjlRVR4%N*GU!HF+e#YM5G*,U
++fZU+M1m[EAf$Iq("I3HPkfSb!1AK+191f&ADeGcTjFlB9eVYE%Pr"*UYcB%KGG"
+iF'$R)-(6`Af`UYcYC4)H#`JZIFZI@VV8(58QHJYr$SYaH3DL$19LN9dXZYkQjh2
+bl+r-e&VTp2"TrPed[QlQZVUUmVr1Jf%(Vr,JPjk*f@jQ8@i`C8h13HPk8kMZB,$
+PEA`k[4C5$`aYS)0V"QYGA@[5LJ,BUkeceG9EM`rP`AmZGU)*fHJVV@qUThTA06P
+54[5e9cBr&UrLe9V9ERT[f`C@6UP@a9eGAcGV9k5#6d@RPCDGdpAf9cRT9V-dR5I
+,JphYGaZB0KPCI26U[MlcDl$+`I,VS*dkUh(ZB0AXjFlTCG*Ie8l89I+aUFFQaNA
+-'RUjfRUq4Ph1DP`G69fS"jbYJJbTSqXUfVYCGVcIdlLCBedZG""6dHTC+IjF%Uj
+Jc0a,RCbZYG2B`E#C"YE###,R),k9H5jeGDc+ZeQ5mR"9ENMHGB9X&p86)eM&m-[
+d%J*9j*rY4ELjJf-'Hd8'Z-U-[+kH$jI-9`0p69jKVCPC'eqA46TGVGrfbYG"mlT
+BRCAPK4EL$08GcB8ATD5Z*&e2pUkeqRUF%ATDTA3AePY@b,'#8LjeKNZER@-'eUl
+R5$$H(B3D614DQY*&pjZHNJrY9r'UTdUmjDe(*UXXT'3CiNC"1JST%(5G69ER2CQ
+9H@9E+UTejHHrm0qT'9A(XNC,QcYG9EQRJdK9lrDLY,qCTp150Q9Ia+[iJ#6Vbih
+1`8Q*fRPGPHE9NMi0ce-&a"RH2e&E-h2Yef#D5C2VDL,!XX5Zke'DVR,k'9J8bE'
++9RZT)j56I&DNUmdN'$Ff&91pbFp9Y8pTdY&1-#&9pLe,`-VFkj54cd[ipAFLq9E
+FYYEHc*)l#rbS-kiNPFp24ELrP8Gjdp&k9P,,9i+Rekkem6Ci*4--eYHRP&BGJ+2
+afb5YCQ5jZe,G04+bI6XNM&XDV8c1Pk6Q$H-YFc!53qp!AT+S`)(r@PjFCQ#SJNq
+P"RVLUh25jU9HA(5@e6PCGcKr#IZ4pUf4pV9@VC)9d(brlC!!Y,q9TpKAC%Z6`G1
+J6+e9jTpcR0cR%#5Y9Fl"b50a"F6*@`k1GFr"BlRDkkjJZANNThbi+[l&UqE3&GD
+qY,(8F[i@q#fZ19&R@&9Di09DqXD3!&eA'56iqmV)1PRmMHC@A1mLG9GjFr9PA1j
+cMDiYJfZ+-bVlkNVBG,%e8lTD,FIfNr8U[5RPpc83A-(K9eVQp`CiG3*1ZUR*(96
+U4dR`me"IP(q3!0bAkC88kbGEQ9)Xh-jeAFqa"FPk,09Tc%e@j*&eN!"*LbYc9ER
+Tl+9H5Z2J[4Nm2ip+D$pcX'iHlAFe9jYFe83G,P-T"fpNAjC2pT8%(5q(N!#RJ[Y
+2iGG530V,JcPAHCk8!GcR010dC-EL#bJUi-(jh1kHXQAR$VLS9NJeNGU),iYp[+h
+46)1P)ek@$8%FkL$`l'eJfMUYL5j)56iNk`P@X'NXE@S0TEB`'K(Q))e&Z0*R)0R
+Z2T'9C9TjbAHCcjFUjC@R9r&GeTkH"b3GVRU,FH(*qT+p,ViXXJAT)+kGiFV+j5U
+h0AFl%V5XV*8E$Z@fHJm19HH("khKfprPB04*!q#9%c86UFpH9X&r+(Rf-'L*%bV
+5*"c0A+YEb#XV)THLX,L9H9H@Z+mTPrTD[e@4+JC@4*+*GcNV@bNqA0)mf'eNhPK
+,k'Ad)#@XUjqHSm[&-AB&D19NMGQRR139HecVNJ9)$h02&VM*41JdN!"ipjPDb`b
+I5`G,RS-pU)04VS0G8J`5,'cpDqFb4eGcNVATC3h8(KPSN!!D!'E3*f(G*Ti0RNE
+``('khTjGcTrPbZePr&+GFj9mP9cS*@TR9e(1$rk%VCkR4CUVe2bmP1T*AZHiEYH
+ZUVQ$qeM"kGpk9m,UZZB#QHa02-Vl&pU),qVZI@m1RNi2bi0G*r`9Ci-R)99,)jh
+9QU@qcPpVS0MAbV8h@DZ)DC1GZC0,!ZS-CRZVYCN%'RX2$qA4AN'eC9UV4rPN!A&
+C"eZ3!22bF"[3jk6iF&KNr#LB25brN38N'jf'jf#"0cFpklMlNAh(d[NTAIFlj%l
+q&caEbrh2K&(H8N6B0V8399V"2r,F`IBh(m,bUmLjPGp1UqdY6PVU#Y"mN!!eK-6
+``*IU313fHDf$*!l9NJ6AhRR8JC6*!h-[XB0S-2U+[NP)-!!!J&GRGhGSH'GRCAG
+hKePSChGRQ*L+U,M+LfDDQUKjURTlGiLiUjQTZjYhUBZBU,LTQ@HDR)LUZUUTGjR
+CQSQiHAD)Q*QBb-LpQ@DlZXbVV,ZjQCLCLGM)ZjPQ[,UkVDUTPjLBQBMBbDZTL+L
+SLEUjZTKhZUc*V,QTTjLSQ)ICTlKh&`!"*%9QCiL)QBQCQTUkZ`c-`-$3!!!03$4
+84%CQ9PCQCfChH(GhKiH(L(L)L)L)L*L)L*LBL*LCQCQ+QCQBQDUTQCQCQDQCQTU
+DQCUTUTUCUDUUUUUUUUUI&MGE([G*H@PCTVf)erV[#c0V$b4-ZYPdeB9bm`1$DkE
+(ZiG[Gf@$Q@LJ,*&3%AmM-RBXkTZlM(kL(RP8RNQT6TS@U,cmAZ1VYS0SP'jqQai
+[NX8EDjMp+0qM#Zr9GU2YE2`%Sq&++Jq`Ll!!RAf[9KMDiRrYUIEq$&HeGT!!eE$
+([!QX`2,b[)frJpEfqeeeeY,c6hI9N!!&k8Mr#pKq2DI3Xpl$YI*Kkhmd1hYB9R5
+DE(Pi9hCZA@bE11!NSlmUf*!!(#CQ$LVh%hVDfAKG4"ha@2pI(YZp-[c8Br@eI")
+Il$(ehN-L'r0$iqh$H[HhmMEf0IUSI!VD@pP8f[+036mehE8[Gj3AKLB)0-8IU'U
+2(QjPS)VHf3$ZI$-e&CKe2)5Lp'VmHAHblhL%J--V5`CQ,h(@A0#Y0,HQ5i4$HAN
+2EpDr#L&Q[jZ2G1e$kfdhU82ppimVIE,Z2!GU(j6l+(QH4i(JlIYqYefefPeTlaa
+3ld[4`cTAq&lFfe,TBhq9lFIF`VEqZ`amHedljH4DMb0fRN'4B@a0PTXHeBmL(Uk
+fP2mHPPX8'N2)[HhfpYrfDmLirMBmM6jET32!5JH9@dYZ+!air9Tir@fPR&Hh&8Y
+iq4$Gf@&j9Y5E32i"31,*+maMaIVB-$f6hR`kFb*B+9PTY0mQ(FBr@GBP!aa3*E9
+!flmU"e"NSreH8e3E,#YUArrM&X(`HI+UZRLIcGFDF56r(kh6IXBAJ-S+(H@aB*+
+Cr)mV`I!lIEklVGTYG2G*3,[dI!M3q4XSEDX1)VpR6BhJ@@&FHc@j9K6al8XV2dR
+rjM)iKhYY$p#i`[M`R6,Kq,MGE@bURQD5VH'XrZRbS(f'+"Xpdk8$bV'[[EZYTI3
+YG,H5ALJEH$PH9$fKPk+6rbJfl"h*p%#45I3h'Rf5c1M$VE9I(05kVj8-V53H9Lp
+aZlRHkE6@"T(kj,SiR[N[fR[d)[KG[C`aLB1Pj-1hX'Tl$FGJlNr)fApTmDS[Jq4
+frJklYpTVY2Y%RdaiRhPA(lm@0j-R#Z16mG*leVh6fpY[V'J%TrR0&B[eGCF9IP`
+mUjKeeE5Kf93ha0b5Idrj+C3$fqQe6ZJ(U'+"eEY3"2lbYTGEXRZRqpJ0p9dRjYD
+ZNraXbdPPY1b%Fc)IKh"[4h&2C`mbVp',,QLJ$drQqR"5MpG&$Fq"TY-B9VA-YN1
+S96X&Hr+L'jc,ZZYXcH-DSZpX+3S[NFS8@iTqA6mX!R!akT2dcDhh*GQmSa+l66a
+ldcV&DLYEMPH3!'*EmfZmRDEhUkfEmFkk&aKAGXc@#mLfKrr(DM8pNC,JPqAcb6C
+YN!#l`-k1+kleRED(Dh"RmhYYMDl5LMR@1eKAK,qEbY0m%hpqZ[IS,Hc$1*UG0Hp
+ah%-I@3mSeTZdVj[@3eZ0mIV0,+beTA@dh-[)TYI9&'0bS8EhI!%(MhYj$i&j(aZ
+ICbm+AK@3!!l--Hpl+Y)GTFBqRkh68U[aTZcZ+D8Lrp'[T4[!hHlZ0aHiY!akl)f
+flZIi!A'R#aUjQZVFI6VRIl42IeaDi#QfpjYGSV(ml-*Z)I!X+@0bYT,#rReGT,f
+NY!6ADGq&*PIIrdqra00C`lfAp#+Vp-#3!(jB8q6j3b1C1@KKk%1,&j-R"Vq6mK+
+*p"fSPVYEMB8p3+*i%VGR9YrXp@(q6r'(kA%YUbiVL#@ZX-ED3ckRE`cq`&2ar)q
+r#A`X,`I!de-eLNlBjUIEQ5p$'1FQ+hMI,VF+kX-EDd+Z@e3mE-[*Fh,fXT+&&KA
+YjBBl$B0&,hGkA2"mAP@U86p()YUGV$"[pVEAV&%mQY[GSVVYYpq+0$Y)09HQp)b
+H,j6&$YBIJrIUh9F3SI+K&khEjR-qbDfm-TK9H6*kf0CN9h+KYVTimZQqP#`r[mR
+lm2d[mC2%PqR&k@QipYb,Me44,+pHkL3q!iSGAC'+&fSGVXZYf8rEP-eJRMrITaI
+IUkElr+Y[[`iF"E1fpEMfee([EDhUUBVb2dB6i85lBmIGp[$KYH2qJH2F90[AmRD
+hFR#06HAKDkb1Xl*VkYIbZI$$i0V$lZhG[)@50G&efD+GGrIapF2*NmcPGaFIc8r
+SD@A0lLiTUl(Im6alfiaS4fGaM5JN-Ab0[$q8ceIPrbHV$A'QPVSDYYMYJRE'rqF
++qQrMfTb[pV!iSIaiGNe4$A4G+(pfAKH!cDKfpA`FbAXDCeDrXdphG9Hi[)HiP@8
+I#da(KF8lDPeXR#HP$U`br+NfPIq5YUI3dpaef1Xmde)pV'fX*3a2fm-8hE[DJS'
+0$PGC$Y,$'XHhK-R%fh[)&$rN[AiH1!LiTq!aj'#2(kf`aK3ShP$D+T6b,bAJjHe
+['U(D9Y0dmIdG[$lYe+mSk!X1CFK0hXUcQ(H&6a2!M`TiNVG*25*qjKT#I&*2E`r
+QRq"XVMVSD[8$H2Zm3XSFhq2l0APA&55QRPi2jDYYJmVDUJBfXh+"GSk6mm#QB,i
+e2p1G'k,#j,a2kRaj-,dRq8H%@#[9NMi6pTp[8Rc[H0Z19@6NRRJQFA$EI+,)N!#
+*e,IT1["UR6#BR@QaY["m6PCIbh%lUH9HAH#T2Fb'(i1$l[@c(*22j1*&MhPCbV,
+"m`Nl`MVVP!(iGhkF1ckf)6`ZUNRH0AiahC!!lbY59mXXdH35hE#,8i8rr[F9HS0
+3Cpj1c0UfZhi@eKBRCZklfeZm(D`cRi6hb6Tj!$Uq9QAELHq4YD[JNAYe"irJXBA
+D3r)VH6$bIc25HKN`GS5Gf[+fAJ1TrkQTUPN+fA9$MiqSTQ6mDbM*1V19ckqP[B2
+)BRXY*li&Ua2BUHCj(@hE8pm"LHq99fVLHaBfpY+fkZF[C1*pbI"H*pUT[ZlA%E*
+am(lidRZh9jCB2#Kjm[BRLU%qdhlM8plGk6hVG4EAYe@9plfTX5-NiR`LHL![T24
+b1efqqHkH`pT$CR3b-X9QVlMl2[-I`CChc"1pp,Z`E(*6pDRrhZ2qaK0L`UMT1rQ
+i9akB3pkh+!@`"cr3DR@bjjI!@D*lTd6VM88lEj12TMMXmU2hRHpiqbGm+$-2*[H
+-KMfmAbSIciAN(03#Im''pmHUFU3bQCHdZ+F[`CFVV,#20i8&eDjFrbS5U+lKqEJ
+p[GAH$@dkrPH9D`rCq60j1erDK0-Lk#ValUafYj*XUB$0PTVdRbVp0f*mN92I3Pr
+B4,Rh9a0aYRT)EMBpIh%)RHlAJJ2`9q5CaJR9PTT[Eh&0NpKd41hA45[EZfq[m(q
+DR$eXDd@k,DQ5IQA(+PE9lThU0a&KF&NQX4mlMLGrl@hrDAXDX[B[%lUh(U[C1rk
+SFISidMNr0UAp**kD8$T2HlTffUap0eel&,`GlY0[XSI!f5hSR%qV+R#KfYBB&eN
+lp[$eFX6qpG*rFB6T2l[D'Q+a2b3Q6MA42S0!e3DR9h8UYqYbHdPi9lTpPfpRCRG
+p2-i&E$bIV9C0N@DI+RT2kr6IXBpYXDINdpTDl3KUHP,PI,XDh'T`iPc3T5[PhR2
+DRrl"pBralLRPq4fpJI,-T-L23dVF)eXmcVI!h[@`fe)mXlLIr5j&e$APK)8*LID
+kif'Ukl#lHAfmY!3Y,R)YHklD(9#h-[`GT,m%cFTFZ,V[NkV8GhhP2lq&-p2Y,LT
+MZe%Z,hScA5LCNrbC4mfM&$rQ09R(1Nh&mV"hZ(K&KR6Bjh9&kcl59He+ZQQPl(#
+(K(K9YVhj@&rrLK5`i0[H4B@,,dZR08I#Z+DkN!"KH3+(*dXQEG%r"UC,APqq"cP
+9Prb1dVq8BX2r'QQmRR2(KDADbX[b46YJ@IV@jMaVM[H9eImQ&TYM6reUl3f1cjb
+ZIG@f$MDiH0$JmVakR9l6Rh+mk&hmQXPblDVeYh&mTphMQNKX0am(ZaipKM&jV$[
+G[2dhhkBSl2TCDmD(Z1X2DleB!bQ1%lVE&&dfXLf(IaE#VbLq+khMCQ2-lcPE@[H
+P&`ZKJ[bS[hkGYpr(dhhlf,liSXIZl$kf&E9EdZG9NE6k8S!KYM%%a3[rVbVVYjG
+YHZ+$#2%mU(G&!(d53DmVF'KTE,"ZZXGTraj(+V2l(%pUp[CfM*2kk2Mrib29%lr
+4rM$j+6ZeMf0YpIPDkrX)DGlY1XLURXV(JGCBk6UcCPZSCAk2P@GEm(pq'pc2l26
+Kr03j88[6DDR,klj,l*hGfAb@TdDl$i6SNCF6VGr,lGajG1hkKNrp1RZqidf`[Hi
+qQFd2mhJq6fqpehd0TmHlp@(p(fH9Y62dG*cE3p+8k6RbRY3%pNkfQhX1lVIV(f@
+c56c-Kf@RdYa81YrTPZ1BAEkDfrR[Im-I-6Kb'k6[#PG4F9Ir[6RX+%kpfTj0Cbf
+CZURlNqV$IribSHY%m+8DZZXbCDb`T@$[CR*qq6mr"qrbM[eA[NDQEZVhk($YZm2
+qPYHSfQ,,URC[%mSBhmdhC``e)Il2f0,@rXhPaK-6[Yr+KhIeiY0emcj@UIG2CAP
+EGXrrd&2r'de-6cRPIX2NI4KBl3!Gj$FklU#+`!HdKe11b6L(rTed29paTqhhF-Z
+lklj@Uq$hIHr@rQUrfFUArMYELTm@QmXJ`fPQIm4BGjmVB(j&RBp[,-VQfR@`klE
+`p[i%2JPcc9BfhVIjUrl1$bT[2N`RprFVYkh(ZEYFLd*MPaIRIckMqE(iQdYZmKl
+aUHpG+KqY9m[Q!9*pl1cMcE`ZEaBl*12l$mkH9DE@fqYb6jYEh6ff0bIpAU[Vl0A
+NjINm*HU-Npkb`qj9fpqGqMj1d-T-m9I2ZY-T1XHjKUBRmP1jZE#Rcjm2NH$$QB[
+P3lICq$&TpPj29[[ArlSRrQGDIU2B8Q5HI3KqPb1H5H43q$[LHAk'QTJ$-cdk$qR
+fL!QR`1alfpqK&Mr3q2EGlKE6Ur)jRmelb[)jrJjREq9V[!fQhdr@fh%Y[8UpEB8
+h@$cEmU(PHlbGUGGq2hF42XCQl2R(GA2m+(,mRV2!X-EVCfef9RDU6lYlU[j9KHr
+@+BX`h%I!Lar"hRGEIDI0KqcpDRj"MSdphKGTFDD99edrDklDBRNHl3KfYIbGl@F
+rbM@df81AlYr$QE@9Yp0hP6ipVeZb-jip8SRal&VZb[IV95pcbIGr0F96U#B@bkb
+2rA9frL8iEEb[j$-1)S$NaVjSm+fTkI5GCIe44-,RQE&K%4YYUY84iq9Xr"Mirac
+NPURC&mMDA8@%CS9Pm(pMjAHpjbY05q2CQ25Z$eKKQpDIR,hfQUr*iKi4[XE5'km
+'mlHmlG!5lqlj'QiQlqPIpGX0c,lIDDIYpTj98qGrVI)f[JhAEhQZ&lkfYUZdpU[
+k6ec-j2PDe(A6G[@dYV1jQ$cjZC!!qCKpC(q6hYA#iQ`Uh%[)h%AGrjiAqAYhREk
+IkqXqaTUYAflMd[iZSdX@`qcpI#rb0kq(GN0qXXXDm0E6ER5aY+b(DhNHpfqeVDZ
+SqYK'BIYE)ZB54aHAj0cYBIPpEG@NRpja1mAU+r[IX8p[`iBIqq`rm(,kbqhZNRR
+GcHVhpabHl`U[brPead%V`G'D[@dmMAIiDb,l%2fm(GhrB2fRQ-a2)GPE8l`@d6l
+ireZ4,jIUr5Q6*R8IS[BFbAa*I%3%Zr3mq(&rqp0IaF5C6qPK9H*-rkFLfp@iraK
+iN`mKApPlT[4qPYEDPmFdH'rA4ZBEUmC3"MEfIYeeZEZcCb$VC[F8!jHVa32VmH(
+&X[[ram[eIj2mIl2TIIQFIGHVmcr1(h2EPm6U2qR%rSmM-&#p2qhb25KqrZ1*Iir
+%Zq9IeH6LbrhiG05aE+PH,i%T4V$LE@i*Q'2#fSm,D9p4fSjh!pNP(0E)TpZ1ZZ+
+R@lIKDE[DX1QrcVFIE[5MI5iNljIblTI[cUZiGU4ImVj[HFHA-Kh@l[j@0pL0@H2
+bI*m$b[-frai6L`j4iJVM#kf(hE[Bi2@`r4apTGm[N!$1K,HbY06YUYY93%L2[A2
+H2fqZYUT--IMLD([T3mFr%DV,j882dS"29VDZNpdq2l[j'*pi$pTpFB2P6ccGE@c
+Y*hrV"mUpQIAp+'9rCarF[rVrIrcqP@IieIj29reZ["qJFUcim2Nh(+mQAGVqG[S
+H4j-MMr(2P9Ta''@`KreiN!$Ykc59Kr6VD!,DQF02Xi3mDRUIXi@dZ+@eV(+!!VR
+&!YT2d&!H,#Rfh*qMeHmTlIqEP5[(ed9l+BS&lTVRbDhrKa+h8ir+kcV)6f)QHrD
+#Ihamj1&eYh9QIrFI#ecf8(VAZS2DAH`VDF["fN%(jT2+kf[j6bFdr`EY$JrTEfb
+e#r%jh1FYhpFrI-f8RB466iUFRS5GPCDqXVV,5f8@PVFD[BFhJ9QPBFarU@Al[jJ
+`IGl6-)jIS@Ydpij3KF*QmYbHI1hV`jUfRYqdKQjHZacmNZh$RTepl&qjrVBB0KK
+Br2$Q,VCFPV,ZeKVIVi0A`G2FUD1Cm%QMqXdj0[#Gp0fFFX11'[T6E,"rYYU8,`i
+LiplZeDFH`I`ilCTaqlq@b`E["phakRMe0G"KiYhr`KPJ3U'k3HN4((j@h$M)lpV
+BBplc(c%6Q1SLE3r2a((9Ur)X+R@kDpj@bJkX`5aGlHmVV6Lfm$rK0lL$Gh-,Ka9
+CGR$Q%8hJk8hX%F8GT`q9jA#fjq`JF1$mF-'@@!198eeI0Mi2JmVEf*V%0r2@(`2
+XSrR$K`YUZm)[JfF4YUDi(P6lZ'mYX&HS`P5Nc[+V2c@F'dJfPK0Vk`0m`ShCi4l
+h--fRVEDdKj9V$i1pYUIZr(Km$Df(HBA3KeelY+fPmXSR2-k%4XZY%fj2+SH5I`*
+MaE(ke-,EV6eU$CjF@i`Ji1XKfmhG`3ijhi3hVhDhTbq,cC3fAbUqQMEUff0ipYh
+G6mhPCR#m$`BFHFV!3EjkkJc0VTkh'f8"ZMq$cp['HMLrmB@ZKphVH6p'25m`N!$
+RXF5jFRP6MiLB22Pi,)JX[ajFfTAdUqPfm''Ra%+,ffj1bZcfP@e1GccTEH#1pVD
+F@TUH"XVbIEGe$8kfY)J,4I&RV%"Q($rQ+VYlf(8phMl5YaZY-`Z''`Kc0h,$Neh
+89Z&FIpBmUXY`j*H&FAZd22cYBHMK5XcapSImDD!ZZXUcAI(Nr+l'Ap[pLa2"c9Z
+kqV+%R#Ekd11Gik12-fjaN!$`j1DD(lXj,Tr$NepE8l5#6C9RNk4X3X"d9MY!H6$
+2Vcf2N!!K4#3aI+[HYPI3)JiqT`[b`pB(&@1iJJ$3lHkXp0CrQ)JrjB6p#iFEjGI
+69K'`)'qCi0eEBq0ePIM@X&VDhXUemU(SB51$im23Jjli0rXEZAqpi(ZdjaLkZkr
+qk'`Tldm0GYMN1Ye$h%2FH8@P#4pXiTDF1[9B8Br`V+Tq@NH1FkK8*i+PfFEdI2,
+f"l`qXXiI*VrlKmeP(M46FCX3X'S0RD'pm#'92Zp0MclDUb)6Z#)6,fm2JA9PXAh
+1)j4*Z)@HQVr3)K#D6VTZc(PA1RX$`D%3'Qe-e'r'V,hMX1"4KLdG+#@phaCQCQH
+9qHSl0l,fjckY0MlFEq[f0CE3S#am'(C9N!$$@3cKb-2FIb'#Ll`RSmF+lX2fBrl
+eNCYF*J*IL*%fRCH$YCUIVZ[PaBe[BZ4+aTjj",LphU23qqJr!XL@a0-4,AFFU-j
+2NE+A$1HMc#)F25YrV#Lk`jh@`Ql-VDZHSMBYjGhT09frbkh"qKXkr#Z-'QMiAC0
+kY23[,'cPf'2F24ppj8[,Z,i106k`[`"pi3@Id&rlLLCqAeN12TX'ie'&FKi`pa@
+@hA#!D@1H@qX0eR6'lk@$hL"4!prCX[hT1eY$lLVc62bJCmYF["f9R05"l+,'f8C
+e+aXPpJQb&eV"!b%j&[F3iULh2B,G5EM#mLfJH)%%1LdPFVZ)GFId&E9RpX[j10Y
+*BkAkf0UUYjGrXfh`F,6E$"kb[`XEC3ciGRDc1TKVqa(FG5'fFccar(iF2ahZJ[3
+j@Cp#riP[e'Q`TGkA`CaM'DK-@TTG[T)GRZlRGfelE6HVKZ@!N8cU6q)0hh(8GaL
+`diUhP@elj-019ZiBSBSpk[%%fLGELAMq9$j@AQHlcq6c&kPXcYbmJV4m[#ajHa1
+6R#[00CR2GThFja'0RZTqQTGCAcDh'VFE`G,Al%4ck&aHccE%r0$$j35amMqeZ)G
+hj1Q-")6PjD@d1lddD`aVdZ-mV6BpdL1CIY2e(2BFAqkcEhHQaUBMrGhZeq$6[,[
+pqiq9$&X-'KYlQ[+klM8l(#PE,md2N4IZ,cTA9I9NFMh,U)j`3k)i+T@Qe2*q2H@
+apfjbYSXFXmcVMd3Z5`JEEJN%1cKkhbZS)j0RBC0ak6!6$alDpm$TIZ3pAYI!lM(
+fC(jGEHlTq&HbMc2[T)M*$PePCTG1FRefCbbi(cRbA-2P(dDGC$ck(+lF#'Amf4J
+cIDXU@rVIX%40+KmZ$A3Dk2Je2PQ@KTXIjDmf,L3GS*!!#*L3!"c1SI+P04r(CPl
+Y5$6Bk,ZA$Y3d0D%j1SDf**!!AYch%[dMl#[+jqbmZphG#KFeYC!!pCXYP$'RrQK
+hFZj@k3a(TpDFjL(b6J)dmVRp[G@GTCB@b25@a(+%2SKENF4h+GTB%GHQrV`MU6a
+mIkAT`a9p1rp+iq9U,ffl[lQS2iQlHXl6Hc14TX+8[Mf)X3!GSYjL#*T`k@mKfPd
+A,TC('qND,+X1Ak1$rVCBfqX+Rd"!IMeYlpH[`Dh(KfE%Hh",ri!ihikA+AKI3PF
+UcZ+S%p0MRP'$2bkXr63d*TEp*Q,-*eK*+JlbVJkD2PIQdf2F9YIf)Mh9h-Vi-2T
+!fRjNrcF,69YC5rQV+ZQf1aDMfqK%HZi4(UrphNEM&mIVE[BBr+mcDAQQe0A6(02
+KfSNIbcblDDQa)epB2@1Sr["KqMrV$+TElV[T3`k66HR$a2-p6#Ul2j(QE)bL*Xr
+jReXM(Rh&,UhdNAJ3f#p!GAb$hBkiq!Dr`aq*R!(AF%R"mQ2MI3X232qiUFh(-@j
+e+qYJlF5+RE#-Ga$E9E9L4GDm5,YiH8*%%miNBA6C!!NNi1,#fTXS5m,E`pTAi@Q
+*SZSk[jH($mhdM!lQ5iCAcm(Zcjq0hX[i-+91fk4mr'U[UeX0aUZ$f'kq2Ep[fPh
+hH1I2T&qlef&clDPl[PA'SSfX2d"Kp0@%D(+YMrqZheeKHbirmpc$TE,)Z18!H'X
+c$@T%[PeZ02q4jR@IQZ&prrN3q4+m#'(k$Uf6HbrNi@d2FYTVhD4(eY((FC+@ldl
+Y(DF[BiphEAYjTX+kA'eP`IQXTZpX+@q`MlXEMr,)52%d9K0m(5Q4KqB(RD+mmF,
+Y1cPIjA&Aq*C,9YMl@l2ARKDkfKRUCi,aXJ"Ce51kDpfSeK1)D9m1CeGIhRHl#XY
+[[pGK5iI+Ph[N5Z$Mh'Sj801&)paH6eF08jZ[+Kj)MpYX1Ym'YUr*f2+rekZ(GQl
+YkHlKdf0l[P3lM@fX2af)pG9Z2YBIQa`T040lH'`rV`[*KU4cm4!$`ehNNCIrMlP
+kFTUIfQpa2)Z19TTT*[,`SplFZ*!!h-2JI,KmVUlE'22jVL+D+p2DVj!!CRQlKG6
+3R[+fN!#84(2Qj@+*#C@IP4jZh#V54IbFH$A6)IS`H#4r'XL6bh(+kX1eXIZlfXA
+P3pETXF*lbTH%%pLfd2d(XN)5+DAAA&AGRepEGI92j'bX,hlQQdNAhqZMkc6BrND
+DR*q(6YNN&aX0PML3!'cZ+G1m,RV%JYUIHcIMc1ZZ19UX+(ir85q)@q*SN!"l1Ya
+cb-%cY@kVbDA$hB8IF4lfkX-Q(`54r`2G3'iIP(FmZZYmSH98Z2Yc9Q)@X0lCAZZ
+KqL@JDXAH8jHSal[j12i1PHmIJR@B(,TMK`Zm,PAHaEU$GT&F9I)P1NFbG,$L@hq
+IT@GKhN1qXl2ar+VkKmc22Yp2$L(X`,(hd02@H4FIjE#Vj*Df6fr!Zd6rJh(+LNR
+qHK15ZdKhYabYfE'1p[&Q'r(5MEeL2pC(1P9Z[Qh[PH$BFHfim0Yk8ViP1ff(+Z-
+HCX2LAZ2MFANVGh&@l5XT@X0aDlH`qckF2fI6hF`qE85$`EZ$md2hrPHV$fJpQK9
+dqP2U,m#AHklGH"F%R@,TU@Ah&K$p#6CHPZb3!$k1iKZ16bBIqQ$$qDcZGRFl16H
+lq(rlqE$[Tm[[H9Gr"UfpA,2PRj4c!c-*j@QlbV-`[S`qC$E3lq(K3h[ThHaiKDa
+qQ'2YjH2TB,+2Jp[@hYY$I`pTZr!Jj2*fj-[bH5)hrRHR$CIJCZEZVmf((hmqfiP
+lmMHr(ZGQ9`hKERZm,DhN2YA%2Q5C[QDD(IA(ScjH2mL,6BrQ4BjLTiKbm,DV[BG
+T@Dk,VUfV&MBX0aJqM$@5X@RTVEPA&lFr*kbjZC(b24aI+Q3m6`,IjGIM6lf(C5p
+45qKL`pfF!IbqhPkFarI0M3m6qcLA(+2kYdN0T,`H6[M0mMh&5(EbDc6BfAk9BHD
+HiUFQXZl26&Q(q6LF59hFDKeeCrCG5F(Y+fVFFfREIEarj+GrMd1Cprr$lqiqrVI
+[bX2Pk@Kr0VF,ajX%H``HVNqRGqVFIELl#4MkEL(CIiqPUIferT9[BH$$mZiV2dB
+@Ac2[rXFIkAcI[Pi1``TGFF$&CE9ErP62m12CF5AprXI6[r5rXiRcI9qPkIhd51$
+$PplJed0,Yr+ddfGB(U8j9XHHlrMFDQEaIp*2lm-D'$rh0q*K"bE#PYrbdjG@kfm
+16$rh*R2S`r0iNcdlU,dChq'NKNi06G3e2rZiTG[C@%har6XM5pJ2P5p&iEImQ0p
++Pr*MIf6IdB2%Lj!!59@Bi,MrbHPqML9pQ%$-K$DJSGBMCKrkB3E9lTSEDEk@NXU
+RcF(&&F`X1lp1ld[cI5rXh(U9ehpqVCHM1`[T8[dF5Ak9YrM$k[dT[pN2pRTKXIS
+DE&2L5kkXdeMmhNq2KA0IrM$IdJf$BDhGa9k[GmVjIbl6DqMp+R+UbSrSpBIJ,j'
+dX2mITAYhIimcdiH9&r*JqN`f,ZVIcKFkFVk9+2@5mE`EM'lL$Z)2(JfF'qJdeA6
+9$(RmfYX16[kcfS))*flT91hdXR"mID'3!,BNVk-M"RACZ-bFDD&b@+iGGFBrQA'
+a`HSpfCJqP@mR$2IeMIkr)XXI5bEh6IcFRGH"$bC'#CfN%&M(KaC98a+cJ'3D54M
+!4Rh0K@33I,31VjZlZ0M0hAQ5XD##Pai*XDG(`S)d%'bK-aK$q0EVTVbXEGH#DM[
+@'kj@i*[GePJ"bYQpABr,X-(GG4C6EQYQpaC6HVqAeN8(r6#Z04JlU`UE12M5SpH
+%[BB20aZi*)rr96ri#DYQrr,2Eh1lP3lA`,(G4i1K5iGK+X-(S8S))pIrPM3G[@e
+2[dU'kedMN9rq@26PH4EIFQdSq$B8[9X2h)1hX!63I-T3GAC`l2M`9q0Xq2Alk(6
+aiINHC"8lL$M92k+fEY+fEaUJ*N%pG)qM$eRjS+qPeRjUhr2(1DpT[3QVJhqC6Z2
+f*ZbVFEA9qq"98l6Hk5[TE3K*,X0,TDq@&aMQ%VirNRlVkk$k&Gi-(Eep,k!+HYV
+rYQ$R'0c%q4LcVrYh[NRK,Y[X'CC0kf$QiePJl@cfi*rSD6Z,#E[E1[aYGB8[Grk
+BAJR@GZ0a(`I*VkPE0Ni2*kX%HhVF(`,1[QlHdX&eI+"BMJbq5*60`r"J`HhJKmI
+D3H28J2T*&GX-'$'JmaJ0*6m+'9a24TBIkpRmcqREl'fMHR-[j1ih&p-`-L2-QB1
+$NB%b+4Gi&h1NAp'GB8FkM3NIEqhGk'04iS#T-b6-`,l'QAf"[0#K)QAFblSj'0Z
+1*SB&pIdFLMGk&'G&IherIAqKZ-Dl[lZr[Td'i"**[paIBf0IlLrZlk6IELlh%UG
+0[lZ9'X*@iR45+&K1X+&$'d+'K*SAFc3`*&rI@%Q6-X,#6B8IbdD'iR8BVr'Sc+%
+R3d)mUMA5B`k5J$L`P8C&GA6,qCIEL`aXD6*d+1K4(!F63RD&pM5BJ&k&'44cD)l
+23Zk10I6*0'G4d)U0'4)`-Lq[X$)ND&'64iZKS8ElGjNR'RD'K3h((Sd!8hqKID'
+0"4ZjP(2SMLX$8$ZFDLLIR83,AFbZR44irq@$JdFLlSmF)'MQ8FMkZ"ZD'"4d-$L
+F6+r63[TNbM&SAd@KZ*fid+%&(3[d2JX,#+C[-LM4qV4h'4J@HK3#9!aMD&'r[j0
+#+C-ZlrF8I@Shr%[paqU[S8-#`#4c2&rTS6-Lq[pa*Q4#'@FRle%#dQ6I62YdGl4
+`-cLHd&8'cSC'"NB%RldRle#4JB&K4pEHEMHEM3d12BAGKGJZqGMAp#CIEZlhI%h
+&pB5-$FB(8Aq4h-c'Zi*NLGI5CP(`k1"JC(&pDL&*JG4JDHqN`6)XL#MAD'"0`*@
+KJC%AXj&hSD'm[l$!NAHK"*q(Z+%RLiehIAerLhq0JAHib,l)drFhe#C&&-L$pZa
+HF#MJEMHlb)1#GZ-M6cXL`N4@&pIEQ,1cU1mN8D10JIE[X$lHKMFkMIIjB'KS@'4
+)NhqKGlQ6*NDkKGbH14fdD&$)h'CGbEkKJDIEhfiS8)STdbF0c&"JBdNLQScVlU*
+`HYf%h)[YaIEM-SaFALaq*N5CQJ!6'mDM1`0$)[mr2b)T1iQ6)YG3h(LlLrd1KGd
+C0pJI$fq0he#KI6V$'#8Q46-#r`+l)Zaic#8[`NjQ0Z-EFAI%S6YjIlbM&iXbld*
+PhMH01ZmM!`0aZ#,V2hJ6%!UZGGd*-clerd*0qLCqGml!b+)6FkG*S6+(@cX$!Nd
+!PSJ%`C%RF"-aEK5)8"(VlLAf01)Di'4*`*Q4IqrSC%k6I@%&p[-klQB(3X,[F@&
+$eXKK+8HYVD%bB1``-#Cm2U*&Ki`5-a+S)MZ-DqJZlmJ"Z*eKP8,[)$(X-JA'q"G
+Ii(rZ4-NBhVC&K&*X-$Mm5M2JSD%9p3aJjFL*K&F5+K1S4B#)`GVZ*Pp+!*MAf0A
+C%E!Q6T2MAr3cY$)b,123X-LJL9aX#qZk2arrF9rQ6*NlaE#++`4,d0#GIBe!*@9
+mkH6ZEY%VJC%j%[@cSm8k+91S5KEV#)X-Ec)b-#`X-M)N3BehJEMj'iZk2`l$M6V
+r-LNSNCeK[D2`k&K4S@$55H%MZb#FL+!G360!rX*'0MEM0[m#`aZIGdG$jeKGb+&
+rq@G&B48!Jp"%*B@&pl1iaZj#'X1,LcLMk3"fG3c1,[8H'K"1[Y#`d0aZa$,$!X)
+YakeKI$QGlq@Ma5@PT&f#)Q4Zj&J@&KUFL34T$N(Z3iQmkGBD'0a-M)[V!(8iU5`
+*%MaYj*Slb`b-$Ld!KV#)+UK)hN`0C%4-hE#)Ld*&",c3r,ar&4'8Ga3N8H*J6Td
+L``*Q-44B"5[[E$)hS3PJ1&Ld1,&M8FL*Jq6CSFS%8E$GP)8LMQB'K3R+Z33@4J6
+STPK[EqlLND%!9PKaY#F$h3d%S6"llAVH0ic)ZT'l[k&KJ4CQm,"9K1"pJBhKaB"
+C1d,#4'X0aJ6#D54S5CeKpr3S-)2)918MGrPSl[3*EB(#0Bj08Dk&rN$KUdSESaF
+m*9@Ik0K1d#jedTf"I35,[LAmL,LAdJC1G*Sif44h[LAp'Yd+-b#MQrPhG(3X"dD
+*A0jf8C!!'LA[Q@JeD-Ld-h3c3#Eh3#6RFmX@F6)NBfK-aX$"d+'$M45#jRaFJGP
+%V0N3U@0IhH"NE[fXMHIjC'4SAfld#h$cq2Ii$-K91C*HL5e&C-(*cJi`-j%"3Ap
+iL+F+r3rV`%@1JLbr,Gj&q&RId0jQBf!5Tha5G1d*"E*Sa8*Ql%MqVGhH4lia[Kk
+&#`[qJ@6aRk")43REKK8hdjM"8D14Z,r)Zj1"IeZKJ@"H&jj'lJB'GZ0a&NEbMGi
+eRZ1IGcYk8rN'0#G&[0$)Zm#r[[eB&hNIra49IIkQ9INAmR'Nl`*TK-D'0J+4*0$
+4-S63pqYZpak14Z*!6G(S'3@%lIbBX#rX,rp9hMEb+J,@*(B3&!1pd-MGNk1ipl!
+LlrNj(Ihqir0a-M!Lb-#3!%2j1p(h!Yd!R-aK1hphGk(kkfrZmhdFJS-[j#8VS-+
+$3hRb,Z4Z-L4GhI[-+'3&"@Mer`D'"JE`Xri%l)b2dEbKN!!#!R*%M)r!3(SNe5*
+hS-[Pj'"S9Z4JHYk13&jJ42#EhYq!dbFC%QlQEX`QNX56A'qq`DEM!b2cSParq4)
+QB(he0%i5f3SMLiKiS5C8b%LeDI&b"N0a*[Vl3hRV44r'lD`L&f*V3P5@%YkF3*%
+"F@4&&N@$`NG#MNB(2jq4SEZ$-p()#[aY#4LNhV#6,R0p)-8NLMiXk`hPhcUk2B5
+Z,*9JXc4RX5diQcL[e,A)X-BEa6HN9,SR3R0`)-%m@pH*B@&(-@'A)b2'SC%k+q[
+SLlcJ5GlIk'8B(*hjE#4deD`)N!#4NHq1(b*1mprNj'"4RIb#5cC$#PS0+8UM)iH
+Kd2IJk(2-+KNd!i)V'%lN%$,k+C*S5FLC[G`6$6[bJIF*Z`LSY*f,H&kr!je$r,!
+-IFbLfbUi6jD2R8-MSB$#J`*'"M&Ta92"mCA[j"-pM4'A,*[YkXNq41k#*mYJ5,#
+6Zjdl)cd6pr[Fr)je$!$i@IeB80jia1K1"jNB'GRCm'Gd#Th!X*bL8B5YQAA-B`d
+8,klNcZ2J",lLKd,#3dQ"fmJXiX*N*Ma5TVA@&#`4+8G$hmM'R8-kL`PI'[X!dd%
+*`PZING41,X-5bV,ZC3ike@-J*8GP)F*AH0GGhrS",-*IEK,b1+`Q"eQK4hR%b2D
+SqeSG!*`@8PUZbSJ@ARf'4BG4)L[c0XQFFXChq$)#C9VP%c)d"iY"K0dEY%hB(d0
+&NrEPr,LZbFb0$!#A5$k%8M!ZjLKTJ5!PidlFBTFq[T2[lh)Q6Sq"VTL*bK&N52V
+JUN4H(3b-iF*SCh%#C@4)`QIrD*RF'$'L5dKG3C[YC'"Zc9Q18GaEp"+C)RMSrR5
+!QmLC-prTlh!#IpVL4D(2@`(1D6m8l`k#*l1Sm54BEcHC#Y0m8*q)+#rD6a+kLH`
+0h[!J,#Ci[(-*K0$)-U$)Nc[R4AjIj[LLV'hR(iXlRLh)R2mLq*&1qrB-*cL"[q*
+[C1pc&D2iX36h5Za#92'i6Hp(KNAj6&Qib*kF@hSXLCajfhR)Rc'"[5hiC"D*qJL
+I(jrINHeJH0NC(Y5-`R'rNm1CNH'LKS1LKNi"R$X+,eZ2JH(N$#JB0)0&"M$k,qq
+pUGB"3$&d-#rS4BdbJBmj&fLErbQIP*&XMmU*ZGr6iN@"r*q96Rm5G*QAfJD&b*S
+c"i-#$Mm@lrNb-DJBb#j%ahG!e#Ch'R5G[J8'NjSC"UR'NmCKb*Zqq(a86R&B6Re
+r[cQNjZa!)Tf4S&2bdYGhBEcLCA1lRA-+6HlblZj)8j(j%D*KC4MB&lMBeh3Zl#K
+)pB-+q+RLKmVASQ%Lqb)Jd685fr&3U`1,-iXLK8rdSIjG*8E&DTSiNBFLr[pjJ@E
+#SfrlQ4qjAB'SM)J`VVqlNHMJIj!!FL+Z`X-ARd!bT*U`hI(RAprIELr)+i%Qrb0
+aI+)DMIGr&3b2[8+0#6YphB!a,Qb,,r*TBC!!LZZc1Rb)VqrF,$ZH,)`1,)a@6pl
+L+rrb`,#qR)qFfKd0`&4I%A)9&rJ5)-Llh%c)SlL,!hG$ldQ6Yl#4"JAB6L*P%`c
+Bm-LfGIbEq5i6QJ%l[)Z*)41eZ!E0%QFLGh%MMd6Q3%`'pS"1Q3c&NELCSD%QM4L
+iQ2k"ZlaYZD)aJ[`,[H49q!`T,rF%GjD9R"dR&,fYRqcBA1md[%bUrR4ZjcGh&Gl
+XX5'6&N'"LYp$mUeX-!`c4EblSQarZ0jTcL+d#@[)[VZ$3X,r![XcA60a*VY[8,@
+BDJ1GG&T-K@FlZ`NV&L4`AFbCrA)rIX2JEbfiRMD6eUlZH1DGkP'b,[)VGaIQI(q
+A3-YdJYJAi8Z,MSSm#MM(0(`$QGEJbT!!TXjqi,P&'6&aiLpVNAq0rPl8QGe"MkQ
+,+E'rR6U'ih&h&iXMMq(mlLcmcaBZ2[*143NlJjMj9r@i'IqA-Jd$QNd8Hfl1C!E
+A(VAqiaY#5Fcc3aT'i-5FbMIBd9'rkGKhaa5QHiE`RLbGfBf2%pEj&r3qF$jD(pm
+Xr@qP@'4SGphdRHl[Lk'CMEbr@,@MSEZZN!!65!R2i[(CS0FA3SjA&1E4ib$m@!B
+CV#raY#liP%jK1KZp#GZjKRJm3T41MdFdFE[HrPhT5[4iTdEk19cXdZ-)YM&U-`8
+mC#*EeY$,Sm5M!pLI-IjT+if0)0-ET(3kJd$I0P46D1+F[K%hILb"2FAGk'md*U*
+fM(d*QJF-ZKZ+0rkfKS9TC@S9Z-EqpKI,26&@SB*cN!#5F4epJi0J@k$PUQmhI@&
+q6Bhq"1-2PhM5-D4IbCQi8r"a#AD"jaShFQ+6N556bCIACdjcC0b*-85"aYdBd4[
+X0"`$k"ZkcTK"ZG)R6$D)!AIidc'hGp30['$FB'!G@Zq!AIi'"a-EL5C+F,a!bFc
+H`5El'd#qT'3)#1aL25LF)0'"E#Rr#Ki[h[EkRjHlrXrcM@8Ej%EYihr+0a)fICG
+9qcmMprZ1rhrpA%jpGUDlVUlHehrpA9qNViUqGArmDr`Drqq[r2ArUX,+`kNbY[T
+f(eE$rRBIbf(rlBIj@'E+rCl(kImRpRUrlG+2A4lD2qh(l52hXIJarAdPKT2LD6j
+qNrkk6e0*lePV,,Vl,kPPjPPbG,EDAj@Pll5rrQPpH4T*'YNI0NEq4k&RAfIal2k
+PRr4Ce,2rqXqGCmqcpq6*kU6XC1,*m+6j%Q6rlXTR@pVMIrRhrd5VL9m@9mZ9p+9
+ZjAN5[6PG''C$mQ(rM$rbKpBrQb#ee&VU%"(3)IB)2Z%ZcYHc3%G!KpJJrl%&MDe
+EAr@#frEYZmYZ$EIqS,IB@rG@rN@r*Yrdh&RFDbiq9FGrFIhh(jG0DkE#df0T['2
+$rQA-UjZIUA2p9cbERhi[NaEH,rP&`S[r-AYp4)kLrkMjR8IrA88qSrYkMeHSrdk
+MSbj%[95rh*IdTImN[qbApqAlQRXp2HkIp[6paTr"drPDIdp2qNidlqCIk6i9PIb
+Ek2eGP1dRaG,eN!$I53#DAV)rl%Ii-Ii-HrMhmHhdfQkV6p9TZUZ1UYHUe(aV1E(
+kUbkbb[Y*e@N`Z[NhfPYl1hNp9)[j(95Vqb[V@hNc*NVUV-#qNLXlIUT(951UXZU
+dS"%#T3#T(9@G[TEHbYj&pT1TKkN,MiZNq(*kc5Dl56p*qc*[Y*m@2,XY6T,l5I#
+dQ[dRa3)6`#I%X[JpC$mAi[bSraILfAr#bYp0e9GEh(9@e[$EfA9@I`E+EC!!")q
+QkSGEEkD2USpZ1bq$CG9Ar"XY9(Q4jKaYI"NDU4eQUVp9(QMY1Zdh9@h9@r9D@hq
++"(iXIiU!L!QN`K`dmF-!52,Mbd""b`i55Ge"!590Nhd2aBILS#I&%e`l)0G!4J'
+k`F603%('fii8!PN18H#+5&m1,q#J*AkUZq$(kVh[6r&IdDcDdE0J&B"GI4kLM4S
+kHYri8If*'[S`IZkLMVG4,V,L`Pe[aIiUli0CBfdl5lDXl$UD2`Y4e&CEecS,@[l
+1Pfd(B!X[CGEF-#eEm'"`,G94rCG"Ek&EUi)lm"Ei,J@q8q`@JKrCN!$h#ra(S,b
+[LJBkPk$%&G!IV8"Uee`'Y4-GKUXD'JSRBD$4D'UeJDqH"V8"U[J09m%$JFl(X[K
+DM6aVGlKbXXT9Sk$[92i(IiG,@9PBHQB!ha(3QYSdD`V,#kdYYF9S,E%%&E"@4if
+NZm54@)8`9N'MS(Q'dG&J(MDD$3dDfYd))eC@D&Cdp'$TJ`rh2V8#BV1QB&[prp`
+C1KQ`A4Uh33YJkHMrZ`@-&CD'd2pqR!#b0F`4Ud#5Fa"AD,3rCJad1Q"`$F#$SiL
+ZB8eC"CeND!$L(PBm%#9HY!-p`mLD3+B(h3HV&k&32DDX3H4a"C)HaN(hBHJHJr@
+Z`qLAB6QQ!-m%)(kkXVkfXX'L0#4d*B)apUl&)VDcTePJ'(r[Ab(4$ZK-m%VS59b
+Apq4'r`52"&AX%)9!LcYf-CU8-$qLK!D*64!"L*IFbpK#RB39XK`JA"'i3D%+3"f
+)G(43L)j"G0&#9MCS5p-%QJm%U%d$"-dVAJPdC%B%c$45D`9QNk8&F#4J13PV8*R
+b*A3QBj4"02M3YX%i3&V*&R"B!DfIm&XCXAMS0Z$)'EN#83YD6N-'%!-A)l8LESB
+[FB-QZJVG+KLKNiVk+24JMD$4J0X184UY&d(6X!&G1$4"H--pKK@@l)ad,fM$3D-
+B&q6#'59p`CXFLR([BS("KBU3!%JIq#j#f1KC'G#Y8[@j-XMJE)a@JM#qH#0J8E(
+STIh)3-&0FR89M#iHiTdfLq`SBD-MrITPM9VLh4j9L&V!3eR`#!ZJAkVZaH"ZhV0
+0qd`6@(@6&!Y&`q"S"Y(VCfU#S-G1$"IMEm1kV,!Kma!Rl'#&pF!5fH$1#`VR3cD
+,(BY)lVE6hl"4B[3SBlCl#5Bq")f`+`523KHiH&(G"d665NQdDiJV,#`q!p#5b3M
+!@`5@8D0C'3iqK&""$@&@lN[PIT''"URJPdUBf8#*"Q[MUMJ&N!!m)KYR,5NG6JS
+Dr1[-PdT-3XJ"B@%'PTTG&SUCH+"CAeL&$*f(JSB5QPdG+m&+#5RZMXIDdB2FAeM
+"I#f2&m#jJIJkpm#d69SZd'Lib"))kb%h"H`B4UpS`GLpAq'2-3`V)l,elX9!CN)
+G1bDDF%N&8DXMaic-!DbAfP*ApH(cAQ6*SjjCGd0!!PCTSLfYSD!2p$Tk#RcV)pC
+$@9eE!&ET5qi`JPJH#%GN"SCj6#`JG'XkX)$Tk"%QC*!!p%$A0)(U4lpC@I$dNDh
+kq#`V6$jV,'`rBKXBd#'pE%j1eTE@0@I*e'#GFbYqBI@TT)2f,KFa+M@!1*%pHd'
+l0J0lDLM,!c"B`I$SbDbC@DD4@I"MI-Sf-&CD"@aY*AePCD!0ME1LN!$p)b1"5Ea
+V4PdD2ek$%D1k$&Bi',&"J$l,Y4+(@4T,i$"*@l#m$l"H#0*3&X(#GV+bYC,@KD1
+8XHZD&l"A`Q"DaB&@9jJ9Xe4mJV@J9M`9Y["@`PkZ0*)Lri+-HXVEJ#*%eA0#0RA
+G4@fmDbVT0YAI-SlG)L&+%c+6rLcN!0@6VKJ'Z3"X!aB-XS+lXi)2MXQEf%%(9`9
+RhQ#59"@Da&Q5&+rhFNrkLeVV*8@KNJ*32,4C"baJ'L32X'!mQ1Xi+m"NP!Q`$f(
+#@N&IeF&Mqc"Br#JVIfB)$6K[8rQ$839R`S)*d%(J33B5RdJe,!-$-Rh&m!CD39X
+Q#ZZ"X)+i3Q4"@fb*f[KJM&0SYcS%JHJ#e!0C`'Ki!bXkU#X[))ed!1#X*l3'%,"
+`2r0Cq)!kr#ZB-Rim%aQJjCSbBk2'$54i+lr4QG%13[))1I@`IFJJrZBj!6,C`3E
++#`a)+rXS+r%JMGR"@Ff#$G`3Df#$iX%'[JJp@XJrHJ!("f,!0qiba@"XNq!IeaD
+5JJjV)[3S)2VrDkGE-l,GI4`)24VDcGD0MPfRZhRrrr[qeSI'rlm$4dHGkjGBmE+
+3!"IAjfMcY(4kIIk*2RSjfL,TPG1MR1JClB'p(+dD0(4rc!0dG(+eJ$ZRSdFN&r1
+r"SrD#,h2mB"Y(3h+&rj-hQ8G(0k@IcJMHRl(6lc4p[1bXh1ml4dIeqIc[AcI1r*
+SD2RdG(4rlq[dqrpI3bZfmr*dIeqGc0RdIp[qqMq[r[jfMdpRSk1D!5MrX!6Sq[S
+rV6KY$TdFV4crUl2cXl+!5R9j4e6G(4pR4pR4Sk2hFl01V"cYRdqL"-$QMdFd%[j
+0(4pV+$LqlSk2VKMd5S[2r@M)cY(fp(0j`DQDR@k'M4lE4p$KG2pHMcJh!Hp$pHI
+hqMR8HRlRb2eD20kI1cJI83qd2-P*CSD1IRk2E$RG(10MV3k26p[4kI4jI6#'c3S
+Y(4iHMSqjQrCp$r$l[RrD"hcY(ZFd(fKP$J`[3&X,P@@HGQpYl)51D+L1hrfd6X(
+jZJK24dH(R8G(lARrKcrC4Nk2Fk2rK#)(r16XZKSrVrh6UJ0qhRrY)-Z'6Z8IS-Z
+Q#VTji"FdD$q[cJ+qcdYVjfebZj(I![rlCi'D1KQT+XV4lAR%92Xmc4rASriXL[S
+X'iC!%[EcHL#S&'5"R3k15!R1rZk1Ip9&H#,2bJN-l4r54GD'J-H"ESrqKAI3k5,
+hlVMJ3,84-NVIkd$IAc`%-C(f33L*MXIpKerkp(r$KrM8JY(RHFR8HF1Np@MS"[C
+6$JlqL$IpVp)%"b@8$J%T*2h2ZD1IQK@k'Glp(4jfJ43IV)p1Gk$&MdI1lBGpjfI
+r&jq9P$a0(SJMB'IaXI6hi3)"q'04Sk1cdD2RKCYPbpI4cqPl2X*"mVmRqBX[ra5
+CChED2ECqGSp2eN5[Yp2kIEIDc[CcZRdIeqGSr9r`qU1id-rd'*eqiPC)jrpmSFr
+Sml1"d2SbXh[p(+SqGRD(dD1Hb%hFp&5CU,(p2m5"(DqhNp-*,4kIkp$cY(mRZIe
++*TK*CfMYa*@2HrCdFrf0(1p`LPc4"a"IAbZMqR4cHeSp)Ge4r)(iHrBMa+(!AD(
+RmhTjqEdr2dG$h0(Y@acCfjlN$26d-h+cqrce"a-ElrED1j!!J228eHjd%fhhG(c
+[Z*j1ESNe(ZD24dIU-MG%1cG(Tqhq6ZHGZ9+,pcRChZ"qG*0Vph0d2ASqb"ARChX
+IiGiR6ml16#MTbFV0p[Tk(h4B!ZqfdIdk1Gfhq#J)6UHb5-rVcYU*!1GrLjfMrES
+d85'KPI9dFlc5HI4dI3mllAd[EdFll3S+N!"0$4bKfbQ'iG(qdNfkBN[RG2TU2P5
+djfMRMRqQ1IkIZE95#Ii$YN4h6dIY#Nk2RHEc[r(VTPk,#b)`K`1Mhr-bZ(qR4qi
+5!IIdHN$EerAqi6SPM2FrD$SjfMhqMQjhq"%0SX)R1rf),HhpVp(6jfHTX4EY(d!
+5jfMRFcfrEd2EdD1Im,4("CARG(+mdBlTCrZD(h!2FiqJ(f0b2Yjhh4i@Ec#brkr
+q$SK5C`+E+6P1RkqKSp+Lb[RRHhfRDN#rFc[Bc[E#d9J$crYHIk"3pPCq9drerek
+1GSHIphraR88MARNRA6cY$4kG(0)`IAkG(2kIdH(i`5hSCp(3p"1HbZRS&KB0E1b
+FlkZD9YFlpHKh2e2dk24(+D2RKHqF@A&9-1"cL0JYjC[DC!%rYHah21c4`'Mp&26
+h2X*#-hkZ5A!LJ,TG,p1ESpX49jr1+"@88k!mJ9ETrNlqMSj@jp[eLL,crYCSS'9
+SrC8I(RqjkaEBc[ZQ4f3ScYc4qVq3!,NJJqec5PJF,4,$EA&MT3Xmld22$mpch-V
+3bP4dSr-lcrD%JmrmRYj5VKrhkCpMQMPID*L2emkMP$KLfDb8$Tp-@hT*Ra5D+FX
+A6ZRRCf53!1`A+h,RG0@G0(+r6RIHdFV2k2h9HQ#KC56qRkZIk(j1RRd9$E1p$0c
+`KK19BqBi95D$fNkS3[0bZ'1f'0r*lQKjfEQqfVZQMNrN!Mh1GlG(FmlRC[X!5+@
+Xl+dIZp(T!mcXr+jhfZNbEMp*DQjb[Ujr1pR4h19Z5Ze99N022d2dSSfe@NcHIQr
+l%`JlJ[!UK2h1DT4-Rl@Mjr6d#bjrASj[0mhl[kD16PHaSpYSD2eFr1c`M5KlkZM
+p8YB&lMqhZG([qF0(l"EYb[Uj@MlH9dqF9JSdbMcd0'Mhr6lCKrHjcY(3)ZFhf2l
+8GaEBpR3bKbhIPIqckG(ZI'Sj3,[UjiIU4,fFrlT%X-1@cI1SN!#8a+pYdmr1r5*
+MRmllT)H*+TB9N!$jFb4a!2rdc4%G(h#IX,mYPGX5P!FlR4p8Ze#4Q3m2j-(!(qr
+r)Vl5T)c`l[ULfC[RGXC3@L93jZMfLGrcY%PM9LSZ)"6Q@f5)PcC1Lja94PG(2l6
+4kH94k4$cl6,ch1dIUp0(!#)-23cZjqRQk)6HKRID*U+2krXk25qdc",4r@C8#'*
+)KdqRQUb@XN3#AGSH*d+c(@C$e(2qllD1,*,GZMRP-I6d-iRd8p)&KM1rr6l2X%a
+)1-llAb!drerDdHPrJ9!N8lh+GCT#S`35pDL3!)&Jj(1X[NNh2mCHCkE$`8`)GfG
+jfGde8Q88Flk[eICpch"$dbI5pSJU%RSHciaLmH*Gde#l4d2r3M$*@+2qk-05ZHG
+jp(3p[3EEE*V60%d@Ni"mBVRD2fQ@kd%2'paKpR`29-q8-d&qM"c3`Kf[HmlQ85A
+8,,S0KePIlIUpFP&6d-r4bIePAc+hY(Tj[hIZk25kAXPA,*m2295HIqR4pCBMFiY
+8!Q%hqd'CqP@r"e(hHj!!T`Y@)fJ,PIpr@lC!F$`MDRCcZGffFXhmP-5q8G$fIBj
+I6jfD3AcqFMYr*R8IDCRGYc[aUIFr6SpYjQMSr4bZRPFlh'k5a%3"rkRqa2Uh,P8
+0%@(kb#rXja,cQk1jr!6XjqJL+miIP4d5R08%C3PT04SrlMMZjqVS#3G,fp(erF(
+G*$PGD#)qepAYLBYBY'DHbbA2E*qbRJ-hTj[arZK4Cr1lNbM[bHX)ErTQd4PPU,l
+P-jdp(eXhfHND22VdFVZHfdFVZD2fL,*Ve0(RG2l[h9(kXp%JS&YZFUMfS62XNK2
+6dIFllmK@XC+DafrrSi6p2e98#UeXTBh5)hTlNUAd2ejZIdP,ApV2b4I9CJBQRf[
+Ud5H-$)P!r$TqhpA4k2Z$eXdLJjfKkrp4C$cP0(q[0qk)9k(YEP4Q-9AcY(1,Y2R
+CA6fCL-$lqVYHRP$d3rp$RC2-r*4)T4f3!(F@3p$Sm24p[f0$1d1MR&'HGSqId[U
+V'*Z3!"C@!88Gq*N`mQFU6+0Q(Tjh4lr4b892f6q!JbeTbFl2Sp,2kAQqf8EUj#6
+bT%He9eVTqhdp(q00*hrpAj%L+Q6dIb8D16RqH5B!J@435F-MR,+2qHIRjA4k+dd
+Fl4rcj`HCPE8G(lQErlCR#XVC%JpKB@Y$SP8j9Y4b[El9+Z4eC4%cdc($q[KQS)E
+B[e90`@VdbCER0Sc4jhfFlTjhYQiBA`cG-$D@J6RGTrZM8pFjH'jlPP,IRVD59(I
+d55V4d2`CT)8PNcbG&Xf4VF)QmdJ@aU3Dj21qecU2R$PrB"jh+bRc-fdIbI9*qL@
+-Bp`R4Y1F(#1llP2Irhc8lSN',CEK2D$5HcZGPC5`FYc5-Vf#*jEE[EFl[rB5ePV
+m4`Pd$E-NS*h1d!V&VkLmJ+$9crN*hAh9A%N13%0jFPPlr1p[f[BC'BYRkMl!Jbb
+121cFSjNc0VM3pX[j*X1GSqicP!IiPcB,Jd!"F%kVqXV2ja`!-cLf9hIV3,kHKRp
+(S'PdfKITqGlQGSqqeh&(cFV4p"'hRGSXKqMS&mc2pp'!&&cZGd[TjAIL#Pk20-A
+M,l[YqF@Ma`6K4k(RjV#MdHp'"A,9Bp[2jhXCe(ia2SYjAeqddHr02qMdk+Z)Flh
+&*VifKhkB23cqrprV1GqV4jhk4dV*JPC1%EpGDbMF"hqqEZI3CCVr*P8HG4cHfdI
+F+MqGq6crpXV4rm,JNjRb1M4@Upl*Z!&(IZ'FKSqXBV&BUlrd0$q[0pmdDQD(TD&
+p$2jhE&Df82i@r9jrk35M[I1b5aelL*Y$FTdqlZ6RaR+8pc4mlfrESJA-5UD[p2X
+V,Grh0+a6mFlZFVc220V6*)rHNV+fHCRRIpqBPA1%[m'GpaQ3!,Nq3qMl*`kSiXh
+FrVkIHjfY3Q)jqe0-lf%,GVR$U1BE'LdlFd*rTk2SFkMp(Fk(E(3I%09Eh1@r9hr
+1pRTIG$R96jY#CSG[E(1A5pPHZGdHRRjrr9Q)2+k2E0a'p2Z9-IfH8DT1KdY(lT3
+HF!f9c[mrCb[A41Fi*aXEE,TfHF#@jl60r)CklFq%Y[JJHa6AB8fEQQ9XE55jrUR
+'cY&*(4rfcNNH8D9bGKRC[fZPPGYrXZ)N,j!!R)hMQ"Q`#&0p(mQErL&-`YblX6(
+Q*%FJNc*lr&0ZHL+`YYMq20@m8U-a85hQY8%TZjh11$Ef-rYZFBS$QKR5!)TXd$)
+E#cdI2mh1bYGRrFB[0(RCZKpS*h2r)Z"P@9+1ZrkM9%V1j("qfEA!FEE)@Mk'9Sr
+c,3V(@p-[*#1M"S[reQD)RS-kk4--DE5hKf&6ZIX"8V*kmjZVqF+c+0ICd1j-Tij
+i[6mm(IVJ9CN+0`EqF%-A%eRJN!#4Y+LcB6-+h1MNT`M%f5+Ua,SrjjfjjhhI2ra
+8ahfY!dN9MBA%!`UZF*qcR2HYpSV@rMj`8SC[E-`qCrqb+SSfFfI0(T,4ek5h1a`
+U)6R(0h"Iq[Qmrq(h2bD2d4jI6*@mV30q9E$!!rfQFSc1d2Fmr3'a@[1$eadL*hL
+Q9#M%%PqSR)-PDCR"NiL&'MaZKrcpI3r6PGX1h,(R4h2-qdb1N9R[eRKCfGjkdNr
+34Q0bl'8HJCmh4-Xp@0FbMpP6)rD!Xbh)`PcQ-''2f1jdrhrSE8iDN@bVhr6Xrb&
+fcR'khRp-Dhf23cHJf9(0*G!EQ9`PpcG$ZG(5p-jV+[dj2RXYL!HBbbL(,'r[qjm
+kAcY(Y"`*DmpIpAp[XNJLT6#IqerJA'c)Sk*A++QhXP,TT-f-mh+k$06$h&)kD*e
+(1iIMFikcfFBUXp)0RFid6LT[fFlf22jbQe9RESIY+c3VDUQ9qQhFJ,"a3!c4*,i
+HIRQBVR%eSVT,"Rji'r20MV3$Ek,(1!FkG(FKKjjmf*UQD(1pR1r)3a6GrV1H5Tp
+&'F4",XK!%qVSmc0qYfSa1KPCqKPC(QSb[eqKPHhQNK*1"rXZNi@h$N#mi`Zma!S
+Z!*iLRH)bc3llNiaHLA'rZXdVP-Kpe3T9q8l!hQN,L8lpB+XPR-2cFherb(9'&90
+j24lNSrkARk24kHMrL@3rmcAQcG#Mjr6crmqMNPMdDSI@@1MSf8I1)"G(q$Aerm(
+c)*X'mrJrJAP,!8H1[$2EeCIpr(h8%'kAQJQ`FcC!Aq$JJEEp,8U#9+h8-dmmQ$$
+qf[)HH6#2@E,pMb@HhErm2-"@rL`B,M$!hErYi*p*pCK`5SmU0J`IYiNUhZ*4j3q
+SQ`EUi2S3JmFp"hN`4[rbP@3rGql+JKZp2$YSIq[eHqrSrSrlIGrrB,((qVr0rmr
+lIdId9HqrEqlphl[q(PqEqRp2kIrRp(rAqMqMl'cqU&CiQMm-!hj[fm)+543ic2e
+DXcd$B`k@$NmQ$Cf)#BhF!6MBhC5SqfaS0,'a[a52SRPTJe%E#M92$qGBB2Sf9#E
+`l2k0Tp#[fjqdf$B9NHG@5Yh+l2'p(`rR4ThC`EDbmG"k01eFc"Jk%(`26X*AJ`3
+f@&8if0Z[aalD2PRmHmfTdUAJajqmJX-DbLRGR+mS%-0,S4m(MamEL`HC)`FE$eY
+PfXL(i%&Ip##,'l19ipC%#(YG*aC'-"kbRILVjfAYBfA$Y))hd),8%2ScSI"NA&,
+DerIcZ"CBh*NB2iUr"3L249p'#eTGR+Vm((YF'iaYA'G#(j'$HbDqTVB+N!"iG5Y
+YD@*"0l+(89R`)e,HFZbRF#cJp1[q4(Z`4Ike+P5$JeC@e"*1M4Tpa1YCfVX[NB2
+Tf8i)ECFQlVkQVNl65kA53FDV+l@)%X(J`l1Xe%DP`24p1YJ"*HeJ)p,Fep+T5N9
+C@YLTI`B-(Ml1XhPE'TH9)`CeRJb*dd%9I8fJ3ZRKMCQqVrr@$8XV'Xm'[`GC)`I
+6Vm'4M@9+$DaJh`K+aK#GVXMdbdU[P4X($p14Jp9"iJmeJLTh&*!!MeJ)jZdJmI5
+4jdq96mHEd!LBd'A!pa,Y*H0VCZc",)TE1(55i,+GkGR"*XB)0A(aYAAeEA'fHNV
++PPMDbEm#$dB)f2+fN`%I+Xi-EDM!-%ZPKhPIM8T9P1eNBqeq22PE19"kGRAe2-j
+0RLEAK5rfX,@fI`l6#Z)p6MfQ$`Sp@iY-+CMa9E@VH6lc#UiZda2JDf+qUq9`V$B
+i@Qf1$iPT1!(fHa`GeUUrZ,#GR@@A@eNU(mp@lKimEqQIFIRalA,eGC,`F@erTaj
+G,RbrP8YRT+f(C9YKJhZrV2R5+R#X*hQfQAkFDTaBH2@A'AaiqAbimk#PDB9lE@@
+&Kr!PCdV96Yr$$VBHeKpH(dl12CH(2cq6$aZ$mR+r2YZrid2Ci1UTbrR3mf`c,Ak
+'UfhFAN2"dfhl2E6-@,jeap#(3KjX2%eAfHcrPrefqrm2ihf1iir'Z[N3kVl1%!1
+kfe+YXrR4[U)#52ScHPMFfPaUR"br$Jfe1eXCYeY[V9h'qM0[,(arr9G$dX+C*m1
+XdfffmcEI8YGYdZi[0Yp#AYXAXqiKMlDdfeE$`IXr8KKdPjlPVLkDVaZhmDV,qIM
+c1ijZEBEEEIaI3kApe1mNB[3ZSI$qGUZmqKR`mqeqGbq6Xp*GD5#H%4p'[RfXlCa
+rSf@PKi2mH,GEDRdX[`m@iff$Cr8PBA"lHai2cTYTQH(Lp,EmEk1*iG6MBYE$iq&
+HGa'X"`X2'lL02ZShfqkRkDVTX[P5qiKqTHEDclLmNh(dBq[Rfm'dV,Mk%cjfbN3
+q(1e%U2Lr%N`cINr1ZXA`jr'Ki0ap5(Ek&R$cIm0X[(KYZ0cIrHhff2`IRlDmKk8
+1kam1T*LdZ(qrYYaBEI6Ga$dXINi8Z$rqm2BqI@62RplrqrjI4rcRlchT(B`kZiq
+j2h[+QGMUYYLk[djIe00mlXpYQF#eTq$QE2P5m,b[+e@XrjD[cGlk[!r(kHGbTIE
+iA"kU(Qr3JREDP`D#!R2Vrce0EDBIiU(&pi@kkXGeHEEq@Zj[dGe+b*-h#eAd)H6
+pZK$YYYMmEECQUlREBA5fe2JlDiff&+m1KdX@iRbrSkV-PLhrSklb[JAAEipem#(
+mrIr4k@fm2jqfi2"mEk'VKkAdK#XbAY[PEAXmIU1*,efFl@r6I4VmF@q43mHVGI4
+r%,GH82$aB[kFB@lVTHfQj'fkZXZ2Z5pYHEE)fhfIhYY)ff(2P$MT#@qiqGm#2Mb
+YA[YlDJ0Y)HE2e8U`fpj*La[+hX2,JfGC&p5mfplim2'aYj+NI)epGLa9QfRrFTq
+A6hN9pqeFH08j9ep",C`H$a[FqMYYY2ihm@,YRdYParV9j0P"m(Z0i5Zl6Z1$GI!
+Q6+bkKUjR`0A,q92ZKDGj[@V6rklV(dm-AbYMeFrZTrqphYGAp[[[irKqRGI[q#!
+1(QlH$"eQrXrhf!A#Z+I%MimDRlZeZX(-iYCjN!"YXH9I9R5qK0rHfhfkbYp(qkX
+LrMUh@Ph80E-dYV@APM,NX@EkPKKCPaMTCjN06DARjGj[2"UmhUZ*Gh0apEchbY0
+eYXHAYX,XrP@[AB9YkGIM8rGaUkmff&YUR`)Gj'aZH,4FISaqEYiFbGiIe)I6eN(
+0UeRNF(GAqfk[E3lhUZ$Lp,jh'qKfACi2'qTKi8f(Hm1$E9G9Lm+'bTbYA[q&,ar
+-p1d`Yl,rT`BIPdl6E9I6p(b1&$km(`+bAfZq&Tciq&B9RJcFcLLdpAh@2FI@apR
+a2aEc2*9IqQf*Yri[TI8*A[R60Y`G0LhQ,&Bh'PJc2(qY@G,jhMiqf`Yl$bE,EDA
+HbpI"e'lm(PGVm6(Pi80AdrJ3q9YBGlTjRlZ2bjPV6dd2#KiqQYF+RM`q4DpAXHm
+f12rR-ZpVhAmepmUI&$&D8ZcREblV1"(RjFZI&2mL4KFRJ6-+,(i%1VLalLVUp*C
+3kU(1Km1dTf[F3qa&h"5c6[-IL5mc96qc`TPa$l&a$ml96jPA2Ke8ZKRGRMbmcfB
+HcklZ)Iak@bNh"ErcY0K*HlAAhdr9`qpZr+fPY&2rp@ZCblUIblc#lM@a&X[hY0$
+`IS5"chJl[83r+RDL[ap#(PercSHcUc)f2&1q"TCQ$UTpa6rmdlbRDeFEaiFZ0h&
+ah%Z(Eq(KCd2e)I$XTmrap[$l&Vp@CMH4fH2TTm[-BjR9BAUMNEc#PF+'S-,-kk(
+H@&apQRaG4fH&&9PA91(bT%ZRGBdDG$GEcDLEkI'm'93fPVDpa-UqC&Lh8reBYM6
+YFHR2TmAbUbec0r,Tm+kRqpHB@,LEqA5(GiYj3e@$Yl5R,X4'0[,XFq(eBI6ZTN(
+Kerf*pa"2rZL[iGM6PMYq"[,UC$Q@[eUI!&BZ+X-@2,R`kIC3bm,i&ar,$r4GH4r
+[EGVVrr%8[(UpR$9l1caZiXSG*&MH4+Tlf(dl@VD3!2T`rLPcjNrH`qCDdiUHedX
+DR,,hGVCipa3j%ZVDh&$SA@2,Uq*$fGCH3qpFCPeF80lGBfCiNM#lL(9c+9VC6lL
+TiQN"hMHR+j@eM8m6i'pZ+Ge&,kl(jF[#ZlLVkFc#p1kKjqeLal@RbSEAE91"E6)
+V@Im$D3qC'RE-bC*hF@KIVhX2!MifcPcZiKq"&q8Ip$`qSMjPaQ5T0K$a,U,-[*p
+e9YC'&2m5dRc+I948[%YE$#ZXG16hFbRiNMAjHkj&a5eHrj%0lFBf,Up2G3ck(Q3
+bCQ2$`+cN%#p4@3m6YBX,6h(e62Pl12M`lq(N48q&$q+,(mMDfd@&pR#QAqRbiGV
+Ddpl&MMVq9$GJ,NBA+l1(E9p$S@H2,lLY%*Pf2V`lf(Rc2hC-BbVBB2HdqYL[mI6
+A&1RaafraX,L3!1RZ2jFIH$%3Z-4D`m5I[,LRTiFIrcGF5IqABi@TLlbRHA&1mXj
+e#(NpPDdN"DF0a6N`m#%*cP@Y1CKE8"QA8fF2(Kpk(@fFqiNBrQ3kfibrHZX+A6h
+d1($q+'ic)HcMiAVk5,,KlL(8*KUqT[l%PXB`XHVLI!q!Q&UMLjr%Kc0U-*-`Z9G
+A&AH`kZkKY2U@Aa-,bYrDiqdq"&LEe-0DB0$S3lb2MbjfqMB@pX)mrCF1(P`m5T[
+iGA$bB!XGm1,j!ihVXIIV0I[E@T[l@T3pkiV,V#iF2(LbjH0e82)Z-Ei!`A%KTBZ
+pZiBC%r$Um@'V['-$[+b(cBBX,D@ZZ056Xl,#$Vj&V9i!`1&DrqX,rc$Hp4,lrD[
+i`0TJmZ(K9q&Kqp,VIAKm'(-PhmQ0PlhLkH'`Y)IlUZmiX*@RMa6rJF5@C!ZRhPV
+r(2p26`T6K8iI6LapV#5!IqFIr5Idm,pUi`Y6QEli%2+q"$bHAB9Nc#YBGUd$3jG
+@(@3lfic%ap@mNKkbDd2Cd`IP$"d[HPF++IF9S6)`@QM'H*VDbm`VM#i9CKaX[If
+-ZI,TF#jY,A,hpaQI!q"#-&6h[Tc*m2%G-&-FB+$JAXZqTl5iqh2m,-h``-UK3pH
+(GHC$aE+P$Ul#b`VG,rcm[I`qB6[mN@@@D4NZRDjI2im96hSH2D`pV(Ur!X)F41-
+Q8jQ2VDcbUdS"RI!hhQDHkrFKX*FqlKPFZ,$Tm@iTlfX#CJm'X*GFA`EA(m(F'b,
+CeQmKipaQH9$q+eKYEfA$$km[[23V#fI&Mle4e3`jQV*$EUi`VRGBI[@FqC1[68B
+Vlr(Y8N[Me0E(b1"YAM!Ibip2Cm#erUKi'CGDZ(rDIUq"-f0@&X!P8331[-,rc2r
+d`ZR$2f@CUDZqhN2+hM'"Pcj@@+G*Z+QB55Eke0AIY66mV,bd&pS1Pmp(@fZ-,f4
+2`l)Zm!KKSEZCM"lAQ&DZ,lAcr6Ki9PMc[HeYP9l@elV(kL(PEk,[iH,$-l&e8,k
+EDKC9PeF1m+TG2`)YV&5,KfCF@&RMa@91CMFLXZ+P$dIP9EUI$(Uc#bYG3%B2P!%
+i81YV2AD[QA(Ulb`0D2%Z#q2kk#)BrJaZkrMq*6k%0K-Rl@'9lejf812aE@Rm#Xi
+%2T`H9@@aNc4B@mPh-fiaXZcPN`82STHSI)KZTrQE4qCHEf(ZQ5mqR@#me[(K[BU
+FAf+NE,i(!eF0I@DI9aAjDHq[2TkMdl8Yih@pKr4K#lkqQiZpdC4Rmd1C$G2GH1"
+$a1"$k2,X#1b'#I,aj9V6Z)J'Db+RFCQXV1eY)E2#P6qeY-+ebqA$KmH9VE@FPiV
+iCZqkKLl3mHYYFX3qpPdVL",VbD@pf9GPeGUeFYlDq0$`,Z(dh8Z%[BZTF)Gl[EL
+VGqRDYA+VDf%LR+j%2(N8SHeX,1X*ElM-rDMe5@R(ZX%L@PfKJ&YFbiZQf-0ED4k
+[Jf"(&L@XF@9,R&KEVi(CH$Uc+!QB@XKPBZQkUiRm@earJ9RJ`q2CB-)`h2mU,#m
+MZUcC`CI[H2aiF@c9YAa)H9-RqCQC,m5efX0c0C,@iZ+4IK`Df42p29`jH(FIETm
+$m9aQD[bZSLrHKeHBB@Z"$lN1Vp1kLaiEXP#p1lHPcGf+[!UqCj4!'9ld!rL'X8H
+-SH*&KF@(@bmHiLTBZXY0MPmZiVm,@@%FNG*EipAUV#'4MaXb9V,NQX5j`pNaG0h
+,TBq(*MdYP+TEkEf-QeUlhH`Pq%ZCE'V-ULc)c1"Uc1QaiFZ4K4IaL#IS`K`FI"e
+(83q*"b)C"Q)Ha"PiBZ([@[fIhX(K3ql`SIHV,M-YSE#29LUh&jMm+`XjqrXm(K4
+9iJ'YKM9HiKjGVP`H2U)q2fq&$FA@&[KXEMYiHUZX,HfY+TC9QbYFbm0XDikZXq"
+Ae*h,Kpkd,jc9Sr!8,%TXZI`"c*H'0$@c!6h8E,+'Ubebm@9IdiCK`kjFHTkFcVX
+HlMFPfXpY9mMP@[S%fr,-P6lf&bM"Zp,2r1C#3GrThR+YVMX5469bmM#,09TJiI9
+%FYT#`$5jpVbZUZTpaQFHXi9T&8r%4&pRAi@qH,55*8L@5'0rkRfY@(6B8-bRF'X
+pd)BH'BET0NPUeGHeDUGc$,Rk`X"`qU@!e24&eG-P@KZi26Kh[!-E%2J8dY9c$[k
+qbUb[a`q[Ce)',9&r,Zra@9264kGj1*K*mUKV5f9VA5ecP-q4RMKU(,YB)0jC6rr
+qXZ,c#rrkHXl@(XlAYiGhGB@mYD9+4!5Sc)HbkU%kMPECclc"jm1dQ"&FUCKHUrq
+@Qk`KDCfrXm,dr-Kbrj!!TpqhMm$P%"r6f9@m(-EiF,clJ@Vc)H8eDV-R0YDPTC`
+rlZV!!FASc)2HVidHR+jj19+jrT`qRU$*"ZTf,al6j9,Plq4MLaqBm@2GBYbb8cY
+Hb*6-Hm`S5q,KBC%U1jl+'K"`SaQeE9,*6hZp,QI!YFbCVkXYe+G[A8Tf#9GjI2)
+U-E`BdmdEm2K`fG1maR&LPr@ZTh#Z)p9,$F2PBC%lK5X5k`V8F*fGR2`iCH2@5[Y
+cZ"%5lFqmmb,l1CF#b,9$eCfU[4V#8b(XX12Mh'0biHAD3fY2dGqCCATh9ADb9YB
+m#A2j8-*U,lfA1!6F&QN@1aKeYK$@mL%RPqCPpP(UILQI+RhFKiXI%[DTL8Lac4B
+5aF"peL&)jAD`kblLqY9mc9c2N9R**5NVmSP(QB8cBirZh@$cq,Cr+aZ,[V,(l-a
+BmGiXGK$18SYIXKBM,Q5a'M)aBYNaBVLT8fXEJ2GBLjNiX@VHka#ic*hJa[L6jQ0
+Kq*!!fL@+GAb@,(MeH,C8qeM9Ec'DXQ)VF(,PdU(,LUFHbTekad`emhPh&CfGj9V
+-2mmldjBXH+aBl@ea56mUUZ-D#d*4iELrJhX2`A&Mar4hcrLabifhY-+9f6&Ni8-
+2ZcGNPLrGHkaFVGeDCS#'fR$$Y6FRRh4SccjQ&PrL@32"l[+&Z06qeTjQpfX[UkI
+TmQk*4i0r$DB8HV+plNmADDD`[-(hZAChq0aq&C8qcRh'&aATBVKLa4X+eUpN(19
++lZiX@V&e6&L,*1Aqa1,Sqih*Qi+QII3m0bQHerPE619aarX6qeV)ZkTqQ8cpP$k
+pI(c,E53dUNkKKjCZji4iHH&DjHYKpm6MrJk@,dfV&jL@,h4`K+(MkZ9F4m(m82M
+`pVTSIpmIKpV$HhSVjPN@Z0"Ci59rj&GC6iUAiSIAY$,1b)p1k`TQ&qTqPJkJMPf
+f0c4BCVL`@%fDUCH,$PqQ@#pl,q3CM[p9arGMNMrQ$83ka+rH2PAqe,`R+eF1pZj
+Ia+[TkZkZQbK9EC,"E@RlmLIpQ`deTqrJm[Pb-M'i9`+rq*l+rJTAl#EV,M#C+"#
+DLc&HQTABXDT(R*rZBRqeCRA8hGqhDZ2pp&fVI*(qi9e1`lhXY,$5bpPB0IlG6Km
+@rMCR8#YIXBmUKLT@S@8[f9)TI4I$Lm1Ii2N$qX(Nq2$V(5YGV$MY9ZG8Jr&$j@R
+Kl,hC$&Eik9[j$9EeMp@`0R$'fe@ilR"pk'$@f&P6K`qhMakR2%pfXLIYEAl"TiI
+kdpkFS-(FZIG5BGB2P1E5!APE9e5eD[C9SXHmV2GKie$Y4r*RX)#f8qEraSHph&R
+qe1irVf92i4V[qp$Km*+j+$Bf59q9fmHRe6,kX-2CN9hV`Q8pBB9YD@@-G$r,aYj
+@MVrM6X`k"S88`k#j'p$Y6'j,RjQe2U)hhTh"VbEf9irJl+(hUr,[HUdYa5l@[`5
+e0fYC`SF@m`H2)aq('c02@`kbAM`h&J3J,K"R#m+b@"mYX5[RjI[A',FB@lm'$`E
+54@@[fBIpjrMjJTN22ZX,9`lc53@2&KiQdKrZq6$XjAiSG@D'H0$&m6pjL[E(mp-
+mp!k3!0*-FcQ'VA`*Q$#GVH9`iIqH03%0`q&$DjIr'KC8ZIGA@&YE*k9llQa2*9$
+`Cpe3qSPJr%qb`48c%e`,Ydri@#eJeX'rZ%Vi"E,(eYKDI&Xk1$b1AC9Iq!VhZY9
+fj*clA"jB`GKZYpDfFq%kZ3F"X,PfMhSCh*imM#Z1aY*fmKl*6BrY*A[S3Q"[N!!
+qq'(,r2MqQ&YF92VY9lkJVphC4cd3aX[Xl@[Ul50Pp9B4XbibjCfRIH&'PdVedVi
+Uli9mjNeKiPTKDD(C446Sq$lTC#eH*HFZ+6(`V`hRkX@&,fdkP"IcmcLI!G,&V"B
+[qYC$`1Uj1p9V[@EkeT&RfA20I5(-+@bCMdkblKe%0Rjm2T9',(`aBqP"`V5(PIL
+Z+R!"'-KGPJrDm6YBAIe+qH9%APa9QB9eF9(9,I&9Xl#c"HGAfXAG9IG[+caiaZK
+l*8Yl+dbrMBrL@PR3irF@AM6YrDR9!deIC8U"XDV+hQTBTh2LTfFqf+6l#'DDkqY
+,HZbVH6al10GfH$[1IF(GjRm$hAbX2qc9KUh(G2&LePP(em2CLa(hdF+0VBcYBU(
+#NBr)ViFXd4[-KK1M26,kD"&)@Q0QDe9KjI[3iYV$[lAZSBBjSC-@1eNf3Kj2meB
+YPjQRQ46p2eA2YFH$h8XAmd--rJAV9Mmar5alb'dhrThRm'A3aMlHV+V$[l6j,mV
++G*GrZ8I63mSG"GiQeeYVpHV[H%5Mh9@JT5-&5NB1K$X[-ZYrDCI*ip$KHp(UrX'
+A&3E+6E+8P8c@eT!!lk9biCkP*Y6[@+8Li`VMj%M'MhFM"h[b)EhRTD1DqdTAVYT
+RKe'cXirp1&fYKQ5llq1PirJhYV'bqiM9If+6j@IM[&RjEdXm-am,4[QV4aBDFAH
+3!26RDb(,-[F@Qb5dA[QE3jbIpf&DckfdM92Gj%q'fPcfV0lcqPQmU'6[q,GiPK@
+U8VI`caCX&e6GM[+E[3Ip,2jX2-*2rceGV`Mh[lhPhPTD6hZXh9HC-UD&R)SF,Z"
+C6[GYP,f*e1Pd,H@T4'5R9d1kT3HM2YG,D3E,m8M'V'V$bNX2'T2PBA*5B[L8RFT
+2,8T1Y5`lqA8Qc9E*0Q#i5`H[A`P0%4J$XjlZQL290m3mFEL`9N@2Y,f'9ZT'2Xi
+Gk5MaU[D`Fqm2QUp(Jr1dN!"@ElC`q2rUPGX,(@6lb4K3l*aAZ)rYABHehrQDc%p
+fK12MiPIiEaAl%jqlU8E[$UZDXe1HFCK#9jY00@##dXBIb9EbRGlHiqGDpa&LhPT
+AiTC+Gdb96k2H4D92CN@Ar529q#rr+aeATb-E,PF@0qp#AeH",q0p'6-,Y6kIaj@
+dXjQNp-`J5lkJ2hL2`XRImXcIelAlPpr$&@jEY9T'1k9EeAl9D[hdZRf81ma0-+[
+VG+2fLTbMmQk8%AeTmb6e8HI@ePaeIrL%YcA'&`*PM$bDEqP@p'(@Erc0rLIL1TC
+XLPX3LA5plhP5jG3kZYhTL[p1kCUIffXEXYhKUJEk(-pfeTh9CUm2hB-Z6DGa$YM
+$RUXb,k-2"TQT"'Z)e5bTcF@9`V@`hjZ&09@K[iXb'EV3eV+PLl+f,iZYK[Ec#Rb
+kG[D3!2Q5Z6(XB-[dF+edPTYSdc"iYI8PFG+XRBpGp5(Dh3@TQIijeGahe6Lh8MB
+eG@FfLXj2IQMN6!F'PC3bk@XY*fYLUBGHUjUH*0i9R2k&HXY1)mL8)AR(K!QF&4p
+rZrKaq@B%H(C$J-ZJH9QirZKKJqEQHEDci[LCQQr&(Tp6Pl5XK&Ch95T8YIlX+9q
+H2K9TeQpIriKSH9FCPl,`Z62[2GKhd@-5A-kXHCY@GA$dlSqh1kXiGp`Yp`YDG"U
+0C(I6hpaKFLdrIR5-ERV)-Z1ZapA&NBA+@Tem6Are[`VCefCQ&[EM,c*@GB6lMZ)
+G9(XX[hV6"m5iM[CA+IqP,2Xm[dH$(c0DC2,LZhVTA4rCrlZ2)ajU[R@92C3iNVP
+bTQ$bj&EUkbaMA69If1,F9H85EF!m$dr-@EhC6q6kCM!QA&5kKmcP@Y8Q#q9Pf8-
+bP[l2'G+r(&IiD9r&f6L`#XF+BFhAPQk(&YXb+VEA8mb+6%"S@&TK1,"f[%mM`BI
++l@(kH$[VA,q!m9rlC69j@RVjpa$HQhEj$&Ij4p"m2*IdX&jC`qC`YpadX%"hYSq
+CHc+A3k&E)aZ8eB+EYB1VYDEVPjJ(c2Gc$kVEAkadMMckGV*KJbpV'TEfbRG#dRF
+0k9dN[TmHdTHa)br(m3liELZ8*jjc)ab'm+d,GUbYcCm"Qa@*`V'pf82ZdVhm82i
+PT%5hDYIj1Rmm"VqH9YDcP5qr+TarA!JmIMakRVTr2C`&E(CLYkfbUFZm`HcZ2Ni
+@bAdAaX[K(ZHH+eFh8jLXqkG"DA2fT5M'pV`I$Pf@aBrMYE+G#5%aY*TG,@GV$6U
+EVb1S&Cc#026@98"(PA3j,Rh8DR[6hLceiMLP"H*ZCKFNUXXm,c1&[a@FGfV12HI
+)RR!lCUP5'peEbPAGr!GG(!!phH(2pBrTRU1NRi,9p69amEJ@G,mGP6`pr!+XIbA
+0rLT`m+lpGa@lL'*p+fH,0m+h,RFZ$JE+(NdZV1P2mT9LDC8Tm*8TPDMfIUD+BEi
+ZbIV1XV1G[j'#iV9K1ePa&PMpHi(kQ,H+ReBV@r[(&DMjM&Aj$dUpY"U0jiFlb1e
+Z"pm-M"5V9q08UA'CFp4B-9Dl,EF,99aapm,r&9i[#hr,G+V@RQSc$FMk(V`l*aq
+9VD[(j6pla0Ujc4J$jR21j8aqCUEqB6RITG[dj2*j&aCCETqBKre[kXEhl1Tq#bM
+jRC[&CadV1%p2d,q+jp-j+cRD@4XF+kVkMY@VU(@09UmIP@Z,bMaXX9Ud`I0N4Xc
+IeP#[Me2SepA%m3IRTKqIlmmIREDb8Ce$T@@[`&CpkJmIMVqkfpCGh(dK@E08MkG
++c$QGPY,3qhMXMb3Df'9kXY+c2p`qI5(h6br2c54fYRKF[KDcS25Y$*-9UEaj$(i
+[C@Gjj59Rr6#Za@M[RFm)KLYAB&$qQEMd(DYmE'if2GBq(q"irDjPpehq0p"PmbV
+TS6#'r+[8ieaJp#9`jAC`c[A&HfmHSHZ2NkQVFE(-1k+U9F,L(&G-9+ZpQ6mcYEM
+-fYDbPAI-T9QI[&8Ke@LPAZ*'A`Bd@ATKr9Th%NIdAZqiMA(lb@$C#`4[pA,je$I
+`dqA@EqCMF+drIX,5Hbe9'aGAfG+(-eATRL3J6q+A`0,AdTm29I!Y+cCaTrL3!*p
+"FLR`1e24[jiVqCH9lp[jYF[LhAb[jFVUmceiF1Sm@$TEIhZ4$ZMIrc1)CY+kYkl
+,iEr!m&,$kF*q%8XpbA22aBKNaGik@(@CPhDcmc`GV,2r+2D"-`UI'NBYeMkf#4M
+ejk6krM`cq2U1KB0P&1aE,Uc6h6@Z@E!1d*!!5T[00TCQ0h%TebpT@,XT'2@F#[T
+IMV,fjZUc-BXh&$%jQ&j%92Rc+GfITC2p-M[$4Z2hF+c$AKYD@BH3!0PpE&rfKjA
+Tp4"Ad,+[YF[(S&U5dqM@DfA8j&TXD&lHmHeXZkYDXlIa[F1j0laPhBI$Z-`LQZX
+EMf(lf&KmZ'fp-@H2DdpY1KYH!(TbFXL-PiqdM6UQd1-#IrcLRFe,Al"LPiQ(b*Q
+PKmMDmUk+FVM[+[!MPR8l,ijC*jG3epA9fY6LhRl[GCAA9IAKeYHE@5ll"!@mRI&
+rGTbZACB@B@P64HGV9j@SdjSYH8@ZYbHiV@'XdICXG[KDPr(LbEAqZic$SkDHCXD
+Cr3fmZch5F(jd2"qGG6hLfRKKm&iYXqA9h@BiY[Dh8lm@rMdk$k@hc+qRF8,@'Iq
+)ijEdpi%Zr*dYP,Khej!!rKThF8qli&eXDZXY5CLpp19bY@G%c9b9h)H(&N`mVbY
+V"A`H),I2lL%A#cfeRVmcKb+IMTFH3,MFCNlIer,168pkj`6iH$cf,KqlMZP`V0h
+YEbK$%,JFXfiDZ@cM6XHPY)C[[@X["jZ0DifSl2ILjm9Ljl[DFUk2qCYDEp,QFaN
+A2rfaFi`Hj&,$H`p#YlMN3fFlbVXc`#qbhZ0R,mQA'29QI!&bTaI(2pX&bq!iZ91
+CKIrf2ZplQGV,2mNUm[DAQ[amAHBRPDf,E8`"p!RLG,PD`mIb(DjA6fA,$RFhk-H
+#aX-+Z,EFVPfah-6Q`eQpMF1(KbBVJl#X0VF9H"E1,Ke$LhkGfYma5[HC$DifB(0
+q#AJ#hDf!pMIL9pYVDr#pj,K)fdlJr8*BEbZl10DbkFhc(TF)1(F9eTYUIVb-EZ0
+qEbdpLhf9M$%IV,h&BG%(c0PDlHeU-A,i%DGXpTAdl@ddXb4p'mdXEihfkYY&9ie
+$N60*$ZrJFUmapS-#r5j5kA([*MLj4hXZ4kkC`qA#mal,NH,Frd$H@Z3EhYh&9pk
++HV"Z1(ErYKIKar)hJBNc(c1AYEcAdmAHiR!eYVYUS!hXZ"cmRLhimZT[eC`HbhC
+R&f6iA!J61fX1b-e6R`l@A2Rm"PJlbrk$AGZ-ci&apLIlfeLUlqeT`U9ieU0l*Q3
+M'CRP3mrJDf#28Hbi@4j-dZ(C`qmPaUZ,Mp0PK,G+@$TI38X'aJ0pfr`YVHb[(Th
+N4)2mkXQ@Z29mbEYiU6&ae%DGm$D9q2+pf+I`Eb6(rD[UZb&`qT)TqRV)BV@rKcV
+A(l1+V,R'T-H*XTJCiTq8GJ+QEl',apEh'rZXHebcNBHkikJN"ilfA%i0,LRY0j&
+I`m5''VldXJ#P`1l$KI!Q5m,Gm+(MhGem5VlfVddAH5qVc1cqT$fIe,bIVDpqP`1
+8BqP`Tm@DC,XVepP(c,$"j&YBaBh$KM([Yp0IVMTjIa(&`eG2#c+ZY2pShP[Tp2T
+fVGY,Q(LE`@l-jpVQF5(&&ZXURCaUhq$AjC[MbYEC8[$qJIQ8@%2VeEa@%GrDf@2
+fYY(UI1Gb`eIHFPL`l2[-*NX10iq2T[ReHePlHaKmMCiRQEZ+R,DZ@m5j4XH9bCP
+2`mAhDRJa9HUDZ4NmAZmiPc&2e6qPaj!!qPaa(5il-[rBqR,E,TF60CKdpah@2i*
+dhSD[3PQ(dA'+IY2"Z-Ie$!j,aeh9U[2fN!$m$YBZVUkDKYVc#eXEj1#mA#Id,"Z
+XC`SH4$`Sp3cX6-BVk[,XiUQpddQCMBYc-kZbUeq,CpjJq*+lL46RfZ2[SqCe%I(
+PiA&Z+[iTKB9hKrE(+ZZbYIrfhfX1CY,@qq*K9DYA9h&9Lkc*H$QH4Tlc#eN0a&e
+G3p9AbF'Em6C6EfmRTG09p%lP`ZRmH1,TVE@,-E,*BI[1XREKA'1XRDGal#+VKq[
+XL@I9h%lG6aGYETU8q,!drNHB82HCAjRD`m#,"hNE[+A`)H6bBG9h(*TH$6hm81q
+QE%N"eKQBH9kHdTq$DM42bZak(FAMkcZ0rH%Q(Cb-FZIeP`XRb,-PF[5E@eajplH
+m+C4`Zhc0ralVif%IP$6YILBj`&`dlZmRQTILh%ZR,rGYGa2qbFbf@[2G$kHRZVL
+RDiqC[0V$cD(0aIHLUA[F(q*'d`!Ap'2$bmIhUrkFlETIDB2D4SJa*Iib2'bf0I6
+jGILpPGB1rYV#9ajZYPHpCI@-drKamXiU,V(iGj2pl@h@46j(,[-,84IpY2eG1(U
+)ZZlVPhGhGaBrQh80$hYVEG4j(Sl@AXDHarPTc,@,iP5$MaM@JVpMfpa@#qEq4ME
+E-QBjmVIVm8khrL3kf9aBGNGNrhSH@ID2DjI)YCp#ValUF1'ij1*0q4#,cra'Yrk
+96q82UAK)c)0a'V-Rq9(`5@bIfFqkdX1QlLiTqMi)h*qm'AkjX%Rrr5pIhdZC&Vk
+INHRC8lUHF)pVQEeRUTpkl0ZqkaZ4LF[Ipa`VbI&PRppJiNNZ*l#6pfX(XkIeTr'
+rHqK`IhHjc0YZ0YGH$Xi5YN05+I9242Ymk'Ah'QUpRpMZ*NZ,UrL8kI8!IRm6`BI
+))'TI+GVYSa,P[kcS2&jR`VQYFYPLEN(YZ1D158Ua4U,c"Pd[)`pRG6ZcZ*riSp@
+GLb1kMCPTJm,C3mrE6T[TpVfIpffdfUlIk(0NpRLqlMk[jhrAJ3r3dmbelq((fqp
+df,bY0QAQCrGm6qV#Z0Yp[AirjIJE26aBA`1SP3l[UTA,V1K'SE,6AUr[#1Id2p5
+(m4aIfIIi@QZ)qCDYALm2a3S'V$)Tp9TY*-aqACcZc,,8MZUdhR1UYF(6I-TkhCq
+c$XV6@bkI&+5Q,cijm4k@mdhdBD'dYSHE2fFU@F#Jmh@fH2&6R8iZZRbjIPE1+rS
+F'Ib[GreXI(rINa@2Vb2VA9prKmUQ(TBB2,"E0Ka$rN1cL1EIJmDR[*Q,cIiqiif
+KTY[iH,rPZ*m1mhNbC$$Y0T&I6r5fp@V,aG06l2q2&Km(LE2H'"ZA,eq&j@lQ3l[
+`+l6`l5jXqiXqi*ClbFFaV@VQ2khLQrQmPQ+mRNXbfmkc$l+kRBQb*CGN5baX`qm
+[q@dc0YJcHEp6XrjFAYpYU[kYYp(XrThQNkM9DlP5rNdiGTbYjiHiaaDkYj9rlr%
+bBHcqMU2+Zr6YYTDiqdZGV@(!"D6VbGUX'pdea@A6*Bm@mKhmZPkrZU@(%N6lM"i
+9BkPJipVK'liTB0-,YMI)-mk(H9Ph`VArAph-YBe5C22C`BfCNrd@,0fIdELKXpP
+j%cEh'2@H8ZfDf@$C5G2Dr'KLkliNrYH0CGaGCMTCqJPRb[P8qiH,2fGXT9VhXV6
+"jY2r1IaVcEZT9Yrk0lUq8Cf*RSm#erUKi1Uh'1iY($YFI6Q[[m#,kq3C`AP3m4N
+UfRhNEZ)b@QkaRLdh-2+[-(Y*hdP+[acp1hNUpkT9lL[`ZA+[8YA9*D[r3YAel6r
+eYX([+!YIerq2ENUffqcYL1E[1hqGNCKTEHV$p$PFDCfj+eG3r4KclVrDIYUGaY[
+Xre3qj$[,Mk%2fqVbiHAajAF9RVf$dYrN'Ia`V6iYJH)LiaAZYqC+pFq`kHP`PDP
+UiEfA$jPC,TkhGlZ9V+cLh&6hSe8i1CAJa[M8["q&p'ep(i&lj&jMr!E+SHq5cRa
+I@`HhapT,fPVmI9q9DrHSF(#pQmNcIiklhFcG8CbX#Hp`Y0C91Jb`(@A(r(#[-'p
+[GPDB2rUV&pbFhk@bp0S9q&p4jq*2qY2M(QJ2j(Pcr$aqc2Q6if&aTqUq)CLp8qY
+l`mF%r'`VUKmk`rD,!RV[,!Ra$YXqp'jGIp*Fp!dbhpVGiNhZ*&,8i23XURa+(+K
+[1iYDIaXErM9Lfm2,j4SM(56j9h@5rX6lV"fX2e)IcdlVZ#Q,QfYBC$0K@H[D6Lf
+bG)`TcMBZ)PDX&q(JV0ip8i`fH2HkDY918q0V4@UAb#1ZC5l1bTkfeKMdTR`l@Tl
+dZeDVHPe&,bT'$[,hb*Q2U*4U`EicX,@Td)Gp0l2#deA`jrCiq,,[m(J'lHG6JeY
+9p1%+YbhM&Kr&`X2KfNjNTeJIl,'YE@d`GAYE+GjPIKH[BB9VC92AMjG""r@`cF@
+kaZKBB9a3QR9Bk&Tqe2HkJG@I4CldEh*hcFEq)qJ#ID[dS'YZ-,m8EmpTqjC8[Pi
+2,Me0N[d8Mih*i&HD,9h(biH'a+)F-+QX2DZF*SP0ILke8C&'2#Kdf$a@*92G[%j
+EYiQY,q0N*A`(%VZ%PFrI@Kr-eV9ZX+b`IpH[XX(dl,#m'A6hNVC@`PGbG1Fr5q,
+kmEYC%q9ldbRG,rhlZ1a*C,Y*1A`Ze%)(LdZhY-(@h',Z[HMpA5p1$"Xjh,jFZP-
+TZHmB![&Qmqm`GEbkrMf(#Y#bPL'fjB-3HeKdd,21(FDq(hTALAYj+eYTX""MZ'4
+SHiNf8k4JkZ[UCFfQMreX0Cb,2'KaG0@6-H9`L2qFC22#PdX@i2V#Kpkcf%2kT'0
+XY0DB1'Y)c'pkiKq*KFZkR"-F1(If9,pU(bMS$epP6hjqC@0GBA#X)H@H,'kKXV$
+9f8Vdj%2Ja8r"DJ0XH"HTLbmEG,XlRc+NbR*fXI(i'Q`IAeYjehhVrZURU`fBB((
+X*[[(E!P@&PV`qDk(Lfm2&pHA5aq3!&ljRZT`SrhTeTJlrPa[dBhm0,jp6hJlq&)
+aU#Z09Ef(&1U'GjEC'ZV(UFq0Pp#bTI-XpG(UE[6B06J3HR'TE@6'dN2VmJhfT@1
+MljlXql3Z`dq&BDf(%$Y1N!")qpfr"plmpcb2[LE32Z1(fA`2-2-M5aEbqTkb(P5
+[(qT5iKi,r"YDIPDH-GAL,kf&GB@rX*[Q396N821-Z5Q[U%AAF@IGCR[F,c12[T&
+@9b$r6FDJIed(j)4qHMXSH+!2Mbk8rK[p(lK2m2hhV+PKmZG[kbmR1MmVp*!!mIK
+&UH92iFLN`r+E6mPKqF1`,mk2c'BIKSM9ke$,Qd`RKqFK(jmL%l2ml,hX9@'fKKi
+"mr'2TSHK[Mfl`e2(r(5PHR@,2`kLX259[T[iSUREf@0A[fIHqir&N3b!b12B@Kq
+V(F3819Uj'$1F2[N5k@bPeANZR!Kl@c`H&aBrh-E@lk[ePK$$ld6ZAD`0T*[MFTF
+r'Qql`kqKq)SQk'NG5i(3F,$Cqp&5r4meTYB,53PFmd")URc-biKXjm2(Xl0k2JU
+Qa#aMa3P2k6raq(@l)Sah8I(2JE2YTNkkKipidpiHSXV,LX2IUh$heHkk*GjZ#,2
+9[UA$IhRb[jI[Gr@5Z'b,,PRpVi0K@"lpPCB,6iiFZNHH*iI(Q"m6Z&airh+@Yhp
+IV3q1Jr*mBh2RBI*hpJI9M@A@0M14B`8S5YXqR(,fA$V,c($ii6$i`hKm&V5C5j2
+*ipBlPXH(aNBm96Ieq&-`GkB"pP$6p04@BZ,GAe2D3h&,alfT+[m'V&h92LE5XZX
++eU1MehVlRVd0rHGG9ipC+memRTJePaJ`H9@3!'$JK2Sr0h`SjQ!1jErZ&f,Pb-M
+'iA#MrEUDh@em-2,1c`qaq5-ESSr*e$dAf2ceiBGh&Pp8`r!SRZITN!!f*TMmA1%
+piYUpTr(1eN-2kGEG4EILMijb1D5k4rGaLc1Z1A0FBhSr4P5YPk1dKhZVKfGCG4U
+Kj@BGD(ljPe(T`i,jPZY2M8rHhpe5KMRqMFHdXjh(Kk%&#,'j2C9Q((VC8'mVm+'
+8Fc@G$K!%kU(d`"iH-)5heZ3fAemHeTF@4mE'mcI4rjDQXl@[c)EV(-e@i9(YVAM
+r",l#(dHAAi,a#*AC5-(,j1p%,JfGE$60qSpLflm3hJ00KG8)A)alc#`eb#kb0pZ
+VDjPjD3`m1dXl1Gf9aB4XXbLELPVGNA)Th[5mE&Q@Ib$eSEqGDirl53b96VEb(Lp
+RTSIP(GJc2J3H[+YUrpf0MbqkalA'KphDb8Y@rQm@baj'C#B-pADdMl(19+eGP2p
+-rk2NDD+V`HiN`al#cRHla6-4R(Kd%0m'(CpP$ZSf$j%2Jfpb,&(`PhK*q2XcT2l
+ZiaXEDS3'iR$i0CDi8cAi8c#XDbeH*(hF1pN6[aHC)[UAQDb2pE,eK,d4q`iC(Hh
+i%Na`C1$0`q6i0K)MIPV+bC5ZDqGkFQcMia6(AidrU)IHKaiE@Xm3ddVc#Qm0L4c
+@*((qZNM2YXUHlbHA'K`k'Y@MAY)hfF+eAieqB,lq,ecM$`CIa2hcklchRD5'Cq@
+m2N#aHIDbmI6`eG4"j8UV1[I4e%2QI!Ke&CH9p@iqcK5kFAmXLGaCA*jA%ZAf5MZ
+-l6@Z,H9BG2$'X,1I@AJEX23F5[apA[BB04)rHKiqbZEQ(8@8M[-)rGMXZbYCjRH
+`kM5@81VhYa$Zpeim1SKp-!FcEBak['Hd`5rUSGlCBhiYp)kZTjRDakFDV$-TpUq
+T$HI'Vl12JNKNkl,0pI1Gb(eNp*A3596Ck5U29PFH(hVAadPADf55Uk2b[m5dN@B
+kpa+SreQT9[N64p[JP@,Hh&69RGXKfPh$dTr3KiZQ2ASGL+R[#4(kf$-McjI9ipV
+1Kph-BP8YL9GR@rH[-+N[#[)`MU%aU5k"GKHB@,fCI)Z+XV9-5bPjPSDN68XMrBT
+l[59q0q,hVclF2C3q$(`J%DZ(Ri[G'I"$LEZ(`B0h&pLRiH&e8(N@Xmk!F`T1l0h
+)[r,K5jhQ@N9,m@XNI%br-P'4l`VJJmb4EUS@b,cX@CJbUrjeR8m1`a[`4ZiVkr#
+Pe2jCfbGTKMipaK6kH*F6i6dr9SkJb&@51Imk`lUYaPqC[bDMm82DRVcHbDE@blb
+IDjKP!#DHR@*0+"mi1YM8q9$G@1eZ0XDEI&"[jSQAJ`GR6Vqm`EUb`TH[Ra#Cqe$
+Uqb*aH2e82&%ekUahIcZS8N&2UMm46XIfU6F-Bb26QDep#Kbj82[f@0l[iUbiVmc
+HfF($i9VKA'0Y,6pV#aEA#PajqQKlA6I*LKmLAXIq)%),fApbR`FIXS2+YCpd!0l
+TMpD4JlfXeGTF92aAFLICBm-ZV+I5Ai9aQ3I1N909DBhQerF9rr'-*M6h'&Z-%66
+-kL"LE@0c$XVEU,8P"Kl1Xl1[`RNP-AMjR$,kdLqc,A-QB3LGUpdfNI%DQaPaHR$
+fTiLD@UJ2[@T`h0j@kZ,E6rGApZm(-YFIbS2%PE2C9R*iN!$j'm,#KNZle*Ta@TT
++k[[-CRSqRm9I89Th%cl8NJKhh+P'hST+FEI3FNNRPcZ6Pm2NA(@`lh5fRaGMhZC
+,Xif2XrU@1QaBH9&m6Y`-FQ[`Z(b$Q*BfA[,A(Kq"$)aV$#GTPCakGaQDbXl@d2q
+Updm#fr@8UqbCcl@V!Fa#DF`rXkrYidI,fZViqcmU[`I6Nh&6,j2!%bVmHeZ-+RV
+4-V$#KHkC5m,6a'hc+r%EdK(S5LiIZqMbkaeN8jIiZb!aMHpDjE#R2#A'%bdTDmV
+0j,fa%,-RbrU3!1mPb1I'q*JbSCF@&9mSblm)mZ8ZRG&XR"iYh@4YMpI'fX4hP-I
+PXrFI-hXLIbJMkJCN[[pMB-6#kaYp$fXK55m#$DQF[XiH"*Y2NkrpkV+M8qUpLda
+rLpQATHm[GR$Ceq&`Z4Dpa$r4#BJGkD@-VPeYKK-mI!"-Z-I[(fT$'X,fhiL)qI&
+q@(hIH1ai9MBqS$0Y-,ac`qh"0C[SEM,GTa0MjHXhqIi(aSeRAeGE$KermFiNVlH
+IDh'aapqF28lZ)FI6B9VCclbI(@rETSI6Z$B8jF2ZmmjM4d5I-(Q`H2leD&%IicK
+6-I@fP`CHh8@!ic%ZTm9-QcM3AGV8qc9iRJbTQ&aZi+F[-kLC9KmUCBF@0VkbXKi
+RmH&6mIB816kIC'Q*cqUKr&)RjFVGiR!j1XLUlbCMqZIBMQDf,(m(Mh39fqVc-Ki
+[&Qr1Z,6#V,UGV)GC)V,A,l@AJaUA#mb'I-`E6pq+C6PbDqVZq4CcrL``jPVpEYB
+Cph)`ILBA#mbiS'A[Uc2lhaN+h%lZ)NRQka*A(PCHe!TQ%1lM-ZUbCKAPM$V@C"9
+UbYZe*JCA[5l)Cr%2ZjabA@4MDdlTPIApV"iNImrq'mp'EbGV&Q@X'VmSbI,$bCm
+0lXc)pRpPBBAC3pa$0pH&GG['jF*)KXbiG2ZU`k3F4)4+S@4XS"3A%GE'pV@E-9L
+P3aEJckr-(bBfYJZlLT[TIb,LYjpeYX,,eZpLr22iTpU8EK4l9LI(LMee$dH9Xa2
+PBlRe*9aQHRkFE-iFZIac0NplDfZC`*GqHj`qPJD+m[rXB23%qXBHAAeBUAi%Rmc
+"MifphKKYj2ZmSLfhm1eVmb+Gb$-fZ#4M-2rlfXLGm6#"'GEM''B)IDFk-%lS5kq
+'Paf!8e3-``c4BpdA6I6Z+Uka@c*ZbDjair`'2(mS*@RF3Rqqm5ibk((EbeXbT'M
+rlGlrYJY8AIqQP&+k0QG"M#e&T2q!%*i)45kBl&&arJ+8S+E6$VGA$bE#Y&'LH+-
+Fqild'RX,6#a,SeBX`8H0Acmb9cCrKjNhXmbmZX+TfIcVAEBASm$-PErIf9V3PIF
+KZEM(Y1rSH8IKT-TRTNZT(a+NU'VbZ++8Iq*TTqCHE'RV3&H[GKCF9+AY[hGY1cK
+5r(alV"c*FlKLPjRSb*fSkU(hE2"*D0p"`GN4#PCK+*[V,'q*KDMUV2#Q6ZeLZ+H
+lfKEFRG!b1ELTafJDmKhT*hG,kl6I3RkZ(HLr8lMjajPh5KV*BSHmC!C@YL(2Ur&
+FCGP1fTRiCFU0(qjqppjdS2SP!hm58'k*rq"D6r-KqF9cq[$d,Z2QDZcq4KBYha0
+j$h"rHB8h[(XIUbX[hdSC8qk82#i9VQ(fbd2AZ)BF8rbU[UGP$e9h$CGaFI4YDck
+%02`HSY+',+e919[YC@DUX2QNDS"pifXKj%92I3mRJE5XV,Q(c)fCkX`c5m+UIm6
+V*N2(cY2$YBIa#J5pY,fh)XmI$pkA@`rLV*Q$`l5(@bC5`CjIiM9maSqfMMZHeV*
+H0jPE0p(m9IQE[H446Y[$R3pR6cSI$LY'JDR2mUcKNBA*,aakL)6Y8bm[jd2KKjH
+2YiI$Y+IK`l[6BqQRrJKp@elLeaBEfkTkU$J9p6Nlf6'1lY&pZCr8I3jfX9@ebrG
+hmHPV+rIX6LI`F*&4RfZhKpq(k&aYp9CB[Qf(IpjLq*-X`Ypp,Rh92c6H9YD(iiG
+9Jq2fFr6BmX"2i)HcRhP2i&eMkV#mfiqGFGa$q!,+Eh&dCAaVkBfYXjh%,EQ*Ff4
+kVE6#PEcDEUeSG31cZE9*j6q"DiYe9i%82Zm$i&C@@eaQ#HIMKPl(&'P24$$aqKY
+$P5d1cRbmA`q0Cdped*PE$bIa5Z&DBqkPCm2[%Rr&Vci9Hl`D(96-DXQBfqVCYTJ
+aEhd`"fQf[[U3!20feVYYYMY!h0fp2Nm$YBq2'TqlY4rh&-IfQqGF9h"aE(GAQfq
+[*PIZk5E&mLVG@-(P9p+21UFh(`iGAHlcSjIXeqheF1eY+QqMpa'qG'ZpmNY[+l`
+bcYcIRH(-fhb,%*fIl[k-(ajqeZX+ATBH9[SHP6Z[SGRh%IkN-hphk-@fc+fCYXb
+ZjZhkV9B8hl0C&@Ecf,5aKfPC$$f8%k0KEUiVmH++ekfeRfGr3c1"Dk@k`YePlhH
+#(@ZC[SeAEhCe,Gl$cr6Z-,-QI&kl'jqXXUfedNAdEAkRSrbehScjPPm6,hYT*V+
+RdBIG,M8iQXphhF5C1V*NlI3@PCUX@efeTY[M2P#IUE9emJ2DPXVE6lcjd2Zr+fd
+VF9R5qKZXbZp(q@Xe@hKj10CB1dJhQPY0[FEBhGDqTS4Y[Xp*B90l8i1$iFkeh'%
+@ZkcJjPeYX9l)0rYp50@`rmFZE9QGrKARd)H0pEE##lTl),i20K%&Z!Sj#3AU)H*
+ZY+EaN!$KkL(IA&2Ca#$@N!$DPXf6'rM`EB3@V[SreYI6KiRT`bZVTc*Q$aq2)VS
+V'eqKFI4BJ*aZ4mEhF[N@&8h0-(di1()`C'$m##XdfC!!r8JBI-9MH9QkaqPLmh'
+ff$dTh0aZ05i0@eBH[M[FpG03$dVmD2JdZPMpR3fYTPkV'qM'T)lSHbm''Hp(IGE
+Ej&EDeXVqlk&R@`mDPlT"2E8jRd08dkjE$Vrp9h5fqli01edZ(CK-cFHiaYj`)H"
+T!kVQ(,q#HM@(6I1L`T(bUdFCT)GePlANp8(C6q"(rMqVaBG4rri2rV,mb(`IGm1
+Kk1&ZXFQVrTdQkrGVSE$Z)mlhF[`jfAAihMq2Ae2(XSdlf)#j,-aYhZ[9XX[GDU[
+lLXj%(Ml1$`G*@8Se,,l1G`)q0AH$$K@Xkm`6@TZ+%bPXkrE4[Sep+(XVLI+l14K
+3dqE$Hb[)m(,l,Xm(JfQAiC1*MkL2dVbKfIfISf'0cBqfUHr"aB29MB1(C6S+f#E
+"(`G4"1r(D6YR"Mp9TB0R&8MB*CTp@C8jClZSp6YEbG'`B)2$RH(1Jq""&"U,LG0
+JF#'mJP92qC,V""CGaCG`%9@D50$e3$q$Jm("JQeN&@e`B+kZVi$[RbS*@bP@0PF
+9N!"@@0I1P5Zb4,34ZV`C3Efka+qIM3FZDAGp*"6aT@SXDqT+a+b2JpP(ki%fNMr
+acT@SJi(TaqiVrL6U9K5h[!*mi0VU`48[(j8IZ+`LRi(TJUVmEc11"@4mLG`FEZX
+(C`GRPqBGQ[8@8ElG59imHddePYkc'dJ(J9kL4r6MA0P)XqrRF'GZY4"UUR)im12
+&Jq9$iQrMbS*[F81$1l+#Tkr,4[6Z4kmI8@GPJq[d)hF3F#4([+A)pH)j`FHI&rY
+8q""Ai1fMGa(`FZcSSQI6NGrMH$"`,2pUGfB$-'kaZ2km@&G4mH,lP685E1[`Iq0
+$Xl,apV"bqJ#bcNC%kEPlfcq4JbV1bR5m(Mm8c`)Gr[Ur"fTSAi1,@4ie,Nm[m58
+(JH9Aep6I52hE+PCBh!mUiNQVIr,M80@CUZ$+eXI'r&)rG5!CIJlVY5i&C5[-Vm[
+I4qZ032@9qCFGj1XLm$XUb08iXLGj#ALT8mb08hNDT[Y+DD'A)R&jrD@H$a30akN
+M'l@0Jlq08Ki8&R1,B10lePM!Chd(&Vm[$h`'2-JXm%U0B&Yl)`DQpVkA!Jj2`))
+l&BXY*'RE12J`DLcU!'6ZJ,3a5X@K5M82er2qK5l,64SelIlLlbEk6J4U&K(SeeG
+-SbC1"M6,qMMB'64bD16hf"A8IDbHK0ZpaJ9h3bC0KaFc'[lq6NjJ*0hBC'6Zpa-
+QAppZ*'"Z*10[-L6Z-EF60lIAFc'NherIlhF5Ek#6NdEkq",MAFQrJQ5BU0pZ-D#
+qQ5EZ+M-[TPh+X*9hJa6*Nf4I9dUlNb3%4SmH0+VUk9B4j8bM&&J8-D4J46X#``*
+dHqNhf4Ij0K&3NBdbMIC1lcT%LCGhpGJJabEqrZkkM4QcEZrZjPrIlMmZ0GdC'04
+hPh*Zlr)N`8CP'MRf%lLC0'rZj0'Ma`(B`F3I&pNC2%h&(Gj&((SH,&1Sj0K4iq"
+qAaVZK4Nhp$FAG'M-bJ@5,#lSC0()`,[dD1lhY'MR8D23aXDM0S@%UM4aT@41LX)
+T'p[plIfG'K4Q@'iZk'4Ic*P%+!(X8M!rFb-#C"4iV"cR8FDqShb9hdD14NJjfp(
+r6aFLl[j&(1SAfi`)XR'SlLrhP(kYrZ*d3jI0bC!!"#M4b3GmrRj&()b-Q#M0R5)
+XAaGaId-L4iYh1&e[pa4X+-c)4XkkMNbD%krhJ821!AGj-K"M*SdIMr(NL0$!8FR
+)SmqMI"#F6!mAFELF0p1aYaN5*&(eJI@Gh4b!`Cfih!3H4ie(F"JdF!)))E!VX$*
+`F()bEr'#"bFQrS""dIdG+G)ZlqGNlJGcNF6*X+(SdGGB8C!!,MZ,kC3[[$b3!)2
+'%(h&%8l*`*0'64Zl[qZ6ke'lh&'rbI@bCRFf%kMd0a4b,[S5*flqrrl[T'"N6Vq
+qaXLlSjNLK!`MC'0I4F5C)bD)%*ep4Zi%e&!!H"J6,$*'5)[mRFEMHj0'CQf%lSA
+f4[-b41hN8L6&)b-LKIphJ6,l*aFM!SN80'`qG)LSa$$@%k`X0j*bC(%SdCe'qaL
+0H`X)!V,$)b,[F@'44h",&4[U-cMdE#Gp@,*`2@hHmk9$*p#+4GbHSN8,rkXl![T
+h2[mLL04%dP)V#G)NdGlIaAHl)b3Ni!NmQMQb*%Qr[Yl)`#Cf`NlLM-!(IdCKhdH
+pLSbFQlhQGNNFXRhj&#CZ12MC23NhG'K%19qG"&J4@&"-$iJ%!NU,A68I@JNEJQN
+ZliI"*)NT#)c*LbE[SC0J2,[d4PhZ+(3LQ%"['Sd!LU**C3$TLX2q8k6NlH4ih`l
+!C@F!8*!!m8LpLh!8Q0MC1ibCPf5Zb,U41Srr@56-Lf5*d5*3T&k%iQb#6aCd35H
+0&B@'04R@%kCB6,pm%S%P1[T9f@#bN!!LaT1-4kb,$U+-l!bFE*N46SXK%MGlLT*
+b-kJ6Uf&(&S44C11L5X"QiT0Kaa9h#3J#3aTP#61Q5DkqNamDG4N5HYRB'"RCmfD
+59cKq%cRa@'"Gi&eBIqlklX-BAVLBXkG4aBL*'lN@&$*Q0*!!LaTbFj)(Iakk2A5
+Ul"QN@NqGJ%X%`MAS6N40rNjZ6e&KaYaGf&f13)eZ*a!M@%G*B4a4K1X1+4CY)qB
+1lN4)KSVkM3QCN@"B5-MMj-q`rNb!flm5@M%L$JSr1LN@C)()X-EEj-jm%,I445,
+l&RB%kGBEZK-hFkrN50acq,NBS4Gh)b#XlGdCfl6K`K,#cLX*&h4bD%9#M)hBPq-
+*43#&(RJD%4SBeKZjNl)L#iZmb`*9VqM&-aU0$Gd@%*X!K1SR583K,*ZmD5m))BJ
+T1S6X#KBF5`hPh-S%0phJF5`N%CN833HmSSbZ))Ee"&dL$'N,DcK"dC'C4P$KXLB
+@1*%M![U%kGNhqm)4PF&p3X+&#LKl1SAdJYRdFR"b59FTX*!!N3c-S`6K`Z36)$l
+ba24jiZYKIhe#KNC!p6'h!lqK!`KYi138AX33m'6JFrLC)Ab)CK'4IPjiqJRI+RN
+4Q5A,a#,k6Z,#3C%"(Z-[0M5+)4N&&0c3[VqlbEX*HMZpiA*1+A1-D61ScA4(CNk
+GIB'4JC'l[brhNi&(2j`bQlhFiZ0hmLC&I60a)NC1!1D[k)83k%6SYQhH6IhIVH,
+J8H,NC&'rb-MaC2&D6U[P"aLq4Hed2IiYK"1Nc#mMMB&KGi'i`1,JB&!+,Ri'mhC
+&b)PGhmbr$2h'i*2U-`[)NAK5m!8Q!bFE)jr(`-#MMIdlMMc+26#KBK9#MGX*hH5
+*dkKGhqi`-MFEM!`,r!iq4NB'-%pd-#`hHm*SFRhjQ43[V!C,LX*4K-*h19d2[b+
+06!qrIC13!%6S&F"K)4%5H"NC'i,5ZiqrNlLrZp`9'G)S'')h'IN@&p-QB'0&[I[
+EZJ4L+1lFAr6"EBIqmRkmA[d-$q[kqih&m(lB!F#1+b9N(&Vr!b1r`-!c%[Vi&fA
+KmLCJC2k*%L!*@rb2'q2B&bEFDHMr*Ze%F)P[0`+GqM*ZkNl2p$kq0Gia2mdNmh1
+cqQ@-'%T["`1"4hH6NC05Y`*139[a-*(!b2KQ"ZK4q[*-Ra0I1Sf!51!#QqbDP#C
+3S&SXQGF)m&6d4qmb-NM(`#j2NaA`qQ!`Ar1-8Y3GPN&Z4M`U0KiHi[q*NQ9RM9)
+f6I2FMfNEiD)[!b3M*!4)qTK%rPSPhiY26$(()(1"e"V5+2ha48C"B1pq3MT8)RS
+MU2hmR!c)!3m5CNC+T#VFRL8C'DCENUMJ$dV!+iBpK'8Ip0aIJU+&U'6Rc'%DAbR
+X4[qP'L4iAIjFR*hZ6N&D15@YFNPVaTR1h'E1,lH6*h(M&LZB0Y3X&G!m@$*r,))
+8XR%bC+Q3!+2V%6aB8bD2jB-RaFRmTB8,d9#5Se6+$jfC%Kr-h&hP6Bb)c2$[S5C
+%AVEMaXQ6NrPQGcZblh485efdN!$R$ST+M5bD2YHq*CNq0NdIIpUKJ)PM&RNNhaH
+4RFNIBCFd9pP,2FSla+1936[&#BLbIDLlRLb*4DR9@XPP0l5DJ(9C2YHrk)5f6lr
+YC#*DF-RB8-DFS)b$'41aPHGSm53C1kXe6YaPC-l*pUGal$rh&3I"*H-(k6eSP+1
+ER`0*A*`-NB6*NBh1R'LlJAFL)d(M4fS",cN5hSUF#F@CJQGaQC1E4#Er4NNk6+%
+*28@!D3KAM*@jbYhSR3SXR+bFr0(C!4La[&R8EXN9RC!!9mK051*)-!@lV8pDG3N
+SQqH%h3hXM*-Y+62X+"B5#9m@MarbmrhmD4)p&%SdNr&`-NP4b-R*kH3-&iT5$Ib
+$"eZ$(ZLDSjKPC'(%F9[$2GS62DbL+[L-*`BU428c8JLPh[&c1Ia#RceK"k21cZR
+Nj18%k)8`R5dfLG[jQ4)0"@rr+%Np%j%YAfK3Lrpj%'5C1"DCGNc4SlfLdQJkmQ`
+b6P2UK!Q98q*K*04r!h(Y8D-QG&Q)AK(F@MA8!X24#-)($CBV*M0ja0h&&+P,Ehb
+C'55JU&)4+PIMC!3rYIP02f40#)+FC%lmTITS$N3Yb3ad3qmSm6)#),dS4%348id
+KaXphQ"&f&'6%R)qel9'lN80G1X"qM5+iR2%hiS)PJ#00Sb8Lm0J'Q&I&UX)Zqb5
+-94L8I&SqeGMR`bMGk,1AYCU)hEYT4-VRS)M9XCi!54bKFQ43bGf5)SPf%$40`6d
+@%V4kHGcL19$JR9Zbap)25Gcm#4Nf'"N&`'+Ka99SCN8b+`k8bMqASChSJ3bFRHF
+l*M@&'`#ENdGjNP'aP*K3G1M-$j0)D"%e4S%MjTrQaT1JbCNQC3jj,LE%&h*)Jc%
+E1b0hQ'Fk(@CGi6fIdLNeK1`@'6&-#C+0TKXQQ6(B"K0*V*40Y*TF&i6I%06@,Ri
+'")L,RKL*[lqqR%QCPZ'FVlk@ArhB"fM(EcaLK53@pI$*fQ*Nj9Ji6bX"qrlAMC0
+f4rcT#GQ%p)[TPpQ8Fbrb#&q!AClr*R4'f5YN8*idH#PL`rpb+1h1"9`STh2RH*N
+h`lJF$I6#aj)#HlRRC@50XB,IDmBYa6*&qLIhNUE&1QAh3#I@%UMIia1E1SlL,2X
+*Jj!!1ETYk-DDLD*+BTh2SII0#4MY*ac'MISG%cCaklB5UkMcq1!`UDh%5*fG3b,
+l'[XE1b0`Bj5%KQ8#qB`6Y#lb+-LqSlH`S"1EXN4X2Vd1KrPNd"FXD630PqM4kC+
+#CqfilRR8FS+!e*1,1NC2&0fMTb6DM&Hb5l6N6MQe"2i"Xfj0'l'09l541p!dE2@
+42AFLT3crmU"NSTh&hZ+aCAlACkGT+$UFR`mM*kH6M$NKHS-QKNGrN8-#MNK-Aq!
+%aGlZ`[La!4ff&p4bTe(eT&rNK-ie'5C3'"!BHb)0`P*aZElZKN43C2mKT%"N)N-
+RhlpFZf`J[k-R!Zc-5#-X,l+SC2V5$$T-,"a'K&J!a1PR)N02,6PUhGQaFA@-M!N
+rA!lcai'6IQHq'I*#5S%"C*drk2V($$NH(e'9h2V4C14IQmb(6IUchNaC&pIGckh
+1mEd-L`0dZcdrpG#FF@B5H"N'964`1HT06F,,ER3QB"RbAacXjK42NC2'lRGq,8R
+Dl*bGGI4Fi3iP+)3!9jhS@"(IB4@FqJDe0"BJlklbXLclNS@b%k3b[Eq6QhGrJ80
+aJ"m'I"!2i)%Ap(eYhiX@"YafI5fq01mDYSb2Mi'"d-$S($$[I'`,#6N'S9NpE2A
+,lb-QKIhr8HYB$LJP$LSr,[0kEJ-cMi&hiPq92#@EM!ZmdAqqcj'i-L-fU2@-9HG
+4cIbqXDR4cmMV!ef2[H,iFQ4-0Mh)RBaX$ELljqCNC'#CL(`mcaT'iSB'Fi6NPQX
+ZCc!B[1@F0Zb3!$Nc-Ma85@CJH,4Zlkl4+8FV1jfHXLFeq*-bq@ieJAD*BfSYhqA
+FAemZ1lfYliTX`Aq0GlMp!4P#1399Q(RjQC-SP!T)8`KSeE4k!A[M8H+4U#Q(5[Z
+p`19Z`AJ3N!!r*R'!F*mNj%V!DNiR9S'R!E-QAGfF&84Pad)TPqYjQF45!+Q(C'#
+[h#f2iU&mG5HlR6XE!SAG(GhGG1P8-'r*AVZKBApqZ`RNC&J!Hl*DGaZ*&KIhBV4
+KXN5,me4L@+CB4'dd4IQT,I5!NVZF6[VP'd0aIMaM*INhe#9JRb@AjCKQAjUXMYa
+)Baf9GGh[RIqVVjhpA-M4idEF4[Xa[pCAm(rEcI[rMrfVY0AGCAE'ZrKV[#VXUZV
+p9AphAqPAjpK+X1T-'YKjGKGrXE(&hRhH0rTrkMfdIidICairPar9Mk5hdRaY*ff
+Nm(58p*iqNUk6p%&Pm'bS@ArDbjZPd[BkAIDAdY,Rb-+4raN8T(-XipRr$Cq2CrM
+NfdRpf6[T2q%Rp2l'hqldj9r+aTAmNVrmPHR+rbPCNVp%0Y$eX2m*qb2"Kp@(hlA
+UVAieVYEArPDq0DrPYT0YePYmkfrj@h$Y[r0YrVEfmkhrLYrk,IN@rkEL+iqRFEf
+ii&apfij0ab8"(3)IB)2X%2fY0qeTV(6IakEl1QZGCFlDjmLjr6&m#,Yi[kS[mZS
+YZSeh8I0kMU2,kMmd[pLAmkAr6,jQRNkIpc6r0dreY2bTPR-kqCi8cdjQGGE+kh0
+ej0eb,UlZEY5BrdAIhE[mPhHr&rJakAf[bcG*0rCQr`6Gc0mLErqcFbpX,h@AZ(H
+pjHqAHmhUHTMr&XZZf'N[p,eXI#NB&YX*3"*'"(kZ21McSrA4qZZCI8Dc@5pCe'X
+YpCUrNbG9(eQP`0,X,,@D6XC@cf%L+6&+ePReeRV)HZNE#hLPAXHpYGB"HbZT-8I
+@50CCkbb!0T3#5GCDX#"bEaD@+cf&PUlE9bYKT-+2mM!Mkq2mH2IIYam+2TIq%IB
+4rLk6pq2KE#2mIB4p,1PB"pXZ&$mb2K5X,5r%dXA8D`!HQLYSY,V*dM95*fPe8HA
+V)mkjParKA-IViml5k`cfrK4qTdR8bEf61XrK@H"m+`q&(e9PV,,X`FDb,@5)T@&
+BI#dQ&T-*!4J'l(!#rq1J*@MLX+Yf&VUYKDi9VK)#5X+2mA5d0+'%J)`$B%M9DA9
+D9!69HL1(4D1Ji&4*R5Cb!PKm+ZR4pCmAVYKm1rkhl'$rMJEEBI$3%`0YeHfR6ZZ
+kk+AYYCm2@I$3%eR`pMl1U!FJrV2KpMXrXE$iF8@Xq(e`!`&A[f,hl'Xq'!QCrL"
+9i0(J+JLf(`rJrir"raf(`m(r(j!!%0VrMIihfff(q1$rMm2rJ%PmApm#q`q(mB!
+Rf*f"YX%$(c!#B2q2@)N!"SV*fUf`!dj1F1Cq&pL,VT`#rKIB[IAkQh[IX!*`!+r
+#q`R6GQilL,"raq%'`L+D"Za`0YmEr(ihq+!RSr$ek,6B$Yd"081(H#MiY"l1p`0
+YUYYUN!!3!RSTa6`0SV[4#m!R@HpkIiJ"kLLHLL0C+ej'dP'M+M0!rDR(3!LdqM4
+V2q0'MqaqjBcDlVk0Km1dqMhpCr$ep'qrB[)h8!6f&C4X*pCCA2aV2[i0Si&l#mV
+YK"4VfKI*V!,pDm#pF`,bHrB&pAH9XX#q[3AM@9ceYSd,r"Q[B,kEV8,[P1"H"`-
+9Mq"Kf',l9ZJ`q3ZLeH`AbDbhelJBVhBBJdfTP!DZ0H'VV,fYkLaGKUXdh95T0'"
+p"UXVhh$E`0@0C'e0VCdB00X-AE[Z())eREJGV(JGZklAaRBHV(!pVk$3p(I3Hh&
+C@(YDAh$@F%%QYM9YC'eppV,'XV,L2@`9YG&@eYM@k6UT-80IA4Ub#ZdPBKj""@@
+8DbKlH&$h4V+b0@9PE@3D'MSrlp2Trlk'M'dm&CSD&EAD%'M"'M3D)6qMd`&rlk%
+'K!$lrF)N(0E'rhkGTSk+$R6cp'!)aT&aU`NBJB4rql52V(f)`(6#,dAK'G0i4J+
+djJ!YC"dp(4kD)E3kHKdp$3(04RC&S5G1X#+kF&I"Sk$SLG"d42kmm1L"MMDb#YQ
+,hK9X&B$U-Na"R!KP@eNS%iAiiS&`B$4FS1#+X0&12"TATbU'NC!!d#*JG$@-KNL
+HBJ)+hrSa#JG1@3kM!83kD14b6XH$KA"l@1ak"E6Z$T`FSG*fB-fI[fdFZKd#0%S
+k(6"5p$YKC9eJK'i1'MNFJi1@PLMDF'l6!3GVSeJ!Ha#5XA"`%#i1!RRKAL12"`R
+4ZKb5Q2JFJKD`lJmB'hb2S`KU(RqkG[+D2%CV4ii+(ra!jl5")TN3,dAc!@5*%$R
+BrG"Cf24Tf1l44U1Td2R"5`HeV"k`M@)Xl)*l1!B'l"K"SX(4"K"0SK#(VP)m`IY
+)-%k8,34$4`9fMj)A4B3c%)ZQNDL&'rI4#k%DXIq%+L(G)#q5(G%AB4JLL3@0"A*
+Bhf)aaJ'cT-"M#5E!ZZM0@&d56!X%L`r@%Nl)pX)NZEU*0T*UMKJ&JM2SQ'a[03E
+4HLBG1VHLE+Zp&)QmM`I40D-"+#r*0-)2rGKj&NE4d,4T,!cD5lN6cTd$#C40`4T
+MK01%bb4*dVL*JVLB6&CA!`Y&25k*T`M(K-9d%E5p"S,-MPm%F1@Ha'eT&Spb-DD
+Ead5'34cK'NT6d4c3mL3IJNAq%I@A,h)pJSD5!4cXN9B9H%JaXAp%G!`LJ52f49B
+q5+!5feDq#)JZAEPAj)Z5dLN5,f)Te+[SX!eGdf8L)#h+RrVLmQi4V(beJh`4XPK
+[JTVB#1))24#+Id4-6`Kdi)[mSKPFHJdS3c'2GN1pb)9d24V0&`L`"Zb,JF)I3D4
+&CrZ9'XNV+Phd46CF@%@k)S0ed46d4*PDK&-)Y9`[#*G8)[#*B[VYbBZ6U1k-%Bl
+)Yp%8a&9HSB@lJq&(GMjL`2b2'$0-,@eKI0B0f@#@MGQ#b#$5X(%CPLj-Xp$@$6V
+&-r)e@3((EQlfRqqISD26396A["j"Tf$aX1fiUR3p4)2d2RQCq&fqiqEFKD2QcPZ
+$jMeDe)3kRPFceG*I1@rRj)Q[4X)L8$3r3KQ@#5+T!L5qa'am#6CeNF'aSq2q%IT
+Q"qY@@qL1VCIlVK%XE*QMM(q4U!LcTDYULFRGFJ!dLR"M$FJ)X@MZj[H[B-'fj(r
+a%Z%3q#&kjrr)8X)-)58q#%H@#'Cm6d3`McS11%-L(XAX3l!LdLp0HrZ2JLd#hK&
+S+2Z4PSrC&QfCE`9qNdN%ec$j@4R`4,F`Kb,#X4hbSkQ%Ha#%JYU*e@eX(81Dk6#
+)Mkd)Q`M@,Cd'N5mFiCab)kh4q0%$K(S%UD0d43Yli)T`h(J,Xi'%8VD,bp!k)Ga
+alk)Gl%#L!32Ye3Dq5%#$F))+&ALAK$Z%,@@HM(D4D)"QM-YKpN39Bl(i2!"J`"r
+!Aq3J(0%Zcd4RA`3$Fce$ShK)'N+lcQ((%332Z48R3,QV5**M905d-J&D4$G#Tf3
+2l29$I0)"bDYK"-P2B3ElN!"@662V6)9IBJh(!Qr)K*F-j4,M8*X#8jSq4Z0)"!V
+C["qaM3JR#$G%&df@$dUPKA4UqXXQXdk)B!MK$(#-k)D5@L%3clN,B4T8D[)k,*M
+LJ-Y)1aJfCF[VE&cPUUXJL@GN!KAdeXFaQN!@A3J3$SV@lrh6kBD+)V4#+VDf`1D
+lSIVJd$J)3I1DV'Pf0X`NY$TLY,KM1%C%VS#0aSAC,9Ubq!,2JPKd$5AkD*D$3,e
+EK,kHl*f(C+[BPV+0EaUq[+ME+6@eQLFeaQ*j`Q3d+faX0R"BY*ATqqBE#E*K,Q$
+[3MI)4,rlp1hBRaL44-%(!Q),+0F9YIANR)61XVeBq`C&E&Xkb1a3[L4l,V,R54S
+,pQZAAALb6&ZPbB00@aV,Bkcpr[kfZVDfZNdCPEeY'YV!6PJ$5`Db0#Sk1XXYP4q
+A4SePHGGk$53@J#(Z%0Ul"Ie'!U9"T+ci0'fVHT1E2$@pA'qM4XUfYYMPQ9SYXHY
+MG5@UIiU)i5Y-Bi&MDr)Kkff@3,'dQeD'P[GX$6JCVG*Y(!bG2@-`-ec!cA0$0F"
+NCN[G2N-%LcX-+1pi'&8k@`Q"L-`-%9,!`@qfCpPUm$)-G*'VP[i4J,J,MJ@!CCD
+5XVT6f#XL0AG4@9fQ,49GD`aUlEZJLAQ+keYA34M1`MAlHMDepi"+6AfX5"TfLR!
+EBdHiSYh[T%&B!-,i!B!lH#XZ&RK''3!D!`$!"p4"@@bUDX0*!-G"mq#$pf#$fi+
+`LhR34YM"'Z))05bD1eC6Tm+#0DXX)!9-jHfJXCb")(Y+$-+-`mfd'P"Y,JM%RT*
+3!`alDTJ-[)+`(0E"CDL#0T%j-YZD@A""m@#[YQ!DbCPppA!-kT%[KX"0r"'$!rC
+Car!$rEB"[MXUB"EVQ9(J*kad#4dV35XBflm#`f-%'XJJ1S&r`B"[h))1ZJJ`'1#
+Vi+ciDFLJBA*`P@JN,0d%N!#3!+6p-KRZr!VrQ39PfR-eSk[pT$ZZ@J*""Uh1HjB
+1`IEZZ&A@'4!ND58J2!pHX`V&Xc5Yj$)),b#0TNB&F2TZh!CT!-68IPTe,30""E%
++NHCE)MDk#`Q`33SSp+DNpa"BhLXi4[h))heNTX(S$MQ&hqc,V[pF1bQ`&6k4IC*
+"fpB#Xj5cr)!S"`iFFL#Y)NIQ*`LLi!-1h"$2J-YFeMBfU863!i2K&Jp&V"3JJl@
+#XkdY1`4YV"'qE"@GT"@IQJVGJN#VGT!!3E@#XqDJ6@r1,pX%B(K3YKPEB9pB($!
+56r1JV2T39RddF0CrfJJq4"@B3!fGPhA33B5%Ji5XrHJV2hi+cK39Q*!!9KQA'$'
+*NNj)`,,mY2)VIJ39Sc#d3q4rIdrirJpM0rqrmS0'ah9E@HMPfRZhRrrr[qeSIar
+lIrKCMrAjfESk'Mfh1dFr+bU*F!bXr4b[ek1M4cY(4cp(2cml3cY(fcZ5UdESk2S
+!Jd@A+++#26B$FkMZ3(dFl1dHGPD)4QjrY,F+$)$Y%(i-p(RD2X")Hcje(RD21cG
+(k1Mh[RdD)'1rbY$+Sk1KPHhSD2Yjrj1GSqZ$,rERC@GQdICc[lG(f82Y!FMjp(f
+G(0dIdJGrLrYjh6p[RD2rIlRRIVrlk1MNqF1LrAPD1El(kqRSrajh6cp$QCS5f9Q
+k!iIc[EpIca`(1d-VFk(6dFreqGSrVd0$f2EdFhr[S"Mk1GpV1lB*8G2cY(rE4iH
+MlbG,4dI0!S1qdHGRrDrAP8G$+cJpXd$AfK$J"JL6T"(JP1RSjh4#TcrZSkHQ"R2
+!6RD(ZD2$cHGSrak21BII5!,k(R"`dD2R-5i&QElk)X*MpHMcZ(je(4cNTqFVj`N
+qD&q"&&VcNE3J265rji9E'I3jpcl1KjfMXp%6h0"DPfca`'9RD"%-!dBX!hZD'4c
+[A"hcNA#+*MT`Q3+#YG,r24lbL#r4bJU%DZL(0QK3RM,d5)j%1-dIb8$ISHeSpYS
+p&SQ#4dIbCqF$VFp2+r`bKZ!*rT!!0IYFl3#*c`N-V26J@4k##CZMZ@V6RCqMpV1
+cqrlE4Sk(M*`i8HEl+(hZ#kME$PqRdaihFk!8reG$TK0+0r1C&jP*j!*2Y*[Q%CN
+Jkp[4%I'd3TSk2M-5$2qTSjZDQJcHGc[bD*%'"A[rq`'4dUL8dIdqF%IdNrE+h)B
+p(10mJJ&dp!PpcHrd#2JGrdJ#U!`ja'CqN!"`&lQU9),rRD"[ppkMlcK0HF!e)pc
+P$K)+P5j`&P)"hiC[ITV&"3GBM98&0$4lP&$dd$HCSj24"%bD&*bM(kIX0@hd#-l
+d1Gf`%HLPrr5%i"pMRf20lrTN+e2jQq`Ki!V+kDF2Sq`R2pq2)h,'icmpN9#IGqR
+f%ih0kHGRj[6k44H`+j6'$!9p&1F%&(Fp2RIN"ePINlB,*NU!hK0*q[ep(RIV#2d
+-lf0(pT8P!Pc@%pRri)QXr4lm8a+U)kR[HHarj6L%14SMaI[CrR)*riG2[f(GS%S
+!638A1bZR`p(e`IMM[B$HdII!rl!HLR#r`4Nqq`RY(+pFMFdHppcRHIRTh,#Gc`8
+#&HZb@fMp24rYSMpZGRYI[Np(4pX08QHp8$Z9Yh#B!hkrdNEr3#@"ahrRD26lE3p
+cf-UMR+&HHKiT-3cr26bY!K"l!ire`0H-2YdI3bZQNbdD2f[UqF2LSSpb9!*Vh`'
+TDILG-X4jheIdk'9cZj!!SXeMM`Rp(4mrTrVpXJ'5FjAXja1G4r"PH`bIrR$Z4%#
+4l4lRj&(k*,HSf-h14)G$3BYRXj@9dD2rE+ea4[4$p$jbJ`L3!%cD0(QL38D2fKD
+HKj`4RfKbiU5R3kA[qhSG-KfbfqL1rh)m"hZIjfEdqG`IFrakCEA4JUik`MZGSp,
+Sk26lAe`BqX%AkSY3iiXh*`Rf[9lE1iHMS%`+-9VR%#Zm$brqIGlZM4BH2k@eppr
+pA+cZ(cZ'VE&%M(5$'4l4$9p$TrlrfJ1rMpI3k)RjFREBUd+,&Br6PC@GbmVZmV+
+cIY*j&(098[1l64kHcmdUNpmY9k'MdHj9RRR8IL%Q'Er$Sqbk)KdFB3fMrQ6drr1
+GrTQjh69(U3m%[6'(pP%1!M3CDKpY("Sp(rG8IHIp(4rMjR1+!#e@TT!!MPdFlpI
+kHRp&'Vq64p[kVD-qGkiNH8UdmiXpi#Q6@3YdrUjh1lR4cIApSN@pNTKbIZjfHU"
+FhkVSLqMR&QXL14&qhdmj$PC'R1$TbPNK#rP(6)X20d&CSr@"20qkKrlCIVlBZ`H
+b)ISk2YG21r59l-B3XmlA+lE0)3UF61d"c3*e&Q6i0)hcU*-jSj[-942e89L)kL@
+R-j*U*e4rfdFpNPZHC8TP+!@&QbZQT+b%l&D,A(Dml+,*A1qkUCPE(%U(#",IGd%
+b`j+L@k&!5L3a(e)FHYd0(+)ek*J&DP"Khk4%N@Sf3`-"HH#SF!VK(6bKUHGhrZ$
+Y9`3d5d(r'%Sbl[lj)6lJjGPBE+35Zp1!kA6cIAmmM28J[fM+39Va09qN-04GqIP
+*eUQ9!6h1MrEQJH(`jfK4mEmM)1"Ij[e4c[j$$)@fLVGC-i44(Q2*Srfj[RX4rTj
+TBI9-*(eS*29M&cb``XX$R-Q*bY$4q3K*PD1edIEh2Fmi`SFl[p(a[D9*@Mq61,`
+k[4LIIG*T1Qe,5b3&34@#LqIdXV3qdi9MQH!!AFLi-b)5dF$d`IY`d!N6VqRlCMi
+lNYYSV2f['89$"[phcG'MfaRMHH$Bac8@clHb9QHJVdM*Z[Ccc'jdrC9+kYE"X&(
+"B!b8$9PBdG(cmMeQ$RRChRD(4(6JSp$2k@j,KV*JbC8[,UjN-'D'HEfT,HNRmmI
+L4aK#j`CcQM6d@@E@1Icbdf'cfh1SN@!l8ZIrlQLcQpXr*6Gqf+&C&R184j)"c[@
+(IU2F$AeIY-9PZRTRHKS%6+aiTB#hXLYC''BNJJ[b!%qkXCL"[mCSiXcUY$2cIar
+S"Sb'L+dFXc*,%`*L`%pba%@@kKq(q'Mp81MDV3EcIE-U3Nc@DLKU9c"1lFX5Pkj
+Q-mTc%DCSF'2VkT'1UPqNJkackeN&F*@!'LXA#0KQ6$pVhr2ED59fl0b64N-K(10
+4eNRc$$,E`"[ajf9ddDfESp,3*H#edL"@DM4qVSP6CHdE(Xb4BXbUhpR"YV3I84#
+e+4N3pfAFeQB)Y2B$J!rJ$iQ6%Nm45[qKJbj`G4(BU[dc#@c+,GZGl"+@c&adh@U
+8aRJ4pbXb*PlNd88&QDGbd`@D'5+j@krD-@bXH'6#U*!!0A+&cCNVJVp`d8rE-N(
+)CPCK3p&!9Zd#Xhj6r)Q&(8`e3Ybr@$KN`"5hcM@$9mRqe@D8jK2!+K%$KCf+f4j
+MkL[24p$RIY*R8D#*cf`A*Ab19NC6)T%llf!j!H&RRYL3!'%`mp%`NMk$BafQD9i
+IYD1H168FbGPP&2U1YZl0rqZE"'GdJ*-b"eUZj4M40FF-6lA-BAQIRqbc+,SqF8E
+D2k60j-5RDV%Kl$'RC%'+C48Y,FHB$Kc#j4,G'3e-4KG(FjAlAdf[icrlI33Slmb
+$GbSQmlpI6ehXQfX48N6bbaZjFNd"Gk!GDc$G(r"PPE[`*p*NX3AT4+9XPM,emhe
+fRh4r*lLe!mh+0J6[ebJ0(Y[-pM4pNG[jk8I4))QJNbj$PCiCaHUETN'USb*j@S@
+C'jBbbNR[RFjNMZESqGqRTHfMH"GjjV`QG"krrcT+,l0c[1dI@BD*`!V1I4*GrcM
+,I46MRJX[CpaP,61%8P4SP@ZMdrEC)LE,(6pPC5QLPTc[2-Z[TCr6l8Udlm8Mq24
+rh4hK0qJc5-DLA4BL5*YVYh#IEB+lpPJN*lYQf31RpAl544Xc,89fCAD&RPIND3j
+RNGcR+fb1EBIaQLGrQm0,)B36(Bf)[pTAB'FSY9JI9@APfhqc+3D,0`TK5k*&+ZB
+*SNFfJa6f@ad(IfD19lC1FR4CShLIfDl'MQUU8PCCDbdIr$C5f@b'2K5S(48b[Bj
+Z8Y(*9qrGC`JK%p-FqX6c08,+BHlVJFrCSJJcY"1[jfj#4rDpESG&[$GR(,cC64Y
+fd8%R$d9Dk1rZHhcPR#VF5C,Jb`@3!'610BNZMRHia*Jlqp"HB-2E!-4iPc(Tk2a
+fCH'MQMBV,DdHRqRePJC)N!"@DfaCjhIqIZ@AerZU*4d8BRCS+-U0)6-I+jI&qdh
+9r8PrILG'Mpq"Pd21qlqdbKY@`9'3!-L2r*l!r49#,)`cP*@1M(IV0Y!DAYYcl$A
+%N!$`fp&aUj[6qeP-jT6'BBSJ6RR241-F[dp$p+b64KD2S,'cRpXZJ#Q(CATdcT@
+jk`YXMLC@8-(SqfYcA+k4TI+-r+A38Ccaqp9B5NE4Pml29`&*hRITpaB[e-@$j%J
+%9lRfPcSmhrF12rGFiT(&RFdkR[RKUE8*$ZHQA$c9BdIF0k0XKKe0e`ZMN!"1pD6
+iLAk@cP$VcH,52jZ9p-3V+pR4ra,brVD2VVHe9)(mHF1k+(XeFcJf%8q6RHJk0c+
+dIZjAh9N&G%c6e2icT3R8dDY(S-Gd%2lKZDjfIq6rp,3([VIVCI%rlp,0c6"(QQ2
+TETKM09r(+6ZR*Hrb'"CMU-kMdqRcA6[ZQ@LeK6BS(R0dkHRRr6,!QKRI88iIl3m
+4Pj,2mlkL&TB#*)&$C`SeRTXB&fMa-lphcXdXBSfJHR6$5iXN-84VB1Hah+q5cmR
+rkjDpEJGpIc[UHiZUf6PQ,XFQDQbkJVAG"eYP&qkX%c,,"I@d#eDbQ,2)DIFFcDe
+H%rm+b%-@,2Qpll6-f&Z"l4rAdIdIij@JTeFl+k+eT9X&CTVk0j@jD$mC4$X[)p1
+MQNQEFNN+,Frr@Md%#P3Ha3'2AbYb`aHpbLrN`d$KF@8jp-)i`DVZ!NpQKq[R!p0
+&A4craXb14aTF*k**kjfZXl4lEl@EQreX9V4qScXd#CQ%!!rj&J2Ha1pcQk"h@d6
+TI8cIY'('LpbHpCmNpRHiZ3R4pV*CNJVUZ195GbBV`&r8CeG1FMhD8A5jh1ppGMa
+Q2h0lR4lrd1Q9$CTP`P(f80,RM*'VX8ECqGc@h(NRfIdb`0r9cXSTh-f[ef8%MZQ
+Bh#)id+3*&b!HjlQ9P(2&@kB%0dFV3kISG&`Sre1&(mKbr6ffEcYUef+XN!!N4aS
+CjH*8&2ZQ8NLjd9eKb`B!iZbKV(cEKMHaq[lZMSIGB`bdqmqMl"5VjhFqIZ3Ur1c
+Gb42Xb!HJC1UJ"lC351k@FDA88($Dm-1#BFXKXjJT8+XpmPqEhRcP9rV+k6C8fG%
+i+emcV,E+N9!lh264@HEQlPC#M-$4f+&iL#h!Fk[YXrlL,Sf+%DAXj5QP@cKZHQY
+QCGGYGm&H#601D2d9dG&MQCTJjh1lcerbHb@&Ql-`Fb5,2-6Kf4I3cZm6SFVR"-X
+P&AEC@9fGD*R#iAB'N8FSiFDjXk0c20(SLNk1jcIZHhqR0h+EeNcK`-Xddqr@m-Y
+qP[E1Ca1"$Ue0jhfQH,%m,KNjdG(l@HAk5pfH8"C45T!!5rAkrDGjkrDD!L$)%D2
+6GE!4VL0lFCcS-ST-C1Sc`5X&'KS'k#`R5f,cXlkV+*'$S29cZKUa88rGrj[h2Em
+llU`PY*MY[B-VTA69j5"aV,hTAqDG[4,TM,@6)901Sk$l1All2rEZ9&*r[SqFac"
+*3Z8MQmlrjj[hZJD6+(#T1cY"Cc+bI[idaAMD2DCV(IXh%b1YHQj-ekc+!r1rD*G
+$q(3P'rf`hZ1XaC'4qE6B&cj02-k2,lBkmQFE*LT0Sk2dFdS%Cd5ehII3@A+0ep9
+ANY(fIXNIaT[P[ddi@E2"DbAK5d2cPl"E+q9re*!!4B5XV*EhN!"QrH91CfEq[4r
+JrJpIXblH(FPcpRTHcZ@I2`fQElZGc[30)`Jkjd0K'e(H1D9kddq`TfFe3Jpp60S
+mil!5"H6S&m4caj(*SXJdUP(HjTPmVk&Fr1pNj5kTFbFpR9'&RBLc(0Q3!)p20cr
+FAJ581@Y!,8j9ke28GIka0QAe&LYAE-BTa'kcC+d-hl43%h[d,8F2%dYU4Q@Vq64
+c6ai,Fkd1MdmrQ&DQEd`3G22r)1BpETqfR+qcrYS'FYr'MPcHM4bFSkAbqGcQ%mL
+e6HRfhYjjhRf4"jr61kq`QclR9pKD`4&U9GRYcQJ1Dp,**R@DdUYM5,EZ[1G#eHH
+TRXd1`!bqXFP@Mq[cp![%+ZZMdFmc*c'%4BHZLeCcA5iDjHZ9`BGlXk24rJJrJ2j
+aQr`BE2aRJMaUc$!+!`"dfi`B0dIi`IT[A(a(2MF[KG+`B+lC39R939[SY'TqCCq
+BND$566p3X'#$"P9ePj2r1!'FEpl#VpMJl)q&eMZZTKrilEX`"i[Cd)2ZrCJJqll
+IhE@pP3GEr4EIr2k,cl[hIrhfGjr4pIV[Kr$q(rarJl2EBTqa9MV!PJ%-"1PV-Cf
+#Zp6MqkU6B1`VX3q+d&T830kqaaEBr@,$j-&RA928XZTSH&"D8V'PZS0c"qV8efT
+XG4"V+l8f9Pe-ldY6'TFcK4m1ZbimhRbZlVS,(&h@K)",Bd[e6T'XXDA"B*E'Pf-
+06`S0e)l5KUT@mXB)q*`E,@ak&GUl+9h8'TXTAHX%dI$lZ'1IXe@HAADQ9i8%(K5
+k(3d[H3DQXUF1$'dqNm+cTG#blQba*NI$NDU#R`+l8h&PK`@@*aUkEer!Je0M8iX
+'rXDQ`p541jNLeN@3!1dr$Kf1*[Ul8r*XU'NJi-babqliX'UXDR-Ji9M8la#HcYB
+2#XU&6p8k2$[Ul9Bh'Jf&P)aH6[ipr1Y)p6Q`F#28lhQ5-2Qedfa`q$TBfSJKhpM
+UXEdE($mIL5YpCGT1Y+hIfG#bRAe6GY%e6Z`MGHd6fGIBd2$N3akAPmZ$hGM[l5$
+e+ljP5k`r8Xk(jTY*`8F5+Th9#[Md2$XiE+GaJ8GjheT3N6ZmlkXib*!!c+kPX!8
+peU)1D#Q9A82(m+XPF+cqPKfPMh%l$(2J(PZ#RVd+GA"c%+F['XF1(,MdZE`B)pG
+34M`FfdVX[Zl'Gk2Aar[8V6%iGMHk@aM`GiIf&[V1K"ZZpN6Sp6G@G$hGcBcZlN9
+e,`Yp"dCB42B3F'$Z`5j0T""M$"K$f04T$r2B3mVV`4E#6Ee+kElX%"%9!dKI##&
+mM[S1P,UBpM5(0E#aT39H[Jk!4&TBb-1YB*U5%ec5XmAK@-VZi1$TDkPjZNJl#jT
+3F"#H$e)0Jd6m&JRV*P,(McV+KepG5VUPG6lZ#F#IX@#MBfN'qVURMf-khT5+@54
+mmDZRGI(XD8lVlQGKiI!JVXZ#$Q`GkK0PKSGI"aBqCKqA"k2Gk523heEBdpjABIb
+C'("BpM"[Z($ViH"b,IfV6$m5bUFZ03aZMCiI&XF["emDdRq&Di["em)!q*M`q*!
+!bkQTPG#9Vl+TdE'ae8Vm&GUC'AVm2m&MUS1pVX6U+kI-l5IGBXZVKmrSeel'SEk
+ZQfH*&pHTiNLR-ZB1l2qraYILlqXkr8@P,99`"GECiILA%E$e-(L$%DUbS5)mkTM
+G#(CiI!Km5aRq&CeHpXGABidhN5*m[,i%([ap9qU(dXZR&Ur`f[JI'e([DhbF5je
+Nlp9$UE(@f@VXp6Drm1Ta2!UG6QIK[EA@rUYpC'br5aCHTKmQI&U)YE-efXZ[QDX
+!Gjr&U,@CUF,m1,&VBEQpXG*Bk5beGTUV(@b04Ckb9Vp6)eYGe1(k@AVp6"i'YXE
+$'UqlEbEU`p(-VGeGD@4V,+ZViUbC*KpfRJiQkKp,8k5ZdXL$`iGIUlA83pj$5f%
+c8kf(S3p6XEcUHfep6bF2bDI8qMe2Rp6e2MDcbG6[SI(kQRU,HREeQ[Uq"r90r$3
+eYYd[*R@-rakQ$9`CrG%'S25RFR&PkbCUVH6Ep6"(kQ$dYAJeERUFEqH``F[`+H$
+QHl+Kp+ZV168h9Me0P*Kr90r9UG*Cd2%Km1(`+F[@@GRUV5pmHde%0C&Uj',@b)q
+(8mR%m$-q6hGPLA@UMcr,VThGDV(aSpCe-2T3q"2YF[@`p6LhRfpA@5qT6SIl[f1
+Tk[rJ!I@qPUERUIdG6r$V4CDq(amZYZDcdHdX2(a2`aqTKp(,`BI8r9$lbAlqRYq
+qmRj'[r22QI`9hjkGcpbI,q4Lh9$FTIr8peaIiX5jq4(Rh01kl#(dkI'[IImUeef
+CU-RAr-qeUZ&i(8F@(dVf(bG9BeXHYY0EBPN'Ee06#PF,K4V@bqa5[C[#i8(JDbc
+V(5qeDrGA@NJXUlUDq,UDbCe28jPj0TkqELH"0Kp,9$IZf#m+hTGh-e0[9ll`KJ2
+#XrS@H+q9rpfIEeRK4D[lQ*Glb(Fq9UGr"hF[5f1NYkfjkR,UGh"e06NiYeHre6m
+'TUY9"PmcQ3HPU-'RFp6l9EMGaTC'*JjRkVdAE8f0CbDAZb1TR4YE$qU(bEQPf&T
+(UkVbiI5c,UEdSHTRfr8r``Dr@@pC-bq*Gk@4CBG6m02dVh[GK)aEA8'4eBdZ,`,
+Q`jN1kYGE$Mc1[ZIkBHlZIkCrBq"5KmRUGCq(UGCe2NkMUI5!2qMUF6ZKM25#AYk
+p,e2aTPKbCGKH6HCc*NQaV,Ufr9EeF[ViI!qCm[6q6r&VH[KQ8)ZXUbpR6ZTH*Gh
+82IADBZCLkr@hR8fr8rkhXb(b1$EpC6kM6`Pr,Q9IHTpIFpCqIbpGpljP1mZX5kq
+P1aTfkRDq2pLTcHMAHe(RmEC81Ef0M9p5clM,h-c$j[BM'3i-@PPA-QmX16rIAq2
+HD5(Fkr%Q2dam2Af1NXk[Bf@,Ep66kQI&2kqaTqP-ZIU4GaLIUe22j-V-j6M*DY-
+Pk28dq6A9Nb,8ppETh[@CGM2p'PM8b"fYVUQmJl('j1,$d[jZ4Ek@(XEUG*V0maN
+H*h@Yh@ZX-'Tcaar8bXcXEbPM$NFDdZUQ-1+[EbI+bB0rDr0RhJ2,6&bGp$iQmmH
+2KB0C$CfmM,j2"dXRa,beqCEdZ9ErG-Rq28YkZkPdjGCe1Ceph$$`I#LPraI-Upm
+-J--rib'k'3Q@&jVDcI60,BeP[r,Llc6f0,PGhiN22m,KiPA6aBFc%c,VZ+X1mZD
+['PclNFaf-[%LKeq,&FhX2PJAaFcB`l#kKTkHCmHkTqp6cYjLF(XH*ZBFcH8iHqX
+G4BkLaTmf4h'AQF#22phM4GaK`ql`)U6!,$lYR0m$&p+aeGTADbc[EV93kbheX2J
+BRNclSHMVkAPh8qCUSVfCU[!TFrdX5hePj0m$V0E)G!kaTDqPc,QTaSqU[-[JA0,
+I3h["aiG0$U)I,ZDZB1VlU(S@Z*jX1TQ9I!aHA,R!0p@(dD(GBX[%j@RLaFbkYpj
+L3H&-eF2ikl9f-hp9$X)mlhGjH4pAA9I,,S&6IDH0PlQhbkQYKep1kKp,jqXZG4$
+j01hePGQEZhePT'c)Tr$Y'1PmQ(NpK&Pq6$i',qU2U)XZ2$f-HVUIa`blQRjFE&h
+hB3mAU*PP6iQ$6eN2BA9Ch8M,XU&@hrRl#kRpI@4BI"Q@@Af%-@SKePcQ5p6FkUA
+UBX5'R$hF2HF6*LqE`kl,k%[-$%ZEfkTKR5m`!XFAmRKeYRBkLcQlV-QDU(m-2Sr
+lDJ6DjUpM-dPTTHq[CH*kYM8iRIC1*G4Af,Q'6rG3``jRBA02H5m6MA9[$c!&3j-
+Dac-,U)LYEb)I$ZVR&ifaPl#AfXcl0epQklfmhFZhc1[)N!#'TUUl94mAbkb9X,Q
+Pj%bK$mRB@0@kSFfjUEQ(QfH,Z8$H6`j&@APkQ48k&PQA96S@qTKlU(ar9Kpq0Km
+5+V-Uh-2QfqTXkIJ4X6m&MHhP*`'iHjMBI+LTHTAAYe1i&c8i822m[G`hQ,GBNZI
+[*BVRPi9eLG++VHB[#YlfCLF#ca1N5Y9mD'R[*N1B'GhYi0hD6Y6'UHaBe1"D@82
+'03qImRcE5Gb,ZcTF#'6CcZM$bSXc`-AAiYcUE5GZER&[*hUfG1kmLjXkYj5(#6+
+RG`cIB+ZX[ZSH,(SH4Ee0rVqfTlQ,jq*hFE&mZlKjX2L@Fr`m'Id)Hq+NC[i)24U
+h1*RBR)Yk82Pf@,k2i)mqC&D8m+AQ@pl&$`CP[LH3!'5J3CqR`Ul,jLGe[lH(LLf
+49F+k``c[`MD5+Q[SIJMkfXLXXbC*lV&Yj[!KPPL1hqf54F128mMX2Nh8bjrk`h-
+rI9N2+ZiEQRf%[%hPe$aZaKjX8r[SGc"ZEI-f0c6RpK$G3c2R`qAhX[%i2rUCmQk
+q6GBpjZlAb-,[)DH`KU6GIC3lbXZV(%l#XPiP[8[EDbTc*elEY!b!h*heT2Pe09)
+TG'bUhQ(dEQaKj%LRDd09@A1CG6lR-LTkqKkN9T!!qVACPj1he[UT'*Z[GhmDK$`
+,--LKaBKVZ9[,b'kaEV&a0p-a2%KmZ,V-bkaHI&6[)H"$Hc-AJ@H,cjFqhVD`GCj
+X-0eEeEc([+%I%p@d`p9D8Z+0M'V*H'5-DEaqMD8j[,Xm5mSCIU@Q,H3lQA$Vkl8
+fQ([lI%[-2N@FqkM-Fc'a*P,J`p+(hiFP1@YDl$mJS`'[hPcr&$emE&id0j!!a91
+PFl1[ZX3MmV2!NCFL55V3m-C6-Ym2MA8M,id2#Pe1K$UTP1hKh-2%ZY[Lm'VTiH[
+YjRFm#ZbqDRHEkhc*Q)PVTJ&VJdNfGP5Qm1bQ`q*C9CQPlU6CiYer&@b+GcpF&if
+2$YrllfkQ8qqaiI,kM5AF2'l!4Q(-iec6KmX)1ALGJeXrNh08*LkaCQ*,[SI$PlD
+CKA@%ifAK`mLja*BfGCFdTmbKZXZ(H3pp@G3D-91hM0!`"UA0XCfUKiFDKb,6$iF
+2Zp'jUBmc$j%-DK5(cj*6IUV,&aSH(TBHABcl@K`EQ"0IkPRK`b*qrN9EUH0G-'Z
+e9c9jX@C-aHq(1Kh`M5hN2'PcJ'm#ckQGEiZjPeEU'kflMAQVcUV1PjFG0I&1e9P
+Cbl6$[HPCcZP$c)1$DBYV$emZVEcGI3k0P6m+(Sb+A,Kj25N8j@UKemLP)a,A%+d
+kPA*VE+(`Sp28qq@1p,'aH9G%rqrMBZ`aXAQ%I%l-'VXj-2N6#QDVEeEIjNL%[YE
+`Yh3p'CL@m2A``r2(9CNr6dm,PIVRGMCiSlG0$kPZ0#0PG8!cEV@`rKbq&'XURQe
+VM9D@dNI`emLR&I8b0RKf9AX0I$bZ360c-@UC8%`a1raBN!$bLj4,6qq0EjPc8XD
+[Bh1,f'a(3FCAeBGh&fm2T`rLKpI-[0r$qa6`[(j%@+eUUQaKp5#XLTa6Z9+jN!$
+[iFQd+ZBUYcPL03QqChN1#kDbda1qXBH0)ThFE&Yjh2ZV(-ZF5eSH4FeNZT6ZThH
+$F3ieP8e9CG81MD3fFmY&*VHS("FfeaGcHBZ51Nr[H61FpbCbG[+c[EHV`L,hMEj
+1J'YjN!$Vie$mGP(UFLZe9C&5e8(+m#da,I-jPR1Qm@$aqP$UVHI`!4iI4N6q+eV
+Iab#3!$bp9$Nb+9P2lV&6A(,3mf(bip29G#CLmf$9AN2+l'(b0rA6GG@A@*-a0jT
+BT&5$-KPeBXcX)HqKf*`ib+PM6mZda,UIaSF+hRhF*0r$L@d0lH2lQ9KKC-R5f+D
+U9h@NJi'k(%F$ZlI-LUHEC8pcKANbI[XQ%b*lRCeCRc+Gep,%KjiJV'TjVM8a3pM
+hX-*-K2LTh-2KhX[#QB8c*KrbUhR#K[I4i8[&L68fqAhX2!JpfIFeCQ(aKl'6$`l
+2%Y@(9c)3(TUMQ3YXNhGTLEbaKj2)YkQUKlfca4UX@eS3NbeD6,-"GPPkUX[,5Gd
+TAib9Lka1"HGHaU)HaY3QNk0fe(0G04epCZlI-!K$kR!'SZX12LFf(ZKU)20N8Zk
+S6lQTUS1)04&9iYR2ZE+PC@KH[f"EeQPN6Ph8pYN5G`*&2X)a*jb)0p&0$&VB0r$
+`4TZCG3p+#p8q-896'm1%NqjX9,X,R,iF%Q%KYiP[9LRp4XHp1MIACIB6+(4Kj&e
+A3l''VE'p$XBHM$HbhmQ5KKP+C$J@1,&Pm1'ZQdlR,i4dBDFcCCQjKhdQ46h12HA
+8rIH*$$G`m(I3m$J3qTcBHI$f)(Gc$cl`JlEjHqZDXRG@c*M0r$MM4j+3!%hm2kk
+GVaEH9[*PM5`F'IEal+PDBYZ8fh9$Q3fmh(Q8Z@d$@mh'k0LMfVTT89b$-,L`r%)
+5pIA6Gec*@rKlf%[BNa)N,!A"PcDGV@fH,5TqVTBHM,Rqp2PfP[$qfC&UF[ciCFm
+MaZXAP6-2R`c-2Vkl-Nc*mcXSH,kLMhS91$G4idLTCCIil(99f*FjH[JmM`"G+I)
+'H%#em&lEkUha10$MG'03jPi@TZADBPj1i6((mLcR6Yr,MeCG5GBdjNHIcq0$Dr3
+Jej,emqR&,TEZjq[@'DfGKbRf%HN6!a9BVHV,a0KhSc@mXDQ6-,m&1ac,I%kqhRh
+1TKcX@ma2fmce,'S@i"faR9A08N@!,BJ)KKN6X(N5+'kiCDXepE$[irfjZkjDEjM
+-cpb2-jNAekS+H*`SH"aBI8k82[3pM[f-cDZQCMfPX2ShbUpKmU(MjPdj$hrK2`S
+mp-cXB)je9,R&YmbmY-5('`VUGaEQZKjFLIMB)bdbFkCDPUSMRF@FrB9df42MeBL
+lb3dVX5kRETaP-(B@HbR8mXaTF#mlZ(aqIK@rB`lQhHQ8QBMM+8ZaP!1HQ6PH)-R
+)braap9BiY[Pkr5f88h93m@A5k*Jp,[FD(ZXABc,'dRDUda04$UPSCp'28jG[1ep
+RKmZ(Bf1CjUC6B`E#'bRbiBG4"VlR-QI`dlRq+PjX2$mFa)FqjTGp$5la3ZbBGhf
+!SZZ0Tl,lb25m3T[iFV*KlfjTpf&0GGl$dKflq-T6KPF@ZN8[4XUR))@E#(K@2fT
+[MmZ(Q@qC[R`bKTpm@(KFb(LcG#(j91,l9@mYi``hBakHjP@QaKi#V2UP8(B`mHV
+GEQ(r+RHF#(rKLB9M2VU@$MGl'JhpDGJ'ZKVCN!$iPGHP,d@AVc)0Tq*A6HKBiYd
+kC@hTDU@aPHlVTYP6TEq(GDQXZCX2QM,8Q!Z6A6CrBedle1mdPh*Kk8ZIR+&HCEj
+-1jZFbhIaQ-4FE1qKk@PXX@bUDqbbj'@FJ8HZ1pKi5CIPh'rY$2Rm5(Ad)d2H@q*
+k1-1,k9Uj#V$b@11k*A23`[`$,jHaJXThB`kQ$AQBPmfHaP29)6`h*d[XXK)Q3jY
+cXaN+R!V#FV-9Y,HA2I*MYedKeMq-E2Hc'kSVSiYMl8dY$i[BbkF4Q-lN1(QaIAT
+`jPa$-RbrkX5CeGTQ@r#Khi'-'pFK"'Y-5Ar-b$hB`q9Q60c$kp82cpFqep5hdl@
+1h8dH(Kmb'ZYmZR`6@1YD($D"J$3M($21-G1e8Z2Q5ZAFiH[JiI84kXVSeP[0Ra&
+jcN3)&cKM6[3F$`daSD6'0brJeEQVN`rZ+M(J3`qT$`,U(e,3"0EACNCM'q-kBdf
+9E,,THcD8Y6"Jkmm1bBhSlhjqAd5p`aMIr[%f-V'r'D"VYMFC10M81A$hYGHq`6k
+jIHakbCBH@*phN!"KEq(e1,$h[#-`ZSZMcFR5qbm[b#V+kKm,[GMT*'(cif,%-G%
+FrQREcH6cEIfM""ZE41S'%ZX88K-VlS#,DfDaX$+VF@ja,V$rFe8(,*MFcL`lk$e
+,NJ%AGGp$f&[LkFh[I'aCPT9Yq+aM-Pe"U0D81&(UC0GQ61a'([0c$rrdlAJ@rUA
+1C8lZ9epGBRXChm1aXm59KEQZTm'C5e@[XU[)MGa0iB#iII@9fkBR$e8T3@lfZ'l
+REq'd`i5d"iK@G5B#i0IABQqXDA#mIVlXfqS@eAGM'iF1jLU[),5jlN&ThBTLCh#
+Qrj8l8BHcTDq2@fHAV)f'36kq2L&ckelLpm4,IMfqTJ[BZCEiPM)TDU0LkPbUZZ6
+LlfhQmZ(GA[if-0$`*Q*hYCH9Sa8@(A5kXcj'*GIa8[9KpJP'k4YEam25bBbJc$i
+IHi1AcE3UPhDBRblQPVl-jbhjhpX6XAba1,H82fhM%eVb#e[9+mqC$`ZP$k1I$ql
+298GcPZ3@U6HPC8YrBR5bp2-+RXkVHEk(pLIqlLC2B@-r,'+Jk8*2,3iX-DjTI9U
+q&-TDRAf@Cb)fbQqD!Y-@FTRAfFl95+IH4X@2QG3F8!aIjR',VM"6ZQ`6f0EA6GM
+,RImU@qVUZAf,)+de"ApJX[EpkJV[RF&FZpp5(LfAmYR[SCTFhjGG0hG[Kql8k-%
+hARTK8%VflZ8aIG3kr$M&YNBZSpQ,QmZ+KViFEP`aZj,1(L4l1VV,QK$T2,Md[#J
+ar9Ki[-KkA#XkYe9LaEc&,hpPKjIB5E6&'+c*HhS@GR3Qip,*K6%B20XiGb6"[h8
+lEl+I$'TH63j%%j-6DiS5&$AkqKCR,*h0e2PcYJCjqq1%lJF!Q@aqI[,c%Prh-JT
+m+I&qHR$iNE&i!AdrI1S+99bl[Rdl@+RDbjq%38jXApp,BkHYXF[*H-G&5h0c2jG
+TXiqB`#P)HRM`i2,XE6$epR2lbZ[CA$KTG'+KM@2jX2K2ZaGG1`GM-`rr`LiUf)Y
+Gc6PA06rK6LTQ06I3ZE$T26G8&Sp(9A1'HGj0T,Ri2Ab!PUka[451`Y-10Bf-l[6
+jp)GIBN'4E1lJ10A[C4bK6I%(N6HL`-@Q*iGLEU1*+kA[f9-F0hG[KM$f9,`i-QC
+9QIYBPVp+Gl"d#2([ENj44lEUQAdS[bR(6$`Ghk0TCd0IBhT)H1RU*L45qE(T,'j
+-a'DNa3"[SBp1(Bpj$+mQEVpECcUjDdDBQ0'eq(DBPUeKpM0CFLjm[idrXHq1`jH
+BX[qi[i3krQ3q*[MI5e4hKkKh3'`4+EY[9'$`YpEbjq6-a0rGB[#kqZa+Nl*XFZd
+aEBRLN6j9l`,'Vhej1k1km4J&!,$8hGcCcXC5Hh)L0P9YV6%h@01rqQ-,2Yj[H`q
+*!-,@LCd0M0`GMG8$p'0cX,(&$'h-0CZB``h#Hc$EPaKYIXE'THmf(N@8hRm#jbd
+a'U')LI$%Bf0UVI99elFcUk(Lh1,(br0)YlfkKeje*)G9'SG'+aK+[CA4e#BHYhI
+%f1NKphie$K@9#ac14$a6I4iYT6ZUFT-4PmC-4mM%m5Ihec9PaA8Q$j!!kBRM$%m
+`r&`i,(kBR[4LI`iIQNidHJ-6E9QUKmLhQhZTdM@,a*Fl[2GH-@$[M@Z,,QrJY+G
+[qcL+#2$G`41N28m3BZeZDUhp3"NfRU48qE,ee,BpJ34m3JM1bBGd34Q6XQhTkQd
+q0PlYJ&e0T2Zijmel@-9*0P9f&TLH2Mfq(p9-E1Rfjc&)Ge)U1!ZalDaXFAhGcAC
+IJrhiHl8PfAFe04$[MVYr"TQALcG+YkX20V"PV)rU[9*M5#QjVUA%YM+82ahmH(F
+fNk0BafXEZZkMB[G9fUZD6M'QF0A6AE&bl'(KZQ,V,IY*H,KcZ$)RHA"ZEUR-k[&
+erdTh[`PA*Q@C-M5f0,,f2-LrmA02I3m6Gp'(H5m2"f2-TDqae%HUGJ)GQ-GaAp-
+G+m1'Zr(DISRFZ$acE6e--10UY6@XBNU(RGkq'*jlrYLF)j1M1+!(`)UIU5jr0QE
+0-6$h@YMN&MAHP*LX2XEHVUV6ie6GX!ZUI$&+TZh`qM+'*lV[E+R+0K8aH@-($,h
+6!9h)a%hFedl`IY0BJJUD`I)Hd&6YFXJVbGc'qQBD[(jj2Z36*S"KMUQFZ#EMEba
+aGfH%I,emE&!Vhd'&-RP68GkB91&Pe1M$DGA1i4Y`plb[#YUjl-,JjY1BA@64aXf
+-(a8`HmB`IK5k(BehdZbVUl8XB2A91aXm2QhAm01kSEkX6SamLq8e!L9[SE,&Q@2
+ReEI*hpR1JD`Z6'lHGXAE$EYm--G-Ib@9-p&9-QPfj8cUMVqam['l'jUlNB1+Q!2
+J5jrU6-6Qh@hB`dPkB@k`qaKr0UV5rUH#`#M#bYh,U1A)0dS($J,'(Beh`+(#-i!
+cL)GdGMG`&E[hFE"h-DGf2HePk5%@qTI6#56aETJj6YJcMDN(2dXBf*A3rmkRp6b
+"2Qedh94%#DMN#FFZ1R+h9a[8T`KcMjA,e0P6ZDbjZSX5GXE+Kc,,$MeIa`m[93r
+XbIIKi1N6#q*"qV8*KqpiXAmec2mYM$qA-SC0M-GX2Xf-2H5hp-2)N@Ab1eKhq6f
+*cfcXfaX5',,kA3XF-ip,QVdBH"(1HLlbU[cdlcX(mBPeFLi9c9i892LJ$PcqC-a
+1PGBYlheGXUNrG&6'UYfG0Q9VlbKKA1UXrkURGGe3r(l&Mm$9@G19ZjMTL9!fjS$
+b#jEZZ&$10Ik0LbKL(!9ZqPBefANaX1lm1X00mkiMle+8-GM%&6EPb!U6jK8QI+@
+eLX[j"Y'Z31Q(TXe8Z0LEQ$#PdqpYSjkThF$l432ZMR$fI9PQ$'KhI,ZCm*2,ikB
+fRq1(mHUKph0TGh'KiE',VURI9e6Gm+Am1)qHILE[T(U[JhpCkPFHeXB[Z0ZaLm*
+r+PH6aT(dm5CVXbEbke35k-*C0lDGhUJP[VA&QBGdHMJBA-Kp6e$r[VQRVj&Q(bI
+#IlNrX3rMlIcfd5jaYiFK9-eHM&6jNZHF1h5QBPlGG`E0-9,[GcABRTI2UEpl-AX
+SHkXrkUAG-![G@G2AeNbPdBqAUV&2(N8aFSjR2Dmh`lCF+ZUK+PkeS+V1EBjCDUk
+9CqHeV1H3!!,I-kQPf*V"rXR+pjF2mFmR@@Zll[L3!2ZJ,[,'R(TDqmXjhi+ce,@
+aR@q*,bmQdRQ9KPl$P`Dq2Pm!XSRh6M(N(if*rcbl(-YZ&&$1iCPHf*R'fjXKp"1
+1ZMd5@ImZ(a4NEc%liiJYMC@Q(`)0pH6lUD*,5m1(#2"hP`BIAf-lX+cK5qbLRmR
+PAKpjNHT-`mEAr2Ki8-22lhI@06T@NXmE[Zm!Mh02fk-KQ%@!"&[PJ$XU(+kA+Z[
+Q9HPDBFkPbb-YM)dYeUMYj[TN)TlrTN2Y'blUTI@AS!jQcKjTr1[$LTI*h0IG9Gr
+(U4XA[9cHiCf[YDlC3rrmhmI[f2`@!@Eq1hQ`rMY-2a)e$'(Q5Z3,`EcT9E-Rl'c
+Ta4X59h4j$(!AG8-Q25rRbqE@IlAMM)rUbhjC(rI-[+il3rZlbkGXPMGh@E'(eE(
+,k(8*NYMq-fQ[%XTf2&QA*r("R!6-[8aH*"N`r'TlZf10I&aM1B@T0D6iE8C5m'8
+RIMe-LHG3"V+pk-V`Y,(2Laq'c2b8mFQHLbmZ[VU@mVUN9AJcr#[$c,B[*XU6TP*
+pjFQ`$D81Id$fAf8p-5E+V0PeHf@If0P2l'$bkcTFfmqI9jKp1Q(X#%TmZNbTdIa
+f8E&K&IKp5X2!mVQF-cjZ*ZH"F6-4rdbhReB[VjN[ie8!FcjY1kqR2[,c%0lV8(V
+0Je9bcVZfeGHcHp`VUcmDGh@kr(d,(i*#2&K+9@`NKRipY&$b)S5bcXBX``PRk(B
+ISfNQZdNH[N3HlPh9!8MV-[Q9QClYiM8l'kkQZ1cH@J1!IN+5!0h1V0aNq!@k+kp
+phPb-ZCmfPhGBFIXI,r(X)q[+ZrT8Ta#IK%jlM*e06&ZV(-f2#LYm-c&hZb9ZIPH
+3!,ECN!#M"TQca9KhGc3p(9'd25i#K9cBHJUmSXZTAhPI()8lqCE5m5cPF58-Rmq
+('em6'8KC#M`$J)Ib&'AjFQmqPXVhIh49RXE($E#VN@RD8RE+Fal-TmQk1Dqr,+6
+rGj-&6a+q(IDZ(bCm[83qPLA@UKrAHa'ppURZar96FI#Q@ImXlZ[(r(U,(pLcTl%
+R5k$N)iEDjKRlZC6hEL#-K6hSa&6"REUKk0TTDcQ4m[e+lV,2$ZlbXk6)4qPUSAj
+K*l,DYE,%jXHRlV)5HPKTN!$PM)GipQ30rf(hdb&d-KM@1ChV@3a(6)81Jj'jDPe
+0N!#5hV6!Kf#K*"UZBIkc1mYV)rY'e*b#b,f%')aNXQ'I`EZcSFU9)6*C-BC)rM#
+(ID@ddVr6)CJ"BHa[2TE1+UHpV`e#5HRhqa!kUjQ"#1kZGGLqiaN2K6lRrA&PrBB
+b+k18JqcLcJdXI,TH"0mQbQqPPrKUIUTM'&,chBbXem2*pM8@-e!6f,IjH*!!QpL
+re"U*-(A9XH`6*6-2a,1KXCA3V,bXjV'+m$8XBTX'[pRE&IJDa8M%jM'+`aLXY-8
+&4kTefBX[GmKP9adQXHmRDr$em2X4TqpQM&Ep-9D1Q+m$$IYLZaBa@[eF4c*4LVb
+EcEIY*e6#Q8cmkk9DeLCIF91E@5T%jda&b+*[0,D3!$r6$Q0Be#[iVjM$q13@k%*
+pJA3p9r6$frk'99[b`m2lf,Dlk(eBH&C9BURJBINd2*SHPCfQANedH(If6eFl`EH
+p[20XrlX2ZX[f06BkfcUl%R)e$N'+fjM`mLXYD!ITf9aL6U,G'%q9Bbapeb$p[j3
+aeT!!6rGlf9U$j@EVZ&99Ep5@aYp$4C!!DbAG9FKbU[QA@([Vb(#phSfHA-QTNG5
+-L6BlTV)(8hG-Kq102m%C$Glq+bUG&c#EJdNaeGLH*EkQ0Lh"3Ia4SpLmBrYBMh%
+FCM(h2dkAAU$@r2N0`bjr2`SH*heR3KJiYH89A*EZ'4@8FIlPkN-erYP1&$[Vcq,
+ifC[bjV!q'8i&VLh9#BA6bU8([0L'&i"iGmq(AmZ(a09$b28Z6@ralV&PcZDCb0c
+dVIpLRG9CKp*qqXThU5-2QfN'-I12,TF+Y(U(ljp%iPL$hi,0-DaNHp$be-DK`a(
+Be$B4CINA8khQpj,UDr%KjNYM)dYI$hNI-F"Nc$hm&IDf1,A8Mk9GJZb#G2VdMpj
+Z!-R-a"b`j0QN'FM0L!Uca1CC6lfjPG'cc,I-jXI$M80rCIl'c,@HVABH-ENrBPK
+c89fTXBIIM6pILbYr&&90M5APq*(bpIBfqNY+Ce!X6KR(G0pMS@H*EhYcL(a6KKL
+Jem2GBR"NB[3Kr9D3!1lr((1Lpa68chPTAf@(heGLB8-8le+bl1#cj-bRj%@AU*C
+*!-IjSar02Z6PHS1iCr'6068"J"6`&3lk1G9Upi($Pdr9M8$@aXjqa-JQrbkkEHb
+jqUKjYDq'2l$H@pQE2Alf*&rG)[m3j!$p6(q-FG'L49PdKjMfBrp'Aq%K#J*l&cp
+-bDX29'DF9Bedra,+(PeL3'Ze-0eL5+XVS%bK-l#d&cr8XUQ%F[ba2f*aGMGE0-G
+'2"4`)FRS`qTGBNAhX6FYh@l'V+!9+k9eKm#eKal5Kl-2Bh9$`S0IC920V"MH'aM
+DjkBbe'-KhmSkc(i$M6VTZ2Jd[I2iMlbA908bcbTh-K(%3Qr0$$ZUkpihG8j"rDR
+3QmmffKLq@-Ai9M1mZaTE''pa)H")R3R"RFi[)PRI(Rq4-RlVRbmb+Tm,&PF+'4L
+,`5NHM1B8JBGX)"%Xm4[!YCIp0AK5m[93(lpcYebblA2Yqfq0PdYHHDSJlLfmrLR
+-hp5jr[c,VkH,[Z"ErDTi2XR'ac)Gr0iS3K6'G)IJ@H,kPV$Np)pY2X(d9CN9,J5
+-2e,1KlTr0qTX`UI9H-KZ-Zh[H`pLce9MV%"#%(ii5Neqi3%XCq[XE&1pX$dr2cB
+6*hQQrKhXZ'E[ciBi[H6'-R)BbIL2pXRNbZNj#'aXX[alA&ecM*cB5Sa-RU"Nm3C
+2*PFL46pPM*icM)pd-Mjp,Q$L)C5Bqa[I,ep@XZX5ekZdKPd[8XF`lke@AKpf3C2
+BPmNpAr)Nfp3reb&farMXBrQVHcIb$2&MeCNqpiAX5kIQM&YBqjaEA%6(cNakjbe
+[L,d11f2ZIjkSar#Kl(Q3!1qQJA'3!#hHaN)BXdc@EbRG6[`&d9b$q[TDbcTbkAX
+2KMqqHc(mKr'2iPeL-BA$e4h[QJSqXIm%LKZER&Kphc-[BhP2Qh1,kJD0c82pmPc
+i[2+X4c,ZV(FXUaY-8UaKm58Ia-b%Hkr"(V09EBarCPMC91kRFq,-,Rf(MfXl8%Z
+-FrM'45j&fql)IH6)ETdapVQ9)HC$U#$frXk$B2F&N!"lGCai*j&5Vem#di*C8l2
+i-bIDA%c-PeEIQflr'2jBaq*HllmE'2f*96@al1QAliGMd2(f0G028$dKDZmAZhG
+9AIARppTiE6,q$6ZId(`ZXrQRPXRa&j!!C9I$[qHCVib')&j6f%ZIiFc%mJ!GeLR
+*6$$Vj[8d2IKi9S49`lVKQ8jXE(a+qh[GipQEp9r'EibCXpZ4lH[(aepH*qJIH5j
+h*k8HRiF0jACIHhNrQa3XC[l3GicNY-jkN!$`[8L'5[CG19VQ3Y`9#f'+V'f%+Cl
+&MiGPPmRG@[FDkXme3ZXC[+HQHk$M2F0p-ppbS-pil+[B1kLRrUf"#lArY@KqZ(Z
+YClM-CkdKkLkXY,EdSIhc)d,Se685m6Lb[aB[i!4GMcEFf5RpXrc$S*M2qqaRqmF
+CrG*RYehPG0j6@Hlem-p[,Z'd2edZI[BN[pUcqNaRUEl-pfX2XQ*JlD'*kNc&!(c
+ET-rG`p65r8EAr#M2CS)INfm[Y+RkU(JHaDDU2m+Tlpcr&90MTq,VQUQ6e@C128A
+UMRS0"AHbjhZj0P2hF0j@@1,c,V%hFcA+Xc[EHV%9Qm,Q3RG4Phq*[clrMPUf1cG
+0$363`rZ8l8rlqkaH6i8($Y,(89QUf10,be-&Vp4)a9@RULY-[UmYddZ5eTHJidY
+G0r([l-rM40*BkQ+Rq($&Le(Zmq(X6Ri*S[4hPPKlb$RfmqbeYG9lkXPq-0(2i-4
+*G`TNqclfkl%%RB$5(ZdIaT1L0*LXD6m%DK[(E5Hlfhc,%MNaI82N0MQfmbXX'h2
+PhdrH3bZUc,FTr2cbphTFDA6jBIRZRk%Ff'Ar9$[pj$m!+If6CKUm#C2-Li!I0[-
+ARfX0[$"qV93kL(LbDl$12+&DXAqe@jKaq0lpT0m"!6hl5RZr0KZG9&A`mK*4Bdq
+()aHM*ZBmrN@1UZY+HTBrE10LUYa!SFe"aC')-r3YBm*h9SH!Gm(IEZhTbkI&Ki[
+U3NHdbraH&&22-Mf-Ijp-NDhPcPp+mSHT$,rRc,Imp@e2e-ZXAT@9#Tb)1kR6p9h
+RG9RL@0$a$q*j[PU%rG8'AHiIa`RQhbCA,MrRUF1bUBaFaYGZ19L*NXQd)mHa-p#
+9hR8H&&9p+D9+GefeCE3f1A[bbpb)H6i9CjFHGC`rmXA,m$,kqjR3p)e&ZA-@DK-
+NfH100kX1jjYc$HlQhbeqC5rPYQV)![Qa8ZD51iHl[1iLmDIaCQAVl)kU1[VS#i(
+UV$8q"(XC$M5(Y`H0*m5ALFU9G`RipllbiI8j22jUD8e[fY,mL(IEb([SFk(TCNb
+R`cC%QBR4!(GBZU[,Hp18he-lm1V,3[&VRXdm812bRXdrL$6bkeaTjG6NAQ(UXEa
+*P,ZXANd[0Ym2mCbE@0l+B#KcND03jXX-l5$U938idreddr-iTeaF5CfQ,`Mq34T
+kcI(reRjMfN25N!!+KSH(EXDE9$6IMM9fTVEACpa0TYDH[XD[$ZG9BkU+5aTq3QR
+`V1GiRrGddmU2Q-DEAfP$8YDE'XYGp[949I*bkFZIhAD3!1%EER0Me'YA(`kV'Vl
+Uhbqke-b[V-GM98de@PXba&kX2IFDj-EMqfTS*UIlQ06)T268peC*UCQ,H9N90PG
+Ar@VH'iahN[&iLh@ERl4b8cb)#(Qp3IBILANM$jpeLmm4AJEiriLjKjqCG2`e9ee
+06dYEEM9@,fDU%kHlde1l1UMimqC5aLmVM924`i0daTI%ZF2N5l6%VVhU)qChNLR
+im1q,fPT$j"k@lHIc3dAM6rBqK-RhAm4V2F!Gee%Xk(p[PKMakI!LbqHFrrRc0PQ
+A2f+[BhETTZJHHLKXEcjRF6Cl@Rr9Ui&-ELmPAQX5C9YV+R2'RrMBdfAU)B0e6m#
+aY+I4Kk3j)d3iBm()m6`)I%ZGCA(K"e2'LaER&PkZ(KakYjL6+FV`Y,,`r#JjFQj
+UGeUlUYV14DiYX02T8ddJDEf)GjaSRq00VaTVGaTV0lY0"MH@X'Felc(Dl&iN[&j
+4mY(IGK$jHmKjA'Kc1-QQaAhDDlKpqA9116e,c%!(cEA&jq['0p,@fA8TTBmhBVc
+mbPe*1(#688[e4rf8"+A[aA*-GA6@c'k@4A`4p)9iBR5YSqChXLQQQD#Ub)EbkRA
+X28,0BZX3DdV+[UF-AeiGKkKpqR2i%25LRh8c&2KikDEH4CI+PHSC(@&&mDVZ5mc
+cE@K`G,DBIG806ABR4hH[VX6GGl(bq4Cp68h6'Pe,-3'*,IaT[(2Y%C-9ZV2l(jl
+d&V'Ni-Z'jaEI9`m*idP$bp*)`qqPiQ[eJdZUYF@i'PdJdTJTiQRZiFbAmh&mMA`
+jRBfH+HZdbafH0J"BeGRLlkjQpe$Hi@re%bIq!iH$T06F'3FdQKfqc2VVMiRU"-9
+N99kQ0`VU(`VSVBLkbV-qI2Kie[966h9SaTZ9GI5aI8lkjr[UpMN`jJdp2HA@*jG
+jLJ$ieV$bX)h)r*QlSre[LaqkI%aR82GTlf%bPRbdm25f%I-m0V6Y"9C&8lV&YDk
+'h0)U)N3Kia-E`P-EiG[mMVCKMdYFAH3Z0,Q@p99j46m[QhFM%j4pU2PQDl$`jQ,
+0i1PM&i,8f1,dI)G00)kR,jE,c1hEZ+R20RF,BfmVPf2l$TTlh'h92GBh[h0Jj-C
+5aV2lK-C$e0MLA028L4a4kKYNTTVXVai0PL@p,e)mrmF28c+q6N`kUhaEUIk0*QR
+P5mMX)BCIdX6b-+&raTYmeT[9DdbcSZhf3deM2p5+Ih6iDD''ja10&2j8[%c,UjT
+hF[%li3Mf)A666-AMGmEQABENQ`2ieRN8jFHjXc&jpdZ+Q+$'lJD8m+chDAmdmVZ
+m8DAhl5IZbE5D@[PAKNbkR&[-1paYqAQBBHPXBqCZZ4+k-VARDH1e502Zp6$8,Ak
+f-X6L`mUkaH,GZ06FpTeXbhc1qYp81PG08Dj,'Uc1pihBTUcbaIa6pjG3qV-aIGi
+1PVTZle0T1lfma0IBiZ-QXXZTVVeM@(hl+C2&Lc,DbrRa#C2Ar'F[3BPhFak[)LX
+E5IkVPIP@'GJjIXIrK%pe0$[BH[YG[2KPFDcR+p"aBDRPk3Q@1)h$mZ'mkQAB5Hl
+Ke9cCiR&PdYILQpj1he[6KUc*H*a$V32ff%6'`i3f(X9dhm$df!UpMA(-HRlUpLU
+j-25k8[kp@eY3Y)EHI`3NTQ+5RpK&LEbCL$AjFhQ4SHP-a6&4f!L(IGIFdlHVhGc
+6i-8rL!$PiN2'KZSDY[B3%ph-05Pel-SV,lP@',fX6S4V)!I3M6bE6ZV%bXKXGj-
+TFUeSGK&PqAG6[!KK[HmMb[9PG#fVY9hU"*j)2)e-1'U`EV%[$Y6ASef&,qa6`TI
+aXA[1C6j4(Rh@,ep[9p6U)UI2lZjUc+[!ZFXr[5ViA'l#caH-C0m@*jFb(mF[%N9
+e,ZV+e`qK(Kk0[0lfjMf4rFF(L3mLje8Hp1d$EQ*'(Gl'4VX@ePG'Ze2)1&f2PQ@
+*Edr%XX6Pa4m[8AQ*DfNqGZBGcE@mlmIQlZ+,8ap,DpapZhc,3r"b(T3mZhUF%DV
+J`qE)`q0F3RePFDkNifUP'9dDK-0jh%lIA-mDcbb9ALEQdaCCPUQZcH&k3i0HaKk
+8ZF!MGGe$FjR#e&eLHaBcI0-Vh'bcIHQkrZ06$(bk[0"rh@,a1kKk(3PrRKe1TQ(
+Y!Tq@3r#6c1`ZDHmPiRPj0eQGK',Q'U[-6M%e9[9mZlLkc%hPeFr(Ym6[SSGj$&2
+KmXU)Kj8VdY6CG6VNeHTHc9dlD(a2$[*dhcJ"QqGDiYc0aMedFJYJ,k0H[Lbq#eU
+qpXCA$PFZfMEHKMf9@ae8bXe%HRf-c-YDIG6mqje0V2pr`)ICmfhe8[if*iI-c)T
+ph,k0[9lkAXmc[VU,Kh0@ec1"FcH(Fdk[PqThBe9hFiX82'PiY2bjASpIBeQSY+@
+l[*jPDXDQckN5kC6lU2Hp&aUXGaUSdbN0AiKEFa$Lki0e2hAL4ZXQcHAE@0@jUcq
+mXrXIl3l[rqe&PBkUmq$EjNQ-06UKUD5DRM3qlaE2EiXA8iXb'6'1CdDM#DI$lX`
+pGha)Gj-KKi1jY$VKYDLHie(3Be(MpeEYDMmGMC!!drH`F1'hkV%Leq,UBDAL@Ge
+UY2$GDMAk[ZU[k[e5qTTp6-e0c1TpfAV)CK4E[,HRaS[QH"mLjTATq#elqUAXUHm
+dm1Ca)H#I$ALH&Fi[B&6b[UYDUGh@TVQ04@2KU0M$iRN2de'+QSEdL8e(KXDMBa[
+RS%IKkcUD9j1i%[mh8bqTqRV0IU25qae1kfI8kM"a2)r$2p5'm[BGi1DkcqIjX[8
+lQAe*UfjN[8GIf%[X[,K`IiGP6h2@9Hp$&kmFc5p'hRpI(blbGlja(3kU2$h5DQ2
+e*G)Be1UH06I4TA4V(Nb,1F!TNGe0jHaV9-K&L5UI,iIQ`l[ZU8MUBI9hCEGUDUb
+-R#kRppC8+Cj,I5e%2,Y,QADDQ(L5SFZp21LYRD(TGjA8q*-LrKaD[GkIJ`h2rA@
+@QUPkM"[,$alc54D4kD+1eSVD(Al'(`G9DiPY(bq"q(&pkQq'Mj[PeRBAEeSB`pp
+i(b2iX0V4aAdr[ZqKKZVSVLi2%PeQPP9BH[kL(ZpK$iAH@HSND[AiYeKfZ'kqcdk
+4A#Ym@+U-pjTAPQcY5Im3r,2Rk042TR[4BcZVlSChpL[lVUHXdN2rR`0GmZcqMqS
+F[FrAe&h`I,qimCklmbV`ZE$Jr-[Tqji&[2c,RlP2VqSYm[dHEZEHP`kcS4ULCkX
+YjZkiGR1r9LAQ+QGepNH3!-lU'h[GM)RAYTKZjJmABTbUQ$rKbfXj[YM,a6f`HT[
+KRIlpC"NkqX2Y4UDqJbBHjRF'ZRm'4$q(83cSH$$qUIG3eRBNa*pk9MH`hQhSGLB
+KiYR2krZr#f&LpfEr"BhZ&Nbr'RmbmRBhJ2CR,feRl'2Pm[m1+IcJpfFq4@&fhmm
+q,qNppR[9EI@H"Ir)MCPe0eYjErHaE[bcPbHAQ(%T[*P$m96[V'PqHIErFa,RqQK
+h8lArcN10*H6RXc9cC$-kq4QS#6Mb(p&hH0hFbNch$9Pe2PH4$DbLYLGbqpM+Z#F
+QEZU6aQrk@-hA9I0m$V0CCDMp4q-'[qhU,b,8H6Xk[Nh[!ZGE$j1*R9I!YDk[l$M
+A2RkU(mp,i01lhPc)Y2QCRAb+Pe5l!+5eS3kpN!$E8LRmLjQqC0)D4lf%c+q,D8(
+F0)E(9(qI!`hAL3efTp@0CkkKVUXAmq*iqUXCGcr$Q4GIH9,'EEjNmbd@3ea0jC8
+0KX,@KbV8CR-LaE8a(A)c-BCN*kmqIBpJ9"rdiPhjIIHA$p9-cUAiCRG'TU-cjZa
+6-lfp[*rH4mZkaENm9Uk0Y-mPeV8Kr$KrU-4hJ925RFcI60E"cDbmM@NhbCm@VKm
+QREkb)4Q4UC'TXp9D6C[[fIpkZecqJpka(baI,ITLr0+a5$eX(cUN#0*G8MiJ5rd
+DLjq[6[-2AhNI@@Ic$Ur@XZIZE+HI,h,rkeH`Q6ZE$Hh2fkRiF2NEk(m1,Z[4e2Q
+fp,mB1XPkANr$U46lUbaQV[Dp`aGp)j!!3UbZk2kIbe9BIjKU[aZ,aeQ*bJA(V-l
+Zkbl'Xl(BNYXe32k*qN0Mr2VY9@A&G1l!b+HA$$Pfj9AUSCK41,Vj1*Ekb(hI``p
+6CDkTdPqK+qcGRb[J-!+I89-br!9@R3ZX68acf4ZQ!X4IM5Fh*iXZd`i5HVPRmMF
+ESRcqeddi5U(4%UXF[*Me1&)RIMN#cp+Za2aafr83DZA#PF+QPQbN"$m"SHAEA*c
+pm-T5GpiZX[-3@HIK@0lCIQ`ralV8X"%reC(fie$I5-2I@NLR&5h4qkF1kMI`jRG
+fFkIkXF4TPKU45k0T2aZAFcI0hA)%D2j)lfc`qNH8UkRFZcRF-iIHk2$M8%KXUXZ
+ZeA3K`IalVI3m$[6Lq&(PrRa2`9YM@ER[BHABhYZGCX8UAKqMZGKi&#hSIacZq&+
+[kF1RVlR,[EL-G4N+#pVV6%PdZ($b,2jp*Ii+IqichG9Nc%pL2Hj-9ALmZmaG9(0
+-'2PqEhSRm2[Rpel`6lBaj'(b,,qr8`p+aaAZN!$b*lh5(N2%KV&p*V(I`b-bfYj
+@[PH*XC(el6$3)VX6eC%jL2akA!XTX1[[lQGd3+f@kKjFqe`cmDCA)Y-2Pa@FrZT
+(qdKG)1'mfG$Q(cq@1+)hbl+SGIkpZF9,mI4jirGG[L@mMkmHR,fH,QA1UXK,rpX
+Aa+fablRlGTKlZjUm@'EdTG$dFRBmDXaZ!IYGL@h#KKUI*ZDPk4b#0f3MF%6qN6j
+&jh%hap5)PiJL8Fe8E+TkJLAbE'b`cRI#*4mAf(XLA&a,bGh@kr(d,(i0Ridih5(
+p)R95*fdIfU!G,!4hNc,iXFhfkAZRlqH6@@qSiRGRS)QCHkKr(2[-1-)PZJEcr()
+m29me)S81p&XH1lGailYk46AL+8Yp$aYhf%2G82(iF2Qq4F`Pb5jUG'2$iNbIDfQ
+,aT&GeAD8*A!XMT*ffq08Qa2i01N`N6c$)'VXcI@*eLbPb&H8%mb0e8m#jc0r-[k
+I5aQSTZYHH91RC91D)RMHA"[T@jYF5mSH4-U1I8R$)qa6N6R%05,AX-ZV2lU2Pp&
+@rceR(l3RbZpl,UKR3b+Q&AAXla1p)0-"%I&18Qq)k&Z"JAXCTFik-'UK*%m59`*
+H@NAr!iLr,%AjNDK#lMVhE5J8a&Me@UK`H3Hi[jm9-Qk!PqL(#ZD'rV0b+4,c&(A
+-N@Rbr,NL,iJLrI3eH[V#1V'kk'k`r0M5MiB[fLRaU[5m5bJk$Y&DYGKm1dKphXB
+1""[SV'Vd)HP@%4Va&V-h8Yed%"$GDKiEb1BafcdpJL,K-hk9q1ZPDrBarcT&1U`
+r%h@lPb'f'K%imf0mB4+E()Vp)N4VA)k,+Iq!KjCrdjCBC1$+kee$Q(UF(J14dHD
+1*#F8G'pDL&dG'dqbBMRV)S(T$VfkN52pX1VC6Z-EJ@ZTpKFdMijbXRG`mb48[3f
+RiKY[b'fr[2iUASfP,'m3dJZ($kXVBf94)C[')Cq-3b@m3ckp2$jPR1hYTmK!3b-
+iXbH1+E(#[f9ekrChS`fFl#BJ+KL)K@45(F,mDdhIG`idk(GDqK21h9KRdl0MBQC
+I,Yj[ib0LeSHU6PplCpNpd(iE(#B`JhLGeA5+3[@(Be1($`kb9C8VQVEkU+,-DJX
+VNll`Ui3AP@dA@fhI@p2ZkbihpT+bGda"H!qN&XSUZrQDl-kA&NFQc5#RjbX3@VE
+jNVFL$Gp,VK"TX2QRI-A8A$ShhbE5KbirY@RD6[%aZLS0aIQa0IC9084F1l$`,02
+D6XNjmXH48k%lAd0e$ZZ6`,1K`)1")`m'[ar#Km5YV)Y)e"X5h`p6$Cha'P[,UTd
+EI9@Rb+KGiN("-4a@IC9ddb`qMDBI)XjmVeGdLEaZ4$k2QpeBjIUeN!$QAP#Z2N'
+p83QG&61TemmrPrQ$XB1pm+ZTe[!V,D,qrC8cf2frckR2MPUBI,)a#djH3lk3!'8
+m[&hA(ZXpLbPdcm(V@mSINJpJNH%*j%2i*@aN8f)6J`Ek##aTq2f%bVDNQlY$0rh
+YS0$MDVPfAfShdj`q[rkIY#m2*YM#M`l2iB"SHkJG)9!GXLAPcMYrGBBbTPS)84r
+[5&GSN!#M1,KiHkk-MiGG0f-)K*PVmXMhCip*&1CCIEQj)rA6R,MUQFR"aDcI6lQ
+pZ[Q-3RhBB)X2B5YM`+cBaIQf92[SNK25MPprPedV$p5A1J1(5+NF2bkj*X)FfkU
+H4`K$,cYjAj)$,$iGM'SF@(cHSVX2N!"hcV'TB`3BfjV2N`3I*C'jZhZKqjh8d`H
+cG8`#mLb2Q$f--hKLPP1,N`Jl@'TUV(mf(0%2!,$h9Bpd2Q9%Kq)H35C0k%2HN!"
+cPlSY%crBY-5eSDRf,-ZamZ'I,qhD81,12P5GaYFYNE@#4YFM`,(,iGCEdl9L(eN
+c$La,Qp[,iqDIQ3mqhc,Z$f)X2ZjAbH"ACM%6lZ,$ZCG6Qf3LI3VVDZ`qC,RH"L2
+`Lhi*Nm4MLr"UFQ4PQI$MG+cRbmbF4`a(m2`3f9##'Kk2Kf06j-Uj`iC"jBm6"p(
+['**M9T&Qm55$N52jjZ[0-2Aeelb$bHA29"Y2T*FYl*,Vk%Ym*06Yj`&Hp1"'(aq
+@qb6kTL6p%5Iml%RMNHM%QZV1q41@mhN3mD4pG*2MlbhQlq(LePY@A9"a+,HQa+0
+2"`,R$lb9Mm#ZUX5MH5fT4I@Q(U4++"b'pMCDL*CA6l*AkV%Vm6pQGbE)5ZV+K%Y
+a*Ha8JHr*!kN-L4A8iDIH3H&T6`qd1mPk8r6q#TlmI%YjrK`Gfa0C9G2ZCVRVAKX
+pG8l%PeepM-B"5ApE@Crpll69AGGHf2Y8"0Th0M@1N!")LPIQf8kbRHT"ABX@*G6
+lI$TQQVLp#aaCGR2LY#2MahDEkqk*VZM'2EYiQkpd6H"e0CbHLb4df5TP$PlV*X[
+r&CmRJh*rlee11D[b6laK0mXlRd2B@p5bRph(a-2Gm#aTX6E`TG#(KfIr'4m`d8k
+lBfQ+C*AiDI'KU2XQXbTkYjLF++VDcIFaCAMY6ASfQ,&hMT0H[V2)Kdm("V0J!lU
+)X1aRC-82lH*&$rea1*Edq[20p$8Jf&Cir&Kf%ZKA8V'IirA`qLHKSZ`1P%kc,l#
+bTFbeXFcK@H)HB1Pc"46''r%R@1P%lUbr,CJ'M`dYK$Vm0fT&C#P*[*pb0CEkQbK
+k%HbbqA$ir3KXrM&@rK&@m24VNT2-M9X2r+d9@VZ6k0mpK3+6kdqCBjIQcSIkSGG
+$bGbFR'aM3RdM(Ghh8rQ3!2+ZD[A`IM1MlF9R!McpLC!!&2mZB+4)SFEGG+(Ab[f
+m-Npm1dl#ka*6k8MmIGB[#ZEf,8`l'hpc&`Gda5qk*KGl3*l$`*4k@mVXcM5lHGP
+q&ClHR,c)CGG8kq2+kV%QE,qqHCIG@mLRq4X)H`Jlf(XCQ,G$k+kT8Mcr4lkZXF8
+d%h1&JNdl%bJV6%e8I-D"J$"Z%H'[XjaHp*TX0FdD9ViHaMjKGkVT[K5!#qTf&GK
+kQXJp3p6ABb-2QeKX2Rb0DQ([)GM'`i6Dc&1"YdI)YjYPL(ZJ[-2((Zh4df0M$M6
+I,XB09'SDUcRG'(hGHE1dVAaU(,KjXEjmHTi9CHCQa2TLXDYj3Tpl$K5[e9I(lU(
+Sip[LG)9'Rhd&c1mLiV2,XX6[CIrAEcq$-V*P6dHD8k++fpQBH$p'(8@kbfZ"CRe
+0FqA1pd!dbTbmHC2em1$hYcpl&a[!@R(@A1V&0m$GE%Vr5QqABjR-Lfq*Ee0jDI2
+-pb'aTGK)[E6&jQ6e%-[%ZiEhK!GZDA*hF16GBPV9RJJbq6i8c&ZCf$ZMFpFkQ**
+lPlk28e3mk*S'UDSQaZX2N9ddjT5Qp2XP"GAAY[(U[&0jQ6Bd06TC8M$phe+l,p5
+cS3kHTMLRDShdqp5R3F0A'SE6q'(A`F'B%Tc)qCkYTL6*`Lec0&1V4643V3J4KES
+*qDC#eeKhZkhmI$KiYcmr-26a$ckf+ZKc,IUD[Qf-2-5Rh81mZCdIPE#4Ed*H(kP
+cLm$[6aSHML6+AMmpiU%UIVkIIFP+JcqU'Hk0+R,UG#41`HmLqpLBhG09$8!3lVa
+h5SFD2HBRKF'%j)p6`iHP6KMcX[Q@N!$fepQIhRp0`krk9-$ZmN8)BVc%rF+00j!
+!1+GijR"ZhYfeP1hjpK0P6D"Yr'J26kp2D0I`ZE#Qf9128ckl84p9)Y+Q[RG$a)p
+$SD@hTe$hlA1(il98rlfral''ALkq2L481J4kf96mETm0*LUFZbUX96*(aDq0CBH
+0XALUj-3pqZQp&+YKGe(UH"3h@lm3kCKYbl#A*YkXA8eH(AAXcZ$QamrM(h$3IIf
+8j+YcER&mM[HmQB[*5V44Mm)l(mmD(e+f9LC-9r3BUapYk8qITfU[Pp&+[,rT2@r
+LbdV&Z+aNf-edV(Zl[8h0rC6Z`MI0Up4aBH*8p5$K@F2EI'c1lKphPDrkG2Zr4p5
+b`iBVA%lcT3pI)`q6bH$-aBX2"M'"Kfq2$p5abm+k`q,FY!fAJfQ,-R2(a(m5Pe3
+S`emLHpe@mfbY*flkM*LllX#MFdYm0UXmh[+JV'0`5ckPAbq4$CdfU[a*BUr&XUB
+UmZP[h5Vq'l9I$hl9AjJUml*ZCZrMkUaV"9j*j%ZmQD@jRc1TTm)M,Ylf+(3QB[P
+aBIrr[ZSV2NeRPfC`JA2cmAL5K9pef-9!qN1@a@Dl%XFAJ62iF2J@lce%QUpBR`9
+bp8PC1)SR`5XQ"Bk+&6ZUkGbiH&Fe0p"Zp5Ic6ACHTp@hrKe82#Xk(ZhfTN@rFr'
+c2#KXqieAilHNA1)SGhUBVU4hBHX20KmLB5&i+`H1eEjXLKf0MQ6-2Q@qAN`qTCi
+RBf1ACiXZNr+ZfH*(UHrADQ20r"D8YIKp$cB2ab0PpZjkbN2dPe1A)`pJF0R0Y2i
+ISeN2"LNBXVmHN!$Dmm3Pfr'bNH(BHl$jXB*[Lbbp9[V+REiFfEi9MC2&Fi69FiU
+9cITA*[HX9bhUm5j(SH&$q(9bk4fbm@(p4mH-AbklHjP+hV10@*qAKRPJrUTEQZU
+q('212iq6'KjYGL4iIl2ThAm8lJ'dlLBl&E!4$&mr-KZF[ALZGhGI'UrI2rc@p3B
+%ip,K9dhB*qfjMdLjfIfAcB09kYcmqE[,5caGMh9$cEQmrKc2r1,f-MCA[iiDRZl
+kXhF3*I`@4C&&GiNc%PY9fh&G2N1Y-6M@N!"[cYqiXTS'hqN2j%U2&Elk2Q'D[$P
+LZ809+hk9E`*'@,(DI`jGR5jQ6k8@Z5Zc#VR$ljLZhqRV,LALq*CL[3l"aAq3!#[
+iZ[Kl[hBI%*lkA-LbqLIfM2Z@+ql[Dp#cRqACclZZQm)9qNFr5%@$BL`HlFdr)P`
+qlLFD(5(iH`hQ,$lm2KA82'X[YkrU+cAeR'N`pl-ZIiSBBhmARdZ`Mdq#A(F6d@V
+"@461jLTF#je9eLipV2i!Vq,MhF2Pq)@p,%9rX,Aq(-r*3DVjQP80c)19`2mhebG
+*HTiPjLhG5E0eA#LZ65qXm6[GI([FISlqC$[j(@(mDqh$JlqXK",,UF'("iTeHM[
+*qMN`Hq+[X,'(adS("NfKf'+6!,D@8kPk16CcXESL[PU'j1k,aV6%Zl%``B9eC8P
+i9cMle9TmbTCe1KiR-m[H9THfp@dRFf2pZPcE50r25Ka#MlT3fG@jRa*@HS9[(bl
+Q(HDU'((YjZjY%X&[Pmf([,5ZMd2%JepG0epTKQFVdTCXCCH0[b85ca,8PLaTd@C
+-V0j&L`f%q("TqTCRLA1C,$hF-b4pLeS(B#Q9e@jaH0Za9[iIFT92,2j,2'b9m91
+IG@1,1KhmXMR&AKm5(85`Nq9&QGK$aI0YkNha,2$bDli1Um$QaTkecH5FPPGPmfZ
+eGM5*P)Th!XU@jZV5REfP$Rlb(6Riaj-LIK5ZkRmh[TF2#XUF[%[+GcPj0C!!lQk
+KZCablZ%e@,(,,VGTLGhBQm)Fb3FH)6kKUBGL@UF5+VEjD"rAb*Z$bl%q4Xfj"B6
+M'p3cZXHjrm(!rc5S#GUV&RPrj[I3HVDI'rfrTrKRFfXZUQSXk($hK8jm[irAeRb
+CN!$b$6Xp8d,GdHqqh+eDQUi&c$`09$9YlfhQj0CFLafNI$d+kGiFI,bh5aaL(q*
++aXN@+daE8YYieE&Q5Z*aVQI$BAF106idMC8jRfjmVVq`Kj2UA9$BA1TV16ZIClf
+ChSX@AVlrmFQ4LRBlaE9'TD3TBZqZFc*N8r!aBI%Yp6-aEA&jm@CZBHAjYc8phK*
+BUc`0Ec,4dX8hXE505h0TLA02H@8lLedqcRh1Ac+c[+kE[l+N9VN9KaNH'+2[kkX
+Kf%V'hmHVE'6++YZE-bdiU@2G814EjHUQ6lQNUDHa*hm5kaEI-1X8!rFf4p9,T@-
+@h[ENl8A&0aDa2kQiF2-&C`cScdZC'V0KACIi,6ihjI!l6k4TrY9Vba@[NkRfq[V
+-HC!!rMKlU(XC'C-Ra6F[a*&AFb+[Ba[iUH2GI`@p)hq4T66cpfbRHbaA-N9Xbhc
+Pm`imXMpQif[2qQYcRpF+abl(%bBBq(l8r"LTaCRijPPpM%LkR%dmRH3b)H*ABRG
+BFV`09GGi+j8eprlpGC`m)9cXBH,$[l0LZGjEeF(N5lflKh*+'HjRFa8lUrc0pCQ
+9Tc,(,eplh@Yr(D8f+jKcB04BUUqAKm+d`q-F[#GPmLbUG6Ppp$dBqAaS5cA+l!q
+h#'h261Dm2X@mh85kRJ3p'cUif[a+X[$i%0C,R-![!KMjINfK@hi%DGh9$hiHJ18
+lUbc#ciE%IG#PmX5"Fp0LPaj'AdI,lVkIdMa#3rMMBI-X[ZBCk1mI8qrepC!!m5m
+Rblf+4QAP1@FXZcUq)LYrKL[GIYDIGfNrAd$Ehe-1T0Hb45pQae0MUE+b*U1kSGe
+3e"[,ABfIQfNqe05A8MK0h&PKE@1AC,UK(iR@pCk@*,aHlPGe0eqNXp81iPGlEkQ
+XMl2&f'lUhG[8e(R8[N`RE3Yp6&9Q9BX[QhGMLiF10b$SEc,HVFdr!KMGaQA02J3
+m[eCFle)HPD6Yee1Ch@XpQcTh9,mBTij@0KpeD6lHVaV+TdE)e*S$mjHTbpK$dE'
+bN8Y9@D545abEfjTH6D4THTKep2hI*fqVY-cdX@je&h$bGpFP3&"S'!0q%cKmbmU
+!GeGN#`eLZka1kTc)I5aE@RDjN@UZCjrc82&Xk&M811+cQrUY2QGaHmrQP*%bPdE
+1G`Z-AH,'eqReP+'B@*qTKr$DA[GCPjU6p[6qAEUEHSY[(fN[$r"FLRHTCeGI11b
+YVC%I8f1S#02fjm#FI"M9`pe2drKM+DQ(9`kf(`+(X!)lbkTHE$q#aUH16'fQ(iP
+T&PePR5r(AamZ#1ZERj&a$pIB(R@MI'pqamZjTbp9FkQC2QAXZEaZ`VYNP4AGPpQ
+jTQAeGaYZ!IM3mcmFbK`VHEVkAT4YCEp6r9U,1VH8[B&61jRDBIG6l@PQFRb6mh*
+&,K3FXP&U(',A3FZdS5Th,VSH0cBI,p54@H"UBH6Fk5CB5XcGI)Kbqa'MP-![Bbj
+jVAN`F[5h9IZU[Skk6H9q0-dNVEr`r`fHNF6qakQI-JjZ2$Hp+ce8DA1jYRUV,j!
+![hF[*RF8X5(L5VN%&KME,UFcbEhNclU6&AreANH[Ki&j)VBGpGBX`$arRY$ZY4$
+JbqTRq2XY,$k1ZdQkRrpIqZUKmHRB3qM6l$AiHkbpcBiZRV,D#6"@@qUV+A),*rr
+,%dp[5e2QqrBdr,"6dSI4UHAheGXk%10biHP)Rbjp[LFVFaSJ$mRQp'kXFcIf8&E
+$qURDkMNeG,H9mQ26jYT3aUF-M8`cC%lK3&$rG9-@eVS#Bf9CiH&e(NcI!e8LXmR
+8`rKkQpaUISiXQ+YrKq05kA5MrEU-![5k82JDb(ZY6$JeH6mc5c+h'c2GfGCk01`
+m2ZYCCk54"emI$p'1MEV0K@HlqUZeX9#dQq%IhK$j(G`pl$$Ja-$QkfA8eI5eYe@
+`mR-h9r0ViFR*XDf(pZ4e-q@)Q+aEeRNkLAAie8*rkpEX,@DN4aUG2p8f6A8Mk)1
+IhN&5bJ0$NqCkVq6&26rdYrd+beXT10k06HH&@lU('jN25Xp[9jYE,%3c10@hFMB
+ACip2(JRh3E2DD@99pfKPrYfKbEH[8p,%PHT(RFfZUGld)-[QfFIB@G$-YZkUDr,
+p'Ae1*GG6e,NEqckQKk@AVp6)eYGe1(k@@)(Vp6Ck@kX0e6p(CLX+0cjm28iI*TH
+MA8[#N3H"U)I5QhPT0eqAqUaUIUM3'C!!``fpB`,a9q[eNcUFcpA8kJ@6@a9YGmc
+9f9I'e&T@fQV%#L%#VQ)&U@)&AL"E'keGPT*9$hDFrdURSjIAeR0NI0VUNH#2i9T
+LfmqRk@NYjh+llSeRiDRMd[4UGpcB)FEQ`mRPmA"hrKG+(#Md[rcrY[T(8U-EdT&
+k4Lk@deGQ(cj-lL`F'a`r4TE[H35)1kSHM$HBGe1lfkUDr$r"ADQ4Pkr$Kp@!Zm3
+9PT3`HPADLdS6DcZiBBE#eSH2i&K&@'fS)2PpHGAZ$ZS1XRq"8Rl'Xf(0V1kSIKM
+@G5('p'0U[*UHPeNhAe25`r!l68efSXDQ6"i%'[J2+VX)p##dXGC'Jf&GUBdl[S0
+M$1bm[[$V)3FLbRH`[mfk"kMF[#m5$Gq"A)8@-k[Ym2X)q,+3!%HkU66ZmA0$Vj%
+'("""(eGGVB,($V+kGjTjU!3H"5eqA"XB*360##["&M),GI@DBlUpG5f&IE`(dm`
+3b"`S'1ldPcKe0,+lbABcZ[XCpG2m25k@Xf%(Spe3UJ(m*#+2Kdr#VM6ULXF6dI#
+dYP6VTr"Kkmkd96JfAH@1CZVQGBcN*q-5jH2[,+K2MbYK+id(UbYhe%01212R8LS
+Gp(`lDaaBmU+Kf&G5hI8)AfGRYk8Vbl,$h0e)[G*+j0TQ50P9KXX2NqTf!3dHG+i
+&h)[DcaqqVURUGK"dYr@5+'mMeHPCiIpp+cd[96ZCN`kFqD'cfHAa,,$lkXNGCCi
+I%A6pb864[[m14Tl5aTHEDd1&BcZaN80Kc,3qLZPl[PfPpPm'cSGK@b[aih#XU(U
+3!(3DX968qVC8V'TjZ[SAfTMiCYEplk9TmE-QGh"`,6ifAi96hHa"MZJ0l8c1cI&
+5+8Y6kXHGf0GPJd0fIrc32IKZr(k(Q`q@I-&5k(Qf0+#ICrAVYRUV'Pl[0#&3diX
+Ek96`Sp6"iCjc0I),(YCiPTr$Q5c@$hjZIGhBjFhBRRCldfFF(Q!43cjNEq+Ph9$
+K4V+V0`TAMmb28YkA4hm2J@9,*18VVm2IfP!'H6A3efTXF[LJ63dk9T&11CAdSp1
+2Pp+abqEhd10aDi@h9')DZa*'bUDU28i3%%,0I@Gj*1rPBiPM5epLH+rX$36)Yci
+Nl'9j(8$cUPZb*`mMpR1f"RJD3e()$V26jaQb-6b!jqHaXBafAHP"dE+PeQ(CcQ-
+0BjFD41SC-D#EdS1PC8Zp9UT"MF`HABe)16lZmXKL@0I5Md1[2GMKrJND4HlU!pp
+1QYE@[TGhq[q2[rRI1PaShmQ4Z-#r`*P(*Saj-H0A6*P'64[lqlh'6BC1ih!#T0'
+MNi%QE4`+2V8C2VG$'pqMl@pSc+0(HjP(LJ)b+1lbF$eVZM)`-MS!)b,[)SbC14J
+C0hNB'4NlLqNc0aIhFR*ZllFAprM8EZq[mMF6-!"@iZmE!Zl[![XLl`F#lPB14'N
+8G`!A!`Er!X+%kGB4@%89KJcC9G+VVkE(Q5VkK)[iXDqX-LM1X-D4N8D&#q(-b*1
+44ZpaGlLMMC&hR8I[EL`Sc"fFR)M8D14'QcDkMNB#$q$A4J$i'"4Zk)BqiX0a*[U
+16-h'6cXd&%R'Q8Gf"M!SlfMP5E'Mie'C)SdCf2MAfiaY&"V)QELqSi'iSlK#5MP
+AG'0*aTY(L9dh!bD2@Kmd-$!RBf0Z,lF"2cU&(!mAG8E#MIhG'CIBe(S5FDMmH4*
+Si(pBIQih'"Z,#G*h#F43X1GSK*8C%&%4UlShemR1j0'C-pqMNEh1`,kraYaNdGa
+-[XR'h3,FUM*Q@0(kp'MIj&hJ6KVB+1C&NM$B&ra2&b!@j&rNhdc'bD0'qjd&(+S
+LR5C1M4`*)3JF&hZ+&'rh'6aEl*!!qGaIAH04NhH0*She%L"jeL)TJ4%6phJ83TF
+$)`*3-k0$!`D0(L8Gj1[X$)h(%[V[!ZmLqb*0'kSbErR5D2a`DhGh4[jf4[E#MGj
+&q%6P$[a83+NBR3[JK#1ZMGApM4bFD6MB'4QAehIhfl`"S['NphNAFQCI6Z2B5B,
+l)bI@JShGr-SjQ0IB(&Si(b!C5FDGd-R-bEl[KVmEHAeh4mDCMlLBP5X+(jC!USc
+ehImF)5qJShf3!*if44SpEIppBdFD`edl)r,IAr6iZ4MAG(aCQ2NJiNJic"L-CJf
+J)[KVmMhk0#q`-leV[*pUMM5Er[U0(aGaa-l'Sr9RIP[Yaq8FKa3P!Jll'"IM6*%
+8R"#i(9m@541N&U2LdFE'bIbU@XMDNhhI%[G'rhHF1Jr+%*l9rZ)+2(`-BEd*['a
+U1531aVk4Z)V[!Nr(cFU6mHq$TQF@5'1*VMAFEL%*bF#qlk!Ied*Q04iY#`r,MB(
+1`+2eD,K&5@%94`,ZCM"%ELGGNcl5-#,iNQ3%AN%X'3bDi&pp4q2J$rFEH8,$fU!
+d-c*hT&3"Urc#3kl[SX#21R8CQ4J61lpDChDFM4QEZC%%GZ-#C*)DUAh'aJP!iNH
+i8&('#0b*2V6+2LhB6J8NRFCPq"b,!R%P!BH2a`#"#%U"-BL0b)q3!%j140*l51`
+ELL09)pU`b2&$a`-#6&*SbH)L%NcX"2Y#9c0kJ+i3a4KMEL21`-'`N!#!i3PpNf&
+!C'5`KEl!NK$6+%`)I)iPrIhda%2N8*`56d4!A)"j0(F8,#K&3Q6SJcaa@#"2'Q4
+FHM)lr+)LlkC-`-#qR+bANEZr[Vl0[f%D+Ra"P1)i440B!N0A"PB-8T)-%9B"%a4
+Eh*NHrif4NJ8Q%2VZq[T$SLr@SlMiGrJEHL5V[4'Y)brh!a*%i5TbCQ-V)ZC[FLB
+8,TFXQ)+%@Ll)Nll',@104lQ`b1F)!5Zhef4Hha,iV'Z04(8dEl[b`l-aT)G0K)R
+FAH8B"Z3@N!#q6Z,q#5#MaEm2FYhX)%F!dK,!)A'aU!C`389m8cf&#6&1hDPl(@!
+r(H35BXE'Nq+KhN6#LTf3!!&U%"3RBeLSYj*ELR8-$S%*ahL(T8`0'$a'#`GSG+S
+N'kTU#`Na%41"R!K*0,j$'!Ci56)#`*`'$(-)NJCPPd'9h1`)XN*r*"MZ#2Y$'rN
+hr2b)+-TSdh"!d'Fj0d'9SU)%4V*Nhh2b!U!B$[@-2IG"10Q"C#Z)%Th2jD2jEZJ
+$EL8El`l'MIEUMNp1C-N&r56MG$T-Xh8FDF6Tc#hRZ-ql$*QAr2cU0fi3iLVXL,q
+qdFRGdHINdErp0%X`)M*Pr&ZiXQKNp*L&B$5qaTQCGlh-J[mkM-8d)!k0qk)3`-A
+GhINM@5C'A[hq5A1`LUdS9,88V)Nl['[k0r!MN[llF62DcH,IB'ibD&rQF615'T%
+'N@$DMl9p-9SI',jaBeb5[2fM!'4NN!!5rb-B4kC[!+Q"Y6DELMICZ6ih(NjKDNh
+$'e)"JIGNEIK'PPA-bF![Y5Gf+eJ3C'6N8,kqr,iI[XX"K$lM)jf6prRc2baIqaY
+'N!#Ud#i3PKIEM!b2&bFRmZ6J"#c#0I)Sj)FS)-dbQi#qbbDc'q[qA*RFDCpqMNC
+)Dii@B$rfQA(XQMcXR*i`0k0qVkE-,r8%Ti8XQl*Rf%"ZmQM8rpj0$lq64Xr[Q'(
+F&d4BM+-c0cD-5FD)Ppr*bI@b$+H'QRPL'M1#r)La#JJYi'k%$rPrN9BBfm-&)0*
+P(0c6,)"ra0e4rbbI&,ABc1!CYf64S%rS[+(Gpalrp&%(*0"aaV@$I*)kJJ[bk0(
+r)cR`aUfMNd$,mXjL0`Si*r"hI()6%XmcMS)TeMJeb4f!-j'"e#J"IbC*Gqjl)X+
+2k3bXBHEqQl@,4`DCe'M[%JP(*X%GGp&NC-kH3-`#c@-PNdIbida%hGK!i&E4[li
+G,M6,ZqpEeNkr*hQB+3SNEqMZbVR)$8aFDCJ@%V"[T"(j4pV'*k%m3T'&HiPL6Y!
+X,ZI6jh6je'BCG'ihYhQ'G%4+$XGhM8-R)[VZCIC%KCIJ)2dSJNPkSm`1*SMLLX%
+3*T!!DHP[IbV-NL4!Eb`R'-QC1b,pd3"B-(!Jr&J`2bL*dC16a#+'lh"5FL#6cI&
+##jr&)Q%kIH'HkCXTS'[4"k+U*(TLaJmb3B-IN!"#Hrih[q-b-ha4qi3S+!Upl)h
+'59E@&(Hj'-Xldc2Q4-)KX$fPB%Sc$&PP%pVK#C)pJ)MaJKZK4ip"3P'RL)$&pi*
+(L&DFa+@&[N%XQmShkVU)dM)(S+Y(RmqF9Gk0(MX)*-V"4pqqpVeV"%*B'`*[GfL
+%B3U)60hVE#5(Q1+rI$RZI4jp(Rd&N38I@c'%1"J"[[c[bmH4MC10Z*P(!hZiNQ5
+ZaaGpNF@MQq+ANTLUBG%-5CJec1,[Gk%*dmij@J(Lb$3r,4iiA1-0CZ,$a5j8k)@
+MQqHV9pmk)%Q8c%@l4i0k9am@M[Ei(Jl%(6L&ibd-FdHX@6,l'6mb'1mBl&JlX"V
+5(%N(Nk$'-[$!m@lNL@-KU5rm3Ufc6+M[L54@X(4"m8bYPEYB3S%Vqlb662#'S'2
+l!X&Z2,*`jkPpiS+1GNk0(TU0TbjQc,96%@$#(cmhaT&'q[blKZbdm,SK'59hh[X
+)%FEcPX'p-[!SIYCC!NM-+bQN%Ne-m$H-)Dl-Y0T$#B)KT22SmFM[jhVF4K%-X[1
+L(#'+bK-3KPCbNm6mY(FD0'`[Yf@@FJc"!d'N2-Q"$Ma0k8PUh3%5h)J83)3jQP-
+)BK6Gml2[YaBdC!K(&h"VrV98+2K"TNcS8I`'k%L$*4bK9N+e&649M!LSdD23pDJ
+@K6F2XD-@-3Rr+@r&SK,-p#'*mM+$r!DZ5YJ-ba0f2r@Ek49',eK&,428YLU-,5U
+dMc,2Zj&(m[MXdjXJfj!!aN$(h`,T2@MR0jiR&@RB%)4jV-3Sc1Yaqlr+5Ald+Nf
+`PEG#*R!CLiT0$IB#c*-J`1V14#-Zd3qpm6LjLci!ej10Q-Dc!D4IY1%@STT**jI
+Ap%rG#l[`N5m'%@3S)""&AI@leCJHprTir2Sq)L,[V[mV5+SbEVirGr9pUBB3`dq
+)XTAa&De'!#'Q$pFB+j@S*1-DP&!I6M6U0hJGE[D+bXr@rTpESIdSj$EBBZTU(-*
+,0@3@L5b$)ZrTQ$,X*'qiKc&bP-eHmJM6)dFD`PI1[mRVD*[lc2`IEr!F5cCFE['
+[pdB85L&d5G(04"VD-0qElbRqQ!3(9CKZ),AI`"KcIaSidL,Z`'GDARElr6fFllE
+B8i"RZhipSRND4bFNVl4chU2fpiXcZBM`bIDa[bR!UFdShad9UGa)QHeNBf"hB9r
+qPfjR5Q'Zq#+qU2Yc69A#0JSa&c6)[jN@"Nj@"ak(Y8FNk410NC!!CdC&A&)pVF5
+F$Zae9qBcaR-QMGXKV-khZc1PpVRCe!)B53SLhR5b4[llFUSAF(0%0UlfTQ"h)2E
+XY(B"`!V3([U1RQDlVHjl[RIPjhYCAVIP2hhSj044SX*RF6ZINB&pNdHq+$q2QlM
+!pEZ`'K!@BJG(!,!GhplfD2`jQhkheZlmEm[MHekh%#X(Bj21dq9VPd'Y%5pBd0`
+DjH4NJ2q[[H1G'lm[Y#-r9@4RNQE&kf6Nhphi[cVkMamEaFcGm6Gm@`hUdAJ,H0m
+2*@c[NEM)LbF$Hj*YS$!J!!!!J%CQCfGhGfH)ChKiKhGhGhPhH)L)HBQ*LAL)H)L
+)QBQ*L)GhKiKjL)KiHBH)Q*UBURQ)LSQ*QTQCQ*L)U*QSLSGiLALBH)UCQCL*QCZ
+TQCUSQBZ*QTQ)UkU+UUZDL+QEQSLTQTQCUTQ*UDZTUCQTUCL)QDQCUUUDLBUCQTU
+TLAKf'`!"-d9@CQGiH)L*QTUCUUZl!,#`#`!!X!!!ZN!L99CQGQGhKhL)L)KhKiK
+hL(H(L)Q(QCLCQ)QCL*LBUDQjQ)Q*QUQUUCQ3!*!!ZDUjQ*ZDQUUCUUUVZjZJUU#
+TZVSQ[f&ck1el)Tjm[brJTbG[jZ`bQ,Ph)0l@Tf2$VZbZ,Q4`j($f8RXLmS5-0D,
+6C54jhmL&rPP*THc1AUZf*K6-H4a,L4bdTikiabl$BAlMqG`r6l$MmG,f9cf(Zql
+r[LQH[a5!UF(@bkkrFHjTc[KqANGVXFT6l%[XQ[%EIK[pp[fd'Q$)l$VEQipFj"K
+ASc@(1PaX0KNpVX4903VDl(blPY9b*L'bCceM@Q-JjVRj2DpKFN@Q*(Zh2fkRAh-
+dR"UQFQ%LS9(*-UbCZGN9UcVF*hGLJj-j1ZSdUJ#`T'2!AX&iCMYJdpG)0,3hqDH
+3!'@2A&fDZbG`@UC"Zdb#RDZ3!*VpF56+IZ#pEP&#NZ,C6*h"[Lef8f&'F*Qal#M
+bK[XRCZl$Bl'Zkijlfaf%Jk)9q[dRB905$TZ%'kSGr6*dpa)bKb!Qed8`56[BGKf
+AC#R0*#Flj5i"-U9(jIYI8S0&i[)Lib,edAmFAjXTUr'qL2RBreBqeMrEMrJMqI(
+q#BNc&C-C1BkkBmH4)aFMYC(`iZdqTXZ*p%ePTVY*V[TVb*Vq8h-6HCQlHEkkEem
+hq1ER)XjMCc5cREcRNcRpTfNRE1GeNlGc[H6[hjhj*0&*jk6*mfHRCkeRZrRVpK,
+pe&qr2I[HTHUmD9*PD59i8Vhjr%6qX2h$ra3BbJep"am"AB$Ai$Ji$f-"p&$6811
+SFV3jfKqc3lkKrIJF$AB(TF$h@"mh!i+4JXRJY&J[%`AVd8LLSZXSZmS[*S[idFa
+4j#Mqc4q24rjT+LNcp*`+6ek6P8Y&5ee,A)#0K$d)2F5ep,Vd"'`Kk%(q5#PmHPm
+G!4X)TDE,dej6F5RSDIT+IakIk+M+e'dU2ee06cY6UDRZDRp%jp,GHl9BHUqY9IK
+U[2UjkVYU[rUVrP@9GCe9C[F(4i1c`Iem(iH$pA#4m*MF*f1%hH%rCK2Q`Z&c@&d
+Z&[-,[F,kH&`f-`eaKZf`hNiEqq(T-2Mm2U-2Z-2rpKrk9Z!VFl@hPEj0Ej-hPTh
+3cpV0jQGXT[16h3i'eS1K`9VIZKQmR0j+Eb8hSC[3cG298pIK+qSVkH[SUrR0"+a
+8hAbHKNfXlAcHNS1SRl@r9%USS+qrD'[`'KNfY(88&E09Y$AbJAR+b9869IIUq[R
+Dq6Ab3*[eI3empAemUS[e4*U,pDcZ,`@,(M16HDRqKQmp0jLEX*r2JGKCl(6GV0j
+DEqT0j`(X`!QENj+Jk(!jc!Cc!G60CbJcNQHU+Q[Me&2AdP4JULGVjr*5F9*!5FU
+UqFb4#bEb%h6cQKR-P*Vj'5Nj#EVC[QDfIb@3!1Kb%M)6H+R+qFkF1#*9qU+$1!P
+R"a3%3%dK!I-%"d"-,0i9!3JZ3&Rl9!5IYF$LJ%cQ"cL!P"R*[,5GA1NA%"%"#5Q
++)&)#BUEU*ZS3%NN%dMiJ**Vjr&*#kIb5!NM)6'5Qkr+qPSHRYGjQE,1HADFHehL
+!PTamRVmPhf5ll3p2SHRTr5r"MI@a[V)#BheZLpE&B('qXK(MI@dRIG4DlbRp+Rp
+,'qYSHR3%31VEDYYXEkb"9Cfk$6NlFK5'P2k9V[+ljUljVAHCcbmeUV6Mjl'jMYl
+$m'IkA1HAKG9MXcDlc+qPp5FcRPfZmc(EfZmcGYNZqY12R2,cRPp6h#!h5SXS#-I
+FPhf+`+!K#I*Gm3Zar!Tb+15lj!r(m#Ym#YpkY%((m#diq2i'2i#4!kGU+92k@Fm
+[(m"&0!4!65$6Q1hc(ES#BA9BA9)#Cl'T!QehL!PV[-9J8KQfBCAdYAMAF@l6MiV
+!iV!S#BV!XM1b%6NL5!#60S#BrJ)08pR5jUQc9,QUM-8pR6fG0Q@!e+#5!P,QXIc
+H2bp0J+DKUjkQSF25i$6i#PY-GcQ1jc%jB*meJVERTd2kETF&d@#k+PY+E"G2JZR
+`@*`pPdGT)k1G`A6f9MBf96#bU,1bXXKLFKPHFc@6TZF49Y+A0)I)eYK&1Vbf)8h
+5dqCTNJRQ3BD'X&di[ddUSRDE(Fj6CT!!%ah1%(l#Qc04Q+Mk90QDE-N+qEah1Br
+,Br,)%B2,Br&C$QmKcBpCE)BQcLfF@Q`&619%jcdl)dPASY,TELDqP)dQQ4X!b4T
+&"DHcQ[TDE6G00G,)qRMF9JVB#j(dp+N%kBP*8@GCPkZ`@2qAB)9BqSreHAT1KV-
+Xj*-ELX5d("&T+E58YT1mpc86jI-rH!FQjM(0c3dV31`(T,Q0d&cFi$V,QY8)1aK
+&jQjZEQ[d-hKjM9A-ed'!K#j`&c%k[VVQ`aZ'MF`#eV6A-eNiXp#Rc0!JceS-i@0
+8c5M-bScQ+#JZB[9DUjXA)c)B-i$!!ceecCBh$6(-)-dV3cC0M1-3CKKTLeT(ScG
+MA2aC,"U-paU-qKV20$9-a1)02f'ZZ8DU6mhQ$8@6%B08GUJhKhBh24+EQm#Jj5S
+1BlQCMQ*Y`14CP4h![NGbF@,)8G`31jpr)lUVQ`Hil0aB4ZE`9!K"EDcA[X34C9)
+j)Dpj)CL*0a'%+3FB3b!K`maRUGrSKBaaCZ%)YrSm&36ec&L`L4SN5*!!QTp2HR%
+K%K34imD0(M!GRV#[QiJ3dNfIbG%N6&4#2(R)mR%bUR!c-L0!'T%Q+LJHrb,*M6b
+)9&pI!4Bd*F*CqM-B"&9BFZ@"&lp(dAS&hYlb`%K'PeFXESF[Pbi3Q*MP`PbiS`4
+,kA(PLh,[CBLbjFDq[BFZ%AP!QM4,LI1MZ"850'j8,f&$#qPa,lk*F[rN19#q)RM
+5Mp&LaSMfIKePJBlHTE`mJd$$6e&PhX,k%5pL3QBXZ$Tf[EfK#YYcPL5a`L3[CGp
+,PSdFZ@-MFA@Q5*!!MaKNHc(bi34LL#L3!"Qf2PXB`QEBiJ`$&(V%rHFFCLB39&-
+-Bm#J"3HCL4,jL0%MaD&$D0#p[H8"k5A5%J9*4)J)L"-0+%5BQ)#q5)M0*BZ%&iP
+m&44@*j08UJ4RKbJX44M,@lG+-4`Sah#LPCk1X,@8a1&CY9M4`S*$1PC#pT9BX0,
+L0j!!0G,JBaN*9K`9@c)519piB(6#X*AiBBS`LI'K'+6i!3Jim-8)05BG-E#&pQ0
+Chff1)$ljBfQ**46#XD"5-5(MYMM$%9Sd8'iIY,H$9E)f3*3NQaH@@#&L0JXc6)E
+)Fd),489&93%,&l)@1C,,!8@@6F%*R`XT"8Y[2KC)$KLrPCM[#b5+4C@*bd*UY4j
+U,#E&ZF3jGVE5ddPZ+J@UdEiCATQDQhDC[S9QLmSL3Xf$PS-XKD%QQjq'C+hE+M3
+f5bFqQJVI3M$@&$KZ!aqQpc5%dj2TUER3H@Q%BYFcF`M1$UXLQD-L@3)M``Y96VP
+aZQ"CC-Y6N!"&Zj'q@*'&#*4e)*Z'*eELCEZBa2hA60SBZT1SkA8Zi!XUiq9Y+rN
+HXCAU5B&&q,&-e"LmbHa$4Lr'+@*`bK*YN!$P91%ddZ[5ifX,E!&L-r+a&&Jd9!%
+G,c5k4N!U@pel#*SYV@@DAeT6ITI[PJ8iB(KK#YM%kSEM0-6L)$G""GAHc$0*'Dq
+A-4Q)X3Zc+`YbI5L&V-$"3-eY01@0[-1+Q)dCZ!bd()b*T!-BeTIL&hG$3CF#b0$
+'4E[cGQedbYAKbMYrYXFa1+&(df1'YQKJkEfQkq5qX6@!3kFeNHjFbX3Z,pU&0mM
+NaaqKCY(Zihb98hT65q('@diJ31+cUY8@[Xi)&)i*I9PmTYZLAd1@183SKFZ"M#I
+qFC!!r,L"8D%KfiAb4M68[C-Nc1LI,LbpdXmm50IrphV"HC'YFh"TV,Pd8J`N)%E
+$CiFYN!#)m058TTGGFXc@G9-1'EjVeAHCQ#L0,DV6-M+Qac%K)JR3a'BR`%G$Tdb
+TQdL`rTP`DfMTQBL4hjBdXe6F`fa1'0+k#XLCU,lXLf&id@S@RpdbPJPYPN)b3H@
+CE"ldc2hL8*01V#K@qm5PC8dZR,-aR9QA9A8VIPI9H0[Tq&eU)849`cB&XGX@N3P
+T@Hkc%*-ZP4FNEDT%48S%8ja9-e`Qe-h,5[Zc@[LQj3Y6dabe861LIT3[bCSmiQ4
+G&$PVDI#a,!k9hhT4)ATQh2#X@E`$E9`04BLr3QI-aC04KqPP-Um"(#l&K8TCd'"
+-V9FiC#&M"baJPS`R9%DK`M!Ea6l-,-qYYLEBA6!b[S3dH&mYk1@#+Lq,a9)Up(0
+k"LmbpZq9ikJ,DkfX0Urd,A+4CI+`,6-ZjLdNfE,Xm39Nh9MK-EVA[&!iVTAVD9b
+,lj9ebQ'XIck9dN3j@#*jA'[bQ#Ukf,P9dk@)X,I$HkXPcH+Epc&CCrL9`&0+J9Z
+e9-ppT9&pJ-q9H%5V1!"-&cP8H9@E5)!U*RhTNdjA+[VihTR#`ZJDmUk+dXq*&dX
+,Z12+bC&JYR'FAUC(hXY-6f,V-a9`a-B6XUTmBC1Hpf0F#i(6+G"b,1'KbYXjkBb
+8c-8ER*'mY%lBX[+-hVf0#G%*kDCNbr@0+8HVJp@Ef#G(#S@kh)RfB5h1bZjDdRF
+5ep&Lc[3i#raCZD02am1,)%)`a'1%iZ(pV&"6T6bR%&0QIG&TieAdVq@QFk(%$4(
+5YDFJ$q'BfieVUTSK+bTR2[lC@qJ%p-cbbd,PP5jc&TqCk0VCeAE+ECd[R%TRE)a
+MFG)*M'&mdaLR@Zid*E6)K3-U'Ep-aR@Nl$KQDf1ATSBdYE2,rl@b[FfhmdkEeX#
+26HhZ'Uj6VUVGfiVU5Ui+A2qZ$MS8-hc(jEf6hY,M'q,26&**Nhl%TRI09R(Te+a
+Sl0ZUE+cA!Xfl2%C6k@NG'GQD*3cXD3MNX*@h+*!!T)Nc*RBQ(FG39DKRXl6XlcV
+rMNR'51$FmN+'FJEmVbk,Uk*j,dq8Hrb9kFDH&Ch`MSk6M`k2,Qad5fmqA3QlFZU
+$+ZX58QE@VSQH+c[aZR4RH&G1cEHN@hPb-a'+NblER54BbZ+@,@1#$"F!%+r09f6
+!Lpfdepffj[Uh,(ekER,A5(RrC@fBdVGEF05`cD+hI*NS@A8$cl"JMT16+ZMEUfj
+Xm*)$bNbLdBPV%8N@q(CNE&J@Z)edl10(KrEXiSD9f4SF1c+9em)EKf4`RP"Q5JE
+EA2JSG1mJGi49H'I6BajCh,SN@9I1R'PLQX'aaEF'R&$YjFha'+*%4VL-M'efEAE
+A2hd*p@SM,5PcCr$8iSmHc5HVT`dc$hD9Z4aBNrI4*6YTCQ,Y0#!KkhPq,FD)cE3
+eiUhhC(Zad"kP(bb-bU9ETYF#mmPH4VDFC%3k--FY)Z@!dVQf"C9TV+4+$PbiNqZ
+9`6ULmaI6caY,mdd[Z'"LqQ&a`aG3r```,3k@jA$%#GkZaDaM2-A)'53heG"NElf
+DE$`+0-629!eJ0CP+"C33jC1Bb`BlL+RA(4MQSf"K'Q8qU1HNYXEIN4ELC11'4IR
+jDB@BmQ-3&Sb4BJaTL%A+R'4M("YNK'NT1BKf[JCHbe%1N!#0,-D'!4)@"1!CjDN
+@dipNPqaE5F!@NqP*Le%PRZc[CFG+6fHdkp[ISKHaSmh,Ke#GQ5BQdpP8[Pm[rF6
+Pa1@IE4Hr4bcHLM3UjZMDCqAHdM'P0cDq[H8VAHT58MA(*JPDcGI4V1L(%LZfZB+
+0jJc&1T6Z&c%j'2Gk0d8EMVV5i$K&9``V00BDqA#pT&iI8Q!EFid@pM6dDNM5*Q,
+04TkI+l6'p0KNZD2GaQZT1)mEcm1CFZ1F!!"Y1*H@6VmfM(&()0dFNc+)TeDlk&l
+bTXXhhXD!jc#1FHHRjL'0N!#H)(0hp@+TkNiRCJTPbdl*bY2*Ma%8'IB2)`bqBGG
+"'IK6aimRSXIp6!A+Qq*ZF('dPc(LKFGC'HLik2JNRGbXpTk+jS6q2ih2(`-L6N5
+KYJ0GL-(!P&85R5X3mL8N*1FZF&M-45@0AFi+2L$cI8-I*ak1jNaSr-4Se-QlY(T
+-$'Md5#9'F(%HrT`3ak16&89Lak)qbq2Id&++G88-6-Hr(Gq+qLh'Bp%Nf-H6()K
+aSmmBl5UYI4'$3(1"S%P'M(L`DQ*-C"UB"Sdl$TX[f'Te4UBG$8@B0'4"T"Q44&-
+%D41YM-B`4S-aC'#6[5Y$-LH)[0*N@4JA)e'N5Cf0-8+mQ3-53ALh*ma),aC#LmC
+"FBBYcIidLTLb+BcYBdM"B'0)S@#8bmL8cc##8G`*B+C`Xcc%HIQF&82!E0D#jl'
+jArMjPV!(2J'S0JJ$K'T)4U-!e#3$B$!(J)4U&5HG60fQZ0#(A3KeN!#&(#'K2KD
+YY[-)3J0%2ar`-)PLDM#m6123*L8bA9TR)'AJSBHUh*3MJCKB4qGE#FQS6f%)QYK
+%qS[jEQd61`LCaX*kK!D0dm)R33KcXC0#,+`LdF*M1`Ld8)CNT'22T#'@0@K)-Tm
+LQG6T2`cDJh03KJdl(N5h8EdDJf6-RD"-A*'B3dK*SQB`iNB4"A,)'8K%)e%CE#%
+5P@q,cd)9UK21`KKec)FP#(-J6-#2cL`U&cVB30)A5S$%Q5)UDXTfcXSZD35Z!qr
+`Lj0Fm"HXbK##A2VqZDL5A16'0ccBNcY2K)3Ha8)j'PXN5ER#)55*,5@%k#[114)
+INP%4Q`F*J&41a8)C*)FNIDT[i(@59K@Jc'VPKRi5dLqk%%XB['QD9)*-*1FJD)-
+@YK$Qi4FE#'+K&aN)[0`MJ69V`@iCF(bFFm)Z&K#S5EU16MP"je4HrK'fjQB*bD!
+'R5$`e,$qX5(Q3R2fr@)Y'M-RqN5)4Y9*h+S6Fh#F$`XY*hdiAiNlLBKr1N3rm#5
+3!#Mc+3J8P58TZ6%kI3!A)KD",TB461P`-$hZ%N)a2(5`QXBJ6'SS4-(#-SUJCRS
+42V,2!3d!E3*$&)cJ(13M&IXMEfLd5P54q6"@T0ZBBqJ5EaJ6#RK(+J#b'4r*i+'
+%b9BFi[X0)-kH%HZK&a-)iLm`J6)jZ%B"LH1XK'jY`%Rrq5-N)FmXf*!!3-eE6VV
+'Q84Xi3ckf"!Eq[#*MP`Ee%)R3VZXIp3Kp9)b41CK'),CTDMIV4)Gj#*D3MfU5[5
+Rl3`LIIK$XB3f-)[-3KR&`T6k8pc0rK'+[5KdcJbB3T8,44"PR+AJPQ3P3QLd)@Z
+MkbTq%b3@jZ%0`ARCVrPlc-56i-If$&1Hc#E,aAq[,R-cK06[ISrep6Plrp8[qXR
+3peaHAim,VJ6RCL2JX(r`Y#HMQCAfr*R*&9K)C6mppXqDi9aJ)BEiBZfl5DXErq'
+jiF6hH&Pq2&ZTUDSEU%IBE10`Nf,10Jr#l5'IZT85A9AAaa)C@4NEcZp0XkkeYSR
+#mSr2Z&E)b-emXECe5#1a5bK93VSF+%h`S92&jfdrkpAq(+lVm'Zm2Jl(qfphh+h
+fpr2[I+hX[HlhHrJhZq!EP!6qLAbTId5jIk*Ia'!fjPm@AmpZ@Z[UF[@rUdRUk64
+5jIqVI2k6fYESVI4@p[SERUpliXX0IL[[lEi-TF[e[)ZCHZ0E@AmhUK"VEIr@LPm
+D4TqIjr)D#[VqGlRlfJVd#8"+raGi!q-dYCk[1k@XV,$5eQPV%$UUeLE[2i['CI-
+lha4ehYjiZph[Lq,iZmVmGVE#dX0[BEH`fr4BA!@q1X2rl$0EI0EhEf&YKp&H@p[
+AmrT0*MUr&rqD#[jhlILlc(B#Y`&EJ-!$dlYZplh[lcJGrY,ISlbmk(l@hXE'cfZ
+ZeeRMFEBf1FXE'aQima`"QfhGGlMFPhqfe[Gk2JG(p[[pTp,DF$kHmXE(ZYCV2ip
+MArBXl'c[0EEm#hdA!aZLeqei&[pRJDcJ!2VZp##dXrXDMFl[Fq%)QjfJ%f`%l-"
+1ckrFdZ(SZMd@(`B'i3"-23GI0e@UQ1Cb@McqifHjh1Uh!C`fBCE[pf-h12aQlh1
+-fHlfIKEQhYqlYZjY[#eAAd9&48Y&Kp"Kp&@E[VpaM1[eZAbi#GIVHlh'YcpYRpa
+ZHlh'ih'jh!XCr'@fUh'cfG[erUlMeGaRlE@ffjkrVpcXrAl[ZqllRZmIM2hIZhH
+lhHUeZYeZUkr,jI@qTZmElZ0X-"ErUYmG2m1ISX"39PC@ITV1F!EpflS04i-U9PB
+B+9#Um'BLkLU,ar9b,M"A%*9G#iK3mrdfSe'SPFlIU(8I"b14m@i[ppfAiH4mAad
+2CDMrIhE$NFMr'i[rbl,hElNDMiUrYFIeZZq5cefVpVf[Dm$VDc2I*U2I`FrU!4Y
+2DpVp[1CE(j6[,L[LapGV*C1[hXH0TXIcRqTIlrIm6TY4II,KX&CkliXm$(FS-BV
+kRCkIrQSjMi[IkMHBrpFr2cmA3pheR6q*TI0e'PNGaDjA3fXU4dpaU04Lkc8H*R*
+q4U04Q1Qe(LGcJi5+VZ,ATY0U1cN6(F5jkA,RT@LNf9e*VVMC6p(99NR+bXV+ZUb
+kUT9P+UUV`DUUlMZ,V+efPUUkkZ0M4mEDmAi[CbIbHlfh3FaGELcZ[Grja[8c[*p
+$MG,TGArRJ9drrRi[6p2i1$lHZerRI"N[mqRjd[i2pqrlpcV[$VHbNh8Qiqr8mEM
+r&%p2AqhHr"NIGlE)mp%hAYGYPEbib0eY+UaVXVHIESkcQDUlcI65XaGd&eeNZkp
+#ip6kIKCVKkAprL@1jmcX+iU5VHi[+cTT1PfpMc1fbpCBjI,f1paee9EqkV)PM9f
+1Pc@jdIFIch0A3h@4RmVDE5mPEI+eG$@eQ)RpRH@0MpM3#RGE5YrMDLRq[Ml[3BL
+XmcdDlY2-hiSm1Kkqll5YffAa'bl+ba&AG99e%mbVbrApR4p0GphqhZT9E9@RU@&
+jPqmd(3FAmRh1dmkHq2Fp[l'@r(XYhBpIeYKR-2qRdEAjF2YHijLm`HblUfZqd`r
+SSM9995HGNrEbI[p2cR6pYrRfjH[r[eIjX(2EHHXBZeZk[,f`Xl6`lM[+268IQi[
+epA4qEeIj2EbA%eI%p[rIMm68e@GRm[HCI[Y2Bl6Fp$Z0errrHrq[r$`,cmQAhI3
+IeXIbqMDpe[1jlJDD$H@ehmZAbpEMGRi0989YPr1Yh1'h0YDHIif*kUZmfA,[rli
+QmUrM4Ql2`lM`YAi(`C+pf[rhaGek&TEGer#dYZjVFVfGCPC9hHIjrRQYcQUcH9Q
+"mAl994rqf2-GlHFcHH[rQKRkZ9BjIaHdffAPAGEMGPPFVL+lEjr0jVGpTh(aj[U
+UVdTUThJ-pTYkhGlIpF@JPCEMq(c0TECE,bXe@lRY004rflV`m(2jE5fYVHAP9fR
+S#pjQjYk#Yqe9C,4hIIH0HIEP5[qEBB*qabrRpTh[RfdUaVNBFlM,69@J`lMRFhQ
+klp8e2d#-2IG4iRIHK&Rj@@`T*V`-d-VTLrcbq*,qILrGl(iIBlhi2)p$ijlRUMY
+YAm(cm1rqTS[jiA*I2a20fZPdAlpIZ[Gh@kpZrk[Jm6AFMf[-eICH"X0Kf&G@8rZ
+p[PFVd(SrCm$9q9p,Pq9r,j1$l(p2AlI9cAbHlZS[&rPm'5qIc09je2efULmIM&6
+Rqrr[Leqrmh&pT,rhca-*6krfrMUIfe8UJUUbeVFVPEc+ab`j*kk9PqiVVS$lVKm
++Mi8R)h99FF,VXVIU'QV1DaQ4bPMd24D2kQTe@Xl$l'`ZGRY,cY0ahhrIMIPmVc2
+1p$dIhI`rPr2h[kmMj2RqMPheq`&(6eA-iUZaZ1jhRmVQ-lEr5dheYAf1cf[DGhi
+(hYrirrhl2fq[a[kI*HbC@!`9&591$VF9M4BXqKYHLkA5p2eIAklAl(XVcZ1mm$`
+I$hrj2(i'CmL(N3p$e2BirpImr21i#Q`I09f1jhS,1ed25kA8pCehepMfIEGjphH
+IKr,`I+mrd[iIbir[rhj2bI0mpl28&&6eGC@mhM-KNm[R-j1bCf6*R5fGUq4C@Ia
+mR[l,[l,[rPh@kj()cfmrlcIIfAkC1"XXpRZ4b,,2E[Gf@HqH*RV,`[#XZ6UZrTD
+IcZNj1GUV,9r$bE+RX[0hAImRNbHJj2*LClGC[GC[HEV2Ebdch)h@kY0pq6GlUdl
+qdY-h1rhch*Y*VNrTlq*6a-l5mQ2CCZbMmR9cf8lq2Qd0)QkY0e*RTkGRBT!!2MJ
+(1bBV!BK"UHYRHHa-6jI-rH!I99Z#`-5TQEr0B)i9BNa2(AMQ*ZFAjdm%E3jSjbi
+6Tr-m3b*5+#ELe(0G9eCeSSTXCd%c#CQB8N)(6i0I#ECq&0f[65CiIcRNQ)'r(d(
+TL31FK1e"m&B(eIamLZbmE4ac[Bm*JaG'fBE,%TFL*bLRhK-mPacRcB91I%HH!ac
+'fap`aHc2ChZ%Kr+%IkjrDkC2i%N6AqmR0cRkGAUGpbX0qHlk25fqYd@aj0e4c0e
+@a2k'kIXYP#M&q&reJHCAK3kT0U5ci!eA86,ed-c&i4aUc9e`Ua1ae+V*8,UD-3b
+q4b,F'*'kMIYPA8)ElGl(e[EpE4mMAEl5@qN6$,FTVCk5heXZhqSBCpEEfi)frUf
+p[SM%ML2`EhHrSPmMb[dIRr[j"KTjAiI`IRhhjr`q9,[YpmAjrl'))`rmAr4L@Pp
+!(h,PqeEh-ZpfQJTkHN`P$3dHUff%S8#9$HcZ`(U0*d[2k636rDp,NqIdR5ep3"U
+#25S-!P29AlFMM+ZVVkr8hQT694e1T[,c8kR8jE,IZh1@c1@e1@e1@e-rM+[Kcr$
+bh$beR4fGjUHciH6VkI-G0`q(2jEFEJ"FMPXYPYU'20eH2UmI9eGjUFY1G2VYGpM
+8H*pMV-9LX9KY4U,6UHUlI2#hBkHaXIPbdr8pYfhEAIMI,-hr+qjiRLH*q[8Dkce
+8rV[%l(h0K8iIa1(dr6q*lRZH*lRLHjfqHcRbr,Cf2p-pQl[9I,QIk@2QI,Q02lL
+$G6K2%RrFcALGpeQ+`RmHqdpTU1pm6KqjhZZeJYhQDfQLb'3b'('[(iI)B[2jr2k
+((JCS-KM1bbqidZiX1jd`(@!#CIbl#CVX[%b&&4FhN!$(j$)9q(`q'`f2b!-j,'D
+,&ffLb',ai,iI&cp&2j!!RmMK-*cq%`Q%`q%b9$NU(*j(*C!!`eINU1[b9I3eq5S
+X2c0A9i[$iI)83kJ(N!!$XN*HIjR*BIQF2Lk[*9&2N!$*9q3aq5kHL&bIYY(NXKN
+1MVmP3dP$K+q[b9*@iZITTqSSk#JV2FV1DV1E`Q(V-(cZ0k$'KAcf0rrdf$YrHYq
+M1HG%YmGd9[GA9G95XE-@d,UUKJlI[)Fr+Ylr[[GYqrqlJH6i'fXY(TI,dH1Yr0l
+2jr8m2kX,UfdhCqTEp,SDkUYY0CIUkAZlLBfI-ImQlIT,ID6@IYjUBYifIK-D24f
+maEjqNYjM#i(eF$-41iPcXZA1chlXK`T994pG+UpR*bYe4e8UifIA9f9`FVXj9eP
+YRFA8rFAI#VT@,Nef`cY*p(q2j9h*Zq`j0$a*0rf2'mAdYaGjrMlVAHRjAcGCb14
+qENGM,[[Xq2f2NIq@'SSHbVM6)SlMj2+qMi[)mMbZXq$*F5SlrlIRf1@i@CV+Vh+
+ZIlM%h'%rG5BEZ,c0CD6i9Vc&p*`2Ih(LqPlPhfpjpVYHdqIIp0YYcBpc3@0PGif
+Ph'-`YTZHKUqea(hXY@Fai++[6D$FjV#ELIS-FD6q*![e1i[24fA#pI$A'R`H-hq
+RZ-*q+Mh&Ch1p9CNdAIf[UGVrhYVrHG6Q0aLr2PB(m@fh1&lqJXE2'dZfaBXIDbf
+-hQ@V1%UYV1mdIeGa2cq109l%#YdeVGA&a9p"@rj`G"m1Lq$p%[jVLRj&6Z[Trid
+ZUS-cR[Dp6T,2KrMlECiHNmbcae,Y[8b9i*G"qEBI*MH[qILFMLriYqPTre&qbYm
+,qG2U[1Rjr*)Up5LVdIRhPjfq2pRU[4j'ZefYiYpiR'beCc0CBB2bEEXU5fhQ9`2
+qIQj[[2"[2Ibq`lVZ0T4DANqjZGjDIL`PjfZK)ccq$NqALDApIpFa@DIaYcqArhr
+fmr[,ihC)bE[eF4[GlZkbXdC)rZm*ZFcBGa'lhGCkAQGYLHplh[[CkVUI"bq-a&"
+C9Fre+XH#dH8jRZI"pMU0R+SHjm26pacRKHlZGjQI#`Qffh5B6FdU-ZcZm6L[iq0
+jUXhDrNqhp[CTYBqjhGB00C@*UTIqM*PjAi14b2HqPeDX[Iqce9Ti2Zh[Tr0e["[
+[6Pbll+ilj[4q+A`k6Tjr6C!!lrJrpkI`DhiEldpebIKpVlR&Pkci+Ii[,NpTa0K
+c'3f(Tr(,Pr$kA,q6bH"kIbHRP2QZCF[AE$q[%m$)qA*V[JaIh2DpVLirfHAr,Lk
+M8G0ZVl1H$PH&+Z*8r9H$A99hGA'CZZ&i-DUSkU6a*0qihJF+GPB+S`R-iV'C$Rl
+'dcY[d[e00Tp4UHTkVVH[q[X#r0rei'km,`ppq$m[Nq9qVd1*qhe2hHVr(f[Fprq
+h)q2rAcmZA*[p$5e@%jV&j#`XqKk,SqQe29pKXGPYHelR`2qr'rm6!c`Icq9`r-m
+rpRTr[pMqA'rRm()q6k*Fp3B+PUDcQZFaH0r6Miq2MjA-CZfk2kHRkV9Dll2CEEY
+GahIHq$pllri[(mMKHGkArrXFAh[lI(mh+[T9$48Y49B2$mecQ0b19XFcQmld@Kd
+C#,TrVI@,2@1Xq$lfka2"a2"a2l,ZlXl2UF6`D$JfGR`IDpVJjlJrLr&`F6hQ`rC
+hP,`FG5m(Jjkla11S,[UE[UE[+@GhGj6qIprDZmTLFTP1Tj'8a-6[)R"kRJikGa-
+3(iYhP,ZJNZ,p@0b-a2RNU05H,0aTp2VbP46N81ee%K,Q%q("p#&PSE%e-8pb5DP
+mj)1l@Ppmmm$1rY%fLhePrf%I-SH*%qAk4Mi*r'TI+,m98hILXfVmA0(H#L3`Cb3
+VkIdrT'GK(`X%e8V924*U,f6#YZ)R6`QSQUNql(QChYUHFmkhb-edPlmIXiRmIl!
+$mMrF[bLpEbTINIhqLAp(cbjIP*c)r4IAml@9p,rXRD(r4,[BBE#BB&k[QYP9J2K
+U[#Dc@DcArD![ElLVjZR`0P`,,!rkpVfZU"(aXYRqL`&$Jm"2J0UUZVUk$JCI,q0
+Pp,mZ'Um0LV2,p2Ck@JkIJDAJD@JXl1JXk#cp62k$!i(aY,l&Pe9PJDHbq2e1Nd(
+QqRdRhGaS1NfphS0CV099i6BfGP35l1biq+$'bq@JX['S1"ReJ(V0Mlq'aAM@AM@
+AMB(pRGI6Tlr2dFr2i'ITk5923lL,-FUAIm2HcqaLf('X-&3jZMjVT-4SIcBVl%a
+M-9c'6jQec1GhQK`I$e1QrTUDQHhXh26h*[dUHRT%LBQ,p[C8h25,'4RT%Ur658*
+8kGi[%3Q-[!S9T'IHNFSE2ePTdii**ia$[D3QEdpQ"bi3PRPFP&$I1`k0#Z%eaqH
+R*-2"!V3@A4e3#D!`pma)dh9k[UXAAI@bQTKpE"qqRM,6jU)B$Iq,#UhjmJqrdm+
+)#-$[r-K6ErpX+6IhJ+Gd"&Fd%AF*rIqp15YrD`3%UN"!%Leaij!!f8Cd2*hIj'%
+lG8B%G(#GZ06$Q!8QcbN5GrfN+5Zf%+J"*h44i9BZB4'$c$`Yea54[pP4)J9A"bF
+*heI[`U[9m!G$a!ErC8%MfI2K)pQKK1rYr,#SqZHR@P+[+kE`*rJq%k$Nlh(hd"'
+`Kk%(!C&VMR'Fk!PTLB9&ANi6PS6-ErKdG4[qZ)i4-h4NB+6Iq6#RhreFGJL$P$[
+r'`P6[keC'6'rp,46frhj"6rl%B$Ia,DX"4"LS8XfP68IRdm+84*3F8QrmE&)18f
+rpV#B8"+EIqPL+EImIR+!A)[XqZ5FrH"'9K1rMN`Lq$e54NRjfZLCQ9[k[,cGGZ-
+UNcNf5SMErhSXlc["d-VIa1G3SMEh-`[qrh&*&5ELZLFl+!5GVZQbmVRFGPlpcZ%
+K-ehJ`QUl33NA94D!jd0rVZ$58PG`D@rehfiArRH$c%hADb%lAH(JX(AE`J*fN!#
+Gm(X!%cC@)kDQih'!FY5l,CRZSf@cderr2`!(2fm"'Qj*Ec3%3%2@NJ)JBP!P*`2
+*KJZ6H)#-#10H3Q16k+!M!MMHL6)DF0#9R*dk!M!MM)#DH%hd9LYB5Qj*,"!4!3,
++ENmBUBZiBBC'8X08`&G4!4!a+8*[)pa#Ehi%)#)#H$X#C!X9)#)#+@(I'D#%"&#
+2"3%Z!d*%&5%S,%"&#!X53%Vmp8YA'bfFj(eAR`MrclL%aEk'%ajjk&FMld*&MQ)
+5-piN*QReF*RYqH1D*IfUK0!j0"K0DVpF*S0*XfF*[ckNbQ)X*`&*cIIq3R!BR3i
+R3FR3mR3J+aX*14pq%N**)+5Imiq%m%&q"#r"T+&b8%%S%*rcdkKNa%r&p+%aaH"
+#4r2YNrcE#Dfhc3Qm$p`Fp$#Eq6pN*c2H'9iZeK1c'rK1rQR8dI)Alb2m3[q(rF[
+A*jBH3Ke%)H%I914AJ*%32)REml#,`IGK'TqZ!6Vbj9XYR062fbM-Y9i6P`KN$-+
+)c`YNqjijRHN,Qrdr9K#i&$8G6#'Zl#%0KMi3fKrHrEIJK$lArm)GVVi3lJZJq&8
+`KZcQ2mEci3r*B3Kqcqm)F6p-)HVqU%2Bq1%2iLjl)SHj[S3piqj2hpA#(`RU)r`
+HbRiJJrhH3Kmr9RAq!5P)B8jk5-,bB4-2ei#I`24RcF)PYX5*(53LI6rrK%)+40H
+IMGfAXN@1IK%lllN)RNrr3LHCENf*l*Th63LNbmDMhd1UZSA@EZSK*+6$8(V#kS[
+ABHkL`k!"+X"1CZSYeT!!#1S1%2UMfr[NFZVL(5QJE@!a'ZUX"1EKV`%f!-C-"-T
+$TVU2$kYe-!4-3kfkQ,V6!4PVU3JBi'-9G5,V%U+5!8N3eS#GH!R6!*PVUCKRJNX
+!%Xa!ci%GLTi``FP%Lk3ik-(0%V*-3d)BD-#0B!QY!65Y(Re`Be`%DN#2V+Q63Q6
+81`!c6J4TJ%e3#"4$UEUE3d8`4)5"#33)'3Y`%5#'J(M4J*SEUCZY%!R8h8eGCUk
+QTIdG[NCI+rRfTp[rG`LHI85jG2emZ@#Pp[Yl,[XMlX)&MG+K)ZphkfDiZqhb&#e
+i%VrS'E,CRaMRk6(YQ`'60DfP-4R#[afrM6Ej8)qIcQ@6#*L,9J4MmlQ-lS#chPm
+aRXkDj-20a'Jc"rfD(lM%dCVFK-8Kfd8rUHCPbkT04d$1Dk4!bJrJJCSIc)'Fb[[
+1qa-)'G*2S'BVQ%$0am+"R-fU"RU,C9cZm!b*KX@JCJq'JChRX)'DEqJ'4HFlT!b
+``5"RcTRpal$M!C'LjP!bBj8+#UM6DT(Bcd+5UM6TT6`rE0G4TrUpCV1SeRBZ!PV
+!@d$J!!!!J'GiGfKhH(KiGAGhCfGhH(GQL)Q*QCQDQQD)L*L*QBPhGRLCQ*UUUkQ
+)L)LSQ+QCU@GiQCQUUDQCGjLBQ)QBL)HAL)UBLDUUQBHTQUUCZUUCKjQUUDUDUDQ
+)QDQBUTLTPiHBUDLUUTUTU*UTQ+UTTjHAUDUCUTQTPiLSU)H*PiGe)!!"*%9@GhL
+BLCUUc3S!!!#p!!!!!!!!!!!!!!!!!!!+3$-c99C@CQGhGRGhH(H)GiKiH)L)L)L
+CQCQCQ*QBLUUTU*QCUEUTUCQUQDQVUUQUZUbVUk[+blZmZVZXV+ZlV-U*%R)N6(9
+ALa-G'm8"PC%ZYP)Jk$@pPeAAp6eA8jrrl5r%Pb[KGRQ*d&(3p$m6ir*cFrrm$"l
+"PeXTlTJ#dhhFEdIU!)RmG(hi"qf3!'!8cNlMTkILiqJSD,)8H4T-P5`8e289-DU
+MeGC@ef6Vl#4*bQ9bh*CINq8jAPZAjMiA-r$P5maQFeQqDcQGj[R1Gch2@0PCc,6
+2mrd(3k$S[LI&q0mIrlj(4k(4D25DA6I*dr5DMjA5p0drbqSQfYYUHTkVUqXqCmh
+jh@r2klVq`YlMXG9f@Vl2@DhY1eef[f'aZHfZYP%fHdqKfqefhFI4qPp2kRFpeYl
+[k[GpjpEkrf1pllrrl2f[Ypri'i[2"m,lRhI[H(prm(LIKr&i[ir'h1kmIb2bH6j
+@lr,qEbpjqIc20[GlIHG[[dHIqRIrUrAqcp[SIZrIk2m1"kAmIjHRkR"rRr6q[Ur
+f[r@`2A`IlqarMr2XqerVrIYqjrchIH`Z&`rqm6rh&if(arIq$%j',M3XLmrk!Vr
+S#[qJ+rk!VB#dY"b)mjq[F8%%5HS+@42cPR1pY4BkNLj,jRJiPcJEb(%aI-pc#Kp
+hhSIP`iX--1($J8G"ZHMSE6AEL*%N6QRqjCF+*&rY%pqqKkD0UjhBcq3rl3rVXIS
+jrRZSKZFDQidlR1qrcbGlj2fFEZ[`D2re&r(U-(FqMTiF$b[[B[Ur8kRhk(dIGi8
+2h[Jk(l9Ai'lrRmr-IBK`29ZGh'mf('phqH,ihd19[Zrq6B@[j2ei%10k[E3pIm+
+jr0Bj5,fq[l$SFlrrLp[k[*q[)LH4mre-Eb[Vm+*%SIem2eC8QKlAl-rqRV[*rTK
+8-5FkAV16i[j2+,$-Pm2ZIkGYNV$qHflh&qpq(Nm'4)f(ACM@p,mEjJ'q*arGr,3
+qrl[c2SI5rVLDVeUDGj5hLGYlrcrKq[%L8q&e[irCUX,Jr$qTHS0jL*m2aIZl[p[
+cGGMYa%m#jjl@CMb,Rm(BqlMF(eHriHhJjlVZPf2AF[`XR%RZ,K@h592XFMk@0JI
+br,rE$fN6Z2FqGkZ*mc!lD*%arMDl4pYAAZpkMjZXq0l(SkhSSPIjAF@AE8BZSPR
+%cI+6RqrrC(3fP,PXPMpTfdi4@RZmrT%R+$(iPlI`kH%P(IiIP``qjqE6i80l$$L
+qYiN2`HreRiI!pcfr%r$iRLH*q(fr%r([2%mEfr%mY!ha2`iN2YrMeI`B`+XD('[
+IJa-,#[F$mH&KHEm(iIIZF+'rdkS#i-2&dm0cKkEjG48k@*TY08c00TY0d'Q,kZL
+QG"2e'Pd@Qd22kA4G"SCqTkAjhhqfLFYiR,IIjEa)R,H$iNLJ#[kHQa[Gdq&Im@N
+p26DEiX)05DerLhr6l!)[`rG58m[a2Jr$$jX-1*LBA`IRSC-EUr8"0QI-kre28p6
+#q&efmp6e2Gki#0V""DFl939AU3!0kkeUS)X6l(+r2kcAEcHHE[0j[2-kkfmcVHY
+p6c1Yk[XIdrTqIkRAEchYrX2RqKeIUIZk[Ur8lciAADRHGAqRXIQrhYZYmS#'3hJ
+3[Hple3EApq94hi$riERq(@lcb20c1mk(h[0hR[HEjYq"V!mc&[m5pplh0jlf*QF
+,SrMHcLArj!fqlLiZ"-VHdml+F[qRaqAjRQIhmcP-Tb[TH2k('aJMIpl$iISli"(
+SHKqlQ144j+Emrb0jbqqrEq[+FaQ-abrfFTD@hlkrPr3pVPmTbr-qpj[YHEr[dH`
+q[aXEe2hHMc(rH4k()mI2FMr[SFMd[lFMr[PH2rhrRr2lrRmF*(j[(r2irMrQr[q
+rdHAe2Gr[`XYf(k1Akr,qMP2frZq&bIk0jlQmjf[j2@DcdZ0kQ0rENIZp(,HKlhA
+pAmcUqVkZfbR`qAbR-HKhheZqpr[Z9ePcf0a"H+'9,)h&[YqES+1LL8@phY,GELF
+d&"3h&0)L9AqDULqV46dpEl+LUXG8l@JV+!$@2Z+Z44EQlrIZ,UG,dY"Z*246mI(
+6Nr%e85iMiq$PILr3,h2Kd-59SIScY4SG&fe,4H*@8p6""Z(!p4meX2aGViP,i1L
+dAdEVQ0Ik&eRZe[,c0H&H8RGr3Vq8MmPDC6+C61jh1de"b96(lc2eqJkI5qhrrl9
+TXXe,PmjbPC(TmY,TIpjhj1@Mk6k[Gk,iRe[ZD2[1mlcQqqlliRa-rXpRGEI6FP8
+91UdGIRFeQ0Vp(5C[iQPcp9*j6k2jBmHRrrPq&CrHqYd2GrGY1alZCD@QUllT1Id
+qJd(+X(1NdQLfqQjAT%1Sh*CR0C6Ckha0*QqLk5dl2k'dk#28drBc0Rd8Va0ThHP
+cRhHINr&qV-q*DGTRZNjr4EVGGphheXh,cHEcGA4G"hPe-d@EZlE4CEiQGcRdIZj
+V5E6DF$NZNk,S,V4Cc,DLTj59pm(h1rGY+L0hP4hIa1NjqYVD[[ZqJZqJq*-QD,1
+pVP("YdA48'djq`dA0p"hZRSYYd(*@PjQT23pjAk$5CU0'UYCV1ec@Dc9G[GTe02
+8D+2bPAKr+UGY-cG43CQCSTQ9e'KffDj,iPePHmj1AR0*QBdDReK3Kpc`[#m,F!Z
+VEVCr4rAR00HG*6k,RkMk1IPk+$5d'cY0*VDEQp&,cIKD[-bE@ehHXeQVeD'(Vf0
+286+R1e(GpV8lDdcHNQ900QDQ$+k$5rFh[M-'(E5V1keHCqMbh,G,V0CVF[i2Jq$
+(ND(D9P29AQ9cpaT-d`ED6T,M[1ENk,9IIbqhRkMNXrVFrGp*XiqLMl1GZ)ph2p"
+iHNc[Jq$pd1&TDE+ESiM"jP1IU'MZddQEMch+bG&prlZbqE13!(bYTb@Il,-Jqqj
+TSm(+`ILfPjd(,E2Cl6fr%qlQmhGhepI@P,Ck526hPeUGTR-rQ19qMcqQXFlcrhj
+lPDLmdHde&&-UI[mhTFj9jMEDEPXh-k5$l&h(lci[LG"bhb2%m6-pj961bUUI1cd
+r,Z[,MdfEdHUc2+E6S0*QZJh'Brh"p([G[iAJe(,9GTXV$0r&MkVY+UUdR8F2Km2
+rb'HjJpZib[LD,KA&CVGlm&pFqMm@HS)Qic&2Mi2[`Fl2BkIUU#QSYapDHUXM5lM
+lmbQN5kQUR,VP,LT[)2V6NIr&9%NembhVp&)qM"9D'$`jG[3eFZlM3Gj6d'Llbml
+EDeP09dXjGfX%j4lH'TKKUSq3!,+RklF9eeZ0a8CD9[GaSH8c[kYR9lLVamfSX2A
+Miqjhm0KLGc[Z&R[TrkcfYVmRP+E(if2Ki94crGbXlSFYZBpcrLjfH0CH[f0Maq2
+VpI`q2`Ukii@HX0lVE,$K`mD`iRYEAZZ2VBFT*hZpMcDEF@0H$c+iePl'0C8(XFL
+Zer#i@0$JBN0cJqakqHQEhDFa"b[Vk'E0Mapl+Q9fLhfPf8HdfN'9UFafmII8FfS
+jr4r`jr3jA1fqhpMEH[0bdVCe'plHeqM[C8U2qQ6p1Cc@AQ60P[ZIYUIYiqilHEf
+mhYjHcMJ$PbpY*fRakHEZ,UMbXfmMk'EbJ@TPe-MqR$XVkE8EE4l5lJSHIfe$JaY
+&YqIQmr4l,+"3QC6+9'8#IXZIqV64*@bQa0PY0T-#4-fNQ6Gl,-I(f9j-kRF60[b
+QKQf(0eGT(VS0PYmlYU2qAJe@pJMp6qU#iJk,l8RRj)E0PPV5MjrC@QdfpeY0Y+L
+61Lk,CD'dQ@R#f8(2k'MkRZ-aG@N(dC1hj6ECDCP+ZE*j6l[43C5QfhJlIE5FY6F
+rP0$Z!ImqKpZ)0Y%k+CPUB!B3qh#(cp$"Y,[Ej6DI%bPKalRK`mH('[VLeqRA81f
+QCDke-%RlQfJNj5QJQ6*1hNdf@#6Y18'CY[AVFeJr8SmpQ[)Tp4k(S4rjrZqTrl,
+D'lh@ihYT%fe$-TUD6SG$d!A2RjVjR!m,SEVFbYp4meqQErDqlH2DlIXBP0"dPaY
+2!fpL(15F'0pP-MpA4ma3hA(Y+H`aV(PHmfP0*r4P0rjd2VbCNbbNq[Af'pjM4E6
+SV!1XVireG*6I(rE8r*dIMjEl[1D2PZ@qCpApRF6I1m%1RVerVeiGIL"ej6emlmI
+[Xae2kqhr9m6,I9q4qQejh+!)k,bBP66EEUFTi%NG9T-BGi+Lfq2BF+klhRkk#$r
+-RemVPTRR5Z9Q@JkCXE0D,,E6E8mhCG&Ypl4r(lbRbRarT4p,P2"jrl[1)kfRFH$
+%ZV$K6Bdf0MlkK$[SJlbSl$YYYYXZ8m(ZIdfh1CE4G"8I%cD1h2j6+60Yp'dY,VD
+C6+rkerH8h+e(dq@aq0D5ZBY*2Vk1dfI#h&Td@@XEEk[35EVSY[crF4mTVqiZjAd
+qTkRDG#5cZlV`)BIAjq`ZZ1!-!G0bZbk,,!$f8&TZ0ap@9Z0TXZiTXYd9h"`mIJE
+$rYTPX[d9VfmIiZMLC56Y-TD4reh9SJ4hQ8j@kfhaGEDD(P0TP1KfQiY,4'[3lMD
+"VlL$1lERqI$9(4Vjq*XXTbX4KEm%,AVX,FQCDCE,2CAf@[ai9T0Tpc+E23fA)q+
+9)mTY)IfFlYpPDGip&HQbc5ZLY!L[G5C-%b*"-fQbDXC-cDFq`VD2kU+dQkJQe&T
+YZ9U,VF61KMqGqUdfFhepYmARi*04d@d,2E52hNbKfmQkQlfMqcbR9qGhfAfA*IU
+q*m6EI&kR5rblZlc(aiQdY!`6!al+6Y0TpRQ[RrdmM8d0(+hf4qlTHIlh`ISmTi@
+8LI1qE+fdccUDqU0R,Mh9pSrNFVqMqI2b[dal@kPhIamVp(8rFr9GG&XpR[GP+QA
+8Z2XTR56*ZpMrEj6`qIqVbr3r`qMp([IfG&bR8rjTrLAQ9k+*Y1IPG$+cmV2h@dM
+c!"l5$DC6E33E6lI1GPr[q2K`9'Lk#0qRUHLr"plrrj[K@d6XEL6Yp(al$'ceIFi
+eMaiGr[GIBBr1X32amhqR1i1&kpP`[Pr[d2(fNVi,MDGEMpVYS0IRVRNBrN@'$`Z
+(KlrIHeh@(k[XIhpIMhh$i2GH[kq[cf[ar(qI[kh1pM@p$r$YqhQlVp8V8ff4lIH
+rjX1E-3)!`"iAVjf``FB!G"BH[apEMpEMpEVDkhi9KJkdJMeIl[rrApMZFll2kG6
+eFHelHkLEVFi-hipe(JQbYY"+Nl+MJZYY64pl-qrXY$YV5#QY0"EjkZl6+9dfkhY
+[IH[kr#aqeZ[AhZ3UXVc21G&TT[cYAh2IIGmVpAlI5rP`I9`2mrlplhkVNmlcr4I
+(dI8I1l2CE6kIHIDm2m(LrMr0[Idr[p1rrarcLmM(j#YbqBXILr*e2BDlDr@qhpl
+mRQI[rYrVL3j#SX1@cRa1NkUheYcYITr8frf2YH$q$aYhj[kIem$qIUrkiA'aULZ
+bR-C[RXrmETHSe29aIR6rcSZXLkbIZITIBm,aYj[q$l'&LBqRVFVbqCq4mVUqaf2
+dHjrrqlZGjqRq0r`X2'SkHXj,i@CjZbk$S[Mk,6G0e2cVIXpIX[SI8qYp[l[Lq6j
+[kredH4SmK4`8dpMk()38q2b14SkE)j!!U+-pLh)812b&$ND'Saq2b%%pND'MU8%
+kA)3`dHVXHFb1pb1Bhh0FjcA1Fe4mcN1Ab(iS0R"qLUlkJj2Cd19r"cA0FR"YUIE
+mj6e@GXHKXHFUV#`j2R+V(eY91mR%UZFj2NqFhf4a1DKb2D8H(dqqarhqZk#MeF(
+SllR-MfR1E$)F[c@qhe2`Gp[U2QDV1eA*e99bG$PD(+J&UJ$93"DHab(,mQ"#EBG
+pq#KbZ4c&$R+(lYKbG4rp%j1Rhhi+AI3EEQXMfQ4l4!6(rIarhd")Gp3Fj3jAR+$
+I8HVUG&5mRc38F[3jG!5HUZ6b(,d!63$M#!*q!,Y"6814ap2680$NFK639063ir)
+de08cf4JS-L3,b&$6906%SDE)d02%SFMN35c`&XMNFK6dd5RTTeJ'TDI)d-6)a+D
+MjhQ*crhk2j!!!kRNZ6cF6*9e(b9"26Xj1j!!McNl1d-5NSm[3BkGR*aJ2S)P*1i
+r,d%pMTd$ml1a*fI34b9-`*FQ$@*56Khb%"*b*1cY&MmG%RBQ1ai"iNqJ)!5MSTc
+)9'9T*r06R34!XBqZc-6iX5FjHj1rk!@FS8#Ck*%rIN*h(4+'IL!,STk*b8r%adj
+%SVF%%5*3-!dH*%P4)Y@["[NMQQc86(Gi&e*+#GLBqGL6RQRK3U0Gb+QGe9RN1fA
+Z(6Nl)lDcLdF'1RmImca-5jkMeX3flSENjQIqqlaIJ`XABiN2&a)IHqI%d@Im[SI
+mB[4EE(8ZilEa-29mpU)N6kqjR[!f(JA[aZkpVm2hVRkRlV'CX19[GCEH+Fl9ckI
+&dq,MY0lrZHpK`qllm1,i(Dm6SkAGqRf()Kq(Fpe$KmAAA0c$UlRmrrINDU(!qhF
+rf`q`XH4Sq$TVhLFMc&cAqRlZ,$LqRm(rIprQ`X5jqh$X2XqMBe@kp1jr2Kr$eKl
+'RMG4L3qjq(L`qlMDc&rlf(j14m[Mqhi&rVYfFr%1Rm2PFALqR$$l[QbSQLhH`ZI
+B`qq`1er(rpKiY&16[f1,LH*l@`kU(fT%6Z2erjKXH0FIAk1jpkbbrCihZF(&KrC
+feR1@'0mk(!kIBrcL6hYd[$X24aHpkVc1Sa[@p$r2fq$b@*!!r3LGYM[VI"mlcHS
+dec`j(ECHFpqjp(&rrj+pXSIkr[phBF(#`iIV8'darf2J#&TVRhmaECHFq#(dFAM
+jD'[f(pZ&dpljChT2qpGZHVkHcrrqaKkE!a[Ml,Z-hVlhf-E'rccf&lZ(ap2m2NA
+YcHihjY,kQ0$eh`m6a,hMI9Kjrk0ce(&KZHapA!a2'j(M3qrjX0cLpMb[LiZ0JG4
+Kp2Frlj2'lLS)dqhmMDjlaX6@Ihdm2`HTF`mM[SRkEr'K[F6mGlb*cNFrfecFifV
+j2(mjFmEaBI'KeILhX2(TSNlVX8NrmUjidlr2Z)Q0$VrEq24rq`2pmhb0MlhTEc@
+B(#YU'Fl@mq*f(YmelChr+2HrbLFTm(Aa+6m2)ar-R6HUFTar0SrLFTN5PqCkITr
+1+G[5Te,(')qB%2B3qk!M#df`Kid1XaX2[rY`qlXIRIqKmaG'q,TYATY0djd!DX"
++SMdh&dqQdfR[lr6BR[p4kH,TqR4(`1SeI6kDrp2j-2&[mAJqR`GCVMSXKm5('m5
+(#a[Er$[FTYVVi[LE,lp&fdMk*i5I[q$iP"fffqMp(P[%S2SlEP++*P2`pGTUR3c
+m5FddrTV1IdZQjqFUSBIJm5'rqrlq*jYjkZ0$l[8)bAX1*Hlca['2%TKB[NL-%0T
+VNm0m-2$Kq6fh!V2%rCdIl2fIRqjrlNILqi!2NIL3!"2`rRr%JMq,m9j8`Hj8k+T
+rC8`9-!$G&4426ph`IZp"mEifmhR1rN1LVpRl2`rXq0q(pRjr`q*m[q[,H$qcmA)
+q0q6r`G)HM!,bA6H$P2%rCc(LH*qce[fIXhRiq@dILrpm(lQmm6a2aEKH"bpKj"i
+8r3p$d2dFrmF!f3Sk,HE`9'*LAZ*LFJ#hlIdHKmFme1miQ*LI"qIpS(-AjrSISJm
+QfbQ8mcPmTirr3KC6+Fabr`[kq*iR,HplhZhprr)#ApJ%Aml48AUh[NHjm,aqTbQ
+9bQ8mVamTi1"BF[Im8m#A`iHGXZPaIkrem6pRp[@rqpfrpAhI@rPIr[rGkhPq2m2
+!l$Pr9jIh1AjIV3$m[f'9`1[m[VrJjRd[0rli[-qVrEQ15jI%jhRI)PrpdfQkEP[
+hrL[rr[r[GrMQFcQHEc)FDH('q$a2'r(lhimTXXTEArUGAe@QmRLmP"%qTSCA*8'
+KS2iD'#JJd-j5b-e&QpR%iG6GbZhPGe%h[eD'RR+i$1pJRCf9mR(cG[XkH098023
+cY"CpM3dm@26Z"bA(TTl3pR33C6E990Rk'QN50[)lDhZ*'LZj9hffdR+@EE3A8MS
++$(cEZQj5kQC@9GjH,3D'E3cf2TTqVTk'235YV"3I`YVLlNeXbSd0RYpG3`C6[DL
+0QD6lh8H6YXA4G*aBrrVr!b2brbF5VMh@MPhr$rTNlLRlhJHGFAI`qHUkDKmV[2+
+c2(rRf[3Cl54XaeZReAKk$Y,V+r$i(3HASkQMqGDFPGh9hR+cGHPhf8rRh&K'l6Z
++M-jVi9a-UD[k[3e0998fHNFjrlFIAlc8mT88fXqaAj5Te[CI2l,a0jqHA*dZCbR
+9pPph[1Il50PqUlM[GTc@SeQCbQMlE0phTkZUTYC@IPe2*pMeIIGl,dfJqaGCMPX
+V9eGE(Me@Xc2536,M+I(rKiQIkR(r0jV+AFZfjrXYPm+kq*UY6U[Nfh,mT6922jR
++I0hI!qPf@@B9ZqVR#YR[Ml6Zq8dpAcp0f9IRG6R1IbRHKCkRY,M5C64bEZVlMXY
+IP!X6-TS1(8p0R,2XqldH@j@RMCA33FN&RV-cUZbq6EC6Q-rh96QXVEDINp&XNA1
+5MpTFC[l(CCM,pMfhGkAcYTUUIPGRTk[2dhGeremVf9T6Gjh'fUINk$l&6cA*CHU
+UBp9h(C8h0Gm'$,p"F6peRGCCpTcA@DV0j5ddA9jUiTUZSfR0DV1CcS1VbQ@cpe*
+dPTcA*G$"frCG6fNEQ-ikBG8M$,c(HjZilbAb[+FRECbC*jA1kfkkSB%[,e8HUf[
+2emR8E"KIUYY6lA9BrZp0V-cSmV*k[,A"h)Ypcr-CV,Iar4RDfeTZDj+ZjU$Yp9U
+G"8jcRi26k'*h(Cr(Y0TPlZCF5Br+FReH@Q5H6c[a19JdQJQFa'k6KhIC6-Th'XX
+*GV-[ZLZpR2GMTqbc'MbQBddE035ELAjfqq,q28rScYCmc4meb90SUck'UdQJUG6
+SS)1meA0FP-h'EY16#VDrIqEPQ&AP'&@QQ@[FD#GjrQXjh(C35jIckLZU09(cmkL
+YeHBde6QZbl+RVXjQFe,ihc3TaN8p"8p9""9jc+k,SY$c8bCFD,r@ScA9jD"K0Ji
+GVhGRbfDmVS[X6+ICa[+VUM2apm%[+I*#AGCUic[arXFaq[k(9SNqI"pr6j[0A(b
+Fh""8hG`8k6[mEkCVBrqY2QHVbf6YHafReEZT*#c,@l[DLacH9qa,#IP[mD@AXql
+RG,f8RUp*b@LdQJd%[Qp&k[flAqXEXq$EH9phk@LVrVI'kAk(T`G&FIVj1eVUcS+
+$k(mq(9AHcqYUZDqG68hHIr`G,cqeqjNp4PjhI5EE8Cq$1bqScAeD[-EAZVI5I3U
+CG969ZUlDE)kcUZKYY&YUQ$rHPj,+p&9FrRD[V0&"6k(YZVJd9VSVM-r(eAGl$2b
+G*mbiY1ll1iZXVRpR"heV99'BkZUY$fmmcpAY18fpT39'Ij506rU,Y&9@C69GYSC
+(*k6lh*4l[4E,9merR+p&(l63CVQlAkqVJJq&34E@TUDQUTmeqM1GRRlE5E@Sj21
+pC(TJ23Gp0cr9k+dJj6rl+r9q*mhV*k4GFrQ,UecdH0PB,Lfj21dd(bBZAJUlH0P
+16dHAj+2FD,pH@dIAk20A@elc9D#erhSS-'0Dl0k,QDjr8meb@GeZDbfGkcZ,V+k
+#eUHqkDHP`Fe"PGTSmje2eYC0Y2Sm#kjrQVV4I'YEDA9EA4mRRFR")kINUZGUIij
+DTbPYSYT'fZUjVUrCDZHKVrV39m(9dlKHU1Gjr-CR4k6Z1lcqClIY1pTXed-'SqY
+QCk6p@EpLfl2SYCd-pbP0(TmrmfTdh8aSf9j2[Y(bI+h99F50Y6G",cqhMh@CZY6
+kIF5rZqTpl+plpM2qAJm#$GF#TNb00(ULpEl(,Ccar)dh*Crm1Gd[D4XVjIFA(aG
+lGDhdmIUqTdId[achcEDUjhV+QATX[PrM9[A36*F&A6ai18b%&hdH,"hA8F!*0rX
+XP(i(e)-VLe25B[mkQISFjp$S19rKdQPPm@$GAFl%Y+HJar2`IAam5PlE@5k[k&$
+15j[eEUC3hFHAmbIJd8[3a+bQS,@iS+6k&63cPC'L5THLNI5UCPaMXl&ZkR(k+#A
+STXl"(JPBkVR*1LUS*Y,G8d%50@36*c)lH'VKKVFRp1UlM,EIHd0$PXYe1BU2[bU
+M5cDQSPC59[FThZAbP*AEhSXPb-PBBeK$YBHjVXPkpcVpE[E(rfrhZHjk6kpKM3q
+[AlEp'Uh[48RVlf(2Cr'KfZ0qLaX-PXq&aq2XFpRE$el,emPMF@($hd10NUq`b4l
+%h2l+hh[*r(X2AfmHE[E$'r4CFHji81$$[X(K!fip*[GEkpIVIem,%`F2IB@eaYp
+kqilA,FPdAqMhaSQpPEfmbQbqK-j5dcr+@Y[0QEE,I#k,)G&EeeT+ch#fIVlfEjd
+5kbdf9(PEfCNCHdU0YcqQ$"PSmUE[HhMajYVGG[+QhfbQp[qUQZU[p8fS[,6CHIi
+0&G82+@QhSH&-feYXpld(I(Z-h4imBmfSf@3bP4YU,,IHU18h&&(Q(HZf8bCSCA+
+G[8FTbdc3lh3e'pY2d!TVSD+5%(Hhh4D,DA9*D62dC5kQE)(fdSXTPQMVRq8QE,M
+fQ8Qeh2p&P2Mj5DH@@`fJ1DDEP+(P1ISGaPE6Rl[DFr-bq@b`1CQiU+&$U23jESU
+'QQ8h4G&-f9*DC6,@eYXYP68eVPU,E5D6[@$(cZLc4XSE+QY,UQSYTP1IB-+EE5E
+6D60P8D(E60PP1IMp[85mP$XmD`i9c$[SH40Qee2Xk6,fdIEr4mlE@fdk,,EhSXr
++r40ZXa+TT0e(jq2+qI59Z5ha#2QY6(k[Yj[9IDeRXpaRqEkRRpYPjGYqME5SqdU
+0$G81cP4pl0RVI1mhhXVHk[[D5N1pPRT@pPF,1jDkjqSbQdZYaYqbq2GjD6D60[$
+al[Cj$DH[$[G[PYRYl56hQbbQ@2M3l(,l,-r9fA2kAlAq1qq*Grrp6h&&P2SlERr
+fE6TTZjSXY*&lY)mfKf8f2mI,d1d[TAHdNpYZIk(lqLlRUE6EFrSUMS1Id0eYSp4
+$Y,$ekM+"UZZpk+mZF(Bp$XFVGkh35Y[PSG[Rq&JfA#qjXT0PY*2(pIDFrE5FTXX
+c6E,RpTh[k1qq*h&C-SDE,I6fh4E6DEEF8al`YcJf@aj((XVlRimf63l+hjr+(UU
+c-5KfRErId8bNkQ5HSMkGhP[L8h2lHkU,VD9'@$MXY$-bR2bI1k6RqljqVYp[P[i
+@NRMrS2NCSGT-Y#6Zbk$El5lq*488a`cEfQQ61I68$$-SGPY,3qVHLSU(lqLY1IQ
+61LbP3kACK4cY,$Eif8fR*HGd@ffp$$kqpjrClM,EIjPK[G$XT1bfNQC3l5dY,,-
+G$Y*K5EIEEEE5Ri9cb12N[AX0lFl6NQ8Bmr4FTZ#P*'2CrpiR$prMlCTNSDLCcpe
+0U*Rk[1k+6cr2hAa0TYXTZ2AZ[Md1Gfr460$Y$iU1LQ@P&XYTPT2G5FTD9&Y-LAA
+a%6qL42TXl3l3mi*#kkZY$PUE,C6CED68E+bi8RP1LZU(Z-TZ,UKk+lr9-d1fk,F
+E*K$fff4%,X9e3c0PbP0d9eP0lYQN*K"bR2Y)0#I0R3k(P*YeSGPG882#Y0a-SZL
+m#(CGc+QD%q%q9,f4#VHjENYYrr*SFT0#Kcra,SJ&GFTQ2e6-TYU'KfPj+lc,dqP
+j6lRF)UfQdbR4I9bhF5D,,C4KBfr46EcCD+kZYY[GT-TT1fQ60X2rF6IMD'VfPep
+-qp(iS9kE,EMCCD9XUERrebCFQVYCPe(j52Dl52[EkkUrTq&,lcUmc88A8RbKl,C
+EIRpPYX[m6k[8ppPFKACBM%3Vh%ISZ!I4$EllEF,E4mTB8hDbE56+hYYAEhRlU2D
+lfEp2mXUEbh4G$pE+rUq,GILY+ERlZdYFTY1"*Pj@6qV2r6McC@pe2Efmbk[YP55
+Sme@ahaJBmkZNmYpENY(pca00@C6-CLA9eK1#66(drC6,pai2c2rmT+j%2(i9KB3
+i2#ipcal,'i@HeTJ)Qe@eq4AChTV#jpHbaU(epYh90kqHX2iB2Vp[m[29mRF@'q`
+BH3I$ECFIBf@I"[RFPXprMDr3EipH[(m$NpRapl`YEB`qKEjhUklSTGemHdcp*Xl
+cI6GlqqZh[rC@pp(DieKVl)am3lA!ZIAX6@Ub@0BFLa2LNKh[(VpEkqHiAVlh*@1
+HTplk(9eIdpp,lhrF5qh[Vi2HbYpICh1dQppHY[Ycmq[h[`j-FVhNl64e'i[+RRV
+6+D(+DhE5plAaq&[GPA8NUNVV(K8P[BlfNbI,jc3DMjZXfReEcb0lqrf12b+D2Aj
+6NmeDD(TH`fIGpphrhI*hhTIhrcl[&aFK58p4*jI-f24D2TZVZ1efQflRZr"r"ZI
+0p$eIEq#KUX[RCRaqRqEXG[hrLlcpRUIiiP9bQGd(4r*qAUHTkbhe[FAIfIZIMmI
+HISr9r2qrYmA'b02Nq5c(2G$mMT2RpMfQ`RpR1l1IlZIlZGqeiRjYq$H0b@DcqMk
+AUq`eZfrrqrjAk25pIfH08CA-@R4pCEpVXrUIAm$aI*mcp2lr8rVJqel['TUhNZC
+cIaG,m[jRBl(kAdXP6ce0NXM5(`'C'Sb'4UDUQTkDRTU+LS+E*8e03df5UBP-I"(
+(TUE*80"N+I)j#LSXMN-K44ci*D8q$QKR+E)8Y0NUZJb'4b&,NBBD6L8q`TZKZFP
+kQlT+ES3"dP*hq4kX,QLk2h+$QDIq&&KrXT+6QDQLUZeTZKUZMci,0+KKdG$Hd0l
+c)#0VdGRc-6SkESHC!EZpr5Bh,j,ZUDhhG$+fG0T+6L928EZQk(PkESG5&,GlZUr
+IZph5GrdHIk2QHMk2QD,$SX-![4J'k-!Y96l$)pAc+#f4SEhh2f8@(N[8b&*N1l$
+*(kH*c09Zrf8ZlUD+NRZASC9$+3%aJXdh3S#8h3d@(6G$3EZNiPApDPjQN!!KI"4
+I!J*2G(c14kZJ#Q!I)p@J*q`-G"'b&$'M%%-P6j'089GAN!#Kb8D09e13!#"dDVU
+iQ3MC#03C$*%(DU0994qDG8Gc'0%!Dd(d91!HUUXKNU+Lb850M2Aa*cecD6R1DH,
+2Bl(8PI2Bk*MXK1de2+b$f%)P06bk*d))(ikMPd@2Rh!K&R%%DQUD%XRMMiMd%SQ
+1A`b6Nm`#cNj$1(SJ!(MTa"LIb9&&R-G26p)!F#-6(a6d,S$(S,L3!#!d&*%RCA,
+f%bFRFcFc*cU!U6ZSZ8@Tb)!LF!3J1&(Q$d'Kd"hMjaHJ%$B*XXHP1GL4HfCk"kH
+*%jL*&bd5N!$d#IQL418L4)X6*8%6)9U&866"cq(q(N8NAZ)PGXSNjffpahVir1f
+p*A6e((RIQH$[,hVI9K[F#(eBF,$2HB`[k@@,HrrBf,LA0lkYllplrZ(ph%ZH`qc
+Zm6BkcArCaERGpVLqPKGhLh1"ih@rep2X2@plH3pEKBH`plb[Rr6ef"eHam,aZ$m
+[qA[Hj[02HqlIq9r[Nr-rMKI,p(cHIjAVqbrPFq"9pplrYqEk2AIJr*qZGmr+H6f
+RP4,ViZaXX$U2LDl'pE0A8RiR8A2(L89pld2`@9laFAHFMbrNmMrI+3meKm6Am(*
+i&jTpGSq4q(6B@(rc#mhLmJmh&JI&jfZ"HrR2H&[BHQmc!`qk`lNq-5(I`q"bGGb
+IVFEX2rm2m['jE#a-D('aHS",FmAdF$jIYBF-2ZA1,#!Hp`m,`2`r"r[cF,J`qpK
+I"F`hYlY[JpArR'aX$[pR`EeH9ch-D(#r$mVm`+Yi1[%`elq('a[0krm2YE,Mh28
+!`r$$$LBhJHje[NHMLDbjehV3iJ0I'K`[0[GEk-1*aSEhU-2#!K$ed2)p6U0ArRD
+qj$JG4aIXJNl$TEreX'(qr)[I!5)KkL(!klBm-*RQi'lD-m8'IpGKHe9K$$UmEGh
+)*2ihZXr2aXDppcKiYk!rLiR9FDrmBmY9PlZmf&lXBIJphHFEeEqrpheF#(h1+IY
+PKmcRF,hr4l$h-EcI)a0MK3h[qq0qhhI-a[K(`hpKk[ZM*rMe1"aX$MBN1,FhZ&$
+$KrLkH(QrGaER@I+aI0%CaF6V10kd-BQ,a[Gihp09$lRPB@*f!h2GZB3@iR`GIFp
+jrIcEfp[1[`1YK`[kl$GqlqE@lZ('klb1`ihUhX2rhNDceHd`29Kph@3l$r[5I1r
+VLGIFq6e[QmA@Bh"[I@KKkABA[qI-[FEPXVcr,5IPre`0hKA1!dCpKJH*q$VH4Fr
+qZq,m'RZFA!)Mr9Kl$'p2'a2mr[[pGKhZ(kQ"f'-4qbRX6[+il1rC`0hlV4cUr9k
+lpfbSILjER2aH6R2JME$LJjmAbBHZhqkKaZ(V0ejIYHlFiALqEkQ,KBI)PqG1r2k
+V9FlKHVa[02M[lIqRPqlq6qreY0e9ECIrr+qcLj!!X[J'ekRmGCFqGr1pKq9KA2&
+lVrr`-$TERaF6!`Z2Fl5Se(dI8`m$bXA&qcFKdkVeHZp2&a2VmeaDMbE,i+Qjj&b
+I5CjAGDk(k"k62'iZ&J(V0Z2-Ki1&b0GhPGdq3p66qVKmM1A-2l[+rTZrG[G*$KF
+hcZ0rhmN2qY0KP'10V2,aH$MH"$JBQRq@I6jaH$kX1,f%2RqCd(RqYjQ(jZ"Krlh
+Kp+[PIZKklYIkq*LIVrV[26m1(id1-82iZ0Hl#(1%erXFjKi@"LHjiflKq$!KpMe
+[)iRQFEi-Cl(*8PliNV,$,c2),"FAbVhU0MZq(MB['pVj',L3!2)i[CNPBH4V28a
+YCjZ"MIrGhfMSj#jQV*SjaGLV2YMiI8E(1ERU,f(cF,!kU'(IrK4cpAl%1(Ke[Z`
+RVFqcrLpa[8pA13lZ%,%2&kDbKKeR&pp$VMH"UX6YIX&a(N!RKj(DP1rLi[jKMA(
+QPZ'(lplf"AK[-2%)NJZdhX&5-2VIE9jEVX1bhIq`%iapTm10ch6iQ0`FEqaHfr,
+KGKF`l`G%2'qpr6X-Ac98a$iR!+REf(iUqKAcF6`29i1,H`ib[$X(1"MIf!Aa`Fi
+Z*X3`ihh[kGDApe@MiQk!,iX2ZG4kYrfZR[rAqcfX0llZY-4F-2X3iGlKBIqI4ZI
+YHjp+HmM!ph%91akXVR&a[6UERr(TkHkl$'[q`Kq$'pEh25mhlY6k[&iYllQrKX)
+Hd$$m2RH4lA6khbHrKl$!aX9$Ah#"A+IKq6Pr%qlN,RMHjVSF$MBI6GYaBIJ`[Ji
+25id)d4FB(fLe(l(jpMU[[IRV,RU#H)`10LlX$G4T[a`9-Hkm[@k[c,Rh)GKjX6B
+prMB@,KI8XZ[X[Ga1#ASq*i&PLI"l0(qr9rSfZ1`YMLhTA-3ep+''E%qKjd[S0cb
+IUj,ZITHlFqMKr`mhe-$dlhhI"pVrhSHlHr,[rarEaY*eQ,FmMcqqrG,h(EE$eF2
+hX@p2ii&-pMl-5GjESq@mfTp@6k(3I9[BFArIc1TphpN-0pl2YmEU2eIRbY,brlS
+[4r"j(YI,KkImIm[[@eRGaEZ4HI$`Mq'AP91QjEq26kEbIRIY2j*IQ)SHVHp4eh&
+kY&EhGjfF2j!!Y3`[E(84N!#@82QBHmi`#rE@56![H5+JX5jZHjp@(jIaXEX-+('
+Kqhj%2jrXBF1"a2*qIEIY`2mH0e'&M&5rhYCb2-a2mqEq$Jm(@G2khLHEiRZIKm6
+a)K'LQ2XQ3)d-5*-dfPLHhiRi)N5PmX#[H42%reX[,PGY)h(E5-Ti-6YThEH*jIJ
+q*lF6k2L4+,k-6CAffNIFp26A2TJdRiPR2cD9RrIKSmTCqcL40+E+-J#%&4%Q@D,
+mjPSNlpm!B)jh)hrUlcFa$kYr9kfr[r&[lrh)+Ed0rV0Ck'Qdhj`9(h"kD*4rfrE
+q,dEld-R`26mrd0G[r3p$TYIqIIqIVqQkMd1aer6C1mJ`B0IqhcpIqrYI%p[lerk
+@"$a[-eRCqJ$[2HKqVd24mr6'4AdFT*JJJTBQKL(Zab!#dP*188%54E4*Q1YjGY2
+a1fXmG)i&01@Fp%kU$S),bXU1eR,DcYpah@3N8p[edp8cjTqd2!P8p*%P38p2NmG
+'TFhMmM[H&HCZKh(He11NH[%RT&258mMeSPRkX&acY2Z[FRX'elfHNCZLYp$HC[)
+cRq@L1Pi'Bb2Vq[CqY6e'$mM*q[-M4iQEaq2Rk)q)LkV345SPT2S4cY*fdfeTqCJ
+Q9%(mSX&Vfd6(ii)e"33I`c&*MU1LRT'LTjc-C((C#,Mi,6"M3@YC0YDZYLEM)Bl
+3fQ2U*'jh@6RXM28G&[CZBJXp&Q+#RRiQ3QlHiU1A)!cEY#QbRBfLd&28Ae099%%
+%L9Qjk4F@Q3b%'iXriF$Ke02&JQk(16m6KILJJQG"'Jj5$18mQSRkI46+LIR+L*p
+kKaph'VB,ZVJYj8DQehei`9ZlbR34Y(QYYh[dUQdcGKA39IJ3DbYhAI9%R@9eVSY
+9fI+eA3CL$(jZVcFR4CITr#drUjcBk,`YTfFpNCQTbQ6UB0&6Hc"@AR2j6UI%TlM
+5fYRP+MYYG"'VTQ*L9'BZl2-8qLlFq8@#$SEURe9C3eZEZqc!*fN(D900'dXhj0V
+AakhAE,r00"6j[l[CHll&4SS,U#rVm(*fRrZ@UVVbU[0fPjIA'YMC@iM5IZDLRd@
+kra6p*'cP99feT@4jFE(C1UjRbZHhRmkchIl`@ImZNJ[)+bTTp&"A5C23C[G9P4V
+MeM9'M`B-h9A@BUSmZEUXcPkre0(IB239'1NjZRbR1jANS)+UVM9Rb-(FGhj'Sjk
+er"ceh9AHL*p3G"EAHdJV-RGIMq&RkHddrl[r62ibEbYJq&BB0p6r$YI)e&CDAAC
+eX'PjH06k+kYF(XSp4*[0pm+dZmh8h9V-Z0erL$Ep$UI#YIkpamEa0j9Hl*TEAG9
+8(!V-f*QiiZkd9TDAA!V1mY,bk[0RS[Z5B,UdY0e8j[GIlU+AAG$Q,ZrZp4Ah9YG
+cd'ETURQHX5J`Be6Gr"3FlQqGYI%l[md(D8d&aD$R"c@bkU#kqrrIRqIYVRd[LIS
+jrRmQP(6eY0GHrA@ZNe&4*l,TDZ#mbpDa4m#iZY,c0CBCX8G0G@Y9BEUC9ch9p[m
+ATmhDrIlcbr`qA`1br9ph48X&9(VS-h8D,p-&aTYeF@PV@f&ChPC(V+rf0&pcPDZ
+#kdZAVDkUcHkRFj2qYd06GrKfIGk1l`CP,-Tp*"DIbbfBJ`FR@B0YGm6FI5cIdV[
+a2Xh@EZr1BUY&@@N!X),M@e9eprZ2PCrRqTV1cNr%rm+r-9N'kPlVP,#lr6Q1NMf
+ZTdRbUbkZVcP@V#qZ,V,5Eb6FfRkB099NAH8VV5VLr-kRjhbXhDkImha[%r$iY9q
+[SrSD+PV),LkiG4SZUVV@Uc(5e9aDAGhZZ(H%@GjQkbdZl@26@J%2%cGe[C29DD#
+$89AQmhD9H6ZSPU@&I#jUFU+ZQrjRkUJmMT2c9Rhrbdr5#MY)2#Nha&UU*V9@ck5
+XfhrrqdX,LehAh19rpeI9hE*LH4(TV[M61QhAF4V60h(iBpC6A@kYFh(M9e8'qXP
+eArXZq,,iZNe,&KiP99fZed9,93A&06rFd@Lid'Ubh5jbiY,TL`Zlcc(9KGEU6iA
+59f5J2q!Y&V[+lqdVV[lpI%Jc%&T+dR!l+Vc(jaBINj4aB9&9"i8($&IQi-R"UZN
+cHkeQmfh9r&rPQZKkZXl[8AD@NIj[cHVk(krFB2RNkVbYPhA+f&VX),E138pE@#M
+h9ha0&j!!,LA6@['JZ,[p%R`SpKeF(EGp@rAq[Dk,iQBm2AG[9EZilA`lbilke)e
+k64CZVPdrhDQ`YFh-Y2Z55rM*Z,LlZ,bdUV@kYUfADlUmNpPbPKeA$fqBJZ[Bj60
+qChYVAA69jDk+dTFaqI160RNkZdlbUb&CY18V,ZieYCGCZkJVB09"*l1,85B,l0j
+[DF[9Dlm[Ep6pr2mrmhjVq-+i*hE1VT[QeA!*``5haJ`CHQ+iEZd`IZ4kPeJh(a,
+66rIYGGV+VYHecGApHTd9,TC1EUjPCSVJq"USjDfJYB+DUUUZUV+L6fFH0*mL-4,
+l,P+Rm8I(5Dq[c'ckAm(dj[(UVVJ8Yh6bBfBU*-pbqql+2@2aIe02Ge92"fF@ZYS
+,#Rd@YY'b"k4M!fR+A6'"hc@"8dqX*"4jGhPklAA'kYFa935bMLdVDZQcGE'X+U#
+ebpG99GJB8kBB2kl[mhcHVUUM[15lAYkVDkV6q(i@Llkedd%rDdqLY@X'#dqp!IB
+U-+-k`YeDhLB90qH[NCL$GHac1EmZ2Ddr+99e"19%Q0-'&@m65h9jhR+pA9C#UfR
+,ePdQ&DA8(9hG9"96E@eTUDRd@ZD`E6DCVSIVhIhl6E4UdU9lKaJ9(*Z-#k`lL06
+bELRJD[qPYBEL0,YH(FAH@jJb)LqpplAfXcEXIrN`CZ0"ph*YAeif2lUpjHe,1,6
+CeAr2lil(l5YcIpDrj-%HU2iFNekL6kppDq4TEUllcPG6SGd4Mqr99@kr$8F[(Jq
+[DXAA$5kr$Dq&mVm2j[VpAbrc1KmVm(FA@YY0YR)qflh[[QGlpRE3A'T2iNAK2Ya
+FjfUUSmD#mZXe*rC9`D(ZifLTY""9hGE1lDXlMZ1ldI9p%@`C[S-hTmhd9hD3!(V
+jMpF&S,HZ,b4ql'iJZi*CV$DR4A&VQlZ0c&jGh&[fF(bpl+rRNl5mTV@$b1PUCf2
+"-[,Z0!,EmQPkEGG[eIHD'meeVZYDBZ0G8F[@`IATp&AdqSLdd'9JY+cbUc0q*[1
+qk[U[+fR@r1lh[DVbUhmhpEAkQmlMZ2Vpah(jEUUTh&aZZ6d8DRJd@GcMiZ,ZeNh
+(Ge(`kb1,Z*(Z[[plhfEbr8p[8klZp0d'RcHfBZim&T83IGX(9hhGa6dpfDcSZql
+q6c&jhBZip6p-mBGTiG2PS1!,bNS"H'SReTblrEd(3IYMrkkrEG"4C[bUfUfHNk@
+Uh9TZVc`ZiYXfADG[EFa*U*2Uc2#r$prl@Qr,mEbqiUGji(JfZ&qAZ0YjX&2STGB
+6Rqc,eF&V,UDIZlLiZV@XMdpTAAPh8d-DQUUZADF1mZZp[UL4([I[r8r,TF[mDke
+heZJdeTYULNadRG4Y%ABX1AGfQJTq60RU#AcG2SZJUSa$&iXD6"Y2$U+L#YcIN52
+A&Cld&VNrAPiPTd(Uerk[eIad2i50HEC'ZXV2L#YTp3@r1+ckhbrVrlrhr2Z-h[1
+kl6HFAEEE[YYYYj6CZS['+qUC'2QmipaLM5kUqZl55PE5r5&AeIjFjqES0,bqfqm
++QmUDM49QLj-9-ZTZ+GkLcYlEpPAR+ULYEVT2edAEdq@Tp&S[)kA-8JTFR`#+q5Z
+qAY1JVIelr0dAP9P8P0'VDTLQZ#NfTJY-RpbUd(hqijRh[@feTpVqr1HP@qjrVcI
+0m@el+6H93T2#Nh&4"*lc5D,GAG9@e%&a6bDIBhA8Q6HdV1"GEEKeNAHDlkAFGrj
+'YYV6phQfrm*PC"SXh"qc4FQ0'6SXjprS+Hek'SNjM0eG41A(3CZFZZAijaGp)4Q
+[XcmUdqjNB2@JTYC93G,XkbfY[aC1(+b2Lf[KG,Ql6`[P4Uc14ZVZV3cYAAC9*'[
+`ZblAEAI[HplerY+[ph-qMNr@[jGT!a2@e9"-TUKa2@Y9(%rVBd&c9e%(iSmIZXe
+)hRd[TE6[rbD#eY-$)cd&`9Z9hhCC0ZTk#Rk6S+HBiR18R,MDD63hGebr$Jd'YQD
+5iYIMrFjDci'6`DZ#[UkU$T!!6[`Ahi[q8mMiYfkRXfa29(+98c44S2f+(q6r$iR
+Y@&aph*k+RY+f#i[0ep(QQ3jkPUEM3BC8E"R$G$NhFbXiGeYZ9b(dYYh1CraI@QM
+pIq%c0`EqRZ,$lUZ8p9hHLc'dd@DU,@dTmVSVZdlD`5El526AXpV,U6fPA'rCDEM
+JC2G3AeM9dr*6mHXYEEi1(dp2DBlm&CQr)d[,CZmYIZD,UrQ&dHmY,UZQF@#eX+V
+2k[fDM5GPTINjH2DEDfU0&8kI65E@YY+rG+(riZKNV!ir5Pk$kFD$X5)2M4kqVS[
+kGckhq,@0PG&8aS1"jF`NMF@'EJZTZYcG4bMBJCTiTY&6kL26H(ZHlj,@qa*kD2p
+G+QqTq(d3U+Q29@YKi-(3F#cUT@ITHJMGAq@0*V+MP)2d3D#qM3I+Tp$"54B2+JV
+Xf*4e*k8X#cGC9`D,G@Y4dhjcDf)Qlf,&M6dQ044B*-%hK`CA4AQkfrC5CRj0&-k
+ZqYBe4*0MU68e[3@P2dPG"%kAeCHEX,VZ-1CE`9jqHfINk+kZ+EXE#HNGT93INbp
+BCKr[5Hqqb)UYM9Xp"S1(9`FR6k'NRS2p'f"[Y&FARPrqM55G@BV1I1&%4GhaI)Y
+DLYiFb!ZjH29lfE0YCYT"0h&V634UDQ[,bQ&jlpK8*(H4'r5m4rdqPY,5Rj5V[Se
+R2qE-c&KJrQ`lABcR@`B0UNPjdFeQC%d52h-ZEm9hfFR[ZphLd*lQC8FRSZ9TdNF
+P-pQ$MXJei0U9fe%Pa(eGKQcFpM-50p,JUq%pT'VTMDPPT)QBDYk#RHdK[Y&q3b,
+AAJ@(H6P2dZ$qL6L9[JGR8q[8EV*aSrkUM-@%RkFZlJTSZ2ZVLXY,@i09&Y(llk9
+a*8)VEXDDlY,M0dZ9TC(Vm+9,X"-"1+kVZfUUdh9Hbk!faUI4AM0eb#emFlVPU*M
+3rTN1bfRB)p0"I25BV*IBI2M3ITDQIcjXPc84k[4F14Qr@VTPKZ[cFRUHRR+q$J@
+[q[[e%&T(rp9`8p"0Pq[VAN,FVfR9b3GlQC'JTVZeZ,6*j,5C@4r'6I@(6`FcQ+1
+C8j1VTq9X,4+1SbZRV'G,I-r*JZ0eD98Fh-CGh`,Z!Kj`a55,5MSD'VLaFI3`5kQ
+$b)0eL&VYCai2P@YeheCQkU$`1`Ui2IM3EUlm+6q+dV-hDi29eYA*r9+q9dmQQi(
+p06m,*8qaJZr9e`TUE2`H4N#3!0Qb)&VGXL"R0TB5EUlm+#CGAF(+4UUSNcXbQRS
+2!JjL$*dd6ci0&`,ZAGrqjJSJVkM,FR9EVmeAD@Mk8fkZPh9VDRZ)+ArdMep[GlH
+EYlHlTp&@5kfTh8'[&0,&0h&CQmh"p88h+X8fLek8eepHYJVUq9T[kHr"bf6l[0C
+L,Je2SGa@m["c8QRJm,)@Y2FD+Rk60`#R,VpTd%H#mrl!+MS)mH#QZY6SV60bcA0
+p1lQDVTq"FD(NZaZUQZUi'42r$NkM,Qf[q#2D@X[Xha9ETe9$Ek#$RY#iVDr4Ad`
+ZiT@@00pk$meCQl4+bRUf+c5G0D9Ke5Zh5XRqSTVcq1EjqPlQ$TXDTmIJ8pY9dm'
+Ub&hNi-hl'Ll1VcHEMjZdYK8D+l5SJh4&$0e'@bd&e9BrLmT8C6jPTZmh98I*&Rq
+LiCX-@QEi'aV-'REl1@EZm'UY6,%ANMR2QAGBA#Db!j'6[Pe@BcH6p1*GQll+Yl[
+*k+ql1[Mc,UXUZ(q1Xk6j%[bUZXYEcXi)#,PhDeYA@CbdY-%#(PF[9`9hVr$pMPU
+r-60$jY2m2Ci&jJbi2m8r6b[c338qAJq5F"GU+Zm5VrP*ZlbRj5Sc%D089pE"Z,L
+$GCZ$j&VYIj5Garh43AQJ,3FhEGPmV1EVCk*cSheYE93C`l@&V9@aQQe$iV,E0e0
+"(YEZlU)-h335I4pM44lD2@CbXh@ZZlSfF[`4kb$US$hqTRhZ81JZVJUIATTPal[
+2dqBR*Qajc$VkH#eqjPZAXm'#(UC0T,bZANR0l8`A@JY)e8Hf!6-PeN'ip1#X1'f
+lqTdeV@C,+39946k+EiNHkkZRdAL5kUeYZJYT0R!FV[!JbHQbFLkZUZ#C6k'kTV$
+QFr8k@0f8QYh@9MG"mR0B09SS+LPJr6PK(djeQGKDHPNm'A8r%TIT38h[fP48B-B
+h-HUTXef4aR8mQ$V*bXR-h"1GY"Z*qSN6jMKJd2#DCUAdkA+6m%%U6r(+ejrAUhh
+X%[q&RQ)2me*TlJRSYaA8hrT-bA6dm'KTE1$HcX5A86fKXmaAcfLN3EhS)Np"0RS
+2i4SP("`S*bFTB$iN+A"TDLNJb-(Va)Q$8`EdpJ+#9"+`FR"%rX!Z*%h@6bG4*bB
+FlL#05F$GCLQbF&a86YI"`kI48[m)P&"F4XK2`@01E@p&BeP2T*02SUL4jeE6bG&
+D3EHhLBq#id@hlE4F8r4HSNr`Ph&9Q+QSNdqKrkFqXfEEa-GSXRSTNHJRCq025-(
+5(6SU)*ZEb8Rq%'hQqR%LCLFVk#GTE5Gc%&["MY$18Xdp,YK""1C,E`Rr2R`mcQ-
+pbQ3`pE+NE5ECcE1E+hdAYqrh-fcVpE0pV)j,28'4p'EhpI5m,@aC'rceM5j,DGe
+&N9m@9&S,#938ZcP@HIQbV1Pim@PLdX@Ji9R5bTYRG5*YR)QJ+QbSX@E38%LPXl1
+PTE-!f5X*ZhP@GKCDfjcfYipPYE+br,NZ&Ff9eLbT&KM8($fI(S*X@9)N5V+9XE2
+KA15fPpp2Mf'5iA(iqqP6BYPamDbbA(XYPBd[#ZYT0PCie[C4pKPmI-j13mLjj%2
+(KVlld*Z$aqEQi2kFP38TpL8-1cfr%hqdLdZHQbXPCj+,0qeVFp5dXf8$EkF2(ZB
+H2NSFE2A2%KKb@0$GBd0KFiaqmLqKPI(2hDA2#K2Uai9cJid5'bZBEV[k@VP6GrN
+ZrXZ&aa'``m,p)*!!)8j$CFF(pPad8GRrJ'plalR!j&PKBeK$b-D'qP4D'kTHhS*
+YPCb+#e`FpAKYi@HKaXPRVVqFfkimVRCYek!VC@3er%hmV)Ge3CkPYBXZ9$&Jf0"
+Y2db+@[Lp0`Ur*6Cr*Df[i8jVFP`V22C,Djk[e[EqY)PpcBe9Ihr`qCeZ5ceH#2@
+khK8&e+p([mp`Y"0lrL9q6fZeZ[bhA#QjQkqeNX(d)X@JN8qYQqa[j9"F8'HiC4(
+5``Be"&fFLJeX@E`Uq*+S1QXlL40PCrfDrj%V26FN5fQd[mlVZZDVrRm+kZYcAr2
+pMQGE3C!!lN#fTlHYKipR6d'YP%k+#9cX@E)aT@Ur65aE1Ji9,950E5emM2CkPb8
+UJN@Ge&i@HVrN&(Q3!+@P*XcC%hEHG&S,D,qL90f8hcLNL,qLqq43DfLqe&bpaam
+V3DfEZ88iYI&b9RUSY+LG9dYICb#Q@9)4,lPK,jLPS*S5k$Am+qLl+JepR&S+AMl
++,dFr38AHh0eNXp`JNbVUE35U#JLkUkTHIQaGa)cc#A3FbLr5dXATXKc-qdQ5[MS
+QbSY,+ZSXSU[S*%hDjkIS0crE2D#JceeG64FC+,5l3U8Xr1`D@PbYQ)D,")S1CVk
+mL())VIfVB[Aj'43&q+4Jkf[fS9k$@`PGKAR3CkKce"ZFP+fY"VGRI$$THG#ACaC
+@4fGel&,5jkJbYRAm-*p0)TIN8%f0c"C4pURq43b@%c*HaVH&AjlZN6V14RU'Jb8
+MDNApR3E+P,M2XK)S)ZYX0VrIf+@JTEU4PE0%L4)q45cE#aLm+PbY"h-%QJXd'`P
+qaV9$QJNE223C+E`Z&5JmN6IHh&RNrdDdHQfS0EBE1qLrheZrTD#keYR35E22HaR
+Xp)NGcNT'5B6Z&)eYIPD$KGe!&'kN8XL[pVY+r@pr!Qr3CkJXpRRT0,VDqF,1crN
+22@&Raq2rlK5+AE8XMKb*9K+P5*@Ylq[Z[1S0V5kdpXS,GRNV2ZE1,NTIlpIrEKC
+,'cfqlr*Af$IF,2C,*9r#b92[V#bir#e[#eY"0i9"-T9&D4CY1%Qc4apRd23lhd2
+3LkrMeqHbAIB0"Ah8VKCk,Af103EAE#(VkqKk'`fQTfRdj%LCJP"XLIqRUFP+fH5
+mkJb9,`Vi2qYhqHXl1kiI%mk,RYYUGpi8&ejdQqc2kD'lZ2Xb[(qI)Qh9ppVQr3f
+hfV!G+2V$pRX,A9r#r2Rk"(qPcf5epI&cdA2De!A*HGY*&arHPq2mHEmH9lqBL5T
+XUif9amMNk'qcp"YHkaXp-Ki@5i9IA`G[IE(QSXfcfCq-Qc`D#PQ6BX@kb@c)@er
+R8YINT8AKEiMRVGVRVVN@GeYTA$[YRRSY"%hffNhAk,McXeNi,bqPIqqCGHGcI1E
+A*f@jeUS4TD!Y5-El8eXa5dY!A-c'0&VmpRYERXpC4C&pXU@*h2DjU9+Lhhk1alR
+33Aee5Z*4U6qe+cdD,$NL@8-A`D#JQh9J*I*HG+ZH4NV,KBh#XSIfT+jk''cf@hQ
+h&pfpe[YQ*,p9ajeI"%[T[CAepjh0ePANj(0PbL,5`JcKGK9Jl13NMCjlN@8VpmU
+$Cd%6ZHFP%(*8AC048MdE$NDfkS*'H`El2C@kZXpRSf5Kj&R0fIfLk634FP&b1dN
+9mLlTFrJm+jiq5eYcXU$FqaGI[S0RYE[2l2EkRDC@khhRIkYEVCl6XD+X,l21b+#
+cXL00e)XXDce[VBI2C,@lkc%"VFE*F,[mVG3C1J`Fp+fAk[mA'eNlkDiHBZH[Vi2
+-hNk!YPcmDJLaH&AfZdXkq4H)kj,@l5JRrBZ[3P8$$NMMrIr3EV1a)mb*3DR$4qN
+-q5eYKafYhNfQZ*0rd`f@ISdZY[YpGD#P,efJS#i$V3aGr)K[UACh#-G,3qaGIfP
+E@kfHiZYrNq&38'e-qe"CdVdA[hKHi@rLcFRYD$CqM`JQ4EUbXY")Xk#8&!P[+Lc
+IRplEED(MpqBA,J+Q5i@fP3"9XYVXpQ&6N8&"$al)rc(`V#'&TBlpA#2Y"BX1%Dq
+[#ZFR[d@j&Rl'eLcHjN8'9f9!E0hb+8cYif5j%@cqeRU$[mPCPSNLil&KIN5+#9G
+Erm[#lRREUqKTD8[PGe%Xk#JZXPcE`Yh%V*mhcYah-&pIB8@cXrBlQ,+Z,1JbTS[
+#[+#V&b9,hpR5b1ajcKC+JfiA%8%6lNdYd%L4h3%mRVDrIh"QENA#*FN*9Rl'Tqe
+0Z,LccjV[")bA)c0+DM%4Dr*5+AF[4'fTMeLcFPCdYINpENUrIm22Dh*&hIN-*-9
+%UJplRH&RjPaf1I-Srb!RD#J[ZrN51bj`YqNEIF'82IjN)dL3!*(C+P%9AlA"eZY
+Vc(PF6DZAQE@9-ZVlfU$"TH2NXrjaIEZ,2f1&2m,XYR3&ihK@9,&lQ40Qpc%)JFM
+KC+4CpPXjZieY,&Ql2Z[lmc)q4-q4AkVCl1,"IIS0ISKh)[M#kCIT"1'ir[l&pqM
+qrXDhqrpkAqq$rIQlM9B-6CpaIISZ1jS2D1*(Cl*k0GeNU$)aE+*$5pZYJRE&2F-
+2(QfHYS,kD@P6HjLZ'[8l-0-M+PpY'FVc$00$2G)ccpIpUJ4V[[lblA8hdf9XfQf
+P``fd'cBECZqi9$IEPD"mPYC'eQa$,0%Qd&ICkfPq3'U[QKVr[+S'Qb,l'cT4V@H
+JN6EiV$N%Jc!CRM65kFD$,cD9(',GAhR@TBYG'fpXpYIISPA(EaG9&1!(L5X'95f
+'0b,19f0VIAA#TGpZ6*k0(2F+qQcE$Cd!'6Ff0)0"&PF+PLlIT[1QcD!-@elZJYI
+m5U@,Ar)XqjQGcPllDl1J-2IkT[Ep*)Qi2JA`p+#9%0#dUJXjArEAr&VrMIIU3'i
+p"+THKQb2mIiNIi-6mfq[VScJE2EhhkTABmh&e@5%M`rB-MpP$M9q5aL`V-CrIrc
+Qp#2MK5YEFbVk,`TXVK5mD,CcEV@jieJMEbP9qYN9p,AjkkQep"r$@jlqr#b8U9R
+Xph(GbVEUCXA2GcCp[XkZ,Rq"GGe&LfIpre5l@AY1NXlLqbAXCl*DhKClK9qYeTD
+$&#",c&Ye0Ye2k2e)$DRrNUEDl1,+5Qr9,e1Tr6UI2frpreH2U1bl%idLR!b8qqF
+AaahmL(KBh(b9LE$R`lRD`ieP$3Q@$K@%hcTYKM5-EN5C@qlH9&bA(aSH4C(53N)
+Em+JK[SN2GFHeKZD!dBjq'krak%2(TE1)&,KB1HbApVUEGI[`cFVXDrDf(RC,'XM
+T0`h1&`M*9$C@@(ai6NDij6i&'F,BZ3&)![)XVjAKk8`35TYAXeVQa-pUFPBm+`L
+DdfF6AERpERXPh2)e9a`V+ECj+PZB[k,#PNF+`cf[P(66XV2@l2*@()ZE$KFJkZ1
+5TGI34BKZ9QqdGEqE`SX@3Ep0INU9!Q[Qd'$XiXL9k%@AGITP@&R&T3*3a*@elQA
+[YrcI1lNl$dLPZHp-mf6Uj9A9aEAYk[Yj8[95$8HEM@aL5Uq#Viq5VmN9iQJLPP@
+"L6iA)aXPNZ3GL#bZC&+!5VcAb1Vf9jj["`U$+jrTGApRc[fF(qhq2HimEQG"e&a
+pIbr8`IqHr95[Mr-krBpci'lr2qRp[pq*8CIih6GIGppi2LrVi2qBCqVRmc2r)Rr
+R6rd*r`*rbjrqNrlNr$&X)ZDLkL,VB[eB[iS[kBXAM8[+jrV1h[2,rEr6fq*Kie"
+ND#XS18S1ES1KS2P8(cU$A8'dS1lS2Z8(Ld(l+$qe"lP"M4+(PU(0d23d1QSHZSG
+M3pc3rESI'SIj80$lY$Kak,(d@6SXQJ)k#(i%(rK"4I$S[KS#1JLLq*4G64E'Lrr
+S[*S[4S[rC$*C$PXKd'3Qj$AC$kQ3!,c)H4N2dj!!r[@j[SrQl2kIhllq[%b14j2
+)f14qENGENGYNIXC(lq4r,NGrNFMKC(NC$NrKjl3DAUYEYIXIHhHrp,r(&LC,PXP
+RXPT-PeZ5kfXbNM*f&I45!"cjp!R*FP2j()e15UDR)e13!+QTbXr6aTq[Lep6b9"
+bX@4N*r)d&62j5INC5,)SXM&JJS+Q4NFP2j'TLe-r8ci"!"aDN!"'JM%b-r)UD'T
+N@'6Vl#YN@&,&M5+cNV#4)VkUJVk+`SV#Lj@`SE#Vb)D-M3j',8aDH,6S$C'RU4!
+dmrN!d98@T!P2dd%r'RkHITjqSJ#eb`Q"180K2aYlBFPAcP,B@(E5+'R%NLU!5KX
++ci35K#0!drAck,L!P22j'Ib+!JV3Z[")(5URkT!!%Rie98``eQ8bP2BIprR@q0A
+qrNq"BIp3%bI!UqjUZZf1@r2bA3Er)rcUIMe2ad"+Riq8m+RjH0df6i'6i&6mI,I
+UjA)@(rD,lfrUH`bP2)4$hm&$"3e2a`%rkhld0(S&92aiQrX2qS%@(r3fD80@Vjq
+Yc-M29r[dX&6)SDc+FPdeIlpKrhR`2p99GGNq"AqrAqrb[J)$9IFKR#V[`#8r,dr
+,S$Ep!IIJ'S[[C5RUZZ4BTqAJqV"3j(qFETUIPkhaMr621T)mYhV6p4IHVrIM"L4
+4D"XYqV*m#FjqPJTB%",$9Sr@(r8",$rY2bk8cSUV-Tc(jRaPC2J#(PdmY!5F%Ue
+!0$L6&9ee9eb!NETN'Tcrhk2j!$l@jZG4Fh2Dci"IP6P92pIb@SMC,)8%5KL9h0c
+P$36Y&(RSQ@j,896f&-FJTPFXd+8$J8S@"6T(m#Q2Uf#QFSBPDd+dXp26Q@S+`#e
+'m#dj3j+IB&Z6jQ-`,cM3[16XpMfKR)ceFi'U'FRFM280#"c(Bi$PA2d85FKR)Nr
+$46J"Q!@LR)M3014*e`$cq3R!06Xr1!)L0"$J(2(c2cN6)([hY"@1j#"B$3'Bq)H
+H#+JB09S,Rf!Q'GD#![S$ikG$H$HGRiBD#KbFj9C'F3A$M28%j38E3LN228)$kj`
+(S(Bl(a*e*5P35L"3a`*mG&G#-@Gaml%#p1ZK#Hamj1[B,TFLi#C,32%L-")9Jf3
+4+l(4)Z8L4)dl1e0"1eXr%b%p34-j)JZHN!!'6p6bYcFkfIRHBZBZ4b%@TSEQjH!
+QjRBXp1ir()&Bi3-k!J3X9i#4(Y"4"L+NkKR%SSP"14)X@*T!(D-$ii@4+b#")*i
+J+Y$%RH6L6QEL8)`UL)T&pP14,DIL41EhA)Tk#20bRE41fR-G[FIkq5i9G5@qGcf
+Yj6ar``qYf[Qq,dZ,a)5+@&Lq"b)Eh#j%1lmcb-6X2a`pR$f',b-A`1qprV-Epd2
+NB[jrYr@qhr[V2HrGLEbjl61HjR25`1V`[)eRQBRVA["p@(BDZrKpAa2-rrrMe[)
+pEVI&l2dq,LpT$e(f2'kbrm[iRZGEkQ*Llr&VkLrpld1(aEMZIdpCj1VaFR,Ma[V
+H6VrIhZfd1Se[ZI,kMNZeaIdG&YZmqpi&cK6P,b[GmA&a,fjZH`KlRi29Z2-kEcI
+&KhApHd`1cr6ih@h1`aX8$9cJhZ"Ip#I"4CGVLl#'(eS6VNFAN3r$`iF@'(&mEBm
+l[SIDeRBprpEh0rf2Y@("rRjRM3mA!!cdm2iYje'"(aBIArp$$`F0$E#pD(Xm,X-
+EGiAd-6'ZHYZI0iX2$p2Bq&jQZr0a[kEr'rl4q6MBfmKaH,q1paIXGEiRX@'&$-`
+SBI`iPkDSX$HB'mdqla02aIG`2ZiYcLpKKqYH`iN1,Mr'ZE,!UiI@[Z$Hi("ZBI0
+mR$KmIhGCdfTKKqa`BBG2KVH()fGRKIer*iRepPm[krrVh&KeI`'jRKFD(Jlc`2G
+qRXH`YYjk[`"M`2P3`qVfHmr(,KaXE&`-6mI[3h1+EjhAmAe[VG(TZBd[QGGeecl
+Q*i`C!RrlpAdH*d1,rI$q0q#pmC,(aX2&hBXF#(#pAHDc9hq"K3q0FiAZqYq(Xr[
+relQ[i2PHCHmA&f2N)Fk2e2qmMhlfhmcdZ2f(@qp$$X1YKKkli2Er+3FeRArmhQm
+aBH,KBX1mi10IiRKiR&lSKPm(ephpM`rlBRqIHqaaUhqUJ5P0XI,r(cd-26qV[1C
+5Ped0clh&KhHarh$LfUM*i[qImqrT,(hqe[BIVmENB@"JFDpKl2!mAHHMF`rj[pj
+jAr)E#pi0lV2E`Z$Fi@U`SI4"PaER#pVpR[iIlEr!rciHlpl'aVRbBF6'aIGr0K3
+mMHCcBiYll@(m'(lh&kIi1`Ka2!kf(fZ(6q0kRqqSplf[eAq(ql!m$hI$KeQ"k)C
+)I9mcJmphrhYMLrNr[KmE%mM@HjKHrLih2BPlTpMpR'mRmAiBIDqALqCjRp[`p4[
+$U#iel2q0KjRpqHa2D`[4a[ihZm`[Da1SK`[Gp@paXhm(`TcSSdMm'XpRhH$LF6%
+aGGKpRq2&jUrkhTrNr4mlLqAphHIQq6Fl"3BkAe1$Hp(UX6!X[NGEq6$pl#K`m2$
+hQ*V-,qIIrkr*S1Dk6kABiAl[9mEBkb(bq0lhq,rbpIH`iI6e1qlR8I'ZHejKIYj
+KaI+mEmH``rF`VRqePq,AIrE$hV,!ZER%[I+r(Li'&lQQZ1UYH`rMerBAqZmLbaG
+rZpCPrGpAr%-2PrklrGih5F'(KpBG+5'(fZ,efZePlpM!K+"[kkVMBH0m'*lAlXA
+bGCLH0JHR[2ErVmVjH"qD(9iAliH*Ahrp[9hIBHVKBhLH$cZ"m(+p($`q`2@B9!F
+Ad0GfA(1`PJ3q,cf*[-EBE#(hXEqYlLkE#p[Tq,d(AD[X2lBRjF2fVR%lVVrHkle
+EhhF1(Lk,RX,Bj[aSIqH+HX`B@amR#qGJC2h2Hi2DHamEMB80ldHFKi2PH0MHh$j
+2AremVlfmpA$XF+pqhJ3qjkYl$fZ&LA-2ZIqk2AB(rfTKa1Aa139X3ih"mcHDr@H
+0[-$f2jqPjQm[F6rh%ZBGGmk(h[-pc$K`YMKICa[D[m2L&EZZeRZiA6J`aI8[BIP
+BJ#H`ZBHk9CRPBHlZGrFiRQ3hr`ZA$,$dGP$KrHhQ,jI%mD'(c-6cI0r(TX#jjfp
+,h1apCAciIbkH(Lq-#MMBC!(#jl@BZXrl$K`pRk@R%lb2YA-1%A)GAKG4H`kl$f'
+0mIphIl%V[mEhVrc2F"T#AMI&,HiGh$Hq4$q,L`lrh1`aF,&jV&`!YIGr#"Rh,Ri
+f&MHqAdlh#pl&[r)kM@Db(![m6ABHZK,3iI9qAlkA80b,dAI6i81&kQ"jZXm[IBG
+bAi[Vq0$JBRL`r$[F6fSF,cBBGjKl(hGKIi%1X(hIqT!!T!GGV[$)"qELi[Q)JBZ
+Xm#(c1$lRe[Hi530lpdTJa[FZIFF3-0rLA[CrM+P5-Z(lf*FTqq9jRl3(B'Fi2Up
+(lf(k-2f1daX,6I"rR%fIlSEQjaXEkiiF6hFEbm,fpVZlhm2Z`l(hXAqZmhPkM@8
+HGGeYc$bIVH6[1YKa1b`1Sr*MB@[a2)ZF$mITp4ihVGlc`AXDppT)''jpcmF2jqe
+q$fI,`-+r`,h@Dbj[FE%aF6@B(BGEdYclpMKrRrVJ3iRhSFA`m2AHep[l-2)rMe[
+Qi[@m94DKpc'ed2Ip4f'(MHAi[[lriIiq@j,MBZ"[-2@Da8Ai'(X2rH9j1lm6(Hj
+VZQqjL`qAf%2pBGCjZZdHlKk2QYjKHTHhr&`,dEAYA[[qeKiX2i[BaZ(lQ*p(pI2
+AZXpldlqr-G-2"aI9f(j[&klBrFa-$eH9XSI,X1`B3G$Zm6iRMqELF2ZZ,X%D2'j
+'&MDic(r"qqbkbZlVQrZjRh#3!,e"C3%,j["cR'fqdRrQI$fGAPYhKiQ$ar&mEMD
+lIq2BGVb2TGEK3aqSm$&`,hmA`3qjHiAfm$!pElppl2DIVm25I3jl#[m,Ji$0HlL
+Aq*!!rPRBRLr&r0e[bBQFeA[r6kIb6Alj(5d(8IEeQ`aZlkAJ`pGa+Uke%c6hm'C
+ehaURl10Fhr'`X2mIYmrd9ea-TbA+'DVmfmjV2`h0l`IJaZ,j2LVB,r2pEGh[VB[
+YiQ,qVHDBcFHlr($erI`qV$$rEh-$rReS9IAaERTX6U-El!`mBeaHepE'-[N-2Jr
+0rGjIU3pEpFpV6bFjdhNHler'hN1(XF6U0Ap,`2FeR23q!@3GIl8D(aIlBIPA1&#
+Dl82Nkc!`2+mASm2m1,ih2DE6DE3QlJ!H*%0Ym"FjTY+!D4%S*%5Gm6lm5Fp26DI
+6DDcLBr5i0RCch8dd6l9RS[PEf*N1afmI1JcR1Iq)$BTAdaZ"8AkJG6T`R8!"qLL
+@F5H0cIlpj"c@mhNf*qAjQkhNEHEbYm[VGjeI9pAmEVI+khUiqfVB),cEIcqP[!J
+mlk'Eqm"Rjf@jr2jR-jQA!IL*D*%D5*PC'NJ3*McXf6(RC8rCk(XSN!"2`5XVCcI
+Al+Kb9""YjQ@VC@@amlN*9j8bXI66XV(cFICr`JR+LGc8lCcP6,JTUD9DjDSXp*4
+cqKjqLJdN6pG6kq9LGl%l,)Rj&fHM1p9"rk#AmZ`XjQNbf2b12RE2G9@4lE!1l,f
+fKe9%#1IbX63i0H*2f-G8jZcYriIVR`489&5k()6p$Q@#'Mam@$q"f%Y*Ul19T+2
+)lI9X%-%r%h1KqV46P218ZKND6(ce['Jbd&pNidj8jbGRCZ2PI`Yf#EHk'*Er9ST
+k#@IQT)ad6,L"F&13!),MHR$T48F@$HlRG9d5*3j#HTS)X%jSFG%i%hHjEHhNbQ%
+Z'fZLCDGRlSreKfF%j8`6)+VYV2FEfeVXKN))Nj!!35)Xl2cHcRBZphX'LJl[G8r
+rCbQPbD@BIql4+'ENFY4cZHSXY"T)1"@CDGS0eFHImA,m$3e8bVc'eJVUf0H3!(C
+GPmR8Fep1lr2Gr-`+R49-b#CSS0A"TFR`ieeV*IikDUUZJYY2h&VeY0fG6mbeMdG
+pYZmMpTC3CA19AreES[k9'kr&8C1VjlKeFfFUZE$I"8dqkUkklTSrc+lXVbVPh'r
+J2rVrjr`mrifMUXa@AAMdp6'bp,PS+Dd$24N!qXq6"lY(ACE5Ah!bf@dP`*q#UkU
+klcZ*&GV)X&6DhPhID,dkc9HP6DE+q*r,2C2PkUCA`Ae2ZY*NmR*[VAGe21C2,4V
+k6'VG9"f8(bINkAXY9hGhB8d'AqVGGPPkUArQeZY9JeG$d[6fP0rpNkRR1Dh9ENk
+hR)N&e"hRb46he9"6FrhHAJj5XdN&jADAKphf@6Jl,Zpl"GHPDjA,hGI65rpEMcq
+Ld@FcP0d&Tcp6Pm[5j@#$dma5m1UJbr!bphr'qh&pT,kYbfNjk$`E5##PMFTmQ6H
+IGRUDkUV@pX2eE[`UQTTr$b[*CEa0rqLYM94,k58"f[!hA9Cc*eNE,A'NU-YG`DU
+[UHJcQFUkilld&6D@ZUb[$Me-cSi,b`bAl2TpA6p,q1#ir*DaVcJFl8HC%MCH#ke
+@NJf8b`Jd9K8ehcDQ$,eZ@M3F1i`G9UUb$9AHqYlUfYI*Q9'UiGePi2QC(T,liQH
+Z1JcHEjUTYV@IP`91EZ*b#mk$ip6-Y1ah(!mRRS2(q0T2rQ,H[S)+EUZJJmI(8eV
+AHT8F2e1Pb[!p2QVr5q*fAiXYrD6UIirfl[rR4pPrciYE"US),LXTTQHM9X(hE6S
+kk2@kV5D5RdM'(-e9A"`fX'5Q$C3EU`b2k[a@R3GEjNEJF'Yk(Q1DqMNj0jeIm*c
+S,@295N`Y*B98DlZkDfYE@eX)eI9CbAJeA0eHES+I,aY,6eGK(*,6I6qT`rLC24p
+$UZJcNC-1FUY*bPV19Q6Tp,Gk@XPkYM%mRREMiX(MjL5-5XJc(96)-[835m["aXY
+I$'hAqHZrcmA9H,PT-(mIeeRGm(R2UfUBHFJ[-Y*mkCGAAKjMj&GPkfl'*I2M%Z-
+fq-A(Ifr&d(3G$kAA99Ed-RUm'mm'S[BP2TB,VXS18dX!a)2Qf%'AdXD0"rfe*#a
+b3Yf5Kc(9CZdJ[E#25eQPb1NqG`l[Jk6jY2T,kebf@TEH$65jQ4JhApkR38qPMGh
+(lA)eYa`+h5EZS[+h5*LeY66$&dY39H`F2UXpNrdl[bp*PIZp(pfahI1HPmlJCD0
+NmR9hIi1HeAi-[ZV8T3NkU[TVAkfBm'erf!HC`p,TDIJ2aPCb@-UdX)2,JiA2HKc
+AiZKdZPkl,F2`khSIK4Z[V)2"YIMF+GcNXGG0p#C"6k@`VUEjYIb8[,kU2(64dV@
+MPS0P6GC8c+h"iGe198VGAIYFle0h8jk25a)00QUQHLde6R-cTDLlMkVFF$Gj1$U
+P*(bFa""kpd3CJUTC*1$qqJjkXr4`IRD6UURSp*rV9HEPr&TV@kiI$ZllmeCFIQ*
+BlIG1-RlZ@bGp'h@VPq,6D#dbGK"G$0BbB0&UX[6kS#1PNm10HC1GV2h8rcYpX0*
+Umephir,Ah8qPmLXJr[Dme`TfVLe-b2fF%'EQB06dGCjm[5h&EbN(Z3D@lbmHVX,
+#QQCHTd&9,V,c",(Vl)3G(@A&P*Z1(G4*bATkLSYjYV9CbUc&A(MGp@d8Dii%E5G
+C6U5NQ66@X'Pe8&2F4S+QCAjDli(iXYjPamlcjRd,,k%DimIjjLebmH`X+ZZMrQZ
+2Sh(d[YCHeQ9G!5%Tm[9h(hG*Nq"'YGC"iJckapXq5QIQjJckr(ILbFRjhRmeX)0
+AQ[$X[5q0II2beCj`drqCHRmVK6j5r8fXHeJNk@[bG6dGE8bp,I2aUr('VAakH$q
+%@$SkU$rY9Nip,4M8bY0-bYRPS09SY9dpFaV9dDi[,lUTI@9213H6,bYA9c#2HPe
+8jRS"``Ihq*Nkcc[MF'0q,TSqNiqLkbYbppZ[R15Qkhl%I`irj[1kZSGE0hrQAM3
+@YaAdh9bGe`ip@85hGK"Jbdep%0IC0Dml@AhT4[aD6V(pYHF`DDebm(E`8e6-`H"
+TH(GD@Tk1#6AlUQqE6@VV@rqBeXV"%YDMKpT"`jPaJh9A"%YS02SNf0,bY98e@Ei
+&pGI2ZpcHAh@9Jh)epT0e'dN%cq2iDDePe1JPIhX'0RrVaXhMmPRPhCCjD$Eh99,
+`FaDrDVj0KH9&9"lMmEHRc&UQe8XE8if@2DA6VDU(YY3CFBPVm0MDUHMM9-c5m#Q
+*BCHl-RYh`q'"l5m$93B1$XUbiTB-[@CA"l5QX*ki`E9MG'jSj@NZlM6TYpKUKYr
+2H0ZiVDLSmYaYj0VEk1XVI6jSU3eIUjHikbSqe'qKrp'bfkl,j-&KAkAX21khl@A
+l$dqKTTNIK"FNk@`iIpi1'0[r90eFFZ@TZm1[TkD$YY46bGE83D+dq0"Z+hJH$mE
+JjEIeeacYhlHNkl,F$59[TbpeNp,*q4%Q3CDQfF(Ef"M"i&9BjFYL`B*HkZX[`p+
+%["`F[TDUaUk5#UMbS-Vi0I(m#QX)*0pi0V96Q6RS0I"T+R+cKD4U+IYDr,kAfZG
+b'6bepHHPS+Eip9@`GC!!@XcjPjTC029Fh59ieG9"pDbIdeI(k'`qYcA)bj8,Lk@
+kbp0f"DTGNBX8PIZUHUJpQQqCPhM8JJcXrm5Rj5UQ'RHQq0"1HC@CEc1aq2SYr6r
+QVrZmekAre@aUqRD9(VcdFL*,,MQUJiG6BjBDPjAdpE"G4hTUbp[J`EZ4"TImeNI
+`),##ZTV@cYi2iG"9-DGaGhHPZmjq$,r&dXhGHPmHXbH@Z-YIA"+LSM9(FQ0+$9E
+I"[)j5&9D6KhRQD6ja8,drJpC'Z2LAhc0,`,EifMkr"aEKb8h4%eH(60P2JrjJim
+%ZiM2fdj*NRZjG0DhHBq0"%E+UqIU9Arc*9CFDe"DhG9,X"F6"L0DY6-bpKAjGaU
+H6`S2NTTec'R18fJcJdTblZll5r9U[&bRaXXQM@['MPSf9qSF*K+1RZL&ZV*4H*r
+,qhJr0ZrQm2Sllk(1DE,FjcR[F2V[1q0k'@kldjFR9F1TFC9MF[rl,Q3C@Fm[`IL
+p0"IFh@I*p,JD,dqGVC2QDDSh%p8c+UC5p[9K[PjCq-DGkSf)D5mJhFreYE(iF!a
+,D918ha'-5VVURiNRAIjq6PT[PTKAf@i&aDQp9'dK*-B8%["cT*1TdR$hAcZArMq
+,d[RhIcq(rpk@eV02SShKH*P[Gd[BHRmM`me6h'$9A4NI-0Z$'TS,ZSUHJQ&ir,P
+mU#SZX[MeRaqV"6@[eDQA*R2RH6Q[Zhq9ZpjfAhI$V0C(VBrKk191bp9"pG5%Ubp
+R'e4D*G4rq`I5-a1U#22k!#(#`EU0FBrihHeYEb*06,YH"p$S*k#$+`A&,e&KB98
+[9IjdP40e2KF$GH$mHTjkZM&P8(d-[JP8p@FLf$YUH$EkE29XEPqFhABA(EmM,Hl
+bP`,rRFYiZNkldrLq((MAH$(JiFHUPrh,L-QVJQDA5QG&i[E)d$62V#qqX,lFFej
+20G2q2dXj(hIaIPE@XeND0'm2$bZj6!Y9(fl*CLrFAeI95p,AdZPe9A(X*`AfkTE
+VJkVGfYVqI49@bQ-B0iDldbUTCH6iI$iHUiIbFhF$&jkYV0*ID6J'jlIAFIXH[0@
+Sa+q2XU'IZ,kkkhTI%rP'i-EV[1q,dPpZpr*MH4D'5RaHaq0q+"eLB,lN$"!i`jG
+h"PkZTVkLGlIHI5f([DH0hRDlrP[XCD0P[aBHVjU*PDZ+j(r9DA99@GC(rClV,`B
+*)"XIpE"eNH#el[Gh9V'Jd[A4p+aHi19YIQa1MTq(9@96QXjF9%jj(!hAhFmf30G
+"YAC!emI3lHil(GGCbr1Fr8jA4G&`15rYP*1ITZVj%HpmlUrGUkXVLI&cmM5`D99
+qJAk+QQkShcB"G5l[59-rd2KHIrAfY0PILlqUPp9Bm'cRCI#ZUr(CG4fTXj95qb&
+Yp@$ChQAJpjkMaNSm(@CHKjfSUDLXUZ"p#cQ9N!"SXT8k+iTE+6`q"UZ(PFppHQX
+kPlMP`irBfTbCAI$Ni-HKap6EI(bpERp&E4ZQU0ebAP`8peTI5kl5hN(-(@"0T@$
+GI41jFXCpMT!!B"'p6[UG,3em&eSUZ#Qe0A938-cdr"NqCSVk0c&CphR)*RLD)kh
+5@A$bm(rdI99Ga`lA,hFR`Lj5@r4mIcF($YIAf9V8EridlmMl%I,9IpmY@e9jeNS
+j3ELmd9p"8C1[U-'l`C-'8XkV*aUh5AeaJqP-dJY2XD@VR,#[JVi*[#eXDSi(cp&
+Zj-RZi1lJUHTbFE,E[S,8j4lV1bE@`JrfkZYRH9&6"L35p8kZUHkbPUPeXe'k69e
+0EBBqSrYjpEjQ@qa@3GjlA3qCPkhB`4ZcX)!Ed!6fX25i1eJlk`M'S@XPk@"@ppY
+UVXl$P!-6pG,mRm9hXTGI662kH#-1XZS*I![S+HC`-'a+-X[SUDNbG[5k#AmL$Z0
+Ad9A3`F2"J`EA,j,(aCr(6YR`kqlJJ0YflVB%U29-5I&Ph@U*X')fQ0"KGEMbe'5
+$Ed@3!-R4cYRZG*!!%M+9H!fe)M#EMh&K`q'B5ANAUHV&TDi*bJ9'"2fYA(rc"HC
+@0rrPlLGPm#ZNh!R-TPXR@8pj`kqPbf2V)d'Ni&aH8dc5F$")[@ZhlZ`Vk508fI#
+hXfGXll*hF"MG)"q2DYh1jGfkRmcXXTe8`NA!*fA*UiQihAm0lPXJFaJalU66&S[
+0brqfZ@DRG+a1dkKaG5lZlDRCIb1pRjPA(rqd8'N%pGcXZqJJi&p88dcJFjB9p,T
+%QlKk6Fb$9#DPfZPJi9p6@Fp1Ah"cY0AV-A"p,-6"1heCZXVA9HN&B+#AXM2XC@$
+ST+*5(Qhh0VZ2iCD,Mjc+QPmLGE(Hlcq@fA@3!([9mDTcG5DfmQkiGA"XVDAIF1[
+1UGd%b#pRCGAPB0eT-Yqh,hFr"SXR6eQ6i&48c1"ZUq#IPAejDe@6VUb$,9229P0
+f(eS$NpTIB1m2ARI[L6Dl*k@kd@#DKH((mM5(XVHK"[+QA`2V&%j8*6aj+hC),aN
+1bS+HHdkUA(T1rMVcpD8RBpJAZX[P6XmB*`1k@#0[I1Pme98harMdZLTV@QJ[2jL
+DPm#eV%Q["Q-6@NUXQNdE$-c"R)e9A`H[mmm4A!c8%lR+FR2DqI@`C$,`3Ah!ZPd
+kPJA[0,BAdIGDU[IF4DdpijUTUS1EPC!!LeQ4RE1EEddXbAph![%'P@B9,@ld@L9
+%$BMP,dD#U&A8@IRCVRa9jEJ6j(ZXbIe+E098[dVAG8p&T-PSY`PG@9eD+kXV+Rj
+(eZKNUPZQJMPR,&KJbkA5hFZA"B5EUPMp)[K10(USeZVM*e20C1iMARBc,cXE4p4
+CY6`)A9A-#2hPA698U3S[D5,MmF6+-Nl&PPGPe8[cDqYVUClLkGXE"h8(RP(9hQU
+25Ei@F(re413AArhA*CCLCZVU9pdT5lZMVFY!iXkqTj[P09*Jq5PR@eeH"l,F!q+
+H#C2Vc)@QGJR,UC!!%Kc!JY11A`El*e8DXZ-YHHG-h@FbfPX$FQMdqANNCEZqU$U
+j%2rA1[DAK2[aCfCZGaT)-Y4cMaEkV0jh5k50JeZ6TUSR0Pkm[HkA59YI"@aie6S
+*H$"P*@MPkq$38pVml+j'$,q2cR1919#CT)mDPhH1b0EPULq[1"ZNYDSekkDR1le
+6`"0)TTDlV"UCG[T),M*akr'jc,G6PUbGMF2-6,Lqi"UD@[RQ,AJ3AeESY*NkL06
+h(961'TajLfA3G9ddZFTMSb0E$99I$UTN6,9YpT+c(-AI$+IUDee99QY&j0TDIr3
+9MfZY,'Vi+b2(TNZXV16,k0f04'mH9"DG"@5p(,lZ#iMjDPhFjPFGT-[qLRUDE*e
+`Y+R+RDq&T@9N%%mAp)-'iUCfNVS+'YU0"QjFl8806,d5@#Up)fTB9'NbF&Y,cCj
+1@,'dYXhd""1lZ+AG8dbUSSX&`Hha1c,fUPlLGXpl"AeKiQ*P0G#`V0,PY&I"Sl)
+QjPR&MPDq$*aipEPcbS8dVTkIJI6JmHRVHJR+H6mlRDNbF3E@A%UDLHc(9lVSDUT
+h9p`!G5H8JZU`mem&,De1BXlbqUC9j`+kKJ[V@eUUU$q%LqZ+QA890VZVEZ+ZATI
+NQ'lGIGc(reG'VEM5r*V0,"mQ$P)fAbfPdQUZ,[2C1P1%'*-TH"fGAqjk@&0'UHX
+QEVP,cZlVJf'PMAeaNmY(Jlb`JUM128pCd&aIB0jA'i6Y5T'9bN(mi+H#A8cX%Q6
+S2+&IcPC([Z!I1R[jkQk'SQEV4A%%&0bY0G4i,c*jE*V`Kkh5cR$UC9I"[EUQYE@
+#lbFl1AG6QTHLkb@jK2[kQVq6bR*GS9`ddZPRS*b$qTLPTCmikmc(l(6eGjFH*6C
+biZ-c'k6k(9GG8C[NcA`c94%N`F224K)GA@9'4R+I$Si-e6j1Tr*8fZYdFIEbB0C
+"`"59@B1l618XfC18XL$+dV[V(JN4*G,2c1fLDA*(aebFI0q[1iqEP)N%UI1a9`*
+N&GI8p$0l1FTp$SMjRlVP)P,"*TCXV(h96NSQLTF'RSi-K%!E%RkDP2T!L6P619-
+jPCd+F5F9JFKBBS*'hd8&1!q*Pi0d[SZXiNjAKqTT@UAckC@$(bi$E"TCb1CQ)QA
+L4,@#RTTP0CRl!J$c+A99Tcc3I`Yi,VPCN!"[Gk#%`J`9-UcZ!Bk5HJlDiQ@X'$8
+3EM3`@ZUUB2i6YR%-q&K"EcG$`kU,2e@BQ9TJ2VCq9"CjH$F@mU*MjA!UiZ4Jfmf
+idX'jYqfdJ8-I%LD'#*!!4#1X6+Lr2ZfdN6(3C1PTG[1`biFEQV(Gma4cYC4cS[U
+1cLcD8!GI250R&S*&((QcD12[jY(Cpe35*9I&PF1Gp#GiIS9rSal2`+#4&TE(AaD
+AL@'dfPKY1*Y,(ApdIDI2@9K4fB0D$Aak1JpL6aiXl*irX4ChAdG,0N8&I&N@FHJ
+MdXHJ[V1HLQQd!S%*8LJS+@HS+@`RYY4dYR+X)pP4f0K$b12FrDKaV#jqdI`Nj&"
+al14ajlcT8L40lI'RV+4C@FHECepH$ZHN6[(S,RMf'0FcZaRZ436D#90Ll5E(P(q
+fH24fAE3mHjZ6r8Ge9ceprECpcJhhpT%Q2$$b,#('S)R(QbYT&ZZ2CJbS`i@[E(m
+h)H2(Qf@0FmL''jj((Ak2(mkE+'2[MqJJ#d))EQb"q[pm4jZ$GFH`kc'PA0K&Sl,
+N3cD1E&#jAa3a!IXJHa%-13!ZjX12IE1qmkjj&JIK#IM4$a`2f9cb,lkHcMb+@cN
+IkS+#,AKX"aapIAaDr-cH2&lfqpMMfFb9m2q($prMcCfGpMKmHPipKaj9(&f8pVk
+#MQdG2Acf[XH2B9mUIfYeB@()!61cYpl(RHMm1[5+q(+iq[l+aVlVMp*&h-L`Skq
+9&#rAbpRIB0IUUrMlQqpVMcIm6*Y(dFHMP)`8Fl0Z12(`GVDaH4DFLHlHJP8YI4b
+V#HLemhYk#[RSpI4aC8p2El1ISp'9DmIU,'9+Qp(($-85fFl4aD1,)MaBmUPimUq
+SimH[TH2CeqChe(4fYI&r,4r[r,FHGNCRG8%p0rerUMRBY,rU2FGc3@((Qp"M8%l
+0QdYR5akqHTChTTqURU1[fJDk@[S*lAcdH938(kDVpAkBXhcV$[l'4AP3&R2aiXU
+1($Md&((lfPlU4+lV[C%leGI2HaeGIAd[)Xkr-EqMc2jYRB3rh$E38%l)S)XIQk@
+`[YrM4jiTpP"ERNCkrE"QN9p"4d&,+TDAd-KYl2D8GRll6%&kPMNd+$N52!PdF@,
+5q"+S0Iaj(bl$D4r1XU$fT[R@1[MdZ[RDqSrIB6DE'&8%+HSj&,4d'4Qeml)TGRk
+2EdGe)RYM&$E3IDb(*pY35+qP$40TDA[D#P[Z(BE'bVk#E)XkqKRIMcUZ64k8V8R
+SXpB9mp28G"B5)XpaqjNmHJZXr[j%lGDqPTChmiEI3ipH,1G$A&LfG,4dFAVjf4D
+8[lpa(fC(fHq@ME5rDTmV39mHJS,1[TD@a,*iNLkQcY9mZGb(`fR'JRElCpbMRVl
+2'TC%UJSjkGLaD#23&l5HP@G(1h@cP6a89&r2Ad[pZE`Sp"1SjcdJ50()MdF@klQ
+HN@NME5)qeRBXp2GrI)k@D1P,3#fN9me(+Hj2[jkRk-(6Ta4`T3UdXpBep,r2"pM
+Cak9i@)Y"4b+1XSjkPQ5)pR(fSD*fHlrI)XIDbV5ZASV-+r-6Vl,'qfV5a)Lb+#a
+NFIChfq[Lq45d&I3@GQ012&Xj9(f0(3#`)q4pPAl8QG)VkrNjP,Ab+@Pq(CmH`Xi
+PMajkJd&I3CAZTkPL@GI1cYI5cfrZ1kR559"BepR4dYI1qaI5*Y"5dF@PP9G&NId
+ak#4d-L41f%fJf8kLM5epI1k!+0,m2Y,#`#G38Ze#*Ra"9l5Ch1eRQ%d@`6D@ciP
+p$$M@5Y5aVQbXprVl'cS*k4G"IQf&,,Qp[+-CpRBaE#P#qLl2E@B8Hp(VTf[L@0p
+k2Ff&cajYaAh9MAep"a)Gp+[KN!$6K2-1'[R[4eAIUYB!PIp2KarBMm1MeqaXE(L
+Gcal#aep(&$*)VpYdC,2Mer%[[3k(N5)pVjf$5ceR&Lak0B!1h*Ld&RS,#MTGT2'
+0F30(YE1Pip,2G(XGPqM"rK5r)r[fFV-d%QKqR+r62ITMi1ANh&AQ5i$4qKAjRf,
+l[GYk&eCkqPc-LHVj"4R2A4K!T8NQ9a8&K29pPFr)lMl92pVZ21[X("N8ZCSk[d+
+hZimhYk2"Spp+c1$hYAk&V)Xl#PlUH)39q(XllkHeZUA-h9,34GQ@`4k@HQd&edR
+1d&KYm(Ab*i6mU3A+lk[KN6hGE5,XppZ"GAhqSq9TG""r#VS2p8HJQH2(RU$kGKP
+GprI)r6iq[NC9a-8!Q+1[N8(V9q(qF#41kGTE!`&@9cXpR5d'9S)2Tq&Z*8@DX*e
+R1bXVI4i2TcE#`KlUJXS4+AfefI0d[05+#baSZ0"CdFf90QkqM`GH8(b*kJViDq'
+DCJpM1b",d&e1f1fLlkccp,h8&CYU23A9pf-UMTEM2h9prIRSYRRlUcRD#[Xb$*V
+ABePb%LNNk1[+h"*dU#[IlADdY"Rp[*[[#PE-f%-rGHG*`@S[AT'8H$"BcXf2&RB
+[(l+6CdF8Ja(Vq2AbSDr[jfGN'`rMA,%0r#,[Z(Cjq4F3EE3Haf-UPZ+22rijkMR
+V(2a6@3Qae"#(N!$KrMP,BIYa$MA9IApch*(l2dXQkSr#fXUIfNV2qG(Ni*RNlUP
+NBHchepI34CkjKim@HLcC8@,)iPp0Xim5M,SC*bEAmmA$j&IB5+AC6eM&Vpp`lLc
+d%MXBSJrDl'2+M`A'JkQVRCYPS!A6Y!%CXPQS@8e#`ifcVqrfF&"S)-VGCAIpc4d
+2k0"jf9`Cd%dUcNHeYGRXThCj@GSk@HRZ)5[01FH+-qMim((MfFLJN4+q4CpU6S0
+-((,3GP2G44lAL5ElDc2mC@#[lRf[m5T2pjhDp&1ceKY5qXBZUqGRU#cTIcmpK+U
+k`XTfGNdZeNjrCD$dHrMeIkYUSq6[Ib!UErDlAIQA5H0JSr`LMV(McH4&RSpRCd%
+MYJ3`kmQ9Ca!kE5JlUMfZ(AepprV#XCfcS,#[ICUl4PM4QJhdheZdr2`i*l[dAVh
+R6@LT6BlJXkqE(VClE8&R3@GJQHLaAepRal2D'aZLeb+qq`V+GX`TFHPXl!cT5(#
+lcISkSLc251GjlMmpalh!4HNd(IfHcf[G5+A+dXLH#jCFH,,pJfH+qPZB62cCcbP
+`LrClBa3KHX+qqaX+`RE14$al"ES((0`#PbSB,2EpTk0Ia$!r25,'a4EQ4qrRDrZ
+Uq61b-r)1$DRP8Gc&e0I4cTDRAQ98i&jf[VpY)RE'cLam,Ch@rpDH+q$!-$#G5`V
+paFGeJdXJ4Q$Ai2jq*l'IZUA[jk[p'MQ4Fr)#EC8FpRpVAdCJLQkmN!")Sb!Sb1d
+fmJ`GSTEleZ22&(FU,-F+&I`qk`C!8BChD0+FVCh8MppM3GrK4lUHZV1iTiY(4d'
+JfIGF1[#Y+p#c)ZdCRh%PfQjXc6L`U%5D#42A6#R5P"i(h#G0Z,Uc#G)TCf'bQ8X
+Mp&,F8Z$cHcS,Ucl'JTbSb25KE`D11F$R)N%3L+e+Lj+l@cT5jTk0aXm'cZVlcVM
++mI[pVqJe4dTPCS,UHF0!$jk,FI$pMSrlr$q45b-(IHaAlk[e9a5pcYV2pmlBR$*
+&VjNUcfdMqmMqq$m1GjZJl''PNcX8j+kAZX'G,M5iHk@GXkqaP',,YC&(+jRdIlr
+hfHdr[S,M[lUAIEDJ,-@(#H$D@5c3i&c[qr4qIhAk2Pc[Fb,2qrRllCpM&r[)Z+A
+IShepe)BEI1QB2*cYBCbFDPLbCii*T'fRD!kQmm`di-pG6CXlVb3I-l@Ur[CqG+$
+M(d&VAKbLlDPLQZj0S)kkNY+EqTIG!AAa53MKhr,YDHJPI60)2RE5[[VU,Q[laj&
+`GDZPpUH+QDqk5"NqGJf'Jh-p&TCdkkFJdk4BmhBM%PE1aS$MIVjV8,2@G(+Vm[P
+EVqrR*ji0e*mi3"IcQf%9U!RCT[NQf"AQ@qG(cGIhd(k0VqMj%p1j@Pqe)QHGY,S
+5V6pl&(AN6*hAem0bS!rShh`pR(S+-TPP##RV#2CRDMMcG"$2@'r1dYXl%biemL9
+&SlLIf9!3)bqIfApkVp%ZkfhpiqeYSp(N,UCjffN8FpZC%['Ce'3N6DqPSj8l5dF
+fH+KpPrITY"2rSr,YCrp(6I),a8UHRCfC)PdGR(r4YTTeE6Tb6BNHqr[Ab1(5bX'
+aAC6X0IB``lH,Cp6&Xr3hjf9k#8GV(QC8HHP3bV---c'RT9LC(E1EVcBKX)XfaTB
+[(RHEfAqZ25aDqaMcBr3jrCh@dkQ,4mck'Cfh8eIFpA4pM&UVVp&$YkHJTHpP514
+4RAR"4apIBdZ3!$ASbHdkQ9p2Cd(kV@VS2e5[TlA)rUP4k1MfGmYSIIGl+LfY(Db
+SrRG64jHcYFa&Tj%Vr%X[jE1jijfI*b'MX+2AmHRj&NGTFjG0"+Mf+jKpVFmMN6Y
+Rl-QqNR+SGUA'KMb&XE`d&Pb$PNhf02%J)FR1f'0Y2daE+'90P(-aM(DGaSmhCh@
+[rH4bZ2Df1$B@F2pMH4XX9FXpk#'jK4UlChPq1AP$AMf9p!H`89G`fA)SjXf2AQp
+rX6rr6NpI[V("X2BXT9eb$D3[Z4&PFMMf'aX,1bX[r6[(1ih)RCk20PFGFcdLjXZ
+23@&,C&bq40P@d8M3AE6R&1FN"LcMcXmZQ5ZYp4R)E+QdIkBmUMQkRp-H2[TAXRA
+61PbJM+LheppVfCYI0iRXbYrfrDB8fGMR*h3FH9Ah8fkrRk&Rl2S6HdlUMiIV@FS
+#pR5cDq9YpY,*Q5TF@2UITP`kH1NV9P*1IN@&KAie,+1(ZD3lipMCBh(XZ2+X,Qb
+NBecCcf6jhT1aZrbHRrfMj6SIREAlh!aPGeRFR1mP1r$RHGRIL6ZKRHPRGC1pj1l
+QGmqGpkUjUCrpdq`lhb[6[rGaMA#jHHPch26eT2G02A%p2Gj2IJR[cchSchpjlM6
+p$2cq@RqCRqFRqNRrQ6rD6rf*rmNrk8r`iY,&q(&rqLpE&lQ,i-AbiYr&idM2cGM
+pRm[THp3C#Jj@JdG"Uk$Zk$Fd(R8(!S2BS2GS2qd([d0(3d2`U'dSG(3r-SGI3lH
+Kqc3q,3d2l+(h++LU+,Pk,RU,j&&mZLqG4E'Lfp&q'LmfLi&&l&&Kj#4N2KC$RFK
+S-KSmKSd"(33r!Jr!KRXKRXKN0TN0SJ)k#-KHC#pb(pXKm&((Smh4r,SpK4rDSpj
+4reSrILC(+C(QXMmE)r1b2e-MiQ4hq4raAmVdA9E,`2crerpbAaqSl,EICr,q[qR
+r-@*5eP,bY,c9,d&,U+AX+AC8[ekAm&,jY,k9,J8[rMq2f6JP`G$"mU$9Rb#AFrN
+jrNU$+ceK2emrP*q6N!$+d)")XQXVH8j@,5e90%UXM94m[&UBmr*Lb6RBj5Kq&PB
+Y(3eA*4FV3mPPFK3dml6d993C@IRk@ULe3!iY924+UKL98r2C@IUN'Tl+6mLJNKE
+$##M+6p02ajr+Kej@IbJ%,!!NQIV++6N-TN-TN!$i8m!DIRUUUb13!)Y98aDN+&6
+29-qHm,8P@(*4Db,96S%iY22djeP3%ei'B`$DVQ4898@Mb'8Lajl+6f83%B"Z8$j
+B"m3%TJq)#C4(SkCL!Q9SUR+X2D!Q8%[,6%3%3%(UN!$)#9-i"%3$SE5@V!)S#4k
+bUKK[15dQ8aV$[Dr5bIHNIJbQ-J*)r"@`eIi+cqA+@2+Iab-2,9@PUY+J*9DANZ(
+83alQ4q#4q#Ud[+I'jMLj6'b(LC''Ueh*D6+eU)q4KT[%T[%UY+J95kB$6`G23+U
+Y,NBFM$NBFTM)'C6'$[*$VfGIaXRqh+p(*pk$[UVMC@2HFTlXRhXTM9r'"$mDV$M
+*pk6lh`Zp3'V3He@Z4G4(UY,83e$!0N@!K"5SKb(LFPT+X8U$&2C8hLFY(ZDL'[d
+Y6c%EPNS1Cqqe&C!!m56ldHj493%3%j6idMm&IaUrM)#3!(I3GmJ*P1c5,bQ-J*P
+-DS&dp$#mP-BlVENIJU)DQIUCp!4VR5LDLQL*+5Vr"9rJ3%Mh+$8jrlp(mJ"bVQj
+ZD-!N5JZFIN%#1XR+Z,X1CkZXTXM46Q3L5*Nj48@1SUkIR$ilq@jKpKHYRjcPAl#
+Nm"6V+b$)j#Fb%iq#KpK4&2PU'`kY"DGSd&XJ"DQLcdl%jDLNFcQUZQb6`-6Nl1a
+D#,2!aST,r3e)JRiNP`1C#GL6Y,2d@3&Y16Xp%2G0R)PG34-K%R)3*aFD'ML6N4!
+U)p!TJ+3,!Bi&A!9%RBN5'GLa%3(J0b)@N!!bGLcL%S#R3@KbJ@`'6N)4TeJ,RBM
+3C2BL,dl1a*`"Y#`kJ*R)X5LLA@bRTb,MJ&Z!b((3J-3Pad)M8&jbHB)"'!iR"%J
+S!BJA$#JE44-KPTfYT4)Sc4D&+@*4C*d+)*cX5LTFSq#4p"%j``)cX@GU(3K3*d6
+dik%*qJ!G%L9'5&X!kK!lMN$h3G%RCbFab4I*X&iJ`%BqFa`*BNkrJ8B%kq,3%@-
+G3N-XG2e%j)$"%SZ64`UjfGUk((4+p4c)J8A2jI,h29@%@FLeHSZEQ,FaFGUlR(d
+Z4La)r2PAmm1kJLBl2!,ab"8kp!VR9@pMQ#"J-$i4*aml%ab"f1+QKl4-I&LCp%K
+d(iq*8h)bYL$b*%Tj`NA%j(-cJV-I%b"qiENKf4*fIL&-&#3!*`dN5GakQ)"LHMB
+k*RSN562a)PMe()SU'4kqApb*MTcHpYkq2bA#VU61aEH[dA3DH(bG2q1(i)EhaVh
+#hQ0aXD($piqGR#K[FA'pR#j'0JBQla,h!aZ[KkcMB'mZI)aBF2@BPPj9leH"eN1
+0pZ'pa24iah$YKBh2q6jZYMaIJKp2A3klLk[&`,R'j("kA1EcY2'q9jRiIFrEmE#
+Ka['hQXplBk[m25qhh80"dZF`,rf[Ci(GHej2lH$Hpp9plh%RQ2&m$md@dS[Kr#`
+q4Hr0KKqRYYYpIZq`a)G[5mPk[`B'0XBGCF3iZ3kcLF6cH4kA0rf`qqlAaBHSpEN
+GPeIAjEDH2jZ[epA(j6l@l`2qm2`iFE-ihbZJXSFD*%qaFiN1Zpb(#2SGrcHqrlr
+"lAX2-aYGqRmr@kILq6jQ,LAYl$Lq0KF'(!r(prdF5(er@KZF6mI[B@&J3`iA"a2
+9ZF@(#ZEQpKK"0V)E,biHZiel[p(hILrpl1ambpKeQ($$ZpJ"c$p-rF[KeZ"m%1+
+3!"YM#'Zp`lf(iZ,XIXrq[IiVkQmAT6aRFM1Eb(lIUqcifmh10aSI+p2$a['K`p,
+UF+'X`0jHiI8)6`iZ0[-AX)IiA[QpGm&KrYIA&m(LJ@rpNVR#X[+p(U0CUXAh3k3
+iRAIM`Z,e"fe1$$lrQBQmKf!VSGMLB(iEheX6&q,m(q2XIJaE+(X)BG0Z`lH"L3p
+TLq9Fp4V0B$h'pU'%(Z,e(&[Ibm''(TGCV2HAekP&d1RZIa3mI$`[4Z3Bif"Hqjj
+3DF2hFA$if"Lk[l'(V-j$LH"$Lq9[,hLh2"a[B`)Imp2IiK"R$K[GK$kH"lPPb,,
+jrZqPa)H0LiA6IB"eHqVLB81*LHjFiAYpKFiGN!#cf&PlF2M3qeH`qedpr[20B1[
+qB(T`MlqAq'paI'efRkj0VVrH`SH`l$hFE%Krq`Z4K#YmE`a@i()([KkcBi4)L(h
+GjR26Z30`qCKI1j!!)2&kkr[a9BhUiPlkRV3qK$$k[@rJKi0rfDkP&rJIChJ+lR%
+krphQG4m!kr@`r*f*$V'rMi(fBHMqcLq"JA2hHHKlk'(bZ$T-,aYjrc'+!-5pcRC
+,q!r'[rXr&[F2$a)I@ihNU3f*m[eZ`[l(X1-5@r*MBf&$a29f(4`iRirfq!`Cl(J
+kc@Bh[ArfHM[H$KiPcq,X28mRcDHbpbrr*l[XmMf-6c-ABB(Zf3024rqmRBh[[%R
+00qle[6`09c[ZGILrZ`#R(&[pjfGlFq,KD[aGCT['lA$phbZcpE1HjmV!Ur!lcr(
+Il(hq*HqpKrq`qRm-U2a2pq9ih"KeQ*Fe2e2Nl6dT2iUel)-0ci[ZGGe[CqYbeC`
+IlqVf2UFee[bVmGAUp[X0jl2F`lcdH`[qcqhMBAJHeplq[Qi',KHeLihr[NjQrmV
+Fr[aF6`-AirSB'*[1cpheSHPp6q[UIVUIPf(0r8mV$m6jq"rb%YemhkRZGRm(r-E
+aZ`mEBB[hVh@IZiR&pc@IdKm`XF`[dGCmrpH3!2MiH&rD(bqVkZ(pfZcRAh[YqYZ
+iFEfr%iRpFAVYVaIipA$eKF-Ki[Cp4ihVH"kH,`F+(mRYHp$jZamcjTCajT1,%VH
+rl((iI`iGCHrhhQm[H*m[phUq0m&lq,#ehpr[rf`rFVFrLkA!mcqLVd+KIF`,[Lh
+1,LI*qe$JBH"`I&+3!,$#jFfZUpEc[kp9$lf(b0*QFjMHjr6HDZ(6JCj'QVI@aG6
+mhBHpJBIPekBrirRB[6iQ"TiH$iIe2-a,h#[I'k8[Uq0Hifma+hrre2VqVid1Xmh
+hK"iIbrhId%(j@&VXErAp[6r$pRif&LhZ(r#(ADc'`[Hpk('hRjZZ,6F#j(0$Zp2
+aLjb9"`hYb9-pQ5(p[MGIqkjkI&!k,AaZRaBH`"$Y8Irqp,cF0cV-'jKkIlAj2GK
+`bCKI8pAm'*X3@&0f"$LCRQZ[p$d)I-8!rF[H0$$hZ2Kp2flf(hF@'(K)KBQ*ePI
+$ih)q&$lZRpriPq3+KiKH%ihYpVJ&T+YcKiJ3rIll`-2h2kE[BBZXpiJpJ3r"jR4
+`iYljKI*KqILB'(Kql$Lp4d[6X(q(`F@(MHjVQMr`-1(hSHRpr%hPlKDIb1[kAi-
++rCKii[Dq!B8!PG@N(i'"jX2Qi9lKD[TqNpch)5rjjGk-(TIP)1B@a"IFq*ih4Pd
+rYBIXr"$TmEGqBA2F6fcr'H"aM"CR'BB[IiZ,K`i[PhZ0X0A$Kl#'r-"R5q,jKFj
+K`lfj`,QpiZRm-M6jQ`rGHh2iBI9pB6H,aGMFNV$)9jYclf*l@"KH"FPS-2iH4Bh
+q`#(M-)IMGK`GM$hqZeh%f"V[H*Lf4K`pb(VX6&kM'pEe0h$l[AIKa2+)bG,L`rp
+KeQ"BqhXF6LiZ"$KiI(lArIZ3!1m`Z0lF2LpVJBQ0jH(b"hHAlYlHmAU&*Qpf'%N
+2mEVHPKih0HRLrYl#(hI'2r)VRHBAJDZXp1reR83lb'(h#@(MAZ*if*HiN!$Lr"K
+F(LHMf'akhkYcLqRXI!hQm+TVh&@JcaH`m6k1*TrqpGHhZl"4Jif&jZVdf&Fi@mr
+#bB("kM$ZHSZF2U1*eZ($LFA!mEfZri2)dr`X,%m6&mCDcd28B4H0pAj@"TTq(HH
+pqZbCL"pM&`0Il2LqY$ql@G39CBZ[hPlLA[M3i(MHq,VhIJpVl!L-$VIriFAJpUX
+AkMlem1,jRLpD)L(M#)p'(#mV!plLEr0GVaFEV[0aE,RSGGUr6`[6aERi-@'rjf(
+&l$j2-Dk[efDrCdR3qYlQmi*Mm[GLU+FAVYl%b10Trfp4rhiQ`rIa+$l2+if&RZe
+jEDj,fG*KIaRFELE[BC,kI6mrZIVkIpepi%2UHIEEAGHej(blV,Dc438f2r4craZ
+Lm$#aF$!a2+`D$3A[,IhmAqNMQIDl6DIrI@5HMCqRiRi-2%qCTI@pEc2+r6c18k6
+i[,pC%rG$lGYjQ*kRUpG[-2rrAIIfhFBkjrcpcdFEhIHpkrrTQr&l-Ka`I)pAVNP
+p2q$@BR@rr3qlaEZ(L`P8h"mEhl*"Mdr`h2BId0$j!('a[*pEeF8Xeq@JcIklX$4
+[JBL"Qmp6$jiUQ[IIq$YF6MA[jZ`(CMI8rYFDchERXBGGMB(Qr8rYUQJcN3qEp[3
+FeFm($XZ,q,rreH[iZ*fCC[$r3dBmAi2F`[6dfQd*[`kE6G%!EYSN5TdfQdeR%af
+QdfVF#3DjkIeG[%dd6T,2q(090,mRlN5*24*cYTkrmRSDr6kA63DE5@F6a2%L@A[
+H*h@*ZCb$`[kJb-cIDhre'JRBC'*r2mZ`[lqrl(YErqFIqG9V0Ep,EFlp6aErEEA
+@DcJlA@mRYGV`H"`2U39N&r9EB'A+E`![PDa1i!ReFS!A+jR-jQ###`L4"9bSP2%
+LBkJRj8M58d5eJLEI6cNhKIBU*'NRTqhXl5GRDQ9-TC@jRp6"d86KdrE5lUILik*
+'LARm0*26hE4C'MRjFjNjrRTq425D@FVCf0"+QlhdSQIJh0RJ4jpI$J`48ZNrKS*
+qNZ+H#ASU@6Dk5NSTfLRTGE26[$lE56e$%e-r)Q8X%p64C"p)F%ZCSCH$d-VHlR4
+j+,MiZpdHkhmp%fm@9Rjk#F2r6Y62H[jd'jJq28lLiVifTLEhFfQ3!1&0YrAcm'p
+Xk2F8-V2cP,"Z0*%ra+QhQjeFQTNaS-rkp`ImI8P&&dQ2LiqNRTGC240ar$Z`8`8
+[!TG*%rc)QhPZd96%+SQTL"fH#QlB+ELPZ*k*54iXjEpP,3UYGl*VUk*RiRVq[Sk
+5$4dF@LL42iI@LcN'6RB$l!)PE5C#UJdHIJY)-'0A6i+mFIU9dN&Y"19FL$V))0&
+9b+5INB06)hXhF4,MG9-QVPBq*&lE3b2V81EZTN&,Tjb#!m#-%D!M(%[YckqkZ+R
+,5kLAAKjqV&Nhfdl2PHlJSCF&YdQTJe-EQqEjVPFcm5bYZ0m1fJMA(eBd&a6e-(N
+3@YC8bHrJa+L#ek,kZK+0+R,I-eAa-'VND1VJdqJY2Uer$NfPTNp6IDHeVB1kk+V
+e-5$898#4P0(V)-e,drI5G&dN(c,U0"1h%[fTrBdeVUDI2mr-Vi-R25i+c"JY+A2
+`IVbmDAA8PA(VG(Tp(Rl62kR"VkkVYHdZZ6TEV%RB+k6Z[5cF'8QC2Q+D6brUrem
+cXIKAqRMaT2Geep@lV4aVA4j1TNpc'jfScH[U)+MZ-YcmcUHc%rGeFV8jQrV2VCE
+e[8VH@[ZVJmRp%LFUHidp6FA94*UVMXVUkJZlM4r0lZSUGG"ePaAGhSqdjk2Z02@
+h'TTZrkccE@#$q&R"PTIre,UB2+dphm+ThZ$9D24f[mXaJepC'UZpTT0"Tpl,Jm'
+QiIl0hPjQIf(q1GmllZFNmRZpjiI`[bCZ65`IMJl@ScPIRmrJm$lZVj@[X+fdcmD
+0*d&A,JU1bfRCE4!5iMfdENVUfUjHJUmeXBReHarC`2b@2p[@U[9[2p`INp[V)N(
+$,L@RM`@P6bm%DQUEUTZVkk[+RZ1NPffJMD5fJVq9P`3G&hG4Pj-($UYcTkEYD[0
+mRqRf[dGpALiN6DR0ma'qh5ph"f@CMph8j6dqTSi0APZDbHIjL$"[1i#[dN'NdqJ
+d1Te1IR+LiX-hcPCqh`r(l(f1UjIp29FRiRYIFVG9QFV@raq[h(c2Vr5YFr"`VV*
+fZN[UfTNeYE9Cqe[Vc9jH[MCUTfNQlJMe'@c@@c5!NQ`YBdZ6-JZV6*hHNrI38GT
+PZ6rEq(R+hUp6qRmrQe@m[2apj,hAZqpV)KrFJY&d"9c89N&eJpC83DHXVB+RY+B
+*8Rkr05i1lY!3@ehNp2hGK8bDUMdqRmUVU-jpcf1KlQZYFR"6&L'[bIre,hG6Qmp
+"jX(m[5dh9dGG9D2lR09YVVaVRk!m1TZ1(-dpTT+M8fYVJaLblCjqmr$f2mHBXE6
+b[VGVMF(leDAcI(l[fGMeRXh0G-`E#JJbp4A3EV4i0V(MkR8e1Vl5VMCS4+E1AU-
+ZJ*85Dq$e-h,!M*j@SVU#LcqDj2pYP@rTpRQQYIr%ZirAc2kH8L9@RJJiHkU0AG4
+T)f)eaU4%F1$6depG@PT9MAZl5#YJZlZQ&&1ISNHIc'Jp5VM9Ar[m9RbXRJrHJrY
+@35*b$kG0(Nr`YDM0mY"b)-[T0&e,ifS,U`JdpE!aXepA!QaDhRi[,eh*j6p&Ppl
+4rQjE"rlSS)2qhE'aJrTVb@90Dc#@A-3IGZ1iM@94b9aGkQCUE3(9eD9%N!!(DC1
+$*kR5)(deh-rI36fDcRlI#iIjqTjcV0rJklbkhhV5UVZlqeEGY2jD6"BC1$V1LJq
+V"H4kkXkbVTbcK0LmGE'R2Q"UkQAG@&,"UD1,6GR9eG9q6"ie-0D4)pH#YmqA,rK
+DbE#$+k,YrP$4cl@MI0D08eS`@X&4*dqIZpeqIYHAcI,FYUBHUj6kZkrprHXV+kX
+X,'ZY[dmaEF1#2MkN0h$p2YDIlNRKfPeUBmEQjGhUB,#TZ06JkR"3%e00A3CI033
+4mRDD5lV2AYr8df@cQrmARDVleVaYCiZ[dI"eh5qKD98(i+[8pY2jU6A38bDdQ$6
+`@dDd)2`9(*CZidqTUkZ!6%($Z1("-J'RGlM"TV@[UZh[[cEVQ,#eTTq9439[pCP
+438P9ZZ(HF@aUDUlh&jph,FlRm(XkDqVUh*e0`AE+D#de-b0,M3AdDATmrJTVCc4
+q2qD`lI5GTbpKQpmaVel'[b+q#2"TfYRA8rkCI$d&A"h8EQj-B#1RM5p5!-Z+2E@
+`DQhkV4jrBEr`S1ekZ2eRKqIbHZV@YAMCf*T06""T)0DQT@4T*4&D%jp*TkRXjH$
+GPLpeB8eKB36,#$Kf%bZV+5Tbm&9pUqlMdmp@fZNRj@p[)2-h(C8&(9F$Kf'NrEA
+DGaVfSel`DmRSUL#ddE'[RV#0""UDRXi0eqHUqlbqIl24lZlir9Cc[1GX-rJrSPh
+PjIAR$`ITfh)YZ3ih+K-[NYE6rV'j!5dI6EcFY2Z#kbf@Uc&ATiZM'hIGV6*Z@hh
+HBdGV`GeJkrp%QiUK[jrYTkVR+M(h90"8h&jE3@L`je(*FmQmIC[`bNj0iEQ6U)0
+aZ,l4fX(DAee-[ZhU'0c&h&aT2i*Z6'0cFhPVph,5r+Vi0M8mY"IEUQJTkMNTI!Y
+06&*D2TZH1r'jrRAZYbkUELB8rdfRZ1EJKU*-'fIYZIbjU6""6D#ChDPYkM@j(H0
+cGTZFP*FEP,"0eX&`bA2$'iCB4Z32'jT,!aE3`C248XjSi+VrNH#ZMfXbRU5Sf`r
+VMkLQSUU6`r5ieGZ[2Z,KpY[53@%QddP08CH9UEbk0PA8`G["FGVSrbCcUZCcqUU
+[!QCHUiIEeeCDN!$[KhARmYhQGr"RrSpjRB)0""S`pF$k'DZ*GJ0bke0`brc9`AB
+!kZSJq(-!CNl$5$Yr2"Sjhr'DjV4mYSr*UHAm$r2DCrmR1Cr"j1ZdILDR4e1ZMqc
+TiRmU@mVmIG98($Y,#$8m1SNkRZi-R'c@6Y)1i'f0L2T2S5rSA8!JmYS[)L92-`D
+1Xh9aA9P9Ge-Zch'6JqSDITNL$KpM(TlV`kbddIkkh)9pESl@UYF(4i1I[+bYU,'
+$6h'TQD50cFA0h4PLfpV90PjrM13GTrkQYEQ2DhhhS1(`l#2A@M'pq$2h4Z*9%NB
+-I5@QPjX6*8cR,"VLU)25iFc[DURd9VqH#dRl(2jrUXTphPp'rqEA!b8$dfEUd-#
+-(!kQQHfcY0*p#i'c6DD9ZH2Si0(NkU#mqlfKGNh'ki%GVAh6M@l[FlV"r*c8(Ce
+e6c04cN&jF@Z$TlV8c*JeHHdmD#69aANYTMe,D2UAM4Up1C8Q5bbh0`A@IJUSfF!
+HDqGfEmZh'RpLQJdAc+fqU*&R-FPG*dIjXE6pjcZIqjBe$@V9EVZHUYmMB2E9iSe
+CC+kCPT-Hl9alk&ep$1p"RG"5m2Kjl5j#IZ1(Si#kp@DHlR+c)8dHrJdG6+[Sp1Q
+RDFEPb8qIYDV"[L8qkV+UVVkR@K-64d%DTPeG*"FDl4pPPmrl-DlUX+Cc&VFe@$H
+HE9(NLU[ci2imrf[q-jq22h"HVGP2RbS5$6eEV9C86YkEKfPiErGKDkHqe1kmZ#d
+R2CU1Dcr,k29jHTjI#rcXFrq5be1$bGCSr%YG(S2cehFp9)b-I*3EI@e0`9TF1SX
+ZN!#SU#$JGA-U$AG8X0"dQNZY*Y,M*@&4RY,ND6T!6D1UUC2hHdTE2)999P%h)2S
+98bkdPei2Dp"bGTElUq*BE'ZUHBU1G*BB0hS'Yl-G"Dk5$Er[UH5jI0rir6eHEZE
+AQG0XI"c1bcZRjDqmV6q9Tr+0-eSG63a+GP'jUA94S+Q6hCAmVqm&j@!$Rq8("*d
+Lf'1"f[!YU@Zk[jGTj%[3IRl1$bVlR1Gr08CVNirll6)cY6E`IEapeTmR("aRpTF
+@eA"8jLV0m'`JZS)qRRpTFD#fX-P(U+cTXM2m$G@P6,h@IVE5Pb'4MkIq-'IUC99
+TqUZ0"@@A8mPbH2jMJjqedH$ICqqY58d&hE9Fj9`8fNe1Aq*84('0Rp2k2cDEmI5
+D2fj026q*@rTdIjcKNdFRl"*XdZ8fRQDR8m0qQ38jcp4m+VdP3JIQ+VaDZ64p9rM
+PmeS2flrp-(FEl`YjJjr2pVp(AriPI`NfKf0VIBAA3A(!ZY66e1Gd%BhZG**qZB*
+q'BFIS@r5D#SdpYB6Pe@D++GF,2e%ZmY8amI9(BiXrZk[Xp28A@LifIdG[f2lZbX
+DRQDkScdDYJh9a9aZTNlFR9bA0FeGa-(cq5j2j(crmCEYFEkh,ricrlH5dQN`khU
+HAkRPqTNQqPp9b41FJZ,@$4eHGk5kHj%[E$mbVbe(r[jAXfhCpVZr[D,Z24jh1rR
+U1DcR(hIXYBFD3i`im(+$$FB6h)P-'md-R"eYV"FIHc8&IDrNNa1Aap0PTk9,V2X
+%LqLU*RX`FRMq@i+`UhLNA@Q3!!q[D9H5'--Aek5ZY0(e2Xr[mRQCRDp9m,fEApf
+HdfEkV-e[hXrjI8mlpl2hGVD'AYXLT,NLYBU3!"5*TG(G@NR["ckIJDQUmHUlZMr
+al2CI-mAXqKk6dBr)U1DUYhX2Cb-l'Pe!X02bP5Q*"(d%EZ&5DEJ4Y!`+3RCbq&h
+X(hBp61e1YZjGaEHT"AFlD8XlZC1Ur4,YjGCTp2eP4X+lS,ZQYqFj-B0mQ$G9ZMX
++[Qb3!2`kZ#RYIQbU1qe1IkVr(kIadf6rP-bQ$ql2Frd%(jUflr0'U#`4Pk'VZrV
+5cQ&-(H!DD#`0Lpd(!H,h4q49EhmIkHhq6d2HqAIrbjrm1Ll@SXHNl(PmDGRjHh,
+L#ATb4eFEXj2eB+M2e%'h,e&6)d&Y'j@Afh5DH$mQRRZiTY(AI9Z0(6pR,rK1m#T
+NrbPe9,[,5dqV'Y*22h'MR2"YF(2hejDhQ$F%Hqlq[mbP2D4YHqP8@UcpVrRp(Le
+AakEbDHeNrj`IPhfkUX(Be@$"6kNMSBlj2I8rH%qRaFP3GE"ZHJf&4,ZcMIl'-GN
+DJr&d9VDC6S2[3DIJIGbZpND5P`6IKdPeTkE6eF'Ldjh2S1IPc+ZM5dl+4S,50DG
+h(RrSA&EcmM3AI*5HH`G*BCc8j1*cd'NbHTbFD$)9'@j@dU-T8lUSR-ICmebYA(U
+qEkZkR)+R04U[8lM)CE0'5IXXVNelM96Fh"U-Jk6*`@92`l+#Ap8QQeDk+lUC0h(
+U*H6rpF-fQ)1"N`"cfRNjm"R$djiMS1fbh*r6dpaaqNl[kmZ29pVDm1`l'SeF(hk
+U#6q,58Yp9bBc9r1#qJB[T`k@fRY*lXT+A[G%Fp6ZG(jrDDI2e'6`HJq(R066$!c
+rGLri&E8CE,5Fr94X["e8jpBBA0e0ehIeqX)ik5CDrAPBqqU*8'2Lbl68`FSfEAe
+MV1V@rrUj'"+U$J3G"f03@2@(!dNDGlDEH6EHESk)pK16T+@#iUBkQGYl[LpR*JU
+GTT-QkRDD0PNRS0!4Fkrr8p*UHdk$XTGh6AhAF6XqFTTbUJcqNbHk0X1kY06DG*R
+kAr-M4i1p[YeDlLiUV6T#-NQFJLeF[8r`JdGp'ac&(Ge1GCD!88VE%PdhmVKPS($
+p,KqNJ*`i#STUNRml5C!!Vjq40cq3!)1LUCFb`Q398(qBp6p$05q"GfKP3k64C1C
+5i&4*1EI0bqVjVQmhFF$SV5$kIE@d'MkVXi"5IcdGVaC8(!U)*GrZX'Q&*c@Tq6"
+4k1HXDkLVDqXam(CCUiUrpPZd(#YHlMFQGA$R)*ZKYmr8mUGNKUN[R9,*IDPf690
+*d8DHTIAhAVk1,25Ye8A4KmfN(!US0&G4p*RmR'k4+E6k+QQ8[`h&0pFPeFF$3@Q
+6MqfP2Jh&pJdeHe6rZJYEl2dh,em%QRZ*R8kR5@Y,RfUQY1*P+V[VYa9C5$KQjL+
+V,FpSrIJ+CPK(UdU+QiZi2K@M-*&KNrKj2iD!N!"dQ@JQ9Gj@`#XLf$b+@LdP48p
+P"fKe&)j2,2dr9E4H&(3#YJUE*aAAHTe0hTmR'l+6FIYpUHPe2-e@$A3FXPIq5FV
+H"",cqNjIeJVA%c[06Rl@Pqj+cq$[EcGB*[be@Id%([r2ATB+2FqaA@Y,*TDAq(m
+-R1D5QcrTmUGh"XB,aLelk$Kr#d$LfX-QJ*B3D",D$J(P#Qf%44LT*k9Z5BfJQ8e
+h62dYE5#RQ34MEpBY6VNphTmR9jD6*m@IjM"Z,bqdPjl[d,AD6PAm+$4F$2c1Af0
+6ce6TkL[Q#dTk,2cRECr"h$dYZYJ+&L-K6C`ieC!!B0G1D1Pi'kU+fFZ+LZbFjJk
+64f[C(!kVN8&VZV#VY,#Sj50,qKQ01bj+*6*S#4kbSbPV83IE1CBAe,4iqZRTAVc
+EFmX%R5GhSaH8dHCUDIr2CjU6`q'8UR26Jh4i1p6GjmhiifDNh(em[,Php[Sr2b[
+MhQNTYTDfm%cJ9fLbp6R,l5F$6A'Lr49aZEb'IS1NLepC499F6HUFYQVM3@NZ#VP
+m2YVA8achMdZkb[[Vl2aU1mp@UV+ZYbhqH@kqe[0cAAPpI(Q,HQ*F@&ID9Y4RDl8
+e@Nj+iCK9ZZ"GF"!5kMCKia$#e4lhHh'pcp*&aq4JM5jRGjq$4I3Pl50,XG2UE52
+B(I-,-UiS-dmEQeaIhB&S`aEEdTrP[2jMNpecTY5M(l[J920$'Q5G28eNblqX-Bj
+eE1e[YaZVLq*!k1ed"25T'2GF#Qkb0Qqb0"PVZUq$G9ND#cdQVN`I2crHB1kR0*H
+AP0SkUBH6*C&lZ-ZRc(MCf0Qp@l)LUMe5!NH$kfAJAZM5aLGC85EbGGNA`),["YG
+6-iH6k52T#4QNDaLj"-)!XNAD@'$Gi,M(JJbNrbrq1FeQNh@Nr*Pp(Mpd-A-M&d&
+6@@YhhR0j#E0D`VLSPk1edjeFkR4DQ`Mj1$,h'TdmbXD`lLYVi-r1CDAIAAbI[9h
+HAeaZ)0eZUV4i2CM`BaDM0bDbTj,BeGEBCqddReBllBqMYDLkUj01D(ie`Gq(a'-
+H,McjhBdY-5B-62qIfHEj+iiGp""8"8FBXG-@d'iC@S0*)dHaYFY@e&ERqTPF1SV
+-(5Fj8bcG'2KV'*`0lDheI@e9G99QIUFZHrHDm&jE-BdR2fQLBaUiXMVS-rNUHeV
+UD0mE"rATT1idA$Z$@TmrBKbUY1I0a@@'Icm&jaFYc-'kfR0CVQbCklce9TkT!66
+`D2rmpQEZi*bT22MRmR"mVF6mRlN%QEmFrF)3*YX'$9h'dJlHVcrrZFMhHRY)pG"
+I3(UR!YGN%)fVf-'$8GRQlVDGS15QRH[bI098&Vcp,mH$J9-[58d&afF'Ih2PC'0
+A8R,FZBXVMrd'#(2K`GADfNI6e96c8Qde1LV019jee4*rB*M4d@jUi2Aq[rL6lhR
+pP*hZLr$&cGa@RUMUEM6kI8R6-rp+[VMXieC@D24i1TlYQ"X$3!kQiUHi2*EUB0[
+3&AS$Tq6pl0h%fEkqMJe#BX'Rk5VJlLVY2I0U6Xcj,Gd[FDiI@'V8Z2GGEGh9bqN
+e1PeB`jP0MVAdUqeZ*R!d8@$,ee2ce6,qV"UqDNrNf'3pIJ9p$V#a'6aUR"MfJa2
+Qe%Rk&aMY68mbHXkiU+D$,bMhe0(13HZGl(em[,hZKQ@N(j2TI+MD[Q+64eThI2d
+5pI9`G&p@P1&#2SMlD+5Lam'IRpA[*qRdFDkM80[SUXbIFVpMEpCF9Z$hGVfA*K6
+k6jeAh&eU$cbD5QrK8hA`j-b6dK[4cKleZcbP4"p@TYEAXSR!X2AqaV+l5bjIQe0
+p@kQUlhUlHP1-bqk4H86,cKkUTbqUjbTV+[(@Y,SDLABD$T)h*Ga[)YV@AQMVm'Y
+hAEeG4h"ihZ5*1cIAh&a85Y2T+hFLHqC"0qa2`@ZLPc19l5GUlVa+LSc@BU+FjqZ
+dZ0&(VXIF52i36-rSjNZC'Np0IDQch%QYfreC2XfXD$m96iN&p9Gld0aMTZmUELP
+R-M1cP,fe,"%Xqlk'4)d9@HKmp4qNJL6X&RIcdRKEI34#ch442X42Q6fKae2NCb$
+4GPQbN[54ZfSEHANk1A8@X&AG9Ga'lET1NLcX%M*4+'68a*%%AQS)X&#`'bS*b`A
+pYmMNB*c54*(!TBP&NB2ArK8jL#iTCr-9P6+b%l1@Ga5a-K"qb$eB0lZH[1ZcSi2
+Ab'VNlV4eppAir(cdQQ2[0)!pI%LA"Z(lLKJ*&3C'JTcKPJ[UQ4r$JDHTPr)Jcm&
+RYiNr*29MZGaGe8%%fE)ZLjqBG-rN-M8h%(ai*ZISBKrfp`kH#hh&fAfrAYDQc-!
+99"8EU-#16"SUqHPEH*&PeQkJUEIHrmb8%p+Nm28`EVpKZ*lIFF$56pa5k1NhX5K
+R+L4[319H3RjG,Z2i5DA4a)RV`Cq*"Z,5FpIKD(HcZ1Jh'RAiX6mSr[&1a)JGjF&
+,5lH(0`ih0f1JaCH4RH5SpY(MdFUMP5U226dpVDA28HYSmp4bYE[U2Da0ENj8MId
+HHe[CpefGeVIjjlhq2CqM(QkrMqai'$l(RHrp1aer[plk-S#'qm#fQlkMr4lp(4f
+1[QcYKYC9e3DqkTH20Qce(0P8XU9)QdFfMMbTXHE3@FH`N5k@4+eYK36h(XE,ppP
+Fid-fPRYYFfH$CdZ[YBq$0P5Zhj%H`PA2(P4l195dZYSj8hBmH`aV,MdXfMPbTXf
+MS`NCkjZBH4F``mH'(N@&N!!)eZTj&aXpV)S+11!kq2e5[TARAe(3Ha5bTf(N3i0
+K$b-G$CFHE$k-0cM@80cb,$N3mHjX12b)Ek*$M6I4KfZ1KZH2CFG$[N3f810+QbT
+&P4i2)XYp$BFHjL3pZ'd!D!d3%3)lQ'`aYR*KKpU(I3q"$MA2)$cBFH(hq4CfZYX
+2jdYRad5dS,*+M2Eqkj(%lN8%UMXXG$4qel%Uqh%HMpU2)Sl#43@1[Mf%-1U$[MK
+TGda4MB&'&,'L3Lq`!,`ib8MdSjfEfPRC9BT+2)EmESCllpl%j%KipPBBf9KiF1&
+$[iEd9,)@MIX,l2@@YPFIAJ2ch2#6`pEpV25)p(VH2lAX6EV`104qe35T&(F6BmU
+(Bf@04b0E@a0EC@1HipK4f&MVmpCCk926YVr6QbLHUp(Ai1HSl$VmGBDfaQkh@kr
+25SppVC1YceKRZ(RU[IIfk[@mh5dHYch(hejr#E4l1k(V[Ya4fXFPh0K`GR$YD#E
+Vf&R@i0M+cfYP8%pUIUB-IUq6p(AqaBmI2@1YX%8L31H[XRVH(CmHGrQ!ZERYECA
+%h@jkMZ0RZ8XV140fFHcRU2V)iVGRYBD12)j'Hb1af-V@jkqcep0%V0TD$IdIR5Y
+V[YVRU2fV$BmHVeZ1ca2UM)!@GMVpplpVa14Y2TS&bYIamjNp8&b2[irX%@)q3Xj
+'eMjkcSrMa*81ehe,+j'HSmpNI@l#9RXp+4FTD$pml(UmmLT,cfHeZHeZYR8@GE0
+PGlBkrp0(lmHeiPepUVfdHM!H&b2ePAR!Zjl*mL`Mdi@T@HXip"%PBhG5TAjpE0Q
+jj`Yll2A4'F[f8[S6eM(hf4cRVDfY4IeXm&faMh2(McYJ'2"NcYK(!r(cQ0RYIVC
+9e6fHeQak1EX1TXj9(amp+TBrjaqCl)pqm+D+8p+P@-TK5YFp%D8C9cb*8FZ`&f+
+cSk0AD89Xp(jVLA@YX0I+Pl2+fFU2UVD4+,[8G44iqYUrcqM0cf[cfceZccNHcN8
+%U90UqXlr@dHCe-I@khDjl2B0"VC9(0XCXU*4fB6YRBeHHimHaiHYimlDl@2RlSS
+plf2jdL2VBp((cfq,a1YUmp[`SDrYpEXpC(lITZCb(0qehqYe@qMkh2@2$lV2Drf
+-p5K3MjkVcfYMNC4ri1eMl1GSjhZ84TZYiiP`MbV9K)X5"ZYfG(eNVkI(f0PB5pr
+4kf2U85mp`qkeqYpL`N",X,#2VjB6GH%fH[TIG4lkHRD2dGI2"Amk40PDhMQ#'Mc
+fe#RUA#RVH2B"8pV[GE4l'b'*VC@qfC`Zkh2DrLH"Vq2l3#V0&HMcb+q[eYpfQYS
+0R0P6Y"24jlqIS8&pXj@d8#$'D85dF[@l1ae[(imIIN5BqHepLdS@%VHjkMF*mV@
+cFp(X+1Gce(ajYVDUPLkl6@V#i@jCkbe0KqVCcE#91dY!A"llYk@9RYTR[B[YQIq
+MCi,mHA4khCf&MVH(RZ4(fZ[emIMkrL@%2XDdQ"RZ2h9PM!KSpRYGEI'X[0fGL(2
+MiIQl$#+EFp(fYKajAX5[BPHaBf&MB@'HeZrepKarqV*ERYramme%f,L*%4GGld0
+cGImP5V8%0K2%Riqq%6[[q5[BfTNpMjiZcbil%9JkfjPEA2DhmZ6qRjhdT&K$R06
+k'9r64rTMf[9brTjQ29pphXUpaXVd0"VCIHrSQllZIT[fQXp(lN`EA&9F99a9Ekc
+`GR+k[d*8I1CQ2qQiPI6SjkE33CASIjcH2RSr(ZF%a)1+5`fHefC0HVP5V#'JP8F
+-l+PITPClECkEGFK*q9RQDd"+pUM[VUjQh@HQmH9BAeeh1I`Brr+-Seh8h2lAEkq
+E`re@(kITh462G@0PM@@-J*RR8l1LHqQC-F'``E$"X,QkQfZqZVUqr6[qjX06ZCX
+H1YH1JTC1IfXV@bZ($[JjDf`pqqfZ6MbUfEG@-0,Vq2M6ElkFfMeZhaYR(j'YhdU
+9RSE$(3jlY14DbX'aeqc@[4G@1HPA9ph1qZ[1MmFf3D1AJc,lIA9pYGcRZ*r12Vr
+jT-dH[ZH4FmK!6@`mH24i9KVm6!XCl"-,rml''j`2Bhqchc%RG+8dS8Gm*%5&dNK
+LAeMF4l$TSBE'4YH2qMf#q2VH44ll',L'HceKG3jlAIR,DV(A`ih)fGKRL[Hkr4+
+`GVp22@Z$[VkqfGe[[B9HjY#3!-1[R(Xr8#2eMC@((LCkk[[Dp(Dlrd1EfY(BElI
+A@YP98UEIB)1LLG)6@dBJmpI4lll53IJ5VVYqrb1cQapE[V+`+8TZHXE#kcec0QL
+$%#a!8D30U(rDll"bH$ZC8IBZ)(@QV"!6@PV,iKq2XlVf[hL$Z1jSpp[pRVC[*N"
+-(Dll2DhKll@al#qiPpJkfkPl1kMh9MCpl(Ql2p+2fHX*YK(QPDGKGA@Hel%"Bh9
+(fpJ9X#%r8)2@r6eYUe#'(p5'PDrH[$cRU9(VAmFf(HrlVkBHE$ICldH(VGVVG!i
+I1(YC9KGF2IAf$G4l'20RIddFVIjkMXHITGp0-r81Yippa,(MdHcSqh*)A@j#p+e
+q1Mjk`PGlk0LVmQYNEibGFF`Ur[iB9,V2ClhjYeJllI3lk`aTf9XmpIE@E1pZ36a
+JV4jAVIT#ZEB`@-'kiQH#a(qR(ij46VBFD1EB"YR'P#'DXL&'J)ddkhLGrVl0'M@
+jkb03GPal!!fYpELGeVH(YFpBqrXllf0rRTjKYRC9(1Sh3cBqr-lAE`El@fBF$0`
+`idIEarTQbDMMai6FJ03+19Nq(+9hV-Mh(fBF0Q0KTS[XpBGT4lAf24RT[EKVMdF
+-hIa!Rhh(&%#6f1*RV#MlH9hTT-eZYqeFl-ZC%Kk2@N+l&dSkfq46KG+H$IClY1k
+kcl8V@kfJ#P4aiCY(Y40jiaPAfjXFmDEFpR[BSpLASLme+lhAjl@dFHkjlDPT&'B
+c&TdaaVEJRhaM%eXU'9(LA@Hr2lA2ElCDfMl5`Mi@YXZ2+eY,4jkJ(I0Ml8&%[2,
+GBcfHpN+eLL[k%hFKI#Y[cTeJ3@YEVFF*+D+lI@2R"AG+fcfQYMl#E4f8H9Y+#PN
+Ih4CT@&BMFY4GLLc4KD),Ck9r0TCmlNk#iR[lcdrcfrRU#9Ximp0MjiMmiBpEXmp
+qJ18U2p$jId2Pr3k2p&aqM2E)01d`I1fP"X-m9Naj46V(Pll@e@YlQ4Bb-BbJbZ1
+MI00Kk`0FX-Ir+-cT"UcdVMf0((hfHcP(JqacHr0TFZiX0Z['TVGEqT'NiJYVXGV
+XGVf(Ei1c0U$2ErY0X@!G[4R"F)D928BBEAp2$cQYlQc)%CkMXiq-GJ3h##k0VpE
+%#2r`fRKFajAEpC5arBb2kD2)Pa#24fZefCK4#34HPCl("achm+19NI@b2VC(eXp
+VIYG0RrTh(XI6lI2E@ifmHk$K(r90-lmFe*aj@TlI*m1`c2(lI2Cil1"GmZT8I@Q
+#SUIMjlr&"VIl5QQk99li0e(RJh4k$2lrCQXH`hCkM)hRB0DE0IarYIfhp(Jh@qS
+pRRY`'PBj2lCjE,SDGTNlk`e2S&S8UMVC4fFl&EHGeVpRVk@8aZ"`SGEkeJMI0eZ
+TQbr1SIdacGBMdZq1SQZ)SeI*EVN[rI4r[SrhmId1pSrTl@J`I1S+2F-DrpXE@l'
+aX,,MNZ*XHqqRcGem1qZ[Tf'Her(P8I0L,XGI4dGcM6GIVH43FFY5er)eq[eYKap
+IrlMi2If"Y3A-H9NITcCAmc+T4b2dard8Y,0`C[(Sjf2'P5VlCpe1l1qp'`1%@`e
+r(XGE+X0ICDdcfjkYMi1klPJ&B"ChMdIFap6qQ1D+,UEX[dcrdmJ$l2GlFif0b,#
+jABk1`8GJ`l"2(TC"4"GEEI5[lElIaqhKhafCCdEYb2'2BkdSdX)IY@9RYCc@iaf
+-&R,"dhYeAc1h5Aqbd+(MpP$Xm(HE1(N4'pZ'VfdZ2,lfkfHqSj[k+Ad)NVb,8Z-
+jFi@rTlkVqRYEVD`bV)V#Z86m!4jKbfVcZ#2RF($'DU0R$$lfXc0,UCD!L!Q4p#9
+4dYYqLPfTE!DkP(Jl6p&$YUHP4Le[1r6K6S%ZpZMBVK+RH1GdpEFdm@#@40@2cNH
+iX)HpX,@H@f,b0E("d(F("L-j%KRFZcjhC4VB+Fqq1lC2@%0el%X,3@E"VYX$Y)N
+ejXU`lqMha[XiQcKX(lEk"LlRePb0VRX%Q#V`@rj'TaM48GT8'qYj%IAf(QmI@i1
+qr,apV2E%kSFFf-Cf2B4l$MR#4C@1arj2Dq4XC8h'0EUGXH2GFHcj%UJT9eK$H-9
+IadX`)@FHM("36GE26TJDRTj9@8FmGkHJQcTL#[U$9AAXHapVZBrpJ@J4X*Y(II[
+ch@E2Y2DpM28IdcG@r24ak8`4(*R(fB'YrYHdpRfFp(qdFImp+N8%fPX*AD4j@cp
+#2XjISIS)KbY6b+ZECdXJ-1CZE$N8!8VRYmE[H1BNXp26XLPZ5,&KMFHbRChMf8p
+CG0V1pmceX5Tc'Ml6l'lrc1e-l)RC8lc8lC6[aChj-le8lemlfXlpLGmQGp+Gre6
+Fld[@DVDIG[[BRTl)6f6R[KcfIRZSRZXRVLHl1Hfmpi8pj%pqUHrXH(ZVRj8rd%r
+U*qfRq[RpG2pp2rJRrbcrTcr%TmaTHblcmRp-+JjRSYArrZr8iP"68(-8(aD$jP"
+YU$bD$qY"m&$982+d2182ak(6d26828d1YSGY3pl3q,3rRSIid2qU('SU'LVD,iG
+&cP&e&&V+,Z+,`+,G8@qS[5SX#Lif3SFKPmKcQ3q4N!#EN!$9j$`FKif3!2-b(km
+KkH3p0!4d%2`)2f%Z,N1+J)k#(i%(rK"4d9(4)#1JLMj5Mk'MkNe0AP(HdIqmM3C
+(P-Md@4qCNGYNHrb2j-Mqc)c[*mrDl(l2jI2rc*XZRf(HrY`1*5dYE5r$TFr5fY,
+UUAC8[Gd[K8[j+@pTIhd[pUAh)$kf1@Jjk$Scj"Zc2kBrr`EU$p8'""aUE)8fATX
+r6CqIX*rPD,,cq8Rj-rb@@Sm[4!%beKNqBq&"5eG09dYA5eH4Uk[PDUYbf@*-maN
+*G"PmMN+bJjA,d2+d'ASkLSSUZKbmp66eA3BkVRUZVS+ZJL9Fp28'AUk1V#Tb8rP
+D,,6l#j4FR2mP28pB!f`RrK6r*)iJ%b`EZ5Sq5Sma2!'X*kXUmK9e999d&9293ED
+V)mV9eG98cp4"@e8QIUSmr89HCL9H4Sq5V3XmNJ)`$F`'2+"M!*28mp6S#"Q$&4C
+G!3!P8+T'C!6NTq`cHpUmY2e9"98#!P9[DX0PE9``rqr4r+cZEQjV3#4+5japBJ4
+eXj@aBPccPc6dP(1j#*P1IR+1Lae(NmI14)R,mcmkXTR3YN+'Hb&G2S,I#kfYTU6
+)2S,2l#J&!I4-K1C#FHarbp&B0#ml4ZKHQLcml%jM)2X-6MJBSl#9c9C8C*l$11R
+BY#p"ZRb@3RBM!h4d8j1Y$I,dGK"&L4-Uk(D1GLBkQLj$)6Lq5ZG,Ri*+r(R0eXT
+l)4*b%DZ2aS3&!*3+L4+0`'3[B-B#SMf#jb)HRh(1!e"Q'GalSM!AN8#Ce#3%Xii
+$Jj1JeJTaiRh"mJC1Bli'!i"63Jd1K'F#&%`91K&!YJ5R-H"#FH`K#M[#d)LrB%'
+JmJ,2"*B$+0`'Bf-`()X0"P(4jE(9d'1DQ*bGLd3"jf*ND2,6YG!%S+,!T1dG+r3
+5!MPA!M1Bj"#I8Vk5GRDPSPLik,2!hR)X5KF#Nk"5K$61ikHH`L3cRTad(a3(a*f
+HI!I1ik*8dU+12Rd$L(#LebUJ5JM$1&Aq1ac+)8`3-`ip$L%N``0!CB&SNKJA",2
+RVjR*bHRiP4%bL'Z3!195bVFGMUfLa`*TbN"(442K9(*r#ZIR5BXjMkcUlQjb0c&
+ae,Fiq*5dQ2L4p1A$FG%S)K8e%TBL"ap%JfU$(G'k$+$(I)D#d$)Nki$CkFH!c(4
+-I18"3kJG2%fL)8j3Bq*TRS(a(3KMjc*!5LcP"46R,A)ck4%'FR-h1!@LC#*%lrN
+iQ8b%lm1*9kc(40p%LH0MSQe+$G23FM1C(ZC(0pR%R0lMZfpI(m,*(@UKVmpUqJd
+m2bSBBIpiQ*L(blBDKeV-A&`-5(%K`XA$ePPFl[%Kk-rE[HqElfa`2G`rei(fiEh
+hrHZGGHrQr0cZU[BFEdH*$Ii[Bqd!c$a2Kf9cJHTdf"KA10q+(@Ib[GjKmAAI,#j
+FiYPid1*k2bX2%i-2UiA"phj25l$jfZklBBIbFATlQ(dHSiYlZrNIll2dm6eHSrV
+aEQ(l'*aZMr&$$f&rCH9[--lNhSi`Lr0KqPeYlKFA@DlVXEXq,$$X2&1"[ABRPkE
+b1SpEdIiiR'f-10rA$mRh)BIhFEm@Qe'"khNBATqVm[#iSdX6!pr`-A$K`lR'kAT
+iERm(NAplHr,m!qQIq[V3i@(MHTlrbIhB[r-,iGlFh1,KF(c2-iF-2MBR8H0q,%`
+raBQXl2cX$fXA6p4FqTH`h2Ll[!ZBFAc-E$KaFeFq0K'qV$KB'*kh`BZ`Kp36(`B
+(iF,q2`3lqpZFE$a)GGl81*f("r(Ip2`BErMH*KH0LiA[qej81+44kAh-E$[F5(&
+`SIJQR$CMmA%KpD($)FiQ"$VXA#iZ,$lf*LBhSf@XaF#'rKa290qfjmcXIEpcGih
+KqCe'Hkh#ZEhc0h##h'hI"a9aEqjJ3mDqaSBIqiPlFiYlKDl!ZEfp%ekd25i%21B
+AZBPMMD[&`-+raX6eGG$Il'pl2%`Yh$iINkcc1YpfjiPki5[8pdP!`PHHF4Rr(K+
+ma`P3i'Apc%e@HmhrlmiP'%V!KKaHBa0ClIBF(%kAHG4XF,M&%@ZKp6h1cKmE'Ki
+Z&FkkfKKpm,Q*f'*kf(JBAB%,GCHqY$LrpqILl[R[XripA#KaI!`VhbVhh3-m(l2
+U`p,fZmq9iQl`Z[KhH&$kZ"HmATI-mb($hIMDleI9eJD[-`XAhF6AHX9(GK$l[VA
+ZZa-,cHM[I+plGkr`,RU-2rN1`aI*ClKSK[8`2'p,h2`f2`H0b1[`XAc-5(6Ece5
++rDiINrRhF-2QqCehQA[B$BaIGKaI0iZ*JB'`mfjmhbpKrh'[4(HlqEh!LiQ&K`q
+9LpV`ER8BITh2NDbjph#`2JmA!pBN6`FAaHU[BFALqjef+e'B@,LiIMHYMBRZif,
+kd2'ZEhGqeiSc[F`mAhEhSr*kMe4#icU&+)lRYEhbIa#&aIfZN!!Kf%2%mEeX6#[
+FEdF-MZ4Xa[l3pTf'(lZRa[4mhHB[%eQ&l[@B%1*V)I-aXE&ZIFe(AKHr0eh[&A'
+($Hi'0LA[YG4jR"'EpM#aXE#B2X2BB@(aHRKmMa[a`r[[m6%e'($MAm*2+pkMi2@
+k8%A[G,V[cFE`qE+piHr`[Ii1&Um2$Kp@jK`[H,fm2ZpeV29K[q$Frma-5paI9hG
+ceYM$$ZlRAB'&KF(HHYkS2[Il#jh64pKq"lhjJIA2M3Pek(c3#BR@i[rBIqp2JBQ
+apE#a1Dph!pBD`"X1(#i2MHl[)BEhkq(LG4fZ(HRhipTkhZAqa`p2Lh0cJDX$1"i
+aei[+[F$13r3aBFhiZUKpl!ZFE#++YM$id1am@j`X$!a3`mAc,hXZrpEjF1ZkMc0
+G$KBQ(p[h[-`2F`lQ(X1)2RBAZ*Hl(hI'prVlf($a1,$f(m0jFiAfBGpjH0Fhq*F
+rCjiZE3qCjQ*lF1(lH"Lrlkh2Gjr2(r(brkmrr(AIV+QX2aL[[Br)`rLPqca[hI9
+l$jha-eIE[hF(HDckd2`Z#[j`NXr,hhA&ShQmpJF6i1`p6&[m)VraF,#`02$lhTp
+KMHEhraIMir`DIUEcpR@GTHqClZ0Ki80lKIVpErI6ielKqrR2LB(F6[fVRhGMcAA
+iRQrjmZ'(!-'d1leR5h-10Lm2hVh`2JaYhlf%'FP2XIJ[BHcr$FqRk[SHV%`qAkl
+b[cIZ`XjKqB6lK`mAhqG[r`h["pD(X2FeeaQ28lV&[IhhplV2*kr$Kp0C,F,qRb5
+BRKmI$`24aERU)Gi5Y`mEBqEX#je[0-4J[IGqck2DmEeI#rpkf*kT6eKJJpVpq([
+1P`r'[F,bSIcI"r6VI4aX$fH[`0jrAGkk(fd8X2rRjVR&pEl'%4l`m1ja#J+'jpV
+h2D[pKaX6GQ@[%a[kFM%kl&hQFpR$pBSP-5N2)preX2VGMaF2fJ&i[cr-!2a0Cf'
+,l[5qC#Db--2`BGrHif0jR5`h*Km`2ai4M,Km$a[!eQ"f'm8aVhhI!`2+`29mMB`
+l$h31!$Kp(lH&fHl`ZSZ3!*@*kRlI@ZF#(1GA$khTqAJ3kG+,aXAIhZ*LFMfNQrh
+rMmCT3`%81D,SZ&L&`Mc10lf*V20p6$meBlSFALHClhbFAh-)MC!!r&rTV[4aSI+
+rjJ3p,KqUejIjK[pGLH(HrD+XiFAm2[H0Fi4qD@)98HErce6!AHqlZlrbXAJhX2V
+BR5qXCPI-)-mlIq"Hkl#pl'`)HerTd[SqAFr*ph!0"(UNP14KiI8A20Ke`[GdqVe
+d*ER$LFA6`qEr`MkAa#UFN!#hX2LpKFi@%SHrb`Zaf)T-3TZr$F`l(%aL!(ZQM[f
+iIRGTHh[lfHQVr1FdplKqCK`iPldpcLBASf81Z8@!YDl%Kp6Gh[mX0E3R`Ar[E$!
+%jFi82'`$AJ0'TLr,XIiEf(hI`qejX20VAhKq$Q-+j`YJ1R!mEaSGKlrB3Q2TBI#
+20cMFD(i20Ka1SKKqAKDV%[GF([!KphG`i(QNJiF6B&K@lKhRZ`f@&ljNFl6'a[,
+pl$0CXT6klBA-1`rEFi!5)6Am-b82VB%0c[-$&f-2Zkkpp(#aGLSqi"!$'p8Lp$l
+Z'4Qq#(#hCKqrcJBf,lQ*MHrq(eSIYq5YU$pKF!$M$[$3I`FEb@A5rJaBIkiHXlr
+!q$&aH`8Y33GFYLma'`h[QA,+Z[9[IPifRK+*lh#rrmc#e`3[IkAU1SK`r5[I'0)
+aL&#9L`q,F`l`@YlFqTjPrKiH0Hh2UX(X-2UpJPpq2h)F6fZS36mcrZ&`EhkfZ,m
+YcJC2A+9X2`H9MAX1&pea3,GQKpEbBI@$CMBT5MV-E!lA&KG8(B(kQ$&-kr4rVBB
+m+rq#(hp2f'(q(h-6AmpK'ZrKh2`EXJRKH,$q(JXH*5rKHCVX2c#ie$KIe,(H0LF
+&Pq6%f"G3a-A!ZF2%l2X)F#pkLpkr#i10j"j*Z$Kr"KB5Lp[)I6[F8ejq`KdrB@A
+[iI'aH,e@,kH(ifa`pi%l&a-$M")eb)h9NfHYKl$&kIl)0F)NKqiVZpc$r"Lid2b
+56@*M3hl`SmLj`(5MKiZ+LMKI,`cDCF+1l#MIiR9N9d8GKpQ'j[AK4i2i-AeX6X,
+R%aEd)M`SPF(8Dk(6kliD838H$K`K40eN+*DIZpL9KK4mRbHYa'&(#[IG+5[4aF,
+!mEjIKiH0[-+a`r8hQaKhI8I,K*AqpJD[#KX0hKqYLFAprlFEY2Im$BG,X0CL`m(
+c-D%dpBf'1ra6M4`qcpAGrGj,jH-$IVm$hc3cj82%Kef(lQ"q%f"2F[r-i[MIE[B
+F$%&@6Bf'"Hifa`-$ABATmhf([qalf,UrGp2d8T@8"QrA#6cmb(!rMPr!mRbGGm'
+"KiZm+d1Y`$#plf[irDIj`-6LhqZhIQiIUiDZ[h*4"aF)j#r4`2F`XAi0R2qYRYK
+hA[H6jIfFD(h2@Ki-*JL99'(HqT!!iRrE2Zr(mIk2Ar+pD(l(,RQ*qAK'qhk2JC+
+9j%1RmD`l2$pEMk1(hERBHjaYhLqEjQ(XBF6hbpCifKQqr`HkhAl[kjlT6BU+Km$
+'`m$i#q"FhTa0Db*33H"rE5GRk81GPG(rP9A-8[[d9rMD[h[HpE%pEAH!D3c4T[-
+5j'eX$K009fblVh[cl$YrPk+EX0Kj['r)@RLM(jaF6c-,hIm6NMPH`qMerPIrGRc
+ra2YifmkGAP&RSaF,LI,[F@rf(lrkAZ,Ki4"AhEr$pD'p[b+q&KG4JE!iBr9a2Gr
+jq2eI@p3fpeeLlR@()2K(6$pl#0%F1,V)HZ4QmR!m[h-EhBIki@XqhkaI-K`0K$f
+Ufjr0pcbG2Kr**3BTHaKpcc02Kk-XjK[rNS%EYQF[m2bm2j4e,XAh1[rCm[j2QHp
+j2AP`$r('lc$eHXa2!mU%iX2KFPJDl6A1ma2$aX$!mMdYKV1F`XE![l)l2Q6pc!k
+cU2Pm32(Sp4rAh00j'"j[K`pPqEVVr%[Eh'i["2fXrY-E(&Kf*Uci2TkEdl1*MY0
+SBN6YPc(j26@F53`&8%66DE6G*%lDGRBRE8"h(ZIdfPm6p%H2fh2pYbhLH*%h#'(
+3@Y(XU(*rrFhd(2j6mrm)NlprNY0)S[[DEj(L@@4i&CbHXeRKq*iRKq(V0CiRLH*
+fRIEHhSHem3"[Dr&eRf+V`q@m6PVR[[XH*pcrrl(KmciRLARBj6+GpV2krTfhIAQ
+FeQXeR*mq(lamTP2qbB)'Hhh2cd64cJSC8M(5+Q3`%@rVjLFTSQ$@qP(N885$c*r
+Ek+0)c'1NDL*H4*Xj86mM6j!!NH2[E#KS*cK3HC*XjZ1LikFVBPV8Bk4Q)ZiR+',
+%Q9%rCjc(iqHRjfTND+TZkSjUp6&Q91hi9e94BY"Z*qmRlH*Si-G)fp[TIU`Cc(F
++C+Pe0aTD5*`XG&Ne0[N),HE0lDcq966p[[FG%c%p2fr0bBdUHM6E@TZ1ESBRVlR
+C2"0ZG(2rG#C%QqPMVIU[U`!PS1(8h(9EIEdQ3S*&Y"Tk5KJXjXh(8ZSd1RL5)Nh
+rX@ckV(8NlA6B-e(cN6EdP$5ERYXe%Yj%6K8ZSaeR"SBP[1aCbISi0&6cFG-dmk*
+(Ad&"MV2EkI(a-P16qhc8j8RL2c9"1DA*4T'pdX($Qlh09e02j#*XTqhfrECUKRl
+LTYcSQYme18X5IXj'$Z1f[Xe1@e(MTPK(!,[G$fdLfIBTaj)2KdZPL5-(e`@8ND4
+`Xe"(L@eK%"EQKrJ`c8'R*[ikhYN,#'Nr1EIHdpRJpX#S!U&HeTU#cafhmH$0d'h
+Xri5Zib11Xp24aC'RadbRXiQMTG(%r*Z*(F42i@GpMV1TJc&6H4mT1G6N*06-TFI
+%Zp&BBk4Zjf*GlIHm2UD52NXG-Viq4Rr!Jf9A(b[De[8kL$YS0T'Z2P90jJdpjQV
+#Tl16*JMh&2rrR+cCH6h[,Cc8EUXkIXUhqN(mS,ZTp+$YVLZQi06F4TJ"kHRrT8h
+q6eA!qTpfrTHARZfl1KTq$'[rUF$aFRkGrpHreYr@5ZHRj0Ye-&Ee-'dUHBM5GTQ
+ULkPeqDdmHZTj1DT[*ZkRADL*'[i2UIGp2qX'BTFa"dmRRZ$NrYC1dlETq"A`5qH
+l[e1HqhrATrUAQMkl*hreq$NHcSDQrJrV"jPrpIdUb$VDA0A92`1ZJkQ0"r+Rj6l
+GhF8mbC5fm'P[Xc"J`8mLKTIL#*M9[+CArq0m5MJlZiiGYe0I(M61('NepG"`EVT
+rjG2r+0IeZ2kkrNHPGp628pr'iG0"F5kq$4`4SfLiGp"-l,4k1ATFa9m6RkhJ`HP
+"`kHiMir"UDLTeX&Y`kkVJpLCTlURTq$([lcJmp(rVdr!R*hFp&Mir0alrYXQeq6
+RK6+Iq'Em1###Rq2692Bfeep#iNl1CQUV2dXjeh!MrdkITlZRNP$@FTlr9l(GHPA
+c+RJ-+22DRJhre[kr8Zmeef6pAJjRErblDiqTr@RQ8[p1ZbYa(Vi[45GRA@dDCq@
+$rqeU2,i1PJc%DiTG,13@ZBUI5NfX6-D'[Mhre,#SZ0[ID,KfeA(J`BdQVVUPilC
+lV[&i%lr5ZUpc-jk`UGG"'Tj06d04935mcAaS+V-@[3e'Vk(XY,fG0"MVZTq2"9`
+@e2m1#iU+I,bDk#[JeGaQ,D--fT[+dQh-MA'9ZrbI+Mh%&I(l29IAZ2(fN!"ii'k
+F"A8frMj(-k[Qq5c'MQ@dZ$9FrGHI[TPTqQRcr*@Fjh&,"YD@fX)Xb#lMA'BmIQi
+2X8%aK@mHkbF&E-JYS)ea'V*qmfSD+kT[)2P3D1YUi[+5G(TBmcLCASS+b0*M3GC
+"2fF&6Rj2CMaYHUJiHekcQkR3@ZhiGI'NhGpAdeY"Ghh6r'"0eQ3NcX(@8Yjim(Z
+6X'dVkIPi-(SlAAjLSiHBUY,98q9Vih*98&abA3rHdI99@BcNH6@BkiTc&4UT0V6
+bDU26c1(G9GK6c,Zkc8D6"H3DL$F`E+$UB-j@e0hXUb##kkR5p5"(G33A&i!UfYp
+cdqDj[bFrbHNQ@fBee6Rf2AQ1TTjQPL4j1iJfPK&NMe+UihMjbRfqb#rE39YD&MC
+(f93G6@4VZI4A[))qAZ,b#iZkLYdmAPj2XbEMC9qBYZh[-(h#Ja2V(5"4FPFD1#h
+R-aTi,i3eG,k(lh*j+$"YUZZJ`FZ8A8rmYe'Q4V2G9&2"'Q8-&ABEQJNmM"YGeAr
+3q4aZ6j'DdI$YD[-HId92RlV"eA-mem1l`EZZUZKl[T19qpdY9DYJ0"G3B1Mc8&p
+DNJlM"YY2A4T1$IDH0*UEYX"UZ0-`FjB90hI9N!"-[VlUG'qS%EIFjRj'SmR9D$L
+CL0PGG6mal'J8#FeqRj%D6rZUrh%Me1hJfKpeZd+81TJkh+h(Ad%P&Z$GEUVJMbB
+22Z&!bihZSVS,c833@fdV#TH#YM5,DkUpP-Z0P9jUkZUq#mZi"YdZBR)+[-CSPE4
+6QPc9K@edES*2akESHlq*Em2dDq2AeGGAeqPlDliFZBb"a5Me-&6Ge0aqf6'S*1#
+%GX$ma"`lE0@[e[LG0AkI0GhGHe""6GCCG*Akhkr&[VX6$h!k#$KkLVMCqCZVS"-
+D66c'`0USdbRZ#$9jSkf"j!ZCH!+)&fZDpMX[2)'5EELI'MFVQVVII6c8EQ,E"YU
+Ukll@a+kRYi1TTI(TIb-JCcZ9Z1ff4&8Q["Tbir"R"ahR8eXq&[0#mmHXJU*b2&J
+dqbJf@RdYpGA&hF9Be-a"&N36#l&j8'PL8qUNm2C4ZJj+CP1XjZhiF*!!&dpGAeM
+)#b@3!"Dp3i&aQUhai+#6leGA3GlcA-qcdI%k'#[VlVYm[UpAIGhRrLAAY@&I"GC
+IXqrkDSf[Ar+iIfURj%D$8BkB0URTlLYJJVkRkeae0Y@Pp1TZpSAFUHiTEbYJQ-X
+GJe&2"XSq9M6)mN&@MV+F"9A4cPYl(2r(dqDieC(VmeIAAFDRipKR[!Y[Nr$ZX'f
+U,V[YTfdj'Xm'0FC$NXJ@3l+`TqAbmcdFK"JkJJ*"TD`QJ9laq5ZpP(NU00Y"88p
+aU)0(%hXh5l16@jA9r(VY,U+LTZ1(`k@hQi1MJpRP)0e8fGaULNlC5ma"PqceP*B
+B1$GI@Z,kllZfZJ8D-C1bR#(HbU)-hGaT1fNdZkV+q#qUpREHpe-1DZS,ch)qbkc
+6r+[[Vj8JA"`kq$"ZS1TqErQqk,Xrmq09e-beUG[e-%D6-0[`Zp9N(KA'F%h"H9N
+HB"$1388'kdXH6F-JDa#pBIh!-6FQRMA%HVL4ZCc@Mmr9G(DhPel(-9XIiMh!b$S
+S0Ed85$D88(@9%lSCP4B#Tc(Mp6BC"KF86Rj!bkJdEB'F1LlE-4S+fRk$Skl4jc4
+U"YKMiY*6dPY"pqHRjRei-(D%P*-(8pCTb"Yf30iEN!!f@qS'a`("ZZq'l!h49GI
+IED0d(3H09ffDepA-X)-'[M`AEb"[$dYfq31VkQqe%(hTQFh8F[eLc*K-JISimQB
+f"mDCXUFdl!3Td(,VENfZJjJQe!31VSrCfepa2emENVVMQX98A986DMb,bReFM+c
+d%cKaj1#3!$UHch@SJ[0SD%j0j'Z,`V1f@SMb@&kY)bDLTZkH$lpRGd%@6D`EVUF
+jA5mjSkV6epK"Mk#NTiXQ`Mir(6,Z[%1CXq(e2@CUNVhh!qC96KP9E!qY*FU"jC0
+'jQ[YXe`q*mIcpAGi2dL#0c9l,0DHZJlZB6"[0e9aZLjR6hhXG&TlEr0bmJV(j+5
+*EGAGpR)2[bFj"XVbRZ+`ch0X[Tj1bdXDCF2mJT2@f#TajrSidQ2AjLqMkHfYVlK
+hhJ@dEP,#k`Hfc9e9CVYTbYSS1EPC@HUC-'b0KM,c,bPh@FJ@IDRJ$4H'`3mJ[""
+,UE[835p&8h&&33@X%E2h&pR0(8DHXJTEHFLr$b8HHLb@36Mp*"B4ZLe9RJejLmJ
+)+eGA'jL$6Pr6qY219&54U8&6!f@B9GIB91[MeGAG@f$l2-CV6eR$r2(bZ9ZG2GG
+5p39e%EP19cR$qpbqDfAGl(8B1RJTlHfFJTj0hIGC"q%JTp%V1[,J&h8`#SThUG8
+DCZP"5CXY'90jb$clIKD1kZlDAa1Kbr-alD#qq[B@&ETlUfiH$`qrZSh+9ppHGYE
+EV5rTjI(iq#KJjZE)QD-aLAF[GE,j8%i``k+AU)-jU)0`4iZ&RF-Q8&i3@cN&2I9
+0R33A99"XXjHH0'k#ic'D),k@*5hAVq[El+V+kkf#kX),EDjUKJ`EZl[Y1G*R9h&
+eI'GFL[p,YS*QBJ[0b4MfN!"19PA@28&2KrTbYaHEVCCM1IjeaPciHRYS#m+DHVD
+klZjV,Eb1LjA1IjlmXbi0!5TPNdjRNh'kr5@Bmh"h"!fU"F9Y'CDA@e-RC9$&L)[
+198ES*Qbc#JT99fRL5hN&1X8&)2)k+2B9pKArkJZVlrPC(Lm[8r(YYcEh&,U)041
+ca5jZUZRV5rj5KD)*PP1VZk`Z[C`eq'C1k`11FJVC02)b$b#9RDjUV%Ir@$5dFj3
+9G*Mk##mUieaZUj39fHUXlZVUcLHe3i6US3CTCRpeL@aG)QN&UJRA92Z#rkLTerF
+&pdq3!&mREQkVP4be&ER+d`p8ph(Z`$h"5Xf#d'kPP*A8Q8Q$UHI*e61TdD'#L4j
+p[12),@YG9f[$V66N6TaVU2A2NkCqlUGa-UCNYbGA0`6Qd(46h4TLqXp`A$(H13B
+JiNUMJZY,"XXeHF2UCc0DKX&iPh3DHNJdXp"ZUBJefAaS2e3F10bqF*iACQcdqDV
+f6`TjK2$pYelQD)0d4Y*c#H0R"Tb$9c(dpAI@ehrU`p"rqJe9[9`5TYmimRKj%cG
+ED6"6rr`E8bD9B,'h"+RPkHSf@MkQS,JBM1Hp*FV3Trk8pr*heR1I3Z,DAaZ8MFV
+(jjlRK@[ZH&BS0k@$5XRPN!#2PELP0KklJjU58N2,JP`'0FGhbUHirVA9e2+R)r*
+6)q9q,"'XkIS,["dX(pG$-TEZMdV)0AfL[,[V1IE26QlCqi-RE-r,pR10JcpD6H4
+lM4cP5BjXe`r2eE*liA$kR8APEZVAUHlQE+fVkISM)MhY2fI!i[Cr)e&eEH6fIa&
+KMq9e0"29UY)dCIkqN3B#1GL@lk!`ml*BNS*G2SpeSqLNp$CpC*)'(,r`-RHC1lj
+ldV$08NjjpaG9pYGA9hjrT@'RZX'mYVkq`E["jZqVV#ViTb5A92m1kRl25e'SRlF
+J[c4IkJV-K@R,XM$-V,DB)(1%plXN&'Z0P8G6U+REr+M62k`HI%a)qI1+VUG[6fG
+hEDHXTjR6ph23F+iJm+4GdmM5`90CTihB`FLXV1ZX04E6paTp2Tl#Rcmc"-c&K!A
+0VZ$MDUiV#3fSTG4SrP3E@RIF&ih3Ir`Eb0'q*QSqANi1DZY2iAGpr6h0erPmJ[c
+I8j!!GJ[*hAlC`Z%6+fFI)+Z6[LbDI9#qf5Z"kU$L@HiVY2(0iQ29ef6NmA@epC'
+jLZVkZ[UIY3Ah$m$89e6fVX%mjMVI(G6"QAB*c+8,c)*86N%HH))k0b#-($mq92G
+CDePE'fpaQS0,'-81BRf3!%2[+#'MJiC"#6BHIXDcMepBrZ#&eApB9!+"jV(Z`2`
+Gpd$,JIr)h3GVB9fkYEEZjPeG'[a'V04TDI3AAeRb"r@2)(aj2,dTMX-QejRhN!!
+kR,2Tij!!D,Uj-c15eXT,(6,X,DLb'2VXe(JreA4p2A9V))f$CbIDJiDJM'GR*"e
+11YlIQQCRS+bJ-(G,5eP4"pl,3CbLkakJM"e20Z34hfCLCHlUf`4YP"'EQ)QRJV1
+fC!q#mdmB4A'Vk[@eDJKQP"$S5L[0%%,DVUELkV$hGG`Z[j6e2GdreGV5`,8pQ[q
+CUjqKfRlm(UFjH9XH2bX[GAAellkfVX)h,kI6l,f0E'j,@mVe-'LMG$CZ`+j+ZTE
+a6CTEbmcja'2Z"I3%#h*Y!*idRj8%fC[ZIZUrCrUdppE@'YVlbfp#[Um(l9K`r!0
+VR[B,EMdZPRjNH4eNp&E!DPZYd4PSRB$EYX"SUkeZFUG[U'3&YEHFj`SHfPh8c0+
+Gc219NBmR0a"pUKJYFFA)p2(%,$@D2bEMfC'RcQF8",Yb!P2-ZU[UHEJ,Ukh*Y46
+pjRELFVXdGZEQH*dIRkcpr+4Xrm@[X0ep+2Tl@qZZmqIU-j,YYpPHLUmeIIkX-ep
+$Xq6Jp+2d8L6Sc@H-[TfpIP'Sla`$eQMkaGQM8$i[)aa892aXIXU$2p!DX(N#ICJ
+PdXcLFa"hZ[mrXZ**raIIrepe$9kIiP9`mE6qa-[Y4IHcc0pkqBadQYNGa1U")p+
+L#fVC0+BXDc4e2ej-Dc#,R))mMD9@jeZAZ-jMV[C39pG5em[6NXi-e"F@"d3DLPQ
+cmbTm#IZ)e,Q2PAQSUXe(%,`rZmaQ+rYXeQ6,*E@eA'bXcKRN2ZqTMmPpI+hHSaa
+ePLrK'p@lSLc+VMFVa[NEl3F2kp2d2b+cKhAjDdJ2jrCGeTme,pZer96[)%5FRGq
+2XTdiLLMfA@Q`Xl!LTbrChmRG90h'Q9Kh*Md0lR[C'dP13(U&eqkrC`5kbIq(mq$
+l9c[ZIj'DraIGr@-J4FerqGLEY@[Vr[9lB%8'hLk"['CH9-cacV+90ir8"k[Fpkj
+!HCJhd'KXkr5PF(MR`38acPU"@PpI08p9CkHPafAq,8hIGc"%Fc@D,p8(ECV8Pq0
+b"4j,$Y0FPfC!TP2rQ90hehjLYkCGhGYi'T8#p9PHKjQViIqUkkmr@f&GTqL0-eA
+pqA6r(UlDqlf[cARkfYp+"mJATAq3!#qZJjk$TriAj!XADJ@HB3J@Gf6(@(cp&pV
+`0pDFM1IiiIIeGeaHll,l($pl1Hc*iHD[[rqhVllEN!!UPfmARf`*i&6`2(JbC0%
+l'YY!I&rF8paNr5S*PrNI5kbRYqEf@bU5"A$UFHHqKJbFe'T[V4T16NphbNES,Z,
+2r)adc-lZkR)PV@90hIN$)15m+#2MZII8#q5Z$fb&!ZJI8#p369cAr-jaFrbA490
+apH`YH,VUqZdIGCLeYHdha21e[YE6p"FI8QF$GE+$4[)%CKlJ35aIN!!M-@VHb!H
+a%0[r8&,ePce9Aq[NCMLCclRRpjTlVLIAj@jVrCf0VB8r-9AfVAm98IAc"3a,CX"
+[-Nl)d$hMr)$p53(jldUNplc"UCkTq[m@#B3(PfTf6@c5adRD&ZG,&q8f!fBYB09
+,*Sp$QXeAaZ8JZlDfAJ(dpDFK0XBm9b49[!FXFTlLklrUqCiQDiR*G"mHRk$Xkqe
+`EJJ0De1JPc1Xq98r'j2V1EMF'Yp+Yaa``'pCZQAb&LNJjZSPl3`DRbP'kIGALrB
+28kl)CHXE-ZC6cP2F9Ge"kqal$1kraZ*AkR`qEcr3eAh1(l-b`M91JqETBX@LSQ2
+SlGNIq9K"MYAGST8rC6GP3(EY,F0ciqRJdqkfNDckcCEURJZq(YqEqM"FCLRNh9e
+'Njbqf@FTCq4E4T1RNjU$-4FeU+E1DLfV3qkAUjFb2MX[ECU[MabcLfVdqB)r3r&
+Z[[A'FLNREc*e0hp3cmQDDiZMckk6SB*PaDjM-DVNkSajdq@pM44Y&Q2dDNiD2j9
+Z1kPFj&3XVlqhV@(-(Q)0,Z6hd(Yk38[b-lf[&VmjPifQl+S2FSc(b1Ec%@,"U++
+*DYGp6`Db#,d$q1miU@1qYJPeGKTmGhYfH9[T6e28q[1,VemG)YBd'DQ$ZS+Rke2
+UqKNKfc'ESjqRYVCrVV,A,Vj942hFDUM`HaEI$dNbUUkk0GDA5dac,8p9e!MDE1D
++1HU'+mSHJET-Tl[2acQr"&XPjd6-R"Sdk1EJk`VI@R(km'3jNG(QD@e[XhUTQ@V
+H$B9@STE@Rbm'SRYa)YB-q9HeQ3eGh5l)pJklcm'BHh6Si0'ik5TZEUYEGmeGcEk
+k[Uk$U93Z1QkTmX1QDGJ,1D-bfANDTi@Zh&20k+FqT`,r2cN'dkRlpB@*%G#6(bS
+p6pf4U),8lR&A,ZUr4feh"ip2Gr+0GhGACmr1RYZXMc0TmUYNd"NZ2'i2NS*h2@1
+d-deC"'ZckEUNm3EqRQ5ZZkIXM@dh*GMdm%j9paDjrSC2ZIdMlV8Ah0`IHbZYk26
+m6SC0ee1FVH$ePK@bIp`EQeMG$"R*q3l!1,UVL#Tr#&(V#Ll+d%J3*IbVCab!QdV
+6VY9peXSNrpESG46hKlhmEimI+c,H$8mh1H2'dCZQU!h8k1fA34R$V0r'fq$9YJ6
+d,B%l+0Emfj!!*Q3+"4V`4+5I'I&0[Bq8L$8D*kFQVjH1EH*)FlYEMQCKFe%bRNa
+XK192HBqKadbfLb2ApI6cX"bSp6MT%MSB0''+Tfr0pBGcqm18r9m["DbYbH4Y@#k
+-hBUH$D($&p%lV0ajmMQjql[,`LrB3FACG'II*E`GAYkU6p#UM5DUM0P(2acEQTG
+([EUfUk1TZ,lYVZY2PrmIZ0jU0dQ6XY42rF'4i@1Z+KM)SS-j5VfcqT@TbV6(2*J
+DMp(ZPm9-BpbFkEpB)(4[M&RYcYmdI4458NrEVq[4m-8&6CM("cd&h8rA,'G3[C`
+dHkM8q3RRM)PVj-**dE$(m$RKNA#C($26ZQ4d&R"eY(6j@6[NbCfq1Fq1(2(9e"'
+NlHqc9G(SB,l039[+IClLqMA"q&[*EIj8cD#jTlM5TNqZI+"VUAQh@8HEK*GFqZd
+IdbcKENdm8C8M4q1q53ZLc+$1c+R,R"%aPpk-[QcfESr3-NRShic2)ZbPr6mpMVI
+6Rl9cqa8(qXY`lUfdXj8m+0"E@!bY,"SKPl*NP,AHR@[SkHB58VQ58mV`#BAbP*3
+c2PM06d@1Xj%r*[-jiq1*pXTEU6[P,fYlbRl@$CD-V)GCC"`U82B,!6Si*8hF`D2
+(9XKNPk&NPid"rqKeDCPUp-c1*QFPbLCNYic!8-CP`D,qIe8rCkHVBc-'[fA`imI
++b+'FNRh+pPE(Q@Je%HSDbq&GA@RHQAZ[*qccC(%MVb@h'AH%PXafeY1a-a9dr45
+0@G3KRLMTcD+mKQXce*hQSmD6ZEaM1FXUTj0BAbY#QASE8rheE4k#KSFGCk%pLUR
+M,TGCE13DIaek45kGZTGe(TiN&EN#"4m$"!Zf+9S``kI+G"CkFfVkXrIAhZ8re(M
+5*kI2jF(q,j-"mYPp-[NCjcKAc'$`qf2j0(K"cRNh#q2(GCbFMc!Hp66mT&NdXb$
+3`@I#U*rNT!R6mC)0+@#-m+Z[(V@M)UIXUpA,ZZT2MPCHhFNaQ$'e-UFG&b%p"SB
+mLcdm@6fhEEIEjUIR$FGPr0CeKlLTeh*ACm-4rUqRM`A8UFJh*IdTb$ei[3T9!UV
+B1UQ@HRdm"dUDXfrqpMaSPe2R`B-CNMkYGT6qqqFQ8dj`Ye(Sip6Em20@&G2h"r3
++#ReZ82,`QG'BcSbCe48bD@UPK-TG,"EjLRUE2F!1J*4jrJ92*'3GNT&!ahk@B(q
+0M--P(-UCcD6ch+4P4TJlApGpPR0%5S0deE4,r@hQj-JEGITf0Z6I4,kFdpeTp2G
+&&9,"aC0pU+H4IF,FFc6-E0XQcB4T0j8q&fHY[+V4%-lKITfF-3hC"q3fPTj0Y"&
+0Z'lJV+kRbeK"Uj0e96mCJ4c&83[2RYGFIE&aIkmcUGdAVCGUr(%Eq!iZFLlImNk
+HMQC"e-rPRMR)B$%+Bc0FbJ69e2aLJ4HEi*6bT!)B56e#AGB1QC6r@j+4Tme9(kL
+A9fIq038XLie&2d%aMTrc*[Xi1QIrTf944ecfk9%c13DY8"Up(e*%U0-ZYkIAaR,
+beMa0V"8RL5hAP6-(89&G"EPA@RJMFPVcm"$Xl1F3eTA(j8hHRc4a`Aapl0UI#KG
+eXj(2kZYZB"8QZZJYGM@HBXme33EhHkFGmj!!8a'%qKPVTQH6Pmr6p&PELk2[N4,
+VDH*-J+@d4#'TaXAHS0IcmK!E3kHfU0(rrE9JN!#6H@&,TjkS+8jGmID(19HM'4N
+Ur)qP8C+ZTl2KfeIABiil'I0r'Q9qUCrDmZ0c$kZimNGP2-qG"A40hSLjA-fZdUk
+HleKb$9ZV1kp'j,imDL91$1(VUEUP2Vr2GrZVU`X$pE"G22rJ93S[Z#RpacF@hmH
+*mU$jbrAA2b"eAd&aABmGP'2qi`G,@b6T3VmYQ1hP-VFE)rQSLI"ZT46A5Vml*M0
+A+r$RXlLm1ZC6dq2YG(U2[`Ie6ZZlUPqE"SkM14cCEZ)+5$9c$mB-PAik#Ae@XRY
+p-VqcNb6mqVTRHXkQ$[V98k,GPM`(llSp+G2AjdD$KEhGj`fi3GG&cqRX1E1G,ej
+E!PI@fB[RYjfY,IDH[1ALq)M90a6Rq`(kSGkbZJQr+afhkc)5$96H&![PCLINA9G
+@9,AT19-(8eG6*mF`S,mT+LYdI8r-M(h@feI"XQ&#YQ5MTq-HY`E!#r5(j5rCURV
+5kqRTqReP2r66`D2-98Brkfc'9q(",iF&a96QPdYK(JQm2(38ra-IQLm[dG2UTRh
+i1(TdmiqR0de21m05e-84QB5YJqE6`EMY[+2&YZEk$jZbbmcIGU3Ki8YJ5ZZTYGe
+4'Q#ReE+dFr*fp1IihZ1(Q+XQ*cKDBbLFNZRTZK99dDIfqFLfHj1SMGkFlY*4+5Z
+hTMrN('ecFD6XXemSH0A8r@QH4d24E+0UVJmpQbB6Ib8miA@e@SFP"Jm-bAbUfRZ
+lbYR+QP`S-hkdBGm[5e&2bGINZ(6aXqD(UQC@rrcPXBmkk01EHA"6H[FjJH8c1@e
+IH"5(M'rP`+d0dj9d0K"NSmQfb"LrZ$hbZfc&"*SmGDlVC9fP+SH&6b0P5h@eTM5
+4""eKFZqlHE6S,1e*[`DA5aPh6&eXTbYNajNDibYhq6j8Ij9EbNrEjU,)h[#di8H
+XMAGGffkJ2VfRXGEl+H,qAF9XRmQej`hep46rHZ1EfAj+IkpaTFe@m[*#TcF%Rj4
+dJk@$D)MSR,MJqlH9djSp&3ai0"(UcpIqb2E10HM4@(UD)k-2,1aAAe[+8G9139Y
+I2FD$"Z+E"c9VBAGFDITNHCeeSNeI`EHVJR2(Tj(jUA5dp[XSX'3LqP1EUYR1TJL
+@Y,XZ(m5$qAAFTNIjhrflrXcbc"9l-m!rp1RQAphImTrA*pR`*bFRGcd0`CP('[1
+HP@I$h[jUUi0HL4+qLIB4Nq$NrVAriIjGGm,VZ"Ir8aq$5K"qT`%3qLp+TrPNp9r
+,JpGHHChGq%2Pjl*rdcGj5c0lSlA4d%cQi2mH1AI1EJUC`AjkBMUidmQYh%(2F#l
+h0RT5"8k)fVTj09`ieG"eh!klJGG@6ZjbI!UTqC5hp6ErQVjfRXlDFVk#GR,k21@
+d'pR+q,bf6Z-RdA!qTITQqZUf2ddN'R6-klqQ6p,kPj`HZTD@PjHHqT*'ECjL,%R
+l1mi%&J-c(a*AdFPD`5FR`HReE'8GH(kP$"jR!Vi1Ri#)24F!CACZ-VS[5VChFK6
+c2"Jmcq9,F`5,FQj66,bQ0bcb0aS+I(60cCp@9UF2KA%E,B*k61(83CUmMAmDrTk
+YM"SjZ4i&,I8ZBad5JR+@E%adHC3@mM(EMDcZ1RfTHMJiA#i@DS*f#TJb%J#mjr$
+)A&42fCR!TMTkRh,dZK0T@P`HiJZTPAr#iMjDGRlcD6f1h%614-MN,H)3mR0,5h&
+,R)NJ"q1N38f1Na%'Tq48e-r*c83iP0(2b*q418ZM3-P(((2c+U9+L(R1LdXUEe-
+j"%Qa)REG9-M8%6ULm&5pY%Z0+DeCXjbk!+*da,-mJdL*%hZeJScBbNdZpLDKE8a
+dN!$4fqpc%iDqZL2MbYmaN!$UBN6*C#iTH%!6*40$cFDeMcPEF90R`Y,14MV`pAM
+V25d&R%LH[Zi+5M"(58'1YqETi0lI9YZG+NbTG6"+YTqhfN5*2lIbTP9"U+$)G6"
+23DL,*UC'F[0&5h9Ee-688-j'ZkHIb&$3#4cQ1@1Lh9iJrc62QF2FA92)ae[YjP2
+bFrYk',%L4E2-3G635*[8aE1ie&")LfHiam6F4)PY2aC&Y%YXGCe0Z!HNL8P)#Z,
+MSXr)dZ1La"4a-K%L5B+AJI`fpRMG"mAVHXjbPREHMT*kMRBX@JRE1aSjfZcZ[Sl
+'hT,Hheq6TGR(LpRBj14ZBml0j%Z4YBmAIi-ZbXiZGempJdG[JmL,El@22E2"cYP
+4i0[A9hliq$%cZ$0S*G"4heG0XDA8jh1dF@9I9e[([VH95f0*4dY*A5Uk4VmlEaC
+fZSk1,RC&G(T)ZGXmlA6e*56Bmf,&SiY*)Sj&R5@FH9ViXfNj%l5amENBh)ZFD2A
+6e,(N@9cME1hSpI+MlkkSj!3,1bTH438Np5"#VXk!bjj%pb*kPT)mL90cXUE58Q0
+CFM1h10FK"T)XIdDl1alV[jkPP5VlDefqYklI4j9G2Cf9MA2)aU5bcZ0(ZF#jj&c
+CA[)T+#NRERcZ4b-l5Bf0ACf9b-DjXZ45CfkT-l3A0pLBf!)2$aU2N5V19+TC'00
+XpRCFMAeb-Z0&VVI#cZcT,HZT2@XGI28XfPYlQZr[h9pA9Z0&hmU2AE(N8FH9(`H
+4REG(21f@G4aLA2)T+@GT0I2A1rj()SpHPMEX1A)cYG5@qGTA6RMIDT,HaQdT$Za
+XD6NFLNZFDaaV,'cY*K@qeV[@RT%f2QE'hl,ZVl1dNHNhmf2RBpG5Ek9+j&c0XK8
+l(-l(BdHaf0N&hNChNFMBf9*)RU6Fl'JlVAkqaRH4CCQMBFGMXH458QGcZij()XV
+QbVZ4EkqhQapI5CfGZGIEkqZj()epL`%ihFf1[j(%VT%V1jR1hfGVVk2RDlDaimp
+(LaEI1b)XMAf)9,'Y*pJXVV1JVSZGj&,i&[eP(b,,Ckr-f)(0IEfpF8Z9eMRGc)P
+ImrRVjkE3EQ45E21Mpj&GEef[aZrXGIRH4IDqcP8QTYkkbXrp@qqMfqch&(BM6Md
+HGVTY(+#'`c6E'NemHZTBPGVj(JE12BaGVb06Efj$HaemfZSjXHbP@j1,"PGb-kH
+T8#iqecXIN@6$6BMVpDZc[jrCNHa+XV1JYml[SqGN8F'GVT8l5EkkVSmGdba3cm1
+M4SVXl4b1jT!!VST0Vb2BP000E0cU03$DkM`F'45@9G58R)S-l0L)(jfh,(YL($A
+K`lV9ITfYR0hdVAmcBfG"5Ek2)SphREH4&T-ECdNUJemU8`fdGE0XYI`iq[P4DkZ
+N9e[&XlVcU1bj&N8&ak1+MGEKZQL*TG6I@FfNXD5ZLdFp(T'"#ZP4iZaZBqabIfT
+YMCGrCBdfZfXVSl'PT,IIN!!LcT-DhcY[XCY(@f2G8NfMXE'9+XGI&eqCb1CXE'b
+`EU+1qMLN!XlCak311eP@+1@[c-jBcT&Q9BNY#KfEA9e*REH238L"TGlYip(Bh-H
+abIjjZarRME@9h3EYr+Sl1NT)p[EihR4l-Vd+8j9(&L-1&(Vmc9bpH`i5YI0MPKq
+GRE21aCABDq,@jcX(6S#,Af-mMYC@p*4fHGP&ibP3*T+iSrXF#bV[biCFJXU!P$)
+VYr+RD1NT+l[`h5Xl%T,U22"YYlFT%4YXE,f%E*@[VT9L`f@l6CEf+PrVjF5aS'Q
+Q,(QaiTGH#r(fZrer)XVHGQcSApV)T#RMN9e(XJ`5Je8%@M%r0QPC'[c-ZACFMf)
+XhAeY[Vml+ek-2SaGI4jRV24Qf-dCLCG,Vh)J5T9Pi%ICf8l&Qf-pV`965NMX-lX
+LdFLYV+1,A%M`Ef1[e1CYGMb0p4kqYf*H"Yjll9[RI4T0IADVf[4"d#),&MDkrAh
+dJDe(0"TA5VHb#hGA9P28NhBlkHRXl0RFl5D$1cXUcVL(GG54HhM[#jUCZaj(k54
+'aQcEHImfherG&E@Thj00&ZD8cKHQkqbj'qDAk2AcCf90X8AD#MP6GI[U#JYrBRU
+6ICfGTE1ERFl&lH9VlTKEeq[e1qQf@aj%8,R$XCY[M@r)+aYpY80AXY@A)XGpC4E
+0KFMkrN8FpX3XajA)T6A$rj)Qd&[ICfGUjZ[Yj@*4dJA0R&epMb0I&4E-6Zae2%X
+N@@PS'a)JPN"cBm2IPbC&A1SUaGM&TClhpMM@8HafmHEb*"KZP8NUPYlH,2&lB,m
+faSiTFTj&G[YU1baMf1TLieNA30p)XYr(T,UMYir)L+U2CNef'EAJR4PMP@pLMc(
+XE+Nf1aLrUMdFhDf9*b*@qLbU0(+Ve1#B4C9[+QfCHQP4j8LNYk5,2DRBf0e(VSX
+hN!"8aI"dBGGp&0Dc"MfXA"-k[9qKRIY4CAkHKT+k2EcXUeYrTarTfXHecZFbXlR
+CkhZT@qM`4pI4d%@9XC[)fF8LUe+N&q*k0P+XCe*LDC9i+$cT@$(VXV3B-@h-TFH
+ZPCfMkb,Ehhli0R5ElI@jGqRFlPDk$ZHpcYcA#fSaEDq9XiYbAhBmd@YG&*9&jqJ
+Yr3Ml2L@*YIDrN!"6DeC4E(I8I)LrR[[cfmI1fAm$D"cYp5E@255-l2Ch1dNfhLr
+hVVUhMc*k235VUEeGG)j%UGemHPQdC5j&8b,%aSZ,*@##bj&GN!#NRlVmqGUU5IZ
+6'6R52-@2(QLApk6qJZa5Tk2-RD14&VSm8a#Q)Vhq4Dl1N[BmHhQehdcBd-`m@PS
+m6'BU0Ib,kaBTk1afG(b1jj&eRH4(Yl+ZLd(RA@eh*TLSqH-h(Xl12Xk#PZYI-aT
+@a0E"LE%dB&@TQaS%Q1'D2H4EeekACD1hSip(+(0XEAr@GVXl3E1HQ6Y*RD5kZGV
+(ZE'apqaYD1Nf0pNirjE'G@N1D*61cXLNrpb,'8E4Z$b,U,BaGMXGH!i8R)qQ4%M
+l+afY(C9eGqR1l12+iC&`&BFa%4l'jXN,[IpV`0MVk8[lDrKmLhcSE6*Ze#l'ecY
+GddHkfG(I4D594hecYFk)6%XEihmGmMcVa"dNI1rqaV*(lf,'kS`SFMBh)BipMRG
+IhZ[MdG,Y#RU,RI3[U@4`pH##ECjfaep*ACeq([LA10RGIDKi*Vl'qqe5h9"G6a`
+$h1eP01F@ZhmI1cecM9e"h8Hh0hHh$PVl(hQR2Bkr'4bPBh$&[YLAf[p#kP6G9cG
+e4P9Q[0dBZ@1Qk3MFDQVl8ZQfaqe+fFHq,SfG$H45XE(L&PQeP9dlBd&*&Srl4kk
+hSl,U*TQA#2b#ibiFC9M&Qih$)-bYZMNCH09Xq4CAdfaLkq1B4GHkFk6AfE$Tb,U
+NXGr(0E@e4eT%GGR4f-Uq9aVLDmM0h8UHem@PXDkNSjii`,H25HD#d1X8+0'ALlR
+AcEHaSj[QLJP4jXJeTk2Apl&QaHVZR$SBpl'Mj'[,r2)VM!lb,,'epMXdFj9p&Ql
+$Cqq-!c843p@-hI@BGm(Ajd1FLaVUk+(,Cfm@a5JSpIC4BYPVj4B#BMc0j4f3!+'
+EX!ea3jZ'KYB*a!"U0mEZM1rlpMA6Z[XIBep)AJU#,VlVDaD1cVXk*[CKCP@FKdY
+5*[dl*&SUIXYIKkrAKD0Zp&TJeQkq9Br60LVZV'bR@PhCl2AiKK,RNADi,Y[b+@M
+-PdIAKHcT890XeV`FJ,[)#+kAF'M#lb%AMUUh+')&Q&RBf8m`XR6&j#,9"Bkrf-l
+Bh45P5NeXl&XC@GVU1Z$PRc1TC&KmdZ-GkD`9MJf*K`Li48T4bV&&Bf`bmL"hNEl
+Af5fac@C`q(Vl'JXYIl&PEf*YK5)l5NE+Y)6fcXL9Vl+DLMr0`Sm59C-+9b*-V'e
+j8Z&,qB8MGEYeTbj%fkB9DAAq`8"jh1f0R(LbTdPI+T!!Z8@mUZQfi9#T#,`h#[l
+&M0iP[BY90L([APmT9J)Vl1aXU8+VK8NDq,`pM&XFlLCfh[V'cYj8@92"CQQBJ'`
+@jdfB#S0&NK"l0M0if[Sr4XH)FY*XMa3AY+q[ZM$#UN`VqeJb-l4m2AR%&cf'F3%
+UqemUNYk![HSUl@EC&m+hj%U,4mhVpL!ZaXD2L'rB&[M'jMEqMBkrLB*QpEV$QJS
+aAPkc1fD,S@biG(iCZUmMN6BmSlJ8IIDr"0E8kH0(BehG(BZXMCaf)+l'M&9Vl(r
+KVEdP*IHMIIRYF',IE2L8Q$+[YR()J1'-(L[0!UA9&b1c[ZrcQqSj[Elqq1G&Aei
+r$VV'N!#I61lI(hhjq45rhVT(jBTb!Ge+T14(f2)XDj`ecdLZri(d0[GAhjp6I4E
+lf%Dk8`+Dq2CE%(YG01%80@[VZd4XT-k`hGeXbPrIheGF)h(0BA`A6GY0RqIN5[l
+al'ccYc4d'GSb"Y!B!M*mATU1J-A0P&cSEjfqr23CqqLh8l[X'EIE-d*'%@,4a&b
+2%#+6R-kZ&4TXRE'HRU"('UfYeR@(+PQjdhP-l0MhaAh+lP(,r!9Fl4ak5ZT$EGc
+S`+5kVVHh-G4b6&&XIN4l'JS+h1dGP5&rS[lE1ZMllI8P(IE1,ElkahdhCbYV%*@
+4j@GCf0)pL8P5U1EA@qFUiZckbYlU,EpI4dP(A4qhMdHC1fhf+a&CfaP,JDemfJB
+KqrV[l!`aL8i3PeMD1NcYLVmD2mHPSDd4eF(fh2EIY`iE1NSq(G6fcepGXpR0LP-
+@cYl'Z1IXVfVJpCh-J*YpR5DRAeY(k*KLLak2+VV8KiYlV'er)ZEipX5JVUA1cIY
+8N@ZqQ1HbYr4&RA8QaVZE1DcBmhBaiK@IBjh1dZ3V4&)pC$C5MGmb'bT*Y*IE2Yk
+5JZ"#ChAalUZf9R2I8Xk5iBJPLU,4c3UGYhmZ9kDPUTj$1hcr63(CrfXU8GTfZPB
+*ZpfpU&3lF9GXU@N[Pc,hf0b14FljcH91bhR0bG0[1Q-+GXU5kfZ$)1Y4XD59FmL
+,RERN(I1f2DDrBf4aff9GCFKDm1[fqCr,EmMBLUcZClI1jfh!0&LcqqfP*(Z1hT)
+mIN8RjippAC!!lHqqe4j'NXMfc!Eifa2DhVVHUT,HbrYEl21fYppU8Hd8KcEh`$"
+!QlK39dM"T+89HGP#DLrPQK&kD956qq2F[Yc`)rT9p-VGSmlEp((-1@GZCipMhDd
+Ndkqq[T140Ym'Ner[fq(CBe[C6Z0CA2m-ENlUbZFlRBpVp120[J$9[kGY&PCRkF@
+959hXjh8dP(je*,qRJqa5'$rIE'blV'pr$X[4ZI!AJ4ZH4P9iCXEZU6YijGa12-(
+e(,!@McI8C-ZPSl-r3DhPRZ"RF1hd@ZpL1%kiqR0MrTc[)pQNPFLkaX3k2YIfr*h
+0"%VZ4XDkZh'GfTMXXpVMA*[TB9PM@I[f@eXJ'kr'k(1T6h2)iN5El"Y1E'a`lV1
+h1*MBh$pUblSc$Mkj&N[GeXcEFaU2'eq[lGCRBqaTl(ArRpLcaU@Z[L8dLEFiePC
+8Ti9E,qfdf-61QY"XChN8%M1N8XlU5jI)2fA9fGA[a5-l+1F#cN,)%Q"A9dHcT*%
+f9A4EHhN8YZ"8Z`fFdaTVi1THGhp(,[XleQcYrCVTkhSj9GCR6FYlIZU6AcXHhl5
+qpUhl6ICh$fYeK'1#Z1b$k*m(Y*lqqYrDXEIhpVEiCiak3lJXfbrHANFlAA@[prC
+QY4LEA$ZYpJ"aRTYPk"iJ,HDE4I%fGpqrLAAXl2[jTb9@ml)LrD2*b9cpTUGRp12
+eHcqQc[RdXmF+-HhcXfjZFDePA0P5CABmL2&N46Pl2+PBdCfUMKcj&cCfHAq4fAe
+lhhDVTlVlrUI"1b*h6c[G6[fjhajhbjhp-lkFlrLGRkIQ[PE$[Ih6dl2F[2Fj2I%
+RZRRYV2H*2HP2I"2cpA2r$RqKRrR6qURlUIfXriNrqLIrT2rqLdXAPS[3'FIAaIX
+4Ge&r2&rC&rV8mYdICICmlrP"8d(28(8d(eD$aD$pY"L80G3k@Kf9$pqKrK3mDLb
+G&ce&E8@eS[&S[Bb%'3j[)I,b'Vb(FC!!h'3h13hH3b(p-KrbMSkbMq&4p%CD0G4
+r4Spa4rPSr2Srqj'Pb2+C(SFMdZ4l()r3b2eXMZXMqV)rmT)Y*5CZNd0*p#Nq[5I
+IT2bdQrT0qJ)k#(i%(l#@&5B5!MS)IJ3Iq%(Vj#9TpKpcpY,b9,mHPeG,hp,[k8r
+N4bX(3(p+[T`HA"64DEQ+E4de0YDEFdhTdh`8p2cp2mqRlQRp#Rrc6e%HSc04rp8
+GA8I4U0a8H48IYU2le(`90"8j1TPe23e2891`UIV92M92kURf+R&M8NEPBh34VD0
+XBhfBflMIdMFL0b)[*5mKc-APB[+4HBjIQD2PqCS1Aj,+CA0jZQU+LUTkLPc&"@b
++$Pk(PiZESqGSZCSDE)d-ZJjQMPdA-de&(MdJ1DDJUD'QRU'KS+#ISD'M2p+#TRk
+DKjQJT+2QB[-4H@b(,aIK"Hj-&I-6p934HCLmP&jU,c#1D#H8b2,mac%rc&*c(*6
+mj638e*680&@d0E3d0E64DfQTUfJPj3"PA(S+L4@mT&VXR&Md&&ce268p*c%J,[-
+)#-!fE$2bSC`#6p92e5!JG`cC$Q8"-Kc14VD,QC`-mANV2(80"bpD8Keb!Nj6818
+ae$@cQ8N6Z8rpqMq@DZ6kfXFJ,1CUjSAJ*R@!QHZFGPU'`ZH`ZDZRb@1b8jbfRae
+,54)Z5be&1cNj%LFecdrFj51r3D2ZRL4-hcd@jbV!c1m[Tjh*8N5Ib@@SAq"L)$*
+i'DCJCq61K+!cb6r3bJc%cG*bl#E%b8p%F$X@*NUZJS-F"b)m$Z1L8Vl$X6QSQ4j
+L,Fb@"j`1a*f*52!pNZBXHKNeG3qJp2BkJb,d)1Hd'8Me%5NIS38G###FB)+UJ"6
+1,q'I-ZLR*4)Np16p93dY)3KR!C4-G&R)V4RbC"bFL3J[&D"U*#!DFR)D+'('L3X
+#F-,"Z"2&aSM"-`)83'3)2S)ib2$f%8#jc(23-9$%6(6Np16NqpK'&"'*MBjS6HJ
+G64*eP&M3N`*J`JF#`5-F`%",8(8'!dS-$"I`-1"HG3@F)k#Q-k&&$D!%5@##dj3
+J*BS(3Y1-#c@K&pp`+JJR!+J'T%"3*Y#51E3R%R++H)McP%`*`j'FB&8'-DGRP()
+LfqJfJdJb5"3C4'H`[#4-5dL8NiQ`R91cN8$)B4AX$$k#i-'"LP9(Nj24*j!!2SX
+8S0F#mk$%&,!Q!q#8$bHj+T)["K+B)N5Jb32-G1!FP[BF#im$f1TDRQ88-GPR3jM
+J0X$84rJEB(#R8$NpPDQH%*%S'KB$Z2b-l2ce2%RTkXF$8q$DJR`H6d5G,SF82$k
+$Q3DmTkILBj`,KaS+&Id3C3+"QF!bUr3(8*C*4[!c@9,,&)P&3-#U)VpK-[H6N60
+Z$pS@KB2`*ck2Mp"aMNSJ*6Nr2PAm,+AFGQe,C5rSBN)Q)8&jji*b`J%b%jGB"4$
+$1FZ#Pi+Tb,%,ef1ad5IS)PD`fF`IK5$'NcCBr1cQ8RTr+8Nr1FX2@GTPA9Mcm(H
+EVFadec1BkjjHKRD+6e0b!c-A0$2C(jPcFX"8rU,QKL9-5RSSNL*mKBpTqF$I1%L
+CbM)VX#E$dAFBJ'aBCpl#J*mJq")BL")+(m#V!YD-#b(LVJR3*cV`+6aCSJS840(
+dr1%iU48CC!K*mGJ6L2i&++GU*fPL811b&*1mhFpN0N12lSNlUSN5XCriIB4*fYL
+BiT0TSNp(L6XG%#)6"TQ!DP)84*c8a*bYL6Y4%R2TS-+kY4a*dAH4L6Y6%L8m5*D
+a#@U[bJf,K'23-6F"q!10%R2`j5*k%5*ddJ4Fk@5C40fL#efm5*(ad3T2+f2Ma)R
+aSN6iX5Gq*%R1X#(FIrmM5dhqT(b0qA'plfhVirKC,Mf()XSE(9p"Tm$e-1paXAU
+1$HiI&q$a['*QBZX`1$KB@0$ZiBH`aSF9C-FALqVMAZ([10[-5''jmhX-5jpl@B@
+X`iFE&rhi'X[HXeQ"VSBF,TZqdqZihRmMM"#pcIrX[H$j[BIfpA$`X2aYClIZklm
+I&pcc1YKa-2Lq0jGrkF0rKDE6r"q(cI'Kpl%Ka,r@3iN2Uh)@Ef(&`SBIGZ3)A[l
+X2%aBHdph#KePq"6eK1BN10XF5(h)BGjKiRp-6'p'(!if*$f&lLHjFi%2ZKdkA'K
+`)F8B'%,1(%'"J!@rpf[GBhSr,ZBEN!!CMBf"kR%mcB3l$rQ0$S`8Hh[1c!0m)$Q
+($$rH'p`m$#khfVh'"l$ib)'0Ll(cH"lGPm&kIQG[)F2$ZBIG)*q(m!UrkFD(rel
+qI#reKB(Trjm6$$9a[!K`2-&R$9Dk('a,Rc,fbKm8*@,L`qVf'0L+)BN-5(mH"Kh
+1XiX10$HJV[Eq'pp'($aBI)if(aBI&krMi@"KiPciebPq+iC--1"HJSpce50H&LA
+X2'`iF)9Pl$FqiR2LBA)30'$KIql#(L$ieh[iQZe`hGIV2GKprGr1`)I04'`m$&"
+0LBF1,Ki[D#@pq(@+%jrP'%@GlaEh$aVh'iZ*Ip,KBZ*HP"C&IaX9&'j#MX2-mE#
+r0e(Qh[BBA[qElH"LY+2VHk4144KB8Ijh2p#6%-1l`!USJBX2MBelK3r,`Z`f)(a
+Fh[`3iGl$KB[YIjhRqH0a[-jcr1alA9q*[2'r$q&5C%lJDVG`qVLGJ8"3iTc#A1U
+ZI)ZFA9`iRB%e32ia$cU1,$p[&f2ZB@aKqhKqMK)`LN%C$hf(MFEbHYrcFpVm(Tp
+4UmhUe5!5SKplf4%pJ4+Ka[cq"$$pQ(l-2ZAZ0JE#'(MHV$FiAZE$X2-ed2%jhaV
+rhrDZH*cR[``mA%i-2h52[UifNm$i-6dr'qYLm(JrKa2*mC2'(V3NApq9&i")'(L
+rjKK)qB@,J3pKjT&Y)Ri-$TF,j-10h2U`if[`XEZIc!Qq$J`q5UKlRdH0Kh1ZrVL
+h2Tr,mc![r-ZEdD+Dq,IMaph#1I$%e&P$$XBERhSF6B"Kp93AaI0hIVH,$jQ`a[@
+aI9aZ,aH[)amAaK%P*Z(HiI[Bd2&f0llIMIe`SI@KZEh&[F3'QZhPl$LHVkf(Ki[
+'mN@f,ehPi4*8$+JMMHVlQ`pcGih&aZ$X28i[pF1(%[HSKqHUDF$eXA!`-EaZ$kH
+Qq!F@(lrQ&-f)6YhPk+R$mc&`,RbER%aF5rhIl[GaX3JGaXD'jaF-((BFB2rTpGd
+rMB#V4i`kX,&phU0CKh2iH,LkEU!5iZ0f!1LBH`pl#"cjQ&VYCk[Zp4M3l($klLD
+kjmdNlLhYlJ3l!ZHqVKHjFia&h!i*I%aIFhQ*Hm(i-Ea1#3r`YK[0F1)"2jlrLLJ
+mc#kr%f(1&%hLiRcr@`-)N!!3U3'"Fi82U'$$H%h#q2kZ*a4%q0aXA4H-8`i'*fH
+(m!4BF$hpi@LB@ZpDria@"K`p2LGKf(BBE)4Pa[#[F1(h,Qja#b!YA!rlH&qr&ZI
+Ga2&ZI6ZFD(eEfpi10fJHIhB",M#ehUhZ"X3mm(eGjFpKRZ)1$'(ALk`Gm0lV[&3
+r+crJhH(Hp4LA10`BG2$KBerLQ-J9R)[m8I[QHkAK3AG4erZihME"PqB)ASX)@0K
+qUVXSEZ,K&HQ,[,RPiI`P""-FX0K`[@kr'+V2@if!J2$JB@+k3X2#iKDbKeJGIJ3
+qm"fj`VR#ZHS'pa-AU-9*Ed5lEFKlp(!`,h#a-EeFEc"8iF2"KmhABA&id*4lJHh
+Ki#*hZE$cF0K1aERJL1eHXqAL',A@)0kl'q![5F6KBHa+`EQ(fP59$MF6$`fB1-E
+&i[p,heNb1G`YCMHCKlc&pE%9p['m[!l#p`lR#a)I)KeQZ#QX)H($jF1&m!VM(VH
+`l[rN2D`kI!2*aAiApLN9Ai$(r$KI$Z@@,qpq(e[NAq*c(S8[([XcR-rlQ`pk(@"
+#%PiQlpA#kl!2(l$PqVkbpl$q(mEVeEhMG2k'&[)IiJj`iH+8hGCLDcfiI-`l+`e
+Q(CB&KFP,r)m`Ul#aZqSjh@B(NCMp[hZjp$l@er"JDkp-hAYq,aX6e54pl#A'BER
+Amar6@3hr%c0PM3qD-d`@A-2BIdrlIr"Hi@,#9mA[Tp3TLSfB#9SP2rFA$[GKKCc
+aI`rlrjq[d,RlF1m[abH)3%hDJ)V!I@`0Pql1G2$JCR-J5ki41X%VLBHX[HP"#A4
+JRDFb@QF`UEpV#l"Q3(c,+(#`-6hGGeZ0VZciQ*a)F2A&N!"$Kh2&aX2AAjJ+K-$
+82[HPrlb[GmCCHpj$XI9"cLHDNRLAYcHPEhU+*f`!*ej+I'hH0XH-U!BGGT&P9pE
+q1(iIBEXbN!"QXhL'ZXKi1*Ii@XpcBGHcB1hRUrppA$mdee2H-ZJYEdfL`,qpb"r
+A10i`YH+)(M2&UYTV$mQbK`qSaIpf9cfH*fI%ef*FiCX*TDiYcjRVBHahIU%U3LH
+l[2KAZZkq(mhV&AIPB'la#'%2SrZ`mAc0Am1pKpl#rki9F*3+`)I@[b10clAiXAc
+29qIqhd&Rfa9BrMB@0HqYKA-25qieIpG[*r`1`kq(rAlqV++EhGm8P)+#bKmcl1&
+$m&lJDidEqVrkp)'NHc)#"cc2+-p1(LE(#rEIh[[IR)9"F-[PrX10KqVlSjIH0+!
+SBI1p(l'lZH4KEcVSI9kMeIJ)K#Hm$&a[h"#kAh[-[F$#a-$d5fPPfAheFp`L&q0
+LBYlV2mqpJBIblRaM#!B')IHmh'pE%f&k8PBc0l,$qKi(`q[KrhJGRkUbHNV'8Vi
+Rp,f(i2H[I'l!ZbDcq*8#YaV$aPTd`pfE9-1)D[66F($#@51'(bm6%ehZQ6*@lP1
+1'@3HCqD%a3R!iE3THY02m2YF5jKp1rZERX#Mh$rMlS8'PJHZ,lZ`Z4mKi@h6Fi'
+,$jV+E1SZH`f(QqX#9@a*Ch2"hGN'Ah3blYB*,e"AY-A&kh'r0$kJ3F$'[GGKBbS
+d-F4EKZr-r(K&`K3D*C&&#Kjm%1Vp2U,p4N`M"`Y'S1M-4#CJ!RiAVHSMN`'HYFh
+2bSI&[6,KJ#Ajie(#A[Ed&Q*kX2",A#Va-&Eek-H0HhqVkM$f"Ve'&"iA$SU4F"2
+KiA@h*TDCDAKAYliecfH"a5'iR%A&V+laKF[F0&`i'f,FXb`[G`r,Kf("aF$X!VQ
+,aDbH(Ue-Qj[55!C%@c-qcM'pc%aX2%+AFEM'EEXL@C!!daXCD-[GpheX6c&3+hK
+k$$jQ(aM&XE%I[BKdSVR!0'R"0U,bd0,h!5$`)GF@0P)*4PKP,@,XF#(rBHNhrI0
+PL(bYhed1"la0)5PkEipqdUHmS*T))UFD%ckSU3hkifBFATF1'p0l[hBEmTmpDpl
+!f"QL$'i)+I9kAbLHpl$jJ+MV8h["ZGKlYlKhUdYP9LLeKBZ+Vk6#EKR@[!2mR&-
+ckVT4)[iH``X8+IQhYcKiA'5%&MaP`8re$NAFe%-Qe`IJ`X,c0f,`U"-NTMQZGKK
+AZl053S3AHkcDkp[!mXJ4a$G)KX#pek[8G3DLq0m',$X9`m'MUpBXm,$f-1Vpm5I
+NA[6qhK#!aMM6%NYmU(!`#JH(V2hqk#Hpa1GZBIH0m[GqpHm(c2pPHYch@($V2Gm
+DpZI9`#hSXN[H-VJDkL-2VBerj-2TQ(Mh2qm6c)GCME`eDBKKa0R3TCa5[[-mEVi
+F2KiH,pZpa[C)&qVHp4K3ra"a$e'&fZ&JG4e&llZ%G33f8,Rh6C%*-Dk(NB9cf(`
+3r1Kkr!aGMe'X1h"T1e+@ZZ0i)cN+P*A-,R#aYhlrJH4V29XHk+dX,!c*@CJ&fE'
+m$'`m2i-6AF(YIJiZaK`r&f*'V#pcqZ!BmQGSH''Ym$eBEhi2-hI@l'pq([2i`l(
+a[-0c,G`qXFZa&R$KkANIZr9[,Rl1J0p$$pc[MMZ`X8K5FM5i0He0XhaH$FqCe[&
+@"NF(UJFa&XaF6mf+!Rdm,HG,aIIZI@m$%hH+EG*`4BCL(8CH`ph&hIQ(C3ZE[Qr
+Xl$b2Ep8eQrGeA1h[[RC3a6Y["$,N'Reh`HYZqRKpc6'[f5q1iicI+,XJBJ%qjJG
+RjRZH4KA[ZBIBH-6U#rj1la%Am5j-1H,K&`,b1EqcdrQP+h[Hfd[VZY&%a)l$mVb
+X2&aHVm[!l2m2SSQp1BQQ@A"Fp``+iX2ThZ&VX$V2hklJqpJ'&d+T'GR$!SHHj$e
+(Z3qpP-cc@meI&hI[`i(5iHXZ4D*rRD9`29phY&[FEr@HAl[8)kBPkE("2#jmdkC
+5[XBF1MmfrplBH"cZ&d[NDcBP4D14M1+$J2A2MBYcid2jGYdAeBF2e-$#[pCKDE[
+PaMX[SHeZq,lrEN%-ELB[[Ec!1C6#f+c'LJpA&iZ`q#('kJkJ[pHkYXE9rkpreFa
+kYK6q-YhR!`2GCYCXAZ,XEhc06+XmIj9riYlJDc$pE+C3lh6FCLjB1)Y`D($q$#Z
+HY`r![F3jcH``#m%XM(V'iaFihQid2fm6%aIlA[ZhiLI0ZHSCaqmELr!He[LpUP4
+fCciDcHHqB3QD6m$eB6Ufmk&E#pXK!X+@,$JBCfDeL,pi"&l#GDIbm2@,H+,9-AA
+R#!PBZmPKiA`F4AZ&lMN2Z,[G,#(e"3Ae#MPL`p(VXEH(&Gm%*Df"[fiIkq0e(ip
+jKqi'A%iYcj28A[6h*`DBhQHlm(QqpHpRjDPrHkleIF`ZShPqXq10aF+(mIQBHZ'
+j$Fq9qkZl-BQZ-Id0rl0rZm$GrKi1*i"FA`2Ha1[i'&$TqSiYN!#MZBGhl[biI*k
+H%kCm1Xa-6jITi'Zdf&fTIeaF2e[9pllZXrVq2$`LbEMF8@%2&dfZ8"el)K`DQ3j
+G1CCN9iKbpMm(LH*fe&jILGX[-j%pX"&Q[0,jIh&jeUKRbp(Mb2Mh"$0!3cc&5%%
+SRe9lb),B2AT-'Qqh%ap9fR!rTe(kIM9III@ll[Z4V-S#MrZ8bZCc-Y%'FdN5*58
+FLIP9*kV[PcX62cX!48#CqA9(cq50'!5ECa,Z0lN(K4)R5dRVr[SiY&25Xr2@rb*
+A@8ZIClrHee%@lh0Y2lII@dpZJ8@re)NhjFUEle(krpk2f)0m#f,ZHTNGa5f`Ejr
+f*rqp(q6Fq,dp"Er'T0EEcB04NBQpYU+D$kdb1cJNCqHPI8R,G#b4%THNpLHNIAR
+U',"Tqqb8j851RL8&024C'SLfqSf6"9iXj3AF8AN5Pq2+kbIZH&pHKb8(a0[r$Ka
+T@JLDLIYp635Y"3E+Hl@ASiX@MrK5l@QS*5mm2#fdLd[jr@d14JkR[XMNS,VFfd6
+36e[hXVCce[pk4EE1SN6CXj4DZ9Xcc)d[cpcpk4UEqHNEIJ9(IC!!b8(5a!@4EI6
+q%&U,+fGe85TXfGTI$XpR%RlHFRk$FkQ,@lR2`ir)3D#hF&Z3!1XRZe4DS!96GcT
++A`8,*%jEfIdSPe&P5)0()b%(&fm@42@qSYS[,88@4`YaUBQ2RjG&)h&[25TbhR0
+c`Vb`S*BAp2%h9K96XpEcqhe'ILb0aEC+LLbSQMRS!9DH*&PBr4a,$*6P,G8ZRLF
+-&GE1crm)QJS*5&&"+LD5FTI#STq4%lE*40A)L9dVK38%!90"N!$)3ER5C+*2@qc
+BHa15S0[[LL#*%d1hdHIL6Qcb8j@d8(#d'3"C2hHSRXP%$j35Yc34*kPJYlk*RbQ
+Q$6cq@P4)mVF`EQmX*khh1kY+&JVR)fhhdpZ3!!HLR[iHF!1HrKCfe&%fH3LEL*-
+UC8LIi'jQBkMPGa2d'EYll)`E@$4`I%Jq*0fXI0b["25RfhL`CqTND22ch!NI5DA
+B1&D813U*(VqIGal[84V+0C92De2DdF6I36NDl[+UTi%DAG4ZDPr'JJq08EVid(3
+r@l2NZcNpjfA+CVP-l"8HeA3Gc5A&6l9&2qe48(pj(ijG6lP&l%(bpcq1A"A`@HE
+pl,Hp,pl9qpPmGfeC1EhJ4rBU+(FCEhUcfrFVrBkr"h'@pUfR[HS+bqV,+2bdZYM
+@8&hYB+b$lm[ieC!!GR*M3F1YJJTYaH4lM84lLYUp"%U-K"m[f1jhAVjqSPD1,l%
+(irDMi2Fc2ab2NHa8IlJd8If[NB2ArDRH[r*ldZ[Z2hlVhYMl@LSX%1A[3GI*UFK
+Ni2&Ll1dSkc05H[Jh8DiV1"@IeUB0e[rPi0IYl@kTBREHp,cp4,m,83CqE0r(QTb
+21m#CiAre4pUAXZ(ffkJJiGA(JJU*0Y"U-K'Nr)cAX4[HZ2hi04lehMrNHpl%hhX
+lJa[DlDlMqp5AGA8qk*+SmIidQ[rKmZ6Ah(b*Ib*ILeh*A(Abr$VT2Kq((UIlaim
+HSphihi2MIJkIkAcGrmhIq$l%EQlLkMq[l8&YYq2&jA*GYRiYa'YqXJkb,F%2G`q
+iHaVLcrrRINB2iralVhZDpkXRINGRrZHpkMjcqpGFIJZ*RFe(!rE"69mZkml6pa"
+GEl"VB-(0pM"H9fkkkZhA9Ich-jClUTpl1qjAaCHIRlIlNQXpkiq,(`DljXpld[C
+F#TPpcfA[4[plh,qi4*Zf3kdqq81kr"U,Z2N-R8Hp,MjH9@CHiqjQlZ0F3@(dmeQ
+pehR[9'ZR2#Ti)REGCeP4*e0IhZkU1DS*A'U-Ki*$[ZC2YAALh(kq&ZY&"`p4@5B
+0emf0*UEZTZlDSr[mL6erY9h[3I)rh5pPlh[FeMZjJr$fe`5Ldph@h(re2R,M6`D
+,jY4VSpaYE#mbeapk6F5GC(MA&eGE2DI%llkX%RXU19mDFaqIJTHbPeF%'Se%&jH
+92eVZXV%#i2Q`4lL0GalLSh8DlqP(Z2`9NRIedZ6Mp4'h94j@kJmkSh@$(eYf!J"
+[FER`D6Q,LiZrQ8pVZS0A"XmYFF1mcGhSXeV),bVd9hYV1FYIL8&a69Qhe*KZR,I
+`i+bA[S2bERDN`jF%H6"PlZR$A*J,#kL2)he0"8m$I39X'qq0A`E@Xl16@Cf9AFT
+F8fI,QrH`GjcGeS+rq9C,e2#VTFZPS*bYU*0em[G4UA`Cr9aYeiI@9QVi'eU-YbY
+eGm,89&2B90hF&6NR0U&FEf1[NalH,Gk'6YBpafhdUMG@&KfdM`B,5ld'eU,ZfY[
+erVU*FDXJfF&h9kM8pPFIqZ,ZilkVe0A9kRkr0fNI@H$b9a(bdRq'pq*13D5dJJU
+Fe*d%%(@9X%H@`#J&JY+RGE+$V)0NAfHXMbpP@3H&"A3F1#TPlUfJd(cB1([ULiJ
+fHeJh@qU1cZl#2)m+Ir[jqVj5Ujf0cA,DH#Rlb6@fRC%0G6U+Lfd(0`9'@feTGI1
+L4V[V+#6"(PE03hfrK3AIl*Gp8INi@bJi&j8!BPhBF!il1$J9&hm5SU,HqX"+edl
+B39&h"XmR"GefHR21m1$P)m'eUHcU0ACF$Cp9leVH4k@R9-d($dF&T"DdFLfX)dR
+`IL9P6ZYR8pR'cPV9m,84p(@e0hG`EVKffMe%'SM5q[jVqm'bLGC8i06,f8H6fh@
+9*IqRD+A'cNE,h'J[2jI#Y,ll9A'JJX+b$KlVKrNl2XVMkef3!2G(D91@bf@Z18m
+lc[$c1RJf@TbG(2EH#SUEL##CTia4[,iGE'Nl1`Jh9X!XQ6S)mQ0F4j03V%YN6LJ
+[LT1CB4i+M0AF(K%kBea99N[2r%JMf9&+q4l'SQH&c&P'q&DIFbd%(Hbp4S0"B9N
+ENV[SE639F%D2h(Eal,iY[1@dH4XS)1fm+2+kbGTI#UEMpNQqM@HbUE[CU(fEZkf
+0F9`DlaX2peU+1#l%[I9-ZTi(a#*-%&pNUlPVMXVM8aj0TUEDQiqk[1IZ,b#F+Gp
+[faJpJ[S+14G3A9CQpe8lU$39HTYH,VTqlfPXSHm1YX)qDYY""U)m[5D03pU,ZSJ
+E$f6S+bE+m+$DaqDZ0"GINjHdUacNZ0e@aXYTp"TkZQqYFFVbXc3@%bC-dp2p22F
+jbeKBHRGaX["`LRbmJe"V'e0hG9M!2eM!,@333Cq0*H8q+iLUHlL!hIAlKj+m+Hj
+QAhPCRV#SjHdqpRB)2,VUM9kI35H(H@fSM@QJ+apYVBh1r&jD*(Jm+JNed&&,m+J
+Z+QA`[#UC2L5Ek2mHJNNTb`(Cp,"GpC!!A`Dq(Ni2L%2i0cI98"LHJQ9P4ZL(hE3
+EkYb9GcR*CG3qYY6XkEK`CqB3pJLEHkUC0B3qr""5lkFJJ!!!!)"AH'KRD(GRH(9
+iCfGBCfGRGkQCQDQ)U-YQUTU*HUTjLSL)U,LiLDLXGjQEUDQjZTPjL,M)b*LUQ@H
+*UDPiZ(PhKiI)amLDUVTQUkZUUlbXZRD*ZEUlUVZTGmQTU+ZBZDL)TlLibDQEUBH
+DZEQmZDQBL-LiZEUTbTL(bELSbTHiCaS!!54&CQH)L)LBQDbkZlc-X0h3!!!!!!!
+!d%!d984'9@C@CfGhGfH(GhH)GiH(L)H)L)KiL*L)LBQ)Q*Q*QBLBQCQCQBLCQCQ
+CQTQCUUQDQTUUUDUDUDZkUUQUmHiKlZ'fTr0PC[qf,PGe&q[GjHbdj0aRBrkr@i0
+VJimU'lLZSq#5h"r4m(YjGhr2'Vk%c"UEDAlZherhEXMSKblQCh9ch9cMr%qEeZ$
+Pr`B2m0V[)EqrlUlLj()mI'Yp2E5k&R'ShH0$Ti@!9(KZ5Bb@L96-+(MKmq1`rdr
+DfKYEZi'P`jZZfB%GFR&AIMbL91TAaj9cTlRqbB`r55l0KfhFI0pePjF[pEC4EEE
+CX-2r2VjIBl5mJKQ6mH(-XmbC2b)GGCmL93iF-h*mF-JNE$IYSVY&VF@TFhh-ZRF
+9RE3JmKLeBLGR$8fHPQ61bphGlHCGiqfU@QAJfUPE$jlQXP8)ZbZbKLcbFiMG%j,
+%r$ehDbpp'`Ij0YEbX'RRGdeqqbLSDkdKmHaNAH`%LQ8!qCP$K4j-QfK$iplphHI
+G`F[,KYZkKbrj#V9lNVCEEE@rGI%m1Rfm2bEA0lH(K3e2Sh1RdrFbU&R()[XH'hB
+"EQ(-lkiKj(!P8mfE&Gl-"BImd2Yr4rbUBr6[Jrl@lmH@JECmFRKpcA3kr8l,qBV
+0jF12h(cIK@m1frf`Iq[AkQ''AMppZYT&"$0)S+%QKQ9q$$CmL@(j-RM3pbdr1fD
+IR6cHlK!PZBHNLZ$qL[!'fF-ZM$MEIJ&rL+AU)G6feb9&lG`r*([GIE3r'T``&rr
+N&D+9f-cVC@A`-VC6!qr$BIHVkh"PB12#dqX"TmMBH&"aq4XNI0SdqHRlrVDIGc0
+cFlQjj(a2QqlSHAp2CGeDr[TqG#+Rb2a6-@jdrGpX`qj43hEX!Y[$UlA,Qc+'clZ
+(NH2+rJbjX2)P#Y24pB-feZiGJ0,LS+*QlmG4cfSfX"P56@$q)CAZ[ZrZih)ZEHi
+cTR[pPYh6pm[0ZBIqGj,qCjNbI@%f%bKSTXrl---Q([SH($FBpI3j#1L'Sk2[dh4
+peJ9hGK6EEJ#0aj%q4&m#9Gq2-PhIFrGSCZ-5VQUY4KNHkerFQGK$Sb@RN3i1cKf
+fAirIGe&GSq1k$ibh4mH1q6iKPdT-QAGjffPkLdqllT69IXGPf@$bDI$PhFVEEE(
+Z1jrAkl"YDC9#lSVIF+E0UICcXlq$lT(M"ZBGG&3Kbf!@RDEIZiI(mHem[,QI"SG
+f!ZE3ee`pcjZjYV3KeVKm)m95I!m!bTdZ2$dkHG$RGIlVlZSaKqA-KUI(kqQMjQB
+k2Q2Mm"`qHAim2$Xk&dRja3Q',lheVVajX1cPdiCK*l`)H"-SA(GYQa`E19BNjd-
+[8ABr2@mLcRe1qTl#C3j'fPkR[VJT[pe-VS0I@@HfkhVEZAcZ2Sm(Yc6d,Dr`SI(
+h0V6i(G4X&dI-bAeph+,+GT!!hFU4GeJVeRZ6)-h8((PhHEMaI"dqfqTqYhA6TrG
+amEFcGR-,%IkrZrJd26f@flJXXK6fY2ZiCQGk-fCU53(lT8UXBk[,3NV-0[h82@p
+P6QAX2Gl1(aq4DrGTc+!'59ZE)($3mJ`b8,L89qiH"DjFUQ6[M8F%V'J-Kk9CEpe
+E`h0TY[UDJ)QicFlNI*fh"rJTjffqpGrcAP-2HS([6mHZVSHlVj&hG-2H%8[0l[C
+F#6$$XiUGST1"CTX2GkFdFlXSpQf)9mV"*h0b9LiC@&eYCII!J`G[0KPrV48qlQ`
+PMDTDh9%2VElIEak%'b)Q)4)mI,QD["lQimIZSphMpe,klC&@R,UBjK9Q3bp-Dp(
+ik2MfCDVj!IPa$Zi+cE@m9$(UGeYZkfaN+peTmHAGrfB2MPq6ClE(UA%V"fdVjMa
+r(Mjh)cZ4-q&$Pl,Zp[+KXq@AV`r%J[hF(YYIZ4SIGX!S"G-(Ear(KiirUdKj(E`
+bV''ebl4TrKm)rdrD9$F`#HjF26eIAI8ZmRbkIUh-2GlE(lVZVQAeqTfd06(i9a$
+dYX)$eZ#a!C-MVTla!GR#)#9ZZ&#DXS5d9hb%8$L!KBlNRLPiC'M$Zr20kRi&CDX
+3,9-3+lcJe1fVSpe$(eGj)SFH2GrX8)C[EQ&HhKU'E[rPlqPYPJjf`J@bKbkN@VZ
+jGhNbj(k)6%lDd'S*hE%%lYl)*h@2&Grfi*5AcGRMir)Z$0h)qArD#@LM&Y)I[AI
+krAB@$-S@[hf!8!TR31SaA8h2GfSfIZdI6*[!aa%5-6bkC'*fi`1C2mZRPjeVpqm
+l)SRfa',$8I##l16)qC2lHddN*IJKc,JEKGFMj-1cYdJ[I6+%["j&VP#0#$3mF,#
+)b-lYU#k(Ek3iL&S)-3--9)(X+k22%$RipGfdJYmjb32"UDPiJQF4NhDM*Yc(PYS
+GY-V-$d*AQeidrN65a[6Pj8%[VXXT"@[e"`[6Tp2q$kh`RqN$ZCYc0Z5k6PP)Mla
+5)QIS@V[3Ze'6GfqfPq(KAFc93r*i%2$cEAr'lQAC2UiJ[[k%f9@*c(E`m"))XN0
+3d5#%C0fm35NpN!"0biJQ8m36FbBrcG(lqkTU-QE3cGc$N54r@@54@i4cl3-VfL"
+P!0TDG[A9`JC`)4*!im1GZCX1h5"50ACim2EE#43i&hF`PSDlBJFV`r-kjL"l)32
+ZRXJIqp6j`JFQ(MlND6Zkk$NBqcQ3!059KGPK82Zi2hIQIZpe-SF#Eb,MN@m[#q#
+Q"e)Va0R@Tl6'6#$peFGeFEECiirhfC&#%0iV3J&ajIKraAFc0YImQ!9)#@"H1)%
+j'#%(fm14GR'NN!!,9dJ'GPG,Yqkf9V6ZEIABqbalR'YITP'a%"8f@bYiZbqY3ZC
+NcCGh$P'3!0iqfcZ2ffM@K94fR[e%[CQ@Rb"p-9'8N!"Hh,2Pf1DKfFFJ)1'Qd#(
+1cQ$),Z@80fYhlqKh0e4cEA"aSEL,,f9V5Kba"X$mG#eZXHXXmI'VcXE9j&'BG)Z
+ZSGdDXQ[lVJE+43YjK940MJC0$8%'XkHhKqrm(CmIN!"%2(0NUAPAA,I5$l*fJrl
+XarfJpKSr6bLC2aqh9+AYlAc$S6jN2fiINX!ZC$`lBLrN`H2$b0D0[5#kh(G)(3G
+S(bpFp)(qmE92G@pa+rLQ$pX[(lSPFI+"c,U25lrXPX%`f-*'&`iFLXh82Dh&V3Z
+EQdKiqcKP8LJaB#-aKCPCrYc55mH(YiH$GqRlSjMqk,S@Emk(C8qkV,FVIfI2KlD
+3!-310Ui13Sq16HGG3f01(J5ZYqYeY%GC80+if2VXfA)U"`M(3blV(fBeGL#(#cQ
+fXrPjMj3AE2a"Ce1T1TrQP8r2Z(ZJdEq"lS-G,Gr5$'Y9QfZATYR+NGP6ZrMHc$p
+crj!!REUr-!L9l@AFfpM@25%q"G[G#G1iK1A+rq2%+RaUAMrXAFTdK4cmh5&@QGG
+cBe0kM0lZ(XRD&6ZG$MpGfeeffMmVZLkJ)9ff$h@NKbc+,XVb`5&DG)9$Md-ZEfr
+!eaZQm#$[1[`[Q2Y#Lk)9f0PY[p[iLbc$@@Hk'dI,Ke[,iE%+cYP8f95hfe[YYPr
+-DPYhk%2j56)j2UG5%j2rZI6jhh2i[c5[UHbDA,dK8I`hXKApF1jZDqRDm[qH(j0
+IGi-blC55,)3JYS),+IL#pd),YK"Hke`AecmCm),-qY3YiIj2$blH&iJXf$Cepi@
+Y#NMCmMZjY#+LZdJFk21r@I-Cb,9P"$%$ZB[Hl'IffMr"efA$Ph%c+lDeTGX)($C
+mlIm[IjaNKdFRBB&C&D@j'EeX2GGj&lcrjYYd8Mqk+4q18MaNKHU-XXla8[jZUfC
+AeSNCNblPjXUaNHll)lfN[85p3V,h@qkfmb(r%TRQSTF5QRrrTqliXlFrkB1jr$r
+"r"6p1RQQ5cXZlapcMf%MVD@52S'RJ&q[$ZG1k2rVLS*F3F[MeR,lZYfF2ElQ4Jp
+IiCjRCRA&NlG)$pUCj&KAk+9mdl2(PdkQfU@rHAHbf`IaGXeIA8kNAlYKFbqYTpe
++rbq(0'GCCl5)G,'b[(9)NUDph$*P8mb()X8IdU`lITcp(PjXZM`&c`Xb(-P8lA9
+UXjpFPdKbmIVY(GIXq(QR95Q8YIDdY[Ddr(KXprPC-2[)I(em(I33qlklhqA0l)T
+`BAf*QhapRXUmTD()+c*8@F"M`bl[E4DVGlRJ3k1IQh%HRGm1(GCYRhFI8("Zm2R
+9hG5iabrp61fJ4TR0jh1jZ1jh*U`PLKiHr!XDrXUA(GR[6Y0ch0IJf[,qb`pjVk2
+IjJf`SLQVZ"m"4dqA5lYlRa-`AXI&YNREQfGV6fjK&Q4I#Xchdm[Pph4H(aakQcX
+mLaQAD2IA"lq@iHmVfRZHmf'dbmHldFrAI`DHeTKmE#'NDip#%pbpTQ61bRal1aY
+EadHq$RF2EQFik2GC*&bAkM5M*[iZd4m4V'(Pl1dQd*G0`plIEIVpEh@2pEhaQ2I
+ISCaVGijTPh-V9hIhGAUl[EB2e1ZTPq$,rfm2kIKr@eIZk-PlRPfqjelrKjGE*$a
+ZiZY!CEl)q"dV#plXVIC5YYVX[FbYjXZk1p*UqZrLKrGY1kcYX9KCPc$-(bp,B4U
+&VbqAfc*SV48Z*XpmRIperXlqAfmDhRB*U@HG(SDHXBqIB33pC-lI!V+iirZ"frG
+3jQZmH(Ah-c[Y[Dr8ZMkJGXCGK9N$[Q5+'G-SEDCfQk$ZJc6B@PI`814ZSG(PDqS
+4LrHkhEE(kh`-HjlQCDrI-l196mFcXlQA&f(GppMBr!lV(lVZqklZhZ0PXpPXmIJ
+E[4&-Fe+*4&SJ,Dk[VcJ"lX22+mFF$bl'6"FD2+kdCp4i&SY5"mRGYG*@[$[f8VH
+ERZX[J2$[1IR0ZBIa4I#Z&-ThHMdFpiphl*CUNA@E`iGR0P@&cfm(V3RP`Q`mIN-
+1[0+VT[#FL(8a80('bje$Z3kT%$Mf,#(V*YTK3@H$TmhABiG8ScjE[0j'2RDIE9p
+S26U4GNGcl"cSFQTF`e*H$8r`qTKAGRBVLXfIEcC@jDG9c$R'JRKB801Th@1DD"-
+4e3kBH"h88AZrIiFSHKr"6qpe[cHYrGLeI2-jIFf485ALEKh)X2"jIiBGV*ZjA,c
+0MP`fZ9QfZ9Bk2+qC6YH[`C9jGF2ZH"$hCY3"fI`'Y$DjCBZ,31jdG$EIpHZqRJi
+rGDrED[jQqLSIriZbqEDGZGlp9pF[h*NcZVH2(M8YEc8G&UA'pR$NlIFfI$K,(mZ
+Rb)HkZGEbr9Ki"S9@F2c3UHZ(aj!![$LH1b2P`QLM$6LJTbX%lN0,!dN2@@QPV+k
+APc1b2%AYq4$Ym(0LlZ(kPefqbr@$PCB`ZmkjQ9jV6(Tml[Fm$K`m[4jCd@*AdiI
+!b)Be,YNFh6qYm2(rfrGlRb02$8f5Ud(X3kT0KPk%cVDG6KrbGPLb[$qCiIKdrUG
+Eer@kL+AqD(R*Y$XkSZZGR6VXf(plf#&D1VkG1e'JqlZZ(ICYVjG!jfN1ceSHREf
+[e"cf6VYYj#frmITr6r@4dc,QjU&BhYpPPrrpA3f80[0ZDRN8k@"JEQ"N[j9VP8j
+Rrb(C"e6X[-Kh4SUdrpV'`F1RkJ9$$Ti$6TN@%2FkIGA-h0P'a,6Xrjj4b!Ki8F$
+YY*!!pGV00TC9GSm(b!p1YT`i&1da[$cCKh!G(UrGCa-%br-1j6f6Y4rH`Y4Gh%"
+a14HePl2[TIqZ$Cl24UULdmrLIZr%dm10VpZCCHhTh0aQiecEh1Gj(@i06qEVGA6
+f4k)ZklVE!'U92MCXhrj$ZBcrdpE,+pURDqeJb[DIKkqkKcEHXfhmRp[khGEEiBH
+fUfejmh"ZELTiqjrPkf9[VM()'h0[EmLTbIi!pZ""Aql+NV$fLr0$hRX@I$q0l+I
+"il(`CCli)IDV*hX3r'rqI**PIQHe$b#[RClr0PI`IHTjhfchG3jH$*TlEEl+E$Q
+pY(MAAG3pGQfIh1YdQM`6Y9GPl@#iHqGrkS46pGY[eM3K1kb2V24CANT%["H2UrH
+pNhF@R[h0`l2IBpc$MlIEDqTM9-E,YI@K4lpYYSFIBEQ9p6VIUGGphjZ&Um,i0$[
+)IZB1EZBh$$a1Tp$,m@(JI*4j)qHb+bRGf*B-jIXf5E%0,VqZ`VZeql)4k5!%`pe
+YVXrKRkQSq,`1kfhk`HIDF$q6jZmcVAr(6C'SffZfAAIikL%iC[6Tra6Hlf8H2)Z
+S2Gql+3l$dPqc$i!HR!C-Sr4k(0&)`@RThBq[GGVZELA$YiErC@HA&U1Y(e@YeJD
+r4i-VBm[kGh-rqDfMh1j1qemEf)CGl$TVEDfmh*aid[iCSJe#j"YVH(1$cZ"pIhd
+qZ5p(TD4U@`YIi-ZhlQT8ffflVA`lFI9M43kH9QRXTkIZk'GrrPI"Kh@hh@hlAAj
+'0NBfBD"Rlhm'E`+ql,9d2!3&qG$irdmV-KhFQK,bK"YQ8,E-2@`fF2GEQ(CF#(E
+H2*l,i0"l(VXYZ@IICaq"XYc8f@hmcVX,H3lA'l2pEqDKVqYm`k6(GI*lRZFEYGI
+"Aci2Gqki%2ACCNJ5m'9qL(KLYAXUR)`4r'$SmVcSI(NQ9*Dr@ZjHSl)2[Kkl0Q`
+r%`Ij*9,KE[)Z*R1Pd*880VJaHpfah0CmDIh-1ZbX+PP@dE8('#I(JkFdb(jZRXm
++I,q%(5V'&$,Yl1(,)llMCm$ambe'V&[LCl4lh2h[mV[Yip(B3r8$UrGA0Vp5K+Z
+qjUEI1fqGXTI1Kdm@RlQ,6ihm(dlh0PrIPrIPIiAP2K6EZEcjAXr*Aa"+KX9fJ,P
+c1YIKeefcKlEF`l$J3pm(@8pXVJ5E4KejFVjTdc[VHp4diheG2lqRrcplm2(PI$h
+IfBGP+klAlEpcr#I"aq2SlchA!Y@R04jbMqq'm16qbR-RmI02FqLFl8UPHl`FfED
+5YP-effNI8qrGj[1LV2kEXQ,mGKb4jq[)YHfX+bMVdFDJKGa3iAFpj4$N190rkFN
+chNUIZBm0cPfpS20rkqlKKlR,dqF"l(YSE5AJrBPr0qEZHjTbjFU++f25KF"Yj$f
+0[XRiEE--F1Z2402@!RZaiYh+T&5k(CDfMpNH(qaqkHr@mfd[iH2DfrmjRQqra[(
+q*DdBGICbCmDm[,[Yql@@TZDrRA"@0c-X`YfR!Kf9RhFC`fHh#DBldq)[)Zahdch
+pe%MDjm9Ic*IdSCG#E,&)`)pRVl@R+ZXV`lVA`Q*D(E3R4[h'$qRhHhKlE(V0GPi
+jpBTKD0Z`rimqU6qrkfS20cAR6"0hda#m2NDhFeRRcH,$6SICQI0eIhY@BrBIc3j
+IHB2HB2ld2c[Z('PQ604e[2dmVRr'l,RcLZcfYVQpr6lqRGAF[dmhJ5-&j,ID6GG
+fXQK%(EmkX0beq(8B#8m6Yh(LGG$feIlZAjQ*fAAEEl-c%r40j8h%Pmq,c2QG$rj
+c[rq&H8iIYrei2aZIMAq0hRbC9+(FmLaVXbbM4APhVQRhSqGh3IIGbUGIGQ@V[(C
+pk20G(jQ&[INd2LB-f94UERCm#ilQK)rm9Y[$M6E6E(#9"hdBl#qhX+lYUhE'C`2
+%q5(h`*[hZGi%DmN8rNfHAamhIi0K0VZeKb%p1(YDmb6@(YCjQC(Sfm4pG12&f8V
+jKl-T4XfF1'X%LqE4aa--GHdNd1mfEX)q#6bRPR2,0AhGVkHEijqQ6GqE,KqfCYk
+2"(Z46jU&8["9!aRbbR2jZV*YS2Jl#6X!pq`%9lHhKlIMlFf11hYpKMaDcmal[[(
+YFfAmfKQ`rHq#A#LMD9lAC8qeP8lM1fFZP$N@I,e&#eRa4"p&Nb+kPi2Mr*M8bqF
++aYVZ-Ep((0U`hi2NL``mJqaDc0r5EX*4hbpe*l,hrZrIrGe&$4FZlTc*X2ZXHjP
+8i0abp[fhr1R&D'a2ff`Kf!J'Z)AI*Kr[XSH"YEA+ll*0T1`Xmh*m-2rC`j(GlRK
+mK(qcmEQ(r)ZVR4dZhdFrZC&dq65e`lAMm)!GLrdD2E"SqkNkhCb2G3ph'QalV,Q
+D1PYSe(TF+XQBKSAG[im1`V$UqKfXmf1jQHrjCcr+rhqV`CG"kEKhEYZ()2c[rXK
+rAZqRpfP2aqlfjj[a*HkKdhEPQRCfFEPlIYrQ8i6[r@[@d*4q8Y-dalA,Z-#XbHk
+Q3p,(KQ@Y,TChG5kFAKrHrGpiIMC)6Die1cj$@dkhZBpeRC[MeZk@MSh`Gr6$)YI
+bR5P3%cCR[5i)T&9$4e#mBhCNJ&VPBmQ050mkXc(bfQ95eh$Klp4-KmRjj9m9hir
+bC'$ZE2-lFNCXpR@ZfdpUlE5!qD0Sqlp4aY&YDjGVlr"KprldLB`B2r@9MDl(YkG
+UBSC@VV#SM$Qa($$bhmE4hF1kN!")iQd6*r!V1Ph8&,ED@i+8IAV3cE%Ir2$R$D2
+kaXL!Q@pfd@SVKpGNdlBRpQMIff8X@pp`iH'lL2$CQAIMphBj%["Nf[C8jCUMKi1
+0S2([0,'Y#-Ab14+ffRffjJmIZmEE3fJ[4aYHr[$k[V16Nid[53kiMmf'"%G(-XJ
+l0q0MqCp6ph$lSiScPQ'bI5KjBJF9e6k@bJTACRbFIB(Y@EceSC[G,lfCApFP!5R
++bckbiK`83kNCqf)Zd-Mhj-1Yq6)Na[r-M4mZC2ap(6XpP)RlD`N8SIXmk()2d[K
+i&CMC#h4MqSiMpYZlKq6`iVZXefcKaV2FaSVZc#QfFSc9ci)"EmLc,BNf(AGcYq"
+"iqcaLaPDi)fHjlIrEYkK[+3EmrBNE4XSHqV2GMD$0)PdqlJQ4X'(T9!0kA5bX()
+KiHci(fGbIfL2!L,)R,2iK)Jm(+G0RehD[CXj-6+q[*2-Aarl+C99Ip0SlXrHq[d
+IrQ2BeR$N6qkKM8FH2GC@"$M!M'd-E,mPVCCUE,hE'bpfQbMp,&C2'`')"&TVpMZ
+L*+(ADr'fm&6Cbk&UFk,ADq(Tr$f2`BFhE@FDNQbdpH0PdI`4X[G$CF(ZkfXFE,X
+V"dfAqIJ3m+%LAZq"'SA"e"h'c9PRT0(SS"Y8fE@2CY4!'R,`ib!JearKY1cKXEV
+!bHhMf0e-ZVpifZ$A,mX-JmLf-[hjH0UfBfUaP'bK$N[6DcV$0E@IZDaYQhPh96C
+5k'#0Seff'er%QBfAMfGE@(i*pc,qCJ`XE9XSDLq,REePCCQjSG#8EEBTY[MlRJH
+2rAT('f'5$&lSmE-1bYie'YY$b@pX-iV,2YqhYCjrRQMZbK'YPAF2h1EDV0UFj'U
+IG#+lR*3%!*!!ij9[6S@6G18#SFdl2dL+LIJHP@F#0CZj%))c!rZBGc@F)1i[2Kh
+ifBE*dVq+li&RQU+UC(SZj$iLF-pECe6VAlf$XcePI"KlH4,`HqY*H2YdB'GFhjR
+28DbXKlU9GlRC3fCK`lNlZY5B0reZA'`C9&fB0JM"c1"`2(jCk4&)PV9mP&pZ0hP
+EDZM8$fEi)B0CGe[I--$5X"qZYE[E`b``QlX"Z!RDTK-V2dcB8SA!#iHqZ9p0!#)
+ae&q$f(0di$qA2`-Qq`*q#''@pqPYT"5DT3"[S`rQdBUDF'8M6iE!*h*jdceR`jX
+b(*i&Cim2,0P#AJlG1`ZlJkXd-VkKFPU@YjQhBBYhMArMANCF@h60qZfJXiE[kH$
+YiZ[ZiBaq%rdTCb*H19i0)*cjHAJECKMA-UMPCHbPi-fEm'mrGr0$6Kl9I82@Df(
+CQP60MhCqN!$fd2I5i0(Gm+8DA9Pfpc$hf$EGY+eF-0YSqGDX#dUKfdZKCeRb@mr
+XjBlXe#)FIaiI,bi[Jd,F"C2N[S'[Pqij&0"1*qlZ,+2PICdFI+jZ`VBU0TAaX'j
+Mh@5'RChCmIiGeDpI5L`GbXr%l3+'qD*'!YIDP8Q5,SKBk032-06,'"B3DRf5i`4
+kif2$hK%I&31'HE3KlD#cYIIrG`Hq2TK$@cG'IbQFS@cdG14l@(rIQal[1Yk`&!j
+L@IVe0QD[jR1HM4h-9C0MVpmG[$jP$53&BDe`C9$Z)3(DqfZH"X-(ZBBa%)"DeZq
+fP`[4SDDA2bch%GdIpjMfY2,Q3be,'qh2fiG(,jZlVk0pZl+2USHhLSpYfc`dEXa
+AR[cY*G2YpR@ZM8`H4IJpZ4,*P#SH4eMU)Hh2B*Sc8qh*q3M%Sb`4lB1@B-EP3kh
+'aSGK8Kj"m+dL@[dFr"ehGP(ZfKXlZXL3!%pRGGeFfAjXB0(6eKkD,VZQ'MAcc[C
+Q5Y3mHcYH@DmMKRieVq@lKlQ$K@apXNUlq*!!mRmYhYp2-qB9TG(3B&EA"lBk*8!
+c"b'%1rbi6L&B"4F$k6[acJFpa"ZUqkq6(T5)GFCbhAr-RXKPAPEUX$0lZ93lH96
+,GhE4AHjlGiCaPC(j',BEBC[I2$01a-a*iFk,9MSq(@``b)6P+R%PCbGbTq4Sm(A
+Gd$R(4P,m!CAdY(6kAlhXB9RYVQeTfaR6CffPHrT8pY,`EK'GPPTP1Gq6*KajD-m
+r,b(DrKKPA9NEh!kRZC@E-qCqAXBSIf[$SEF0$r@Rq''A2TRQBSmX9aR1+B"G+%d
+ZrqIEJ4K3kkC$ar(KikG(06'mfdY9bPGfiD0H[HEXZ&Yi0X-$`-H$*f@Ml2"P3i*
+@IebrZHeSF#AiCmi6'AX)6BA90%pN!hk(**qq4Dj5UhACS+`SQMq*b8lFLLA8--H
+K$Z2d3r'Q)`*GKSlZeqSB#Db(ZG+c*UfqMTePVeq`TBaEcYiH[SEEZBIUlH96lXi
+M,Al%0UF2I)XlA+U6)F#&KRCdVmYh6LRj2qY2881qQD1Q9RGVq("KkIfBCN(EcZ&
+DH2,Kb5YrDh@D8VRZD"l+U'GERDVZ4XQZQ8(KS3`dlLe`HlYFfj1b[(Sq2SmVFf,
+$5hAqU0(,2D$2bFRC4YYJ`faN-bbN&hF1`(5kh0Kj'$+ai6HPKcMjMQch#GF&l'R
+N&Y$0lN0J%FXq#(MeKpCF@RYHKJq"Qj1R1$'eTi(V4U(1lIENJeY$mMq0'ZDAiDm
+VX[i2hC&[dm(Ch1A6YY[&ef$h4q11c$CPH'DlTVNGf-PhGCClEAb$pRqec)X'C)N
+B+qjNHe`Zec1(FQF"$Ck1KNDBDC@'EMVl%Amr!9G0K!@cYDCpfc!+4R@X1202R4)
+)G+6E6XCamNd1rr,XeFdZkaIall*fa385b6q1'YMX0DS8L6R8$U2Qf--ffKrjhG2
+J$K&rY#Rer#EX,h0F#VSem[CMU5iFELPVrTGr[CZ6rd,&m@f2Jr$cZhaY2$Cfd2H
+I1jT@jPi-[4dk4KrY0rMIq0P+TqAJcX+(JDq9pD(ZjG(MpfDNbGGPpdIF$,bXDcf
+f`2R[$hA),*H2TH"'ZlQ`Mpeb-DhKYr(KZDr4d2rjL[k@F'YYl%PCH'Y-YD03pH1
+FH&EZMl)0Y$Jhm["H1YcLEA0lUeblrC3p[B&FVZM$Mmj,R`[r[BalXY1H2$MbDq0
+4+P81#18KlZj0ji0M#$BlQ(rYef$ZEJqqZAJmK9,$Y'd*NNApdE10ij!!p#I085%
+!r!KbEA"XrrNVR`rkFkCFfIJ82M3`q!Cdq01pr3lc6fIKhGVrVP5VZS8iF$ZVDXK
+ed9j2a[&emV"BEH2X*AeV#+I'bj[2r(GM1dENIVUFZPM@Hb`2(P8F'ATC&eYie#h
+XBrX@bc!XBbJTqZPRhRC8ZfdfMcCPh1KQGI6q5`#fQfNAP!rhE(ae"1m0TM0PCFQ
+JIErQ&`NX%j[bC@AVXHCeXr+feHE)9K(dj'r$NDLP`,AbkFb[RbBp()lD'dlDClm
+UUArbiH(-`IXjPVmP5Q5Mp[H[ZqeKYIi+C6EXmM45Mfhj@k"'1mq6DjTe42NfZV&
+FZjPCYiB"pN0RmQa@`PSlU(miCGYheGfd2b0&Mc,[RFL(IqAG3bSDR!VqRUG[+kl
+kGhfd10hdUMRFIQlZ(mFhr8b)BE2,lQ0m`cHFLclU[bpY"PEE4QZKC8C@$-V1kN6
+`'eRr2AkHbm2mdbZm#Gl(J6YlNlNk`p%a*`rM1`pB61Gq20rHjhh*YKCdkkqkflQ
+@1NMcp(4fqNNFqGrmPkVXX@4QpjfF0IP5D@"ZHfKlIYT[Y5rrPRlcf*hhHKT*ZLq
+j)J`GRal#(r'lm$"UIFNFkEqLEc[ZCIjTAYGIrTcZeKVVkle[KpKQ3rMjeRYS9Ka
+r23ZqeZ1jf#i1VAIi-bYcE1PqQH0HPhAm[`+PVmh#SGZ4qkrTIdf8VfUG6qDXbF[
+5@YehCqc8M5@A,qh,RdYYSk25r$'ZjQMSim(FeRJ8-Vf1mTj2cHGlAcHGl(r$Ppj
+PIFS@[Xer2Klc,Qml6`rMpPm0CRCFbaVSm(E4kj0CP8*5Dc2qhAdI1Ma[IhGYh`e
+R0m#lVIai2Xr'[UI(q$cImUrfX'GbrZHb(,i'$MC2ld2imhmFcfCe2ihrc`2!Pq`
+QZ@IKpT)pU(4qc$rdRedZXQ3r`bl[YZm`EAVCrq!&-QRCd[aNJN1fVrah&PcZGDr
+QKq0Qf[3r0(r-QZr3Lra'[9eVG4VVId[Xem1`Jf&G"Yp(GfG(!hGFCMI$VIXbEVD
+J$Nh8fkM3A@YdGeMfY,*fd'fV$)+lD25qc(bTfMQ8C0h,jYG+V)CTq`P$R`p[VGI
+bqhr$SqI(b[`MQ0KAr1Q8[YcDGVr(2Sjdr[)q$Xp(2i8DI'Sp[!I15$j-'$X)D2M
+`bi0EN`Df$@mq#Mh0V3lHXP`334V+HIJeD5Ub9b`(E@bJZZf2aHlU$!JXi,l!M6p
+(GE#-"QXVS14$CdG(pfXKJefY`)pdGDh@i'Y!eJ@IE3GpSVXN5MFZfK`E1ZdFq$q
+H02i82E`E#02"$jP#'MYi2RD+'fMcipIXl@l#IirE33EEPQJ2ffPi!)kAbI``lLk
+hpIQfXIYT%%R,f%0+(YCp'#4A9d(Fep'#$4d5qGqj2N5Ff9I!(N8X[[Mb,EZI4TE
+q[Nh9'P5rD",(ZJ5khTBmR0KjB"ip(,lih%TIP9achkf[VI(!4P)85*rDjN0pPEH
+6P`k1`McpK(Tkk+IM5k9eYSmqkrTd9E(ZY(rPG339qMq[Sq@9Trj+Ab5GH2JpV$N
+imUMQ'eC@b-S!r5ma0HSdYP(SpcT)e(FaV[ZBC&hfd'6ZDf2Ti-Q3!!Gk9%iN8"1
+f-h##04ZS0['Sajqbd8-HkJf9GG3'"102lB!F'`JlE43(bCjh0TEAUp[mMkRCl(6
+9[rR$[,bVH6CZ(HfGlCcUfYRBH(H4m1mXX6#Ni9lKhP(#`mD,%`jhjD12&q@VfP@
+0[V+kj'qaIhXA)LrHUiA1UbFl!c-l&XSi%)pP9`U21UaB@,QB@,1QcC+#Q&1QeEf
+McTY'IKFr'c-+p[*0PH5CYjHhNfGH6lbmSih+aVbM1QdD-8fE"4XVb+MJ6E+I9XJ
+#f9iUbm%Q++1!5MG5BpP*XSe'6CDf0@aSeR*(3cjZ,JB'&HiYP4`V+49UhQYXjej
+4[E+F,pV35BFdFGVDfk[!RV,&UeFA&UqMLeEfH-UaXA)[F5E0[!,4!AJaB[XBY@b
+XX@GH)69F@VLq`J,9Uam$$RdCi)DZ0b1IKcZMMcX-B[9`qILr4aCYjJ@9jHBH&Le
+D0i$E&[Ec&#'aC-k,&XVfM4`UZ-%E@BRpV`Mlfb`m#I'ZX$@JdUiQ*KCR+`ZMNB%
+8IFeIdK)6VI2[+0'mXVbYRcj-QG*'*48FLVL4B9C9Mi@)%#!1,&RcF2$aXA&qaQB
+Z,SU[rfV9SrakI%Qcl)-@EKBPA&cU[+qMp(&`*mIFcUZ(LhZ"&l'&R8F1bSam+)5
+@mp'6([-5b`SmrUB&lK4lh'qaKER%`m@m[-5G2RBFR&``J[EjeA$jAdIimAR6ir+
+RBQ&Hf@&J@8@GKBNQMCFLMTjr)aa$jZ,KcTdHm`m5b[+-R!jrdF1E*[-I#a*elL`
+BFl##2[Cf(4aCq%-#LX`&BP($[*2YiNhk2dHCiZC2McXLba,bGLf8qG&1ShNR#XX
++mpp4R6jXfb`mA%R%B@*2`l),'6JBhSi9j1(E8FA)'FcVh`BplKcjq,KhNkIKp6&
+`r[fFqG4a-$XjmRf*Z4pLb[CXli'&Hcj-l)NiNqpUjAD@8fI1RhZ"[Vcjq(1[CdR
+#QMVSTY'p`*Xq2*Raf&6KcFl%Ni%ASmM#Sf@&HaBQ"Lj',Lajq((a*-AJam*KAdE
+fM(`,hRNM-r!!AK6Vc#`2%RbIq8k6KhXl#`*-R$RiAJeF!+qpRi8Hmmk#pL`lbpa
+CZ&QFLm`X,!Qi'*L5C-H2L!)[HG%52@AXBj!!#495Cq)54BISbB-2em52J!$MiPj
+4[*XQVJ6XE&Qf9e*`@!iKVJER$`*2bTdk6L6X1EHlh#RIihJfMdDZ"0[!Z+-Hpcm
+-EG4aEc%c-,#QKCSYF$%['&P0`+0dk+hP5IifPA*)J9-VKmLb[,+,$jl!C0ScF$P
+BQ+&AHbF3Ghc,d1ck)8UKjHiNR#R8F$FdF-IM1a-5"&&KFq2%0HXX#bRciq"0aBQ
+&2LFU5dTSL*5bQaAPPC6D0P%`&6E+b`-M%aGE)rjhXM$MiGN+DLJNcVfmXTf(hfC
+[X+pX3RT)3lXS,*&$(MmEXqCBpRaVaK4mU6(D8Gi6H6C)m,!XTf*J!+N4lb2JBq*
+c-!JVKiGPKb3SLUKJ4SmQE0UcCeANCQ&H4lc6c8Fd9#6KjNFPf!l(QbF12(h2f02
+ZCq*2XN8Z2&L!(NL4hNH2GANqI0R9YjJ)'&5+b`1CJ8F6$`kf0KcSJT*++@bL[C[
+8Qf@0cX,#Mb@&(%&(LIfK4fmNDN`TBdP&,J245`5F#pRkfkLVF#2pM!a-E4-*+6*
+#4QaB8hh`5-I#[-b6(S)NX#,$lk6L)P)VH+)2reimfa`iSr+SFS0*d5X8Q6LAXqI
+J@@,p(!XX6N3BGk-%2VDSi8kI2(58*Xh'XX2Ra4k'+aNi5P9K+HqL(SQ3!-hM#4F
+*$'Lj()')iYl2`0E*a0EcJ26j&RG(rb-+EJA'"H6FE%am1E9kN@"L4@GEVC!!5[C
+N@*'MB%rhdqLI0kM*aa9C0e*XkfkMDf4Ccq4b-$'LL$`UiXIR&G[!LRi%R!`K(Va
+K&Hh2`+SmfIKK[iZ"4fjNDi$5%`#3!-`*qCQ@H)%$*RiXI1`k)Bq"&KB@,HB'(HB
+@*re*L3J9'B`J-6!`1IJIU[,b+5-ID2CjEI&1SiXQ0)a-kVLhReJAAK!SCALB@"H
+iJ$j-r$LJUi'CJG8Z9C!!C(&l)RCNqm`m#2H'3&94%i[+aH9LTT-R&aUYAp8mRmb
++Yi-LNa9IEaF,UBNr!a"f'"&*MhY(%Mi9'VJBH!-PReDZ24Smr$aFAdF@L@'mMfm
+,&`j0A&RNPdq29`-@2J-*[((jPZ$RjfGbU[+b+Z,KB9@L9&KT2Yk,$fm@&qUM1a*
+q,JDfYQbF#I*M)T)mkbSi',Ki'((ReFHVCBP(#SiALH,b,cSi9PHA[+L`V+,PC'4
+b14CAZ&KFVpkbXVcRrM+",+pXVhReFMjmfmLUmr!(pi!`%UDeI4UqM9j%FB2H9FM
+$RA%ki`[%[IKA[`[4Jj%HpMhXiXNG6pkpJ`XI(`!Rf%2p&PEL,2d@(b*q&HB5C"(
+-MHm`-"KKb5D@pq[Li'(*Re5fe*SdFA'QiYlHimr#L`XMjrX5Eh$`XMkplKCRjCX
+fG0RCh)UarVAY(#[*Z*(j$'-bAE'-D6M`6jf%0J,QNi*UGmqp`lh$-N&9)CXl$%3
+$RaX$$RBYjm#pa#+fbB`@D-la*XI&aH3eJp@+M4a,fEK6X$$Z[mIp)VfGHiAkXHE
+%@Sml'UbF2!`X@6M4B%FLPG&h%'PJA[YcS++%dQ)Yrr@-JmMr`X$#36MKHeCrYNl
+q2Kf9jKIIMe4`9l1kXl&aXD1Vb@2L"*BT@lUcm-CAVX2rl&HhZGMNfAYiN4A)4B4
+&kZ6pMpAf2e6L2K9EFA$j3f$$+!Kq8@%&R0YbpRKa`NF#Ve-3Sd[,fV&1`mc'[F,
+UcTf0M&mc&Urp@&C"(-NfG0MiI)(0i8k2b2E&TpXKbBF%BV#U+8$#Ur9Lj'&!2VL
+Rj3kQGljK6#iBI8`f&,He5l0iZ(K4kYk&,L$+IV%PJ`JVPBZ*J6K(m2RB`9++I!`
+2dcTj"e9!CcK8i@!k+QVRB0('D9BGZ(CHq*fb')9X8r#pM$[-12Ha9F$)+lf4KiI
+em+pM9HT9RAQ-D$i@f82AaF@!`!#$4m2RKCAXI-pZEK%Y''&YJia,lJ&B&TE0,5V
+9j(1B@Q'8SJ#hS6-lEmM'j!k[!`iSXAN6b`el'(KPL@5&lH8F1VK@@))KQ&mUIM&
+ZV%`*0886MBY(%[-16rE*`-2$NmVr6$`rP%F)hA!MP%-@0Ljf,RBTNP`9FI-jk*b
+HJ,Kr4`m2-c"YCPKAQ,VGG2$,j39Z(0L[CmJ+fbUcLL%4RpC8VBq)6Y&(2f#,L6k
+$f+U2)4@1&AlH,lD+[&c,*lP6HilK96m9&,b-)+5bSiFh'44dFE&riq&4RUPAL"5
+6iX6p@(rMKiISi#bR#iQ%cb(4-iNl)[B-2l''1!#4`-6(d@(LiaKLa!MVh'RAQ*M
+6[SjP%RiUiL)l$`+-q2L9Z*qU!)q59J#YLdND[2UmqUA9X4T(3BIdBm"#JR6ZmF[
+P')k29[-2'[FHM(JUb*1*CQZ3!#li&%[UCq(9`qC&2UamL4(Xj0eL4Dh%a*k*$Re
+6(CLBKSMmE%Mr4'!f4J"4+GpMbF16KBmHpUdFI#Uqq8AX8E%'e)P)N5@(9jN@!%P
+&@cif"L5%51CQ3)M84Q(p&-eNiH*SJLiT-jK&63Lb6@,%+-%42),0342f"MB%8UQ
+3!%V%$#+&kJa$!MaJe%4JAF'(MBI)LNAZ2*[5q0MQ&K%G2a-#2pBb5!MmiU-Cq(N
+Fc&L1Ff*$(B4[Yiq1%DDl45SB5),2Sa&il(RFLIH$D$*&a-,m!aBIrKj8r#(Fmr1
+r9*`qTM"VMJX3a#PYF!T)"qR!+5J3iSH*qSR!MmUmLb$RGB&%)V#[-FT6N3*8'G%
+9lEd44'S8dbT5S&ITaF9`Lle%CHcb,rP6lU02jR'[6#L90mH,#LRK*6PQk4`Nd58
+AqRYjm@(l'0!CAcK(V1b(JBR1"0J1b5cX)EP&bMBDRhNDkVEV$N56,VNjaA&L`Sm
+9((`cAM-r'HDUKQSaHe94-DE'Xl26Fl'[-1YaX2!Xj0Q-f0,-fa"JGARX+'E9VF6
+$N4Y(HiH4VIeS-61M4XE'B9*R2&G%eaBj1P%5HeF-+q62`M%G3a$8')L$)kMQ`l2
+0SQ1D-(++dICjQ(MBj8+MQhE%&@i9r2*,*YlM94X1'DYR),[hJM9qFE1i3ZB8bj,
+K@4BRB4L3!(QqhC'8J&E&3-mR%(J!H0(F+iG5&EQ@([T&"&IMq#*$HPR5!Q+0J%d
+J-5ba2p%@0ii@1(KrVIVA@(GBhdFE'h1(R)Xm3c$TT@9%c#cNiR[M1e0ESNA@dMH
+QlC&heP40@Zma&%A(RfH*L4U1(J'U(C@q2BqqNiFjdAZ(1,Dq%9VX1m0"H,%0@)C
+rKBhpCHHL`LAR$Ur4RiIdCl5qpZp4IiHCcPR@a5FFb$GZCI#eZEbG&C4b[*L@@(2
+jf(0RN!!h4"GUD)kASA2[Y2hd@(1ll!h1CKqMKi3@jTC4bAF0HbQP43Q($IRiNkM
+MQ[5!0Ad,HVZGcJAZ"Mir)aq9Kc[di@(%D8mIPB``%I62'"CRpF@"4Qd56'M&2R4
+c$E01Qab#h'Cj'*KcE,6V@Epp3liHlhf"KlRm-lP$iSmR')fl+L*B'`-"[-)QJ(T
+al,(Ub62D#Tdp@2bZ9(-M+GKBGlHITSY,cdFBZ2"FQ+,'1Mj4[4VYjCB&kAAJ[#l
+ALeF,%pZD5$iNmhP,H61UcCZ&3`-1Vb-2CIfcSq0N9DS4"6fBAa[-&rA#1,561aF
+HG9"H@SEf+pdr8Niq1C9XI(Mia4H&mLp0q6R4A[rARB&j1pHFGEkmQiZ&*-bXa4i
+CReqhLiZ*liR,[Cd8G&[CGpKA"%&b-E$jApXk6MKG'MP*Rreq[N6X80h#*PX-+b+
+pk2r@Gq#)!H%0+,Tj2"e,c#4H"GQB[M&c2&NiXR#rHUmmk2hcqIJcCf2r(K$22"S
+hJXi`'M4r!FQqIC9D[2a66eXL8D,f$D[aCXfp[F,$`X,1[FMm'Ccm2RBrS@8ArA$
+cmM)r!"ARHM&N6V,RI4c#rc@9Eb4c$S!dIJIASjR+qHG4DH$UG1[F"!6$Qqh"Hie
+l0Qr[6Iq[)j'2Hj&lJ!$#!!(Krij'0b+UcFEhaD[+09bV4cUYjCi9lHiHG9&4aFB
+km1$QB9@mA(FALldkeKS6!DMi[2iaabATR@9Q*p%)1M1cZGSMMNb-Mk0A(aH3!(9
+05'R),2(#'Y49A)P*aFARB`4afp$TDhQ(4NqfdL-@VCVMV-P"F4q,9h2Sii`D5Fj
+51BjDZ,pr'1,%YVamA@aMS15Br10*U19[),b$$NK(K9`85`qFKi%$UFi@&2M4k)%
+l*"6&N!$J8SccCl[)+)$X-hGF)"af1Bmlk+e3CZ&008NlaQ%F0elcLE+b[I4`J"h
+TQ[,Xq(E8p[$R5-+pr(4[2aiKQ"),66['eIE[EcmB%m5mkXdaR("AlFl#RBAemDM
+pFM%jhkMJTQQpp0pMRAZ,*0%@p[$U&hYlcrE[#RiGS$qhf-Fl2Q(HiS%#$XeGa-d
+%V,!M5-A%AG+XT[[2frqf9c,AiRJI`IJrqe[ZUhiYE[Dhc+hUf2ArVAhlRlZ4pEN
+ISM44[Ja[%MHA'rcMITdHNdGhSqfdH(SrZD2eY(rUFjQ2m'2qj(m%dpXL2P4qA(p
+MX0Mrbi2m[*k(Yb)dLfNI%NI*NI0NF14rG)dRBk6pV5F,5F65G#[Ykri0IhYIp5[
+rVVqVBHqX1pX2S@(p9Kl%QaNr!NlL66NmZadGMlkalba`V'PBrDXIkl(qbap'ar4
+CD1bR@9PmHbqECI`@AhE,NfA1XZV*efhiIQriqeCfGdH'cFfIr@crNXq0CqZI'Mh
+X2l%2lCm2I!3%G!Kp""pK,km2ed"(3)I33Im%%2Q`qDJ)k"%2qYT,Y0ID8E6raDI
+qY0Sp0lh6GpTU@QifQpU9Bb[eTAaTAJbXQ9rKDeYVr`YIfVArVDrqEAqbepZA,l@
+AiN[ajHE,r9EE#flkfaVEl%&Y9Le%Aa)[fiYl&p1,,Lj%Aq8@GTkr6pMTrLkIGDI
+KDIl1RrpDIrA6c*dbCJ6*R$QCNcmp[TVI6509)q&CGR)plT*mMhpIll6GQ!1[pp@
+qmVIGeZSVDh@k5A&&ee[eeYeeYedVVZZ[DqlVH[dR[UrhdMVT'bXHcdPTB5l2VT2
+`UrXl(i9MfHQPf&a'Z)HZXHcN5kqCB5p(eeKedRVY*eeIedF!NRVV)!eIeeK,N5j
+FRXp*ed2A"EHrNHpX[I50A)S52eQ!kEApI)l-BPVC([`)8!#GPT2GfI[V6hqQprT
+[f2IfR[p*l`(hA9S",@AD5`MVZ[Zd"UfA(Zp*efNPbp*GepTT2KD6hGIefMkk[Zp
+*1dPaAaD6Vp*Gk5IGk6V*&`-)fGYeeVed[VY*D"(GH&Rlp!4J''&8"K5!Nf403%'
+0$#,,Xd",,XlZal1d'#)#@R[j'UdQe68%"%"0*ll5AGKGf#!PhT*HNPS#!@'%ZK&
+*Zj!!"$5Hl3%dRAqlVHZrfrXr[dq,Ym8pFPEh',*fcX%Z!Q`D#CZ,'e-Q$@&2c&R
+@d'QdF%UYplrbd@QK2GPTY9BaUbXJJq(Y,M&phF!GMDCk$QNd6!j!i(E4l"hhM!l
+m1$CcXAX8(0%i()%(+qYD(,J$NY"c4HqB(*!!"b`VB(q`iJj$f3(CVX1bQ%VF@$k
+$`dR4Hqh$`2aN(ka"rhFffV,64eM3rD1Jr@$&GDq""leJrJd6f%1Ql,DGYlZG%q"
+$@4i0(Ak@`Vh"*DHrIX5D1#-m%N&TUd*01K*D[3NI!MZ,!CV!!fXJpql&YT@9QMV
++khVl5dd53QX"[@4UkXdMJie9M!M+Jd+YA3JP3D,4D#pmfK@D(9'NS@9YEeG#`JU
+J33pF&$S6`D(9d3*B+fXd0#aUrlJN!f-#D&B*-&C9Up8BR"@DCJBJM1`b%Ll$#q1
+9Br`'f$B$M!f`-Z&-Jh@JEVDbYV(!f")$DI6!i'`"X$MJGVA3GV)eE"S`2ahJH#A
+JG#!'r9D)DZMNZa#i)R'BZ#&#*'Dd439NX(VS53G@Y3MV%)hBJ',X%'MD(%`0IQb
+aV5)Kf)@%U#4JRI3QYB+eJq39BfG-e$M2R)iAMX4S(X%LLUd3*%bad3l`4T[G9MM
+Q#5YF)@YB0fL%!S)Q#'YG#+YV*(8#E"+!a%eSR3M&jF3f"JM411#64SYd)kaf)i)
+@P8k%&E"SJp8TlS20C6SUeKF[B4)3fGDR`JD!KSUd-M4k*`3S2k#)&SKB)"SqM8M
+F'Jrf)5+4f)3Xhi)B#1Yi)E4d`4(ISUf3!)3N4U%6`3UBCVV`4-)4i)J-5N$hJLM
+34f%+#&)"!6523JV9*+K#!q6r[eG$3UZ%0@1K3f8!I+JBm%F'QJPI#JdI[*Jp`$c
+U4-&5&0J6k`%b+&%`%qTId*hZ+,GlLL0@X%,4%[q5de[m"J4dHTdlj%MS4S40T2`
+9Mr)QXp0'N9pZeXE"9SlTJV'f@#-Q`dL5"KCk)SXVDc5[mLb6(HiXd9C)90B&L&5
+D@46@$%I*#d+ii*Q[a8FD%GDK'aBV)TU!L"#k%9Dk%)R0H"*#*JKV"L5%,f%!&J3
+1%!l)1kQ+U3e`&Jk%F%&FeU$4*Gc'#01#GL5XMeMi%[`hJN49k9NFV,!LT[$IQ5Z
+XYk0,#XXA"5JD3GDJ+&BHVJVG-F"C!`A@E*M'#iE$BeLSeMM#0!+l3(p9G#XM)ED
+)b,p#U#NXJJ8pmV'QJ`UeCH!Y@5!M0&SL6d2PSq3p54eXEiFCf35Y)!Z#""hSD98
+(-**`K)3K0("A@&CG-LCpp)+@GC@`r$%hM9RZimIXBBpEf5QrVCB1`cDqcV)0MGh
+X',LeZRaHbNk+aJphC(qm!2lE&X)m2`AB-VR3-lG!cXmA&ZCPTU2KBYM@@8HXVG+
+1`dmH$i@+1CXK3Dp8l!-eR`X9(c)5V%3`C0N`&rm!,Z`Xm#T5"!V@Z`UJYURi&Uh
+4J@V+fZ8m5*HYX8dYm"BE',+!B#bRiVY("@PIe"D2"@K,V)IVJ&J9V"ZmHXd3`+4
+"@kD#YXbq$SV'6@D,i$J4KH"'6@feE+V+r4@-1Ll2&fUciKN`TeQ!0P5`!GU!0S'
+B$bfqCIScVeS+chm&CU)+bmJdA@3D,h8%DF5U`D)N&,A3UrB`9QT3KJkj3!"b(,'
+l##0em&F$$8`D+kJVEXPR!'Kc'!(1Jd38'NJMM*`$@X!`f1")T$JUq*!!9RI%)B&
+4YE-Z8c#Yr""G)$9[6V),5+YZ))2MePEd2JM")eSc#ETPSce[D9N'XVG&pf#Yhd%
+(pN'LlH#Ykh43IV9N(l-%!-r8JVF'0"k!MIrI[IpqKEqYJE[M`D+ZjYCaprdY,rr
+ZG$rIiH,m(Kq14jIDqhSHapcl@KSBRQq*h*)RjZqqfT'521VdqCaG!2re0$UCrNm
+C!VSk'IkpAcG$LD(ZFDVe0$UD(QphSICd2p[*d2`!ZpAdp#VLq[pM3kR-d0$pIa1
+CSB[dI@d1CRk(8f@,dG$3j@KSHckfKeHla3Drli[6kRHk'Kh2jp$Tk(4d1Mj2UD(
+9aHVh[9Up(QD(Tlll@Kh2&!MSD'H5Qli!QIc1TSB[Y)%pA3heAe!TDYAlhUk('ih
+4k[p1,j[4k[ImC"lMD'KLi[bHTh)#4NpAl'KRqIm[&d29d2YjrZIhqb$hSp%*6Sk
+('mh3kJ`l3qpp[3qaSH+&(RmB'A9kZH"EUH*kI4jR4#d![q6Sq,eG9j[UD'Kj[ZF
+EMISm98Q!#H[SFa%pm[&pc&#b!*kfK9cqTe"R(9k[8m6p24k2Xqcc1BQ&qVdFA3h
+I4m-,I%rTk1IiQKSFc&Uk'+Q!*KHIe!$HVh[i2ip$h%fN0*%f"cUFcQFE%'+H,c0
+$eZVRqjRKDp3-$r$U9HCkrZD'Ki(8qer&SF6UeHRiQKaZLa6Xp)"Lp3&(4ld3d6R
+Up9!B'i(qRe"VbC4c!ZqU&0d`VZTaKPrVrRr"a[9Uk'qpV3pIMF`,J'a%S$-DS%R
+Lm6b8`rM#rT4ZU-l3)qhkRHp(3)Yp$2%$mhc36k(YCpAerCr"a29cmre+[YGAf8K
+i`$e10Lqb$iLmpA3jR9r4LrJmP0)&Kd1Ce1Md3V"KZIi[U*@2Dd26#451e4Yr4hH
+++&e2&d1Mh2-pAqR3cqSDXB*Q4+FcLB[Xe3PHCe2Ad1jm6bkS3i+d1q0aX8I(e!6
+qV9cqQ$0"Er!C@NZm`CalR-r6SGle441,Rjr[q0SEiM@lRb3X!PZV9jQKdDZIaZM
+Lmc2k[bHmr2eIeBT%'R@k'++@"l2aHMaZpd+Si6Lk!%[XT(ZCSG2`Hlcppj)MAZG
+(UITr2Le4&rAmRQ06MSrT"ri[-m3MLd2Yq6khFmEiBJr96+[*&0kDN!$Zmd2dIBr
+E(+G6Lk(jNNA%aG$ph3d0MpMcG$e2*aH0aYpSG6cG$fZV9Bb)1$eF8LPaI6)X1C9
+qpLp(jQJQ5!%&ik24#Bq`aCZ0SI$d0pqRQIFq(lA`qVl@KlJDPAeH09(FrEq([Y$
+bHm5J#Ji[&5aXT'G6lc*'IYTfA6$BiR8k"+d&JN3F*ITi['mc3a4dZ$kRHJ6k[`a
+HrPpASK,jr4('IjFDVq"1G'0+9S"3)29a88(TMbD[Xi[9pUVrZ%X$cSp(p#+rfd@
+[9UrRmRUqi-dmaN$UT"ZVkZ+3!"[*'Mq[aU[jp!Nrk1Kj[k[QP4KY*r3meNFI9le
++rm[3mhQGA9"8SaHURlIU3Ghh9pE%k2UH$dq0kR8*!f5Y0N6d2Fmh3d26d2&kQKr
+KSElTMkr`D(4BpIrIL-BIc%b%TBHc9l[LLLk'Ki*"(3cre&*hMH,9qjaHQ-%qjRM
+G#S"l#5l&r"e"C[CUk'IlR%+K`hi@,3k#IRe#SJ4KKBplrqpEeZLSpF90#r2aX6U
+N&2Fqedppe28ha(ALMd`[H0kr4aD[9aG$UiQlaH-Tk2@)iIK*R(XHYaKRR6%Br9a
+FmBZ8VNe6Upk-@(IGce&+)8haKr8kU6h&kI9mN!"F0-crkJN[aU*VpA8m(2kR'p`
+BPeI@k[Vk(XUMJ&I-a5VU9,[8k[6(4qSUK2NKHUB[h"a[44#q$aX8ST('Hai!&rp
+mrUG8&j!!+k2LqUKIc&8Y*jXASljf42-D42'ic%jrVm%Sd9@iIbbI[`ZS"HViZI9
+pAf8Rh8r"qJL#mRQ*Q2'cm634%i[NXDZaiRU+5SUfeIr*C`40FE3r!4I*L6-K2Sq
+VqRQ$)N6IVHYc"k"&9aG$XrdG(cHMiK2ed5)P''4fJ'lR3d2MPAc&&,kR-#1UJHp
+[a%bIp29Dp[Sk(&i[%kLEMdI9ihJq,dGpj*&KaX6QD#+4(ap[h2eFc&k[LeFrUi[
+-m%DQ"R2m!,5U8-FE&k2%9'B&ICp6e[@pEr,h'%6rhihJq(r6hr'624B`[2XJAcr
+dM!rA+Er6aHkq&i**Vc-AbF@VkkE9aY$p2V#2HESH$a5MFC2dI08#[*crDpVf[dH
++6ND(cI@jR%mcr$bdeNRM8[Q*RqD'Ye0$rf9-+[cIFqVkQKkZ*p[SrCa5Qlc"92d
+HcSFca2"#qUm`GEKr[HMLfhKIq2&aHpRFVhf(m2&iJbcQ"Pk(8qAkfIRrdl[j1Kq
+VplqhiA'mhQIHm(PISr6SEMSlldIip$3q'-88M[phVq6kfJ8jFrrk5pGTdFASqjc
+20BYHIlAk"RQ,k[YD&AbI6k[4rrIJm+hZIBf(jIp2"fA4r6aH0aH+-)d+[k1,aZ0
+lRq(PPMMj[pAVGleHRi@*FP,NNrmAUB[K$5@h)YljRUB[fmrSrJiT2Kr[e20+dr4
+lNL),Ph9EALaG$e-Aph3pRTqrprLI-prq2`Idi[4kIVGAQ#)JFr"l4-Tkrk@@2ZV
+iQKqci9@j9VcZp$l(Lplq4f8HqmceH0kB4[4kQKc!SacrQrR*GP&55HG8A[[HRlR
+qAQFElR`4j0lRp2eN6E-RiD&9kRQP*3L5r4c1VkISriTl[k2"Ui[6aIq+*j+ReID
+pR`"q(-d#fIdDZ*rJ#cc9E[+LS85S)cqReHCaXrTqAiH,qATq[dIAm6rpl,-0DM1
+lha-A&k[4ha9F(YH$SHelAHFST`'96lHKpS[pBU-9!r[I%r1`V3*eHS9,ZUAKG$U
+lN!$S64DZKpMm"D"jRNmELeIBqje-62ihXq5bC3*r['%q%2c2%cqTiRNq`%m@`ZV
+e28r!9%HSc,9r4LpciRSJBcrpd$qTj2Jq6eG$%9),iHKkM,6(-pXSVifIrYe1TmR
+eaSAeI%+-I0mAQF`0ZU6Cp6fZMhUCU&9kZKj2LMq1MSHb&TqRQH6dIe+U*[LaG9i
+fqr4LiTE-a@C%#XR'![dZCkhLElZI0r"qckRXX@hM",&L-d%'@YmAf["ldbEHMr[
+l$5D+&Y$h&JliRXjrZH+(RfrSTXh6r5V$43++paP9JpIUrRhh&r"l@lpIQIm2C+1
+eN3!%pAUHYe5Sq)VRjqIrhp3[Ii[YI!(Iqcc2NKBp63)`blraZ0pNLed1l+KaAal
+8D4RJ+@#01[pNR1k[Nq[pRLmAf[rRQrSrrG%UqrZSpP@mjRLG3L%9@XFGpMMIUmd
+EIS9HIrik2JV1a+M2-d1)D!A%kR8rfUqZ9RF99+Zck[Jq#0j-)UQrd10eHCq62kR
+%hhHrq1MLi[VG22l[S%#D[6k1q6)5QERK9BYA`$-j5pHjp(IIq')IddkJ4[2m(Sp
+6mh9md[I-*hql3r`r5!LVaJ#KJjjLXq(L'DalI'k24cr`FEGiI'mNZfEib620!k+
+LAMI8d2841PTpT1rSk+)Y)*aXrSq&Rjr-lePi%N6q@eR)`"YL(&m(QHD-Ka&PeJD
+m%B$ZqmkJHUXe%a`dRQHBU0bBVmKS2)Dq+-VpG4BMb2CpMaF9C$qKe-6pAqIi!%I
+dU6(m$"4iR8pGK1iTGm!fV`pAr$cHMiZKdf-",YM#J'e[43*bAq#Sbk0Aeq*iRU9
+9Vhk(&kR4kjB1$-PUk(bHU0ek[VFcIBZqkRHmcUq$d564P+m(aA"mRZc,q9rJ)4P
+ATR1Xa@CBV)i3VIA(q%T(kHRaHVLqdc&6aG$Q1&%%AiR8+l29kV#L(TqVRk"(Rkj
+JT(($5HmiR9cbp9SH+bZ`ba)%SBK!&,@k@cb)5(0qMf5F6j+f%LiIp*4R#qGAm(&
+-Rdq3!2SH[c2A+br9G&"i#+!)4K3-Y))NPSE'A!Y(CQQKaM+q%jUm6cIhHMh1q+B
+@qifKl(i!2MbqVq$M"0q,SHVc0!ca5(Ak10a[pe6kr6j2'hBaX)2r,2kMGVYA899
+$@Q@AmQD3!#cR#V1[jKDU9j6IFcLH*p[c5q4a0$UrlQ1pSXpN,-aGQGL3!%I*k)M
+B!r0aHVp[Srj+SQ0-UQciSi@5XYVk+Q4e0$[f92d2c(%6HNH[8r"RiR9m3['IT4`
+-bUKJ[q#bbY$fGpi+TX!m)8,8&cqjjK&1cG"jR-@6HbcL&!U3!!c#dA`1j@DZ(je
+0$fqCklM5HMqLV9iTR*TKj[QTq6r*5qSFiPKR9HTe$4m!B9!8Qa[eD(6+6!$I"d-
+8X!Z0$UmEQFcfH)B![&'rrcXE#m*r%@(@VS&bNE(9+@r4@h+E05S"+JI'@k8KQcC
+Va5lJQQIS0MJN)Bf$Uk(NM#IdHX2p+62jh&Qd#VLJpr568,9Y39iQH$i#KQ+k"Hf
+&B8S'+Ym*A3%cP(39cr0"5R0e4K(Y!SCQ6qSHhc2iRQQ23+JL[0eY5NPB-Bjkk6E
+p2XD(SqjeFAp'Kl2rM3#PUmcdeRrXapHSEcjMcjRSlGE6ANqb8Lq,krX)TPC,m62
+ihJKZVSFUcaRqZS@GAa5)iHNG-SMq@lcc1*m23q(l26(irFm4ZrrlAVF3AJFkU5K
+La#P%[45jq*a[ZG63pVSPA360DlhV'HdQbNUbE4c200ZeMVUZKi,$fiaT2jjMMpM
+UiR'r6SG2mE&VUpAGq$qGJRCT,p%92[0$[HMl'@4fmE[I8cbU$jS+N8CPqmEeXm)
+AfXrfbZk4MHZTReBUBY"0&kr4ih%EXkH*e1ccmrUM,p$TXkSQIkr9hCZhXTi*EFm
+5hTk(6pASq$a[%m6j[8mRSq+EFhl5K&c&3"lM`UY$h$CYkT65q`N2'#V@UkB+INX
+Meihp5M!kK,"j2L,8)pIUHchHJAE!U65#d2CiRVmc%0"rSplkjNCITmXY+('QG)A
+mqKiRk#*RLQ4JA8L%T5HeM9P5GjrZ(#SY"V3pUVrSFrEbHCa'E4J'NdS,m&2XUT3
+kD(r5X#E'KeH09ih8-&LD(dIDcqr1M848,TeDaMHe9Ek2&4dG2&mrh1L-C,G2pa@
+9lhrai)0@@8q0lRU+VfSJPUa-DJ3(kR%jR&ihUllerE,mhQrdlj9h&5f0+6eIBkZ
+,mhe6G8jR4ih6lh3jRcHBG*c3-bJeeP&"dp$crFpNG4SI*r9qJ3E[Ir"NiCrY$'Z
+SZeJh!#Ek5(kN$pEq1V[ZTiQIdGp9aFAMI(r`m[M-T)-Pdr4lGAMFA&-BHKdqlUq
+6SGli2VFEa28d2raI0+)N*#iVpP-kpcbI2)c[Cp[MIEcq0i[HG8kBkj!!eYTSAA3
+jKX$pALIEprrAq6&pEa2Am3SZUrdrdlXLqUqVfIXqjpP6k9IkFA3-S(3p2m(ZD(k
+Hp3jr8cZrqEdrpQ'Ykf,c2rp@Vc2r(9lReZIqF[&PT`Z"UId$rH&dNeAqVl(Xqrq
+[q(j)8H+`SqafQ+AGefMPRfD(r,Ur$rErT,G@*a9Zf&3!IamYXrE,FS3ZKRrpreD
+&cc1ClIf2-pckrbrfP[F-ReCS!'&`kE(SI,brqRfU['rh1#hQGAphYrVqd%Bc*A+
+ZIr[MImIDq!U5@+F&(UVDF94eBQ9D2kQKjI`rNk(Xrdlli(k[*qcm,QI"A3XCAME
+ejU[9erN@@CiQ,Rrm[drh&`Vkrp[`[X-l)'JEp'JbP(d6K4k*5m4()`0",@ELIX0
+Cq%,lKeCI`)(H5'#Yq%QrC&Lb5pYj[UQ5$e1,j+[r+P@9drZqje1Ce3k#iTdIFia
+MNlXN'@dFD2Lkf"dE`FqX@1$SAEXQ1)aqMk4V'mAUHDZ2[fG$a2eBR6d2F6hb#f,
+qF*SGH1$'XphlR'hhVp&!l2AE(mNa3p-hPrYJ0r"aLcNGb[Spck[bH*l2RPp,UB[
+ZGAmrk[9k1KmRpPGb,pBQ1lRfZCRrRr1GJrc#FXN&m(f[FpcSqYdID8QTZdGAQGl
+mRTll2@r-B-20aFAfZVhQJG4FkcZKiAfHTqVbHCaU[9p3a5jrh0er6SGSZjRpa4p
+Cri1km[3hh9k[XD(JB[qQKpKCSAfc1$#(08Jm4[JVYm,#KSHjpVqDYqe[el!2YIc
+,m9+b$iKpbf6"V6lMD`!h`IY!FZS+rqEI`!Qi%'YVC&E@b*%%LP@J4pfI8)HkMk5
+(9VI3D2QJY2VS!TG5!Arc1I,(hAZi1"[fIeT5JdGmK*TG$T-plL6[d)HkrKrKT38
++(ErQrKrKq"m,q'rKKdr&i[&l[9IMl(q(k[@kEhh[[IHppelVV[fIfB6f1CNINXr
+G#Zc)h*JVTjl%i-1Im@qJfpB"fZr#"@2G3`"6aU@hd9K(ZYr'TEL-",b*&$*hFUk
+hXHIj&RAHKGc-U$$[[Yar3[[bcrYar2MmhE5,#'[jZ2ClL0ID+(@fFQIkYaGI4LT
+H")T812iF1(q''62XFVA`I+j0MQ3F#-%[i--(MfH[NAeGGblk+ZrDj[K8XZIM4S2
+#qVIEL($j-0,jmq2jmM6D52k&MQD5[XpEYT%EN9fVVkFDkhmHrPhdb2q10hGG3Rl
+L0"YYY'ZYK$YYE`i0R@4qYNAA0m+XjI"MAdMN4rMhhj,2Jem'YhPC'bXM+ffmb[T
+hh"Jf2kmrpLkem1aeX("V)hF5,l+fr5Xr)MAeIbBeXKI""[,#crBZ[jFVBriCAKF
+#Pj'NN6[qNraJBifrJdQRN4!afh5Tf0pXB2bheYG-'-qR)bGh)PC@fmITHRT1PLB
+pI`ieh-Z,##ZqT5UF[Jf%E[+jJ`j0CD@0h)[Uf#I[E2l8HP8l@0U2Kf0pi5'0p`B
+8-0A5Z+qZTF(QlHcjHrNhd0ek9TA`H("2m+cbGe@F+0qeV,$Pq&cGp`+q4I``Ef#
+2eY+cbGl)XpYCb)2cY&YKAAe+Pi9RAeee&Yj(l@fbU@hbYl`B1$$Cf%%CJZVieeP
+Er5H4@DE4q(Ak52SS0[E`C19&[*%ZkTEDXl*`9I(RY&9,IefS[U&TSm$*hXHZZSp
+h5V-R+KbDLF(GCGRAf&R"Ab1jZXZ$E`F'ZT3Ecb+ffZ[MJ0fd'[hX%9p[DbCA`kq
+ZTDq`KJbD9MIAf2)dMJVh("VV[H9Q"(ZSep(RaZjR`5U@pV,1(BedrAk5'#TE8VV
+J9epZJbSmq4I$DBVl`lDkXiee([YE)TErJlH#XheG5bl1(JajqaVUGZKPiFLq`0Z
+i-[#3!-Ya,ZZ4"XB0Y)'5blUYV0kk'A""PB9NZH$+22#rZUq22dPC[pa,[Xk$J`D
+mQkPA9EB@e,Ef%0C&IEFB$$PFl+aiI!K*D,LrZ,lPl143YZEM`lZfS3bqE$YSFDc
+ipr&6Q8,LlZG0kIK@mVip$'eqRKf1hKVXk(al5aZ[5!((cUlMq$'j[cUqPr2Ah@A
+i%1qhd1GkF1cYYAPbV[&V1$$ViGR+[p0i8-0#R$CdmDfe%HKECd-2D`lU'#Pi81Y
+MCADc,U,qH[TBpM5q0BmhAbVl1Nf-qaZTR0i81ECp,*MAa5&V)CPp+[[b@PGq'[[
+q(&GiQmXVFD4$XE1R$+[iCQN'@3m'ZSDHZiraEH`Kq9$KhH(GqRQA(lG#firVf%2
+cl#(bC@A$-ir)LTh(BCdAiC@C$q1fmqAjd[cXcGq$&HCI$rRa--!qGbBIRhFhf,Z
+9k%rqMNehR9hR)#@1CAJ%NhASAf(aiILp,Idm2mFVd+Ib[2Lp#KT,LbLV-#lY[4X
+Dcd24Y[3rScX2rek%2SIMPqMqARI+rhmk,cp2'p#Ii%[N5[p-ljAlG#CcYhp'(qH
+,Nf&a3`lZijhMfhdmZ(HiN!$$$i&aGlIq5IYiIk,r1j0c$qpFcEl53k@2k&2qMNB
+I*VU%@NXHP4Th()Tr+mk,d!,@hS9NS+bRUr3XjISI(p#PPcH4KqImA-Y[3MHKPj2
+5hp,Nb0,jmVmF2cq6)f%@PLZiILhH(PC2R3r+[Fk'jKr$ChraEUAGfJLRp(5[,#f
+r$0ZSVlE4r4Y,L`KSrGr($b02F8rLr+ZrLfpX-3mH'fT`a8)CN!$L%3ZF1bYUARb
+[``rdHI$qAcV(d+HrZr4`r2Q@AS8q6$r46dF1(k-2"TffA,f1QdfQTr!Kfr0r2$[
+SIll[I3m''(J@er$UiI8SH46h8UK`)[Zrp,r9krjY#imkAk'fKqIjeIk&emAQr&j
+U!RqQ9LDAGehqG,GimEq+kKqIal#Ak(1qIjdVd-[qM-Xm[Pjfrq2SSILmQ(PqKk%
+[d2bmMjAi[3lR5b[4p'9B6%PG,rM,f-VAIVpM$8rBKPcmZRViIc`lf'fqTD``kkK
+YrYC@hKfhcHcqrIr0RX4r,%Ir$(S6,#6bBF#R0r$qrc[LqI$MqN)0+4GFMjARq&m
+ANk2jAi3,Ek'Xq9q2jiRpemrmFb#`K`mb$RI2jdh9cr(XqGMcSIk+(aHPkF2bXZ,
+c[3ZjIhlEcV1lmHXf%2ML5A&h[0r6q,pAheC[pK)e9rbrfiD2q[ilDR[BIjDI")r
+E84q%4l[T9hJc)p$H`iI1q,3Z23jdhcj2Ra9YRmVmFc56H6$L@Gr,V)DF[XSIeq`
+dq#$++cY[ThqhaVDKYmDhfd1A[G[,ZiIJI%[mZR$`FDT$$,phTqbb,c[K5YKj%2a
+Fb[p#qmL[!(I%fQA(TmhBEk4ep,b0J2%'lI+r(&k&2i[Rc23l25@I1bC9E$`rb3e
+LN!"rFp'fp(jr)QrhIMPrM*!![rljdAR@T)Amr6rVhIa1j[jAF'5*[E5+e6#)F[E
+rXEbhYiFEi%UkepYpA9kIAlD9he+ZS8HEmVcTK(3&aNlk2pDlYY&EIGplRI+mk(b
+*k!UB$EHKpA9qK48JY19f80BT"TRbCraI2Z0+-EPI@blBN!#I2PCGRq5cjhmq,$k
+P2JFZrLSA'TmrHbYAmIcp0SlDN9'UA"JVUHhPr)KhXAhEkC)T5SG,-[m$l[RbVrB
+q&$E`dYI$[(%QrBKemZrbG[E8lEciXah)*Nhj)*FDAd+I)YXXbZmk'R&mIR5[UpR
+E+XR@DrAaI)lRkY2Jm(EMD0I[C@fKhRdqjSDFTjidb'AllJkM)rIrk@pY6Q5llK&
+6#Xb3!!I"Z,2BA&r&GeprdXh%V0h"GaCIDaqE`Sf9ipYq'9PkHfcTR1YCA)Q6j92
+6c+(mpT!!rN!(F8*K+*GmQ(Vmkfj%-LPr4TYRi8VJ3`pEmHlS8)GlD`hq[ep"*9r
+eSCHA&[+H[MAHfdrlP[MEF!X(K@hR5mVYG*!!rqie#iMj@[fmQlPAGr+bVH0P5mU
+YKhFZKq6$SAmc,PCA!`12i%2#KP8[M3qV$arR5XVJiN2r'(NBFQrp+(4@H*-qTR6
+SBVqeK(LHK3mMHI&cU((bmUC6Z+@rJf-1Ahf0,S4@GRr2B5iDIaSV[j9rb*YrM44
+EDT6KdmDldb5B2+)5ABXN-q9Pr2Rrcf-rmN16*,-(,rcjd@A+SH4TDlMmkR-YZG+
+l29jHlYZF9IUcJlHC+kqKPe0IVpl$Pm'hPhGYh@ah&YG`kq,YiY01QH&e[Er)a[T
+I%Kfp[$Db*rTeR"V1#J)8dl2b)VZiKmL'(Pmk'fbjd'6k8UPZj%rCephi-1cKj0Y
+cVLK$&Pc,UR[SH4-Z`AfIN!#9RTCYcBbmVR3b*r!f(K5r-ZiI$fh$ffmhK9Xj%0r
+`G[GT+-K*4iG2AqlMAHZYrL3q&iAlPRA8-1(CaUAT3qNa+-EHPp)+I$R4L@S,dUX
+F($KN8j9,b0a$dYh$M`dm52PfN!$dKLd-2mm1GL9Pc"f'9[K*pl$,Zl8M5je[q'(
+6I2r#&e@Ic`rqbq(@DlJbVZB*,(S6SH4+bpR+blP4pr%q4[,H(R%KRAT`a)[$`BV
+riPhNkqA3PNKXLI`kqlQG,5`lX5J5DCIm$5k@(I&AX5MkMT++QhKeq[YiGI`4*kJ
+Np$FI6q4$XCQRPd0I&GqVFH2[HikcNIpUIPr%bj9rfV%Vd8UkSDpJ&KKepRQV)*Z
+jd2TffA$,Th-&Bk5hGKMC`PYqC&FblYKRA1QAI"XkPR8%Z[qP$dTH9P`j12(j1`h
+ZQhA$ZBGaYZ(YpaZ"ZZF#'TYTG#hPhQp+B2rAZT@Uq4IbVZ(iQAEI8krY4-51j*M
+Nim-E+KbUbC!!bUFZcfCHhk8'kP8mEGX5l0f,8Zr)J2T4Ld1DCGYYcCG,@r(TEkC
+UqGYlI6@e#cLYUG[m@'(b2``bk&K-S6*qrhX&C&Im(6aDD`Xr(MAF-k(CbkH`K-Y
+QT+L[kHqhXDlhQh'1`LBJSPDqC'(0l''IMepe`iIb3Cd[,XrmkFUrZ)GKC#@lFM$
+Ll$kHkPEUAPlZ(6`fe#A6PAPrcTA`EE,hX-jLAhm82fD'fPAr"Q8rmZ`rIPIV4Bp
+[3q*6LKfHRKVlVPlb93YV[B3Y!pY6PAHPKf&YcSK)2)P8lJE&!C)q2'TF-9XQ,'0
+$F#kjkF1i'5A&rM@F0B*P#a-UFkC)ZUI*i'phQkmLG-PbrJr(eC4VYm5CEh!rhAf
+e2Aj(eIUdiYa6(iLCl26fhhH[fGR5fdZR-Rl#[Zl2adQI0k805raiFD3&GC`E#+R
+M#Gl1((V1(EFhC`m1'r&0'+$&Y&$j&U2QV0Y([l@9G*0YI[YjE8*YK&mFR,R3bq6
+1(Kle*aNq&"A`m'C$3m$6D5cmH[V,H(K@fAVlER3`hrIBea3hfhNAqmrA8NqQF6Q
+l5FDk'I`l'qp1(dk`N8TKFE'(R5TpGcTIe"q'A&h2dp[+fmZRZSI#'[@e2REIb)H
+GYmfh#mKeqmPEhJ`jXblh%U(A6+(qAFr[b[q%A!%jS6)Ge[BHA`i0`5M&XKS(Pd*
+9$'YZG,TlZ(B5UF9hM`q4-ZlL!5aa1j9h%%ZNlbI6KeZE[43'*c$FePc@E[43jH6
+`p&+LlRk[Ar"+RX1hUEIADkG$Ypp-hYa$EGh+kaa1TQb5G4Am1`dd2hqjf#6UK-Z
+XH[S#GFIjeCCp+('%kUF[(%RjD6Z93ZBe1+IRHNiRGa'TfiR5NkhN2!Q`iPYcDiM
+--BA!hdAar[AqRKj&Y6i1`PEdbrBG`Nqm++lLZUkISUqri*F8qm(2)ZUcH`ipYcZ
+#*pTl@J*rGlS6rFIGC*`T1bR2Vl-Tc3Z*qe2ZeKeaR6dUlR5[U80mpNqfhKbVrRE
+hI5qdKh`39$HcSCABAHbqX-BmLA$VT82Mh(NEkKVqGrfZqI+f%-1km**pVL&"56D
+"b-fRVTHA,bpR$XiKqh$KiCVVhpQ8ih5IPi2`Q*rBhpRj(K2K2Jba2c5clRkRak"
+C6Pr"Pd-E%5I8mfFrLI@N2Q06klZ,j*pq36l4&-H+e,pAIHR)S-,q03rR0)(TGV$
+Mf9Se3+qqfF00'E%1ePGQ9J-649eh$F9e2BkDC,qk*rR5kI"i!Rqk-AXk(JfHhP'
+iPG3lb4Gm%QarrhpY3M3@`f1jL)Kk(K@N[R#Il0k6mMmI5Ik)&HcKRpU(j$ZlkN!
+h6@fAE`m(HrVd2ek'k%#l#rU@pYa"5Yl,TcU'pYhDJ9'+"`lLS+"PrpVrRbL`T[G
+Y$Nm1"-K!'J0&IkH9Il1(I$9+I$KF`$'Pl`(5Ha5+'f%mTCeRkF0ImHl%h1JhkF,
++HHAEAG[-VlVH$$YaYlDlH*k8YXfhI5Hd"2GID`rSYYH*l+Zl2(N802Bd-1[bYj!
+!kA53!1[QNR[KR%VCq38jGJFr&YL6%G*pGE1fS+Xj&3P4YAcNRZLJh9CZYE6ZBGK
+&U,rC8kHcYLZccTPr(ZK0Ga)ZmD(F@hS4k'9P5lZ+lZ5ieTTG#lm#+(dj91I`CIG
+rVd#XTTPXAhp59Gb,rA`kCa0+kl88qQMCF*3cjHLVZG&3*,0l$8hZ[PAD6L9mIJ`
+lkfqm*VZTImF0hYpp$&mIZjI`E'[[a8D!QX1mbpR&jN1TPIkhm0Yf9hCqQpNdQ@%
+XTbBNblPjC[D@H2Feph01JKINjYMIF1XLVl[E%@BqZcJi"d)h5Bd,R4%*lrHc+qq
+f``[ADpLC80[-YXX`Qq1-4j92J5k("rPeHVSDEEc*`Q0p`E2p&YrVIedrBbVqjNA
+A#YTp$$X)prCiKcT0M0'6jfS,E25iF2*KNABITPr'8IPmQ@G+(diHP`*$*H2)"6(
+qQ64BN!$[$YK8VDmdPYR481"j%cEq&+$%YXZC$'ZMYUB'`Q3jHZY[aR@FhTKM"[b
+$TVhHfhPrZa0VR(PckNT)([EE8LEc)DN9qNhhN!$2p1$5(D'biU#6@+KEG#ZZL,f
+9GN5FbfqRGkq88lSH$`3M[ZdpeR5UIJ#DlYm*UCJGYUC92je5dbrM'E2i@aKXElT
+25EA&K,+EQ*F"6aUI5am4LDh$T0E2KP*5RTL@f#4UcBV)"JHZiCZLKijPUlLfTj2
+TalmBC+Zr$Yba*,S90l$VpZSK-2HaAHhLrDfjM`eG#TPl#(Jb,qbF6D(%Va0VUKm
+UbBQhK-6Dfjhb,SZR[%fVM-qPZdf)-E`6EddQhh40X81'CGakGRUjm&2%Ki%@U[r
+m0AGimVpm6QiKMAdDqKeZ`Q@aA&TmZ26Pm(F!jKPjHfPGIViGfY+rrr3epI$XK"V
+DR[$,CKU6#Si9MEDldeMI38YD*9EA46KiGPkFGUEQ@Bm6I'i*6Dhf`*+GK,bl5AU
+cRkEM,fjF+iBbEC`l!G!mNZYiI#i,%jhF)!f!Dcbr#Z,lR9fAdYeL4YAPF#(m-*5
+0F6@8*Vi6%el)6@i[p-0h-58-*M0YV[%,1V%i%YeaYP0N[KS%Pr$Kh6iN[Ya`,Y1
+)SI!*m*Gp3q9IFh@Pl+K+[c'IZiH!D(FLlQhGR`01B"QT[$ZeBbZC%r(PJ1Xa0I[
+djCU#EL(N8ie#cqT2bY*E!Ti%1hh%9$Cd&GFNAdLqKM8$6HPd,1q)XGLe-pa+lLl
+Pdq"$Qh12+ZRmNVh%-rm-Im-%q159l`NVZ,lp&eZ%$GHVm96HV0D-Y5K--)ZcPrI
+SI'&pl@fjfAYc6`Q%fZ[+"QTZCFYc$[VH9fG2J9*eZBYhiR8kYjfpYG,0V[Bk@lm
+#0p-Hm*hdPB9VlU'[ZpEXlBUd@HLMGP@DG*ZNq'MMlLpCcT81pQ@0p["l%Ulh#Nb
+K1"95BbUHlfm9rPJ%U%QGCVjPZBa$DGYZM,[%RN-[+iFE,eY$Dhh0J-JYNQ8UPMe
+phfXLJrLG4K1LC8V$@Hqi3cM1PhrK@I"KX0[AC@NPX6VqhXL0Aha*I$Cj-LXXpR-
+PA@hKVC&h&eUY@EXdhYH@bVZiY[p55U235Ef&Y6XkJj%6@0$'mqar(@@c%em11%,
+eET5D5V[(,XkDC`EG*a-LlLlf%[lphfX2rmTmFl,ejMDI5D9,Q(Glf,9d1(EHa6a
+kPc[BGjN`Fek6+hKm2R@pRRG,%a)rhXVCRKD%0jSPpMI&d"hG,YVVClr1*+lBZRl
+`*`m20q!-fXMd9EJ26JbafZ[-X$c,lJkqi[j9$GNQqAVcK!l,VESDmNb'&iR1fp5
+jMh@-F%(N4XZZSI3%chB0YGFPZ3m,GqaJ0Ih0-961#(T'eh#A6kqlf)dlQPZRmp#
+8A30G,[kq$kPe[DbfS&LiZ@Dq(KbrG3d0e$R@F'rKM8j9pViG()[i[Gf)Q'cP3T-
+#DE%**ip!bmYZArD&[@,F"L[XDcr,$Lp25`lb!bH'TI[`r*9h`hZPm2"mL+KZq'G
+#rKbUH*Eb[Gd$SF$HhXPdjpTFGjr%d3(k%XafS$m6,PQ-lTG6QiQlMrGTE-VHq%0
+MG*RCXHhTKKXDPREb(dc1d[bd`HHXmS8TUC4LN!$4AqZhX+BYEm14h&hkF12,qp3
+U$*kN1peq[X(T-TI`BHPYT%-*9!hGQ9@-5#1HI19#)rMV-ZRijcqI)*j0hT593kA
+T+PL!'P4UH)D(f*ikhZSSIeiB0I(T3q&,0XAJCb6#f[jGhZS6+cbFXf+q$'ZT9pj
+%2!X63,P8iDQ[K*HSGm*K'ZhdQ%1rU5[Km"iQ&cTI5!9MaAlk6!i$hDBEer%`0Ce
+p*K!q%[qp6%[aG,i&GrRPE[K4[iNfq(GPJb$deU25+'i"02cTGpXp+T(G`*PIc,X
+J,V5`AcK+B(ZP[#F5hlYfU[G5(6L@aAll5dc9I!XpZpdY98DBe,9,`qdYhGMIkCb
+4k(`)Mffl1XYLNekFAka#$KaVp*@I'f[X#4kC'23Mbq"Bf,dPHlaiVjm*AER3$V)
+Ullprj(kD3f'Ha,G0EFhh,SfTDI"Q'lN@MVF6"6Fa'[SrD@m[b$,0f#5cI2Y,*El
+5`kd[0rYbXACarpCrDm13!&bUAP2*'T8I,hQPKh%DRGj`P%Ua[pDB"$R0PdmN@V%
+9mTbQ2prMUQ1-5ejB3+BjeeQT4Cc&aN18aVLqp12cSp$dilbQ0-ZZ&BL@"G9racV
+LC6h5HcfB`q'ILF05+&[rJfe10IE#XPhHc"ba++mbCZGF`I&r$"T"+,2AeQrXC%r
+PqP3fF-a@k1($,qY62K+F'FZKE8p[$P3em18b42GDq(UC4N&5lTL8H&EFhm8mU%8
+q$F&dBGA[4T,%YY+KN4l2diUH*kBf$HaIY&lB,ZTE`$+a+!T-[,fHhQGEGqQ8P%P
+eYqe@I[A0FDfaF!P8fJIkG!Xlmhqc+aH&(r22lAdT"SV80Q5+&X*CFdB%q)*ApAX
+1GXAdPH[%V#`%[C&p[ILckR"KYaLQ[20!B&63f!328Xa+TCe0qEXDb'eXDlR8[f%
+PHP'V&FU'(dj&+&KFcmhC'Yc51@dX"&R#06K89e,49hjcBp(N(j0pVCl'42c9YG3
+rFN'L)Z[[F`I2j0K"6XmFbi*N&EM`HP3a`[i5,U(Cl1+qNAjPLQ81b3pU6JGrfSH
+acZD0FKf*NQhaUAEZ6im'2$fX9qG6H&1`U$2bQ*EIYESbLIr&r`VEp&qUcr"0%J8
+UC$P+(#la%1cYcT2F-,!YAhH*ZV'[SG,GecY*%"pJI"$r$+rXTBZ2(r2GGVkE%Si
+68S22X,E+TlMFBN1YlAHBNUap$TIPp'[Jp$QqKcVBh)$U`)VTG$6*KpYp6cUm4l,
+iFVkeq5lRJbq4IM+dp65VUb5V[%0*L(MefG2rl8r6MBN"f4H"AFiNNi9B!5A6deL
+Acj9+rGT0PNMN9$K9PYGB[$(F@"ec,m5Dk1Rq)2pb0h82$!SCG&K)p#qTD5'43Yj
+&pCePYmMXSE%fciIGR-3%&f@@Ie%Cf#NJepY5KV,FqHq@6RrVEVIBPbGB#3a+*Gq
+e+2!ID85jQ`IdP'A,p#fp#rr,6c)H(mV1f$j5ZYZBliN5qYGQApPIqU@,imIp&ef
+Sh,,dd8mchklRDE6"h#fbrMpccT8ELGKcRfP0"lb)iH8j)M`9C1KKq+l5U0k,dPI
+5dZmM8r6N1dUY54"KEY5NN!!bM1(1PFhY69S,6mq(H9hZ%L0QHElA`aUqlZ,['AP
+`jZjS4'FqNUKhXMd,r53Ed5c,TF'`Xl+([XIA@IT!Qm2JcE[drLmlJH!b4HB-`fj
+NbU4H(*hT`qq4qRkIeHF*D*&kFFe'-Vm8qHEqE8Yi-`f[Y[&h0-f'6(YGl!Rqha2
+pZME'2Pf,DCfhjH4r4bIPHGmA-KmMmZG`,H9Uk(NDqiKh@hQAqq,Gr)I5AIa#AA(
+#Nq2AG@km#qlAMTZmaqNZXb4Hcr,q1ap$QrdHM*2MM$4S5V[+k@m-Lj5-jCIc-@-
+hQY6$B06$4J(02mTJHLDhJPfq%ZYZE*,(2TebRrLRNrh(i9C0N!"c!cmd[qE-b5Q
+b,rM2TQNZQ6iI$DPa6Zem-L[r#IE5IIGkjfZEVJ*,Cd2K9eJ*A[mI6lf4I8bC'*X
+M0YmL9k&hQrMQGccZ$!*8mNChYC-MK(A&cZXI%Xm4U9Dk+PrkS@`PH,-KcBVmGqY
+JjP&ajClr(cCP$GRLBfH[Q%I6L9CfG$Mir$iF2TjdcZDH2VlMj&rEb[TULl+p1Zc
+X525h"HK,AM32m'lY,Q&k5Q89-Z'6rk8p['m+cLT#GpVYh'qpeqABhpMIepf182"
+5Ap-VQdG@Q)P'9ZYKFN#mN[c@e2b)[JUbP$Eb6m"BIZP)@(%AKQfF9rZj&C!!lZ$
+qbqfHQp1Zk81)HK@IcVN5c5J%#kZVE,S3Q`edZ'E+1*!!qKcT4Np%9h$dSPN`j-k
+Ch64,6[PMJlMQlBh3C#eR*FqMP9e$6(0Ai@hVp*CN,XH(THR-Zk%ZC-phGiP[F@f
+GNj93h0c*p@`Da,B`kffrdmc9jFI+1GAZj3Br#KhPIG(Y8,"1@1R(6+Q11RmL,Y)
+I(PqD8bIThG6djDlf*lIYZAjeiBIb3jZpLl+lp-'fc9--iCI!-DmGfNb!rN@erR6
+RXP@)k5V+hPc@HR@BmBq3!(,q1pdR2$"PBPGSYD-0%6iLbCaLh5,mZp)[DK9R2Vh
+YRD6kpfNm'cdXL06l5qZDbfjZ2$Xl+(1ZC&,1*%YPcYj@El6(iAH#Hi-maFe5*8+
+cKc,VTB[MVXJkB`6AG#PBkHCPVp'29MAmUkDNPeT)2#Kl5K-l$VEV*hYRACBNPcB
+LVd&d66m9VQCB9kqlSd#54$,Xb46*ejQZG6f2-kr,[jH8B*c61aiIr91@F0M8Pqb
+G968,QQYa)p8*(ri%Ml+lr`[peE8rXhIkrCArqPh$`+IN3rhNM-A@hHD$2B+IM&V
+jqlID4HQ*&[[(NqPAG12rpMG*L3qNq8KfFYh)4TU`l$`1ZjTBN!"B60iH1Ik8ZRZ
+0[$'U6VEq+r1N+&4cXZA8'SllAh&C%HQpCQ%ZP[j%rT4[UkTa(1eV,QfkA#dS"!X
+#3%r"cV@b!4UHQXjJ`+Zre+bPbSM0HUSX2lfQ5-j@aKfeGPF!d6SGIA6ip$6INKm
+MEF'[VU'NKqDMQR9X2$0@LR`BSF[R3j1@0K9pm[j@%18NE+Fd2XHaj[adMIK%J-2
+KR5#mHKT[r4chRfMji$[)cEMB5ZdKraZq"VlMF5UHpQEb9YmE%f0bI32diCdkfTm
+2A`m'jYb3!)KfH(IIEMCH*)bR[2AfPrhdkAm'ILqP(k%EqZ4d[(53!#[e2C)1%rD
+3!(Jee*m*$L#3!2N1*$-*PEElYf6X%I4jeU@rVjq("XpYkGBbH'9dSFl&N6ml&Vk
+$U2[(DMmKL2qRTBrqY0dMpT&I@-2aGY$biFVIq&(T-4hBX4hrh$kHabFREfqNKqG
+$&G`mfrQGIG`lbB1`hd-b`daLpL,pr"PcmZh*fcdCl#fpMf2,hCe6Bjid6BVhF-c
+hd2`q&$V@)h8YUHi2Shfj*9E[G'q$+p18HGbrqlGllA6Y0-ZrllZ(LCHh-*Nb(f+
+I!8IdfPmmXX9q9VH(+1[QJ,$L5Y9GBYpi((rib1Eim1GZ,@&)QBdGYLD5cQA@0Xj
+&2BE1cp,6@0h2mHclQklQlYXl@e0['k@2@$"MaDHp1qY+ZkcI5rJhrN3rI[iH*6(
+980l`E-rQ6,f'A`MZPci1((ir,fHi%9S()I$mUkYZGi&I2a*E#aXY01+Zq2cI61F
+54"fe2TA&rIfh0m!eYiH4Z)IJPEDXPmIP`mM+hq9X+m`LjF9pYi0Y$fQqcFD$EDI
+5'0Jmmh0[mhdcqNl[b*eYp5QAYYj+K@eXhA,Yl#A21JJGQcGllZ+CeHYLA6U`cGB
+EM5l-lFd,h466L+CZE+SF$0LZr)i-Ur2GrZ,IAffA1&br[SFlI,bAF%edpl%VEPh
+k%McL1(+p8`D1)XI@j`A*arhUqKFblqrp$+0,XRal$QdkcKb*9,K5Y%)Kk@QVk'M
+hQMhN1,+VjFrk0E@EdF9`GZI@PVYICmlHL*CYYpqr2HFN5hA"XmZ(G@mVrK-Te-[
+A`@0pm@aTGPp2j0p3F46Qe%L&F)b&PIFkKl&e`j'X2XrdTh'+Hq)4%6-Ir3iBCXZ
+rda6@XlZfp'#fj'AheR6L[PaH3j1fX)ehT["cE10f&,HbrpUGSa&qA@ELi[mXf`E
+0q)T"XjIhZ*rA+5*m&iLID[Y%q`Te*LqP%AbBH"-L[rpVmmGBLKjLGjF(L)bpp`*
+G20i%kCh2%br)i%kG&GjN2aFi[Zf6h4@Sq%9XQadEV%XV20iFMV8LYIf&e`pj)S6
+r6h&MmHqcK&H4,k9Y6ljdLX-l0h8Vi0r$Zq$Fba&U("SE2JcV!pkr1rHQEUiR4A8
+%Lqr*SYRV[6d9bG(Z[ZlEd,lJ*&S[3F4If,X4H0r'k4I$p&U,qacM0@eUMUb[#2C
+6jm&6[ZGVV2,Q-MZXpY@C@[KSIpT@A"XI#VUImqcYVrKc1jbK'I[ArTlkAr&I`eh
+e,rA+ZqhKJKbX[EePR'TlVGl[NE-lN!"Ah4l"XPiM*QPRVHQEbC[%M[B8-CBVrp+
+$+U54XZJklHm'KX*IeE[F6XII5r-1'2J@mcZIUjG6J@mk+rr+Dh9rim[+jVfR%KH
+)fERYRc@ahqKcB2brKNHJ)e@erAhA$fdMXjrTl'alJ4U9GFLC5SEf9j!!GlfKpkJ
+Ea(%r4,S'M*,qrIjflhZE$3qcGl2J@pJ9EqGqpF*(,k$TAhMeh@dr6KhM%GZ[3Rr
++r')j03&KPhhqPqNE8ieJNCNmQca)r1[c2"d4(E[C%'kK[mh6L-a3ehR3jTUG-4[
+5DH0IkDAcY[EbF[@j@pQpa6lkCGrdHISlM5eRe,rZDHcV"'mZ'(*0X-i!#mZ@[c6
+NfEL0f,8Em"iMCVFfmcH&VVJd1$lrE(Q,R6,Ele$0UEiY2BUr9P)hVjICRe#m$G5
+M*5QGK6p-q(R$hZ*-KrScVEd+(T5UA09S3!RHR$EDY4E+p+'9$af)VPBmEd-T0KV
+r3Rq2&l[XlVKlL[kqqapjBpaBpaTE-4QEIBXZKY1mZ*NVXEIAQM([X3mlPjImk9p
+rZFlYG[QhGS4GI"l#PP`m(%QEkfTiNb#PLD1[RlECRiQhHFDrp,dj19mrcj@9k@(
+,bqeXEZ(@llF6YaBhhD`9fNVk(b[a`$#BfANeKkfbcRNaX[NFLiKpHbNA-05cfGC
+XlJc"$MGBM@QheG6b[3bprPEIiaY6qRFHKPFL'cl$9hrak'2P@Hpee[EL10fX,DQ
+D#0K$$LaX[Cl2`BU((aeFQXDbAcU&RrRPR@9i0bCrQApRZjRKaGY&ffEXCCDpLlR
+kY-rkSrJ%rNb(Hm'li*rGhhZjqYmHKfTdrTRAd26eiMHh0Ihd*2R(dFVZNl4UlhH
+RIm4Z,9hh$e[$eZ10lp0)ch20q9,SHRcXfTVkIhE[,i-[lfA`CR@&d,kIap2Yr$Y
+V[l0rir$'K6,EREffTp6R38[!XEVairF%H1iZ3kpRBhhjHEmF4$VF[GL0`bUllX2
+qKfirlFU#M5mHApAQeNf2PGV-J,3N9r`*%(cX1DHrU`MGk[[Kjc89f1NdmK)V(eI
+5mq9B4l`idVLrr,jmNr)2irAhr@hI#V+kJq88eiLQ*'bmGa&*lT&2p-[6`3aGcR'
+Kj-h'Ar,Im#,843lD9f&2JlIHP@rEfmVZ"&+&YpDlU4Gcf(e2MVi*bXZRiqfZ1Yq
+2cTQVl$1Kq9bBIbjC(Gi-(TR+!!61m1Aa+$Ea2fl'lZ1iH)VUmT@3!'[q3N9l*lS
+VeQNlQIZY[FFlY2fT@TC(EZpMM@RCGK6dqaehe0A$Z*Qidh$fbFXIflpAUCd&,YE
+'kaib46A6@STmmlBk4!T(%GGah$L,ITbMGcfGI3ff*C3T',@cBM(N4Y,)iR)cVLf
+iq9YmlrV$P9cT'G&Tj'NhQpMGEVBF#PYedqI6Z2MdL1cJl(FEcBc,Ucm+(,biCPH
+hSBEf(HbVSm!(0l@,X[UCf20N6r(0-hP`q"[)E,`)CpC$XHq%ALll,rk`RdU28[e
+p$Bkr6L*GKfG2BhH@Hdc6l%G4eqVlLlaTXEL82(f0alZAcUIMl(&Xr``r&jalVIq
+,dLRe,ZqhE88[hXLRamV`QD'pMGaGNFif4f6%4#Fm,ZBhbYA3r`hRT90YcLRY,rJ
+Q@Qffm2dlrkP#A$reKq$f4aA`ffG[2#Ypb)KXp*k8LPVLPe+Kj$+A9Gk"`ZjIDk2
+b%L!@0GPUPhLEZ!k[p,dTIFmfQ-$NI9cNL%c6@I#aEQ(0q,IlfZr(+j'R2*3F"f`
+-EYG3TC1ih8EZ,kXhkmlea$,TCd0RVXEFDr'Z515&pSC+bQSBD9Tfp'SCIl[`,Dk
+dP[,pfDFG2rT[BYGPl(,f10T,Dm[pXG'lE902VjI@Ef(E#'cT81Qi'mmMA3mhiPh
+8ddXk('pNIKNmip`'0dMG,V,1jP`l2BfUeH2Z@18Hd@jM8Yh)RPa['F`U'i9G'Sa
+MkeBKUcE3lEdklm1[PlMdTI1i0ak(KH&GihBAPrMEE'+9d@ZY+K42[THpdf[PH*6
+h%%2K5*rKF1[T5L0D%Yqim(jB68mlA4RLD#X[Ye$rR"[YRT6K6LRqP+5l`p,Cb2U
+CGbUi05K$@*!!5,$[r#XHGL@e)jmKDEYUA"VZcT3klCb2Mhf9-V0K)2!G+TffGTl
+Qcf0Yl[63j92+TfeNBkYEGi&r4TpV'bq(MrmCRBFhacHR25[$i"Xhr%qpcYaTDkJ
+Ip'(rXUHZbqqbqqT3qDASH!ImKIq&r9YSI$KdhIIVRARcG0,ri5Y[(1M2mblKRjN
+M1$kQ`"m3eR1KfH0CpUUdrr[4Qr$dQ2mT,3%EU`HNHTFIp24m6ciEI*ZT[FAIrBl
+6%9rk'[m,hfAVlrcBGKfI`YKf9hP`klrTGbr3,l0$b)D(!Jjh1m+[ZYjipMP2$jq
+9Iq4+Tl24jb!TkU+Fl@ehdkA5k4r$eMGklGee$1&ii@cKk3rb(XmZGACH`R(CYr$
+,RlkXm,55ZiTPBl(YTqrhQpV,5C5UED`V+cAb,YTpDDjXrK3d*9ei4XLdFkidFV4
+5p(E@%9,YCRZqbqa-krQm0`qX32VYI!PAh5fe[$jm1iLTd2!,d&YR@fGq'XZ1EPa
+FI,QG,-fIQAh)LTh(BChbV[$SA(1YlEcTHC'kAfl'R,irfiF1qr*(Hk!l#'0pK6I
+dM@SG[jP8YaLD)h!V-p0kIbT[Y0@6BeaG"Dr@rccUN!$bUIMkkCHrqZ4TmIV*I)K
+pH(jAl9hQI+rDkh88-[YBI!PIfAB9@C+j-[Nh'G-bm1r+JA8c[#XElFH2B'5'0e0
+hbI*29A+TFK)K@*%*8'mE'63Xlm4#l%3TfIMR*D#kfkqJHC!!h"jAVLlfaq3PBBL
+jR@dlXr'@lfmLZl'Xm1hV0YB@&QGk'd%6S5qGTVR65D&[F8rLh@fYb8$Xh)d)D02
+K+0$Cjh$-fEY64TV)EEr1$KBNV5aVr+iFDkhYG5bXZXLRRkd9kTjlIQ9M21MFRHe
+1la$e,VHaVVJf%Dk0lN3LcC5#R(BVXq%T[bKGj'4@E12h201Z$#1`G4NG5kV1(@4
+Z[qVPeP$JRN2m#(KkrpUbKLRjallXlJkmqT3e[m6AbTqp0$MEQhrX)BIjkbfjA)m
++$ABiIafNfaRqR04rmVR"rbBCPeZSGE(lKXCm1MP5cTEM"iDri0hFeP!3$VH`kAJ
+(FlQ(QrKh3IfhdfcY#0(J5lVIlcakc[SZ+(rT%IrKRi[l#(`)D(823&`jPrLEJ0J
+dLGl$PfDkXXZI`DkRE`ZN&-8ca"F@ck@0Ef%%LPX+cdTPeDRf2D9!30klXmG'pXp
++(6FXI'28LRU+FhNG2@3Rk9Si+ATd[dh8bI)[bR*(Rkq`XD91ArEb0Y*N48X5Xf"
+bX`bUqkkANA*rXG,p21LS)NCq`0(D+KEFdkka(QHS!pbh5aiDr9Aq*A8*IH3lMJq
+$'2I[R8mH9IkBEpYMc@GRIQ`Y`j9eNlLI$6eq9PkZKE8YkM!`1GTSMpPYjLEb$'Y
+ijf[+aELZhNA`B-bI`VMpSeCFHaZK$C4fAFI&Xm54$PC9e!aZG1rXmkccN!!6R$K
+kriGMc9pi$dh5red9$HDlGQ1CH2qIbVYa[%rdjrkEjqQmD8S!Mmf9GU,3h*FkcmM
+%6HX8LP!-Qpd,2T2'pmSrBl9pccVQ43Xr5Ka+kl'qIHrDPG,ieGPh2K5U'0E8*8p
+Gm,hDEkGj5qMciH"BD6H%TPG3VE6Kb,ZfpMV&K*l$r5q'UQLMCRE10-CN@AMb+IT
+m2(cI6iGDIq[%2fGGcDrXmiZ(T[pC+SAF)B*fEh8@YT!!q4"`qPkmI+rfT'M'r`B
+A8ZlLqiFrKRV#Z[5dZYLICK%"58EQbVrK`db,`me%2NH!QrBRDX!cl-6U2$%p2N@
+h0h%1ijfRedVQlX-6E)a,Ym'*"iqNKi0K$[8BXHKPH(iD-ELGC%IEGEIkAeB1#hX
+0C-NAq[NAaSC$JBH(MqRkI,Zp0#ii,KiYR$L9P[B9ep@5cp&r(QA@mZ$prh($AGa
+"kI5a0,Zklr1PZba8pc&PjCi9#B669hXAGafpIePIeNLIk9MGIl9R#J2i(#`MA@9
+NdlE"fah2kcYBf,@E'B&Zaa"f'P*l(qk9VGQC+ZcMAEf-6%-AX1V2R-',FR!&Ife
+ri@ZPC@k-brE(,JHTZX+49TMq(3$%cCN(rDI6XmZAUrMN"0YTklZIfVlJ3lVHAI!
++C@*VESF6E8l-jmdUki+-laj&#Cl[i2bEiBCLY-2dlP''9ZF#XPpQHb@i[Y`@*#L
+`!E!0l&qpM(2SPdP*SE)HYiDq#i)V-qj,f$+H+dr#9DEMRcUbG[AaarG,Iq&@5MX
+[DDXl@Zk9$A6,XmA9MIPeVJpUD6e,GLT!'#@N$HG&-ZjH9ZcjEAqR#3LSDB2cTF1
+'Z,ReGGlE6b[J9drI@hqGrYSC9r&I+NceQ2iICjHEF3`Gri9G3Xc,1h'hPcpYTim
+ZiBBT5'aiGhVI$V0l'ZdiQ[KepH`aDqKRHRMiqq)'@bVjea[,FLXPRNphX!BYh$`
+VLqf,i-Ar5#XkA8jZ*ZirhD@cIi-52a,ZfZZ")ZYR2mL[[UjTL&QkZT9dq(BM#Tp
+2YDcTH&+j#-8h+RCLl0KLSPj&rCP,NYHPS)PJTE[H!h+U&bHFEU"MF[H5VqKYkl,
+haZaK*j,6%hQqcXf'cVQQ(`GGYmhERDQ2qQZjACReLT&-#fT2J`Z'``YeX+f'Iaf
+'$@6G-d`G&@@X'"@8GEAed*pRfLKV'QPmDi[XBX![4TFf#jXX5ZqpPEVCaU'Q6)e
+N+m1XXq(,89kTG@e,ClL(E5,lJaVV*bBj[4h3j2**M0l!R+c+(K'`"P6Dklm'%'Y
+``dk%AFCCqHdDm)&-*R+hpGc5(ETc%EkKp@fmFFal(14Tkl'm+'I[TIh4c%@fZ+c
+*i0THGRf#0,5DD2GkHZTc*8ZKYihFcf'PepqGfdpE!D80#c0$iJj8,*+RIZ[5a,M
+Z+I6VV[`T+ddF5#(PA4FG)0q&'YVU0IfHf-R[IehC`j1ideY3T3fe#caSGE"$Ypj
+$,dGC-S2BhV+adYRL6Sr%bYRZT#0qcFGKAhHi+6e"1`hXE9hmZqi-LqepIA`(rqG
+ilGKG)hlJG0[*I0Qalm0m"ldEqkN)hf%bMI&CF0qh#6DEil(I(iD@0Gepr[,Dkhd
+[kGrZ,5CX,-V'GEfIFjPa$$"k3EhB'AG$VL'R"fpCDa[G3m$F'4RkCmLEDPKr(SB
+XDlfjhFV1T&IC*jDCPekHl$Jr,cGYEA6(DmqadX2pSF9KE8Y[(ZjIb)GMYY*(ZM1
+!aYM$"ZZq2h"fhK%G(K3P65aVU%brLJhm1[-m'#(ae)XU6lJ(YXVPiPRZjdEkZ9M
+lU[Zpi'q(DDZpRkDpXb%@PKh8MVlqjeZrhqa$[m+0$fXHqbSed2EfpE$G3lrdlDl
+PhrJD5ch%[R6,[@qRCJcq"$8l@(dcc"F)!e)QTa+qaMj3f$CQFp$$[T'V[e-@I90
+IcSre5XEbq`q&,ZpjB5Zb[pLAadmVB3r+KcEH(+N3dYMDE`cNSGIRDq4,ZSElB`q
+4Z!Lc,`bpl(TI&kfRJ(Pl1qV@1MYrDTbc9%KfeSE9T8*ZVERf0qITCI3l-mcfhMA
+m@S[paX5I@kR3q2+LJN8iZXKRE`lV&YpiZ@ApRq%"&V#iHAp((E15pMcTHR$[V2G
+A-EXqE`0hAN8cq(TAY26@j16AIHT3lZ-l26AEbXLV*Gh+Ka0&DaM2biCdNiGhEGM
+$82XGPjATP3#APH3qcd#3!(Ck4Q(T3mkAIlL`PGEIkkGFip[$p'K'[paX*3Sd*ea
+r6dmDfq1Ike$+ri5VUTVkbceY4(YR--Apl5Brfj8JmV!q5(J`)pTmbKECec@DpTk
+fee3hPMIN2@RT)VqdZpY(Z[#NiX02BSfBH9e,b('Km$Y6kE5)p$`1eKZmE54Vq'9
+mHlXkb)U#ZcY!2$YkqrPdqAX,2J6UrZFV0'Y3mYq(MBr([lQ4)M$j2!l@XPmhBie
+K"Vi1#91I$f1fV)Y+9pXBfXV[di`,hCk5UGaIlkaL*JYpB`lbfjZ6bph@(8iTE-m
+i&YP(hHXb*VJ254fE$dp1dh%Zqbq$XBGli(!hX1CCl%U55mXqLQpNd+@0iHZ)CCF
+VV*9e+[SH2J+XjL*p1hJbmhrTI1hd+Cr(dX(5LZc9YF1p0NF1q$al[`L[C*m''AG
+QDZ4pcI"djYHrkjHf1l[VU(JI1YV[BdjFmeP1#+*T)H%qAa5VSq0ea)ZkqrjZE[M
+ieA)[6p(PZkcF3p,pk4cIq0IPIEd8IrA+Km$4EEJ@BqH4IC1hVZiZJm1FGLUfcTG
+rk9B0NZl'r!2YXXqMhTff8`p%6LI1!a`p1E,FI1&N@+c3`XD49,eX`DAHIkr(S63
+mbBlE`e0[E6phTk`2)X'5ZX,blKj*S#2+QB1C5b"ba6'(f'BX(P3RqNdmYjEFQ[[
+j9"Tjkq$mPhTkr59hpZGD82#$Df*Y@BIJQTpmEjd@aKMA`#*IKbcJU*NXEB3dZPi
+81c86)bP`$c,Z)[pF#B@CZAQfF20jdZrZ5VcCVrjaqPBeA6"F&ahYE+AIiNMQr[(
+!hAj8rihcM8+h@`p,6ee+4IRh8aVVrPeYmEe*YCk@(A(4iDq`hlGfHRLcj[1fF0P
+C&Shfl'a2h0K2rG(i43q"T8kTAXck$BYMEFk+IrlJh'iXajZfr,Pm!kX%Hl$PZiT
+4[l@FZ'(Bbk"lU,k+XQeh0bcKGh8-A[JaqbV2V5bDhHk+fZp&-V,2JkmjkHqdYGc
+CQh2R8PahPGGiDE14LckH[0'N2HPB"lq(Gq&$ViehDINKq9EIfjaXjb[pF[rXEp`
+I0Yb*BEKA"P82#dYGGbXYiHU!rN,rGr)AjNmZ'bKjeYPX2QlDI158Uq'-k@'L8"c
+Bfh0qG)b[M9p,qHYM$mF@0prpr`NI@9!8aShC"pGV$NbBFDBl2QRXj@@!bbKhaiN
+QNp2jI,fCP+BjNX3jaa$R-MkBD!@X0YalE1LRrNJPQ!5K6h(jFDT+p#lVVZ'QBZ2
+NAqfXFfX2ch%)lHC@C2l2(hahjlXD[$Mk59GEc@kEBrHRe0JGrbfSD3`i51Y'[5k
+A5a+cG(c6G(p)ZaYE6q*R25[p0"AITjfZjD1+AqeIffGLq"TlDR&h(hkHZ,VPC+q
+r6R(E4bGkZ6$ED@2I[SrZ$$'SA!U"&bBe0mSLY`AV$C&ISrj92A[4rrIT'N(f[mr
+@DZI[B1$LD@$IaVVjhda!GR$bceGq1j0MTG2+Tj(1dkbpYdU$d6k3!!Vi($rcTG0
+`rcc`@h)0IdlE%qXh&Rr,PcYK+QIfGl$mrm0R62fAeZ[-0hjlkAcSFB3h6@GRkAj
+E!r"Ql1b"$`')"GqRZYlAjfcm+(GbkGJ,jrrl)UTbTiJ2qR%TH151qR,ZYaEG,B3
+m[e4!F[BaVZA2mMPqPB3HaPRCaMd-'6IqaPq1-,q2p1Ki%1h0kEGE#'6!`r0MTC!
+!@6pXHBF29`$kq'1@RlZhKi*RKXbSLa*3(6X2`P+f!IZ@dr6GeZm545i8E+mH[Rh
+`6'hdXMc1fffLJi1ldX'5(hr$XDfd0kqE$[Db'C26rMXIk@hP8rXml`MT!jXUl0`
+ik!9rTV'IbpR!j0chd9$B$9kCdIJTcjRmJmCm%ZrNCN2*KmRj@A-rDZiad0YEYiH
+$(qYG8bSN[QaB@Ij$X[Aj4rQ`aAfAXDlVDklYZcTH6%HNl,h9Z`r-IJMMZ'6HI'a
+HeDrl![m@26XrrD2[Jb,Z+kaLl$5V+8'pdN02KQpcf'V'4m#ZTDDfeGedZEPcEqR
+mk+Zj[N(HA+AH[4JX!m9$Hee2I3lF9Xp+h"L1h+G1f'lPmkjJa$[$R+HU2LS*3+Q
+882TbU(J$ELq,Ah9GUcJ(ircUR*qRIFhb0h$L@@PJi%MprIq(iBiAj81kdGc$ipN
+MlheMGjGYcZGMbmlE3mLjVlrb#mhAX+HkZ[b5*r5kAMViN3Qe89d`B'!E1PhH2$I
+m1a[KrIaEqij%2cX-hXV2mXMN@IR3lrBDr45qV$$-qG$Cdl(Y1PR6"NI)2B&j&K&
+IELZ[cqLl(RIpKMY2BDH66V02$LIDphB3m[&Mmhcm2mFJdmM9RYZE[VE+r*@6,U)
+T"hf6X,'$Qlk62i-brAGcmLZbY0@@f9cV6Ea@IJbEZ9c[jiIjjP1C6F!p2Af4hRm
+[A`lU)Xjj2!Xrb3qP$K`mIN`q$AFIid2fiH4+cVLl`lmb52!Ki-f(id[RZMcXDGY
+aq&8h["XUrZD@9cHE)ZXIdYrhhI(6rmQ(lFRZ14Tc3RqG$fA0kmQ+j'2Lpp`BIb6
+C&h*[q1`T*0erlVkFVN@h(mHaRmQAR5VX+LePmJ`emLE$Yk(T((h2-#(K@er22hM
+KepR$IaXVGQG&-MI(ZYj,kYr$0KXpk2Z0a2id2*hd2j*PC[pa([iI)R'GaGbU'[m
+,4@CqL2hrN9Pc(kAaV(cT[SACj`lZePPYEREHaRhIMeNM1Z)1"AKZj@C@A%HI[)H
+APEbXPdSIVAIM6Uld-[jqA0p$NI2!'d$IKjhN9R!XTPrECI,h9RX*d2aFkij*4lk
+&Yk(1QqM,p$,bHGVEDYXkH4pER5Y()ZZ"'@rM(p'(m[1PAN[i-QK-jdq62dNMTE$
+dpr$$Cjf(b*RSqKUr3Zrk1cp#mp$Nc23c-2cp,YZANmk93j[,!,cT31VrNeriBIb
+rKQhISFli[R3rdIKQp6d-[YIM3kh1`,qcjffq9Ak1(PlL9IlcH3GpiCY)qR$6dqZ
+KTH%'T(i'qKe[F8lLbV+kq&4K2ABIhArdq22Zk8ZIpDccGh'p$1Lp$RA(iC[(bmR
+1`)Gp@F#[ZY($Cr2K-5ep$[E+6G3ak9rCmhF9NZI$HmL,cSrSFljqA4rDp$d!"X!
+hDA0IIC[5a,,GehhDFAS3rPZlJllAb[afhSChaI2QD@9Sk0#`Kp#Qpc+p'(E'C"N
+qG$j-QPB512erl89C$$TEEd)HAfAS82br8p$i1MQD6jAip,mVQkh1Y[ZdXN!V5Dp
+#qrS-,NhX`Qr1$2XrPIMP6DFUX`!XjIbIaaUf(Pq&CpPI9PRVTIk$EBj--Zkm+cp
+,Q4peM`khY,p'*GGm*P+Q9ehZ0I@q&@Dr4@H2imLXQHKR616Fi'AbjF'8-JVBIXj
+AN`b*&G2V[HAeG2JeZfV0jR5Xa1(TiEhF2mqPmA+qI5rSRrPZZ51%QFQ(@mkcPqK
+cX2dC6Y`JjR@hfaMAffN5)2PFkEcGYACN2VefC"jeId[$KXaK[1`mkip(d1[p#lr
+,Ur3pf4IqL4If@bmq6q16IB(0D5mel4H!*)[,Mm,)[*9P+Lc),qchd"kkYm8IcM5
+Y1r9j(h+cd)fPXE+[hfL%CXpeYV$%m,Plhkee`HAfXId'aC4Cdcr6560,,dZNMHI
+AhfMKq,2i--&E"Z-QYJMG,`kbei8-fY`j0pKN-T'9&P10$m1`Vl#[Rb,kMC`fGaG
+'62+jX[T9qCBmfXXp*$m8X'kH9dYjCif4P6+@C'c'&lr4GqI*TqMT12mAQrN`jrr
+Xpa9+PbDqZiqiMd[$M4Spp!E!%%IT(XqP3&'*5RbTpGaqAi-2T516F8[R5Cr!Xjp
+G(JVqEP3(LeJem2kpe"""BmhcS+kP6YVqd,Q@aJaZ"'pH65Jm,59XZqhq+i)+h4D
+-L4JVVUchN!"XDk'$5@S"DbMAAeRCkh``54lU9(ZT&eZ00T)0m3fR`5lkPYV+dV*
+%G&&XBeR&'[UbPk8IX*rK5)hhUkKY[#dNLXN5Vl`UkI@4rB[V1ZRlcBJTN9rbDb4
+"l'92hKYqlqZqp6hQf2hBV1EVYrYUkIKhfE'`!9E$J*NRTAf0"[mA`+hheGH4VlB
+Qf&EANHkf-R&!ET)ffdI(VLGEq+HQIqm[YM5NAf,mDZlE5(@dMrkjHR1)L6i-Hkb
+FVH5B0XIH2`[b!SX+hNajq9XBrqh0llNM82jihqZACj1fK`r"V[J39Nrd*'9rd[Y
+["r1K9A8[HA`0pH#ZcJfpGlZkq0mk'$ES96i00*irC6rqdDkVrr#,cEk2Mq((RlH
+2rRP@G,+hZMe[Dm+'PA8lEp20ZXUXRmVTEL0)[UrY%F@[XE2Mkq22hfkVjjf"#rG
+ipKA8[BbMYIkDXj[J9m(!mJ%YII@I5mLZTI9Rm102b[#faF'h9K@8Sdr*hPC(bUq
+0mK0YJjHqNAh!XT!!@T6)lmLZZYlC9pmM`X)2)JNA8(N5#hrG!N38XS-Ndakq4GD
+fqhS(*%%BQNf-%H4cEV!#0M$3kb'cj((T9[lI9rFhAjHCfmZYVBTm@"&2JNdEc#[
+Eh#JR6C'*GBPeV)fXNcGC4eP(%XX5b`pCL6VfbUcVh#`m5EKeF6$hYE0`r4ePlHc
+EVf+ZXaTZXeQ4KcTfXR6X5MQ9CdR'[*f(HcSi"-HVKAP','UdCf&0[*1&NDc@6Vf
+M4ReEfm[)X+G9`VfG0`X6%`,fM*rH`X+L!qpSiNkmXSTX'&H@9(#RB8qp[,10@cV
++kRcDfIC9Ye&VE2!VEU2J5E+V4Ua8CYPH"08D0@VHa450E9Rf@&HAP'beQ&VEV@c
+T%M#XpC2[E1cLNa45F$!LUidkba,dC[*`,,!j&'GK`84UFl@B9(IeCd83@Fh#'0e
+DXH$-p'mUhS(KL8!#EfmqaKcV,$a-1+EV,h-R46ZcL'bBF&AN9EfI2UcE+VL8DZ*
+9N`Ha4a)ejKiGel%Lc`pCHeF6NB@&Hmbp`pC&HB@Xj8k6Hr#UcEbEKDbVM39HH%c
+JB%HVHcV+EeQ*"9a-55&[p(@@89%%S*+ZCLB@(1jR1`X1+M1pM@IUj@X'"hP8B60
+Qh8Q09MckZCKiIYK$bF6#a2%''BIeX1pp(@634eD[+$8pZ+MbX6)[Ed0Dp"U03XU
+-QbSeFLVQ9e@prMLa-,dDYPcS+XfG*'I6X2#eQXj@*1`k[XFlNBA+`kT%YHalc#X
+KI0CKkc@!jQcEcdD[X9F1bUiG8FIKeF+H#I@6XMk0@bm,%d9A$(#!HXl+m'LhQYe
+QXp(@CfX`UXlf1GMj'(9ab*'m&bRANl@@3i+V9XJq3ZTSSpPK4iml!`kX'XUcGCS
+JcX1pUq`#lHhXASkc@IaeGCfR-a*h1eQXr"V24c0Cq@2NAYArlrpePj1ScK`PP1e
+PaV-1MJ6F4K*eCf--TQK)h[dF!@E@AXRpkbUhZX55B@*QB#B(2b"SFhi&Aq1bj%f
+pSkc@I4ajZXqICAP@6*)`k0jCDbJ0eScF2@B!5&P0%0aV+EH8Eh#NbF,dF1meNdI
+,&1UhNdM)U`BQ2Q@9(@B@X[CdrdE+E(XTeA@6F'VpIN"dBHX%AXTY'bXVc@EQ+,$
+SiQ&a,bMKhYj1#CQh&N0TXUT(VK44FMPBf(Kf9'IHK+6D08$FI$UiH2MBH&KiH&J
+FUE0NcV+bMhYA$QjeAMIIjeP9J&J`X)-($#D`U0@L06Sh!bri&PK"+dBSKd-kk!C
+m,iA4m6a+,#9MMRTa-rbXDp[FHH+CHa6F+EcU['UrIjia1$$cXDEHFUV&&4&+`j-
+Hi'6cF%4Hm'e6ji59l4F*%*!!Uf9@6L%&Cf&4NeF+G0RBQ"KAXr%QeBpA+jmQU'"
+lFfmUii1D)CI)i&P(eQ*9X[JBJI6#8!cb0EKiC,h9m,`[4pMf!NbRP&V,`QR`SV)
+R6XKf&EKB@"1[*[XBHXeYiKQ8elh@DcNBpPKq[0`plV-5ma1I0XV+M1RcpC4[D[Y
+qf%5-f#,QiNr@D+bSiGjKB9jChYjCAY(@h8l@$U,)%1XeRCiQX`Vb2JB!bkp[F6Q
+++2"eMK'UCh@8EbVcqIp(P%TS4`0pCJD)Q%RdGECa@FD2@aA@"0eZX*mV,SK(9T9
+F+G%k2V1MHiH(M@9l2`1G1[-6-#1"pH-*#VQCQ4N9DYjC94kQ)L0`m!Ba9QSJF1M
+&KAXRPBC%TK8D21*#Ec%ajT5`SeHM4X["m%)"l$m(`jUmR!-'0&8HIK4BqCK&8Ek
+-iJ8QLiQ3!#0#1%DePc1CBiGPMBeP([,,!L##Uk+EKdF2#*!!-D#$q24RaI4j()`
+KPhdEdEJ(ELAPP*QSIBejCBFh'aS#@bm"hM!ma*i2,bVK%8FHMJ6TmlMBe9$cd8G
+PPK)H!lX[Sc4L@(HcB,+*Spj!ik0(d3c5pXm+V4a--I*(eRhm$@IJa,+2([19V#[
+K9R&RK0PqM0$1[Cdj%8Ljj'29XT)2*f*V,b24Uciq(Ka@40T(eNk#pa#PX28alh@
+$8JS*Y%199-Td"9!ShT)N6$6CTBM$6Sd56A-b+Xf)&eiJ)8q3!-LpUbGC9*)ZF@6
+X3Qa,'m9l0[FU,%QhNFB2KkbbUa95YL%rSK5VbV1eQ3!QVH36D1L[+S*!Qk[1#E`
+TlSQlc-UPK'EpDbXYC9eZY#I&3Uq`-3a-SRYMcjj$XSJ`X5D9mDT2L45)Rm)N9j'
+CV!`q4bU1(0RmqMH&A+Eb*[)jA)+Sqp'Nf8h'c-1L858Fc@"#&-Zm+B-fVcq9p'V
+J1Q!8H4Q!qjaCG!24p(%XXER%PQCq#E4eQ*KiPPMrimlR$05A8E[4&dR6D[4,C!a
+b6GA@X[*YP@TMFkMM"Bk`Xa*MeF&04Qc5dh1++F,f-,!`Vc@@8j8(f@4NDck)P&`
+%61c-FN4[,fMMUaV!C8cTMcTM[X@@&i@'@TIJH[4`m5L0B[FHVHB4N5mMN!"5RUe
+HGb+YAl'XeN8kmeNlejZ-+*Ha@Gk82@8f6Hi14b-2$6$"IlfGiT5Gr(HhZX`-3J0
+4!*MrM`[AQcK-)M*fc2J&Gc$D`DGH*JHL'T6[klbL6aBdN!!k-R`U10V-B[FH,V*
+eAN0,UmSMBjZCHPkE@$8SX,a,,f#EVQN6!rI$QrP#b@6S!2mZ&kjCH#Mj@04eQ1C
++CP[BPjl(SrB#ValfGk)9GjM#E$ild+I'--E`U*q"Kh[+QmSHNAe0C*RcX6#)km1
+mBpkDAam1D`UU1pQdF,$!Q9FIlE,!#"XSk+N4*`UX2@I4(%4B'X,)9(Y&NrB'X,U
+0Ni9*3C0k*NBiQ"HAZ*V#`KKd6!Cc!TbT4HiKB4`ajQ'&'*24r(*!DVrE5IeNI48
+H8%NA),`La+3IpF!mE$Qiq1@m%6Z&KQ3!ASLI8CH4"BK)@AT#e%XmXcm5I5m["r*
+GVa!SF-HU9KX+V9SK3iFQVq2$!``RX3&K0rKAZ2MQ"B--V6i8eA"YCL@3!$*D"p@
+p9Fhk)B%l#-SJTT!!2#2l%+K'*V0CqA$LeR1,-CRe0+'+Vkp9&!C$-e9pc#`8P`F
+B9jMijD[F+I$-aLpUPH1p-6&A#JB9%lkid,N6F6@@46l[-5m#Q*IJArP,bf'9c4K
+GNCqU+LH%lHFK`U)-6$MZ&6"KdFI(+hMK8AQXL#RMeF-YicX21[Bk[Vc[[dF1bXV
+LGKCPjV'&E2[$)X4@PV-+kp#Z+baJ`[@Y9`$!p4a-DLLY`pBAUh'UAK%f!R4!qRh
+TAaNmLE1aK&l'HAZJJD*IS*XZd-b(-NQ!3K$0`#FdbfF2'`r[QABQ9&Nde'D[d9%
+F&-*0HG96*Tc)ade9"YN''$9K5JC45cY1%5LPXKSFfE[3T18-8,D)8%$K2dBc5J+
+2DSpl%a0C1)`EcUjh1GP"L9YD,fQRV*!!ld`06YC*eQXaX5G3+JL[HQ5k@'`S$2Y
+`reD`M3$Y-YdXAV)i'EkcND``RHhcm1HDR9@F1h"8*TMd5@QpXYCM'G(cTXQLXL)
+d'iei%MHBNPT*0*%c16Ad[Eb6H6l)`1BM*(%5C+k5[+1N2kMMiNh!#5XVdZ)jK&l
+*9f0-&,2a-!A(LTCKBISKI""$$F3`ePC9*Y0@XT((-Hhcc81`K4(C+64b"@D,5j)
+mdNM+Lj'L$m-Yc#`qBBB84e98e%5$SMqG*B928pJe4-2$d3lLMMKi6F)U8f@(MMJ
+Ti56TND[m$fA#4kMSNLeb-kB5A1L'30*#FZF-8j6*c[-5E!AB-1GL'h[4XSJNM26
+'1K)B#Sf['NN$aT*%SK-L$NUb&LA$R[#A-09lSX16HB&j(L+ZjB)1Hp*`m"@i"a-
+fEM@AYeEc'[-kGHFB1-*6UTVCcRA#5$EpXUZSdHMk*SjU@DVK"*N(j*1dDf4Z&'@
+Z9YA#1alc1[EcM,8aB4P'UUZ+bLV,fpBi4,#),*PA%`L9#*%CK&NqGKQe5CZI86l
+mG%CN8IE`X*i4JqCd4EK&5@2p)q#,[4%D4864%N@*Q)Q5bBqVbEQ@@I9Sj(YM)df
+,p@XQNr"VNe3,k)%!&I4qM%L)Qb4,#a(0+H5fjLNM9`T-l'c*T95j4PSI[G5ML%1
+L$*8*5A+-))92Jp(k-p1j%E(CQ9AV+1"HP-h!D4),eV&M2lcmC`GrMkN')&B9D0C
+MBHF'`bNkTDC`f-XEBQL1",MBh+q`TILP,V10p%ck6$mC&UTfY++mUq`P#A3Q,,!
+69A%r+9S5K4k*TD(5*N!LdrDXR4AQ&1I41D`fi86UVCM*%2k1Qjf&qUD4XP9UMHI
+PQii6Q)m*cR&U&8T%6LSZ0'ZVpE4AK%Qk*cX'NlL&5*K0d5l4HBG%VlFLVm,(jq&
+RP[XLi*9+Y(mUk9iMQ*iJ[8E@@@$HBI-jf'bSUUL#QRA65bY&4UhZ*iQXq&NDbim
+6X2q10Cb!b5S&LBHF9KXC%d'h2MPBi+I-46e6Uf)U*TAj6@cANm)PF1#PR%S&6k2
+))*3,RY-+PB&"EKKA`XM%Z2#m6SmJE--V`m6@1&,Q'm0C@@)dTm2@FUVJllr3XTD
+c$RK8AYNFFB8mRN9I#*kCZXm3ir520&54U-Pm9k&E&qXm,%q"MiPacrBp(')P`T%
+d[ffP+2`1RE2NX+1GbX6REfbrqRAG,mYlV$JQ09aPj,#A8ajpAEPe1peRK#8#NFi
+kGXlk+`6acEq0C[%)FR@DeRK9IJ&6,-jjM0-f,$`V)Nfr5L[J'LhNq64*j141b-5
+Vb-kDEM1(fKF%[6RdR1aeK@"-ETP$iNA4UqaK$3jfXjmiVZ6HG4#[b*`l8""!Sdl
+bJbmeL%)hJK,MCQ4KV26+3Nl$RBH2KijC'j'(N!"Ri-,(@HeHB@*K6V*FJYl1eQ*
+M'CN@A*[2&Na$)4UiF9APIPUcTh`ZIH6[KBFA)SNbp@p`TS@IJcE,NBH%FI*Fe[-
+246ZTKdCh`ZGq#bZ+2-r!4*iIjE)bKjpl(`-+6HiCdDlh(RFLGb-M!`LX9V%AQXq
+&dD0A`3[MUecYCpLp-`M$RD`Tr#&K+r@UiKS`cX(NB)cqmaX$#Qc[dP!8dk@Fqpk
+-@RNiA0URC#,U8f2SX2RcVh"j%iVjI4McT-dier%pHFF5el1SQSc0`M[1ER(!(1p
+pb!"j!MGARDbG0eQC1XXI$m,f$Jq`MX'kbbaMYBiGD@X[E'ch[rh)RFlR!$[Eh$S
+iaUSfA8[IX&X5bNi9'21j8qm[,Hpr!98F56*eQLa$#TcZGC6M4D,pCTP8GCl(ic[
+iL0hXhN'$2![Ch+b!"lI-fqCEkc('F9HIJQXRV19C6H4b2Bc!ZX6'[3YX2N'HacU
+Th8,h(jp($aqIL(%jV-`i'6'McmHFXcJk'f24Sp3`heHVMAP@)&@&HQ5pJVP5!6H
+BrSj'0V,h#CcTPM"(2irlf2qpMmMP!$kQ(K'83ACFLVk)VIq*@L)PkXLV9L`$1p3
+DeR1eRX(F*k[kSUXqmaL6(FeD[X$Qi,dl3jEqMc61YUdCjc&AUHjV*Z'X5Q40`jm
+m"aa4$G6P1UhZ4"KabTd$!a`+4h!J`c3B[*dr$`*aS1P@R@4iN!!iS%!C1`Jmj0R
+J,YQS)ap%B4h!CHDb6H(D2#k4DbF0Fd*ASSRD$`jj@4+PHX)mbY%A(65B1BS+[$1
+h)65fB0F1pj()+eAkPj+$Pk,I%!k3!0LLpcpC0eNFZb%jB`%#@&lGlH4lf5Y[!Sh
+[F6(jq'AHj*X*('Q%f54f@&QFl#AKk`Vh%XVhR(*`8j!!kQ&('0S'HDDe'L@a$Re
+JV[H8F50'F@"5XYMN@aI@L0mX0!YS&ldmj&efG(l2rZdq2p,PIUVG9@lLYrRVHCT
+pha[bCh9M@8EV)h`Shb)hIaX50P4[p0(-dH[dIlfMp@2E4rH4pI(lb2pH2bj2krE
+EbRjAj[db*-LeNE14i%MjmMlXMmZNdRAk6iZNqCT2qqNj'NcG*rRT-q[prApaAlb
+[qeAf'RX1hX+9Kq)kIXQ6r,*r*BfeMXV(keMq@bdePm@bal,qZbpQkq45pHcZV2Z
+V2k0RP@IpeRl8--Q(6`pT$qe$[BFQ(M3rkfPMDGPDE1dlqdqMD9,6RDD`dfUdhFk
+E#dhm@QiQQp(6G59-PI'PI0PIpjAQbZIDd,AD@[lPVKfY1eTS#1J3qJJq`Pq+er%
+J)k"$k#$rJJYIEYIE3%G!LAf-[[TIeCI,YT&YEI1YZ6E4I!Lm+,qQ,mN@RpeTqed
+rrE6qK-QI"QB-cqDCc*R8YrI@qlYr(Yr9QkDEm8a@rqj[9Z2GA(kpamZirIZ1*FI
+SR5CfTRI'RH$1rIRIc6[lChrcX1fqCr$rAclV5AA@AADhAKAAelVqbkpUlPhIkph
+KAH&)eHNrAemLpdR`*'YVpCDkqc!**eR[jr[[Ll@[QA%hhPelbhpjEqmPqme2l%R
+hIr#[-E'Npj)q,CrXf1[VjFQCT[H5IekrArVf1[Pc1XdI@DEhPPVp*-Vj-b0lbap
+j*pjAqmX2H!(XIH!)NqmNc0*-Q5GIAqmdh[0I)eXMY0C)edMi-Lmf!$,Z[e8MAb0
+A)fXM@kq4m(Ab0*2Y0C+eYVVEAiqYPDh5HrN602lbC-pj&-P6!M[GbIGK'qlQHld
+R[+qC-dRZl#AArVemq6lb-"@[kh5GCBA&Ir`VrGer`2GeqSNGCBHmXIN62H!rpjA
+bj@YVrq!9ZY3%B"[Lk`B$m&!54Gb,Y!3BRVDlA`qlXGI+#k3%PDd0rpX,&0#B"J`
+d`0!6hGI-VjL!PKla-#G#+a6'jpI23%Vrq&E2pjUk(krmf[l6iASr!rjkhi(DINe
+rD)#GTq6XUXrprh[RI&e@erBQ6IZqml(hRBS#Hml(CINl$m(r$[1dr*fRj2HGMmA
+BrXc0IfNZ9-pji335!RD61XlMV1ipjf)#ChjTM`E2!9lcXB!D)%DrY0Em#pcHdr*
+V[KI"q[HImYIkQYq"GhfUrEerJDZKYGlVIJDrY2JrAerD4jrlrDINe[`0Em$iraN
+"ZbUK9K,LApMf(i1`r!J0-3(Q!'Pb[erjTrlk*VX2`GEi2@Ga0qlr`lcX2`I!rjq
+lPGMrXQ+I)lCV!"+[JIm1m4(S#)#I&f2DINq$pIi2ed",ZqZlj!6AI#6"0IfL!Q[
+l6X2`*PcSBDZKqhr@pQTGS'Tf(RpKjk!QL'0YB-d1*MdrpqIqqJ*r`la"UXrfrXr
+[!(BiTqHGEABZ,ABYE(aF@chMJ(D"rPBXIp[&aH[eeG@DH0m6&MqrXqjKdHLVDfX
+[S1laFAVVL#fM`DH0VX@2&,V,$6hN1MV31ImIfrLB[[R3FeV!jAaGRBS13I'l[B)
+19M`19U$NCJFJl[iQ,fA@cUd$X3(G'Jl"&fGN"kX3Hf,qJp@1JplpmKkXLl25[!m
+`HD0k$eX`232F2DI4S2@eBk$`2+bAVAl$rA@6X3Dj`39eDk%&J`34d)2q0Dp##CS
+rKiZMdiD$4!a#Uf"i)DalL'aG#',AIYrm[IGKG1#(%D)Dk#ZXC6X54DlZrqA[Z[H
+iMV#*Gi*),kYYYGhHjIrK)d51f@[N5I'JJd8&NSUG&@MZpKlklV)+h4k1fd9EA9Z
+NkbbLXkh4k)rp%Imk#1-'%Ic',9BJ)q"T3GeJ0G&@9PB#23kYAUp@#V@4(reY(9#
+BVB0#YV1V"@eB0#!!FH#Xd+b"T#9YEeDU)6UeFp%q`KB+U)'V9Ha"!akZJ%*9Jrh
+#!G$r49Y@VCS0CqH%e!LrD2!G4S`1De&8$N)ed0f%F`E9Fp-"4D39ZR"J-mV3JUf
+#YApiD-D9Sf#i&PC@KGrlXCL#&mLh4Y&-'LV'#U!&3"@#P#J2"`8"**J$h&+HDq4
+4!#SEbd930&D+eqK9SJ8XDNi*d*'#H*f*dU1LMY*!8PSRF%B3B66"'"q1+$A)MY)
+k,4'dd@"#0&c"Dl&PC")3VBjP&Br"C@G8$c"Cr[A1#a&H,@`@M&8,8M6'$eRqlXA
+a`AX-ji,jJ+d-"Z!aa`BS4b%rcrH2"CZJ`Lq!-LaBBYEEU2YT9X%D$l#!J4![#!F
+D@SP8@6j(V@'-(-&CA1Kc@5(f156&ri1Nb%(PD$b"`I)10(cr`IahSI*T6`IZ$je
+%V@fl"mSLfSq$Tr3lF(9BlFJJSTV@N!"J[H*L!8"QJqL-G%9@-)Yqb*)Ue6UIC%N
+rX(ql)eRf3l@GZb,d+fBS+Zb(C(#dSiiT%B)B'XCfeI4"$+)Ck)8T@9rqb)9@m@8
+N()5`(kFJ,4#9YD%(#k)-XB-HLm)4JZJV(#)+f+MdD4,K5X)[4SLd`jT&K&1b*G&
+SdLE9r4%"R)L@324%"$YM93QBB$f)C`KDer#&Bcd)I424$X&$D8V5-B3MXJfNkdJ
+i`L#Imi39QdJG!%i3,5U+pcrXI%+JHD)X!SI1$pJqd("r,BBJ)h'Y1$f#`4(5!Ph
+`2RSIU``l)"fE5)#UQrNmL#J3GD@!b-eM%(SK@[(G'10),(U)PV4dQ)4'K"'#Vrh
+J#(J)lf3mGN-aYcSKfM8BJrrN1rf3!-k)9V8qUdJUaqQ&26#kb#fI`I59@cDaSMI
+V(LT1Ul$#!8ajB19)jPBN,!)"2XVJ,-)"P41ccmqV9kV##EBHE&irXI+ITV2@-mH
+`qHe+e$j$e'X`HXDh(H&bpKfaT,!`dJf4a-)M4"%10A4N[NMUek)q%Z31b0VG2@c
+0Nk(0CAGRGefLd8GM*'AF'AARb3J2E)c-'5VQ#3&33QcF)4L*2#(3ND36`J836#"
+"B%!#26hAklT6C$`GX%,d2G)$d($'rSZ3!%89eqZrd1('E!iB$(`2+b+lHKi8Xp%
+B(81@0(F(c4r@0,GM"hBlE1L0UB1fdMQbY1$ZbV%1Y,*VR"fi2&%$"C&SU-,NdK@
+-[VUl81L,EGM#fV)0)$[5k3&EFT!!D3DHrAMiY&+ECeIr5%!rT6+%Hl#P"f!TlUd
+kaiM#%9Y5XJF)PCJ$K%eQP-c*KVkBSPB46NJk)C92Qe#f)'p%!i2'$ZX"jS1$ab6
+j9-8"4U$E865!M1%!jAidX'PG$r40D+k`lY)%cM(X2UalMjLY@D-T`JQ3!(RQ6$!
+Bi83,ZCCZDIf0f!j26DGV`KJN``h9J"lN-`Kh'0[f3U!L)3'ZQV'jmM!UdB-)&c1
+2H`rM0(l5$-qkb@I1pb!G-hN))D4hRU-)3-aq%*BY)4Y8S#[9F)5YN!""(4`D3RD
+G%)"ErLr##V('$SJf5DX)1YM`9YS%%8r0)SY'D@LDhraH-'CA0BcBJ4@9NS9"T"p
+9PlQZ##V5BfYV3JQ-Kd&X@G@XVBpm4FaJ0k(9*10!j`S"+hiE#'UeG-d@K$p9%69
+4%`SLG%`LHUbC[3H%CA0)XjfM51d1U`Mi2KX[$1%Jb*r3k[qjYVJ8VE$4@S0LGI5
+@+Xb+(ESN6*kd8I4rmBi)%-PS[$"9Y+k+$@Y[XQblTY%Y9C0Z"Xk*5A@aSjQE"+D
+Jc4UfYeeJ`MTGp")$c"Ilk4T1bPk4d4&CSjU)C5@@-[49PIXHalAID)`VD+XaCQM
+l,&d9B#H0BeRBaV48M1bdRFIZkl&aG&'1UM")YDh&aF9!r4!2I!1+4%[C1#M59Nh
+&,AQQ&&M&dD4SUfl!AmPd&0%JT@Z"3F0@b9-RSQ2k(+*hGE)q0LP-c40$5MCVDfd
+3HB'66ZX%*52)'PESQ"V41"U[35F$3d4EeVj$3,A3CfS'D`$+c1A3CB4J'5%E!c@
+NbidPi'3+9mLXd6Fk%$%LYM1"H`N'F3Rq1"Eif,B9XE6eNDA@J1KdYE'lX#1MdpE
+'PN+d%Uad%Y'`*D1'&"+(4h1MQD+bdF-Yk"YTE4[hFAZX9NFPE*JV!"`J$CPXfX&
+C,,,)!f!E6J$G!R6!$JML1@eC"fX%(`B#YE@AN!!M0eF!V`"Y'!DJ`$GR"(B"Y&B
++N!$eRB,UAaQ!bYl&!c4Y"RA)'9Nb$4GLcGVP39h@-b&f!a@0Td%&dc)VYS),YQe
+Pm&Q1FXpfL$c1FR""em"e@d$0LTI&,rVeDH9Ge%0VAB0VNb&AV%$HcB#LR6Uh3*0
+M$V@!N!#[pf`%R98D#4Y4`-&4$hcHN3k")13%bB+h9`9ZaJV2f))0P""m5##qJJ!
+Ced&B$E53!"NA`IV+jHZP633*8E[[%#9@P'UJ'$QXi*0bXPL['mf-'NZ%"N$***3
+QjLfe`TNQ$568"T!!XRY!Q`'8!*XB,'FJ0AHrJVIK30@HXQV-J5,9,G@(2@V)1i[
+p(eN%EhL826!'ri9PCH`9PbS[Y%$-emU8'LrCV0%-aR`D,8`3HK"@lGM@r``9RF3
+D,H9JiU!bprhB)0SKK@Gl"SZlJdAlF'Lr""!%3CDib[9V*6dAH33Iqi)2H9Lem2q
+%&B)ElXXSK(9JFeCXi)2mUb0I`9[E`3G`MeVZiJV,H#XqDbKX,XS`r%4(rLpRUkI
+X0jJI3m5$Ik,MeR0VZPTER3rrr$rhUr#rerRd0$2p2&ifKLiT@$pVMFcQD'KeHCS
+BZH`$k'Ke1VLqeSG-"2'"4SCk!RVk(8kR-kRPS4k(-aG$QD(-kRX!B+3r'd1T9if
+KlI-3-q6dG$eY$SjqKjZKe!KZpd1TLp5VSIiG8"ZKhZKe3V-ASqjdHCSHjSH#&*k
+R4UeH0k[8k1KeIDkQKl))reEiBXL(,"[p2l[''1G(h0$pVSJDm2pRa10SIDqhj1K
+kRPk',dIdk(4k['d1Ve"MfKe1B&rS$!3&qcj['iJaS'1*c0#Ve2-d2%Uk(%jR9kR
+LD!dd)j0&d1Ca[@44iP8"Rk"Z'IqRLM-p$2k2-6@`6D"mfJZY#VdFAd8BHHJBd+m
+c3r!"+VaG$p1Ka[crTk[Nk!33GBASf-%!)8"%Ci4G8,EUHTSFB5@VSGAaFAlI8kQ
+H%!-IkQKk[%pA%p3"+,$f4[M`J1-("aK'Y!*iDb"%lhB#!Km8(2Xp@U"PK8p8$Z+
+)hi2qA4aHTmSB9SB[i1TqRQF6Sp%@c&%%%N'4*2H-!AQ!%ihk1S%Ia'40G&4#K-)
+Lmp)"Lp3,[2k[4i[Hp(a0$eZ-%5%*eHVkfKq!$`,"+J%HTkS1K!4fr'"m-(BcBCD
+aibLQkZH0NUXFi-Mp[Q)RH,S9I8!hSG'VeH0i)Pie2Umc[85S5b6V2kU0V&d1VqF
+LEUT"JP3G-E&SITkSD&A3k2'p948STI&6@!CH+LrUKkIS!U4YHi*q'&eFr3(5!c'
+aJRkZKh)LA%#TUmcm#BeiU,23d29)kp$eqS2%#,pIQ"2B[4kJ-"K!"-rST9IdK$F
+6SNQQ,qT1%$9,c9Ae4Hb"b96Ue5)X*dB6i+&!-JS[A'!jqKe2&69USbh%6PF3&i6
+h8k['aI0cr"6'rdG(2r6kJEcCHNqd!IkI9d1U#G,(LmEmA9(NS9qU1#Hj1jrpHKa
+[dpASqf0!(PN[(Y!dm*+*Rqj[U[8r`B["*mkNEpA`4DZCRJTpcUrlU,P8XFm+Ip)
+#"kj#c3a4"r98JI-pAe0$I"ErU(2$b4!-AQHMS$kmrQITUqAaZ-a"rZ-KhSD'qq@
+PA&0aD[9kI'd2FBQ[4kV#Cia6Sk+-Y"3D99r"aZSSf[EBc4*%8NJ2jr-kPAL1%aZ
+b2*6lqEplb8N2%"IlRjY$3rf8IAY$94T2UK'CkLq'NqL#c2pcp29m%T*"-G2&r3`
+Q2Dp3NepK59plk28*Hk[-pRMFc`8kE2pA`%ERkHB-*8U(HeI9qEkfKaKj""l2a5'
+T0rL-DTSG6MHbL`$*r!&U0N$i+KqKk+8lM%f',c29ihU#dk(8pG59G%N"if,qM3l
+[QHia1ICqEqMLTiLMfjR-cm8UCqcc109+qhYHELp&9q&(cqJ0Rl'Kd@-ZjR-(a"5
+qj9)cDUHae%@a-Ma[ChfKr5S,qYi2JHVa["6VN3'Ia&"$Sq[SE[UpAm(XM&[f9%2
+c0B9)2D#hihmI8"S4elNBrLq69+lI4*1+[Y!rBb[e3K3'Hjkr4pAbAd5[4hf*a28
+mRphUGi(4k1KfM+)%hRUD#VRp(3a2D8YIUD(HY-$QB[LD'I9jLL!98h3d2-r'qL9
+m3Nfr2kRUjrUHZ`Nrqk*2ID('p`P3"Mc#[BL"p6UX*)M*aH+'HRJ)8%5A8h[9ihL
+)S!)#3mc&UqS+ApVm&A3qiNPr8Uk[9pNb22%*6b*2&UT4m6TN5(-rD)JH-3"63J$
+ITkJ@AVCiUV'B+S`i5(bHlkRfe6rpI3qeSHcdHTdbHC8[PFbd20ld9)BeSH#RcL1
+!fr4j2f"e[Ujij*0X94-CS@UcVJ%S(NTP[ZH5C(R'mNP*pJLA6&D[64)H'#[&p98
+3-UhJr#Fm$Sk(LBT+i$J1GYUdXh%KLRTkC5CkR-p3bCIq)e*-lpE['A"F9PKCK#J
+@+Ki3!4H,l1KjIZ%84@J64PN[i[lUV3Cr'UU3!#p63r5$m)NLF958@C*S$hrG5+I
+dP3m%(UmA3jRZD(k#5ZVa[d&Ahm#+IfLUmS&P,h[D[q5,FZcG8bQ#haRe5``XLiB
+AaIkHLSeZVa5d(d906aXr%d2cURQ*2[J)IJ8*I`D('lfVpiGr[ZU5Hq+aJBb"%Cj
+K46c0$e29ih'jP9U2q8@44JK)dacT,dTr"JA4UrJk(Qk',kR'mfUbUPSGAm#+62-
+TAeG$ID(HiLQ[94ISeI4cqS"6cG$h'8m[mKU4)YlA'h"N!qTe20a"TEJr'i"DiT+
+%TaaX(Z%N(Kjr9*0HUQEjr`M"li)CV'j&-"++4*!!caN3K)9e10iHKj)I[9rTpPQ
+5Z!6`4TV-P`RX$*@6Z1dBhIm(QD'JUG,'6rM+4A%'GJ39*2aHS%Zb`U*'!RrpLi[
+9a4L(HHbLiiU`VY$a&@Xba5J%j28rYm6l',Rr9m(&d2p[dIlP2,fHMdHMhZKdGm$
+XcRp$Lr#,T"5Brhm,pl&qae-qVk[m1`a6j#A[Yl8,IrFGD3k'-rh-V#iRVmEmjNT
+k(&r4SGi&AkCJ('amcb98lCPI'(rQB['qVc1lmRcHRFr#k1KpY6,NQC1'$lUG6FM
+)',PrAkRH&H(2pV`IX$KqMk2DHThUJ(aKhc%+-PUVkD,(Q,%0LpAQHMh[Jp63lPJ
+lB@'+C0#RFlcbI-pIQH,hr'i[kI$pVcDTJR9S[r"Z@Rc2@rm00,UjrHlX`3i[8a5
+5),$MASKI'1N5BM&'BVdQK9mNPDr5Q$Hi"(q[m"1Tj,)Kq0j[HUPS)@0PkI9pIUC
+qKqceHpmVMH'81G3TApA2lYQMjdFAjTGjFNm@9paU[Vp(h+[kG!`Dp%Y&M%8epQ$
+-%KCmd+TS%G3E&LjrSN5EKBH5dX"#MbNXNPihKplkIkYpe1m8BT!!2kLdKb6(ek[
+rd-CDPK&MLm62UmEcI0-Ac-kTQTX@0"jhNQUdfr2l'K[@6bP0)T9H#-Z@QZM#kRT
+NRE)rIX%C5dHH-CKAkG$Lk`(('00-1"DSU[l*MC!!pC6ZiR9pFTLmBM)9LVl!r8J
+YddjA3qmc4UUX5%Tf1%rSH5BVbZPd4Z(QmEf[4r!2K@Jq`S&!N!#iFCjkV0%h&pc
+3pS1&-'(%,-eiR&4UITd2`$#Q(MeHUBAXA3rh4&i[-k1q4SH,SG6LGArfbT'V55B
+mD9jS1V83@X'aCZ*e9N@KKCc5*@CBaXBLV5Rr38kK@Xrh1U@AG$pA9kRUNiIVP2c
+2-L0M3P#-3iRSCR%IS"mUVAV+PFDBi3RYX-PAmY!f0f'-&fPT-YR2k)J)S[QmcMC
+rV"NpAm(NJKk2UD(rMQH,q$MG(UHDM%@X$e1VkShm'#R3$XjQKkT&pa9T)%I)J(k
+Q&ELp3XfLD&0"C$"JV52p(Up62le@1qBc2c-klQGb9f[%pR3pFD$c$4*-hGP3l&a
+I@#J@Xf%D64MU`MNdhe1Cc-Am(Z$AmA3`f)"aXmD*9#0jLa$-ei[dH+TEeRIH5C!
+!Z9eX8Q6iUcm[&,BQ,c2*d0pm0P*Bb`PYM&4"9h3K&K--P`VpXf8XAaDZIl+S*-I
+V&r'VXD9aZ0e6+N@F&eH-D%+G-D,EG2*R309`2lC(YRp63mhl!9J6Ik&ZiX+a2L6
+l9VBBK+(LM1eBX1K864q5E0+KB%FB8ZT9UM@r0kTIicr!@INc*q49p@Ve&G8%A0%
+%U9qa9cmAiIYF3+I3q@2F*TN9I4mR&kJLc,4Rk#jbDmTT$IJ)JHTkh6d26CUr+T4
+[M&Yc299QceN$eU-*V,DC++m"Dk,3khUHD!rcI4k[kDZ,kI'03$2m(3r!VLj'Kd3
+L10a#,C!!acmAeJCNRIQV)d)8V0fFMK82!CXQB8RIUIEA4Q+(@4bTV$,kUdc0$Sm
+6UHjRp8L$"PiU8NMFUY+PK(-00@C@FmkVRqVe1BCKL5#U'8YP%U9QV(jKJd@hD&j
+db9&c(8&5*Ge!S`Kr%UX2PQX13,6#'CVbiEdbG9,5(#a6-U*q,m-+RSqec!fX6Tr
+R40HSc$JhGJ@prSDaM#P!9QiH4Lk(GV!#&#US[k&M@CJ(!LUia%88hL@hU%h!NLD
+Nbm#U*@jULc$&9`3Z+Z$1J@hGejM059EML)Ra5U1fP82#6UP@bcr!CDr*L-rp(Qm
+c3meAJN%LNaS&,&8'YcL`Rq0SHL%#3Pa8Xj@rBBqJi8V8j0a"K5U)MI($k`,rlVB
+HmAp2UmE&h`dPL@ITA3F+ZB*ddiU9T$IE#$C[(maE8E'cF8Ldic))XkchUU`DhKp
+CBZES5J,r8b)VlHKlRfrdIF,GDEUVJ*Eb4j!!*#4&Qb2Z@[j0,`A-BBcRf94VY8U
+$JSic!d&5LBA8G"EqSfCIX!XiJ0qRh2k2%,pa6$C0qZQZbk#61XC0rp,#)#9b&,&
+m2mm8$IL*SG9EB)-I"EL2,I[D(B-%+r!4+IRmRec3C9R&R666"PUSV1)4jFApCR9
+V$&AAhB%e,%G(-f19%Q+`8hbNUhU$IlQf(pM3kDYUIR0qe,pl+L3B,6G`5Ajrrj@
+[%b`*4D9AHV#ea@T!Xm2%1F%h+ZjQKkjX`+[Ma@GGV&k2-pC2lpP&JTbPN!!KAbC
+2&e1JaSc)UZSGQpQBeaKZ"EG*0%5bLF4ljlGCXClkRifDPDcGNlHVSGk`jPH`9-(
+aG$p2X00aM%@NiQ+iT@PjLVcrS$mA$HE(U4j#h&m9Pd0-[d2*a96I3i)9maM2ZpB
+ciL8CXl,BQm!G`VQrq!B"U)XH,jT5DBXAUTS+b'5"r%,9@Ic1d@P8Z2N*Am#dJ5V
+b48rdQ9i,B4"M$rE0`&E'6*9`N!"Mee2GdIbXQ1ia+"j1ISIr9UY$De1"c#Y-YGV
+e962@J'cB'#Y+)-9DU6#Y-e%3,UlYGNiL$kZKm22*U9QRp-TYi[QYl3a918c(J'b
+mbZIq$UiZ)cXSJh*MN[#Y`%`SarlbdNqTdHVdIiP)fQm+S@b*FeJ'&CqJjefKkhk
+P1QZE84G[1E4@V6c@dSC(Ca3UZVl24p6U,S6Ub%N)+Y5ZU)$!fme(Q9D1ClmU4Hb
+bY+UPb*Idb**GIRL'h"SH*qVU'c@-UkSfKcb&0jGM(Ma[mKQAHR$#aV5BCe5EeAd
+PI!)P@G$6SN@UUQp(q+UC'aZlXA40q-eS42h#$RkI0mP4dQ*pNZJ0[KXlIl@XJZi
+QILi[%Up&EqI9kTN,FA2CA'6#9@Ncfml![4SJI0p[[IAk2'qm+SGTj9rf0Fd2"aI
+k5Vel2q4PHp(ff5H-SjkS2%m"#r%mP4*$4I&cf1ZcfUlc-A[9E[ihL1FqFi[@60p
+3T2G(`qMr(9kQ,Lq#H1N[Z)`29jRXNB2l[kI0+BrpBf8E#[)*e5EpEF[U1BVmrTN
+Y3jRp!jT69PJ*M&ZLE(+ka(&A#D&ZYXTB5&VD9HThKA[kRVG8hT&D*m%P6kUSIkR
+4h`6I&1bU5ijk'Ci!6XcD(&*%aUT$AbG"EMB&[0a1S(k&FN1#Z5SqZ&Fb`L`GMqP
+k-D[QQA$e20kRLH#UI,PU"3A&GCQ"XkUD99Ba#0iIbS0PkY-kkKXUiSf0Fk`b"Gm
+3KGPVq"Dbc#e6+1UELkVjk'qk2Kp6Sq,j2Y&&Bq%R,UeI@pGLCqVe10hJ3TXJG63
+pSc`[NTm9AUe5pek2k@%ESGkYC8lD'ILmEUF6[9jc!)m`UTXLFEDY"Pdrm2-pRLI
+Jr`kJeALqUZ0"Xl`)mqVkpA[qLT!!$2d1r+4Lm[5fI@akH)XIK0TqSNk6AI8kH)H
+@PGcr&k2J&09Elblb#Y@NpR9r"drdqCk2CeIAihbf&6L,eq,B0$S")H3`G6mPG',
+p4UcmBkIh-d2BASMG*-Q+Hbb0$[IYIJmRe1U9'q0hr4aI*qScNKBc9Z(If@3'0cr
+U9IYq,iRmHq&l-V%p[A6rh`6&+!mK3hM*ihqrkI6BdiIfUXBjM%r!2C6`mAMFBqc
+!"26aIY9HVm2e1BH&(lK'*l*8A8el+&@GVJ&ae0HMdrMqce*[8,G#f%mrUmApkmj
+rVYqfC&D@H-r8laRTLUXm-CPV"YUhZchkR9X4LUcMj)6(B,ZkIUp6cI!mhaGpl#3
+eTLTL!l-+ldrFqph[FN4Ak2amEe6@Lj9aiIp*GfpSf-1Te6c,mBZ'&2mXpe6YNp(
+c'GdT5)-Qb0C"4(9G$I%H61UDaTLk&ad5HViMDLR'CTJ-lkV1N!#k"iq8mG9m[@@
+jVe#jmUlUTcp9H+0RfTGA3p62@1PRLN2CfEXUYP&,9M49labbjdqUG@B2aDpkR01
+MN!$NIC!!N[AifIRJ(kVHe8FKG8CUY0mKkcNFcb%M-[G%Z3DmRIB[p2k$b0K#UX&
+kRNqVlRVmcpANplRmc2pBP(-cX[P$hZU[Y6C8VGK"RhT-0bUGSrL&La5lUh4kR8i
+UX`QJAi[-jR&m3pa"fZMQUk[Lmc2iakYIYVLmp`ep0$m[pALqadr$d29qU)99d28
+pVcrUeF6m('ihNG4GiKIDZ8l$,h-dKRCrDM4A"r2qH$qCIbTpVIaMq-kr*Ar"(p,
+`9[m`#Mrh4r[GHIqEei%pqIc9'VIf!6J`JYYq#MArDJZV1XVILIDqer6Vpr"Sp0q
+ae[C3C)4[dYE"DpaDpr6rCXi-#"0XqepViRa"JN'P#rqelJ!rkG$lANJ()a2FpA,
+dhm-&CfRm2`,MfYIpVl9[[IiIUpciRLH&llpRYlmrIRcj(P`9Xq&&hl-Rbi)e'(@
+KHf@9jpp"XUk(BZJa(SpC$eb"[5mq#42`1XJVj-q#$S4ZAfXrC3FH0Nl+4I9dDMU
+V+KX`"`4kGa'jIRq9B8S)rPe[%NF@MRm[cj2Q5-Q6'T5Bp1cNheeA9dZ45qGIHC,
+bI-LbI,VFVRDhIqcj81cVIkS0h2c)p(cq*BHE([Xk#6)jFHqmD'$Mkf#RZ+cUbGK
+'`Bf$@cpMBif"J!`i0Pr9"aCpY*X`BHCAlHYU3C-Q$X1XNe,1b2rp4AhcZAXSpr)
+[iephdrXGM`,lMp56Cq9"fYICfIjUh+l((M8j0I"l-'aYV+SIe,5VDI"dRjUrFbC
+Xd!FHPrdSl$ElHbXVkce8'kVDGC*RaX1MZEI5Fh*dZ9(KXURA33GK"XjYpf2-VIV
+8TdkXjh0rk8Yc(q4H6qPd+c!fN!"N4X'[Xmb$EmU43bZak@6BHA!`DFZ02MB2(e8
+Eke+jdr5!(rE5b*%fpRrEdYI1MdT-rEkLYTf9pUT'XRmQkf@9f-'T3hTkh99m'iJ
+h-k0bpcbUqhl(+UIqIqmRK5D2)jr2VIqqPVDI5b)1K)lM*f9Rd+hPmRRf9T'heE5
+MF@qV,2p9RUUh*Ri%HK(mb2KdHa"dJ)$UGfL(8DRP!kNr(bGcG!kk(*dX2,h)@RD
+KDD@R@m[XG&)Jal2Gj12MeY2l[rG!545j9CcrZ6pRTBq$P5+0PIFl[j([4PfPLV,
+2EeY+2aEkZKdZ$@m[CeYp"`E14NjQiM8pR'`GP(Sricj[p&pXi-Lk3fcZ&*l,Pp,
+DD@$(M8FR)k%(@!e(J4S12bEL$(bFb0JlQ2JlQ0IIi@0TNlQ$(B0)UA*fZPMC0Eb
+d01$d)1ZB00c'Jhr)Q3FRD@9pZB3Dbk2,jHDKVQA%'jJj0CZE,YXRTE5$95*qbVj
+%kqMApRlGRY*%q$Iml8D+6ff6d%-XL()XDh*e%1cMdC0r!,aBbTr1dl#Xj)9NkqM
+`H8$@qdNLXl'Y[Z6Cp#43LSim11dDb#6+qVI,dFHYjI5MdY9'bH6(RpM@G#$!X+%
+HPbB-$XC&pakcXB1ZXVrUD8(-m(0EbpT'U5U3!!MQf9ped'SJH$MN`3HAClU6"`D
+fM`G,2bC9+0C3j'PNJic!FC)1*D((5Rp#--UB11JdF9pKIcpeC3F'04i0EiPENbU
+-(1LSp,-Kc*0#E2e%DPXiGe*RkV5eYpdJ[hk(8%LqfmLqf-E*cGcSS-kE2kA*"eI
+cCqdM8Ye$ZC-rD3GGTB08$HYjH4'bGeC5,lC9R(V,5PPpG)S`$1q$(XpeAbjrA)H
+)FG#(NJRMdiU-fIeZ6N3iqd!($ZG8!1YeYeYDf64j8-(X5+%ZM$cG6(jHYpL(8aq
+(Hd-HiKPi0a&3j1SY+R*R5UAjSE6bl2bj0,@qhBB0Ej9K4r9CC2pdMPlVTBpTq@I
+cYR$bVQ4JcIMdV#qY2m-'drQ#6VSVq'A$$8PbXRFfP1deG,TH@%6$jdQrjfc'C`G
+C'[['dZ$hpCrkdY+kr0@qA)mXD(UE5qe[P`G1`PF5b`C91ci9M"aq$)[[RAeRZBH
+I$@e-H6QkhqU46Pe*er0qEFaUJf'06Z,+rQhpRd)4Xm)eH&MDYh'm[Nb2-dY5EK3
+mV'LqTPaI8b[R52+NqA$mkIjYKQfpr-Ke2,pL(cSG6#"1K1b[2[p68LiN2qH,8jA
+DhqArGD6UR2hFV0r9Fr)VFZ(je1MZmVGj@lTCARcqebIRCT@lmf2PGVP%jrRqA*d
+80G+dD!NkXZUHr[qPbq,2jYcaI0KpRbH,3lA+KqGSjI&qGjN1IaFfGjN[bSr&XX(
+9Ie@&j$lQTSqj$crlKJ'lT@RVe*H4BCZTKl'GJ`aAqAVSZibI1PjXVj[mGpdYhJl
+@jTfpK6kHri-E"LdGESj[&TfrQ3E#2ICpESSHecI2K`)I2mUbiZ6Zi-q(43qcPp+
+rcmZkRr1[l2"`*h&UAIDj@Y`H2CD16jQPVV6Ld*A&bDFUMGhGRjpr,rUJl@MZlhL
+3!)3X820d[,UDI45C0p`DhLj0RMfRQ5[,+!#VM$[kf[lAbiFkG$a)I-qGJa3cEk4
+8ZNPZ8J,ciGR$`K-X'+MaErjf6[k%h4ap*$BfQLqGPfI&UGVPCq$cC0C&LAhrl*T
+c1$-i-ZKYl,@rjdG[$rQ425UH`Y+NZM6KPGY3ZHaY2m+%V"b)Ire1irkB2mf`kb9
+h@Rh(bZ`YYrZr,KpRdK2rRCARm[YI,d[p8M+k(6dY[CGlICR2NBG(GF)8+'kSA92
+!3%SFfddN@MZE'0aDA0Xmfjmh2mUAaDbESiZ,aDL"mZPml+r9DH,$XmE6l653!2e
+iG[0[V60QrmaKHiP8riBBH6eRr1(Nl5XKh1kiQPX[fTIiF(GFL96`L1Z(IhfY[r2
+rUY1+C''hVH,2ZU%A&R8-#6r0NqcjNR@6p,PfG#Qk6VRfQNPeRXqCDIYm@IJB2(M
+D25j@"JpVa)IFXp4cTBR9aTH*$l2,b[RC2RrBmb'()KpQrjYrXqEU,6*pL6*NAh#
+Ykb6Il[0,KI*JhA#Khq*3Y+rGq9DId3rib[hCAeUNZqV0L*Vd,5K1XVr6`lU'(Fb
+%R9$jh,iq$1d8L[F6US(YUYV1JjX2)k%1Sdm2@FJ6Q9Jl+XjF-b[l''C$Yq$,[2M
+l+98QrYhpY$$qjf@$f-1hl#9JdiLDMjRlGTmca-ErP3rGf("l(F3j(+Kc[r-p5Ij
+dM$RkVD@AHN`eRY*epUTXq+MREUblM*Nm@rPZi#h0CVDI([l'4KF[T@j!A2)#l[+
+Kmm83J,aH,Qh2Q46)r&X+RdlqA-i2AIf`fPl$qlKAqbKV0Pb,5J-9SEVV+N-lZ2Q
+hr3h9Cb)X,Hk@[Ki-dCpf1iNak%f#kBSq6(RimIke'kS6GCHi1"*l3NrLSdL!(Bc
+Z,CX8D&XRq`kIjSeG1JhprDHPjGPA5Z,3edZqqAdjXqll@9'Th0RUE,Y0,qejm-2
+1h&cj8kXPhPpf-[PrUXLZK$Q3!0RcSZ,D8GP0-`c83mHA6PD6GqA+qEJpKXH$,rE
+KY*qUV2q9#jXKR25k%2lU8V)+[e#diYrjr,E!@dVdTGeaDQlbXL(Qm[M`cVq96Tf
+QAb,EjZ$iQjP8pR$f0RD9)GR-!,bG[0q2f@$Y)BU(@3i-Vj[BbU%802F3bqiS5qf
+LlRXIh,cirlI@IbB8VkZhKjhBfP6(Mb+fTcHFABZAQmQ2Jl1K)`FL26h8DTY+h0e
+9CCf&,m8*3pfYpa)hP`p@([TA%Kr0$jm1T[lHT&bqGGG@(TaCIcSrPfp,h*AP3kR
+HF5`TmIjd@9ZlraTNLYmbfed-hZ)SC8AEHqaj@$Cb[NAp5K0q2Uk'kkjLV81KZUk
+E$NBeCD%j8V"j'cqE2iqhKmqKGGVIHcCC8HIQ5HiTFf9[F1R,bXlTIR'*9mEbV#K
+f0Ta,I0e0q-*e-r9@I%MjAjiGK8qA@m5(R5XVmeTjFI"jpK6ZD(Z@@E0`E5Ii0rd
++h0lAZ-Z96Y+R(e0C$UT[%fF1EeP[r9$rG*q22fF[5j-("dK6fXmkEjIB4m(QkQq
+cBCZA&+cCA%PCYc8LlM"h'`j%2bSG4TUhPmMEL[baC-kdq#q&NhFL0j80e6Y2+Ka
+V65FIp9PIp$Mm[jeM1[jG$md0hbG0lHb!(1hP2f1aKf9R6f8-XU1$F*Ac+HdKcGc
+DAqQKfABa3NT0TJlI'Q`hH23rNq2Ui[NlckdhApPJ`c*@$X)f6hmDK`DcXC%0EJl
+H4IfYRQ5k@4+bGeDF[D3eZEF`G$5d,I5heedkf`S5kNZbS6UGS,(&5KkF2P3jdZT
+mZ0Qh*6-bXZh[ZR&Npr,jHeKi9a(bHep,XXhR3iP$'jd12ehPlH96`F#9PlMXEHK
+$XYc,qRF3`p$pckJXZLQhiXXZrj'0b+IB`rfGCXP$h0PFZkrZNC-LIQ9Nb65UDEa
+SGVB6VlP4kCSSCdURFfRP@PK2bYTCp10bq9$XV5`[lR"PF[bl53@)G6Ih-2X5F'h
+VT(6Z4A[MjF["PB2"KZXhR5UFhLi1SKplaDQ$`U`M6hrZ'ApX)G4$C`c[hH`Md)a
+C)QNB2d,3M+U6U%dTaB-2IFlCf`Vqj&D#jdX2ACXZR1DVmT+rYBq6UBhQeeK(U@Q
+NmDbR`ir(bIP`kUjNhrR3kU,h[`qiqPm2Z+H*lfS!1A3%J,QXZJiX&T6f8UrkcR5
+[T9)H4$$+SE)!qEMi2mN[9aG[f10rEefbKU6*G$V"B)prYp*$N`mIB5U20cSY,$Y
+,+re8QKCj%25h823JiqTX'V"(U5mRRPZQlY*&,X#GR5`l+ANpM$dj-0e$P3m+0Jp
+r@diX'2Nl[BE5EIkERa6SBZblZAJl2X*9p+PpPJq9#6lEV[Xf'GmIClQGmHRDDbf
+j-@&QeN82"a[`PIMrVeb9fG6PmZkmD44NcqI@@IR9Y1e&GMCHC*SjN!#PGU&kLkm
+Z`Mdp,IE@6JbVqjdYrFhmVPkkdV*95ATBHI)[qrJqM$'5Y"PhqhKZY40-`Vcr,P8
+lEYIr1$ZUcC4k$&D`)F'(93aI5SipRfTU6C!!0BmD(,+Ve5E@&4+E$XjharTF[99
+h*GUhXFf,"YM3r0$k(YFZEjTSC@"%V2bZrKe[eUA(e%1jip,D`l5CdZG0`C@EMpC
+RE-!GYd03!1(Jh*!!%R#JJ&UE1C+qR6h8V"fFZ(Bjd[kBVq$#18`CT8CfrYh'Zh2
+biZllEqDTq(,fGT6Qdq$$jFHPZUb@G#MP`mQ2$Xi$"6UY,"d)66)k!cR-dX'eKZX
+VDf%E0Y1A`M8C[lQ0QbXRP4U%@$UUb93lqY`EQqF@0!fEJak@4d1rQhmliGrhj5T
+qCIlQ9p1KXBG9,cGcYlQrQ5[UB14F@QEFJ)cXL(BrrVfrc2a6Db',j&6NfP60i'A
+Xi1#(EhpEbr'NAeeQ@8r"Xq9'`Chb-fANppN@4Tap,933pr$D%X[6KZXLcbZrXU%
+[+k&K"hmHT+jBQRd+bG2aSU-R0fXDTfX821Z)SGP$VGe0[mHA1rEbiX'Ar*a)U1E
+Xj&$ql5dV'4I9R@3fP5fPF6B5,q2PF'%UNqF8Fi-ZRCMMIY6HjPF5EmMjK6-kcSE
+NM5fB"'V600GhN`lMA3QVP@aZAXBEVK3l$5F+$C`l2MdHrKfQSk82+KfNACGl+qR
+hXVk@XlEKkcYUNf'rL[q60[qG1QhjUfm1TU0R,TlQdUGp+lf(GE5'E3K`C`8H2$q
+UAhYrrIQlR[iVHdrQTrKP&CRK6G,IEU45KfCYR3ipCD9,6*jdXMDKZZNCm(6(DFm
+9Z$K1PUbH&$Mk@rXpV$Xj0(!h9T5Kf-[*kb(TePT@@pC&5B$Fbci8Riq@'cJp$Tb
+kI*Kh2I5m(DEL+rY-h[jH&3kGT8e'jL`Fh93jfdh0c&JbZpkcNcEfRb4DVbRar5U
+F#95NAmk45fXM*hpecp,2kb(QmSUq4#dFMG@8mBU,4id-S98@M-DY%QIPF[[b9MP
+dBI1&RKhmM0lm@D@4(Lbl@4Jm'EIppd!bCH$jp$)Ke&T5i-A,r0"Nm'$RGC!!bUI
+@@RP&L10PFhF`bDFkK`5cAAh%1RQd063c-MjFDTDDcip1c+3YRR5iBX(V1JPNk%2
+IGmaC)p,!&Mf)XH4$Y1&@LbEV8G)L,P9-IBjfc!(eR3e!!iE5rKR%68i!ZcY2j+H
+Sh8ZRMPl[[P+@5L'HR$Xm',XiHT,lf(D5[U8qqKra`H"QkLA3PR8$5al52TDk()V
+#1+PbC9#ANjBB9TC8,H6Jh*Cik8R"Y,#0bmVD`pM)TaAh6+CXUMbS1rY+-1iPj1`
+5ak45Q4lmYX6D!5!VPY1lb%@QAmf(Fffdh"GE&M`lrTbUHS`X()e5P0rP8T[IIlG
+jIjR+'5CSXZ$[rlkBaJP1Nd5a2'XTrP4VmY$b,q*,,cK8"LeTbkb)c(BGVTEqdX[
+HmYLcF[P@&I(+#pV@cmZG4Kjm%LT&5fNUAQh%V0Kl%@HKMcSGMd$$6&IfSJ02XC0
+rieP4V4Cq6X6S&l'(fq$*[qAVBe1cj822LMdiE5RE3dq6DHA0[G@5Pl(SEU%VS@F
+2I3j&TV,mk0XkrKKXpT(TA@jJ&Nh&G`S-b(9H0@cqrKiABjeSaCFMBjfd!(eR3e3
+!dXX-frcCd-hiq$U0cDIbd`hY4$,Z58IV)GrrRIcBHX*4qT%peM+-R&Me%(0kb(F
+`CXZMd$2$TCd[*k%VPjPT)`EH25kC9lE+,+Sm+(Mp1(*fX1hNdBe6C9NZ([ieqUY
+Z#T4HqPj1aKc,PLaCR@A0r,`@5LI5l,qDrjj9ZTlVSA0rZE6l14&[(FSXZjf23Qh
+Y$NP5I"Pi@$[rm(&LXTqeMmZ0TD2P4j0pbT-K,"rY+5K5D&T"$q*AFZAciEVSE@`
+5XGr)SjGT5lr5P2E5`qf5N4ip1G4fGTQl5dUE85`DA&3F@'0Ij"IMbH4,TCN'SNA
+e((f*SqlL(mr5j%bYjI,h816bSH90&LPB2@3m5DCB(2jj+6+l`P*1#3ENmP)KC+2
+)ReTdQ"BZKBq0'[ZrKb,B&'C$ZS[Q`l6[TAmRHfRprHfJkR("IQDS'fCN@Rq1$UY
+e&Jp#dcG8%Imhk9r&CDhN@Pr&3ZD'0$ZTAeX(ECYaKd2qP686Bf$NmI)N8F'djGP
+IbVqA5V)Tr2,A&(Ta8ZI,bH9+jI#Y)q6jF(5fYE(bEV[iGK*`E2+TGr$Z,+I@jZ`
+%8aTH6Z&+$@i0[T)H&)K,r8krk@4@3j%hhY$T-@$95rTD[ka@`fN@$ZZGFNB(U!F
+cGT!!brUPZU([YMd*hH8"rN0#AiQC&(`4Ld((dYpY)r,Mk@MU9HfJllk%2#VHi+U
+UUNeeEQcDKNDN0bP-A+1&TEq)1D(X*&+2Ni(3YbBbG2M4U&c2fF02X,5ThqR*3Zr
+XVr(K,'Q$F`GmUYQSXSGK)XDfP`BHXNGPI`jNZ5Fic59Z6hm0,R`qFCP-1jY!lZ4
+DCFl@GaNlSbPmJ9X@,93jJ3qCC$Cb8(G5+1eNAba+i'&5dXM*h%LR00-kQ&(6b1q
+PIb`NS1U!'E$9T6"hY)Id3jQCDIPSDSTMA-*6)KYXMG@X1rrq5BG38R,Qr&JPr@)
+GkV$SIf90SeB**HUe4#6!h9G@6EkKf%22dYrbV+K`T1$hmLQ8kI+JMFZklqY-ikq
+j80K$f%HT%,",94@ANi#9kKEed2#V!'p#jNd4m1CXEQXh*D(5Zr(qZiVZGF`jPTH
+d-cD'52ZX)d-#J+F9AaZN1j`k((b)YT+bC0IBAhIaS-$L9[%J,eFHJ+j$UVA9#Ld
+Z9$fSVdb'AIMZbV",c6%adbZcNhFUH#D2NfA[6Sr&9rBf%HPXjI$TfP1ANp-QZPG
+lD8,H(89NfK&3e%'6Xj0r+[XM[L8kbmbXl'05UGKC8)UFJj!!)`,HfDkTJTfNHR,
++8'U&@e4BkQd0MR6VjC,%-*Q(4ZA[dUa$@4Ni(#,c"Dj8-p@p3ce%9$C!jl+T1c5
+H,9CK'c&JPA`EIKI0TBpP*[l6*hr6L+GQkb)Y9DHTQ63fSfmT*86#k+M(TfNq(QQ
+M9dl+Kcj1$bT&2K4kRIaZAj9CDFYb'@i)CCGS@qprckkXh#3[[i1RA3h@aKbZXBU
+GPIX9,Nl'jVL&pY,hQEZYMZZ3!'N(8b*G0rDT4r%c#H0LSk3U4DfM[q*'C#cEaCX
+919Qlc5hmdVQ09!S'5S@$T8)c93fNI*NpPP*6qZVBGE,SlQ9p,"5SjFAc"8C9r$+
+b3p-HdbDq05j-1Yh)U%0Pr90d8HMQT8+NM"YJ2D8K,$cqQEJ!ah)Y1A#EK$N*ZKC
+Apc@0K,"409fc`U4SdGqCQBU#THlUEUiGRhaQhfJUG6Ca('98QkZR1U6GCIkVS-9
+#(95UQUK`lbMN@9m0iN&4TmUMmap+M@i-b(+jpcIFUG2i8fMhm9,Df%meXh)4X9!
+Ycf8qMPi!Trbi2EVSG6'[bILK&NJ2k&RbUbf+hSU)"Y-4[EN9'G'DU(3HkS@Rq!%
+ZJEE@6ZX1JA9[qP6D3FI"+fGhD8FDdSRVJXTr,BUFZTclVTQ`G6PC9(93e)Gqc09
+bqrE9!TE@YKf*BPbHrJj@Ye82X35UR@4mf,4(D%l$C&6rK@%14Y)H$RELdKlmK,0
+SDLaVip(NNkAI&3E3[qP5al'd05VaLTdCQ@P(4ZS5&I(0Y$G%e3UVp+[eM)6H0A3
+l65r,&Bjk9Je`bL(GDUAp43YUEU+K`CG5EH*9rKhqUkD-'l9[V0kc-`RDVjdh93j
+%[kZC&rI8,AhmY2D@H`fF'C*Ri&e4jm*MS[XZiME1'TGHaEbDI6N91I(cH9'Kl!J
+!3[i3!b%%0D8+8l2T`pCB@HdBV*I6e-H`,6,&CcV2-VV5KQ6[MReIi23kb,jP6)l
+l)jeRZTY$[SEQre2H(EB'caAQmc65+KZ5(K*'B,E+KifkPC16$f%1eMdY6$X+bdS
+r+SbD26XBpria'9`TYrPC3a1@&c'UA%1$)TF)jaTia60@-iQ0QUZ[`T&+6mf08R&
+b[bq4TLa2SMklYJPE1J"NGr$d)JY1&@6M)Be&I@j1jNhpRZSFfiKJdNQqP6qR$mZ
+cc$4)[jr6@)ZjlZ(D&8kfc%VC9%"fC58Z&93HP$$CC2Q'IpI&Z+ckcaKQqkd[,Ni
+-kKUKPVYA2T`l6A5UQjLSFkA6QhQ$1TcIK`kV1Y2bCJ(l60h8UTTZKQ5+23-"h,b
+0,$q%+EG%ppTq6S631F[B-MDVBHX#Mlq(!bp4'T`khPDQ46mZ28pZ0Qq`A6M$Hk9
+X%Yh+[Z&$T5KEbie5'9bc4'Rj@"diGL4RbZAT58f9IjNlZ)BHXG+eVXMS4kHC,cB
+EQ(VZJG*cG@QEN!$&DfMT@[hc",d)Q+eeKKK&Dh&BDM&F+e$U'UhbV#`,0d2JhpT
+21`lE@I#8)lXL)NdFVP4K@C*Pem+$cM#"0Si-ZmK2Fhap@Iq@S@P1)j0XMG'3!)5
+Xdj1cbY5XR89Y,EY9M83D5bd8SaPY9Hd[Xja9pe)`E60HkVp#8+[dZPTiE2YFVcr
+,Mj-GCk'LmBCT`V*a9fG(DE30!%!B-bMXccZ&$QFSklfCPfRURGUSCQe#2h5iLMU
+GQ4K+5XFSiFF%N!!FJP1k"9kfPa'eE,!phD6e$HAB5XRC`Q0r@m,8akRPaXhfdV4
+99GUeTkf%[kN0GLCQN!$$YB1I$XE#$T`i$T@6"Id+bdSC%lZ,r)'-`ZPBYiG91[q
+J9bdf[)e8j$l1$(PC2#RAqCTEr(F9SNjbiMKYHkXqaB@"-dj$-dfQ`c+CK$'kfX1
+r0F@45NI@0EVP""lRjY!R&hqVRp"+bGBb(PF*UXi0TJcMZ!E5YTGM)RmH28Z*@6T
+G*TDfr`1PmZfNQ9CRDk`%He826bc[aQGb*EUT"j6Y86&Ad25kA5l#'3Ipjhm!UXL
+T+,HRk)![$2#*E$"13+!'+LX%1CF2K9"XlpUTchpUT+[NUPRPl-J*hmRkI,mDkqA
+EaVQq2`GV*cdUGY@`Pr25hmY+N8aMEJ[XSX5aci3X91(-'HU&@aL`4M%@*2#[qA$
+$PfQER6VmXcPFXXlp")fr5Tl#(cT&,bl1(j9(P9XrP(2&bGa&8Qi-kIjGK$GI,Km
+!QEfNT3YAGHZQ3VVBfDEM(Yb+9(KH-3V`6HNl,"Sp,(dYpYbU&bSGG0`UG[I`QcX
+%pd)FiIV@QB$"hm1EZS0P0JefGJG,[U1C,[lQ9CjDK9Efj#SYNCNUS8i%"5&0CFk
+@$X)E)[Xrh4mQ$[l+Iia2"Q@A,-pK+PIh-QKd#-)!E9ALSA[[DN@$1[D&b5MRRQc
+HK1lLSR,5k4R'FV5LAM2iHIY,5E3$#j@kP"`AQ$hqSMI)RbH,IG"iU4kiTd@6jhb
+j(mNIdXVAHA@jFUN'LBZH8!-8[X)fE%YIXidMkaNU5K*(b3'9Kp')HJH2XUKA)"$
+RY3jRjT'$d)K2SGVF`ja"mbeab&bH9#''G3PdZ&FPb[pBfDM`AeLI[N@&r@4FSe+
+4,pR((dFq(fl#qZj8FM+PA`cRV,2P'S[505ijkh2V6[af9!bic@rqZCRA+$UllC@
+FLqk@1F5h+KqA$bZ9$rjc5pYDAfiKk@@Ic2'BU0T8b+hPlQF+P[mVE8HK,V,-+V8
+3jC!!Jc!a,mJh*SE3V[8jaUrLSl#'ac+KmTM5*T+h,C6qD6'#SA,l9#Elhp[9Ncd
+l@*8)GFP2q1r&2kEpUI$VElT`ACkVEC+IN!!`ZE5mlaT(m[,qAVGIPDQ(CebIphm
+QLB0V2TfNrD`X8kIZV3Pd')-8kS`'fR,kCG'k@UKf-fKR&6dJh0[@UID2C6pdqP2
+e,Y6jbJZ9TZ9'[Z9B4UAI4(BkYllbkf(jELRbp9D8"KKT&FYR%T2+TPRciI,1[62
+mEm8F-@A(Y+Cbej58r-DTqU1H0*dYC+bG["IE+6IFf28e%8r94k&EblQcbYY2k&R
+$@6U&T8ZhLPl4m+AYiDhqLK1lc[ADQD@qjTNJc5UKdcapJbC1Hfb2QDl-b"a22jm
+282[-6HHKhj0$N!"H0Kk$P5hP9Pc+UAHC&6k%hjY-%A2b*I$bGMMRrep,I&36R`M
+Bl#)ZGmRcT2eXRa[ParlifT)0j1$Ehcb$I@-RFX)2EMdqXKfYFC9K8X,bU"YCUY+
+mJj,-Z*3FmqMN6VraV60ZcX0P4eLQl4+D@3AfTSf6PD@J+Cjcm8`U%ZP-2H'pe-Y
+-SJR)rSC"[!q@Gif%l0H19)1HiT[B'b4dM#02dFDMb9"QRbDhPlHceZSV-k$AZe0
+e9cIj%N-%NSPC*8Y@[-2Ek4e`H2ZFb'GhNrK9eE4i@P,mSTZ`H+D@P"UaC`&3-MV
+ACQBr&0c$[kA-QHI[2Y#$'@rN'1V1Hd'Fc4'G4l%Rkp,a['MriF[iM90H3CPAbJc
+E#QkDA6f)85cB'UH`(9QddYmA-@+K$hdkrh8krQhRQ1i1Q'c-(KQjTrI8k3V%)Ga
+J4cJbXXcj1rVD81"P#RdVYm+KU5T9%I!B6-P6Ia6cAY[['mj3D''9)F[6khIh@3+
+Id"6rB&2f%2IeqPKZjBXcN!"hCcUhPipRXBf6FfFBrjTa8GUa86i#X9%pcV94JNb
+C&lV#lKbLe*X#$`@Z9cGL+J2@bV+rcKr3!fe,M,hj[2KkI6Kr"3ZFfAQbkQGFVCJ
+1Pj4KkA2X#lcNmqaY*G2DLQ-JV8KkHC&p,*ef2@DQKdZN5B&3,K3eSa$Z+NA`k2R
+IQ(dr,qK'`06$rb+JQTNdH&C6q%*ePbKc#bN)2E-Qjq+JEVZ6dZXKcMA[&11'mBj
+1q4P$[[1P(HBlmm'9!Ca1[lIG@BcV9'!Q(G5F%!fZRIYd1&'Se*F1TNcrBl#YbjY
+(#TB(2VBe)8ETbXScUjV&5`#KhBfI2!I40+6TR@@[Y6@+qpV61TNId8P2,AF+(0Y
+1fqT)VC'$%Di%95GL6p3GU))d9,NeX'jXS+2#PB-E*i0QCl'G@LSjak`G8IaFIle
+hpc30XEG(m0LRQHP+b6p+$P+Y1AcH2bHKb1rZBM6Akb11`Me)E6+jTUmF+98Yi1J
+H2aP%$DR(3R'4#p+Y$R'HSZ8m`b(e[(FqXTjbS2P9rTj1C'blQ`2`a+KCSNhI3Ke
+fdKb2ENrad4q(q16q[bp6$qjQ[5V@aSGGpE!plkG3kb'kd[CLYi'eK(@@H8D%*Je
+2+19m6iPQ*U-*%H%MS$(iHKZhLY'4bG(FM)Kr-Ier6BV@3peDKP@8rf0K'lZ(P9V
+&D1489Q`*S[11Le6PQf"XEDbRNTEY@+k+R##3!,lcdV-Vh[cC,1K"d['KpMRe[eL
+0lERB`Pj20ZSHPbqEA5+HbXpSHRc!h9CRGCD4ZqHbYEUFPDb(DY'N+iV8Qqjh3j2
+#Z6YkD+3Amap9el*G%mCLX(9K"D5aN!$%XVrS,pAHhp[ciHU6@pr#b&T2bC`pRf[
+P4F@(GqAFqCC822cGSqeFjI+NCVf9`e0+N[I6r1kNMlP,jIiShd+h,PN"T6rDYlr
+@hh0bDl5k52"V49GeB4p+Xqc[ThE'4l&Jp,SGVjFQKR&+D9Qbq'Ib5Xd!rB,qTiU
+YEaA`Uh,jmRjYpX5'(@F+2C6lV[j"pdQ!3[R8[PQ(I!b)C9r4jpE#@hMV-RNLVFV
+"i8*dS2PZPAiqEDAQ$F3lEh[cB0VY!CmF9RRmqZiqdNeJ`A*VDbcBUfhe8E*j%b2
+)T8"9qAqZ9h)G9TY9$jiV1I6b*f#k9QA5I+Xc[frfm(1,#69AeU9IjFZQr5Vrr$f
+3!'FGG1(rC3[TU&kM38,p,aIHePRmMLj23lAc6DKP9#1[1RI)`Ge$FPh!c42a3p,
++Ge4lQX)BHA*qa2mEf)rjDAl'6UBGXp+TTK9)F([iCCRDApT"lI[D'4CkfbdN%rT
+8F#0"UTG,+I+SkPiU2dR5ShhkR&3k@4C#Rp*+GN*6L[9*qT(YiH9'q3b%K2edjI,
+5R88qYa6V"fThP2dTe38k'dhP'2q8qAQPN9,R@6q2Y)#ZpZS)1EA(jjEID4XRRDL
+3!(4C[dT@ZC!!Kpl8lAcBFljhp8fKjadaK`JIQkXVm!XM"+$UdrcRPmQXk'2clNj
+Zi'91TA,5Pl88Xj46Xd-SZE9"k&cCp#(,cV6S3rGU49)K["ai`V+B2e6bqRp#lll
+,kR#d[lI$1YKJpqX$pb4RDU(,k%hHF[)XUGRA,+FP'UG'cFSc$r,NrpjrMG52kp,
+iSTYh+'fQJLY-%p*2#V,Qq0`DKX*Y#0"cD1MdZLMf-D$D5k9PAfGSHpk(11afIK*
+TBFmlU%l")[S[TVF)'A`p,UDUb1!Eq5TEKRH@EY19mZ(1k%fMYkfR$&5k%QPhfAE
+*5p,IE@-+APaFXid,PLPbD%1"dl"G&G'E1iY1dbl5KbUbhKmBYRq0jdQK0dN2@CN
+-2BGK"hr"P`RH-p[R`E5Yb9e3q&"B`CYTf@6bSZiTEUXl'3D8prR5VrDackV-'dp
+,Z+RiYT!!jI82BK`TXrT"##MD9D&8QKCRN!$6Sje[,c,'jLq'IY4ccKJ23Y$mZbb
+V#Y*0E6PMF$l5J"Q!d!I1Ik8ZAJp2NhH2Eh%9,Tmip2T8Q-$E-Tc0YbTbH%V"XlT
+D1N1a-*feXj95Frq+AlCK-XpGCqa$4mZ9IHhD6rP`aM)fb+d9"CETqSkbKY,$mjq
++I[1@@@GSCF@4$Xjh[FfhMjYb-)Mcqa05'45YiF1Mhh#JkFEPRdRYiIS,XPp51A'
+V2-YQ+DFj0pUEIH0q)8`r4lpZK$DB0'4pRB5mZBP1k%'SM'rNDqYMT8TqVjI+LPd
+@+I3P(4cG+Ir*+UFi8r0h-k([fUHc(Sp+H5SCN!$U,Q,i9q+KT$1PMe,B9(i8'9G
+MF09TE6d[N!"rEGb9+pe1lc6*2$i9,ZFq0$NDSj6bVZER2$r[Qhr6Y*d2hDI#dXb
+dUFNkZKT,XU4DT6lhA#X+$f8kkP9,RYE,bj2fjrd1T(r0'biFZ9Ir3IfTeT2mZAT
+D'aMjS$GT&4ZUcDDj9SpTVSEfKTVR5LQHa,qR81r6UYFP,ZDhHCX238'Md!iiTGQ
+b$-rEeY,f"%kc,kcP5)Q3!&qAZBFZENN&lHIp!TbbD'#DmI6Yjr#C4Il2%0IVV*T
+UQcFRTb2jJk211PJiTICB2DpY6Y$+,mS8b42BTPI)[V'(V-$-Qa6pe@E16C8!l0M
++b6dVGC!!kL962fRf8["5NjaBCC[P((K4c$kk6+M(`'Qa8c[R*5DdhKlUXPLPq0C
+I#[V#XF8ZmHbPmhS@Pc$YHKDE3rU%lhIB%(,BKcqjr*Ifmb9QfQhQdIr02D6MVqd
+mkj[iF[-Qlc0ZqK1plPH0BApRVAT5jG59PHcIILmU4c+2J8Ze-L,Ba&JQMd`"ePe
+eKi,qR@E@`S(4"V6A2kc5hq"ceVY9UJa'JSb[j#[4Fb[j$cJ3i252h,ZF(G(GTfK
+q5U`dp,pJ8c15QA@C$b,RYXfkqJ+C15Q(96&-f(+V'3@eV&,e*"EbT"aqfHCeK"E
+5paj6),C2DZ+45kFP+4`QU4+&)Y+IDpNHGG+4AemQqBT%*p+K56f#mQ25P8Diq`N
+I"Y##GSDffkl'A8kqKNA"YULNp!8Q+Lq&*2QC+TjhcM`emq-H(T+6eK-Gm+qSj3r
+L9Nb[j2fk!fr#5R6ZZZ*TTckSh*1JE08fSIU(UPdTqXZEDAp2q@'hl#9QdrGPa5K
+XbIV)KZ6q#1JK)3Je-rIkNr2l+CK2CZ,F2Pd1rKr[I#Rpp&Np-dXqIB9QeM+GM55
+mRbTG$S@GhCmSmfYRcc4M!CZTXrGf0DC`qklir'LAp5dp,@GYk9#42cXfjb#$5jH
+c%G0S5Hb03c$SESTHNjaaIm[k"(0d*&pXM3dRpr5YjAlG',*5ChfcY)Ia9[Pb+EB
+1fAFApRPG2Ghh+-0(#MCFUKckblQdXVmAbl+rL1PEhaTXl#G2NfP68r018EK@RPp
+#YbB&K6j81cNheDC64rNppN@-ZM(a,mD[Z*C"R9'Sl8h1`Pe09M4HpU@P6-V)HJC
+!C[PT8HK$)`6aZQZ(*`CG1,,e4-pZ&HkS`pq[cJaIK(V-ZKYlj92ADKE(@d)'p!I
+c1U(I*&6j0Tk9#fLqEp3QrfQRY2m9[-d0QFZ`3"Ch+NTC9*rr-Mq9'bl6PlZY@%p
+[9ifX2A5kQS`2CNqA)p@Ii0(Y6,cliR6ILURT"Ni)b1bSErD`dQUY'jCmMcmImJZ
+'GpUZXk'Ukb'*dUjpTMa9lE-Pr8TRFb*6kQUh%dKa1[Z$'Sj@TRlQXbqqj9Cid'9
+hpEr9@dlZG5e0m*!!b-fdDUh2*V1I@b"e`S9T$qD`NrbF[S'd[3PQk4$Yl-9@hq[
+'5UFQYT@-DT%[UhSmIPkJU@p$[VQ44UEH$P(q@CFZrlq1B80a$U)ZbSGq(*MlU(8
+(QI)p8U#kNPPIReDE9+VbT1#"@dcF$Tb(&81EbN+T+IY9,5TMVJScTImGqA*2c`p
+!RL1(i-h"b0ehe29E#Ap)iEHKQkVF5rTdcHT+Z*dJKHL)I1Yr,MqE'29Dp3UrNcC
+3@2cE,+mqqqKj8IU&N!$kFZ(m4bVf!UmVPl!R[bUIIf&![M85&8Y+T'c6dR(fBb-
+VP4hl9-ljS`2G5[j5#A2Xm`bV-1K`MkTaKXUTY-G+PFN+Df0j8EbQ+Phk9,LeiQD
+K4UElk%0hCL)[C8YNiUA$8*caX%*iTrpahJqAXip2YIfllCbDh*E#EFbE%K0f8[&
+PDHcb+fTM`CE96h8FJT,!LHTSicmH[DU,1T%k9(D(3ETFq66F9'5iU-ZrQraehYR
+[2VD`EAY+cGGpQDVV!"j!UYYcYR,&"-QM)k"FqZGSA8C3UF1Uf*liGeTb$fkl!c0
+FhDEL,kKrEh*KZ,60e"QUE3V13h2p8ELhmZ(9@&mpP6KPe0ZqB6dlTpURJ6lZfNi
+,94kbYKSlUGIHAB'm-8YjT3GY0Md0TX3jF[0Z-FK'@m1rlk(,R-K(eQC&p5RXb%F
+1dPIASIS&S&3-SH0jGBC$XY911,4Il8rCT6rBX*06+)3bikK"bD`ZJQjPZQ+KXSr
+P`Rh*U%FZIaqXZ)e1dSGpq,1kbiN8HaL[SHrZEr6#Ud"9HE@e15+RXiHIb@+RE,i
+qC#re'Id&pT!!4,lV5P-A(KaY9,jI6XNUPHEIdN92fiF"3NPde4J2r!(Q$lEENE+
+8IlNCYf2bCHm+b%1dPrbq`0Yf1UkbEHEc"&,qBF0(qfEXmD,$[je$SAHUPCZdZEr
+1lqA6biCf9UIkMJ9fPKI-bQ@G'MkP5'+R`ISD9b&"iP)Ic@QLdYpGG1YV1rMdqIC
+GY@j[#VI,Ld3T(+XbbGCl@d&I1q0B'@3IM6K6F(N(0VY0MR$"G9&mHre9TrM3c03
+-lApfG29DFUKi)cipqTXjkHdcHrPrad2rQEUVH'6(Rr,NHa'bX(,L&D%qcqAcYV#
+695kk9PILK`FZccSFkYNlkbRQ9q6)i&pR!IVE+QH(2K5kc1Y-h"RAee5Y-hmm-2R
+cpc(TlZ+rKh-IbSGb*q[%$$Mf8DKbpQBABI,e%QK&BeNl"bU&h&6i4`d`914M6DK
+[L#Z((!A!U#kNU9l1,IE9H2l(c09&Ql5,PjA6(Gh91AQlrf1Pm,[D%8EP[iVqh2P
+PIimk(NmNYAh'SK1V1pPJfHi+h'j1H[K3mVQmqGD(0(+'Rpr,`FZiKpRbSG6Pa&p
+rbc`h'ikcSj'ap`TXA,k6BDpm09R8lUIdkd@+[Mk+biYET"AG(@fNpaAC9pGpBaA
+Ce(NR0pbFbfHb[I)plUV6qC+mINJD`pcfhT90Bl9rFTAkRIbm5KF5Xh,Z"AqrXU0
+dPH`HrJ1GIaEljhQTAlPqPIVNVfH"i9lP#[@CM%YSFV@j1TP6MRfqA(Rl1APimZ(
+(Nq88K$KE5[F'$Ec&$kiKP8XrbjX&TPfm2A@N1rTI31cAim101UEQ(TmZTd+h0KY
+LU`cU@!'dV2KUUU"5%QpYQr3P92S(rFPHR5(q`X9kcfYB8*m)X"i23e'a!(QA(@!
+$j("5[FQG$cZ60lDTU04D90T%+pQb[jE6qqrc-MX*IcErNl#+KFE5+mKpJkf&hXj
+@EZEQrcHrLSCHSKmrL33r3KfQPR[Q(Vi9fPP2PA-(1f,k9lRD@KUE,kAdkQ2cmbf
+k'ULq(+qTFbM03UBh+peQl2Fc[He04,TqG$fX2PkVDpGd0eePTrIqh3pMK4'`06f
+FZTMp#i5[kJ9rK5D@TVD$TB,,Lcl&+rUErP2CB2K2TB-#46C$bkeZ6fXZG6ZjIP5
+*rBfmZK$Mk@IQ(415YmN9Z2JfP$6I3Mi205Z49,H(A#Z868HfPRIa3Q6Gr9T$lV)
+HXG+hcdVDr!@26)-CAM&T9X1[EFKeCBZLm[R`aZA0S6MR8[PA-EMe)U()Qhi"ELd
+Tj[BbURh-(83l6[Y9X9$M(h%k93j0Tr*6i101T#Xl+9QlHj[kRIaAqAf-1lmbbiY
+$aSGTAHfqBF3[+Umh",#V+Ud'6J6rCbVUPUErJh-ZY1)HckGXV01"Gl%9UZpZANl
+RD4Dc@HpeR[Fh(kHcll1fIIDVXCXhjQePr0`IE'0EV6`q$DGcUYVVZKXf+ce1&0[
+K@Gc,UF(R6,LAQjIBLXmTdV2@-UXI1rUM5XfjSpV,2`%l@68YVQrdX0cCh@0PFr5
+hfYSpp,Tp25mA0ZCpeqDdJE$U9blUPf[am[f,5(YD2"VDNV"K2KId(&FjXIYXRF`
+pCDAQ6N@mr2biV'a2aNKKZiUk4Q`LZ9-DC0[lHIf0cBfb9e[HN!!$-9dYL4B0S1I
+k'UQLZj,h9hf'+l0KpJXVB1GU1q!(d,MBJ$h0QHlf+r(55X'9JkLCl%UR+TkM[T[
+b2Hi2*h"L8KfHaQa3qhTF'TfXZKhh"YrHdrS6E6bpP$f[QbH,JrLKh9Em1HjqX"c
+dm+Q+G8r&B0KZZ,+G4ZXVDf%EPhI#N!!CIFF[Dc5mjb)GrGlJ[$GY4jqRMCU"P$R
+8HXpZ+IpMbYe&m2YqZjqdLq(h!`IDGC!!mrpbAf@$3PB1cdm21f2c2jDQGXpMDIb
+a82+r&0+U89$k%f(XBI'e2F8C&pcj0,+f0ZI#qKhm"i'YhjNNjVI+MVm&m$meT3k
+GQ+aYC&dV&R2NCX9rPCII`qh'jI8LU@I#XiCA$SH0"4hF9cJhFAp8QqU@QmKj-DP
+RDD,"R8,QrXa@0[A5[MdXcX,+rPepM$D3!*cPZ902%"8h9RcZa)DFLdrVVF(TCY#
+if,I&iaAMrmR3PdYdBV0Eq+(RE3Y+6FQkpXG[VF'AQk@IPqa$(bDQC$`ENi2GcFf
+P61--Rpi!jG#X&4i-`!XZK,SDLCqDAJfP1C!!m(EkFKEQpK$,hP#Afh&dZmTpV&I
+ppb,IXX(k%1Tq22cqAf[%QPEhBFq1jqXj!6K3d*ZmT[&8i80biURBa8Z#ZYAXNUN
+0RGi"$!r"LMY3&jNl64YC3V[CeG2(kIc*hc+Q2lHcKfFUTJcZbllJl,V)G[+Tdjd
+[NpNP4`+Q2eRiV2T6Erk!m1E`r,fm("dYppDPjFHr)6E'ANQ9$BHCTEp+E1S08hR
+X8f2k@P,$GNFq,'Ykq@F4'edZ$l%*9$KfK`C-8bjbH2$-aTdHMPZP+NGYNiiT9(N
+l%jTlrPjX0h$+cCYrbT066bkGCXTIE8iGhbpPFf2A3kj+5ZaF!CiT1"q)Uc08Rf"
+5GMA&PRfm'8a5cqeGaE'*l"cTPc$83pf8bXPEbT,l+RXY4$0[jYr-Y[Z91#2cU4G
+cYp2$X04DB1E&3SCZifQPf8UE$hd1VSBeTmLqqGTIkNSqipKl+2DAmhjQ#rDMpK&
+5aNSjT5-8H6JdHRXE,hXm8H63r$IEMf+fpm[G5pCE#MEIfqaK+hm2*rj6E6kICR3
+@qP6QaGPr,6cZaVjICAYRdTd1-BXq(mLqN!"p'F)kbAI@qRLTGp,jBSNRc6U&fmr
+[Mf8bl+ReNkK@B+86K[&%dMLLH@iSNkIhhd,QKGcZAcGUETmLqY$QU2Lc$"M(Ce`
+ITr(Smkck%Q(*e9DS'`jK9qPdk2)fm[Z-'()M81NE',q+&mZ681K,q)Z%9TPLF+0
+IB-V0d[C`pV1`ED2NpK1mU9f4a"E+'C!!c*d-k'dqR4Kl(C3l,EfRdm'E$0Xr5q$
+8ip1'AfACfP6X0c$p1RMFl6pM+[+1hY,q894qqU6,f`bYh8+M-HG4He4R@mrF(*(
+bmV21re8HNqFl-XBm9`RZTXr1YY,f9pl(@4J&mQEX3KGMmkAJlIHB2+fF[XqIf0a
+DI@iZRQbiG2rbSFL(8E1G&mMZ2j-(1l'XfAclcXBEUrZ)FDTMFLE-QAX1iJT`m'`
+VEc*e-r'YlCdSTre"ipcV+fpP3`1SS%fd23MF[G0U,M'EHZBSYKf8(M@F-[kGrjF
+0,X*8[0pZdKq["mjIJa*[V[A-JABT4lqll$Bj&CCp#bY-QdbEXfJiCXrmd1$ZVD4
+qh$X1$f-8kqh&[PB%[45Y&$A`mfR1VSZ@j!#G4eVN!0US!6F(X)q6X*hP@Remb(C
+fQ#H8(R3mk(pLI[mH[j)p2EjX[Y*&r@3bZf0'2kjP&EJhXH`rqhh(m5TD(D@`E2c
+l!66)V19!hi&R9mi9RcmCiQ5r3dVhAAIR[EFh$BprcedmDh,Nr5RqhJHaX@*R&[j
+Y(BifjPD[ZT[C8pKd026cG2pILl+,Z[r@SKf-[Y+rNICQl,Er81PI$NfRmIarq@$
++dFSfVGJ'a0RaUQG0VBhamRYCm2rR"i9BE`T)acTCYRLBAA6PkA"f-h"SR"Id"JH
+eX"[[6%aZZ`""IGrBDXpp2M@eEQbrTpYPRL2Y+QcZD'Zf(cS0VmZXXqEGki`-hp[
+Af-LdbH6+PGPhP(0XqPD8K-p-[qFjpP6l#,H6m'daBYc,q6)KiX%@LPk+dViHP8Z
+G)NbPdrcaB2X4T0)Y-i(@3l@fd[[SIL6DI@5+@iRH9$e6[B`q@Ha3bAMeBqG1bX$
+f6!pfY19r9*QiHSXX'DDU&[Ir1[jdR,Y2kSI2X2jVlk'PSq9*+8(jShPbFe*cjcf
+6RS3qG@rIbI0#%20UIqSRl86DklmNNV"m'5I`V,MjX1UXmZ4p+Icm$PE'YXmZXPm
+ZE5liiaY6&PrULlDKUCX2Y`h0jaIRAqleG6L3!2jlH(YDAk*e$Gpaa,[G@pr$l%Q
+RErF[qe[j9C,mU(clr8M+iIc3qa"mZh[q2YBm[Pq!+)HSPULEX9mm8NMq6PRk*RU
+Bj9Y@qP3RAhIaZijH8DhPrCqG#[9[$jFI*SqAiai&DKpMq4hfeKqA)UDHd`HR+Pp
+aP3Gr@'6,QY8L(89mH,6bBBZfld&@PV0RST58Sp&22XX(V"5[-X+Ql[qeS`m@4Nq
+0&ST@M&,8RXh*F8[ffUAVD%VdU2YaXhcT9p`MV8bF1I)[Z$(RlHANlL%ric[ceS4
+kH2mkH3#X5V)JNIlVQB"c+FhF`BpKII,Qe)U-fNjrLXZb[$U06DADq0@qEBDA+*L
+(p*i@2NRRdc,cqD*h@dK1ZaV090SB%-f6$ZTA,bpR1Mi1P[XLEIRkYh"jGiH6)S6
+YCIh%&eQD@qr`Ta8,QM)p,bjXI*aMIQV,IBP86Dea6"VFZEJU3rmAbp,Ir,ATi*-
+0LT-1qE*K$C8i6e,U6'ZVI,05Q2`ckrXM[Zr)jE#ref0UB)q6$bi6SQ65lBEAQ6`
+EQPcSE6qU08XqP+SpG+bG9D(C,KRAa8mb0MC'XVbmkXXpc(`6m41KTG+3!2k@4)1
+[Ll5VTaqAia9iMHP2kFI0mkAIF+3*42M'TG'C(`HX"e(aN!"X+qG'mDYqmTmm'fP
+CVZI(BUI("19rR`i(M%qG,,NI8$p`Uh6f&R%FAP+b[T-rGD@P)e0$Mm+XfYP4Kql
+IZRqjFjKTHFIXpmZ`[pM&6SkV!$4P12lpKir[8cX'djIIl#YcCZVLTrqT2,mXbNX
+V*N8V6Pj[A00'lP8FR(Yk8-0Z@bG+HFlA"SbT'#'KlBD'iJ20TFk9qc(b[Pb-NIM
+YGMTEl[jY2!2`MXVkYRmeKLjKihA2rk@I6I"LpBM&Mj)rS!II(BrCq,er%910TE@
+&R`X!pePh4bkcaT&()VHAdV+qb,#PNrfH9CqG@DeIU+'*QL2D@qblQK0`3aIa@%)
+B[I4I5Rl6!k&(K9RIeUcAB2B2m6(@@je8q`MCIY`l52r*IE5(NcD(k,,*mZAQQ9R
+5$('ekZTE6Vm-LA4e%MjP+(6`rk8YcE@GI,R`k[*e4q@-266pGASU`i"dC*fc+13
+IX03R8[c(GNRCZCG"NLV)bI'LTbD)lH#Ic6T%H0$Q9al2'r"L(5r)`Db(cSrq16q
+[bp6VH,TD$qc*TQA4B@dJm!&(h8r,Si,k-VP9QYmkXZA4PE%DATBI+0GMbl,$TCF
+[PkNpX3CYPh-Jl%pd,&PD@K#VaX*`JfP(AH8'Cr,'U6VrSA2,r1(kHZ[X+k64Y-R
+85ZXlq("k%*[h5jrBb2U8SBU1kNHpS3DL+IDI(TDUcAYKX,rVTXrVUpHflTG*KQj
+M`cERDcHbjId)r,4R(e$dr''@$PV+$SDD(949*Xmjm,dCmq65qAidEjGEpf`bKpP
+fl-kR#8dcA3ea5A#cKhrR4Z''6`MjSeSE9E3lpmQPciCpT*T3jd9+Qp'TjE$8a($
+8Pm0TUB,MSIE-k%SiF0Abh$923PNrQF0@(X*-mlE&Sed4ZVBpE5f[R9QQPhfkNpY
+3J2"r+PSeYG$d[,NcqZdL065`G,D3!14*+B[3Kr0C8cXQIrXh-lq4bhXDMA4FHb[
+m'dcIP`jNDKmYkKCeaelkAMH0(r`jIa+hrcPH@q$A*l6rU1f[q&#HBb+bSl6Bf"G
+`(8GEIIqCq`Pm[)N8G9T6IlN8Ie9j2cTEqfdPTPB9,"(@QBT$eNMkC*9ED@dBE@P
+eL0VA5iHrkb0NN!$S4GTYHA'cCFT#*'em[8aXR[ifD&MNqGB3pr-KjdUKD6mbX2+
+TeKm04edUT0[ZaXU96VSSp(RE'cVDI"V)JeqKXBHPUE2-M9UpiGRdMmHhKVl3j*j
+Yj5il6@2mPLU3!(+X4k-rMfAE-0ES4lrjF$I51DeQ4VAZDTP*@d2YPVZ64lmHCd`
+qNJ&K"cird`b@1S$D#$#bMC)kV-XU2Bamhbl2,Y*rB@Q9eRM9`k`lTFSM-qCIfpG
+TE6+jiD2`m'dKqA'KKqAXBp,-Nd5d(Y5d$$G@&Rhkr(RbcjMcqre-HPhpC$QkL(r
+5MMf%2M6)H4,2I&d+`iDdD254S4UAri0#cb0,+1@2Pl1EI3m+YcE,Z,l+l@ck%'c
+Y$UZ3!%"MhF0$5i1dQd-l1k'C*JeT9CF0$Rem1PVElN`FRV,'8'I#pc2fNQPjhM5
+2jHAm[@kr+e-1aKbm'jRm+2NmS!ChDVBL"$BbZ2lFIkPKX4d0(P9Z"pfq05r-Ncp
+T"UY,*ReY,AApE$ePE3e-Ej'6eM`c[Qf&GC5NCYKhU-d`Tb[lb5qIbT!!F)`Ye#d
+Je)CeP3Ya-GP)rNbYdAAY3FY'`MhfA&`kFf(F3lLbBCZkPAiCY1G'SqGf0E6eeRN
+9RI@P694X(MScG,,X)eYCAdE"fPPIfF%HR0RRdVR(N!"ZT,TjPc1lc[ElMdR$0jm
+ZT5Smq(8%VN(A3AA*V,1#q4V@Q@IA0VA2f6KX*G(CRdFlq4p2PprGE@hV@'V1IXe
+I,Mr@X0a)THa*hYE[r[""Apmp'YDAmD(V)erEhfiqA'S%0`KlXHjJ$ZHGfYP3ZEl
+,kJ%H@D81eDk9fDqZ&D1H81NSqGV8DhBbX'A@4(31KhqidYG,SlUdeG2Bh1c2r$3
+aU1lpl5l'%X[DUA$YE6PlQGSSI1XG0@B%I0Sp#$FbXRPKV9[,4Vp"TVq8MAQkbqV
+Uh+4V@9pdjHE4$@fJDdHZMD1$Bb,k([V1#$V)m(3k`U@H@q6Gh)iI[j2c1A`VV[l
+FKIIh2F`mpkP#Sl@(!*3T0KClU``&+$4Z[[9NUYpl2I"Z%Y'"jFL@Ir#p`0cF1cF
+cQ'jGX0`U1pEIESb&hKZE9MXlP1cNr-8S%V"qCJfF2RGM$$[mD'Z,-iERIA2R3bm
+'cf8E,l'0J`dFL(8-0cEfG#E4p+qcF!d`qK!I!FkD1S2dPJe4+(Q@4c(G,f,#KN%
+S@kr2"4e*RT4V+qcTIT6`hYR$"'KND5#dRaTq2@3a3M[04@@C(CC&8DTF`3keca!
+3eXZMN!$h11ATD%iNhT!!Fh2KX+k28*IV1kjYh)SjA#SQGKGC81Yf1a'!4k@UVFQ
+b[TqbV0G-Me*9p[r,V0V(dY1+R,5IppD3!2@8T@P[lQqebXj+`0DB'44j0P2K)f6
+0[PFZ2801VT`p1bS5k22`-L2Nbi[HkZKC`mVC3`bG4$bm()MdpMZTCXP4B0RZE'd
+TE#(V*4r+@cKZ1rPC12CpG$l&MV6jT5+P(1T5$f@8[RAm1e2Ca"UMqC-&Ma,QbSq
+A0SG#GffK2(KmU`M')DArII8HQ4R34Vq#P([iGK"X+b((V02$$@DI53B(B$d0`iG
+8f#(8`0pJTM9h8Jc3IMj22fXRH5+H89R2EK,3JlEK"aj3r!IY@f8Dcb,#4pQb[Xb
+YbXU(8arMhh3XVlG9[,fN(3d9DMXN8jGpTCmU2T640@Y6Uah[G9Q"dc5Mc@(A*`3
+kmH6IFqZI`krE$VjFVpZ9mF1[-$VcC@EU+k+IZC@a$CK1#(Pl#aKTEFhj-(-Kh,$
+Xi+1b$85kf66Sje%pANMPqI3K`$"MDFYlRBIS8Xb$+jG(bc#"(Ke[2VBIPlLZ1GA
+6e8(BaU&193JV*0$"PhpT5l!pLfjV-CG1'@@[5F#4@EJ4IF@I(f%(1f"8j`+bdbR
+Ek*9,Nak@AY0,fh,jpRbVN!$&XMiK[dqMDSrTr0j)IX32mEIZcqVEqKXUb%UUEL$
+fkc@[XrZI(U)rY8%0pk42(dE"fIdLQ`rZJMqkBIhU9Ka%ApR$d!rZG+cHaVD'C(`
+CFUR$Ei*bFDL0IGpTj"rL[#2pES3ri8pSFVQZ%!fBJ'$4rr6mbA5MI-bjSqQ(99S
+J@3%eIG,THa@jID`p#E6l@IJc)A%!f8NfP0VJ*ppTbie(FkL(V,2*XCfPhPr&'-P
+U'A5Qhq`K2Jrf3M8ZI'[jd9#E8PAp+04V0K$f1PVRXrrCcqEhpCYG,D@9rPCPcI(
+0rciH8r6raeG(TEH6)[XVT6EipJR)ildJ@$Z4![BK`0,2Y$2*mCQeB69EK69'4VF
+d$%18"rHNA`J1iGS$*`@)$cdJ1AJC%Ee+bjUGpZ)DbFGjqjY0V+SmqE2h-*c'R62
+QhrBbEqPM'SE6ASmZ0c+TFLC'1j*(`F!9eU!H$Sp2Z"!G4$USe4L!kA5`H`HhkFC
+dI52[4H(rY)GD(pN%G"q41eKl$X+fP@h0rEr6KXp[Ab-Z(Cf%kmL2',b*[cDQ0[q
+$*MApcqhJcXfKX0K"f0I@EH(C`GCBAlVaF'CKXB1rVFhDePeR@pPIp-cB1K$bLaU
+AqMRJA9(K3MbBh,0#k62k@iNb,$5f%kIePKI@I5k@4'bGSB8GGTiY[@@P,fiGrC8
+F(8L#Gq)*TIN$qGY5cGEPFq6JS*hA5X*-R5h`V3dI[l#bS,*"jqP[iU4k6Sdr[TY
+#A"$RGK$$Z2Ppr,S5Z,3j-I"$0Y-SM2TB16b)BH8@rEqdrPKh4hMYG$e)-H@-AYS
+emH(M!lQE3i0C+$ifN!#IjI1(pbD2bp,"f%URTp,2-hHXPH9*SlS2M+4lb,lc[Pk
+6B4U-Dh[qXU3b,l*i-1dY-[fpa$XSH41`UQiNbDfrYqm`E5rl$F9pE5jFXT%4TrP
+Z[$DDq9TI$He24@A1P*+Vqcj-+Z8[Sp*1$*Rqj(mZ6)b[kY,NkQjRl#`[Ya$TG,)
+SP$'UdXD&([diH25pJr&6++D05cZl2TidV0Le&I+X*0(-ZD%[*JdVf2I5hk2F+Bd
+%*FQIfXr@a33fP26`rbh[q&2J`r1mUGIE1'dU&,1'(C9[mmbX4lk@%2EFeRBeQQZ
+Cr0i)Hf@dp[QG+KrRJrcAaHj2k8PC*S!Mmr1Mj25VF(Fjc6iS`pV21#Z9A@%M"e&
+EbqEqEk%Hqal+2UErA9)Y2C@-LKDC[DfrC%kNfrkRiT8q6IEbre2Hi1Q`2V4U@SX
+DqAJbjmHqHjmejj!!kdM9,HYcEQqKjqPJIdI)jlXp,5hFRPlrLD@PfY[2h&KI46D
+'#`qbl)F)@hd82Bf%(B@@$+S@m(66mmY`qc$D(jd%IQ9US1Paprdi#ZKbMc!j@AC
+V!`3mi8HTVFb0jFDq$qcHaY-(6l,h0c0XZ,Ip#0625cD$lM0Nc3rFbjV)G4hd9'd
+T3d2+XT-1"YBEZfMf9rZDhXSerf1caaqNV*,[amS*eE3Xi1&)T"rC'GTl)[jKrDQ
+q1P"D)rP#Vmhd*%QIb3rVQT&f'PJhGpJSr9A64qb*l$pklMdYeBf*Jb`BTmM5ZrE
+#Ya2XDdRBMdlPG(+dcCXm2ijfVKrAGT5i82"!6YG,2kGRbY,4`2a51Aj@PSKrlrf
+kcNp6VXhPNfF8DqBJ8E6T!SEU02micI2,Hb"fP596ZXV)dTciZrdXE*dXQ4TEj@N
+dJIP`hFb6JcE"GZhaT&-3A+kkXhp(NDL'RePTmcLkkccc&DCaHETV3Ua`lH6fHA@
+DD(NfHE$XqqLRbU82P5Cm1r-T'dSlrS48HXe[I6*Qkh0CXa"GeJl16$dYP$'q2$b
+b5hT9Y2-k$a"peCApTPGJ)4Xif6CI@jCI,%(R8jFr5k,YE#KfY[lhHR1rb,R$UGK
+6+hYEf53VAI3Jb+bdKl'+R&IDU$fhAF*8CmBbXVQ4JcM+&Qd*93rPRPb%rLIPFq`
+,,hBbF'+qbSq6j9CCmpl)5IXTcrkYI`mQ$-QhfhMdYc'bBrBF'Y[cq@qA'[[1Khl
+8)SjGRPidZT+cC@$UBEVG9Kh)k4rJF(0jZrbZ`&YXTpe`SG6IbUN`bX$[!CAiT0$
+@p#0PGCA5iHXNbX'C,[pKf[hEmpZ25UGK$DAqbNGY6LRqhdkq%[X&*eL&dI5lZHE
+ler,2EMf*5`[mH0mHXYS[QdY4,Tl25`lUA5jeRZSHAMmR9'la"UUfRdqIU,)NlfY
+FA`pRTDh+)[FL95)eq9id(5c)hTCCDDh%1UdX1ae@PSHpYqf`3i1IjaJ%b8KpZ5S
+8XR-%2f891E@mXl'MI)Sb1((J02YG!()#&AiLl5$IkSfVl!4'0QfP,P([XJlpG2L
+b[[EMm[cT'6jHPRhIP`Hh@jIYm0)I1[XL25qp4fN'lf("M(YaPm[PlL66XrEdLV,
+GKB3f%3M'e2q,bl526*1f)PN-4,B1N5k`,Sk-I(ZYTB5G,IkQb[YE4f%Z(VT"r-f
+0+lMl[E9*@MZ601P`l#4h'$0[[GDbI6ZDCR[l1'9mf(NR0I`1,2abcR`6Mci9S2(
+k%8rBi"hU0A5e1EZF[G(8cPdIC[j&1iNq,cp4'bHQ)YQjIjZrNN$')YY)064%@h-
+XX3C1CZUq$)M'!H-GC+dKTIQdfUZBD&RZThb-%p4FHPeQa14L92TG$5`kQ(ERqcD
+U$f*6)iYrcl3MLj[(k4YhRE3[iX'+K,Tbk-I+ZQa`f3LCRDBiLGL'Zp)RUVN[CjH
+Ar*p1NN6j8HPpm42rYZ')R%A(Yrid1PRM,qrP+16NbkPaVSMVMh@d$&mk(K"AAe,
+qkbN'+lTbD22V6Me2#cF%FerD4ZAPFI+bZK'JlkA$VGab64KY2-hRC(3AZDcMmL(
+BalbrQe[TAXrX)Ie%FF[q1KZHqR(Jj%6h*G@aa%ma)RbCYm)Rb*hFC+42FR9e5*m
+[K$82AplNkU`Je9KPqIjV%5JU@KL+2eJF4145aYJc`3GKCh4NDIK[kF26@rpZ$Z`
+QDVeQYXq8A(lZ+raV29@0PJl*4[aAh2Y+AIJK0b8`0(U'AmCl5(-JhGJE3l)i1JY
++)TB8FVT#(mU(QmhTR5QN8XVTk5cjD3lh0eZS$%kN10i$rY&I3d0NG$,jGP)U@IY
+eU3ic`V2,j8ZTYGG0XU&dHc)a$m)p&PI*jIjT!8MT$IXM#ZAcb%GeUE#6$YE#rRA
+feJ0P[C'fh$r9JRkmr5bl2NmXek)hmGP@r6[$8`p`bRS[0PpPIeY6(NIqH+HF2EX
+3lS@K%HN1V,2,fYEjXA`Mc5q0&2%-b"$2ZGP503@YjI&Qm9L'3h3,M2CRkL'kf88
+mi+cRYQN$bT-rjfPKlq0Np,RaXRV-!Bcd*9rcTYTNl@0brBLSqGDF[A(UmPd['KS
+6*0$CPi526Z$lEG9$c6DXYllfkh+!(caL&el!DHT-YLSEjP!rm!HXSe#E"F-*@kR
+I@`U0eclQqc*&,(2IKp$[Z2DAqh%Yr4B5+RDf&%qrQ+TN&S$8cDRM6Im)C02@`mQ
+([TTpC(,fNR*kNLYb[+X,lf0,2e[R(mIj@9lB1pEj9TPIkArMD8kCJJZaXp6Nl["
+KYk(5j%f'2r9'rUK`20Jl$BEL2Ih2rFNpQka)(6i-M8qAA`mIK3r3AJpjI"R4Vi"
+*Tim'+IQcDI"dZGU*&$CbIZGa4KAJ"iZEmlLhhM@%I02bK+c*q+9h+M8q#9d66jM
+j*rD9(cmTG4SE0@cq$$YE+KXVL(re,Sr3N@&6mqPTlZ4$a)G63rZXURB5U@jLSl1
+A5e%V*cG9@@CqVH9q+(bkhbSq9UCqlXXfAQfR%1"Aj`JG332kpTPIR2!'GZh)Jk@
+rmbYYjYlHclVRcT&p`V%,qkeIpqEaj3iVRb[-Kl@qjhRhrDdZ4+mU(p&cNl[Z2,K
+hFf[fqSN5V)m1YrjeE8fNL4bp64hqlMH8#cp9Ej8M5dj@$mZ``6lGBGEqDdbYP1S
+qG$dif6T""HIB9PSIHj!!fH9diC0'03Xm$p@@&4rG+LlDrb6Ppi(&[SC%10U"UhD
+b+#2lDfNDRb-hJem2qQ$amlXC&rXT2mFZId*Y(Gb0,r9&aI0N9*@81HTRmXcVl+e
+0$@pM1Mre(-*)SprA@9pbV#XLSl@$T"r4XRRbZdfN1jc*(&cG5I2ALq9FmALe2RI
+JiYTBF5GaH(8aie3pSqC@C'PPdZKY,$cBHebYrIh4qUL!R0cEV"hjr4rBBrpePB`
+EQ6IBpM!L&iN1UZBTYl2e2,pQq`2R8Ik)rp9EjYEh(dkR(KPd,Q[KckF[Lm@Rl2%
+Y1,JeRcZ,PfPM,NerIlU0"QDU#P&JbZ+5p@R&Rr1NePcjNV4cH,QfQLLiYcaDH`j
+2jS+((NePTr*jFM4`l12#F3YR([l25lk([Z#4$C[)daf0q2p$8q@Dp@r,lPG(SF[
+BeKZ'h@bK#mfpRRE+2$MbH`L[LQaalqG"Ri1lZXh@jU1I)XmUkVl2Gdjd'1B+MGi
+2CAbi09SS0R*SE(2'+Si1*$cD'IaI-Li[XjGeaF(fI-efG@m[1XZpNkbqb-aKYh9
+rVF(IS#AlSfqXlAL@8%HMbC%rPe[&`Ch&T8j2lGmMBqG44V4V6H8h4V9)Y*1iZ$f
+[%XjYBM6dRIF@I"ZXLbdPPhXC`dphC9PcjXV4cZ,QbUjKTl(Gq8'R'V)FrPkfrP8
+YK0VZ`X3dM8IrEdYr$$mfIXTXI0iXM$RlriGrDD50[-RVJckGRX,L'Xe'aZ0+ADC
+dDKaqrfYPSSHPIc[+PHD`cm'dTE6G3A8E*qG6R5*qcXT%r$bFHYbDh*TE16Ippl0
+rDHDee[X[KeY6cmRfDARj2cZAZih&$1e19cAfkRBfrPMU9dNmQYiY#GaD2*j-EcG
+,jFRL3I1TGVbkfKSMUDh1N!"d-6MSD$(3mALjZ"@CmL$8qA'dNMc3cTBCepZhdk(
+[Ze$0dYC$jp,QhjQdm[JeTp-X!aNdFU'EIE#cfPcVHbiXLaVDkYrQSpK4K,[[,hA
+mP6D5INI5qTNmMTDLkrjI)[Z,46Q22X2T9mUaVDA&ReX(RdGdG`Q$F9ZmTB&,5D@
+MeNL'Abje'9jFI+l@qe-mje0h0T4Tqrh%%L*RhFIL0@L#rdF-9p&NrRVI+V,QM+V
+D2XdZ165bi-E5Q5G$0VD&EJkUY[re4[+d[Pf%q%`L4[XF5Ea)r&SF@MmlPjq6fX[
+c*#qR0(qk$@pC*[S)ep(JJh0P*mZ$V)f9ZSe,J`l'ZNd$8q-ph@q0C5)HeX-f+`S
+r1[XfhRpBHQ1#$f3@4U2"KkiqSbPYU-'0`)h5pNM*ip#9(Sl##$433!3M6q2$'Rk
+QqJJR`D@bbS0M"$'[S0'KGG)#dEUYRaf!i#i"q`d8UqTGJH0'#'$IpG,JM8U'aJf
+#$8DIJlLYSpK@A@aXi1`X`2GC&T)2S4lqZPhe*JKNAe2IlI5D@8+4"ZV2'dpE5h&
+EJaU-'CED3l!2B)4bBe#PCm'[MpY4e0mGKf681l0,Y+1bMcjGpJajr(`)Y,[,kcf
+pE5PXBEZG4@5B-ICa[+VGj4l'6CCXml+Qih%HIXV++I6TF'4IB%fqrUeS5)%%-1&
+YDbP"bZrMl*F)R(kk4p20PANLqf@PrESpJ4Sr-A@JbG2*V`)#!9Z6jhbkfMbl,#b
+GNErFQqeFRkQED8HEXl$[!rXHYl)d`SdbYSf)%!A4XRmhd)dr9@@P`mNXCjNLIeh
+(r0p#(X0,@j1TlfMZ)&ZljIP9RZ4Tm!%!B4k4ZUEJd)JBfmmqBXD,PrQqKT!!d@[
+,,ZS!!!#!9QChD(H(CePhLAL)H)KSD@H(L)L*HCQCD)L)Q'L*H@U)L(QDQBQRQ)K
+jL)Q*UCQUHCLCL*QCQCPSL+UBDDPTCALBLBLCQTZ*L*UBQCQDQDQCLUUVQSUUQAU
+jUCQDQkUSKkL+Q+UVLTQDQjQUUjU+U*L)UTQVUVZiQ,LUU+QSKjFA!!%N4@ChGiL
+)LCUVUV#`Zk!!!!`!!!a!-N49CQCQGhGhGhGiGiGhGhKiGiL)L)L)L)LCLCQ*QCQ
+*QBLCQCQTQDUDUEUUZUUUQDV*bDUlbmX!N!!+c,!,UV$fH[UY)PKrh@GDFrc9P@8
+4C56FhTqAUIK1mKKJ#VBrXTBbUVbh&MZU`eNfV!rA$[M8Zh80[Xl$bj1cXK(i+Um
+ZZj5GHGI9HAcehDHM'[,[ViG"phLU$ApTA0l1j1fP$TD+pf!MMYFAXaDaGc9D$Q1
+82NT$1Q%dd&G@@8l2FPS0M'kd`&9APkh1Q!hNSdRCm+2l229YKRS6j,XQ[j8jkp-
+E@mSf"UUMrD29D$P6L`5EMqcD`Gk-eF`Iaj,3Fpb3!*Uej+8bL#fUkq6XkbGc%"r
+cQ#2S0"@05eI*SPRhh[HViqXJeb5@#JcXQY',2&)NI#T,V'a`XclYlXirDr3lR-E
+(6BQ2(Pc*G+I$"8Pa9,$06iTm8k++P-Yk0+C5LZiZjV)U%AljX9+hMpcm8ZRj9'K
+6q+G5LQ8VH98LTAF9[Ea6,1P8T6kP[5Tc)Ce5PEhFbR$Cd+G[3Q6+NQF)DR5T3fm
+UhT5DFblT3dTp+P,Yk&[(YjNbM@6)!XQ@mZG-S`5me4ReN!$0KJV*YK9CUUMfG#G
+(Sa@G'6&1[ST0h+Q446,Z+A$4PfF8b+T-V+UhSa8+-Z'++Uc8fXTc3*R9QDPcjm9
+##+R+NMN8jp#K,Q3b)U-A`EqcThG[,S8)V[K4H"aTF05T&&2R5lHT$j89R+PbEkP
+3LRdCGj&1NdT0[8UAN3U*mfI8V+b+'2QUJ+8+G5'R[aA6j9p4Sd)EH4&VH([lZ92
+V!0eU&k9'M,PaH4&VBYE85TR8aRkP#9ZSXaGdUQDPjUcTcTG'R&%,[G44@F8@,JL
+eN95qLLf0h6%aVSUQZi%3Zl1M,LLmAG48*r(SckG5,A8CeZ2c)LUF++Gh-Q#,+F#
+hJLUF@+I[)[BJ&a&`"DhF[BdjqmSe,HK8Se,ZM+iN32DbR&Gr&&+LLde[`*P1+R&
+3SB[KNX0Z45$MMaF+G1Rkk+I2S@p'#hNaDQ,bSYCLaT+FP0&,RlUh[UF05+hU46,
+HRq#E&`iZ(ak`QS&(i%96i,HLaI3biLB3%qFLh!!Fj$&6RdT0)!U&hVU89m(&2Kc
+iUN8XA0#Ml(X4F@A3Ta3cr!)4hqmUELCqblSd,qpS6k%qArHCVD&#%JjQ!)L+)kN
+UN819)UP',@Z"9#+A4'$Q5BVkF84a6*mAe))YA6R`NJ92Lc,ZT2U5pl-Q3dm@!R`
+D[8biU9''A6LXlH+lRN8lHK&6hP'!B01C-!Q68ZiTJTiL$P5S%C),*ZkFqT2P@mc
+Bd*-ZR*Pa!)`0%45XjNblS8,H+I,*#4MYq"P1TEfmU(@bTkC+M&2#(@a5J'RbU@m
+TbTp5Q+@M$2iA#e-Z!8-ZH6j`c+G11-8i%82+&*3T``dJMNcjK9YTdKDa6bJQK`)
+C-8UT*RdE2hkP1A4S6+NZMZ)K2dH&`P0a4LYjm)+dXA$`pC[m@`@h3,92!"BS2Pb
+LYe6%M$4)T8q0-P@G564Xq06RdI!Li!(AB'90e[*ia*8QSa3blZ9I49-a,pMi2+c
+%ZH0RVS#2d01C6NfG1M6Se*pR&,S%ji*8UG)XN!#%9*F6Eca$S3f+PqLSTmN(`fl
+d)458)`c#dM4Yk9[3T@p'M-T6*K&f+'+'K&cX98@Nj9#M1U485*e1T2))-'#e`KQ
++h*lTQTRq"[05@"J9)lS9Q6,HX*!!bC5RcCT-I(QdU5XR&3JH#84+ScU&5+GGdUB
+cV"1(G!QK48IP-%@ah9%G9JQ25+@hQ6lX$,-3G[*Zk)dXZ+K8i!Kl1'+cTd,ZT8R
+AG5%NdZb2a#U+AVKSKbk%k5b+QZKScaqj`ra0rB3bkU'U,1%9[3ThN9E1,FPR8KZ
+kFkF48RfkPmTa8KDJ(LfJS#6%"P*`#8CHDUUbUc9K(c9J0l3,C-Z+61NPA$bCdk'
+'G2)Afm@Z+QN-@BLSI8bNNTeKPX!8!5iS81LjZjm*Ga+Il-A*G4SbfVJKRQ#'FZ'
+H30&BP[E`N!!i@JXj9h+LUDdG+lKiN9Q52!d+,8PYG,-HQ9$Gd5ZU8q6j0#5@DiU
+-Q'c*Tk'aRLfSI%5EhFXVe6j81TK*GUF""ZM1*bTFQG$&V@,bcP@kUJ%'DFQKj4U
+#82L*)LbY-*`1"$-LPY@mSRT+[41c*&Y++F1"-KZbU64P8p`@6YE,KTLk&cEbq!2
+(2'T$@M28#*F1ZL+)j3ZSE1N5X@mQ@0Pm&#ICPBQ'leb`FM`+PUA,T8P8TQ6$"SS
+RNYGm6%Ne-b+R1&k9qjFSYSkkPEcL-KK)Pc!TC9E,["A8*Vk*C*!!@-+E!6BaEVJ
+6j`#'UE6ZkFA%LT8qrPN@D%ZAGqT#Ae*mSeFf!P+I3i"I$3F1L2kl!Lac,#NGZlR
+LAL!Fb"dkP6pPZBDUG#c(bU%lkZ"U4XaU8)BH&I4AfkT@mZhQ'&MH8TQZ)1EUC5h
+3fL(VGA-*IJEb,KF4$jL,K[VkR,PklA6jjN(f1k*PjP!Yd5+&iCDDJJpM&I%-H,4
++AU8q6&0UTNkT#9IDNmTZ,f5Z%&$)jG2f04Ej+I-R`he[$$VDHZSAe'Q3!&adpG6
+(+80LSN,4M!6p0*S80j6m#96iNc@cjNZR,Tdk9'K4S&l5T$aGDM8G1rT8,HP+)p'
+C%!0e6Q%dBR!d,cp2FEkR1SCHC3jciU0'ceY%"YG6i(#TcjFQcLXj0h[*)B#$LRc
+"EH9l%A`F@I&Z+'ALTpV[j2'T9#Y$2JThG#lS6TdVM3kdM2a5bh5-f80R&+Pd+N[
+9aEbK59#kU'XHQ'REcbk"alZG2U@HmS5H,U+P'hR46TAVbPGr))V1NiA'6HP8P5E
+ZG1f9j3Yk&hGfFY`Q)`'*MBbkP19V)Yk%4QA*D%4&-&#AGr%ARIAS3mD,J9+44G,
+rmPa6&(0Jc*RaF+hU'PDMj&#J0HD-jP[2iXA!Yk(iTCSXRQNQR&iUMXCGf6J`5q2
+&2hd0m8Ua'A#%dCQ$4"e!UA480MEPAce+GH5"cq0&*[VHR3h#b@dDCL`[@6aaE`A
+TCb-fS[#lB9FeBNGK91c+jF93#UqM6,j2',pTPf)Tb9Sq3'DQV!1)Mq`&TPl`bH2
+321%NXfKU"9$8*-088ZSV1jVQbk1D8qT#NY8VEBLNJ48B%`Q-Uh900%fZfKCDj)X
+J6"80k1S-,m#Qq*e)UGmD'#1&ZbV83#RPSQr0T)ZB3QU$&2f)T5Xj4PdD6"BX6cd
+,&6fN-CVD3Z,ql[#Y-4J"JQe"NMc`VFSI+cV"LHV1HZ3U@@LJhBd"0dTFT4&%)i+
+4'XS5dAppG``X%J6hJ*QSG6LP8jR`8qeXk6'Z)M-&jm[F'Jb+@@E"UjE"8TT-8MX
+6@Th-3UK3`*5iYic4[10*T`kF1K8SHa,P0&P9B8MHaYc@(BrV"%S6)P`S6m"0)Bh
+35q,G-%Li+,dK13FZeb$8U"$'T[jqb(d+qKKHScjKY8LTSm48ZjKPJKDR!JeH`Sa
+H"8NLJN,4[&add-Z@6La3bE1c*Fbir+-h5(VXcS9#rd9)@$T)X$FQciPR1iKIZ)h
+fB4V)bm$KBmRlQ+TGbIL86UNU9*&5F"jGER9#Y3&LJL"Y'IjA'iT@)9Y&YMG!BLp
+D#`#Ha%03AicHV[#k3EET[$%TG*3%-T5QRSc[+1&TQeiBLfVrA6QViee*qZ9"X0%
+d(Qk48(b*FeBc8!9FGmU!ZeU[E&,PAB#V!16PH`Z&#PVLICF[a(q@EKX9)T[@ZfY
+Mf,F34FC,GQXZeEEqq'kLSkiiN5%bc%5j*Z%4DeQk1X,UQL&fU21-UUC0!h9#D[e
+fPGF)q81NYA8[034Ea1[**8!Qed@i[)Z-Uaa@q"BjdN[,0,flLLh4@(XiK8a6c@A
+0,l-p5R4@(',A8*%A$&LPh2K@1j1D2#8Vr%,f)`4@D(D-jF6K`l8S4EMrL'f-+Ab
+UZQHmMf,mZ+-!'Vq''K50*J!,Ee+K4DU&#bCEBbcAkiE0N!!*04I(A`1(GjAa-XD
+QefYakA8KiGR5LPkeEbN@bRLlpK5@ciEHM-YaG&[44-&Ca0e2QEVH$EQl9Ce4Z@E
+aN!$V@MYI89`$f"MMHF@3!-K,iDZA'9D,L%l%2!Sbq2mA'Yc@49KBh''54kkMm8A
+N'KG9c4U)6,P5Kij55E8Y%A6+%q!GU1hP'U&*0cSAjYE,QVi#jJYL!2i+H+*PCeR
++h%AJ6SSiq`r#F0"9#l39LX[*P4DL61Xq!A'EZlYq!@#M+1V#P%&**Vc8CCMm&CX
+4EHT6,"Y%XkK(i#R)B*Qb8K*DMHiKLeJmqii#S#98ik2TC'eGeH6,P86QP2$fUim
+82Va5rLijeRZF9AH)YUUSNA1eeNTI!(3KUFjV$RQ*EaYVkFYXfM5[&+@5UfY56Ef
+G'SFI$,PU$iD%[iKfHF9qK`4KU0cKVK`i5i9h",BSVeXk3S'P2E+rX-@VU5SEHFG
+Ci@bUF3lkA6CILjb,NilJU,"8&#$@6RhiTEJP[+h1X&#q[H5jbQ!8rPp`UPQH0ZS
+B#&B#+'0-A+CCRkL*(&Y'P,CPKAGN5`RS1U$3H9AkCEEK$KNIJk,-aCH9SVK8*dX
+feSDKHFBh%li&b$D[R#V10HH@)`[TD+RL'KUiB[J,(2XDlbXA`Q#P5TEm5JZhA,X
+lY`8f0p[k%khQ9)UF0$I5MDa*9@$GhII!5VdpAUi%1&LQP8Q+rXcG+Pdh3j2UAc4
+ZPa$I[L2&fMhBkhbSEXmLP1A30h-hJC`AR31E,(#q!`fDRJ%1b`XGaqcXcA@Cf@"
+M`)RaDQ(K5jrX$Te#eb@SH28D-QKmVN'$%daF)K"6AQJ8X8bliHm("i&mb[JXk*C
+Iq+SEbJZ4"QPfM`*Hk(jf-Z@23X-NXPUf2(KS(1pi%bQ08-rVMRC9lB3[`&qmdVH
+aqpGb[Id1F1R-@KaGbTf+0E`eQ+'jABRihi0rcN[FAfXRm1M8f2$RdPk8$0,86q(
+R'25hGRC"aIa5k5lidSm[915DK92K&Q!ZYN[9hi(J"Kj929fF9[V**2XCIV1ljbl
+S@CJf1h4j91C`TP$bYACkhi*hXAF06@I"4+HkGh1Td*d!58c$!"G0Ah+HB1idFI'
+ZT`K9$9@i`3E&YCCr,HR`#cj3q#962961iqrLZiCrP906$3Sdj#iq#&9p-eSTBGd
+3TSI"`UChN!#M6S9$J-Q8)6a5%2+(rNUT8iC!kq+@U&$8dD%kQF*CaM5$aUMRT6D
+khYlkMEl`XSdEk+Mm9$bMGYSd*CkNpC`ce&+kZIL1ZEX9%ZPVVkI3KhR!0eA@VN2
+S@BUb5QA#FPp#(FHq5f8*qbiA%1dG&6e[#1q28[VHcPM!Tf#XK-TfqmQ6$SYPm+T
+`+G-j51",f96@e*qZ,5pp`q)HMD8E$iTD@bYq*5QF+A8m!ke(!Q&8[G8kG6,Qm'Y
+iBQCU4EV@V9P3c+LZlHhRleGJZCcT'*Fm-X[c,e0bi[BBjCaE&8QmLdd%9p8%G-S
+UU+[1GCcck9Md-fChh53''R'LR6*9#I*1,Z%a2XZm5D&R4!'98R5CKErU45DbQH9
+&9i*891lNP+4l8CPh+*T!*S#)@k[4Se,bA[*4I'PQAdeDk%LT[pG98+9)lXUPdQe
+$2EZUJMj*mhJLkG)lf#kKkHihNq6,Xk"[fdMUBf*J)K0TkLH9@QId*)PfG3kp-4)
+Q5q8YDH4Q@+!qKLH6b%I,HL)1K2J29[*'M*++%qP`0eVU9+h%'["481k%GbfQGH"
+BMTjr9dfTJpKc9CQpK[1KmIJ4l52e%IairlqBl+pUV#UeG9hp9pfUr&9He9IdUk[
+)eHCUlUVf9AkmQ8H$[aT2pHGkA9H&qkXa9CTUccDcdkcI9YEbYEeeEV+hD9[Ne[l
+F(Jq@`I6i2k1$p2"raVZ6VVLZe9GjGGpkZriV[IP@dV2b[R5[4PIhVqFViUrmX0I
+$S)IT3r``R2q*l0KNV$ZV$G@0Md"r&'l`PAK1J`RIi6qI*jRNiZ6h(*qrC9PPc9P
+d&PSV,6@@bX[ZfAkX,9BA)iA5iAZm,pl#rS`['`eVKXcKYMK[9`h"`pPKlI$kI$p
+lKrViIh-2Cd,2YE2kGRZV2LBMSm4fH)f@)fq)hH)hD3MT%2T)2T)BQYa0DN)k4$k
+5$r&"LFcLFbN)k4'*lM%lM&BVRm9hf+riPiqAf%[cjIpFAQ-A8aIfmAqqC+Q8*Qa
+QIXa(brTlkELjZAQcGeD5E6SE6[l6p1-VmCh'-qaM2DaPrDm[Dp0DkqehGVr2'`i
+h,ihUFEXFEjH0hH0rMMX(MZEahBBl`FGq,(I"Mm0MmlMqUardXIZXIrA)Bh)D6)E
+#$)9fEPD+bcq$k#9ceGFeqHa1IXXpLXr$RSmI-aqGMp2(kL[Qibebf4bf-bf-bf,
+bh0k5GPiFpBCkZbf$kI#kH`cm1*X*Z(beKSUr2mRSV(2bjYPE5EDcbf%cpI0VmGB
+6C1@XFYBCD[bd1@V4%@1@j1$,@%f[Qedf`cpIPV2,"VFeh3f@HVZMVZIVXlCD#ZZ
+F(NE$Qkl2efEVZTVVQbcpGciK1LPCR$Cl%A1*ZF6U+fja&c+VTXh,#$Q6F60X-YB
+6V#FN0(Qi1G+beI0QbTeILDr49qCX-Y*%[Am[+YSFCAjH[R9r29Xk[bGGE3jDal!
+AZ@Y-Y$LF4FeqA`GcJlP)4L'kFB[RaLa#B2)i2)T#$0M%f@I5%XXrKjeKRm3-+N*
+L,NKafSHMY03d1H6(*#6Mi9c8K-Y#-8k8&M1VK)3jP)5[bp9QFYQkc4IQcrFr*r*
+FI`ZF*RTfIlP)626[%c24@r%kIVqSr"[FCUT'9dNlQ[ZjIkfHRCkGPHRf1RQjrZF
+6&[FYT"FIK5mhYYeYYeZ9%4MV2HmPPB0lRqjbSMVR#G"amp1k2j22k,1qGS-YFi6
+)I&cIDjre-h@G4aVR#CrZHId@IlRS[-c24CkGFi5j`QSfL3hL!T[FV[GlPHDqlcA
+h4#ld3fp%,LBY&qE-p&P4*FYkPYeZ-e@AqYcAhEMq%l%C25K[em'9a-9cK-[pC!5
+3!)N*dqacdlRp&cqL5%b(aC!!q*)6SrNSicrFT#CrZHDqkQLG,$0eRDp"ZFVRKjV
+cQVcHjA-p&)#d3qCk*)6,r@$k0rAGqf)2jm5rrM0V#bUSR%1a$b')INa$Ph$Ni-2
+&&@FT&&&c@IVBh+5HaLV-hbFEVZ6V+UUUSrcBd"GRLjM'aX@NjdGR&@6*FH[M6,M
+Nm%*m8(CpM&35IV'Tr"6*FJ6qGX*-L4(M2#I`56q(F6q,DRi2Q4i"3CVQ-G(I5JX
+A5Jl,XS[NFaMT$dS*8E&jaq+#!8''G+"f!4NS1A4""-Nh,k8(8Y!(Y3BU4+MLJUi
+lr&!e3BUjF80Bl8-F82-f,k88M&i13+,#X89Ha4B)88EjNKi89E)j4mU+3T!!4rj
+45)cp++"a4m`k8FH$&h2Dr3SFeNC%X8G@k8FH6(VBpEBfGMB9NL3a6c1Ml6Z(dTj
+%HVMeXB8q%HP26IY6eN$fTmAdID[i$Rl8r-j"+HE9Z4SDTV"dTZTJJM98D#0"'`N
+JG+UN&,QKSFU*%3F%%L0"*UmA")NB1UP@f%aI*b*-L0'MaK85"j)iTDqVVi,!98E
+RX)JZ#0(%h(USi%!$mH!)Lrj()[id&rJB%IP'#`Jj0AI`B%F')hai%L#2"JAq""J
+B%M!j%Eii)r(MbB)dD$!JN34T-G-299A(J[f%d!Ti-$N#TimE!5DAqpS`B4K%")i
+A`3AprJApq'+GadA4aN%+Z&mI!j%&r"'rc'DAa`Z(`4GIhpNmPRa)V6F4iirJ)[4
+Ab%mSl5++Z6IaR`8FKi+2m`58+B!U@%k*Z6BkEMT3"2'M%2B`a56++f1")3p9b50
+mJ(4Jb-kNE'#'l5MD*5'#")%Q@ii$!Fd'8*Ba'J!hFVEJU"648E&1bb!6&VJR"Y*
+'1k'dS'Md$JmaJQ$L4XJMQm#bE*i&QRH#BXJAM![!i--P)H"KX!4$+16J`dA8Af#
+lXB632XC%U$6MBL`H"Kl&)#635#DdMXr3X,c"2BXmLk''9"!BIBbm$$!ei&kYSM9
+[r#,3aq"cC2(b)1K'-qK&)m%K@Uj`iYAKqQLV#PJUbI3BCPEeJbR@UdE9DQlI!d9
+%'M6P40Y&Vq"ej(%*eFLXUK%B0JeA2)bj))`6G$M'0H5%(il#!6Mr4""9aq1i3ai
+12@S$4%KPT'`LD61a9SY)9+cS6Ha3Y-[3S)[NfL69Dl%Q,i3cS6H4*VPXR@B*Y%U
+e#8(qAb*N`,JNaZRJ@)l2!U9YRJ9EADB+`)9N!UNS#ULUaIZ9%RBZj'"LFY'9aJG
+9e"Jk`5CH$D1X(!E!&3%B1XNS3q`K`6j)9*`dU+h6d3YN3IC$@Zb'2+I"!m$lEIc
+j(h)U)N,*lXME+'dNBkS4*H-*)l54%UN8G%M*!eHCGc3[rb*K'aPm"9PJQVRXQ8T
+M#BNpIm*PFA+%Am%k4Mk*LY'i6YKNeB1&#6JPhQR0K@e+ZLaPLCXrVj,+aKBi9QX
++eVh48be1LXc0ZNQYk9M)ZAhf@'R#PYSjNZV+@@6!ZLKPVA!MeG8`TCCMD819"Ub
+1apf!+eUQNM'iHA-EDA$0l)a6)LECQ`13!'$GT)V3650V@X*(SGq-bFL%%4mB4-U
+C[pNQ!bfmbpEJFGi*(JM"KK%*!bqZLKT54N45LY1BXA!8YVaY+9IGH5NUX%Hd8#J
+#KK1b4&j*hXN`(C)CjiIrh5`UUYl+'DSV+h$K11'`RD60$@%cN!#jeNhCT24Sp$B
+`$p$P@5(ZKY5(2Bfk'Q0qlQa3ma3fMrSX`9`C1-j"9SQVQbei'BQ(i+4m8pLUX[Y
+&DYd,%$h"@-r3U-)j1'@faNeZP-Y4aSq*3d9c@eH@$608d'T+'P[X'"a$6-5$`0-
+RPF[&[XBMBP(ETY(i0+kJ`E0F+UHaY#6,Slm'ferf$GA9NJl4YX$hJE@0-53094"
+eZ14f0UfXjT&@fk6i1Kmhmh,,q+Hb!5ci)))@@&F'FM)3I'pYf8IZ@+N3!J*p58N
+NlXJa4JU"dNTC!,!CM53kF!Li$11NbKlMJ4mFD-Z8&Y6C9lhl(e8jMB$q5*9c(#+
+rF)Sr(3#%8MMb#ZJr4%3RH#4Q-0d51L1@dME1k*Yl)dbc#5!*BdC%dCB*K92*)p1
+3!2C)S,+ebk*'AK@580)hC%UieFT9Q%8#kcVi)R0pPPaK5cZKZ#@F'aZ,2JE+TmG
+3JN$H,D"*G%hSK@$6+T4GTE@&IJf13UI-@cVj!kaheNqHaf&6(0'f9i(BfY9PQ)"
+rBe-D0,5#r`D@)Pm$EH9"`G@XQZ69m$a033qD1X6Vb1`9M04j4Z31b9$i[L[rMj!
+!m%+Vc,28h5%L"`IB36&Lp8mM#"EBDf$@@`d3)I!&K!eG[`JF[dYc$-YjZ&M1!9b
+a3rXSCQe45S%ebl5l#L"l+8(XeFA0IJh8(C1R+B6e8DBN@hMQId9XcD[*BhHUMNL
+JVPerJZV%@ajNMP0)r#A"jh)PhLV`5[QZ%5Q3!!$Im)cT`PRE44#PH%0A")#(5[S
+K@#D1L@$"bANPGNMcYEYcEB0f4ahl)kTk)fEQ,qb0X#ANLM2"%k[r[JM@'@4-b'L
+GlKc-IE81c&K(MeVb6XhTh0Q"`RF*RSPAQFGNb9i6Uqim&$p%6NL,d40eph0iaT)
+llAEfj6b5FS`NEZhZpNal*kaZmNhVMZbGe@qB6`9cH``hV9[p1CdMRK&HGp`XJ"@
+mP$VQ&F*AA$Uc2D%VDj,%Qr4,)M`ai,1$"9eG"MR2))rCGAC0THacA1q@qc)[aaf
+',*`8B9dJikQ'6)`Z'9D)l#RUZV$S+QZ5%2JeAVYNB2"[*Uj`r[XbI*MJh$"R!Sl
+-C)MM&,*0-8&IA-hS'biZhb9Lai0Dek0A2QfIXk@dqf"Q%#9cU*BXUei1Dp9PdFb
+ArabjiC(p(,l1''lI!be8XBDZBFXZR2XaEiqBq$bM6*[5Fl9$,6cdC'S`b-L8f(G
+',Hr!fPCfBYNKFBTeh4A$8fVAJ`GeFhl-))-)m&q!LpR2kl,f9XF'f%l64ck2A1G
+jili#fHPJp3$@j6P6T8UPc8ZMjeiC&%"S)Niq'!q0QpkKecU!CGKBA*JcqYEiB*V
+82aJPjIhTJR2@kqMjR'TBXY513!Ib`$B"S&P1Be@aSFp4lSlCq(U6$`GZTDhbFYi
+q($U##c-[MRQ5I4c'MeVI!F(60jee(a(,SbM)b06pKQkXVZc*XZMm-AC@jQRD9Q+
+&edBYTT9Y"l+99LC8jCdLX*KBmQ8q@,*5JGAD,H+)'ALT&DLT$MR&dqab"mMM,Hl
+4q4!Kq`3qrSHDj6d30jN(4!*9i)(8Jcf4f5VI@+eN'%LVm(hd)IBA5+dKQEJeFE!
+E%ijXNSN4%G0BPEYj)h9$lZ%`5-P0X8YJPFr6YJGb&Vd(IYJNB8*kT0pA5QGYjK3
+hjiNSQ8`S[V)d"mKJZ`6GiacFfGrAkSa'N!$@ReKM"Cb'piTQbD1fl-X-q6*3mGH
+bpKJM+U2B4meNmb-&l`R9i"cmcB-+c[LXlrVX[Fq'M#iJ$@4RCE(VT4E-`'4$2MB
+lq1pq&DGljUpBDpf(aRaVj"aQaMQd2K6J3*5LRZ@HfNjCH4K`UEfldRZ2b"KEmN`
+4C)D@5JXMhq!Ih`6'2`YJMI0JV'PbrE9Rpa9fFAJaMAmL-M*Rd-Zc-B$!`(CP$)a
+-L6JMaibV#4(#eNll[r!#,Dc"1&!2B'"9acQ,G%dBra&mFFkfAbR2VXN4Z4!dSCi
+JaL"h+`f63UJKUX6)Um&(V*!!&F'62T*N51MKUTGh'VDSdlaSe#ZVU'+VUTVCVMX
+NfTkrfIjjXB-695*A5C2Tm*%5XeG9LiTY9dX99(ZH6+@V#2P+[$5!Pjf9ePK&!Il
+MUXZI`AJi-6dBM'*#H*!!+Jcl5,k5-E&@8@&UXM9@XE#e@CN9F9HHYQ496)dD[UU
+V*Pbk)j3CNLUa4d2e99Kl)b04'a0Kcj099Je+5MSR5RUX2!NUIK1)YU9(aUS5Ua9
+94IC)@&ldj!*&GUdQUX68GfQX-XZ98l64k4kV"USK)(T5'VY8m*U4A-l00AK@)CL
+DMT0%%K0&c0a0B0UDVfTTRhp06FGUEN#EN5+X6E1@Pk@cbQf(iQa(ZNhJip@ZAGU
+CVQ*JcI[#B&AKC$8aAb*-b29iSYq#8XT&A!a*5'T+5*+6"&#iNUUYUX&KF+NPKC1
+1UjY9K-&KCFQ-NEJNMF0,Nd)Z[LCh!bT8)1a%'N0(`iJi$dG#$5'a!JfSC)D4C#$
+BUV##4A39QcJJqC!!36Sd'VJMG4")ajqh-#hDl##Vaj+("(am%ENS+[NPj5"(aXD
+a0Qid@F162h2JM#Y(SP3(V'AYfcKXP`4mK")%5Ikpl+#$l%%B@'&JM"594Mc3042
+cf)DkJ2!SV61UBKXr![2#)RV@BhZYJMAd%MUi*(8X`"I,0bCL*'3@E+#$SQ![BQk
+j""d-%"r,A633#Rk'1+f0caHkJMr*9m1Xk!mUX&Ce-&DB1HPJVG#Nh9pG"9RFck5
+#Vdd%RVfDRScLe@Ph5daVY'G%8Q-m)fHJ@p4b556L*jj3)e[G9C4pF+%SLaP$&Ec
+c)CYbU#2k##4Ji*(5R(j"JlSYd39YY"(2dB%54ij3qh1#2S@)Ej56d'J5-JqLS`4
+[h33I26P9IhL`bPQN0LjNMXHaJY5jDCSB+UZ@h9(,lf#JVeM'0LN[D33Il`3(d+L
+*'KS,M8NCC6#eAU`3GI"!-93JMGP"+)mEQ#2fN!"()ED*NJrD33Ip33G4"!4JbN%
+IQS&l(5EXE3Pf#NJh,3M(2c&-FJCCp5fZ*MQ@)c5`4Y1b!4*TdF%BQ)1*h*34cPM
+k'#2Q))q06e3F'#$b))2X`(MUJ*+a*C!!Bl(b91JYXBJ@I)3K6C`(516a$'aZ8Ma
+L)PV""PB)iC!!F(Q(cUqH5$Ri*!j*$M0aSfMJMIRM4V5-%&9dD6")5TpbChE`3D'
+#2d#mSReq4bm(qI,U[0MVXZb*0E9i,$i2jpGM1ZfrqIZG4q,9qGe1BpcdIhHIk8%
+EFf8i9r6ENMVNUf0GNHqJ[1DmZ$"i+60JT4X*K0IBFped'JMrJ*Yr,Mk#mXi++l"
+&9"+PI`kZ`%Hcac9@DP5phQY!,h09RG&5ZG1YGH93,Z0`-*QTT8kRCe-RGaYbXTm
+[QZ0fr(rAa[&jVKmekprrVlrmpZ*6eG[mHh%*jfh`"%qFNPZ-$im$FB($`0rJI&S
+p(SrRr0[p(lQMdI8p,JB(p[Qk2UIRqjlR5rZdHNLl2EqEJIjfqhiIarcqd+h!`2e
+i%@"V-$M#eLL[a$Iimc4l[Gl[BCA+jArA2E$+T%*#EIaa$m(jR-mcbr@IAi19%4M
+Z$`H$Zf*,QC[[`BR(f9PDf[MlIaaK[Xq2iqhfrMq2iq9b[[l$+lIGq2PI(b[MpCM
+l,6mrPGhPF[iqA!VGj88r9m(BIbmE6kI1r+dhbZIcZEqhTXlRZhqcp[0fA+fA+f9
+PYr(hH9VYCV0Ch(EqRh(EDIVr'mER1iqKP-T2mA[1mbPaFC6+@q8bQ8`8L6kB$G$
+irLGCfrdqieQ`m2XHhkrdr'p26qRU1`bR#bQVefZr2XFlh`Y26p2BDIdqXkldlMV
+Zmf1RfAr'VbrLqRTplEI3RcmTpA[2Vp,EC$%VM'jA$iR$f9PME,%G*N-2BlEBE6B
+GehAJLBbBK-Pq2ZX&BE#6N!$j2bHUe2JkR9C,DDR0l6DE69DRc,lUr"cQEe@dcQd
+e1dfQTjqilERZfjlc0KhAAGGTX6Cj(6C(VZCYXMN-4NFMTVA)fZQb14e'SXqXXXE
+KmKN-KKm2ME+bb1Sa(+k,VZbkkAU,,$C(6rMe@5bHUm(HI1qGfhc[RCc0m(mHfff
+fbH`j[BC,ZXRNpKIEE6rUdrDDMUqUXFABrGXCH(`f%aR0Bc'Bc)mVM-GSqTdIbcS
+TbF%h"5G(pI3k2Ni)fMXX,e&AlfMc99JK-p*MY$1MD1a`[j1Hd1MRbG(DDQbrMSH
+,JH$Sl6LIfXI'qEch&q('I)qEYXadfMkM'FAqhcEUem64jA4hA&l@kdIip"'bmfV
+cr*i(b0(dfMl[Zq8ih-b+[!jZkd2b1Nk6T-hlfKqEGD24il"I2d%RNSphmh4k$T1
+HZ0(Qp(QkZidAcqNXG'980""SG&SqHUj1c`+r!`+q`hNUhh0hChQjZl#GGjZEK,1
+E0b-h0@@Fd'1X0"QXeME#EhPhQTfj[+')r(-Ljhdr`C,KE,j(+INa'Zi[aAfKcRF
+q&QqZamha[[EfGDlbK6j(&qrqq+I`['pHPm'mLhqidqXhh"d'fRAHkhZZp5`Qj[L
+Haj9#Rm'BpMa[AeINF$MmEKlrlrVjRPGGjQJprAprXl(BBE%jc#FaqQkZ-*d'%jr
+MAQLqAID(RZ[kc@cVc2DHGYXMlG,UZ@`R,h15X0IbpKT["af1chHqEEl2mHJpU`Q
+kfiQbV1GGheeq6k1'jI1@'[lc`I#q[qQilfEqHfdHKqceRHp"NC[GiffjqcZ-MXG
+&i0aCG"MEbdqYHrMfhHHeefYiPeqHdk(kd0,UmpTIXfQPQrB`[3ihS0VBqECqCFH
+C0cAGGjBCTJaYJAdZ[Y0VBDqE`EM[E(0k$06Fe0crV@GaBI4dALHaEr(&kR*FPfA
+"r,r(2FP[ZNkUdZZIkV,f2emKkhl2Uqc4i2!SJVRXKhpMBjh)f&hVrrrdI6h[p0r
+k(PDcr2qrb[@lkbb1Jmc1EZ'A2SJlDfIVFaeGahYKIDA6GRk8cQ26m,ipl[IcB'X
+krpmhj3hFlk1Lm,ZmERXEjZ&fZQrCpc9FYeAJjc+q$j(l0YS0&YY9D8FEYm,UXER
+!NR6XeZqcdGY[IYFcraf[5rjp2Tm$iE2B-*mllHeYY&Vl5Bl*pEFBAd[GYY*qhDm
+jP-TE"2bmh[qqZ-MXTreZpa[JihcFIihe[fE,QE6mT#r`HJX2Li0e0Z1kY0"MIpX
+,MFjF"4VTdl0h(Cp0EE[[EEmhBG*f'dk$Z[U@p,LF,GqhhQdZ0IDBA(FVRZM4(V`
+Mq9drClAPXTP1@kI+FVECZ9hf[lc3rHqMbrKikpk2lr2FVKVbbqAR2#qMcr@pjB6
+Z*MI#Z1pZ-j1lcSFVMGGqA`V5dlUEd'YlcqhkFYqEhHTrjqpV2Fl$aF*MHJfR2Bk
+aZ1pcPL%1NqYd'dY-MrVJI(j&ed2KG,Sp(GEM@G*RZ*JC5rhh&pMZ2kMLp"Hd2q[
+*q$MFPq$kIGBA%H(l(2fZ6kAlfXLmAiZ2IH[m'5h[(ml9CMGH4[Zh[V6pfklc8G0
+P[cClUH&PIqHMlIe0GV1([pa8[rIq48[q2j(`809Q2AeHaRdH"ZYM2rMkAZdqil2
+Dq*ihMDl&C6+H(0fI3@%rCf1JR@&KHER#@&KQl[iE#PDE1EH6E#I$ZG4B@FU`Vm*
+CmTNHCbZBSA(4D(TE[X1al2Y+1VeREdpEhQbqPj(ep[pbpqpkZjpEHq[rcqcph"r
+Kr(hrkF2LmEN3i6$@H+aH1b2-CAR-emRSp*e(@pKfY+Th[Jq*p6k[fVhdraINpMp
+Ilq&r,rcLIerYa[mhq"Af2*iUCMZ9jM*jDIQHGc@Gk(SlV5I,kc8GIf0GfNMY*(E
+hQaf@emMk[frp[[lRH-)[qrrq0b+r#BLEN!$QFYQHHk$SZMd1Ld[cG0Tq[l,YD1U
+eRF4DlBr4m$k@emIbI-q[pRlRSHTkNH8@&1hh&VQ[kElBfZaYGMRr3lVl2QrhrPh
+(@l(Bphq'ePHEDELfh&VjZrhpVjZGMHEDfZqdfa`-,[*qqmA1@hEqI[VA#f[hI3f
+1qhh`ElICrcE52jXIZ20lMcI0lL9Z23lMIrhkhZ2kE(mfrPFc+hh@e@ql[BaX,'m
+A!heCDpaDeQqlH9qIBpa'lQ0j[SGa'p$VI3P9pI*P9h1F['rVZrE%(e1JPiHV`Kc
+CQq&*Mi+X0F1bCrj-ZkY9`99KJS-9Dp6maIC)EGCm6UfXAXV0ZieSc02*1!$+`4Z
+KFme+lViJ`"2(pA`5EFrQ0)pIY)CjUYE$09PdP4B'ZXG)aXD'qJEEUmq*G"Crei*
+8lhUep'HCJCBj`DSr+rcJ*`A-mM&3ISmZU[)jXe9G9*M9PEbI*B19eIAFIMrEpAQ
+1(ih8r3r$rpQT+dKbVb#0X0G@EQX[))0r00Cl@pe"m*`,3CIcDU$cCXki-kfj($"
+q49CVFR#00AkD36ZJJX,$Fb61f(P8,f9"GQG52L[jHRm(p[miVqIkrI[qdrRYp[Y
+rjlIcrrQ)Il4V+B"V*Aq"Y5TVe1"lR8p,Si[h'XrImBeD2FkAIkc!kRIqjh2cp(a
+Z0[m$ElIl3XI2`0[jrai(rfhh'"!BFYTff6bIcmKY-RfbakT'T#Dc8C0a*HhlHdp
+[fmRN2Emd3rQj0)e)6EC-4fdp[fIdepC5XE6)cqEeRE#XeQRlE@DcYZflE9fYYDf
+Z3qKMpAMpAMp9NE2X-CE#4ZYAd[EDc8#Qkr8DMVHPl$)qENrUkHfYXCDmVDL&b1V
+&MT1fqKDITb29C(UV6)GYp#f&9DcI40*rSpMdiM0(k2"%0Tp2T[4rAaHEbQ8q4P-
+CM0CV-aaD[NTf+kITqTp(eY2feekfRp(dHQ`h"i2SpTMr4drSL)i2c-KaH,jrb-T
+dQAq4Q0AGFA,k[,mAR1Rk3dJHM`HCYI4pEeZ$Q-ambdc2dqNbhAqMc2+lAT3@bqV
+m5id1TZY8&HKZY$UY$D#*ZK#DA*D()FRDL*jAVH9km3qQj2$#'j2%mRBA8LEDD25
+AAYAA9A@KbGeG@R9G9SG$SG9i0TSFMDD(3fPeS46ic(k5dZV69C2*IUj[*j29C,`
+mPiH5mc8l63p9N[$e15bA0j,*H(GAAJfQ4&CGA9d,d4&TeH4m1kk[V-BY"PeD@RK
+rUmc3j,*D(3q*T-EDHCjQTe1TbAKj2`mRNKGH$U61Tq2JlDkaPMIHCUG$DGjrM[2
+Spjqc5p"FCqihIbC*ljlM'q&d0h*Z1UZ*[bBh2R9IFH,d0aiFDikUEiA2`h(EpAP
+I'Z2cIpI5d9rmRXZKeh4r-a[EGRN1Kc9H+$a[bjbjrMFGR5%9RVMpA!jrRl2"e9a
+pl`UcAalMAh&(AhG9d0aiYaQp2*Z1Jm+ia&9C@AYmcdG9(fH"AB(ar0bGKM*YjVq
+m[,$0'CkaX#jrQVc[,ZEXjZDYqIq$eq(5pM-Hal'jd1Ej5KGqE[I"d1dX-*[[JqT
+Up4UrJbRPC6a[dFEMIprqq0G@'jpD[jIFp"cGKVl6P*I&pLhq$-H[6hZphAFmEIp
+Plq6cHJd'6Z-*NXMqI+mm4@lkmmlGBR4F$3lAhpYKpRDmVa,[)BM5rAXYYVmCVmR
+,Z[XhAelDppE*rAmZmepjm0RNZr0U,EGpNGIDDR4k2j1KjkbRIPZ2(qhp[jhHIPa
+ZlYFMl8lRrZh@-lkma1ekV3l5ifeKMZQYVVbmeZ,(V[pF,M0IDkrQjIJrQ3GX-Rp
+BGkmXl61BR)m,C6pIDDV6kISQ"QDX,beY2QDEZqMql8eIPH9q,RIld2*r$reU0IB
+BlTq@`RfCRb-Plhf,(9kqejZAp,SI&l[+6YIM2bILiI4qIrej20mEbVhDEh6@IV8
+*ZkR'9!%1T"#E[G2qhXZ*JB&6HlhrMXr6jZdZV[jA!d9ei2Jr5kE8FYiRPl2kq[l
+I(D(5H(lf5kll'daQ[aRGjQAi23p"hH8kVAfhfI[IFY[6pcpHf`2QqImGLKMPXMr
+cFj9M8-'0IMrfpRJD2jKB+rpp2QXjPHZlkclcRrEeId[TI@pArl*rAh2fHKX*ZHq
+Tf0YQ[``j2l[3fR2E[[ZSb2eY9Y-ReAHCAT2Xr-kRQ[qrXm[rIrHEDGq$'6b@0m(
+SFjCEEElIcL+ZEcq"mIm0[Yr2dHMkAXr5dI#q,FI6c'qprq&eiAKIHlIhrhhrGCM
+Rl$'HYk[(arJkhSc4EUIdH4krlrMTH[U1,X-CcqqqGqMe0rS[2rkmE8ImrIZk2Tr
+KiIFI[bR$r%C+ma`XTP1Uf&R`[&pEp[Cm,!`1d*JZcrfe'0epPC5me0aQDQkh0CU
+mZlLIVqAb0[QK(6VbmXrHKhGGCBV'C$PTf@c1Djl2AAbqSZqXdrAGIf(CdHfThRH
+H"p,`r'mREIBqhrYpllriElmQmr,qEHqclAZIXrEqrJI`rPr6rhiIrq0mA)Ka(+B
+hPTaNVk(3D,TZTdrCDVYZjehHrkE2`[%mEar)mVk[f0[p[cr3p,e2ppaq2HIRpIf
+[eIpElhZ$r(qIrh%rVaX#U`Q(PfQ2jDG2SA'Hd'NkHl-XhEI3UGeX1qlrCq(j'fm
+hc[3r"Z2arNr,rakrYrXphII[plJr`prqArKQGiq"K-,CiZE0VX$!jcP2*plaX9j
+1+mR&BIDrU[Z$Fj[DD,&BVGrPmR[TI+I9j6bI*fANq6IiU,m&2crEbreHFrPj2i2
+*SEA&Id`m["E6[Z8fZdRA1LfRMI6pV)GpSYhLT(i*(YaB,bGTj21ICa@dNI5fZdN
+EA4E@0+GipB+VNMdb9XHUMmP'2)@ch2'2'2'VD&bH'%`qf0@['DI95Bac(6L6`FG
+Sca[R,-Bk6cBf%%RQej%PMe-Q@8JK-A2A`F[Nd[l@3I`@XB4e!eIH,qMPjb*8'4C
+d0eR-9dUUrKr,"A'$kL6mGCRZ4rrrabrq`JplmrphV5B[JdQ,hIFe)PpJ2ZG,SZj
+rGm(NQ%6N4ITqIdapXSLpVSp')EHB(lZP5MTeAb-Ta4%ChhFlaFliJLG[YrGd@9Y
+qlp,hI5l[Y2r[r0lq6Zl6*i5cZX*Kmk*cqIfrGSIqr@b[b-[l[LH*RIGm6hFll[Z
+jd4ALCLPTG,TG(aHRl,dZlpDKhICHYSqlp,1jhd[%5Em6dXlrpiRTDEa1ikc,G)+
+hLp2e[TDAU1Rl+0Bp9Bhep""XipEPm$NXKb,(Pk8I#HEUrlfA1r&Ci[SlES2Xmcf
+2q-R0XEI&CcS-eiHN`[hZZYV#YVm,bIQ3!'UVICVG4$LSFr9k#[ZI$e@UKj6N[ai
+ER+r#p(AiA[ZqUr[jh9@AZkQljE6h0E$TIGqeUZ5ipEl21BD[`ZilkVd(KqCf@ll
+k`kI$H($bQUMHl'jDbVE(Pp9'qCiFD-G@d&D5$`U4!rYIL'rqq'IT[[U%h,JV-fX
+qrp6h)'MQ$!JjFNrP3CU#jATJJ`AM6Zi`N!"jBLY&cfPQL%d4iY18NkEXrRGINTd
+"'P[qQm"D4E+ph-'-[6b6h[C3@BL-0Hlk#AHrbJa0lHL8mX4(,Z)MA`FRkYr@@2U
+pj"K"#Bd3Q2%*)RI+JUXcC39i[+qpT39pjSK%H4"AhIH3!&U*3fAi,$eGR"LCfD5
+%JVqPkk$(!jN83E[XS)mk0b8Lpr$KiEfhJaRhmV"0&TM2Fr+'P+!6'%`AlIi3B,p
+YK"Aqcqb#CTcfb&(9A1Vm+Hfq#[%jAl2GT#1N4"Aq1p)ai4NLGNB*'C%*RZJJQ@Q
+9JVmmQ`p'cQA[cKm)dl%$`BQppZ$&h[CmYKaR-,Hhf*Y,flC!b6Hqp"b9l[B18[I
+FQf9l'cH3!"+*-6'+cZlDCk[C3BUpa%ka[IYJ*IBe*bAHm6%mVHm5fPh[!QblhiX
+GbB152freJK[Ir"%H&"Arl6i*(PqDRNXDmL*@hZ5jkYRBlRUqplh%9Xl0mp)p@rJ
+VFceJdKl20RH3!%MarC&*iX%F8'-&KBcVRj9I1bA29qC&`+LXRH0cf#R(da8D*k2
+!3RH,"KThMBLZRAX%S8'#RHT"AcZ[`eY1ki&2[39rPr@%*hj-6e8[h[m#(0mR@pe
+A*#kD`p@p%2BX5-[i5I")4)6hNK'Sa5LBRe2EJ`r`hU3M84lel"*q(hNK'SMh[H)
+SGN,3KCm2C*!!M84lb3RC39[5D9N`N[i5'#3L3JV*I`ri+'0I"ba&#[[DT)4U)mY
+)4U-a-lU)+fI6J`Gle#3M84jCq'9kILFN)N*jDSBZ),(bcMN%3N)a%H@N*F%8#"(
+5cB,%9L3M%3,43!XI9PXK4VHk`G9KYc"9IpiQ#Vd(V39IUkZ#6bfCJNr4r4"*h0V
+"JZSam'#qCfF'#l,#`B,mRr-&Cc&j"@FjNB+c6kD#Xm6Q)+c!pf#Ye'`JVIdj5$"
+eZ'J`HTh8'$fhqN'$rE4JVZ6k5#ZcZ,JVY9lm&Gp[mm&Gr(lN%UblD#9FCU#9Fr,
+JPG(PS*9hrY"AiAai+rjAq))F9RS)H8r9"$Rr,JKd[U`FPZZqJj,NGR"BG1HhRPr
+PVljihhHRJUprkN%Rq'bCp5YCh[pi+brfX&EqcjN'$Kc-'$khib&AqN&G9hX&GkG
+F@0#c6r[rl"b@3pTPK1r&iclKI-ad%(j6kd3)J(lMH"QB)rhq&")Pd4#DTRrfeCC
+iD##IdN%'Vr*""iSL2($,bU*pZKJKhhL`3Iblk#$KRjIrhbCf"pNHq3l)GK2JMB[
+'(hIINJMCAkN%E,Ga"'c)P0!B21NpD#0T,f#0T6lU1Y-$2BGA"'TF'#0h9V"'l[r
+5#0h`a'b`d%ECQ%cE(D#q[0JMHER))hR([1mrkm%Dp!JD50r[im%BEb0qh[S)h"&
+4r3#2rIKJMIhh8%Er&)rF8UM6IMJMmYcX%IQIX34k'e26-)6T$mcHV[i)qU2FchR
+@`4ae)rPp&"(p$Q))r%`Ll1N%M%I$")kbD3LP3DFp`AC(1TN$X(r)%*D#%j@mJ[1
+T%4ejHrl)r'&qdjf9j'[2PANHmZch%j!!JaJS*&jD#%jL$Z"#8a-@iK+&jf9j93G
+VH9F(@L%qH)69#%kS3QE[*-'I[-&"R4#I*[-&HD%4(EZ+K,"dU"DAQE%4T43G+)6
+0L%dJX1Q%4fJK1b%*UK#I2%*fBK2R#%kp`B4!$N(A#%kX3QM%*f)K1f%*V"#)dd3
+1G-)65$)G+)6VEbX$LX'%V)1X%*TK#DLmV,c8L%b!S)hfqG`12r20B(qIH2qqrUq
+K""lAbm$ir@rcJI(e0cJB(Lp*JB")BIU!bV((qFIR#+48N!#TIBX&mGF2p`rjCp`
+4Q*-k1jK2JZBM[m`9@KZFfGjq#fd$84cI4mrdHL-9HFjr2p(F#3pDfdA2h)L2D1M
+NYURk`J'U4DVRIL`-!q'&BNCLqM5-`PNNCd(f8M-Ip*)cXIm*'D61*'6E&)c`1-N
+CLXiNCkkUp9@Dm-4NE(DG)c#rH5-m4K"E@!M)q6e#4QVrZNCIk4)c#HD)`q`P)bY
+bm'%Qb+r*+Z&eN!"L*XL(d4[2CV1[kcVHdqGercZhGSPc+'iK`!!!J&GSGhKRKhG
+SGRGiKhH)H)GQH(LBLBU*QAGhLCQ*QBU)ChKhQCQDQDLBQBL)QDQBUAL*Q)LCQTQ
+CKjLCQ)LCLBKhKhQ*LDU*QBH*QTU)UCUBL*LDQCU*UUQ)QDUSUCQTPiHAQTLDUSU
+*QDQCUCUSQ*L(Q)QBQCQBL)LBQCKjPiKf)!!"*%9AChQTLCQJS!#J!!#J!,!!!!!
+,!!!!!!!!!!!)3#*%9ACfCiKRGhH)U)LBGiL)H(Q)QCQVQBUUZ*UDUES*QTU*QDQ
+TV*bk!+U)QD!+!,!+#UX!#k!!!*UlX+V-!+U##8!635B)-q!N(b`@@NM6H5k(SkL
+Rj,SF[QkINZfUB3,mhcI2G"KUr(p#Lb8cMk%!dRIfhRXGk"%[fqq!Da!59"b8KAU
+9PTHp`jLq6-e0a,l14CfHRlpIk#KSX"JD2"B1NM4kA#8f&j!!`f(j(%IJa2*FRbP
+28909LZ9jEPmAc(-meM2`ih(5+ZXapEAFhcR1mpcriZJk(mH3!1Lb24p*NXRP-Vd
+[6INkIU-YqAUDr,jMUZVc1DcI@GEehjZ[l$XHbcPKfHGl6YHfcfId(EpaSHjd@MX
+E,53@GTh@Pl[6GjqIp'Rlh[Zre&VUI!m(p2KIUe@VrAiILIXmA@DhAH0Vr(rEj(N
+q9qlBHAqrq(mI-f1bmhc[jIcrTXrkqIk(Srfp,dlED@rUA(UrhpEDq[rMr2qYYr[
+Eqal2YImp[h2Grllh[rqrrZ2Jh2`lVGh2aEcHr(mQqqAj[RqMkGr`1$`Z(pA%q[l
+2YiYephhhI'ipi94IG"Ah39pd&IG"AUJX,-FDNJc9MHXG+33ZTL5FI3ArVBmpaqZ
+TG(lherMrVR[jd((bH6bFQ6amR*bXQ6lZ6kN"-V*qc*k0`-kQ6Zj5PLaBXp&RSY6
+6cdT&R*kPLe%8YLUBX@SU!DUDQSLe048aDQ,8aEeK)l558U+N#TkHTCjJA8akMPX
+a(DM!)'k"(3Kp#$mL$KUi%*&F"f#""8mi--#!&3Qp$8l5r&mAaH-"P+!P05pR5r9
+pAeHDi(iIND@Pp4"P,KD@TR+QRMFKf(B5rXjH#P[m+GRDQGUEeb%TU,eKjQNh@kq
+Ib-GY0CHAHMYYTH9r1d0mN!#Y9PlfjD[IC`YARjqr29UVPUDY5TkLUaA,FZfdiY0
+I,6(p@PrPHV5hhD6qlBE$@`Vee8a+AU@PVe&P*58[*0kNbPj!C5TH'C'jDCJKQ&D
+##BJJj5CJ`-@#AL`69q@aG15N%`E'R*`3j5$NC5#q5m%%V"+4)*@9JRm("+hU$!3
+3AX',h"QJ'PN'5Pk%Bc%3XYaSd(A9pkV),e#P06U2!NpG25Zlh94b&jHARcA(ccq
+0ehFmS@dUeSVKP3,dEYX'6b[ZS8dFQkP*qQTCf9TieE&aq2ap9M`9MJ49!E(Me@2
+Me8I(iV(iV(`Th!cXpMmI@dmI&AV(b-8%ek#+Ya99)VEeMqGXTl#8dr66mm!H%`K
+MF`P068f%9ND#X)J4S-`)#'P!DQ`P9K+TJUJ4T26-(%$dU2kE#HF&2R8e-"p,K)m
+@M`8@`b1ALd8@j"f,`d#i#,JCfIQGT+hUDJJQT[RICJfRYHrTV58UkZ2q+GSG0(X
+HEir16RGFIJl6)b)GpZVEFmIc1,l5#q$Sl[LjkmTC%DNHmdm@!c5d0&JF&HX('Mi
+5p8f&HCS9QJjIQ1Dr$MU[(eh0mlcr3C!!b25C2+p0dq@kR,pAQZXr0f(BV$bBH0"
+fk`kk4Q(0Q(,[qrr6qV9q(qc@DlArYmRphPr`mcCHGr2CqIk2T@e[FIhf[q2pIlp
+MfRc+ZrQ9AL61pSqDM6&k@mj-35CD#DqrMmH6"Gb3!"$#1be+@P9Ka[MYVdh""JB
+)*Q##,#@(fpai*Hp`&[XVJbiZ#q3S+)Y'P)1C[8&mRB*D@JQC5#p8X'!P)-"HS-c
+Hi*B2'@`bP3@`cRAFDLP0YVEh8QiR+bd5AKdmjAc&k[P$eRQhIi2-pZlhqq`[qH`
+r6jR*EIkGrQq,r[Mq9d8()E5alJ1)F&kYE+QJY04"LYlGrRfQPKC#q4r9`A9kI5H
+YR-E[[h8eMq2RH(l023lcBjIEfZdKl'Nk,`-[DqrhrRlrRX*&fH-l6Vr#dIddIk2
+)qZ8[Gldh2IepIimKm'rrTh[0r"`X'#hNkfqB[(4Ck`rRrRpARrLkqaXSpcS[LZS
+)e2&cR0d[)Ec0jD0""HX$eGT-AdSKBhVp(aDlGf1CYiF2`qKbh+lZ$RHSjkFR+E'
+B6K4Tf*bRjr*m#KrR,I&5pK6GTSr8`f%kEqR@504`qrh[H6',rTI2&PIRm'&5brY
+m(R2TTHfR0"r53$HYJ"[lm4iYA[I9r(K-elI"ardd[CikQlcbTh"ddYDamh%k(T0
+*6rVefUm2PYAfp*Pjkbq$RZEMpIRrP[pEhALFerImH(c(AA[cF6@CRrI8@RilhBB
+ATHkf@ee[66YrVqT[f,[9PB`UZ2$r9XUHSKp$[Id`ZMUr&XTD$)P4C%[I&NeP),(
+ef@5cZTrD@94U6MiVUC0hjNRqQ@NmI2HPj["i1crrZ25lQZf'@rRfZ6ph*XaVjE*
+jBaf'1RhFRpQ6b[DlRhC-RGERUC1Mh-NhY2XqcYIG#$4bFpaC1HimRLhRhl$d0KX
+!%m`(Vb6HHArD0Kp0q6BE$bV(BH0$f!RIRa%'QKc(PH0X2)klV[)Vm"X-4r6h5(j
+b8[h4*Xk(*mrjfM$Uliqki1km[k-&X0Kp'cNJ`A5HM*NrI*qMJhI8lM*jA*j2YFR
+pQ9NK9aH,Z[XhFA-j2-K,T[NbZCc1ClE+I6mQ8bZCLaF"cYc(LmKN6HA[fCLajcS
+VeLZ9pfPfrdK6[Y[Yq"Yp[YmcQDh-pMQG[QG[QG[fZ+phhXYQFTrIVrThhECA2Cl
+2Hhb'Kh2[C6,HlfZCjRQmTdS9jESklPrGpd@ZLfhdlEEDIEEEEC2*kE6D8#-eQZX
+c3U4*H@fffllj2TqREIYhh8EA6kIqr8G4P-eQ[@l(0CVEC2U0YPHSr*rRqr8GH''
+er*qreXeedAiZ6TDANmCm10A!0[-MNHMb0ae@mU6-erZUUUPEl()959)dESpr[pr
+bH*a[*mKbG,T,25EcNkRaZcq+`l2NqAa09FFRb[+ihhH6pfUTDAN+SfL+AH8Z[TH
+3!1@`Q-aP9dR5G*[1N`Y9[,1ck6QFEc10jAPF*9EcPXELIHhQrhralq`l2a['$,U
+Z@UH@UYIKXpffHlA*e[iUhSHKh2FeAiDQPV)ZlJM9jMhQi*5R`m'"M6Xr+`3ldBr
+,+0J*'(JdNT3bX1#dJcN&2C4UMai9M$M4E'4Bm+aY,j!!Aed8eXE!B#VRj@BKbqB
+`8@,)P-e1cXAAm+Jqrc1$Gd@VeIIbC2hB+(rbkdNlGi(l[,eGVaBZ[Na[cfQJ`Ar
+VA[Zkp$ar)mcCH9q,Z1iZmKhmR"3rbphkrk*f6iH!eRRk$8rJX+[d+f,jP4iV#h9
+iK`Zp([qD#lYC2$pQZqA3kEd*hLm2p`AEA9mPr,2qKN+[!F2RJ[i&&UIh82brLf(
+2qMrALERMHGJYcJVhN[+G,GRphrYVUm0XmjDHjJ2[Mk(iSIPFlZ0A4Gj3fRS@hSp
+rq(G8A-Fa8He3q134VZ8h89`ZcdVJ00ie*kN2bZFrpiIH82GHKqXaChBYrI`r!m$
+`-&$qF,YI1pl`m"Uqje1JYFp(T2(Lq9ihhIH3!%mjrl9rbYIcKGjJAF2Fqpl2jj0
+45d'!eI[IX#Q`mHhRrrH0$Y-mLAX,XIGGj[QqEAdYrmEphKk$FBE9d(F8I34FGU1
+jmr`qBRl'0ZNK""15Nl2B$%B$d2"fIl20'hCIed23B(Q,j'SDEZGA46pM#KreiRS
+pah'3!2pFU&H"P8@6ZZm[phRpaKYAq$1H6ND[Q)FH,3deKUq4Rl6!8YA2if,&rV*
+r&hr0E2CrbZqGLaH()N4Bp4V[+lMphRpRS06Xl5,qqVRSG,3dfH$#cSCkVT1rlM[
+qBeI0h8@LRQ,G&hIlVE8k[@FAkiZ+Lme`Y*FH6UlArQ!Lk5bMam4&LbN@RLjINS+
+[!aU#413S1cXDHVeYM,hU&l@YP)hQcp42ajk8RU'#,FbPcT*k`N8Z!R,j&Ujf,&j
+r!3XrVV',3aB*kr4H(+6HSNhq6*[dcPClXCZaM4Z@fRUaGMJC(AcGM)RpEbdD02q
+Tb1aeXEfF$Bf2AaV'PfQdN8YEY*%@4&JNA[@f0PkfaXC0MBi1caGKHBkhi@#ZGhR
+m(`[`lZ0TZ&*Xj0[mZ$VHBT,+apIRSeMElZDT1&Jp(FbEEKD'fah(Nm56YGTSlRK
+F+6CA-RhT2'dI$Nkc'rGaGj*ZZmj#acQ,[HefQlkIBmE3qr0E5DfNeY+5kaNRJmH
+6EFAMBfN[[#[[#[Z$eRIhQ1ZT1mNprHAZ4mdMBl5Yl$N10lmL4eq,fPPY-[BfFQU
+Xp$GAZMTD@0TX*@4ZRdfall&mhJkh*aC(VmjY-jMqrTD1mcQlj#DMlE,kHidmeEk
+ADCcGiqDpEe1@UYTMl+he@JLj(RC%EVm@iqc12eA96@Adp4TF[Ch%eF6@dbqPMf2
+GfpM'e[YE+0BrRkr5C6HcFrL[IXGEemDbfKm,04CFjTTUXV,50hfkqhBkV&p"4i#
+0@q"&NG&(NISpAS[@aP,T+DDQT'fQY2&dmeFE61E(Qq[QXe2e&RLl'hkf,hNL4'X
+BcMYCDV#DH,TF[CISc@DYr@Mf0RMj&A&fPA&VG0IkATBf2hBeE5cZ[Nd+DXj(kA&
+iR%i#0T[!RC(4BED51GcQhaGAKr9[meY1JQZJQG20HTXA'HbdY&[2m44QSi,r2@1
+URZJD`HSQ$6dR[iqaM9QAXF[Y0hCmYQZ[5c9jc&rej!@,@GN88D4d%Er-D4NDQrc
+GMd'Bk$mHRQ[9f1Uk$2jUSX[dAh-IieGL+a,)XA[9H"1jMS1HdZAXIm@QdaQdaQd
+U0*QSpMCDEhj'Ae1BY+V0GIHj1khhh'%(HBZpp9YmA[,HTeA0dFM6F1IeQY80rVM
+@2qElZp61hqL'HDj[6cAVl(6p"RpVBe(k1dlc9rfS,lc1#iRRjcErP`fGllGll1I
+0rk6a2&[-pGmH6BfI`MjK09CjLDUalpIe@2G9D*lpR4@mVFll"f'eSme8GpaEh4i
+[XllRI%hh-EIZ2pIXXDMaFaaL&+bjV-jD4kUZaAU90*UZEcp**crMaL$Xh1icq[e
+Ah@AQTRHA[Ih@-eSVlkepih`9'Rk$hp(ZkMr8E&DE8Fh5eP[TUcRBqRam@,hRBde
+T@8X@eXG0bqFjI1F[R-*K+5ci@L[YZr-(f2XpPCF+Le[jm2ie,DkV6@Y,@pj2@NH
+XLc9E)E"R9eNHXY)mI5DqmeAGkUMjhH4MCYUr'TI9d'TRF*0f-d88QTVkDM5p"MY
+9Pl(K%$A[59PE9eR44kbGV&!&V0DD$#BlH-S4Qq&kr9XHHAdbHHUfQIYjVe+A@kM
+8@pRifS6V65+)`+4UVP[@QQ1dQcqlaUR1IedYrrE'T,b,)fNQcdNEa2PRCh#AY@D
+FhHpY0HYJ1lk$DB$fYE-i25D)Gmi1q2Y+cSjV8R&eGDD8`Q'HV2[Al4Mhq&MhY*U
+9i8Qh13"VpmMAk04@29fI,FYkM(b0T+@TcQ,jLGLkL0)d-@VXI8dNH,LXF223DFG
+V0VYBdZNN$[RahNHVT,,*G&MZ&MZ&MZ%1ka'f2ViTVTU%k8QdQj@,9b'Z@p6P64U
+2DHV8b,1k[V(+DMD5CTZPaI)dNR8TeMeIUBr54p(HEDVdZdk$E&lq!X[@QTVeF"B
+E5,BeQNN9PN@8+XZS(Lak+VY+ZdUl6(f1UUYY4$eTU1$0DMQafc%V1ZZRlfZNd1P
+P-i"ecT[%aIijU0UBqA(+XaIUBqXMb+[5b020DI6c99FD@,0@AV6Hfp80GT09QSd
+NMR,+Xk"qhDbENFde(QXeQ0hkND4CCL9[lVYKfZf1[-[Tm$*U,h4XH-689erVDM[
+XAkdE*4jq`M9GR'deEdfNj#YMIR`flUp,9k@DMQH1h)#Yp,869MF69laHhQYT'fP
+(LqEe9VcG,@ePDB,i[H9P0Df@RLf,N!!YBlY,QdYF6AU!40E5iamVbhM-a0V%eqH
+LLfQAjZDVGEHBkm`H$dFRM5C0*FhQ1fZ#Z2%afXp5NfqMdelUY[LppiZMXj2pph'
+aFMAq+3e)X*1e[[LBZ0BEAGf9PpaZTB2('lYBk)hGYja*2&fdRGb1&aVQklQj[,h
+Bc8DbiGeSU5kjUJjVpR%hfkhQqNr$*rYFjcjZ*FA1QlMe+5a[ZdMlbma`"J([VV'
+D0cH&C[#IPi@d[Z-ZY&3D6Kb[rYp4Q4f6h'hlRI8H,cQ$hRpH"c9T-q*Y*%MGaT&
+LJ@DN))RBde'jeJ9JjfQ0ZEK5,'ai8e'SlhY-EM0TRmCRmEBf0lfNL03B6NmAcH4
+bh@GTSrdITeRmI5Yrlq[rVfIGq$Gr([lUC`(i1AjVm12k,+pAR1ccfKXqrYI#e@X
+mMprRHKEq[l([I$mHqqEk1,allJF08ilRmRQ-jffLr4qRb2jE6rA["a2iEPFId'3
+bI5RL3khXmrCGhh[kGCVr*f2mr9frZr$[Z"a2ZQU+Pr"8Fcd24jAU,jf0ml'*RV2
+[r$mRcVEErqh["qqCLd'#a',VHLkMV1dceRDkcq(Srip[j1"pYjIiq'j+UjM(9[1
+p$dI6G9eeKRp(TIcf[KrYmccr8relIYc9pQi,l06-cIEl1cm&p[FTICZE[Yl[Xe1
+hfqcGp[S,6pp[Xe+c-r,AfGP*Z8[GIICUrbXc*NcAAGlIFl0rkQmEmI5hh1J(dXc
+i8c-plhYT1`Z"mIZF!%H"&i%rK,lRE5di(Hm!+l5pqIHr2i!%DbdTq""DAh1jI,h
+h1r(&k@qiQEY*VLhh`[M[H*j@qjfDkkGjAiaB#$@625r(mFrehar(0B5di&T`")Q
+IFQIFRH"-fNlh&ThXc`*RZ,hYEhrfpqI-pad[FGalR!R[JJi&TmIF5[aaH"dXhD6
+GSJ5piQpiP!Ppa)UAh1S%[ZGpbqjf&mFeeerLb[!k@&lNS+m,JHj`*5ClLCi%hHj
+kEQ6AKIVpHjX"SB'hkrAfHPCZCRTf#HRDGJ0+cdT0cXk8"jV%bReqVlJ"d()8ekU
+C5*4hhN)FY+`Ve-d%Y+3i+&k$TG"d+Bj#(,Z"jiH`3La@L0$,RNh[mQ%H5p!KccD
+59F#jfq(TjK5Ym!H#pbXS!FQqRN+[-2(RCDT2P!dG6"cjmTr*D1#$%!*H`%2UdQS
+8%XI1R#562336i-hU#(KS*IS)*3Dk@#$PB,j5`4$jI+TH@U9el"L8AU*!q&,`ASq
+I(q!'hlrI'RBAA`6&e"05pkTpT3bPM&[GI#R*AV0KGk2UI4i[`bIeIai2[F@fphk
+1Aphl1$pRTICpRFAIZp6aI-rVqfdMqphA58RT33Ge'JKHj48(h`9Q`J[hXC[Jr2m
+r)l[p'0`82&@qLX1,1GeT-0`H*jRZqPaYVpq`p2Yq5dH8c[1IXrpp@`V,Q&c2[AR
+j[dGle-RfmVmrj,chIXkR4FaJmGjRRq0f2dma2amaVX&h(&jAir@lZ6p'iqcmfMk
+ld2-MER#ik6RZGrCm2QfQ*be9jQLq6qhPImNbGRmq8[2GlAmR6pPh0j`GPcAT9h)
+d15d2A8RpI,`rm$aDICcY*rRBHAe2&ceeBb[3j,#jl1@rP5ILmcb20`jik0jmqTd
+IkHNbPeY$c`B[[r9i(#[NTq$q[jm0e2pUlY2YpRZS)Il-EqlLrGNq9l##8N5f[dh
+'l(Jl6b13!24`qDlA`r(plSHbmE,G,CE2d0Aq83IHqqININaIFqV`2VKpIh(-p"`
+2*l6dIPp,kraDr8rKi(NlVimPl[([1ke&reP*R1DrYI0(4rjer-prph*hI+IC1r,
+k[prKqH4HC2SHTpANrAQFKjQUrCm2aikqmjPH&j8R8m(cC15j26mPmXVVG(L2)mb
+[[[df2m[[p,CERJG2ZrVl64i#6ph+AI+FISrPq,pABrYkIlXRr2YqMNpA,H6lYY%
+i2Cq*Hr0TG9rhd[mGPrl4l$pA0hrdHer"e2qIhHA`VeGaZ5a[m1hcfIRq*PTfHm,
+Cm$rr8hI'PI3fATF$qCAMIikaJb-TePcbQmp(DGrT[Le9&RC18h'Hh@lY2C-$ImH
+,aD6l-r"#XB9DG+de)SlMSX2lmLaPUbmj5R,C[I,S$U%+RpCHZ"S[Bq'6pr!Nrmp
+MdT2fFAMHPr#6Gk,k18kkmiq`i'9h2(bIfFACVbS!'G-f6kR*j2hHe!6*b"APXYN
+mPTS)q9h1jbI!ZZjh2(pl,ESqK[hHTlA,C2FqpPH$pR8pclf6bZ9YYrX2,Nl#6HE
+#6`Ecjr,fP,TV'q3(HVJMAbaJJmU&id1adhjpK5RcGH9#Jf%%cf'6[h4'+,*RS5P
+ZL-A0lCjU2JqAKr2k(MlL6*hr8VT[YT2hrdp'f[[Pr,X1$pRmcTXbZ6b*jidrF16
+e%'[UYIp'[eq)a[TqKc10!2d1CB$dZ[erdI4VepSpP1d0P3kqK1M2QDLKXVe"@ir
+LGphajF+AN`&eq[erMDr%91[`Q3af1er-qKmA*qRk'0p1fk(B5H*Vj09VqIjQTa'
+1aI%r&a1*m@)jQR`P9c*iUq"`!&eXE@e1)TDRc[1UZCmRBE$jm4mrce99je9bq`m
+lBE#jRGcZGcrc)8hr2aISh'ipbYVI(TUd"[VVDfYh1jhT#(MJ9)pRfI5j6P-0rch
+0cr$SIFpcrR3lMFl,d[qILpbYrjq+lV25j5fk(R2FjqYmImB8mTlPE[HIjm#EDfY
+UEP+DQYYapG0@feE69RiV[h1dV+haq5j6P+AcGPk@jh2rkhaqIVGl[DhS2iHMje9
+bY99Ha*VI(k(FMIqcFlRrD#0rk@Qlc6@8@e25"1c-1Bf2XjcBp&R)*b,fNa18mA@
+qc"'Q,'#aXBqFLi5BR*68GmIEGUT@BX8*9%l6fX`K1AK6'QJTj%$JRR+,Bf8j"UN
++aVe"#S,dM[p8TiFa&e9rlrfGh+`TR!aBYVC4Ghb%[Kr4lbrqM8i,mhpI6lcdk,`
+Ie8A3m2p%,cp*bYRNE,p2pjfUj[qq6cfHjE29hCq&e(DiDTMb-aLq9a25I`YHVV1
+XUF$b(kqim6+iAXkRq@El2N1SX-(cPVDlV`Hck1&LFldI2D@rCIU[jpCdI8mVTZ9
+`A0rhiP0hQClA2ClrZIc&&PH6UCqpiAhq9`f*k1SjLrfR)cdIdqfeHJc2Cp(fG6@
+CZSc1$LrAfYrS-ApeCA4UADmV6I,PmMfA-8Q8bA4p2F(ULk`K6`ZdXU,#T,e2ArP
+l2Kb-6TZM%RZVLekh5@Z"bR@jA3IUb[Ce20pTIlIjH9X)ZAUjkZrZb%1Gbr8ArL4
+IGc0GKIlFVQXeQZMk2p!PD,RBZTbZHcrC8A)Ihhh+6m+I`Y,rI#GCe'GYFeT)ZT%
+[R0AfZqUDRR1b%fjSIESFVXX[q2fTl`HSbE)Cr0AH*f8I"1`ceUKR$aB[+jl2DlN
+0P)jDI)9aI8FpIm[(SX,QVph9VfZ9UDRmGPPlQKaq8l[Z,r2r$l8qj$(3BAeSXHK
+bR5#2dAj[2V19SD,-@8@HbZHlH,iAdp6h-r"eRDN+C1hYH[R5%qXkATU$U-lK+ET
+Erf1lb2Ghr,p"m2Y@RG-JlYD2,cY$db4XT2iA,eQ"URU$qNcID05krZmbN[Dd9(1
+aHekhS1kYHjkLTjAV)qDi%[[H,&[mrf&Ne+c14pEJBITZ9`[%kK*12U'*(,jlZ1V
+BMH"-GUB119d0KDj'Lcf8[rG8(Zp9(bQN[r!QXlfjdqfAVp3a%rGNlpkf4b1&`[+
+qFdrFJHLl,rI64XcdI-p0RSZJcf8[ePr[TUQT[h@4r&Q-8(ZRdM-1q6S`kqMUjlU
+RSkhPK&m,MHl'krcl#LlA+8Ibf[qqQcZ%`r5hqeYG&@p[&Yl,6peqLBl@MpEJC'S
+kE96%a#m$68A@Z9"'rTD#AXF6&Yp9EdGqr6b9rbHElbrqk(YPe[*aE,HaD(39[4H
+T06f4jl#pIPlp2I(QG9&iG&"UV@FYCh&fAKCIRB[kbfE5m1eLqIcGP35m+hSk,6a
+EI`,Iqq8ch2IVl!X2d[&Um[jemj2q8AV2"m(SZM54cHASjm4l,UVQaq5ei%TkRTF
+l4CUIXU,aXVRZdc(H4dNAk,U(%RPU2kA8RQm09jIBhIY4HmVCD24cf4jr`[#idrN
+mcU["X+[pAVIfl@9mhDm2&reSZ[RUE[1aCXKCG*0c11*(!j[6r6qA1q&meFA9Idc
+ZP`-V`lrh[JpT,FRTU21p(cHUbrCGEh@VLk5H[rCp9f1*[R3mY8@RHGINF*LZ[EM
+5X%PD'GKHaaSY[4i2pApp$i*"fHj$,rccQIdFTi2Cc@0Y,pS0,DpE4j'e2@aDcZA
+Sm[LB1@jkKLcNAKqehN@XKd0$eRRcrrGM`Z&Y[$SDfAUmPIr$f-@*"*Q*cfIDSY6
+l2#JJiAKcFhB4I5JLm,2aIZe[!Ld-T4H4c%j,4CfGKaBr)aHelc6bQVjZraG4Hk'
+jU-j9h04fFAi[9bpIUD'he9rJX,e33le35Q*XX[AcP[UU+$"6aklCA85F"*[-"JZ
+MS1lQm$4l(VpMlq#NFe5`rkm#4k[pIJQllJD@Mf1,kqqiZkf1,pq44aZ@kq(em2V
+idM2b+@#YTT&PbdRG`mE'dHeZVl`U6ZGhGAhZH&IEDVhFRGk16[BpCTYj$V+R'5G
+$Sq&SlZ6CF2(8NQf[-EHAh(E[3dPj`Y(M,D6aXGGD2l[ZNlcJh0h*YiIJH[ZphR0
+h%[ZlaR[m@kdA,5)FQkT+55(Hk[,F-mESEVKAh`1&*ZC0a*lZ6hFR3H[lp(eq"jQ
+EkrDhfMhNE4mEU[Blr1E[De&TEph$hQ,YpMPlLciPC1p,PY44h(-l[&jqMUpVaXj
+Lkce0YEfFbG'f,Yl2Zk21G9XELMhHFbp[CG9CeRRkMhpebfHhF5Ma2RHX$pPCf'm
+pE5kADi[i+AJCMQ[JM3rfF#hSSe(R*(9G&kmLSdYaFEkPf1%XU2L9Q,V044f9*'p
+E2k@PT0*KVV69Ya'Kp9YSHRaHFbqRUpEE`pM)YmI@I6)Kkr1FXPf(RBI0jc,h'Pc
+NI(k@chI[dZ,krDi(Qk1NQq[XZ6cNM,jcST&ch`ZqT4hQlf06CE'rkLXT4KPV,Zi
+d25D[UU$V*M6k@i`QQc'fpH0d[5e([XAqUdPE'p@0)KaN[e@UcA5e@DffUk8Aq(C
+3id1EY+2VihHc-10bf%j$1CH0R1&PqpSKKXVrXH3e&T5jqY&c@#j4G9eRHk5YVFe
+d(5b(&Q0XC'BdPE!PES*DHeA)-9p8+qNSV+($VBG,)jbkMEDSeE%l`E6Gi36kh@b
+hSEZ0-@G&Cc-12hYRd'+Q1Vk$99[Up&)kAS*kLi@UM#YR0MLX[cFLBRZ3!1J`Xp$
+e9EkR)G"2B2'CrK@@R&UdQkM(kVeUM9dNRf10*pL6pdQ6M-Cq'ifX5qkHdamHdRB
+HQf[dI9'XjQ2rLcr&LiHUUCMEG"UT(UkVQjkLf1UKaUM'9(1B[Q0hf2Glkjq(XX(
+JmhYZ*YHrcp(h&P[Ec4mAaHjNma`FCGbC&hETk`Np$NHTcE(MZl)H29i@-[S"dH$
+QU2LHaJiRTE[1BZMLAh'F6f!$T0"rALh'PUp95F+iE0R0pET[!U0*8DI6h%h@(+R
+,DLbm$e)eR28(Kb2ZXm@3!+h'feAUd5K@bf1Ud8148FcMm$B3rAZG*5f'PkV'Cqi
+dr98H2SqDp@hd[VB[Zm[XSQAXL%G2eAV0Jl[E-JljH0FkV0(SP!Ab-*08Ya8EHSd
+rVG98DVekM6h&a8HUIF[Sf3GUL$ICbrM@FR6mDcd%1qk5hYb#+1Uq#4R,2MDUTNl
+E@FDqhQ!X-I289jV-F344i#4UX`+qPc&a9jSJ$5iZcM9%I2e%12Mj1mZLp'6Mf3*
+Up)3*eQLi9a0Bqi,)0*9aMl0akMk5SX[@dG4'(PB[ih#braHS8'bpRE`m*K,H0(X
+m*dXEa0VUURVp9kY*YU1SUr!SY9$N89&4b1%T0d[9h&[UXCEk@cjM@e'%6S6T9q!
+R$CD8F-AHVME99REl[KG9Q0X0GRkeA84[@SYM)MM985H&SrNp6a,5jV,rkP**MfF
+2(jqbdr0DUTaLYER@Y1!Qq3ZZ&QrZ'MV%dF)DHHU-*MZ%aU`cED@YpcD$I4k'NYq
+&SD55ikjIj'ZY4)MEDEeZA(6PqVpAaE6iSh0cqBMEZ2CbFrCp"8ilGiTMMJ*(YXF
+F0UZ&QY*'bqPd+FFrEk@Ek(!B$MAfkT1&MM2lC1BRC(YTdefQ8acHfcY(YDJ"AAE
+HMY9fI9CH4'i8DV(A'GIkYrmfTMD@MkZ0ZkZcXmr8@GEfNEPZJ(,fUJFFI`XehHA
+d[BT[r`0fl`%M!3ceQ@5[GNHdVh[A'Hjdep'#iGUIel@6-5-[C4ZH6*eRUiDba@M
+Nr%-q+29r(Yl2V+LcpE4bF*iNDTdm1(QUR!5,#ShN1*%Ym"`XeDCI5jT1'R((EZZ
+%2#3qEN@#F)IXMMTVl0h'Fq$P`&FG-eeM(5Sp54Pj&PhJkIfaI5m,bY-E9XDPSm*
+'Sj'NUl+0d%HcpAlXA'NG9TiHDTC'AQq@U,,!CI9G&e8`@"p8A3MPT61R)brU-Ee
+YBTlQA@bjPm[F4Y1bjlRF1A2@@PUC*CYSq0Q1&`acmI$kDeU01ESFDGp5ric,aXA
+4qYHBqdbpPTp2aif,LEZiVBQEhG[M,Q0CFcB3p0Fph`Kedpae9(@8HfrahfPaH,b
+paFHYZcG$brU@Pa%SX&cQ4pcYF&cR4H0,PjZREHEl04TmjYFjYE,eDQm[XQkaYpe
+Lm$8Qh[$34`Z,l(IkclT2IiirrdaKQq`H0@JqHhFDqi6Df9P'KiZ6HBbqqaCF,1C
+#0`q&*Nk(('Kkkqid1red9**i1RdI#T0hGAN6aEUii@1NlEmHIhfm0%AGm56a[ZN
+qa4i'bqRMIecR&dZPT-EMVlMD4D3'k%EDkT,kjSVi60&@330aU5baNaZrNjM[ZUe
+AbFahpkScqHHqaf-@Gl"rflMDrflLhX[km50$N!"#XL4$Kb)c3bi!`#VLCZ++4TY
+08H[IBFLXQI8[XMUp4U+6'e1FKb+D0SC',d@1hHlSphRq&Zm&LHBj[*p9fIIrXrI
+rAeIHqIKIEph'KhfI`&08eI2p4BDA[,Aa[,rYrVEqjrrHI9pPhH8%ENDRQUhmH9k
+V0GERp0qVb2jHTlA`r2pma4BI&FjP-cfGPU2eq9Xr@h2dmHBQlp4B1P`[+Fc@G$N
+mYQmlS0(qI8H2XI2pAfIIq(iq(Gbdc,8%Y5bf)PZ9PZJPZMPZQPTE05fD3)k%2S3
+IS5cdYRN#1K$k%(r%%YT*E5)%G#*DePYE,HC,HR,IlP[JPZ",FDB[q%aFMRHLkRX
+HjdrKl$clEElRkEZqB($BhRHMkM0CcYp0U09VI+f2p2lHTrMrR`llKIG$Kc-1(J)
+I)3kQ(MBI2`mR$KpG$kkqcme1a*ZERjq@PSFl,(paCfIRjfBQ*f(1c-c"1hfHRCL
+G[YrJRCXqf5@QjQEQCZE[ar0Xa06Fc,6XhHTfr68a6cXcHTfqi#A"fp6FQ6%q1Hq
+#Glc[El[GhbmlhJ"m[0lkEaXhMCli*li0CcXcp%cp#"*Rk0hI09-r3$mcp&qY-41
+pjV0C-r42I!J3$*LZQ+kCqJ#IU"CiC[!U$@"c9c0A1pjZrLjHGjA&hh[jhq@lKq(
+MTh[)RahlrflRHmaFlhRk*['m[ZphSphZiPU)`"TMQmEI08J3JQEaZXjh`GC2I"0
+ie"RJc'8Q-h-9`%m[i2JU'k$h@YHXhIJhVGhkdjHDaF2`iIKS%RH9''Gla!NlhPm
+e8lhN[ZiRai$Z(b)1A[QU[QU3!#Ac966(Ci0TF9%%#H#`CQ+#@QCQqAf@RTZ(Ijq
+IKd9&-`jq(2d8b93[p&$STD(!9VPU#AQBGpPjQ@Qk#rd&"Id#!(!!c3qBPTjJR-h
+bqAfrd%SmkXBAEbZ0P1BRq8Q6U#PBP(-3AUDJ`3(hZ@F$jN$q6B(cE!q8`9kQfP`
+)ASkX33[erF%BF%+&"4mH9P*@83*+bNY+AN%Q8!NkV*5p53*[8Y16F[+(h,bdhHd
+,36&lP)6!@#IP$VUJimr+RAAH9')SCIm-T+G2$Pj5qFPq'8kKH`I+k1#&dL"$VHP
+*5&+BF#$UY1V1&1(XZJQ$Uc1VcN),ecN%T-33FR"I,p"+5l1Z$qF%'(J2DG0AU#@
+lJCq8rraTfAd1Y`(9`5QlfPkXEh4jbqm,"i[2cA@H0jNRbGe*hh@ilDbEEJbH2*j
+1mr$GqPf'kiqkaZLaehMYraZ0Uq8m$a,cGGa*rIEIGrLmNlVh[fbEck2-[2,p#lp
+lJrqqRr[q10rVm28m(dZTlVq2hr$P2jqp[rqC$p9j*NrqYZal,rAZI6iY4kIXClJ
+rGk2p[LPi1Kr6MGh$Jp@Ni2QIYr2rhC@-TPE[I5NVq2@61qhAXElJlVAl,Cr0dpj
+l'0rp)rRd(-hcXV[LbHicdRKhHJfGlZrSqE4IcrKkfidHkiXQ6k9jZXlar-iYjV1
+2Sqqp[hIXi[cFP*h[IH"k(eilUIKi-QmqEMhIC5H0IH,lfa2r9V[X,Ek*1kdIKF'
+6r6ZIjm(CrIP[XNqMf@MkQ6Brpq28Feq2bmrkGYape*iq9Nrph'kZU6JmHNadRGG
+KXq2bNQ6p@jqckllDAhkmGN26YZ,mI"Zq,`ISlEem&r6i2MbZkNhHMiZ`h0jrlYm
+pRC-Rc0(*p2FGPpmRFFAir4qDi[-[-kAl0ee2ShAmlD6`IiEL0fehS[fEVPlEIbI
+Km[LhIBI0rMc*0jk@Liphf(p*2N5EE4INihLGIF8'"Zr6YXp[ZbdFRJERaVhqDfd
+'jfr&hpYGqlST2BHPS19NbGbd`rMGKK[EEdj1MlMZ*-RrZrR-$d0hYqbpILlrChI
+ZpY*l$qIRpdm+pcXmEq6kr-#[4me*Nj6Ic[SIllMJmTmRFIAiI(qIdG(r6rr`HS8
+Cml0IlrPUG(lhBlM@FPh'kd@kNhQHNbIhIr`[DIVNrph@fNr4RK@ir(rRk2mj1kq
+rrIKmVrhF5FYECl3rdi2THakId5H*Zr*f(cmAciQ)YY6qrj1iqbfNl$JhGhqE0c'
+`THme(VcPk`[KmYeZrfI'p(Y[RqlVGeqAq2QGh3HAi1YYV$+fhNk16ar`HCGirk,
+Ep[jXecAf@h"BFFAX+AHIfrC[T2%p,dHfqC`il$rI8ramh(8RmHji'1cR"NSibIQ
+EM`*0Yqrm'LfZLNmIl-Y*ah@k(IbG2bq2PH2rhj[iEMCj#6*ZGaXmVrVXFhlIbjI
+krBZH$ephhIFmI!bC2!rEfhLERMk2dHQqh#F61MMrklaqql,hFKEI4p(!fIqqah2
+SGYZ*-6FqKkI6paMYClQ3!0KIVlh'3q$QZ$mTecrdmRkq2rVllc+H,l!im5MipYe
+QMhrhHAa2XqRZFT*p+liTKM`UFHbj16h'ciqLrP`Hjqr5qPamF12Zk,@E,ZG(k2X
+CZfkHmql[VcGIba[frCPGpp(`rIr[LpaaH$iZidGaXqamc`T2C5IXb(hrCBI$GmA
+rIFAAQ'$hjrXYXapmRY[aqr`Iqqa*rA`C0heh(l,YG&S[iEVNZlhrErCa0afAhGY
+[rGqVGEmqqZlkRph0HpS[2ipjP6q"2eG[Z[5dITrXmlqKJ+irbHM*[2rkbliY"[[
+Rh2eGaGlUfd2flLmbhSjR3l1llAYr`Irir6I$k2em(k$b&k59mrr[(qMMk1li[dk
+2jY(GplRLUf0qhJElf2Gp,HmAkpA8k$ar![24dArrZl+mlIdY(ar-phpRd@hjC0X
+@S5H,V0(J,[UILi0hMMCShQ@YT1Kb(TAITF6l1blRm2(mcm[TYZ"p2Tq2ar6h8Rm
+hfBEYq$ZVEJpL(((ch8qakGYpR[ICSrYhA(rlGk1mqmLM4lljrKp$Z0$r$mQc$Md
+pcjhTp2[EEG)icIEm(LqP*rqFbYYPYea1$jQ@lAMEVMfh&,EC2mI-q(MlRl[[fI*
+q&Z[,bRm0af&Y`I6i'Mm,MmPP0R*rrakliI4Nm(2IEj)iEV1mE1m(Lj2meY`0aGh
+CBPlh&ZqfrMaZ2h(k[aGPNr,bQrrTZ[YhA&r$Gk,p2hrIjR(lIcH$PT1Hp'6dKB$
+rVcq&GlMq1`qbld@khA`mA"IIE@firRe1qqMi24kIYprZ&&&Yar2l,FFAc2Hphc2
+SqcpAEm'lp,GIIV*0jfQ#rcrl3l$cqZhr&hrSPmaXShNRXIGkQfm[kT2FhHcl(Fr
+dh&jlaQml,iEEUFPMF2NY(*T,["5Ih5C2ap$*[2eIjqM[VbJi2[F(4bHYqiL[MqM
+pRThPc[12a6,a*@9rLq*r1frcITZ[qrIIE`G&SlU`8`kR(F@lb2i26aI@G6MYekA
+&qcJll"bC2bHTb(EhHi`hSfaAEIGKEHMGhR%dA(M3B$UV[lrqrpZGCr6SDb#pl$f
+EMdHeZpM2F24HC1CbHKH6i(,mE%pKL0EU,r4lhq(P@Y,%J[PYZUVdrZjcRI)mbbl
+[bmcL0CkIEEr*m(Ljl4qA3FHf[25ZqfdIrqKdIPqRjITrNNr4k%RUGKaqZNqClfL
+iq9h'6[1bp[hI3p2rqciQKNmRp(BG6GqRaI&hqriYhk([H(HIEGjlJICRYcP6m5I
+Rf(mGJIPf!f`XB*@8JrL#AMRjRj+##@JJKE$BH#Em-i[Gp@mhX-a'PB-jHS2TM3A
+hD5Nj135*'%UT%1KN35QNdRD@-!KbJ@3S1a!L9VjbYN(ZhN34C5aPDe)8L3NZ8TS
+,jjI'JM3AV[2ZhF&mjQakc$`S9[h2Zb0EJE[LhIJHlGDLaCrZkpl(SI'a1Ye[caX
+2b8(XhUp5*U$DE58SEVMGrhrVmE[kA#d[5r95iIKp('i9pl25DD6GA9e*Nprl(Iq
+ZJN)VS+1-AS!CaVU6YZrcf)cfIZK9ihIcAhJ2TY0Y)2BihVrITrBfhVaFV*kRl2l
+p[X2+dfRJk,Lj2U1(pNR4p6f[Vq9l'MdHHi[8k24k2Dm2l-RNpYkqKNrINMmb1Ic
+`JD$2Cl2HpRXTNrM2dMV+@PV+@1INY13360K"Hi)fcR1&"BDhST&6I,j&M5q9P*c
+0bde'iGI'QGE+9pkPTH9Mi+9PD58R1I[X($PZLQj@BRlh-AZ9"DpEZFLhU&"`jH0
+$[@lYEj-hZ#XLqbK5Abd%jQ,l"Zl@$D9,"A86N@BPqjJLbY*ICH*-6%j%Pmii,cE
+J["8J[-30&l@8R!Ab-j1A1ALm+#X"UAN4B[QcpK&[dr&Ll1rc,5HSi8@@[dAKcNA
+BhVSZIPjZ8mfILqE&jH8[d@8RXMQ)[#bmpR*LCcP4cr2i'raF*fh,jhTimpRre@Q
+3!0P2fXl5@&P9aGAImMTTkS[eppVb2)mL,XHFjbrhrZ2`9qEm[)f8@Jf9q&Lr4IU
+m@,@6Rm,@IV*(Shq2BrC8rCT)p&1@[ZDbQLdN@HaI9FVIrjc'EarEAq$pZQTl#,l
+AYjEPE,`X0lr-9R[e'IhAfFpIm"24k[,j(Kd@!c2Y@Q%Lk$"CQLRX68h'G-"mIbk
+2cDN!d$8%A@ehYE,KeQUaA8ma@@Q(pbKpcY-a&LmjJ-$RFMNFM54Br,hlC4kkeX1
+@l6U2je1RUGl9i(1mMJ,pXVM*9GG1B6$d2Qj2-E+8j@r8NAAIpX2hCZjrKhAXf[H
+eRHCRfk#cSZVLcXpfeckPcS+IYYGf9cl9aKEM#k@Y[h8rA@F5JlhkZVqhmQAS#)F
+a&Mi+Ij'rp03jQSXV$-e0aLDQQ`ZbZkD+!B"m1``%[PU'KYDcqRYeeEKkc[Ij82Z
+BEQp(KHSc%@JVX"2C+rpYB8GrT*r)p*dpqRmY&cI98I+e1fZ16j[)e06CDkjZ-T(
+b@4P1*KH,C@HB)NV[q%QkkbdH!jENk6hD+BSIF`rKCDScp4i9A&f8rP0GFrk[r55
+-MVZH`9(i''ra8pVPq3`P"hXHrk+cc'eqAPU6KN8CQ,b8p3d2%1mRlAZ8dHeV#+U
+M-E+TSjk2Ee0(&X-"+mPJQa2pRr5+-93qj(UmMKmc&[e6J*r)j[0aEI,f9GQ1Ff9
+KA@9RIp&Pr9k6%A(*ee"26dIA@AUj5AMp&pP*bZI`2,FK&P-cXZf[d@,39Gc(Z(j
+L2)h0[qDITV#G`%r3@Y&8D#SkA,mPRG,KUUJlhQ(iLM0dHAZDQLRmMCH"ImV3l+S
+86aABR[mA@e0&JEpiAYeQ@dT%YAhYC5-L@GUF"Il!L@,2j5QlM,ef#UFhmP(QkRp
+p6[FM26f'`'#Skk[Jqf28p,J-*@5*ZLcHbcR4@"%2F4lM829PHDLi',ACM"dGrUD
+M0aBqZU1QLq"3H"1m1,NZ(KFI3GkE'G"m[,BR4@HALkkTLf'PSTr$B1Ib1f`1bcH
+"`+Z5RPqqQ"RXM2C'Hb*%P444HQl$&BAG6V,MBpCISZPb-Am%AAGGIr(X)Z#RmPb
+'ErPPEHZefmj$4CIeXkUNaDMPm"JVIeHdP,r,U*q8a9)44JD$Bf&rbP"PlR#cd@c
+d$bTZALf&G9U+YPQpGPm"2AjP6BmAqI2cZ5)U`P&JSZIm,$Gib+YGJCfZX2Dc&$2
+@Yq`AQfVDPed@ZLedAS)ZYYCk,S1`a9,l48R,pl@IbMp0&lc-4Ck2J)ZZf%@,Fee
+CQZiV+'IbY&bZEbp[Ve%Y$26f4mDLYr@X0GIll@6eB91Uq&0d9(XY(TF,,j6fZf`
+Gq`Q#SAZ*meNE+ZUjfjYqUj',B286ik,JFPVX,9jrfUbSYIDS00Ukc2DE9eCCVJ)
+ZbTZff@B`%p&b2dFQmUP2j'Ib-rND',VEQIX-0iAY28@rC@AkeSI"MaDLj`%A!Dl
+X@aG8aHF`+LfTec+TFVJ)rpU20pE&VrVLiV#fAlVp98-(Y@[k+$MCMSUkjX'4EqT
+jCrQEpbr26q4RERD9ecJ,H+jCr22a&[Hq"ACrrf,LhrYfaGP+UrQ'HrB2,28AE+Q
+X,pcNA*@&qXX"0aDkGd'CpeXB4HpV1d9ADL,245,lrFi1Ib8I0qG(Rl$CjZMSh)Z
+U9&hAE`LkHRUcmPr`P4CDkESX&3HYKCANBpKmQC)ZpjmLlc[1RmMPf4G&9@q4+Ym
+Zq4GI[cq$I[cfY(2BKX@p*9aF&B9Fl4GbSYUUU,XZ3RF[b%ll@!KcZCRI#bf[V15
+,U[DS6)Z42&Le%AA4GXb*mMQr1LqeA6hN@$DUi+UMq02@p[lQAVq*8m5Xb0TVUZU
+SF"Hm%44dRfi@,@@YKmR9N8q5pa6CD$[2j8f4`G(+jD+r88qc&r"fNAm&K&f6Pe0
+4&S*q,(fDL2#,FL`-lQm'!D"[D`%e1j[-q&PUTf+X0A@Y$Xb+VI!4D1hf4&9KQr4
+-)a&41P(8lf`hQ%MkkHSm"lQA[[+rAKD'+@Hf(Y@ZTbG4cFHHr"38IbGA1[Ge@4i
+(mXPNBYcY$2,&eeCddkpfGlVR19mhfU#KSTq2B@9V&`,PeA5@l)Vp"j&HAkkrmKV
+Xaeerj+,VBA0mVi@@RRU+DXUR+4BZZ`E)SbQZ`$)SpD`Sm(jT92"e06J#4[qjHqm
+c@C(688p8@-h48902jL,8l+`fr9jf,C2G6-(r6Y#*VI0aG[&`%rKI#c*%p)lQKq[
+SiT%0B49J+#jehmf93aN@+@D-c314,J!$B$@ZA[elc29G,i@@pZXj,KZA4hj44VX
+[JBq"Mh0GPm#4ENH@X+2!P6YffTY(rf[UHQc'4df#C%dp2N6IJUl$Ecp43[IB0bY
+$Z-hA46-pS6&9KQ4,4D@Gpl&jM1e'IprQ1elV0hAJeQ9Z["f9cVXLpe+rYd&6F8e
+6M`$McdAAId!-!k+rfp2QmcDCr`XXhFZC%[r1mUiYrX1[08e54$BHM&hMe%fp$jb
+*lrNl+bUU'8T2DYF9Ie%pCBIkR[0SrZH42BI3b*ZCklr4HRde!403CIN--FHZ9cI
+Vr0bqKll`2`A1ZX(Z)GNZ&LXCMQSjk,Ee&(26dAfFc3HjK[rCRF'M(%@H*rl9pl8
+eIj-2i%H,QcE&RLSNAdBZrVTlj-ZVNUIHda$Q#c8@454FVGFZj$YC[)eKq$R+1jq
+V%r-rF0i$r4ECH-KYFHRA%1rAr[HF[r[HFV9[h$DTh69,h$XV(d9Ch2KCEkqEj+Y
+SHddIlHSUSjZDcf4ZH9+E8ISaITGKPfQr8B,UiYI8Ge3m1HU1r80j+2d@4UIjBDM
+ZHrk0lKc)r#A#B03lF%1m6!+(E0FZ2@,P`jh[+[YHrm'JLklA2F2qQmZ!C$B#fI*
+bZ!ll&INdAKCDdqcLH&lqiUqmbA)8d@,bZ$Lef$ZDiL(Qqif@$mI)meQSY[@'a*%
+Ff*,e3f%QbC!!rIqdMpTHUAq9"4h2[rCUhc'3!0f)VpF&VRdE2Cj6,c[,jI1jlPI
+0Ll1VRGR9cpK8Djmf'@8jLl+,9aDZ,9jcQHiLm[leAQ+',8aD"X$6r6l,"pTNDV,
+aEIURQ`,JrqcmThH#XYF@!m-ipHUT5qLJj@IVTR1Ab@`DbNB("dFAe)[UN!!9&+6
+X(A6q!Sf1Q%XQqm&k6Y$i[k)Xr&RiXr-a*ZIM9Fr(c-1,JrSLl,!B'jcDI2`9&"A
+6h,4@B)lR"&!SriD2"qj24VLGedAZV,3$rFhkNidr48'$R0A0ePNC)Tib4I-EGZ"
+j1MQZ5Lmj&eeqSTD$ACIA-cC6d9QPcHHd6T994a$-RD4jTq%XDXLePrk+bLl,cF!
+FL'$VX$8qG(l5`rN6ZYc5+EQH"Dp4BYPT),,1e&M2B+r8QQ(Z,Fc$alhRR6pKbYc
+Y16Lq4fH![q4e%D8R@[@"FHVP[(pJiqA!2"akqTJpUXPBlCi1CcdErBEh)eAi+QJ
+jc!mfj1c1%2C@rR6ppUk5KLrlcYApNTPiq4Rm'2%28HjKlrPUL`,02TrPDm[2rPS
+j5j`(A4pG@88[IC6!(*f9bSX&IipPc%A)qijbF26ebVak[qAj@NRZRLkj2GC39eJ
+GPaNl9DI-MDfrp1YPB[eG6&fq[(bMREpIVrJKpM2(hi0PC9(1A0[Pk+,B'le46QA
+Malh1RKBR3'S(B)Fl99rCh5jej"(15lj"214H9UF"JkkHUIjC(Y2bB1rYS*[BZ%1
+k"NIDYrk8'lV+6$F2"qALX,+8GA&b14mM"8'AhHSVZ%l"GKVmV8GF39JEqf#Vr(P
+cqSPrTTH`[qB2K&efb@!c)qeDee$49'CX0+b$+$m%ABkl!hb,XGEQj9j"IrH[[fE
+)-LlhSm9q$-d&GJRB,MU#l$FRH*Mk+AMd%AEmY5bR9aEpQ-"&XZf`Fa2j(d0MlQ(
+-*Lh3iZ"SS[mD1ri1H[q48'd*bFkLPU+(mh59'CKB5,CF2)klc9"r5RE5Em*drK(
+1b,IqMf5K&3YP0Db&-`A18GqbQZr,2G*(YpldGGXV$YkkbXM"4K'3!+pQDqV$[L&
+D$GjM#p2VZrUBe6&bNIA4Hd`FaIS[ZG,r6ZDM1rdr*4N)k3l#Q$RkD2&efBSSX@e
+RTRcSYVJUbXf[iZYLjcd6[BlQJdZ4eaPTf90PMN+c0VTHNSD#rjebqdq0*b&m$XS
+qZe%h2aDbILP,2)k-q3R*C,*dH$VZQcHbc2UjD,ed@Mc$0GQCk6#4pK4+'G4NkAb
+U'cl@0m9qUq'h`Ihd[IhR6mjCp0k0C&Ll,hF(4i1rp)F8HCX,AA4EQHMHM+A1$Pr
+hpTX[baGDJXV(FmVJ2DU2kC,mY"ImY3eP43@[rFY&-hM2l%i$C6N@8R-$r,)i(fI
+D-Sp@8[RYINHFc[5@&VmeG4l+dj+ZYG"IpG&UDNTGpH!jHTf@Zk6%cm@r3X"`kLq
+rNRH(VXcJ2#cRHaH(X)ZmbYG8rb`4d'HJC`U#e19Hr89"1He2aTZ,U1bqh+4IDR*
+Z,UDMcGR(FmHf&QiUHX"8p#U(hp82jR&@ASDXlRq!fGV@QiP9f0c&[dQHl5`hYpR
+GGK+$UF$k%p3er[aD#,l[kUUKYI1`REFcXBY#CHBZ"bXh&V"RbprbR4*RYB-M9aF
+$B9r,RT*R*6pN+VRpG&[mTITIPj@$Ri8V&bqcPEk@"m2KkkpCcPa2efAU1AUkrR1
+FP-$B6KdVE1F[XjDhk8M9bmlR$P+Q,"",bm+&&JLaMkT)8r,5Y,1hq254El)Lj'r
+AU0C4C5#BLeX@2U,l`kLGRTZ,+mjQBYC&1A6"3i)2DRSmAfE(E4BY&-ArqGkb1LZ
+Ck(+HLI%M3cFcXB$GXR*UhpU,JjQIMFVJ1"Im$"JGPQXM&SiJ1@8r9aD'E[[#Lqc
+6eYE(Lj(8HbHJ'##aXICpQRV*c8Hc"U),e'Jf8@,+5fSNmR*ir*e92lf(QB85&14
++q[L5pIAbX1RTiP26c%V$aNVEalQ4cX2'BcRER'6Pc+Rre'NLh0TSTbdZDq[M5)H
+LVkm0Tb06dmV$PFG#lZ*#Pkq4'R)dj$PBF5#&)K5)FV1802'dF[16P$cYISi8LKT
+mG5GhMZ05D+kL4T@9MBkcVkqKid[km[DBl(50(59m1(6fR'T+5Kl+kSD'AVjH[Pk
+q0MVbNZY(,ik9d3qa,SrmSSDI[k56*kq[SB9ICIe%D(1(iHdNRMI&3cd5dK9q-R0
+$3emNrKF&**l4UIDS'hKq2A(2A(GAPZ&e%#A&NfE$HNie*`EbNqk6GbC-j18paTU
+M'F1`d1-Nh9HarPkr4MN!JC!!"S')%XiN5hp8ND8NfmQ6Sj*#ZfYp9Aemj'L9r9A
+K+9$hH-TaaaQXZU5kd9e6d0P%VkH(13VV'BbkZU'AR02+bDqdXi8jEk@KTk'R[,L
+NNh1PdXD*3e9P58PeSDH@m6'fGPG8Pa'M9'%e'maR$c[pXC50Jb@VjI,bPPMBQ-L
+BRT4ZiQPT+qKaQ-TmB0Q0e3%4)Q-XSN6fBF1FTiA@GC6d-je%+dPp,hHRXidEM@9
+**p3r@A'@9eSBd5*UUH0Ab*&62DfiSF[$hZ1SD'9Z4CR)N54M*b9MDJX%PH(-8NM
+84UE'Bb*,cQLK8QaSFCAica-[iR05IVM4*@bPBN3`@d-1FaN+ddYPYY,UT%E'Db6
+kZPK`SPPrDJr,'Vp414S8)C-9$M@m1[pFYFKM(bMM(Abp$$ZT!+5)B$4*c6cF+[B
+)eP$3a*cmX,@a)H-SDr(4*@cPD"0&$1FD&DDI4dqPN4-C$Pp4DEHFXSN,qe"N#5a
+TT*H&S4YPC%1[K*Q`dj%XZ662)L8-[#PB9)A4d-D4#TjA(-$k'bTiP$V10#L9m2M
+BcqeRAa*ADbp8aRLTRTiN6U)HYfdDNKBbhlk960iZaKaT@&M*8"+qRN3lH9JS)IG
+jH8Ym01BcZlM0TUZT@*!!aEPC%D#FN4U'(%3E$M4)IIrfK5*ILibcL3qFKB3f#'X
+ZQSDqRZ[JKa[JPid,'@9AiN2aF0cNEa0D-dVMC@&S4PS4NR1qbmT9i5FlZ*FFiQ6
+3bHl'D*!!rl51(M,L&$b%,(LKAPNr`3TF8G(6hAL3!10#q#*"))jUrl5*a+YRrB9
+SFUAq3UrBl'Rk@KKLaiXG,(XD$'El'GhCTEaQe5e%Kif4M-CF8-[$b&C9bmD0Adm
+j#e%+`fe2,h819LI"3b*%VM,H49b2l5)hImjMaEM-@j`@lUkTp$$`N!#aJ"J'-)6
+eD")l@HcBcihI5m5&%'19R*b*)XTH4)'19eXV6m[TkHAKd-ViP29b*@hP*(Imj9a
+V2qYd,X2BNaBbjR(TEM4SmSCC0[c'qK-8iA&Pi85*#aN10M-C*ifMNlcKhA'iP*S
+EVjCbFN5pI6qc%PD'NZUHTR+HASB81kZSG[p1fVl+0+k#jN*QMh'K-ed2@h92A`8
+p$Sp$aZ*MD6MF1Sf['iGaaZ0SY&MD5bZVVR0pmFRG@I$[*2XF5lifMYVHlNh92GB
+jlK('5NM'4Tbmaee*PS9`S8T*I1k1NifMT$22EhA'afm%Lkd9*pB%J(MVHkX0&+P
+Qp*!!iee"M,L[X,1ASCbFPkqkPiFSEI-V-Fa3rE*N@FD(M1'4,FphhFL2FD04-B%
+,I"DA5bmcF4+Mel#cdd6(memfRhPP'Uj@VPDZ9I))Qf`4+paHFDhTlHRVlLA-Y9I
+c86(a,L4"%lDKL5Z1[-C#N`BbcTqD-`XDFKFYFANiEQpII*IQCHF-m3rA0c['2Q1
+ZSdjSBF2''#b#bL4rCTl$"DLKL@92M$IGiRX`UqKam[M*%0X#Q3E'4XBb"++9C!Q
+Qd%Q6C4,1bLCIZp,,d0$"6a,+#RVk'#*)L5m0N!!flaPR3kIBeprM8mQ9ZI@ZC0I
+#-V'-TlckEG3055EHj@h,mE)-NdPi641BbFaT"fPSE1hPjH`Yk(L5X+419Q0HS&V
+mC+5AU"iE)(pFrDLbYqUdp$,MlAprEd*Q#dZASDHRQ6-M,a&"8ZS+TrJPm0Sj-V[
+TI4qV#))Tjb(rDRNa,101F1jhYREb-B3(M*,B$VkIEbrGh-5`YiPaiPcX6)j)MD5
+FJKbC*'MQ!LSDqqcMVV4dp2brpBRIA'hcY$2Gh"%R,S`JQ5#KJaN6hjIUT&2$ZTH
+JYp*+bSjreT0+1#ZKq8FXE(Z)NQ-Ekq-R+5[TpY6kA,a,$e"bPCA54*'NT"a*Z,1
++4MMPjaMMaVVPU(Bem[hea6lDUVkK1#ECb$'3!%5kamLFN6N[&Xl)cidmDkVjHiK
+5,+06dRi4adGd18HiM5)dD%0h'liEI9LE@*GBf*!!p*%Yi85NMA9$G80e3[GYPc'
+Bjk'kaYchfeif1L4)qe0$rI4Y$M*8`Qa)Lr4U6CTdR+'(6em54G9p[D5+Z0'`3ii
+bbq*a`PG$6mE[j*8rET`T)N1dVlFfc'Y1S665@l@V'k%f@c(9HBlM0FUYVMM)N!$
+&'cR18Uid[1E'F[+HkZT%M(5583f'L0C`4T9D,q0haKfq&-pe%KqVB@mD6G(&BJ3
+")h84`a3*(MDJbcB+3hDKaQeiH-fX4mFC'005@-SEHFj5419m[XCbR[$Mipqk0UD
+[Yil(,@fCNHT*%2'i`UA%X0mR2M6RUf(a50$6k'Rd02'r,ZimEf@l8#CBN3i2h+M
+@3bI&haSIiBaf@3-80I'Tkr'A9$AaY9)Yk['8NjpFJAj%LKT"GX0Uc"0K*cekMiM
+ITaKDm!FD%YbQ-aKVf-9iENq#Yh'4V(56N!#iYY9dq2Vr8XZFK-CCHkaR[M255,+
+VL8reb)hiC%LFZKPPE#i60'LB6Br,c-VpVV)!II*R1a26f$-Zib9p$,fpI3Z00$F
+M9p[I6N+&aVb4'ap$kh13!,Q*b43a*&109[3jUEYjb%0P*6b*(i62+Ef1P6CFDU0
+,i6@r,c-2Y)d5AaYH!B"`ZlhGA'01e$RB4Z[a)G*BE@`-leH2ZfUUIUZlL41dL@F
+j#PFB0-[e%,HQLA"HZ0XiF1Ge'm5bSHbXSH-K@jL+N!"[i@GPM*'1VacfrpHlMXa
+P8iji#Fl3iP*%V)!6ZkZ8Yid5bKmc%(#A`)h8(8IeK5X3aP9rCXEV+0#Kib0AfHG
+llS0M#kbAK@m[%L5mZFSNiCkEHAR)4b2f@3fdVM*@*EdPI)R1FXM0jBDA9@FHAX)
+P[3MM6YDj%VCf5EBNV%0Lj0Fpd'UTcNBVjF+'jXC'+PiPJZfl1Bc(D1ccZRUY,3b
+X[,bX@[M38pc,ikmN6RI3U6kCHjL3!1bPUH4Aa04f0PAdr$XUZmX)Lpl'9SBmD4"
+55KMa'D[PD'AN6P$%U1(AicTErrF"ZSMk@&3bY2$TiN&2,QkKB&rPiHrPGD*0fUb
+pa,a+('5mlAf9$+TadGj'1r6,fN[5I6%T,1F-UGc6erXk(e2CK5jNrYqCSTI5bq"
+Yl+6Ef&e%jQEa9$9h&IME+#NVi8TC4+H*#TiF)[VQie[c02q26cf[PIP36he$F5j
+ZdR+,FA-65pMTHal5KLCdlh1qdGiAaBl4kbjNh@MYYpaj0*a,b6hrh5C2$1'kJdE
+1rMaSF[,mE5802FD8+lbKTj2VD5ASITae*5&l61FqRjaGm6HdPj`EUR1pc'Yc[M5
+I8fdQ6TD5kT,b#6AdqLR,UkhQ0idRJLeSrZlmS"l&e5Fa`pVHB63k+0$ZY(15C-+
+#6G5J"V1chE[`81mlej1(1p&YkHiT,b5G"ZLT1lZEFiIHl)P1Hffhh'dBS!M-hA'
+lm!jc1k,'aU((5mjkY)GT1FieeaX6MY(56QKXlUkACqAaI8qMd0*+dN2((0C18-i
+LE'dkjYidV'Tiad*6N[M9Uq!mlXb$XCAbP2M)eSEA&IM+'AM5rjD3!"q[aNM6Bb4
+6JKq@K-$P$Ai`jmUHKNH+DjDHLTiP&G8P23`KeT*0eMZ0*Y+(4hNRRD(4dpqU[ap
+CSpAj[qrN`'+jlmZMe[l[jHKrRrZpqRlB81&5`XG#b-,1`Y9#mk&rD&#rh#qL&Gd
+@+jM(p$PY$hIk2$m[q[VqrmrhbYmPF$+rJPHDPFG+iq9jb9c%VB5XViFVXjAf*Aj
+CD@`-Y85h3bfEPXl,@FYV*Eq8YlXY`CHq5mHAaN[dX[ed[h8[V*IdCIH5mR"9&Gd
+'8kEmYRDq2jhUHjm[$id1(3`qBKp$$kQ(fF2ZSHTKkb(jF1fKrmKlqBK6&qQ-*-F
+[-9maemafmaTCM[jM[d#1K$k%(k%[i6(m%#1K$k%(r%&lQ2JQ,Uq6pmTljd&mkbq
+IR[Q[[RShcfljp%%cJCR$609-rMQHXQE1Cm@CmqCpbCi-caCh%mhAp[U[iIpqAli
+*ZRQkbEkLEkkEd%hTT[p8hj%hXC[cjZiQrBQlQEqb*%SSRi)RiBQ3!)R5a1ZLD+*
+UBRN423LIlLA-6L41*,B#@`NY'PF&,5e*,5dB!jDKS+$#B59QiGq[`"bpqL8N1GP
+Ep,5XD9[dVKCI%"B"f%PN#'ce,6J&4SJ#hi!jDr!i`)B$4TDIPTm-D5@&mA-$,4j
+DN4r'(EN"aBi8NY35S,dKC,58NY46!lbiNd%Y1Jc1cBld%V0bYrPC@Q!P$&rPCb9
+R!%S!9[i#6Yqa!Chkr#(I`%5@d'`ZlPT59Ba4J'3*'R@"p)J5N!#"H6HiZ[dY,6X
+V1bU"*dk1NlNRS%PEm8#!qJ3*+hm'*-R!60,jmEV1$JGV55+'0eJ"d0$q1Jj#Jj!
+!TI2TI2QI!p'IpfIpe!NrlY*)RHkRrG#'Iph#q,L-G'kbCm#Cm#IpfPmp!L$Tc&6
+Q+RrG390le$6`lH"50*R`)h@6hm*lq%EV+54JV5KT2FkI!e8EcD54IZYMGCJ*RN+
+QNN4ZXkH0eRlk$N+'NN8NM%HfJDLcb8d#0Gk$N!#GlT!!)4$3FJ44IVbCm#PmqJj
+""pq[*cSjcXTc&)+SEpHAkm8FmMjEX"$9H*63)J6#q,3bR6dRZ*hMGBJ50eNlh5K
+edK`%cbI32NLd-lh8lh5"*hZQbJf%AK#R"9%3*IVa$8cJTN!m%J4d)[mlIm"-c-5
+9QEjb,!fGRF"-hb03bYmQCR#c%HBMhbNQCM%6')Q*fFTS90+c()hTKP28-mkK*8`
+Z#QB-&-FM-c()bdc+c0rR8P)%QF&IQ%Q&FDKI[q![q!34%B$1#8k'dV3bX,N+E$B
+D&b'&KFKKjR#S+KFJd'`Z(`m,$FK#`eqREj'3!&`X0KQ560i'*J,ib3Q"V3Dq4(!
+q*J,mT1D0i@Cj#C`ACI*-meq#8q[eIF!21k24jA4k1`PZZr*SjRmNp,GGKXP3aCU
+B-MI+`6Yk2&ebq'bG&11#-mr3M#IJ4a6JM$`16SAS5JKa*H9jHB"1,0c%Sp#GkaF
+aJH4j&l&*5pAY#[*5Y!d9K`S8e#[Fc"+!e%a%[Gc-Q6*JJP6klTQ##@B#S&JPJ&N
+bN!"*35JL@QC583X`'JQQJdT*PS1-"J$bYh!$FXICe+X"j@8!@5%,3DCJ[3,M[+5
+SihbqB18`-43*,3j5q6G*+B"i'i*JE+)0Q)M3d6)F%V$P*5I!fp5Pl8HASL4k%B*
+5&!II'`1[9l!f##IL5NVHVf","VN*59P30K33S9f#J(belqj$jec3Ap*NYb%TIT5
+&1hZ&35d%c+h[#cNHGdIC5d&kRr`D-#)@MPi)N!$PTq$4k24hU#AK5N[#3A!(8["
++GZd+H`Yk#i8%V",hTJE,`6F&l$fBJV3lai233A&$"qL#$Zi)0"""emT"IEh"cmT
+"j%%(lS)++&!HaFpUQa*TJJ[d%Vd%%h,33DQAJJKfr'r"+(Q)m+8K3j@#p5da,h[
+l1GeGmYHXf(hqMR20k5kkAQ12c2BrcbN%VR)Fi(fP9"rrBb$SmA!K$jrAP),$!6@
+N[R5`4TbdJlA1350jY)+FUXI!r"'JMC`,lj6cXT!!4i*#JA"336PRTjU#$65*b&0
+5N!$Si)+@pDH9)-K6N!"05d(iEd'`2kf#&15N189FG(ir2q6PXTGITkMjrrqCX2-
+f'`f(m3$f!-qCX2,NhQ`[0KpmRk*2"NhNQfNbH1[(INdDrCleqcf6lAUC-RhFRAC
+lYIGbf6bf6bI6FIqQ`emRjpKjGYGl$c!a#MmZrNmIG,V6h'6kR*j2hFVl[8bB-9[
+GlTF9LX9qlRp,LN%)%f(EJ2ISZ$k[pX@,29d8#XI9j',19mT8CLXUkMPpKj)Pl$2
+H6X0Kj2Nq6VmIcHPaA-iVYm9fq+lIUlr6CVQm9[F9c(Em`)HASHXcfDc@2r(f2Bm
+hMk['p9MqIr9j1[V+DJTU#QTJHQG"UpAiHHfIKpYQXhRXpcAFG[99@,cqQdf,VDf
+UUXE9999-AUAfBcD$`0A@mpiHJd[KGEXmhqV`qfr0ffckrAe99i&RCr2hQ2r2LkV
+&jl5jVCjVV0R@pCqM2l20GpXl2CjhCjV6DX)1CaIjmRDkkee`L@[CJ6QFcPmcB@9
+VL+($BHKR`9AqLk'2C6%jC5p&b2)al@`YE@bYGGB@"rQ'eeec9fYG9kkeVV$A@'Z
+YFaQ06Pr#brM@9P3d0$J-23i5K`mAA@@TUcrP948)&!68kR5CM-CLeYG6DkN"3'c
+&AQ0*DpRBCLbq,8r&DjM,k52Df9PDpRDDR8kR`Y6A9Iar(qhp[lG*C9&4T2LeeED
+GAQZYc@Cc&,rckUA$mK(Lqe&SiY$2hl*p0,`5dL[J[NTNqLJPFRZmc!BDC`f9YhK
+FMdF%hVrpj2rIYlEEF'4ClE$C2MEIEEEJ5,VHFjrIUGYe'Rff!hR8GVe1hffhQ-I
+qr*dmMEEImX(+aGjm'6[ZhbH5VYYY[laVeNF(dH6kRqp41h(+e-YQFTNlpd4Prr,
+#Jk6-`XV5j+,NqL[dHZ`Z6bGlK5fFJk2*C2YCDAe%QENbCUFS*UVRpE2f0LH8@[X
+DZ2)V*`aEDfaVj'NXCh@iHaR*f01HY'MBF&*%rdA'Up*5D16Z1$rE'i[1FE(8ZRR
+1(aV$a[dh2JqR38f2cZJSjUhlr[q2GrG`0(alc1AAbD(0lb6a1*aG&f1Mf'SVlHa
+SGTU-lBbYISXGaH$ZVD6p[-D@KbpPm%2M@(XdXe68F@0Bp,19[M9N@2e@(dPC)MF
+pZZ0Kp6eHbmEdUc`G0'SIRepEcrMAkjY-M@pj68h2DDRfh28ZTRr9edl5dYCchPp
+&'XC%jY*f9VqMVTfQe226dlce0UDcekh[Y6A4TVRr"[mLdk256qQ`pEiq&Me1%rj
+kJYiHPm(X14&V9D+0KpKKChaT(iULdbpCLDDQr&6rjk,AcpEVTfr9GPcq`R%X#Yh
+96eIq06chJdpa08hP9RHD6$eImrfa)mj6HEFFHli[(NjVVIrIqp6aqBj'NqUckb0
+Kr'l$XSZ%YTQSl[GeR$hZpr(b22p&VjRI4dSHTT-C`HAlllHbkRJrXiRTHRZ0am0
+e%kq9VmPCEcDpr1XAF6j@2lcHDVeUM6pYffDc@fpMlY[RIfFef(p0afA@9FrK4[p
+$e1Pa228Z&[-E[[Tr"N+(b*!!0P*lrMH,-e0EZkcp00fP0d2lZHk,dSYSQbalV5B
+5,S*r8iRRUEaY2UG6crj+AdC2'Y-2+kMMf@)bAlZMr&rR*$IbZ(UkIi0pc'hdIIb
+IUVFMcp4TmaZ5R[MTYRF*l"@DPj!!TDAarhp9c(6DDVZm2im@KmHXNBqUpA,eRG!
+jj(2HcVTbdMc9qV'0P@ifIVjr04rj8-V`[dpe2iISqHl4V0%R-cb22p(+DE50C[G
+TY6krMePG'ee,'dQD60b''mImqBpNCb8r*Lp,ipE)Ub%DhZUE#kEb2m4[URaRdNM
+[0*VkMRU&b8[b9Y0NF915ZSVNc6Y5@ArLUp6QqBfqGlc8XC1Ul@Qe1QmILIGqb6a
+,bli2bEErIKpYrMkM"2ZIZ[,QNrjPIPN8hNk,HEl#5Ec4ppaj0[`0(m%RlH0cHFc
+G*5B1Dlk`pM5IfpMc[fEVQZ2kI`F6dGl6IqaN5HPGCEFeaBTGIC`ZlXr%hRLmAdZ
+#B)mh`1"[p[RI%aI%pM'GrePM1aT&0)fQYdP,'XE&E)1QL@0L#1dSG*5lZhfQFcQ
+lm5aNHY4cFpJ)r)mTb[09I1C$+CE0f(DCl3GaSV+dd[HGpiALkrq'cp+ffParRrI
+ZEMi0em@qhr!iA$q[lZ0*QSYq`&*'MdZ(r"bH+aPB'h9pIf@GlLbr4i'XrEr$CHI
+Eripci0lm[clrJr9a2Vqk60cY"JSf%`ri-9c11VZIr(dH6kH[kcX1clEZ0,hQRlq
+pH,j(mIkHRkfhpriIMqRLIIajZrB'2KZ5UZ9jV(rLk6TqUkcXmpSE,5rSe'Um6@q
+2jAlpMjfcp(DHYrVfIGrrZVRj2TqUk[)N5CQTQDQTNbAChJ9h1I9`[$V[$V[$q[@
+DcJF$)H2`ZJm1Zp5D[eGN-K`1"AC$a['VXKpd,)9fZeeG`V$`m"4lAmR#r('VXlp
+2#VU1ZpE@H(`Z&0BlKF+&N!$@G"V1JmI@C$aqIb(!eQXjrbr1mE@FriI2mrd%cp'
+3!1&cmV`[8m1&4`[ai$K3klS+k(`Xl0ih`iI3)dKDcRpC06Fh-c-S3I$QCU&-c8S
+`*!DCP*RQX5jfkmePC6!d81IPB4f3!'CKAUD1cpH`0JP*q&"-mFj$C5#%DicNMR*
+L8`1)cI@'Zk&N!3dNY2AS'ea[bYkA$4233B%*j@"IZ$RS*4FYkjPPcD((X$jk2HC
+JJ%fAJQF&",5d%f(Q,JP*T&Yk$D@JPJHQ))3*6LAC595l,U"%$$BF8-SDb[hN"A[
+4FE$3Hp'PE!L'p35XY,`q,34EjkPMeRdIIaIefeYqcFE$jq,lm&(HiFL8kXl*(Fb
+N2GaV'#$lK(XS)A#)cJaYM"HZ018-T"D5N!"&XB$TQ@ZlD,8*$SF)Zd9+E5!0)+%
+$!FXDq##Eq,pRrIRfIErXrl`IbHLFE+e,raZrR08[Pl$k&UHp$BI4pi('U$JZDRF
+RNmUDRIHiZ@caqcNNip-PPFRNqTNqlP[H@U+6r6BHMH*'09(Pb@DU12*08Zk@UFr
+HQ6E@dRc1r`[59[2829BrRHdlbHjhUXIMqHSJ03MMp,Cmm`52-9df#bh59[Hp(Dq
+llZ%k%$%)CB&`4pRfTZ&T)YA@92,DE5M9TXeTG0TY,TG,CirSD+HapRcGRcGRcGT
+@6[9eZ2VF9br1m[TZXdYCK-IQUfYar2Fp@eZ+`jV1l[V1XaA3cr)6r)6mrTZXa9m
+09rEjVb1hl("i2"hr0CVQHZk`eAG8!PE@r+,r-q"9992R+HjmJ$-hRFp@mjfqEm@
+Jr(3H4cIE"PJ1a`(Bd09lG9RFECi[PmILrPUUVPZUZEQjmLjr(2H4@h2-H4q[XF(
+2IrrAeA-LX(r9h1VcfG0DpRUXRfHAl1Z",-!*QDRXk(#FMIk+Hj(N!1`Nl8hZ08b
+Z'S+$NX-H"A#BE$FJE9!-mM(bY0NFVKUE+)ATTqJRm02iHH`R*B6#B6$6h)ch)ce
+,T06BCLTYG*8kQSUDQe16HVUk[XqcX1cX1cX+ZXUlAXm[QD[8QYAXkZXYID`h)i6
+$FKK1FS+#JjbIb26G0PFVd[5FM288p2B6#FM4800@p$cYC9i#,54F$4aBY45q05r
+95qEkQ%MiApZ6q2*qlR$RjJ[XE*rCdH6i9M,G6'qZ@k+#APXRNq&AbNE#m,@j1hb
+(lXRr#Ij69p45mTKIhr0DFEp14#MKHahAeCA+A9pQVVY1Td'6eGafAP4[[mUAjAl
+-Rp@6b@6JVX,,G,,`CRp2kHSkE-rCi8[ch6G(iA5p0Aj(*CE*CD@PG4*2![0qALU
+'RYCU0Y*bRddBr9lDCH[VjcD69&0IG4jZ6HEReVl1BqifQDbrXEI&I$d(34YjM*2
+FqG*NmaR[fEk6pfpqhf24deIAjHUjh081AdY$SC2FlU6p[!c[LE`rTGa2Tk`rl45
+fR5l6RrkGAb2@pj2a[lb0(Fp2dQ+hAJp(pAKCV0I6Y0j2BIar"e22CLLrAqIY[di
+MRUE6iMBI,'M50M2T-jAN64[6ISb1RkUIrjce0qI2mld&PdY,YBmaU,6DFlY1ImE
+-Fpb1!rFP2#qeNm9m2JjIkY"f21r`TVpjdpKrhqrUHHV"6c!TiM6e@)d`Td+8XYq
+$%qErKLPIZM'hTC'dV26kVr(*rZdA%h@krpV1[fYVlZmNlMA8Z4j6XHKjVir1T2k
+riq(RU2pIk2'q5Pj[!c8DcUXhYpYrl4Ec1pc*Nl6[2N5KS)Q,hRHBAk"3`3S@R8G
+IYYYl(KpK[r1iHVeIm0cZGrY+h-%5dAq*qRr[rIRHTeQCfADk[jippf(4c[6C6GN
+6l$ep6ce,P2#r25kP-&IhH*rMN[9b1)k[q'*ml'IlNhRV*KkI%E$BIZT[cqdi`pT
+q(FlRf2*Nq2i2QjV0GYYYYrR@eZBm(NH4m,`DIqpGcZCm$q(0Fapr!Mj28k[Sm0`
+[!`rM@QTkBA[rmbPkMRDrZ[iE$TI9kBAkAcXCYYTl'-0,[YiIa[cmM6IRh(`qQPf
+YjI2ClXriIdBZpZPhIER@IGGrXhAp12`H$aZRkrrh"i%IpHkMp0EC[j1Jq#IiejZ
+Y(YI1ZlD6pqH`A`f'PUZDhGRjhEFHmdFQlUY&k0&mHdSqQhhLk$IH,Z[aQ%V6dpa
+%qRX6K8m2X*0hh1VeHRi(!k(@c@RfNlcXe3aTdr3rD8mjcXe0!G86ZdcY$Y+Ia*b
+DNAddNBA%FR9Fa)jXdNrPbqBkV-j[VIcGMfHIdGRqM`09q[`r&erlGKX[0rRrAqe
+[FHVkhqGYl2ZHrm'lhQqqMkGr`1*pR'QD0F+h+mc@Fld24jA,G6QIc@(EkAmqRlq
+em$`Idk[pQYmIbI,mcq@cp$dlIerpqel[r[Jh9cmIcF(LIIH6-hIC9R"jc'1jcm@
+4bZ@kV0GEerCGVh(GIRlr`IdrVe[NI[mhq[pVMDrkpMfrHh&cmIbr4`1(pIhmH)H
+I,!dQ%`hi18UZAjVQS8`E*I+mjjrakc1iRcm6jq*reD@R1Fj-ChVX6jmljr1Fjjq
+jh2Rj$cpPX[2cXaLI#d2qXli@!mrPCM!Chcr2b&TLFlRH9cZGRE6VV6VTLdQ-EcP
+TDBhHr4ZE6'iR'ihVTMJCh'hV1iQpq&REhjrAHIHmlbXc-BQpK6+@Q0Y)Xad8dpF
+$Nc1AfQQCDq`S,e$P)8aHVkD"3+JQ,b9K,k)`2K5m%M)iiqD%dNbkkI*Q@Fi#!SK
+bd%T8`3G#l`",K@JP,iY*PkM`5pBY06mF"I@-46b*J(8XdrMDc6c#%YJI$)0QS*8
+9ea#3!,V04#Kr`!Q6IF0aJ(Ll8"DmdI8N)@4`jMfPp#&9rL#q33IMrk[(05p,"2`
+39-D#KJJbNc"L)),jr*DElj!!6H6QV#CSljX*U#Cli#N#Gp-C1([)HmQmR0j-r`C
+[)CacS%KL6Hk1'`SK`4,#FaFeB"!"NhNd#)1PmA,iX+!+PJmH(6`+2T9BE69KHqq
+[BP$aNa5aGmhPmX*V[M@6YBBXAb#)3N"'m)3fX2H"%2di&de"-E9,5"'[d2H%,!)
+b+Yib-JB)8B)3l#AVCI)%,!9-pp$X)GJT%2i6FJaB(8#1K$k%(p"a8Yrm`I3K$IP
+`8S)%3*%)J+$Ea!NYYCEDS%QX@U$&*N#%G+Q$TKI#cPmUa-ppHk1pdD"#KM+b0Sm
+m)P25XD3)8+"UbdPlQ1SKC@#G9Td()&'$!&"mL`m`3qKjMEh*p-%%'5VZPM!*NPE
+(,GTf(Ce&1&ePT*G@K5C*LNJRMeBdJ#B)"+!",m!Q"!5LF&(3K"%ABaEj1!3J4'L
+")3TASlNdb"L"*Nj[Q""cG*)Q$YEc53!S`3#6192+X#'%5akU3$BZf-T3)dT22#$
+h3)!41J-6X[Z$Cd!5CpN&1f"6!(ECTj5r(eQ3!%bKM8)%G#(d)2!a44#)SKFq*%F
+f4J)[QaP+&0'"f-TrUKFQ5Mf-TqZrJ42l'8b'$FSC,E'8ZCYP#*6XClBbQiMZ$!)
+"C+BV"HK""J"%9'+,BbQI3jJGM,C#Q!3A1a`1aQ1iR9+#M"d)md#$"'6*&QDH8r[
+1E'8rR-8mTjb4*K98f-@&-mc,EX'2*44HYK""IGM+88*8STj6bC`"!irR1Fc+IcL
+,RQ$5'!N[BbQe"cr0pTjDLSUH@MAd&,lc-Yc59*QRQlr5djI`X%!U!*CD6-B(Gc(
+F!3HeQbdNbJAUVlk%Yc3%'e+#@"i8TrT!M!MGS%D'+`@LrV""Iq%J4`)hC5hK5Pb
+J4J4Zj5jSe3d'-&`T6pD"'"'l3*+IVQ1NEK&`)H)%B%"CJH&-G`VQF+be@8rZJ4J
+4V8#0$&DM-BZ8mkB9-8#)%C9&!MJ3TP9f1Y+@PB8#-#0DJ3VLQ!Z4+brj3)`)eT6
+dS$1&LTGb8#PE$ei*AHkL#@bH8JP[A`8%[LrMJPkhQi*I)H3AXjf#pprc4I'[D#I
+'`$N--)GKrQ#''NaNqPJQ2A`CH[#J[J+Acbri3A`'*N1*N!"bC$bC##D##DaIb'6
+2r-%d#Nf$N3$)JB6JX6J16J)4IAM%*bdTXZRJPYer@#Ah[I,j#i)IHIE"-AlpJhj
+5#BiRqS,jN!$pTLHldhhpM"-l1C@m6"%p(I`Ah$ImCMliiH33GE""VX,"!5R!*%S
+(NThr-`3[2hN&kSmi!RCRaKf@NKi[H33CV033%VbQ0r6"epM"Bp"BbJI68'DJQB1
+[2`U`eM#Ja`#4`%j'aK@1@!MV6a!GI"IApMKi9qSJ`d&+$&kXBi#FP"h!#D%'-B!
+Q0JbpM+`EX",N"2L!6H!*[3%q-"-cBb`35d(C!*e3#I+!Rc!*mi#I3!Ql!5j!6iJ
+%hJ#Ed"2M!6kJ%iJ#I@!Rf!*pYM,@1q!LVXCH$D!*EJ*kJ#A!#HU!Rp`%6)kiFQ#
+'*!4r%Krk",&3*f3JCN"1e!6X`%bi#9GMHa8Pa8Pa8Pa8Pa8Pa8Pa8Pa8Pa8Pi2Z
+!6l`%Z`%i`#EX",N"2L!6H!*[3%q0NQAXNbpNQAXNbpNQAXNbp`C!J$(J*cJ#C%"
+2q!*lB#Hi!RZJ*rdL6DJ4S!%ii#IeC2LS)q4Bf2(e$Mqj!Il%$r+f2F`@+Q$T5!-
+Uc"",3C3"1Q!69!*Y!%Y`%p3",J"29!6qj(Qj!MY!%l8"-`j*(E!*RJ%qi"2[!5l
+!6M0Q#a8`GB"(jQ64$*SK`Cm$1V!MUJ%X!%q8"2Q!6j`%qJ"2U!6L!*pB#IB!RfJ
+*[J%64eeM-2P2,&2#K"9d9I&AM*Z9m9D(m`!3Iq!6ri#EJ"2J!6*&#1Q!69!*PE'
+pNb5pMe`iFm!Qf!6rB#EHaKf2X@-16GprLj2hlh[@Ab5RVi+6*SqcNb38[2,f%Qm
+@-3aJ,(3C2eR+KHAjD*fC3ePL3BF64hHi0!Hk62J*"mX%2j[9[TTUJSi2m`5Z4k'
+Vk)$-4d63MP[amhq2*(FiV1Eb(ikd%2#a'5j[S3)mB&$DhPelpjp5*P`jMfT-Q0"
+#@VD9U[m)-PHa3C8aN!"N[l#$-SFr8D#Jr#cZZrb3!'FP%3C5p+JcU2T3Cq2rU$-
+cXQHR$q"kIi1`US)Ibkfr9d%l'Jl,@!C[BI@pAQHal6VHdd$d%Yj1@J`!!!!Mhfp
+f!!N!N!"PH'0Y,A4PH(4eFQ9c,ABb!!J3C'pNEbe8CAKdGA*PFbj`E!%!!!!)9%9
+B9#T849LQ"V'-TJDaM!%!NkNTpJ!#!!!"YJ!!!'i!!!'U!!!!EK4NEf4[,94PH(4
+eFQ9c,R*PB@4YC3%!!!)J9%9B9#T849LQ"V1+TJDcLJ%!X)%5!`!#!!!"YJ!!!'%
+!!!%P!!!!B3YNEf4[,QePG(*TB`%!!!1Q4NC*6#GJ3dfQ"U@HTJDbI3%!CDVPA!!
+!!!!"X`!!!!!!!!'R!!!!!"4PH'0Y,A4PH(4eFQ9c,ABb,Q4[B`%!!!909%9B9%e
+"3d'RMdmPTiqNM3%!4CLVG`!'!!!"YJ!!"3m!!!'H!!!#mK"&H(4PEQ4PC%008M%
+`,ABb!3!!#Ge'4NP-*f"$6DAqcifR+MZE!3#qAbpG!!)!![mA!!!!!!!#0X3!!!!
+!%89iG'9ZC'9N3de66$%`,ABb!3!#3+&'4NP-*f"$6DAqcifR+MaE!3!JCp@f!!)
+!!a9@!!!!!!!#@6X!!!!!%89iG'9ZC'9N3de856%`,ABb!3!%QGa'4NP-*f"$6DA
+qcifR+M`e!3"Qr3D$!!)!!aM(!!!!!!!#D5!!!!!!$9408M%`,8eKCc!YGM)"!!F
+#r%C'58`RB%00TIl2MDDDGfi"!,M*!rm!!J!!HZF!!!!!!!"Sb3!!!!"'V`!!:
diff --git a/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2.readme b/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2.readme
new file mode 100644
index 0000000000..5d1d792cf0
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmfonts.dir/excm-textures-v2.readme
@@ -0,0 +1,22 @@
+excm-textures(v2).doc
+
+ excm-textures(v2) is a second posting of extended
+Computer Modern fonts for Textures to be used with the
+CaesarCM accent administration macros.
+
+ It is needed only because of a defect in the font
+metrics of the first posting. Kerning involving accented
+characters was omitted from the TM fonts of D. Taupin 1992,
+on which the first posting was based. In this second
+posting the font metric files are instead based on the DM
+virtual font series of Brouard and Sullivan 1990.
+
+ The massive font bitmaps are unchanged. Thus users who
+have the first posting for Textures already installed can
+use a small update package called
+
+ excm-textures-92update
+
+and with ResEdit replace the old *TFM resources by new
+ones.
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/caesarcm.doc b/macros/generic/caesarcm/caesarcmv2.dir/caesarcm.doc
new file mode 100644
index 0000000000..1c03c942bf
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/caesarcm.doc
@@ -0,0 +1,961 @@
+%%%%% CaesarCM.doc, April 1992; version2, Sept 1992, Jan 1993
+
+
+
+ === CAESAR-CM ===
+
+ **** A SMART HYPHENATION AND ACCENTUATION MACRO PACKAGE ****
+
+ --- documentation ---
+
+ Laurent Siebenmann
+
+ The name Caesar originated as the "non de guerre" of the Roman
+conqueror of Gaul. It is often repeated that "he was untimely ripped
+from his mother's womb". Our use (like the Romans') is explained by
+the Latin verb caedere, to cut, (past participle caesum), and the
+nouns caesura, the cut, and decisio, juridic decision. The present
+use of the name Caesar comes more immediately via the French
+c\'esure, meaning a pause within a verse following an accented
+sylable, or (more recently) hyphenation.
+
+ The CaesarCM package was built to provide a flexible
+transitional solution to the problem of providing good hyphenation
+for French and (US) English under TeX implementations that for one
+reason or another are equipped with Computer Modern (CM) fonts
+rather than with fonts based on the conflicting (but improved) TeX
+norm of Cork 1990. Flexible is the keyword --- the hyphenation will
+be perfect for those fonts you have space to install in a suitably
+extended form, and it will never be worse than the respectable
+hyphenation that the HyAcc-CM package provides for standard CM
+fonts. It will probably remain in use until all TeX installations
+have compact virtual fonts in use which follow the Cork norm AND
+provide emulation of the original CM norm.
+
+ Although it was built with French users in mind, this package
+is not really specific to any particular language. Admittedly, users
+of some nationalities may not yet find all the features they want.
+(Germans will however find that ^^bd can serve as compound word mark
+<cwm> in the TM fonts specially prepared for CaesarCM.) Hyphenation
+patterns for many European languages are posted on
+
+ ftp rusinfo.rus.uni-stuttgart.de [129.69.1.12]
+
+ This package may be already out of date for PC microcomputers
+thanks to the great strides toward optimal implementation of the
+Cork norm using virtual fonts by the TeX implementations of
+Brouard-Sullivan and more recently Eberhard Mattes. MLTeX, an
+extension of TeX by M. Ferguson, has always offered excellent
+hyphenation.
+
+ In contrast, no firm schedule is known for the implementation
+of virtual fonts nor any form of MLTeX with a standard Macintosh
+interface (eg under OzTeX and Textures). This statement has to be
+clarified: for the unix-like Macintosh Programmer Workshop
+environment there is since early 1992 a TeX environment called
+DirectTeX by Wilfried Ricken which has rudimentary virtual font
+support. (Available by anonymous ftp from ftp
+rusinfo.rus.uni-stuttgart.de [129.69.1.12].)
+
+ The major new feature of this macro package is flexible use of
+a number of (possibly partially) extended Computer Modern fonts,
+to obtain improved or optimal hyphenation for words typeset in
+these fonts. The prime goals here are to save disk space and
+maintain 100% compatibility with current TeX documentation and with
+archives of .tex files.
+
+ For fonts that are not extended at all, one gets, by default,
+an intermediate form of hyphenation due to Jacques Desarmenien; it
+is known through his French-English Plain format called
+feplain.fmt, and it gives good results except near accents. This
+intermediate form of hyphenation has been recently updated for
+international use by D. Flipo and the author. If your environment
+is "CM" but you do not have any extended CM fonts and are not in a
+position to install any, then you should use the smaller package.
+(I have travelers and American institutional users in mind here.)
+It is called HyAcc-CM.tex and is available along with this package
+on ftp rsovax.ups.circe.fr [130.84.128.100].
+
+ As a core sample to start from and build on, you will find
+with this package extended versions of the most commonly used prose
+fonts, cmr10, cmtt, and cmti10. They are provided in generic TeX
+format, and with some additional variants to serve the Macintosh
+TeX implementations Textures and OzTeX. These extensions come from
+a full collection "TM" of such extensions to the ISOLatin/1 half
+192-255 of the Cork accented letter range 128-255 that was
+provided in February 1992 by D. Taupin on
+
+ ftp rsovax.ups.circe.fr [130.84.128.100]
+
+(login: anonymous). This package is also available there.
+Beware however that all .tfm files used for extended CM fonts
+to be used (to advantage) by CaesarCM must be suitably marked
+either internally or by name. An appendix describes just how.
+
+ The net disk-space cost of the quite ample "TM" extension of
+(for example) cmr10 is is under 40K octets with all magsteps
+present in .pk format. In contrast, the full .pk version dmr10 for
+the Cork norm would amount to about 160K, of which half might be
+saved by jettisoning the CM norm version. But more importantly,
+without the flexibility this package offers, it would be necessary
+to upgrade all prose fonts at once at a cost of several megaoctets.
+
+ Daniel Taupin's aim in posting the "TM" fonts was to provide a
+straightforward continuation of the CM regime that taps the
+hyphenation powers of TeX available since fall 1989. This package
+arose as a result of my efforts to make efficient use of his fonts.
+His original recommendations required all fonts to be loaded under
+their "TM" names, and it imposed a trivial, but not completely
+hassle-free, revision of all formats and styles. In contrast I
+recommend that "TM" fonts be installed under "CM" names, because it
+obviates revision of preexisting format files; you just have to
+recompile as indicated below.
+
+ The abstract notion of a partial extension of CM fonts,
+on which this CaesarCM package is based, is made precise in the
+Appendix on EXTENDED CM FONTS. It would be fair to say the case of
+TM fonts is a preexisting ISO based standard that the architects
+of the Cork norm set out to enlarge and improve.
+
+ Purists may be irritated by my continued use of the name "CM"
+for the extended fonts, rather than "TM", or "dm" an earlier term
+due to Brouard-Sullivan for this sort of extension (see their TeX
+package for PC ibid.). I disagree: 100% upward compatibility by
+simple extension of CM following an undisputed norm justifies
+maintaining the name "CM". The resulting simplicity would be
+reason enough to use the term "CM" even if it were "immoral". In a
+many-user environment those who are happy with the original "CM"
+environment need not be aware that anything has changed --- just
+as with MLTeX.
+
+ The use of the designation Extended Computer Modern for fonts
+of the Cork norm is more deceptive since the Cork norm
+significantly disrupts the Computer modern.
+
+ See a full description given below of more useful switches at
+the users disposal. It should be emphasized that the average user
+will never need or want to make any adjustments whatever. They are
+made available for programmers and typographers.
+
+ Suppose that your TeX environment has space enough for the
+full collection of extended computer Modern fonts, say as
+distributed by D. Taupin on rsovax.circe.fr. Is there advantage
+to be derived from the use of this CaesarCM package? I suspect the
+answer will be yes for a very long time to come.
+
+ Firstly, the Computer Modern style is just one style of many,
+and since even the Taupin fonts are not fully extended, it is
+eminently reasonable to allow for other fonts extended over a
+different subset of the Cork "semi-norm" 128-255. The fonts being
+produced by J. Zlatu\v ska <zlatuska@cspun12.bitnet> give an example
+(see Cahiers GUTenberg 10--11, pages 57--68). It is worth
+emphasizing that the "smart accents mechanism" of CaesarCM allows this
+by operating on a fontclass-by-fontclass and character-by-character
+basis. Secondly, the world has quite a population of unextended CM
+fonts such as Concrete Computer Modern ("ccr"), Pandora, Lucida.
+CaesarCM gives perhaps the simplest way of using these along side of
+nontrivially extended fonts. For example, it might be reasonable to
+do the main text of a schoolbook in tenpoint "TM", and the exercises
+in ninepoint "ccr" plus Euler math fonts.
+
+ As mounted by Textures on the Macintosh, the PostScript fonts
+are, in effect, exotically extended CM. (They have some
+miscellaneous chacacters >127 but not in normalized positions.) By
+default CaesarCM treats them as unextended CM fonts.
+
+ Here is a helpful but incomplete description of how Knuth's
+accent syntax \', \`, \^, \" etc. acts after this package has been
+loaded. A more complete description is provided in appendix xxx.
+Consider \'e for example (in prose). The extension class of the current
+font \font is normally identified by a large negative value of the
+function \skewcharacter\font. Then the presence of a ready-made
+"e-acute" character for this class is tested at the location
+specified by norm --- by testing whether a macro labelled by the
+class and the position is defined. If a ready-made character is
+detected, it is used. In other cases the approach of HyAcc-CM is
+followed: Knuth's \accent macro is used to form a composite
+character, and the trick of Desarmenien is applied to allow hyphens
+in the same word but not too close to the accented character.
+
+ For French, nearly all hyphenation breakpoints become available
+if just <e-acute> and <e-grave> are available in the extended CM
+font. Such a miserly extension of CM applied to all prose fonts
+and then further enhanced by generous extensions of the major prose
+fonts by the "TM" series might offer the most economical use of
+this package in a typical French microcomputer environment.
+
+ To benefit from this package, accents must be produced via Knuth's
+accent syntax \', \`, \^, \" etc., but the use need not be direct. It
+is possible to type ready-made accented characters, provided these
+characters are made active (macro-like). For example definitions of
+the form
+
+ \catcode`\<e-acute>=13 %% active category
+ \def <e-acute>{\'e}
+
+will do the job. Most TeX sites offer a suitable file of such
+definitions. Avoid definitions of the form
+
+ \edef <e-acute>{\string^^e9}
+
+or
+
+ \def <e-acute>{\char"E9}
+
+as they will only work when the current font has an <e-acute>
+present in the slot "E9 provided by the Cork norm.
+
+ This package wraps up all the considerable complexity of
+previous macros for accents and hyphenation, notably those coming
+from M. Ferguson's MLTeX. I have had to simplify and compact them to
+build something more flexible. This process naturally introduced
+some bugs. Some may remain, so please report untoward behavior
+promptly!
+
+ I offer sincere thanks to several colleagues for various forms
+of assistance. I have already mentioned recent contributions of
+Daniel Taupin and Daniel Flipo that provided vital ingredients.
+Laziz Abdelouhab piloted Victor Ostromoukhov's Mac Metafont for me
+under MPW, and also the Blue Sky Research font tools. Barry Smith
+and Doug Henderson provided me with clues on fonts for Textures
+after generously allowing the posting of their font tools in July
+1991. I hope others yet will go the final lap to install this
+mechanism for the multitude of users who lack familiarity with TeX
+fonts but need improved accents and hyphenation at very modest cost
+in disk space.
+
+ A quick test of this package, is indicated in CaesarTeaser.doc.
+For permanent installation, instructions are given below.
+
+ Most users making a permanent installation of CaesarCM will
+want to simultaneously install hyphenation patterns, and other
+facilities for peculiarities of the language(s) to be used. Such
+installations of several major formats are provided for French &
+English by fe-format-dumper-cm (same postings); it can hopefully
+serve as a model for dealing with other languages.
+
+
+ --------------------------
+
+
+COMMAND SUMMARY
+
+ Most users should be happy with the default settings of
+CaesarCM. Thus the following commands are mostly for programmers;
+their description tells a lot about how CaesarCM works.
+
+ --- \Caesar, \noCaesar :
+ These turn on and off the basic smart accentuation mechanism of this
+package. A ready-formed character-with-accent is used whenever
+available for the current font class, and otherwise an accent is
+combined with an unaccented character.
+
+ --- \ShowCaesar, \HideCaesar :
+ Diagnostic commands to show on the TeX log when a
+character-with-accent is used via the "smart accents" mechanism,
+and when a font is identified for the first time as an
+extended CM prose font.
+
+ --- \ShowCurrentFontClass
+ Shows on the TeX log the font class Caesar has assigned
+to the current prose font for the purposes of accent formation.
+
+ --- \skewchar<font>=\CaesarClass<class>
+ manually reassigns the class of a <font> like \tenrm to a class
+like CM or TM. Caesar usually does class assignment automatically on
+the basis of internal marking of the .tfm or the font name. This
+command lets Caesar exploit fonts with unmarked .tfm's having
+arbitrary name.
+
+ --- \JDaccents \noJDaccents :
+ These turn on and off a Jacques Desarmenien mechanism that allows
+hyphenation far from the accents in a word with composite accents.
+Roughly speaking a word-break is introduced between the accent and
+the underlying letter, but zero space is actually inserted and no
+line break is allowed there.
+
+ --- \MLcodes, \noMLcodes :
+ Let \ae, \Ae, \oe, \Oe, \o, \O, \i participate (respectively do not
+participate) in the hyphenationation process and in action of
+\uppercase, \lowercase.
+
+ By default one has \Caesar, \JDaccents and \MLcodes. Provided
+no accents and no exotic characters occur in a given word, this
+still gives the same possible breakpoints as Knuth's standard Plain
+TeX 3.0. If for some reason you need its rather unpleasant behavior
+in the presence of accents, use the unpleasant command
+\noCaesar\noJDaccents\noMLcodes.
+
+ --- \RawPSText, \CMText :
+ Some implementations of TeX, for example OzTeX (but not Textures),
+offer no ready-made adaptation of Adobe PostScript fonts to the CM
+font encoding. Then a good many things have to be redefined when
+one passes from the default Computer Modern regime to the "raw
+PostScript" regime. This is the job of \RawPSText, and \CMText brings
+you back. Do not forget to load PostScript fonts (via \font) before
+trying to use them. Also, be alert for portability problems,
+inevitable when different standards clash. The raw Postscript font
+encoding includes no ready-made accented characters.
+
+ --- \showhyphens{\myfont ...} :
+ This is standard Plain TeX, but there is a new twist in its
+behavior. It serves to indicate the possible hyphenation points
+available in a piece of text .... What is new is a possible
+dependance on the (text) font \myfont you use --- and CaesarCM is
+responsible for that dependence. Beware that if you do not specify
+the font explicitly, Plain TeX uses \tenrm --- NOT the current
+font! Note also that the breakpoints shown may be unavailable
+because \lefthyphenmin and \righthyphenmin are greater than 1.
+
+ The following commands are for combatting
+occasional bugs; see Caesar.bugs for details.
+
+ --- \noDSaccents, (and \DSaccents to return)
+
+(DS meaning Double Strike) serves to combat low resolution printer
+smudging of composite accented characters.
+
+ --- \ufcr or equivalently \UpdateFontClassRegister
+
+serves to restore an occasionally suppressed kerning before the first
+accented character after a font class change.
+
+ ========================================
+
+ The following two Steps (A) and (B) make CaesarCM fully
+functional.
+
+
+ (A) FONT AND METRIC UPDATING
+
+ To derive any benefit whatever the novel feature of the
+CaesarCM mechanism, you will want to add some CM norm fonts that
+have been significantly extended to the range 128-255 in accordance
+with the Cork norm of 1990 (see possibilities above), and been
+suitably marked as extended.
+
+ If such a font goes under a new name, say tmr10, you can
+install or remove it just like any other font, and then go straight
+on to step (B).
+
+ For serious use, it is recommended that you install extended
+versions of your principal prose fonts, normally cmr10 and cmti10,
+and add more if the need arises.
+
+ We consider the case of bitmapped fonts of the .pk norm. Each
+font comes in two parts: a .tfm file such as cmr10.tfm containing
+all the metric information TeX needs and a collection of .pk files,
+one for each magstep. Each .pk file contains the character
+bitmapped images for the printer.
+
+ A copy of the extended version of each .pk file should replace
+the original; the name should be that of the original, say
+cmr10.pk300 not tmr.pk300.
+
+ One does the same with the .tfm file. To create or obtain a
+suitable modified .tfm, see an Appendix.
+
+ It is helpful for the user to be able to readily distinguish the
+extended CM fonts from the unextended ones. The devices for external
+identification vary. Size, date, and name are always helpful. For OzTeX
+and Textures on the Macintosh, identification by icons is provided (see
+Appendices). Once CaesarCM is loaded identification is easy.
+\ShowCurrentFontClass tells the class of the current prose font (the one
+identified by \font). For example (under plain)
+
+ \it \ShowCurrentFontClass
+
+will tell you (on the log) the class of the font for italics.
+
+ Fonts can be added just a few at a time, as needed to maintain good
+hyphenation. However, beware that if you extend a standard font that is
+used in your precompiled format, then the smart accents mechanism cannot
+use the new accented characters until your format is recompiled as in (B)
+below to absorb the new information in the corresponding .tfm.
+
+ --------------------------
+
+ (B) COMPILATION OF CaesarCM COMMANDS IN A Plain FORMAT
+
+ It is important to use version 3.xx of TeX, and a version 3.xx
+of plain.tex. The critical date is autumn 1989, and earlier material
+will be inadequate.
+
+ Here are instructions for a generic TeX, with Plain Format and
+French language and just to be specific. More elaborate formats will be
+used in practice and are discussed below.
+
+ fhyphen.cork is (or calls) a copy of the French hyphenation
+pattern file using the ISO Latin 1 (or Cork) standard for encoding
+accented characters. Place together in one directory:
+
+ (i) a copy of fhyphen.cork renamed hyphen.tex
+
+ (ii) a copy of plain.tex exactly as provided by D. Knuth
+
+ (iii) a file x.tex whose contents is the single line:
+
+ \input plain.tex \input CaesarCM.tex \dump
+
+Note that some systems (Mac, VMS, ...) identify upper and lower case
+letters, while others (unix, ...) distinguish them.
+
+ Compile x.tex using INITEX or VIRTEX, i.e., the primitive form
+of your TeX made for format building. After launching this TeX, one
+responds to a prompt ** by typing
+
+**x <carriage return>
+
+It does not matter if minor fonts such as manfont are missing; just
+hit carriage return. In time you should be invited to name the
+resulting format. Choose a distinctive name; it is often useful to
+indicate the TeX implementation and/or configuration used, since a
+format will normally run only with its parent TeX binary.
+
+ With this format you can run various hyphenation tests with
+various fonts and font configurations.
+
+ Where French is concerned, the compilation of formats can be a
+more complicated matter. This is because it is vital to accompany
+French hyphenation by French spacing and punctuation through the use
+of active characters, and this still causes complications with many
+formats such as AmSTeX and LamsTeX. Thus, a special French(-English)
+format compilation mechanism has been provided. It is called
+
+ fe-format-dumper
+
+(or fe-fmts for PC's) and is posted as a directory on on ftp
+rsovax.ups.circe.fr [130.84.128.100]. It is not part of CeasarCM
+which is to be kept basically language independant. Further,
+fe-format-dumper serves HyAcc-CM as well as CeasarCM.
+
+
+WHEN SHOULD YOU RECOMPILE?
+
+ You should recompile your format, whenever you extend a
+font it uses. This is because the old .tfm file is already in
+the compiled format; thus to take account of the new .tfm you must
+recompile! It is true that this can be a pain if you are
+unprepared; fortunately there numerous exceptions to this rule.
+
+ This need arises from a weakness of TeX: it cannot unload a
+font of a given name, and it will never load a .tfm of a given
+name xxx a second time (via a command of the form \font\ft=xxx).
+Instead it reuses the .tfm named xxx that it first loaded.
+
+ On the other hand, if the fonts in question are defined for
+the first time in your style file (not your format),
+then there is no need to recompile your format.
+
+ Many users have formats that are not to be recompiled, perhaps
+because the the ingredients are not readily
+available, perhaps because you dislike format compilation. In such
+a case, it may should be possible to place yourself in the above case
+mentioned where no recompilation is needed. Suppose for example
+one wants to further extend cmr10, say from a version including
+just French accents to one with all european accents. WITHOUT
+RECOMPILING ONE CAN INTRODUCE THE EXTENSION UNDER A FRESH NAME, say
+eumr10. To use this font instead of cmr10 it usually suffices to
+put
+
+ \font\tenrm=eumr10
+ \rm
+
+in your style file. This should override \font\tenrm=cmr10 in your
+compiled format. This is quick and quite practical, but it is best to
+regard it as a temporary measure, which if pursued could lead to a
+bloated and anarchic font collection.
+
+ --------------------------
+
+
+ Appendix EXTENDED CM FONTS
+
+
+ By a CM extension class we will mean a subset E of the accented
+characters of the range 128--255 of the Cork norm.
+
+ By a (partially) extended CM TeX font "belonging to" class E will be
+meant one extending the Computer Modern norm for alphabetical fonts in the
+range 0--127, and in agreement with the Cork norm for the subset E of the
+range 128--255.
+
+ In practice it is reasonably clear what "extending the Computer
+Modern norm" means. It is perfectly clear when, in the range 0-127, your
+font coincides in all respects (including name) with one of Knuths CM
+fonts. But note that cmr, cmti, and cmtt differ slightly; for example cmti
+has a pound sign where cmr has a dollar. The Cork norm of 1990 eliminates
+such variations.
+
+ The CM fonts of Knuth, the "TM" fonts of Taupin, and the
+virtual fonts of J. Zlatu\v ska are naturally of extended CM type.
+
+ Unfortunately there exist incompatible extensions of "CM"
+fonts, notably the numerous adaptations of Adobe Postscript fonts
+used by Textures on the Macintosh. (Many other TeX's use raw
+PostScript encoding, which makes these fonts "non-CM" even in the
+range 0-127; Caesar does not deal with them at all.) Such
+noncompatible extensions can be regarded by CaesarCM as
+simply CM fonts (ie as extended CM fonts of class E where E is
+the empty set). The extra characters do no harm, but they cannot
+be exploited by the smart accents mechanism of CaesarCM.
+
+ For an extended CM font to be useful to CaesarCM, an
+extension class E to which it belongs must somehow be made known
+to CaesarCM, which is then prepared to use the ready-made
+accented characters that belong to E.
+
+ Remember then that an extended CM font of class E
+may have some (other) accented characters contradicting the
+Cork norm; CaesarCM just ignores the latter.
+
+ Each new class must be made known to CaesarCM.tex by
+adding suitable data. Currently, just three classes are known to
+CaesarCM.tex, namely
+
+ --- a class CM, the "trivial" class of Computer Modern for
+which E is empty,
+
+ --- a class for TM fonts which (roughly) has E the set of
+accented characters in the segment 192-255 of the Cork norm.
+
+ --- a class AD, the Adobe type one font distribution
+reencoded to extended CM, August 1992 with N. Jungers.
+Coincident with TM in Aug 1992, but hopefully to become
+somewhat larger.
+
+ Other classes can be added with help from a TeX
+programmer.
+
+ Since for each font, CaesarCM needs to have a specified and
+known extension class E, we have to provide means to specify it.
+
+ 1) By default the assigned class will be empty, as for CM
+fonts, but this can be changed to TM (say) by the command
+\let\CaesarDefaultClass\CaesarClassTM.
+
+ 2) The .tfm file may carry external or internal markings that
+cause CaesarCM.tex to conclude automatically that the font belongs
+to a certain class. See the following appendix for details.
+
+ 3) The class can be (re)assigned by command at any time by
+
+ \skewchar<font>=\CaesarClass<class>
+
+where the current possibilities for <class> are CM and TM. For
+example with Plain TeX,
+
+ \skewchar\tenrm=\CaesarClassTM
+
+assigns class TM to \tenrm. (Currently, \CaesarClassCM gives -10
+and \CaesarClassTM gives -20 but these numerical values may be
+ephemeral.) Such an explicit assignment takes priority over an
+internal marking as in (2) above.
+
+ There may be several font commands, say \tenrm and \myrm that
+refer to the same font cmr10; happily the above class change applies to
+all at once --- they are indeed the same font.
+
+
+ Appendix MARKING EXTENDED CM FONTS
+
+
+ CaesarCM uses the notion of a
+
+ "marked and extended"
+
+CM (metric) font. The marking serves to automatically specify an
+extension class to which the font belongs. Note that the marking
+can always be replaced (or overruled) by an explicit class
+assignment as in (3) above. Marking is thus an optional extra
+convenience.
+
+ *** External marking by name prefixes.
+
+ CaesarCM automatically recognises the following two-letter
+".tfm" file name prefixes:
+
+ cm, CM, dm, DM, tm, TM
+
+If one of these prefixes occurs it tests whether <eaccute>
+(at Cork position "E9) has positive width. If so it
+assigns class TM. (A standard CM font of course fails this test.)
+
+ This is a test of last resort that applies only if
+other tests would say nothing (ie give the default class).
+
+ Norbert Schwartz and Daniel Taupin have recommended accent
+management based entirely on prefix tests. (See the June 1992 GUT
+forum proceedings including some macros of Schwartz) CaesarCM makes
+prefixes one of many useful tests; its use of \skewchar as the basic
+prose font class identifier allows this diversity.
+
+
+ *** Internal marking.
+
+ All fonts distributed with CaesarCM are marked internally
+marked to assure that their behavior under CaesarCM is (normally)
+independant of the name assigned.
+
+ The internal marking used is very strange; so it is well to
+explain first why mundane solutions seem to fail.
+
+ For other TeX packages, the marking device most used is a
+distinctive prefix for the font name. This works because the
+filename of a font \myfont is available to the programmer through
+the \fontname primitive. For example, \edef\temp{\fontname\myfont}
+places the fontname (without the .tfm suffix) in the expansion of
+\temp for further processing. However, to minimize space needed and
+also hassle, CaesarCM recommends using extended CM fonts under the
+name of a naturally corresponding unextended CM font. Thus another
+marking device is needed.
+
+ Other sorts of software, tend to use headers. Indeed, most
+data structures include headers. The .tfm format (which originated at
+Xerox Park) is no exception. Unfortunately TeX seems to heed little
+of this information and passes none on to the TeX programmer.
+
+ One can readily store accessible information in extra font
+dimensions (see TeXbook page 433). Unfortunately, when one consults a
+nonexistant font dimension, an error message is produced.
+
+ Here is the primary `mark' used by Caesar (version 2)
+
+(*) --- (small) positive depth for the ASCII character "5E, the hat
+accent.
+
+ This indicates that the class is not CM. It also indicates
+that fontdimension 8 is present, which then leads to further information
+on the class.
+
+ The hat is a character which, under normal typographic variation,
+will retain depth exactly 0, since its geometric "bounding box" is far
+above the base line. This information cannot be tampered with by other
+macro packages. Seemingly, it is reliable inasmuch as every alphabetical
+font (including PostScript type) that is likely to be encountered in
+prose will have hat in this position.
+
+ You can test whether a .tfm file satisfies condition (*) by
+installing it as indicated in the main text, selecting the font in
+question, and then using the line
+
+ {\catcode`\^=11\setbox0=\hbox{^^5e}\showthe\dp0}
+
+ While only one font class is in use (the class of TM),
+no other information is needed. However other classes
+will be distinguished later on by special values of
+various fontdimensions. For example, it is expected that
+
+(**) --- a small negative value for fontdimension 8 will indicate
+that the font class is TM (or AD).
+
+ When other indications are needed the above rules will be
+extended. Contact the author if the need arises.
+
+ Postings of extended computer modern fonts will hopefully be
+accompanied by .tfm files that provide the above marking. If
+you find that this is not the case, you can use the command
+
+ \skewcharacter\myfont=\CaesarFontClass<classtag>
+
+Alternatively, here is a way to mark a given .tfm file as being
+of class TM. Use a conversion .tfm <--> .pl, as provided in a
+metafont installation, to be able to edit the .tfm file in its
+readable ASCII .pl form. Then change the .pl version by addition of
+a line
+
+ (CHARDP R 0.0001)
+
+to the entry for the character number hex "5E = octal '136. This
+makes the depth .001 pt. (Negative depths are rejected by Knuth's
+PLtoTF program.)
+
+ As for (**) you add a line of the form
+
+ (PARAMETER D 8 R -0.0001)
+
+after the line
+
+ (EXTRASPACE R ???????)
+
+specifying fontdimension 7.
+
+ Since you can expect to need just a few fonts to obtain adequate
+hyphenation this "hacker's approach" should be adequate.
+
+
+
+ APPENDIX. The Smart Accents Mechanism
+
+ There is a fragility of the TeX kerning and ligature mechanism
+that is a serious limitation on the way this CaesarCM's announced
+behavior can be programmed. It is a surprising fact that TeX code
+intervening between two characters strongly tends to prevent kerning
+(and ligature) of the characters. Indeed any code that does not
+evaporate without trace under macro expansion (in TeX's mouth) seems
+to prevent kerning. For example, \count255=1 and {} both leave some
+trace, whereas \if\count255=0\count255=1\fi leaves a trace only if
+count register 255 is 0, and \empty never leaves any trace. The
+rather innocent looking traces mentioned here do not interfere with
+hyphenation. But they do prevent kerning (and ligature), as Bernd
+Raichle <raichle at azu.informatik.uni-stuttgart.de> pointed out on
+the GUT list (July~1, 1992). In version~1 of CaesarCM, kerning
+between a ready-made accented character and the character preceeding
+it was hopelessly poisoned by spurious typesetting designed to test
+whether a ready-made accented character was present in the current
+font.
+
+ Unused potential of the \skewchar mechanism of TeX provided means
+to skirt the above difficulty. First some background. There is an
+integer font parameter \skewchar<the font> which is automatically set
+to \defaultskewchar, normally -1, when a font is loaded. For some
+math fonts (e.g., cmsy but not cmmi), Knuth sets it in Plain TeX to
+an appropriate (positive) character code that then serves to control
+accent placement in math mode. It seems that \skewchar has never been
+exploited for prose fonts.
+
+ The idea is to assign for each prose font a large negative value
+(one less than \defaultskewchar) to the function \skewchar that will
+serve to identify the extendion class of the font.
+
+ Here is, in outline, how an accent macro like \'#1 then works.
+A `current extension class' integer register is first compared with
+\skewchar\font. If they coincide, the current accent handling macro
+is used. When extension class TM is current, this macro checks whether a
+ready-made accented character has been assigned to the triple
+TM,',#1; this is an \ifx...\fi test that leaves no trace if the
+answer is yes. If yes use it, and if no use the recipe of HyAcc-CM to
+form a composite character. This much runs at high speed, and in the
+case of ready-made accented characters, it allows kerns and
+ligatures. In the rare case when \skewchar\font is distinct from the
+current extension class, CaesarCM goes into a more time-consuming setup
+subroutine as follows. If \skewchar\font is still the initial value
+\defaultskewchar, then, as a preliminary step, determine the extension
+class as indicated in the two appendices on extended CM fonts, and
+reset \skewchar\font to this value, ending the preliminary step. Now
+reset the current extension class to \skewchar\font and \let the current
+accent handling macro be one predefined for that extension class.
+
+
+
+ --------------------------
+
+
+
+APPENDIX Oz. MACINTOSH COMFORTS FOR OzteX USERS.
+
+ For Macintosh users, some documentation is provided in a reader
+application. This application should not be ramoved from your TeX volume
+because it carries icons useful for identifying font files for
+CaesarCM.
+
+ Namely the bitmap and .tfm files for the CaesarCM mechanism get
+highly visible icons (distinct ones for OzTeX and for Textures). Other
+.pk's and .tfm's are unaffected. This originally applies to the the
+.pk's and .tfm's provided in the CaesarCM package for OzTeX. To
+maintain this behavior for other files you later introduce, you should use
+the universal Macintosh system tool ResEdit to change the type and
+creator strings respectively to
+
+ **pk and '`^"
+
+ *tfm and '`^"
+
+For this see "info..." in the file menu of ResEdit. Under some
+Macintosh systems it may be necessary hold these files on a diskette
+for the change. In all cases, to bring the new icons into view, the
+documentation reader should be kept present alongside the files.
+
+ These icons make it clear for which fonts you already enjoy
+enhanced hyphenation. They do not, at present, reveal the degree of
+enhancement, but they may in future versions.
+
+ --------------------------
+
+
+APPENDIX Textures.
+
+ Postings of the CaesarCM package include some extended CM
+fonts for Textures, the first implementation of TeX on the
+Macintosh.
+
+ Macintosh format font data should reside in files of type
+FFIL; they carry distinctive suitcase shaped icons. The data is
+automatically accessed by Textures if it is placed in a folder
+called TeX Fonts which lies in the same folder as Textures.
+Suitcases can also be accessed from within Textures and through
+Suitcase II.
+
+ The .tfm files for Textures are in Macintosh resources of
+type "*TFM". The contents of the resource coincides exactly with the
+ordinary .tfm file.
+
+ Bitmapped fonts for Textures are of Macintosh norms rather
+than .pk. Each is of one of the following types.
+
+ (a) resources of type "FONT", possibly accompanied
+ by a resource of type "FOND"
+
+ (b) resources of type "NFNT", possibly accompanied
+ by a resource of type "FOND"
+
+Macintosh and Textures font administration seems to require that
+all magsteps for a given font be present in the same file and be
+(correctly) described by a single "FOND" resource.
+
+ Think of a complete font like cmr10 as a triple: a *TFM, a
+FOND, and thirdly a bunch of bitmaps either of type FONT or NFNT
+--- essentially one bitmap for each magstep available, but a
+few extra for the preview.
+
+
+MAINTENANCE AND TRANSPORT of fonts for textures for Textures
+
+ In practice, an absolute necessity for the administration of
+Macintosh bitmapped fonts is the utility Suitcase II and its
+sidekicks Font Harmony and Font&Sound Valet. The last of these
+provides compression --- twofold or better, which essentially
+corresponds to the passage in the TeX world from .gf (uncompressed)
+to .pk (compressed) . Suitcase II provides access to the compressed
+files. (The .pk compression is superior.) Font Harmony and Font&Sound
+Valet provide administration; in particular the maintenance of
+suitable FOND resources. Suitcase II costs about $50. So long as
+there is no competitive alternative to the use of Suitcase II,
+expect to find the extended fonts for Textures posted in Suitcase
+compressed format; such compressed fonts will not work at all
+without Suitcase.
+
+ The inferiority of Suitcase II's compression relative to
+Rokicki's ".pk" compression means in practice that the cost of TM
+extending cmr10 is 75K rather than 40K --- for all seven magsteps;
+for magsteps <=2 it is 32K rather than 17K. Users of Textures with
+disk space problems often restrict to magsteps <=2.
+
+ Use ResEdit for inspecting and editing all these font
+resources. Use it also to move all except the FOND-NFNT combination
+of of type (b) above. The latter job (only) should be left to
+FontDAMover.
+
+ Exercise great caution in employing FontDAMover, particularly if
+any FONT resources are present:
+
+ (a) Use only a very recent version of FontDAMover, and if you
+work under under Multifinder, assign it a maximum partition.
+
+ (b) First use Font Harmony to eliminate incoherencies.
+
+ (c) If FONT resources are present, first use ResEdit to remove
+them and their associated FOND's to another suitcase file.
+
+ (d) Keep suitcase files down to moderate size and keep backup
+copies. Move just a few fonts at a time.
+
+Note that any FOND-NFNT combination that is moved with
+FontDAMover will be decompressed by the move. As compression is
+often extremely slow, it is better to replace such moves by
+copying and FontDAMover deletions.
+
+
+INSTALLATION AND REMOVAL of extended Mac fonts.
+
+ Although the mechanics differ, the principles are exactly the
+same as for a generic TeX installation.
+
+ Installation of extended fonts whose names do NOT coincide
+with fonts already installed is a trivial matter. Just push the
+suitcase containing the new fonts into the "TeX Fonts" folder
+residing in the same folder as Textures. For fonts supplied with
+CaesarCM this suitcase includes the relevant *TFM resources.
+Removal is the obvious inverse provess.
+
+ In case they DO bear the names of CM fonts they extend, your
+extended fonts in effect replace the pre-existing fonts of this
+name. But, for purely administrative reasons, it is better to keep
+the extended fonts in their own suitcase. Then installation of the
+extended fonts neither removes nor destroys the font of the same
+name it is replacing. That is the users responsibility, and
+failure to attend to this will cause terrible chaos!
+
+ Later removal of extended fonts is really the same process as
+installation (you replace the extended by the nonextended).
+
+ Remember to attend to BOTH the .tfm's and the bitmapped fonts.
+Use font Harmony after every installation. Remember to recompile
+your format when the fonts it uses are modified.
+
+ If you encounter strange behavior in spite of the above
+precautions, consider gradually rebuilding your font collection
+starting with the extended CM fonts under Plain TeX. Many
+collections are somewhat raggedy and need a rebuild after years of
+use. Half of those I have seen are in this category.
+
+ CaesarCM is fully compatible with the CM/PS Postscript norm CM
+font collection marketed by Blue Sky Research; indeed bitmapped
+fonts in principle can be freely mixed with them. However this sort
+of configuration is the most complex in service and has the most
+bugs.
+
+ Be alert for the following standard ailments that only
+ResEdit can detect: missing *TFM resources, duplicate *TFM and
+NFNT resources.
+
+CREATION OF BITMAPPED FONTS for Textures
+
+ Blue Sky Research has permitted the posting on
+
+ ftp rusinfo.rus.uni-stuttgart.de [129.69.1.12]
+
+of a collection of Macintosh Programmer Workshop (MPW) tools for the
+conversion of ".pk" and ".tfm" resources to equivalent FOND, NFNT, and
+*TFM resources. If you start from "marked extended CM fonts" for a
+generic TeX, you get after conversion the same for Textures.
+
+ There are two technicalities to note.
+
+(a) There are .tfm files in some versions of Textures notably 1.4.
+These appear to be relevant to the use of fonts of PostScript norm
+only; try to ignore their presence; removal or tampering will cause
+PostScript fonts to misbehave.
+
+(b) Currently, *TFM files should be adjusted using the EdMetrics
+application to have
+ --- Quickdraw name equal to their resource name,
+ --- style Plain
+ --- Quickdraw map of "Other" type, number 6
+ Check current distribution for possible changes!
+
+
+
+Appendix. DESARMENIEN'S PIONEERING WORK.
+
+ Although this package was inspired by the availablity of the
+extended CM fonts of D. Taupin, it might reasonably have been
+inspired by rereading Jacques D'esarm'enien: How to run TeX in a
+French environment: hyphenation, fonts, typography, TUGboat, 5
+(1984) 91-102. The key concept of a special font class with
+ready-made accented characters occurs, and this includes a
+membership test, albeit one acceptable *only* for French, namely
+small negative value for fontdim 7 (the extra space between
+sentences). With Desarmenien's macros, \`#1 is redefined as
+follows: if the current fontdimension 7 is negative and the macro
+argument #1 is e, then use a tailor-made e-grave, and otherwise
+use Knuth's original accent macro. Desarmenien remarks that he
+would have used extended CM fonts but for a limitation of the 1982
+version of TeX, namely the impossibility of having true letters
+(with \lccode positive) in positions >127. He gives credit for
+an unspecified subset of his TeXnical tricks to Don Knuth and John
+Hobby.
+
+
+
+
+Laurent Siebenmann, Mathematique, bat 425, 91405-Orsay, France
+ siebenmann@rsovax.ups.circe.fr (tex)
+ siebenmann@LALCLS.IN2P3.FR
+
+POSTINGS: ftp rsovax.ups.circe.fr [130.84.128.100]
+ ftp matups.matups.fr [192.54.146.4]
+
+ Version 2 of Sept 1992 (alpha)
+
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/caesarcm.tex b/macros/generic/caesarcm/caesarcmv2.dir/caesarcm.tex
new file mode 100644
index 0000000000..0ae55c14c8
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/caesarcm.tex
@@ -0,0 +1,850 @@
+
+ %%%%% CaesarCM.tex
+ %%% April 1992 -- Jan 1994; (version 2)
+ %%% L. Siebenmann, Orsay <siebenmann@LALCLS.IN2P3.FR>
+
+ \chardef\JDCatAt=\the\catcode`\@
+ \catcode`\@=11
+
+ \def\Space{ }%
+ \def\W@{\immediate\write16}%
+ \W@{ ************************************************** }
+ \W@{ CaesarCM FONT-DEPENDANT ACCENTUATION MECHANISM}
+ \W@{ for Computer Modern fonts, POSSIBLY EXTENDED }
+ \W@{ to 128-255 according to the Cork norm of 1990.}
+ \W@{ Font-sensitive accentuation and hyphenation.}
+ \W@{ For installation and operation see CaesarCM.doc.}
+ \W@{ Version 2, Sept 1992 -- Jan 1994.}
+ \W@{ Updates: on CTAN TeX servers and ftp matups.matups.fr.}
+ \W@{ *************************************************** }
+
+ %% Prevent this sort of file being loaded twice!
+ \let\temp\relax
+ \ifx\JDaccents\undefined
+ \else\W@{}%
+ \W@{ *** \string\JDaccents\space already defined.}%
+ \def\temp{\errmessage{}}
+ \fi
+ \temp
+ \global\let\CaesarCMLoaded\relax
+
+
+ %% Prevent use of TeX < 3!
+ \let\temp\relax
+ \ifx\undefined\inputlineno
+ \W@{}%
+ \W@{ *** This is not TeX version 3.x }%
+ \W@{ *** You cannot use CaesarCM\string!}%
+ \def\temp{\errmessage{}}
+ \fi
+ \temp
+
+ %%% Require 128-255 be category 12
+ %
+ \newcount\Ct@
+ \count@="80
+ \def\temp{\W@{}%
+ \W@{ *** You should input CaesarCM }%
+ \W@{ *** while the characters 128-255}%
+ \W@{ *** still have category 12.}%
+ \errmessage{}\end
+ }
+ %
+ \loop
+ \Ct@=\catcode\count@
+ \ifnum\Ct@=12\else\temp\fi
+ \ifnum\count@<"FF
+ \relax\advance\count@ by \@ne
+ \repeat
+
+ \global\let\primuppercase\uppercase
+ \global\let\primlowercase\lowercase
+
+ \newbox\hy@accbox
+ \def\empty{}
+ \let\EX@\expandafter
+
+ %%% \IN@0#1@#2@ : Is 1st exp of #1 in 1st exp of #2 ??
+ %% Answer in \ifIN@
+ \newif\ifIN@\def\IN@{\expandafter\INN@\expandafter}
+ \long\def\INN@0#1@#2@{\long\def\NI@##1#1##2##3\ENDNI@
+ {\ifx\m@rker##2\IN@false\else\IN@true\fi}%
+ \expandafter\NI@#2@@#1\m@rker\ENDNI@}
+ \def\m@rker{\m@@rker}
+
+\def\stringer@#1{% \Temp is cat 12 string recipient
+ \ifx#1\endstringer@
+ \let\temp\relax
+ \else
+ \edef\Temp{\Temp\string#1}
+ \let\temp\stringer@
+ \fi
+ \temp}
+
+ \def\hyaccent#1#2{{\accent#1 #2}\@Allowhyphens{#2}\empty}
+
+ %% fragments to be reused
+ %%% double-strike accent character trick (DSaccents)
+ \def\@@@Allowhyphens#1{\setbox\hy@accbox\hbox{#1}%
+ \penalty\@M\hskip-\wd\hy@accbox #1}
+
+ %%% Next an ad hoc alternative to avoid double-strikes
+ %%% in emergencies when these cause trouble at
+ %%% low resolution <300 dpi.
+ \let\@dodo\empty
+ %% \font\@dodo=dodo %% not yet! see \noDSaccents
+ %%% dodo.tfm is a .tfm having null definition
+ %%% for "9F and nothing else.
+ %%% It must be installed for this alternative to work.
+ \def\@@@allowhyphens#1{\penalty\@M\hskip\z@{\@dodo ^^9f}}
+ %% Possible problem: if \lccode"9F is >0 (which is abnormal),
+ %% you should add \lccode"9F=0 just before \@dodo.
+ %% For printing, dodo .pk files may have to be installed
+ %% at suitable resolutions. A dodo.pk is provided.
+ %% A copy of any 128 char cm .pk font at all would do as well.
+
+ %% \def\@Allowhyphens{\@@Allowhyphens} %% default, see \JDaccents
+ %% \def\@Allowhyphens{\empty} %% not default, see \noJDaccents
+ %% \let\@@Allowhyphens\@@@Allowhyphens %% default see \DSAccents
+ %% \let\@@Allowhyphens\@@@allowhyphens %% not default, see \noDSAccents
+
+ %% temporary catcode changes
+ \catcode`\/=13
+ \catcode`\~=12
+ \catcode`\*=11
+
+ %%% Composite accents for CM fonts
+ %% TeXbook p. 52
+
+ \def\DoCMAccents{%% cf \dospecials in Plain.tex
+ /`'22..%% grave
+ /''23..%% acute
+ /^'136..%% hat
+ /"'177..%% umlaut
+ /~'176..%% tilde
+ /='26..%% macron (bar over)
+ /.'137..%% dot over
+ /u'25..%% breve
+ /v'24..%% check
+ /H'175..%% long umlaut
+ %%\t tie absent, see below
+ }
+
+
+\newif\ifRawPS
+
+ \def\DoRawPSAccents{%
+ /`'301C1..%% grave
+ /''302..%% acute
+ /"'303..%% hat
+ /"'310..%% umlaut
+ /~'304..%% tilde
+ /='305..%% macron (bar over)
+ /.'307..%% dot over
+ /u'306..%% breve
+ /v'317..%% check
+ /H'315..%% long umlaut
+ %%\t tie absent, see below
+ }
+
+ \def\CheckPeriod#1{\if#1.\else
+ \errmessage{ !!! Error in character data}\fi}
+
+ \def\Do@Accent@#1#2.#3{\CheckPeriod{#3}%
+ \expandafter
+ \def\csname @#1@\endcsname##1{%
+ \empty\hyaccent{#2}{##1}\empty}%
+ }
+ %%eg. '"13.. gives ##1 ---> \empty\hyaccent{"13}{##1}\empty
+
+ %% And an alternative syntax
+ \def\DoAccent#1#2.#3{\CheckPeriod{#3}%
+ \expandafter
+ \def\csname #1\endcsname##1{%
+ \empty\hyaccent{#2}{##1}\empty}%
+ }
+
+ %%% Residual cases:\c,\aa,\AA,\l,\L
+
+ \def\oldCedilla#1#2{\setbox0\hbox{#2}%
+ \ifdim .98\ht0<1ex\accent#1#2%
+ \else{\ooalign{\hidewidth
+ \char#1\hidewidth\crcr\unhbox0}}\fi}
+
+ \def\oldOgonek#1{\setbox\hy@accbox=\hbox{`}\ooalign{\hidewidth
+ \lower\ht\hy@accbox\copy\hy@accbox%\hidewidth
+ \crcr#1\crcr}}
+ \def\ogonek#1{{\oldOgonek#1}\@Allowhyphens{#1}}% ogonek
+
+ \def\oldL{\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}%
+ \def\oldl{\char32l}
+
+ \def\CrossBar#1#2{%
+ \if#2L\empty
+ \ifRawPS ^^e8\else\oldL\fi
+ \else
+ \if#2l\empty
+ \ifRawPS ^^f8\else\oldl\fi
+ \else#1#2%
+ \fi
+ \fi}
+
+ \def\oldAA{\leavevmode\setbox0\hbox{h}%
+ \dimen@\ht0\advance\dimen@-1ex%
+ \rlap{\raise.67\dimen@\hbox{\char'27}}A}
+
+ \def\psAA{\leavevmode\raise0.4ex\rlap{\kern0.2em\char'312}A}%
+ \def\psaa{\leavevmode\raise0.1ex\rlap{\kern0.05em\char'312}a}%
+
+ \def\OverCircle#1#2{%
+ \if#2A\empty
+ \ifRawPS\psAA\else\oldAA\fi
+ \else
+ \if#2a\empty
+ \ifRawPS\psaa\fi
+ \else{\accent#1#2}%
+ \fi
+ \fi}%
+
+ \def\oldUnderBar#1#2{\oalign{#2\crcr\hidewidth%
+ \vbox to.2ex{\hbox{\char#1}\vss}\hidewidth}}%
+
+ \def\d#1{%
+ \oalign{#1\crcr\hidewidth.\hidewidth}\@Allowhyphens{#1}}%
+ %%\d pure ASCII ascii, and no such in 128-255
+ %% hence totally invariant
+
+ \def\oldt#1{{\edef\next{\the\font}\the\textfont1\accent'177\next#1}}
+ %% not in Cork norm 128-255
+ %% hence invariant provided \textfont1=cmmi
+
+ \def\SetCompositeCMAccents{%
+ \let/\Do@Accent@ \DoCMAccents %% the \@?@ are reguluar
+ \def\=##1{\\@=@##1}%
+ \def\t##1{\oldt##1\@Allowhyphens{##1}}%% uses "7F from cmmi
+ \def\b##1{\oldUnderBar{'26}##1\@Allowhyphens{##1}\empty}% underbar
+ \def\@c@##1{\oldCedilla{'30}##1\@Allowhyphens{##1}\empty}%%%relax!
+ \def\@g@##1{\oldOgonek##1\@Allowhyphens{##1}\empty}%%%relax!
+ \def\@*@##1{\OverCircle{'27}##1\@Allowhyphens{##1}\empty}%
+ %% overcircle; \aa,\AA
+ \def\@**@##1{\CrossBar{'40}##1}% \l,\L
+ }
+ %%\=,\t,\b appear already since not in Cork 128-255
+ %%\@c@,\@*@,\@**@ opposite case
+ %% \c,\*,\**,\b contain \empty since tailor made
+
+ \def\SetCompositeRawPSAccents{%
+ \let/\DoAccent\DoRawPSAccents %% these are the regular \', \` etc.
+ \def\t##1{\oldt##1\@Allowhyphens{##1}}%% uses "7F of cmmi
+ \def\c##1{\oldCedilla{'313}##1\@Allowhyphens{##1}\empty}%
+ \def\*##1{{\accent'305 ##1}\@Allowhyphens{##1}\empty}%
+ %% overcircle; \aa,\AA
+ \def\**##1{\CrossBar{'261}##1\@Allowhyphens{##1}\empty}
+ %% \l,\L
+ \def\b##1{\oldUnderBar{'305}##1\@Allowhyphens{##1}\empty}%
+ \def\g##1{\oldOgonek##1\@Allowhyphens{##1}\empty}%
+ }
+ %% No smart accent features with RawPS, so no \@?@
+
+ %%%% Exotics switch-macros
+ \catcode"02=13 \catcode"03=13 %% were other
+
+\def\SetRawPSExotics{% PS foreign text char locations:
+ \let^^02^^fb \def\ss{^^02} %%% see \ULprotect
+ \def^^03{SS} \def\SS{^^03} %%% see \ULprotect
+ \edef\ae{\string^^f1} \lccode"F1="F1 \uccode"F1="E1
+ \edef\AE{\string^^e1} \lccode"E1="F1 \uccode"E1="E1 \sfcode"E1=999
+ \edef\oe{\string^^fa} \lccode"FA="FA \uccode"FA="EA
+ \edef\OE{\string^^ea} \lccode"EA="FA \uccode"EA="EA \sfcode"EA=999
+ \edef\o{\string^^f9} \lccode"F9="F9 \uccode"F9="E9
+ \edef\O{\string^^e9} \lccode"E9="F9 \uccode"E9="E9 \sfcode"E9=999
+ \edef\i{\string^^f5} \lccode"F5="F5 \uccode"F5=`\I
+ }
+
+ \gdef\SetCMExotics{% CM foreign text char locations:
+ \let^^02^^19 \def\ss{^^02} %%% see \ULprotect
+ \def^^03{SS}\def\SS{^^03} %%% see \ULprotect
+ \edef\ae{\string^^1a}\lccode"1A="1A \uccode"1A="1D
+ \edef\AE{\string^^1d}\lccode"1D="1A \uccode"1D="1D \sfcode"1D=999
+ \edef\oe{\string^^1b}\lccode"1B="1B \uccode"1B="1E
+ \edef\OE{\string^^1e}\lccode"1E="1B \uccode"1E="1E \sfcode"1E=999
+ \edef\o{\string^^1c}\lccode"1C="1C \uccode"1C="1F
+ \edef\O{\string^^1f}\lccode"1F="1C \uccode"1F="1F \sfcode"1F=999
+ \edef\i{\string^^10}\lccode"10="10 \uccode"10=`\I
+ }
+
+ \def\SetKnuthExotics{% CM foreign text char locations:
+ \lccode"19=0 \uccode"19=0
+ \lccode"1A=0 \uccode"1D=0
+ \lccode"1D=0 \uccode"1D=0
+ \lccode"1B=0 \uccode"1B=0
+ \lccode"1E=0 \uccode"1E=0
+ \lccode"1C=0 \uccode"1C=0
+ \lccode"1F=0 \uccode"1F=0
+ \lccode"10=0 \uccode"10=0
+ }
+
+ %%% LaTeX protection??
+ %\def\SS{\ULprotect^^??}\def\ULprotect{}
+
+ \catcode"02=12 \catcode"03=12 %% were other
+
+ %%% end of Exotics switch-macros
+
+
+%%% Misc Symbols
+ %%
+ \gdef\Symb@#1{\SmartTest@
+ \EX@ \EX@\EX@ \ifx\EX@ \csname \FontClsTag@ @#1\endcsname\relax
+ \relax
+ \EX@ \ifx \csname#1@\endcsname\relax
+ ^^58%% Print X if nothing better
+ \else
+ \csname#1@\endcsname
+ \fi
+ \else
+ \csname \FontClsTag@ @#1\endcsname
+ \fi}
+
+ %%% eCM "flexible definition" high level definitions
+ %% RHS will be defined class by class
+ \xdef\questiondown{\string^^3e}%% direct
+ \xdef\exclamdown{\string^^3c}%% direct
+ \gdef\guillemotleft{\Symb@{guillemotleft}}
+ \gdef\guillemotright{\Symb@{guillemotright}}
+ \gdef\pound{\Symb@{pound}}
+ \gdef\section{\Symb@{section}}
+ \gdef\dagger{\Symb@{dagger}}
+ \gdef\daggerdbl{\Symb@{daggerdbl}}
+ \gdef\paragraph{\Symb@{paragraph}}
+ \gdef\perthousand{\Symb@{perthousand}}%%
+
+ %%% CM (nontrivial) low level defaults
+ %%
+ %\xdef\questiondown@{\string^^3e}%% no need!
+ %\xdef\exclamdown@{\string^^3c}%% no need!
+ %\def\guillemotleft@{\DLG}%% in gllmts.tex
+ %\def\guillemotright@{\DRG}%% in gllmts.tex
+ \def\dagger@{$\m@th\dag$}%
+ \gdef\daggerdbl@{$\m@th\ddag$}%
+ \gdef\section@{$\m@th\S$}
+ \gdef\paragraph@{$\m@th\P$}
+ \gdef\pound@{{\ifdim\fontdimen\@ne\font >\z@
+ \it\else \font\ft=cmu10\ft\fi\char`\$}}%% cheat
+ %% but need u-style to do better, or NFSS
+ %%\def\ppounds{\nfss@text{\ifdim \fontdimen\@ne\font >\z@
+ %% \it \else \fontshape u\selectfont \fi \char'44}}
+
+ %%% Set lc et uc codes
+ %% following Cork norm 128-255.
+ %% lccode >0 for each letter is a necessary
+ %% condition for hyphenation
+
+ \newcount\Ct@@
+ \newcount\Ct@@@
+ \toks0={%
+ \loop
+ \Ct@=\count@\advance\Ct@ by 32
+ %% \count@ is Plain scratch counter \count255
+ \uccode\count@=\count@\sfcode\count@=999
+ \lccode\count@=\Ct@
+ \uccode\Ct@=\count@
+ \lccode\Ct@=\Ct@
+ \ifnum\count@<\Ct@@
+ \relax\advance\count@ by 1
+ \repeat
+ }
+
+ %%% Impose Cork lc uc and sf codes
+ \count@="80 \Ct@@="9E \the\toks0 %% segment "80 to "BF
+ %% Cork "9F is \S and "BF is pound sign lc/uc codes 0
+ \count@="C0 \Ct@@="DF \the\toks0 %% segment "C0 to "FF
+
+ \toks0={} %% clean up
+
+ \def\DoAccChars{%% Non-TM commented out!
+ %%acute %^^10 is \i
+ /'a^^e1./'e^^e9./'i^^ed./'^^10^^ed./'o^^f3./'u^^fa.
+ /'A^^c1./'E^^c9./'I^^cd./'O^^d3./'U^^da.
+ /'y^^fd./'Y^^dd.
+ %/'l^^a8./'L^^88./'n^^ab./'N^^8b./'r^^af./'R^^8f.
+ %/'s^^b1./'S^^91./'z^^b9./'Z^^99.
+ %%grave
+ /`a^^e0./`e^^e8./`i^^ec./`^^10^^ec./`o^^f2./`u^^f9.
+ /`A^^c0./`E^^c8./`I^^cc./`O^^d2./`U^^d9.
+ %%hat
+ /^a^^e2./^e^^ea./^i^^ee./^{^^10}^^ee./^o^^f4./^u^^fb.
+ /^A^^c2./^E^^ca./^I^^ce./^O^^d4./^U^^db.
+ %%cedilla
+ /cc^^e7./cC^^c7.
+ %/cs^^b3./cS^^93.
+ %/ct^^b5./cT^^95.
+ %%tilde
+ /~a^^e3./~n^^f1./~o^^f5./~A^^c3./~N^^d1./~O^^d5.
+ %%umlaut (diaise)
+ /"a^^e4./"e^^eb./"i^^ef./"^^10^^ef./"o^^f6./"u^^fc.
+ /"A^^c4./"E^^cb./"I^^cf./"O^^d6./"U^^dc.
+ %/"Y^^98./"y^^b8.%% these two isolated in TM
+ %%hungarian umlaut
+ %/Ho^^ae./HO^^8e./Hu^^b6./HU^^96.
+ %%breve
+ %/ua^^a0./uA^^80./ug^^a7./uG^^87.
+ %%cech (caron)
+ %/vC^^83./vD^^84./vE^^85./vN^^8c.
+ %/vR^^8c./vS^^92./vT^^94./vZ^^9a.%% and lc
+ %%ogonek (Polish)
+ %/gA^^83./gE^^84./gS^^85./gT^^8c.%% and lc
+ %%dot over
+ %/.i^^bd./.^^10^^bd./.I^^9d./.z^^bb./.Z^^9b.%
+ %%circle over
+ /*a^^e5./*A^^c5./*u^^b7./*U^^97.
+ %%cross bar
+ %/{**}l^^aa./{**}L^^8a.
+ }
+
+ \def\SetAccCharOctet#1#2#3#4{\CheckPeriod{#4}%
+ \EX@\xdef\csname TO#1@#2\endcsname {\string#3}%
+ }
+
+ \let/\SetAccCharOctet
+ \DoAccChars %% once and for all
+ \let\DoAccChars\relax %% save space
+
+
+ %%%%%%%%% Master formula
+ \def\Smart@Acc{\SmartTest@\Smart@@Acc}
+ %%% where \Smart@@Acc#1#2 with eg #1=' and #2=e
+ %%% varies for different font classes:
+ %%% -10 (presumed) CM; -20 TM; -21 xA(=xAdobe for Mac)
+ %%% -30 rawPS; -40 CK(=Cork)
+ %%% Only CM, TM currently active% 10-92
+
+ \newcount\FontCls@
+ \FontCls@=-10
+ \def\ShowCurrentFontClass{%
+ \ufcr\count255=-10
+ \ifnum\FontCls@=\count255\relax\toks0{CM}\else\toks0{TM}\fi
+ \immediate\write16{}
+ \immediate\write16{ *** Current font \fontname\font}
+ \immediate\write16{ *** is in class \the\toks0}}
+
+ \def\SmartTest@{\ifnum\skewchar\font
+ =\FontCls@\else\SwitchFontCls@\fi}
+
+ \def\SwitchFontCls@{%
+ \ifnum\skewchar\font=\defaultskewchar\empty %% "new" font
+ \ReadFontCls@
+ \fi
+ \FontCls@=\skewchar\font
+ \EX@\let\EX@\Smart@@Acc
+ \csname\the\FontCls@ Acc\endcsname
+ \edef\FontClsTag@{\csname\the\FontCls@ Tag@\endcsname}% try
+ }
+
+ %%% Macro-access for user
+ \let\UpdateFontClassRegister\SmartTest@
+ \let\ufcr\SmartTest@
+
+ %% Stronger version of above needed
+ %% at point when unmarked fonts are introduced
+ \let\UpdateFontClass\SwitchFontCls@ %
+ \let\ufc\SwitchFontCls@
+
+ %%%% Prepare ReadFontCls tools
+
+ \newbox\Smartbox@
+
+ %%% \eAcuteCrit@: if Cork eacute of pos width,
+ %% then make class TM
+ \def\eAcuteCrit@{%
+ \tracinglostchars=0\setbox\Smartbox@=\hbox{\char"E9}%
+ \tracinglostchars=1
+ %\showthe\wd\Smartbox@
+ \ifdim\wd\Smartbox@>\z@\relax
+ \SetTwotakeCls@
+ \fi}
+
+ \def\SetTwotakeCls@{%
+ \edef\temp{\csname CaesarClass\tw@take\endcsname}%
+ %\show\temp
+ \global\skewchar\font=\temp\relax
+ %\showthe\skewchar\font
+ \FontCls@=\temp\relax %% TM
+ }
+
+ %%% Set up \CMexClasses@ cat 12 list of prefixes (for TM)
+ \def\Temp{}
+ \stringer@ ,cm,CM,dm,DM,tm,TM\endstringer@
+ \let\CMexClasses@\Temp
+
+ %%% \taketw@ put next two tokens in \tw@take
+ \let\tw@take\empty
+ \def\taketw@ #1#2#3\endtaketw@{%
+ \def\tw@take{#1#2}}
+ %% at least two must be there
+
+ \def\ReadFontCls@{% error conditions
+ \ifmmode %\show\mathoops %% diagnostic
+ \else
+ \ifnum\skewchar\font>-1\empty
+ \show\mathfontoops
+ \else\ReadFontCls@@
+ \fi
+ \fi}
+
+ \def\ReadFontCls@@{%
+ \setbox\Smartbox@\hbox{\char"5E}%
+ %\showthe\dp\Smartbox@
+ %% TM XA DM (many variants via fontdimen 8 etc)
+ \ifdim\dp\Smartbox@>\z@\empty
+ \global\skewchar\font=-22
+ \FontCls@=-22 %% DM
+ \tracinglostchars=0
+ \setbox\Smartbox@\hbox{\char"81}%% test provisional
+ \tracinglostchars=1
+ \ifdim\wd\Smartbox@>\z@\empty
+ \global\skewchar\font=-21
+ \FontCls@=-21 %% XA extended Adobe xTimes series
+ \fi
+ \fi
+ \expandafter\taketw@\fontname\font..\endtaketw@
+ %\show\tw@take\show\CMexClasses@
+ \IN@0\tw@take @\CMexClasses@ @%
+ \ifIN@
+ \eAcuteCrit@ %% if ok assign class of \tw@take
+ \fi
+ \ifnum\skewchar\font=\defaultskewchar\empty%% residual
+ \global\skewchar\font=\CaesarDefaultClass\relax
+ \FontCls@=\CaesarDefaultClass\relax
+ \fi}
+
+ \global\def\CaesarDefaultClass{-10\empty}
+
+ %%% \SetCaesarClass\font{DM} for example
+ \def\SetCaesarClass#1#2{% #1 is font, #2 is font class tag
+ \edef\temp{\global\skewchar#1=\csname CaesarClass#2\endcsname}%
+ \temp}
+
+ %%% Moved foreward for CM class
+
+ \def\Safe@Acc#1#2{%
+ \if i#2%
+ \csname @#1@\endcsname \i
+ \else
+ \csname @#1@\endcsname #2\empty%
+ \fi
+ }
+
+ %%%%%% FONT CLASSES
+ %%% CM
+ \def\CaesarClassCM{-10\empty}
+ \let\CaesarClasscm\CaesarClassCM
+ \EX@\def\csname-10Tag@\endcsname{CM}% try
+ \EX@\let\csname-10Acc\endcsname\Safe@Acc
+
+ %%%%%% TM
+ \def\CaesarClassTM{-20\empty}
+ \let\CaesarClasstm\CaesarClassTM
+ \EX@\def\csname-20Tag@\endcsname{TM}% try
+ %% define "\-20Acc"
+ %% currently \"y, \"Y remains composite
+ %% also \ae, \oe, \o, \ss not used in 128--255.
+ %%% Basic accent macro currently shared for TM, XA, DM classes
+ \EX@\def\csname -20Acc\endcsname#1#2{%
+ %\show\relax
+ %\tracingcommands=2
+ \expandafter
+ \ifx\csname TO#1@#2\endcsname\relax
+ \Safe@Acc{#1}{#2}%
+ \else\SmartMsg@
+ \csname TO#1@#2\endcsname
+ \fi
+ }
+
+ \gdef\TM@guillemotleft{\hbox{\char'327\kern-.25em\char'327}}
+ \gdef\TM@guillemotright{\hbox{\char'367\kern-.2em\char'367}}
+
+ %%%%%% XA = "mac-vec" eXtended Adobe: xTimes xHelvetica etc
+ \def\CaesarClassXA{-21\empty}
+ \let\CaesarClassxa\CaesarClassXA
+ \EX@\def\csname-21Tag@\endcsname{XA}% try
+ %% define "\-21Acc" to be "\-20Acc"
+ %% as XA and TM classes same for accented chars
+ \edef\temp{\let\expandafter\noexpand\csname -21Acc\endcsname
+ \expandafter\noexpand\csname -20Acc\endcsname}
+ %\show\temp
+ \temp
+ %% but want to include some extra diacritics
+ %% cf. Active8TimesCM.tex
+ %% XA for xTimes Adobe series (extended cm)
+ %\gdef\XA@guillemotleft{^^85}
+ %\gdef\XA@guillemotright{^^86}
+ \gdef\XA@pound{^^bf}
+ \gdef\XA@section{^^9f}
+ %*\XA@dagger.^^81.
+ %*\XA@daggerdbl.^^82.
+ %*\XA@paragraph.^^8b.
+ %*\XA@perthousand.^^8c.
+ \xdef\SS@{SS}
+
+
+ %%%%%% DM Dislexic-Modern of Brouard-Sullivan
+ \def\CaesarClassDM{-22\empty}
+ \let\CaesarClassdm\CaesarClassDM
+ \EX@\def\csname-22Tag@\endcsname{DM}% try
+ %% define "\-22Acc" to be "\-20Acc"
+ %% as DM and TM classes same for accented chars
+ \edef\temp{\let\expandafter\noexpand\csname -22Acc\endcsname
+ \expandafter\noexpand\csname -20Acc\endcsname}
+ %\show\temp
+ \temp
+ %% no extra diacritics
+ %% DM is poorest class; hence default once extended status
+ %% established
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ \let\Smart@@Acc\Safe@Acc
+ %% some initialisation necessary in \halign
+
+ \def\ShowCaesar{\def\SmartMsg@{%% spoils kerning when on
+ \W@{}\W@{ *** Caesar has used ready-made accent ***
+ %%\csname TO##1@##2\endcsname
+ }}%
+ }
+ \def\HideCaesar{\def\SmartMsg@{}}
+ \HideCaesar
+
+ \def\'#1{\@Acc'{#1}} %acute
+ \def\`#1{\@Acc`{#1}} %grave
+ \def\^#1{\@Acc^{#1}} %hat
+ \def\"#1{\@Acc"{#1}} %umlaut
+ \def\c#1{\@Acc c{#1}} %cedilla
+ \def\g#1{\@Acc g{#1}} %ogonek
+ \def\~#1{\@Acc ~{#1}} %tilde
+ \def\.#1{\@Acc.{#1}} %dot over
+ \def\u#1{\@Acc u{#1}} %breve
+ \def\v#1{\@Acc v{#1}} %check=caron
+ \def\H#1{\@Acc H{#1}} %Hungarian long umlaut
+ \def\r#1{\@Acc *{#1}} %circle over (for \aa,\AA)
+ \def\*#1{\@Acc *{#1}} %circle over (for \aa,\AA)
+ \def\**#1{\@Acc {**}{#1}} %crossed (for \l,\L)
+ %% \=,\t,\b,\d already defined; not in Cork norm
+
+ \def\aa{\* a}\def\AA{\* A}% always valid
+ \def\l{\** l}\def\L{\** L}% always valid
+
+ %% return to Plain codes
+ \catcode`\/=12
+ \catcode`\~=13
+ \catcode`\*=12
+
+ %% JD for Jacques Desarmenien
+ \def\JDaccents{\def\@Allowhyphens{\@@Allowhyphens}}
+ \def\noJDaccents{\def\@Allowhyphens##1{\empty}}
+
+ %% DS for Double Strike; relevant only while JD option on
+ %% otherwise action delayed
+ \def\DSaccents{\let\@@Allowhyphens\@@@Allowhyphens}
+ \def\noDSaccents{\font\@dodo=dodo
+ \let\@@Allowhyphens\@@@allowhyphens}
+
+ %% ML for MLTeX,
+ \def\noMLcodes{\SetKnuthExotics}
+ \def\MLcodes{\ifRawPS\SetPSExotics\else\SetCMExotics\fi}
+
+ \newif\ifCaesar
+
+ \def\Caesar{\let\@Acc\Smart@Acc
+ \ifRawPS\M@{}%
+ \M@{ !!! Caesar's smart accents not available %
+ with raw PS font \the\font.}%
+ \fi\Caesartrue}
+
+ \def\noCaesar{\let\@Acc\Safe@Acc\Caesarfalse}
+
+ \def\CMText{\RawPSfalse\SetCMExotics
+ \SetCompositeCMAccents}
+
+ \def\RawPSText{%
+ \RawPStrue\SetRawPSExotics\SetCompositeRawPSAccents}
+ \let\OzPSTeX\RawPSText
+
+ \def\PSText{\W@{}%
+ \W@{ !!! \string\PSText\Space
+ not defined! PS text is not all the same.}%
+ \W@{ Define as \string\RawPSText\Space for OzTeX,
+ \string\relax\Space for Textures,...}%
+ \W@{}\errmessage{}}
+
+ \JDaccents %% default; JD for J. Desarmenien
+ \DSaccents %% default; DS for Double Strike
+ \CMText %% default
+ \Caesar %% default
+ %\noCaesar
+
+ %%%%% Switching uppercase accents off and on
+ %%
+\def\noucAccents{\def\Smart@Acc{\SmartTest@\Smart@@@Acc}%
+ \def\Smart@@@Acc##1##2{%
+ \ifnum\uccode`##2=`##2
+ ##2%
+ \else
+ \Smart@@Acc{##1}{##2}%
+ \fi
+ }
+ \def\Safe@Acc##1##2{%
+ \ifnum\uccode`##2=`##2
+ ##2%
+ \else
+ \if i##2%
+ \csname @##1@\endcsname \i
+ \else
+ \csname @##1@\endcsname ##2\empty%
+ \fi
+ \fi
+ }
+ \ifCaesar\Caesar\else\noCaesar\fi
+ %%initialization necessary
+ }
+
+\def\ucAccents{\def\Smart@Acc{\SmartTest@\Smart@@Acc}%
+ \def\Safe@Acc##1##2{%
+ \if i##2%
+ \csname @##1@\endcsname \i
+ \else
+ \csname @##1@\endcsname ##2\empty%
+ \fi
+ }
+ \ifCaesar\Caesar\else\noCaesar\fi
+ %%initialization necessary
+ }
+
+ \let\UCAccents\ucAccents
+ \let\noUCAccents\noucAccents
+
+ %%% Alternative to \uppercase, \lowercase
+
+ \catcode"02=13\catcode"03=13
+ \gdef\eCasePrep@{%
+ \let\c\relax\let\g\relax \let\H\relax \let\*\relax
+ \let\v\relax\let\^\relax
+ \let^^02\relax\let^^03\relax
+ \let\guillemotleft\relax
+ \let\guillemotright\relax
+ \let\pound\relax
+ \let\section\relax
+ \let\dagger\relax
+ \let\daggerdbl\relax
+ \let\paragraph\relax
+ \let\perthousand\relax
+ %% anticipates \gdef^^e4{\Symb@@{perthousand}} %% no sym there
+ \let\UCtemp@\relax\let\LCtemp@\relax
+ %%\let\eUppercase\relax\let\eLowercase\relax%% fails; why?
+ %% nec up to here, rest for speed
+ \let\'\relax \let\`\relax \let\"\relax
+ }
+ \catcode"02=12\catcode"03=12
+
+ \def\LCtemp@{%
+ \lccode"02="02\lccode"03="02
+ \Ctemp@
+ \lccode"02=0\lccode"03=0
+ }
+
+ \def\UCtemp@{%
+ \uccode"02="03\uccode"03="03
+ \Ctemp@
+ \uccode"02=0\uccode"03=0
+ }
+
+ \global\let\Ctemp@\relax
+ \catcode"DF=13
+ \gdef\eLowercase#1{\ufcr
+ \bgroup\eCasePrep@
+ \xdef\Ctemp@{\primlowercase{#1}}%\show\Ctemp@
+ \egroup
+ \LCtemp@%% could be \edef if \expandafter before \egroup
+ \global\let\Ctemp@\relax %% then unnec
+ }
+ \catcode"DF=12
+ %\show\eLowercase
+
+ \gdef\eUppercase#1{\ufcr
+ \bgroup\eCasePrep@
+ \xdef\Ctemp@{\primuppercase{#1}}%\show\Ctemp@
+ \egroup\UCtemp@
+ \global\let\Ctemp@\relax
+ }
+
+ \catcode`\@=\JDCatAt
+
+ \endinput
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%% Misc tests
+
+ \def\tst{\AE\ae\par}
+
+ \tst \eUppercase{\tst}\eLowercase{\tst}%
+ \eLowercase{\eUppercase{\tst}}\eUppercase{\eLowercase{\tst}}
+
+\end
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% test for case change
+ \parindent=0pt
+ \font\ft=dmr10 \ft %\ShowCaesar %\^\i\end
+
+ \let\e\expandafter
+ \def\xuppercase{\e\primuppercase\e}
+ \def\xlowercase{\e\primlowercase\e}
+ \long\def\gobble#1{}
+ \long\def\tst{Aa \`A\`a \^A\^a \"A\"a \'E\'e \`E\`e \^I\^i\^\i{}
+ \"I\"i\"\i{} \^O\^o \"O\"o \^U\^u \"U\"u \c C\c c
+ \OE\oe{} \AE\ae{} \O\o{}
+ \SS\ss\ \H O\H o \v S\v s \g E\g e \*E\*e %% Eastern Europe
+ \par}
+
+ Bad:\par
+ \tst \uppercase{\tst} \lowercase{\tst} \lowercase{\uppercase{\tst}}
+ \smallskip\hrule\smallskip%\end
+ Fair:\par
+ \tst \xuppercase{\tst} \xlowercase{\tst} \xlowercase{\xuppercase{\tst}}
+ \smallskip\hrule\smallskip%\end
+ Correct:\par
+ \tst \eUppercase{\tst}\eLowercase{\tst}%
+ \eLowercase{\eUppercase{\tst}}\eUppercase{\eLowercase{\tst}}
+
+ \end
+
+
+\input gllmts
+\input gllmts_a.sty
+
+ \def\tst{\guillemotleft
+ \guillemotright
+ \pound
+ \section
+ \dagger
+ \daggerdbl
+ \paragraph
+ \perthousand\par}
+
+ \tst \eUppercase{\tst}\eLowercase{\tst}%
+ \eLowercase{\eUppercase{\tst}}\eUppercase{\eLowercase{\tst}}
+
+\end
+
+
+ \ss\ \eLowercase{\ss} \eUppercase{\ss}
+ \eLowercase{\eUppercase{\ss}} \eUppercase{\eLowercase{\ss}}
+
+ \SS\ \eLowercase{\SS} \eUppercase{\SS}
+ \eLowercase{\eUppercase{\SS}} \eUppercase{\eLowercase{\SS}}
+
+
+ \end
+
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/caestest.tex b/macros/generic/caesarcm/caesarcmv2.dir/caestest.tex
new file mode 100644
index 0000000000..4d0ec179eb
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/caestest.tex
@@ -0,0 +1,297 @@
+ %% CaesTest.tex, Sept 1992, L. Siebenmann
+ %% A test file for CaesarCM.tex
+
+ \def\Msg{\immediate\write16}%
+ \Msg{ *************************************************** }
+ \Msg{ CaesTest.tex, a test for hyphenation by CaesarCM requiring}
+ \Msg{ (a) Use of a format which has been compiled}
+ \Msg{ \space to include French hyphenation patterns and}
+ \Msg{ \space CaesarCM.tex. The tool fe-format-dumper-cm}
+ \Msg{ \space automaates the creation of many such formats.}
+ \Msg{ (b) The test font tmr10 must be available. Any other marked}
+ \Msg{ \space extended CM font can serve in its stead, }
+ \Msg{ \space provided you replace tmr10 by that alternative in the}
+ \Msg{ \space definition of \string\extCM\space in this test file.}
+ \Msg{ *************************************************** }
+
+
+ %% No double loading
+ \let\this\relax
+ \ifx\undefined\Caesar
+ \Msg{}\Msg{Sorry CaesarCM not loaded. Exit.}
+ \let\this \endinput
+ \fi
+ \this
+
+ \bgroup
+\catcode`\@=11
+ %% LateX red tape
+ \ifx\undefined\@comdblflelt %% defined for LateX only
+ \toks0{\par \vfill \supereject \end}
+ \else
+ \documentstyle[art10]{article}
+ \begin{document} %% for LateX only.
+ \toks0{\csname end\endcsname{document}}
+ \fi
+ \outer\edef\bye{\the\toks0}
+ \egroup
+
+
+ \font\ft=xTimes %% or tmr10? %%%%%%%%%%%%%%%%%%%%%%%%
+
+ \def\extCM{\ft \skewchar\font=\defaultskewchar
+ \UpdateFontClassRegister}
+ \def\CM{\ft \skewchar\font=\CaesarClassCM}
+
+ %\CM\'e\extCM\'e\CM\'e\extCM\'e\CM\'e\extCM\'e\CM\'e\extCM\'e%
+
+ \def\hytest{ars\'eniure audiofr\'equence biod\'egradable
+c\'er\'emonial chim\'erique d\'el\'egu\'e magn\'etique
+enr\'egimenter esth\'etisme fonci\`erement irr\'eparable
+litt\'eral num\'eration oblit\'erer ovog\'en\`ese
+privil\'egier rapi\'e\c cage r\'ep\'etition rousp\'eter
+surd\'evelopp\'e v\'en\'erer }%% alter this!!
+
+ \def\Hytest{\hytest\hytest\hytest}%\hsize=.9\hsize
+
+\newdimen\mydim
+\mydim=3pt
+\def\ShapePar{ \parshape 75
+0pt 93\mydim 0pt 78\mydim 0pt 65\mydim 0pt
+54\mydim 0pt 45\mydim 0pt 38\mydim 0pt 33\mydim 0pt 30\mydim
+0pt 33\mydim 0pt 38\mydim 0pt 45\mydim 0pt 54\mydim 0pt
+65\mydim 0pt 78\mydim 0pt 93\mydim
+0pt 93\mydim 0pt 78\mydim 0pt 65\mydim 0pt
+54\mydim 0pt 45\mydim 0pt 38\mydim 0pt 33\mydim 0pt 30\mydim
+0pt 33\mydim 0pt 38\mydim 0pt 45\mydim 0pt 54\mydim 0pt
+65\mydim 0pt 78\mydim 0pt 93\mydim
+0pt 93\mydim 0pt 78\mydim 0pt 65\mydim 0pt
+54\mydim 0pt 45\mydim 0pt 38\mydim 0pt 33\mydim 0pt 30\mydim
+0pt 33\mydim 0pt 38\mydim 0pt 45\mydim 0pt 54\mydim 0pt
+65\mydim 0pt 78\mydim 0pt 93\mydim
+0pt 93\mydim 0pt 78\mydim 0pt 65\mydim 0pt
+54\mydim 0pt 45\mydim 0pt 38\mydim 0pt 33\mydim 0pt 30\mydim
+0pt 33\mydim 0pt 38\mydim 0pt 45\mydim 0pt 54\mydim 0pt
+65\mydim 0pt 78\mydim 0pt 93\mydim
+0pt 93\mydim 0pt 78\mydim 0pt 65\mydim 0pt
+54\mydim 0pt 45\mydim 0pt 38\mydim 0pt 33\mydim 0pt 30\mydim
+0pt 33\mydim 0pt 38\mydim 0pt 45\mydim 0pt 54\mydim 0pt
+65\mydim 0pt 78\mydim 0pt 93\mydim
+ }
+
+ \hsize=280pt
+ \pretolerance=200
+ \tolerance=200
+ \hbadness=10000
+ \vbadness=10000
+ \parskip=3pt plus 1pt
+ \overfullrule = 10pt
+ \frenchspacing
+ \def\Rule{\hrule\vskip3pt\hrule}
+ \emergencystretch 30pt
+ \parindent=0cm
+
+
+\def \AnnounceTest{\ufcr\par Our current font choice is
+``\fontname\font'' and it is currently assigned coding class:
+ \count255=-20\relax
+ \ifnum \skewchar\font=\count255{\tt TM}%
+ \else {\tt CM}\fi.
+Current {\tt \char`\\tolerance} value is
+\the\tolerance, and current {\tt \char`\\emergencystretch}
+value is \the\emergencystretch.\par}
+
+
+
+ \Msg{}\Msg{ *** TEST FOR CaesarCM }
+ \Msg{ *** Patience Please!!! }
+ \centerline{\bf TEST FOR CaesarCM}
+ \bigskip
+ \extCM
+
+\AnnounceTest
+
+ For values of {\tt
+\char`\\tolerance} at or near 10000, bad hyphenation shows
+up as excessive interword spaces --- provided \TeX's
+aritmetic does not break down (producing irrational
+linebreak choices). When {\tt \char`\\emergencystretch} is
+made positive, the result is similar even when {\tt
+\char`\\tolerance} is low, and arithmetic breakdown tends
+not to occur. When {\tt \char`\\emergencystretch} is zero
+(the Plain default) and {\tt \char`\\tolerance} is low one
+tends to get line overruns marked by by black boxes.
+
+ The text shape involves parabolic scallops to
+provide a varied test of hyphenation. And the sample words are
+ones for which the presence of ready-made accented characters
+increases the number of available hyphenation points.
+
+
+\bigskip
+\Rule
+\bigskip
+
+ \Caesar
+ \Msg{}\Msg{ *** Hyphenation points for extended cm font encoding.}
+ \showhyphens{\extCM\hytest}
+ \goodbreak
+ \extCM *** Hyphenation points for extended cm font encoding:
+ \AnnounceTest
+
+ \ShapePar\Hytest\Hytest\Hytest\Hytest\Hytest%
+ \par
+
+\bigskip
+\Rule
+\bigskip
+
+
+\CM
+
+ \Msg{}\Msg{ *** Hyphenation points for UNextended cm font encoding. }
+ \showhyphens{\CM\hytest}
+ \goodbreak
+ \CM *** Hyphenation points for UNextended cm font encoding:
+ \AnnounceTest
+ \par\ShapePar\Hytest\Hytest\Hytest\Hytest\Hytest%
+ \par
+\bigskip
+\Rule
+\bigskip
+
+
+ \noCaesar\noJDaccents
+ \Msg{}\Msg{ *** Hyphenation points offered by virgin Plain.}
+ \showhyphens{\hytest}
+ \goodbreak
+ \CM *** Hyphenation points offered by virgin Plain:
+ \AnnounceTest
+ \par \ShapePar\Hytest\Hytest\Hytest\Hytest\Hytest%
+ \par
+\bigskip
+\Rule
+\bigskip
+
+
+ %%%% FOLLOWING TEST REQUIRES font dodo; see CaesarCM.bugs
+ %%%% Decomment the immediately following lines
+ %%%% when you have installed dodo.
+ %%%% DSaccents refers to Double Strike accents.
+ % \JDaccents\noDSaccents
+ % \Msg{}\Msg{ *** Hyphenation points for unextended cm font}
+ % \Msg{ *** if printer excludes double strike.}
+ % \showhyphens{\hytest}
+ % \CM *** Hyphenation for unextended font and low
+ % resolution printer
+ % \par \ShapePar\Hytest\Hytest\Hytest\Hytest\Hytest%
+ % \par
+
+\bigskip
+\Rule
+\bigskip
+
+\goodbreak
+
+
+\Caesar \extCM
+
+ *** Some accented characters:
+
+
+ Minuscules :
+
+ \`a \`e \`\i{} \`o \`u
+
+ \'a \'e \'\i{} \'o \'u
+
+ \^a \^e \^\i{} \^o \^u
+
+ \"a \"e \"\i{} \"o \"u \"y
+
+ \c c \~a \~n \~o \o{} \ae{} \oe{} \ss{} \aa{}
+
+ \medskip
+ \`a\`e\`\i{}\`o\`u
+
+ \'a\'e\'\i{}\'o\'u
+
+ \^a\^e\^\i{}\^o\^u
+
+ \"a\"e\"\i{}\"o\"u\"y
+
+ \c c\~a\~n\~o\o{}\ae{}\oe{}\ss{}\aa{}
+
+ \bigbreak
+ MAJUSCULES :
+
+
+ \`A \`E \`I{} \`O \`U
+
+ \'A \'E \'I{} \'O \'U
+
+ \^A \^E \^I{} \^O \^U
+
+ \"A \"E \"I{} \"O \"U \"Y
+
+ \c C \~A \~N \~O \O{} \AE{} \OE{} SS{} \AA{}
+
+ \medskip
+ \`A\`E\`I{}\`O\`U
+
+ \'A\'E\'I{}\'O\'U
+
+ \^A\^E\^I{}\^O\^U
+
+ \"A\"E\"I{}\"O\"U\"Y
+
+ \c C\~A\~N\~O\O{}\AE{}\OE{}SS{}\AA{}
+
+
+
+ \bigbreak
+
+ \hsize=150pt
+
+ \noCaesar%\noDSaccents
+
+ Line breaks after accent:
+
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+
+ \bigskip
+
+
+ \Caesar Remaining problem with case changes:
+
+ \uppercase{ci-g\^it fran\c cais na\"if d\'es\oe{}uvr\'e b\^ete et
+adult\`ere}
+
+ \bye
+
+ %%%% Some alternate test material:
+
+ \def\hytesti{ci-g\^\i{}t fran\c cais na\"\i{}f
+ d\'es\oe{}uvr\'e b\^ete et adult\`ere}
+
+\def\hytestii{signal man\oe{}uvres \oe{}uvrer d\'es\oe{}uvrement
+l\ae{}ticia laticia laennec l\ae{}nnec d\'eculpabiliser
+r\'eactualisation \'education ex\'ecution inexp\'erience ma\c
+connerie maconnerie ma\c connerie fa\c con abandonn\'es
+distingu\'es abandonn\'e distingu\'e \'ethymologiquement
+syst\'ematiquement }
+
+ \def\hytestiii{% d\'econtenanc\'ee, h\'eb\'et\'ee, d\'efaite de
+toute s\'er\'enit\'e devant cet ab\'ec\'edaire d\'ecapit\'e,
+\'et\^et\'e, \'evid\'e, \'emascul\'e, d\'esagr\'eg\'e,
+d\'ebilit\'e, d\'eg\'en\'er\'e, parce que priv\'e de lettres
+accentu\'ees et correctement orthographi\'ees,
+Th\'er\`ese-\'El\'eonore a d\'ecr\'et\'e avec sinc\'erit\'e et
+opini\^atret\'e l'immortalit\'e des \c c\`a\c
+c\^ac\'ec\`ec\^ec\"ec\^\i\ ainsi que des \c c\^o\c c\"o\c
+c\`u\c c\^u\c c\"u.}
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/csteaser.doc b/macros/generic/caesarcm/caesarcmv2.dir/csteaser.doc
new file mode 100644
index 0000000000..ff645727d7
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/csteaser.doc
@@ -0,0 +1,323 @@
+%%%%% CsTeaser.doc
+%%%%% Version1 April-July 1992,
+%%%%% Version2 Sept 1992,
+
+
+ === THE CAESAR TEASER ===
+
+ **** A quick preview of hyphenation by CaesarCM ****
+
+ Laurent Siebenmann <siebenmann@LALCLS.IN2P3.FR>
+
+ This test installs a single extended Computer Modern font
+tmr10 at a single magnification 1000, and shows how, in the
+presence of the CaesarCM macros, and the French hyphenation
+patterns one gets optimal French hyphenation in the extended
+font tmr10 and decent hyphenation with all other text fonts.
+
+ As indicated in an appendix, this teaser configuration
+already provides a useful hand-tool allowing systems with
+standard cm to go the extra lap to perfect hyphenation
+in reasonable comfort.
+
+
+FONT INSTALLATION
+
+ (a) For Textures (the first TeX for the Macintosh): Push
+the suitcase provided into the suitcase TeX Fonts in the same
+folder as the Textures program.
+
+ (b) For OzTeX and generic TeX installations: Move the
+file tmr10.tfm into the directory for TeX metric fonts, which
+is called TeX-Fonts for OzTeX. Move the file provided under
+the name tmr10 into the directory for TeX bitmapped fonts
+of magstep 1, which for OzTeX is a subdirectory called 360
+of a directory called PK-files. For other generic TeX systems,
+the nomenclature is probably somewhat different; you will have
+to adapt to local conventions.
+
+
+COMPILATION OF CaesarCM COMMANDS IN A Plain FORMAT
+
+ It is important to use version 3.xx of TeX, and a version 3.xx
+of plain.tex. The critical date is autumn 1989, and earlier material
+will be inadequate.
+
+ Here are instructions for a generic TeX and (just to be
+specific) for French hyphenation that will be adequate to run
+tests. More elaborate formats will be used in practice and are
+discussed below.
+
+ fhyphen.cork is (or calls) a copy of the French hyphenation
+pattern file using the ISO Latin 1 (or Cork) standard for encoding
+accented characters. Place together in one directory:
+
+ (i) a copy of fhyphen.cork renamed hyphen.tex
+
+ (ii) a copy of plain.tex exactly as provided by D. Knuth
+
+ (iii) a file x.tex whose contents is the single line:
+
+ \input plain.tex \input CaesarCM.tex \dump
+
+Note that some systems (Mac, VMS, ...) identify upper and lower case
+letters, while others (unix, ...) distinguish them.
+
+ Compile x.tex using INITEX or VIRTEX, i.e., the primitive form
+of your TeX made for format building. After launching this TeX, one
+responds to a prompt ** by typing
+
+**x <carriage return>
+
+It does not matter if minor fonts such as manfont are missing; just
+hit carriage return. In time you should be invited to name the
+resulting format. Choose a distinctive name; it is often useful to
+indicate the TeX implementation and/or configuration used, since a
+format will normally run only with its parent TeX binary.
+
+
+ For optimal installation and use, refer to CaesarCM.doc and
+fe-format-dumper-cm. Since documentation is seldom read, and in
+this case not absolutely essential, I hasten to add here some
+scraps of advice: when installing extended cm fonts that replace
+existing cm fonts of the same name, first remove and store all
+parts of the fonts to be replaced. This is easy to forget for
+Textures on Macintosh computers since two fonts of the same name
+can be simultaneously loaded --- with tragi-comic consequences.
+Also, remember to recompile your format.
+
+ You can go straight on to the tests.
+
+
+Appendix THE TEASER CONFIGURATION AS A HYPHENATION TOOL.
+
+ The tests at the end of this file show how to use
+
+ \font\ft=tmr10
+ \showhyphens{\ft <test>}
+
+to show on your monitor (or logfile) the best hyphenation that
+computers can presently offer. You may find it advantageous
+to exploit this \showhyphens facility to insert by hand
+discretionary hyphens \- in your work where bad linebreaks occur.
+Regard this facility as a semi-automated hyphenation dictionary!
+
+ In French prose, rather few such discretionary hyphens \- have
+to be added to get optimal performance --- perhaps one every five
+to ten pages or less. Empirical evidence for this was is given in
+the full documentation for HyAcc-CM. This is because, without
+extended cm fonts, CaesarCM (like HyAcc-CM) offers a reasonably
+good 7-bit hyphenation system.
+
+ One perfectly serious application of this, in the early
+1990's, is to books and articles in European languages that are
+being prepared for high resolution laser "flashers" still lacking
+eight bit fonts with ready-made accented characters. In this
+situation, eight-bit fonts held by the author cannot be used directly.
+
+
+Appendix SOME HYPHENATION TESTS
+
+ Here is a test run for tmr10. Typeset the file below and
+examine the results, both in the log file and printed.
+
+ %% --------------- cut
+ %% CaesTest.tex, April 1992, L. Siebenmann
+ %% A simple test file for CaesarCM.tex
+ %% derived from a similar one for
+ %% HyAcc-CM.tex that was written with
+ %% Daniel Flipo <siebenmann@LALCLS.IN2P3.FR>
+
+ \def\Msg{\immediate\write16}
+
+ %% No double loading
+ \let\this\relax
+ \ifx\undefined\Caesar
+ \Msg{}\Msg{Sorry CaesarCM not loaded. Exit.}
+ \let\this \endinput
+ \fi
+ \this
+
+ %% LateX red tape
+ \ifx\undefined\@comdblflelt %% defined for LateX only
+ \toks0{\par \vfill \supereject \end}
+ \else
+ \documentstyle[art10]{article}
+ \begin{document} %% for LateX only.
+ \toks0{\csname end\endcsname{document}}
+ \fi
+ \outer\edef\bye{\the\toks0}
+
+ \font\CM=cmr10 \font\extCM=tmr10
+
+ \def\hytest{S\'er\'enit\'e ma\c connerie
+ d\'econtenanc\'ee\kern1pt! }%% alter this!!
+ \def\Hytest{\hytest\hytest\hytest\hytest\hytest}
+
+
+ \hsize=230pt
+ \tolerance=10000
+ \parskip=3pt plus1pt
+ \overfullrule=10pt
+ \frenchspacing
+ \def\Rule{\medskip\hrule\medskip}
+
+
+ \Msg{}\Msg{ *** DEFAULT BEHAVIOR OF CaesarCM }
+ \centerline{\bf DEFAULT BEHAVIOR OF CaesarCM}
+ \bigskip
+ \extCM
+
+ The Textures version of the extended cm font "tmr10" in
+this first test includes a number of smaller sizes to enhance
+preview! This explains the extra disk space required.
+
+ Current {\tt \char`\\tolerance} value is
+\the\tolerance. For values of {\tt \char`\\tolerance} at
+or near 10000, bad hyphenation shows up as excessive interword
+spaces, coming from what is called ``emergency stretch". At
+values below, it shows up as line overruns marked by black
+boxes.\bigskip
+
+\parindent=0cm%%
+
+
+ \Caesar
+ \Msg{}\Msg{ *** Hyphenation points for extended cm font.}
+ \showhyphens{\extCM\hytest}
+ \extCM *** Hyphenation points for extended cm font:
+ \par \Hytest\bigskip
+
+ \Msg{}\Msg{ *** Hyphenation points for unextended cm font. }
+ \showhyphens{\CM\hytest}
+ \CM *** Hyphenation points for UNextended cm font:
+ \par \Hytest\bigskip
+
+ \Msg{}\Msg{ *** Flexible use of both types of font. }
+ \showhyphens{\CM\hytest\extCM\hytest}
+ \CM *** Flexible use of both types of font:
+ \par \CM[CM font] \Hytest \extCM[extended CM font]
+\Hytest\bigskip
+
+ \Rule
+ \noCaesar\noJDaccents
+ \Msg{}\Msg{ *** Hyphenation points offered by virgin Plain.}
+ \showhyphens{\hytest}
+ \CM *** Hyphenation points offered by virgin Plain:
+ \par \Hytest\bigskip
+
+ \Rule
+
+ %%%% FOLLOWING TEST REQUIRES font dodo; see CaesarCM.bugs
+ %%%% Decomment the immediately following lines
+ %%%% when you have installed dodo.
+ %%%% DSaccents refers to Double Strike accents.
+ % \JDaccents\noDSaccents
+ % \Msg{}\Msg{ *** Hyphenation points for unextended cm font}
+ % \Msg{ *** if printer excludes double strike.}
+ % \showhyphens{\hytest}
+ % \CM *** Hyphenation for unextended font and low
+ % resolution printer
+ % \par \Hytest\bigskip
+
+\Caesar \extCM
+
+ Minuscules :
+
+ \`a \`e \`\i{} \`o \`u
+
+ \'a \'e \'\i{} \'o \'u
+
+ \^a \^e \^\i{} \^o \^u
+
+ \"a \"e \"\i{} \"o \"u \"y
+
+ \c c \~a \~n \~o \o{} \ae{} \oe{} \ss{} \aa{}
+
+ \medskip
+ \`a\`e\`\i{}\`o\`u
+
+ \'a\'e\'\i{}\'o\'u
+
+ \^a\^e\^\i{}\^o\^u
+
+ \"a\"e\"\i{}\"o\"u\"y
+
+ \c c\~a\~n\~o\o{}\ae{}\oe{}\ss{}\aa{}
+
+ \bigskip
+ MAJUSCULES :
+
+
+ \`A \`E \`I{} \`O \`U
+
+ \'A \'E \'I{} \'O \'U
+
+ \^A \^E \^I{} \^O \^U
+
+ \"A \"E \"I{} \"O \"U \"Y
+
+ \c C \~A \~N \~O \O{} \AE{} \OE{} SS{} \AA{}
+
+ \medskip
+ \`A\`E\`I{}\`O\`U
+
+ \'A\'E\'I{}\'O\'U
+
+ \^A\^E\^I{}\^O\^U
+
+ \"A\"E\"I{}\"O\"U\"Y
+
+ \c C\~A\~N\~O\O{}\AE{}\OE{}SS{}\AA{}
+
+
+
+ \bigskip
+
+ \hsize=150pt
+
+ \noCaesar\noDSaccents
+
+ Line breaks after accent:
+
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e d\'ej\`a \'et\'e \'em\'ech\'e
+
+ \bigskip
+
+
+ \Caesar Remaining problem with case changes:
+
+ \uppercase{ci-g\^it fran\c cais na\"if d\'es\oe{}uvr\'e b\^ete et
+adult\`ere}
+
+ \bye
+
+ %%%% Some alternate test material:
+
+ \def\hytesti{ci-g\^\i{}t fran\c cais na\"\i{}f
+ d\'es\oe{}uvr\'e b\^ete et adult\`ere}
+
+\def\hytestii{signal man\oe{}uvres \oe{}uvrer d\'es\oe{}uvrement
+l\ae{}ticia laticia laennec l\ae{}nnec d\'eculpabiliser
+r\'eactualisation \'education ex\'ecution inexp\'erience ma\c
+connerie maconnerie ma\c connerie fa\c con abandonn\'es
+distingu\'es abandonn\'e distingu\'e \'ethymologiquement
+syst\'ematiquement }
+
+ \def\hytestiii{% d\'econtenanc\'ee, h\'eb\'et\'ee, d\'efaite de
+toute s\'er\'enit\'e devant cet ab\'ec\'edaire d\'ecapit\'e,
+\'et\^et\'e, \'evid\'e, \'emascul\'e, d\'esagr\'eg\'e,
+d\'ebilit\'e, d\'eg\'en\'er\'e, parce que priv\'e de lettres
+accentu\'ees et correctement orthographi\'ees,
+Th\'er\`ese-\'El\'eonore a d\'ecr\'et\'e avec sinc\'erit\'e et
+opini\^atret\'e l'immortalit\'e des \c c\`a\c
+c\^ac\'ec\`ec\^ec\"ec\^\i\ ainsi que des \c c\^o\c c\"o\c
+c\`u\c c\^u\c c\"u.}
+
+ %% --------------- cut
+
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.ck b/macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.ck
new file mode 100644
index 0000000000..e6e15bf599
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.ck
@@ -0,0 +1,91 @@
+ %%% fr8hyph.ck
+ %%
+ %%
+ %% This file 7bit ascii.
+ %% It is NOT autonomous, since it uses the
+ %% coding-independant hyphenation file
+ %% fr8hyph.src as source of the patterns.
+
+ %% This file sets up 8bit French hyphenation patterns
+ %% from the coding independant fr8hyph.src, for use
+ %% with font systems using the Cork 1990 encoding
+ %% (series dc, ec etc.). It is also suitable for dm fonts and
+ %% other Cork-extended CM fonts, which may have \oe
+ %% in either or both of the positions "1B (CM)
+ %% or "F7 (Cork).
+
+ %% This polyvalence is achieved by admitting
+ %% patterns for both positions of \oe.
+ %% The position "1B is the ff ligature for the Cork norm
+ %% which is never passed to TeX as a single character,
+ %% (say by \ff). Note that, inversely, \oe is not to be typed
+ %% as oe for TeX; the latter does not cause a ligature
+
+ %% If these circumstances change, this short file
+ %% can readily be altered.
+
+ %% The grouping around the the body of this file
+ %% assures that the net change induced
+ %% is to the hyphenation trie only.
+ %% (Neglecting a dozen or so abandoned hash table entries.)
+
+ \begingroup
+
+ \catcode`\<=0
+ \catcode`\>=12
+ \lccode`\'=`\' %
+ \def\set#1>#2{\edef\temp{\def\noexpand#1>{\string #2}
+ \catcode`#2=12\lccode`#2=`#2}\temp}
+
+
+ %%% Table setting up the Cork encoding for French patterns
+ %
+ %% <ag> for <a-grave>
+ \set<ag>^^e0
+ %% <eg> is <e-grave>
+ \set<eg>^^e8
+ %% <ea> is <e-acute>
+ \set<ea>^^e9
+
+ %% <ax> is <a-circumflex>
+ \set<ax>^^e2
+ %% <ex> is <e-circumflex>
+ \set<ex>^^ea
+ %% <ix> is <i-circumflex>
+ \set<ix>^^ee
+ %% <ox> is <o-circumflex>
+ \set<ox>^^f4
+ %% <ux> is <u-circumflex>
+ \set<ux>^^fb
+
+ %% <id> is <i-dieresis>
+ \set<id>^^ef
+ %% <od> is <o-dieresis>
+ \set<od>^^f6
+
+ %% <cc> is <u-cedilla>
+ \set<cc>^^e7
+
+ %% <oe> is <oe-ligature>
+ \set<oe>^^f7
+
+ \input fr8hyph.src
+
+ %%% Now the addition for the extended CM fonts.
+
+ \set<oe>^^1b
+
+\patterns{%
+ 1c<oe> % mjf jun88
+ 1m<oe> % mjf jun88
+ 1n<oe> % mjf jun88 % JD+ (df jun92)
+ 1s<oe> % mjf jun88
+ .d<ea>2s1<oe> % mjf jun88
+ hyper<oe>2 % JD+ (df jun92)
+ }
+
+ \endgroup
+
+ \endinput
+
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.src b/macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.src
new file mode 100644
index 0000000000..2612f136c0
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/fr8hyph.src
@@ -0,0 +1,1119 @@
+
+% fr8hyph.src
+% version june 2nd, 1992. (Daniel Flipo)
+% Coding-independant version LS 6-92
+% NOT TO BE INPUT DIRECTLY
+% SEE fr8hyph.ck or fr8hyph.mac for use.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This is *NOT* an official GUTenberg distribution %%
+%% but my personal updated version of the 8bits %%
+%% french hyphenation patterns. (Daniel Flipo) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Hyphenation patterns for French
+% from Jacques D'esarm'enien: how to run TeX in a French environment:
+% hyphenation, fonts, typography. Tugboat, 5 (1984) 91-102.
+% Modifications by Michael Ferguson (Tugboat, 10, 1989) (mjf),
+% Norman Buckle (nb) and Justin Bur (jbb).
+% Following modifications by Daniel Flipo (df):
+% March 20, 92: addition of some missing uppercase codes
+% June 1, 92 : add missing JD patterns (see TSI vol 5 No 4 1986)
+% and check consistency with FRHYPH.TEX for MLTeX (Gould, Rennes)
+% Patterns present in FRHYPH.TEX and not in original JD file are
+% marked as `JD+'.
+ %
+ % Coding independant version LS 6-92
+ % as requested by Michael Ferguson in his presentation
+ % of the Cork norm Tugboat 11 (Nov. 1990) pages 514--6.
+ % <ag> is <a-grave>
+ % <ax> is <a-circumflex>
+ % <eg> is <e-grave>
+ % <ea> is <e-acute>
+ % <ex> is <e-circumflex>
+ % <ix> is <i-circumflex>
+ % <id> is <i-dieresis>
+ % <ox> is <o-circumflex>
+ % <od> is <o-dieresis>
+ % <ux> is <u-circumflex>
+ % <cc> is <u-cedilla>
+ % <oe> is <oe-ligature>
+ % for example by
+ %
+ %% Here are the substitutions that were used
+ %% to derive this table from Flipo's Cork norm table
+ % Change "^^e0" to "<ag>" "a"
+ % Change "^^e8" to "<eg>" "a"
+ %
+ % Change "^^e9" to "<ea>" "a"
+ %
+ % Change "^^e2" to "<ax>" "a"
+ % Change "^^ea" to "<ex>" "a"
+ % Change "^^ee" to "<ix>" "a"
+ % Change "^^f4" to "<ox>" "a"
+ % Change "^^fb" to "<ux>" "a"
+ %
+ % Change "^^ef" to "<id>" "a"
+ % Change "^^f6" to "<od>" "a"
+ %
+ % Change "^^e7" to "<cc>" "a"
+ %
+ % Change "^^f7" to "<oe>" "a"
+ %
+
+ \message{fr8hyph.tex french hyphenation patterns
+ of jun 2nd, 1992}
+
+
+\patterns{
+%front mjf patterns deleted and replaced by orininal JD patterns,
+%see at the end of phonetic patterns (df jun92).
+% Phonetic patterns
+1ba
+1b<ax>
+1be
+1b<ea>
+1b<eg>
+1b<ex>
+1bi
+1b<ix> % mjf jun88
+1bo
+1b<ox>
+1bu
+1b<ux>
+1by
+4be. % JD+ (df jun92)
+4bes.
+1b2l
+4ble.
+4bles.
+1b2r
+4bre.
+4bres.
+1ca
+1<cc>a % df jun92 (c-cedilla)
+1c<ax>
+1ce
+1c<ea>
+1c<eg>
+1c<ex>
+1ci
+1c<ix> % mjf jun88
+1co
+1<cc>o % df jun92 (c-cedilla)
+1c<ox> % df jun92
+%1ct % df jan92
+1cu
+1<cc>u % df jun92 (c-cedilla)
+1c<ux>
+1cy
+1c<oe> % mjf jun88
+4ce. % JD+ (df jun92)
+4ces.
+1c2h
+4che.
+4ches.
+2chb
+2chg
+2chm
+2chn
+2chp
+2chs
+2cht
+2chw % (instead of 2chv) df jun92
+.ch4
+4ch. % JD+ (df jun92)
+ch2l
+4chle.
+4chles.
+ch2r
+4chre.
+4chres.
+% ck patterns missing (df jun92)
+1c2k % JD+
+4cke. % JD+
+4ckes. % JD+
+4ck. % JD+
+2ckb % JD+
+2ckf % JD+
+2ckg % JD+
+2ck3h % JD+ c2k3h in JD's file
+2ckp % JD+
+2cks % JD+
+2ckt % JD+
+1c2l
+4cle.
+4cles.
+1c2r
+4cre.
+4cres.
+1<cc>
+1da
+1d<ax>
+1de
+1d<ea>
+1d<eg>
+1d<ex>
+1di
+1d<ix> % mjf jun88
+1do
+1d<ox>
+1du
+1d<ux>
+1dy
+4de. % JD+ (df jun92)
+4des.
+d1d2h
+1d2r
+4dre.
+4dres.
+1fa
+1f<ax>
+1fe
+1f<ea>
+1f<eg>
+1f<ex>
+1fi
+1f<ix> % mjf jun88
+1fo
+1f<ox>
+1fu
+1f<ux>
+1fy
+4fe. % JD+ (df jun92)
+4fes.
+1f2l
+4fle.
+4fles.
+1f2r
+4fre.
+4fres.
+1ga
+1g<ax>
+1ge
+1g<ea>
+1g<eg>
+1g<ex>
+1gi
+1g<ix> % mjf jun88
+1go
+1g<ox>
+1gu
+1g<ux>
+1gy
+4ge. % JD+ (df jun92)
+4ges.
+4gue.
+4gues.
+1g2ha
+1g2he
+1g2hi
+1g2ho
+1g2hy
+1g2l
+4gle.
+4gles.
+1g2n
+.sta2g3n % df jun92
+wa2g3n % df jun92
+4gne.
+4gnes.
+1g2r
+4gre.
+4gres.
+1ha
+1h<ax>
+1he
+1h<ea>
+1h<eg>
+1h<ex>
+1hi
+1h<ix> % mjf jun88
+1ho
+1h<ox>
+1hu
+1h<ux>
+1hy
+4he. % JD+ (df jun92)
+4hes.
+1j
+2jk
+4je. % JD+ (df jun92)
+4jes.
+1ka
+1k<ax>
+1ke
+1k<ea>
+1k<eg>
+1k<ex>
+1ki
+1k<ix> % mjf jun88
+1ko
+1k<ox>
+1ku
+1k<ux>
+1ky
+4ke. % JD+ (df jun92)
+4kes.
+1k2h
+%c2k3h % (df jun92) replaced by 2ck3h as on Gould
+4kh. % JD+ (df jun92)
+.kh4
+1k2r
+1la
+1l<ax>
+1l<ag> % (instead of 1l<O">) df jun92
+1le
+.seu2le % jbb (df jun92)
+1l<ea>
+1l<eg>
+1l<ex>
+1li
+1l<ix> % mjf jun88
+1lo
+1l<ox>
+1lu
+1l<ux>
+1ly
+4le. % JD+ (df jun92)
+4les.
+% following patterns missing (df jun92)
+il2l
+l3lion
+cil3l
+ucil4l
+rcil4l
+vacil4l
+gil3l
+hil3l
+lil3l
+mil3l
+<ea>mil4l
+rmil4l
+armil5l
+mil4let
+semil4l
+vanil3lin
+vanil3lis
+capil3l
+papil3la
+papil3le
+papil3li
+papil3lom
+pupil3l
+cyril3l
+ibril3l
+piril3l
+thril3l
+pusil3l
+boutil3l
+distil3l
+fritil3l
+instil3l
+.stil3l
+vil3l
+avil4l
+uvil4l
+uevil4l
+chevil4l
+xil3l
+% end of missing
+1ma
+1m<ax>
+1me
+1m<ea>
+1m<eg>
+1m<ex>
+1mi
+1m<ix> % mjf jun88
+1mo
+1m<ox>
+1mu
+1m<ux>
+1my
+1m<oe> % mjf jun88
+4me. % JD+ (df jun92)
+4mes.
+1na
+1n<ax>
+1ne
+1n<ea>
+1n<eg>
+1n<ex>
+1ni
+1n<ix> % mjf jun88
+1no
+1n<ox>
+1nu
+1n<ux>
+1ny
+n1x % JD+ (df jun92)
+1n<oe> % mjf jun88 % JD+ (df jun92)
+4ne. % JD+ (df jun92)
+4nes.
+1pa
+1p<ax>
+1pe
+1p<ea>
+1p<eg>
+1p<ex>
+1pi
+1p<ix> % mjf jun88
+1po
+1p<ox>
+1pu
+1p<ux>
+1py
+4pe. % JD+ (df jun92)
+4pes.
+4ph. % JD+ (df jun92)
+1p2h
+4phe.
+4phes.
+ph2l % JD+ (df jun92)
+4phle. % JD+ (df jun92)
+4phles. % JD+ (df jun92)
+2phn
+ph2r
+4phre.
+4phres.
+2phs
+2pht
+.ph4
+1p2l
+4ple.
+4ples.
+1p2r
+4pre.
+4pres.
+1q
+4que.
+4ques.
+1ra
+1r<ax>
+1re
+1r<ea>
+1r<eg>
+1r<ex>
+1ri
+1r<ix> % mjf jun88
+1ro
+1r<ox>
+1ru
+1r<ux>
+1ry
+4re. % JD+ (df jun92)
+4res.
+1r2h
+4rhe.
+4rhes.
+1sa
+1s<ax>
+1se
+1s<ea>
+1s<eg>
+1s<ex>
+1si
+1s<ix> % mjf jun88
+1so
+1s<ox>
+1su
+1s<ux>
+1sy
+1s<oe> % mjf jun88
+4se. % JD+ (df jun92)
+4ses.
+1s2ch
+4sch.
+2schs
+4sche.
+4sches.
+.sch4
+.sh4
+4sh. % JD+ (df jun92)
+1s2h
+2shm
+2shr
+2shs
+4she.
+4shes.
+1ta
+1t<ax>
+1t<ag> % (instead of 1tO") df jun92
+1te
+1t<ea>
+1t<eg>
+1t<ex>
+1ti
+1t<ix> % mjf jun88
+1to
+1t<ox>
+1tu
+1t<ux>
+1ty
+4te. % JD+ (df jun92)
+4tes.
+1t2h
+4th.
+.th4
+4the.
+4thes.
+th2l % (2thl in JD'original file) (df june92)
+2thm
+2thn
+th2r
+4thre. % JD+ (df jun92)
+4thres. % JD+ (df jun92)
+2ths
+1t2r
+4tre.
+4tres.
+1va
+1v<ax>
+1ve
+1v<ea>
+1v<eg>
+1v<ex>
+1vi
+1v<ix> % mjf jun88
+1vo
+1v<ox>
+1vu
+1v<ux>
+1vy
+4ve. % JD+ (df jun92)
+4ves.
+1v2r
+4vre.
+4vres.
+1wa
+1we
+1wi
+1wo
+1wu
+4we. % JD+ (df jun92)
+4wes.
+1w2r
+1za
+1ze
+1z<ea>
+1z<eg>
+1zi
+1zo
+1zu
+1zy
+4ze. % JD+ (df jun92)
+4zes.
+% following patterns missing (df jun92)
+'a4
+'<ax>4
+'e4
+'<ea>4
+'<eg>4
+'<ex>4
+'i4
+'<ix>4
+'o4
+'<ox>4
+%'\"o2 % mjf what for??? df jun92
+'u4
+'<ux>4
+'y4
+2'2
+id'
+% end of missing patterns
+% Note: in FRHYPH following patterns are added, why? (\lefthyphenmin=2)
+% .a4 .<ax>4 .e4 .<ea>4 .<eg>4 .<ex>4 .i4 .<ix>4 .o4 .<ox>4 .u4 .<ux>4 .y4
+d1s2
+f1s2
+g1s2
+tung2s3 % JD+ (df jun92)
+l1s2t
+m1s2
+e2s3ch
+i2s3ch<ea>
+i2s3chia
+i2s3chio
+% Etymological patterns
+1alcool
+i1algi
+a2l1algi % JD+ (df jun92)
+y1algi % JD+ (df jun92)
+1a2nesth<ea>si
+i1arthr
+y1asth % JD+ (df jun92)
+a1<eg>2dre
+i1<eg>2dre
+o1<eg>2dre % JD+ (df jun92)
+1<ea>2drie % JD+ (df jun92)
+1<ea>2drique
+1<ea>2lectr
+1<ea>2l<ea>ment
+1<ea>2nerg
+o1d2l % JD+ (df jun92)
+2t3heur
+2r3heur
+3d2hal % JD+ (df jun92)
+3d2houd
+2s3hom
+2r3hydr
+1informat % df jun92
+o1ioni
+1m2n<eg>s % JD+ (df jun92)
+1m2n<ea>si
+1m2n<ea>mo
+mon2t3r<ea>al % df jun92
+1octet % df jun92
+i1oxy
+io1a2ct % JD+ (df jun92)
+3ph2tal<ea>
+3ph2tis
+1p2neu
+1p2n<ea>
+1p2sych
+1p2t<eg>r
+1p2t<ea>r
+1s2caph
+1s2cl<ea>r
+1s2cop
+e2s3cop
+<ea>pi2s3cop
+<ea>pi3s4cope
+di2s3co % instead of di2s3cop (dis-convenance, dis-courir...) (df jun92)
+1s2lav
+1s2lov
+1s2patia
+1s2perm
+1s2por
+1s2ph<eg>r
+1s2ph<ea>r
+1s2piel
+1s2piros
+1s2tandard
+o1s2tas
+eu1s2tat % JD+ (df jun92)
+o1s2tat
+pro2s3tat
+i1s2tat
+1s2tein
+o1s2t<ea>ro
+1s2tigm
+o1s2tim
+1s2tock
+1s2tomos
+o1s2tom
+y1s2tom % JD+ (df jun92)
+o1s2trad
+o1s2tratu
+o1s2triction
+1s2troph
+a2s3tro
+apo2s3tr
+u2s3tr
+1s2tructu
+1s2tyle
+t1t2l % JD+ (df jun92)
+.ab3r<ea>a % JD+ (df jun92)
+.ae3s4ch % JD+ (df jun92)
+.amino1a2c % JD+ (df jun92)
+.ana3s4tr % JD+ (df jun92)
+.anti1a2
+.anti1e2
+.anti2enne
+.anti1<ea>2
+.anti1s2
+.apo2s3ta % JD+ (df jun92)
+.as2ta % JD+ (df jun92)
+% following patterns missing (df jun92)
+'ab3r<ea>a
+'ae3s4ch
+'amino1a2c
+'ana3s4tr
+'anti1a2
+'anti1e2
+'anti2enne
+'anti1<ea>2
+'anti1s2
+'apo2s3ta
+'as2ta
+% end of missing patterns
+.bi1a2c
+.bi1au
+.bio1a2
+.bi1u2
+.bi2s1a2
+chlo2r3a2c % JD+ (df jun92)
+chlo2r3<ea>2t % JD+ (df jun92)
+.ci2s1alp
+co1acc
+co1acq
+co1a2d
+co1ap
+co1ar
+co1assoc
+co1assur
+co1au
+co1ax
+co1ef % JD+ (df jun92)
+co1en
+co1ex
+co1<ea>2
+.con4 % df mar92
+.cons4 % df mar92
+.contre1s2c % JD+ (df jun92)
+co2nurb % (instead of co2n1urb) df jun92
+.co1o2 % (instead of colo2) df mai92
+.co2o3lie
+.cul4 % df jan92
+.dacryo1a2 % JD+ (df jun92)
+.d<ea>1a2
+.d<ea>1io
+.d<ea>1o2
+% Following patterns are not original JD's, who changed them? why?
+.d<ea>2s1a2
+.d<ea>3s2a3cr
+.d<ea>3s2astr
+.d<ea>3s2a3tell
+.d<ea>2s1<ea>2
+.d<ea>3s2<ea>3gr
+.d<ea>2s1e2
+.d<ea>3s2ensib
+.d<ea>3s2ert
+.d<ea>3s2exu
+.d<ea>2s3h
+.d<ea>2s1i2
+.d<ea>3s2i3d
+.d<ea>3s2i3gn
+.d<ea>3s2i3li
+.d<ea>3s2i3nen% instead of .d<ea>3s2i3non (df jun92)
+.d<ea>3s2invo
+.d<ea>3s2i3r
+.d<ea>3s2ist
+.d<ea>2s1o2
+.d<ea>3s2o3d<ea>
+.d<ea>3s2o3l
+.d<ea>3s2o3pil
+.d<ea>3s2orm
+.d<ea>3s2orp
+.d<ea>3s2oufr
+.d<ea>2s1<oe> % mjf jun88
+.d<ea>1s2c
+.d<ea>1s2p
+.d<ea>1s2t
+.d<ea>2s1u2n
+% end of modifications
+.di1a2c<ea>
+.di1a2cid
+dia2g3n
+.di1ald
+.di1a2mi
+.di1a2tom % .di1a2tomi in JD's file df jun92
+.di1e2n
+.di2s3h
+.dy2s1a2
+.dy2s1i2
+.dy2s1o2 % df jun92
+.dy2s1u2
+.dy2s3
+.en1a2
+'en1a2 % df jun92
+en1i2vr
+.en1o2
+'en1o2 % df jun92
+.eu2r1a2
+'eu2r1a2 % df jun92
+extra1
+extra2c % JD+ (df jun92)
+extra2i % JD+ (df jun92)
+h<ea>mi1<ea>
+h<ea>mo1p2t
+hypera2
+hyper<ea>2
+hypere2 % df june 92
+hyper<oe>2 % JD+ (df jun92)
+hyperi2
+hypero2
+hypers2
+hyperu2
+hype4r1
+hypo1a2
+hypo1<ea>2
+hypo1e2 % df jun92
+hypo1i2
+hypo1o2
+hypo1u2
+hypo1s2
+.in1a2
+.in2a3nit
+.in2augur
+.in1<ea>2
+.in2<ea>3lucta % e -> <ea> df jun92
+.in2<ea>3narra
+.in1e2
+.in2effab % df jun92
+.in2ept
+.in2er
+.in2exora % df jun92
+.in1i2
+.in2i3miti
+.in2i3q
+.in2i3t
+.in1o2
+.in2o3cul
+.in2ond
+.in1s2tab
+.in1u2
+.in2uit
+.in2u3l
+% same patterns with ' missing (df jun92)
+'in1a2
+'in2a3nit
+'in2augur
+'in1<ea>2
+'in2<ea>3lucta
+'in2<ea>3narra
+'in1e2
+'in2effab
+'in2ept
+'in2er
+'in2exora
+'in1i2
+'in2i3miti
+'in2i3q
+'in2i3t
+'in1o2
+'in2o3cul
+'in2ond
+'in1s2tab
+'in1u2
+'in2uit
+'in2u3l
+.intera2
+.inter<ea>2
+.intere2
+.interi2
+.intero2
+.interu2
+.inters2
+.inte4r3
+% same patterns with ' missing (df jun92)
+'intera2
+'inter<ea>2
+'intere2
+'interi2
+'intero2
+'interu2
+'inters2
+'inte4r3
+la2w3re % df jun92
+.ma2c3k % JD+ (df jun92)
+.macro1s2c % JD+ (df jun92)
+.ma2l1a2dres
+.ma2l1a2dro
+.ma2l1ais<ea>
+.ma2l1ap
+.ma2l1a2v
+.ma2l1en
+.ma2l1int
+.ma2l1oc
+.ma2l1o2d
+.ma2r1x % JD+ (df jun92)
+.m<ea>2g1oh
+.m<ea>2sa % df jun92
+.m<ea>3san % df jun92
+.m<ea>2s1es % .m<ea>2ses in JD's file (df jun92)
+.m<ea>2s1i % .m<ea>2si in JD's file (df jun92)
+.m<ea>2s1u2s % .m<ea>2sus in JD's file (df jun92)
+.m<ea>ta1s2ta
+.milli1am % JD+ (df jun92)
+.mono1a2
+.mono1<ea>2
+.mono1e2
+.mono1i2
+.mono1<id>2d<ea> % JD+ (df jun92)
+.mono1o2 % momo -> mono df jun92
+.mono1u2
+.mono1s2
+.no2n1obs
+n3s2at. % JD+ (df jun92)
+n3s2ats. % JD+ (df jun92)
+o2b3long % JD+ (df jun92)
+ombud2s3 % JD+ (df jun92)
+omni1s2
+.oua1ou % JD+ (df jun92)
+'oua1ou % df jun92
+.ovi1s2c % JD+ (df jun92)
+'ovi1s2c % df jun92
+oxy1a2
+pal<ea>o1<ea>2
+.pa2n1a2f
+.pa2n1a2m<ea>
+.pa2n1a2ra
+.pa2n1is
+.pa2n1o2ph
+.pa2n1opt
+.para1s2
+.pa2r1a2che
+.pa2r1a2ch<eg>
+.pa2r3h<ea>
+.per1a2
+.per1<ea>2
+.per1e2
+.per1i2
+.per1o2
+.per1u2
+per3h
+.pe4r
+p<ea>2n1ul
+p<ea>2r1<ea>2q % JD+ (df jun92)
+.p<ea>ri1os
+.p<ea>ri1s2
+.p<ea>ri2s3s
+.p<ea>ri2s3ta
+.p<ea>ri1u2
+.phalan3s2t % JD+ (df jun92)
+photo1s2
+.phyto3ph2 % JD+ (df jun92)
+.pluri1a % JD+ (df jun92)
+poly1a2
+poly1<ea>2
+poly1<eg>2
+poly1e2
+poly1i2
+poly1o2
+poly1u2
+poly1s2
+.pos2t3h % instead of .pos2t3hy (df jun92)
+.pos2t1in % JD+ (df jun92)
+.pos2t1o2
+.pos2t3r
+.post1s2
+.pr<ea>1a2
+.pr<ea>2a3la % df jun92
+.pr<ea>2au
+.pr<ea>1<ea>2
+.pr<ea>1e2
+.pr<ea>1i2
+.pr<ea>1o2
+.pr<ea>1u2
+.pr<ea>1s2
+.pro1<ea>2
+.prou3d2h % JD+ (df jun92)
+.pro1s2c<ea>
+.psycho1a2n % JD+ (df jun92)
+.pud1d2l % JD+ (df jun92)
+radio1a2 % df jun92
+.re1s2
+.re2s3cap
+.re2s3cisi % df jun92
+.re2s3ciso % df jun92
+.re2s3cou
+.re2s3cri
+.re2s3pect
+.re2s3pir
+.re2s3plend
+.re2s3pons
+.re2s3quil
+.re2s3s
+.re2s3t
+.re3s4tab
+.re3s4tag
+.re3s4tand
+.re3s4tat
+.re3s4t<ea>n
+.re3s4t<ea>r
+.re3s4tim
+.re3s4tip
+.re3s4toc
+.re3s4top
+.re3s4tr
+.re4s5trein
+.re4s5trict
+.re4s5trin
+.re3s4tu
+.re3s4ty
+.r<ea>1a2
+.r<ea>2a3le
+.r<ea>2a3lis
+.r<ea>2a3lit
+.r<ea>2aux
+.r<ea>1<ea>2
+.r<ea>1e2
+.r<ea>2el
+.r<ea>2er % JD+ (df jun92)
+.r<ea>2<eg>r
+.r<ea>1i2
+.r<ea>2i3fi
+.r<ea>1o2
+.r<ea>1u2
+.r<ea>2uss
+.r<ea>tro1a2
+sesqui1a2
+st<ea>r<ea>o1s2
+.su2b1a2
+.su3b2alt
+.su2b1<ea>2
+.su3b2<ea>3r
+.su2b1in % JD+ (df jun92)
+.su2b3limin
+.su2b3lin
+.su2b3lu
+sub1s2
+.su2b1ur
+supero2
+supers2
+supe4r1
+.su2r1a2
+su3r2ah
+.su3r2a3t
+.su2r1e2
+.su3r2eau
+.su3r2ell % instead of .su3r2e1l (df jun92)
+.su3r2et
+.su2r1<ea>2
+.su2r3h
+.su2r1i2m
+.su2r1inf
+.su2r1int
+.su2r1of
+.su2r1ox
+tachy1a2 % JD+ (df jun92)
+tchin3t2 % JD+ (df jun92)
+t<ea>l<ea>1e2
+t<ea>l<ea>1i2
+t<ea>l<ea>1o2b
+t<ea>l<ea>1o2p
+t<ea>l<ea>1s2
+thermo1s2
+tran2s1a2
+tran3s2act % should be tran2s3act ? (trans-action)
+tran3s2ats
+tran2s3h
+tran2s1o2
+tran2s3p
+tran2s1u2
+.tri1a2c
+.tri1a2n
+.tri1a2t
+.tri1o2n % JD+ (df jun92)
+archi1<ea>2pis
+moye2n1<ax>2g
+po1astre
+uni1o2v % JD+ (df jun92)
+uni1a2x % JD+ (df jun92)
+v<ea>lo1s2ki
+vol2t1amp
+% last patterns put back in alphabetical order (df jun92)
+}
+
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Chers coll\`egues,
+
+ J'ai compar\'e les 3 fichiers suivants :
+ - FRHYPHEN pour MLTeX du Gould de Rennes, (GR)
+ - La liste de motifs de J. D\'esarm\'enien parue dans TSI, (JD)
+ - le fichier FR8HYPHEN de Yannis, (YH)
+et je voudrais vous faire part des diff\'erences que j'ai observ\'ees et
+des questions que je me pose.
+
+ D'apr\`es Bernard, la r\'ef\'erence \`a prendre est le Gould, je comparerai
+donc les 2 autres \`a cette r\'ef\'erence.
+
+ 1) Le motif `th2l' figure \`a Rennes contre `2thl' chez JD, lequel est le
+bon ? Pour ma part je ne sais pas comment il faut couper athl\'etisme,
+triathlon ou biathl\`ete. Avec le motif `th2l' (Rennes) j'obtiens :
+pen-ta-thlon mais tri-athlon, est-ce correct ?
+
+ 2) M\^eme probl\`eme avec `2ck3h' \`a Rennes contre `c2k3h' chez JD...
+
+ 3) Que vient faire le motif '\"o2 ajout\'e par mjf (ligne 471 du fichier GR) ?
+Existe-t-il des mots fran\c cais commen\c cant par `o-tr\'ema' ? Ce motif est
+absent des 2 autres fichiers.
+
+ 4) Quelle est l'utilit\'e des motifs (lignes 448--460)
+.a4 .\^a4 .e4 .\^e4 .\'e4 .\`e4 .i4 .\^\i4 .o4 .\^o4 .u4 .\^u4 .y4 ?
+En fran\c cais \lefthyphenmin=2, il me semble donc inutile d'interdire
+les c\'esures ci-dessus, en revanche les m\^emes motifs avec apostrophe
+s'imposent ('a4 '\^a4 ... 'y4).
+
+ 5) Dans le m\^eme ordre d'id\'ee, `on' a rajout\'e \`a Rennes un tas de motifs
+de 2 lettres en fin de mot qui ne figuraient pas chez JD :
+4be. 4ce. 4ch. 4ck. 4de. 4fe. 4ge. 4he. etc.
+Ils ne servent \`a rien tant qu'on impose \righthyphenmin=3.
+Faut-il les maintenir quand m\^eme ?
+
+ 6) Les motifs suivants pr\'esents chez JD sont absents \`a Rennes :
+ - .re2s3cisi
+ - .re2s3ciso
+(ils sont pr\'ec\'ed\'es d'un %) ne faut-il pas les remettre ?
+
+ 7) Les motifs de JD concernant les d\'ebuts de mots en .d\'es (lignes
+617--647)
+ont \'et\'e assez profond\'ement retouch\'es sur la version de Rennes.
+Est-ce par Norman Buckle ? Ces modifications ont-elles \'et\'e test\'ees ?
+
+Une chose me trouble : JD affirme dans TSI que ses motifs donnent
+d\'esami-don-ner, or dans cet exemple s'appliquent les motifs `.d\'e2s'
+et `1mi', je ne vois pas pourquoi la coupure entre le `a' et le `m'
+serait emp\^ech\'ee... En revanche on a sur le Gould le motif `.d\'e2s1a2'
+qui emp\^eche la coupure entre le `a' et le `m' mais pourquoi avoir mis
+un `1' entre le `s' et le `a' alors qu'on ne veut s\^urement pas d\'es-ami ?
+
+Autre question : le Larousse des difficult\'es de la langue fran\c caise donne
+pour bonne la division `d\'esa-bu-ser', pourquoi alors faut-il refuser
+`d\'esa-mi-don-ner' ?
+
+ 8) Pb de dis-convenance, dis-continuit\'e, dis-cours (cf. question de Bernard)
+:
+je propose de changer `di2s3cop' (ligne 532) en `di2s3co', je ne connais
+'ailleurs pas de mot en 'discop'. J'ai test\'e, \c ca marche \`a mon avis :
+j'obtiens
+dis-con-ve-nance dis-con-ti-nuit\'e dis-co-bole dis-co-gra-phie
+dis-con-ve-nir dis-co-phile dis-cor-dant dis-cou-rir dis-cour-tois.
+Y a-t-il des objections ?
+
+ 9) Ne faudrait-il pas ajouter des motifs pour le c-cedille ?
+Je propose : `1\c ca' `1\c co' `1\c cu' si \c ca passe en MLTeX (?),
+et en version 8-bits (fontes EC) : `1<cc>a' `1<cc>o' `1<cc>u'
+(ex. : commen\c cant commer\c cant fa\c con ma\c connerie ger\c cure).
+
+ 10) En essayant les mots dont la division est donn\'ee dans le Lexique
+des r\`egles typographiques ou le Larousse des difficult\'es,
+j'ai obtenu trois coupures apparemment incorrectes :
+
+ ** tran-sac-tion au lieu de trans-ac-tion (selon le Lexique)
+le motif `tran3s2act' pr\'esent \`a Rennes et chez JD est responsable,
+`tran2s3act' me semble plus conforme \`a l'\'ethymologie.
+
+ ** caout-chouc au lieu de caou-tchouc (selon le Lexique)
+faut-il ajouter `caou3t2chou' ?
+
+ ** post-hume au lieu de pos-thume (selon le Larousse)
+l\`a c'est le motif `.pos2t3h' pr\'esent \`a Rennes et chez JD qui est
+responsable,
+faut-il le changer ? Le Larousse affirme que dans ce cas c'est la coupure
+phon\'etique qui s'impose, \c ca peut se discuter...
+Qu'en pensent les sp\'ecialistes ? Question finale (fondamentale) :
+existe-t-il un ouvrage de r\'ef\'erence qui tranche tous ces cas litigieux ?
+
+=================================================================
+ Je signale pour terminer qq lacunes (graves) du fichier 8-bits
+de Yannis (outre les doubles points...) :
+ - il manque tous les motifs phon\'etiques concernant les mots en `ill'
+(lignes 222--260 dans le fichier de Rennes) ;
+Il n'est pas le seul \`a faire cet oubli puisque le fichier FEhyphen.tex
+diffus\'e avec le format FEPlain par le labo de typographie de Strasbourg
+(proche de JD ?) fait la m\^eme chose !
+ - il manque tous les motifs concernant les mots en `ck' (lignes 75--85 sur
+le Gould) ;
+ - il manque de tr\`es nombreux motifs commen\c cant par une apostrophe ;
+ - plus qq fautes de frappes et omissions diverses...
+
+ J'ai compl\'et\'e et corrig\'e le fichier 8-bits de Yannis en prenant pour
+mod\`ele celui de Rennes. Il s'agit pour l'instant d'une version d'essai
+annot\'ee en ce qui concerne les ajouts, corrections et pbs en suspens. Si \c
+ca int\'eresse quelqu'un il suffit de me la demander.
+
+Bien cordialement,
+Daniel Flipo.
+
diff --git a/macros/generic/caesarcm/caesarcmv2.dir/xadobetextures.pub b/macros/generic/caesarcm/caesarcmv2.dir/xadobetextures.pub
new file mode 100644
index 0000000000..fd8a45c9b2
--- /dev/null
+++ b/macros/generic/caesarcm/caesarcmv2.dir/xadobetextures.pub
@@ -0,0 +1,96 @@
+
+
+
+ *** Acces aux caracteres accentu\'es
+ des polices Adobe type 1 ***
+
+ R.Thomas <rthomas@dmi.ens.fr> pose des questions tres
+ actuelles sur l'exploitation, des polices PostScript
+ (sous-entendus Adobe de types1?) et j'espere qu'il y aura
+ plusieurs reponses. Voici quelques remarques pour
+ commencer.
+
+ > Je cherche depuis plusieurs jours a faire
+ > tourner TeX avec les fontes PostScript et il
+ > semble que le recours aux fontes virtuelles
+ > soit incontournable si je veux les lettres
+ > accentuees, les cesures, etc.
+
+ Non, Nicolas Jungers et moi avons decouvert que cela est
+ loin d'etre toute la verite. Les outils que nous avons pu
+ sortir jusqu'ici se trouvent sur ftp matups.matups.fr. Par
+ exemple, sous *Textures*, on peut *aisement* exploiter les
+ nombreux caracteres accentues qui sont caches dans les
+ entrails des polices Adobe type1, en combinant mon
+ CaesarCM.tex avec les .tfm de Jiri Zlatuska.
+
+ (a) Compiler votre format habituel en y ajoutant
+ CaesarCM.tex au bon moment. fe-format-dumper-cm vous y
+ aidera. (Ensuite \Francais introduit le francais et
+ \Anglais introduit l'anglais.) Y ajouter en option
+ Active8TimesCsCM.tex pour une saisie a 8 bits.
+
+ (b) Glisser la valise "echantillon" xAdobe-Textures-TFMs
+ dans le dossier TeX Fonts. Assurez vous que le Times
+ ordinaire de Textures est disponible, et, si possible,
+ mettez en action Adobe Type Manager (ATM) pour avoir de
+ belles images a l'ecran.; pour cela il faut avoir installe
+ le module ATM de Times.
+
+ Alors la police echantillon xTimes est disponible au meme
+ titre que le Times mont\'e en standard par Textures et offre
+ essentiellement les caracteres accentues ISOLatin1, plus
+ exactement l'intersection de macvec avec la population de
+ caracteres accentues fournis en standard par Adobe.
+ Mini-\'echantillon Plain:
+
+ \font \maTimes=xTimes
+ \ShowCaesar %% demande un message diagnostique pour
+ %% chaque caractere accentue > 127
+ \maTimes P\'ep\'e! \bye
+
+ Voici comment monter une police de plus a partir de son
+ .tfm fourni par Zlatushka. (Seules les familles Times et
+ Helvetica se trouvent dans le dossier des echantillons!)
+ Il s'agit d'ajouter a la valise une resource *TFM de plus
+ obtenu a partir du fichier .tfm de Zlatushka par la voie:
+
+ .tfm ---> .pl (par TFtoPL)
+ .pl ---> *TFM
+ (par EdMetrics, utilitaire de Textures)
+
+ Seul le maniement de EdMetrics est delicat; mais il suffit
+ de calquer ce qu'on peut voir en ouvrant xTimes avec
+ EdMetrics. Pour AvantGarde l'echantillon devient
+
+ \font \mapolice=zAvantGarde %% z pour Zlatuska
+ \skewchar\mapolice=\CaesarClassTM %% T pour Taupin
+ \ShowCaesar
+ \mapolice P\'ep\'e! \bye
+
+ Le fait d'utiliser les .tfm de Zlatushka sans aucune
+ modification specifique a CaesarCM nous impose la ligne
+ supplementaire.
+
+ C'est donc un travail a la portee du texpert de monter
+ pout Textures n'importe quelle police Adobe avec ses caracteres
+ accentues. D'ailleurs ATM offre un epreuvage ecran de tout
+ beaute.
+
+ Pour d'autres implantations de TeX c'est egalement
+ possible mais bien plus difficile: de la magie de Nicolas
+ avec les vecteurs d'encodage PS s'impose...
+
+
+
+ Laurent Siebenmann
+
+
+
+ NB: Utiliser la version *la plus recente* de
+UnZip pour Macintosh (v 2.0 sept 1992, disponible sur ftp
+sumex.stanfotrd.edu) pour recupere les fichiers ".tfm"
+de Zlatushka.
+
+Automne 1992
+
diff --git a/macros/generic/catcodes/README b/macros/generic/catcodes/README
new file mode 100644
index 0000000000..60766636f5
--- /dev/null
+++ b/macros/generic/catcodes/README
@@ -0,0 +1,63 @@
+
+ README for the `catcodes' bundle
+ (C) Uwe Lueck 2015/11/14
+
+The `catcodes' bundle deals with category code switching.
+The contained packages should work with LaTeX as well as without
+(based on the `plainpkg' package). The important cases of category
+codes are
+(a) "private letters" for internal package commands and
+(b) active characters.
+`stacklet.sty' deals with (a), `actcodes.sty' with (b).
+There also is
+(c) `catchdq.sty', an application of (b),
+for automatic insertion of typographical double quotes
+when the user only enters ASCII double quotes. What is
+"typographical" differs between languages, the new `langcode'
+package completes `catchdq''s functionality in this respect.
+
+The documentation for the three package files is contained
+in the file `catcodes.pdf'.
+
+REQUIRED PACKAGES: plainpkg, stacklet
+
+RELATED PACKAGES: catoptions, pcatcode (amsrefs), texapi, csquotes
+
+KEYWORDs: macro programming, category codes, private letters,
+ active characters, double quotes
+
+The package files `actcodes.sty', `catchdq.sty', and
+`stacklet.sty', together with the documentation files
+`catcodes.pdf' and `catcodes.tex', can be redistributed and/or
+modified under the terms of the LaTeX Project Public License;
+either version 1.3c of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+There is NO WARRANTY, actually all of this still is a little
+experimental.
+
+The `catcodes' bundle is author-maintained in the sense of
+the license.
+
+The latest public version of the bundle is available at
+
+ http://mirror.ctan.org/macros/generic/catcodes/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/generic/catcodes.tds.zip
+
+The file `catcodes.RLS' summarizes bundle releases. With the
+`typeoutfileinfo' package, the command
+
+ typeoutfileinfo catcodes.RLS
+
+tells which release is installed on your system. Similar packages
+are `ltxfileinfo' by Wybo Dekker and `latexfileversion' by Harald
+Harders.
+
+Please report bugs, problems, and suggestions via
+
+ http://www.contact-ednotes.sty.de.vu
+
diff --git a/macros/generic/catcodes/doc/SrcFILEs.txt b/macros/generic/catcodes/doc/SrcFILEs.txt
new file mode 100644
index 0000000000..168e0295a7
--- /dev/null
+++ b/macros/generic/catcodes/doc/SrcFILEs.txt
@@ -0,0 +1,14 @@
+
+ *File List*
+catcodes.RLS 2015/11/14 r0.2 catchdq v0.21 proper definedness test
+actcodes.sty 2012/11/07 v0.2a active characters (UL)
+stacklet.sty 2012/11/07 v0.3a private letters (UL)
+ catchdq.sty 2015/05/22 v0.21 typographic dqs (UL)
+catcodes.tex 2015/11/14 -- documenting catcodes files
+ makedoc.cfg 2013/03/25 -- documentation settings
+mdoccorr.cfg 2012/11/13 -- `makedoc' local typographical corrections
+ ***********
+
+ List made at 2015/11/14, 21:19
+ from script file srcfiles.tex
+
diff --git a/macros/generic/catcodes/doc/catcodes.RLS b/macros/generic/catcodes/doc/catcodes.RLS
new file mode 100644
index 0000000000..e4cabcf9e3
--- /dev/null
+++ b/macros/generic/catcodes/doc/catcodes.RLS
@@ -0,0 +1,4 @@
+\ProvidesFile{catcodes.RLS} %% RELEASE INFO
+ [2015/11/14 r0.2 catchdq v0.21 proper definedness test]
+ [2012/11/07 r0.1a documentation corrected/extended]
+ [2012/09/20 r0.1 initial release]
diff --git a/macros/generic/catcodes/doc/catcodes.pdf b/macros/generic/catcodes/doc/catcodes.pdf
new file mode 100644
index 0000000000..d1d4de26f5
--- /dev/null
+++ b/macros/generic/catcodes/doc/catcodes.pdf
Binary files differ
diff --git a/macros/generic/catcodes/docsrc/catcodes.tex b/macros/generic/catcodes/docsrc/catcodes.tex
new file mode 100644
index 0000000000..cb3494d880
--- /dev/null
+++ b/macros/generic/catcodes/docsrc/catcodes.tex
@@ -0,0 +1,204 @@
+\ProvidesFile{catcodes.tex}[2015/11/14 documenting catcodes files]
+\title{\pkg{catcodes}\\---\\``Generic" Switching of Category Codes}
+% \listfiles
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \renewcommand\mdSectionLevelOne {\string\subsection}
+ \renewcommand\mdSectionLevelTwo {\string\subsubsection}
+ \MainDocParser{\SectionLevelTwoParseInput}
+ \HeaderLines{18} %% 18 2012/08/26
+ \MakeSingleDoc{stacklet.sty}
+ \MakeSingleDoc{actcodes.sty} %% 2012/08/26
+ \MakeSingleDoc{catchdq.sty} %% 2012/09/16
+}
+% \RequirePackage[ir]{inputtrc} %% 2015/11/14
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+% \ReadPackageInfos{stacklet}
+\MDkeywords{Macro programming, category codes, private letters,
+ active characters, double quotes}
+\newcommand*{\headersec}{%
+ \subsection{Package File Header---\pkg{plainpkg} and Legalese}}
+\usepackage{ngerman} \originalTeX
+\usepackage{catchdq} %% try it more often! TODO 2012/11/07
+\usepackage{langcode} %% 2012/11/07
+\usepackage{filedate} %% 2012/11/06
+\sloppy
+% \flushbottom %% 2012/11/07
+\begin{document}
+\maketitle
+\begin{MDabstract}
+The 'catcodes' bundle provides small packages for switching
+category codes, usable both with \LaTeX\ and without. \
+(i)\enspace \pkg{stacklet.sty} maintains stacks for ``private letters,"
+needed for 'plainpkg.tex''s minimal framework for ``generic"
+packages. \
+(ii)\enspace \pkg{actcodes.sty} deals with ``active characters,"
+switching their category codes and assigning meanings to
+``active-character tokens." \
+(iii)\enspace
+%% 2012/09/16:
+\pkg{catchdq.sty} uses the
+``\acro{ASCII} %% 2012/11/06
+double quote" as an active character
+for simplified access to typographical double quotes.---These
+packages are ``generic" in the sense that they should
+be usable at least both with \LaTeX\ and Plain \TeX,
+based on 'plainpkg.tex'.
+
+\MDaddtoabstract{Required Packages}
+\ctanpkgref{plainpkg}, 'stacklet'
+\MDaddtoabstract{Related Packages}
+\ctanpkgref{catoptions}, 'pcatcode' from \ctanpkgref{amsrefs},
+\ctanpkgref{texapi},
+\ctanpkgref{csquotes}. %% 2012/09/16
+\end{MDabstract}
+\tableofcontents
+\section{Overview}
+Sorry, \dots, the abstract and the table of contents
+must suffice for today (2012-11-07) \TODO
+
+\section{Shared Features of Usage}
+%%% rm. 2012/09/17:
+% \section{General Background---Usage, Required}
+% The packages of this bundle are part of a certain family of
+% ``generic" packages: They should work \emph{with} \LaTeX\
+% as well as \emph{without} \LaTeX, aiming at
+% ``independency of format"---actully too much now~...
+% most importantly, they require \ctanpkgref{plainpkg}.
+%%% rm 2012/09/16:
+% ,
+% and the latter's documentation should tell you about
+% how to use the present packages.
+%
+All the packages of the bundle are ``\pkg{plainpkg} packages"
+in the sense of the
+\ctanpkgref{plainpkg}\foothttpurlref{ctan.org/pkg/plainpkg}
+documentation that exhibits details of what is summarized here.
+Therefore:
+\pagebreak[2] %% 2012/11/07
+\begin{itemize}
+ \item All of them require that \TeX\ finds `plainpkg.tex'
+ as well as `stackrel.sty'.
+ \item In order to load `<catcodes>.sty'
+ (where <catcodes> is `stacklet', `actcodes', or `catchdq'),
+ type \ |\usepackage{<catcodes>}| \ within a \LaTeX\ document
+ preamble, \ |\RequirePackage{<catcodes>}| \ in a
+ ``\pkg{plainpkg} package", or \ |\input <catcodes>.sty| \
+ $\dots$ \ or perhaps `\input{<catcodes>.sty}'?
+\end{itemize}
+
+\section{'actcodes.sty'---Active Characters}
+%% intro 2012/11/07:
+\subsection{Introduction}
+Active characters can simplify syntax often, i.e., the code
+may be very pleasant to type and read. But sometimes something
+may fail. See Section~\ref{sec:actcodes-cmds} for how to cope
+with possibilities and difficulties.
+\headersec
+\input{actcodes.doc}
+
+\section{'catchdq.sty'---Typographical Double Quotes}
+%% <- TODO cf. morgan.sty 2012/11/06 ->
+% \section{'catchdq.sty'---Automatic Typographical Double Quotes by Toggling}
+% \section{'catchdq.sty'---Proper Double Quotes by Toggling}
+%% <- morgan.sty 2012/11/06 ->
+\subsection{Introduction}
+\catchdqs
+The 'catchdq' package allows getting typographical double quotes
+by just using the "\acro{ASCII} double quote" |"|. A more precise overview:
+\begin{enumerate}
+ \item Typically, "typographical" quotation marks mean distinguishing
+ between "opening" and "closing" quotation marks.
+ Usually, you must enter different characters or commands for
+ the distinction, such as |``| for "opening" and |''| for
+ \emph{closing}---in \emph{English} with \emph{\TeX}.
+ For \emph{English} with \emph{Plain~\TeX}, even |"| suffices for "closing."
+ \item There are much different conventions especially for \emph{German}
+ and \emph{French}. They require different characters or \TeX~commands
+ than for \emph{English}. The packages \ctanpkgref{german},
+ \ctanpkgref{ngerman}, and \ctanpkgref{babel} have dealt with
+ such conventions.
+ \item Understanding the ideas mentioned before has been difficult
+ for a long time, probably because typewriter and computer \emph{keyboards}
+ never have offered the appropriate keys. Rather, they only offered
+ the "\acro{ASCII} double quote" that produced an approximation
+ ("neutral quotation marks")
+ \emph{not} making the difference. Many users and readers
+ have not realized the difference, they have not realized
+ how their screen or printer output differed from double quotes
+ in books and newspapers. Cf.~the
+ \wikienref{Quotation mark}{Wikipedia article}\footnote{%
+ \urlhttpref{en.wikipedia.org/wiki/Quotation mark}}
+ \item The idea of the 'catchdq' package is that the user indeed should
+ not worry about that difference and just type
+ "\acro{ASCII} double quotes", and they should be "converted"
+ into the appropriate typographical quotation marks \emph{automatically}.
+ This should work by "toggling," i.e., the first
+ "\acro{ASCII} double quote" is interpreted as "opening,"
+ the second as "closing," the next one as "opening"~\dots
+ ---Word processors have provided this feature (as an option)
+ as well.
+ \item Language-dependency of the feature currently is managed
+ through the \ctanpkgref{langcode} package.
+ \item The feature may cause problems sometimes.
+ Therefore, explicit switching the feature "on"
+ and "off" is required.
+ \item The \ctanpkgref{csquotes} package addresses the issue
+ in a more comprehensive and perhaps more stable way.
+\end{enumerate}
+See Section~\ref{sec:catchdq-cmds} for
+% the commands provided.
+% Note that the \ctanpkgref{csquotes}
+% provides more comprehensive functionality.
+additional details. %% 2012/11/06
+\MakeOther\" %% TODO 2012/11/06
+
+\headersec
+\input{catchdq.doc}
+
+\pagebreak
+\section{'stacklet.sty'---Private Letters}
+\subsection{Introduction}
+\catchdqs %% 2012/11/07
+\uselangcode{en} %% 2012/11/07, \dedqtd above
+"Private letters" \emph{here} are meant to be
+characters that belong to the "letter"
+category only within packages. A package typically provides
+user commands as well as internal commands, and the latter
+are characterized by containing funny letters in commands such
+as `\@gobble.' This is to avoid conflicts.
+See Section~\ref{sec:stacklet-cmds} for the commands provided.
+\MakeOther\" %% 2012/11/07
+\headersec
+\input{stacklet.doc}
+
+%% 'filedate' check 2012/11/06:
+\noNiceVerb
+\input{fdatechk.tex}
+\end{document}
+
+VERSION HISTORY
+
+2012/08/24 for stacklet v0.1 very first
+2012/08/26 for stacklet v0.2 increased \HeaderLines, abstract;
+ for actcodes v0.1 added ...
+2012/09/16f. for catchdq v0.2 added ...
+2012/09/19 "plainpkg packages", \pagebreaks,
+ Roman numbers in abstract, \headersec
+2012/09/19 trying ngerman.sty
+
+ UPLOADED with `catcodes' r0.1 2012-09-20
+
+2012/11/06 supplementing missing word;
+ TODO on catchdq, `filedate' checks,
+ typeset with recent `niceverb';
+ more accurate about `catchdq',
+ long introduction
+2012/11/07 final formatting, some more info on
+ `stacklet' and `actcodes', TODOs,
+ some \catchdqs, `Overview',
+ 2 more \subsec...Intro...
+
+ UPLOADED with `catcodes' r0.1a 2012-11-07
+
+2015/11/14 for catchdq v0.21 debugging
diff --git a/macros/generic/catcodes/docsrc/fdatechk.tex b/macros/generic/catcodes/docsrc/fdatechk.tex
new file mode 100644
index 0000000000..74778a6acb
--- /dev/null
+++ b/macros/generic/catcodes/docsrc/fdatechk.tex
@@ -0,0 +1,14 @@
+\ProvidesFile{fdatechk.tex}[2015/05/22 `filedate' checks]
+%% TODO short notation
+\UseReferenceDate{\thepdfmoddate}
+\ModDates
+\ReadFileInfos{catcodes.RLS,srcfiles}
+\CheckDateOfGiven{actcodes.sty}
+\CheckDateOfGiven{catchdq.sty}
+%\DatesDiffWarnings
+\CheckDateOfGiven{stacklet.sty}
+%\DatesDiffErrors
+\CheckDateOfGiven{catcodes.tex}
+\CheckDateOfGiven{fdatechk.tex}
+\CheckDateOfGiven{srcfiles.tex}
+\CheckDateOfToday{catcodes.RLS}
diff --git a/macros/generic/catcodes/docsrc/makedoc.cfg b/macros/generic/catcodes/docsrc/makedoc.cfg
new file mode 100644
index 0000000000..666c87706e
--- /dev/null
+++ b/macros/generic/catcodes/docsrc/makedoc.cfg
@@ -0,0 +1,150 @@
+\ProvidesFile{makedoc.cfg}[{2013/03/25 documentation settings}]
+%%
+\author{Uwe L\"uck\thanks{%
+ \url{http://contact-ednotes.sty.de.vu}}}
+%%
+%% 'hyperref':
+\RequirePackage{ifpdf}
+\usepackage[%
+ \ifpdf
+% bookmarks=false, %% 2010/12/22
+% bookmarksnumbered,
+ bookmarksopen, %% 2011/01/24!?
+ bookmarksopenlevel=2, %% 2011/01/23
+% pdfpagemode=UseNone,
+% pdfstartpage=10,
+ pdfstartview=FitH, %% 2012/11/26 again
+% pdfstartview=0 0 100, %% 2011/08/22
+% pdfstartview={XYZ null null 1}, %% 2011/08/25
+% pdfstartview={XYZ null null null},%% 2011/08/25
+% pdfstartview={XYZ null null .5}, %% 2011/08/26
+% pdffitwindow=true, %% 2011/08/22
+ citebordercolor={ .6 1 .6},
+ filebordercolor={1 .6 1},
+ linkbordercolor={1 .9 .7},
+ urlbordercolor={ .7 1 1}, %% playing 2011/01/24
+ \else
+ draft
+ \fi
+]{hyperref}
+\hypersetup{%
+ pdfauthor={Uwe L\374ck}%
+}
+%% metadata, |\MDkeywords{<text>}|, |\MDkeywordsstring|:
+%% %% 2011/08/22:
+\makeatletter
+ \newcommand*{\MDkeywords}[1]{%
+ \gdef\MDkeywordsstring{#1}%
+ \hypersetup{pdfkeywords=\MDkeywordsstring}%% TODO!?
+ }
+ \@onlypreamble\MDkeywords
+%% |\MDaddtoabstract{<par-head>}|, `:' added:
+ \newcommand*{\MDaddtoabstract}[1]{% %% 2012/05/10
+ \par\smallskip\noindent
+ \strong{#1:}\quad\ignorespaces}
+%% \pagebreak[2]
+%% |\printMDkeywords|:
+ \newcommand*{\printMDkeywords}{%
+ \MDaddtoabstract{Keywords}%
+ \MDkeywordsstring
+% \global\let\MDkeywordsstring\relax %% `%' 2012/11/12
+ }
+%% The previous definitions mainly are useful with a variant
+%% |\begin{MDabstract}| of \LaTeX's `{abstract}' environment:
+ \newenvironment{MDabstract}
+ {\abstract\noindent
+ \hspace{1sp}%% for niceverb
+ \ignorespaces}
+ {\@ifundefined{MDkeywordsstring}%
+ {}%
+ {\printMDkeywords}%
+ \global\let\MDabstract\relax %% 2012/11/12
+ \global\let\endMDabstract\relax %% 2012/11/12
+ \endabstract}
+%% |\[MD]docnewline| 2012/11/12 from `readprov.tex':
+ \newcommand*{\MDdocnewline}{\leavevmode\@normalcr[\topsep]}
+%% <- `\leavevmode' for use with `\paragraph'.
+%% Sometimes needs to be preceded by a space.
+%%
+%% |\MDfinaldatechecks[<tex-script>]| with \ctanpkgref{filedate}:
+ \newcommand*{\MDfinaldatechecks}[1][fdatechk]{%
+ \AtEndDocument{%
+% \clearpage %% 2013/03/25 no avail -- with `filedate'!
+ \def\@pkgextension{sty}%
+ \def\NeedsTeXFormat##1[##2]{}%
+ \noNiceVerb %% 2013/03/22
+ \input{#1}%
+ }}
+ \@onlypreamble\MDfinaldatechecks
+\makeatother
+%% Use other packages:
+\RequirePackage{niceverb}[2011/01/24]
+\RequirePackage{readprov} %% 2010/12/08
+\RequirePackage{hypertoc} %% 2011/01/23
+\RequirePackage{texlinks} %% 2011/01/24
+\RequirePackage{relsize} %% 2011/06/27
+\RequirePackage{color} %% 2011/08/06
+\RequirePackage{lmodern} %% 2012/10/29
+\RequirePackage{filedate} %% 2012/11/12
+\RequirePackage{filesdo} %% 2013/03/22
+%% \pagebreak[3]
+%% Logical markup:\qquad |\strong{<chars>}|, |\meta{<chars>}|,
+%% |\acro{<chars>}|, |\pkg{<chars>}|,
+%% |\code{<chars>}|, |\file{<chars>}|:{\sloppy\par}
+\makeatletter
+ \def\do#1#2{\@ifdefinable#1{\let#1#2}}%% 2012/07/13
+ \do\strong\textbf \do\file\texttt \do\acro\textsmaller
+ %% <- wrong tests before 2012/07/13
+ \do\meta\textit \do \pkg\textsf \do\code\texttt
+ \ifpdf
+ \pdfstringdefDisableCommands{%
+ \let\acro\textrm
+ \let\file\textrm %% 2011/11/09
+ \let\code\textrm %% 2011/11/20
+ \let\pkg \textrm %% 2012/03/23
+ }
+ \fi
+ %% TODO 2011/07/22 -> `htlogml.sty'
+\makeatother
+%% |\qtdcode{<text>}|: 2012/10/24:
+ \newcommand*{\qtdcode}[1]{`\code{#1}'}
+%% |\pkgtitle{<package-name>}{<caption>}|
+\newcommand*{\pkgtitle}[2]{% %% 2012/07/13
+ \global\let\pkgtitle\relax
+ \pkg{\huge #1}\\---\\#2\thanks{This
+ document describes version
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \textsf{\jobname.sty} as of \UseDateOf{\jobname.sty}.}}
+%% TODO: %% |\TODO| bad with `mdoccorr.cfg'
+\newcommand*{\TODO}{\textcolor{blue}{\acro{TODO}}} %% 2012/11/06
+%% `\MDsampleinput[{<file>}' was added 2012/11/06.
+%% Problems with `myfilist.tex' were due to 'parskip.sty'
+%% there. On 2012/11/12, we change the former simple macro to a
+%% much more complex
+%% |\MDsamplecodeinput[<add-hfuss>]{<file>}|
+\newcommand*{\MDsamplecodeinput}[2][]{%
+ \begingroup
+ \vskip\bigskipamount \hrule
+ \nobreak\vskip-\parskip
+% \nobreak\vskip\medskipamount
+%% Previous mistake (same below) due to manual change
+%% of `\topsep' in the file `myfilist.tex' (2012/11/30).
+ \ifx\\#1\\\else
+ \hfuzz=\textwidth \advance\hfuzz#1\relax
+ \fi
+ \noNiceVerb \verbatiminput{#2}%
+% \nobreak\vskip\medskipamount
+ \hrule \vskip-\parskip
+ \bigskip %%% \bigbreak
+%% `\bigbreak' made much larger space in `myfilist.tex'.
+ \endgroup
+}
+%% |\ctanpkgdref{<pkg-id>}| adds the printed link to
+%% `ctan.org/pkg' as a footnote. There is a little space
+%% for coloured link borders:
+\newcommand*{\ctanpkgdref}[1]{%
+ \ctanpkgref{#1}\,\urlfoot{CtanPkgRef}{#1}}
+\errorcontextlines=4
+\pagestyle{headings}
+
+\endinput
diff --git a/macros/generic/catcodes/docsrc/mdoccorr.cfg b/macros/generic/catcodes/docsrc/mdoccorr.cfg
new file mode 100644
index 0000000000..6a6a701229
--- /dev/null
+++ b/macros/generic/catcodes/docsrc/mdoccorr.cfg
@@ -0,0 +1,61 @@
+\ProvidesFile{mdoccorr.cfg}[2012/11/13
+ `makedoc' local typographical corrections]
+%% ... also demonstrates 'niceverb.sty'---see the typeset
+%% documentation of the present file in `makedoc.pdf'.
+%%
+%% |\SetPatternCodes{<commands>}| redefines
+%% `\PatternCodes' to be used in parsing and replacing
+%% (some ``sanitizing"). %% improved line breaks 2010/03/29
+\SetPatternCodes{\MakeOther\\\MakeOther\ }
+%% |\StartPrependingChain| initializes setup of a replacement
+%% chain:
+\StartPrependingChain
+%% |\PrependExpandableAllReplacer*{<find>}{<subst>}|:
+\PrependExpandableAllReplacer*{etc. }{etc.\ }
+%% ... you can keep inter-sentence space after `etc.'
+%% by a code line break.---Now we use |\do| as a shorthand:
+\renewcommand*{\do}{\PrependExpandableAllReplacer*}
+\do{Cf. }{Cf.\ } %% 2011/01/12
+\do{cf. }{cf.\ } %% corr. 2010/03/23
+%% ... but think of `cf.~'. Don't leave `cf.' at code line end!
+\do{->}{$\to$} %% 2010/11/06
+\do{<-}{$\gets$} %% 2010/11/06
+% \PrependExpandableAllReplacer{...}{...}{$\dots$}
+%% Allow extra space at line end (bug fix `{}' 2011/12/03):
+\do{...}{\textellipsis\unkern{}}
+%% 2011/10/13: original `\dots' correct before punctuation:
+% \PrependExpandableAllReplacer{dots,}{...,}{\dots,}
+\do{...)}{\dots)} %% 2011/10/25
+\do{...:}{\dots:} %% 2012/11/07
+\do{... }{\textellipsis\unkern\ }
+\do{TODO}{\TODO{}}
+%% ... chain starts here, and here |\MakeDocCorrectHook|
+%% (silently) enters through a default variant
+%% |\SetCorrectHookJobLast| of |\SetCorrectHookJob{<id>}|:
+\SetCorrectHookJobLast
+%% |\ResetPatternCodes| resets `\PatternCodes' to their default
+%% value (which is `\fdPatternCodes'):
+\ResetPatternCodes
+%% ... restores 'fifinddo' default.
+\endinput
+
+HISTORY
+2009/04/05 with makedoc v0.2
+2010/03/11 broke some too long code lines
+2010/03/16 rendered `mdoccorr.cfg'
+2010/03/22 try \Prepend...
+2010/03/23 corrected `cf'
+2010/03/29 use \SetPatternCodes etc.
+2010/11/06 <- and ->
+2010/11/24 `...' ``symmetric variant" of `\textellipsis';
+ \StartPrependingChain, no more
+ \MakeExpandableAllreplacer
+2011/01/27 blue "TODO"
+2011/09/13 \providecommand for dialogues
+2011/10/13 \MDtwodots, without \PXAR, `...,' `...:'
+2011/10/25 \textellipsis\unkern from csquotes instead, `...)'
+2011/11/13 \PrependExpandableAllReplacer*
+2011/12/03 bug fix for 2011/10/25 at line ends
+2012/11/07 TODO -> \TODO{}
+2012/11/12 using \do
+2012/11/13 shorter code lines
diff --git a/macros/generic/catcodes/docsrc/srcfiles.tex b/macros/generic/catcodes/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..170e77c41d
--- /dev/null
+++ b/macros/generic/catcodes/docsrc/srcfiles.tex
@@ -0,0 +1,20 @@
+ \ProvidesFile{srcfiles.tex}[2015/11/14 file infos -> SrcFILEs.txt]
+%\ProvidesFile{srcfiles.tex}[2012/11/07 file infos -> SrcFILEs.txt]
+\RequirePackage[r,wrap]{nicefilelist}
+\RequirePackage{filedate}
+\MaxBaseEmptyList* %%% [readprov.sty,myfilist.sty]
+\ReadFileInfos{catcodes.RLS}
+%% packages:
+\ReadPackageInfos{actcodes,catchdq,stacklet}
+%% documentation:
+\ReadFileInfos{catcodes}
+%% documentation settings and auxiliaries:
+% \ReadPackageInfos{fifinddo,makedoc,niceverb}
+% \ReadFileInfos{makedoc.cfg,mdoccorr.cfg,srcfiles}
+% \ReadFileInfos{srcfiles}
+% \FileListRemark[ -- ]{---USED.---}
+\ReadFileInfos{makedoc.cfg,mdoccorr.cfg}
+\NoStopListInfos[SrcFILEs.txt]
+\EqualityMessages
+\input{fdatechk}
+\stop
diff --git a/macros/generic/catcodes/use/actcodes.sty b/macros/generic/catcodes/use/actcodes.sty
new file mode 100644
index 0000000000..f868dec158
--- /dev/null
+++ b/macros/generic/catcodes/use/actcodes.sty
@@ -0,0 +1,147 @@
+ \input plainpkg
+\ProvidesPackage{actcodes}[2012/11/07 v0.2a active characters (UL)]
+%%
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% There is NO WARRANTY (actually somewhat experimental).
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Purpose and Usage ==
+%% The package derives from switching category codes
+%% in the 'nicetext' and 'morehype' bundles and should
+%% improve them.
+%%
+%% === Installing and Calling ===
+%% The file `actcodes.sty' is provided ready,
+%% installation only requires
+%% putting it somewhere where \TeX\ finds it
+%% (which may need updating the filename data
+%% base).\urlfoot{ukfaqref}{inst-wlcf}
+%% However, the files `plainpkg.tex' and `stacklet.sty' %% stacklet 2012/09/19
+%% must be installed likewise.
+%%
+%% \emph{With} \LaTeX, the file should be loaded by `\RequirePackage{actcodes}'
+%% or `\usepackage{actcodes}'.
+%%
+%% \emph{Without} \LaTeX, load it by `\input actcodes.sty'.
+%%
+%% As explained in `plainpgk-doc.pdf', however, ``generic"
+%% packages based on 'plainpkg' should load 'actcodes' by
+%% `\RequirePackage{actcodes}'.
+%%
+%% === Commands and Syntax ===
+%% \label{sec:actcodes-cmds}
+%% 'actcodes.sty' provides \ |\MakeActive|, |\MakeActiveAss|,
+%% |\MakeActiveDef|, |\MakeActiveLet|,
+%% |\MakeOther|, |\MakeActiveOther| \ with rather obvious
+%% syntax---you find more detailed descriptions
+%% mixed with implementation below ... TODO
+%% ---Without \LaTeX, the latter's internal |\@gobble<arg>|
+%% is provided as well.
+%%
+%% == The Code ==
+%% === Our Private Letters ===
+\PushCatMakeLetterAt
+%%
+%% === The Core ===
+%% |\MakeActiveAss<ass-fun>\<char><ass-args>| ``activates" <char>
+%% and then applies assignment function <ass-fun> with arguments
+%% <ass-args> to it. The code derives from \LaTeX's
+%% `\@sverb' and `\do@noligs' and was also discussed
+%% on the \acro{LATEX-L} mailing list September 2010
+%% (Will Robertson; Heiko Oberdiek).
+%% The present definition generalizes
+%% `\MakeActiveDef' and `\MakeActiveLet' of my earlier packages.
+\gdef\MakeActiveAss#1#2{%
+ \MakeActive#2%
+ \begingroup \lccode`\~`#2\relax \lowercase{\endgroup #1~}}
+%% I was reluctant to provide |\MakeActive\<char>|,
+%% but with 'catchdq.sty', it would be better ... %% 2012/09/16
+\gdef\MakeActive#1{\catcode`#1\active}
+%% ... it just ``revives" the meaning that the corresponding
+%% active-character token last time ...
+%%
+%% === \cs{def} and \cs{let} ===
+%% |\MakeActiveDef\<char><parameters>{<replace>}|
+%% has been employed in 'fifinddo' and 'blog'
+%% (which is based on 'fifinddo') so far.
+\gdef\MakeActiveDef{\MakeActiveAss\def}
+%% W.r.t.\ the definition of this `\MakeActiveDef',
+%% Heiko Oberdiek remarked that it allows \emph{macro parameters},
+%% as opposed to my earlier definition in 'fifinddo'.
+%% Without parameters, this kind of macro has been used for
+%% conversion of text encodings ('atari.fdf',
+%% and I thought this was the idea of \ctanpkgref{stringenc} ...).
+%%
+%% |\MakeActiveLet\<char><cmd>| has been provided in 'niceverb' so far.
+%% The present package has been made in order to have
+%% `\MakeActiveLet' with 'blog.sty' as well, it was too annoying
+%% to use `\MakeActiveDef' there so often.
+\gdef\MakeActiveLet{\MakeActiveAss\let}
+%%
+%% === Switching Back \textellipsis ===
+%% Sometimes, the ``active" behaviour of <char> is too difficult,
+%% and you may want to switch bach to its ``simple" way ...
+%% This may work by |\MakeOther\<char>| ...
+%% with \LaTeX, `\MakeOther' just is `\@makeother' ...
+\ifltx \global\let\MakeOther\@makeother
+\else \gdef\MakeOther#1{\catcode`#112\relax}
+\fi
+%% But within a macro (or other) argument, you can't change the `\catcode'.
+%% (I~lost some time by not realizing that it was within a large argument
+%% where I tried to switch the `\catcode'.)
+%% Anyway or in certain cases, it may be better to keep a character
+%% ``active" throughout a document and just to change the \emph{expansion}
+%% of the ``active-character token." This can be done with
+%% `\MakeActiveLet' and `\MakeActiveDef' in certain cases already.
+%% E.g., when the \emph{``blank space"} has been ``activated" by
+%% `\obeylines', `\MakeActiveLet\ \space' ``undoes" this half-way,
+%% while it does not restore ``argument skipping" and
+%% ``compressing blank spaces."
+%%
+%% When character <char> should be ``active" for some time,
+%% but for certain moments you prefer that it behaves like an
+%% ``other character", you can switch to its ``other" expansion by
+%% |\MakeActiveOther\<char>|:
+\gdef\MakeActiveOther#1{%
+ \MakeActiveAss\edef#1{\expandafter\@gobble\string#1}}
+%% `\MakeActiveOther' uses \LaTeX's |\@gobble<arg>|,
+%% \emph{without} \LaTeX, 'actcodes' provides it:
+\ifltx\else \long\gdef\@gobble#1{} \fi
+% \show_ \MakeActiveOther\_ \show_ \expandafter\show_
+%% I am \emph{not} providing a version \emph{without}
+%% the `\catcode' change, although the latter is superfluous here
+%% TODO ...
+%%
+%% `niceverb' also provides |\MakeNormal\<char>|, it may migrate %% |...| 2012/11/07
+%% to here in the future, and there may be |\MakeActiveNormal\<char>|
+%% extending the above `\MakeActiveOther' TODO ...
+%%
+%% Also, a \emph{stack} might be used as in 'stacklet',
+%% even to switch \emph{meanings} of active-character tokens ...
+%% not sure TODO ...
+%%
+%% \ctanpkgref{babel} does similar things, but I never have ... TODO
+%%
+%% === Leaving and Version History ===
+\PopLetterCatAt
+\endinput
+%%
+%% VERSION HISTORY
+
+v0.1 2012/08/26 started, almost completed
+ 2012/08/27 completed; realizing \Push...At ..., bug fixes
+v0.2 2012/08/28 \global\let, \def -> \gdef
+ 2012/09/16 \MakeActive
+ 2012/09/19 doc.: stacklet
+v0.2a 2012/11/07 doc.: |...| on \MakeNormal
diff --git a/macros/generic/catcodes/use/catchdq.sty b/macros/generic/catcodes/use/catchdq.sty
new file mode 100644
index 0000000000..4004ca7cd2
--- /dev/null
+++ b/macros/generic/catcodes/use/catchdq.sty
@@ -0,0 +1,142 @@
+ \input plainpkg
+\ProvidesPackage{catchdq}[2015/05/22 v0.21 typographic dqs (UL)]
+%% %% rm. "simple" -- too long -- 2015/05/22
+%%
+%% Copyright (C) 2012 2015 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% There is NO WARRANTY (actually somewhat experimental).
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Purpose and Usage ==
+%%
+%% === Installing and Calling ===
+%% The file `catchdq.sty' is provided ready,
+%% installation only requires
+%% putting it somewhere where \TeX\ finds it
+%% (which may need updating the filename data
+%% base).\urlfoot{ukfaqref}{inst-wlcf}
+%% However, the files `plainpkg.tex' and `stacklet.sty' %% stacklet 2012/09/19
+%% must be installed likewise.
+%%
+%% \emph{With} \LaTeX, the file should be loaded by `\RequirePackage{catchdq}'
+%% or `\usepackage{catchdq}'.
+%%
+%% \emph{Without} \LaTeX, load it by `\input catchdq.sty'.
+%%
+%% As explained in `plainpgk-doc.pdf', however, ``generic"
+%% packages based on 'plainpkg' should load 'catchdq' by
+%% `\RequirePackage{catchdq}'.
+%%
+%% === Commands and Syntax ===
+%% \label{sec:catchdq-cmds}
+%% 'catchdq.sty' (indirectly) allows using |"<no-dqs>"|
+%% for surrounding <no-dqs> with typographical quotation marks,
+%% using that double quote |"| as an active character.
+%% As rendering that `"' active during defining macros can
+%% corrupt the latter, the user (or package writer) must
+%% activate that `"' explicitly by |\catchdqs|.
+%%
+%% Further difficulties may arise after `\catchdqs',
+%% various ways to get around them are described in the remaing sections.
+%%
+%% == The Code ==
+%% === Required ===
+%% The package is an application (of ideas of) 'actcodes.sty':
+\RequirePackage{actcodes}
+%%
+%% === The Core: \cs{catchdq} ===
+%% % \label{sec:catchdq-core}
+%% |\catchdq<no-dqs>"| will expand to |\dqtd{<no-dqs>}|,
+%% provided the \acro{ASCII} double quote is an active character:
+{\MakeActive\"\gdef\catchdq#1"{\dqtd{#1}}}
+%%
+%% === What Double Quotes Actually Are ===
+%% |\dqtd| in turn is a kind of ``variable." 'blog.sty' offered
+%% |\endqtd| for English typographical double quotes,
+%% |\dedqtd| for German ones, and |\asciidqtd| for ``non-typographical"
+%% double quotes (as needed for \acro{XML} attributes).
+%% |\asciidq| accesses a single \acro{ASCII} double quote,
+%% |\enldq| a single English typographical left one,
+%% |\enrdq| a single English typographical right one.
+%% (It may be useful to access them indepentently of each other,
+%% in certain complex situations ...)
+%% 'blog.sty', dealing with \acro{HTML}, of course has different ideas
+%% about them TODO.
+\gdef\asciidq{"}
+\gdef\asciidqtd#1{"#1"}
+%% We allow loading 'catchdq' \emph{after} another package
+%% (such as 'blog.sty') has chosen meanings for `\endqtd' and the
+%% like. Before v0.21, definedness was tested by
+%% `\ifx'...`\undefined', which two times fell
+%% prey to some earlier `\@ifundefined'. So now:
+\begingroup \escapechar=-1
+\def\provass#1#2#3{%
+ \expandafter\ifx\csname \string#2\endcsname\relax #1#2#3\fi}
+\provass \gdef \enldq {{``}}
+\provass {\global\let} \enrdq \asciidq
+\provass \gdef \endqtd {#1{\enldq#1\enrdq}}
+%% Typographical alternatives to `\endqtd' may be obtained
+%% from \ctanpkgstyref{ngerman} or so, if you are smart ...
+%% %% <- 2012/09/20 ->
+%% (see Section~\ref{sec:sw} for how it works):
+\provass \gdef \dedqtd {#1{\glqq#1\grqq}}
+%% 'blog.sty', dealing with \acro{HTML}, had a different idea
+%% about `\endqtd' of course. It has also used the mechanism of
+%% the \ctanpkgref{langcode} package that allows using `\dqtd' and other
+%% language-depended constructs with an ``implicit" choice according
+%% to the ``current language code," which should appear soon.
+%%
+%% === Switching ===
+%% \label{sec:sw}
+%% 'blog.sty' usually does a single switch which gets a new name now:
+%% |\catchdqs|.
+\gdef\catchdqs{\MakeActiveLet\"\catchdq}
+%% After this, |"<no-dqs>"| will expand to `\dqtd{#1}'.
+%% The default expansion for |\dqtd| will be |\endqtd|:
+\provass {\global\let} \dqtd \endqtd
+%% Might be done by |\endqs|---when there are alternatives,
+%% but 'blog.sty' and 'langcode.sty' do this in a different way ... TODO
+% \gdef\endqs{\let\dqtd\endqtd}
+% \ifx\dqtd\undefined \global\endqs \fi
+\endgroup
+%% \catchdqs Actually, here is a little "Tessst"~...
+%% \let\dqtd\dedqtd \ and here with "doytshe doppleta unf..." $\dots$ \
+%% %% anf -> unf 2015/05/22
+%% The latter has been achieved by
+%% \[`\usepackage{ngerman} \originalTeX'\]
+%% \MakeOther\"
+%%
+%% |\MakeOther\"| may switch off catching mode (---done just before,
+%% as \ctanpkgref{niceverb} at present doesn't render it verbatim).
+%% 'actcodes' suggests
+%% a different way to return from the `\catchdqs' state:
+%% Let the character active and change its meaning only, let it
+%% \emph{expand} to its ``other" version---by |\activeasciidqs|?
+%% |\MakeActiveOther\"| and \catchdqs
+%% \let"\asciidq
+%% |\let"\asciidq| (it works!) or |\MakeActiveLet\"\asciidq|
+%% (abbreviate as `\activeasciidqs'?) ... In 'blog.sty', there never
+%% was a need for switching back. We must rework interaction with
+%% 'niceverb' and can perhaps simplify the latter, ... TODO
+%%
+%% === Leaving and Version History ===
+\endinput
+%%
+%% VERSION HISTORY
+
+v0.1 2010/11/13 in texblog.fdf
+v0.2 2012/09/17 own file, new ideas ...
+ 2012/09/19 doc: stacklet
+ 2012/09/20 \dedqtd conditionally; reworked doc.,
+ tested ngerman.sty
+v0.21 2015/05/22 better test for undefinedness
diff --git a/macros/generic/catcodes/use/stacklet.sty b/macros/generic/catcodes/use/stacklet.sty
new file mode 100644
index 0000000000..b2f3ee4cf6
--- /dev/null
+++ b/macros/generic/catcodes/use/stacklet.sty
@@ -0,0 +1,123 @@
+ \input plainpkg
+\ProvidesPackage{stacklet}[2012/11/07 v0.3a private letters (UL)]
+%%
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% There is NO WARRANTY (actually somewhat experimental).
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Usage ==
+%% === Installing and Calling ===
+%% The file `stacklet.sty' is provided ready,
+%% installation only requires
+%% putting it somewhere where \TeX\ finds it
+%% (which may need updating the filename data
+%% base).\urlfoot{ukfaqref}{inst-wlcf}
+%% However, the file `plainpkg.tex' must be installed likewise.
+%%
+%% \emph{With} \LaTeX, the file should be loaded by `\RequirePackage{stacklet}'
+%% or `\usepackage{stacklet}'.
+%%
+%% \emph{Without} \LaTeX, both `\input stacklet.sty' and
+%% `\input plainpkg' load `stacklet.sty'.
+%%
+%% \filbreak %% 2012/11/07
+%% === Commands and Syntax ===
+%% \label{sec:stacklet-cmds}
+%% 'stacklet.sty' provides
+%% \[|\PushCatMakeLetter\<char>|
+%% \quad \textit{and}\quad
+%% |\PopLetterCat\<char>|\]
+%% for getting ``private letters" and giving them back
+%% their previous category code
+%% in package files with or without \LaTeX.
+%% As \LaTeX\ has its own stack for `@', there are also
+%% \[|\PushCatMakeLetterAt|
+%% \quad \textit{and}\quad
+%% |\PopLetterCatAt|\]
+%% that care for `@''s category code \emph{without} \LaTeX\ only.
+%%
+%% == The Code ==
+%% === Name Space ===
+%% Each ``private letter" <char> gets its own stack,
+%% in some name space, determined by |\cat_stack|
+%% (`\withcsname' is from 'plainpkg.tex'):
+\withcsname\xdef cat_stack\endcsname{%
+ \noexpand\string \withcsname\noexpand cat_stack\endcsname
+ \noexpand\string}
+%% I.e., ?`cat_stack' will expand to
+%% \[?`string'\,?`cat_stack'\,?`string'\]
+%% in the notation of the \ctanpkgref{dowith} package
+%% documentation. %% 2012/11/06
+% \withcsname\show cat_stack\endcsname
+%%
+%% === Pushing ===
+%% |\PushCatMakeLetter\<char>| ...
+\xdef\PushCatMakeLetter#1{%
+ \noexpand\withcsname
+ \withcsname\noexpand pushcat_makeletter\endcsname
+ \withcsname\noexpand cat_stack\endcsname#1\endcsname#1}
+% \show\PushCatMakeLetter
+\withcsname\gdef pushcat_makeletter\endcsname#1#2{%
+%% #1 is the stack token, #2 is the ``quoted" character. Pushing~...
+ \xdef#1{\the\catcode`#2\relax%
+%% ... the new entry. `\relax' separates entries,
+%% braces instead tend to get lost in popping ...
+%% If the stack has existed before,
+%% its previous content is appended:
+ \ifx#1\relax \else #1\fi}%
+%% I thought of storing `\catcode's hexadecimally (without braces)
+%% using \LaTeX's `\hexnumber', but the latter has so many tokens~...
+%% Finally rendering <char> a ``letter":
+ \catcode`#211\relax}
+%% Now we can use a ``private letter stack" for our own package:
+\PushCatMakeLetter\_
+%%
+%% === Popping ===
+%% |\PopLetterCat\<char>| passes `\<char>', the corresponding
+%% stack token, and the latter's expansion to `\popcat_'.
+%% `\end' serves as argument delimiter for the end of the stack only:
+\gdef\PopLetterCat#1{%
+ \expandafter\expandafter\expandafter
+ \popcat_\csname\cat_stack#1\expandafter\endcsname
+ \expandafter \end \csname\cat_stack#1\endcsname#1}
+%% `\popcat_' parses the expansion, assigns the old
+%% category code and and stores the reduced stack:
+\gdef\popcat_#1\relax#2\end#3#4{\catcode`#4#1\gdef#3{#2}}
+%% ... check existence? TODO
+%%
+%% === No `@' Stack with \LaTeX ===
+%% |\PushCatMakeLetterAt| is like `\PushCatMakeLetter\@'
+%% except that it has no effect under \LaTeX:
+\gdef\PushCatMakeLetterAt{\ifltx\else\PushCatMakeLetter\@\fi}
+%% |\PopLetterCatAt| by analogy ...
+\gdef\PopLetterCatAt{\ifltx\else\PopLetterCat\@\fi}
+%%
+%% === Leaving the Package File ===
+%% ... in our new way:
+\PopLetterCat\_
+\endinput
+%%
+%% === VERSION HISTORY ===
+
+v0.1 2012/08/24 started
+ 2012/08/25 completed
+ 2012/08/26 extending doc.; \def\withcsname removed
+v0.2 2012/08/26 \with_catstack containing \endcsname and with
+ three popping macros replaced by \csname
+ content \cat_stack, cf. memory.tex;
+ restructured
+ 2012/08/27 \PushCatMakeLetterAt fixed
+v0.3 2012/08/27 def.s global
+v0.3a 2012/11/06 doc.: "documentation"
+ 2012/11/07 \filbreak
diff --git a/macros/generic/chemfig/README b/macros/generic/chemfig/README
new file mode 100644
index 0000000000..03bea23c3e
--- /dev/null
+++ b/macros/generic/chemfig/README
@@ -0,0 +1,32 @@
+___________________________________
+
+ The
+ Chemfig package
+ v1.41
+
+ 2019/05/21
+___________________________________
+
+Maintainer: Christian Tellechea
+E-mail : unbonpetit@netc.fr
+ Comments, bug reports and suggestions are welcome.
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+This package provides the \chemfig{<code>} command which draws the 2D
+representation of a chemical molecule. The <code> describes the
+drawing using an easy, flexible and intuitive syntax.
+
+The drawing is made with the tikz package. Therefore, Chemfig works
+in dvi or pdf mode.
+
+----------------------------------------------------------------------
+
+Cette extension fournit la commande \chemfig{<code>} qui dessine la
+repr\'esentation en 2D d'une mol\'ecule chimique. Le <code> d\'ecrit
+le dessin selon une syntaxe simple, souple et intuitive.
+
+Le dessin est fait avec l'extension tikz. ChemFig fonctionne donc en
+mode dvi ou pdf.
diff --git a/macros/generic/chemfig/chemfig-en.pdf b/macros/generic/chemfig/chemfig-en.pdf
new file mode 100644
index 0000000000..be0feb42f6
--- /dev/null
+++ b/macros/generic/chemfig/chemfig-en.pdf
Binary files differ
diff --git a/macros/generic/chemfig/chemfig-en.tex b/macros/generic/chemfig/chemfig-en.tex
new file mode 100644
index 0000000000..5b247b3c09
--- /dev/null
+++ b/macros/generic/chemfig/chemfig-en.tex
@@ -0,0 +1,2842 @@
+\documentclass[10pt]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper,margin=2.5cm,head=17pt,headsep=3mm,footskip=10mm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,amsmath,array,longtable,xspace,fancybox,boites,textcomp,enumitem,chemfig,fancyhdr}
+\usepackage[scaled=0.8]{luximono}
+\usetikzlibrary{decorations.pathmorphing}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{matrix}
+\usepackage[protrusion=true,expansion,final,babel=true]{microtype}
+\fancypagestyle{plain}{%
+ \fancyhead[L]{}
+ \fancyhead[C]{}
+ \fancyhead[R]{}
+ \fancyfoot[l]{\tiny Compiled the \today.}
+ \fancyfoot[c]{}
+ \fancyfoot[r]{\thepage}}
+\renewcommand\headrulewidth{0pt}
+
+\makeatletter
+\newcommand\make@car@active[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~}%
+}
+
+\newif\if@exstar
+
+\newcommand\exemple{%
+ \begingroup
+ \parskip\z@
+ \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+ \@ifstar{\@exstartrue\exemple@}{\@exstarfalse\exemple@}}
+
+\newcommand\exemple@[2][65]{%
+ \medbreak\noindent
+ \begingroup
+ \let\do\@makeother\dospecials
+ \make@car@active\ { {}}%
+ \make@car@active\^^M{\par\leavevmode}%
+ \make@car@active\^^I{\space\space}%
+ \make@car@active\,{\leavevmode\kern\z@\string,}%
+ \make@car@active\-{\leavevmode\kern\z@\string-}%
+ \make@car@active\>{\leavevmode\kern\z@\string>}%
+ \make@car@active\<{\leavevmode\kern\z@\string<}%
+ \exemple@@{#1}{#2}%
+}
+
+\newcommand\exemple@@[3]{%
+ \def\@tempa##1#3{\exemple@@@{#1}{#2}{##1}}%
+ \@tempa
+}
+
+\newcommand\exemple@@@[3]{%
+ \xdef\the@code{#3}%
+ \endgroup
+ \if@exstar
+ \begingroup
+ \fboxrule0.4pt
+ \let\breakboxparindent\z@
+ \def\bkvz@bottom{\hrule\@height\fboxrule}%
+ \let\bkvz@before@breakbox\relax
+ \def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep}%
+ \def\bkvz@left{\vrule\@width\fboxrule\hskip\fboxsep}%
+ \def\bkvz@right{\hskip\fboxsep\vrule\@width\fboxrule}%
+ \def\bkvz@top{\hbox to \hsize{%
+ \vrule\@width\fboxrule\@height\fboxrule
+ \leaders\bkvz@bottom\hfill
+ \sffamily
+ \fboxsep\z@
+ \colorbox{black}{\kern0.25em\color{white}\footnotesize\lower0.5ex\hbox{\strut#2}\kern0.25em}%
+ \leaders\bkvz@bottom\hfill
+ \vrule\@width\fboxrule\@height\fboxrule}}%
+ \breakbox
+ \kern.5ex\relax
+ \ttfamily\footnotesize\the@code\par
+ \normalfont
+ \kern3pt
+ \hrule height0.1pt width\linewidth depth0.1pt
+ \vskip5pt
+ \rightskip0pt plus 1fill
+ \everypar{{\color{lightgray}\rlap{\vrule height0.1pt width\linewidth depth0.1pt}}\hskip0pt plus 1fill}%
+ \newlinechar`\^^M\everyeof{\noexpand}\scantokens{#3}\par
+ \endbreakbox
+ \endgroup
+ \else
+ \vskip0.5ex
+ \boxput*(0,1)
+ {\fboxsep\z@
+ \hbox{\sffamily\colorbox{black}{\leavevmode\kern0.25em{\color{white}\footnotesize\strut#2}\kern0.25em}}%
+ }%
+ {\fboxsep5pt
+ \fbox{%
+ $\vcenter{\hsize\dimexpr0.#1\linewidth-\fboxsep-\fboxrule\relax
+ \kern5pt\parskip0pt \ttfamily\footnotesize\the@code}%
+ \vcenter{\kern5pt\hsize\dimexpr\linewidth-0.#1\linewidth-\fboxsep-\fboxrule\relax
+ \everypar{{\color{lightgray}\rlap{\vrule height0.1pt width\dimexpr\linewidth-0.#1\linewidth-\fboxsep-\fboxrule depth0.1pt}}}%
+ \footnotesize\newlinechar`\^^M\everyeof{\noexpand}\scantokens{#3}}$%
+ }%
+ }%
+ \fi
+ \medbreak
+ \endgroup
+}
+
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\Verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+
+\newcommand\falseverb[1]{{\ttfamily\detokenize\expandafter{\string#1}}}
+
+\def\CFengdate@i#1/#2/#3\@nil{\number#3\relax\ifnum#3=1 \ier{}\fi\space \ifcase#2 \or january\or february\or march\or april\or may\or june\or july\or august\or september\or october\or november\or december\fi\space#1}
+\edef\CFengdate{\expandafter\CFengdate@i\CFdate\@nil}
+
+\DeclareRobustCommand\CF{%
+ \textsf{%
+ chem%
+ \if\string b\detokenize\expandafter{\f@series}%
+ \lower0.01em\hbox{\itshape f}\kern-0.06em
+ \else
+ \lower0.045em\hbox{\kern-0.05em \itshape f}\kern0.026em
+ \fi ig%
+ }%
+ \xspace
+}
+\makeatother
+
+\usepackage[english]{babel}
+\def\degres{\ensuremath{{}^\circ}}
+\newcommand\TIKZ{ti\textit kz\xspace}
+\newcommand\molht[1]{\begingroup\parskip3.5pt\par\hfill\chemfig{#1}\hfill\null\par\endgroup}
+\newcommand\boxednode[2]{\fbox{$\mathrm{#1}\vphantom{M_1}$}_{#2}}
+\newcommand\boxedfalseverb[1]{{\fboxsep0pt\fbox{\vphantom|\falseverb{#1}}}}
+\newcommand*\chevrons[1]{\textlangle\textit{#1}\textrangle}
+\newcommand*\CFkey[1]{{\color{teal}\texttt{\detokenize{#1}}}}
+\newcommand*\CFval[1]{{\color{teal}\textlangle\textit{#1}\textrangle}}
+\newcommand*\CFkv[2]{\CFkey{#1}{\color{teal}${}={}$}\CFval{#2}}
+\newcommand*\CFparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}\relax \textlangle\textit{empty}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}}\fi\\}
+\newcommand*\CFdelimparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}}\fi}
+
+\usepackage[plainpages=false,pdfpagelabels,bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=magenta,pdfauthor={Christian TELLECHEA},pdftitle={ChemFig},pdfsubject={Draw 2D molecule with LaTeX},pdfkeywords={ChemFig},pdfcreator={LaTeX}]{hyperref}
+
+\csname @addtoreset\endcsname{section}{part}
+\usepackage{titlesec}
+\titleformat{\part}[display]{\normalfont\filcenter\sffamily\bfseries}{}{0pt}{\Huge}
+
+\begin{document}
+\topsep=3pt plus5pt minus2pt\relax
+\begin{titlepage}
+ \catcode`!12
+ \begin{tikzpicture}[remember picture,overlay]
+ \shade [left color=blue,right color=white]([yshift=2cm]current page.west) rectangle ([xshift=-1cm]current page.south);
+ \shade [left color=white,right color=blue] ([xshift=1cm]current page.south) rectangle ([yshift=2cm]current page.east);
+ \filldraw[black](current page.north west) rectangle ([yshift=7cm]current page.east);
+ \shade[top color=black,bottom color=blue]([yshift=7cm]current page.east)rectangle([yshift=2.5cm]current page.west);
+ \filldraw[black!55!blue!100]([yshift=2.5cm]current page.east)rectangle([yshift=2cm]current page.west);
+ \end{tikzpicture}
+ \begin{center}
+ \color{white}\sffamily\fontsize{50pt}{50pt}\selectfont\CF\par
+ \Large v\CFver\par
+ \CFengdate\par\bigbreak
+ \normalsize Christian Tellechea\smallbreak
+ \href{mailto:unbonpetit@netc.fr}{\texttt{unbonpetit@netc.fr}}\par\vskip1.5cm
+ \huge A \TeX{} package for drawing molecules%
+ \end{center}
+ \vskip4cm
+ \begin{center}
+ \scriptsize
+ \setchemfig{atom sep=3em}%
+ \chemfig{-[::-30](-[5])(-[7])-[::+60]-[::-60]O-[::+60](=[::-45]O)-[::+90]HN>:[::-60](-[::+60]**6(------))-[::-30](<:[2]OH)-[::-60](=[6]O)-[::+60]O>:[::-60]*7(---?(<[::-120]OH)-(<|[1]CH_3)(<:[::-90]CH_3)-(-[1](<[::+80]HO)-[0](=[::+60]O)-[7](<|[::+130]CH_3)(-[::+75](<|[2]OH)-[::-60]-[::-60](<[::+30]O-[::-90])-[::-60](<[::+90])(<:[::+30]O-[7](-[6]CH_3)=[0]O)-[::-60])-[6]-[5,1.3]?(<:[7]O-[5](=[::-60]O)-[6]**6(------)))=(-[2]CH_3)-)}%
+ \par
+ {\sffamily\small Taxotere}%
+ \end{center}
+ \vskip1.5cm
+ \hfill
+ \hbox to 0pt{\hss\scriptsize
+ \setchemfig{bond offset=1pt,atom sep=2.5em,compound sep=5em,arrow offset=6pt}
+ \schemestart
+ \chemfig{(-[:-150]R')(-[:-30]R)=[2]N-[:30]OH}
+ \arrow{<=>[\chemfig{H^\oplus}]}
+ \chemfig{(-[@{a0}:-150]R')(-[:-30]R)=[2]@{a1}N-[@{b0}:30]@{b1}\chemabove{O}{\scriptstyle\oplus}H_2}
+ \chemmove[red,-stealth,red,shorten <=2pt]{
+ \draw(a0)..controls +(135:2mm) and +(215:4mm).. (a1);
+ \draw(b0)..controls +(120:2mm) and +(180:3mm).. ([yshift=7pt]b1.180);}
+ \arrow{<=>[\chemfig{{-}H_2O}]}[,1.1]
+ \chemleft[{\subscheme[90]{%
+ \chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
+ \arrow{<->}[,0.75]
+ \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemmove[red,-stealth,red,shorten <=3pt]{
+ \draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-\chemabove{O}{\scriptstyle\oplus} H_2)}
+ \arrow{<=>[\chemfig{{-}H^\oplus}]}
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-OH)}
+ \arrow
+ \chemfig{*6(R\rlap{$'$}-\chembelow{N}{H}-(-R)(=[2]O))}
+ \schemestop\hss}\hfill\null
+ \begin{center}
+ \sffamily\small The Beckmann rearrangement%
+ \end{center}
+\end{titlepage}
+\parindent0pt\pagestyle{plain}
+\tableofcontents
+\parskip\medskipamount
+\newpage
+
+\setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt}
+\part{Introduction}
+\section{New in v1.4}
+\subsection{Primitive \texttt{\textbackslash expanded}}
+\fbox{\vbox{\hsize\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax\textbf{Important}: As of version 1.41, \CF requires a \TeX{} engine that provides the \texttt{\string\expanded} primitive. If this is not available, an error message will be issued and version 1.4 will be loaded (last version working without the primitive \texttt{\string\expanded}); it is strongly recommended that you update your \LaTeX{} distribution in order to take advantage of the newer \TeX{} engines that provide for the use of this new primitive.}}\medbreak
+
+\subsection{Position and rotation of delimiters}
+The new key \CFkey{h align} for delimiters allows, when set to \CFval{false}, to no longer automatically align delimiters horizontally. When the delimiters are no longer on the same horizontal, they can be rotated automatically by setting the key \CFkey{auto rotate} to \CFval{true}. You can override this automatic setting and choose the rotation angle with the key \CFkey{rotate}. See page~\pageref{polymerdelim}.
+
+\subsection{Private char}
+In the code of \CF, the character used in the name of private macros is "\verb|_|" (underscore) and no longer "\verb|@|" (arobe): the prefix of private macros of \CF is "\verb|\CF_|". The majority of \CF users should not be affected by this change, but the development or maintenance of specific codes such as those presented in the "Arrow customization" section on page~\pageref{definearrow} which uses private macros should take this catcode change into account; this will require an \emph{update of macros names} for those who have used private macros from \CF. To allow "\verb|_|" in macro names, we must execute the order "\verb|\catcode`\_=11|" and then, to return to a normal state run "\verb|\catcode`\_=8|".
+
+\subsection{Char \#}
+All those who program in \TeX{} know the extreme precautions that must be taken before using the "\verb|#|" character. This character is allowed in the code representing the molecule, but for internal operating reasons at \TeX, it will be doubled if the command \verb|\chemfig| is in the argument of a macro (like \verb|\fbox| in the example below). To avoid this doubling, we can write \verb|\#| or use the macro \verb|\CFhash|:
+
+\exemple{Char \#}/\setchemfig{atom sep=5em}\fboxsep=1pt
+1) \chemfig{A#-B_#-C^#}\par
+2) \fbox{\chemfig{A#-B_#-C^#}}\par
+3) \fbox{\chemfig{A\#-B_\#-C^\#}}\par
+4) \fbox{\chemfig{A\CFhash-B_\CFhash-C^\CFhash}}/
+
+For the macro \verb|\definesubmol|, the character \verb|#| is also allowed, but its use is more complex because it covers several cases that are examined on page~\pageref{definesubmol}.
+
+\subsection{Old macros and new syntax}
+Macros previously used to set the parameters of \CF are abandoned, are no longer defined and therefore, \emph{will result in a compilation error} if they are executed:
+\begin{center}
+ \begin{tabular}{*3l}
+ \verb-\setcrambond-&\verb-\setatomsep-&\verb-\enablefixedbondlength-\\
+ \verb-\disablefixedbondlength-&\verb-\setbondoffset-&\verb-\setdoublesep-\\
+ \verb-\setangleincrement-&\verb-\setnodestyle-&\verb-\setbondstyle-\\
+ \verb-\setlewis-&\verb-\setlewisdist-&\verb-\setstacksep-\\
+ \verb-\setcompoundstyle-&\verb-\setarrowdefault-&\verb-\setandsign-\\
+ \verb-\setarrowoffset-&\verb-\setcompoundsep-&\verb-\setarrowlabelsep-\\
+ \verb-\enablebondjoin-&\verb-\disablebondjoin-&\verb-\schemedebug-
+ \end{tabular}
+ \end{center}
+Now, to set the parameters of \CF we have the choice:
+\begin{itemize}
+ \item the macro \Verb|\setchemfig{<keys>=<values>}| sets the parameters according to the key/value method for the rest of the document;
+ \item the macro \Verb|\chemfig[<keys>=<values>]| receives in its optional argument the parameters valid only for this molecule;
+ \item the macro \verb|\resetchemfig| restores the parameters to their default values.
+\end{itemize}
+
+The complete list of parameters and their default values is shown page~\pageref{listeparametres}.
+
+Starred syntax \verb|\chemfig*| is no longer allowed. To specify a constant length of bonds, use the key \CFkey{fixed length} and set it to \CFval{true}, see page~\pageref{longueur.liaison}.
+
+\subsection{Macros \texttt{\textbackslash lewis} and \texttt{\textbackslash Lewis}}
+These two macros also have a slight syntax change. Their optional argument between brackets is no longer intended to receive the diagonal spacing coefficient, but \Verb|<<key>=values>| so that the parameters can be set for each macro call. See page~\pageref{lewis}.
+
+\section{Presenting \protect\CF}
+To use this package, start by adding the following code to the preamble:
+\begin{itemize}
+ \item {\color{blue}\verb-\input chemfig.tex-} with $\varepsilon$\TeX;
+ \item {\color{blue}\verb-\usepackage{chemfig}-} with \LaTeX;
+ \item {\color{blue}\verb-\usemodule[chemfig]-} with Con\TeX t\falseverb*{ConTeXt@Con\protect\TeX{}t}.
+\end{itemize}
+
+In all cases, the \TIKZ package, if not loaded before, is loaded by \CF.
+
+The most important command for drawing molecules is \Verb|\chemfig{<code>}|. The argument \verb|code| is a set of characters describing the structure of the molecule according to the rules which are described in this manual.
+
+Care has been taken to make it possible to draw the greatest possible number of molecular configurations, while maintaining a simple, flexible, and intuitive syntax. Despite this, the \Verb-<code>- which describes the 2D structure of the molecule increases in complexity in proportion to that of the molecule being drawn.
+
+The command \verb|\chemfig| draws a molecule using the commands provided by the \TIKZ package, placed inside a \verb|tikzpicture| environment. The choice of \TIKZ implies that:
+\begin{itemize}
+\item the user has a choice of compilation method: pdf\LaTeX{} can be used equally well in \falseverb{dvi mode} (tex $\longrightarrow$ dvi $\longrightarrow$ ps $\longrightarrow$ pdf) or in \falseverb{pdf mode} (tex $\longrightarrow$ pdf). In effect \TIKZ, via the underlying \falseverb{pgf}, gives identical graphical results in the two modes;
+\item the \falseverb{bounding box} is automatically calculated by \TIKZ and the user need not worry about any overlap with the text. However, care must be taken with alignment when the molecule is drawn in a paragraph. In the following example, we have drawn the \falseverb{bounding box} for the molecule: {\fboxsep0pt \fbox{\chemfig{H_3C-C(-[:-30]OH)=[:30]O}}}.
+\end{itemize}
+
+\section{Acknowledgment}
+This package has seen the light of day thanks to the assistance of Christophe \textsc{Casseau}, who had the idea. I thank him for his help before writing the code and for the tests he carried out.
+\medbreak
+I also want to warmly thank Theo \textsc{Hopman} for offering to translate this manual into English.
+\newpage
+
+\part{Operation of \protect\CF}
+This part is devoted to describing the most common features of \CF. The user will find here explanations sufficient to draw most molecules. The presentation of features is done from a theoretical angle, and the goal of this part is not to draw real molecules but to give the user a formal description of the functionality of \CF. The ``Advanced usage'', page~\pageref{utilisation.avancee}, will be more practical and will illustrate advanced features for the most demanding uses. It will also highlight methods of building real molecules, page~\pageref{exemples.commentes}. Finally, the last part will give examples of molecules and the code used to draw them.
+
+\section{The \texttt{\textbackslash chemfig} macro}
+The macro \verb|\chemfig| has the following syntax
+\begin{center}
+ \Verb|\chemfig[list of <keys>=<values>]{<molecule code>}|
+\end{center}
+The optional argument in square brackets sets the parameters used for this molecule. It should be noted that the parameters are only modified for the current molecule and will be restored to their previous values after the macro has been executed. To permanently modify parameters, the macro \Verb|\setchemfig{<key>=<values>}| should be used.
+
+Here is the complete list of parameters as well as their default values\label{listeparametres}. It should be noted that the \chevrons{keys} from \CFkey{scheme debug} included to the end of the list concern reaction schemes and make no sense in the optional argument of the macro \verb|\chefig| where they are simply ignored:\par
+\leavevmode\hfill
+\begin{minipage}[t]{.45\linewidth}
+ \begin{longtable}{rl}\hline
+ \chevrons{keys} & default \chevrons{values}\\\hline\endhead
+ \CFparam{chemfig style}
+ \CFparam{atom style}
+ \CFparam{bond join}
+ \CFparam{fixed length}
+ \CFparam{cram rectangle}
+ \CFparam{cram width}
+ \CFparam{cram dash width}
+ \CFparam{cram dash sep}
+ \CFparam{atom sep}
+ \CFparam{bond offset}
+ \CFparam{double bond sep}
+ \CFparam{angle increment}
+ \CFparam{node style}
+ \CFparam{bond style}
+ \CFparam{lewis | width}
+ \CFparam{lewis sep}
+ \CFparam{lewis length}
+ \CFparam{lewis style}
+ \CFparam{lewis dist}\hline
+ \end{longtable}
+\end{minipage}\hfill
+\begin{minipage}[t]{.45\linewidth}
+ \begin{longtable}{rl}\hline
+ \chevrons{clés} & \chevrons{valeurs} par défaut\\\hline\endhead
+ \CFparam{lewis radius}
+ \CFparam{lewis diag coeff}
+ \CFparam{cycle radius coeff}
+ \CFparam{stack sep}
+ \CFparam{scheme debug}
+ \CFparam{compound style}
+ \CFparam{compound sep}
+ \CFparam{arrow offset}
+ \CFparam{arrow angle}
+ \CFparam{arrow coeff}
+ \CFparam{arrow style}
+ \CFparam{arrow double sep}
+ \CFparam{arrow double coeff}
+ \CFparam{arrow double harpoon}
+ \CFparam{arrow label sep}
+ \CFparam{arrow head}
+ \CFparam{+ sep left}
+ \CFparam{+ sep right}
+ \CFparam{+ vshift}\hline
+ \end{longtable}
+\end{minipage}\hfill\null\bigbreak
+
+The \Verb|<molecule code>| contains instructions for drawing the molecule according to a syntax that will be explained in this document. There are no restrictions on the characters accepted in the code:
+\begin{itemize}
+ \item all catcode 11 or 12 characters, i. e. upper and lower-case letters, numbers, mathematical operators (\texttt+ \texttt- \texttt* \texttt/ \texttt=), punctuation marks whether active or not (\verb|.| \verb|,| \verb|;| \verb|:| \verb|!| \verb|?| \verb|'| \verb|`| \verb|"| \verb-|-), parenthesis and brackets;
+ \item more special characters such as "\verb|~|", "\verb|#|"\footnote{To avoid that \texttt\# is doubled when the macro \texttt{\textbackslash chemfig} is in the argument of a macro, instead of \texttt\#, the macro \texttt{\textbackslash\#} or the macro \texttt{\textbackslash CFhash} can be used.} as well as "\verb|^|" and "\verb|_|" which have their normal mathematical mode properties;
+ \item spaces, but these are ignored by default because the atoms are composed in mathematical mode;
+ \item the "\verb|{|" and "\verb|}|" braces that have their normal behavior as group markers or macro argument delimiters;
+ \item macros.
+\end{itemize}
+
+In any case, \CF will place \emph{on the current baseline the first atom encountered}, whether it is empty or not. In the examples in this document, the baseline is drawn in light grey.
+
+\section{Groups of atoms}
+Drawing a molecule consists inherently of connecting groups of atoms with lines. Thus, in the molecule \chemfig{O=O}, there are two groups of atoms, each consisting of a single atom ``O''.
+
+{\fboxsep1pt
+However, in this molecule
+\molht{H_3C-C(-[:-30]OH)=[:30]O}
+there are four groups of atoms: ``$\mathrm{H_3C}$'', ``C'', ``O'' and ``OH''. For reasons which we shall see later, \CF splits each group into single atoms. Each atom extends up to the next capital letter or one of these special characters: {\ttfamily \boxedfalseverb{-} \boxedfalseverb{=} \boxedfalseverb{~} \boxedfalseverb{(} \boxedfalseverb{!} \boxedfalseverb{*} \boxedfalseverb{<} \boxedfalseverb{>} \boxedfalseverb{@}}. \CF ignores all characters inside braces when splitting groups into atoms.
+
+Therefore the first group of atoms ``$\mathrm{H_3C}$'' is split into two atoms: $\boxednode{H_3}{}$ and $\boxednode C{}$. In terms of chemistry, of course, these are not real atoms; $\mathrm{H_3}$, for example, consists of three hydrogen atoms. In what follows the word atom refers to \CF's definition. Thus \CF sees the preceding molecule as follows:
+\renewcommand*\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\molht{H_3C-C(=[:30]O)(-[:-30]OH)}}
+
+A space is ignored when at the beginning of a group of atoms.
+
+\section{Different types of bonds}
+For \CF, bonds between two atoms are one of nine types, represented by the characters \boxedfalseverb-, \boxedfalseverb=, \boxedfalseverb~, \boxedfalseverb>, \boxedfalseverb<, \boxedfalseverb{>:}, \boxedfalseverb{<:}, \boxedfalseverb{>|} and \boxedfalseverb{<|} :\label{types.liaisons}
+\begin{center}
+\begin{tabular}{>{\centering\arraybackslash}m{1.7cm}>{\centering\arraybackslash}m{3cm}>{\centering\arraybackslash}m{2cm}m{4cm}}
+\hline
+Bond \#&Code &Result &Bond type\\\hline
+1 &\verb+\chemfig{A-B}+ &\chemfig{A-B} &Single\\
+2 &\verb+\chemfig{A=B}+ &\chemfig{A=B} &Double\\
+3 &\verb+\chemfig{A~B}+ &\chemfig{A~B} &Triple\\
+4 &\verb+\chemfig{A>B}+ &\chemfig{A>B} &right Cram, plain\\
+5 &\verb+\chemfig{A<B}+ &\chemfig{A<B} &left Cram, plain\\
+6 &\verb+\chemfig{A>:B}+&\chemfig{A>:B}&right Cram, dashed\\
+7 &\verb+\chemfig{A<:B}+&\chemfig{A<:B}&left Cram, dashed\\
+8 &\verb+\chemfig{A>|B}+&\chemfig{A>|B}&right Cram, hollow\\
+9 &\verb+\chemfig{A<|B}+&\chemfig{A<|B}&left Cram, hollow\\\hline
+\end{tabular}
+\end{center}
+\label{double bond sep}The \chevrons{key} \Verb-double bond sep=<dim>- adjusts the spacing between the lines in double or triple bonds. This spacing is 2pt by default.
+
+\label{longueur.liaison}We must understand that when a bond is made between two atoms, these atoms are contained within invisible rectangular boxes. The centers of these two rectangles are separated by an adjustable distance $\Delta$ called the ``interatomic distance''. Furthermore, bonds do not connect to the exact edges of the rectangles: a length $\delta$, also adjustable, separates the edges of the rectangles and the beginning and end of the bond line. The rectangular boxes are made visible in the diagram below to help understanding.
+\begin{center}
+\begin{tikzpicture}[every node/.style={anchor=base,inner sep=1.5pt,outer sep=0pt,minimum size=0pt},baseline]
+ \node[draw] at(0,0)(aa){\huge A};
+ \node[draw]at(4,0)(bb){\huge B};
+ \path[shorten <=10pt,shorten >=10pt,draw](aa)--(bb)coordinate[pos=0](al) coordinate[pos=1](bl);
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=10pt]al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(bl){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=-10pt]bl){};
+ \draw[blue,dash pattern=on 1pt off 1pt](bl)--([yshift=0.7cm]bl);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=-10pt]bl)--([xshift=-10pt,yshift=0.7cm]bl);
+ \draw[stealth-stealth]([yshift=0.6cm]bl.center)--([xshift=-10pt,yshift=0.6cm]bl.center) node [midway,above,draw=none]{$\delta$};
+ \draw[blue,dash pattern=on 1pt off 1pt](al)--([yshift=0.7cm]al);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=10pt]al)--([xshift=10pt,yshift=0.7cm]al);
+ \draw[stealth-stealth]([yshift=0.6cm]al.center)--([xshift=10pt,yshift=0.6cm]al.center) node [midway,above,draw=none]{$\delta$};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(aa){};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(bb){};
+ \draw[stealth-stealth]([yshift=1cm]aa.center)--([yshift=1cm]bb.center) node [midway,above,draw=none] {$\Delta$} ;
+ \draw[red,dash pattern=on 2pt off2pt](aa.center)--([yshift=1.1cm]aa.center);
+ \draw[red,dash pattern=on 2pt off2pt](bb.center)--([yshift=1.1cm]bb.center);
+\end{tikzpicture}
+\end{center}
+
+\label{atom sep}The \chevrons{key} \CFkv{atom sep}{dim} adjusts the interatomic distance $\Delta$. This setting, like all other settings, affects all the following molecules.
+
+\exemple{Interatomic distance}|\chemfig[atom sep=2em]{A-B}\par
+\chemfig[atom sep=50pt]{A-B}|
+
+\label{bond offset}The \chevrons{key} \CFkv{bond offset}{dim} sets the spacing $\delta$ between the bond line and the atom. Its default value is 2pt.
+\exemple{Trimming bonds}|\chemfig[bond offset=0pt]{A-B}\par
+\chemfig[bond offset=5pt]{A-B}|
+
+If one bond is followed immediately by another, then \CF inserts an empty group \verb-{}-. Around this empty group the separation $\delta$ is zero:
+\exemple{Empty groups}/\chemfig{A-B=-=C}/
+
+\label{bond style}The \chevrons{key} \CFkv{bond style}{tikz code} sets the style for all the bonds drawn thereafter. The \CFval{tikz code} is empty by default. To custom a single bond, see page~\pageref{perso-liaisons}.
+\exemple{Style of bonds}/\chemfig[bond style={line width=1pt,red}]{A-B=C>|D<E>:F}/
+
+\label{modif.retrait} The spacing $\delta$ for just one bond can be specified with the character \verb-#-. This character must be placed \emph{immediately} after the bond symbol and has one required argument between parentheses of the form ``\Verb-#(<dim1>,<dim2>)-'', where \Verb-<dim1>- is the spacing $\delta$ at the beginning of the bond and \Verb-<dim2>- is the that at the end. If \Verb-<dim2>- is omitted, the spacing at the end of the bond takes the value of $\delta$ in effect at that time. One can see in the example how the shortening, set to 4pt to be more visible, is nullified for the bond arriving at ``B'', then for the one leaving ``B'', and finally for both:
+\begingroup
+\catcode`\#12
+\exemple{Fine adjustment of bond shortening}/\setchemfig{bond offset=4pt}
+\chemfig{A-B-C}\par
+\chemfig{A-#(,0pt)B-C}\par
+\chemfig{A-B-#(0pt)C}\par
+\chemfig{A-#(,0pt)B-#(0pt)C}/
+\endgroup
+
+By default, all atoms within groups of atoms are typeset in \falseverb{math mode} (spaces are ignored). They may therefore contain math mode specific commands such as subscripts or superscripts\footnote{There is a problem with the placement of groups of atoms containing exponents or subscripts. See page~\pageref{alignement.vertical}.}:
+\exemple{Math mode}|\chemfig{A_1B^2-C _ 3 ^ 4}|
+
+There are settings specifically for Cram bonds:
+\begin{itemize}
+ \item \CFkv{cram width}{dim} is the size of the base of the triangle, and is 1.5pt by default;
+ \item \CFkv{cram dash width}{dim} is the thickness of the dots, and is 1pt by default;
+ \item \CFkv{cram dash sep}{dim} is the spacing between the dots, and is 2pt by default.
+\end{itemize}
+
+Here is an example where the three dimensions are changed:
+
+\exemple{Modified Cram bonds}-\chemfig[cram width=10pt,
+ cram dash width=0.4pt,
+ cram dash sep=1pt]{A>B>:C>|D}-
+
+\section{Bond angle}
+Each bond takes an optional argument in brackets. This optional argument can adjust every aspect of a bond, and consists of five optional fields separated by commas. The first of these fields defines the bond angle. Angles increase counterclockwise, and are relative to the horizontal. If the angle field is empty, the angle takes its default value of 0\degres. We will see later how to change this default.
+
+There are several ways of specifying the bond angle.
+\subsection{Predefined angles}
+When the angle field contains an integer, this represents the angle the bond makes relative to the horizontal, in multiples of 45\degres. For example, \verb-[0]- specifies an angle of 0\degres, \verb-[1]- is 45\degres, and so on.
+
+\exemple{Predefined angles}|\chemfig{A-B-[1]C-[3]-D-[7]E-[6]F}|
+
+These angles remain valid if the atoms are empty, and this is the case for all the features we will see below:
+\exemple{Predefined angles with empty groups}|\chemfig{--[1]-[3]--[7]-[6]}|
+
+For those who find this "ugly\footnote{See \texttt{\detokenize{http://tex.stackexchange.com/questions/161796/ugly-bond-joints-in-chemfig detokenize}}}", it is now possible connect the single bonds with a slightly increased compilation time. The boolean \chevrons{key} \CFkv{bond join}{boolean} macro enables this feature when \CFval{true} and disables it when \CFval{false}, which is the better behavior, set by default.
+
+\exemple{Connecting bonds}/\setchemfig{bond style={line width=3pt}}
+\chemfig{-[1]-[7]} et
+\chemfig[bond join=true]{-[1]-[7]}/
+
+\label{angle increment}The \chevrons{key} \CFkv{angle increment}{angle} sets the default angle used to calculate the angle of a bond:
+
+\exemple{Set the predefined angle}/Default (45) : \chemfig{-[1]-[-1]-[1]-[-1]}
+
+Angle of 30 : \chemfig[angle increment=30]{-[1]-[-1]-[1]-[-1]}/
+
+\subsection{Absolute angles}
+If one wishes to specify an angle in degrees relative to the horizontal, then the optional angle field must take this form: \Verb-[:<absolute angle>]-. If necessary, the \Verb-<absolute angle>- is reduced to the interval $[0,360)$:
+\exemple{Absolute angles}/\chemfig{A-[:30]B=[:-75]C-[:10]D-[:90]>|[:60]-[:-20]E-[:0]~[:-75]F}/
+
+\subsection{Relative angles}\label{angle.relatif}
+It is often useful to specify a bond angle relative to the preceding bond. This syntax must be then be used: \Verb-[::<relative angle>]-. The sign of the \Verb-<relative angle>- can be omitted if it is a \verb-+-.
+
+Here is a molecule where the first bond has an absolute angle of $-5\degres$, and the rest of the bond angles are incremented by 20\degres:
+\exemple{Result of relative angles}|\chemfig{A-[:-5]-[::+20]-[::20]B-[::+20]-[::20]C-[::20]}|
+
+One can ``break'' a chain of relative angles by putting an absolute or predefined angle where desired. Here, atom ``B'' is followed by a bond at an absolute angle of 315\degres.
+\exemple{Result of relative angles followed by absolute}|\chemfig{A-[:-5]-[::20]-[::20]B-[7]-[::20]C-[::20]}|
+
+\section{Length of a bond}
+Rather than speaking of length of a bond, we should use the term interatomic spacing. If effect, only the interatomic spacing is adjustable with \falseverb{atom sep} as we have seen on page~\pageref{longueur.liaison}. Once this parameter is set, the length of a bond depends on the content of atoms and, to a lesser extent, the angle the bond makes with the horizontal. It should be obvious that two ``slimmer'' atoms will have larger edge separations than two which are larger. This can be seen easily in the following example where an ``I'' atom is narrower than an ``M'' atom, which means that the bond between the ``I'' atoms is longer than that between the ``M'' atoms:
+\exemple{Influence of the size of atoms}|\chemfig{I-I}\par
+\chemfig{M-M}|
+
+This aspect of the size of atoms becomes particularly acute when the atom involves subscripts or superscripts. In this example, the bond is extremely short, to the point of confusion with a negative sign $-$:
+\exemple{Too-short bond}|\chemfig{A^{++}_{2}-B^{-}_3}|
+
+It is important to note that the exponent \verb+-+ is \emph{put inside braces}. If this were not done, \CF would stop the atom on this character, which is a bond character. The atom would then be ``\verb-B^-'', which would lead to unexpected results.
+
+It is possible to change the behavior of \CF about the interatomic spacing. Indeed, when the \verb+\chemfig+ macro is immediately followed by a star, the \chevrons{key} \CFkey{atom sep}no longer defines the distance between the centers of atoms, denoted $\Delta$, but \emph{length of the bonds}. Consequently, the bonds have fixed lengths while the distance between the centers of the atoms is variable and depends on their size. Here is the diagram on page~\pageref{longueur.liaison} and what becomes with the two boolean values of key \CFkey{fixed length}:
+
+\begin{center}
+\begin{tabular}{c@{\kern2cm}c}
+ \CFkv{fixed length}{false}&\CFkv{fixed length}{true}\\[2ex]
+ \begin{tikzpicture}[every node/.style={anchor=base,inner sep=1.5pt,outer sep=0pt,minimum size=0pt},baseline]
+ \node[draw] at(0,0)(aa){\huge A};
+ \node[draw]at(4,0)(bb){\huge B};
+ \path[shorten <=10pt,shorten >=10pt,draw](aa)--(bb)coordinate[pos=0](al) coordinate[pos=1](bl);
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=10pt]al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(bl){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=-10pt]bl){};
+ \draw[blue,dash pattern=on 1pt off 1pt](bl)--([yshift=0.7cm]bl);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=-10pt]bl)--([xshift=-10pt,yshift=0.7cm]bl);
+ \draw[stealth-stealth]([yshift=0.6cm]bl.center)--([xshift=-10pt,yshift=0.6cm]bl.center) node [midway,above,draw=none]{$\delta$};
+ \draw[blue,dash pattern=on 1pt off 1pt](al)--([yshift=0.7cm]al);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=10pt]al)--([xshift=10pt,yshift=0.7cm]al);
+ \draw[stealth-stealth]([yshift=0.6cm]al.center)--([xshift=10pt,yshift=0.6cm]al.center) node [midway,above,draw=none]{$\delta$};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(aa){};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(bb){};
+ \draw[stealth-stealth]([yshift=1cm]aa.center)--([yshift=1cm]bb.center) node [midway,above,draw=none] {$\Delta$} ;
+ \draw[red,dash pattern=on 2pt off2pt](aa.center)--([yshift=1.1cm]aa.center);
+ \draw[red,dash pattern=on 2pt off2pt](bb.center)--([yshift=1.1cm]bb.center);
+ \end{tikzpicture}
+ &
+ \begin{tikzpicture}[every node/.style={anchor=base,inner sep=1.5pt,outer sep=0pt,minimum size=0pt},baseline]
+ \node[draw] at(0,0)(aa){\huge A};
+ \node[draw]at(5,0)(bb){\huge B};
+ \path[shorten <=10pt,shorten >=10pt,draw](aa)--(bb)coordinate[pos=0](al) coordinate[pos=1](bl);
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=10pt]al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(bl){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=-10pt]bl){};
+ \draw[blue,dash pattern=on 1pt off 1pt](bl)--([yshift=0.7cm]bl);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=-10pt]bl)--([xshift=-10pt,yshift=0.7cm]bl);
+ \draw[stealth-stealth]([yshift=0.6cm]bl.center)--([xshift=-10pt,yshift=0.6cm]bl.center) node [midway,above,draw=none]{$\delta$};
+ \draw[blue,dash pattern=on 1pt off 1pt](al)--([yshift=0.7cm]al);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=10pt]al)--([xshift=10pt,yshift=0.7cm]al);
+ \draw[stealth-stealth]([yshift=0.6cm]al.center)--([xshift=10pt,yshift=0.6cm]al.center) node [midway,above,draw=none]{$\delta$};
+ \draw[stealth-stealth]([yshift=1cm]al)--([yshift=1cm]bl) node [midway,above,draw=none] {$\Delta$} ;
+ \draw[red,dash pattern=on 2pt off2pt](al)--([yshift=1.1cm]al);
+ \draw[red,dash pattern=on 2pt off2pt](bl)--([yshift=1.1cm]bl);
+ \end{tikzpicture}
+\end{tabular}
+\end{center}
+
+In rings, even when \CFkv{fixed length}{true}, the default behavior is restored for the bonds of the cycle, in order to draw regular polygons.
+
+\exemple{Fixed length bonds}/\chemfig{Cl-Cl}\par
+\chemfig[fixed length=true]{Cl-Cl}/
+
+Especially with the default behavior, to avoid too short bonds, it is sometimes necessary to increase (or perhaps reduce) the interatomic distance. For this, the optional argument to bonds is actually made up of several comma-separated fields. As we have seen, the first field specifies the angle. The second field, if it is not empty, is a coefficient which multiplies the default interatomic distance $\Delta$. Thus, writing \verb+-[,2]+ asks that this bond have the default angle (first field is empty) and that the atoms it connects be separated by twice the default distance.
+\exemple{Modified bond length}/\chemfig{A^{++}_{2}-[,2]B^{-}_3}\par
+\chemfig{A-B-[,2]C=[,0.5]D}\par
+\chemfig{-=[,1.5]-[,0.75]=[:-20,2]}/
+
+We can change the \falseverb{size of molecules} by altering the font size or the \chevrons{key} \CFkey{atom sep}, possibly on both, being careful to confine these changes within a group if we want to limit the scope:
+\exemple{How to modify the size of molecule}/\normalsize \chemfig{H-[:30]O-[:-30]H}\par
+\setchemfig{atom sep=2.5em}
+\chemfig{H-[:30]O-[:-30]H}\par
+\small \chemfig{H-[:30]O-[:-30]H}\par
+\footnotesize \chemfig{H-[:30]O-[:-30]H}\par
+\scriptsize \chemfig{H-[:30]O-[:-30]H}\par
+\tiny \chemfig{H-[:30]O-[:-30]H}/
+
+\section{Departure and arrival atoms}
+A group of atoms can contain several atoms. Suppose we want to connect the group ``ABCD'' to the group ``EFG'' with a bond. \CF calculates which atom of the first group and which of the second group are to be connected by looking at the angle of bond relative to the horizontal. If the angle is between (but not including) $-90\degres$ and 90\degres{} (modulo 360\degres) then the bond is made between the last atom of the first group and the first atom of the second group. In all other cases, the bond is made between the first atom of the first group and the last atom of the second group.
+
+Here are some examples where the bond is in the interval $(-90,90)$, and where the bond is made between D and E:
+\exemple{Default atom connections}|\chemfig{ABCD-[:75]EFG}\quad
+ \chemfig{ABCD-[:-85]EFG}\quad
+ \chemfig{ABCD-[1]EFG}|
+
+In the following examples, the angles are in the interval $[90,270]$ and so the bond is made between A and G:
+\exemple[60]{Default atom connections}|\chemfig{ABCD-[:100]EFG}\quad
+ \chemfig{ABCD-[:-110]EFG}\quad
+ \chemfig{ABCD-[5]EFG}|
+
+One may sometimes want the bond partners to be atoms other than those determined by \CF. The departure and arrival atoms can be set with the optional bond argument by writing:
+\begin{center}
+ \Verb/[,,<integer 1>,<integer 2>]/
+\end{center}
+where \Verb-<integer 1>- and \Verb-<integer 2>- are the numbers of the desired departure and arrival atoms. These atoms must exist, otherwise an error message will be given.
+\exemple{Specified atom connections}|\chemfig{ABCD-[:75,,2,3]EFG}\qquad
+ \chemfig{ABCD-[:75,,,2]EFG}\qquad
+ \chemfig{ABCD-[:75,,3,2]EFG}|
+
+\section{Customization of bonds}\label{perso-liaisons}
+There is a fifth and last optional argument for bonds which is found after the fourth comma:
+\begin{center}
+ \Verb/[,,,,<tikz code>]/
+\end{center}
+
+This \Verb-<tikz code>- is passed directly to \TIKZ when the bond is drawn. There one can put characteristics such as colour (\verb-red-), dash type (\verb-dash pattern=on 2pt off 2pt-), thickness (\verb-line width=2pt-), or even decoration if the \TIKZ decoration library has been loaded. A bond can be made invisible by writing ``\verb-draw=none-''. To set several attributes, the syntax of \TIKZ is used, separating them by a comma:
+\exemple{Passing tikz code}|\chemfig{A-[,,,,red]B}\par
+\chemfig{A-[,,,,dash pattern=on 2pt off 2pt]B}\par
+\chemfig{A-[,,,,line width=2pt]B}\par
+\chemfig{A-[,,,,red,line width=2pt]B}|
+
+Numerous \TIKZ decoration libraries are available. For example, one can use the ``\verb-pathmorphing-'' library by putting \verb-\usetikzlibrary{decorations.pathmorphing}- in the preamble in order to draw wavy bonds:
+\exemple{Wavy bonds}|\chemfig{A-[,3,,,decorate,decoration=snake]B}|
+
+Cram bonds ignore thickness and dash settings.
+
+\section{Default values}
+At the beginning of each molecule, the default values for the optional arguments are initialized. They are:
+\begin{itemize}
+ \item 0\degres{} for the bond angle;
+ \item 1 for the length multiplication coefficient;
+ \item \Verb-<empty>- for the numbers of the departure and arrival atoms, which lets \CF calculate these based on the bond angle;
+ \item \Verb-<empty>- for the parameters passed to \TIKZ.
+\end{itemize}
+
+These default values can be changed for the whole molecule by beginning the molecule code with
+\begin{center}
+ \Verb/[<angle>,<coeff>,<n1>,<n2>,<code tikz>]/
+\end{center}
+
+Thus, if the code of a molecule begins with \verb-[:20,1.5]-, then all the bonds will be at angle of 20\degres{} by default, and the interatomic distances will have a length 1.5 times the default length. These default values can be overridden at any time by giving an optional argument, such as for the bond which follows atom ``C'' in this example:
+\exemple{Overriding default values}|\chemfig{[:20,1.5]A-B-C-[:-80,0.7]D-E-F}|
+
+If something odd like \verb-[1,1.5,2,2,red,thick]- is written, then unless otherwise indicated all the bonds will have an angle of 45\degres{}, the interatomic distances will be 1.5 times the default distance, the bonds will begin and end on the second atom of each group, and the bonds will be red and thick:
+\exemple{Default values}|\chemfig{[1,1.5,2,2,red,thick]ABC-DEF=GHI}|
+
+\section{Branches}
+\subsection{Principle}
+Up to now, all the molecules have been linear, which is rare. A sub-molecule can be attached to an atom by following the atom with \Verb-<code>- in parentheses. This \Verb-<code>- is the code of the sub-molecule which will be attached to the atom.
+
+In this example, the sub-molecule ``\verb/-[1]W-X/'' will be attached to atom ``B'':
+\exemple{A branch}|\chemfig{A-B(-[1]W-X)-C}|
+
+There can be several sub-molecules which are to be attached to the same atom. Just have several parentheses containing the code for each sub-molecule:
+\exemple{Multiple branches}|\chemfig{A-B(-[1]W-X)(-[6]Y-[7]Z)-C}|
+
+The code of each sub-molecule can define its own default values, which will be valid throughout the whole sub-molecule. Here a sub-molecule ``\verb/[:60]-D-E/'' is attached to atom ``B'', with a default angle of 60\degres{} absolute. A second sub-molecule ``\verb/[::-60,1.5]-X-Y/'' is attached to ``B'' with a default bond angle 60\degres{} less than that of the preceding bond (which will be the one between ``A'' and ``B'') and with an interatomic distance 1.5 times the default value:
+\exemple{Default values in branches}|\chemfig{A-B([:60]-D-E)([::-30,1.5]-X-Y)-C}|
+
+Observe what happens if, at the beginning of the main molecule, one writes ``\verb/[:-45]/'':
+\exemple{Effect of the default bond angle}|\chemfig{[:-45]A-B([:60]-D-E)([::-30,1.5]-X-Y)-C}|
+
+We see that the angle between the bond \verb/B-C/ and the bond \verb/B-X/ stays at 30\degres{} because it is a relative angle for the sub-molecule ``\verb/-X-Y/''. By contrast, the branch ``\verb/-D-E/'' stays inclined at 60\degres{} to the horizontal, and does not follow the rotation given by the $-45\degres$ angle at the beginning; this is expected because ``\verb/-D-E/'' has an absolute angle. It is essential that all the angles be relative in order to rotate the whole molecule.
+
+\subsection{Nesting}
+Sub-molecules may be nested, and the rules seen in the preceding paragraphs stay in force:
+\exemple{Nested branches}|\chemfig{A-B([1]-X([2]-Z)-Y)(-[7]D)-C}|
+
+\subsection{Method}
+Suppose now that we want to draw an acid anhydride molecule:
+\chemfig{R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R}
+
+The best way to get this is to find the longest chain. Here, for example, we can draw the chain \verb/R-C-O-C-R/ taking into account angles and using only relative angles:
+\exemple{Acid anhydride structure}|\chemfig{R-C-[::-60]O-[::-60]C-[::-60]R}|
+
+To this structure we just have to add two ``\verb/=O/'' sub-molecules to each of the carbon atoms:
+\exemple{Acid anhydride}|\chemfig{R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R}|
+
+Because we used only relative angles, we can rotate this molecule by giving a default angle of e.g. 75\degres:
+\exemple[70]{Rotation of a molecule}|\chemfig{[:75]R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R}|
+
+\section{Connecting distant atoms}
+We have seen how to connect atoms \emph{which are adjacent in the code}. It is often necessary to connect atoms which are not next to each other in the code. Let's call these particular bonds ``distant bonds''.
+
+Let's take this molecule:
+\exemple{Branched structure}|\chemfig{A-B(-[1]W-X)(-[7]Y-Z)-C}|
+
+and suppose that we want to connect the atoms \verb/X/ and \verb/C/. In this case, \CF allows a ``hook'' to be placed \emph{immediately} after the atom of interest. The character used for a hook is ``\verb-?-'' because of its similarity to a hook. So, if one writes \verb/X?/ then the atom \verb/X/ will have a hook. Later in the code, all atoms followed by a \verb-?- will be connected to \verb/X/:
+\exemple{Distant bond}|\chemfig{A-B(-[1]W-X?)(-[7]Y-Z)-C?}|
+
+We could connect other atoms to X by following them with \verb-?-. Here it's the atoms \verb-C- and \verb-Z-:
+\exemple{Several distant bonds}|\chemfig{A-B(-[1]W-X?)(-[7]Y-Z?)-C?}|
+
+Now imagine if we were to leave the distant bonds \verb/X-C/ and \verb/X-Z/while adding another: \verb/A-W/. We must therefore ask for two \emph{different} hooks, one on \verb/A/ and the other on \verb/X/. Fortunately the character \verb/?/ has an optional argument:
+\begin{center}
+ \Verb/?[<name>,<bond>,<tikz>]/
+\end{center}
+where each field takes its default value if it is empty:
+\begin{itemize}
+ \item The \Verb-<name>- is the name of the hook: all alphanumeric characters (a\dots z, A\dots Z, 0\dots 9) are allowed\footnote{This is not exactly right. Actually all the characters that can be put between \texttt{\string\csname...\string\endcsname} are allowed.}. The name is \verb-a- by default. In the first occurrence of the hook with this name, only this field is used.
+ \item \Verb-<bond>- specifies how the atom with the current occurrence of the named hook is to be bonded to the atom with the first occurrence of the hook. There are two ways this can be done. First, this field can be an integer representing the desired bond type: 1=single bond, 2=double bond, etc. (See the table on page~\pageref{types.liaisons} for the bond codes.)
+
+ Second, the field can be one of the bond character codes, provided that this character is \emph{between braces}.
+ \item \Verb-<tikz>- will be passed directly to \TIKZ as we have seen with regular bonds.
+\end{itemize}
+
+Here is our molecule with the required distant bonds, then with the bond \verb/A-W/ and \verb/X-C/ customized:
+\exemple{Multiple distant bonds}|\chemfig{A?[a]-B(-[1]W?[a]-X?[b])(-[7]Y-Z?[b])-C?[b]}\par\medskip
+ \chemfig{A?[a]-B(-[1]W?[a,2,red]-X?[b])(-[7]Y-
+ Z?[b,1,{line width=2pt}])-C?[b,{>},blue]}|
+
+Several different hooks can be written after an atom. Suppose that in this unfinished pentagon, we wish to connect \verb/A-E/, \verb/A-C/ and \verb/E-C/:
+\exemple{An incomplete ring}|\chemfig{A-[:-72]B-C-[:72]D-[:144]E}|
+
+Then we must do this:
+\exemple{Multiple distant bonds}|\chemfig{A?[a]-[:-72]B-C?[a]?[b]-[:72]D-[:144]E?[a]?[b]}|
+
+\section{Rings}
+The preceding example shows how to draw a regular polygon, but the method used is tedious because the angles depend on the number of sides of the polygon.
+
+\subsection{Syntax}
+\CF can easily draw regular polygons. The idea is to attach a ring to an \Verb/<atom>/ outside the ring with this syntax:
+\begin{center}
+ \Verb/<atom>*<n>(<code>)/
+\end{center}
+\Verb/<n>/ is the number of sides of the polygon and the \Verb/<code>/ describes the bonds and groups of atoms which make up its edges and vertices. This code \emph{must} begin with a bond because the atom is outside the ring.
+
+Here is a 5-ring, attached to the atom ``\verb/A/'':
+\exemple{5-ring}|\chemfig{A*5(-B=C-D-E=)}|
+
+A ring can also be drawn with one, several, or all the groups of atoms empty, as is the case for diagrams outside rings:
+\exemple{5-ring with empty groups}|\chemfig{*5(-=--=)}|
+
+A ring can be incomplete:
+\exemple{Incomplete 5-ring}|\chemfig{*5(-B=C-D)}|
+If a ring has a code which contains too many bonds and atom groups for the given number of vertices, all the bonds and groups over the maximum allowed are ignored:
+\exemple{Truncated 5-ring}|\chemfig{A*5(-B=C-D-E=F-G=H-I)}|
+
+It is possible to draw a circle or an arc in the inside of a ring. To do so, the following syntax is used:
+\begin{center}
+ \Verb/<atom>**[<angle 1>,<angle 2>,<tikz>]<n>(<code>)/
+\end{center}
+where each field of the optional argument takes its default value if it is empty:
+\begin{itemize}
+ \item \Verb/<angle 1>/ and \Verb/<angle 2>/ are the absolute angles of the start and finish of the arc. These default to 0\degres{} and 360\degres{} respectively so that a circle is drawn by default;
+ \item \Verb/<tikz>/ is the code that will be passed to \TIKZ for drawing the arc.
+\end{itemize}
+
+\exemple{Rings and arcs}|\chemfig{**6(------)}\quad
+ \chemfig{**[30,330]5(-----)}\quad
+ \chemfig{**[0,270,dash pattern=on 2pt off 2pt]4(----)}|
+
+\subsection{Angular position}
+\subsubsection{At the start}
+As can be seen in the examples above, the rule is that the attachment atom ``\verb/A/'' is always at the south-west of the ring. Furthermore, the ring is always constructed counterclockwise, and the last bond descends vertically onto the attachment atom:
+\exemple{Angular position of rings}|\chemfig{A*4(-B-C-D-)}\qquad\chemfig{A*6(------)}|
+
+If this angular position is not convenient, it is possible to specify another angle using the optional argument at the beginning of the molecule. Here is a 6-cycle which has been rotated by $+30\degres$, by $-30\degres$, and lastly by $+60\degres$:
+\exemple[55]{Rotation of rings}|\chemfig{[:30]A*6(------)}\qquad
+ \chemfig{[:-30]A*6(------)}\qquad
+ \chemfig{[:60]A*6(------)}|
+
+\subsubsection{After a bond}
+When a ring does not begin a molecule and one or more bonds have already been drawn, the default angular position changes: the ring is drawn is such a way that the bond ending on the attachment atom bisects the angle formed by the first and last sides of the ring.
+
+Here is a simple case:
+\exemple{Bond ending on a ring}|\chemfig{A-B*5(-C-D-E-F-)}|
+
+The rule remains valid, whatever the angle of the preceding bond:
+\exemple{Bonds ending on a ring}|\chemfig{A-[:25]B*4(----)}\vskip5pt
+ \chemfig{A=[:-30]*6(=-=-=-)}|
+
+\subsection{Branches on a ring}
+To have branches attached to the vertices of a ring, we use the syntax we have already seen:
+\begin{center}
+ \Verb/<atom>(<code>)/
+\end{center}
+where the \Verb/<code>/ is that of the sub-molecule and the \Verb-<atom>- is at the vertex. Unique to rings, the default angle of the sub-molecule is not 0\degres{} but is calculated so that it will bisect the sides leaving the vertex:
+\exemple{Branch on a ring}|\chemfig{X*6(-=-(-A-B=C)=-=-)}|
+
+A sub-molecule can be attached to the first vertex of a ring, just like the other vertices:
+\exemple{Ring and branches}|\chemfig{*5((-A=B-C)-(-D-E)-(=)-(-F)-(-G=)-)}|
+
+If one wants the bond leaving a vertex not to be the bisector of its sides, one can tinker with the optional global parameter or the optional bond parameter:
+\exemple[50]{Branches at specified angles}|\chemfig{*5(---([:90]-A-B)--)}\qquad
+ \chemfig{*5(---(-[:90]A-B)--)}\qquad
+ \chemfig{*5(---([::+0]-A-B)--)}|
+
+It is worth noting that in the third example, where a relative angle of 0\degres{} was given, the bonds of the branch are drawn in line with the preceding bond in the ring. This is the rule on page~\pageref{angle.relatif} which specified that the reference angle was that of the bond last drawn.
+
+We can now connect together rings with bonds:
+\exemple{Connected rings}|\chemfig{*6(--(-*5(----(-*4(----))-))----)}|
+
+\subsection{Nested rings}
+To ``glue'' two rings together, the syntax is only slightly different: the vertex is specified where the other ring is going to start. Simply follow this vertex by the usual syntax for a ring. Here for example is a 5-ring which is attached to the second vertex of a 6-ring:
+\exemple{Nested rings}|\chemfig{A*6(-B*5(----)=-=-=)}|
+
+Note that the ring which is going to be attached to the main ring has an angular position such that two of the rings' sides coincide. In addition, the 5-ring has only four bonds ``\verb/----/''. In effect, the fifth will be useless because it is the second side of the 6-ring, which has already been drawn.
+
+It is quite possible to glue multiple rings together:
+\exemple{Multiple nested rings}|\chemfig{*5(--*6(-*4(-*5(----)--)----)---)}|
+
+There is a case where a trick must be used. It can be seen in this example that the fourth side of the second 5-ring just passes through the center of atom ``\verb-E-''.
+\exemple{Flawed drawing}|\chemfig{A-B*5(-C-D*5(-X-Y-Z-)-E-F-)}|
+
+This is normal because the second 5-ring (which is attached to atom ``\verb-D-'') is drawn \emph{before} \CF knows about atom ``\verb-E-''. In this case, it is necessary to use two hooks to draw the bond \verb/Z-E/:
+\exemple{Distant bond and ring}|\chemfig{A-B*5(-C-D*5(-X-Y-Z?)-E?-F-)}|
+
+We could also use a \verb-\phantom{E}- at the last vertex of the 5-ring:
+\exemple{Using \string\phantom}/\chemfig{A-B*5(-C-D*5(-X-Y-Z-\phantom{E})-E-F-)}/
+
+\subsection{Rings and groups of atoms}
+Some care must be taken with rings when one or more vertices are made up of groups of atoms:
+\exemple{Ring and groups of atoms}|\chemfig{AB*5(-CDE-F-GH-I-)}|
+
+In order for the ring to have a regular shape, it is necessary to override the \CF mechanism which automatically calculates the departure and arrival atoms of bonds. Here, \verb/C-F/ and \verb/F-G/ must be connected by using the optional argument of these bonds:
+\exemple{Forced departure and arrival atoms}|\chemfig{AB*5(-CDE-[,,1]F-[,,,1]GH-I-)}|
+
+\section{Representing electron movements}\label{mecanismes-reactionnels}
+Starting with \CF version 0.3, we can represent the movement of electrons in mesomeric effects or reaction mechanisms. This is done by marking the departure and arrival points of the electron movement arrow using the syntax ``\Verb-@{<argument>}-''. This syntax allows a \TIKZ node to be placed and makes this node accessible outside the argument of the \verb-\chemfig- command thanks to the ``\texttt{remember picture}'' option which is passed to all the ``\falseverb{tikzpicture}'' environments. It is assumed that the viewer supports ``\falseverb{picture remembering}'' and that the compilation is done twice.
+
+Two types of diagrams can arise, so we can ask for:
+\begin{itemize}
+ \item a zero size node on a bond using the syntax ``\Verb-@{<name>,<coeff>}-'' placed at the beginning of the optional argument of the relevant bond, without being followed by a comma if there is a first optional argument. In this case, the node takes the name ``\Verb-<name>-'' and the \Verb-<coeff>-, which must be between 0 and 1, determines where the node is located on the bond. If ``\Verb-@{<name>}-'' is used, the \Verb-<coeff>- is set to 0.5 by default, which means that the node is placed halfway along the bond;
+ \item a node on an atom using the syntax ``\Verb-@{<name>}-'' immediately before the relevant atom. In this case, the node has exactly the same footprint as the atom, but may be empty and therefore have zero dimensions.
+\end{itemize}
+Once the \falseverb{\chemfig} command has drawn the molecule(s) and has placed the nodes with the syntax described above, we can connect these nodes to each other with \TIKZ instructions. These instructions are placed in the argument of the command \verb-\chemmove-\footnote{Actually, the \texttt{\string\chemmove} command puts its argument in a ``\falseverb{tikzpicture}'' environment with the options ``\texttt{remember picture, overlay}''.} and has the following syntax if (for example) we need to connect a node named ``\Verb-<name1>-'' to the node named ``\Verb-<name2>-'':
+\begin{center}
+ \Verb|\chemmove[<opt>]{\draw[<tikz opt>](<name1>)<tikz link>(<name2>);}|
+\end{center}
+
+The optional argument \Verb-<opt>- of the \verb-\chemmove- command will be added to the argument of the \falseverb{tikzpicture} environment in which the links between the nodes will be drawn. The \Verb-<tikz opt>- and \Verb-<tikz link>- instructions are describe in detail in the documentation of the \TIKZ package.
+
+\subsection{Mesomeric effects}
+To make these concepts concrete, let's take the example of a mesomeric effect involving a double bond and non-bonding lone pair conjugate. Let's begin with the possible delocalization of electrons from the double bond. We will place a node named ``db'' (double bond) in the middle of the double bond and a node named ``a1'' on the end of the double bond.
+
+Les macros \verb|\schemestart|, \verb|\schemestop|, \verb|\arrow| et \verb|\+| sont exposées
+
+\exemple{Mesomeric effect 1}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[::-60]\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+ \chemmove{\draw(db).. controls +(100:5mm) and +(145:5mm).. (a1);}/
+
+As noted above, there is no comma after the node placed in the optional arguments of a bond; we write ``\verb|=_[@{db}::30]|'' and not ``\verb|=_[@{db},::30]|'' as one might be tempted to do.
+
+To link the nodes ``db'' and ``a1'' we have used the following syntax:
+\begin{center}
+ \Verb|\chemmove{\draw(db)..controls +(80:8mm) and +(145:8mm)..(a1);}|
+\end{center}
+
+For arrows in \verb|\chemmove|, the default tip is ``CF''.In this example we ask for an arrow (\verb/[->]/) and we use two \falseverb{control points}\footnote{To find all the ways of connecting two nodes with \TIKZ, read the documentation for that package.}. These will be located using polar coordinates at 80\degres{} and 8~mm from ``db'' for the first and at 145\degres{} and 8~mm from ``a1'' for the second. Though this syntax may seem complicated at first reading, one need not be alarmed because its use will usually be a matter of copying and pasting. Only the names and coordinates of the control points need be changed, as can be verified from the example below, where an arrow has been added from the lone pair (node ``dnl'' to the single bond (node ``sb'').
+\exemple{Mesomeric effect 2}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+\chemmove{
+ \draw(db)..controls +(100:5mm) and +(145:5mm)..(a1);
+ \draw(dnl)..controls +(90:4mm) and +(45:4mm)..(sb);}/
+
+For our new arrow we have set the \falseverb{control points} as follows: 4~mm at an angle of 90\degres{} from ``dnl'' and 4~mm at an angle of 45\degres{} from ``sb''. But we are not completely satisfied, since we would like the arrow not to touch the line segment representing the lone pair. To do this we will add some options to our arrow.
+\exemple{Mesomeric effect 3}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+\chemmove[->]{% change the tip style
+ \draw(db).. controls +(100:5mm) and +(145:5mm).. (a1);
+ \draw[shorten <=3pt,shorten >=1pt](dnl) .. controls +(90:4mm)
+ and +(45:4mm) .. (sb);}/
+
+The option ``\verb|shorten <=3pt|'' indicates that the tail of the arrow is to be shortened by 3~pt just as ``\verb|shorten >=2pt|'' means that the head of the arrow is shortened by 2~pt.
+
+We can use all the power of \TIKZ instructions to modify the style of the arrow. Here we change the head of the arrow leaving the double bound and set it to ``\verb|-stealth|'', and we draw the arrow with a fine dashed red line. We also add the letter $\pi$ above the middle of the arrow:
+\exemple{Mesomeric effect 4}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+\chemmove{
+ \draw[-stealth,thin,dash pattern= on 2pt off 2pt,red]
+ (db).. controls +(100:5mm) and +(145:5mm)..
+ node[sloped,above] {$\pi$} (a1);
+ \draw[shorten <=3pt, shorten >= 1pt]
+ (dnl).. controls +(90:4mm) and +(45:4mm).. (sb);}/
+
+In the following example, we'll see how to indicate the position of the departure or arrival anchor points of the arrow. If we write
+\exemple{Departure or arrival anchor point 1}/\chemfig{@{x1}\lewis{1:,X}}
+\hspace{2cm}
+\chemfig{@{x2}\lewis{2|,X}}
+\chemmove{\draw[shorten >=4pt]
+ (x1).. controls +(90:1cm) and +(90:1cm).. (x2);}/
+
+Note that the tail of the arrow does not leave correctly from our electrons; it leaves from the middle of the upper edge of the node. Indeed, we chose a departure angle of 90~\degres{} and so \TIKZ makes the arrow leave from the anchor ``x1.90'' which corresponds to the intersection of the ray leaving from the center of node ``x1'' at a 90\degres{} angle relative to the horizontal and of the edge of the rectangular node. To get the arrow departure angle that we want, we must specify its position. After some trial and error, it is ``x1.57'':
+\exemple{Departure or arrival anchor point 2}/\chemfig{@{x1}\lewis{1:,X}}
+\hspace{2cm}
+\chemfig{@{x2}\lewis{2|,X}}
+\chemmove{\draw[shorten <=4pt,shorten >=4pt]
+ (x1.57).. controls +(60:1cm) and +(120:1cm).. (x2);}/
+
+In some cases it will be easier to use Cartesian coordinated for the \falseverb{control points}. Here we use just one control point placed 1~cm to the right of and 1.5~cm above ``x1'':
+\exemple{A single control point}/\chemfig{@{x1}\lewis{1:,X}}
+\hspace{2cm}
+\chemfig{@{x2}\lewis{2|,X}}
+\chemmove{\draw[shorten <=4pt,shorten >=4pt]
+ (x1.57).. controls +(1cm,1.5cm).. (x2);}/
+
+All the graphics drawn by means of the command \verb|\chemmove| are superimposed and will not be included in the bounding boxes. We can see this in the preceding example.
+
+\subsection{Reaction mechanisms}
+Thanks to the option \verb|remenber picture| which is passed to all the ``tikzpicture'' environments we can easily draw arrows indicating reaction mechanisms. Let's take for example the first step of the esterification reaction.
+\exemple{Esterification: step 1}/\setchemfig{atom sep=7mm}
+\schemestart
+ \chemfig{R-@{dnl}\lewis{26,O}-H}
+ \+
+ \chemfig{R-@{atoc}C([6]-OH)=[@{db}]O}
+ \arrow(.mid east--){<->[\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}]}
+\schemestop
+\chemmove[shorten <=2pt]{
+ \draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
+ \draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}/
+
+The use of the \Verb|\chemabove{<code>}{<materiel>}| command does not change the dimensions of the \falseverb{bounding box} of \Verb|<code>|. For this reason we can run into some difficulty in pointing to the symbol representing the charge carried ($\oplus$ or $\ominus$). In the example above the solution is to create a control point with an angle of 110\degres{} at 1~cm from ``atoh'' and to shorten the arrow by 6pt. In the following example, the second step of the esterification reaction, we can see that the arrow can take more complicated forms without complicating the code.
+\exemple{Esterification: step 2}/\setchemfig{atom sep=7mm}
+\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\lewis{26,O}H}\hspace{1cm}
+\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}
+\chemmove{
+ \draw[shorten <=2pt, shorten >=7pt]
+ (dnl).. controls +(south:1cm) and +(north:1.5cm).. (atoh);}/
+
+The rest is left as an exercise to the reader\dots.
+
+\section{Writing a name under a molecule}\label{chemname}
+For convenience, \CF can write the name of a molecule underneath it with the command
+\begin{center}
+ \Verb/\chemname[<dim>]{\chemfig{<code of the molecule>}}{<name>}/
+\end{center}
+
+The \Verb-<dim>-, which is 1.5ex by default, will be inserted between the \falseverb{baseline} of the molecule and the top of the letters of the \Verb-<name>-. The \Verb-<name>- will be centered relative to the molecule, but the \Verb-<name>- may not contain multiple paragraphs. As we see in this example: \chemname{\chemfig{H-O-H}}{\scriptsize\bfseries The water molecule: $\mathrm{\mathbf{H_2O}}$}, the \Verb-<name>- which is displayed under the molecule is taken into account only for the vertical size of the bounding box. The horizontal size of \Verb-<name>- is always zero.
+
+Here is a reaction with the names under the molecules:
+\exemple*{Displaying names of molecules}/\schemestart
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Acide carboxylique}
+ \+
+ \chemname{\chemfig{R'OH}}{Alcool}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Water}
+\schemestop
+\chemnameinit{}/
+
+There are some limitations to this command. Suppose we switch the acid and the alcohol on the left side:
+\exemple*{Name alignment 1}/\schemestart
+ \chemname{\chemfig{R'OH}}{Alcohol}
+ \+
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Carboxylic acid}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Water}
+\schemestop
+\chemnameinit{}/
+
+In fact, to draw the \Verb-<name>- the command \falseverb{\chemname} inserts 1.5ex${}+{}$\emph{the largest of the depths\footnote{In \TeX{} terms, the depth is the dimension which extends vertically below the baseline.} of the molecules thus far} below the baseline of each molecule (light gray for the examples in this manual). The command \falseverb{\chenameinit}\Verb-{<stuff>}- initializes this largest depth with the \Verb-<stuff>-. Therefore one should:
+\begin{itemize}
+ \item write \Verb-\chemnameinit{<deepest molecule>}- before using the \verb-\chemname- command in a reaction, unless the reaction begins with the deepest molecule;
+ \item write \verb-\chemnameinit{}- after having written all the names in a chemical reaction lest the greatest depth in this reaction interfere with a future reaction.
+\end{itemize}
+
+Thus the correct code uses \falseverb{\chemnameinit} before and after the reaction:
+\exemple*{Name alignment 2}/\chemnameinit{\chemfig{R-C(-[:-30]OH)=[:30]O}}
+\schemestart
+ \chemname{\chemfig{R'OH}}{Alcohol}
+ \+
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Carboxylic acid}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Water}
+\schemestop
+\chemnameinit{}/
+
+Finally, to write a name on multiple lines, the command \verb-\\- encountered in a \Verb-<name>- causes a line break\footnote{Conversely, the command \texttt{\textbackslash par} is forbidden and causes a compilation error.}:
+\exemple*{Name on 2 lines}/\schemestart
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Carboxilic\\Acid}
+ \+
+ \chemname{\chemfig{R'OH}}{Alcohol}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Water}
+\schemestop
+\chemnameinit{}/
+
+If \Verb|\chemname*{<name>}| is written, the macro does not take into account the previous names.
+\newpage
+
+\part{Advanced usage}\label{utilisation.avancee}
+\section{Separating atoms}\label{decoupage.atomes}
+The \falseverb{separating atom mechanism} described previously extends each atom until the next capital letter or one of the characters {\ttfamily \boxedfalseverb{-} \boxedfalseverb{=} \boxedfalseverb{~} \boxedfalseverb{(} \boxedfalseverb{!} \boxedfalseverb{*} \boxedfalseverb{<} \boxedfalseverb{>} \boxedfalseverb{@}}
+
+In certain cases this automatic separation produces incorrect atoms which can translate into an imperfect diagram. Consider this example molecule, noting that the ``\texttt('' character is placed between braces so that \CF doesn't incorrectly create a branch:
+
+\exemple*{Alkene}/\chemfig{CH_3CH_2-[:-60,,3]C(-[:-120]H_3C)=C(-[:-60]H)-[:60]C{(}CH_3{)}_3}/
+
+We find that the bond which arrives at the carbon atom in the upper right is too short. This happens because, if we apply the \CF rules for separating atoms to the upper right group, the atoms are split in this way: ``\texttt{\detokenize{C{(}}}'', ``\texttt{\detokenize{C}}'', ``\texttt{\detokenize{H_3{)}_3}}''. We now realize that the first atom contains a parenthesis and thus has too great a depth in math mode; we can see this by making the bounding boxes visible:
+\begin{center}
+\fboxsep=0pt
+\renewcommand*\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}%
+\chemfig{CH_3CH_2-[:-60,,3]C(-[:-120]H_3C)=C(-[:-60]H)-[:60]C{(}CH_3{)}_3}%
+\end{center}
+The character ``|'' forces splitting of the atom when it is encountered. Thus we can write \texttt{C\textcolor{red}{|}\detokenize{{(CH_3)_3}}} to ensure that \CF separates just two atoms here: ``\texttt{\detokenize{C}}'' and ``\texttt{\detokenize{{(CH_3)_3}}}''. The problem of the too-short bond is thus solved:
+
+\exemple*{Alkene}/\chemfig{CH_3CH_2-[:-60,,3]C(-[:-120]H_3C)=C(-[:-60]H)-[:60]C|{(CH_3)_3}}/
+
+\section{Displaying atoms}\label{perso.affichage}
+Once a molecule has been split into atoms, the macro \falseverb{\printatom} is called internally by \CF in order to display each atom. Its sole argument is the code of the atom to be displayed (e.g. ``\verb-H_3-''). By default, this macro enters \falseverb{math mode} and displays its argument with the math font family ``rm''. It is defined by the following code:
+\begin{itemize}
+ \item \verb|\newcommand*\printatom[1]{\ensuremath{\mathrm{#1}}}|\qquad when compiling with \LaTeX{}
+ \item \verb|\def\printatom#1{\ifmmode\rm#1\else$\rm#1$\fi}|\qquad when compiling with $\varepsilon$\TeX{} ou Con\TeX tX.
+\end{itemize}
+
+One can modify the code of this macro to customize how atoms are displayed. In the following example, we redefine \falseverb{\printatom} so that each atom will be enclosed in a rectangular box:
+\exemple{Redefinition of \string\printatom}/\fboxsep=1pt
+\renewcommand*\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{H_3C-C(=[:30]O)(-[:-30]OH)}/
+
+Here is how to redefine it to use the ``sf'' font family of math mode:
+\exemple{Atoms displayed with ``sf'' font family}/\renewcommand*\printatom[1]{\ensuremath{\mathsf{#1}}}
+\chemfig{H_3C-C(=[:30]O)(-[:-30]OH)}/
+
+\section{Arguments given to tikz}\label{arguments.optionnels}
+The \chevrons{key} \CFkey{chemfig style} contains \TIKZ instructions which will be passed to the \falseverb{tikzpicture} environment in which the molecule is drawn. On the other hand, the The \chevrons{key} \CFkey{atom style} contains \TIKZ instructions which will be executed when each node; these instructions are added to the end of \texttt{every node/.style\{<argument>\}}, i.e. after the fhe following instructions: ``{\ttfamily anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt}''.
+
+With the use of the first optional argument one can, for example, choose the global color or thickness of lines:
+\exemple{Style choice}/\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{chemfig style={line width=1.5pt}}\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{chemfig style=red}\chemfig{A-B-[2]C}/
+
+With \CFkey{node style}, one can choose the colour of nodes drawn by \TIKZ, change the angle of the drawing or its scale:
+\exemple{Style choices}/\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{atom style=red}\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{atom style={rotate=20}}\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{atom style={scale=0.5}}\chemfig{A-B-[2]C}/
+
+\section{Vertical alignment}\label{alignement.vertical}
+In some cases with condensed structural diagram of molecules having horizontal bonds, the placement of groups of atoms is incorrect.
+
+Careful study of the following example shows that the groups of atoms are not correctly aligned on the \falseverb{baseline}:
+\exemple*{Vertical placement}/\Huge\setchemfig{atom sep=2em}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
+
+Surprisingly, the second atom is correctly aligned while the last two undergo a vertical shift which seems to be the results of the different height of the bounding box of the atoms ``\verb-A^1-'' and ``\verb-E_1''-.
+
+In order to understand this phenomenon, we need to consider how \CF places groups of atoms relative to each other. Let us limit ourselves to the case of horizontal bonds in order to simplify terminology, although the algorithm is the same for other bonds. A horizontal bond leaves from the middle of the right side of the bounding box of the departure atom of this bond. The arrival atom is positioned in such a way that the middle of the left side of its bounding box is at the end of the bond. It follows that the vertical placement of the arrival atom depends on the height of the departure atom. To limit this phenomenon, \CF adds to each arrival atom the \falseverb{\vphantom} of the departure atom, but does not include it in the contents of the arrival atom; this \falseverb{\vphantom} is not intended to affect the following atoms. The atoms remaining in each group are aligned so that their baseline coincides with the baseline of the preceding atom.
+
+The defective alignment can thus be explained. The atoms ``\verb-B-'' and ``\verb-F-'' are aligned correctly as they reflect the height of the atoms before them because of their \falseverb{\vphantom}. For the atoms ``\verb-C-'' and ``\verb-F-'', the heights of the immediately preceding atoms are taken into account, but those of the atoms ``\verb-A^1-'' and ``\verb-E_1-'' are ignored! It follows that these atoms are a little too high or too low, depending on the height of these bonds.
+
+We can show this by making visible the bounding boxes of the atoms; one sees clearly that the atoms ``\verb-B-'' and ``\verb-F-'' have bounding boxes that reflect the heights of the immediately preceding atoms:
+\exemple*{Vertical placement and bounding boxes}/\Huge\setchemfig{atom sep=2em}
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm#1}}}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
+
+Since there is no satisfactory manual solution, this problem can be worked around manually by putting \emph{inside} the third atom a \falseverb{\vphantom} having the same height as the first, so that the height affects the following atoms:
+\exemple*{Vertical placement workaround}/\Huge\setchemfig{atom sep=2em}
+\chemfig{A^1-B-{\vphantom{A^1}C}-D}\qquad
+\chemfig{E_1-F-{\vphantom{E_1}G}-H}/
+
+\label{chemskipalign}For any group of atoms it is possible to temporarily deactivate the alignment adjustment mechanism and thus neutralize the \falseverb{\vphantom}. Simply place the \falseverb{\chemskipalign} command in the group of atoms; the alignment will resume in the following group of atoms as if the group of atoms containing \falseverb{\chemskipalign} had never existed. The following example shows the effects of this instruction: the reference point of the box containing the first atom is placed at the level of the bond which arrives from the left. The bounding boxes of the atoms are drawn in the second line.
+
+\exemple[60]{Deactivation of the alignment mechanism}/\large
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}\par\bigskip
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}/
+
+This command is to be used with caution lest the alignment of atoms in the next group be disrupted. In general, all will be well if the group of atoms featuring \falseverb{\chemskipalign} contains \emph{a single atom} whose height and depth are \emph{less} than those of the preceding and following atoms, and if the preceding and following atoms have identical heights and depths. Here is an example of the mess that results when the group of atoms contains two atoms, here ``\verb-\chemskipalign.-'' and ``\verb-B-'':
+\exemple{Consequence of the \string\chemskipalign command}/\large
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-\chemskipalign.B-C}/
+
+This feature can sometimes be useful. Suppose we want to draw the following molecule
+\begin{center}
+ \catcode`;12
+ \def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}%
+ \def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}%
+ \chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}%
+\end{center}
+We can define commands which will draw the empty and full disks with \TIKZ. To ensure that these disks are at the right height, namely the height of the bond arriving at them, we will use the command \falseverb{\chemskipalign}. In the second line below the bonds are ``stuck'' to the disks by using the ability to change the bond shortening with the ``\verb-#-'' character, a feature seen on page~\pageref{modif.retrait}.
+\begingroup\catcode`;12 \catcode`#12
+\exemple{Use of \string\chemskipalign\ and #}/\def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}
+\def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}
+\chemfig{A-\emptydisk-\fulldisk-B}\par
+\chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}
+/\endgroup
+
+
+
+\section{Shifted double bonds}
+All double bonds are made up of two line segments, and these segments are drawn on either side of the imaginary line along which a single bond would be drawn. It is possible to shift a double bond so that one of the line segments lies on the imaginary line. The other segment is then shifted above or below the bond. Actually, it is more correct to say ``left'' or ``right'' of the imaginary line, as the bond is traversed in the direction of drawing.
+
+To shift the bond to the left, write ``\verb-=^-'' and to shift it to the right, write ``\verb-=_-'':
+\exemple{Shifted double bonds}/\chemfig{A-=-B}\par
+\chemfig{A-=^-B}\par
+\chemfig{A-=_-B}/
+
+In rings, double bonds are automatically shifted to the left. However, they can be shifted to the right by specifying it with ``\verb-=_-'':
+\exemple{Shifted double bonds and rings}/\chemfig{*6(-=-=-=)}\qquad
+\chemfig{*6(-=_-=_-=_)}/
+
+Shifted bonds are particularly useful in drawing skeleton diagrams of molecules consisting of carbon chains with double bonds. They give a continuous zig-zag path, whereas the path will be broken with regular double bonds:
+\exemple{Shifted bonds and skeleton diagrams}/\chemfig{-[:30]=[:-30]-[:30]=[:-30]-[:30]}\par
+\chemfig{-[:30]=^[:-30]-[:30]=^[:-30]-[:30]}\par
+\chemfig{-[:30]=_[:-30]-[:30]=_[:-30]-[:30]}/
+
+\section{Delocalized double bonds}
+It is sometimes necessary to draw a double bond so that one line would be full and the other dashed. This feature is not hard-coded in \CF since \TIKZ, with its ``decorations.markings'' library makes it possible.
+
+\exemple*{Delocalized bonds}|\catcode`\_=11
+\tikzset{
+ ddbond/.style args={#1}{
+ draw=none,
+ decoration={%
+ markings,
+ mark=at position 0 with {
+ \coordinate (CF@startdeloc) at (0,\dimexpr#1\CF_doublesep/2)
+ coordinate (CF@startaxis) at (0,\dimexpr-#1\CF_doublesep/2);
+ },
+ mark=at position 1 with {
+ \coordinate (CF@enddeloc) at (0,\dimexpr#1\CF_doublesep/2)
+ coordinate (CF@endaxis) at (0,\dimexpr-#1\CF_doublesep/2);
+ \draw[dash pattern=on 2pt off 1.5pt] (CF@startdeloc)--(CF@enddeloc);
+ \draw (CF@startaxis)--(CF@endaxis);
+ }
+ },
+ postaction={decorate}
+ }
+}
+\catcode`\_=8
+\chemfig{A-[,,,,ddbond={+}]B-[,,,,ddbond={-}]C}|
+
+\section{Saving a sub-molecule}\label{definesubmol}
+\CF is capable of saving a \Verb-<code>- as an alias for reuse in a more compact form in the code of a molecule. This is particularly useful when the \Verb-<code>- appears several times.
+
+To do this, one gives the command
+\begin{center}
+ \Verb|\definesubmol{<name>}{<code>}|
+\end{center}
+which saves the \Verb/<code>/ for recall in the code of the molecule via the shortcut ``\verb/!{name}/''. This \Verb-<name>- can be:
+\begin{itemize}
+ \item a sequence of characters: all the alphanumeric characters able to be between \texttt{\string\csname} and \texttt{\string\endcsname} are accepted;
+ \item a control sequence.
+\end{itemize}
+
+In all cases, if the alias is already defined you should not overwrite it with a new definition using \falseverb{\definesubmol}. A warning will be issued to the user that the old alias will be overwritten by the new one. To override the definition of an alias made previously, use:\label{redefinesubmol}
+\begin{center}
+ \Verb|\redefinesubmol{<name>}{<code>}|
+\end{center}
+
+Here is a code which draws the pentane molecule. An alias ``\verb/xy/'' was defined beforehand for the code \verb/CH_2/:
+\exemple{Pentane}|\definesubmol{xy}{CH_2}
+ \chemfig{H_3C-!{xy}-!{xy}-!{xy}-CH_3}|
+
+In this case the technique is not very interesting because ``\verb/!{xy}/'' is just as long to type as the code it replaces.
+
+But in certain cases, this feature saves a lot of space in the code of the molecule and increases readability. In the following example, we draw the complete structural diagram of butane. We will define an alias with the control sequence ``\verb/\xx/'' for the sub-molecule $\mathrm{CH_2}$. If we use only relative angles, it is possible to rotate the entire molecule to any given angle by using the optional global angle parameter which specifies the default bond angle of the main molecule. It is set to 15\degres{} here:
+\exemple{Butane}|\definesubmol\xx{C(-[::+90]H)(-[::-90]H)}
+\chemfig{[:15]H-!\xx-!\xx-!\xx-!\xx-H}|
+
+The \falseverb{\definesubmol} command takes an optional argument; its syntax is as follows:
+\begin{center}
+ \Verb/\definesubmol{<name>}[<code1>]{code2}/
+\end{center}
+
+When the optional argument is present, the alias ``\Verb-!<name>-'' will be replaced by \Verb'<code1>' if the bond which arrives at the alias comes from the right, i.e., if the angle which the arriving bond makes is between but is not equal to 90\degres{} and 270\degres{}. For all the other cases where the bond arrives from the left of vertically, the alias will be replaced by \Verb-<code2>-.
+
+We will define a control sequence \verb-\Me- pour ``methyl'' so that the alias ``\verb-!\Me-'' will be replaced by ``\verb-H_3C-'' when the bond arrives from the right and by ``\verb-CH_3-'' when it arrives from the left. We can observe in the example that with this alias we need no longer worry about the angle:
+\exemple{Dual alias}/\definesubmol\Me[H_3C]{CH_3}
+\chemfig{*6((-!\Me)=(-!\Me)-(-!\Me)=(-!\Me)-(-!\Me)=(-!\Me)-)}/
+
+\label{definesubmolarg}The sub-molecule saved with a \Verb|<name>| does not admit an argument when it is called after "\verb|!||". To define a sub-molecule admitting one or more arguments, place this \Verb|<number>| of arguments just after the \Verb|<name>|. And the full syntax of \verb|\definesubmol| is:
+\begin{center}
+ \Verb/\definesubmol{<name>}<number>[<code1>]{<code2>}/
+\end{center}
+
+In the \Verb|<codes>|, the arguments must appear in their usual form "\Verb|#<n>|" where \Verb|<n>| is the argument number.
+
+\exemple{\texttt{\string\definesubmol} with arguments}/\definesubmol\X1{-[,-0.2,,,draw=none]{\scriptstyle#1}}
+\chemfig{*6((!\X A)-(!\X B)-(!\X C)-(!\X D)-(!\X E)-(!\X F)-)}
+
+\definesubmol{foo}3[#3|\textcolor{#1}{#2}]{\textcolor{#1}{#2}|#3}
+\chemfig{A(-[:135]!{foo}{red}XY)-B(-[:45]!{foo}{green}{W}{zoo})}/
+
+It should be noted that if the \Verb|<number>| of arguments is incorrect (negative or greater than 9), an error message will be issued and \CF will consider that the sub molecule does not admit an argument.
+
+Except in cases where the character "\verb|#|" is followed by a number between 1 and \Verb|<number>| in which case it represents an argument, "\verb|#|" are allowed in the sub-molecule codes.
+
+\exemple{Use of \#}/\definesubmol\X2{#1-#2-#2-#3-###(3pt,3pt)#4}
+\chemfig{A-!\X{M}{N}-B}/
+
+In this example, only \verb|#1| and \verb|#2| are understood as the arguments of the sub molecule \verb|\X|. The other "\verb|#|" are displayed as they are in the molecule (case of \verb|#3| and \verb|#4|) or understood as the character specifying the fine adjustment of the offset of the bonds.
+
+\section{Decorations}
+\subsection{Lewis diagrams}\label{lewis}
+The macro \falseverb{\lewis} allows placement of pairs of electrons, of single electrons, or of empty slots. This syntax is used:
+\begin{center}
+ \Verb|\lewis{<n1><n2>...<ni>,<atom>}|
+\end{center}
+where the \Verb-<n1>-\dots\Verb-<ni>- represent the desired positions (in multiples of 45\degres) around the \Verb-<atom>-. These whole numbers must be between 0 and 7.
+
+This command can also be used inside the argument of \verb-\chemfig-:
+\exemple{The \string\lewis\ macro}|\lewis{0246,A}\par\medskip
+\lewis{1357,B}\par\medskip
+\chemfig{H-\lewis{26,O}-S(=[2]\lewis{13,O})
+ (=[6]\lewis{57,O})-\lewis{26,O}-H}|
+
+If one wishes to draw two electrons instead of a line, follow the integer with a ``\verb-:-''. If one wishes to draw a single electron, follow it with a ``\verb-.-''. To draw a lacuna, follow it with a ``\verb-|-'':
+\exemple{Lewis diagrams}*\lewis{0:2:4:6:,C}\qquad\lewis{1:3:5:7:,C}\par\bigskip
+\lewis{0.2.4.6.,C}\qquad\lewis{1.3.5.7.,C}\par\bigskip
+\lewis{0:2.4|,X}\par\bigskip
+Hydronium ion: \chemfig{H-\lewis{5|7,O^+}(-[2]H)-H}*
+
+All the decorations drawn by \falseverb{\lewis} are not included in the \falseverb{bounding box} of the atom; they are drawn afterwards. A consequence of this is seen in the two examples above, where the frame does not appear to be properly fitted to the drawing of the molecule, which extends downward slightly. This will be seen more often in this the ``Decorations'' chapter, which presents commands which do not change the bounding box.
+
+\label{Lewis}The \falseverb{\Lewis} macro works the same way as \verb-\lewis- but decorations are taken into account in the bounding box.
+
+This can be seen more clearly by drawing an \verb-\fbox- around decorated atoms:
+\exemple{Bounding box and the \string\lewis\ macro}*\fboxsep0pt
+\fbox{\lewis{0.2.4.6.,A}}\quad\fbox{\Lewis{0.2.4.6.,A}}\par\medskip
+\fbox{\lewis{13,B}}\quad\fbox{\Lewis{13,B}}*
+
+\label{setlewis}Several parameters can be set with the help of these \chevrons{keys}
+\begin{itemize}
+ \item \CFkv{lewis | width}{dim}is the width of the rectangle which represents the empty slot obtained whith the character ``|'';
+ \item \CFkv{lewis sep}{dim} is the distance between the bounding box and the decoration. It is 0.2ex by default;
+ \item \CFkv{lewis length}{dim} is the length of the line segment representing a pair of electrons. It is 1.5ex by default;
+ \item \CFkv{lewis style}{code tikz} is code which is passed directly to \TIKZ. This code is empty by default.
+ \item \CFkv{lewis dist}{dim}: is the distance between 2 discs drawn with "\string:. This distance is set to \CFval{0.3em} by default;
+ \item \CFkv{lewis radius}{dim}: is the radius of the disc drawn with "." or "\string:". Its default value is \CFval{0.15ex};
+ \item \CFkv{lewis diag coeff}{decimal}: is the diagonal spacing factor and its default value is \CFval{1}.
+\end{itemize}
+
+It should be noted that the parameters specific to Lewis decorations can be passed by
+\begin{itemize}
+ \item \Verb|\setchemfig{<keys>=<values>}| so that they last for the rest of the document;
+ \item \Verb|\chemfig[<keys>=<values>]| and in this case, the settings are effective in the current molecule;
+ \item \Verb|\lewis[<keys>=<values>]| so that the parameters are specific to this execution of the macro \verb|\lewis|.
+\end{itemize}
+
+The last way, of course, allows individual settings, but must be used with caution when the macro \verb|\lewis| is in the argument of \verb|\chemfig|. Indeed, the signs \verb-=- of the \Verb|<key>=<values>| should not be interpreted as a double bond and to do so, the macro \verb|\lewis|, its optional and mandatory argument \emph{must} be inside braces:
+
+\exemple{Optional argument of \string\lewis}/\chemfig{{\lewis[lewis style=red]{1:3:5:7:,X}}-{\lewis[lewis style=blue]{0:2:4:6:,Y}}}/
+
+Here are some examples of customization:
+
+\exemple{Parameters for the \string\lewis\ macro}*\setchemfig{lewis sep=4pt,lewis length=1.5em,lewis style=red}
+\chemfig{A-\lewis{26,B}-C}\bigbreak
+
+\chemfig[lewis style={line width=0.4pt}]{A-\lewis{2|,B}-C}\bigbreak
+
+\Lewis{1:3:5:7:,X}\qquad\Lewis{0:2:4:6:,X}\bigbreak
+
+\Lewis[lewis dist=0.2em]{1:3:5:7:,X}\qquad
+\Lewis[lewis dist=0.2em]{0:2:4:6:,X}\bigbreak
+
+\Lewis[lewis dist=4pt,lewis radius=1.5pt]{1:3:5:7:,X}\qquad
+\Lewis[lewis dist=4pt,lewis radius=1.5pt]{0:2:4:6:,X}*
+
+A problem sometimes occurs with the decorations of Lewis in the odd directions. In the example below with the atom ``O'', the decoration in position 1 seems farther from the atom than the decoration in position 4:
+\exemple{Odd directions}/\huge
+\Lewis{1|4|,O}/
+However, it is not the case as shown below by drawing the bounding box of the atom:
+\exemple{Optical illusion}/\huge
+\fboxsep0pt
+\def\printatom#1{\fbox{$\mathrm{#1}$}}
+\Lewis{1|4|,O}/
+\label{opt.lewis}The impression of greater distance is due to the shape of the letter ``O'' which is farther from the one of the bounding box in the corners, that is to say, in odd directions.
+
+To move nearer (or farther) the Lewis drawings in odd directions, the \chevrons{clé} \CFkv{lewis diag coeff}{decimal} sets the factor which multiplies the gap between the bounding box and decoration Lewis. For the letter ``O'', it seems that 0.5 is the appropriated value:
+\exemple*{Optional argument of \string\lewis}/\huge
+\Lewis{1|4|,O}\quad \Lewis[lewis diag coeff=0.5]{1|4|,O}
+
+\Lewis{0:5:,O}\quad \Lewis[lewis diag coeff=2]{0:5:,O}\quad \Lewis[lewis diag coeff=0.5]{0:5:,O}/
+
+\subsection{Stacking characters}
+The macros\label{chemabove}
+\begin{center}
+ \Verb|\chemabove[<dim>]{<code>}{<stuff>}|
+\end{center}
+and
+\begin{center}
+ \Verb|\chembelow[<dim>]{<code>}{<stuff>}|
+\end{center}
+place the \Verb-<stuff>- above and below the \Verb-<code>- respectively at a vertical distance \Verb-<dim>-, without changing the \falseverb{bounding box} of \Verb-<code>-. The optional argument allows, if written, to specify this dimension at each call. If the optional argument is not used, a default size will be taken: its value is \CFval{1.5pt} but it can be modified with the \chevrons{key} \CFkv{stack sep}{dim}.
+
+These commands are independent of the macro \verb-\chemfig- and can be used either inside or outside its argument.
+
+They are especially useful in rings, if care is taken to put braces around the letters A, B, C and D in order to prevent \CF from starting a new atom on these letters:
+\exemple{Staking in rings}|\chemfig{*5(-\chembelow{A}{B}--\chemabove{C}{D}--)}|
+
+They are sometimes useful for placing pseudo-exponents which do not change the bounding box of the atoms, so that the bonds do not end up being too short:
+\exemple{Hydronium ion}*\chemfig{H-\chemabove{\lewis{5|7,O}}{\quad\scriptstyle+}(-[2]H)-H}*
+
+\label{Chemabove}The \falseverb{\Chemabove} and \falseverb{\Chembelow} commands work in the same way, except that the bounding box takes into account the \Verb-<stuff>- placed above or below.
+
+\section{Using {\protect\ttfamily\protect\textbackslash chemfig} in the {\protect\ttfamily tikzpicture} environment}
+It is possible to call the \falseverb{\chemfig} inside a {\ttfamily\falseverb{tikzpicture}} environment:
+\exemple{\textbackslash chemfig inside tikzpicture}|\begin{tikzpicture}[help lines/.style={thin,draw=black!50}]
+ \draw[help lines] (0,0) grid (4,4);
+ \draw(0,0) -- (2,1);
+ \draw(2,2) circle (0.5);
+ \node at (1,3) {\chemfig{A=B-[:30]C}};
+ \node[draw,red,anchor=base] at(3,2){\chemfig{X>[2,,,,blue]Y}};
+ \end{tikzpicture}|
+
+\section{Beyond chemistry}\label{style.noeuds}
+At heart \CF is a tool for drawing graphs, and this tool has been programmed to adapt it for chemistry. In some ways it is possible to return \CF to its roots to draw organization charts or other diagrams represented by graphs.
+
+Each atom is contained in a \TIKZ node. By default these nodes have an ``inner sep'' and an ``outer sep'' equal to 0pt. They are rectangular as seen on page~\pageref{longueur.liaison}. These defaults can be overwritten with the \chevrons{key} \CFkey{node style}, the argument of which is passed to \TIKZ and specifies the style of the nodes containing the atoms.
+
+In this example we specify only ``draw,inner sep=2pt'', which has the effect of drawing the outline of the nodes and separating the outline and node contents by 2pt. We also specify \CFkv{bond offset}{0pt} so that the bonds touch the edges of the nodes. The interatomic spacing is increased to 75pt. Finally, the command \falseverb{\printatom} is made as simple as possible so that math mode is no longer used and spaces are thus preserved.
+\exemple*{An organization chart}/\setchemfig{node style={draw,inner sep=2pt},bond offset=0pt,atom sep=75pt}
+\renewcommand\printatom[1]{#1}
+\chemfig{The boss-[6]Me(-[4]Them(-[6]The others)(-[7,2]Group 1))-You(-[:-120,0.5]Him)(-[:-60,0.5]Her)}/
+
+Here is another organization chart where the nodes are circular and coloured cyan:
+\exemple*{Family diagram}/\setchemfig{bond offset=0pt,atom sep=80pt,node style={draw,circle,fill=cyan,minimum size=25pt}}
+\renewcommand\printatom[1]{\textsf{#1}}
+\chemfig{Me(-[:-50,1.2]Brother)(-[:-10]Brother(-[:15]Niece)(-[:-35]Niece))
+(-[:-155,0.8]Sister-[:-80]Nephew)(-[:95,1.25]Father(-[:-25,0.8]Uncle)(-[:-65,0.8]Aunt))
+(-[:135]Mother-[:-95,0.5]Uncle)}/
+
+\section{Annotated examples}\label{exemples.commentes}
+In this chapter, several molecules will be drawn, putting into use the methods previously described. The aim here is to show a logical order for putting together a molecule so that the user unfamiliar with \CF will learn how to construct complex molecules. The construction steps will be shown to help with this learning process.
+
+In addition, several possibilities --- some intuitive and others less so --- will be shown which give the same graphical results, with the objective being to show that \CF allows some flexibility in encoding molecules. One can see how each is put together and adopt the methods with which one is most comfortable.
+
+\subsection{Ethanal}
+Here we will draw the ethanal (or acetaldehyde) molecule: \chemfig{H-C(-[2]H)(-[6]H)-C(-[7]H)=[1]O}
+
+The best method for non-cyclic molecules is to select the longest chain. Here one could take ``\verb|H-C-C=0|'' for example. The bond \verb|C=O| is tilted to 45\degres{} by using the predefined angle ``\verb-[1]-''. This give a ``backbone'' of the molecule to which the branches merely have to be added:
+\exemple{Backbone of ethanal}|\chemfig{H-C-C=[1]O}|
+
+The three hydrogen atoms still have to placed at the correct orientation with the help of predefined angles. The first is at 90\degres{} with the branch ``\verb/(-[2]H)/'', the second at 270\degres{} with ``\verb/(-[6H])/'', and the one on the right at 315\degres{} with ``\verb/(-[7]H)/'':
+\exemple{Ethanal}|\chemfig{H-C(-[2]H)(-[6]H)-C(-[7]H)=[1]O}|
+
+\subsection{2-amino-4-oxohexanoic acid}
+Here is the molecule to be drawn: \chemfig{-[::+30]-[::-60](=[:-90]O)-[::+60]-[::-60](-[:-90]NH_2)-[::+60](=[:90]O)-[::-60]OH}
+
+As is often the case for most molecules, there are several methods and for each several different ways of getting the result. Here we will look at four different methods.
+
+\subsubsection{Absolute angles}
+We will first of all draw the central chain with absolute angles. We set the default angle to $+30\degres$ with the optional argument, and so only the descending bonds need to have their absolute angle set to $-30\degres$:
+\exemple{Backbone (absolute angles)}|\chemfig{[:30]--[:-30]--[:-30]--[:-30]OH}|
+
+The branches ``\verb/(=[6]O)/'', ``\verb/(-[6]NH_2)/'' and ``\verb/(=[2]O)/'' still have to be added to the correct vertices:
+\exemple{Molecule (absolute angles)}|\chemfig{[:30]--[:-30](=[6]O)--[:-30](-[6]NH_2)-(=[2]O)-[:-30]OH}|
+
+\subsubsection{Relative angles}
+A more general approach uses only relative angles, in this way:
+\exemple{Structure (relative angles)}|\chemfig{[:30]--[::-60]--[::-60]--[::-60]OH}|
+
+then
+\exemple{Molecule (relative angles)}|\chemfig{[:30]--[::-60](=[::-60]O)--[::-60](-[::-60]NH_2)
+-(=[::60]O)-[::-60]OH}|
+
+\subsubsection{Ring}
+Since the angles between the bonds are 120\degres{}, it is possible to use a 6-ring, although this method is less natural. Here we take advantage of the fact that a ring can be left unfinished. The ring must be rotated 120\degres{} so that the first vertex is to the south-east of the ring:
+\exemple{Backbone (ring)}|\chemfig{[:120]NH_2*6(---=O)}|
+
+Now the branches must be added to the right vertices:
+\exemple{Molecule (ring)}|\chemfig{[:120]NH_2*6(-(-(=[::60]O)-[::-60]OH)--(--[::60])=O)}|
+
+\subsubsection{Nested rings}
+Delving deeper into the ring method, we can also consider nesting incomplete 6-rings. We could start with this backbone:
+\exemple{Backbone (nested rings)}|\chemfig{*6(--*6(--=O))}|
+
+And then add the bonds which leave the vertices of these rings. There are no angles to worry about because the bonds leaving the rings are the bisectors of the sides of the ring, exactly what we want here:
+\exemple{Molecule (nested rings)}|\chemfig{*6((-)-(=O)-*6(-(-NH_2)-(-OH)=O))}|
+
+A close look shows that the second line segment of the double bond to the oxygen atom is \emph{inside} the incomplete 6-ring\footnote{This was also true for the preceding method with one ring.} Despite its brevity, this code does not give a perfect drawing. This can of course be corrected by adding a little to the code:
+\exemple{Molecule (corrected nested rings)}|\chemfig{*6((-)-(=O)-*6(-(-NH_2)-(-OH)(=[::60]O)))}|
+
+\subsection{Glucose}
+The goal here is to represent the glucose molecule according to several different conventions.
+
+\subsubsection{Skeleton diagram}
+The code here looks like that of 2-amino-4-oxohexanoic acid. This gives almost the same structure with absolute angles, except here the default angle is $-30\degres$:
+\exemple[60]{Backbone}|\chemfig{[:-30]HO--[:30]--[:30]--[:30]-H}|
+
+Adding the branches is no problem. We use predefined absolute angles:
+\exemple[60]{Glucose, skeleton diagram}|\chemfig{[:-30]HO--[:30](<[2]OH)-(<:[6]OH)
+-[:30](<:[2]OH)-(<:[6]OH)-[:30](=[2]O)-H}|
+
+\subsubsection{Fisher projection}
+The goal is to get the molecule below:
+\begin{center}
+ \definesubmol{x}{(-[4]H)(-[0]OH)}
+ \definesubmol{y}{(-[0]H)(-[4]OH)}
+ \chemfig{[2]OH-[3]-!x-!x-!y-!x-=[1]O}
+\end{center}
+The idea is to begin to draw the longest chain vertically by giving a default angle of ``\verb-[2]-''. Here is the skeleton, where we have added lower case letters at the end of each vertical bond:
+\exemple{Skeleton}|\chemfig{[2]OH-[3]-a-b-c-d-=[1]O}|
+
+Next we define two aliases for the horizontal bonds and the atoms at their ends. Lets choose ``\verb-x-'' which we will put in place of the lower case a, c and d, and ``\verb-y-'' which will replace the letter c. Since these alias are just one character, we do not need braces and can write ``\verb-!x-'' instead of ``\verb-!{x}-'':
+\exemple{Glucose (Fisher projection)}|\definesubmol{x}{(-[4]H)(-[0]OH)}
+\definesubmol{y}{(-[0]H)(-[4]OH)}
+\chemfig{[2]OH-[3]-!x-!x-!y-!x-=[1]O}|
+
+\subsubsection{``Chair'' representation}
+We will depict the $\alpha$-D-glucose molecule:
+\chemfig{?(-[:190]OH)-[:-50](-[:170]OH)-[:10](-[:-55,0.7]OH)-[:-10](-[6,0.7]OH)-[:130]O-[:190]?(-[:150,0.7]-[2,0.7]OH)}
+
+To do this, we will first of all draw five sides of the chair and link the first vertex to the last with a hook ``\verb-?-''. We will use the following absolute angles, running counterclockwise: $-50\degres$, $10\degres$, $-10\degres$, $130\degres$, $190\degres$.
+\exemple{Structure}|
+\chemfig{?-[:-50]-[:10]-[:-10]-[:130]O-[:190]?}|
+
+Now we simply add the branches inside parentheses. The angles are chosen to give the best impression of perspective, and some bonds are shortened by a factor of 0.7:
+\exemple{Chair representation}|\chemfig{?(-[:190]OH)-[:-50](-[:170]OH)-[:10](-[:-55,0.7]OH)
+-[:-10](-[6,0.7]OH)-[:130]O-[:190]?(-[:150,0.7]-[2,0.7]OH)}|
+
+\subsubsection{Haworth projection}
+The goal is to depict this D-glucopyranose molecule:
+\chemfig[cram width=2pt]{HO-[2,0.5,2]?<[7,0.7](-[2,0.5]OH)-[,,,,line width=2pt](-[6,0.5]OH)>[1,0.7](-[6,0.5]OH)-[3,0.7]O-[4]?(-[2,0.3]-[3,0.5]OH)}
+
+First of all we will choose the longest chain, which starts at the ``HO'' group on the left and continues through fives sides of the ring. The ring will be closed with a hook. For the vertical bond which leaves from the first ``HO'' group, we need to specify that it will leave from the second atom using the optional argument. Furthermore, it will be shortened with a coefficient of 0.5. Its optional argument will thus be ``\verb/[2,0.5,2]/''.
+
+Next, to give the impression of perspective to the ring, the diagonal bonds will be shortened by a coefficient of 0.7. For the bold diagonal lines we will use Cram bonds, having redefined the base of the triangles to be 2pt. The bold horizontal bond needs to be drawn with a thickness of 2pt, and so its optional argument will be ``\verb/[0,,,,line width=2pt]/''. Here is the skeleton of the molecule:
+\exemple{Structure}|\chemfig[cram width=2pt]{HO-[2,0.5,2]?<[7,0.7]-[,,,,
+line width=2pt]>[1,0.7]-[3,0.7]O-[4]?}|
+
+All that needs to be done now is to add the branches at the correct places, giving the right absolute angles and sometimes reducing the length to better give the illusion of perspective:
+\exemple{Projection de Haworth}|\chemfig[cram width=2pt]{HO-[2,0.5,2]?<[7,0.7](-[2,0.5]OH)-[,,,,
+line width=2pt](-[6,0.5]OH)>[1,0.7](-[6,0.5]OH)-[3,0.7]
+O-[4]?(-[2,0.3]-[3,0.5]OH)}|
+
+\subsection{Adrenaline}
+We want to draw the adrenaline molecule:
+\chemfig{*6((-HO)-=-(-(<[::60]OH)-[::-60]-[::-60,,,2]HN-[::+60]CH_3)=-(-HO)=)}
+
+We are going to use two different methods.
+
+\subsubsection{Using one ring}
+First of all, we start with a 6-ring and we draw the start of the branches which leave it:
+\exemple[60]{Skeleton of adrenaline}|\chemfig{*6((-HO)-=-(-)=-(-HO)=)}|
+
+The branch on the right still needs to be completed using, for example, relative angles:
+\exemple[60]{Adrenaline, step two}|\chemfig{*6((-HO)-=-(--[::-60]-[::-60]
+HN-[::+60]CH_3)=-(-HO)=)}|
+
+Then we need to add a Cram-bonded \verb-OH- and indicate that the bond which arrives at ``\verb-HN-'' does so on the second atom, i.e., ``N''. We use the fourth optional argument of the bond:
+\exemple[60]{Adrenaline}|\chemfig{*6((-HO)-=-(-(<[::60]OH)-[::-60]-[::-60,,,2]
+HN-[::+60]CH_3)=-(-HO)=)}|
+
+\subsubsection{Using two rings}
+This method is less natural, but the goal is to show here how to make a bond invisible.
+
+We could improve this code by considering that the drawing of the adrenaline molecule is made of two 6-rings adjacent to each other:
+\exemple[60]{Adrenaline, two-ring skeleton}|\chemfig{*6((-HO)-=*6(--HN---)-=-(-HO)=)}|
+
+Now the first two bonds of the ring on the right need to be made invisible. To do this we use the argument that is passed to \TIKZ, specifying ``\verb-draw=none-''. These bonds will thus have this code: ``\verb/-[,,,,,draw=none]/''. To keep the code readable, we define an alias named ``\verb-&-'' for these bonds:
+\exemple[60]{Adrenaline, step two}|\definesubmol{&}{-[,,,,draw=none]}
+\chemfig{*6((-HO)-=*6(!&!&HN---)-=-(-HO)=)}|
+
+The rest becomes easy; just add the branches to the right vertices:
+\exemple[60]{Adrenaline, step three}|\definesubmol{&}{-[,,,,draw=none]}
+\chemfig{*6((-HO)-=*6(!&!&HN(-CH_3)--(<OH)-)-=-(-HO)=)}|
+
+To finish, we specify that the bonds that \emph{arrive at and leave from} ``\verb-HN-'' must do so at the second atom. We therefore define another alias for the invisible bond which arrives at ``\verb-HN-'':
+\exemple[60]{Adrenaline}|\definesubmol{&}{-[,,,,draw=none]}
+\definesubmol{&&}{-[,,,2,draw=none]}
+\chemfig{*6((-HO)-=*6(!&!{&&}HN(-CH_3)-[,,2]-(<OH)-)-=-(-HO)=)}|
+
+\subsection{Guanine}
+We will draw the guanine molecule:
+\chemfig{*6((-H_2N)=N-*6(-\chembelow{N}{H}-=N?)=?-(=O)-HN-[,,2])}\medskip
+
+First of all, let's begin by drawing the nested rings, putting just the nitrogen atoms at the vertices:
+\exemple{Guanine, skeleton}|\chemfig{*6(=N-*6(-N-=N)=--N-)}|
+
+Then we can draw the horizontal bond in the right ring with a hook. We will also place a hydrogen atom under the nitrogen atom of the 5-ring with the command \verb-\chembelow{N}{H}-. We also need to write ``\verb-HN-'' instead of ``\verb-N-'' at the vertex at the upper left of the molecule:
+\exemple{Guanine, step two}|\chemfig{*6(=N-*6(-\chembelow{N}{H}-=N?)=?--HN-)}|
+
+We note that one bond leaves from the wrong atom\footnote{This seems illogical because the angle of the bond from the \texttt{HN} group toward the first vertex lies between $-90\degres$ and $90\degres$; \CF should therefore leave from the second atom. To explain this contradiction, one must know that in rings, the last bond always links the last vertex to the first, ignoring the \emph{calculated theoretical} angle of this bond (which here is $-90\degres$). \CF uses this theoretical angle to determine the departure and arrival atoms, but does not use it to draw the bond because the two ends are already defined. The departure atom for the last bond is thus the first atom.}! The automatic calculation mechanism must be corrected so that the bond leaves from the second atom ``\verb-N-'' instead of the first. To do this we give an optional argument for the last bond of the first 6-ring ``\verb-[,,2]-'':
+\exemple{Guanine, step three}|\chemfig{*6(=N-*6(-\chembelow{N}{H}-=N?)=?--HN-[,,2])}|
+
+Simply add the branches to the right vertices. Note especially the branch leaving the first vertex of the first 6-ring ``\verb/(-N_2N)/'':
+\exemple{Guanine}|\chemfig{*6((-H_2N)=N-*6(-\chembelow{N}{H}-=N?)=?-(=O)-HN-[,,2])}|
+
+We could also draw the same molecule with a regular 5-ring, as is sometimes done:
+\exemple{Guanine with 5-ring}|\chemfig{*6((-H_2N)=N-*5(-\chembelow{N}{H}-=N-)=-(=O)-HN-[,,2])}|
+
+\section{How to \protect\ldots}
+\subsection{Write a colored atom}
+Since the package \verb-xcolor- is loaded by \TIKZ, itself loaded by \CF, we can write color commands in the code of a molecule, mainly \falseverb{\color} and \falseverb\textcolor. The atoms are displayed in \TIKZ nodes which behaves like boxes of \TeX{} and it is as if these atoms were put in a group. Therefore, the color change remains local to the atom.
+
+\exemple{Colors}/\chemfig{C\color{blue}H_3-C(=[1]O)-[7]O\color{red}H}/
+
+This code does not work, because of the rule used to separate atoms: here, the first atom starts at ``\verb-C-'' and spreads to the next uppercase letter. Therefore, this atom is ``\verb-C\color{blue}-'' and the color change occurs at the end of atom and has no effect. We need to force \CF to cut the first atom just after ``\verb-C-'' with the character ``\verb-|-'' and then include \verb-\color{blue}H_3- between braces so that \CF does not stop the atom 2 before the uppercase ``\verb-H-'' which would leave the color change alone and therefore ineffective in an atom:
+
+\exemple{Colors}/\chemfig{C|{\color{blue}H_3}-C(=[1]O)-[7]O|{\color{red}H}}/
+
+The same effect can be obtained with \verb-\textcolor-:
+
+\exemple{Colors}/\chemfig{C|\textcolor{blue}{H_3}-C(=[1]O)-[7]O|\textcolor{red}{H}}/
+
+The main disadvantage is that we have to do the same for every atom that need to be colored, even if they are contiguous.
+
+\subsection{Add a superscript without modifying a bond}
+Adding a \falseverb{charge} to an atom with a mathematical exponent implies that the box (and therefore the \TIKZ node) containing the atom has its dimensions modified. It has no importance when the atom is trailing but the alignment may be compromised if a bond is attached to the atom. The first reaction is to put the charge in a box with no width and therefore use the command \falseverb\rlap\footnote{If you have to put the charge at the left of the atom, you must use the command \texttt{\string\llap.}}, which often gives good results. We see here that with \falseverb\rlap, the \falseverb{horizontal alignment} of atoms is preserved:
+\exemple{Charge and bond}/\chemfig{A^+-[2]B}
+\qquad
+\chemfig{A\rlap{${}^+$}-[2]B}/
+If you want to use the command \verb-\oplus- which displays ``$\oplus$'', some could find that the charge is too low: $\mathrm{A^\oplus}$. In that case, why not use \falseverb{\chemabove} to put as precisely as you will, both vertically and horizontally the charge:
+\exemple{Charge et \string\chemabove}/\chemfig{\chemabove[0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}-[2]B}
+\qquad
+\chemfig{{\chemabove[-0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}}-[2]B}/
+We notice an additional level of braces for the second molecule. Indeed, as we specify ``\verb/-0.5pt/'' for the optional argument of \falseverb{\chemabove} to lower the charge, it is necessary to prevent \CF to understand the sign ``\verb/-/'' as a single bond.
+
+To add a load near the vertex of a cycle , the best method is to attach an invisible bond to this vertex, which is done here with \falseverb{\definesubmol} with a bond with a length coefficient equal to 0.2:
+\exemple{Charges and cycles}/\definesubmol\nobond{-[,0.2,,,draw=none]}
+\chemfig{*5(---(!\nobond\scriptstyle\oplus)-(!\nobond\scriptstyle{-})-)}/
+
+\subsection{Draw a curve bond}
+We have already seen that with the \TIKZ library ``\verb-decorations.pathmorphing-'', we can draw a wavy bond:
+
+\exemple{Wavy bond}|\chemfig{A-[,3,,,decorate,decoration=snake]B}
+
+\chemfig{A-[,3,,,decorate,decoration={snake,amplitude=1.5mm,
+ segment length=2.5mm}]B}|
+
+For more flexibility, you can also define nodes using the character ``\verb-@-'' and reuse these nodes after the molecule has been drawn to connect them with a curved line using \falseverb\chemmove:
+
+\exemple{Curved bonds}/\chemfig{@{a}A-[,,,,draw=none]@{b}B}
+\chemmove{\draw[-](a)..controls +(45:7mm) and +(225:7mm)..(b);}
+\bigskip
+
+\chemfig{*6(@{a}---@{b}---)}
+\chemmove{\draw[-](a)..controls +(60:3em) and +(240:3em)..(b);}
+\quad
+\chemfig{*6(@{a}---@{b}---)}
+\chemmove{\draw[-](a)..controls +(60:3em) and +(30:1em)..
+ ++(20:2em) ..controls +(210:3em) and +(-120:4em) ..(b);}/
+
+\subsection{Draw a ploymer element}\label{polymerdelim}
+The macro \verb|\polymerdelim|, until now undocumented and in the test phase, becomes officially released in \CF with version 1.33. Its syntax is as follows:
+\begin{center}
+ \Verb|\polymerdelim[<keys>=<values>]{<node1>}<node2>}|
+\end{center}
+
+The effect, after possibly \emph{two} compilations, is to place vertical delimiters at the specified nodes. The parameters are specified via the \chevrons{keys} and \chevrons{values}, which are listed below, default values and actions.
+\begin{center}
+\begin{tabular}{rlp{8cm}}\hline
+ \chevrons{keys} & default \chevrons{values} & Action\\\hline
+ \CFdelimparam{delimiters} & Defines the delimiters. If these delimiters are brackets, write \verb|delimiters={[]}|.\\
+ \CFdelimparam{height} & Defines the height (above the node) of the delimiters.\\
+ \CFdelimparam{depth} & Defines the depth (below the node) of the delimiters. If the \chevrons{value} is empty, then the depth is equal to the height.\\
+ \CFdelimparam{h align}&Boolean which, when \CFval{false}, places the 2nd delimiter on the 2nd node, at the risk that the delimiters are not on the same horizontal line.\\
+ \CFdelimparam{auto rotate}&Booléen which, when \CFval{true} and \CFkv{h align}{false}, automatically turns the delimiters to be perpendicular to the line that connects the two nodes.\\
+ \CFdelimparam{rotate}&When \CFkv{h align}{false} and \CFkv{auto rotate}{false}, sets the rotation angle of the two delimiters.\\
+ \CFdelimparam{open xshift}& Defines the horizontal offset of the opening delimiter.\\
+ \CFdelimparam{close xshift}& Defines the horizontal offset of the closing delimiter. If the \chevrons{value} is empty, then this offset becomes opposite to the offset of the opening delimiter.\\
+ \CFdelimparam{indice} & Defines the indices that will be placed at the right bottom of the closing delimiter.\\\hline
+\end{tabular}
+\end{center}
+\exemple*{Polymers}|Polyethylen:
+\chemfig{\vphantom{CH_2}-[@{op,.75}]CH_2-CH_2-[@{cl,0.25}]}
+\polymerdelim[height = 5pt, indice = \!\!n]{op}{cl}
+\bigskip
+
+Polyvinyl chloride:
+\chemfig{\vphantom{CH_2}-[@{op,1}]CH_2-CH(-[6]Cl)-[@{cl,0}]}
+\polymerdelim[height = 5pt, depth = 25pt, open xshift = -10pt, indice = \!\!n]{op}{cl}
+\bigskip
+
+Nylon 6:
+\chemfig{\phantom{N}-[@{op,.75}]{N}(-[2]H)-C(=[2]O)-{(}CH_2{)_5}-[@{cl,0.25}]}
+\polymerdelim[height = 30pt, depth = 5pt, indice = {}]{op}{cl}
+\bigskip
+
+Polycaprolactame
+\chemfig[atom sep = 2em]{[:-30]-[@{left,.75}]N(-[6]H)-[:30](=[2]O)--[:30]--[:30]--[@{right,0.25}:30]}
+\polymerdelim[height = 5pt, indice = \!\!n]{left}{right}
+\bigskip
+
+Polyphénylène sulfide:
+\chemfig{\vphantom{S}-[@{op,.75}]S-(**6(---(-[@{cl,0.25}])---))}
+\polymerdelim[delimiters = (), height = 15pt, indice = {}]{op}{cl}
+\bigskip
+
+\chemfig{-CH_2-CH([6]-CO-NH-CH_2-NH-CO-CH([4]-CH_2-)([0]-[@{downleft,0.8},2]CH_2
+-CH([2]-CO-NH_2)-[@{downright,0.3},2]CH_2-[,1.5]C?H-))-[@{upleft,0.8},2]CH_2
+-CH([6]-CO-NH_2)-[@{upright,0.3},2]CH_2-[,1.5]CH([6]-CO-NH-CH_2-NH-C?O)-}
+\polymerdelim[delimiters ={[]}, height = 5pt, depth = 40pt, indice = n]{upleft}{upright}
+\polymerdelim[delimiters ={[]}, height = 40pt, depth = 5pt, indice = n]{downleft}{downright}
+
+\chemfig{-[@{op,.5}:-30]O-[::60](=[::60]O)-[::-60]*6(-=-(-(=[::-60]O)-[::60]O-[::-60]-[::60]-[@{cl,.5}::-60])=-=)}
+\polymerdelim[height=6ex, indice=n, h align=false]{op}{cl}|
+
+\subsection{Draw the symmetrical of a molecule}\label{retournement}
+The two commands \falseverb{\hflipnext} and \falseverb{\vflipnext} allow to draw the symmetrical of the next molecule about a horizontal or vertical axis. If we want to draw more symmetrical molecules, we need to write these commands before each molecule involved.
+
+\exemple{Symmetry}/\chemfig{H_3C-C(=[:30]O)-[:-30]OH}% original
+
+\vflipnext
+\chemfig{H_3C-C(=[:30]O)-[:-30]OH}\medskip
+
+\chemfig{H_3C-C(=[:30]O)-[:-30]OH}% original
+\hflipnext
+\chemfig{H_3C-C(=[:30]O)-[:-30]OH}/
+
+\subsection{Add text above bonds and arc to angles}
+Once we have understood that the character ``\verb-@-'' can put a ``global'' \TIKZ node, that is to say a node accessible after the molecule has been drawn, everything that \TIKZ can do with nodes (that is to say a lot of things) becomes possible.
+
+To write something above or below a bond, we can put two ``global'' nodes on the atoms at the ends of this bond and write midway of them a text, raised or lowered so that it falls to just above or below the bond. This is done by the macro \verb-\bondname- in the code below.
+
+To draw an arc between two bonds, three atoms are involved on which we have to put three ``global'' nodes. The macro \verb-\arcbetweennodes- calculates the angle between two lines drawn from a node. Then \verb-\arclabel- draws an arc between two bonds and writes a text next to the arc: the optional argument of this macro is the \TIKZ code used to custom the arc. The second argument is the radius of the arc and the following three arguments are the names of global nodes between which the arc must be drawn, the middle name needs to be the vertex of the angle. The last argument is the text to write.
+
+\exemple*{Arcs and text on bonds}|\newcommand\angstrom{\mbox{\normalfont\AA}}
+\newcommand\namebond[4][5pt]{\chemmove{\path(#2)--(#3)node[midway,sloped,yshift=#1]{#4};}}
+
+\newcommand\arcbetweennodes[3]{%
+ \pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}%
+ \let#3\pgfmathresult}
+
+\newcommand\arclabel[6][stealth-stealth,shorten <=1pt,shorten >=1pt]{%
+ \chemmove{%
+ \arcbetweennodes{#4}{#3}\anglestart \arcbetweennodes{#4}{#5}\angleend
+ \draw[#1]([shift=(\anglestart:#2)]#4)arc(\anglestart:\angleend:#2);
+ \pgfmathparse{(\anglestart+\angleend)/2}\let\anglestart\pgfmathresult
+ \node[shift=(\anglestart:#2+1pt)#4,anchor=\anglestart+180,rotate=\anglestart+90,inner sep=0pt,
+ outer sep=0pt]at(#4){#6};}}
+
+\chemfig{@{a}A=[:30,1.5]@{b}B-[7,2]@{c}C-@{d}D}
+\namebond{a}{b}{\scriptsize My text}
+\namebond[-3.5pt]{b}{c}{\small\color{red}$\pi$}
+\namebond{c}{d}{\small1 \angstrom}
+\medskip
+
+Horizontal water molecule: \chemfig{@{1}H-[::37.775,2]@{2}O-[::-75.55,2]@{3}H}.
+\namebond{1}{2}{\footnotesize0.9584 \angstrom}
+\namebond{2}{3}{\footnotesize0.9584 \angstrom}
+\arclabel{0.5cm}{1}{2}{3}{\footnotesize104.45\textdegree}
+\qquad
+Water molecule rotated 30\textdegree: \chemfig{[:30]@1H-[::37.775,2]@2O-[::-75.55,2]@3H}
+\namebond12{\footnotesize0.9584 \angstrom}
+\namebond23{\footnotesize0.9584 \angstrom}
+\arclabel{0.5cm}{1}{2}{3}{\footnotesize104.45\textdegree}|
+
+\subsection{Schéma de Lewis à l'angle près}
+In some very special cases, it is sometimes necessary to position Lewis diagrams to the nearest degree and no longer to multiples of 45 degrees.
+
+For this, it is relatively easy to write a macro \verb-\mylewis-, admitting an optional argument (the length of the doublet) which is 2ex and two mandatory arguments; the first being the name of the atom and the second being the list of angles separated by commas.
+
+The trick is to create an invisible circular node that contains the atom and draw the dipoles at the desired angles so that they are tangent to this circle:
+
+\exemple*{Doublets au degrés prés}|\catcode`\_11
+\newcommand\mylewis[3][2ex]{% #1=longueur, #2=atome #3=liste des angles
+ \tikzpicture[baseline,anchor=base]%
+ \node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
+ \node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
+ \def\list_angle{#3,}%
+ \loop
+ \expandafter\grab_angle\list_angle\_nil
+ \pgfextractx\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimax{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimay{\the\CF_dim}%
+ \pgfmathparse{#1*sin(\current_angle)/2}\let\offset_xx\pgfmathresult
+ \pgfmathparse{#1*cos(\current_angle)/2}\let\offset_yy\pgfmathresult
+ \draw[line width=.4pt,overlay]
+ (\CF_dimax-\offset_xx,\CF_dimay+\offset_yy)--(\CF_dimax+\offset_xx,\CF_dimay-\offset_yy);%
+ \unless\ifx\empty\list_angle
+ \repeat
+ \endtikzpicture
+}
+\def\grab_angle#1,#2\_nil{\def\current_angle{#1}\def\list_angle{#2}}
+\catcode`\_8
+Essai : \mylewis{Cl}{15}\qquad \mylewis[3ex]{Cl}{-60}\qquad \mylewis[1.5ex]{Cl}{60,120,240,300}
+\bigskip
+
+\chemfig{P(-[:72]\mylewis{Cl}{-18,72,162})(-[:-72]Cl)
+(-[:144]Cl)(-[:-144]Cl)-\mylewis{Cl}{0,90,-90}}|
+
+\subsection{Dessiner des liaisons multiples}
+Again, the ``decorations.markings'' library allows to draw multiple bonds:
+
+\exemple*{Liaisons multiples}|\catcode`_=11
+\tikzset{nbond/.style args={#1}{%
+ draw=none,%
+ decoration={%
+ markings,%
+ mark=at position 0 with {\coordinate (CFstart@) at (0,0);},
+ mark=at position 1 with {%
+ \foreach\CF_i in{0,1,...,\number\numexpr#1-1}{%
+ \pgfmathsetmacro\CF_nbondcoeff{\CF_i-0.5*(#1-1)}%
+ \draw ([yshift=\CF_nbondcoeff\CF_doublesep]CFstart@)--(0,\CF_nbondcoeff\CF_doublesep);
+ }%
+ }
+ },
+ postaction={decorate}
+ }
+}
+\catcode`\_=8
+\chemfig{A-[1,,,,nbond=4]B-[:-30,,,,nbond=5]C-[6,,,,nbond=6]D}|
+
+\part{Reaction schemes}\label{schemas}
+Following several requests from users, it had become evident that \CF had a weakness regarding the drawing of reaction schemes. The gap is now filled. Therefore, \CF has now reached version 1.0 since I consider that the main features sought are now available.
+
+I thank Clemens \textsc {Niederberger} for his help and the tests he carried out on the new features presented in this part.
+\section{Overview}\label{schemestart}
+A reaction scheme must be contained between the commands ``\falseverb\schemestart'' and ``\falseverb\schemestop''. As shown in this example, \falseverb{debug information} is either hidden or displayed with the \chevrons{key} \CFkey{scheme debug} and the value \CFval{true} ou \CFval{false}:
+\exemple[50]{Example 1}/\setchemfig{scheme debug=false}
+\schemestart
+ \chemfig{*6(-=-=-=)}\arrow
+ \chemfig{X=[1]Y}\arrow
+ \chemfig{S>T}
+\schemestop
+\bigskip
+
+\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{*6(-=-=-=)}\arrow
+ \chemfig{X=[1]Y}\arrow
+ \chemfig{S>T}
+\schemestop/
+
+Some comments:
+\begin{itemize}
+ \item the \falseverb{\arrow} commands draw the arrows;
+ \item everything lying between two \falseverb{\arrow} commands is considered a \falseverb{compound}. It was decided that all possible settings, whether for arrows or compounds, are controlled by the arguments of the \falseverb{\arrow} command, whose syntax may become quite complex;
+ \item arrows are plotted horizontally, this can obviously be modified;
+ \item arrows are plotted on the imaginary line connecting the center of the compounds' bounding boxes (the red and blue squares are the anchoring points of arrows). This behavior can also be modified;
+ \item debug information is displayed with the \CFkey{scheme debug} \chevrons{key}. It consists of:
+ \begin{itemize}
+ \item the green label above the bounding boxes is the default name assigned to compounds by \CF. It follows the series "c1", "c2", etc. Numbering is reset to 1 for every reaction scheme.
+ \item display of the compounds bounding boxes;
+ \item the arrows start and end points represented by red points and anchors by blue points;
+ \end{itemize}
+ \item the distance from edge to edge between two compounds is defined with the \chevrons{key} \CFkv{compound sep}{dim}\label{compound sep}. By default this \CFval{dim} is 5em;
+ \item finally, the distance between the edges of the compounds and the beginning and end of the arrows is defined with the \chevrons{key} \CFkv{arrow offset}{dim}. By default, this \CFval{dim} is 4pt.\label{arrow offset}
+\end{itemize}
+
+\section{Arrow types}\label{arrow}
+When the \falseverb{\arrow} command is followed by an optional argument in braces (which is not mandatory), the argument defines the type of arrow:
+\exemple[50]{Arrow types}|\schemestart A\arrow{->}B\schemestop\par % by default
+\schemestart A\arrow{-/>}B \schemestop\par
+\schemestart A\arrow{<-}B \schemestop\par
+\schemestart A\arrow{<->}B \schemestop\par
+\schemestart A\arrow{<=>}B \schemestop\par
+\schemestart A\arrow{<->>}B \schemestop\par
+\schemestart A\arrow{<<->}B \schemestop\par
+\schemestart A\arrow{0}B \schemestop\par
+\schemestart A\arrow{-U>}B \schemestop|
+The arrow ``\verb/-U>/'' is not fully drawn, an arc can be added tangent to the arrow center using optional arguments on the command, see page~\pageref{fleche.arg.optionnel}. Here is a ``\verb/-U>/'' arrow with the arc on top of it: \schemestart A\arrow{-U>[$\scriptstyle x$][$\scriptstyle y$]}B\schemestop
+
+For the sake of clarity, capital letters will be used throughout the documentation instead of chemical formulas made with the \falseverb\chemfig command except for specific examples. Reaction schemes obviously work identically with letters and drawn molecules. Several examples are shown in the Gallery with proper reaction schemes.
+
+\section{Arrows features}
+Each \falseverb{arrow} is characterized by:
+\begin{itemize}
+ \item an angle expressed in degrees;
+ \item a coefficient that specifies the arrow length through the multiplication of the compounds spacing value defined by \CFkey{compound sep};
+ \item a style with \TIKZ instructions to customize the color, the thickness or other graphical attribute of the arrow.
+\end{itemize}
+
+These features are defined with the \chevrons{keys}
+\begin{itemize}
+ \item \CFkv{arrow angle}{angle}, which default value is 0;
+ \item \CFkv{arrow coeff}{decimal}, which default value is 1;
+ \item \CFkv{arrow style}{code tikz}, empty by default.
+\end{itemize}
+
+\exemple[50]{Definition of default values}/\schemestart A\arrow B\arrow C\schemestop
+
+\setchemfig{arrow angle=15,arrow coeff=1.5,
+arrow style={red, thick}}
+\schemestart A\arrow B\arrow C\schemestop
+
+\setchemfig{arrow coeff=2.5,arrow style=dashed}
+\schemestart A\arrow B\arrow C\schemestop
+
+\setchemfig{arrow angle={},arrow coeff={},arrow style={}}
+\schemestart A\arrow B\arrow C\schemestop/
+
+In order to locally modify one or all of these default values, the \falseverb{\schemestart} command accepts an optional argument in the form \verb-[angle,coeff,style]- which changes the default arrow features within the sole reaction scheme:
+\exemple[50]{Optional argument}/\setchemfig{arrow angle=5,arrow coeff=2.5,arrow style=blue}
+\schemestart A\arrow B\arrow C\schemestop
+
+\schemestart[0] A\arrow B\arrow C\schemestop
+
+\schemestart[0,1] A\arrow B\arrow C\schemestop
+
+\schemestart[0,1,thick] A\arrow B\arrow C\schemestop
+
+\schemestart[0,1,black] A\arrow B\arrow C\schemestop/
+
+Regarding style, the rule is: the style specified in the argument in brackets applies \emph{after} the default style, without overwriting it! This is why only the ``black'' color attribute is able to overwrite the `` blue'' default style.
+
+Finally, the \falseverb{\arrow} command accepts an optional argument in brackets in the form \verb-[angle,coeff,style]- to change the feature of that given arrow. As above, style applies \emph{after} the default style and \emph{after} the style possibly-specified in the optional argument of the \verb-\schemestart- command, again without overwrting them.
+\exemple[50]{Arrows features}/\schemestart
+ A\arrow[45]B\arrow[-20,2]C
+\schemestop
+\bigskip
+
+\schemestart
+ A\arrow[90,,thick]B\arrow[,2]C
+ \arrow[-45,,dashed,red]D
+\schemestop/
+
+\section{Compounds names}
+Automatic naming of compounds (``c1'', ``c2'', etc.) can be overridden. For this, the \falseverb{\arrow} command must be immediately followed by an argument in parentheses. The argument is of the form: \verb/(n1--n2)/. The compounds located at the beginning and at the end of the arrow are named ``\verb-n1-'' and ``\verb-n2-'', respectively. Any alphanumeric string can be used. The numbering of the names "c<n>" continues internally, so if a \falseverb{compound} has a different name than the default one, it does not affect the default name of the subsequent compounds.
+
+Names are optional, and the argument can be either \verb/(n1--)/ and \verb/(--n2)/.
+
+\exemple[50]{Compounds names}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow(aa--bb)B\arrow(--cc)C\arrow(--dd)D\arrow E
+\schemestop
+\bigskip
+
+\schemestart
+ A\arrow(aa--)B\arrow(bb--)C\arrow(cc--dd)D\arrow E
+\schemestop/
+Note that both methods are equivalent. Therefore, compounds can either be named by arrows preceding or following them. However, when a \falseverb{compound} is surrounded by two arrows specifying its name, the first name is ignored and a warning message is generated:
+\exemple[50]{Overfull naming}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow(--foo)B\arrow(bar--)C
+\schemestop/
+Here \falseverb{compound} ``B'' is called ``foo'' by the arrow pointing at it, and ``bar'' by the arrowing leaving from it. Thus \CF generates a warning mentioning that the name "foo" will be ignored:
+
+\hfill\verb-Package chemfig Warning: two names for the same node, first name "foo" ignored-\hfill\null
+
+\section{Anchoring}
+As noted above, arrows lie on the line connecting the center of the compounds' bounding boxes. Default anchors are called ``center'' in the sense of \TIKZ. Non-default anchoring points can be user-specified as well with an argument between brackets:
+
+\hfill\verb/(n1.a1--n2.a2)/\hfill\null
+
+where the anchor ``\verb-a1-'' or ``\verb-a2-'' can be: north west, north, north east, west, center, east, mid west, mid, mid east, base west, base, base east, south west, south , south east, text, or any angle. Here is an example from the \TIKZ manual where the anchors are located on the bounding box:
+\exemple*{TikZ anchoring}|\Huge
+\begin{tikzpicture}[baseline]
+\node[anchor=base west,name=x,draw,inner sep=25pt] {\color{lightgray}Rectangle\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+{north west/above left, north/above, north east/above right,west/left, center/above, east/right,
+mid west/left, mid/above, mid east/right,base west/left, base/below, base east/right,
+south west/below left, south/below, south east/below right,text/below,10/right,45/above,150/left}
+\draw[shift=(x.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement,inner sep=0pt,outer sep=2pt] {\scriptsize\texttt{(\anchor)}};
+\end{tikzpicture}|
+Like for names, arrival and departure anchoring points are independent and optional.
+
+In this example, the default alignment is not good because the two ``A'' are not aligned vertically. Debug information show that the default ``center'' anchors are not suitable:
+\exemple[50]{Alignment problems}/\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{A*5(-----)}
+ \arrow
+ \chemfig{A*5(---(-)--)}
+\schemestop/
+For the alignment to be correct, arrows will leave/arrive either from the anchor ``base east''/``base west'', or from anchor ``mid east''/``mid west'':
+\exemple[50]{Alignment problems}/\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{A*5(-----)}
+ \arrow(.base east--.base west)
+ \chemfig{A*5(---(-)--)}
+\schemestop
+\bigskip
+
+\schemestart
+ \chemfig{A*5(-----)}
+ \arrow(foo.mid east--bar.mid west)
+ \chemfig{A*5(---(-)--)}
+\schemestop/
+
+One last anchor need be specified: the anchor of the first \falseverb{compound} with respect to the \falseverb{baseline} of the text just before it. This is illustrated by the green point on the left-hand side of the scheme below:
+\exemple[50]{Initial anchoring}/\setchemfig{scheme debug=true}
+Preceding text:
+\schemestart
+ \chemfig{A*5(-----)}\arrow A
+\schemestop/
+
+The default position of this anchor on the first \falseverb{compound}'s bounding box is that given by ``text''. This position can be controlled with the second optional argument of the \falseverb{\schemestart} command:
+\exemple[50]{Adjusting the initial anchoring}/\setchemfig{scheme debug=true}
+Preceding text:
+\schemestart[][south]
+ \chemfig{A*5(-----)}\arrow A
+\schemestop
+\bigskip
+
+Preceding text:
+\schemestart[][north west]
+ \chemfig{A*5(-----)}\arrow A
+\schemestop
+\bigskip
+
+Preceding text:
+\schemestart[][west]
+ \chemfig{A*5(-----)}\arrow A
+\schemestop/
+
+\section{Compounds style}
+The \falseverb{\arrow} command can also include \TIKZ instructions to define the bounding box style ``\verb-s-'' of the reactant and the product of the reaction. This is done with the argument between parentheses. Always style through the argument in brackets of the \falseverb{\arrow}, we can specify with \TIKZ instructions the style ``\verb-s-'' to bounding box of the \falseverb{compound} of departure or of arrival. Therefore the complete syntax of the \falseverb{\arrow} command, with each specification being optional, is as follows:
+
+\hfill\verb/\arrow(n1.a1[s1]--n2.a2[s2]){arrow type}[angle,coeff,arrow style]/\hfill\null
+
+Like forn names, if specific styles are given to one compound by arrows arriving on it and leaving from it, the first style will be ignored with a warning.
+
+\exemple[60]{Compounds style}/\schemestart
+ A
+ \arrow([red]--[fill=blue,semitransparent,text opacity=1,
+ inner sep=10pt,rounded corners=2mm])
+ B
+\schemestop
+\bigskip
+
+\schemestart
+ A\arrow(--foo[yshift=5mm])B
+\schemestop/
+
+\label{setcompoundstyle}The macro \falseverb\setcompoundstyle\Verb-{<code tikz>}- allows to globally define the style of compounds displayed thereafter. Entering an empty argument results in the absence of style, which corresponds to the default case.
+
+Here a style is defined with round corner-shaped boxes and semitransparent background:
+\exemple[50]{Global styles}/\setchemfig{compound style={draw,line width=0.8pt,
+semitransparent,text opacity=1,inner sep=8pt,
+rounded corners=1mm}}
+\schemestart
+ A\arrow([fill=red]--[fill=blue])[90]
+ B\arrow(--[fill=gray])
+ C\arrow(--[fill=green])[-90]
+ D\arrow(--[draw=none])[-180]
+\schemestop/
+
+\section{Branching}
+So far, only linear reaction schemes have been treated. Branched schemes are also possible and this is where compound names play a key role. When a name is preceded by ``\verb-@-'' in the argument between brackets of the \falseverb{\arrow} command, it means that the \falseverb{compound} already exists. Several scenarios are possible:
+\begin{itemize}
+ \item \verb/(@n1--n2)/: the arrow will leave from the existing compound ``\verb-n1-'' and the scheme will continue following the arrow, thus creating a branch;
+ \item \verb/(@n1--@n2)/: the arrow is drawn between two existing compounds, no matter whether they are already defined or whether they will later in the reaction scheme: therefore this syntax can be placed \emph{anywhere} in the code of the reaction scheme;
+ \item \verb/(n1--@n2)/: this syntax is not permitted;
+\end{itemize}
+
+In the following example, 3 branches are made, a first one from ``B'', a second one from ``D'' and a last one from ``X''. Finally one more arrow connects two existing compounds: ``XX'' and ``D'':
+\exemple[50]{Branching}/\schemestart
+ A\arrow(aa--bb)B\arrow(--cc)C\arrow D
+ \arrow(@bb--xx1)[-90]X\arrow[-90]Y% 1st branch
+ \arrow(@c4--)[-90]Z\arrow W% 2nd branch
+ \arrow(@xx1--xx2)[-45]XX% 3rd branch
+ \arrow(@xx2--@c4)% XX-to-D arrow
+\schemestop/
+
+One may wish to have ``Y'' and ``XX'' on the same horizontal line. To achieve this, a horizontal invisible bond is drawn between ``Y'' and ``XX''; the scheme is completed with a final arrow between the two existing compounds ``XX'' and ``D'':
+\exemple[50]{Branching}/\schemestart
+ A\arrow(aa--bb)B\arrow(--cc)C\arrow D
+ \arrow(@bb--xx1)[-90]X\arrow[-90]Y\arrow(--xx2){0}XX
+ \arrow(@c4--)[-90]Z\arrow W
+ \arrow(@xx1--@xx2)% X-to-XX arrow
+ \arrow(@xx2--@c4)% XX-to-D arrow
+\schemestop/
+
+\section{Subscheme}\label{subscheme}
+A fraction of the reaction scheme can be defined within a single bounding box, so that \CF treats it as a \falseverb{compound}. The reaction scheme fraction is defined inside the compulsory argument between braces of the \falseverb{\subscheme} command so it is subsequently regarded as a single entity. When \falseverb{\subscheme} is located after an arrow, the command labels this subscheme as a \falseverb{compound} named ``c<n+1>'':
+\exemple[50]{Subscheme}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow
+ \subscheme{B\arrow[-90,2]C}
+ \arrow
+ D
+\schemestop/
+Although this is not clearly seen because of labels overlap, the box around the subscheme is called ``c2'', and name numbering continues inside the subscheme with B called ``c3'' and C called ``c4''. Since the first \falseverb{compound} in the subscheme is ``B'', the subscheme's baseline is that of ``B''. This can be pointed out by specifying the anchors:
+\exemple[50]{Subscheme}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow(--.mid west)
+ \subscheme{B\arrow[-90,2]C}
+ \arrow
+ D
+\schemestop/
+Note that since ``\falseverb\subscheme\Verb-{<scheme>}-'' is only a convenient shortcut for
+\begin{center}
+\falseverb\schemestart\Verb-<scheme>-\falseverb\schemestop
+\end{center}
+Consequently, it can be used with the same optional arguments as \falseverb\schemestart.
+
+\label{chemleft}\CF provides the \falseverb{\chemleft} and \falseverb{\chemright} command pair. These allow to set expandable delimiters on either side of a material. The commands must be followed by delimiters, just like in the case of \TeX{} primitive commands \verb-\left- and \verb-\right-:
+\begin{center}
+ \Verb/\chemleft<car1><material>\chemright<car2>/
+\end{center}
+where \Verb-<car1>- and \Verb-<car2>- can be ``('' et ``)'' or ``['' and ``]'', or any other expandable delimiter consistent with the \verb-\left- et \verb-\right- commands.
+\exemple{The \string\chemleft\ and \string\chemright macros}/\chemleft\lfloor\chemfig{A-[1]B}\chemright)
+
+\chemleft\{\chemfig{A-[1,1.25]B-[6,1.25]C}\chemright|
+
+\chemleft[\chemfig{H-[1]O-[7]H}\chemright]/
+The code of the reaction scheme discussed above including \falseverb{\chemleft} and \falseverb{\chemright} is written:
+\exemple{Reaction scheme with \string\chemleft\ and \string\chemright}/\schemestart
+ A\arrow
+ \chemleft[\subscheme{B\arrow[-90,2]C}\chemright]
+ \arrow
+ D
+\schemestop/
+\label{chemup}By analogy, the macros \falseverb{\chemup} and \falseverb{\chemdown} can be used to draw expandable delimiters above and below the material, respectively:
+\begin{center}
+ \Verb/\chemup<car1><material>\chemdown<car2>/
+\end{center}
+For example:
+\exemple{The \string\chemup\ and \string\chemdown macros}/\schemestart[-90]
+X\arrow
+\chemup\{\chemfig{A-[1]B-[7]C}\chemdown\}
+\arrow Y
+\schemestop
+\qquad
+\schemestart[-90]
+X\arrow
+\chemup[\chemfig{A-[1]B-[7]C}\chemdown]
+\arrow Y
+\schemestop/
+
+Delimiters can can also be drawn through compounds' style and apply them to a random compound (and hereby to a subscheme). These expandable delimiters (parentheses, brackets, braces) can be used upon loading the ``matrix'' \TIKZ library in the document preamble:
+
+\hfill\verb-\usetikzlibrary{matrix}-\hfill\null
+
+Since the \falseverb{\chemleft}, \falseverb{\chemright}, \falseverb{\chemup} and \falseverb{\chemdown} commands are available, the \CF package will \emph{not} automatically load the library. As long as the user want to access this special set of delimiters, the library must be explicitly loaded.
+
+The same brackets-delimited subscheme as above is presented again:
+\exemple[50]{The ``matrix'' library delimiters}/\schemestart
+ A\arrow(--[left delimiter={[}, right delimiter={]}])
+ \subscheme{B\arrow[-90,2]C}
+ \arrow
+ D
+\schemestop/
+Since the delimiters are drawn outside the bounding box, it is advisable to slightly shorten the incoming and outgoing arrows:
+\exemple[50]{Subscheme}/\schemestart
+ A\arrow(--[left delimiter={[},
+ right delimiter={]}])[,,shorten >=6pt]
+ \subscheme{B\arrow[-90,2]C}
+ \arrow[,,shorten <=6pt]
+ D
+\schemestop/
+
+Subschemes should be used with care, undesired results are sometimes observed. In this example, a subscheme is used to horizontally align 3 different compounds:
+\exemple[50]{Subscheme}/\setchemfig{scheme debug=true}
+\schemestart
+ A
+ \arrow{0}[-90]
+ \subscheme{%
+ tagada\arrow{}
+ tsoin\arrow{}
+ fin}
+ \arrow(xx--yy){}E
+ \arrow(@c1--@c3){}
+ \arrow(@c1--@c5){}
+ \arrow(@c1--@c4){}
+\schemestop/
+The center of the subscheme is exactly located on the same vertical line as the center of compound "A". This is because the two entities are connected by an invisible arrow with a $-90 $ angle. However, the arrow between the two pre-existing compounds ``A'' and ``tsoin'' is \emph{not} vertical because ``tsoin'' is not on the center of the subscheme since "tagada" is wider than "end". If this arrow is to be vertical within the use of the \falseverb{\subscheme} command, one must find a correct angle for the arrival anchor of the invisible arrow by try-and-error.
+
+A much simpler method is to use a branch instead of a subscheme: draw a \emph{visible} arrow between ``A'' and ``tsoin'', and then draw horizontal arrows on both sides of ``tsoin'', with a branch for the right-hand side arrows.
+\exemple[50]{Subscheme}/\setchemfig{scheme debug=true}
+\schemestart
+ A
+ \arrow(--tsoin){->}[-90]
+ tsoin
+ \arrow{<-}[180]
+ tagada
+ \arrow(@tsoin--fin){}
+ fin
+ \arrow{}
+ E
+ \arrow(@c1--@c3){}
+ \arrow(@c1--@fin){}
+\schemestop/
+
+\section{Arrows optional arguments}\label{fleche.arg.optionnel}
+Within the argument in braces of the \falseverb\arrow command, the arrow name can be followed by optional arguments written between brackets. Here are the possible values for these optional arguments and their meaning, as defined by \CF:
+\begin{itemize}
+ \item the arrows ``\verb|->|'', ``\verb|<-|'', ``\verb|<->|'', ``\verb|<=>|'', ``\verb|<<->|'',``\verb|<->>|'', ``\verb|-/>|'' have three optional arguments:
+ \begin{itemize}
+ \item the first one contains the ``label'' to be placed above the arrow;
+ \item the second one contains the ``label'' to be placed below the arrow. The orientation of these two labels is given by the same angle as the arrow. The perpendicular shift between the arrow and the label anchor can be adjusted with the \chevrons{key} \CFkv{arrow label sep}{dim}\label{arrow label sep} which value is 3pt by default. Labels contained in the two optional arguments are \emph{not} typed in math mode.
+ \item the third one is a dimension corresponding to a shift perpendicular to the arrow that can be applied to it: the dimension is positive for an upward shift of the arrow (and of its labels, if any), and negative for a downward shift.
+ \end{itemize}
+ \item the ``\verb|-U>|'' arrow has 5 optional arguments:
+ \begin{itemize}
+ \item the first three are identical to those found in the other arrow types;
+ \item the fourth one is a coefficient (which is 0.333 by default) which multiplies the length of the arrow to get the radius of the arc;
+ \item the fifth one is the half-angle from the center of the arc path, it is 60 degrees by default.
+ \end{itemize}
+ \item the invisible arrow ``\verb-0-'' accepts two optional arguments of the same type as the first two listed above;
+\end{itemize}
+\exemple[50]{Arrows optional arguments}/\setchemfig{scheme debug=false}
+\schemestart A\arrow{->[up][down]}B \schemestop
+\qquad
+\schemestart A\arrow{->[up][down][4pt]}B \schemestop
+\qquad
+\schemestart A\arrow{->[up][down][-4pt]}B \schemestop
+\medskip
+
+\schemestart A\arrow{<=>[up][down]}[30,1.5]B \schemestop
+\medskip
+
+\schemestart[-20]
+ A\arrow{->}B\arrow{->[][][3pt]}C\arrow{->[][][-3pt]}D
+\schemestop/
+A problem arises for vertical arrows:
+\exemple[50]{Vertical arrows}/\schemestart
+ A\arrow{->[up][down]}[-90]B
+\schemestop/
+For the sake of clarity, one may prefer to have the ``above'' and ``below'' labels written horizontally. Label angles can be specified, while default is the same angle as that of the arrow. To choose a specific angle, \Verb-*{<angle>}- can be written at the beginning of the optional arguments:
+\exemple[55]{Choice of angles}/\setchemfig{scheme debug=true}
+\schemestart A\arrow{->[*{0}up][*{0}down]}[90]B\schemestop
+\qquad
+\schemestart A\arrow{->[*{0}up][*{0}down]}[45]B\schemestop
+\qquad
+\schemestart A\arrow{->[*{0}up][*{0}down]}[-45]B\schemestop
+\qquad
+\schemestart A\arrow{->[*{0}up][*{0}down]}[-90]B\schemestop/
+The default position of the label anchor can lead to undesired results:
+\exemple[50]{Anchors}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow{->[*{0}on top of][*{0}underneath]}[45,2]B
+\schemestop/
+To counter this, the anchoring position can be specified as well to override the one selected by \CF by default. The syntax for this is: \Verb-*{<angle>.<ancre>}-.
+\exemple[50]{Anchors}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow{->[*{0.0}on top of][*{0.180}underneath]}[45,2]B
+\schemestop
+\qquad
+\schemestart
+ A\arrow{->[*{0.south east}on top of]%
+ [*{0.north west}underneath]}[45,2]B
+\schemestop/
+
+The ``\verb/-U>/'' arrow remains a particular case. If one of the two labels from the first two optional arguments is present, the corresponding arc is plotted:
+\exemple[50]{The \texttt{-U>} arrow}/\schemestart A\arrow{-U>[123][456]}B\schemestop
+\qquad
+\schemestart A\arrow{-U>[123]}[30]B\schemestop
+\qquad
+\schemestart A\arrow{-U>[][456]}[-30]B\schemestop/
+
+The fourth and fifth optional arguments modify the appearance of the arc: respectively the arrow length coefficient which sets the arc radius, and the angle that defines the half arc:
+\exemple[50]{The \texttt{-U>} arrow}/\schemestart A\arrow{-U>[123][456][][0.25]}B\schemestop
+\qquad
+\schemestart A\arrow{-U>[123][456][][][90]}B\schemestop
+\qquad
+\schemestart A\arrow{-U>[123][456][][1][45]}B\schemestop/
+With negative values for the radius and the angle, the arc is drawn below the arrow:
+\exemple[50]{The \texttt{-U>} arrow}/\schemestart
+ A\arrow{-U>[123][456][][-0.333][-60]}B
+\schemestop/
+Label angles and anchoring customization is controlled with the first two arguments, just like for other arrows:
+\exemple[50]{The \texttt{-U>} arrow}/\schemestart
+ A\arrow{-U>[123][456]}[-90]B
+\schemestop
+\qquad
+\schemestart
+ A\arrow{-U>[*{0.180}123][*{0.180}456]}[-90]B
+\schemestop/
+
+\section{Arrows customization}\label{definearrow}
+This section is quite technical and requires some knowledge of \TIKZ. It is targeted at advanced users only who need to define their own arrows.
+
+The \falseverb{\definearrow} command allows to build custom arrows. Its syntax is:
+
+\hfill\Verb-\definearrow{<number>}{<arrow name>}{<code>}-\hfill\null
+
+where \Verb-<number>- is the number of optional arguments that will be used in the \Verb-<code>-, with the usual syntax \verb-#1-, \verb-#2-, etc. These optional arguments cannot accept default values; if no value is specified upon using the macro \verb-\arrow-, the arguments will remain empty.
+
+Before going further, let's examine the available internal macros when drawing arrows. Since these macros include the "\verb-@-" character in their name, they can only be accessed between \verb|\catcode`\_=11| and \verb|\catcode`\_=8| commands.
+\begin{itemize}
+ \item \falseverb{\CF_arrowstartname} and \falseverb{\CF_arrowendname} include the names of the compounds (considered as nodes by \TIKZ) between which the arrow is drawn;
+ \item \falseverb{\CF_arrowstartnode} and \falseverb{\CF_arrowendnode} include the node names where arrow ends will be located. After these names, user-defined anchors can be specified in the argument between brackets of the \falseverb\arrow command, unless the field is left empty;
+ \item \falseverb{\CF_arrowcurrentstyle} and \falseverb{\CF_arrowcurrentangle} contain the style and the angle of the arrow to be drawn;
+ \item \falseverb{\CF_arrowshiftnodes}\Verb-{<dim>}- shifts the nodes ``\falseverb{\CF_arrowstartnode}'' and ``\falseverb{\CF_arrowendnode}'' perpendicularly relative to the arrow by a dimension specified in the argument;
+ \item \falseverb{\CF_arrowdisplaylabel}\verb/{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}/ is the most complex one. It gives the labels position with the following arguments:
+ \begin{itemize}
+ \item \verb-#1- and \verb-#5- are the labels to be written;
+ \item \verb-#2- and \verb-#6- are real numbers between 0 and 1. They specify the location of the labels on the arrow. 0 is the beginning of the arrow and 1 is its end, assuming a \emph{straight} arrow;
+ \item \verb-#3- and \verb-#7- are the ``+'' or ``-'' characters. ``+'' displays the label above the arrow, while ``-'' does it below it;
+ \item \verb-#4- and \verb-#8- are the names of the nodes corresponding to the beginning and the end of the arrow.
+ \end{itemize}
+ \item arrow heads are based on ``\verb-CF-'' for a full arrow and have the ``harpoon'' option for half arrows.
+\end{itemize}
+
+\subsection{First arrow}
+As an example, assume we want to make an arrow with a circle on its center. Let's call it ``\verb/-.>/''. This arrow will accept four optional arguments. Like for previously-defined arrows, the first and second arguments will be the labels to be located above and below the arrow. The third one will define the perpendicular shift relative to the arrow direction. Finally, the 4th argument will define the circle size. If this last argument is absent the default circle size will be equal to 2pt.
+
+Let's start with \verb/\definearrow{4}{-.>}/ to declare that the arrow will have 4 optional arguments and that it will be called \verb/-.>/. First, the position of the nodes between which the arrow is to be drawn must be modified in order to take the third-argument shift into account. This is made with the macro \falseverb{\CF_arrowshiftnodes}, so the code of the arrow will start with: \falseverb{\CF_arrowshiftnodes}\verb-{#3}%-. Then, one must plot the arrow itself, while taking the opportunity to set a node on the center of the segment, which will be called "\verb-mid@point-". Finally, the circle is defined with its center on that node. The whole \TIKZ code is:
+
+{\hskip2em\verb-\edef\pt_radius{\ifx\empty#4\empty 2pt\else #4\fi}% circle radius-\par\parskip0pt
+\hskip2em\verb/\expandafter\draw\expandafter[\CF_arrowcurrentstyle,-CF]/\par
+\hskip4em\verb/(\CF_arrowstartnode)--(\CF_arrowendnode)coordinate[midway](mid@point);/\par
+\hskip2em\verb-\filldraw(mid@point)circle(\pt_radius);%-}
+
+The last step is to enter the labels, if any, with the folwing line:
+
+\hskip2em\verb/\CF_arrowdisplaylabel{#1}{0.5}{+}{\CF_arrowstartnode}{#2}{0.5}{-}{\CF_arrowendnode}/
+
+Here is the completed arrow:
+\exemple*{Arrow ``-.>''}/\catcode`\_11
+\definearrow4{-.>}{%
+ \edef\pt_radius{\ifx\empty#4\empty 2pt\else #4\fi}% dot radius
+ \CF_arrowshiftnodes{#3}%
+ \expandafter\draw\expandafter[\CF_arrowcurrentstyle,-CF](\CF_arrowstartnode)--(\CF_arrowendnode)
+ coordinate[midway](mid@point);
+ \filldraw(mid@point)circle(\pt_radius);%
+ \CF_arrowdisplaylabel{#1}{0.5}{+}{\CF_arrowstartnode}{#2}{0.5}{-}{\CF_arrowendnode}
+ }
+\catcode`\_8
+\schemestart
+A \arrow{-.>} B \arrow{-.>[above][below][][1pt]} C \arrow{-.>[][below]}[30] D \arrow{-.>[above][][5pt][1.5pt]} E
+\schemestop/
+
+\subsection{Curved arrow}
+How about a curved arrow? To make things as simple as possible, assume it will have one single optional argument with the \TIKZ code that will specify the point(s) of control. If this argument is empty, a ``\verb/-CF/'' type arrow will be plotted.
+
+If \verb-#1- is not empty, attention should not be drawn to ``\falseverb{\CF_arrowstartnode}'' and ``\falseverb{\CF_arrowendnode}'' which contain the node names of arrow ends positions, because the location of these nodes is already determined by the anchors calculated for \emph{straight} arrows! Instead we will use \falseverb{\CF_arrowstartname} and \falseverb{\CF_arrowendname} which contain the names of the compound (which are nodes for \TIKZ), since the arrow must be plotted between them. Here's the \TIKZ code to draw the curved arrow between the two compounds:
+
+{\verb/\draw[shorten <=\CF_arrowoffset,shorten >=\CF_arrowoffset,\CF_arrowcurrentstyle,-CF,/\par\parskip0pt
+\verb/(\CF_arrowstartname).. controls #1 ..(\CF_arrowendname);%/}
+
+One must add a \TIKZ code to shorten the arrow by an amount \falseverb{\CF_arrowoffset} defined by \falseverb{\setarrowoffset}. Indeed, the nodes ar not the same as those for straight arrows (\falseverb{\CF_arrowstartnode} and \falseverb{\CF_arrowendnode}). So before \falseverb{\CF_arrowcurrentstyle}, the following code must be added:
+\begin{center}
+ \verb/shorten <=\CF_arrowoffset, shorten >=\CF_arrowoffset/
+\end{center}
+this is the role the two lines after \verb-\else-.
+
+So here is our curved arrow:
+\exemple*{Curved arrow}/\catcode`\_11
+\definearrow1{s>}{%
+\ifx\empty#1\empty
+ \expandafter\draw\expandafter[\CF_arrowcurrentstyle,-CF](\CF_arrowstartnode)--(\CF_arrowendnode);%
+\else
+ \def\curvedarrow_style{shorten <=\CF_arrowoffset,shorten >=\CF_arrowoffset,}%
+ \CF_eaddtomacro\curvedarrow_style\CF_arrowcurrentstyle
+ \expandafter\draw\expandafter[\curvedarrow_style,-CF](\CF_arrowstartname)..controls#1..(\CF_arrowendname);
+\fi
+}
+\catcode`\_8
+\schemestart
+A\arrow{s>}
+B\arrow{s>[+(0.5cm,0.5cm)]}
+C\arrow{s>[+(45:1cm)]}
+D\arrow(.60--.120){s>[+(60:1cm) and +(-120:1cm)]}
+E\arrow{s>[+(45:1) and +(-135:1)]}
+F\arrow{s>[+(-30:1) and +(150:1)]}[,1.5]
+G\arrow(.90--.90){s>[+(60:1)and+(120:1)]}[,2]
+H
+\schemestop
+
+\schemestart
+A\arrow(.90--.180){s>[+(90:0.8) and +(180:0.8)]}[45]B
+\arrow(.0--.90){s>[+(0:0.8) and +(90:0.8)]}[-45]C
+\arrow(.-90--.0){s>[+(-90:0.8) and +(0:0.8)]}[-135]D
+\arrow(.180--.-90){s>[+(180:0.8) and +(-90:0.8)]}[135]
+\schemestop/
+
+\section{The \protect\texttt{\textbackslash merge} command}
+The \falseverb{\merge} command allows to draw arrows coming from several existing compounds that merge into one single arrow that arrive to one single compounds.
+
+Just after the \falseverb{\merge} command, the direction that follows up must be specified. For this, 4 different direction characters can be used: ``\verb->-'' (the default direction if no character is entered), ``\verb-<-'', ``\verb-^-'' and ``\verb-v-''.
+
+The syntax follows with:
+
+\hfill\verb/\merge{dir}(n1.a1)(n2.a2)(...)(ni.ai)--(n.a[s])/\hfill\null
+
+where the ``\verb-ni-'' names before the double dash are those already-defined compounds from which out coming arrows will merge into a single one. One can also specify the ``\verb-ai-'' anchor, when the default one is not convenient. Like for the \falseverb\arrow command, the command ``\verb-n.a[s]-'' includes the name, the anchor and the style of the target compound.
+
+\exemple[50]{The \string\merge command}/\schemestart
+ABC\arrow[30]EFGHIJ\arrow[45]KLM\arrow[60]NO
+\merge>(c1)(c2)(c3)--()series 1
+\arrow series 2
+\schemestop
+\bigskip
+
+\schemestart
+Foooo\arrow(foo--bar){<=>}Bar\arrow(--baz){<=>}Bz
+\merge^(foo)(bar)(baz)--()series
+\schemestop
+\bigskip
+
+\setchemfig{scheme debug=true}
+\schemestart
+A\arrow{<->}[90]B
+\merge<(c1.120)(c2)--(foobar.45[circle,blue])CCC
+\schemestop/
+
+Regarding the geometry of the \falseverb{\merge} arrow, it consists of $n$ segments leaving from $n$ compounds up to the perpendicular line that connects them: the default length of the shortest of these segments is worth half of the compound-spacing distance defined by \falseverb\setcompoundsep. The arrow drawn from the connecting line to the target compound has the same default length, its origin is on the middle of the connecting line. These three geometric features can be customized with the optional argument immediately after the target compound:
+
+\hfill\verb/\merge{dir}(n1.a1)(n2.a2)(...)(ni.ai)--(n.a[s])[c1,c2,c,style]/\hfill\null
+
+where:
+\begin{itemize}
+ \item the shortest segment distance between reactants and the connecting line is controlled through the multiplication of the \falseverb{\setcompoundsep} distance by a coefficient \verb-c1-, whose default value is 0.5;
+ \item the length of the arrow between the connecting line and the product compound is controlled through the multiplication of the \falseverb{\setcompoundsep} distance by a coefficient \verb-c2-, whose default value is 0.5;
+ \item the origin of the arrow between the connecting line and the product compound is determined by the coefficient \verb-c-, a value of 0 involves a departure from the the left of the connect line (or from its top if the direction is \verb-v- or \verb-^-);
+ \item the style of the \falseverb{\merge} arrow is defined with the last argument: \verb-style-.
+\end{itemize}
+
+\exemple*{Geometrical parameters of \string\merge}/\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[1]C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[,1]C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[,,0.2]C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[,,0.9,red,thick]C\schemestop
+\bigskip
+
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[1]C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[,1]C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[,,0.2]C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[,,0.9,red,thick]C\schemestop/
+
+Finally, it is possible to write labels above or below the merged arrow. For this, the direction character accepts two optional arguments in brackets, a first one for the label above the arrow and a second one for the label below it. Therefore, the full syntax of the \falseverb{merge} command is:
+
+\hfill\verb/\merge{dir}[labelup][labeldow](n1.a1)(n2.a2)(...)(ni.ai)--(n.a[s])[c1,c2,c,style]/\hfill\null
+
+All the features introduced before for arrow labeling can be implemented here as well, i.e. rotation angle and anchoring with the syntax \verb-*{angle.anchor}- entered just before the content of the label.
+
+\exemple*{Labels of the \string\merge command}/\schemestart
+ABC\arrow{<=>}[90]DEF\merge>[above][below](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}[90]DEF\merge>[*{45.south west}above][*{45.north east}below](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}[90]DEF\merge>[*{90}above][*{90}below](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop
+\bigskip
+
+\schemestart
+ABC\arrow{<=>}DEF\merge v[above][below](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}DEF\merge v[*{45.north west}above][*{45.south east}below](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}DEF\merge v[*{0}above][*{0}below](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop/
+
+\section{The + sign}\label{signe+}
+The use of a ``\falseverb\+'' macro that displays a ${}+{}$ sign is available between the commands \falseverb{\schemestart} and \falseverb{\schemestop}. This macro accepts an optional argument in braces with 3 dimensions in the form \Verb-{<dim1>,<dim2>,<dim3>}-, where:
+\begin{itemize}
+ \item \Verb-<dim1>- and \Verb-<dim2>- are the dimensions to be inserted before and after the ${}+{}$ sign;
+ \item \Verb-<dim3>- is the vertical offset of the sign.
+\end{itemize}
+
+These dimensions can also be set, for all the following ${}+{}$ signs with the \chevrons{keys} \CFkv{+ sep left}{dim}, \CFkv{+ sep right}{dim} et \CFkv{+ vshift}{dim}. The default values are 0.5em for the two first and 0pt for the third.
+
+\exemple[50]{The \string\+ command}/\schemestart
+A\+B\+{2em,,5pt}C\+{0pt,0pt,-5pt}D\arrow E\+F
+\schemestop
+
+\setchemfig{+ sep left=1em,+ sep right=1em,+ vshift=0pt}
+\schemestart
+A\+B\+{2em,,5pt}C\+{0pt,0pt,-5pt}D\arrow E\+F
+\schemestop/
+
+As shown in the example below, it should be kept in mind that the ${}+{}$ sign inserted by the \falseverb{\+} command is part of the compound:
+\exemple[50]{Compounds and \string\+}/\setchemfig{scheme debug=true}
+\schemestart A\+ B\+{,,5pt}C\arrow D\+ E\schemestop/
+This makes it difficult to draw a vertical arrow exactly below the letter ``A'' since this letter is not a single compound for \CF. This issue can be solved with the use of the \falseverb{\subscheme} command to uniquely define the letter ``A'' as a single compound (the same procedure can be applied to the ${}+{}$ sign itself) so that it can be referred to later on with its own name:
+\exemple[50]{Subcompound and \string\+}/\setchemfig{scheme debug=true}
+\schemestart
+\subscheme{A}\+ B\arrow C
+\arrow(@c2--)[-90]E
+\schemestop
+\medskip
+
+\schemestart
+A\subscheme{\+}BCDEF \arrow G
+\arrow(@c2--)[-90]H
+\schemestop/%
+
+A common problem can be the misalignment of the ``+'' sign with the molecules before or after it. For example:
+\exemple{+ sign alignment}/\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop/
+Here, the ``+'' sign sits on the same baseline as the compound before it, and this baseline is that of the top carbon atom. One may shift the ``+'' sign, but this would not change the vertical position of ``\kern0.3333em\chemfig{\lewis{246,Br}-\lewis{026,Br}}\kern0.3333em''. In fact, the ``+'' sign does not prevent \CF from reading a compound, as shown in the example above where everything is included in the compound `` c1''. Therefore, one must stop the compound right after the first molecule with a \verb-\arrow{0}[,0]- that will draw an invisible, zero-length arrow. In order to vertically center the whole scheme, one must also set the the anchor of the first compound as ``west'' (or ``180'', which is a synonym) with the second optional argument of the \verb-\schemestart- command:
+\exemple{+ sign alignment}/\setchemfig{scheme debug=true}
+\schemestart[][west]
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow{0}[,0]\+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop/
+Thus, the first compound `` c1'' consists of the first molecule and the second compound consists of everything else, i.e. the ``+'' sign and the second molecule. Alternatively, one can play with anchors or styles via the \verb-\arrow- command to move the second compound to another location. Here, for example, the second compound is shifted downwards by 10pt in the first case. In the second case, the ``south east'' anchor of the first compound matches the ``south west'' anchor of the second one:
+\exemple{+ sign alignment}/\setchemfig{scheme debug=true}
+\schemestart[][west]
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow(--[yshift=-10pt]){0}[,0]\+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop
+\medskip
+
+\schemestart[][west]
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow(.south east--.south west){0}[,0]\+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop/
+\newpage
+
+\part{List of commands}
+The commands created by \CF are:
+\begin{center}
+\begin{longtable}{>\footnotesize l>\footnotesize p{9cm}}\\\hline
+\hfill\normalsize Commands\hfill\null &\hfill\normalsize Description\hfill\null\\\hline
+\Verb-\chemfig[<settings>]{<code>}-& draws the molecule whose design is described by the \Verb-<code>-\\
+\Verb|\setchemfig{<settings>}|& sets the parameters with the syntax \chevrons{key}${}={}$\chevrons{value}. Here is the full list of keys with the default values:
+\begin{itemize}
+ \item \CFkv{chemfig style} {{}}: style given to \TIKZ
+ \item \CFkv{atom style} {{}}: style of \TIKZ nodes (atoms)
+ \item \CFkv{bond join} {false}: boolean for bond joins
+ \item \CFkv{fixed length} {false}: boolean for fixed bond widths
+ \item \CFkv{cram rectangle} {false}: boolean to draw rectangle Cram bond
+ \item \CFkv{cram width} {1.5ex}: length of the base of the triangles Cram bonds
+ \item \CFkv{cram dash width} {1pt}: width of dash Cram bonds
+ \item \CFkv{cram dash sep} {2pt}: space between dash Cram bonds
+ \item \CFkv{atom sep} {3em}: space between atoms
+ \item \CFkv{bond offset} {2pt}: space between atom and bond
+ \item \CFkv{double bond sep} {2pt}: space between multiple bonds lines
+ \item \CFkv{angle increment} {45}: increment of the angle of bonds
+ \item \CFkv{node style} {{}}: style of atoms
+ \item \CFkv{bond style} {{}}: style of bonds
+ \item \CFkv{lewis | width} {0.3ex}: width of the rectangle Lewis "|"
+ \item \CFkv{lewis sep} {0.4ex}: space between atom and Lewis decorations
+ \item \CFkv{lewis length} {1.5ex}: length of Lewis decorations
+ \item \CFkv{lewis style} {{}}: style of Lewis decorations
+ \item \CFkv{lewis dist} {0.3em}: space between discs of the ":" Lewis decoration
+ \item \CFkv{lewis radius} {0.15ex}: radius of discs for Lewis decorations
+ \item \CFkv{lewis diag coeff} {1}: factor that multiplies the distance to Lewis decorations in odd directions
+ \item \CFkv{cycle radius coeff} {0.75}: shrinkage ratio of the circle or arc inside cycles
+ \item \CFkv{stack sep} {1.5pt}: vertical gap between arguments of \verb-\chemabove- and \verb-\chembelow- macros
+ \item \CFkv{compound style} {{}}: style of compounds
+ \item \CFkv{compound sep} {5em}: space between compounds
+ \item \CFkv{arrow offset} {4pt}: space between compound and arrow
+ \item \CFkv{arrow angle} {0}: angle of the reaction arrow
+ \item \CFkv{arrow coeff} {1}: length ratio of arrows
+ \item \CFkv{arrow style} {{}}: style of arrows
+ \item \CFkv{arrow double sep} {2pt}: space between double arrows
+ \item \CFkv{arrow double coeff} {0.6}: shrinkage ratio for the little arrow in "<->>" and "<<->"
+ \item \CFkv{arrow double harpoon}{true}: boolean for double harpoon arrows
+ \item \CFkv{arrow label sep} {3pt}: space between arrow and its label
+ \item \CFkv{arrow head} {-CF}: style of arrow head
+ \item \CFkv{+ sep left} {0.5em}: space before the $+$ sign
+ \item \CFkv{+ sep right} {0.5em}: space after the $+$ sign
+ \item \CFkv{+ vshift} {0pt}: vertical shift of the $+$ sign
+\end{itemize}
+\\
+\verb|\resetchemfig|&Reset the parameters to their default values\\
+\falseverb\printatom& displays the atoms within the molecules. It can be redefined to customize the output. See page~\pageref{perso.affichage}\\
+\falseverb\hflipnext&the next molecule will be horizontally flipped\\
+\falseverb\vflipnext&the next molecule will be vertically flipped\\
+\Verb-\definesubmol{<name>}<n>[<code1>]{<code2>}- & creates an alias \Verb-!<name>- which can be put in the code of molecules to be drawn, and which will be replaced with \Verb-<code1>- or \Verb-<code2>- depending on the angle of the last bond. See page~\pageref{definesubmol}\\
+\falseverb\chemskipalign& tells the vertical alignment mechanism to ignore the current group of atoms. See page~\pageref{chemskipalign}.\\
+\Verb-\redefinesubmol{<name>}<n>[<code1>]{<code2>}- & replaces a preexisting alias \Verb-!<name>- with the new \Verb-<code>-. See page~\pageref{redefinesubmol}\\[2ex]\hline
+&\\
+\Verb-\lewis[coeff]{<codes>,<atom>}-& displays the \Verb-<atom>- and places Lewis dot decorations as specified in the \Verb-<code>-. The dots drawn do not change the bounding box. See page~\pageref{lewis}\\
+\Verb-\Lewis[coeff]{<codes>,<atom>}-& displays the \Verb-<atom>- and places Lewis dot decorations as specified in the \Verb-<code>-. See page~\pageref{lewis}\\
+\Verb-\chemmove[<tikz options>]<tikz code>-& Makes a \verb-tikzpicture- environment, adding to it the \verb-<tikz options>-. Uses the \Verb-<tikz code>- to join the nodes specified in the molecules with the help pf the ``\verb-@-'' character. See page~\pageref{mecanismes-reactionnels}.\\[2ex]\hline
+&\\
+\Verb-\chemabove[<dim>]{<txt1>}{txt2}- & writes \Verb-<txt1>- and places \Verb-<txt2>- above, leaving \Verb-<dim>- of vertical space. This command does not change the bounding box of \Verb-<txt1>-. See page~\pageref{chemabove}\\
+\Verb-\chembelow[<dim>]{<txt1>}{txt2}- & writes \Verb-{txt1}- and places \Verb-<txt2>- below, leaving \Verb-<dim>- of vertical space. This command does not change the bounding box of \Verb-<txt1>-. See page~\pageref{chemabove}\\
+\Verb-\Chemabove[<dim>]{<txt1>}{txt2}- & writes \Verb-<txt1>- and places \Verb-<txt2>- above, leaving \Verb-<dim>- of vertical space. See page~\pageref{chemabove}\\
+\Verb-\Chembelow[<dim>]{<txt1>}{txt2}- & writes \Verb-{txt1}- and places \Verb-<txt2>- below, leaving \Verb-<dim>- of vertical space. See page~\pageref{chemabove}\\
+\Verb-\chemname[<dim>]{<molecule>}{<name>}- & Places \Verb-<name>- under the \Verb-<molecule>-\\
+\falseverb\chemnameinit & Initializes the greatest molecule depth to ensure correct alignment of the names of the following molecules.\\[2ex]\hline
+&\\
+\falseverb\schemestart\dots\falseverb\schemestop& commands between which a reaction scheme is drawn. See page~\pageref{schemestart}.\\
+\falseverb\arrow& draws an arrow in a reaction scheme (this command is only defined inside a reaction scheme). See page~\pageref{arrow}.\\
+\falseverb\+ & prints a $+$ sign in a reaction scheme (this command is only defined inside a reaction scheme). See page~\pageref{signe+}.\\
+\falseverb\subscheme\Verb-{<code>}- & draws a subscheme (this command is only defined inside a reaction scheme). See~\pageref{subscheme}.\\
+\falseverb\definearrow & defines an arrow. See page~\pageref{definearrow}.\\
+\Verb-\chemleft<car1><stuff>-\falseverb\chemright\Verb-<car1>-& draws expandable delimiters defined with \Verb-<car1>- and \Verb-<car2>- on the left and on the right of the \Verb-<stuff>-, see page~\pageref{chemleft}.\\
+\Verb-\chemup<car1><stuff>-\falseverb\chemdown\Verb-<car1>-& draws expandable delimiters defined with \Verb-<car1>- and \Verb-<car2>- above and below the \Verb-<stuff>-, see page~\pageref{chemup}.\\
+\Verb|\polymerdelim[<settings]{<node1>}{node2>}|& draws delimiters at specified nodes, see page~\pageref{polymerdelim}\\\hline
+\end{longtable}
+\end{center}
+\newpage
+
+\part{Gallery}
+This manual concludes with drawings of molecules of varying complexity.
+
+The curious user can look at the \Verb-<code>- of each molecule, though it does become less attractive the more complex the molecule gets. Indeed, beyond a certain level of complexity, though it it is fairly easy to write \Verb-<code>-, it becomes much harder to read the \Verb-<code>- to analyze it afterwards. We quickly reached the limits of immediate readability of the code of a complex drawing.
+
+Anyway, I hope that this package will help all \LaTeX{} users wishing to draw molecules. Although \CF has been thoroughly tested and although its version number is now greater than 1.0, I hope that you will be forgiving with bugs you encounter and send me an \href{mailto:unbonpetit@netc.fr}{\texttt{\textbf{email}}} to let me know of any malfunctions or suggestions for improvement.
+
+\hfill Christian \textsc{Tellechea}
+\bigskip
+
+\begin{center}
+\parskip0pt
+$\star$\par
+$\star\quad\star$
+\end{center}
+\bigskip
+
+\exemple*{2-methylpentane}/\chemfig{[7]H_3C-CH(-[6]CH_3)-[1]CH_2-CH_2-[1]CH_3}/
+
+\exemple*{3-ethyl-2-methylhexane}/\chemfig{H_3C-[7]CH(-[6]CH_3)-[1]CH(-[7]C_3H_7)-[2]CH_2-[3]H_3C}/
+
+\exemple*{Stearine, condensed structural diagram}/\definesubmol{@}{([0,2]-O-[0,1]C(=[2,1]O)-C_{17}H_{33})}
+\chemfig{[2,2]CH_2!@-CH_{\phantom 2}!@-CH_2!@}/
+
+\exemple*{Stearine, skeleton diagram}/\definesubmol{x}{-[:+30,.6]-[:-30,.6]}
+\definesubmol{y}{-O-(=[2,.6]O)-!x!x!x!x!x!x!x!x}
+\chemfig{[2]([0]!y)-[,1.5]([0]!y)-[,1.5]([0]!y)}/
+
+\exemple*{Methyl 2-methylpropanoate}/\chemfig{H_3C-CH_2(-[2]CH_3)-C(=[1]O)-[7]O-CH_3}/
+
+\exemple*{Vanillin}/\chemfig{HC*6(-C(-OH)=C(-O-[::-60]CH_3)-CH=C(-[,,,2]HC=[::-60]O)-HC=[,,2])} \quad or \quad
+\chemfig{*6(-(-OH)=(-OCH_3)-=(-=[::-60]O)-=)}/
+
+\exemple*{Caffeine}/\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-=)--(=O)-N(-H_3C)-)}/
+
+\exemple*{Aspirin}/\chemfig{*6(-=-(-O-[::-60](=[::-60]O)-[::+60])=(-(=[::+60])-[::-60]OH)-=)}/Aspirin is a registered trademark of Bayer in many countries.
+
+\exemple*{Phthalic anhydride}/\chemfig{*6(=*5(-(=O)-O-(=O)-)-=-=-)}/
+
+\exemple*{Camphor}/\chemfig{*6(-(<:[::120](-[::-100,0.7])(-[::100,0.7]))--(=O)-(-)(<:[::120])--)}
+\quad or \quad
+\setchemfig{cram width=3pt}
+\chemfig{<[:10](>[:85,1.8]?(-[:160,0.6])-[:20,0.6])
+>[:-10]-[:60](=[:30,0.6]O)-[:170]?(-[:30,0.6])-[:190]-[:240]}/
+
+\exemple*{Triphenylmethane}/\chemfig{*6(-=-*6(-(-*6(=-=-=-))-*6(=-=-=-))=-=)}
+\quad or \quad
+\definesubmol{@}{*6(=-=-=-)}
+\chemfig{(-[:-30]!@)(-[:90]!@)(-[:210]!@)}/
+
+\exemple*{Amygdalin}/\setchemfig{cram width=2pt}
+\definesubmol{c1}{-[:200]-[:120]O-[:190]}
+\definesubmol{c2}{-[:170](-[:200,0.7]HO)<[:300](-[:170,0.6]HO)
+-[:10,,,,line width=2pt](-[:-40,0.6]OH)>[:-10]}
+\definesubmol{csub}{-[:155,0.65]-[:90,0.65]}
+\chemfig{O(!{c1}(!{csub}O(!{c1}(!{csub}OH)!{c2}))!{c2})-[:-30](-[:-90]CN)-[:30]*6(=-=-=-)}/
+
+\exemple*{Adenosine triphosphate}/\setchemfig{cram width=3pt}
+\definesubmol{a}{-P(=[::-90,0.75]O)(-[::90,0.75]HO)-}
+\chemfig{[:-54]*5((--[::60]O([::-60]!aO([::-60]!aO([::60]!aHO))))<(-OH)
+-[,,,,line width=2pt](-OH)>(-N*5(-=N-*6(-(-NH_2)=N-=N-)=_-))-O-)}/
+
+\exemple*{Viagra}/\chemfig{N*6((-H_3C)---N(-S(=[::+120]O)(=[::+0]O)-[::-60]*6(-=-(-O-[::-60]-[::+60]CH_3)
+=(-*6(=N-*5(-(--[::-60]-[::+60]CH_3)=N-N(-CH_3)-=)--(=O)-N(-H)-))-=))---)}/
+
+\exemple*{Cholesterol ester}/\chemfig{[:30]R-(=[::+60]O)-[::-60]O-*6(--*6(=--*6(-*5(---(-(-[::+60]Me)
+-[::-60]-[::-60]-[::+60]-[::-60](-[::-60]Me)-[::+60]Me)-)-(-[::+0]Me)---)--)-(-[::+0]Me)---)}/
+
+\exemple*{Porphyrin}/\chemfig{?=[::+72]*5(-N=(-=[::-72]*5(-[,,,2]HN-[,,2](=-[::-36]*5(=N-(=-[::-72]*5(-NH-[,,1]?=-=))
+-=-))-=-))-=-)}/
+
+\exemple*{Manganese 5,10,15,20-tetra(N-ethyl-3-carbazolyl) porphyrin}/\definesubmol{A}{*6(=-*5(-*6(-=-=-)--N(--[::-60])-)=-=-)}
+\chemfig{([::+180]-!A)=[::+72]*5(-N=(-(-[::+54]!A)=[::-72]*5(-N(-[::-33,1.5,,,draw=none]Mn)
+-(=(-[::+72]!A)-[::-36]*5(=N-(=(-[::+54]!A)-[::-72]*5(-N-(-)=-=))-=-))-=-))-=-)}/
+
+\exemple*{Penicillin}/\chemfig{[:-90]HN(-[::-45](-[::-45]R)=[::+45]O)>[::+45]*4(-(=O)-N*5(-(<:(=[::-60]O)
+-[::+60]OH)-(<[::+0])(<:[::-108])-S>)--)}/
+
+\exemple*{LSD}/\chemfig{[:150]?*6(=*6(--*6(-N(-CH_3)--(<(=[::+60]O)-[::-60]N(-[::+60]-[::-60])
+-[::-60]-[::+60])-=)([::-120]<H)---)-*6(-=-=-(-[::-30,1.155]\chembelow{N}{H}?)=))}/
+
+\exemple*{Strychnine}/\chemfig{*6(=-*6(-N*6(-(=O)--([::-120]<:H)*7(-O--=?[0]([::-25.714]-[,2]?[1]))
+-*6(-?[0,{>}]--(<N?[1]?[2])-(<[::-90]-[::-60]?[2]))(<:[::+0]H)-([::+120]<H))--?)=?-=-)}/
+
+\exemple*{Codeine}/\chemfig{[:-30]**6(-(-OH)-?-*6(-(-[3]-[2,2]-[0,.5])*6(-(<:[:-150,1.155]O?)
+-(<:OH)-=-)-(<:[1]H)-(-[2]NCH_3)--)---)}/
+
+\exemple*{A dye (red)}/\chemfig{**6(--*6(-(-NO_2)=-(-\lewis{26,O}-[0]H)=(-\lewis{4,N}=[0]\lewis{2,N}-[0]Ar)-)----)}/
+
+\exemple*{Menthone}/\chemfig{CH_3-?(-[2]H)(-[::-30,2]-[::+60](=[1]\lewis{20,O})
+-[::-150,1.5](-[:20]CH(-[1]CH_3)(-[7]CH_3))(-[6]H)-[::-90,2]-[::+60]?)}/
+
+\exemple*{Fischer indole synthesis}/\schemestart
+ \chemfig{*6(=-*6(-\chembelow{N}{H}-NH_2)=-=-)}
+ \+
+ \chemfig{(=[:-150]O)(-[:-30]R_2)-[2]-[:150]R_1}
+ \arrow(.mid east--.mid west){->[\chemfig{H^+}]}
+ \chemfig{*6(-=*5(-\chembelow{N}{H}-(-R_2)=(-R_1)-)-=-=)}
+\schemestop/
+
+\exemple*{Reaction mechanisms: carbonyl group}/
+\schemestart
+ \chemfig{C([3]-)([5]-)=[@{db,.5}]@{atoo}\lewis{06,O}}
+ \arrow(.mid east--.mid west){<->}
+ \chemfig{\chemabove{C}{\scriptstyle\oplus}([3]-)([5]-)-\chemabove
+ {\lewis{026,O}}{\hspace{5mm}\scriptstyle\ominus}}
+\schemestop
+\chemmove{\draw[shorten <=2pt, shorten >=2pt](db) ..controls +(up:5mm) and +(up:5mm)..(atoo);}/
+
+\exemple*{Reaction mechanisms: nitro group}/\schemestart
+ \chemfig{R-\chembelow{N}{\hspace{-5mm}\scriptstyle\oplus}([1]=[@{db}]@{atoo1}O)([7]-[@{sb}]@{atoo2}
+ \chemabove{\lewis{157,O}}{\hspace{7mm}\scriptstyle\ominus})}
+ \arrow(.mid east--.mid west){<->}
+ \chemfig{R-\chemabove{N}{\hspace{-5mm}\scriptstyle\oplus}([1]-\chemabove{O}{\scriptstyle\ominus})([7]=O)}
+\schemestop
+\chemmove{
+ \draw[shorten <=2pt, shorten >=2pt](db) ..controls +(120:5mm) and +(120:5mm)..(atoo1);
+ \draw[shorten <=3pt, shorten >=2pt](atoo2) ..controls +(225:10mm) and +(225:10mm)..(sb);
+}/
+
+\exemple*{Nucleophilic addition. Primary amines}/\setchemfig{atom sep=2.5em,compound sep=5em}
+\schemestart
+ \chemfig{R-@{aton}\lewis{2,N}H_2}
+ \+
+ \chemfig{@{atoc}C([3]-CH_3)([5]-CH_3)=[@{atoo1}]O}
+ \chemfig{@{atoo2}\chemabove{H}{\scriptstyle\oplus}}
+ \chemmove[-stealth,shorten <=3pt,dash pattern= on 1pt off 1pt,thin]{
+ \draw[shorten >=2pt](aton) ..controls +(up:10mm) and +(left:5mm)..(atoc);
+ \draw[shorten >=8pt](atoo1) ..controls +(up:10mm) and +(north west:10mm)..(atoo2);}
+ \arrow{<=>[\tiny addition]}
+ \chemfig{R-@{aton}\chembelow{N}{\scriptstyle\oplus}H([2]-[@{sb}]H)-C(-[2]CH_3)(-[6]CH_3)-OH}
+\schemestop
+\chemmove{
+ \draw[-stealth,dash pattern= on 1pt off 1pt,shorten <=3pt, shorten >=2pt]
+ (sb)..controls +(left:5mm) and +(135:2mm)..(aton);}
+\par
+\schemestart
+ \arrow{<=>}
+ \chemfig{R-@{aton}\lewis{2,N}([6]-[@{sbh}]H)-[@{sb}]C(-[2]CH_3)(-[6]CH_3)-[@{sbo}]@{atoo}
+ \chemabove{O}{\scriptstyle\oplus}(-[1]H)(-[7]H)}
+ \chemmove[-stealth,shorten <=3pt,shorten >=2pt,dash pattern= on 1pt off 1pt,thin]{
+ \draw(aton) ..controls +(up:5mm) and +(up:5mm)..(sb);
+ \draw(sbh) ..controls +(left:5mm) and +(south west:5mm)..(aton);
+ \draw(sbo) ..controls +(up:5mm) and +(north west:5mm)..(atoo);}
+ \arrow{<=>[\tiny élimination]}\chemfig{R-N=C(-[1]CH_3)(-[7]CH_3)}
+ \+
+ \chemfig{H_3\chemabove{O}{\scriptstyle\oplus}}
+\schemestop/
+
+\exemple*{Reaction scheme}/\setchemfig{atom sep=2em}
+\schemestart[-90]
+ \chemfig{**6(---(-NH _2)---)}\arrow{0}\chemfig{HNO_2}
+ \merge(c1)(c2)--()
+ \chemfig{**6(---(-N_2|{}^\oplus)---)}\arrow{0}\chemfig{**6(---(-NH _2)---)}
+ \merge(c3)(c4)--()
+ \chemfig{**6(---(-N=[::-30]N-[::-30]**6(---(-NH_2)---))---)}
+\schemestop/
+
+\exemple*{Addition}/\setchemfig{atom sep=2.5em}
+\schemestart
+ \chemfig{*6(=-(-)(=[2]O))}
+ \arrow{->[\+\chemfig{H^\oplus}]}
+ \chemleft[\subscheme[90]{%
+ \chemfig{*6((-[2,0.33,,,draw=none]\scriptstyle\oplus)-=(-)-OH)}
+ \arrow{<->}
+ \chemfig{*6(=-(-)(-[6,0.33,,,draw=none]\scriptstyle\oplus)-OH)}}\chemright]
+ \arrow(@c3--)\chemfig{*6((-[2]R)-=(-)-OH)}
+ \arrow(@c4--)\chemfig{*6(=-(-)(-[6]R)-OH)}
+\schemestop/
+
+\exemple*{Electrophilic aromatic substitution}Z\setchemfig{atom sep=1.5em}%
+\definesubmol{+}{-[,-0.4,,,draw=none]\oplus}%
+\schemestart
+ \arrow{0}[,0]
+ \chemleft[\subscheme{\chemfig{*6(=-=-(-[:120]Br)(-[:60]H)-(!+)-)}
+ \arrow{<->}
+ \chemfig{*6(-(!+)-=-(-[:120]Br)(-[:60]H)-=)}
+ \arrow{<->}
+ \chemfig{*6(-=-(!+)-(-[:120]Br)(-[:60]H)-=)}}\chemright]
+ \arrow(@c2--){<-[*0\chemfig{{-}AlBr_4|^\ominus}][*0\chemfig{Br_2/Al_2Br_3}]}[90,1.5]
+ \chemname{\chemfig{*6(-=-=-=-)}}{Benzène 1}
+ \arrow(@c4--){->[*0\chemfig{{-}H^\oplus}]}[90,1.5]
+ \chemname{\chemfig{*6(-=-=(-Br)-=-)}}{Bromobenzène 2}
+ \arrow(@c5.mid east--@c6.mid west)
+\schemestop
+\chemnameinit{}Z
+
+\exemple*{Reaction mechanism of chlorination}/\scriptsize\setchemfig{bond offset=1pt,atom sep=2em,compound sep=4em}
+\schemestart
+ \chemfig{Cl-[4]@{a0}(=[@{a1}:120]@{a2}O)-[:-120](=[:-60]O)-[4]Cl}\+\chemfig{*6(-=-=(-@{oh1}OH)-=)}\arrow
+ \chemfig{*6((-O-[:150](-[@{o0}:150]@{o1}\lewis{6.,O})(-[@{cl0}:60]@{cl1}Cl)-[:240](-[4]Cl)=[6]O)=-=-=-)}
+ \arrow\chemfig{*6((-O-[:150](=[2]O)-[:-150](=[6]O)-[:150]Cl)=-=-=-)}\+\chemfig{HCl}
+ \arrow(@c1--){0}[-90,0.5]
+ \chemfig{*6(-=*6(-O-*6(-@{o2}(=[@{o3}]@{o4}O)-Cl)=)-=-=)}\+\chemfig{*6(-=-=(-@{oh2}OH)-=)}\arrow
+ \chemfig{*6(-=*6(-O-(-(-[@{cl2}:60]@{cl3}Cl)(-[@{o5}:-120]@{o6}\lewis{6.,O})-O-[::-40]*6(=-=-=-))=)-=-=)}
+ \kern-3em \arrow\chemfig{[:30]*6(=-(-O-[:-60](=O)-[:-120](=[4]O)-[:-60]O-*6(=-=-=-))=-=-)}
+ \kern-3em \+\chemfig{HCl}
+\schemestop
+\chemmove[line width=0.2pt,-stealth,dash pattern = on 2pt off 1pt]{
+ \draw[shorten <=2pt](a1)..controls+(200:5mm)and+(200:5mm)..(a2);
+ \draw[shorten >=2pt](oh1.west)..controls+(180:15mm)and+(60:5mm)..(a0);
+ \draw[shorten <=6pt,shorten >=2pt](o1)..controls+(270:5mm)and+(270:5mm)..(o0);
+ \draw[shorten <=2pt](cl0)..controls+(150:5mm)and+(150:5mm)..(cl1.150);
+ \draw[shorten <=2pt](o3)..controls +(30:3mm) and +(30:5mm)..(o4.east);
+ \draw[shorten >=2pt](oh2.135).. controls +(150:10mm) and +(90:10mm).. (o2);
+ \draw[shorten >=2pt,shorten <=5pt]([xshift=-1.5mm]o6.315)..controls +(315:5mm) and +(315:5mm)..(o5);
+ \draw[shorten <=2pt](cl2)..controls +(135:5mm) and +(135:5mm)..(cl3.north west);}/
+
+\exemple*{Cannizzaro reaction}/\schemestart
+ \chemfig{[:-30]*6(=-=(-@{atoc}C([6]=[@{db}]@{atoo1}O)-H)-=-)}
+ \arrow(start.mid east--.mid west){->[\chemfig{@{atoo2}\chemabove{O}{\scriptstyle\ominus}}H]}
+ \chemmove[-stealth,shorten >=2pt,dash pattern=on 1pt off 1pt,thin]{
+ \draw[shorten <=8pt](atoo2) ..controls +(up:10mm) and +(up:10mm)..(atoc);
+ \draw[shorten <=2pt](db) ..controls +(left:5mm) and +(west:5mm)..(atoo1);}
+ \chemfig{[:-30]*6(=-=(-C([6]-[@{sb1}]@{atoo1}\chembelow{O}{\scriptstyle\ominus})([2]-OH)-[@{sb2}]H)-=-)}
+ \hspace{1cm}
+ \chemfig{[:-30]*6((-@{atoc}C([6]=[@{db}]@{atoo2}O)-[2]H)-=-=-=)}
+ \chemmove[-stealth,shorten <=2pt,shorten >=2pt,dash pattern=on 1pt off 1pt,thin]{
+ \draw([yshift=-4pt]atoo1.270) ..controls +(0:5mm) and +(right:10mm)..(sb1);
+ \draw(sb2) ..controls +(up:10mm) and +(north west:10mm)..(atoc);
+ \draw(db) ..controls +(right:5mm) and +(east:5mm)..(atoo2);}
+ \arrow(@start.base west--){0}[-75,2]
+ {}
+ \arrow
+ \chemfig{[:-30]*6(=-=(-C([1]-@{atoo2}O-[@{sb}0]@{atoh}H)([6]=O))-=-)}
+ \arrow{0}
+ \chemfig{[:-30]*6((-C(-[5]H)(-[7]H)-[2]@{atoo1}\chemabove{O}{\scriptstyle\ominus})-=-=-=)}
+ \chemmove[-stealth,shorten >=2pt,dash pattern=on 1pt off 1pt,thin]{
+ \draw[shorten <=7pt](atoo1.90) ..controls +(+90:8mm) and +(up:10mm)..(atoh);
+ \draw[shorten <=2pt](sb) ..controls +(up:5mm) and +(up:5mm)..(atoo2);}
+\schemestop/
+
+\begingroup
+\catcode`;=12
+\exemple*{Beckmann rearrangement}/\setchemfig{bond offset=1pt,atom sep=2.5em,compound sep=5em,arrow offset=6pt}
+\schemestart
+ \chemfig{(-[:-150]R')(-[:-30]R)=[2]N-[:30]OH}
+ \arrow{<=>[\chemfig{H^\oplus}]}
+ \chemfig{(-[@{a0}:-150]R')(-[:-30]R)=[2]@{a1}N-[@{b0}:30]@{b1}\chemabove{O}{\scriptstyle\oplus}H_2}
+ \chemmove[red,-stealth,red,shorten <=2pt]{
+ \draw(a0)..controls +(135:2mm) and +(215:4mm).. (a1);
+ \draw(b0)..controls +(120:2mm) and +(180:3mm).. ([yshift=7pt]b1.180);}
+ \arrow{<=>[\chemfig{{-}H_2O}]}[,1.1]
+ \chemleft[\subscheme[90]{%
+ \chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
+ \arrow{<->}[,0.75]
+ \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemmove[red,-stealth,red,shorten <=3pt]{
+ \draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
+ \arrow(@c1--){0}[-90,0.333]
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-\chemabove{O}{\scriptstyle\oplus} H_2)}
+ \arrow{<=>[\chemfig{{-}H^\oplus}]}
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-OH)}
+ \arrow
+ \chemfig{*6(R\rlap{$'$}-\chembelow{N}{H}-(-R)(=[2]O))}
+\schemestop/
+\endgroup
+
+\exemple*{Reaction scheme}/\setchemfig{atom sep=1.5em,compound sep=4em}
+\schemestart
+ \chemfig{-[::30]=_[::-60](-[:: -60])-[::60]}
+ \arrow{->[\chemfig{HCl}]}
+ \chemfig{-[::30]-[::-60](-[::120]Cl)(-[::-60])-[::60]}\+\chemfig{-[::30](-[::60]Cl)-[::-60](-[::-60])-[::60]}
+ \arrow(@c1--.north west){->[\chemfig{H_2O}]}[-45,1.7]
+ \chemfig{-[::30]-[::-60](-[::120]OH)(-[::-60])-[::60]}\+\chemfig{-[::30](-[::60]OH)-[::-60](-[::-60])-[::60]}
+\schemestop/
+
+\exemple*{Esterification of formic acid}Z\tikzset{obrace/.style={left delimiter={[},inner sep=3pt},
+ cbrace/.style={right delimiter={]},inner sep=3pt},
+ braces/.style={left delimiter={[},right delimiter={]},inner sep=3pt}}
+\setchemfig{atom sep=2em}
+\schemestart
+ \chemfig{H-C(=[:60]O)-[:-60]O-H}
+ \arrow(--M1[obrace]){-U>[\scriptsize\chemfig{H_2SO_4^{}}][\scriptsize\chemfig{HSO_4^\ominus}][][.25]}%
+ [,1.5,shorten >=6pt]
+ \chemfig{H-@{a2}C(-[:60]O-H)(-[:30,.5,,,draw=none]{\scriptstyle\oplus})-[:-60]O-H}
+ \arrow(--[cbrace]){<->}
+ \chemfig{H-C(=[:60]\chemabove{O}{\scriptstyle\oplus}-H)-[:-60]O-H}
+ \arrow(@M1--){<=>[*{0}\scriptsize\chemfig{H-[:120]@{a1}O-[:60]CH_3}][*{0}\tiny addition]}[-90,1.33]
+ \chemfig{H-C(-[2]O-[:30]H)(-\chemabove{O}{\scriptstyle\oplus}(-[:60]CH_3)-[:-60]H)-[6]O-[:-30]H}
+ \arrow{<=>[\tiny protolysis]}[180]
+ \chemfig{H-C(-[2]O-[:30]H)(-O-CH_3)-[@{b1}6]@{a3}\chemabove{O}{\kern-4mm\scriptstyle\oplus}(-[:-150]H)-[:-30]H}
+ \arrow(--[obrace]){<=>[*{0}\scriptsize\chemfig{{-}H_2O}][*{0}\tiny elimination]}[-90,,shorten >=6pt]
+ \chemfig{H-C(-[:60]O-H)(-[,.5,,,draw=none]{\scriptstyle\oplus})-[:-60]O-CH_3}
+ \arrow(--[cbrace]){<->}
+ \chemfig{H-C(=[:60]\chemabove{O}{\scriptstyle\oplus}-H)-[:-60]O-CH_3}
+ \arrow{-U>[\scriptsize\chemfig{HSO_4^\ominus}][\scriptsize\chemfig{H_2SO_4^{}}][][.25]}[,1.5]
+ \chemfig{H-C(=[:60]O)-[:-60]O-CH_3}
+ \arrow(@M1--[yshift=-5pt]){0}[180,.5]{\tiny protolysis}
+ \chemmove[red,shorten <=3pt,shorten >=1pt]{
+ \draw(a1)..controls +(0:1.5cm)and+(0:3cm).. (a2);
+ \draw(b1)..controls +(0:5mm)and+(20:5mm)..(a3);}
+\schemestop Z
+
+\exemple*{Electrophilic addition of halogen to olefin}/\schemestart
+ \subscheme{%
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow{0}[,0]\+\chemfig{\lewis{246,Br}-\lewis{026,Br}}}
+ \arrow(@c1--olefin){<=>[*{0}rapide]}[-90]
+ \chemfig{>[:-20]C(<[:40])=[@{db}6]C(<[:-130])<[:-20]}
+ \arrow(--bromonium){0}[-90]
+ \chemname{\chemfig{C*3((<)(<:[:-155])-\raise1.5pt\llap{$\scriptstyle\oplus$}\lewis{17,Br}-C(<:)(<[:155])-)}}
+ {bromonium ion}
+ \arrow(--carbeniumA){<<->}[,1.5]
+ \chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<:[:-150])(<[:-100])-[:-30]
+ \lewis{157,Br}}}{Xarbenium ion}
+ \arrow(@bromonium--carbeniumB){<<->}[180,1.5]
+ \chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<[:-150])
+ (<:[:-100])-[:-30]\lewis{137,Br}}}{carbenium ion}
+ \arrow(@olefin--){0}[,.25]
+ \chemfig{@{Br1}\chemabove[3pt]{\lewis{246,Br}}{\scriptstyle\delta\oplus}-[@{b2}]@{Br2}
+ \chemabove[3pt]{\lewis{026,Br}}{\scriptstyle\delta\ominus}}
+ \arrow(@olefin--[left]){0}[180,0]
+ $\pi$ complexe
+ \arrow(@carbeniumA--@olefin){<=>[lent, \chemfig{{-}Br^\ominus}]}
+ \arrow(@carbeniumB--@olefin){<=>[lent, \chemfig{{-}Br^\ominus}]}
+ \chemmove[-stealth,red,shorten <=3pt,shorten >=2pt]{
+ \draw(db) .. controls +(20:5mm) and +(135:5mm) .. (Br1);
+ \draw(b2) .. controls +(-90:5mm) and +(-120:5mm) .. (Br2);}
+\schemestop
+\chemnameinit{}/
+
+\exemple*{Sulfonation of naphthalene}/\definesubmol\cycleoplus{-[,0.25,,,draw=none]\oplus}
+\definesubmol{so2oh}{S(=[::90]O)(=[::-90]O)-OH}
+\setchemfig{atom sep=2.5em}
+\schemestart[,1.5]
+ \chemname{\chemfig{*6(=-*6(-=-=-)=-=-)}}{Naphtalène}\+\chemfig{H_2SO_4}
+ \arrow(nph.mid east--.south west){->[80\degres C]}[45]
+ \chemname{\chemfig{*6(=-*6(-=-(!\cycleoplus)-(-SO_3H)-)=-=-)}}{Ion 1-arenium}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{*6(=-*6(-=-=(-!{so2oh})-)=-=-)}}{Acide 1-naphthalenesulfonique}
+ \arrow(@nph.mid east--.north west){->[160\degres C]}[-45]
+ \chemname{\chemfig{*6(=-*6(-=-(-SO_3H)-(!\cycleoplus)-)=-=-)}}{Ion 2-arenium}\kern-4em
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{*6(=-*6(-=-(-!{so2oh})=-)=-=-)}}{Acide 2-naphthalenesulfonique}
+\schemestop
+\chemnameinit{}/
+
+\begingroup\catcode`;12
+\exemple*{Explanatory diagram}/\parbox{0.8\linewidth}{%
+ \hspace{10em}
+ \tikz[remember picture]\node(n0){\chemname{}{Attacks\\nucleophiles}};\par
+ \vspace{2ex}\hspace{15em}
+ \chemfig{R^2-(-[:-60]@{a0}H)-[:60]@{a1}(-[:120]R^1)(-[1,0.25,,,draw=none]\scriptstyle\color{red}\delta+)
+ =[@{a2}]@{a3}\lewis{1:7:,O}-[1,0.5,,,draw=none]\scriptstyle\color{red}\delta{-}}
+ \hspace{5em}
+ \chemname[-15ex]{}{\tikz[remember picture]\node(n1){};Addition reactions}\kern1em
+ \chemname{}{\tikz[remember picture]\node(n2){};Basic properties}\par
+ \vspace{6ex}\hspace{8em}
+ \chemname{}{Acidic properties of hydrogen\tikz[remember picture]\node(n3){};
+ \\atom in $\alpha$ position}
+ \chemmove[-stealth,line width=0.8pt,green!60!black!70]{
+ \draw[shorten >=2pt](n0)..controls+(270:4em)and+(180:2em)..(a1);
+ \draw[shorten >=8pt](n1)..controls+(180:2em)and+(60:2em)..(a2);
+ \draw[shorten >=5pt](n2)..controls+(180:2em)and+(270:2em)..([xshift=3pt]a3.315);
+ \draw[shorten >=2pt](n3)..controls+(0:2em)and+(270:2em)..(a0);
+ }%
+}
+\chemnameinit{}/
+\endgroup
+
+\exemple*{Taxotere}/\chemfig{-[::-30](-[5])(-[7])-[::+60]-[::-60]O-[::+60](=[::-45]O)-[::+90]HN>:[::-60](-[::+60]**6(------))
+-[::-30](<:[2]OH)-[::-60](=[6]O)-[::+60]O>:[::-60]*7(---?(<[::-120]OH)-(<|[1]CH_3)(<:[::-90]CH_3)
+-(-[1](<[::+80]HO)-[0](=[::+60]O)-[7](<|[::+130]CH_3)(-[::+75](<|[2]OH)-[::-60]-[::-60](<[::+30]O-[::-90])
+-[::-60](<[::+90])(<:[::+30]O-[7](-[6]CH_3)=[0]O)-[::-60])-[6]-[5,1.3]?(<:[7]O-[5](=[::-60]O)
+-[6]**6(------)))=(-[2]CH_3)-)}/
+\end{document} \ No newline at end of file
diff --git a/macros/generic/chemfig/chemfig-fr.pdf b/macros/generic/chemfig/chemfig-fr.pdf
new file mode 100644
index 0000000000..1528fd19ac
--- /dev/null
+++ b/macros/generic/chemfig/chemfig-fr.pdf
Binary files differ
diff --git a/macros/generic/chemfig/chemfig-fr.tex b/macros/generic/chemfig/chemfig-fr.tex
new file mode 100644
index 0000000000..c0b65b52d1
--- /dev/null
+++ b/macros/generic/chemfig/chemfig-fr.tex
@@ -0,0 +1,2842 @@
+\documentclass[10pt,french]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper,margin=2.5cm,footskip=10mm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,amsmath,array,longtable,xspace,fancybox,boites,textcomp,enumitem,chemfig,fancyhdr,multicol}
+\usepackage[scaled=0.8]{luximono}
+\usetikzlibrary{decorations.pathmorphing}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{matrix}
+\usepackage[protrusion=true,expansion,final,babel=true]{microtype}
+\fancypagestyle{plain}{%
+ \fancyhead[L]{}
+ \fancyhead[C]{}
+ \fancyhead[R]{}
+ \fancyfoot[l]{\tiny Compilé le \today.}
+ \fancyfoot[c]{}
+ \fancyfoot[r]{\thepage}}
+\renewcommand\headrulewidth{0pt}
+
+\makeatletter
+\newcommand\make@car@active[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~}%
+}
+
+\newif\if@exstar
+
+\newcommand\exemple{%
+ \begingroup
+ \parskip\z@
+ \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+ \@ifstar{\@exstartrue\exemple@}{\@exstarfalse\exemple@}}
+
+\newcommand\exemple@[2][65]{%
+ \medbreak\noindent
+ \begingroup
+ \let\do\@makeother\dospecials
+ \make@car@active\ { {}}%
+ \make@car@active\^^M{\par\leavevmode}%
+ \make@car@active\^^I{\space\space}%
+ \make@car@active\,{\leavevmode\kern\z@\string,}%
+ \make@car@active\-{\leavevmode\kern\z@\string-}%
+ \make@car@active\>{\leavevmode\kern\z@\string>}%
+ \make@car@active\<{\leavevmode\kern\z@\string<}%
+ \exemple@@{#1}{#2}%
+}
+
+\newcommand\exemple@@[3]{%
+ \def\@tempa##1#3{\exemple@@@{#1}{#2}{##1}}%
+ \@tempa
+}
+
+\newcommand\exemple@@@[3]{%
+ \xdef\the@code{#3}%
+ \endgroup
+ \if@exstar
+ \begingroup
+ \fboxrule0.4pt
+ \let\breakboxparindent\z@
+ \def\bkvz@bottom{\hrule\@height\fboxrule}%
+ \let\bkvz@before@breakbox\relax
+ \def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep}%
+ \def\bkvz@left{\vrule\@width\fboxrule\hskip\fboxsep}%
+ \def\bkvz@right{\hskip\fboxsep\vrule\@width\fboxrule}%
+ \def\bkvz@top{\hbox to \hsize{%
+ \vrule\@width\fboxrule\@height\fboxrule
+ \leaders\bkvz@bottom\hfill
+ \sffamily
+ \fboxsep\z@
+ \colorbox{black}{\kern0.25em\color{white}\footnotesize\lower0.5ex\hbox{\strut#2}\kern0.25em}%
+ \leaders\bkvz@bottom\hfill
+ \vrule\@width\fboxrule\@height\fboxrule}}%
+ \breakbox
+ \kern.5ex\relax
+ \ttfamily\footnotesize\the@code\par
+ \normalfont
+ \kern3pt
+ \hrule height0.1pt width\linewidth depth0.1pt
+ \vskip5pt
+ \rightskip0pt plus 1fill
+ \everypar{{\color{lightgray}\rlap{\vrule height0.1pt width\linewidth depth0.1pt}}\hskip0pt plus 1fill}%
+ \newlinechar`\^^M\everyeof{\noexpand}\scantokens{#3}\par
+ \endbreakbox
+ \endgroup
+ \else
+ \vskip0.5ex
+ \boxput*(0,1)
+ {\fboxsep\z@
+ \hbox{\sffamily\colorbox{black}{\leavevmode\kern0.25em{\color{white}\footnotesize\strut#2}\kern0.25em}}%
+ }%
+ {\fboxsep5pt
+ \fbox{%
+ $\vcenter{\hsize\dimexpr0.#1\linewidth-\fboxsep-\fboxrule\relax
+ \kern5pt\parskip0pt \ttfamily\footnotesize\the@code}%
+ \vcenter{\kern5pt\hsize\dimexpr\linewidth-0.#1\linewidth-\fboxsep-\fboxrule\relax
+ \everypar{{\color{lightgray}\rlap{\vrule height0.1pt width\dimexpr\linewidth-0.#1\linewidth-\fboxsep-\fboxrule depth0.1pt}}}%
+ \footnotesize\newlinechar`\^^M\everyeof{\noexpand}\scantokens{#3}}$%
+ }%
+ }%
+ \fi
+ \medbreak
+ \endgroup
+}
+
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\Verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+
+\newcommand\falseverb[1]{{\ttfamily\detokenize\expandafter{\string#1}}}
+
+\def\CFfrdate@i#1/#2/#3\@nil{\number#3\relax\ifnum#3=1 \ier{}\fi\space \ifcase#2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\edef\CFfrdate{\expandafter\CFfrdate@i\CFdate\@nil}
+
+\DeclareRobustCommand\CF{%
+ \textsf{%
+ chem%
+ \if\string b\detokenize\expandafter{\f@series}%
+ \lower0.01em\hbox{\itshape f}\kern-0.06em
+ \else
+ \lower0.045em\hbox{\kern-0.05em \itshape f}\kern0.026em
+ \fi ig%
+ }%
+ \xspace
+}
+\makeatother
+
+\usepackage{babel}
+\frenchbsetup{StandardLists=true,og=«,fg=»}
+\newcommand\TIKZ{ti\textit kz\xspace}
+\newcommand\molht[1]{\begingroup\parskip3.5pt\par\hfill\chemfig{#1}\hfill\null\par\endgroup}
+\newcommand\boxednode[2]{\fbox{$\mathrm{#1}\vphantom{M_1}$}_{#2}}
+\newcommand\boxedfalseverb[1]{{\fboxsep0pt\fbox{\vphantom|\falseverb{#1}}}}
+\newcommand*\chevrons[1]{\textlangle\textit{#1}\textrangle}
+\newcommand*\CFkey[1]{{\color{teal}\texttt{\detokenize{#1}}}}
+\newcommand*\CFval[1]{{\color{teal}\textlangle\textit{#1}\textrangle}}
+\newcommand*\CFkv[2]{\CFkey{#1}{\color{teal}${}={}$}\CFval{#2}}
+\newcommand*\CFparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}}\fi\\}
+\newcommand*\CFdelimparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}}\fi}
+
+\usepackage[plainpages=false,pdfpagelabels,bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=magenta,pdfauthor={Christian TELLECHEA},pdftitle={ChemFig},pdfsubject={Dessiner des molécules 2D avec LaTeX},pdfkeywords={ChemFig},pdfcreator={LaTeX}]{hyperref}
+
+\csname @addtoreset\endcsname{section}{part}
+\usepackage{titlesec}
+\titleformat{\part}[display]{\normalfont\filcenter\sffamily\bfseries}{}{0pt}{\Huge}
+
+\begin{document}
+\topsep=3pt plus5pt minus2pt\relax
+\begin{titlepage}
+ \catcode`!12
+ \begin{tikzpicture}[remember picture,overlay]
+ \shade [left color=blue,right color=white]([yshift=2cm]current page.west) rectangle ([xshift=-1cm]current page.south);
+ \shade [left color=white,right color=blue] ([xshift=1cm]current page.south) rectangle ([yshift=2cm]current page.east);
+ \filldraw[black](current page.north west) rectangle ([yshift=7cm]current page.east);
+ \shade[top color=black,bottom color=blue]([yshift=7cm]current page.east)rectangle([yshift=2.5cm]current page.west);
+ \filldraw[black!55!blue!100]([yshift=2.5cm]current page.east)rectangle([yshift=2cm]current page.west);
+ \end{tikzpicture}
+ \begin{center}
+ \color{white}\sffamily\fontsize{50pt}{50pt}\selectfont\CF\par
+ \Large v\CFver\par
+ \CFfrdate\par\bigbreak
+ \normalsize Christian Tellechea\smallbreak
+ \href{mailto:unbonpetit@netc.fr}{\texttt{unbonpetit@netc.fr}}\par\vskip1.5cm
+ \huge Une extension \TeX{} pour dessiner des molécules%
+ \end{center}
+ \vskip4cm
+ \begin{center}
+ \scriptsize
+ \setchemfig{atom sep=3em}%
+ \chemfig{-[::-30](-[5])(-[7])-[::+60]-[::-60]O-[::+60](=[::-45]O)-[::+90]HN>:[::-60](-[::+60]**6(------))-[::-30](<:[2]OH)-[::-60](=[6]O)-[::+60]O>:[::-60]*7(---?(<[::-120]OH)-(<|[1]CH_3)(<:[::-90]CH_3)-(-[1](<[::+80]HO)-[0](=[::+60]O)-[7](<|[::+130]CH_3)(-[::+75](<|[2]OH)-[::-60]-[::-60](<[::+30]O-[::-90])-[::-60](<[::+90])(<:[::+30]O-[7](-[6]CH_3)=[0]O)-[::-60])-[6]-[5,1.3]?(<:[7]O-[5](=[::-60]O)-[6]**6(------)))=(-[2]CH_3)-)}%
+ \par
+ {\sffamily\small Le taxotère}%
+ \end{center}
+ \vskip1.5cm
+ \hfill
+ \hbox to 0pt{\hss\scriptsize
+ \setchemfig{bond offset=1pt,atom sep=2.5em,compound sep=5em,arrow offset=6pt}
+ \schemestart
+ \chemfig{(-[:-150]R')(-[:-30]R)=[2]N-[:30]OH}
+ \arrow{<=>[\chemfig{H^\oplus}]}
+ \chemfig{(-[@{a0}:-150]R')(-[:-30]R)=[2]@{a1}N-[@{b0}:30]@{b1}\chemabove{O}{\scriptstyle\oplus}H_2}
+ \chemmove[red,-stealth,red,shorten <=2pt]{
+ \draw(a0)..controls +(135:2mm) and +(215:4mm).. (a1);
+ \draw(b0)..controls +(120:2mm) and +(180:3mm).. ([yshift=7pt]b1.180);}
+ \arrow{<=>[\chemfig{{-}H_2O}]}[,1.1]
+ \chemleft[{\subscheme[90]{%
+ \chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
+ \arrow{<->}[,0.75]
+ \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemmove[red,-stealth,red,shorten <=3pt]{
+ \draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-\chemabove{O}{\scriptstyle\oplus} H_2)}
+ \arrow{<=>[\chemfig{{-}H^\oplus}]}
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-OH)}
+ \arrow
+ \chemfig{*6(R\rlap{$'$}-\chembelow{N}{H}-(-R)(=[2]O))}
+ \schemestop\hss}\hfill\null
+ \begin{center}
+ \sffamily\small Réarrangement de Beckmann%
+ \end{center}
+\end{titlepage}
+\parindent0pt\pagestyle{plain}
+\tableofcontents
+\parskip\medskipamount
+\newpage
+
+\setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt,label=--}
+\part{Introduction}
+\section{Nouveau dans la v1.4}
+\subsection{Primitive \texttt{\textbackslash expanded}}
+\fbox{\vbox{\hsize\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax\textbf{Important} : à partir de la version 1.41, \CF nécessite un moteur \TeX{} fournissant la primitive \texttt{\string\expanded}. Si ce n'est pas le cas, un message d'erreur sera émis et la version 1.4 sera chargée (dernière version fonctionnant sans la primitive \texttt{\string\expanded}) : il est vivement conseillé de mettre à jour sa distribution \LaTeX{} afin de profiter d'un moteur \TeX{} récent permettant l'utilisation de cette nouvelle primitive.}}\medbreak
+
+\subsection{Position et rotation des délimiteurs}
+La nouvelle clé \CFkey{h align} pour les délimiteurs permet, lorsqu'elle est mise à \CFval{false} de ne plus aligner automatiquement les délimiteurs horizontalement. Lorsque les délimiteurs ne sont plus sur une même horizontale, on peut les faire pivoter automatiquement en rendant la clé \CFkey{auto rotate} égale à \CFval{true}. On peut passer outre ce réglage automatique et choisir l'angle de rotation avec la clé \CFkey{rotate}. Voir page~\pageref{polymerdelim}.
+
+\subsection{Caractère privé}
+Dans le code de \CF, le caractère utilisé dans le nom des macros privées est «\verb|_|» (underscore) et non plus «\verb|@|» (arobe) : le préfixe des macros privées de \CF est «\verb|\CF_|». La majorité des utilisateurs de \CF ne doit pas devrait pas être concernée par ce changement, mais l'élaboration ou la maintenance de codes spécifiques tel que ceux présentés à la section «Créer ses propres flèches» à la page~\pageref{definearrow} qui font appel à des macros privées doit conduire à tenir compte de ce changement de catcode; cela va donc nécessiter une \emph{mise à jour du nom des macros} pour ceux qui ont eu recours aux macros privées de \CF. Pour rendre possible l'utilisation de «\verb|_|» dans les noms des macros, on doit exécuter l'ordre «\verb|\catcode`\_=11|» et pour revenir à un l'état normal «\verb|\catcode`\_=8|».
+
+\subsection{Caractère \#}
+Tous ceux qui programment en \TeX{} connaissent les extrêmes précautions qui doivent être prises avant d'utiliser le caractère «\verb|#|». Ce caractère est autorisé dans le code représentant la molécule, mais pour des raisons de fonctionnement interne à \TeX, il sera doublé si la commande \verb|\chemfig| se trouve dans l'argument d'une macro (comme \verb|\fbox| dans l'exemple ci-dessous). Pour éviter ce doublement, on peut écrire \verb|\#| ou avoir recours à la macro \verb|\CFhash| :
+
+\exemple{Caractère \#}/\setchemfig{atom sep=5em}\fboxsep=1pt
+1) \chemfig{A#-B_#-C^#}\par
+2) \fbox{\chemfig{A#-B_#-C^#}}\par
+3) \fbox{\chemfig{A\#-B_\#-C^\#}}\par
+4) \fbox{\chemfig{A\CFhash-B_\CFhash-C^\CFhash}}/
+
+Pour la macro \verb|\definesubmol|, le caractère \verb|#| est également autorisé, mais son emploi est plus complexe car il recouvre plusieurs cas qui sont examinés à la page~\pageref{definesubmol}.
+
+\subsection{Anciennes macros, nouvelle syntaxe}
+Les macros auparavant utilisées pour régler les paramètres de \CF sont abandonnées, ne sont plus définies et donc, \emph{produiront à une erreur de compilation} si elles sont exécutées:
+\begin{center}
+ \begin{tabular}{*3l}
+ \verb-\setcrambond-&\verb-\setatomsep-&\verb-\enablefixedbondlength-\\
+ \verb-\disablefixedbondlength-&\verb-\setbondoffset-&\verb-\setdoublesep-\\
+ \verb-\setangleincrement-&\verb-\setnodestyle-&\verb-\setbondstyle-\\
+ \verb-\setlewis-&\verb-\setlewisdist-&\verb-\setstacksep-\\
+ \verb-\setcompoundstyle-&\verb-\setarrowdefault-&\verb-\setandsign-\\
+ \verb-\setarrowoffset-&\verb-\setcompoundsep-&\verb-\setarrowlabelsep-\\
+ \verb-\enablebondjoin-&\verb-\disablebondjoin-&\verb-\schemedebug-
+ \end{tabular}
+\end{center}
+Désormais, pour régler les paramètres de \CF on a le choix entre :
+\begin{itemize}
+ \item la macro \Verb|\setchemfig{<clés>=<valeurs>}| règle les paramètres selon la méthode de clés/valeurs pour le reste du document;
+ \item la macro \Verb|\chemfig[<clés>=<valeurs>]| reçoit dans son argument optionnel les paramètres valables uniquement pour cette molécule;
+ \item la macro \verb|\resetchemfig| restaure les paramètres à leurs valeurs par défaut.
+\end{itemize}
+
+La liste des paramètres et leurs valeurs par défaut est présentée à la page~\pageref{listeparametres}.
+
+La syntaxe étoilée \verb|\chemfig*| n'est plus autorisée. Pour spécifier une longueur constante de liaisons, il faut utiliser la clé \CFkey{fixed length} et la positionner à \CFval{true}, voir page~\pageref{longueur.liaison}.
+
+\subsection{Les macros \texttt{\textbackslash lewis} et \texttt{\textbackslash Lewis}}
+Ces deux macros subissent également un léger changement de syntaxe. Leur argument optionnel entre crochets n'est plus destiné à recevoir le coefficient d'espacement diagonal, mais des \Verb|<clés>=<valeurs>| afin que les paramètres puissent être spécifiés individuellement pour chaque appel de la macro \verb|\lewix| ou \verb|\Lewis|. Voir page~\pageref{lewis}.
+
+\section{Présentation}
+Pour charger \CF, il faut écrire :
+\begin{itemize}
+ \item {\color{blue}\verb-\input chemfig.tex-} avec $\varepsilon$\TeX;
+ \item {\color{blue}\verb-\usepackage{chemfig}-} avec \LaTeX;
+ \item {\color{blue}\verb-\usemodule[chemfig]-} avec Con\TeX t;
+\end{itemize}
+
+Dans tous les cas, le package \TIKZ, s'il n'a pas été chargé auparavant, est chargé par \CF.
+
+La commande principale permettant de dessiner les molécules est \Verb|\chemfig{<code>}|. L'argument \Verb|<code>| est la suite de caractères décrivant le dessin de la molécule selon les règles qui seront exposées dans ce manuel.
+
+Tout a été fait pour qu'il soit possible de dessiner le plus grand nombre de configurations de molécules chimiques, tout en privilégiant une syntaxe simple, souple et intuitive. Malgré tout, le \Verb-<code>- qui décrit le dessin en 2D de la molécule voit sa complexité augmenter proportionnellement à celle de la molécule à dessiner.
+
+La commande \verb|\chemfig| dessine une molécule en se servant de commandes de l'extension \TIKZ, placées à l'intérieur de l'environnement \verb|tikzpicture|. Le choix de \TIKZ implique que:
+\begin{itemize}
+\item l'utilisateur a le choix pour le moteur de compilation : pdf\LaTeX{} peut indifféremment être utilisé en mode dvi (tex $\longrightarrow$ dvi $\longrightarrow$ ps $\longrightarrow$ pdf) ou en mode pdf (tex $\longrightarrow$ pdf). En effet, \TIKZ, via la sous-couche \falseverb{pgf}, donne des résultats graphiques identiques dans les deux modes;
+\item la boîte englobante est automatiquement calculée par \TIKZ et l'utilisateur n'a pas à se préoccuper d'éventuels chevauchements avec le texte. En revanche il faut faire attention à la régularité des interlignes lorsque la molécule est dessinée dans un paragraphe. À titre d'exemple, on a tracé la boîte englobante pour cette molécule : {\fboxsep0pt \fbox{\chemfig{H_3C-C(-[:-30]OH)=[:30]O}}}.
+\end{itemize}
+
+\section{Remerciements}
+Cette extension a pu voir le jour grâce à l'aide de Christophe \textsc{Casseau} qui en a eu l'idée. Je le remercie pour l'aide qu'il m'a apportée en amont de l'écriture du code ainsi que pour les tests qu'il a effectués.
+\bigbreak
+Enfin, je tiens à chaleureusement remercier Theo \textsc{Hopman} qui m'a spontanément proposé d'effectuer la traduction de ce manuel en anglais.
+\newpage
+
+\part{Fonctionnement de \protect\CF}
+Cette partie est consacrée à la description des fonctionnalités les plus courantes de \CF. L'utilisateur trouvera ici les explications suffisantes pour dessiner la plupart des molécules. La présentation des fonctionnalités est faite sous un angle théorique, et le but de cette partie n'est pas de dessiner de vraies molécules chimiques mais de donner à l'utilisateur une description formelle des fonctionnalités de \CF. La partie «Utilisation avancée», page~\pageref{utilisation.avancee}, sera plus pratique et dévoilera des fonctionnalités plus avancées pour les utilisations les plus pointues. On y mettra aussi en avant des méthodes pour construire de vraies molécules chimiques, page \pageref{exemples.commentes}. Enfin, la dernière partie présentera des molécules chimiques et le code utilisé pour les dessiner.
+
+\section{La macro \texttt{\textbackslash chemfig}}
+La macro \verb|\chemfig| a la syntaxe suivante
+\begin{center}
+ \Verb|\chemfig[liste de <clés>=<valeurs>]{<code molécule>}|
+\end{center}
+L'argument optionnel entre crochets spécifie les réglages des paramètres qui seront utilisés pour le tracé de la molécule. Il est à noter que les paramètres ainsi modifiés ne le sont \emph{que pour la molécule en cours} et seront restaurés à leurs valeurs précédentes une fois la macro terminée. Pour modifier de façon durable des paramètres, il faut passer par la macro \Verb|\setchemfig{<clés>=<valeurs>}|.
+
+Voici la liste exhaustive des paramètres ainsi que leurs valeurs par défaut\label{listeparametres}. Il faut noter que les \chevrons{clés} depuis \CFkey{scheme debug} inclus jusqu'à la fin de la liste concernent les schémas réactionnels et n'ont pas de sens dans l'argument optionnel de la macro \verb|\chemfig| où elles sont simplement ignorées :\par
+\leavevmode\hfill
+\begin{minipage}[t]{.45\linewidth}
+ \begin{longtable}{rl}\hline
+ \chevrons{clés} & \chevrons{valeurs} par défaut\\\hline\endhead
+ \CFparam{chemfig style}
+ \CFparam{atom style}
+ \CFparam{bond join}
+ \CFparam{fixed length}
+ \CFparam{cram rectangle}
+ \CFparam{cram width}
+ \CFparam{cram dash width}
+ \CFparam{cram dash sep}
+ \CFparam{atom sep}
+ \CFparam{bond offset}
+ \CFparam{double bond sep}
+ \CFparam{angle increment}
+ \CFparam{node style}
+ \CFparam{bond style}
+ \CFparam{lewis | width}
+ \CFparam{lewis sep}
+ \CFparam{lewis length}
+ \CFparam{lewis style}
+ \CFparam{lewis dist}\hline
+ \end{longtable}
+\end{minipage}\hfill
+\begin{minipage}[t]{.45\linewidth}
+ \begin{longtable}{rl}\hline
+ \chevrons{clés} & \chevrons{valeurs} par défaut\\\hline\endhead
+ \CFparam{lewis radius}
+ \CFparam{lewis diag coeff}
+ \CFparam{cycle radius coeff}
+ \CFparam{stack sep}
+ \CFparam{scheme debug}
+ \CFparam{compound style}
+ \CFparam{compound sep}
+ \CFparam{arrow offset}
+ \CFparam{arrow angle}
+ \CFparam{arrow coeff}
+ \CFparam{arrow style}
+ \CFparam{arrow double sep}
+ \CFparam{arrow double coeff}
+ \CFparam{arrow double harpoon}
+ \CFparam{arrow label sep}
+ \CFparam{arrow head}
+ \CFparam{+ sep left}
+ \CFparam{+ sep right}
+ \CFparam{+ vshift}\hline
+ \end{longtable}
+\end{minipage}\hfill\null\bigbreak
+
+Le \Verb|<code molécule>| contient les instructions pour tracer la molécule selon une syntaxe qui sera expliquée dans ce document. Il n'y a pas de restriction a priori sur les caractères acceptés dans ce code :
+\begin{itemize}
+ \item tous les caractères de catcode 11 ou 12, c'est-à-dire les lettres majuscules ou minuscules, les chiffres, les opérateurs mathématiques (\texttt+ \texttt- \texttt* \texttt/ \texttt=), les signes de ponctuation qu'ils soient actifs ou non (\verb|.| \verb|,| \verb|;| \verb|:| \verb|!| \verb|?| \verb|'| \verb|`| \verb|"| \verb-|-), les parenthèses et les crochets;
+ \item les caractères plus spéciaux tels que «\verb|~|», «\verb|#|»\footnote{Pour éviter que \texttt\# ne soit doublé lorsque la macro \texttt{\textbackslash chemfig} se trouve dans l'argument d'une macro, on peut utiliser à la place \texttt{\textbackslash\#} ou la macro \texttt{\textbackslash CFhash}.} ainsi que «\verb|^|» et «\verb|_|» qui ont leur propriétés normales du mode mathématique;
+ \item les espaces, mais ceux-ci sont ignorés par défaut car les atomes sont composés en mode mathématique;
+ \item les accolades «\verb|{|» et «\verb|}|» qui ont leur comportement normal de marqueurs de groupe ou délimiteurs d'argument de macro;
+ \item des macros.
+\end{itemize}
+
+Dans tous les cas, \CF placera \emph{sur la ligne de base courante le premier atome rencontré}, qu'il soit vide ou pas. Dans les exemples figurant dans ce document, la ligne de base est tracée en gris clair.
+
+\section{Groupes d'atomes}
+Intrinsèquement, le dessin d'une molécule chimique consiste à relier par des traits de différents types des groupes d'atomes. Ainsi, dans la molécule \chemfig{O=O}, il y a 2 groupes d'atomes, chacun constitué d'un seul atome «O».
+
+{\fboxsep1pt
+Mais dans cette molécule
+\molht{H_3C-C(-[:-30]OH)=[:30]O}
+on compte 4 groupes d'atomes : «$\mathrm{H_3C}$», «C», «O» et «OH». Pour des raisons que nous verrons plus tard, \CF examine chaque groupe d'atomes et le découpe en atomes. Chaque atome s'étend jusqu'à rencontrer une lettre majuscule ou un de ces caractères spéciaux : {\ttfamily \boxedfalseverb{-} \boxedfalseverb{=} \boxedfalseverb{~} \boxedfalseverb{(} \boxedfalseverb{!} \boxedfalseverb{*} \boxedfalseverb{<} \boxedfalseverb{>} \boxedfalseverb{@}}. Pour \CF, tous les caractères entre accolades sont ignorés pour le découpage en atomes.
+
+Par conséquent, le premier groupe d'atomes «$\mathrm{H_3C}$» est découpé en 2 atomes : $\boxednode{H_3}{}$ et $\boxednode C{}$. Chimiquement, il arrive que ce ne soient pas de vrais atomes puisque $\mathrm{H_3}$ par exemple, est constitué de 3 atomes d'hydrogène. Par abus de langage, on parlera d'atomes par la suite. Par conséquent, \CF voit la molécule précédente ainsi :
+\renewcommand*\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\molht{H_3C-C(=[:30]O)(-[:-30]OH)}}
+
+Un espace est ignoré s'il est au début d'un groupe d'atomes.
+
+\section{Différents types de liaisons}
+Pour \CF, les liaisons entre 2 atomes sont de 9 types, correspondant aux caractères \boxedfalseverb-, \boxedfalseverb=, \boxedfalseverb~, \boxedfalseverb>, \boxedfalseverb<, \boxedfalseverb{>:}, \boxedfalseverb{<:}, \boxedfalseverb{>|} et \boxedfalseverb{<|} :\label{types.liaisons}
+\begin{center}
+\begin{tabular}{>{\centering\arraybackslash}m{1.7cm}>{\centering\arraybackslash}m{3cm}>{\centering\arraybackslash}m{2cm}m{4cm}}
+\hline
+\No{} liaison&Code &Résultat &Type de liaison\\\hline
+1 &\verb+\chemfig{A-B}+ &\chemfig{A-B} &Simple\\
+2 &\verb+\chemfig{A=B}+ &\chemfig{A=B} &Double\\
+3 &\verb+\chemfig{A~B}+ &\chemfig{A~B} &Triple\\
+4 &\verb+\chemfig{A>B}+ &\chemfig{A>B} &Cram pleine droite\\
+5 &\verb+\chemfig{A<B}+ &\chemfig{A<B} &Cram pleine gauche\\
+6 &\verb+\chemfig{A>:B}+&\chemfig{A>:B}&Cram pointillée droite\\
+7 &\verb+\chemfig{A<:B}+&\chemfig{A<:B}&Cram pointillée gauche\\
+8 &\verb+\chemfig{A>|B}+&\chemfig{A>|B}&Cram évidée droite\\
+9 &\verb+\chemfig{A<|B}+&\chemfig{A<|B}&Cram évidée gauche\\\hline
+\end{tabular}
+\end{center}
+\label{double bond sep}La \chevrons{clé} \CFkv{double bond sep}{dim} permet de régler l'espacement entre les traits des liaisons doubles ou triples. Cet espacement vaut 2pt par défaut.
+
+\label{longueur.liaison}Lorsqu'une liaison est faite entre 2 atomes, il faut comprendre que ces atomes sont contenus dans des boîtes invisibles rectangulaires. Les centres des deux rectangles sont séparés par une distance réglable $\Delta$, appelée «distance interatome». De plus, les liaisons ne relient pas exactement les frontières des rectangles : une distance $\delta$, réglable elle aussi, sépare le bord des rectangles du début et de la fin de la liaison. Pour aider à la compréhension, les boîtes rectangulaires sont rendues visibles dans ce schéma :
+\begin{center}
+\begin{tikzpicture}[every node/.style={anchor=base,inner sep=1.5pt,outer sep=0pt,minimum size=0pt},baseline]
+ \node[draw] at(0,0)(aa){\huge A};
+ \node[draw]at(4,0)(bb){\huge B};
+ \path[shorten <=10pt,shorten >=10pt,draw](aa)--(bb)coordinate[pos=0](al) coordinate[pos=1](bl);
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=10pt]al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(bl){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=-10pt]bl){};
+ \draw[blue,dash pattern=on 1pt off 1pt](bl)--([yshift=0.7cm]bl);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=-10pt]bl)--([xshift=-10pt,yshift=0.7cm]bl);
+ \draw[stealth-stealth]([yshift=0.6cm]bl.center)--([xshift=-10pt,yshift=0.6cm]bl.center) node [midway,above,draw=none]{$\delta$};
+ \draw[blue,dash pattern=on 1pt off 1pt](al)--([yshift=0.7cm]al);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=10pt]al)--([xshift=10pt,yshift=0.7cm]al);
+ \draw[stealth-stealth]([yshift=0.6cm]al.center)--([xshift=10pt,yshift=0.6cm]al.center) node [midway,above,draw=none]{$\delta$};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(aa){};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(bb){};
+ \draw[stealth-stealth]([yshift=1cm]aa.center)--([yshift=1cm]bb.center) node [midway,above,draw=none] {$\Delta$} ;
+ \draw[red,dash pattern=on 2pt off2pt](aa.center)--([yshift=1.1cm]aa.center);
+ \draw[red,dash pattern=on 2pt off2pt](bb.center)--([yshift=1.1cm]bb.center);
+\end{tikzpicture}
+\end{center}
+
+\label{atom sep}La \chevrons{clé} \CFkv{atom sep}{dim} règle cette distance interatome $\Delta$. Ce paramètre, comme tous les paramètres, agit sur toutes les molécules qui vont suivre.
+
+\exemple{Distance interatome}|\chemfig[atom sep=2em]{A-B}\par
+\chemfig[atom sep=50pt]{A-B}|
+
+\label{bond offset}La \chevrons{clé} \CFkv{bond offset}{dim} permet de régler l'espacement $\delta$ entre le trait représentant la liaison et l'atome. Sa valeur par défaut est 2pt.
+\exemple{Retrait des liaisons}|\chemfig[bond offset=0pt]{A-B}\par
+\chemfig[bond offset=5pt]{A-B}|
+
+Si deux liaisons se suivent, alors \CF insère un groupe vide \verb-{}-, et autour de ce groupe vide, l'espacement $\delta$ est nul :
+\exemple{Groupes vides}/\chemfig{A-B=-=C}/
+
+\label{bond style}La \chevrons{clé} \CFkv{bond style}{code tikz} définit le style de toutes les liaisons qui seront dessinées par la suite. Le \CFval{code tikz} est vide par défaut. Pour personnaliser les liaisons une par une, voir page~\pageref{perso-liaisons}.
+\exemple{Style des liaisons}/\chemfig[bond style={line width=1pt,red}]{A-B=C>|D<E>:F}/
+
+\label{modif.retrait}On peut spécifier l'espacement $\delta$ pour une seule liaison avec le caractère \verb-#-. Ce caractère doit se situer \emph{immédiatement} après le signe de liaison et dispose d'un argument obligatoire entre parenthèses de la forme «\Verb-#(<dim1>,<dim2>)-», où \Verb-<dim1>- représente l'espacement $\delta$ au début de la liaison et \Verb-<dim2>- celui de la fin. Si \Verb-<dim2>- est omis, l'espacement en fin de liaison prend la valeur de $\delta$ en vigueur à ce moment. On peut observer sur cet exemple comment le retrait, réglé à 4pt pour être plus visible, est rendu nul pour la liaison arrivant sur «B», puis partant de «B» et enfin pour les deux à la fois :
+\begingroup
+\catcode`\#12
+\exemple{Réglage fin du retrait des liaisons}/\setchemfig{bond offset=4pt}
+\chemfig{A-B-C}\par
+\chemfig{A-#(,0pt)B-C}\par
+\chemfig{A-B-#(0pt)C}\par
+\chemfig{A-#(,0pt)B-#(0pt)C}/
+\endgroup
+
+Par défaut, tous les atomes se trouvant dans les groupes d'atomes sont composés en mode mathématique (les espaces sont ignorés). Ils peuvent donc contenir des caractères propres à ce mode comme la mise en indice ou en exposant\footnote{Il existe un problème de placement des groupes d'atomes contenant des exposants ou des indices. Voir page~\pageref{alignement.vertical}.}:
+\exemple{Mode mathématique}|\chemfig{A_1B^2-C _ 3 ^ 4}|
+
+Il existe des réglages spécifiques aux liaisons de Cram:
+\begin{itemize}
+ \item \CFkv{cram width}{dim} est la largeur de la base des triangles et vaut 1.5ex par défaut;
+ \item \CFkv{cram dash width}{dim} est l'épaisseur des pointillés et vaut 1pt par défaut;
+ \item \CFkv{cram dash sep}{dim} est l'espacement entre les pointillés et vaut 2pt par défaut.
+\end{itemize}
+
+Voici un exemple où les 3 dimensions sont modifiées :
+
+\exemple{Liaison de Cram modifiée}-\chemfig[cram width=10pt,
+ cram dash width=0.4pt,
+ cram dash sep=1pt]{A>B>:C>|D}-
+
+\section{Angle d'une liaison}
+Chaque liaison admet un argument optionnel qui se met entre crochet. Le contenu de cet argument optionnel permet de régler tout ce dont on a besoin pour la liaison. Cet argument optionnel est constitué de 5 champs séparés par des virgules qui sont autant d'arguments optionnels pour la liaison. Le premier de ces arguments définit l'angle optionnel de la liaison. Les angles vont croissant dans le sens trigonométrique et sont définis par rapport à l'horizontale. Si l'argument optionnel est vide, alors l'angle par défaut vaut 0\degres. Nous verrons plus loin comment modifier cet angle par défaut.
+
+Il y a plusieurs façons de spécifier l'angle d'une liaison.
+\subsection{Angle prédéfini}
+Lorsque l'argument optionnel contient un entier celui-ci représente l'angle que fait la liaison avec l'horizontale, en multiples de 45\degres. Ainsi, \verb-[0]- spécifie un angle de 0\degres, \verb-[1]- de 45\degres, etc.
+
+\exemple{Angles prédéfinis}|\chemfig{A-B-[1]C-[3]-D-[7]E-[6]F}|
+
+Ces angles restent valable si les atomes sont vides et il en sera de même par la suite pour toutes les fonctionnalités que nous verrons :
+\exemple{Angles prédéfinis, groupes vides}|\chemfig{--[1]-[3]--[7]-[6]}|
+
+Pour ceux qui trouvent cela « affreux\footnote{Voir \texttt{\detokenize{http://tex.stackexchange.com/questions/161796/ugly-bond-joints-in-chemfig}}} », il est désormais possible de raccorder les liaisons simples entres-elles moyennant un temps de compilation légèrement augmenté. La \chevrons{clé} booléenne \CFkv{bond join}{booléen} permet, lorsqu'elle est \CFval{true} d'activer cette fonctionnalité. La valeur par défaut est \CFval{false} qui est le comportement préférable.
+
+\exemple{Raccord entre liaisons}/\setchemfig{bond style={line width=3pt}}
+\chemfig{-[1]-[7]} et
+\chemfig[bond join=true]{-[1]-[7]}/
+
+\label{angle increment}La \chevrons{clé} \CFkv{angle increment}{angle} permet de choisir un autre angle que celui de 45\degres{} sélectionné par défaut :
+
+\exemple{Modification de l'angle prédéfini}/Par défaut (45) : \chemfig{-[1]-[-1]-[1]-[-1]}
+
+Angle de 30 : \chemfig[angle increment=30]{-[1]-[-1]-[1]-[-1]}/
+
+\subsection{Angle absolu}
+Si on veut spécifier un angle en degrés avec l'horizontale, alors l'argument optionnel doit prendre cette forme : \Verb-[:<angle absolu>]-. S'il le faut, l'\Verb-<angle absolu>- est ramené dans l'intervalle $[0\;;\;360]$ :
+\exemple{Angles absolus}/\chemfig{A-[:30]B=[:-75]C-[:10]D-[:90]>|[:60]-[:-20]E-[:0]~[:-75]F}/
+
+\subsection{Angle relatif}\label{angle.relatif}
+Il est souvent intéressant de spécifier pour une liaison l'angle qu'elle fera relativement à la précédente. On doit alors employer cette syntaxe pour l'argument optionnel : \Verb-[::<angle relatif>]-. Le signe de l'\Verb-<angle relatif>- peut être omis s'il s'agit d'un \verb-+-.
+
+Voici une molécule où les angles des liaisons augmentent de 20\degres{} à chacune après la première dont l'angle est absolu de $-5\degres$ :
+\exemple{Suite d'angles relatifs}|\chemfig{A-[:-5]-[::+20]-[::20]B-[::+20]-[::20]C-[::20]}|
+
+On peut «casser» un enchaînement d'angles relatifs en mettant un angle absolu ou prédéfini lorsqu'on le souhaite. Ici, c'est à l'atome «B» dont la liaison suivante un angle absolu de 315\degres.
+\exemple{Suite d'angles relatif puis angle absolu}|\chemfig{A-[:-5]-[::20]-[::20]B-[7]-[::20]C-[::20]}|
+
+\section{Longueur d'une liaison}
+En fait, il faudrait plutôt parler d'espace interatome que de longueur d'une liaison. En effet, seul l'espace interatome est réglable avec \CFkey{atom sep} comme on l'a vu page~\pageref{longueur.liaison}. Une fois ce paramètre fixé, la longueur d'une liaison dépend du contenu des atomes et, dans une moindre mesure, de l'angle que fait la liaison avec l'horizontale. Il est bien évident que deux atomes peu «encombrants» auront leurs bords plus lointains que s'il avaient été encombrants. On s'en rend très bien compte sur cet exemple où les atomes «I» sont plus étroits que les atomes «M» ce qui entraîne que la liaison entre les «I» est plus longue que celle entre les «M» :
+\exemple{Influence de la largeur de l'atome}|\chemfig{I-I}\par
+\chemfig{M-M}|
+
+Cet aspect de l'encombrement des atomes se fait particulièrement sentir lorsqu'ils comportent les exposants ou des indices. Dans cet exemple, la liaison est bien plus courte, au point de se confondre avec un signe mathématique $-$ :
+\exemple{Liaison trop courte}|\chemfig{A^{++}_{2}-B^{-}_3}|
+
+Il est important de remarquer que l'exposant «\verb+-+» est \emph{mis entre accolades}. En effet si ce n'était pas le cas, \CF stopperait l'atome sur ce caractère qui est un caractère de liaison. L'atome serait donc «\verb-B^-», ce qui conduirait à des résultats inattendus.
+
+Il est possible de changer le comportement de \CF quant à l'espace interatome. En effet, lorsque la \chevrons{clé} \CFkey{fixed legnth} est mise à \CFval{true}, la \chevrons{clé} \CFkey{atom sep} ne spécifie plus la distance entre les centres des atomes, notée $\Delta$, mais \emph{la longueur des liaisons}. Dès lors, les liaisons ont des longueurs fixes tandis que la distance entre les centres des atomes devient variable et dépend de leur encombrement. Voici les deux configurations du schéma de la page~\pageref{longueur.liaison} avec les deux valeurs booléennes de \CFkey{fixed length} :
+
+\begin{center}
+\begin{tabular}{c@{\kern2cm}c}
+ \CFkv{fixed length}{false}&\CFkv{fixed length}{true}\\[2ex]
+ \begin{tikzpicture}[every node/.style={anchor=base,inner sep=1.5pt,outer sep=0pt,minimum size=0pt},baseline]
+ \node[draw] at(0,0)(aa){\huge A};
+ \node[draw]at(4,0)(bb){\huge B};
+ \path[shorten <=10pt,shorten >=10pt,draw](aa)--(bb)coordinate[pos=0](al) coordinate[pos=1](bl);
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=10pt]al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(bl){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=-10pt]bl){};
+ \draw[blue,dash pattern=on 1pt off 1pt](bl)--([yshift=0.7cm]bl);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=-10pt]bl)--([xshift=-10pt,yshift=0.7cm]bl);
+ \draw[stealth-stealth]([yshift=0.6cm]bl.center)--([xshift=-10pt,yshift=0.6cm]bl.center) node [midway,above,draw=none]{$\delta$};
+ \draw[blue,dash pattern=on 1pt off 1pt](al)--([yshift=0.7cm]al);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=10pt]al)--([xshift=10pt,yshift=0.7cm]al);
+ \draw[stealth-stealth]([yshift=0.6cm]al.center)--([xshift=10pt,yshift=0.6cm]al.center) node [midway,above,draw=none]{$\delta$};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(aa){};
+ \node[draw,circle,fill,red,minimum size=2pt,inner sep=0pt]at(bb){};
+ \draw[stealth-stealth]([yshift=1cm]aa.center)--([yshift=1cm]bb.center) node [midway,above,draw=none] {$\Delta$} ;
+ \draw[red,dash pattern=on 2pt off2pt](aa.center)--([yshift=1.1cm]aa.center);
+ \draw[red,dash pattern=on 2pt off2pt](bb.center)--([yshift=1.1cm]bb.center);
+ \end{tikzpicture}
+ &
+ \begin{tikzpicture}[every node/.style={anchor=base,inner sep=1.5pt,outer sep=0pt,minimum size=0pt},baseline]
+ \node[draw] at(0,0)(aa){\huge A};
+ \node[draw]at(5,0)(bb){\huge B};
+ \path[shorten <=10pt,shorten >=10pt,draw](aa)--(bb)coordinate[pos=0](al) coordinate[pos=1](bl);
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=10pt]al){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at(bl){};
+ \node[draw,circle,fill,blue,minimum size=1.5pt,inner sep=0pt]at([xshift=-10pt]bl){};
+ \draw[blue,dash pattern=on 1pt off 1pt](bl)--([yshift=0.7cm]bl);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=-10pt]bl)--([xshift=-10pt,yshift=0.7cm]bl);
+ \draw[stealth-stealth]([yshift=0.6cm]bl.center)--([xshift=-10pt,yshift=0.6cm]bl.center) node [midway,above,draw=none]{$\delta$};
+ \draw[blue,dash pattern=on 1pt off 1pt](al)--([yshift=0.7cm]al);
+ \draw[blue,dash pattern=on 1pt off 1pt]([xshift=10pt]al)--([xshift=10pt,yshift=0.7cm]al);
+ \draw[stealth-stealth]([yshift=0.6cm]al.center)--([xshift=10pt,yshift=0.6cm]al.center) node [midway,above,draw=none]{$\delta$};
+ \draw[stealth-stealth]([yshift=1cm]al)--([yshift=1cm]bl) node [midway,above,draw=none] {$\Delta$} ;
+ \draw[red,dash pattern=on 2pt off2pt](al)--([yshift=1.1cm]al);
+ \draw[red,dash pattern=on 2pt off2pt](bl)--([yshift=1.1cm]bl);
+ \end{tikzpicture}
+\end{tabular}
+\end{center}
+
+Afin que les cycles soient des polygones réguliers, le comportement par défaut est rétabli pour les liaisons des cycles, même si \CFkv{fixed length}{true}.
+
+\exemple{Liaisons de longueur fixe}/\chemfig{Cl-Cl}\par
+\chemfig[fixed length=true]{Cl-Cl}/
+
+Notamment lorsque le comportement par défaut est en vigueur et pour se prémunir de liaisons trop courtes, il est parfois nécessaire de pouvoir augmenter (ou parfois réduire) la distance interatome. Pour cela, l'argument optionnel des liaisons est en réalité constitué de plusieurs champs séparés par des virgules. Comme on l'a vu, le premier champ spécifie l'angle. Le deuxième champ, s'il est non vide, est un coefficient qui multipliera la distance interatome $\Delta$ par défaut. Ainsi, écrire \verb+-[,2]+ demandera à ce que cette liaison ait l'angle par défaut (1\ier{} champ vide) et que les atomes qu'elle relie soit espacés d'une distance double de celle par défaut.
+\exemple{Longueur de liaison modifiée}/\chemfig{A^{++}_{2}-[,2]B^{-}_3}\par
+\chemfig{A-B-[,2]C=[,0.5]D}\par
+\chemfig{-=[,1.5]-[,0.75]=[:-20,2]}/
+
+On peut modifier la taille des molécules en jouant sur la taille de la police ou sur la \chevrons{clé} \CFkey{atom sep}, éventuellement sur les deux, en prenant soin de confiner ces changements à l'intérieur d'un groupe si on veut en limiter la portée :
+\exemple{Modifier la taille des molécules}/\normalsize \chemfig{H-[:30]O-[:-30]H}\par
+\setchemfig{atom sep=2.5em}
+\chemfig{H-[:30]O-[:-30]H}\par
+\small \chemfig{H-[:30]O-[:-30]H}\par
+\footnotesize \chemfig{H-[:30]O-[:-30]H}\par
+\scriptsize \chemfig{H-[:30]O-[:-30]H}\par
+\tiny \chemfig{H-[:30]O-[:-30]H}/
+
+\section{Atome de départ et d'arrivée}
+Un groupe d'atomes peut contenir plusieurs atomes. Mettons que l'on veuille relier le groupe «ABCD» au groupe «EFG» avec une liaison. \CF calcule quel atome du premier groupe et quel atome de second groupe il faut relier en fonction de l'angle que fait la liaison avec l'horizontale. Si l'angle est compris entre $-90\degres$ et 90\degres{} (modulo 360\degres) ces valeurs étant \emph{non comprises}, alors, la liaison se fait entre le dernier atome du premier groupe et de premier atome du second groupe. Dans tous les autres cas, la liaison se fait par défaut entre le premier atome du premier groupe et le dernier atome du second groupe.
+
+Voici des exemples où les angles sont dans l'intervalle $]-90\;;90[$, et où la liaison se fait donc entre D et E :
+\exemple{Atomes liés par défaut}|\chemfig{ABCD-[:75]EFG}\quad
+\chemfig{ABCD-[:-85]EFG}\quad
+\chemfig{ABCD-[1]EFG}|
+
+Dans les exemples suivants, les angles appartiennent à $[90\;;270]$ et donc la liaison se fait entre A et G :
+\exemple[60]{Atomes liés par défaut}|\chemfig{ABCD-[:100]EFG}\quad
+\chemfig{ABCD-[:-110]EFG}\quad
+\chemfig{ABCD-[5]EFG}|
+
+Dans certains cas, on peut désirer qu'une liaison parte d'autres atomes que ceux calculés par \CF On peut forcer un atome de départ ou un atome d'arrivée avec l'argument optionnel de la liaison. Il faut écrire :
+\begin{center}
+ \Verb/[,,<entier 1>,<entier 2>]/
+\end{center}
+où \Verb-<entier 1>- et \Verb-<entier 2>- sont les numéros des atomes de départ et d'arrivée souhaités. Il faut que ces atomes existent, sinon, un message d'erreur sera émis.
+\exemple{Atomes liés forcés}|\chemfig{ABCD-[:75,,2,3]EFG}\qquad
+\chemfig{ABCD-[:75,,,2]EFG}\qquad
+\chemfig{ABCD-[:75,,3,2]EFG}|
+
+\section{Personnalisation des liaisons}\label{perso-liaisons}
+Il existe un 5\ieme{} et dernier argument optionnel pour les liaisons qui se trouve à droite de la 4\ieme{} virgule :
+\begin{center}
+ \Verb/[,,,,<code tikz>]/
+\end{center}
+
+Ce \Verb-<code tikz>- est passé directement à \TIKZ lorsque la liaison est tracée. On peut y mettre des attributs de couleur comme «\verb-red-», de pointillés comme «\verb-dash pattern=on 2pt off 2pt-», d'épaisseur comme «\verb-line width=2pt-» ou même de décoration si on a chargé une librairie de décoration de \TIKZ. On peut aussi rendre une liaison invisible en écrivant «\verb-draw=none-». Si on veut spécifier plusieurs attributs, on utilise la syntaxe de \TIKZ en les séparant par une virgule :
+\exemple{Passage de code tikz}|\chemfig{A-[,,,,red]B}\par
+\chemfig{A-[,,,,dash pattern=on 2pt off 2pt]B}\par
+\chemfig{A-[,,,,line width=2pt]B}\par
+\chemfig{A-[,,,,red,line width=2pt]B}|
+
+On peut ainsi avoir accès aux nombreuses librairies de décoration de \TIKZ. On peut par exemple utiliser la librairie «\verb-pathmorphing-» en écrivant \verb-\usetikzlibrary{decorations.pathmorphing}- dans le préambule pour tracer des liaisons ondulées :
+\exemple{Liaison ondulée}|\chemfig{A-[,3,,,decorate,decoration=snake]B}|
+
+Les liaisons de Cram sont insensibles aux attributs d'épaisseur et de pointillés.
+
+\section{Valeurs par défaut}
+Au début de chaque molécule, les valeurs par défaut des arguments optionnels des liaisons sont initialisées. Elles valent :
+\begin{itemize}
+ \item 0\degres{} pour l'angle des liaisons;
+ \item 1 pour le coefficient multiplication des longueurs;
+ \item \Verb-<vide>- pour les numéros de départ et d'arrivée des atomes, ce qui laisse à \CF le soin de calculer ceux-ci en fonction de l'angle de la liaison;
+ \item \Verb-<vide>- pour le paramètre passé à \TIKZ.
+\end{itemize}
+
+On peut changer ces valeurs par défaut pour toute la molécule en débutant le code de la molécule par
+\begin{center}
+ \Verb/[<angle>,<coeff>,<n1>,<n2>,<code tikz>]/
+\end{center}
+
+Ainsi, si le code de la molécule commence par \verb-[:20,1.5]-, alors toutes les liaisons auront un angle de 20\degres{} par défaut et les distances interatomes une longueur qui vaut 1,5 fois la distance interatomes par défaut. On peut à tout moment ignorer ces valeurs par défaut en spécifiant un argument optionnel, comme pour la liaison qui suit l'atome «C» de cet exemple :
+\exemple{Écrasement des valeurs par défaut}|\chemfig{[:20,1.5]A-B-C-[:-80,0.7]D-E-F}|
+
+Si on écrit un improbable \verb-[1,1.5,2,2,red,thick]-, sauf indication contraire, toutes les liaisons auront un angle de 45\degres{} avec l'horizontale, les distances interatomes vaudront 1,5 fois la distance par défaut, les liaisons partiront et arriveront sur le deuxième atome de chaque groupe et seront rouges et épaisses :
+\exemple{Valeurs par défaut}|\chemfig{[1,1.5,2,2,red,thick]ABC-DEF=GHI}|
+
+\section{Ramifications}
+\subsection{Principe}
+Jusqu'à présent, toutes les molécules étaient linéaires, ce qui est rare. On peut attacher une sous molécule à un atome faisant suivre cet atome d'un \Verb-<code>- entre parenthèses. Ce \Verb-<code>- est le code d'une sous molécule qui viendra d'attacher sur l'atome.
+
+Dans cet exemple, la sous molécule «\verb/-[1]W-X/» vient s'attacher sur l'atome «B» :
+\exemple{Ramification}|\chemfig{A-B(-[1]W-X)-C}|
+
+On peut avoir plusieurs sous molécules qui viennent s'attacher sur un même atome. Il suffit de le faire suivre de plusieurs parenthèses contenant le code de chaque sous molécule :
+\exemple{Ramifications multiples}|\chemfig{A-B(-[1]W-X)(-[6]Y-[7]Z)-C}|
+
+Le code de chaque sous molécule peut définir ses propres valeurs par défaut qui seront valables dans toute l'étendue de la sous molécule. Ici, on attache sur «B» une sous molécule «\verb/[:60]-D-E/» dont l'angle par défaut vaut 60\degres{} absolus. On attache également sur «B» une sous molécule «\verb/[::-30,1.5]-X-Y/» dont l'angle par défaut vaut 30\degres{} de moins que celui de la liaison précédente (qui était celle qui allait de «A» à «B») et dont la distance interatome est 1,5 fois celle par défaut :
+\exemple{Valeur par défaut dans les ramifications}|\chemfig{A-B([:60]-D-E)([::-30,1.5]-X-Y)-C}|
+
+Maintenant, que se passe t-il si au début de la molécule principale, on écrit «\verb/[:-45]/» :
+\exemple{Influence de l'angle par défaut}|\chemfig{[:-45]A-B([:60]-D-E)([::-30,1.5]-X-Y)-C}|
+
+On constate que l'angle entre la liaison \verb/B-C/ et la liaison \verb/B-X/ reste de 30\degres{} puisqu'il s'agissait d'un angle relatif pour la sous molécule «\verb/-X-Y/». Par contre, la branche «\verb/-D-E/» reste inclinée à 60\degres{} avec l'horizontale et n'a pas suivi le mouvement de rotation imprimé par l'angle de $-45\degres$ du début, ce qui est normal puisque «\verb/-D-E/» a un angle absolu. Pour faire pivoter la totalité d'une molécule il est donc important que tous les angles soient relatifs.
+
+\subsection{Imbrication}
+Les sous molécules peuvent être imbriquées, et les règles vues au paragraphe précédent restent valables :
+\exemple{Ramifications imbriquées}|\chemfig{A-B([1]-X([2]-Z)-Y)(-[7]D)-C}|
+
+\subsection{Méthode}
+Mettons maintenant que nous voulions dessiner la molécule d'anhydride d'acide :
+\chemfig{R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R}
+
+La meilleure méthode pour y arriver est de choisir le plus long chemin. Ici nous pouvons par exemple dessiner le chemin \verb/R-C-O-C-R/ en tenant compte des angles et en n'utilisant que les angles relatifs :
+\exemple{Structure de l'anhydride d'acide}|\chemfig{R-C-[::-60]O-[::-60]C-[::-60]R}|
+
+Partant de cette structure, il suffit de rajouter deux sous molécules «\verb/=O/» sur les atomes de carbone :
+\exemple{Anhydride d'acide}|\chemfig{R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R}|
+
+N'ayant utilisé que des angles relatifs, on peut faire pivoter cette molécule, en spécifiant un angle par défaut de 75\degres{} par exemple :
+\exemple[70]{Rotation de la molécule}|\chemfig{[:75]R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R}|
+
+\section{Lier des atomes éloignés}
+Nous avons vu comment relier des atomes \emph{qui se suivent dans le code}. Il est parfois indispensable de relier entre-eux des atomes ne se suivant pas dans le code. Appelons «liaisons distantes» ces liaisons particulières.
+
+Prenons cette molécule :
+\exemple{Structure ramifiée}|\chemfig{A-B(-[1]W-X)(-[7]Y-Z)-C}|
+
+Et mettons que l'on veuille relier les atomes \verb/X/ et \verb/C/. Dans ce cas, \CF permet de poser un «crochet» \emph{immédiatement} après l'atome qui nous intéresse. Le caractère utilisé pour poser ce crochet est «\verb-?-», pour sa ressemblance avec un crochet. Ainsi, si l'on écrit \verb/X?/, alors, l'atome \verb/X/ portera ce crochet. Par la suite dans le code, tous les atomes suivis d'un \verb-?- seront reliés à \verb/X/ :
+\exemple{Liaison éloignée}|\chemfig{A-B(-[1]W-X?)(-[7]Y-Z)-C?}|
+
+On aurait pu relier d'autres atomes à X en les faisant suivre de \verb-?-. Ici, ce sont les atomes \verb-C- et \verb-Z- :
+\exemple{Plusieurs liaisons éloignées}|\chemfig{A-B(-[1]W-X?)(-[7]Y-Z?)-C?}|
+
+Maintenant, imaginons que nous devions laisser ces liaisons distantes \verb/X-C/ et \verb/X-Z/, tout en ajoutant une autre : \verb/A-W/. Il faut donc poser deux crochets \emph{différents}, l'un sur \verb/A/ et l'autre sur \verb/X/. En fait, le caractère \verb/?/ a un argument optionnel :
+\begin{center}
+ \Verb/?[<nom>,<liaison>,<tikz>]/
+\end{center}
+où chaque champ prend sa valeur par défaut s'il est vide :
+\begin{itemize}
+ \item le \Verb-<nom>- est le nom du crochet : tous les caractères alphanumériques (a..z, A..Z, 0..9) sont admis\footnote{Ce n'est pas totalement exact. En réalité, tous les caractères pouvant être mis entre \texttt{\string\csname...\string\endcsname} sont autorisés.}. Ce nom vaut «\verb-a-» par défaut. Seul ce champ est pris en compte lors de la première occurrence de ce crochet portant ce nom.
+ \item \Verb-<liaison>- spécifie avec quelle liaison l'atome portant cette occurrence du crochet doit être reliée a l'atome portant la première occurrence. Deux cas de figure sont possibles; soit ce champ est un entier représentant le type de liaison voulu : 1=liaison simple, 2=liaison double, etc. Voir le tableau page~\pageref{types.liaisons} pour les codes des liaisons.
+
+ Soit la \Verb-<liaison>- est constituée des caractères codant la liaison, à condition que ces caractères soient \emph{entre accolades};
+ \item \Verb-<tikz>- sera passé directement à \TIKZ comme on l'a vu avec les liaisons classiques.
+\end{itemize}
+
+Voici notre molécule avec les liaisons distantes requises, puis avec les liaisons \verb/A-W/ et \verb/X-C/ personnalisées :
+\exemple{Plusieurs liaisons éloignées}|\chemfig{A?[a]-B(-[1]W?[a]-X?[b])(-[7]Y-Z?[b])-C?[b]}\par\medskip
+ \chemfig{A?[a]-B(-[1]W?[a,2,red]-X?[b])(-[7]Y-
+ Z?[b,1,{line width=2pt}])-C?[b,{>},blue]}|
+
+On peut écrire plusieurs crochets différents après un atome. Mettons que dans ce pentagone incomplet, on veuille relier \verb/A-E/, \verb/A-C/ et \verb/E-C/ :
+\exemple{Un cycle incomplet}|\chemfig{A-[:-72]B-C-[:72]D-[:144]E}|
+
+Alors, il faut procéder de cette façon :
+\exemple{Plusieurs liaisons éloignées}|\chemfig{A?[a]-[:-72]B-C?[a]?[b]-[:72]D-[:144]E?[a]?[b]}|
+
+\section{Cycles}
+L'exemple précédent montre comment tracer un polygone régulier, mais la méthode est fastidieuse puisque les angles dépendent du nombre de côté du polygone.
+
+\subsection{Syntaxe}
+\CF peut tracer des polygones réguliers facilement. L'idée est d'attacher un cycle à un \Verb/<atome>/ extérieur à ce cycle avec cette syntaxe :
+\begin{center}
+ \Verb/<atome>*<n>(<code>)/
+\end{center}
+\Verb/<n>/ est le nombre de côtés du polygone et le \Verb/<code>/ représente les liaisons et les groupes d'atomes qui constituent ses sommets et arêtes. Ce code \emph{doit} commencer par une liaison puisque l'atome se trouve à l'extérieur du cycle.
+
+Voici un 5-cycle, attaché a l'atome «\verb/A/» :
+\exemple{5-cycle}|\chemfig{A*5(-B=C-D-E=)}|
+
+On peut également dessiner un cycle avec un, plusieurs, ou tous les groupes d'atomes vides, comme c'est le cas pour les dessins hors des cycles :
+\exemple{5-cycle avec groupes vides}|\chemfig{*5(-=--=)}|
+
+Un cycle peut être incomplet :
+\exemple{5-cycle incomplet}|\chemfig{*5(-B=C-D)}|
+Si un cycle a un code qui contient trop de liaisons et de groupes d'atomes pour le nombre de sommets spécifiés, toutes les liaisons et les groupes au delà du maximum admissible sont ignorés :
+\exemple{5-cycle tronqué}|\chemfig{A*5(-B=C-D-E=F-G=H-I)}|
+
+Il est possible de dessiner un cercle ou un arc de cercle à l'intérieur d'un cycle. Pour cela, on utilise cette syntaxe :
+\begin{center}
+ \Verb/<atome>**[<angle 1>,<angle 2>,<tikz>]<n>(<code>)/
+\end{center}
+où chaque champ de l'argument optionnel prend sa valeur par défaut s'il est vide :
+\begin{itemize}
+ \item \Verb/<angle 1>/ et \Verb/<angle 2>/ sont les angles absolus de départ et de fin de l'arc de cercle. Ceux-ci valent 0\degres{} et 360\degres{} de telle sorte qu'un cercle complet est tracé par défaut;
+ \item \Verb/<tikz>/ est le code qui sera passé à \TIKZ pour le dessin de l'arc de cercle.
+\end{itemize}
+
+\exemple{Cycles et arcs de cercle}|\chemfig{**6(------)}\quad
+\chemfig{**[30,330]5(-----)}\quad
+\chemfig{**[0,270,dash pattern=on 2pt off 2pt]4(----)}|
+
+\subsection{Position angulaire}
+\subsubsection{Au départ}
+Comme on le voit dans les exemples ci-dessous, la règle est que l'atome d'attache «\verb/A/» se trouve toujours au sud ouest du cycle. De plus, le cycle est toujours construit dans le sens trigonométrique et la dernière liaison tombe verticalement sur l'atome de rattachement :
+\exemple{Position angulaire des cycles}|\chemfig{A*4(-B-C-D-)}\qquad\chemfig{A*6(------)}|
+
+Si cette position angulaire ne convient pas, il est possible de spécifier via l'argument optionnel du début de la molécule un autre angle par défaut. Voici un 6-cycle qui a été pivoté de $+30\degres$, de $-30\degres$ puis de $+60\degres$ :
+\exemple[55]{Rotation des cycles}|\chemfig{[:30]A*6(------)}\qquad
+\chemfig{[:-30]A*6(------)}\qquad
+\chemfig{[:60]A*6(------)}|
+
+\subsubsection{Après une liaison}
+Lorsqu'un cycle ne commence pas une molécule et qu'une (ou plusieurs) liaisons ont été auparavant tracées, la position angulaire par défaut change : le cycle est tracé de telle sorte que la liaison qui arrive sur l'atome de rattachement soit la bissectrice du premier et du dernier côté du cycle.
+
+Voici un cas simple :
+\exemple{Liaison arrivant sur un cycle}|\chemfig{A-B*5(-C-D-E-F-)}|
+
+La règle reste valable, quelque soit l'angle de la liaison précédente :
+\exemple{Liaisons arrivant sur un cycle}|\chemfig{A-[:25]B*4(----)}\vskip5pt
+\chemfig{A=[:-30]*6(=-=-=-)}|
+
+\subsection{Ramifications partant d'un cycle}
+Pour faire partir une ramification d'un des sommets du cycle, on emploie la syntaxe déjà vue :
+\begin{center}
+ \Verb/<atome>(<code>)/
+\end{center}
+où le \Verb/<code>/ est celui de la sous molécule et l'\Verb-<atome>- occupe le sommet. Une chose particulière aux cycles est que l'angle par défaut de la sous molécule n'est pas 0\degres{} mais est calculé de telle sorte qu'il soit la bissectrice des côtés partant du sommet :
+\exemple{Ramification partant d'un cycle}|\chemfig{X*6(-=-(-A-B=C)=-=-)}|
+
+On peut faire partir une sous molécule du premier sommet du cycle, ainsi que de tous les autres sommets :
+\exemple{Cycle et ramifications}|\chemfig{*5((-A=B-C)-(-D-E)-(=)-(-F)-(-G=)-)}|
+
+Si on souhaite que la liaison partant d'un sommet ne soit pas la bissectrice de ses côtés, on peut jouer sur le paramètre optionnel global ou le paramètre optionnel de la liaison :
+\exemple[50]{Ramifications et angles spécifiés}|\chemfig{*5(---([:90]-A-B)--)}\qquad
+\chemfig{*5(---(-[:90]A-B)--)}\qquad
+\chemfig{*5(---([::+0]-A-B)--)}|
+
+Il est intéressant de constater au troisième exemple que si on spécifie un angle relatif de 0\degres, la liaison se fait dans le prolongement de la liaison qui précédait dans le cycle. C'est la règle de la page \pageref{angle.relatif} qui spécifiait que l'angle de référence était celui de la dernière liaison tracée.
+
+On peut désormais lier des cycles entre eux par des liaisons :
+\exemple{Cycles liés}|\chemfig{*6(--(-*5(----(-*4(----))-))----)}|
+
+\subsection{Cycles emboîtés}
+Pour «coller» 2 cycles entre eux, la syntaxe est légèrement différente : on identifie le sommet d'où va commencer l'autre cycle. Il suffit de faire suivre ce sommet par la syntaxe habituelle d'un cycle. Voici par exemple un 5-cycle qui part du deuxième sommet d'un 6-cycle :
+\exemple{Cycles imbriqués}|\chemfig{A*6(-B*5(----)=-=-=)}|
+
+On remarque que le cycle qui vient se greffer sur le cycle principal a une position angulaire telle que deux de leurs côté coïncident. De plus, le 5-cycle n'a que 4 liaisons «\verb/----/». En effet, la 5\ieme{} serait inutile puisqu'il s'agit du deuxième côté du 6-cycle qui est déjà tracé.
+
+Il est bien entendu possible de coller plusieurs cycles entre eux :
+\exemple{Plusieurs cycles imbriqués}|\chemfig{*5(--*6(-*4(-*5(----)--)----)---)}|
+
+Il y a un cas où on doit employer une ruse. On voit sur cet exemple que le quatrième côté du deuxième 5-cycle vient boucler sur le centre de l'atome «\verb-E-».
+\exemple{Dessin non parfait}|\chemfig{A-B*5(-C-D*5(-X-Y-Z-)-E-F-)}|
+
+Ceci est normal puisque le deuxième 5-cycle (qui part de l'atome «\verb-D-») est dessiné \emph{avant} que \CF n'ait pris connaissance de l'atome «\verb-E-». Dans ce cas, il faut se servir de deux crochets pour tracer la liaison \verb/Z-E/ :
+\exemple{Liaison distante et cycle}|\chemfig{A-B*5(-C-D*5(-X-Y-Z?)-E?-F-)}|
+
+On aurait aussi pu utiliser un \verb-\phantom{E}- au dernier sommet du 5-cycle :
+\exemple{Utilisation de \string\phantom}/\chemfig{A-B*5(-C-D*5(-X-Y-Z-\phantom{E})-E-F-)}/
+
+\subsection{Cycles et groupes d'atomes}
+Il faut prendre des précautions avec les cycles lorsque un ou plusieurs sommets sont constitués de plusieurs atomes :
+\exemple{Cycle et groupes d'atomes}|\chemfig{AB*5(-CDE-F-GH-I-)}|
+
+Pour que le cycle ait une forme régulière, il faut passer outre le mécanisme de \CF qui calcule automatiquement les atomes de départ et d'arrivée des liaisons. Ici, il faut relier \verb/C-F/ et \verb/F-G/ en le spécifiant avec l'argument optionnel de ces liaisons :
+\exemple{Atomes de départ et d'arrivée imposés}|\chemfig{AB*5(-CDE-[,,1]F-[,,,1]GH-I-)}|
+
+\section{Représentation des déplacements d'électrons}\label{mecanismes-reactionnels}
+Depuis la version 0.3 de \CF, on peut représenter les déplacements d'électrons des effets mésomères ou des mécanismes réactionnels. Cela est rendu possible en marquant le point de départ et le point d'arrivée de la flèche que l'on utilise pour indiquer la migration des électrons à l'aide de la syntaxe «\Verb-@{<argument>}-». Cette syntaxe permet de poser un nœud (au sens de \TIKZ) en rendant ce nœud accessible en dehors de l'argument de la commande \verb-\chemfig- grâce à l'option «\texttt{remember picture}» qui est passée à tous les environnements «\falseverb{tikzpicture}». Cela suppose que le visualiseur prenne en charge le «\falseverb{picture remembering}» et que la compilation soit lancée deux fois.
+
+Deux cas de figure peuvent se présenter, on peut poser :
+\begin{itemize}
+ \item un nœud de dimension nulle sur une liaison en utilisant la syntaxe «\Verb-@{<nom>,<coeff>}-» placée immédiatement au début de l'argument optionnel de la liaison concernée sans être suivi d'une virgule s'il y a un premier argument optionnel. Dans ce cas, le nœud portera le nom «\Verb-<nom>-» et le \Verb-<coeff>-, compris entre 0 et 1, déterminera où le nœud se situera sur la liaison. Si on utilise «\Verb-@{<nom>}-», le \Verb-<coeff>- prend la valeur de 0.5 par défaut ce qui signifie que le nœud est posé au milieu de la liaison;
+ \item un nœud sur un atome en utilisant la syntaxe «\Verb-@{<nom>}-» immédiatement avant l'atome concerné. Dans ce cas, le nœud a exactement le même encombrement que l'atome, il peut notamment être vide et donc avoir des dimensions nulles.
+\end{itemize}
+Une fois que la commande \falseverb{\chemfig} a dessiné la (ou les) molécule(s) et a posé les nœuds avec la syntaxe décrite ci dessus, on peut relier ces nœuds entre eux avec les instructions de \TIKZ. Ces instructions seront placées dans l'argument de la commande \verb-\chemmove-\footnote{En réalité, la commande \texttt{\string\chemmove} place son argument dans un environnement «\falseverb{tikzpicture}» dans lequel les options sont «\texttt{remember picture,overlay}».} et auront la syntaxe suivante si par exemple, on doit relier un nœud portant le nom «\Verb-<nom1>-» au nœud portant le nom «\Verb-<nom2>-» :
+\begin{center}
+ \Verb|\chemmove[<opt>]{\draw[<opt tikz>](<nom1>)<link tikz>(<nom2>);}|
+\end{center}
+
+L'argument optionnel \Verb-<opt>- de la commande \verb-\chemmove- sera ajouté à l'argument de l'environnement \falseverb{tikzpicture} dans lequel seront tracées les liaisons entre les nœuds. Les instructions \Verb-<opt tikz>- et \Verb-<link tikz>- sont exhaustivement décrites dans la documentation de l'extension \TIKZ.
+
+\subsection{Effets mésomères}
+Pour fixer les idées prenons l'exemple d'un effet mésomère impliquant une double liaison et un doublet non liant conjugués. Commençons par la possible délocalisation des électrons de la double liaison. On va poser un nœud nommé «db» (double bond) au milieu de la double liaison et un nœud nommé «a1» sur l'extrémité de la double liaison.
+
+Les macros \verb|\schemestart|, \verb|\schemestop|, \verb|\arrow| et \verb|\+| sont exposées au chapitre \ref{schemas}, à partir de la page \pageref{schemas}.
+
+\exemple{Effet mésomère 1}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[::-60]\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+ \chemmove{\draw(db).. controls +(100:5mm) and +(145:5mm).. (a1);}/
+
+Comme on l'a dit, on remarque qu'il n'y pas de virgule derrière le nœud posé dans les arguments optionnels d'une liaison. On écrit «\verb|=_[@{db}::30]|» et non pas «\verb|=_[@{db},::30]|» comme on serait tenté de le faire.
+
+Pour relier les nœuds «db» et «a1», nous avons utilisé la syntaxe suivante :
+\begin{center}
+ \Verb|\chemmove{\draw(db)..controls +(100:5mm) and +(145:5mm)..(a1);}|
+\end{center}
+
+Le style de flèche par défaut dans \verb|\chemmove| est «CF». Dans cet exemple nous demandons une flèche (\verb/[->]/) et nous utilisons 2 points de contrôle\footnote{Pour connaître toutes les façons de relier deux nœuds avec \TIKZ, lire la documentation de ce package.}. Ceux-ci seront situés en coordonnées polaires à 100\degres{} et 5~mm de «db» pour le premier et à 145\degres{} et 5~mm de «a1» pour le second. Il ne faut pas être effrayé par cette syntaxe qui peut paraître compliquée en première lecture car son utilisation se réduit dans la plupart des cas à un simple copier-coller dans lequel on modifie juste le nom des nœuds et les coordonnées polaires des points de contrôle. Ce que nous allons vérifier tout de suite avec l'ajout d'une flèche partant du doublet non liant (nœud «dnl») vers la liaison simple (nœud «sb»).
+\exemple{Effet mésomère 2}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+\chemmove{
+ \draw(db)..controls +(100:5mm) and +(145:5mm)..(a1);
+ \draw(dnl)..controls +(90:4mm) and +(45:4mm)..(sb);}/
+
+Pour notre nouvelle flèche nous avons fixé les points de contrôle comme suit : un angle de 90\degres{} à 4~mm de «dnl» et un angle de 45\degres{} à 4~mm de «sb». Mais nous ne sommes pas entièrement satisfaits car nous aimerions que la flèche ne touche pas le trait représentant le doublet non liant. Pour cela nous allons ajouter quelques options à notre flèche.
+\exemple{Effet mésomère 3}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+\chemmove[->]{% change le style de flèche
+ \draw(db).. controls +(100:5mm) and +(145:5mm).. (a1);
+ \draw[shorten <=3pt,shorten >=1pt](dnl) .. controls +(90:4mm)
+ and +(45:4mm) .. (sb);}/
+
+L'option «\verb|shorten <=3pt|» indique que le point de départ de la flèche doit être raccourci de 3~pt de même «\verb|shorten >=2pt|» indique que le point d'arrivé doit être raccourci de 2~pt.
+
+On peut utiliser toute la puissance des instructions de \TIKZ pour modifier le dessin de la flèche. Ici, nous changeons l'extrémité de la flèche partant de la double liaison en «\verb|-stealth|», nous la dessinons en pointillés d'épaisseur fine et rouge. Nous rajoutons également la lettre $\pi$ au dessus de la flèche en son milieu :
+\exemple{Effet mésomère 4}/\schemestart
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \arrow{<->}
+ \chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
+ \chemabove{X}{\scriptstyle\oplus}}
+\schemestop
+\chemmove{
+ \draw[-stealth,thin,dash pattern= on 2pt off 2pt,red]
+ (db).. controls +(100:5mm) and +(145:5mm)..
+ node[sloped,above] {$\pi$} (a1);
+ \draw[shorten <=3pt, shorten >= 1pt]
+ (dnl).. controls +(90:4mm) and +(45:4mm).. (sb);}/
+
+Dans l'exemple suivant nous allons voir comment indiquer la position de l'ancre de départ ou d'arrivée. Si nous écrivons
+\exemple{Ancre de départ et d'arrivée 1}/\chemfig{@{x1}\lewis{1:,X}}
+\hspace{2cm}
+\chemfig{@{x2}\lewis{2|,X}}
+\chemmove{
+ \draw[shorten >=4pt](x1).. controls +(90:1cm) and +(90:1cm).. (x2);}/
+
+Nous constatons que l'ancre de départ de notre flèche ne pointe pas correctement sur nos électrons. La flèche part du milieu du bord supérieur du nœud. En effet, nous avons choisi un angle de départ de 90\degres{} et \TIKZ fait donc partir la flèche de l’ancre «x1.90» qui correspond à l’intersection de la demi droite partant du centre du nœud «x1» et faisant un angle avec l’horizontale de 90\degres{} avec le bord du nœud qui est un rectangle. Pour obtenir le départ de la flèche d’où nous voulons, nous devons spécifier sa position. Après quelques tâtonnements, c’est «x1.57» :
+\exemple{Ancres de départ et d'arrivée 2}/\chemfig{@{x1}\lewis{1:,X}}
+\hspace{2cm}
+\chemfig{@{x2}\lewis{2|,X}}
+\chemmove[shorten <=4pt,shorten >=4pt]{
+ \draw(x1.57).. controls +(60:1cm) and +(120:1cm).. (x2);}/
+
+Dans certains cas il sera plus facile d'utiliser les coordonnées cartésiennes pour les points de contrôle. Ici, nous n'utilisons qu'un seul point de contrôle situé à 1~cm horizontalement de «x1» et 1,5~cm verticalement :
+\exemple{Un seul point de contrôle}/\chemfig{@{x1}\lewis{1:,X}}
+\hspace{2cm}
+\chemfig{@{x2}\lewis{2|,X}}
+\chemmove[shorten <=4pt,shorten >=4pt]{
+ \draw(x1.57).. controls +(1cm,1.5cm).. (x2);}/
+
+Dans ce cas nous plaçons un point de contrôle à 1~cm horizontalement et 2~cm verticalement de «x1». Tous les objets graphiques dessinées par l’intermédiaire de la commande \verb|\chemmove| sont faits en surimpression et ne seront pas comptés dans les boîtes englobantes. On peut le constater sur l’exemple précédent.
+
+\subsection{Mécanismes réactionnels}
+Grâce à l'option \verb|remember picture| qui est passée à tous les environnements «tikzpicture» nous pouvons facilement dessiner les flèches indiquant les mécanismes réactionnels. Prenons comme exemple la première étape de la réaction d'estérification.
+\exemple*{Estérification: étape 1}/\setchemfig{atom sep=7mm}
+\schemestart
+ \chemfig{R-@{dnl}\lewis{26,O}-H}
+ \+
+ \chemfig{R-@{atoc}C([6]-OH)=[@{db}]O}
+ \arrow(.mid east--){<->[\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}]}
+\schemestop
+\chemmove[shorten <=2pt]{
+ \draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
+ \draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}/
+
+L'utilisation de la commande \Verb|\chemabove{<code>}{<matériel>}| ne change pas les dimensions de la boîte englobante du \Verb|<code>|. Pour cette raison on peut rencontrer certaines difficultés pour pointer sur le matériel indiquant la charge portée ($\oplus$ ou $\ominus$). Dans l'exemple ci-dessus la solution est de créer un point de contrôle avec un angle de 110\degres{} à 1~cm de «atoh» et de raccourcir la flèche de 6pt. Dans l'exemple suivant, seconde étape de la réaction d'estérification, on peut voir que la flèche peut prendre des formes plus compliquées sans forcément surcharger le code.
+\exemple{Estérification: étape 2}/\setchemfig{atom sep=7mm}
+\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\lewis{26,O}H}\hspace{1cm}
+\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}
+\chemmove{
+ \draw[shorten <=2pt, shorten >=7pt]
+ (dnl).. controls +(south:1cm) and +(north:1.5cm).. (atoh);}/
+
+Nous laissons le soin au lecteur d'écrire la suite\ldots
+
+\section{Écrire un nom sous une molécule}\label{chemname}
+Pour plus de commodité, \CF permet d'écrire le nom d'une molécule sous celle-ci avec la commande
+\begin{center}
+ \Verb/\chemname[<dim>]{\chemfig{<code de la molécule>}}{<nom>}/
+\end{center}
+
+La \Verb-<dimension>-, qui vaut 1.5ex par défaut, sera insérée verticalement entre la \falseverb{ligne de base} de la molécule et le haut des lettres du \Verb-<nom>-. Le \Verb-<nom>- sera centré par rapport à la molécule mais ce \Verb-<nom>- ne peut pas contenir plusieurs paragraphes. Comme on le voit sur cet exemple : \chemname{\chemfig{H-O-H}}{\scriptsize\bfseries La molécule d'eau : $\mathrm{\mathbf{H_2O}}$}, le \Verb-<nom>- qui est affiché sous la molécule est pris en compte dans la boîte englobante mais uniquement en ce qui concerne sa dimension \emph{verticale}. L'encombrement horizontal du \Verb-<nom>- est toujours nul.
+
+Voici une réaction avec les noms sous les molécules :
+\exemple*{Affichage du nom des molécules}/\schemestart
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Acide carboxylique}
+ \+
+ \chemname{\chemfig{R'OH}}{Alcool}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Eau}
+\schemestop
+\chemnameinit{}/
+
+Il y a quelques contraintes avec cette commande. Pour en pendre conscience, mettons que l'on ait inversé l'acide et l'alcool dans le membre de gauche :
+\exemple*{Alignement des noms 1}/\schemestart
+ \chemname{\chemfig{R'OH}}{Alcool}
+ \+
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Acide carboxylique}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Eau}
+\schemestop
+\chemnameinit{}/
+
+En fait, au dessous de la ligne de base de chaque molécule (en gris clair sur les exemples de ce manuel), pour écrire le \Verb-<nom>-, la commande \falseverb{\chemname} insère 1.5ex${}+{}$\emph{la plus grande des profondeurs\footnote{En langage \TeX{}, la profondeur est la dimension qui s'étend verticalement sous la ligne de base.} des molécules rencontrées}. \label{chemnameinit}La macro \Verb-\chemnameinit{<argument>}- initialise cette plus grande profondeur avec le contenu de l'\Verb-<argument>-. Il convient donc :
+\begin{itemize}
+ \item d'écrire \Verb-\chemnameinit{<plus profonde molécule>}- avant d'impliquer cette commande dans une réaction, sauf si cette réaction commence par la plus profonde molécule;
+ \item d'écrire \verb-\chemnameinit{}- après avoir écrit tous les noms d'une réaction chimique afin d'éviter que la plus grande profondeur trouvée dans cette réaction n'interfère dans une réaction future.
+\end{itemize}
+
+Le code correct est donc d'utiliser \falseverb{\chemnameinit} avant et après la réaction :
+\exemple*{Alignement des noms 2}/\chemnameinit{\chemfig{R-C(-[:-30]OH)=[:30]O}}
+\schemestart
+ \chemname{\chemfig{R'OH}}{Alcool}
+ \+
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Acide carboxylique}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Eau}
+\schemestop
+\chemnameinit{}/
+
+Enfin, pour écrire un nom sur plusieurs lignes, la commande \verb|\\| rencontrée dans un \Verb-<nom>- effectue un retour à la ligne\footnote{Par contre, la commande \texttt{\textbackslash par} est interdite et provoquera une erreur à la compilation.} :
+\exemple*{Nom sur 2 lignes}/\schemestart
+ \chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Acide\\carboxylique}
+ \+
+ \chemname{\chemfig{R'OH}}{Alcool}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{R-C(-[:-30]OR')=[:30]O}}{Ester}
+ \+
+ \chemname{\chemfig{H_2O}}{Eau}
+\schemestop
+\chemnameinit{}/
+
+Si l'on écrit \Verb|\chemname*{<nom>}|, alors la macro ne tient pas compte des noms rencontrés précédemment.
+\newpage
+
+\part{Utilisation avancée}\label{utilisation.avancee}
+\section{Découpage des atomes}\label{decoupage.atomes}
+Le mécanisme de découpage en atomes, déjà décrit auparavant, fait s'étendre chaque atome jusqu'à la prochaine lettre majuscule ou l'un des caractères {\ttfamily \boxedfalseverb{-} \boxedfalseverb{=} \boxedfalseverb{~} \boxedfalseverb{(} \boxedfalseverb{!} \boxedfalseverb{*} \boxedfalseverb{<} \boxedfalseverb{>} \boxedfalseverb{@}}
+
+Dans certains cas, ce découpage automatique produit des atomes incorrects ce qui peut se traduire par un affichage imparfait. Prenons cette molécule par exemple où l'on remarquera que le caractère «\texttt(» est mis entre accolade de façon à éviter que \CF ne comprenne à tort qu'une ramification est créée :
+
+\exemple*{Alcène}/\chemfig{CH_3CH_2-[:-60,,3]C(-[:-120]H_3C)=C(-[:-60]H)-[:60]C{(}CH_3{)}_3}/
+
+On constate que la liaison qui arrive sur l'atome de carbone en haut à droite est trop courte. Cela se produit car, si l'on applique les règles de découpage de \CF dans le groupe d'atomes en haut à droite, les atomes sont découpés de cette façon : «\texttt{\detokenize{C{(}}}», «\texttt{\detokenize{C}}», «\texttt{\detokenize{H_3{)}_3}}». On comprend alors qu'en mode math, le premier atome qui contient une parenthèse ait une profondeur trop importante comme on le voit en rendant visibles les boîtes contenant les atomes :
+\begin{center}
+\fboxsep=0pt
+\renewcommand*\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}%
+\chemfig{CH_3CH_2-[:-60,,3]C(-[:-120]H_3C)=C(-[:-60]H)-[:60]C{(}CH_3{)}_3}%
+\end{center}
+Le caractère «|» provoque la coupure de l'atome en cours à l'endroit où il est rencontré. Ainsi, on peut écrire \texttt{C\textcolor{red}{|}\detokenize{{(CH_3)_3}}} pour faire en sorte que \CF ne découpe que 2 atomes ici : «\texttt{\detokenize{C}}» et «\texttt{\detokenize{{(CH_3)_3}}}. Le problème de la liaison trop courte est ainsi résolu :
+
+\exemple*{Alcène}/\chemfig{CH_3CH_2-[:-60,,3]C(-[:-120]H_3C)=C(-[:-60]H)-[:60]C|{(CH_3)_3}}/
+
+\section{Affichage des atomes}\label{perso.affichage}
+Une fois le découpage en atomes effectué, la macro \falseverb{\printatom} est appelée de façon interne par \CF pour afficher chaque atome. Son unique argument est le code produisant l'affichage de l'atome (par exemple «\verb-H_3-»). Par défaut, cette macro se place en mode mathématique et affiche son argument avec la police mathématique «rm». Elle est définie par le code suivant :
+\begin{itemize}
+ \item \verb|\newcommand*\printatom[1]{\ensuremath{\mathrm{#1}}}|\qquad en compilant avec \LaTeX{}
+ \item \verb|\def\printatom#1{\ifmmode\rm#1\else$\rm#1$\fi}|\qquad en compilant avec $\varepsilon$\TeX{} ou Con\TeX tX.
+\end{itemize}\medskip
+
+On peut modifier le code de cette macro pour personnaliser l'affichage de atomes. Dans l'exemple ci-dessous, on redéfinit \falseverb{\printatom} de façon à ce que chaque atome soit contenu dans une boîte rectangulaire :
+\exemple{Redéfinition de \string\printatom}/\fboxsep=1pt
+\renewcommand*\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{H_3C-C(=[:30]O)(-[:-30]OH)}/
+
+Voici comment la redéfinir pour utiliser de la police «sf» du mode math :
+\exemple{Atomes affichés en police «sf»}/\renewcommand*\printatom[1]{\ensuremath{\mathsf{#1}}}
+\chemfig{H_3C-C(=[:30]O)(-[:-30]OH)}/
+
+\section{Paramètres passés à tikz}\label{arguments.optionnels}
+La \chevrons{clé} \CFkey{chemfig style} contient des instructions \TIKZ qui seront passées à l'environnement \falseverb{tikzpicture} dans lequel est dessinée la molécule. Par ailleurs, la \chevrons{clé} \CFkey{atom style} contient des instructions \TIKZ qui seront exécutées lors du dessin de chaque nœud; ces instructions sont ajoutées à la fin de \texttt{every node/.style\{<argument>\}}, c'est-à-dire après les instructions suivantes : «{\ttfamily anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt}».
+
+Par l'intermédiaire de \CFkey{chemfig style}, on peut choisir par exemple la couleur générale ou l'épaisseur des lignes :
+\exemple{Choix du style}/\chemfig{A-B-[2]C}\par\medskip
+\chemfig[chemfig style={line width=1.5pt}]{A-B-[2]C}\par\medskip
+\chemfig[chemfig style=red]{A-B-[2]C}/
+
+Avec \CFkey{node style}, on peut choisir la couleur des nœud dessinés par \TIKZ, modifier l'inclinaison du dessin ou changer l'échelle :
+\exemple{Choix des styles}/\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{atom style=red}\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{atom style={rotate=20}}\chemfig{A-B-[2]C}\par\medskip
+\setchemfig{atom style={scale=0.5}}\chemfig{A-B-[2]C}/
+
+\section{Alignement vertical}\label{alignement.vertical}
+Dans certains cas de molécules semi développées dont les liaisons sont horizontales, le placement des groupes d'atomes est incorrect.
+
+Un examen attentif de l'exemple suivant révèle que les groupes d'atomes ne sont pas correctement alignés sur la \falseverb{ligne de base} :
+\exemple*{Placement horizontal}/\Huge\setchemfig{atom sep=2em}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
+
+Il est étonnant que le deuxième atome soit correctement aligné alors que les deux derniers subissent un décalage vertical qui semblent être la conséquence de la hauteur différente de la boîte englobant le premier atome «\verb-A^1-» et «\verb-E_1-».
+
+Pour comprendre ce phénomène, il faut examiner comment \CF place les groupes d'atomes les uns par rapport aux autres. Pour cela, limitons nous aux liaisons horizontales ce qui permet d'employer un vocabulaire particulier, mais l'algorithme est le même pour les autres inclinaisons. En fait, une liaison horizontale part du milieu du côté droit de la boîte englobant l'atome d'où part cette liaison. L'atome d'arrivée est positionné de telle sorte que le milieu du côté gauche de sa boîte englobante soit à l'extrémité de la liaison. Il en découle que le placement vertical de l'atome d'arrivée dépend de l'encombrement vertical de l'atome de départ. Pour limiter ce phénomène, \CF ajoute devant chaque atome d'arrivée le \falseverb{\vphantom} de l'atome de départ, mais sans l'inclure dans le contenu de cet atome d'arrivée : ce \falseverb{\vphantom} n'est donc pas destiné à se répercuter sur les atomes suivants. Les atomes qui restent dans chaque groupe sont alignés de telle sorte que leur ligne de base coïncide avec la ligne de base de l'atome précédent.
+
+On peut donc mieux expliquer l'alignement défectueux constaté. Les atomes «\verb-B-» et «\verb-F-» sont correctement alignés car ils tiennent compte de la hauteur des atomes qui les précèdent grâce à leur \falseverb\vphantom. Pour les atomes «\verb-C-» et «\verb-F-», la hauteur des atomes précédents est prise en compte, mais celle des atomes «\verb-A^1-» et «\verb-E_1-» est oubliée ! Il en résulte que, dépendant de l'altitude de ces liaisons, ces atomes sont un peu trop haut ou trop bas.
+
+On peut mettre en évidence ce phénomène en rendant visible les boîtes englobantes des atomes où l'on voit clairement que les atomes «\verb-B-» et «\verb-F-» ont des boîtes englobantes dont la hauteur qui tient compte des hauteurs des atomes précédents :
+\exemple*{Placement horizontal et boîtes englobantes}/\Huge\setchemfig{atom sep=2em}
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm#1}}}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
+
+Aucune solution automatique n'étant satisfaisante, on peut contourner manuellement ce problème en plaçant \emph{à l'intérieur} du troisième atome un \falseverb{\vphantom} ayant la même hauteur que le premier pour que cette hauteur se répercute sur les suivants :
+\exemple*{Contournement du placement vertical}/\Huge\setchemfig{atom sep=2em}
+\chemfig{A^1-B-{\vphantom{A^1}C}-D}\qquad
+\chemfig{E_1-F-{\vphantom{E_1}G}-H}/
+
+\label{chemskipalign}Il est possible pour n'importe quel groupe d'atomes de désactiver momentanément le mécanisme d'ajustement d'alignement et neutraliser le \falseverb\vphantom. Il suffit pour cela de placer dans le groupe d'atomes la commande \falseverb{\chemskipalign} : l'alignement reprendra au groupe d'atomes suivant comme si le groupe d'atome contenant \falseverb{\chemskipalign} n'avait pas existé. On peut se rendre compte sur l'exemple suivant de l'effet de cette instruction qui a pour effet de placer le point de référence de la boîte contenant le premier atome au niveau de la liaison qui arrive de gauche. Les boîtes englobant les atomes ont été dessinées à la seconde ligne :
+
+\exemple[60]{Désactivation du mécanisme d'alignement}/\large
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}\par\bigskip
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}/
+
+Cette commande est à utiliser avec précaution car l'alignement des atomes dans le groupe d'atomes à venir peut être perturbé. En règle générale, tout se passera bien si le groupe d'atomes dans lequel figure \falseverb{\chemskipalign} contient \emph{un seul atome} dont la hauteur et la profondeur sont \emph{inférieures} à celles de l'atome qui précède et qui suit, et si les atomes qui précèdent et suivent ont leur profondeur et hauteur égales. Voici par exemple la mésaventure qui arrive lorsque le groupe d'atomes contient 2 atomes, ici «\verb-\chemskipalign.-» et «\verb-B-» :
+\exemple{Conséquence de la commande \string\chemskipalign}/\large
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-\chemskipalign.B-C}/
+
+Cette fonctionnalité peut parfois s'avérer utile. Mettons que l'on veuille dessiner la molécule
+\begin{center}
+ \catcode`;12
+ \def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}%
+ \def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}%
+ \chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}%
+\end{center}
+On peut définir les commandes qui vont dessiner les disques vides et pleins avec \TIKZ. Afin que ces disques soit à la bonne hauteur, c'est-à-dire à la hauteur de la liaison qui leur arrive dessus, on se servira de la commande \falseverb{\chemskipalign}. Pour que, à la deuxième ligne de l'exemple ci dessous, les liaisons «collent» aux disques, nous utiliserons la possibilité de modifier le retrait d'une liaison avec le caractère «\verb-#-»\, fonctionnalité qui a été vue à la page~\pageref{modif.retrait}. Pour les utilisateurs ayant chargé le package babel avec l'option «frenchb», il est nécessaire de désactiver le caractère actif «\verb-;-» qui marque la fin d'une instruction \TIKZ et qui sinon ne serait pas reconnu en tant que tel. C'est pourquoi on se place dans un groupe où l'on écrit l'instruction \verb-\shorthandoff{;}- :
+\begingroup\catcode`;12 \catcode`#12
+\exemple{Utilisation de \string\chemskipalign\ et #}/\begingroup
+\shorthandoff{;}
+\def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}
+\def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}
+\chemfig{A-\emptydisk-\fulldisk-B}\par
+\chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}
+\endgroup/\endgroup
+
+\section{Liaisons doubles déportées}
+Toutes les liaisons doubles sont composées de 2 traits et ces traits sont tracés de part et d'autre de la ligne théorique que prendrait la liaison simple. Il est possible de déporter cette liaison double de telle sorte qu'un des deux traits soit sur cette ligne théorique. L'autre trait étant alors au dessus ou au dessous de la liaison. En fait, il est plus rigoureux de dire «à gauche» ou «à droite» de la ligne théorique lorsqu'on parcourt la liaison dans le sens du tracé.
+
+Pour déporter la liaison vers la gauche, il suffit d'écrire «\verb-=^-» et pour la déporter vers la droite «\verb-=_-» :
+\exemple{Liaisons doubles déportées}/\chemfig{A-=-B}\par
+\chemfig{A-=^-B}\par
+\chemfig{A-=_-B}/
+
+Dans les cycles, les liaisons doubles sont automatiquement déportées vers la gauche. On peut cependant les déporter vers la droite en le spécifiant avec «\verb-=_-» :
+\exemple{Liaisons doubles déportées et cycles}/\chemfig{*6(-=-=-=)}\qquad
+\chemfig{*6(-=_-=_-=_)}/
+
+Les liaisons déportées sont particulièrement utiles dans le tracé de formules topologiques de molécules comprenant chaînes carbonées avec des liaisons doubles. Elles permettent d'avoir une ligne brisée continue, alors que cette ligne brisée serait discontinue avec les liaisons doubles normales :
+\exemple{Liaisons déportées et formules topologiques}/\chemfig{-[:30]=[:-30]-[:30]=[:-30]-[:30]}\par
+\chemfig{-[:30]=^[:-30]-[:30]=^[:-30]-[:30]}\par
+\chemfig{-[:30]=_[:-30]-[:30]=_[:-30]-[:30]}/
+
+\section{Liaisons doubles délocalisées}
+Il est parfois nécessaire de tracer une liaison double dont un trait serait plein et l'autre en pointillé. Cette fonctionnalité n'est pas codée en dur dans \CF puisque \TIKZ, avec sa librairie «decorations.markings» le rend possible.
+
+\exemple*{Liaisons délocalisées}|\catcode`\_=11
+\tikzset{
+ ddbond/.style args={#1}{
+ draw=none,
+ decoration={%
+ markings,
+ mark=at position 0 with {
+ \coordinate (CF_startdeloc) at (0,\dimexpr#1\CF_doublesep/2)
+ coordinate (CF_startaxis) at (0,\dimexpr-#1\CF_doublesep/2);
+ },
+ mark=at position 1 with {
+ \coordinate (CF_enddeloc) at (0,\dimexpr#1\CF_doublesep/2)
+ coordinate (CF_endaxis) at (0,\dimexpr-#1\CF_doublesep/2);
+ \draw[dash pattern=on 2pt off 1.5pt] (CF_startdeloc)--(CF_enddeloc);
+ \draw (CF_startaxis)--(CF_endaxis);
+ }
+ },
+ postaction={decorate}
+ }
+}
+\catcode`\_8
+\chemfig{A-[,,,,ddbond={+}]B-[,,,,ddbond={-}]C}|
+
+\section{Sauvegarde d'une sous molécule}\label{definesubmol}
+\CF est capable de sauvegarder un \Verb-<code>- sous forme d'un alias pour le réutiliser sous forme compacte dans le code d'une molécule. Ceci est particulièrement utile lorsque le \Verb-<code>- apparaît plusieurs fois.
+
+Pour cela, on dispose de la commande
+\begin{center}
+ \Verb|\definesubmol{<nom>}{<code>}|
+\end{center}
+qui sauvegarde le \Verb/<code>/ de façon à l'appeler dans le code de la molécule par le raccourci «\Verb/!{<nom>}/». Ce \Verb-<nom>- peut être :
+\begin{itemize}
+ \item une suite de caractères : tous les caractères alphanumériques pouvant se trouver entre \texttt{\string\csname} et \texttt{\string\endcsname} sont acceptés;
+ \item une séquence de contrôle.
+\end{itemize}
+
+Dans tous les cas, si l'alias est déjà défini il est déconseillé de l'écraser avec une nouvelle définition faite avec \falseverb{\definesubmol}, d'ailleurs, un «warning» sera émis avertissant l'utilisateur que cet alias sera écrasé par le nouveau. Pour écraser la définition d'un alias faite au préalable, il faut utiliser :\label{redefinesubmol}
+\begin{center}
+ \Verb|\redefinesubmol{<nom>}{<code>}|
+\end{center}
+
+Voici un code qui dessine la molécule de pentane. On a pris soin auparavant de définir un alias «\verb/xy/» pour le code \verb/CH_2/ :
+\exemple{Pentane}|\definesubmol{xy}{CH_2}
+\chemfig{H_3C-!{xy}-!{xy}-!{xy}-CH_3}|
+
+Ici, la manœuvre n'est pas très intéressante puisque «\verb/!{xy}/» est aussi long à taper que le code qu'il remplace.
+
+Mais dans certains cas, cette fonctionnalité fait gagner beaucoup de place dans le code de la molécule et en améliore la lisibilité. Dans l'exemple suivant, on dessine la molécule développée de butane. Pour cela, on va définir un alias avec la séquence de contrôle «\verb/\xx/» pour la sous molécule $\mathrm{CH_2}$. Comme on n'emploie que des angles relatifs, il est possible de faire pivoter la molécule entière de l'angle que l'on veut via l'angle du paramètre optionnel global qui spécifie l'angle par défaut des liaisons de la molécule principale. On met ici 15\degres :
+\exemple{Butane}|\definesubmol\xx{C(-[::+90]H)(-[::-90]H)}
+\chemfig{[:15]H-!\xx-!\xx-!\xx-!\xx-H}|
+
+La commande \falseverb{\definesubmol} admet un argument optionnel et sa syntaxe est la suivante :
+\begin{center}
+ \Verb/\definesubmol{<nom>}[<code1>]{<code2>}/
+\end{center}
+
+Dans le cas où l'argument optionnel est présent, l'alias «\Verb-!<nom>-» sera remplacé par \Verb'<code1>' si la liaison qui arrive sur l'alias vient de droite, c'est à dire si l'angle que fait la liaison entrante est compris entre $-90$\degres{} et 90\degres{}, ces valeurs étant non comprises. Pour tous les autres cas où la liaison arrive de gauche ou verticalement, l'alias sera remplacé par \Verb-<code2>-.
+
+On va définir une séquence de contrôle \verb-\Me- pour «méthyl» de telle sorte que l'alias «\verb-!\Me-» soit remplacé par «\verb-H_3C-» lorsque la liaison arrive de droite et par «\verb-CH_3-» lorsqu'elle arrive de gauche. Avec cet alias, on peut observer sur l'exemple que l'on n'a plus à s'occuper de l'angle (que dans certaines molécules plus complexes on ne connaît même pas) :
+\exemple{Alias dual}/\definesubmol\Me[H_3C]{CH_3}
+\chemfig{*6((-!\Me)=(-!\Me)-(-!\Me)=(-!\Me)-(-!\Me)=(-!\Me)-)}/
+
+\label{definesubmolarg}La sous-molécule sauvegardée via un \Verb|<nom>| n'admet pas d'argument lorsqu'elle est appelée après «\verb|!|». Pour définir une sous-molécule admettant un ou plusieurs argument, il faut écrire ce \Verb|<nombre>| d'arguments juste après le \Verb|<nom>|. La syntaxe complète de \verb|\definesubmol| est donc:
+\begin{center}
+ \Verb/\definesubmol{<nom>}<nombre>[<code1>]{<code2>}/
+\end{center}
+
+Dans les \Verb|<codes>|, les arguments doivent figurer sous leur forme habituelle «\Verb|#<n>|» où \Verb|<n>| est le numéro de l'argument.
+
+\exemple{\texttt{\string\definesubmol} avec arguments}/\definesubmol\X1{-[,-0.2,,,draw=none]{\scriptstyle#1}}
+\chemfig{*6((!\X A)-(!\X B)-(!\X C)-(!\X D)-(!\X E)-(!\X F)-)}
+
+\definesubmol{foo}3[#3|\textcolor{#1}{#2}]{\textcolor{#1}{#2}|#3}
+\chemfig{A(-[:135]!{foo}{red}XY)-B(-[:45]!{foo}{green}{W}{zoo})}/
+
+Il est à noter que si le \Verb|<nombre>| d'arguments est incorrect (négatif ou supérieur à 9), un message d'erreur sera émis et \CF considèrera que la sous molécule n'admet pas d'argument.
+
+En dehors des cas où le caractère «\verb|#|» est suivi d'un chiffre compris entre 1 et \Verb|<nombre>| auquel cas il représente un argument, les «\verb|#|» sont autorisés dans les codes des sous molécules.
+
+\exemple{Utilisation de \#}/\definesubmol\X2{#1-#2-#3-#(3pt,3pt)#4}
+\chemfig{A-!\X{M}{N}-B}/
+
+Dans cet exemple, seuls \verb|#1| et \verb|#2| sont compris comme les arguments de la sous molécule \verb|\X|. Les autres «\verb|#|» sont affichés tels quels dans la molécule (cas de \verb|#3| et \verb|#4|) ou compris comme le caractère spécifiant le réglage fin du retrait des liaisons.
+
+\section{Décorations}
+\subsection{Formule de Lewis}\label{lewis}
+La macro \falseverb{\lewis} permet de placer des paires d'électrons, des électrons ou une lacune. On utilise cette syntaxe :
+\begin{center}
+ \Verb|\lewis{<n1><n2>...<ni>,<atome>}|
+\end{center}
+où les \Verb-<n1>-\ldots\Verb-<ni>- représentent les positions (en multiples de 45\degres) désirées autour de l'\Verb-<atome>-. Ces entiers doivent être compris entre 0 et 7.
+
+Cette commande peut également être utilisée en dehors de l'argument de \verb-\chemfig- :
+\exemple{La macro \string\lewis}|\lewis{0246,A}\par\medskip
+\lewis{1357,B}\par\medskip
+\chemfig{H-\lewis{26,O}-S(=[2]\lewis{13,O})
+(=[6]\lewis{57,O})-\lewis{26,O}-H}|
+
+Si au lieu d'une paire représentée par une ligne, on souhaite deux points, on fait suivre l'entier par «\verb-:-». Si on veut dessiner un électron, il suffit de le faire suivre par un «\verb-.-». Pour dessiner une lacune, on le fait suivre d'un «\verb-|-» :
+\exemple{Décorations de Lewis}*\lewis{0:2:4:6:,C}\qquad\lewis{1:3:5:7:,C}\par\bigskip
+\lewis{0.2.4.6.,C}\qquad\lewis{1.3.5.7.,C}\par\bigskip
+\lewis{0:2.4|,X}\par\bigskip
+Ion oxonuim : \chemfig{H-\lewis{5|7,O^+}(-[2]H)-H}*
+
+Toutes les décorations dessinées par l'intermédiaire de \falseverb{\lewis} ne sont pas comptabilisées dans la boîte englobante de l'atome. Les décorations sont faites en surimpression. On en voit une conséquence dans les deux exemples ci-dessus où les cadre ne semblent ne plus être correctement ajustés au dessin de la molécule qui dépasse légèrement vers le bas. Ceci sera parfois observable dans ce chapitre «Décorations» où l'on présente des commandes qui ne modifient pas la boîte englobante.
+
+\label{Lewis}Il faut noter que la macro \falseverb{\Lewis} fonctionne de la même façon que la macro \verb-\lewis- mais les décorations seront \emph{prises en compte} dans la boîte englobante.
+
+On peut le constater de façon plus évidente en traçant une \verb-\fbox- autour des atomes décorés :
+\exemple{Boîte englobante et macro \string\lewis}*\fboxsep0pt
+\fbox{\lewis{0.2.4.6.,A}}\quad\fbox{\Lewis{0.2.4.6.,A}}\par\medskip
+\fbox{\lewis{13,B}}\quad\fbox{\Lewis{13,B}}*
+
+\label{setlewis}On peut régler plusieurs paramètres à l'aide des \chevrons{clés} suivantes :
+\begin{itemize}
+ \item \CFkv{lewis | width}{dim} : est la largeur du rectangle représentant une lacune obtenue avec «|». Elle vaut \CFval{0.3ex} par défaut;
+ \item \CFkv{lewis sep}{dim}: est la distance entre la boîte englobant l'atome et la décoration. Elle vaut \CFval{0.4ex} par défaut;
+ \item \CFkv{lewis length}{dim} : est la longueur du trait représentant la paire d'électrons. Elle vaut \CFval{1.5ex} par défaut;
+ \item \CFkv{lewis style}{code tikz} : est le code qui sera passé directement à \TIKZ. Ce code est \CFval{vide} par défaut;
+ \item \CFkv{lewis dist}{dim} : est la distance entre les deux disques dessinés avec «\string:». Cette distance vaut \CFval{0.3em} par défaut;
+ \item \CFkv{lewis radius}{dim} : est le rayon du disque d'une décoration de Lewis «.» ou «\string:». Il vaut \CFval{0.15ex} par défaut;
+ \item \CFkv{lewis diag coeff}{décimal} : est le coefficient d'espacement diagonal qui vaut \CFval{1} par défaut.
+\end{itemize}
+
+Il faut noter que les paramètres spécifiques aux décorations de Lewis peuvent être passées par
+\begin{itemize}
+ \item \Verb|\setchemfig{<clés>=<valeurs>}| afin qu'ils perdurent pour la suite du document;
+ \item \Verb|\chemfig[<clés>=<valeurs>]| et dans ce cas, les réglages sont effectifs dans la molécule en cours;
+ \item \Verb|\lewis[<clés>=<valeurs>]| pour que les paramètres soient spécifiques à cette exécution de la macro \verb|\lewis|.
+\end{itemize}
+
+La dernière façon de faire, certes permet des réglages individuels, mais doit être utilisée avec précaution lorsque la macro \verb|\lewis| se trouve dans l'argument de \verb|\chemfig|. En effet, les signes \verb-=- des \Verb|<clés>=<valeurs>| ne doivent pas être interprétés comme double liaison et pour ce faire, la macro \verb|\lewis|, son argument optionnel et obligatoire \emph{doivent} être entre accolades:
+
+\exemple*{Argument optionnel de \string\lewis}/\chemfig{{\lewis[lewis style=red]{1:3:5:7:,X}}-{\lewis[lewis style=blue]{0:2:4:6:,Y}}}/
+
+Voici quelques exemple de personnalisation:
+
+\exemple{Les paramètres de la macro \string\lewis}*\setchemfig{lewis sep=4pt,lewis length=1.5em,lewis style=red}
+\chemfig{A-\lewis{26,B}-C}\bigbreak
+
+\chemfig[lewis style={line width=0.4pt}]{A-\lewis{2|,B}-C}\bigbreak
+
+\Lewis{1:3:5:7:,X}\qquad\Lewis{0:2:4:6:,X}\bigbreak
+
+\Lewis[lewis dist=0.2em]{1:3:5:7:,X}\qquad
+\Lewis[lewis dist=0.2em]{0:2:4:6:,X}\bigbreak
+
+\Lewis[lewis dist=4pt,lewis radius=1.5pt]{1:3:5:7:,X}\qquad
+\Lewis[lewis dist=4pt,lewis radius=1.5pt]{0:2:4:6:,X}*
+
+Un problème concernant les décorations de Lewis dans les directions obliques peut parfois survenir. Pour l'atome «O» dans l'exemple ci-dessous, il semble que la décoration en position 1 soit plus éloignée de l'atome que celle en position 4 :
+\exemple{Directions obliques}/\huge
+\Lewis{1|4|,O}/
+Or, il n'en en rien comme on peut le voir en traçant la boîte englobante de l'atome :
+\exemple{Illusion d'optique}/\huge
+\fboxsep0pt
+\def\printatom#1{\fbox{$\mathrm{#1}$}}
+\Lewis{1|4|,O}/
+\label{opt.lewis}L'impression de plus grand éloignement est dû au fait que les contours de la lettre «O» sont plus éloignés de ceux de la boîte englobante dans les coins, c'est-à-dire dans les directions impaires.
+
+Pour rapprocher (ou éloigner) les décorations de Lewis dans les directions impaires, la \chevrons{clé} \CFkv{lewis diag coeff}{decimal} spécifie le coefficient qui vient multiplier le décalage entre la boite englobante et la décoration de Lewis. Pour la lettre «O», il semble que la valeur 0.5 soit satisfaisante pour ce coefficient :
+\exemple*{Argument optionnel de \string\lewis}/\huge
+\Lewis{1|4|,O}\quad \Lewis[lewis diag coeff=0.5]{1|4|,O}
+
+\Lewis{0:5:,O}\quad \Lewis[lewis diag coeff=2]{0:5:,O}\quad \Lewis[lewis diag coeff=0.5]{0:5:,O}/
+
+\subsection{Empilement de caractères}
+Les macros\label{chemabove}
+\begin{center}
+ \Verb|\chemabove[<dim>]{<code>}{<matériel>}|
+\end{center}
+et\label{chembelow}
+\begin{center}
+ \Verb|\chembelow[<dim>]{<code>}{<matériel>}|
+\end{center}
+placent le \Verb-<matériel>- respectivement au-dessus et au-dessous du \Verb-<code>- à une distance verticale \Verb-<dim>-, et cela sans changer la boîte englobante du \Verb-<code>-. L'argument optionnel permet si on le souhaite, de spécifier cette dimension à chaque appel. Si l'argument optionnel n'est pas utilisé, une dimension par défaut sera prise : elle vaut \CFval{1.5pt} mais peut être modifiée avec \chevrons{clé} \CFkv{stack sep}{dim}.
+
+Ces commandes sont indépendantes de la macro \verb-\chemfig- et peuvent aussi bien être appelées à l'intérieur ou à l'extérieur de son argument.
+
+On peut les utiliser notamment dans les cycles en prenant soin de mettre des accolades autour des lettres A, B, C et D pour éviter que \CF ne stoppe la lecture de l'atome sur ces lettres :
+\exemple{Superposition dans les cycles}|\chemfig{*5(-\chembelow{A}{B}--\chemabove{C}{D}--)}|
+
+Elles sont parfois utiles pour placer des pseudo exposants tenant lieu de charge qui ne changent pas la boîte englobante de l'atome, de façon à ce que les liaisons n'en soient pas trop éloignées :
+\exemple{ion oxonium}*\chemfig{H-\chemabove{\lewis{5|7,O}}{\quad\scriptstyle+}(-[2]H)-H}*
+
+Les commandes \falseverb{\Chemabove} et \falseverb{\Chembelow} fonctionnent de la même façon sauf que la boîte englobante \emph{tient compte} du \Verb-<matériel>- placé au dessus ou au dessous.
+
+\section{Utilisation de {\protect\ttfamily\protect\textbackslash chemfig} dans l'environnement \protect\ttfamily tikzpicture}
+Il est possible d'appeler la commande \falseverb{\chemfig} à l'intérieur d'un environnement {\ttfamily\falseverb{tikzpicture}} :
+\exemple{\textbackslash chemfig dans tikzpicture}|\begin{tikzpicture}[help lines/.style={thin,draw=black!50}]
+\draw[help lines] (0,0) grid (4,4);
+\draw(0,0) -- (2,1);
+\draw(2,2) circle (0.5);
+\node at (1,3) {\chemfig{A=B-[:30]C}};
+\node[draw,red,anchor=base] at(3,2){\chemfig{X>[2,,,,blue]Y}};
+\end{tikzpicture}|
+
+\section{Au delà de la chimie}\label{style.noeuds}
+Intrinsèquement, \CF est un outil pour tracer des graphes, et cet outil a été programmé pour qu'il soit adapté à la chimie. Dans une certaine mesure, il est possible de détourner \CF de son usage premier pour tracer des organigrammes ou autres schémas se ramenant à des graphes.
+
+Chaque atome est contenu dans un nœud de \TIKZ. Par défaut, ces nœuds ont un «inner sep» et un «outer sep» égal à 0pt. Ils sont rectangulaires comme on l'a vu page~\pageref{longueur.liaison}. Ces valeurs par défaut peuvent être écrasées avec la \chevrons{clé} \CFkey{node style} dont l'argument est passé à \TIKZ et spécifie le style des nœuds contenant les atomes.
+
+Dans cet exemple, on spécifie simplement «draw,inner sep=2pt» ce qui a pour effet de tracer le contour des nœuds et espacer de 2pt leur contour de leur contenu. On spécifie également \CFkv{bond offset}{0pt} pour que les liaisons touchent les frontières des nœuds. L'espace interatome est allongé à 75pt. Enfin, la commande \falseverb{\printatom} est réduite à sa plus simple expression de façon à ne plus se placer en mode mathématique pour afficher les atomes et donc tenir compte des espaces :
+\exemple*{Un organigramme}/\setchemfig{node style={draw,inner sep=2pt},bond offset=0pt,atom sep=75pt}
+\renewcommand\printatom[1]{#1}
+\chemfig{Le chef-[6]Moi(-[4]Eux(-[6]Les autres)(-[7,2]Groupe 1))-Toi(-[:-120,0.5]Lui)(-[:-60,0.5]Elle)}/
+
+Voici un autre organigramme où les nœuds sont circulaires et colorés en bleu cyan :
+\exemple*{Schéma de famille}/\setchemfig{bond offset=0pt,atom sep=80pt,node style={draw,circle,fill=cyan,minimum size=25pt}}
+\renewcommand\printatom[1]{\textsf{#1}}
+\chemfig{Moi(-[:-50,1.2]Frère)(-[:-10]Frère(-[:15]Nièce)(-[:-35]Nièce))
+(-[:-155,0.8]Sœur-[:-80]Neveu)(-[:95,1.25]Père(-[:-25,0.8]Oncle)(-[:-65,0.8]Tante))
+(-[:135]Mère-[:-95,0.5]Oncle)}/
+
+\section{Exemples commentés}\label{exemples.commentes}
+Dans ce chapitre, plusieurs molécules seront dessinées en mettant en œuvre les méthodes précédemment exposées. Le but recherché ici est de montrer dans quel ordre logique peut se construire une molécule de façon à ce que l'utilisateur peu familier avec \CF acquière une méthode pour construire des molécules complexes. Pour l'y aider, les étapes de la construction seront montrées.
+
+De plus, on mettra en évidence que plusieurs possibilités s'offrent à l'utilisateur pour un même résultat graphique, certaines intuitives et d'autres beaucoup moins, l'essentiel étant de montrer que \CF permet une certaine souplesse dans le codage des molécules. À chacun ensuite de se construire et s'approprier les méthodes avec lesquelles il est le plus à l'aise.
+
+\subsection{L'éthanal}
+On va ici dessiner la molécule d'éthanal : \chemfig{H-C(-[2]H)(-[6]H)-C(-[7]H)=[1]O}
+
+La meilleure méthode pour les molécules non cycliques est de choisir la plus longue chaîne. Ici on peut prendre «\verb|H-C-C=O|» par exemple. Il faut incliner la liaison \verb|C=O| de 45\degres{} en utilisant l'angle prédéfini «\verb-[1]-». On obtient la «structure» de la molécule sur laquelle il suffira de rajouter les ramifications :
+\exemple{Structure de l'éthanal}|\chemfig{H-C-C=[1]O}|
+
+Il reste à placer 3 atomes d'hydrogène avec les bonnes inclinaisons à l'aide des angles prédéfinis. Le premier à 90\degres{} avec la ramification «\verb/(-[1]H)/», le second à 270\degres{} avec «\verb/(-[6]H)/» et celui de droite à 315\degres{} avec «\verb/(-[7]H)/» :
+\exemple{Ethanal}|\chemfig{H-C(-[2]H)(-[6]H)-C(-[7]H)=[1]O}|
+
+\subsection{L'acide 2-amino-4-oxohexanoïque}
+Voici la molécule à dessiner : \chemfig{-[::+30]-[::-60](=[:-90]O)-[::+60]-[::-60](-[:-90]NH_2)-[::+60](=[:90]O)-[::-60]OH}
+
+Il existe ---~comme c'est le souvent cas pour la plupart des molécules~--- plusieurs méthodes, et pour chacune, plusieurs façons différentes d'arriver au résultat. Ici, nous allons examiner 4 méthodes différentes.
+
+\subsubsection{Angles absolus}
+On va tout d'abord tracer la chaîne médiane avec des angles absolus. On règle l'angle par défaut à $+30\degres$ avec l'argument optionnel, ainsi seules les liaisons «descendantes» auront besoin que l'on spécifie leur angle absolu de $-30\degres$ :
+\exemple{Structure (angles absolus)}|\chemfig{[:30]--[:-30]--[:-30]--[:-30]OH}|
+
+Il reste à ajouter les ramifications «\verb/(=[6]O)/», «\verb/(-[6]NH_2)/» et «\verb/(=[2]O)/» sur les bons sommets :
+\exemple{Molécule (angles absolus)}|\chemfig{[:30]--[:-30](=[6]O)--[:-30](-[6]NH_2)-(=[2]O)-[:-30]OH}|
+
+\subsubsection{Angles relatifs}
+Une approche plus générale aurait été de n'utiliser que des angles relatifs. Il aurait fallu procéder de cette façon :
+\exemple{Structure (angles relatifs)}|\chemfig{[:30]--[::-60]--[::-60]--[::-60]OH}|
+
+puis
+\exemple{Molécule (angles relatifs)}|\chemfig{[:30]--[::-60](=[::-60]O)--[::-60](-[::-60]NH_2)
+-(=[::60]O)-[::-60]OH}|
+
+\subsubsection{Cycle}
+Les angles entre les liaisons étant de 120\degres{}, on peut penser à utiliser un 6-cycle, quoique cette méthode soit moins naturelle. Il faut ici profiter du fait qu'un cycle peut être incomplet. Il est également nécessaire de faire pivoter le cycle de 120\degres{} pour que le premier sommet soit au sud-est du cycle :
+\exemple{Structure}|\chemfig{[:120]NH_2*6(---=O)}|
+
+Il faut maintenant faire partir les ramifications des sommets adéquats :
+\exemple{Molécule (cycle)}|\chemfig{[:120]NH_2*6(-(-(=[::60]O)-[::-60]OH)--(--[::60])=O)}|
+
+\subsubsection{Cycles imbriqués}
+En approfondissant la méthode avec les cycles, on peut aussi penser à imbriquer des 6-cycles incomplets. On pourrait partir de cette structure :
+\exemple{Structure}|\chemfig{*6(--*6(--=O))}|
+
+Et ensuite ajouter les liaisons qui partent des sommets des ces cycles. Il n'y a pas à se préoccuper des angles puisque les liaisons qui partent des cycles sont les bissectrices des côtés du cycle, ce que justement, on cherche ici :
+\exemple{Molécule (cycles imbriqués)}|\chemfig{*6((-)-(=O)-*6(-(-NH_2)-(-OH)=O))}|
+
+Un examen attentif révèle cependant que la seconde double liaison vers l'atome d'oxygène se trouve \emph{à l'intérieur} du 6-cycle incomplet\footnote{C'était aussi le cas pour la méthode précédente avec un seul cycle.}. Malgré sa concision, ce code ne conduit donc pas à un dessin parfait. On peut bien sûr corriger ce défaut en allongeant un peu le code :
+\exemple{Molécule (cycles imbriqués corrigés)}|\chemfig{*6((-)-(=O)-*6(-(-NH_2)-(-OH)(=[::60]O)))}|
+
+\subsection{Glucose}
+Le but ici est de représenter selon différentes conventions la molécule de glucose.
+
+\subsubsection{Formule topologique}
+Le code ressemble ici à celui de l'acide 2-amino-4-oxohexanoïque. On obtient quasiment la même structure avec des angles absolus sauf qu'ici, l'angle par défaut est de $-30\degres$ :
+\exemple[60]{Structure}|\chemfig{[:-30]HO--[:30]--[:30]--[:30]-H}|
+
+Et l'ajout des ramifications ne pose pas de problème particulier. On utilise des angles absolus :
+\exemple[60]{Fructose, formule topologique}|\chemfig{[:-30]HO--[:30](<[2]OH)-(<:[6]OH)
+-[:30](<:[2]OH)-(<:[6]OH)-[:30](=[2]O)-H}|
+
+\subsubsection{Projection de Fisher}
+Le but est d'obtenir la molécule ci dessous :
+\begin{center}
+ \definesubmol{x}{(-[4]H)(-[0]OH)}
+ \definesubmol{y}{(-[0]H)(-[4]OH)}
+ \chemfig{[2]OH-[3]-!x-!x-!y-!x-=[1]O}
+\end{center}
+L'idée est de commencer à dessiner la plus longue chaîne verticale en indiquant un angle «\verb-[2]-» par défaut. Voici la structure où l'on met volontairement des lettres minuscules au bout de chaque liaison verticale :
+\exemple{Structure}|\chemfig{[2]OH-[3]-a-b-c-d-=[1]O}|
+
+Ensuite, on définit deux alias pour les liaisons horizontales et les atomes qui les termineront. Prenons «\verb-x-» que nous mettrons à la place des minuscules a, c et d et «\verb-y-» qui prendra la place de la lettre c. Comme les alias ne comportent qu'un seul caractère, on peut se passer d'accolade et écrire «\verb-!x-» au lieu de «\verb-!{x}-» :
+\exemple{Glucose (projection de Fisher)}|\definesubmol{x}{(-[4]H)(-[0]OH)}
+\definesubmol{y}{(-[0]H)(-[4]OH)}
+\chemfig{[2]OH-[3]-!x-!x-!y-!x-=[1]O}|
+
+\subsubsection{Représentation "chaise"}
+On va représenter cette molécule d'$\alpha$-D-glucose :
+\chemfig{?(-[:190]OH)-[:-50](-[:170]OH)-[:10](-[:-55,0.7]OH)-[:-10](-[6,0.7]OH)-[:130]O-[:190]?(-[:150,0.7]-[2,0.7]OH)}
+
+Pour cela, on va tout d'abord tracer 5 côtés de la chaise et relier le premier sommet au dernier avec un crochet «\verb-?-». On adopte les angles absolus suivants, donnés dans l'ordre de parcourt trigonométrique : $-50\degres$, $10\degres$, $-10\degres$, $130\degres$, $190\degres$.
+\exemple{Structure}|
+\chemfig{?-[:-50]-[:10]-[:-10]-[:130]O-[:190]?}|
+
+Maintenant, il suffit de rajouter les ramifications entre parenthèses. Les angles sont choisis au mieux pour rendre une impression de perspective, et certaines liaisons sont raccourcis d'un coefficient de 0,7 :
+\exemple{Représentation chaise}|\chemfig{?(-[:190]OH)-[:-50](-[:170]OH)-[:10](-[:-55,0.7]OH)
+-[:-10](-[6,0.7]OH)-[:130]O-[:190]?(-[:150,0.7]-[2,0.7]OH)}|
+
+\subsubsection{Projection de Haworth}
+Le but est de représenter cette molécule de D-glucopyranose :
+\chemfig[cram width=2pt]{HO-[2,0.5,2]?<[7,0.7](-[2,0.5]OH)-[,,,,line width=2pt](-[6,0.5]OH)>[1,0.7](-[6,0.5]OH)-[3,0.7]O-[4]?(-[2,0.3]-[3,0.5]OH)}
+
+Tout d'abord, on va choisir la plus longue chaîne qui part du groupe «HO» de gauche et continue sur 5 côtés du cycle. Le cycle sera fermé avec un crochet. Pour la liaison verticale qui part du premier groupe «HO», il faut spécifier qu'elle doit partir du second atome avec l'argument optionnel. De plus, elle sera raccourcie avec un coefficient de 0,5. Son argument optionnel sera donc «\verb/[2,0.5,2]/».
+
+Ensuite, pour donner une impression de perspective au cycle, les liaisons inclinées seront réduites d'un coefficient de 0,7. Pour les traits gras inclinés, on va se servir des liaisons de Cram en ayant redéfini la largeur de la base des triangles à 2pt. Pour la liaison horizontale en trait gras, il faudra la tracer avec une épaisseur de 2pt et son argument optionnel sera donc «\verb/[0,,,,line width=2pt]/». Voici la structure de la molécule :
+\exemple{Structure}|\chemfig[cram width=2pt]{HO-[2,0.5,2]?<[7,0.7]-[,,,,
+line width=2pt]>[1,0.7]-[3,0.7]O-[4]?}|
+
+Il ne reste plus qu'à rajouter les ramifications, mises au bon endroit, en spécifiant des angles absolus correctement choisis et des longueurs parfois réduites pour mieux donner l'illusion de la perspective :
+\exemple{Projection de Haworth}|\chemfig[cram width=2pt]{HO-[2,0.5,2]?<[7,0.7](-[2,0.5]OH)-[,,,,
+line width=2pt](-[6,0.5]OH)>[1,0.7](-[6,0.5]OH)-[3,0.7]
+O-[4]?(-[2,0.3]-[3,0.5]OH)}|
+
+\subsection{Adrénaline}
+On cherche à dessiner la molécule d'adrénaline :
+\chemfig{*6((-HO)-=-(-(<[::60]OH)-[::-60]-[::-60,,,2]HN-[::+60]CH_3)=-(-HO)=)}
+
+Nous allons utiliser deux méthodes différentes.
+
+\subsubsection{Utilisation d'un cycle}
+Tout d'abord, on part du 6-cycle et nous dessinons le début des ramifications qui en partent :
+\exemple[60]{Structure de l'adrénaline}|\chemfig{*6((-HO)-=-(-)=-(-HO)=)}|
+
+Il faut maintenant compléter la ramification de droite en utilisant, par exemple, des angles relatifs :
+\exemple[60]{Adrénaline, étape 2}|\chemfig{*6((-HO)-=-(--[::-60]-[::-60]
+HN-[::+60]CH_3)=-(-HO)=)}|
+
+Puis, il faut rajouter la liaison de Cram vers \verb-OH- et spécifier que la liaison qui arrive sur «\verb-NH-» le fait sur le second atome «N». Nous utilisons le 4\ieme{} argument optionnel de la liaison :
+\exemple[60]{Adrénaline}|\chemfig{*6((-HO)-=-(-(<[::60]OH)-[::-60]-[::-60,,,2]
+HN-[::+60]CH_3)=-(-HO)=)}|
+
+\subsubsection{Utilisation de 2 cycles}
+Cette méthode est moins naturelle, mais le but est ici d'expliquer comment rendre une liaison invisible.
+
+On pourrait améliorer ce code en considérant que le dessin de la molécule d'adrénaline est constitué de deux 6-cycles accolés l'un à l'autre :
+\exemple[60]{Adrénaline, structure 2 cycles}|\chemfig{*6((-HO)-=*6(--HN---)-=-(-HO)=)}|
+
+Il faut donc rendre invisible les deux premières liaisons du cycle de droite. Pour cela, on se sert de l'argument qui est passé à \TIKZ en spécifiant «\verb-draw=none-». Ces liaisons ont donc ce code : «\verb/-[,,,,,draw=none]/». Pour que le code reste lisible, on définit un alias nommé «\verb-&-» pour ces liaisons :
+\exemple[60]{Adrénaline, étape 2}|\definesubmol{&}{-[,,,,draw=none]}
+\chemfig{*6((-HO)-=*6(!&!&HN---)-=-(-HO)=)}|
+
+Le reste devient facile, il suffit d'ajouter les ramification aux bons sommets :
+\exemple[60]{Adrénaline, étape 3}|\definesubmol{&}{-[,,,,draw=none]}
+\chemfig{*6((-HO)-=*6(!&!&HN(-CH_3)--(<OH)-)-=-(-HO)=)}|
+
+Pour finir, on spécifie que les liaisons qui \emph{arrivent et partent} de «\verb-HN-» doivent le faire sur deuxième atome. On définit donc un autre alias pour la liaison invisible qui arrive sur «\verb-HN-» :
+\exemple[60]{Adrénaline}|\definesubmol{&}{-[,,,,draw=none]}
+\definesubmol{&&}{-[,,,2,draw=none]}
+\chemfig{*6((-HO)-=*6(!&!{&&}HN(-CH_3)-[,,2]-(<OH)-)-=-(-HO)=)}|
+
+\subsection{Guanine}
+Nous allons dessiner la molécule de guanine :
+\chemfig{*6((-H_2N)=N-*6(-\chembelow{N}{H}-=N?)=?-(=O)-HN-[,,2])}\medskip
+
+Tout d'abord, commençons par dessiner les cycles imbriqués en mettant seulement les atomes d'azote aux sommets :
+\exemple{Guanine, structure}|\chemfig{*6(=N-*6(-N-=N)=--N-)}|
+
+Puis nous allons tracer la liaison horizontale dans le cycle de droite avec un crochet. Nous allons aussi positionner un atome d'hydrogène sous l'atome d'azote du 5-cycle avec la commande \verb-\chembelow{N}{H}-. Il faut aussi écrire «\verb-HN-» au lieu de «\verb-N-» au sommet en haut à gauche de la molécule :
+\exemple{Guanine, étape 2}|\chemfig{*6(=N-*6(-\chembelow{N}{H}-=N?)=?--HN-)}|
+
+On constate qu'une liaison part du mauvais atome\footnote{Ceci semble illogique puisque l'angle de la liaison du groupe \texttt{HN} vers le premier sommet du 6-cycle est comprise entre $-90\degres$ et $90\degres$; \CF devrait donc partir du 2\ieme{} atome. Pour expliquer cette contradiction, il faut savoir que dans les cycles, la dernière liaison relie toujours le dernier sommet au premier sommet en ignorant l'angle \emph{calculé théorique} de cette liaison (qui est ici de $-90\degres{}$). \CF utilise cet angle théorique pour déterminer les atomes de départ et d'arrivée, mais ne s'en sert pas pour tracer la liaison puisque les deux extrémités sont déjà définies. L'atome de départ de la dernière liaison est donc le \no1.} ! Il faut corriger le mécanisme de calcul automatique pour que la liaison parte du 2\ieme{} atome «\verb-N-» au lieu du premier. Pour cela, on spécifie un argument optionnel pour la dernière liaison du premier 6-cycle «\verb-[,,2]-» :
+\exemple{Guanine, étape 3}|\chemfig{*6(=N-*6(-\chembelow{N}{H}-=N?)=?--HN-[,,2])}|
+
+Il suffit de rajouter les ramifications aux bons sommets. On peut notamment remarquer la ramification qui part du premier sommet du premier 6-cycle «\verb/(-H_2N)/» :
+\exemple{Guanine}|\chemfig{*6((-H_2N)=N-*6(-\chembelow{N}{H}-=N?)=?-(=O)-HN-[,,2])}|
+
+On aurait aussi pu dessiner cette même molécule avec un 5-cycle \emph{régulier}, comme cela se fait parfois :
+\exemple{Guanine avec 5-cycle}|\chemfig{*6((-H_2N)=N-*5(-\chembelow{N}{H}-=N-)=-(=O)-HN-[,,2])}|
+
+\section{Comment faire\protect\ldots}
+\subsection{Écrire un atome en couleur}
+Comme le package \verb-xcolor- est chargé par \TIKZ, lui même chargé par \CF, on peut donc mettre dans le code d'une molécule des instructions de couleur, principalement \falseverb{\color} et \falseverb{\textcolor}. Les atomes étant affichés dans des nœuds de \TIKZ qui se comportent comme des boîtes de \TeX{}, tout se passe comme si ces atomes étaient confinés dans un groupe ce qui fait que le changement de couleur reste local à l'atome.
+
+\exemple{Couleurs}/\chemfig{C\color{blue}H_3-C(=[1]O)-[7]O\color{red}H}/
+
+On constate que ce code ne fonctionne pas, toujours à cause de la règle de qu'utilise \CF : ici, le premier atome de la molécule commence à «\verb-C-» et s'étend jusqu'à la prochaine lettre majuscule. Cet atome est donc «\verb-C\color{blue}-» et donc, le changement de couleur se fait en fin d'atome et reste sans effet. Il faut forcer \CF à couper le premier atome juste après «\verb-C-» avec le caractère «\verb-|-» et ensuite, englober \verb-\color{blue}H_3- entre accolades de façons à ce que \CF ne stoppe pas l'atome \no2 avant le «\verb-H-» ce qui laisserait le changement de couleur seul et donc inefficace dans un atome :
+
+\exemple{Couleurs}/\chemfig{C|{\color{blue}H_3}-C(=[1]O)-[7]O|{\color{red}H}}/
+
+On peut obtenir le même effet avec \verb-\textcolor- :
+
+\exemple{Couleurs}/\chemfig{C|\textcolor{blue}{H_3}-C(=[1]O)-[7]O|\textcolor{red}{H}}/
+
+Le principal inconvénient est qu'il faut répéter l'opération pour chaque atome que l'on veut colorer, même si ceux-ci sont contigus.
+
+\subsection{Ajouter un exposant sans influer sur une liaison}
+Ajouter une \falseverb{charge} sous forme d'exposant mathématique à un atome implique que la boîte (et donc le nœud de \TIKZ) le contenant aura ses dimensions modifiées. Cela n'a guerre d'importance si l'atome est un fin de chaîne mais l'esthétique peut être compromise si une liaison doit en partir. Le premier réflexe est de mettre l'exposant dans une boîte de \TeX{} de dimensions nulles et donc d'utiliser la macro\falseverb\rlap\footnote{Si l'on doit mettre la charge a gauche de l'atome, il faut employer la commande \texttt{\string\llap}.}, ce qui donne des résultats souvent satisfaisants. On voit ici que grâce à \falseverb\rlap, l'\falseverb{alignement horizontal} des atomes est préservé :
+\exemple{Charge et liaison}/\chemfig{A^+-[2]B}
+\qquad
+\chemfig{A\rlap{${}^+$}-[2]B}/
+Si l'on veut utiliser la commande \verb-\oplus- qui affiche «$\oplus$», on peut trouver que la charge est trop basse : $\mathrm{A^\oplus}$. Dans ce cas, pourquoi ne pas se servir de \falseverb{\chemabove} pour placer aussi précisément que l'on veut, aussi bien verticalement qu'horizontalement la charge :
+\exemple{Charge et \string\chemabove}/\chemfig{\chemabove[0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}-[2]B}
+\qquad
+\chemfig{{\chemabove[-0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}}-[2]B}/
+On remarque un niveau d'accolades supplémentaire pour la seconde molécule. En effet, comme on spécifie «\verb/-0.5pt/» pour l'argument optionnel de \falseverb{\chemabove} pour descendre la charge, il faut éviter que \CF ne comprenne ce signe «\verb/-/» comme une liaison simple.
+
+Pour ajouter une charge près du sommet d'un cycle, la meilleure méthode est de créer une liaison invisible qui parte de ce sommet, ce qu'on fait ici avec \falseverb\definesubmol{} avec une liaison ayant un coefficient de longueur égal à 0.2 :
+\exemple{Charges et cycles}/\definesubmol\nobond{-[,0.2,,,draw=none]}
+\chemfig{*5(---(!\nobond\scriptstyle\oplus)-(!\nobond\scriptstyle{-})-)}/
+
+\subsection{Dessiner une liaison courbe}
+Nous avons déjà vu qu'avec la librairie «\verb-decorations.pathmorphing-» de \TIKZ, on peut dessiner une liaison ondulée :
+
+\exemple{Liaison ondulée}|\chemfig{A-[,3,,,decorate,decoration=snake]B}
+
+\chemfig{A-[,3,,,decorate,decoration={snake,amplitude=1.5mm,
+ segment length=2.5mm}]B}|
+
+Pour plus de souplesse, on peut aussi poser des nœuds avec le marqueur «\verb-@-» et réutiliser ces nœuds après que la molécule ait été tracée pour les relier avec une ligne courbe à l'aide de \falseverb{\chemmove} :
+
+\exemple{Liaisons courbes}/\chemfig{@{a}A-[,,,,draw=none]@{b}B}
+\chemmove{\draw[-](a)..controls +(45:7mm) and +(225:7mm)..(b);}
+\bigskip
+
+\chemfig{*6(@{a}---@{b}---)}
+\chemmove{\draw[-](a)..controls +(60:3em) and +(240:3em)..(b);}
+\quad
+\chemfig{*6(@{a}---@{b}---)}
+\chemmove{\draw[-](a)..controls +(60:3em) and +(30:1em)..
+ ++(20:2em) ..controls +(210:3em) and +(-120:4em) ..(b);}/
+
+\subsection{Dessiner un élément de polymère}\label{polymerdelim}
+La macro \verb|\polymerdelim|, jusqu'alors non documentée et en phase de test, fait avec la version 1.33 son entrée officielle dans le package \CF. Sa syntaxe est la suivante :
+\begin{center}
+ \Verb|\polymerdelim[<clés>=<valeurs>]{<nœud1>}<nœud2>}|
+\end{center}
+
+L'effet, après éventuellement \emph{deux} compilations, est de positionner des délimiteurs verticaux aux nœuds spécifiés : par défaut, le 1\ier{} délimiteur est placé sur le premier nœud et le second sur la même horizontale que le premier, mais à l'abscisse du second. Les paramètres sont spécifiés via les \chevrons{clés} et les \chevrons{valeurs} dont voici la liste, les valeurs par défaut et les actions.
+\begin{center}
+\begin{tabular}{rlp{8cm}}\hline
+ \chevrons{clés} & \chevrons{valeurs} par défaut & Action\\\hline
+ \CFdelimparam{delimiters} & Définit les délimiteurs. Si ces délimiteurs sont des crochets, il faut écrire \verb|delimiters={[]}|.\\
+ \CFdelimparam{height} & Définit la hauteur (au-dessus du nœud) des délimiteurs.\\
+ \CFdelimparam{depth} & Définit la profondeur (au-dessous du nœud) des délimiteurs. Si la \chevrons{valeur} est vide, alors la profondeur est égale à la hauteur.\\
+ \CFdelimparam{h align}&Booléen qui lorsqu'il est \CFval{false}, place le 2\ieme{} délimiteur sur le 2\ieme{} nœud, au risque que les délimiteurs ne soient pas sur une même ligne horizontale.\\
+ \CFdelimparam{auto rotate}&Booléen qui, lorsqu'il est \CFval{true} et \CFkv{h align}{false}, tourne automatiquement les délimiteurs pour qu'ils soient perpendiculaires à la ligne qui relie les deux nœuds.\\
+ \CFdelimparam{rotate}&Lorsque \CFkv{h align}{false} et \CFkv{auto rotate}{false}, spécifie l'angle de rotation des deux délimiteurs.\\
+ \CFdelimparam{open xshift}& Définit le décalage horizontal du délimiteur ouvrant.\\
+ \CFdelimparam{close xshift}& Définit le décalage horizontal du délimiteur fermant. Si la \chevrons{valeur} est vide, alors ce décalage devient opposé au décalage du délimiteur ouvrant.\\
+ \CFdelimparam{indice} & Définit l'indice qui sera placé en bas à droite du délimiteur fermant.\\\hline
+\end{tabular}
+\end{center}
+\exemple*{Polymères}|Polyéthylène:
+\chemfig{\vphantom{CH_2}-[@{op,.75}]CH_2-CH_2-[@{cl,0.25}]}
+\polymerdelim[height = 5pt, indice = \!\!n]{op}{cl}
+\bigskip
+
+Polyvinyl chloride:
+\chemfig{\vphantom{CH_2}-[@{op,1}]CH_2-CH(-[6]Cl)-[@{cl,0}]}
+\polymerdelim[height = 5pt, depth = 25pt, open xshift = -10pt, indice = \!\!n]{op}{cl}
+\bigskip
+
+Nylon 6:
+\chemfig{\phantom{N}-[@{op,.75}]{N}(-[2]H)-C(=[2]O)-{(}CH_2{)_5}-[@{cl,0.25}]}
+\polymerdelim[height = 30pt, depth = 5pt, indice = {}]{op}{cl}
+\bigskip
+
+Polycaprolactame:
+\chemfig[atom sep = 2em]{[:-30]-[@{left,.75}]N(-[6]H)-[:30](=[2]O)--[:30]--[:30]--[@{right,0.25}:30]}
+\polymerdelim[height = 5pt, indice = \!\!n]{left}{right}
+\bigskip
+
+Polyphénylène sulfide:
+\chemfig{\vphantom{S}-[@{op,.75}]S-(**6(---(-[@{cl,0.25}])---))}
+\polymerdelim[delimiters = (), height = 15pt, indice = {}]{op}{cl}
+\bigskip
+
+\chemfig{-CH_2-CH([6]-CO-NH-CH_2-NH-CO-CH([4]-CH_2-)([0]-[@{downleft,0.8},2]CH_2
+-CH([2]-CO-NH_2)-[@{downright,0.3},2]CH_2-[,1.5]C?H-))-[@{upleft,0.8},2]CH_2
+-CH([6]-CO-NH_2)-[@{upright,0.3},2]CH_2-[,1.5]CH([6]-CO-NH-CH_2-NH-C?O)-}
+\polymerdelim[delimiters ={[]}, height = 5pt, depth = 40pt, indice = n]{upleft}{upright}
+\polymerdelim[delimiters ={[]}, height = 40pt, depth = 5pt, indice = n]{downleft}{downright}
+
+\chemfig{-[@{op,.5}:-30]O-[::60](=[::60]O)-[::-60]*6(-=-(-(=[::-60]O)-[::60]O-[::-60]-[::60]-[@{cl,.5}::-60])=-=)}
+\polymerdelim[height=6ex, indice=n, h align=false]{op}{cl}|
+
+\subsection{Dessiner le symétrique d'une molécule}\label{retournement}
+Il existe deux commandes \falseverb{\hflipnext} et \falseverb{\vflipnext} qui permettent de tracer le symétrique de la prochaine molécule par rapport à un axe horizontal ou vertical. Si on souhaite construire le symétrique de plusieurs molécules, il faut écrire les commandes avant chaque molécule concernée.
+
+\exemple{Symétriques}/\chemfig{H_3C-C(=[:30]O)-[:-30]OH}% original
+
+\vflipnext% dessine le symétrique vertical de :
+\chemfig{H_3C-C(=[:30]O)-[:-30]OH}\medskip
+
+\chemfig{H_3C-C(=[:30]O)-[:-30]OH}% original
+\hflipnext% dessine le symétrique horizontal de :
+\chemfig{H_3C-C(=[:30]O)-[:-30]OH}/
+
+\subsection{Ajouter du texte au dessus des liaisons et coder les angles}
+Une fois que l'on a compris que le caractère «\verb-@-» permet de poser un nœud «global» pour \TIKZ, c'est-à-dire accessible après que la molécule ait été dessinée, tout ce qui est possible avec \TIKZ et les nœuds (c'est-à-dire beaucoup de choses) devient envisageable.
+
+Pour écrire quelque chose au-dessus ou au-dessous d'une liaison, on peut donc poser des nœuds «globaux» sur les atomes situés aux extrémités de cette liaison et écrire à mi-chemin de ces deux nœuds un texte que l'on aura soin d'élever ou d'abaisser pour qu'il se situe juste au dessus ou au dessous de la liaison. C'est ce que fait la commande \verb-\bondname- dans le code ci-dessous.
+
+Pour les angles entre deux liaisons partant d'un atome, 3 atomes sont impliqués et il faudra poser un nœud global sur chacun d'eux. On peut aisément calculer l'angle entre deux lignes issues d'un même nœud, c'est ce que fait la commande \verb-\arcbetweennodes-. Ensuite, la macro \verb-\arclabel- trace un arc de cercle entre deux liaisons et écrit un texte à côté de cet arc : l'argument optionnel de cette macro est le code passé à \TIKZ. L'argument \no2 est le rayon de l'arc tandis que les trois arguments suivants sont les noms des nœuds globaux entre lesquels doit être tracé l'arc, le nom du milieu devant être celui du sommet de l'angle. Enfin, le dernier argument est le texte à écrire.
+
+\exemple*{Angles et texte sur les liaisons}|\newcommand\angstrom{\mbox{\normalfont\AA}}
+\newcommand\namebond[4][5pt]{\chemmove{\path(#2)--(#3)node[midway,sloped,yshift=#1]{#4};}}
+
+\newcommand\arcbetweennodes[3]{%
+ \pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}%
+ \let#3\pgfmathresult}
+
+\newcommand\arclabel[6][stealth-stealth,shorten <=1pt,shorten >=1pt]{%
+ \chemmove{%
+ \arcbetweennodes{#4}{#3}\anglestart \arcbetweennodes{#4}{#5}\angleend
+ \draw[#1]([shift=(\anglestart:#2)]#4)arc(\anglestart:\angleend:#2);
+ \pgfmathparse{(\anglestart+\angleend)/2}\let\anglestart\pgfmathresult
+ \node[shift=(\anglestart:#2+1pt)#4,anchor=\anglestart+180,rotate=\anglestart+90,inner sep=0pt,
+ outer sep=0pt]at(#4){#6};}}
+
+\chemfig{@{a}A=[:30,1.5]@{b}B-[7,2]@{c}C-@{d}D}
+\namebond{a}{b}{\scriptsize My text}
+\namebond[-3.5pt]{b}{c}{\small\color{red}$\pi$}
+\namebond{c}{d}{\small1 \angstrom}
+\medskip
+
+Molécule d'eau horizontale : \chemfig{@{1}H-[::37.775,2]@{2}O-[::-75.55,2]@{3}H}.
+\namebond{1}{2}{\footnotesize0,9584 \angstrom}
+\namebond{2}{3}{\footnotesize0,9584 \angstrom}
+\arclabel{0.5cm}{1}{2}{3}{\footnotesize104,45\textdegree}
+\qquad
+Molécule d'eau pivotée de +30\textdegree : \chemfig{[:30]@1H-[::37.775,2]@2O-[::-75.55,2]@3H}
+\namebond12{\footnotesize0,9584 \angstrom}
+\namebond23{\footnotesize0,9584 \angstrom}
+\arclabel{0.5cm}{1}{2}{3}{\footnotesize104,45\textdegree}|
+
+\subsection{Schéma de Lewis à l'angle près}
+Pour quelques cas très particuliers, il est parfois nécessaire de positionner des schémas de Lewis au degrés près et non plus à des multiples de 45 degrés.
+
+Pour cela, il est relativement facile d'écrire une macro \verb-\mylewis-, admettant un argument optionnel (la longueur du doublet) qui vaut ici 2ex et deux arguments obligatoires; le premier étant le nom de l'atome et le second étant la liste des angles séparés par des virgules.
+
+L'astuce consiste à créer un n\oe ud invisible circulaire qui contient l'atome et tracer les doublets aux angles désirés de façon à ce qu'ils soient tangents à ce cercle :
+
+\exemple*{Doublets au degrés prés}|\catcode`\_11
+\newcommand\mylewis[3][2ex]{% #1=longueur, #2=atome #3=liste des angles
+ \tikzpicture[baseline,anchor=base]%
+ \node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
+ \node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
+ \def\list_angle{#3,}%
+ \loop
+ \expandafter\grab_angle\list_angle\_nil
+ \pgfextractx\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimax{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimay{\the\CF_dim}%
+ \pgfmathparse{#1*sin(\current_angle)/2}\let\offset_xx\pgfmathresult
+ \pgfmathparse{#1*cos(\current_angle)/2}\let\offset_yy\pgfmathresult
+ \draw[line width=.4pt,overlay]
+ (\CF_dimax-\offset_xx,\CF_dimay+\offset_yy)--(\CF_dimax+\offset_xx,\CF_dimay-\offset_yy);%
+ \unless\ifx\empty\list_angle
+ \repeat
+ \endtikzpicture
+}
+\def\grab_angle#1,#2\_nil{\def\current_angle{#1}\def\list_angle{#2}}
+\catcode`\_8
+Essai : \mylewis{Cl}{15}\qquad \mylewis[3ex]{Cl}{-60}\qquad \mylewis[1.5ex]{Cl}{60,120,240,300}
+\bigskip
+
+\chemfig{P(-[:72]\mylewis{Cl}{-18,72,162})(-[:-72]Cl)
+(-[:144]Cl)(-[:-144]Cl)-\mylewis{Cl}{0,90,-90}}|
+
+\subsection{Dessiner des liaisons multiples}
+Là encore, la librairie «decorations.markings» permet de tracer des liaisons multiples :
+
+\exemple*{Liaisons multiples}|\catcode`\_=11
+\tikzset{nbond/.style args={#1}{%
+ draw=none,%
+ decoration={%
+ markings,%
+ mark=at position 0 with {\coordinate (CFstart@) at (0,0);},
+ mark=at position 1 with {%
+ \foreach\CF_i in{0,1,...,\number\numexpr#1-1}{%
+ \pgfmathsetmacro\CF_nbondcoeff{\CF_i-0.5*(#1-1)}%
+ \draw ([yshift=\CF_nbondcoeff\CF_doublesep]CFstart@)--(0,\CF_nbondcoeff\CF_doublesep);
+ }%
+ }
+ },
+ postaction={decorate}
+ }
+}
+\catcode`\_=8
+\chemfig{A-[1,,,,nbond=4]B-[:-30,,,,nbond=5]C-[6,,,,nbond=6]D}|
+
+\part{Schémas réactionnels}\label{schemas}
+Suite à plusieurs demandes d'utilisateurs et étant devenu évident que \CF présentait une faiblesse quant au tracé de schémas réactionnels, cette lacune est désormais comblée. Par conséquent, \CF passe en version 1.0 puisque je considère que les fonctionnalités principales que je souhaitais implémenter sont désormais disponibles.
+
+Je remercie Clemens \textsc{Niederberger} pour l'aide qu'il m'a apportée et les tests qu'il a effectués sur les nouvelles fonctionnalités présentées dans cette partie.
+\section{Généralités}\label{schemestart}
+Un schéma réactionnel doit être contenu entre les commandes «\falseverb\schemestart» et «\falseverb\schemestop». Comme on le constate sur cet exemple, des \falseverb{informations de débogage} ont été masquées puis rendues visibles pour aider à la compréhension avec la \chevrons{clé} \CFkey{scheme debug} et la valeur \CFval{true} ou \CFval{false} :
+\exemple[50]{Exemple 1}/\setchemfig{scheme debug=false}
+\schemestart
+ \chemfig{*6(-=-=-=)}\arrow
+ \chemfig{X=[1]Y}\arrow
+ \chemfig{S>T}
+\schemestop
+\bigskip
+
+\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{*6(-=-=-=)}\arrow
+ \chemfig{X=[1]Y}\arrow
+ \chemfig{S>T}
+\schemestop/
+
+Quelques remarques :
+\begin{itemize}
+ \item les commandes \falseverb{\arrow} tracent les flèches;
+ \item tout ce qui se trouve entre deux commande \falseverb{\arrow} est considéré comme étant un composé. Le parti a été pris que tous les réglages possibles, qu'ils concernent les flèches ou les composés, le seront grâce aux arguments de la commande \falseverb{\arrow}, dont la syntaxe en devient assez complexe;
+ \item les flèches sont tracées horizontalement, ce qui est bien évidemment modifiable;
+ \item les flèches sont sur la ligne imaginaire reliant les centre des boîtes englobantes les composés (les points rouges et bleus sont les points d'attache des flèches). Ce comportement est également modifiable;
+ \item Les informations de débogage, qui sont rendues visibles ou pas avec la \chevrons{clé} \CFkey{scheme debug} sont :
+ \begin{itemize}
+ \item ce qui se trouve en vert au dessus des boîtes englobantes est le nom attribué par défaut par \CF aux composés et suit la progression "c1", "c2", etc. La numérotation recommence à 1 pour un nouveau schéma réactionnel.
+ \item les boîtes englobantes des composés ont été tracées;
+ \item les extrémités des flèches sont matérialisés par des points rouge et les ancres par des points bleu;
+ \end{itemize}
+ \item la distance de bord à bord entre deux composés est définie avec la \chevrons{clé} \CFkv{compound sep}{dim}\label{compound sep}. La valeur par défaut de la \CFval{dim} est 5em;
+ \item enfin, la distance entre les bords des composés et le début et la fin des flèches est défini avec la \chevrons{clé} \CFkv{arrow offset}{dim}. Par défaut, cette \CFval{dim} vaut 4pt.\label{arrow offset}
+\end{itemize}
+
+\section{Types de flèches}\label{arrow}
+Lorsque la commande \falseverb{\arrow} est suivie d'un argument optionnel entre accolades (qui n'est donc pas obligatoire), cet argument contient le type de flèche :
+\exemple[50]{Types de flèches}|\schemestart A\arrow{->}B\schemestop\par % par défaut
+\schemestart A\arrow{-/>}B \schemestop\par
+\schemestart A\arrow{<-}B \schemestop\par
+\schemestart A\arrow{<->}B \schemestop\par
+\schemestart A\arrow{<=>}B \schemestop\par
+\schemestart A\arrow{<->>}B \schemestop\par
+\schemestart A\arrow{<<->}B \schemestop\par
+\schemestart A\arrow{0}B \schemestop\par
+\schemestart A\arrow{-U>}B \schemestop|
+La flèche «\verb/-U>/» n'est pas dessinée de façon complète, un arc de cercle qui lui est tangent en son milieu peut être rajouté avec les arguments optionnels passés à cette flèche, voir page~\pageref{fleche.arg.optionnel}. Voici une flèche «\verb/-U>/» avec son arc de cercle : \schemestart A\arrow{-U>[$\scriptstyle x$][$\scriptstyle y$]}B\schemestop
+
+Par souci de concision, par la suite, sauf exemple spécial, des lettres majuscules seront mises au lieu de formules chimiques crées via la commande \falseverb\chemfig. Il est bien évident que les schémas réactionnels fonctionnent de façon identique avec des lettres ou des dessins de molécules. On peut voir dans la galerie plusieurs exemples où les schémas réactionnels entrent en jeu.
+
+\section{Caractéristiques des flèches}
+Chaque flèche est caractérisée par :
+\begin{itemize}
+ \item un angle exprimé en degrés;
+ \item un coefficient qui spécifie la longueur de la flèche par multiplication de la valeur de l'espacement entre composés défini par \CFkey{compound sep};
+ \item un style qui contient des instructions \TIKZ qui vont permettre de personnaliser la couleur, l'épaisseur de la flèche ou un autre attribut graphique.
+\end{itemize}
+
+On peut définir ces caractéristiques à l'aide des \chevrons{clés}
+\begin{itemize}
+ \item \CFkv{arrow angle}{angle}, dont la valeur est 0 par défaut;
+ \item \CFkv{arrow coeff}{decimal}, dont la valeur est 1 par défaut;
+ \item \CFkv{arrow style}{code tikz}, dont la valeur par défaut est vide.
+\end{itemize}
+
+\exemple[50]{Définition de valeurs par défaut}/\schemestart A\arrow B\arrow C\schemestop
+
+\setchemfig{arrow angle=15,arrow coeff=1.5,
+arrow style={red, thick}}
+\schemestart A\arrow B\arrow C\schemestop
+
+\setchemfig{arrow coeff=2.5,arrow style=dashed}
+\schemestart A\arrow B\arrow C\schemestop
+
+\setchemfig{arrow angle={},arrow coeff={},arrow style={}}
+\schemestart A\arrow B\arrow C\schemestop/
+
+Pour modifier localement une, ou toutes ces valeurs par défaut, la commande \falseverb{\schemestart} admet un argument optionnel de la forme \verb-[angle,coeff,style]- qui change les caractéristiques par défaut à l'intérieur du schéma réactionnel concerné :
+\exemple[50]{Argument optionnel}/\setchemfig{arrow angle=5,arrow coeff=2.5,arrow style=blue}
+\schemestart A\arrow B\arrow C\schemestop
+
+\schemestart[0] A\arrow B\arrow C\schemestop
+
+\schemestart[0,1] A\arrow B\arrow C\schemestop
+
+\schemestart[0,1,thick] A\arrow B\arrow C\schemestop
+
+\schemestart[0,1,black] A\arrow B\arrow C\schemestop/
+
+Pour le style, la règle est la suivante : le style spécifié dans l'argument entre crochets s'applique \emph{après} le style par défaut, sans l'écraser ! C'est pour cette raison que seul l'attribut de couleur «black» parvient à écraser celui par défaut qui est «blue».
+
+Enfin, la commande \falseverb{\arrow} admet un argument optionnel entre crochets de la forme \verb-[angle,coeff,style]- pour modifier les caractéristiques de la flèche concernée. Pour le style, comme précédemment, celui est-ci est appliqué \emph{après} le style par défaut et l'éventuel style spécifié dans l'argument optionnel de la commande \verb-\schemestart-, le tout sans écrasement.
+\exemple[50]{Caractéristiques des flèches}/\schemestart
+ A\arrow[45]B\arrow[-20,2]C
+\schemestop
+\bigskip
+
+\schemestart
+ A\arrow[90,,thick]B\arrow[,2]C
+ \arrow[-45,,dashed,red]D
+\schemestop/
+
+\section{Nom des composés}
+On peut passer outre le mécanisme automatique qui nomme les composés «c1», «c2», etc. Pour cela, la commande \falseverb{\arrow} admet un argument entre parenthèses qui doit suivre immédiatement la commande. Cet argument est de la forme : \verb/(n1--n2)/. Il nomme «\verb-n1-» le composé se trouvant à l'origine de la flèche et «\verb-n2-» celui se trouvant à sa fin. N'importe quelle chaîne de caractères alphanumériques peut être utilisée. La numérotation des noms "c<n>" continue en interne ce qui signifie que si un composé porte un autre nom que celui par défaut, cela ne change pas le nom par défaut des composés suivants.
+
+Les noms sont facultatifs et l'argument peut aussi bien être \verb/(n1--)/ que \verb/(--n2)/.
+
+\exemple[50]{Nom des composés}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow(aa--bb)B\arrow(--cc)C\arrow(--dd)D\arrow E
+\schemestop
+\bigskip
+
+\schemestart
+ A\arrow(aa--)B\arrow(bb--)C\arrow(cc--dd)D\arrow E
+\schemestop/
+On le voit, les deux méthodes sont équivalentes et l'on peut donc nommer un composé avec la flèche qui le précède ou avec la flèche qui le suit. Par contre lorsqu'un composé est entouré de deux flèches spécifiant son nom, le premier nom est ignoré et un warning est émis :
+\exemple[50]{Noms surabondants}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow(--foo)B\arrow(bar--)C
+\schemestop/
+Ici, le composé «B» est nommé «foo» par la flèche qui lui arrive dessus et «bar» par celle qui en part. \CF émet donc le warning suivant annonçant que le nom "foo" sera ignoré :
+
+\hfill\verb-Package chemfig Warning: two names for the same node, first name "foo" ignored-\hfill\null
+
+\section{Ancres}
+Comme on l'a vu, les flèches sont sur la ligne reliant les centre de boites englobant les composés. On peut spécifier un ancre autre que celui par défaut (qui, au sens de \TIKZ, s'appelle «center»). On utilise pour cela l'argument entre parenthèses :
+
+\hfill\verb/(n1.a1--n2.a2)/\hfill\null
+
+où l'ancre »\verb-a1-« ou »\verb-a2-« peut être : north west, north, north east, west, center, east, mid west, mid, mid east, base west, base, base east, south west, south, south east, text, ou n'importe quel angle. Voici un exemple du manuel de \TIKZ où les ancres sont placés sur la boîte englobante :
+\exemple*{Ancres de tikz}|\Huge
+\begin{tikzpicture}[baseline]
+\node[anchor=base west,name=x,draw,inner sep=25pt] {\color{lightgray}Rectangle\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+{north west/above left, north/above, north east/above right,west/left, center/above, east/right,
+mid west/left, mid/above, mid east/right,base west/left, base/below, base east/right,
+south west/below left, south/below, south east/below right,text/below,10/right,45/above,150/left}
+\draw[shift=(x.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement,inner sep=0pt,outer sep=2pt] {\scriptsize\texttt{(\anchor)}};
+\end{tikzpicture}|
+Comme les noms, les ancres de départ et de fin sont indépendants et facultatifs.
+
+Voici un exemple où l'alignement par défaut n'est pas bon car les deux «A» ne sont pas alignés verticalement. Les \falseverb{informations de débogage} ont été rendues visibles pour constater que les ancres «center» par défaut ne conviennent pas :
+\exemple[50]{Problèmes d'alignement}/\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{A*5(-----)}
+ \arrow
+ \chemfig{A*5(---(-)--)}
+\schemestop/
+Pour que l'alignement soit correct, on va faire partir/arriver la flèche soit des ancres «base east»/«base west», soit des ancres «mid east»/«mid west» :
+\exemple[50]{Problèmes d'alignement}/\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{A*5(-----)}
+ \arrow(.base east--.base west)
+ \chemfig{A*5(---(-)--)}
+\schemestop
+\bigskip
+
+\schemestart
+ \chemfig{A*5(-----)}
+ \arrow(foo.mid east--bar.mid west)
+ \chemfig{A*5(---(-)--)}
+\schemestop/
+
+Un dernier ancre reste à spécifier, c'est celui du premier composé par rapport à la \falseverb{ligne de base} du texte qui le précède, il s'agit du point vert de gauche sur le schéma qui suit :
+\exemple[50]{Ancre initial}/\setchemfig{scheme debug=true}
+Texte qui précède :
+\schemestart
+ \chemfig{A*5(-----)}\arrow A
+\schemestop/
+
+L'emplacement de cet ancre sur la boîte contenant le premier composé vaut par défaut «text». Il est réglable avec le second argument optionnel de la commande \falseverb{\schemestart} :
+\exemple[50]{Réglage de l'ancre initial}/\setchemfig{scheme debug=true}
+Texte qui précède :
+\schemestart[][south]
+ \chemfig{A*5(-----)}\arrow A
+\schemestop
+\bigskip
+
+Texte qui précède :
+\schemestart[][north west]
+ \chemfig{A*5(-----)}\arrow A
+\schemestop
+\bigskip
+
+Texte qui précède :
+\schemestart[][west]
+ \chemfig{A*5(-----)}\arrow A
+\schemestop/
+
+\section{Style des composés}
+Toujours par l'intermédiaire de l'argument entre parenthèses de la commande \falseverb{\arrow}, on peut spécifier avec des instructions de \TIKZ le style «\verb-s-» de la boîte englobante du composé de départ ou de celui d'arrivée. La syntaxe complète de la commande \falseverb{\arrow} est donc la suivante, où chaque spécification est optionnelle et peut être omise :
+
+\hfill\verb/\arrow(n1.a1[s1]--n2.a2[s2]){type flèche}[angle,coeff,style flèche]/\hfill\null
+
+Tout comme les noms, si un style est spécifié à un composé par la flèche qui lui arrive dessus et par celle qui en part, le premier style sera ignoré avec un warning.
+
+\exemple[60]{Style des composés}/\schemestart
+ A
+ \arrow([red]--[fill=blue,semitransparent,text opacity=1,
+ inner sep=10pt,rounded corners=2mm])
+ B
+\schemestop
+\bigskip
+
+\schemestart
+ A\arrow(--foo[yshift=5mm])B
+\schemestop/
+
+\label{compound style}La \chevrons{clé} \CFkv{compound style}{code tikz} permet de définir de façon générale le style des composés affichés par la suite. Il faut bien évidemment entrer un argument vide pour qu'aucun style ne soit appliqué, ce qui est le cas par défaut.
+
+Ici, nous allons définir un style en forme de boites aux coins arrondis, dont le fond sera semi transparent :
+\exemple[50]{Styles globaux}/\setchemfig{compound style={draw,line width=0.8pt,
+semitransparent,text opacity=1,inner sep=8pt,
+rounded corners=1mm}}
+\schemestart
+ A\arrow([fill=red]--[fill=blue])[90]
+ B\arrow(--[fill=gray])
+ C\arrow(--[fill=green])[-90]
+ D\arrow(--[draw=none])[-180]
+\schemestop/
+
+\section{Embranchements}
+Jusqu'à présent, on n'a pu tracer que des schémas réactionnels linéaires. On peut également faire des embranchements et c'est là que le nom des composés va prendre toute son importance. Dans l'argument entre parenthèses de la commande \falseverb{\arrow}, si un nom est précédé de \og\verb-@-\fg, cela signifie que ce composé existe déjà. Plusieurs cas de figure peuvent se présenter :
+\begin{itemize}
+ \item \verb/(@n1--n2)/ : la flèche sera tracée depuis le composé existant \og\verb-n1-\fg{} et le schéma continuera à la suite de cette flèche, créant donc un embranchement;
+ \item \verb/(@n1--@n2)/ : la flèche est tracée entre deux composés existants, qu'ils soient déjà définis ou qu'ils soient définis plus tard dans le schéma réactionnel : cette syntaxe peut donc se placer \emph{n'importe où} dans le code du schéma réactionnel;
+ \item \verb/(n1--@n2)/ : cette syntaxe n'est pas admise;
+\end{itemize}
+
+Voici un exemple où 3 embranchements sont créés, l'un partant de «B», l'autre de «D» et le dernier de «X». À la fin, une flèche est tracée entre 2 composés existants \og XX\fg{} et \og D\fg{} :
+\exemple[50]{Embranchements}/\schemestart
+ A\arrow(aa--bb)B\arrow(--cc)C\arrow D
+ \arrow(@bb--xx1)[-90]X\arrow[-90]Y% 1er embranchement
+ \arrow(@c4--)[-90]Z\arrow W% 2è embranchement
+ \arrow(@xx1--xx2)[-45]XX% 3è embranchement
+ \arrow(@xx2--@c4)% flèche XX à D
+\schemestop/
+
+On pourrait vouloir que «Y» et «XX» soient sur une même horizontale. Pour cela, on va tracer une liaison invisible horizontale de «Y» à «XX» et finir le schéma par une flèche entre les deux composés existants «XX» et «D» :
+\exemple[50]{Embranchements}/\schemestart
+ A\arrow(aa--bb)B\arrow(--cc)C\arrow D
+ \arrow(@bb--xx1)[-90]X\arrow[-90]Y\arrow(--xx2){0}XX
+ \arrow(@c4--)[-90]Z\arrow W
+ \arrow(@xx1--@xx2)% flèche de X à XX
+ \arrow(@xx2--@c4)% flèche XX à D
+\schemestop/
+
+\section{Sous schéma}\label{subscheme}
+On peut placer une partie d'un schéma réactionnel dans une boîte englobante unique, considérée par \CF comme un composé. La commande \falseverb{\subscheme} dont l'argument obligatoire contient le sous schéma entre accolades permet de grouper un sous schéma comme un tout et lorsque \falseverb{\subscheme} se trouve après une flèche, la commande enveloppe ce sous schéma dans un composé portant le nom «c<n+1>» :
+\exemple[50]{Sous schéma}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow
+ \subscheme{B\arrow[-90,2]C}
+ \arrow
+ D
+\schemestop/
+Bien que ça ne soit pas clair car les noms se superposent, la boîte contenant le sous schéma porte le nom «c2» et la numérotation se poursuit à l'intérieur du sous schéma «c3» pour B, «c4» pour C. Comme le premier composé du sous schéma est «B», la ligne de base du sous schéma est celle de «B». On peut le mettre en évidence en précisant les ancres :
+\exemple[50]{Sous schéma}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow(--.mid west)
+ \subscheme{B\arrow[-90,2]C}
+ \arrow
+ D
+\schemestop/
+Il faut noter que la commande \falseverb\subscheme\Verb-{<scheme>}- n'étant rien d'autre qu'un raccourci pratique pour
+\begin{center}
+\falseverb\schemestart\Verb-<scheme>-\falseverb\schemestop
+\end{center}
+Par conséquent, \falseverb\subscheme{} admet les mêmes arguments optionnels que \falseverb\schemestart.
+
+\label{chemleft}\CF fournit la paire de commandes \falseverb{\chemleft} et \falseverb{\chemright} qui permettent de placer des délimiteurs extensibles de part et d'autre d'un matériel. Ces commandes doivent être suivies de délimiteurs, tout comme on en mettrait à la suite des primitives de \TeX{} \verb-\left- et \verb-\right- :
+\begin{center}
+ \Verb/\chemleft<car1><matériel>\chemright<car2>/
+\end{center}
+où \Verb-<car1>- et \Verb-<car2>- sont «(» et «)» ou «[» et «]» ou tout autre délimiteur extensible accepté par les commandes \verb-\left- et \verb-\right-.
+\exemple{Les macros \string\chemleft\ et \string\chemright}/\chemleft\lfloor\chemfig{A-[1]B}\chemright)
+
+\chemleft\{\chemfig{A-[1,1.25]B-[6,1.25]C}\chemright|
+
+\chemleft[\chemfig{H-[1]O-[7]H}\chemright]/
+Voici le code du schéma réactionnel vu précédemment où l'on utilise \falseverb{\chemleft} et \falseverb{\chemright} :
+\exemple{Schéma réactionnel avec \string\chemleft\ et \string\chemright}/\schemestart
+ A\arrow
+ \chemleft[\subscheme{B\arrow[-90,2]C}\chemright]
+ \arrow
+ D
+\schemestop/
+\label{chemup}Dans le même ordre d'idée, les macros \falseverb{\chemup} et \falseverb{\chemdown} fonctionnent de la même façon sauf que les délimiteurs extensibles sont positionnés au dessus et au dessous du matériel :
+\begin{center}
+ \Verb/\chemup<car1><matériel>\chemdown<car2>/
+\end{center}
+Voici un exemple :
+\exemple{Les macros \string\chemup\ et \string\chemdown}/\schemestart[-90]
+X\arrow
+\chemup\{\chemfig{A-[1]B-[7]C}\chemdown\}
+\arrow Y
+\schemestop
+\qquad
+\schemestart[-90]
+X\arrow
+\chemup[\chemfig{A-[1]B-[7]C}\chemdown]
+\arrow Y
+\schemestop/
+
+Avec les styles des composés, il est possible également possible de délimiter un composé quelconque (et donc un sous schéma) par des délimiteurs extensibles (parenthèses, crochets, accolades), ceci après avoir chargé la librairie de \TIKZ \og matrix\fg{} en mettant dans le préambule du document :
+
+\hfill\verb-\usetikzlibrary{matrix}-\hfill\null
+
+Comme les commandes \falseverb{\chemleft}, \falseverb{\chemright}, \falseverb{\chemup} et \falseverb{\chemdown} sont disponibles, l'extension \CF ne procède \emph{pas} à ce chargement, il appartient donc à l'utilisateur de le faire s'il souhaite avoir accès à ces délimiteurs.
+
+Voici le sous schéma précédent délimité par des crochets :
+\exemple[50]{les délimiteurs de la librairie «matrix»}/\schemestart
+ A\arrow(--[left delimiter={[}, right delimiter={]}])
+ \subscheme{B\arrow[-90,2]C}
+ \arrow
+ D
+\schemestop/
+Les délimiteurs étant tracés en dehors de la boîte englobante, il est souhaitable ici de raccourcir un peu les flèches arrivant et partant de ces délimiteurs :
+\exemple[50]{Sous schéma}/\schemestart
+ A\arrow(--[left delimiter={[},
+ right delimiter={]}])[,,shorten >=6pt]
+ \subscheme{B\arrow[-90,2]C}
+ \arrow[,,shorten <=6pt]
+ D
+\schemestop/
+
+Les sous schémas doivent être utilisés à bon escient et peuvent parfois donner des résultats non désirés. Voici un exemple où l'on se sert d'un sous schéma pour aligner horizontalement 3 composés :
+\exemple[50]{Sous schéma}/\setchemfig{scheme debug=true}
+\schemestart
+ A
+ \arrow{0}[-90]
+ \subscheme{%
+ tagada\arrow{}
+ tsoin\arrow{}
+ fin}
+ \arrow(xx--yy){}E
+ \arrow(@c1--@c3){}
+ \arrow(@c1--@c5){}
+ \arrow(@c1--@c4){}
+\schemestop/
+On constate que le centre du sous schéma est sur la même verticale que le centre du composé "A" puisqu'on a tracé une flèche invisible avec un angle de $-90$. Par contre, la flèche entre deux composés existants \og A\fg{} et \og tsoin\fg{} n'est \emph{pas} verticale car \og tsoin\fg{} ne se trouve pas sous le centre du sous-schéma puisque "tagada" est plus large que "fin". Pour rendre cette flèche verticale, on ne peut pas s'en sortir avec un sous schéma, sauf à spécifier un angle trouvé en tâtonnant pour l'ancre d'arrivée de la flèche invisible.
+
+Il sera beaucoup plus simple de procéder sans sous-schéma et en utilisant un embranchement : tracer une flèche \emph{visible} entre \og A\fg{} et \og tsoin\fg{}, puis partir de \og tsoin\fg{} pour tracer de part et d'autre des flèches horizontales, en créant un embranchement pour les flèches vers la droite.
+\exemple[50]{Sous schéma}/\setchemfig{scheme debug=true}
+\schemestart
+ A
+ \arrow(--tsoin){->}[-90]
+ tsoin
+ \arrow{<-}[180]
+ tagada
+ \arrow(@tsoin--fin){}
+ fin
+ \arrow{}
+ E
+ \arrow(@c1--@c3){}
+ \arrow(@c1--@fin){}
+\schemestop/
+
+\section{Arguments optionnels des flèches}\label{fleche.arg.optionnel}
+À l'intérieur de l'argument entre accolades de la commande \falseverb\arrow, le nom des flèches peut être suivi d'arguments optionnels placés entre crochets. Voici ces arguments optionnels et leur signification pour les flèches définies par \CF :
+\begin{itemize}
+ \item les flèches «\verb|->|», «\verb|<-|», «\verb|<->|», «\verb|<=>|», «\verb|<<->|»,«\verb|<->>|», «\verb|-/>|» ont trois arguments optionnels :
+ \begin{itemize}
+ \item le premier contient le «label» qui sera placé au dessus de la flèche;
+ \item le second contient le «label» qui sera placé sous la flèche. Ces deux labels sont orientés selon le même angle que la flèche. On peut régler le décalage perpendiculaire entre la flèche et l'ancre des labels avec la \chevrons{clé} \CFkv{arrow label sep}{dim}\label{arrow label sep} qui vaut 3pt par défaut. Les labels contenus dans les deux arguments optionnels ne \emph{sont pas} composés en mode mathématique.
+ \item le troisième est une dimension qui correspond au décalage dans la direction perpendiculaire au sens de la flèche que l'on veut lui faire subir : cette dimension sera positive pour un décalage de la flèche (et ses éventuels labels) vers le haut et négative si l'on souhaite un décalage vers le bas.
+ \end{itemize}
+ \item la flèche «\verb|-U>|» dispose de 5 arguments optionnels :
+ \begin{itemize}
+ \item les trois premiers sont identiques à ceux des autres types de flèches;
+ \item le quatrième est le coefficient (qui vaut 0.333 par défaut) qui multiplie la longueur de la flèche pour obtenir le rayon de l'arc de cercle;
+ \item le cinquième est le demi angle partant du centre de l'arc de cercle tracé, il vaut 60 degrés par défaut.
+ \end{itemize}
+ \item la flèche invisible «\verb-0-» admet 2 arguments optionnels qui sont du même type que les deux premiers vus au dessus;
+\end{itemize}
+\exemple[50]{Arguments optionnels des flèches}/\setchemfig{scheme debug=false}
+\schemestart A\arrow{->[sur][sous]}B \schemestop
+\qquad
+\schemestart A\arrow{->[sur][sous][4pt]}B \schemestop
+\qquad
+\schemestart A\arrow{->[sur][sous][-4pt]}B \schemestop
+\medskip
+
+\schemestart A\arrow{<=>[sur][sous]}[30,1.5]B \schemestop
+\medskip
+
+\schemestart[-20]
+ A\arrow{->}B\arrow{->[][][3pt]}C\arrow{->[][][-3pt]}D
+\schemestop/
+Un problème survient lorsque les flèches sont verticales :
+\exemple[50]{Flèches verticales}/\schemestart
+ A\arrow{->[sur][sous]}[-90]B
+\schemestop/
+Par souci de lisibilité, il serait souhaitable que les labels placés au dessus et au dessous soient horizontaux. On peut choisir l'angle selon lequel les labels sont affichés, la valeur par défaut étant l'angle de la flèche. Pour spécifier un autre angle, il suffit de placer au début des arguments optionnels \Verb-*{<angle>}- :
+\exemple[55]{Choix des angles}/\setchemfig{scheme debug=true}
+\schemestart A\arrow{->[*{0}sur][*{0}sous]}[90]B\schemestop
+\qquad
+\schemestart A\arrow{->[*{0}sur][*{0}sous]}[45]B\schemestop
+\qquad
+\schemestart A\arrow{->[*{0}sur][*{0}sous]}[-45]B\schemestop
+\qquad
+\schemestart A\arrow{->[*{0}sur][*{0}sous]}[-90]B\schemestop/
+L'ancre par défaut où est attaché chaque label provoque parfois des affichages indésirables :
+\exemple[50]{Ancres}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow{->[*{0}au-dessus][*{0}au-dessous]}[45,2]B
+\schemestop/
+On peut spécifier également l'ancre d'attache pour écraser celui choisi par \CF par défaut. Il suffit d'utiliser la syntaxe suivante : \Verb-*{<angle>.<ancre>}-.
+\exemple[50]{Ancres}/\setchemfig{scheme debug=true}
+\schemestart
+ A\arrow{->[*{0.0}au-dessus][*{0.180}au-dessous]}[45,2]B
+\schemestop
+\qquad
+\schemestart
+ A\arrow{->[*{0.south east}au-dessus]%
+ [*{0.north west}au-dessous]}[45,2]B
+\schemestop/
+
+Le cas particulier à envisager est la flèche «\verb/-U>/». Si l'un des deux labels contenus dans les deux premiers arguments optionnels est présent, l'arc de cercle correspondant est tracé :
+\exemple[50]{La flèche \texttt{-U>}}/\schemestart A\arrow{-U>[123][456]}B\schemestop
+\qquad
+\schemestart A\arrow{-U>[123]}[30]B\schemestop
+\qquad
+\schemestart A\arrow{-U>[][456]}[-30]B\schemestop/
+
+Le quatrième et cinquième argument optionnel changent les dimensions de l'arc de cercle. Ils représentent respectivement le coefficient qui multiplie la longueur de la flèche pour obtenir le rayon et l'angle correspondant au demi arc de cercle (seule la valeur absolue de l'angle est prise en compte) :
+\exemple[50]{La flèche \texttt{-U>}}/\schemestart A\arrow{-U>[123][456][][0.25]}B\schemestop
+\qquad
+\schemestart A\arrow{-U>[123][456][][][90]}B\schemestop
+\qquad
+\schemestart A\arrow{-U>[123][456][][1][45]}B\schemestop/
+En mettant un rayon et un angle négatif, l'arc de cercle se situe sous la flèche :
+\exemple[50]{La flèche \texttt{-U>}}/\schemestart
+ A\arrow{-U>[123][456][][-0.333][-60]}B
+\schemestop/
+Les deux premiers arguments disposent des mêmes fonctionnalités concernant les angles d'affichage et les ancres paramétrables que ceux des autres flèches :
+\exemple[50]{La flèche \texttt{-U>}}/\schemestart
+ A\arrow{-U>[123][456]}[-90]B
+\schemestop
+\qquad
+\schemestart
+ A\arrow{-U>[*{0.180}123][*{0.180}456]}[-90]B
+\schemestop/
+
+\section{Créer ses propres flèches}\label{definearrow}
+Cette section, assez technique et demandant des connaissances sur \TIKZ, n'intéressera que les utilisateurs confirmés ayant besoin de définir leur propres flèches.
+
+La commande \falseverb{\definearrow} permet de construire des flèches personnalisées. La syntaxe de cette commande est la suivante :
+
+\hfill\Verb-\definearrow{<nombre>}{<nom flèche>}{<code>}-\hfill\null
+
+où \Verb-<nombre>- est le nombre d'arguments optionnels auxquels on fera référence dans le \Verb-<code>- avec la syntaxe habituelle \verb-#1-, \verb-#2-, etc. On ne peut pas définir de valeur par défaut pour ces arguments optionnels, et s'ils sont absents lorsque l'utilisateur utilise la macro \verb-\arrow-, ils seront vides.
+
+Avant d'aller plus loin, examinons les macros disponibles en interne lors du tracé des flèches. Comme ces macros ont le caractère «\verb-_-» dans leur nom, on ne peut y accéder qu'entre les commandes \verb|\catcode`\_=11| et \verb|\catcode`\_=8|.
+\begin{itemize}
+ \item \falseverb{\CF_arrowstartname} et \falseverb{\CF_arrowendname} contiennent les noms des composés (qui sont des nœuds pour \TIKZ) entre lesquels doit être tracée la flèche;
+ \item \falseverb{\CF_arrowstartnode} et \falseverb{\CF_arrowendnode} contiennent les noms des nœuds où seront placés les extrémités des flèches. À la suite de ces noms viennent s'ajouter, s'ils ne sont pas vides, les ancres spécifiés par l'utilisateur dans l'argument entre parenthèses de la commande \falseverb\arrow;
+ \item \falseverb{\CF_arrowcurrentstyle} et \falseverb{\CF_arrowcurrentangle} contiennent le style et l'angle de la flèche devant être tracée;
+ \item \falseverb{\CF_arrowshiftnodes}\Verb-{<dim>}- décale les nœuds «\falseverb{\CF_arrowstartnode}» et «\falseverb{\CF_arrowendnode}» de la dimension contenue dans son argument et ce, dans la direction perpendiculaire à la flèche;
+ \item \falseverb{\CF_arrowdisplaylabel}\verb/{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}/ est la plus complexe et se charge de placer les labels avec les arguments suivants :
+ \begin{itemize}
+ \item \verb-#1- et \verb-#5- sont les labels a écrire;
+ \item \verb-#2- et \verb-#6- sont des réels compris entre 0 et 1 spécifiant à quel endroit de la flèche ces labels doivent être écrits, 0 étant le début et 1 étant la fin,, le tout étant supposé que la flèche est \emph{rectiligne};
+ \item \verb-#3- et \verb-#7- sont les caractères «+» ou «-», «+» affichant le label au dessus et «-» l'affichant au dessous
+ \item \verb-#4- et \verb-#8- sont les nom des nœuds correspondant au début et à la fin de la flèche.
+ \end{itemize}
+ \item les extrémités de flèches employées sont basées sur le modèle «\verb-CF-» pour une flèche complète et avec l'option «harpoon» pour la demi flèche supérieure.
+\end{itemize}
+
+\subsection{Une première flèche}
+Pour créer un exemple, mettons que l'on veuille construire une flèche avec un disque en son milieu que l'on va appeler «\verb/-.>/». Décidons qu'elle admettra 4 arguments optionnels. Comme pour les flèches déjà définies, le premier et le second seront les labels à mettre au dessus et au dessous et le troisième sera le décalage de la flèche dans le sens perpendiculaire à sa direction. Enfin, le 4\ieme{} argument sera la taille du point que l'on prendra égale à 2pt si le 4\ieme{} argument est absent.
+
+Nous allons d'abord écrire \verb/\definearrow{4}{-.>}/ pour déclarer que la flèche aura 4 arguments optionnels et s'appellera \verb/-.>/. Tout d'abord, il faut modifier les positions des nœuds entre lesquels doit être tracée la flèche pour tenir compte du décalage contenu dans le 3\ieme{} argument. Ceci est réalisé par la macro \falseverb{\CF_arrowshiftnodes}, et il suffit donc de commencer le code de la flèche par : \falseverb{\CF_arrowshiftnodes}\verb-{#3}%-. Ensuite, il faut tracer la flèche elle même et en profiter pour poser un nœud au milieu du segment que nous appelons "\verb-mid@point-", puis tracer un cercle dont le centre est ce dernier nœud. Tout ceci est fait par le code \TIKZ suivant :
+
+{\hskip2em\verb-\edef\pt_radius{\ifx\empty#4\empty 2pt\else #4\fi}% rayon du point-\par\parskip0pt
+\hskip2em\verb/\expandafter\draw\expandafter[\CF_arrowcurrentstyle,-CF]/\par
+\hskip4em\verb/(\CF_arrowstartnode)--(\CF_arrowendnode)coordinate[midway](mid@point);/\par
+\hskip2em\verb-\filldraw(mid@point)circle(\pt_radius);%-}
+
+Il ne nous reste plus qu'à placer les labels s'ils existent avec la ligne suivante :
+
+\hskip2em\verb/\CF_arrowdisplaylabel{#1}{0.5}{+}{\CF_arrowstartnode}{#2}{0.5}{-}{\CF_arrowendnode}/
+
+Voici notre flèche achevée :
+\exemple*{Flèche «-.>»}/\catcode`\_11
+\definearrow4{-.>}{%
+ \edef\pt_radius{\ifx\empty#4\empty 2pt\else #4\fi}% rayon du point
+ \CF_arrowshiftnodes{#3}%
+ \expandafter\draw\expandafter[\CF_arrowcurrentstyle,-CF](\CF_arrowstartnode)--(\CF_arrowendnode)
+ coordinate[midway](mid@point);
+ \filldraw(mid@point)circle(\pt_radius);%
+ \CF_arrowdisplaylabel{#1}{0.5}{+}{\CF_arrowstartnode}{#2}{0.5}{-}{\CF_arrowendnode}
+ }
+\catcode`\_8
+\schemestart
+A \arrow{-.>} B \arrow{-.>[sur][sous][][1pt]} C \arrow{-.>[][sous]}[30] D \arrow{-.>[sur][][5pt][1.5pt]} E
+\schemestop/
+
+\subsection{Une flèche courbe}
+Pourquoi ne pas maintenant créer une flèche courbe ? Pour rendre les choses simples, mettons qu'elle n'aura qu'un seul argument optionnel contenant le code \TIKZ qui définira le (ou les) point de contrôle, et si cet argument est vide, une flèche du type «\verb/-CF/» sera tracée.
+
+Si l'argument \verb-#1- n'est pas vide, ce qui nous intéresse ne sont pas \falseverb{\CF_arrowstartnode} et \falseverb{\CF_arrowendnode} qui contiennent les noms des nœuds où seront placés les extrémités des flèches parce que l'emplacement des ces nœuds est déjà déterminés par les ancres qui sont calculés pour des flèches \emph{rectilignes} ! Nous allons plutôt prendre \falseverb{\CF_arrowstartname} et \falseverb{\CF_arrowendname} qui contiennent les noms des composés (qui sont des nœuds pour \TIKZ) entre lesquels doit être tracée la flèche. Voici le code \TIKZ qui va tracer la ligne courbe entre ces deux composés :
+
+{\verb/\draw[shorten <=\CF_arrowoffset,shorten >=\CF_arrowoffset,\CF_arrowcurrentstyle,-CF,/\par\parskip0pt
+\verb/(\CF_arrowstartname).. controls #1 ..(\CF_arrowendname);%/}
+
+On doit rajouter le code \TIKZ qui permet de raccourcir la flèche tracée de la valeur \falseverb{\CF_arrowoffset} définie par \falseverb{\setarrowoffset} puisqu'on ne part pas des nœuds correspondant aux flèches rectilignes \falseverb{\CF_arrowstartnode} et \falseverb{\CF_arrowendnode}. Il faudra donc rajouter au début de \falseverb{\CF_arrowcurrentstyle} le code suivant :
+\begin{center}
+ \verb/shorten <=\CF_arrowoffset, shorten >=\CF_arrowoffset/
+\end{center}
+c'est ce que font les deux lignes qui suivent le \verb-\else-.
+
+Voici donc notre flèche :
+\exemple*{Flèche courbe}/\catcode`\_11
+\definearrow1{s>}{%
+\ifx\empty#1\empty
+ \expandafter\draw\expandafter[\CF_arrowcurrentstyle,-CF](\CF_arrowstartnode)--(\CF_arrowendnode);%
+\else
+ \def\curvedarrow_style{shorten <=\CF_arrowoffset,shorten >=\CF_arrowoffset,}%
+ \CF_eaddtomacro\curvedarrow_style\CF_arrowcurrentstyle
+ \expandafter\draw\expandafter[\curvedarrow_style,-CF](\CF_arrowstartname)..controls#1..(\CF_arrowendname);
+\fi
+}
+\catcode`\_8
+\schemestart
+A\arrow{s>}
+B\arrow{s>[+(0.5cm,0.5cm)]}
+C\arrow{s>[+(45:1cm)]}
+D\arrow(.60--.120){s>[+(60:1cm) and +(-120:1cm)]}
+E\arrow{s>[+(45:1) and +(-135:1)]}
+F\arrow{s>[+(-30:1) and +(150:1)]}[,1.5]
+G\arrow(.90--.90){s>[+(60:1)and+(120:1)]}[,2]
+H
+\schemestop
+
+\schemestart
+A\arrow(.90--.180){s>[+(90:0.8) and +(180:0.8)]}[45]B
+\arrow(.0--.90){s>[+(0:0.8) and +(90:0.8)]}[-45]C
+\arrow(.-90--.0){s>[+(-90:0.8) and +(0:0.8)]}[-135]D
+\arrow(.180--.-90){s>[+(180:0.8) and +(-90:0.8)]}[135]
+\schemestop/
+
+\section{La commande \protect\texttt{\textbackslash merge}}
+La commande \falseverb{\merge} permet de tracer des flèches qui partent de plusieurs composés existants puis qui se rejoignent pour continuer le schéma réactionnel.
+
+Immédiatement après la commande \falseverb{\merge}, il faut spécifier dans quelle direction va se faire la progression. Pour cela, on utilise un des 4 caractères de direction : «\verb->-» (qui est celui par défaut si le caractère est absent), «\verb-<-», «\verb-^-» et «\verb-v-».
+
+La syntaxe devient ensuite :
+
+\hfill\verb/\merge{dir}(n1.a1)(n2.a2)(...)(ni.ai)--(n.a[s])/\hfill\null
+
+Où les noms «\verb-ni-» avant le double tiret sont ceux que des composés déjà existant que l'on veut joindre. On peut également préciser l'ancre «\verb-ai-» duquel doit partir la flèche si l'ancre par défaut ne convient pas. Comme pour la commande \falseverb\arrow, «\verb-n.a[s]-» contient le nom, l'ancre et le style du prochain composé.
+
+\exemple[50]{La commande \string\merge}/\schemestart
+ABC\arrow[30]EFGHIJ\arrow[45]KLM\arrow[60]NO
+\merge>(c1)(c2)(c3)--()suite 1
+\arrow suite 2
+\schemestop
+\bigskip
+
+\schemestart
+Foooo\arrow(foo--bar){<=>}Bar\arrow(--baz){<=>}Bz
+\merge^(foo)(bar)(baz)--()suite
+\schemestop
+\bigskip
+
+\setchemfig{scheme debug=true}
+\schemestart
+A\arrow{<->}[90]B
+\merge<(c1.120)(c2)--(foobar.45[circle,blue])CCC
+\schemestop/
+
+En ce qui concerne la géométrie de la flèche \falseverb{\merge}, celle-ci se compose de $n$ traits qui partent de chaque composé et vont jusqu'à la ligne de jonction qui leur est perpendiculaire : la longueur par défaut du plus court de ces traits est la moitié de l'espacement entre les composés défini avec \falseverb\setcompoundsep. La flèche tracée depuis la ligne de jonction jusqu'au composé suivant a également cette longueur par défaut, et elle part du milieu de la ligne de jonction. Ces 3 caractéristiques géométriques peuvent être modifiées au moyen de l'argument optionnel qui vient après le nom de composé suivant :
+
+\hfill\verb/\merge{dir}(n1.a1)(n2.a2)(...)(ni.ai)--(n.a[s])[c1,c2,c,style]/\hfill\null
+
+où :
+\begin{itemize}
+ \item la longueur de trait le plus court entre les composés à joindre et la ligne de jonction s'obtient en multipliant l'espacement entre les composés défini avec \falseverb{\setcompoundsep} par le coefficient \verb-c1-, qui vaut 0.5 par défaut;
+ \item la longueur de la flèche entre la ligne de jonction et le composé suivant s'obtient en l'espacement entre les composés par le coefficient \verb-c2-, qui vaut 0.5 par défaut;
+ \item l'endroit d'où part la flèche depuis la ligne de jonction est déterminée par le coefficient \verb-c-, sachant que s'il vaut 0, la flèche partira de la gauche de la ligne de jonction (ou du haut si la direction est \verb-v- ou \verb-^-);
+ \item le style de la flèche tracée avec \falseverb{\merge} est défini par le dernier argument \verb-style-.
+\end{itemize}
+
+\exemple*{Paramètres géométriques de \string\merge}/\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[1]C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[,1]C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[,,0.2]C\schemestop\qquad
+\schemestart A\arrow{<=>}[90]B\merge(c1)(c2)--()[,,0.9,red,thick]C\schemestop
+\bigskip
+
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[1]C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[,1]C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[,,0.2]C\schemestop\qquad
+\schemestart A\arrow{<=>}B\merge^(c1)(c2)--()[,,0.9,red,thick]C\schemestop/
+
+Enfin, il est possible d'écrire des labels au dessus ou au dessous de la flèche créée par la commande \falseverb{\merge}. Pour cela, le caractère définissant la direction admet deux arguments optionnels entre crochets, le premier contenant le label mis au dessus et le second celui mis au dessous de la flèche. La syntaxe complète de la commande \falseverb{\merge} est donc :
+
+\hfill\verb/\merge{dir}[labelup][labeldow](n1.a1)(n2.a2)(...)(ni.ai)--(n.a[s])[c1,c2,c,style]/\hfill\null
+
+Toutes les fonctionnalités déjà présentées pour les labels des flèches sont ici possibles, à savoir choisir l'angle de rotation et l'ancre avec la syntaxe \verb-*{angle.ancre}- placée juste avant le contenu du label.
+
+\exemple*{Labels de la commande \string\merge}/\schemestart
+ABC\arrow{<=>}[90]DEF\merge>[sur][sous](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}[90]DEF\merge>[*{45.south west}sur][*{45.north east}sous](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}[90]DEF\merge>[*{90}sur][*{90}sous](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop
+\bigskip
+
+\schemestart
+ABC\arrow{<=>}DEF\merge v[sur][sous](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}DEF\merge v[*{45.north west}sur][*{45.south east}sous](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop\qquad
+\schemestart
+ABC\arrow{<=>}DEF\merge v[*{0}sur][*{0}sous](c1)(c2)--()[0.25,1,0.75]GHIJ
+\schemestop/
+
+\section{Le signe +}\label{signe+}
+Entre les commandes \falseverb{\schemestart} et \falseverb{\schemestop}, on dispose de la macro «\falseverb\+» qui affiche un signe ${}+{}$. Elle admet un argument optionnel \emph{entre accolades} contenant 3 dimensions sous cette forme \Verb-{<dim1>,<dim2>,<dim3>}- où :
+\begin{itemize}
+ \item \Verb-<dim1>- et \Verb-<dim2>- sont les dimensions qui vont être insérées avant et après le signe ${}+{}$;
+ \item \Verb-<dim3>- est le décalage vertical que l'on veut faire subir au signe.'
+\end{itemize}
+
+On peut également spécifier ces dimensions pour tous les signes ${}+{}$ à l'aide des \chevrons{clés} \CFkv{+ sep left}{dim}, \CFkv{+ sep right}{dim} et \CFkv{+ vshift}{dim}. Ces dimensions ont pour valeur par défaut 0.5em pour les deux premières et 0pt pour la troisième.
+
+\exemple[50]{La commande \string\+}/\schemestart
+A\+B\+{2em,,5pt}C\+{0pt,0pt,-5pt}D\arrow E\+F
+\schemestop
+
+\setchemfig{+ sep left=1em,+ sep right=1em,+ vshift=0pt}
+\schemestart
+A\+B\+{2em,,5pt}C\+{0pt,0pt,-5pt}D\arrow E\+F
+\schemestop/
+
+Comme on le voit sur l'exemple ci-dessous, il faut comprendre que le signe ${}+{}$ inséré par la commande \falseverb{\+} fait partie du composé :
+\exemple[50]{Les composés et \string\+}/\setchemfig{scheme debug=true}
+\schemestart A\+ B\+{,,5pt}C\arrow D\+ E\schemestop/
+Il devient donc difficile de faire partir une flèche exactement sous la lettre«A» puisque cette lettre n'est pas un composé unique aux yeux de \CF. On peut donc utiliser dans ce cas la commande \falseverb{\subscheme} pour envelopper dans un composé unique la lettre «A», voire même le signe lui même et pouvoir y faire référence par la suite avec le nom qui lui est attribué :
+\exemple[50]{Sous composé et \string\+}/\setchemfig{scheme debug=true}
+\schemestart
+\subscheme{A}\+ B\arrow C
+\arrow(@c2--)[-90]E
+\schemestop
+\medskip
+
+\schemestart
+A\subscheme{\+}BCDEF \arrow G
+\arrow(@c2--)[-90]H
+\schemestop/%
+
+Il peut arriver que l'alignement du signe «+» avec les molécules qui précèdent ou qui suivent pose problème. Voici un exemple :
+\exemple{Alignement du signe +}/\setchemfig{scheme debug=true}
+\schemestart
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop/
+Ce qui se passe est que le signe «+» est sur la même ligne de base que le composé qui précède, et cette ligne de base est celle de l'atome «C» du haut. On pourrait bien sûr décaler le signe «+» mais cela ne changerait pas la position verticale de «\kern0.3333em\chemfig{\lewis{246,Br}-\lewis{026,Br}}\kern0.3333em». En fait, le signe «+» ne stoppe pas la lecture d'un composé pour \CF ce que l'on constate dans l'exemple ci-dessus où tout est englobé dans le composé «c1». On va donc être obligé de stopper le composé après la première molécule avec un \verb-\arrow{0}[,0]- qui produira une flèche invisible de longueur nulle. Pour centrer verticalement le tout, on va également préciser que l'ancre du premier composé doit être «west» (ou «180» qui est un synonyme) avec le deuxième argument optionnel de la commande \verb-\schemestart- :
+\exemple{Alignement du signe +}/\setchemfig{scheme debug=true}
+\schemestart[][west]
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow{0}[,0]\+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop/
+De cette façon, le premier composé «c1» est la première molécule et le second composé est le reste, c'est-à-dire le signe «+» et la seconde molécule. On aurait pû jouer sur les ancres ou les styles via la commande \verb-\arrow- pour placer le second composé à un autre endroit. Ici, par exemple on décale le second composé de 10pt vers le bas dans le premier cas et on fait coïncider l'ancre «south east» du premier composé avec l'ancre «south west» du second dans le deuxième cas :
+\exemple{Alignement du signe +}/\setchemfig{scheme debug=true}
+\schemestart[][west]
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow(--[yshift=-10pt]){0}[,0]\+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop
+\medskip
+
+\schemestart[][west]
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow(.south east--.south west){0}[,0]\+
+ \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+\schemestop/
+\newpage
+
+\part{Liste des commandes}
+Les commandes créées par \CF sont :
+\begin{center}
+\begin{longtable}{>\footnotesize l>\footnotesize p{9cm}}\\\hline
+\hfill\normalsize Commandes\hfill\null &\hfill\normalsize Description\hfill\null\\\hline
+\Verb-\chemfig[<paramètres>]{<code>}-&dessine la molécule dont le dessin est décrit par le \Verb-<code>-\\
+\Verb|\setchemfig{<paramètres>}|&règle les paramètres selon la syntaxe \chevrons{clé}$=$\chevrons{valeur}. En voici la liste avec les valeurs par défaut:
+\begin{itemize}
+ \item \CFkv{chemfig style} {{}}: style passé à \TIKZ
+ \item \CFkv{atom style} {{}}: style des nœuds (atomes)
+ \item \CFkv{bond join} {false}: booléen pour raccord de liaisons
+ \item \CFkv{fixed length} {false}: booléen pour liaisons de longueurs constantes
+ \item \CFkv{cram rectangle} {false}: booléen pour tracé des Liaisons de Cram sous forme de rectangle
+ \item \CFkv{cram width} {1.5ex}: dimension de la base des triangles des liaisons de Cram
+ \item \CFkv{cram dash width} {1pt}: largeur des pointillés des liaisons de Cram
+ \item \CFkv{cram dash sep} {2pt}: espacement des pointillés des liaisons de Cram
+ \item \CFkv{atom sep} {3em}: espacement entre atomes
+ \item \CFkv{bond offset} {2pt}: espacement entre l'atome et la liaison
+ \item \CFkv{double bond sep} {2pt}: espacement entre les traits des liaisons multiples
+ \item \CFkv{angle increment} {45}: incrément de l'angle des liaisons
+ \item \CFkv{node style} {{}}: style des atomes
+ \item \CFkv{bond style} {{}}: style des liaisons
+ \item \CFkv{lewis | width} {0.3ex}: largeur du rectangle pour la décoration | de Lewis
+ \item \CFkv{lewis sep} {0.4ex}: espacement entre l'atome et les décorations de Lewis
+ \item \CFkv{lewis length} {1.5ex}: longueur des décorations de Lewis
+ \item \CFkv{lewis style} {{}}: style des décorations de Lewis
+ \item \CFkv{lewis dist} {0.3em}: espacement entre les disques pour la décoration «\string:»
+ \item \CFkv{lewis radius} {0.15ex}: rayon des disques des décorations de Lewis
+ \item \CFkv{lewis diag coeff} {1}: coefficient multiplicatif de la distance dans les directions impaires
+ \item \CFkv{cycle radius coeff} {0.75}: coefficient du cercle ou de l'arc de cercle tracé dans les cycles
+ \item \CFkv{stack sep} {1.5pt}: espacement vertical pour les arguments des macros \verb-\chemabove- et \verb-\chembelow-
+ \item \CFkv{compound style} {{}}: style des composés
+ \item \CFkv{compound sep} {5em}: espacement entre 2 composés
+ \item \CFkv{arrow offset} {4pt}: espacement entre un composé et la flèche
+ \item \CFkv{arrow angle} {0}: angle par défaut des flèches de réaction
+ \item \CFkv{arrow coeff} {1}: coefficient de longueur des flèches
+ \item \CFkv{arrow style} {{}}: style des flèches
+ \item \CFkv{arrow double sep} {2pt}: espacement entre les flèches doubles
+ \item \CFkv{arrow double coeff} {0.6}: coefficient de réduction de la petite flèche pour les flèches doubles
+ \item \CFkv{arrow double harpoon}{true}: booléen pour le tracé des doubles flèches sous forme de «harpon»
+ \item \CFkv{arrow label sep} {3pt}: espacement entre la flèche et son texte
+ \item \CFkv{arrow head} {-CF}: style des pointes de flèches
+ \item \CFkv{+ sep left} {0.5em}: espacement avant le signe $+$
+ \item \CFkv{+ sep right} {0.5em}: espacement après le signe $+$
+ \item \CFkv{+ vshift} {0pt}: décalage vertical du signe $+$
+\end{itemize}
+\\
+\verb|\resetchemfig|&Restaure les paramètres à leurs valeurs par défaut\\
+\falseverb\printatom & cette macro affiche les atomes dans les molécules. Elle peut être redéfinie pour personnaliser l'affichage, voir page~\pageref{perso.affichage}\\
+\falseverb\hflipnext&la prochaine molécule sera inversée horizontalement\\
+\falseverb\vflipnext&la prochaine molécule sera inversée verticalement\\
+\Verb-\definesubmol{<nom>}<n>[<code1>]{<code2>}- & créé un alias \Verb-!<nom>- que l'on peut placer dans le code des molécules à dessiner qui remplace le \Verb-<code1>- ou le \Verb-<code2>- selon l'inclinaison de la dernière liaison. Voir page~\pageref{definesubmol}\\
+\falseverb\chemskipalign & Ignore le groupe d'atomes en cours pour le mécanisme d'alignement vertical. Voir page~\pageref{chemskipalign}.\\
+\Verb-\redefinesubmol{<nom>}<n>[<code1>]{<code2>}-& remplace l'alias déjà existant \Verb-!<nom>- par le nouveau \Verb-<code>-. Voir page~\pageref{redefinesubmol}\\[2ex]\hline
+&\\
+\Verb-\lewis[<paramètres>]{<codes>,<atome>}-& affiche l'\Verb-<atome>- et positionne les décorations de Lewis selon ce qui est spécifié dans le \Verb-<code>-. Les décorations dessinées ne modifient pas la boîte englobante de l'\Verb-<atome>-. Voir page~\pageref{lewis}\\
+\Verb-\Lewis[<paramètres>]{<codes>,<atome>}-& affiche l'\Verb-<atome>- et positionne les décorations de Lewis selon ce qui est spécifié dans le \Verb-<code>-. Voir page~\pageref{Lewis}\\
+\Verb-\chemmove[<options tikz>]<code tikz>-& Ouvre un environnement \verb-tikzpicture- en y ajoutant à celles qui existent déjà les \Verb-<options tikz>-, et relie avec le \Verb-<code tikz>- les nœuds posés dans les molécules à l'aide du caractère «\verb-@-». Voir page~\pageref{mecanismes-reactionnels}.\\[2ex]\hline
+&\\
+\Verb-\chemabove[<dim>]{<txt1>}{txt2}- & écrit le \Verb-<txt1>- et positionne le \Verb-<txt2>- au dessus en laissant \Verb-<dim>- d'espacement vertical. Cette commande ne change pas la boîte englobante de \Verb-<txt1>-. Voir page~\pageref{chemabove}\\
+\Verb-\chembelow[<dim>]{<txt1>}{txt2}- & écrit le \Verb-{txt1}- et positionne le \Verb-<txt2>- au dessous en laissant \Verb-<dim>- d'espacement vertical. Cette commande ne change pas la boîte englobante de \Verb-<txt1>-. Voir page~\pageref{chemabove}\\
+\Verb-\Chemabove[<dim>]{<txt1>}{txt2}- & écrit le \Verb-<txt1>- et positionne le \Verb-<txt2>- au dessus en laissant \Verb-<dim>- d'espacement vertical. Voir page~\pageref{chemabove}\\
+\Verb-\Chembelow[<dim>]{<txt1>}{txt2}- & écrit le \Verb-{txt1}- et positionne le \Verb-<txt2>- au dessous en laissant \Verb-<dim>- d'espacement vertical. Voir page~\pageref{chembelow}\\
+\Verb-\chemname[<dim>]{<molécule>}{<nom>}- & Affiche le \Verb-<nom>- sous la \Verb-<molécule>-. Voir page~\pageref{chemname}\\
+\falseverb\chemnameinit & initialise la plus grande profondeur des molécules rencontrées pour avoir un alignement correct de leurs noms. Voir page~\pageref{chemnameinit}\\[2ex]\hline
+&\\
+\falseverb\schemestart\dots\falseverb\schemestop& balises entre lesquelles un schéma réactionnel est tracé. Voir page~\pageref{schemestart}.\\
+\falseverb\arrow& trace une flèche dans un schéma réactionnel (la commande n'est définie que dans un schéma réactionnel). Voir page~\pageref{arrow} et suivantes.\\
+\falseverb\+ & affiche un signe $+$ dans un schéma réactionnel (la commande n'est définie que dans un schéma réactionnel). Voir page~\pageref{signe+}.\\
+\Verb-\subscheme{<code>}- & trace un sous schéma réactionnel (la commande n'est définie que dans un schéma réactionnel). Voir page~\pageref{subscheme}.\\
+\falseverb\definearrow & définit une flèche. Voir page~\pageref{definearrow}.\\
+\Verb-\chemleft<car1><matériel>-\falseverb\chemright\Verb-<car1>-& trace des délimiteurs extensibles définis par \Verb-<car1>- et \Verb-<car2>- à gauche et à droite du \Verb-<matériel>-, voir page~\pageref{chemleft}.\\
+\Verb-\chemup<car1><matériel>-\falseverb\chemdown\Verb-<car1>-& trace des délimiteurs extensibles définis par \Verb-<car1>- et \Verb-<car2>- au dessus et au dessous du \Verb-<matériel>-, voir page~\pageref{chemup}.\\
+\Verb|\polymerdelim[<paramètres]{<nœud1>}{nœud2>}|& trace des délimiteurs aux nœuds spécifiés, voir page~\pageref{polymerdelim}\\\hline
+\end{longtable}
+\end{center}
+\newpage
+
+\part{Galerie}
+Ce manuel s'achève avec des dessins de molécules plus ou moins complexes.
+
+L'utilisateur curieux pourra s'intéresser au \Verb-<code>- de chaque molécule, bien que celui-ci devienne parfois rebutant lorsqu'elles deviennent complexes. En effet, au delà d'un certain niveau de complexité, bien qu'il soit est assez facile d'écrire un \Verb-<code>- pour dessiner une molécule, il est assez ardu de relire ce \Verb-<code>- pour l'analyser a posteriori. On atteint rapidement les limites de la lisibilité immédiate du code d'un dessin complexe.
+
+Quoi qu'il en soit, j'espère que cette extension aidera tous les utilisateurs de \LaTeX{} qui souhaitent dessiner des molécules chimiques. Bien que \CF ait été testé de façon approfondie et que le numéro de version soit supérieur à 1.0, j'espère que vous serez indulgent quant aux bugs rencontrés. Un \href{mailto:unbonpetit@netc.fr}{\texttt{\textbf{email}}} pour me signaler tout dysfonctionnement ou toute proposition d'amélioration sera bienvenu.\nobreak
+
+\hfill Christian \textsc{Tellechea}
+\bigskip
+
+\begin{center}
+\parskip0pt
+$\star$\par
+$\star\quad\star$
+\end{center}
+\bigskip
+
+\exemple*{2-methylpentane}/\chemfig{[7]H_3C-CH(-[6]CH_3)-[1]CH_2-CH_2-[1]CH_3}/
+
+\exemple*{3-éthyl-2-méthylhexane}/\chemfig{H_3C-[7]CH(-[6]CH_3)-[1]CH(-[7]C_3H_7)-[2]CH_2-[3]H_3C}/
+
+\exemple*{Stéarine, formule semi développée}/\definesubmol{@}{([0,2]-O-[0,1]C(=[2,1]O)-C_{17}H_{33})}
+\chemfig{[2,2]CH_2!@-CH_{\phantom 2}!@-CH_2!@}/
+
+\exemple*{Stéarine, formule topologique}/\definesubmol{x}{-[:+30,.6]-[:-30,.6]}
+\definesubmol{y}{-O-(=[2,.6]O)-!x!x!x!x!x!x!x!x}
+\chemfig{[2]([0]!y)-[,1.5]([0]!y)-[,1.5]([0]!y)}/
+
+\exemple*{2-méthylpropanoate de méthyl}/\chemfig{H_3C-CH_2(-[2]CH_3)-C(=[1]O)-[7]O-CH_3}/
+
+\exemple*{La vanilline}/\chemfig{HC*6(-C(-OH)=C(-O-[::-60]CH_3)-CH=C(-[,,,2]HC=[::-60]O)-HC=[,,2])} \quad ou \quad
+\chemfig{*6(-(-OH)=(-OCH_3)-=(-=[::-60]O)-=)}/
+
+\exemple*{La caféine}/\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-=)--(=O)-N(-H_3C)-)}/
+
+\exemple*{L'aspirine}/\chemfig{*6(-=-(-O-[::-60](=[::-60]O)-[::+60])=(-(=[::+60])-[::-60]OH)-=)}/
+
+\exemple*{Anhydride phtalique}/\chemfig{*6(=*5(-(=O)-O-(=O)-)-=-=-)}/
+
+\exemple*{Camphre}/\chemfig{*6(-(<:[::120](-[::-100,0.7])(-[::100,0.7]))--(=O)-(-)(<:[::120])--)}
+\quad ou \quad
+\setchemfig{cram width=3pt}
+\chemfig{<[:10](>[:85,1.8]?(-[:160,0.6])-[:20,0.6])
+>[:-10]-[:60](=[:30,0.6]O)-[:170]?(-[:30,0.6])-[:190]-[:240]}/
+
+\exemple*{Triphenylméthane}/\chemfig{*6(-=-*6(-(-*6(=-=-=-))-*6(=-=-=-))=-=)}
+\quad ou \quad
+\definesubmol{@}{*6(=-=-=-)}
+\chemfig{(-[:-30]!@)(-[:90]!@)(-[:210]!@)}/
+
+\exemple*{Amygdaline}/\setchemfig{cram width=2pt}
+\definesubmol{c1}{-[:200]-[:120]O-[:190]}
+\definesubmol{c2}{-[:170](-[:200,0.7]HO)<[:300](-[:170,0.6]HO)
+-[:10,,,,line width=2pt](-[:-40,0.6]OH)>[:-10]}
+\definesubmol{csub}{-[:155,0.65]-[:90,0.65]}
+\chemfig{O(!{c1}(!{csub}O(!{c1}(!{csub}OH)!{c2}))!{c2})-[:-30](-[:-90]CN)-[:30]*6(=-=-=-)}/
+
+\exemple*{Adénosine triphosphate}/\setchemfig{cram width=3pt}
+\definesubmol{a}{-P(=[::-90,0.75]O)(-[::90,0.75]HO)-}
+\chemfig{[:-54]*5((--[::60]O([::-60]!aO([::-60]!aO([::60]!aHO))))<(-OH)
+-[,,,,line width=2pt](-OH)>(-N*5(-=N-*6(-(-NH_2)=N-=N-)=_-))-O-)}/
+
+\exemple*{Viagra}/\chemfig{N*6((-H_3C)---N(-S(=[::+120]O)(=[::+0]O)-[::-60]*6(-=-(-O-[::-60]-[::+60]CH_3)
+=(-*6(=N-*5(-(--[::-60]-[::+60]CH_3)=N-N(-CH_3)-=)--(=O)-N(-H)-))-=))---)}/
+
+\exemple*{Ester de cholestérol}/\chemfig{[:30]R-(=[::+60]O)-[::-60]O-*6(--*6(=--*6(-*5(---(-(-[::+60]Me)
+-[::-60]-[::-60]-[::+60]-[::-60](-[::-60]Me)-[::+60]Me)-)-(-[::+0]Me)---)--)-(-[::+0]Me)---)}/
+
+\exemple*{Porphyrine}/\chemfig{?=[::+72]*5(-N=(-=[::-72]*5(-[,,,2]HN-[,,2](=-[::-36]*5(=N-(=-[::-72]*5(-NH-[,,1]?=-=))
+-=-))-=-))-=-)}/
+
+\exemple*{Manganese 5,10,15,20-tétra(N-ethyl-3-carbazolyl) porphyrine}/\definesubmol{A}{*6(=-*5(-*6(-=-=-)--N(--[::-60])-)=-=-)}
+\chemfig{([::+180]-!A)=[::+72]*5(-N=(-(-[::+54]!A)=[::-72]*5(-N(-[::-33,1.5,,,draw=none]Mn)
+-(=(-[::+72]!A)-[::-36]*5(=N-(=(-[::+54]!A)-[::-72]*5(-N-(-)=-=))-=-))-=-))-=-)}/
+
+\exemple*{Pénicilline}/\chemfig{[:-90]HN(-[::-45](-[::-45]R)=[::+45]O)>[::+45]*4(-(=O)-N*5(-(<:(=[::-60]O)
+-[::+60]OH)-(<[::+0])(<:[::-108])-S>)--)}/
+
+\exemple*{LSD}/\chemfig{[:150]?*6(=*6(--*6(-N(-CH_3)--(<(=[::+60]O)-[::-60]N(-[::+60]-[::-60])
+-[::-60]-[::+60])-=)([::-120]<H)---)-*6(-=-=-(-[::-30,1.155]\chembelow{N}{H}?)=))}/
+
+\exemple*{Strychnine}/\chemfig{*6(=-*6(-N*6(-(=O)--([::-120]<:H)*7(-O--=?[0]([::-25.714]-[,2]?[1]))
+-*6(-?[0,{>}]--(<N?[1]?[2])-(<[::-90]-[::-60]?[2]))(<:[::+0]H)-([::+120]<H))--?)=?-=-)}/
+
+\exemple*{Codéïne}/\chemfig{[:-30]**6(-(-OH)-?-*6(-(-[3]-[2,2]-[0,.5])*6(-(<:[:-150,1.155]O?)
+-(<:OH)-=-)-(<:[1]H)-(-[2]NCH_3)--)---)}/
+
+\exemple*{Colorant(rouge)}/\chemfig{**6(--*6(-(-NO_2)=-(-\lewis{26,O}-[0]H)=(-\lewis{4,N}=[0]\lewis{2,N}-[0]Ar)-)----)}/
+
+\exemple*{Menthone}/\chemfig{CH_3-?(-[2]H)(-[::-30,2]-[::+60](=[1]\lewis{20,O})
+-[::-150,1.5](-[:20]CH(-[1]CH_3)(-[7]CH_3))(-[6]H)-[::-90,2]-[::+60]?)}/
+
+\exemple*{Synthèse de Fischer de l'indole}/\schemestart
+ \chemfig{*6(=-*6(-\chembelow{N}{H}-NH_2)=-=-)}
+ \+
+ \chemfig{(=[:-150]O)(-[:-30]R_2)-[2]-[:150]R_1}
+ \arrow(.mid east--.mid west){->[\chemfig{H^+}]}
+ \chemfig{*6(-=*5(-\chembelow{N}{H}-(-R_2)=(-R_1)-)-=-=)}
+\schemestop/
+
+\exemple*{Mécanisme réactionnel : groupement carbonyle}/
+\schemestart
+ \chemfig{C([3]-)([5]-)=[@{db,.5}]@{atoo}\lewis{06,O}}
+ \arrow(.mid east--.mid west){<->}
+ \chemfig{\chemabove{C}{\scriptstyle\oplus}([3]-)([5]-)-\chemabove
+ {\lewis{026,O}}{\hspace{5mm}\scriptstyle\ominus}}
+\schemestop
+\chemmove{\draw[shorten <=2pt, shorten >=2pt](db) ..controls +(up:5mm) and +(up:5mm)..(atoo);}/
+
+\exemple*{Mécanismes réactionnels : dérivés nitrés}/\schemestart
+ \chemfig{R-\chembelow{N}{\hspace{-5mm}\scriptstyle\oplus}([1]=[@{db}]@{atoo1}O)([7]-[@{sb}]@{atoo2}
+ \chemabove{\lewis{157,O}}{\hspace{7mm}\scriptstyle\ominus})}
+ \arrow(.mid east--.mid west){<->}
+ \chemfig{R-\chemabove{N}{\hspace{-5mm}\scriptstyle\oplus}([1]-\chemabove{O}{\scriptstyle\ominus})([7]=O)}
+\schemestop
+\chemmove{
+ \draw[shorten <=2pt, shorten >=2pt](db) ..controls +(120:5mm) and +(120:5mm)..(atoo1);
+ \draw[shorten <=3pt, shorten >=2pt](atoo2) ..controls +(225:10mm) and +(225:10mm)..(sb);
+}/
+
+\exemple*{Addition nucléophile. Amines primaires}/\setchemfig{atom sep=2.5em,compound sep=5em}
+\schemestart
+ \chemfig{R-@{aton}\lewis{2,N}H_2}
+ \+
+ \chemfig{@{atoc}C([3]-CH_3)([5]-CH_3)=[@{atoo1}]O}
+ \chemfig{@{atoo2}\chemabove{H}{\scriptstyle\oplus}}
+ \chemmove[-stealth,shorten <=3pt,dash pattern= on 1pt off 1pt,thin]{
+ \draw[shorten >=2pt](aton) ..controls +(up:10mm) and +(left:5mm)..(atoc);
+ \draw[shorten >=8pt](atoo1) ..controls +(up:10mm) and +(north west:10mm)..(atoo2);}
+ \arrow{<=>[\tiny addition]}
+ \chemfig{R-@{aton}\chembelow{N}{\scriptstyle\oplus}H([2]-[@{sb}]H)-C(-[2]CH_3)(-[6]CH_3)-OH}
+\schemestop
+\chemmove{
+ \draw[-stealth,dash pattern= on 1pt off 1pt,shorten <=3pt, shorten >=2pt]
+ (sb)..controls +(left:5mm) and +(135:2mm)..(aton);}
+\par
+\schemestart
+ \arrow{<=>}
+ \chemfig{R-@{aton}\lewis{2,N}([6]-[@{sbh}]H)-[@{sb}]C(-[2]CH_3)(-[6]CH_3)-[@{sbo}]@{atoo}
+ \chemabove{O}{\scriptstyle\oplus}(-[1]H)(-[7]H)}
+ \chemmove[-stealth,shorten <=3pt,shorten >=2pt,dash pattern= on 1pt off 1pt,thin]{
+ \draw(aton) ..controls +(up:5mm) and +(up:5mm)..(sb);
+ \draw(sbh) ..controls +(left:5mm) and +(south west:5mm)..(aton);
+ \draw(sbo) ..controls +(up:5mm) and +(north west:5mm)..(atoo);}
+ \arrow{<=>[\tiny élimination]}\chemfig{R-N=C(-[1]CH_3)(-[7]CH_3)}
+ \+
+ \chemfig{H_3\chemabove{O}{\scriptstyle\oplus}}
+\schemestop/
+
+\exemple*{Schéma réactionnel}/\setchemfig{atom sep=2em}
+\schemestart[-90]
+ \chemfig{**6(---(-NH _2)---)}\arrow{0}\chemfig{HNO_2}
+ \merge(c1)(c2)--()
+ \chemfig{**6(---(-N_2|{}^\oplus)---)}\arrow{0}\chemfig{**6(---(-NH _2)---)}
+ \merge(c3)(c4)--()
+ \chemfig{**6(---(-N=[::-30]N-[::-30]**6(---(-NH_2)---))---)}
+\schemestop/
+
+\exemple*{Réaction d'addition}/\setchemfig{atom sep=2.5em}
+\schemestart
+ \chemfig{*6(=-(-)(=[2]O))}
+ \arrow{->[\+\chemfig{H^\oplus}]}
+ \chemleft[\subscheme[90]{%
+ \chemfig{*6((-[2,0.33,,,draw=none]\scriptstyle\oplus)-=(-)-OH)}
+ \arrow{<->}
+ \chemfig{*6(=-(-)(-[6,0.33,,,draw=none]\scriptstyle\oplus)-OH)}}\chemright]
+ \arrow(@c3--)\chemfig{*6((-[2]R)-=(-)-OH)}
+ \arrow(@c4--)\chemfig{*6(=-(-)(-[6]R)-OH)}
+\schemestop/
+
+\exemple*{Substitution aromatique éléctrophile}Z\setchemfig{atom sep=1.5em}%
+\definesubmol{+}{-[,-0.4,,,draw=none]\oplus}%
+\schemestart
+ \arrow{0}[,0]
+ \chemleft[\subscheme{\chemfig{*6(=-=-(-[:120]Br)(-[:60]H)-(!+)-)}
+ \arrow{<->}
+ \chemfig{*6(-(!+)-=-(-[:120]Br)(-[:60]H)-=)}
+ \arrow{<->}
+ \chemfig{*6(-=-(!+)-(-[:120]Br)(-[:60]H)-=)}}\chemright]
+ \arrow(@c2--){<-[*0\chemfig{{-}AlBr_4|^\ominus}][*0\chemfig{Br_2/Al_2Br_3}]}[90,1.5]
+ \chemname{\chemfig{*6(-=-=-=-)}}{Benzène 1}
+ \arrow(@c4--){->[*0\chemfig{{-}H^\oplus}]}[90,1.5]
+ \chemname{\chemfig{*6(-=-=(-Br)-=-)}}{Bromobenzène 2}
+ \arrow(@c5.mid east--@c6.mid west)
+\schemestop
+\chemnameinit{}Z
+
+\exemple*{Mécanismes réactionnels de la chloration}/\scriptsize\setchemfig{bond offset=1pt,atom sep=2em,compound sep=4em}
+\schemestart
+ \chemfig{Cl-[4]@{a0}(=[@{a1}:120]@{a2}O)-[:-120](=[:-60]O)-[4]Cl}\+\chemfig{*6(-=-=(-@{oh1}OH)-=)}\arrow
+ \chemfig{*6((-O-[:150](-[@{o0}:150]@{o1}\lewis{6.,O})(-[@{cl0}:60]@{cl1}Cl)-[:240](-[4]Cl)=[6]O)=-=-=-)}
+ \arrow\chemfig{*6((-O-[:150](=[2]O)-[:-150](=[6]O)-[:150]Cl)=-=-=-)}\+\chemfig{HCl}
+ \arrow(@c1--){0}[-90,0.5]
+ \chemfig{*6(-=*6(-O-*6(-@{o2}(=[@{o3}]@{o4}O)-Cl)=)-=-=)}\+\chemfig{*6(-=-=(-@{oh2}OH)-=)}\arrow
+ \chemfig{*6(-=*6(-O-(-(-[@{cl2}:60]@{cl3}Cl)(-[@{o5}:-120]@{o6}\lewis{6.,O})-O-[::-40]*6(=-=-=-))=)-=-=)}
+ \kern-3em \arrow\chemfig{[:30]*6(=-(-O-[:-60](=O)-[:-120](=[4]O)-[:-60]O-*6(=-=-=-))=-=-)}
+ \kern-3em \+\chemfig{HCl}
+\schemestop
+\chemmove[line width=0.2pt,-stealth,dash pattern = on 2pt off 1pt]{
+ \draw[shorten <=2pt](a1)..controls+(200:5mm)and+(200:5mm)..(a2);
+ \draw[shorten >=2pt](oh1.west)..controls+(180:15mm)and+(60:5mm)..(a0);
+ \draw[shorten <=6pt,shorten >=2pt](o1)..controls+(270:5mm)and+(270:5mm)..(o0);
+ \draw[shorten <=2pt](cl0)..controls+(150:5mm)and+(150:5mm)..(cl1.150);
+ \draw[shorten <=2pt](o3)..controls +(30:3mm) and +(30:5mm)..(o4.east);
+ \draw[shorten >=2pt](oh2.135).. controls +(150:10mm) and +(90:10mm).. (o2);
+ \draw[shorten >=2pt,shorten <=5pt]([xshift=-1.5mm]o6.315)..controls +(315:5mm) and +(315:5mm)..(o5);
+ \draw[shorten <=2pt](cl2)..controls +(135:5mm) and +(135:5mm)..(cl3.north west);}/
+
+\exemple*{Cannizzaro}/\schemestart
+ \chemfig{[:-30]*6(=-=(-@{atoc}C([6]=[@{db}]@{atoo1}O)-H)-=-)}
+ \arrow(start.mid east--.mid west){->[\chemfig{@{atoo2}\chemabove{O}{\scriptstyle\ominus}}H]}
+ \chemmove[-stealth,shorten >=2pt,dash pattern=on 1pt off 1pt,thin]{
+ \draw[shorten <=8pt](atoo2) ..controls +(up:10mm) and +(up:10mm)..(atoc);
+ \draw[shorten <=2pt](db) ..controls +(left:5mm) and +(west:5mm)..(atoo1);}
+ \chemfig{[:-30]*6(=-=(-C([6]-[@{sb1}]@{atoo1}\chembelow{O}{\scriptstyle\ominus})([2]-OH)-[@{sb2}]H)-=-)}
+ \hspace{1cm}
+ \chemfig{[:-30]*6((-@{atoc}C([6]=[@{db}]@{atoo2}O)-[2]H)-=-=-=)}
+ \chemmove[-stealth,shorten <=2pt,shorten >=2pt,dash pattern=on 1pt off 1pt,thin]{
+ \draw([yshift=-4pt]atoo1.270) ..controls +(0:5mm) and +(right:10mm)..(sb1);
+ \draw(sb2) ..controls +(up:10mm) and +(north west:10mm)..(atoc);
+ \draw(db) ..controls +(right:5mm) and +(east:5mm)..(atoo2);}
+ \arrow(@start.base west--){0}[-75,2]
+ {}
+ \arrow
+ \chemfig{[:-30]*6(=-=(-C([1]-@{atoo2}O-[@{sb}0]@{atoh}H)([6]=O))-=-)}
+ \arrow{0}
+ \chemfig{[:-30]*6((-C(-[5]H)(-[7]H)-[2]@{atoo1}\chemabove{O}{\scriptstyle\ominus})-=-=-=)}
+ \chemmove[-stealth,shorten >=2pt,dash pattern=on 1pt off 1pt,thin]{
+ \draw[shorten <=7pt](atoo1.90) ..controls +(+90:8mm) and +(up:10mm)..(atoh);
+ \draw[shorten <=2pt](sb) ..controls +(up:5mm) and +(up:5mm)..(atoo2);}
+\schemestop/
+
+\begingroup
+\catcode`;=12
+\exemple*{Réarrangement de Beckmann}/\setchemfig{bond offset=1pt,atom sep=2.5em,compound sep=5em,arrow offset=6pt}
+\schemestart
+ \chemfig{(-[:-150]R')(-[:-30]R)=[2]N-[:30]OH}
+ \arrow{<=>[\chemfig{H^\oplus}]}
+ \chemfig{(-[@{a0}:-150]R')(-[:-30]R)=[2]@{a1}N-[@{b0}:30]@{b1}\chemabove{O}{\scriptstyle\oplus}H_2}
+ \chemmove[red,-stealth,red,shorten <=2pt]{
+ \draw(a0)..controls +(135:2mm) and +(215:4mm).. (a1);
+ \draw(b0)..controls +(120:2mm) and +(180:3mm).. ([yshift=7pt]b1.180);}
+ \arrow{<=>[\chemfig{{-}H_2O}]}[,1.1]
+ \chemleft[\subscheme[90]{%
+ \chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
+ \arrow{<->}[,0.75]
+ \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemmove[red,-stealth,red,shorten <=3pt]{
+ \draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
+ \arrow(@c1--){0}[-90,0.333]
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-\chemabove{O}{\scriptstyle\oplus} H_2)}
+ \arrow{<=>[\chemfig{{-}H^\oplus}]}
+ \chemfig{*6(R\rlap{$'$}-N=(-R)-OH)}
+ \arrow
+ \chemfig{*6(R\rlap{$'$}-\chembelow{N}{H}-(-R)(=[2]O))}
+\schemestop/
+\endgroup
+
+\exemple*{Schéma réactionnel}/\setchemfig{atom sep=1.5em,compound sep=4em}
+\schemestart
+ \chemfig{-[::30]=_[::-60](-[:: -60])-[::60]}
+ \arrow{->[\chemfig{HCl}]}
+ \chemfig{-[::30]-[::-60](-[::120]Cl)(-[::-60])-[::60]}\+\chemfig{-[::30](-[::60]Cl)-[::-60](-[::-60])-[::60]}
+ \arrow(@c1--.north west){->[\chemfig{H_2O}]}[-45,1.7]
+ \chemfig{-[::30]-[::-60](-[::120]OH)(-[::-60])-[::60]}\+\chemfig{-[::30](-[::60]OH)-[::-60](-[::-60])-[::60]}
+\schemestop/
+
+\exemple*{Estérification de l'acide formique}Z\tikzset{obrace/.style={left delimiter={[},inner sep=3pt},
+ cbrace/.style={right delimiter={]},inner sep=3pt},
+ braces/.style={left delimiter={[},right delimiter={]},inner sep=3pt}}
+\setchemfig{atom sep=2em}
+\schemestart
+ \chemfig{H-C(=[:60]O)-[:-60]O-H}
+ \arrow(--M1[obrace]){-U>[\scriptsize\chemfig{H_2SO_4^{}}][\scriptsize\chemfig{HSO_4^\ominus}][][.25]}%
+ [,1.5,shorten >=6pt]
+ \chemfig{H-@{a2}C(-[:60]O-H)(-[:30,.5,,,draw=none]{\scriptstyle\oplus})-[:-60]O-H}
+ \arrow(--[cbrace]){<->}
+ \chemfig{H-C(=[:60]\chemabove{O}{\scriptstyle\oplus}-H)-[:-60]O-H}
+ \arrow(@M1--){<=>[*{0}\scriptsize\chemfig{H-[:120]@{a1}O-[:60]CH_3}][*{0}\tiny addition]}[-90,1.33]
+ \chemfig{H-C(-[2]O-[:30]H)(-\chemabove{O}{\scriptstyle\oplus}(-[:60]CH_3)-[:-60]H)-[6]O-[:-30]H}
+ \arrow{<=>[\tiny protolysis]}[180]
+ \chemfig{H-C(-[2]O-[:30]H)(-O-CH_3)-[@{b1}6]@{a3}\chemabove{O}{\kern-4mm\scriptstyle\oplus}(-[:-150]H)-[:-30]H}
+ \arrow(--[obrace]){<=>[*{0}\scriptsize\chemfig{{-}H_2O}][*{0}\tiny elimination]}[-90,,shorten >=6pt]
+ \chemfig{H-C(-[:60]O-H)(-[,.5,,,draw=none]{\scriptstyle\oplus})-[:-60]O-CH_3}
+ \arrow(--[cbrace]){<->}
+ \chemfig{H-C(=[:60]\chemabove{O}{\scriptstyle\oplus}-H)-[:-60]O-CH_3}
+ \arrow{-U>[\scriptsize\chemfig{HSO_4^\ominus}][\scriptsize\chemfig{H_2SO_4^{}}][][.25]}[,1.5]
+ \chemfig{H-C(=[:60]O)-[:-60]O-CH_3}
+ \arrow(@M1--[yshift=-5pt]){0}[180,.5]{\tiny protolysis}
+ \chemmove[red,shorten <=3pt,shorten >=1pt]{
+ \draw(a1)..controls +(0:1.5cm)and+(0:3cm).. (a2);
+ \draw(b1)..controls +(0:5mm)and+(20:5mm)..(a3);}
+\schemestop Z
+
+\exemple*{Addition électrophile d'halogène sur l'oléfine}/\schemestart
+ \subscheme{%
+ \chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
+ \arrow{0}[,0]\+\chemfig{\lewis{246,Br}-\lewis{026,Br}}}
+ \arrow(@c1--olefin){<=>[*{0}rapide]}[-90]
+ \chemfig{>[:-20]C(<[:40])=[@{db}6]C(<[:-130])<[:-20]}
+ \arrow(--bromonium){0}[-90]
+ \chemname{\chemfig{C*3((<)(<:[:-155])-\raise1.5pt\llap{$\scriptstyle\oplus$}\lewis{17,Br}-C(<:)(<[:155])-)}}
+ {bromonium ion}
+ \arrow(--carbeniumA){<<->}[,1.5]
+ \chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<:[:-150])(<[:-100])-[:-30]
+ \lewis{157,Br}}}{Xarbenium ion}
+ \arrow(@bromonium--carbeniumB){<<->}[180,1.5]
+ \chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<[:-150])
+ (<:[:-100])-[:-30]\lewis{137,Br}}}{carbenium ion}
+ \arrow(@olefin--){0}[,.25]
+ \chemfig{@{Br1}\chemabove[3pt]{\lewis{246,Br}}{\scriptstyle\delta\oplus}-[@{b2}]@{Br2}
+ \chemabove[3pt]{\lewis{026,Br}}{\scriptstyle\delta\ominus}}
+ \arrow(@olefin--[left]){0}[180,0]
+ $\pi$ complexe
+ \arrow(@carbeniumA--@olefin){<=>[lent, \chemfig{{-}Br^\ominus}]}
+ \arrow(@carbeniumB--@olefin){<=>[lent, \chemfig{{-}Br^\ominus}]}
+ \chemmove[-stealth,red,shorten <=3pt,shorten >=2pt]{
+ \draw(db) .. controls +(20:5mm) and +(135:5mm) .. (Br1);
+ \draw(b2) .. controls +(-90:5mm) and +(-120:5mm) .. (Br2);}
+\schemestop
+\chemnameinit{}/
+
+\exemple*{Sulfonation de la naphtalène}/\definesubmol\cycleoplus{-[,0.25,,,draw=none]\oplus}
+\definesubmol{so2oh}{S(=[::90]O)(=[::-90]O)-OH}
+\setchemfig{atom sep=2.5em}
+\schemestart[,1.5]
+ \chemname{\chemfig{*6(=-*6(-=-=-)=-=-)}}{Naphtalène}\+\chemfig{H_2SO_4}
+ \arrow(nph.mid east--.south west){->[80\degres C]}[45]
+ \chemname{\chemfig{*6(=-*6(-=-(!\cycleoplus)-(-SO_3H)-)=-=-)}}{Ion 1-arenium}
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{*6(=-*6(-=-=(-!{so2oh})-)=-=-)}}{Acide 1-naphthalenesulfonique}
+ \arrow(@nph.mid east--.north west){->[160\degres C]}[-45]
+ \chemname{\chemfig{*6(=-*6(-=-(-SO_3H)-(!\cycleoplus)-)=-=-)}}{Ion 2-arenium}\kern-4em
+ \arrow(.mid east--.mid west)
+ \chemname{\chemfig{*6(=-*6(-=-(-!{so2oh})=-)=-=-)}}{Acide 2-naphthalenesulfonique}
+\schemestop
+\chemnameinit{}/
+
+\begingroup\catcode`;12
+\exemple*{Schéma explicatif}/\parbox{0.8\linewidth}{%
+ \hspace{10em}
+ \tikz[remember picture]\node(n0){\chemname{}{Attaques\\nucléophiles}};\par
+ \vspace{2ex}\hspace{15em}
+ \chemfig{R^2-(-[:-60]@{m3}H)-[:60]@{m0}(-[:120]R^1)(-[1,0.25,,,draw=none]\scriptstyle\color{red}\delta+)
+ =[@{m1}]@{m2}\lewis{1:7:,O}-[1,0.5,,,draw=none]\scriptstyle\color{red}\delta{-}}
+ \hspace{5em}
+ \chemname[-15ex]{}{\tikz[remember picture]\node(n1){};Réactions d'addition}\kern1em
+ \chemname{}{\tikz[remember picture]\node(n2){};Propriétés basiques}\par
+ \vspace{6ex}\hspace{8em}
+ \chemname{}{Propriétés acides des atomes\tikz[remember picture]\node(n3){};
+ \\d'hydrogène en position $\alpha$}
+ \chemmove[-stealth,line width=0.8pt,green!60!black!70]{
+ \draw[shorten >=2pt](n0)..controls+(270:4em)and+(180:2em)..(m0);
+ \draw[shorten >=8pt](n1)..controls+(180:2em)and+(60:2em)..(m1);
+ \draw[shorten >=5pt](n2)..controls+(180:2em)and+(270:2em)..([xshift=3pt]m2.315);
+ \draw[shorten >=2pt](n3)..controls+(0:2em)and+(270:2em)..(m3);
+ }%
+}
+\chemnameinit{}/
+\endgroup
+
+\exemple*{Taxotère}/\chemfig{-[::-30](-[5])(-[7])-[::+60]-[::-60]O-[::+60](=[::-45]O)-[::+90]HN>:[::-60](-[::+60]**6(------))
+-[::-30](<:[2]OH)-[::-60](=[6]O)-[::+60]O>:[::-60]*7(---?(<[::-120]OH)-(<|[1]CH_3)(<:[::-90]CH_3)
+-(-[1](<[::+80]HO)-[0](=[::+60]O)-[7](<|[::+130]CH_3)(-[::+75](<|[2]OH)-[::-60]-[::-60](<[::+30]O-[::-90])
+-[::-60](<[::+90])(<:[::+30]O-[7](-[6]CH_3)=[0]O)-[::-60])-[6]-[5,1.3]?(<:[7]O-[5](=[::-60]O)
+-[6]**6(------)))=(-[2]CH_3)-)}/
+\end{document} \ No newline at end of file
diff --git a/macros/generic/chemfig/chemfig.sty b/macros/generic/chemfig/chemfig.sty
new file mode 100644
index 0000000000..48e93146eb
--- /dev/null
+++ b/macros/generic/chemfig/chemfig.sty
@@ -0,0 +1,7 @@
+\RequirePackage{tikz}
+\input chemfig.tex
+\ProvidesPackage\CFname[\CFdate\space v\CFver\space Draw molecule with an easy syntax (CT)]
+\def\printatom#1{\ensuremath{\mathrm{#1}}}% \printatom pour LaTeX.
+\expandafter\def\csname CF\string_begintikzpicture\endcsname{\begin{tikzpicture}}%
+\expandafter\def\csname CF\string_endtikzpicture\endcsname{\end{tikzpicture}}%
+\endinput \ No newline at end of file
diff --git a/macros/generic/chemfig/chemfig.tex b/macros/generic/chemfig/chemfig.tex
new file mode 100644
index 0000000000..046428adc6
--- /dev/null
+++ b/macros/generic/chemfig/chemfig.tex
@@ -0,0 +1,2846 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "chemfig"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\CFname {chemfig} %
+\def\CFver {1.41} %
+% %
+\def\CFdate {2019/05/21} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%____________________________________________________________________
+% Author : Christian Tellechea |
+% Status : Maintained |
+% Email : unbonpetit@netc.fr |
+% Package URL: https://www.ctan.org/pkg/chemfig |
+% Bug tracker: https://framagit.org/unbonpetit/chemfig/issues |
+% Repository : https://framagit.org/unbonpetit/chemfig/tree/master |
+% Copyright : Christian Tellechea 2010-2019 |
+% Licence : Released under the LaTeX Project Public License v1.3c |
+% or later, see http://www.latex-project.org/lppl.txt |
+% Files : 1) chemfig.tex |
+% 2) chemfig.sty |
+% 3) t-chemfig.tex |
+% 4) README |
+% 5) chemfig_doc_fr.tex |
+% 6) chemfig_doc_fr.pdf |
+% 7) chemfig_doc_en.tex |
+% 8) chemfig_doc_fr.pdf |
+%--------------------------------------------------------------------
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% P R É A L A B L E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-------------------------- Annonce package --------------------------
+\ifdefined\ProvidesPackage\else
+ \immediate\write -1 {%
+ Package: \CFname\space\CFdate\space\space v\CFver\space\space
+ Draw molecule with an easy syntax (CT)}%
+\fi
+
+%-------------------------- Régime catcodes --------------------------
+\begingroup
+ \def\X#1{\catcode\number`#1=\number\catcode`#1\relax}
+ \xdef\CFrestorecatcode{\X\[\X\]\X\:\X\(\X\)\X\,\X\-\X\=\X\~\X\!\X\?\X\<\X\>\X\;\X\*\X\|\X\@\X\ \X\_}%
+\endgroup
+\catcode`\[12 \catcode`\]12 \catcode`\:12 \catcode`\(12
+\catcode`\)12 \catcode`\,12 \catcode`\-12 \catcode`\=12
+\catcode`\~12 \catcode`\!12 \catcode`\?12 \catcode`\<12
+\catcode`\>12 \catcode`\;12 \catcode`\*12 \catcode`\|12
+\catcode`\@12 \catcode`\#6 \catcode`\ 10 \catcode`\_11
+
+%-------------------- Vérification des prérequis ---------------------
+\def\CF_error#1{\errmessage{Package \CFname\space Error: #1.}}
+\def\CF_checkprimitive#1#2#3{% Vérifie que #1 est une primitive et sinon, émet le message #2 et exécute #3
+ \begingroup
+ \edef\__tempa{\meaning#1}\edef\__tempb{\string#1}\expandafter
+ \endgroup
+ \ifx\__tempa\__tempb\else
+ \CF_error{#2}%
+ \def\CF_temp{#3}%
+ \CFrestorecatcode\expandafter\CF_temp
+ \fi
+}
+\CF_checkprimitive\eTeXversion
+ {You are not using an eTeX engine, \CFname\space cannot work.}
+ {\endinput}%
+\CF_checkprimitive\expanded
+ {the \string\expanded\space primitive is not provided by your TeX engine, \CFname\space v\CFver\space cannot work: loading \CFname\space v1.4}
+ {\input chemfigold.tex\relax\endinput}%
+
+%------------------------ Chargement simplekv ------------------------
+\unless\ifdefined\skvname
+ \begingroup\def\CFtemp{\endgroup\input simplekv.tex\relax}%
+ \expandafter\CFtemp
+\fi
+
+%-------------------------- Chargement tikz --------------------------
+\unless\ifdefined\tikzpicture
+ \begingroup\def\CFtemp{\endgroup\input tikz.tex\relax}%
+ \expandafter\CFtemp
+\fi
+\usetikzlibrary{arrows.meta}
+
+%--------------------------- Allocations -----------------------------
+\newcount\CF_cntatomgroup
+\newcount\CF_cntgroup
+\newcount\CF_cntatom
+\newcount\CF_cntcycle
+\newcount\CF_cntcompound
+
+\newif\ifCF_incycle
+\newif\ifCF_cyclearc
+\newif\ifCF_definesubmol
+\newif\ifCF_adjustnamedp
+\newif\ifCF_macrofixedbondlength
+\newif\ifCF_lewisoverlay
+
+\newdimen\CF_dim
+\newdimen\CF_arrowsize
+\newdimen\CF_zero \CF_zero=0pt
+
+\newbox\CF_boxlewis
+\newbox\CF_box
+\newbox\CF_boxstuff
+
+\newtoks\CF_substtoks
+
+%-------------------------- Petites macros ---------------------------
+\let\CF_begintikzpicture\tikzpicture
+\let\CF_endtikzpicture \endtikzpicture
+\def\CF_quark{\CF_quark}
+\def\CF_execfirst#1#2{#1}
+\def\CF_execsecond#1#2{#2}
+\def\CF_id#1{#1}
+\def\CF_gobarg#1{}
+\def\CF_gobtwoargs#1#2{}
+\def\CF_firsttonil#1#2\_nil{#1}
+\def\CF_sanitizelastitem#1,\empty#2\_nil{#1}
+\def\CF_gobtikzinstruction#1;{}
+\def\CF_makeother#1{\catcode`#1=12\relax}
+\def\CF_lettoken#1#2{\let#1= #2}\CF_lettoken\CF_sptoken{ }
+\def\CF_ifx#1#2{\ifx#1#2\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_ifempty#1{\ifx\empty#1\empty\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_ifnum#1{\ifnum#1\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_doifempty#1{\ifx\empty#1\empty\expandafter\CF_id\else\expandafter\CF_gobarg\fi}
+\def\CF_doifnotempty#1{\ifx\empty#1\empty\expandafter\CF_gobarg\else\expandafter\CF_id\fi}
+\def\CF_gobtonil#1\_nil{}
+\edef\CFhash{\string#}
+\begingroup
+ \catcode`\_8
+ \expandafter\gdef\csname CF\string_underscore\endcsname{_}
+\endgroup
+\def\CF_threeea{\expandafter\expandafter\expandafter}
+\def\CF_exptwomacroargs#1#2#3{\CF_expsecond{\CF_expsecond#1{#2}}{#3}}
+\def\CF_expthreemacroargs#1#2#3#4{\CF_expsecond{\CF_exptwomacroargs#1{#2}{#3}}{#4}}
+\def\CF_swaparg#1#2{#2{#1}}
+\def\CF_expsecond#1#2{\expandafter\CF_swaparg\expandafter{#2}{#1}}% \CF_expsecond<{arg1>}{<arg2>} donne "<arg1>{*<arg2>}"
+\def\CF_eexpsecond#1#2{\expandafter\expandafter\expandafter\CF_swaparg\expandafter\expandafter\expandafter{#2}{#1}}% \CF_eexpsecond{<arg1>}{<arg2>} donne "<arg1>{**<arg2>}"
+\def\CF_swapunbrace#1#2{#2#1}
+\def\CF_expafter#1#2{\expandafter\CF_swapunbrace\expandafter{#2}{#1}}% \CF_expafter{<arg1>}{<arg2>} donne "<arg1>*<arg2>"
+\def\CF_eexpafter#1#2{\expandafter\expandafter\expandafter\CF_swapunbrace\expandafter\expandafter\expandafter{#2}{#1}}% \CF_eexpafter{<arg1>}{<arg2>} donne "<arg1>**<arg2>"
+\def\CF_addtomacro#1#2{\CF_expsecond{\def#1}{#1#2}}
+\def\CF_eaddtomacro#1#2{\CF_expsecond{\CF_addtomacro#1}{#2}}
+\def\CF_preaddtomacro#1#2{\CF_expsecond{\CF_preaddtomacroa#1{#2}}#1}
+\def\CF_preaddtomacroa#1#2#3{\def#1{#2#3}}
+\def\CF_addtotoks#1#2{#1\expandafter{\the#1#2}}
+\def\CF_eaddtotoks#1#2{\expandafter\CF_addtotoks\expandafter#1\expandafter{#2}}
+\def\CF_assigntonil#1#2\_nil{\def#1{#2}}
+\def\CF_edefaddtomacro#1#2{\CF_expsecond{\CF_addtomacro#1}{\expanded{#2}}}
+\def\CF_ifnextchar#1#2#3{%
+ \let\CF_ifnextchartok=#1% <- espace indésirable, bugfix v1.31
+ \def\CF_ifnextcharcodetrue{#2}%
+ \def\CF_ifnextcharcodefalse{#3}%
+ \futurelet\CF_temptok\CF_ifnextchara
+}
+\def\CF_ifnextchara{%
+ \CF_ifx\CF_temptok\CF_sptoken
+ {\CF_ifnextcharb
+ }
+ {\CF_ifx\CF_temptok\CF_ifnextchartok
+ \CF_ifnextcharcodetrue
+ \CF_ifnextcharcodefalse
+ }%
+}
+\expandafter\def\expandafter\CF_ifnextcharb\space{\futurelet\CF_temptok\CF_ifnextchara}
+\def\CF_ifstar#1{\CF_ifnextchar*{\CF_execfirst{#1}}}
+\def\CF_testopt#1#2{\CF_ifnextchar[{#1}{#1[{#2}]}}
+\def\CF_warning#1{\immediate\write-1{Package \CFname\space Warning: #1^^J}}
+\def\CF_ifinteger#1{%
+ \begingroup
+ \afterassignment\CF_afterinteger
+ \CF_cntcycle0#1\relax
+}
+\def\CF_afterinteger#1\relax{%
+ \endgroup
+ \CF_ifempty{#1}%
+}
+\def\CF_iffirsttokmatch#1#2{% est ce que #1 et #2 commencent par les mêmes tokens ?
+ \futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
+ \futurelet\CF_toksb\CF_gobtonil#2\relax\_nil
+ \CF_ifx\CF_toksa\CF_toksb
+}
+\def\CF_iffirsttokin#1{% teste si le token qui commence #1 appartient aux tokens mis dans #2
+ \futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
+ \CF_iffirsttokina
+}
+\def\CF_iffirsttokina#1{%
+ \CF_ifempty{#1}
+ {\CF_execsecond
+ }
+ {\futurelet\CF_toksb\CF_gobtonil#1\relax\_nil
+ \CF_ifx\CF_toksa\CF_toksb
+ {\CF_execfirst}
+ {\CF_expsecond\CF_iffirsttokina{\CF_gobarg#1}}%
+ }%
+}
+\def\CF_ifinstr#1#2{%
+ \def\CF_ifinstra##1#2##2\_nil{%
+ \ifx\empty##2\empty
+ \expandafter\CF_execsecond
+ \else
+ \expandafter\CF_execfirst
+ \fi}%
+ \CF_ifinstra#1\__nil#2\_nil
+}
+\def\CF_afterspace#1 #2\_nil{#2}
+\def\CF_valuetomacro#1[#2]#3{% #1= macro #2=valeur défaut #3=clé
+ \CF_eexpsecond{\def#1}{\useKV[chemfig]{#3}}%
+ \CF_ifx#1\empty
+ {\def#1{#2}}
+ {}%
+}
+
+%--------------------------- Substitution ----------------------------
+\def\CF_ifstartwith#1#2{% #1=<texte> #2=<motif>
+ \CF_ifempty{#1}%
+ {\CF_execsecond
+ }
+ {\def\CF_startwithcode{#1}%
+ \def\CF_startwithpattern{#2}%
+ \CF_ifstartwitha
+ }%
+}
+\def\CF_ifstartwitha{%
+ \CF_grabfirstarg\CF_startwithcode\CF_firstargcode
+ \CF_grabfirstarg\CF_startwithpattern\CF_firstargpattern
+ \CF_ifx\CF_firstargcode\CF_firstargpattern
+ {\CF_expsecond\CF_ifempty\CF_startwithpattern
+ {\CF_execfirst
+ }
+ {\CF_expsecond\CF_ifempty\CF_startwithcode
+ \CF_execsecond
+ \CF_ifstartwitha
+ }%
+ }
+ {\CF_execsecond
+ }%
+}
+\def\CF_grabfirstarg#1#2{%
+ \CF_ifx#1\empty
+ {\let#2\empty
+ }
+ {\def\CF_grabmacro{#2}%
+ \CF_expsecond\CF_ifbracefirst#1%
+ {\expandafter\CF_grabbracearg#1\_nil#1}
+ {\CF_expafter{\futurelet\CF_nexttok\CF_grabfirstarga}#1\_nil#1}%
+ }%
+}
+\def\CF_grabfirstarga{%
+ \CF_ifx\CF_nexttok\CF_sptoken
+ \CF_grabspacearg
+ \CF_grabnormalarg
+}
+\def\CF_grabbracearg#1{%
+ \expandafter\def\CF_grabmacro{{#1}}%
+ \CF_grabargassigntonil\relax
+}
+\expandafter\def\expandafter\CF_grabspacearg\space{%
+ \expandafter\def\CF_grabmacro{ }%
+ \CF_grabargassigntonil\relax
+}
+\def\CF_grabnormalarg#1{%
+ \expandafter\def\CF_grabmacro{#1}%
+ \CF_grabargassigntonil\relax
+}
+\def\CF_grabargassigntonil#1\_nil#2{\CF_expsecond{\def#2}{\CF_gobarg#1}}
+\def\CF_ifbracefirst#1{\CF_ifnum{\catcode\CF_threeea`\expandafter\CF_firsttonil\detokenize{#1.}\_nil=1 }}
+\def\CF_substonly#1#2{% #1=entier maxi>0 #2=macro : dans la sc#1, remplace tous les <motif> par <pattern> sauf lorsque le motif est suivi d'un caractère >#1
+ \def\CF_atendsubstitute{\edef#2{\the\CF_substtoks}}% macro exécutée à la fin
+ \let\CF_substnogroups\CF_substnogrouponly
+ \CF_ifnum{#1>0 }
+ {\let\CF_testifx\empty
+ \foreach\CF_x in {1,...,#1}{\xdef\CF_testifx{\unexpanded\expandafter{\CF_testifx}\unexpanded\expandafter{\expandafter\ifx\CF_x\CF_nexttok1\fi}}}%
+ \let\CF_testif\empty
+ \foreach\CF_x in {1,...,#1}{\xdef\CF_testif{\unexpanded\expandafter{\CF_testif}\unexpanded\expandafter{\expandafter\if\CF_x\CF_nexttok1\fi}}}%
+ \CF_expsecond\CF_substi#2%
+ }
+ {\CF_substall#2%
+ }%
+}
+\def\CF_substnogrouponly{%
+ \CF_exptwomacroargs\CF_ifstartwith\CF_substcode\CF_substsubst
+ {\CF_grabfirstarg\CF_substcode\CF_temp
+ \CF_expafter{\futurelet\CF_nexttok\CF_gobtonil}\CF_substcode\relax\_nil
+ \CF_ifnum{0\CF_testifx=1 }% si le prochain token est \let-égal à 1...#1
+ {\edef\CF_nexttok{\CF_threeea\CF_firsttonil\expandafter\string\CF_substcode\_nil}% le détokéniser
+ \CF_ifnum{0\CF_testif=1 }
+ {\CF_eaddtotoks\CF_substtoks\CF_temp
+ \CF_grabfirstarg\CF_substcode\CF_temp
+ \CF_eaddtotoks\CF_substtoks\CF_temp
+ }
+ {\CF_eaddtotoks\CF_substtoks\CF_substpattern
+ }%
+ }
+ {\CF_eaddtotoks\CF_substtoks\CF_substpattern
+ }%
+ \CF_substgroups
+ }
+ {\CF_expsecond\CF_ifempty\CF_substcode
+ {\CF_atendsubstitute
+ }
+ {\CF_grabfirstarg\CF_substcode\CF_substauxarg
+ \CF_eaddtotoks\CF_substtoks\CF_substauxarg
+ \CF_substgroups
+ }%
+ }%
+}
+\def\CF_substall#1{% #1=macro
+ \def\CF_atendsubstitute{\edef#1{\the\CF_substtoks}}% macro exécutée à la fin
+ \let\CF_substnogroups\CF_substnogroupall
+ \CF_expsecond\CF_substi#1%
+}
+\def\CF_substnogroupall{%
+ \CF_exptwomacroargs\CF_ifstartwith\CF_substcode\CF_substsubst
+ {\CF_eaddtotoks\CF_substtoks\CF_substpattern
+ \CF_grabfirstarg\CF_substcode\CF_temp
+ \CF_substgroups
+ }
+ {\CF_expsecond\CF_ifempty\CF_substcode
+ {\CF_atendsubstitute
+ }
+ {\CF_grabfirstarg\CF_substcode\CF_substauxarg
+ \CF_eaddtotoks\CF_substtoks\CF_substauxarg
+ \CF_substgroups
+ }%
+ }%
+}
+\def\CF_substi#1#2#3{% #1=<texte> #2=<motif> #3=<motif de substi>
+ \def\CF_substcode{#1}\def\CF_substsubst{#2}\def\CF_substpattern{#3}%
+ \CF_substtoks={}%
+ \CF_substgroups
+}
+
+\def\CF_substgroups{%
+ \CF_expsecond\CF_ifbracefirst\CF_substcode
+ {\CF_grabfirstarg\CF_substcode\CF_substauxarg
+ \begingroup
+ \def\CF_atendsubstitute{%
+ \expandafter\endgroup\expandafter\CF_addtotoks\expandafter\CF_substtoks\expandafter{\expandafter{\the\CF_substtoks}}%
+ \CF_substgroups
+ }%
+ \CF_substtoks{}% initialiser à vide
+ \expandafter\def\expandafter\CF_substcode\CF_substauxarg
+ \CF_substgroups
+ }%
+ {\CF_substnogroups
+ }%
+}
+
+%---------------------------- Paramètres -----------------------------
+\def\setchemfig{\setKV[chemfig]}
+\def\resetchemfig{%
+ \setKVdefault[chemfig]{%
+ atom style ={},% code tikz mis à la fin de every node/.style
+ chemfig style ={},% code tikz mis à la fin de l'arugment optionnel de \tikzpicture
+ bond join =false,
+ fixed length =false,
+ cram rectangle =false,
+ cram width =1.5ex,
+ cram dash width =1pt,
+ cram dash sep =2pt,
+ atom sep =3em,
+ bond offset =2pt,
+ double bond sep =2pt,
+ angle increment =45,
+ node style ={},
+ bond style ={},
+ lewis | width =0.3ex,
+ lewis sep =0.4ex,
+ lewis length =1.5ex,
+ lewis style ={},
+ lewis dist =0.3em,
+ lewis radius =0.15ex,
+ lewis diag coeff =1,
+ cycle radius coeff =0.75,
+ stack sep =1.5pt,
+ scheme debug =false,
+ compound style ={},
+ compound sep =5em,
+ arrow offset =4pt,
+ arrow angle =0,
+ arrow coeff =1,
+ arrow style ={},
+ arrow double sep =2pt,
+ arrow double coeff =0.6,
+ arrow double harpoon=true,
+ arrow label sep =3pt,
+ arrow head =-CF,
+ + sep left =0.5em,
+ + sep right =0.5em,
+ + vshift =0pt,
+ }%
+}
+\resetchemfig
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% D E S S I N M O L É C U L E S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\CF_sanitizecatcode{%
+ \CF_makeother\[\CF_makeother\]\CF_makeother\:\CF_makeother\(\CF_makeother\)%
+ \CF_makeother\,\CF_makeother\-\CF_makeother\=\CF_makeother\~\CF_makeother\!%
+ \CF_makeother\?\CF_makeother\<\CF_makeother\>\CF_makeother\;\CF_makeother\*%
+ \CF_makeother\|\CF_makeother\#\CF_makeother\@%
+}
+
+\def\CF_nodecontent{\CF_expsecond\printatom{\csname atom_\number\CF_cntatom\endcsname\CF_nodestrut}}
+
+\def\chemskipalign{%
+ \CF_doifempty\CF_bondoutcontentsaved% sauf si un \chemskipalign a été fait à l'atome précédent
+ {\global\let\CF_bondoutcontentsaved\CF_bondoutcontent}% sauvegarder l'atome d'où vient la liaison
+ \let\CF_nodestrut\empty
+}
+
+\def\CF_emptynode{{}}
+
+\def\definesubmol{\CF_definesubmoltrue\def_submol}
+\def\redefinesubmol{\CF_definesubmolfalse\def_submol}
+
+\def\def_submol#1{%
+ \CF_cntatomgroup=0 % nombre d'arguments supposé
+ \def\CF_temp{#1}% nom
+ \futurelet\CF_toksa\CF_submoltestnxttok
+}
+
+\def\CF_submoltestnxttok{%
+ \if[\noexpand\CF_toksa\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi
+ {\begingroup\CF_sanitizecatcode\CF_expsecond\CF_submolgrabopt{\CF_temp}%
+ }
+ {\afterassignment\CF_submoltestnxttoka% pas d'argument entre crochet
+ \CF_cntatomgroup=0% cherche le nombre d'arguments éventuels
+ }%
+}
+
+\def\CF_submoltestnxttoka{\futurelet\CF_toksa\CF_submoltestnxttokb}
+
+\def\CF_submoltestnxttokb{%
+ \if[\noexpand\CF_toksa\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi
+ {\begingroup\CF_sanitizecatcode\CF_expsecond\CF_submolgrabopt{\CF_temp}}
+ {\CF_expsecond{\def_submola}\CF_temp{}}%
+}
+
+\def\CF_submolgrabopt#1[#2]#{\endgroup\def_submola{#1}{#2}}
+
+\def\def_submola#1{% #1 nom
+ \CF_ifnum{0\CF_ifnum{\CF_cntatomgroup<0 }1{\CF_ifnum{\CF_cntatomgroup>9 }10}>0 }
+ {\CF_error{Invalid number of arguments in submol \detokenize\expandafter{\string#1}. Defining it with 0 argument}%
+ \CF_cntatomgroup=0
+ }
+ {}%
+ \ifcat\relax\expandafter\noexpand\CF_firsttonil#1\_nil\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi% si #1 est une séquence de contrôle
+ {\expandafter\ifdefined\CF_firsttonil#1\_nil
+ \ifCF_definesubmol
+ \CF_warning{the submol \expandafter\string\CF_firsttonil#1\_nil\space is already defined, the previous definition is lost}%
+ \fi
+ \fi
+ \begingroup
+ \CF_sanitizecatcode
+ \def_submolb{#1}%
+ }
+ {\ifcsname CF__#1\endcsname
+ \ifCF_definesubmol
+ \CF_warning{the submol "#1" is already defined, the previous definition is lost}%
+ \fi
+ \fi
+ \begingroup
+ \CF_sanitizecatcode
+ \expandafter\def_submolb\csname CF__#1\endcsname
+ }%
+}
+
+\def\def_submolb#1#2#3{% #1 nom sous forme de macro, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche, \CF_cntatomgroup = nombre d'arguments
+ \def\CF_tempa{#2}\CF_doifnotempty{#2}{\CF_expsecond{\CF_expsecond\CF_substonly{\number\CF_cntatomgroup}\CF_tempa}{\CFhash}{\CFhash}}%
+ \def\CF_tempb{#3}\CF_expsecond{\CF_expsecond\CF_substonly{\number\CF_cntatomgroup}\CF_tempb}{\CFhash}{\CFhash}%
+ \CF_expsecond{\CF_expsecond{\def_submolc{#1}}\CF_tempa}\CF_tempb
+}
+
+\def\def_submolc#1#2#3{% #1 nom sous forme de macro, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche, \CF_cntatomgroup = nombre d'arguments
+ \endgroup
+ \begingroup
+ \global\toks0{\gdef\CFthesubmol}%
+ \CF_ifnum{\CF_cntatomgroup>0 }
+ {\foreach\CF_x in {1,...,\CF_cntatomgroup}{%
+ \global\toks0\expandafter{\expanded{\the\toks0\CFhash\CF_x}}%
+ }%
+ }
+ {}%
+ \CF_sanitizecatcode \catcode`\#6 \endlinechar-1 \everyeof{\noexpand}%
+ \CF_ifempty{#2}%
+ {\scantokens\expandafter{\the\toks0{\empty#3}}%
+ }%
+ {\scantokens\expandafter{%
+ \the\toks0{%
+ \csname CF_exec%
+ \ifdim\csname CF_currentangle\endcsname pt>90pt
+ \ifdim\csname CF_currentangle\endcsname pt<270pt
+ first%
+ \else
+ second%
+ \fi
+ \else
+ second%
+ \fi
+ \endcsname
+ {#2}{#3}%
+ }%
+ }%
+ }%
+ \endgroup
+ \let#1\CFthesubmol
+}
+
+\def\CF_seeknode#1#2#3{% cherche un noeud au début de #1 l'assigne dans la sc #2 et met le reste dans #3
+ \let#2\empty
+ \def#3{#1}%
+ \CF_iffirsttokmatch{#1}{ }%
+ {\CF_expsecond\CF_seeknodea{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au début du groupe d'atome
+ {\CF_seeknodea{#1}#2#3}%
+}
+
+\def\CF_seeknodea#1#2#3{%
+ \CF_ifempty{#1}%
+ {\let#3\empty
+ }
+ {\futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
+ \CF_ifx\CF_toksa\CF_sptoken
+ {\CF_addtomacro#2{ }%
+ \CF_expsecond\CF_seeknodea{\CF_afterspace#1\_nil}#2#3%
+ }%
+ {\CF_ifx\CF_toksa\bgroup
+ {\CF_eaddtomacro#2{\expandafter{\CF_firsttonil#1\_nil}}%
+ \CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
+ }%
+ {\CF_iffirsttokina{-=(*<>!~}%
+ {\def#3{#1}%
+ }%
+ {\CF_eaddtomacro#2{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
+ }%
+ }%
+ }%
+ }%
+}
+
+% on sait que #1 commence par -,=,~,<,>. On analyse cette liaison
+% #2 reçoit le type de liaisons (1 pour -, 2 pour =, 3 pour ~)
+\def\CF_assignbondcode#1#2{%
+ \futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \edef#2{%
+ \ifx-\CF_toksa1\else
+ \ifx=\CF_toksa2\else
+ \ifx~\CF_toksa3\else
+ \ifx>\CF_toksa4\else
+ \ifx<\CF_toksa5\else0% si 0 --> il y a une erreur non due à l'utilisateur
+ \fi\fi\fi\fi\fi}%
+ \ifnum#2>3 % si c'est une liaison de Cram
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_gobarg#1\_nil}% chope le caractère suivant
+ \CF_ifx:\CF_toksa
+ {\edef#2{\number\numexpr#2+2}% si c 'est un ":", signe du pointillé, ajoute 2
+ }%
+ {\CF_ifx|\CF_toksa% si c 'est un "|", signe du triangle évidé, ajouter 4
+ {\edef#2{\number\numexpr#2+4}}
+ {}%
+ }%
+ \fi
+}
+
+\def\CF_grabbondoffseta#1,#2\_nil{%
+ \def\CF_startoffset{#1}\def\CF_endoffset{#2}%
+}
+
+\def\CF_grabbondoffset#1(#2)#3\_nil{%
+ \CF_doifnotempty{#2}%
+ {\CF_ifinstr{#2},%
+ {\CF_grabbondoffseta#2\_nil}%
+ {\def\CF_startoffset{#2}}%
+ }%
+ \def\CF_remainafterbond{#3}%
+}
+
+\def\CF_analysebond#1#2{%
+ \CF_assignbondcode{#1}#2%
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobarg#1}%mange le premier signe de la liaison
+ \let\CF_doublebondtype\CF_zero
+ \ifnum#2=2 % si c'est une double liaison, regarde s'il y a un + ou - derrière
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_gobarg#1\_nil}%
+ \CF_ifx^\CF_toksa
+ {\def\CF_doublebondtype{1}%
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange le "^"
+ }
+ {\expandafter\ifx\CF_underscore\CF_toksa
+ \def\CF_doublebondtype{2}%
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange le "_"
+ \fi
+ }%
+ \else
+ \ifnum#2>5 % si c'est une laision de Cram pointillée ou triangle évidé
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange un caractère de plus
+ \fi
+ \fi
+ \CF_expsecond\CF_iffirsttokmatch\CF_remainafterbond\CFhash
+ {\CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_remainafterbond.}(%si parenthèse juste après
+ {\expandafter\CF_grabbondoffset\CF_remainafterbond\_nil}
+ {}%
+ }%
+ {}%
+ \CF_expsecond\CF_iffirsttokmatch\CF_remainafterbond @%
+ {\expandafter\CF_grabmovearg\CF_remainafterbond\_nil}%
+ {}%
+ \CF_expsecond\CF_iffirsttokmatch{\CF_remainafterbond}[%
+ {\expandafter\CF_analyseoptarg\CF_remainafterbond\_nil\CF_remainafterbond
+ }%
+ {\let\CF_currentstringangle\CF_defaultstringangle
+ \let\CF_currentlength\CF_defaultlength
+ \let\CF_currentfromatom\CF_defaultfromatom
+ \let\CF_currenttoatom\CF_defaulttoatom
+ \let\CF_currenttikz\CF_defaulttikz
+ \let\CF_movebondname\empty
+ }%
+ \ifCF_incycle
+ \pgfmathsetmacro\CF_cycleincrementangle{360/\CF_cyclenum+\CF_initcycleangle}%
+ \edef\CF_currentstringangle{::+\CF_cycleincrementangle}%
+ \def\CF_initcycleangle{0}%
+ \let\CF_currentlength\CF_defaultlength% et on ignore la longueur de liaison spécifiée
+ \fi
+ \CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
+}
+
+\def\CF_setbondangle#1#2{% le code de la direction est contenu dans #1, en sortie, #2 contient l'angle
+ \CF_ifempty{#1}%
+ {\let#2\CF_defaultangle
+ }
+ {\if:\expandafter\noexpand\CF_firsttonil#1\_nil
+ \if:\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_gobarg#1\_nil
+ \pgfmathsetmacro#2{\CF_previousangle+\expandafter\CF_gobarg\CF_gobarg#1}%
+ \else
+ \pgfmathsetmacro#2{\CF_gobarg#1}%
+ \fi
+ \else
+ \pgfmathsetmacro#2{#1*\CF_angleincrement}%
+ \fi% puis normalise l'angle entre 0 et 360
+ \ifdim\ifdim#2pt<0pt -\fi#2pt>360pt
+ \pgfmathsetmacro#2{#2-360*floor(#2/360)}%
+ \fi% si |#2|>360
+ \ifdim#2pt<0pt
+ \pgfmathsetmacro#2{#2+360}%
+ \fi
+ }%
+}
+
+\def\CF_analysemovearg#1,#2\_nil#3{%
+ \def#3{#1}\def\CF_movebondcoeff{#2}%
+}
+
+% Argument limités légitimes ici car #2 (qui est ce qui suit "@{<nom>}" dans l'argument optionnel) ne DOIT PAS
+% commencer par une accolade.
+\def\CF_grabmovearg @#1#2\_nil{%
+ \CF_ifinstr{#1},%
+ {\CF_analysemovearg#1\_nil\CF_movebondname}%
+ {\def\CF_movebondname{#1}\def\CF_movebondcoeff{0.5}}%
+ \def\CF_remainoptarg{#2}%
+}
+
+\def\CF_testemptyandassign#1#2#3{%
+ \CF_ifempty{#2}
+ {\let#1#3}
+ {\def#1{#2}}%
+}
+
+\def\CF_parseoptlist#1,#2,#3,#4,#5\_nil{%
+ \CF_testemptyandassign\CF_currentstringangle{#1}\CF_defaultstringangle
+ \CF_testemptyandassign\CF_currentlength {#2}\CF_defaultlength
+ \CF_testemptyandassign\CF_currentfromatom {#3}\CF_defaultfromatom
+ \CF_testemptyandassign\CF_currenttoatom {#4}\CF_defaulttoatom
+ \CF_expsecond{\CF_testemptyandassign\CF_currenttikz}{\CF_sanitizelastitem#5,\empty\_nil}\CF_defaulttikz
+}%
+
+\def\CF_analyseoptarg[#1]{%
+ \CF_doifnotempty{#1}%
+ {\CF_iffirsttokmatch{#1}{@}%
+ {\CF_grabmovearg#1\_nil
+ }
+ {\let\CF_movebondname\empty
+ \def\CF_remainoptarg{#1}%
+ }%
+ \expandafter\CF_parseoptlist\CF_remainoptarg,\empty,\empty,\empty,\empty\_nil
+ }%
+ \CF_analyseoptarga\relax
+}
+
+\def\CF_analyseoptarga#1\_nil#2{%
+ \CF_expsecond{\def#2}{\CF_gobarg#1}%
+}
+
+\def\CF_seeksubmol{%
+ \CF_expsecond{\def\CF_molecule}{\romannumeral-`\.\expandafter\noexpand\CF_molecule}%
+ \CF_expsecond\CF_iffirsttokmatch{\CF_molecule}!%
+ {\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enlève le "!"
+ \CF_ifx\empty\CF_molecule
+ {\CF_error{no submol name found after "!"}}
+ {}%
+ \ifcat\relax\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule*\_nil
+ \expandafter\CF_seeksubmola\CF_molecule\_nil
+ \else
+ \expandafter\CF_seeksubmolb\CF_molecule\_nil
+ \fi
+ \CF_seeksubmol
+ }%
+ {}%
+}
+
+\def\CF_seeksubmola#1{\CF_seeksubmolc#1\relax}
+
+\def\CF_seeksubmolb#1{\expandafter\CF_seeksubmolc\csname CF__#1\endcsname\relax}% nom de la sous molécule
+
+\def\CF_seeksubmolc#1#2\_nil{%#1=macro de la sous molécule #2=reste du code commençant par \relax
+ \CF_expsecond{\CF_eexpsecond{\def\CF_molecule}}{\expandafter#1\CF_gobarg#2}% supprime le \relax puis ajoute la macro au début et la 2-développe
+}
+
+\def\CF_insertemptygroup#1{% insère {} au début de la sc #1
+ \CF_expsecond{\def#1}{\expandafter{\expandafter}#1}%
+}
+
+\def\chemfig{\CF_testopt\CF_chemfiga{}}
+
+\def\CF_chemfiga[#1]{%
+ \begingroup
+ \CF_sanitizecatcode
+ \CF_exptwomacroargs\CF_chemfigb\CF_begintikzpicture\CF_endtikzpicture[#1]%
+}
+
+\def\CF_chemfigb#1#2[#3]#4{%
+ \endgroup
+ \begingroup
+ \setchemfig{#3}%
+ \expanded{% début du tikzpicture
+ \unexpanded{#1}[%
+ remember picture,%
+ every node/.style={%
+ anchor=base,%
+ inner sep=0pt,%
+ outer sep=0pt,%
+ minimum size=0pt,%
+ \unexpanded\CF_threeea{\useKV[chemfig]{atom style}}%
+ },%
+ baseline,%
+ \unexpanded\CF_threeea{\useKV[chemfig]{chemfig style}}%
+ ]%
+ }%
+ \begingroup% \endgroup rajouté en sortie de tracé par \CF_chemfigd
+ \let\CF_hooklist\empty
+ \CF_expsecond\setchemfig{#3}%
+ \ifboolKV[chemfig]{fixed length}
+ {\CF_macrofixedbondlengthtrue}
+ {\CF_macrofixedbondlengthfalse}%
+ \ifboolKV[chemfig]{bond join}
+ {\let\CF_drawaxisbond\CF_drawaxisbondjoin}
+ {\let\CF_drawaxisbond\CF_drawaxisbondnojoin}%
+ \ifboolKV[chemfig]{cram rectangle}
+ {\let\CF_clipcramornot\CF_gobtikzinstruction}
+ {\let\CF_clipcramornot\clip}%
+ \CF_valuetomacro\CF_crambasewidth [1.5ex]{cram width}%
+ \CF_valuetomacro\CF_cramdashlength [1pt]{cram dash width}%
+ \CF_valuetomacro\CF_cramdashsep [2pt]{cram dash sep}%
+ \CF_valuetomacro\CF_atomsep [3em]{atom sep}% espacement des atomes liés
+ \CF_valuetomacro\CF_bondoffset [2pt]{bond offset}%
+ \CF_valuetomacro\CF_doublesep [2pt]{double bond sep}%
+ \CF_valuetomacro\CF_angleincrement [45]{angle increment}%
+ \CF_valuetomacro\CF_nodestyle []{node style}%
+ \CF_valuetomacro\CF_bondstyle []{bond style}%
+ \CF_valuetomacro\CF_stacksep [1.5pt]{stack sep}%
+ \CF_valuetomacro\CF_cycleradiuscoeff[0.75]{cycle radius coeff}% coeff multiplicateur du rayon des arcs dans les cycles
+ \CF_incyclefalse
+ \CF_cntgroup0
+ \let\CF_lastaction\CF_zero% 0=début du dessin 1=tracé d'un noeud 2=tracé d'une liaison
+ \let\CF_startoffset\empty
+ \let\CF_endoffset\empty
+ \let\CF_bondoutcontentsaved\empty
+ \def\CF_cycleanglecorrection{180/\CF_cyclenum}%
+ \def\CF_defaultangle{0}%
+ \def\CF_defaultstringangle{:0}% angle pris par défaut si le champ est vide
+ \def\CF_defaultlength{1}%
+ \let\CF_defaultfromatom\empty% numero de l'atome d'où partent les liaisons par défaut
+ \let\CF_defaulttoatom\empty% numéro de l'atome où arrivent les laisons par défaut
+ \let\CF_defaulttikz\empty
+ \let\CF_previousbondangle\empty
+ \let\CF_joinbond\CF_zero
+ \let\CF_previoustikz\empty
+ \everyeof{\_nil}\endlinechar-1
+ \CF_sanitizecatcode
+ \expandafter\CF_assigntonil\expandafter\CF_molecule\scantokens{#4}%
+ \CF_expsecond{\CF_substall\CF_molecule}\CFhash\CFhash
+ \CF_expsecond\CF_chemfigc{\CF_molecule}%
+ %\endgroup <-- rajouté par \CF_chemfigd
+ #2% fin du tikzpicture
+ \endgroup
+ \let\CF_flipstate\CF_zero
+}
+
+\def\CF_chemfigc#1{% #1 est le code de la molécule
+ \ifnum\CF_lastaction=3
+ \ifCF_incycle
+ \def\CF_defaultangle{0}%
+ \else
+ \ifnum\CF_cntcycle=0 % si c'est le début d'un cycle
+ \pgfmathsetmacro\CF_defaultangle{\CF_previousangle+180+\CF_cycleanglecorrection}% on met la liaison à +180° + correction
+ \else
+ \pgfmathsetmacro\CF_defaultangle{\CF_previousangle-90+180/\CF_cyclenum}% sinon à la bissectrice du sommet du cycle
+ \fi
+ \fi
+ \let\CF_defaultstringangle\empty
+ \fi
+ \let\CF_currentangle\CF_defaultangle
+ \def\CF_molecule{#1}%
+ \CF_seeksubmol% alias en premier ?
+ \if[\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule\_nil
+ \expandafter\CF_analyseoptarg\CF_molecule\_nil\CF_molecule
+ \CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
+ \let\CF_defaultangle\CF_currentangle
+ \let\CF_previousangle\CF_currentangle
+ \CF_doifnotempty\CF_currentstringangle{\let\CF_defaultangle\CF_currentangle}%
+ \CF_doifnotempty\CF_currentlength {\let\CF_defaultlength\CF_currentlength}%
+ \CF_doifnotempty\CF_currentfromatom {\let\CF_defaultfromatom\CF_currentfromatom}%
+ \CF_doifnotempty\CF_currenttoatom {\let\CF_defaulttoatom\CF_currenttoatom}%
+ \CF_doifnotempty\CF_currenttikz {\let\CF_defaulttikz\CF_currenttikz}%
+ \CF_seeksubmol
+ \fi
+ \edef\CF_defaultstringangle{:\CF_defaultangle}%
+ \let\CF_currentlength\CF_defaultlength
+ \let\CF_currentfromatom\CF_defaultfromatom
+ \let\CF_currenttoatom\CF_defaulttoatom
+ \let\CF_currenttikz\CF_defaulttikz
+ \ifCF_incycle% si on commence un cycle
+ \let\CF_currentangle\CF_previousangle
+ \ifCF_cyclearc% on doit tracer l'arc de cercle dans le cycle ?
+ \pgfmathsetmacro\CF_cyclearcradius{\CF_cycleradiuscoeff*\CF_currentlength*\CF_atomsep/(2*tan(180/\CF_cyclenum))}%
+ \pgfmathsetmacro\CF_cyclearcinitangle{\CF_currentangle+\CF_initcycleangle+180/\CF_cyclenum+90}
+ \pgfmathparse{\CF_currentlength*\CF_atomsep/(2*sin(180/\CF_cyclenum))}%
+ \node[at=(\CF_bondoutnode),shift=(\CF_cyclearcinitangle:\pgfmathresult pt)](arccenter){};% le centre de l'arc
+ \node[at=(arccenter),shift=(\CF_cyclearcstartangle:\CF_cyclearcradius pt)](initarc){};% le début de l'arc
+ \CF_expafter{\draw[}\CF_cyclearcdirecttikz](initarc) arc (\CF_cyclearcstartangle:\CF_cyclearcendangle:\CF_cyclearcradius pt);
+ \fi
+ \else
+ \let\CF_currentangle\CF_defaultangle
+ \fi
+ \ifnum\CF_lastaction=0
+ \let\CF_previousangle\CF_defaultangle
+ \node(CF_node){};
+ \CF_expsecond\CF_iffirsttokin{\CF_molecule}{-=(*~?<>}%
+ {\CF_insertemptygroup\CF_molecule}%
+ {}%
+ \fi
+ \CF_chemfigd
+}
+
+\def\CF_chemfigd{%
+ \let\CF_nextaction\CF_chemfigd% à priori, on reboucle
+ \CF_ifx\CF_molecule\empty
+ {\let\CF_nextaction\endgroup
+ }
+ {\CF_seeksubmol
+ \CF_expsecond\CF_seeknode{\CF_molecule}\CF_currentatomgroup\CF_molecule
+ \CF_ifx\empty\CF_currentatomgroup% pas de noeud pour commencer ?
+ {\def\CF_bondoutnode{%
+ n\CF_lastgroupnumber-%
+ \ifx\CF_currentfromatom\empty
+ \ifdim\CF_currentangle pt<90pt
+ \number\CF_cntatomgroup
+ \else
+ \ifdim\CF_currentangle pt>270pt
+ \number\CF_cntatomgroup
+ \else
+ 1%
+ \fi
+ \fi
+ \else
+ \CF_currentfromatom
+ \fi}%
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_molecule\relax\_nil}%
+ \CF_iffirsttokina{-=<>~}% la suite est une liaison
+ {\ifnum\CF_lastaction=2 % c'est la deuxième liaison consécutive ?
+ \CF_insertemptygroup\CF_molecule% insère un groupe vide
+ \edef\CF_bondoutnode{\CF_bondoutnode}%
+ \else
+ \ifCF_incycle
+ \advance\CF_cntcycle1
+ \fi
+ \CF_expsecond\CF_analysebond{\CF_molecule}\CF_bondtype
+ \edef\CF_bondoutnode{\CF_bondoutnode}%
+ \let\CF_molecule\CF_remainafterbond
+ \ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \CF_threeea\CF_execfirst
+ \else
+ \ifnum\CF_cntcycle=1
+ \let\CF_cyclefirsttikz\CF_currenttikz
+ \CF_doifnotempty\CF_startoffset{\let\CF_cyclejoinlast\CF_zero}%
+ \fi
+ \CF_threeea\CF_execsecond
+ \fi
+ \else
+ \expandafter\CF_execsecond
+ \fi
+ {\let\CF_nextaction\endgroup
+ \CF_drawbond\CF_bondtype{\CF_bondoutnode}{\CF_hookcycle}\CF_previousatomgroup\CF_hookatomgroup
+ }%
+ {\node[at=(\CF_bondoutnode\ifCF_incycle\else\ifCF_macrofixedbondlength.\CF_currentangle\fi\fi),shift=(\ifcase\CF_flipstate\or180-\or-\fi\CF_currentangle:\CF_currentlength*\CF_atomsep)](CF_node){};
+ \let\CF_previousangle\CF_currentangle
+ \def\CF_lastaction{2}%
+ }%
+ \fi
+ \ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_molecule}\relax
+ % s'il ne reste plus rien après la liaison (sans tenir compte de l'espace devant)-> insère un groupe vide
+ \CF_insertemptygroup\CF_molecule
+ \fi
+ }%
+ {\edef\CF_bondoutnode{\CF_bondoutnode}% évalue le l'atome de départ de liaison
+ \CF_ifx(\CF_toksa% une parenthèse pour commencer ?
+ {\ifnum\CF_lastaction=2 % il y avait une liaison juste avant ?
+ \CF_insertemptygroup\CF_molecule
+ \else
+ \CF_expsecond\CF_grabsubmol{\CF_molecule}%
+ \begingroup
+ \ifCF_incycle\def\CF_lastaction{3}\fi% on était dans un cycle
+ \CF_incyclefalse
+ \aftergroup\CF_chemfigd
+ \def\CF_nextaction{\CF_expsecond\CF_chemfigc{\CF_molinparen}}%
+ \fi
+ }%
+ {\CF_ifx\CF_molecule\empty
+ {\let\CF_nextaction\endgroup
+ }
+ {% ce qui reste après le noeud courant n'est pas vide, ne commence pas par "-=~", ni par une parenthèse
+ \CF_ifx*\CF_toksa% un cycle ?
+ {\ifnum\CF_lastaction=2
+ \CF_insertemptygroup\CF_molecule% insère un groupe vide
+ \else
+ \ifCF_incycle
+ \def\CF_lastaction{3}%
+ \fi% on était dans un cycle
+ \ifnum\CF_lastaction=3
+ \let\CF_lastcyclenum\CF_cyclenum
+ \fi
+ \CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_molecule}*%
+ {\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enlève la 1er étoile
+ \CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_molecule}[% un crochet ensuite ?
+ {\expandafter\CF_cycleparsepreamblewithoptarg\CF_molecule\_nil% \begingroup inclus
+ }%
+ {\def\CF_cyclearcstartangle{0}\def\CF_cyclearcendangle{360}%
+ \let\CF_cyclearcdirecttikz\empty
+ \expandafter\CF_cycleparsepreamble\CF_molecule\_nil% \begingroup inclus
+ }%
+ \CF_cyclearctrue
+ }%
+ {\expandafter\CF_cycleparsepreamble\CF_molecule\_nil% \begingroup inclus
+ \CF_cyclearcfalse
+ }%
+ \CF_cntcycle0
+ \edef\CF_hookcycle{\CF_bondoutnode}%
+ \let\CF_hookatomgroup\CF_previousatomgroup
+ \CF_ifx\CF_hookatomgroup\CF_emptynode
+ {\def\CF_cyclejoinlast{1}}% joindre le dernier
+ {\def\CF_cyclejoinlast{0}}
+ \CF_incycletrue
+ \ifnum\CF_lastaction=3
+ \pgfmathsetmacro\CF_initcycleangle{360/\CF_lastcyclenum-180}% c'est un cycle dans un cycle
+ \else
+ \pgfmathsetmacro\CF_initcycleangle{-180/\CF_cyclenum-90+\CF_cycleanglecorrection}%
+ \fi
+ \aftergroup\CF_chemfigd
+ \def\CF_nextaction{\CF_expsecond\CF_chemfigc{\CF_molinparen}}%
+ \fi
+ }%
+ {\CF_error{something went wrong here: \detokenize\expandafter{\CF_molecule}^^JIf you think it's a bug, please, send a Minimal Example to the author}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ {\CF_expthreemacroargs\CF_drawatomgroup\CF_currentangle\CF_currenttoatom\CF_currentatomgroup
+ }%
+ }%
+ \CF_nextaction
+}
+
+\def\CF_cycleparsepreamble*#1#2\_nil{%
+ \ifnum#1<3
+ \CF_error{a cycle must be at least a triangle.^^JThe number following "*" must be 3 or more}%
+ \fi
+ \def\CF_molecule{#2}%
+ \CF_expsecond\CF_grabsubmol{\CF_molecule}%
+ \begingroup
+ \def\CF_cyclenum{#1}%
+}
+
+\def\CF_cycleparsepreamblewithoptarg*[#1]#2#3\_nil{%
+ \CF_cycleparseoptarg#1,\empty,\empty,\empty\_nil
+ \CF_cycleparsepreamble*#2#3\_nil
+}
+
+\def\CF_cycleparseoptarg#1,#2,#3\_nil{%
+ \CF_ifempty{#1}
+ {\def\CF_cyclearcstartangle{0}}
+ {\def\CF_cyclearcstartangle{#1}}%
+ \CF_ifempty{#2}
+ {\def\CF_cyclearcendangle{360}}
+ {\def\CF_cyclearcendangle{#2}}%
+ \CF_expsecond{\def\CF_cyclearcdirecttikz}{\CF_sanitizelastitem#3,\empty\_nil}%
+}
+
+\def\CF_grabsubmol#1{%
+ \begingroup
+ \catcode`(1 \catcode`)2
+ \CF_threeea
+ \endgroup
+ \expandafter\CF_grabsubmola\scantokens{\relax#1}%
+}
+
+\def\CF_grabsubmola#1\_nil{%
+ \expandafter\CF_assigntonil\expandafter\CF_molecule\scantokens\CF_threeea{\expandafter\CF_gobarg \CF_gobarg#1}%
+ \expandafter\CF_assigntonil\expandafter\CF_molinparen\scantokens\CF_threeea{\expandafter\CF_firsttonil\CF_gobarg#1\_nil}%
+}
+
+\def\CF_ifcarisupperletter#1{%
+ \ifcat\relax\noexpand#1%
+ \let\CF_next\CF_execsecond% faux si c'est une sc
+ \else
+ \ifnum`#1<`A
+ \let\CF_next\CF_execsecond
+ \else
+ \ifnum`#1>`Z
+ \let\CF_next\CF_execsecond
+ \else
+ \let\CF_next\CF_execfirst
+ \fi
+ \fi
+ \fi
+ \CF_next
+}
+
+% Créé 4 noeuds au dessus et au dessous des noeuds #1 et #2
+% à une distance de #3 du noeud #1 et #4 du noeud #2
+\def\CF_createnormnodes#1#2#3#4{%
+ \CF_doifnotempty{#3}
+ {\node[shape=coordinate,at=(#1),xshift=#3*\CF_normx,yshift=#3*\CF_normy](#11){};
+ \node[shape=coordinate,at=(#1),xshift=-#3*\CF_normx,yshift=-#3*\CF_normy](#12){};
+ }%
+ \CF_doifnotempty{#4}
+ {\node[shape=coordinate,at=(#2),xshift=#4*\CF_normx,yshift=#4*\CF_normy](#21){};
+ \node[shape=coordinate,at=(#2),xshift=-#4*\CF_normx,yshift=-#4*\CF_normy](#22){};
+ }%
+}
+
+\def\CF_computenodevect#1#2{%
+ \pgfextractx\CF_dim{\pgfpointanchor{#1}{center}}\edef\CF_dimax{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#1}{center}}\edef\CF_dimay{\the\CF_dim}%
+ \pgfextractx\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimbx{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimby{\the\CF_dim}%
+ \pgfmathsetmacro\CF_vectorlen{veclen(\CF_dimbx-\CF_dimax,\CF_dimby-\CF_dimay)}%
+ \pgfmathsetmacro\CF_normx{(\CF_dimay-\CF_dimby)/\CF_vectorlen}%
+ \pgfmathsetmacro\CF_normy{(\CF_dimbx-\CF_dimax)/\CF_vectorlen}%
+}
+
+\def\CF_setoffset#1#2{%
+ \CF_doifempty#1%
+ {\edef#1{%
+ \ifx#2\CF_emptynode
+ 0pt%
+ \else
+ \ifx#2\empty
+ 0pt%
+ \else
+ \CF_bondoffset
+ \fi
+ \fi}%
+ }%
+}
+
+\def\CF_drawbond#1#2#3#4#5{% #1=type de liaison #2 et #3:nom de noeuds de début et fin #4 et #5: contenu des atomes de début et fin
+ \CF_setoffset\CF_startoffset#4%
+ \CF_setoffset\CF_endoffset#5%
+ \let\CF_currentbondstyle\CF_bondstyle
+ \CF_doifnotempty\CF_currenttikz{\CF_eaddtomacro\CF_currentbondstyle{\expandafter,\CF_currenttikz}}%
+ \path(#2)--(#3)coordinate[pos=0](#2@)coordinate[pos=1](#3@);%
+ \CF_computenodevect{#2@}{#3@}%
+ \pgfmathsetmacro\CF_startcoeff{\CF_startoffset/\CF_vectorlen}%
+ \pgfmathsetmacro\CF_endcoeff{1-\CF_endoffset/\CF_vectorlen}%
+ \path(#2@)--(#3@)coordinate[pos=\CF_startcoeff](#2@@)coordinate[pos=\CF_endcoeff](#3@@);%
+ \CF_doifnotempty\CF_movebondname% on doit poser un noeud sur la liaison
+ {\path(#2@@)--(#3@@)coordinate[overlay,pos=\CF_movebondcoeff](\CF_movebondname);
+ \let\CF_movebondname\empty
+ }%
+ \ifcase#1\relax
+ \CF_error{unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
+ \or% 1 = liaison simple
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe
+ \or% 2 = liaison double
+ \ifCF_incycle
+ \ifnum\CF_doublebondtype=0
+ \def\CF_doublebondtype{1}%
+ \fi
+ \ifnum\CF_flipstate>0
+ \def\CF_doublebondtype{2}%
+ \fi
+ \pgfmathsetmacro\CF_doublebondlengthcorrection{\CF_doublesep*tan(180/\CF_cyclenum)}%
+ \fi
+ \ifcase\CF_doublebondtype
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_doublesep/2}{\CF_doublesep/2}%
+ \CF_drawbonda(#2@@1)--(#3@@1);
+ \CF_drawbonda(#2@@2)--(#3@@2);
+ \let\CF_joinbond\CF_zero
+ \or
+ \CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
+ \begingroup% ajuste éventuellement les longueurs des liaisons doubles
+ \ifCF_incycle
+ \ifdim\CF_startoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten <=\CF_doublebondlengthcorrection pt}%
+ \fi
+ \ifdim\CF_endoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten >=\CF_doublebondlengthcorrection pt}%
+ \fi
+ \fi
+ \CF_drawbonda(#2@@1)--(#3@@1);
+ \endgroup
+ \or
+ \CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
+ \begingroup% ajuste éventuellement les longueurs des liaisons doubles
+ \ifCF_incycle
+ \ifdim\CF_startoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten \ifnum\CF_flipstate=0 <=-\else>=\fi\CF_doublebondlengthcorrection pt}%
+ \fi
+ \ifdim\CF_endoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten \ifnum\CF_flipstate=0 >=-\else<=\fi\CF_doublebondlengthcorrection pt}%
+ \fi
+ \fi
+ \CF_drawbonda(#2@@2)--(#3@@2);
+ \endgroup
+ \fi
+ \or% 3 = liaison triple
+ \CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
+ \CF_drawbonda(#2@@1)--(#3@@1);
+ \CF_drawbonda(#2@@2)--(#3@@2);
+ \or% 4 = liaison Cram pleine de #2 vers #3
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\filldraw[}\CF_currentbondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \or% 5 = liaison Cram creuse de #3 vers #2
+ \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\filldraw[}\CF_currentbondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \or% 6 = liaison Cram pointillée de #2 vers #3
+ \scope
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
+ \CF_clipcramornot(#2@@1)--(#2@@2)--(#3@@)--(#2@@1);
+ \CF_expafter{\draw[}\CF_currentbondstyle,dash pattern=on \CF_cramdashlength off \CF_cramdashsep,line width=\CF_crambasewidth](#2@@)--(#3@@);
+ \endscope
+ \let\CF_joinbond\CF_zero
+ \or% 7 = liaison Cram pointillée de #3 vers #2
+ \scope
+ \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
+ \CF_clipcramornot(#3@@1)--(#3@@2)--(#2@@)--(#3@@1);
+ \CF_expafter{\draw[}\CF_currentbondstyle,dash pattern=on \CF_cramdashlength off \CF_cramdashsep,line width=\CF_crambasewidth](#3@@)--(#2@@);
+ \endscope
+ \let\CF_joinbond\CF_zero
+ \or% 8 = liaison cram rectangle évidé de #2 vers #3
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\draw[}\CF_currentbondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \or% 9 = liaison cram rectangle évidé de #3 vers #1
+ \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\draw[}\CF_currentbondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \else
+ \CF_error{unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
+ \fi
+ \let\CF_startoffset\empty
+ \let\CF_endoffset\empty
+ \let\CF_previoustikz\CF_currenttikz
+ \let\CF_previousbondangle\CF_previousangle
+ \def\CF_previousbond{#1}%
+}
+
+\def\CF_drawaxisbondnojoin#1#2{\CF_drawbonda(#1@@)--(#2@@);}
+
+\def\CF_drawaxisbondjoin#1#2{% dessine une liaison simple dans l'axe avec raccord rétrograde
+ \ifCF_incycle\ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \let\CF_nexttikz\CF_cyclefirsttikz
+ \fi\fi
+ \ifnum\CF_joinbond=0
+ \ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \ifnum\CF_cyclejoinlast=1
+ \CF_drawbonda(#1@@)--(#2@@)--%
+ ([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \def\CF_joinbond{1}%
+ \else
+ \CF_ifx\CF_previoustikz\CF_currenttikz
+ {\def\CF_joinbond{1}%
+ \CF_ifx\CF_previousatomgroup\CF_emptynode
+ {\CF_ifx\CF_previousbondangle\empty% si début molécule
+ {\CF_drawbonda(#1@@)--(#2@@);
+ }
+ {\ifdim\CF_startoffset=0pt
+ \ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \ifnum\CF_cyclejoinlast=1
+ \CF_ifx\CF_cyclefirsttikz\CF_currenttikz
+ {\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@)--%
+ ([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);
+ }
+ {\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ }%
+ \else
+ \CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ }%
+ }
+ {\CF_drawbonda(#1@@)--(#2@@);}%
+ }
+ {\ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \ifnum\CF_cyclejoinlast=1
+ \CF_ifx\CF_nexttikz\CF_currenttikz
+ {\CF_drawbonda(#1@@)--(#2@@)--([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);}%
+ {\CF_drawbonda(#1@@)--(#2@@);}%
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ }%
+ \fi
+ \ifdim\CF_endoffset=0pt \else
+ \let\CF_joinbond\CF_zero
+ \fi
+}
+
+\def\CF_drawbonda{\CF_expafter{\draw[}\CF_currentbondstyle]}
+
+\def\CF_hookdrawall{% dessine tous les crochets contenus dans la sc \CF_hookdraw
+ \CF_doifnotempty\CF_hookdrawlist
+ {\expandafter\CF_hookdrawfirst\CF_hookdrawlist\_nil% trace un lien de crochet à crochet
+ \CF_hookdrawall
+ }%
+}
+
+\def\CF_hookdrawfirst[#1,#2,#3]#4#5#6#7#8\_nil{%
+ \def\CF_hookdrawlist{#8}%
+ \begingroup
+ \let\CF_joinbond\CF_zero
+ \def\CF_currenttikz{#3}%
+ \def\CF_hookstartcontent{#6}\def\CF_hookendcontent{#7}%
+ \CF_ifinteger{#2}%
+ {\CF_drawbond{#2}{#4}{#5}\CF_hookstartcontent\CF_hookendcontent
+ }%
+ {\CF_assignbondcode{#2}\CF_bondcurrentnum
+ \CF_drawbond\CF_bondcurrentnum{#4}{#5}\CF_hookstartcontent\CF_hookendcontent
+ }%
+ \endgroup
+}
+
+\def\CF_extractatom#1-#2\_nil{#2}% transforme le bound@outnode en n° de l'atome
+
+\def\CF_gobblemovearg @#1#2\_nil#3{%
+ \expandafter\def\csname atom_\number\CF_cntatom\endcsname{#2}%
+ \CF_ifinstr{#1},%
+ {\CF_analysemovearg#1\_nil#3\let\CF_movebondcoeff\empty}%
+ {\def#3{#1}}%
+ \CF_doifempty{#2}{\let\CF_nodestrut\empty}%
+}%
+
+\def\hflipnext{\def\CF_flipstate{1}}
+
+\def\vflipnext{\def\CF_flipstate{2}}
+\let\CF_flipstate\CF_zero
+
+\def\CF_drawatomgroup#1#2#3{% #1=angle d'arrivée de la liaison #2=numero atome sur lequel arrive la liaison #3=groupe d'atomes
+ \expandafter\let\expandafter\CF_bondoutcontent% assigne le contenu de l'atome d'où part la liaison
+ \csname
+ \ifdefined\CF_bondoutnode
+ atom_\expandafter\CF_extractatom\CF_bondoutnode\_nil
+ \else
+ empty%
+ \fi
+ \endcsname
+ \global\advance\CF_cntgroup1
+ \let\CF_currentatom\empty
+ \global\let\CF_hookdrawlist\empty
+ \CF_cntatomgroup0
+ \CF_iffirsttokmatch{#3}?
+ {\CF_drawatomgroupa{{}#3}}
+ {\CF_drawatomgroupa{#3}}%
+ \def\CF_currentatomgroup{#3}%
+ \CF_removemovearg\CF_currentatomgroup% enlève les "@{<nom>}"
+ \CF_ifinstr{#3}?%
+ {\CF_removehook\CF_currentatomgroup
+ \ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_currentatomgroup}\relax
+ \let\CF_currentatomgroup\CF_emptynode
+ \fi
+ }%
+ {}%
+ \CF_doifnotempty{#2}
+ {\ifnum#2<1
+ \CF_warning{no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
+ \else
+ \ifnum#2>\CF_cntatomgroup
+ \CF_error{no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
+ \fi
+ \fi
+ }%
+ \edef\CF_hookatomnumber{%
+ \CF_ifempty{#2}
+ {\ifdim#1pt>90pt
+ \ifdim#1pt<270pt
+ \number\CF_cntatomgroup
+ \else
+ 1%
+ \fi
+ \else
+ 1%
+ \fi
+ }
+ {#2%
+ }%
+ }%
+ \CF_cntatom\CF_hookatomnumber
+ \CF_ifx\CF_currentatomgroup\CF_emptynode
+ {\let\CF_nodestrut\empty
+ }
+ {\CF_ifx\empty\CF_bondoutcontentsaved
+ {\def\CF_nodestrut{\vphantom\CF_bondoutcontent}}%
+ {\def\CF_nodestrut{\vphantom\CF_bondoutcontentsaved}}%
+ }%
+ \edef\CF_optstring{anchor=\ifnum\CF_lastaction=0 base\else\ifCF_incycle center\else\ifCF_macrofixedbondlength 180+#1\else center\fi\fi\fi,at=(CF_node),\CF_nodestyle}% premier atome de la molécule affiché
+ \loop
+ \unless\ifnum\CF_cntatom>\CF_cntatomgroup
+ \CF_eexpafter
+ {\futurelet\CF_toksa}
+ {\expandafter\expandafter\expandafter\CF_gobtonil\csname atom_\number\CF_cntatom\endcsname\_nil}%
+ \CF_ifx @\CF_toksa% l'atome courant commence par un "@"
+ {\CF_threeea\CF_gobblemovearg\csname atom_\number\CF_cntatom\endcsname\_nil\CF_moveatomname
+ \CF_expafter{\node[}\CF_optstring,overlay](\CF_moveatomname){\phantom{\CF_nodecontent}};%
+ \let\CF_moveatomname\empty
+ }
+ {}%
+ \CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+ \let\CF_nodestrut\empty
+ \advance\CF_cntatom1
+ \edef\CF_optstring{anchor=base \ifnum\CF_flipstate=1 east\else west\fi,at=(n\number\CF_cntgroup-\number\numexpr\CF_cntatom-1.base \ifnum\CF_flipstate=1 west\else east\fi),\CF_nodestyle}%
+ \repeat
+ \CF_cntatom\CF_hookatomnumber
+ \ifnum\CF_lastaction=2 % s'il faut tracer une liaison
+ \gdef\CF_cycleanglecorrection{0}% alors c'est qu'un cycle ne peut pas commencer la molécule : annulation de la correction d'angle
+ \CF_drawbond\CF_bondtype{\CF_bondoutnode}{n\number\CF_cntgroup-\number\CF_cntatom}\CF_previousatomgroup\CF_currentatomgroup
+ \fi
+ \def\CF_lastaction{1}% met la dernière action à 1 : affichage d'un noeud
+ \loop
+ \ifnum\CF_cntatom>1
+ \advance\CF_cntatom-1
+ \edef\CF_optstring{anchor=base \ifnum\CF_flipstate=1 west\else east\fi,at=(n\number\CF_cntgroup-\number\numexpr\CF_cntatom+1.base \ifnum\CF_flipstate=1 east\else west\fi),\CF_nodestyle}%
+ \CF_eexpafter
+ {\futurelet\CF_toksa}
+ {\expandafter\expandafter\expandafter\CF_gobtonil\csname atom_\number\CF_cntatom\endcsname\_nil}%
+ \CF_ifx @\CF_toksa% l'atome courant commence par un "@"
+ {\CF_threeea\CF_gobblemovearg\csname atom_\number\CF_cntatom\endcsname\_nil\CF_moveatomname
+ \CF_expafter{\node[}\CF_optstring,overlay](\CF_moveatomname){\phantom{\CF_nodecontent}};%
+ \let\CF_moveatomname\empty
+ }
+ {}%
+ \CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+ \repeat
+ \CF_hookdrawall
+ \edef\CF_lastgroupnumber{\number\CF_cntgroup}%
+ \let\CF_previousatomgroup\CF_currentatomgroup
+}
+
+\def\CF_keepmovearg @#1#2\_nil{\def\CF_currentatom{@{#1}}}
+
+\def\CF_drawatomgroupa#1{% transforme #1 en un groupe d'atomes
+ \CF_ifempty{#1}
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ }
+ {\advance\CF_cntatomgroup1
+ \futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \CF_ifx @\CF_toksa
+ {\CF_keepmovearg#1\_nil
+ \CF_removemovearga#1\_nil\CF_aftermovearg
+ \CF_expsecond\CF_drawatomgroupb{\CF_aftermovearg}%
+ }%
+ {\let\CF_currentatom\empty
+ \CF_drawatomgroupb{#1}%
+ }%
+ }%
+}
+
+\def\CF_drawatomgroupb#1{%
+ \CF_ifempty{#1}
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ }
+ {\futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \CF_ifx\bgroup\CF_toksa
+ {\CF_eaddtomacro\CF_currentatom{\expandafter{\CF_firsttonil#1\_nil}}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ {\CF_ifx\CF_sptoken\CF_toksa
+ {\CF_addtomacro\CF_currentatom{ }%
+ \CF_expsecond\CF_drawatomgroupba{\CF_afterspace#1\_nil}%
+ }%
+ {\CF_eaddtomacro\CF_currentatom{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ }%
+ }%
+}
+
+% enlève tous les "@{nom}" de la sc #1
+\def\CF_removemovearg#1{%
+ \CF_expsecond\CF_ifinstr{#1}@%
+ {\expandafter\CF_removemovearga#1\_nil#1%
+ \CF_removemovearg#1%
+ }%
+ {}%
+}
+
+% enlève le premier "@{<nom>}" de l'argument et l'assigne à #2
+\def\CF_removemovearga#1\_nil#2{%
+ \def\CF_removemoveargb##1@{%
+ \CF_expsecond{\def#2}{\CF_gobarg##1}% mange le \relax
+ \CF_removemoveargc\relax
+ }%
+ \def\CF_removemoveargc##1\_nil{\CF_eaddtomacro#2{\CF_gobtwoargs##1}}% mange le \relax et le <nom>
+ \CF_removemoveargb\relax#1\_nil
+}
+
+\def\CF_drawatomgroupba#1{% transforme #1 en un groupe d'atomes
+ \CF_ifempty{#1}
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ }
+ {\futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \CF_ifx @\CF_toksa
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ \CF_drawatomgroupa{#1}%
+ }%
+ {\CF_ifx|\CF_toksa
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ \CF_expsecond\CF_drawatomgroupa{\CF_gobarg#1}%
+ }%
+ {\CF_ifx\CF_sptoken\CF_toksa
+ {\CF_addtomacro\CF_currentatom{ }%
+ \CF_expsecond\CF_drawatomgroupba{\CF_afterspace#1\_nil}%
+ }%
+ {\CF_ifx\bgroup\CF_toksa
+ {\CF_eaddtomacro\CF_currentatom{\expandafter{\CF_firsttonil#1\_nil}}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ {\CF_expsecond\CF_ifcarisupperletter{\CF_firsttonil#1\_nil}%
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ \CF_drawatomgroupa{#1}%
+ }%
+ {\CF_ifx?\CF_toksa
+ {\CF_expsecond\CF_iffirsttokmatch{\CF_gobarg#1}[% un crochet après le "?"
+ {\expandafter\CF_graboptarg\CF_gobarg#1\_nil\CF_afterhook}%
+ {\CF_expafter{\CF_graboptarg[]}{\CF_gobarg#1}\_nil\CF_afterhook}%
+ \CF_exptwomacroargs\CF_ifinstr{\CF_hooklist}{\expandafter(\CF_hookcurrentname)}% crochet déjà défini ?
+ {\CF_expsecond\CF_hookparselist{\CF_hookcurrentname}% chercher les caractéristiques du crochet sauvegardé
+ \CF_edefaddtomacro\CF_hookdrawlist{%
+ [\CF_hookcurrentname,\CF_hookcurrentlink,\CF_hookcurrenttikz]{\CF_hooksavedcoord}{n\number\CF_cntgroup-\number\CF_cntatomgroup}}%
+ \CF_eaddtomacro\CF_hookdrawlist{\expandafter{\CF_hooksavedcontent}}%
+ \CF_eaddtomacro\CF_hookdrawlist{\expandafter{\CF_currentatom}}% ajoute les 4 arguments à la liste des crochets à tracer
+ \global\let\CF_hookdrawlist\CF_hookdrawlist
+ }%
+ {\CF_edefaddtomacro\CF_hooklist{(\CF_hookcurrentname)|n\number\CF_cntgroup-\number\CF_cntatomgroup|}%
+ \CF_eaddtomacro\CF_hooklist{\CF_currentatom|}%
+ \global\let\CF_hooklist\CF_hooklist
+ }%
+ \CF_expsecond\CF_drawatomgroupba{\CF_afterhook}%
+ }%
+ {\CF_eaddtomacro\CF_currentatom{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+
+\def\CF_kookdefaultname{a}
+\def\CF_hookdefaultlink{-}
+\def\CF_hookdefaulttikz{}
+
+\def\CF_hookparseoptarg#1,#2,#3\_nil{%
+ \CF_testemptyandassign\CF_hookcurrentname{#1}\CF_kookdefaultname
+ \CF_testemptyandassign\CF_hookcurrentlink{#2}\CF_hookdefaultlink
+ \CF_testemptyandassign\CF_hookcurrenttikz{#3}\CF_hookdefaulttikz
+}
+
+\def\CF_graboptarg[#1]#2\_nil#3{%
+ \CF_hookparseoptarg#1,,\_nil
+ \def#3{#2}%
+}
+
+\def\CF_hookparselist#1{% #1 est le nom du noeud à retrouver
+ \def\CF_hookparselista##1(#1)|##2|##3|##4\_nil{\def\CF_hooksavedcoord{##2}\def\CF_hooksavedcontent{##3}}%
+ \expandafter\CF_hookparselista\CF_hooklist\_nil
+}
+
+\def\CF_removehook#1{%
+ \CF_expsecond\CF_ifinstr{#1}?%
+ {\CF_expafter{\CF_removehooka\relax}#1\_nil#1%
+ \CF_removehook#1%
+ }
+ {}%
+}
+
+\def\CF_removehooka#1?#2\_nil#3{%
+ \CF_iffirsttokmatch{#2}[%
+ {\CF_removehookb#1?#2\_nil#3}
+ {\CF_expsecond{\def#3}{\CF_gobarg#1#2}}%
+}
+
+\def\CF_removehookb#1?[#2]#3\_nil#4{\CF_expsecond{\def#4}{\CF_gobarg#1#3}}
+
+\def\Lewis{%
+ \CF_lewisoverlayfalse
+ \CF_testopt\CF_lewisa{}%
+}
+
+\def\lewis{%
+ \CF_lewisoverlaytrue
+ \CF_testopt\CF_lewisa{}%
+}
+
+\def\CF_lewisa[#1]{%
+ \begingroup
+ \CF_doifnotempty{#1}{\setchemfig{#1}}%
+ \CF_valuetomacro\CF_lewiswidthdouble[0.3ex]{lewis | width}%
+ \CF_valuetomacro\CF_lewisoffset [0.4ex]{lewis sep}%
+ \CF_valuetomacro\CF_lewislength [1.5ex]{lewis length}%
+ \CF_valuetomacro\CF_lewisstyle []{lewis style}%
+ \CF_valuetomacro\CF_lewisdist [0.3em]{lewis dist}%
+ \CF_valuetomacro\CF_lewisradius [0.15ex]{lewis radius}%
+ \CF_valuetomacro\CF_lewisdiagcoeff [1]{lewis diag coeff}%
+ \ifCF_lewisoverlay
+ \CF_addtomacro\CF_lewisstyle{,overlay}%
+ \fi
+ \CF_lewisb
+}
+
+\def\CF_lewisb#1{%
+ \CF_lewisc#1\_nil
+ \endgroup
+}
+
+\def\CF_lewisc#1,#2\_nil{%
+ \setbox\CF_boxlewis\hbox{\printatom{#2}}% mettre en dehors de tikzpicture (si \printatom ne passe pas en mode math)
+ \tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
+ \CF_makeother;\CF_makeother:%
+ \node(CF_lewis@anchor){};
+ \def\CF_lewisremainpos{#1}%
+ \let\CF_lewispreviouspos\empty
+ \loop
+ \unless\ifx\CF_lewisremainpos\empty
+ \edef\CF_lewiscurrentpos{\expandafter\CF_firsttonil\CF_lewisremainpos\_nil}%
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \pgfmathsetmacro\CF_lewisx{\wd\CF_boxlewis/2+\ifcase\CF_lewiscurrentpos\space1\or1\or0\or-1\or-1\or-1\or0\or1\fi*(\wd\CF_boxlewis/2)}%
+ \pgfmathsetmacro\CF_lewisy{\ht\CF_boxlewis/2+\ifcase\CF_lewiscurrentpos\space0\or1\or1\or1\or0\or-1\or-1\or-1\fi*(\ht\CF_boxlewis/2\ifnum\CF_lewiscurrentpos>4 +\dp\CF_boxlewis\fi)}%
+ \edef\CF_lewisxoffset{\ifcase\CF_lewiscurrentpos\space1\or0.70711\or0\or-0.70711\or-1\or-0.70711\or0\or0.70711\fi}%
+ \edef\CF_lewisyoffset{\ifcase\CF_lewiscurrentpos\space0\or0.70711\or1\or0.70711\or0\or-0.70711\or-1\or-0.70711\fi}%
+ \ifodd\CF_lewiscurrentpos\relax
+ \pgfmathsetmacro\CF_lewiscurrentoffset{\CF_lewisoffset*\CF_lewisdiagcoeff}%%
+ \else
+ \let\CF_lewiscurrentoffset\CF_lewisoffset
+ \fi
+ \if.\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \CF_expafter{\draw[fill,black,}{\CF_lewisstyle]}%
+ (\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset,\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset)circle(\CF_lewisradius);%
+ \else
+ \if|\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
+ \pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
+ \CF_expafter{\draw[}\CF_lewisstyle]%
+ (\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt)--
+ (\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt+\CF_lewisxoffset*\CF_lewiswidthdouble,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt+\CF_lewisyoffset*\CF_lewiswidthdouble)--
+ (\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt+\CF_lewisxoffset*\CF_lewiswidthdouble,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt+\CF_lewisyoffset*\CF_lewiswidthdouble)--
+ (\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt)--cycle;%
+ \else
+ \if:\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
+ \pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
+ \CF_expafter{\draw[fill,black,}{\CF_lewisstyle]}%
+ (\CF_lewisx pt+\CF_lewisdist*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewisdist*\CF_lewisxoffset/2 pt)circle(\CF_lewisradius)%
+ (\CF_lewisx pt-\CF_lewisdist*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewisdist*\CF_lewisxoffset/2 pt)circle(\CF_lewisradius);%
+ \else
+ \pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
+ \pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
+ \CF_expafter{\draw[}\CF_lewisstyle]%
+ (\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt)--%
+ (\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt);%
+ \fi
+ \fi
+ \fi
+ \repeat
+ \node[anchor=base west]at(CF_lewis@anchor){\box\CF_boxlewis};%
+ \endtikzpicture
+}
+
+\def\Chembelow{\begingroup\let\CF_temp\CF_gobarg\CF_chembelowa}
+
+\def\chembelow{\begingroup\let\CF_temp\CF_id\CF_chembelowa}
+
+\def\CF_chembelowa{\CF_testopt\CF_chembelowb\CF_stacksep}
+
+\def\CF_chembelowb[#1]#2#3{%
+ \setbox\CF_box\hbox{\printatom{#2}}%
+ \expandafter\vtop\CF_temp{to\ht\CF_box}{%
+ \offinterlineskip
+ \hbox{\printatom{#2}}%
+ \kern#1\relax
+ \hbox to\wd\CF_box{\hss\printatom{#3}\hss}%
+ \CF_temp\vss
+ }%
+ \endgroup
+}
+
+\def\Chemabove{\begingroup\let\CF_temp\CF_gobarg\CF_chemabovea}
+
+\def\chemabove{\begingroup\let\CF_temp\CF_id\CF_chemabovea}
+
+\def\CF_chemabovea{\CF_testopt\CF_chemaboveb\CF_stacksep}
+
+\def\CF_chemaboveb[#1]#2#3{%
+ \setbox\CF_box\hbox{\printatom{#2}}%
+ \expandafter\vbox\CF_temp{to\ht\CF_box}{%
+ \offinterlineskip
+ \CF_temp\vss
+ \hbox to\wd\CF_box{\hss\printatom{#3}\hss}%
+ \kern#1\relax
+ \hbox{\printatom{#2}}%
+ }%
+ \endgroup
+}
+
+\def\chemmove{\CF_testopt\CF_chemmove{}}
+
+\def\CF_chemmove[#1]#2{%
+ \CF_doifnotempty{#2}%
+ {\expandafter\tikzpicture\expanded{[overlay,remember picture,-CF\CF_ifempty{#1}{}{,\unexpanded{#1}}]}%
+ #2%
+ \endtikzpicture
+ }%
+}
+
+\def\chemnameinit#1{%
+ \setbox\CF_boxstuff\hbox{#1}%
+ \xdef\CF_dpmax{\the\dp\CF_boxstuff}%
+}
+\let\CF_dpmax\CF_zero
+
+\def\CF_parsemolname#1\\#2\_nil{%
+ \hbox to\CF_wdstuffbox{\hss#1\hss}%
+ \CF_doifnotempty{#2}{\CF_parsemolname#2\_nil}%
+}
+
+\def\chemname{%
+ \CF_ifstar
+ {\CF_adjustnamedpfalse\CF_chemnamea}
+ {\CF_adjustnamedptrue \CF_chemnamea}%
+}
+
+\def\CF_chemnamea{\CF_testopt\CF_chemnameb{1.5ex}}
+
+\def\CF_chemnameb[#1]#2#3{%
+ \setbox\CF_boxstuff\hbox{#2}%
+ \edef\CF_wdstuffbox{\the\wd\CF_boxstuff}\edef\CF_dpstuffbox{\the\dp\CF_boxstuff}%
+ \leavevmode
+ \ifdim\CF_dpmax<\CF_dpstuffbox\global\let\CF_dpmax\CF_dpstuffbox\fi
+ \vtop{%
+ \box\CF_boxstuff
+ \nointerlineskip
+ \kern\dimexpr#1\ifCF_adjustnamedp+\CF_dpmax-\CF_dpstuffbox\fi\relax
+ \CF_parsemolname#3\\\_nil
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% S C H É M A S R É A C T I O N N E L S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\let\CF_schemenest\CF_zero
+
+\def\CF_subscheme{\CF_testopt\CF_subschemea{}}
+\def\CF_subschemea[#1]{\CF_testopt{\CF_subschemeb[#1]}{text}}
+\def\CF_subschemeb[#1][#2]#3{\schemestart[#1][#2]#3\schemestop}
+
+\def\chemleft#1#2\chemright#3{%
+ \leavevmode
+ \begingroup
+ \setbox0\hbox{$\vcenter{\hbox{}}$}\edef\CF_delimmathht{\the\ht0}%
+ \setbox0\hbox{#2}\edef\CF_delimdim{\the\dimexpr(\ht0+\dp0)/2}%
+ \edef\CF_delimshift{\the\dimexpr(\ht0-\dp0)/2-\CF_delimmathht}%
+ \raise\CF_delimshift\hbox{$\left#1\vrule height\CF_delimdim depth\CF_delimdim width0pt\right.$}\box0
+ \raise\CF_delimshift\hbox{$\left.\vrule height\CF_delimdim depth\CF_delimdim width0pt\right#3$}%
+ \endgroup
+}
+
+\def\chemright#1{%
+ \CF_warning{"\string\chemright\string#1" ignored! No \string\chemleft\space previously found.}%
+}
+
+\def\chemup#1#2\chemdown#3{%
+ \begingroup
+ \setbox0\hbox{\printatom{#2}}\edef\CF_delimdim{\the\dimexpr\wd0/2}%
+ \tikzpicture[every node/.style={inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
+ \node[anchor=base west](chem@stuff){\box0};%
+ \node[at=(chem@stuff.north),anchor=east,rotate=-90]{$\left#1\vrule height\CF_delimdim depth\CF_delimdim width0pt\right.$};%
+ \node[at=(chem@stuff.south),anchor=west,rotate=-90]{$\left.\vrule height\CF_delimdim depth\CF_delimdim width0pt\right#3$};%
+ \endtikzpicture
+ \endgroup
+}
+
+\def\chemdown#1{%
+ \CF_warning{"\string\chemdown\string#1" ignored! No \string\chemup\space previously found.}%
+}
+
+\def\CF_setstyle#1,#2,#3\_nil#4#5#6{%
+ \def#4{#1}\let#5\empty\let#6\empty
+ \CF_iffirsttokmatch\CF_quark{#2\relax}
+ {}%
+ {\def#5{#2}%
+ \CF_iffirsttokmatch\CF_quark{#3\relax}
+ {}%
+ {\CF_setstylea#3\_nil#6}%
+ }%
+}
+\def\CF_setstylea#1,\CF_quark#2\_nil#3{\def#3{#1}}
+
+\def\CF_and{\futurelet\CF_toksa\CF_anda}
+
+\def\CF_anda{%
+ \CF_ifx\CF_toksa\bgroup
+ {\CF_andb}
+ {\CF_andb{}}%
+}
+
+\def\CF_andb#1{%
+ \CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_signspaceante\CF_signspacepost\CF_signvshift
+ \CF_doifempty\CF_signspaceante{\CF_valuetomacro\CF_signspaceante[0.5em]{+ sep left}}%
+ \CF_doifempty\CF_signspacepost{\CF_valuetomacro\CF_signspacepost[0.5em]{+ sep right}}%
+ \CF_doifempty\CF_signvshift{\CF_valuetomacro\CF_signvshift[0pt]{+ vshift}}%
+ \raise\CF_signvshift\hbox{\kern\CF_signspaceante$+$\kern\CF_signspacepost}%
+}
+
+\def\schemestart{%
+ \begingroup
+ \xdef\CF_schemenest{\number\numexpr\CF_schemenest+1}%
+ \CF_testopt\CF_schemestarta{}%
+}
+
+\def\CF_schemestarta[#1]{%
+ \CF_valuetomacro\CF_defaultcompoundstyle[]{compound style}%
+ \CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_arrowangle\CF_arrowlength\CF_arrowstyle
+ \CF_doifempty\CF_arrowangle{\CF_valuetomacro\CF_arrowangle[0]{arrow angle}}%
+ \CF_doifempty\CF_arrowlength{\CF_valuetomacro\CF_arrowlength[1]{arrow coeff}}%
+ \CF_valuetomacro\CF_defaultarrowstyle[]{arrow style}%
+ \CF_valuetomacro\CF_arrowoffset[1em]{arrow offset}%
+ \CF_valuetomacro\CF_compoundsep[5em]{compound sep}%
+ \CF_valuetomacro\CF_arrowlabelsep[3pt]{arrow label sep}%
+ \CF_valuetomacro\CF_arrowhead[-CF]{arrow head}%
+ \CF_eexpsecond{\def\CF_arrowtip}{\expandafter\CF_gobarg\CF_arrowhead}%
+ \CF_eexpsecond{\CF_preaddtomacro\CF_defaultarrowstyle}{\useKV[chemfig]{arrow head},}%
+ \CF_ifx\empty\CF_arrowstyle
+ {\let\CF_arrowstyle\CF_defaultarrowstyle}
+ {\CF_expsecond{\CF_preaddtomacro\CF_arrowstyle}{\CF_defaultarrowstyle,}}% se rajoute après le style par défaut
+ \CF_valuetomacro\CF_arrowdoublesep[2pt]{arrow double sep}%
+ \pgfmathsetmacro\CF_arrowdoublesep{\CF_arrowdoublesep/2}%
+ \CF_valuetomacro\CF_arrowdoubleposstart[0.6]{arrow double coeff}%
+ \pgfmathsetmacro\CF_arrowdoubleposstart{(1-\CF_arrowdoubleposstart)/2}%
+ \pgfmathsetmacro\CF_arrowdoubleposend{1-\CF_arrowdoubleposstart}%
+ \ifboolKV[chemfig]{scheme debug}
+ {\tikzpicture[every node/.style={draw,anchor=base,inner sep=0pt,outer sep=0pt,minimum size=1.5pt},baseline,remember picture]}
+ {\tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline,remember picture]}%
+ \let\merge\CF_merge
+ \expandafter\let\csname+\endcsname\CF_and
+ \let\arrow\CF_arrow
+ \let\schemestop\CF_schemestop
+ \let\subscheme\CF_subscheme
+ \CF_testopt{\CF_schemestartb}{text}%
+}
+
+\def\CF_schemestartb[#1]{%
+ \ifnum\CF_schemenest=1 % la commande n'est pas imbriquée ?
+ \CF_cntcompound0
+ \fi
+ \edef\CF_currentnodename{c\number\CF_cntcompound}%
+ \let\CF_nextnodename\empty
+ \let\CF_nextnodestyle\empty
+ \let\CF_directarrowlist\empty
+ \ifboolKV[chemfig]{scheme debug}
+ {\node[fill,green](\CF_currentnodename){};}
+ {\node(\CF_currentnodename){};}%
+ \def\CF_nextnodeanchor{#1}%
+ \CF_doifempty\CF_nextnodeanchor{\def\CF_nextnodeanchor{text}}%
+ \let\CF_compound\empty
+ \CF_schemestartc
+}
+
+\def\CF_schemestartc{%
+ \futurelet\CF_toksa\CF_schemestarte
+}
+
+\expandafter\def\expandafter\CF_schemestartd\space{\futurelet\CF_toksa\CF_schemestarte}
+
+\def\CF_schemestarte{% ... et l'examine :
+ \CF_iffirsttokina{\arrow\schemestop\merge}%
+ {}
+ {\CF_ifx\CF_toksa\bgroup
+ {\CF_addnextarg
+ }
+ {\CF_ifx\CF_toksa\CF_sptoken
+ {\CF_addtomacro\CF_compound{ }%
+ \CF_schemestartd
+ }
+ {\afterassignment\CF_schemestartc
+ \CF_addtomacro\CF_compound
+ }%
+ }%
+ }%
+}
+
+\def\CF_addnextarg#1{\CF_addtomacro\CF_compound{{#1}}\CF_schemestartc}
+
+\def\CF_displaycompound#1#2{% #1 = nom et #2 = style
+ \CF_doifnotempty\CF_compound
+ {\global\advance\CF_cntcompound1
+ \CF_ifx\CF_defaultcompoundstyle\empty
+ {\let\CF_currentnodestyle\empty}
+ {\CF_expsecond{\def\CF_currentnodestyle}{\CF_defaultcompoundstyle,}}%
+ \CF_addtomacro\CF_currentnodestyle{anchor=\CF_nextnodeanchor,at=(\CF_currentnodename)}%
+ \CF_ifempty{#2}%
+ {\CF_doifnotempty\CF_nextnodestyle
+ {\CF_eaddtomacro\CF_currentnodestyle{\expandafter,\CF_nextnodestyle}}%
+ }
+ {\CF_doifnotempty\CF_nextnodestyle
+ {\CF_warning{two styles for the same node, first style "\CF_nextnodestyle" ignored}%
+ }%
+ \CF_addtomacro\CF_currentnodestyle{,#2}%
+ }%
+ \CF_ifempty{#1}
+ {\edef\CF_temp{%
+ \CF_ifempty\CF_nextnodename
+ {c\number\CF_cntcompound}
+ {\CF_nextnodename}%
+ }%
+ }
+ {\CF_doifnotempty\CF_nextnodename
+ {\CF_warning{two names for the same node, first name "\CF_nextnodename" ignored}%
+ }%
+ \edef\CF_temp{#1}%
+ }%
+ \CF_expafter{\node[}\CF_currentnodestyle](\CF_temp){\CF_compound};%
+ \ifboolKV[chemfig]{scheme debug}%
+ {\node[draw=none,anchor=270,at=(\CF_temp.90),fill=green!60,overlay,opacity=0.5]{\scriptsize\bfseries\CF_temp};%
+ }
+ {}%
+ \let\CF_currentnodename\CF_temp
+ }%
+}
+
+\def\CF_schemestop{%
+ \CF_displaycompound{}{}%
+ \CF_directarrowlist
+ \endtikzpicture
+ \xdef\CF_schemenest{\number\numexpr\CF_schemenest-1}%
+ \endgroup
+}
+
+\def\CF_analysearrowarg#1{\CF_analysearrowarga#1[]\_nil}
+
+\def\CF_analysearrowarga#1[#2]#3\_nil{%
+ \CF_ifinstr{#1}.
+ {\CF_addtomacro\CF_temp{#1[#2]}}
+ {\CF_addtomacro\CF_temp{#1.[#2]}}%
+}
+
+\def\CF_arrow{%
+ \CF_ifnextchar(%
+ {\CF_arrowa
+ }
+ {\CF_ifnextchar\bgroup
+ {\CF_arrowb(.[]--.[])}
+ {\CF_arrowb(.[]--.[]){}}%
+ }%
+}
+
+\def\CF_arrowa(#1--#2){%
+ \def\CF_temp{(}%
+ \CF_analysearrowarg{#1}%
+ \CF_addtomacro\CF_temp{--}%
+ \CF_analysearrowarg{#2}%
+ \CF_addtomacro\CF_temp)%
+ \CF_ifnextchar\bgroup
+ {\expandafter\CF_arrowb\CF_temp}
+ {\expandafter\CF_arrowb\CF_temp{}}%
+}
+
+\def\CF_arrowb(#1.#2[#3]--#4.#5[#6])#7{%
+ \def\CF_currentarrowtype{#7}% nom de la flèche
+ \CF_doifempty\CF_currentarrowtype{\def\CF_currentarrowtype{->}}%
+ \CF_testopt{\CF_arrowc(#1.#2[#3]--#4.#5[#6])}{}%
+}
+
+\def\CF_arrowc(#1.#2[#3]--#4.#5[#6])[#7]{%
+ \def\CF_temp{\CF_arrowe(#1.#2[#3]--#4.#5[#6])}%
+ \CF_arrowd#7,\empty,\empty\_nil
+}
+
+\def\CF_arrowd#1,#2,#3\_nil{%
+ \CF_addtomacro\CF_temp{{#1}}%
+ \CF_eaddtomacro\CF_temp{\expandafter{#2}}%
+ \expandafter\CF_eaddtomacro\expandafter\CF_temp\expandafter{\expandafter\expandafter\expandafter{\expandafter\CF_sanitizelastitem#3,\empty\_nil}}%
+ \CF_temp
+}
+
+% #1, #4 : nom des nodes #2, #5 : ancres des nodes #3, #6 : styles des nodes
+% #7 : angle flèche #8 : longueur flèche #9 : style tikz de la flèche
+\def\CF_arrowe(#1.#2[#3]--#4.#5[#6])#7#8#9{%
+ \let\CF_arrowcurrentstyle\CF_arrowstyle
+ \if @\expandafter\CF_firsttonil\detokenize{#1.}\_nil% si #1 commence par @
+ \if @\expandafter\CF_firsttonil\detokenize{#4.}\_nil
+ \CF_eaddtomacro\CF_directarrowlist{\expandafter\CF_directarrow\expandafter{\CF_currentarrowtype}{#1}{#2}{#4}{#5}{#9}}%
+ \let\CF_nextaction\CF_schemestartc
+ \else
+ \CF_doifnotempty\CF_arrowcurrentstyle{\CF_addtomacro\CF_arrowcurrentstyle,}%
+ \CF_doifnotempty{#9}{\CF_addtomacro\CF_arrowcurrentstyle{#9,}}%
+ \CF_displaycompound{}{#3}%
+ \def\CF_nextnodename{#4}%
+ \CF_expsecond{\def\CF_currentnodename}{\CF_gobarg#1}%
+ \let\CF_arrowstartname\CF_currentnodename
+ \let\CF_arrowendname\CF_nextnodename
+ \CF_arrowf{#7}{#8}{#2}{#5}%
+ \def\CF_nextnodestyle{#6}%
+ \fi
+ \else
+ \CF_doifnotempty\CF_arrowcurrentstyle{\CF_addtomacro\CF_arrowcurrentstyle,}%
+ \CF_doifnotempty{#9}{\CF_addtomacro\CF_arrowcurrentstyle{#9,}}%
+ \if @\expandafter\CF_firsttonil\detokenize{#2.}\_nil
+ \CF_error{syntax "(<name>--@<name>)" is not allowed}%
+ \else
+ \CF_displaycompound{#1}{#3}%
+ \edef\CF_arrowstartname{%
+ \CF_ifempty{#1}
+ \CF_currentnodename
+ {#1}%
+ \CF_doifnotempty{#2}{.#2}%
+ }%
+ \CF_arrowf{#7}{#8}{#2}{#5}%
+ \def\CF_nextnodename{#4}%
+ \def\CF_nextnodestyle{#6}%
+ \fi
+ \fi
+ \CF_arrowgobspaces% mange les espaces puis exécute \CF_nextaction
+}
+
+\def\CF_arrowgobspaces{\futurelet\CF_toksa\CF_arrowgobspacesa}
+
+\def\CF_arrowgobspacesa{%
+ \CF_ifx\CF_sptoken\CF_toksa
+ \CF_arrowgobspacesb
+ \CF_nextaction
+}
+
+\expandafter\def\expandafter\CF_arrowgobspacesb\space{\futurelet\CF_toksa\CF_arrowgobspacesa}
+
+\def\CF_arrowf#1#2#3#4{% #1=angle #2=longueur #3=ancre départ #4=ancre arrivée
+ \def\CF_nextaction{\let\CF_compound\empty\CF_schemestartc}%
+ \def\CF_arrowcurrentangle{#1}\CF_doifempty\CF_arrowcurrentangle{\let\CF_arrowcurrentangle\CF_arrowangle}%
+ \def\CF_currentarrowlength{#2}\CF_doifempty\CF_currentarrowlength{\let\CF_currentarrowlength\CF_arrowlength}%
+ \node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep),cyan,fill](end@arrow@i@\number\CF_schemenest){};%
+ \edef\CF_arrowendname{end@arrow@i@\number\CF_schemenest\CF_doifnotempty{#4}{.#4}}%
+ \ifboolKV[chemfig]{scheme debug}
+ {\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_arrowoffset),red,fill](start@arrow){};%
+ \node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep-\CF_arrowoffset),red,fill](end@arrow){};%
+ }
+ {\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_arrowoffset)](start@arrow){};%
+ \node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep-\CF_arrowoffset)](end@arrow){};%
+ }%
+ \def\CF_arrowstartnode{start@arrow}\def\CF_arrowendnode{end@arrow}%
+ \csname\expandafter\CF_grabarrowname\CF_currentarrowtype[\_nil\CF_threeea\endcsname
+ \expandafter\CF_grabarrowargs\CF_currentarrowtype[]\_nil[][][][][][][][]\_nil
+ \def\CF_currentnodename{end@arrow@i@\number\CF_schemenest}%
+ \edef\CF_nextnodeanchor{\CF_ifempty{#4}{180+\CF_arrowcurrentangle}{#4}}%
+}
+
+% trace un flèche initiée par (@nom--@nom)
+% #1=type de flèche #2=nom depart #3=ancre départ #4=nom arrivée #5=ancre arrivée #6=style flèche
+\def\CF_directarrow#1#2#3#4#5#6{%
+ \CF_expsecond{\def\CF_arrowstartname}{\CF_gobarg#2}%
+ \CF_expsecond{\def\CF_arrowendname}{\CF_gobarg#4}%
+ \path[sloped,allow upside down](\CF_gobarg#2\ifx\empty#3\empty\else.#3\fi)--(\CF_gobarg#4\ifx\empty#5\empty\else.#5\fi)%
+ coordinate[pos=0,xshift=\CF_arrowoffset](start@direct@arrow)%
+ coordinate[pos=1,xshift=-\CF_arrowoffset](end@direct@arrow);%
+ \def\CF_arrowstartnode{start@direct@arrow}%
+ \def\CF_arrowendnode{end@direct@arrow}%
+ \pgfmathanglebetweenpoints
+ {\pgfpointanchor{\CF_gobarg#2}{\ifx\empty#3\empty center\else#3\fi}}% Ne pas utiliser \CF_ifempty ici !!!
+ {\pgfpointanchor{\CF_gobarg#4}{\ifx\empty#5\empty center\else#5\fi}}%
+ \let\CF_arrowcurrentangle\pgfmathresult
+ \CF_doifnotempty{#6}{\CF_addtomacro\CF_arrowcurrentstyle{#6,}}%
+ \csname\CF_grabarrowname#1[]\_nil\expandafter\endcsname\CF_grabarrowargs#1[]\_nil[][][][][][][][]\_nil
+}
+
+\def\CF_mergegrabchardir#1[#2][#3]#4\_nil{%
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_firsttonil#1>\_nil}\_nil
+ \ifx>\CF_toksa
+ \def\CF_mergeangle{0}\def\CF_mergeextreme{xmax}\def\CF_mergesign{+}%
+ \else
+ \ifx<\CF_toksa
+ \def\CF_mergeangle{180}\def\CF_mergeextreme{xmin}\def\CF_mergesign{-}%
+ \else
+ \ifx^\CF_toksa
+ \def\CF_mergeangle{90}\def\CF_mergeextreme{ymax}\def\CF_mergesign{+}%
+ \else
+ \ifx v\CF_toksa
+ \def\CF_mergeangle{-90}\def\CF_mergeextreme{ymin}\def\CF_mergesign{-}%
+ \fi\fi\fi\fi
+ \def\CF_mergelabelup{#2}\def\CF_mergelabeldo{#3}%
+}
+
+\def\CF_merge#1({%
+ \CF_mergegrabchardir#1[][]\_nil
+ \CF_mergea(%
+}
+
+\def\CF_mergea#1--(#2){\CF_testopt{\CF_mergeb#1--(#2)}{}}
+
+\def\CF_mergeb#1--(#2)[#3]{%
+ \CF_displaycompound{}{}%
+ \CF_parsemergeopt#3,\CF_quark,\CF_quark,\CF_quark\_nil
+ \def\CF_mergexmax{-16383.99999pt}\let\CF_mergeymax\CF_mergexmax
+ \def\CF_mergexmin{16383.99999pt}\let\CF_mergeymin\CF_mergexmin
+ \CF_mergeparsenodelist#1(\relax)% calcule les maxi des positions
+ \pgfmathsetmacro\CF_mergeextremeresult{\csname CF_merge\CF_mergeextreme\endcsname\CF_mergesign\CF_mergefromcoeff*\CF_compoundsep}%
+ \CF_mergec#1(\relax)% trace les lignes entre les noeuds précédents et la ligne de jonction
+ \CF_expsecond{\def\CF_temp}{\expandafter[\CF_mergestyle,shorten <=0,shorten >=0,-]}%
+ \if x\expandafter\CF_firsttonil\CF_mergeextreme\_nil
+ \CF_addtomacro\CF_temp{(\CF_mergeextremeresult pt,\CF_mergeymax)--(\CF_mergeextremeresult pt,\CF_mergeymin)}%
+ \else
+ \CF_addtomacro\CF_temp{(\CF_mergexmin,\CF_mergeextremeresult pt)--(\CF_mergexmax,\CF_mergeextremeresult pt)}%
+ \fi
+ \expandafter\draw\CF_temp node[pos=\CF_mergesplitcoeff](merge@point){}% trace la ligne de jonction
+ node[at=(merge@point),shift=(\CF_mergeangle:\CF_compoundsep*\CF_mergetocoeff-\CF_arrowoffset)](end@merge){}%
+ node[at=(merge@point),shift=(\CF_mergeangle:\CF_compoundsep*\CF_mergetocoeff)](end@merge@i){};%
+ \let\CF_arrowcurrentangle\CF_mergeangle
+ \CF_expafter{\draw[}\CF_mergestyle,shorten <=0](merge@point)--(end@merge)%
+ \expandafter\CF_arrowdisplaylabela\expandafter{\CF_mergelabelup}{.5}+\expandafter\CF_arrowdisplaylabela\expandafter{\CF_mergelabeldo}{.5}-;%
+ \def\CF_currentnodename{end@merge@i}%
+ \let\CF_temp\empty
+ \CF_analysearrowarg{#2}%
+ \expandafter\CF_merged\CF_temp\_nil
+}
+
+\def\CF_mergec(#1){%
+ \if\relax\expandafter\noexpand\CF_firsttonil#1\_nil
+ \else
+ \CF_ifdot{#1}%
+ {\edef\merge_currentnodename{\CF_beforedot#1\_nil}%
+ \edef\merge_currentanchor{\CF_afterdot#1\_nil}%
+ }%
+ {\def\merge_currentnodename{#1}%
+ \let\merge_currentanchor\CF_mergeangle
+ }%
+ \if x\expandafter\CF_firsttonil\CF_mergeextreme\_nil
+ \pgfextracty\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \CF_expafter{\draw[}\CF_mergestyle,shorten >=0,-]([shift=(\CF_mergeangle:\CF_arrowoffset)]\merge_currentnodename.\merge_currentanchor)--(\CF_mergeextremeresult pt,\CF_dim);%
+ \else
+ \pgfextractx\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \CF_expafter{\draw[}\CF_mergestyle,shorten >=0,-]([shift=(\CF_mergeangle:\CF_arrowoffset)]\merge_currentnodename.\merge_currentanchor)--(\CF_dim,\CF_mergeextremeresult pt);%
+ \fi
+ \expandafter\CF_mergec
+ \fi
+}
+
+\def\CF_merged#1.#2[#3]\_nil{%
+ \def\CF_nextnodename{#1}%
+ \edef\CF_nextnodeanchor{%
+ \CF_ifempty{#2}
+ {180+\CF_mergeangle}
+ {#2}%
+ }%
+ \def\CF_nextnodestyle{#3}%
+ \let\CF_compound\empty
+ \CF_schemestartc
+}
+
+\def\CF_parsemergeopt#1,#2,#3,#4\_nil{%
+ \CF_ifempty{#1}
+ {\def\CF_mergefromcoeff{0.5}}
+ {\def\CF_mergefromcoeff{#1}}%
+ \def\CF_mergetocoeff{0.5}%
+ \def\CF_mergesplitcoeff{0.5}%
+ \CF_eexpsecond{\def\CF_mergestyle}{\useKV[chemfig]{arrow head}}%
+ \CF_iffirsttokmatch\CF_quark{#2\relax}
+ {}
+ {\CF_ifempty{#2}
+ {\def\CF_mergetocoeff{0.5}}
+ {\def\CF_mergetocoeff{#2}}%
+ \CF_iffirsttokmatch\CF_quark{#3\relax}
+ {}
+ {\CF_ifempty{#3}
+ {\def\CF_mergesplitcoeff{0.5}}
+ {\def\CF_mergesplitcoeff{#3}}%
+ \CF_iffirsttokmatch\CF_quark{#4\relax}
+ {}
+ {\CF_parsemergeopta#4\_nil}%
+ }%
+ }%
+}
+
+\def\CF_parsemergeopta#1,\CF_quark#2\_nil{%
+ \CF_ifempty{#1}
+ {}
+ {\CF_addtomacro\CF_mergestyle{,#1}}%
+}
+
+\def\CF_mergeparsenodelist(#1){%
+ \if\relax\expandafter\noexpand\CF_firsttonil#1\_nil
+ \else
+ \CF_ifdot{#1}%
+ {\edef\merge_currentnodename{\CF_beforedot#1\_nil}\edef\merge_currentanchor{\CF_afterdot#1\_nil}}%
+ {\def\merge_currentnodename{#1}\let\merge_currentanchor\CF_mergeangle}%
+ \pgfextractx\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \ifdim\CF_dim>\CF_mergexmax
+ \edef\CF_mergexmax{\the\CF_dim}%
+ \fi
+ \ifdim\CF_dim<\CF_mergexmin
+ \edef\CF_mergexmin{\the\CF_dim}%
+ \fi
+ \pgfextracty\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \ifdim\CF_dim>\CF_mergeymax
+ \edef\CF_mergeymax{\the\CF_dim}%
+ \fi
+ \ifdim\CF_dim<\CF_mergeymin
+ \edef\CF_mergeymin{\the\CF_dim}%
+ \fi
+ \expandafter\CF_mergeparsenodelist
+ \fi
+}
+
+\def\CF_grabarrowname#1[#2\_nil{\detokenize{CF_arrow(#1)}}
+\def\CF_grabarrowargs#1[#2\_nil{[#2}
+
+\def\CF_makeparametertext#1{%
+ \toks0{}%
+ \CF_cntgroup#1\relax
+ \CF_makeparametertexta1%
+}
+
+\def\CF_makeparametertexta#1{%
+ \unless\ifnum#1>\CF_cntgroup
+ \toks0\expandafter{\the\toks0[###1]}%
+ \expandafter\CF_makeparametertexta\expandafter{\number\numexpr#1+1\expandafter}%
+ \fi
+}
+
+% #1 est le nombre d'arguments optionnels, #2 est le nom et #3 le code
+\def\definearrow#1#2#3{%
+ \begingroup
+ \CF_makeparametertext{#1}%
+ \expandafter\endgroup
+ \expandafter\def\csname\detokenize{CF_arrow(#2)}\expandafter\endcsname\the\toks0{#3\CF_gobtonil}%
+}
+
+\def\CF_ifdot#1{\CF_ifdota#1.\_nil}
+\def\CF_ifdota#1.#2\_nil{\ifx\empty#2\empty\expandafter\CF_execsecond\else\expandafter\CF_execfirst\fi}
+\def\CF_beforedot#1.#2\_nil{#1}
+\def\CF_afterdot#1.#2\_nil{#2}
+
+\def\CF_rotatenode*#1#2\_nil{%
+ \CF_ifdot{#1}
+ {\CF_beforedot#1\_nil}
+ {#1}%
+}
+\def\CF_anchornode*#1#2\_nil#3{%
+ \CF_ifdot{#1}
+ {\CF_afterdot#1\_nil}
+ {\CF_arrowcurrentangle-#390-#1}%
+}
+
+% #1 = label #2 = position #3 = + ou - (au dessus ou au dessous) #4 : nom du noeud de départ
+% #5 = label #6 = position #7 = + ou - (au dessus ou au dessous) #8 : nom du noeud de fin
+\def\CF_arrowdisplaylabel#1#2#3#4#5#6#7#8{%
+ \CF_doifnotempty{#1#5}
+ {\path(#4)--(#8)\CF_arrowdisplaylabela{#1}{#2}{#3}\CF_arrowdisplaylabela{#5}{#6}{#7};}%
+}
+
+\def\CF_arrowdisplaylabela#1#2#3{%
+ \CF_doifnotempty{#1}
+ {\if*\expandafter\CF_firsttonil\detokenize{#1}\_nil
+ \ifboolKV[chemfig]{scheme debug}
+ {node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep,draw,fill,cyan](shifted@node){}%
+ node[draw,rotate=\CF_rotatenode#1\_nil,anchor=\CF_anchornode#1\_nil#3,at=(shifted@node)]{\expandafter\CF_gobarg\CF_gobarg#1}%
+ }
+ {node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep](shifted@node){}%
+ node[rotate=\CF_rotatenode#1\_nil,anchor=\CF_anchornode#1\_nil#3,at=(shifted@node)]{\expandafter\CF_gobarg\CF_gobarg#1}%
+ }%
+ \else
+ \ifboolKV[chemfig]{scheme debug}
+ {node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep,draw,fill,cyan](shifted@node){}%
+ node[draw,pos=#2,anchor=-#390,sloped,yshift=#3\CF_arrowlabelsep]{#1}%
+ }
+ {node[pos=#2,anchor=-#390,sloped,yshift=#3\CF_arrowlabelsep]{#1}%
+ }
+ \fi
+ }%
+}
+
+% pose des noeuds décalés de la dimension #1 à (\CF_arrowstartnode) et (\CF_arrowendnode)
+\def\CF_arrowshiftnodes#1{%
+ \unless\ifdim\CF_ifempty{#1}\CF_zero{#1}=0pt
+ \expanded{%
+ \noexpand\path(\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=0,sloped,yshift=#1](\CF_arrowstartnode1){}node[pos=1,sloped,yshift=#1](\CF_arrowendnode1){};}%
+ \edef\CF_arrowstartnode{\CF_arrowstartnode1}\edef\CF_arrowendnode{\CF_arrowendnode1}%
+ \fi
+}
+
+\definearrow3{->}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow3{<-}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowendnode)--(\CF_arrowstartnode);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow5{-/>}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ coordinate[midway,shift=(\CF_arrowcurrentangle:-1pt)](midway@i)%
+ coordinate[midway,shift=(\CF_arrowcurrentangle:1pt)](midway@ii)%
+ coordinate[at=(midway@i),shift=(\CF_ifempty{#4}{225}{#4+180}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@start)%
+ coordinate[at=(midway@i),shift=(\CF_ifempty{#4}{45}{#4}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@end)%
+ coordinate[at=(midway@ii),shift=(\CF_ifempty{#4}{225}{#4+180}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@start@i)%
+ coordinate[at=(midway@ii),shift=(\CF_ifempty{#4}{45}{#4}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@end@i);
+ \draw(line@start)--(line@end);%
+ \draw(line@start@i)--(line@end@i);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow3{<->}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle,\CF_arrowtip-\CF_arrowtip](\CF_arrowstartnode)--(\CF_arrowendnode);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow3{<=>}{%
+ \CF_arrowshiftnodes{#3}%
+ \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=0,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u0){}%
+ node[pos=0,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d0){}%
+ node[pos=1,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u1){}%
+ node[pos=1,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d1){};%
+ \begingroup
+ \ifboolKV[chemfig]{arrow double harpoon}
+ {\pgfarrowharpoontrue}
+ {}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
+ \endgroup
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode%
+}
+
+\definearrow3{<->>}{%
+ \CF_arrowshiftnodes{#3}%
+ \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=0,sloped,yshift=1pt](\CF_arrowstartnode @u0){}%
+ node[pos=\CF_arrowdoubleposstart,sloped,yshift=-1pt](\CF_arrowstartnode @d0){}%
+ node[pos=1,sloped,yshift=1pt](\CF_arrowstartnode @u1){}%
+ node[pos=\CF_arrowdoubleposend,sloped,yshift=-1pt](\CF_arrowstartnode @d1){};%
+ \begingroup
+ \ifboolKV[chemfig]{arrow double harpoon}
+ {\pgfarrowharpoontrue}
+ {}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
+ \endgroup
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode%
+}
+
+\definearrow3{<<->}{%
+ \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=\CF_arrowdoubleposstart,sloped,yshift=1pt](\CF_arrowstartnode @u0){}%
+ node[pos=0,sloped,yshift=-1pt](\CF_arrowstartnode @d0){}%
+ node[pos=\CF_arrowdoubleposend,sloped,yshift=1pt](\CF_arrowstartnode @u1){}%
+ node[pos=1,sloped,yshift=-1pt](\CF_arrowstartnode @d1){};%
+ \begingroup
+ \ifboolKV[chemfig]{arrow double harpoon}
+ {\pgfarrowharpoontrue}
+ {}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
+ \endgroup
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow30{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow5{-U>}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)node[midway](Uarrow@arctangent){};%
+ \CF_ifempty{#4}
+ {\def\CF_Uarrowradius{0.333}}
+ {\def\CF_Uarrowradius{#4}}%
+ \CF_ifempty{#5}%
+ {\def\CF_Uarrowabsangle{60}}
+ {\pgfmathsetmacro\CF_Uarrowabsangle{abs(#5)}}% ne prendre en compte que la valeur absolue de l'angle
+ \expandafter\draw\expanded{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}(Uarrow@arctangent)%
+ arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Uarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Uarrowabsangle]node(Uarrow@start){};
+ \expandafter\draw\expanded{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}}]}(Uarrow@arctangent)%
+ arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Uarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=\CF_Uarrowabsangle]node(Uarrow@end){};
+ \pgfmathsetmacro\CF_temp{\CF_Uarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
+ \ifdim\CF_Uarrowradius pt>0pt
+ \CF_arrowdisplaylabel{#1}{0}\CF_temp{Uarrow@start}{#2}{1}\CF_temp{Uarrow@end}%
+ \else
+ \CF_arrowdisplaylabel{#2}{0}\CF_temp{Uarrow@start}{#1}{1}\CF_temp{Uarrow@end}%
+ \fi
+}
+
+\def\CF_grabdelim#1#2#3\_nil{\def\CF_leftdelim{#1}\def\CF_rightdelim{#2}}
+\def\CF_resetdelim{%
+ \setKVdefault[CFdelimiters]{
+ delimiters = (),
+ height = 10pt,
+ depth = ,
+ open xshift = 0pt,
+ close xshift = ,
+ h align = true,
+ auto rotate = false,
+ rotate = 0,
+ indice = n
+ }%
+}
+
+\CF_resetdelim
+
+\def\polymerdelim{\CF_ifnextchar[{\CF_polymerdelima}{\CF_polymerdelima[]}}
+\def\CF_polymerdelima[#1]#2#3{%
+ \CF_resetdelim
+ \CF_doifnotempty{#1}{\setKV[CFdelimiters]{#1}}%
+ \expandafter\expandafter\expandafter\CF_grabdelim\useKV[CFdelimiters]{delimiters}()\_nil
+ \edef\CF_delimheight{\the\dimexpr\useKV[CFdelimiters]{height}}%
+ \CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{depth}}
+ {\let\CF_delimdepth\CF_delimheight}
+ {\edef\CF_delimdepth{\the\dimexpr\useKV[CFdelimiters]{depth}}}%
+ \edef\CF_delimhalfdim{\the\dimexpr(\CF_delimheight+\CF_delimdepth)/2}%
+ \edef\CF_delimvshift {\the\dimexpr(\CF_delimheight-\CF_delimdepth)/2}%
+ \edef\CF_leftdelimxshift{\the\dimexpr\useKV[CFdelimiters]{open xshift}}%
+ \CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{close xshift}}
+ {\edef\CF_rightdelimxshift{\the\dimexpr-\useKV[CFdelimiters]{open xshift}}}
+ {\edef\CF_rightdelimxshift{\the\dimexpr-\useKV[CFdelimiters]{close xshift}}}%
+ \chemmove{%
+ \nulldelimiterspace0pt
+ \pgfextractx\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_leftdelimx{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_leftdelimy{\the\CF_dim}%
+ \pgfextractx\CF_dim{\pgfpointanchor{#3}{center}}\edef\CF_rightdelimx{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#3}{center}}\edef\CF_rightdelimy{\the\CF_dim}%
+ \def\CF_autorotate{0}%
+ \ifboolKV[CFdelimiters]{h align}
+ {\let\CF_rightdelimy\CF_leftdelimy
+ }
+ {%
+ \ifboolKV[CFdelimiters]{auto rotate}
+ {\pgfmathatantwo{\CF_rightdelimy-\CF_leftdelimy}{\CF_rightdelimx-\CF_leftdelimx}%
+ \let\CF_autorotate\pgfmathresult
+ }
+ {\CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{rotate}}
+ {}
+ {\edef\CF_autorotate{\useKV[CFdelimiters]{rotate}}}%
+ }%
+ }%
+ \node[at={(\CF_leftdelimx+\CF_leftdelimxshift,\CF_leftdelimy+\CF_delimvshift)},rotate=\CF_autorotate]
+ {$\left\CF_leftdelim\vrule height\CF_delimhalfdim depth\CF_delimhalfdim width0pt\right.$};%
+ \node[at={(\CF_rightdelimx+\CF_rightdelimxshift,\CF_rightdelimy+\CF_delimvshift)},rotate=\CF_autorotate]
+ {$\left.\vrule height\CF_delimhalfdim depth\CF_delimhalfdim width0pt\right\CF_rightdelim
+ \CF_eexpsecond\CF_doifnotempty{\useKV[CFdelimiters]{indice}}
+ {\CF_underscore{\rlap{$\scriptstyle\useKV[CFdelimiters]{indice}$}}}
+ $};
+ }%
+}
+
+\catcode`\@11
+\pgfdeclarearrow{%
+ name = CF,%
+ defaults = {%
+ length = 3pt 5 1,%
+ width' = 0pt .8,%
+ inset' = 0pt .5,%
+ line width = 0pt 1 1,%
+ round%
+ },%
+ setup code = {%
+ % Cap the line width at 1/4th distance from inset to tip
+ \pgf@x\pgfarrowlength
+ \advance\pgf@x by-\pgfarrowinset
+ \pgf@x.25\pgf@x
+ \ifdim\pgf@x<\pgfarrowlinewidth\pgfarrowlinewidth\pgf@x\fi
+ % Compute front miter length:
+ \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}%
+ \let\pgf@temp@quot\pgfmathresult%
+ \pgf@x\pgfmathresult pt%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@x4\pgf@x%
+ \advance\pgf@x by1pt%
+ \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
+ \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter
+ \pgf@xc.5\pgf@xc
+ \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter
+ % Compute back miter length:
+ \pgf@ya.5\pgfarrowwidth%
+ \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowlength}{\pgfmath@tonumber\pgf@ya}%
+ \pgf@yb\pgfmathresult pt%
+ \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowinset}{\pgfmath@tonumber\pgf@ya}%
+ \pgf@ya\pgfmathresult pt%
+ \advance\pgf@yb by-\pgf@ya%
+ \pgf@yb.5\pgf@yb% half angle in yb
+ \pgfmathtan@{\pgf@sys@tonumber\pgf@yb}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@yc\pgfmathresult\pgfarrowlinewidth%
+ \pgf@yc.5\pgf@yc%
+ \advance\pgf@ya by\pgf@yb%
+ \pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}%
+ \pgf@ya\pgfmathresulty\pgf@yc% ya is the back miter
+ \pgf@yb\pgfmathresultx\pgf@yc% yb is the top miter
+ \ifdim\pgfarrowinset=0pt
+ \pgf@ya.5\pgfarrowlinewidth% easy: back miter is half linewidth
+ \fi
+ % Compute inset miter length:
+ \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowinset}{\pgf@sys@tonumber\pgfarrowwidth}%
+ \let\pgf@temp@quot\pgfmathresult%
+ \pgf@x\pgfmathresult pt%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@x4\pgf@x%\pgf@ya
+ \advance\pgf@x by1pt%
+ \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
+ \pgf@yc\pgfmathresult\pgfarrowlinewidth% yc is inset miter
+ \pgf@yc.5\pgf@yc%
+ % Inner length (pgfutil@tempdima) is now arrowlength - front miter - back miter
+ \pgfutil@tempdima\pgfarrowlength%
+ \advance\pgfutil@tempdima by-\pgf@xc%
+ \advance\pgfutil@tempdima by-\pgf@ya%
+ \pgfutil@tempdimb.5\pgfarrowwidth%
+ \advance\pgfutil@tempdimb by-\pgf@yb%
+ % harpoon miter correction
+ \ifpgfarrowroundjoin
+ \pgfarrowssetbackend{\pgf@ya\advance\pgf@x by-.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssetbackend{0pt}
+ \fi
+ \ifpgfarrowharpoon
+ \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by-.25\pgfarrowlinewidth}%
+ \ifpgfarrowreversed
+ \ifdim\pgfinnerlinewidth>0pt
+ \pgfarrowssetlineend{\pgfarrowinset}%
+ \else
+ \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by-.25\pgfarrowlinewidth}%
+ \fi
+ \fi
+ \fi
+ \ifpgfarrowroundjoin
+ \pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi}%
+ \fi
+ % The hull:
+ \pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}%
+ \pgfarrowsupperhullpoint{0pt}{.5\pgfarrowwidth}%
+ \pgfarrowshullpoint{\pgfarrowinset}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else 0pt\fi}%
+ % Adjust inset
+ \pgfarrowssetvisualbackend{\pgfarrowinset}%
+ \advance\pgfarrowinset by\pgf@yc%
+ % The following are needed in the code:
+ \pgfarrowssavethe\pgfutil@tempdima
+ \pgfarrowssavethe\pgfutil@tempdimb
+ \pgfarrowssavethe\pgfarrowlinewidth
+ \pgfarrowssavethe\pgf@ya
+ \pgfarrowssavethe\pgfarrowinset
+ },%
+ drawing code = {%
+ \pgfsetdash{}{0pt}%
+ \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi
+ \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{\pgfarrowlinewidth}\fi
+ \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by\pgf@ya}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@ya}{\pgfutil@tempdimb}}%
+ \pgfpathlineto{\pgfqpoint{\pgfarrowinset}{0pt}}%
+ \ifpgfarrowharpoon \else
+ \pgfpathlineto{\pgfqpoint{\pgf@ya}{-\pgfutil@tempdimb}}%
+ \fi
+ \pgfpathclose
+ \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt \pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi
+ },%
+ parameters = {%
+ \the\pgfarrowlinewidth,%
+ \the\pgfarrowlength,%
+ \the\pgfarrowwidth,%
+ \the\pgfarrowinset,%
+ \ifpgfarrowharpoon h\fi%
+ \ifpgfarrowopen o\fi%
+ \ifpgfarrowroundjoin j\fi%
+ }%
+}
+\CFrestorecatcode
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% H I S T O R I Q U E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+v0.1 2010/06/23
+ - Première version publique sur le CTAN
+----------------------------------------------------------------------
+v0.2 2010/08/31
+ - Ajout de la documentation en anglais.
+ - Correction de bugs.
+ - \printatom est désormais une macro publique.
+ - Les espaces sont permis dans les molécules. Ils seront
+ ignorés par défaut puisque les atomes sont composés en
+ mode math par \printatom
+ - Une paire de Lewis peut être représentée ":".
+ - Dans les cycles, une correction de la longueur du trait
+ déporté des liaisons doubles est fait de telle sorte que si
+ l'on écrit \chemfig{*5(=====)}, on obtient deux polygones
+ réguliers concentriques.
+ - La séquence de contrôle \setnodestyle permet de spécifier
+ le style des n?uds dessinés par tikz.
+----------------------------------------------------------------------
+v0.3 2010/11/21
+ - Amélioration de \definesubmol qui accepte les séquences de
+ contrôle. On peut aussi choisir un alias dont la substitution
+ est différente selon l'orientation de la liaison qui lui
+ arrive dessus.
+ - Le caractère "|" force la fin d'un atome. Si on écrit
+ "D|ef" alors, chemfig verra deux atomes "D" et "ef".
+ - Le caractère "#" est reconnu lorsqu'il suit un caractère de
+ liaison. Il doit être suivi d'un argument entre parenthèses
+ qui contient l'offset de début et de fin qui s'appliqueront
+ à cette liaison.
+ - La macro \chemfig admet un argument optionnel qui sera passé
+ à l'environnement tikzpicture dans lequel elle est dessinée
+ - Mise en place de la représentation des mécanismes
+ réactionnels avec la syntaxe "@{<nom>}" devant un atome où
+ "@{<nom>,<coeff>}" au tout début de l'argument d'une liaison.
+ Cette syntaxe permet de placer un n?ud (au sens de tikz) qui
+ deviendra l'extrémité des flèches des mécanismes.
+ Le tracé des flèches est faite par la macro \chemmove dont
+ l'argument optionnel devient celui de l'environnement
+ tikzpicture dans lequel sont faites les flèches.
+ - Pour le mécanisme d'alignement vertical via le \vphantom, la
+ commande \chemskipalign permet d'ignorer le groupe d'atomes
+ dans lequel elle est écrite.
+ - La commande \chemname permet d'afficher un nom sous une
+ molécule. la commande \chemnameinit initialise la plus grande
+ profondeur rencontrée.
+ - La commande \lewis a été modifiée de telle sorte que les
+ dessins des décorations soient proportionnels à la taille
+ de la police.
+----------------------------------------------------------------------
+v0.3a 2011/01/08
+ - Correction d'un bug dans l'argument optionnel de \definesubmol
+ lorsque celui-ci comporte des crochets.
+ - Mise à jour du manuel en anglais.
+ - Ajout de \vflipnext et \hflipnext pour retourner
+ horizontalement ou verticalement la prochaine molécule.
+----------------------------------------------------------------------
+v0.4 2011/03/07
+ - chemfig est désormais écrit en plain-etex et donc
+ utilisable par d'autres formats que LaTeX.
+ - Un peu plus de rigueur avec les catcodes des caractères
+ spéciaux, notamment lorsque la commande \chemfig se trouve
+ dans l'argument de \chemmove, \chemabove, \chembelow, \chemrel.
+ TODO : faut-il \scantoker l'argument de \chemfig pour être
+ définitivement débarrassé de ces histoires de catcode ???
+ - Correction d'un bug dans le calcul de l'angle des liaisons
+----------------------------------------------------------------------
+v0.4a 2011/04/10
+ - Correction d'un bug concernant l'argument optionnel en début
+ de molécule.
+----------------------------------------------------------------------
+v0.4b 2011/04/24
+ - l'argument de \chemfig est tokénisé avec \scantokens ce qui
+ rend caduc tout souci de code de catégorie, à part #.
+ - la commande \setbondstyle permet de définir le style des
+ liaisons.
+ - correction de l'affichage incorrect des doubles liaisons dans
+ les cycles après les commandes \hflipnext et \vflipnext
+ - correction d'un bug lorsqu'un alias commence une molécule
+----------------------------------------------------------------------
+v1.0 2011/06/15
+ - les schémas réactionnels sont désormais disponibles.
+ - \Chemabove et \Chembelow modifient la boite englobante.
+ - \Lewis modifie la boite englobante
+ - les macros \chemleft, \chemright, \chemup et \chemdown
+ affichent des délimiteurs extensibles à gauche, à droite,
+ au dessus et au dessous d'un matériel.
+----------------------------------------------------------------------
+v1.0a 2011/09/18
+ - les macros \Lewis et \lewis admettent un argument optionnel
+ - la macro \setlewisdist règle la distance entre les 2
+ électrons
+----------------------------------------------------------------------
+v1.0b 2011/11/29
+ - la commande \merge est désormais protégée entre
+ \schemestart et \schemestop contre des définitions par d'autres
+ packages.
+ - \box0 est utilisé au lieu du maladroit \unhbox0
+----------------------------------------------------------------------
+v1.0c 2011/11/30
+ - la macro \+ n'est plus explicitement écrite
+ - vérifie que eTeX est le moteur utilisé
+----------------------------------------------------------------------
+v1.0d 2011/12/19
+ - les cercles des cycles étaient tracés au mauvais moment. La
+ longueur de la liaison qui les précédait influait sur le
+ rayon du cercle : \chemfig{-[,0.5]**6(------)} donnait un bug
+ à l'affichage.
+----------------------------------------------------------------------
+v1.0e 2012/01/13
+ - la gestion des espaces dans les groupes d'atomes est
+ désormais plus rigoureuse. Plusieurs bugs ont été
+ corrigé
+----------------------------------------------------------------------
+v1.0f 2012/02/24
+ - correction d'un bug avec \definesubmol, les catcodes n'étaient
+ pas correctement gérés.
+----------------------------------------------------------------------
+v1.0g 2012/11/16
+ - correction d'un bug dans \CF_directarrow pour faire prendre en
+ compte le style des flèche par défaut
+ - correction d'un bug dans \CF_lewisc : la boite *doit* être
+ composée en dehors de l'environnement tikzpicture pour
+ éviter nullfont si jamais \printatom ne passe pas en mode
+ math.
+ - correction d'un bug dans \CF_chemfigc : si une longueur par
+ défaut est modifiée par [,<l>] au début d'une molécule
+ et si des cycles étaient emboités, cette longueur n'était
+ pas appliquée aux sous-cycles.
+ - ré-écriture des macros \chemabove et \chembemow pour
+ prendre en compte le bug (désormais corrigé) dans luatex.
+ - nouvelle macro \setstacksep qui définit l'espacement par
+ défaut dans les macros \chemabove et \chembelow.
+----------------------------------------------------------------------
+v1.0h 2013/11/28
+ - \chemname admet maintenant une version étoilé qui ne tient
+ pas compte des profondeurs précédentes.
+ - \CF_dpmax est géré globalement.
+ - correction d'un bug dans "-U>" : le style de la flèche
+ n'était pris en compte pour l'arc.
+ - correction d'un bug dans \CF_directarrow : l'angle de la
+ flèche n'était pas calculé
+----------------------------------------------------------------------
+v1.1 2015/02/13
+ - correction d'un bug dans \CF_seeksubmol : la macro
+ \CF_molecule est dépouillé de son éventuel espace
+ en première position.
+ - correction d'un bug dans \CF_arrowf : le nom du prochain
+ n?ud courant "end@arrow@i" était erroné dans le cas où une
+ flèche contenait un sous schéma. Ce nom doit dépendre de
+ \CF_schemenest.
+ - la jonction entre deux liaisons consécutives dans l'axe peut
+ être activé avec \enablebondjoin et désactivé avec
+ \disablebondjoin (préférable, état par défaut).
+ - \chemfig suivi d'une "*" demande à ce que les liaisons aient
+ une longueur invariable : la distance inter-atome devient donc
+ variable. Cette fonctionnalité est désactivé dans les
+ cycles afin que les polygones soient réguliers.
+ \enablefixedbondlength permet cette fonctionnalité pour
+ toutes les macros \chemfig (même non étoilée) tandis que
+ \disablefixedbondlength le désactive.
+----------------------------------------------------------------------
+v1.1a 2015/02/23
+ - correction d'un bug dans \CF_grabbondoffset. Si \chemfig est
+ dans l'argument d'une macro, les # sont doublés par l'action
+ de \scantokens de la macro \CF_chemfigb et il faut un
+ argument délimité avant "(" pour absorber tous les #.
+----------------------------------------------------------------------
+v1.2 2015/10/08
+ - correction d'un bug dans le tracé des liaisons de Cram.
+ - création de \setangleincrement.
+ - chargement de "arrows.meta" et définition de la flèche "CF"
+ basée sur "Stealth" et définie avec \pgfdeclarearrow.
+ Les anciennes flèches "CF_full" et "CF_half" sont
+ abandonnées puisque définies avec \pgfarrowsdeclare.
+ - flèche "-U>" corrigée : le placement des labels est
+ maintenant correct dans tous les cas. Ainsi :
+ -U>[<a>][<b>][<d>][r][a]
+ place le label <a> près du début de la flèche, quels que
+ soient les signes du rayon r et de l'angle a.
+ - \chemrel, \setchemrel et \chemsign sont supprimées.
+ - compatibilité, avec les limitations d'usage, avec la
+ librairie "externalize" : le \begin{tikzpicture} voit
+ désormais le \end{tikzpicture} correspondant dans la macro
+ \CF_chemfigb.
+----------------------------------------------------------------------
+v1.2a 2015/10/21
+ - erreur de copier-coller dans le code: une adresse url était
+ malencontreusement présente en plein milieu d'une ligne de
+ code
+----------------------------------------------------------------------
+v1.2b 2015/11/15
+ - bug dans \CF_seeksubmol qui laissait "*" dans le flux de
+ lecture de TeX. Un message d'erreur est également ajouté
+ en cas de "!" en fin de traitement.
+ - correction d'un bug dans \CF_setbondangle où l'angle [<:a>]
+ n'était pas évalué par \pgfmathsetmacro.
+----------------------------------------------------------------------
+v1.2c 2015/11/20
+ - Correction d'un bug dans \CF_setbondangle : l'angle renvoyé
+ pouvait être négatif
+ - Correction d'un bug dans \CF_directarrow : la macro \CF_ifempty
+ n'est pas correctement développée dans l'argument de
+ \pgfpointanchor
+----------------------------------------------------------------------
+v1.2d 2015/12/01
+ - correction d'un bug dans la flèche "-U"
+ - la version étoilée de \setcrambond dessine les liaisons de
+ Cram en pointillés sous forme de trait large et non pas sous
+ forme de triangle.
+----------------------------------------------------------------------
+v1.2e 2017/05/20
+ - la macro contenant la définition d'une flèche est
+ désormais "\CF_arrow(<nom>)", ainsi la macro \0 n'est plus
+ définie par \definearrow
+ - remerciements rajoutés après une suppression indue, pour ne
+ froisser aucune susceptibilité
+----------------------------------------------------------------------
+v1.3 2018/03/08
+ - tous les paramètres sont désormais passés via \setchemfig qui
+ fait appel à "simplekv". Par conséquent, _toutes_ les macros qui
+ réglaient des paramètres deviennent obsolètes, à savoir :
+ \setcrambond, \setatomsep, \setbondoffset, \setdoublesep,
+ \setangleincrement, \enablefixedbondlength,
+ \disablefixedbondlength, \setnodestyle, \setbondstyle,
+ \setlewis, \setlewisdist, \setstacksep, \setcompoundstyle,
+ \setarrowdefault, \setandsign, \setarrowoffset,
+ \setcompoundsep, \setarrowlabelsep, \enablebondjoin,
+ \disablebondjoin et \schemedebug.
+ et ces macros seront *supprimées* dans une future version.
+ - la version étoilée "\chemfig*" et les deux arguments optionnels
+ de la macro "\chemfig[][]" sont également optionnels et seront
+ *supprimé*s dans une future version afin d'accéder à la syntaxe
+ \chemfig[clés=valeurs]{code}
+ - 6 nouveaux paramètres : "lewis radius", "arrow double sep",
+ "arrow double coeff", "arrow double harpoon", "cycle radius
+ coeff", "arrow head".
+ - correction d'un bug dans \CF_parsemergeopt qui dans certains
+ cas, envoyait vers l'affichage des caractères
+ - petit toilettage du code
+ - macro \polymerdelim (non documentée) expérimentale et encore
+ en phase de tests
+ - suppression d'un registre d'écriture de fichier
+----------------------------------------------------------------------
+v1.31 2018/04/05
+ - correction d'un espace indésirable dans \CF_ifnextchar
+----------------------------------------------------------------------
+v1.32 2018/08/23
+ - définition de \printatom, \CF_begintikzpicture et
+ \CF_endtikzpicture dans le fichier t-chemfig.tex
+----------------------------------------------------------------------
+v1.33 2018/10/31
+ - les macros définies par \definesubmol peuvent désormais avoir un ou
+ plusieurs arguments
+ - macro \polymerdelim documentée
+----------------------------------------------------------------------
+v1.34 2019/02/23
+ - bug dans la flèche "<->" corrigé
+----------------------------------------------------------------------
+v1.4 2019/04/18
+ - corrections de nombreux bugs
+ - caractère privé "_" et non plus "@" -> modifications à prévoir
+ notamment dans la doc avec les codes spécifiques aux flèches, ça
+ risque de couiner sur tex.stackexchange.com
+ - anciennes macros abandonnées et désormais indéfinies :
+ \setcrambond, \setatomsep, \setbondoffset, \setdoublesep,
+ \setangleincrement, \enablefixedbondlength,
+ \disablefixedbondlength, \setnodestyle, \setbondstyle,
+ \setlewis, \setlewisdist, \setstacksep, \setcompoundstyle,
+ \setarrowdefault, \setandsign, \setarrowoffset,
+ \setcompoundsep, \setarrowlabelsep, \enablebondjoin,
+ \disablebondjoin et \schemedebug
+ - l'ancienne syntaxe \chemfig[][]{} est abandonnée et n'est plus
+ acceptée, désormais c'est
+ \chemfig[<clés>=<valeurs>]{<code molécule>}
+ - l'ancienne syntaxe \lewis[<coeff>] ou \Lewis[<coeff>] n'est
+ plus acceptée au profit de \lewis[<clés>=<valeurs>]
+----------------------------------------------------------------------
+v1.41 2019/05/21
+ - utilisation de la nouvelle primitive \expanded
+ - nouvelle clé "h align" (true par défaut) pour les délimiteurs
+ de \polymerdelim. Lorsque à false, les délimiteurs ne sont
+ plus alignés horizontalement mais positionnés aux noeuds demandés
+ - nouvelle clé "auto rotate" qui n'a de sens que si h align=false :
+ les délimiteurs sont automatiquement inclinés
+ - nouvelle clé "rotate" qui n'a de sens que si halign=false ET
+ auto rotate=false : l'inclinaison des délimiteurs peut être
+ choisie \ No newline at end of file
diff --git a/macros/generic/chemfig/chemfigold.tex b/macros/generic/chemfig/chemfigold.tex
new file mode 100644
index 0000000000..a7826763ca
--- /dev/null
+++ b/macros/generic/chemfig/chemfigold.tex
@@ -0,0 +1,2835 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "chemfig"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\CFname {chemfig} %
+\def\CFver {1.4} %
+% %
+\def\CFdate {2019/04/18} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%____________________________________________________________________
+% Author : Christian Tellechea |
+% Status : Maintained |
+% Email : unbonpetit@netc.fr |
+% Package URL: https://www.ctan.org/pkg/chemfig |
+% Bug tracker: https://framagit.org/unbonpetit/chemfig/issues |
+% Repository : https://framagit.org/unbonpetit/chemfig/tree/master |
+% Copyright : Christian Tellechea 2010-2019 |
+% Licence : Released under the LaTeX Project Public License v1.3c |
+% or later, see http://www.latex-project.org/lppl.txt |
+% Files : 1) chemfig.tex |
+% 2) chemfig.sty |
+% 3) t-chemfig.tex |
+% 4) README |
+% 5) chemfig_doc_fr.tex |
+% 6) chemfig_doc_fr.pdf |
+% 7) chemfig_doc_en.tex |
+% 8) chemfig_doc_fr.pdf |
+%--------------------------------------------------------------------
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% P R É A L A B L E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-------------------------- Annonce package --------------------------
+\ifdefined\ProvidesPackage\else
+ \immediate\write -1 {%
+ Package: \CFname\space\CFdate\space\space v\CFver\space\space
+ Draw molecule with an easy syntax (CT)}%
+\fi
+
+%------------------------- Vérification etex -------------------------
+\begingroup
+ \edef\CFtempa{\meaning\eTeXversion}
+ \edef\CFtempb{\string\eTeXversion}
+ \let\CFtemp\endgroup
+ \unless\ifx\CFtempa\CFtempb
+ \errmessage{Package \CFname\space Error: you are not using an eTeX engine, chemfig cannot work.}%
+ \def\CFtemp{\endgroup\endinput}%
+ \fi
+\CFtemp
+
+%------------------------ Chargement simplekv ------------------------
+\unless\ifdefined\skvname
+ \begingroup\def\CFtemp{\endgroup\input simplekv.tex\relax}%
+ \expandafter\CFtemp
+\fi
+
+%-------------------------- Chargement tikz --------------------------
+\unless\ifdefined\tikzpicture
+ \begingroup\def\CFtemp{\endgroup\input tikz.tex\relax}%
+ \expandafter\CFtemp
+\fi
+\usetikzlibrary{arrows.meta}
+
+%-------------------------- Régime catcodes --------------------------
+\begingroup
+ \def\X#1{\catcode\number`#1=\number\catcode`#1\relax}
+ \xdef\CFrestorecatcode{\X\[\X\]\X\:\X\(\X\)\X\,\X\-\X\=\X\~\X\!\X\?\X\<\X\>\X\;\X\*\X\|\X\@\X\ \X\_}%
+\endgroup
+\catcode`\[12 \catcode`\]12 \catcode`\:12 \catcode`\(12
+\catcode`\)12 \catcode`\,12 \catcode`\-12 \catcode`\=12
+\catcode`\~12 \catcode`\!12 \catcode`\?12 \catcode`\<12
+\catcode`\>12 \catcode`\;12 \catcode`\*12 \catcode`\|12
+\catcode`\@12 \catcode`\#6 \catcode`\ 10 \catcode`\_11
+
+%--------------------------- Allocations -----------------------------
+\newcount\CF_cntatomgroup
+\newcount\CF_cntgroup
+\newcount\CF_cntatom
+\newcount\CF_cntcycle
+\newcount\CF_cntcompound
+
+\newif\ifCF_incycle
+\newif\ifCF_cyclearc
+\newif\ifCF_definesubmol
+\newif\ifCF_adjustnamedp
+\newif\ifCF_macrofixedbondlength
+\newif\ifCF_lewisoverlay
+
+\newdimen\CF_dim
+\newdimen\CF_arrowsize
+\newdimen\CF_zero \CF_zero=0pt
+
+\newbox\CF_boxlewis
+\newbox\CF_box
+\newbox\CF_boxstuff
+
+\newtoks\CF_substtoks
+
+%-------------------------- Petites macros ---------------------------
+\let\CF_begintikzpicture\tikzpicture
+\let\CF_endtikzpicture \endtikzpicture
+\def\CF_quark{\CF_quark}
+\def\CF_execfirst#1#2{#1}
+\def\CF_execsecond#1#2{#2}
+\def\CF_id#1{#1}
+\def\CF_gobarg#1{}
+\def\CF_gobtwoargs#1#2{}
+\def\CF_firsttonil#1#2\_nil{#1}
+\def\CF_sanitizelastitem#1,\empty#2\_nil{#1}
+\def\CF_gobtikzinstruction#1;{}
+\def\CF_makeother#1{\catcode`#1=12\relax}
+\def\CF_lettoken#1#2{\let#1= #2}\CF_lettoken\CF_sptoken{ }
+\def\CF_ifx#1#2{\ifx#1#2\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_ifempty#1{\ifx\empty#1\empty\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_ifnum#1{\ifnum#1\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_doifempty#1{\ifx\empty#1\empty\expandafter\CF_id\else\expandafter\CF_gobarg\fi}
+\def\CF_doifnotempty#1{\ifx\empty#1\empty\expandafter\CF_gobarg\else\expandafter\CF_id\fi}
+\def\CF_gobtonil#1\_nil{}
+\edef\CFhash{\string#}
+\begingroup
+ \catcode`\_8
+ \expandafter\gdef\csname CF\string_underscore\endcsname{_}
+\endgroup
+\def\CF_threeea{\expandafter\expandafter\expandafter}
+\def\CF_exptwomacroargs#1#2#3{\CF_expsecond{\CF_expsecond#1{#2}}{#3}}
+\def\CF_expthreemacroargs#1#2#3#4{\CF_expsecond{\CF_exptwomacroargs#1{#2}{#3}}{#4}}
+\def\CF_swaparg#1#2{#2{#1}}
+\def\CF_expsecond#1#2{\expandafter\CF_swaparg\expandafter{#2}{#1}}% \CF_expsecond<{arg1>}{<arg2>} donne "<arg1>{*<arg2>}"
+\def\CF_eexpsecond#1#2{\expandafter\expandafter\expandafter\CF_swaparg\expandafter\expandafter\expandafter{#2}{#1}}% \CF_eexpsecond{<arg1>}{<arg2>} donne "<arg1>{**<arg2>}"
+\def\CF_swapunbrace#1#2{#2#1}
+\def\CF_expafter#1#2{\expandafter\CF_swapunbrace\expandafter{#2}{#1}}% \CF_expafter{<arg1>}{<arg2>} donne "<arg1>*<arg2>"
+\def\CF_eexpafter#1#2{\expandafter\expandafter\expandafter\CF_swapunbrace\expandafter\expandafter\expandafter{#2}{#1}}% \CF_eexpafter{<arg1>}{<arg2>} donne "<arg1>**<arg2>"
+\def\CF_addtomacro#1#2{\CF_expsecond{\def#1}{#1#2}}
+\def\CF_eaddtomacro#1#2{\CF_expsecond{\CF_addtomacro#1}{#2}}
+\def\CF_preaddtomacro#1#2{\CF_expsecond{\CF_preaddtomacroa#1{#2}}#1}
+\def\CF_preaddtomacroa#1#2#3{\def#1{#2#3}}
+\def\CF_addtotoks#1#2{#1\expandafter{\the#1#2}}
+\def\CF_eaddtotoks#1#2{\expandafter\CF_addtotoks\expandafter#1\expandafter{#2}}
+\def\CF_assigntonil#1#2\_nil{\def#1{#2}}
+\def\CF_edefaddtomacro#1#2{%
+ \edef\CF_temp{#2}%
+ \CF_expsecond{\CF_addtomacro#1}{\CF_temp}%
+}
+\def\CF_ifnextchar#1#2#3{%
+ \let\CF_ifnextchartok=#1% <- espace indésirable, bugfix v1.31
+ \def\CF_ifnextcharcodetrue{#2}%
+ \def\CF_ifnextcharcodefalse{#3}%
+ \futurelet\CF_temptok\CF_ifnextchara
+}
+\def\CF_ifnextchara{%
+ \CF_ifx\CF_temptok\CF_sptoken
+ {\CF_ifnextcharb
+ }
+ {\CF_ifx\CF_temptok\CF_ifnextchartok
+ \CF_ifnextcharcodetrue
+ \CF_ifnextcharcodefalse
+ }%
+}
+\expandafter\def\expandafter\CF_ifnextcharb\space{\futurelet\CF_temptok\CF_ifnextchara}
+\def\CF_ifstar#1{\CF_ifnextchar*{\CF_execfirst{#1}}}
+\def\CF_testopt#1#2{\CF_ifnextchar[{#1}{#1[{#2}]}}
+\def\CF_error#1{\errmessage{Package \CFname\space Error: #1.}}
+\def\CF_warning#1{\immediate\write-1{Package \CFname\space Warning: #1^^J}}
+\def\CF_ifinteger#1{%
+ \begingroup
+ \afterassignment\CF_afterinteger
+ \CF_cntcycle0#1\relax
+}
+\def\CF_afterinteger#1\relax{%
+ \endgroup
+ \CF_ifempty{#1}%
+}
+\def\CF_iffirsttokmatch#1#2{% est ce que #1 et #2 commencent par les mêmes tokens ?
+ \futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
+ \futurelet\CF_toksb\CF_gobtonil#2\relax\_nil
+ \CF_ifx\CF_toksa\CF_toksb
+}
+\def\CF_iffirsttokin#1{% teste si le token qui commence #1 appartient aux tokens mis dans #2
+ \futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
+ \CF_iffirsttokina
+}
+\def\CF_iffirsttokina#1{%
+ \CF_ifempty{#1}
+ {\CF_execsecond
+ }
+ {\futurelet\CF_toksb\CF_gobtonil#1\relax\_nil
+ \CF_ifx\CF_toksa\CF_toksb
+ {\CF_execfirst}
+ {\CF_expsecond\CF_iffirsttokina{\CF_gobarg#1}}%
+ }%
+}
+\def\CF_ifinstr#1#2{%
+ \def\CF_ifinstra##1#2##2\_nil{%
+ \ifx\empty##2\empty
+ \expandafter\CF_execsecond
+ \else
+ \expandafter\CF_execfirst
+ \fi}%
+ \CF_ifinstra#1\__nil#2\_nil
+}
+\def\CF_afterspace#1 #2\_nil{#2}
+\def\CF_valuetomacro#1[#2]#3{% #1= macro #2=valeur défaut #3=clé
+ \CF_eexpsecond{\def#1}{\useKV[chemfig]{#3}}%
+ \CF_ifx#1\empty
+ {\def#1{#2}}
+ {}%
+}
+
+%--------------------------- Substitution ----------------------------
+\def\CF_ifstartwith#1#2{% #1=<texte> #2=<motif>
+ \CF_ifempty{#1}%
+ {\CF_execsecond
+ }
+ {\def\CF_startwithcode{#1}%
+ \def\CF_startwithpattern{#2}%
+ \CF_ifstartwitha
+ }%
+}
+\def\CF_ifstartwitha{%
+ \CF_grabfirstarg\CF_startwithcode\CF_firstargcode
+ \CF_grabfirstarg\CF_startwithpattern\CF_firstargpattern
+ \CF_ifx\CF_firstargcode\CF_firstargpattern
+ {\CF_expsecond\CF_ifempty\CF_startwithpattern
+ {\CF_execfirst
+ }
+ {\CF_expsecond\CF_ifempty\CF_startwithcode
+ \CF_execsecond
+ \CF_ifstartwitha
+ }%
+ }
+ {\CF_execsecond
+ }%
+}
+\def\CF_grabfirstarg#1#2{%
+ \CF_ifx#1\empty
+ {\let#2\empty
+ }
+ {\def\CF_grabmacro{#2}%
+ \CF_expsecond\CF_ifbracefirst#1%
+ {\expandafter\CF_grabbracearg#1\_nil#1}
+ {\CF_expafter{\futurelet\CF_nexttok\CF_grabfirstarga}#1\_nil#1}%
+ }%
+}
+\def\CF_grabfirstarga{%
+ \CF_ifx\CF_nexttok\CF_sptoken
+ \CF_grabspacearg
+ \CF_grabnormalarg
+}
+\def\CF_grabbracearg#1{%
+ \expandafter\def\CF_grabmacro{{#1}}%
+ \CF_grabargassigntonil\relax
+}
+\expandafter\def\expandafter\CF_grabspacearg\space{%
+ \expandafter\def\CF_grabmacro{ }%
+ \CF_grabargassigntonil\relax
+}
+\def\CF_grabnormalarg#1{%
+ \expandafter\def\CF_grabmacro{#1}%
+ \CF_grabargassigntonil\relax
+}
+\def\CF_grabargassigntonil#1\_nil#2{\CF_expsecond{\def#2}{\CF_gobarg#1}}
+\def\CF_ifbracefirst#1{\CF_ifnum{\catcode\CF_threeea`\expandafter\CF_firsttonil\detokenize{#1.}\_nil=1 }}
+\def\CF_substonly#1#2{% #1=entier maxi>0 #2=macro : dans la sc#1, remplace tous les <motif> par <pattern> sauf lorsque le motif est suivi d'un caractère >#1
+ \def\CF_atendsubstitute{\edef#2{\the\CF_substtoks}}% macro exécutée à la fin
+ \let\CF_substnogroups\CF_substnogrouponly
+ \CF_ifnum{#1>0 }
+ {\let\CF_testifx\empty
+ \foreach\CF_x in {1,...,#1}{\xdef\CF_testifx{\unexpanded\expandafter{\CF_testifx}\unexpanded\expandafter{\expandafter\ifx\CF_x\CF_nexttok1\fi}}}%
+ \let\CF_testif\empty
+ \foreach\CF_x in {1,...,#1}{\xdef\CF_testif{\unexpanded\expandafter{\CF_testif}\unexpanded\expandafter{\expandafter\if\CF_x\CF_nexttok1\fi}}}%
+ \CF_expsecond\CF_substi#2%
+ }
+ {\CF_substall#2%
+ }%
+}
+\def\CF_substnogrouponly{%
+ \CF_exptwomacroargs\CF_ifstartwith\CF_substcode\CF_substsubst
+ {\CF_grabfirstarg\CF_substcode\CF_temp
+ \CF_expafter{\futurelet\CF_nexttok\CF_gobtonil}\CF_substcode\relax\_nil
+ \CF_ifnum{0\CF_testifx=1 }% si le prochain token est \let-égal à 1...#1
+ {\edef\CF_nexttok{\CF_threeea\CF_firsttonil\expandafter\string\CF_substcode\_nil}% le détokéniser
+ \CF_ifnum{0\CF_testif=1 }
+ {\CF_eaddtotoks\CF_substtoks\CF_temp
+ \CF_grabfirstarg\CF_substcode\CF_temp
+ \CF_eaddtotoks\CF_substtoks\CF_temp
+ }
+ {\CF_eaddtotoks\CF_substtoks\CF_substpattern
+ }%
+ }
+ {\CF_eaddtotoks\CF_substtoks\CF_substpattern
+ }%
+ \CF_substgroups
+ }
+ {\CF_expsecond\CF_ifempty\CF_substcode
+ {\CF_atendsubstitute
+ }
+ {\CF_grabfirstarg\CF_substcode\CF_substauxarg
+ \CF_eaddtotoks\CF_substtoks\CF_substauxarg
+ \CF_substgroups
+ }%
+ }%
+}
+\def\CF_substall#1{% #1=macro
+ \def\CF_atendsubstitute{\edef#1{\the\CF_substtoks}}% macro exécutée à la fin
+ \let\CF_substnogroups\CF_substnogroupall
+ \CF_expsecond\CF_substi#1%
+}
+\def\CF_substnogroupall{%
+ \CF_exptwomacroargs\CF_ifstartwith\CF_substcode\CF_substsubst
+ {\CF_eaddtotoks\CF_substtoks\CF_substpattern
+ \CF_grabfirstarg\CF_substcode\CF_temp
+ \CF_substgroups
+ }
+ {\CF_expsecond\CF_ifempty\CF_substcode
+ {\CF_atendsubstitute
+ }
+ {\CF_grabfirstarg\CF_substcode\CF_substauxarg
+ \CF_eaddtotoks\CF_substtoks\CF_substauxarg
+ \CF_substgroups
+ }%
+ }%
+}
+\def\CF_substi#1#2#3{% #1=<texte> #2=<motif> #3=<motif de substi>
+ \def\CF_substcode{#1}\def\CF_substsubst{#2}\def\CF_substpattern{#3}%
+ \CF_substtoks={}%
+ \CF_substgroups
+}
+
+\def\CF_substgroups{%
+ \CF_expsecond\CF_ifbracefirst\CF_substcode
+ {\CF_grabfirstarg\CF_substcode\CF_substauxarg
+ \begingroup
+ \def\CF_atendsubstitute{%
+ \expandafter\endgroup\expandafter\CF_addtotoks\expandafter\CF_substtoks\expandafter{\expandafter{\the\CF_substtoks}}%
+ \CF_substgroups
+ }%
+ \CF_substtoks{}% initialiser à vide
+ \expandafter\def\expandafter\CF_substcode\CF_substauxarg
+ \CF_substgroups
+ }%
+ {\CF_substnogroups
+ }%
+}
+
+%---------------------------- Paramètres -----------------------------
+\def\setchemfig{\setKV[chemfig]}
+\def\resetchemfig{%
+ \setKVdefault[chemfig]{%
+ atom style ={},% code tikz mis à la fin de every node/.style
+ chemfig style ={},% code tikz mis à la fin de l'arugment optionnel de \tikzpicture
+ bond join =false,
+ fixed length =false,
+ cram rectangle =false,
+ cram width =1.5ex,
+ cram dash width =1pt,
+ cram dash sep =2pt,
+ atom sep =3em,
+ bond offset =2pt,
+ double bond sep =2pt,
+ angle increment =45,
+ node style ={},
+ bond style ={},
+ lewis | width =0.3ex,
+ lewis sep =0.4ex,
+ lewis length =1.5ex,
+ lewis style ={},
+ lewis dist =0.3em,
+ lewis radius =0.15ex,
+ lewis diag coeff =1,
+ cycle radius coeff =0.75,
+ stack sep =1.5pt,
+ scheme debug =false,
+ compound style ={},
+ compound sep =5em,
+ arrow offset =4pt,
+ arrow angle =0,
+ arrow coeff =1,
+ arrow style ={},
+ arrow double sep =2pt,
+ arrow double coeff =0.6,
+ arrow double harpoon=true,
+ arrow label sep =3pt,
+ arrow head =-CF,
+ + sep left =0.5em,
+ + sep right =0.5em,
+ + vshift =0pt,
+ }%
+}
+\resetchemfig
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% D E S S I N M O L É C U L E S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\CF_sanitizecatcode{%
+ \CF_makeother\[\CF_makeother\]\CF_makeother\:\CF_makeother\(\CF_makeother\)%
+ \CF_makeother\,\CF_makeother\-\CF_makeother\=\CF_makeother\~\CF_makeother\!%
+ \CF_makeother\?\CF_makeother\<\CF_makeother\>\CF_makeother\;\CF_makeother\*%
+ \CF_makeother\|\CF_makeother\#\CF_makeother\@%
+}
+
+\def\CF_nodecontent{\CF_expsecond\printatom{\csname atom_\number\CF_cntatom\endcsname\CF_nodestrut}}
+
+\def\chemskipalign{%
+ \CF_doifempty\CF_bondoutcontentsaved% sauf si un \chemskipalign a été fait à l'atome précédent
+ {\global\let\CF_bondoutcontentsaved\CF_bondoutcontent}% sauvegarder l'atome d'où vient la liaison
+ \let\CF_nodestrut\empty
+}
+
+\def\CF_emptynode{{}}
+
+\def\definesubmol{\CF_definesubmoltrue\def_submol}
+\def\redefinesubmol{\CF_definesubmolfalse\def_submol}
+
+\def\def_submol#1{%
+ \CF_cntatomgroup=0 % nombre d'arguments supposé
+ \def\CF_temp{#1}% nom
+ \futurelet\CF_toksa\CF_submoltestnxttok
+}
+
+\def\CF_submoltestnxttok{%
+ \if[\noexpand\CF_toksa\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi
+ {\begingroup\CF_sanitizecatcode\CF_expsecond\CF_submolgrabopt{\CF_temp}%
+ }
+ {\afterassignment\CF_submoltestnxttoka% pas d'argument entre crochet
+ \CF_cntatomgroup=0% cherche le nombre d'arguments éventuels
+ }%
+}
+
+\def\CF_submoltestnxttoka{\futurelet\CF_toksa\CF_submoltestnxttokb}
+
+\def\CF_submoltestnxttokb{%
+ \if[\noexpand\CF_toksa\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi
+ {\begingroup\CF_sanitizecatcode\CF_expsecond\CF_submolgrabopt{\CF_temp}}
+ {\CF_expsecond{\def_submola}\CF_temp{}}%
+}
+
+\def\CF_submolgrabopt#1[#2]#{\endgroup\def_submola{#1}{#2}}
+
+\def\def_submola#1{% #1 nom
+ \CF_ifnum{0\CF_ifnum{\CF_cntatomgroup<0 }1{\CF_ifnum{\CF_cntatomgroup>9 }10}>0 }
+ {\CF_error{Invalid number of arguments in submol \detokenize\expandafter{\string#1}. Defining it with 0 argument}%
+ \CF_cntatomgroup=0
+ }
+ {}%
+ \ifcat\relax\expandafter\noexpand\CF_firsttonil#1\_nil\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi% si #1 est une séquence de contrôle
+ {\expandafter\ifdefined\CF_firsttonil#1\_nil
+ \ifCF_definesubmol
+ \CF_warning{the submol \expandafter\string\CF_firsttonil#1\_nil\space is already defined, the previous definition is lost}%
+ \fi
+ \fi
+ \begingroup
+ \CF_sanitizecatcode
+ \def_submolb{#1}%
+ }
+ {\ifcsname CF__#1\endcsname
+ \ifCF_definesubmol
+ \CF_warning{the submol "#1" is already defined, the previous definition is lost}%
+ \fi
+ \fi
+ \begingroup
+ \CF_sanitizecatcode
+ \expandafter\def_submolb\csname CF__#1\endcsname
+ }%
+}
+
+\def\def_submolb#1#2#3{% #1 nom sous forme de macro, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche, \CF_cntatomgroup = nombre d'arguments
+ \def\CF_tempa{#2}\CF_doifnotempty{#2}{\CF_expsecond{\CF_expsecond\CF_substonly{\number\CF_cntatomgroup}\CF_tempa}{\CFhash}{\CFhash}}%
+ \def\CF_tempb{#3}\CF_expsecond{\CF_expsecond\CF_substonly{\number\CF_cntatomgroup}\CF_tempb}{\CFhash}{\CFhash}%
+ \CF_expsecond{\CF_expsecond{\def_submolc{#1}}\CF_tempa}\CF_tempb
+}
+
+\def\def_submolc#1#2#3{% #1 nom sous forme de macro, #2 = code si liaison arrive de droite , #3 = code si liaison arrive de gauche, \CF_cntatomgroup = nombre d'arguments
+ \endgroup
+ \begingroup
+ \global\toks0{\gdef\CFthesubmol}%
+ \CF_ifnum{\CF_cntatomgroup>0 }
+ {\foreach\CF_x in {1,...,\CF_cntatomgroup}{%
+ \edef\CF_temp{\CFhash\CF_x}%
+ \global\toks0\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toks\expandafter0\CF_temp}%
+ }%
+ }
+ {}%
+ \CF_sanitizecatcode \catcode`\#6 \endlinechar-1 \everyeof{\noexpand}%
+ \CF_ifempty{#2}%
+ {\scantokens\expandafter{\the\toks0{\empty#3}}%
+ }%
+ {\scantokens\expandafter{%
+ \the\toks0{%
+ \romannumeral
+ \csname CF_exec%
+ \ifdim\csname CF_currentangle\endcsname pt>90pt
+ \ifdim\csname CF_currentangle\endcsname pt<270pt
+ first%
+ \else
+ second%
+ \fi
+ \else
+ second%
+ \fi
+ \endcsname
+ {0 #2}{0 #3}%
+ }%
+ }%
+ }%
+ \endgroup
+ \let#1\CFthesubmol
+}
+
+\def\CF_seeknode#1#2#3{% cherche un noeud au début de #1 l'assigne dans la sc #2 et met le reste dans #3
+ \let#2\empty
+ \def#3{#1}%
+ \CF_iffirsttokmatch{#1}{ }%
+ {\CF_expsecond\CF_seeknodea{\romannumeral-`\.\noexpand#1}#2#3}% ignore les espaces au début du groupe d'atome
+ {\CF_seeknodea{#1}#2#3}%
+}
+
+\def\CF_seeknodea#1#2#3{%
+ \CF_ifempty{#1}%
+ {\let#3\empty
+ }
+ {\futurelet\CF_toksa\CF_gobtonil#1\relax\_nil
+ \CF_ifx\CF_toksa\CF_sptoken
+ {\CF_addtomacro#2{ }%
+ \CF_expsecond\CF_seeknodea{\CF_afterspace#1\_nil}#2#3%
+ }%
+ {\CF_ifx\CF_toksa\bgroup
+ {\CF_eaddtomacro#2{\expandafter{\CF_firsttonil#1\_nil}}%
+ \CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
+ }%
+ {\CF_iffirsttokina{-=(*<>!~}%
+ {\def#3{#1}%
+ }%
+ {\CF_eaddtomacro#2{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
+ }%
+ }%
+ }%
+ }%
+}
+
+% on sait que #1 commence par -,=,~,<,>. On analyse cette liaison
+% #2 reçoit le type de liaisons (1 pour -, 2 pour =, 3 pour ~)
+\def\CF_assignbondcode#1#2{%
+ \futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \edef#2{%
+ \ifx-\CF_toksa1\else
+ \ifx=\CF_toksa2\else
+ \ifx~\CF_toksa3\else
+ \ifx>\CF_toksa4\else
+ \ifx<\CF_toksa5\else0% si 0 --> il y a une erreur non due à l'utilisateur
+ \fi\fi\fi\fi\fi}%
+ \ifnum#2>3 % si c'est une liaison de Cram
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_gobarg#1\_nil}% chope le caractère suivant
+ \CF_ifx:\CF_toksa
+ {\edef#2{\number\numexpr#2+2}% si c 'est un ":", signe du pointillé, ajoute 2
+ }%
+ {\CF_ifx|\CF_toksa% si c 'est un "|", signe du triangle évidé, ajouter 4
+ {\edef#2{\number\numexpr#2+4}}
+ {}%
+ }%
+ \fi
+}
+
+\def\CF_grabbondoffseta#1,#2\_nil{%
+ \def\CF_startoffset{#1}\def\CF_endoffset{#2}%
+}
+
+\def\CF_grabbondoffset#1(#2)#3\_nil{%
+ \CF_doifnotempty{#2}%
+ {\CF_ifinstr{#2},%
+ {\CF_grabbondoffseta#2\_nil}%
+ {\def\CF_startoffset{#2}}%
+ }%
+ \def\CF_remainafterbond{#3}%
+}
+
+\def\CF_analysebond#1#2{%
+ \CF_assignbondcode{#1}#2%
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobarg#1}%mange le premier signe de la liaison
+ \let\CF_doublebondtype\CF_zero
+ \ifnum#2=2 % si c'est une double liaison, regarde s'il y a un + ou - derrière
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_gobarg#1\_nil}%
+ \CF_ifx^\CF_toksa
+ {\def\CF_doublebondtype{1}%
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange le "^"
+ }
+ {\expandafter\ifx\CF_underscore\CF_toksa
+ \def\CF_doublebondtype{2}%
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange le "_"
+ \fi
+ }%
+ \else
+ \ifnum#2>5 % si c'est une laision de Cram pointillée ou triangle évidé
+ \CF_expsecond{\def\CF_remainafterbond}{\CF_gobtwoargs#1}% mange un caractère de plus
+ \fi
+ \fi
+ \CF_expsecond\CF_iffirsttokmatch\CF_remainafterbond\CFhash
+ {\CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_remainafterbond.}(%si parenthèse juste après
+ {\expandafter\CF_grabbondoffset\CF_remainafterbond\_nil}
+ {}%
+ }%
+ {}%
+ \CF_expsecond\CF_iffirsttokmatch\CF_remainafterbond @%
+ {\expandafter\CF_grabmovearg\CF_remainafterbond\_nil}%
+ {}%
+ \CF_expsecond\CF_iffirsttokmatch{\CF_remainafterbond}[%
+ {\expandafter\CF_analyseoptarg\CF_remainafterbond\_nil\CF_remainafterbond
+ }%
+ {\let\CF_currentstringangle\CF_defaultstringangle
+ \let\CF_currentlength\CF_defaultlength
+ \let\CF_currentfromatom\CF_defaultfromatom
+ \let\CF_currenttoatom\CF_defaulttoatom
+ \let\CF_currenttikz\CF_defaulttikz
+ \let\CF_movebondname\empty
+ }%
+ \ifCF_incycle
+ \pgfmathsetmacro\CF_cycleincrementangle{360/\CF_cyclenum+\CF_initcycleangle}%
+ \edef\CF_currentstringangle{::+\CF_cycleincrementangle}%
+ \def\CF_initcycleangle{0}%
+ \let\CF_currentlength\CF_defaultlength% et on ignore la longueur de liaison spécifiée
+ \fi
+ \CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
+}
+
+\def\CF_setbondangle#1#2{% le code de la direction est contenu dans #1, en sortie, #2 contient l'angle
+ \CF_ifempty{#1}%
+ {\let#2\CF_defaultangle
+ }
+ {\if:\expandafter\noexpand\CF_firsttonil#1\_nil
+ \if:\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_gobarg#1\_nil
+ \pgfmathsetmacro#2{\CF_previousangle+\expandafter\CF_gobarg\CF_gobarg#1}%
+ \else
+ \pgfmathsetmacro#2{\CF_gobarg#1}%
+ \fi
+ \else
+ \pgfmathsetmacro#2{#1*\CF_angleincrement}%
+ \fi% puis normalise l'angle entre 0 et 360
+ \ifdim\ifdim#2pt<0pt -\fi#2pt>360pt
+ \pgfmathsetmacro#2{#2-360*floor(#2/360)}%
+ \fi% si |#2|>360
+ \ifdim#2pt<0pt
+ \pgfmathsetmacro#2{#2+360}%
+ \fi
+ }%
+}
+
+\def\CF_analysemovearg#1,#2\_nil#3{%
+ \def#3{#1}\def\CF_movebondcoeff{#2}%
+}
+
+% Argument limités légitimes ici car #2 (qui est ce qui suit "@{<nom>}" dans l'argument optionnel) ne DOIT PAS
+% commencer par une accolade.
+\def\CF_grabmovearg @#1#2\_nil{%
+ \CF_ifinstr{#1},%
+ {\CF_analysemovearg#1\_nil\CF_movebondname}%
+ {\def\CF_movebondname{#1}\def\CF_movebondcoeff{0.5}}%
+ \def\CF_remainoptarg{#2}%
+}
+
+\def\CF_testemptyandassign#1#2#3{%
+ \CF_ifempty{#2}
+ {\let#1#3}
+ {\def#1{#2}}%
+}
+
+\def\CF_parseoptlist#1,#2,#3,#4,#5\_nil{%
+ \CF_testemptyandassign\CF_currentstringangle{#1}\CF_defaultstringangle
+ \CF_testemptyandassign\CF_currentlength {#2}\CF_defaultlength
+ \CF_testemptyandassign\CF_currentfromatom {#3}\CF_defaultfromatom
+ \CF_testemptyandassign\CF_currenttoatom {#4}\CF_defaulttoatom
+ \CF_expsecond{\CF_testemptyandassign\CF_currenttikz}{\CF_sanitizelastitem#5,\empty\_nil}\CF_defaulttikz
+}%
+
+\def\CF_analyseoptarg[#1]{%
+ \CF_doifnotempty{#1}%
+ {\CF_iffirsttokmatch{#1}{@}%
+ {\CF_grabmovearg#1\_nil
+ }
+ {\let\CF_movebondname\empty
+ \def\CF_remainoptarg{#1}%
+ }%
+ \expandafter\CF_parseoptlist\CF_remainoptarg,\empty,\empty,\empty,\empty\_nil
+ }%
+ \CF_analyseoptarga\relax
+}
+
+\def\CF_analyseoptarga#1\_nil#2{%
+ \CF_expsecond{\def#2}{\CF_gobarg#1}%
+}
+
+\def\CF_seeksubmol{%
+ \CF_expsecond{\def\CF_molecule}{\romannumeral-`\.\expandafter\noexpand\CF_molecule}%
+ \CF_expsecond\CF_iffirsttokmatch{\CF_molecule}!%
+ {\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enlève le "!"
+ \CF_ifx\empty\CF_molecule
+ {\CF_error{no submol name found after "!"}}
+ {}%
+ \ifcat\relax\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule*\_nil
+ \expandafter\CF_seeksubmola\CF_molecule\_nil
+ \else
+ \expandafter\CF_seeksubmolb\CF_molecule\_nil
+ \fi
+ \CF_seeksubmol
+ }%
+ {}%
+}
+
+\def\CF_seeksubmola#1{\CF_seeksubmolc#1\relax}
+
+\def\CF_seeksubmolb#1{\expandafter\CF_seeksubmolc\csname CF__#1\endcsname\relax}% nom de la sous molécule
+
+\def\CF_seeksubmolc#1#2\_nil{%#1=macro de la sous molécule #2=reste du code commençant par \relax
+ \CF_expsecond{\CF_eexpsecond{\def\CF_molecule}}{\expandafter#1\CF_gobarg#2}% supprime le \relax puis ajoute la macro au début et la 2-développe
+}
+
+\def\CF_insertemptygroup#1{% insère {} au début de la sc #1
+ \CF_expsecond{\def#1}{\expandafter{\expandafter}#1}%
+}
+
+\def\chemfig{\CF_testopt\CF_chemfiga{}}
+
+\def\CF_chemfiga[#1]{%
+ \begingroup
+ \edef\CF_temp{%
+ \unexpanded\expandafter{\CF_begintikzpicture}%
+ [remember picture,%
+ every node/.style={%
+ anchor=base,%
+ inner sep=0pt,%
+ outer sep=0pt,%
+ minimum size=0pt,%
+ \unexpanded\CF_threeea{\useKV[chemfig]{atom style}}%
+ },%
+ baseline,%
+ \unexpanded\CF_threeea{\useKV[chemfig]{chemfig style}}%
+ ]%
+ }%
+ \CF_sanitizecatcode
+ \CF_exptwomacroargs\CF_chemfigb\CF_begintikzpicture\CF_endtikzpicture[#1]%
+}
+
+\def\CF_chemfigb#1#2[#3]#4{%
+ \endgroup
+ \begingroup
+ \setchemfig{#3}%
+ \edef\CF_temp{%
+ \unexpanded{#1}[%
+ remember picture,%
+ every node/.style={%
+ anchor=base,%
+ inner sep=0pt,%
+ outer sep=0pt,%
+ minimum size=0pt,%
+ \unexpanded\CF_threeea{\useKV[chemfig]{atom style}}%
+ },%
+ baseline,%
+ \unexpanded\CF_threeea{\useKV[chemfig]{chemfig style}}%
+ ]%
+ }%
+ \CF_temp% début du tikzpicture
+ \begingroup% \endgroup rajouté en sortie de tracé par \CF_chemfigd
+ \let\CF_hooklist\empty
+ \CF_expsecond\setchemfig{#3}%
+ \ifboolKV[chemfig]{fixed length}
+ {\CF_macrofixedbondlengthtrue}
+ {\CF_macrofixedbondlengthfalse}%
+ \ifboolKV[chemfig]{bond join}
+ {\let\CF_drawaxisbond\CF_drawaxisbondjoin}
+ {\let\CF_drawaxisbond\CF_drawaxisbondnojoin}%
+ \ifboolKV[chemfig]{cram rectangle}
+ {\let\CF_clipcramornot\CF_gobtikzinstruction}
+ {\let\CF_clipcramornot\clip}%
+ \CF_valuetomacro\CF_crambasewidth [1.5ex]{cram width}%
+ \CF_valuetomacro\CF_cramdashlength [1pt]{cram dash width}%
+ \CF_valuetomacro\CF_cramdashsep [2pt]{cram dash sep}%
+ \CF_valuetomacro\CF_atomsep [3em]{atom sep}% espacement des atomes liés
+ \CF_valuetomacro\CF_bondoffset [2pt]{bond offset}%
+ \CF_valuetomacro\CF_doublesep [2pt]{double bond sep}%
+ \CF_valuetomacro\CF_angleincrement [45]{angle increment}%
+ \CF_valuetomacro\CF_nodestyle []{node style}%
+ \CF_valuetomacro\CF_bondstyle []{bond style}%
+ \CF_valuetomacro\CF_stacksep [1.5pt]{stack sep}%
+ \CF_valuetomacro\CF_cycleradiuscoeff[0.75]{cycle radius coeff}% coeff multiplicateur du rayon des arcs dans les cycles
+ \CF_incyclefalse
+ \CF_cntgroup0
+ \let\CF_lastaction\CF_zero% 0=début du dessin 1=tracé d'un noeud 2=tracé d'une liaison
+ \let\CF_startoffset\empty
+ \let\CF_endoffset\empty
+ \let\CF_bondoutcontentsaved\empty
+ \def\CF_cycleanglecorrection{180/\CF_cyclenum}%
+ \def\CF_defaultangle{0}%
+ \def\CF_defaultstringangle{:0}% angle pris par défaut si le champ est vide
+ \def\CF_defaultlength{1}%
+ \let\CF_defaultfromatom\empty% numero de l'atome d'où partent les liaisons par défaut
+ \let\CF_defaulttoatom\empty% numéro de l'atome où arrivent les laisons par défaut
+ \let\CF_defaulttikz\empty
+ \let\CF_previousbondangle\empty
+ \let\CF_joinbond\CF_zero
+ \let\CF_previoustikz\empty
+ \everyeof{\_nil}\endlinechar-1
+ \CF_sanitizecatcode
+ \expandafter\CF_assigntonil\expandafter\CF_molecule\scantokens{#4}%
+ \CF_expsecond{\CF_substall\CF_molecule}\CFhash\CFhash
+ \CF_expsecond\CF_chemfigc{\CF_molecule}%
+ %\endgroup <-- rajouté par \CF_chemfigd
+ #2% fin du tikzpicture
+ \endgroup
+ \let\CF_flipstate\CF_zero
+}
+
+\def\CF_chemfigc#1{% #1 est le code de la molécule
+ \ifnum\CF_lastaction=3
+ \ifCF_incycle
+ \def\CF_defaultangle{0}%
+ \else
+ \ifnum\CF_cntcycle=0 % si c'est le début d'un cycle
+ \pgfmathsetmacro\CF_defaultangle{\CF_previousangle+180+\CF_cycleanglecorrection}% on met la liaison à +180° + correction
+ \else
+ \pgfmathsetmacro\CF_defaultangle{\CF_previousangle-90+180/\CF_cyclenum}% sinon à la bissectrice du sommet du cycle
+ \fi
+ \fi
+ \let\CF_defaultstringangle\empty
+ \fi
+ \let\CF_currentangle\CF_defaultangle
+ \def\CF_molecule{#1}%
+ \CF_seeksubmol% alias en premier ?
+ \if[\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule\_nil
+ \expandafter\CF_analyseoptarg\CF_molecule\_nil\CF_molecule
+ \CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
+ \let\CF_defaultangle\CF_currentangle
+ \let\CF_previousangle\CF_currentangle
+ \CF_doifnotempty\CF_currentstringangle{\let\CF_defaultangle\CF_currentangle}%
+ \CF_doifnotempty\CF_currentlength {\let\CF_defaultlength\CF_currentlength}%
+ \CF_doifnotempty\CF_currentfromatom {\let\CF_defaultfromatom\CF_currentfromatom}%
+ \CF_doifnotempty\CF_currenttoatom {\let\CF_defaulttoatom\CF_currenttoatom}%
+ \CF_doifnotempty\CF_currenttikz {\let\CF_defaulttikz\CF_currenttikz}%
+ \CF_seeksubmol
+ \fi
+ \edef\CF_defaultstringangle{:\CF_defaultangle}%
+ \let\CF_currentlength\CF_defaultlength
+ \let\CF_currentfromatom\CF_defaultfromatom
+ \let\CF_currenttoatom\CF_defaulttoatom
+ \let\CF_currenttikz\CF_defaulttikz
+ \ifCF_incycle% si on commence un cycle
+ \let\CF_currentangle\CF_previousangle
+ \ifCF_cyclearc% on doit tracer l'arc de cercle dans le cycle ?
+ \pgfmathsetmacro\CF_cyclearcradius{\CF_cycleradiuscoeff*\CF_currentlength*\CF_atomsep/(2*tan(180/\CF_cyclenum))}%
+ \pgfmathsetmacro\CF_cyclearcinitangle{\CF_currentangle+\CF_initcycleangle+180/\CF_cyclenum+90}
+ \pgfmathparse{\CF_currentlength*\CF_atomsep/(2*sin(180/\CF_cyclenum))}%
+ \node[at=(\CF_bondoutnode),shift=(\CF_cyclearcinitangle:\pgfmathresult pt)](arccenter){};% le centre de l'arc
+ \node[at=(arccenter),shift=(\CF_cyclearcstartangle:\CF_cyclearcradius pt)](initarc){};% le début de l'arc
+ \CF_expafter{\draw[}\CF_cyclearcdirecttikz](initarc) arc (\CF_cyclearcstartangle:\CF_cyclearcendangle:\CF_cyclearcradius pt);
+ \fi
+ \else
+ \let\CF_currentangle\CF_defaultangle
+ \fi
+ \ifnum\CF_lastaction=0
+ \let\CF_previousangle\CF_defaultangle
+ \node(CF_node){};
+ \CF_expsecond\CF_iffirsttokin{\CF_molecule}{-=(*~?<>}%
+ {\CF_insertemptygroup\CF_molecule}%
+ {}%
+ \fi
+ \CF_chemfigd
+}
+
+\def\CF_chemfigd{%
+ \let\CF_nextaction\CF_chemfigd% à priori, on reboucle
+ \CF_ifx\CF_molecule\empty
+ {\let\CF_nextaction\endgroup
+ }
+ {\CF_seeksubmol
+ \CF_expsecond\CF_seeknode{\CF_molecule}\CF_currentatomgroup\CF_molecule
+ \CF_ifx\empty\CF_currentatomgroup% pas de noeud pour commencer ?
+ {\def\CF_bondoutnode{%
+ n\CF_lastgroupnumber-%
+ \ifx\CF_currentfromatom\empty
+ \ifdim\CF_currentangle pt<90pt
+ \number\CF_cntatomgroup
+ \else
+ \ifdim\CF_currentangle pt>270pt
+ \number\CF_cntatomgroup
+ \else
+ 1%
+ \fi
+ \fi
+ \else
+ \CF_currentfromatom
+ \fi}%
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_molecule\relax\_nil}%
+ \CF_iffirsttokina{-=<>~}% la suite est une liaison
+ {\ifnum\CF_lastaction=2 % c'est la deuxième liaison consécutive ?
+ \CF_insertemptygroup\CF_molecule% insère un groupe vide
+ \edef\CF_bondoutnode{\CF_bondoutnode}%
+ \else
+ \ifCF_incycle
+ \advance\CF_cntcycle1
+ \fi
+ \CF_expsecond\CF_analysebond{\CF_molecule}\CF_bondtype
+ \edef\CF_bondoutnode{\CF_bondoutnode}%
+ \let\CF_molecule\CF_remainafterbond
+ \ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \CF_threeea\CF_execfirst
+ \else
+ \ifnum\CF_cntcycle=1
+ \let\CF_cyclefirsttikz\CF_currenttikz
+ \CF_doifnotempty\CF_startoffset{\let\CF_cyclejoinlast\CF_zero}%
+ \fi
+ \CF_threeea\CF_execsecond
+ \fi
+ \else
+ \expandafter\CF_execsecond
+ \fi
+ {\let\CF_nextaction\endgroup
+ \CF_drawbond\CF_bondtype{\CF_bondoutnode}{\CF_hookcycle}\CF_previousatomgroup\CF_hookatomgroup
+ }%
+ {\node[at=(\CF_bondoutnode\ifCF_incycle\else\ifCF_macrofixedbondlength.\CF_currentangle\fi\fi),shift=(\ifcase\CF_flipstate\or180-\or-\fi\CF_currentangle:\CF_currentlength*\CF_atomsep)](CF_node){};
+ \let\CF_previousangle\CF_currentangle
+ \def\CF_lastaction{2}%
+ }%
+ \fi
+ \ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_molecule}\relax
+ % s'il ne reste plus rien après la liaison (sans tenir compte de l'espace devant)-> insère un groupe vide
+ \CF_insertemptygroup\CF_molecule
+ \fi
+ }%
+ {\edef\CF_bondoutnode{\CF_bondoutnode}% évalue le l'atome de départ de liaison
+ \CF_ifx(\CF_toksa% une parenthèse pour commencer ?
+ {\ifnum\CF_lastaction=2 % il y avait une liaison juste avant ?
+ \CF_insertemptygroup\CF_molecule
+ \else
+ \CF_expsecond\CF_grabsubmol{\CF_molecule}%
+ \begingroup
+ \ifCF_incycle\def\CF_lastaction{3}\fi% on était dans un cycle
+ \CF_incyclefalse
+ \aftergroup\CF_chemfigd
+ \def\CF_nextaction{\CF_expsecond\CF_chemfigc{\CF_molinparen}}%
+ \fi
+ }%
+ {\CF_ifx\CF_molecule\empty
+ {\let\CF_nextaction\endgroup
+ }
+ {% ce qui reste après le noeud courant n'est pas vide, ne commence pas par "-=~", ni par une parenthèse
+ \CF_ifx*\CF_toksa% un cycle ?
+ {\ifnum\CF_lastaction=2
+ \CF_insertemptygroup\CF_molecule% insère un groupe vide
+ \else
+ \ifCF_incycle
+ \def\CF_lastaction{3}%
+ \fi% on était dans un cycle
+ \ifnum\CF_lastaction=3
+ \let\CF_lastcyclenum\CF_cyclenum
+ \fi
+ \CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_molecule}*%
+ {\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enlève la 1er étoile
+ \CF_eexpsecond\CF_iffirsttokmatch{\expandafter\CF_gobarg\CF_molecule}[% un crochet ensuite ?
+ {\expandafter\CF_cycleparsepreamblewithoptarg\CF_molecule\_nil% \begingroup inclus
+ }%
+ {\def\CF_cyclearcstartangle{0}\def\CF_cyclearcendangle{360}%
+ \let\CF_cyclearcdirecttikz\empty
+ \expandafter\CF_cycleparsepreamble\CF_molecule\_nil% \begingroup inclus
+ }%
+ \CF_cyclearctrue
+ }%
+ {\expandafter\CF_cycleparsepreamble\CF_molecule\_nil% \begingroup inclus
+ \CF_cyclearcfalse
+ }%
+ \CF_cntcycle0
+ \edef\CF_hookcycle{\CF_bondoutnode}%
+ \let\CF_hookatomgroup\CF_previousatomgroup
+ \CF_ifx\CF_hookatomgroup\CF_emptynode
+ {\def\CF_cyclejoinlast{1}}% joindre le dernier
+ {\def\CF_cyclejoinlast{0}}
+ \CF_incycletrue
+ \ifnum\CF_lastaction=3
+ \pgfmathsetmacro\CF_initcycleangle{360/\CF_lastcyclenum-180}% c'est un cycle dans un cycle
+ \else
+ \pgfmathsetmacro\CF_initcycleangle{-180/\CF_cyclenum-90+\CF_cycleanglecorrection}%
+ \fi
+ \aftergroup\CF_chemfigd
+ \def\CF_nextaction{\CF_expsecond\CF_chemfigc{\CF_molinparen}}%
+ \fi
+ }%
+ {\CF_error{something went wrong here: \detokenize\expandafter{\CF_molecule}^^JIf you think it's a bug, please, send a Minimal Example to the author}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ {\CF_expthreemacroargs\CF_drawatomgroup\CF_currentangle\CF_currenttoatom\CF_currentatomgroup
+ }%
+ }%
+ \CF_nextaction
+}
+
+\def\CF_cycleparsepreamble*#1#2\_nil{%
+ \ifnum#1<3
+ \CF_error{a cycle must be at least a triangle.^^JThe number following "*" must be 3 or more}%
+ \fi
+ \def\CF_molecule{#2}%
+ \CF_expsecond\CF_grabsubmol{\CF_molecule}%
+ \begingroup
+ \def\CF_cyclenum{#1}%
+}
+
+\def\CF_cycleparsepreamblewithoptarg*[#1]#2#3\_nil{%
+ \CF_cycleparseoptarg#1,\empty,\empty,\empty\_nil
+ \CF_cycleparsepreamble*#2#3\_nil
+}
+
+\def\CF_cycleparseoptarg#1,#2,#3\_nil{%
+ \CF_ifempty{#1}
+ {\def\CF_cyclearcstartangle{0}}
+ {\def\CF_cyclearcstartangle{#1}}%
+ \CF_ifempty{#2}
+ {\def\CF_cyclearcendangle{360}}
+ {\def\CF_cyclearcendangle{#2}}%
+ \CF_expsecond{\def\CF_cyclearcdirecttikz}{\CF_sanitizelastitem#3,\empty\_nil}%
+}
+
+\def\CF_grabsubmol#1{%
+ \begingroup
+ \catcode`(1 \catcode`)2
+ \CF_threeea
+ \endgroup
+ \expandafter\CF_grabsubmola\scantokens{\relax#1}%
+}
+
+\def\CF_grabsubmola#1\_nil{%
+ \expandafter\CF_assigntonil\expandafter\CF_molecule\scantokens\CF_threeea{\expandafter\CF_gobarg \CF_gobarg#1}%
+ \expandafter\CF_assigntonil\expandafter\CF_molinparen\scantokens\CF_threeea{\expandafter\CF_firsttonil\CF_gobarg#1\_nil}%
+}
+
+\def\CF_ifcarisupperletter#1{%
+ \ifcat\relax\noexpand#1%
+ \let\CF_next\CF_execsecond% faux si c'est une sc
+ \else
+ \ifnum`#1<`A
+ \let\CF_next\CF_execsecond
+ \else
+ \ifnum`#1>`Z
+ \let\CF_next\CF_execsecond
+ \else
+ \let\CF_next\CF_execfirst
+ \fi
+ \fi
+ \fi
+ \CF_next
+}
+
+% Créé 4 noeuds au dessus et au dessous des noeuds #1 et #2
+% à une distance de #3 du noeud #1 et #4 du noeud #2
+\def\CF_createnormnodes#1#2#3#4{%
+ \CF_doifnotempty{#3}
+ {\node[shape=coordinate,at=(#1),xshift=#3*\CF_normx,yshift=#3*\CF_normy](#11){};
+ \node[shape=coordinate,at=(#1),xshift=-#3*\CF_normx,yshift=-#3*\CF_normy](#12){};
+ }%
+ \CF_doifnotempty{#4}
+ {\node[shape=coordinate,at=(#2),xshift=#4*\CF_normx,yshift=#4*\CF_normy](#21){};
+ \node[shape=coordinate,at=(#2),xshift=-#4*\CF_normx,yshift=-#4*\CF_normy](#22){};
+ }%
+}
+
+\def\CF_computenodevect#1#2{%
+ \pgfextractx\CF_dim{\pgfpointanchor{#1}{center}}\edef\CF_dimax{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#1}{center}}\edef\CF_dimay{\the\CF_dim}%
+ \pgfextractx\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimbx{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimby{\the\CF_dim}%
+ \pgfmathsetmacro\CF_vectorlen{veclen(\CF_dimbx-\CF_dimax,\CF_dimby-\CF_dimay)}%
+ \pgfmathsetmacro\CF_normx{(\CF_dimay-\CF_dimby)/\CF_vectorlen}%
+ \pgfmathsetmacro\CF_normy{(\CF_dimbx-\CF_dimax)/\CF_vectorlen}%
+}
+
+\def\CF_setoffset#1#2{%
+ \CF_doifempty#1%
+ {\edef#1{%
+ \ifx#2\CF_emptynode
+ 0pt%
+ \else
+ \ifx#2\empty
+ 0pt%
+ \else
+ \CF_bondoffset
+ \fi
+ \fi}%
+ }%
+}
+
+\def\CF_drawbond#1#2#3#4#5{% #1=type de liaison #2 et #3:nom de noeuds de début et fin #4 et #5: contenu des atomes de début et fin
+ \CF_setoffset\CF_startoffset#4%
+ \CF_setoffset\CF_endoffset#5%
+ \let\CF_currentbondstyle\CF_bondstyle
+ \CF_doifnotempty\CF_currenttikz{\CF_eaddtomacro\CF_currentbondstyle{\expandafter,\CF_currenttikz}}%
+ \path(#2)--(#3)coordinate[pos=0](#2@)coordinate[pos=1](#3@);%
+ \CF_computenodevect{#2@}{#3@}%
+ \pgfmathsetmacro\CF_startcoeff{\CF_startoffset/\CF_vectorlen}%
+ \pgfmathsetmacro\CF_endcoeff{1-\CF_endoffset/\CF_vectorlen}%
+ \path(#2@)--(#3@)coordinate[pos=\CF_startcoeff](#2@@)coordinate[pos=\CF_endcoeff](#3@@);%
+ \CF_doifnotempty\CF_movebondname% on doit poser un noeud sur la liaison
+ {\path(#2@@)--(#3@@)coordinate[overlay,pos=\CF_movebondcoeff](\CF_movebondname);
+ \let\CF_movebondname\empty
+ }%
+ \ifcase#1\relax
+ \CF_error{unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
+ \or% 1 = liaison simple
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe
+ \or% 2 = liaison double
+ \ifCF_incycle
+ \ifnum\CF_doublebondtype=0
+ \def\CF_doublebondtype{1}%
+ \fi
+ \ifnum\CF_flipstate>0
+ \def\CF_doublebondtype{2}%
+ \fi
+ \pgfmathsetmacro\CF_doublebondlengthcorrection{\CF_doublesep*tan(180/\CF_cyclenum)}%
+ \fi
+ \ifcase\CF_doublebondtype
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_doublesep/2}{\CF_doublesep/2}%
+ \CF_drawbonda(#2@@1)--(#3@@1);
+ \CF_drawbonda(#2@@2)--(#3@@2);
+ \let\CF_joinbond\CF_zero
+ \or
+ \CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
+ \begingroup% ajuste éventuellement les longueurs des liaisons doubles
+ \ifCF_incycle
+ \ifdim\CF_startoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten <=\CF_doublebondlengthcorrection pt}%
+ \fi
+ \ifdim\CF_endoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten >=\CF_doublebondlengthcorrection pt}%
+ \fi
+ \fi
+ \CF_drawbonda(#2@@1)--(#3@@1);
+ \endgroup
+ \or
+ \CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
+ \begingroup% ajuste éventuellement les longueurs des liaisons doubles
+ \ifCF_incycle
+ \ifdim\CF_startoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten \ifnum\CF_flipstate=0 <=-\else>=\fi\CF_doublebondlengthcorrection pt}%
+ \fi
+ \ifdim\CF_endoffset=0pt
+ \CF_edefaddtomacro\CF_currentbondstyle{,shorten \ifnum\CF_flipstate=0 >=-\else<=\fi\CF_doublebondlengthcorrection pt}%
+ \fi
+ \fi
+ \CF_drawbonda(#2@@2)--(#3@@2);
+ \endgroup
+ \fi
+ \or% 3 = liaison triple
+ \CF_createnormnodes{#2@@}{#3@@}\CF_doublesep\CF_doublesep
+ \CF_drawaxisbond{#2}{#3}% trace la liaison simple dans l'axe\CF_drawbonda(#2@@)--(#3@@);
+ \CF_drawbonda(#2@@1)--(#3@@1);
+ \CF_drawbonda(#2@@2)--(#3@@2);
+ \or% 4 = liaison Cram pleine de #2 vers #3
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\filldraw[}\CF_currentbondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \or% 5 = liaison Cram creuse de #3 vers #2
+ \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\filldraw[}\CF_currentbondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \or% 6 = liaison Cram pointillée de #2 vers #3
+ \scope
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
+ \CF_clipcramornot(#2@@1)--(#2@@2)--(#3@@)--(#2@@1);
+ \CF_expafter{\draw[}\CF_currentbondstyle,dash pattern=on \CF_cramdashlength off \CF_cramdashsep,line width=\CF_crambasewidth](#2@@)--(#3@@);
+ \endscope
+ \let\CF_joinbond\CF_zero
+ \or% 7 = liaison Cram pointillée de #3 vers #2
+ \scope
+ \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
+ \CF_clipcramornot(#3@@1)--(#3@@2)--(#2@@)--(#3@@1);
+ \CF_expafter{\draw[}\CF_currentbondstyle,dash pattern=on \CF_cramdashlength off \CF_cramdashsep,line width=\CF_crambasewidth](#3@@)--(#2@@);
+ \endscope
+ \let\CF_joinbond\CF_zero
+ \or% 8 = liaison cram rectangle évidé de #2 vers #3
+ \CF_createnormnodes{#2@@}{#3@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\draw[}\CF_currentbondstyle,line join=bevel](#2@@1)--(#2@@2)--(#3@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \or% 9 = liaison cram rectangle évidé de #3 vers #1
+ \CF_createnormnodes{#3@@}{#2@@}{\CF_crambasewidth/2}{}%
+ \CF_expafter{\draw[}\CF_currentbondstyle,line join=bevel](#3@@1)--(#3@@2)--(#2@@)--cycle;
+ \let\CF_joinbond\CF_zero
+ \else
+ \CF_error{unknown bond type, this error should not occur^^JIf you think it's a bug, send a Minimal Example to the author}%
+ \fi
+ \let\CF_startoffset\empty
+ \let\CF_endoffset\empty
+ \let\CF_previoustikz\CF_currenttikz
+ \let\CF_previousbondangle\CF_previousangle
+ \def\CF_previousbond{#1}%
+}
+
+\def\CF_drawaxisbondnojoin#1#2{\CF_drawbonda(#1@@)--(#2@@);}
+
+\def\CF_drawaxisbondjoin#1#2{% dessine une liaison simple dans l'axe avec raccord rétrograde
+ \ifCF_incycle\ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \let\CF_nexttikz\CF_cyclefirsttikz
+ \fi\fi
+ \ifnum\CF_joinbond=0
+ \ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \ifnum\CF_cyclejoinlast=1
+ \CF_drawbonda(#1@@)--(#2@@)--%
+ ([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \def\CF_joinbond{1}%
+ \else
+ \CF_ifx\CF_previoustikz\CF_currenttikz
+ {\def\CF_joinbond{1}%
+ \CF_ifx\CF_previousatomgroup\CF_emptynode
+ {\CF_ifx\CF_previousbondangle\empty% si début molécule
+ {\CF_drawbonda(#1@@)--(#2@@);
+ }
+ {\ifdim\CF_startoffset=0pt
+ \ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \ifnum\CF_cyclejoinlast=1
+ \CF_ifx\CF_cyclefirsttikz\CF_currenttikz
+ {\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@)--%
+ ([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);
+ }
+ {\CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ }%
+ \else
+ \CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda([shift=(\CF_previousbondangle:-.5\pgflinewidth)]#1@@)--(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ }%
+ }
+ {\CF_drawbonda(#1@@)--(#2@@);}%
+ }
+ {\ifCF_incycle
+ \ifnum\CF_cntcycle=\CF_cyclenum\relax
+ \ifnum\CF_cyclejoinlast=1
+ \CF_ifx\CF_nexttikz\CF_currenttikz
+ {\CF_drawbonda(#1@@)--(#2@@)--([shift=(\CF_previousbondangle+2*\CF_cycleincrementangle:.5\pgflinewidth)]#2@@);}%
+ {\CF_drawbonda(#1@@)--(#2@@);}%
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ \else
+ \CF_drawbonda(#1@@)--(#2@@);
+ \fi
+ }%
+ \fi
+ \ifdim\CF_endoffset=0pt \else
+ \let\CF_joinbond\CF_zero
+ \fi
+}
+
+\def\CF_drawbonda{\CF_expafter{\draw[}\CF_currentbondstyle]}
+
+\def\CF_hookdrawall{% dessine tous les crochets contenus dans la sc \CF_hookdraw
+ \CF_doifnotempty\CF_hookdrawlist
+ {\expandafter\CF_hookdrawfirst\CF_hookdrawlist\_nil% trace un lien de crochet à crochet
+ \CF_hookdrawall
+ }%
+}
+
+\def\CF_hookdrawfirst[#1,#2,#3]#4#5#6#7#8\_nil{%
+ \def\CF_hookdrawlist{#8}%
+ \begingroup
+ \let\CF_joinbond\CF_zero
+ \def\CF_currenttikz{#3}%
+ \def\CF_hookstartcontent{#6}\def\CF_hookendcontent{#7}%
+ \CF_ifinteger{#2}%
+ {\CF_drawbond{#2}{#4}{#5}\CF_hookstartcontent\CF_hookendcontent
+ }%
+ {\CF_assignbondcode{#2}\CF_bondcurrentnum
+ \CF_drawbond\CF_bondcurrentnum{#4}{#5}\CF_hookstartcontent\CF_hookendcontent
+ }%
+ \endgroup
+}
+
+\def\CF_extractatom#1-#2\_nil{#2}% transforme le bound@outnode en n° de l'atome
+
+\def\CF_gobblemovearg @#1#2\_nil#3{%
+ \expandafter\def\csname atom_\number\CF_cntatom\endcsname{#2}%
+ \CF_ifinstr{#1},%
+ {\CF_analysemovearg#1\_nil#3\let\CF_movebondcoeff\empty}%
+ {\def#3{#1}}%
+ \CF_doifempty{#2}{\let\CF_nodestrut\empty}%
+}%
+
+\def\hflipnext{\def\CF_flipstate{1}}
+
+\def\vflipnext{\def\CF_flipstate{2}}
+\let\CF_flipstate\CF_zero
+
+\def\CF_drawatomgroup#1#2#3{% #1=angle d'arrivée de la liaison #2=numero atome sur lequel arrive la liaison #3=groupe d'atomes
+ \expandafter\let\expandafter\CF_bondoutcontent% assigne le contenu de l'atome d'où part la liaison
+ \csname
+ \ifdefined\CF_bondoutnode
+ atom_\expandafter\CF_extractatom\CF_bondoutnode\_nil
+ \else
+ empty%
+ \fi
+ \endcsname
+ \global\advance\CF_cntgroup1
+ \let\CF_currentatom\empty
+ \global\let\CF_hookdrawlist\empty
+ \CF_cntatomgroup0
+ \CF_iffirsttokmatch{#3}?
+ {\CF_drawatomgroupa{{}#3}}
+ {\CF_drawatomgroupa{#3}}%
+ \def\CF_currentatomgroup{#3}%
+ \CF_removemovearg\CF_currentatomgroup% enlève les "@{<nom>}"
+ \CF_ifinstr{#3}?%
+ {\CF_removehook\CF_currentatomgroup
+ \ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_currentatomgroup}\relax
+ \let\CF_currentatomgroup\CF_emptynode
+ \fi
+ }%
+ {}%
+ \CF_doifnotempty{#2}
+ {\ifnum#2<1
+ \CF_warning{no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
+ \else
+ \ifnum#2>\CF_cntatomgroup
+ \CF_error{no atom found at position #2, pershaps you mispelled the optional argument of the bond.}%
+ \fi
+ \fi
+ }%
+ \edef\CF_hookatomnumber{%
+ \CF_ifempty{#2}
+ {\ifdim#1pt>90pt
+ \ifdim#1pt<270pt
+ \number\CF_cntatomgroup
+ \else
+ 1%
+ \fi
+ \else
+ 1%
+ \fi
+ }
+ {#2%
+ }%
+ }%
+ \CF_cntatom\CF_hookatomnumber
+ \CF_ifx\CF_currentatomgroup\CF_emptynode
+ {\let\CF_nodestrut\empty
+ }
+ {\CF_ifx\empty\CF_bondoutcontentsaved
+ {\def\CF_nodestrut{\vphantom\CF_bondoutcontent}}%
+ {\def\CF_nodestrut{\vphantom\CF_bondoutcontentsaved}}%
+ }%
+ \edef\CF_optstring{anchor=\ifnum\CF_lastaction=0 base\else\ifCF_incycle center\else\ifCF_macrofixedbondlength 180+#1\else center\fi\fi\fi,at=(CF_node),\CF_nodestyle}% premier atome de la molécule affiché
+ \loop
+ \unless\ifnum\CF_cntatom>\CF_cntatomgroup
+ \CF_eexpafter
+ {\futurelet\CF_toksa}
+ {\expandafter\expandafter\expandafter\CF_gobtonil\csname atom_\number\CF_cntatom\endcsname\_nil}%
+ \CF_ifx @\CF_toksa% l'atome courant commence par un "@"
+ {\CF_threeea\CF_gobblemovearg\csname atom_\number\CF_cntatom\endcsname\_nil\CF_moveatomname
+ \CF_expafter{\node[}\CF_optstring,overlay](\CF_moveatomname){\phantom{\CF_nodecontent}};%
+ \let\CF_moveatomname\empty
+ }
+ {}%
+ \CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+ \let\CF_nodestrut\empty
+ \advance\CF_cntatom1
+ \edef\CF_optstring{anchor=base \ifnum\CF_flipstate=1 east\else west\fi,at=(n\number\CF_cntgroup-\number\numexpr\CF_cntatom-1.base \ifnum\CF_flipstate=1 west\else east\fi),\CF_nodestyle}%
+ \repeat
+ \CF_cntatom\CF_hookatomnumber
+ \ifnum\CF_lastaction=2 % s'il faut tracer une liaison
+ \gdef\CF_cycleanglecorrection{0}% alors c'est qu'un cycle ne peut pas commencer la molécule : annulation de la correction d'angle
+ \CF_drawbond\CF_bondtype{\CF_bondoutnode}{n\number\CF_cntgroup-\number\CF_cntatom}\CF_previousatomgroup\CF_currentatomgroup
+ \fi
+ \def\CF_lastaction{1}% met la dernière action à 1 : affichage d'un noeud
+ \loop
+ \ifnum\CF_cntatom>1
+ \advance\CF_cntatom-1
+ \edef\CF_optstring{anchor=base \ifnum\CF_flipstate=1 west\else east\fi,at=(n\number\CF_cntgroup-\number\numexpr\CF_cntatom+1.base \ifnum\CF_flipstate=1 east\else west\fi),\CF_nodestyle}%
+ \CF_eexpafter
+ {\futurelet\CF_toksa}
+ {\expandafter\expandafter\expandafter\CF_gobtonil\csname atom_\number\CF_cntatom\endcsname\_nil}%
+ \CF_ifx @\CF_toksa% l'atome courant commence par un "@"
+ {\CF_threeea\CF_gobblemovearg\csname atom_\number\CF_cntatom\endcsname\_nil\CF_moveatomname
+ \CF_expafter{\node[}\CF_optstring,overlay](\CF_moveatomname){\phantom{\CF_nodecontent}};%
+ \let\CF_moveatomname\empty
+ }
+ {}%
+ \CF_expafter{\node[}\CF_optstring](n\number\CF_cntgroup-\number\CF_cntatom){\CF_nodecontent};%
+ \repeat
+ \CF_hookdrawall
+ \edef\CF_lastgroupnumber{\number\CF_cntgroup}%
+ \let\CF_previousatomgroup\CF_currentatomgroup
+}
+
+\def\CF_keepmovearg @#1#2\_nil{\def\CF_currentatom{@{#1}}}
+
+\def\CF_drawatomgroupa#1{% transforme #1 en un groupe d'atomes
+ \CF_ifempty{#1}
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ }
+ {\advance\CF_cntatomgroup1
+ \futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \CF_ifx @\CF_toksa
+ {\CF_keepmovearg#1\_nil
+ \CF_removemovearga#1\_nil\CF_aftermovearg
+ \CF_expsecond\CF_drawatomgroupb{\CF_aftermovearg}%
+ }%
+ {\let\CF_currentatom\empty
+ \CF_drawatomgroupb{#1}%
+ }%
+ }%
+}
+
+\def\CF_drawatomgroupb#1{%
+ \CF_ifempty{#1}
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ }
+ {\futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \CF_ifx\bgroup\CF_toksa
+ {\CF_eaddtomacro\CF_currentatom{\expandafter{\CF_firsttonil#1\_nil}}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ {\CF_ifx\CF_sptoken\CF_toksa
+ {\CF_addtomacro\CF_currentatom{ }%
+ \CF_expsecond\CF_drawatomgroupba{\CF_afterspace#1\_nil}%
+ }%
+ {\CF_eaddtomacro\CF_currentatom{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ }%
+ }%
+}
+
+% enlève tous les "@{nom}" de la sc #1
+\def\CF_removemovearg#1{%
+ \CF_expsecond\CF_ifinstr{#1}@%
+ {\expandafter\CF_removemovearga#1\_nil#1%
+ \CF_removemovearg#1%
+ }%
+ {}%
+}
+
+% enlève le premier "@{<nom>}" de l'argument et l'assigne à #2
+\def\CF_removemovearga#1\_nil#2{%
+ \def\CF_removemoveargb##1@{%
+ \CF_expsecond{\def#2}{\CF_gobarg##1}% mange le \relax
+ \CF_removemoveargc\relax
+ }%
+ \def\CF_removemoveargc##1\_nil{\CF_eaddtomacro#2{\CF_gobtwoargs##1}}% mange le \relax et le <nom>
+ \CF_removemoveargb\relax#1\_nil
+}
+
+\def\CF_drawatomgroupba#1{% transforme #1 en un groupe d'atomes
+ \CF_ifempty{#1}
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ }
+ {\futurelet\CF_toksa\CF_gobtonil#1\_nil
+ \CF_ifx @\CF_toksa
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ \CF_drawatomgroupa{#1}%
+ }%
+ {\CF_ifx|\CF_toksa
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ \CF_expsecond\CF_drawatomgroupa{\CF_gobarg#1}%
+ }%
+ {\CF_ifx\CF_sptoken\CF_toksa
+ {\CF_addtomacro\CF_currentatom{ }%
+ \CF_expsecond\CF_drawatomgroupba{\CF_afterspace#1\_nil}%
+ }%
+ {\CF_ifx\bgroup\CF_toksa
+ {\CF_eaddtomacro\CF_currentatom{\expandafter{\CF_firsttonil#1\_nil}}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ {\CF_expsecond\CF_ifcarisupperletter{\CF_firsttonil#1\_nil}%
+ {\expandafter\let\csname atom_\number\CF_cntatomgroup\endcsname\CF_currentatom
+ \let\CF_currentatom\empty
+ \CF_drawatomgroupa{#1}%
+ }%
+ {\CF_ifx?\CF_toksa
+ {\CF_expsecond\CF_iffirsttokmatch{\CF_gobarg#1}[% un crochet après le "?"
+ {\expandafter\CF_graboptarg\CF_gobarg#1\_nil\CF_afterhook}%
+ {\CF_expafter{\CF_graboptarg[]}{\CF_gobarg#1}\_nil\CF_afterhook}%
+ \CF_exptwomacroargs\CF_ifinstr{\CF_hooklist}{\expandafter(\CF_hookcurrentname)}% crochet déjà défini ?
+ {\CF_expsecond\CF_hookparselist{\CF_hookcurrentname}% chercher les caractéristiques du crochet sauvegardé
+ \CF_edefaddtomacro\CF_hookdrawlist{%
+ [\CF_hookcurrentname,\CF_hookcurrentlink,\CF_hookcurrenttikz]{\CF_hooksavedcoord}{n\number\CF_cntgroup-\number\CF_cntatomgroup}}%
+ \CF_eaddtomacro\CF_hookdrawlist{\expandafter{\CF_hooksavedcontent}}%
+ \CF_eaddtomacro\CF_hookdrawlist{\expandafter{\CF_currentatom}}% ajoute les 4 arguments à la liste des crochets à tracer
+ \global\let\CF_hookdrawlist\CF_hookdrawlist
+ }%
+ {\CF_edefaddtomacro\CF_hooklist{(\CF_hookcurrentname)|n\number\CF_cntgroup-\number\CF_cntatomgroup|}%
+ \CF_eaddtomacro\CF_hooklist{\CF_currentatom|}%
+ \global\let\CF_hooklist\CF_hooklist
+ }%
+ \CF_expsecond\CF_drawatomgroupba{\CF_afterhook}%
+ }%
+ {\CF_eaddtomacro\CF_currentatom{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_drawatomgroupba{\CF_gobarg#1}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+
+\def\CF_kookdefaultname{a}
+\def\CF_hookdefaultlink{-}
+\def\CF_hookdefaulttikz{}
+
+\def\CF_hookparseoptarg#1,#2,#3\_nil{%
+ \CF_testemptyandassign\CF_hookcurrentname{#1}\CF_kookdefaultname
+ \CF_testemptyandassign\CF_hookcurrentlink{#2}\CF_hookdefaultlink
+ \CF_testemptyandassign\CF_hookcurrenttikz{#3}\CF_hookdefaulttikz
+}
+
+\def\CF_graboptarg[#1]#2\_nil#3{%
+ \CF_hookparseoptarg#1,,\_nil
+ \def#3{#2}%
+}
+
+\def\CF_hookparselist#1{% #1 est le nom du noeud à retrouver
+ \def\CF_hookparselista##1(#1)|##2|##3|##4\_nil{\def\CF_hooksavedcoord{##2}\def\CF_hooksavedcontent{##3}}%
+ \expandafter\CF_hookparselista\CF_hooklist\_nil
+}
+
+\def\CF_removehook#1{%
+ \CF_expsecond\CF_ifinstr{#1}?%
+ {\CF_expafter{\CF_removehooka\relax}#1\_nil#1%
+ \CF_removehook#1%
+ }
+ {}%
+}
+
+\def\CF_removehooka#1?#2\_nil#3{%
+ \CF_iffirsttokmatch{#2}[%
+ {\CF_removehookb#1?#2\_nil#3}
+ {\CF_expsecond{\def#3}{\CF_gobarg#1#2}}%
+}
+
+\def\CF_removehookb#1?[#2]#3\_nil#4{\CF_expsecond{\def#4}{\CF_gobarg#1#3}}
+
+\def\Lewis{%
+ \CF_lewisoverlayfalse
+ \CF_testopt\CF_lewisa{}%
+}
+
+\def\lewis{%
+ \CF_lewisoverlaytrue
+ \CF_testopt\CF_lewisa{}%
+}
+
+\def\CF_lewisa[#1]{%
+ \begingroup
+ \CF_doifnotempty{#1}{\setchemfig{#1}}%
+ \CF_valuetomacro\CF_lewiswidthdouble[0.3ex]{lewis | width}%
+ \CF_valuetomacro\CF_lewisoffset [0.4ex]{lewis sep}%
+ \CF_valuetomacro\CF_lewislength [1.5ex]{lewis length}%
+ \CF_valuetomacro\CF_lewisstyle []{lewis style}%
+ \CF_valuetomacro\CF_lewisdist [0.3em]{lewis dist}%
+ \CF_valuetomacro\CF_lewisradius [0.15ex]{lewis radius}%
+ \CF_valuetomacro\CF_lewisdiagcoeff [1]{lewis diag coeff}%
+ \ifCF_lewisoverlay
+ \CF_addtomacro\CF_lewisstyle{,overlay}%
+ \fi
+ \CF_lewisb
+}
+
+\def\CF_lewisb#1{%
+ \CF_lewisc#1\_nil
+ \endgroup
+}
+
+\def\CF_lewisc#1,#2\_nil{%
+ \setbox\CF_boxlewis\hbox{\printatom{#2}}% mettre en dehors de tikzpicture (si \printatom ne passe pas en mode math)
+ \tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
+ \CF_makeother;\CF_makeother:%
+ \node(CF_lewis@anchor){};
+ \def\CF_lewisremainpos{#1}%
+ \let\CF_lewispreviouspos\empty
+ \loop
+ \unless\ifx\CF_lewisremainpos\empty
+ \edef\CF_lewiscurrentpos{\expandafter\CF_firsttonil\CF_lewisremainpos\_nil}%
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \pgfmathsetmacro\CF_lewisx{\wd\CF_boxlewis/2+\ifcase\CF_lewiscurrentpos\space1\or1\or0\or-1\or-1\or-1\or0\or1\fi*(\wd\CF_boxlewis/2)}%
+ \pgfmathsetmacro\CF_lewisy{\ht\CF_boxlewis/2+\ifcase\CF_lewiscurrentpos\space0\or1\or1\or1\or0\or-1\or-1\or-1\fi*(\ht\CF_boxlewis/2\ifnum\CF_lewiscurrentpos>4 +\dp\CF_boxlewis\fi)}%
+ \edef\CF_lewisxoffset{\ifcase\CF_lewiscurrentpos\space1\or0.70711\or0\or-0.70711\or-1\or-0.70711\or0\or0.70711\fi}%
+ \edef\CF_lewisyoffset{\ifcase\CF_lewiscurrentpos\space0\or0.70711\or1\or0.70711\or0\or-0.70711\or-1\or-0.70711\fi}%
+ \ifodd\CF_lewiscurrentpos\relax
+ \pgfmathsetmacro\CF_lewiscurrentoffset{\CF_lewisoffset*\CF_lewisdiagcoeff}%%
+ \else
+ \let\CF_lewiscurrentoffset\CF_lewisoffset
+ \fi
+ \if.\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \CF_expafter{\draw[fill,black,}{\CF_lewisstyle]}%
+ (\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset,\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset)circle(\CF_lewisradius);%
+ \else
+ \if|\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
+ \pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
+ \CF_expafter{\draw[}\CF_lewisstyle]%
+ (\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt)--
+ (\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt+\CF_lewisxoffset*\CF_lewiswidthdouble,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt+\CF_lewisyoffset*\CF_lewiswidthdouble)--
+ (\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt+\CF_lewisxoffset*\CF_lewiswidthdouble,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt+\CF_lewisyoffset*\CF_lewiswidthdouble)--
+ (\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt)--cycle;%
+ \else
+ \if:\expandafter\CF_firsttonil\CF_lewisremainpos\relax\_nil
+ \edef\CF_lewisremainpos{\expandafter\CF_gobarg\CF_lewisremainpos}%
+ \pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
+ \pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
+ \CF_expafter{\draw[fill,black,}{\CF_lewisstyle]}%
+ (\CF_lewisx pt+\CF_lewisdist*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewisdist*\CF_lewisxoffset/2 pt)circle(\CF_lewisradius)%
+ (\CF_lewisx pt-\CF_lewisdist*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewisdist*\CF_lewisxoffset/2 pt)circle(\CF_lewisradius);%
+ \else
+ \pgfmathsetmacro\CF_lewisx{\CF_lewisx pt+\CF_lewisxoffset*\CF_lewiscurrentoffset}%
+ \pgfmathsetmacro\CF_lewisy{\CF_lewisy pt+\CF_lewisyoffset*\CF_lewiscurrentoffset}%
+ \CF_expafter{\draw[}\CF_lewisstyle]%
+ (\CF_lewisx pt+\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy-\CF_lewislength*\CF_lewisxoffset/2 pt)--%
+ (\CF_lewisx pt-\CF_lewislength*\CF_lewisyoffset/2 pt,\CF_lewisy+\CF_lewislength*\CF_lewisxoffset/2 pt);%
+ \fi
+ \fi
+ \fi
+ \repeat
+ \node[anchor=base west]at(CF_lewis@anchor){\box\CF_boxlewis};%
+ \endtikzpicture
+}
+
+\def\Chembelow{\begingroup\let\CF_temp\CF_gobarg\CF_chembelowa}
+
+\def\chembelow{\begingroup\let\CF_temp\CF_id\CF_chembelowa}
+
+\def\CF_chembelowa{\CF_testopt\CF_chembelowb\CF_stacksep}
+
+\def\CF_chembelowb[#1]#2#3{%
+ \setbox\CF_box\hbox{\printatom{#2}}%
+ \expandafter\vtop\CF_temp{to\ht\CF_box}{%
+ \offinterlineskip
+ \hbox{\printatom{#2}}%
+ \kern#1\relax
+ \hbox to\wd\CF_box{\hss\printatom{#3}\hss}%
+ \CF_temp\vss
+ }%
+ \endgroup
+}
+
+\def\Chemabove{\begingroup\let\CF_temp\CF_gobarg\CF_chemabovea}
+
+\def\chemabove{\begingroup\let\CF_temp\CF_id\CF_chemabovea}
+
+\def\CF_chemabovea{\CF_testopt\CF_chemaboveb\CF_stacksep}
+
+\def\CF_chemaboveb[#1]#2#3{%
+ \setbox\CF_box\hbox{\printatom{#2}}%
+ \expandafter\vbox\CF_temp{to\ht\CF_box}{%
+ \offinterlineskip
+ \CF_temp\vss
+ \hbox to\wd\CF_box{\hss\printatom{#3}\hss}%
+ \kern#1\relax
+ \hbox{\printatom{#2}}%
+ }%
+ \endgroup
+}
+
+\def\chemmove{\CF_testopt\CF_chemmove{}}
+
+\def\CF_chemmove[#1]#2{%
+ \CF_doifnotempty{#2}%
+ {\expandafter\tikzpicture\romannumeral
+ \CF_ifempty{#1}%
+ {\CF_zero[overlay,remember picture,-CF]}
+ {\CF_zero[overlay,remember picture,-CF,#1]}%
+ #2
+ \endtikzpicture
+ }%
+}
+
+\def\chemnameinit#1{%
+ \setbox\CF_boxstuff\hbox{#1}%
+ \xdef\CF_dpmax{\the\dp\CF_boxstuff}%
+}
+\let\CF_dpmax\CF_zero
+
+\def\CF_parsemolname#1\\#2\_nil{%
+ \hbox to\CF_wdstuffbox{\hss#1\hss}%
+ \CF_doifnotempty{#2}{\CF_parsemolname#2\_nil}%
+}
+
+\def\chemname{%
+ \CF_ifstar
+ {\CF_adjustnamedpfalse\CF_chemnamea}
+ {\CF_adjustnamedptrue \CF_chemnamea}%
+}
+
+\def\CF_chemnamea{\CF_testopt\CF_chemnameb{1.5ex}}
+
+\def\CF_chemnameb[#1]#2#3{%
+ \setbox\CF_boxstuff\hbox{#2}%
+ \edef\CF_wdstuffbox{\the\wd\CF_boxstuff}\edef\CF_dpstuffbox{\the\dp\CF_boxstuff}%
+ \leavevmode
+ \ifdim\CF_dpmax<\CF_dpstuffbox\global\let\CF_dpmax\CF_dpstuffbox\fi
+ \vtop{%
+ \box\CF_boxstuff
+ \nointerlineskip
+ \kern\dimexpr#1\ifCF_adjustnamedp+\CF_dpmax-\CF_dpstuffbox\fi\relax
+ \CF_parsemolname#3\\\_nil
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% S C H É M A S R É A C T I O N N E L S %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\let\CF_schemenest\CF_zero
+
+\def\CF_subscheme{\CF_testopt\CF_subschemea{}}
+\def\CF_subschemea[#1]{\CF_testopt{\CF_subschemeb[#1]}{text}}
+\def\CF_subschemeb[#1][#2]#3{\schemestart[#1][#2]#3\schemestop}
+
+\def\chemleft#1#2\chemright#3{%
+ \leavevmode
+ \begingroup
+ \setbox0\hbox{$\vcenter{\hbox{}}$}\edef\CF_delimmathht{\the\ht0}%
+ \setbox0\hbox{#2}\edef\CF_delimdim{\the\dimexpr(\ht0+\dp0)/2}%
+ \edef\CF_delimshift{\the\dimexpr(\ht0-\dp0)/2-\CF_delimmathht}%
+ \raise\CF_delimshift\hbox{$\left#1\vrule height\CF_delimdim depth\CF_delimdim width0pt\right.$}\box0
+ \raise\CF_delimshift\hbox{$\left.\vrule height\CF_delimdim depth\CF_delimdim width0pt\right#3$}%
+ \endgroup
+}
+
+\def\chemright#1{%
+ \CF_warning{"\string\chemright\string#1" ignored! No \string\chemleft\space previously found.}%
+}
+
+\def\chemup#1#2\chemdown#3{%
+ \begingroup
+ \setbox0\hbox{\printatom{#2}}\edef\CF_delimdim{\the\dimexpr\wd0/2}%
+ \tikzpicture[every node/.style={inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
+ \node[anchor=base west](chem@stuff){\box0};%
+ \node[at=(chem@stuff.north),anchor=east,rotate=-90]{$\left#1\vrule height\CF_delimdim depth\CF_delimdim width0pt\right.$};%
+ \node[at=(chem@stuff.south),anchor=west,rotate=-90]{$\left.\vrule height\CF_delimdim depth\CF_delimdim width0pt\right#3$};%
+ \endtikzpicture
+ \endgroup
+}
+
+\def\chemdown#1{%
+ \CF_warning{"\string\chemdown\string#1" ignored! No \string\chemup\space previously found.}%
+}
+
+\def\CF_setstyle#1,#2,#3\_nil#4#5#6{%
+ \def#4{#1}\let#5\empty\let#6\empty
+ \CF_iffirsttokmatch\CF_quark{#2\relax}
+ {}%
+ {\def#5{#2}%
+ \CF_iffirsttokmatch\CF_quark{#3\relax}
+ {}%
+ {\CF_setstylea#3\_nil#6}%
+ }%
+}
+\def\CF_setstylea#1,\CF_quark#2\_nil#3{\def#3{#1}}
+
+\def\CF_and{\futurelet\CF_toksa\CF_anda}
+
+\def\CF_anda{%
+ \CF_ifx\CF_toksa\bgroup
+ {\CF_andb}
+ {\CF_andb{}}%
+}
+
+\def\CF_andb#1{%
+ \CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_signspaceante\CF_signspacepost\CF_signvshift
+ \CF_doifempty\CF_signspaceante{\CF_valuetomacro\CF_signspaceante[0.5em]{+ sep left}}%
+ \CF_doifempty\CF_signspacepost{\CF_valuetomacro\CF_signspacepost[0.5em]{+ sep right}}%
+ \CF_doifempty\CF_signvshift{\CF_valuetomacro\CF_signvshift[0pt]{+ vshift}}%
+ \raise\CF_signvshift\hbox{\kern\CF_signspaceante$+$\kern\CF_signspacepost}%
+}
+
+\def\schemestart{%
+ \begingroup
+ \xdef\CF_schemenest{\number\numexpr\CF_schemenest+1}%
+ \CF_testopt\CF_schemestarta{}%
+}
+
+\def\CF_schemestarta[#1]{%
+ \CF_valuetomacro\CF_defaultcompoundstyle[]{compound style}%
+ \CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_arrowangle\CF_arrowlength\CF_arrowstyle
+ \CF_doifempty\CF_arrowangle{\CF_valuetomacro\CF_arrowangle[0]{arrow angle}}%
+ \CF_doifempty\CF_arrowlength{\CF_valuetomacro\CF_arrowlength[1]{arrow coeff}}%
+ \CF_valuetomacro\CF_defaultarrowstyle[]{arrow style}%
+ \CF_valuetomacro\CF_arrowoffset[1em]{arrow offset}%
+ \CF_valuetomacro\CF_compoundsep[5em]{compound sep}%
+ \CF_valuetomacro\CF_arrowlabelsep[3pt]{arrow label sep}%
+ \CF_valuetomacro\CF_arrowhead[-CF]{arrow head}%
+ \CF_eexpsecond{\def\CF_arrowtip}{\expandafter\CF_gobarg\CF_arrowhead}%
+ \CF_eexpsecond{\CF_preaddtomacro\CF_defaultarrowstyle}{\useKV[chemfig]{arrow head},}%
+ \CF_ifx\empty\CF_arrowstyle
+ {\let\CF_arrowstyle\CF_defaultarrowstyle}
+ {\CF_expsecond{\CF_preaddtomacro\CF_arrowstyle}{\CF_defaultarrowstyle,}}% se rajoute après le style par défaut
+ \CF_valuetomacro\CF_arrowdoublesep[2pt]{arrow double sep}%
+ \pgfmathsetmacro\CF_arrowdoublesep{\CF_arrowdoublesep/2}%
+ \CF_valuetomacro\CF_arrowdoubleposstart[0.6]{arrow double coeff}%
+ \pgfmathsetmacro\CF_arrowdoubleposstart{(1-\CF_arrowdoubleposstart)/2}%
+ \pgfmathsetmacro\CF_arrowdoubleposend{1-\CF_arrowdoubleposstart}%
+ \ifboolKV[chemfig]{scheme debug}
+ {\tikzpicture[every node/.style={draw,anchor=base,inner sep=0pt,outer sep=0pt,minimum size=1.5pt},baseline,remember picture]}
+ {\tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline,remember picture]}%
+ \let\merge\CF_merge
+ \expandafter\let\csname+\endcsname\CF_and
+ \let\arrow\CF_arrow
+ \let\schemestop\CF_schemestop
+ \let\subscheme\CF_subscheme
+ \CF_testopt{\CF_schemestartb}{text}%
+}
+
+\def\CF_schemestartb[#1]{%
+ \ifnum\CF_schemenest=1 % la commande n'est pas imbriquée ?
+ \CF_cntcompound0
+ \fi
+ \edef\CF_currentnodename{c\number\CF_cntcompound}%
+ \let\CF_nextnodename\empty
+ \let\CF_nextnodestyle\empty
+ \let\CF_directarrowlist\empty
+ \ifboolKV[chemfig]{scheme debug}
+ {\node[fill,green](\CF_currentnodename){};}
+ {\node(\CF_currentnodename){};}%
+ \def\CF_nextnodeanchor{#1}%
+ \CF_doifempty\CF_nextnodeanchor{\def\CF_nextnodeanchor{text}}%
+ \let\CF_compound\empty
+ \CF_schemestartc
+}
+
+\def\CF_schemestartc{%
+ \futurelet\CF_toksa\CF_schemestarte
+}
+
+\expandafter\def\expandafter\CF_schemestartd\space{\futurelet\CF_toksa\CF_schemestarte}
+
+\def\CF_schemestarte{% ... et l'examine :
+ \CF_iffirsttokina{\arrow\schemestop\merge}%
+ {}
+ {\CF_ifx\CF_toksa\bgroup
+ {\CF_addnextarg
+ }
+ {\CF_ifx\CF_toksa\CF_sptoken
+ {\CF_addtomacro\CF_compound{ }%
+ \CF_schemestartd
+ }
+ {\afterassignment\CF_schemestartc
+ \CF_addtomacro\CF_compound
+ }%
+ }%
+ }%
+}
+
+\def\CF_addnextarg#1{\CF_addtomacro\CF_compound{{#1}}\CF_schemestartc}
+
+\def\CF_displaycompound#1#2{% #1 = nom et #2 = style
+ \CF_doifnotempty\CF_compound
+ {\global\advance\CF_cntcompound1
+ \CF_ifx\CF_defaultcompoundstyle\empty
+ {\let\CF_currentnodestyle\empty}
+ {\CF_expsecond{\def\CF_currentnodestyle}{\CF_defaultcompoundstyle,}}%
+ \CF_addtomacro\CF_currentnodestyle{anchor=\CF_nextnodeanchor,at=(\CF_currentnodename)}%
+ \CF_ifempty{#2}%
+ {\CF_doifnotempty\CF_nextnodestyle
+ {\CF_eaddtomacro\CF_currentnodestyle{\expandafter,\CF_nextnodestyle}}%
+ }
+ {\CF_doifnotempty\CF_nextnodestyle
+ {\CF_warning{two styles for the same node, first style "\CF_nextnodestyle" ignored}%
+ }%
+ \CF_addtomacro\CF_currentnodestyle{,#2}%
+ }%
+ \CF_ifempty{#1}
+ {\edef\CF_temp{%
+ \CF_ifempty\CF_nextnodename
+ {c\number\CF_cntcompound}
+ {\CF_nextnodename}%
+ }%
+ }
+ {\CF_doifnotempty\CF_nextnodename
+ {\CF_warning{two names for the same node, first name "\CF_nextnodename" ignored}%
+ }%
+ \edef\CF_temp{#1}%
+ }%
+ \CF_expafter{\node[}\CF_currentnodestyle](\CF_temp){\CF_compound};%
+ \ifboolKV[chemfig]{scheme debug}%
+ {\node[draw=none,anchor=270,at=(\CF_temp.90),fill=green!60,overlay,opacity=0.5]{\scriptsize\bfseries\CF_temp};%
+ }
+ {}%
+ \let\CF_currentnodename\CF_temp
+ }%
+}
+
+\def\CF_schemestop{%
+ \CF_displaycompound{}{}%
+ \CF_directarrowlist
+ \endtikzpicture
+ \xdef\CF_schemenest{\number\numexpr\CF_schemenest-1}%
+ \endgroup
+}
+
+\def\CF_analysearrowarg#1{\CF_analysearrowarga#1[]\_nil}
+
+\def\CF_analysearrowarga#1[#2]#3\_nil{%
+ \CF_ifinstr{#1}.
+ {\CF_addtomacro\CF_temp{#1[#2]}}
+ {\CF_addtomacro\CF_temp{#1.[#2]}}%
+}
+
+\def\CF_arrow{%
+ \CF_ifnextchar(%
+ {\CF_arrowa
+ }
+ {\CF_ifnextchar\bgroup
+ {\CF_arrowb(.[]--.[])}
+ {\CF_arrowb(.[]--.[]){}}%
+ }%
+}
+
+\def\CF_arrowa(#1--#2){%
+ \def\CF_temp{(}%
+ \CF_analysearrowarg{#1}%
+ \CF_addtomacro\CF_temp{--}%
+ \CF_analysearrowarg{#2}%
+ \CF_addtomacro\CF_temp)%
+ \CF_ifnextchar\bgroup
+ {\expandafter\CF_arrowb\CF_temp}
+ {\expandafter\CF_arrowb\CF_temp{}}%
+}
+
+\def\CF_arrowb(#1.#2[#3]--#4.#5[#6])#7{%
+ \def\CF_currentarrowtype{#7}% nom de la flèche
+ \CF_doifempty\CF_currentarrowtype{\def\CF_currentarrowtype{->}}%
+ \CF_testopt{\CF_arrowc(#1.#2[#3]--#4.#5[#6])}{}%
+}
+
+\def\CF_arrowc(#1.#2[#3]--#4.#5[#6])[#7]{%
+ \def\CF_temp{\CF_arrowe(#1.#2[#3]--#4.#5[#6])}%
+ \CF_arrowd#7,\empty,\empty\_nil
+}
+
+\def\CF_arrowd#1,#2,#3\_nil{%
+ \CF_addtomacro\CF_temp{{#1}}%
+ \CF_eaddtomacro\CF_temp{\expandafter{#2}}%
+ \expandafter\CF_eaddtomacro\expandafter\CF_temp\expandafter{\expandafter\expandafter\expandafter{\expandafter\CF_sanitizelastitem#3,\empty\_nil}}%
+ \CF_temp
+}
+
+% #1, #4 : nom des nodes #2, #5 : ancres des nodes #3, #6 : styles des nodes
+% #7 : angle flèche #8 : longueur flèche #9 : style tikz de la flèche
+\def\CF_arrowe(#1.#2[#3]--#4.#5[#6])#7#8#9{%
+ \let\CF_arrowcurrentstyle\CF_arrowstyle
+ \if @\expandafter\CF_firsttonil\detokenize{#1.}\_nil% si #1 commence par @
+ \if @\expandafter\CF_firsttonil\detokenize{#4.}\_nil
+ \CF_eaddtomacro\CF_directarrowlist{\expandafter\CF_directarrow\expandafter{\CF_currentarrowtype}{#1}{#2}{#4}{#5}{#9}}%
+ \let\CF_nextaction\CF_schemestartc
+ \else
+ \CF_doifnotempty\CF_arrowcurrentstyle{\CF_addtomacro\CF_arrowcurrentstyle,}%
+ \CF_doifnotempty{#9}{\CF_addtomacro\CF_arrowcurrentstyle{#9,}}%
+ \CF_displaycompound{}{#3}%
+ \def\CF_nextnodename{#4}%
+ \CF_expsecond{\def\CF_currentnodename}{\CF_gobarg#1}%
+ \let\CF_arrowstartname\CF_currentnodename
+ \let\CF_arrowendname\CF_nextnodename
+ \CF_arrowf{#7}{#8}{#2}{#5}%
+ \def\CF_nextnodestyle{#6}%
+ \fi
+ \else
+ \CF_doifnotempty\CF_arrowcurrentstyle{\CF_addtomacro\CF_arrowcurrentstyle,}%
+ \CF_doifnotempty{#9}{\CF_addtomacro\CF_arrowcurrentstyle{#9,}}%
+ \if @\expandafter\CF_firsttonil\detokenize{#2.}\_nil
+ \CF_error{syntax "(<name>--@<name>)" is not allowed}%
+ \else
+ \CF_displaycompound{#1}{#3}%
+ \edef\CF_arrowstartname{%
+ \CF_ifempty{#1}
+ \CF_currentnodename
+ {#1}%
+ \CF_doifnotempty{#2}{.#2}%
+ }%
+ \CF_arrowf{#7}{#8}{#2}{#5}%
+ \def\CF_nextnodename{#4}%
+ \def\CF_nextnodestyle{#6}%
+ \fi
+ \fi
+ \CF_arrowgobspaces% mange les espaces puis exécute \CF_nextaction
+}
+
+\def\CF_arrowgobspaces{\futurelet\CF_toksa\CF_arrowgobspacesa}
+
+\def\CF_arrowgobspacesa{%
+ \CF_ifx\CF_sptoken\CF_toksa
+ \CF_arrowgobspacesb
+ \CF_nextaction
+}
+
+\expandafter\def\expandafter\CF_arrowgobspacesb\space{\futurelet\CF_toksa\CF_arrowgobspacesa}
+
+\def\CF_arrowf#1#2#3#4{% #1=angle #2=longueur #3=ancre départ #4=ancre arrivée
+ \def\CF_nextaction{\let\CF_compound\empty\CF_schemestartc}%
+ \def\CF_arrowcurrentangle{#1}\CF_doifempty\CF_arrowcurrentangle{\let\CF_arrowcurrentangle\CF_arrowangle}%
+ \def\CF_currentarrowlength{#2}\CF_doifempty\CF_currentarrowlength{\let\CF_currentarrowlength\CF_arrowlength}%
+ \node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep),cyan,fill](end@arrow@i@\number\CF_schemenest){};%
+ \edef\CF_arrowendname{end@arrow@i@\number\CF_schemenest\CF_doifnotempty{#4}{.#4}}%
+ \ifboolKV[chemfig]{scheme debug}
+ {\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_arrowoffset),red,fill](start@arrow){};%
+ \node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep-\CF_arrowoffset),red,fill](end@arrow){};%
+ }
+ {\node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_arrowoffset)](start@arrow){};%
+ \node[at=(\CF_currentnodename.\CF_ifempty{#3}\CF_arrowcurrentangle{#3}),shift=(\CF_arrowcurrentangle:\CF_currentarrowlength*\CF_compoundsep-\CF_arrowoffset)](end@arrow){};%
+ }%
+ \def\CF_arrowstartnode{start@arrow}\def\CF_arrowendnode{end@arrow}%
+ \csname\expandafter\CF_grabarrowname\CF_currentarrowtype[\_nil\CF_threeea\endcsname
+ \expandafter\CF_grabarrowargs\CF_currentarrowtype[]\_nil[][][][][][][][]\_nil
+ \def\CF_currentnodename{end@arrow@i@\number\CF_schemenest}%
+ \edef\CF_nextnodeanchor{\CF_ifempty{#4}{180+\CF_arrowcurrentangle}{#4}}%
+}
+
+% trace un flèche initiée par (@nom--@nom)
+% #1=type de flèche #2=nom depart #3=ancre départ #4=nom arrivée #5=ancre arrivée #6=style flèche
+\def\CF_directarrow#1#2#3#4#5#6{%
+ \CF_expsecond{\def\CF_arrowstartname}{\CF_gobarg#2}%
+ \CF_expsecond{\def\CF_arrowendname}{\CF_gobarg#4}%
+ \path[sloped,allow upside down](\CF_gobarg#2\ifx\empty#3\empty\else.#3\fi)--(\CF_gobarg#4\ifx\empty#5\empty\else.#5\fi)%
+ coordinate[pos=0,xshift=\CF_arrowoffset](start@direct@arrow)%
+ coordinate[pos=1,xshift=-\CF_arrowoffset](end@direct@arrow);%
+ \def\CF_arrowstartnode{start@direct@arrow}%
+ \def\CF_arrowendnode{end@direct@arrow}%
+ \pgfmathanglebetweenpoints
+ {\pgfpointanchor{\CF_gobarg#2}{\ifx\empty#3\empty center\else#3\fi}}% Ne pas utiliser \CF_ifempty ici !!!
+ {\pgfpointanchor{\CF_gobarg#4}{\ifx\empty#5\empty center\else#5\fi}}%
+ \let\CF_arrowcurrentangle\pgfmathresult
+ \CF_doifnotempty{#6}{\CF_addtomacro\CF_arrowcurrentstyle{#6,}}%
+ \csname\CF_grabarrowname#1[]\_nil\expandafter\endcsname\CF_grabarrowargs#1[]\_nil[][][][][][][][]\_nil
+}
+
+\def\CF_mergegrabchardir#1[#2][#3]#4\_nil{%
+ \CF_expafter{\futurelet\CF_toksa\CF_gobtonil}{\CF_firsttonil#1>\_nil}\_nil
+ \ifx>\CF_toksa
+ \def\CF_mergeangle{0}\def\CF_mergeextreme{xmax}\def\CF_mergesign{+}%
+ \else
+ \ifx<\CF_toksa
+ \def\CF_mergeangle{180}\def\CF_mergeextreme{xmin}\def\CF_mergesign{-}%
+ \else
+ \ifx^\CF_toksa
+ \def\CF_mergeangle{90}\def\CF_mergeextreme{ymax}\def\CF_mergesign{+}%
+ \else
+ \ifx v\CF_toksa
+ \def\CF_mergeangle{-90}\def\CF_mergeextreme{ymin}\def\CF_mergesign{-}%
+ \fi\fi\fi\fi
+ \def\CF_mergelabelup{#2}\def\CF_mergelabeldo{#3}%
+}
+
+\def\CF_merge#1({%
+ \CF_mergegrabchardir#1[][]\_nil
+ \CF_mergea(%
+}
+
+\def\CF_mergea#1--(#2){\CF_testopt{\CF_mergeb#1--(#2)}{}}
+
+\def\CF_mergeb#1--(#2)[#3]{%
+ \CF_displaycompound{}{}%
+ \CF_parsemergeopt#3,\CF_quark,\CF_quark,\CF_quark\_nil
+ \def\CF_mergexmax{-16383.99999pt}\let\CF_mergeymax\CF_mergexmax
+ \def\CF_mergexmin{16383.99999pt}\let\CF_mergeymin\CF_mergexmin
+ \CF_mergeparsenodelist#1(\relax)% calcule les maxi des positions
+ \pgfmathsetmacro\CF_mergeextremeresult{\csname CF_merge\CF_mergeextreme\endcsname\CF_mergesign\CF_mergefromcoeff*\CF_compoundsep}%
+ \CF_mergec#1(\relax)% trace les lignes entre les noeuds précédents et la ligne de jonction
+ \CF_expsecond{\def\CF_temp}{\expandafter[\CF_mergestyle,shorten <=0,shorten >=0,-]}%
+ \if x\expandafter\CF_firsttonil\CF_mergeextreme\_nil
+ \CF_addtomacro\CF_temp{(\CF_mergeextremeresult pt,\CF_mergeymax)--(\CF_mergeextremeresult pt,\CF_mergeymin)}%
+ \else
+ \CF_addtomacro\CF_temp{(\CF_mergexmin,\CF_mergeextremeresult pt)--(\CF_mergexmax,\CF_mergeextremeresult pt)}%
+ \fi
+ \expandafter\draw\CF_temp node[pos=\CF_mergesplitcoeff](merge@point){}% trace la ligne de jonction
+ node[at=(merge@point),shift=(\CF_mergeangle:\CF_compoundsep*\CF_mergetocoeff-\CF_arrowoffset)](end@merge){}%
+ node[at=(merge@point),shift=(\CF_mergeangle:\CF_compoundsep*\CF_mergetocoeff)](end@merge@i){};%
+ \let\CF_arrowcurrentangle\CF_mergeangle
+ \CF_expafter{\draw[}\CF_mergestyle,shorten <=0](merge@point)--(end@merge)%
+ \expandafter\CF_arrowdisplaylabela\expandafter{\CF_mergelabelup}{.5}+\expandafter\CF_arrowdisplaylabela\expandafter{\CF_mergelabeldo}{.5}-;%
+ \def\CF_currentnodename{end@merge@i}%
+ \let\CF_temp\empty
+ \CF_analysearrowarg{#2}%
+ \expandafter\CF_merged\CF_temp\_nil
+}
+
+\def\CF_mergec(#1){%
+ \if\relax\expandafter\noexpand\CF_firsttonil#1\_nil
+ \else
+ \CF_ifdot{#1}%
+ {\edef\merge_currentnodename{\CF_beforedot#1\_nil}%
+ \edef\merge_currentanchor{\CF_afterdot#1\_nil}%
+ }%
+ {\def\merge_currentnodename{#1}%
+ \let\merge_currentanchor\CF_mergeangle
+ }%
+ \if x\expandafter\CF_firsttonil\CF_mergeextreme\_nil
+ \pgfextracty\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \CF_expafter{\draw[}\CF_mergestyle,shorten >=0,-]([shift=(\CF_mergeangle:\CF_arrowoffset)]\merge_currentnodename.\merge_currentanchor)--(\CF_mergeextremeresult pt,\CF_dim);%
+ \else
+ \pgfextractx\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \CF_expafter{\draw[}\CF_mergestyle,shorten >=0,-]([shift=(\CF_mergeangle:\CF_arrowoffset)]\merge_currentnodename.\merge_currentanchor)--(\CF_dim,\CF_mergeextremeresult pt);%
+ \fi
+ \expandafter\CF_mergec
+ \fi
+}
+
+\def\CF_merged#1.#2[#3]\_nil{%
+ \def\CF_nextnodename{#1}%
+ \edef\CF_nextnodeanchor{%
+ \CF_ifempty{#2}
+ {180+\CF_mergeangle}
+ {#2}%
+ }%
+ \def\CF_nextnodestyle{#3}%
+ \let\CF_compound\empty
+ \CF_schemestartc
+}
+
+\def\CF_parsemergeopt#1,#2,#3,#4\_nil{%
+ \CF_ifempty{#1}
+ {\def\CF_mergefromcoeff{0.5}}
+ {\def\CF_mergefromcoeff{#1}}%
+ \def\CF_mergetocoeff{0.5}%
+ \def\CF_mergesplitcoeff{0.5}%
+ \CF_eexpsecond{\def\CF_mergestyle}{\useKV[chemfig]{arrow head}}%
+ \CF_iffirsttokmatch\CF_quark{#2\relax}
+ {}
+ {\CF_ifempty{#2}
+ {\def\CF_mergetocoeff{0.5}}
+ {\def\CF_mergetocoeff{#2}}%
+ \CF_iffirsttokmatch\CF_quark{#3\relax}
+ {}
+ {\CF_ifempty{#3}
+ {\def\CF_mergesplitcoeff{0.5}}
+ {\def\CF_mergesplitcoeff{#3}}%
+ \CF_iffirsttokmatch\CF_quark{#4\relax}
+ {}
+ {\CF_parsemergeopta#4\_nil}%
+ }%
+ }%
+}
+
+\def\CF_parsemergeopta#1,\CF_quark#2\_nil{%
+ \CF_ifempty{#1}
+ {}
+ {\CF_addtomacro\CF_mergestyle{,#1}}%
+}
+
+\def\CF_mergeparsenodelist(#1){%
+ \if\relax\expandafter\noexpand\CF_firsttonil#1\_nil
+ \else
+ \CF_ifdot{#1}%
+ {\edef\merge_currentnodename{\CF_beforedot#1\_nil}\edef\merge_currentanchor{\CF_afterdot#1\_nil}}%
+ {\def\merge_currentnodename{#1}\let\merge_currentanchor\CF_mergeangle}%
+ \pgfextractx\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \ifdim\CF_dim>\CF_mergexmax
+ \edef\CF_mergexmax{\the\CF_dim}%
+ \fi
+ \ifdim\CF_dim<\CF_mergexmin
+ \edef\CF_mergexmin{\the\CF_dim}%
+ \fi
+ \pgfextracty\CF_dim{\pgfpointanchor\merge_currentnodename\merge_currentanchor}%
+ \ifdim\CF_dim>\CF_mergeymax
+ \edef\CF_mergeymax{\the\CF_dim}%
+ \fi
+ \ifdim\CF_dim<\CF_mergeymin
+ \edef\CF_mergeymin{\the\CF_dim}%
+ \fi
+ \expandafter\CF_mergeparsenodelist
+ \fi
+}
+
+\def\CF_grabarrowname#1[#2\_nil{\detokenize{CF_arrow(#1)}}
+\def\CF_grabarrowargs#1[#2\_nil{[#2}
+
+\def\CF_makeparametertext#1{%
+ \toks0{}%
+ \CF_cntgroup#1\relax
+ \CF_makeparametertexta1%
+}
+
+\def\CF_makeparametertexta#1{%
+ \unless\ifnum#1>\CF_cntgroup
+ \toks0\expandafter{\the\toks0[###1]}%
+ \expandafter\CF_makeparametertexta\expandafter{\number\numexpr#1+1\expandafter}%
+ \fi
+}
+
+% #1 est le nombre d'arguments optionnels, #2 est le nom et #3 le code
+\def\definearrow#1#2#3{%
+ \begingroup
+ \CF_makeparametertext{#1}%
+ \expandafter\endgroup
+ \expandafter\def\csname\detokenize{CF_arrow(#2)}\expandafter\endcsname\the\toks0{#3\CF_gobtonil}%
+}
+
+\def\CF_ifdot#1{\CF_ifdota#1.\_nil}
+\def\CF_ifdota#1.#2\_nil{\ifx\empty#2\empty\expandafter\CF_execsecond\else\expandafter\CF_execfirst\fi}
+\def\CF_beforedot#1.#2\_nil{#1}
+\def\CF_afterdot#1.#2\_nil{#2}
+
+\def\CF_rotatenode*#1#2\_nil{%
+ \CF_ifdot{#1}
+ {\CF_beforedot#1\_nil}
+ {#1}%
+}
+\def\CF_anchornode*#1#2\_nil#3{%
+ \CF_ifdot{#1}
+ {\CF_afterdot#1\_nil}
+ {\CF_arrowcurrentangle-#390-#1}%
+}
+
+% #1 = label #2 = position #3 = + ou - (au dessus ou au dessous) #4 : nom du noeud de départ
+% #5 = label #6 = position #7 = + ou - (au dessus ou au dessous) #8 : nom du noeud de fin
+\def\CF_arrowdisplaylabel#1#2#3#4#5#6#7#8{%
+ \CF_doifnotempty{#1#5}
+ {\path(#4)--(#8)\CF_arrowdisplaylabela{#1}{#2}{#3}\CF_arrowdisplaylabela{#5}{#6}{#7};}%
+}
+
+\def\CF_arrowdisplaylabela#1#2#3{%
+ \CF_doifnotempty{#1}
+ {\if*\expandafter\CF_firsttonil\detokenize{#1}\_nil
+ \ifboolKV[chemfig]{scheme debug}
+ {node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep,draw,fill,cyan](shifted@node){}%
+ node[draw,rotate=\CF_rotatenode#1\_nil,anchor=\CF_anchornode#1\_nil#3,at=(shifted@node)]{\expandafter\CF_gobarg\CF_gobarg#1}%
+ }
+ {node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep](shifted@node){}%
+ node[rotate=\CF_rotatenode#1\_nil,anchor=\CF_anchornode#1\_nil#3,at=(shifted@node)]{\expandafter\CF_gobarg\CF_gobarg#1}%
+ }%
+ \else
+ \ifboolKV[chemfig]{scheme debug}
+ {node[pos=#2,sloped,yshift=#3\CF_arrowlabelsep,draw,fill,cyan](shifted@node){}%
+ node[draw,pos=#2,anchor=-#390,sloped,yshift=#3\CF_arrowlabelsep]{#1}%
+ }
+ {node[pos=#2,anchor=-#390,sloped,yshift=#3\CF_arrowlabelsep]{#1}%
+ }
+ \fi
+ }%
+}
+
+% pose des noeuds décalés de la dimension #1 à (\CF_arrowstartnode) et (\CF_arrowendnode)
+\def\CF_arrowshiftnodes#1{%
+ \unless\ifdim\CF_ifempty{#1}\CF_zero{#1}=0pt
+ \edef\CF_temp{%
+ \noexpand\path(\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=0,sloped,yshift=#1](\CF_arrowstartnode1){}node[pos=1,sloped,yshift=#1](\CF_arrowendnode1){};}%
+ \CF_temp
+ \edef\CF_arrowstartnode{\CF_arrowstartnode1}\edef\CF_arrowendnode{\CF_arrowendnode1}%
+ \fi
+}
+
+\definearrow3{->}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow3{<-}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowendnode)--(\CF_arrowstartnode);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow5{-/>}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ coordinate[midway,shift=(\CF_arrowcurrentangle:-1pt)](midway@i)%
+ coordinate[midway,shift=(\CF_arrowcurrentangle:1pt)](midway@ii)%
+ coordinate[at=(midway@i),shift=(\CF_ifempty{#4}{225}{#4+180}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@start)%
+ coordinate[at=(midway@i),shift=(\CF_ifempty{#4}{45}{#4}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@end)%
+ coordinate[at=(midway@ii),shift=(\CF_ifempty{#4}{225}{#4+180}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@start@i)%
+ coordinate[at=(midway@ii),shift=(\CF_ifempty{#4}{45}{#4}+\CF_arrowcurrentangle:\CF_ifempty{#5}{5pt}{#5})](line@end@i);
+ \draw(line@start)--(line@end);%
+ \draw(line@start@i)--(line@end@i);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow3{<->}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle,\CF_arrowtip-\CF_arrowtip](\CF_arrowstartnode)--(\CF_arrowendnode);%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow3{<=>}{%
+ \CF_arrowshiftnodes{#3}%
+ \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=0,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u0){}%
+ node[pos=0,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d0){}%
+ node[pos=1,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u1){}%
+ node[pos=1,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d1){};%
+ \begingroup
+ \ifboolKV[chemfig]{arrow double harpoon}
+ {\pgfarrowharpoontrue}
+ {}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
+ \endgroup
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode%
+}
+
+\definearrow3{<->>}{%
+ \CF_arrowshiftnodes{#3}%
+ \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=0,sloped,yshift=1pt](\CF_arrowstartnode @u0){}%
+ node[pos=\CF_arrowdoubleposstart,sloped,yshift=-1pt](\CF_arrowstartnode @d0){}%
+ node[pos=1,sloped,yshift=1pt](\CF_arrowstartnode @u1){}%
+ node[pos=\CF_arrowdoubleposend,sloped,yshift=-1pt](\CF_arrowstartnode @d1){};%
+ \begingroup
+ \ifboolKV[chemfig]{arrow double harpoon}
+ {\pgfarrowharpoontrue}
+ {}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
+ \endgroup
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode%
+}
+
+\definearrow3{<<->}{%
+ \path[allow upside down](\CF_arrowstartnode)--(\CF_arrowendnode)%
+ node[pos=\CF_arrowdoubleposstart,sloped,yshift=1pt](\CF_arrowstartnode @u0){}%
+ node[pos=0,sloped,yshift=-1pt](\CF_arrowstartnode @d0){}%
+ node[pos=\CF_arrowdoubleposend,sloped,yshift=1pt](\CF_arrowstartnode @u1){}%
+ node[pos=1,sloped,yshift=-1pt](\CF_arrowstartnode @d1){};%
+ \begingroup
+ \ifboolKV[chemfig]{arrow double harpoon}
+ {\pgfarrowharpoontrue}
+ {}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);%
+ \endgroup
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow30{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode
+}
+
+\definearrow5{-U>}{%
+ \CF_arrowshiftnodes{#3}%
+ \CF_expafter{\draw[}\CF_arrowcurrentstyle](\CF_arrowstartnode)--(\CF_arrowendnode)node[midway](Uarrow@arctangent){};%
+ \CF_ifempty{#4}
+ {\def\CF_Uarrowradius{0.333}}
+ {\def\CF_Uarrowradius{#4}}%
+ \CF_ifempty{#5}%
+ {\def\CF_Uarrowabsangle{60}}
+ {\pgfmathsetmacro\CF_Uarrowabsangle{abs(#5)}}% ne prendre en compte que la valeur absolue de l'angle
+ \edef\CF_temp{[\CF_ifempty{#1}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}},-]}%
+ \expandafter\draw\CF_temp (Uarrow@arctangent)%
+ arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Uarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=-\CF_Uarrowabsangle]node(Uarrow@start){};
+ \edef\CF_temp{[\CF_ifempty{#2}{draw=none}{\unexpanded\expandafter{\CF_arrowcurrentstyle}}]}%
+ \expandafter\draw\CF_temp (Uarrow@arctangent)%
+ arc[radius=\CF_compoundsep*\CF_currentarrowlength*\CF_Uarrowradius,start angle=\CF_arrowcurrentangle-90,delta angle=\CF_Uarrowabsangle]node(Uarrow@end){};
+ \pgfmathsetmacro\CF_temp{\CF_Uarrowradius*cos(\CF_arrowcurrentangle)<0?"-":"+"}%
+ \ifdim\CF_Uarrowradius pt>0pt
+ \CF_arrowdisplaylabel{#1}{0}\CF_temp{Uarrow@start}{#2}{1}\CF_temp{Uarrow@end}%
+ \else
+ \CF_arrowdisplaylabel{#2}{0}\CF_temp{Uarrow@start}{#1}{1}\CF_temp{Uarrow@end}%
+ \fi
+}
+
+\def\CF_grabdelim#1#2#3\_nil{\def\CF_leftdelim{#1}\def\CF_rightdelim{#2}}
+\def\CF_resetdelim{%
+ \setKVdefault[CFdelimiters]
+ {delimiters =(),
+ height =10pt,
+ depth =,
+ open xshift =0pt,
+ close xshift=,
+ indice =n}%
+}
+
+\CF_resetdelim
+
+\def\polymerdelim{\CF_ifnextchar[{\CF_polymerdelima}{\CF_polymerdelima[]}}
+\def\CF_polymerdelima[#1]#2#3{%
+ \CF_resetdelim
+ \CF_doifnotempty{#1}{\setKV[CFdelimiters]{#1}}%
+ \expandafter\expandafter\expandafter\CF_grabdelim\useKV[CFdelimiters]{delimiters}()\_nil
+ \edef\CF_delimheight{\the\dimexpr\useKV[CFdelimiters]{height}}%
+ \CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{depth}}
+ {\let\CF_delimdepth\CF_delimheight}
+ {\edef\CF_delimdepth{\the\dimexpr\useKV[CFdelimiters]{depth}}}%
+ \edef\CF_delimhalfdim{\the\dimexpr(\CF_delimheight+\CF_delimdepth)/2}%
+ \edef\CF_delimvshift {\the\dimexpr(\CF_delimheight-\CF_delimdepth)/2}%
+ \edef\CF_leftdelimxshift{\the\dimexpr\useKV[CFdelimiters]{open xshift}}%
+ \CF_eexpsecond\CF_ifempty{\useKV[CFdelimiters]{close xshift}}
+ {\edef\CF_rightdelimxshift{\the\dimexpr-\useKV[CFdelimiters]{open xshift}}}
+ {\edef\CF_rightdelimxshift{\the\dimexpr-\useKV[CFdelimiters]{close xshift}}}%
+ \chemmove{%
+ \nulldelimiterspace0pt
+ \pgfextractx\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_leftdelimx{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_leftdelimy{\the\CF_dim}%
+ \pgfextractx\CF_dim{\pgfpointanchor{#3}{center}}\edef\CF_rightdelimx{\the\CF_dim}%
+ \node[at={(\CF_leftdelimx+\CF_leftdelimxshift,\CF_leftdelimy+\CF_delimvshift)}]
+ {$\left\CF_leftdelim\vrule height\CF_delimhalfdim depth\CF_delimhalfdim width0pt\right.$};%
+ \node[at={(\CF_rightdelimx+\CF_rightdelimxshift,\CF_leftdelimy+\CF_delimvshift)}]
+ {$\left.\vrule height\CF_delimhalfdim depth\CF_delimhalfdim width0pt\right\CF_rightdelim
+ \CF_eexpsecond\CF_doifnotempty{\useKV[CFdelimiters]{indice}}
+ {\CF_underscore{\rlap{$\scriptstyle\useKV[CFdelimiters]{indice}$}}}
+ $};
+ }%
+}
+
+\catcode`\@11
+\pgfdeclarearrow{%
+ name = CF,%
+ defaults = {%
+ length = 3pt 5 1,%
+ width' = 0pt .8,%
+ inset' = 0pt .5,%
+ line width = 0pt 1 1,%
+ round%
+ },%
+ setup code = {%
+ % Cap the line width at 1/4th distance from inset to tip
+ \pgf@x\pgfarrowlength
+ \advance\pgf@x by-\pgfarrowinset
+ \pgf@x.25\pgf@x
+ \ifdim\pgf@x<\pgfarrowlinewidth\pgfarrowlinewidth\pgf@x\fi
+ % Compute front miter length:
+ \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}%
+ \let\pgf@temp@quot\pgfmathresult%
+ \pgf@x\pgfmathresult pt%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@x4\pgf@x%
+ \advance\pgf@x by1pt%
+ \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
+ \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter
+ \pgf@xc.5\pgf@xc
+ \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter
+ % Compute back miter length:
+ \pgf@ya.5\pgfarrowwidth%
+ \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowlength}{\pgfmath@tonumber\pgf@ya}%
+ \pgf@yb\pgfmathresult pt%
+ \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowinset}{\pgfmath@tonumber\pgf@ya}%
+ \pgf@ya\pgfmathresult pt%
+ \advance\pgf@yb by-\pgf@ya%
+ \pgf@yb.5\pgf@yb% half angle in yb
+ \pgfmathtan@{\pgf@sys@tonumber\pgf@yb}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@yc\pgfmathresult\pgfarrowlinewidth%
+ \pgf@yc.5\pgf@yc%
+ \advance\pgf@ya by\pgf@yb%
+ \pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}%
+ \pgf@ya\pgfmathresulty\pgf@yc% ya is the back miter
+ \pgf@yb\pgfmathresultx\pgf@yc% yb is the top miter
+ \ifdim\pgfarrowinset=0pt
+ \pgf@ya.5\pgfarrowlinewidth% easy: back miter is half linewidth
+ \fi
+ % Compute inset miter length:
+ \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowinset}{\pgf@sys@tonumber\pgfarrowwidth}%
+ \let\pgf@temp@quot\pgfmathresult%
+ \pgf@x\pgfmathresult pt%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@x4\pgf@x%\pgf@ya
+ \advance\pgf@x by1pt%
+ \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
+ \pgf@yc\pgfmathresult\pgfarrowlinewidth% yc is inset miter
+ \pgf@yc.5\pgf@yc%
+ % Inner length (pgfutil@tempdima) is now arrowlength - front miter - back miter
+ \pgfutil@tempdima\pgfarrowlength%
+ \advance\pgfutil@tempdima by-\pgf@xc%
+ \advance\pgfutil@tempdima by-\pgf@ya%
+ \pgfutil@tempdimb.5\pgfarrowwidth%
+ \advance\pgfutil@tempdimb by-\pgf@yb%
+ % harpoon miter correction
+ \ifpgfarrowroundjoin
+ \pgfarrowssetbackend{\pgf@ya\advance\pgf@x by-.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssetbackend{0pt}
+ \fi
+ \ifpgfarrowharpoon
+ \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by-.25\pgfarrowlinewidth}%
+ \ifpgfarrowreversed
+ \ifdim\pgfinnerlinewidth>0pt
+ \pgfarrowssetlineend{\pgfarrowinset}%
+ \else
+ \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by-.25\pgfarrowlinewidth}%
+ \fi
+ \fi
+ \fi
+ \ifpgfarrowroundjoin
+ \pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by.5\pgfarrowlinewidth}%
+ \else
+ \pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi}%
+ \fi
+ % The hull:
+ \pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}%
+ \pgfarrowsupperhullpoint{0pt}{.5\pgfarrowwidth}%
+ \pgfarrowshullpoint{\pgfarrowinset}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else 0pt\fi}%
+ % Adjust inset
+ \pgfarrowssetvisualbackend{\pgfarrowinset}%
+ \advance\pgfarrowinset by\pgf@yc%
+ % The following are needed in the code:
+ \pgfarrowssavethe\pgfutil@tempdima
+ \pgfarrowssavethe\pgfutil@tempdimb
+ \pgfarrowssavethe\pgfarrowlinewidth
+ \pgfarrowssavethe\pgf@ya
+ \pgfarrowssavethe\pgfarrowinset
+ },%
+ drawing code = {%
+ \pgfsetdash{}{0pt}%
+ \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi
+ \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{\pgfarrowlinewidth}\fi
+ \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by\pgf@ya}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@ya}{\pgfutil@tempdimb}}%
+ \pgfpathlineto{\pgfqpoint{\pgfarrowinset}{0pt}}%
+ \ifpgfarrowharpoon \else
+ \pgfpathlineto{\pgfqpoint{\pgf@ya}{-\pgfutil@tempdimb}}%
+ \fi
+ \pgfpathclose
+ \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt \pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi
+ },%
+ parameters = {%
+ \the\pgfarrowlinewidth,%
+ \the\pgfarrowlength,%
+ \the\pgfarrowwidth,%
+ \the\pgfarrowinset,%
+ \ifpgfarrowharpoon h\fi%
+ \ifpgfarrowopen o\fi%
+ \ifpgfarrowroundjoin j\fi%
+ }%
+}
+\CFrestorecatcode
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% H I S T O R I Q U E %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+v0.1 2010/06/23
+ - Première version publique sur le CTAN
+----------------------------------------------------------------------
+v0.2 2010/08/31
+ - Ajout de la documentation en anglais.
+ - Correction de bugs.
+ - \printatom est désormais une macro publique.
+ - Les espaces sont permis dans les molécules. Ils seront
+ ignorés par défaut puisque les atomes sont composés en
+ mode math par \printatom
+ - Une paire de Lewis peut être représentée ":".
+ - Dans les cycles, une correction de la longueur du trait
+ déporté des liaisons doubles est fait de telle sorte que si
+ l'on écrit \chemfig{*5(=====)}, on obtient deux polygones
+ réguliers concentriques.
+ - La séquence de contrôle \setnodestyle permet de spécifier
+ le style des n?uds dessinés par tikz.
+----------------------------------------------------------------------
+v0.3 2010/11/21
+ - Amélioration de \definesubmol qui accepte les séquences de
+ contrôle. On peut aussi choisir un alias dont la substitution
+ est différente selon l'orientation de la liaison qui lui
+ arrive dessus.
+ - Le caractère "|" force la fin d'un atome. Si on écrit
+ "D|ef" alors, chemfig verra deux atomes "D" et "ef".
+ - Le caractère "#" est reconnu lorsqu'il suit un caractère de
+ liaison. Il doit être suivi d'un argument entre parenthèses
+ qui contient l'offset de début et de fin qui s'appliqueront
+ à cette liaison.
+ - La macro \chemfig admet un argument optionnel qui sera passé
+ à l'environnement tikzpicture dans lequel elle est dessinée
+ - Mise en place de la représentation des mécanismes
+ réactionnels avec la syntaxe "@{<nom>}" devant un atome où
+ "@{<nom>,<coeff>}" au tout début de l'argument d'une liaison.
+ Cette syntaxe permet de placer un n?ud (au sens de tikz) qui
+ deviendra l'extrémité des flèches des mécanismes.
+ Le tracé des flèches est faite par la macro \chemmove dont
+ l'argument optionnel devient celui de l'environnement
+ tikzpicture dans lequel sont faites les flèches.
+ - Pour le mécanisme d'alignement vertical via le \vphantom, la
+ commande \chemskipalign permet d'ignorer le groupe d'atomes
+ dans lequel elle est écrite.
+ - La commande \chemname permet d'afficher un nom sous une
+ molécule. la commande \chemnameinit initialise la plus grande
+ profondeur rencontrée.
+ - La commande \lewis a été modifiée de telle sorte que les
+ dessins des décorations soient proportionnels à la taille
+ de la police.
+----------------------------------------------------------------------
+v0.3a 2011/01/08
+ - Correction d'un bug dans l'argument optionnel de \definesubmol
+ lorsque celui-ci comporte des crochets.
+ - Mise à jour du manuel en anglais.
+ - Ajout de \vflipnext et \hflipnext pour retourner
+ horizontalement ou verticalement la prochaine molécule.
+----------------------------------------------------------------------
+v0.4 2011/03/07
+ - chemfig est désormais écrit en plain-etex et donc
+ utilisable par d'autres formats que LaTeX.
+ - Un peu plus de rigueur avec les catcodes des caractères
+ spéciaux, notamment lorsque la commande \chemfig se trouve
+ dans l'argument de \chemmove, \chemabove, \chembelow, \chemrel.
+ TODO : faut-il \scantoker l'argument de \chemfig pour être
+ définitivement débarrassé de ces histoires de catcode ???
+ - Correction d'un bug dans le calcul de l'angle des liaisons
+----------------------------------------------------------------------
+v0.4a 2011/04/10
+ - Correction d'un bug concernant l'argument optionnel en début
+ de molécule.
+----------------------------------------------------------------------
+v0.4b 2011/04/24
+ - l'argument de \chemfig est tokénisé avec \scantokens ce qui
+ rend caduc tout souci de code de catégorie, à part #.
+ - la commande \setbondstyle permet de définir le style des
+ liaisons.
+ - correction de l'affichage incorrect des doubles liaisons dans
+ les cycles après les commandes \hflipnext et \vflipnext
+ - correction d'un bug lorsqu'un alias commence une molécule
+----------------------------------------------------------------------
+v1.0 2011/06/15
+ - les schémas réactionnels sont désormais disponibles.
+ - \Chemabove et \Chembelow modifient la boite englobante.
+ - \Lewis modifie la boite englobante
+ - les macros \chemleft, \chemright, \chemup et \chemdown
+ affichent des délimiteurs extensibles à gauche, à droite,
+ au dessus et au dessous d'un matériel.
+----------------------------------------------------------------------
+v1.0a 2011/09/18
+ - les macros \Lewis et \lewis admettent un argument optionnel
+ - la macro \setlewisdist règle la distance entre les 2
+ électrons
+----------------------------------------------------------------------
+v1.0b 2011/11/29
+ - la commande \merge est désormais protégée entre
+ \schemestart et \schemestop contre des définitions par d'autres
+ packages.
+ - \box0 est utilisé au lieu du maladroit \unhbox0
+----------------------------------------------------------------------
+v1.0c 2011/11/30
+ - la macro \+ n'est plus explicitement écrite
+ - vérifie que eTeX est le moteur utilisé
+----------------------------------------------------------------------
+v1.0d 2011/12/19
+ - les cercles des cycles étaient tracés au mauvais moment. La
+ longueur de la liaison qui les précédait influait sur le
+ rayon du cercle : \chemfig{-[,0.5]**6(------)} donnait un bug
+ à l'affichage.
+----------------------------------------------------------------------
+v1.0e 2012/01/13
+ - la gestion des espaces dans les groupes d'atomes est
+ désormais plus rigoureuse. Plusieurs bugs ont été
+ corrigé
+----------------------------------------------------------------------
+v1.0f 2012/02/24
+ - correction d'un bug avec \definesubmol, les catcodes n'étaient
+ pas correctement gérés.
+----------------------------------------------------------------------
+v1.0g 2012/11/16
+ - correction d'un bug dans \CF_directarrow pour faire prendre en
+ compte le style des flèche par défaut
+ - correction d'un bug dans \CF_lewisc : la boite *doit* être
+ composée en dehors de l'environnement tikzpicture pour
+ éviter nullfont si jamais \printatom ne passe pas en mode
+ math.
+ - correction d'un bug dans \CF_chemfigc : si une longueur par
+ défaut est modifiée par [,<l>] au début d'une molécule
+ et si des cycles étaient emboités, cette longueur n'était
+ pas appliquée aux sous-cycles.
+ - ré-écriture des macros \chemabove et \chembemow pour
+ prendre en compte le bug (désormais corrigé) dans luatex.
+ - nouvelle macro \setstacksep qui définit l'espacement par
+ défaut dans les macros \chemabove et \chembelow.
+----------------------------------------------------------------------
+v1.0h 2013/11/28
+ - \chemname admet maintenant une version étoilé qui ne tient
+ pas compte des profondeurs précédentes.
+ - \CF_dpmax est géré globalement.
+ - correction d'un bug dans "-U>" : le style de la flèche
+ n'était pris en compte pour l'arc.
+ - correction d'un bug dans \CF_directarrow : l'angle de la
+ flèche n'était pas calculé
+----------------------------------------------------------------------
+v1.1 2015/02/13
+ - correction d'un bug dans \CF_seeksubmol : la macro
+ \CF_molecule est dépouillé de son éventuel espace
+ en première position.
+ - correction d'un bug dans \CF_arrowf : le nom du prochain
+ n?ud courant "end@arrow@i" était erroné dans le cas où une
+ flèche contenait un sous schéma. Ce nom doit dépendre de
+ \CF_schemenest.
+ - la jonction entre deux liaisons consécutives dans l'axe peut
+ être activé avec \enablebondjoin et désactivé avec
+ \disablebondjoin (préférable, état par défaut).
+ - \chemfig suivi d'une "*" demande à ce que les liaisons aient
+ une longueur invariable : la distance inter-atome devient donc
+ variable. Cette fonctionnalité est désactivé dans les
+ cycles afin que les polygones soient réguliers.
+ \enablefixedbondlength permet cette fonctionnalité pour
+ toutes les macros \chemfig (même non étoilée) tandis que
+ \disablefixedbondlength le désactive.
+----------------------------------------------------------------------
+v1.1a 2015/02/23
+ - correction d'un bug dans \CF_grabbondoffset. Si \chemfig est
+ dans l'argument d'une macro, les # sont doublés par l'action
+ de \scantokens de la macro \CF_chemfigb et il faut un
+ argument délimité avant "(" pour absorber tous les #.
+----------------------------------------------------------------------
+v1.2 2015/10/08
+ - correction d'un bug dans le tracé des liaisons de Cram.
+ - création de \setangleincrement.
+ - chargement de "arrows.meta" et définition de la flèche "CF"
+ basée sur "Stealth" et définie avec \pgfdeclarearrow.
+ Les anciennes flèches "CF_full" et "CF_half" sont
+ abandonnées puisque définies avec \pgfarrowsdeclare.
+ - flèche "-U>" corrigée : le placement des labels est
+ maintenant correct dans tous les cas. Ainsi :
+ -U>[<a>][<b>][<d>][r][a]
+ place le label <a> près du début de la flèche, quels que
+ soient les signes du rayon r et de l'angle a.
+ - \chemrel, \setchemrel et \chemsign sont supprimées.
+ - compatibilité, avec les limitations d'usage, avec la
+ librairie "externalize" : le \begin{tikzpicture} voit
+ désormais le \end{tikzpicture} correspondant dans la macro
+ \CF_chemfigb.
+----------------------------------------------------------------------
+v1.2a 2015/10/21
+ - erreur de copier-coller dans le code: une adresse url était
+ malencontreusement présente en plein milieu d'une ligne de
+ code
+----------------------------------------------------------------------
+v1.2b 2015/11/15
+ - bug dans \CF_seeksubmol qui laissait "*" dans le flux de
+ lecture de TeX. Un message d'erreur est également ajouté
+ en cas de "!" en fin de traitement.
+ - correction d'un bug dans \CF_setbondangle où l'angle [<:a>]
+ n'était pas évalué par \pgfmathsetmacro.
+----------------------------------------------------------------------
+v1.2c 2015/11/20
+ - Correction d'un bug dans \CF_setbondangle : l'angle renvoyé
+ pouvait être négatif
+ - Correction d'un bug dans \CF_directarrow : la macro \CF_ifempty
+ n'est pas correctement développée dans l'argument de
+ \pgfpointanchor
+----------------------------------------------------------------------
+v1.2d 2015/12/01
+ - correction d'un bug dans la flèche "-U"
+ - la version étoilée de \setcrambond dessine les liaisons de
+ Cram en pointillés sous forme de trait large et non pas sous
+ forme de triangle.
+----------------------------------------------------------------------
+v1.2e 2017/05/20
+ - la macro contenant la définition d'une flèche est
+ désormais "\CF_arrow(<nom>)", ainsi la macro \0 n'est plus
+ définie par \definearrow
+ - remerciements rajoutés après une suppression indue, pour ne
+ froisser aucune susceptibilité
+----------------------------------------------------------------------
+v1.3 2018/03/08
+ - tous les paramètres sont désormais passés via \setchemfig qui
+ fait appel à "simplekv". Par conséquent, _toutes_ les macros qui
+ réglaient des paramètres deviennent obsolètes, à savoir :
+ \setcrambond, \setatomsep, \setbondoffset, \setdoublesep,
+ \setangleincrement, \enablefixedbondlength,
+ \disablefixedbondlength, \setnodestyle, \setbondstyle,
+ \setlewis, \setlewisdist, \setstacksep, \setcompoundstyle,
+ \setarrowdefault, \setandsign, \setarrowoffset,
+ \setcompoundsep, \setarrowlabelsep, \enablebondjoin,
+ \disablebondjoin et \schemedebug.
+ et ces macros seront *supprimées* dans une future version.
+ - la version étoilée "\chemfig*" et les deux arguments optionnels
+ de la macro "\chemfig[][]" sont également optionnels et seront
+ *supprimé*s dans une future version afin d'accéder à la syntaxe
+ \chemfig[clés=valeurs]{code}
+ - 6 nouveaux paramètres : "lewis radius", "arrow double sep",
+ "arrow double coeff", "arrow double harpoon", "cycle radius
+ coeff", "arrow head".
+ - correction d'un bug dans \CF_parsemergeopt qui dans certains
+ cas, envoyait vers l'affichage des caractères
+ - petit toilettage du code
+ - macro \polymerdelim (non documentée) expérimentale et encore
+ en phase de tests
+ - suppression d'un registre d'écriture de fichier
+----------------------------------------------------------------------
+v1.31 2018/04/05
+ - correction d'un espace indésirable dans \CF_ifnextchar
+----------------------------------------------------------------------
+v1.32 2018/08/23
+ - définition de \printatom, \CF_begintikzpicture et
+ \CF_endtikzpicture dans le fichier t-chemfig.tex
+----------------------------------------------------------------------
+v1.33 2018/10/31
+ - les macros définies par \definesubmol peuvent désormais avoir un ou
+ plusieurs arguments
+ - macro \polymerdelim documentée
+----------------------------------------------------------------------
+v1.34 2019/02/23
+ - bug dans la flèche "<->" corrigé
+----------------------------------------------------------------------
+v1.4 2019/04/18
+ - corrections de nombreux bugs
+ - caractère privé "_" et non plus "@" -> modifications à prévoir
+ notamment dans la doc avec les codes spécifiques aux flèches, ça
+ risque de couiner sur tex.stackexchange.com
+ - anciennes macros abandonnées et désormais indéfinies :
+ \setcrambond, \setatomsep, \setbondoffset, \setdoublesep,
+ \setangleincrement, \enablefixedbondlength,
+ \disablefixedbondlength, \setnodestyle, \setbondstyle,
+ \setlewis, \setlewisdist, \setstacksep, \setcompoundstyle,
+ \setarrowdefault, \setandsign, \setarrowoffset,
+ \setcompoundsep, \setarrowlabelsep, \enablebondjoin,
+ \disablebondjoin et \schemedebug
+ - l'ancienne syntaxe \chemfig[][]{} est abandonnée et n'est plus
+ acceptée, désormais c'est
+ \chemfig[<clés>=<valeurs>]{<code molécule>}
+ - l'ancienne syntaxe \lewis[<coeff>] ou \Lewis[<coeff>] n'est
+ plus acceptée au profit de \lewis[<clés>=<valeurs>] \ No newline at end of file
diff --git a/macros/generic/chemfig/t-chemfig.tex b/macros/generic/chemfig/t-chemfig.tex
new file mode 100644
index 0000000000..5fc262beae
--- /dev/null
+++ b/macros/generic/chemfig/t-chemfig.tex
@@ -0,0 +1,5 @@
+\usemodule[tikz]%
+\input chemfig.tex
+\expandafter\let\csname CF\string_begintikzpicture\endcsname\starttikzpicture
+\expandafter\let\csname CF\string_endtikzpicture\endcsname\stoptikzpicture
+\endinput
diff --git a/macros/generic/code128/README b/macros/generic/code128/README
new file mode 100644
index 0000000000..5963aea1a2
--- /dev/null
+++ b/macros/generic/code128/README
@@ -0,0 +1,21 @@
+This directory contains the TeX macro code128 for making barcodes in Code
+128 standard. (ASCII text on input and kern-rule queue on output).
+
+The usage of the macro is commented in the file test128.tex.
+The simple test is presented in this file too (for plain).
+Macro works in plain and LateX and other standard macro packages.
+
+Files:
+code128.tex .... The macro, programmer documentation and standard description.
+test128.tex .... test and user documentation.
+springer.tex ... Another test.
+
+See also the ean directory for implementation of EAN 13 and EAN 8 standard
+in TeX.
+
+Petr Olsak (Ol\v{s}\'ak)
+Department of Mathematics
+Czech Techical University in Prague,
+Czech Republic
+e-mail: olsak@math.feld.cvut.cz
+
diff --git a/macros/generic/code128/code128.tex b/macros/generic/code128/code128.tex
new file mode 100644
index 0000000000..1f8844c8a1
--- /dev/null
+++ b/macros/generic/code128/code128.tex
@@ -0,0 +1,360 @@
+% Macro for conversion of string to barcodes by Code 128 standard
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% March 1996 (C) Petr Ol\v{s}\'ak
+
+% For user information see the file test128.tex
+
+% Comments at programmer level are included in this file. First you can
+% read the end of this file: The description of Code 128 standard.
+
+\wlog{**** Macro for barcodes in "Code 128" by (C) Petr Olsak used ****}
+
+% Declarations:
+\newdimen\X % the module size X,
+\newdimen\bcorr % the bar correction (see bellow).
+\newdimen\workdimen \newdimen\barheight % internal variables
+\newtoks\inputtext \newtoks\icode
+\newcount\tempnum \newcount\chnum \newcount\chtotal
+\newif\ifnext \newif\ifchar
+\def\empty{} \def\End{@@end}
+
+% Implicit values:
+\X=.33mm % The X module width.
+\bcorr=.020mm % Bar reduction.
+\barheight=1.5cm % The code height.
+
+% First we declare some tables.
+% "\definetable<lab><num> string \relax": Each token from "string" gets a value
+% (spaces are ignored). First token gets value <num>, second <num+1>
+% and so on. It is possible to reconstruct the value by
+% "\csname<lab>\string<token>\endcsname".
+\def\definetable#1#2 {\tempnum=#2 \def\temp{#1}\let\next=\repeatdefine \next}
+\def\repeatdefine#1{\ifx#1\relax \let\next=\relax \else
+ \expandafter\edef\csname\temp\string#1\endcsname{\the\tempnum}%
+ \advance\tempnum by1 \fi \next}
+
+%%%%%%%%%%%%%%%%%%%%% Basic tables for Code 128: %%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definetable:0 % All input characters from Code B:
+ \ ! " \# \$ \% \& ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
+ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] \^ \_ `
+ a b c d e f g h i j k l m n o p q r s t u v w x y z \{ | \} \~ \DEL \relax
+\definetable:64 % Other input characters from Code A:
+ \NUL \SOH \STX \ETX \EOT \ENQ \ACK \BEL \BS \HT \LF \VT \FF \CR \SO \SI
+ \DLE \DCone \DCtwo \DCthree \DCfour \NAK \SYN \ETB \CAN \EM \SUB \ESC
+ \FS \GS \RS \US \relax
+\definetable:0 \
+ \relax % the \^^M must be the same as \<space>
+\definetable:0 \SP \relax % the \SP is alternative to \<space>
+\definetable{D:}0 0123456789 \relax % Digits
+\definetable{B:}0 `abcdefghijklmnopqrstuvwxyz\{\|\}\~ \relax % Only in Code B
+\definetable{A:}0 \NUL \SOH \STX \ETX \EOT \ENQ \ACK \BEL \BS \HT \LF \VT
+ \FF \CR \SO \SI \DLE \DCone \DCtwo \DCthree \DCfour \NAK \SYN \ETB \CAN
+ \EM \SUB \ESC \FS \GS \RS \US \relax % only in code A.
+\def\tableofcode#1{\ifcase#1 % The output characters:
+ 212222\or 222122\or 222221\or 121223\or 121322\or % 0-4
+ 131222\or 122213\or 122312\or 132212\or 221213\or % 5-9
+ 221312\or 231212\or 112232\or 122132\or 122231\or % 10-14
+ 113222\or 123122\or 123221\or 223211\or 221132\or % 15-19
+ 221231\or 213212\or 223112\or 312131\or 311222\or % 20-24
+ 321122\or 321221\or 312212\or 322112\or 322211\or % 25-29
+ 212123\or 212321\or 232121\or 111323\or 131123\or % 30-34
+ 131321\or 112313\or 132113\or 132311\or 211313\or % 35-39
+ 231113\or 231311\or 112133\or 112331\or 132131\or % 40-44
+ 113123\or 113321\or 133121\or 313121\or 211331\or % 45-49
+ 231131\or 213113\or 213311\or 213131\or 311123\or % 50-54
+ 311321\or 331121\or 312113\or 312311\or 332111\or % 55-59
+ 314111\or 221411\or 431111\or 111224\or 111422\or % 60-64
+ 121124\or 121421\or 141122\or 141221\or 112214\or % 65-69
+ 112412\or 122114\or 122411\or 142112\or 142211\or % 70-74
+ 241211\or 221114\or 413111\or 241112\or 134111\or % 75-79
+ 111242\or 121142\or 121241\or 114212\or 124112\or % 80-84
+ 124211\or 411212\or 421112\or 421211\or 212141\or % 85-89
+ 214121\or 412121\or 111143\or 111341\or 131141\or % 90-94
+ 114113\or 113311\or 411113\or 411311\or 113141\or % 95-99
+ 114131\or 311141\or 411131\else 00000\fi } % 100-102
+\def\startA{211412}
+\def\startB{211214}
+\def\startC{211232}
+\def\stop{23311120}
+
+% Implementations of tests:
+% After "\testchar <lab><token>" the "\ifchar" has following meaning:
+% true, if <token> is in digits, only in A or only in B respectively with
+% <lab> is {D:}, {A:} or {B:}.
+\def\testchar #1#2{\expandafter\ifx\csname#1\string#2\endcsname \relax
+ \charfalse \else \chartrue \fi}
+
+% After "\numofdigits string\stop" is used, the \tempnum register contain
+% the number of digits from first continuosly group of digits from left in
+% "string". If "string" starts with no digit then \tempnum=0.
+\def\numofdigits{\tempnum=0 \let\next=\cyklnumber \cyklnumber}
+\def\cyklnumber#1{\testchar {D:}#1%
+ \ifchar \advance\tempnum by1
+ \else \ifx #1\stop\def\next{}%
+ \else \def\next##1\stop{}\fi
+ \fi \next}
+
+% After "\testnext<lab> string\stop" is used, the "\ifnext" has
+% the following meaning:
+% 1. <lab> is {A:}: "\ifnext" is true, if first character from "string" is
+% only in A code after skip all common characters shared in codeA and B.
+% 2. <lab> is {B:}: "\ifnext" is true, if first character from "string" is
+% only in B code after skip all common characters shared in codeA and B.
+\def\testA{A:}
+\def\testnext#1{\nextfalse
+ \def\tempA{#1}%
+ \ifx\tempA\testA \def\tempB{B:}\else \def\tempB{A:}\fi
+ \let\next=\cyklcontrol \next}
+\def\cyklcontrol#1{%
+ \ifx#1\stop \let\next=\relax
+ \else \testchar \tempB #1%
+ \ifchar \def\next##1\stop{}%
+ \else \testchar \tempA #1%
+ \ifchar \nexttrue \def\next##1\stop{}\fi \fi
+ \fi \next}
+
+% "\addtok \cs" adds the "\cs," into \icode.
+% "\addtoks{string} adds the "string," into \icode. "string" is the number
+% of line in table 1, so we re-calculate the current check sum.
+% "\addchar <token> adds the numerical value of <token> (declared in
+% \definetable:) into \icode. This value is followed by comma too.
+\def\addtok#1{\edef\act{\noexpand\icode={\the\icode\noexpand#1,}}\act}
+\def\addtoks#1{\edef\act{\noexpand\icode={\the\icode#1,}}\act
+ \tempnum=#1 \multiply\tempnum by\chnum
+ \advance\chtotal by\tempnum \advance\chnum by 1\relax}
+\def\addchar#1{\expandafter\ifx\csname:\string#1\endcsname\relax
+ \errmessage{The input token "\string#1" is not included in Code 128
+ table, will ignored}%
+ \else \expandafter\addtoks\expandafter{\csname:\string#1\endcsname}\fi}
+
+% \code{text} first converts the input text into internal representation in
+% \icode. The format of \icode is: "\start,num,num,num,\stop,", where
+% "\start" is one of "\startA" or "\startB" or "\startC". The <num>
+% represents the line of code table (see standard of Code 128 bellow)
+% of output characters. The amount of <num>s is not restricted. The sequence
+% is terminated by "\stop,". See to .log for example of this format.
+%
+% The choice of the start character:
+% If next 4 input characters are digits then \startC
+% else if the next uncommon char is from code A and not from B then \startA
+% else \startB
+% The "next uncommon char" is first character from left which falls
+% into code A xor code B
+\def\code#1{\inputtext={#1}\wlog{** Code 128 ** input: \the\inputtext}%
+ \icode={}\chnum=1
+ \numofdigits#1\stop % in \tempnum is the number of digits now
+ \ifnum\tempnum>3 \addtok\startC \chtotal=2 \let\Next=\codeC \else
+ \testnext{A:} #1\stop
+ \ifnext \addtok\startA \chtotal=0 \let\Next=\codeA
+ \else \addtok\startB \chtotal=1 \let\Next=\codeB \fi
+ \fi \Next #1\End\End}
+
+% There is mode A. Test to change the mode:
+% If the next 4 input characters are digits and the number of digits are even
+% then switch to modeC using <codeC>.
+% If the next char is from Code B and not from Code A then:
+% if the next uncommnon char is from Code B and not from A then
+% switch to mode B using <codeB>.
+% else include <SHIFT> and stay in mode A.
+\def\codeA #1#2#3\End{\addchar#1%
+ \numofdigits#2#3\stop
+ \ifnum\tempnum>3 \ifodd\tempnum\else
+ \addtoks{99}\let\Next=\codeC \fi
+ \else \ifx#2\End \let\Next=\finalcode
+ \else \testchar{B:} #2%
+ \ifchar \testnext{B:} #3\stop
+ \ifnext \addtoks{100}\let\Next=\codeB
+ \else \addtoks{98}\fi \fi \fi \fi
+ \Next #2#3\End}
+
+% There is mode B. Test to change the mode:
+% If the next 4 input characters are digits and the number of digits are even
+% then switch to modeC using <codeC>
+% If the next char is from Code A and not from Code B then:
+% if the next uncommnon char is from Code A and not from B then
+% switch to mode A using <codeA>.
+% else include <SHIFT> and stay in mode B.
+\def\codeB #1#2#3\End{\addchar#1%
+ \numofdigits#2#3\stop
+ \ifnum\tempnum>3 \ifodd\tempnum\else
+ \addtoks{99}\let\Next=\codeC \fi
+ \else \ifx#2\End \let\Next=\finalcode
+ \else \testchar{A:} #2%
+ \ifchar \testnext{A:} #3\stop
+ \ifnext \addtoks{101}\let\Next=\codeA
+ \else \addtoks{98}\fi \fi \fi \fi
+ \Next #2#3\End}
+
+% There is mode C. Test to change the mode:
+% If not next two chars are digits switch to code A or B by following rule:
+% If the next uncommon char is from Code A and not from B then
+% switch to mode A using <codeA>
+% else switch to mode B using <codeB>
+\def\codeC #1#2#3#4\End{\addtoks{#1#2}%
+ \ifx#3\End \let\Next=\finalcode
+ \else \testchar{D:} #3%
+ \ifchar \def\temp{#4}%
+ \ifx\temp\empty \switchtoAorB #3\stop
+ \else \separate #4\stop
+ \edef\act{\noexpand\testchar{D:}\temp}\act
+ \ifchar
+ \else \switchtoAorB #3#4\stop \fi \fi
+ \else \switchtoAorB #3#4\stop \fi
+ \fi \Next #3#4\End}
+\def\separate#1#2\stop{\def\temp{#1}}
+\def\switchtoAorB #1\stop{\testnext{A:} #1\stop
+ \ifnext \addtoks{101}\let\Next=\codeA
+ \else \addtoks{100}\let\Next=\codeB \fi}
+
+\def\finalcode\End\End{\addchecksum \addtok\stop \wlog{encoded: \the\icode}%
+ \expandafter\makecode\the\icode}
+
+% \addchecksum adds the check sum into \icode
+\def\addchecksum{\tempnum=\chtotal
+ \divide\tempnum by 103 \multiply\tempnum by 103
+ \advance\chtotal by-\tempnum \addtoks{\the\chtotal}}
+
+% The \makecode converts the \icode from format "\start,num,num,\stop,"
+% into sequence of digits. Each digit repersents the multiple of X module
+% size for bar or space if it is at odd or even position. For example
+% 21141223311120. It means bar of 2X, space 1X, bar 1X, space 4X and so on.
+% This representation of code is stored in macro \internalcode.
+\def\makecode#1,{\let\next=\cyklcode \edef\internalcode{#1}\next}
+\def\cyklcode#1,{%
+ \ifx\stop#1\let\next=\finalmakecode \edef\internalcode{\internalcode\stop}%
+ \else \edef\internalcode{\internalcode\tableofcode{#1}}\fi \next}
+\def\finalmakecode{\wlog{black-white: \internalcode}%
+ \begcode \let\next=\makebars \expandafter\makebars\internalcode}
+
+% \makebars simply makes the \vrules and \kerns of appropriate sizes from
+% \internalcode representation. Each width of \vrule is corrected by \bcorr
+% and opposite for \kern.
+\def\makebars#1#2{\if0#2\let\next=\endcode\fi
+ \workdimen=#1\X \advance\workdimen by-\bcorr \vrule width\workdimen
+ \workdimen=#2\X \advance\workdimen by \bcorr \kern\workdimen
+ \next}
+
+% The begin and end of completed \hbox:
+\def\begcode{\hbox\bgroup\vrule height\barheight width0pt}
+\def\endcode{\egroup}
+
+% User can use \codetext or \codeothertext instead \code:
+\def\codeothertext#1#2{\vbox{\halign{\hfil##\hfil\cr\code{#1}\cr{\tt#2}\cr}}}
+\def\codetext#1{\codeothertext{#1}{#1}}
+
+\endinput %%%%%%%%%%%%%%% End of macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ The description of Code 128 standard
+ ************************************
+
+The characters from input string are converted from left to right
+to so called "output characters" by table 1 (see below). Each output
+character has three bars and spaces. The width of bars and the dimensions
+of spaces between bars are significant. This values are expresed by
+multiples of basic dimension: so called X module size (see \X in macro).
+The multiples varies from 1 to 4. We are using the six digits expression of
+output character. It expressed dimensions of bar, space, bar, space, bar,
+space. For example 122412 means one output character drawn as: 1X bar, 2X
+space, 2X bar, 4X space, 1X bar and 2X space.
+
+The table 1:
+
+num.line code A code B codeC output character
+-------------------------------------------------------
+ 0 [space] [space] 00 212222
+ 1 ! ! 01 222122
+ 2 " " 02 222221
+ 3 # # 03 121223
+... and so on ...
+ 63 _ _ 63 111224
+ 64 \NUL ` 64 111422
+ 65 \SOH a 65 121124
+ 66 \STX b 66 121421
+... and so on ...
+ 93 \GS } 93 111341
+ 94 \RS ~ 94 131141
+ 95 \US \DEL 95 114113
+ 96 <FNC3> <FNC3> 96 113311
+ 97 <FNC2> <FNC2> 97 411113
+ 98 <SHIFT> <SHIFT> 98 411311
+ 99 <codeC> <codeC> 99 113141
+100 <codeB> <FNC4> <codeB> 114131
+101 <FNC4> <codeA> <codeA> 311141
+102 <FNC1> <FNC1> <FNC1> 411131
+
+The whole table is not presented here because you can simply reconstruct it
+from macros.
+
+The columns "code A", "code B", and "code C" inlude all possible input
+characters in input string (excluding "special commands" in lines 96--102
+written in <angle> braces). The special \TeX{} characters must be escaped
+(i.e. user have to write \# and no #). The escaped words (in capitals)
+represents so called "control characters" from ASCII. The meaning of this
+sequences depends on application. The "special commands" in lines 96--102
+written in <angle> braces are not possible in input. They are special for
+decoder. The <SHIFT> and <codeA-C> are used in our macro, but <FNC?> are
+not because they are reserved for special purposes.
+
+The Code B column is whole expressed in \definetable:0 (see in macro). The
+Code A column has the same values in lines 0--63 (capitals, digits and some
+other ASCII characters are included here). Code A differ from Code B in
+lines 64--102. The lowercase letters and another ASCII characters are
+included in "Code B", but control sequences are included in "Code A".
+The different part of "Code A" column is expressed in \definetable:64 (see
+in macro). The "code C" column includes the digits pairs and corresponds to
+number of line in table 1. Two digits in input go to one output character.
+The whole "output character" column is expressed in \tableofcode (see in
+macro).
+
+The "start character" is appended before each barcode. There are three
+types of start character depending on which column of table is used for
+next encoding (so called mode). See macros \startA, \startB and \startC.
+For examlpe: If \startC is used, next output character represents two
+digits in input (codeC mode). If \startB is used, next output character
+represents one ASCII character in input (codeB mode). If \startA is used,
+next output character represents probably the control sequence in input or
+capitals, but not lowercase ASCII (codeA mode).
+
+If some mode for encoding is currently used and next input character is not
+included in appropriate column, the "switching command" is included into
+sequence of output character. The <SHIFT> command switches from mode A to
+B or from B to A only for one next input character and the other input
+characters are coded in the same mode (A or B). The <codeA> command
+switches to codeA mode definitively unless next switch command is used.
+The commands <codeB> and <codeC> makes the same service, but to switch into
+mode B or C respectively. All these commands are expessed in table 1.
+
+It is recomended to chose the start character and switching commands by the
+way, that the resulting length of code is minimised. There are some
+recommendations of this choice. These recommendations are included into our
+macros (see the commnets and macros for \code, \codeA, \codeB and \codeC).
+
+The checksum character is added after the end of input string. Finally,
+the "stop character" is appended after the end of barcode. This character
+has exclusively four bars and not only three. See macro \stop.
+
+The checksum character is calculated from output characters used in the
+code. The number of line in table 1 of each output character is asumed. The
+start character is covered too, but checksum character itself and the
+stop character are not included into calculation. The startA or startB or
+startC characters has its number of line 103 or 104 or 105 respectively. Each
+output character (more exactly its number of line in table 1) is multiplied
+by "weight number" and the total sum is calculated. The weight number of
+start character is one. The weight number of first output characet after
+start is one too. Second character has weight number two, and so on. The
+n-th character has weight number n. The total sum modulo 103 is the line of
+the calculated checksum character.
+
+Example for checksum calculation:
+Input: 123456
+Encoded: StartC, 12, 34, 56
+Total sum of checksum: 105 + 1*12 + 2*34 + 3*56 = 535
+Modulo 103: 44
+The character from line 44 is apended as checksum.
+The whole encoded code: StartC, 12, 34, 56, 44, Stop
+
+%%% End of file.
+
+
+
+
diff --git a/macros/generic/code128/test128.tex b/macros/generic/code128/test128.tex
new file mode 100644
index 0000000000..0544f7bf2e
--- /dev/null
+++ b/macros/generic/code128/test128.tex
@@ -0,0 +1,110 @@
+% test128.tex -- A file for testing code128 macro
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% April 1996 Petr Ol\v{s}\'ak
+
+% The information about using the macro code128.tex is included here.
+% You can try to TeX all examples presented here with plain TeX format.
+%
+% The Code 128 standard serves encoding (and decoding) the input string into
+% barcode. The input string can be arbitrary long and it can contain 128
+% different characters:
+%
+% - Digits: 0123456789
+% - Uppercase and lowercase letters
+% - Other ASCII characters: ! ' ( ) * + , - . / : ; < = > ? @ [ ] ` |
+% - TeX special characters (must be escaped): \# \$ \% \& \\ \^ \_ \{ \} \~
+% - Special control characters from ASCII table are implemented as control
+% sequences: \NUL \SOH \STX \ETX \EOT \ENQ \ACK \BEL \BS \HT \LF \VT \FF
+% \CR \SO \SI \DLE \DCone \DCtwo \DCthree \DCfour \NAK \SYN \ETB \CAN \EM
+% \SUB \ESC \FS \GS \RS \US \DEL
+%
+% After you \input the macro code128.tex by:
+
+\input code128
+
+% you can use the macro "\code". This macro encodes string as parameter
+% enclosed in braces and produces the \hbox with barcode. For example:
+
+\code{text} \bigskip % (for vertical space from next example)
+
+% produces the barcode of string "text". The spaces in input string are not
+% significant. That is, the \code{t e x t} produces the same result.
+% There is an exeption: Before closing brace the space is prohibited.
+% For instance: \code{text } produces an error.
+% If you want to encode the spaces too, you have to express the spaces by
+% control sequence "\ " or "\SP". For example:
+
+\code{text\ with\ spaces} \bigskip
+
+% Remember, you must escape all TeX special characters:
+
+\code{\{ \% \# \^} \bigskip
+
+% The special ASCII characters can be encoded by control sequnces:
+
+\code{abc\ESC ABC\\\CR} \bigskip
+
+% If you wish to add the printed version of string bellow barcode, you can use
+% the "\codetext" alternative. It works in the same way as "\code", exept the
+% output box is \vbox contained the \hbox with barcode and \tt version of
+% input text (centered). For example
+
+\codetext{text} \bigskip
+
+% produces the same as in previous example plus {\tt text}.
+% If you use the control characters in input string and use the \codetext,
+% you have to define the control sequences before using them. For example:
+
+\def\\{\char`\\ }
+\def\ESC{$\langle${\rm ESC}$\rangle$}
+\def\CR{$\langle${\rm CR}$\rangle$}
+
+\codetext{abc\ESC ABC\\\CR} \bigskip
+
+% If you don't define them, an error "undefined control sequence" may be
+% occured.
+%
+% If you wish to label the code by another string, then coded string, you
+% can use the "\codeothertext" macro with two parameters. First parameter is
+% the same as in \code command and second parameter will be printed by \tt.
+% For example:
+
+\codeothertext{01 70 08 39 90 31 99 62 07 69 36 20 10}%
+ {0170-0839(199602)36:2;1-A} \bigskip
+
+% You can change three dimension parameters for your special purposes:
+% The implicit values follows:
+% \X=.33mm % The X module (all width dimensions are multiples of \X)
+% \barheight=1.5cm % The code height.
+% \bcorr=.020mm % reduction (bars are thinner by \bcorr and spaces taller)
+% Don't change the \bcorr parameter unless you know the tolerances of
+% barcode and ink behavior of your output device. The \bcorr=.020mm is good
+% value for offset printing.
+
+% For example, we change:
+
+\X=.5mm % The width of code will be greater
+\barheight=1cm % the height will be smaller.
+
+\codetext{01 70 08 39 90 31 99 62 07 69 36 20 10} \bigskip
+
+% Notice1: The algorithm for encoding is not explicit. The results from
+% different softare may be differ. You cannot debug the software only by
+% comparing the results with other software. It is necessary to try the
+% decoder for debugging the soft. If the output from decoder is the same as
+% input string, all is OK. For more information about algorithm of Code 128
+% standard see the end of file code128.tex.
+
+% Notice2: You can use the macro on your own risk. There is no warranty
+% that the macro works OK because author has no possibility to try any
+% decoder. If you find out any bug, please report this (including the
+% *.log file and the desription of the problem) to author's address:
+% <olsak@math.feld.cvut.cz>.
+
+% Some other examples (for testing).
+
+\codetext{0170012233abc80911} \bigskip
+
+\codetext{\CR\ESC ab\ESC de\#fgABC}
+
+\end
diff --git a/macros/generic/colortab/Changes b/macros/generic/colortab/Changes
new file mode 100644
index 0000000000..db014bfef9
--- /dev/null
+++ b/macros/generic/colortab/Changes
@@ -0,0 +1,5 @@
+colortab.tex --------
+1.00 2010-05-13 - change license to lppl (hv)
+ - update documentation (hv)
+ - new LaTeX style file (hv)
+
diff --git a/macros/generic/colortab/Makefile b/macros/generic/colortab/Makefile
new file mode 100644
index 0000000000..7bd3e48751
--- /dev/null
+++ b/macros/generic/colortab/Makefile
@@ -0,0 +1,71 @@
+
+# `Makefile' for `pst-3dplot.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = colortab
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+ GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+# if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+# if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+# makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+# makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+# $(basename $<).glo
+# bibtex $(basename $<)
+# $(LATEX) $<
+# $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .Roessler .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+ $(RM) data3d.Roessler
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro ~/Links/dvips-local/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/macros/generic/colortab/colortab-doc.pdf b/macros/generic/colortab/colortab-doc.pdf
new file mode 100644
index 0000000000..d44f43bc87
--- /dev/null
+++ b/macros/generic/colortab/colortab-doc.pdf
Binary files differ
diff --git a/macros/generic/colortab/colortab-doc.tex b/macros/generic/colortab/colortab-doc.tex
new file mode 100644
index 0000000000..a71f74da11
--- /dev/null
+++ b/macros/generic/colortab/colortab-doc.tex
@@ -0,0 +1,372 @@
+%% Documentation for colortab.tex/colortab.sty.
+%%
+%% The color commands \gray and \lightgray must be defined if you
+%% want to see the examples. pstricks.tex will be loaded for this
+%% purpose if it is found. Otherwise, you must load your own
+%% color commands.
+%%
+%% Change these if using different size paper. You can also include the
+%% twosided style option, if desired:
+
+\documentclass[12pt]{article}
+\usepackage [T1]{fontenc}
+\usepackage{mathpazo,fancybox,url}
+\usepackage{pstricks,colortab}
+\let\CTfv\fileversion
+\newgray{lightgray}{0.5}
+\newgray{gray}{1}
+\makeatletter
+% VERBATIM HACKS:
+\VerbatimFootnotes
+
+% Short meta (works in verbatim. Can't use < for other purposes.
+\catcode`\<=13 \def<#1>{{\rm\it #1\/}} % <meta> (works in verbatim)
+
+% Short verbatim. " can appear in verbatim environments.
+\def\temp{\Verb"}
+\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\"}
+\catcode`\"=13
+\let"\temp
+
+\def\n#1{{\tt\string#1}}
+
+% Verbatim item:
+\newcommand\vitem{\SaveVerb[{\def\bf{}\item[\UseVerb{\MyTemp}]}]{\MyTemp}}
+
+% Verbatim section"
+
+% EXAMPLES:
+% 1. Save example verbatim to \jobname.tmp,
+% 2. Input verbatim with \catcode`\"=14 (" is a comment).
+% 3. Input again with \catcode\`"=9 (" is ignored).
+
+\renewcommand{\EveryVerbatimLine}[2]{}
+\renewcommand{\EveryVerbOutLine}[2]{}
+\newcommand\BeginExample{%
+ \VerbatimEnvironment\begin{VerbatimOut}{\jobname.tmp}}
+\newcommand\EndExample{%
+ \end{VerbatimOut}%.
+ \renewcommand{\EveryVerbatimLine}{}%
+ \renewcommand{\EveryVerbatimCodes}{\catcode`\"=14}%
+ \LVerbatimInput{\jobname.tmp}%
+ \catcode`\"=9}
+
+\iftrue% always using color
+\newenvironment{example}{\BeginExample}{\EndExample
+ \begin{center}\leavevmode\input{\jobname.tmp}\end{center}}
+\else
+\newenvironment{example}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim}
+\fi
+
+% END PREAMBLE:
+\makeatother
+\title{Documentation\thanks{Documentation revised by Herbert Vo\ss} for colortab:\\[5pt]
+ Shading and coloring \TeX\ tables, v. \CTfv}
+\author{Timothy Van Zandt\\ \url{tvz@Princeton.EDU}}
+\date{\today}
+
+\begin{document}
+
+\maketitle
+\tableofcontents
+
+\begin{quote}
+"colortab.tex/colortab.sty" contains macros that let you use your color
+commands for shading and coloring cells in tables and other alignment
+environments. It is compatible with most \TeX\ macro packages.
+\end{quote}
+
+\section{Introduction}
+
+Adding color to tables is fraught with difficulties, but as the examples in
+this file indicate, it can be done. In any case, consider this an advanced
+topic, and be aware that the commands in "colortab.tex" are not robust.
+
+This is meant to supplement your own color commands. There are many macro
+files that implement color for the various "dvi" drivers that can support
+color. E.g., the PSTricks package works with a variety of DVI-to-PS drivers.
+
+For example, suppose you have a macro that defines the color command "\gray".
+"colortab.tex" requires that one of the following produce a gray line:
+\begin{LVerbatim}
+ {\gray \hrule}
+ \gray{\hrule}
+\end{LVerbatim}
+if you want to use this command to color the cells in tables.
+This is probably the case if the one of the following produces gray text:
+\begin{LVerbatim}
+ {\gray I am gray!}
+ \gray{I am gray!}
+\end{LVerbatim}
+
+"colortab.tex" contains macros for \TeX's "\halign" primitive. Incorporating
+color into high-level macros based on the "\halign" primitive requires a
+case-by-case treatment. "colortab.tex" also contains macros for coloring cells
+\LaTeX's various array environments, and for the \LaTeX\ "longtable"
+environment that is defined in the "longtable" (or "longtabl") style option.
+These can serve as examples that can be accommodated to other table macros.
+See the code itself for happy hacking.
+
+\section{\TeX's halign primitive}
+
+To shade cells in an alignment, use
+\begin{LVerbatim}
+ \coloralign
+\end{LVerbatim}
+instead of "\halign". Then, to color the columns in one or more rows, type
+\begin{LVerbatim}
+ \CC
+ <row of colors>\cr
+ <rows to be colored>\cr
+ \ECC
+\end{LVerbatim}
+For example:
+\begin{example}
+ \setbox\strutbox=\hbox{\vrule height11.5pt
+ depth6.5pt width0pt}%
+ \vbox{\offinterlineskip
+ \coloralign{%
+ \vrule\strut\quad\hfil#\hfil\quad
+ &\vrule\quad\hfil#\quad\vrule\cr
+ \noalign{\hrule}%
+ \CC
+ \gray &\cr
+ Tamarind&Chiplote\cr
+ \ECC\noalign{\hrule}%
+ \CC
+ \lightgray &\gray\cr
+ Lulu&Serrano\cr\noalign{\hrule}%
+ Guanabana&Larga\cr
+ \ECC\noalign{\hrule}%
+ }}
+\end{example}
+
+"\CC" and "\ECC" stand for ``ColorCells'' and ``EndColorCells'', respectively.
+You cannot change the name of "\ECC" with "\let" or "\def" (without redefining
+"\CC"), because it is really just a delimiter. This is also true of the first
+"\cr", which marks the end of the row of color commands.
+Remember that only complete rows can go between "\CC" and "\ECC". Where you
+include horizontal lines is generally inconsequential. You can have nested
+"\coloralign" environments, but the nested environment must be enclosed in
+brackets "{}". There is no "\coloralign to" or "\coloralign spread" because
+the space inserted by "\tabskip" won't be shaded.
+
+These macros are not very robust. You can make best use of them by knowing how
+they work. "\coloralign" just saves the preamble, and otherwise is identical
+to "\halign". "\CC" finds the height of the rows that have to be colored, and
+then "\CC" draws a rectangle using \TeX's line-drawing primitives in each
+cell, colored by the color commands included in the first line that follows
+"\CC". E.g.,
+\begin{LVerbatim}
+ \yellow &&\red \cr
+\end{LVerbatim}
+draws a yellow rectangle in column 1, nothing in column 2, and a red rectangle
+in column 3. Then "\CC" goes back up the height of the rectangle, so that
+\TeX's current point is back where it was when "\CC" started. At this point,
+"\CC" has finished its work. When the next rows of the alignment environment
+are processed by "\halign", they are put down on top of the rectangles, and
+hence have colored backgrounds.
+
+"\CC" finds the height of the rows to be colored by putting the rows into an
+"\halign" environment, using the preamble that was saved by "\coloralign", and
+then measuring the height of the resulting box.
+
+\section{\LaTeX\ array environments}
+
+Cells can be colored in a \LaTeX\ array without using a special array
+environment (i.e., there is no \LaTeX\ analog to "\coloralign"). Use "\LCC"
+instead of "\CC", and use "\\" to end the row of color commands instead of
+"\cr". For example:
+\begin{example}
+ \def\arraystretch{1.5}%
+ \begin{tabular}{|l|c|}\hline
+ \LCC
+ \gray & \\
+ Tamarind & Chiplote \\ \hline
+ \ECC
+ \LCC
+ \lightgray & \gray\\
+ Lulu & Serrano\\ \hline
+ Guanabana & Larga\\ \hline
+ \ECC
+ \end{tabular}
+\end{example}
+The same caveats apply as with the "\coloralign" environment.
+
+When \n\LCC\ and \n\ECC\ are used with Frank Mittelbach's "array.sty", nested
+array-type environments and "\multicolumn" commands wipe out information
+needed by \n\ECC\. Here is a workaround: Put "\SP" (``SavePreamble'') at the
+beginning of the array-type environment (right after the column declarations),
+and put "\RP" (``RestorePreamble'') at the end of each line containing a
+"\multicolumn" command or nested array-type environment (after the "\\", and
+before the \n\ECC). For example:
+\begin{LVerbatim}
+ \begin{tabular}{|l|c|}\SP\hline
+ \LCC
+ \gray & \\
+ \multicolumn{2}{c}{Tamarind}\\ \RP \hline
+ \ECC
+ \end{tabular}
+\end{LVerbatim}
+Further nesting (e.g., an array within a "\multicolumn", or a "\multicolumn"
+or array within a nested array) sometimes works and sometimes doesn't. You
+will have to figure that one out for yourself.
+
+
+\section{longtable.sty}
+
+"longtable.sty", by David Carlisle, defines the "longtable" environment, for
+making multipage tables. "\LCC" will not work with "longtable". However,
+"colortab" contains other macros that will work, if you use "longtable.sty" in
+conjunction with Frank Mittelbach's "array.sty". These macros have been tested
+only briefly, with version 3.04 of "longtable.sty" and version 2.1b of
+"array.sty".
+
+Before every column identifier in the environment's argument (e.g., "c", "l",
+"r", "p", "m" or "b"), put
+\begin{description}
+ \vitem"!{\LC}" If none of the below applies;
+ \vitem"!{\LCi}" If the column is preceded by one or more vertical lines;
+ \vitem"!{\LCii}" If the column is followed by two vertical lines;
+ \vitem"!{\LCiii}" If the column is preceded by one or more vertical lines
+and followed by two vertical lines.
+ \vitem"!{\LCz{<len1>}{<len2>}}" If "colortab" should back up by <len1>
+before drawing the background, and should draw the background <len2> shorter
+than the width of the column.
+\end{description}
+Remember that you have to do this for every column, not just the columns that
+you want to color.
+
+Then include
+\begin{LVerbatim}
+ \LColors <color> & <color> & ... & <color>\\
+\end{LVerbatim}
+in the first row of the environment, and later on as well if you wish to
+change the colors. Here also you have to include every column, but you can
+leave an entry blank if you don't want any background color in that column.
+
+The color comes out right, or at all, only after you have run the file enough
+times for "longtable.sty" to set the alignment correctly.
+
+Here is an example. The output will appear in this documentation only if
+"longtable.sty" or "longtabl.sty" is installed on your system.
+\begingroup
+ \makeatletter
+ \catcode`\<=12
+% Modification Denis GIROU (CNRS/IDRIS - France) - &lt;Denis.Girou@idris.fr&gt; - 10 Sep. 1996
+% Can't work with LaTeX 2e
+% \@input{longtable.sty}%
+% \@input{longtabl.sty}%
+% \@input{array.sty}%
+ \@input{longtable.styX}% Avoid loading of longtable.sty...
+ \@input{longtabl.sty}%
+ \@input{array.styX}% Avoid loading of array.sty...
+ \@testtrue
+ \@ifundefined{c@LT@tables}{\@testfalse}{}%
+ \@ifundefined{d@llarbegin}{\@testfalse}{}%
+ \if@test\else
+ \renewenvironment{example}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim}%
+ \fi
+ \makeatother
+\begin{example}
+ \LARGE
+ \begin{longtable}{|!{\LCiii}l||!{\LCi}c|!{\LCi}c|}\hline
+ \LColors \gray & & \\
+ Tamarind & Chiplote & Galanga\\ \hline
+ \LColors \lightgray & & \gray\\
+ Lulu & & Serrano\\ \hline
+ Guanabana & Larga &\\ \hline
+ \end{longtable}
+\end{example}
+\endgroup
+
+\section{Coloring lines}
+
+Let's begin with the "\halign" environment. Changing the color of lines is
+easy, because if you write, say, "{\gray\hrule}", then the line comes out
+gray. For example:
+\begin{example}
+ % Thicker lines and wider spacing give better view:
+ \setbox\strutbox=\hbox{%
+ \vrule height15.5pt depth8.5pt width0pt}%
+ \def\Hrule{\hrule height 2.5pt}%
+ \def\Vrule{\vrule width 2.5pt}%
+ % Now the table:
+ \vbox{\offinterlineskip
+ \halign{%
+ {\lightgray\Vrule}\strut\quad\hfil#\hfil\quad
+ &{\gray\Vrule}\quad\hfil#\quad\Vrule\cr
+ \noalign{\Hrule}%
+ Tamarind& Chiplote\cr\noalign{{\darkgray\Hrule}}%
+ Lulu& Serrano\cr\noalign{\Hrule}%
+ Guanabana& Larga\cr\noalign{{\lightgray\Hrule}}%
+ }}
+\end{example}
+
+With \LaTeX, you can add an entry like
+\begin{LVerbatim}
+ @{\hspace{\tabcolsep}{\gray\vrule}\hspace{\tabcolsep}}
+\end{LVerbatim}
+to the argument of the alignment environment, instead of "|", if you want to
+color the vertical line that is drawn. If using "array.sty", you can try:
+\begin{LVerbatim}
+ !{{\gray\vrule}}
+\end{LVerbatim}
+
+To color horizontal lines with \LaTeX, don't bother trying
+\begin{LVerbatim}
+ {\gray\hline}
+\end{LVerbatim}
+because it won't work. You write your own version of "\hline" and "\cline", or
+use the non-aligned color commands described in the next section.
+
+\section{Non-aligned color with PSTricks}
+
+Here are a few other commands that can be useful for adding color to tables.
+{\bf They only work with PSTricks, v0.93 or later.} <color> in this case is
+the name of the color, without the backslash. These fudge the color commands
+so that they do not have to be balanced with respect to \TeX\ grouping. You
+can achieve the same thing using "\special{<raw postscript>}" and "\noalign",
+if you know what you are doing. These should work with just about any
+alignment macro, include "\halign" and \LaTeX's "tabular" environment.
+
+\begin{description}
+
+\vitem"\AC{<color>} ... \EAC" \
+
+ These stand for "AlignColor" and "EndAlignColor", respectively. <color> is
+the name of the color, without a backslash, rather than a color command. This
+can be used within a cell, but they do not have to be within the same cell,
+nor do they have to be properly nested with respect to \TeX\ grouping.
+Generally, "\AC{<color>}" switches to <color>, and \n\EAC\ restores the color
+that would be in effect if the first \n\AC\ command were missing.
+
+\vitem"\NAC{<color>} ... \ENAC" \
+
+ These stand for "NoAlignColor" and "EndNoAlignColor", respectively. These
+are like \n\AC\ and \n\EAC, but the color commands are put inside a
+"\noalign". They can only appear at the end of a line, after "\\" or "\cr".
+
+\end{description}
+Actually, these do not even have to be used in pairs.
+
+Here is an example of how "\AC", etc., can be used. to color lines in \LaTeX\
+arrays. The output will appear in this documentation only if PSTricks is
+installed on your system:
+\begingroup
+\ifx\PSTricksLoaded\endinput\else
+ \renewenvironment{example}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim}
+\fi
+\begin{example}
+ \arrayrulewidth 1.5pt
+ \begin{tabular}{|l|c|}\hline
+ Tamarind& Chiplote\\ \NAC{gray}\hline\ENAC
+ Lulu& Serrano\\ \cline{1-1}
+ \NAC{lightgray}\cline{2-2}\ENAC
+ Guanabana\AC{lightgray} & \EAC Larga\\ \hline
+ \end{tabular}
+\end{example}
+\endgroup
+
+\end{document}
+%% END colortab.doc
diff --git a/macros/generic/colortab/colortab.sty b/macros/generic/colortab/colortab.sty
new file mode 100644
index 0000000000..23363a9209
--- /dev/null
+++ b/macros/generic/colortab/colortab.sty
@@ -0,0 +1,10 @@
+%% $Id: pst-3dplot.sty 294 2010-02-18 21:15:47Z herbert $
+\RequirePackage{pstricks}
+\RequirePackage{fancybox}
+\ProvidesPackage{colortab}[2010/05/13 package wrapper for
+ colortab.tex (hv)]
+\input{colortab.tex}
+\ProvidesFile{colortab.tex}
+ [\filedate\space v\fileversion\space `colortab' (tvz)]
+\endinput
+
diff --git a/macros/generic/colortab/colortab.tex b/macros/generic/colortab/colortab.tex
new file mode 100644
index 0000000000..85abe16936
--- /dev/null
+++ b/macros/generic/colortab/colortab.tex
@@ -0,0 +1,669 @@
+%% BEGIN colortab.tex/colortab.sty
+%%
+\def\fileversion{1.0}
+\def\filedate{10/05/13}
+%%
+%% COPYRIGHT 1993/2010, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% DESCRIPTION:
+%% colortab.tex/colortab.sty lets you shade or color the cells in a
+%% alignment environments (e.g., \halign and \LaTeX's tabular and
+%% array environments). It is compatible with most TeX macro packages,
+%% including Plain TeX, LaTeX, AmSTeX, and Ams-LaTeX. You must be
+%% use in conjunction with other color commands.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% CODE:
+%
+% colortab.tex uses TeX primitives, plus the Plain TeX commands:
+% \newcount, \newtoks, \newbox, \newif and \z@.
+%
+% The LaTeX specific macros also use some LaTeX commands.
+%
+\csname ColortabLoaded\endcsname
+\let\ColortabLoaded\endinput
+\ifx\PSTricksLoaded\endinput\else \input pstricks.tex\fi
+%
+\message{\space\space v\fileversion\space\space\filedate\space\space <tvz>}
+\edef\TheAtCode{\the\catcode`\@}\catcode`\@=11
+%
+% These scratch registers are set globally:
+%
+\newcount\CT@cnt
+\newdimen\CT@dim
+\newbox\CT@box
+%
+% This flag is used to shut off colortab:
+%
+\newif\ifcolortab
+\colortabtrue
+%
+% To color row cells of unknown height we first have to put the rows in an
+% alignment and measure the resulting height, then put down a row of blobs
+% (with \hrule, and then move back up the page.
+%
+% For TeX's \halign primitive, \coloralign saves the preamble in the token
+% register \CT@preamble. This is used to calculate the height of the columns
+% that are to be colored in.
+%
+\newtoks\CT@preamble
+\def\coloralign{%
+ \afterassignment\coloralign@
+ \setbox\CT@box=\hbox}
+\def\coloralign@#1\cr{%
+ \egroup
+ \CT@preamble{\halign\bgroup#1\cr}%
+ \the\CT@preamble}
+%
+% \CC reads the next row, which should contain the color commands, and then
+% the rows to be colored. The height of the latter rows is calculated, and
+% then the row of colors is processed. \CT@columncolor uses \leaders to get
+% each color to fill the column horizontally, and it uses the previously
+% calculated height to fill the columns vertically.
+% \begin{macrocode}
+\def\CT@columncolor{%
+ \ifx\next\@nil
+ \def\next##1&\@nil{\gdef\CT@next{##1}}%
+ \expandafter\next\CT@next\@nil
+ \def\CT@temp\@nil{}%
+ \else
+ \ifx\next\CT@space
+ \def\CT@temp{%
+ \def\next{\futurelet\next\CT@columncolor}%
+ \afterassignment\next\let\CT@temp= }%
+ \else
+ \def\CT@temp{\CT@@columncolor}%
+ \fi
+ \fi
+ \CT@temp}
+\def\CT@@columncolor#1&{%
+ \ifx\next&%
+ \expandafter\gdef\expandafter\CT@next\expandafter{\CT@next\omit{}&}%
+ \else
+ \expandafter\gdef\expandafter\CT@next\expandafter{\CT@next
+ \omit{{\ignorespaces#1{\leaders\hrule height\CT@dim\hfil}}}&}%
+ \fi
+ \futurelet\next\CT@columncolor}
+{\def\\{\global\let\CT@space= }\\ }
+\def\CC@#1#2#3{%
+ \ifcolortab
+ \noalign{%
+ \setbox\CT@box=\vbox{#1#3\crcr\egroup}%
+ \CT@dim=\ht\CT@box
+ \global\advance\CT@dim by \dp\CT@box
+ \def\CT@next{}%
+ \futurelet\next\CT@columncolor#2&\@nil}%
+ \CT@next\cr
+ \noalign{\vskip-\CT@dim}%
+ \fi
+ #3}
+\def\CC#1\cr#2\ECC{\CC@{\the\CT@preamble}{#1}{#2}}
+%
+% With \LaTeX's alignment macros, the preamble is saved for us in \@preamble.
+% Otherwise, \LCC is the same as \CC.
+%
+\def\LCC#1\\#2\ECC{\CC@{\@preamble}{#1}{#2}}
+%
+% This unaligned color stuff only works with PSTricks:
+%
+\def\AC#1{%
+% \@ifundefined{color@#1}%
+% {\@pstrickserr{Color not defined: `#1'}\@ehpa}%
+ {\pstVerb{\pst@usecolor{#1}}}}
+\def\EAC{\pstVerb{\pst@currentcolor}}
+\def\NAC#1{\noalign{\AC{#1}}}
+\def\ENAC{\noalign{\EAC}}
+%
+\def\SP{\noalign{\global\let\CT@savedpreamble\@preamble}}
+\def\RP{\noalign{\global\let\@preamble\CT@savedpreamble}}
+%
+\newcount\CT@LCnum
+\def\LColors#1\\{%
+ \noalign{%
+ \ifnum\CT@LCinitflag=\c@LT@tables\else\CT@LCinit\fi
+ \ifnum\CT@LCflag=\z@
+ \global\CT@LCnum 1
+ \CT@LColors#1&\@nil
+ \global\CT@LCnum\CT@LCmax
+ \fi}}
+\def\CT@LColors#1&{%
+ \global\@namedef{LColor@\the\CT@LCnum}{#1}%
+ \@ifnextchar\@nil{\@gobble}{%
+ \global\advance\CT@LCnum 1
+ \CT@LColors}}
+\def\CT@LCinit{%
+ \ifcolortab
+ \@ifundefined{LT@\romannumeral\c@LT@tables}%
+ {\gdef\CT@LCflag{1}}{\gdef\CT@LCflag{\z@}}%
+ \else
+ \gdef{CT@LCflag{1}}%
+ \fi
+ \ifnum\CT@LCflag=\z@
+ \begingroup
+ \def\omit\kern##1&{%
+ \advance\CT@LCnum 1
+ \CT@dim=##1\relax
+ \expandafter\xdef\csname LCdim@\the\CT@LCnum\endcsname{%
+ \number\CT@dim sp}}%
+ \CT@LCnum\z@
+ \@nameuse{LT@\romannumeral\c@LT@tables}&%
+ \xdef\CT@LCmax{\the\CT@LCnum}%
+ \endgroup
+ \fi
+ \xdef\CT@LCinitflag{\the\c@LT@tables}}
+\def\CT@LCinitflag{\z@}
+\def\LC@Cell{%
+ \kern-\@tempdima
+ \ifnum\CT@LCflag=\z@
+ \ifnum\CT@LCnum=\CT@LCmax\relax
+ \global\CT@LCnum 1
+ \else
+ \global\advance\CT@LCnum 1
+ \fi
+ \CT@dim=\@nameuse{LCdim@\the\CT@LCnum}\relax
+ \advance\CT@dim-\@tempdimb
+ \expandafter\ifx\csname LColor@\the\CT@LCnum\endcsname\@empty\else
+ \begingroup
+ \@nameuse{LColor@\the\CT@LCnum}{%
+ \vrule width\CT@dim}%
+ \endgroup
+ \kern-\CT@dim
+ \fi
+ \fi}
+\def\LC{\@tempdima=\z@\@tempdimb=\z@\LC@Cell}
+\def\LCi{\LCi@\LC@Cell}
+\def\LCi@{%
+ \@tempdima=\doublerulesep
+ \ifnum\CT@LCflag=\z@
+ \ifnum\CT@LCnum=\CT@LCmax\relax
+ \@tempdimb=\arrayrulewidth
+ \else
+ \@tempdimb=\z@
+ \fi
+ \fi}
+\def\LCii{%
+ \@tempdima=\z@
+ \@tempdimb=\doublerulesep
+ \advance\@tempdimb=\arrayrulewidth
+ \LC@Cell}
+\def\LCiii{%
+ \LCi@
+ \advance\@tempdimb\doublerulesep
+ \advance\@tempdimb\arrayrulewidth
+ \LC@Cell}
+\def\LCz#1#2{%
+ \@tempdima=#1
+ \@tempdimb=#2
+ \LC@Cell}
+%
+\catcode`\@=\TheAtCode\relax
+\endinput
+%% END colortab.tex/colortab.sty
+
+%% BEGIN colortab.doc
+\def\FileVersion{0.9}
+\def\FileDate{93/01/11}
+%%
+%% Documentation for colortab.tex/colortab.sty.
+%% Run through LaTeX, with or without the NFSS.
+%%
+%% You need the file fancybox.sty, available from Princeton.EDU:/pub/tvz
+%%
+%% The color commands \gray and \lightgray must be defined if you
+%% want to see the examples. pstricks.tex will be loaded for this
+%% purpose if it is found. Otherwise, you must load your own
+%% color commands.
+%%
+%% Change these if using different size paper. You can also include the
+%% twosided style option, if desired:
+
+\def\paperwidth{8.5in}
+\def\paperheight{11in}
+
+\documentstyle[12pt,fancybox]{article}
+
+\makeatletter
+
+% Load pstricks.tex if it is found:
+\@input{pstricks.tex}
+
+% Input colortab.tex here to check file version:
+\input colortab.tex
+\ifx\FileVersion\fileversion\else
+ \@latexerr{colortab input file and documentation do not have the same
+ version}\@ehd
+\fi
+
+% DATES, VERSIONS AND TITLES:
+
+\def\expanddate#1/#2/#3/{\year=19#1 \month=#2 \day=#3}
+\begingroup
+ \expandafter\expanddate\filedate/
+ \xdef\thefiledate{\today}
+\endgroup
+
+\title{Documentation for colortab.tex/colortab.sty:\\[5pt]
+ Shading and coloring \TeX\ tables}
+\author{Timothy Van Zandt\\ tvz@Princeton.EDU}
+\date{Version \fileversion\\ \thefiledate}
+
+\def\@maketitle{%
+ \begin{center}
+ {\Large\bf \@title \par}
+ \vskip 1.2em {\lineskip .5em
+ \begin{tabular}[t]{c}\@author\end{tabular}\par}
+ \vskip .8em {\@date}%
+ \end{center}
+ \par
+ \vskip .5em}
+
+% PAGE STYLE:
+
+\pagestyle{myheadings}
+\if@twoside
+ \markboth{Documentation for colortab.tex/.sty}%
+ {Version \fileversion, \thefiledate}%
+\else
+ \markright{colortab.tex, Version \fileversion}
+\fi
+
+% TABLE OF CONTENTS
+
+\newskip\myskip
+
+\def\tableofcontents{%
+ \par\vfill
+ \begin{quote}
+ \begin{center} \Large\bf Contents \end{center}
+ \def\numberline##1{\hbox to 0pt{\hss##1\hskip 1em}}%
+ \let\oldaddvspace\addvspace
+ \def\addvspace##1{%
+ \myskip##1\relax
+ \oldaddvspace{.5\myskip}}
+ \@starttoc{toc}%
+ \end{quote}
+ \thispagestyle{empty}
+ \vfill
+ \clearpage}
+
+
+% PAGE PARAMETERS:
+
+% Paragraphs are marked by large space rather than indentation:
+\parindent 0pt
+\parskip 7pt plus 1pt minus 1pt
+
+\setlength{\topmargin}{0pt}
+\setlength{\headheight}{12pt} % height of running head
+\setlength{\headsep}{30pt} % distance between header and text
+\setlength{\textheight}{8.2in} % height of text on page
+
+% Adjust margins for different paper size:
+\@tempdima=\paperwidth
+\advance\@tempdima-8.5in
+\advance\oddsidemargin .5\@tempdima
+\advance\evensidemargin .5\@tempdima
+\@tempdima=\paperheight
+\advance\@tempdima-11in
+\advance\topmargin .5\@tempdima
+
+% VERBATIM HACKS:
+
+\VerbatimFootnotes
+
+% Short meta (works in verbatim. Can't use < for other purposes.
+\catcode`\<=13 \def<#1>{{\rm\it #1\/}} % <meta> (works in verbatim)
+
+% Short verbatim. " can appear in verbatim environments.
+\def\temp{\Verb"}
+\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\"}
+\catcode`\"=13
+\let"\temp
+
+\def\n#1{{\tt\string#1}}
+
+% Verbatim item:
+\newcommand{\vitem}{\SaveVerb[{\def\bf{}\item[\UseVerb{\MyTemp}]}]{\MyTemp}}
+
+% Verbatim section"
+
+% EXAMPLES:
+% 1. Save example verbatim to \jobname.tmp,
+% 2. Input verbatim with \catcode`\"=14 (" is a comment).
+% 3. Input again with \catcode\`"=9 (" is ignored).
+
+\renewcommand{\EveryVerbatimLine}[2]{}
+
+\renewcommand{\EveryVerbOutLine}[2]{}
+
+\newcommand{\BeginExample}{%
+ \VerbatimEnvironment\begin{VerbatimOut}{\jobname.tmp}}
+
+\newcommand{\EndExample}{%
+ \end{VerbatimOut}%.
+ \renewcommand{\EveryVerbatimLine}{}%
+ \renewcommand{\EveryVerbatimCodes}{\catcode`\"=14}%
+ \LVerbatimInput{\jobname.tmp}%
+ \catcode`\"=9}
+
+\@ifundefined{lightgray}{\@testfalse}%
+ {\@ifundefined{gray}{\@testfalse}{\@testtrue}}
+
+\if@test
+
+\newenvironment{example}{\BeginExample}{\EndExample
+ \begin{center}\leavevmode\input{\jobname.tmp}\end{center}}
+
+\else
+
+\newenvironment{example}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim}
+
+\fi
+
+% END PREAMBLE:
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\begin{quote}
+"colortab.tex/colortab.sty" contains macros that let you use your color
+commands for shading and coloring cells in tables and other alignment
+environments. It is compatible with most \TeX\ macro packages.
+\end{quote}
+
+\tableofcontents
+
+\section{Introduction}
+
+Adding color to tables is fraught with difficulties, but as the examples in
+this file indicate, it can be done. In any case, consider this an advanced
+topic, and be aware that the commands in "colortab.tex" are not robust.
+
+This is meant to supplement your own color commands. There are many macro
+files that implement color for the various "dvi" drivers that can support
+color. E.g., the PSTricks package works with a variety of DVI-to-PS drivers.
+
+For example, suppose you have a macro that defines the color command "\gray".
+"colortab.tex" requires that one of the following produce a gray line:
+\begin{LVerbatim}
+ {\gray \hrule}
+ \gray{\hrule}
+\end{LVerbatim}
+if you want to use this command to color the cells in tables.
+This is probably the case if the one of the following produces gray text:
+\begin{LVerbatim}
+ {\gray I am gray!}
+ \gray{I am gray!}
+\end{LVerbatim}
+
+"colortab.tex" contains macros for \TeX's "\halign" primitive. Incorporating
+color into high-level macros based on the "\halign" primitive requires a
+case-by-case treatment. "colortab.tex" also contains macros for coloring cells
+\LaTeX's various array environments, and for the \LaTeX\ "longtable"
+environment that is defined in the "longtable" (or "longtabl") style option.
+These can serve as examples that can be accommodated to other table macros.
+See the code itself for happy hacking.
+
+\section{\TeX's halign primitive}
+
+To shade cells in an alignment, use
+\begin{LVerbatim}
+ \coloralign
+\end{LVerbatim}
+instead of "\halign". Then, to color the columns in one or more rows, type
+\begin{LVerbatim}
+ \CC
+ <row of colors>\cr
+ <rows to be colored>\cr
+ \ECC
+\end{LVerbatim}
+For example:
+\begin{example}
+ \setbox\strutbox=\hbox{\vrule height11.5pt
+ depth6.5pt width0pt}%
+ \vbox{\offinterlineskip
+ \coloralign{%
+ \vrule\strut\quad\hfil#\hfil\quad
+ &\vrule\quad\hfil#\quad\vrule\cr
+ \noalign{\hrule}%
+ \CC
+ \gray &\cr
+ Tamarind&Chiplote\cr
+ \ECC\noalign{\hrule}%
+ \CC
+ \lightgray &\gray\cr
+ Lulu&Serrano\cr\noalign{\hrule}%
+ Guanabana&Larga\cr
+ \ECC\noalign{\hrule}%
+ }}
+\end{example}
+
+"\CC" and "\ECC" stand for ``ColorCells'' and ``EndColorCells'', respectively.
+You cannot change the name of "\ECC" with "\let" or "\def" (without redefining
+"\CC"), because it is really just a delimiter. This is also true of the first
+"\cr", which marks the end of the row of color commands.
+Remember that only complete rows can go between "\CC" and "\ECC". Where you
+include horizontal lines is generally inconsequential. You can have nested
+"\coloralign" environments, but the nested environment must be enclosed in
+brackets "{}". There is no "\coloralign to" or "\coloralign spread" because
+the space inserted by "\tabskip" won't be shaded.
+
+These macros are not very robust. You can make best use of them by knowing how
+they work. "\coloralign" just saves the preamble, and otherwise is identical
+to "\halign". "\CC" finds the height of the rows that have to be colored, and
+then "\CC" draws a rectangle using \TeX's line-drawing primitives in each
+cell, colored by the color commands included in the first line that follows
+"\CC". E.g.,
+\begin{LVerbatim}
+ \yellow &&\red \cr
+\end{LVerbatim}
+draws a yellow rectangle in column 1, nothing in column 2, and a red rectangle
+in column 3. Then "\CC" goes back up the height of the rectangle, so that
+\TeX's current point is back where it was when "\CC" started. At this point,
+"\CC" has finished its work. When the next rows of the alignment environment
+are processed by "\halign", they are put down on top of the rectangles, and
+hence have colored backgrounds.
+
+"\CC" finds the height of the rows to be colored by putting the rows into an
+"\halign" environment, using the preamble that was saved by "\coloralign", and
+then measuring the height of the resulting box.
+
+\section{\LaTeX\ array environments}
+
+Cells can be colored in a \LaTeX\ array without using a special array
+environment (i.e., there is no \LaTeX\ analog to "\coloralign"). Use "\LCC"
+instead of "\CC", and use "\\" to end the row of color commands instead of
+"\cr". For example:
+\begin{example}
+ \def\arraystretch{1.5}%
+ \begin{tabular}{|l|c|}\hline
+ \LCC
+ \gray & \\
+ Tamarind & Chiplote \\ \hline
+ \ECC
+ \LCC
+ \lightgray & \gray\\
+ Lulu & Serrano\\ \hline
+ Guanabana & Larga\\ \hline
+ \ECC
+ \end{tabular}
+\end{example}
+The same caveats apply as with the "\coloralign" environment.
+
+When \n\LCC\ and \n\ECC\ are used with Frank Mittelbach's "array.sty", nested
+array-type environments and "\multicolumn" commands wipe out information
+needed by \n\ECC\. Here is a workaround: Put "\SP" (``SavePreamble'') at the
+beginning of the array-type environment (right after the column declarations),
+and put "\RP" (``RestorePreamble'') at the end of each line containing a
+"\multicolumn" command or nested array-type environment (after the "\\", and
+before the \n\ECC). For example:
+\begin{LVerbatim}
+ \begin{tabular}{|l|c|}\SP\hline
+ \LCC
+ \gray & \\
+ \multicolumn{2}{c}{Tamarind}\\ \RP \hline
+ \ECC
+ \end{tabular}
+\end{LVerbatim}
+Further nesting (e.g., an array within a "\multicolumn", or a "\multicolumn"
+or array within a nested array) sometimes works and sometimes doesn't. You
+will have to figure that one out for yourself.
+
+
+\section{longtable.sty}
+
+"longtable.sty", by David Carlisle, defines the "longtable" environment, for
+making multipage tables. "\LCC" will not work with "longtable". However,
+"colortab" contains other macros that will work, if you use "longtable.sty" in
+conjunction with Frank Mittelbach's "array.sty". These macros have been tested
+only briefly, with version 3.04 of "longtable.sty" and version 2.1b of
+"array.sty".
+
+Before every column identifier in the environment's argument (e.g., "c", "l",
+"r", "p", "m" or "b"), put
+\begin{description}
+ \vitem"!{\LC}" If none of the below applies;
+ \vitem"!{\LCi}" If the column is preceded by one or more vertical lines;
+ \vitem"!{\LCii}" If the column is followed by two vertical lines;
+ \vitem"!{\LCiii}" If the column is preceded by one or more vertical lines
+and followed by two vertical lines.
+ \vitem"!{\LCz{<len1>}{<len2>}}" If "colortab" should back up by <len1>
+before drawing the background, and should draw the background <len2> shorter
+than the width of the column.
+\end{description}
+Remember that you have to do this for every column, not just the columns that
+you want to color.
+
+Then include
+\begin{LVerbatim}
+ \LColors <color> & <color> & ... & <color>\\
+\end{LVerbatim}
+in the first row of the environment, and later on as well if you wish to
+change the colors. Here also you have to include every column, but you can
+leave an entry blank if you don't want any background color in that column.
+
+The color comes out right, or at all, only after you have run the file enough
+times for "longtable.sty" to set the alignment correctly.
+
+Here is an example. The output will appear in this documentation only if
+"longtable.sty" or "longtabl.sty" is installed on your system.
+\begingroup
+ \makeatletter
+ \catcode`\<=12
+ \@input{longtable.sty}%
+ \@input{longtabl.sty}%
+ \@input{array.sty}%
+ \@testtrue
+ \@ifundefined{c@LT@tables}{\@testfalse}{}%
+ \@ifundefined{d@llarbegin}{\@testfalse}{}%
+ \if@test\else
+ \renewenvironment{example}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim}%
+ \fi
+ \makeatother
+\begin{example}
+ \LARGE
+ \begin{longtable}{|!{\LCiii}l||!{\LCi}c|!{\LCi}c|}\hline
+ \LColors \gray & & \\
+ Tamarind & Chiplote & Galanga\\ \hline
+ \LColors \lightgray & & \gray\\
+ Lulu & & Serrano\\ \hline
+ Guanabana & Larga &\\ \hline
+ \end{longtable}
+\end{example}
+\endgroup
+
+\section{Coloring lines}
+
+Let's begin with the "\halign" environment. Changing the color of lines is
+easy, because if you write, say, "{\gray\hrule}", then the line comes out
+gray. For example:
+\begin{example}
+ % Thicker lines and wider spacing give better view:
+ \setbox\strutbox=\hbox{%
+ \vrule height15.5pt depth8.5pt width0pt}%
+ \def\Hrule{\hrule height 2.5pt}%
+ \def\Vrule{\vrule width 2.5pt}%
+ % Now the table:
+ \vbox{\offinterlineskip
+ \halign{%
+ {\lightgray\Vrule}\strut\quad\hfil#\hfil\quad
+ &{\gray\Vrule}\quad\hfil#\quad\Vrule\cr
+ \noalign{\Hrule}%
+ Tamarind& Chiplote\cr\noalign{{\darkgray\Hrule}}%
+ Lulu& Serrano\cr\noalign{\Hrule}%
+ Guanabana& Larga\cr\noalign{{\lightgray\Hrule}}%
+ }}
+\end{example}
+
+With \LaTeX, you can add an entry like
+\begin{LVerbatim}
+ @{\hspace{\tabcolsep}{\gray\vrule}\hspace{\tabcolsep}}
+\end{LVerbatim}
+to the argument of the alignment environment, instead of "|", if you want to
+color the vertical line that is drawn. If using "array.sty", you can try:
+\begin{LVerbatim}
+ !{{\gray\vrule}}
+\end{LVerbatim}
+
+To color horizontal lines with \LaTeX, don't bother trying
+\begin{LVerbatim}
+ {\gray\hline}
+\end{LVerbatim}
+because it won't work. You write your own version of "\hline" and "\cline", or
+use the non-aligned color commands described in the next section.
+
+\section{Non-aligned color with PSTricks}
+
+Here are a few other commands that can be useful for adding color to tables.
+{\bf They only work with PSTricks, v0.93 or later.} <color> in this case is
+the name of the color, without the backslash. These fudge the color commands
+so that they do not have to be balanced with respect to \TeX\ grouping. You
+can achieve the same thing using "\special{<raw postscript>}" and "\noalign",
+if you know what you are doing. These should work with just about any
+alignment macro, include "\halign" and \LaTeX's "tabular" environment.
+
+\begin{description}
+
+\vitem"\AC{<color>} ... \EAC" \
+
+ These stand for "AlignColor" and "EndAlignColor", respectively. <color> is
+the name of the color, without a backslash, rather than a color command. This
+can be used within a cell, but they do not have to be within the same cell,
+nor do they have to be properly nested with respect to \TeX\ grouping.
+Generally, "\AC{<color>}" switches to <color>, and \n\EAC\ restores the color
+that would be in effect if the first \n\AC\ command were missing.
+
+\vitem"\NAC{<color>} ... \ENAC" \
+
+ These stand for "NoAlignColor" and "EndNoAlignColor", respectively. These
+are like \n\AC\ and \n\EAC, but the color commands are put inside a
+"\noalign". They can only appear at the end of a line, after "\\" or "\cr".
+
+\end{description}
+Actually, these do not even have to be used in pairs.
+
+Here is an example of how "\AC", etc., can be used. to color lines in \LaTeX\
+arrays. The output will appear in this documentation only if PSTricks is
+installed on your system:
+\begingroup
+\ifx\PSTricksLoaded\endinput\else
+ \renewenvironment{example}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim}
+\fi
+\begin{example}
+ \arrayrulewidth 1.5pt
+ \begin{tabular}{|l|c|}\hline
+ Tamarind& Chiplote\\ \NAC{gray}\hline\ENAC
+ Lulu& Serrano\\ \cline{1-1}
+ \NAC{lightgray}\cline{2-2}\ENAC
+ Guanabana\AC{lightgray} & \EAC Larga\\ \hline
+ \end{tabular}
+\end{example}
+\endgroup
+
+\end{document}
+%% END colortab.doc
diff --git a/macros/generic/commado/README b/macros/generic/commado/README
new file mode 100644
index 0000000000..75ceed7fbf
--- /dev/null
+++ b/macros/generic/commado/README
@@ -0,0 +1,67 @@
+
+ README for the `commado' bundle
+
+ Iterate on comma-separated and filename lists
+
+ (C) Uwe Lueck 2012/11/29
+
+
+`commado.sty' provides
+
+ \DoWithCSL{<cmd>}{<list>}
+
+to apply an existing one-parameter macro <cmd> to each item
+in a list <list> in which items are separated by commas.
+
+`filesdo.sty' provides
+
+ \DoWithBasesExts{<cmd>}{<bases>}{<exts>}
+
+to run <cmd>{<base>.<ext>} for some (at most) one-parameter
+macro <cmd>, each base filename <base> in the comma-separated
+list <bases> and each extension <ext> in the comma-separated
+list <exts>.
+
+As opposed to LaTeX’s internal \@for, no assignments are
+involved (unless <cmd> uses assignments, "expandability" in
+"TeX’s gullet").
+
+Both packages are "generic," i.e., should work with Plain
+TeX, LaTeX or even other formats, relying on the `plainpkg'
+package for some minimal LaTeX-like behaviour.
+
+RELATED PACKAGES: `loops' and others mentioned in the
+ `dowith' package documentation.
+
+KEYWORDS: macro programming, programming structures, loops,
+ lists
+
+REQUIRED PACKAGES: `plainpkg', `stacklet'
+
+LICENSE: The package files `commado.sty', `filesdo.sty' and
+ the files `commado.pdf' and `commado.tex' documenting
+ both package files can be redistributed and/or modified
+ under the terms of the LaTeX Project Public License;
+ either version 1.3c of the License, or any later version,
+ see
+
+ http://www.latex-project.org/lppl.txt
+
+ There is NO WARRANTY, indeed this still is somewhat
+ experimental.
+
+ The `commado' package is author-maintained in the sense
+ of the license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/latex/contrib/commado/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/latex/contrib/commado.tds.zip
+
+Please report bugs, problems, suggestions, and bad English via
+
+ http://www.contact-ednotes.sty.de.vu
+
diff --git a/macros/generic/commado/commado.sty b/macros/generic/commado/commado.sty
new file mode 100644
index 0000000000..25f5b687ad
--- /dev/null
+++ b/macros/generic/commado/commado.sty
@@ -0,0 +1,90 @@
+ \input plainpkg
+% \NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{commado}[2012/11/30 v0.11 iterate on CSL (UL)]
+%%
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+\PushCatMakeLetterAt
+%% == Auxiliaries ==
+\ifltx \else %% unless provided by LaTeX already
+ \long\def\@firstoftwo#1#2{#1}
+ \long\def\@secondoftwo#1#2{#1}
+\fi
+%% ... 4 less than
+% \long\def\@firstsecondofthree#1#2#3{#1#2}
+% \long\def\@firstthirdofthree#1#2#3{#1#3}
+%%
+%% == Processing a Comma-Separated List ==
+%% Most of the following code aims at removing the final
+%% space in the comma-separated list.
+%% % `\<cmd>' usually may either refer to a string starting
+%% % with a backslash or to the \emph{token} with the name
+%% % \qtdcode{<cmd>}
+%% % (cf. "\TeX's Tokens" in the \ctanpkgref{dowith} documentation).
+%% A variant of parsing as in 'fifinddo.sty'
+%% (\ctanpkgdref{nicetext} bundle) and
+%% \ctanpkgstyref{bitelist}\urlfoot{CtanPkgRef}{bitelist}
+%% package is employed %% ^ 2012/11/30
+%% (while I am about to use different approaches there,
+%% one may see here how, inspired by `\@ifblank' in
+%% \ctanpkgstyref{url}).\urlfoot{CtanPkgRef}{url}
+%% The purpose of the following `\edef' of
+%% |\DoWithCSL{<cmd>}{<list>}|
+%% is to get a space token after `\@firstoftwo' in the parameter text.
+%% \pagebreak[3]
+\let\CD@final@comma\relax
+\edef\DoWithCSL#1#2{%
+ \CD@final@comma#2\CD@final@comma %% 2nd \ 2012/11/30
+ \noexpand\@firstoftwo
+% \noexpand\@firstsecondofthree
+ \space\CD@final@comma
+ \noexpand\@secondoftwo
+% \noexpand\@firstthirdofthree
+ \noexpand\end{#1}{#2}}
+\def\CD@final@comma#1 \CD@final@comma#2#3\end#4#5{%
+% \expandafter\@secondfirstoftwo\expandafter{%
+% #2{#1}#5}{\do@with@csl#4}%
+ #2{\do@with@csl{#4}#1}{\do@with@csl{#4}#5}%
+%% ... 15 vs.\ 13:
+% #2{\do@with@csl{#4}}{#1}{#5}%
+ ,\StopDoing,}
+\catcode`\Q=3 %% not in #1
+\def\do@with@csl#1#2#3,{%
+%% #1 is <cmd>. #2 takes the first token from (remaining) <list>
+%% that is not a space token. Trying to enter a blank
+%% list item would result in using the
+%% \emph{next comma as a list item!}---The following
+%% is an alternative to the analogue in 'domore.sty':
+ \unless@stop@doing#2#3\StopDoing
+ #1{#2#3}\do@with@csl{#1}\StopDoing Q}
+\def\unless@stop@doing#1\StopDoing#2\StopDoing#3Q{#2}
+%% ... somewhat replaces `\@secondfirstoftwo'---but will the
+%% latter be dropped? `\unless@stop@doing' is specific
+%% for `\StopDoing'---but can be used with `\DoWith' too.
+%% TODO %% 2012/11/24
+\catcode`\Q=11
+%%
+%% == Leaving the Package File ==
+\PopLetterCatAt
+\endinput
+%%
+%% == \acro{VERSION HISTORY} ==
+
+v0.1 2012/11/24f. started
+ 2012/11/26 code ready
+ 2012/11/27 documented
+v0.11 2012/11/30 code typo corrected, removing final space,
+ doc. \urlfoot's
diff --git a/macros/generic/commado/doc/SrcFILEs.txt b/macros/generic/commado/doc/SrcFILEs.txt
new file mode 100644
index 0000000000..4236cde316
--- /dev/null
+++ b/macros/generic/commado/doc/SrcFILEs.txt
@@ -0,0 +1,19 @@
+
+ *File List*
+ commado.RLS 2015/11/16 r0.11a doc. `AllOf' in dowith
+ commado.sty 2012/11/30 v0.11 iterate on CSL (UL)
+ filesdo.sty 2012/11/27 v0.1 iterate on files (UL)
+ commado.tex 2015/11/16 -- documenting commado.sty
+srcfiles.tex 2015/11/16 -- file infos -> SrcFILEs.txt
+ ---USED.--- -- -- -- -- ----
+fifinddo.sty 2012/11/17 v0.61 filtering TeX(t) files by TeX (UL)
+ makedoc.sty 2012/08/28 v0.52 TeX input from *.sty (UL)
+niceverb.sty 2015/11/09 v0.61 minimize doc markup (UL)
+texlinks.sty 2015/07/20 v0.83 TeX-related links (UL)
+ makedoc.cfg 2013/03/25 -- documentation settings
+mdoccorr.cfg 2012/11/13 -- `makedoc' local typographical corrections
+ ***********
+
+ List made at 2015/11/16, 06:27
+ from script file srcfiles.tex
+
diff --git a/macros/generic/commado/doc/commado.RLS b/macros/generic/commado/doc/commado.RLS
new file mode 100644
index 0000000000..4134b7c277
--- /dev/null
+++ b/macros/generic/commado/doc/commado.RLS
@@ -0,0 +1,4 @@
+\ProvidesFile{commado.RLS} %%%% RELEASE INFO %%%%
+ [2015/11/16 r0.11a doc. `AllOf' in dowith]
+ [2012/11/30 v0.11 fix final trimming ]
+ [2012/11/27 v0.1 initial ]
diff --git a/macros/generic/commado/doc/commado.pdf b/macros/generic/commado/doc/commado.pdf
new file mode 100644
index 0000000000..231917bc79
--- /dev/null
+++ b/macros/generic/commado/doc/commado.pdf
Binary files differ
diff --git a/macros/generic/commado/docsrc/commado.tex b/macros/generic/commado/docsrc/commado.tex
new file mode 100644
index 0000000000..e7ba43d9d8
--- /dev/null
+++ b/macros/generic/commado/docsrc/commado.tex
@@ -0,0 +1,205 @@
+\ProvidesFile{commado.tex}[2015/11/16 documenting commado.sty]
+\title{\pkg{\huge commado.sty} and \pkg{\huge filesdo.sty}\\---\\%
+ Immediately Extend a One-Argument Macro\\
+ to Comma-Separated Lists and Combinations\\
+ of Filename Bases and Extensions\thanks{This document describes
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \textsf{\jobname.sty} as of \UseDateOf{\jobname.sty}
+ and version \textcolor{blue}{\UseVersionOf{filesdo.sty}}
+ as of \UseDateOf{filesdo.sty} of \pkg{filesdo.sty}..}}
+% \RequirePackage[wrap]{nicefilelist} \listfiles
+\RequirePackage{makedoc} \ProcessLineMessage{}
+\renewcommand*{\mdSectionLevelOne}{\string\subsection}
+\MakeJobDoc{19}{\SectionLevelOneParseInput} %% 2012/11/26
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+% \documentclass{article} %% TODO paper dimensions!?
+\usepackage{catchdq} %% TODO earlier than `langcode'
+\input{makedoc.cfg} %% shared formatting settings
+\ifpdf\else \errhelp{hyperref v6.83m option [draft] bad with \begin{equation}}
+ \errmessage{run this with pdflatex only}\fi
+\ReadPackageInfos{commado,filesdo}
+% \usepackage{commado}
+\MDkeywords{macro programming, programming structures, loops, lists}
+\sloppy \catchdqs
+\begin{document}
+\maketitle
+\begin{MDabstract}
+'commado.sty' provides \[`\DoWithCSL{<cmd>}{<list>}'\]
+in order to apply an existing one-parameter macro <cmd>
+to each item in a list <list> in which items are
+\wikienref{comma-separated list}{separated by commas.}
+'filesdo.sty' provides \[`\DoWithBasesExts{<cmd>}{<bases>}{<exts>}'\]
+in order to run `<cmd>{<base>.<ext>}' for some (at most)
+one-parameter macro <cmd>, each base filename <base> in the
+comma-separated list <bases> and each filename extension <ext>
+in the comma-separated list <exts>.
+As opposed to \LaTeX's internal `\@for', no assignments are involved
+(unless <cmd> uses assignments---"expandability" in "\TeX's gullet").
+
+Both packages are "generic," i.e., should work with Plain \TeX,
+\LaTeX\ or even other formats, relying on the \ctanpkgref{plainpkg}
+package for some minimal \LaTeX-like behaviour.
+
+\MDaddtoabstract{Related packages} \ctanpkgref{loops} and others
+mentioned in the \ctanpkgref{dowith} package documentation.
+\end{MDabstract}
+\newpage
+\tableofcontents
+% \newpage
+\section{Installing and Calling}
+The files 'commado.sty' and 'filesdo.sty'
+are provided ready, installation just requires
+putting them somewhere where \TeX\ finds them
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf}
+However, installation of the package \ctanpkgdref{plainpkg}
+and the package 'stacklet.sty' (\ctanpkgdref{catcodes} bundle)
+is required additionally.
+
+As to calling (loading): 'commado.sty' and 'filesdo.sty' are
+"\pkg{plainpkg} packages" in the sense of the 'plainpkg'
+documentation that you may consult for details.
+So roughly,
+\begin{itemize}
+ \item load it by \ |\usepackage{<pkg>}| \ if you can,
+ \item otherwise by \ |\RequirePackage{<pkg>}| \\
+ (perhaps from within another "\pkg{plainpkg} package"),
+ \item or by \ |\input <pkg>.sty|
+ \item or even by \ |\input{<pkg>.sty}|~\dots
+\end{itemize}
+---where <pkg> is \qtdcode{commado} or \qtdcode{filesdo}.
+
+% \pagebreak
+\section{Syntax and Relation to the 'dowith' Package}
+In <list> with |\DoWithCSL{<cmd>}{<list>}|, blank spaces %% boxed 2015/11/15
+before entries or after commas as well as preceding the
+closing brace are ignored. So
+\[`\DoWithCSL{<cmd>}{ cfg, sty, tex }'\]
+works like
+\[`\DoWithAllOf{<cmd>}{{cfg}{sty}{tex}}'\] %% added `AllOf' 2015/11/15
+from \ctanpkgstyref{dowith}.\urlfoot{CtanPkgRef}{dowith} %% foot 2012/11/30
+With `\DoWithCSL'
+(at present), %% 2012/11/27
+an item cannot be empty or consist of blank spaces only.
+Empty or blank items can be handled by `\DoWith'\-`AllOf'.
+%% <- was not wrong without `AllOf', however ... 2015/11/15
+%% ... hyphenation is a great compromise! without hyphen?
+\par %% 2015/11/15
+\begingroup \footnotesize
+As to \strong{relevance}, the previous remark addresses those
+who want to understand what I am doing, such as me.
+The two commands provide a rather obvious ``link'' between the 'commado'
+and the 'dowith' bundle. But neither of them is a command that
+``you shouldn't miss.'' 'commado.sty' is mainly a programming tool
+(and I isolate it as an object of study).
+% similar to a chess diagram to demonstrate how to trap a lonely king
+% with king and rook only, the actual task being expandability,
+% in my case to generate \acro{HTML} with \TeX's `\write' primitive).
+ \par\strong{Choosing between 'dowith' and 'commado'.}\quad What I
+\strong{really use} in the case of comma-separated lists is
+\strong{'filesdo.sty'} as described in the next section. %% TODO really?
+It is great to keep certain files or file sections small (\strong{readability}),
+actually in describing package bundles, on \acro{CTAN} as well as
+with a complex book at which I am working. However,
+the comma feature is a little more complex than the 'dowith' way,
+and I like to avoid unnecessarily complex things.
+The real advantage of 'filesdo', as I feel it,
+is the readability of the code with combinations of file \emph{basenames}
+and \emph{extensions}, similar to \emph{brace expansion} in the
+\Wikidisambref{Bash}{Unix shell} shell.
+The braces make obvious which are the basenames and which are the
+extensions, and the commas structure each of these two lists.
+
+In applications of \strong{'dowith'}, saving \strong{tokens} and
+\strong{expansion} steps is more important to me (a kind of sports).
+\emph{Tokens} actually are saved with 'dowith' when <list> consists of
+single tokens rather than ``\strong{brace groups},''
+and the former is the application of 'dowith' in my \ctanpkgdref{langcode} package
+(in the 'dowith' discussion, I compare this with the \ctanpkgdref{xspace} package).
+On the other hand, a <list> of brace groups even needs more tokens than a comma-separated list.
+% (Due to \TeX's tokenization, readability and parsimony are opposite and
+% incompatible goals.)
+The number of tokens or expansion steps is relevant when a list is stored
+as a macro or in a token register. It is less relevant when a list
+is processed once only at the moment the input file is read
+and then is not stored any longer.
+
+There is a situation where I prefer lists of \emph{brace groups}
+to comma-separated lists although the former need more tokens
+and their readablility is worse: I use something like
+\begin{equation}
+ `\autrefs{{apples}{oranges}{pears}}'
+\end{equation}
+to generate a list of internal links in a \acro{HTML} file.
+`\autrefs' this way rests on `\DoSeparateWith' from 'domore.sty'.
+`\DoSeparateWith' is based on `\DoWith'. Sometimes I use the former
+one directly as an \emph{author}. The alternative
+\begin{equation}
+ `\autrefs{apples,oranges,pears}'
+\end{equation}
+would need less tokens (which is absolutely irrelevant in this case
+because the line is in \TeX's memory for a moment only)
+and may be easier to read. However, often I want to change the order
+of the items. When I try this by cut\&paste in a comma-separated list,
+I always wonder whether I should cut/copy the right-hand comma
+of a list item or the left-hand comma; and at the next moment,
+I have forgotten whether I cut the right-hand comma
+or the other one. With the 'dowith' approach, I just cut\&paste
+a brace group. A function key opens an empty brace group in my
+favorite editor.
+
+\par \endgroup
+
+\section{Example for 'filesdo.sty'}
+In the file `srcfiles.tex' for the \ctanpkgdref{nicetext} bundle,
+there is a line
+\begin{quote}
+`\DoWithBasesExts\ReadFileInfos{fifinddo,niceverb}{sty,tex}'\kern-10pt
+\end{quote}
+This works like
+\begin{quote}
+`\ReadFileInfos{fifinddo.sty}'\\
+`\ReadFileInfos{niceverb.sty}'\\
+`\ReadFileInfos{fifinddo.tex}'\\
+`\ReadFileInfos{niceverb.tex}'
+\end{quote}
+or actually
+(a special feature of \ctanpkgref{readprov}'s\urlfoot{CtanPkgRef}{readprov}
+ %% <- foot 2012/11/30
+ `\ReadFileInfos' is that its argument may be
+ a comma-separated list already)
+\begin{quote}
+`\ReadFileInfos{fifinddo.sty,niceverb.sty,'\\
+\null\texttt{ ~ ~ ~ ~ ~ ~ ~ }`fifinddo.tex,niceverb.tex}'
+\end{quote}
+I ponder providing a shorthand `\ReadBaseExtInfos' for
+\begin{quote}
+`\DoWithBasesExts\ReadFileInfos'
+\end{quote}
+and reimplementing `\ReadFileInfos' using `\DoWithCLS' in 'myfilist.sty'
+(2012-11-27).
+
+\pagebreak
+\section{The File 'commado.sty'}
+\subsection{Package File Header (Legalese and 'plainpkg')}
+\input{commado.doc}
+
+\newpage
+
+\section{The File 'filesdo.sty'}
+\subsection{Package File Header (Legalese and 'plainpkg')}
+\ResetCodeLineNumbers
+\renewcommand*{\mdJobName}{filesdo}
+\MakeInputJobDoc{19}{\SectionLevelOneParseInput}
+\end{document}
+
+VERSION HISTORY
+
+2012/11/24 for v0.1 very first
+2012/11/30 for v0.11 \ctanpkgdref moves to `makedoc.cfg',
+ 2 more link footnotes
+2015/11/15f. `AllOf' was missing in the description of
+ the relation to the `dowith' bundle --
+ added an "essay"
+2015/11/15 error message to deal with hyperref's
+ draft/equation problem as in dowith.tex
diff --git a/macros/generic/commado/docsrc/srcfiles.tex b/macros/generic/commado/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..1bffd26663
--- /dev/null
+++ b/macros/generic/commado/docsrc/srcfiles.tex
@@ -0,0 +1,19 @@
+\ProvidesFile{srcfiles.tex}[2015/11/16 file infos -> SrcFILEs.txt]
+\RequirePackage[r,wrap]{nicefilelist}
+\RequirePackage{stacklet,filedate}
+\MaxBaseEmptyList*
+%% release:
+\ReadFileInfos{commado.RLS} %% tested below
+\ModDates \FileDateAutoChecks
+%% packages:
+\ReadPackageInfos{commado,filesdo}
+%% documentation:
+\ReadFileInfos{commado,srcfiles}
+%% documentation settings and auxiliaries:
+\FileListRemark[ ----]{---USED.---}
+\ReadPackageInfos{fifinddo,makedoc,niceverb,texlinks}
+\ReadFileInfos{makedoc.cfg,mdoccorr.cfg}
+\DatesDiffWarnings
+\CheckDateOfToday{commado.RLS}
+\ListInfos[SrcFILEs.txt]
+
diff --git a/macros/generic/commado/filesdo.sty b/macros/generic/commado/filesdo.sty
new file mode 100644
index 0000000000..728334419a
--- /dev/null
+++ b/macros/generic/commado/filesdo.sty
@@ -0,0 +1,55 @@
+ \input plainpkg
+% \NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{filesdo}[2012/11/27 v0.1 iterate on files (UL)]
+%%
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Documentation ==
+%% For documentation in \acro{PDF} format, see `commado.pdf'.
+%%
+%% == 'commado' Required ==
+%% 'filesdo' is based on 'commado':
+\RequirePackage{commado}
+%%
+%% == Category Code ==
+%% Use `@' as part of ``command names'' ('plainpkg', 'stacklet'):
+\PushCatMakeLetterAt
+%%
+%% == User Commands ==
+%% |\DoWithExtBases{<cmd>}{<ext>}{<basenames>}| \
+%% runs `<cmd>{<base>.<ext>}' for all items <base>
+%% in <basenames> and a single filename extension <ext>:
+\def\DoWithExtBases#1#2{\DoWithCSL{\do@with@ext@base{#1}{#2}}}
+\def\do@with@ext@base#1#2#3{#1{#3.#2}}
+%% |\DoWithBasesExts{<cmd>}{<basenames>}{<exts>}| \
+%% runs `<cmd>{<base>.<ext>}' for all items <base>
+%% in <basenames> and all items <ext> in <exts>:
+\def\DoWithBasesExts#1#2{\DoWithCSL{\distrib@basenames@do{#1}{#2}}}
+%% `\distrib@basenames@do' exchanges arguments in order to reduce
+%% the task to `\DoWithCSL' and `\DoWithCSL':
+\def\distrib@basenames@do#1#2#3{%
+ \DoWithCSL{\DoWithExtBases{#1}{#3}}{#2}}
+%%
+%% == Leaving the Package File ==
+\PopLetterCatAt
+\endinput
+%%
+%% == \acro{VERSION HISTORY} ==
+
+v0.1 2012/11/24f. started
+ 2012/11/26 code ready
+ 2012/11/27 documented,
+ \DoWithBaseExts -> \DoWithBasesExts
diff --git a/macros/generic/cptex/btex8fmt/fmt.bat b/macros/generic/cptex/btex8fmt/fmt.bat
new file mode 100644
index 0000000000..144775d59a
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/fmt.bat
@@ -0,0 +1,21 @@
+echo off
+rem fmt.bat
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+btex -i -8 -o -r plain \dump
+if errorlevel 1 goto error
+btex -i -8 -o -r lplain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running fmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/fmt.cmd b/macros/generic/cptex/btex8fmt/fmt.cmd
new file mode 100644
index 0000000000..579e898086
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/fmt.cmd
@@ -0,0 +1,21 @@
+echo off
+rem fmt.cmd
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+btexp -i -8 -o -r plain \dump
+if errorlevel 1 goto error
+btexp -i -8 -o -r lplain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running fmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/gfmt.bat b/macros/generic/cptex/btex8fmt/gfmt.bat
new file mode 100644
index 0000000000..a12ae12926
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/gfmt.bat
@@ -0,0 +1,29 @@
+echo off
+rem gfmt.bat
+if exist hyphen.tex goto ex
+if exist plaing.tex goto ex
+if exist lplaing.tex goto ex
+copy \emtex\texinput\plain.tex plaing.tex
+copy \emtex\texinput\ghyphen.max hyphen.tex
+btex -i -8 -o -r -mt12000 \language1\input plaing \dump
+if errorlevel 1 goto error
+copy \emtex\texinput\lplain.tex lplaing.tex
+btex -i -8 -o -r -mt12000 \language1\input lplaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running fmt:
+if exist hyphen.tex echo hyphen.tex
+if exist plaing.tex echo plaing.tex
+if exist lplaing.tex echo lplaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist plaing.tex del plaing.tex
+if exist lplaing.tex del lplaing.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/gfmt.cmd b/macros/generic/cptex/btex8fmt/gfmt.cmd
new file mode 100644
index 0000000000..b210fe002b
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/gfmt.cmd
@@ -0,0 +1,29 @@
+echo off
+rem gfmt.cmd
+if exist hyphen.tex goto ex
+if exist plaing.tex goto ex
+if exist lplaing.tex goto ex
+copy \emtex\texinput\plain.tex plaing.tex
+copy \emtex\texinput\ghyphen.max hyphen.tex
+btexp -i -8 -o -r -mt12000 \language1\input plaing \dump
+if errorlevel 1 goto error
+copy \emtex\texinput\lplain.tex lplaing.tex
+btexp -i -8 -o -r -mt12000 \language1\input lplaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running fmt:
+if exist hyphen.tex echo hyphen.tex
+if exist plaing.tex echo plaing.tex
+if exist lplaing.tex echo lplaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist plaing.tex del plaing.tex
+if exist lplaing.tex del lplaing.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/gslifmt.bat b/macros/generic/cptex/btex8fmt/gslifmt.bat
new file mode 100644
index 0000000000..1b8abcfe42
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/gslifmt.bat
@@ -0,0 +1,23 @@
+echo off
+rem gslifmt.bat
+if exist hyphen.tex goto ex
+if exist splaing.tex goto ex
+copy \emtex\texinput\ghyphen.min hyphen.tex
+copy \emtex\texinput\splain.tex splaing.tex
+btex -i -8 -o -r -mt12000 \language1\input splaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running gslifmt:
+if exist hyphen.tex echo hyphen.tex
+if exist splaing.tex echo splaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist splaing.tex del splaing.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/gslifmt.cmd b/macros/generic/cptex/btex8fmt/gslifmt.cmd
new file mode 100644
index 0000000000..3a3700480d
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/gslifmt.cmd
@@ -0,0 +1,23 @@
+echo off
+rem gslifmt.cmd
+if exist hyphen.tex goto ex
+if exist splaing.tex goto ex
+copy \emtex\texinput\ghyphen.min hyphen.tex
+copy \emtex\texinput\splain.tex splaing.tex
+btexp -i -8 -o -r -mt12000 \language1\input splaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running gslifmt:
+if exist hyphen.tex echo hyphen.tex
+if exist splaing.tex echo splaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist splaing.tex del splaing.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/slifmt.bat b/macros/generic/cptex/btex8fmt/slifmt.bat
new file mode 100644
index 0000000000..2d326c4f99
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/slifmt.bat
@@ -0,0 +1,19 @@
+echo off
+rem slifmt.bat
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+btex -i -8 -o -r splain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running slifmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/btex8fmt/slifmt.cmd b/macros/generic/cptex/btex8fmt/slifmt.cmd
new file mode 100644
index 0000000000..b8f14b54bc
--- /dev/null
+++ b/macros/generic/cptex/btex8fmt/slifmt.cmd
@@ -0,0 +1,19 @@
+echo off
+rem slifmt.cmd
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+btexp -i -8 -o -r splain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running slifmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/cp.sty b/macros/generic/cptex/cp.sty
new file mode 100644
index 0000000000..65795a0b96
--- /dev/null
+++ b/macros/generic/cptex/cp.sty
@@ -0,0 +1,598 @@
+%
+% TeX-Definitionen fr die Verwendung von Code Pages
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+% This package contains the following files:
+% cp.sty, cp437.sty, cp850.sty, cp8859.sty, cp8859w.sty and cpps.sty.
+%
+% If you like this LaTeX-Styles, please send me a fee about $25 or more for
+% registration, so that I can make them better and create more TeX-macros.
+% If you send $50 or more you will receive additional macros for a fine
+% `\slashfrac' and for using PostScript fonts and colors (needed by `cpps'!).
+% Please state the version of the software that you currently have.
+%
+% Send check or money order to: Martin Kr"amer
+% Adolf-Kolping-Str. 4
+% D-49179 Ostercappeln
+% (Germany)
+%
+% E-mail address: kraemer@mathematik.Uni-Osnabrueck.DE
+%
+% P.S.: If you have some nice pictures from Marina Sirtis
+% (Counselor Deanna Troi in STTNG), please mail me.
+%
+% Changes between Version 1.1 and 1.0:
+% - `german.sty' will be no longer loaded automatically,
+% if used it must be loaded before any `cpnnn' style option!
+% - restore previous catcode of `@' after `\input' from `\selectcodepage'
+%
+\typeout{Document Style Option `cp' Version 1.1 <1 Mar 1994>.}
+%
+%
+\@ifundefined{l@german}{\mathchardef\l@german=256 }{}
+
+\@ifundefined{slashfrac}{\def\slashfrac#1#2{\frac{#1}{#2}}}{}
+
+
+
+%
+% Einstellen einer Codepage
+% \selectcodepage[OPT1,OPT2,...]{CODEPAGE}
+%
+\def\selectcodepage{\@ifnextchar[{\@selectcpoparg}{\@selectcodepage}}
+\def\@selectcpoparg[#1]#2{\@selectcodepage{#2}\@for\@cparg:=#1\do
+ {\@ifundefined{cp\@cparg}{\input cp\@cparg\relax}{\@nameuse{cp\@cparg}}}}
+\def\@selectcodepage#1{\let\cporiginal\relax \let\cpgerman\relax
+ \@ifundefined{cp#1}%
+ {\smakeatletter\input cp#1.sty\relax\restoreatcode}{\@nameuse{cp#1}}%
+ \ifnum\language=\l@german \cpgerman\fi}
+% save current catcode of `@' and make it to work as a letter
+\def\smakeatletter{\chardef\atcode=\catcode`\@\makeatletter}
+% restore previous catcode of `@'
+\def\restoreatcode{\catcode`\@=\atcode}
+% Automatische Aktivierung einer landesspezifischen Codepage-Option
+% bei Verwendung von `\selectlanguage'
+\let\@cpextrasgerman=\extrasgerman
+\def\extrasgerman{\@cpextrasgerman\cpgerman}
+\let\@cpnoextrasgerman=\noextrasgerman
+\def\noextrasgerman{\@cpnoextrasgerman\cporiginal}
+
+
+
+%
+% Befehle zum Aendern der Kategoriecodes
+%
+\def\makeignore{\@makecharlist{9}}
+\def\makespace{\@makecharlist{10}}
+\def\makeletter{\@makecharlist{11}}
+\def\makeother{\@makecharlist{12}}
+\def\makeactive{\@makecharlist{13}}
+\def\makeinvalid{\@makecharlist{15}}
+%\def\makenotdef{\def\make{\notdef}\@makecharlist{16}} % first attempt
+\def\@makecharlist#1#2{\def\@catcode{#1}\@for\@tempa:=#2\do
+ {\expandafter\@makecharrange\@tempa-\@nil}}
+\def\@makecharrange#1-{%
+ \@ifnextchar\@nil{\@makecharsubrange#1-#1-}{\@makecharsubrange#1-}}
+\def\@makecharsubrange#1-#2-\@nil{\@tempcnta=#1\relax \advance\@tempcnta by-1
+ \@whilenum\@tempcnta<#2\do
+ {\advance\@tempcnta by1
+ \ifnum\@catcode<16 \catcode\@tempcnta=\@catcode\relax
+ \else\catcode\@tempcnta=\active \xxxx\fi}}
+%
+\def\activatecontrolchars{\makeactive{0-8,10-11,14-31,127}}
+\def\activateuppercharset{\makeactive{128-255}}
+\def\activatefullcharset{\activatecontrolchars\activateuppercharset}
+
+%
+% Befehle zum Definieren einer neuen Codepage
+%
+\long\def\newcodepage#1#2{\expandafter\@ifdefinable\csname cp#1\endcsname
+ {\expandafter\gdef\csname cp#1\endcsname{#2}}}
+\long\def\renewcodepage#1#2{%
+ \@ifundefined{cp#1}{\@latexerr{Code page #1 undefined}\@ehc}{}%
+ \expandafter\gdef\csname cp#1\endcsname{#2}}
+
+%
+% Befehle zum Definieren der einzelnen Zeichen und Zeichen-Makros
+% \mapchar{CHAR}{DEFINITION}
+% \mapname{\NAME}{DEFINITION}
+%
+\def\mapchar#1#2{\@pmdef#1{}{}{#2\@empty}\@mapchar{#1}}
+\def\mapname#1#2{\@ifcsname#1{\@pmdef#1\wmspace{}{#2\ignoreempty}}%
+ {\@pmdef#1{}{}{#2\@empty}}\@mapchar{#1}}
+\def\@mapchar#1{\def\@tempa{#1}%
+ \ifcat\noexpand#1\relax \@tempcnta=256
+ \else\@tempcnta=`#1\relax\@otherchar\fi}
+% Zeichen bzw. Code fuer `\lowercase'-Version
+\def\lcchar#1{\ifnum\@tempcnta=256 \@lctext{#1}\else\@lcchar{#1}\fi}
+\def\lctext#1{\ifnum\@tempcnta<256 \@lcchar{}\fi\@lctext{#1}}
+\def\@lcchar#1{\uccode\@tempcnta=\@tempcnta
+ \lccode\@tempcnta=\ifx\@empty#1\@empty 0\else`#1\fi\relax
+ \sfcode\@tempcnta=999\relax}
+\def\@lctext#1{\let\@tempb=\pmodechoice
+ \def\pmodechoice##1##2{\expandafter\def\@tempa{\lcpmodechoice{#1}{##1}{##2}}}%
+ \@tempa
+ \let\pmodechoice=\@tempb}
+% Zeichen bzw. Code fuer `\uppercase'-Version
+\def\ucchar#1{\ifnum\@tempcnta=256 \@uctext{#1}\else\@ucchar{#1}\fi}
+\def\uctext#1{\ifnum\@tempcnta<256 \@ucchar{}\fi\@uctext{#1}}
+\def\@ucchar#1{\uccode\@tempcnta=\ifx\@empty#1\@empty 0\else`#1\fi\relax
+ \lccode\@tempcnta=\@tempcnta \sfcode\@tempcnta=1000\relax}
+\def\@uctext#1{\let\@tempb=\pmodechoice
+ \def\pmodechoice##1##2{\expandafter\def\@tempa{\ucpmodechoice{#1}{##1}{##2}}}%
+ \@tempa
+ \let\pmodechoice=\@tempb}
+%
+\def\@otherchar{\uccode\@tempcnta=0 \lccode\@tempcnta=0
+ \sfcode\@tempcnta=1000\relax}
+
+%
+% Zukuenftige Erweiterungen
+% (`\mathcode', `\delcode', `\chardef', `\mathchardef')
+%
+%\def\mapmathchar#1#2{\mathcode\@tempcnta="8000
+% \edef\@tempa{\the\catcode`#1}\catcode`#1=\active
+% \def#1{#2}\catcode`#1=\@tempa\relax}
+%\def\mcode#1{\mathcode\@tempcnta=#1\relax}
+%\def\dcode#1{\delcode\@tempcnta=#1\relax}
+%\def\@nomathchar{\mathcode\@tempcnta=\@tempcnta\relax
+% \advance\mathcode\@tempcnta by"7100 \delcode\@tempcnta=-1\relax}
+
+
+
+%
+% Kanten des Boxregisters 0 zeichnen
+% \@blankboxtrue: ohne Inhalt
+% \makeblankbox{OUTSIDELINEWIDTH}{INSIDELINEWIDTH}
+%
+\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
+ \kern-#1% overlap the rules at the corners
+ \hbox to\wd0{\hidevrule{#1}{#2}%
+ \raise\ht0\vbox to#1{}% set the vrule height
+ \lower\dp0\vtop{\kern#1}% set the vrule depth
+ \if@blankbox\hfil\else\copy0\fi\hidevrule{#2}{#1}}%
+ \kern-#1\hidehrule{#2}{#1}}}}
+\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2\kern-#2}
+\def\hidevrule#1#2{\kern-#1%
+ {\@tempdima=#1\advance\@tempdima by#2\vrule width\@tempdima}\kern-#2}
+%
+\newif\if@blankbox
+
+%
+% Miscellaneous `choice'-commands ...
+%
+% ... for math modes
+\def\mmodechoice#1#2{\@empty\ifmmode #1\else#2\fi}
+\def\mfamchoice#1#2#3{\@empty\ifmmode \ifnum\fam=-1 #1\else#2\fi\else#3\fi}
+% ... for protect modes
+\def\pmodechoice#1#2{\@empty
+ \ifx\protect\relax \def\@tempa{#2}\expandafter\@tempa\else\xprotect{#1}\fi}
+\def\xpmodechoice#1#2{\@empty
+ \ifx\protect\relax
+ \def\@tempa{\csname pm@\string#2\endcsname}\expandafter\@tempa
+ \else\xprotect{#1}\fi}
+\def\xprotect#1{%
+ \ifx\protect\@tocprotect \string\string\string#1\else\protect#1\fi}
+\def\@tocprotect#1{\string\string\string#1\string\space\space}
+% `\pmdef' works like `\def', but lets the defined macro protect to itself
+\def\pmdef#1#2#{\@ifcsname#1{\@pmdef#1\wmspace}{\@pmdef#1{}}{#2}}
+\def\@pmdef#1#2#3#4{\def\@tempa#3{}%
+ \ifx\@tempa\@empty \def#1{\pmodechoice{#1#2}{#4}}%
+ \else\expandafter\def\csname pm@\string#1\endcsname#3{#4}%
+ \def#1{\xpmodechoice{#1#2}{#1}}\fi}
+% `\@ifcsname#1{YES}{NO}' checks if `#1' is a cs-name beginning with a letter
+\def\@ifcsname#1#2#3{\ifcat\noexpand#1\relax
+ \edef\@tempa{\expandafter\expandafter\expandafter\@car
+ \expandafter\@gobble\string#1\@nil}%
+ \ifnum\catcode\expandafter`\@tempa=11 \def\@tempa{#2}\else\def\@tempa{#3}\fi
+ \else\def\@tempa{#3}\fi\@tempa}
+% ignore following `{}'
+\def\ignoreempty{\@ifnextchar\bgroup{\@gobbleempty}{}}
+\def\@gobbleempty#1{\def\@tempa{#1}\ifx\@tempa\@empty \else{#1}\fi}
+% '\space' if in write mode, else nothing
+\def\wmspace{\ifx\protect\string \space
+ \else\ifx\protect\@tocprotect \string\space\space\fi\fi}
+% ... for case modes
+\newif\iflcase
+\newif\ifucase
+% make sure that `\iflcase' and `\ifucase' are never true at the same time
+\let\@lcasetrue=\lcasetrue \def\lcasetrue{\ucasefalse\@lcasetrue}
+\let\@ucasetrue=\ucasetrue \def\ucasetrue{\lcasefalse\@ucasetrue}
+\def\lcpmodechoice#1#2#3{\@empty
+ \iflcase \pmodechoice{#1}{\def\@tempa{#1}\expandafter\@tempa}%
+ \else\pmodechoice{#2}{\def\@tempa{#3}\expandafter\@tempa}\fi}
+\def\ucpmodechoice#1#2#3{\@empty
+ \ifucase \pmodechoice{#1}{\def\@tempa{#1}\expandafter\@tempa}%
+ \else\pmodechoice{#2}{\def\@tempa{#3}\expandafter\@tempa}\fi}
+\let\texlowercase=\lowercase
+\let\texuppercase=\uppercase
+\pmdef\lowercase#1{\iflcase \texlowercase{#1}%
+ \else\ifucase \lcasetrue\texlowercase{#1}\ucasetrue
+ \else\@lcasetrue\texlowercase{#1}\lcasefalse\fi\fi}
+\pmdef\uppercase#1{\ifucase \texuppercase{#1}%
+ \else\iflcase \ucasetrue\texuppercase{#1}\lcasetrue
+ \else\@ucasetrue\texuppercase{#1}\ucasefalse\fi\fi}
+
+%
+% Sichern des aktuellen Mathe-Stils (`\fam' und `\...style')
+%
+\def\xmathpalette#1{\@empty
+ \ifmmode \edef\lastfam{\the\fam}\mathpalette\@defmathstyle{#1}%
+ \else\let\lastfam=\textfam {\@defmathstyle\textstyle{#1}}\fi}
+\def\@defmathstyle#1{\let\lastmathstyle=#1}
+\def\xm@th{\m@th\fam\lastfam \lastmathstyle}
+%
+\def\savetextfam{\edef\textfam{\the\fam}}
+\let\lastmathstyle=\textstyle
+
+%
+% Miscellaneous `symbol'-commands ...
+%
+% ... for true math symbols
+\def\mathsymbol#1{\@empty\ifmmode #1\else\xmathpalette{$\xm@th#1$}\fi}
+% `\xnolimits' should be `\nolimits' after math operators (for future use)
+\def\xnolimits{}
+% ... for text math symbols
+\def\textsymbol#1{\@empty\ifmmode {#1}\else\xmathpalette{$\xm@th#1$}\fi}
+% ... for invers symbols (true definition in `cpps')
+\def\invsymbol#1{\leavevmode
+ {\setbox0=\hbox{\strut#1}\@blankboxfalse\makeblankbox{0pt}{0.4pt}}}
+% ... for undefined symbols
+\def\badchar#1{%
+ \@warning{Character `\protect#1' on page \thepage\space undefined}}
+% ... for graphic symbols
+\def\graphsymbol#1{\leavevmode\setbox0=\hbox{N}%
+ \graphlineoutside=0.5\graphlinedist \graphlineinside=-\graphlineoutside
+ \advance\graphlineoutside by0.5\graphlinewidth
+ \advance\graphlineinside by0.5\graphlinewidth
+ \setbox1=\hbox{$\vcenter{}$}%
+ \raise\ht1\hbox to\wd0{\def\vline{\gvline}\lower\ht1\copy\strutbox#1}}
+% ... for fill characters (rough definition)
+\def\makegraygraphbox#1#2{\graphsymbol{\vrule width#1\kern#2%
+ \xleaders\hbox{\lower\ht1\hbox{\strut}\vrule width#1\kern#2}\hfill
+ \vrule width#1}}
+
+%
+% Commands for use in `graphic symbols'
+%
+% Einfache vertikale Linie (`\vline' is equal to `\gvline' in `\graphsymbol')
+\def\gvline{\@ifnextchar[ {\@gvlineoparg}{\gvlinec}}
+\def\@gvlineoparg[#1]{\@nameuse{gvline#1}}
+\def\gvlinec{\vrule width\graphlinewidth\@gnext}
+\def\gvlinep#1{{\let\@gnext=\relax \gvlinet{#1}}\hskip-\graphlinewidth
+ \gvlineb{#1}}
+\def\gvlinet#1{\vrule depth#1 width\graphlinewidth\@gnext}
+\def\gvlineb#1{\vrule height#1 width\graphlinewidth\@gnext}
+% Doppelte vertikale Linie
+\def\Vline{\def\@gnext{\@Vlinesecarg}\gvline}
+\def\@Vlinesecarg{\hskip-\graphlinewidth\hskip\graphlinedist
+ \let\@gnext=\relax \gvline}
+%
+\let\@gnext=\relax
+
+% Einfache horizontale Linie
+\def\hlinefill{\leaders\hrule height0.5\graphlinewidth depth0.5\graphlinewidth
+ \hfill}
+% Doppelte horizontale Linie
+% #1: Zusatz links oben (> 0) bzw. unten (< 0)
+% #2: Zusatz rechts oben (> 0) bzw. unten (< 0)
+\def\Hlinefill#1#2{\@tempdima=#1\relax\@tempdimb=#2\relax
+ \ifdim\@tempdima>0pt \hskip-\@tempdima
+ \@tempdimc=\@tempdima \else\@tempdimc=0pt \fi
+ \ifdim\@tempdimb>0pt \advance\@tempdimc by\@tempdimb\fi
+ \leaders\hrule height\graphlineoutside depth\graphlineinside
+ \hskip\@tempdimc plus1fill
+ \ifdim\@tempdimb>0pt \hskip-\@tempdimb\fi
+ \hskip0pt plus-1fill
+ \ifdim\@tempdima<0pt \hskip\@tempdima
+ \@tempdimc=-\@tempdima \else\@tempdimc=0pt \fi
+ \ifdim\@tempdimb<0pt \advance\@tempdimc by-\@tempdimb\fi
+ \leaders\hrule height\graphlineinside depth\graphlineoutside
+ \hskip\@tempdimc plus1fill
+ \ifdim\@tempdimb<0pt \hskip\@tempdimb\fi}
+%
+\newdimen\graphlinewidth \graphlinewidth=1.2pt % bei 12pt-Schrift
+\newdimen\graphlinedist \graphlinedist=3pt % bei 12pt-Schrift
+\newdimen\graphlineoutside
+\newdimen\graphlineinside
+\newdimen\@tempdimc
+
+
+
+%
+% redefinition of LaTeX's font names
+%
+\pmdef\rm{\prm\savetextfam}
+\pmdef\it{\pit\savetextfam}
+\pmdef\bf{\pbf\savetextfam}
+\pmdef\sl{\psl\savetextfam}
+\pmdef\sf{\psf\savetextfam}
+\pmdef\sc{\psc\savetextfam}
+\pmdef\tt{\ptt\savetextfam}
+
+
+
+%
+% TeX's `\(o)oalign' with no interlineskip
+%
+\def\xoalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip0pt
+ \ialign{##\crcr#1\crcr}}} % put characters over each other
+\def\xooalign{\lineskiplimit-\maxdimen \xoalign}
+
+%
+% Diacritical characters for text and math mode
+%
+% '\relax' und '{}' verhindern Kerning!
+\let\tgrave=\` \pmdef\`#1{\@empty\ifmmode \grave{#1}\else\tgrave{#1}\fi}
+\let\tacute=\' \pmdef\'#1{\@empty\ifmmode \acute{#1}\else\tacute{#1}\fi}
+\let\that=\^ \pmdef\^#1{\@empty\ifmmode \hat{#1}\else\that{#1}\fi}
+\let\tddot=\" \pmdef\"#1{\@empty\ifmmode \ddot{#1}\else\tddot{#1}\fi}
+\let\ttilde=\~ \pmdef\~#1{\@empty\ifmmode \tilde{#1}\else\ttilde{#1}\fi}
+\let\tbar=\= \pmdef\=#1{\@empty\ifmmode \bar{#1}\else\tbar{#1}\fi}
+\let\tdot=\. \pmdef\.#1{\@empty\ifmmode \dot{#1}\else\tdot{#1}\fi}
+\let\tbreve=\u \pmdef\u#1{\@empty\ifmmode \breve{#1}\else\tbreve{#1}\fi}
+\let\tcheck=\v \pmdef\v#1{\@empty\ifmmode \check{#1}\else\tcheck{#1}\fi}
+\let\tcedilla=\c
+\pmdef\c#1{\@empty
+ \ifmmode \xmathpalette{\ooalign{$\xm@th#1$\crcr
+ \hidewidth$\xm@th\mathchar"7018$\hidewidth}}%
+ \else\tcedilla{#1}\fi}
+\let\tbarunder=\b
+\pmdef\b#1{\@empty
+ \ifmmode \xmathpalette{\oalign{$\xm@th#1$\crcr
+ \hidewidth\vbox to.2ex{\hbox{$\xm@th\mathchar"7016$}\vss}\hidewidth}}%
+ \else\tbarunder{#1}\fi}
+\pmdef\ring#1{\@empty\ifmmode \mathaccent"7017 #1\else\accent"17 #1\fi}
+%
+\let\aatext=\aa
+\mapname\aa{\mmodechoice{\mathaccent"7023a}{\aatext}}\uctext{\AA}
+\let\AAtext=\AA
+\mapname\AA{\mmodechoice{\xmathpalette{\setbox0\hbox{$\xm@th h$}%
+ \dimen@\ht0\advance\dimen@-1ex%
+ \rlap{\raise.67\dimen@\hbox{$\xm@th\mathchar"7017$}}A}}{\AAtext}}
+ \lctext{\aa}
+\let\ltext=\l
+\mapname\l{\mmodechoice{\mathchar"7032l}{\ltext}}\uctext{\L}
+\let\Ltext=\L
+\mapname\L{\mmodechoice{\xmathpalette{\setbox0\hbox{$\xm@th L$}%
+ \hbox to\wd0{\hss$\xm@th\mathchar"7032L$}}}{\Ltext}}\lctext{\l}
+\lccode"1A="1A % enable hyphenations
+\let\aetext=\ae
+\mapname\ae{\mmodechoice{\mathchar"701A }{\aetext}}\uctext{\AE}
+\let\AEtext=\AE
+\mapname\AE{\mmodechoice{\mathchar"701D }{\AEtext}}\lctext{\ae}
+\let\itext=\i
+\lccode"10="10 % enable hyphenations
+\mapname\i{\mfamchoice\imath{\mathchar"7010 }\itext}\uctext{\I}
+\mapname\I{I}\lctext{\i}
+\let\jtext=\j
+\lccode"11="11 % enable hyphenations
+\mapname\j{\mfamchoice\jmath{\mathchar"7011 }\jtext}\uctext{\J}
+\mapname\J{J}\lctext{\j}
+\lccode"1C="1C % enable hyphenations
+\let\otext=\o
+\mapname\o{\mmodechoice{\mathchar"701C }{\otext}}\uctext{\O}
+\let\Otext=\O
+\mapname\O{\mmodechoice{\mathchar"701F }{\Otext}}\lctext{\o}
+\lccode"1B="1B % enable hyphenations
+\let\oetext=\oe
+\mapname\oe{\mmodechoice{\mathchar"701B }{\oetext}}\uctext{\OE}
+\let\OEtext=\OE
+\mapname\OE{\mmodechoice{\mathchar"701E }{\OEtext}}\lctext{\oe}
+\let\sstext=\ss
+\mapname\ss{\mmodechoice{\mathchar"7019 }{\sstext}}\uctext{\SS}
+\mapname\SS{SS}\lctext{\ss}
+
+
+
+%
+% Some definitions for PC code pages
+%
+%\let\bigstar=\relax
+\@ifundefined{bigstar}{% No AmSTeX-fonts available
+ \def\bigstar{\star}
+ \def\blacktriangleright{\rhd}
+ \def\blacktriangleleft{\lhd}
+ \def\blacktriangle{\bigtriangleup}
+ \def\blacktriangledown{\bigtriangledown}
+ \def\vartriangle{\Diamond}
+ \def\yen{{\xooalign{\hfil Y\hfil\crcr
+ \hfil\raise0.2ex\hbox{$\m@th=$}\hfil}}}
+ \def\ulcorner{\mathsymbol{\vcenter{\hbox{%
+ \kern0.06em\vrule depth1ex\leaders\hrule\hskip1ex\kern0.06em}}}}
+ \def\urcorner{\mathsymbol{\vcenter{\hbox{%
+ \kern0.06em\leaders\hrule\hskip1ex\vrule depth1ex\kern0.06em}}}}
+ \def\varnothing{\emptyset}
+ \def\bigcdot{{\setbox0=\hbox{$\m@th\cdot$}%
+ \mathsymbol{\vcenter{\hbox to\wd0{%
+ \hfill\vrule height0.4\wd0 width0.4\wd0\hfill}}}}}
+ \def\circledR{{\xooalign{\hfil$\m@th\bigcirc$\hfil\crcr
+ \hfil$\m@th\rm\scriptstyle R$\hfil}}}
+ \def\eth{\leavevmode\hbox{$\m@th\partial$}%
+ \llap{$\m@th\mathaccent32{\vphantom{\partial}}$\kern0.1em}}
+ }{% AmSTeX-fonts available (macros should be already defined)
+ \def\bigcdot{\xmathpalette{\raise0.4ex\hbox{$\xm@th\centerdot$}}}
+ \let\m@eth=\eth
+ \def\eth{\mathsymbol{\m@eth}}
+ }
+
+%
+% PC codes 0..31
+%
+\def\smiley{{\setbox0=\hbox{$\vcenter{}$}\xooalign{$\m@th\bigcirc$\crcr
+ \hfil\raise0.5\ht0\hbox{$\m@th\cdot\cdot$}\hfil\crcr
+ \hfil\lower0.25\ht0\hbox{$\m@th\scriptscriptstyle\smile$}\hfil}}}
+% true definition of `\blacksmiley' in `cpps'
+\def\blacksmiley{\leavevmode{\setbox0=\hbox{\vphantom{$|$}\smiley}%
+ \@blankboxfalse\makeblankbox{0pt}{0.4pt}}}
+\def\invbullet{\invsymbol{\mathsymbol{\bullet}}}
+\def\invcirc{\invsymbol{\mathsymbol{\circ}}}
+\def\male{\leavevmode{\unitlength=1ex \begin{picture}(1,1)
+ \put(0.5,0.5){\circle{1}}
+ \put(0.6,1.1){\makebox(0,0){$\m@th\scriptscriptstyle\nearrow$}}
+ \end{picture}}}
+\def\female{\leavevmode{\unitlength=1ex \begin{picture}(1,1)
+ \put(0.5,0.5){\circle{1}}
+ \put(0.5,0){\line(0,-1){0.8}}
+ \put(0.1,-0.4){\line(1,0){0.8}}
+ \end{picture}}}
+\def\musicalnote{\leavevmode{\unitlength=1ex \begin{picture}(0.65,1.35)
+ \put(0.15,0.15){\circle*{0.3}}
+ \put(0.3,0.15){\line(0,1){1.2}}
+ \put(0.3,1.35){\line(1,0){0.35}}
+ \put(0.3,1.15){\line(1,0){0.35}}
+ \put(0.65,1.35){\line(0,-1){0.2}}
+ \end{picture}}}
+\def\Musicalnote{\leavevmode{\unitlength=1ex \begin{picture}(1,1.35)
+ \put(0.15,0){\circle*{0.3}}
+ \put(0.3,0){\line(0,1){1.35}}
+ \put(0.85,0.15){\circle*{0.3}}
+ \put(1,0.15){\line(0,1){1.2}}
+ \put(0.3,1.35){\line(1,0){0.7}}
+ \put(0.3,1.15){\line(1,0){0.7}}
+ \end{picture}}}
+\def\sun{\mathsymbol{\bigstar}} % true definition not available
+\def\Exclam{!!{}}
+\def\Bar{\leavevmode
+ \hbox to0.5em{\kern0.06em\leaders\hrule height0.5ex\hfill}}
+\def\hookmark{{\setbox0=\hbox{$\m@th\neg$}% Symbol fuer rechten Winkel
+ \mathsymbol{\vcenter{\hbox to\wd0{%
+ \kern0.06em\vrule height0.6ex\leaders\hrule\hfill\kern0.06em}}}}}
+
+%
+% PC codes 32..126
+%
+\def\qq{{\sc\char"0D\kern-0.1em\char"0D}}
+%\def\rq{{}'{}}
+\def\sq{{\sc\char"0D}}
+\def\lt{<}
+\def\gt{>}
+\def\bs{\textsymbol{\backslash}}
+\def\asciicircum{\textsymbol{^\wedge}}
+%\def\lq{{}`{}}
+\def\brokenvert{\leavevmode{\setbox0=\hbox{$\m@th|$}\hbox to\wd0{\hfil
+ \@tempdima=\ht0 \advance\@tempdima by\dp0 \advance\@tempdima by-0.25ex
+ \divide\@tempdima by2 \@tempdimb=\@tempdima
+ \advance\@tempdima by-\ht0 \advance\@tempdimb by-\dp0
+ \vrule height\ht0 depth\@tempdima\hskip-0.4pt
+ \vrule height\@tempdimb depth\dp0\hfil}}}
+\def\tbrokenvert{\mfamchoice\vert\brokenvert\brokenvert}
+\def\asciivert{\@empty\if@asciivert \tbrokenvert\else\mathsymbol{\vert}\fi}
+\newif\if@asciivert
+\def\asciitilde{\textsymbol{^\sim}}
+
+%
+% PC code 127
+%
+\def\hatmark{\mathsymbol{\vartriangle}} % true definition not available
+
+%
+% PC codes 128..255
+%
+\def\cent{\leavevmode\hbox{\setbox0=\hbox{c}%
+ c\llap{\raise0.1ex\hbox to\wd0{\scriptsize\hss\kern0.1em/\hss}}}}
+\def\Pt{\leavevmode\hbox{\rm P\kern-0.15em$\m@th\rm\scriptstyle t$}}
+\def\florin{\leavevmode\hbox{$f$}}
+% true definition of `\currency' in `cpps'
+\def\currency{{\xooalign{\hfil$\m@th\times$\hfil\crcr
+ \hfil\kern0.05em$\m@th\circ$\hfil}}}
+
+\def\ordfeminine{\textsymbol{^{\b a}}}
+\def\ordmasculine{\textsymbol{^{\b o}}}
+
+\def\questiondown{?`}
+\def\exclamdown{!`}
+
+\def\ulangle{\leavevmode{\setbox0=\hbox{$\m@th\ulcorner$}\lower0.25\ht0\box0}}
+\def\urangle{\leavevmode{\setbox0=\hbox{$\m@th\urcorner$}\lower0.25\ht0\box0}}
+
+% true definition of the following three in `cpps'
+\def\graygraphbox{\makegraygraphbox{0.25pt}{1pt}} % lum = 0.25
+\def\Graygraphbox{\makegraygraphbox{0.5pt}{1pt}} % lum = 0.5
+\def\GRAYGRAPHBOX{\makegraygraphbox{0.5pt}{0.75pt}} % lum = 0.75
+
+%\def\inttop{\graphsymbol{\setbox0=\hbox{$\m@th\scriptstyle\mathchar"0330$}%
+% \@tempdima=\dp0 \advance\@tempdima by-\dp\strutbox \advance\@tempdima by-\ht1
+% \hss\kern0.8pt\raise\@tempdima\box0\hss}}
+%\def\intbot{\graphsymbol{\setbox0=\hbox{$\m@th\scriptstyle\mathchar"0341$}%
+% \@tempdima=\ht0 \advance\@tempdima by-\ht\strutbox \advance\@tempdima by\ht1
+% \hss\lower\@tempdima\box0\kern0.8pt\hss}}
+\def\inttop{\graphsymbol{\setbox0=\hbox{$\m@th\scriptstyle\mathchar"0338$}%
+ \setbox2=\hbox{$\m@th\scriptstyle\mathchar"033E$}%
+ \hss\lower\ht1\vbox to\ht\strutbox{\offinterlineskip
+ \kern0.25ex\box0\kern-\dp2\cleaders\copy2\vfill\kern-\dp2\copy2
+ \kern-\dp\strutbox}\hss}}
+\def\intbot{\graphsymbol{\setbox0=\hbox{$\m@th\scriptstyle\mathchar"033B$}%
+ \setbox2=\hbox{$\m@th\scriptstyle\mathchar"033E$}%
+ \hss\lower\ht1\vbox to\ht\strutbox{\offinterlineskip
+ \leaders\copy2\vfill\kern-\dp2\box0\kern0.25ex\kern-\dp\strutbox}\hss}}
+\def\degree{\textsymbol{^\circ}}
+\def\smallcdot{\mathsymbol{\cdot}}
+\def\sqbullet{\leavevmode\kern.1em\hbox{$\m@th
+ \vcenter{\hrule height1ex width.3em}$}\kern.1em}
+\let\nbspace=~
+
+\def\emdash{{}---{}}
+\def\endash{{}--{}}
+\def\hyphen{{}-{}}
+\def\Underscore{\oalign{\_\crcr\_}}
+
+\def\Eth{\leavevmode\hbox{\setbox0=\hbox{D}\@tempdima=\ht0
+ \setbox0=\hbox{I}\@tempdimb=\wd0
+ \setbox0=\hbox{-}\advance\@tempdima by-\ht0 \divide\@tempdima by2
+ \advance\@tempdimb by-\wd0
+ \rlap{\raisebox{\@tempdima}{\kern\@tempdimb-}}D}}
+\def\thorn{\leavevmode\rlap{l}p}
+\def\Thorn{\leavevmode{\rm\rlap{I}\kern0.1em\hbox{$\m@th\rm\scriptstyle P$}}}
+
+\def\perthousand{\textsymbol{\slashfrac0{00}}}
+\def\lqq{{}``}
+\def\rqq{''}
+\def\trademark{\textsymbol{^{TM}}}
+
+
+
+%
+% TeX-Definitionen fuer die Code Page TeX-ASCII
+%
+\makeactive{"027,"02A,"03C,"03E,"060,"07C}
+
+\newcodepage{texascii}{
+
+ \@asciiverttrue
+
+%
+% Zuruecksetzen der Original-Definitionen
+%
+\def\cporiginal{\makeother{"027,"02A,"03C,"03E,"060,"07C}\@asciiverttrue}
+
+%
+% Modifizierte Definitionen fuer ASCII (mit `TeX-Quotes')
+%
+\def\cpascii{\makeactive{"02A,"03C,"03E,"07C}%
+ %\mapchar{"}{\qq}%
+ \mapchar{*}{\mathsymbol{\ast}}%
+ \mapchar{<}{\mathsymbol{\lt}}%
+ \mapchar{>}{\mathsymbol{\gt}}%
+ %\mapname\_{}% TeX-construct
+ \mapname\{{\mathsymbol{\lbrace}}%
+ \mapchar{|}{\asciivert}%
+ \mapname\}{\mathsymbol{\rbrace}}}
+
+%
+% Modifizierte Definitionen fuer ASCII (mit `Original-ASCII-Quotes')
+%
+\def\cpfullascii{\cpascii
+ \makeactive{"027,"060}%
+ \mapchar{'}{\sq}%
+ \mapchar{`}{\`{}}}
+
+%
+% Modifizierte Definition fuer einen durchgehenden senkrechten Strich
+%
+\def\cpvert{\@asciivertfalse}
+
+}%\end{newcodepage}
+
+\makeother{"027,"02A,"03C,"03E,"060,"07C}
diff --git a/macros/generic/cptex/cp.tex b/macros/generic/cptex/cp.tex
new file mode 100644
index 0000000000..15cd215af5
--- /dev/null
+++ b/macros/generic/cptex/cp.tex
@@ -0,0 +1,36 @@
+%
+% TeX-Definitionen fr die Verwendung von Code Pages in Plain-TeX
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+
+\def\makeatletter{\catcode`\@=11\relax}
+\def\makeatother{\catcode`\@=12\relax}
+
+\chardef\atcode=\catcode`\@\makeatletter
+\input lamac
+\let\prm=\rm
+\let\pit=\it
+\let\pbf=\bf
+\let\psl=\sl
+\let\psf=\sf % undefined
+\let\psc=\sc % undefined
+\let\ptt=\tt
+\def\frac#1#2{{#1\over #2}}
+\def\Diamond{\diamond}
+\def\lhd{\mathbin{< \hbox to -.43em{}\hbox{\vrule
+ width .065em height .55em depth .05em}\hbox to .2em{}}}
+\def\rhd{\mathbin{\hbox to .3em{}\hbox{\vrule width .065em height
+ .55em depth .05em}\hbox to -.43em{}>}}
+\def\pounds{\protect\ppounds}
+\def\ppounds{\relax\ifmmode\mathchar"424\else{\it \char'44}\fi}
+\def\copyright{\protect\pcopyright}
+\def\pcopyright{{\rm\ooalign{\hfil
+ \raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
+\input cp.sty
+\savetextfam
+\def\qq{{}''{}}
+\def\sq{{}'{}}
+\def\cent{\leavevmode\hbox{\setbox0=\hbox{c}%
+ c\llap{\raise0.1ex\hbox to\wd0{\the\scriptfont\textfam\hss\kern0.1em/\hss}}}}
+\catcode`\@=\atcode
diff --git a/macros/generic/cptex/cp437.sty b/macros/generic/cptex/cp437.sty
new file mode 100644
index 0000000000..e76ddf6929
--- /dev/null
+++ b/macros/generic/cptex/cp437.sty
@@ -0,0 +1,252 @@
+%
+% TeX-Definitionen fr die Code Page 437, U.S. PC encoding
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+\typeout{Document Style Option `cp437' Version 1.0 <18 Feb 1994>.}
+%
+%
+\@ifundefined{selectcodepage}{\input cp.sty}{}
+
+\activatefullcharset
+
+\newcodepage{437}{
+
+ \selectcodepage[original]{texascii}
+ \activatefullcharset
+
+% Font: F = aktueller, MI = Mathe-Italic, MS = Mathe-Symbol, MA/B = msa/bm
+ \mapchar{^^00}{\nbspace} % F
+ \mapchar{^^01}{\smiley} % MS+MI
+ \mapchar{^^02}{\blacksmiley} % MS+MI
+ \mapchar{^^03}{\mathsymbol{\heartsuit}} % MS
+ \mapchar{^^04}{\mathsymbol{\diamondsuit}} % MS
+ \mapchar{^^05}{\mathsymbol{\clubsuit}} % MS
+ \mapchar{^^06}{\mathsymbol{\spadesuit}} % MS
+ \mapchar{^^07}{\mathsymbol{\bullet}} % MS
+ \mapchar{^^08}{\invbullet} % MS
+ %\mapchar{^^09}{\mathsymbol{\circ}} % MS
+ \mapchar{^^0a}{\invcirc} % MS
+ \mapchar{^^0b}{\male} % circle(ex)+MS
+ %\mapchar{^^0c}{\female} % circle+line(ex)
+ %\mapchar{^^0d}{\musicalnote} % circle+line(ex)
+ \mapchar{^^0e}{\Musicalnote} % circle+line(ex)
+ \mapchar{^^0f}{\sun} % MA
+ \mapchar{^^10}{\mathsymbol{\blacktriangleright}} % MA
+ \mapchar{^^11}{\mathsymbol{\blacktriangleleft}} % MA
+ \mapchar{^^12}{\mathsymbol{\updownarrow}} % MS
+ \mapchar{^^13}{\Exclam} % F
+ \mapchar{^^14}{\P} % MS
+ \mapchar{^^15}{\S} % MS
+ \mapchar{^^16}{\Bar} % F (no italic)
+ \mapchar{^^17}{\mathsymbol{\underline{\updownarrow}}} % MS
+ \mapchar{^^18}{\mathsymbol{\uparrow}} % MS
+ \mapchar{^^19}{\mathsymbol{\downarrow}} % MS
+ \mapchar{^^1a}{\mathsymbol{\rightarrow}} % MS
+ \mapchar{^^1b}{\mathsymbol{\leftarrow}} % MS
+ \mapchar{^^1c}{\hookmark} % line(ex)+MS
+ \mapchar{^^1d}{\mathsymbol{\leftrightarrow}} % MS
+ \mapchar{^^1e}{\mathsymbol{\blacktriangle}} % MA
+ \mapchar{^^1f}{\mathsymbol{\blacktriangledown}} % MA
+%
+ \mapchar{^^7f}{\hatmark} % MA
+%
+ \mapchar{^^80}{\c C}\lcchar{^^87}
+ \mapchar{^^81}{\"u}\ucchar{^^9a}
+ \mapchar{^^82}{\'e}\ucchar{^^90}
+ \mapchar{^^83}{\^a}\uctext{\^A}
+ \mapchar{^^84}{\"a}\ucchar{^^8e}
+ \mapchar{^^85}{\`a}\uctext{\`A}
+ \mapchar{^^86}{\aa}\ucchar{^^8f}
+ \mapchar{^^87}{\c c}\ucchar{^^80}
+ \mapchar{^^88}{\^e}\uctext{\^E}
+ \mapchar{^^89}{\"e}\uctext{\"E}
+ \mapchar{^^8a}{\`e}\uctext{\`E}
+ \mapchar{^^8b}{\"\i}\uctext{\"{\I}}
+ \mapchar{^^8c}{\^\i}\uctext{\^{\I}}
+ \mapchar{^^8d}{\`\i}\uctext{\`{\I}}
+ \mapchar{^^8e}{\"A}\lcchar{^^84}
+ \mapchar{^^8f}{\AA}\lcchar{^^86}
+ \mapchar{^^90}{\'E}\lcchar{^^82}
+ \mapchar{^^91}{\ae}\ucchar{^^92}
+ \mapchar{^^92}{\AE}\lcchar{^^91}
+ \mapchar{^^93}{\^o}\uctext{\^O}
+ \mapchar{^^94}{\"o}\ucchar{^^99}
+ \mapchar{^^95}{\`o}\uctext{\`O}
+ \mapchar{^^96}{\^u}\uctext{\^U}
+ \mapchar{^^97}{\`u}\uctext{\`U}
+ \mapchar{^^98}{\"y}\uctext{\"Y}
+ \mapchar{^^99}{\"O}\lcchar{^^94}
+ \mapchar{^^9a}{\"U}\lcchar{^^81}
+ \mapchar{^^9b}{\cent}
+ \mapchar{^^9c}{\pounds} % italic
+ \mapchar{^^9d}{\yen}
+ \mapchar{^^9e}{\Pt} % MS
+ \mapchar{^^9f}{\florin} % MI
+ \mapchar{^^a0}{\'a}\uctext{\'A}
+ \mapchar{^^a1}{\'\i}\uctext{\'{\I}}
+ \mapchar{^^a2}{\'o}\uctext{\'O}
+ \mapchar{^^a3}{\'u}\uctext{\'U}
+ \mapchar{^^a4}{\~n}\ucchar{^^a5}
+ \mapchar{^^a5}{\~N}\lcchar{^^a4}
+ \mapchar{^^a6}{\ordfeminine} % F(ex)
+ \mapchar{^^a7}{\ordmasculine} % F(ex)
+ \mapchar{^^a8}{\questiondown}
+ \mapchar{^^a9}{\ulangle}
+ \mapchar{^^aa}{\urangle}
+ \mapchar{^^ab}{\mathsymbol{\slashfrac12}} % F+MS
+ \mapchar{^^ac}{\mathsymbol{\slashfrac14}} % F+MS
+ \mapchar{^^ad}{\exclamdown}
+ \mapchar{^^ae}{\flqq} % MS(ex)
+ \mapchar{^^af}{\frqq} % MS(ex)
+ \mapchar{^^b0}{\graygraphbox} % rules(ex)
+ \mapchar{^^b1}{\Graygraphbox} % rules(ex)
+ \mapchar{^^b2}{\GRAYGRAPHBOX} % rules(ex)
+ \mapchar{^^b3}{\graphsymbol{\hfill\vline\hfill}} % rules(ex)
+ \mapchar{^^b4}{\graphsymbol{\hlinefill\vline\hfill}} % rules(ex)
+ \mapchar{^^b5}{\graphsymbol{\Hlinefill{0pt}{0pt}\vline\hfill}}
+ \mapchar{^^b6}{\graphsymbol{\hlinefill\Vline \hfill}}
+ \mapchar{^^b7}{\graphsymbol{\hlinefill\kern-\graphlinedist
+ \Vline[b]{0.5\graphlinewidth}[b]{0.5\graphlinewidth}%
+ \kern-\graphlinedist\hfill}}
+ \mapchar{^^b8}{\graphsymbol{\Hlinefill{0pt}{0pt}\vline[b]\graphlineoutside
+ \hfill}}
+ \mapchar{^^b9}{\graphsymbol{\Hlinefill{0pt}{0pt}\Vline[p]\graphlineinside
+ \hfill}}
+ \mapchar{^^ba}{\graphsymbol{\hfill\Vline\hfill}}
+ \mapchar{^^bb}{\graphsymbol{\Hlinefill{0pt}{\graphlinedist}%
+ \Vline[b]\graphlineinside[b]\graphlineoutside \hfill}}
+ \mapchar{^^bc}{\graphsymbol{\Hlinefill{0pt}{-\graphlinedist}%
+ \Vline[t]\graphlineinside[t]\graphlineoutside \hfill}}
+ \mapchar{^^bd}{\graphsymbol{\hlinefill\kern-\graphlinedist
+ \Vline[t]{0.5\graphlinewidth}[t]{0.5\graphlinewidth}%
+ \kern-\graphlinedist\hfill}}
+ \mapchar{^^be}{\graphsymbol{\Hlinefill{0pt}{0pt}\vline[t]\graphlineoutside
+ \hfill}}
+ \mapchar{^^bf}{\graphsymbol{\hlinefill\vline[b]{0.5\graphlinewidth}\hfill}}
+ \mapchar{^^c0}{\graphsymbol{\hfill\vline[t]{0.5\graphlinewidth}\hlinefill}}
+ \mapchar{^^c1}{\graphsymbol{\hlinefill\vline[t]{0.5\graphlinewidth}%
+ \hlinefill}}
+ \mapchar{^^c2}{\graphsymbol{\hlinefill\vline[b]{0.5\graphlinewidth}%
+ \hlinefill}}
+ \mapchar{^^c3}{\graphsymbol{\hfill\vline\hlinefill}}
+ \mapchar{^^c4}{\graphsymbol{\hlinefill}}
+ \mapchar{^^c5}{\graphsymbol{\hlinefill\vline\hlinefill}}
+ \mapchar{^^c6}{\graphsymbol{\hfill\vline\Hlinefill{0pt}{0pt}}}
+ \mapchar{^^c7}{\graphsymbol{\hfill\Vline \hlinefill}}
+ \mapchar{^^c8}{\graphsymbol{\hfill
+ \Vline[t]\graphlineoutside[t]\graphlineinside
+ \Hlinefill{-\graphlinedist}{0pt}}}
+ \mapchar{^^c9}{\graphsymbol{\hfill
+ \Vline[b]\graphlineoutside[b]\graphlineinside
+ \Hlinefill{\graphlinedist}{0pt}}}
+ \mapchar{^^ca}{\graphsymbol{\Hlinefill{0pt}{-\graphlinedist}%
+ \Vline[t]\graphlineinside[t]\graphlineinside
+ \Hlinefill{-2\graphlinewidth}{0pt}}}
+ \mapchar{^^cb}{\graphsymbol{\Hlinefill{0pt}{\graphlinedist}%
+ \Vline[b]\graphlineinside[b]\graphlineinside
+ \Hlinefill{2\graphlinewidth}{0pt}}}
+ \mapchar{^^cc}{\graphsymbol{\hfill\Vline[c][p]\graphlineinside
+ \Hlinefill{0pt}{0pt}}}
+ \mapchar{^^cd}{\graphsymbol{\Hlinefill{0pt}{0pt}}}
+ \mapchar{^^ce}{\graphsymbol{\Hlinefill{0pt}{0pt}%
+ \Vline[p]\graphlineinside[p]\graphlineinside \Hlinefill{0pt}{0pt}}}
+ \mapchar{^^cf}{\graphsymbol{\Hlinefill{0pt}{0pt}\vline[t]\graphlineinside
+ \Hlinefill{-2\graphlinewidth}{0pt}}}
+ \mapchar{^^d0}{\graphsymbol{\hlinefill\kern-\graphlinedist
+ \Vline[t]{0.5\graphlinewidth}[t]{0.5\graphlinewidth}%
+ \kern-\graphlinedist\hlinefill}}
+ \mapchar{^^d1}{\graphsymbol{\Hlinefill{0pt}{0pt}\vline[b]\graphlineinside
+ \Hlinefill{2\graphlinewidth}{0pt}}}
+ \mapchar{^^d2}{\graphsymbol{\hlinefill\kern-\graphlinedist
+ \Vline[b]{0.5\graphlinewidth}[b]{0.5\graphlinewidth}%
+ \kern-\graphlinedist\hlinefill}}
+ \mapchar{^^d3}{\graphsymbol{\hfill\kern-\graphlinedist
+ \Vline[t]{0.5\graphlinewidth}[t]{0.5\graphlinewidth}%
+ \kern-\graphlinedist\hlinefill}}
+ \mapchar{^^d4}{\graphsymbol{\hfill\vline[t]\graphlineoutside
+ \Hlinefill{0pt}{0pt}}}
+ \mapchar{^^d5}{\graphsymbol{\hfill\vline[b]\graphlineoutside
+ \Hlinefill{0pt}{0pt}}}
+ \mapchar{^^d6}{\graphsymbol{\hfill\kern-\graphlinedist
+ \Vline[b]{0.5\graphlinewidth}[b]{0.5\graphlinewidth}%
+ \kern-\graphlinedist\hlinefill}}
+ \mapchar{^^d7}{\graphsymbol{\hlinefill\kern-\graphlinedist\Vline
+ \kern-\graphlinedist\hlinefill}}
+ \mapchar{^^d8}{\graphsymbol{\Hlinefill{0pt}{0pt}\vline
+ \Hlinefill{0pt}{0pt}}}
+ \mapchar{^^d9}{\graphsymbol{\hlinefill\vline[t]{0.5\graphlinewidth}\hfill}}
+ \mapchar{^^da}{\graphsymbol{\hfill\vline[b]{0.5\graphlinewidth}\hlinefill}}
+ \mapchar{^^db}{\graphsymbol{\leaders\vrule\hfill}}
+ \mapchar{^^dc}{\graphsymbol{\leaders\vrule height0pt\hfill}}
+ \mapchar{^^dd}{\graphsymbol{\leaders\vrule\hfill\hfill}}
+ \mapchar{^^de}{\graphsymbol{\hfill\leaders\vrule\hfill}}
+ \mapchar{^^df}{\graphsymbol{\leaders\vrule depth0pt\hfill}}
+ \mapchar{^^e0}{\mathsymbol{\alpha}}
+ \mapchar{^^e1}{\mathsymbol{\beta}}
+ \mapchar{^^e2}{\mathsymbol{\Gamma}}
+ \mapchar{^^e3}{\mathsymbol{\pi}}
+ \mapchar{^^e4}{\mathsymbol{\Sigma}}
+ \mapchar{^^e5}{\mathsymbol{\sigma}}
+ \mapchar{^^e6}{\mathsymbol{\mu}} % MI
+ \mapchar{^^e7}{\mathsymbol{\tau}}
+ \mapchar{^^e8}{\mathsymbol{\Phi}}
+ \mapchar{^^e9}{\mathsymbol{\Theta}}
+ \mapchar{^^ea}{\mathsymbol{\Omega}}
+ \mapchar{^^eb}{\mathsymbol{\delta}}
+ \mapchar{^^ec}{\mathsymbol{\infty}}
+ \mapchar{^^ed}{\mathsymbol{\varnothing}}
+ \mapchar{^^ee}{\mathsymbol{\in}}
+ \mapchar{^^ef}{\mathsymbol{\cap}}
+ \mapchar{^^f0}{\mathsymbol{\equiv}}
+ \mapchar{^^f1}{\mathsymbol{\pm}} % MS
+ \mapchar{^^f2}{\mathsymbol{\ge}}
+ \mapchar{^^f3}{\mathsymbol{\le}}
+ \mapchar{^^f4}{\inttop}
+ \mapchar{^^f5}{\intbot}
+ \mapchar{^^f6}{\mathsymbol{\div}} % MS
+ \mapchar{^^f7}{\mathsymbol{\approx}}
+ \mapchar{^^f8}{\degree} % MS
+ \mapchar{^^f9}{\bigcdot}
+ \mapchar{^^fa}{\smallcdot} % MS
+ \mapchar{^^fb}{\mathsymbol{\surd}}
+ \mapchar{^^fc}{\mathsymbol{\xnolimits^n}} % F
+ \mapchar{^^fd}{\mathsymbol{\xnolimits^2}} % F
+ \mapchar{^^fe}{\sqbullet} % rules(ex)
+ \mapchar{^^ff}{\nbspace} % F
+
+%
+% Zuruecksetzen der Original-Definitionen
+%
+\def\cporiginal{%
+ \mapchar{^^aa}{\urangle}%
+ \mapchar{^^b3}{\graphsymbol{\hfill\vline\hfill}}%
+ \mapchar{^^ba}{\graphsymbol{\hfill\Vline\hfill}}%
+ \mapchar{^^c4}{\graphsymbol{\hlinefill}}%
+ \mapchar{^^e1}{\mathsymbol{\beta}}}
+
+%
+% Modifizierte Definition fuer die Benutzung von `es-zet' statt `beta'
+%
+\def\cpgerman{\mapchar{^^e1}{\ss}\uctext{\SS{}}}
+
+%
+% Modifizierte Definition fuer manche Textverarbeitungen (z. B. Microsoft Word)
+%
+\def\cpemdash{\mapchar{^^c4}{\emdash}}
+
+%
+% Weitere moegliche Modifikationen
+%
+\def\cpneg{\mapchar{^^aa}{\mathsymbol{\neg}}}
+
+\def\cpVert{%
+ \mapchar{^^b3}{\mathsymbol{\vert}}%
+ \mapchar{^^ba}{\mathsymbol{\Vert}}}
+
+}%\end{newcodepage}
+
+%
+% Einstellen der Code Page 437
+%
+\selectcodepage{437}
diff --git a/macros/generic/cptex/cp850.sty b/macros/generic/cptex/cp850.sty
new file mode 100644
index 0000000000..4c70ee459c
--- /dev/null
+++ b/macros/generic/cptex/cp850.sty
@@ -0,0 +1,119 @@
+%
+% TeX-Definitionen fr die Code Page 850, Int'l PC encoding
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+% Changes between Version 1.1 and 1.0:
+% - character `^^fa' is now defined to be directly `\mathsymbol{\cdot}'
+% (this makes actually no difference until `\smallcdot' is redefined)
+%
+\typeout{Document Style Option `cp850' Version 1.1 <1 Mar 1994>.}
+%
+%
+\@ifundefined{selectcodepage}{\input cp.sty}{}
+
+\activateuppercharset
+
+\newcodepage{850}{
+
+ \selectcodepage[original,vert]{437}
+
+ \mapchar{^^83}{\^a}\ucchar{^^b6}
+ \mapchar{^^85}{\`a}\ucchar{^^b7}
+ \mapchar{^^88}{\^e}\ucchar{^^d2}
+ \mapchar{^^89}{\"e}\ucchar{^^d3}
+ \mapchar{^^8a}{\`e}\ucchar{^^d4}
+ \mapchar{^^8b}{\"\i}\ucchar{^^d8}
+ \mapchar{^^8c}{\^\i}\ucchar{^^d7}
+ \mapchar{^^8d}{\`\i}\ucchar{^^de}
+ \mapchar{^^93}{\^o}\ucchar{^^e2}
+ \mapchar{^^95}{\`o}\ucchar{^^e3}
+ \mapchar{^^96}{\^u}\ucchar{^^ea}
+ \mapchar{^^97}{\`u}\ucchar{^^eb}
+%
+ \mapchar{^^9b}{\o}\ucchar{^^9d}
+%
+ \mapchar{^^9d}{\O}\lcchar{^^9b}
+ \mapchar{^^9e}{\mathsymbol{\times}} % MS
+%
+ \mapchar{^^a0}{\'a}\ucchar{^^b5}
+ \mapchar{^^a1}{\'\i}\ucchar{^^d6}
+ \mapchar{^^a2}{\'o}\ucchar{^^e0}
+ \mapchar{^^a3}{\'u}\ucchar{^^e9}
+%
+ \mapchar{^^a9}{\circledR} % MA
+ \mapchar{^^aa}{\mathsymbol{\neg}} % MS
+%
+ \mapchar{^^b5}{\'A}\lcchar{^^a0}
+ \mapchar{^^b6}{\^A}\lcchar{^^83}
+ \mapchar{^^b7}{\`A}\lcchar{^^85}
+ \mapchar{^^b8}{\copyright} % roman+MS
+%
+ \mapchar{^^bd}{\cent} % F
+ \mapchar{^^be}{\yen} % MA
+%
+ \mapchar{^^c6}{\~a}\ucchar{^^c7}
+ \mapchar{^^c7}{\~A}\lcchar{^^c6}
+%
+ \mapchar{^^cf}{\currency} % MS
+ \mapchar{^^d0}{\eth}\ucchar{^^d1} % MB
+ \mapchar{^^d1}{\Eth}\lcchar{^^d0} % F
+ \mapchar{^^d2}{\^E}\lcchar{^^88}
+ \mapchar{^^d3}{\"E}\lcchar{^^89}
+ \mapchar{^^d4}{\`E}\lcchar{^^8a}
+ \mapchar{^^d5}{\i}\uctext{\I{}}
+ \mapchar{^^d6}{\'I}\lcchar{^^a1}
+ \mapchar{^^d7}{\^I}\lcchar{^^8c}
+ \mapchar{^^d8}{\"I}\lcchar{^^8b}
+%
+ \mapchar{^^dd}{\brokenvert} % rules+MS(ex)
+ \mapchar{^^de}{\`I}\lcchar{^^8d}
+%
+ \mapchar{^^e0}{\'O}\lcchar{^^a2}
+ \mapchar{^^e1}{\ss}\uctext{\SS{}}
+ \mapchar{^^e2}{\^O}\lcchar{^^93}
+ \mapchar{^^e3}{\`O}\lcchar{^^95}
+ \mapchar{^^e4}{\~o}\ucchar{^^e5}
+ \mapchar{^^e5}{\~O}\lcchar{^^e4}
+%
+ \mapchar{^^e7}{\thorn}\ucchar{^^e8} % F
+ \mapchar{^^e8}{\Thorn}\lcchar{^^e7} % roman
+ \mapchar{^^e9}{\'U}\lcchar{^^a3}
+ \mapchar{^^ea}{\^U}\lcchar{^^96}
+ \mapchar{^^eb}{\`U}\lcchar{^^97}
+ \mapchar{^^ec}{\'y}\ucchar{^^ed}
+ \mapchar{^^ed}{\'Y}\lcchar{^^ec}
+ \mapchar{^^ee}{\={}} % F
+ \mapchar{^^ef}{\'{}} % F
+ \mapchar{^^f0}{\hyphen} % F
+%
+ \mapchar{^^f2}{\Underscore} % rules(ex)
+ \mapchar{^^f3}{\mathsymbol{\slashfrac34}} % F+MS
+ \mapchar{^^f4}{\P} % MS
+ \mapchar{^^f5}{\S} % MS
+%
+ \mapchar{^^f7}{\c{}} % F
+%
+ \mapchar{^^f9}{\"{}} % F
+ \mapchar{^^fa}{\mathsymbol{\cdot}}
+ \mapchar{^^fb}{\mathsymbol{\xnolimits^1}} % F
+ \mapchar{^^fc}{\mathsymbol{\xnolimits^3}} % F
+
+%
+% Zuruecksetzen der Original-Definitionen
+%
+\def\cporiginal{%
+ \mapchar{^^b3}{\graphsymbol{\hfill\vline\hfill}}%
+ \mapchar{^^ba}{\graphsymbol{\hfill\Vline\hfill}}%
+ \mapchar{^^c4}{\graphsymbol{\hlinefill}}}
+
+\let\cpvert=\relax
+\def\cpgerman{}
+\let\cpneg=\relax
+
+}%\end{newcodepage}
+
+%
+% Einstellen der Code Page 850
+%
+\selectcodepage{850}
diff --git a/macros/generic/cptex/cp8859.sty b/macros/generic/cptex/cp8859.sty
new file mode 100644
index 0000000000..fc3a9d882b
--- /dev/null
+++ b/macros/generic/cptex/cp8859.sty
@@ -0,0 +1,140 @@
+%
+% TeX-Definitionen fr die Code Page ISO-8859-1 (Latin 1)
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+% Changes between Version 1.1 and 1.0:
+% - adding the options `original' and `german' for german quotes
+%
+\typeout{Document Style Option `cp8859' Version 1.1 <1 Mar 1994>.}
+%
+%
+\@ifundefined{selectcodepage}{\input cp.sty}{}
+
+\activateuppercharset
+
+\newcodepage{8859}{
+
+ \selectcodepage[original,vert]{texascii}
+ \activateuppercharset\makeinvalid{"080-"090,"093-"09F}
+
+ \mapchar{^^91}{\lq}
+ \mapchar{^^92}{\rq}
+%
+ \mapchar{^^a0}{\nbspace}
+ \mapchar{^^a1}{\exclamdown}
+ \mapchar{^^a2}{\cent}
+ \mapchar{^^a3}{\pounds}
+ \mapchar{^^a4}{\currency}
+ \mapchar{^^a5}{\yen}
+ \mapchar{^^a6}{\brokenvert}
+ \mapchar{^^a7}{\S}
+ \mapchar{^^a8}{\"{}}
+ \mapchar{^^a9}{\copyright}
+ \mapchar{^^aa}{\ordfeminine}
+ \mapchar{^^ab}{\flqq}
+ \mapchar{^^ac}{\mathsymbol{\neg}}
+ \mapchar{^^ad}{\hyphen}
+ \mapchar{^^ae}{\circledR}
+ \mapchar{^^af}{\={}}
+ \mapchar{^^b0}{\degree}
+ \mapchar{^^b1}{\mathsymbol{\pm}}
+ \mapchar{^^b2}{\mathsymbol{\xnolimits^2}}
+ \mapchar{^^b3}{\mathsymbol{\xnolimits^3}}
+ \mapchar{^^b4}{\'{}}
+ \mapchar{^^b5}{\mathsymbol{\mu}}
+ \mapchar{^^b6}{\P}
+ \mapchar{^^b7}{\mathsymbol{\cdot}}
+ \mapchar{^^b8}{\c{}}
+ \mapchar{^^b9}{\mathsymbol{\xnolimits^1}}
+ \mapchar{^^ba}{\ordmasculine}
+ \mapchar{^^bb}{\frqq}
+ \mapchar{^^bc}{\mathsymbol{\slashfrac14}}
+ \mapchar{^^bd}{\mathsymbol{\slashfrac12}}
+ \mapchar{^^be}{\mathsymbol{\slashfrac34}}
+ \mapchar{^^bf}{\questiondown}
+ \mapchar{^^c0}{\`A}\lcchar{^^e0}
+ \mapchar{^^c1}{\'A}\lcchar{^^e1}
+ \mapchar{^^c2}{\^A}\lcchar{^^e2}
+ \mapchar{^^c3}{\~A}\lcchar{^^e3}
+ \mapchar{^^c4}{\"A}\lcchar{^^e4}
+ \mapchar{^^c5}{\AA}\lcchar{^^e5}
+ \mapchar{^^c6}{\AE}\lcchar{^^e6}
+ \mapchar{^^c7}{\c C}\lcchar{^^e7}
+ \mapchar{^^c8}{\`E}\lcchar{^^e8}
+ \mapchar{^^c9}{\'E}\lcchar{^^e9}
+ \mapchar{^^ca}{\^E}\lcchar{^^ea}
+ \mapchar{^^cb}{\"E}\lcchar{^^eb}
+ \mapchar{^^cc}{\`I}\lcchar{^^ec}
+ \mapchar{^^cd}{\'I}\lcchar{^^ed}
+ \mapchar{^^ce}{\^I}\lcchar{^^ee}
+ \mapchar{^^cf}{\"I}\lcchar{^^ef}
+ \mapchar{^^d0}{\Eth}\lcchar{^^f0}
+ \mapchar{^^d1}{\~N}\lcchar{^^f1}
+ \mapchar{^^d2}{\`O}\lcchar{^^f2}
+ \mapchar{^^d3}{\'O}\lcchar{^^f3}
+ \mapchar{^^d4}{\^O}\lcchar{^^f4}
+ \mapchar{^^d5}{\~O}\lcchar{^^f5}
+ \mapchar{^^d6}{\"O}\lcchar{^^f6}
+ \mapchar{^^d7}{\mathsymbol{\times}}
+ \mapchar{^^d8}{\O}\lcchar{^^f8}
+ \mapchar{^^d9}{\`U}\lcchar{^^f9}
+ \mapchar{^^da}{\'U}\lcchar{^^fa}
+ \mapchar{^^db}{\^U}\lcchar{^^fb}
+ \mapchar{^^dc}{\"U}\lcchar{^^fc}
+ \mapchar{^^dd}{\'Y}\lcchar{^^fd}
+ \mapchar{^^de}{\Thorn}\lcchar{^^fe}
+ \mapchar{^^df}{\ss}\uctext{\SS{}}
+ \mapchar{^^e0}{\`a}\ucchar{^^c0}
+ \mapchar{^^e1}{\'a}\ucchar{^^c1}
+ \mapchar{^^e2}{\^a}\ucchar{^^c2}
+ \mapchar{^^e3}{\~a}\ucchar{^^c3}
+ \mapchar{^^e4}{\"a}\ucchar{^^c4}
+ \mapchar{^^e5}{\aa}\ucchar{^^c5}
+ \mapchar{^^e6}{\ae}\ucchar{^^c6}
+ \mapchar{^^e7}{\c c}\ucchar{^^c7}
+ \mapchar{^^e8}{\`e}\ucchar{^^c8}
+ \mapchar{^^e9}{\'e}\ucchar{^^c9}
+ \mapchar{^^ea}{\^e}\ucchar{^^ca}
+ \mapchar{^^eb}{\"e}\ucchar{^^cb}
+ \mapchar{^^ec}{\`\i}\ucchar{^^cc}
+ \mapchar{^^ed}{\'\i}\ucchar{^^cd}
+ \mapchar{^^ee}{\^\i}\ucchar{^^ce}
+ \mapchar{^^ef}{\"\i}\ucchar{^^cf}
+ \mapchar{^^f0}{\eth}\ucchar{^^d0}
+ \mapchar{^^f1}{\~n}\ucchar{^^d1}
+ \mapchar{^^f2}{\`o}\ucchar{^^d2}
+ \mapchar{^^f3}{\'o}\ucchar{^^d3}
+ \mapchar{^^f4}{\^o}\ucchar{^^d4}
+ \mapchar{^^f5}{\~o}\ucchar{^^d5}
+ \mapchar{^^f6}{\"o}\ucchar{^^d6}
+ \mapchar{^^f7}{\mathsymbol{\div}}
+ \mapchar{^^f8}{\o}\ucchar{^^d8}
+ \mapchar{^^f9}{\`u}\ucchar{^^d9}
+ \mapchar{^^fa}{\'u}\ucchar{^^da}
+ \mapchar{^^fb}{\^u}\ucchar{^^db}
+ \mapchar{^^fc}{\"u}\ucchar{^^dc}
+ \mapchar{^^fd}{\'y}\ucchar{^^dd}
+ \mapchar{^^fe}{\thorn}\ucchar{^^de}
+ \mapchar{^^ff}{\"y}\uctext{\"Y}
+
+%
+% Zuruecksetzen der Original-Definitionen
+%
+\def\cporiginal{%
+ \mapchar{^^91}{\lq}}
+
+%
+% Modifizierte Definition fuer die Benutzung von dt. Anfuehrungszeichen
+%
+\def\cpgerman{%
+ \mapchar{^^91}{\grq}}
+
+\let\cpvert=\relax
+
+}%\end{newcodepage}
+
+%
+% Einstellen der Code Page ISO-8859-1
+%
+\selectcodepage{8859}
diff --git a/macros/generic/cptex/cp8859w.sty b/macros/generic/cptex/cp8859w.sty
new file mode 100644
index 0000000000..9fd06e5924
--- /dev/null
+++ b/macros/generic/cptex/cp8859w.sty
@@ -0,0 +1,68 @@
+%
+% TeX-Definitionen fr die Code Page ISO-8859-1 (Latin 1)
+% mit Erweiterungen von Microsoft Windows
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+% Changes between Version 1.1 and 1.0:
+% - adding the options `original' and `german' for german quotes
+%
+\typeout{Document Style Option `cp8859w' Version 1.1 <1 Mar 1994>.}
+%
+%
+\@ifundefined{selectcodepage}{\input cp.sty}{}
+
+\activateuppercharset
+
+\newcodepage{8859w}{
+
+ \selectcodepage[original]{8859}
+ \makeactive{"082-"08C,"093-"09C,"09F}
+
+ \mapchar{^^82}{\glq}
+ \mapchar{^^83}{\florin}
+ \mapchar{^^84}{\glqq}
+ \mapchar{^^85}{\dots}
+ \mapchar{^^86}{\dag}
+ \mapchar{^^87}{\ddag}
+ \mapchar{^^88}{\^{}}
+ \mapchar{^^89}{\perthousand}
+ \mapchar{^^8a}{\v S}\lcchar{^^9a}
+ \mapchar{^^8b}{\flq}
+ \mapchar{^^8c}{\OE}\lcchar{^^9c}
+%
+ \mapchar{^^93}{\lqq}
+ \mapchar{^^94}{\rqq}
+ \mapchar{^^95}{\mathsymbol{\bullet}}
+ \mapchar{^^96}{\endash}
+ \mapchar{^^97}{\emdash}
+ \mapchar{^^98}{\~{}}
+ \mapchar{^^99}{\trademark}
+ \mapchar{^^9a}{\v s}\ucchar{^^8a}
+ \mapchar{^^9b}{\frq}
+ \mapchar{^^9c}{\oe}\ucchar{^^8c}
+%
+ \mapchar{^^9f}{\"Y}\lcchar{^^ff}
+%
+ \mapchar{^^ff}{\"y}\ucchar{^^9f}
+
+%
+% Zuruecksetzen der Original-Definitionen
+%
+\def\cporiginal{%
+ \mapchar{^^91}{\lq}%
+ \mapchar{^^93}{\lqq}}
+
+%
+% Modifizierte Definitionen fuer die Benutzung von dt. Anfuehrungszeichen
+%
+\def\cpgerman{%
+ \mapchar{^^91}{\grq}%
+ \mapchar{^^93}{\grqq}}
+
+}%\end{newcodepage}
+
+%
+% Einstellen der Code Page von Microsoft Windows
+%
+\selectcodepage{8859w}
diff --git a/macros/generic/cptex/cpdoc.dvi b/macros/generic/cptex/cpdoc.dvi
new file mode 100644
index 0000000000..bc6d95e6a5
--- /dev/null
+++ b/macros/generic/cptex/cpdoc.dvi
Binary files differ
diff --git a/macros/generic/cptex/cpdoc.tex b/macros/generic/cptex/cpdoc.tex
new file mode 100644
index 0000000000..9a6f911375
--- /dev/null
+++ b/macros/generic/cptex/cpdoc.tex
@@ -0,0 +1,203 @@
+ \documentstyle[12pt,cp]{aufsatz}
+ \selectlanguage{USenglish}
+ \begin{document}
+
+ \section*{Using code pages in \TeX\ (the {\tt cptex} macro package)\hfill{\footnotesize March 28, 1994}}
+
+
+ \section{Introduction}
+
+ Now you can simply type all your national and special characters in \TeX\ as you normally type it with your keyboard and see it on the screen. The only thing you must do is to input the {\tt cp.tex} file (Plain-\TeX) or to include the suitable {\tt cp\it nnn\/}-option in your {\tt\bs documentstyle}-command, where {\it nnn\/} is the number of the code page you are using with your computer.
+
+ Currently the following code pages are available:
+
+ \begin{tabular}{@{}l@{ }l@{}}
+ $\bullet$ CP 437\hfill: & The DOS and OS/2 code page 437 (U.~S. PC encoding).\\
+ $\bullet$ CP 850\hfill: & The DOS and OS/2 code page 850 (International PC encoding).\\
+ $\bullet$ CP 8859\hfill: & The ANSI code page ISO-8859-1 (Latin 1)\\
+ & used by Microsoft Windows and most Unix systems.\\
+ $\bullet$ CP 8859w\hfill: & The ANSI code page ISO-8859-1 (Latin 1)\\
+ & with extensions from Microsoft Windows.\\
+ \end{tabular}
+
+
+ \section{Registration}
+
+ If you like this \TeX\ macro package, please send me a fee about \$\,25 or more for registration, so that I can make them better and create more \TeX-macros. If you send \$\,50 or more you will receive additional macros for a fine {\tt\bs slashfrac} and for using PostScript fonts and colors (needed by {\tt cpps}!). Please state the version of the software that you currently have.
+
+ Send check or money order to: \begin{tabular}[t]{@{}l@{}}
+ Martin Kr\"amer\\
+ Adolf-Kolping-Stra\ss{}e 4\\
+ D--49179 Ostercappeln\\
+ (Germany)\\
+ \end{tabular}
+
+ My e-mail address is: kraemer@mathematik.Uni-Osnabrueck.DE
+
+ P.~S.: If you have some nice pictures from {\it Marina Sirtis\/} ({\it Counselor Deanna Troi\/} in STTNG), please mail me.
+
+
+ \newpage
+ \section{List of files}
+
+ This package contains the following files:
+
+ \begin{tabular}{@{}ll@{}}
+ \tt cpdoc.tex & This documentation as \LaTeX-file\\
+ \tt cpdoc.dvi & This documentation as DVI-file\\
+ \tt cptable.ps & A sample PostScript-file with tables of the code pages\\
+ \tt cpemtex.zip & Some {\tt .bat}- and {\tt .cmd}-files for em\TeX-installation\\
+ \tt lamac.tex & Some macro extensions from \LaTeX\ for use with Plain-\TeX\\
+ \tt cp.tex & The main Plain-\TeX\ input file\\
+ \tt cpps.tex & The Plain-\TeX\ input file for use with PostScript-DVI-drivers\\
+ \tt cp.sty & The main style option file\\
+ \tt cp437.sty & The style option file for code page 437\\
+ \tt cp850.sty & The style option file for code page 850\\
+ \tt cp8859.sty & The style option file for code page 8859\\
+ \tt cp8859w.sty & The style option file for code page 8859w\\
+ \tt cpps.sty & The style option file for use with PostScript-DVI-drivers\\
+ \end{tabular}
+
+
+ \section{Installation}
+
+ To use this macro package you need a \TeX\ executable program from version 3 on, i.~e.\ a \TeX\ with full 8-bit character support.
+
+ To install the package just copy all the {\tt .tex}- and {\tt .sty}-files in your {\sl texinputs\/}-directory.
+
+ If you want to use the PostScript-option {\tt cpps}, you need additionally the style file {\tt colors.sty} and some macros for using PostScript-fonts in \LaTeX\ which you can get from me (see Registration).
+
+
+ \subsection{Installation notes for em\TeX}
+
+ To use this package with em\TeX\ you must first rebuild the {\tt .fmt}-files with options ``{\tt-8 -o -r}'' to enable full 8-bit character support. For this purpose you can use the included {\tt .bat}- and {\tt .cmd}-files for DOS and OS/2. Just unzip the {\tt cpemtex.zip}-file with the option {\tt-d} and copy the files from the created {\tt tex8fmts}- and {\tt btex8fmt}-directories in the {\tt emtex\bs texfmts}- and {\tt emtex\bs btexfmts}-directories respectively and execute the copied {\tt .bat}- or {\tt .cmd}-files.
+
+
+ \section{Features}
+
+ The code page styles offer a lot of features against the standard \TeX-macros for typing national and special characters. Some of these things are listed below:
+
+ \begin{itemize}
+ \item The non-math version of the commands for national and special characters work now correctly also in math mode (with respect of {\sl displaystyle}, {\sl textstyle}, {\sl scriptstyle\/} and {\sl scriptscriptstyle\/}).
+
+ \item The special math constructs used for some characters work also properly in text mode with the correct font selection.
+
+ \item The commands work properly in the protect modes of {\tt\bs write} and {\tt\bs edef}/{\tt\bs xdef}. The commands expand simply to itselves with proper spacing after control sequences consisting of letters in protected write mode.
+
+ \item The control sequences consisting of letters ignore also a following empty pair of braces (``{\tt\{\}}'') for easy usage and proper kerning (e.~g.\ {\tt\bs ss\{\}} is always correct: {\tt Stra\bs ss\{\}e} or {\tt Flu\bs ss\{\}\char32}).
+
+ \item All commands for national characters work properly in any combination of {\tt\bs lowercase} and {\tt\bs uppercase} (e.~g.\ {\tt\bs uppercase\{\bs ae\{\} \"a \ss{}\}} produces ``{\tt\bs AE\{\} \"A \bs SS\{\}}'').
+
+ \item The additional code page characters work fine in {\sl verbatim\/}-environments, they just produce their layouts. And most of them work also fine in {\sl tt}-style, i.~e.\ then they have the same width.
+ \end{itemize}
+
+
+ \section{Usage}
+
+ To use the {\tt cptex} macro package just put an ``{\tt\bs input cp}''-command at the beginning of your document (Plain-\TeX) or put the suitable {\tt cp\it nnn\/}-option in your {\tt\bs documentstyle}-command, where {\it nnn\/} is the number of the code page you are using with your computer. The main {\tt cp}-option selects by default no code page as the {\tt cp.tex}-file does.
+
+ If you are using also the file {\tt german.sty}, then it must be loaded before any {\tt cp\it xxx\/}-file to work correctly.
+
+
+ \subsection{Selecting a code page}
+
+ With the command {\tt\bs selectcodepage[{\it opt1}, {\it opt2}, {\it\dots}]\{{\it number\/}\}} you select the code page {\it number\/} with options {\it opt1}, {\it opt2}, {\it\dots}. The option-list can be left out. The command sets implicitly a language-specific option (see {\tt\bs selectlanguage}) if specified in the code page and {\tt german.sty} is used. This can be overriden by the option {\tt original}.
+
+ The {\tt\bs selectlanguage}-command from {\tt german.sty} will also activate or deactivate a given language-specific option.
+
+ The {\tt cp\it nnn\/}-options select by default the code page {\it nnn\/} with no explicit options.
+
+
+ \subsubsection{Common options for all code pages}
+
+ The following options are available for all code pages:
+
+ \begin{tabular}{@{}ll@{}}
+ \tt original & Resets original meanings for the specific code page\\
+ \tt german & Language-specific option for German (see specific code page)\\
+ \tt ascii & Using true ASCII instead of \TeX's ASCII version (this affects\\
+ & the characters {\tt *}, {\tt <}, {\tt >}, {\tt \bs\{}, {\tt |} and {\tt \bs\}} to work also fine in non-math mode)\\
+ \tt fullascii & Using full ASCII with apostrophe and grave accent instead of quotes\\
+ \tt vert & Using {\tt\bs vert} instead of broken vertical line\\
+ & (only available if character 124 is a broken vertical line)\\
+ \end{tabular}
+
+ This options can be also used with the dummy code page {\tt texascii}, which is defined in {\tt cp.tex} or {\tt cp.sty}.
+
+
+ \subsubsection{Code page 437 (U.~S. PC encoding)}
+
+ This code page is used by DOS and OS/2. The corresponding style option {\tt cp437} enables the full 256 character set (except {\sc TAB}, {\sc LF} and {\sc CR}, which keep their special meanings -- but the symbols are accessible via macros). In Plain-\TeX\ the male/female symbols and the musical notes are currently not available.
+
+ The following options are available:
+
+ \begin{tabular}{@{}ll@{}}
+ \tt german & Using es-zet instead of beta\\
+ \tt emdash & Using em-dash instead of graphic symbol for horizontal line\\
+ \tt neg & Using logical not instead of end of line symbol\\
+ \tt Vert & Using {\tt\bs vert} and {\tt\bs Vert} instead of the corresponding graphic symbols\\
+ \end{tabular}
+
+
+ \subsubsection{Code page 850 (International PC encoding)}
+
+ This code page is used by DOS and OS/2. The corresponding style option {\tt cp850} enables the full 256 character set (except {\sc TAB}, {\sc LF} and {\sc CR}, which keep their special meanings -- but the symbols are accessible via macros). In Plain-\TeX\ the male/female symbols and the musical notes are currently not available.
+
+ The following options are available:
+
+ \begin{tabular}{@{}ll@{}}
+ \tt emdash & Using em-dash instead of graphic symbol for horizontal line\\
+ \tt Vert & Using {\tt\bs vert} and {\tt\bs Vert} instead of the corresponding graphic symbols\\
+ \end{tabular}
+
+
+ \subsubsection{Code page ISO-8859-1 (Latin 1)}
+
+ This ANSI code page is used by Microsoft Windows and most Unix systems. The corresponding style option {\tt cp8859} enables all defined characters in the upper half of the character set. The undefined charcters are made invalid, i.~e.\ they produce a \TeX-error if encountered.
+
+ The following option is available:
+
+ \begin{tabular}{@{}ll@{}}
+ \tt german & Using german right quote instead of english left quote\\
+ \end{tabular}
+
+
+ \subsubsection{Code page ISO-8859-1 (Latin 1) with extensions}
+
+ This code page is a superset of the standard ANSI code page with some additional characters used by Microsoft Windows. The corresponding style option {\tt cp8859w} enables all defined characters in the upper half of the character set. The undefined charcters are made invalid, i.~e.\ they produce a \TeX-error if encountered.
+
+ The following option is available:
+
+ \begin{tabular}{@{}ll@{}}
+ \tt german & Using german right quotes instead of english left quotes\\
+ \end{tabular}
+
+
+ \subsection{Character layout improvements}
+
+ To improve the quality of the printed characters you have the following possibilities:
+
+ \begin{enumerate}
+ \item If you have the \AmSTeX-fonts available, then include a macro with the definitions for the additional \AmSTeX-symbols before including any {\tt cp\it xxx\/}-file.
+
+ \item If you are using a PostScript-DVI-driver, then include also the {\tt cpps.tex}-file (after the {\tt cp.tex}-file) in your document (Plain-\TeX) or the {\tt cpps}-option in your {\tt\bs documentstyle}-command.
+
+ \item Use possibilities 1 and 2 together. This gives nearly a perfect layout for all characters.
+ \end{enumerate}
+
+
+ \section{Future enhancements}
+
+ The following tasks will be implemented in a future version of this package:
+
+ \begin{itemize}
+ \item Implementing an option for making some special characters (accents and the surd-symbol) to work as the corresponding macros.
+ \item Making some character layout improvements with \LamSTeX-fonts.
+ \item Support for the new \TeX\ DC/EC-fonts.
+ \item Full support for PostScript fonts.
+ \item New code pages (e-mail me your wishes).
+ \item Support for VM/CMS-\TeX\ (if someone has an EBCDIC-\TeX\ with 8-bit character support, then please e-mail me for some testing).
+ \item Adding a program to convert \TeX-files between the code pages.
+ \end{itemize}
+
+ \end{document}
diff --git a/macros/generic/cptex/cpps.sty b/macros/generic/cptex/cpps.sty
new file mode 100644
index 0000000000..edc3e0d7c1
--- /dev/null
+++ b/macros/generic/cptex/cpps.sty
@@ -0,0 +1,56 @@
+%
+% TeX-Definitionen fr die IBM PC Codepages (PostScript-Version)
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+\typeout{Document Style Option `cpps' Version 1.0 <3 Feb 1994>.}
+%
+%
+\@ifundefined{nocolors}{\input colors.sty}{}
+
+%
+% Inverse Darstellung eines Zeichens (auf \strut-Hoehe)
+%
+\def\invsymbol#1{\leavevmode
+ {\setbox0=\hbox{#1}\hbox{\strut\leaders\vrule\hskip\wd0}\bgcolor\llap{\box0}}}
+
+%
+% PC codes 0..31
+%
+\def\blacksmiley{{\setbox0=\hbox{$\vcenter{}$}\xooalign{%
+ \setbox0=\hbox{$\m@th\vphantom{|}\bigcirc$}%
+ \unitlength=\ht0 \advance\unitlength by\dp0
+ \lower\dp0\hbox to\wd0{\hfil
+ \begin{picture}(1,1)\put(0.5,0.5){\circle*{0.8}}\end{picture}\hfil}\crcr
+ \hfil\raise0.5\ht0\hbox{$\m@th\bgcolor\cdot\cdot$}\hfil\crcr
+ \hfil\lower0.25\ht0\hbox{$\m@th\bgcolor\scriptscriptstyle\smile$}\hfil}}}
+\def\male{\leavevmode{\unitlength=1ex \begin{picture}(1,1)
+ \put(0.6,1.1){\makebox(0,0){$\m@th\scriptscriptstyle\nearrow$}}
+ \put(0.5,0.5){\bgcolor\circle*{1}}
+ \put(0.5,0.5){\circle{1}}
+ \end{picture}}}
+\def\sun{{\xooalign{$\m@th\bigstar$\crcr
+ \hfil$\m@th\bgcolor\cdot$\hfil}}}
+%
+% PC codes 128..255
+%
+\def\currency{{\xooalign{\hfil$\m@th\times$\hfil\crcr
+ \hfil\kern0.05em$\m@th\bgcolor\bullet$\hfil\crcr
+ \hfil\kern0.05em$\m@th\circ$\hfil}}}
+
+\def\graygraphbox{{\adjustluminance{0.75}\graphsymbol{\leaders\vrule\hfill}}}
+\def\Graygraphbox{{\adjustluminance{0.5}\graphsymbol{\leaders\vrule\hfill}}}
+\def\GRAYGRAPHBOX{{\adjustluminance{0.25}\graphsymbol{\leaders\vrule\hfill}}}
+
+\newtypeface{\syr}{psyr}
+\graphlinewidth=1pt % bei 12pt-Schrift
+\def\inttop{\graphsymbol{\setbox2=\hbox{\syr\char"0F3}%
+ \@tempdima=\ht1 \advance\@tempdima by-0.8\dp2
+ \advance\@tempdima by\dp\strutbox
+ \hss\smash{\lower\@tempdima\copy2}\kern0.095\wd2\hss}}
+\def\intbot{\graphsymbol{\setbox2=\hbox{\syr\char"0F5}%
+ \@tempdima=\ht1 \advance\@tempdima by1.01\ht2
+ \advance\@tempdima by-\ht\strutbox
+ \hss\lower\@tempdima\copy2\kern0.095\wd2\hss}}
+
+\def\copyright{{\syr\char"0D3}}
diff --git a/macros/generic/cptex/cpps.tex b/macros/generic/cptex/cpps.tex
new file mode 100644
index 0000000000..adce69387a
--- /dev/null
+++ b/macros/generic/cptex/cpps.tex
@@ -0,0 +1,12 @@
+%
+% TeX-Definitionen fr die IBM PC Codepages in Plain-TeX (PostScript-Version)
+%
+% (C) 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+
+\def\makeatletter{\catcode`\@=11\relax}
+\def\makeatother{\catcode`\@=12\relax}
+
+\chardef\atcode=\catcode`\@\makeatletter
+\input cpps.sty
+\catcode`\@=\atcode
diff --git a/macros/generic/cptex/cptable.ps b/macros/generic/cptex/cptable.ps
new file mode 100644
index 0000000000..f0123ddb0e
--- /dev/null
+++ b/macros/generic/cptex/cptable.ps
@@ -0,0 +1,1243 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.526b Copyright 1986, 1993 Radical Eye Software
+%%Title: cptable.dvi
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: Symbol
+%%EndComments
+%DVIPSCommandLine: dvips cptable -o
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1994.02.24:1347
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
+0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
+begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
+array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
+FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
+pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
+0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
+ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
+/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
+sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
+}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
+moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
+B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
+3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
+-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
+3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: texps.pro
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont load]cvx def}def
+/ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def
+/ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def
+end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale false def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /savegstack { globalstack { [ 1 index load aload pop
+} forall } def /restoregstack { globalstack length { ] store } repeat
+} def /globalstack [ /colorstack /headingscolor ] def /colorstack [
+-1 ] def /headingscolor [ currentrgbcolor ] def /bop-hook { /headingscolor
+load aload pop setrgbcolor } def end /eop{clear savegstack SI restore
+restoregstack showpage userdict /eop-hook known{eop-hook}if} store
+/eos{clear savegstack SS restore restoregstack} bind store
+
+ /colorstack [ /colorstack load aload pop currentrgbcolor ] store
+
+@fedspecial end TeXDict begin
+39158280 55380996 1000 300 300 (cptable.dvi) @start /Fa
+1 111 df<383E004CC3004D03804E03809E03809C03801C03801C038038070038070038
+0700380E00700E40700E40701C40701C80E00C8060070012127C9117>110
+D E /Fb 6 122 df<70F8F8F8700505788416>46 D<03F80FFC1FFE3C1E780C7000E000
+E000E000E000E000F000700778073E0E1FFC0FF803F010127D9116>99
+D<FC7C00FDFE00FFFF001F07801E03C01C01C01C00E01C00E01C00E01C00E01C00E01C00
+E01C01C01E03C01F07801FFF001DFE001C78001C00001C00001C00001C00001C00001C00
+00FF8000FF8000FF8000131B7F9116>112 D<0FEC3FFC7FFCF03CE01CE01C70007F801F
+F007F8003C600EE00EF00EF81EFFFCFFF8C7E00F127D9116>115
+D<0300000700000700000700000700007FFF00FFFF00FFFF000700000700000700000700
+0007000007000007000007010007038007038007038007870003FE0001FC0000F8001117
+7F9616>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C00071C0003
+9C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E00001C00079
+C0007BC0007F80007F00003C0000131B7F9116>121 D E /Fc 1
+98 df<00200000700000700000700000B80000B80000B800011C00011C00031E00020E00
+020E0004070007FF000407000803800803801803C01801C03801C0FC07F815157F9419>
+97 D E /Fd 37 128 df<00800100020006000C000C0018001800300030003000600060
+0060006000E000E000E000E000E000E000E000E000E000E000E000E00060006000600060
+00300030003000180018000C000C000600020001000080092A7C9E10>40
+D<8000400020003000180018000C000C0006000600060003000300030003000380038003
+8003800380038003800380038003800380038003000300030003000600060006000C000C
+00180018003000200040008000092A7E9E10>I<60F0F0701010101020204080040C7C83
+0C>44 D<010007003F00C700070007000700070007000700070007000700070007000700
+07000700070007000700070007000700070007000700FFF80D1C7C9B15>49
+D<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C
+000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C
+00001C00001C00001C0001FFC0121C7F9B15>52 D<4000007FFF807FFF007FFF00400200
+80040080040080080000100000100000200000600000400000C00000C00001C000018000
+018000038000038000038000038000078000078000078000078000078000078000030000
+111D7E9B15>55 D<03C00C301818300C700C600EE006E006E007E007E007E007E0076007
+700F300F18170C2707C700060006000E300C780C78187018203010C00F80101D7E9B15>
+57 D<FFFFC0000F00F0000F003C000F000E000F0007000F0007000F0003800F0003C00F
+0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F
+0001E00F0001C00F0001C00F0003C00F0003800F0007800F0007000F000E000F001C000F
+007000FFFFC0001B1C7E9B20>68 D<FFFFFC0F003C0F000C0F00040F00040F00060F0002
+0F00020F01020F01000F01000F01000F03000FFF000F03000F01000F01000F01000F0101
+0F00010F00020F00020F00020F00060F00060F000C0F003CFFFFFC181C7E9B1C>I<FFFF
+F80F00780F00180F00080F00080F000C0F00040F00040F01040F01000F01000F01000F03
+000FFF000F03000F01000F01000F01000F01000F00000F00000F00000F00000F00000F00
+000F00000F0000FFF800161C7E9B1B>I<FFF01FE00F0007800F0006000F0004000F0008
+000F0010000F0020000F0040000F0080000F0100000F0200000F0600000F0F00000F1780
+000F2780000F43C0000F81E0000F01E0000F00F0000F0078000F0078000F003C000F003E
+000F001E000F000F000F000F800F000FC0FFF03FF01C1C7F9B20>75
+D<FFF8000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00
+100F00300F00700F01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8000F8000F8000B
+C00178000BC00178000BC001780009E002780009E002780008F004780008F004780008F0
+047800087808780008780878000878087800083C107800083C107800083C107800081E20
+7800081E207800081E207800080F407800080F4078000807807800080780780008078078
+0008030078001C03007800FF8307FF80211C7E9B26>I<003F800000E0E0000380380007
+001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F0
+0001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C078
+0003C0380003803C0007801C0007000E000E0007001C000380380000E0E000003F80001B
+1E7E9C20>79 D<07E0801C1980300580300380600180E00180E00080E00080E00080F000
+00F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001
+C08001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>83
+D<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F00
+20000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
+00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F80
+0003FFFC001B1C7F9B1E>I<FFF07FC00FC01E0007800C0007C0080003C0100001E02000
+01F0200000F0400000788000007C8000003D0000003E0000001F0000000F0000000F8000
+000F80000013C0000023E0000021E0000040F0000080F8000080780001007C0002003E00
+02001E0006001F001F001F80FF807FF01C1C7F9B1F>88 D<1FC000307000783800781C00
+301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40
+304E801F870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C00001C
+00001C00001C00001C00001C7C001D87001E01801C00C01C00E01C00601C00701C00701C
+00701C00701C00701C00701C00601C00E01C00C01E018019070010FC00141D7F9C17>I<
+03F80C0C181E301E700C6000E000E000E000E000E000E00060007002300218040C1803E0
+0F127F9112>I<07E00C301818300C700E6006E006FFFEE000E000E000E0006000700230
+0218040C1803E00F127F9112>101 D<00F8018C071E061E0E0C0E000E000E000E000E00
+0E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+7FE00F1D809C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00001C7C001C87001D03001E03801C03801C03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>104
+D<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C001C001C001C001C001C00FF80091D7F9C0C>108 D<FC7E07E0001C838838001D
+019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01
+C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
+1C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014127F91
+17>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0
+E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D87001E01
+801C01C01C00E01C00E01C00701C00701C00701C00701C00701C00701C00E01C00E01C01
+C01E01801D07001CFC001C00001C00001C00001C00001C00001C00001C0000FF8000141A
+7F9117>I<FCE01D381E781E781C301C001C001C001C001C001C001C001C001C001C001C
+001C00FFC00D127F9110>114 D<1F9020704030C010C010E010F8007F803FE00FF000F8
+80388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C
+00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003
+C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C07800C07800E1B8003E3F014127F9117>I<FF3FC7
+E03C0703C01C0701801C0701001C0B01000E0B82000E0B82000E1182000711C4000711C4
+000720C40003A0E80003A0E80003C0680001C0700001C0700001803000008020001B127F
+911E>119 D<FF07E03C03801C01001C01000E02000E02000F0600070400070400038800
+03880003C80001D00001D00000E00000E00000E000004000004000008000008000F08000
+F10000F30000660000380000131A7F9116>121 D<FFFFF01401808B15>123
+D<6060F0F0F0F060600C047C9C15>127 D E /Fe 10[34 1[34 31[39
+211[{}3 50.000000 /Symbol rf /Ff 2 104 df<001FF803007FFE0601E0078C038001
+D8060000700C0000700C0000F0180001983000070C30000E0C3000180C60003006600060
+066000C006600180066003000660060006600C00063018000C3070000C30E0000C198000
+180F0000300E0000300E0000601B8001C031E00780607FFE00C01FF800201D7D9C27>63
+D<3E00003FC01C01F0FC003F9C000F1C707F8C71C1C07F01E07800F06000700000780000
+3800003C00FC3C03031C0E009E1C005E18005E38003E70003E70001EF0001EF0001EF000
+1EF0001EF0001CF0001CF0001CF0003C7000387800383800701C00700E00E00703C003FF
+0000FC0017257EA31C>103 D E /Fg 1 37 df<000003E000000C100000180800003008
+000060040000E0040001C0040001C03C0001C03C00038038000380300003800000038000
+0007000000070000000700000007000000FFF800000E0000000E0000000E0000001C0000
+001C0000001C0000001C00000038000000380000003800000FB000203FF0004060F80040
+C0FC0180818F87008707FE007C01F8001E237CA226>36 D E /Fh
+14 117 df<FFF80D017E9212>22 D<0008001800300030003000600060006000C000C000
+C0018001800180030003000600060006000C000C000C0018001800180030003000300060
+0060006000C000C0000D217E9812>47 D<07C018303018701C600C600CE00EE00EE00EE0
+0EE00EE00EE00EE00EE00E600C600C701C30181C7007C00F157F9412>I<06000E00FE00
+0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0
+0B157D9412>I<0F8030E040708030C038E0384038003800700070006000C00180030006
+000C08080810183FF07FF0FFF00D157E9412>I<0FE030306018701C701C001C00180038
+006007E000300018000C000E000EE00EE00EC00C401830300FE00F157F9412>I<003000
+30007000F001F001700270047008701870107020704070C070FFFE007000700070007000
+7003FE0F157F9412>I<FE0003F81E0003C0170005C0170005C0170005C0138009C01380
+09C011C011C011C011C011C011C010E021C010E021C0107041C0107041C0107041C01038
+81C0103881C0101D01C0101D01C0100E01C0100E01C0380E01C0FE040FF81D177F9620>
+77 D<FFFE001C03801C00C01C00601C00701C00701C00701C00701C00601C00C01C0380
+1FFE001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF8000
+14177F9618>80 D<7FFFF860381840380840380880380480380480380400380000380000
+380000380000380000380000380000380000380000380000380000380000380000380000
+380003FF8016177F9619>84 D<3FC0706070302038003803F81E3830387038E039E039E0
+7970FF1F1E100E7F8D12>97 D<F8F8003B1C003C0E00380E00380E00380E00380E00380E
+00380E00380E00380E00380E00380E00FE3F80110E7F8D14>110
+D<07C018303018600C600CE00EE00EE00EE00EE00E701C3018183007C00F0E7F8D12>I<
+080008000800180018003800FFC038003800380038003800380038003840384038403840
+1C800F000A147F930E>116 D E /Fi 3 95 df<0F801FC0306060306030C018C018C018
+C0186030603030601FC00F800D0E7E8E12>14 D<1F00043F80047FC00460F00CC0780CC0
+3C18800FF88007F08003E016097E8C1B>24 D<00400000E00000E00001B00001B0000318
+00031800060C00060C000C06000C06001803001803003001803001806000C06000C0C000
+60C0002013137E9218>94 D E /Fj 12 103 df<003F000000E180000380E02007006040
+0E0070401C0030403C0038803C003880780039007800390078003A00F0003A00F0003C00
+F0003800F000380070003800700078003000B800380318401C1C188007E007001B157E94
+1F>11 D<00003E000000C180000300C0000400C0000800E0001000E0001000E0002000E0
+004000E0004001C0008001C00080018000800380010007000101FE0001021C000103EE00
+020007000200070002000780020007800400078004000780040007800400078008000F00
+08000F0008000E0008001E0014001C0014003800120070001300E0002081C000207E0000
+200000002000000040000000400000004000000040000000800000008000000080000000
+800000001B2D7FA21C>I<000F80003FF00040F000406000C00000C00000C00000C00000
+6000006000007000007000003800003800001C00003E0000CE00038F000607000C07001C
+0780380780380380700380700380700380E00300E00700E00700E00600600E00600C0030
+0C003018001C300007C00014247EA316>14 D<00C0060001C00E0001C00E0003801C0003
+801C0003801C0003801C00070038000700380007003800070038000E0070000E0070000E
+0070000E0070801E00E1001E00E1001E01E1001E0262003B0C620039F03C003800000038
+00000070000000700000007000000070000000E0000000E0000000E0000000E0000000C0
+00000019207F941D>22 D<0FFFFF1FFFFF3FFFFF70418040410080810080810000810001
+83000103000103000303000303000603000603000E03000E03000C03801C03801C038018
+018018157E941C>25 D<007FFF8001FFFF8003FFFF800783C0000E01C0001C00E0003800
+E0003800E0007000E0007000E0007000E000E001C000E001C000E001C000E0038000E003
+000060070000600E0000301800001870000007C0000019157E941C>27
+D<0FFFF81FFFFC3FFFF870200040200080200080600000600000600000C00000C00000C0
+0000C00001C00001800001800003800003800003800007000003000016157E9415>I<70
+F8F8F87005057C840E>58 D<0000001800000078000001E00000078000001E0000007800
+0003E000000F8000003C000000F0000003C000000F0000003C000000F0000000F0000000
+3C0000000F00000003C0000000F00000003C0000000F80000003E0000000780000001E00
+00000780000001E000000078000000181D1C7C9926>60 D<000080000180000180000300
+000300000300000600000600000600000C00000C00000C00001800001800001800003000
+00300000300000600000600000600000C00000C00000C000018000018000018000018000
+0300000300000300000600000600000600000C00000C00000C0000180000180000180000
+300000300000300000600000600000600000C00000C00000C0000011317DA418>I<C000
+0000F00000003C0000000F00000003C0000000F00000003E0000000F80000001E0000000
+780000001E0000000780000001E00000007800000078000001E00000078000001E000000
+78000001E000000F8000003E000000F0000003C000000F0000003C000000F0000000C000
+00001D1C7C9926>I<00001E00000063800000C7800001C7800001C30000018000000380
+000003800000038000000380000007000000070000000700000007000000FFF800000E00
+00000E0000000E0000000E0000000E0000000E0000001C0000001C0000001C0000001C00
+00001C000000380000003800000038000000380000003800000070000000700000007000
+00007000000060000000E0000000E0000000C0000000C0000071C00000F1800000F10000
+00620000003C000000192D7EA218>102 D E /Fk 1 14 df<F0F0F8F0F0F0F0F0F0F0F0
+606060606060606005137AA310>13 D E /Fl 11 115 df<FEFEFEFEFEFEFE7E07087D87
+0E>5 D<00000400000000000400000000000E00000000000E00000000000E0000000000
+1F00000000001F00000000001F00000000003F80000000003F80000000003F8000000000
+7FC0000000007FC0000000007FC000000000FFE00000FFFFFFFFFFE07FFFFFFFFFC03FFF
+FFFFFF800FFFFFFFFE0007FFFFFFFC0003FFFFFFF80000FFFFFFE000007FFFFFC000001F
+FFFF0000000FFFFE00000007FFFC00000007FFFC0000000FFFFE0000000FFFFE0000000F
+FFFE0000001FFFFF0000001FFBFF0000001FF1FF0000003FE0FF8000003F803F8000003F
+001F8000007C0007C00000780003C00000700001C00000C0000060000080000020002B29
+7EA22F>70 D<7FFFFFC0FFFFFFE07FFFFFC07FFFFFC03FFFFF803FFFFF803FFFFF801FFF
+FF001FFFFF000FFFFE000FFFFE0007FFFC0007FFFC0003FFF80003FFF80003FFF80001FF
+F00001FFF00000FFE00000FFE000007FC000007FC000003F8000003F8000003F8000001F
+0000001F0000000E0000000E0000000400001B1E7C9C24>72 D<40000000F0000000FC00
+0000FF000000FFC00000FFF00000FFFC0000FFFF8000FFFFE000FFFFF800FFFFFE00FFFF
+FF80FFFFFFE0FFFFFFF8FFFFFFFCFFFFFFF8FFFFFFE0FFFFFF80FFFFFE00FFFFF800FFFF
+E000FFFF8000FFFC0000FFF00000FFC00000FF000000FC000000F0000000C00000001E1D
+7C9A27>I<0000000C0000003C000000FC000003FC00000FFC00003FFC0000FFFC0007FF
+FC001FFFFC007FFFFC01FFFFFC07FFFFFC1FFFFFFC7FFFFFFCFFFFFFFC7FFFFFFC1FFFFF
+FC07FFFFFC01FFFFFC007FFFFC001FFFFC0007FFFC0000FFFC00003FFC00000FFC000003
+FC000000FC0000003C0000000C1E1D7C9A27>I<00040000000E0000000E0000001B0000
+001B00000031800000318000003180000060C0000060C00000C0600000C0600001803000
+0180300003001800030018000300180006000C0006000C000C0006000C00060018000300
+18000300300001803000018030000180600000C0600000C0FFFFFFE07FFFFFC01B1E7C9C
+24>77 D<00040000000E0000000E0000001F0000001F0000003F8000003F8000003F8000
+007FC000007FC00000FFE00000FFE00001FFF00001FFF00003FFF80003FFF80003FFF800
+07FFFC0007FFFC000FFFFE000FFFFE001FFFFF001FFFFF003FFFFF803FFFFF803FFFFF80
+7FFFFFC07FFFFFC0FFFFFFE07FFFFFC01B1E7C9C24>I<FFF0007FC0FFF0007FC00F8000
+1E00078000080007C000180003E000100001E000200001F000200000F000400000F80080
+00007C008000003C0100003FFFFFFF00001E020000001F040000000F8400000007880000
+0007D800000003D000000003E000000001E000000001E000003FFFFFFF000001E0000000
+01E000000001E000000001E000000001E000000001E000000001E000000001E000000001
+E00000003FFF0000003FFF000022227FA125>85 D<FFFFC0FFFFC0C00000C00000C00000
+C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000
+C0000080000012137DA219>112 D<FFFFC0FFFFC00000C00000C00000C00000C00000C0
+0000C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000C0000040
+12137DA219>I<0000070000000000FFF800000007F8FF0000000F0007800000380000E0
+0000700000700000C000001800018000000C000300000006000600000003000C3FFF8001
+800C0780F001801807803800C03007803C00603007801E00603007801E00606007801E00
+306007801E00306007801E00306007803C0030600780380030C00780F00018C007FF8000
+18C00780E000186007807800306007803800306007803C00306007803C00306007803C00
+303007803C00603007803C00603007803C00601807803C10C00C07801C11800C07800E21
+80063FF007C300030000000600018000000C0000C00000180000700000700000380000E0
+00000F000780000007F8FF00000000FFF800000000070000002D2D80A32F>I
+E /Fm 3 38 df<000603000E0700381C00703800C0600381C00703801C0E00381C00E070
+00E07000381C001C0E000703800381C000C06000703800381C000E0700060318147D8F1E
+>28 D<C06000E07000381C001C0E000703800381C000C06000703800381C000E07000E07
+00381C00703800C0600381C00703801C0E00381C00E07000C0600018147D8F1E>I<0003
+830001FE00003E00001E0000360000660000C6000186000703000E02001C000038000070
+0000E0000180000300000600000C0000380000700000E00000C0000018167D901E>37
+D E /Fn 4 122 df<007C0001FF000783C00E00E018003030001830001860000C60000C
+C00006C00006C00006C00006C0000660000C60000C3000183000181800300E00E00783C0
+01FF00007C0017178B8B15>100 D<3C7EFFFFFFFF7E3C0808848308>113
+D<00FC0007FF800FFFC01FFFE03FFFF07FFFF87FFFF8FFFFFCFFFFFCFFFFFCFFFFFCFFFF
+FCFFFFFCFFFFFCFFFFFC7FFFF87FFFF83FFFF01FFFE00FFFC007FF8000FC0016168B8A15
+>116 D<0000FFC000000007FFF80000001FFFFE0000003FFFFF000000FFFFFFC00001FF
+FFFFE00003FFFFFFF00007FFFFFFF8000FFFFFFFFC001FFFFFFFFE001FFFFFFFFE003FFF
+FFFFFF003FFFFFFFFF007FFFFFFFFF807FFFFFFFFF807FFFFFFFFF80FFFFFFFFFFC0FFFF
+FFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFF
+FFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC07FFFFFFFFF807FFFFFFFFF807FFFFFFFFF803FFF
+FFFFFF003FFFFFFFFF001FFFFFFFFE001FFFFFFFFE000FFFFFFFFC0007FFFFFFF80003FF
+FFFFF00001FFFFFFE00000FFFFFFC000003FFFFF0000001FFFFE00000007FFF800000000
+FFC000002A2A95942A>121 D E /Fo 3 95 df<0000C00003C0000F00003C0000F00003
+C0000F00003C0000F00000F000003C00000F000003C00000F000003C00000F000003C000
+00C012127D8E18>60 D<C00000F000003C00000F000003C00000F000003C00000F000003
+C00003C0000F00003C0000F00003C0000F00003C0000F00000C0000012127D8E18>62
+D<80000140000230000C1E007807FFE000FF0018067D891E>94 D
+E /Fp 35 128 df<70F8F8F87005057C8E0E>1 D<800002C0000660000C300018180030
+0C00600600C003018001830000C600006C00003800003800006C0000C600018300030180
+0600C00C006018003030001860000CC000068000021718789727>I<00C00000C00000C0
+0000C00000C000E0C1C0F0C3C038C7000EDC0003F00000C00003F0000EDC0038C700F0C3
+C0E0C1C000C00000C00000C00000C00000C00012157D9619>I<00008000000001C00000
+0003E000000007F000000003E000000001C0000000008000000000000000000000000000
+00000000000000000000000000000000000000FFFFFFFF80FFFFFFFF8000000000000000
+000000000000000000000000000000000000000000000000008000000001C000000003E0
+00000007F000000003E000000001C000000000800000211C7D9928>I<00008000000180
+000001800000018000000180000001800000018000000180000001800000018000000180
+000001800000018000000180000001800000018000FFFFFFFFFFFFFFFF00018000000180
+000001800000018000000180000001800000018000000180000001800000018000000180
+00000180000001800000018000FFFFFFFFFFFFFFFF20227DA027>6
+D<00007FC000000003FFF80000000F803E0000003C0007800000700001C00000C0000060
+00018000003000030000001800060000000C000C00000006000C00000006001800000003
+001800000003003000000001803000000001806000000000C06000000000C06000000000
+C0C00000000060C00000000060C00000000060C00000000060C00000000060C000000000
+60C00000000060C00000000060C00000000060C00000000060C000000000606000000000
+C06000000000C06000000000C03000000001803000000001801800000003001800000003
+000C00000006000C0000000600060000000C0003000000180001800000300000C0000060
+0000700001C000003C00078000000F803E00000003FFF8000000007FC000002B2F7DA332
+>13 D<03F0000FFC001C0E00300300600180600180C000C0C000C0C000C0C000C0C000C0
+C000C0C000C0C000C06001806001803003001C0E000FFC0003F00012147D9519>I<03F0
+000FFC001FFE003FFF007FFF807FFF80FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFF
+C0FFFFC07FFF807FFF803FFF001FFE000FFC0003F00012147D9519>I<FFFFFFFF7FFFFF
+FF0000000000000000000000000000000000000000000000000000000000000000FFFFFF
+FFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000
+007FFFFFFFFFFFFFFF20167D9627>17 D<0000000C0000003C000000F0000003C000000F
+0000003C000000F0000007C000001F00000078000001E00000078000001E000000780000
+00E0000000780000001E0000000780000001E0000000780000001F00000007C0000000F0
+0000003C0000000F00000003C0000000F00000003C0000000C0000000000000000000000
+0000000000000000000000000000000000000000007FFFFFF8FFFFFFFC1E277C9F27>20
+D<C0000000F00000003C0000000F00000003C0000000F00000003C0000000F80000003E0
+000000780000001E0000000780000001E0000000780000001C00000078000001E0000007
+8000001E00000078000003E000000F8000003C000000F0000003C000000F0000003C0000
+0070000000C0000000000000000000000000000000000000000000000000000000000000
+00000000007FFFFFF8FFFFFFFC1E277C9F27>I<07E000011FF800013FFE0001781F0003
+60078003C001E006C000F81E80007FFC80001FF8800007E0000000000000000007E00001
+1FF800013FFE0001781F000360078003C001E006C000F81E80007FFC80001FF8800007E0
+20167D9727>25 D<00600000000000600000000000600000000000600000000000C00000
+000000C0000000000180000000000300000000000300000000000E00000000001C000000
+0000380000000000FFFFFFFFFFC0FFFFFFFFFFC03800000000001C00000000000E000000
+000003000000000003000000000001800000000000C00000000000C00000000000600000
+00000060000000000060000000000060000000002A1A7C9832>32
+D<00000001800000000001800000000001800000000001800000000000C00000000000C0
+00000000006000000000003000000000003000000000001C00000000000E000000000007
+00FFFFFFFFFFE0FFFFFFFFFFE0000000000700000000000E00000000001C000000000030
+0000000000300000000000600000000000C00000000000C0000000000180000000000180
+000000000180000000000180002B1A7D9832>I<00100000300000300000300000780000
+780000FC0000FC0001B6000333000E31C03C30F0F0303CC0300C00300000300000300000
+300000300000300000300000300000300000300000300000300000300000300000300000
+300000300000300000300000300000300000300000300000300000300000300000300000
+3000003000003000003000162D7FA219>I<003000003000003000003000003000003000
+003000003000003000003000003000003000003000003000003000003000003000003000
+003000003000003000003000003000003000003000003000003000003000003000003000
+003000C0300CF0303C3C30F00E31C003330001B60000FC0000FC00007800007800003000
+003000003000001000162D7FA219>I<0060000300000060000300000060000300000060
+0003000000C00001800000C00001800001800000C0000300000060000300000060000E00
+000038001C0000001C00380000000E00FFFFFFFFFFC0FFFFFFFFFFC0380000000E001C00
+00001C000E000000380003000000600003000000600001800000C00000C00001800000C0
+000180000060000300000060000300000060000300000060000300002A1A7C9832>I<03
+F80001F80007FE000FFE001E3F801C03003807C03001802003E06000804001F0C0004040
+00F9800040C0007F00002080003F00002080003E00002080001F00002080000F80002080
+001F80002080001FC00060400033E00040400061F000402000C0F800803001807C038018
+07003F8F000FFE000FFC0003F00003F8002B157D9432>49 D<001FFF007FFF01E0000380
+000600000C0000180000300000300000600000600000600000C00000C00000FFFFFFFFFF
+FFC00000C000006000006000006000003000003000001800000C000006000003800001E0
+00007FFF001FFF181E7C9A21>I<FFFFFFC0FFFFFFC0000000C0000000C0000000C00000
+00C0000000C0000000C0000000C0000000C0000000C0000000C01A0C7D9121>58
+D<007F800001FFE000078078000E001C0018000600300003006000018060000180C00000
+C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000
+C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000
+C0C00000C0C00000C0C00000C0400000401A1F7D9D21>92 D<0003C0001E000038000070
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00001C0000380000F0000F800000F000003800001C0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E000007000003800001E000003C012317DA419>102
+D<F800000F000003800001C00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E000007000003800001E
+000003C0001E0000380000700000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00001C0000380000F00
+00F8000012317DA419>I<C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C002317AA40E>106
+D<00100000300000300000300000780000780000FC0000FC0001B6000333000E31C03C30
+F0F0303CC0300C0030000030000030000030000030000030000030000030000030000030
+000030000030000030000030000030000030000030000030000030000030000030000030
+00003000C0300CF0303C3C30F00E31C003330001B60000FC0000FC000078000078000030
+0000300000300000100016337FA519>108 D<C00000C000006000006000006000003000
+003000003000001800001800001800000C00000C00000C00000600000600000600000300
+0003000003000001800001800001800000C00000C00000C0000060000060000060000030
+00003000003000001800001800001800000C00000C00000C000006000006000006000003
+000003000003000001800001800001800000C000004012317DA419>110
+D<0000000001000000000300000000060000000006000000000C000000000C0000000018
+0000000018000000003000000000300000000060000000006000000000C000000000C000
+00000180000000018000000003000000000300000000060000000006000000000C000000
+000C0000000018000000001800000000300006000030001E000060002F000060004F0000
+C000878000C000078001800003C001800003C003000003C003000001E006000001E00600
+0000F00C000000F00C000000781800000078180000003C300000003C300000001E600000
+001E600000000FC00000000FC00000000780000000078000000003000000000300000028
+327D812A>112 D<07C01C3030087008600CE01CE01CE008E000E0007000300038000C00
+06000F80186030307018601CE00EE00EE00EE00EE00E700C301C18180C3003E000C00060
+00380018001C000E000E200E700E700E600C201C2018187007C00F2D7DA216>120
+D<0100038003800380038003800380038001000100010001000100793CFFFE793C010001
+000100038003800380038003800380038003800380038003800380038003800380038003
+8003800380038001000100010001000100010001000F2E7DA216>I<0100038003800380
+038003800100010001004104FFFEFFFE0100010001000100038003800380038003800100
+00000100038003800380038003800100010001000100FFFEFFFE41040100010001000380
+038003800380038001000F2D7DA216>I<007FFF8003FFFF8007FE18000FFE18001FFE18
+003FFE18003FFE18007FFE18007FFE1800FFFE1800FFFE1800FFFE1800FFFE1800FFFE18
+00FFFE18007FFE18007FFE18007FFE18003FFE18001FFE18000FFE180007FE180001FE18
+00003E180000061800000618000006180000061800000618000006180000061800000618
+000006180000061800000618000006180000061800000618000006180000061800000618
+0000061800000618000006180000061800192D7DA21E>I<0001F800000007FE0000000F
+FF0000001FFF8000003FFFC000003FFFC000007FFFE000007FFFE000007FFFE000007FFF
+E000007FFFE000007FFFE000007FFFE000007FFFE000003FFFC000003FFFC000001FFF80
+0007CFFF3E000FE7FE7F001FFFFFFF803FFFFFFFC07FFFFFFFE07FFFFFFFE07FFFFFFFE0
+FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF07FFFFFFFE07F
+FE27FFE07FFE67FFE03FFE67FFC01FFC63FF800FF861FF0003E0607C0000006000000000
+F000000000F000000000F000000000F00000242A7FA327>I<00018000000180000003C0
+000003C0000006600000066000000C3000001818000018180000300C0000600600006006
+0000C0030001800180030000C0030000C0060000600C000030180000183000000C600000
+06C0000003600000063000000C180000180C00003006000060030000C0030000C0018001
+8000C00300006006000060060000300C000018180000181800000C300000066000000660
+000003C0000003C0000001800000018000202B7DA327>I<03C003C00FF00FF01C381C38
+300C300C600660066003C0066003C006C0018003C0018003C0008003C0000003C0000003
+C0000003C0000003C00000036000000660000006600000063000000C3000000C18000018
+0C0000300C00003006000060030000C00180018000C003000060060000300C0000181800
+000C300000066000000660000003C0000003C000000180000001800020257DA327>I<00
+018000000180000003C0000003C0000003C0000007E000000FF000000FF000001FF80000
+3FFC00003FFC0000FFFF0001FFFF8003FFFFC007FFFFE007FFFFE00FFFFFF01FFFFFF83F
+FFFFFC3FFFFFFC7FFFFFFE7FFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF89FFE7FF99FFE7FF99FFE3FF18FFC1FE187F80F
+8181F0000180000003C0000003C0000003C0000003C000202A7DA327>I
+E /Fq 111 128 df<FFFFFE1F003E0F000E0F00060F00020F00020F00030F00010F0001
+0F00010F00010F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00001F8000
+FFFC0018227DA11E>0 D<000FE00000783C0000E00E0003C00780078003C00F0001E00E
+0000E01E0000F03E0000F83C0000787C00007C7C00007C7800003C7800003CF840043EF8
+40043EF87FFC3EF87FFC3EF87FFC3EF840043EF840043EF800003EF800003E7800003C7C
+00007C7C00007C3C0000783C0000781E0000F00E0000E00F0001E0078003C003C0078000
+E00E0000783C00000FE0001F247DA226>2 D<FFFFFFE0780007E07C0000E03C0000601E
+0000601F0000200F0000300F80001007C0001003C0001003E0001001F0000000F0000000
+F8000000780000003C0000003E0000001E0000001C000000080000001000000020000000
+40001000800010008000100100001002000030040000300800006010000060100000E020
+0007E07FFFFFE0FFFFFFE01C227DA123>6 D<03FFFC00001F8000000F0000000F000000
+0F0000000F0000003FC00001EF7800078F1E000E0F07001E0F07803C0F03C07C0F03E078
+0F01E0F80F01F0F80F01F0F80F01F0F80F01F0F80F01F0F80F01F0780F01E07C0F03E03C
+0F03C01E0F07800E0F0700078F1E0001EF7800003FC000000F0000000F0000000F000000
+0F0000001F800003FFFC001C227DA123>8 D<001FE00000F03C0001C00E00078007800F
+0003C01F0003E01E0001E03E0001F03C0000F07C0000F87C0000F87C0000F87C0000F87C
+0000F87C0000F87C0000F83C0000F03E0001F03E0001F01E0001E01E0001E00E0001C00F
+0003C00700038003000300038007000180060081800604808004044080040840C00C0840
+4008087FC00FF83FC00FF03FC00FF01E237EA223>10 D<0E007E001E000E000E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A157F940E>16
+D<E0E0F078381C06020108097BA218>18 D<07070F1E1C38604080080976A218>I<C060
+60C03B801F000E0004000B067A9E18>I<FFFF8011017D9C18>22
+D<3C428181818181423C080972A325>I<0E000F0001C000E000E000E001E07F8080000B
+097A7E16>I<007C000187000303800703C00601C00E01E00E01E00E01E00E01E00E01E0
+0E01C00E03800E03800E0E00FE38000E06000E03800E01C00E01C00E00E00E00F00E00F0
+0E00700E00780E00780E00780E00780E00780E00780E00700E00700E70E00E70C00E7180
+FE1F0015237FA218>I<1FF00FC0301C1870780660187807E01C3003C01C0003C00E0003
+800E0003800E007FFFFE07C380000E0380003C0380007803800078038000F003C000F003
+C002F003C002F0026004780630083C1818300FE007C01F157E9423>I<01F800FC000706
+0307000C030603801C018C01C03800D801C07800F800E070007000E0F0007000E0F0007F
+FFE0F000700000F000700000F000700000F000700000F0007000007000F800007800F800
+203800D800201C018C00400C03060080070603830001F800FC0023157F9426>I<000040
+00008000008000010000010001F200060E001C07003807803009807009C06010C0E030E0
+E020E0E060E0E040E0E0C0E0E080E0E180E06100C07201C03201803C03801C07000E0C00
+09F000100000100000200000200000400000131F7E9918>I<001FFFFFF800017C00F800
+023C003800023C001800023C000800043C000800043C000C00043C000400083C00040008
+3C000400083C000400103C010000103C010000203C010000203C010000203C030000403C
+0700007FFFFF0000403C070000803C030000803C010000803C010001003C010101003C01
+0102003C000102003C000202003C000204003C000204003C000604003C00060C003C000E
+1C003C001C3E003C007CFF81FFFFFC28227EA12C>I<000FE000000000783FFFFF0000E0
+1F001F0003C00F00070007800F0003000F000F0001000F000F0001001E000F0001803E00
+0F0000803C000F0000807C000F0000807C000F001080780007001000F80007001000F800
+07001000F80007003000F80007007000F80007FFF000F80007007000F80007003000F800
+07001000F80007001000F800070010007C00070010207C000F0000207C000F0000203C00
+0F0000403E000F0000401E000F0000401F000F0000C00F000F0000C007800F0001C003C0
+0F00038001E01F000F8000783FFFFF80000FE00000002B247CA231>I<00000010000FE0
+3000701C2000C00640038003C0070001C00E0001E00E0003E01C0002703C00047838000C
+387800083C7800103C7000101C7000201CF000401EF000401EF000801EF001001EF00100
+1EF002001EF004001EF004001EF008001E7010001C7810003C7820003C38600038384000
+381C8000700D8000600F0000E0070001C00780038004C0060008701C00180FE000100000
+001F267DA326>I<70F8F8F8F8F8F8F87070707070707070707070702020202020200000
+00000070F8F8F87005247CA30E>33 D<7038F87CFC7EFC7E743A04020402040204020804
+080410081008201040200F0F7EA218>I<0000C018000000C018000000C0180000018030
+000001803000000180300000018030000003006000000300600000030060000003006000
+0003006000000600C000000600C000000600C000000600C000000C018000FFFFFFFFC0FF
+FFFFFFC00018030000001803000000180300000018030000003006000000300600000030
+0600000030060000FFFFFFFFC0FFFFFFFFC000600C000000C018000000C018000000C018
+000000C01800000180300000018030000001803000000180300000030060000003006000
+00030060000003006000000600C000000600C000000600C00000222D7DA229>I<008000
+00800003F0000C8C00108200208100608100408080C08080C08780C08780C08780E08300
+E080007080007880003F80003FE0001FF80007FC0001FE00009F00008700008700008380
+008380F08180F08180F08180E0818080810040810040830020860010840008980007E000
+00800000800000800011287DA418>I<0780000C001840000C0018200018003010007000
+701C00B0006013FF6000E008006000E00800C000E008018000E008018000E008030000E0
+08060000E008060000E0080C000060101800007010180000301030000018203000001840
+6000000780C03C000000C04200000180C100000301810000030380800006030080000603
+0040000C0700400018070040001807004000300700400060070040006007004000C00700
+400180030040018003008003000380800300018100060000C1000C000042000400003C00
+22287DA429>I<003C000000006200000000C20000000181000000018100000003810000
+000381000000038100000003810000000382000000038200000003840000000388000000
+01C800000001D000000001E001FF8001C0007C0000E000380001E0003000017000200002
+7000400004780040000838008000181C008000301C010000700E020000700F020000F007
+040000F003880000F003C80000F001F00100F000E0010078007001007800B802003C031C
+06000E0C070C0003F001F00021257EA326>I<70F8FCFC7404040404080810102040060F
+7CA20E>I<00200040008001000300060004000C000C0018001800300030003000700060
+0060006000E000E000E000E000E000E000E000E000E000E000E000E000E000E000600060
+0060007000300030003000180018000C000C0004000600030001000080004000200B327C
+A413>I<800040002000100018000C000400060006000300030001800180018001C000C0
+00C000C000E000E000E000E000E000E000E000E000E000E000E000E000E000E000C000C0
+00C001C0018001800180030003000600060004000C00180010002000400080000B327DA4
+13>I<000180000001800000018000000180000001800000018000000180000001800000
+01800000018000000180000001800000018000000180000001800000018000FFFFFFFEFF
+FFFFFE000180000001800000018000000180000001800000018000000180000001800000
+018000000180000001800000018000000180000001800000018000000180001F227D9C26
+>43 D<70F8FCFC7404040404080810102040060F7C840E>I<FFF8FFF80D02808B10>I<70
+F8F8F87005057C840E>I<00008000018000018000030000030000030000060000060000
+0600000C00000C00000C0000180000180000180000300000300000300000600000600000
+600000C00000C00000C00001800001800001800001800003000003000003000006000006
+00000600000C00000C00000C000018000018000018000030000030000030000060000060
+0000600000C00000C00000C0000011317DA418>I<01F000071C000C0600180300380380
+3803807001C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0
+F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C0380380
+3803801C07000C0600071C0001F00013227EA018>I<008003800F80F380038003800380
+038003800380038003800380038003800380038003800380038003800380038003800380
+03800380038003800380038007C0FFFE0F217CA018>I<03F0000C1C0010070020078040
+03C04003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C000078000
+0700000E00001C0000180000300000600000C00001800001000002002004002008002018
+00603000403FFFC07FFFC0FFFFC013217EA018>I<03F8000C1E00100F002007804007C0
+7807C07803C07807C03807C0000780000780000700000F00000C0000380003F000001C00
+000F000007800007800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C0
+400780200780100F000C1C0003F00013227EA018>I<000300000300000700000700000F
+000017000017000027000067000047000087000187000107000207000607000407000807
+00080700100700200700200700400700C00700FFFFF80007000007000007000007000007
+00000700000700000F80007FF015217FA018>I<1000801E07001FFF001FFE001FF80017
+E00010000010000010000010000010000010000011F800120C001C070018038010038000
+01C00001C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C040
+03802007001006000C1C0003F00013227EA018>I<007E0001C1000300800601C00C03C0
+1C03C0180180380000380000780000700000700000F0F800F30C00F40600F40300F80380
+F801C0F001C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03801C0
+1803801C03000C0600070C0001F00013227EA018>I<4000006000007FFFE07FFFC07FFF
+C0400080C001008001008002008002000004000008000008000010000020000020000060
+0000400000C00000C00001C00001C0000180000380000380000380000380000780000780
+0007800007800007800007800007800003000013237DA118>I<01F800060E0008030010
+01802001806000C06000C06000C07000C07000C07801803E01003F02001FC4000FF80003
+F80001FC00067E00083F00100F803007C06003C06000E0C000E0C00060C00060C00060C0
+00606000406000C03000801803000E0E0003F00013227EA018>I<01F000060C000C0600
+180700380380700380700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E0
+7001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001C0000380000380
+300380780700780600700C002018001030000FC00013227EA018>I<70F8F8F870000000
+000000000000000070F8F8F87005157C940E>I<70F8F8F8700000000000000000000000
+70F8F8F87808080808101010204040051F7C940E>I<70F8F8F870000000000020202020
+2020707070707070707070707070F8F8F8F8F8F8F87005247C980E>I<FFFFFFFEFFFFFF
+FE0000000000000000000000000000000000000000000000000000000000000000FFFFFF
+FEFFFFFFFE1F0C7D9126>I<038007C007C007C003800000000000000000000001000100
+0100010001000100010003000200060006000C001C00380078007000F000F00FF00FF00F
+F0017002700438180FE010237D9817>I<07E01838201C400E800FF00FF00FF00F000F00
+0E001C00380030006000C000C00080008001800100010001000100010001000000000000
+0000000000038007C007C007C0038010237DA217>I<000FE00000701C00008002000300
+01800400004008000020080000201007C01020183008203008084060040440C0078441C0
+038481C003828380038283800382838003828380038283800382838003828380038281C0
+038241C0038240C007824060078420300B84201831881007C0F008000000080000000400
+00000300000E00800078007007C0000FFC001F237DA226>I<0001800000018000000180
+000003C0000003C0000003C0000005E0000005E0000009F0000008F0000008F000001078
+00001078000010780000203C0000203C0000203C0000401E0000401E0000C01F0000800F
+0000800F0001FFFF800100078001000780020003C0020003C0020003C0040001E0040001
+E0040001E0080000F01C0000F03E0001F8FF800FFF20237EA225>I<FFFFF8000F800E00
+07800780078003C0078003E0078001E0078001F0078001F0078001F0078001F0078001F0
+078001E0078003E0078007C007800F8007803E0007FFFE0007800780078003C0078001E0
+078001F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078001F0
+078001F0078003E0078007C00F800F00FFFFFC001D227EA123>I<0007E0100038183000
+E0063001C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000307C
+0000107800001078000010F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F800000078000000780000107C0000103C0000103C0000101C0000201E0000200E
+000040070000400380008001C0010000E0020000381C000007E0001C247DA223>I<FFFF
+F0000F801E000780070007800380078001C0078000E0078000F007800078078000780780
+007C0780003C0780003C0780003C0780003E0780003E0780003E0780003E0780003E0780
+003E0780003E0780003E0780003E0780003C0780003C0780007C07800078078000780780
+00F0078000E0078001E0078003C0078007000F801E00FFFFF0001F227EA125>I<FFFFFF
+C00F8007C0078001C0078000C00780004007800040078000600780002007800020078000
+2007802020078020000780200007802000078060000780E00007FFE0000780E000078060
+000780200007802000078020000780200807800008078000080780001007800010078000
+10078000300780003007800070078000E00F8003E0FFFFFFE01D227EA121>I<FFFFFFC0
+0F8007C0078001C0078000C0078000400780004007800060078000200780002007800020
+07802020078020000780200007802000078060000780E00007FFE0000780E00007806000
+078020000780200007802000078020000780000007800000078000000780000007800000
+078000000780000007800000078000000FC00000FFFE00001B227EA120>I<0007F00800
+3C0C1800E0021801C001B8038000F8070000780F0000381E0000381E0000183C0000183C
+0000187C0000087800000878000008F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000781E0000781E
+0000780F00007807000078038000B801C000B800E00318003C0C080007F00020247DA226
+>I<FFFC3FFF0FC003F0078001E0078001E0078001E0078001E0078001E0078001E00780
+01E0078001E0078001E0078001E0078001E0078001E0078001E0078001E007FFFFE00780
+01E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780
+01E0078001E0078001E0078001E0078001E0078001E00FC003F0FFFC3FFF20227EA125>
+I<FFFC0FC007800780078007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800780078007800780078007800FC0FFFC0E227E
+A112>I<03FFE0001F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00700F00F80F00F80F00F80E00F01E00401C0020380018700007C0
+0013237EA119>I<FFFC00FF800FC0007C00078000300007800020000780004000078000
+800007800100000780020000078004000007800800000780100000078020000007804000
+0007808000000781C000000783E000000785E000000788F000000790F0000007A0780000
+07C03C000007803C000007801E000007800F000007800F00000780078000078007C00007
+8003C000078001E000078001E000078000F000078000F8000FC000FC00FFFC07FF802122
+7EA126>I<FFFC001F80000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00010F00010F00010F00010F00030F00030F00020F00060F00060F001E1F007EFFFFFE18
+227DA11E>I<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F00009E0
+04F00009E004F00009E004780011E004780011E004780011E0043C0021E0043C0021E004
+3C0021E0041E0041E0041E0041E0040F0081E0040F0081E0040F0081E004078101E00407
+8101E004078101E00403C201E00403C201E00401E401E00401E401E00401E401E00400F8
+01E00400F801E00400F801E004007001E00E007001E01F007003F0FFE0203FFF28227EA1
+2D>I<FF8007FF07C000F807C0007005E0002004F0002004F0002004780020047C002004
+3C0020041E0020041F0020040F002004078020040780200403C0200401E0200401E02004
+00F0200400F8200400782004003C2004003E2004001E2004000F2004000F20040007A004
+0003E0040003E0040001E0040001E0040000E00E0000601F000060FFE0002020227EA125
+>I<000FE00000783C0000E00E0003C00780078003C00F0001E00E0000E01E0000F03C00
+00783C0000787C00007C7C00007C7800003C7800003CF800003EF800003EF800003EF800
+003EF800003EF800003EF800003EF800003EF800003E7800003C7C00007C7C00007C3C00
+00783E0000F81E0000F00F0001E00F0001E0078003C003C0078000E00E0000783C00000F
+E0001F247DA226>I<FFFFF0000F803C0007800F0007800780078007C0078003C0078003
+E0078003E0078003E0078003E0078003E0078003E0078003C0078007C00780078007800F
+0007803C0007FFF000078000000780000007800000078000000780000007800000078000
+00078000000780000007800000078000000780000007800000078000000FC00000FFFC00
+001B227EA121>I<000FE00000783C0000E00E0003C00780078003C00F0001E00E0000E0
+1E0000F03E0000F83C0000787C00007C7C00007C7800003C7800003CF800003EF800003E
+F800003EF800003EF800003EF800003EF800003EF800003EF800003E7800003C7C00007C
+7C00007C3C0000783C0000781E0380F00E0420E00F0801E0078813C003C8178000E80E00
+007C3C02000FEC0200000C0200000C0200000E0600000F0E000007FC000007FC000007F8
+000003F8000001E01F2D7DA226>I<FFFFE000000F803C000007800E0000078007800007
+8007C000078003C000078003E000078003E000078003E000078003E000078003E0000780
+03C000078007C000078007800007800E000007803C000007FFE000000780700000078038
+000007801C000007801E000007800E000007800F000007800F000007800F000007800F00
+0007800F800007800F800007800F800007800F808007800FC080078007C0800FC003C100
+FFFC01E2000000007C0021237EA124>I<03F0200C0C601802603001E07000E0600060E0
+0060E00060E00020E00020E00020F00000F000007800007F00003FF0001FFE000FFF0003
+FF80003FC00007E00001E00000F00000F0000070800070800070800070800070C00060C0
+0060E000C0F000C0C80180C6070081FC0014247DA21B>I<7FFFFFF87807807860078018
+400780084007800840078008C007800C8007800480078004800780048007800400078000
+000780000007800000078000000780000007800000078000000780000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000
+0007800000078000000FC00001FFFE001E227EA123>I<FFFC07FF0FC000F80780007007
+800020078000200780002007800020078000200780002007800020078000200780002007
+800020078000200780002007800020078000200780002007800020078000200780002007
+800020078000200780002007800020078000200380004003C0004003C0004001C0008000
+E000800060010000300600001C08000003F00020237EA125>I<FFF0007FC01F80001F00
+0F00000C000F80000C000780000800078000080003C000100003C000100003C000100001
+E000200001E000200001F000600000F000400000F000400000780080000078008000007C
+008000003C010000003C010000001E020000001E020000001E020000000F040000000F04
+0000000F8C0000000788000000078800000003D000000003D000000003F000000001E000
+000001E000000000C000000000C000000000C0000022237FA125>I<FFF03FFC03FE1F80
+07E000F80F0003C000700F0003C000200F0001E00020078001E00040078001E000400780
+03F0004003C002F0008003C002F0008003C002F0008003E00478018001E00478010001E0
+0478010001E0083C010000F0083C020000F0083C020000F0101E02000078101E04000078
+101E04000078200F0400003C200F0800003C200F0800003C600F8800001E40079000001E
+40079000001E4007D000001F8003F000000F8003E000000F8003E000000F0001E0000007
+0001C00000070001C00000060000C0000002000080002F237FA132>I<7FF803FF000FE0
+01F80007C000E00003E000C00001E000800001F001800000F80100000078020000007C04
+0000003E040000001E080000001F100000000FB000000007A000000007C000000003E000
+000001E000000001F000000003F80000000278000000047C0000000C3E000000081E0000
+00101F000000200F80000020078000004007C000008003E000008001E000010001F00003
+0000F800070000F8001F8000FC00FFC003FFC022227FA125>I<FFF0007FC01F80001F00
+0F80000C00078000080007C000080003C000100001E000200001F000200000F000400000
+F800C000007C008000003C010000003E010000001E020000001F060000000F8400000007
+8800000007D800000003D000000003E000000001E000000001E000000001E000000001E0
+00000001E000000001E000000001E000000001E000000001E000000001E000000001E000
+000001E000000003E00000003FFE000022227FA125>I<7FFFFE7E003E78003C70007860
+00784000F0C000F0C001E08003C08003C0800780000780000F00001F00001E00003C0000
+3C0000780000780000F00001F00001E00103C00103C0010780010780030F00031E00021E
+00023C00063C000E78001EF8007EFFFFFE18227DA11E>I<FEFEC0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FE
+FE07317BA40E>I<0804100820102010402040208040804080408040B85CFC7EFC7E7C3E
+381C0F0F7AA218>I<FEFE06060606060606060606060606060606060606060606060606
+0606060606060606060606060606060606060606FEFE07317FA40E>I<04000E001F001B
+00318060C0C06080200B087AA218>I<08102020404080808080B8FCFC7C38060F7DA20E>
+96 D<1FE000303800780C00780E0030070000070000070000070000FF0007C7001E0700
+3C0700780700700700F00708F00708F00708F00F087817083C23900FC1E015157E9418>
+I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E00
+1E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F001723
+7FA21B>I<01FE000703000C07801C0780380300780000700000F00000F00000F00000F0
+0000F00000F00000F000007000007800403800401C00800C010007060001F80012157E94
+16>I<0000E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E001F8E00704E00C02E01C01E03800E07800E07000E0F000E0F000E0
+F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02E0070CF001F0FE
+17237EA21B>I<01FC000707000C03801C01C03801C07801E07000E0F000E0FFFFE0F000
+00F00000F00000F00000F000007000007800203800201C00400E008007030000FC001315
+7F9416>I<003E0000E30001C78003878003078007000007000007000007000007000007
+0000070000070000070000FFF80007000007000007000007000007000007000007000007
+00000700000700000700000700000700000700000700000700000700000700000780007F
+F000112380A20F>I<00007003F1980E1E181C0E18380700380700780780780780780780
+7807803807003807001C0E001E1C0033F0002000002000003000003800003FFE001FFFC0
+0FFFE03000F0600030C00018C00018C00018C000186000306000303800E00E038003FE00
+15217F9518>I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00
+700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00
+70FFE7FF18237FA21B>I<1C003E003E003E001C00000000000000000000000000000000
+000E007E001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E00FFC00A227FA10E>I<00E001F001F001F000E0000000000000000000000000
+00000000007007F000F00070007000700070007000700070007000700070007000700070
+00700070007000700070007000700070007000706070F0E0F0C061803F000C2C83A10F>
+I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E03FC0E01F00E01C00E01800E02000E04000E08000E10000E38000EF8
+000F1C000E1E000E0E000E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3FE1723
+7FA21A>I<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
+00FFE00B237FA20E>I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E
+003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00
+3800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E0038
+00E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E00F00700F00700E00700E00700E
+00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E
+0070FFE7FF18157F941B>I<01FC000707000C01801800C03800E0700070700070F00078
+F00078F00078F00078F00078F00078F000787000707800F03800E01C01C00E0380070700
+01FC0015157F9418>I<0E1F00FE61C00E80600F00700E00380E003C0E003C0E001E0E00
+1E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F
+000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F7F941B
+>I<01F8200704600E02601C01603801E07800E07800E0F000E0F000E0F000E0F000E0F0
+00E0F000E0F000E07800E07800E03801E01C01E00C02E0070CE001F0E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E0000FFE171F7E941A>I<0E3CFE461E8F
+0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF0
+10157F9413>I<0F8830786018C018C008C008E008F0007F003FE00FF001F8003C801C80
+0C800CC00CC008E018D0308FC00E157E9413>I<02000200020002000600060006000E00
+1E003E00FFFC0E000E000E000E000E000E000E000E000E000E000E000E040E040E040E04
+0E040E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E
+00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006
+017003827800FC7F18157F941B>I<FF80FE1E00781E00300E00200E0020070040070040
+0780C003808003808001C10001C10000E20000E20000E200007400007400003800003800
+00380000100017157F941A>I<FF8FF87F3E01E03C1C01C0181C01E0180E01E0100E0260
+100E027010070270200704302007043820038438400388184003881C4001C81C8001D00C
+8001D00E8000F00F0000E0070000E00700006006000040020020157F9423>I<FF83FE1F
+00F00E00C007008007810003830001C20000E400007800007800003800003C00004E0000
+8F000187000103800201C00401E00C00E03E01F0FF03FE17157F941A>I<FF80FE1E0078
+1E00300E00200E00200700400700400780C003808003808001C10001C10000E20000E200
+00E200007400007400003800003800003800001000001000002000002000002000004000
+F04000F08000F180004300003C0000171F7F941A>I<3FFFC0380380300780200700600E
+00401C00403C0040380000700000E00001E00001C0000380400700400F00400E00C01C00
+80380080780180700780FFFF8012157F9416>I<FFFFFE1701808C18>I<FFFFFFFFFFFF30
+01808C31>I<0E023F04238841F880E00F057CA018>126 D<6030F078F8F8F07860300D05
+7BA118>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -2 117 a
+ /colorstack [ /colorstack load aload pop dup -1 ne { setrgbcolor }
+if ] store
+ -2 117 a 43 x Fq(Co)q(de)17 b(P)o(age)g(437,)g(U.)e
+(S.)h(PC)h(enco)q(ding:)270 b(Co)q(de)17 b(P)o(age)g(850,)g(In)o
+(ternational)e(PC)i(enco)q(ding:)53 229 y Fp(\015)64
+223 y(\001\001)63 232 y Fo(^)144 216 y Fn(y)130 223 y
+ 1 setgray
+
+130 223 a Fp(\001\001)158 223 y
+ 0 setgray
+ 158 223 a 129 232 a
+ 1 setgray
+ 129
+232 a Fo(^)159 232 y
+ 0 setgray
+ 159 232 a 186 229 a Fp(~)g(})g(|)g(\177)29
+b(\017)p 482 248 25 63 v 506 229 a
+ 1 setgray
+ 506 229 a -25 w Fp(\017)506
+229 y
+ 0 setgray
+ 506 229 a 29 w Fp(\016)p 595 248 25 63 v 620 229
+a
+ 1 setgray
+ 620 229 a -25 w Fp(\016)620 229 y
+ 0 setgray
+ 620 229 a 662 212
+a Fm(\045)675 218 y
+ 1 setgray
+ 675 218 a Fn(t)664 229 y
+ 0 setgray
+ 664 229
+a 675 218 a Fn(d)48 b(d)p 743 246 2 18 v 735 238 18 2
+v 810 226 a(q)p 812 226 2 26 v 813 201 8 2 v 813 205
+V 820 204 2 5 v 869 229 a(q)p 872 229 2 29 v 884 226
+a(q)p 887 226 2 26 v 873 201 16 2 v 873 205 V 913 229
+a Fl(F)930 229 y
+ 1 setgray
+ 930 229 a Fp(\001)944 229 y
+ 0 setgray
+ 944 229
+a -2 308 a Fl(I)22 b(J)34 b Fp(l)h Fq(!!)27 b Fp({)j(x)p
+364 308 22 11 v 93 w(l)p 422 328 25 2 v 35 w(")e(#)23
+b(!)17 b( )p 730 302 2 13 v 732 302 26 2 v 89 w($)j Fl(N)k(H)71
+387 y Fq(!)46 b Fk(\015)-6 b(\015)28 b Fq(#)c($)f(\045)17
+b(&)33 b Fk(\015)42 b Fq(\()35 b(\))j Fp(\003)e Fq(+)43
+b(,)54 b(-)49 b(.)40 b(/)5 465 y(0)d(1)42 b(2)c(3)32
+b(4)g(5)f(6)37 b(7)f(8)29 b(9)42 b(:)53 b(;)43 b Fj(<)31
+b Fq(=)26 b Fj(>)j Fq(?)-2 544 y(@)24 b(A)30 b(B)c(C)20
+b(D)h(E)j(F)h(G)e(H)j(I)38 b(J)e(K)e(L)f(M)23 b(N)f(O)1
+623 y(P)j(Q)k(R)h(S)25 b(T)20 b(U)f(V)e(W)g(X)f(Y)27
+b(Z)45 b([)k Fp(n)i Fq(])864 605 y Fi(^)p 931 623 15
+2 v 6 702 a Fq(\022)36 b(a)41 b(b)c(c)31 b(d)h(e)37 b(f)k(g)34
+b(h)g(i)45 b(j)i(k)i(l)42 b(m)28 b(n)34 b(o)4 781 y(p)g(q)44
+b(r)e(s)37 b(t)c(u)d(v)g(w)f(x)f(y)36 b(z)43 b Fp(f)p
+743 766 2 23 v 743 793 V 114 w(g)862 763 y Fi(\030)919
+781 y Fl(M)0 860 y Fq(C)-28 b(\030)66 862 y(\177)65 860
+y(u)40 b(\023)-23 b(e)39 b(^)-24 b(a)250 862 y(\177)250
+860 y(a)32 b(\022)-24 b(a)25 b(\027)-30 b(a)38 b(\030)-22
+b(c)36 b(^)-23 b(e)535 862 y(\177)537 860 y(e)36 b(\022)-23
+b(e)663 862 y(\177)668 860 y(\020)49 b(^)-19 b(\020)51
+b(\022)-19 b(\020)865 849 y(\177)859 860 y(A)918 851
+y(\027)918 860 y(A)5 926 y(\023)1 939 y(E)27 b(\032)f(\035)i(^)-24
+b(o)250 941 y(\177)250 939 y(o)32 b(\022)-24 b(o)31 b(^)-26
+b(u)36 b(\022)-26 b(u)482 941 y(\177)481 939 y(y)535
+928 y(\177)529 939 y(O)595 928 y(\177)589 939 y(U)38
+b(c)668 937 y Fh(/)725 939 y Fg($)23 b Fl(U)34 b Fq(P)-7
+b Fh(t)25 b Fj(f)5 1018 y Fq(\023)-24 b(a)37 b(\023)-19
+b(\020)47 b(\023)-24 b(o)38 b(\023)-26 b(u)31 b(~)-26
+b(n)306 1005 y(~)299 1018 y(N)364 1000 y Fh(a)364 1024
+y(\026)425 1000 y(o)425 1024 y(\026)482 1018 y Fq(>)535
+1026 y Fl(p)35 b(q)654 1007 y Fh(1)666 1018 y Fj(=)683
+1023 y Fh(2)722 1007 y(1)735 1018 y Fj(=)752 1023 y Fh(4)807
+1018 y Fq(<)862 1014 y Fm(\034)29 b(\035)-1 1096 y
+ currenthsbcolor 1 exch sub 2 copy le dup 4 1 roll { exch } if 1 index
+0 ne { 1 index div } if exch 1 0.75 neg abs sub mul 0.75 neg 0 gt {
+0.75 neg add } if exch 1 index mul 3 2 roll { exch } if 1 exch sub
+sethsbcolor
+ -1
+1096 a -1 1115 37 63 v 36 1096 a
+ 0 setgray
+ 36 1096 a 60 1096 a
+ currenthsbcolor 1 exch sub 2 copy le dup 4 1 roll { exch } if 1 index
+0 ne { 1 index div } if exch 1 0.5 neg abs sub mul 0.5 neg 0 gt { 0.5
+neg add } if exch 1 index mul 3 2 roll { exch } if 1 exch sub sethsbcolor
+
+60 1096 a 60 1115 37 63 v 97 1096 a
+ 0 setgray
+ 97 1096 a 126 1096
+a
+ currenthsbcolor 1 exch sub 2 copy le dup 4 1 roll { exch } if 1 index
+0 ne { 1 index div } if exch 1 0.25 neg abs sub mul 0.25 neg 0 gt {
+0.25 neg add } if exch 1 index mul 3 2 roll { exch } if 1 exch sub
+sethsbcolor
+ 126 1096 a 126 1115 37 63 v 163 1096 a
+ 0 setgray
+ 163 1096 a 204
+1115 5 63 v 243 1086 17 5 v 260 1115 5 63 v 299 1080
+17 5 v 300 1092 V 317 1115 5 63 v 355 1086 10 5 v 365
+1115 5 63 v 378 1115 V 416 1086 23 5 v 427 1115 5 34
+v 439 1115 V 476 1080 17 5 v 477 1092 V 494 1115 5 40
+v 529 1080 10 5 v 529 1092 V 539 1080 5 27 v 540 1115
+V 552 1115 5 63 v 599 1115 V 612 1115 V 657 1080 23 5
+v 658 1092 10 5 v 668 1115 5 27 v 679 1115 5 40 v 725
+1080 10 5 v 725 1092 23 5 v 736 1080 5 27 v 748 1092
+5 40 v 795 1086 23 5 v 806 1086 5 34 v 818 1086 V 859
+1080 17 5 v 860 1092 V 877 1092 5 40 v 918 1086 17 5
+v 935 1115 5 34 v 16 1165 V 21 1165 17 5 v 60 1165 V
+77 1165 5 34 v 82 1165 17 5 v 126 1165 V 143 1194 5 34
+v 148 1165 17 5 v 204 1194 5 63 v 209 1165 17 5 v 243
+1165 37 5 v 299 1165 17 5 v 316 1194 5 63 v 321 1165
+17 5 v 372 1194 5 63 v 377 1159 17 5 v 378 1171 V 426
+1194 5 63 v 439 1194 V 444 1165 10 5 v 486 1171 5 40
+v 498 1159 5 27 v 503 1159 10 5 v 491 1171 23 5 v 539
+1194 5 40 v 552 1194 5 27 v 545 1159 23 5 v 558 1171
+10 5 v 589 1159 V 589 1171 23 5 v 600 1159 5 27 v 612
+1159 V 617 1159 10 5 v 609 1171 19 5 v 657 1159 23 5
+v 658 1171 10 5 v 668 1194 5 27 v 679 1194 V 676 1159
+19 5 v 685 1171 10 5 v 735 1194 5 63 v 748 1159 5 27
+v 749 1194 V 754 1159 10 5 v 754 1171 V 795 1159 37 5
+v 795 1171 V 859 1159 10 5 v 859 1171 V 869 1159 5 27
+v 870 1194 V 881 1159 V 882 1194 V 887 1159 10 5 v 887
+1171 V 918 1159 17 5 v 919 1171 V 936 1159 5 27 v 941
+1159 17 5 v 933 1171 25 5 v -1 1244 23 5 v 10 1244 5
+34 v 22 1244 V 15 1244 23 5 v 60 1238 17 5 v 61 1250
+V 78 1273 5 27 v 75 1238 25 5 v 83 1250 17 5 v 126 1244
+23 5 v 137 1273 5 34 v 148 1273 V 141 1244 23 5 v 198
+1244 5 34 v 210 1244 V 203 1244 23 5 v 260 1250 5 40
+v 265 1238 17 5 v 266 1250 V 316 1273 5 40 v 321 1238
+17 5 v 322 1250 V 365 1273 5 34 v 378 1273 V 371 1244
+23 5 v 416 1244 V 427 1273 5 63 v 439 1273 V 432 1244
+23 5 v 476 1238 17 5 v 477 1250 V 494 1273 5 63 v 499
+1238 17 5 v 499 1250 V 529 1244 V 546 1244 5 34 v 606
+1273 V 611 1244 17 5 v 657 1273 37 63 v 725 1273 37 32
+v 795 1273 19 63 v 877 1273 V 918 1242 37 32 v 2 1333
+a Fj(\013)h(\014)38 b Fq(\000)32 b Fj(\031)25 b Fq(\006)f
+Fj(\033)k(\026)33 b(\034)h Fq(\010)18 b(\002)23 b(\012)38
+b Fj(\016)c Fp(1)25 b Ff(?)i Fp(2)g(\\)-2 1412 y(\021)22
+b(\006)27 b(\025)22 b(\024)243 1427 y Fe(\363)299 1414
+y(\365)354 1412 y Fp(\004)f(\031)484 1394 y Fi(\016)541
+1403 y Fl(\005)601 1412 y Fp(\001)654 1377 y(p)733 1394
+y Fh(n)51 b(2)p 870 1410 15 22 v 1081 229 a Fp(\015)1092
+223 y(\001\001)1091 232 y Fo(^)1172 216 y Fn(y)1158 223
+y
+ 1 setgray
+ 1158 223 a Fp(\001\001)1186 223 y
+ 0 setgray
+ 1186 223 a 1157 232
+a
+ 1 setgray
+ 1157 232 a Fo(^)1187 232 y
+ 0 setgray
+ 1187 232 a 1220 229 a Fp(~)23
+b(})17 b(|)g(\177)28 b(\017)p 1522 248 25 63 v 1547 229
+a
+ 1 setgray
+ 1547 229 a -25 w Fp(\017)1547 229 y
+ 0 setgray
+ 1547 229 a 43 w
+Fp(\016)p 1663 248 25 63 v 1688 229 a
+ 1 setgray
+ 1688 229 a -25
+w Fp(\016)1688 229 y
+ 0 setgray
+ 1688 229 a 1730 212 a Fm(\045)1743
+218 y
+ 1 setgray
+ 1743 218 a Fn(t)1732 229 y
+ 0 setgray
+ 1732 229 a 1743 218
+a Fn(d)47 b(d)p 1810 246 2 18 v 1803 238 18 2 v 1875
+226 a(q)p 1877 226 2 26 v 1878 201 8 2 v 1878 205 V 1885
+204 2 5 v 1940 229 a(q)p 1942 229 2 29 v 1955 226 a(q)p
+1957 226 2 26 v 1943 201 16 2 v 1943 205 V 1991 229 a
+Fl(F)2008 229 y
+ 1 setgray
+ 2008 229 a Fp(\001)2022 229 y
+ 0 setgray
+ 2022 229
+a 1026 308 a Fl(I)22 b(J)34 b Fp(l)41 b Fq(!!)32 b Fp({)e(x)p
+1404 308 22 11 v 93 w(l)p 1461 328 25 2 v 36 w(")43 b(#)35
+b(!)18 b( )p 1798 302 2 13 v 1800 302 26 2 v 86 w($)25
+b Fl(N)31 b(H)1099 387 y Fq(!)46 b Fk(\015)-6 b(\015)34
+b Fq(#)29 b($)24 b(\045)16 b(&)34 b Fk(\015)43 b Fq(\()49
+b(\))i Fp(\003)36 b Fq(+)43 b(,)51 b(-)j(.)48 b(/)1033
+465 y(0)37 b(1)42 b(2)h(3)38 b(4)32 b(5)g(6)37 b(7)g(8)43
+b(9)55 b(:)e(;)42 b Fj(<)30 b Fq(=)g Fj(>)37 b Fq(?)1026
+544 y(@)24 b(A)30 b(B)i(C)26 b(D)21 b(E)i(F)j(G)e(H)40
+b(I)51 b(J)36 b(K)e(L)c(M)e(N)h(O)1029 623 y(P)c(Q)k(R)36
+b(S)31 b(T)20 b(U)f(V)e(W)h(X)30 b(Y)39 b(Z)46 b([)j
+Fp(n)f Fq(])1934 605 y Fi(^)p 2009 623 15 2 v 1033 702
+a Fq(\022)37 b(a)k(b)i(c)37 b(d)31 b(e)38 b(f)j(g)35
+b(h)48 b(i)58 b(j)47 b(k)i(l)39 b(m)34 b(n)41 b(o)1032
+781 y(p)34 b(q)44 b(r)k(s)43 b(t)33 b(u)c(v)h(w)h(x)42
+b(y)48 b(z)c Fp(f)49 b(j)f(g)1932 763 y Fi(\030)1996
+781 y Fl(M)1028 860 y Fq(C)-28 b(\030)1094 862 y(\177)1092
+860 y(u)41 b(\023)-23 b(e)44 b(^)-24 b(a)1289 862 y(\177)1289
+860 y(a)32 b(\022)-24 b(a)26 b(\027)-30 b(a)37 b(\030)-22
+b(c)38 b(^)-23 b(e)1590 862 y(\177)1592 860 y(e)49 b(\022)-23
+b(e)1730 862 y(\177)1736 860 y(\020)49 b(^)-19 b(\020)48
+b(\022)-19 b(\020)1935 849 y(\177)1929 860 y(A)1996 851
+y(\027)1996 860 y(A)1033 926 y(\023)1029 939 y(E)26 b(\032)h(\035)33
+b(^)-24 b(o)1289 941 y(\177)1289 939 y(o)32 b(\022)-24
+b(o)32 b(^)-26 b(u)36 b(\022)-26 b(u)1523 941 y(\177)1522
+939 y(y)1590 928 y(\177)1583 939 y(O)1663 928 y(\177)1657
+939 y(U)36 b(\034)i Fg($)30 b Fq(\037)g Fp(\002)j Fj(f)1033
+1018 y Fq(\023)-24 b(a)37 b(\023)-19 b(\020)47 b(\023)-24
+b(o)43 b(\023)-26 b(u)37 b(~)-26 b(n)1345 1005 y(~)1339
+1018 y(N)1403 1000 y Fh(a)1403 1024 y(\026)1464 1000
+y(o)1464 1024 y(\026)1523 1018 y Fq(>)25 b Fl(r)41 b
+Fp(:)1721 1007 y Fh(1)1734 1018 y Fj(=)1751 1023 y Fh(2)1790
+1007 y(1)1803 1018 y Fj(=)1820 1023 y Fh(4)1872 1018
+y Fq(<)1932 1014 y Fm(\034)c(\035)1027 1096 y
+ currenthsbcolor 1 exch sub 2 copy le dup 4 1 roll { exch } if 1 index
+0 ne { 1 index div } if exch 1 0.75 neg abs sub mul 0.75 neg 0 gt {
+0.75 neg add } if exch 1 index mul 3 2 roll { exch } if 1 exch sub
+sethsbcolor
+ 1027 1096
+a 1027 1115 37 63 v 1064 1096 a
+ 0 setgray
+ 1064 1096 a 1088 1096
+a
+ currenthsbcolor 1 exch sub 2 copy le dup 4 1 roll { exch } if 1 index
+0 ne { 1 index div } if exch 1 0.5 neg abs sub mul 0.5 neg 0 gt { 0.5
+neg add } if exch 1 index mul 3 2 roll { exch } if 1 exch sub sethsbcolor
+ 1088 1096 a 1088 1115 37 63 v 1124 1096 a
+ 0 setgray
+ 1124 1096
+a 1154 1096 a
+ currenthsbcolor 1 exch sub 2 copy le dup 4 1 roll { exch } if 1 index
+0 ne { 1 index div } if exch 1 0.25 neg abs sub mul 0.25 neg 0 gt {
+0.25 neg add } if exch 1 index mul 3 2 roll { exch } if 1 exch sub
+sethsbcolor
+ 1154 1096 a 1154 1115 37 63 v 1190 1096
+a
+ 0 setgray
+ 1190 1096 a 1237 1115 5 63 v 1283 1086 17 5 v 1300
+1115 5 63 v 1345 1084 a Fq(\023)1339 1096 y(A)1401 1084
+y(^)1395 1096 y(A)1462 1084 y(\022)1456 1096 y(A)22 b
+Fe(\323)p 1584 1080 10 5 v 1584 1092 V 1594 1080 5 27
+v 1595 1115 V 1607 1115 5 63 v 1667 1115 V 1679 1115
+V 1724 1080 23 5 v 1725 1092 10 5 v 1735 1115 5 27 v
+1747 1115 5 40 v 1793 1080 10 5 v 1793 1092 23 5 v 1804
+1080 5 27 v 1815 1092 5 40 v 314 w Fq(c)1872 1094 y Fh(/)1920
+1096 y Fl(U)p 1996 1086 17 5 v 2013 1115 5 34 v 1043
+1165 V 1048 1165 17 5 v 1088 1165 V 1105 1165 5 34 v
+1110 1165 17 5 v 1154 1165 V 1171 1194 5 34 v 1176 1165
+17 5 v 1237 1194 5 63 v 1242 1165 17 5 v 1283 1165 37
+5 v 1339 1165 17 5 v 1356 1194 5 63 v 1361 1165 17 5
+v 1401 1175 a Fq(~)-24 b(a)1462 1163 y(~)1456 1175 y(A)p
+1527 1171 5 40 v 1539 1159 5 27 v 1544 1159 10 5 v 1532
+1171 23 5 v 1594 1194 5 40 v 1607 1194 5 27 v 1600 1159
+23 5 v 1613 1171 10 5 v 1657 1159 V 1657 1171 23 5 v
+1668 1159 5 27 v 1679 1159 V 1684 1159 10 5 v 1676 1171
+19 5 v 1724 1159 23 5 v 1725 1171 10 5 v 1735 1194 5
+27 v 1747 1194 V 1744 1159 19 5 v 1753 1171 10 5 v 1803
+1194 5 63 v 1815 1159 5 27 v 1816 1194 V 1821 1159 10
+5 v 1821 1171 V 1860 1159 37 5 v 1860 1171 V 1929 1159
+10 5 v 1929 1171 V 1939 1159 5 27 v 1940 1194 V 1951
+1159 V 1952 1194 V 1957 1159 10 5 v 1957 1171 V 502 w
+Fp(\002)2003 1175 y
+ 1 setgray
+ 2003 1175 a Fp(\017)2028 1175 y
+ 0 setgray
+ 2028
+1175 a -25 w Fp(\016)1032 1254 y Ff(g)1089 1248 y Fq(-)1087
+1254 y(D)1160 1242 y(^)1155 1254 y(E)1227 1244 y(\177)1223
+1254 y(E)1289 1242 y(\022)1285 1254 y(E)32 b(\020)1401
+1242 y(\023)1404 1254 y(I)1462 1242 y(^)1465 1254 y(I)1523
+1244 y(\177)1526 1254 y(I)p 1584 1244 17 5 v 1601 1244
+5 34 v 1673 1273 V 1678 1244 17 5 v 1724 1273 37 63 v
+1793 1273 37 32 v 1878 1239 2 23 v 1878 1267 V 1935 1242
+a(\022)1938 1254 y(I)p 1996 1242 37 32 v 1033 1320 a(\023)1026
+1333 y(O)e(\031)1160 1320 y(^)1153 1333 y(O)1227 1320
+y(\022)1220 1333 y(O)h(~)-24 b(o)1345 1320 y(~)1338 1333
+y(O)22 b Fj(\026)33 b Fq(l)-14 b(p)33 b(I)-13 b Fh(P)1590
+1320 y Fq(\023)1584 1333 y(U)1663 1320 y(^)1657 1333
+y(U)1730 1320 y(\022)1724 1333 y(U)38 b(\023)-25 b(y)1866
+1320 y(\023)1860 1333 y(Y)38 b(\026)43 b(\023)1037 1412
+y(-)34 b Fp(\006)p 1166 1412 15 2 v 1166 1419 V 1218
+1401 a Fh(3)1231 1412 y Fj(=)1248 1417 y Fh(4)1286 1412
+y Fp({)c(x)c(\004)j Fq(\030)1525 1394 y Fi(\016)1590
+1412 y Fq(\177)54 b Fp(\001)1733 1394 y Fh(1)c(3)g(2)p
+1940 1410 15 22 v -2 1578 a Fq(Co)q(de)17 b(P)o(age)g(ISO-8859-1)h
+(\(Latin)f(1\):)306 b(Co)q(de)17 b(P)o(age)g(ISO-8859-1)h(\(Latin)f
+(1\))1009 1640 y(with)f(extensions)g(from)f(Microsoft)h(Windo)o(ws:)65
+1709 y(!)34 b Fk(\015)-6 b(\015)23 b Fq(#)g($)31 b(\045)26
+b(&)36 b Fk(\015)43 b Fq(\()36 b(\))c Fp(\003)22 b Fq(+)36
+b(,)53 b(-)59 b(.)48 b(/)5 1788 y(0)31 b(1)f(2)i(3)g(4)39
+b(5)j(6)d(7)d(8)31 b(9)36 b(:)j(;)c Fj(<)c Fq(=)36 b
+Fj(>)h Fq(?)-2 1866 y(@)18 b(A)g(B)i(C)g(D)28 b(E)34
+b(F)28 b(G)23 b(H)k(I)33 b(J)22 b(K)27 b(L)32 b(M)h(N)c(O)0
+1945 y(P)20 b(Q)e(R)24 b(S)g(T)k(U)g(V)20 b(W)d(X)h(Y)j(Z)31
+b([)42 b Fp(n)49 b Fq(])844 1927 y Fi(^)p 918 1945 15
+2 v 5 2024 a Fq(\022)31 b(a)e(b)i(c)g(d)39 b(e)47 b(f)d(g)35
+b(h)g(i)k(j)33 b(k)42 b(l)f(m)e(n)i(o)3 2103 y(p)29 b(q)j(r)k(s)i(t)i
+(u)f(v)32 b(w)f(x)d(y)j(z)f Fp(f)42 b(j)49 b(g)842 2085
+y Fi(\030)65 2261 y Fq(`)41 b(')65 2340 y(<)c(c)120 2338
+y Fh(/)163 2340 y Fg($)18 b Fp(\002)227 2340 y
+ 1 setgray
+ 227 2340
+a Fp(\017)252 2340 y
+ 0 setgray
+ 252 2340 a -25 w Fp(\016)k Fl(U)p
+366 2325 2 23 v 366 2352 V 108 w Fp(x)37 b Fq(\177)24
+b Fe(\323)590 2322 y Fh(a)590 2346 y(\026)638 2336 y
+Fm(\034)698 2340 y Fp(:)44 b Fq(-)34 b Fl(r)40 b Fq(\026)7
+2401 y Fi(\016)53 2419 y Fp(\006)117 2401 y Fh(2)d(3)226
+2419 y Fq(\023)f Fj(\026)h Fp({)k(\001)i Fq(\030)535
+2401 y Fh(1)37 b(o)590 2425 y(\026)638 2415 y Fm(\035)693
+2408 y Fh(1)706 2419 y Fj(=)723 2424 y Fh(4)762 2408
+y(1)775 2419 y Fj(=)792 2424 y Fh(2)836 2408 y(3)849
+2419 y Fj(=)866 2424 y Fh(4)913 2419 y Fq(>)5 2485 y(\022)-1
+2497 y(A)60 2485 y(\023)54 2497 y(A)114 2485 y(^)108
+2497 y(A)170 2485 y(~)164 2497 y(A)226 2487 y(\177)220
+2497 y(A)283 2489 y(\027)283 2497 y(A)25 b(\035)e(C)-28
+b(\030)478 2485 y(\022)474 2497 y(E)533 2485 y(\023)529
+2497 y(E)587 2485 y(^)583 2497 y(E)641 2487 y(\177)636
+2497 y(E)702 2485 y(\022)706 2497 y(I)771 2485 y(\023)774
+2497 y(I)845 2485 y(^)848 2497 y(I)912 2487 y(\177)915
+2497 y(I)0 2570 y(-)-2 2576 y(D)60 2564 y(~)54 2576 y(N)114
+2564 y(\022)108 2576 y(O)170 2564 y(\023)163 2576 y(O)226
+2564 y(^)219 2576 y(O)289 2564 y(~)282 2576 y(O)355 2566
+y(\177)348 2576 y(O)25 b Fp(\002)c Fq(\037)533 2564 y(\022)527
+2576 y(U)587 2564 y(\023)581 2576 y(U)641 2564 y(^)635
+2576 y(U)702 2566 y(\177)696 2576 y(U)771 2564 y(\023)765
+2576 y(Y)41 b(I)-13 b Fh(P)40 b Fq(\031)5 2655 y(\022)-24
+b(a)31 b(\023)-24 b(a)30 b(^)-24 b(a)32 b(~)-24 b(a)226
+2657 y(\177)226 2655 y(a)33 b(\027)-30 b(a)35 b(\032)g(\030)-22
+b(c)37 b(\022)-23 b(e)32 b(\023)-23 b(e)31 b(^)-23 b(e)641
+2657 y(\177)642 2655 y(e)38 b(\022)-19 b(\020)50 b(\023)-19
+b(\020)55 b(^)-19 b(\020)912 2657 y(\177)917 2655 y(\020)3
+2734 y Ff(g)29 b Fq(~)-26 b(n)29 b(\022)-24 b(o)32 b(\023)-24
+b(o)32 b(^)-24 b(o)39 b(~)-24 b(o)355 2736 y(\177)355
+2734 y(o)32 b Fp(\004)27 b Fq(\034)k(\022)-26 b(u)29
+b(\023)-26 b(u)29 b(^)-26 b(u)702 2736 y(\177)701 2734
+y(u)43 b(\023)-25 b(y)48 b(l)-14 b(p)912 2736 y(\177)911
+2734 y(y)1076 1709 y(!)34 b Fk(\015)-6 b(\015)23 b Fq(#)g($)36
+b(\045)31 b(&)37 b Fk(\015)42 b Fq(\()52 b(\))47 b Fp(\003)22
+b Fq(+)36 b(,)53 b(-)60 b(.)47 b(/)1016 1788 y(0)31 b(1)f(2)i(3)g(4)44
+b(5)j(6)39 b(7)e(8)46 b(9)51 b(:)39 b(;)d Fj(<)30 b Fq(=)36
+b Fj(>)h Fq(?)1009 1866 y(@)17 b(A)i(B)h(C)g(D)34 b(E)k(F)28
+b(G)c(H)42 b(I)48 b(J)22 b(K)27 b(L)32 b(M)h(N)c(O)1012
+1945 y(P)19 b(Q)e(R)24 b(S)h(T)33 b(U)h(V)20 b(W)d(X)33
+b(Y)j(Z)31 b([)42 b Fp(n)49 b Fq(])1897 1927 y Fi(^)p
+1970 1945 15 2 v 1016 2024 a Fq(\022)31 b(a)e(b)i(c)g(d)44
+b(e)53 b(f)43 b(g)35 b(h)50 b(i)55 b(j)33 b(k)42 b(l)f(m)e(n)i(o)1015
+2103 y(p)28 b(q)k(r)k(s)h(t)46 b(u)e(v)33 b(w)d(x)44
+b(y)i(z)30 b Fp(f)42 b(j)49 b(g)1895 2085 y Fi(\030)1132
+2212 y Fq(')1178 2182 y Fj(f)1238 2212 y Fq(")1284 2182
+y Fj(:)8 b(:)g(:)35 b Fp(y)42 b(z)37 b Fq(^)1552 2171
+y Fh(0)1565 2182 y Fj(=)1582 2187 y Fh(00)1639 2169 y
+Fq(\024)1638 2182 y(S)1693 2178 y Fo(<)1742 2182 y Fq(\036)1076
+2261 y(`)k(')36 b(\\)c(")44 b Fp(\017)i Fq({)27 b(|)d(~)1552
+2243 y Fh(TM)1639 2261 y Fq(\024)-22 b(s)1693 2257 y
+Fo(>)1748 2261 y Fq(\033)1964 2250 y(\177)1958 2261 y(Y)1076
+2340 y(<)36 b(c)1130 2338 y Fh(/)1174 2340 y Fg($)17
+b Fp(\002)1238 2340 y
+ 1 setgray
+ 1238 2340 a Fp(\017)1263 2340 y
+ 0 setgray
+
+1263 2340 a -25 w Fp(\016)27 b Fl(U)p 1387 2325 2 23
+v 1387 2352 V 114 w Fp(x)37 b Fq(\177)h Fe(\323)1642
+2322 y Fh(a)1642 2346 y(\026)1690 2336 y Fm(\034)1750
+2340 y Fp(:)44 b Fq(-)35 b Fl(r)k Fq(\026)1018 2401 y
+Fi(\016)1063 2419 y Fp(\006)1127 2401 y Fh(2)f(3)1237
+2419 y Fq(\023)k Fj(\026)f Fp({)h(\001)g Fq(\030)1572
+2401 y Fh(1)52 b(o)1642 2425 y(\026)1690 2415 y Fm(\035)1745
+2408 y Fh(1)1758 2419 y Fj(=)1775 2424 y Fh(4)1814 2408
+y(1)1827 2419 y Fj(=)1844 2424 y Fh(2)1888 2408 y(3)1901
+2419 y Fj(=)1918 2424 y Fh(4)1965 2419 y Fq(>)1016 2485
+y(\022)1010 2497 y(A)1071 2485 y(\023)1064 2497 y(A)1125
+2485 y(^)1119 2497 y(A)1181 2485 y(~)1175 2497 y(A)1237
+2487 y(\177)1231 2497 y(A)1299 2489 y(\027)1299 2497
+y(A)30 b(\035)24 b(C)-28 b(\030)1500 2485 y(\022)1495
+2497 y(E)1570 2485 y(\023)1566 2497 y(E)1639 2485 y(^)1635
+2497 y(E)1693 2487 y(\177)1689 2497 y(E)1754 2485 y(\022)1758
+2497 y(I)1823 2485 y(\023)1826 2497 y(I)1897 2485 y(^)1901
+2497 y(I)1964 2487 y(\177)1967 2497 y(I)1011 2570 y(-)1009
+2576 y(D)1071 2564 y(~)1064 2576 y(N)1125 2564 y(\022)1118
+2576 y(O)1181 2564 y(\023)1174 2576 y(O)1237 2564 y(^)1230
+2576 y(O)1305 2564 y(~)1298 2576 y(O)1376 2566 y(\177)1369
+2576 y(O)25 b Fp(\002)d Fq(\037)1570 2564 y(\022)1564
+2576 y(U)1639 2564 y(\023)1633 2576 y(U)1693 2564 y(^)1687
+2576 y(U)1754 2566 y(\177)1748 2576 y(U)1823 2564 y(\023)1817
+2576 y(Y)41 b(I)-13 b Fh(P)40 b Fq(\031)1016 2655 y(\022)-24
+b(a)31 b(\023)-24 b(a)30 b(^)-24 b(a)32 b(~)-24 b(a)1237
+2657 y(\177)1237 2655 y(a)38 b(\027)-30 b(a)41 b(\032)35
+b(\030)-22 b(c)37 b(\022)-23 b(e)47 b(\023)-23 b(e)46
+b(^)-23 b(e)1693 2657 y(\177)1694 2655 y(e)38 b(\022)-19
+b(\020)50 b(\023)-19 b(\020)55 b(^)-19 b(\020)1964 2657
+y(\177)1969 2655 y(\020)1014 2734 y Ff(g)29 b Fq(~)-26
+b(n)29 b(\022)-24 b(o)32 b(\023)-24 b(o)32 b(^)-24 b(o)44
+b(~)-24 b(o)1376 2736 y(\177)1376 2734 y(o)32 b Fp(\004)c
+Fq(\034)46 b(\022)-26 b(u)44 b(\023)-26 b(u)29 b(^)-26
+b(u)1754 2736 y(\177)1753 2734 y(u)43 b(\023)-25 b(y)48
+b(l)-14 b(p)1964 2736 y(\177)1963 2734 y(y)-2 2899 y
+Fd(T)o(yp)q(eset)16 b(b)o(y)d(L)225 2894 y Fc(a)244 2899
+y Fd(T)267 2911 y(E)291 2899 y(X)h(with)f Fb(cp)p Fa(nnn)p
+Fb(.sty)h Fd(from)e(F)m(uturaSoft)h(\(Martin)h(Kr)1156
+2901 y(\177)1156 2899 y(amer,)f(D{49179)f(Ostercapp)q(eln\))-2
+2911 y
+ /colorstack [ /colorstack load aload pop currentrgbcolor ] store
+ -2 2911 a -2 2911 a
+ /headingscolor load aload pop setrgbcolor
+ -2 2911 a eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/cptex/lamac.tex b/macros/generic/cptex/lamac.tex
new file mode 100644
index 0000000000..ca8718a95c
--- /dev/null
+++ b/macros/generic/cptex/lamac.tex
@@ -0,0 +1,90 @@
+%
+% TeX-Definitionen aus `LaTeX Version 2.09 <25 March 1992>,
+% (C) 1992 by Leslie Lamport' zur Verwendung von LaTeX-Makros in Plain-TeX
+%
+% Makrozusammenstellung und Anpassung:
+% 1994 FuturaSoft (Martin Kr„mer, D-49179 Ostercappeln)
+%
+
+\def\@whilenoop#1{}
+\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax
+ #2\relax}\fi}
+\def\@iwhilenum#1{\ifnum #1\let\@nextwhile\@iwhilenum
+ \else\let\@nextwhile\@whilenoop\fi\@nextwhile{#1}}
+
+\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi}
+\def\@iwhiledim#1{\ifdim #1\let\@nextwhile\@iwhiledim
+ \else\let\@nextwhile\@whilenoop\fi\@nextwhile{#1}}
+
+\long\def\@whileswnoop#1\fi{}
+\long\def\@whilesw#1\fi#2{#1#2\@iwhilesw{#1#2}\fi\fi}
+\long\def\@iwhilesw#1\fi{#1\let\@nextwhile\@iwhilesw
+ \else\let\@nextwhile\@whileswnoop\fi\@nextwhile{#1}\fi}
+
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\@fornoop#1\@@#2#3{}
+
+\def\@for#1:=#2\do#3{\edef\@fortmp{#2}\ifx\@fortmp\@empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
+
+\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}
+
+\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile\@fornoop \else
+ #4\relax\let\@nextwhile\@iforloop\fi\@nextwhile#2\@@#3{#4}}
+
+\def\@gobble#1{}
+\let\protect\relax
+
+\newwrite\@unused
+\newcount\@tempcnta
+\newdimen\@tempdima
+\newdimen\@tempdimb
+
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+\typeout{Macro Extensions from LaTeX Version 2.09 (25 Mar 1992) <25 Mar 1994>.}
+\def\@@warning#1{\typeout{(La)TeX Warning: #1.}}
+\def\@warning#1{\@@warning{#1\on@line}}
+\def\@namedef#1{\expandafter\def\csname #1\endcsname}
+\def\@nameuse#1{\csname #1\endcsname}
+
+\def\@car#1#2\@nil{#1}
+\def\@cdr#1#2\@nil{#2}
+\def\@carcube#1#2#3#4\@nil{#1#2#3}
+
+\long\def\@ifdefinable #1#2{\edef\@tempa{\expandafter\@cdr\string #1\@nil}%
+\@ifundefined{\@tempa}{\edef\@tempb{\expandafter\@carcube \@tempa xxxx\@nil}%
+\ifx \@tempb\@qend \@notdefinable\else
+\ifx \@tempa\@qrelax \@notdefinable\else #2\fi\fi}{\@notdefinable}}
+
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}
+
+\edef\@qend{\expandafter\@cdr\string\end\@nil}
+\edef\@qrelax{\expandafter\@cdr\string\relax\@nil}
+
+\def\@ifnextchar#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}\futurelet
+ \@tempc\@ifnch}
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
+ \fi \@tempd}
+
+\def\^^01{\let\@sptoken= } \^^01 % this makes \@sptoken a space token
+\def\^^01{\@xifnch} \expandafter\def\^^01 {\futurelet\@tempc\@ifnch}
+
+\def\@ifstar#1#2{\@ifnextchar *{\def\@tempa*{#1}\@tempa}{#2}}
+
+\newlinechar`\^^J
+
+\def\@latexerr#1#2{%
+\edef\@tempc{#2}\errhelp\expandafter{\@tempc}%
+\typeout{(La)TeX error. \space See (La)TeX manual for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+\def\@spaces{\space\space\space\space}
+\def\@ehc{Try typing \space <return>
+ \space to proceed.^^JIf that doesn't work, type \space X <return> \space to
+ quit.}
+\def\@notdefinable{\@latexerr{Command name '\@tempa' already used}\@eha}
diff --git a/macros/generic/cptex/tex8.bat b/macros/generic/cptex/tex8.bat
new file mode 100644
index 0000000000..f72ca2edf8
--- /dev/null
+++ b/macros/generic/cptex/tex8.bat
@@ -0,0 +1,17 @@
+if "%1"=="" goto :all
+type %1 | sed -f tex8.sed >%1
+goto :end
+
+:all
+mkdir tex8fmts
+copy p:\emtex\texfmts\*.bat tex8fmts
+for %%f in (tex8fmts\*.bat) do call %0 %%f
+copy p:\emtex\texfmts\*.cmd tex8fmts
+for %%f in (tex8fmts\*.cmd) do call %0 %%f
+mkdir btex8fmt
+copy p:\emtex\btexfmts\*.bat btex8fmt
+for %%f in (btex8fmt\*.bat) do call %0 %%f
+copy p:\emtex\btexfmts\*.cmd btex8fmt
+for %%f in (btex8fmt\*.cmd) do call %0 %%f
+
+:end
diff --git a/macros/generic/cptex/tex8.sed b/macros/generic/cptex/tex8.sed
new file mode 100644
index 0000000000..8ee678eb99
--- /dev/null
+++ b/macros/generic/cptex/tex8.sed
@@ -0,0 +1,4 @@
+s/^\(b?tex[^ ]*[ ]+[\/-]i[ ]+[\/-]8[ ]+\)/\1-o -r /
+t end
+s/^\(b?tex[^ ]*[ ]+[\/-]i[ ]+\)[\/-]c[:=]?=?[^ ]+[ ]+/\1-8 -o -r /
+: end
diff --git a/macros/generic/cptex/tex8fmts/fmt.bat b/macros/generic/cptex/tex8fmts/fmt.bat
new file mode 100644
index 0000000000..a45314b5e3
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/fmt.bat
@@ -0,0 +1,21 @@
+echo off
+rem fmt.bat
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+tex -i -8 -o -r plain \dump
+if errorlevel 1 goto error
+tex -i -8 -o -r lplain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running fmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/fmt.cmd b/macros/generic/cptex/tex8fmts/fmt.cmd
new file mode 100644
index 0000000000..7306183daa
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/fmt.cmd
@@ -0,0 +1,21 @@
+echo off
+rem fmt.cmd
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+texp -i -8 -o -r plain \dump
+if errorlevel 1 goto error
+texp -i -8 -o -r lplain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running fmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/gfmt.bat b/macros/generic/cptex/tex8fmts/gfmt.bat
new file mode 100644
index 0000000000..01385bc3e0
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/gfmt.bat
@@ -0,0 +1,29 @@
+echo off
+rem gfmt.bat
+if exist hyphen.tex goto ex
+if exist plaing.tex goto ex
+if exist lplaing.tex goto ex
+copy \emtex\texinput\plain.tex plaing.tex
+copy \emtex\texinput\ghyphen.min hyphen.tex
+tex -i -8 -o -r \language1\input plaing \dump
+if errorlevel 1 goto error
+copy \emtex\texinput\lplain.tex lplaing.tex
+tex -i -8 -o -r \language1\input lplaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running gfmt:
+if exist hyphen.tex echo hyphen.tex
+if exist plaing.tex echo plaing.tex
+if exist lplaing.tex echo lplaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist plaing.tex del plaing.tex
+if exist lplaing.tex del lplaing.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/gfmt.cmd b/macros/generic/cptex/tex8fmts/gfmt.cmd
new file mode 100644
index 0000000000..76533dc493
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/gfmt.cmd
@@ -0,0 +1,29 @@
+echo off
+rem gfmt.cmd
+if exist hyphen.tex goto ex
+if exist plaing.tex goto ex
+if exist lplaing.tex goto ex
+copy \emtex\texinput\plain.tex plaing.tex
+copy \emtex\texinput\ghyphen.min hyphen.tex
+texp -i -8 -o -r \language1\input plaing \dump
+if errorlevel 1 goto error
+copy \emtex\texinput\lplain.tex lplaing.tex
+texp -i -8 -o -r \language1\input lplaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running gfmt:
+if exist hyphen.tex echo hyphen.tex
+if exist plaing.tex echo plaing.tex
+if exist lplaing.tex echo lplaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist plaing.tex del plaing.tex
+if exist lplaing.tex del lplaing.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/gslifmt.bat b/macros/generic/cptex/tex8fmts/gslifmt.bat
new file mode 100644
index 0000000000..fbd6c6b6e7
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/gslifmt.bat
@@ -0,0 +1,23 @@
+echo off
+rem gslifmt.bat
+if exist hyphen.tex goto ex
+if exist splaing.tex goto ex
+copy \emtex\texinput\ghyphen.min hyphen.tex
+copy \emtex\texinput\splain.tex splaing.tex
+tex -i -8 -o -r \language1\input splaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running gslifmt:
+if exist hyphen.tex echo hyphen.tex
+if exist splaing.tex echo splaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist splaing.tex del splaing.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/gslifmt.cmd b/macros/generic/cptex/tex8fmts/gslifmt.cmd
new file mode 100644
index 0000000000..a8d914dc71
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/gslifmt.cmd
@@ -0,0 +1,23 @@
+echo off
+rem gslifmt.cmd
+if exist hyphen.tex goto ex
+if exist splaing.tex goto ex
+copy \emtex\texinput\ghyphen.min hyphen.tex
+copy \emtex\texinput\splain.tex splaing.tex
+texp -i -8 -o -r \language1\input splaing \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running gslifmt:
+if exist hyphen.tex echo hyphen.tex
+if exist splaing.tex echo splaing.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+if exist splaing.tex del splaing.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/slifmt.bat b/macros/generic/cptex/tex8fmts/slifmt.bat
new file mode 100644
index 0000000000..4297d9f9af
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/slifmt.bat
@@ -0,0 +1,19 @@
+echo off
+rem slifmt.bat
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+tex -i -8 -o -r splain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running slifmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cptex/tex8fmts/slifmt.cmd b/macros/generic/cptex/tex8fmts/slifmt.cmd
new file mode 100644
index 0000000000..0f177d01c5
--- /dev/null
+++ b/macros/generic/cptex/tex8fmts/slifmt.cmd
@@ -0,0 +1,19 @@
+echo off
+rem slifmt.cmd
+if exist hyphen.tex goto ex
+copy \emtex\texinput\hyphen.tex hyphen.tex
+texp -i -8 -o -r splain \input 3 \dump
+if errorlevel 1 goto error
+goto done
+
+:ex
+echo The following files should be removed or renamed before running slifmt:
+if exist hyphen.tex echo hyphen.tex
+goto end
+
+:error
+echo Error
+
+:done
+if exist hyphen.tex del hyphen.tex
+:end
diff --git a/macros/generic/cropmark/cropmark.sty b/macros/generic/cropmark/cropmark.sty
new file mode 100644
index 0000000000..f6bdada0fb
--- /dev/null
+++ b/macros/generic/cropmark/cropmark.sty
@@ -0,0 +1,94 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Cropmark.tex
+% version 1.0
+%
+% This will put crop marks on everythings that's \shipout'ed.
+% It will work with any format, since it relies on redefinition
+% of \shipout. Exception: if you declare \output{} you will
+% not get crop marks.
+%
+% Cut along the center of the rules to get exactly the shipped
+% out box. To get padding around this box, use the parameters below.
+%
+% User adjustable parameters:
+% \croplength length of the crop rules
+% \cropwidth width of the crop rules
+% \cropsep separation between rule and page box
+% \croppadtop padding in case page box looks bigger than it is
+% \croppadbot (for instance with plain TeX head/footline)
+% \croppadlr
+%
+% Date: 17 March 1992
+%
+% Author:
+% Victor Eijkhout
+% Department of Computer Science
+% University Tennessee at Knoxville
+% 104 Ayres Hall
+% Knoxville, TN 37996
+% USA
+%
+% eijkhout@cs.utk.edu
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% save the old \shipout command
+\let\xshipout\shipout
+
+% define a new one: investigate what's being shipped
+\def\shipout{\futurelet\SomeBox\yshipout}
+
+% if its a box register, do postprocessing with \afterassignment,
+% otherwise do \afterassignment which will do \aftergroup
+\def\yshipout
+ {\ifx\SomeBox\box \let\next\shipAfterRegister
+ \else \ifx\SomeBox\copy \let\next\shipAfterRegister
+ \else \let\next\shipAfterBox \fi\fi
+ \afterassignment\next\setbox0=
+ }
+\def\shipAfterBox{\aftergroup\shipAfterRegister}
+
+% now we have whatever is being shipped in box0,
+% so we can insert crop marks
+\newdimen\croplength \croplength=20pt
+\newdimen\cropsep \cropsep=10pt
+\newdimen\cropwidth \cropwidth=2pt
+
+\newdimen\croppadtop \croppadtop=0pt
+\newdimen\croppadbot \croppadbot=0pt
+\newdimen\croppadlr \croppadlr=0pt
+
+\def\crophrule{\vrule height\cropwidth depth0pt width\croplength}
+\def\cropvrule{\vrule width\cropwidth depth0pt height\croplength}
+
+\def\shipAfterRegister
+ {\setbox0\vbox
+ {\offinterlineskip
+ \dimen0\cropsep\advance\dimen0\croplength
+ \setbox2\hbox to \wd0
+ {\kern-\croppadlr\kern-.5\cropwidth
+ \cropvrule\hfil\cropvrule
+ \kern-.5\cropwidth\kern-\croppadlr}
+ \setbox4\hbox to \wd0{\llap{\crophrule\kern\cropsep\kern\croppadlr}
+ \hfil
+ \rlap{\kern\croppadlr\kern\cropsep\crophrule}}
+ % go a bit up, put vertical rules, put horizontal rules
+ \kern-\dimen0
+ \copy2
+ \kern\cropsep\kern-.5\cropwidth
+ \copy4
+ \kern-.5\cropwidth
+ % padding
+ \kern\croppadtop
+ % the box to be shipped
+ \box0
+ % padding
+ \kern\croppadbot
+ % and now the top in reverse
+ \kern-.5\cropwidth
+ \box4
+ \kern-.5\cropwidth\kern\cropsep
+ \box2
+ }
+ \xshipout\box0\relax}
+\endinput
diff --git a/macros/generic/cropmark/croptest.tex b/macros/generic/cropmark/croptest.tex
new file mode 100644
index 0000000000..06058b6861
--- /dev/null
+++ b/macros/generic/cropmark/croptest.tex
@@ -0,0 +1,44 @@
+% An illustration of cropmark.sty by Victor Eijkhout.
+% This file belongs to cropmark.sty version 1.0 or later,
+% it is both plain TeX and LaTeX compatible.
+
+\def\plainname{plain}
+\ifx\fmtname\plainname
+ \input cropmark.sty
+\else
+ \documentstyle[cropmark]{article}
+ \begin{document}
+\fi
+
+\parindent=0pt
+\def\page
+{Left\hfill toP
+\vfill
+Bottom\hfill righT
+\eject}
+
+% First illustrate the default settings
+
+\page
+
+% Now stretch a bit (this is necessary for LaTeX)
+
+\ifx\plainname\fmtname
+ \advance\croppadtop by 5pt
+ \advance\croppadbot by 5pt
+ \advance\croppadlr by 2pt
+\else
+ \addtolength{\croppadtop}{-10pt}
+ \addtolength{\croppadbot}{15pt}
+ \addtolength{\croppadlr}{15pt}
+\fi
+
+\page
+
+\edef\byebye{
+\if\fmtname\plainname
+ \noexpand\csname bye\noexpand\endcsname
+\else
+ \noexpand\end{document}
+\fi}
+\byebye \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/README b/macros/generic/diagrams/borceux/README
new file mode 100644
index 0000000000..8a606dfd9e
--- /dev/null
+++ b/macros/generic/diagrams/borceux/README
@@ -0,0 +1,23 @@
+This is the borceux package of diagram macros.
+
+Copyright 1993 Francis Borceux
+You may freely use, modify, and/or distribute each of the files in this
+package without limitation. The package consists of the following files:
+
+ README
+ compatibility/OldDiagram
+ compatibility/OldMaxiDiagram
+ compatibility/OldMicroDiagram
+ compatibility/OldMiniDiagram
+ compatibility/OldMultipleArrows
+ diagram/Diagram
+ diagram/MaxiDiagram
+ diagram/MicroDiagram
+ diagram/MiniDiagram
+ diagram/MultipleArrows
+ user-guides/Diagram_Mode_d_Emploi
+ user-guides/Diagram_Read_Me
+
+Of course no support is guaranteed, but the author will attempt to
+assist with problems. Current email address:
+francis dot borceux at uclouvain dot be.
diff --git a/macros/generic/diagrams/borceux/compatibility/OldDiagram b/macros/generic/diagrams/borceux/compatibility/OldDiagram
new file mode 100644
index 0000000000..5b10a593c3
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldDiagram
@@ -0,0 +1,291 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+\newcommand{\edotarv}[1]{\edotar[#1]}
+\newcommand{\Edotarv}[2]{\Edotar[#2]{#1}}
+\newcommand{\edotaRv}[2]{\edotaR[#2]{#1}}
+\newcommand{\emonov}[1]{\emono[#1]}
+\newcommand{\Emonov}[2]{\Emono[#2]{#1}}
+\newcommand{\emonOv}[2]{\emonO[#2]{#1}}
+\newcommand{\eepiv}[1]{\eepi[#1]}
+\newcommand{\Eepiv}[2]{\Eepi[#2]{#1}}
+\newcommand{\eepIv}[2]{\eepI[#2]{#1}}
+\newcommand{\ebimov}[1]{\ebimo[#1]}
+\newcommand{\Ebimov}[2]{\Ebimo[#2]{#1}}
+\newcommand{\ebimOv}[2]{\ebimO[#2]{#1}}
+\newcommand{\eisov}[1]{\eiso[#1]}
+\newcommand{\Eisov}[2]{\Eiso[#2]{#1}}
+\newcommand{\eisOv}[2]{\eisO[#2]{#1}}
+\newcommand{\eeqlrv}[1]{\eeql[#1]}
+\newcommand{\ebiarv}[1]{\ebiar[#1]}
+\newcommand{\Ebiarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\eadjarv}[1]{\eadjar[#1]}
+\newcommand{\Eadjarv}[3]{\Ear[#3]{#1}{#2}}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+\newcommand{\wdotarv}[1]{\wdotar[#1]}
+\newcommand{\Wdotarv}[2]{\Wdotar[#2]{#1}}
+\newcommand{\wdotaRv}[2]{\wdotaR[#2]{#1}}
+\newcommand{\wmonov}[1]{\wmono[#1]}
+\newcommand{\Wmonov}[2]{\Wmono[#2]{#1}}
+\newcommand{\wmonOv}[2]{\wmonO[#2]{#1}}
+\newcommand{\wepiv}[1]{\wepi[#1]}
+\newcommand{\Wepiv}[2]{\Wepi[#2]{#1}}
+\newcommand{\wepIv}[2]{\wepI[#2]{#1}}
+\newcommand{\wbimov}[1]{\wbimo[#1]}
+\newcommand{\Wbimov}[2]{\Wbimo[#2]{#1}}
+\newcommand{\wbimOv}[2]{\wbimO[#2]{#1}}
+\newcommand{\wisov}[1]{\wiso[#1]}
+\newcommand{\Wisov}[2]{\Wiso[#2]{#1}}
+\newcommand{\wisOv}[2]{\wisO[#2]{#1}}
+\newcommand{\weqlrv}[1]{\weql[#1]}
+\newcommand{\wbiarv}[1]{\wbiar[#1]}
+\newcommand{\Wbiarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wadjarv}[1]{\wadjar[#1]}
+\newcommand{\Wadjarv}[3]{\War[#3]{#1}{#2}}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+\newcommand{\ndotarv}[1]{\ndotar[#1]}
+\newcommand{\Ndotarv}[2]{\Ndotar[#2]{#1}}
+\newcommand{\ndotaRv}[2]{\ndotaR[#2]{#1}}
+\newcommand{\nmonov}[1]{\nmono[#1]}
+\newcommand{\Nmonov}[2]{\Nmono[#2]{#1}}
+\newcommand{\nmonOv}[2]{\nmonO[#2]{#1}}
+\newcommand{\nepiv}[1]{\nepi[#1]}
+\newcommand{\Nepiv}[2]{\Nepi[#2]{#1}}
+\newcommand{\nepIv}[2]{\nepI[#2]{#1}}
+\newcommand{\nbimov}[1]{\nbimo[#1]}
+\newcommand{\Nbimov}[2]{\Nbimo[#2]{#1}}
+\newcommand{\nbimOv}[2]{\nbimO[#2]{#1}}
+\newcommand{\nisov}[1]{\niso[#1]}
+\newcommand{\Nisov}[2]{\Niso[#2]{#1}}
+\newcommand{\nisOv}[2]{\nisO[#2]{#1}}
+\newcommand{\neqlrv}[1]{\neql[#1]}
+\newcommand{\nbiarv}[1]{\nbiar[#1]}
+\newcommand{\Nbiarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\nadjarv}[1]{\nadjar[#1]}
+\newcommand{\Nadjarv}[3]{\Nar[#3]{#1}{#2}}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+\newcommand{\sdotarv}[1]{\sdotar[#1]}
+\newcommand{\Sdotarv}[2]{\Sdotar[#2]{#1}}
+\newcommand{\sdotaRv}[2]{\sdotaR[#2]{#1}}
+\newcommand{\smonov}[1]{\smono[#1]}
+\newcommand{\Smonov}[2]{\Smono[#2]{#1}}
+\newcommand{\smonOv}[2]{\smonO[#2]{#1}}
+\newcommand{\sepiv}[1]{\sepi[#1]}
+\newcommand{\Sepiv}[2]{\Sepi[#2]{#1}}
+\newcommand{\sepIv}[2]{\sepI[#2]{#1}}
+\newcommand{\sbimov}[1]{\sbimo[#1]}
+\newcommand{\Sbimov}[2]{\Sbimo[#2]{#1}}
+\newcommand{\sbimOv}[2]{\sbimO[#2]{#1}}
+\newcommand{\sisov}[1]{\siso[#1]}
+\newcommand{\Sisov}[2]{\Siso[#2]{#1}}
+\newcommand{\sisOv}[2]{\sisO[#2]{#1}}
+\newcommand{\seqlrv}[1]{\seql[#1]}
+\newcommand{\sbiarv}[1]{\sbiar[#1]}
+\newcommand{\Sbiarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\sadjarv}[1]{\sadjar[#1]}
+\newcommand{\Sadjarv}[3]{\Sar[#3]{#1}{#2}}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldDiagram}
+
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram b/macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram
new file mode 100644
index 0000000000..a1fc33b66a
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram
@@ -0,0 +1,209 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+\newcommand{\edotarv}[1]{\edotar[#1]}
+\newcommand{\Edotarv}[2]{\Edotar[#2]{#1}}
+\newcommand{\edotaRv}[2]{\edotaR[#2]{#1}}
+\newcommand{\emonov}[1]{\emono[#1]}
+\newcommand{\Emonov}[2]{\Emono[#2]{#1}}
+\newcommand{\emonOv}[2]{\emonO[#2]{#1}}
+\newcommand{\eepiv}[1]{\eepi[#1]}
+\newcommand{\Eepiv}[2]{\Eepi[#2]{#1}}
+\newcommand{\eepIv}[2]{\eepI[#2]{#1}}
+\newcommand{\ebimov}[1]{\ebimo[#1]}
+\newcommand{\Ebimov}[2]{\Ebimo[#2]{#1}}
+\newcommand{\ebimOv}[2]{\ebimO[#2]{#1}}
+\newcommand{\eisov}[1]{\eiso[#1]}
+\newcommand{\Eisov}[2]{\Eiso[#2]{#1}}
+\newcommand{\eisOv}[2]{\eisO[#2]{#1}}
+\newcommand{\eeqlrv}[1]{\eeql[#1]}
+\newcommand{\ebiarv}[1]{\ebiar[#1]}
+\newcommand{\Ebiarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\eadjarv}[1]{\eadjar[#1]}
+\newcommand{\Eadjarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\etriarv}[1]{\etriar[#1]}
+\newcommand{\Etriarv}[4]{\Etriar[#4]{#1}{#2}{#3}}
+\newcommand{\etriaRv}[4]{\etriaR[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjarv}[1]{\etriadjar[#1]}
+\newcommand{\Etriadjarv}[4]{\Etriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjaRv}[4]{\etriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\equadriarv}[1]{\equadriar[#1]}
+\newcommand{\equadriadjarv}[1]{\equadriadjar[#1]}
+\newcommand{\equintiarv}[1]{\equintiar[#1]}
+\newcommand{\equintiadjarv}[1]{\equintiadjar[#1]}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+\newcommand{\wdotarv}[1]{\wdotar[#1]}
+\newcommand{\Wdotarv}[2]{\Wdotar[#2]{#1}}
+\newcommand{\wdotaRv}[2]{\wdotaR[#2]{#1}}
+\newcommand{\wmonov}[1]{\wmono[#1]}
+\newcommand{\Wmonov}[2]{\Wmono[#2]{#1}}
+\newcommand{\wmonOv}[2]{\wmonO[#2]{#1}}
+\newcommand{\wepiv}[1]{\wepi[#1]}
+\newcommand{\Wepiv}[2]{\Wepi[#2]{#1}}
+\newcommand{\wepIv}[2]{\wepI[#2]{#1}}
+\newcommand{\wbimov}[1]{\wbimo[#1]}
+\newcommand{\Wbimov}[2]{\Wbimo[#2]{#1}}
+\newcommand{\wbimOv}[2]{\wbimO[#2]{#1}}
+\newcommand{\wisov}[1]{\wiso[#1]}
+\newcommand{\Wisov}[2]{\Wiso[#2]{#1}}
+\newcommand{\wisOv}[2]{\wisO[#2]{#1}}
+\newcommand{\weqlrv}[1]{\weql[#1]}
+\newcommand{\wbiarv}[1]{\wbiar[#1]}
+\newcommand{\Wbiarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wadjarv}[1]{\wadjar[#1]}
+\newcommand{\Wadjarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wtriarv}[1]{\wtriar[#1]}
+\newcommand{\Wtriarv}[4]{\Wtriar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriaRv}[4]{\wtriaR[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjarv}[1]{\wtriadjar[#1]}
+\newcommand{\Wtriadjarv}[4]{\Wtriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjaRv}[4]{\wtriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\wquadriarv}[1]{\wquadriar[#1]}
+\newcommand{\wquadriadjarv}[1]{\wquadriadjar[#1]}
+\newcommand{\wquintiarv}[1]{\wquintiar[#1]}
+\newcommand{\wquintiadjarv}[1]{\wquintiadjar[#1]}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+\newcommand{\ndotarv}[1]{\ndotar[#1]}
+\newcommand{\Ndotarv}[2]{\Ndotar[#2]{#1}}
+\newcommand{\ndotaRv}[2]{\ndotaR[#2]{#1}}
+\newcommand{\nmonov}[1]{\nmono[#1]}
+\newcommand{\Nmonov}[2]{\Nmono[#2]{#1}}
+\newcommand{\nmonOv}[2]{\nmonO[#2]{#1}}
+\newcommand{\nepiv}[1]{\nepi[#1]}
+\newcommand{\Nepiv}[2]{\Nepi[#2]{#1}}
+\newcommand{\nepIv}[2]{\nepI[#2]{#1}}
+\newcommand{\nbimov}[1]{\nbimo[#1]}
+\newcommand{\Nbimov}[2]{\Nbimo[#2]{#1}}
+\newcommand{\nbimOv}[2]{\nbimO[#2]{#1}}
+\newcommand{\nisov}[1]{\niso[#1]}
+\newcommand{\Nisov}[2]{\Niso[#2]{#1}}
+\newcommand{\nisOv}[2]{\nisO[#2]{#1}}
+\newcommand{\neqlrv}[1]{\neql[#1]}
+\newcommand{\nbiarv}[1]{\nbiar[#1]}
+\newcommand{\Nbiarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\nadjarv}[1]{\nadjar[#1]}
+\newcommand{\Nadjarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\ntriarv}[1]{\ntriar[#1]}
+\newcommand{\Ntriarv}[4]{\Ntriar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriaRv}[4]{\ntriaR[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjarv}[1]{\ntriadjar[#1]}
+\newcommand{\Ntriadjarv}[4]{\Ntriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjaRv}[4]{\ntriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\nquadriarv}[1]{\nquadriar[#1]}
+\newcommand{\nquadriadjarv}[1]{\nquadriadjar[#1]}
+\newcommand{\nquintiarv}[1]{\nquintiar[#1]}
+\newcommand{\nquintiadjarv}[1]{\nquintiadjar[#1]}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+\newcommand{\sdotarv}[1]{\sdotar[#1]}
+\newcommand{\Sdotarv}[2]{\Sdotar[#2]{#1}}
+\newcommand{\sdotaRv}[2]{\sdotaR[#2]{#1}}
+\newcommand{\smonov}[1]{\smono[#1]}
+\newcommand{\Smonov}[2]{\Smono[#2]{#1}}
+\newcommand{\smonOv}[2]{\smonO[#2]{#1}}
+\newcommand{\sepiv}[1]{\sepi[#1]}
+\newcommand{\Sepiv}[2]{\Sepi[#2]{#1}}
+\newcommand{\sepIv}[2]{\sepI[#2]{#1}}
+\newcommand{\sbimov}[1]{\sbimo[#1]}
+\newcommand{\Sbimov}[2]{\Sbimo[#2]{#1}}
+\newcommand{\sbimOv}[2]{\sbimO[#2]{#1}}
+\newcommand{\sisov}[1]{\siso[#1]}
+\newcommand{\Sisov}[2]{\Siso[#2]{#1}}
+\newcommand{\sisOv}[2]{\sisO[#2]{#1}}
+\newcommand{\seqlrv}[1]{\seql[#1]}
+\newcommand{\sbiarv}[1]{\sbiar[#1]}
+\newcommand{\Sbiarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\sadjarv}[1]{\sadjar[#1]}
+\newcommand{\Sadjarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\Striarv}[4]{\Striar[#4]{#1}{#2}{#3}}
+\newcommand{\striaRv}[4]{\striaR[#4]{#1}{#2}{#3}}
+\newcommand{\striadjarv}[1]{\striadjar[#1]}
+\newcommand{\Striadjarv}[4]{\Striadjar[#4]{#1}{#2}{#3}}
+\newcommand{\striadjaRv}[4]{\striadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\squadriarv}[1]{\squadriar[#1]}
+\newcommand{\squadriadjarv}[1]{\squadriadjar[#1]}
+\newcommand{\squintiarv}[1]{\squintiar[#1]}
+\newcommand{\squintiadjarv}[1]{\nquintiadjar[#1]}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMaxiDiagram}
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMicroDiagram b/macros/generic/diagrams/borceux/compatibility/OldMicroDiagram
new file mode 100644
index 0000000000..26bd21b692
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMicroDiagram
@@ -0,0 +1,90 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMicroDiagram}
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMiniDiagram b/macros/generic/diagrams/borceux/compatibility/OldMiniDiagram
new file mode 100644
index 0000000000..af15140718
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMiniDiagram
@@ -0,0 +1,107 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+\newcommand{\ebiarv}[1]{\ebiar[#1]}
+\newcommand{\Ebiarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\eadjarv}[1]{\eadjar[#1]}
+\newcommand{\Eadjarv}[3]{\Ear[#3]{#1}{#2}}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+\newcommand{\wbiarv}[1]{\wbiar[#1]}
+\newcommand{\Wbiarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wadjarv}[1]{\wadjar[#1]}
+\newcommand{\Wadjarv}[3]{\War[#3]{#1}{#2}}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+\newcommand{\nbiarv}[1]{\nbiar[#1]}
+\newcommand{\Nbiarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\nadjarv}[1]{\nadjar[#1]}
+\newcommand{\Nadjarv}[3]{\Nar[#3]{#1}{#2}}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+\newcommand{\sbiarv}[1]{\sbiar[#1]}
+\newcommand{\Sbiarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\sadjarv}[1]{\sadjar[#1]}
+\newcommand{\Sadjarv}[3]{\Sar[#3]{#1}{#2}}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMiniDiagram}
+
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMultipleArrows b/macros/generic/diagrams/borceux/compatibility/OldMultipleArrows
new file mode 100644
index 0000000000..1b97736a06
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMultipleArrows
@@ -0,0 +1,49 @@
+ % COMPATIBILITY WITH OLDER VERSIONS
+
+\newcommand{\etriarv}[1]{\etriar[#1]}
+\newcommand{\Etriarv}[4]{\Etriar[#4]{#1}{#2}{#3}}
+\newcommand{\etriaRv}[4]{\etriaR[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjarv}[1]{\etriadjar[#1]}
+\newcommand{\Etriadjarv}[4]{\Etriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjaRv}[4]{\etriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\equadriarv}[1]{\equadriar[#1]}
+\newcommand{\equadriadjarv}[1]{\equadriadjar[#1]}
+\newcommand{\equintiarv}[1]{\equintiar[#1]}
+\newcommand{\equintiadjarv}[1]{\equintiadjar[#1]}
+
+\newcommand{\wtriarv}[1]{\wtriar[#1]}
+\newcommand{\Wtriarv}[4]{\Wtriar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriaRv}[4]{\wtriaR[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjarv}[1]{\wtriadjar[#1]}
+\newcommand{\Wtriadjarv}[4]{\Wtriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjaRv}[4]{\wtriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\wquadriarv}[1]{\wquadriar[#1]}
+\newcommand{\wquadriadjarv}[1]{\wquadriadjar[#1]}
+\newcommand{\wquintiarv}[1]{\wquintiar[#1]}
+\newcommand{\wquintiadjarv}[1]{\wquintiadjar[#1]}
+
+\newcommand{\ntriarv}[1]{\ntriar[#1]}
+\newcommand{\Ntriarv}[4]{\Ntriar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriaRv}[4]{\ntriaR[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjarv}[1]{\ntriadjar[#1]}
+\newcommand{\Ntriadjarv}[4]{\Ntriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjaRv}[4]{\ntriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\nquadriarv}[1]{\nquadriar[#1]}
+\newcommand{\nquadriadjarv}[1]{\nquadriadjar[#1]}
+\newcommand{\nquintiarv}[1]{\nquintiar[#1]}
+\newcommand{\nquintiadjarv}[1]{\nquintiadjar[#1]}
+
+\newcommand{\Striarv}[4]{\Striar[#4]{#1}{#2}{#3}}
+\newcommand{\striaRv}[4]{\striaR[#4]{#1}{#2}{#3}}
+\newcommand{\striadjarv}[1]{\striadjar[#1]}
+\newcommand{\Striadjarv}[4]{\Striadjar[#4]{#1}{#2}{#3}}
+\newcommand{\striadjaRv}[4]{\striadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\squadriarv}[1]{\squadriar[#1]}
+\newcommand{\squadriadjarv}[1]{\squadriadjar[#1]}
+\newcommand{\squintiarv}[1]{\squintiar[#1]}
+\newcommand{\squintiadjarv}[1]{\nquintiadjar[#1]}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMultipleArrows}
diff --git a/macros/generic/diagrams/borceux/diagram/Diagram b/macros/generic/diagrams/borceux/diagram/Diagram
new file mode 100644
index 0000000000..0aeae85b10
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/Diagram
@@ -0,0 +1,8973 @@
+% DIAGRAM MACROS (version 3.1)
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the printerresolution
+%%% unit = 1 dpi
+\newcount\printerresolution
+\global\printerresolution=300
+
+%%% Fixing the length of a segment in an arrowhead
+%%% unit = 0.01pt
+\newcount\headsize
+\global\headsize=450
+
+%%% Fixing the thickness of an arrowhead
+%%% value = 1/5 of the font size
+\font\dotfont = lcircle10 at 3pt
+
+%%% Fixing the distance between the two heads of an epimorphism
+%%% unit = 0.01pt
+\newcount\epihead
+\global\epihead=200
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+%%%%% DESIGING THE ARROW HEADS
+
+%%% Customizing the unitlength for the sake of precision
+\setlength{\unitlength}{0.01pt}
+
+%%% Printing one dot at the required scale
+\def\DOT{{\dotfont q}}
+
+%%% Computing the distance between two dots in an arrowhead
+\newcount\basicstep
+\basicstep=7227
+\global\divide\basicstep by \printerresolution
+
+%%% Computing the number of dots in an arrowhead
+\newcount\numberofsteps
+\numberofsteps=\headsize
+\global\divide\numberofsteps by \basicstep
+
+%%% Producing an arrow head
+\newcommand{\makehead}[3]{%
+\begin{picture}(0,0)%
+\multiput(0,0)(#1,#2){#3}{\DOT}%
+\multiput(0,0)(-#2,#1){#3}{\DOT}%
+\end{picture}}
+
+%%% Creating bitmap images of the arrowheads
+\newcount\xstep
+\newcount\ystep
+
+\newsavebox{\northhead}
+\savebox{\northhead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nhead}{\usebox{\northhead}}
+
+\newsavebox{\easthead}
+\savebox{\easthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ehead}{\usebox{\easthead}}
+
+\newsavebox{\southhead}
+\savebox{\southhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\shead}{\usebox{\southhead}}
+
+\newsavebox{\westhead}
+\savebox{\westhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\whead}{\usebox{\westhead}}
+
+\newsavebox{\northwesthead}
+\savebox{\northwesthead}{%
+\makehead{0}{-\basicstep}{\numberofsteps}}
+\newcommand{\nwhead}{\usebox{\northwesthead}}
+
+\newsavebox{\northeasthead}
+\savebox{\northeasthead}{%
+\makehead{-\basicstep}{0}{\numberofsteps}}
+\newcommand{\nehead}{\usebox{\northeasthead}}
+
+\newsavebox{\southwesthead}
+\savebox{\southwesthead}{%
+\makehead{\basicstep}{0}{\numberofsteps}}
+\newcommand{\swhead}{\usebox{\southwesthead}}
+
+\newsavebox{\southeasthead}
+\savebox{\southeasthead}{%
+\makehead{0}{\basicstep}{\numberofsteps}}
+\newcommand{\sehead}{\usebox{\southeasthead}}
+
+\newsavebox{\eastnortheasthead}
+\savebox{\eastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\enehead}{\usebox{\eastnortheasthead}}
+
+\newsavebox{\northnortheasthead}
+\savebox{\northnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnehead}{\usebox{\northnortheasthead}}
+
+\newsavebox{\southsouthwesthead}
+\savebox{\southsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sswhead}{\usebox{\southsouthwesthead}}
+
+\newsavebox{\westsouthwesthead}
+\savebox{\westsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wswhead}{\usebox{\westsouthwesthead}}
+
+\newsavebox{\westnorthwesthead}
+\savebox{\westnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}
+
+\newsavebox{\eastsoutheasthead}
+\savebox{\eastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\esehead}{\usebox{\eastsoutheasthead}}
+
+\newsavebox{\northnorthwesthead}
+\savebox{\northnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}
+
+\newsavebox{\southsoutheasthead}
+\savebox{\southsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssehead}{\usebox{\southsoutheasthead}}
+
+\newsavebox{\easteastnortheasthead}
+\savebox{\easteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}
+
+\newsavebox{\northnorthnortheasthead}
+\savebox{\northnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}
+
+\newsavebox{\southsouthsouthwesthead}
+\savebox{\southsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}
+
+\newsavebox{\westwestsouthwesthead}
+\savebox{\westwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}
+
+\newsavebox{\westwestnorthwesthead}
+\savebox{\westwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}
+
+\newsavebox{\easteastsoutheasthead}
+\savebox{\easteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}
+
+\newsavebox{\northnorthnorthwesthead}
+\savebox{\northnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}
+
+\newsavebox{\southsouthsoutheasthead}
+\savebox{\southsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}
+
+\newsavebox{\northeasteastnortheasthead}
+\savebox{\northeasteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}
+
+\newsavebox{\northeastnorthnortheasthead}
+\savebox{\northeastnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}
+
+\newsavebox{\southwestsouthsouthwesthead}
+\savebox{\southwestsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}
+
+\newsavebox{\southwestwestsouthwesthead}
+\savebox{\southwestwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}
+
+\newsavebox{\northwestwestnorthwesthead}
+\savebox{\northwestwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}
+
+\newsavebox{\southeasteastsoutheasthead}
+\savebox{\southeasteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}
+
+\newsavebox{\northwestnorthnorthwesthead}
+\savebox{\northwestnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}
+
+\newsavebox{\southeastsouthsoutheasthead}
+\savebox{\southeastsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}
+
+%%% Restoring the standard unitlength
+\setlength{\unitlength}{1pt}
+
+
+% MACROS FOR MARKED ARROWS
+
+\newsavebox{\isomorphismmark}
+\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
+\isomark{$\cong$}
+\newcommand{\isosign}{\usebox{\isomorphismmark}}
+
+\newif\ifuserdist
+\newsavebox{\distributormark}
+\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
+\userdisttrue\savebox{\distributormark}{#1}\fi}
+\newsavebox{\distributorcircle}
+\savebox{\distributorcircle}{\begin{picture}(0,0)%
+\put(0,0){\circle{4}}\end{picture}}
+\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
+\usebox{\distributorcircle}\fi}
+\userdistfalse
+
+
+
+% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS
+
+\newcount\monolength
+\newcount\epilength
+\newcount\bimolength
+\newcount\secondmonolength
+\newcount\secondepilength
+
+\newcount\monotail%
+\global\monotail=\headsize%
+\global\multiply\monotail by 7070%
+\global\divide\monotail by 10000%
+
+\newcount\truemonotail%
+\newcount\trueepihead%
+
+\def\truetail{\truemonotail=\monotail%
+\multiply\truemonotail by 100%
+\divide\truemonotail by \SCALE}
+
+\def\truehead{\trueepihead=\epihead%
+\multiply\trueepihead by 100%
+\divide\trueepihead by \SCALE}
+
+\newcount\Monotail%
+\global\Monotail=\headsize%
+\global\divide\Monotail by 2%
+
+\newcount\Epihead%
+\global\Epihead=\epihead%
+\global\multiply\Epihead by 7070%
+\global\divide\Epihead by 10000%
+
+\newcount\Truemonotail%
+\newcount\Trueepihead%
+
+\def\Truetail{\Truemonotail=\Monotail%
+\multiply\Truemonotail by 100%
+\divide\Truemonotail by \SCALE}%
+
+\def\Truehead{\Trueepihead=\Epihead%
+\multiply\Trueepihead by 100%
+\divide\Trueepihead by \SCALE}
+
+\newcount\MonoTail%
+\global\MonoTail=\headsize%
+\global\multiply\MonoTail by 6324%
+\global\divide\MonoTail by 10000%
+
+\newcount\EpiHead%
+\global\EpiHead=\epihead%
+\global\multiply\EpiHead by 8944%
+\global\divide\EpiHead by 10000%
+
+\newcount\TrueMonoTail%
+\newcount\TrueEpiHead%
+
+\def\TrueTail{\TrueMonoTail=\MonoTail%
+\multiply\TrueMonoTail by 100%
+\divide\TrueMonoTail by \SCALE}%
+
+\def\TrueHead{\TrueEpiHead=\EpiHead%
+\multiply\TrueEpiHead by 100%
+\divide\TrueEpiHead by \SCALE}
+
+\newcount\monotaiL%
+\global\monotaiL=\headsize%
+\global\multiply\monotaiL by 3162%
+\global\divide\monotaiL by 10000%
+
+\newcount\epiheaD%
+\global\epiheaD=\epihead%
+\global\multiply\epiheaD by 4472%
+\global\divide\epiheaD by 10000%
+
+\newcount\truemonotaiL%
+\newcount\trueepiheaD%
+
+\def\truetaiL{\truemonotaiL=\monotaiL%
+\multiply\truemonotaiL by 100%
+\divide\truemonotaiL by \SCALE}%
+
+\def\trueheaD{\trueepiheaD=\epiheaD%
+\multiply\trueepiheaD by 100%
+\divide\trueepiheaD by \SCALE}
+
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcount\NUMBEROFDOTS%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\X%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% moving a name up
+\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}
+
+% moving a name down
+\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tbicase{P} draws the bi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \textarrowlength pt.
+\newcommand{\Tbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\scriptstyle #2}%
+{\mbox{\tlowername{#1{\actualtextarrowlength}}%
+{\scriptstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% moving a name up
+\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}
+
+% moving a name down
+\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dbicase{P} draws the bi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \displayarrowlength pt.
+\newcommand{\Dbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\textstyle #2}%
+{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
+{\textstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \DIST{n} draws a distributor of length n units
+\newcommand{\DIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\end{picture}}%
+
+% \DOTAR{n} draws a dotted arrow of length n units
+\newcommand{\DOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \MONO{n} draws a monomorphism of length n units
+\newcommand{\MONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)%
+\put(\monotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\monotail,0){\ehead}%
+\end{picture}}%
+
+% \EPI{n} draws an epimorphism of length n units
+\newcommand{\EPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIMO{n} draws a bimorphism of length n units
+\newcommand{\BIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\end{picture}}%
+
+% \BIDIST{n} draws a pair of distributors of length n units
+\newcommand{\BIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% \EQL{n} draws an equality of length n units
+\newcommand{\EQL}[1]%
+{\begin{picture}(#1,0)%
+\put(0,100){\line(1,0){#1}}%
+\put(0,-100){\line(1,0){#1}}%
+\end{picture}}%
+
+% \ADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\ADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\end{picture}}%
+
+% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
+\newcommand{\ADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% distributor
+\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%
+
+% distributor with upper name [1]
+\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
+\else\Dcase{\DIST}{\TUP{#1}}\fi}%
+
+% dotted arrow
+\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%
+
+% dotted arrow with upper name [1]
+\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
+\else\Dcase{\DOTAR}{#1}\fi}%
+
+% monomorphism
+\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%
+
+% monomorphism with upper name [1]
+\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%
+
+% epimorphism
+\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%
+
+% epimorphism with upper name [1]
+\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%
+
+% bimorphism
+\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%
+
+% bimorphism with upper name [1]
+\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
+\else\Dcase{\BIMO}{#1}\fi}%
+
+% isomorphism
+\newcommand{\iso}{\ifinner\Tcase{\AR}{\cong}\else\Dcase{\AR}{\cong}\fi}%
+
+% isomorphism with upper name [1]
+\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\cong{#1}}%
+\else\Dcase{\AR}{\cong{#1}}\fi}%
+
+% pair of arrows
+\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%
+
+% pair of arrows with names [1],[2]
+\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
+\else\Dbicase{\BIAR}{#1}{#2}\fi}%
+
+% pair of distributors
+\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%
+
+% pair of distributors with names [1],[2]
+\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% equality
+\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%
+
+% equality with name [1]
+\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
+\else\Dcase{\EQL}{\DUP{#1}}\fi}%
+
+% pair of adjoint arrows
+\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%
+
+% pair of adjoint arrows with names [1],[2]
+\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
+\else\Dbicase{\ADJAR}{#1}{#2}\fi}%
+
+% pair of adjoint distributors
+\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%
+
+% pair of adjoint distributors with names [1],[2]
+\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKDIST{n} draws a pointing back distributor of length n units
+\newcommand{\BKDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\end{picture}}%
+
+% \BKDOTAR{n} draws a backward dotted arrow
+% of length n units
+\newcommand{\BKDOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\BKMONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monotail,0){\line(-1,0){\monolength}}%
+\put(-\monotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+% \BKEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\BKEPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\BKBIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\BKBIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\end{picture}}%
+
+% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\BKBIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+% back distributor
+\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%
+
+% back distributor with upper name [1]
+\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
+\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%
+
+% backward dotted arrow
+\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%
+
+% backward dotted arrow with upper name [1]
+\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
+\else\Dcase{\BKDOTAR}{#1}\fi}%
+
+% back monomorphism
+\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%
+
+% back monomorphism with upper name [1]
+\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
+\else\Dcase{\BKMONO}{#1}\fi}%
+
+% back epimorphism
+\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%
+
+% back epimorphism with upper name [1]
+\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
+\else\Dcase{\BKEPI}{#1}\fi}%
+
+% back bimorphism
+\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%
+
+% back bimorphism with upper name [1]
+\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
+\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%
+
+% back isomorphism
+\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\cong}%
+\else\Dcase{\BKAR}{\cong}\fi}%
+
+% back isomorphism with upper name [1]
+\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\cong{#1}}%
+\else\Dcase{\BKAR}{\cong{#1}}\fi}%
+
+% pair of back arrows
+\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%
+
+% pair of back arrows with names [1],[2]
+\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
+\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%
+
+% pair of back distributors
+\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
+\else\dbicase{\BKBIDIST}\fi}%
+
+% pair of back distributors with names [1],[2]
+\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% back equality
+\let\bkeql=\eql%
+
+% back equality with name [1]
+\let\Bkeql=\Eql%
+
+% back pair of adjoint arrows
+\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
+\else\dbicase{\BKADJAR}\fi}%
+
+% back pair of adjoint arrows with names [1],[2]
+\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
+\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%
+
+% back pair of adjoint distributors
+\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
+\else\dbicase{\BKADJDIST}\fi}%
+
+% back pair of adjoint distributors with names [1],[2]
+\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}\fi}%
+
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
+% and length n units.
+\newcommand{\Hisocase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-8pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \hbicase{P}{n} draws the bi-picture P with length n units.
+\newcommand{\hbicase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
+% and length n units.
+\newcommand{\Hbicase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-10.4pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \EDIST{n} draws an east distributor of length n units
+\newcommand{\EDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\truex{400}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{x}}}
+\end{picture}}%
+
+% \EDOTAR draws a dotted arrow of length n units
+\newcommand{\EDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+
+% \EMONO{n} draws an east monomorphism of length n units
+\newcommand{\EMONO}[1]%
+{\truetail
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)%
+\put(\truemonotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\truemonotail,0){\ehead}%
+\end{picture}}%
+
+
+% \EEPI{n} draws an east epimorphism of length n units
+\newcommand{\EEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIMO{n} draws an east bimorphism of length n units
+\newcommand{\EBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIAR{n} draws an east pair of arrows of length n units
+\newcommand{\EBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\end{picture}}%
+
+% \EBIDIST{n} draws an east pair of distributors of length n units
+\newcommand{\EBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \EEQL{n} draws an east equality of length n units
+\newcommand{\EEQL}[1]%
+{\begin{picture}(#1,0)%
+\truex{200}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(0,0){\line(1,0){#1}}%
+\end{picture}}%
+
+% \EADJAR{n} draws an east pair of adjoint arrows of length n
+% units
+\newcommand{\EADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \EADJDIST{n} draws an east pair of adjoint distributors of length n
+% units
+\newcommand{\EADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% basic east distributor
+\def\basicedist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDIST}{\Z}}%
+
+% east distributor
+\newcommand{\edist}{\@ifnextchar[{\basicedist}%
+{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%
+
+% basic east distributor with upper name
+\def\basicEdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDIST}{\DUP{#2}}{\Z}}%
+
+% east distributor with upper name
+\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
+{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%
+
+% basic east distributor with lower name
+\def\basicedisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%
+
+% east distributor with lower name
+\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
+{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%
+
+% basic east dotted arrow
+\def\basicedotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDOTAR}{\Z}}%
+
+% east dotted arrow
+\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
+{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with upper name
+\def\basicEdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with upper name
+\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
+{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with lower name
+\def\basicedotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with lower name
+\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
+{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%
+
+% basic east monomorphism
+\def\basicemono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EMONO}{\Z}}%
+
+% east arrow
+\newcommand{\emono}{\@ifnextchar[{\basicemono}%
+{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with upper name
+\def\basicEmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with upper name
+\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
+{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with lower name
+\def\basicemonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with lower name
+\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
+{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%
+
+% basic east epimorphism
+\def\basiceepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEPI}{\Z}}%
+
+% east epimorphism
+\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
+{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with upper name
+\def\basicEepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with upper name
+\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
+{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with lower name
+\def\basiceepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with lower name
+\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
+{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%
+
+% basic east bimorphism
+\def\basicebimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EBIMO}{\Z}}%
+
+% east bimorphism
+\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
+{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with upper name
+\def\basicEbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with upper name
+\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
+{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with lower name
+\def\basicebimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with lower name
+\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
+{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%
+
+% basic east isomorphism
+\def\basiceiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\cong}{}{\Z}}%
+
+% east isomorphism
+\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
+{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with upper name
+\def\basicEiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{#2}{\cong}{\Z}}%
+
+% east isomorphism with upper name
+\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
+{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with lower name
+\def\basiceisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\cong}{#2}{\Z}}%
+
+% east isomorphism with lower name
+\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
+{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%
+
+% basic east equality
+\def\basiceeql[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEQL}{\Z}}%
+
+% east equality
+\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
+{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%
+
+% basic east equality with upper name
+\def\basicEeql[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEQL}{\DUP{#2}}{\Z}}%
+
+% east equality with upper name
+\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
+{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%
+
+% basic east equality with lower name
+\def\basiceeqL[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEQL}{#2}{\Z}}%
+
+% east equality with lower name
+\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
+{\hspace{\SOURCE\unitlength}\basiceeqL[\ARROWLENGTH]}}%
+
+% basic pair of east arrows
+\def\basicebiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIAR}{\Z}}%
+
+% pair of east arrows
+\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
+{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%
+
+% basic pair of east arrows with names
+\def\basicEbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
+
+% pair of east arrows with names
+\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
+{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
+\let\ebiaR=\Ebiar
+
+% basic pair of east distributors
+\def\basicebidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIDIST}{\Z}}%
+
+% pair of east distributors
+\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
+{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%
+
+% basic pair of east distributors with names
+\def\basicEbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east distributors with names
+\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
+{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
+\let\ebidisT=\Ebidist
+
+% basic pair of east adjoint arrows
+\def\basiceadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJAR}{\Z}}%
+
+% pair of east adjoint arrows
+\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
+{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint arrows with names
+\def\basicEadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
+
+% pair of east adjoint arrows with names
+\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
+{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
+\let\eadjaR=\Eadjar
+
+% basic pair of east adjoint distributors
+\def\basiceadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJDIST}{\Z}}%
+
+% pair of east adjoint distributors
+\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
+{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint distributors with names
+\def\basicEadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east adjoint distributors with names
+\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
+{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
+\let\eadjdisT=\Eadjdist
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WDIST{n} draws a pointing back distributor of length n units
+\newcommand{\WDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\truex{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \WDOTAR draws a dotted arrow of length n units
+\newcommand{\WDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\WMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\truemonotail,0){\line(-1,0){\monolength}}%
+\put(-\truemonotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+
+% \WEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\WEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\WBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\WBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \WBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\WBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}%
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \WADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\WADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\WADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}%
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% basic west distributor
+\def\basicwdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDIST}{\Z}}%
+
+% west distributor
+\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
+{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%
+
+% basic west distributor with upper name
+\def\basicWdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDIST}{\DUP{#2}}{\Z}}%
+
+% west distributor with upper name
+\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
+{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%
+
+% basic west distributor with lower name
+\def\basicwdisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%
+
+% west distributor with lower name
+\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
+{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%
+
+% basic west dotted arrow
+\def\basicwdotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDOTAR}{\Z}}%
+
+% west dotted arrow
+\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
+{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with upper name
+\def\basicWdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with upper name
+\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
+{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with lower name
+\def\basicwdotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with lower name
+\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
+{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%
+
+% basic west monomorphism
+\def\basicwmono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WMONO}{\Z}}%
+
+% west arrow
+\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
+{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with upper name
+\def\basicWmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with upper name
+\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
+{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with lower name
+\def\basicwmonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with lower name
+\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
+{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%
+
+% basic west epimorphism
+\def\basicwepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WEPI}{\Z}}%
+
+% west epimorphism
+\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
+{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with upper name
+\def\basicWepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with upper name
+\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
+{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with lower name
+\def\basicwepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with lower name
+\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
+{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%
+
+% basic west bimorphism
+\def\basicwbimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WBIMO}{\Z}}%
+
+% west bimorphism
+\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
+{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with upper name
+\def\basicWbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with upper name
+\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
+{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with lower name
+\def\basicwbimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with lower name
+\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
+{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%
+
+% basic west isomorphism
+\def\basicwiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\cong}{}{\Z}}%
+
+% west isomorphism
+\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
+{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with upper name
+\def\basicWiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{#2}{\cong}{\Z}}%
+
+% west isomorphism with upper name
+\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
+{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with lower name
+\def\basicwisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\cong}{#2}{\Z}}%
+
+% west isomorphism with lower name
+\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
+{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%
+
+% west equality
+\let\weql=\eeql%
+
+% west equality with upper name
+\let\Weql=\Eeql%
+
+% west equality with lower name
+\let\weqL=\eeqL%
+
+% basic pair of west arrows
+\def\basicwbiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIAR}{\Z}}%
+
+% pair of west arrows
+\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
+{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%
+
+% basic pair of west arrows with names
+\def\basicWbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
+
+% pair of west arrows with names
+\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
+{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
+\let\wbiaR=\Wbiar
+
+% basic pair of west distributors
+\def\basicwbidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIDIST}{\Z}}%
+
+% pair of west distributors
+\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
+{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%
+
+% basic pair of west distributors with names
+\def\basicWbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west distributors with names
+\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
+{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
+\let\wbidisT=\Wbidist
+
+% basic pair of west adjoint arrows
+\def\basicwadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJAR}{\Z}}%
+
+% pair of west adjoint arrows
+\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
+{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint arrows with names
+\def\basicWadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
+
+% pair of west adjoint arrows with names
+\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
+{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
+\let\wadjaR=\Wadjar
+
+% basic pair of west adjoint distributors
+\def\basicwadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJDIST}{\Z}}%
+
+% pair of west adjoint distributors
+\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
+{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint distributors with names
+\def\basicWadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west adjoint distributors with names
+\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
+{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
+\let\wadjdisT=\Wadjdist
+
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% \Visocase{P}{f}{g}{n} draws the vertical picture P
+% with names f, g and length n units.
+\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
+
+% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
+\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%
+
+% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
+% with names f, g and length n units.
+\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%
+
+
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SDIST{n} draws a south distributor of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SDOTAR{n} draws a south dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SMONO{n} draws a south monomorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\monolength}}%
+\put(0,\monolength){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% \SEPI{n} draws a south epimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){\epilength}}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIMO{n} draws a south bimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\epilength}}%
+\put(0,\monolength){\shead}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIAR{n} draws a pair of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIDIST{n} draws a pair of south distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}%
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SEQL{n} draws a vertical equality of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEQL}[1]%
+{\begin{picture}(0,0)%
+\truex{100}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}%
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% basic south distributor
+\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%
+
+% south distributor
+\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%
+
+% basic south distributor with left name
+\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%
+
+% south distributor with left name
+\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%
+
+% basic south distributor with right name
+\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%
+
+% south distributor with right name
+\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%
+
+% basic south dotted arrow
+\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%
+
+% south dotted arrow
+\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%
+
+% basic south dotted arrow with left name
+\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with left name
+\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%
+
+% basic south dotted arrow with right name
+\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with right name
+\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%
+
+% basic south monomorphism
+\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%
+
+% south arrow
+\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%
+
+% basic south monomorphism with left name
+\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%
+
+% south monomorphism with left name
+\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%
+
+% basic south monomorphism with right name
+\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%
+
+% south monomorphism with right name
+\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%
+
+% basic south epimorphism
+\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%
+
+% south epimorphism
+\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%
+
+% basic south epimorphism with left name
+\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%
+
+% south epimorphism with left name
+\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%
+
+% basic south epimorphism with right name
+\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%
+
+% south epimorphism with right name
+\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%
+
+% basic south bimorphism
+\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%
+
+% south bimorphism
+\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%
+
+% basic south bimorphism with left name
+\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with left name
+\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%
+
+% basic south bimorphism with right name
+\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with right name
+\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%
+
+% basic south isomorphism
+\def\basicsiso[#1]{\Visocase{\SAR}{\cong}{}{#100}}%
+
+% south isomorphism
+\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%
+
+% basic south isomorphism with left name
+\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\cong}{#100}}%
+
+% south isomorphism with left name
+\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%
+
+% basic south isomorphism with right name
+\def\basicsisO[#1]#2{\Visocase{\SAR}{\cong}{#2}{#100}}%
+
+% south isomorphism with right name
+\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%
+
+% basic south equality
+\def\basicseql[#1]{\vcase{\SEQL}{#100}}%
+
+% south equality
+\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%
+
+% basic south equality with left name
+\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%
+
+% south equality with left name
+\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%
+
+% basic south equality with right name
+\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%
+
+% south equality with right name
+\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[50]}}%
+
+% basic pair of south arrows
+\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%
+
+% pair of south arrows
+\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%
+
+% basic pair of south arrows with names
+\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
+
+% pair of south arrows with names
+\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
+\let\sbiaR=\Sbiar
+
+% basic pair of south distributors
+\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%
+
+% pair of south distributors
+\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%
+
+% basic pair of south distributors with names
+\def\basicSbidist[#1]#2#3%
+{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south distributors with names
+\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
+\let\sbidisT=\Sbidist
+
+% basic pair of south adjoint arrows
+\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%
+
+% pair of south adjoint arrows
+\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%
+
+% basic pair of south adjoint arrows with names
+\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
+
+% pair of south adjoint arrows with names
+\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
+\let\sadjaR=\Sadjar
+
+% basic pair of south adjoint distributors
+\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%
+
+% pair of south adjoint distributors
+\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%
+
+% basic pair of south adjoint distributors with names
+\def\basicSadjdist[#1]#2#3%
+{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south adjoint distributors with names
+\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
+\let\sadjdisT=\Sadjdist
+
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NDIST{n} draws a north distributor of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NDOTAR{n} draws a north dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% \NMONO{n} draws a north monomorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NEPI{n} draws a north epimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){\epilength}}%
+\put(0,#1){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIMO{n} draws a north bimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIMO}[1]%
+{\truehead\truetail%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\monolength=\epilength%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIAR{n} draws a pair of north arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIDIST{n} draws a pair of north distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% basic north distributor
+\def\basicndist[#1]{\vcase{\NDIST}{#100}}%
+
+% north distributor
+\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%
+
+% basic north distributor with left name
+\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%
+
+% north distributor with left name
+\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%
+
+% basic north distributor with right name
+\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%
+
+% north distributor with right name
+\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%
+
+% basic north dotted arrow
+\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%
+
+% north dotted arrow
+\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%
+
+% basic north dotted arrow with left name
+\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with left name
+\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%
+
+% basic north dotted arrow with right name
+\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with right name
+\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%
+
+% basic north monomorphism
+\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%
+
+% north arrow
+\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
+{\basicnmono[50]}}%
+
+% basic north monomorphism with left name
+\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%
+
+% north monomorphism with left name
+\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%
+
+% basic north monomorphism with right name
+\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%
+
+% north monomorphism with right name
+\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%
+
+% basic north epimorphism
+\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%
+
+% north epimorphism
+\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%
+
+% basic north epimorphism with left name
+\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%
+
+% north epimorphism with left name
+\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%
+
+% basic north epimorphism with right name
+\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%
+
+% north epimorphism with right name
+\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%
+
+% basic north bimorphism
+\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%
+
+% north bimorphism
+\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%
+
+% basic north bimorphism with left name
+\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with left name
+\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%
+
+% basic north bimorphism with right name
+\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with right name
+\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%
+
+% basic north isomorphism
+\def\basicniso[#1]{\Visocase{\NAR}{\cong}{}{#100}}%
+
+% north isomorphism
+\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%
+
+% basic north isomorphism with left name
+\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\cong}{#100}}%
+
+% north isomorphism with left name
+\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%
+
+% basic north isomorphism with right name
+\def\basicnisO[#1]#2{\Visocase{\NAR}{\cong}{#2}{#100}}%
+
+% north isomorphism with right name
+\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%
+
+% north equality
+\let\neql=\seql%
+
+% north equality with left name
+\let\Neql=\Seql%
+
+% north equality with right name
+\let\neqL=\seqL%
+
+% basic pair of north arrows
+\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%
+
+% pair of north arrows
+\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%
+
+% basic pair of north arrows with names
+\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
+
+% pair of north arrows with names
+\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
+\let\nbiaR=\Nbiar
+
+% basic pair of north distributors
+\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%
+
+% pair of north distributors
+\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%
+
+% basic pair of north distributors with names
+\def\basicNbidist[#1]#2#3%
+{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north distributors with names
+\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
+\let\nbidisT=\Nbidist
+
+% basic pair of north adjoint arrows
+\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%
+
+% pair of north adjoint arrows
+\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%
+
+% basic pair of north adjoint arrows with names
+\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
+
+% pair of north adjoint arrows with names
+\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
+\let\nadjaR=\Nadjar
+
+% basic pair of north adjoint distributors
+\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%
+
+% pair of north adjoint distributors
+\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%
+
+% basic pair of north adjoint distributors with names
+\def\basicNadjdist[#1]#2#3%
+{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north adjoint distributors with names
+\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
+\let\nadjdisT=\Nadjdist
+
+
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{900}\truey{150}%
+\put(-\value{x},\value{y}){${#2}$}%
+\truex{300}\truey{1050}%
+\put(\value{x},-\value{y}){${#3}$}%
+\end{picture}}%
+
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEDIST{n} draws a north-east distributor of length n units
+\newcommand{\NEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NEDOTAR{n} draws a north-east dotted arrow of length n units
+\newcommand{\NEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEMONO{n} draws a north-east monomorphism of length n units
+\newcommand{\NEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEEPI{n} draws a north-east epimorphism of length n units
+\newcommand{\NEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){\bimolength}}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIMO{n} draws a north-east bimorphism of length n units
+\newcommand{\NEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIAR{n} draws a pair of north-east arrows of length n units
+\newcommand{\NEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,\epilength){\nehead}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \NEBIDIST{n} draws a pair of north-east distributors of length n units
+\newcommand{\NEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NEEQL{n} draws a north-east equality of length n units
+\newcommand{\NEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
+\newcommand{\NEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
+\newcommand{\NEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% north-east distributor of length nx100 units
+\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%
+
+% north-east distributor
+\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%
+
+% north-east distributor with upper name [1] and length nx100 units
+\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%
+
+% north-east distributor with upper name
+\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%
+
+% north-east distributor with lower name [1] and length nx100 units
+\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%
+
+% north-east distributor with lower name [1]
+\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%
+
+% north-east dotted arrow of length nx100 units
+\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%
+
+% north-east dotted arrow
+\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%
+
+% north-east dotted arrow with upper name [1] and length nx100 units
+\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%
+
+% north-east dotted arrow with upper name
+\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%
+
+% north-east dotted arrow with lower name [1] and length nx100 units
+\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%
+
+% north-east dotted arrow with lower name [1]
+\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%
+
+% north-east monomorphism of length nx100 units
+\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%
+
+% north-east monomorphism
+\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%
+
+% north-east monomorphism with upper name [1] and length nx100 units
+\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%
+
+% north-east monomophism with upper name
+\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%
+
+% north-east monomorphism with lower name [1] and length nx100 units
+\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%
+
+% north-east monomorphism with lower name [1]
+\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%
+
+% north-east epimorphism of length nx100 units
+\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%
+
+% north-east epimorphism
+\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%
+
+% north-east epimorphism with upper name [1] and length nx100 units
+\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%
+
+% north-east epimorphism with upper name
+\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%
+
+% north-east epimorphism with lower name [1] and length nx100 units
+\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%
+
+% north-east epimorphism with lower name [1]
+\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%
+
+% north-east bimorphism of length nx100 units
+\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%
+
+% north-east bimorphism
+\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%
+
+% north-east bimorphism with upper name [1] and length nx100 units
+\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%
+
+% north-east bimorphism with upper name
+\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%
+
+% north-east bimorphism with lower name [1] and length nx100 units
+\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%
+
+% north-east bimorphism with lower name [1]
+\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%
+
+% north-east isomorphism of length nx100 units
+\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% north-east isomorphism
+\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%
+
+% north-east isomorphism with upper name [1] and length nx100 units
+\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\cong}{#100}}%
+
+% north-east isomorphism with upper name
+\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%
+
+% north-east isomorphism with lower name [1] and length nx100 units
+\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% north-east isomorphism with lower name [1]
+\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%
+
+% north-east equality of length nx100 units
+\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%
+
+% north-east equality
+\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%
+
+% north-east equality with upper name [1] and length nx100 units
+\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%
+
+% north-east equality with upper name
+\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%
+
+% north-east equality with lower name [1] and length nx100 units
+\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%
+
+% north-east equality with lower name [1]
+\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[59]}}%
+
+% pair of north-east arrows of length nx100 units
+\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%
+
+% pair of north-east arrows
+\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%
+
+% pair of north-east arrows with names [1][2] and length nx100 units
+\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%
+
+% pair of north-east arrows with names
+\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
+\let\nebiaR=\Nebiar
+
+% pair of north-east adjoint arrows of length nx100 units
+\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%
+
+% pair of north-east adjoint arrows
+\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%
+
+% pair of north-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint arrows with names
+\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
+\let\neadjaR=\Neadjar
+
+% pair of north-east distributors of length nx100 units
+\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%
+
+% pair of north-east distributors
+\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%
+
+% pair of north-east distributors with names [1][2] and length nx100 units
+\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-east distributors with names
+\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
+\let\nebidisT=\Nebidist
+
+% pair of north-east adjoint distributors of length nx100 units
+\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%
+
+% pair of north-east adjoint distributors
+\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%
+
+% pair of north-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint distributors with names
+\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
+\let\neadjdisT=\Neadjdist
+
+
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWDIST{n} draws a south-west distributor of length n units
+\newcommand{\SWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SWDOTAR{n} draws a south-west dotted arrow of length n units
+\newcommand{\SWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWMONO{n} draws a south-west monomorphism of length n units
+\newcommand{\SWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWEPI{n} draws a south-west epimorphism of length n units
+\newcommand{\SWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){\bimolength}}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIMO{n} draws a south-west bimorphism of length n units
+\newcommand{\SWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIAR{n} draws a pair of south-west arrows of length n units
+\newcommand{\SWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,-\epilength){\swhead}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \SWBIDIST{n} draws a pair of south-west distributors of length n units
+\newcommand{\SWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
+\newcommand{\SWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
+\newcommand{\SWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% south-west distributor of length nx100 units
+\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%
+
+% south-west distributor
+\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%
+
+% south-west distributor with upper name [1] and length nx100 units
+\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%
+
+% south-west distributor with upper name
+\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%
+
+% south-west distributor with lower name [1] and length nx100 units
+\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%
+
+% south-west distributor with lower name [1]
+\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%
+
+% south-west dotted arrow of length nx100 units
+\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%
+
+% south-west dotted arrow
+\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%
+
+% south-west dotted arrow with upper name [1] and length nx100 units
+\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%
+
+% south-west dotted arrow with upper name
+\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%
+
+% south-west dotted arrow with lower name [1] and length nx100 units
+\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%
+
+% south-west dotted arrow with lower name [1]
+\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%
+
+% south-west monomorphism of length nx100 units
+\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%
+
+% south-west monomorphism
+\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%
+
+% south-west monomorphism with upper name [1] and length nx100 units
+\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%
+
+% south-west monomophism with upper name
+\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%
+
+% south-west monomorphism with lower name [1] and length nx100 units
+\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%
+
+% south-west monomorphism with lower name [1]
+\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%
+
+% south-west epimorphism of length nx100 units
+\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%
+
+% south-west epimorphism
+\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%
+
+% south-west epimorphism with upper name [1] and length nx100 units
+\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%
+
+% south-west epimorphism with upper name
+\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%
+
+% south-west epimorphism with lower name [1] and length nx100 units
+\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%
+
+% south-west epimorphism with lower name [1]
+\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%
+
+% south-west bimorphism of length nx100 units
+\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%
+
+% south-west bimorphism
+\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%
+
+% south-west bimorphism with upper name [1] and length nx100 units
+\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%
+
+% south-west bimorphism with upper name
+\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%
+
+% south-west bimorphism with lower name [1] and length nx100 units
+\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%
+
+% south-west bimorphism with lower name [1]
+\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%
+
+% south-west isomorphism of length nx100 units
+\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% south-west isomorphism
+\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%
+
+% south-west isomorphism with upper name [1] and length nx100 units
+\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\cong}{#100}}%
+
+% south-west isomorphism with upper name
+\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%
+
+% south-west isomorphism with lower name [1] and length nx100 units
+\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% south-west isomorphism with lower name [1]
+\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%
+
+% south-west equality
+\let\sweql\neeql%
+
+% south-west equality with upper name [1]
+\let\Sweql=\Neeql%
+
+% south-west equality with lower name [1]
+\let\sweqL=\neeqL%
+
+% pair of south-west arrows of length nx100 units
+\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%
+
+% pair of south-west arrows
+\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%
+
+% pair of south-west arrows with names [1][2] and length nx100 units
+\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%
+
+% pair of south-west arrows with names
+\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
+\let\swbiaR=\Swbiar
+
+% pair of south-west adjoint arrows of length nx100 units
+\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%
+
+% pair of south-west adjoint arrows
+\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%
+
+% pair of south-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint arrows with names
+\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
+\let\swadjaR=\Swadjar
+
+% pair of south-west distributors of length nx100 units
+\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%
+
+% pair of south-west distributors
+\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%
+
+% pair of south-west distributors with names [1][2] and length nx100 units
+\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-west distributors with names
+\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
+\let\swbidisT=\Swbidist
+
+% pair of south-west adjoint distributors of length nx100 units
+\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%
+
+% pair of south-west adjoint distributors
+\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%
+
+% pair of south-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint distributors with names
+\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
+\let\swadjdisT=\Swadjdist
+
+
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{350}\truey{600}\truez{950}%
+\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
+\truex{450}\truey{600}\truez{1050}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
+\end{picture}}%
+
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEDIST{n} draws a south-east distributor of length n units
+\newcommand{\SEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SEDOTAR{n} draws a south-east dotted arrow of length n units
+\newcommand{\SEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEMONO{n} draws a south-east monomorphism of length n units
+\newcommand{\SEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEEPI{n} draws a south-east epimorphism of length n units
+\newcommand{\SEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){\bimolength}}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIMO{n} draws a south-east bimorphism of length n units
+\newcommand{\SEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIAR{n} draws a pair of south-east arrows of length n units
+\newcommand{\SEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,-\epilength){\sehead}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \SEBIDIST{n} draws a pair of south-east distributors of length n units
+\newcommand{\SEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SEEQL{n} draws a south-east equality of length n units
+\newcommand{\SEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
+\newcommand{\SEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
+\newcommand{\SEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% south-east distributor of length nx100 units
+\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%
+
+% south-east distributor
+\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%
+
+% south-east distributor with upper name [1] and length nx100 units
+\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%
+
+% south-east distributor with upper name
+\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%
+
+% south-east distributor with lower name [1] and length nx100 units
+\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%
+
+% south-east distributor with lower name [1]
+\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%
+
+% south-east dotted arrow of length nx100 units
+\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%
+
+% south-east dotted arrow
+\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%
+
+% south-east dotted arrow with upper name [1] and length nx100 units
+\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%
+
+% south-east dotted arrow with upper name
+\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%
+
+% south-east dotted arrow with lower name [1] and length nx100 units
+\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%
+
+% south-east dotted arrow with lower name [1]
+\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%
+
+% south-east monomorphism of length nx100 units
+\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%
+
+% south-east monomorphism
+\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%
+
+% south-east monomorphism with upper name [1] and length nx100 units
+\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%
+
+% south-east monomophism with upper name
+\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%
+
+% south-east monomorphism with lower name [1] and length nx100 units
+\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%
+
+% south-east monomorphism with lower name [1]
+\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%
+
+% south-east epimorphism of length nx100 units
+\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%
+
+% south-east epimorphism
+\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%
+
+% south-east epimorphism with upper name [1] and length nx100 units
+\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%
+
+% south-east epimorphism with upper name
+\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%
+
+% south-east epimorphism with lower name [1] and length nx100 units
+\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%
+
+% south-east epimorphism with lower name [1]
+\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%
+
+% south-east bimorphism of length nx100 units
+\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%
+
+% south-east bimorphism
+\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%
+
+% south-east bimorphism with upper name [1] and length nx100 units
+\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%
+
+% south-east bimorphism with upper name
+\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%
+
+% south-east bimorphism with lower name [1] and length nx100 units
+\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%
+
+% south-east bimorphism with lower name [1]
+\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%
+
+% south-east isomorphism of length nx100 units
+\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% south-east isomorphism
+\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%
+
+% south-east isomorphism with upper name [1] and length nx100 units
+\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\cong}{#100}}%
+
+% south-east isomorphism with upper name
+\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%
+
+% south-east isomorphism with lower name [1] and length nx100 units
+\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% south-east isomorphism with lower name [1]
+\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%
+
+% south-east equality of length nx100 units
+\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%
+
+% south-east equality
+\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%
+
+% south-east equality with upper name [1] and length nx100 units
+\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%
+
+% south-east equality with upper name
+\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%
+
+% south-east equality with lower name [1] and length nx100 units
+\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%
+
+% south-east equality with lower name [1]
+\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[59]}}%
+
+% pair of south-east arrows of length nx100 units
+\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%
+
+% pair of south-east arrows
+\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%
+
+% pair of south-east arrows with names [1][2] and length nx100 units
+\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%
+
+% pair of south-east arrows with names
+\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
+\let\sebiaR=\Sebiar
+
+% pair of south-east adjoint arrows of length nx100 units
+\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%
+
+% pair of south-east adjoint arrows
+\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%
+
+% pair of south-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint arrows with names
+\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
+\let\seadjaR=\Seadjar
+
+% pair of south-east distributors of length nx100 units
+\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%
+
+% pair of south-east distributors
+\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%
+
+% pair of south-east distributors with names [1][2] and length nx100 units
+\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-east distributors with names
+\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
+\let\sebidisT=\Sebidist
+
+% pair of south-east adjoint distributors of length nx100 units
+\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%
+
+% pair of south-east adjoint distributors
+\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%
+
+% pair of south-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint distributors with names
+\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
+\let\seadjdisT=\Seadjdist
+
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWDIST{n} draws a north-west distributor of length n units
+\newcommand{\NWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NWDOTAR{n} draws a north-west dotted arrow of length n units
+\newcommand{\NWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWMONO{n} draws a north-west monomorphism of length n units
+\newcommand{\NWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWEPI{n} draws a north-west epimorphism of length n units
+\newcommand{\NWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){\bimolength}}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIMO{n} draws a north-west bimorphism of length n units
+\newcommand{\NWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIAR{n} draws a pair of north-west arrows of length n units
+\newcommand{\NWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,\epilength){\nwhead}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \NWBIDIST{n} draws a pair of north-west distributors of length n units
+\newcommand{\NWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
+\newcommand{\NWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
+\newcommand{\NWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% north-west distributor of length nx100 units
+\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%
+
+% north-west distributor
+\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%
+
+% north-west distributor with upper name [1] and length nx100 units
+\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%
+
+% north-west distributor with upper name
+\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%
+
+% north-west distributor with lower name [1] and length nx100 units
+\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%
+
+% north-west distributor with lower name [1]
+\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%
+
+% north-west dotted arrow of length nx100 units
+\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%
+
+% north-west dotted arrow
+\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%
+
+% north-west dotted arrow with upper name [1] and length nx100 units
+\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%
+
+% north-west dotted arrow with upper name
+\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%
+
+% north-west dotted arrow with lower name [1] and length nx100 units
+\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%
+
+% north-west dotted arrow with lower name [1]
+\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%
+
+% north-west monomorphism of length nx100 units
+\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%
+
+% north-west monomorphism
+\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%
+
+% north-west monomorphism with upper name [1] and length nx100 units
+\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%
+
+% north-west monomophism with upper name
+\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%
+
+% north-west monomorphism with lower name [1] and length nx100 units
+\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%
+
+% north-west monomorphism with lower name [1]
+\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%
+
+% north-west epimorphism of length nx100 units
+\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%
+
+% north-west epimorphism
+\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%
+
+% north-west epimorphism with upper name [1] and length nx100 units
+\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%
+
+% north-west epimorphism with upper name
+\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%
+
+% north-west epimorphism with lower name [1] and length nx100 units
+\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%
+
+% north-west epimorphism with lower name [1]
+\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%
+
+% north-west bimorphism of length nx100 units
+\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%
+
+% north-west bimorphism
+\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%
+
+% north-west bimorphism with upper name [1] and length nx100 units
+\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%
+
+% north-west bimorphism with upper name
+\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%
+
+% north-west bimorphism with lower name [1] and length nx100 units
+\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%
+
+% north-west bimorphism with lower name [1]
+\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%
+
+% north-west isomorphism of length nx100 units
+\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% north-west isomorphism
+\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%
+
+% north-west isomorphism with upper name [1] and length nx100 units
+\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\cong}{#100}}%
+
+% north-west isomorphism with upper name
+\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%
+
+% north-west isomorphism with lower name [1] and length nx100 units
+\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% north-west isomorphism with lower name [1]
+\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%
+
+% north-west equality
+\let\nweql=\seeql%
+
+% north-west equality with upper name
+\let\Nweql=\Seeql%
+
+% north-west equality with lower name [1]
+\let\nweqL=\seeqL%
+
+% pair of north-west arrows of length nx100 units
+\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%
+
+% pair of north-west arrows
+\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%
+
+% pair of north-west arrows with names [1][2] and length nx100 units
+\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%
+
+% pair of north-west arrows with names
+\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
+\let\nwbiaR=\Nwbiar
+
+% pair of north-west adjoint arrows of length nx100 units
+\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%
+
+% pair of north-west adjoint arrows
+\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%
+
+% pair of north-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint arrows with names
+\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
+\let\nwadjaR=\Nwadjar
+
+% pair of north-west distributors of length nx100 units
+\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%
+
+% pair of north-west distributors
+\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%
+
+% pair of north-west distributors with names [1][2] and length nx100 units
+\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-west distributors with names
+\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
+\let\nwbidisT=\Nwbidist
+
+% pair of north-west adjoint distributors of length nx100 units
+\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%
+
+% pair of north-west adjoint distributors
+\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%
+
+% pair of north-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint distributors with names
+\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
+\let\nwadjdisT=\Nwadjdist
+
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDIST{f}{g}{n} draws a east-north-east distributor
+% with names f, g and length n units
+\newcommand{\ENEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\ENEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\ENEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){\bimolength}}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\ENEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEQL{f}{g}{n} draws a east-north-east equality
+% with names f,g and length n units
+\newcommand{\ENEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
+% with names f,g and length n units
+\newcommand{\ENEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
+% with names f,g and length n units
+\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ENEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+% basic east-north-east distributor
+\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%
+
+% east-north-east distributor
+\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%
+
+% basic east-north-east distributor with upper name
+\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%
+
+% east-north-east distributor with upper name
+\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%
+
+% basic east-north-east distributor with lower name
+\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%
+
+% east-north-east distributor with lower name
+\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%
+
+% basic east-north-east dotted arrow
+\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%
+
+% east-north-east dotted arrow
+\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%
+
+% basic east-north-east dotted arrow with upper name
+\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%
+
+% east-north-east dotted arrow with upper name
+\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%
+
+% basic east-north-east dotted arrow with lower name
+\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%
+
+% east-north-east dotted arrow with lower name
+\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%
+
+% basic east-north-east monomorphism
+\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%
+
+% east-north-east monomorphism
+\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%
+
+% basic east-north-east monomorphism with upper name
+\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%
+
+% east-north-east monomorphism with upper name
+\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%
+
+% basic east-north-east monomorphism with lower name
+\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%
+
+% east-north-east monomorphism with lower name
+\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%
+
+% basic east-north-east epimorphism
+\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%
+
+% east-north-east epimorphism
+\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%
+
+% basic east-north-east epimorphism with upper name
+\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%
+
+% east-north-east epimorphism with upper name
+\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%
+
+% basic east-north-east epimorphism with lower name
+\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%
+
+% east-north-east epimorphism with lower name
+\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%
+
+% basic east-north-east bimorphism
+\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%
+
+% east-north-east bimorphism
+\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%
+
+% basic east-north-east bimorphism with upper name
+\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%
+
+% east-north-east bimorphism with upper name
+\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%
+
+% basic east-north-east bimorphism with lower name
+\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%
+
+% east-north-east bimorphism with lower name
+\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%
+
+% basic east-north-east isomorphism
+\def\basiceneiso[#1]{\ENEAR{\cong}{}{#100}}%
+
+% east-north-east isomorphism
+\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%
+
+% basic east-north-east isomorphism with upper name
+\def\basicEneiso[#1]#2{\ENEAR{#2}{\cong}{#100}}%
+
+% east-north-east isomorphism with upper name
+\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%
+
+% basic east-north-east isomorphism with lower name
+\def\basiceneisO[#1]#2{\ENEAR{\cong}{#2}{#100}}%
+
+% east-north-east isomorphism with lower name
+\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%
+
+% basic east-north-east equality
+\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%
+
+% east-north-east equality
+\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%
+
+% basic east-north-east equality with upper name
+\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%
+
+% east-north-east equality with upper name
+\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%
+
+% basic east-north-east equality with lower name
+\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%
+
+% east-north-east equality with lower name
+\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[133]}}%
+
+% basic east-north-east pair of arrows
+\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%
+
+% east-north-east pair of arrows
+\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%
+
+% basic east-north-east pair of arrows with names
+\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%
+
+% east-north-east pair of arrows with names
+\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
+\let\enebiaR=\Enebiar
+
+% basic east-north-east pair of distributors
+\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%
+
+% east-north-east pair of distributors
+\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%
+
+% basic east-north-east pair of distributors with names
+\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of distributors with names
+\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
+\let\enebidisT=\Enebidist
+
+% basic east-north-east pair of adjoint arrows
+\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%
+
+% east-north-east pair of adjoint arrows
+\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%
+
+% basic east-north-east pair of adjoint arrows with names
+\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint arrows with names
+\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
+\let\eneadjaR=\Eneadjar
+
+% basic east-north-east pair of adjoint distributors
+\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%
+
+% east-north-east pair of adjoint distributors
+\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%
+
+% basic east-north-east pair of adjoint distributors with names
+\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint distributors with names
+\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
+\let\eneadjdisT=\Eneadjdist
+
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDIST{f}{g}{n} draws a east-south-east distributor
+% with names f, g and length n units
+\newcommand{\ESEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\ESEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\ESEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){\bimolength}}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\ESEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEQL{f}{g}{n} draws a east-south-east equality
+% with names f,g and length n units
+\newcommand{\ESEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
+% with names f,g and length n units
+\newcommand{\ESEBIAR}[3]{%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
+% with names f,g and length n units
+\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ESEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% basic east-south-east distributor
+\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%
+
+% east-south-east distributor
+\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%
+
+% basic east-south-east distributor with upper name
+\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%
+
+% east-south-east distributor with upper name
+\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%
+
+% basic east-south-east distributor with lower name
+\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%
+
+% east-south-east distributor with lower name
+\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%
+
+% basic east-south-east dotted arrow
+\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%
+
+% east-south-east dotted arrow
+\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%
+
+% basic east-south-east dotted arrow with upper name
+\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%
+
+% east-south-east dotted arrow with upper name
+\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%
+
+% basic east-south-east dotted arrow with lower name
+\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%
+
+% east-south-east dotted arrow with lower name
+\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%
+
+% basic east-south-east monomorphism
+\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%
+
+% east-south-east monomorphism
+\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%
+
+% basic east-south-east monomorphism with upper name
+\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%
+
+% east-south-east monomorphism with upper name
+\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%
+
+% basic east-south-east monomorphism with lower name
+\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%
+
+% east-south-east monomorphism with lower name
+\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%
+
+% basic east-south-east epimorphism
+\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%
+
+% east-south-east epimorphism
+\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%
+
+% basic east-south-east epimorphism with upper name
+\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%
+
+% east-south-east epimorphism with upper name
+\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%
+
+% basic east-south-east epimorphism with lower name
+\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%
+
+% east-south-east epimorphism with lower name
+\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%
+
+% basic east-south-east bimorphism
+\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%
+
+% east-south-east bimorphism
+\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%
+
+% basic east-south-east bimorphism with upper name
+\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%
+
+% east-south-east bimorphism with upper name
+\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%
+
+% basic east-south-east bimorphism with lower name
+\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%
+
+% east-south-east bimorphism with lower name
+\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%
+
+% basic east-south-east isomorphism
+\def\basiceseiso[#1]{\ESEAR{\cong}{}{#100}}%
+
+% east-south-east isomorphism
+\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%
+
+% basic east-south-east isomorphism with upper name
+\def\basicEseiso[#1]#2{\ESEAR{#2}{\cong}{#100}}%
+
+% east-south-east isomorphism with upper name
+\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%
+
+% basic east-south-east isomorphism with lower name
+\def\basiceseisO[#1]#2{\ESEAR{\cong}{#2}{#100}}%
+
+% east-south-east isomorphism with lower name
+\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%
+
+% basic east-south-east equality
+\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%
+
+% east-south-east equality
+\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%
+
+% basic east-south-east equality with upper name
+\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%
+
+% east-south-east equality with upper name
+\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%
+
+% basic east-south-east equality with lower name
+\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%
+
+% east-south-east equality with lower name
+\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[133]}}%
+
+% basic east-south-east pair of arrows
+\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%
+
+% east-south-east pair of arrows
+\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%
+
+% basic east-south-east pair of arrows with names
+\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%
+
+% east-south-east pair of arrows with names
+\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
+\let\esebiaR=\Esebiar
+
+% basic east-south-east pair of distributors
+\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%
+
+% east-south-east pair of distributors
+\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%
+
+% basic east-south-east pair of distributors with names
+\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of distributors with names
+\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
+\let\esebidisT=\Esebidist
+
+% basic east-south-east pair of adjoint arrows
+\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%
+
+% east-south-east pair of adjoint arrows
+\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%
+
+% basic east-south-east pair of adjoint arrows with names
+\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint arrows with names
+\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
+\let\eseadjaR=\Eseadjar
+
+% basic east-south-east pair of adjoint distributors
+\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%
+
+% east-south-east pair of adjoint distributors
+\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%
+
+% basic east-south-east pair of adjoint distributors with names
+\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint distributors with names
+\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
+\let\eseadjdisT=\Eseadjdist
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDIST{f}{g}{n} draws a west-south-west distributor
+% with names f, g and length n units
+\newcommand{\WSWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\WSWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\WSWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){\bimolength}}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\WSWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
+% with names f,g and length n units
+\newcommand{\WSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
+% with names f,g and length n units
+\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% basic west-south-west distributor
+\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%
+
+% west-south-west distributor
+\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%
+
+% basic west-south-west distributor with upper name
+\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%
+
+% west-south-west distributor with upper name
+\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%
+
+% basic west-south-west distributor with lower name
+\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%
+
+% west-south-west distributor with lower name
+\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%
+
+% basic west-south-west dotted arrow
+\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%
+
+% west-south-west dotted arrow
+\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%
+
+% basic west-south-west dotted arrow with upper name
+\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%
+
+% west-south-west dotted arrow with upper name
+\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%
+
+% basic west-south-west dotted arrow with lower name
+\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%
+
+% west-south-west dotted arrow with lower name
+\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%
+
+% basic west-south-west monomorphism
+\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%
+
+% west-south-west monomorphism
+\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%
+
+% basic west-south-west monomorphism with upper name
+\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%
+
+% west-south-west monomorphism with upper name
+\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%
+
+% basic west-south-west monomorphism with lower name
+\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%
+
+% west-south-west monomorphism with lower name
+\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%
+
+% basic west-south-west epimorphism
+\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%
+
+% west-south-west epimorphism
+\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%
+
+% basic west-south-west epimorphism with upper name
+\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%
+
+% west-south-west epimorphism with upper name
+\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%
+
+% basic west-south-west epimorphism with lower name
+\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%
+
+% west-south-west epimorphism with lower name
+\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%
+
+% basic west-south-west bimorphism
+\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%
+
+% west-south-west bimorphism
+\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%
+
+% basic west-south-west bimorphism with upper name
+\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%
+
+% west-south-west bimorphism with upper name
+\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%
+
+% basic west-south-west bimorphism with lower name
+\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%
+
+% west-south-west bimorphism with lower name
+\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%
+
+% basic west-south-west isomorphism
+\def\basicwswiso[#1]{\WSWAR{\cong}{}{#100}}%
+
+% west-south-west isomorphism
+\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%
+
+% basic west-south-west isomorphism with upper name
+\def\basicWswiso[#1]#2{\WSWAR{#2}{\cong}{#100}}%
+
+% west-south-west isomorphism with upper name
+\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%
+
+% basic west-south-west isomorphism with lower name
+\def\basicwswisO[#1]#2{\WSWAR{\cong}{#2}{#100}}%
+
+% west-south-west isomorphism with lower name
+\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%
+
+% west-south-west equality
+\let\wsweql=\eneeql%
+
+% west-south-west equality with upper name
+\let\Wsweql=\Eneeql%
+
+% west-south-west equality with lower name
+\let\wsweqL=\eneeqL%
+
+% basic west-south-west pair of arrows
+\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%
+
+% west-south-west pair of arrows
+\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%
+
+% basic west-south-west pair of arrows with names
+\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%
+
+% west-south-west pair of arrows with names
+\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
+\let\wswbiaR=\Wswbiar
+
+% basic west-south-west pair of distributors
+\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%
+
+% west-south-west pair of distributors
+\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%
+
+% basic west-south-west pair of distributors with names
+\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of distributors with names
+\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
+\let\wswbidisT=\Wswbidist
+
+% basic west-south-west pair of adjoint arrows
+\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%
+
+% west-south-west pair of adjoint arrows
+\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%
+
+% basic west-south-west pair of adjoint arrows with names
+\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint arrows with names
+\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
+\let\wswadjaR=\Wswadjar
+
+% basic west-south-west pair of adjoint distributors
+\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%
+
+% west-south-west pair of adjoint distributors
+\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%
+
+% basic west-south-west pair of adjoint distributors with names
+\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint distributors with names
+\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
+\let\wswadjdisT=\Wswadjdist
+
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDIST{f}{g}{n} draws a west-north-west distributor
+% with names f, g and length n units
+\newcommand{\WNWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\WNWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\WNWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){\bimolength}}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\WNWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
+% with names f,g and length n units
+\newcommand{\WNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
+% with names f,g and length n units
+\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% basic west-north-west distributor
+\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%
+
+% west-north-west distributor
+\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%
+
+% basic west-north-west distributor with upper name
+\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%
+
+% west-north-west distributor with upper name
+\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%
+
+% basic west-north-west distributor with lower name
+\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%
+
+% west-north-west distributor with lower name
+\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%
+
+% basic west-north-west dotted arrow
+\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%
+
+% west-north-west dotted arrow
+\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with upper name
+\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%
+
+% west-north-west dotted arrow with upper name
+\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with lower name
+\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%
+
+% west-north-west dotted arrow with lower name
+\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%
+
+% basic west-north-west monomorphism
+\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%
+
+% west-north-west monomorphism
+\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%
+
+% basic west-north-west monomorphism with upper name
+\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%
+
+% west-north-west monomorphism with upper name
+\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%
+
+% basic west-north-west monomorphism with lower name
+\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%
+
+% west-north-west monomorphism with lower name
+\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%
+
+% basic west-north-west epimorphism
+\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%
+
+% west-north-west epimorphism
+\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%
+
+% basic west-north-west epimorphism with upper name
+\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%
+
+% west-north-west epimorphism with upper name
+\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%
+
+% basic west-north-west epimorphism with lower name
+\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%
+
+% west-north-west epimorphism with lower name
+\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%
+
+% basic west-north-west bimorphism
+\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%
+
+% west-north-west bimorphism
+\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%
+
+% basic west-north-west bimorphism with upper name
+\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%
+
+% west-north-west bimorphism with upper name
+\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%
+
+% basic west-north-west bimorphism with lower name
+\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%
+
+% west-north-west bimorphism with lower name
+\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%
+
+% basic west-north-west isomorphism
+\def\basicwnwiso[#1]{\WNWAR{\cong}{}{#100}}%
+
+% west-north-west isomorphism
+\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%
+
+% basic west-north-west isomorphism with upper name
+\def\basicWnwiso[#1]#2{\WNWAR{#2}{\cong}{#100}}%
+
+% west-north-west isomorphism with upper name
+\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%
+
+% basic west-north-west isomorphism with lower name
+\def\basicwnwisO[#1]#2{\WNWAR{\cong}{#2}{#100}}%
+
+% west-north-west isomorphism with lower name
+\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%
+
+% west-north-west equality
+\let\wnweql=\eseeql%
+
+% west-north-west equality with upper name
+\let\Wnweql=\Eseeql%
+
+% west-north-west equality with lower name
+\let\wnweqL=\eseeqL%
+
+% basic west-north-west pair of arrows
+\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%
+
+% west-north-west pair of arrows
+\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%
+
+% basic west-north-west pair of arrows with names
+\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%
+
+% west-north-west pair of arrows with names
+\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
+\let\wnwbiaR=\Wnwbiar
+
+% basic west-north-west pair of distributors
+\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%
+
+% west-north-west pair of distributors
+\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%
+
+% basic west-north-west pair of distributors with names
+\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of distributors with names
+\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
+\let\wnwbidisT=\Wnwbidist
+
+% basic west-north-west pair of adjoint arrows
+\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%
+
+% west-north-west pair of adjoint arrows
+\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%
+
+% basic west-north-west pair of adjoint arrows with names
+\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint arrows with names
+\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
+\let\wnwadjaR=\Wnwadjar
+
+% basic west-north-west pair of adjoint distributors
+\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%
+
+% west-north-west pair of adjoint distributors
+\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%
+
+% basic west-north-west pair of adjoint distributors with names
+\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint distributors with names
+\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
+\let\wnwadjdisT=\Wnwadjdist
+
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDIST{f}{g}{n} draws a north-north-east distributor
+% with names f, g and length n units
+\newcommand{\NNEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\NNEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\NNEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){\bimolength}}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\NNEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEQL{f}{g}{n} draws a north-north-east equality
+% with names f,g and length n units
+\newcommand{\NNEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},\value{x}){\line(1,2){#3}}%
+\put(\value{y},-\value{x}){\line(1,2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
+% with names f,g and length n units
+\newcommand{\NNEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
+% with names f,g and length n units
+\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+% basic north-north-east distributor
+\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%
+
+% north-north-east distributor
+\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%
+
+% basic north-north-east distributor with upper name
+\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%
+
+% north-north-east distributor with upper name
+\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%
+
+% basic north-north-east distributor with lower name
+\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%
+
+% north-north-east distributor with lower name
+\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%
+
+% basic north-north-east dotted arrow
+\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%
+
+% north-north-east dotted arrow
+\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%
+
+% basic north-north-east dotted arrow with upper name
+\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%
+
+% north-north-east dotted arrow with upper name
+\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%
+
+% basic north-north-east dotted arrow with lower name
+\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%
+
+% north-north-east dotted arrow with lower name
+\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%
+
+% basic north-north-east monomorphism
+\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%
+
+% north-north-east monomorphism
+\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%
+
+% basic north-north-east monomorphism with upper name
+\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%
+
+% north-north-east monomorphism with upper name
+\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%
+
+% basic north-north-east monomorphism with lower name
+\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%
+
+% north-north-east monomorphism with lower name
+\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%
+
+% basic north-north-east epimorphism
+\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%
+
+% north-north-east epimorphism
+\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%
+
+% basic north-north-east epimorphism with upper name
+\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%
+
+% north-north-east epimorphism with upper name
+\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%
+
+% basic north-north-east epimorphism with lower name
+\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%
+
+% north-north-east epimorphism with lower name
+\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%
+
+% basic north-north-east bimorphism
+\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%
+
+% north-north-east bimorphism
+\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%
+
+% basic north-north-east bimorphism with upper name
+\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%
+
+% north-north-east bimorphism with upper name
+\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%
+
+% basic north-north-east bimorphism with lower name
+\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%
+
+% north-north-east bimorphism with lower name
+\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%
+
+% basic north-north-east isomorphism
+\def\basicnneiso[#1]{\NNEAR{\cong}{}{#100}}%
+
+% north-north-east isomorphism
+\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%
+
+% basic north-north-east isomorphism with upper name
+\def\basicNneiso[#1]#2{\NNEAR{#2}{\cong}{#100}}%
+
+% north-north-east isomorphism with upper name
+\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%
+
+% basic north-north-east isomorphism with lower name
+\def\basicnneisO[#1]#2{\NNEAR{\cong}{#2}{#100}}%
+
+% north-north-east isomorphism with lower name
+\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%
+
+% basic north-north-east equality
+\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%
+
+% north-north-east equality
+\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%
+
+% basic north-north-east equality with upper name
+\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%
+
+% north-north-east equality with upper name
+\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%
+
+% basic north-north-east equality with lower name
+\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%
+
+% north-north-east equality with lower name
+\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
+\let\nnebiaR=\Nnebiar
+
+% basic north-north-east pair of distributors
+\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
+\let\nnebidisT=\Nnebidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
+\let\nneadjaR=\Nneadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
+\let\nneadjdisT=\Nneadjdist
+
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDIST{f}{g}{n} draws a south-south-east distributor
+% with names f, g and length n units
+\newcommand{\SSEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\SSEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\SSEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){\bimolength}}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\SSEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEQL{f}{g}{n} draws a south-south-east equality
+% with names f,g and length n units
+\newcommand{\SSEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
+\put(\value{y},\value{x}){\line(1,-2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
+% with names f,g and length n units
+\newcommand{\SSEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
+% with names f,g and length n units
+\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% basic south-south-east distributor
+\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%
+
+% south-south-east distributor
+\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%
+
+% basic south-south-east distributor with upper name
+\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%
+
+% south-south-east distributor with upper name
+\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%
+
+% basic south-south-east distributor with lower name
+\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%
+
+% south-south-east distributor with lower name
+\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%
+
+% basic south-south-east dotted arrow
+\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%
+
+% south-south-east dotted arrow
+\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%
+
+% basic south-south-east dotted arrow with upper name
+\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%
+
+% south-south-east dotted arrow with upper name
+\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%
+
+% basic south-south-east dotted arrow with lower name
+\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%
+
+% south-south-east dotted arrow with lower name
+\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%
+
+% basic south-south-east monomorphism
+\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%
+
+% south-south-east monomorphism
+\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%
+
+% basic south-south-east monomorphism with upper name
+\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%
+
+% south-south-east monomorphism with upper name
+\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%
+
+% basic south-south-east monomorphism with lower name
+\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%
+
+% south-south-east monomorphism with lower name
+\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%
+
+% basic south-south-east epimorphism
+\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%
+
+% south-south-east epimorphism
+\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%
+
+% basic south-south-east epimorphism with upper name
+\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%
+
+% south-south-east epimorphism with upper name
+\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%
+
+% basic south-south-east epimorphism with lower name
+\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%
+
+% south-south-east epimorphism with lower name
+\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%
+
+% basic south-south-east bimorphism
+\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%
+
+% south-south-east bimorphism
+\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%
+
+% basic south-south-east bimorphism with upper name
+\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%
+
+% south-south-east bimorphism with upper name
+\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%
+
+% basic south-south-east bimorphism with lower name
+\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%
+
+% south-south-east bimorphism with lower name
+\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%
+
+% basic south-south-east isomorphism
+\def\basicsseiso[#1]{\SSEAR{\cong}{}{#100}}%
+
+% south-south-east isomorphism
+\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%
+
+% basic south-south-east isomorphism with upper name
+\def\basicSseiso[#1]#2{\SSEAR{#2}{\cong}{#100}}%
+
+% south-south-east isomorphism with upper name
+\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%
+
+% basic south-south-east isomorphism with lower name
+\def\basicsseisO[#1]#2{\SSEAR{\cong}{#2}{#100}}%
+
+% south-south-east isomorphism with lower name
+\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%
+
+% basic south-south-east equality
+\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%
+
+% south-south-east equality
+\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%
+
+% basic south-south-east equality with upper name
+\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%
+
+% south-south-east equality with upper name
+\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%
+
+% basic south-south-east equality with lower name
+\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%
+
+% south-south-east equality with lower name
+\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[67]}}%
+
+% basic south-south-east pair of arrows
+\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%
+
+% south-south-east pair of arrows
+\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%
+
+% basic south-south-east pair of arrows with names
+\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%
+
+% south-south-east pair of arrows with names
+\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
+\let\ssebiaR=\Ssebiar
+
+% basic south-south-east pair of distributors
+\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%
+
+% south-south-east pair of distributors
+\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%
+
+% basic south-south-east pair of distributors with names
+\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of distributors with names
+\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
+\let\ssebidisT=\Ssebidist
+
+% basic south-south-east pair of adjoint arrows
+\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%
+
+% south-south-east pair of adjoint arrows
+\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%
+
+% basic south-south-east pair of adjoint arrows with names
+\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint arrows with names
+\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
+\let\sseadjaR=\Sseadjar
+
+% basic south-south-east pair of adjoint distributors
+\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%
+
+% south-south-east pair of adjoint distributors
+\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%
+
+% basic south-south-east pair of adjoint distributors with names
+\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint distributors with names
+\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
+\let\sseadjdisT=\Sseadjdist
+
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDIST{f}{g}{n} draws a south-south-west distributor
+% with names f, g and length n units
+\newcommand{\SSWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\SSWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\SSWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){\bimolength}}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\SSWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
+% with names f,g and length n units
+\newcommand{\SSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
+% with names f,g and length n units
+\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% basic south-south-west distributor
+\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%
+
+% south-south-west distributor
+\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%
+
+% basic south-south-west distributor with upper name
+\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%
+
+% south-south-west distributor with upper name
+\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%
+
+% basic south-south-west distributor with lower name
+\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%
+
+% south-south-west distributor with lower name
+\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%
+
+% basic south-south-west dotted arrow
+\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%
+
+% south-south-west dotted arrow
+\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%
+
+% basic south-south-west dotted arrow with upper name
+\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%
+
+% south-south-west dotted arrow with upper name
+\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%
+
+% basic south-south-west dotted arrow with lower name
+\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%
+
+% south-south-west dotted arrow with lower name
+\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%
+
+% basic south-south-west monomorphism
+\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%
+
+% south-south-west monomorphism
+\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%
+
+% basic south-south-west monomorphism with upper name
+\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%
+
+% south-south-west monomorphism with upper name
+\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%
+
+% basic south-south-west monomorphism with lower name
+\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%
+
+% south-south-west monomorphism with lower name
+\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%
+
+% basic south-south-west epimorphism
+\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%
+
+% south-south-west epimorphism
+\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%
+
+% basic south-south-west epimorphism with upper name
+\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%
+
+% south-south-west epimorphism with upper name
+\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%
+
+% basic south-south-west epimorphism with lower name
+\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%
+
+% south-south-west epimorphism with lower name
+\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%
+
+% basic south-south-west bimorphism
+\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%
+
+% south-south-west bimorphism
+\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%
+
+% basic south-south-west bimorphism with upper name
+\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%
+
+% south-south-west bimorphism with upper name
+\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%
+
+% basic south-south-west bimorphism with lower name
+\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%
+
+% south-south-west bimorphism with lower name
+\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%
+
+% basic south-south-west isomorphism
+\def\basicsswiso[#1]{\SSWAR{\cong}{}{#100}}%
+
+% south-south-west isomorphism
+\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%
+
+% basic south-south-west isomorphism with upper name
+\def\basicSswiso[#1]#2{\SSWAR{#2}{\cong}{#100}}%
+
+% south-south-west isomorphism with upper name
+\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%
+
+% basic south-south-west isomorphism with lower name
+\def\basicsswisO[#1]#2{\SSWAR{\cong}{#2}{#100}}%
+
+% south-south-west isomorphism with lower name
+\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%
+
+% south-south-west equality
+\let\ssweql=\nneeql%
+
+% south-south-west equality with upper name
+\let\Ssweql=\Nneeql%
+
+% south-south-west equality with lower name
+\let\ssweqL=\nneeqL%
+
+% basic south-south-west pair of arrows
+\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%
+
+% south-south-west pair of arrows
+\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%
+
+% basic south-south-west pair of arrows with names
+\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%
+
+% south-south-west pair of arrows with names
+\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
+\let\sswbiaR=\Sswbiar
+
+% basic south-south-west pair of distributors
+\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%
+
+% south-south-west pair of distributors
+\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%
+
+% basic south-south-west pair of distributors with names
+\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of distributors with names
+\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
+\let\sswbidisT=\Sswbidist
+
+% basic south-south-west pair of adjoint arrows
+\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%
+
+% south-south-west pair of adjoint arrows
+\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%
+
+% basic south-south-west pair of adjoint arrows with names
+\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint arrows with names
+\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
+\let\sswadjaR=\Sswadjar
+
+% basic south-south-west pair of adjoint distributors
+\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%
+
+% south-south-west pair of adjoint distributors
+\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%
+
+% basic south-south-west pair of adjoint distributors with names
+\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint distributors with names
+\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
+\let\sswadjdisT=\Sswadjdist
+
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDIST{f}{g}{n} draws a north-north-west distributor
+% with names f, g and length n units
+\newcommand{\NNWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\NNWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\NNWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){\bimolength}}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\NNWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
+% with names f,g and length n units
+\newcommand{\NNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
+% with names f,g and length n units
+\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% basic north-north-west distributor
+\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%
+
+% north-north-west distributor
+\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%
+
+% basic north-north-west distributor with upper name
+\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%
+
+% north-north-west distributor with upper name
+\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%
+
+% basic north-north-west distributor with lower name
+\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%
+
+% north-north-west distributor with lower name
+\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%
+
+% basic north-north-west dotted arrow
+\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%
+
+% north-north-west dotted arrow
+\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with upper name
+\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%
+
+% north-north-west dotted arrow with upper name
+\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with lower name
+\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%
+
+% north-north-west dotted arrow with lower name
+\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%
+
+% basic north-north-west monomorphism
+\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%
+
+% north-north-west monomorphism
+\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%
+
+% basic north-north-west monomorphism with upper name
+\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%
+
+% north-north-west monomorphism with upper name
+\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%
+
+% basic north-north-west monomorphism with lower name
+\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%
+
+% north-north-west monomorphism with lower name
+\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%
+
+% basic north-north-west epimorphism
+\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%
+
+% north-north-west epimorphism
+\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%
+
+% basic north-north-west epimorphism with upper name
+\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%
+
+% north-north-west epimorphism with upper name
+\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%
+
+% basic north-north-west epimorphism with lower name
+\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%
+
+% north-north-west epimorphism with lower name
+\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%
+
+% basic north-north-west bimorphism
+\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%
+
+% north-north-west bimorphism
+\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%
+
+% basic north-north-west bimorphism with upper name
+\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%
+
+% north-north-west bimorphism with upper name
+\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%
+
+% basic north-north-west bimorphism with lower name
+\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%
+
+% north-north-west bimorphism with lower name
+\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%
+
+% basic north-north-west isomorphism
+\def\basicnnwiso[#1]{\NNWAR{\cong}{}{#100}}%
+
+% north-north-west isomorphism
+\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%
+
+% basic north-north-west isomorphism with upper name
+\def\basicNnwiso[#1]#2{\NNWAR{#2}{\cong}{#100}}%
+
+% north-north-west isomorphism with upper name
+\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%
+
+% basic north-north-west isomorphism with lower name
+\def\basicnnwisO[#1]#2{\NNWAR{\cong}{#2}{#100}}%
+
+% north-north-west isomorphism with lower name
+\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%
+
+% north-north-west equality
+\let\nnweql=\sseeql%
+
+% north-north-west equality with upper name
+\let\Nnweql=\Sseeql%
+
+% north-north-west equality with lower name
+\let\nnweqL=\sseeqL%
+
+% basic north-north-east pair of arrows
+\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
+\let\nnwbiaR=\Nnwbiar
+
+% basic north-north-east pair of distributors
+\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
+\let\nnwbidisT=\Nnwbidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
+\let\nnwadjaR=\Nnwadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
+\let\nnwadjdisT=\Nnwadjdist
+
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,1){#3}}%
+\put(\Y,\Z){\eenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-1){#3}}%
+\put(\Y,-\Z){\eesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWs
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,1){#3}}%
+\put(-\Y,\Z){\wwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-1){#3}}%
+\put(-\Y,-\Z){\wwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(1,3){#3}}%
+\put(\Y,\Z){\nnnehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-1,-3){#3}}%
+\put(-\Y,-\Z){\ssswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(1,-3){#3}}%
+\put(\Y,-\Z){\sssehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-1,3){#3}}%
+\put(-\Y,\Z){\nnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,2){#3}}%
+\put(\Y,\Z){\neenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-2){#3}}%
+\put(\Y,-\Z){\seesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-WEST-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,2){#3}}%
+\put(-\Y,\Z){\nwwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-2){#3}}%
+\put(-\Y,-\Z){\swwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,3){#3}}%
+\put(\Y,\Z){\nennehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-3){#3}}%
+\put(-\Y,-\Z){\swsswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-3){#3}}%
+\put(\Y,-\Z){\sessehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,3){#3}}%
+\put(-\Y,\Z){\nwnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MaxiDiagram b/macros/generic/diagrams/borceux/diagram/MaxiDiagram
new file mode 100644
index 0000000000..c5d3537322
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MaxiDiagram
@@ -0,0 +1,10213 @@
+% DIAGRAM MACROS (version 3.1)
+% MAXI-DIAGRAM FILE
+% FILE DIAGRAM AUGMENTED WITH triar, triadjar (with or without names)
+% AND quadriar, quadriadjar, quintiar, quintiadjar (without names)
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the printerresolution
+%%% unit = 1 dpi
+\newcount\printerresolution
+\global\printerresolution=300
+
+%%% Fixing the length of a segment in an arrowhead
+%%% unit = 0.01pt
+\newcount\headsize
+\global\headsize=450
+
+%%% Fixing the thickness of an arrowhead
+%%% value = 1/5 of the font size
+\font\dotfont = lcircle10 at 3pt
+
+%%% Fixing the distance between the two heads of an epimorphism
+%%% unit = 0.01pt
+\newcount\epihead
+\global\epihead=200
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+%%%%% DESIGING THE ARROW HEADS
+
+%%% Customizing the unitlength for the sake of precision
+\setlength{\unitlength}{0.01pt}
+
+%%% Printing one dot at the required scale
+\def\DOT{{\dotfont q}}
+
+%%% Computing the distance between two dots in an arrowhead
+\newcount\basicstep
+\basicstep=7227
+\global\divide\basicstep by \printerresolution
+
+%%% Computing the number of dots in an arrowhead
+\newcount\numberofsteps
+\numberofsteps=\headsize
+\global\divide\numberofsteps by \basicstep
+
+%%% Producing an arrow head
+\newcommand{\makehead}[3]{%
+\begin{picture}(0,0)%
+\multiput(0,0)(#1,#2){#3}{\DOT}%
+\multiput(0,0)(-#2,#1){#3}{\DOT}%
+\end{picture}}
+
+%%% Creating bitmap images of the arrowheads
+\newcount\xstep
+\newcount\ystep
+
+\newsavebox{\northhead}
+\savebox{\northhead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nhead}{\usebox{\northhead}}
+
+\newsavebox{\easthead}
+\savebox{\easthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ehead}{\usebox{\easthead}}
+
+\newsavebox{\southhead}
+\savebox{\southhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\shead}{\usebox{\southhead}}
+
+\newsavebox{\westhead}
+\savebox{\westhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\whead}{\usebox{\westhead}}
+
+\newsavebox{\northwesthead}
+\savebox{\northwesthead}{%
+\makehead{0}{-\basicstep}{\numberofsteps}}
+\newcommand{\nwhead}{\usebox{\northwesthead}}
+
+\newsavebox{\northeasthead}
+\savebox{\northeasthead}{%
+\makehead{-\basicstep}{0}{\numberofsteps}}
+\newcommand{\nehead}{\usebox{\northeasthead}}
+
+\newsavebox{\southwesthead}
+\savebox{\southwesthead}{%
+\makehead{\basicstep}{0}{\numberofsteps}}
+\newcommand{\swhead}{\usebox{\southwesthead}}
+
+\newsavebox{\southeasthead}
+\savebox{\southeasthead}{%
+\makehead{0}{\basicstep}{\numberofsteps}}
+\newcommand{\sehead}{\usebox{\southeasthead}}
+
+\newsavebox{\eastnortheasthead}
+\savebox{\eastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\enehead}{\usebox{\eastnortheasthead}}
+
+\newsavebox{\northnortheasthead}
+\savebox{\northnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnehead}{\usebox{\northnortheasthead}}
+
+\newsavebox{\southsouthwesthead}
+\savebox{\southsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sswhead}{\usebox{\southsouthwesthead}}
+
+\newsavebox{\westsouthwesthead}
+\savebox{\westsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wswhead}{\usebox{\westsouthwesthead}}
+
+\newsavebox{\westnorthwesthead}
+\savebox{\westnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}
+
+\newsavebox{\eastsoutheasthead}
+\savebox{\eastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\esehead}{\usebox{\eastsoutheasthead}}
+
+\newsavebox{\northnorthwesthead}
+\savebox{\northnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}
+
+\newsavebox{\southsoutheasthead}
+\savebox{\southsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssehead}{\usebox{\southsoutheasthead}}
+
+\newsavebox{\easteastnortheasthead}
+\savebox{\easteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}
+
+\newsavebox{\northnorthnortheasthead}
+\savebox{\northnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}
+
+\newsavebox{\southsouthsouthwesthead}
+\savebox{\southsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}
+
+\newsavebox{\westwestsouthwesthead}
+\savebox{\westwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}
+
+\newsavebox{\westwestnorthwesthead}
+\savebox{\westwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}
+
+\newsavebox{\easteastsoutheasthead}
+\savebox{\easteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}
+
+\newsavebox{\northnorthnorthwesthead}
+\savebox{\northnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}
+
+\newsavebox{\southsouthsoutheasthead}
+\savebox{\southsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}
+
+\newsavebox{\northeasteastnortheasthead}
+\savebox{\northeasteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}
+
+\newsavebox{\northeastnorthnortheasthead}
+\savebox{\northeastnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}
+
+\newsavebox{\southwestsouthsouthwesthead}
+\savebox{\southwestsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}
+
+\newsavebox{\southwestwestsouthwesthead}
+\savebox{\southwestwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}
+
+\newsavebox{\northwestwestnorthwesthead}
+\savebox{\northwestwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}
+
+\newsavebox{\southeasteastsoutheasthead}
+\savebox{\southeasteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}
+
+\newsavebox{\northwestnorthnorthwesthead}
+\savebox{\northwestnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}
+
+\newsavebox{\southeastsouthsoutheasthead}
+\savebox{\southeastsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}
+
+%%% Restoring the standard unitlength
+\setlength{\unitlength}{1pt}
+
+
+% MACROS FOR MARKED ARROWS
+
+\newsavebox{\isomorphismmark}
+\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
+\isomark{$\cong$}
+\newcommand{\isosign}{\usebox{\isomorphismmark}}
+
+\newif\ifuserdist
+\newsavebox{\distributormark}
+\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
+\userdisttrue\savebox{\distributormark}{#1}\fi}
+\newsavebox{\distributorcircle}
+\savebox{\distributorcircle}{\begin{picture}(0,0)%
+\put(0,0){\circle{4}}\end{picture}}
+\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
+\usebox{\distributorcircle}\fi}
+\userdistfalse
+
+
+
+% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS
+
+\newcount\monolength
+\newcount\epilength
+\newcount\bimolength
+\newcount\secondmonolength
+\newcount\secondepilength
+
+\newcount\monotail%
+\global\monotail=\headsize%
+\global\multiply\monotail by 7070%
+\global\divide\monotail by 10000%
+
+\newcount\truemonotail%
+\newcount\trueepihead%
+
+\def\truetail{\truemonotail=\monotail%
+\multiply\truemonotail by 100%
+\divide\truemonotail by \SCALE}
+
+\def\truehead{\trueepihead=\epihead%
+\multiply\trueepihead by 100%
+\divide\trueepihead by \SCALE}
+
+\newcount\Monotail%
+\global\Monotail=\headsize%
+\global\divide\Monotail by 2%
+
+\newcount\Epihead%
+\global\Epihead=\epihead%
+\global\multiply\Epihead by 7070%
+\global\divide\Epihead by 10000%
+
+\newcount\Truemonotail%
+\newcount\Trueepihead%
+
+\def\Truetail{\Truemonotail=\Monotail%
+\multiply\Truemonotail by 100%
+\divide\Truemonotail by \SCALE}%
+
+\def\Truehead{\Trueepihead=\Epihead%
+\multiply\Trueepihead by 100%
+\divide\Trueepihead by \SCALE}
+
+\newcount\MonoTail%
+\global\MonoTail=\headsize%
+\global\multiply\MonoTail by 6324%
+\global\divide\MonoTail by 10000%
+
+\newcount\EpiHead%
+\global\EpiHead=\epihead%
+\global\multiply\EpiHead by 8944%
+\global\divide\EpiHead by 10000%
+
+\newcount\TrueMonoTail%
+\newcount\TrueEpiHead%
+
+\def\TrueTail{\TrueMonoTail=\MonoTail%
+\multiply\TrueMonoTail by 100%
+\divide\TrueMonoTail by \SCALE}%
+
+\def\TrueHead{\TrueEpiHead=\EpiHead%
+\multiply\TrueEpiHead by 100%
+\divide\TrueEpiHead by \SCALE}
+
+\newcount\monotaiL%
+\global\monotaiL=\headsize%
+\global\multiply\monotaiL by 3162%
+\global\divide\monotaiL by 10000%
+
+\newcount\epiheaD%
+\global\epiheaD=\epihead%
+\global\multiply\epiheaD by 4472%
+\global\divide\epiheaD by 10000%
+
+\newcount\truemonotaiL%
+\newcount\trueepiheaD%
+
+\def\truetaiL{\truemonotaiL=\monotaiL%
+\multiply\truemonotaiL by 100%
+\divide\truemonotaiL by \SCALE}%
+
+\def\trueheaD{\trueepiheaD=\epiheaD%
+\multiply\trueepiheaD by 100%
+\divide\trueepiheaD by \SCALE}
+
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcount\NUMBEROFDOTS%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\X%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% moving a name up
+\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}
+
+% moving a name down
+\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tbicase{P} draws the bi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \textarrowlength pt.
+\newcommand{\Tbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\scriptstyle #2}%
+{\mbox{\tlowername{#1{\actualtextarrowlength}}%
+{\scriptstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \ttricase{P} draws the tri-picture P
+% with length \textarrowlength pt.
+\newcommand{\ttricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}{#1{\actualtextarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Ttricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \textarrowlength pt.
+\newcommand{\Ttricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualtextarrowlength}{\rule{0pt}{6pt}\scriptstyle #2}%
+{\rule{0pt}{6pt}\scriptstyle #3}{\rule{0pt}{6pt}\scriptstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tmulticase{P} draws the multi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% moving a name up
+\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}
+
+% moving a name down
+\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dbicase{P} draws the bi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \displayarrowlength pt.
+\newcommand{\Dbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\textstyle #2}%
+{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
+{\textstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dtricase{P} draws the tri-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dtricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}{#1{\actualdisplayarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dtricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \displayarrowlength pt.
+\newcommand{\Dtricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualdisplayarrowlength}{\rule{0pt}{6pt}\textstyle #2}%
+{\rule{0pt}{6pt}\textstyle #3}{\rule{0pt}{6pt}\textstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dmulticase{P} draws the multi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \DIST{n} draws a distributor of length n units
+\newcommand{\DIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \DOTAR{n} draws a dotted arrow of length n units
+\newcommand{\DOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \MONO{n} draws a monomorphism of length n units
+\newcommand{\MONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)%
+\put(\monotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\monotail,0){\ehead}%
+\end{picture}}%
+
+% \EPI{n} draws an epimorphism of length n units
+\newcommand{\EPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIMO{n} draws a bimorphism of length n units
+\newcommand{\BIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\end{picture}}%
+
+% \BIDIST{n} draws a pair of distributors of length n units
+\newcommand{\BIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \EQL{n} draws an equality of length n units
+\newcommand{\EQL}[1]%
+{\begin{picture}(#1,0)%
+\put(0,100){\line(1,0){#1}}%
+\put(0,-100){\line(1,0){#1}}%
+\end{picture}}%
+
+% \ADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\ADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\end{picture}}%
+
+% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
+\newcommand{\ADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \TRIAR{n}{f}{g}{h} draws a triple of arrows of length n units
+% and names f, g, h
+\newcommand{\TRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \TRIADJAR{n} draws a triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\TRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIAR{n} draws a quadruple of arrows of length n units
+\newcommand{\QUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIADJAR{n} draws a quadruple of adjoint arrows
+% of length n units
+\newcommand{\QUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIAR{n} draws a quintuple of arrows of length n units
+\newcommand{\QUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIADJAR{n} draws a quintuple of adjoint arrows
+% of length n units
+\newcommand{\QUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% distributor
+\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%
+
+% distributor with upper name [1]
+\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
+\else\Dcase{\DIST}{\TUP{#1}}\fi}%
+
+% dotted arrow
+\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%
+
+% dotted arrow with upper name [1]
+\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
+\else\Dcase{\DOTAR}{#1}\fi}%
+
+% monomorphism
+\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%
+
+% monomorphism with upper name [1]
+\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%
+
+% epimorphism
+\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%
+
+% epimorphism with upper name [1]
+\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%
+
+% bimorphism
+\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%
+
+% bimorphism with upper name [1]
+\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
+\else\Dcase{\BIMO}{#1}\fi}%
+
+% isomorphism
+\newcommand{\iso}{\ifinner\Tcase{\AR}{\isosign}\else\Dcase{\AR}{\isosign}\fi}%
+
+% isomorphism with upper name [1]
+\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\isosign{#1}}%
+\else\Dcase{\AR}{\isosign{#1}}\fi}%
+
+% pair of arrows
+\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%
+
+% pair of arrows with names [1],[2]
+\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
+\else\Dbicase{\BIAR}{#1}{#2}\fi}%
+
+% pair of distributors
+\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%
+
+% pair of distributors with names [1],[2]
+\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% equality
+\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%
+
+% equality with name [1]
+\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
+\else\Dcase{\EQL}{\DUP{#1}}\fi}%
+
+% pair of adjoint arrows
+\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%
+
+% pair of adjoint arrows with names [1],[2]
+\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
+\else\Dbicase{\ADJAR}{#1}{#2}\fi}%
+
+% pair of adjoint distributors
+\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%
+
+% pair of adjoint distributors with names [1],[2]
+\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% triple of arrows
+\newcommand{\triar}{\ifinner\ttricase{\TRIAR}\else\dtricase{\TRIAR}\fi}%
+
+% triple of arrows with names [1],[2],[3]
+\newcommand{\Triar}[3]{\ifinner\Ttricase{\TRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIAR}{#1}{#2}{#3}\fi}%
+
+% triple of adjoint arrows
+\newcommand{\triadjar}{\ifinner\ttricase{\TRIADJAR}%
+\else\dtricase{\TRIADJAR}\fi}%
+
+% triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Triadjar}[3]{\ifinner\Ttricase{\TRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIADJAR}{#1}{#2}{#3}\fi}%
+
+% quadruple of arrows
+\newcommand{\quadriar}{\ifinner\tquadricase{\QUADRIAR}%
+\else\dmulticase{\QUADRIAR}\fi}%
+
+% quadruple of adjoint arrows
+\newcommand{\quadriadjar}{\ifinner\tmulticase{\QUADRIADJAR}%
+\else\dmulticase{\QUADRIADJAR}\fi}%
+
+% quintuple of arrows
+\newcommand{\quintiar}{\ifinner\tmulticase{\QUINTIAR}%
+\else\dmulticase{\QUINTIAR}\fi}%
+
+% quintuple of adjoint arrows
+\newcommand{\quintiadjar}{\ifinner\tmulticase{\QUINTIADJAR}%
+\else\dmulticase{\QUINTIADJAR}\fi}%
+
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKDIST{n} draws a pointing back distributor of length n units
+\newcommand{\BKDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \BKDOTAR{n} draws a backward dotted arrow
+% of length n units
+\newcommand{\BKDOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\BKMONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monotail,0){\line(-1,0){\monolength}}%
+\put(-\monotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+% \BKEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\BKEPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\BKBIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\BKBIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\end{picture}}%
+
+% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\BKBIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \BKTRIAR{n}{f}{g}{h} draws a triple of back arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKTRIADJAR{n} draws a back triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIAR{n} draws a quadruple of back arrows of length n units
+\newcommand{\BKQUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIADJAR{n} draws a back quadruple of adjoint arrows
+% of length n units
+\newcommand{\BKQUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIAR{n} draws a quintuple of back arrows of length n units
+\newcommand{\BKQUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIADJAR{n} draws a back quintuple of adjoint arrows
+% of length n units
+\newcommand{\BKQUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+% back distributor
+\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%
+
+% back distributor with upper name [1]
+\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
+\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%
+
+% backward dotted arrow
+\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%
+
+% backward dotted arrow with upper name [1]
+\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
+\else\Dcase{\BKDOTAR}{#1}\fi}%
+
+% back monomorphism
+\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%
+
+% back monomorphism with upper name [1]
+\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
+\else\Dcase{\BKMONO}{#1}\fi}%
+
+% back epimorphism
+\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%
+
+% back epimorphism with upper name [1]
+\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
+\else\Dcase{\BKEPI}{#1}\fi}%
+
+% back bimorphism
+\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%
+
+% back bimorphism with upper name [1]
+\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
+\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%
+
+% back isomorphism
+\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\isosign}%
+\else\Dcase{\BKAR}{\isosign}\fi}%
+
+% back isomorphism with upper name [1]
+\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\isosign{#1}}%
+\else\Dcase{\BKAR}{\isosign{#1}}\fi}%
+
+% pair of back arrows
+\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%
+
+% pair of back arrows with names [1],[2]
+\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
+\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%
+
+% pair of back distributors
+\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
+\else\dbicase{\BKBIDIST}\fi}%
+
+% pair of back distributors with names [1],[2]
+\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% back equality
+\let\bkeql=\eql%
+
+% back equality with name [1]
+\let\Bkeql=\Eql%
+
+% back pair of adjoint arrows
+\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
+\else\dbicase{\BKADJAR}\fi}%
+
+% back pair of adjoint arrows with names [1],[2]
+\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
+\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%
+
+% back pair of adjoint distributors
+\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
+\else\dbicase{\BKADJDIST}\fi}%
+
+% back pair of adjoint distributors with names [1],[2]
+\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}\fi}%
+
+% triple of back arrows
+\newcommand{\bktriar}{\ifinner\ttricase{\BKTRIAR}\else\dtricase{\BKTRIAR}\fi}%
+
+% triple of back arrows with names [1],[2],[3]
+\newcommand{\Bktriar}[3]{\ifinner\Ttricase{\BKTRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIAR}{#1}{#2}{#3}\fi}%
+
+% back triple of adjoint arrows
+\newcommand{\bktriadjar}{\ifinner\ttricase{\BKTRIADJAR}%
+\else\dtricase{\BKTRIADJAR}\fi}%
+
+% back triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Bktriadjar}[3]{\ifinner\Ttricase{\BKTRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIADJAR}{#1}{#2}{#3}\fi}%
+
+% back quadruple of arrows
+\newcommand{\bkquadriar}{\ifinner\tquadricase{\BKQUADRIAR}%
+\else\dmulticase{\BKQUADRIAR}\fi}%
+
+% back quadruple of adjoint arrows
+\newcommand{\bkquadriadjar}{\ifinner\tmulticase{\BKQUADRIADJAR}%
+\else\dmulticase{\BKQUADRIADJAR}\fi}%
+
+% back quintuple of arrows
+\newcommand{\bkquintiar}{\ifinner\tmulticase{\BKQUINTIAR}%
+\else\dmulticase{\BKQUINTIAR}\fi}%
+
+% back quintuple of adjoint arrows
+\newcommand{\bkquintiadjar}{\ifinner\tmulticase{\BKQUINTIADJAR}%
+\else\dmulticase{\BKQUINTIADJAR}\fi}%
+
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
+% and length n units.
+\newcommand{\Hisocase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-8pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \hbicase{P}{n} draws the bi-picture P with length n units.
+\newcommand{\hbicase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
+% and length n units.
+\newcommand{\Hbicase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-10.4pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \htricase{P}{n} draws the tri-picture P with length n units.
+\newcommand{\htricase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#2}{}{}{}{}}}}%
+
+% \Htricase{P}{f}{g}{h}{i}{n} draws the tri-picture P
+% with names f, g, h, i and length n units.
+\newcommand{\Htricase}[6]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#6}{#2}{#3}{#4}{#5}}}}%
+
+% \hmulticase{P}{n} draws the multi-picture P with length n units.
+\newcommand{\hmulticase}[2]%
+{\testdiagrammode\makebox[0pt]{\raisebox{-12pt}[0pt][0pt]{#1{#2}}}}%
+
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \EDIST{n} draws an east distributor of length n units
+\newcommand{\EDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\truex{400}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\end{picture}}%
+
+% \EDOTAR draws a dotted arrow of length n units
+\newcommand{\EDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+
+% \EMONO{n} draws an east monomorphism of length n units
+\newcommand{\EMONO}[1]%
+{\truetail
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)%
+\put(\truemonotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\truemonotail,0){\ehead}%
+\end{picture}}%
+
+
+% \EEPI{n} draws an east epimorphism of length n units
+\newcommand{\EEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIMO{n} draws an east bimorphism of length n units
+\newcommand{\EBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIAR{n} draws an east pair of arrows of length n units
+\newcommand{\EBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\end{picture}}%
+
+% \EBIDIST{n} draws an east pair of distributors of length n units
+\newcommand{\EBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \EEQL{n} draws an east equality of length n units
+\newcommand{\EEQL}[1]%
+{\begin{picture}(#1,0)%
+\truex{200}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(0,0){\line(1,0){#1}}%
+\end{picture}}%
+
+% \EADJAR{n} draws an east pair of adjoint arrows of length n
+% units
+\newcommand{\EADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \EADJDIST{n} draws an east pair of adjoint distributors of length n
+% units
+\newcommand{\EADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \ETRIAR{n}{f}{g}{h}{i} draws an east triple of arrows
+% of length n units with names f, g, h, i
+\newcommand{\ETRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \ETRIADJAR{n}{f}{g}{h}{i} draws an east triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\ETRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \EQUADRIAR{n} draws an east quadruple of arrows
+% of length n units
+\newcommand{\EQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUADRIADJAR{n} draws an east quadruple of adjoint arrows
+% of length n units
+\newcommand{\EQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \EQUINTIAR{n} draws an east quintuple of arrows
+% of length n units
+\newcommand{\EQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUINTIADJAR{n} draws an east quintuple of adjoint arrows
+% of length n units
+\newcommand{\EQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% basic east distributor
+\def\basicedist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDIST}{\Z}}%
+
+% east distributor
+\newcommand{\edist}{\@ifnextchar[{\basicedist}%
+{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%
+
+% basic east distributor with upper name
+\def\basicEdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDIST}{\DUP{#2}}{\Z}}%
+
+% east distributor with upper name
+\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
+{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%
+
+% basic east distributor with lower name
+\def\basicedisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%
+
+% east distributor with lower name
+\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
+{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%
+
+% basic east dotted arrow
+\def\basicedotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDOTAR}{\Z}}%
+
+% east dotted arrow
+\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
+{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with upper name
+\def\basicEdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with upper name
+\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
+{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with lower name
+\def\basicedotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with lower name
+\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
+{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%
+
+% basic east monomorphism
+\def\basicemono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EMONO}{\Z}}%
+
+% east arrow
+\newcommand{\emono}{\@ifnextchar[{\basicemono}%
+{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with upper name
+\def\basicEmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with upper name
+\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
+{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with lower name
+\def\basicemonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with lower name
+\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
+{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%
+
+% basic east epimorphism
+\def\basiceepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEPI}{\Z}}%
+
+% east epimorphism
+\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
+{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with upper name
+\def\basicEepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with upper name
+\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
+{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with lower name
+\def\basiceepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with lower name
+\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
+{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%
+
+% basic east bimorphism
+\def\basicebimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EBIMO}{\Z}}%
+
+% east bimorphism
+\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
+{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with upper name
+\def\basicEbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with upper name
+\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
+{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with lower name
+\def\basicebimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with lower name
+\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
+{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%
+
+% basic east isomorphism
+\def\basiceiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\isosign}{}{\Z}}%
+
+% east isomorphism
+\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
+{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with upper name
+\def\basicEiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{#2}{\isosign}{\Z}}%
+
+% east isomorphism with upper name
+\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
+{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with lower name
+\def\basiceisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\isosign}{#2}{\Z}}%
+
+% east isomorphism with lower name
+\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
+{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%
+
+% basic east equality
+\def\basiceeql[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEQL}{\Z}}%
+
+% east equality
+\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
+{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%
+
+% basic east equality with upper name
+\def\basicEeql[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEQL}{\DUP{#2}}{\Z}}%
+
+% east equality with upper name
+\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
+{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%
+
+% basic east equality with lower name
+\def\basiceeqL[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEQL}{#2}{\Z}}%
+
+% east equality with lower name
+\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
+{\hspace{\SOURCE\unitlength}\basiceeqL[\ARROWLENGTH]}}%
+
+% basic pair of east arrows
+\def\basicebiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIAR}{\Z}}%
+
+% pair of east arrows
+\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
+{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%
+
+% basic pair of east arrows with names
+\def\basicEbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
+
+% pair of east arrows with names
+\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
+{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
+\let\ebiaR=\Ebiar
+
+% basic pair of east distributors
+\def\basicebidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIDIST}{\Z}}%
+
+% pair of east distributors
+\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
+{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%
+
+% basic pair of east distributors with names
+\def\basicEbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east distributors with names
+\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
+{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
+\let\ebidisT=\Ebidist
+
+% basic pair of east adjoint arrows
+\def\basiceadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJAR}{\Z}}%
+
+% pair of east adjoint arrows
+\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
+{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint arrows with names
+\def\basicEadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
+
+% pair of east adjoint arrows with names
+\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
+{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
+\let\eadjaR=\Eadjar
+
+% basic pair of east adjoint distributors
+\def\basiceadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJDIST}{\Z}}%
+
+% pair of east adjoint distributors
+\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
+{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint distributors with names
+\def\basicEadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east adjoint distributors with names
+\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
+{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
+\let\eadjdisT=\Eadjdist
+
+% basic east triple of arrows
+\def\basicetriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIAR}{\Z}}%
+
+% east triple of arrows
+\newcommand{\etriar}{\@ifnextchar[{\basicetriar}%
+{\hspace{\SOURCE\unitlength}\basicetriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with upper names
+\def\basicEtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of arrows with upper names
+\newcommand{\Etriar}{\@ifnextchar[{\basicEtriar}%
+{\hspace{\SOURCE\unitlength}\basicEtriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with lower names
+\def\basicetriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of arrows with lower name
+\newcommand{\etriaR}{\@ifnextchar[{\basicetriaR}%
+{\hspace{\SOURCE\unitlength}\basicetriaR[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows
+\def\basicetriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIADJAR}{\Z}}%
+
+% east triple of adjoint arrows
+\newcommand{\etriadjar}{\@ifnextchar[{\basicetriadjar}%
+{\hspace{\SOURCE\unitlength}\basicetriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with upper names
+\def\basicEtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of adjoint arrows with upper names
+\newcommand{\Etriadjar}{\@ifnextchar[{\basicEtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicEtriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with lower names
+\def\basicetriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of adjoint arrows with lower name
+\newcommand{\etriadjaR}{\@ifnextchar[{\basicetriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicetriadjaR[\ARROWLENGTH]}}%
+
+% basic east quadruple of arrows
+\def\basicequadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIAR}{\Z}}%
+
+% east quadruple of arrows
+\newcommand{\equadriar}{\@ifnextchar[{\basicequadriar}%
+{\hspace{\SOURCE\unitlength}\basicequadriar[\ARROWLENGTH]}}%
+
+% basic east quadruple of adjoint arrows
+\def\basicequadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIADJAR}{\Z}}%
+
+% east quadruple of adjoint arrows
+\newcommand{\equadriadjar}{\@ifnextchar[{\basicequadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicequadriadjar[\ARROWLENGTH]}}%
+
+% basic east quintuple of arrows
+\def\basicequintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIAR}{\Z}}%
+
+% east quintuple of arrows
+\newcommand{\equintiar}{\@ifnextchar[{\basicequintiar}%
+{\hspace{\SOURCE\unitlength}\basicequintiar[\ARROWLENGTH]}}%
+
+% basic east quintuple of adjoint arrows
+\def\basicequintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIADJAR}{\Z}}%
+
+% east quintuple of adjoint arrows
+\newcommand{\equintiadjar}{\@ifnextchar[{\basicequintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicequintiadjar[\ARROWLENGTH]}}%
+
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WDIST{n} draws a pointing back distributor of length n units
+\newcommand{\WDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \WDOTAR draws a dotted arrow of length n units
+\newcommand{\WDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\WMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\truemonotail,0){\line(-1,0){\monolength}}%
+\put(-\truemonotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+
+% \WEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\WEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\WBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\WBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \WBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\WBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \WADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\WADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\WADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \WTRIAR{n}{f}{g}{h}{i} draws a west triple of arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WTRIADJAR{n}{f}{g}{h}{i} draws a west triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WQUADRIAR{n} draws a west quadruple of arrows
+% of length n units
+\newcommand{\WQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUADRIADJAR{n} draws a west quadruple of adjoint arrows
+% of length n units
+\newcommand{\WQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \WQUINTIAR{n} draws a west quintuple of arrows
+% of length n units
+\newcommand{\WQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUINTIADJAR{n} draws a west quintuple of adjoint arrows
+% of length n units
+\newcommand{\WQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% basic west distributor
+\def\basicwdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDIST}{\Z}}%
+
+% west distributor
+\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
+{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%
+
+% basic west distributor with upper name
+\def\basicWdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDIST}{\DUP{#2}}{\Z}}%
+
+% west distributor with upper name
+\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
+{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%
+
+% basic west distributor with lower name
+\def\basicwdisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%
+
+% west distributor with lower name
+\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
+{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%
+
+% basic west dotted arrow
+\def\basicwdotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDOTAR}{\Z}}%
+
+% west dotted arrow
+\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
+{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with upper name
+\def\basicWdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with upper name
+\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
+{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with lower name
+\def\basicwdotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with lower name
+\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
+{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%
+
+% basic west monomorphism
+\def\basicwmono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WMONO}{\Z}}%
+
+% west arrow
+\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
+{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with upper name
+\def\basicWmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with upper name
+\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
+{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with lower name
+\def\basicwmonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with lower name
+\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
+{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%
+
+% basic west epimorphism
+\def\basicwepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WEPI}{\Z}}%
+
+% west epimorphism
+\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
+{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with upper name
+\def\basicWepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with upper name
+\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
+{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with lower name
+\def\basicwepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with lower name
+\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
+{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%
+
+% basic west bimorphism
+\def\basicwbimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WBIMO}{\Z}}%
+
+% west bimorphism
+\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
+{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with upper name
+\def\basicWbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with upper name
+\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
+{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with lower name
+\def\basicwbimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with lower name
+\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
+{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%
+
+% basic west isomorphism
+\def\basicwiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\isosign}{}{\Z}}%
+
+% west isomorphism
+\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
+{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with upper name
+\def\basicWiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{#2}{\isosign}{\Z}}%
+
+% west isomorphism with upper name
+\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
+{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with lower name
+\def\basicwisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\isosign}{#2}{\Z}}%
+
+% west isomorphism with lower name
+\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
+{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%
+
+% west equality
+\let\weql=\eeql%
+
+% west equality with upper name
+\let\Weql=\Eeql%
+
+% west equality with lower name
+\let\weqL=\eeqL%
+
+% basic pair of west arrows
+\def\basicwbiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIAR}{\Z}}%
+
+% pair of west arrows
+\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
+{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%
+
+% basic pair of west arrows with names
+\def\basicWbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
+
+% pair of west arrows with names
+\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
+{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
+\let\wbiaR=\Wbiar
+
+% basic pair of west distributors
+\def\basicwbidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIDIST}{\Z}}%
+
+% pair of west distributors
+\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
+{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%
+
+% basic pair of west distributors with names
+\def\basicWbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west distributors with names
+\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
+{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
+\let\wbidisT=\Wbidist
+
+% basic pair of west adjoint arrows
+\def\basicwadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJAR}{\Z}}%
+
+% pair of west adjoint arrows
+\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
+{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint arrows with names
+\def\basicWadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
+
+% pair of west adjoint arrows with names
+\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
+{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
+\let\wadjaR=\Wadjar
+
+% basic pair of west adjoint distributors
+\def\basicwadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJDIST}{\Z}}%
+
+% pair of west adjoint distributors
+\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
+{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint distributors with names
+\def\basicWadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west adjoint distributors with names
+\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
+{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
+\let\wadjdisT=\Wadjdist
+
+% basic west triple of arrows
+\def\basicwtriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIAR}{\Z}}%
+
+% west triple of arrows
+\newcommand{\wtriar}{\@ifnextchar[{\basicwtriar}%
+{\hspace{\SOURCE\unitlength}\basicwtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with upper names
+\def\basicWtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of arrows with upper names
+\newcommand{\Wtriar}{\@ifnextchar[{\basicWtriar}%
+{\hspace{\SOURCE\unitlength}\basicWtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with lower names
+\def\basicwtriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of arrows with lower name
+\newcommand{\wtriaR}{\@ifnextchar[{\basicwtriaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriaR[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows
+\def\basicwtriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIADJAR}{\Z}}%
+
+% west triple of adjoint arrows
+\newcommand{\wtriadjar}{\@ifnextchar[{\basicwtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with upper names
+\def\basicWtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of adjoint arrows with upper names
+\newcommand{\Wtriadjar}{\@ifnextchar[{\basicWtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicWtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with lower names
+\def\basicwtriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of adjoint arrows with lower name
+\newcommand{\wtriadjaR}{\@ifnextchar[{\basicwtriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjaR[\ARROWLENGTH]}}%
+
+% basic west quadruple of arrows
+\def\basicwquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIAR}{\Z}}%
+
+% west quadruple of arrows
+\newcommand{\wquadriar}{\@ifnextchar[{\basicwquadriar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriar[\ARROWLENGTH]}}%
+
+% basic west quadruple of adjoint arrows
+\def\basicwquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIADJAR}{\Z}}%
+
+% west quadruple of adjoint arrows
+\newcommand{\wquadriadjar}{\@ifnextchar[{\basicwquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriadjar[\ARROWLENGTH]}}%
+
+% basic west quintuple of arrows
+\def\basicwquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIAR}{\Z}}%
+
+% west quintuple of arrows
+\newcommand{\wquintiar}{\@ifnextchar[{\basicwquintiar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiar[\ARROWLENGTH]}}%
+
+% basic west quintuple of adjoint arrows
+\def\basicwquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIADJAR}{\Z}}%
+
+% west quintuple of adjoint arrows
+\newcommand{\wquintiadjar}{\@ifnextchar[{\basicwquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiadjar[\ARROWLENGTH]}}%
+
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% \Visocase{P}{f}{g}{n} draws the vertical picture P
+% with names f, g and length n units.
+\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
+
+% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
+\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%
+
+% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
+% with names f, g and length n units.
+\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%
+
+% \vtricase{P}{n} draws the vertical tri-picture P
+% with length n units
+\newcommand{\vtricase}[2]%
+{\testdiagrammode\makebox[0pt]{#1{}{}{}{}{#2}}}%
+
+% \Vtricase{P}{f}{g}{h}{i}{n} draws the vertical tri-picture P
+% with length n units and names f, g, h, i.
+\newcommand{\Vtricase}[6]%
+{\testdiagrammode\makebox[0pt]{#1{#2}{#3}{#4}{#5}{#6}}}%
+
+% \vmulticase{P}{n} draws the vertical multi-picture P
+% with length n units.
+\newcommand{\vmulticase}[2]{\testdiagrammode\makebox[0pt]{#1{#2}}}%
+
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SDIST{n} draws a south distributor of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SDOTAR{n} draws a south dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SMONO{n} draws a south monomorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\monolength}}%
+\put(0,\monolength){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% \SEPI{n} draws a south epimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){\epilength}}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIMO{n} draws a south bimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\epilength}}%
+\put(0,\monolength){\shead}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIAR{n} draws a pair of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIDIST{n} draws a pair of south distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}%
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \SEQL{n} draws a vertical equality of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEQL}[1]%
+{\begin{picture}(0,0)%
+\truex{100}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}%
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \STRIAR{f}{g}{h}{i}{n} draws a triple of south arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \STRIADJAR{f}{g}{h}{i}{n} draws a south triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIAR{n} draws a quadruple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIADJAR{n} draws a south quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIAR{n} draws a quintuple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIADJAR{n} draws a south quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% basic south distributor
+\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%
+
+% south distributor
+\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%
+
+% basic south distributor with left name
+\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%
+
+% south distributor with left name
+\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%
+
+% basic south distributor with right name
+\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%
+
+% south distributor with right name
+\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%
+
+% basic south dotted arrow
+\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%
+
+% south dotted arrow
+\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%
+
+% basic south dotted arrow with left name
+\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with left name
+\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%
+
+% basic south dotted arrow with right name
+\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with right name
+\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%
+
+% basic south monomorphism
+\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%
+
+% south arrow
+\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%
+
+% basic south monomorphism with left name
+\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%
+
+% south monomorphism with left name
+\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%
+
+% basic south monomorphism with right name
+\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%
+
+% south monomorphism with right name
+\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%
+
+% basic south epimorphism
+\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%
+
+% south epimorphism
+\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%
+
+% basic south epimorphism with left name
+\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%
+
+% south epimorphism with left name
+\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%
+
+% basic south epimorphism with right name
+\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%
+
+% south epimorphism with right name
+\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%
+
+% basic south bimorphism
+\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%
+
+% south bimorphism
+\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%
+
+% basic south bimorphism with left name
+\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with left name
+\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%
+
+% basic south bimorphism with right name
+\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with right name
+\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%
+
+% basic south isomorphism
+\def\basicsiso[#1]{\Visocase{\SAR}{\isosign}{}{#100}}%
+
+% south isomorphism
+\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%
+
+% basic south isomorphism with left name
+\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\isosign}{#100}}%
+
+% south isomorphism with left name
+\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%
+
+% basic south isomorphism with right name
+\def\basicsisO[#1]#2{\Visocase{\SAR}{\isosign}{#2}{#100}}%
+
+% south isomorphism with right name
+\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%
+
+% basic south equality
+\def\basicseql[#1]{\vcase{\SEQL}{#100}}%
+
+% south equality
+\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%
+
+% basic south equality with left name
+\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%
+
+% south equality with left name
+\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%
+
+% basic south equality with right name
+\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%
+
+% south equality with right name
+\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[50]}}%
+
+% basic pair of south arrows
+\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%
+
+% pair of south arrows
+\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%
+
+% basic pair of south arrows with names
+\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
+
+% pair of south arrows with names
+\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
+\let\sbiaR=\Sbiar
+
+% basic pair of south distributors
+\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%
+
+% pair of south distributors
+\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%
+
+% basic pair of south distributors with names
+\def\basicSbidist[#1]#2#3%
+{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south distributors with names
+\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
+\let\sbidisT=\Sbidist
+
+% basic pair of south adjoint arrows
+\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%
+
+% pair of south adjoint arrows
+\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%
+
+% basic pair of south adjoint arrows with names
+\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
+
+% pair of south adjoint arrows with names
+\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
+\let\sadjaR=\Sadjar
+
+% basic pair of south adjoint distributors
+\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%
+
+% pair of south adjoint distributors
+\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%
+
+% basic pair of south adjoint distributors with names
+\def\basicSadjdist[#1]#2#3%
+{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south adjoint distributors with names
+\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
+\let\sadjdisT=\Sadjdist
+
+% basic south triple of arrows
+\def\basicstriar[#1]{\vtricase{\STRIAR}{#100}}%
+
+% south triple of arrows
+\newcommand{\striar}{\@ifnextchar[{\basicstriar}{\basicstriar[50]}}%
+
+% basic south triple of arrows with left names
+\def\basicStriar[#1]#2#3#4{\Vtricase{\STRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of arrows with left names
+\newcommand{\Striar}{\@ifnextchar[{\basicStriar}{\basicStriar[50]}}%
+
+% basic south triple of arrows with right names
+\def\basicstriaR[#1]#2#3#4{\Vtricase{\STRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of arrows with right name
+\newcommand{\striaR}{\@ifnextchar[{\basicstriaR}{\basicstriaR[50]}}%
+
+% basic south triple of adjoint arrows
+\def\basicstriadjar[#1]{\vtricase{\STRIADJAR}{#100}}%
+
+% south triple of adjoint arrows
+\newcommand{\striadjar}{\@ifnextchar[{\basicstriadjar}{\basicstriadjar[50]}}%
+
+% basic south triple of adjoint arrows with left names
+\def\basicStriadjar[#1]#2#3#4{\Vtricase{\STRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of adjoint arrows with left names
+\newcommand{\Striadjar}{\@ifnextchar[{\basicStriadjar}{\basicStriadjar[50]}}%
+
+% basic south triple of adjoint arrows with right names
+\def\basicstriadjaR[#1]#2#3#4{\Vtricase{\STRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of adjoint arrows with right name
+\newcommand{\striadjaR}{\@ifnextchar[{\basicstriadjaR}{\basicstriadjaR[50]}}%
+
+% basic south quadruple of arrows
+\def\basicsquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIAR}{\Z}}%
+
+% south quadruple of arrows
+\newcommand{\squadriar}{\@ifnextchar[{\basicsquadriar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriar[\ARROWLENGTH]}}%
+
+% basic south quadruple of adjoint arrows
+\def\basicsquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIADJAR}{\Z}}%
+
+% south quadruple of adjoint arrows
+\newcommand{\squadriadjar}{\@ifnextchar[{\basicsquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriadjar[\ARROWLENGTH]}}%
+
+% basic south quintuple of arrows
+\def\basicsquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIAR}{\Z}}%
+
+% south quintuple of arrows
+\newcommand{\squintiar}{\@ifnextchar[{\basicsquintiar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiar[\ARROWLENGTH]}}%
+
+% basic south quintuple of adjoint arrows
+\def\basicsquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIADJAR}{\Z}}%
+
+% south quintuple of adjoint arrows
+\newcommand{\squintiadjar}{\@ifnextchar[{\basicsquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiadjar[\ARROWLENGTH]}}%
+
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NDIST{n} draws a north distributor of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NDOTAR{n} draws a north dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% \NMONO{n} draws a north monomorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NEPI{n} draws a north epimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){\epilength}}%
+\put(0,#1){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIMO{n} draws a north bimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIMO}[1]%
+{\truehead\truetail%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\monolength=\epilength%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIAR{n} draws a pair of north arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIDIST{n} draws a pair of north distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \NTRIAR{f}{g}{h}{i}{n} draws a triple of north arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NTRIADJAR{f}{g}{h}{i}{n} draws a north triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIAR{n} draws a quadruple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIADJAR{n} draws a north quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIAR{n} draws a quintuple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIADJAR{n} draws a north quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% basic north distributor
+\def\basicndist[#1]{\vcase{\NDIST}{#100}}%
+
+% north distributor
+\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%
+
+% basic north distributor with left name
+\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%
+
+% north distributor with left name
+\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%
+
+% basic north distributor with right name
+\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%
+
+% north distributor with right name
+\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%
+
+% basic north dotted arrow
+\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%
+
+% north dotted arrow
+\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%
+
+% basic north dotted arrow with left name
+\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with left name
+\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%
+
+% basic north dotted arrow with right name
+\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with right name
+\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%
+
+% basic north monomorphism
+\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%
+
+% north arrow
+\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
+{\basicnmono[50]}}%
+
+% basic north monomorphism with left name
+\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%
+
+% north monomorphism with left name
+\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%
+
+% basic north monomorphism with right name
+\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%
+
+% north monomorphism with right name
+\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%
+
+% basic north epimorphism
+\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%
+
+% north epimorphism
+\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%
+
+% basic north epimorphism with left name
+\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%
+
+% north epimorphism with left name
+\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%
+
+% basic north epimorphism with right name
+\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%
+
+% north epimorphism with right name
+\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%
+
+% basic north bimorphism
+\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%
+
+% north bimorphism
+\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%
+
+% basic north bimorphism with left name
+\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with left name
+\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%
+
+% basic north bimorphism with right name
+\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with right name
+\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%
+
+% basic north isomorphism
+\def\basicniso[#1]{\Visocase{\NAR}{\isosign}{}{#100}}%
+
+% north isomorphism
+\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%
+
+% basic north isomorphism with left name
+\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\isosign}{#100}}%
+
+% north isomorphism with left name
+\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%
+
+% basic north isomorphism with right name
+\def\basicnisO[#1]#2{\Visocase{\NAR}{\isosign}{#2}{#100}}%
+
+% north isomorphism with right name
+\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%
+
+% north equality
+\let\neql=\seql%
+
+% north equality with left name
+\let\Neql=\Seql%
+
+% north equality with right name
+\let\neqL=\seqL%
+
+% basic pair of north arrows
+\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%
+
+% pair of north arrows
+\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%
+
+% basic pair of north arrows with names
+\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
+
+% pair of north arrows with names
+\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
+\let\nbiaR=\Nbiar
+
+% basic pair of north distributors
+\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%
+
+% pair of north distributors
+\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%
+
+% basic pair of north distributors with names
+\def\basicNbidist[#1]#2#3%
+{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north distributors with names
+\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
+\let\nbidisT=\Nbidist
+
+% basic pair of north adjoint arrows
+\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%
+
+% pair of north adjoint arrows
+\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%
+
+% basic pair of north adjoint arrows with names
+\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
+
+% pair of north adjoint arrows with names
+\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
+\let\nadjaR=\Nadjar
+
+% basic pair of north adjoint distributors
+\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%
+
+% pair of north adjoint distributors
+\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%
+
+% basic pair of north adjoint distributors with names
+\def\basicNadjdist[#1]#2#3%
+{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north adjoint distributors with names
+\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
+\let\nadjdisT=\Nadjdist
+
+% basic north triple of arrows
+\def\basicntriar[#1]{\vtricase{\NTRIAR}{#100}}%
+
+% north triple of arrows
+\newcommand{\ntriar}{\@ifnextchar[{\basicntriar}{\basicntriar[50]}}%
+
+% basic north triple of arrows with left names
+\def\basicNtriar[#1]#2#3#4{\Vtricase{\NTRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of arrows with left names
+\newcommand{\Ntriar}{\@ifnextchar[{\basicNtriar}{\basicNtriar[50]}}%
+
+% basic north triple of arrows with right names
+\def\basicntriaR[#1]#2#3#4{\Vtricase{\NTRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of arrows with right name
+\newcommand{\ntriaR}{\@ifnextchar[{\basicntriaR}{\basicntriaR[50]}}%
+
+% basic north triple of adjoint arrows
+\def\basicntriadjar[#1]{\vtricase{\NTRIADJAR}{#100}}%
+
+% north triple of adjoint arrows
+\newcommand{\ntriadjar}{\@ifnextchar[{\basicntriadjar}{\basicntriadjar[50]}}%
+
+% basic north triple of adjoint arrows with left names
+\def\basicNtriadjar[#1]#2#3#4{\Vtricase{\NTRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of adjoint arrows with left names
+\newcommand{\Ntriadjar}{\@ifnextchar[{\basicNtriadjar}{\basicNtriadjar[50]}}%
+
+% basic north triple of adjoint arrows with right names
+\def\basicntriadjaR[#1]#2#3#4{\Vtricase{\NTRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of adjoint arrows with right name
+\newcommand{\ntriadjaR}{\@ifnextchar[{\basicntriadjaR}{\basicntriadjaR[50]}}%
+
+% basic north quadruple of arrows
+\def\basicnquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIAR}{\Z}}%
+
+% north quadruple of arrows
+\newcommand{\nquadriar}{\@ifnextchar[{\basicnquadriar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriar[\ARROWLENGTH]}}%
+
+% basic north quadruple of adjoint arrows
+\def\basicnquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIADJAR}{\Z}}%
+
+% north quadruple of adjoint arrows
+\newcommand{\nquadriadjar}{\@ifnextchar[{\basicnquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriadjar[\ARROWLENGTH]}}%
+
+% basic north quintuple of arrows
+\def\basicnquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIAR}{\Z}}%
+
+% north quintuple of arrows
+\newcommand{\nquintiar}{\@ifnextchar[{\basicnquintiar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiar[\ARROWLENGTH]}}%
+
+% basic north quintuple of adjoint arrows
+\def\basicnquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIADJAR}{\Z}}%
+
+% north quintuple of adjoint arrows
+\newcommand{\nquintiadjar}{\@ifnextchar[{\basicnquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiadjar[\ARROWLENGTH]}}%
+
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{900}\truey{150}%
+\put(-\value{x},\value{y}){${#2}$}%
+\truex{300}\truey{1050}%
+\put(\value{x},-\value{y}){${#3}$}%
+\end{picture}}%
+
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEDIST{n} draws a north-east distributor of length n units
+\newcommand{\NEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NEDOTAR{n} draws a north-east dotted arrow of length n units
+\newcommand{\NEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEMONO{n} draws a north-east monomorphism of length n units
+\newcommand{\NEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEEPI{n} draws a north-east epimorphism of length n units
+\newcommand{\NEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){\bimolength}}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIMO{n} draws a north-east bimorphism of length n units
+\newcommand{\NEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIAR{n} draws a pair of north-east arrows of length n units
+\newcommand{\NEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,\epilength){\nehead}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \NEBIDIST{n} draws a pair of north-east distributors of length n units
+\newcommand{\NEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+% \NEEQL{n} draws a north-east equality of length n units
+\newcommand{\NEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
+\newcommand{\NEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
+\newcommand{\NEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% north-east distributor of length nx100 units
+\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%
+
+% north-east distributor
+\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%
+
+% north-east distributor with upper name [1] and length nx100 units
+\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%
+
+% north-east distributor with upper name
+\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%
+
+% north-east distributor with lower name [1] and length nx100 units
+\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%
+
+% north-east distributor with lower name [1]
+\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%
+
+% north-east dotted arrow of length nx100 units
+\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%
+
+% north-east dotted arrow
+\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%
+
+% north-east dotted arrow with upper name [1] and length nx100 units
+\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%
+
+% north-east dotted arrow with upper name
+\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%
+
+% north-east dotted arrow with lower name [1] and length nx100 units
+\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%
+
+% north-east dotted arrow with lower name [1]
+\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%
+
+% north-east monomorphism of length nx100 units
+\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%
+
+% north-east monomorphism
+\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%
+
+% north-east monomorphism with upper name [1] and length nx100 units
+\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%
+
+% north-east monomophism with upper name
+\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%
+
+% north-east monomorphism with lower name [1] and length nx100 units
+\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%
+
+% north-east monomorphism with lower name [1]
+\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%
+
+% north-east epimorphism of length nx100 units
+\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%
+
+% north-east epimorphism
+\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%
+
+% north-east epimorphism with upper name [1] and length nx100 units
+\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%
+
+% north-east epimorphism with upper name
+\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%
+
+% north-east epimorphism with lower name [1] and length nx100 units
+\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%
+
+% north-east epimorphism with lower name [1]
+\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%
+
+% north-east bimorphism of length nx100 units
+\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%
+
+% north-east bimorphism
+\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%
+
+% north-east bimorphism with upper name [1] and length nx100 units
+\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%
+
+% north-east bimorphism with upper name
+\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%
+
+% north-east bimorphism with lower name [1] and length nx100 units
+\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%
+
+% north-east bimorphism with lower name [1]
+\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%
+
+% north-east isomorphism of length nx100 units
+\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% north-east isomorphism
+\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%
+
+% north-east isomorphism with upper name [1] and length nx100 units
+\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\isosign}{#100}}%
+
+% north-east isomorphism with upper name
+\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%
+
+% north-east isomorphism with lower name [1] and length nx100 units
+\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% north-east isomorphism with lower name [1]
+\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%
+
+% north-east equality of length nx100 units
+\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%
+
+% north-east equality
+\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%
+
+% north-east equality with upper name [1] and length nx100 units
+\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%
+
+% north-east equality with upper name
+\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%
+
+% north-east equality with lower name [1] and length nx100 units
+\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%
+
+% north-east equality with lower name [1]
+\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[59]}}%
+
+% pair of north-east arrows of length nx100 units
+\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%
+
+% pair of north-east arrows
+\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%
+
+% pair of north-east arrows with names [1][2] and length nx100 units
+\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%
+
+% pair of north-east arrows with names
+\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
+\let\nebiaR=\Nebiar
+
+% pair of north-east adjoint arrows of length nx100 units
+\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%
+
+% pair of north-east adjoint arrows
+\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%
+
+% pair of north-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint arrows with names
+\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
+\let\neadjaR=\Neadjar
+
+% pair of north-east distributors of length nx100 units
+\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%
+
+% pair of north-east distributors
+\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%
+
+% pair of north-east distributors with names [1][2] and length nx100 units
+\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-east distributors with names
+\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
+\let\nebidisT=\Nebidist
+
+% pair of north-east adjoint distributors of length nx100 units
+\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%
+
+% pair of north-east adjoint distributors
+\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%
+
+% pair of north-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint distributors with names
+\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
+\let\neadjdisT=\Neadjdist
+
+
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWDIST{n} draws a south-west distributor of length n units
+\newcommand{\SWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SWDOTAR{n} draws a south-west dotted arrow of length n units
+\newcommand{\SWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWMONO{n} draws a south-west monomorphism of length n units
+\newcommand{\SWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWEPI{n} draws a south-west epimorphism of length n units
+\newcommand{\SWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){\bimolength}}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIMO{n} draws a south-west bimorphism of length n units
+\newcommand{\SWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIAR{n} draws a pair of south-west arrows of length n units
+\newcommand{\SWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,-\epilength){\swhead}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \SWBIDIST{n} draws a pair of south-west distributors of length n units
+\newcommand{\SWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\value{x},-\value{x}){\distsign}%
+\put(-\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
+\newcommand{\SWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
+\newcommand{\SWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% south-west distributor of length nx100 units
+\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%
+
+% south-west distributor
+\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%
+
+% south-west distributor with upper name [1] and length nx100 units
+\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%
+
+% south-west distributor with upper name
+\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%
+
+% south-west distributor with lower name [1] and length nx100 units
+\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%
+
+% south-west distributor with lower name [1]
+\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%
+
+% south-west dotted arrow of length nx100 units
+\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%
+
+% south-west dotted arrow
+\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%
+
+% south-west dotted arrow with upper name [1] and length nx100 units
+\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%
+
+% south-west dotted arrow with upper name
+\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%
+
+% south-west dotted arrow with lower name [1] and length nx100 units
+\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%
+
+% south-west dotted arrow with lower name [1]
+\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%
+
+% south-west monomorphism of length nx100 units
+\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%
+
+% south-west monomorphism
+\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%
+
+% south-west monomorphism with upper name [1] and length nx100 units
+\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%
+
+% south-west monomophism with upper name
+\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%
+
+% south-west monomorphism with lower name [1] and length nx100 units
+\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%
+
+% south-west monomorphism with lower name [1]
+\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%
+
+% south-west epimorphism of length nx100 units
+\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%
+
+% south-west epimorphism
+\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%
+
+% south-west epimorphism with upper name [1] and length nx100 units
+\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%
+
+% south-west epimorphism with upper name
+\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%
+
+% south-west epimorphism with lower name [1] and length nx100 units
+\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%
+
+% south-west epimorphism with lower name [1]
+\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%
+
+% south-west bimorphism of length nx100 units
+\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%
+
+% south-west bimorphism
+\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%
+
+% south-west bimorphism with upper name [1] and length nx100 units
+\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%
+
+% south-west bimorphism with upper name
+\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%
+
+% south-west bimorphism with lower name [1] and length nx100 units
+\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%
+
+% south-west bimorphism with lower name [1]
+\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%
+
+% south-west isomorphism of length nx100 units
+\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% south-west isomorphism
+\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%
+
+% south-west isomorphism with upper name [1] and length nx100 units
+\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\isosign}{#100}}%
+
+% south-west isomorphism with upper name
+\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%
+
+% south-west isomorphism with lower name [1] and length nx100 units
+\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% south-west isomorphism with lower name [1]
+\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%
+
+% south-west equality
+\let\sweql\neeql%
+
+% south-west equality with upper name [1]
+\let\Sweql=\Neeql%
+
+% south-west equality with lower name [1]
+\let\sweqL=\neeqL%
+
+% pair of south-west arrows of length nx100 units
+\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%
+
+% pair of south-west arrows
+\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%
+
+% pair of south-west arrows with names [1][2] and length nx100 units
+\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%
+
+% pair of south-west arrows with names
+\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
+\let\swbiaR=\Swbiar
+
+% pair of south-west adjoint arrows of length nx100 units
+\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%
+
+% pair of south-west adjoint arrows
+\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%
+
+% pair of south-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint arrows with names
+\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
+\let\swadjaR=\Swadjar
+
+% pair of south-west distributors of length nx100 units
+\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%
+
+% pair of south-west distributors
+\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%
+
+% pair of south-west distributors with names [1][2] and length nx100 units
+\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-west distributors with names
+\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
+\let\swbidisT=\Swbidist
+
+% pair of south-west adjoint distributors of length nx100 units
+\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%
+
+% pair of south-west adjoint distributors
+\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%
+
+% pair of south-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint distributors with names
+\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
+\let\swadjdisT=\Swadjdist
+
+
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{350}\truey{600}\truez{950}%
+\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
+\truex{450}\truey{600}\truez{1050}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
+\end{picture}}%
+
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEDIST{n} draws a south-east distributor of length n units
+\newcommand{\SEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SEDOTAR{n} draws a south-east dotted arrow of length n units
+\newcommand{\SEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEMONO{n} draws a south-east monomorphism of length n units
+\newcommand{\SEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEEPI{n} draws a south-east epimorphism of length n units
+\newcommand{\SEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){\bimolength}}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIMO{n} draws a south-east bimorphism of length n units
+\newcommand{\SEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIAR{n} draws a pair of south-east arrows of length n units
+\newcommand{\SEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,-\epilength){\sehead}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \SEBIDIST{n} draws a pair of south-east distributors of length n units
+\newcommand{\SEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \SEEQL{n} draws a south-east equality of length n units
+\newcommand{\SEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
+\newcommand{\SEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
+\newcommand{\SEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% south-east distributor of length nx100 units
+\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%
+
+% south-east distributor
+\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%
+
+% south-east distributor with upper name [1] and length nx100 units
+\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%
+
+% south-east distributor with upper name
+\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%
+
+% south-east distributor with lower name [1] and length nx100 units
+\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%
+
+% south-east distributor with lower name [1]
+\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%
+
+% south-east dotted arrow of length nx100 units
+\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%
+
+% south-east dotted arrow
+\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%
+
+% south-east dotted arrow with upper name [1] and length nx100 units
+\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%
+
+% south-east dotted arrow with upper name
+\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%
+
+% south-east dotted arrow with lower name [1] and length nx100 units
+\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%
+
+% south-east dotted arrow with lower name [1]
+\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%
+
+% south-east monomorphism of length nx100 units
+\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%
+
+% south-east monomorphism
+\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%
+
+% south-east monomorphism with upper name [1] and length nx100 units
+\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%
+
+% south-east monomophism with upper name
+\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%
+
+% south-east monomorphism with lower name [1] and length nx100 units
+\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%
+
+% south-east monomorphism with lower name [1]
+\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%
+
+% south-east epimorphism of length nx100 units
+\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%
+
+% south-east epimorphism
+\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%
+
+% south-east epimorphism with upper name [1] and length nx100 units
+\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%
+
+% south-east epimorphism with upper name
+\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%
+
+% south-east epimorphism with lower name [1] and length nx100 units
+\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%
+
+% south-east epimorphism with lower name [1]
+\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%
+
+% south-east bimorphism of length nx100 units
+\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%
+
+% south-east bimorphism
+\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%
+
+% south-east bimorphism with upper name [1] and length nx100 units
+\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%
+
+% south-east bimorphism with upper name
+\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%
+
+% south-east bimorphism with lower name [1] and length nx100 units
+\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%
+
+% south-east bimorphism with lower name [1]
+\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%
+
+% south-east isomorphism of length nx100 units
+\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% south-east isomorphism
+\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%
+
+% south-east isomorphism with upper name [1] and length nx100 units
+\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\isosign}{#100}}%
+
+% south-east isomorphism with upper name
+\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%
+
+% south-east isomorphism with lower name [1] and length nx100 units
+\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% south-east isomorphism with lower name [1]
+\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%
+
+% south-east equality of length nx100 units
+\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%
+
+% south-east equality
+\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%
+
+% south-east equality with upper name [1] and length nx100 units
+\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%
+
+% south-east equality with upper name
+\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%
+
+% south-east equality with lower name [1] and length nx100 units
+\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%
+
+% south-east equality with lower name [1]
+\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[59]}}%
+
+% pair of south-east arrows of length nx100 units
+\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%
+
+% pair of south-east arrows
+\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%
+
+% pair of south-east arrows with names [1][2] and length nx100 units
+\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%
+
+% pair of south-east arrows with names
+\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
+\let\sebiaR=\Sebiar
+
+% pair of south-east adjoint arrows of length nx100 units
+\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%
+
+% pair of south-east adjoint arrows
+\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%
+
+% pair of south-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint arrows with names
+\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
+\let\seadjaR=\Seadjar
+
+% pair of south-east distributors of length nx100 units
+\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%
+
+% pair of south-east distributors
+\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%
+
+% pair of south-east distributors with names [1][2] and length nx100 units
+\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-east distributors with names
+\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
+\let\sebidisT=\Sebidist
+
+% pair of south-east adjoint distributors of length nx100 units
+\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%
+
+% pair of south-east adjoint distributors
+\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%
+
+% pair of south-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint distributors with names
+\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
+\let\seadjdisT=\Seadjdist
+
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWDIST{n} draws a north-west distributor of length n units
+\newcommand{\NWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NWDOTAR{n} draws a north-west dotted arrow of length n units
+\newcommand{\NWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWMONO{n} draws a north-west monomorphism of length n units
+\newcommand{\NWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWEPI{n} draws a north-west epimorphism of length n units
+\newcommand{\NWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){\bimolength}}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIMO{n} draws a north-west bimorphism of length n units
+\newcommand{\NWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIAR{n} draws a pair of north-west arrows of length n units
+\newcommand{\NWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,\epilength){\nwhead}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \NWBIDIST{n} draws a pair of north-west distributors of length n units
+\newcommand{\NWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
+\newcommand{\NWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
+\newcommand{\NWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% north-west distributor of length nx100 units
+\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%
+
+% north-west distributor
+\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%
+
+% north-west distributor with upper name [1] and length nx100 units
+\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%
+
+% north-west distributor with upper name
+\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%
+
+% north-west distributor with lower name [1] and length nx100 units
+\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%
+
+% north-west distributor with lower name [1]
+\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%
+
+% north-west dotted arrow of length nx100 units
+\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%
+
+% north-west dotted arrow
+\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%
+
+% north-west dotted arrow with upper name [1] and length nx100 units
+\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%
+
+% north-west dotted arrow with upper name
+\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%
+
+% north-west dotted arrow with lower name [1] and length nx100 units
+\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%
+
+% north-west dotted arrow with lower name [1]
+\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%
+
+% north-west monomorphism of length nx100 units
+\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%
+
+% north-west monomorphism
+\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%
+
+% north-west monomorphism with upper name [1] and length nx100 units
+\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%
+
+% north-west monomophism with upper name
+\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%
+
+% north-west monomorphism with lower name [1] and length nx100 units
+\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%
+
+% north-west monomorphism with lower name [1]
+\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%
+
+% north-west epimorphism of length nx100 units
+\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%
+
+% north-west epimorphism
+\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%
+
+% north-west epimorphism with upper name [1] and length nx100 units
+\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%
+
+% north-west epimorphism with upper name
+\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%
+
+% north-west epimorphism with lower name [1] and length nx100 units
+\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%
+
+% north-west epimorphism with lower name [1]
+\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%
+
+% north-west bimorphism of length nx100 units
+\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%
+
+% north-west bimorphism
+\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%
+
+% north-west bimorphism with upper name [1] and length nx100 units
+\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%
+
+% north-west bimorphism with upper name
+\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%
+
+% north-west bimorphism with lower name [1] and length nx100 units
+\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%
+
+% north-west bimorphism with lower name [1]
+\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%
+
+% north-west isomorphism of length nx100 units
+\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% north-west isomorphism
+\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%
+
+% north-west isomorphism with upper name [1] and length nx100 units
+\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\isosign}{#100}}%
+
+% north-west isomorphism with upper name
+\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%
+
+% north-west isomorphism with lower name [1] and length nx100 units
+\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% north-west isomorphism with lower name [1]
+\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%
+
+% north-west equality
+\let\nweql=\seeql%
+
+% north-west equality with upper name
+\let\Nweql=\Seeql%
+
+% north-west equality with lower name [1]
+\let\nweqL=\seeqL%
+
+% pair of north-west arrows of length nx100 units
+\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%
+
+% pair of north-west arrows
+\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%
+
+% pair of north-west arrows with names [1][2] and length nx100 units
+\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%
+
+% pair of north-west arrows with names
+\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
+\let\nwbiaR=\Nwbiar
+
+% pair of north-west adjoint arrows of length nx100 units
+\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%
+
+% pair of north-west adjoint arrows
+\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%
+
+% pair of north-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint arrows with names
+\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
+\let\nwadjaR=\Nwadjar
+
+% pair of north-west distributors of length nx100 units
+\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%
+
+% pair of north-west distributors
+\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%
+
+% pair of north-west distributors with names [1][2] and length nx100 units
+\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-west distributors with names
+\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
+\let\nwbidisT=\Nwbidist
+
+% pair of north-west adjoint distributors of length nx100 units
+\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%
+
+% pair of north-west adjoint distributors
+\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%
+
+% pair of north-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint distributors with names
+\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
+\let\nwadjdisT=\Nwadjdist
+
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDIST{f}{g}{n} draws a east-north-east distributor
+% with names f, g and length n units
+\newcommand{\ENEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\ENEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\ENEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){\bimolength}}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\ENEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEQL{f}{g}{n} draws a east-north-east equality
+% with names f,g and length n units
+\newcommand{\ENEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
+% with names f,g and length n units
+\newcommand{\ENEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
+% with names f,g and length n units
+\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ENEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+% basic east-north-east distributor
+\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%
+
+% east-north-east distributor
+\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%
+
+% basic east-north-east distributor with upper name
+\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%
+
+% east-north-east distributor with upper name
+\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%
+
+% basic east-north-east distributor with lower name
+\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%
+
+% east-north-east distributor with lower name
+\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%
+
+% basic east-north-east dotted arrow
+\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%
+
+% east-north-east dotted arrow
+\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%
+
+% basic east-north-east dotted arrow with upper name
+\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%
+
+% east-north-east dotted arrow with upper name
+\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%
+
+% basic east-north-east dotted arrow with lower name
+\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%
+
+% east-north-east dotted arrow with lower name
+\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%
+
+% basic east-north-east monomorphism
+\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%
+
+% east-north-east monomorphism
+\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%
+
+% basic east-north-east monomorphism with upper name
+\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%
+
+% east-north-east monomorphism with upper name
+\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%
+
+% basic east-north-east monomorphism with lower name
+\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%
+
+% east-north-east monomorphism with lower name
+\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%
+
+% basic east-north-east epimorphism
+\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%
+
+% east-north-east epimorphism
+\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%
+
+% basic east-north-east epimorphism with upper name
+\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%
+
+% east-north-east epimorphism with upper name
+\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%
+
+% basic east-north-east epimorphism with lower name
+\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%
+
+% east-north-east epimorphism with lower name
+\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%
+
+% basic east-north-east bimorphism
+\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%
+
+% east-north-east bimorphism
+\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%
+
+% basic east-north-east bimorphism with upper name
+\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%
+
+% east-north-east bimorphism with upper name
+\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%
+
+% basic east-north-east bimorphism with lower name
+\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%
+
+% east-north-east bimorphism with lower name
+\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%
+
+% basic east-north-east isomorphism
+\def\basiceneiso[#1]{\ENEAR{\isosign}{}{#100}}%
+
+% east-north-east isomorphism
+\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%
+
+% basic east-north-east isomorphism with upper name
+\def\basicEneiso[#1]#2{\ENEAR{#2}{\isosign}{#100}}%
+
+% east-north-east isomorphism with upper name
+\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%
+
+% basic east-north-east isomorphism with lower name
+\def\basiceneisO[#1]#2{\ENEAR{\isosign}{#2}{#100}}%
+
+% east-north-east isomorphism with lower name
+\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%
+
+% basic east-north-east equality
+\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%
+
+% east-north-east equality
+\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%
+
+% basic east-north-east equality with upper name
+\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%
+
+% east-north-east equality with upper name
+\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%
+
+% basic east-north-east equality with lower name
+\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%
+
+% east-north-east equality with lower name
+\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[133]}}%
+
+% basic east-north-east pair of arrows
+\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%
+
+% east-north-east pair of arrows
+\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%
+
+% basic east-north-east pair of arrows with names
+\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%
+
+% east-north-east pair of arrows with names
+\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
+\let\enebiaR=\Enebiar
+
+% basic east-north-east pair of distributors
+\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%
+
+% east-north-east pair of distributors
+\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%
+
+% basic east-north-east pair of distributors with names
+\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of distributors with names
+\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
+\let\enebidisT=\Enebidist
+
+% basic east-north-east pair of adjoint arrows
+\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%
+
+% east-north-east pair of adjoint arrows
+\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%
+
+% basic east-north-east pair of adjoint arrows with names
+\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint arrows with names
+\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
+\let\eneadjaR=\Eneadjar
+
+% basic east-north-east pair of adjoint distributors
+\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%
+
+% east-north-east pair of adjoint distributors
+\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%
+
+% basic east-north-east pair of adjoint distributors with names
+\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint distributors with names
+\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
+\let\eneadjdisT=\Eneadjdist
+
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDIST{f}{g}{n} draws a east-south-east distributor
+% with names f, g and length n units
+\newcommand{\ESEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\ESEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\ESEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){\bimolength}}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\ESEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEQL{f}{g}{n} draws a east-south-east equality
+% with names f,g and length n units
+\newcommand{\ESEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
+% with names f,g and length n units
+\newcommand{\ESEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
+% with names f,g and length n units
+\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ESEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% basic east-south-east distributor
+\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%
+
+% east-south-east distributor
+\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%
+
+% basic east-south-east distributor with upper name
+\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%
+
+% east-south-east distributor with upper name
+\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%
+
+% basic east-south-east distributor with lower name
+\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%
+
+% east-south-east distributor with lower name
+\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%
+
+% basic east-south-east dotted arrow
+\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%
+
+% east-south-east dotted arrow
+\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%
+
+% basic east-south-east dotted arrow with upper name
+\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%
+
+% east-south-east dotted arrow with upper name
+\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%
+
+% basic east-south-east dotted arrow with lower name
+\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%
+
+% east-south-east dotted arrow with lower name
+\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%
+
+% basic east-south-east monomorphism
+\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%
+
+% east-south-east monomorphism
+\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%
+
+% basic east-south-east monomorphism with upper name
+\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%
+
+% east-south-east monomorphism with upper name
+\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%
+
+% basic east-south-east monomorphism with lower name
+\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%
+
+% east-south-east monomorphism with lower name
+\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%
+
+% basic east-south-east epimorphism
+\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%
+
+% east-south-east epimorphism
+\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%
+
+% basic east-south-east epimorphism with upper name
+\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%
+
+% east-south-east epimorphism with upper name
+\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%
+
+% basic east-south-east epimorphism with lower name
+\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%
+
+% east-south-east epimorphism with lower name
+\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%
+
+% basic east-south-east bimorphism
+\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%
+
+% east-south-east bimorphism
+\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%
+
+% basic east-south-east bimorphism with upper name
+\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%
+
+% east-south-east bimorphism with upper name
+\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%
+
+% basic east-south-east bimorphism with lower name
+\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%
+
+% east-south-east bimorphism with lower name
+\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%
+
+% basic east-south-east isomorphism
+\def\basiceseiso[#1]{\ESEAR{\isosign}{}{#100}}%
+
+% east-south-east isomorphism
+\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%
+
+% basic east-south-east isomorphism with upper name
+\def\basicEseiso[#1]#2{\ESEAR{#2}{\isosign}{#100}}%
+
+% east-south-east isomorphism with upper name
+\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%
+
+% basic east-south-east isomorphism with lower name
+\def\basiceseisO[#1]#2{\ESEAR{\isosign}{#2}{#100}}%
+
+% east-south-east isomorphism with lower name
+\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%
+
+% basic east-south-east equality
+\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%
+
+% east-south-east equality
+\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%
+
+% basic east-south-east equality with upper name
+\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%
+
+% east-south-east equality with upper name
+\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%
+
+% basic east-south-east equality with lower name
+\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%
+
+% east-south-east equality with lower name
+\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[133]}}%
+
+% basic east-south-east pair of arrows
+\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%
+
+% east-south-east pair of arrows
+\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%
+
+% basic east-south-east pair of arrows with names
+\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%
+
+% east-south-east pair of arrows with names
+\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
+\let\esebiaR=\Esebiar
+
+% basic east-south-east pair of distributors
+\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%
+
+% east-south-east pair of distributors
+\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%
+
+% basic east-south-east pair of distributors with names
+\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of distributors with names
+\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
+\let\esebidisT=\Esebidist
+
+% basic east-south-east pair of adjoint arrows
+\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%
+
+% east-south-east pair of adjoint arrows
+\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%
+
+% basic east-south-east pair of adjoint arrows with names
+\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint arrows with names
+\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
+\let\eseadjaR=\Eseadjar
+
+% basic east-south-east pair of adjoint distributors
+\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%
+
+% east-south-east pair of adjoint distributors
+\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%
+
+% basic east-south-east pair of adjoint distributors with names
+\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint distributors with names
+\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
+\let\eseadjdisT=\Eseadjdist
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDIST{f}{g}{n} draws a west-south-west distributor
+% with names f, g and length n units
+\newcommand{\WSWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\WSWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\WSWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){\bimolength}}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\WSWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
+% with names f,g and length n units
+\newcommand{\WSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
+% with names f,g and length n units
+\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% basic west-south-west distributor
+\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%
+
+% west-south-west distributor
+\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%
+
+% basic west-south-west distributor with upper name
+\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%
+
+% west-south-west distributor with upper name
+\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%
+
+% basic west-south-west distributor with lower name
+\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%
+
+% west-south-west distributor with lower name
+\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%
+
+% basic west-south-west dotted arrow
+\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%
+
+% west-south-west dotted arrow
+\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%
+
+% basic west-south-west dotted arrow with upper name
+\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%
+
+% west-south-west dotted arrow with upper name
+\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%
+
+% basic west-south-west dotted arrow with lower name
+\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%
+
+% west-south-west dotted arrow with lower name
+\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%
+
+% basic west-south-west monomorphism
+\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%
+
+% west-south-west monomorphism
+\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%
+
+% basic west-south-west monomorphism with upper name
+\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%
+
+% west-south-west monomorphism with upper name
+\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%
+
+% basic west-south-west monomorphism with lower name
+\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%
+
+% west-south-west monomorphism with lower name
+\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%
+
+% basic west-south-west epimorphism
+\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%
+
+% west-south-west epimorphism
+\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%
+
+% basic west-south-west epimorphism with upper name
+\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%
+
+% west-south-west epimorphism with upper name
+\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%
+
+% basic west-south-west epimorphism with lower name
+\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%
+
+% west-south-west epimorphism with lower name
+\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%
+
+% basic west-south-west bimorphism
+\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%
+
+% west-south-west bimorphism
+\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%
+
+% basic west-south-west bimorphism with upper name
+\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%
+
+% west-south-west bimorphism with upper name
+\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%
+
+% basic west-south-west bimorphism with lower name
+\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%
+
+% west-south-west bimorphism with lower name
+\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%
+
+% basic west-south-west isomorphism
+\def\basicwswiso[#1]{\WSWAR{\isosign}{}{#100}}%
+
+% west-south-west isomorphism
+\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%
+
+% basic west-south-west isomorphism with upper name
+\def\basicWswiso[#1]#2{\WSWAR{#2}{\isosign}{#100}}%
+
+% west-south-west isomorphism with upper name
+\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%
+
+% basic west-south-west isomorphism with lower name
+\def\basicwswisO[#1]#2{\WSWAR{\isosign}{#2}{#100}}%
+
+% west-south-west isomorphism with lower name
+\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%
+
+% west-south-west equality
+\let\wsweql=\eneeql%
+
+% west-south-west equality with upper name
+\let\Wsweql=\Eneeql%
+
+% west-south-west equality with lower name
+\let\wsweqL=\eneeqL%
+
+% basic west-south-west pair of arrows
+\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%
+
+% west-south-west pair of arrows
+\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%
+
+% basic west-south-west pair of arrows with names
+\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%
+
+% west-south-west pair of arrows with names
+\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
+\let\wswbiaR=\Wswbiar
+
+% basic west-south-west pair of distributors
+\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%
+
+% west-south-west pair of distributors
+\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%
+
+% basic west-south-west pair of distributors with names
+\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of distributors with names
+\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
+\let\wswbidisT=\Wswbidist
+
+% basic west-south-west pair of adjoint arrows
+\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%
+
+% west-south-west pair of adjoint arrows
+\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%
+
+% basic west-south-west pair of adjoint arrows with names
+\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint arrows with names
+\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
+\let\wswadjaR=\Wswadjar
+
+% basic west-south-west pair of adjoint distributors
+\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%
+
+% west-south-west pair of adjoint distributors
+\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%
+
+% basic west-south-west pair of adjoint distributors with names
+\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint distributors with names
+\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
+\let\wswadjdisT=\Wswadjdist
+
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDIST{f}{g}{n} draws a west-north-west distributor
+% with names f, g and length n units
+\newcommand{\WNWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\WNWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\WNWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){\bimolength}}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\WNWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
+% with names f,g and length n units
+\newcommand{\WNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
+% with names f,g and length n units
+\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% basic west-north-west distributor
+\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%
+
+% west-north-west distributor
+\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%
+
+% basic west-north-west distributor with upper name
+\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%
+
+% west-north-west distributor with upper name
+\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%
+
+% basic west-north-west distributor with lower name
+\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%
+
+% west-north-west distributor with lower name
+\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%
+
+% basic west-north-west dotted arrow
+\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%
+
+% west-north-west dotted arrow
+\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with upper name
+\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%
+
+% west-north-west dotted arrow with upper name
+\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with lower name
+\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%
+
+% west-north-west dotted arrow with lower name
+\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%
+
+% basic west-north-west monomorphism
+\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%
+
+% west-north-west monomorphism
+\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%
+
+% basic west-north-west monomorphism with upper name
+\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%
+
+% west-north-west monomorphism with upper name
+\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%
+
+% basic west-north-west monomorphism with lower name
+\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%
+
+% west-north-west monomorphism with lower name
+\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%
+
+% basic west-north-west epimorphism
+\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%
+
+% west-north-west epimorphism
+\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%
+
+% basic west-north-west epimorphism with upper name
+\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%
+
+% west-north-west epimorphism with upper name
+\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%
+
+% basic west-north-west epimorphism with lower name
+\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%
+
+% west-north-west epimorphism with lower name
+\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%
+
+% basic west-north-west bimorphism
+\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%
+
+% west-north-west bimorphism
+\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%
+
+% basic west-north-west bimorphism with upper name
+\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%
+
+% west-north-west bimorphism with upper name
+\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%
+
+% basic west-north-west bimorphism with lower name
+\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%
+
+% west-north-west bimorphism with lower name
+\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%
+
+% basic west-north-west isomorphism
+\def\basicwnwiso[#1]{\WNWAR{\isosign}{}{#100}}%
+
+% west-north-west isomorphism
+\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%
+
+% basic west-north-west isomorphism with upper name
+\def\basicWnwiso[#1]#2{\WNWAR{#2}{\isosign}{#100}}%
+
+% west-north-west isomorphism with upper name
+\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%
+
+% basic west-north-west isomorphism with lower name
+\def\basicwnwisO[#1]#2{\WNWAR{\isosign}{#2}{#100}}%
+
+% west-north-west isomorphism with lower name
+\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%
+
+% west-north-west equality
+\let\wnweql=\eseeql%
+
+% west-north-west equality with upper name
+\let\Wnweql=\Eseeql%
+
+% west-north-west equality with lower name
+\let\wnweqL=\eseeqL%
+
+% basic west-north-west pair of arrows
+\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%
+
+% west-north-west pair of arrows
+\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%
+
+% basic west-north-west pair of arrows with names
+\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%
+
+% west-north-west pair of arrows with names
+\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
+\let\wnwbiaR=\Wnwbiar
+
+% basic west-north-west pair of distributors
+\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%
+
+% west-north-west pair of distributors
+\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%
+
+% basic west-north-west pair of distributors with names
+\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of distributors with names
+\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
+\let\wnwbidisT=\Wnwbidist
+
+% basic west-north-west pair of adjoint arrows
+\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%
+
+% west-north-west pair of adjoint arrows
+\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%
+
+% basic west-north-west pair of adjoint arrows with names
+\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint arrows with names
+\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
+\let\wnwadjaR=\Wnwadjar
+
+% basic west-north-west pair of adjoint distributors
+\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%
+
+% west-north-west pair of adjoint distributors
+\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%
+
+% basic west-north-west pair of adjoint distributors with names
+\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint distributors with names
+\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
+\let\wnwadjdisT=\Wnwadjdist
+
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDIST{f}{g}{n} draws a north-north-east distributor
+% with names f, g and length n units
+\newcommand{\NNEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\NNEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\NNEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){\bimolength}}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\NNEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEQL{f}{g}{n} draws a north-north-east equality
+% with names f,g and length n units
+\newcommand{\NNEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},\value{x}){\line(1,2){#3}}%
+\put(\value{y},-\value{x}){\line(1,2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
+% with names f,g and length n units
+\newcommand{\NNEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
+% with names f,g and length n units
+\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+% basic north-north-east distributor
+\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%
+
+% north-north-east distributor
+\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%
+
+% basic north-north-east distributor with upper name
+\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%
+
+% north-north-east distributor with upper name
+\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%
+
+% basic north-north-east distributor with lower name
+\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%
+
+% north-north-east distributor with lower name
+\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%
+
+% basic north-north-east dotted arrow
+\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%
+
+% north-north-east dotted arrow
+\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%
+
+% basic north-north-east dotted arrow with upper name
+\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%
+
+% north-north-east dotted arrow with upper name
+\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%
+
+% basic north-north-east dotted arrow with lower name
+\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%
+
+% north-north-east dotted arrow with lower name
+\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%
+
+% basic north-north-east monomorphism
+\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%
+
+% north-north-east monomorphism
+\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%
+
+% basic north-north-east monomorphism with upper name
+\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%
+
+% north-north-east monomorphism with upper name
+\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%
+
+% basic north-north-east monomorphism with lower name
+\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%
+
+% north-north-east monomorphism with lower name
+\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%
+
+% basic north-north-east epimorphism
+\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%
+
+% north-north-east epimorphism
+\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%
+
+% basic north-north-east epimorphism with upper name
+\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%
+
+% north-north-east epimorphism with upper name
+\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%
+
+% basic north-north-east epimorphism with lower name
+\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%
+
+% north-north-east epimorphism with lower name
+\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%
+
+% basic north-north-east bimorphism
+\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%
+
+% north-north-east bimorphism
+\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%
+
+% basic north-north-east bimorphism with upper name
+\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%
+
+% north-north-east bimorphism with upper name
+\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%
+
+% basic north-north-east bimorphism with lower name
+\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%
+
+% north-north-east bimorphism with lower name
+\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%
+
+% basic north-north-east isomorphism
+\def\basicnneiso[#1]{\NNEAR{\isosign}{}{#100}}%
+
+% north-north-east isomorphism
+\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%
+
+% basic north-north-east isomorphism with upper name
+\def\basicNneiso[#1]#2{\NNEAR{#2}{\isosign}{#100}}%
+
+% north-north-east isomorphism with upper name
+\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%
+
+% basic north-north-east isomorphism with lower name
+\def\basicnneisO[#1]#2{\NNEAR{\isosign}{#2}{#100}}%
+
+% north-north-east isomorphism with lower name
+\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%
+
+% basic north-north-east equality
+\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%
+
+% north-north-east equality
+\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%
+
+% basic north-north-east equality with upper name
+\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%
+
+% north-north-east equality with upper name
+\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%
+
+% basic north-north-east equality with lower name
+\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%
+
+% north-north-east equality with lower name
+\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
+\let\nnebiaR=\Nnebiar
+
+% basic north-north-east pair of distributors
+\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
+\let\nnebidisT=\Nnebidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
+\let\nneadjaR=\Nneadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
+\let\nneadjdisT=\Nneadjdist
+
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDIST{f}{g}{n} draws a south-south-east distributor
+% with names f, g and length n units
+\newcommand{\SSEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\SSEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\SSEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){\bimolength}}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\SSEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEQL{f}{g}{n} draws a south-south-east equality
+% with names f,g and length n units
+\newcommand{\SSEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
+\put(\value{y},\value{x}){\line(1,-2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
+% with names f,g and length n units
+\newcommand{\SSEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
+% with names f,g and length n units
+\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\distsign}%
+\put(\value{x},\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% basic south-south-east distributor
+\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%
+
+% south-south-east distributor
+\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%
+
+% basic south-south-east distributor with upper name
+\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%
+
+% south-south-east distributor with upper name
+\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%
+
+% basic south-south-east distributor with lower name
+\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%
+
+% south-south-east distributor with lower name
+\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%
+
+% basic south-south-east dotted arrow
+\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%
+
+% south-south-east dotted arrow
+\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%
+
+% basic south-south-east dotted arrow with upper name
+\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%
+
+% south-south-east dotted arrow with upper name
+\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%
+
+% basic south-south-east dotted arrow with lower name
+\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%
+
+% south-south-east dotted arrow with lower name
+\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%
+
+% basic south-south-east monomorphism
+\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%
+
+% south-south-east monomorphism
+\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%
+
+% basic south-south-east monomorphism with upper name
+\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%
+
+% south-south-east monomorphism with upper name
+\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%
+
+% basic south-south-east monomorphism with lower name
+\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%
+
+% south-south-east monomorphism with lower name
+\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%
+
+% basic south-south-east epimorphism
+\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%
+
+% south-south-east epimorphism
+\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%
+
+% basic south-south-east epimorphism with upper name
+\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%
+
+% south-south-east epimorphism with upper name
+\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%
+
+% basic south-south-east epimorphism with lower name
+\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%
+
+% south-south-east epimorphism with lower name
+\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%
+
+% basic south-south-east bimorphism
+\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%
+
+% south-south-east bimorphism
+\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%
+
+% basic south-south-east bimorphism with upper name
+\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%
+
+% south-south-east bimorphism with upper name
+\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%
+
+% basic south-south-east bimorphism with lower name
+\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%
+
+% south-south-east bimorphism with lower name
+\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%
+
+% basic south-south-east isomorphism
+\def\basicsseiso[#1]{\SSEAR{\isosign}{}{#100}}%
+
+% south-south-east isomorphism
+\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%
+
+% basic south-south-east isomorphism with upper name
+\def\basicSseiso[#1]#2{\SSEAR{#2}{\isosign}{#100}}%
+
+% south-south-east isomorphism with upper name
+\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%
+
+% basic south-south-east isomorphism with lower name
+\def\basicsseisO[#1]#2{\SSEAR{\isosign}{#2}{#100}}%
+
+% south-south-east isomorphism with lower name
+\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%
+
+% basic south-south-east equality
+\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%
+
+% south-south-east equality
+\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%
+
+% basic south-south-east equality with upper name
+\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%
+
+% south-south-east equality with upper name
+\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%
+
+% basic south-south-east equality with lower name
+\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%
+
+% south-south-east equality with lower name
+\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[67]}}%
+
+% basic south-south-east pair of arrows
+\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%
+
+% south-south-east pair of arrows
+\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%
+
+% basic south-south-east pair of arrows with names
+\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%
+
+% south-south-east pair of arrows with names
+\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
+\let\ssebiaR=\Ssebiar
+
+% basic south-south-east pair of distributors
+\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%
+
+% south-south-east pair of distributors
+\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%
+
+% basic south-south-east pair of distributors with names
+\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of distributors with names
+\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
+\let\ssebidisT=\Ssebidist
+
+% basic south-south-east pair of adjoint arrows
+\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%
+
+% south-south-east pair of adjoint arrows
+\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%
+
+% basic south-south-east pair of adjoint arrows with names
+\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint arrows with names
+\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
+\let\sseadjaR=\Sseadjar
+
+% basic south-south-east pair of adjoint distributors
+\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%
+
+% south-south-east pair of adjoint distributors
+\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%
+
+% basic south-south-east pair of adjoint distributors with names
+\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint distributors with names
+\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
+\let\sseadjdisT=\Sseadjdist
+
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDIST{f}{g}{n} draws a south-south-west distributor
+% with names f, g and length n units
+\newcommand{\SSWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\SSWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\SSWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){\bimolength}}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\SSWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
+% with names f,g and length n units
+\newcommand{\SSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
+% with names f,g and length n units
+\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% basic south-south-west distributor
+\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%
+
+% south-south-west distributor
+\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%
+
+% basic south-south-west distributor with upper name
+\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%
+
+% south-south-west distributor with upper name
+\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%
+
+% basic south-south-west distributor with lower name
+\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%
+
+% south-south-west distributor with lower name
+\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%
+
+% basic south-south-west dotted arrow
+\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%
+
+% south-south-west dotted arrow
+\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%
+
+% basic south-south-west dotted arrow with upper name
+\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%
+
+% south-south-west dotted arrow with upper name
+\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%
+
+% basic south-south-west dotted arrow with lower name
+\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%
+
+% south-south-west dotted arrow with lower name
+\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%
+
+% basic south-south-west monomorphism
+\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%
+
+% south-south-west monomorphism
+\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%
+
+% basic south-south-west monomorphism with upper name
+\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%
+
+% south-south-west monomorphism with upper name
+\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%
+
+% basic south-south-west monomorphism with lower name
+\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%
+
+% south-south-west monomorphism with lower name
+\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%
+
+% basic south-south-west epimorphism
+\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%
+
+% south-south-west epimorphism
+\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%
+
+% basic south-south-west epimorphism with upper name
+\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%
+
+% south-south-west epimorphism with upper name
+\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%
+
+% basic south-south-west epimorphism with lower name
+\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%
+
+% south-south-west epimorphism with lower name
+\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%
+
+% basic south-south-west bimorphism
+\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%
+
+% south-south-west bimorphism
+\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%
+
+% basic south-south-west bimorphism with upper name
+\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%
+
+% south-south-west bimorphism with upper name
+\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%
+
+% basic south-south-west bimorphism with lower name
+\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%
+
+% south-south-west bimorphism with lower name
+\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%
+
+% basic south-south-west isomorphism
+\def\basicsswiso[#1]{\SSWAR{\isosign}{}{#100}}%
+
+% south-south-west isomorphism
+\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%
+
+% basic south-south-west isomorphism with upper name
+\def\basicSswiso[#1]#2{\SSWAR{#2}{\isosign}{#100}}%
+
+% south-south-west isomorphism with upper name
+\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%
+
+% basic south-south-west isomorphism with lower name
+\def\basicsswisO[#1]#2{\SSWAR{\isosign}{#2}{#100}}%
+
+% south-south-west isomorphism with lower name
+\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%
+
+% south-south-west equality
+\let\ssweql=\nneeql%
+
+% south-south-west equality with upper name
+\let\Ssweql=\Nneeql%
+
+% south-south-west equality with lower name
+\let\ssweqL=\nneeqL%
+
+% basic south-south-west pair of arrows
+\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%
+
+% south-south-west pair of arrows
+\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%
+
+% basic south-south-west pair of arrows with names
+\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%
+
+% south-south-west pair of arrows with names
+\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
+\let\sswbiaR=\Sswbiar
+
+% basic south-south-west pair of distributors
+\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%
+
+% south-south-west pair of distributors
+\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%
+
+% basic south-south-west pair of distributors with names
+\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of distributors with names
+\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
+\let\sswbidisT=\Sswbidist
+
+% basic south-south-west pair of adjoint arrows
+\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%
+
+% south-south-west pair of adjoint arrows
+\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%
+
+% basic south-south-west pair of adjoint arrows with names
+\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint arrows with names
+\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
+\let\sswadjaR=\Sswadjar
+
+% basic south-south-west pair of adjoint distributors
+\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%
+
+% south-south-west pair of adjoint distributors
+\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%
+
+% basic south-south-west pair of adjoint distributors with names
+\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint distributors with names
+\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
+\let\sswadjdisT=\Sswadjdist
+
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDIST{f}{g}{n} draws a north-north-west distributor
+% with names f, g and length n units
+\newcommand{\NNWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\NNWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\NNWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){\bimolength}}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\NNWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
+% with names f,g and length n units
+\newcommand{\NNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
+% with names f,g and length n units
+\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\distsign}%
+\put(\value{x},\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% basic north-north-west distributor
+\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%
+
+% north-north-west distributor
+\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%
+
+% basic north-north-west distributor with upper name
+\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%
+
+% north-north-west distributor with upper name
+\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%
+
+% basic north-north-west distributor with lower name
+\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%
+
+% north-north-west distributor with lower name
+\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%
+
+% basic north-north-west dotted arrow
+\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%
+
+% north-north-west dotted arrow
+\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with upper name
+\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%
+
+% north-north-west dotted arrow with upper name
+\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with lower name
+\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%
+
+% north-north-west dotted arrow with lower name
+\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%
+
+% basic north-north-west monomorphism
+\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%
+
+% north-north-west monomorphism
+\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%
+
+% basic north-north-west monomorphism with upper name
+\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%
+
+% north-north-west monomorphism with upper name
+\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%
+
+% basic north-north-west monomorphism with lower name
+\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%
+
+% north-north-west monomorphism with lower name
+\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%
+
+% basic north-north-west epimorphism
+\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%
+
+% north-north-west epimorphism
+\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%
+
+% basic north-north-west epimorphism with upper name
+\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%
+
+% north-north-west epimorphism with upper name
+\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%
+
+% basic north-north-west epimorphism with lower name
+\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%
+
+% north-north-west epimorphism with lower name
+\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%
+
+% basic north-north-west bimorphism
+\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%
+
+% north-north-west bimorphism
+\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%
+
+% basic north-north-west bimorphism with upper name
+\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%
+
+% north-north-west bimorphism with upper name
+\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%
+
+% basic north-north-west bimorphism with lower name
+\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%
+
+% north-north-west bimorphism with lower name
+\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%
+
+% basic north-north-west isomorphism
+\def\basicnnwiso[#1]{\NNWAR{\isosign}{}{#100}}%
+
+% north-north-west isomorphism
+\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%
+
+% basic north-north-west isomorphism with upper name
+\def\basicNnwiso[#1]#2{\NNWAR{#2}{\isosign}{#100}}%
+
+% north-north-west isomorphism with upper name
+\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%
+
+% basic north-north-west isomorphism with lower name
+\def\basicnnwisO[#1]#2{\NNWAR{\isosign}{#2}{#100}}%
+
+% north-north-west isomorphism with lower name
+\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%
+
+% north-north-west equality
+\let\nnweql=\sseeql%
+
+% north-north-west equality with upper name
+\let\Nnweql=\Sseeql%
+
+% north-north-west equality with lower name
+\let\nnweqL=\sseeqL%
+
+% basic north-north-east pair of arrows
+\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
+\let\nnwbiaR=\Nnwbiar
+
+% basic north-north-east pair of distributors
+\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
+\let\nnwbidisT=\Nnwbidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
+\let\nnwadjaR=\Nnwadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
+\let\nnwadjdisT=\Nnwadjdist
+
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,1){#3}}%
+\put(\Y,\Z){\eenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-1){#3}}%
+\put(\Y,-\Z){\eesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWs
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,1){#3}}%
+\put(-\Y,\Z){\wwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-1){#3}}%
+\put(-\Y,-\Z){\wwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(1,3){#3}}%
+\put(\Y,\Z){\nnnehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-1,-3){#3}}%
+\put(-\Y,-\Z){\ssswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(1,-3){#3}}%
+\put(\Y,-\Z){\sssehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-1,3){#3}}%
+\put(-\Y,\Z){\nnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,2){#3}}%
+\put(\Y,\Z){\neenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-2){#3}}%
+\put(\Y,-\Z){\seesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,2){#3}}%
+\put(-\Y,\Z){\nwwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-2){#3}}%
+\put(-\Y,-\Z){\swwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,3){#3}}%
+\put(\Y,\Z){\nennehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-3){#3}}%
+\put(-\Y,-\Z){\swsswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-3){#3}}%
+\put(\Y,-\Z){\sessehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,3){#3}}%
+\put(-\Y,\Z){\nwnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MicroDiagram b/macros/generic/diagrams/borceux/diagram/MicroDiagram
new file mode 100644
index 0000000000..3ab5c4bd85
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MicroDiagram
@@ -0,0 +1,1917 @@
+% DIAGRAM MACROS (version 3.1)
+% MICRO-DIAGRAM FILE
+% JUST PLAIN ARROWS
+% ARROWHEADS DESIGNED AS \vector
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\vector(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\vector(1,1){#1}}%
+\end{picture}}%
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\vector(-1,-1){#1}}%
+\end{picture}}%
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\vector(1,-1){#1}}%
+\end{picture}}%
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\vector(-1,1){#1}}%
+\end{picture}}%
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicWnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\vector(1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\vector(1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\vector(-1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\vector(-1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(1,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-1,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(1,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-1,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MiniDiagram b/macros/generic/diagrams/borceux/diagram/MiniDiagram
new file mode 100644
index 0000000000..39c08f673b
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MiniDiagram
@@ -0,0 +1,3164 @@
+% DIAGRAM MACROS (version 3.1)
+% MINI-DIAGRAM FILE
+% PLAIN ARROWS, PAIRS OF PLAIN ARROWS, ADJOINT PAIRS OF PLAIN ARROWS
+% ARROWHEADS DESIGNED AS \vector
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcount\NUMBEROFDOTS%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\X%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tbicase{P} draws the bi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \textarrowlength pt.
+\newcommand{\Tbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\scriptstyle #2}%
+{\mbox{\tlowername{#1{\actualtextarrowlength}}%
+{\scriptstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dbicase{P} draws the bi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \displayarrowlength pt.
+\newcommand{\Dbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\textstyle #2}%
+{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
+{\textstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\vector(1,0){#1}}%
+\put(0,700){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \ADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\ADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\vector(1,0){#1}}%
+\put(#1,700){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% pair of arrows
+\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%
+
+% pair of arrows with names [1],[2]
+\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
+\else\Dbicase{\BIAR}{#1}{#2}\fi}%
+
+% pair of adjoint arrows
+\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%
+
+% pair of adjoint arrows with names [1],[2]
+\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
+\else\Dbicase{\ADJAR}{#1}{#2}\fi}%
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \BKBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\BKBIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\vector(-1,0){#1}}%
+\put(#1,700){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\vector(1,0){#1}}%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\vector(1,0){#1}}%
+\put(#1,0){\vector(-1,0){#1}}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+% pair of back arrows
+\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%
+
+% pair of back arrows with names [1],[2]
+\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
+\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%
+
+% back pair of adjoint arrows
+\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
+\else\dbicase{\BKADJAR}\fi}%
+
+% back pair of adjoint arrows with names [1],[2]
+\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
+\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% \hbicase{P}{n} draws the bi-picture P with length n units.
+\newcommand{\hbicase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
+% and length n units.
+\newcommand{\Hbicase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-10.4pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \EBIAR{n} draws an east pair of arrows of length n units
+\newcommand{\EBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\vector(1,0){#1}}%
+\put(0,\value{x}){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \EADJAR{n} draws an east pair of adjoint arrows of length n
+% units
+\newcommand{\EADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\vector(1,0){#1}}%
+\put(#1,\value{x}){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% basic pair of east arrows
+\def\basicebiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIAR}{\Z}}%
+
+% pair of east arrows
+\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
+{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%
+
+% basic pair of east arrows with names
+\def\basicEbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
+
+% pair of east arrows with names
+\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
+{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
+\let\ebiaR=\Ebiar
+
+% basic pair of east adjoint arrows
+\def\basiceadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJAR}{\Z}}%
+
+% pair of east adjoint arrows
+\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
+{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint arrows with names
+\def\basicEadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
+
+% pair of east adjoint arrows with names
+\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
+{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
+\let\eadjaR=\Eadjar
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \WBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\WBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\vector(-1,0){#1}}%
+\put(#1,\value{x}){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \WADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\WADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\vector(1,0){#1}}%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% basic pair of west arrows
+\def\basicwbiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIAR}{\Z}}%
+
+% pair of west arrows
+\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
+{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%
+
+% basic pair of west arrows with names
+\def\basicWbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
+
+% pair of west arrows with names
+\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
+{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
+\let\wbiaR=\Wbiar
+
+% basic pair of west adjoint arrows
+\def\basicwadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJAR}{\Z}}%
+
+% pair of west adjoint arrows
+\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
+{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint arrows with names
+\def\basicWadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
+
+% pair of west adjoint arrows with names
+\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
+{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
+\let\wadjaR=\Wadjar
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
+\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%
+
+% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
+% with names f, g and length n units.
+\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\vector(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SBIAR{n} draws a pair of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\vector(0,-1){#1}}%
+\put(\value{x},#1){\vector(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\vector(0,-1){#1}}%
+\put(\value{x},0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% basic pair of south arrows
+\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%
+
+% pair of south arrows
+\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%
+
+% basic pair of south arrows with names
+\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
+
+% pair of south arrows with names
+\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
+\let\sbiaR=\Sbiar
+
+% basic pair of south adjoint arrows
+\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%
+
+% pair of south adjoint arrows
+\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%
+
+% basic pair of south adjoint arrows with names
+\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
+
+% pair of south adjoint arrows with names
+\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
+\let\sadjaR=\Sadjar
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \NBIAR{n} draws a pair of north arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\vector(0,1){#1}}%
+\put(\value{x},0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\vector(0,-1){#1}}%
+\put(-\value{x},0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% basic pair of north arrows
+\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%
+
+% pair of north arrows
+\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%
+
+% basic pair of north arrows with names
+\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
+
+% pair of north arrows with names
+\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
+\let\nbiaR=\Nbiar
+
+% basic pair of north adjoint arrows
+\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%
+
+% pair of north adjoint arrows
+\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%
+
+% basic pair of north adjoint arrows with names
+\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
+
+% pair of north adjoint arrows with names
+\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
+\let\nadjaR=\Nadjar
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{900}\truey{150}%
+\put(-\value{x},\value{y}){${#2}$}%
+\truex{300}\truey{1050}%
+\put(\value{x},-\value{y}){${#3}$}%
+\end{picture}}%
+
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\vector(1,1){#1}}%
+\end{picture}}%
+
+% \NEBIAR{n} draws a pair of north-east arrows of length n units
+\newcommand{\NEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},\value{x}){\vector(1,1){#1}}%
+\put(\value{x},-\value{x}){\vector(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
+\newcommand{\NEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\vector(1,1){#1}}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\vector(-1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% pair of north-east arrows of length nx100 units
+\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%
+
+% pair of north-east arrows
+\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%
+
+% pair of north-east arrows with names [1][2] and length nx100 units
+\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%
+
+% pair of north-east arrows with names
+\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
+\let\nebiaR=\Nebiar
+
+% pair of north-east adjoint arrows of length nx100 units
+\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%
+
+% pair of north-east adjoint arrows
+\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%
+
+% pair of north-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint arrows with names
+\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
+\let\neadjaR=\Neadjar
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\vector(-1,-1){#1}}%
+\end{picture}}%
+
+% \SWBIAR{n} draws a pair of south-west arrows of length n units
+\newcommand{\SWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(\value{x},-\value{x}){\vector(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\vector(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
+\newcommand{\SWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\vector(-1,-1){#1}}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\vector(1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% pair of south-west arrows of length nx100 units
+\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%
+
+% pair of south-west arrows
+\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%
+
+% pair of south-west arrows with names [1][2] and length nx100 units
+\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%
+
+% pair of south-west arrows with names
+\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
+\let\swbiaR=\Swbiar
+
+% pair of south-west adjoint arrows of length nx100 units
+\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%
+
+% pair of south-west adjoint arrows
+\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%
+
+% pair of south-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint arrows with names
+\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
+\let\swadjaR=\Swadjar
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{350}\truey{600}\truez{950}%
+\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
+\truex{450}\truey{600}\truez{1050}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
+\end{picture}}%
+
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\vector(1,-1){#1}}%
+\end{picture}}%
+
+% \SEBIAR{n} draws a pair of south-east arrows of length n units
+\newcommand{\SEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\vector(1,-1){#1}}%
+\put(\value{x},\value{x}){\vector(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
+\newcommand{\SEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\vector(1,-1){#1}}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\vector(-1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% pair of south-east arrows of length nx100 units
+\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%
+
+% pair of south-east arrows
+\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%
+
+% pair of south-east arrows with names [1][2] and length nx100 units
+\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%
+
+% pair of south-east arrows with names
+\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
+\let\sebiaR=\Sebiar
+
+% pair of south-east adjoint arrows of length nx100 units
+\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%
+
+% pair of south-east adjoint arrows
+\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%
+
+% pair of south-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint arrows with names
+\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
+\let\seadjaR=\Seadjar
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\vector(-1,1){#1}}%
+\end{picture}}%
+
+% \NWBIAR{n} draws a pair of north-west arrows of length n units
+\newcommand{\NWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\vector(-1,1){#1}}%
+\put(\value{x},\value{x}){\vector(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
+\newcommand{\NWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\vector(-1,1){#1}}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\vector(1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% pair of north-west arrows of length nx100 units
+\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%
+
+% pair of north-west arrows
+\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%
+
+% pair of north-west arrows with names [1][2] and length nx100 units
+\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%
+
+% pair of north-west arrows with names
+\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
+\let\nwbiaR=\Nwbiar
+
+% pair of north-west adjoint arrows of length nx100 units
+\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%
+
+% pair of north-west adjoint arrows
+\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%
+
+% pair of north-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint arrows with names
+\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
+\let\nwadjaR=\Nwadjar
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
+% with names f,g and length n units
+\newcommand{\ENEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\vector(2,1){#3}}%
+\put(\value{x},-\value{y}){\vector(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ENEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(2,1){#3}}%
+\put(\monolength,\secondepilength){\vector(-2,-1){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+% basic east-north-east pair of arrows
+\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%
+
+% east-north-east pair of arrows
+\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%
+
+% basic east-north-east pair of arrows with names
+\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%
+
+% east-north-east pair of arrows with names
+\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
+\let\enebiaR=\Enebiar
+
+% basic east-north-east pair of adjoint arrows
+\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%
+
+% east-north-east pair of adjoint arrows
+\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%
+
+% basic east-north-east pair of adjoint arrows with names
+\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint arrows with names
+\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
+\let\eneadjaR=\Eneadjar
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
+% with names f,g and length n units
+\newcommand{\ESEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\vector(2,-1){#3}}%
+\put(\value{x},\value{y}){\vector(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ESEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(2,-1){#3}}%
+\put(\epilength,-\secondmonolength){\vector(-2,1){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% basic east-south-east pair of arrows
+\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%
+
+% east-south-east pair of arrows
+\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%
+
+% basic east-south-east pair of arrows with names
+\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%
+
+% east-south-east pair of arrows with names
+\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
+\let\esebiaR=\Esebiar
+
+% basic east-south-east pair of adjoint arrows
+\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%
+
+% east-south-east pair of adjoint arrows
+\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%
+
+% basic east-south-east pair of adjoint arrows with names
+\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint arrows with names
+\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
+\let\eseadjaR=\Eseadjar
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
+% with names f,g and length n units
+\newcommand{\WSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\vector(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\vector(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(-2,-1){#3}}%
+\put(-\epilength,-\secondmonolength){\vector(2,1){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% basic west-south-west pair of arrows
+\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%
+
+% west-south-west pair of arrows
+\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%
+
+% basic west-south-west pair of arrows with names
+\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%
+
+% west-south-west pair of arrows with names
+\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
+\let\wswbiaR=\Wswbiar
+
+% basic west-south-west pair of adjoint arrows
+\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%
+
+% west-south-west pair of adjoint arrows
+\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%
+
+% basic west-south-west pair of adjoint arrows with names
+\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint arrows with names
+\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
+\let\wswadjaR=\Wswadjar
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
+% with names f,g and length n units
+\newcommand{\WNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\vector(-2,1){#3}}%
+\put(\value{x},\value{y}){\vector(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(-2,1){#3}}%
+\put(-\monolength,\secondepilength){\vector(2,-1){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% basic west-north-west distributor
+\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%
+
+% basic west-north-west pair of arrows
+\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%
+
+% west-north-west pair of arrows
+\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%
+
+% basic west-north-west pair of arrows with names
+\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%
+
+% west-north-west pair of arrows with names
+\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
+\let\wnwbiaR=\Wnwbiar
+
+% basic west-north-west pair of adjoint arrows
+\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%
+
+% west-north-west pair of adjoint arrows
+\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%
+
+% basic west-north-west pair of adjoint arrows with names
+\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint arrows with names
+\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
+\let\wnwadjaR=\Wnwadjar
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\vector(1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
+% with names f,g and length n units
+\newcommand{\NNEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\vector(1,2){#3}}%
+\put(\value{x},-\value{y}){\vector(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(1,2){#3}}%
+\put(\monolength,\secondepilength){\vector(-1,-2){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
+\let\nnebiaR=\Nnebiar
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
+\let\nneadjaR=\Nneadjar
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\vector(1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
+% with names f,g and length n units
+\newcommand{\SSEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\vector(1,-2){#3}}%
+\put(\value{x},\value{y}){\vector(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(1,-2){#3}}%
+\put(\epilength,-\secondmonolength){\vector(-1,2){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% basic south-south-east pair of arrows
+\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%
+
+% south-south-east pair of arrows
+\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%
+
+% basic south-south-east pair of arrows with names
+\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%
+
+% south-south-east pair of arrows with names
+\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
+\let\ssebiaR=\Ssebiar
+
+% basic south-south-east pair of adjoint arrows
+\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%
+
+% south-south-east pair of adjoint arrows
+\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%
+
+% basic south-south-east pair of adjoint arrows with names
+\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint arrows with names
+\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
+\let\sseadjaR=\Sseadjar
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\vector(-1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
+% with names f,g and length n units
+\newcommand{\SSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\vector(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\vector(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(-1,-2){#3}}%
+\put(-\epilength,-\secondmonolength){\vector(1,2){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% basic south-south-west pair of arrows
+\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%
+
+% south-south-west pair of arrows
+\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%
+
+% basic south-south-west pair of arrows with names
+\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%
+
+% south-south-west pair of arrows with names
+\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
+\let\sswbiaR=\Sswbiar
+
+% basic south-south-west pair of adjoint arrows
+\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%
+
+% south-south-west pair of adjoint arrows
+\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%
+
+% basic south-south-west pair of adjoint arrows with names
+\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint arrows with names
+\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
+\let\sswadjaR=\Sswadjar
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\vector(-1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
+% with names f,g and length n units
+\newcommand{\NNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\vector(-1,2){#3}}%
+\put(\value{x},\value{y}){\vector(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(-1,2){#3}}%
+\put(-\monolength,\secondepilength){\vector(1,-2){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
+\let\nnwbiaR=\Nnwbiar
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
+\let\nnwadjaR=\Nnwadjar
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWs
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(1,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-1,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(1,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-1,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MultipleArrows b/macros/generic/diagrams/borceux/diagram/MultipleArrows
new file mode 100644
index 0000000000..9ac6aa2f85
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MultipleArrows
@@ -0,0 +1,1313 @@
+%%% MACRO FILE FOR TRIPLE, QUADRUPLE AND QUINTUPLE ARROWS
+
+\catcode`\@=11
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+
+% MACROS FOR TEXT ARROWS
+
+% \ttricase{P} draws the tri-picture P
+% with length \textarrowlength pt.
+\newcommand{\ttricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}{#1{\actualtextarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Ttricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \textarrowlength pt.
+\newcommand{\Ttricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualtextarrowlength}{\rule{0pt}{6pt}\scriptstyle #2}%
+{\rule{0pt}{6pt}\scriptstyle #3}{\rule{0pt}{6pt}\scriptstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tmulticase{P} draws the multi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DISPLAYED ARROWS
+
+% \dtricase{P} draws the tri-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dtricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}{#1{\actualdisplayarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dtricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \displayarrowlength pt.
+\newcommand{\Dtricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualdisplayarrowlength}{\rule{0pt}{6pt}\textstyle #2}%
+{\rule{0pt}{6pt}\textstyle #3}{\rule{0pt}{6pt}\textstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dmulticase{P} draws the multi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% TEXT ARROWS
+
+% \TRIAR{n}{f}{g}{h} draws a triple of arrows of length n units
+% and names f, g, h
+\newcommand{\TRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \TRIADJAR{n} draws a triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\TRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIAR{n} draws a quadruple of arrows of length n units
+\newcommand{\QUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIADJAR{n} draws a quadruple of adjoint arrows
+% of length n units
+\newcommand{\QUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIAR{n} draws a quintuple of arrows of length n units
+\newcommand{\QUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIADJAR{n} draws a quintuple of adjoint arrows
+% of length n units
+\newcommand{\QUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% USER'S COMMANDS FOR TEXT ARROWS
+
+% triple of arrows
+\newcommand{\triar}{\ifinner\ttricase{\TRIAR}\else\dtricase{\TRIAR}\fi}%
+
+% triple of arrows with names [1],[2],[3]
+\newcommand{\Triar}[3]{\ifinner\Ttricase{\TRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIAR}{#1}{#2}{#3}\fi}%
+
+% triple of adjoint arrows
+\newcommand{\triadjar}{\ifinner\ttricase{\TRIADJAR}%
+\else\dtricase{\TRIADJAR}\fi}%
+
+% triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Triadjar}[3]{\ifinner\Ttricase{\TRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIADJAR}{#1}{#2}{#3}\fi}%
+
+% quadruple of arrows
+\newcommand{\quadriar}{\ifinner\tquadricase{\QUADRIAR}%
+\else\dmulticase{\QUADRIAR}\fi}%
+
+% quadruple of adjoint arrows
+\newcommand{\quadriadjar}{\ifinner\tmulticase{\QUADRIADJAR}%
+\else\dmulticase{\QUADRIADJAR}\fi}%
+
+% quintuple of arrows
+\newcommand{\quintiar}{\ifinner\tmulticase{\QUINTIAR}%
+\else\dmulticase{\QUINTIAR}\fi}%
+
+% quintuple of adjoint arrows
+\newcommand{\quintiadjar}{\ifinner\tmulticase{\QUINTIADJAR}%
+\else\dmulticase{\QUINTIADJAR}\fi}%
+
+
+% BACKWARD TEXT ARROWS
+
+% \BKTRIAR{n}{f}{g}{h} draws a triple of back arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKTRIADJAR{n} draws a back triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIAR{n} draws a quadruple of back arrows of length n units
+\newcommand{\BKQUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIADJAR{n} draws a back quadruple of adjoint arrows
+% of length n units
+\newcommand{\BKQUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIAR{n} draws a quintuple of back arrows of length n units
+\newcommand{\BKQUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIADJAR{n} draws a back quintuple of adjoint arrows
+% of length n units
+\newcommand{\BKQUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% USER'S COMMANDS FOR BACKWARD TEXT ARROWS
+
+% triple of back arrows
+\newcommand{\bktriar}{\ifinner\ttricase{\BKTRIAR}\else\dtricase{\BKTRIAR}\fi}%
+
+% triple of back arrows with names [1],[2],[3]
+\newcommand{\Bktriar}[3]{\ifinner\Ttricase{\BKTRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIAR}{#1}{#2}{#3}\fi}%
+
+% back triple of adjoint arrows
+\newcommand{\bktriadjar}{\ifinner\ttricase{\BKTRIADJAR}%
+\else\dtricase{\BKTRIADJAR}\fi}%
+
+% back triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Bktriadjar}[3]{\ifinner\Ttricase{\BKTRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIADJAR}{#1}{#2}{#3}\fi}%
+
+% back quadruple of arrows
+\newcommand{\bkquadriar}{\ifinner\tquadricase{\BKQUADRIAR}%
+\else\dmulticase{\BKQUADRIAR}\fi}%
+
+% back quadruple of adjoint arrows
+\newcommand{\bkquadriadjar}{\ifinner\tmulticase{\BKQUADRIADJAR}%
+\else\dmulticase{\BKQUADRIADJAR}\fi}%
+
+% back quintuple of arrows
+\newcommand{\bkquintiar}{\ifinner\tmulticase{\BKQUINTIAR}%
+\else\dmulticase{\BKQUINTIAR}\fi}%
+
+% back quintuple of adjoint arrows
+\newcommand{\bkquintiadjar}{\ifinner\tmulticase{\BKQUINTIADJAR}%
+\else\dmulticase{\BKQUINTIADJAR}\fi}%
+
+% MACROS FOR HORIZONTAL DIAGRAM ARROWS
+
+% \htricase{P}{n} draws the tri-picture P with length n units.
+\newcommand{\htricase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#2}{}{}{}{}}}}%
+
+% \Htricase{P}{f}{g}{h}{i}{n} draws the tri-picture P
+% with names f, g, h, i and length n units.
+\newcommand{\Htricase}[6]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#6}{#2}{#3}{#4}{#5}}}}%
+
+% \hmulticase{P}{n} draws the multi-picture P with length n units.
+\newcommand{\hmulticase}[2]%
+{\testdiagrammode\makebox[0pt]{\raisebox{-12pt}[0pt][0pt]{#1{#2}}}}%
+
+% EAST ARROWS
+
+% \ETRIAR{n}{f}{g}{h}{i} draws an east triple of arrows
+% of length n units with names f, g, h, i
+\newcommand{\ETRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \ETRIADJAR{n}{f}{g}{h}{i} draws an east triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\ETRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \EQUADRIAR{n} draws an east quadruple of arrows
+% of length n units
+\newcommand{\EQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUADRIADJAR{n} draws an east quadruple of adjoint arrows
+% of length n units
+\newcommand{\EQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \EQUINTIAR{n} draws an east quintuple of arrows
+% of length n units
+\newcommand{\EQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUINTIADJAR{n} draws an east quintuple of adjoint arrows
+% of length n units
+\newcommand{\EQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% USER'S COMMANDS FOR EAST ARROWS
+
+% basic east triple of arrows
+\def\basicetriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIAR}{\Z}}%
+
+% east triple of arrows
+\newcommand{\etriar}{\@ifnextchar[{\basicetriar}%
+{\hspace{\SOURCE\unitlength}\basicetriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with upper names
+\def\basicEtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of arrows with upper names
+\newcommand{\Etriar}{\@ifnextchar[{\basicEtriar}%
+{\hspace{\SOURCE\unitlength}\basicEtriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with lower names
+\def\basicetriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of arrows with lower name
+\newcommand{\etriaR}{\@ifnextchar[{\basicetriaR}%
+{\hspace{\SOURCE\unitlength}\basicetriaR[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows
+\def\basicetriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIADJAR}{\Z}}%
+
+% east triple of adjoint arrows
+\newcommand{\etriadjar}{\@ifnextchar[{\basicetriadjar}%
+{\hspace{\SOURCE\unitlength}\basicetriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with upper names
+\def\basicEtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of adjoint arrows with upper names
+\newcommand{\Etriadjar}{\@ifnextchar[{\basicEtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicEtriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with lower names
+\def\basicetriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of adjoint arrows with lower name
+\newcommand{\etriadjaR}{\@ifnextchar[{\basicetriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicetriadjaR[\ARROWLENGTH]}}%
+
+% basic east quadruple of arrows
+\def\basicequadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIAR}{\Z}}%
+
+% east quadruple of arrows
+\newcommand{\equadriar}{\@ifnextchar[{\basicequadriar}%
+{\hspace{\SOURCE\unitlength}\basicequadriar[\ARROWLENGTH]}}%
+
+% basic east quadruple of adjoint arrows
+\def\basicequadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIADJAR}{\Z}}%
+
+% east quadruple of adjoint arrows
+\newcommand{\equadriadjar}{\@ifnextchar[{\basicequadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicequadriadjar[\ARROWLENGTH]}}%
+
+% basic east quintuple of arrows
+\def\basicequintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIAR}{\Z}}%
+
+% east quintuple of arrows
+\newcommand{\equintiar}{\@ifnextchar[{\basicequintiar}%
+{\hspace{\SOURCE\unitlength}\basicequintiar[\ARROWLENGTH]}}%
+
+% basic east quintuple of adjoint arrows
+\def\basicequintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIADJAR}{\Z}}%
+
+% east quintuple of adjoint arrows
+\newcommand{\equintiadjar}{\@ifnextchar[{\basicequintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicequintiadjar[\ARROWLENGTH]}}%
+
+
+% WEST ARROWS
+
+% \WTRIAR{n}{f}{g}{h}{i} draws a west triple of arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WTRIADJAR{n}{f}{g}{h}{i} draws a west triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WQUADRIAR{n} draws a west quadruple of arrows
+% of length n units
+\newcommand{\WQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUADRIADJAR{n} draws a west quadruple of adjoint arrows
+% of length n units
+\newcommand{\WQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \WQUINTIAR{n} draws a west quintuple of arrows
+% of length n units
+\newcommand{\WQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUINTIADJAR{n} draws a west quintuple of adjoint arrows
+% of length n units
+\newcommand{\WQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% USER'S COMMANDS FOR WEST ARROWS
+
+% basic west triple of arrows
+\def\basicwtriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIAR}{\Z}}%
+
+% west triple of arrows
+\newcommand{\wtriar}{\@ifnextchar[{\basicwtriar}%
+{\hspace{\SOURCE\unitlength}\basicwtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with upper names
+\def\basicWtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of arrows with upper names
+\newcommand{\Wtriar}{\@ifnextchar[{\basicWtriar}%
+{\hspace{\SOURCE\unitlength}\basicWtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with lower names
+\def\basicwtriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of arrows with lower name
+\newcommand{\wtriaR}{\@ifnextchar[{\basicwtriaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriaR[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows
+\def\basicwtriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIADJAR}{\Z}}%
+
+% west triple of adjoint arrows
+\newcommand{\wtriadjar}{\@ifnextchar[{\basicwtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with upper names
+\def\basicWtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of adjoint arrows with upper names
+\newcommand{\Wtriadjar}{\@ifnextchar[{\basicWtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicWtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with lower names
+\def\basicwtriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of adjoint arrows with lower name
+\newcommand{\wtriadjaR}{\@ifnextchar[{\basicwtriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjaR[\ARROWLENGTH]}}%
+
+% basic west quadruple of arrows
+\def\basicwquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIAR}{\Z}}%
+
+% west quadruple of arrows
+\newcommand{\wquadriar}{\@ifnextchar[{\basicwquadriar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriar[\ARROWLENGTH]}}%
+
+% basic west quadruple of adjoint arrows
+\def\basicwquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIADJAR}{\Z}}%
+
+% west quadruple of adjoint arrows
+\newcommand{\wquadriadjar}{\@ifnextchar[{\basicwquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriadjar[\ARROWLENGTH]}}%
+
+% basic west quintuple of arrows
+\def\basicwquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIAR}{\Z}}%
+
+% west quintuple of arrows
+\newcommand{\wquintiar}{\@ifnextchar[{\basicwquintiar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiar[\ARROWLENGTH]}}%
+
+% basic west quintuple of adjoint arrows
+\def\basicwquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIADJAR}{\Z}}%
+
+% west quintuple of adjoint arrows
+\newcommand{\wquintiadjar}{\@ifnextchar[{\basicwquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiadjar[\ARROWLENGTH]}}%
+
+
+
+% MACROS FOR VERTICAL DIAGRAM PICTURES
+
+% \vtricase{P}{n} draws the vertical tri-picture P
+% with length n units
+\newcommand{\vtricase}[2]%
+{\testdiagrammode\makebox[0pt]{#1{}{}{}{}{#2}}}%
+
+% \Vtricase{P}{f}{g}{h}{i}{n} draws the vertical tri-picture P
+% with length n units and names f, g, h, i.
+\newcommand{\Vtricase}[6]%
+{\testdiagrammode\makebox[0pt]{#1{#2}{#3}{#4}{#5}{#6}}}%
+
+% \vmulticase{P}{n} draws the vertical multi-picture P
+% with length n units.
+\newcommand{\vmulticase}[2]{\testdiagrammode\makebox[0pt]{#1{#2}}}%
+
+% SOUTH ARROWS
+
+% \STRIAR{f}{g}{h}{i}{n} draws a triple of south arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \STRIADJAR{f}{g}{h}{i}{n} draws a south triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIAR{n} draws a quadruple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIADJAR{n} draws a south quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIAR{n} draws a quintuple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIADJAR{n} draws a south quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% USER'S COMMANDS FOR SOUTH ARROWS
+
+% basic south triple of arrows
+\def\basicstriar[#1]{\vtricase{\STRIAR}{#100}}%
+
+% south triple of arrows
+\newcommand{\striar}{\@ifnextchar[{\basicstriar}{\basicstriar[50]}}%
+
+% basic south triple of arrows with left names
+\def\basicStriar[#1]#2#3#4{\Vtricase{\STRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of arrows with left names
+\newcommand{\Striar}{\@ifnextchar[{\basicStriar}{\basicStriar[50]}}%
+
+% basic south triple of arrows with right names
+\def\basicstriaR[#1]#2#3#4{\Vtricase{\STRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of arrows with right name
+\newcommand{\striaR}{\@ifnextchar[{\basicstriaR}{\basicstriaR[50]}}%
+
+% basic south triple of adjoint arrows
+\def\basicstriadjar[#1]{\vtricase{\STRIADJAR}{#100}}%
+
+% south triple of adjoint arrows
+\newcommand{\striadjar}{\@ifnextchar[{\basicstriadjar}{\basicstriadjar[50]}}%
+
+% basic south triple of adjoint arrows with left names
+\def\basicStriadjar[#1]#2#3#4{\Vtricase{\STRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of adjoint arrows with left names
+\newcommand{\Striadjar}{\@ifnextchar[{\basicStriadjar}{\basicStriadjar[50]}}%
+
+% basic south triple of adjoint arrows with right names
+\def\basicstriadjaR[#1]#2#3#4{\Vtricase{\STRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of adjoint arrows with right name
+\newcommand{\striadjaR}{\@ifnextchar[{\basicstriadjaR}{\basicstriadjaR[50]}}%
+
+% basic south quadruple of arrows
+\def\basicsquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIAR}{\Z}}%
+
+% south quadruple of arrows
+\newcommand{\squadriar}{\@ifnextchar[{\basicsquadriar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriar[\ARROWLENGTH]}}%
+
+% basic south quadruple of adjoint arrows
+\def\basicsquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIADJAR}{\Z}}%
+
+% south quadruple of adjoint arrows
+\newcommand{\squadriadjar}{\@ifnextchar[{\basicsquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriadjar[\ARROWLENGTH]}}%
+
+% basic south quintuple of arrows
+\def\basicsquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIAR}{\Z}}%
+
+% south quintuple of arrows
+\newcommand{\squintiar}{\@ifnextchar[{\basicsquintiar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiar[\ARROWLENGTH]}}%
+
+% basic south quintuple of adjoint arrows
+\def\basicsquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIADJAR}{\Z}}%
+
+% south quintuple of adjoint arrows
+\newcommand{\squintiadjar}{\@ifnextchar[{\basicsquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiadjar[\ARROWLENGTH]}}%
+
+
+
+% NORTH ARROWS
+
+% \NTRIAR{f}{g}{h}{i}{n} draws a triple of north arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NTRIADJAR{f}{g}{h}{i}{n} draws a north triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIAR{n} draws a quadruple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIADJAR{n} draws a north quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIAR{n} draws a quintuple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIADJAR{n} draws a north quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% USER'S COMMANDS FOR NORTH ARROWS
+
+% basic north triple of arrows
+\def\basicntriar[#1]{\vtricase{\NTRIAR}{#100}}%
+
+% north triple of arrows
+\newcommand{\ntriar}{\@ifnextchar[{\basicntriar}{\basicntriar[50]}}%
+
+% basic north triple of arrows with left names
+\def\basicNtriar[#1]#2#3#4{\Vtricase{\NTRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of arrows with left names
+\newcommand{\Ntriar}{\@ifnextchar[{\basicNtriar}{\basicNtriar[50]}}%
+
+% basic north triple of arrows with right names
+\def\basicntriaR[#1]#2#3#4{\Vtricase{\NTRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of arrows with right name
+\newcommand{\ntriaR}{\@ifnextchar[{\basicntriaR}{\basicntriaR[50]}}%
+
+% basic north triple of adjoint arrows
+\def\basicntriadjar[#1]{\vtricase{\NTRIADJAR}{#100}}%
+
+% north triple of adjoint arrows
+\newcommand{\ntriadjar}{\@ifnextchar[{\basicntriadjar}{\basicntriadjar[50]}}%
+
+% basic north triple of adjoint arrows with left names
+\def\basicNtriadjar[#1]#2#3#4{\Vtricase{\NTRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of adjoint arrows with left names
+\newcommand{\Ntriadjar}{\@ifnextchar[{\basicNtriadjar}{\basicNtriadjar[50]}}%
+
+% basic north triple of adjoint arrows with right names
+\def\basicntriadjaR[#1]#2#3#4{\Vtricase{\NTRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of adjoint arrows with right name
+\newcommand{\ntriadjaR}{\@ifnextchar[{\basicntriadjaR}{\basicntriadjaR[50]}}%
+
+% basic north quadruple of arrows
+\def\basicnquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIAR}{\Z}}%
+
+% north quadruple of arrows
+\newcommand{\nquadriar}{\@ifnextchar[{\basicnquadriar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriar[\ARROWLENGTH]}}%
+
+% basic north quadruple of adjoint arrows
+\def\basicnquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIADJAR}{\Z}}%
+
+% north quadruple of adjoint arrows
+\newcommand{\nquadriadjar}{\@ifnextchar[{\basicnquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriadjar[\ARROWLENGTH]}}%
+
+% basic north quintuple of arrows
+\def\basicnquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIAR}{\Z}}%
+
+% north quintuple of arrows
+\newcommand{\nquintiar}{\@ifnextchar[{\basicnquintiar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiar[\ARROWLENGTH]}}%
+
+% basic north quintuple of adjoint arrows
+\def\basicnquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIADJAR}{\Z}}%
+
+% north quintuple of adjoint arrows
+\newcommand{\nquintiadjar}{\@ifnextchar[{\basicnquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiadjar[\ARROWLENGTH]}}%
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi b/macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi
new file mode 100644
index 0000000000..4e28d199be
--- /dev/null
+++ b/macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi
@@ -0,0 +1,588 @@
+\documentstyle{article}
+
+\textheight532pt
+\textwidth355pt
+\footskip15pt
+
+\hoffset-35mm
+\voffset-35mm
+
+\language=1
+\hyphenation{dia-gram-me}
+\diagramlabel{Diagramme}
+
+\title{Mode d'emploi de {\em Diagram 3}\thanks{Par rapport aux versions~1 et
+~2, le dessin des flches a ŽtŽ amŽliorŽ, la variŽtŽ de directions et de
+flches disponibles a ŽtŽ plus que doublŽe, toutes les flches pour diagrammes
+admettent un argument optionnel de longueur, la frappe des diagrammes a ŽtŽ
+simplifiŽe, des messages d'erreur et d'aide ont ŽtŽ introduits. Pour compiler
+avec {\em Diagram~3}, des documents prŽparŽs avec les versions~1 ou~2, lire le
+fichier {\em OldDiagram} aprs le fichier {\em Diagram}.}}
+\author{Francis Borceux, Louvain-la-Neuve}
+
+\font\bldfc=cmmib10
+\def\boldface#1{\mbox{\bldfc#1}}
+
+\newcommand{\XA}%
+{\truex{300}%
+\begin{picture}(0,0)%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}
+
+\newcommand{\XB}%
+{\truex{500}%
+\begin{picture}(0,0)%
+\put(0,0){\circle*{\value{x}}}%
+\end{picture}}
+
+\newcommand{\V}[3]{\cross{\XB}{\movevertex(#1,#2){\scriptstyle#3}}}
+
+\begin{document}
+
+\maketitle
+
+\section{A propos de {\em Diagram}}
+
+Le fichier {\em Diagram} rŽalise la construction de diagrammes du type de ceux
+apparaissant dans les textes de thŽorie des catŽgories. L'utilisateur donne la
+liste des objets et des flches constituant le diagramme, comme s'il composait
+une matrice, et le programme prend soin de calculer les dimensions des flches
+et de rŽaliser la mise en page. Tout ce que l'utilisateur doit faire en ce qui
+concerne les flches est prŽciser leur type (monomorphisme, paire de flches,
+\ldots) et leur direction (nord, sud-est,\ldots): 12 types de flches et 32
+directions sont disponibles; voir figures~1 et~3 pour des listes exhaustives.
+
+Un fichier {\em MultipleArrows} existe Žgalement: il produit des flches
+triples, quadruples et quintuples, parallles ou adjointes. La taille de ces
+ŽlŽments est telle que de sŽvres restrictions s'appliquent ˆ ceux-ci.
+
+{\em Diagram} fait un usage abondant des commandes \LaTeX\ et ne peut donc
+fonctionner sans \LaTeX.
+
+Certaines implŽmentations de \TeX, surtout celles limitŽes ˆ $2^{16}$ mots de
+mŽ\-moi\-re, sont incapables de manipuler {\em Diagram}. Pour ces situations,
+deux fichiers rŽduits de macros ont ŽtŽ crŽŽs; la restriction s'applique
+uniquement aux types de flches disponibles.
+\begin{itemize}
+\item {\em MicroDiagram} ne dessine que des flches simples;
+\item {\em MiniDiagram} dessine des flches simples, des paires de flches et
+des flches adjointes.
+\end{itemize}
+La restriction est d'ailleurs plus subtile, car les flches sont produites ici
+d'une manire plus Žconomique.
+
+Compiler de grands diagrammes requiert beaucoup de mŽmoire \TeX; si vous tes
+fortement limitŽ ˆ cet Žgard, esssayez de produire ces diagrammes commes
+documents sŽparŽs. Pour Žconomiser de la mŽmoire, vous pouvez aussi supprimer
+du fichier les macros que vous n'envisagez pas d'utiliser. Ne copiez pas des
+macros de {\em Diagram} vers {\em MiniDiagram} ou {\em MicroDiagram}: cela ne
+fonctionnerait pas.
+
+{\em Diagram} a ŽtŽ conu pour fournir des rŽsultats optimaux sur les
+imprimantes avec une rŽsolution allant jusque 300dpi. Dans le cas d'imprimantes
+ˆ plus haute rŽsolution, il convient d'adapter en consŽquence le paramtre {\em
+printerresolution} donnŽ comme premire instruction du fichier {\em Diagram}.
+Notez en passant que diminuer ce paramtre est une autre manire d'Žconomiser
+de la mŽmoire.
+
+\section{Les flches dans les formules}
+
+Des flches peuvent tre introduites dans les formules, donc dans une ligne de
+texte entre simples dollars ou dans une formule hors-texte, entre doubles
+dollars. La commande est la mme dans les deux cas, mais l'effet produit est
+diffŽrent. La variŽtŽ de flches disponibles est donnŽe ˆ la figure~1.
+\begin{figure}
+\settextarrowlength{45}
+\begin{center}
+\begin{tabular}{|l|c|l|}
+\hline
+{\bf Nom}&{\bf Flche}&{\bf Code}\\
+\hline\hline
+flche simple&$\ar$&ar\\
+flche pointillŽe&$\dotar$&dotar\\
+distributeur&$\dist$&dist\\
+monomorphisme&$\mono$&mono\\
+Žpimorphisme&$\epi$&epi\\
+bimorphisme&$\bimo$&bimo\\
+isomorphisme&$\iso$&iso\\
+ŽgalitŽ&$\eql$&eql\\ & & \\
+paire de flches&$\biar$&biar\\ & & \\
+flches adjointes&$\adjar$&adjar\\ & & \\
+paire de distributeurs&$\bidist$&bidist\\ & & \\
+distributeurs adjoints&$\adjdist$&adjdist\\
+\hline
+\end{tabular}
+\hspace{5mm}
+\begin{minipage}{30mm}
+Les codes {\em iso, dist, bidist, adjdist} sont gŽ\-nŽ\-ri\-ques:
+les mar\-ques $\cong$, $\circ$ peu\-vent tre chan\-gŽes a tout mo\-ment
+par les ins\-truc\-tions \verb+\isomark{...}+, \verb+\distmark{...}+
+o \verb+...+ sont les nou\-vel\-les mar\-ques. Les mar\-ques par dŽ\-faut sont
+\verb+\cong+ et \verb+\distcircle+.
+\end{minipage}
+\end{center}
+\caption{Les divers types de flches.}
+\settextarrowlength{20}
+\end{figure}
+\begin{itemize}
+\item Pour produire un type donnŽ de flche dans le sens direct (comme ˆ la
+figure~1), il suffit de frapper un {\em backslash} suivi du code pour ce type
+de flche: donc
+\verb+$f \colon A \mono B$+ produit $f \colon A \mono B$.
+\item Pour produire un type donnŽ de flche dans le sens opposŽ, frappez une
+commande commenant par \verb+\bk+ et se terminant par le code pour ce type de
+flche: donc
+\verb+$g \colon B \bkepi C$+ produit $g \colon B \bkepi C$.
+\item Pour donner un nom ˆ l'une des flches prŽcŽdentes, il suffit de frapper
+en majuscule la premire lettre de la commande et de donner le nom comme
+argument: donc
+\verb+$C \Dist h D$+ produit $C \Dist h D$.
+Bien entendu, dans le cas de doubles flches, il faut donner deux noms:
+d'abord celui de la flche supŽrieure puis celui de la flche infŽrieure:
+par exemple
+\verb+$D \Bkadjar ij E$+ produit $D \Bkadjar ij E$. Comme d'habitude, quand les
+noms ne sont pas des caractres uniques, utilisez des accolades pour les
+dŽlimiter.
+\end{itemize}
+Pour vous permettre de juger la diffŽrence entre les flches
+dans le texte et les flches hors-texte, voici les flches prŽcŽdentes
+produites hors-texte
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+via les commandes
+\begin{verbatim}
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+\end{verbatim}
+
+La longueur par dŽfaut d'une flche dans le texte est 20pt et son nom Žventuel
+est produit en taille {\em scriptstyle}; la longueur par dŽfaut d'une flche
+hors-texte est 30pt et son nom Žventuel est produit en taille {\em textstyle}.
+Ces longueurs par dŽfaut peuvent tre modifiŽes ˆ tout moment via des
+instructions
+\begin{verbatim}
+\settextarrowlength{25}
+\setdisplayarrowlength{40}
+\end{verbatim}
+o 25 et 40 expriment les nouvelles longueurs en points.
+
+\section{Construire un diagramme}
+
+Pour construire un diagramme bi-dimensionnel, imaginez un rŽseau de points,
+visualisŽ par des cercles et des ``boulets'' dans la figure~2:
+\begin{figure}
+\begin{diagram}
+\XB¤\XA¤\XB¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\cross{\XA}{\sear}¤\cross{\XA}{\esear}¤\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\XB¤\cross{\XA}{\ssear}¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\XA¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤¤
+\XB¤\XA¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\end{diagram}
+\caption{Conception d'un diagramme bi-dimensionnel.}
+\end{figure}
+les boulets indiquent les points du rŽseau o l'on peut s'attendre ˆ trouver un
+objet. Chaque objet et chaque flche est attachŽ par son centre en un point du
+rŽseau. Il suffit maintenant d'ŽnumŽrer les ŽlŽments, ligne par ligne et
+colonne par colonne, comme pour une matrice; en particulier quand tous les
+ŽlŽments non vides d'une ligne ont ŽtŽ ŽnumŽrŽs, on peut passer directement ˆ
+la ligne suivante. Tous les ŽlŽments sont traitŽs automatiquement en mode
+mathŽmatique. Le programme prend soin de choisir correctement la longueur de
+chaque flche.
+
+Un objet se frappe comme n'importe quelle formule mathŽmatique. Les rgles pour
+introduire une flche sont compltement analogues ˆ celles de la section~2: les
+divers types de flches sont de nouveau ceux de la figure ~1 tandis que les
+directions possibles et leur code sont donnŽes ˆ la figure~3.
+\begin{figure}
+\begin{diagram}[60]
+\XB¤\XA¤\V{0}{10}{nwnnw}¤\XA¤\V{0}{10}{nnnw}¤\XA¤\XB¤\XA¤\V{0}{10}{nnne}¤
+\XA¤\V{0}{10}{nenne}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle nwwnw$}}¤\XA¤\XB¤\XA¤
+\V{-5}{10}{\boldface{nnw}}¤\XA¤\XB¤\XA¤\V{5}{10}{\boldface{nne}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+neene$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\nwnnwar}¤\cross{\XA}{\nnnwar}¤\XA¤\cross{\XA}{\nnnear}¤
+\cross{\XA}{\nennear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwnw$}}¤\XA¤\V{-10}{10}{\boldface{wnw}}¤\cross{\XA}{\nwwnwar}¤
+\V{-5}{10}{\boldface{nw}}¤\cross{\XA}{\bold\nnwar}¤\V{0}{10}{\boldface{n}}¤
+\cross{\XA}{\bold\nnear}¤\V{5}{10}{\boldface{ne}}¤\cross{\XA}{\neenear}¤
+\V{10}{10}{\boldface{ene}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eene$}}¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwnwar}¤\cross{\XA}{\bold\wnwar}¤\cross{\XA}{\bold\nwar}¤
+\cross{\XA}{\bold\nar}¤\cross{\XA}{\bold\near}¤\cross{\XA}{\bold\enear}¤
+\cross{\XA}{\eenear}¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\XB¤\XA¤\V{-10}{0}{\boldface{w}}¤\cross{\XA}{\bold\war}¤\XB¤
+\cross{\XA}{\bold\ear}¤\V{10}{0}{\boldface{e}}¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwswar}¤\cross{\XA}{\bold\wswar}¤\cross{\XA}{\bold\swar}¤
+\cross{\XA}{\bold\sar}¤\cross{\XA}{\bold\sear}¤\cross{\XA}{\bold\esear}¤
+\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwsw$}}¤\XA¤\V{-10}{-10}{\boldface{wsw}}¤\cross{\XA}{\swwswar}¤
+\V{-5}{-10}{\boldface{sw}}¤\cross{\XA}{\bold\sswar}¤\V{0}{-10}{\boldface{s}}¤
+\cross{\XA}{\bold\ssear}¤\V{5}{-10}{\boldface{se}}¤\cross{\XA}{\seesear}¤
+\V{10}{-10}{\boldface{ese}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\swsswar}¤\cross{\XA}{\ssswar}¤\XA¤\cross{\XA}{\sssear}¤
+\cross{\XA}{\sessear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+swwsw$}}¤\XA¤\XB¤\XA¤\V{-5}{-10}{\boldface{ssw}}¤\XA¤\XB¤\XA¤
+\V{5}{-10}{\boldface{sse}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle seese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\V{0}{-10}{swssw}¤\XA¤\V{0}{-10}{sssw}¤\XA¤\XB¤\XA¤\V{0}{-10}{ssse}¤
+\XA¤\V{0}{-10}{sesse}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{Les 32 directions de flches dans un diagramme.}
+\end{figure}
+Prenant une certaine libertŽ avec la gŽographie et la trigonomŽtrie,
+les 32 directions considŽrŽes ont reu les noms habituels dans
+la rose des vents.
+\begin{itemize}
+\item Pour produire un type de flche dans une direction donnŽe, frappez un
+{\em backslash} suivi du code de la direction et du code de la flche.
+Par exemple
+\verb+\nemono+ founit un monomorphisme orientŽ au nord-est.
+\item Pour mettre un nom au-dessus d'une flche, frappez la premire lettre de
+la commande en majuscule et donnez le nom comme argument. Par exemple
+\verb+\Ssedist f+ fournit un distributeur $f$ orientŽ au sud-sud-est. Bien
+entendu dans le cas de doubles flches il faut donner deux noms: d'abord celui
+de la flche supŽrieure puis celui de la flche infŽrieure. Dans le cas de
+flches verticales, le nom appara”t ˆ gauche de la flche.
+\item La procŽdure pour mettre un nom en-dessous d'une flche est analogue:
+frappez cette fois la dernire lettre de la commande en majuscule et donnez le
+nom comme argument. Donc \verb+\wbimO f+ produit un bimorphisme $f$ orientŽ ˆ
+l'ouest. Dans le cas de flches verticales, le nom appara”t cette fois ˆ
+droite. Pour les doubles flches, les deux procŽdures pour insŽrer les noms
+sont Žquivalentes.
+\end{itemize}
+Les 12 types de flches de la figure~1 existent dans les 16 directions
+principales, imprimŽes en gras ˆ la figure~3; dans les 16 autres directions,
+seules les flches simples existent.
+
+Il reste ˆ expliquer la syntaxe pour frapper un diagramme. C'est simplement
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+\noindent o \verb+...+ indiquent les ŽlŽments successifs. Donc un simple \S\
+est le dŽlimiteur entre deux ŽlŽments d'une mme ligne, tandis qu'un double
+\S\S\ indique la fin d'une ligne\footnote{Si l'utilisation du symbole \S\ vous
+cause un problme, remplacez-le par n'importe quel symbole que vous ne risquez
+gure d'utiliser dans un diagramme, par exemple ?; vous pouvez effectuer ce
+changement de manire globale et automatique dans le fichier {\em Diagram}.}. Il
+est impŽratif de frapper le double \S\S\ ˆ la fin de la dernire ligne et rien ne
+peut se trouver entre ce double \S\S\ et l'instruction \verb+\end{diagram}+ (il
+y a une seule exception, exposŽe dans la section~6). N'oubliez pas un espace
+blanc pour indiquer un ŽlŽment vide, car deux \S\S\ consŽcutifs seraient
+interprŽtŽs comme la fin de la ligne. Plusieurs blancs sont, comme toujours,
+Žquivalents ˆ un seul.
+
+
+Donc le diagramme~1,
+\begin{floatingdiagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+qui a exactement la forme ŽvoquŽe par la figure ~2, est produit
+par les instructions suivantes:
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+Il existe un second environnement, parfaitement analogue, pour produire des
+diagrammes; il prend la forme
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{floatingdiagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{floatingdiagram}
+\end{verbatim}%
+\endgroup%
+\noindent Comme son nom l'indique, le diagramme est cette fois introduit comme
+corps flottant et se trouve numŽrotŽ automatiquement (cf.~diagrammes~1 ˆ~3). Le
+choix par dŽfaut est de numŽroter successivement les diagrammes ˆ travers tout
+le document. Vous pouvez prŽfŽrer un numŽro 3.12 pour, par exemple, le douzime
+diagramme du chapitre~3 (dans un style avec des chapitres!). Ceci s'obtient par
+l'instruction
+\begin{verbatim}
+\setdiagramcounter{chapter}
+\end{verbatim}
+o bien entendu {\em chapter} peut tre remplacŽ par tout autre niveau de
+sectionnement: {\em part, section,\ldots} Pour des textes rŽdigŽs dans une
+autre langue que l'anglais, vous pouvez traduire le mot {\em Diagram}
+prŽcŽdant le numŽro en donnant, par exemple, l'instruction
+\begin{verbatim}
+\diagramlabel{Diagramme}
+\end{verbatim}
+n'importe o dans le texte, mais pas ˆ l'intŽrieur d'un diagramme.
+
+Chaque diagramme, flottant ou non, peut en outre recevoir une lŽgende.
+Cela se fait via une instruction
+\begin{verbatim}
+\diagramcaption{...}
+\end{verbatim}
+qui peut se donner n'importe o dans le diagramme, mais avant les derniers
+\S\S. Dans le cas d'un diagramme flottant, cette lŽgende complte la
+numŽrotation automatique, comme au diagramme~4.
+
+\section{Modifications de tailles}
+
+Le pas du rŽseau formel de points sous-tendant un diagramme est de 40 unitŽs,
+o l'unitŽ par dŽfaut est le point. Un facteur d'Žchelle peut tre
+appliquŽ ˆ cette valeur par dŽfaut, via une instruction
+\begin{verbatim}
+\setdefaultscale{75}
+\end{verbatim}
+(facteur d'Žchelle 75\%); cette instruction s'applique ˆ tous les diagrammes
+ul\-tŽ\-rieurs et doit tre donnŽe en dehors de tout environnement {\em
+diagram} ou {\em floatingdiagram}. Si vous souhaitez appliquer un facteur
+d'Žchelle ˆ un seul diagramme, donnez ce facteur d'Žchelle comme argument
+optionnel de l'environnement correspondant; par exemple
+\begin{verbatim}
+\begin{diagram}[125]
+........
+\end{diagram}
+\end{verbatim}
+pour un agrandissement de 125\%, et de manire analogue pour les diagrammes
+flottants. Le facteur d'Žchelle donnŽ ainsi pour un diagramme spŽcifique se
+subsitue ˆ la valeur par dŽfaut en vigueur, juste le temps du digramme
+concernŽ. Par exemple le digramme~1 est ˆ l'Žchelle 100\% et le diagramme~2 ˆ
+l'Žchelle 75\%. Observez l'effet prŽcis d'un tel facteur d'Žchelle, qui n'est
+en rien une homthŽtie brutale.
+\begin{floatingdiagram}[75]
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+
+Pour motiver les notions suivantes, considŽrons la conception d'un diagramme
+tri-dimensionnel, comme ˆ la figure~4. Comparez tout d'abord la dispositon
+des ``boulets'' par rapport ˆ celle de la figure~2.
+\begin{figure}
+\begin{diagram}[50]
+\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\XA¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\cross{\XA}{\sar[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA
+ ¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤
+ ¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤\XA¤\cross{\XA}{\sar[130]}¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\XA¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{Conception d'un diagramme tri-dimensionnel}
+\end{figure}
+Dans ce cas non seulement il faut ``croiser'' des flches en un mme point du
+rŽseau formel, mais il faut aussi considŽrer des flches traversant plusieurs
+points du rŽseau avant d'atteindre les objets qu'elles relient. En fait {\em
+Diagram} suppose toujours qu'une flche relie les deux points adjacents du
+rŽseau dans la direction de la flche. Si ce n'est pas le cas, c'est ˆ vous de
+dŽterminer la longueur de la flche correspondante.
+
+Pour imposer une longueur spŽcifique ˆ une flche d'un diagramme, donnez
+l'Žtendue correspondante de la flche comme argument optionnel\footnote{Cet
+argument doit impŽrativement tre un nombre entier positif; toute autre chose, y
+compris la valeur d'un compteur, troublerait profondŽment \TeX. Les flches ˆ
+inclure dans le texte (section~2) n'admettent pas cet argument optionnel.}:
+l'Žtendue d'une flche horizontale ou verticale est sa longueur; l'Žtendue des
+autres flches est la longueur de leur projection horizontale (voir le manuel
+\LaTeX, {\em Picture environment}, pour de plus amples dŽtails). Donc
+\verb+\Near[60]f+ dessine une flche $f$ d'Žtendue 60 unitŽs, orientŽe au
+nord-est. Voici les valeurs par dŽfaut des Žtendues des diverses flches: 50
+dans les directions n, s, e, w; 59 dans les directions ne, nw, se, sw; 133 dans
+les directions ene, ese, wnw, wsw; 67 dans les directions nne, sse, nnw, ssw;
+211 dans les directions eene, eese, wwnw, wwsw; 71 dans les directions nnne,
+ssse, nnnw, sssw; 215 dans les direction neene, seese, nwwnw, swwsw; 143 dans
+les directions nenne, sesse, nwnnw, swssw. Dans la plupart des cas, vous
+obtiendrez l'Žtendue requise en augmentant la valeur par dŽfaut d'autant de fois
+40 que la flche traverse de points supplŽmentaires du rŽseau.
+
+En ce qui concerne les flches ``croisŽes'', la commande
+\begin{verbatim}
+\cross{element 1}{element 2}
+\end{verbatim}
+vous permet d'introduire simultanŽment {\em element 1} et {\em element 2}
+en un mme point du rŽseau, sans perturber la construction gŽnŽrale
+du diagramme; ces deux {\em elements} peuvent tre indiffŽremment des
+objets ou des flches.
+Le diagramme~3, conu ˆ la figure~4, peut donc s'obtenir comme
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+
+Enfin vous pouvez modifier l'Žpaisseur du trait d'une flche en frappant
+d'abord la commande \verb+\bold+; donc \verb+\bold\nar+ produit une flche
+grasse orientŽe au nord. Cette option \verb+\bold+ est supprimŽe
+automatiquement par le symbole \S\ suivant; vous pouvez aussi l'annuler plus
+t™t (par exemple dans une commande \verb+\cross+) par l'instruction
+\verb+\unbold+. Voyez la figure~3 pour des exemples de flches grasses.
+
+
+\section{Les flches courbes}
+
+{\em Diagram} fournit Žgalement huit flches courbes pouvant tre utilisŽes
+pour relier des points distants le long d'un bord d'un diagramme;
+le code pour une flche courbe est {\em curvar}. Ces flches sont prŽsentŽes ˆ
+la figure ~5, ˆ l'Žchelle 50\%,
+\begin{figure}
+\begin{diagram}[50]
+\cdot¤\ear¤\cross{\XB}{\Necurvar{ne}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Nwcurvar{nw}}¤\ear¤\cdot¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cross{\XB}{\Wncurvar{wn}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Escurvar{es}}¤ ¤ ¤ ¤ ¤
+\cross{\XB}{\Wscurvar{ws}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Encurvar{en}}¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cdot¤\ear¤\cross{\XB}{\Swcurvar{sw}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Securvar{se}}¤\ear¤\cdot¤¤
+\spacing(15,0,15)
+\end{diagram}
+\caption{Les huit flches courbes.}
+\end{figure}
+avec les codes de direction correspondants. La premire lettre du code de
+direction indique la position de la flche par rapport au diagramme; la seconde
+lettre prŽcise l'orientation globale de la flche. Ainsi \verb+\wscurvar+
+dessine une flche courbe, ˆ l'ouest du diagramme, orientŽe au sud. Comme pour
+les autres flches, une premire (ou dernire) lettre majuscule permet
+d'affubler la flche d'un nom.
+
+Les flches courbes sont des exemples typiques d'ŽlŽments qui sont
+gŽ\-nŽ\-ra\-le\-ment introduits via la commande \verb+\cross+ de la section~4, en
+un point du rŽseau partagŽ avec un objet ou une autre flche. Dans la figure~5,
+les ``boulets'' indiquent le centre formel des flches courbes, c'est-ˆ-dire le
+point du rŽseau en lequel elles sont attachŽes.
+
+La longueur par dŽfaut des flches courbes est 160 unitŽs, fournissant la
+situation de la figure~5. Comme les autres flches introduites dans un
+diagramme, une longueur arbitraire peut tre imposŽe comme premier argument
+optionnel.
+
+Les flches courbes sont Žgalement incluses dans {\em MiniDiagram} et {\em
+MicroDiagram}.
+
+
+\section{Corrections d'espacements}
+
+{\em Diagram} dŽtermine les dimensions d'un diagramme en comptant le nombre de
+lignes et de colonnes. Quand les dimensions rŽelles diffrent sensiblement de
+celles estimŽes par ce procŽdŽ, par exemple quand vous introduisez des flches
+courbes le long d'un diagramme, une correction d'espacement peut tre
+nŽcessaire. Elle se rŽalise via l'instruction \verb+\spacing(t,b,l)+ qui doit
+im\-pŽ\-ra\-ti\-ve\-ment tre donnŽe entre les derniers \S\S\ et l'instruction
+\verb+\end{diagram}+ (ou \verb+\end{floatingdiagram}+). Cette
+commande\footnote{N'abbrŽviez pas cette commande, cela troublerait profondŽment
+\TeX.} ajoute un espacement de $t$ points au dessus du diagramme, $l$ points ˆ
+gauche et $b$ points en dessous. $t$, $l$, $b$ sont des entiers positifs ou
+nŽgatifs.
+
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}[80]
+\diagramcaption{What a nice diagram!}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\spacing(10,-15,10)
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+L'usage de la commande \verb+\cross+ peut provoquer des collisons
+entre une flche et le nom d'une autre flche. Ceci et d'autres situations
+inhabituelles peuvent tre corrigŽes par les instructions suivantes,
+qui ne perturbent pas la construction gŽnŽrale du diagramme.
+\begin{itemize}
+\item \verb+\movename(n,m){f}+ dŽplace le nom $f$ d'une flche $n$ points vers
+la droite et $m$ points vers le haut.
+\item \verb+\movearrow(n,m){\arrow}+ dŽplace la flche \verb+\arrow+ (et son
+nom Žventuel) $n$ points vers la droite et $m$ points vers le haut.
+\item
+\verb+\movevertex(n,m){XXX}+ dŽplace l'objet $XXX$ $n$ points vers la droite et
+$m$ points vers le haut.
+\item \verb+\movevertexleft{XXX}+ dŽplace un trop long objet $XXX$ situŽ ˆ
+gauche d'un diagramme de sorte que la flche horizontale suivante garde une
+longueur maximale.
+\item \verb+\movevertexright{XXX}+ dŽplace un trop long objet $XXX$
+situŽ ˆ droite d'un diagramme de sorte que la flche horizontale
+prŽcŽdente garde une longueur maximale.
+\end{itemize}
+
+Par exemple, le diagramme~4
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D) ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ (E\oplus F)\otimes(G\oplus H) ¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)} ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ \movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Ajustements automatiques et manuels.} ¤¤
+\end{floatingdiagram}
+a ŽtŽ obtenu en frappant
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D)¤\Ear f¤X\oplus V¤¤
+\Sar g¤ ¤\saR h¤¤
+Y\oplus W¤\eaR i¤(E\oplus F)\otimes(G\oplus H)¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)}¤\Ear f¤X\oplus V¤¤
+\Sar g¤ ¤\saR h¤¤
+Y\oplus W¤\eaR i¤\movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Ajustements automatiques et manuels.}¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+Le carrŽ supŽrieur est donc produit automatiquement par {\em Diagram}
+tandis que le carrŽ infŽrieur a ŽtŽ ajustŽ par l'utilisateur. A vous de
+choisir.\vfill
+
+\mbox{}\hfill{\footnotesize An English version of this user's guide is also
+available.}
+
+
+\end{document}
diff --git a/macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me b/macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me
new file mode 100644
index 0000000000..f15aefe8e4
--- /dev/null
+++ b/macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me
@@ -0,0 +1,579 @@
+\documentstyle{article}
+
+\textheight520pt
+\textwidth349pt
+\footskip15pt
+
+\hoffset-35mm
+\voffset-35mm
+
+\title{User's guide for {\em Diagram 3}\thanks{With respect
+to versions 1 and 2, the shape of arrows has been improved, the variety of
+directions and arrows available has been more than doubled, all diagram arrows
+admit an optional length argument, the typing of diagrams has been shortened, error
+and help messages have been introduced. To typeset with {\em Diagram~3}, diagrams
+prepared with versions~1 or~2, read the file {\em OldDiagram} after the file {\em
+Diagram}.}}
+\author{Francis Borceux, Louvain-la-Neuve}
+
+\font\bldfc=cmmib10
+\def\boldface#1{\mbox{\bldfc#1}}
+
+\newcommand{\XA}%
+{\truex{300}%
+\begin{picture}(0,0)%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}
+
+\newcommand{\XB}%
+{\truex{500}%
+\begin{picture}(0,0)%
+\put(0,0){\circle*{\value{x}}}%
+\end{picture}}
+
+\newcommand{\V}[3]{\cross{\XB}{\movevertex(#1,#2){\scriptstyle#3}}}
+
+\begin{document}
+
+\maketitle
+
+\section{The {\em Diagram} macros}
+
+The {\em Diagram macros} realize the construction of diagrams as
+those appearing in category theory texts. The user gives the list
+of vertices and arrows to be included, just as when composing a
+matrix, and the program takes care of computing the dimensions of
+the arrows and realizing the pagesetting. All the user has to do
+about the arrows is precising their type (monomorphism, pair of
+adjoint arrows,\ldots) and their direction (north,
+south-east,\ldots): 12 types and 32 directions are available; see
+figures~1 and~3 for exhaustive lists.
+
+A file {\em MultipleArrows} exists, producing additional
+triple, quadruple and quintuple arrows, parallel or adjoint, but
+the size of those pictures is so big that severe restrictions apply
+to them.
+
+The {\em Diagram macros} make a big use of \LaTeX\ commands and
+cannot work without \LaTeX\ being loaded.
+
+Some small implementations of \TeX, essentially those limited to
+$2^{16}$ words of memory, are unable to handle the {\em Diagram
+macros}. For those cases, two levels of restricted files have been
+created, where the restriction applies just to the number of types
+of arrows:
+\begin{itemize}
+\item {\em MicroDiagram} is only able to design plain arrows;
+\item {\em MiniDiagram} designs plain arrows, pairs of
+plain arrows and adjoint pairs of plain arrows.
+\end{itemize}
+The restriction is even more subtle, since arrows are produced
+here in a more economical way.
+
+Big diagrams require much \TeX\ memory when typesetting; if you are
+badly limited, try to produce them as separate one-page documents. To save
+memory, you can also cancel from a file those macros you are not intending to
+use. Do not copy macros from {\em Diagram} to {\em MiniDiagram} or {\em
+MicroDiagram}\/: this would not work.
+
+The {\em Diagram macros} have been designed to give optimal results
+on printers with resolutions up to 300dpi. In the case of printers
+with higher resolutions, the parameter {\em printerresolution}
+given as a first instruction of the file {\em Diagram} must be changed
+accordingly. Notice that reducing this parameter is another way of
+saving \TeX\ memory. This parameter does not exist in the files
+{\em MicroDiagram} and {\em Minidiagram}.
+
+\section{Arrows in formulas}
+
+Arrows can be introduced in formulas, thus in a line of
+text between single dollars or in a displayed formula, between
+double dollars. While the command to be given is the same, the
+effect which is produced is different in the text and in a
+displayed formula. The variety of arrows available is described in
+figure~1.
+\begin{figure}
+\settextarrowlength{45}
+\begin{center}
+\begin{tabular}{|l|c|l|}
+\hline
+{\bf Name}&{\bf Arrow}&{\bf Code}\\
+\hline\hline
+plain arrow&$\ar$&ar\\
+dotted arrow&$\dotar$&dotar\\
+distributor&$\dist$&dist\\
+monomorphism&$\mono$&mono\\
+epimorphism&$\epi$&epi\\
+bimorphism&$\bimo$&bimo\\
+isomorphism&$\iso$&iso\\
+equality&$\eql$&eql\\ & & \\
+pair of arrows&$\biar$&biar\\ & & \\
+adjoint arrows&$\adjar$&adjar\\ & & \\
+pair of distributors&$\bidist$&bidist\\ & & \\
+adjoint distributors&$\adjdist$&adjdist\\
+\hline
+\end{tabular}
+\hspace{5mm}
+\begin{minipage}{30mm}
+The codes {\em iso, dist, bidist, adjdist} are generic:
+the marks $\cong$, $\circ$ can be changed anywhere in the document via the
+instructions \verb+\isomark{...}+, \verb+\distmark{...}+,
+where \verb+...+ are the new marks. The default marks are \verb+\cong+ and
+\verb+\distcircle+.
+\end{minipage}
+\end{center}
+\caption{The various types of arrows.}
+\settextarrowlength{20}
+\end{figure}
+\begin{itemize}
+\item To produce a given type of formula arrow
+in the forward direction (as in figure~1), just type a {\em
+backslash} followed by the code for this type of arrow: thus
+\verb+$f \colon A \mono B$+ will produce $f \colon A \mono B$.
+\item To produce a given type of formula arrow in the ``backward'' direction, type a
+command starting with \verb+\bk+ and ending with the code for the type of
+arrow: thus \verb+$g \colon B \bkepi C$+ produces $g \colon B \bkepi C$.
+\item To give an upper name to one of the previous arrows, just use
+a first uppercase letter and give the name as an argument: thus
+\verb+$C \Dist h D$+ will produce $C \Dist h D$. Of course, when
+the picture consists of two arrows, two names must be given, first
+the top one and next the bottom one; for example
+\verb+$D \Bkadjar ij E$+ to produce $D \Bkadjar ij E$. As usual, when
+the names are not single tokens, use curly brackets to delimit them.
+\end{itemize}
+To let you appreciate the difference between {\em textstyle} and
+{\em displaystyle}, here are the previous arrows in {\em display
+style}
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+introduced via the commands
+\begin{verbatim}
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+\end{verbatim}
+
+The default length of a {\em text arrow} is 20pt while the names
+are processed in {\em scriptstyle}; the default length of a {\em display
+arrow} is 30 pt and the names are processed in {\em textstyle}. The
+default lengthes can be changed at any time in the document via
+instructions of the form
+\begin{verbatim}
+\settextarrowlength{25}
+\setdisplayarrowlength{40}
+\end{verbatim}
+where 25 and 40 express the new lengthes in points.
+
+\section{Constructing a diagram}
+
+To construct a 2-dimensional diagram, imagine a pattern of
+points, visualized by circles and bullets as in figure~2:
+\begin{figure}
+\begin{diagram}
+\XB¤\XA¤\XB¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\cross{\XA}{\sear}¤\cross{\XA}{\esear}¤\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\XB¤\cross{\XA}{\ssear}¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\XA¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤¤
+\XB¤\XA¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\end{diagram}
+\caption{Conceiving a 2-dimensional diagram.}
+\end{figure}
+the bullets indicate the points of this pattern where vertices
+could be expected. Each vertex and each arrow is attached by its center at a
+point of the pattern. It suffices now to enumerate the items, line by line and
+column by column, like for a matrix; in particular when all actual items of a
+line have been enumerated, you can pass directly to the next line. All items are
+processed in math mode. The program will take care of choosing correctly the
+length of each arrow.
+
+A vertex is typed as any mathematical formula. The rules for typing
+an arrow are completely analogous to those of section~2:
+the various types of arrows are again those of figure~1 while
+the possible directions and their codes are given in figure~3.
+\begin{figure}
+\begin{diagram}[60]
+\XB¤\XA¤\V{0}{10}{nwnnw}¤\XA¤\V{0}{10}{nnnw}¤\XA¤\XB¤\XA¤\V{0}{10}{nnne}¤
+\XA¤\V{0}{10}{nenne}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle nwwnw$}}¤\XA¤\XB¤\XA¤
+\V{-5}{10}{\boldface{nnw}}¤\XA¤\XB¤\XA¤\V{5}{10}{\boldface{nne}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+neene$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\nwnnwar}¤\cross{\XA}{\nnnwar}¤\XA¤\cross{\XA}{\nnnear}¤
+\cross{\XA}{\nennear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwnw$}}¤\XA¤\V{-10}{10}{\boldface{wnw}}¤\cross{\XA}{\nwwnwar}¤
+\V{-5}{10}{\boldface{nw}}¤\cross{\XA}{\bold\nnwar}¤\V{0}{10}{\boldface{n}}¤
+\cross{\XA}{\bold\nnear}¤\V{5}{10}{\boldface{ne}}¤\cross{\XA}{\neenear}¤
+\V{10}{10}{\boldface{ene}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eene$}}¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwnwar}¤\cross{\XA}{\bold\wnwar}¤\cross{\XA}{\bold\nwar}¤
+\cross{\XA}{\bold\nar}¤\cross{\XA}{\bold\near}¤\cross{\XA}{\bold\enear}¤
+\cross{\XA}{\eenear}¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\XB¤\XA¤\V{-10}{0}{\boldface{w}}¤\cross{\XA}{\bold\war}¤\XB¤
+\cross{\XA}{\bold\ear}¤\V{10}{0}{\boldface{e}}¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwswar}¤\cross{\XA}{\bold\wswar}¤\cross{\XA}{\bold\swar}¤
+\cross{\XA}{\bold\sar}¤\cross{\XA}{\bold\sear}¤\cross{\XA}{\bold\esear}¤
+\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwsw$}}¤\XA¤\V{-10}{-10}{\boldface{wsw}}¤\cross{\XA}{\swwswar}¤
+\V{-5}{-10}{\boldface{sw}}¤\cross{\XA}{\bold\sswar}¤\V{0}{-10}{\boldface{s}}¤
+\cross{\XA}{\bold\ssear}¤\V{5}{-10}{\boldface{se}}¤\cross{\XA}{\seesear}¤
+\V{10}{-10}{\boldface{ese}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\swsswar}¤\cross{\XA}{\ssswar}¤\XA¤\cross{\XA}{\sssear}¤
+\cross{\XA}{\sessear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+swwsw$}}¤\XA¤\XB¤\XA¤\V{-5}{-10}{\boldface{ssw}}¤\XA¤\XB¤\XA¤
+\V{5}{-10}{\boldface{sse}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle seese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\V{0}{-10}{swssw}¤\XA¤\V{0}{-10}{sssw}¤\XA¤\XB¤\XA¤\V{0}{-10}{ssse}¤
+\XA¤\V{0}{-10}{sesse}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{The 32 directions for {\em Diagram} arrows.}
+\end{figure}
+Taking some
+liberty with geography and trigonometry, the 32 directions considered
+by the {\em Diagram macros} are named after those of the compass card.
+\begin{itemize}
+\item To produce a type of arrow in a given direction, type a {\em
+backslash} followed by the code of the direction and the code of
+the arrow. For example \verb+\nemono+ draws a north-east
+monomorphism.
+\item To give an upper name to a diagram arrow, use a first upper case
+letter and give the name as an argument. For example
+\verb+\Ssedist f+ draws a south-sout-east distributor with upper
+name $f$. Of course, when the picture consists in two arrows,
+two names must be given: first the upper one and next the lower one.
+In the case of vertical arrows, read {\em left} instead of {\em
+upper}.
+\item The procedure for giving a lower name is analogous, but uses
+a last uppercase letter. Thus \verb+\wbimO f+ produces a west
+bimorphism with lower name $f$. In the case of vertical arrows,
+read {\em right} instead of {\em lower}. For two-arrow pictures,
+both naming procedures are equivalent.
+\end{itemize}
+All 12 types of arrows exist in all 16 principal directions printed in bold
+in figure~3; just plain arrows are provided in the 16 other
+directions.
+
+It remains to explain the syntax\footnote{This syntax uses the character \S. If
+this is a problem for you, just replace \S\ by any character you are unlikely to
+use in a digram, for example ?; you can safely make this change globally and
+automatically in the file {\em Diagram}.} for typing diagrams. This is just
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+\noindent where \verb+...+ denote the various items of the diagram. So a
+single \S\ is the delimiter between two items of a same line, while
+a double \S\S\ indicate the end of a line. Typing the double \S\S\ at the end of the last line is
+compulsory and nothing should stand between this double \S\S\ and the
+\verb+\end{diagram}+ instruction (well, there is a single exception to this rule,
+explained in section~6). Do not forget a blank space to indicate an empty item,
+since two consecutive \S\S\ would be interpreted as an {\em end of line} symbol; of
+course several blank spaces are always equivalent to a single one.
+
+So diagram~1,
+\begin{floatingdiagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+which has the precise shape of the diagram conceived in figure~2, is produced by
+the following commands:
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+There is a second, completely analogous environment for producing
+diagrams; it has the form
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{floatingdiagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{floatingdiagram}
+\end{verbatim}%
+\endgroup%
+\noindent As the name indicates, the diagram is then introduced as
+a floating body and will automatically receive a numbered label
+(cf.~diagrams~1~to~3). The default is to number successively the
+diagrams through all the document. You can prefer
+a number 3.12 for, let us say, the twelfth diagram of chapter~3
+(in a style which contains chapters!). This is forced
+by the instruction
+\begin{verbatim}
+\setdiagramcounter{chapter}
+\end{verbatim}
+where, of course, {\em chapter} can be replaced by any sectioning
+level, for example {\em part, section,\ldots} For non-English texts, you
+will also want to ``translate'' the word {\em Diagram} in the label: this
+is achieved by an instruction like
+\begin{verbatim}
+\diagramlabel{Diagramme}
+\end{verbatim}
+given anywhere in the text, but not inside a diagram.
+
+Every diagram, floating or not, can be given a caption. This is done
+by the instruction
+\begin{verbatim}
+\diagramcaption{...}
+\end{verbatim}
+which can be introduced anywhere in the diagram, but before the last two
+\S\S. In the case of a floating diagram, this caption completes the automatic
+label, as in diagram~4.
+
+\section{Changing the sizes}
+
+The step of the pattern
+underlying a diagram is 40~units, where the default value of the unit is 1pt.
+This default value can be ``scaled'' at any time in the document by giving an
+instruction like
+\begin{verbatim}
+\setdefaultscale{75}
+\end{verbatim}
+(scaling factor of 75\%); this instruction applies to all subsequent diagrams
+and must be given outside a diagram environment.
+If you want to apply a scaling factor to just one specific diagram, give the
+scaling factor as an optional argument of the corresponding environment; thus
+type
+\begin{verbatim}
+\begin{diagram}[125]
+........
+\end{diagram}
+\end{verbatim}
+for an enlargement of 125\%, and correspondingly for floating diagrams. The
+scaling factor given for a specific diagram overrides the {\em defaultscale}
+value just for this specific diagram. For example, diagram~1 is not scaled and
+diagram~2 is the same diagram, scaled at 75\%. Observe the precise
+effect of the scaling option: this is by no way a brute homothetic process.
+\begin{floatingdiagram}[75]
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+
+To motivate the next features, consider the conception of a
+3-dimensional diagram, as in figure~4. Compare first the subpattern of bullets
+with that of figure~2.
+\begin{figure}
+\begin{diagram}[50]
+\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\XA¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\cross{\XA}{\sar[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA
+ ¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤
+ ¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤\XA¤\cross{\XA}{\sar[130]}¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\XA¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{Conceiving a 3-dimensional diagram}
+\end{figure}
+In this case, not only you must
+``cross'' different arrows at a same point of the pattern,
+but you must also consider arrows which cross several points
+of the pattern before reaching the objects they connect. In fact, the {\em
+Diagram macros} assume that an arrow attached at some point of the
+pattern connects the two adjacent points of the pattern, in the direction of the
+arrow. When this is not the case, it is left on you to determine the length of
+the corresponding arrow.
+
+To impose a specific length to a diagram arrow, just give the corresponding extent as
+an optional argument\footnote{This argument should be an actual positive
+integer; anything else, including the value of a counter, could put \TeX\ in
+deep trouble. The formula arrows (section~2) do not admit this optional
+argument.}:the extent of vertical and horizontal arrows is their length; the extent
+of other arrows is the length of their horizontal projection (see \LaTeX\ manual,
+{\em Picture environment}, for further explanations). Thus \verb+\Near[60]f+ draws a
+north-east arrow of horizontal extent 60 units with upper name $f$. Here are
+the basic default extents of diagram arrows: 50 in the directions n, s, e, w;
+59 in the directions ne, nw, se, sw; 133 in the directions ene, ese, wnw,
+wsw; 67 in the directions nne, sse, nnw, ssw; 211 in the directions
+eene, eese, wwnw, wwsw; 71 in the directions nnne, ssse, nnnw,
+sssw; 215 in the direction neene, seese, nwwnw, swwsw; 143 in the
+directions nenne, sesse, nwnnw, swssw. In most circumstances, you will obtain
+the required extent by augmenting the basic default extent by 40 for
+each additional point of the formal pattern crossed by the arrow.
+
+As far as ``crossing arrows'' is concerned, the command
+\begin{verbatim}
+\cross{item 1}{item 2}
+\end{verbatim}
+allows you to introduce at the same time {\em item~1} and {\em
+item~2} at the same point of the pattern; those two items can be
+indifferently vertices or arrows. Diagram~3,
+conceived in figure~4, must thus be typed as
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+
+Finally you can change the thickness of a diagram arrow by typing first the command
+\verb+\bold+; thus \verb+\bold\nar+ produces a bold north arrow. This
+\verb+\bold+ option will be cancelled by the next \S\ sign; you can cancel its
+effects earlier (for example during a \verb+\cross+ command) by the
+instruction \verb+\unbold+. See figure~3 for examples of bold arrows.
+
+\section{Curved arrows}
+
+The {\em Diagram macros} provide also eight curved arrows which can be used
+for connecting two rather distant points lying on a same edge of a diagram;
+the code for curved arrows is {\em curvar}.
+These arrows are presented in figure~5, scaled at 50\%,
+\begin{figure}
+\begin{diagram}[50]
+\cdot¤\ear¤\cross{\XB}{\Necurvar{ne}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Nwcurvar{nw}}¤\ear¤\cdot¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cross{\XB}{\Wncurvar{wn}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Escurvar{es}}¤ ¤ ¤ ¤ ¤
+\cross{\XB}{\Wscurvar{ws}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Encurvar{en}}¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cdot¤\ear¤\cross{\XB}{\Swcurvar{sw}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Securvar{se}}¤\ear¤\cdot¤¤
+\spacing(15,0,15)
+\end{diagram}
+\caption{The eight curved arrows}
+\end{figure}
+together with the
+corresponding direction codes. The first
+letter of the direction code indicates the position of the arrow with respect to the
+diagram; the second letter indicates the global direction of the arrow. So
+\verb+\wscurvar+ draws a curved arrow, on the west side of the diagram, oriented
+to the south. As for the other arrows, a first (or last) upper case letter allows you
+to name the curved arrows.
+
+Curved arrows are a typical example of items which are generally introduced
+via the \verb+\cross+ command of section~4, at a formal point of the pattern
+which they share with a vertex or another arrow. In figure~5, the bullets
+indicate the formal ``center'' of the curved arrows; i.e.~the point of the
+pattern where to attach them.
+
+The default extent of curved arrows is 160 units, yielding the situation of
+figure~5. As for other diagram arrows, an arbitary extent can be imposed as a
+first optional argument (again an actual positive integer!).
+
+Curved arrows are also part of the {\em MicroDiagram} and {\em Minidiagram}
+packages.
+
+\section{Spacing adjustments}
+
+The {\em Diagram macros} determine the dimensions of a diagram by counting the
+number of rows and columns in the formal pattern. When the actual dimensions
+are rather different from those estimated in this way, for example when you
+introduce curved arrows along a diagram, a spacing correction can be needed.
+This is realized via the command \verb+\spacing(t,l,b)+
+which must imperatively be given between the \S\S\ of the last line and the
+instruction \verb+\end{diagram}+ (or \verb+\end{floatingdiagram}+). This
+command\footnote{Do not
+abbreviate that command, this would put \TeX\ in deep trouble.}
+adds $t$ points space at the top of the diagram, $l$ points space at the left and
+$b$ points space at the bottom. $t$, $l$, $b$ should be positive or negative
+integers.
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}[80]
+\diagramcaption{What a nice diagram!}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\spacing(10,-15,10)
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+When using the \verb+\cross+ command, it can also happen that an arrow
+collides with the name of another arrow. To take care of this and other
+unusual situations, commands exist to move elements of a diagram without
+disturbing the general construction.
+\begin{itemize}
+\item \verb+\movename(n,m){f}+ moves the name $f$ of an arrow $n$ points right
+and $m$ points up.
+\item \verb+\movearrow(n,m){\arrow}+ moves the arrow \verb+\arrow+ (and its
+name when there is one) $n$ points right and $m$ points up.
+\item \verb+\movevertex(n,m){XXX}+ moves the vertex $XXX$ $n$ points right and
+$m$ points up.
+\item \verb+\movevertexleft{XXX}+ moves a too long vertex $XXX$
+positioned on the left edge of a diagram,
+so that the next horizontal arrow keeps maximal length.
+\item \verb+\movevertexright{XXX}+ moves a too long vertex $XXX$
+positioned on the right edge of a diagram,
+so that the previous horizontal arrow keeps a maximal length.
+\end{itemize}
+
+For example, diagram~4
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D) ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ (E\oplus F)\otimes(G\oplus H) ¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)} ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ \movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Automatic and manual adjustments} ¤¤
+\end{floatingdiagram}
+has been obtained by just typing
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D)¤\Ear f¤X\oplus V¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W¤\eaR i¤(E\oplus F)\otimes(G\oplus H)¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)}¤\Ear f¤ X\oplus V¤¤
+\Sar g¤ ¤\saR h¤¤
+Y\oplus W¤\eaR i¤\movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Automatic and manual adjustments}¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+The upper square is thus produced automatically by the {\em Diagram macros},
+while the lower square has been adjusted by the user. Make your choice.
+\vfill
+
+\mbox{}\hfill{\footnotesize Une version fran\c caise de ce mode d'emploi est
+\'egalement disponible.}
+
+
+\end{document}
diff --git a/macros/generic/diagrams/circ/COPYING b/macros/generic/diagrams/circ/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/macros/generic/diagrams/circ/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/generic/diagrams/circ/Makefile b/macros/generic/diagrams/circ/Makefile
new file mode 100644
index 0000000000..00d731fbc9
--- /dev/null
+++ b/macros/generic/diagrams/circ/Makefile
@@ -0,0 +1,115 @@
+# Makefile to install CIRC
+# Copyright (C) 1998 Andreas Tille
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# -- Testversion --
+# It is very likely to contain errors!!!!!!!!!!!!
+# Use it only at your own risk!!
+# Please report errors in this file to tille@physik.uni-halle.de
+#
+# Andreas Tille 03/16/1998
+#
+INSTDIR=/usr/local/lib/texmf
+CIRCMF=$(INSTDIR)/mf/circ
+CIRCTEX=$(INSTDIR)/tex/circ
+FONTMAP=/usr/lib/texmf/fontname/special.map
+CIRCMFFILES=cibimos \
+ cicirc \
+ cidiod \
+ cioptic \
+ ciphysic\
+ cirest \
+ cisym \
+ ciwidko
+PKFONTDIR=/var/spool/texmf/pk
+TFMDIR=/var/spool/texmf/tfm
+
+all: circ.drv circ.dtx
+
+.PHONY: all
+
+doc: circ.dvi circ.dtx
+
+circ.drv: circ.dtx
+ tex circ.dtx
+
+install: circ.drv
+# delete old CIRC METAFONT files
+ if [ -d $(CIRCMF) ] ; then \
+ rm -rf $(CIRCMF)/ci*.mf $(CIRCMF)/csym.mf $(CIRCMF)/defcirc.mf ; \
+ else \
+ mkdir -p $(CIRCMF) ; \
+ fi
+# move new CIRC METAFONT files
+ mv *.mf $(CIRCMF)
+# delete old CIRC TeX files
+ if [ -d $(CIRCTEX) ] ; then \
+ rm -rf $(CIRCTEX)/*.def $(CIRCTEX)/circ.sty ; \
+ else \
+ mkdir -p $(CIRCTEX) ; \
+ fi
+# move new CIRC TeX files
+ mv *.def circ.sty $(CIRCTEX)
+# check fontmap special.map file for existing CIRC entries and
+# append the necessary entries if not available
+ if [ ! -f $(FONTMAP) ] ; then \
+ mkdir -p `dirname $(FONTMAP)` ; \
+ touch $(FONTMAP) ; \
+ fi
+ if [ `grep -i -s -c cicirc $(FONTMAP)` -eq 0 ] ; then \
+ echo "@c CIRC fonts written by Sebastian Tannert and Andreas Tille" >> $(FONTMAP) ; \
+ fi
+ for mffile in $(CIRCMFFILES) ; \
+ do \
+ if [ `grep -i -s -c $$mffile $(FONTMAP)` -eq 0 ] ; then \
+ echo "$$mffile public circ % CIRC-package" >> $(FONTMAP) ; \
+ fi \
+ done
+ make cleanpk
+ make cleantfm
+
+circ.dvi: circ.drv circ.dtx
+ latex circ.drv
+ makeindex -s circ.ist circ.idx
+ latex circ.drv
+ makeindex -s circ.ist circ.idx
+ latex circ.drv
+
+cleantfm:
+# delete old CIRC TFM files (according to entries in special.map)
+ if [ -d $(TFMDIR)/public ] ; then \
+ rm -rf $(TFMDIR)/public/circ ; \
+ fi
+
+cleanpk:
+# delete old CIRC PK files (according to entries in special.map)
+ if [ -d $(PKFONTDIR) ] ; then \
+ for deldir in `find $(PKFONTDIR) -name circ -type d | grep "public/circ"` ; \
+ do \
+ rm -rf $$deldir ; \
+ done \
+ fi
+
+clean:
+ rm -f circ.log circ.idx circ.aux circ.toc circ.ind circ.ilg circ.ist *.600pk *.tfm
+
+cleansource:
+ rm -f *.mf *.def circ.sty
+
+veryclean:
+ make clean
+ make cleansource
+ rm -f cidoc.tex circ.drv circ.dvi cisyms.tex index.hlp
diff --git a/macros/generic/diagrams/circ/README b/macros/generic/diagrams/circ/README
new file mode 100644
index 0000000000..de0f64d975
--- /dev/null
+++ b/macros/generic/diagrams/circ/README
@@ -0,0 +1,22 @@
+
+NEW VERSION OF CIRC
+
+This is CIRC version 1.0f.
+
+The package \CIRC is a tool for typesetting circuit diagrams. It
+defines several electrical symbols like resistor, capacitor,
+transistors etc. This symbols can be connected with wires in a
+very easy manner.
+
+For using \CIRC you only need \METAFONT and \LaTeX{}. You do not
+need postscript or any drawing tool. You can expand \CIRC easily
+with your own symbols, written in \METAFONT.
+
+CIRC is an open system. As an example in this package is an
+optics style with lenses, mirrors and so on to show, how to use
+the macros and expand the package.
+
+It runs with LaTeX2e.
+
+To install \CIRC first run TeX on "circ.dtx" or LaTeX on "circ.ins" !
+
diff --git a/macros/generic/diagrams/circ/circ.dtx b/macros/generic/diagrams/circ/circ.dtx
new file mode 100644
index 0000000000..1316a676e6
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.dtx
@@ -0,0 +1,6053 @@
+%^^A last update: Fri 03-13-1998
+%\iffalse
+%*******************************************************************
+%*** Please run tex circ.dtx to install the CIRC package ***
+%*** or run latex circ.dtx to generate a documentation. ***
+%*******************************************************************
+%<*installation>
+% Hint: Comment the next line out to force installation under LaTeX.
+% \let\documentclass\relax
+\expandafter\ifx\csname documentclass\endcsname\relax \input docstrip
+\askforoverwritefalse\maxoutfiles{10} %<-- change this if you have problems
+% CIRC is a LaTeX package to typeset circuit and optics diagrams.
+% Copyright (C) 1997,1998,2003,2009 Sebastian Tannert and Andreas Tille
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, see <http://www.gnu.org/licenses/>.
+%
+% For error reports concerning UNCHANGED versions of this file no
+% more than one year old, see CIRC.DVI after installation.
+% If installation fails search thru this file for 'bug'.
+%
+%
+\preamble
+CIRC is a LaTeX package to typeset circuit and optics diagrams.
+Copyright (C) 1997,1998,2003 Sebastian Tannert and Andreas Tille
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+For error reports concerning UNCHANGED versions of this file no
+more than one year old, see CIRC.DVI after installation.
+If installation fails search thru this file for 'bug'.
+\endpreamble
+
+ \keepsilent
+ \generate{
+ \file{circ.sty} {\from{circ.dtx}{code}}
+ \file{ic.def} {\from{circ.dtx}{ic}}
+ \file{gate.def} {\from{circ.dtx}{gate}}
+ \file{oldgate.def} {\from{circ.dtx}{oldgate}}
+ \file{box.def} {\from{circ.dtx}{box}}
+ \file{basic.def} {\from{circ.dtx}{basic}}
+ \file{optics.def} {\from{circ.dtx}{optics}}
+ \file{physics.def} {\from{circ.dtx}{ciphysic}}
+ \file{cisyms.tex} {\from{circ.dtx}{doc}}
+ \file{cidoc.tex} {\from{circ.dtx}{docsty}}
+ \file{circ.drv} {\from{circ.dtx}{driver}}
+ }
+\postamble
+\endpostamble
+ \generate{
+ \file{defcirc.mf} {\from{circ.dtx}{defcircmf}}
+ \file{csym.mf} {\from{circ.dtx}{csym}}
+ \file{cioptic.mf} {\from{circ.dtx}{optic}}
+ \file{ciphysic.mf} {\from{circ.dtx}{ciphysicmf}}
+ \file{ciwidko.mf} {\from{circ.dtx}{csywidko}}
+ \file{cidiod.mf} {\from{circ.dtx}{csydiod}}
+ \file{cirest.mf} {\from{circ.dtx}{csyrest}}
+ \file{cicirc.mf} {\from{circ.dtx}{csycirc}}
+ \file{cibimos.mf} {\from{circ.dtx}{csybimos}}
+ \file{cisym.mf} {\from{circ.dtx}{csysym}}
+ \file{index.hlp} {\from{circ.dtx}{indexhlp}}
+ }
+\message{*********************************************************************}
+\message{^^JNow you should copy all *.def *.sty-files to your TEXINPUT-directory.}
+\message{^^JPlease run "latex circ.drv" and read the section installation.}
+\message{^^JAfter generating the fonts, please rerun "latex circ.drv".}
+\message{^^JThen you will get a complete documentation.}
+\message{^^JFor generating an index please read the file index.hlp.}
+\message{*********************************************************************}
+\csname fi\endcsname\end\endinput\fi
+%</installation> end-metacomment \fi
+% \def\filedate{2003/06/13}
+%^^A last update: Fri 03-13-1998
+% \def\fileversion{v1.0f}
+%
+% \title{Package
+% \raise8mm\hbox{\expandafter\ifx\csname circfonts\endcsname\relax\else
+% \circuit2 \CIRCLogo \endcircuit\fi}\\[5mm]
+% \fileversion\ last revised \filedate}
+% {
+% \def\thefootnote{\fnsymbol{footnote}}
+% \author{Sebastian Tannert\footnote{macro code}\\
+% Andreas Tille\footnote{documentation, optics}}}%
+% \parskip 1mm\parindent0pt
+%
+% \font\manual=logo10
+% \def\MF{{\manual METAFONT}\xspace}
+% \def\MP{{\manual METAPOST}\xspace}
+% \def\META{{\manual META}\xspace}
+% \def\CIRC{{\sf CIRC}\xspace}
+% \def\CB#1{{\tt\char'134 #1}\index{#1@\string\texttt{\string\char'134 #1}}}
+% \def\warp#1{{\tt\char'134 #1}}
+% \def\Blank{{\tt\char32}}
+% \def\einruck{\hspace*{1cm}}
+% \def\example#1{\par\medskip\einruck#1\par\medskip}
+% \def\kohm{$\,$k$\Omega$}
+% \newcommand{\Descriptionlabel}[1]{\mbox{\textsf{#1}}\hfil}
+% \newenvironment{Description}[1]%
+% {\begin{list}{}%
+% {\renewcommand{\makelabel}{\Descriptionlabel}%
+% \setlength{\parsep}{0pt}%
+% \setlength{\itemsep}{0pt}%
+% \setlength{\itemindent}{0pt}%
+% \setlength{\topsep}{0pt}%
+% \setbox0=\hbox{\Descriptionlabel{#1}}%
+% \setlength{\labelwidth}{\wd0}%
+% \dimen0=\labelwidth\advance\dimen0 by \labelsep%
+% \setlength{\leftmargin}{\dimen0}}}%
+% {\end{list}}
+%
+% \batchmode
+% \iffalse First we have to check the fonts. \fi
+% \font\checkcircfonts=cirest
+% \dimen0=\fontdimen6\checkcircfonts
+% \ifdim\dimen0>0pt \def\circfonts{exist}\fi
+% \errorstopmode
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% The package \CIRC is a tool for typesetting circuit diagrams
+% and block schematics.
+% It defines several electrical symbols such as resistors, capacitors,
+% transistors etc. These symbols can be connected with wires in a
+% very easy way.
+%
+% To use \CIRC you only need \MF and \LaTeXe{}. You do not need
+% PostScript or any drawing tool. You can expand \CIRC easily with
+% your own symbols, written in \MF.
+% \end{abstract}
+%
+% \vskip 15mm
+% \expandafter\ifx\csname circfonts\endcsname\relax\else
+%\begin{circuit}{0}
+%\.1 \- 1 r \nl\cc\R1 {R} r
+%\frompin .1 \- 3 l \- 2 d \nl\R9 {2R} d
+%\- 10 d \.7
+%\frompin .7 \- 3 l \cc\U0 {} - u
+%\frompin .1 \- 2 d \nl\cc\R2 {2\,R} d \nl\SW1 {} s U
+%\frompin SW1c \vtopin U0+ \.8
+%\frompin SW1o \vtopin U0- \.9
+%\frompin R1r \- 1 r
+%\.3 \- 1 r \nl\cc\R5 {R} r
+%\frompin .3 \- 2 d \nl\cc\R6 {2\,R} d \nl\SW3 {} s u
+%\frompin SW3c \vtopin U0- \.12
+%\frompin SW3o \vtopin U0+ \.13
+%\frompin R5r \- 1 r
+%\.4 \- 2 r \nl\cc\R7 {R$_1$= 2R} r
+%\frompin .4 \- 2 d \nl\cc\R8 {2\,R} d \nl\SW4 {} s U
+%\frompin SW4c \vtopin U0+ \htopin U0+
+%\frompin SW4o \vtopin U0- \.15
+%\frompin R7r \- 1 r \nl\whatI1 {I} s r
+%\- 1 r \.5 \- 1 r \nl\OV1 {} - {} {} {}
+%\frompin .5 \- 3 u \centerto OV1 \nl\cc\R10 {R$_2$} r
+%\frompin R10l \htopin .5
+%\atpin OV1O \.6 \vtopin R10r \htopin R10r
+%\frompin .6 \- 1 r \connection1 {$U_a$} c r
+%\frompin OV1+ \- 1 l \- 3 d \nl\cc\R11 {R$_3$} d
+%\frompin R11b \vtopin .7 \.8 \GND1 \frompin .7 \htopin .8
+%\end{circuit}\fi
+% \clearpage
+% \tableofcontents
+% \enlargethispage{.5cm}
+% \section{Introduction}
+%
+% In several sciences circuit diagrams are necessary in publications.
+% Perhaps there are some PostScript tools for typesetting them or
+% a drawing program has to be used.
+% With \CIRC it is now possible to typeset circuit diagrams using
+% \TeX\ commands. The commands
+% describe the logical structure of the wiring scheme and \TeX\
+% builds the connections according to this structure.
+%
+% \CIRC defines several electrical symbols such as resistors, capacitors,
+% transistors etc. These symbols can be connected with wires in a
+% very easy way.
+%
+% To use \CIRC you only need \MF and \LaTeXe{}. You do not need
+% PostScript or any drawing tool. You can expand \CIRC with
+% your own symbols, written in \MF.
+%
+% \CIRC has been implemented as a turtle system. That means, there is
+% a current position from where the symbols and wires are drawn.
+% It is possible to choose the drawing direction and drawing position.
+%
+% \CIRC consists of commands in order to
+% \begin{Description}{position}
+% \item[draw] symbols and wires into the scheme,
+% \item[justify] symbols within the scheme,
+% \item[link] symbols with wires,
+% \item[position] symbols absolutely or relatively.
+% \end{Description}
+%
+% \section{Installation}
+%
+% Run |circ.ins| through \LaTeX. You will get a couple of
+% |*.mf| files. Use \MF to create |*.pk| fonts from all these files.
+% These steps depend on your installation.
+% For example, type:
+% \begin{verbatim}
+% mf \mode=localfont; input ciwidko.mf
+% gftopk ciwidko.300
+% \end{verbatim}
+% Do this with all the |*.mf| sources. Copy the resulting |*.tfm|
+% and |*.pk| files into appropriate directories.
+%
+% Copy the |*.sty|, |*.def| files, obtained from |circ.ins| into appropriate
+% directories in your |TEXINPUT| path.
+%
+% Read the documentation carefully.
+%
+% Enjoy \CIRC.
+%
+% We added a Makefile which is tested only under |Debian\GNU Linux|
+% (running |teTeX|). We would like to get comments whether it works
+% under other environments. {\bf Use it at your own risk!}. Type
+% \begin{verbatim}
+% make
+% \end{verbatim}
+% to get all files used by \CIRC. Before you type
+% \begin{verbatim}
+% make install
+% \end{verbatim}
+% you should check the correct PATH names in the Makefile. (Make sure
+% you run |make install| as root.) This will do the the following:
+% \begin{enumerate}
+% \item Delete old \CIRC files in |TEXINPUT| and |MFINPUT|.
+% \item Move the new |TEXINPUT| and |MFINPUT| to the appropriate
+% directories
+% \item Check the special.map file in the |Fontname| directory
+% whether there ary \CIRC related entries and create them
+% if failed. (This will ensure that \CIRC fonts will be
+% copied into reasonable directories when using |MakeTeXPK|
+% or |MakeTeXTFM|.)
+% \item Delete old PK and TFM files from \CIRC. (Using old TFM or
+% PK files is one of the "Top ten reasons" why failing \CIRC.)
+% \end{enumerate}
+% To get the documentation type
+% \begin{verbatim}
+% make doc
+% \end{verbatim}
+% (generally this is a good idea to create the needed fonts on the
+% fly).
+%
+% Once more: Please report any bug concerning this Makefile, because
+% this is the first test and not reliable at all.
+%
+%
+% \section{System requirements}
+%
+% \CIRC requires \LaTeXe\ and \MF.
+%
+%\section{Changes}
+% Unfortunately a change of the parameters for symbol drawing
+% commands had to be made. But now the rules are more consistent and
+% easier to remember. Please have a look at section~\ref{pars}.
+% Some new symbols were added and the font selection was modified
+% to work together with the slides class.
+% The appendix has a new design to be clearly arranged.
+% Font names have changed too.
+%
+% The |\<| command is obsolete now and should NOT used anymore.
+% A new |\_| command was defined, see section~\ref{position}.
+%
+% \section{Usage}
+%
+% \subsection{Preambel}
+%
+% \CIRC is divided into several parts. To use a part put the suitable
+% option in the |\usepackage| command. All parts are included
+% in the following example:
+%\example{\warp{usepackage[basic,box,gate,oldgate,ic,optics,physics]}\{|circ|\}}
+%
+% The parts contain:
+% \begin{Description}{physics\,:}
+% \item[basic\,:] a lot of symbols such as resistors, capacitors, switches,
+% diodes, transistors, etc.,
+% \item[box\,:] blackbox, oscilloscope, generator and amplifier,
+% \item[gate\,:] several logical circuits,
+% \item[oldgate\,:] old style logical gates,
+% \item[ic\,:] integrated circuits (flip flops, etc.) and
+% \item[optics\,:] the optical stuff with lenses, mirrors, etc.
+% (see section \ref{optic}),
+% \item[physics\,:] some mechanics stuff.
+% \end{Description}
+% A complete list of available symbols is given in the appendix.
+%
+% \subsection{Starting a circuit diagram}
+%
+% It is recommended to draw a sketch with pen and paper before using
+% \CIRC.
+%
+% Every circuit diagram is enclosed in the
+% |circuit| environment
+% \example{\CB{begin\{circuit\}}{\em size}}
+% where {\em size} is an integer
+% between 0 and 4 giving the size of symbols and describing text. A size
+% of 4 is useful for overhead foils.
+%
+% All \CIRC macros and the necessary parameters are separated by
+% spaces (\Blank). For a clearly arranged \CIRC diagram it is
+% advisable to put every command in a separate line (a linebreak
+% is interpreted as a blank as it is used in \TeX).
+%
+% \subsection{Drawing symbols}
+% \label{pars}
+% The table in the appendix contains a complete list of all
+% \CIRC symbols available and corresponding drawing commands.
+% The syntax of drawing commands is:
+% \example{\warp{}{\sf symbolname}{\em number\Blank
+% inscription\Blank{\tt[}specification\_parameter{\tt]}\Blank direction}}
+% or for more complex symbols:
+% \example{\warp{}{\sf symbolname}{\em number\Blank {\tt[}further\_parameters\tt ]}}
+% Note that you can leave out the blank between the symbol-command
+% and the following {\em number} parameter. This parameter has to
+% be unique in one drawing and is necessary for correct referring
+% (see |\atpin| in section \ref{poscmd}).
+%
+% The symbols can be classified into a lot of different symmetries
+% which are summarized in the appendix. There you will find more
+% detailed information about the parameters you have to use.
+% Generally the drawing direction of the symbol is given with the
+% {\em direction} parameter which is |l| (left), |r| (right),
+% |u| (up) or |d| (down).
+% If there exist 2 different alignments of a symbol for one
+% direction (e.g. if the LED-arrows show up or down) the second
+% alignment is chosen by capitalization of the {\em direction}
+% parameter (|L|, |R|, |U| or |D|).
+%
+%\iffalse
+% Due to the fact, that there are different symbols for different
+% drawing directions the right {\em direction} parameter is important.
+% The table in the appendix contains valid {\em direction} parameters
+% for every drawing command. This may be |h| (horizontal) or |v|
+% (vertical) for symbols with the symmetry two; |l| (left), |r| (right),
+% |u| (up) and |d| (down) for symbols with the symmetry four or
+% for symbols with the symmetry eight |l|, |L|, |r|, |R|, |u|, |U|,
+% |d| or |D|. The latter may need further {\em specification} parameter
+% in front of the {\em direction} parameter.
+% \fi
+% Symbols having two dissimilar or more connections may need
+% a further {\em specification} parameter in front of the {\em
+% direction} parameter.
+% This {\em specification} parameter marks the pin
+% that should be on the current drawing position (see variable resistor and
+% several transistors).
+%
+% In the appendix {\tt text} was used for the {\em inscription} and the
+% necessary {\em number} was set to {\tt n}. Note the position
+% at the symbol where the inscription is set.
+% The inscription can be suppressed by the \CB{nv} command in front
+% of the symbol-command.
+%
+% By default every \CIRC symbol is marked by a label.
+% This label consists of an abbreviation of the symbol indexed by
+% the {\em number}. To suppress
+% this labeling use \CB{nl} in front of the symbol-command.
+%
+% Another command affecting the inscription of a symbol is
+% \CB{cc}. It is also used in front of a symbol-command and causes the
+% change of label-position and inscription-position. By default the
+% inscription is typeset left or over the symbol while the labeling
+% is done right or under the symbol depending on the vertical or
+% horizontal orientation of the symbol.
+%
+% Some symbols need {\em further\_parameter}s. The usage
+% is selfdocumenting in the appendix table.
+%
+% Junctions can be made by the \CB{.} command
+% (\CB{junction})\footnote{Commands within
+% parenthesis are synonyms for the last introduced command.}.
+% The syntax is:
+% \example{\warp{.}{\em number}}
+% Every junction needs a {\em number} argument for further referencing.
+%
+% \subsection{Referencing symbols and pins}
+%
+% Some commands use reference parameters
+% to mark symbols or connections of symbols drawn before.
+%
+% The {\em symbol\_reference} parameters consist of two parts:
+% \example{{\sf symbolname}$\;${\em number}}
+%
+% The {\em pin\_reference} parameters consist of three parts:
+% \example{{\sf symbolname}$\;${\em number}$\;${\sf pinname}}
+% These three parts form the {\em reference} parameter.
+%
+% See the appendix for the pinnames, they are drawn nearby the pins.
+% If the symbol has no pregiven ones the standard names |l| for
+% the left connection, |r| for the right, |t| for the top and
+% |b| for the bottom one will be chosen.
+%
+% {\em Note that there is no blank between the parts!}
+%
+% For example, to refer to the \underline{l}eft connection of the
+% resistor with the {\em number} 1 the {\em pin\_reference} parameter
+% would be
+% \example{{\tt R1l}}
+% or to refer to the whole symbol the {\em symbol\_reference} is
+% \example{{\tt R1}\quad.}
+%
+%
+% At least it is possible to set markers which work like pin references.
+% \example{\CB{P}{\em number}}
+% sets a marker which can be referred to by |P|{\em number}.
+%
+% \subsection{Connecting symbols}
+%
+% Simple connections between the symbols can be made with the
+% \CB{-} command, which is an abbreviation of the \CB{wire}
+% command (see appendix). The syntax is
+% \example{\warp{-}\Blank{\em length}\Blank{\em direction}.}
+% The parameter {\em length} is an integer giving the number of
+% lengthsteps. In \CIRC wires are build as a queue of characters
+% 2.5\,mm each. Thus the length of wire is measured in multiples
+% of this length.
+%
+% The parameter {\em direction} determines the direction. Valid
+% values are |l| for left, |r| for right, |u| for up and |d| for
+% down. For instance, a wire is drawn to the left with a length of
+% 1\,cm (4 units) by typing
+% \example{\warp{-\Blank 4\Blank l}}
+%
+% There are some other line types to connect symbols. The command
+% \example{\CB{dashed}\Blank{\em length\Blank direction}}
+% draws a dashed line. It is written as the \warp{-} command.
+% With
+% \example{\CB{bundle}\Blank{\em text\Blank length\Blank direction} \\
+% \einruck\CB{wwire}\Blank{\em text\Blank length\Blank direction}}
+% a bundle of wire could be drawn or a pair of wire, respectively.
+% You can use \CB{=} as an abbreviation of |\wwire|.
+% The {\em text} may contain any comments.
+%
+% To connect the drawing position horizontally or vertically with
+% a certain pin of a symbol by using a reference, the useful
+% commands \CB{htopin} and \CB{vtopin} exist.
+% The syntax is:
+% \example{\warp{htopin}\Blank{\em pin\_reference} \\
+% \einruck\warp{vtopin}\Blank{\em pin\_reference}}
+% Provided that the resistor |R1| defined before by a |\R| command,
+% the command
+% \example{\warp{vtopin\Blank R1l}}
+% draws a vertical wire up to this height, where the resistor numbered
+% with |1| (|R1|) is situated. |\htopin| does the same but horizontally.
+%
+% The connection will be done by default with the \CB{wire} command.
+% To change the type of the connection use the \CB{by} command.
+% The syntax is:
+% \example{\warp{by\{}{\em command\/}|\}|}
+% where {\em command} can be one of the following: \CB{wire} (\CB{-}), \CB{dashed},
+% \mbox{\CB{bundle}\Blank{\em text}}, \mbox{\CB{wwire}\Blank{\em text}}
+% or \CB{oa} (which is declared in the optics part, see section \ref{optic}).
+%
+% For example, the command
+% \example{\warp{by\{}\warp{dashed\}}}
+% changes the drawing style from \warp{[hv]topin} to a dashed lines.
+% Do not forget to switch back to wires using
+% \example{\warp{by\{}\warp{wire\}}}
+% to end the dashed lines.
+%
+% Note that it is usually necessary to combine the |htopin|- and
+% |vtopin| commands, because these commands draw {\em only} horizontally
+% or vertically to the x- or the y-coordinates
+% of the given pin.
+%
+% \subsection{\label{poscmd}Positioning commands}
+% \label{position}
+% Positioning commands are used to change the current
+% drawing position.
+%
+% The direct positioning command \CB{at} (\CB{from}) sets the drawing position
+% to an absolute coordinate.
+% \example{\warp{at\{{\em x}\}\Blank\{{\em y}\}\Blank}}
+% sets the drawing position to the point ({\em x},{\em y}) in the coordinate
+% system, where {\em x} and {\em y} are integers counting the number of
+% arbitrary units (2.5\,mm). \CIRC starts drawing at $(0,0)$.
+%
+% It is recommended to avoid the absolute positioning of symbols, because
+% it tends to destroy the logical structure of the circuit diagram.
+%
+% The drawing position can be changed in relation to the current position
+% with the indirect positioning command \CB{moverel} (\CB{shift}).
+% \example{\warp{moverel\{{\em x}\}\Blank\{{\em y}\}\Blank}}
+% moves the drawing position {\em x} units to the right
+% and {\em y} units upwards.
+%
+% The command \CB{atpin} (\CB{frompin}) sets the drawing
+% position to a reference pin.
+% \example{\warp{atpin}\Blank{\em pin\_reference}}
+% allows further drawing starting from the reference pin. For example,
+% \example{\warp{atpin C2r}}
+% sets the drawing position to the right pin of the capacitor numbered 2.
+%
+% In a lot of cases a command like |\-| is useful, but it should
+% not draw the line. |\_| satisfy this need. As you know from
+% |\-| a {\em length} and a {\em direction} must be specified.
+%
+% \subsection{Justify commands}
+%
+% The command \CB{hcenterto} forces horizontal centering
+% according to a symbol referred to. The command \CB{vcenterto} does the
+% same but vertically.
+% The command \CB{centerto} centers the following symbol according to the
+% reference symbol
+% horizontally or vertically depending on the drawing direction of
+% the symbol beeing drawn.
+%
+% The syntax is:
+% \example{\warp{hcenterto}\Blank{\em symbol\_reference} \\
+% \einruck\warp{vcenterto}\Blank{\em symbol\_reference} \\
+% \einruck\warp{centerto}\Blank{\em symbol\_reference}}
+% For example,
+% \example{\warp{hcenterto L4}}
+% would force horizontal centering according to the coil numbered 4.
+%
+% \subsection{Text commands}
+%
+% The command
+% \example{\CB{put}|\{|{\em text}|\}|}
+% puts {\em text} at the current drawing position.
+% It can be used in the same way as the \warp{put} command of the
+% \LaTeX |picture| environment, but the coordinates have to be omitted
+% (because they are given by the current drawing position).
+%
+% To comment something the commands
+% \example{\CB{Utext}\Blank{\em text\Blank{\tt from}\Blank pin\_reference1\Blank{\tt to}\Blank pin\_reference2} \\
+% \einruck\CB{centertext}\Blank{\em text\Blank{\tt from}\Blank pin\_reference1\Blank{\tt to}\Blank pin\_reference2}}
+% can be used. \warp{centertext} prints {\em text} centered between
+% {\em pin\_reference1} and {\em pin\_reference2}.
+% \warp{Utext} additionally draws an arrow from
+% {\em pin\_reference1} to {\em pin\_reference2}.
+% Note that the reference pins must have the same x- or y-coordinate.
+%
+% To write overlapping information like the \TeX\ commands
+% \warp{rlap} and \warp{llap} the following commands are used:
+% \example{\CB{blap}|\{|{\em text}|\}| \\
+% \einruck\CB{tlap}|\{|{\em text}|\}|}
+% They put {\em text} which overlap to the bottom or the top, respectively.
+%
+% \expandafter\ifx\csname circfonts\endcsname\relax
+% \LARGE Please generate the fonts now. Then you will get a
+% complete documentation.\stop\fi
+%
+% \subsection{Example}
+%
+%A simple example is the diagram showing a circuit which is used for measuring
+%the amplification of current by a transistor.
+%\vskip 4mm
+%\begin{circuit}0
+%\npn1 {?} B l
+%\frompin npn1C
+%\- 1 u
+%\nl\A1 {$I_C$} u
+%\atpin npn1B
+%\- 1 l
+%\R1 {510\kohm} l
+%\- 1 l
+%\centerto A1
+%\nl\A2 {$I_B$} u
+%\frompin A2b
+%\vtopin R1l
+%\frompin A1t
+%\- 1 u \.1
+%\frompin A2t
+%\vtopin .1
+%\htopin .1
+%\- 1 u
+%\cc\connection1 {$U_b$} c u
+%\frompin npn1E
+%\- 1 d
+%\GND1
+%\end{circuit}
+%\vskip 4mm
+%
+%How to cope with such sketches?
+%
+%First of all, it is necessary to decide, which symbol should be the
+%first one.
+%The transistor seems to be a good choice to begin with in this
+%special case. The command \CB{npn} produces a npn-transistor
+%(see appendix); so the first line is
+%\example{\warp{npn1 {?} B l}}
+%which names the transistor |npn1| for further reference.
+%Instead of |{?}| any text describing the specific transistor
+%may be written. (Unfortunately this doesn't work today. See
+%future plans.) The third parameter |B| means, that the
+%\underline{b}ase of the transistor should be on the current
+%drawing position. Further more |C| for \underline{c}ollector
+%or |E| for the \underline{e}mitter contact would be possible.
+%The last parameter gives the direction, in this case the
+%base contact points to the \underline{l}eft (|l|).
+%
+%Use
+%\example{\warp{frompin npn1C}}
+%to continue drawing from the collector, and type
+%\example{\warp{- 1 u}}
+%to draw the needed wire \underline{u}pwards
+%to connect the amperemeter to measure $I_C$ which is created by the command
+%\example{\warp{nl}\warp{A1 \{\$I\_C\$\} u}}\qquad .
+%
+%The command \CB{nl} in front of the amperemeter avoids the default
+%inscription of "$I_1$" because this would not make any sense in this
+%case. Instead, the labeling is $I_C$. The last parameter {\tt u}
+%marks the direction (\underline{u}p).
+%
+%To draw the resistor connected with the base of the transistor
+%the proceeding is the same: use
+%
+%|\atpin npn1B |
+%to set drawing position (different from the current position),
+%
+%|\- 1 l |
+%to draw a piece of wire to the left and
+%
+%|\R1 {510\kohm} l |
+%for the resistor itself.
+%
+%A further horizontal piece of wire connects the resistor with the
+%second amperemeter: |\- 1 l |.
+%
+%The second amperemeter, measuring the current of the base ($I_B$),
+%would look nice at if drawn the same height as the first one,
+%measuring ($I_C$).
+%Measuring the length of wire needed to match the same height would be
+%difficult and a change of the diagram would cause further changes in
+%order to maintain the desired position.
+%Therefore it is advisable to use
+%\example{\CB{centerto} {\tt A1}\quad \warp{nl}\warp{A2 \{\$I\_B\$\} u}}
+%which leeds to the intended centering automatically. Because of the
+%\underline{u}p orientation of {\tt A2}, the centering is the same as
+%in the vertical direction.
+%
+%A vertical connection is needed to connect the amperemeter
+%with {$R_1$}. This may be done by
+%\example{\warp{frompin A2b} \\
+% \einruck\warp{vtopin R1l}}
+%which draw a wire down to the horizontal wire, starting at
+%|A2b|. Instead of the second line |\vtopin npn1B| would do the same job
+%because the horizontal position is irrelevant for \CB{vtopin}.
+%
+%To connect the two amperemeters the drawing position is set to |A1t|,
+%from where a wire is drawn upwards and a junction point is marked
+%at that point by using
+%\example{\warp{frompin A1t} \\
+% \einruck\warp{- 1 u} \\
+% \einruck\warp{.1}}
+%The commands for connecting the second amperemeter are:
+%\example{\warp{frompin A2t} \\
+% \einruck\warp{vtopin .1} \\
+% \einruck\warp{htopin .1}}
+%The combination of \CB{htopin} and \CB{vtopin} is very useful
+%to connect two points with an edge of wire.
+%The driving voltage is typeset by
+%\example{\warp{- 1 u} \\
+% \einruck\warp{cc}\warp{connection1 \{\$U\_b\$\} c u}}
+%because it looks better to put the inscription of the voltage on the
+%right. That is why the prefix \CB{cc} is used in front of
+%the \warp{connection} command.
+%
+%Finally the emitter contact leads to the ground:
+%\example{\warp{frompin npn1E} \\
+% \einruck\warp{- 1 d} \\
+% \einruck\warp{GND1}}
+%
+%The whole example once more in an overview:
+%\begin{verbatim}
+%\begin{circuit}0
+%\npn1 {?} B l % transistor
+%\frompin npn1C % draw from collector
+%\- 1 u % some wire
+%\nl\A1 {$I_C$} u % amperemeter for current of collector
+%\atpin npn1B % continue drawing from base
+%\- 1 l % some wire
+%\R1 {510\kohm} l % resistor
+%\- 1 l % some wire to the edge
+%\centerto A1 % draw centered to amperemeter 1
+%\nl\A2 {$I_B$} u % amperemeter 2
+%\frompin A2b % link amperemeter 2 with resistor
+%\vtopin R1l
+%\frompin A1t
+%\- 1 u
+%\.1 % junction
+%\frompin A2t % wire to amperemeter 2
+%\vtopin .1
+%\htopin .1
+%\- 1 u
+%\cc\connection1 {$U_b$} c u % driving voltage
+%\frompin npn1E
+%\- 1 d
+%\GND1 % ground
+%\end{circuit}
+%\end{verbatim}
+%
+%
+% \section{\label{optic}Optics}
+%
+% If the |optics| option is given in the |\usepackage| command, the
+% creation of simple optical diagrams is possible.
+%
+% The optical axis can be drawn with the \CB{oa} command, which
+% creates a dashed line.
+% The optical symbols
+% which are available are listed at the end of the appendix.
+%
+% Here is an example for using |optics|. With the knowledge
+% of drawing circuits the following code will speak for itself.
+% \vskip 4mm
+% \begin{circuit}{0}
+% \nl\Laser1 {} r
+% \oa 2 r
+% \Polar1 {} r
+% \oa 2 r
+% \nl\OM1 P1 {} {} {} {} h
+% \atpin OM1P3
+% \oa 4 r
+% \cc\BLens1 {} r
+% \oa 2 r
+% \nl\Pinhole1 {} r
+% \oa 7 r
+% \cc\SLens2 {} r
+% \oa 1 r
+% \Polar2 {} r
+% \oa 3 r
+% \oa 3 r
+% \nl\BSplit1 {} + d
+% \atpin BSplit1+
+% \oa 2 r
+% \nl\Cam1 {camera} . r
+% \atpin BLens1: \shift 0 2 \P3
+% \atpin Pinhole1: \shift 0 2 \P4
+% \atpin SLens2: \shift 0 2 \P5
+% \Dtext{\small $f_1$} from P3 to P4
+% \Dtext{\small $f_2$} from P4 to P5
+% \atpin BSplit1.
+% \oa 5 d
+% \Mirror1 {} * R
+% \oa 2 r
+% \nl\ScrL1 {screen} h
+% \end{circuit}
+% Here is the code:
+%
+% \begin{verbatim}
+% \begin{circuit}{0}
+% \nl\Laser1 {} r % laser
+% \oa 2 r % optical axis
+% \Polar1 {} r % polarizer
+% \oa 2 r
+% \nl\OM1 P1 {} {} {} {} h % optical modulator
+% \atpin OM1P3
+% \oa 4 r
+% \cc\BLens1 {} r % 1st lens
+% \oa 2 r
+% \nl\Pinhole1 {} r % pinhole
+% \oa 7 r
+% \cc\SLens2 {} r % 2nd lens
+% \oa 1 r
+% \Polar2 {} r % analyzer
+% \oa 3 r
+% \oa 3 r
+% \nl\BSplit1 {} + d % beam splitter
+% \atpin BSplit1+ % continue drawing right
+% \oa 2 r
+% \nl\Cam1 {camera} . r % camera
+% \atpin BLens1: \shift 0 2 \P3 % mark middle of 1st lens
+% \atpin Pinhole1: \shift 0 2 \P4 % mark middle of pinhole
+% \atpin SLens2: \shift 0 2 \P5 % mark middle of 2nd lens
+% \Dtext{\small $f_1$} from P3 to P4 % f_1
+% \Dtext{\small $f_2$} from P4 to P5 % f_2
+% \atpin BSplit1. % second part of beam down
+% \oa 5 d
+% \Mirror1 {} * R % mirror
+% \oa 2 r
+% \nl\ScrL1 {screen} h % white screen
+% \end{circuit}
+% \end{verbatim}
+%
+%
+% \section{Some hints for \CIRC programmers}
+%
+% Here are some hints to add further symbols to \CIRC.
+%
+% Before creating any new symbol consult very carefully the file |csym.mf|.
+% It contains a lot of very useful definitions to simplify writing new symbols.
+% Examples for the use of these definitions are given in the files
+% |ciwidko.mf| and |optic.mf|.
+% When possible it is strongly recommended to use the \MF commands
+% \begin{Description}{|fourfourchars|}
+% \item[|twochars|] for symbols with the symmetry two,
+% \item[|fourchars|] for symmetry four and
+% \item[|fourfourchars|] for symmetry eight,
+% \end{Description}
+% because the definition of the corresponding \TeX\ command
+% will need only one line! If there are any problems with \MF{}
+% do not hesitate to contact the authors.
+%
+% A new option file with the extension |def|,
+% for instance |newcirc.def|, has to be created to include
+% the written symbols. To include the new definitions add
+% |newcirc| to the options in the \warp{usepackage} command:
+% \example{\warp{usepackage[basic,newcirc]\{circ\}}\qquad .}
+%
+% The \CIRC-command \CB{freecirc} has to be used to start the
+% definitions of new commands in the file |newcirc.def|.
+% This ensures, that the asterix (`*') becomes active, because
+% all internal \CIRC commands contain the asterix. It is comparable to
+% \LaTeX 's \warp{makeatletter}. The \CIRC-command \CB{protectcirc}
+% has to be used at the end of the file |newcirc.def|
+% in order to restore the former
+% behaviour (comparable to \warp{makeatother}).
+%
+% The \CB{cdef*} commands are strongly recommended to declare commands
+% with the new symbols, because only one line is needed for the definition.
+% The files |basic.def| or |optics.def| contain examples for \warp{cdef} and
+% related commands, which are defined in |circ.sty|.
+%
+% To ensure that the new symbols are inserted in the right
+% magnification the command \CB{extracircinit} may be used.
+% It can be used in the same way as \warp{opticfontinit} is used
+% in |optics.def|. Both are defined in |circ.sty| as \warp{relax}
+% and are called when a new diagram is initialized. If it is necessary
+% to do any operations before starting a circuit diagram, then
+% it is possible to redefine \warp{extracircinit} to do the job.
+%
+% \section{Future plans}
+% \CIRC is still under development. A lot of users need
+% additional symbols or have other wishes. In most of the cases there is
+% a quick solution, but to give \CIRC the ability to be an easy
+% extendable tool (and to add more potentiality) it has to be rewritten.
+% Until this is done there could happen the following steps:
+%\begin{itemize}
+%\item solve the problem of inscriptions for transistors
+%\item redesign some symbols and reimplement the \MF sources
+%\item rewrite the font selection to fix some ugly effects
+%\item add color support and build a \MP port
+%\item use the NFSS2 to make different linethicknesses available
+%\item describe the link between \TeX\ and \META
+%\item update the documentation every time
+%\end{itemize}
+%
+%
+% \section{Contacting the authors}
+% Any bug reports, remarks, proposals for new options and symbols,
+% any improvements to both the code or the documentation
+% as well as some nice postcards are welcome.
+%
+% \medskip
+% \begin{tabular}{@{}p{.5\hsize}@{}p{.5\hsize}@{}}
+% Sebastian Tannert & Andreas Tille \\
+% WEN 67.02.01.06 & Gartenstra\ss e 8 \\
+% Harbigstra\ss e 14 & D-38855 Wernigerode \\
+% D-14055 Berlin & \\
+% &\\
+% tannert@physik.hu-berlin.de & tille@physik.uni-halle.de
+% \end{tabular}
+% \iffalse Some changes to the layout for the appendix. \fi
+%\advance\textheight\topmargin
+%\advance\textheight60pt
+%\advance\textheight\headsep
+%\advance\textheight\headheight
+%\newpage
+%\topmargin-30pt
+%\headsep0pt
+%\headheight0pt
+%\oddsidemargin10pt
+%\parindent 0pt
+%\lineskip4mm
+%^^A last update: Fri 03-13-1998
+% \section{\appendixname}
+%\def\spc{\,\texttt{\char'40}\,}
+%\def\num{\textit{number}}
+%\def\len{\textit{length}}
+%\def\dir{\textit{direction}}
+%\def\txt{\textit{text}}
+%\def\lab#1{\textit{label} \textrm{#1}\spc}
+% The symmetries and there parameters:\\[1mm]
+% \catcode`\|=12
+% \begin{tabular}{l|l}
+% symmetrie & parameter set \\[1mm]\hline
+% $\mathcal{OP}$ & \num\spc\\[1mm]
+% $\mathcal{LI}$ & \len\spc\dir\spc\\[1mm]
+% $\mathcal{LB}$ & \num\spc\txt\spc\dir\spc\\[1mm]
+% $\mathcal{TXT}$ & \txt\spc\texttt{from}\spc
+% \textit{pin\_reference1}\spc\texttt{to}\spc\textit{pin\_reference2}\spc\\[1mm]
+% $\mathcal{SO}$ & \num\spc\txt\spc\dir[l,r,u,d]\spc\\[1mm]
+% $\mathcal{SX}$ & \num\spc\txt\spc\dir[l,r,u,d,L,R,U,D]\spc\\[1mm]
+% $\mathcal{SXY}$ & \num\spc\txt\spc\dir[l,r,u,d]\spc\\[1mm]
+% $\mathcal{S\mathrm{3}P}$ & \num\spc\txt\spc\textit{pin\_name}\spc\dir[l,r,u,d,L,R,U,D]\spc\\[1mm]
+% $\mathcal{GI}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\\[1mm]
+% $\mathcal{GII}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\lab c\\[1mm]
+% $\mathcal{BX}$ & \num\spc\textit{pin\_name}\spc\lab a\lab b\lab c\lab d\\[1mm]
+% $\mathcal{BXT}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\lab c\lab d\\[1mm]
+% $\mathcal{IC}$ & \num\spc\txt\spc\textit{pin\_name}\spc\textit{style\footnote{Today this should be empty, like \{\}.}}\spc\\[1mm]
+% \end{tabular}\vskip 10mm
+% \MakePercentComment\input{cisyms}\MakePercentIgnore
+% \advance\hsize-4cm
+% \oddsidemargin35pt
+% \newpage
+% \PrintIndex
+% \iffalse DON'T process driver definitions!
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\begin{filecontents}{circ.ist}
+delim_0 "\\hfill "
+delim_t "\\hbox to 7mm{\\hss}"
+\end{filecontents}
+\documentclass{ltxdoc}
+\usepackage[basic,box,gate,oldgate,ic,optics,physics]{circ}
+\usepackage{t1enc}
+\usepackage{xspace}
+\IndexPrologue{\section{Index}}
+\makeindex
+\begin{document}
+\DocInput{circ.dtx}
+\end{document}
+%</driver>
+% \fi
+%^^A last update: Fri 03-13-1998
+%\iffalse
+%<*docsty>
+%\fi
+\chardef\backslash="5C
+\catcode`\|=12
+\parindent 2mm
+\lineskip 0pt
+\advance\textwidth by 39.4pt
+
+\def\lpin#1{\shift -1.1 0 \put{\tlap{\llap{\tt#1$\rfloor$}\vss}}}
+\def\bpin#1{\shift 0 -1.5 \put{\blap{\llap{\tt#1\hss}}}}
+\def\tpin#1{\shift 0 1.5 \put{\tlap{\llap{\tt#1\hss}}}}
+\def\rpin#1{\shift 1.1 0 \put{\tlap{\rlap{$\lfloor$\tt#1}\vss}}}
+
+\def\cdef#1 #2 #3#4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SXY}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cwdef#1 #2 #3 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #3\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname 6 r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{LI}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+
+
+\def\cwwdef#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname {text} 6 r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{LB}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\NgateIIO#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b c
+ \atpin{#1nI1} \lpin{I1} \atpin{#1nI2} \lpin{I2} \atpin{#1nO} \rpin{O}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GII}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\gateIIO#1 #2#3 #4#5 #6 #7 #8 {\noindent
+\hbox{\vbox to 3.8cm{\vskip 2mm
+ {\hsize 4.8cm \footnotesize #8\par}
+ \vfill
+ \hbox to 5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b c
+ \atpin{#1n#5} \lpin{#5} \atpin{#1n#7} \lpin{#7} \atpin{#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GII}$}\quad}
+ \vskip 2mm
+ \hrule width 5cm height .1pt}%
+ \vrule width.1pt height 3.8cm depth 0pt}\linebreak[1]}
+
+\def\NgateIO#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b
+ \atpin{#1nI} \lpin{I} \atpin{#1nI} \atpin{#1nO} \rpin{O}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GI}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefiv#1 #2 #3#4 #5 #6 #7 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #7\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#5} \lpin{#5}
+ \atpin {#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefivNL#1 #2#3 #4 #5 #6 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #6\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#4} \lpin{#4}
+ \atpin {#1n#5} \rpin{#5}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefiviv#1 #2 #3#4 #5 #6 #7 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #7\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#5} \lpin{#5}
+ \atpin {#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SO}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefivivNL#1 #2#3 #4 #5 #6 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #6\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#4} \lpin{#4}
+ \atpin {#1n#5} \rpin{#5}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SO}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefo#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{OP}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\optionline#1 {\vskip3mm
+ {\large Symbols provided by the option \fbox{\tt#1.def}}\\[3mm]}
+
+\def\bbdef#1 #2#3 #4 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #4\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n {text} : a b c d
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \atpin{#1nP3} \rpin{P3}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BXT}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\bbdefNeT#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\bbdefNeTii#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d h
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\sbdef#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d h
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\textdef#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0
+ \at 0 0 \P1 \at 6 0 \P2
+ \csname #1\endcsname {text} from P1 to P2 \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{TXT}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefviii#1 #2 #3#4 #5 #6 #7 #8 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #8\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : l
+ \atpin {#1n#5} \rpin{#5}
+ \atpin {#1n#6} \lpin{#6}
+ \atpin {#1n#7} \rpin{#7}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{S\mathrm{3}P}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\Ccirc#1 #2 #3#4{\noindent
+ \def\Clpin##1{\atpin{#1n##1} \lpin{##1} }
+ \def\Crpin##1{\atpin{#1n##1} \rpin{##1} }
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #3\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n {text} #2 {} #4
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{IC}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+%\iffalse
+%</docsty>
+%\fi
+%^^A last update: Fri 03-13-1998
+% \newpage
+% {\Large\bf The code of \CIRC.}\\\vskip 1mm
+% \begin{macrocode}
+%<*code>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{circ}
+ [1997/04/23 v1.0d for typeset circuit diagrams]
+\DeclareOption*{\InputIfFileExists{\CurrentOption.def}{}%
+ {\PackageError{CIRC}{File \CurrentOption.def not found.}%
+ {Check spelling or think about the
+ location of file.\MessageBreak
+ I tried to load macros for the CIRC package.}}}
+% \end{macrocode}
+%
+% Sorry, but it's better to stop here.
+% The sourcecode is formatted worst. \endinput
+%
+% F"ur die interne Namensgebung m"ussen einige Zeichen
+% in ihrem Kategoriekode als Buchstaben (11) eingetragen werden.
+% Der jetzige Kode wird in Definitionen abgelegt.
+% Das betrifft die Zeichen \verb+* [ ] @+.
+%
+% \begin{macrocode*}
+\def\freecirc{\chardef\CIRCinternals\the\catcode`\*\catcode`\*=11
+ \chardef\cc@lb\the\catcode`\[
+ \chardef\cc@rb\the\catcode`\]
+ \chardef\cc@at\the\catcode`\@
+ \catcode`\[=11\catcode`\]=11\catcode`\@=11 }
+\def\protectcirc{\catcode`\[=\cc@lb\catcode`\]=\cc@rb\catcode`\@=\cc@at
+ \catcode`\*=\CIRCinternals\relax}
+\freecirc
+% \end{macrocode*}
+%^^A last update: Fri 03-13-1998
+% Zu Testzwecken kann "uber \verb+\showpointstrue+ die
+% Anzeige aller definierter Anschlu"spunkte eingestellt werden.
+% \begin{macrocode}
+\newif\ifshowpoints
+\showpointsfalse
+% \end{macrocode}
+%
+% Alle mit * gekennzeichneten Schalter werden nach jeder Zeichenoperation
+% auf den entsprechenden Standardwert gesetzt.
+%
+% Die Darstellung der Beschriftung mit Schaltzeichentyp und Nummer
+% wird "uber \verb+\iflab+ getsteuert. *
+% \begin{macrocode}
+\newif\iflab*
+\lab*true
+% \end{macrocode}
+%
+% Schaltzeichenwerte k"onnen auch ausgeblendet werden. *
+% \begin{macrocode}
+\newif\ifval*
+\val*true
+% \end{macrocode}
+%
+% Die Zeichenrichtung wird durch \verb+\ifld+ bestimmt.
+% \begin{macrocode}
+\newif\ifld*
+\ld*false
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifcc*
+\cc*false
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newif\ifpin
+\pintrue
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifxoutofgrid
+\newif\ifyoutofgrid
+\xoutofgridfalse
+\youtofgridfalse
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifcen*
+\cen*false
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifhvcen*
+\hvcen*false
+% \end{macrocode}
+\newif\ifcheck*
+%
+% F"ur die Ermittlung der kleinsten Umschlie"senden Box werden die
+% beiden Variablen \verb+\X*max+ und \verb+\X*min+ bei jeder
+% Zeichenoperation aktualisiert. Sie enthalten die minimale und die
+% maximale Ausdehnung der Zeichenfl"ache in horizontaler Richtung.
+% \begin{macrocode}
+\newdimen\X*max
+\newdimen\X*min
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\*X*
+\newdimen\*Y*
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\**X
+\newdimen\**Y
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\***X
+\newdimen\***Y
+% \end{macrocode}
+%
+% In der Box \verb+\*bbox+ wird f"ur eine Zeichenoperation
+% das entsprechende horizontale Material gesammelt.
+% Diese Box wird dann durch \verb+\put*bbox+ entsprechend
+% der aktuellen Zeichenposition in die Box der entstehenden
+% Zeichnung "ubernommen.
+% \begin{macrocode}
+\newbox\*bbox
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newbox\box*
+\newdimen\ic*
+\newdimen\ht*
+\newdimen\wd*
+\newdimen\dp*
+%
+\newcount\cc*
+\newdimen\*spc
+\newtoks\ldd* %linke untere Beschriftung
+\newtoks\rud* %rechte obere Beschriftung
+%
+\newtoks\llpos*
+\newtoks\ldpos*
+\newtoks\rlpos*
+\newtoks\rdpos*
+\newtoks\ulpos*
+\newtoks\udpos*
+\newtoks\dlpos*
+\newtoks\ddpos*
+%
+\newcount\cnta*
+\newcount\cntb*
+%
+\newtoks\name* %Bauelementname
+\newtoks\ld*pin %Bezeichnung linker Anschlu"s
+\newtoks\ru*pin % ...
+\newtoks\m*pin % ...
+% \end{macrocode}
+%
+\newtoks\rmacros
+%
+% \begin{macrocode}
+\newdimen\outerspace
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\*Ilist
+\newtoks\*Olist
+% \end{macrocode}
+
+% \begin{macrocode}
+\newdimen\pin*spc
+\newdimen\pin*ind
+\newdimen\io*ind
+\newdimen\mid*ind
+\newdimen\pinnum*spc
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+\def\CIRCredef{}
+\def\safedef#1{\expandafter\ifx\csname#1\endcsname\relax
+\toks0{\expandafter\def\csname#1\endcsname}\else
+\edef\CIRCredef{\CIRCredef\expandafter\string\csname#1\endcsname\space}%
+\toks0{\expandafter\def\csname.#1.\endcsname}\rmacros
+\expandafter{\the\rmacros\let}\rmacros\expandafter\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname#1\endcsname}\rmacros\expandafter
+\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname.#1.\endcsname}\fi
+\the\toks0}
+\def\safedefs#1{\expandafter\ifx\csname#1\endcsname\relax
+\toks0{\expandafter\def\csname#1\endcsname}\else
+\edef\CIRCredef{\CIRCredef\expandafter\string\csname#1\endcsname\space}%
+\toks0{\expandafter\def\csname.#1.\endcsname}\rmacros
+\expandafter{\the\rmacros\let}\rmacros\expandafter\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname#1\endcsname}\rmacros\expandafter
+\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname.#1.\endcsname}\fi
+\the\toks0 }
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\getc*#1 {\advance\cc* by #1%
+ \ifcc*
+ \toks0\ldd*\ldd*\rud*\rud*\toks0
+ \ifval*
+ \iflab*\val*true\else\val*false\fi
+ \lab*true
+ \else
+ \iflab*\val*true\else\val*false\fi
+ \lab*false
+ \fi
+ \fi
+ \global\setbox\box*=\hbox{\char\cc*\/\global\ic*=\lastkern\unkern}%
+ \global\ht*\ht\box*\global\wd*\wd\box*\global\dp*\dp\box*}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\check*max#1{\dimen0=#1\advance\dimen0\*X*
+ \ifdim\dimen0>\X*max\global\X*max\dimen0\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*X{\ifcheck*\ifdim\*X*<\X*min\global\X*min\*X*\fi
+ \ifdim\*X*>\X*max\global\X*max\*X*\fi\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*min#1{\dimen0=-#1\advance\dimen0\*X*
+ \ifdim\dimen0<\X*min\global\X*min\dimen0\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*#1{\check*min{#1}\check*max{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*cen{\ifcen*\errhelp{Use `\hcenterto' or `\vcenterto'.}%
+ \errmessage{You can't use `\string\centerto' to center `\the\name*'}\fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Jede Zeichenoperation ruft \verb+\put*box+ auf, dieses
+% Makro setzt die Box \verb+\*bbox+ an die aktuelle Zeichenposition.
+% \begin{macrocode}
+\def\put*box{\hbox to 0pt{\kern\*X*\raise\*Y*\box\*bbox\hss}}
+% \end{macrocode}
+%
+%
+% In Erweiterung zu \verb+\llap+ und \verb+\rlap+ werden
+% hier weitere Abk"urzungen definiert.
+% \begin{macrocode}
+\def\hc*#1{\hbox to 0pt{\hss#1\hss}}
+\def\vc*#1{\vbox to 0pt{\vss#1\vss}}
+\def\tlap#1{\vbox to 0pt{\vss#1}}
+\def\blap#1{\vbox to 0pt{#1\vss}}
+\def\ac*#1{\vc*{\hc*{#1}}}
+% \end{macrocode}
+%
+%
+% Zur"ucksetzen der auf eine Zeichenoperation wirkenden Schalter.
+% \begin{macrocode}
+\def\reset*ifs{\ld*false\cen*false\hvcen*false\lab*true\val*true\cc*false}
+% \end{macrocode}
+%
+% Das Kernmakro f"ur die Speicherung von Anschlu"spunkten.
+% \begin{macrocode}
+\def\store*XY#1{\ifshowpoints\message{#1}\fi
+ \expandafter\xdef\csname#1\endcsname{\*X*\the\*X*\*Y*\the\*Y*}}
+% \end{macrocode}
+%
+% Retten der aktuellen Zeichenposition.
+% \begin{macrocode}
+\def\save*XY{\**X\*X*\**Y\*Y*}
+\def\save*xy{\***X\*X*\***Y\*Y*}
+% \end{macrocode}
+%
+% Wiederherstellen der aktuellen Zeichenposition
+% \begin{macrocode}
+\def\restore*XY{\*X*\**X\*Y*\**Y}
+\def\restore*xy{\*X*\***X\*Y*\***Y}
+% \end{macrocode}
+%
+% Abstand zwischen dem gespeichertem Punkt und dem aktuellen
+% in x- und y-Richtung bestimmen
+% \begin{macrocode}
+\def\diff*XY{\advance\**X-\*X*\advance\**Y-\*Y*}
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Richtung ist durch die folgende Zeichenoperation bestimmt.
+% \begin{macrocode}
+\def\centerto#1 {\cen*true\save*XY\frompin#1: }
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Die aktuelle y-Position wird beibehalten.
+% \begin{macrocode}
+\def\hcenterto#1 {\hvcen*true\**Y\*Y*\frompin#1: \*Y*\**Y}
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Die aktuelle x-Position wird beibehalten.
+% \begin{macrocode}
+\def\vcenterto#1 {\hvcen*true\**X\*X*\frompin#1: \*X*\**X}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\do*Ilist{\ifshowpoints\message{|<}\fi
+ \check*true
+ \save*XY\the\*Ilist\ifshowpoints\message{>|}\fi\restore*XY\*Ilist={}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\shift*Ilist#1{\ifshowpoints\message{|<}\fi
+ \check*false
+ \save*XY\the\*Ilist\frompin{\the\name*#1}
+ \ifshowpoints\message{| shift \the\name*#1 |}\fi
+ \advance\**X\**X\advance\**X-\*X*\*X*\**X
+ \advance\**Y\**Y\advance\**Y-\*Y*\*Y*\**Y
+ \check*true
+ \save*XY\the\*Ilist\restore*XY
+ \ifshowpoints\message{>|}\fi\*Ilist={}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\shift*IOlist#1{\ifshowpoints\message{|<}\fi
+ \check*false
+ \save*XY\the\*Ilist\restore*XY\advance\*X*\wd\*bbox\the\*Olist
+ \frompin{\the\name*#1}
+ \ifshowpoints\message{| shift \the\name*#1 |}\fi
+ \advance\**X\**X\advance\**X-\*X*\*X*\**X
+ \advance\**Y\**Y\advance\**Y-\*Y*\*Y*\**Y
+ \check*true
+ \save*XY\the\*Ilist\restore*XY\advance\*X*\wd\*bbox\the\*Olist
+ \restore*XY\ifshowpoints\message{>|}\fi\*Ilist={}\*Olist={}}
+% \end{macrocode}
+%
+% \Ladd*x erweitert die Tokenliste \argi um Makros, die das
+% Dimensionsregister \XXX um \argii erh"ohen.
+% \argii wird als aktueller
+% Zahlenwert in die Tokenliste "ubernommen, \argiii wird
+% expandiert.
+% \begin{macrocode}
+\def\Ladd*x#1#2{\dimen9=#2%
+ \edef\next{{\the#1\advance\*X*\the\dimen9 }}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \Ladd*y ist \verb+\Ladd*x+ in seiner Funktion gleich, das Makro
+% ver"andert jedoch \YYY.
+% \begin{macrocode}
+\def\Ladd*y#1#2{\dimen9=#2%
+ \edef\next{{\the#1\advance\*Y*\the\dimen9 }}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \Lstore* f"ugt in die Tokenliste \argi Makros ein, die die Position unter
+% \argii speichern.
+% \begin{macrocode}
+\def\Lstore*#1#2{\edef\next{{\the#1\noexpand\store*XY{\the\name*#2}}}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Lstopos*#1{\global#1\expandafter{\the#1\save*xy}}
+\def\Lrstpos*#1{\global#1\expandafter{\the#1\restore*xy}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\LX*check#1{\global#1\expandafter{\the#1\check*X}}
+% \end{macrocode}
+%
+% Die folgenden Makros sind schon auf die Tokenliste \verb+\*Ilist+
+% festgelegt, da fast alle Anschlu"sdefinitionen nur eine Liste
+% benutzen.
+% \begin{macrocode}
+\def\add*x{\Ladd*x\*Ilist}
+\def\add*y{\Ladd*y\*Ilist}
+\def\store*{\Lstore*\*Ilist}
+\def\stopos*{\Lstopos*\*Ilist}
+\def\rstpos*{\Lrstpos*\*Ilist}
+\def\X*check{\LX*check\*Ilist}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Cadd*#1{\Ladd*y#1{-\pin*spc}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Cstore*#1#2{\ifx{#2}*\else\Lstore*#1{#2}\fi}
+% \end{macrocode}
+%
+% Um einen Anschlu"spunkt zur neuen Zeichenposition zu erkl"aren,
+% wird nur das entsprechende Makro aufgerufen, nachdem zuvor
+% getestet wurde ob es existiert.
+% \begin{macrocode}
+\def\frompin#1 {\expandafter\ifx\csname#1\endcsname\relax
+ \errhelp{Check spelling! Look up in the description of circuits.}%
+ \errmessage{Point >#1< is not defined}\else\csname#1\endcsname\fi}
+% \end{macrocode}
+%
+% F"ur eine sch"onere Lesbarkeit wird neben {\em von Punkt}
+% auch noch {\em am Punkt} definiert.
+% \begin{macrocode}
+\let\atpin\frompin
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\h*twopins#1{\getc*#1 \ifcen*\*Y*\**Y\hvcen*true\fi
+\wd\box*=.5\wd*
+\advance\ht*\*spc
+%
+\X*check\store*{\the\ld*pin}\add*x{.5\wd*}\store*:\add*x{.5\wd*}%
+\store*{\the\ru*pin}\X*check
+\ifhvcen*\shift*Ilist:\else\ifld*\shift*Ilist{\the\ru*pin}\else\do*Ilist\fi\fi
+%
+\labelfont
+\setbox0=\hbox{\the\rud*}\setbox1=\hbox{\the\ldd*}%
+\**X\*X*\advance\*X*.5\wd*
+\iflab*\check*{.5\wd0}\fi%
+\ifval*\check*{.5\wd1}\fi%
+\*X*\**X
+%
+\setbox\*bbox=\hbox{\box\box*
+ \iflab*\raise\ht*\hc*{\unhbox0}\fi
+ \ifval*\lower\dp*\vtop{\kern\*spc\hc*{\unhbox1}}\fi
+ \add*cmds}%
+\put*box
+\ifld*\else\advance\*X*\wd*\fi\reset*ifs}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\def\v*twopins#1{\getc*#1 \ifcen*\*X*\**X\hvcen*true\fi
+%
+\labelfont
+\setbox0=\hbox{\ifval*\the\ldd*\kern\*spc\fi\kern\dp*}\dimen1\wd0
+\setbox1=\hbox{\kern\wd*\iflab*\kern\*spc\the\rud*\fi}\dimen0\wd1
+\dp0=0pt\dp1=0pt
+%
+\wd\box*=0pt\dp\box*=0pt
+\setbox\*bbox=\hbox{\box\box*
+ \raise.5\ht*\hbox{\vc*{\hbox{\llap{\box0}\rlap{\box1}}}\add*cmds}}%
+%
+\store*{\the\ld*pin}\add*y{.5\ht*}\store*:\add*y{.5\ht*}\store*{\the\ru*pin}%
+\ifhvcen*\shift*Ilist:\else\ifld*\shift*Ilist{\the\ru*pin}\else\do*Ilist\fi\fi
+%
+\check*X
+\check*max{\dimen0}%
+\check*min{\dimen1}%
+%
+\put*box
+\ifld*\else\advance\*Y*\ht*\fi\reset*ifs}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\ii*#1 {\if#1h\ld*pin{l}\ru*pin{r}\h*twopins0\relax\else
+ \if#1v\ld*pin{b}\ru*pin{t}\v*twopins1\relax\else
+ \if#1u\ld*pin{b}\ru*pin{t}\v*twopins1\relax\else
+ \if#1d\ld*pin{b}\ru*pin{t}\ld*true\v*twopins1\relax\else
+ \if#1l\ld*pin{l}\ru*pin{r}\ld*true\h*twopins0\relax\else
+ \if#1r\ld*pin{l}\ru*pin{r}\h*twopins0\relax\else
+ \errhelp{Direction >h<, >v<, >l<, >u<, >r< or >d< expected.}%
+ \errmessage{Bad direction specified! You typed:>#1<.}%
+ \fi\fi\fi\fi\fi\fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\change*pins{\toks0\ld*pin\ld*pin\ru*pin\ru*pin\toks0}
+% \end{macrocode}
+%
+\def\CiRCl{1}\def\CiRCr{2}\def\CiRCu{3}\def\CiRCd{4}
+\def\CiRCL{5}\def\CiRCR{6}\def\CiRCU{7}\def\CiRCD{8}
+\def\CIRCiErr{\PackageError{CIRC}{Internal Error}%
+ {You are great, please send all files to the author and wait for
+ answer.}}
+% \begin{macrocode}
+\def\iv*#1 #2 {\cnta*=0\csname CiRC#2\endcsname\relax
+ \ifnum\cnta*=0
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling}\fi
+ \ifcase\CIRCpintoN{#1}\relax\CIRCiErr \or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\change*pins\h*twopins2\relax
+ \or\h*twopins0\relax
+ \or\v*twopins1\relax
+ \or\change*pins\<\v*twopins3\relax\else
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling, only [l r u d] expected}\fi\or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\h*twopins0\relax
+ \or\change*pins\h*twopins2\relax
+ \or\change*pins\v*twopins3\relax
+ \or\<\v*twopins1\relax\else
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling, only [l r u d] expected}\fi\fi}
+\def\iviv*#1 #2 {\cnta*=0\csname CiRC#2\endcsname\relax
+ \ifnum\cnta*=0
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling}\fi
+ \ifcase\CIRCpintoN{#1}\relax\CIRCiErr \or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\change*pins\h*twopins6\relax
+ \or\h*twopins0\relax
+ \or\v*twopins5\relax
+ \or\change*pins\<\v*twopins3\relax
+ \or\<\change*pins\h*twopins2\relax
+ \or\h*twopins4\relax
+ \or\v*twopins1\relax
+ \or\change*pins\<\v*twopins7\relax\fi\or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\h*twopins0\relax
+ \or\change*pins\h*twopins6\relax
+ \or\change*pins\v*twopins3\relax
+ \or\<\v*twopins5\relax
+ \or\<\h*twopins4\relax
+ \or\change*pins\h*twopins2\relax
+ \or\change*pins\v*twopins7\relax
+ \or\<\v*twopins1\relax\fi\fi}
+%
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\lviii*#1{\store*{\the\m*pin}\X*check
+ \add*x\wd*\stopos*\add*y{-\dp*}\store*{\the\ld*pin}\X*check
+ \rstpos*\add*y\ht*\store*{\the\ru*pin}\rstpos*
+ \dimen0\ht*\advance\dimen0-\dp*\add*y{.5\dimen0}\store*:
+ \rstpos*\add*x\ic*\X*check
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \setbox\*bbox=\hbox{\labelfont
+ \the\llpos*\box\box*\the\ldpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\rviii*#1{\store*{\the\m*pin}\X*check
+ \add*x{-\wd*}\stopos*\add*y\ht*\store*{\the\ru*pin}\X*check
+ \rstpos*\add*y{-\dp*}\store*{\the\ld*pin}\rstpos*
+ \dimen0\ht*\advance\dimen0-\dp*\add*y{.5\dimen0}\store*:
+ \rstpos*\add*x{-\ic*}\X*check
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \setbox\*bbox=\hbox{\labelfont
+ \the\rdpos*\box\box*\the\rlpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\dviii*#1{\store*{\the\m*pin}%
+ \add*y\dp*\stopos*\add*x\ic*\store*{\the\ru*pin}\X*check
+ \rstpos*\add*x{-\wd*}\store*{\the\ld*pin}\X*check
+ \rstpos*\dimen0-\wd*\advance\dimen0\ic*\add*x{.5\dimen0}\store*:
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \wd\box*=0pt\dp\box*=0pt
+ \setbox\*bbox=\hbox{\labelfont
+ \the\dlpos*\box\box*\the\ddpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\uviii*#1{\store*{\the\m*pin}%
+ \add*y{-\ht*}\stopos*\add*x\ic*\store*{\the\ru*pin}\X*check
+ \rstpos*\add*x{-\wd*}\store*{\the\ld*pin}\X*check
+ \rstpos*\dimen0-\wd*\advance\dimen0\ic*\add*x{.5\dimen0}\store*:
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \wd\box*=0pt\ht\box*=0pt
+ \setbox\*bbox=\hbox{\labelfont
+ \the\ulpos*\box\box*\the\udpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\viii*#1 #2 {\check*cen
+ \if#2l \getc*0 \lviii*{#1}\else
+ \if#2r \getc*1 \rviii*{#1}\else
+ \if#2d \getc*3 \dviii*{#1}\else
+ \if#2u \getc*2 \uviii*{#1}\else
+ \if#2L\change*pins\getc*4 \lviii*{#1}\else
+ \if#2R\change*pins\getc*5 \rviii*{#1}\else
+ \if#2D\change*pins\getc*7 \dviii*{#1}\else
+ \if#2U\change*pins\getc*6 \uviii*{#1}\else
+ \errhelp{Direction >l<, >r<, >u<, >d<, >L<, >R<, >U< or >D<
+ expected.}%
+ \errmessage{Bad direction >#2<}\fi\fi\fi\fi\fi\fi\fi\fi
+ \reset*ifs}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+%
+%
+\def\CIRCpintoN#1{\if\the\ld*pin#1 1\else
+ \if\the\ru*pin#1 2\else
+ \if\the\m*pin#1 3\else
+ \PackageError{CIRC}{Bad pin name}%
+ {Please check spelling or look up in the documentation}
+\fi\fi\fi}
+%
+% \begin{macrocode}
+\def\cdef#1 #2 #3#4 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\cc*#4 #3\ii*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefiv#1 #2 #3#4 #5 #6 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\m*pin{@}%
+ \ld*pin{#5}\ru*pin{#6}\cc*#4 #3\iv*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefivNL#1 #2#3 #4 #5 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\ld*pin{#4}\ru*pin{#5}\m*pin{@}%
+ \cc*#3 #2\iv*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefiviv#1 #2 #3#4 #5 #6 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\ld*pin{#5}\ru*pin{#6}\m*pin{@}%
+ \cc*#4 #3\iviv*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefivivNL#1 #2#3 #4 #5 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\ld*pin{#4}\ru*pin{#5}\m*pin{@}%
+ \cc*#3 #2\iviv*}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\cdefNL#1 #2#3 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\cc*#3 #2\ii*}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\cdefviii#1 #2 #3#4 #5 #6 #7 {\safedef{#1}##1 ##2 {\name*{#1##1}%
+ \rud*{$#2_{##1}$}\ldd*{##2}\ld*pin{#5}\m*pin{#6}\ru*pin{#7}\cc*#4 #3\viii*}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\cwdef#1 #2 {\safedef{#1}##1 ##2 {\cc*#2
+ \cnta*##1\toks2{}\toks4{}\dimen2=##1em\test*xygrid
+ \csname line*##2\endcsname}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\black*boxii#1 #2 #3 #4 #5 #6 #7 {\check*cen
+ \if#7h\getc*0
+ \store*{P1}\X*check\add*x{.5\wd*}\stopos*\X*check\store*:
+ \add*y\ht*\store*{P4}\rstpos*\add*y{-\dp*}\store*{P2}\rstpos*
+ \add*x{.5\wd*}\X*check\store*{P3}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \setbox0=\hbox{#3\kern\*spc}\check*min{\wd0}%
+ \raise\pinnum*spc\llap{#3\kern\*spc}%
+ \setbox0=\hbox{\kern\*spc\kern\wd*#5}\check*max{\wd0}\wd0=0pt
+ \raise\pinnum*spc\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#6}\check*max{\wd0}\wd0=0pt
+ \dimen0\ht*\advance\dimen0\*spc
+ \raise\dimen0\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#4}\check*max{\wd0}\wd0=0pt
+ \dimen0\dp*\advance\dimen0\*spc
+ \lower\dimen0\vtop{\kern0pt\box0}\fi
+ \hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box\reset*ifs
+ \else\if#7v\getc*1
+ \store*{P4}\X*check\add*x{.5\wd*}\stopos*\X*check\store*:
+ \add*y\ht*\store*{P3}\rstpos*\add*y{-\dp*}\store*{P1}\rstpos*
+ \add*x{.5\wd*}\X*check\store*{P2}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \setbox0=\hbox{#6\kern\*spc}\check*min{\wd0}%
+ \raise\pinnum*spc\llap{#6\kern\*spc}%
+ \setbox0=\hbox{\kern\*spc\kern\wd*#4}\check*max{\wd0}\wd0=0pt
+ \raise\pinnum*spc\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#5}\check*max{\wd0}\wd0=0pt
+ \dimen0\ht*\advance\dimen0\*spc
+ \raise\dimen0\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#3}\check*max{\wd0}\wd0=0pt
+ \dimen0\dp*\advance\dimen0\*spc
+ \lower\dimen0\vtop{\kern0pt\box0}\fi
+ \hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box\reset*ifs
+ \else\errhelp{Direction >h< or >v< expected.}%
+ \errmessage{ >#1< Bad direction specified}\fi\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\black*box#1 #2 #3 #4 #5 #6 {\black*boxii{#1} {#2} {#3} {#4} {#5} {#6} h }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\sym*box#1 #2 {\check*cen
+ \getc*0
+ \store*{P1}\X*check\stopos*
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\store*{P3}\X*check\rstpos*
+ \add*y{-1em}\store* b
+ \add*x{\wd*}\store* e\rstpos*
+ \add*y{1em}\store* a
+ \add*x{\wd*}\store* f\rstpos*
+ \add*x{.5\wd*}\stopos*
+ \add*y\ht*\store*{P4}%
+ \add*x{1em}\store* g
+ \rstpos*\add*y\ht*
+ \add*x{-1em}\store* h
+ \rstpos*\add*y{-\dp*}\store*{P2}%
+ \add*x{1em}\store* d
+ \rstpos*\add*y{-\dp*}%
+ \add*x{-1em}\store* c
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=
+ \hbox{\hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box
+ \reset*ifs}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdef#1 #2#3 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3 #2\black*box}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdefNeT#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\black*box{#4} }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdefNeTii#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\black*boxii{#4} }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\sbdef#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\sym*box{#4} }}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% ^^A beschr p l1 l2 l3
+%
+% ^^A\cc*
+% ^^A\name*
+% ^^A\**pin
+% ^^A\ldd* -> innenbeschriftung
+%
+%</code>
+%<+gate>\ProvidesFile{gate.def}
+%<+gate>\freecirc
+%<*gate>
+% \begin{macrocode}
+\def\g*iio#1 #2 #3 #4 #5 {\dimen4\*X*\dimen5\*Y*
+ \rud*{#1}\getc*0
+ \stopos*\add*y\ic*\X*check\store*{\the\ru*pin}\rstpos*
+ \add*y{-\ic*}\store*{\the\ld*pin}\rstpos*
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\X*check\store*{\the\m*pin}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \dimen0\ic*\advance\dimen0\pinnum*spc
+ \raise\dimen0\rlap{\kern\pin*ind\hc*{#3}}%
+ \dimen0-\ic*\advance\dimen0\pinnum*spc
+ \raise\dimen0\rlap{\kern\pin*ind\hc*{#4}}%
+ \raise\pinnum*spc\rlap{\kern\wd*\kern-\pin*ind\hc*{#5}}\fi
+ \the\ldd*\box\box*}\put*box\reset*ifs
+ \*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\g*io#1 #2 #3 #4 {\dimen4\*X*\dimen5\*Y*
+ \rud*{#1}\getc*0
+ \store*{\the\ld*pin}%
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\X*check\store*{\the\m*pin}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \raise\pinnum*spc\rlap{\kern\pin*ind\hc*{#3}}%
+ \raise\pinnum*spc\rlap{\kern\wd*\kern-\pin*ind\hc*{#4}}\fi
+ \the\ldd*\box\box*}\put*box\reset*ifs
+ \*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\gateIIO#1 #2#3 #4#5 #6 #7 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{#4}%
+ \ld*pin{#5}\m*pin{#6}\ru*pin{#7}\cc*#3 #2\g*iio}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ldd*gN#1{\raise\fontdimen10\c*fntb
+ \blap{\hc*{\kern\wd*\symfont\,#1}}%
+ \lower\dp*
+ \vtop{\kern\*spc\hc*{\labelfont\kern\wd*\the\rud*}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ldd*OV{\ac*{\kern.8\wd*\ctextfont\the\rud*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\NgateIIO#1 #2#3 #4 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{\ldd*gN{#4}}%
+ \ld*pin{I2}\m*pin{O}\ru*pin{I1}\cc*#3 #2\g*iio}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\gateIO#1 #2#3 #4#5 #6 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{#4}%
+ \ld*pin{#4}\m*pin{#5}\cc*#3 #2\g*io}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\NgateIO#1 #2#3 #4 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{\ldd*gN{#4}}%
+ \ld*pin{I}\m*pin{O}\cc*#3 #2\g*io}}
+% \end{macrocode}
+%</gate>
+%<*code>
+%^^A last update: Sat 06-13-2003
+%</code>
+%<*doc>
+\input cidoc
+\freecirc
+\hbox{\circuit0 \CIRCLogo \endcircuit\hskip3cm
+ \verb|\CIRCLogo|}\vskip5mm
+%</doc>
+%<*code,doc>
+\cwdef wire {128\c*fnt}
+%<+doc> {wire}
+\cwdef dashed {120\c*fnt}
+%<+doc> {dashed wire}
+%<+doc>\cwwdef bundle {bundle}
+%<+doc>\cwwdef wwire {double wire}
+%<+doc>\textdef Utext {text with arrow}
+%<+doc>\textdef centertext {centered text}
+%</code,doc>
+%<*basic>
+\ProvidesFile{basic.def}
+\freecirc
+\def\GND#1 {\setbox\*bbox=\hbox{\c*fnt\char254}%
+ \check*min{\wd\*bbox}\check*max{\wd\*bbox}\put*box
+ \store*XY{GND#1}\store*XY{GND#1:}\reset*ifs}
+\def\gnd#1 {\setbox\*bbox=\hbox{\c*fnt\char253}%
+ \check*min{\wd\*bbox}\check*max{\wd\*bbox}\put*box
+ \store*XY{gnd#1}\store*XY{gnd#1:}\reset*ifs}
+\def\junction#1 {\setbox\*bbox=\hbox{\c*fnt\char255}\check*{\wd\*bbox}\check*X
+ \put*box\store*XY{.#1:}\store*XY{junction#1:}%
+ \store*XY{junction#1}\store*XY{.#1}\reset*ifs}
+%</basic>
+%<*basic,doc>
+%<+doc>\optionline basic
+%<+doc>\cdefo GND ground
+%<+doc>\cdefo gnd ground
+%<+doc>\cdefo . junction \par
+\cdef R R \c*fntw 0
+%<+doc> {resistor}
+\cdef Rus R \c*fntw 24
+%<+doc> {US resistor}
+\cdefviii Rvar R \c*fntw 8 . S *
+%<+doc> {variable resistor}
+\cdefviii Rusvar R \c*fntw 32 . S *
+%<+doc> {variable resistor}
+\cdef C C \c*fntw 128
+%<+doc> {capacitor}
+\cdef Cvar C \c*fntw 130
+%<+doc> {variable capacitor}
+\cdefiv Cel C \c*fntw 136 - +
+%<+doc> {electrolytic capacitor}
+\cdefiv D D \c*fntd 0 K A
+%<+doc> {diode}
+\cdefiv ZD D \c*fntd 4 K A
+%<+doc> {Zener diode}
+\cdefiviv LED D \c*fntd 8 K A
+%<+doc> {light emitting diode}
+\cdefiv Dcap D \c*fntd 16 K A
+%<+doc> {capacitance variation diode}
+\cdefiv whatI I \c*fnt 248 d s
+%<+doc> {current flow}
+\cdefiv U U \c*fnt 16 + -
+%<+doc> {voltage source}
+\cdef varU U \c*fnt 44
+%<+doc> {voltage source, variant}
+\cdef varI I \c*fnt 46
+%<+doc> {current source variant}
+\cdefiv Uvar U \c*fnt 20 + -
+%<+doc> {variable voltage source}
+\cdef I I \c*fnt 12
+%<+doc> {current source}
+\cdef Ivar I \c*fnt 14
+%<+doc> {variable current source}
+\cdef V U {\def\add*cmds{\clr*acmds
+ \ac*{\symfont V}}\c*fnt}8
+%<+doc> {voltmeter}
+\cdef A I {\def\add*cmds{\clr*acmds
+ \ac*{\symfont A}}\c*fnt}8
+%<+doc> {amperemeter}
+\cdefiv L L \c*fnt 0 . *
+%<+doc> {coil}
+\cdef xtal Q \c*fnt 4
+%<+doc> {quartz crystal}
+\cdef La La \c*fnt 6
+%<+doc> {incandescent lamp} % electric bulb
+\cdef GasLa {} \c*fnt 40
+%<+doc> {gas lamp}
+\cdef S S \c*fnt 24
+%<+doc> {switch}
+\cdefviii SW S \c*fnt 32 o s c
+%<+doc> {changeover switch}
+\cdefivNL mconnection \c*fnt 232 o c
+%<+doc> {connection (pointed)}
+\cdefivNL connection \c*fnt 240 o c
+%<+doc> {connection (round empty)}
+\cdefivNL fconnection \c*fnt 244 o c
+%<+doc> {connection (round full)}
+\cdefiviv npnPH T \c*fntt 80 E C
+%<+doc> {phototransistor}
+\cdefviii npnEC T \c*fntt 0 E . C
+%<+doc> {npn-transistor without base}
+\cdefviii pnpEC T \c*fntt 8 E . C
+%<+doc> {pnp-transistor without base}
+\cdefviii npn T \c*fntt 16 E B C
+%<+doc> {npn-transistor}
+\cdefviii pnp T \c*fntt 24 E B C
+%<+doc> {pnp-transistor}
+\cdefviii nfet T \c*fntt 32 S G D
+%<+doc> {n-channel field effect transistor}
+\cdefviii pfet T \c*fntt 40 S G D
+%<+doc> {p-channel field effect transistor}
+\cdefviii nvmos T \c*fntt 48 S G D
+%<+doc> {}
+\cdefviii pvmos T \c*fntt 56 S G D
+%<+doc> {}
+\cdefviii namos T \c*fntt 64 S G D
+%<+doc> {}
+\cdefviii pamos T \c*fntt 72 S G D
+%<+doc> {}
+%<+basic>\protectcirc
+%</basic,doc>
+%<*gate,doc>
+%<+doc>\pagebreak
+%<+doc>\optionline gate
+\gateIIO OV \c*fntb 255 \ldd*OV + O -
+%<+doc> {operational amplifier}
+\gateIIO ov \c*fntb 254 \ldd*OV - O +
+%<+doc> {operational amplifier}
+%<+doc>
+\NgateIIO NAND \c*fntb 132 {$\&$}
+%<+doc> {NAND-gate}
+\NgateIIO AND \c*fntb 131 {$\&$}
+%<+doc> {AND-gate}
+\NgateIIO OR \c*fntb 131 {$\ge$1}
+%<+doc> {OR-gate}
+\NgateIIO NOR \c*fntb 132 {$\ge$1}
+%<+doc> {NOR-gate}
+\NgateIIO XOR \c*fntb 131 {$=$1}
+%<+doc> {XOR-gate}
+\NgateIIO XNOR \c*fntb 131 {$=$\vrule width 0pt height 1.5ex\,}
+%<+doc> {XNOR-gate}
+\NgateIO INV \c*fntb 130 {1\,}
+%<+doc> {NOT-gate}
+\NgateIO ST \c*fntb 128 {{\c*fnts\char7}}
+%<+doc> {Schmitt trigger}
+\NgateIO STINV \c*fntb 130 {{\c*fnts\char7}}
+%<+doc> {inverted Schmitt trigger}
+\NgateIO BUF \c*fntb 130 {{\c*fnts\char25}}
+%<+doc> {buffer}
+%<+gate>\protectcirc
+%</gate,doc>
+%<*oldgate,doc>
+%<+doc>\optionline oldgate
+%<+oldgate>\freecirc
+\NgateIIO oldAND \c*fntb 133 {}
+%<+doc> {old AND-gate}
+\NgateIIO oldNAND \c*fntb 134 {}
+%<+doc> {old NAND-gate}
+\NgateIIO oldOR \c*fntb 135 {}
+%<+doc> {old OR-gate}
+\NgateIIO oldNOR \c*fntb 136 {}
+%<+doc> {old NOR-gate}
+\NgateIIO oldXOR \c*fntb 137 {}
+%<+doc> {old XOR-gate}
+%<+oldgate>\protectcirc
+%</oldgate,doc>
+%<*box,doc>
+%<+box>\ProvidesFile{box.def}
+%<+box>\freecirc
+%<+doc>\optionline box
+\bbdef BBa \c*fntb 252
+%<+doc> {black box analog}
+\bbdef BBd \c*fntb 253
+%<+doc> {black box digital}
+%<+doc>\pagebreak
+\bbdefNeT oscillograph \c*fnt 142 {}
+%<+doc> {oscillograph}
+\bbdefNeT G \c*fntb 250 \vbox{\hc*{\symfont G}\kern1.5\*spc%
+ \hc*{\c*fnts\char16}}
+%<+doc> {generator}
+\bbdefNeT Gvar \c*fntb 250 \vbox{\hc*{\symfont G}\kern1.5\*spc%
+ \hc*{\c*fnts\char17}}
+%<+doc> {generator, variable}
+\bbdefNeT Impulse \c*fntb 250 \c*fnts\char13
+%<+doc> {generator, pulses}
+\bbdefNeT Amp \c*fntb 250 \c*fnts\char24
+%<+doc> {amplifier}
+\sbdef ACtoDC \c*fntb 251 \hbox{\raise.6\ht*\hbox{\c*fnts\char16}%
+ \lower.6\dp*\hbox{\symfont$=$}}
+%<+doc> {AC to DC converter}
+%<+box>\protectcirc
+%</box,doc>
+%<*doc>
+\optionline ic
+\Ccirc RSFF S {RS flip flop}{\Clpin{S}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc NRSFF S {RS flip flop}{\Clpin{S}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc DFF C {D flip flop}{\Clpin{C}\Clpin{D}\Crpin{Q}\Crpin{NQ}}
+\Ccirc JKMSFF R {JK master slave flip flop}{\Clpin{S}\Clpin{J}\Clpin{C}\Clpin{K}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc fff R {timer NE\,555}{\Clpin{IS}\Clpin{IT}\Clpin{R}\Crpin{OK}\Crpin{O}\Crpin{OD}}
+\Ccirc NULL i+ {nullor}{\Clpin{i+}\Clpin{i-}\Crpin{o+}\Crpin{o-}}
+%</doc>
+%^^A last update: Fri 03-13-1998
+%<*optics>
+% First lets define the header of module OPTICS.
+% \begin{macrocode}
+\ProvidesFile{optics.def}
+\freecirc
+% \end{macrocode}
+% \begin{macrocode}
+\safedef{Dtext}#1 from #2 to #3 {{
+ \frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \dimen0\**Y
+ \ifdim\**Y<0pt\dimen0-\dimen0\fi
+ \c*fnts\setbox0=\hbox{\char9}\setbox1=\hbox{\char11}%
+ \c*fnt\setbox2=\hbox{\char132}\dp1=0pt
+ \advance\dimen0-\ht0\calc*u
+ \setbox\*bbox=
+ \vtop{\box1\loop\ifnum\cntb*>0\copy2
+ \advance\cntb*-1\repeat\box0}%
+ \put*box\advance\*X*\*spc\advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \advance\*X*\**X
+ \dimen0\**X
+ \ifdim\**X<0pt\dimen0-\dimen0\fi
+ \c*fnts\setbox0=\hbox{\char8}\setbox1=\hbox{\char10}%
+ \c*fnt\advance\dimen0-\wd0\calc*u
+ \setbox\*bbox=\hbox{\box0\loop\ifnum\cntb*>0\advance\cntb*-1
+ \char129\repeat\box1}%
+ \put*box\advance\*X*-.5\**X\advance\*Y*\*spc\put\hc*{#1}
+ \else\errhelp{Only horizontal or vertical labeling allowed.}%
+ \errmessage{Bad points!}\fi\fi}}
+% \end{macrocode}
+%
+% We need a new font for the optic symbols.
+% \begin{macrocode}
+\addCIRCfont cioptic
+% \end{macrocode}
+%
+%</optics>
+%<*optics,doc>
+%<+doc>\optionline optics
+%<+doc>\textdef Dtext {text measuring a length}
+% \begin{macrocode}
+\cwdef oa {128\CIRCcioptic}
+%<+doc> {optical axis}
+\cdef SLens L \CIRCcioptic 0
+%<+doc> {thin lens}
+\cdefiv HSLens L \CIRCcioptic 2 | )
+%<+doc> {half thin lens}
+\cdef BLens L \CIRCcioptic 6
+%<+doc> {thick lens}
+\cdefiv HBLens L \CIRCcioptic 8 | )
+%<+doc> {half thick lens}
+\cdef VLens L \CIRCcioptic 12
+%<+doc> {concave lens}
+\cdefiv HVLens L \CIRCcioptic 14 | (
+%<+doc> {half concave lens}
+\cdefviii Mirror M \CIRCcioptic 85 * . +
+%<+doc> {mirror}
+\cdefviii BSplit BS \CIRCcioptic 36 * . +
+%<+doc> {beam splitter}
+\cdef Polar P \CIRCcioptic 44
+%<+doc> {polarizer}
+\cdef Pinhole {} \CIRCcioptic 46
+%<+doc> {pinhole}
+\cdefiv Cam {} \CIRCcioptic 66 . |
+%<+doc> {camera}
+\cdef ScrL {} \CIRCcioptic 72
+%<+doc> {screen, look at the left side}
+\cdef ScrR {} \CIRCcioptic 74
+%<+doc> {screen, look at the right side}
+\cdef ScrBL {} \CIRCcioptic 76
+%<+doc> {screen, look behind the left side}
+\cdef ScrBR {} \CIRCcioptic 78
+%<+doc> {screen, look behind the right side}
+\cdef ScrTL {} \CIRCcioptic 80
+%<+doc> {screen, look trough the left side}
+\cdef ScrTR {} \CIRCcioptic 82
+%<+doc> {screen, look trough the right side}
+\cdef Laser {} \CIRCcioptic 160
+%<+doc> {laser}
+\cdef PM {} \CIRCcioptic 162
+%<+doc> {photometer, -multiplyer, etc.}
+\bbdefNeTii OM \CIRCcioptic 164 {}
+%<+doc> {optical modulator}
+%</optics,doc>
+%<*optics>
+\protectcirc
+% \end{macrocode}
+%</optics>
+%^^A last update: Fri 03-13-1998
+%<*ciphysic>
+\freecirc
+\addCIRCfont ciphysic
+%</ciphysic>
+%<+doc>\optionline physics
+%<*ciphysic,doc>
+\cdef spring k \CIRCciphysic 0
+%<+doc> {spring}
+\cdef lspring k \CIRCciphysic 2
+%<+doc> {long spring}
+\cdef fdmass m \CIRCciphysic 4
+%<+doc> {mass with two forces; full drawn}
+\cdef dmass m \CIRCciphysic 6
+%<+doc> {mass with two forces; outlined}
+\cdefiv fmass m \CIRCciphysic 8 . *
+%<+doc> {mass; full drawn}
+\cdefiv mass m \CIRCciphysic 12 . *
+%<+doc> {mass; outlined}
+\cdefivNL wall \CIRCciphysic 16 . |
+%<+doc> {wall}
+\cdefivNL tile \CIRCciphysic 20 . *
+%<+doc> {tile}
+\cdef spinu S \CIRCciphysic 24
+%<+doc> {spin up}
+\cdef spind S \CIRCciphysic 26
+%<+doc> {spin down}
+%</ciphysic,doc>
+%<*ciphysic>
+\protectcirc
+%</ciphysic>
+%^^A last update: Fri 03-13-1998
+%<*doc>
+\protectcirc
+% \end{macrocode}
+%</doc>
+%<*code>
+%^^A last update: Fri 03-13-1998
+%
+% \begin{macrocode}
+\def\line*r{\check*X\ifnum\cnta*=0\else\check*max{\dimen2}\ifxoutofgrid
+ \advance\dimen2-.5\fontdimen6\c*fnt\fi
+ \setbox\*bbox=\hbox{\ifxoutofgrid\else\char\cc*\fi\advance\cc*1%
+ \loop\ifnum\cnta*>1\char\cc*
+ \advance\cnta*-1\repeat}\put*box
+ \advance\*X*.5\dimen2\the\toks2\advance\*X*.5\dimen2
+ \advance\cc*2\setbox\*bbox=\hbox{\char\cc*}\put*box\xoutofgridfalse\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*l{\advance\*X*-\dimen2
+ \ifxoutofgrid\advance\*X*.5\fontdimen6\c*fnt\fi
+ \**X\*X*\line*r\*X*\**X}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*u{\check*X\ifnum\cnta*=0\else\advance\cc*4\ifyoutofgrid
+ \advance\dimen2-.5\fontdimen6\c*fnt\fi
+ \setbox\box*=\hbox{\char\cc*}\advance\cc*-1%
+ \setbox\*bbox=\vbox{\loop\ifnum\cnta*>1\copy\box*
+ \advance\cnta*-1\repeat
+ \ifyoutofgrid\else\hbox{\char\cc*}\fi}\put*box
+ \advance\*Y*.5\dimen2\the\toks4\advance\*Y*.5\dimen2
+ \advance\cc*2\setbox\*bbox=\vbox{\hbox{\char\cc*}}\put*box\youtofgridfalse\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*d{\advance\*Y*-\dimen2
+ \ifyoutofgrid\advance\*Y*.5\fontdimen6\c*fnt\fi
+ \**Y\*Y*\line*u\*Y*\**Y}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\test*xygrid{\dimen9\fontdimen6\c*fnt\count@\dimen9
+ \cntb*\*X*\divide\cntb*\count@
+ \dimen0\*X*\advance\dimen0-\cntb*\dimen9
+ \advance\dimen9-.1pt
+ \ifdim\dimen0<0pt \dimen0-\dimen0 \fi
+ \ifdim\dimen0>0.1pt \ifdim\dimen0<\dimen9 \xoutofgridtrue\fi\fi
+ \cntb*\*Y*\divide\cntb*\count@
+ \dimen0\*Y*\advance\dimen0-\cntb*\fontdimen6\c*fnt
+ \ifdim\dimen0<0pt \dimen0-\dimen0 \fi
+ \ifdim\dimen0>0.1pt \ifdim\dimen0<\dimen9 \youtofgridtrue\fi\fi}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\bundle#1 #2 #3 {\cc*136\c*fnt\cnta*#2\dimen2=#2em
+ \toks2{\setbox\box*=\hbox{\char134}%
+ \setbox\*bbox=\rlap{\raise\ht\box*
+ \hc*{\labelfont#1}\unhbox\box*}\put*box}%
+ \toks4{\setbox\*bbox=\hbox{\char135\labelfont
+ \vc*{\hbox{#1}}}%
+ \check*max{\wd\*bbox}\put*box}%
+ \test*xygrid\csname line*#3\endcsname}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\wwire#1 #2 #3 {\cc*112\c*fnt\cnta*#2\dimen2=#2em
+ \toks2{\setbox\*bbox=\rlap{\raise\*spc
+ \hc*{\labelfont#1}}\put*box}%
+ \toks4{\setbox\*bbox=\hbox{\kern\*spc\labelfont
+ \vc*{\hbox{#1}}}%
+ \check*max{\wd\*bbox}\put*box}%
+ \test*xygrid\csname line*#3\endcsname}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\by#1 {\def\by*cmd{#1}}
+\by{\wire}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\calc*u{\cnta*\fontdimen6\c*fnt\advance\dimen0 .5\fontdimen6\c*fnt
+ \cntb*\dimen0\divide\cntb*\cnta*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\vtopin#1 {\save*XY\frompin{#1} \test*xygrid
+ \dimen0\**Y\advance\dimen0-\*Y*\restore*XY
+ \ifdim\dimen0<0pt\dimen0-\dimen0
+ \calc*u\by*cmd {\cntb*} u
+ \else\calc*u\by*cmd {\cntb*} d \fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\htopin#1 {\save*XY\frompin{#1} \test*xygrid
+ \dimen0\**X\advance\dimen0-\*X*\restore*XY
+ \ifdim\dimen0<0pt\dimen0-\dimen0
+ \calc*u\by*cmd {\cntb*} r
+ \else\calc*u\by*cmd {\cntb*} l \fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\safedef{Utext}#1 from #2 to #3 {{%
+ \frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \setbox1=\hbox{\c*fnt\char132}%
+ \ifdim\**Y<0pt
+ \dimen0-\**Y
+ \setbox0=\hbox{\c*fnt\char'373}\advance\dimen0-\ht0\dp0=0pt
+ \calc*u
+ \setbox\*bbox=
+ \vtop to -\**Y{\vfill\box0\loop\ifnum\cntb*>2\copy1
+ \advance\cntb*-1\repeat\vfill}%
+ \else
+ \dimen0\**Y
+ \setbox0=\hbox{\c*fnt\char'371}\advance\dimen0-\ht0\dp0=0pt
+ \calc*u
+ \setbox\*bbox=
+ \vbox to \**Y{\vfill\loop\ifnum\cntb*>2\copy1
+ \advance\cntb*-1\repeat\box0\vfill}%
+ \fi
+ \put*box\advance\*X*\*spc\advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \ifdim\**X<0pt
+ \dimen0-\**X
+ \setbox0=\hbox{\c*fnt\char'372}\advance\dimen0-\wd0
+ \calc*u
+ \setbox\*bbox=\llap{\hbox to -\**X{\hfill\loop\ifnum\cntb*>2\char129
+ \advance\cntb*-1\repeat\box0\hfill}}%
+ \else
+ \dimen0\**X
+ \setbox0=\hbox{\c*fnt\char'370}\advance\dimen0-\wd0
+ \calc*u
+ \setbox\*bbox=\hbox to \**X{\hfill\box0\loop\ifnum\cntb*>2\char129
+ \advance\cntb*-1\repeat\hfill}%
+ \fi
+ \put*box\advance\*X*.5\**X\advance\*Y*\*spc\put\hc*{#1}
+ \else\errhelp{Only horizontal or vertical labeling allowed.}%
+ \errmessage{Bad points!}\fi\fi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\safedef{centertext}#1 from #2 to #3 {%
+ {\frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \advance\*X*.5\**X\put\hc*{#1}
+ \else\errhelp{Only horizontal or vertical labeling allowed.}%
+ \errmessage{Bad points}\fi\fi}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Die absolute Positionierung in einem Raster von 7\,pt wird durch
+% das direkte Setzen der aktuellen Zeichenposition realisiert.
+% Die x-, und y-Position bezieht sich dabei auf den Punkt der
+% ersten Zeichenoperation, dem die Werte $(0,0)$ zugeordnet wurden.
+% \begin{macrocode}
+\def\from#1 #2 {\c*fnt\*X*=#1em\*Y*=#2em\check*X}
+\let\at\from
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\moverel#1 #2 {\c*fnt\advance\*X* #1em\advance\*Y* #2em\check*X}
+\let\shift\moverel
+% \begin{macrocode}
+%
+% \begin{macrocode}
+\safedef{put}#1 {\setbox\*bbox=\hbox{\ctextfont#1}\check*X
+ \check*max{\wd\*bbox}\put*box}
+
+% \end{macrocode}
+\safedef{P}#1 {\store*XY{P#1}\check*X\reset*ifs}
+%
+\safedefs{_} #1 #2 {\c*fnt\cnta*=0\csname CiRC#2\endcsname\relax
+ \ifnum\cnta*=0\relax
+ \PackageError{CIRC}{Bad direction}{Please check spelling}\fi
+ \ifcase \cnta* \relax
+ \or \advance\*X* -#1em
+ \or \advance\*X* #1em
+ \or \advance\*Y* #1em
+ \or \advance\*Y* -#1em
+ \or \advance\*X* -#1em
+ \or \advance\*X* #1em
+ \or \advance\*Y* #1em
+ \or \advance\*Y* -#1em \fi}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\nl{\lab*false}
+\def\nv{\val*false}
+\def\cc{\cc*true}
+\def\clr*acmds{\global\let\add*cmds\relax}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\*fdef#1 {\expandafter\xdef\csname#1\endcsname{\the\toks0}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\CIRCfinit
+\CIRCfinit={}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\addCIRCfont#1 {\expandafter\CIRCfinit=\expandafter{\the\CIRCfinit
+ \expandafter\font\csname CIRC#1\endcsname=#1 scaled \*mag}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\CIusefont#1#2#3{\fontencoding{\encodingdefault}\fontfamily{#1}%
+ \fontseries{\seriesdefault}\fontshape{\shapedefault}%
+ \fontsize{#2}{#3}\selectfont}
+\def\circuit#1 {\PackageInfo{CIRC}{`\CIRCredef' redefined}%
+ \let\add*cmds\relax
+ \*Ilist{}\*Olist{}\check*true
+ \xdef\*mag{\magstep{#1}}%
+ \global\X*max-\maxdimen
+ \global\X*min\maxdimen
+\ifcase#1 % magstep 0
+ \toks0={\CIusefont{\rmdefault}{10}{12pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{7}{8pt}}%
+ \*fdef pinnumberfont
+ \*fdef functionfont
+ \toks0={\CIusefont{\rmdefault}{8}{9.5pt}}%
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{8}{9.5pt}}%
+ \*fdef inlabelfont
+\or % magstep 1
+ \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{12}{14pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{8}{9.5pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{9}{11pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{9}{11pt}}%
+ \*fdef inlabelfont
+\or % magstep 2
+ \toks0={\CIusefont{\rmdefault}{14.4}{18pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{14.4}{18pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{9}{11pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{10}{12pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
+ \*fdef inlabelfont
+\or % magstep 3
+ \toks0={\CIusefont{\rmdefault}{17.28}{22pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{17.28}{22pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{12}{14pt}}%
+ \*fdef inlabelfont
+\or % magstep 4
+ \toks0={\CIusefont{\rmdefault}{20.74}{25pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{20.74}{25pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{14.4}{18pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{14.4}{18pt}}%
+ \*fdef inlabelfont
+\else\errhelp{0 ... 4 expected.}\errmessage{Bad magnification!}\fi
+%
+{\outlabelfont
+\global\*spc 0.4em}%
+%
+\font\c*fnt=cirest scaled \*mag
+\font\c*fntb=cicirc scaled \*mag
+\font\c*fntd=cidiod scaled \*mag
+\font\c*fntt=cibimos scaled \*mag
+\font\c*fntw=ciwidko scaled \*mag
+\font\c*fnts=cisym scaled \*mag
+%
+\outerspace1mm
+\pinnum*spc.7mm
+\pin*ind\fontdimen12\c*fntb
+\pin*spc\fontdimen13\c*fntb
+\io*ind\fontdimen14\c*fntb
+\mid*ind\fontdimen16\c*fntb
+\X*min\maxdimen
+\X*max-\maxdimen
+%
+\the\CIRCfinit
+\begingroup
+%
+ \the\rmacros
+ \let\.\junction
+ \def\- ##1 ##2 {\wire##1 ##2 }%
+ \def\= ##1 ##2 ##3 {\bundle##1 ##2 ##3 }%
+ \def\<{\ld*true}%
+%
+\parindent0pt
+\offinterlineskip\setbox\*bbox=\hbox\bgroup\at 0 0 }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\endcircuit{\egroup\leavevmode
+ \hbox{\kern-\X*min\unhbox\*bbox\kern\X*max}\endgroup
+ \PackageInfo{CIRC}{`\CIRCredef' restored}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+%
+\safedef{fallingEdge}{{\c*fnts\char3}}
+\safedef{raisingEdge}{{\c*fnts\char2}}
+\safedef{spike}{{\c*fnts\char4}}
+\safedef{ispike}{{\c*fnts\char12}}
+\safedef{squarePulse}{{\c*fnts\char1}}
+\safedef{squarePulses}{{\c*fnts\char5}}
+\safedef{sawtoothPuls}{{\c*fnt\char6}}
+%
+%^^A last update: Fri 03-13-1998
+% The last thing we define is the logo of CIRC.
+% This pretty small grey elephant was choosen and then digitized as a
+% result of a discussion about the incomming of new symbols into
+% CIRC. Idea by Andreas Tille.
+% \begin{macrocode}
+\def\CIRCLogo{\c*fnt\cc*0\getc*252 \check*max{.5\wd*}\check*min{.5\wd*}%
+ \setbox\*bbox=\hbox to \wd*{\hss\lower\ht*\hbox to 0pt{\hss
+ \symfont\raise1.5ex\rlap{\kern1ex CIRC}\box\box*}\hss}\put*box\reset*ifs}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Alle internen Buchstaben werden wieder auf ihren vormaligen
+% Kategoriekode gesetzt.
+% \begin{macrocode}
+\protectcirc
+% \end{macrocode}
+% Now we are ready to process all options of CIRC.
+% That means to load all modules.
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%</code>
+%^^A last update: Fri 03-13-1998
+%<*ic>
+% \begin{macrocode}
+\ProvidesFile{ic.def}
+% \end{macrocode}
+% \begin{macrocode}
+\freecirc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\**[#1 #2 #3 #4 {\cc*\cnta*\advance\cc*32 \advance\cc*#1
+ \Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}\char\cc*
+ \cc*\cnta*\advance\cc*97\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\**]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*48 \advance\cc*#1
+ \Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*F[#1 #2 #3 #4 #5 {\cc*\cnta*\advance\cc*#1
+ \X*check\Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}%
+ \rlap{\kern\io*ind\kern\mid*ind
+ \blap{\kern0pt\hc*{\functionfont{#5}}}}\char\cc*
+ \cc*\cnta*\advance\cc*96\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*F]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*16 \advance\cc*#1
+ \LX*check\*Olist\Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*L[#1 #2 #3 #4 #5 {\cc*\cnta*\advance\cc*64 \advance\cc*#1
+ \Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}%
+ \rlap{\iflab*\kern\io*ind\kern\mid*ind
+ \vtop{\kern\fontdimen17\c*fntb\kern\outerspace
+ \hc*{\circlabelfont{#5}}}\fi}\char\cc*
+ \cc*\cnta*\advance\cc*98\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*L]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*80 \advance\cc*#1
+ \Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*H#1 {\cc*\cnta*\X*check\Cadd*\*Ilist
+ \rlap{\kern\io*ind\kern\mid*ind\blap{\kern-\*spc\labelfont\hc*{#1\ }}}%
+ \char\cc*\cc*\cnta*\advance\cc*96\char\cc*\cc*\cnta*\advance\cc*16
+ \LX*check\*Olist\Cadd*\*Olist\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\C*init{\dimen4\*X*\dimen5\*Y*
+ \setbox\*bbox=\vtop\bgroup\c*fntb\cnta*=0 \ignorespaces}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\C*exit#1{\egroup\shift*IOlist{#1}\put*box\*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*o#1{$\overline{\hbox{#1}}$}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*|#1| {\hbox{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\JKMSFF#1 #2 #3 #4 {\name*{JKMSFF#1}\C*init
+\*|\*F[2 S {} S {} \*F]0 . {} {} |
+\*|\**[1 J {} 1J \**]1 Q $\neg$ {} |
+\*|\**[3 C {} C1 \**]0 . {} {} |
+\*|\**[1 K {} 1K \**]2 NQ $\neg$ {} |
+\*|\*L[2 R {} R {#2} \*L]0 . {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\DFF#1 #2 #3 #4 {\name*{DFF#1}\C*init
+\*|\*F[1 D {} 1D {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[3 C {} C1 {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\RSFF#1 #2 #3 #4 {\name*{RSFF#1}\C*init
+\*|\*F[1 R {} R {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[1 S {} S {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\NRSFF#1 #2 #3 #4 {\name*{NRSFF#1}\C*init
+\*|\*F[2 R {} R {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[2 S {} S {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\fff#1 #2 #3 #4 {\name*{fff#1}\C*init
+\*|\*F[1 IS {6} IS { } \*F]1 OK OK 5 |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\**[1 IT {2} IT \**]1 O O 3 |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[2 R {4} R {#2} \*L]1 OD OD 7 |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\NULL#1 #2 #3 #4 {\name*{NULL#1}\C*init
+\*|\*H{$\vcenter{\hbox{\c*fnts\char25}}\ \infty$} |
+\*|\**[1 i+ {} + \**]1 o+ + {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[1 i- {} $-$ {#2} \*L]1 o- $-$ {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\protectcirc
+% \end{macrocode}
+%</ic>
+%^^A last update: Fri 03-13-1998
+%<*ciphysicmf>
+font_identifier:="ciphysic";
+
+string optionname; optionname:="physics";
+
+input defcirc.mf;
+
+
+%% SPRING
+
+spring_lt#= 5CIu#;
+lspring_lt#= 7CIu#;
+spring_th#= 1CIu#;
+define_whole_pixels(lspring_lt,spring_lt,spring_th);
+spring_gap= .6CIu;
+spring_n=11;
+spring_swd=(spring_lt-2spring_gap)/spring_n;
+lspring_swd=(lspring_lt-2spring_gap)/spring_n;
+
+twopinchar("spring")("k")("spring")
+ (spring_lt#, .5spring_th#, .5spring_th#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ shiftpoint:=z0+(spring_lt,0);
+ z1=z0+(spring_gap,0);
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ for i:=1 upto spring_n:
+ x[i+1]=x[i]+spring_swd; y[i+1]=y[0]+if odd(i): 1 else: -1 fi*.5spring_th;
+ if i=spring_n: y[i+1]:=y[i+1]-if odd(i): 1 else: -1 fi*.5spring_th fi;
+ draw z[i]--z[i+1];
+ endfor;
+ z[spring_n+2]=z0+(spring_lt,0);
+ pickup pensquare scaled normalline;
+ z[spring_n+2]=z0+(spring_lt,0);
+ draw z[spring_n+1]--z[spring_n+2];
+)
+
+twopinchar("lspring")("k")("long spring")
+ (lspring_lt#, .5spring_th#, .5spring_th#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ shiftpoint:=z0+(lspring_lt,0);
+ z1=z0+(spring_gap,0);
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ for i:=1 upto spring_n:
+ x[i+1]=x[i]+lspring_swd; y[i+1]=y[0]+if odd(i): 1 else: -1 fi*.5spring_th;
+ if i=spring_n: y[i+1]:=y[i+1]-if odd(i): 1 else: -1 fi*.5spring_th fi;
+ draw z[i]--z[i+1];
+ endfor;
+ z[spring_n+2]=z0+(lspring_lt,0);
+ pickup pensquare scaled normalline;
+ draw z[spring_n+1]--z[spring_n+2];
+)
+
+%% MASS single/double
+
+dmass_lt#= 2CIu#;
+mass_r#= 1.5CIu#;
+define_whole_pixels(dmass_lt,mass_r);
+
+twopinchar("fdmass")("m")("mass with two forces; full drawn")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(dmass_lt,0);
+ shiftpoint:=z1;
+ draw z0--z1;
+ z2=.5[z0,z1];
+ pickup pencircle scaled mass_r;
+ drawdot z2;
+)
+
+twopinchar("dmass")("m")("mass with two forces; outlined")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(.5(dmass_lt-mass_r),0);
+ draw z0--z1;
+ z3=z0+(dmass_lt,0);
+ shiftpoint:=z3;
+ z4=z3-(.5(dmass_lt-mass_r),0);
+ draw z3--z4;
+ z2=.5[z0,z3];
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled mass_r shifted z2;
+)
+
+twopincharfour("fmass")("m")(".")("*")("mass; full drawn")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(dmass_lt,0);
+ z2=.5[z0,z1];
+ draw z0--z2;
+ pickup pencircle scaled mass_r;
+ drawdot z2;
+
+ shiftpoint:=z1;
+)
+
+twopincharfour("mass")("m")(".")("*")("mass; outlined")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(.5(dmass_lt-mass_r),0);
+ draw z0--z1;
+ z3=z0+(dmass_lt,0);
+ z2=.5[z0,z3];
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled mass_r shifted z2;
+
+ shiftpoint:=z3;
+)
+
+%% WALL
+
+wall_lt#= 1.5CIu#;
+wall_ht#= 2.5CIu#;
+define_whole_pixels(wall_ht, wall_lt);
+wall_f=1/3;
+wall_n=6;
+wall_alpha=40;
+
+twopincharfour("wall")("{}")(".")("|")("wall")
+ (wall_lt#,.5wall_ht#
+ +wall_lt#*(1-wall_f)*sind(wall_alpha),.5wall_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(wall_f*wall_lt,0);
+ draw z0--z1;
+ z1=.5[z2,z3]; y3-y2=wall_ht; x3=x2;
+ pickup pensquare scaled verythickline;
+ draw z2--z3;
+ path a;
+ a=(0,0)--(1-wall_f)*wall_lt*dir(wall_alpha);
+ pickup pencircle scaled normalline;
+ for i:=0 upto wall_n: draw a shifted (i/wall_n)[z2,z3]; endfor
+
+ shiftpoint:=z0+(wall_lt,0);
+)
+
+tile_lt#= 2CIu#;
+tile_ht#= .4CIu#;
+tile_f=0.1;
+
+define_whole_pixels(tile_lt,tile_ht);
+
+twopincharfour("tile")("{}")(".")("*")("tile")
+ (wall_lt#,.5tile_ht#,.5tile_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(tile_lt,0);
+ z2=tile_f[z0,z1];
+ draw z0--z1;
+ pickup pensquare scaled verythickline;
+ draw z1--z2;
+ shiftpoint:=z1;
+)
+
+spin_lt#= 2CIu#;
+spin_r#= .7CIu#;
+spin_ht#= 2CIu#;
+spin_alt= .5CIu;
+spin_awd= .1CIu;
+define_whole_pixels(spin_lt,spin_r, spin_ht);
+
+twopinchar("spinu")("S")("spin up")
+ (spin_lt#, .6spin_ht#, .6spin_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(spin_lt,0);
+ draw z0--z1;
+ z2=.5[z0,z1];
+ y3-y4=spin_ht;
+ x3=x4=x2;
+ y2=.6[y3,y4];
+ y5=y6=y3-spin_alt;
+ x5=x2-spin_awd;
+ x6=x2+spin_awd;
+% pickup pencircle scaled thinline;
+ draw z3--z4;
+ filldraw z5--z3--z6--cycle;
+ pickup pencircle scaled spin_r;
+ drawdot z2;
+ shiftpoint:=z1;
+)
+
+twopinchar("spind")("S")("spin down")
+ (spin_lt#, .6spin_ht#, .6spin_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(spin_lt,0);
+ draw z0--z1;
+ z2=.5[z0,z1];
+ y3-y4=-spin_ht;
+ x3=x4=x2;
+ y2=.6[y3,y4];
+ y5=y6=y3+spin_alt;
+ x5=x2-spin_awd;
+ x6=x2+spin_awd;
+% pickup pencircle scaled thinline;
+ draw z3--z4;
+ filldraw z5--z3--z6--cycle;
+ pickup pencircle scaled spin_r;
+ drawdot z2;
+ shiftpoint:=z1;
+)
+
+endCIRCfont
+%</ciphysicmf>
+%^^A last update: Fri 03-13-1998
+%
+%<*csybimos>
+font_identifier:="cibimos";
+
+string optionname; optionname:="";
+
+input defcirc.mf;
+
+input csym;
+designsize:=1lLE#;
+
+def mosfet = % ok
+ z0=(0,0);
+ x1=x2=x3=x4;
+ y2-y1=mos_SD;
+ y4-y3=mos_sd;
+ .5[z2,z1]=.5[z4,z3];
+ y6=y4; y7=y3;
+ x4-x6=x3-x7;
+ .5[z8,z9]=.5[z6,z7]=z5;
+ x9=x8;
+ y8-y6=mos_soSD;
+ x10=x11;
+ x0+mos_Gsub=x10+mos_ox=x7;
+ x1-x0=mos_GSx;
+ y0=y10=y1+mos_GSy;
+ y6-y11=y10-y7;
+ z12=.5[z1,z2];
+ z6=.5[z13,z8];
+ z7=.5[z14,z9];
+ z15-z16=z8-z13;
+ z5=.5[z15,z16];
+ pickup pencircle scaled mos_rad;
+ drawdot round(z3);
+ pickup pensquare scaled normalline;
+ draw z1--z3--z7;
+ draw z2--z4--z6;
+ draw z0--z10--z11;
+ draw z5--z12--z3;
+ pickup pensquare scaled thickline;
+enddef;
+
+def mosfet_V = % ok
+ mosfet;
+ draw z8--z9;
+enddef;
+
+def mosfet_A = % ok
+ mosfet;
+ draw z8--z13;
+ draw z9--z14;
+ draw z15--z16;
+enddef;
+
+def fet = % ok
+ z0=(0,0);
+ z1=z0+(fet_Gsub,0);
+ y2=y1;
+ x2=x3=x4=x0+fet_GSx;
+ y3=y2-fet_GSy;
+ z2-z3=z4-z5;
+ y4-y3=fet_SD;
+ y6=y5;
+ x1=x6;
+ x8=x7;
+ y8=y1-fet_soSD;
+ .5[z4,z3]=.5[z5,z2];
+ .5[z7,z8]=.5[z1,z6];
+ z9=z1-(fet_sarr+tri_lt,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3;
+ draw z6--z5--z4;
+ pickup pensquare scaled thickline;
+ draw z7--z8;
+enddef;
+
+def transistor_without_basis = % "uberarbeiten
+ numeric pl;
+ pl:=.5(tst_ht-tst_iht);
+ z1-z2=(0,tst_iht);
+ z0=.5[z1,z2];
+ z3=tst_fac[z0,z1];
+ z4=tst_fac[z0,z2];
+ z5=z1+(tst_wd,0);
+ z6=z2+(tst_wd,0);
+ z7=z5+(0,pl);
+ z8=z6+(0,-pl);
+ z9=tst_dis[z4,z6];
+ pickup pensquare scaled normalline;
+ draw z1--z2;
+ draw z3--z5--z7;
+ draw z4--z6--z8;
+ pickup pencircle scaled thinline;
+ triangle(z9,tst_rad,tri_phi,angle(z6-z4));
+enddef;
+
+def npn_no_basis = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=-tri_lt;
+ tst_dis:=npn_dis;
+ z0=(0,0);
+ transistor_without_basis;
+enddef;
+
+def npn_photo = % "uberarbeiten
+numeric pl;
+ z0=(0,0);
+ pl:=.5(tst_ht-tst_iht);
+ y0=y1=y2=y3;
+ x1=x0+tst_ht;
+ x2-x0=x1-x3=pl;
+ y5=y4=y6=y7=y8=y0+tst_wd;
+ x5-x6=tst_iht;
+ x4=.5[x5,x6]=.5[x0,x1];
+ x7=tst_fac[x4,x5];
+ x8=tst_fac[x4,x6];
+ z9=tst_dis[z2,z8];
+ pickup pensquare scaled normalline;
+ draw z0--z2--z8--z7--z3--z1;
+ draw z5--z6;
+ pickup pencircle scaled thinline;
+ triangle(z9,tst_rad,tri_phi,angle(z8-z2));
+enddef;
+
+def pnp_no_basis = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=tri_lt;
+ tst_dis:=pnp_dis;
+ z0=(0,0);
+ transistor_without_basis;
+enddef;
+
+def npn = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=-tri_lt;
+ tst_dis:=npn_dis;
+ z0=(tst_wd,0);
+ z20=(0,0);
+ transistor_without_basis;
+ pickup pensquare scaled normalline;
+ draw z20--z0;
+enddef;
+
+def pnp = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=tri_lt;
+ tst_dis:=pnp_dis;
+ z0=(tst_wd,0);
+ z20=(0,0);
+ transistor_without_basis;
+ pickup pensquare scaled normalline;
+ draw z20--z0;
+enddef;
+
+
+"Transistor NPN ohne Basis";
+eightchars(0)
+ (npn_no_basis)
+ (tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor PNP ohne Basis";
+eightchars(8)
+ (pnp_no_basis)
+ (tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor NPN";
+eightchars(16)
+ (npn)
+ (tst_wd#+tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor PNP";
+eightchars(24)
+ (pnp)
+ (tst_wd#+tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"FET n-Kanal";
+eightchars(32)
+ (fet;
+ pickup pencircle scaled thinline;
+ triangle(z1,tri_lt,tri_phi,180);
+ )
+ (fet_GSx#,fet_GSy#,fet_SD#-fet_GSy#,0);
+
+"FET p-Kanal";
+eightchars(40)
+ (fet;
+ pickup pencircle scaled thinline;
+ triangle(z9,tri_lt,tri_phi,0);
+ )
+ (fet_GSx#,fet_GSy#,fet_SD#-fet_GSy#,0);
+
+"MOSFET n-Kanal V";
+eightchars(48)
+ (mosfet_V;
+ pickup pencircle scaled thinline;
+ triangle(z5,tri_lt,tri_phi,0);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET p-Kanal V";
+eightchars(56)
+ (mosfet_V;
+ pickup pencircle scaled thinline;
+ triangle(z12,tri_lt,tri_phi,180);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET n-Kanal A";
+eightchars(64)
+ (mosfet_A;
+ pickup pencircle scaled thinline;
+ triangle(z5,tri_lt,tri_phi,0);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET p-Kanal A";
+eightchars(72)
+ (mosfet_A;
+ pickup pencircle scaled thinline;
+ triangle(z12,tri_lt,tri_phi,180);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+current_char_code:=80;
+
+twopincharfourfour("npnPH")("T")("E")("C")("photo transistor")
+ (tst_ht#,tst_wd#+1.6lLE#,0)
+(
+shiftpoint:=z1;
+npn_photo;
+lightarrows(z4+(.8lLE,1.7lLE),240);
+)
+
+end;
+%</csybimos>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csysym>
+input csym;
+designsize:=.5lLE#;
+
+def eqtriangle(expr l)=
+ x1=x2=x0=x3-l;
+ y3=y0;
+ z1-z2=(z3-z2) rotated 60;
+enddef;
+
+def sinus(expr A, k, s) =
+ j:=0;
+ for i:=0 step s until 360:
+ z[j]=(k*i,A*sind(i));
+ j:=j+1;
+ endfor
+ draw for i:=0 upto floor(360/s)-1: z[i].. endfor z[floor(360/s)];
+enddef;
+
+def disarrow =
+ z0=(0,0);
+ x0=x1=x2;
+ y1-y2=darr_ht;
+ .5[z1,z2]=z0;
+ y0=y3;
+ x3-x0=darr_lt;
+ pickup pensquare scaled normalline;
+ draw z0--z3;
+ draw z1--z2;
+ triangle(z0,darr_rad,darr_phi,0);
+enddef;
+
+def trigger =
+ z0=(0,0);
+ x1=x2; x3=x4;
+ y2=y4=y5; y0=y1=y3;
+ x3-x1=.17sym;
+ x1-x0=x5-x4=.3sym;
+ y2-y1=sym;
+enddef;
+
+def impuls =
+ z0=(0,0);
+ y0=y1=y4=y5=y7=y8=y9;
+ x1-x0=x3-x2=x5-x4=x8-x7=.6sym;
+ x9-x0=x6-x2=.2sym;
+ x1=x2; x3=x4; x6=x7;
+ y2-y1=y3-y4=y6-y7=sym;
+ x10=x0; y11=y10=y2;
+ x11=x8;
+enddef;
+
+
+
+ "Rechteckimpuls";
+ beginchar(1,1.9sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3--z4--z5;
+ endchar;
+
+ "positive Flanke";
+ beginchar(2,1.3sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3;
+ endchar;
+
+ "negative Flanke";
+ beginchar(3,1.3sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z2--z3--z4--z5) shifted (x0-x1,0);
+ endchar;
+
+ "Nadelimpuls";
+ beginchar(4,1.5sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z0--z1--z2--z6--z7--z8);
+ endchar;
+
+ "inverser Nadelimpuls";
+ beginchar(12,1.5sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z10--z2--z1--z7--z6--z11);
+ endchar;
+
+ "Rechteckspannung";
+ beginchar(5,3.1sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3--z4--z5;
+ draw (z0--z1--z2--z3--z4--z5) shifted z4;
+ endchar;
+
+ "Rechteckimpulse";
+ beginchar(13,2.6sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z6--z7--z8;
+ draw (z0--z1--z2--z6--z7--z8) shifted z4;
+
+ endchar;
+
+ "S"&ditto&"agezahn";
+ beginchar(6,1.9sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z9--z3--z4--z5;
+ endchar;
+
+ "Trigger";
+ beginchar(7,.87sym#,sym#,0);
+ trigger
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z5;
+ draw z1--z3--z4;
+ endchar;
+
+ "Abstandsst"&ditto&"uck";
+ fourchars(8)(disarrow)(z0)(.5darr_ht#,darr_lt#,.5darr_ht#);
+
+"sinus wave";
+beginchar(16,1.6sym#,9/35*sym#,9/35*sym#);
+ pickup pencircle scaled normalline;
+ sinus(9/35*sym,1.6sym/360,45);
+endchar;
+
+"variable sinus wave";
+beginchar(17,1.6sym#,9/35*sym#,9/35*sym#);
+ pickup pencircle scaled normalline;
+ sinus(9/35*sym,1.6sym/360,45);
+ fillarrow((.8*sym,0),20/35*sym,15/35*sym,45,15/35*sym,15)();
+endchar;
+
+"symbol of amplifier";
+beginchar(24,cosd(30)*1.9sym#,.95sym#,.95sym#);
+ z0=(0,0);
+ eqtriangle(1.9sym);
+ pickup pencircle scaled normalline;
+ draw z1--z2--z3--cycle;
+endchar;
+
+"symbol of buffer";
+beginchar(25,cosd(30)*1sym#,.5sym#,.5sym#);
+ z0=(0,0);
+ eqtriangle(1sym);
+ pickup pencircle scaled normalline;
+ draw z1--z2--z3--cycle;
+endchar;
+
+bye;
+%</csysym>
+%
+%^^A last update: Fri 03-13-1998
+%<*defcircmf>
+mode_setup;
+font_coding_scheme:="CIRC symbols";
+
+message("CIRC %<*"&font_identifier_&">");
+message("CIRC \freecirc");
+message("CIRC \addCIRCfont "&font_identifier_);
+message("CIRC %</"&font_identifier_&">");
+message("CIRC %<+doc> \optionline "&optionname);
+message("CIRC %<*"&font_identifier_&",doc>");
+message("");
+
+inner bye;
+def endCIRCfont =
+ message("CIRC %</"&font_identifier_&",doc>");
+ message("CIRC %<*"&font_identifier_&">");
+ message("CIRC \protectcirc");
+ message("CIRC %</"&font_identifier_&">");
+ message("");
+ bye;
+enddef;
+
+CIu#:=7pt#; define_whole_pixels(CIu);
+% define all symbols by a 7pt grid --> CIRC unit
+
+current_char_code:=0;
+% start with character code 0
+
+pair shiftpoint;
+
+linethickness#:= 0.45pt#;
+thinline# := 0.5linethickness#;
+normalline# := 1.0linethickness#;
+thickline# := 1.5linethickness#;
+verythickline#:= 2.5linethickness#;
+define_whole_blacker_pixels(normalline,thinline,thickline,verythickline);
+
+fontdimen6: 1CIu#;
+%export the CIRC unit to TeX
+
+extra_endchar:=extra_endchar & "labels(range 0 thru 100);";
+% for proofing mark all points
+
+def {{ =
+ begingroup
+ save T; transform T;
+ T:=currenttransform;
+ save currenttransform;
+ transform currenttransform;
+ currenttransform:=T;
+enddef;
+
+def }} = endgroup; enddef;
+
+def addTF(text t) = currenttransform:=currenttransform t; enddef;
+
+def twopinchar(text name, lab, doc)(expr wd, ht, dp)(text body) =
+ message("CIRC \cdef "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code));
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code, wd, ht, dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+
+def twopincharfour(text name, lab, pini, pinii, doc)
+ (expr wd, ht, dp)(text body) =
+ message("CIRC \cdefiv "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code)&" "&
+ pini&" "&pinii);
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code,wd,ht,dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+
+def twopincharfourfour(text name, lab, pini, pinii, doc)
+ (expr wd, ht, dp)(text body) =
+ message("CIRC \cdefiviv "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code)&" "&
+ pini&" "&pinii);
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code,wd,ht,dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(reflectedabout(left,right)); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(reflectedabout(left,right) rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,ht,dp);
+ {{addTF(reflectedabout (left,right) shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(reflectedabout(left,right) shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+%</defcircmf>
+%^^A last update: Sat 06-13-2003
+%
+%<*csywidko>
+input csym;
+designsize:=.5lLE#;
+
+def resistor =
+ numeric pl;
+ pl:=.5(res_lt-res_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(res_wd,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,res_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ z8=z0+(res_x,-res_y);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z2--z3;
+ draw z4--z6--z7--z5--cycle;
+enddef;
+
+usR_iwd# = 3lLE#;
+usR_iht# = 1lLE#;
+usR_wd# = 4lLE#;
+usR_f = .25;
+define_pixels(usR_iwd, usR_iht, usR_wd);
+
+vardef usR =
+ z0=(0,0);
+ z1=z0;
+ y1=y2=y3=y4;
+ x2-x1=usR_wd;
+ x4-x3=usR_iwd;
+ .5[x1,x2]=.5[x3,x4];
+ y5=y7=y9;
+ y6=y8=y10;
+ y5-y6=usR_iht;
+ .5[y5,y6]=y1;
+ x7-x5=x9-x7=x11-x9=x8-x6=x10-x8;
+ x6=.5[x5,x7];
+ x8-x6=(usR_wd-usR_iwd);
+ x5-x3=usR_f*(x8-x6);
+ pickup pensquare scaled normalline;
+ draw z1--z3--z5--z6--z7--z8--z9--z10--z4--z2;
+enddef;
+
+vardef usR_var =
+ {{
+ addxTF(shifted -z6 rotated -90);
+ usR;
+ pickup pensquare scaled normalline;
+ arrow(z6,.8res_ara,.5usR_iht,res_phi,arr_lt,arr_phi)
+ (pickup pencircle scaled normalline);
+ }}
+enddef;
+
+def resistor_var =
+ {{
+ addxTF(shifted -z8 rotated -90);
+ resistor;
+ pickup pensquare scaled normalline;
+ arrow(z8,res_ara,0,res_phi,arr_lt,arr_phi)
+ (pickup pencircle scaled normalline);
+ }}
+enddef;
+
+def capacitor =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cap_lt-cap_spc);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(cap_spc,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,cap_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ draw z0--z1;
+ draw z2--z3;
+ draw z4--z5;
+ draw z6--z7;
+enddef;
+
+def capacitor_var =
+ capacitor;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z1,z2],cap_ara,cap_arb,cap_phi,arr_lt,arr_phi)();
+enddef;
+
+def electrolytic_capacitor =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cap_lt-cap_spc-cap_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(cap_spc,0);
+ z3=z2+(cap_wd,0);
+ z4=z3+(pl,0);
+ z5-z6=z7-z8=z9-z10=(0,cap_ht);
+ z1=.5[z5,z6];
+ z2=.5[z7,z8];
+ z3=.5[z9,z10];
+ draw z0--z1;
+ draw z3--z4;
+ draw z5--z6;
+ draw z7--z9--z10--z8--cycle;
+enddef;
+
+
+"Widerstand";
+twochars(0)(resistor)(.5res_ht#,res_lt#,.5res_ht#);
+
+"US Widerstand";
+twochars(24)(usR)(.5res_ht#,res_lt#,.5res_ht#);
+
+"Widerstand variabel";
+eightchars(8)(resistor_var)(res_y#,res_lt#-res_x#,res_x#,res_o#);
+
+"US Widerstand variabel";
+eightchars(32)(usR_var)(res_y#,res_lt#-res_x#,res_x#,res_o#);
+
+"Kondensator";
+twochars(128)(capacitor)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+"Kondensator variabel";
+twochars(130)(capacitor_var)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+"Elektrolyt-Kondensator";
+fourchars(136)(electrolytic_capacitor)(z4)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+end;
+%</csywidko>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csym>
+mode_setup;
+
+% alle Symbole in einem 7pt Raster definieren
+lLE# :=7pt#;
+define_whole_pixels(lLE);
+
+% Liniest"arke und deren Variationen
+linethickness#:= 0.45pt#;
+thinline# := 0.5linethickness#;
+normalline# := 1.0linethickness#;
+thickline# := 1.5linethickness#;
+verythickline#:= 2.5linethickness#;
+define_whole_blacker_pixels(normalline,thinline,thickline,verythickline);
+
+fontdimen6: 1lLE#;
+
+% *_ht means the total height !!! only <integer>*lLE#
+% *_lt means the total length !!! only <integer>*lLE#
+
+% *_spc means an inner space
+% *_spx means an inner x-space
+% *_spy means an inner y-space
+% *_wd means an inner width
+% *_rad means a radius
+% *_dia means a diameter
+% *_phi means an angle
+% *_psi means an angle
+
+%box symbol
+box_wd# := 4lLE#;
+define_pixels(box_wd);
+
+%oscillograph
+osc_dia# := 3lLE#;
+osc_t := .75; % settings from Andreas Tille
+osc_spc := .5lLE;
+define_pixels(osc_dia);
+
+%wwire
+ww_spc := .25lLE;
+
+darr_ht# := 1.3lLE#;
+darr_lt# := 1lLE#;
+darr_phi := 10;
+darr_rad := 1lLE;
+define_pixels(darr_ht,darr_lt);
+
+
+bnd_lt# := 1lLE#;
+bnd_phi := 60;
+define_pixels(bnd_lt);
+
+dsw_wd# := 4lLE#;
+dsw_ht# := 2lLE#;
+dsw_ov := .2lLE;
+dsw_t := .2;
+dsw_cc := .35;
+dsw_c := .3;
+dsw_phi := 12;
+define_pixels(dsw_wd,dsw_ht);
+
+
+tri_lt := 0.8lLE;
+tri_phi := 18;
+
+arr_lt := 0.8lLE;
+arr_phi := 10;
+
+
+%capacitor
+cap_wd := .4lLE; %only for electrolytic capacitor
+cap_spx := .32lLE; %only for electrolytic capacitor
+cap_spy := .5lLE; %only for electrolytic capacitor
+cap_rad := .4lLE;
+cap_spc := .32lLE;
+cap_ht# := 2lLE#;
+cap_lt# := 2lLE#;
+cap_phi := 45;
+cap_ara := 1.4lLE;
+cap_arb := 1.2lLE;
+define_pixels(cap_lt,cap_ht);
+
+%resistor
+res_wd := 3lLE;
+res_ht# := 1lLE#;
+res_lt# := 4lLE#;
+res_ara# := 3.3lLE#;
+res_phi := 45;
+res_x# := 1lLE#;
+res_y# := 1lLE#;
+res_o# := res_ara#*cosd(res_phi)-res_y#;
+define_pixels(res_lt,res_ht,res_x,res_y,res_o,res_ara);
+
+%diode
+did_wd := 1.5lLE;
+did_ht# := 1.5lLE#;
+did_lt# := 3lLE#;
+did_zlt := .4lLE;
+Dcap_ht := .5lLE;
+Dcap_spc := .15lLE;
+Dcap_wd := .35lLE;
+define_pixels(did_lt,did_ht);
+
+thy_ht# := 1lLE#;
+define_pixels(thy_ht);
+
+%led
+% >wd ht lt< same as diode
+% led_* means values for the arrows
+led_lt# := 1.5lLE#;
+led_wd := .8lLE;
+led_phi := 10; %aperture-angle of arrows
+led_psi := 50; %angle of arrows from baseline
+led_spc := .4lLE; %space between arrows
+led_spx := .4lLE;
+led_spy# := .8lLE#;
+define_pixels(led_spy, led_lt);
+
+
+%transistor
+pnp_dis := 0.18;
+npn_dis := (1-pnp_dis);
+tst_fac := 0.23333;
+tst_phi := 20;
+tst_iht := 3lLE;
+tst_wd# := 1lLE#;
+tst_lt# := 2lLE#;
+tst_ht# := 4lLE#;
+define_pixels(tst_ht,tst_lt,tst_wd);
+
+%crystal
+cry_wd := .8lLE;
+cry_spc := .32lLE;
+cry_ht# := 2lLE#;
+cry_lt# := 4lLE#;
+define_pixels(cry_lt,cry_ht);
+
+%input/output connection
+ioc_dia := .5lLE;
+ioc_ht# := .5lLE#;
+ioc_lt# := 1lLE#;
+ioc_arr := 0.7lLE;
+ioc_phi := 12;
+define_pixels(ioc_ht,ioc_lt);
+
+%connection dot
+cdt_dia := .4lLE;
+cdt_ht# := .4lLE#;
+cdt_lt# := .2lLE#;
+define_pixels(cdt_ht,cdt_lt);
+
+%GND
+GND_wd# := 1.4res_ht#;
+gnd_wd# := 1.8lLE#;
+gnd_ht# := 1lLE#;
+gnd_spc# := .2lLE#;
+gnd_q := .7;
+define_pixels(gnd_ht,gnd_spc,gnd_wd,GND_wd);
+
+%gate
+inv_rad := .36lLE;
+gat_ht# := 5lLE#;
+gat_lt# := 7lLE#;
+define_pixels(gat_lt,gat_ht);
+
+bbd_wd# := 6lLE#;
+bbd_ht# := 10lLE#;
+bba_wd# := 8lLE#;
+bba_ht# := 4lLE#;
+define_pixels(bbd_wd,bbd_ht,bba_wd,bba_ht);
+
+%big integrated circuits
+pin_lt# := 2lLE#; % pin length
+ios_wd# := 2.5lLE#; % in out space
+mid_wd# := 0lLE#; % middle width
+pin_spc# := 2lLE#; % pin space
+out_spc# := 1lLE#; % outer space between pin and box
+
+define_pixels(pin_lt,ios_wd,mid_wd,pin_spc,pin_wht,out_spc);
+
+%value
+val_lt# := 2lLE#;
+val_phi := 7;
+val_lft := 0;
+val_rht := 0.9;
+val_ht# := .2lLE#;
+define_pixels(val_lt,val_ht);
+
+%circle
+cir_ht# := 1.2lLE#;
+cir_lt# := 4lLE#;
+cir_phi := 45;
+cir_ara := 2.2lLE;
+cir_arb := 1.8lLE;
+define_pixels(cir_ht,cir_lt);
+
+%usource
+uso_ht# := 1.5lLE#;
+uso_lt# := 4lLE#;
+uso_min := 1lLE;
+uso_pls := 3lLE;
+uso_spc := .5lLE;
+uso_rad := 3lLE;
+uso_dis := 0.2;
+uso_phi := 45;
+uso_ara := 1.6lLE;
+uso_arb := .8lLE;
+define_pixels(uso_ht,uso_lt);
+
+%isource
+iso_ht# := 1.2lLE#;
+iso_lt# := 4lLE#;
+iso_dis := 0.7;
+iso_rad := .8lLE;
+iso_phi := 45;
+iso_ara := 2.2lLE;
+iso_arb := 1.8lLE;
+define_pixels(iso_ht,iso_lt);
+
+%coil
+coi_ht# := .35lLE#;
+coi_lt# := 4lLE#;
+define_pixels(coi_ht,coi_lt);
+coi_rad := coi_ht;
+coi_num := 4;
+
+%switch
+swt_lt# := 4lLE#;
+swt_phi := 30;
+swt_dis := 0.3;
+swt_ind := 0.8;
+swt_slt := 0.4lLE;
+swt_ht# := (1-2swt_dis)*sind(swt_phi)*swt_lt#;
+define_pixels(swt_ht,swt_lt);
+
+%OPV
+opv_ht# := 4.5lLE#;
+opv_lt# := 14lLE#;
+opv_dis# := 3lLE#;
+opv_frc := 1.1;
+define_pixels(opv_lt,opv_ht,opv_dis);
+
+%FET
+fet_SD# := 4lLE#; % Source--Drain
+fet_GSx# := 2lLE#; % Gate--Source, x
+fet_GSy# := 1lLE#; % Gate--Source, y
+fet_Gsub := 1lLE; % Gate--Substrat
+fet_soSD := 0.3lLE; % Substrat "uber Source und Drain
+fet_sarr := 0.2lLE; % Substrat--Pfeil
+define_pixels(fet_SD,fet_GSx,fet_GSy);
+
+
+%MOSFET
+mos_SD# := fet_SD#;
+mos_GSx# := fet_GSx#;
+mos_GSy# := fet_GSy#;
+
+mos_sd := 2.3lLE;
+mos_Gsub := fet_Gsub;
+mos_ox := 0.3lLE;
+mos_soSD := fet_soSD;
+mos_rad := 0.2lLE;
+define_pixels(mos_SD,mos_GSx,mos_GSy);
+
+sym# := 232/36pt#;
+define_pixels(sym);
+
+% ############
+% definitions
+% ############
+
+% for proofing mark all points
+extra_endchar:=extra_endchar & "labels(range 0 thru 30);";
+
+def {{ =
+ begingroup
+ save T; transform T;
+ T:=currenttransform;
+ save currenttransform;
+ transform currenttransform;
+ currenttransform:=T;
+enddef;
+
+def }} = endgroup; enddef;
+
+def noarrowTF =
+ transform _aT;
+ numeric _x[],_y[];
+ _aT:=currenttransform;
+ for $=1 upto 20 : _x[$]:=x[$]; _y[$]:=y[$]; endfor;
+ endgroup;
+ for $=1 upto 20 : x[$]:=_x[$]; y[$]:=_y[$]; endfor;
+ {{
+enddef;
+
+def addTF(text t) = currenttransform:=currenttransform t; enddef;
+def addxTF(text t) = currenttransform:=(identity t) transformed
+ currenttransform; enddef;
+
+def triangle(expr p, l, alpha, phi) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0+((l,0) rotated (alpha+phi));
+ iz2=iz0+((l,0) rotated (-alpha+phi));
+ fill ((iz0--iz1--iz2--cycle) shifted round(p));
+enddef;
+
+def arrow(expr p, a, b, phi, l, alpha)(text doother) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0-((l,0) rotated (alpha+phi));
+ iz2=iz0-((l,0) rotated (-alpha+phi));
+ iz3=p transformed if known _aT : _aT; else: identity; fi;
+ iz3-iz4=(b,0) rotated phi;
+ iz5-iz3=(a,0) rotated phi;
+ iz6-iz3=(a-3*rt(0),0) rotated phi;
+ draw iz4--iz6;
+ doother;
+ draw ((iz1--iz0--iz2) shifted round(iz5));
+ transform _aT; %Transformation l"oschen
+enddef;
+
+def fillarrow(expr p, a, b, phi, l, alpha)(text doother) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0-((l,0) rotated (alpha+phi));
+ iz2=iz0-((l,0) rotated (-alpha+phi));
+ iz3=p transformed if known _aT : _aT; else: identity; fi;
+ iz3-iz4=(b,0) rotated phi;
+ iz5-iz3=(a,0) rotated phi;
+ iz6-iz3=(a-3*rt(0),0) rotated phi;
+ draw iz4--iz6;
+ doother;
+ fill ((iz1--iz0--iz2--cycle) shifted round(iz5));
+ transform _aT; %Transformation l"oschen
+enddef;
+
+lightarr_spc#=.5lLE#;
+lightarr_lt#=1.5lLE#;
+lightarr_alt=round(.7lLE);
+lightarr_awd=round(.2lLE);
+define_pixels(lightarr_spc,lightarr_lt);
+def lightarrows(expr zpoint,lightarr_psi) =
+ z100=zpoint;
+ x100=x103=x105;
+ x101=x104=x106=x100+lightarr_lt;
+ y103=y104=y100+.5lightarr_spc;
+ y105=y106=y100-.5lightarr_spc;
+ x107=x108=x109=x110=x104-lightarr_alt;
+ y107-y108=y109-y110=good.y(lightarr_awd);
+ .5[y107,y108]=y104;
+ .5[y109,y110]=y106;
+ pickup pensquare scaled normalline rotated lightarr_psi;
+ draw (z107--z104--z108--cycle) rotatedaround(z100,lightarr_psi);
+ draw (z109--z106--z110--cycle) rotatedaround(z100,lightarr_psi);
+ draw (z103--z104) rotatedaround(z100,lightarr_psi);
+ draw (z105--z106) rotatedaround(z100,lightarr_psi);
+
+enddef;
+
+
+def eightchars(expr cfchar) % erster Zeichenkode
+ (text dochar) % Zeichenkommandos
+ (expr x, yf, ys, o) = % Abst"ande
+
+ beginchar(cfchar,x,ys,yf); charic:=o;
+ dochar;
+ endchar;
+ beginchar(cfchar+1,x,ys,yf); charic:=o;
+ {{addTF(reflectedabout(up,down)); dochar;}}
+ endchar;
+ beginchar(cfchar+2,yf,x,o+x); charic:=ys;
+ {{addTF(rotated 270); dochar;}}
+ endchar;
+ beginchar(cfchar+3,yf,x+o,x); charic:=ys;
+ {{addTF(rotated 270); addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+4,x,yf,ys); charic:=o;
+ {{addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+5,x,yf,ys); charic:=o;
+ {{addTF(rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+6,ys,x,x+o); charic:=yf;
+ {{addTF(rotated 270); addTF(reflectedabout(up,down)); dochar;}}
+ endchar;
+ beginchar(cfchar+7,ys,x+o,x); charic:=yf;
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+enddef;
+
+def twochars(expr cfchar)(text dochar)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+enddef;
+
+def fourchars(expr cfchar)(text dochar)(text op)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+2,wd,dp,ht);
+ {{addTF(shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+3,ht,wd,dp);
+ {{addTF(shifted -op rotated -90); dochar;}}
+ endchar;
+enddef;
+
+def fourfourchars(expr cfchar)(text dochar)(text op)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+2,wd,dp,ht);
+ {{addTF(shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+3,ht,wd,dp);
+ {{addTF(shifted -op rotated -90); dochar;}}
+ endchar;
+ beginchar(cfchar+4,wd,dp,ht);
+ {{addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+5,ht,wd,dp);
+ {{addTF(reflectedabout(left,right) rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+6,wd,ht,dp);
+ {{addTF(reflectedabout (left,right) shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+7,dp,wd,ht);
+ {{addTF(reflectedabout(left,right) shifted -op rotated -90); dochar;}}
+ endchar;
+enddef;
+
+% small description of >hshade< and >vshade<
+%
+% The shade macros fill areas with a 'patternpath'.
+%
+% >vshade< expect that the area is bound left and right by vertical
+% lines, the upper and lower boundary is build by the two pathes
+% >pa< and >pb<.
+%
+% >hshade< expect it vice versa.
+%
+% The >patternpath< is used to draw it on invisible points of a grid.
+% These gridpoints have a distance of 'di'.
+
+primarydef x gridmod y = if x>0: (x mod y) else: -(-x mod y) fi enddef;
+
+def vshade(suffix pa, pb)(expr di, patternpath) = begingroup
+ path vl;
+ boolean ifshift;
+
+ if not cycle patternpath:
+ errmessage "patternpath has to be a cyclic path!" fi;
+
+ interim smoothing:=0; %change local only
+ interim autorounding:=0;
+
+ ifshift:=true;
+ ydi:=round(1.41di); % round against pattern in
+ xdi:=round(di); % pattern
+ if xdi<2: errmessage "di to small! di>=2" fi;
+ xs:=xpart(point 0 of pa);
+ xe:=xpart(point infinity of pa);
+ if xs>xe: ye:=xe; xe:=xs; xs:=ye; fi %force xs<xe
+ xs:=xs+((xe-xs) mod xdi) / 2; %adjust grid horizontally
+ vl:=(xs,infinity)--(xs,-infinity);
+ oys:=ypart(pa intersectionpoint vl);
+ oys:=oys-.5ydi; %adjust grid vertically
+ for xs:=xs step xdi until xe:
+ vl:=(xs,infinity)--(xs,-infinity); % new cut line
+ ys:=ypart(pa intersectionpoint vl);
+ ye:=ypart(pb intersectionpoint vl);
+ ifshift:=not(ifshift); %shift periodically
+ sy:=ydi-((ys-oys) gridmod ydi);
+ ys:=ys+sy if ifshift: if sy-.5ydi<0:+else:-fi .5ydi fi;
+ for ys:=ys step if ys>ye:-fi ydi until ye:
+ fill patternpath shifted (xs,ys);
+ endfor
+ endfor;
+ endgroup
+enddef;
+
+def hshade(suffix pa, pb)(expr di, patternpath) = begingroup
+ path hl;
+ boolean ifshift;
+
+ if not cycle patternpath:
+ errmessage "patternpath has to be a cyclic path!" fi;
+
+ interim smoothing:=0; %change local only
+ interim autorounding:=0;
+
+ ifshift:=true;
+ xdi:=round(1.41di); % round against pattern in
+ ydi:=round(di); % pattern
+ if ydi<2: errmessage "di to small! di>=2" fi;
+ ys:=ypart(point 0 of pa);
+ ye:=ypart(point infinity of pa);
+ if ys>ye: xe:=ye; ye:=ys; ys:=xe; fi %force ys<ye
+ ys:=ys+((ye-ys) mod ydi) / 2; %adjust grid vertically
+ hl:=(infinity,ys)--(-infinity,ys);
+ oxs:=xpart(pa intersectionpoint hl);
+ oxs:=oxs-.5ydi; %adjust grid horizontally
+ for ys:=ys step ydi until ye:
+ hl:=(infinity,ys)--(-infinity,ys); % new cut line
+ xs:=xpart(pa intersectionpoint hl);
+ xe:=xpart(pb intersectionpoint hl);
+ ifshift:=not(ifshift); %shift periodically
+ sx:=xdi-((xs-oxs) gridmod xdi);
+ xs:=xs+sx if ifshift: if sx-.5xdi<0:+else:-fi .5xdi fi;
+ for xs:=xs step if xs>xe:-fi xdi until xe:
+ fill patternpath shifted (xs,ys);
+ endfor
+ endfor;
+ endgroup
+enddef;
+
+
+endinput;
+%</csym>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csydiod>
+input csym;
+designsize:=1lLE#;
+
+def diode = % "uberarbeiten
+ numeric pl;
+ pl:=.5(did_lt-did_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(did_wd,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,did_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ z8=z4+(did_zlt,0);
+ z9=z0+(0,thy_ht);
+
+ z10=.35[z5,z7];
+ z11=z10-(.5Dcap_spc,0);
+ z12=z10+(.5Dcap_spc,0);
+ y13=y15; y14=y16;
+ x13=x14; x15=x16;
+ y13-y14=Dcap_ht;
+ z11=.5[z13,z14];
+ z12=.5[z15,z16];
+ z17=z11-(Dcap_wd,0);
+ z18=z12+(Dcap_wd,0);
+
+ pickup pensquare scaled normalline;
+ draw z0--z3;
+ draw z4--z5;
+ draw z1--z6--z7--cycle;
+enddef;
+
+def Dcap =
+ pickup pensquare scaled normalline;
+ draw z17--z11;
+ draw z13--z14;
+ draw z15--z16;
+ draw z12--z18;
+enddef;
+
+def led_arrows = % "uberarbeiten
+ numeric pl;
+ numeric x[],y[];
+ transform arr_a,arr_b;
+ pickup pencircle scaled thickline;
+ pl:=.5(did_lt-did_wd);
+ z0=(0,0);
+ z4=z0+(pl,0);
+ z1=z0+(led_lt,0);
+ (z1-z2)=(led_wd,0) rotated led_phi;
+ (z1-z3)=(led_wd,0) rotated -led_phi;
+ arr_a:=identity rotated led_psi shifted
+ (z4+(led_spx+.5led_spc*cosd(led_psi),led_spy-.5led_spc*sind(led_psi)));
+ arr_b:=identity rotated led_psi shifted
+ (z4+(led_spx-.5led_spc*cosd(led_psi),led_spy+.5led_spc*sind(led_psi)));
+ draw (z0--z1) transformed arr_a;
+ draw (z0--z1) transformed arr_b;
+ fill (z2--z1--z3--cycle) transformed arr_a;
+ fill (z2--z1--z3--cycle) transformed arr_b;
+enddef;
+
+"Diode";
+fourchars(0)(diode)(z3)(.5did_ht#,did_lt#,.5did_ht#);
+
+"Z-Diode";
+fourchars(4)(diode; draw z4--z8)(z3)(.5did_ht#,did_lt#,.5did_ht#);
+
+"LED";
+fourfourchars(8)(diode; lightarrows(.5[z1,z6]+(0,.5lLE),120))(z3)
+(.5did_ht#+.5led_spy#+led_lt#*sind(led_psi),did_lt#,.5did_ht#);
+
+"Kapazit"&ditto&"atsdiode";
+fourchars(16)(diode; Dcap)(z3)(.5did_ht#,did_lt#,.65did_ht#);
+
+"Thyristor";
+
+end;
+%</csydiod>
+%^^A last update: Fri 03-13-1998
+%
+%<*csyrest>
+input csym;
+designsize:=.5lLE#;
+
+def gaslamp =
+ z0=(0,0);
+ z4=z0+(.5,0)*lLE;
+ y4=y3;
+ x2=x1;
+ x3=x4+3lLE;
+ y2=y1+2lLE;
+ y4=.5[y1,y2];
+ x1=.5[x4,x3];
+
+ x5=x0+1.1lLE;
+ y5=y0;
+ x7=x6=x5; y7-y6=.5lLE;
+ .5[y7,y6]=y0;
+
+
+ y8=y9=y0;
+ x8=x0+4lLE;
+
+ x9=x8-1.1lLE;
+
+ pickup pencircle scaled normalline;
+ draw superellipse(z3,z2,z4,z1,.75);
+ draw z0--z5;
+ draw z6--z7;
+ draw z8--z9;
+ pickup pencircle scaled .3lLE;
+ drawdot z9;
+enddef;
+
+def switch = %"uberarbeiten
+ numeric pl;
+ pl:=swt_lt*swt_dis;
+ sl:=(1-2swt_dis)*swt_lt;
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+((sl,0) rotated swt_phi);
+ z3=z1+(swt_ind*sl,0);
+ z4=z0+(swt_lt,0);
+ z5=z3+(0,swt_slt);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2;
+ draw z3--z4;
+ draw z3--z5;
+enddef;
+
+
+def dswitch =
+ z0=(0,0);
+ z1=dsw_t[z0,z0+(dsw_wd,0)];
+ x2=x3=x4=x5=x0+((1-dsw_c)*dsw_wd);
+ y0=.5[y2,y3]=.5[y4,y5];
+ y2-y3=dsw_ht;
+ y2-y4=dsw_cc*dsw_ht;
+ y2=y6; y3=y7;
+ x6-x3=x7-x3=dsw_c*dsw_wd;
+ x8=x1+dsw_ov+((1-dsw_c-dsw_t)*dsw_wd);
+ y8=sind(dsw_phi)*x8/cosd(dsw_phi);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z8;
+ draw z4--z2--z6;
+ draw z5--z3--z7;
+enddef;
+
+def circle = % "uberarbeiten
+ numeric pl;
+ pl:=.5cir_lt-cir_ht;
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z0+(.5cir_lt,0);
+ z3=z1+(2cir_ht,0);
+ z4=z3+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z3--z4;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2cir_ht shifted z2;
+enddef;
+
+def lamp =
+ circle
+ z10-z11=(2cir_ht,0) rotated 45;
+ z12-z13=(2cir_ht,0) rotated -45;
+ .5[z10,z11]=z2=.5[z12,z13];
+ pickup pencircle scaled normalline;
+ draw z10--z11;
+ draw z12--z13;
+enddef;
+
+def circle_var =
+ circle;
+ pickup pencircle scaled thinline;
+ noarrowTF;
+ arrow(z2,cir_ara,cir_arb,cir_phi,arr_lt,arr_phi)();
+enddef;
+
+def usource = %"uberarbeiten
+ numeric pl;
+ pl:=.5(uso_lt-uso_spc);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(uso_spc,0);
+ z3=z2+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z2--z3;
+ z1=.5[z4,z5]; x4-x5=0; y5-y4=uso_pls;
+ z2=.5[z6,z7]; x6-x7=0; y7-y6=uso_min;
+ pickup pensquare scaled thickline;
+ draw z4--z5;
+ draw z6--z7;
+enddef;
+
+def usource_var =
+ usource;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z1,z2],uso_ara,cir_arb,uso_phi,arr_lt,arr_phi)();
+enddef;
+
+
+def isource = %"uberarbeiten
+ numeric pl;
+ pl:=.5(iso_lt-(4-iso_dis)*iso_rad);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(iso_rad,0);
+ z3=z2+((2-iso_dis)*iso_rad,0);
+ z4=z3+(iso_rad,0);
+ z5=z4+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z4--z5;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled (2*iso_rad) shifted z2;
+ draw fullcircle scaled (2*iso_rad) shifted z3;
+enddef;
+
+def isource_var =
+ isource;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z2,z3],iso_ara,iso_arb,iso_phi,arr_lt,arr_phi)();
+enddef;
+
+def value = % "uberarbeiten
+ z0=(0,0);
+ z1=z0+(val_lt,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ z2=val_lft[z0,z1];
+ z3=val_rht[z0,z1];
+ triangle(z2,abs(z3-z2),val_phi,0);
+enddef;
+
+def coil = %"uberarbeiten
+ numeric pl;
+ pl:=.5(coi_lt-2coi_num*coi_rad);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(coi_rad,0);
+ for m=1 upto coi_num-1: z[m+2]=z[m+1]+(2coi_rad,0); endfor;
+ z[2+coi_num]=z[1+coi_num]+(coi_rad,0);
+ z[3+coi_num]=z[2+coi_num]+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z[2+coi_num]--z[3+coi_num];
+ pickup pencircle scaled normalline;
+ for m=1 upto coi_num: draw halfcircle scaled 2coi_rad shifted z[m+1]; endfor;
+enddef;
+
+def crystal = %"uberarbeiten
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cry_lt-2cry_spc-cry_wd);
+ z0=(0,0); z1=z0+(pl,0);
+ z2=z1+(cry_spc,0);
+ z3=z2+(cry_wd,0);
+ z4=z3+(cry_spc,0);
+ z5=z4+(pl,0);
+ z6-z7=z8-z9=z10-z11=z12-z13=(0,cry_ht);
+ z2=.5[z6,z7]; z3=.5[z8,z9]; z1=.5[z10,z11]; z4=.5[z12,z13];
+ draw z0--z1; draw z4--z5; draw z10--z11; draw z12--z13;
+ draw z7--z9--z8--z6--cycle;
+enddef;
+
+def inout = % "uberarbeiten
+ z0=(ioc_lt,0);
+ pickup pensquare scaled normalline;
+ z2=z0+(ioc_lt,0);
+ lft(z1)=z0+(.5ioc_dia,0);
+ draw z1--z2;
+enddef;
+
+def minout =
+ z0=(0,0);
+ z1=z0+(ioc_lt,0);
+ pickup pensquare scaled normalline;
+ arrow(z0,0,ioc_lt,180,ioc_arr,ioc_phi)(pickup pencircle scaled normalline);
+enddef;
+
+def ground = % Masse z0 z11
+ z0=(0,0); x1=x0=x2=x3;
+ y0-y1=gnd_ht;
+ y1-y2=y2-y3=gnd_spc;
+ y4=y1=y10; y2=y6; y3=y8;
+ z1=.5[z4,z5]; x5-x4=gnd_wd;
+ z1=.5[z10,z11]; x11-x10=GND_wd;
+ z2=.5[z6,z7]; x7-x6=gnd_wd*gnd_q;
+ z3=.5[z8,z9]; x9-x8=gnd_wd*gnd_q*gnd_q*gnd_q;
+enddef;
+
+"Spule";
+fourchars(0)(coil)(z[3+coi_num])(coi_ht#,coi_lt#,0);
+
+"Quarz";
+twochars(4)(crystal)(.5cry_ht#,cry_lt#,.5cry_ht#);
+
+"Lampe";
+twochars(6)(lamp)(cir_ht#,cir_lt#,cir_ht#);
+
+"Kreise mit Anschl"&ditto&"ussen";
+twochars(8)(circle)(cir_ht#,cir_lt#,cir_ht#);
+
+"Kreise mit Anschl"&ditto&"ussen variabel";
+twochars(10)(circle_var)(cir_ht#,cir_lt#,cir_ht#);
+
+"Stromquelle";
+twochars(12)(isource)(iso_ht#,iso_lt#,iso_ht#);
+
+"Stromquelle variabel";
+twochars(14)(isource_var)(iso_ht#,iso_lt#,iso_ht#);
+
+"Spannungsquelle";
+fourchars(16)(usource)(z3)(uso_ht#,uso_lt#,uso_ht#);
+
+"Spannungsquelle variabel";
+fourchars(20)(usource_var)(z3)(uso_ht#,uso_lt#,uso_ht#);
+
+"Schalter";
+twochars(24)(switch)(swt_ht#,swt_lt#,0);
+
+"Umschalter";
+eightchars(32)(dswitch)(dsw_wd#,.5dsw_ht#,.5dsw_ht#,0);
+
+"Stromquelle variante";
+twochars(44)(circle;
+ pickup pencircle scaled normalline;
+ draw z1--z3;)(cir_ht#,cir_lt#,cir_ht#);
+
+"Spannungsquelle variante";
+twochars(46)(circle;
+ pickup pencircle scaled normalline;
+ draw (z1--z3) rotatedaround (z2,90);)(cir_ht#,cir_lt#,cir_ht#);
+
+
+"Gas-Lamp";
+fourchars(40)(gaslamp)(z0)(1.5lLE#,4lLE#,1.5lLE#);
+
+"Stromquelle variante";
+twochars(44)(circle;
+ pickup pencircle scaled normalline;
+ draw z1--z3;)(cir_ht#,cir_lt#,cir_ht#);
+
+"Spannungsquelle variante";
+twochars(46)(circle;
+ pickup pencircle scaled normalline;
+ draw (z1--z3) rotatedaround (z2,90);)(cir_ht#,cir_lt#,cir_ht#);
+
+"Anschl"&ditto&"usse Pfeil";
+fourchars(232)
+ (minout;)(z1)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Anschl"&ditto&"usse leer";
+fourchars(240)
+ (inout;
+ pickup pencircle scaled thinline;
+ draw fullcircle scaled ioc_dia shifted z0;
+ )(z2)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Anschl"&ditto&"usse voll";
+fourchars(244)
+ (inout;
+ pickup pencircle scaled ioc_dia;
+ draw z0;
+ )(z2)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Str"&ditto&"ome";
+fourchars(248)(value;)(z1)(val_ht#,val_lt#,val_ht#);
+
+"wwire half R";
+beginchar(112,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=.5lLE;
+ x0=x1=x2;
+ x3=x4;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire R";
+beginchar(113,1lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=1lLE;
+ x0=x1=x2;
+ x3=x4;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half L";
+beginchar(114,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=.5lLE;
+ x0=x3=x4;
+ x1=x2;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half U";
+beginchar(115,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=.5lLE;
+ y0=y1=y2;
+ y3=y4;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire U";
+beginchar(116,0pt,1lLE#,0pt);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=1lLE;
+ y0=y1=y2;
+ y3=y4;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half D";
+beginchar(117,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=.5lLE;
+ y0=y3=y4;
+ y1=y2;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+
+"dashed halfline R";
+beginchar(120,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.25lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed line R";
+beginchar(121,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ z2=.25[z0,z1];
+ z3=.75[z0,z1];
+ pickup pensquare scaled normalline;
+ draw z2--z3;
+endchar;
+
+"dashed halfline L";
+beginchar(122,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.25lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed halfline U";
+beginchar(123,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.25lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed line U";
+beginchar(124,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ z2=.25[z0,z1];
+ z3=.75[z0,z1];
+ pickup pensquare scaled normalline;
+ draw z2--z3;
+endchar;
+
+"dashed halfline D";
+beginchar(125,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.25lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal halb R";
+beginchar(128,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.5lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal R";
+beginchar(129,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal halb L";
+beginchar(130,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.5lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal halb U";
+beginchar(131,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.5lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal U";
+beginchar(132,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal halb D";
+beginchar(133,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.5lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"B"&ditto&"undel horizontal";
+beginchar(134,0,.8bnd_lt#,0pt);
+ z0=(0,0);
+ z0=.5[z2,z3];
+ z3-z2=(bnd_lt,0) rotated bnd_phi;
+ pickup pencircle scaled thinline;
+ draw z2--z3;
+endchar;
+
+"B"&ditto&"undel vertikal";
+beginchar(135,.8bnd_lt#,0pt,0pt);
+ z0=(0,0);
+ z0=.5[z2,z3];
+ z3-z2=(bnd_lt,0) rotated (90-bnd_phi);
+ pickup pencircle scaled thinline;
+ draw z2--z3;
+endchar;
+
+"Linie fett horizontal R";
+beginchar(136,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.5lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett horizontal R";
+beginchar(137,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett horizontal halb L";
+beginchar(138,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.5lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal halb U";
+beginchar(139,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.5lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal U";
+beginchar(140,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal halb D";
+beginchar(141,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.5lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Oscillograph";
+beginchar(142,osc_dia#,.5osc_dia#,.5osc_dia#);
+ z0=(0,0);
+ z1=z0;
+ z5=.5[z1,z3]=.5[z2,z4];
+ x2=x4;
+ y1=y3;
+ x3-x1=y4-y2=osc_dia;
+ .5osc_gt+osc_spc+osc_stm=.5osc_dia;
+ osc_stm=osc_t*osc_gt;
+ z6=z1+(osc_stm,0);
+ z7=z2+(0,osc_stm);
+ z8=z3+(-osc_stm,0);
+ z9=z4+(0,-osc_stm);
+ z6=.5[z10,z11]; x10=x11; x16-x17=y14-y15=x12-x13=y11-y10=osc_gt;
+ z7=.5[z12,z13]; y12=y13;
+ z8=.5[z14,z15]; x14=x15;
+ z9=.5[z16,z17]; y16=y17;
+ pickup pensquare scaled normalline; %drawing style by Andreas Tille
+ draw z1--z6; %code rewritten by SeTa
+ draw z2--z7;
+ draw z3--z8;
+ draw z4--z9;
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled osc_dia shifted z5;
+ pickup pensquare scaled thickline;
+ draw z10--z11;
+ draw z12--z13;
+ draw z14--z15;
+ draw z16--z17;
+endchar;
+
+"a small grey elephant: Thanks to Andreas Tille.";
+%
+% The code is a little bit crazy.
+%
+LE#:=.03mm#;
+define_pixels(LE);
+numeric nPnt;
+def p(expr px,py) = x[nPnt]:=px*LE; y[nPnt]:=py*LE; nPnt:=nPnt+1 enddef;
+
+beginchar(252,540LE#,265LE#,274LE#);
+ pickup pencircle scaled 0.4pt;
+ path a, b;
+ picture cutpic;
+ nPnt:=0;
+
+p( 0, 0); % copyright by Sebastian Tannert
+p( 0, 18); % Please think of the hard work!
+%
+p( -2, 46);p( -3, 92);p( 8,117);p( 28,152);
+p( 38,171);p( 71,195);p(107,218);p(138,240);p(159,255);p(181,261);
+p(193,264);p(211,268);p(231,263);p(249,264);p(273,259);p(292,255);
+p(311,249);p(336,240);p(380,222);p(414,208);p(437,198);p(449,193);
+p(461,190);p(473,185);p(490,173);p(506,157);p(519,125);p(526, 91);
+p(530, 56);p(530, 35);p(523, 17);p(518, 1);p(509,-22);p(511,-46);
+p(515,-71);p(514,-96);p(512,-112);p(511,-135);p(507,-150);p(498,-171);
+p(485,-184);p(465,-197);p(448,-200);p(429,-194);p(418,-177);p(414,-168);
+p(420,-159);p(427,-157);p(435,-163);p(439,-171);p(449,-164);p(461,-165);
+p(470,-152);p(476,-139);p(476,-118);p(475,-97);p(465,-76);p(450,-62);
+p(442,-50);p(427,-36);p(417,-29);p(409,-27);p(392,-12);p(383,-10);
+p(374,-18);p(370,-34);p(363,-58);p(347,-92);p(343,-106);p(341,-126);
+p(330,-162);p(323,-196);p(322,-210);p(317,-237);p(327,-257);p(325,-268);
+p(310,-270);p(301,-272);p(284,-266);p(269,-258);p(268,-236);p(270,-210);
+p(282,-185);p(300,-151);p(315,-119);p(322,-93);p(325,-79);p(326,-63);
+p(315,-75);p(303,-101);p(292,-134);p(281,-164);p(269,-189);p(258,-220);
+p(259,-250);p(260,-266);p(252,-269);p(235,-260);p(221,-266);p(203,-261);
+p(194,-242);p(201,-227);p(206,-213);p(207,-190);p(215,-162);p(222,-147);
+p(225,-123);p(229,-96);p(234,-77);p(234,-65);p(236,-47);p(236,-30);
+p(236,-12);p(240,6);p(248,19);p(264,37);p(146,41);p(158,24);
+p(176,-3);p(188,-29);p(193,-53);p(185,-80);p(175,-106);p(165,-137);
+p(152,-173);p(143,-202);p(142,-222);p(136,-232);p(141,-253);p(132,-255);
+p(125,-255);p(105,-240);p(91,-239);p(75,-228);p(68,-205);p(70,-178);
+p(85,-156);p(96,-127);p(100,-112);p(95,-88);p(79,-62);p(60,-38);
+p(48,-16);p(36,18);p(28,63);p(24,41);p(28,17);p(29,-6);p(31,-32);
+p(26,-43);p(17,-65);p(15,-83);p(12,-106);p(7,-126);p(0,-141);
+p(-9,-147);p(-16,-131);p(-24,-110);p(-22,-94);p(-17,-75);p(-6,-55);
+p(-2,-34);p(2,-19);p(190,-63);p(209,-75);p(234,-69);p(31,-32);
+p(31,-44);p(26,-67);p(37,-95);p(45,-117);p(43,-158);p(38,-193);
+p(25,-224);p(29,-249);p(52,-266);p(71,-264);p(88,-266);p(113,-273);
+p(133,-273);p(138,-268);p(132,-255);p(457,48);p(462,30);p(481,21);
+p(477,40);p(449,32);p(456,11);p(478,5);p(464,60);p(486,61);
+p(499,37);p(363,93);p(352,110);p(348,129);p(358,149);p(386,162);
+p(414,173);p(427,178);p(443,167);p(456,157);p(461,142);p(450,126);
+p(436,110);p(419,74);p(409,53);p(396,40);p(372,51);p(365,67);
+p(358,148);p(375,139);p(387,124);p(401,128);p(411,146);p(418,163);
+p(427,168);p(443,167);p(444,161);p(434,152);p(432,135);p(440,124);
+p(451,128);p(460,141);p(455,157);p(350,138);p(459,138);p(-30,276);
+p(539,-283);p(539,276);p(-30,-283);p(427,-41);p(436,-54);
+
+draw for i:=0 upto 109: z[i]..endfor
+z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+for i:=124 upto 144: z[i]..endfor z145---z146..z147{down}..
+for i:=148 upto 164: z[i]..endfor z0;
+
+draw for i:=110 upto 116: z[i].. endfor z117;
+draw for i:=118 upto 122: z[i].. endfor z123{down};
+
+draw for i:=168 upto 182: z[i].. endfor z183;
+
+
+draw for i:=194 upto 210: z[i].. endfor cycle;
+
+draw for i:=211 upto 217: z[i].. endfor z218;
+
+a:= z226..z197..z198..z199..z200..z201..z202..z203..z227;
+b:= z226--z227;
+vshade(b,a,4,unitsquare scaled 1.8);
+
+a:= z227..z206..z207..z208..z209..z210..z194..
+ z195..z196..z226;
+b:= z227--z226;
+vshade(b,a,4,unitsquare scaled 1.8);
+
+a:= z228--z230;
+b:= z231--z229;
+vshade(a,b,4,unitsquare);
+
+cutpic=nullpicture;
+
+addto cutpic contour(z228+(0,10)--z230+(10,10)--z229--z231--cycle);
+
+pickup pencircle scaled 0.7pt
+
+addto cutpic contour (for i:=0 upto 109: z[i].. endfor
+ z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+ for i:=124 upto 144: z[i].. endfor z145---z146..z147{down}..
+ for i:=148 upto 164: z[i].. endfor cycle) withweight -1;
+
+addto cutpic doublepath
+ (for i:=0 upto 109: z[i].. endfor
+ z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+ for i:=124 upto 144: z[i].. endfor z145---z146..z147{down}..
+ for i:=148 upto 164: z[i].. endfor z0) withpen currentpen
+ withweight -1;
+
+addto cutpic doublepath z232..z233 withpen currentpen withweight -1;
+
+addto cutpic contour (for i:=168 upto 182: z[i].. endfor z183..z146..cycle)
+ withpen currentpen withweight -1;
+
+cull cutpic keeping (1,infinity) withweight -3;
+
+addto currentpicture also cutpic;
+
+pickup pencircle scaled .7pt;
+draw z184..z185{z186-z184}..z186;
+draw z186..z187{z184-z186}..z184;
+
+draw z188..z189..z190;
+draw z191..z192..z193;
+draw z232..z233;
+
+endchar;
+
+
+"Masse";
+beginchar(253,.5gnd_wd#,0,gnd_ht#+gnd_spc#+gnd_spc#);
+ ground
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z4--z5;
+ draw z6--z7;
+ draw z8--z9;
+endchar;
+
+"MASSE";
+beginchar(254,.5GND_wd#,0,gnd_ht#);
+ ground
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pensquare scaled verythickline;
+ draw z10--z11;
+endchar;
+
+"Verbindungspunkt";
+beginchar(255,cdt_lt#,.5cdt_ht#,.5cdt_ht#);
+ pickup pencircle scaled cdt_dia;
+ z0=(0,0);
+ drawdot z0;
+endchar;
+
+end;
+%</csyrest>
+%
+%^^A last update: Fri 03-13-1998
+%<*optic>
+input csym;
+
+string optionname; optionname="optics";
+
+font_identifier="cioptic";
+
+input defcirc;
+
+% half of linelength of optical axis
+hsoa:=.128CIu;
+
+% lenses
+% thin convex lens
+slens_ht# := 2CIu#;
+slens_lt# := 2CIu#;
+slens_phi := 60;
+% lensthickness:
+slens_spc := .55CIu;
+define_pixels(slens_lt,slens_ht);
+
+% thick convex lens
+blens_ht# := 2CIu#;
+blens_lt# := 2CIu#;
+blens_phi := 45;
+blens_spc := .88CIu;
+define_pixels(blens_lt,blens_ht);
+
+% thin concave lens
+sklens_ht# := 2CIu#;
+sklens_lt# := 2CIu#;
+sklens_phi := 60;
+sklens_spc := .58CIu;
+sklens_bt := 1CIu; % Breite Bottom und Top
+define_pixels(sklens_lt,sklens_ht);
+
+% mirror
+mir_ht# := 2CIu#;
+mir_lt# := 2CIu#;
+mir_wd := .5CIu; % Schraffurl"ange
+define_pixels(mir_ht,mir_lt);
+
+% boxes for optical modulator and laser
+omb_wd# := 3CIu#;
+omb_ht# := 2CIu#;
+lab_wd# := 4CIu#;
+lab_ht# := 2CIu#;
+define_pixels(omb_wd,omb_ht,lab_wd,lab_ht);
+
+% polarizer
+pol_ht# := 2CIu#;
+pol_lt# := 2CIu#;
+pol_spc := .2CIu;
+define_pixels(pol_ht,pol_lt);
+
+% pinhole
+pin_ht# := 2CIu#;
+pin_lt# := 2CIu#;
+pin_spx := .16CIu;
+pin_spy := .08CIu;
+pin_spz := .5CIu;
+define_pixels(pin_ht,pin_lt);
+
+% camera
+cam_ht# := 2CIu#;
+cam_lt# := 3CIu#;
+cam_spx := 2CIu;
+cam_spy := 1CIu;
+define_pixels(cam_ht,cam_lt);
+
+% screen
+scr_ht# := 4CIu#;
+scr_lt# := 2CIu#;
+scr_spx := 1CIu;
+scr_spy := 1CIu;
+define_pixels(scr_ht,scr_lt);
+
+def rectangle(expr width, height, xs, ys) =
+ draw (xs,.5height+ys)--(width+xs,.5height+ys)--(width+xs,-.5height+ys)--
+ (xs,-.5height+ys)--cycle;
+enddef;
+
+def small_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(slens_lt-slens_spc);
+ z0=(.5slens_lt,-.5slens_ht);
+ z1=(.5slens_lt,.5slens_ht);
+ z2=(.5CIu,0); z3=z2+(hsoa,0);
+ z4=(slens_lt-.5CIu,0); z5=z4-(hsoa,0);
+ draw z0{dir slens_phi}..z1;
+ draw z0{dir (180-slens_phi)}..z1;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_small_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(slens_lt-slens_spc);
+ z0=(.5slens_lt,-.5slens_ht);
+ z1=(.5slens_lt,.5slens_ht);
+ z4=(slens_lt-.5CIu,0); z5=z4-(hsoa,0);
+ draw z0{dir slens_phi}..z1;
+ draw z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def bold_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(blens_lt-blens_spc);
+ z0=(.5blens_lt,-.5blens_ht);
+ z1=(.5blens_lt,.5blens_ht);
+ draw z0{dir blens_phi}..z1;
+ draw z0{dir (180-blens_phi)}..z1;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_bold_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(blens_lt-blens_spc);
+ z0=(.5blens_lt,-.5blens_ht);
+ z1=(.5blens_lt,.5blens_ht);
+ draw z0{dir blens_phi}..z1;
+ draw z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def small_konkav_lens =
+ pickup pensquare scaled normalline;
+ numeric pl, ql;
+ pl:=.5(sklens_lt-sklens_spc);
+ ql:=.5(sklens_lt-sklens_bt);
+ z0=(ql,-.5sklens_ht);
+ z1=(sklens_lt-ql,-.5sklens_ht);
+ z2=(ql,.5sklens_ht);
+ z3=(sklens_lt-ql,.5sklens_ht);
+ z4=(.5CIu,0); z5=z4+(hsoa,0);
+ z6=(sklens_lt-.5CIu,0); z7=z6-(hsoa,0);
+ draw z0{dir sklens_phi}..z2--z3{dir (180+sklens_phi)}..z1--z0;
+ draw z4--z5; draw z6--z7;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_small_konkav_lens =
+ pickup pensquare scaled normalline;
+ numeric pl, ql;
+ pl:=.5(sklens_lt-sklens_spc);
+ ql:=.5(sklens_lt+sklens_bt);
+ z0=(.5sklens_lt,-.5sklens_ht);
+ z1=(ql,-.5sklens_ht);
+ z2=(.5sklens_lt,.5sklens_ht);
+ z3=(ql,.5sklens_ht);
+ draw z0--z2--z3{dir (180+sklens_phi)}..z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def mirror =
+ pickup pensquare scaled normalline;
+ opticalaxis(normalline)(0);
+ opticalaxisdown(normalline)(.5mir_lt,0);
+ halfmirror;
+ pickup pensquare scaled thinline;
+ for i=.125 step .125 until .875:
+ draw (i*mir_lt,(.5-i)*mir_ht)--(mir_wd+i*mir_lt,mir_wd+(.5-i)*mir_ht);
+ endfor
+enddef;
+
+def halfmirror =
+ pickup pensquare scaled thickline;
+ draw (.5mir_wd,.5(mir_ht-mir_wd))--(mir_lt-.5mir_wd,.5(mir_wd-mir_ht));
+enddef;
+
+def halfmirrorline =
+ pickup pensquare scaled normalline;
+ opticalaxis(normalline)(0);
+ opticalaxisdown(normalline)(.5mir_lt,.5mir_ht);
+ opticalaxisdown(normalline)(.5mir_lt,0);
+enddef;
+
+def polarizer =
+ pickup pensquare scaled thinline;
+ numeric pl;
+ pl:=.5(pol_lt-pol_spc);
+ z0=(pl,.5pol_ht);
+ z1=z0+(0,-pol_ht);
+ z2=z1+(pol_spc,0);
+ z3=z0+(pol_spc,0);
+ draw z0--z1--z2--z3--cycle;
+ % optical axis
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def pinhole =
+ pickup pensquare scaled thinline;
+ numeric pl;
+ pl:=.5(pin_lt-pin_spx);
+ fill (.5pin_lt,.5pin_spy)--(pl,.5pin_spz)--(pl,.5pin_ht)--
+ (pl+pin_spx,.5pin_ht)--(pl+pin_spx,.5pin_spz)--cycle;
+ fill (.5pin_lt,-.5pin_spy)--(pl,-.5pin_spz)--(pl,-.5pin_ht)--
+ (pl+pin_spx,-.5pin_ht)--(pl+pin_spx,-.5pin_spz)--cycle;
+ % optical axis
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def screenleft (expr gray) =
+ pickup pensquare scaled normalline;
+ path a, b;
+ numeric pl;
+ pl:=.5(scr_lt-scr_spx);
+ z0=(pl,.5scr_ht);
+ z1=(pl+scr_spx,scr_spy);
+ z2=(pl+scr_spx,-.5scr_ht);
+ z3=(pl,-scr_spy);
+ draw z0--z1--z2--z3--cycle;
+ a:=z0--z1;
+ b:=z2--z3;
+ vshade(b, a, gray, unitsquare);
+enddef;
+
+def screenright (expr gray) =
+ pickup pensquare scaled normalline;
+ path a, b;
+ numeric pl;
+ pl:=.5(scr_lt-scr_spx);
+ z0=(pl,-.5scr_ht);
+ z1=(pl,scr_spy);
+ z2=(pl+scr_spx,.5scr_ht);
+ z3=(pl+scr_spx,-scr_spy);
+ draw z0--z1--z2--z3--cycle;
+ a:=z1--z2;
+ b:=z3--z0;
+ vshade(b, a, gray, unitsquare);
+enddef;
+
+% optical Axis as dashed line
+def opticalaxis(expr linethickness)(expr offset) =
+ pickup pensquare scaled linethickness;
+ draw (offset,0)--(offset+hsoa,0);
+ draw (offset+3hsoa,0)--(offset+5hsoa,0);
+ draw (offset+7hsoa,0)--(offset+1CIu,0);
+enddef;
+
+% half optical Axis as dashed line
+def halfopticalaxis(expr linethickness)(expr offset) =
+ pickup pensquare scaled linethickness;
+ draw (offset,0)--(offset+hsoa,0);
+ draw (offset+3hsoa,0)--(offset+.5CIu,0);
+enddef;
+
+% optical Axis as dashed line downwards
+def opticalaxisdown(expr linethickness)(expr xoffset, yoffset) =
+ pickup pensquare scaled linethickness;
+ draw (xoffset,yoffset)--(xoffset,yoffset-hsoa);
+ draw (xoffset,yoffset-3hsoa)--(xoffset,yoffset-5hsoa);
+ draw (xoffset,yoffset-7hsoa)--(xoffset,yoffset-1CIu);
+enddef;
+
+% half optical Axis as dashed line downwards
+def halfopticalaxisdown(expr linethickness)(expr xoffset, yoffset) =
+ pickup pensquare scaled linethickness;
+ draw (xoffset,yoffset)--(xoffset,yoffset-hsoa);
+ draw (xoffset,yoffset-3hsoa)--(xoffset,yoffset-.5CIu);
+enddef;
+
+% Camera
+def camera =
+ pickup pensquare scaled thickline;
+ numeric pl;
+ pl:=cam_lt-cam_spx;
+ draw (pl,.25cam_spy)--(0,.5cam_spy)--(0,-.5cam_spy)--(pl,-.25cam_spy);
+ draw (pl,.5cam_ht)--(pl,-.5cam_ht)--(cam_lt,-.5cam_ht)--(cam_lt,.5cam_ht)--cycle;
+enddef;
+
+"SmalCIuns";
+twochars(0)(small_lens)(.5slens_ht#,slens_lt#,.5slens_ht#);
+
+"HalfSmalCIuns";
+fourchars(2)(half_small_lens)((slens_lt,0))(.5slens_ht#,slens_lt#,.5slens_ht#);
+
+"BoldLens";
+twochars(6)(bold_lens)(.5blens_ht#,blens_lt#,.5blens_ht#);
+
+"HalfBoldLens";
+fourchars(8)(half_bold_lens)((blens_lt,0))(.5blens_ht#,blens_lt#,.5blens_ht#);
+
+"SmallKonkavLens";
+twochars(12)(small_konkav_lens)(.5sklens_ht#,sklens_lt#,.5sklens_ht#);
+
+"HalfSmallKonkavLens";
+fourchars(14)(half_small_konkav_lens)((sklens_lt,0))(.5sklens_ht#,sklens_lt#,.5sklens_ht#);
+
+"Mirror";
+eightchars(85)(mirror)(.5mir_lt#,.5mir_ht#,.5mir_ht#,.5mir_lt#);
+
+"BeamSplitter";
+eightchars(36)(halfmirror;halfmirrorline)(.5mir_lt#,.5mir_ht#,.5mir_ht#,.5mir_lt#);
+
+"Polarizer";
+twochars(44)(polarizer)(.5pol_ht#,pol_lt#,.5pol_ht#);
+
+"Pinhole";
+twochars(46)(pinhole)(.5pin_ht#,pin_lt#,.5pin_ht#);
+
+"Camera";
+fourchars(66)(camera)((cam_lt,0))(.5cam_ht#,cam_lt#,.5cam_ht#);
+
+"ScreenLeft";
+twochars(72)(screenleft(2);opticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenRight";
+twochars(74)(screenright(2);opticalaxis(normalline)(1CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenLeftBehind";
+twochars(76)(screenleft(2);halfopticalaxis(normalline)(1.5CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenRightBehind";
+twochars(78)(screenright(2);halfopticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"VScreenLeft";
+twochars(80)(screenleft(4);opticalaxis(normalline)(0);halfopticalaxis(normalline)(1.5CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"VScreenRight";
+twochars(82)(screenright(4);opticalaxis(normalline)(1CIu);halfopticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"horizontal dashed half line to the right";
+beginchar(128,.5CIu#,0pt,0pt);
+ halfopticalaxis(normalline)(0);
+endchar;
+
+"horizontal dashed long line to the right";
+beginchar(129,1CIu#,0pt,0pt);
+ opticalaxis(normalline)(0);
+endchar;
+
+"horizontal dashed half line to the left";
+beginchar(130,.5CIu#,0pt,0pt);
+ halfopticalaxis(normalline)(-.5CIu);
+endchar;
+
+"horizontal dashed half line up";
+beginchar(131,0pt,.5CIu#,0pt);
+ halfopticalaxisdown(normalline)(0,.5CIu);
+endchar;
+
+"horizontal dashed long line up";
+beginchar(132,0pt,1CIu#,0pt);
+ opticalaxisdown(normalline)(0,1CIu);
+endchar;
+
+"horizontal dashed half line down";
+beginchar(133,0pt,0pt,.5CIu#);
+ halfopticalaxisdown(normalline)(0,0);
+endchar;
+
+"bold horizontal dashed half line to the right";
+beginchar(136,.5CIu#,0pt,0pt);
+ halfopticalaxis(2normalline)(0);
+endchar;
+
+"bold horizontal dashed long line to the right";
+beginchar(137,1CIu#,0pt,0pt);
+ opticalaxis(2normalline)(0);
+endchar;
+
+"bold horizontal dashed half line to the left";
+beginchar(138,.5CIu#,0pt,0pt);
+ halfopticalaxis(2normalline)(-.5CIu);
+endchar;
+
+"bold horizontal dashed half line up";
+beginchar(139,0pt,.5CIu#,0pt);
+ halfopticalaxisdown(2normalline)(0,.5CIu);
+endchar;
+
+"bold horizontal dashed long line up";
+beginchar(140,0pt,1CIu#,0pt);
+ opticalaxisdown(2normalline)(0,1CIu);
+endchar;
+
+"bold horizontal dashed half line down";
+beginchar(141,0pt,0pt,.5CIu#);
+ halfopticalaxisdown(2normalline)(0,0);
+endchar;
+
+% This is a part of mf-output from Gnuplot. It adds the possibility to
+% use Text within METAFONT-Symbols
+if unknown cmbase: input cmbase fi
+
+tracingstats:=1;
+picture r[];
+
+def put_text(expr ts,xstart,ystart,rot,justification) =
+ begingroup
+ text_width:=0;text_height:=0;
+ for ind:=0 step 1 until length(ts)-1:
+ dec_num:=ASCII substring (ind,ind+1) of ts;
+ if unknown r[dec_num]: dec_num:=32; fi
+ if dec_num=32:
+ text_width:=text_width+wd[65];
+ text_height:=max(text_height,ht[65]+dp[65]);
+ elseif dec_num>=0:
+ text_width:=text_width+wd[dec_num];
+ text_height:=max(text_height,ht[dec_num]+dp[dec_num]);
+ fi
+ endfor
+ if rot=90:
+ if justification=1: ynext:=ystart;
+ elseif justification=2: ynext:=round(ystart-text_width/2);
+ else: ynext:=round(ystart-text_width);
+ fi
+ xnext:=xstart+text_height/2;
+ else:
+ if justification=1: xnext:=xstart;
+ elseif justification=2: xnext:=round(xstart-text_width/2);
+ else: xnext:=round(xstart-text_width);
+ fi
+ ynext:=ystart-text_height/2;
+ fi
+ for ind:=0 step 1 until length(ts)-1:
+ dec_num:=ASCII substring (ind,ind+1) of ts;
+ if unknown r[dec_num]: dec_num:=32; fi
+ if dec_num=32:
+ xnext:=xnext+wd[65]*cosd rot;
+ ynext:=ynext+wd[65]*sind rot;
+ elseif dec_num>=0:
+ currentpicture:=currentpicture+r[dec_num] shifted(xnext,ynext)
+ rotatedaround ((xnext,ynext),rot);
+ xnext:=xnext+wd[dec_num]*cosd rot;
+ ynext:=ynext+wd[dec_num]*sind rot;
+ fi
+ endfor
+ endgroup
+enddef;
+
+def endchar =
+ r[charcode]:=currentpicture;
+ wd[charcode]:=w;ht[charcode]:=h;dp[charcode]:=d;
+ endgroup;
+enddef;
+let endchar_ = endchar;
+let generate = relax;
+let roman = relax;
+input cmss10.mf
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=
+ if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+fi
+font_setup;
+input romanu.mf %Roman uppercase.
+input romanl.mf %Roman lowerrcase.
+
+def endchar =
+ % Next line should probably be removed if CM base is used
+% l:=0; r:=w;
+ %Include the next two lines if you want to
+ %rotate the picture 90 deg.(Portrait to Landscape)
+ %currentpicture:=currentpicture rotated 90 shifted (h,0);
+ %tmp:=charht; charht:=charwd; charwd:=tmp;
+ scantokens extra_endchar;
+ if proofing>0: makebox(proofrule); fi
+ chardx:=w;
+ shipit;
+ if displaying>0: makebox(screenrule); showit; fi
+ endgroup
+enddef;
+let endchar_ = saveendchar;
+let generate = input;
+let roman = roman;
+def t_ = transformed currenttransform enddef;
+% End of Gnuplot-Part
+
+"Laser Box horizontal";
+beginchar(160,lab_wd#,.5lab_ht#,.5lab_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(lab_wd,lab_ht,0,0);
+ pickup pencircle scaled normalline;
+ put_text("Laser",.5lab_wd,0,0,2);
+endchar;
+
+"Laser Box vertical";
+beginchar(161,.5lab_ht#,lab_wd#,.5lab_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(lab_ht,lab_wd,-.5lab_ht,.5lab_wd);
+ pickup pencircle scaled normalline;
+ put_text("Laser",0,.5lab_wd,90,2);
+endchar;
+
+"Photometer Box horizontal";
+beginchar(162,omb_wd#,.5omb_ht#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_wd,omb_ht,0,0);
+ pickup pencircle scaled normalline;
+ put_text("PM",.5omb_wd,0,0,2);
+endchar;
+
+"Photometer Box vertical";
+beginchar(163,.5omb_ht#,omb_wd#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_ht,omb_wd,-.5omb_ht,.5omb_wd);
+ pickup pencircle scaled normalline;
+ put_text("PM",0,.5omb_wd,90,2);
+endchar;
+
+"Optical Modulator Box horizontal";
+beginchar(164,omb_wd#,.5omb_ht#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_wd,omb_ht,0,0);
+ pickup pensquare scaled normalline;
+ put_text("OM",.5omb_wd,0,0,2);
+endchar;
+
+"Optical Modulator Box vertical";
+beginchar(165,omb_ht#,.5omb_wd#,.5omb_wd#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_ht,omb_wd,0,0); %-.5omb_ht,.5omb_wd);
+ pickup pensquare scaled normalline;
+ put_text("OM",.5omb_ht,0,90,2);
+endchar;
+
+end;
+%</optic>
+%^^A last update: Fri 03-13-1998
+%
+%<*csycirc>
+input csym;
+
+designsize:=2lLE#;
+
+fontdimen10: .4gat_ht#;
+fontdimen11: .65gat_lt#;
+
+fontdimen12: .5pin_lt#;
+fontdimen13: pin_spc#;
+fontdimen14: .5ios_wd#+.5pin_lt#;
+fontdimen15: mid_wd#+ios_wd#;
+fontdimen16: ios_wd#;
+fontdimen17: out_spc#;
+
+%fontdimen7: .4gat_ht#;
+%fontdimen8: .5pin_lt#;
+%fontdimen9: .5(pin_lt#+ios_wd#);
+%fontdimen10: .5mid_wd#;
+%fontdimen11: .5ios_wd#;
+%fontdimen16: pin_spc#;
+
+def defcircleabout(expr p, rad)=
+ z[p]=.5[z[p+1],z[p+3]]=.5[z[p+2],z[p+4]];
+ y[p+1]=y[p+3];
+ x[p+2]=x[p+4];
+ x[p]=lft(x[p+1])-rad;
+ y[p]=top(y[p+4])+rad;
+enddef;
+
+def gate=
+ charic:=.5pin_spc#;
+ z0=(0,0);
+ x20=x15=x1=x6=x7= x0+pin_lt;
+ y8=y6=-y7= y0+.5gat_ht;
+ x8=x9=x10= x1+gat_lt-2pin_lt;
+ y15=-y20= y0+.5pin_spc;
+ x25-x0= gat_lt;
+
+ y9=y7; y25=y10=y1=y0;
+ x0=x26=x27;
+ y26=y15; y27=y20;
+
+ pickup pencircle scaled thickline;
+ defcircleabout(1,inv_rad);
+ defcircleabout(10,inv_rad);
+ defcircleabout(15,inv_rad);
+ defcircleabout(20,inv_rad);
+enddef;
+
+def segment =
+ z0=(0,0);
+ x1-x0=pin_lt; y0=y1;
+ defcircleabout(1,inv_rad); % z2 z3 z4 z5 defined
+ z1=.5[z6,z7]; x6=x7=x8;
+ y7-y6=pin_spc;
+ y8-y1=out_spc;
+ x9-x8=ios_wd; y8=y9;
+enddef;
+
+
+def topbotsegs(expr fc, myht, mydp) =
+ beginchar(fc+0,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ endchar;
+ beginchar(fc+1,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ endchar;
+ beginchar(fc+2,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z5;
+ draw z3--z8--z9;
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ endchar;
+ beginchar(fc+3,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ draw z3--z2--z5;
+ endchar;
+enddef;
+
+def midsegs(expr fc, myht, mydp) =
+ beginchar(fc+0,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ endchar;
+ beginchar(fc+1,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ endchar;
+ beginchar(fc+2,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z5;
+ draw z3--z8;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ endchar;
+ beginchar(fc+3,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ draw z3--z2--z5;
+ endchar;
+enddef;
+
+
+"obere Segmente Eing"&ditto&"ange";
+topbotsegs(0,out_spc#,.5pin_spc#);
+
+"obere Segmente Ausg"&ditto&"ange";
+{{
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ topbotsegs(16,out_spc#,.5pin_spc#);
+}}
+
+"mittlere Segmente Eing"&ditto&"ange";
+midsegs(32,.5pin_spc#,.5pin_spc#);
+
+"mittlere Segmente Eing"&ditto&"ange";
+{{
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ midsegs(48,.5pin_spc#,.5pin_spc#);
+}}
+
+"untere Segmente Eing"&ditto&"ange";
+{{
+ addTF(reflectedabout(left,right));
+ topbotsegs(64,.5pin_spc#,out_spc#);
+}}
+
+"untere Segmente Ausg"&ditto&"ange";
+{{
+ addTF(reflectedabout(left,right));
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ topbotsegs(80,.5pin_spc#,out_spc#);
+}}
+
+"oberes Zwischensegment";
+beginchar(96,mid_wd#,out_spc#,.5pin_spc#);
+ pickup pensquare scaled thickline;
+ draw (0,out_spc)--(mid_wd,out_spc);
+endchar;
+
+"Zwischensegment";
+beginchar(97,mid_wd#,.5pin_spc#,.5pin_spc#);
+endchar;
+
+"unteres Zwischensegment";
+beginchar(98,mid_wd#,.5pin_spc#,out_spc#);
+ pickup pensquare scaled thickline;
+ draw (0,-out_spc)--(mid_wd,-out_spc);
+endchar;
+
+
+"Gatter: Eingang, Ausgang";
+beginchar(128,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z6--z8--z9--z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z10--z25;
+endchar;
+
+"Gatter: Eingang negiert, Ausgang";
+beginchar(129,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z3--z6--z8--z9--z7--z5;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ draw z10--z25;
+endchar;
+
+"Gatter: Eingang, Ausgang negiert";
+beginchar(130,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z14--z9--z7--z6--z8--z12;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z10;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z11--z25;
+endchar;
+
+"Gatter: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(131,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z6--z8--z9--z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+endchar;
+
+"Gatter: zwei Eing"&ditto&"ange, Ausgang negiert";
+beginchar(132,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z14--z9--z7--z6--z8--z12;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z10;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z11--z25;
+endchar;
+
+"Gatter alt AND: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(133,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+endchar;
+
+"Gatter alt NAND: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(134,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+ pickup pencircle scaled 2inv_rad;
+ drawdot z10;
+endchar;
+
+"Gatter alt OR: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(135,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ z30=5[z26,z15];
+ z31=5[z27,z20];
+ z32= (z26--z30) intersectionpoint (z6{right}..{down}z10);
+ z33= (z27--z31) intersectionpoint (z10{down}..{left}z7);
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z26--z32;
+ draw z27--z33;
+ draw z10--z25;
+endchar;
+
+"Gatter alt NOR: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(136,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ z30=5[z26,z15];
+ z31=5[z27,z20];
+ z32= (z26--z30) intersectionpoint (z6{right}..{down}z10);
+ z33= (z27--z31) intersectionpoint (z10{down}..{left}z7);
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z26--z32;
+ draw z27--z33;
+ draw z10--z25;
+ pickup pencircle scaled 2inv_rad;
+ drawdot z10;
+endchar;
+
+"Gatter alt EQ: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(137,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+ x30=x31=x34=.2[x2,x13];
+ y30=.7[y16,y2]; y30=y32;
+ y31=.7[y21,y2]; y31=y33;
+ x32=x33=x35=.8[x2,x13];
+ y35=y34=y2;
+ pickup pencircle scaled normalline;
+ draw z30--z32;
+ draw z31--z33;
+ draw z34--z35;
+endchar;
+
+"box symbol empty";
+beginchar(250,box_wd#,.5box_wd#,.5box_wd#);
+ z0=(0,0);
+ x0=x1=x2; x3=x4;
+ y0=.5[y2,y1];
+ y1=y3; y2=y4;
+ y2-y1=x3-x1=box_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"box symbol cutted by line";
+beginchar(251,box_wd#,.5box_wd#,.5box_wd#);
+ z0=(0,0);
+ x0=x1=x2; x3=x4;
+ y0=.5[y2,y1];
+ y1=y3; y2=y4;
+ y2-y1=x3-x1=box_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+ pickup pencircle scaled normalline;
+ draw z1--z4;
+endchar;
+
+"Black Box analog";
+beginchar(252,bba_wd#,.5bba_ht#,.5bba_ht#);
+ z0=(0,0); x1=x0=x2;
+ z0=.5[z1,z2];
+ y1-y2=y3-y4=bba_ht; y1=y3;
+ x3=x4=x0+bba_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"Black Box digital";
+beginchar(253,bbd_wd#,.5bbd_ht#,.5bbd_ht#);
+ z0=(0,0); x1=x0=x2;
+ z0=.5[z1,z2];
+ y1-y2=y3-y4=bbd_ht; y1=y3;
+ x3=x4=x0+bbd_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"OPV";
+beginchar(254,opv_lt#,opv_ht#,opv_ht#);
+ charic:=opv_dis#;
+ numeric pl;
+ pl:=pin_lt;
+ z0=(0,0);
+ z1=z0+(pl,opv_dis);
+ z2=z0+(pl,opv_ht);
+ z3=z0+(pl+opv_frc*2opv_ht,0);
+ x4=x2; y4=-y2;
+ x5=x1; y5=-y1;
+ z6=z1-(pl,0);
+ z7=z5-(pl,0);
+ z8=z0+(opv_lt,0);
+ z9=z5+(3pt,0);
+ z10=z9+(4pt,0);
+ z11=z1+(3pt,0);
+ z12=z11+(4pt,0);
+ z13=z11+(2pt,2pt);
+ z14=z11+(2pt,-2pt);
+ pickup pensquare scaled thickline;
+ draw z2--z3--z4--cycle;
+ pickup pensquare scaled normalline;
+ draw z9--z10;
+ draw z11--z12;
+ draw z13--z14;
+ draw z6--z1;
+ draw z7--z5;
+ draw z3--z8;
+endchar;
+
+"OPV";
+beginchar(255,opv_lt#,opv_ht#,opv_ht#);
+ charic:=opv_dis#;
+ numeric pl;
+ pl:=pin_lt;
+ z0=(0,0);
+ z1=z0+(pl,opv_dis);
+ z2=z0+(pl,opv_ht);
+ z3=z0+(pl+opv_frc*2opv_ht,0);
+ x4=x2; y4=-y2;
+ x5=x1; y5=-y1;
+ z6=z1-(pl,0);
+ z7=z5-(pl,0);
+ z8=z0+(opv_lt,0);
+ z9=z1+(3pt,0);
+ z10=z9+(4pt,0);
+ z11=z5+(3pt,0);
+ z12=z11+(4pt,0);
+ z13=z11+(2pt,2pt);
+ z14=z11+(2pt,-2pt);
+ pickup pensquare scaled thickline;
+ draw z2--z3--z4--cycle;
+ pickup pensquare scaled normalline;
+ draw z9--z10;
+ draw z11--z12;
+ draw z13--z14;
+ draw z6--z1;
+ draw z7--z5;
+ draw z3--z8;
+endchar;
+
+end;
+%</csycirc>
+%
+%<*indexhlp>
+If you want to generate an index for the circ-package please
+run "makeindex" with the style-file "circ.ist" on "circ.idx".
+
+Using EM-TeX the command line is: makeindx -s circ.ist circ.idx
+
+To get the right pagenumbers in the index and the table of
+contents, run LaTeX on "circ.drv" and makeindex in the following
+way:
+
+latex circ.drv
+makeindx -s circ.ist circ.idx
+latex circ.drv
+makeindx -s circ.ist circ.idx
+latex circ.drv
+%</indexhlp>
diff --git a/macros/generic/diagrams/circ/circ.ins b/macros/generic/diagrams/circ/circ.ins
new file mode 100644
index 0000000000..4209495d81
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.ins
@@ -0,0 +1,19 @@
+% CIRC Installation file for LaTeX.
+% Copyright (C) 1997,1998 Sebastian Tannert and Andreas Tille
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+%
+\let\documentclass\relax
+\input circ.dtx
diff --git a/macros/generic/diagrams/circ/circ.pdf b/macros/generic/diagrams/circ/circ.pdf
new file mode 100644
index 0000000000..f2ab86d7e2
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.pdf
Binary files differ
diff --git a/macros/generic/diagrams/circ/circ.txt b/macros/generic/diagrams/circ/circ.txt
new file mode 100644
index 0000000000..b629330aad
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.txt
@@ -0,0 +1,11 @@
+%^^A last update: Sat 05-24-2003
+%
+% These are the files you should expect to be extracted from: CIRC.DTX
+%
+% circ.dtx circ.sty circ.ins circ.drv circ.txt
+% ic.def gate.def box.def basic.def
+% physics.def optics.def cirsyms.tex csym.mf
+% cioptic.mf ciwidko.mf cidiod.mf cirest.mf
+% cicirc.mf cibimos.mf cisym.mf defcirc.mf
+% ciphysic.mf index.hlp oldgate.def cidoc.tex
+%
diff --git a/macros/generic/diagrams/circuit b/macros/generic/diagrams/circuit
new file mode 120000
index 0000000000..dcec825543
--- /dev/null
+++ b/macros/generic/diagrams/circuit
@@ -0,0 +1 @@
+circ \ No newline at end of file
diff --git a/macros/generic/diagrams/dcpic/README b/macros/generic/diagrams/dcpic/README
new file mode 100644
index 0000000000..34e8945af0
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/README
@@ -0,0 +1,9 @@
+DCpic is a package of TeX macros for graph modeling (e.g.
+commutative diagrams) in a (La)TeX or ConTeXt document.
+Its distinguishing features are: the use of PiCTeX a
+powerful graphical engine, and a simple specification
+syntax. A graph is described in terms of its objects and
+its edges. The objects are textual elements and the edges
+can have various straight or curved forms.
+
+It is under the LaTeX Project Public License \ No newline at end of file
diff --git a/macros/generic/diagrams/dcpic/dcpic.sty b/macros/generic/diagrams/dcpic/dcpic.sty
new file mode 100644
index 0000000000..d6b4709a26
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/dcpic.sty
@@ -0,0 +1,1412 @@
+%% DC-PiCTeX
+%% Copyright (c) 1990-2013 Pedro Quaresma, University of Coimbra, Portugal
+%% 11/1990 (version 1.0);
+%% 10/1991 (version 1.1);
+%% 9/1993 (version 1.2);
+%% 3/1995 (version 1.3);
+%% 7/1996 (version 2.1);
+%% 5/2001 (version 3.0);
+%% 11/2001 (version 3.1);
+%% 1/2002 (version 3.2)
+%% 5/2002 (version 4.0);
+%% 3/2003 (version 4.1);
+%% 12/2004 (version 4.1.1)
+%% 3/2007 (version 4.2)
+%% 5/2008 (version 4.2.1)
+%% 8/2008 (version 4.3)
+%% 12/2008 (version 4.3.1)
+%% 12/2009 (version 4.3.2)
+%% 4/2013 (version 4.4.0)
+%% 5/2013 (version 5.0)
+
+\immediate\write10{Package DCpic 2013/05/01 v5.0}
+
+\ProvidesPackage{dcpic}[2013/05/01 v5.0]
+
+%% Version X.Y.Z
+%% X - major versions
+%% Y - minor versions
+%% Z - bug corrections
+%%
+%% Copyright (c) 1990-2013 Pedro Quaresma <pedro@mat.uc.pt>
+%%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Pedro Quaresma (pedro@mat.uc.pt).
+%
+% This work consists of the files dcpic.sty.
+%%
+%% Coimbra, 1st of May, 2013 (2013/05/01)
+%% Pedro Quaresma
+%%
+%% DCpic is a package of \TeX\ macros for graph modelling in a
+%% (La)\TeX\ or Con\TeX t document. Its distinguishing features are:
+%% the use of \PiCTeX\ a powerful graphical engine, and a simple
+%% specification syntax. A graph is described in terms of its objects
+%% and its edges. The objects are textual elements and the edges can
+%% have various straight or curved forms.
+%%
+%%
+%% A graph in DCpic is a "picture" in \PiCTeX, in which we place our
+%% {\em objects} and {\em morphisms} (edges). The user's commands in
+%% DCpic are: {\tt begindc} and {\tt enddc} which establishe the
+%% coordinate system where the objects will by placed; {\tt obj}, the
+%% command which defines the place and the contents of each object;
+%% {\tt mor}, and {\tt cmor}, the commands which define the
+%% morphisms, linear and curved edges, and its labels.
+%%
+%% Example:
+%% \begindc{\commdiag}[30]
+%% \obj(10,15){$A$}
+%% \obj(25,15){$B$}
+%% \obj(40,15){$C$}
+%% \mor{$A$}{$B$}{$f$}
+%% \mor{$B$}{$C$}{$g$}
+%% \cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+%% \pup(25,3){$g\circ f$}
+%% \enddc
+%%
+%% NOTES:
+%% all the numeric values should be integer values.
+%%
+%% Available commands:
+%%
+%% The environment:
+%% \begindc{#1}[#2]
+%% #1 - Graph type
+%% 0 = "commdiag" (commutative diagram)
+%% 1 = "digraph" (direct graph)
+%% 2 = "undigraph" (undirect graph)
+%% 3 = "cdigraph" with incircled objects
+%% 4 = "cundigraph" with incircled objects
+%% (optional) #2 - magnification factor (default value, 300)
+%%
+%% \enddc
+%%
+%% Objects:
+%% \obj(#1,#2)[#3]{#4}[#5]
+%% #1 and #2 - coordenates
+%% (optional) #3 - Label, to be used in the morphims command, if not
+%% present the #4 will be used to that purpose
+%% #4 - Object contents
+%% (optional) #5 - placement of the object (default value \north)
+%% 0="\pcent", center
+%% 1="\north", north
+%% 2="\northeast", northeast
+%% 3="\east", east
+%% 4="\southeast", southeast
+%% 5="\south", south
+%% 6="\southwest", southwest
+%% 7="\west", west
+%% 8="\northwest", northwest
+%% !!! Note !!!
+%% if you omit the #3 argument (label) and the #4 argument is a
+%% complex LaTeX command this can cause this command to crash. In
+%% this case you must specify a label (the empty label [], if you do
+%% needed it it for nothing).
+%%
+%% Morphims (linear edges). This commando has to two major variants
+%% i) Starting and Ending objects specification
+%% \mor{#1}{#2}[#5,#6]{#7}[#8,#9]
+%%
+%% As you can see this first form is (intencionaly) badly formed, the
+%% arguments #3 and #4 are missing (the actual command is correctly
+%% formed).
+%%
+%% #1 - The starting object reference
+%% #2 - The ending object reference
+%%
+%% from this two we will obtain the objects coordinates, and also the
+%% dimensions of the enclosing box.
+%%
+%% The objects box dimensions are used to do an automatic adjustment of
+%% the edge width.
+%%
+%% from #1 we obtain (x,y), (#1,#2) in the second form
+%% from #2 we obtain (x',y'), (#3,#4) in the second form
+%%
+%% this values will be passed to the command second form
+%%
+%%ii) Two points coordinates specification
+%% \mor(#1,#2)(#3,#4)[#5,#6]{#7}[#8,#9]
+%%
+%% Now we can describe all the arguments
+%%
+%% #1 and #2 - coordinates (beginning)
+%% #3 and #4 - coordinates (ending)
+%%(optional)#5,#6 - correction factors (defaul values, 100 and 100 (10pt))
+%% #5 - actual beginning of the edge
+%% #6 - actual ending of the edge
+%% #7 - text (morphism label)
+%%(optional)#8,#9
+%% #8 - label placement
+%% 1 = "\atright", at right, default value
+%% -1 = "\atleft", at left
+%% #9 - edge type
+%% 0 = "\solidarrow", default edge
+%% 1 = "\dashArrow"
+%% 2 = "\dotArrow (thanks to Xingliang Liang <jkl9543@gmail.com>)
+%% 3 = "\solidline"
+%% 4 = "\dashline"
+%% 5 = "\dotline"
+%% 6 = "\injectionarrow"
+%% 7 = "\aplicationarrow"
+%% 8 = "\surjectivearrow"
+%% 9 = "\equalline" (thanks to Ruben Debeerst <debeerst@mathematik.uni-kassel.de>)
+%% 10 = "\doublearrow"
+%% 11 = "\doubleopposite"
+%% 12 = "\nullarrow" (to allow adding labels to existing arrows)
+%%
+%% Notes: the equalline "arrow" does not provide a second label.
+%%
+%% Curved Morphisms (quadratic edges):
+%% \cmor(#1) #2(#3,#4){#5}[#6]
+%% #1 - list of points (odd number)
+%% #2 - tip direction
+%% 0 = "\pup", pointing up
+%% 1 = "\pdown", pointing down
+%% 2 = "\pright", pointing right
+%% 3 = "\pleft", pointing left
+%% #3 and #4 - coordenates of the label
+%% #5 - morphism label
+%%(optional)#6 - edge type
+%% 0 ="\solidarrow", default value
+%% 1 = "\dashArrow"
+%% 2 = "\solidline"
+%%
+%% Notes: insert a space after the command.
+%% the space after the list of points is mandatory
+%%
+%% Examples:
+%% \documentclass[a4paper,11pt]{article}
+%% \usepackage{dcpic,pictexwd}
+%%
+%% \begin{document}
+%% \begindc[3]
+%% \obj(14,11){$A$}
+%% \obj(39,11){$B$}
+%% \mor(14,12)(39,12){$f$}%[\atright,\solidarrow]
+%% \mor(39,10)(14,10){$g$}%[\atright,\solidarrow]
+%% \cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+%% \pdown(2,20){$id_A$}
+%% \cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+%% \pleft(54,3){$id_B$}
+%% \enddc
+%%
+%% \begindc{\commdiag}[3]
+%% \obj(10,15)[A]{$A$}
+%% \obj(40,15)[Aa]{$A$}
+%% \obj(25,15)[B]{$B$}
+%% \mor{A}{B}{$f$}%[\atright,\solidarrow]
+%% \mor{B}{Aa}{$g$}%[\atright,\solidarrow]
+%% \cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+%% \pup(25,3){$id_A$}
+%% \enddc
+%%
+%% \newcommand{\barraA}{\vrule height2em width0em depth0em}
+%% \newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+%% \begindc{\commdiag}[35]
+%% \obj(1,1)[Gr]{$G$}
+%% \obj(3,1)[Grstar]{$G_{r^*}$}
+%% \obj(5,1)[H]{$H$}
+%% \obj(2,2)[SigmaG]{$\Sigma^G$}
+%% \obj(6,2)[SigmaH]{$\Sigma^H$}
+%% \obj(1,3)[Lm]{$L_m$}
+%% \obj(3,3)[Krm]{$K_{r,m}$}
+%% \obj(5,3)[Rmstar]{$R_{m^*}$}
+%% \obj(1,5)[L]{$L$}
+%% \obj(3,5)[Lr]{$L_r$}
+%% \obj(5,5)[R]{$R$}
+%% \obj(2,6)[SigmaL]{$\Sigma^L$}
+%% \obj(6,6)[SigmaR]{$\Sigma^R$}
+%% \mor{Gr}{SigmaG}{$\lambda^G$}
+%% \mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+%% \mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+%% \mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+%% \mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+%% \mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+%% \mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+%% \mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+%% \mor{Krm}{Rmstar}{$r$}
+%% \mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+%% \mor{Krm}{Grstar}{$m$}
+%% \mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+%% \mor{Rmstar}{H}{$m^*$}
+%% \mor{L}{SigmaL}{$\lambda^L$}
+%% \mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+%% \mor{Lr}{R}{$r$}
+%% \mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+%% \mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+%% \mor{SigmaL}{SigmaR}{$\varphi^r$}
+%% \mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+%% \enddc
+%%
+%% \end{document}
+%%-----------------//-------------
+%% Modifications (9/1993)
+%% argument "distance" between de tip of the arrow and the objects
+%% became optional; a new option for the "arrows" (option 3)
+%%
+%% 2/3/1995 (version 1.3)
+%% adds "the aplication arrow" (option 4); the distance between
+%% the label and the "arrow" is now a fixed value (100 units).
+%% 15/7/1996 (version 2.1)
+%% The comand "\mor" has a new sintax. The 5th and 6th
+%% parameters are now the distance between the two objects and
+%% the arrow tips. The 7th parameter is the label. The 8th e 9th
+%% parameters (label position and type of arrow) are now optional
+%%
+%% 5/2001 (version 3.0)
+%% Implementation of the comand "\cmor" based on the quadratic
+%% curver comand of PiCTeX
+%%
+%% 11/2001 (version 3.1)
+%% Changes on the tips of the arrow to became more LaTeX style
+%% (after a conversation on EuroTeX 2001).
+%%
+%% 1/2002 (version 3.2)
+%% Modification of the commands "obj" and "mor" in such a way
+%% that allows the logical specification of the morphisms, that
+%% is, it is now possible to specify the starting object and the
+%% ending object instead of specify the coordinates.
+%%
+%% The length of the arrows is automatically trimmed to the
+%% objects' size.
+%%
+%% 5/2002 (version 4.0)
+%% New syntax for the commands "begindc" e "obj"
+%% !!! New syntax !!!
+%% The command "begindc" now have an obligatory argument, this
+%% argument allows the specification of the graph type
+%% "commdiag" (0), commutative diagrams
+%% "digraph" (1), directed graphs
+%% "undigraph" (2), undirected graphs
+%% The command "obj" has a new syntax: after the coordinates
+%% specification, an optional argument specifying a label, an
+%% obligatory argument given the "value" of the object and the
+%% final optional argument used in the graphs to set the
+%% relative position of the "value" to the "dot" defining the
+%% objects position, the default value is "north".
+%%
+%% 3/2003 (version 4.1)
+%% Responding to a request of Jon Barker <jeb1@soton.ac.uk> I
+%% create a new type of arrow, the surjective arrow.
+%% For now only horizontal and vertical versions, other angles
+%% are poorly rendered.
+%% 12/2004 (version 4.1.1)
+%% New version for the surjective arrows, solve the problems
+%% with the first implementation of this option.
+%% 3/2007 (version 4.2)
+%% Adds the "providespackage" directive that was missing.
+%% Adds dashed lines, and dotted lines.
+%% 5/2008 (version 4.2.1)
+%% Deleting some counters, trying to avoid the problem "running
+%% out of counters", that occurs because of the use of PiCTeX
+%% and DCpic (only two...)
+%% 8/2008 (version 4.3)
+%% Thanks to Ruben Debeerst (debeerst@mathematik.uni-kassel.de),
+%% he added a new arrow "equalline". After that I
+%% decided to add: the doublearrow; the doublearrow with
+%% opposite directions; the null arrow. This last can be used as
+%% a simple form of adding new labels.
+%%12/2008 (version 4.3.1)
+%% The comand \id is internalised (\!id), it should be that way
+%% from the begining because it is not to be used from the
+%% outside.
+%% The comand \dasharrow was changed to \dashArrow to avoid a
+%% clash with the AMS command with the same name.
+%%12/2009 (version 4.3.2)
+%% There is a conflict between dcpic.sty and hyperref in current
+%% texlive-2009 due to the one letter macro \d (thanks Thorsten
+%% S <thorsten.schwander@gmail.com>).
+%% The \d changed to \deuc (Euclidian Distance). The \x and \y
+%% changed to \xO \yO
+%% 4/2013 (version 4.4.0)
+%% Thanks to Xingliang Liang <jkl9543@gmail.com>. He added a new
+%% arrow "dotarrow".
+%% 5/2013 (version 5.0)
+%% The base scale of the graph has changed from 1pt to .1pt to
+%% solve a problem with the implementation of the oblique
+%% equalline (Thanks to Antonio de Nicola).
+%% The LaTeX circle and oval commands where replaced by the
+%% PiCTeX circulararc and ellipticalarc commands to avoid
+%% differences in scales.
+%%-----------------//-------------
+
+\catcode`!=11 % ***** THIS MUST NEVER BE OMITTED (See PiCTeX)
+
+\newcount\aux%
+\newcount\auxa%
+\newcount\auxb%
+\newcount\xO%
+\newcount\yO%
+\newcount\xl%
+\newcount\yl%
+\newcount\deuc%
+\newcount\dnm%
+\newcount\xa%
+\newcount\xb%
+\newcount\xmed%
+\newcount\xc%
+\newcount\xd%
+\newcount\xe
+\newcount\xf
+\newcount\ya%
+\newcount\yb%
+\newcount\ymed%
+\newcount\yc%
+\newcount\yd
+\newcount\ye
+\newcount\yf
+%% "global variables"
+\newcount\expansao%
+\newcount\tipografo% version 4.0
+\newcount\distanciaobjmor% version 4.0
+\newcount\tipoarco% version 4.0
+\newif\ifpara%
+%% version 3.2
+\newbox\caixa%
+\newbox\caixaaux%
+\newif\ifnvazia%
+\newif\ifvazia%
+\newif\ifcompara%
+\newif\ifdiferentes%
+\newcount\xaux%
+\newcount\yaux%
+\newcount\guardaauxa%
+\newcount\alt%
+\newcount\larg%
+\newcount\prof%
+%% for the triming
+\newcount\auxqx
+\newcount\auxqy
+\newif\ifajusta%
+\newif\ifajustadist
+\def\objPartida{}%
+\def\objChegada{}%
+\def\objNulo{}%
+
+%%
+%% Stack specification
+%%
+
+%%
+%% Emtpy stack
+%%
+\def\!vazia{:}
+
+%%
+%% Is Empty? : Stack -> Bool
+%%
+%% nvazia - True if Not Empy
+%% vazia - True if Empty
+\def\!pilhanvazia#1{\let\arg=#1%
+\if:\arg\ \nvaziafalse\vaziatrue \else \nvaziatrue\vaziafalse\fi}
+
+%%
+%% Push : Elems x Stack -> Stack
+%%
+\def\!coloca#1#2{\edef\pilha{#1.#2}}
+
+%%
+%% Top : Stack -> Elems
+%%
+%% the empty stack is not taken care
+%% the element is "kept" ("guardado")
+\def\!guarda(#1)(#2,#3)(#4,#5,#6){\def\!id{#1}%
+\xaux=#2%
+\yaux=#3%
+\alt=#4%
+\larg=#5%
+\prof=#6%
+}
+
+\def\!topaux#1.#2:{\!guarda#1}
+\def\!topo#1{\expandafter\!topaux#1}
+
+%%
+%% Pop : Stack -> Stack
+%%
+%% the empty stack is not taken care
+\def\!popaux#1.#2:{\def\pilha{#2:}}
+\def\!retira#1{\expandafter\!popaux#1}
+
+%%
+%% Compares words : Word x Word -> Bool
+%%
+%% compara - True if equal
+%% diferentes - True if not equal
+\def\!comparaaux#1#2{\let\argA=#1\let\argB=#2%
+\ifx\argA\argB\comparatrue\diferentesfalse\else\comparafalse\diferentestrue\fi}
+
+\def\!compara#1#2{\!comparaaux{#1}{#2}}
+
+%% Private Macro
+%% Absolute Value)
+%% \absoluto{n}{absn}
+%% input
+%% n - integer
+%% output
+%% absn - |n|
+\def\!absoluto#1#2{\aux=#1%
+ \ifnum \aux > 0
+ #2=\aux
+ \else
+ \multiply \aux by -1
+ #2=\aux
+ \fi}
+
+%% Name definitions for edge types and directions
+\def\solidarrow{0}
+\def\dashArrow{1}
+\def\dotArrow{2}
+\def\solidline{3}
+\def\dashline{4}
+\def\dotline{5}
+\def\injectionarrow{6}
+\def\aplicationarrow{7}
+\def\surjectivearrow{8}
+\def\equalline{9}
+\def\doublearrow{10}
+\def\doubleopposite{11}
+\def\nullarrow{12}
+
+%% Name definitions for edge label placement
+\def\atright{-1}
+\def\atleft{1}
+%% Tip direction for curved edges
+\def\pup{0}
+\def\pdown{1}
+\def\pright{2}
+\def\pleft{3}
+%% Type of graph
+\def\commdiag{0}
+\def\digraph{1}
+\def\undigraph{2}
+\def\cdigraph{3}
+\def\cundigraph{4}
+%% Positioning of labels in graphs
+\def\pcent{0}
+\def\north{1}
+\def\northeast{2}
+\def\east{3}
+\def\southeast{4}
+\def\south{5}
+\def\southwest{6}
+\def\west{7}
+\def\northwest{8}
+
+%%Private Macro
+%% Adjust the distance between the arrows and the objects regarding
+%% the dimensions of the objects.
+%%
+%% \ajusta{x}{xl}{y}{yl}{d}{Object} (ajusta = adjust)
+%%
+%% Input
+%% (x,y) e (xl,yl) - start, end coordinates of arrow
+%% d - distance specified by the user (default value, 100)
+%% Objecto - reference of the object pointed by the arrow
+%% Output
+%% d - adjusted distance
+%%
+%% The adjusted distance is the greatest value between 100 and the
+%% object's box dimensions. If the user specify a value this is not
+%% altered.
+%%
+%% If the arrow is horizontal the length is used.
+%% If the arrow is vertical the height is used for arrows in the 1st
+%% or 2nd quadrante, or the depth if the arrow is in the 3rd or 4th
+%% quadrante. If the arrow is oblique the value is chosen accordingly:
+%% from 315 to 45 degrees length is used
+%% from 45 to 135 degrees height is used
+%% from 135 to 225 degrees length is used
+%% from 225 to 315 degrees depth is used
+\def\!ajusta#1#2#3#4#5#6{\aux=#5%
+ \let\auxobj=#6%
+ \ifcase \tipografo % commutative diagrams
+ \ifnum\number\aux=100
+ \ajustadisttrue % if needed, adjust
+ \else
+ \ajustadistfalse % if not, keeps unchanged
+ \fi
+ \else % graphs (directed, undirected, with frames)
+ \ajustadistfalse
+ \fi
+ \ifajustadist
+ \let\pilhaaux=\pilha%
+ \loop%
+ \!topo{\pilha}%
+ \!retira{\pilha}%
+ \!compara{\!id}{\auxobj}%
+ \ifcompara\nvaziafalse \else\!pilhanvazia\pilha \fi%
+ \ifnvazia%
+ \repeat%
+%% push the values into the stack
+ \let\pilha=\pilhaaux%
+ \ifvazia%
+ \ifdiferentes%
+%%
+%% It is not possible to make de adjustment given the fact that the
+%% user did not provide a label for the object in question. We set a
+%% value equal to the default value (100)
+%%
+ \larg=131072% these values are for unit of .1pt
+ \prof=65536%
+ \alt=65536%
+ \fi%
+ \fi%
+ \divide\larg by 13107% these values are for unit of .1pt
+ \divide\prof by 6553%
+ \divide\alt by 6553%
+ \ifnum\number\yO=\number\yl
+%% Case 1 -- horizontal arrow
+%%
+%% with the division by 13107 we get half the size of the box, for a
+%% centered text, the adding of 30 is an empirical adjustment.
+ \advance\larg by 30
+ \ifnum\number\larg>\aux
+ #5=\larg
+ \fi
+ \else
+ \ifnum\number\xO=\number\xl
+ \ifnum\number\yl>\number\yO
+%% Case 2.1 -- vertical arrow, down direction
+%%
+ \ifnum\number\alt>\aux
+ #5=\alt
+ \fi
+ \else
+%% Case 2.2 -- vertical arrow, up direction
+%%
+%% with the division by 6553 we get the box height. The adjustment
+%% of 50 is an empirical adjustment.
+ \advance\prof by 50
+ \ifnum\number\prof>\aux
+ #5=\prof
+ \fi
+ \fi
+ \else
+%% Case 3 -- oblique arrow
+%% Case 3.1 --- from 315o to 45o; |x-xl|>|y-yl|
+%% Case 3.3 --- from 135o to 225o; |x-xl|>|y-yl|; Length
+ \auxqx=\xO
+ \advance\auxqx by -\xl
+ \!absoluto{\auxqx}{\auxqx}%
+ \auxqy=\yO
+ \advance\auxqy by -\yl
+ \!absoluto{\auxqy}{\auxqy}%
+ \ifnum\auxqx>\auxqy
+ \ifnum\larg<100
+ \larg=100
+ \fi
+ \advance\larg by 30
+ #5=\larg
+ \else
+%% Case 3.2 --- from 45o to 135o; |x-xl|<|y-yl| e y>0; Length
+ \ifnum\yl>\yO
+ \ifnum\larg<100
+ \larg=100
+ \fi
+ \advance\alt by 60
+ #5=\alt
+ \else
+%% Case 3.4 -- from 225o to 315o; |x-xl|<|y-yl| e y<0; Depth
+ \advance\prof by 110
+ #5=\prof
+ \fi
+ \fi
+ \fi
+ \fi
+\fi} % the branch else is missing
+
+%%Private Macro
+%% Square root
+%% raiz{n}{m} (raiz = root)
+%% ->
+%% n - natural number
+%% <-
+%% n - natural number
+%% m - greatest natural number less then the square root of n
+\def\!raiz#1#2{\auxa=#1%
+ \auxb=1%
+ \loop
+ \aux=\auxb%
+ \advance \aux by 1%
+ \multiply \aux by \aux%
+ \ifnum \aux < \auxa%
+ \advance \auxb by 1%
+ \paratrue%
+ \else\ifnum \aux=\auxa%
+ \advance \auxb by 1%
+ \paratrue%
+ \else\parafalse%
+ \fi
+ \fi
+ \ifpara%
+ \repeat
+#2=\auxb}
+
+%%Private Macro
+%% Find the starting and ending points of the "arrow" and also the
+%% label position (one coordinate at a time)
+%%
+%% ucoord{x1}{x2}{x3}{x4}{x5}{x6}{+|- 1}
+%% Input
+%% x1,x2,x3,x4,x5
+%% Output
+%% x6
+%%
+%% x2 - x1
+%% x6 = x3 +|- ------- x4
+%% x5
+\def\!ucoord#1#2#3#4#5#6#7{\aux=#2%
+ \advance \aux by -#1%
+ \multiply \aux by #4%
+ \divide \aux by #5%
+ \ifnum #7 = -1 \multiply \aux by -1 \fi%
+ \advance \aux by #3%
+#6=\aux}
+
+%%Private Macro
+%% Euclidean distance between two points
+%%
+%% quadrado = square
+%%
+%% quadrado{n}{m}{l}
+%% Input
+%% n - natural number
+%% m - natural number
+%% Output
+%% l = (n-m)*(n-m)
+\def\!quadrado#1#2#3{\aux=#1%
+ \advance \aux by -#2%
+ \multiply \aux by \aux%
+#3=\aux}
+
+%%Private Macro
+%% Euclidean distance between arrows and its tags
+%%
+%% Input
+%% (x,y), (x',y') morphism's name (tag)
+%% Output
+%% dnm - distance between an arrow and its tags
+%% (with a trim given by the tag's size
+%% Observations
+%% The trimming is for horizontal and vertical arrows
+%% only. Oblique arrows are dealt in a different way
+%%
+%% Algorithm
+%% caixa0 <- morfism name
+%% if x-xl = 0 then {vertical arrow}
+%% aux <- caixa0 width
+%% dnm <- converstion-sp-pt(aux)/2+3
+%% else {non-vertical arrow}
+%% if y-yl = 0 then {horizontal arrow}
+%% aux <- caixa0 height+depth
+%% dnm <- converstion-sp-pt(aux)/2+3
+%% else {oblique arrow}
+%% dnm <- 3
+%% endif
+%% endif
+%% endalgorithm
+\def\!distnomemor#1#2#3#4#5#6{\setbox0=\hbox{#5}%
+ \aux=#1
+ \advance \aux by -#3
+ \ifnum \aux=0
+ \aux=\wd0 \divide \aux by 13107%2
+ \advance \aux by 30
+ #6=\aux
+ \else
+ \aux=#2
+ \advance \aux by -#4
+ \ifnum \aux=0
+ \aux=\ht0 \advance \aux by \dp0 \divide \aux by 13107%2
+ \advance \aux by 30
+ #6=\aux%
+ \else
+ #6=30
+ \fi
+ \fi
+}
+
+%%
+%% The environment "begindc...enddc"
+%%
+\def\begindc#1{\!ifnextchar[{\!begindc{#1}}{\!begindc{#1}[30]}}
+\def\!begindc#1[#2]{\beginpicture
+ \let\pilha=\!vazia
+ \setcoordinatesystem units <.1pt,.1pt>
+ \expansao=#2
+ \ifcase #1
+ \distanciaobjmor=100
+ \tipoarco=0 % arrow
+ \tipografo=0 % commutative diagram
+ \or
+ \distanciaobjmor=20
+ \tipoarco=0 % arrow
+ \tipografo=1 % directed graph
+ \or
+ \distanciaobjmor=10
+ \tipoarco=3 % line
+ \tipografo=2 % undirected graph
+ \or
+ \distanciaobjmor=80
+ \tipoarco=0 % arrow
+ \tipografo=3 % directed graph
+ \or
+ \distanciaobjmor=80
+ \tipoarco=3 % line
+ \tipografo=4 % undirected graph
+ \fi}
+
+\def\enddc{\endpicture}
+
+\def\drawarrowhead <#1> [#2,#3]{%
+ \!ifnextchar<{\!drawarrowhead{#1}{#2}{#3}}{\!drawarrowhead{#1}{#2}{#3}<\!zpt,\!zpt> }}
+
+% Xingliang Liang <jkl9543@gmail.com>
+% ** \!ljoin (XCOORD,YCOORD)
+% ** Draws a straight line starting at the last point specified
+% ** by the most recent \!start, \!ljoin, or \!qjoin, and
+% ** ending at (XCOORD,YCOORD).
+\def\!ljoindummy (#1,#2){%
+ \advance\!intervalno by 1
+ \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit
+ \!rotateaboutpivot\!xE\!yE
+ \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS
+ \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS
+ \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2)
+ \global\advance \totalarclength by \!arclength%
+ %\!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed
+ \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points
+ \ignorespaces}
+
+%%
+%% \!drawarrowhead{4pt}{DimC}{DimD} <xshift,yshift> from {\xa} {\ya} to {\xb} {\yb}
+%%
+\def\!drawarrowhead#1#2#3<#4,#5> from #6 #7 to #8 #9 {%
+%
+% ** convert to dimensions
+ \!xloc=\!M{#8}\!xunit
+ \!yloc=\!M{#9}\!yunit
+ \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA
+ \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA
+ \let\!MAH=\!M% ** save current c/d mode
+ \!setdimenmode% ** go into dimension mode
+%
+ \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift
+ \!reverserotateonly\!xshift\!yshift% ** back rotate shift
+ \advance\!xshift\!xloc \advance\!yshift\!yloc
+%
+% ** draw shaft of arrow
+ \!xS=-\!dxpos \advance\!xS\!xshift
+ \!yS=-\!dypos \advance\!yS\!yshift
+ \!start (\!xS,\!yS)
+ \!ljoindummy (\!xshift,\!yshift)
+%
+% ** find 32*cosine and 32*sine of angle of rotation
+ \!Pythag\!dxpos\!dypos\!arclength
+ \!divide\!dxpos\!arclength\!dxpos
+ \!dxpos=32\!dxpos \!removept\!dxpos\!!cos
+ \!divide\!dypos\!arclength\!dypos
+ \!dypos=32\!dypos \!removept\!dypos\!!sin
+%
+% ** construct arrowhead
+ \!halfhead{#1}{#2}{#3}% ** draw half of arrow head
+ \!halfhead{#1}{-#2}{-#3}% ** draw other half
+%
+ \let\!M=\!MAH% ** restore old c/d mode
+ \ignorespaces}
+
+%% Public macro: "mor"
+%%
+%% Funtion to built the "arrow" between two points
+%%
+%% The points that are uses to built all the elements of the "arrows"
+%% are:
+%%
+%% (xc,yc)
+%% o
+%% |
+%% o------o---------o---------o------o
+%%(x,y) (xa,ya) (xm,ym) (xb,yb)(xl,yl)
+%%
+%% auxa - distance between (x,y) and (xa,ya), 10pt by default
+%% auxb - distance between (xl,yl) and (xb,yb), 10pt by default
+%%
+\def\mor{%
+ \!ifnextchar({\!morxy}{\!morObjA}}
+\def\!morxy(#1,#2){%
+ \!ifnextchar({\!morxyl{#1}{#2}}{\!morObjB{#1}{#2}}}
+\def\!morxyl#1#2(#3,#4){%
+ \!ifnextchar[{\!mora{#1}{#2}{#3}{#4}}{\!mora{#1}{#2}{#3}{#4}[\number\distanciaobjmor,\number\distanciaobjmor]}}%
+\def\!morObjA#1{%
+ \let\pilhaaux=\pilha%
+ \def\objPartida{#1}%
+ \loop%
+ \!topo\pilha%
+ \!retira\pilha%
+ \!compara{\!id}{\objPartida}%
+ \ifcompara \nvaziafalse \else \!pilhanvazia\pilha \fi%
+ \ifnvazia%
+ \repeat%
+ \ifvazia%
+ \ifdiferentes%
+%%
+%% error message and ficticious parameters
+%%
+ Error: Incorrect label specification%
+ \xaux=1%
+ \yaux=1%
+ \fi%
+ \fi%
+ \let\pilha=\pilhaaux%
+ \!ifnextchar({\!morxyl{\number\xaux}{\number\yaux}}{\!morObjB{\number\xaux}{\number\yaux}}}
+\def\!morObjB#1#2#3{%
+ \xO=#1
+ \yO=#2
+ \def\objChegada{#3}%
+ \let\pilhaaux=\pilha%
+ \loop
+ \!topo\pilha %
+ \!retira\pilha%
+ \!compara{\!id}{\objChegada}%
+ \ifcompara \nvaziafalse \else \!pilhanvazia\pilha \fi
+ \ifnvazia
+ \repeat
+ \ifvazia
+ \ifdiferentes%
+%%
+%% error message and ficticious parameters
+%%
+ Error: Incorrect label specification
+ \xaux=\xO%
+ \advance\xaux by \xO%
+ \yaux=\yO%
+ \advance\yaux by \yO%
+ \fi
+ \fi
+ \let\pilha=\pilhaaux
+ \!ifnextchar[{\!mora{\number\xO}{\number\yO}{\number\xaux}{\number\yaux}}{\!mora{\number\xO}{\number\yO}{\number\xaux}{\number\yaux}[\number\distanciaobjmor,\number\distanciaobjmor]}}
+\def\!mora#1#2#3#4[#5,#6]#7{%
+ \!ifnextchar[{\!morb{#1}{#2}{#3}{#4}{#5}{#6}{#7}}{\!morb{#1}{#2}{#3}{#4}{#5}{#6}{#7}[1,\number\tipoarco] }}
+\def\!morb#1#2#3#4#5#6#7[#8,#9]{\xO=#1%
+ \yO=#2%
+ \xl=#3%
+ \yl=#4%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \multiply \xl by \expansao%
+ \multiply \yl by \expansao%
+%%
+%% Euclidean distance between two points
+%% d = \sqrt((x-xl)^2+(y-yl)^2)
+%%
+ \!quadrado{\number\xO}{\number\xl}{\auxa}%
+ \!quadrado{\number\yO}{\number\yl}{\auxb}%
+ \deuc=\auxa%
+ \advance \deuc by \auxb%
+ \!raiz{\deuc}{\deuc}%
+%%
+%% the point (xa,ya) is at a distance #5 (default value 100) from the
+%% point (x,y)
+%%
+%% given the fact that we have two points (start,end) we need to
+%% recover their value searching the stack
+ \auxa=#5
+ \!compara{\objNulo}{\objPartida}%
+ \ifdiferentes% adjusting only when needed
+ \!ajusta{\xO}{\xl}{\yO}{\yl}{\auxa}{\objPartida}%
+ \ajustatrue
+ \def\objPartida{}% reset the value of the starting object
+ \fi
+%% save the value of aux (after adjustment) to be used in the case of
+%% an injective morphism
+ \guardaauxa=\auxa
+%%
+ \!ucoord{\number\xO}{\number\xl}{\number\xO}{\auxa}{\number\deuc}{\xa}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\yO}{\auxa}{\number\deuc}{\ya}{1}%
+%% auxa has the value of the distance between the objects minus the
+%% distance between the arrow and the objects (100 default value)
+ \auxa=\deuc%
+%%
+%% the point (xb,yb) is at a distance #6 (default value 100) from the
+%% point (xl,yl)
+%%
+ \auxb=#6
+ \!compara{\objNulo}{\objChegada}%
+ \ifdiferentes% adjusting only when needed
+% adjustment
+ \!ajusta{\xO}{\xl}{\yO}{\yl}{\auxb}{\objChegada}%
+ \def\objChegada{}% reset the value of the end object
+ \fi
+ \advance \auxa by -\auxb%
+ \!ucoord{\number\xO}{\number\xl}{\number\xO}{\number\auxa}{\number\deuc}{\xb}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\yO}{\number\auxa}{\number\deuc}{\yb}{1}%
+ \xmed=\xa%
+ \advance \xmed by \xb%
+ \divide \xmed by 2
+ \ymed=\ya%
+ \advance \ymed by \yb%
+ \divide \ymed by 2
+%%
+%% find the coordinates of the label position: (xc,yc)
+%%
+%% after this the values of xmed and ymed are no longer important
+%%
+ \!distnomemor{\number\xO}{\number\yO}{\number\xl}{\number\yl}{#7}{\dnm}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xmed}{\number\dnm}{\number\deuc}{\xc}{-#8}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ymed}{\number\dnm}{\number\deuc}{\yc}{#8}%
+%%
+%% draw the "arrow"
+%%
+\ifcase #9 % 0=solid arrow
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+\or % 1=dashed arrow
+ \setdashes <2pt>
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid%
+ \drawarrowhead <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+\or % 2=dotted arrow (Xingliang Liang <jkl9543@gmail.com> - 4.4.0)
+ \setdots <2pt>
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid%
+ \drawarrowhead <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+\or % 3=solid line
+ \setlinear
+ \plot {\xa} {\ya} {\xb} {\yb} /
+\or % 4=dashed line
+ \setdashes <2pt>
+ \setlinear
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid
+\or % 5=dotted line
+ \setdots <2pt>
+ \setlinear
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid
+\or % 6=injective arrow
+%%
+%% 30 units, the radius for the tail of the arrow
+%%
+%% recover the value of auxa
+ \auxa=\guardaauxa
+%% makes an adjustment to cope with the tail of the arrow, giving
+%% space to the semi-circle
+ \advance \auxa by 30%
+%%
+%% Note: the values of (xa,ya) will be modified, they will be
+%% "pushed" further away from (x,y) in order to acomodate the tail
+%% of the "arrow"
+%%
+%% find the point (xd,yd), the center of a 2pt (20*0.1) circle
+%%
+ \!ucoord{\number\xO}{\number\xl}{\number\xO}{\number\auxa}{\number\deuc}{\xa}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\yO}{\number\auxa}{\number\deuc}{\ya}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{20}{\number\deuc}{\xd}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{20}{\number\deuc}{\yd}{1}%
+%% building the "arrow"
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+%% and its "tail"
+ \circulararc -180 degrees from {\xa} {\ya} center at {\xd} {\yd}
+\or % 7=maps "arrow" ("|-->")
+ \auxa=20 %
+%%
+%% Note: the values of xmed and ymed will be modified
+%%
+%% find the two points that defines the tail of the arrow (segment
+%% (xmed,ymed)(xd,yd))
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+%% building the "arrow"
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+%% and its "tail"
+ \setlinear
+ \plot {\xmed} {\ymed} {\xd} {\yd} /
+\or % 8=surjective arrow ("-->>")
+%% building arrow with the first tip
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+%% and the second tip
+ \setlinear
+ \arrow <6pt> [0,.72] from {\xa} {\ya} to {\xb} {\yb}
+\or % 9=equalline
+%% by Ruben Debeerst: equal-line
+%%
+%% sets the separation (distance) between the two parallel lines, if
+%% horizontal or vertical 1pt (10*0.1) is enough, if not 1.1pt (11*0.1)
+\auxa=11
+\ifnum\number\yO=\number\yl
+\auxa=10
+\fi
+\ifnum\number\xO=\number\xl
+\auxa=10
+\fi
+%% the two parallel lines will be given by (xmed,ymed)(xd,yd), and
+%% (xe,ye)(xf,yf)
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xe}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\ye}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xf}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\yf}{-1}%
+ \setlinear
+ \plot {\xmed} {\ymed} {\xe} {\ye} /
+ \plot {\xd} {\yd} {\xf} {\yf} /
+\or % 10=double arrow
+%%
+%% sets the separation (distance) between the two parallel lines, if
+%% horizontal or vertical 2pt is enough, if not 2.5pt. The extra space
+%% is needed because of the arrow tip.
+\auxa=25
+\ifnum\number\yO=\number\yl
+\auxa=20
+\fi
+\ifnum\number\xO=\number\xl
+\auxa=20
+\fi
+%% the two parallel lines will be given by (xmed,ymed)(xd,yd), and
+%% (xe,ye)(xf,yf)
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xe}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\ye}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xf}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\yf}{-1}%
+ \arrow <4pt> [.2,1.1] from {\xmed} {\ymed} to {\xe} {\ye}
+ \arrow <4pt> [.2,1.1] from {\xd} {\yd} to {\xf} {\yf}
+\or % 10=double arrow, opposite directions
+%%
+%% sets the separation (distance) between the two parallel lines, if
+%% horizontal or vertical 2pt is enough, if not 2.5pt. The extra space
+%% is needed because of the arrow tip.
+\auxa=22
+\ifnum\number\yO=\number\yl
+\auxa=20
+\fi
+\ifnum\number\xO=\number\xl
+\auxa=20
+\fi
+%% the two parallel lines will be given by (xmed,ymed)(xd,yd), and
+%% (xe,ye)(xf,yf)
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xe}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\ye}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xf}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\yf}{-1}%
+ \arrow <4pt> [.2,1.1] from {\xmed} {\ymed} to {\xe} {\ye}
+ \arrow <4pt> [.2,1.1] from {\xf} {\yf} to {\xd} {\yd}
+\or % 11=null arrow (no arrow, only a label)
+%%
+%% does not draw the arrow, it allows to put two labels in one "arrow"
+%%
+\fi
+%% The label positioning.
+%% If the arrows are horizontal or verticals the box is built centered
+%% in the object center. If the arrows are oblique the box is built in
+%% such a way to avoid the arrow label, having in account the
+%% quadrante and the relative position of the arrow and the
+%% corresponding label
+\auxa=\xl
+\advance \auxa by -\xO%
+\ifnum \auxa=0
+ \put {#7} at {\xc} {\yc}
+\else
+ \auxb=\yl
+ \advance \auxb by -\yO%
+ \ifnum \auxb=0 \put {#7} at {\xc} {\yc}
+ \else
+ \ifnum \auxa > 0
+ \ifnum \auxb > 0
+ \ifnum #8=1
+ \put {#7} [rb] at {\xc} {\yc}
+ \else
+ \put {#7} [lt] at {\xc} {\yc}
+ \fi
+ \else
+ \ifnum #8=1
+ \put {#7} [lb] at {\xc} {\yc}
+ \else
+ \put {#7} [rt] at {\xc} {\yc}
+ \fi
+ \fi
+ \else
+ \ifnum \auxb > 0
+ \ifnum #8=1
+ \put {#7} [rt] at {\xc} {\yc}
+ \else
+ \put {#7} [lb] at {\xc} {\yc}
+ \fi
+ \else
+ \ifnum #8=1
+ \put {#7} [lt] at {\xc} {\yc}
+ \else
+ \put {#7} [rb] at {\xc} {\yc}
+ \fi
+ \fi
+ \fi
+ \fi
+\fi
+}
+
+%%
+%% Curved arrow command
+%%
+%% \cmor(<list of points (n. odd)>){<label>}
+%%
+%% The plot must be changed in such a way that its syntax is coherent
+%% with the other commands
+%%
+\def\modifplot(#1{\!modifqcurve #1}
+\def\!modifqcurve(#1,#2){\xO=#1%
+ \yO=#2%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \!start (\xO,\yO)
+ \!modifQjoin}
+\def\!modifQjoin(#1,#2)(#3,#4){\xO=#1%
+ \yO=#2%
+ \xl=#3%
+ \yl=#4%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \multiply \xl by \expansao%
+ \multiply \yl by \expansao%
+ \!qjoin (\xO,\yO) (\xl,\yl) % \!qjoin is defined in QUADRATIC
+ \!ifnextchar){\!fim}{\!modifQjoin}}
+\def\!fim){\ignorespaces}
+
+%%
+%% The command to draw the arrow tip receives the list of points, get
+%% from it the last pair of points and depending of the user choice
+%% the arrow tip is drawn.
+%%
+\def\setaxy(#1{\!pontosxy #1}
+\def\!pontosxy(#1,#2){%
+ \!maispontosxy}
+\def\!maispontosxy(#1,#2)(#3,#4){%
+ \!ifnextchar){\!fimxy#3,#4}{\!maispontosxy}}
+\def\!fimxy#1,#2){\xO=#1%
+ \yO=#2
+ \multiply \xO by \expansao
+ \multiply \yO by \expansao
+ \xl=\xO%
+ \yl=\yO%
+ \aux=1%
+ \multiply \aux by \auxa%
+ \advance\xl by \aux%
+ \aux=1%
+ \multiply \aux by \auxb%
+ \advance\yl by \aux%
+ \arrow <4pt> [.2,1.1] from {\xO} {\yO} to {\xl} {\yl}}
+
+
+%%
+%% The definition of the command "cmor"
+%%
+\def\cmor#1 #2(#3,#4)#5{%
+ \!ifnextchar[{\!cmora{#1}{#2}{#3}{#4}{#5}}{\!cmora{#1}{#2}{#3}{#4}{#5}[0] }}
+\def\!cmora#1#2#3#4#5[#6]{%
+ \ifcase #2% "\pup" (pointing up)
+ \auxa=0% x do not change
+ \auxb=1% y "up"
+ \or% \pdown" (pointing down)
+ \auxa=0% x do not change
+ \auxb=-1% y "down"
+ \or% "\pright" (pointing right)
+ \auxa=1% x "right"
+ \auxb=0% y do not change
+ \or% "\pleft" (pointing left)
+ \auxa=-1% x "left"
+ \auxb=0% y do not change
+ \fi % the line
+ \ifcase #6 % arrow solid
+ \modifplot#1% draw the line
+ % and the arrow tip
+ \setaxy#1
+ \or % arrow (with tip) dashed
+ \setdashes
+ \modifplot#1% draw the line
+ \setaxy#1
+ \setsolid
+ \or % arrow (without tip)
+ \modifplot#1% draw the line
+ \fi % injection morphism
+%% label
+ \xO=#3%
+ \yO=#4%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \put {#5} at {\xO} {\yO}}
+
+%%
+%% Command to build the objects
+%% \obj(x,y){<text>}[<label>]
+%%
+\def\obj(#1,#2){%
+ \!ifnextchar[{\!obja{#1}{#2}}{\!obja{#1}{#2}[Nulo]}}
+\def\!obja#1#2[#3]#4{%
+ \!ifnextchar[{\!objb{#1}{#2}{#3}{#4}}{\!objb{#1}{#2}{#3}{#4}[1]}}
+\def\!objb#1#2#3#4[#5]{%
+ \xO=#1%
+ \yO=#2%
+ \def\!pinta{\normalsize$\bullet$}% sets the normal size of the bullet
+ \def\!nulo{Nulo}%
+ \def\!arg{#3}%
+ \!compara{\!arg}{\!nulo}%
+ \ifcompara\def\!arg{#4}\fi%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \setbox\caixa=\hbox{#4}%
+ \!coloca{(\!arg)(#1,#2)(\number\ht\caixa,\number\wd\caixa,\number\dp\caixa)}{\pilha}%
+ \auxa=\wd\caixa \divide \auxa by 13107%2
+ \advance \auxa by 50
+ \auxb=\ht\caixa
+ \advance \auxb by \number\dp\caixa
+ \divide \auxb by 13107%2
+ \advance \auxb by 50
+ \ifcase \tipografo % commutative diagrams
+ \put{#4} at {\xO} {\yO}
+ \or % directed graphs
+ \ifcase #5 % c=0, placement of the object (c=center)
+ \put{#4} at {\xO} {\yO}
+ \or % n=1
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % ne=2
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -2 % para fazer o ajuste (imperfeito)
+ \advance \auxb by -2 % ao raio da circunferencia de centro (x,y)
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % e=3
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by \number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % se=4
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -2 % para fazer o ajuste (imperfeito)
+ \advance \auxb by -2 % ao raio da circunferencia de centro (x,y)
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % s=5
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % sw=6
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % adjusting to the radius of the circle
+ \advance \auxb by -20 % with center in (x,y)
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % w=7
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by -\number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % nw=8
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % adjusting to the radius of the circle
+ \advance \auxb by -20 % with center in (x,y)
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \fi
+ \or % undirect graphs
+ \ifcase #5 % c=0
+ \put{#4} at {\xO} {\yO}
+ \or % n=1
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % ne=2
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % adjusting to the radius of the circle
+ \advance \auxb by -20 % with center in (x,y)
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % e=3
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by \number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % se=4
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % see above
+ \advance \auxb by -20
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % s=5
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % sw=6
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % see above
+ \advance \auxb by -20
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % w=7
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by -\number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % nw=8
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % see above
+ \advance \auxb by -20
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \fi
+ \else % graphs with circular frames
+ \ifnum\auxa<\auxb % set aux to be the greatest dimension
+ \aux=\auxb
+ \else
+ \aux=\auxa
+ \fi
+% if the length of the box is less then 1em, the size of the circle is
+% adjust in order not to be less then 10pt
+ \ifdim\wd\caixa<1em
+ \dimen99 = 10pt
+ \aux=\dimen99
+ \divide \aux by 13107
+ \advance \aux by 50
+ \fi
+ \advance\aux by -20
+ \xl=\xO
+ \advance\xl by \aux
+ \ifnum\aux<120 % gives (more or less) three digits
+ \circulararc 360 degrees from {\xl} {\yO} center at {\xO} {\yO}
+ \else
+ \ellipticalarc axes ratio {\auxa}:{\auxb} 360 degrees from {\xl} {\yO} center at {\xO} {\yO}
+ \fi
+ \put{#4} at {\xO} {\yO}
+ \fi
+}
+
+
+\catcode`!=12 % ***** THIS MUST NEVER BE OMITTED (see PiCTeX)
diff --git a/macros/generic/diagrams/dcpic/europroc.cls b/macros/generic/diagrams/dcpic/europroc.cls
new file mode 100644
index 0000000000..9a17e0a23e
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/europroc.cls
@@ -0,0 +1,332 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% LaTeX classfile for EuroTeX 2001 proceedings
+%
+% Copyright 2001 NTG / MAPS
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% provide for pdftex
+
+\newif\ifpdf
+\ifx \pdfoutput \undefined
+ \pdffalse
+\else
+ \ifnum \pdfoutput=1
+ \pdftrue
+ \pdfhorigin=1in
+ \pdfvorigin=1in
+ \else
+ \pdffalse
+ \fi
+\fi
+\paperwidth=21cm
+\paperheight=29.7cm
+\ifpdf
+ \pdfpagewidth=21cm
+ \pdfpageheight=29.7cm
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% option processing and class loading
+
+\let\pagetopbot\null
+\def\paget@pb@t{%
+ \smash{\rlap{%
+ \rule[-3cm]{\paperwidth}{.4pt}}}%
+ \smash{\rlap{%
+ \rule[23.5cm]{\paperwidth}{.4pt}}}%
+}
+\DeclareOption{pagebounds}{\AtBeginDocument{\let\pagetopbot=\paget@pb@t}}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass[twoside,a4paper,10pt]{article}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% general typography
+
+\parindent=1em
+
+% dropcaps
+\newdimen\dropht
+\newdimen\dropwd
+\newcount\dropct
+\newcount\dropctm
+\long\def\initial#1#2{%
+ \dropct=#1
+ \dropctm=#1\advance\dropctm-1%
+ \dropht=\dropctm\baselineskip
+ \advance\dropht1ex
+ \advance\dropht1pt
+ \sbox\@tempboxa{\resizebox{!}{\dropht}{#2}}%
+ \hangindent=\wd\@tempboxa
+ \advance\hangindent2pt
+ \hangafter=-\dropct
+ \noindent
+ \llap{\vbox{\null\vskip\dropct\baselineskip
+ \box\@tempboxa\vskip-\dropct\baselineskip\null
+ }}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% logos
+
+\def\logo#1{\mbox{\textsc{#1}}}
+\def\eurotex{\logo{eurotex}}
+\let\Eurotex\eurotex
+\let\EuroTex\eurotex
+\let\EuroTeX\eurotex
+\let\euroTeX\eurotex
+\let\euroTex\eurotex
+\def\LaTeX{\logo{latex}}
+\def\LaTeXe{\logo{latex}2$\epsilon$}
+\def\Context{\logo{context}}
+\let\ConTeXt\Context
+\let\conTeXt\Context
+\let\context\Context
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% page layout
+
+% copied/adapted from size10.clo
+\newdimen\le@ding\le@ding=12pt
+\topmargin=.5in
+\headheight=\le@ding
+\headsep=26pt
+\topskip=10pt
+\textheight=44\baselineskip
+\advance\textheight\topskip
+\textwidth=31pc
+\oddsidemargin=.5\paperwidth
+\advance\oddsidemargin-.5\textwidth
+\advance\oddsidemargin-1in
+\let\evensidemargin\oddsidemargin
+
+\raggedbottom
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% page styles
+
+% \pagetopbot defined at start of file
+\def\ps@empty{%
+ \let\@oddhead\@empty\let\@evenhead\@empty
+ \def\@oddfoot{%
+ \null\hskip-\oddsidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+ \def\@evenfoot{%
+ \null\hskip-\evensidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+}
+\let\ps@plain\ps@empty
+\def\ps@headings{%
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{%
+ \reset@font\hfil{\scshape\rightmark}\hfil\llap{\thepage}}%
+ \def\@evenhead{%
+ \reset@font\rlap{\thepage}\hfil{\scshape\leftmark}\hfil}%
+ \def\@oddfoot{%
+ \null\hskip-\oddsidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+ \def\@evenfoot{%
+ \null\hskip-\evensidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+% \let\@evenfoot\@empty\let\@oddfoot\@empty
+}
+\pagestyle{headings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% maketitle
+
+\renewcommand\date[1]{\relax}
+\renewcommand\author[2][\@empty]{%
+ \gdef\@author{#2}\xdef\r@nauthor{\lowercase{#1}}%
+ \ifx\r@nauthor \@empty
+ \xdef \r@nauthor{\lowercase{#2}}%
+ \fi
+}
+\renewcommand\title[2][\@empty]{%
+ \gdef\@title{#2}\xdef\r@ntitle{\lowercase{#1}}%
+ \ifx\r@ntitle \@empty
+ \xdef \r@ntitle{\lowercase{#2}}%
+ \fi
+}
+\def\titleornament{%
+ \fontfamily{cmr}\fontencoding{OMS}\itshape
+ \char125\quad \char125\quad \char125%
+}
+%\def\titleornament{%
+% \fontfamily{pzd}\fontencoding{U}\small\selectfont F F F%
+%}
+\def\@maketitle{%
+ \newpage
+ \markboth{\lowercase{\r@nauthor}}{\lowercase{\@title}}%
+ \null
+ \reset@font
+ \vskip\baselineskip
+ \begin{center}
+ \reset@font
+ \vskip.7\baselineskip
+ {\titleornament\par}
+ \vskip1.3\baselineskip
+ \let\footnote\thanks
+ {\LARGE \itshape \@title \par}%
+ \vskip.5\baselineskip
+ {\scshape \@author}
+ \end{center}
+ \vskip2\baselineskip
+}
+\renewenvironment{abstract}{%
+ \begin{center}
+ \rightskip=1em plus 1fil
+ \leftskip=\rightskip\small
+ {\scshape abstract.}
+}{\par\end{center}}
+\newcommand\keywords[1]{{%
+ \rightskip=\parindent\leftskip=\parindent\small
+ \begin{center}
+ {\scshape keywords:} #1
+ \end{center}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% sectioning
+
+\setcounter{secnumdepth}{-10}
+
+% parameters \@startsection:
+% 1 name, 2 level, 3 indent, 4 beforeskip, 5 afterskip, 6 style
+% beforeskip <0 -> no indent after
+% afterskip <0 -> run-in head
+\renewcommand{\section}{%
+ \@startsection{section}{1}{\z@}%
+ {-2.0\le@ding}{.5\le@ding}{\normalsize\sc\centering}%
+}
+\renewcommand{\subsection}{%
+ \@startsection{subsection}{2}{\z@}%
+ {-.8\le@ding}{1sp}{\large\itshape}%
+}
+\renewcommand{\subsubsection}{%
+ \@startsection{subsubsection}{3}{\z@}%
+ {-.4\le@ding}{-.5em}{\scshape}%
+}
+\def\appendixname{appendix}
+
+\def\midornament{%
+ \begin{center}
+ \vskip.5\le@ding
+ \rule{10pc}{.4pt}\\[-10pt]
+ \rule{6pc}{.2pt}\par
+ \vskip.5\le@ding
+ \end{center}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% enumerate/itemize/description
+
+\leftmargini=1.5em
+\leftmarginii=1.25em
+\leftmarginiii=1em
+\def\enumerate{%
+ \ifnum \@enumdepth >\thr@@\@toodeep\else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \expandafter
+ \list
+ \csname label\@enumctr\endcsname
+ {\usecounter\@enumctr\def\makelabel##1{\rlap{##1}}}%
+ \fi}
+\let\endenumerate =\endlist
+\def\itemize{%
+ \ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter
+ \list
+ \csname\@itemitem\endcsname
+ {\def\makelabel##1{\rlap{##1}}}%
+ \fi}
+\def\@listi{\leftmargin\leftmargini
+ \labelwidth0pt\labelsep\leftmargin
+ \parsep 0pt
+ \topsep 3\p@
+ \itemsep3\p@}
+\let\@listI\@listi
+\@listi
+\def\@listii {\leftmargin\leftmarginii
+ \labelwidth0pt\labelsep\leftmargin
+ \topsep 3\p@
+ \parsep 0\p@
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth0pt\labelsep\leftmargin
+ \topsep 2\p@
+ \parsep \z@
+ \partopsep \p@
+ \itemsep \topsep}
+
+%\renewcommand\labelitemi{%
+% {\fontfamily{pzd}\fontencoding{U}\selectfont\char226}%
+%}
+\renewcommand\labelitemi{%
+ {\fontfamily{cmr}\fontencoding{OMS}\itshape\char5}%
+}
+\renewcommand\labelenumii{{\itshape\theenumii})}
+\renewcommand*\descriptionlabel[1]{%
+ \hspace\labelsep\normalfont\itshape #1%
+}
+
+\renewenvironment{quotation}
+ {\list{}{\rightmargin \leftmargin
+ \listparindent1.5em
+ \parsep \z@ \@plus\p@}%
+ \item\relax}
+ {\endlist}
+\renewenvironment{quote}
+ {\list{}{\rightmargin\leftmargin}%
+ \item\relax}
+ {\endlist}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% footnotes
+
+\let\footnoterule\relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tabulars
+
+\arrayrulewidth.2pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% floats and captions
+
+\renewenvironment{figure}
+ {\@float{figure}\begin{center}\footnotesize}
+ {\par\end{center}\end@float}
+\renewenvironment{figure*}
+ {\@dblfloat{figure}\begin{center}\footnotesize}
+ {\par\end{center}\end@dblfloat}
+\renewenvironment{table}
+ {\@float{table}\begin{center}\footnotesize}
+ {\par\end{center}\end@float}
+\renewenvironment{table*}
+ {\@dblfloat{table}\begin{center}\footnotesize}
+ {\par\end{center}\end@dblfloat}
+\def\mystrut{\rule[-.3\baselineskip]{0pt}{\baselineskip}}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip\footnotesize
+ \sbox\@tempboxa{\mystrut\scshape #1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \mystrut\scshape #1: #2\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+\renewcommand\figurename{figure}
+\renewcommand\tablename{table}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bibliography
+
+\def\refname{references}
diff --git a/macros/generic/diagrams/dcpic/eurotex2001.pdf b/macros/generic/diagrams/dcpic/eurotex2001.pdf
new file mode 100644
index 0000000000..b115f62a5e
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/eurotex2001.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/eurotex2001.tex b/macros/generic/diagrams/dcpic/eurotex2001.tex
new file mode 100644
index 0000000000..4b54ad718c
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/eurotex2001.tex
@@ -0,0 +1,916 @@
+% $Id: eurotex2001-pqa-article.tex,v 1.9 2001/11/12 09:53:59 pedro Exp pedro $
+\documentclass{europroc}
+\usepackage[dvips]{graphicx}
+\usepackage{dcpic,pictex}
+\usepackage{calrsfs}
+\usepackage{dsfont}
+\usepackage{alltt}
+
+
+
+\begin{document}
+
+\title[DCpic]{DCpic, Commutative Diagrams in a (La)\TeX\ Document}
+\author[Pedro Quaresma]{Pedro Quaresma\thanks{This work was partially
+supported by the Portuguese Ministry of Science and Technology (MCT),
+under the programme PRAXIS XXI.}\\ CISUC\\ Departamento de
+Matem{\'a}tica, Universidade de Coimbra\\ 3001-454 COIMBRA, PORTUGAL}
+
+
+\maketitle
+
+\begin{abstract}
+ DCpic is a package of \TeX\ macros for graphing Commutative Diagrams
+ in a (La)\TeX\ or Con\TeX t document. Its distinguishing features
+ are: the use of \PiCTeX\ a powerful graphical engine, and a simple
+ specification syntax. A commutative diagram is described in
+ terms of its objects and its arrows. The objects are
+ textual elements and the arrows can have various straight or curved
+ forms.
+
+ We describe the syntax and semantics of the user's commands, and
+ present many examples of their use.
+\end{abstract}
+
+\keywords{Commutative Diagrams, (La)\TeX, \PiCTeX}
+
+\section{Introduction}
+
+\initial{3}{C}{\scshape ommutative Diagrams} (Diagramas Comutativos,
+in Portuguese), are a kind of graphs which are widely used in Category
+Theory~\cite{Herrlich73,MacLane71,Pierce98}, not only as a concise and
+convenient notation but also for ``arrow chasing'', a powerful tool
+for mathematical thought. For example, the fact that in a Category we
+have arrow composition is easily expressed by the following
+commutative diagram.
+
+$$
+\begindc{\commdiag}[30]
+\obj(10,15){$A$}
+\obj(25,15){$B$}
+\obj(40,15){$C$}
+\mor(10,15)(25,15){$f$}
+\mor(25,15)(40,15){$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+\pup(25,3){$g\circ f$}
+\enddc
+$$
+
+The word commutative means that the result from going throught the
+path $f$ plus $g$ is equal to the result from going throught the path
+$g\circ f$. Most of the graphs used in Category Theory are digraphs which
+we can specify in terms of its objects, and its arrows.
+
+The (La)\TeX\ approach to typesetting can be characterized as
+``logical design''~\cite{Knuth86,Lamport94,Otten99}, but commutative
+diagrams are pieces of ``visual design'', and that, in our opinion is
+the {\em piece de resistance} of commutative diagrams package
+implementation in (La)\TeX. In a commutative diagrams package a user
+seeks the simplest notation, a logical notation, with the most
+powerful graphical engine possible, the visual part. The DCpic
+package, along with the package by John
+Reynolds~\cite{Feruglio94,Reynolds87}, has the simplest notation off
+all the commutative diagrams packages described in the Feruglio
+article~\cite{Feruglio94}. In terms of graphical capabilities the
+\PiCTeX~\cite{Wichura87} package provides us with the best
+\TeX-graphics engine, that is, without going to {\em Postscript}
+specials.
+
+The DCpic package depends only of \PiCTeX\ and \TeX,
+which means that you can use it in all formats that are based on these
+two. We have tested DCpic with \LaTeX, \TeX\ plain, pdf\LaTeX,
+pdf\TeX~\cite{Thanh99}, and Con\TeX t~\cite{Otten99}; we are confident
+that it can be used under many other formats.
+
+The present version (3.1) of DCpic package is available in CTAN and in
+the author's Web-page\footnote{http://www.mat.uc.pt/{\~{}}pedro/LaTeX/}.
+
+
+\section{Constructing Commutative Diagrams}
+
+DCpic depends on \PiCTeX, thus you must include an apropriate command
+to load \PiCTeX\ and DCpic in your document,
+e.g. ``{\tt $\backslash$usepackage\{dcpic,pictex\}}'', in a \LaTeX\ document.
+
+A commutative diagram in DCpic is a ``picture'' in \PiCTeX, in which
+we place our {\em objects} and {\em morphisms} (arrows). The user's
+commands in DCpic are: {\tt begindc} and {\tt enddc} which establishe
+the coordinate system where the objects will by placed; {\tt obj}, the
+command which defines the place and the contents of each object; {\tt
+mor}, and {\tt cmor}, the commands which define the morphisms, linear
+and curved arrows, and its labels.
+
+Now we will describe each of these commands in greater detail.
+
+\subsection{The Diagram Environment}
+
+The command {\tt begindc}, establishes a Cartesian coordinate system
+with 1pt units,
+
+\begin{alltt}
+ \(\backslash\)begindc[{\em<magnification factor>}] \dots \(\backslash\)enddc
+\end{alltt}
+such a small unit gives us a good control over the placement of the
+graphical objects, but in most of the diagrams not involving curved
+arrows such a ``fine grain'' is not desirable, so the optional
+argument specifies a magnifying factor $m\in\mathds{N}$, with a default
+value of 30. The advantage of this decision is twofold: we can define
+the ``grain'' of the diagram, and we can adjust the size of the
+diagram to the available space.
+\begin{itemize}
+\item a ``course grain'' diagram is specified almost as a table, with
+the numbers giving us the lines and the columns were the objects will
+be placed, the following diagram has the default magnification factor:
+
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\commdiag}[300]
+ \obj(1,1){$A$}
+ \obj(3,1){$B$}
+ \obj(3,3){$C$}
+ \mor(1,1)(3,1){$f$}[\atright,\solidarrow]
+ \mor(1,1)(3,3){$g$}
+ \mor(3,1)(3,3){$h$}[\atright,\solidarrow]
+ \enddc &\tt
+ \begin{tabular}[b]{l}
+ $\backslash$begindc\{$\backslash$commdiag\}\\
+ $\backslash$obj(1,1)\{\$A\$\}\\
+ $\backslash$obj(3,1)\{\$B\$\}\\
+ $\backslash$obj(3,3)\{\$C\$\}\\
+ $\backslash$mor(1,1)(3,1)\{\$f\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$mor(1,1)(3,3)\{\$g\$\}\\
+ $\backslash$mor(3,1)(3,3)\{\$h\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$enddc
+ \end{tabular}
+ \end{tabular}
+\end{center}
+\item a ``fine grain'' diagram is a bit harder to design but it gives
+us a better control over the objects placement, the following diagram
+has a magnification factor of three, this gives us the capability of
+drawing the arrows $f$ and $f^\prime$ very close together:
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\commdiag}[30]
+ \obj(10,10){$A$}
+ \obj(30,10){$B$}
+ \obj(30,30){$C$}
+ \mor(10,9)(30,9){$f$}[\atright,\solidarrow]
+ \mor(10,11)(30,11){$f^\prime$}
+ \mor(10,10)(30,30){$g$}
+ \mor(30,10)(30,30){$h$}[\atright,\solidarrow]
+ \enddc &\tt
+ \begin{tabular}[b]{l}
+ $\backslash$begindc\{$\backslash$commdiag\}[30]\\
+ $\backslash$obj(10,10)\{\$A\$\}\\
+ $\backslash$obj(30,10)\{\$B\$\}\\
+ $\backslash$obj(30,30)\{\$C\$\}\\
+ $\backslash$mor(10,9)(30,9)\{\$f\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$mor(10,11)(30,11)\{\$f{\^{}}$\backslash$prime\$\}\\
+ $\backslash$mor(10,10)(30,30)\{\$g\$\}\\
+ $\backslash$mor(30,10)(30,30)\{\$h\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$enddc
+ \end{tabular}
+ \end{tabular}
+\end{center}
+\item the magnification factor gives us the capability of adapting the
+ size of the diagram to the available space, without having to
+ redesign the diagram, for example the specification of the
+ next two diagrams differs only in the magnification factor: 30 for
+ the first; and 25 for the second.
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\commdiag}[300]
+ \obj(1,1){$A$}
+ \obj(3,1){$B$}
+ \obj(3,3){$C$}
+ \mor(1,1)(3,1){$f$}[\atright,\solidarrow]
+ \mor(1,1)(3,3){$g$}
+ \mor(3,1)(3,3){$h$}[\atright,\solidarrow]
+ \enddc &
+ \begindc{\commdiag}[250]
+ \obj(1,1){$A$}
+ \obj(3,1){$B$}
+ \obj(3,3){$C$}
+ \mor(1,1)(3,1){$f$}[\atright,\solidarrow]
+ \mor(1,1)(3,3){$g$}
+ \mor(3,1)(3,3){$h$}[\atright,\solidarrow]
+ \enddc
+ \end{tabular}
+\end{center}
+\end{itemize}
+
+Note that the magnification factor does not interfere with the size of
+the objects, but only with the size of the diagram as a whole.
+
+After establishing our ``drawing board'' we can begin placing our
+``objects'' on it, we have three commands to do so, the {\tt obj},
+{\tt mor}, and {\tt cmor}, for objects, morphisms, and ``curved''
+morphisms respectively.
+
+
+\subsection{Objects}
+
+Each object has a place and a content
+
+\begin{alltt}
+ \(\backslash\)obj({\em<x>},{\em<y>})\{{\em<contents>}\}
+\end{alltt}
+the $x$ and $y$, integer values, will be multiplied by the magnifying
+factor. The {\em contents} will be put in the centre of an ``hbox''
+expanding to both sides of $(m\times x,m\times y)$.
+
+
+\subsection{Linear Arrows}
+
+
+Each linear arrow will have as mandatory arguments two pairs of
+coordinates, the beginning and the ending points, and a label,
+
+{\small\begin{alltt}
+\(\backslash\)mor({\em<x1>},{\em<y1>})({\em<x2>},{\em<y2>})[{\em<d1>},{\em<d2>}]\{{\em<label>}\}[{\em<label placement>},{\em<arrow type>}]
+\end{alltt}}%
+\noindent the other arguments are opcional. The two pairs of coordinates should
+coincide with the coordinates of two objects in the diagram, but no
+verification of this fact is made. The line connecting the two points
+is constructed in the following way: the beginning is given by a point
+10pt away from the point $(m\times x_1,m\times y_1)$, likewise the end point is
+10 points away from $(m\times x_2,m\times y_2)$. If the ``arrow type'' specifies
+that, a tail, and a pointer (arrow) will be added. If the arrow is
+horizontal (vertical) the label is placed in a ``hbox'' with centre
+point, $(x_l,y_l)$, at a distance of 10 points plus a correction
+factor depending of the ``hbox'' width (height) from the middle point
+of the arrow. If the arrow is obliquos the point $(x_l,y_l)$, at a
+distance of 10 points from the middle point of the arrow, will be the
+bottom-right corner or the top-left corner of the ``hbox'' containing
+the label, depending of the angle of the arrow, and the label
+placement. In all cases the position of the
+``hbox'' is such that the contents of it will not interfere with the
+line.
+
+The distance from the point $(m\times x_1,m\times y_1)$ to the actual beginning of the
+arrow may be modified by the user with the specification of $d_1$, the
+same thing happens for the arrow actual ending in which case the
+user-value will be $d_2$. The specification of $d_1$ and $d_2$ is
+optional.
+
+The placement of the label, to the left (default value), or to the
+right, and the type of the arrow: a solid arrow (default value), a
+dashed arrow, a line, an injection arrow, or an application arrow, are
+the last optional arguments of this command.
+
+
+\subsection{Quadratic Arrows}
+
+The command that draws curved lines in DCpic uses the {\tt
+setquadratic} command of \PiCTeX, this will imply a quadratic
+curve specified by an odd-number of points,
+
+{\small\begin{alltt}
+ \(\backslash\)cmor({\em<list of points>}){\textvisiblespace}{\em<arrow direction>}({\em<x>},{\em<y>})\{{\em<label>}\}[{\em<arrow type>}]
+\end{alltt}}
+\noindent the space after the list of points is mandatory. After drawing the
+curved line we must put the tip of the arrow on it, at present it is
+only possible to choose from: up, down, left, or right pointing arrow,
+and we must explicitly specify what type we want. The next thing to
+draw it is the arrow label, the placement of that label is determined
+by the $x$, and $y$ values which give us the coordinates, after being
+magnified, of the centre of the ``hbox'' that will contain the label
+itself.
+
+The arrow type is an optional argument, its default value is a solid
+arrow, the other possible values are a dashed arrow and a line, in
+this last case the arrow tip is omitted. The arrow type values are a
+subset of those of the {\tt mor} command.
+
+A rectangular curve with rounded corners is easy to specify and should
+cater for most needs, with this in mind we give the following tip to
+the user: to specify a rectangular, with rounded corners, curve we
+choose the points which give us the {\em expanded chess-horse
+movement}, that is, $(x,y)$, $(x\pm4,y\mp1)$, $(x\mp1,y\pm4)$, or
+$(x,y)$,$(x\pm1,y\mp4)$, $(x\mp4,y\pm1)$, those sets of points will give us
+the four corners of the rectangle; to form the whole line it is only
+necessary to add an odd number of points joining the two (or more)
+corners.
+
+
+\section{Examples}
+
+We now present some examples that give an idea of the DCpic package
+capabilities. We will present here the diagrams, and in the appendix
+the code which produced such diagrams.
+
+\subsection{The Easy Ones}
+
+The diagrams presented in this section are very easy to specify in the
+DCpic syntax, just a couple of objects and the arrows joining them.
+
+\begin{description}
+\item[Push-out and Exponentials:]
+
+
+$$
+\begindc{\commdiag}[260]
+\obj(1,1){$Z$}
+\obj(1,3){$X$}
+\obj(3,1){$Y$}
+\obj(3,3){$P$}
+\obj(5,5){$P^\prime$}
+\mor(1,1)(1,3){$f$}
+\mor(1,1)(3,1){$g$}[\atright,\solidarrow]
+\mor(1,3)(3,3){$r$}[\atright,\solidarrow]
+\mor(3,1)(3,3){$s$}
+\mor(1,3)(5,5){$r^\prime$}
+\mor(3,1)(5,5){$s^\prime$}[\atright,\solidarrow]
+\mor(3,3)(5,5){$h$}[\atright,\dashArrow]
+\enddc
+\qquad
+\begindc{\commdiag}[350]
+\obj(1,3)[A]{$Z^Y\times Y$}
+\obj(3,3)[B]{$Z$}
+\obj(3,1)[C]{$X\times{}Y$}
+\obj(4,1)[D]{$X$}
+\obj(4,3)[E]{$Z^Y$}
+\mor{A}{B}{$ev$}
+\mor{C}{A}{$f\times{}\mathrm{id}$}
+\mor{C}{B}{$\overline{f}$}[\atright,\dashArrow]
+\mor{D}{E}{$f$}[\atright,\solidarrow]
+\enddc
+$$
+
+\item[Function Restriction and the {\em CafeOBJ\/}
+Cube~\cite{Diaconescu98}]
+
+%\footnotetext{R. Diaconescu and K. Futatsugi, The CafeOBJ Report,
+%World Scientific, 1998}
+
+$$
+\begindc{\commdiag}[280]
+\obj(1,1){$X$}
+\obj(1,3){$X^\prime$}
+\obj(4,1){$Y$}
+\obj(4,3){$Y^\prime$}
+\mor(1,1)(4,1){$f$}
+\mor(1,3)(1,1){}[\atright,\injectionarrow]
+\mor(4,3)(4,1){}[\atright,\injectionarrow]
+\mor(1,3)(4,3){$g=f|^{Y^\prime}_{X^\prime}$}
+\enddc
+\qquad
+\begindc{\commdiag}[170]
+\obj(1,1){MSA}
+\obj(5,1){RWL}
+\obj(3,3){OSA}
+\obj(7,3){OSRWL}
+\obj(1,4){HSA}
+\obj(5,4){HSRWL}
+\obj(3,6){HOSA}
+\obj(7,6){HOSRWL}
+\mor{MSA}{RWL}{}
+\mor{MSA}{HSA}{}
+\mor{MSA}{OSA}{}
+\mor{RWL}{HSRWL}{}
+\mor{RWL}{OSRWL}{}
+\mor{OSA}{HOSA}{}
+\mor{OSA}{OSRWL}{}
+\mor{OSRWL}{HOSRWL}{}
+\mor{HSA}{HSRWL}{}
+\mor{HSA}{HOSA}{}
+\mor{HOSA}{HOSRWL}{}
+\mor{HSRWL}{HOSRWL}{}
+\enddc
+$$
+\end{description}
+
+\subsection{The Not so Easy}
+
+The diagrams presented in this section are a bit harder to specify. We
+have curved arrows, and also double arrows. The construction of the
+former was already explained. The double arrow (and triple, and \dots)
+is made with two distinct arrows drawn close to each other in a
+diagram with a very ``fine grain'', that is, using a magnifying factor
+of just 2 or 3.
+
+All the diagrams were made completely within DCpic.
+
+\begin{description}
+\item[Equaliser, and a 3-Category:]
+
+$$
+\begindc{\commdiag}[20]
+\obj(1,1){$Z$}
+\obj(1,36){$\overline{ X}$}
+\obj(36,36){$X$}
+\obj(52,36){$Y$}
+\mor(1,1)(1,36){$\overline{ h}$}[\atleft,\dashArrow]
+\mor(1,1)(36,36){$h$}[\atright,\solidarrow]
+\mor(1,36)(36,36){$e$}
+\mor(36,37)(52,37)[80,80]{$f$}
+\mor(36,35)(52,35)[80,80]{$g$}[\atright,\solidarrow]
+\enddc
+\qquad
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$C$}
+\obj(26,35){$B$}
+\mor(14,11)(39,11){$h$}[\atright,\solidarrow]
+\mor(14,11)(26,35){$f$}
+\mor(26,35)(39,11){$g$}
+\cmor((11,10)(10,10)(9,10)(5,11)(4,15)(5,19)(9,20)(13,19)(14,15))
+ \pdown(1,20){$id_A$}
+\cmor((42,10)(43,10)(44,10)(48,11)(49,15)(48,19)(44,20)(40,19)(39,15))
+ \pdown(52,20){$id_C$}
+\cmor((26,39)(27,43)(31,44)(35,43)(36,39)(35,36)(31,35))
+ \pleft(40,40){$id_B$}
+\enddc
+$$
+
+
+\item[Isomorfisms:]
+
+$$
+\begindc{\commdiag}[30]
+\obj(10,15){$A$}
+\obj(40,15){$A$}
+\obj(25,15){$B$}
+\mor(10,15)(25,15){$f$}
+\mor(25,15)(40,15){$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\obj(55,15){$B$}
+\obj(85,15){$B$}
+\obj(70,15){$A$}
+\mor(55,15)(70,15){$g$}
+\mor(70,15)(85,15){$f$}
+\cmor((55,11)(56,7)(60,6)(70,6)(80,6)(84,7)(85,11)) \pup(70,3){$id_B$}
+\enddc
+$$
+
+
+\item[Godement's ``five'' rules~\cite{Herrlich73}:]
+%\footnotetext{H. Herrlich and G. Strecker, Category Theory, Allyn and
+%Bacon Inc, 1973}
+
+$$
+\begindc{\commdiag}[70]
+\obj(12,10)[A]{$\mathcal{A}$}
+\obj(19,10)[B]{$\mathcal{B}$}
+\obj(26,10)[C]{$\mathcal{C}$}
+\obj(34,10)[D]{$\mathcal{D}$}
+\obj(41,10)[E]{$\mathcal{E}$}
+\obj(48,10)[F]{$\mathcal{F}$}
+\mor(12,10)(19,10){$L$}
+\mor(19,10)(26,10){$K$}
+\mor(26,10)(34,10){$V\qquad\ $}
+\mor(26,12)(34,12){$U$}
+\mor(26,12)(34,12){$\downarrow\xi$}[\atright,\solidarrow]
+\mor(26,8)(34,8){$\downarrow\eta$}
+\mor(26,8)(34,8){$W$}[\atright,\solidarrow]
+\mor(34,11)(41,11){$F$}
+\mor(34,9)(41,9){$\downarrow\mu$}
+\mor(34,9)(41,9){$H$}[\atright,\solidarrow]
+\mor(41,10)(48,10){$G$}
+\enddc
+$$
+\end{description}
+
+\subsection{The others \dots}
+
+It was already stated that some kinds of arrows are not supported in
+DCpic, e.g., $\Rightarrow$, but we can put a \PiCTeX\ command inside a DCpic
+diagram, so we can produce a diagram like the one that we will show
+now. Its complete specification within DCpic is not possible, at least
+for the moment.
+
+\begin{description}
+\item[Lax coproduct~\cite{Abramsky92}]
+
+$$
+\begindc{\commdiag}[30]
+\obj(10,50){$A$}
+\obj(50,50){$A\oplus B$}
+\obj(90,50){$B$}
+\obj(50,10){$C$}
+\obj(50,37){$[\sigma,\tau]$}
+\mor(10,50)(50,10){$f$}[\atright,\solidarrow]
+\mor(10,50)(50,50)[100,160]{$inl$}
+\mor(90,50)(50,50)[100,160]{$inr$}[\atright,\solidarrow]
+\mor(90,50)(50,10){$g$}
+\cmor((480,460)(440,300)(480,140)) \pdown(40,40){}[\solidline]
+\cmor((520,460)(560,300)(520,140)) \pdown(60,42){$[f,g]$}[\solidline]
+\arrow <6pt> [.2,.4] from 143 44 to 144 42
+\arrow <6pt> [.2,.4] from 157 44 to 156 42
+\setlinear
+% primeira implica{\c c}{\~a}o (simples)
+\plot 160 100 141 91 /
+\plot 160 104 140 94 /
+\arrow <8pt> [.4,.8] from 137 91 to 135 90
+% segunda implica{\c c}{\~a}o (quebrada)
+\plot 123 66 168 90 /
+\plot 122 69 168 94 /
+\plot 168 90 203 90 /
+\plot 168 94 203 94 /
+\arrow <8pt> [.4,.8] from 207 92 to 208 92
+\arrow <8pt> [.4,.8] from 120 66 to 118 65
+\obj(39,27)[inlfg]{\small $inl_{f,g}$}
+\obj(63,34)[inrfg]{\small $inr_{f,g}$}
+% terceira implica{\c c}{\~a}o (quebrada)
+\plot 132 55 136 60 /
+\plot 132 59 136 64 /
+\plot 136 60 173 60 /
+\plot 136 64 173 64 /
+\arrow <8pt> [.4,.8] from 178 62 to 179 62
+\arrow <8pt> [.4,.8] from 130 55 to 129 54
+\obj(45,17){$\sigma$}
+\obj(50,18){$\tau$}
+\enddc
+$$
+%\footnotetext{Handbook of Logic in Computer Science, Volume 1, Clarendon
+%Press, Oxford, 1992, pg. 511}
+
+\end{description}
+
+\section{DCpic compared}
+
+If one took the Feruglio article~\cite{Feruglio94} about typesetting
+commutative diagrams in (La)\TeX\ we can say that:
+
+\begin{itemize}
+\item the graphical capabilities of DCpic are among the
+ best. Excluding packages which use Postscript specials the DCpic
+ package is the best among available packages.
+\item the specification syntax is one of the simplest, the package by
+ John Reynolds has a very similar syntax.
+\end{itemize}
+
+We did not try to take any measure of computational performance.
+
+The following diagram is one of the test-diagrams used by Feruglio, as
+we can see DCpic performs very well, drawing the complete diagram
+based on a very simple specification.
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+
+\centerline{
+\begindc{\commdiag}[350]
+\obj(1,1){$G$}
+\obj(3,1){$G_{r^*}$}
+\obj(5,1){$H$}
+\obj(2,2){$\Sigma^G$}
+\obj(6,2){$\Sigma^H$}
+\obj(1,3){$L_m$}
+\obj(3,3){$K_{r,m}$}
+\obj(5,3){$R_{m^*}$}
+\obj(1,5){$L$}
+\obj(3,5){$L_r$}
+\obj(5,5){$R$}
+\obj(2,6){$\Sigma^L$}
+\obj(6,6){$\Sigma^R$}
+\mor(1,1)(2,2){$\lambda^G$}
+\mor(3,1)(1,1){$i_5$}[\atleft,\aplicationarrow]
+\mor(3,1)(5,1){$r^*$}[\atright,\solidarrow]
+\mor(5,1)(6,2){$\lambda^H$}[\atright,\dashArrow]
+\mor(2,2)(6,2){$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor(1,3)(1,1){$m$}[\atright,\solidarrow]
+\mor(1,3)(1,5){$i_2$}[\atleft,\aplicationarrow]
+\mor(3,3)(1,3)[140,100]{$i_3\quad$}[\atright,\aplicationarrow]
+\mor(3,3)(5,3)[140,100]{$r$}
+\mor(3,3)(3,5){$i_4$}[\atright,\aplicationarrow]
+\mor(3,3)(3,1){$\stackrel{\displaystyle m}{\barraB}$}
+\mor(5,3)(5,5){$i_6$}[\atright,\aplicationarrow]
+\mor(5,3)(5,1){$\stackrel{\displaystyle m^*}{\barraA}$}
+\mor(1,5)(2,6){$\lambda^L$}
+\mor(3,5)(1,5){$i_1\quad$}[\atright,\aplicationarrow]
+\mor(3,5)(5,5){$r$}
+\mor(5,5)(6,6){$\lambda^R$}[\atright,\solidarrow]
+\mor(2,6)(2,2){$\varphi^m$}[\atright,\solidarrow]
+\mor(2,6)(6,6){$\varphi^r$}
+\mor(6,6)(6,2){$\varphi^{m^*}$}
+\enddc
+}
+
+
+\section{Conclusions}
+
+We think that DCpic performs well in the ``commutative diagrams
+arena'', it is easy to use, with its commands we can produce
+the most usual types of commutative diagrams, and if we accept the use
+of \PiCTeX\ commands, we are capable of producing any kind of
+diagram. It is also a (La)\TeX -only package, that is, the file
+produced by DCpic does not contain any Postscript special, neither
+any special font, which in terms of portability is an advantage.
+
+The author and his colleagues in the Mathematics Department of Coimbra
+University have been using the (now) old version (2.1) of DCpic for
+some time with much success, some of the missing capabilities of the
+older version were incorporated in the new version (3.1), and the
+missing capabilities of the new version will be taken care in future
+versions.
+
+%\bibliographystyle{plain}
+
+%\bibliography{pedro}
+
+\newcommand{\noopsort}[1]{} \newcommand{\singleletter}[1]{#1}
+\begin{thebibliography}{10}
+
+\bibitem{Abramsky92}
+S.~Abramsky, Dov Gabbay, and T.~Maibaum, editors.
+\newblock {\em Handbook of Logic in Computer Science}, volume~1 of {\em Oxford
+ Science Publications}.
+\newblock Claredon Press, Oxford, 1992.
+
+\bibitem{Diaconescu98}
+R{\~a}zvan Diaconescu and Kokichi Futatsugi.
+\newblock {\em CafeOBJ Report: The Language, Proof Techniques, and
+ Methodologies for Object-Oriented Algebraic Specification}, volume~6 of {\em
+ AMAST series in Computing}.
+\newblock World Scientific, 1998.
+
+\bibitem{Feruglio94}
+{Gabriel Valiente} Feruglio.
+\newblock Typesetting commutative diagrams.
+\newblock {\em TUGboat}, 15(4):466--484, 1994.
+
+\bibitem{Herrlich73}
+Horst Herrlich and George Strecker.
+\newblock {\em Category Theory}.
+\newblock Allyn and Bacon Inc., 1973.
+
+\bibitem{Knuth86}
+Donald~E. Knuth.
+\newblock {\em The TeXbook}.
+\newblock Addison-Wesley Publishing Company, Reading,Massachusetts, 1986.
+
+\bibitem{Lamport94}
+Leslie Lamport.
+\newblock {\em {\LaTeX}: A Document Preparation System}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 2nd
+ edition, 1994.
+
+\bibitem{MacLane71}
+S.~MacLane.
+\newblock {\em Categories for the Working Mathematician}.
+\newblock Springer-Verlag, New York, 1971.
+
+\bibitem{Otten99}
+Ton Otten and Hans Hagen.
+\newblock {\em Con\TeX t an excursion}.
+\newblock Pragma ADE, Hasselt, 1999.
+
+\bibitem{Pierce98}
+Benjamin Pierce.
+\newblock {\em Basic Category Theory for Computer Scientists}.
+\newblock Foundations of Computing. The MIT Press, London, England, 1998.
+
+\bibitem{Reynolds87}
+John Reynolds.
+\newblock {\em User's Manual for Diagram Macros}.
+\newblock http://www.cs.cmu.edu/{\~{}}jcr/, 1987.
+\newblock {\tt diagmac.doc}.
+
+\bibitem{Thanh99}
+{H\`{a}n Th{$\acute{\hat{\mathrm e}}$}} Th\`{a}nh, Sebastian Rahtz, and Hans
+ Hagen.
+\newblock {\em The pdfTeX manual}, 1999.
+
+\bibitem{Wichura87}
+Michael Wichura.
+\newblock {\em The {\PiCTeX} Manual}.
+\newblock M. Pfeffer \& Co., New York, 1987.
+
+\end{thebibliography}
+
+\section{Appendix: The DCpic Specifications}
+
+\begin{description}
+
+\item[Push-out:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+ \begindc{\commdiag}[260]
+ \obj(1,1){$Z$}
+ \obj(1,3){$X$}
+ \obj(3,1){$Y$}
+ \obj(3,3){$P$}
+ \obj(5,5){$P^\prime$}
+ \mor(1,1)(1,3){$f$}
+ \mor(1,1)(3,1){$g$}[\atright,\solidarrow]
+ \mor(1,3)(3,3){$r$}[\atright,\solidarrow]
+ \mor(3,1)(3,3){$s$}
+ \mor(1,3)(5,5){$r^\prime$}
+ \mor(3,1)(5,5){$s^\prime$}[\atright,\solidarrow]
+ \mor(3,3)(5,5){$h$}[\atright,\dashArrow]
+ \enddc
+\end{verbatim}
+}
+
+
+\item[Exponentials:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[300]
+\obj(1,3){$Z^Y\times Y$}
+\obj(3,3){$Z$}
+\obj(3,1){$X\times{}Y$}
+\obj(4,1){$X$}
+\obj(4,3){$Z^Y$}
+\mor(1,3)(3,3)[20,10]{$ev$}
+\mor(3,1)(1,3){$f\times{}\mathrm{id}$}
+\mor(3,1)(3,3){$\overline{f}$}[\atright,\dashArrow]
+\mor(4,1)(4,3){$f$}[\atright,\solidarrow]
+\enddc
+\end{verbatim}
+}
+
+\item[Function Restriction:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[280]
+\obj(1,1){$X$}
+\obj(1,3){$X^\prime$}
+\obj(3,1){$Y$}
+\obj(3,3){$Y^\prime$}
+\mor(1,1)(3,1){$f$}
+\mor(1,3)(1,1){}[\atright,\injectionarrow]
+\mor(3,3)(3,1){}[\atright,\injectionarrow]
+\mor(1,3)(3,3){$g=f|^{Y^\prime}_{X^\prime}$}
+\enddc
+\end{verbatim}
+}
+
+\item[{\em CafeOBJ\/} Cube:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[170]
+\obj(1,1){MSA}
+\obj(5,1){RWL}
+\obj(3,3){OSA}
+\obj(7,3){OSRWL}
+\obj(1,4){HSA}
+\obj(5,4){HSRWL}
+\obj(3,6){HOSA}
+\obj(7,6){HOSRWL}
+\mor(1,1)(5,1)[15,15]{}
+\mor(1,1)(1,4){}
+\mor(1,1)(3,3){}
+\mor(5,1)(5,4){}
+\mor(5,1)(7,3){}
+\mor(3,3)(3,6){}
+\mor(3,3)(7,3)[15,22]{}
+\mor(7,3)(7,6){}
+\mor(1,4)(5,4)[15,22]{}
+\mor(1,4)(3,6){}
+\mor(3,6)(7,6)[17,26]{}
+\mor(5,4)(7,6){}
+\enddc
+\end{verbatim}
+}
+
+
+\item[Equaliser:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[20]
+\obj(1,1){$Z$}
+\obj(1,36){$\overline{ X}$}
+\obj(36,36){$X$}
+\obj(52,36){$Y$}
+\mor(1,1)(1,36){$\overline{ h}$}[\atleft,\dashArrow]
+\mor(1,1)(36,36){$h$}[\atright,\solidarrow]
+\mor(1,36)(36,36){$e$}
+\mor(36,37)(52,37)[8,8]{$f$}
+\mor(36,35)(52,35)[8,8]{$g$}[\atright,\solidarrow]
+\enddc
+\end{verbatim}
+}
+
+
+\item[A 3-Category:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$C$}
+\obj(26,35){$B$}
+\mor(14,11)(39,11){$h$}[\atright,\solidarrow]
+\mor(14,11)(26,35){$f$}
+\mor(26,35)(39,11){$g$}
+\cmor((11,10)(10,10)(9,10)(5,11)(4,15)(5,19)(9,20)(13,19)(14,15))
+ \pdown(1,20){$id_A$}
+\cmor((42,10)(43,10)(44,10)(48,11)(49,15)(48,19)(44,20)(40,19)(39,15))
+ \pdown(52,20){$id_C$}
+\cmor((26,39)(27,43)(31,44)(35,43)(36,39)(35,36)(31,35)) \pleft(40,40){$id_B$}
+\enddc
+\end{verbatim}
+}
+
+\item[Isomorfisms:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[30]
+\obj(10,15){$A$}
+\obj(40,15){$A$}
+\obj(25,15){$B$}
+\mor(10,15)(25,15){$f$}
+\mor(25,15)(40,15){$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\obj(55,15){$B$}
+\obj(85,15){$B$}
+\obj(70,15){$A$}
+\mor(55,15)(70,15){$g$}
+\mor(70,15)(85,15){$f$}
+\cmor((55,11)(56,7)(60,6)(70,6)(80,6)(84,7)(85,11)) \pup(70,3){$id_B$}
+\enddc
+\end{verbatim}
+}
+
+
+
+\item[Godement's ``five'' rules:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[70]
+\obj(12,10){$\mathcal{A}$}
+\obj(19,10){$\mathcal{B}$}
+\obj(26,10){$\mathcal{C}$}
+\obj(34,10){$\mathcal{D}$}
+\obj(41,10){$\mathcal{E}$}
+\obj(48,10){$\mathcal{F}$}
+\mor(12,10)(19,10){$L$}
+\mor(19,10)(26,10){$K$}
+\mor(26,10)(34,10){$V\qquad\ $}
+\mor(26,12)(34,12){$U$}
+\mor(26,12)(34,12){$\downarrow\xi$}[\atright,\solidarrow]
+\mor(26,8)(34,8){$\downarrow\eta$}
+\mor(26,8)(34,8){$W$}[\atright,\solidarrow]
+\mor(34,11)(41,11){$F$}
+\mor(34,9)(41,9){$\downarrow\mu$}
+\mor(34,9)(41,9){$H$}[\atright,\solidarrow]
+\mor(41,10)(48,10){$G$}
+\enddc
+\end{verbatim}
+}
+
+\item[Lax coproduct:] Guess how.
+
+\item[DCpic and the others:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+
+\begindc{\commdiag}[350]
+\obj(1,1){$G$}
+\obj(3,1){$G_{r^*}$}
+\obj(5,1){$H$}
+\obj(2,2){$\Sigma^G$}
+\obj(6,2){$\Sigma^H$}
+\obj(1,3){$L_m$}
+\obj(3,3){$K_{r,m}$}
+\obj(5,3){$R_{m^*}$}
+\obj(1,5){$L$}
+\obj(3,5){$L_r$}
+\obj(5,5){$R$}
+\obj(2,6){$\Sigma^L$}
+\obj(6,6){$\Sigma^R$}
+\mor(1,1)(2,2){$\lambda^G$}
+\mor(3,1)(1,1){$i_5$}[\atleft,\aplicationarrow]
+\mor(3,1)(5,1){$r^*$}[\atright,\solidarrow]
+\mor(5,1)(6,2){$\lambda^H$}[\atright,\dashArrow]
+\mor(2,2)(6,2){$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor(1,3)(1,1){$m$}[\atright,\solidarrow]
+\mor(1,3)(1,5){$i_2$}[\atleft,\aplicationarrow]
+\mor(3,3)(1,3)[140,100]{$i_3\quad$}[\atright,\aplicationarrow]
+\mor(3,3)(5,3)[140,100]{$r$}
+\mor(3,3)(3,5){$i_4$}[\atright,\aplicationarrow]
+\mor(3,3)(3,1){$\stackrel{\displaystyle m}{\barraB}$}
+\mor(5,3)(5,5){$i_6$}[\atright,\aplicationarrow]
+\mor(5,3)(5,1){$\stackrel{\displaystyle m^*}{\barraA}$}
+\mor(1,5)(2,6){$\lambda^L$}
+\mor(3,5)(1,5){$i_1\quad$}[\atright,\aplicationarrow]
+\mor(3,5)(5,5){$r$}
+\mor(5,5)(6,6){$\lambda^R$}[\atright,\solidarrow]
+\mor(2,6)(2,2){$\varphi^m$}[\atright,\solidarrow]
+\mor(2,6)(6,6){$\varphi^r$}
+\mor(6,6)(6,2){$\varphi^{m^*}$}
+\enddc
+\end{verbatim}
+}
+
+\end{description}
+
+
+\end{document}
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/dcpic/examples.pdf b/macros/generic/diagrams/dcpic/examples.pdf
new file mode 100644
index 0000000000..48b8781577
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/examples.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/examples.tex b/macros/generic/diagrams/dcpic/examples.tex
new file mode 100644
index 0000000000..cf74991a03
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/examples.tex
@@ -0,0 +1,776 @@
+\documentclass[12pt,a4paper]{article}
+\usepackage{pictexwd,dcpic}
+\usepackage{listings}
+\usepackage{a4wide}
+\usepackage{svn-multi}
+
+\svnidlong
+{$HeadURL: svn+ssh://gentzen.mat.uc.pt/var/lib/svn/DCPiC/CTAN5.0/examples.tex $}
+{$LastChangedDate: 2013-05-01 19:49:49 +0100 (Qua, 01 Mai 2013) $}
+{$LastChangedRevision: 15 $}
+{$LastChangedBy: pedro $}
+
+\svnid{$Id: manDCPiC.tex 11 2013-04-20 23:01:43Z pedro $}
+
+\voffset=-2cm
+%\hoffset=-1cm
+%\addtolength{\textwidth}{2cm}
+\addtolength{\textheight}{4cm}
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+
+\newcommand{\docver}{\svnyear/\svnmonth/\svnday\ (v\svnrev)}
+
+
+\begin{document}
+
+
+% definição da linguagem de programação
+\lstset{language=TeX,
+ frame = single,
+ morekeywords={begindc,enddc,cmor,pup,commdiag,undigraph,digraph,cdigraph,cundigraph,obj,mor,pleft,pup,pdown,pright,north,northeast,east,southeast,south,southwest,west,northwest,atright,atleft,solidarrow,dashArrow,dotArrow,solidline,dashline,dotline,injectionarrow,aplicationarrow,surjectivearrow,equalline,doublearrow,doubleopposite,nullarrow},
+ basicstyle=\tiny}
+
+\begin{center}
+ \huge\bf DCpic - Examples - \docver
+\end{center}
+
+\section{Commutative Diagrams}
+
+\subsection{Curved Arrows}
+
+A rectangular curve with rounded corners is easy to specify and should
+cater for most needs. With this in mind we give the following tip to
+the user: to specify a rectangular, with rounded corners, curve we
+choose the points which give us the {\em expanded chess-horse
+ movement}, that is, $(x,y)$, $(x\pm4,y\mp1)$, $(x\mp1,y\pm4)$, or
+$(x,y)$,$(x\pm1,y\mp4)$, $(x\mp4,y\pm1)$, those sets of points will give us
+the four corners of the rectangle; to form the whole line it is only
+necessary to add an odd number of points joining the two (or more)
+corners.
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\cmor((10,20)(6,21)(5,25)) \pup(5,15){$x$}
+\enddc
+\end{lstlisting}
+
+{\ }
+
+$$
+\begindc{\commdiag}
+\cmor((10,20)(6,21)(5,25)) \pup(5,15){$x$}
+\enddc
+$$
+
+
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(10,15){$A$}
+\obj(40,15)[Al]{$A$}
+\obj(25,15){$B$}
+\mor{$A$}{$B$}{$f$} \mor{$B$}{Al}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}
+\obj(10,15){$A$}
+\obj(40,15)[Al]{$A$}
+\obj(25,15){$B$}
+\mor{$A$}{$B$}{$f$}
+\mor{$B$}{Al}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\enddc
+$$
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$} \mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15)) \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12)) \pleft(54,3){$id_B$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}
+\mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15)) \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12)) \pleft(54,3){$id_B$}
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(10,18){$A$}
+\obj(40,18){$B$}
+\cmor((10,20)(15,25)(20,20)(25,15)(30,20)(35,25)(40,20))
+\pdown(25,12){$f$}[2]
+\cmor((10,15)(15,10)(20,15)(25,20)(30,15)(35,10)(40,15))
+\pup(25,22){$g$}[2]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}
+\obj(10,18){$A$}
+\obj(40,18){$B$}
+\cmor((10,20)(15,25)(20,20)(25,15)(30,20)(35,25)(40,20))
+\pdown(25,12){$f$}[2]
+\cmor((10,15)(15,10)(20,15)(25,20)(30,15)(35,10)(40,15))
+\pup(25,22){$g$}[2]
+\enddc
+$$
+
+
+\vfill
+\pagebreak
+
+
+\subsection{Size Adjusting}
+
+In version 4 (v4.0) two new features are introduced, relative
+specification {\tt $\backslash$mor\{objA\}\{objB\}} instead of {\tt
+ $\backslash$mor(1,3)(4,5)}, and the arrows now automatically adjust
+their size to the object's box size.
+
+
+
+\begin{lstlisting}[basicstyle=\tiny]
+\begindc{\commdiag}[300]
+\obj(1,3)[objSum]{$\displaystyle\sum_{k=2}^n\left\lfloor\frac{\phi(k)}{k-1}\right\rfloor}$}
+\obj(4,5)[objB]{$B$}
+\obj(4,3)[objA]{$A$}
+\obj(4,1)[objBp]{$B$}
+\mor{objSum}{objB}{$f$}
+\mor{objB}{objA}{$g$}
+\mor{objSum}{objA}{$f\circ g$}[\atright,\solidarrow]
+\mor{objSum}{objBp}{$f$}[\atright,\solidarrow]
+\mor{objA}{objBp}{$g$}[\atright,\solidarrow]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[300]
+\obj(1,3)[objSum]{$\displaystyle \sum_{k=2}^n \left\lfloor\frac{\phi(k)}{k-1}\right\rfloor$}
+\obj(4,5)[objB]{$B$}
+\obj(4,3)[objA]{$A$}
+\obj(4,1)[objBp]{$B$}
+\mor{objSum}{objB}{$f$}
+\mor{objB}{objA}{$g$}
+\mor{objSum}{objA}{$f\circ g$}[\atright,\solidarrow]
+\mor{objSum}{objBp}{$f$}[\atright,\solidarrow]
+\mor{objA}{objBp}{$g$}[\atright,\solidarrow]
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}\obj(15,10)[Aa]{$XXXX$}\obj(14,11)[Ab]{$XXXX$}
+\obj(13,12)[Ac]{$XXXX$}\obj(12,13)[Ad]{$XXXX$}\obj(11,14)[Ae]{$XXXX$}
+\obj(10,15)[Af]{$XXXX$}\obj(9,14)[Ag]{$BBBB$}\obj(8,13)[Ah]{$XXXX$}
+\obj(7,12)[Ai]{$XXXX$}\obj(6,11)[Aj]{$XXXX$}\obj(5,10)[Ak]{$XXXX$}
+\obj(6,9)[Al]{$XXXX$}\obj(7,8)[Am]{$XXXX$}\obj(8,7)[An]{$BBBB$}
+\obj(9,6)[Ao]{$CCCC$}\obj(10,5)[Ap]{$DDDD$}\obj(11,6)[Aq]{$EEEE$}
+\obj(12,7)[Ar]{$EEEE$}\obj(13,8)[As]{$EEEE$}\obj(14,9)[At]{$EEEE$}
+\mor{A}{Aa}{$a1$}\mor{A}{Ab}{$a2$}\mor{A}{Ac}{$a3$}\mor{A}{Ad}{$a4$}
+\mor{A}{Ae}{$a5$}\mor{A}{Af}{$a6$}\mor{A}{Ag}{$a7$}\mor{A}{Ah}{$a8$}
+\mor{A}{Ai}{$a9$}\mor{A}{Aj}{$a10$}\mor{A}{Ak}{$a11$}\mor{A}{Al}{$a12$}
+\mor{A}{Am}{$a13$}\mor{A}{An}{$a14$}\mor{A}{Ao}{$a15$}\mor{A}{Ap}{$a16$}
+\mor{A}{Aq}{$a17$}\mor{A}{Ar}{$a18$}\mor{A}{As}{$a19$}\mor{A}{At}{$a20$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}\obj(15,10)[Aa]{$XXXX$}\obj(14,11)[Ab]{$XXXX$}
+\obj(13,12)[Ac]{$XXXX$}\obj(12,13)[Ad]{$XXXX$}\obj(11,14)[Ae]{$XXXX$}
+\obj(10,15)[Af]{$XXXX$}\obj(9,14)[Ag]{$BBBB$}\obj(8,13)[Ah]{$XXXX$}
+\obj(7,12)[Ai]{$XXXX$}\obj(6,11)[Aj]{$XXXX$}\obj(5,10)[Ak]{$XXXX$}
+\obj(6,9)[Al]{$XXXX$}\obj(7,8)[Am]{$XXXX$}\obj(8,7)[An]{$BBBB$}
+\obj(9,6)[Ao]{$CCCC$}\obj(10,5)[Ap]{$DDDD$}\obj(11,6)[Aq]{$EEEE$}
+\obj(12,7)[Ar]{$EEEE$}\obj(13,8)[As]{$EEEE$}\obj(14,9)[At]{$EEEE$}
+\mor{A}{Aa}{$a1$}\mor{A}{Ab}{$a2$}\mor{A}{Ac}{$a3$}\mor{A}{Ad}{$a4$}
+\mor{A}{Ae}{$a5$}\mor{A}{Af}{$a6$}\mor{A}{Ag}{$a7$}\mor{A}{Ah}{$a8$}
+\mor{A}{Ai}{$a9$}\mor{A}{Aj}{$a10$}\mor{A}{Ak}{$a11$}\mor{A}{Al}{$a12$}
+\mor{A}{Am}{$a13$}\mor{A}{An}{$a14$}\mor{A}{Ao}{$a15$}\mor{A}{Ap}{$a16$}
+\mor{A}{Aq}{$a17$}\mor{A}{Ar}{$a18$}\mor{A}{As}{$a19$}\mor{A}{At}{$a20$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+
+\subsection{A Complex Diagram} {\ }
+
+\begin{lstlisting}
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\solidarrow] %dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+\begin{lstlisting}[basicstyle=\tiny]
+\begindc{\commdiag}[40]
+\obj(10,10){$G$}[Gr]
+\obj(30,10){$G_{r^*}$}[Grstar]
+\obj(50,10){$H$}[H]
+\obj(20,20){$\Sigma^G$}[SigmaG]
+\obj(60,20){$\Sigma^H$}[SigmaH]
+\obj(10,30){$L_m$}[Lm]
+\obj(30,30){$K_{r,m}$}[Krm]
+\obj(50,30){$R_{m^*}$}[Rmstar]
+\obj(10,50){$L$}[L]
+\obj(30,50){$L_r$}[Lr]
+\obj(50,50){$R$}[R]
+\obj(20,60){$\Sigma^L$}[SigmaL]
+\obj(60,60){$\Sigma^R$}[SigmaR]
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(40,2)(65,2)(69,3)(70,7)(70,10)(70,14)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,58)(10,63)(11,67)(15,68)(45,68)(65,68)(69,67)(70,63)(70,44)(70,25)(69,21)(65,20))
+\pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+\end{lstlisting}
+
+{\ }
+
+$$
+\begindc{\commdiag}[40]
+\obj(10,10)[Gr]{$G$}
+\obj(30,10)[Grstar]{$G_{r^*}$}
+\obj(50,10)[H]{$H$}
+\obj(20,20)[SigmaG]{$\Sigma^G$}
+\obj(60,20)[SigmaH]{$\Sigma^H$}
+\obj(10,30)[Lm]{$L_m$}
+\obj(30,30)[Krm]{$K_{r,m}$}
+\obj(50,30)[Rmstar]{$R_{m^*}$}
+\obj(10,50)[L]{$L$}
+\obj(30,50)[Lr]{$L_r$}
+\obj(50,50)[R]{$R$}
+\obj(20,60)[SigmaL]{$\Sigma^L$}
+\obj(60,60)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(40,2)(65,2)(69,3)(70,7)(70,10)(70,14)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,58)(10,63)(11,67)(15,68)(45,68)(65,68)(69,67)(70,63)(70,44)(70,25)(69,21)(65,20)) \pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+\begin{lstlisting}[basicstyle=\tiny]
+\begindc{\commdiag}[40]
+\obj(10,10)[Gr]{$G$}
+\obj(30,10)[Grstar]{$G_{r^*}$}
+\obj(50,10)[H]{$H$}
+\obj(20,20)[SigmaG]{$\Sigma^G$}
+\obj(60,20)[SigmaH]{$\Sigma^H$}
+\obj(10,30)[Lm]{$L_m$}
+\obj(30,30)[Krm]{$K_{r,m}$}
+\obj(50,30)[Rmstar]{$R_{m^*}$}
+\obj(10,50)[L]{$L$}
+\obj(30,50)[Lr]{$L_r$}
+\obj(50,50)[R]{$R$}
+\obj(20,60)[SigmaL]{$\Sigma^L$}
+\obj(60,60)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(33,2)(53,2)(56,3)(61,8)(66,13)(69,16)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,54)(10,55)(11,59)(15,64)(19,67)(23,68)(44,68)(65,68)(69,67)%
+(70,63)(70,44)(70,25)(69,21)(65,20))
+\pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+\end{lstlisting}
+
+{\ }
+
+$$
+\begindc{\commdiag}[40]
+\obj(10,10)[Gr]{$G$}
+\obj(30,10)[Grstar]{$G_{r^*}$}
+\obj(50,10)[H]{$H$}
+\obj(20,20)[SigmaG]{$\Sigma^G$}
+\obj(60,20)[SigmaH]{$\Sigma^H$}
+\obj(10,30)[Lm]{$L_m$}
+\obj(30,30)[Krm]{$K_{r,m}$}
+\obj(50,30)[Rmstar]{$R_{m^*}$}
+\obj(10,50)[L]{$L$}
+\obj(30,50)[Lr]{$L_r$}
+\obj(50,50)[R]{$R$}
+\obj(20,60)[SigmaL]{$\Sigma^L$}
+\obj(60,60)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(33,2)(53,2)(56,3)(61,8)(66,13)(69,16)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,54)(10,55)(11,59)(15,64)(19,67)(23,68)(44,68)(65,68)(69,67)(70,63)(70,44)(70,25)(69,21)(65,20))
+\pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+\section{Graphs}
+
+\subsection{Undirected Graphs --- Magnification Factor,}
+
+The magnification factor gives us the capability of adapting the size
+of the graph to the available space, without having to redesign the
+graph, for example the specification of the next two graphs differs
+only in the magnification factor: 200 for the first; and 160 for the
+second.
+
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\undigraph}[200]
+ \obj(1,1)[1]{}
+ \obj(3,2)[2]{}
+ \obj(5,1)[3]{}
+ \obj(3,4)[4]{}
+ \mor{1}{2}{}
+ \mor{1}{3}{}
+ \mor{2}{3}{}
+ \mor{4}{1}{}
+ \mor{4}{3}{}
+ \mor{2}{4}{}
+ \enddc &\qquad
+ \begindc{\undigraph}[160]
+ \obj(1,1)[1]{}
+ \obj(3,2)[2]{}
+ \obj(5,1)[3]{}
+ \obj(3,4)[4]{}
+ \mor{1}{2}{}
+ \mor{1}{3}{}
+ \mor{2}{3}{}
+ \mor{4}{1}{}
+ \mor{4}{3}{}
+ \mor{2}{4}{}
+ \enddc
+ \end{tabular}
+\end{center}
+
+\begin{lstlisting}
+ \begindc{\undigraph}[200] \begindc{\undigraph}[160]
+ \obj(1,1)[1]{} \obj(1,1)[1]{}
+ \obj(3,2)[2]{} \obj(3,2)[2]{}
+ \obj(5,1)[3]{} \obj(5,1)[3]{}
+ \obj(3,4)[4]{} \obj(3,4)[4]{}
+ \mor{1}{2}{} \mor{1}{2}{}
+ \mor{1}{3}{} \mor{1}{3}{}
+ \mor{2}{3}{} \mor{2}{3}{}
+ \mor{4}{1}{} \mor{4}{1}{}
+ \mor{4}{3}{} \mor{4}{3}{}
+ \mor{2}{4}{} \mor{2}{4}{}
+ \enddc \enddc
+\end{lstlisting}
+
+\subsection{Undirected Graphs --- ``Around the World''}
+
+$$
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8} \obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}
+\mor{18}{11}{}
+\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}
+\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+\begin{lstlisting}
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19} \obj(6,15){9} \obj(9,16){8} \obj(11,14){7}
+\obj(13,14){3} \obj(15,16){2} \obj(18,15){15} \obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+\vfill
+\pagebreak
+
+
+\subsection{Directed Graphs}
+
+$$
+\begindc{\digraph}[250]
+\obj(1,5){A}[\west]
+\obj(1,3){B}[\west]
+\obj(1,1){C}[\west]
+\obj(5,5){E}[\east]
+\obj(5,3){F}[\east]
+\obj(5,1){G}[\east]
+\mor{A}{E}{5}
+\mor{A}{F}{3}
+\mor{B}{F}{6}[\atright,\solidarrow]
+\mor{C}{E}{1}
+\mor{C}{F}{5}
+\mor{C}{G}{7}
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\digraph}[250]
+\obj(1,5){A}[\west]
+\obj(1,3){B}[\west]
+\obj(1,1){C}[\west]
+\obj(5,5){E}[\east]
+\obj(5,3){F}[\east]
+\obj(5,1){G}[\east]
+\mor{A}{E}{5} \mor{A}{F}{3}
+\mor{B}{F}{6}[\atright,\solidarrow]
+\mor{C}{E}{1} \mor{C}{F}{5} \mor{C}{G}{7}
+\enddc
+\end{lstlisting}
+
+\subsection{Circled Directed Graphs}
+
+$$
+\begindc{\cdigraph}[200]
+\obj(6,6)[A]{1800000}
+\obj(12,6){17}
+\obj(10,9){16}
+\mor{A}{17}[240,90]{}
+\mor{16}{17}[90,90]{}
+\mor{16}{A}[95,125]{}
+\enddc
+$$
+
+\begin{lstlisting}
+\begindc{\cdigraph}[200]
+\obj(6,6)[A]{1800000}
+\obj(12,6){17}
+\obj(10,9){16}
+\mor{A}{17}[240,90]{}
+\mor{16}{17}[90,90]{}
+\mor{16}{A}[95,125]{}
+\enddc
+\end{lstlisting}
+
+\subsection{Circled Undirected Graphs}
+
+Some fine adjustment is nedeeded in some lines.
+
+$$
+\begindc{\cundigraph}[130]
+\obj(6,4)[A]{18}[\south]\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]\obj(8,11){10}[\west]
+\obj(10,12)[6]{6}[\south]\obj(12,10)[5]{5}[\east]
+\obj(14,12){4}[\northeast]\obj(16,11){14}[\east]
+\obj(2,16){19}[\west]\obj(6,15){9}
+\obj(9,16){8}\obj(11,14){7}[\west]
+\obj(13,14){3}\obj(15,16){2}
+\obj(18,15){15}\obj(22,16){16}[\east]
+\obj(12,19){1}[\west]\obj(12,22){20}[\north]
+\mor{A}{17}[80,80]{}\mor{A}{11}{}\mor{A}{19}{}\mor{11}{12}{}
+\mor{11}{10}{}\mor{12}{13}{}\mor{12}{5}{}\mor{10}{6}{}
+\mor{10}{9}{}\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}[80,80]{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}\mor{6}{7}{}
+\mor{4}{3}{}\mor{4}{14}{}\mor{19}{20}{}\mor{8}{1}{}
+\mor{8}{7}{}\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}\mor{16}{20}{}
+\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\cundigraph}[130]
+\obj(6,4)[A]{18}[\south]\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]\obj(8,11){10}[\west]
+\obj(10,12)[6]{6}[\south]\obj(12,10)[5]{5}[\east]
+\obj(14,12){4}[\northeast]\obj(16,11){14}[\east]
+\obj(2,16){19}[\west]\obj(6,15){9}
+\obj(9,16){8}\obj(11,14){7}[\west]
+\obj(13,14){3}\obj(15,16){2}
+\obj(18,15){15}\obj(22,16){16}[\east]
+\obj(12,19){1}[\west]\obj(12,22){20}[\north]
+\mor{A}{17}[80,80]{}\mor{A}{11}{}\mor{A}{19}{}\mor{11}{12}{}
+\mor{11}{10}{}\mor{12}{13}{}\mor{12}{5}{}\mor{10}{6}{}
+\mor{10}{9}{}\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}[80,80]{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}\mor{6}{7}{}
+\mor{4}{3}{}\mor{4}{14}{}\mor{19}{20}{}\mor{8}{1}{}
+\mor{8}{7}{}\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}\mor{16}{20}{}
+\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+\section{New Arrows and Lines in v4 and v5}
+
+\subsection{Dashed, Dotted Lines, Dotted Arrows, Equaline, \ldots}
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+\end{lstlisting}
+
+
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/dcpic/manDCPiC.pdf b/macros/generic/diagrams/dcpic/manDCPiC.pdf
new file mode 100644
index 0000000000..92d8cbdf8f
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiC.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/manDCPiC.tex b/macros/generic/diagrams/dcpic/manDCPiC.tex
new file mode 100644
index 0000000000..d621bf8ce9
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiC.tex
@@ -0,0 +1,723 @@
+% $Id: manDCPiC.tex 12 2013-04-21 15:22:57Z pedro $
+\documentclass[11pt]{article}
+\usepackage{dcpic,pictex}
+\usepackage{verbatim}
+\usepackage{url}
+\usepackage{svn-multi}
+\usepackage{listings}
+\usepackage{a4wide}
+
+\svnidlong
+{$HeadURL: svn+ssh://gentzen.mat.uc.pt/var/lib/svn/DCPiC/CTAN5.0/manDCPiC.tex $}
+{$LastChangedDate: 2013-05-01 19:49:49 +0100 (Qua, 01 Mai 2013) $}
+{$LastChangedRevision: 15 $}
+{$LastChangedBy: pedro $}
+
+\svnid{$Id: manDCPiC.tex 12 2013-04-21 15:22:57Z pedro $}
+
+\newcommand{\docversion}{\svnyear/\svnmonth/\svnday\ (v\svnrev)}
+
+\def\dcpicversion{v5.0.0}
+
+\lstset{language=TeX,
+ frame = single,
+ morekeywords={begindc,enddc,cmor,pup,commdiag,undigraph,digraph,cdigraph,cundigraph,obj,mor,pleft,pup,pdown,pright,north,northeast,east,southeast,south,southwest,west,northwest,atright,atleft,solidarrow,dashArrow,dotArrow,solidline,dashline,dotline,injectionarrow,aplicationarrow,surjectivearrow,equalline,doublearrow,doubleopposite,nullarrow},
+ basicstyle=\scriptsize}
+
+
+\begin{document}
+
+\title{DCpic \dcpicversion\\
+\docversion}
+\author{Pedro Quaresma\\ CISUC/Mathematics Department,
+ University of Coimbra\\ 3001-454 COIMBRA, PORTUGAL\\ {\tt
+ pedro@mat.uc.pt}\quad phone: +351-239~791~170\quad fax:
+ +351-239~832~568}
+\date{2013/05/01}
+
+% Esta defini\c c\~ao \'e \'util para a convers\~ao LaTeX2HTML
+%\def\PiCTeX{PiC\TeX}
+
+\maketitle
+
+\vfill
+\begin{quotation}
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Pedro Quaresma (pedro@mat.uc.pt).
+
+This work consists of the files dcpic.sty, examples.tex,
+manDCPiC.tex, manDCPiCpt.tex
+\end{quotation}
+
+\vspace*{2cm}
+\noindent Coimbra, 2013/05/01\\
+Pedro Quaresma
+
+\pagebreak
+\section{History}
+
+
+\begin{description}
+\item[11/1990 - Version 1.0]
+\item[10/1991 - Version 1.1]
+\item[9/1993 - Version 1.2:] the distance from the arrow end
+ points and the objects became a fixed number (10units), the distance
+ arguments became optional. A new option for the arrows was introduced.
+\item[3/1995 - Version 1.3:] the distance from the arrow to its
+ label became fixed in 10units. A new option for the arrows was introduced.
+\item[7/1996 - Version 2.1:] a new syntax for the ``{\tt mor}''
+ command was introduced.
+\item[5/2001 - Version 3.0:] implementation of the command {\tt cmor}
+ for curved arrows.
+\item[11/2001 - Version{\~a}o 3.1:] the arrow's tips became more \TeX-like.
+\item[1/2002 - Version 3.2:] introduction of the ``Logical
+ specification of diagrams'', the commands ``{\tt obj}'' and
+ ``{\tt mor}'' were modified accordingly.
+\item[5/2002 - Version 4.0:] {\bf new syntax, non-compatible with past
+ versions}. The commands {\tt begindc}, {\tt obj}, and {\tt mor}
+ were modified.
+\item[3/2003 - Version 4.1:] new kind of arrows, ``surjective
+ arrows'', was added. The drawing of the double tip only works well
+ in the vertical, or horizontal case.
+\item[12/2004 - Version 4.1.1:] new version for the drawing of
+ surjective arrows, it solves the previous problem with it.
+\item[3/2007 - version 4.2:] adds the ``providespackage'' directive
+ that was missing. Adds dashed lines, and dotted lines.
+\item[5/2008 - version 4.2.1:] deleting some counters, trying to
+ avoid the problem ``running out of counters'', that occurs because of
+ the use of PiCTeX and DCpic (only two...)
+\item[8/2008 - version 4.3:] thanks to Ruben Debeerst
+ (\url{debeerst@mathematik.uni-kassel.de}), he added a new arrow
+ ``equalline''. After that I decided to add: the doublearrow; the
+ doublearrow with opposite directions; the null arrow. This last can
+ be used as a simple form of adding new labels.
+\item[12/2008 - version 4.3.1:] the comand ``id'' is internalised
+ (``!id''), it should be that way from the begining because it is not
+ to be used from the outside. The comand ``dasharrow'' was changed
+ to ``dashArrow'' to avoid a clash with the AMS command with the same
+ name.
+\item[12/2009 - version 4.3.2:] there was a conflict between dcpic.sty
+ and hyperref in current texlive-2009 due to the one letter macro
+ ``$\backslash$d'' (thanks to Thorsten S
+ \url{<thorsten.schwander@gmail.com>}). The ``d'' changed to
+ ``deuc'' (Euclidian Distance). The ``x'' and ``y'' changed to ``xO''
+ ``yO''
+\item[4/2013 - version 4.4.0:] thanks to Xingliang Liang
+ \url{<jkl9543@gmail.com>}. He added a new arrow ``dotarrow''.
+\item[5/2013 - version 5.0:] {\bf new unit for the coordinate system},
+ 1/10th of the previous one. This allow a better implementation of
+ the double line arrows and also a more fine specification of the
+ diagrams/graphs (Thanks to Antonio de Nicola
+ \url{<adenicola@mat.uc.pt>}).
+\end{description}
+
+
+\section{Introduction}
+
+DCpic is a package of \TeX~\cite{Knuth86} macros for graph modelling
+in a (La)\TeX~\cite{Lamport94} or Con\TeX t~\cite{Otten99}
+document. Its distinguishing features are: the use of
+\PiCTeX~\cite{Wichura92} a powerful graphical engine, and a simple
+specification syntax. A graph is described in terms of its objects and
+its edges. The objects are textual elements and the edges can have
+various straight or curved forms.
+
+A graph~\cite{Harary72} in DCpic is a ``picture'' in \PiCTeX, in which
+we place our {\em objects} and {\em morphisms} (edges). The user's
+commands in DCpic are: {\tt begindc} and {\tt enddc} which establish
+the coordinate system where the objects will by placed; {\tt obj}, the
+command which defines the place and the contents of each object; {\tt
+mor}, and {\tt cmor}, the commands which define the morphisms, linear
+and curved edges, and its labels.
+
+Until version 3.2 DCpic ``Commutative Diagrams in \PiCTeX'' was
+dedicated to commutative diagrams~\cite{Pierce98} (``{\bf D}iagramas
+{\bf C}omutativos'' in Portuguese) drawing, that is the reason for the
+name ``obj'' (objects) and ``mor'' (morphism) for the nodes and edges.
+
+%\pagebreak[3]
+Example:
+\begin{lstlisting}
+ \begindc{\commdiag}
+ \obj(10,10){$A$}
+ \obj(30,10){$B$}
+ \obj(30,30){$C$}
+ \mor{$A$}{$B$}{$f$}[\atright,\solidarrow]
+ \mor{$B$}{$C$}{$g$}[\atright,\solidarrow]
+ \mor{$A$}{$C$}{$h$}
+ \enddc
+\end{lstlisting}
+
+$$
+ \begindc{\commdiag}
+ \obj(10,10){$A$}
+ \obj(30,10){$B$}
+ \obj(30,30){$C$}
+ \mor{$A$}{$B$}{$f$}[\atright,\solidarrow]
+ \mor{$B$}{$C$}{$g$}[\atright,\solidarrow]
+ \mor{$A$}{$C$}{$h$}
+ \enddc
+$$
+
+{\bf Note:} all the numeric values should be integer values.
+
+
+\section{Description}
+
+
+\subsection{Available Commands}
+
+
+\begin{description}
+\item[The environment:] {\ }
+
+\begin{verbatim}
+ \begindc{#1}[#2]
+ #1 - Graph type
+ 0 = "commdiag", commutative diagram
+ 1 = "digraph", direct graph
+ 2 = "undigraph", undirect graph
+ 3 = "cdigraph", direct graph with incircled objects
+ 4 = "cundigraph", undirect graph with incircled objects
+ (optional) #2 - magnification factor (default value, 300)
+ \enddc
+\end{verbatim}
+
+\item[Objects:] {\ }
+
+\begin{verbatim}
+ \obj(#1,#2)[#3]{#4}[#5]
+ #1 and #2 - coordinates
+ (optional) #3 - Label, to be used in the morphims command, if not
+ present the #4 will be used for that purpose
+ #4 - Object contents
+ (optional) #5 - placement of the object (default value \north)
+ 0="\pcent", center
+ 1="\north", north
+ 2="\northeast", northeast
+ 3="\east", east
+ 4="\southeast", southeast
+ 5="\south", south
+ 6="\southwest", southwest
+ 7="\west", west
+ 8="\northwest", northwest
+\end{verbatim}
+
+ {\bf Note:} if you omit the \#3 argument (label), and the \#4 argument
+ is a complex (and long) \LaTeX\ command, then this command can
+ crash. In this case you must specify a label (the empty label [], if
+ you do not intend to use the label).
+
+\item[Morphism (linear edges).] This commando has two major
+ variants:
+ \begin{enumerate}
+ \item Starting and Ending objects specification
+\begin{verbatim}
+ \mor{#1}{#2}[#5,#6]{#7}[#8,#9]
+\end{verbatim}
+
+ As you can see this first form is (intentionally) badly formed, the
+ arguments \#3 and \#4 are missing (the actual command is correctly
+ formed).
+
+ \#1 - The starting object reference
+
+ \#2 - The ending object reference
+
+ from this two we will obtain the objects coordinates, and also the
+ dimensions of the enclosing box.
+
+ The objects box dimensions are used to do an automatic adjustment of
+ the edge width.
+
+ from \#1 we obtain $(x,y)$, (\#1,\#2) in the second form
+
+ from \#2 we obtain $(x^\prime,y^\prime)$, (\#3,\#4) in the second form
+
+ this values will be passed to the command second form
+
+ \item Two points coordinates specification
+\begin{verbatim}
+ \mor(#1,#2)(#3,#4)[#5,#6]{#7}[#8,#9]
+\end{verbatim}
+ \end{enumerate}
+
+ Now we can describe all the arguments
+\begin{verbatim}
+ #1 and #2 - coordinates (beginning)
+ #3 and #4 - coordinates (ending)
+(optional)#5,#6 - correction factors (defaul values, 10 and 10)
+ #5 - actual beginning of the edge
+ #6 - actual ending of the edge
+ #7 - text (morphism label)
+(optional)#8,#9
+ #8 - label placement
+ 1 = \atright, at right, default value
+ -1 = \atleft, at left
+ #9 - edge type
+ 0 = "\solidarrow", default value
+ 1 = "\dashArrow"
+ 2 = "\dotArrow
+ 3 = "\solidline"
+ 4 = "\dashline"
+ 5 = "\dotline"
+ 6 = "\injectionarrow"
+ 7 = "\aplicationarrow"
+ 8 = "\surjectivearrow"
+ 9 = "\equalline"
+ 10 = "\doublearrow"
+ 11 = "\doubleopposite"
+ 12 = "\nullarrow" (to allow adding labels to existing arrows)
+\end{verbatim}
+
+ {\bf Note:} insert a space after the command.
+
+
+\item[Curved Morphisms (quadratic edges):] {\ }\\
+\begin{verbatim}
+ \cmor(#1) #2(#3,#4){#5}[#6]
+ #1 - list of points (odd number)
+ #2 - tip direction
+ 0 = "\pup", pointing up
+ 1 = "\pdown", pointing down
+ 2 = "\pright", pointing right
+ 3 = "\pleft", pointing left
+ #3 and #4 - coordenates of the label
+ #5 - morphism label
+(optional) #6 - edge type
+ 0 ="\solidarrow", default value
+ 1 = "\dashArrow"
+ 2 = "\solidline"
+\end{verbatim}
+
+ {\bf Notes:} Insert a space after the command. The space after the
+ list of points is mandatory.
+
+\end{description}
+
+
+\section{Examples}
+
+
+\subsection{Different Types of Lines/Arrows}
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+$$
+
+
+\subsection{Diagrams with Curved Edges, Double Arrows, \ldots }
+
+
+\paragraph{Curved edges} {\ }
+
+
+\begin{lstlisting}
+\begindc{0}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}
+\mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+
+\begindc{\commdiag}
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}
+\mor{B}{Aa}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+\end{lstlisting}
+
+
+$$
+\begindc{0}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}%[\atright,\solidarrow]
+\mor(39,10)(14,10){$g$}%[\atright,\solidarrow]
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+\qquad
+\begindc{\commdiag}
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}%[\atright,\solidarrow]
+\mor{B}{Aa}{$g$}%[\atright,\solidarrow]
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+$$
+
+\paragraph{Double Arrows and Natural Transformations} {\ }
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor(5,4)(20,4){$f$}[\atright,\solidarrow]
+\mor(5,6)(20,6){$g$}
+\enddc
+
+\begindc{\commdiag}
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+\end{lstlisting}
+
+
+
+$$
+\begindc{\commdiag}
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor(5,4)(20,4){$f$}[\atright,\solidarrow]
+\mor(5,6)(20,6){$g$}
+\enddc
+\qquad\qquad\qquad
+\begindc{\commdiag}[140]
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+$$
+
+
+
+
+
+
+\subsection{A Complex Diagram}
+
+The following diagram is one of the test-diagrams used by
+Feruglio~\cite{Feruglio94}, as we can see DCpic performs very well,
+drawing the complete diagram based on a very simple specification.
+
+\begin{lstlisting}
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+\end{lstlisting}
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+$$\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+$$
+
+
+
+\subsection{``Around the Word''~\cite{Harary72}}
+
+\begin{lstlisting}
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+
+$$
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+
+\subsection{Incircled Objects}
+
+
+\begin{lstlisting}
+\begindc{\cdigraph}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+\end{lstlisting}
+
+
+$$
+\begindc{\cdigraph}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+$$
+
+\newcommand{\noopsort}[1]{} \newcommand{\singleletter}[1]{#1}
+\begin{thebibliography}{10}
+
+\bibitem{Feruglio94}
+Feruglio, {Gabriel Valiente}.
+\newblock Typesetting commutative diagrams.
+\newblock {\em TUGboat}, 15(4):466--484, 1994.
+
+\bibitem{Harary72}
+Harary, Frank. 1972.
+\newblock {\em Graph Theory}.
+\newblock Reading, Massachusetts: Addison-Wesley.
+
+\bibitem{Knuth86}
+Knuth, Donald~E.
+\newblock {\em The TeXbook}.
+\newblock Addison-Wesley Publishing Company, Reading,Massachusetts, 1986.
+
+\bibitem{Lamport94}
+ Lamport, Leslie.
+\newblock {\em {\LaTeX}: A Document Preparation System}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 2nd
+ edition, 1994.
+
+\bibitem{Otten99}
+Otten, Ton and Hagen, Hans .
+\newblock {\em Con\TeX t an excursion}.
+\newblock Pragma ADE, Hasselt, 1999.
+
+\bibitem{Pierce98}
+ Pierce, Benjamin.
+\newblock {\em Basic Category Theory for Computer Scientists}.
+\newblock Foundations of Computing. The MIT Press, London, England, 1998.
+
+\bibitem{Wichura92}
+ Wichura, Michael.
+\newblock {\em The {\PiCTeX} Manual}.
+\newblock Personal \TeX\ Inc, 12 Madrona Avenue, Mill Valley, CA
+94941 - USA, 3rd edition, March 1992
+
+\end{thebibliography}
+
+
+\section{The Code}
+
+{\scriptsize
+\verbatiminput{dcpic.sty}
+}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/dcpic/manDCPiCpt.pdf b/macros/generic/diagrams/dcpic/manDCPiCpt.pdf
new file mode 100644
index 0000000000..7952f91565
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiCpt.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/manDCPiCpt.tex b/macros/generic/diagrams/dcpic/manDCPiCpt.tex
new file mode 100644
index 0000000000..01e8649810
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiCpt.tex
@@ -0,0 +1,846 @@
+% $Id: manDCPiCpt.tex 13 2013-04-21 15:28:45Z pedro $
+\documentclass[a4paper,11pt]{article}
+\usepackage{a4wide}
+\usepackage[portuguese]{babel}
+\usepackage{ae} % Virtual fonts for PDF-files with T1 encoded CMR-fonts.
+\usepackage[T1]{fontenc}
+\usepackage[utf8x]{inputenc}
+\usepackage{dcpic,pictex}
+\usepackage{alltt}
+\usepackage{verbatim}
+\usepackage{longtable}
+\usepackage{svn-multi}
+\usepackage{listings}
+\usepackage{url}
+
+\svnidlong
+{$HeadURL: svn+ssh://gentzen.mat.uc.pt/var/lib/svn/DCPiC/CTAN5.0/manDCPiCpt.tex $}
+{$LastChangedDate: 2013-05-01 19:49:49 +0100 (Qua, 01 Mai 2013) $}
+{$LastChangedRevision: 15 $}
+{$LastChangedBy: pedro $}
+
+\svnid{$Id: manDCPiCpt.tex 13 2013-04-21 15:28:45Z pedro $}
+
+\newcommand{\docversion}{\svnyear/\svnmonth/\svnday\ (v\svnrev)}
+
+\def\dcpicversion{v5.0.0}
+
+\lstset{language=TeX,
+ frame = single,
+ morekeywords={begindc,enddc,cmor,pup,commdiag,undigraph,digraph,cdigraph,cundigraph,obj,mor,pleft,pup,pdown,pright,north,northeast,east,southeast,south,southwest,west,northwest,atright,atleft,solidarrow,dashArrow,dotArrow,solidline,dashline,dotline,injectionarrow,aplicationarrow,surjectivearrow,equalline,doublearrow,doubleopposite,nullarrow},
+ basicstyle=\scriptsize}
+
+
+\title{DCpic (5.0) --- Manual de Utilização\\
+\docversion}
+
+\author{Pedro Quaresma\\ CISUC/Departamento de Matemática,
+ Universidade de Coimbra\\ 3001-454 COIMBRA, PORTUGAL\\
+ \url{pedro@mat.uc.pt}\quad phone: +351-239~791~137\quad fax:
+ +351-239~832~568}
+
+\date{2013/05/01}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+ O {\em DCpic\/} é um conjunto de comandos para a escrita de grafos,
+ para tal desenvolveu-se um conjunto de comandos, com uma sintaxe
+ simples, que permite a construção de quase todo o tipo de grafos.
+
+ Originalmente o {\em DCpic\/} ({\bf D}iagramas {\bf C}omutativos
+ utilizando o {\bf PiC}TeX) foi concebido para a construção de
+ diagramas comutativos tal como são usados em Teoria das
+ Categorias~\cite{Herrlich73,Pierce98}, temos então grafos etiquetados
+ e com elementos nos nós. A partir da versão 4.0 o conjunto de
+ comandos foi alterada de forma a considerar-se também a construção de
+ grafos dirigidos, e grafos não dirigidos. A forma de os especificar
+ recorre à colocação dos diferentes objectos (nós e arestas) num dado
+ referencial ortonormado,
+
+ O {\em DCpic} está baseado no \PiCTeX\ necessitando deste para poder
+ ser usado.
+\end{abstract}
+
+\vfill
+\begin{quotation}
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Pedro Quaresma (\url{pedro@mat.uc.pt}).
+
+This work consists of the files dcpic.sty.
+\end{quotation}
+
+\vspace*{2cm}
+\noindent Coimbra, 2013/04/21\\
+Pedro Quaresma
+
+\pagebreak
+\section{Hist\'oria}
+
+\begin{description}
+\item[11/1990 - versão 1.0]
+\item[10/1991 - versão 1.1]
+\item[9/1993 - versão 1.2:] argumento ``distância entre as
+ extremidades da seta e os objectos'' passou a ser opcional; uma nova
+ opção para as ``setas'' (opção 3).
+\item[2/3/1995 - versão 1.3:] foi acrescentado o tipo de seta de
+ aplicação (opção 4) a distância da etiqueta
+ à seta respectiva passou a ser fixa (10 unidades de medida).
+
+\item[15/7/1996 - vers\~ao 2.1:] o comando {\tt mor} passou a ter uma
+ sintaxe distinta. Os parâmetros 5 e 6 passaram a ser a
+ distância entre os objectos e os extremos da seta o
+ parâmetro 7 é o nome do morfismo e os parâmetros 8 e 9,
+ colocação do morfismo e tipo de morfismo passaram a ser
+ opcionais.
+
+\item[5/2001 - versão 3.0:] implementação do comando
+ {\tt cmor} baseado no comando de desenho de curvas quadráticas pelo
+ \PiCTeX.
+
+\item[11/2001 - versão 3.1:] modificação das pontas das
+ setas de forma a estas ficarem semelhantes às setas
+ (símbolos) dos TeX.
+
+\item[1/2002 - versão 3.2:] modificação dos comandos {\tt obj}
+ e {\tt mor} de forma a introduzir a especificação lógica
+ dos morfismos, isto é, passa-se a dizer qual é o objecto de
+ partida e/ou o objecto de chegada em vez de ter de especificar o
+ morfismo em termos de coordenadas. Por outro lado o tamanho das
+ setas passa a ser ajustado automaticamente em relação ao
+ tamanho dos objectos.
+
+\item[5/2002 - vers\~ao 4.0:] {\bf vers\~ao incompatível com as
+ anteriores}. Modificação dos comandos {\tt begindc} e {\tt obj}. O
+ primeiro passou a ter um argumento (obrigat\'orio) que nos
+ permite especificar o tipo de grafo que estamos a querer
+ especificar:
+ \begin{itemize}
+ \item {\tt commdiag} (0), para diagramas comutativos;
+ \item {\tt digraph} (1), para grafos orientados;
+ \item {\tt undigraph} (2), para grafos n\~ao orientados.
+ \end{itemize}
+
+ O comando {\tt obj} modificou a sua sintaxe passou a ter um (após a
+ especifica\c c\~ao das coordenadas, um argumento opcional, um argumento
+ obrigat\'orio, e um argumento opcional. O primeiro argumento opcional
+ d\'a-nos a etiqueta que serve como refer\^encia para a especifica\c c\~ao dos
+ morfismos, na sua aus\^encia usa-se o argumento obrigat\'orio para esse
+ efeito, o argumento obrigat\'orio d\'a-nos o ``conte\'udo'' do objecto, nos
+ diagramas comutativos \'e centrado no ponto dado pelas coordenadas
+ sendo o argumento seguinte simplesmente ignorado, nos grafos o
+ ``conte\'udo'' \'e colocado numa posi\c c\~ao a norte, a noroeste, a este, \ldots,
+ sendo que a posi\c c\~ao concreta \'e especificada pelo \'ultimo dos
+ argumentos deste comando, o valor por omiss\~ao \'e o {\tt norte}.
+
+\item[3/2003 - vers\~ao 4.1:] a pedido de Jon Barker \url{<jeb1@soton.ac.uk>}
+ criei um novo tipo de seta, a seta de sobrejec\c c\~ao. Para j\'a a dupla
+ seta s\'o fica bem nas setas horizontais ou verticais.
+
+\item[12/2004 - vers\~ao 4.1.1:] nova vers\~ao das setas de sobrejec\c c\~ao que
+ corrigue completamente os problemas da solu\c c\~ao anterior.
+
+\item[3/2007 - vers\~ao 4.2:] acrescenta a directiva
+ ``providespackage''. Acrescenta linhas a ponteado e a tracejado.
+
+\item[5/2008 - vers\~ao 4.2.1:] apaga alguns contadores para tentar
+ diminuir o excessivo uso dos mesmos por parte do PiCTeX.
+
+\item[8/2008 - vers\~ao 4.3:] gra\c cas a Ruben Debeerst
+ \url{<debeerst@mathematik.uni-kassel.de>}, acrescentei uma nova
+ ``seta'' a ``equalline''. Ap\'os isso decidi tamb\'em acrescentar
+ setas duplas, com o mesmo ou diferentes sentidos. Acrescentou-se
+ também a seta nula, isto é, sem representação gráfica, a qual pode
+ ser usada para acrescentar etiquetas a outras ``setas''.
+
+\item[12/2008 - version 4.3.1:] para evitar conflitos com outros
+ pacotes o comando ``id'' \'e internalizado. O comando ``dasharrow'' \'e
+ modificado para ``dashArrow'' para evitar um conflito com o AMSTeX.
+
+\item[12/2009 - version 4.3.2:] para evitar um conflito com o pacote
+ ``hyperref'' mudou-se o contador ``d'' para ``deuc'', aproveitei e
+ mudei os contadores ``x'' e ``y'' para ``xO'' e ``yO''
+
+\item[4/2013 - version 4.4.0:] graças a Xingliang Liang
+ \url{jkl9543@gmail.com>} acrescentou-se uma nova seta ``dotarrow''.
+
+\item[4/2013 - version 5.0:] {\bf uma nova unidade para o sistema de
+ coordenadas}, 1/10 da anterior. Esta nova unidade permite
+ corriguir um problema com a construção das setas duplas, além de
+ permitir uma especificação mais fina dos diagramas.
+\end{description}
+
+\section{Introdução}
+
+O conjunto de comandos {\em DCpic} é um conjunto de comandos
+\TeX~\cite{Knuth86} dedicado à escrita de diagramas tal como são
+usados em Teoria das Categorias~\cite{Herrlich73,Pierce98}, assim como
+de grafos dirigidos e não dirigidos~\cite{Harary72}.
+
+Pretendeu-se com a sua escrita ter uma forma simples de especificar
+grafos, fazendo-o através da especificação de um conjunto de
+``objectos'' (nós do grafo) colocados num dado referencial
+ortonormado, e através de um conjuntos de morfismos (arestas) que os
+são posicionados explicitamente no referido referencial, ou então,
+a são posição é dada especificando qual é o seu nó de
+partida e qual é o seu nó de chegada.
+
+O gráfico em si é construído recorrendo aos comandos gráficos
+do \PiCTeX.
+
+\section{Utilização}
+
+Antes de mais é necessário carregar os dois conjuntos de comandos
+acima referidos, no caso de um documento \LaTeX~\cite{Lamport94} isso
+pode ser feito com o seguinte comando (no preâmbulo).
+
+\begin{verbatim}
+\usepackage{dcpic,pictex}
+\end{verbatim}
+
+Nos outros formatos ter-se-á de usar um comando equivalente. Após
+isso os diagramas podem ser escritos através dos comandos
+disponibilizados pelo {\em DCpic}. Por exemplo, os comandos:
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[200]
+ \obj(1,4){$A^B$}
+ \obj(1,1){$C$}
+ \obj(3,4){$A$}
+ \obj(3,1){$C\times{}B$}
+ \obj(6,4){$A^B\times{}B$}
+ \mor{$C$}{$A^B$}{$f$}
+ \mor{$C\times{}B$}{$A$}{$\bar f$}[\atleft,\dashArrow]
+ \mor{$A^B\times{}B$}{$A$}{$ev$}[\atright,\solidarrow]
+ \mor{$C\times{}B$}{$A^B\times{}B$}{$f\times{}id$}[\atright,\solidarrow]
+\enddc
+\end{lstlisting}
+
+produzem o seguinte diagrama:
+
+$$
+\begindc{\commdiag}[200]
+ \obj(1,4){$A^B$}
+ \obj(1,1){$C$}
+ \obj(3,4){$A$}
+ \obj(3,1){$C\times{}B$}
+ \obj(6,4){$A^B\times{}B$}
+ \mor{$C$}{$A^B$}{$f$}
+ \mor{$C\times{}B$}{$A$}{$\bar f$}[\atleft,\dashArrow]
+ \mor{$A^B\times{}B$}{$A$}{$ev$}[\atright,\solidarrow]
+ \mor{$C\times{}B$}{$A^B\times{}B$}{$f\times{}id$}[\atright,\solidarrow]
+\enddc
+$$
+
+O meio ambiente {\tt begindc}, {\tt enddc} permite-nos construir um
+grafo por colocação dos objectos num referencial ortonormado tendo
+a origem em (0,0). As arestas (morfismos) vão ligar pares de nós
+(objectos) entre si.
+
+\section{Comandos Disponíveis}
+
+De seguida apresenta-se a descrição dos comandos, a sua sintaxe e
+a sua funcionalidade. Os argumentos entre parêntesis rectos são
+opcionais.
+
+\begin{description}
+\item[\tt $\backslash$begindc\{\#1\}[\#2\mbox{]}] -- entrada no ambiente de
+ escrita de grafos:
+
+ \begin{tabular}{r@{ -- }l}
+ {\tt \#1} & tipo de grafo\\
+ \multicolumn{2}{l}{\quad $0\equiv\backslash$commdiag, diagrama comutativo;}\\
+ \multicolumn{2}{l}{\quad $1\equiv\backslash$digraph, grafo orientado;}\\
+ \multicolumn{2}{l}{\quad $2\equiv\backslash$undigraph, grafo não orientado;}\\
+ \multicolumn{2}{l}{\quad $3\equiv\backslash$cdigraph, grafo orientado, com
+ objectos circunscritos;}\\
+ \multicolumn{2}{l}{\quad $4\equiv\backslash$cundigraph, grafo não orientado,
+ com objectos circunscritos.}\\
+ {\tt \#2} & factor de escala (opcional)\\
+ \multicolumn{2}{l}{\quad valor por omissão: 300}
+ \end{tabular}
+
+\item[\tt $\backslash$enddc] -- saída do meio ambiente para a
+ escrita de grafos.
+
+\item[{\tt $\backslash$obj(\#1,\#2)[\#3]\{\#4\}[\#5]}:] comando de colocação
+ dos nós (objectos).
+
+ \begin{tabular}{r@{ -- }l}
+ {\tt \#1} e {\tt \#2}& coordenadas do centro da caixa que vai
+ conter o texto\\
+ {\tt \#3} & etiqueta para identificar o objecto (opcional)\\
+ {\tt \#4} & texto (conte{\'u}do do nó)\\
+ {\tt \#5} & colocação relativa do objecto (opcional)\\
+ \multicolumn{2}{l}{\qquad\quad $0\doteq\backslash$pcent, centrado}\\
+ \multicolumn{2}{l}{\qquad\quad $1\doteq\backslash$north, norte}\\
+ \multicolumn{2}{l}{\qquad\quad $2\doteq\backslash$northeast, nordeste}\\
+ \multicolumn{2}{l}{\qquad\quad $3\doteq\backslash$east, este}\\
+ \multicolumn{2}{l}{\qquad\quad $4\doteq\backslash$southeast, sudeste}\\
+ \multicolumn{2}{l}{\qquad\quad $5\doteq\backslash$south, sul}\\
+ \multicolumn{2}{l}{\qquad\quad $6\doteq\backslash$southwest, sudoeste}\\
+ \multicolumn{2}{l}{\qquad\quad $7\doteq\backslash$west, oeste}\\
+ \multicolumn{2}{l}{\qquad\quad $8\doteq\backslash$northwest, noroeste}
+ \end{tabular}
+
+A etiqueta explícita-se quando não é possível usar o objecto como
+forma de identificação do nó, por exemplo num dado grafo não orientado
+os nós podem não ter conteúdo e como tal serem todos iguais em termos
+de identificação:
+
+Em alguns casos, por exemplo comandos dos \LaTeX\ complexos, pode ser
+necessário explicitar o argumento {\tt \#3} mesmo que seja através da
+etiqueta vazia {\tt []}. Esse especificar da etiqueta vazia torna-se
+necessário para que o mecanismo interno do DCpic de comunicação entre
+comandos (pilhas) não se baralhe e entre num ciclo infinito.
+
+
+$$
+\begindc{\undigraph}[200]
+\obj(1,1)[1]{}
+\obj(3,2)[2]{}
+\obj(5,1)[3]{}
+\obj(3,4)[4]{}
+\mor{1}{2}{}
+\mor{1}{3}{}
+\mor{2}{3}{}
+\mor{4}{1}{}
+\mor{4}{3}{}
+\mor{2}{4}{}
+\enddc
+$$
+foi produzido por:
+\begin{lstlisting}
+\begindc{\undigraph}[200]
+\obj(1,1)[1]{}
+\obj(3,2)[2]{}
+\obj(5,1)[3]{}
+\obj(3,4)[4]{}
+\mor{1}{2}{}
+\mor{1}{3}{}
+\mor{2}{3}{}
+\mor{4}{1}{}
+\mor{4}{3}{}
+\mor{2}{4}{}
+\enddc
+\end{lstlisting}
+
+
+O parâmetro referente à colocação do objecto só é relevante quando se
+pensa na identificação dos nós num dado grafo orientado (ou não), por
+exemplo o grafo ``Around the Word''~\cite{Harary72}:
+
+$$
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+foi produzido por
+\begin{lstlisting}
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+
+
+\item[{\tt $\backslash$mor\{\#1\}\{\#2\}[\#5,\#6]\{\#7\}[\#8,\#9]}:]
+ Comando de colocação da seta (morfismo) de ligação de dois objectos
+ -- Primeira variante.
+
+ A numeração errada dos argumentos é aqui feita propositadamente,
+ aquando da explicação da segunda variante deste comando
+ compreender-se-á o porquê desta opção de escrita.
+
+ \begin{longtable}{r@{ -- }p{32em}}
+ {\tt \#1} & referência do nó de partida\\
+ {\tt \#2} & referência do nó de chegada\\
+ {\tt \#5} e {\tt \#6} & distância do centro dos objectos às
+ extremidades inicial e final respectivamente da seta. Valores por
+ omissão: 10, 10 (para diagramas) 2, 2 (para os grafos)\\
+ {\tt \#7} & texto, ``nome'' do morfismo\\
+ {\tt \#8} & colocação do nome do morfismo em relação à seta. Valor
+ por omissão, $\backslash$atleft. \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 1 $\doteq\backslash$atright, à direita}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} -1 $\doteq\backslash$atleft, à esquerda}\\
+ {\tt \#9} & tipo da seta. Valor por omissão, $\backslash$solidarrow.\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 0 $\doteq\backslash$solidarrow, seta sólida} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 1 $\doteq\backslash$dashArrow, seta tracejada} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 2 $\doteq\backslash$dotArrow, seta ponteada} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 3 $\doteq\backslash$solidline, linha sólida} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 4 $\doteq\backslash$dashline, linha a tracejado} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 5 $\doteq\backslash$dotline, linha a ponteado} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 6 $\doteq\backslash$injectionarrow, seta de
+ injecção. Valor anterior 3 (vers\~ao $<$ 4.2) } \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 7 $\doteq\backslash$aplicationarrow, seta de
+ aplicação. Valor anterior 4 (vers\~ao $<$ 4.2) } \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 8 $\doteq\backslash$surjectivearrow, seta de
+ função sobrejectiva. Valor anterior 5 (vers\~ao $<$ 4.2) }\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 9 $\doteq\backslash$equalline, linha dupla}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 10
+ $\doteq\backslash$doublearrow, seta dupla}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 11
+ $\doteq\backslash$doubleopposite, seta dupla em sentidos opostos}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 12
+ $\doteq\backslash$nullarrow, seta nula, serve o propósito de
+ acrescentar etiquetas as outras ``setas''.}\\
+ \end{longtable}
+
+\item[{\tt $\backslash$mor(\#1,\#2)(\#3,\#4)[\#5,\#6]\{\#7\}[\#8,\#9]}:]
+ Comando de colocação da seta (morfismo) de ligação de dois objectos
+ -- Segunda variante.
+
+ \begin{longtable}{r@{ -- }p{32em}}
+ {\tt \#1} e {\tt \#2} & coordenadas do nó de partida\\
+ {\tt \#3} e {\tt \#4} & coordenadas do nó de chegada\\
+ \end{longtable}
+
+ Todos os outros argumentos têm o significado já explicado (por
+ isso a numeração errada). É de notar que para a primeira variante é
+ feito o cálculo das coordenadas dos nós de forma automática e depois
+ são passados esses valores para a segunda variante do comando.
+
+
+\item[{\tt $\backslash$cmor(\#1) \#2(\#3,\#4)\{\#5\}[\#6]}] comando para a
+ especificação de setas curvas. O algoritmo de construção das setas é
+ o do \PiCTeX\ o que implica que se está a especificar uma linha
+ quadrática através de um número ímpar de pontos.
+
+ \begin{tabular}{c@{---}l}
+ {\tt \#1} & lista de pontos, em número ímpar \\
+ {\tt \#2} & direccionamento da seta \\
+ \multicolumn{2}{l}{\qquad 0 $\doteq\backslash$pup, apontar para cima}\\
+ \multicolumn{2}{l}{\qquad 1 $\doteq \backslash$pdown, apontar para
+ baixo}\\
+ \multicolumn{2}{l}{\qquad 2 $\doteq \backslash$pright, apontar para a
+ direita}\\
+ \multicolumn{2}{l}{\qquad 3 $\doteq \backslash$pleft, apontar para a
+ esquerda}\\
+ {\tt \#3} & abcissa do morfismo\\
+ {\tt \#4} & ordenada do morfismo\\
+ {\tt \#5} & morfismo\\
+ {\tt \#6} & tipo de ``seta'', valor por omissão: 0, seta
+ sólida.\\
+ \multicolumn{2}{l}{\hspace*{4.5em} Os restantes valores poss\'\i veis
+ s\~ao os descritos na variante anterior.}\\
+
+ \end{tabular}
+
+ O comando {\tt cmor} no caso em que não tem o último parâmetro opcional
+ tem de ser seguido por um espaço. O espaço antes do direccionamento
+ da seta é obrigatório.
+
+ No caso de se ter o valor 2 (``$\backslash$solidline'') o valor para o
+ direccionamento da seta não é tipo em conta, no entanto dado se
+ tratar de um do parâmetro obrigatório é necessário dar-lhe um valor
+\end{description}
+
+
+\section{Alguns Exemplos}
+
+
+\subsection{Setas Duplas, Transformações Naturais, \ldots}
+
+É de notar que alguns casos aparentemente omissos na actual versão
+podem perfeitamente ser construídos através de uma utilização
+imaginativa dos actuais comandos. Por exemplo os seguintes diagramas:
+
+$$
+\begindc{\commdiag}[30]
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor{$A$}{$B$}{$f$}[\atright,\doublearrow]
+\mor{$A$}{$B$}{$g$}[\atleft,\nullarrow]
+\enddc
+\qquad\qquad\qquad
+\begindc{\commdiag}[140]
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+$$
+
+Podem ser construídos com a actual versão. Eis como:
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[30]
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor{$A$}{$B$}{$f$}[\atright,\doublearrow]
+\mor{$A$}{$B$}{$g$}[\atleft,\nullarrow]
+
+\begindc{\commdiag}[14]
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+\end{lstlisting}
+
+
+\subsection{Grafos Orientados com Objectos Circunscritos}
+
+
+$$
+\begindc{\cdigraph}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+$$
+
+Foi produzido através dos seguintes comandos:
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+\end{lstlisting}
+
+\subsection{Diferentes Tipos de Setas/Linhas}
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+$$
+
+\subsection{Diagramas com Setas Curvas}
+
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}
+\mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+
+\begindc{\commdiag}[30]
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}
+\mor{B}{Aa}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}%[\atright,\solidarrow]
+\mor(39,10)(14,10){$g$}%[\atright,\solidarrow]
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+\qquad
+\begindc{\commdiag}[30]
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}%[\atright,\solidarrow]
+\mor{B}{Aa}{$g$}%[\atright,\solidarrow]
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+$$
+
+\subsection{Um Exemplo Complexo}
+
+O diagrama seguinte foi proposto por Feruglio~\cite{Feruglio94} como
+um caso de teste. Como \'e poss\'\i vel ver o DCpic produz o diagrama
+correctamente a partir de uma especifica\c c\~ao simples.
+
+
+\begin{lstlisting}
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+\end{lstlisting}
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+$$\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+$$
+
+
+%\bibliographystyle{plain}
+%\bibliography{pedro}
+
+\newcommand{\noopsort}[1]{} \newcommand{\singleletter}[1]{#1}
+\begin{thebibliography}{1}
+
+\bibitem{Feruglio94}
+{Gabriel Valiente} Feruglio.
+\newblock Typesetting commutative diagrams.
+\newblock {\em TUGboat}, 15(4):466--484, 1994.
+
+\bibitem{Harary72}
+Frank Harary.
+\newblock {\em Graph Theory}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1972.
+
+\bibitem{Herrlich73}
+Horst Herrlich and George Strecker.
+\newblock {\em Category Theory}.
+\newblock Allyn and Bacon Inc., 1973.
+
+\bibitem{Knuth86}
+Donald~E. Knuth.
+\newblock {\em The {\TeX}book}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1986.
+
+\bibitem{Lamport94}
+Leslie Lamport.
+\newblock {\em {\LaTeX}: A Document Preparation System}.
+\newblock Addison-Wesley Publishing Company, Reading,Massachusetts, 2nd
+ edition, 1994.
+
+\bibitem{Pierce98}
+Benjamin Pierce.
+\newblock {\em Basic Category Theory for Computer Scientists}.
+\newblock Foundations of Computing. The MIT Press, London, England, 1998.
+
+\end{thebibliography}
+
+\appendix
+\section{O Código}
+
+{\scriptsize
+\verbatiminput{dcpic.sty}}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/diagxy/README b/macros/generic/diagrams/diagxy/README
new file mode 100644
index 0000000000..b9e9795913
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/README
@@ -0,0 +1,8 @@
+This is a set of macros that are a front end to xy-pic that make it
+(relatively) easy to use it to set the kind of diagrams that are
+especially interesting to category theorists. There are two modes of
+macros: the first kind uses shapes such as squares and various triangles
+that fit together like Lego blocks; the second sets the nodes on an
+xy-grid and labels them and then sets arrows between the nodes. All the
+arrow types of xy are allowed in either mode. For the latest upgrade
+(if any) look at http://www.math.mcgill.ca/barr/papers/.
diff --git a/macros/generic/diagrams/diagxy/diagxy.tex b/macros/generic/diagrams/diagxy/diagxy.tex
new file mode 100644
index 0000000000..255be7888c
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/diagxy.tex
@@ -0,0 +1,1259 @@
+ %% diagxy.tex
+ %% Copyright 2001 Michael Barr
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is Michael Barr
+ %
+ % This work consists of this file diagxy.tex and the
+ % documentation/tutorial file diaxydoc.tex
+ %
+
+ % This package has been tested and used under plain tex and latex2e
+ % without compatibility problems. There is one known incompatibility with
+ % amstex: the macro \square, which is central the package and I have been
+ % using since the first package before 1990, is also used by amstex for a
+ % small box (e.g. end of proof box). The way to overcome this is to load
+ % amstex first, then if you need that macro, place
+ %
+ % \let\Box\square
+ %
+ % in your file and then input diagxy. This is a front end for xy-pic and
+ % you must have that package installed to load this one.
+
+\def\dated#1{\def\thedate{#1}}%
+\dated{2015-09-26}%
+\newcount\atcode \atcode=\catcode`\@%
+\catcode`\@=12%
+\input xy
+\xyoption{arrow}
+\xyoption{curve}
+\catcode`\@=11
+ \newdimen\xydashw@@
+ \xydashw@@\xydashw@
+ \multiply\xydashw@@ by 7
+ \divide\xydashw@@ by 4
+\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@@
+ \kern-\dimen@ \vrule width\xydashw@@ height\dimen@ depth\dimen@}
+\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
+\catcode`\@=12
+
+\newdir{ >>}{{}*!/-2.6667\jot/\dir{>>}}
+\newdir{ >}{{ }*!/-.9em/@{>}}%
+ % \newdir{ (}{{ }*!/-.5em/@{(}}%
+\newdir^{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{< }{!/.9em/@{<}*{ }}%
+\newdir{) }{!/.9em/@^{)}*{ }}%
+\newdir{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{d}{\object{.}}
+\newdir{into}{{ }*!/-1em/@^{(}}% Usage: into->
+
+\newdimen\high%
+\newdimen\ul%
+\newcount\deltax%
+\newcount\deltay%
+\newcount\deltaX%
+\newcount\deltaXprime%
+\newcount\deltaY%
+\newcount\deltaYprime%
+
+\newdimen\wdth%
+\newcount\xend%
+\newcount\yend%
+\newcount\Xend%
+\newcount\Yend%
+\newcount\xpos%
+\newcount\ypos%
+\newcount\default \default=500%
+\newcount\defaultmargin \defaultmargin=150%
+\newcount\topw%
+\newcount\botw%
+\newcount\Xpos%
+\newcount\Ypos%
+\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}%
+
+\catcode`\@=11%
+\expandafter\ifx\csname @ifnextchar\endcsname\relax%
+\def\ifnextchar#1#2#3{\let\@tempe%
+#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@ifnch}%
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch%
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+ \fi \@tempd}%
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token%
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}%
+\else%
+\let\ifnextchar\@ifnextchar%
+\fi%
+ % \ifx\check@mathfonts\undefined%
+ % \else \check@mathfonts%
+ % \fi%
+\setbox0=\hbox{$x$}
+\newdimen\axis \axis=\fontdimen22\textfont2%
+\ul=.01em%
+\X@xbase =.01em%
+\Y@ybase =.01em%
+\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}%
+\catcode`\@=12%
+
+\def\fontscale#1{%
+\if#1h\relax%
+\font\xydashfont=xydash10 scaled \magstephalf%
+\font\xyatipfont=xyatip10 scaled \magstephalf%
+\font\xybtipfont=xybtip10 scaled \magstephalf%
+\font\xybsqlfont=xybsql10 scaled \magstephalf%
+\font\xycircfont=xycirc10 scaled \magstephalf%
+\else%
+\font\xydashfont=xydash10 scaled \magstep#1%
+\font\xyatipfont=xyatip10 scaled \magstep#1%
+\font\xybtipfont=xybtip10 scaled \magstep#1%
+\font\xybsqlfont=xybsql10 scaled \magstep#1%
+\font\xycircfont=xycirc10 scaled \magstep#1%
+\fi}%
+
+\def\bfig{\vcenter\bgroup\xy}%
+\def\efig{\endxy\egroup}%
+
+\def\car#1#2\nil{#1}%
+
+\def\morphism{\ifnextchar({\morphismp}{\morphismp(0,0)}}%
+\def\morphismp(#1){\ifnextchar|{\morphismpp(#1)}{\morphismpp(#1)|a|}}%
+\def\morphismpp(#1)|#2|{\ifnextchar/{\morphismppp(#1)|#2|}%
+ {\morphismppp(#1)|#2|/>/}}%
+\def\morphismppp(#1)|#2|/#3/{%
+ \ifnextchar<{\morphismpppp(#1)|#2|/#3/}%
+ {\morphismpppp(#1)|#2|/#3/<\default,0>}}%
+
+\def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+\xend#1\advance \xend by #5%
+\yend#2\advance \yend by #6%
+\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}%
+
+
+\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+ % Check if arrow arg has an @; then don't add it.%
+\def\next{\car#4.\nil}%
+\if@\next\relax%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+ %% Otherwise, have to add @{..}%
+\else%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+\fi\ignorespaces}%
+
+\def\vect(#1,#2)/#3/<#4,#5>{%
+ \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5%
+ \POS(#1,#2)\ar#3 (\xend,\yend)}%
+
+\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#7}/<\deltax,0>[\nodec`\noded;\labeld]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\noded;\labelc]%
+\ignorespaces}%
+
+\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}%
+\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|alrb|}}%
+\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}%
+ {\squareppp(#1)|#2|/>`>`>`>/}}%
+\def\squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}%
+
+\def\diamondpppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}%
+\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\advance\ypos\deltay
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labelc]%
+\advance\xpos \deltax
+\advance\xpos \deltax
+\morphism(\xpos,\ypos)|\xd|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labeld]%
+\advance\ypos\deltay \advance\xpos -\deltax
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+}
+\def\Diamond{\ifnextchar({\diamondp}{\diamondp(0,0)}}%
+\def\diamondp(#1){\ifnextchar|{\diamondpp(#1)}{\diamondpp(#1)|lrlr|}}%
+\def\diamondpp(#1)|#2|{\ifnextchar/{\diamondppp(#1)|#2|}%
+ {\diamondppp(#1)|#2|/>`>`>`>/}}%
+\def\diamondppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\diamondpppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\diamondpppp(#1)|#2|/#3`#4`#5`#6/<400,400>}}%
+
+\def\ptrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+
+\def\qtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+
+\def\dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay\advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\btrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Atrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\divide\deltax by 2%
+\advance\ypos by \deltay\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Vtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\advance\xpos by \deltax \divide \deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+
+\def\Ctrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\multiply\deltay by 2%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\xpos by \deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\xpos by -\deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodeb;\labelb]%
+\multiply \deltay by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodec;\labela]%
+\ignorespaces}%
+
+\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}%
+\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|alr|}}%
+\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}%
+ {\ptriangleppp(#1)|#2|/>`>`>/}}%
+\def\ptriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}%
+\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|alr|}}%
+\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}%
+ {\qtriangleppp(#1)|#2|/>`>`>/}}%
+\def\qtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}%
+\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|lrb|}}%
+\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}%
+ {\dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}%
+\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|lrb|}}%
+\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}%
+ {\btriangleppp(#1)|#2|/>`>`>/}}%
+\def\btriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}%
+\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|lrb|}}%
+\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}%
+ {\Atriangleppp(#1)|#2|/>`>`>/}}%
+\def\Atriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}%
+\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|alb|}}%
+\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}%
+ {\Vtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}%
+\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|arb|}}%
+\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}%
+ {\Ctriangleppp(#1)|#2|/>`>`>/}}%
+\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}%
+\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|lab|}}%
+\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}%
+ {\Dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+
+\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,0>[\nodeb`\nodec;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<\deltax,0>[\nodec`\noded;\labele]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\ignorespaces}%
+
+\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,0>[\nodeb`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+
+\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<0,-\deltay>[\nodec`\noded;\labele]%
+\advance\xpos by -\deltax%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\ypos by -\deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
+\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
+{\Atrianglepairpp(#1)|lmrbb|}}%
+\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}%
+ {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}%
+\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}%
+{\Vtrianglepairpp(#1)|aalmr|}}%
+\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}%
+ {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}%
+\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}%
+{\Ctrianglepairpp(#1)|lrmlr|}}%
+\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}%
+ {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}%
+\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}%
+{\Dtrianglepairpp(#1)|lrmlr|}}%
+\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}%
+ {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}%
+\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}%
+\def\place{\ifnextchar[{\pplace}{\cplace}}%
+
+\def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}%
+
+\def\tridentppp|#1#2#3|/#4`#5`#6/<#7,#8>[#9]{%
+\def\next[##1;##2`##3`##4]{\def\nodee{##1}\def\labele{##2}%
+ \def\labelf{##3}\def\labelg{##4}}%
+\next[#9]%
+\advance \xpos by -\deltax%
+\advance \xpos by -#7\advance \ypos by #8%
+\advance\deltax by #7%
+\morphism(\xpos,\ypos)|#1|/{#4}/<\deltax,-#8>[\nodee`\nodeb;\labele]%
+\advance\deltax by -#7%
+\morphism(\xpos,\ypos)|#2|/{#5}/<#7,-#8>[\nodee`\nodea;\labelf]%
+\advance\deltay by #8%
+\morphism(\xpos,\ypos)|#3|/{#6}/<#7,-\deltay>[\nodee`\nodec;\labelg]%
+\ignorespaces}%
+
+\def\trident{\ifnextchar|{\tridentp}{\tridentp|amb|}}%
+\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}%
+\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}%
+ {\tridentppp|#1|/#2/<500,500>}}%
+
+\def\setmorphismwidth#1#2#3#4{%
+ \setbox0=\hbox{$#1{\labelstyle#3#3}#2$}#4=\wd0%
+ \divide #4 by 2 \divide #4 by \ul%
+ \advance #4 by 350 \ratchet{#4}{500}}%
+
+\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{%
+ \setmorphismwidth{#1}{#2}{#5}{\topw}%
+ \setmorphismwidth{#3}{#4}{#8}{\botw}%
+\ratchet{\topw}{\botw}}%
+
+\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{%
+ \setSquarewidth[#5]%
+ \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]%
+\ignorespaces}%
+
+\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}%
+\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|alrb|}}%
+\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}%
+ {\Squareppp(#1)|#2|/>`>`>`>/}}%
+\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}%
+
+\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohsquares/#4/}%
+
+\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \deltaX%
+\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+
+\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}%
+\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp%
+(#1)|aalmrbb|}}%
+\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}%
+ {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}%
+ {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+
+\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaY=#5%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohSquares/#4/}%
+
+\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \topw%
+\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+
+\def\hSquares{\ifnextchar({\hSquaresp}{\hSquaresp(0,0)}}%
+\def\hSquaresp(#1){\ifnextchar|{\hSquarespp(#1)}{\hSquarespp%
+(#1)|aalmrbb|}}%
+\def\hSquarespp(#1)|#2|{\ifnextchar/{\hSquaresppp(#1)|#2|}%
+ {\hSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}%
+ {\hSquarespppp(#1)|#2|/#3/<\default>}}%
+
+\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dovsquares/#4/}%
+
+\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>%
+[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+ \advance\Ypos by \deltaYprime%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+\ignorespaces}%
+
+\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}%
+\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp%
+(#1)|aalmrbb|}}%
+\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}%
+ {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}%
+ {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+
+
+\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaX=#5%
+\deltaY=#6%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#7]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#8]%
+\dovSquares/#4/\ignorespaces}%
+
+\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}%
+\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}%
+\ratchet{\topw}{\botw}%
+\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}%
+\ratchet{\topw}{\botw}%
+\square(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\topw,\deltaY>%
+ [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+\advance \Ypos by \deltaY%
+\square(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\topw,\deltaX>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+}%
+
+\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}%
+\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp%
+(#1)|alrmlrb|}}%
+\def\vSquarespp(#1)|#2|{\ifnextchar/{\vSquaresppp(#1)|#2|}%
+ {\vSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vSquarespppp(#1)|#2|/#3/}%
+ {\vSquarespppp(#1)|#2|/#3/<\default,\default>}}%
+
+\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp%
+ (#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+ \let\Nodea\nodea\let\Nodeb\nodeb%
+\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos%
+\deltaX=\deltax \deltaY=\deltay \isquare}%
+
+\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}%
+\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}%
+\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}%
+ {\osquareppp(#1)|#2|/>`>`>`>/}}%
+\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}%
+
+\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
+ \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+\ifnextchar|{\cubep}{\cubep|mmmm|}}%
+\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}%
+
+\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}%
+\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}%
+\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}%
+ {\isquareppp(#1)|#2|/>`>`>`>/}}%
+\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}%
+
+\def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{%
+\def\next[##1`##2`##3`##4]{\gdef\Labela{##1}%
+\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]%
+\xend\xpos \yend\ypos%
+\Xend\xend\advance\Xend by -\Xpos%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]%
+\advance\Xpos by-\deltaX%
+\advance\xend by-\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]%
+\advance\Ypos by-\deltaY%
+\advance\yend by-\deltay%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]%
+\advance\Xpos by\deltaX%
+\advance\xend by\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]%
+\ignorespaces}%
+
+\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}%
+
+\def\topppp/#1/<#2>^#3_#4{\:%
+\ifnum#2=0%
+ \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul%
+ \advance \deltax by \defaultmargin \ratchet{\deltax}{100}%
+\else \deltax #2%
+\fi%
+\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy%
+\:}%
+
+\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}%
+\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}%
+\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}%
+\def\to{\ifnextchar/{\toop}{\toop/>/}}%
+
+
+\def\mon{\to/ >->/}%
+\def\epi{\to/->>/}%
+\def\toleft{\to/<-/}%
+\def\monleft{\to/<-< /}%
+\def\epileft{\to/<<-/}%
+
+\def\rlimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{->}(100,0) \endxy}\,}}
+\def\llimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{<-}(100,0) \endxy}\,}}
+
+
+\def\twopppp/#1`#2/<#3>^#4_#5{\:%
+\ifnum0=#3%
+ \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax%
+ by \defaultmargin \ratchet{\deltax}{200}%
+\else \deltax#3 \fi%
+\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)%
+\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}%
+
+\def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}%
+ {\twopppp/#1`#2/<#3>^{#4}_{}}}%
+\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}%
+\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}%
+\def\two{\ifnextchar/{\twop}{\twop/>`>/}}%
+
+\def\twoleft{\two/<-`<-/}%
+
+\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:%
+\ifnum0=#4%
+\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\deltax=\wdth \divide \deltax by \ul \advance \deltax by%
+\defaultmargin \ratchet{\deltax}{300}%
+\else\deltax#4 \fi%
+ \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)%
+ \else \ar@{#2}|{#6}(\deltax,0)\fi%
+\ar@{#1}@<4.5pt>^{#5}(\deltax,0)%
+\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}%
+
+\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp%
+ /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}%
+\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp%
+ /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}%
+\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}%
+ {\threeppp/#1`#2`#3/<#4>^{}}}%
+\def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}%
+ {\threepp/#1`#2`#3/<0>}}%
+\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}%
+
+
+\def\twoar(#1,#2){{%
+ \scalefactor{0.1}%
+ \deltax#1\deltay#2%
+ \deltaX=\ifnum\deltax<0-\fi\deltax%
+ \deltaY=\ifnum\deltay<0-\fi\deltay%
+ \Xend\deltax \multiply \Xend by \deltax%
+ \Yend\deltay \multiply \Yend by \deltay%
+ \advance\Xend by \Yend \multiply \Xend by 3%
+ \ifnum \deltaX > \deltaY%
+ \multiply \deltaX by 3 \advance \deltaX by \deltaY%
+ \else%
+ \multiply \deltaY by 3 \advance \deltaX by \deltaY%
+ \fi%
+ \multiply\deltax by 500%
+ \multiply\deltay by 500%
+ \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX%
+ \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend%
+ \advance \xpos by \Xpos%
+ \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX%
+ \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend%
+ \advance \ypos by \Ypos%
+ \xy \ar@{=>}(\xpos,\ypos) \endxy%
+}\ignorespaces}%
+
+\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}%
+ \def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}%
+ \def\xi{##3}\def\xj{##4}\def\xk{##5}\def\xl{##6}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \def\next<##1,##2>{\deltaX##1\deltaY##2}%
+ \next<#7>%
+ \def\next##1{\topw##1\relax%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi}%
+ % \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\za{}\else\def\za{\relax}\fi}%
+ \next{#6}%
+ \def\next[##1`##2`##3`##4`##5`##6`##7`##8`##9]{%
+ \def\nodeA{##1}\def\nodeB{##2}\def\nodeC{##3}%
+ \def\nodeD{##4}\def\nodeE{##5}\def\nodeF{##6}%
+ \def\nodeG{##7}\def\nodeH{##8}\def\nodeI{##9}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\nextt[##7]}%
+ \def\nextt[##1`##2`##3`##4`##5`##6]{%
+ \def\labelg{##1}\def\labelh{##2}\def\labeli{##3}%
+ \def\labelj{##4}\def\labelk{##5}\def\labell{##6}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7`##8/{%
+ \advance\ypos\deltay
+ \ifx\zf\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeD`0;]\fi
+ \morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeD`\nodeE;\labelf]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xg|/{##7}/<\deltax,0>[\nodeE`\nodeF;\labelg]%
+ \ifx\zg\empty \advance\xpos \deltax
+ \morphism(\xpos,\ypos)<\deltaX,0>[\nodeF`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \ifx\zd\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeA`0;]\fi
+ \ifx\za\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeA`0;]\fi
+ \morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodeA`\nodeB;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/{##3}/<0,-\deltay>[\nodeA`\nodeD;\labelc]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeB`\nodeC;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/{##4}/<0,-\deltay>[\nodeB`\nodeE;\labeld]%
+ \ifx\zb\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeB`0;]\fi
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xe|/{##5}/<0,-\deltay>[\nodeC`\nodeF;\labele]%
+ \ifx\zc\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeC`0;]\fi
+ \ifx\ze\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeC`0;]\fi
+ \nextt/##8/}%
+ \def\nextt/##1`##2`##3`##4`##5/{%
+ \xpos#1\ypos#2\relax%
+ \ifx\zh\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeG`0;]\fi
+ \ifx\zj\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeG`0;]\fi
+ \morphism(\xpos,\ypos)|\xk|/{##4}/<\deltax,0>[\nodeG`\nodeH;\labelk]%
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xl|/{##5}/<\deltax,0>[\nodeH`\nodeI;\labell]%
+ \ifx\zk\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeH`0;]\fi
+ \advance\xpos\deltax
+ \ifx\zi\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeI`0;]\fi
+ \ifx\zl\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeI`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \morphism(\xpos,\ypos)|\xh|/{##1}/<0,-\deltay>[\nodeD`\nodeG;\labelh]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xi|/{##2}/<0,-\deltay>[\nodeE`\nodeH;\labeli]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xj|/{##3}/<0,-\deltay>[\nodeF`\nodeI;\labelj]}%
+ \next/#4/\ignorespaces}%
+
+\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}%
+\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}%
+ {\iiixiiipp(#1)|aalmrmmlmrbb|}}%
+\def\iiixiiipp(#1)|#2|{\ifnextchar/{\iiixiiippp(#1)|#2|}%
+ {\iiixiiippp(#1)|#2|/>`>`>`>`>`>`>`>`>`>`>`>/}}%
+\def\iiixiiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiiipppp(#1)|#2|/#3/}%
+ {\iiixiiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiiippppp(#1)|#2|/#3/%
+ <#4>0<0,0>}{\iiixiiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}%
+
+
+\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \deltaX#7
+ \topw#6
+ \def\next{%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}%
+ \next%
+ \def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\noded{##4}\def\nodee{##5}\def\nodef{##6}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7/{%
+ {\ifx\zc\empty\advance\xpos -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi}%
+ \morphism(\xpos,\ypos)|\xf|/##6/<\deltax,0>[\noded`\nodee;\labelf]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xg|/##7/<\deltax,0>[\nodee`\nodef;\labelg]%
+ {\ifx\zd\empty \advance\xpos by \deltax
+\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi}%
+ \advance\xpos by -\deltax \advance\ypos by \deltay
+ {\ifx\za\empty\advance \xpos by -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi}%
+ \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/##3/<0,-\deltay>[\nodea`\noded;\labelc]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/##4/<0,-\deltay>[\nodeb`\nodee;\labeld]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodec`\nodef;\labele]%
+ \ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}%
+ \next/#4/\ignorespaces}%
+
+\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}%
+\def\iiixiip(#1){\ifnextchar|{\iiixiipp(#1)}%
+ {\iiixiipp(#1)|aalmrbb|}}%
+\def\iiixiipp(#1)|#2|{\ifnextchar/{\iiixiippp(#1)|#2|}%
+ {\iiixiippp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\iiixiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiipppp(#1)|#2|/#3/}%
+ {\iiixiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiippppp(#1)|#2|/#3/%
+ <#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}%
+
+ % \def\node#1(#2,#3)[#4]{%
+ % \expandafter\gdef\csname x@#1\endcsname{#2}%
+ % \expandafter\gdef\csname y@#1\endcsname{#3}%
+ % \expandafter\gdef\csname ob@#1\endcsname{#4}%
+ % \ignorespaces}%
+ %
+ % \newcount\xfinish%
+ % \newcount\yfinish%
+ % \def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+ % \def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+ % \def\arrowpp|#1|/#2/[#3`#4;#5]{%
+ % \xfinish=\csname x@#4\endcsname%
+ % \yfinish=\csname y@#4\endcsname%
+ % \advance\xfinish by -\csname x@#3\endcsname%
+ % \advance\yfinish by -\csname y@#3\endcsname%
+ % \morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+ % <\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]%
+ % }%
+
+\def\node#1(#2,#3)[#4]{%
+\expandafter\gdef\csname x@#1\endcsname{#2}%
+\expandafter\gdef\csname y@#1\endcsname{#3}%
+\expandafter\gdef\csname ob@#1\endcsname{#4}%
+\place(#2,#3)[#4]\ignorespaces}%
+
+\newcount\xfinish%
+\newcount\yfinish%
+\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+\def\arrowpp|#1|/#2/[#3`#4;#5]{%
+\xfinish=\csname x@#4\endcsname%
+\yfinish=\csname y@#4\endcsname%
+\advance\xfinish by -\csname x@#3\endcsname%
+\advance\yfinish by -\csname y@#3\endcsname%
+\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+<\xfinish,\yfinish>[\phantom{\csname ob@#3\endcsname}`\phantom{\csname
+ob@#4\endcsname};#5]%
+}%
+
+
+\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}%
+\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}%
+
+\catcode`\@=\atcode%
+\endinput%
+\entrymodifiers={+!!<0pt,\fontdimen22\textfont2>}%
+
+
+
+ the \xybox does not allow control over *where*,%
+inside the <object> that it builds,%
+the reference point is to be located.%
+
+Accordingly, I've just devised a variant that builds%
+the same kind of compound <object>, but also sets%
+its reference-point to be at the <coord> of the%
+last <POS> within the box; i.e., the <coord> for%
+the <object> that has been built is at the current%
+<POS> when the Xy-pic parsing has been completed.%
+The LRUD extents are the size of the complete box;%
+i.e., *not* the extents of the final <POS>.%
+
+Here is coding that should go in your document's%
+preamble -- eventually it should be added to xy.tex%
+
+
+
+--------- start of new Xy-pic definitions -------%
+
+
+> \makeatletter % adjust the \catcode of @%
+
+ this is a better definition for the new \xyobjbox%
+
+ \xydef@\xyobjbox#1{\xy%
+ \let \PATHafterPOS\PATHafterPOS@default%
+ \let \arsavedPATHafterPOS@@\relax%
+ \let\afterar@@\relax%
+ \POS#1\endxyobj\Edge@c={\rectangleEdge}\computeLeftUpness@}%
+
+> \xydef@\endxyobj{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi%
+> \relax%
+> \dimen@=\Y@max \advance\dimen@-\Y@min%
+> \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi%
+> \dimen@=\X@max \advance\dimen@-\X@min%
+> \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi%
+> \edef\tmp@{\egroup%
+> \setboxz@h{\kern-\the\X@min \boxz@}%
+> \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@%
+> \noexpand\maybeunraise@ \raise\dimen@\boxz@%
+> \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end%
+> \U@c=\the\Y@max \advance\U@c-\the\Y@c%
+> \D@c=-\the\Y@min \advance\D@c\the\Y@c%
+> \L@c=-\the\X@min \advance\L@c\the\X@c%
+> \R@c=\the\X@max \advance\R@c-\the\X@c%
+> }\tmp@}%
+>%
+> \makeatother % revert \catcode of @%
+>%
+> --------- end of new Xy-pic definitions -------%
+\makeatletter%
+\gdef\xymerge@MinMax{}%
+\xydef@\twocell{\hbox\bgroup\xysave@MinMax\@twocell}%
+\xydef@\uppertwocell{\hbox\bgroup\xysave@MinMax\@uppertwocell}%
+\xydef@\lowertwocell{\hbox\bgroup\xysave@MinMax\@lowertwocell}%
+\xydef@\compositemap{\hbox\bgroup\xysave@MinMax\@compositemap}%
+\xydef@\twocelll#1#{\hbox\bgroup\xysave@MinMax\xy@\save\save@\@twocelll{%
+#1}}%
+
+\xydef@\xysave@MinMax{\xdef\xymerge@MinMax{%
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi%
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi%
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi%
+ }}%
+\xydef@\drop@Twocell{\boxz@ \xymerge@MinMax}%
+
+
+\xydef@\twocell@DONE{%
+ \edef\tmp@{\egroup%
+ \X@min=\the\X@min \X@max=\the\X@max%
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@%
+ \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c%
+ \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c%
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@%
+ \computeLeftUpness@%
+ \setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }%
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c%
+ \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false%
+ \edef\Drop@@{\noexpand\drop@Twocell%
+ \noexpand\def\noexpand\Leftness@{\Leftness@}%
+ \noexpand\def\noexpand\Upness@{\Upness@}}%
+ \edef\Connect@@{\noexpand\connect@Twocell%
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi%
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi%
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }%
+ \xymerge@MinMax%
+}%
+\makeatother%
+
+\endinput
+tick:
+
+I write to mention, purely for your information, what finally worked
+out best for me, namely:
+
+\arrow/@{>}|-*@{|}/[a`b;f]
+
+Also functional but with a slightly smaller "tick" is
+\arrow/@{>}|-*@{+}/[a`b;f]
+
diff --git a/macros/generic/diagrams/diagxy/diaxydoc.pdf b/macros/generic/diagrams/diagxy/diaxydoc.pdf
new file mode 100644
index 0000000000..4552b61b66
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/diaxydoc.pdf
Binary files differ
diff --git a/macros/generic/diagrams/diagxy/diaxydoc.tex b/macros/generic/diagrams/diagxy/diaxydoc.tex
new file mode 100644
index 0000000000..fdd013ba21
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/diaxydoc.tex
@@ -0,0 +1,1797 @@
+\documentclass[12pt]{article}
+\usepackage[ocgcolorlinks=true,allcolors=blue]{hyperref}
+ \input diagxy
+ \textwidth 6in
+ \oddsidemargin 0pt
+ \makeindex
+\begin{document}
+\def\xypic{\hbox{\rm\Xy-pic}}
+
+\title{A new diagram package (Version 2015-09-26)}
+\author{Michael Barr\\Dept of Math and Stats, McGill University
+\\barr@math.mcgill.ca}
+ \date{}
+ \maketitle
+\tableofcontents
+
+
+\kern 40pt
+{\narrower
+For the fashion of Minas Tirith was such that it was built on seven levels,
+each delved into a hill, and about each was set a wall, and in each wall
+was a gate.
+
+-- J.R.R.\ Tolkien, ``The Return of the King''\footnote{These macros are
+at the seventh level of nesting. The first level is the code actually
+executed directly by the processor. The second is the microcode, burned
+into the chip, that interprets the assembly language instructions into
+the ones that are directly executed. Level three is the language,
+usually C, but originally Pascal, into which the Web code, the fourth
+level, is compiled. The fifth level is \TeX\ itself, which is best seen
+as a high level programming language for mathematical text processing.
+Level six is the \xypic\ code in which these macros, level seven, are
+written.}
+
+}
+
+
+\kern 5pt
+ Note: This is the first increase in functionality in a couple years.
+Following a suggestion of Gerd Zeibig (who implemented this in a very
+different way), I have added a new feature wherein you can create simple
+identifiers for nodes and then describe arrows between those nodes using
+the identifiers. See~\ref{nodes&arrows} for details, syntax and
+examples. I have also recently added support for loops, both inline and
+in diagrams.
+
+Note (2008-01-21): The main thing that is changed is in the arrow
+specification `.$>$'. What the standard package produces are very fine
+dots. They are actually tiny rules, about .4 pt square. I have changed
+them to being about .7 pt square, which makes them more visible. In
+addition, there is a newdir {d}, used as `{}{d}$>$' (otherwise the {d}
+gets treated as a tail, not a shaft) that substitutes . for those tiny
+rules. The only problem is it works well only for arrows that are
+horizontal or nearly so (up to about 30 degrees). I played with many
+variations of the definition, but could not make any of them work right.
+In principle, I would prefer to get this right, but several hours of
+playing with it did not succeed in solving the `Whack-a-Mole' problem.
+If it looked good at some angles, it was worse at others. I could get
+them looking good for both horizontal and vertical arrows, but then the
+45 degree ones looked awful. Aside from that there are some minor bug
+fixes.
+
+Note (2008-12-02) What has been added are new macros \verb+\Diamond+,
+\verb+\rlimto+, and \verb+\llimto+. \verb+\Diamond+ is capitalized to
+avoid clashing with a standard macro \verb+\diamond+. It has the same
+paramter sets as \verb+\square+. The other two have no parameters and
+are only for the purpose of putting a right, resp. left, arrow to the
+right of or under \verb+\lim+. They will go under in a display or if
+you follow \verb+\lim+ by \verb+\limits+.
+
+Note (2015-09-27) The details of handling \verb.\node. and \verb.\arrow.
+have been changed so that \verb.\node. lays down ink by itself and
+\verb.\arrow. no longer adds the nodes. There are two reasons for this
+change. Someone wrote me complaining that when a node was put in twice
+the regisration was not perfect. I could not see it, but I made the
+change and it satisfied him. Much more importantly, it allows a node to
+appear that has no arrow to or from it. This makes it possible to work
+well with the \verb.\uncover. macro in beamer (see ``Use with beamer''
+below).
+
+\section{Why another diagram package?}
+
+This started when a user of my old package, diagram, wrote to ask me if
+dashed lines were possible. The old package had dashed lines for
+horizontal and vertical arrows, but not any other direction. The reason
+for this was that \LaTeX\ used rules for horizontal and vertical arrows,
+but had its own fonts for other directions. While rules could be made
+any size, the smallest lines in other directions were too long for
+decent looking dashes. Presumably, Lamport was worried about compile
+time and file size if the lines were too short, considerations that have
+diminished over the years since. Also arrows could be drawn in only 48
+different directions, which is limiting. My macros were not very well
+implemented for slopes like 4 and 1/4, since I never used such lines.
+
+There was certainly an alternative, \xypic, for those who wanted
+something better. But it was hard to learn and I was not entirely happy
+with the results. The basic interface used an
+\index{\backslash halign}\verb.\halign.. This
+meant that no extra space was allotted to an arrow that had a large
+label. In addition, the different slots could have different horizontal
+size, which could result in a misshapen diagram. I used it in a paper
+that had a `W' shaped diagram whose nodes had different widths and the
+result was quite obviously misshapen. On the other hand, the graphics
+engine underlying \xypic\ is really quite remarkable and it occurred to
+me that I could try to redraft diagram as a front end. The result is
+the current package. It has been tested mainly with version 3.7, so
+there is no guarantee it would work with any earlier version (or, for
+that matter, later). A limited amount of testing with version 3.6
+suggests that the only thing that does not work is the 2-arrows; these
+come out vanishingly short.
+
+So despite the desire for logical programming, it still seems that for
+some purposes, it is desirable to have a system in which you specify
+what goes where and where the arrows are drawn.
+
+\subsection{The latest version}
+The latest version can be downloaded at
+\verb,ftp://ftp.math.mcgill.ca/pub/barr/diagxy.zip, or by anonymous ftp
+from \verb,ftp.math.mcgill.ca//pub/barr/diagxy.zip,.
+
+
+\subsection{Main features}
+
+\begin{itemize}
+ \item A general arrow drawing function
+\index{\backslash morphism}\verb.\morphism..
+ \item Various common diagram shapes such as squares, triangles, etc.
+ \item A few special shapes such as cube and $3\times3$ diagrams.
+ \item Small 2-arrows that can be placed anywhere in a diagram, much
+like \LaTeX's
+picture
+ environment.
+ \item A uniform syntax, while allowing access to all of \xypic's
+capabilities
+ \item Never expires and does not request acknowledgment.
+\end{itemize}
+
+\subsection{Compatibility}
+The syntax described below is not compatible with the original diagram
+package. Every front end of this sort represents a trade-off between
+simplicity and utility. A package that simply upgraded the syntax to
+allow more dashed (and dotted) lines would have been just as easy to
+implement, but would have made poor use of the wonderful possibilities
+of the underlying \xypic\ package. Also there would have been too many
+different arrow specifications (they would have had to go at least in
+the range $[-9,9]$) for easy memory) and still would not have included
+things like inclusion arrows. To those who would have liked a simpler
+syntax, I apologize. Those who would want more flexibility, I remind
+that the entire \xypic\ package is there for use.
+
+\subsection{Errant spaces}
+ There is one point that cannot be made too strongly. {\em Watch for
+errant spaces.} Unlike the old diagram package, which was carried out in
+math mode so that spaces were ignored, \xypic\ is not in math mode and
+spaces will mess up your diagrams. On the other hand, it will not be
+necessary to enclose duplicate nodes inside
+\index{\backslash phantom}\verb.\phantom., since the
+registration between different nodes is perfect. In the old package,
+for reasons that I now understand, objects did not always register
+properly. This was a flaw built in to the very heart of the package and
+is not worth correcting, although it could have been done better in the
+first place. If you see an object in double vision, then the almost
+certain cause is that a space has gotten in there somewhere. I have
+attempted to prevent this by liberal use of
+\index{\backslash ignorespaces}\verb.\ignorespaces. in the
+definitions, but one cannot always be sure and while testing, I found a
+number seemingly innocuous spaces that messed up diagrams. When in
+doubt, always terminate a specification with a
+\index{%}\verb.%.. See the
+examples.
+
+\subsection{Font sizes}
+ According to the documentation of \xypic, the declarations
+\begin{verbatim}
+\xyoption{tips}
+\SelectTips{xy}{12}
+\end{verbatim}
+ \index{tips} will cause 12 point tips to be used. This does not appear
+to be the case. The only way I can seem to get larger font sizes is to
+add \index{\backslash fontscale{x}}\verb.\fontscale{x}., with \index{x}\verb.x.
+taking on the values \verb.0,h,1,2,3,4,5., after \xypic\ is loaded.
+With \verb.11pt. you will want \verb.h. and with \verb.12pt. you will
+want 1. The others are in case you use larger sizes for transparencies
+or for later reduction, in conjunction with extarticle.cls. While on
+the subject, I might mention that if
+you want thicker arrow shafts without enlarging anything else you could
+add the declaration
+\begin{verbatim}
+\font\xydashfont=xydash scaled \magstep1
+\end{verbatim}
+or even larger. However, this does not thicken the arrow tips and is
+not really recommended. There is probably no way (short of creating
+your own fonts) to thicken the tips without also lengthening them.
+
+I had some trouble generating the font files at the larger sizes, so the
+file xyfonts.zip, found at my ftp site (ftp.math.mcgill.ca/pub/barr) has
+fonts for the ljfour generated at all sizes from 10--20 points.
+
+\subsection{Acknowledgments}
+ First, I would like to thank Kris Rose for a superb programming job
+that made this package possible. The original versions of \xypic\ were
+based on matrices, but this version includes code to place an arrow with
+two nodes (more precisely, their centers) a user-definable distance
+apart and that is exactly what I needed. Second I would like to thank
+Ross Moore who answered innumerable questions about the use of the
+macros that the documentation did not answer or at least I could not
+understand what it said. I thank Donald Arsenau answered several of my
+questions about the internals of \TeX\ that I did not understand
+clearly and Steve Bloom who found a couple
+of typos in the first version of these notes. Finally, I would like to
+thank all those, but especially Charles Wells, who gave me opinions on
+the best syntax. But I made the final decisions and if you have any
+complaints, you can direct them to me. Not that I am likely to change
+anything at this date.
+
+\subsection{License}
+ The use of this package is unrestricted. It may be freely distributed,
+unchanged, for non-commercial or commercial use. If changed, it must be
+renamed. Inclusion in a commercial software package is also permitted,
+but I would appreciate receiving a free copy for my personal examination
+and use. There are no guarantees that this package is good for
+anything. I have tested it with LaTeX 2e, LaTeX 2.09 and Plain TeX.
+Although I know of no reason it will not work with AMSTeX, I have not
+tested it.
+
+\section{The basic syntax}
+
+The basic syntax is built around an operation
+\index{\backslash morphism}\verb.\morphism. that is
+used as \index{\backslash morphism}
+ \begin{verbatim}
+ \morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L]
+ \end{verbatim}
+ The last group of parameters is required. They are the source and
+target nodes of the arrow and the label. The remaining parameters are
+optional and default to commonly used values. Currently, the
+\verb.L.\index{label} is set in \index{\backslash scriptstyle}\verb.\scriptstyle.
+size, but this can easily be changed by putting
+\index{\backslash let\backslash labelstyle=\backslash textstyle}
+\verb.\let\labelstyle=\textstyle. in
+your file.
+
+ The parameters \verb.x. and \verb.y. give the location of the source
+node within a fixed local coordinate system and \verb-x+dx- and
+\verb-y+dy- locate the target. To be precise, the first coordinate is
+the horizontal center of the node and the second is that of the base
+line. These distances are given in terms of \index{\backslash ul}\verb.\ul.'s,
+(for unitlength), which is user assignable, but currectly is .01em. The
+placement parameter \verb.p. is one of \verb.a,b,l,r,m. that stand for
+above, below, left, right, or mid and describe the positioning of the
+arrow label on the arrow. If it is given any value other than those
+five, it is ignored. We describe below why you might want it ignored.
+The label \index{m}\verb.m. stands for a label positioned in the middle
+of a split arrow. When used on a non-vertical arrow, \index{a}\verb.a.
+positions the label above the arrow and \index{b}\verb.b. positions it
+below. On a vertical arrow, the positioning depends on whether the
+arrow points up or down. Similarly, when used on a non-horizontal
+arrow, \index{l}\verb.l. positions the label to the left and
+\index{r}\verb.r. positions it to the right, while on a horizontal arrow
+it depends on which way it points.
+
+The shape parameter \verb.sh. describes the shape of the arrow. An
+arrow is thought of as consisting of three parts, the tail, the shaft
+and the head. You may specify just the head, in which case the shaft
+will be an ordinary line, or all three. However, since the tail can be
+(and usually is) empty, in practice you can also describe the shaft and
+tail. In addition, it is possible to modify the arrow in various ways.
+Although the parameter is shown within braces, the braces can be omitted
+unless one of the modifier characters is \verb./., in which case, {\em
+the entire parameter} must be put in braces. It is important to note
+that it will not work just to put the \verb./. inside the braces, since
+this will interfere with the internal parsing of \xypic. The head and
+tail shapes are basically one of \index{>}\verb.>., \index{>>}\verb.>>.,
+\verb.(., \verb.)., \index{>}\verb*+>+, and \index{<}\verb*+<+. Each of
+these may also be preceded by \index{^}\verb.^. or \index{_}\verb._. and
+others are user definable. For details, see the \xypic\ reference
+manual. The first of these is an ordinary head, while the second is for
+an epic arrow. The third is not much used, but the superscripted
+version makes and inclusion tail, as will be illustrated below. The
+reverse ones give reversed arrowheads. The sign \verb*+ + stands for an
+obligatory space and it leaves extra space for a tailed (monic) arrow,
+which otherwise runs into the source node. Although there are many
+possibilities for shafts, including alphanumeric characters, the ones
+that mainly interest us are: \index{-}\verb.-., which is an ordinary
+shaft, \index{--}\verb.--., which produces a dashed arrow,
+\index{=}\verb.=., which gives a double arrow (although with only one
+arrowhead), and ., which makes a dotted arrow. Thus \index{>}\verb.>.
+or \index{->}\verb.->. will produce an ordinary arrow,
+\index{->>}\verb.->>. an epic arrow, \index{ >->}\verb*+ >->+ makes a
+monic arrow, and \index{-->>}\verb.-->>. would make a dashed epic arrow.
+The descriptions \index{<-}\index{<<-}\verb.<-,<<-,. \index{<-<
+}\verb*+<-< +, and \index{<<--}\verb.<<--. give the reversed versions.
+Note that \index{<}\verb.<. does not give a reversed arrow, since
+\xypic\ interprets that as a reversed head, not a tail.
+
+If the shape parameter begins with an \index{@}\verb.@., it is
+interpreted differently. In that case, it has the form
+\index{@{shape}@}\verb.@{shape}@. modifier, where the modifier is as
+described in the \xypic\ reference guide. I just mention a couple of
+them. The parameter \index{@{->}@<3pt>}\verb.@{->}@<3pt>., for example,
+would give an ordinary arrow moved three points in the direction
+perpendicular to that of the arrow. If you give
+\index{{@{->>}@/^5pt/}}\verb.{@{->>}@/^5pt/}., you will get an epic
+arrow that is curved in the direction perpendicular to the direction of
+the arrow by five points. It is imperative that a specification such as
+\index{@{>}@/5pt/}\verb.@{>}@/5pt/. be enclosed in braces because of the
+\index{/}\verb./.s.
+
+\subsection{A word about parameters}
+ I have already mentioned the necessity of enclosing certain arrow shape
+specifications in braces. Because of the way \TeX\ operates, I have
+used a number of different delimiters: \index{(}\verb.(.,
+\index{)}\verb.)., \index{|}\verb.|., \index{/}\verb./.,
+\index{<}\verb.<., \index{>}\verb.>., \index{[}\verb.[.,
+\index{]}\verb.]., \index{`}\verb.`., and \index{;}\verb.;.. Any of
+these that appear inside an argument could conceivably cause problems.
+They were chosen as the least likely to appear inside mathematics
+(except for \index{(,)}\verb.(,). which appear in positions that are
+unlikely to cause problems). However, be warned that this is a possible
+cause of mysterious error messages. If this happens, enclosing the
+offending parameter in braces should cure the problem. The exceptions
+come when the braces interfere with \xypic's somewhat arcane parsing
+mechanism. One place it imperative to use braces is if you attempt to
+use a disk as a tip. Although most tips do not have to be enclosed in
+braces, you get a small solid disk tip from \index{{*}}\verb.{*}. and
+not from \index{*}\verb.*. (see the note at the bottom of the first
+column of page 42 in the reference manual. The first three of
+\begin{verbatim}
+\morphism(0,300)|a|/-*/<500,0>[A`B;f]
+\morphism(0,0)|a|/{-*}/<500,0>[A`B;f]
+\morphism(0,0)|a|/{*}/<500,0>[A`B;f]
+\morphism(0,0)|a|/-{*}/<500,0>[A`B;f]
+\end{verbatim}
+ give error messages. Only the fourth works:
+ $$\bfig
+\morphism(0,0)|a|/-{*}/<500,0>[A`B;f]
+ \efig$$
+
+In addition to the diagrams, there are macros that are intended to be
+used inline to make horizontal arrows, pointing left or right, plain,
+monic, epic, or user-definable shapes, and calculating their own length
+to fit the label. Finally, there is a macro for making short 2-arrows
+that may be placed (actually, \index{\backslash place}\verb.\place.d) anywhere in
+a diagram.
+
+
+\section{Defined diagrams}
+
+Using the basic
+\index{\backslash morphism}\verb.\morphism. macro, I have a defined a number of
+diagrams: squares (really rectangles) and variously oriented triangles
+and a few compound diagrams. The basic shapes are exactly the same as
+in the old diagram package, but the options are done entirely
+differently. Here is the syntax of the
+\index{\backslash square}\verb.\square. macro:
+ \begin{verbatim}
+ \square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]
+ \end{verbatim}
+ Each of the first four sets of parameters is optional and any subset of
+them can be omitted. (Note that only the sets can be omitted, once you
+give \index{dx}\verb.dx., you also have to give \index{dy}\verb.dy. and
+so on.) The first set gives the horizontal and vertical position (in a
+local coordinate system) of the lower left corner of the square, the
+next four give the label placements using the same five characters
+previously described. The next four give the shapes of the arrows using
+the same syntax as discussed above. The last group is horizontal and
+vertical size of the square. More precisely, the \index{x}\verb.x.
+coordinate is that of the midpoint of the node, while the
+\index{y}\verb.y. coordinate is that of the baseline of the node. This
+is entirely based on \xypic.
+
+In the case of other shapes, discussed below, the positioning parameter
+may be different. The \index{x}\verb.x. coordinate is the midpoint of
+the leftmost node and the \index{y}\verb.y. coordinate is the baseline
+of the lowest node. In the case of the
+\index{\backslash qtriangle}\verb.\qtriangle.,
+\index{\backslash Vtriangle}\verb.\Vtriangle., and
+\index{\backslash Ctriangle}\verb.\Ctriangle. described below, these are different
+nodes. What this positioning means is that if you specify the
+coordinates and sizes correctly the shapes will automatically fit
+together. The last example on Page~\pageref{TTTdiag} illustrates this.
+
+Here is a listing of the shapes, together with the groups of parameters.
+In all cases, the first four groups are optional and any subset of them
+will work. However, they must come in the order given. Note that the
+names of the triangles are related to the shape as the shape that best
+approximates the shape of the letter. For example, a
+\index{\backslash ptriangle}\verb.\ptriangle. is a right triangle that has its
+hypotenuse going from upper right to lower left. Triangles with lower
+case names have their legs horizontal and vertical and the dimension
+parameters are the lengths of the legs. Those with capitalized names
+have their hypotenuse horizontal or vertical. In those cases, one of
+\index{dx}\verb.dx. or \index{dy}\verb.dy. is the length of a leg and
+the other is {\em half} the length of the hypotenuse. In all cases, the
+order of the nodes and of the arrows is linguistic, first moving from
+left to right and then down. The defaults are reasonable, but with
+triangles, there is not always a natural direction for arrows. I always
+made mistakes in the order with my macros and this is certainly a
+defect. But the order is the same. In every case the braces around the
+shape specification can be removed unless it includes the following
+delimiter (that is, \index{`}\verb.`. or \index{/}\verb./., as the case
+may be.)
+ \begin{verbatim}
+\square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>%
+ [N`N`N`N;L`L`L`L]
+\ptriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\qtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\dtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\btriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Atriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Vtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Ctriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Dtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Atrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\Vtrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\Ctrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\Dtrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\end{verbatim}
+ \index{\backslash square} \index{\backslash ptriangle} \index{\backslash qtriangle} \index{\backslash dtriangle}
+\index{\backslash btriangle} \index{\backslash Atriangle} \index{\backslash Vtriangle}
+\index{\backslash Ctriangle} \index{\backslash Dtriangle} \index{\backslash Atrianglepair}
+\index{\backslash Vtrianglepair} \index{\backslash Ctrianglepair} \index{\backslash Dtrianglepair}
+Note that the
+\verb.%. signs are required if you break the
+macro at such points. See also the discussion of errant spaces above.
+
+To make a diagram, you have to enclose it inside \index{\backslash xy ...
+\backslash endxy}.\verb,\xy ... \endxy,. You will usually want it
+displayed,
+for which the simplest way is to enclose it in \index{$$\xy ...
+\endxy$$}\verb,$$\xy...\endxy$$,. In previous versions of this, the
+macros
+\index{\backslash bfig}\verb.\bfig. and \index{\backslash efig}\verb.\efig. be synonyms for
+ were synonyms for
+\index{\backslash xy}\verb.\xy. and \index{\backslash endxy}\verb.\endxy.,
+resp. They have now been redefined to also put the box produced by
+\verb.\xy. into a \verb.\vcenter. box. The effect of this is that when
+\index{\backslash eqno}\verb.\eqno. is used with a diagram, the
+resulting equation number will be vertically centered.
+
+
+\section{Examples}
+
+Many people---including me---learn mainly by example and
+I will give a number of examples here. The formal
+syntax that is not given here can be learned in the \xypic\ reference
+manual. More samples from an actual paper can be found in
+\verb,ftp.math.mcgill.ca/pub/barr/derfun.tex,. If you want to compile
+that paper, you will need \verb,tac.cls,, available from \verb,tac.ca,.
+We begin with \index{\backslash morphism}
+\begin{verbatim}
+ $$\bfig
+ \morphism[A`B;f]
+ \morphism(0,300)[A`B;f]
+ \morphism(0,600)|m|[A`B;f]
+ \morphism(0,900)/<-/[A`B;f]
+ \morphism(900,500)<0,-500>[A`B;f]
+ \morphism(1200,0)<0,500>[A`B;f]
+ \efig$$
+\end{verbatim}
+which gives the diagram
+ $$\bfig
+ \morphism[A`B;f]
+ \morphism(0,300)[A`B;f]
+ \morphism(0,600)|m|[A`B;f]
+ \morphism(0,900)/<-/[A`B;f]
+ \morphism(900,500)<0,-500>[A`B;f]
+ \morphism(1200,0)<0,500>[A`B;f]
+ \efig$$
+\begin{verbatim}
+ $$\bfig
+\square[A`B`C`D;e`f`g`m]
+ \efig$$
+\end{verbatim}
+ produces
+ $$\bfig
+\square[A`B`C`D;e`f`g`m]
+ \efig$$
+ This can be modified, for example
+\begin{verbatim}
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \efig$$
+\end{verbatim}
+ produces
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \efig$$
+ This can be put together with a morphism as follows:
+\begin{verbatim}
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \morphism(500,500)|m|/.>/<-500,-500>[B`C;h]
+ \efig$$
+\end{verbatim}
+ \index{\backslash square}
+ which makes a familiar diagram:
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \morphism(500,500)|m|/.>/<-500,-500>[B`C;h]
+ \efig$$
+ The same diagram could have been made by
+\begin{verbatim}
+ $$\bfig
+ \ptriangle|alm|/>>`>`.>/[A`B`C;e`f`h]
+ \dtriangle/`>` >->/[B`C`D;`g`m]
+ \efig$$
+\end{verbatim}
+\index{\backslash ptriangle} \index{\backslash dtriangle}
+
+There are four macros for making pairs of triangles put together:
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+ comes from
+\begin{verbatim}
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+\end{verbatim}
+ \index{\backslash Vtrianglepair}
+ \index{\backslash Atrianglepair}
+ \index{\backslash Ctrianglepair}
+ \index{\backslash Dtrianglepair}
+
+ The other three are called \verb.\Atrianglepair.,
+\verb.\Ctrianglepair., and \verb.\Dtrianglepair..
+
+ You can fit two squares together, horizontally:
+\begin{verbatim}
+ $$\bfig
+\square|almb|[A`B`C`D;f`g`h`k]
+\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\square|almb|[A`B`C`D;f`g`h`k]
+\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
+ \efig$$
+ or vertically
+\begin{verbatim}
+ $$\bfig
+\square(0,500)|alrm|[A`B`C`D;f`g`h`k]
+\square/`>`>`>/[C`D`E`F;`l`m`n]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\square(0,500)|alrm|[A`B`C`D;f`g`h`k]
+\square/`>`>`>/[C`D`E`F;`l`m`n]
+ \efig$$
+or a square and a triangle
+\begin{verbatim}
+ $$\bfig
+\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
+ \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
+ rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
+ \efig$$
+\end{verbatim}
+ gives the diagram
+ $$\bfig
+\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
+ \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
+ rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
+ \efig$$
+ This diagram is on page 361 of the third edition of Category Theory for
+Computing Science to describe recursion.
+ Here is an example using the procedure for sliding an arrow sideways.
+This one could even be used in a text,
+ \index{sliding arrows}
+$\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B;d]
+\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B;e]\endxy$
+ which was made using
+\begin{verbatim}
+$\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B;d]
+\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B;e]\endxy$
+\end{verbatim}
+ Indidentally, if you don't put this in math mode, the diagram will come
+out too low, for reasons I do not understand but must be buried within
+the \xypic\ code.
+Later we will introduce a number of inline procedures.
+
+Something a bit different that illustrates the use of another shaft
+
+\index{=}\verb.=. that gives a 2-arrow, as well as curved arrows:
+\begin{verbatim}
+ $$\bfig
+\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B;f]
+\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B;g]
+\morphism(250,50)|a|/=>/<0,-100>[``]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B;f]
+\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B;g]
+\morphism(250,50)|a|/=>/<0,-100>[`;]
+ \efig$$
+ In order to use curved arrows, you must insert
+\index{\backslash xyoption{curve}}\verb.\xyoption{curve}.
+into your file. Here are two ways of doing three arrows between two
+objects, depending on what you like:
+\begin{verbatim}
+ $$\bfig
+ \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B;h]
+ \efig$$
+\end{verbatim}
+ which gives
+ $$\bfig
+ \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B;h]
+ \efig$$
+and
+\begin{verbatim}
+ $$\bfig
+ \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B;h]
+ \efig$$
+\end{verbatim}
+ which gives
+ $$\bfig
+ \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B;h]
+ \efig$$
+ Either of these could also be used inline.
+
+ There is a macro
+\index{\backslash place}\verb.\place.
+that places that object anywhere. I have changed the name from
+\verb.\put. in order to avoid clashing with the \LaTeX\ picture mode's
+\index{\backslash put}\verb.\put.. The syntax is
+\verb.\place(x,y)[object]. that places the object at \verb.(x,y)..
+There is also an optional parameter that can be used to add any of
+\xypic's positioning parameters: L, R, D, U, CL, CR, CD, CU, C, LD, RD,
+LU, RU. For example
+\verb.\place[L](x,y)[object]. will left align the object. The default
+is to center align it.
+Here is an example that uses a construction that is undocumented here,
+but uses a documented \Xy\ construction:
+\begin{verbatim}
+\newbox\anglebox
+\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}
+ \def\angle{\copy\anglebox}
+ $$\bfig
+ \square[A`B`C`D;f`g`h`k]
+ \place(100,400)[\angle]
+ \efig$$
+\end{verbatim}
+\newbox\anglebox
+\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}
+ \def\angle{\copy\anglebox}
+ $$\bfig
+ \square[A`B`C`D;f`g`h`k]
+ \place(100,400)[\angle]
+ \efig$$
+ Notice that you get a headless arrow by using
+\index{\backslash ar@{-}}\verb.\ar@{-}..
+
+Here is a special code installed at the request of Jonathon Funk:
+\begin{verbatim}
+ $$\bfig
+\pullback|brrb|<800,800>[P`X`Y`Z;t`u`v`w]%
+|amb|/>`-->`>/<500,500>[A;f`g`h]
+ \efig$$
+\end{verbatim}
+ \index{\backslash pullback}
+ $$\bfig
+\pullback|brrb|<800,800>[P`X`Y`Z;t`u`v`w]%
+|amb|/>`-->`>/<500,500>[A;f`g`h]
+ \efig$$
+The full syntax for this is
+\begin{verbatim}
+\pullback(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx`dy>[N`N`N`N;L`L`L]%
+ |ppp|/{sh}`{sh}`{sh}/<dx,dy>[N;L`L`L]
+\end{verbatim}
+ Of these only the nodes placed inside brackets are obligatory. The
+first sets of parameters are exactly as for
+\index{\backslash square}\verb.\square. and the
+remaining parameters are for the nodes and labels of the outer arrows.
+There is no positioning parameters for them; rather you set the
+horizontal and vertical separations of the outer node from the square.
+
+Here are some more special constructions. In general, if you are doing
+a square, you should use
+\index{\backslash Square}\verb.\Square. instead of
+\index{\backslash square}\verb.\square.
+because if figures its own width. The syntax is almost the same, except
+that
+\index{dx}\verb.dx. is omitted. For example,
+\begin{verbatim}
+ $$\bfig
+ \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)`
+ {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
+ \efig$$
+\end{verbatim}
+ will produce the square
+ $$\bfig
+ \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)`
+ {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
+ \efig$$
+ There are a couple of points to note here. Note the use of the
+argument
+\index{^{ (}->}\verb.^{ (}->. to get the inclusion arrow. The
+complication is
+created by the necessity of adding a bit of extra space before the hook.
+You get pretty much the same effect by putting a bit of extra space
+after the node:
+\begin{verbatim}
+ $$\bfig
+ \Square/^(->`>`>`^(->/<350>[{\rm Hom}(A,2^B)\,`{\rm Sub}(A\times B)`
+ {\rm Hom}(A',2^{B'})\,`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
+ \efig$$
+\end{verbatim}
+ The full syntax is
+\begin{verbatim}
+ \Square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dy>[N`N`N`N;L`L`L`L]
+\end{verbatim}
+
+There are also macros for placing two
+\index{\backslash Square}\verb.\Square.s together
+horizontally or vertically. The first is
+\index{\backslash hSquares}\verb.\hSquares. with the
+syntax
+\begin{verbatim}
+\hSquares(x,y)|ppppppp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dy>[N`N`N`N`N`N;L`L`L`L`L`L`L]
+\end{verbatim}
+The second is
+\index{\backslash vSquares}\verb.\vSquares. with a similar syntex except that there
+are two
+\index{dy}\verb.dy. parameters, one for each square:
+\begin{verbatim}
+\hSquares(x,y)|ppppppp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dy,dy>[N`N`N`N`N`N;L`L`L`L`L`L`L]
+\end{verbatim}
+ Similarly, there are four macros for making pairs of triangles put
+together. For example,
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+ comes from
+\begin{verbatim}
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+\end{verbatim}
+
+There is a macro for making cubes\index{\backslash cube}. The syntax is
+\begin{verbatim}
+ \cube(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]%
+ (x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]%
+ |pppp|/{sh}`{sh}`{sh}`{sh}/[L`L`L`L]
+\end{verbatim}
+ The first line of parameters is for the outer square and the second for
+the inner square, while the remaining parameters are for the arrows
+between the squares. Only the parameters in square brackets are
+required; there are defaults for the others. Here is an example:
+\begin{verbatim}
+ $$\bfig
+\cube(0,0)|arlb|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]%
+(300,300)|arlb|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']%
+ |mmmm|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+\end{verbatim}
+ gives the somewhat misshapen diagram
+ $$\bfig
+\cube(0,0)|arlb|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]%
+(300,300)|arlb|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']%
+ |mmmm|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+ because the parameters were oddly chosen. The defaults center the
+squares. I discovered accidently, while debugging the cube that what I
+thought was an out-of-range choice of parameters would produce an offset
+cube:
+\begin{verbatim}
+ $$\bfig
+\cube|arlb|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]%
+(400,400)|arlb|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+\end{verbatim}
+ gives
+ $$\bfig
+\cube|arlb|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]%
+(400,400)|arlb|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+
+
+\subsection{Nodes and arrows}\label{nodes&arrows}
+Following a suggestion of Gerd Zeibig, who has implemented this in a
+very different way, I have added a feature wherein you can specify nodes
+and arrows between them. The nodes can be given simple identifiers and
+those used to specify the source and target of the arrows. The way it
+works is that \verb.\node id(x,y)[N]. assigns the node \verb.N. at
+position \verb.(x,y). to the identifier \verb.id. which is then used
+to refer to that node. Then \verb.\arrow[id`id;L]. is used to place
+arrows at the nodes identified by the identifiers and with label
+\verb.L.. There are also optional arguments for label position and
+arrowhead shape, so the full macro looks like \verb.|p|/sh/[id`id;L]..
+Here is an example. The code
+\begin{verbatim}
+$$\bfig
+\node a(0,0)[A\otimes B]
+\node 3b(700,300)[A'\otimes B']
+\node @(0,-500)[A''\otimes B'']
+\node xyzzy(500,0)[C\otimes D]
+\arrow/->>/[a`3b;f]
+\arrow|l|[a`@;g]
+\arrow|b|/<-/[xyzzy`@;i\otimes j]
+\efig$$
+\end{verbatim}
+produces the diagram
+$$\bfig
+\node a(0,0)[A\otimes B]
+\node 3b(700,300)[A'\otimes B']
+\node @(0,-500)[A''\otimes B'']
+\node xyzzy(500,0)[C\otimes D]
+\arrow/->>/[a`3b;f]
+\arrow|l|[a`@;g]
+\arrow|b|/<-/[xyzzy`@;i\otimes j]
+\efig$$
+
+Notice, incidentally, that the nodes can be defined either inside or
+outside math mode. If it is done outside, the definitions will persist
+(unless redefined) and may be reused. This is useful when there are two
+very similar diagrams. Also note that the identifiers can be any
+string.
+
+An example of a large diagram done this way appears in~
+
+\subsubsection{Use with beamer}
+ The way to get a diagram gradually grow within a slide is illustrated
+with the following code. Unfortunately, it cannot be displayed here for
+the document class has to be beamer, but you can see what is going on by
+compiling:
+
+\begin{verbatim}
+\documentclass{beamer}
+\pdfoutput1
+\input diagxy
+\begin{document}
+
+\begin{frame}
+ $$\bfig
+ \node 1(0,500)[A]
+ \node 2(500,500)[B]
+ \node 3(0,0)[C]
+ \node 4(500,0)[D]
+ \uncover<2,4>{\arrow[1`2;]}%
+ \uncover<3->{\arrow[1`3;]}%
+ \uncover<4>{\arrow[2`4;]}%
+ \uncover<5>{\arrow[3`4;]}%
+ \efig$$
+
+\end{frame}
+\end{document}
+\end{verbatim}
+Note that the \% at the end of the uncover lines are needed. I do not
+have any explanation, but the arrows get offset without them. This is
+odd because, generally speaking, extra spaces and even blank lines get
+ignored inside math displays.
+
+
+\subsection{Complex diagrams}\label{complex}
+In homological algebra one often has a $3\times3$ diagram, with or
+without 0's on the margins. There is a macro to do that:
+ \index{3 by 3}\index{\backslash iiixiii}
+\begin{verbatim}
+ $$\bfig
+\iiixiii(0,0)|aammbblmrlmr|/>`>`>`>`>`>`>`>`>`>`>`>/<500,500>{'5436}%
+ <400,400>[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+\end{verbatim}
+ that gives
+ $$\bfig
+\iiixiii(0,0)|aammbblmrlmr|/>`>`>`>`>`>`>`>`>`>`>`>/<500,500>{'5436}%
+ <400,400>[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ Here is the explanation. The arrow parameters are not given in the
+usual order, but rather first all the horizontal arrows and then all the
+vertical ones, each in their usual order. The nodes are given in the
+usual order. The fifth parameter is the octal number
+\verb.`5436. (In
+\TeX, the
+\verb.'. introduces octal numbers and
+\verb.". introduces
+hexadecimal numbers) which corresponds to the binary number
+101,100,011,110 that describes the distribution of the 0's around the
+margins. The same results would have been obtained if the number had
+been the hexadecimal number
+\verb."B1E. or the decimal number
+
+\verb.2846.. The sixth parameter gives the horizontal and vertical
+offset of the 0's, which you often want smaller than the others. You
+must not give the sixth parameter unless you have given a value (which
+could be 0) to the fifth or an error condition will result. Note that
+the positioning parameters ignore the 0's so that it is the lower left
+node that appears at the position
+\verb.(x,y).. As usual, there are
+defaults.
+ \begin{verbatim}
+ $$\bfig
+\iiixiii[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii%
+ {'5436}[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii{'5436}<250,450>[A'`B'`C'`A`B`C`A''`B''`C'';%
+f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\iiixiii[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii%
+ {'5436}[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii{'5436}<250,450>[A'`B'`C'`A`B`C`A''`B''`C'';%
+f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+
+A similar macro\index{3 by 2}%
+\index{\backslash iiixii}\verb.\iiixii. has been added for a map between exact
+sequences, with parameters similar to the above. An actual example is
+\begin{verbatim}
+ $$\bfig
+ \iiixii|aaaalmr|<1000,800>[H`G`F`H\oplus H_0`G\oplus H_0\oplus F_0`
+F\oplus F_0; f`g`\pmatrix{f&0\cr0&1\cr0&0}`\pmatrix{g&0&0\cr0&0&1}`
+ \pmatrix{1\cr0}`\pmatrix{1\cr0\cr0}`\pmatrix{1\cr0}]
+\efig$$
+\end{verbatim}
+ which gives
+ $$\bfig
+ \iiixii|aaaalmr|<1000,800>[H`G`F`H\oplus H_0`G\oplus H_0\oplus F_0`
+F\oplus F_0; f`g`\pmatrix{f&0\cr0&1\cr0&0}`\pmatrix{g&0&0\cr0&0&1}`
+ \pmatrix{1\cr0}`\pmatrix{1\cr0\cr0}`\pmatrix{1\cr0}]
+\efig$$
+ The general syntax is
+\begin{verbatim}
+ \iiixii(x,y)|ppppppp|/1`2`3`4`5`6`7/<dx,dy>{n}<dx'>[...]
+\end{verbatim}
+ with the usual meaning. The number n is a number between 0 and 15
+(default 15) that specifies whether and where 0's appear (think binary,
+with the high bit at the upper left) and dx' specifies the separation of
+the zeroes. You get two squares side by side if both n and dx' are 0.
+
+\subsection{Empty placement and moving labels}
+ The label placements within \verb.|p|. is valid only for
+\verb.x=a,b,r,l,m.. If you use any other value (or leave it empty) the
+label entry is ignored, but you can use any valid \xypic\ label, as
+described in Figure 13 of the reference manual. One place you might
+want to use this is for the placement of the labels along an arrow. In
+\xypic\ the default placement of the label is midway between the
+midpoints of the nodes. If the two nodes are of widely different sizes,
+this can result in strange placements; therefore I always place them
+midway along the arrow. However, as the following illustrates, this can
+be changed.
+ \begin{verbatim}
+ $$\bfig
+\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+ \efig$$
+\end{verbatim}
+ which produces
+ $$\bfig
+\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+ \efig$$
+ Here is the explanation. The label placement argument is empty (it
+cannot be omitted) and the arrow entry is empty. However, placing
+\verb.^(0.7){f}. inside the arrow shape places the label $f$ 7/10 of the
+way between the nodes. Unmodified, this places it 7/10 of the way
+between the centers of the nodes. This may be modified by
+\index{<}\verb.<., which moves the first (here the left) reference point
+to the beginning of the arrow, \index{>}\verb.>. which moves the second
+reference point to the end of the arrow, or by both, which moves both
+reference points. In most cases, you will want both. Incidentally,
+\index{-}\verb.-. is a synonym for the sequence
+\index{<>(}5).\verb.<>(.5). and that is the default placement in my
+package.
+
+Here are some more examples that illustrates the special sequence
+\index{\backslash hole}\verb.\hole. used in conjunction with \index{|}\verb.|.
+that implements \index{m}\verb.m. as well as the fact that these things
+can be stacked. For more details, I must refer you to the \xypic\
+reference manual.
+ \begin{verbatim}
+ $$\bfig
+\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times
+B^C\times C`C;]
+ \efig$$
+\end{verbatim}
+ produces
+ $$\bfig
+\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times
+B^C\times C`C;]
+ \efig$$
+
+Here is another version of the cube we looked at above, using these
+special placements and\index{\backslash cube}
+\index{\backslash hole}\verb.\hole.'s to break some lines and make it
+neater.
+\begin{verbatim}
+ $$\bfig
+\cube|arlb|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/%
+<1000,1000>[A`B`C`D;`g``k]%
+(400,400)|axxb|/>`@{>}|!{(300,1000);(500,1000)}\hole^<>(.6){g'}`>`@{>}%
+|!{(1000,500);(1000,300)}\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\cube|arlb|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/%
+<1000,1000>[A`B`C`D;`g``k]%
+(400,400)|axxb|/>`@{>}|!{(300,1000);(500,1000)}\hole^<>(.6){g'}`>`@{>}%
+|!{(1000,500);(1000,300)}\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+ This one is probably worth saving as a template. Later I will explain
+the meaning of the strings \verb.!{(300,1000);(500,1000)}\hole. and
+ \verb.!{(1000,500);(1000,300)}\hole. along with a caveat on their use.
+If the nodes are unusually large, the cube may be magnified using
+\index{\backslash scalefactor}\verb.\scalefactor. .
+
+\subsection{Inline macros}
+ Here we illustrate a few of the macros for inline---or
+displayed---equations the package contains. In each case, the macro may
+have a superscript or subscript or both (in which case the superscript
+must come first) and the arrow(s) grow long enough to hold the super- or
+subscript. If you type\par\noindent
+\verb.$A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$., you get
+ $A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$. Similarly, the macro
+\index{\backslash toleft}\verb.\toleft. reverses the arrows. The remaining macros
+of this sort are \index{\backslash mon}\verb.\mon. which gives a monic arrow,
+\index{\backslash epi}\verb.\epi. which gives an epic arrow,
+\index{\backslash two}\verb.\two. that gives a pair of arrows, as well as
+leftwards pointing versions, \index{\backslash monleft}\verb.\monleft.,
+\index{\backslash epileft}\verb.\epileft., and \index{\backslash twoleft}\verb.\twoleft. of
+each of them. Here is one more example:
+\begin{verbatim}
+ $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$
+\end{verbatim}
+ gives $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$.
+There is an almost unlimited variety of such procedures possible. The
+ones that are provided can be used as templates to define new ones with,
+say, curved arrows or three arrows or whatever a user might have need
+of.
+
+\subsubsection{Added:}\label{added} The macros \index{\backslash to}\verb.\to. and
+\index{\backslash two}\verb.\two. can each have optional parameters of the form
+\index{/{sh}/<dx>}\verb./{sh}/<dx>. and
+\index{/{sh}`{sh}/<dx>}\verb./{sh}`{sh}/<dx>., resp. that allow you to
+specify the shapes of the arrows and to override the automatic
+computation of the lengths of the arrows. For example,
+ \begin{verbatim}
+$$A\to/<-/ B\to^f C \to/ >->/<500>_g D\to/<-< /^f_g E$$
+$$A\two/<-`->/<100> B\two^f C \two/ >->` >->/_g D\two/<-< `<-< /^f_g E$$
+\end{verbatim}
+ gives
+$$A\to/<-/ B\to^f C \to/ >->/<500>_g D\to/<-< /^f_g E$$
+$$A\two/<-`->/<100> B\two^f C \two/ >->` >->/_g D\two/<-< `<-< /^f_g E$$
+ This renders \index{\backslash mon}\verb.\mon., \index{\backslash epi}\verb.\epi.,
+\index{\backslash toleft}\verb.\toleft., \index{\backslash monleft}\verb.\monleft.,
+\index{\backslash epileft}\verb.\epileft., and \index{\backslash twoleft}\verb.\twoleft.
+obsolete, but they have been retained for back compatibility and
+convenience. A three arrow macro that works similarly has been added.
+For example
+ \begin{verbatim}
+ $$A\threepppp/>`<-`>/<400>^{d^0}|{s^0}_{d^1}B\three<100>
+C\three/->>`<-< `->>/ D$$
+\end{verbatim}
+ gives
+ $$A\threepppp/>`<-`>/<400>^{d^0}|{s^0}_{d^1}B\three<100>
+C\three/->>`<-< `->>/ D$$
+
+\subsection{2-arrows}
+ There is a macro for making 2-arrows of a fixed size, but varying
+orientation. They should be put at the appropriate position in a
+diagram. The two parameters are two integers \index{dx}\verb.dx. and
+\index{dy}\verb.dy. whose ratio is the slope of the arrow. They need
+not be relatively prime, but arithmetic overflow could occur if they are
+too large. Note that although \index{(dx,dy)}\verb.(dx,dy). and
+\index{(-dx,-dy)}\verb.(-dx,-dy). describe the same slope, the arrows
+point in opposite directions. Here is a sampler
+ \begin{verbatim}
+ $$\bfig
+ \place(0,0)[\twoar(1,0)]
+ \place(200,0)[\twoar(0,1)]
+ \place(400,0)[\twoar(1,1)]
+ \place(600,0)[\twoar(0,-1)]
+ \place(800,0)[\twoar(1,2)]
+ \place(1000,0)[\twoar(1,3)]
+ \place(1200,0)[\twoar(1,-3)]
+ \place(1400,0)[\twoar(-3,1)]
+ \place(1600,0)[\twoar(-1,-3)]
+ \place(1800,0)[\twoar(255,77)]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \place(0,0)[\twoar(1,0)]
+ \place(200,0)[\twoar(0,1)]
+ \place(400,0)[\twoar(1,1)]
+ \place(600,0)[\twoar(0,-1)]
+ \place(800,0)[\twoar(1,2)]
+ \place(1000,0)[\twoar(1,3)]
+ \place(1200,0)[\twoar(1,-3)]
+ \place(1400,0)[\twoar(-3,1)]
+ \place(1600,0)[\twoar(-1,-3)]
+ \place(1800,0)[\twoar(255,77)]
+ \efig$$
+
+Here is little amusement.
+\begin{verbatim}
+ $$\bfig
+ \square/@3{->}`~)`=o`--x/[A`B`C`D;```]
+ \place(400,100)[\twoar(-1,-1)]
+ \place(100,400)[\twoar(1,1)]
+ \morphism(500,500)||/{*}.{*}/<-500,-500>[B`C;]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \square/@3{->}`~)`=o`--x/[A`B`C`D;```]
+ \place(400,100)[\twoar(-1,-1)]
+ \place(100,400)[\twoar(1,1)]
+ \morphism(500,500)||/{*}.{*}/<-500,-500>[B`C;]
+ \efig$$
+
+\subsection{Mixing \xypic\ code}
+ Here is a sample in which I have mixed code from \xypic\ with my own.
+\let\tilde\widetilde
+\let\hat\widehat
+\begin{verbatim}
+ $$\bfig
+ \square(1500,500)/>`>`>`@{>}^<>(.2){r_{n-1}}/[T_{n-1}`T_{n-2}`R_{n-1}
+`R_{n-2}; t_{n-1}``\sigma_{n-2}`]
+ \square(1500,0)/`>`>`>/[R_{n-1}`R_{n-2}`S_{n-1}`S_{n-2};
+`f_{n-1}`f_{n-2}`s_{n-1}]
+ \morphism|b|[\tilde S_{n+1}`S_n;\tilde s_{n+1}]
+ \square(1000,500)/>`>`>`>/[\tilde T_n`T_{n-1}`\tilde
+R_n`{R_{n-1}};\tilde t_n`\tilde \sigma_n`\sigma_{n-1}`]
+ \square(1000,0)/>`>``>/[\tilde R_n`R_{n-1}`\tilde S_n`{S_{n-1}};\tilde
+r_n\quad ```\tilde s_n]
+ \square(500,0)/>`>``>/[R_n`{R_n}`{S_n}`{S_{n}};
+\hat r_n`f_n`\tilde f_n`\hat s_n]
+ \POS(1500,1000)*+!!<0ex,.75ex>{T_{n-1}}
+ \ar@{-}|!{(1000,500);(1500,500)}\hole(1167,334)%
+ \POS(1167,334)\ar|!{(1000,500);(1000,0)}\hole_<>(.6){h_{n-1}}
+ (500,0)*+!!<0ex,.75ex>{S_n}
+ \morphism(2000,1000)/@{>}|\hole^<>(.8){h_{n-2}}/%
+ <-500,-1000>[T_{n-2}`S_{n-1};]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \square(1500,500)/>`>`>`@{>}^<>(.2){r_{n-1}}/[T_{n-1}`T_{n-2}`R_{n-1}
+`R_{n-2}; t_{n-1}``\sigma_{n-2}`]
+ \square(1500,0)/`>`>`>/[R_{n-1}`R_{n-2}`S_{n-1}`S_{n-2};
+`f_{n-1}`f_{n-2}`s_{n-1}]
+ \morphism|b|[\tilde S_{n+1}`S_n;\tilde s_{n+1}]
+ \square(1000,500)/>`>`>`>/[\tilde T_n`T_{n-1}`\tilde
+R_n`{R_{n-1}};\tilde t_n`\tilde \sigma_n`\sigma_{n-1}`]
+ \square(1000,0)/>`>``>/[\tilde R_n`R_{n-1}`\tilde S_n`{S_{n-1}};\tilde
+r_n\quad ```\tilde s_n]
+ \square(500,0)/>`>``>/[R_n`{R_n}`{S_n}`{S_{n}};
+\hat r_n`f_n`\tilde f_n`\hat s_n]
+ \POS(1500,1000)*+!!<0ex,.75ex>{T_{n-1}}
+ \ar@{-}|!{(1000,500);(1500,500)}\hole(1167,334)%
+ \POS(1167,334)\ar|!{(1000,500);(1000,0)}\hole_<>(.6){h_{n-1}}
+ (500,0)*+!!<0ex,.75ex>{S_n}
+ \morphism(2000,1000)/@{>}|\hole^<>(.8){h_{n-2}}/%
+ <-500,-1000>[T_{n-2}`S_{n-1};]
+ \efig$$
+ There are three points to note here in connection with the two lines
+that begin with \index{\backslash POS}\verb.\POS. First the objects that are the
+source of the first and the target of the second are preceded by
+\verb;!!<0ex,.75ex>;\verb;!!<0ex,.75ex>;. The effect is to reset the
+baseline to the baseline of the object (rather than the vertical center)
+and then to lower that by 3/4 of xheight so that the arrow goes in the
+right place. This string precedes all objects. Without that, an object
+like $\tilde R $ would be set lower that $R$. Second, the first arrow
+has no target and the second no source. This does not give the same
+result as empty source and target since in the latter cases, there would
+be spaces allowed around them and then the two lines would not meet. It
+would be possible to add code that tests for empty nodes, but it comes
+up so seldom that I have refrained. In the meantime, the only recourse
+is to revert to the underlying \xypic\ code. Thirdly the string
+\verb.|!{(1000,500);(1500,500)}\hole. specifies that the line should be
+broken at the place where the current arrow intersects the line between
+the nodes located at (1000,500) and (1500,500). One must be careful
+using this construction, however, as it does not seem to work correctly
+if the line segment fails to intersect the current line, or if it does
+intersect, but happens to be too long. I have not worked out how long
+is too long, but you can get odd results. I assume that this bug will
+be fixed eventually. (Ross Moore says that it works correctly in the
+version he has, which, however, has not been released.) There is a
+similar string, with similar effect, in the following line. The last
+line uses simply \index{|\hole}\verb.|\hole. which positions the gap in
+the middle of the arrow.
+
+
+\subsection{loops}
+ Two new procedures \verb.\Loop. and \verb.\iloop. have been added, the
+latter for inline loops. (Note: \verb.\loop. was changed to
+\verb.\Loop. as the former conflicted with amstex.) Here are
+examples:
+\begin{verbatim}
+ $$\bfig
+ \morphism[A`B;f]
+ \Loop(0,0)A(ur,ul)_g
+ \Loop(500,0)B(dl,dr)_h
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \morphism[A`B;f]
+ \Loop(0,0)A(ur,ul)_g
+ \Loop(500,0)B(dl,dr)_h
+ \efig$$
+
+Inline: Either \verb.$A\iloop B(ur,ul)C$.
+or \verb.$\xy\Loop(0,0)A(ur,ul)\endxy$. gives the output $\xy
+ \Loop(0,0)A(ur,ul)\endxy$. The direction indicators show what
+direction the loops start and end in.
+
+\subsection{Diagram from TTT}\label{tttdiag}
+ The last example is a complicated diagram from TTT. If you have the
+documentation from the old diagram macros (or the errata from TTT), you
+can see how much easier it is to describe this diagram with these
+macros. Note the use of \index{\backslash scalefactor}\verb.\scalefactor. to
+change the default length from 500 to 700 that made it unnecessary to
+specify the scales on the squares and triangles.
+ \begin{verbatim}
+ $$\bfig
+ \scalefactor{1.4}%
+ \qtriangle(0,1000)/>`>`/[TT`T`TTT';\mu`TT\eta'`]%
+ \btriangle(500,1000)/`>`@<-14\ul>/[T`TTT'`TT';`T\eta`T\sigma]%
+ \morphism(0,1500)|l|/>/<0,-1000>[TT`TT'T;T\eta'T]%
+ \square(500,500)|ammx|/@<14\ul>`>`>`/[TTT'`TT'`TT'TT'`TT'T';%
+ \mu T'`T\eta'TT'`T\eta'T'`]%
+ \morphism(1000,1000)|r|/>/<500,-500>[TT'`TT';\hbox{\rm id}]%
+ \square/>`>``>/[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma T``T'T\eta']%
+ \square(500,0)|ammb|[TT'TT'`TT'T'`T'TT'`T'T';%
+ TT'\sigma`\sigma TT'`\sigma T'`T'\sigma T']%
+ \square(1000,0)/>``>`>/[TT'T'`TT'`T'T'`T';T\mu'``\sigma`\mu']%
+\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]%
+\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]%
+\place(1250,250)[7]%
+ \efig$$
+\end{verbatim}
+ $$\bfig\label{TTTdiag}
+ \scalefactor{1.4}%
+ \qtriangle(0,1000)/>`>`/[TT`T`TTT';\mu`TT\eta'`]%
+ \btriangle(500,1000)/`>`@<-14\ul>/[T`TTT'`TT';`T\eta`T\sigma]%
+ \morphism(0,1500)|l|/>/<0,-1000>[TT`TT'T;T\eta'T]%
+ \square(500,500)|ammx|/@<14\ul>`>`>`/[TTT'`TT'`TT'TT'`TT'T';\mu T'`%
+ T\eta'TT'`T\eta'T'`]%
+ \morphism(1000,1000)|r|/>/<500,-500>[TT'`TT';\hbox{\rm id}]%
+ \square/>`>``>/[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma T``T'T\eta']%
+ \square(500,0)|ammb|[TT'TT'`TT'T'`T'TT'`T'T';TT'\sigma`\sigma TT'%
+ `\sigma T'`T'\sigma T']%
+ \square(1000,0)/>``>`>/[TT'T'`TT'`T'T'`T';T\mu'``\sigma`\mu']%
+\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]%
+\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]%
+\place(1250,250)[7]%
+ \efig$$
+
+Here is code that produces the same diagram using the new \verb.\arrow.
+feature:
+\begin{verbatim}
+\node a(0,1500)[TT]%
+\node b(500,1500)[T]%
+\node c(500,1000)[TTT']%
+\node d(1000,1000)[TT']%
+\node e(0,500)[TT'T]%
+\node f(500,500)[TT'TT']%
+\node g(1000,500)[TT'T']%
+\node h(1500,500)[TT']%
+\node i(0,0)[T'T]%
+\node j(500,0)[T'TT']%
+\node k(1000,0)[T'T']%
+\node l(1500,0)[T']%
+ $$\bfig
+\scalefactor{1.4}%
+\arrow[a`b;\mu]%
+\arrow|l|[a`e;T\eta'T]%
+\arrow|l|[a`c;TT\eta]%
+\arrow[b`d;T\eta]%
+\arrow/@<14\ul>/[c`d;\mu T']%
+\arrow|b|/@<-14\ul>/[c`d;T\sigma]%
+\arrow[d`h;\mbox{id}]%
+\arrow|m|[c`f;T\eta'TT']%
+\arrow|m|[d`g;T\eta'T']%
+\arrow[e`f;TT'T\eta']%
+\arrow[f`g;TT'\sigma]%
+\arrow[g`h;T\mu']%
+\arrow|l|[e`i;\sigma T]%
+\arrow|m|[f`j;\sigma TT']%
+\arrow|m|[g`k;\sigma T']%
+\arrow[h`l;\sigma]%
+\arrow|b|[i`j;T'T\eta']%
+\arrow|b|[j`k;T'\sigma T']%
+\arrow[k`l;\mu']%
+\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]%%
+\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]%%
+\place(1250,250)[7]%
+ \efig$$
+\end{verbatim}
+ It is in some ways easier than the other, but more verbose. In the end
+it comes down to a matter of preference.
+
+
+
+\clearpage
+\def\lab(#1,#2)[#3]{\place(#1,#2)[\backslash\hbox{\texttt#3}]}
+\def\Lab[#1]{{\backslash\hbox{\texttt#1}}}
+
+
+\subsection{A few samples.}
+ These come from a paper that is being converted from MS-Word and are
+very complicated. The first shows two ways of doing the same thing.
+Notable are the use of Bezier curves as well as curved arrows. I now
+feel that the use of the node/arrow feature may be better, for complex
+diagrams, than the use of set shapes. Here is the same diagram set in
+each way. Compare the codes. (This is from a real paper,
+incidentally.)
+
+ $$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \square(0,2400)/>`<-`<-`/<1200,400>[(\h(\g\f))\t_A`((\h\g)\f)\t_A`
+\h((\g\f)\t_A)`(\h\g(\f\t_A));```]
+ \morphism(0,2400)<600,0>[\h((\g\f)\t_A)`\h(\g(\f\t_A));]
+ \square(600,2000)/>`<-`<-`>/<600,400>[\h(\g(\f\t_A))`(\h\g(\f\t_A))
+`\h(\g(\t_Bf))`(\h\g)(\t_Bf);`\h(\g\t_f)`(\h\g)\t_f`]
+ \morphism(1200,2000)<600,0>[(\h\g)(\t_Bf)`((\h\g)\t_B)f;]
+ \square(600,1600)/`>`<-`>/<1200,400>[\h(\g(\t_Bf))`((\h\g)\t_B)f`
+\h((\g\t_B)f)`(\h(\g\t_B))f;```]
+\square(600,1200)|xllx|/>`<-`<-`>/<1200,400>[\h((\g\t_B)f)`
+(\h(\g\t_B))f`\h((\t_Cg)f)`(\h(\t_Cg))f;`\h(\t_gf)`(\h\t_g)f`]
+ \square(600,800)/>`<-`<-`/<1200,400>[\h((\t_Cg)f)`(\h(\t_Cg))f`
+\h(\t_C(gf))`\h(\t_C(gf));```]
+ \morphism(600,800)<600,0>[\h(\t_C(gf))`(\h\t_C)(gf);]
+ \morphism(1200,800)<600,0>[(\h\t_C)(gf)`\h(\t_C(gf));]
+ \square(1200,400)/>`<-`<-`>/<600,400>[(\h\t_C)(gf)`\h(\t_C(gf))`
+(\t_Dh)(gf)`((\t_Dh)g)f;`\t_h(gf)`(\t_hg)f`]
+ \morphism(1800,400)/<-/<600,0>[((\t_Dh)g)f`\t_D(hg)f;]
+ \square(1200,0)/`<-`<-`<-/<1200,400>[(\t_Dh)(gf)`\t_D(hg)f`
+\t_D(h(gf))`\t_D((hg)f);```]
+ \morphism(2400,400)/{@{>}@/^-15pt/}/<-600,1600>[\t_D(hg)f`
+((\h\g)\t_B)f;\t_{hg}f]
+ \morphism(600,800)|l|/{@{>}@/^15pt/}/<-600,1600>[\h(\t_C(gf))`
+\h((\g\f)\t_A);\h(\t_{gf})]
+ \morphism(1200,0)/{@{>}@`{c,(-300,0),(-600,2400),p}}/<-1200,2800>[
+\t_D(h(gf))`(\h(\g\f))\t_A;\t_h(gf)]
+ \morphism(2400,0)|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/<-1200,2800>[
+\t_D((hg)f)`((\h\g)\f)\tau_A;\t_{(hg)f}]
+ \efig$$
+
+$$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \node 11(0,2800)[(\h(\g\f))\t_A]
+ \node 13(1200,2800)[((\h\g)\f)\t_A]
+ \node 21(0,2400)[\h((\g\f)\t_A)]
+ \node 22(600,2400)[\h(\g\f\t_A)]
+ \node 23(1200,2400)[(\h\g(\f\t_A))]
+ \node 32(600,2000)[\h(\g(\t_Bf))]
+ \node 33(1200,2000)[(\h\g)(\t_Bf)]
+ \node 34(1800,2000)[((\h\g)\t_B)f]
+ \node 42(600,1600)[\h((\g\t_B)f)]
+ \node 44(1800,1600)[(\h(\g\t_B))f]
+ \node 52(600,1200)[\h((\t_C)g)f]
+ \node 54(1800,1200)[(\h(\t_Cg))f]
+ \node 62(600,800)[\h(\t_C(gf))]
+ \node 63(1200,800)[(\h\t_C)(gf)]
+ \node 64(1800,800)[\h(\t_C(gf))]
+ \node 73(1200,400)[(\t_Dh)(gf)]
+ \node 74(1800,400)[((\t_D)h)g]
+ \node 75(2400,400)[(\t_D(hg))f]
+ \node 83(1200,0)[\t_D(h(gf))]
+ \node 85(2400,0)[\t_D((hg)f)]
+ \arrow[11`13;]
+ \arrow[21`11;]
+ \arrow[21`22;]
+ \arrow[22`23;]
+ \arrow[23`13;]
+ \arrow[32`22;\h(\g\t_f)]
+ \arrow[32`33;]
+ \arrow[33`23;(\h\g)\t_f]
+ \arrow[33`34;]
+ \arrow[42`44;]
+ \arrow[42`32;]
+ \arrow[44`34;]
+ \arrow[52`42;\h(\t_gf)]
+ \arrow[52`54;]
+ \arrow[54`44;(\h\t_g)f]
+ \arrow[62`52;]
+ \arrow[62`63;]
+ \arrow[63`64;]
+ \arrow[73`63;\t_h(gf)]
+ \arrow[73`74;]
+ \arrow[74`64;\t_{(hg)f}]
+ \arrow[74`75;]
+ \arrow[83`73;]
+ \arrow[83`85;]
+ \arrow[85`75;]
+ \arrow|r|/{@{>}@/_15pt/}/[75`34;\t_{hg}f]
+ \arrow|l|/{@{>}@/^15pt/}/[62`21;\h(\t_C(gf))]
+ \arrow|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/[85`13;\t_{hg}f]
+ \arrow|r|/{@{>}@`{c,(-300,0),(-600,2400),p}}/[83`11;\t_{h(fg)}]
+\efig$$
+
+Here are the codes:
+
+
+\begin{verbatim}
+
+
+ $$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \square(0,2400)/>`<-`<-`/<1200,400>[(\h(\g\f))\t_A`((\h\g)\f)\t_A`
+\h((\g\f)\t_A)`(\h\g(\f\t_A));```]
+ \morphism(0,2400)<600,0>[\h((\g\f)\t_A)`\h(\g(\f\t_A));]
+ \square(600,2000)/>`<-`<-`>/<600,400>[\h(\g(\f\t_A))`(\h\g(\f\t_A))
+`\h(\g(\t_Bf))`(\h\g)(\t_Bf);`\h(\g\t_f)`(\h\g)\t_f`]
+ \morphism(1200,2000)<600,0>[(\h\g)(\t_Bf)`((\h\g)\t_B)f;]
+ \square(600,1600)/`>`<-`>/<1200,400>[\h(\g(\t_Bf))`((\h\g)\t_B)f`
+\h((\g\t_B)f)`(\h(\g\t_B))f;```]
+\square(600,1200)|xllx|/>`<-`<-`>/<1200,400>[\h((\g\t_B)f)`
+(\h(\g\t_B))f`\h((\t_Cg)f)`(\h(\t_Cg))f;`\h(\t_gf)`(\h\t_g)f`]
+ \square(600,800)/>`<-`<-`/<1200,400>[\h((\t_Cg)f)`(\h(\t_Cg))f`
+\h(\t_C(gf))`\h(\t_C(gf));```]
+ \morphism(600,800)<600,0>[\h(\t_C(gf))`(\h\t_C)(gf);]
+ \morphism(1200,800)<600,0>[(\h\t_C)(gf)`\h(\t_C(gf));]
+ \square(1200,400)/>`<-`<-`>/<600,400>[(\h\t_C)(gf)`\h(\t_C(gf))`
+(\t_Dh)(gf)`((\t_Dh)g)f;`\t_h(gf)`(\t_hg)f`]
+ \morphism(1800,400)/<-/<600,0>[((\t_Dh)g)f`\t_D(hg)f;]
+ \square(1200,0)/`<-`<-`<-/<1200,400>[(\t_Dh)(gf)`\t_D(hg)f`
+\t_D(h(gf))`\t_D((hg)f);```]
+ \morphism(2400,400)/{@{>}@/^-15pt/}/<-600,1600>[\t_D(hg)f`
+((\h\g)\t_B)f;\t_{hg}f]
+ \morphism(600,800)|l|/{@{>}@/^15pt/}/<-600,1600>[\h(\t_C(gf))`
+\h((\g\f)\t_A);\h(\t_{gf})]
+ \morphism(1200,0)/{@{>}@`{c,(-300,0),(-600,2400),p}}/<-1200,2800>[
+\t_D(h(gf))`(\h(\g\f))\t_A;\t_h(gf)]
+ \morphism(2400,0)|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/<-1200,2800>[
+\t_D((hg)f)`((\h\g)\f)\tau_A;\t_{(hg)f}]
+ \efig$$
+
+$$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \node 11(0,2800)[(\h(\g\f))\t_A]
+ \node 13(1200,2800)[((\h\g)\f)\t_A]
+ \node 21(0,2400)[\h((\g\f)\t_A)]
+ \node 22(600,2400)[\h(\g\f\t_A)]
+ \node 23(1200,2400)[(\h\g(\f\t_A))]
+ \node 32(600,2000)[\h(\g(\t_Bf))]
+ \node 33(1200,2000)[(\h\g)(\t_Bf)]
+ \node 34(1800,2000)[((\h\g)\t_B)f]
+ \node 42(600,1600)[\h((\g\t_B)f)]
+ \node 44(1800,1600)[(\h(\g\t_B))f]
+ \node 52(600,1200)[\h((\t_C)g)f]
+ \node 54(1800,1200)[(\h(\t_Cg))f]
+ \node 62(600,800)[\h(\t_C(gf))]
+ \node 63(1200,800)[(\h\t_C)(gf)]
+ \node 64(1800,800)[\h(\t_C(gf))]
+ \node 73(1200,400)[(\t_Dh)(gf)]
+ \node 74(1800,400)[((\t_D)h)g]
+ \node 75(2400,400)[(\t_D(hg))f]
+ \node 83(1200,0)[\t_D(h(gf))]
+ \node 85(2400,0)[\t_D((hg)f)]
+ \arrow[11`13;]
+ \arrow[21`11;]
+ \arrow[21`22;]
+ \arrow[22`23;]
+ \arrow[23`13;]
+ \arrow[32`22;\h(\g\t_f)]
+ \arrow[32`33;]
+ \arrow[33`23;(\h\g)\t_f]
+ \arrow[33`34;]
+ \arrow[42`44;]
+ \arrow[42`32;]
+ \arrow[44`34;]
+ \arrow[52`42;\h(\t_gf)]
+ \arrow[52`54;]
+ \arrow[54`44;(\h\t_g)f]
+ \arrow[62`52;]
+ \arrow[62`63;]
+ \arrow[63`64;]
+ \arrow[73`63;\t_h(gf)]
+ \arrow[73`74;]
+ \arrow[74`64;\t_{(hg)f}]
+ \arrow[74`75;]
+ \arrow[83`73;]
+ \arrow[83`85;]
+ \arrow[85`75;]
+ \arrow|r|/{@{>}@/_15pt/}/[75`34;\t_{hg}f]
+ \arrow|l|/{@{>}@/^15pt/}/[62`21;\h(\t_C(gf))]
+ \arrow|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/[85`13;\t_{hg}f]
+ \arrow|r|/{@{>}@`{c,(-300,0),(-600,2400),p}}/[83`11;\t_{h(fg)}]
+\efig$$
+\end{verbatim}
+
+The following is a really ugly diagram that is really hard to make look
+good. Possibly all four diagonal arrows should be curved, with less
+curve but in opposite directions. Note the fact that double labels are
+permitted (though in this case, the second is \hole) and that - is a
+synonym for (.5) in the label positioning spec. This also features
+sliding arrows.
+ $$\bfig
+ \node 1(1000,800)[Y]
+ \node 21(0,0)[X]
+ \node 22(2000,0)[Z]
+ \node aa(300,400)[]
+ \node ab(450,400)[]
+ \node ba(1550,400)[]
+ \node bb(1700,400)[]
+ \arrow|a|/{@{>}@/^20pt/}/[21`1;f]
+ \arrow|b|[21`1;g]
+ \arrow[aa`ab;\beta]
+ \arrow[bb`ba;\delta]
+ \arrow|b|[1`22;i]
+ \arrow|a|/{@{>}@/^20pt/}/[1`22;h]
+ \arrow/{@{>}@/^15pt/@<5pt>^(.4)k}/[21`22;]
+ \arrow/{@{>}@/^15pt/@<5pt>^(.4)k}/[21`22;]
+ \arrow/{@{>}@<5pt>|(.4)j|(.5)\hole}/[21`22;]
+ \arrow/{@{>}@<-10pt>|(.4){hf}|-\hole}/[21`22;]
+ \arrow/{@{>}@/_15pt/@<-10pt>_(0.4){ig}}/[21`22;]
+ \node c(1000,150)[]
+ \node f(1000,-200)[]
+ \arrow|l|[f`c;t]
+ \node d(1100,25)[]
+ \node e(1100,-75)[]
+ \arrow|r|[e`d;s]
+ \efig$$
+
+
+\section{A few comparisons with {\tt xymatrix}}
+
+We give here a few diagrams to contrast the predefined shapes of
+\verb.diagxy. with those produced by \verb.xymatrix.. These are not
+intended to be invidious, but they are chosen to show \verb.xymatrix. in
+the worst light. The diagrams can be improved by using special options
+of \verb.xymatrix. but the second diagrams are the default in
+\verb.diagxy.. Of course, \verb.diagxy. uses \verb.xypic. but not the
+\verb.xymatrix. option., so this is not meant as a putdown of
+\verb.xypic., only as a comparison if you are trying to decide which to
+use. In the end, though you will probably decide on the basis of which
+you feel most comfortable with. Users of \verb.diagxy. like the
+predefined shapes and others find the native syntax of \verb.xypic. more
+comfortable.
+
+\xyoption{matrix}
+The first one illustrates what happens when the nodes are vertically
+unbalanced. Changing \verb.\xymatrix. to \verb.\xymatrix1@. improves
+the appearance, but it is still not perfect.
+
+\begin{verbatim}
+$$\xymatrix {A^{X^Y}\ar[r]&B_{Z_W}\ar[r]&C}
+\qquad A^{X^Y}\to B_{Z_W}\to C$$
+\end{verbatim}
+ produces
+$$\xymatrix {A^{X^Y}\ar[r]&B_{Z_W}\ar[r]&C}
+\qquad A^{X^Y}\to B_{Z_W}\to C$$
+
+The next sample shows what happens to the label when the nodes are of
+quite different length. Putting a - after the \verb.^. fixes this.
+\begin{verbatim}
+$$\xymatrix{A\ar[r]^{(f,g,h)}&B\times C\times D}\qquad
+A\to^{(f,g,h)}B\times C\times D$$
+\end{verbatim}
+ produces
+$$\xymatrix{A\ar[r]^{(f,g,h)}&B\times C\times D}\qquad
+A\to^{(f,g,h)}B\times C\times D$$
+
+
+However, it doesn't fix the problem of too short an arrow. Replacing
+\verb.[r]. by \verb.[rr]. and the \verb.&. by \verb.&&. fixes this.
+\begin{verbatim}
+$$\xymatrix{A\ar[r]^-{(f_1,g_2,h_3)}&B\times C\times D}\qquad
+A\to^{(f_1,g_2,h_3)}B\times C\times D$$
+\end{verbatim}
+ produces
+$$\xymatrix{A\ar[r]^-{(f_1,g_2,h_3)}&B\times C\times D}\qquad
+A\to^{(f_1,g_2,h_3)}B\times C\times D$$
+
+Unbalanced nodes in a triangle result in an unbalanced triangle. I do
+not know how to fix this one up, although \verb.xypic. has so many
+options that there is probably some way.
+\begin{verbatim}
+$$\xymatrix{A\ar[rr]\ar[dr]&&B\times C\times D\ar[dl]\\&E}$$
+$$\xy\Vtriangle[A`B\times C\times D`E;``]\endxy$$
+\end{verbatim}
+ produces
+$$\xymatrix{A\ar[rr]\ar[dr]&&B\times C\times D\ar[dl]\\&E}$$
+$$\xy\Vtriangle[A`B\times C\times D`E;``]\endxy$$
+
+\clearpage
+\section{Thumbnails}
+
+This page shows all the shapes that have been defined so far. In all
+cases, consult the documentation for the syntax and a discussion of the
+optional parameters. Note that \verb.\Square., along with
+\verb.\hSquares. and \verb.\vSquares. grow in width to accomodate the
+nodes and labels.
+
+\scalefactor{.4}
+ % \fontscale{}
+\let\.\cdot
+$\.\to_{\Lab[to]}\.\toleft_{\Lab[toleft]}\.
+\mon_{\Lab[mon]}\.\monleft_{\Lab[monleft]}\.\epi_{\Lab[epi]}\.\epileft_{\Lab[epileft]}\.
+\two_{\Lab[two]}\.\three_{\Lab[three]}\.$
+
+ $$\bfig
+ \square[\.`\.`\.`\.;```]
+ \lab(200,-250)[square]
+ \Atriangle(1000,0)[\.`\.`\.;``]
+ \lab(1400,-250)[Atriangle]
+ \Vtriangle(2500,0)[\.`\.`\.;``]
+ \lab(2900,-250)[Vtriangle]
+ \Ctriangle(4000,0)[\.`\.`\.;``]
+ \lab(4400,-250)[Ctriangle]
+ \Dtriangle(5000,0)[\.`\.`\.;``]
+ \lab(5400,-250)[Dtriangle]
+\def\ru{\.\.\.\.\.}
+ \square(0,-1500)<1000,500>[\ru`\ru`\ru`\ru;```]
+ \lab(400,-1750)[Square]
+ \ptriangle(1800,-1500)[\.`\.`\.;``]
+ \lab(2000,-1750)[ptriangle]
+ \qtriangle(2900,-1500)[\.`\.`\.;``]
+ \lab(3100,-1750)[qtriangle]
+ \dtriangle(4000,-1500)[\.`\.`\.;``]
+ \lab(4200,-1750)[dtriangle]
+ \btriangle(5100,-1500)[\.`\.`\.;``]
+ \lab(5400,-1750)[btriangle]
+ \Atrianglepair(0,-3000)[\.`\.`\.`\.;````]
+ \lab(400,-3250)[Atrianglepair]
+ \Vtrianglepair(1500,-3000)[\.`\.`\.`\.;````]
+ \lab(1900,-3250)[Vtrianglepair]
+ \Ctrianglepair(3500,-3000)[\.`\.`\.`\.;````]
+ \lab(3400,-3250)[Ctrianglepair]
+ \Dtrianglepair(4500,-3000)[\.`\.`\.`\.;````]
+ \lab(4900,-3250)[Dtrianglepair]
+ \hSquares(0,-4500)[\ru`\ru`\ru`\ru`\ru`\ru;``````]
+ \lab(600,-4750)[hSquares]
+ \pullback(2700,-4500)[\.`\.`\.`\.;```][\.;``]
+ \lab(3000,-4750)[pullback]
+ \iiixii(4000,-4500){15}<400>[\.`\.`\.`\.`\.`\.;``````]
+ \lab(4800,-4750)[iiixii]
+ \cube(0,-7000)[\.`\.`\.`\.;```](500,-6500)[\.`\.`\.`\.;```][```]
+ \lab(700,-7250)[cube]
+ \iiixiii(2500,-7000)[\.`\.`\.`\.`\.`\.`\.`\.`\.;```````````]
+ \lab(3000,-7250)[iiixiii]
+ \vSquares(4500,-7000)[\ru`\ru`\ru`\ru`\ru`\ru;``````]
+ \lab(4800,-7250)[vSquares]
+ \efig$$
+
+ \clearpage
+\section{Command summary}
+
+\def\v#1.{{\texttt{#1}}}
+ Below is a summary of the syntax of the supplied shapes. In this
+summary, optional parameters are enclosed in braces (\verb/{}/) because
+the more usual brackets are too much used. In only two cases below are
+braces to be used and they will be made clear. In all cases it is the
+set of parameters that is optional; you must accept the default for all,
+or set them all. But the different sets of parameters are independent.
+Note that continuation lines are marked with a \verb.%. sign. If you
+break one of these macros be sure to end the line with \verb.%., unless
+you are inside the \verb/[...]/, where everything is done in math mode
+and space characters are ignored.
+\begin{trivlist}
+ \item[\v(x,y).:] The coordinates of the lower left corner of the
+smallest rectangle that encloses the figure, whether or not that corner
+is actually in the shape.
+
+\item[\v p.:]
+One of the letters \v a., \v b., \v l.,
+\v m., or \v x. and describe the placement of an arrow label as above,
+below, right, left,in the middle of an arrow, or no label, resp.
+
+\item[\v a.:] The shape of the arrow.
+
+\item[\v <dx,dy>.:] The horizontal and vertical extent of the diagram.
+In a couple cases only one is specified.
+
+\item[\v O.:] An object or node.
+
+\item[\v L.:] An arrow label.
+
+\item[\v N.:] A number in the range 0..15. If it has more than one
+digit, must be placed inbraces.
+
+\item[\v M.:] A number in the range 0.."7777. Also in braces.
+
+\end{trivlist}
+
+
+\begin{verbatim}
+\to{/a/}{^A}{|A}{_A}
+\xar{^A}{|A}{_A}(xar = mon, epi, toleft, monleft, epileft)
+\square{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]
+\Ltriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Vtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Ctriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Dtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Square{(x,y)}{|pppp|}{/a`a`a`a/}{<dy>}[O`O`O`O;L`L`L`L]
+\ptriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\qtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\dtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\btriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Ltrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\Vtrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\Ctrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\Dtrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\hSquares{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O`O`O;L`L`L`L`L`L`L]
+\pullback{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]
+ {|ppp|}{/a`a`a/}{<#7,#8>}[O;L`L`L]
+\iiixii{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}%
+ {N{<dx,dy>}}[O`O`O`O`O`O;L`L`L`L`L`L`L]
+\cube{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]%
+ {(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]%
+ {|pppp|}{/a`a`a`a/}[L`L`L`L]
+\iiixiii{(x,y)}{|pppppppppppp|}{/a`a`a`a`a`a`a`a`a`a`a`a/}%
+ {<dx,dy>}{M{<dx>}}%
+ [O`O`O`O`O`O`O`O`O;L`L`L`L`L`L`L`L`L`L`L`L`L`L`L]
+\vSquares{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O`O`O;L`L`L`L`L`L`L]
+\end{verbatim}
+
+
+\edef\backslash{\ensuremath{\backslash}}
+\catcode`\<=\active
+\catcode`\>=\active
+\catcode`\^=\active
+\catcode`\_=\active
+\def<{\mathhexbox13C}
+\def>{\mathhexbox13E}
+\def^{\mathhexbox362}
+\def_{\vrule width 10pt height .4pt depth 0pt}
+\addcontentsline{toc}{section}{Index}
+\newpage
+\input diaxydoc.ind
+
+
+\end{document}
+
+Color example:
+ $$\xy *[blue]{A} \ar@[red]@{->}^[green]{f}(20,0) *[magenta]{B}\endxy$$
+
+
+
+If the shape parameter begins with an \index{@}\verb.@., it is
+interpreted differently. In that case, it has the form
+\index{@{shape}@}\verb.@{shape}@. modifier, where the modifier is as
+described in the \xypic\ reference guide. I just mention a couple of
+them. The parameter \index{@{->}@<3pt>}\verb.@{->}@<3pt>., for example,
+would give an ordinary arrow moved three points in the direction
+perpendicular to that of the arrow. If you give
+\index{{@{->>}@/^5pt/}}\verb.{@{->>}@/^5pt/}., you will get an epic
+arrow that is curved in the direction perpendicular to the direction of
+the arrow by five points. It is imperative that a specification such as
+\index{@{>}@/5pt/}\verb.@{>}@/5pt/. be enclosed in braces because of the
+\index{/}\verb./.s.
diff --git a/macros/generic/diagrams/kuvio/COPYRIGHT b/macros/generic/diagrams/kuvio/COPYRIGHT
new file mode 100644
index 0000000000..3abd642ae0
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/COPYRIGHT
@@ -0,0 +1,17 @@
+Copyright (C) 1994-1996 Anders G S Svensson <svensson@math.ubc.ca>
+
+The file kuvio.tex may be freely distributed and used, with the
+following restrictions.
+
+1. Substantial use of kuvio.tex in any published work should be suitably
+ acknowledged.
+
+2. No changes or modifications are to be made to kuvio.tex.
+
+3. The documentation, "Typesetting diagrams with kuvio.tex", must
+ be distributed with kuvio.tex.
+
+I would enjoy receiving a copy of any book, journal article or thesis
+prepared using kuvio.tex.
+
+Thank you.
diff --git a/macros/generic/diagrams/kuvio/README b/macros/generic/diagrams/kuvio/README
new file mode 100644
index 0000000000..73cecbc8ea
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/README
@@ -0,0 +1,45 @@
+26 Jun 1995
+
+Welcome to my contribution to the exciting world of diagram macros. :^)
+
+The macros in kuvio.tex use PostScript code embedded in \special control
+sequences to rotate arrows from the horizontal. This means we depend on a dvi
+to ps translator to correctly interpret the PostScript. The translator I've
+used while writing this is Tomas Rokicki's excellent dvips. There is a control
+sequence \kuviospecial for changing the \special syntax so it may be possible
+to use kuvio.tex with other translators.
+
+A few features of kuvio.tex.
+
+ 1. Input uses an alignment syntax not unlike other packages.
+
+ 2. Rigid and flexible grids.
+
+ 3. Diagram compilation for improved performance.
+
+ 4. Almost every choice made by the macros in kuvio.tex is adjustable by
+ the user.
+
+ 5. A labelling scheme for typesetting material on top of diagrams or
+ included PostScript figures.
+
+ 6. Arrows can be attached to points on other arrows.
+
+ 7. Since arrows are rotated from the horizontal, anything which can
+ be typeset horizontally can be used as an arrow in a diagram. New arrow
+ types are easily defined.
+
+ 8. General purpose macros for rotation, reflection and framing.
+
+The documentation, "Typesetting diagrams with kuvio.tex", has more details.
+
+Be forewarned that dvi file previewers differ in how they handle the
+\special's used in kuvio.tex. On the NeXT, Rokicki's TeXview understands
+them just fine. (Note however that versions prior to that of February 1994
+sometimes chose the wrong font in certain situations. The latest should be
+available by ftp from labrea.stanford.edu as /pub/texview.tar.Z.)
+Xdvi gets thoroughly confused. Other previewers may die agonizing deaths.
+Of course, one can always preview a .ps file. Ghostview does an excellent job
+of this under X.
+
+Anders Svensson <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/README2 b/macros/generic/diagrams/kuvio/README2
new file mode 100644
index 0000000000..8831e3e03d
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/README2
@@ -0,0 +1,57 @@
+31 Oct 1995
+
+There is a survey of several diagram packages in the latest issue of TUGboat.
+
+ Gabriel Valiente Feruglio
+ Typesetting Commutative Diagrams
+ TUGboat, volume 15 (1994), no. 4, 466-484
+
+However, kuvio.tex and it's documentation has evolved quite substantially
+since this article appears to have been written; although not since vol. 15,
+no.4 arrived in my mailbox last week. :^.
+
+I have a few comments regarding this article.
+
+In the description of kuvio.tex on page 471, there is the following statement.
+
+ "It supports diagonal arrows of different shapes and in many different,
+ although not arbitrary, slopes ..."
+
+This is false, though the fault probably lies with the state of the
+documentation at the time - January 1995 according to the citation on page
+473. That is, the slope of arrows is, in fact, arbitrary.
+
+Numerous features have been added to kuvio.tex since January 1995. Among these
+are *diagram types* (\newDiagram, \newFigure and \newGraph) and the *flexible
+grid* (\flexible), both of which I would use when typesetting a diagram like
+the one on page 475. Another big one is *diagram compilation*.
+
+The use of the *rigid grid* inherent in the \Diagram \endDiagram pair
+certainly affects the appearence of the square typeset on page 482. To see
+this, try typesetting the following two "squares".
+
+ \def\A{A\times A\times A\times A}
+
+ \Diagram
+ \A & \rTo ^f & B \\
+ \dTo <g & & \dTo >{g'} \\
+ C & \rTo _{f'} & D \\
+ \endDiagram
+
+ \Dg
+ \A & \rTo ^f & B \\
+ \dTo <g & & \dTo >{g'} \\
+ C & \rTo _{f'} & D \\
+ \endDg
+
+It's still true that arrows don't stretch to match wide labels but I consider
+this a feature. :^)
+
+Anders
+
+******************************************************************************
+26 Jan 1996
+
+As of patchlevel 214, horizontal arrows are stretched to accomodate
+wide centered labels. (That is, the last sentence above no longer
+holds.)
diff --git a/macros/generic/diagrams/kuvio/arrsy/Makefile-dist b/macros/generic/diagrams/kuvio/arrsy/Makefile-dist
new file mode 100644
index 0000000000..2c72b4f8fe
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/Makefile-dist
@@ -0,0 +1,50 @@
+# Anders G S Svensson
+# $Date: 1994/11/24 01:39:37 $
+# $Revision: 1.5 $
+
+# Installation directories.
+
+DESTDIR = /usr/local/lib
+
+# pk files go here.
+#
+PKDEST = $(DESTDIR)/tex/fonts/pk
+
+# tfm files go here.
+#
+TFMDEST = $(DESTDIR)/tex/fonts/tfm
+
+# mf files go here.
+#
+MFDEST = $(DESTDIR)/mf/inputs
+
+# tex files go here.
+#
+TEXDEST = $(DESTDIR)/tex/inputs
+
+##################################################
+
+INSTALL = install -c -m 644
+
+MFSOURCES = arrsy.mf arrsy10.mf arrsym.mf
+TEXSOURCES = arrsy.tex
+
+all:
+ make MFINPUTS=.:$(MFINPUTS) GFFONTS=. pk
+
+pk:
+ mf "\mode=localfont; input arrsy10"
+ @for file in *gf; do gftopk ./$$file; done
+
+install: install-src install-fonts
+
+install-src:
+ $(INSTALL) $(MFSOURCES) $(MFDEST)
+ $(INSTALL) $(TEXSOURCES) $(TEXDEST)
+
+install-fonts:
+ $(INSTALL) arrsy10.tfm $(TFMDEST)
+ $(INSTALL) arrsy10.*pk $(PKDEST)
+
+clean:
+ rm -f arrsy10.tfm arrsy10.*pk arrsy10.*gf *.log
diff --git a/macros/generic/diagrams/kuvio/arrsy/README b/macros/generic/diagrams/kuvio/arrsy/README
new file mode 100644
index 0000000000..ecb59c42a2
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/README
@@ -0,0 +1,40 @@
+02 Dec 1995
+
+Added the files arrsy.sty and Uarrsy.fd for LaTeX. The fonts themselves are
+unchanged.
+
+%-----------------------------------------------------------------------------
+31 Mar 1995
+
+Added \cupp and \capp for cup and cap products (smaller than the smile and
+frown found in the msam font).
+
+------------------------------------------------------------------------------
+22 Nov 1994
+
+Here's a small font I put together, mainly for a few characters I wanted to
+use with my diagram macros, kuvio.tex. The font also contains reproductions
+of a few arrows from the pre-1992 versions of cmsy10 and cmmi10. (The
+arrowheads were made wider in '92, a change for the worse in my opinion.)
+There are probably only three characters in arrsy10 which people not
+using kuvio.tex may find useful: \of for function composition (smaller that
+the massive \circ), \vect for vectors (\vec doesn't do it for me) and
+\dotp for dot products (heavier than \cdot, lighter than \bullet). Who knows,
+versions of these may already exist somewhere else but here are mine.
+
+On a Unix box, you can install the font as follows.
+
+ 1. Copy Makefile-dist to Makefile and then edit this file, setting the
+ variables DESTDIR, PKDEST, TFMDEST, MFDEST and TEXDDEST appropriately.
+
+ 2. Do "make". If you don't have MFINPUTS set you should do
+ "make MFINPUTS=<path>" instead, where <path> is a path in which the file
+ cmbase.mf can be found (usually something like /usr/local/lib/mf/inputs).
+ If all goes well you should get one tfm file and one pk file and you can
+ then do "make install".
+
+ 3. Do "make clean" to clean up.
+
+If none of this works for you, mail me.
+
+Anders Svensson <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd b/macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd
new file mode 100644
index 0000000000..57a40fafb8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd
@@ -0,0 +1,8 @@
+% Uarrsy.fd
+% Anders G S Svensson
+
+\ProvidesFile{Uarrsy.fd}[1995/12/02]
+
+\DeclareFontFamily{U}{arrsy}{}
+\DeclareFontShape{U}{arrsy}{m}{n}{ <5> <6> <7> <8> <9> <10>
+ <10.95> <12> <14.4> <17.28> <20.74> <24.88> arrsy10 }{}
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy.mf b/macros/generic/diagrams/kuvio/arrsy/arrsy.mf
new file mode 100644
index 0000000000..d48792b9f8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy.mf
@@ -0,0 +1,116 @@
+% arrsy.mf
+% Anders G S Svensson
+% $Date: 1993/08/29 06:19:19 $
+% $Revision: 1.1 $
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Computer Modern parameters from cmsy10.mf
+%%
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=29/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=35/36pt#; % uppercase curve breadth
+cap_ess#:=33/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=30/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% Font parameters are explained in {\sl The \TeX book}, Appendix G
+%
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will
+ % now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Modified from mathsy.mf
+%%
+font_coding_scheme:="TeX math symbols";
+mode_setup; font_setup;
+
+slant:=mono_charic#:=0; % Symbols shouldn't be slanted.
+
+font_slant slant;
+font_x_height x_height#;
+font_quad 18u#;
+
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy.sty b/macros/generic/diagrams/kuvio/arrsy/arrsy.sty
new file mode 100644
index 0000000000..1a9df06107
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy.sty
@@ -0,0 +1,137 @@
+% arrsy.sty
+% Anders G S Svensson
+% $Date: 1995/12/27 12:25:18 $
+% $Revision: 1.1 $
+
+\def\Revision@$#1 #2 ${v#2}
+\def\Date@$#1 #2 #3 ${#2}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{arrsy}%
+ [\Date@$Date: 1995/12/27 12:25:18 $ \Revision@$Revision: 1.1 $]
+
+\DeclareOption{cmarrows}{\AtEndOfPackage{\cmarrows}}
+\ProcessOptions\relax
+
+\DeclareSymbolFont{Arrsy}{U}{arrsy}{m}{n}
+
+\let\cmrightarrow\rightarrow
+\let\cmleftarrow\leftarrow
+\let\cmleftrightarrow\leftrightarrow
+\let\cmleftharpoonup\leftharpoonup
+\let\cmleftharpoondown\leftharpoondown
+\let\cmrightharpoonup\rightharpoonup
+\let\cmrightharpoondown\rightharpoondown
+
+\DeclareMathSymbol{\A@Rightharpoonup}{\mathrel}{Arrsy}{"00}
+\DeclareMathSymbol{\A@Leftharpoondown}{\mathrel}{Arrsy}{"01}
+\DeclareMathSymbol{\A@Upharpoonleft}{\mathrel}{Arrsy}{"02}
+\DeclareMathSymbol{\A@Downharpoonright}{\mathrel}{Arrsy}{"03}
+\DeclareMathSymbol{\A@Rightharpoondown}{\mathrel}{Arrsy}{"04}
+\DeclareMathSymbol{\A@Leftharpoonup}{\mathrel}{Arrsy}{"05}
+\DeclareMathSymbol{\A@Upharpoonright}{\mathrel}{Arrsy}{"06}
+\DeclareMathSymbol{\A@Downharpoonleft}{\mathrel}{Arrsy}{"07}
+\DeclareMathSymbol{\A@Rrightarrow}{\mathrel}{Arrsy}{"08}
+\DeclareMathSymbol{\A@Lleftarrow}{\mathrel}{Arrsy}{"09}
+\DeclareMathSymbol{\A@Rrelbar}{\mathrel}{Arrsy}{"0A}
+\DeclareMathSymbol{\A@dashbar}{\mathrel}{Arrsy}{"0B}
+\DeclareMathSymbol{\A@shortrightarrow}{\mathrel}{Arrsy}{"0C}
+\DeclareMathSymbol{\A@shortleftarrow}{\mathrel}{Arrsy}{"0D}
+\DeclareMathSymbol{\A@rightmonotail}{\mathrel}{Arrsy}{"0E}
+\DeclareMathSymbol{\A@leftmonotail}{\mathrel}{Arrsy}{"0F}
+\DeclareMathSymbol{\A@squiggle}{\mathrel}{Arrsy}{"10}
+\DeclareMathSymbol{\A@rightarrow}{\mathrel}{Arrsy}{"11}
+\DeclareMathSymbol{\A@leftarrow}{\mathrel}{Arrsy}{"12}
+\DeclareMathSymbol{\A@leftrightarrow}{\mathrel}{Arrsy}{"13}
+\DeclareMathSymbol{\A@leftharpoonup}{\mathrel}{Arrsy}{"14}
+\DeclareMathSymbol{\A@leftharpoondown}{\mathrel}{Arrsy}{"15}
+\DeclareMathSymbol{\A@rightharpoonup}{\mathrel}{Arrsy}{"16}
+\DeclareMathSymbol{\A@rightharpoondown}{\mathrel}{Arrsy}{"17}
+
+\let\Rightharpoonup\A@Rightharpoonup
+\let\Leftharpoondown\A@Leftharpoondown
+\let\Upharpoonleft\A@Upharpoonleft
+\let\Downharpoonright\A@Downharpoonright
+\let\Rightharpoondown\A@Rightharpoondown
+\let\Leftharpoonup\A@Leftharpoonup
+\let\Upharpoonright\A@Upharpoonright
+\let\Downharpoonleft\A@Downharpoonleft
+\let\Rrightarrow\A@Rrightarrow
+\let\Lleftarrow\A@Lleftarrow
+\let\Rrelbar\A@Rrelbar
+\let\dashbar\A@dashbar
+\let\shortrightarrow\A@shortrightarrow
+\let\shortleftarrow\A@shortleftarrow
+\let\rightmonotail\A@rightmonotail
+\let\leftmonotail\A@leftmonotail
+\let\squiggle\A@squiggle
+\let\rightarrow\A@rightarrow
+\let\leftarrow\A@leftarrow
+\let\leftrightarrow\A@leftrightarrow
+\let\leftharpoonup\A@leftharpoonup
+\let\leftharpoondown\A@leftharpoondown
+\let\rightharpoonup\A@rightharpoonup
+\let\rightharpoondown\A@rightharpoondown
+
+\DeclareMathAccent{\vect}{\mathord}{Arrsy}{"18}
+\DeclareMathSymbol{\comp}{\mathrel}{Arrsy}{"19}
+\DeclareMathSymbol{\dotp}{\mathrel}{Arrsy}{"1A}
+\DeclareMathSymbol{\cupp}{\mathrel}{Arrsy}{"1B}
+\DeclareMathSymbol{\capp}{\mathrel}{Arrsy}{"1C}
+
+\let\of\comp
+
+\let\gets\leftarrow
+\let\to\rightarrow
+
+\def\cmarrows{\let\leftrightarrow\cmleftrightarrow
+ \let\rightarrow\cmrightarrow\let\leftarrow\cmleftarrow
+ \let\gets\leftarrow\let\to\rightarrow
+ \let\leftharpoonup\cmleftharpoonup
+ \let\leftharpoondown\cmleftharpoondown
+ \let\rightharpoonup\cmrightharpoonup
+ \let\rightharpoondown\cmrightharpoondown}
+
+\def\rightepi{\A@rightarrow\mkern-13mu\A@shortrightarrow\mkern3mu}
+\let\epito\rightepi
+\def\leftepi{\A@leftarrow\mkern-15mu\A@shortleftarrow\mkern5mu}
+\let\A@rightepi\rightepi \let\A@leftepi\leftepi
+
+\def\rightmono{\A@rightmonotail\mkern-8mu\relbar\mkern-8mu\A@shortrightarrow}
+\let\monoto\rightmono
+\def\leftmono{\A@shortleftarrow\mkern-8mu\relbar\mkern-8mu\A@leftmonotail}
+
+\def\rightiso{\A@rightmonotail\mkern-5mu\A@shortrightarrow
+ \mkern-7mu\A@shortrightarrow}
+\let\isoto\rightiso
+\def\leftiso{\A@shortleftarrow\mkern-7mu\A@shortleftarrow
+ \mkern-5mu\A@leftmonotail}
+
+\def\longrightepi{\relbar\joinrel\A@rightepi}
+\def\longleftepi{\A@leftepi\joinrel\relbar}
+
+\def\longrightmono{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightarrow}
+\def\longleftmono{\A@leftarrow\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\longrightiso{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightepi}
+\def\longleftiso{\A@leftepi\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\Longrightharpoonup{\Relbar\joinrel\A@Rightharpoonup}
+\def\Longrightharpoondown{\Relbar\joinrel\A@Rightharpoondown}
+\def\Longleftharpoonup{\A@Leftharpoonup\joinrel\Relbar}
+\def\Longleftharpoondown{\A@Leftharpoondown\joinrel\Relbar}
+\def\Llongrightarrow{\A@Rrelbar\joinrel\A@Rrightarrow}
+\def\Llongleftarrow{\A@Lleftarrow\joinrel\A@Rrelbar}
+\def\Llongrelbar{\A@Rrelbar\joinrel\A@Rrelbar}
+
+\let\Leftallo\Leftharpoondown
+\let\Leftpara\Leftharpoonup
+\let\Rightallo\Rightharpoonup
+\let\Rightpara\Rightharpoondown
+
+\let\Longleftallo\Longleftharpoondown
+\let\Longleftpara\Longleftharpoonup
+\let\Longrightallo\Longrightharpoonup
+\let\Longrightpara\Longrightharpoondown
+
+\let\inputarrsy\relax
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy.tex b/macros/generic/diagrams/kuvio/arrsy/arrsy.tex
new file mode 100644
index 0000000000..842d082048
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy.tex
@@ -0,0 +1,133 @@
+% arrsy.tex
+% Anders G S Svensson
+% $Date: 1995/03/31 21:55:00 $
+% $Revision: 1.13 $
+
+\chardef\ArrsycodE=\catcode`\@
+\catcode`\@=11
+
+\def\@@bailout@@{\message{again}\catcode`\@=\ArrsycodE\endinput}
+
+\ifx\@@agss@arrsy@@\relax
+\else
+ \let\@@agss@arrsy@@\relax
+ \let\@@bailout@@\relax
+\fi
+
+\@@bailout@@
+
+
+\font\A@tenarr=arrsy10
+\font\A@sevenarr=arrsy10 at 7pt
+\font\A@fivearr=arrsy10 at 5pt
+
+\newfam\arrfam
+
+\textfont\arrfam=\A@tenarr
+\scriptfont\arrfam=\A@sevenarr
+\scriptscriptfont\arrfam=\A@fivearr
+
+\let\cmrightarrow\rightarrow
+\let\cmleftarrow\leftarrow
+\let\cmleftrightarrow\leftrightarrow
+\let\cmleftharpoonup\leftharpoonup
+\let\cmleftharpoondown\leftharpoondown
+\let\cmrightharpoonup\rightharpoonup
+\let\cmrightharpoondown\rightharpoondown
+
+\def\hex#1{\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or
+ A\or B\or C\or D\or E\or F\fi}
+
+\edef\A@arrsy{\hex\arrfam}
+
+\def\A@newarrow#1#2#3#4{%
+ \expandafter\mathchardef\csname A@#1\endcsname="#2\A@arrsy#3#4
+ \expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname #1\endcsname\csname A@#1\endcsname}
+
+\A@newarrow{Rightharpoonup}300
+\A@newarrow{Leftharpoondown}301
+\A@newarrow{Upharpoonleft}302
+\A@newarrow{Downharpoonright}303
+\A@newarrow{Rightharpoondown}304
+\A@newarrow{Leftharpoonup}305
+\A@newarrow{Upharpoonright}306
+\A@newarrow{Downharpoonleft}307
+\A@newarrow{Rrightarrow}308
+\A@newarrow{Lleftarrow}309
+\A@newarrow{Rrelbar}30A
+\A@newarrow{dashbar}30B
+\A@newarrow{shortrightarrow}30C
+\A@newarrow{shortleftarrow}30D
+\A@newarrow{rightmonotail}30E
+\A@newarrow{leftmonotail}30F
+\A@newarrow{squiggle}310
+\A@newarrow{rightarrow}311
+\A@newarrow{leftarrow}312
+\A@newarrow{leftrightarrow}313
+\A@newarrow{leftharpoonup}314
+\A@newarrow{leftharpoondown}315
+\A@newarrow{rightharpoonup}316
+\A@newarrow{rightharpoondown}317
+\edef\vect{\mathaccent"0\A@arrsy 18 }
+\mathchardef\comp="3\A@arrsy 19
+\mathchardef\dotp="3\A@arrsy 1A
+\mathchardef\cupp="3\A@arrsy 1B
+\mathchardef\capp="3\A@arrsy 1C
+
+\let\of\comp
+
+\let\gets\leftarrow
+\let\to\rightarrow
+
+\def\cmarrows{\let\leftrightarrow\cmleftrightarrow
+ \let\rightarrow\cmrightarrow\let\leftarrow\cmleftarrow
+ \let\gets\leftarrow\let\to\rightarrow
+ \let\leftharpoonup\cmleftharpoonup
+ \let\leftharpoondown\cmleftharpoondown
+ \let\rightharpoonup\cmrightharpoonup
+ \let\rightharpoondown\cmrightharpoondown}
+
+\def\rightepi{\A@rightarrow\mkern-13mu\A@shortrightarrow\mkern3mu}
+\let\epito\rightepi
+\def\leftepi{\A@leftarrow\mkern-15mu\A@shortleftarrow\mkern5mu}
+\let\A@rightepi\rightepi \let\A@leftepi\leftepi
+
+\def\rightmono{\A@rightmonotail\mkern-8mu\relbar\mkern-8mu\A@shortrightarrow}
+\let\monoto\rightmono
+\def\leftmono{\A@shortleftarrow\mkern-8mu\relbar\mkern-8mu\A@leftmonotail}
+
+\def\rightiso{\A@rightmonotail\mkern-5mu\A@shortrightarrow
+ \mkern-7mu\A@shortrightarrow}
+\let\isoto\rightiso
+\def\leftiso{\A@shortleftarrow\mkern-7mu\A@shortleftarrow
+ \mkern-5mu\A@leftmonotail}
+
+\def\longrightepi{\relbar\joinrel\A@rightepi}
+\def\longleftepi{\A@leftepi\joinrel\relbar}
+
+\def\longrightmono{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightarrow}
+\def\longleftmono{\A@leftarrow\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\longrightiso{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightepi}
+\def\longleftiso{\A@leftepi\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\Longrightharpoonup{\Relbar\joinrel\A@Rightharpoonup}
+\def\Longrightharpoondown{\Relbar\joinrel\A@Rightharpoondown}
+\def\Longleftharpoonup{\A@Leftharpoonup\joinrel\Relbar}
+\def\Longleftharpoondown{\A@Leftharpoondown\joinrel\Relbar}
+\def\Llongrightarrow{\A@Rrelbar\joinrel\A@Rrightarrow}
+\def\Llongleftarrow{\A@Lleftarrow\joinrel\A@Rrelbar}
+\def\Llongrelbar{\A@Rrelbar\joinrel\A@Rrelbar}
+
+\let\Leftallo\Leftharpoondown
+\let\Leftpara\Leftharpoonup
+\let\Rightallo\Rightharpoonup
+\let\Rightpara\Rightharpoondown
+
+\let\Longleftallo\Longleftharpoondown
+\let\Longleftpara\Longleftharpoonup
+\let\Longrightallo\Longrightharpoonup
+\let\Longrightpara\Longrightharpoondown
+
+\catcode`\@=\ArrsycodE
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy10.mf b/macros/generic/diagrams/kuvio/arrsy/arrsy10.mf
new file mode 100644
index 0000000000..a73fa349a1
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy10.mf
@@ -0,0 +1,45 @@
+% arrsy10.mf
+% Anders G S Svensson
+% $Date: 1995/03/31 21:55:19 $
+% $Revision: 1.10 $
+
+if unknown cmbase: input cmbase fi
+font_identifier:="ARRSY"; font_size 10pt#;
+
+input arrsy; % Computer modern parameters.
+input arrsym; % Macros for the symbols.
+
+% Encoding
+%
+rightallo(hex "00");
+leftallo(hex "01");
+upallo(hex "02");
+downallo(hex "03");
+rightpara(hex "04");
+leftpara(hex "05");
+uppara(hex "06");
+downpara(hex "07");
+righttriple(hex "08");
+lefttriple(hex "09");
+equiv(hex "0A");
+dashbar(hex "0B");
+rightarrow(hex "0C", 10);
+leftarrow(hex "0D", 10);
+rightmonotail(hex "0E");
+leftmonotail(hex "0F");
+squiggle(hex "10");
+rightarrow(hex "11", 18);
+leftarrow(hex "12", 18);
+leftrightarrow(hex "13");
+leftharpoonup(hex "14");
+leftharpoondown(hex "15");
+rightharpoonup(hex "16");
+rightharpoondown(hex "17");
+vector(hex "18");
+ofcirc(hex "19");
+dotp(hex "1A");
+cupp(hex "1B");
+capp(hex "1C");
+
+bye
+
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsym.mf b/macros/generic/diagrams/kuvio/arrsy/arrsym.mf
new file mode 100644
index 0000000000..81b113bc79
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsym.mf
@@ -0,0 +1,477 @@
+% arrsym.mf
+% Anders G S Svensson
+
+% This file was tangled from arrsym.fw.
+% $Revision: 1.9 $
+% $Date: 1995/04/01 02:31:13 $
+
+compute_spread(.45x_height#,.55y_height#);
+numeric thin_spread#; thin_spread#:=4/5spread#;
+define_pixels(thin_spread);
+
+def rightallo(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x2=x1; x7=x8=w-x1;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y2;
+ pos3(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(w,y3)--z0&cycle;
+ filldraw z5l..{z3-z9}z3r---{z9-z3}z3l..z5r--cycle;
+ endchar;
+enddef;
+
+def rightpara(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x2=x1; x7=x8=w-x1;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y1;
+ pos4(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
+ pos5(rule_thickness,angle(z3-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(w,y4)--z0&cycle;
+ filldraw z5r..{z4-z9}z4l---{z9-z4}z4r..z5l--cycle;
+ endchar;
+enddef;
+
+def leftpara(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x7=hround u - eps; x8=x7; x1=x2=w-x7;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; lft x0=hround u - eps; y0=y2;
+ pos3(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(0,y3)--z0&cycle;
+ filldraw z5r..{z3-z9}z3r---{z9-z3}z3l..z5l--cycle;
+ endchar;
+enddef;
+
+def leftallo(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x7=hround u - eps; x8=x7; x1=x2=w-x7;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; lft x0=hround u - eps; y0=y1;
+ pos4(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
+ pos5(rule_thickness,angle(z3-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(0,y4)--z0&cycle;
+ filldraw z5l..{z4-z9}z4l---{z9-z4}z4r..z5r--cycle;
+ endchar;
+enddef;
+
+def downallo(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ top y1=top y2=h+eps; bot y7=-d; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ bot y0=-d-eps; x0=x2;
+ pos4(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0+.48asc_height-eps;
+ pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(x4,-d-eps)--z0&cycle;
+ filldraw z6l..{z4-z9}z4l---{z9-z4}z4r..z6r--cycle;
+ endchar;
+enddef;
+
+def downpara(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ top y1=top y2=h+eps; bot y7=-d; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ bot y0=-d-eps; x0=x1;
+ pos3(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0+.48asc_height-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(x3,-d-eps)--z0&cycle;
+ filldraw z5r..{z3-z9}z3r---{z9-z3}z3l..z5l--cycle;
+ endchar;
+enddef;
+
+def uppara(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ bot y1=bot y2=-d-eps; top y7=h; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ top y0=h+eps; x0=x2;
+ pos4(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0-.48asc_height-eps;
+ pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(x4,h+eps)--z0&cycle;
+ filldraw z6r..{z4-z9}z4l---{z9-z4}z4r..z6l--cycle;
+ endchar;
+enddef;
+
+def upallo(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ bot y1=bot y2=-d-eps; top y7=h; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ top y0=h+eps; x0=x1;
+ pos3(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0-.48asc_height-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(x3,h+eps)--z0&cycle;
+ filldraw z5l..{z3-z9}z3r---{z9-z3}z3l..z5r--cycle;
+ endchar;
+enddef;
+
+def righttriple(expr code) =
+ beginchar(code, 18u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2; draw z3--z4; draw z5--z6;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y4;
+ pos7(rule_thickness,0); pos8(rule_thickness,0);
+ y7-y2=y6-y8=.24asc_height+eps; x7=x8=x0-6u-eps;
+ pos9(rule_thickness,angle(z8-z0)); z9l=z0;
+ pos10(rule_thickness,angle(z7-z0)); z10l=z0;
+ z11=.381966[.5[z7,z8],z0];
+ erase filldraw z0..{z7-z11}z7--(w,y7)--(w,y8)--
+ z8{z11-z8}..z0&cycle;
+ filldraw z9l..{z7-z11}z7r---z7l{z11-z7}..z9r--cycle;
+ filldraw z10r..{z8-z11}z8l---z8r{z11-z8}..z10l--cycle;
+ endchar;
+enddef;
+
+def lefttriple(expr code) =
+ beginchar(code, 18u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2; draw z3--z4; draw z5--z6;
+ pickup crisp.nib; lft x0=hround u-eps; y0=y4;
+ pos7(rule_thickness,0); pos8(rule_thickness,0);
+ y7-y2=y6-y8=.24asc_height+eps; x7=x8=x0+6u+eps;
+ pos9(rule_thickness,angle(z8-z0)); z9l=z0;
+ pos10(rule_thickness,angle(z7-z0)); z10l=z0;
+ z11=.381966[.5[z7,z8],z0];
+ erase filldraw z0..{z7-z11}z7--(0,y7)--(0,y8)--
+ z8{z11-z8}..z0&cycle;
+ filldraw z9r..{z7-z11}z7r---z7l{z11-z7}..z9l--cycle;
+ filldraw z10l..{z8-z11}z8l---z8r{z11-z8}..z10r--cycle;
+ endchar;
+enddef;
+
+def equiv(expr code) =
+ beginchar(code, 14u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2;
+ draw z3--z4;
+ draw z5--z6;
+ endchar;
+enddef;
+
+def dashbar(expr code) =
+ beginarithchar(code);
+ pickup rule.nib;
+ lft x1=hround u-eps;
+ x2=.3w; x3=.7w;
+ x4=w-x1;
+ y1=y2=y3=y4=math_axis;
+ draw z1--z2;
+ draw z3--z4;
+ endchar;
+enddef;
+
+def rightarrow(expr code, width) =
+ beginchar(code, width*u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4l{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftarrow(expr code, width) =
+ beginchar(code, width*u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftrightarrow(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; lft x0=hround u;
+ x1=.5w;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % left arrowhead and stem
+ pos11(rule_thickness,90); pos12(rule_thickness,90);
+ pos13(bar,0); pos14(bar,0);
+ y10=y11=y12=math_axis;
+ rt x10=hround(w-u);
+ x11=.5w;
+ y13-y10=y10-y14=.24asc_height+eps;
+ x13=x14=x10-3u-eps;
+ pos15(bar,angle(z14-z10)); z15l=z10;
+ pos16(bar,angle(z13-z10)); z16l=z10;
+ z19=.381966[.5[z13,z14],z10];
+ numeric t; path p; p=z14l{z19-z14}..z16r;
+ t=xpart(p intersectiontimes((0,y12l)--(w,y12l)));
+ x12=xpart point t of p;
+ filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
+ --z12l---z11l..z11r---z12r--subpath (t,0) of\\(z13l{z19-z13}..z15r)
+ --z13r{z19-z13}..z10 & cycle; % right arrowhead and stem
+ endchar;
+enddef;
+
+def rightmonotail(expr code) =
+ beginchar(code,10u#,v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ x3=x4=.5rule_thickness+hround u;
+ y0=y1=y2=math_axis;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x0=x3+3u+eps;
+ rt x1=hround(w-u);
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4l{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle;
+ filldraw z1l..z1r---z2r..z2l---z1l & cycle;
+ endchar;
+enddef;
+
+def leftmonotail(expr code) =
+ beginchar(code,10u#,v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ x3=x4=hround(w-u)-.5rule_thickness;
+ y0=y1=y2=math_axis;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x0=x3-3u-eps;
+ lft x1=hround u;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+ filldraw z1l..z1r---z2r..z2l---z1l & cycle;
+ endchar;
+enddef;
+
+def squiggle(expr code) =
+ beginarithchar(code);
+ pickup rule.nib;
+ x2=.12w; x3=.3w;
+ x4=.7w; x5=.88w;
+ y2=y5=math_axis;
+ y3-y2=y2-y4=.5spread;
+ draw z2{right}..z3{right}..z4{right}..z5{right};
+ endchar;
+enddef;
+
+def leftharpoonup(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1+.5rule_thickness=hround(w-u);
+ lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0--(x0,y2l)---z1l..z1r---z2r
+ ..subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r)
+ --z3l..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftharpoondown(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1+.5rule_thickness=hround(w-u);
+ lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0{2(x4-x0),y4-y0}..z4l
+ --subpath (0,t) of\\(z4r..{2(x0-x4),y0-y4}z6r)
+ ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def rightharpoonup(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1-.5rule_thickness=hround u;
+ rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0--(x0,y2l)---z1l..z1r---z2r
+ ..subpath (t,0) of\\(z3l..{2(x0-x3),y0-y3}z5r)
+ --z3r..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def rightharpoondown(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1-.5rule_thickness=hround u;
+ rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0{2(x4-x0),y4-y0}..z4r
+ --subpath (0,t) of\\(z4l..{2(x0-x4),y0-y4}z6r)
+ ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def vector(expr code) =
+ beginchar(code, 9u#, asc_height#+.5rule_thickness#,0);
+ italcorr .7[x_height#,asc_height#]*slant;
+ adjust_fit(0,0); pickup rule.nib;
+ lft x1=hround .5u; x2=w-x1; y1=y2=good.x .7[x_height,asc_height];
+ draw z1--z2; % bar
+ rt x3=hround(x2-u);
+ y3=y2+.3(asc_height-x_height);
+ draw z3{x2-x3,2(y2-y3)}...{2(x2-x3),y2-y3}z2; % upper point
+ endchar;
+enddef;
+
+def ofcirc(expr code) =
+ beginchar(code, 7u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x6=hround u; x2=w-x6;
+ z0=.5[z2,z6];
+ y8-y0=x2-x0;
+ y2=math_axis;
+ circle_points; draw_circle; % circle
+ endchar;
+enddef;
+
+def dotp(expr code) =
+ beginchar(code, 5u#, v_center(7u#));
+ adjust_fit(0,0); pickup fine.nib;
+ numeric dot_diam#; dot_diam#=2dot_size#;
+ define_whole_blacker_pixels(dot_diam);
+ pos1(dot_diam,0); pos2(dot_diam,90);
+ lft x1l=hround(.5w-.5dot_diam);
+ y1+.5dot_diam=vround(math_axis+.5dot_diam);
+ z1=z2; dot(1,2); % dot
+ endchar;
+enddef;
+
+def cupp(expr code) =
+ beginchar(code, 10u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x1=hround u; y1=vround(math_axis+.15x_height);
+ x3=w-x1; y3=y1;
+ penpos2(rule_thickness,90); x2=.5w;
+ y2=good.y(math_axis-.15x_height);
+ numeric theta; theta=angle((z2-z1)yscaled 3);
+ penpos1(rule_thickness,90+theta);
+ penpos3(rule_thickness,90-theta);
+ draw z1{dir theta}...z2...{dir-theta}z3;
+ endchar;
+enddef;
+
+def capp(expr code) =
+ beginchar(code, 10u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x1=hround u; y1=vround(math_axis-.15x_height);
+ x3=w-x1; y3=y1;
+ penpos2(rule_thickness,90); x2=.5w;
+ y2=good.y(.15x_height+math_axis);
+ numeric theta; theta=angle((z2-z1)yscaled 3);
+ penpos1(rule_thickness,90+theta);
+ penpos3(rule_thickness,90-theta);
+ draw z1{dir theta}...z2...{dir-theta}z3;
+ endchar;
+enddef;
+
diff --git a/macros/generic/diagrams/kuvio/arrsy/patchlevel_19 b/macros/generic/diagrams/kuvio/arrsy/patchlevel_19
new file mode 100644
index 0000000000..22dba0647c
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/patchlevel_19
@@ -0,0 +1 @@
+27 Dec 1995
diff --git a/macros/generic/diagrams/kuvio/arrsy/symbols.ps b/macros/generic/diagrams/kuvio/arrsy/symbols.ps
new file mode 100644
index 0000000000..22ef9e8585
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/symbols.ps
@@ -0,0 +1,264 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.516 Copyright 1986, 1993 Radical Eye Software
+%%Title: symbols.dvi
+%%CreationDate: Fri Apr 21 16:11:04 1995
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -o symbols.ps symbols.dvi
+%DVIPSSource: TeX output 1995.04.21:1611
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
+0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
+begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
+array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
+FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
+pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
+0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
+ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
+/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
+sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
+}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
+moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
+B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
+3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
+-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
+3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 400 400
+(/Riseberga/._homes/user/agss/Mathematics/TeX/src/arrsy/symbols.dvi)
+@start /Fa 29 29 df<0000000600000000000007000000000000070000000000000380
+00000000000380000000000001C0000000000001C0000000000000E000007FFFFFFFF000
+00FFFFFFFFF00000FFFFFFFFF80000000000001C0000000000000E0000000000000F0000
+000000000780000000000003C0000000000001E0000000000000F0000000000000380000
+000000001E00FFFFFFFFFFFF80FFFFFFFFFFFF807FFFFFFFFFFF0031177D9C01>0
+D<7FFFFFFFFFFF00FFFFFFFFFFFF80FFFFFFFFFFFF803C0000000000000E000000000000
+0780000000000003C0000000000001E0000000000000F000000000000078000000000000
+380000000000001C0000000000000FFFFFFFFF800007FFFFFFFF800007FFFFFFFF000003
+80000000000001C0000000000001C0000000000000E0000000000000E000000000000070
+00000000000070000000000000300000000031177D9402>I<00000C00000E00001E0000
+3E00003E00007E0000EE0001CE0003CE00078E000F0E001C0E00780E00F00E03E00E0FE0
+0E3FE00E7CE00EF8E00EC0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00600C17317EA503>I<60
+0C00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E06E00E3EE00E7CE00FF8E00FE0E00F80E01E00E0
+3C00E07000E1E000E3C000E78000E70000EE0000FC0000F80000F80000F00000E0000060
+0000173176A504>I<7FFFFFFFFFFF00FFFFFFFFFFFF80FFFFFFFFFFFF8000000000001E
+00000000000038000000000000F0000000000001E0000000000003C00000000000078000
+000000000F0000000000000E0000000000001C0000FFFFFFFFF80000FFFFFFFFF000007F
+FFFFFFF0000000000000E0000000000001C0000000000001C00000000000038000000000
+000380000000000007000000000000070000000000000600000031177D9405>I<000030
+0000000000007000000000000070000000000000E0000000000000E0000000000001C000
+0000000001C000000000000380000000000007FFFFFFFF000007FFFFFFFF80000FFFFFFF
+FF80001C0000000000003800000000000078000000000000F0000000000001E000000000
+0003C00000000000078000000000000E0000000000003C000000000000FFFFFFFFFFFF80
+FFFFFFFFFFFF807FFFFFFFFFFF0031177D9C06>I<600000E00000F00000F80000F80000
+FC0000EE0000E70000E78000E3C000E1E000E07000E03C00E01E00E00F80E00FE0E00FF8
+E00E7CE00E3EE00E06E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00600C00173176A507>I<00600C00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00EC0E00EF8E00E7CE00E3FE00E0FE00E03E00E00F00E00780E001C
+0E000F0E00078E0003CE0001CE0000EE00007E00003E00003E00001E00000E00000C1731
+7EA508>I<00000006000000000000070000000000000700000000000003800000000000
+0380000000000001C0000000000001E0000000000000E000007FFFFFFFF00000FFFFFFFF
+F80000FFFFFFFFFC0000000000001E0000000000000F0000000000000780000000000003
+C0000000000001F00000000000007800FFFFFFFFFFFF00FFFFFFFFFFFF80FFFFFFFFFFFF
+00000000000078000000000001F0000000000003C00000000000078000000000000F0000
+000000001E0000FFFFFFFFFC0000FFFFFFFFF800007FFFFFFFF0000000000000E0000000
+000001E0000000000001C000000000000380000000000003800000000000070000000000
+00070000000000000600000031257D9F09>I<0000300000000000007000000000000070
+000000000000E0000000000000E0000000000001C0000000000003C00000000000038000
+0000000007FFFFFFFF00000FFFFFFFFF80001FFFFFFFFF80003C00000000000078000000
+000000F0000000000001E0000000000007C000000000000F0000000000007FFFFFFFFFFF
+80FFFFFFFFFFFF807FFFFFFFFFFF800F00000000000007C0000000000001E00000000000
+00F0000000000000780000000000003C0000000000001FFFFFFFFF80000FFFFFFFFF8000
+07FFFFFFFF00000380000000000003C0000000000001C0000000000000E0000000000000
+E00000000000007000000000000070000000000000300000000031257D9F0A>I<7FFFFF
+FFF0FFFFFFFFF8FFFFFFFFF8000000000000000000000000000000000000000000000000
+000000000000FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8000000000000000000000000000000
+000000000000000000000000000000FFFFFFFFF8FFFFFFFFF87FFFFFFFF025157D970B>
+I<FFE0007FF0FFE0007FF0FFE0007FF024037D8E2B>I<00060000030000030000018000
+00C00000C00000600000387FFFFCFFFFFF7FFFFC0000380000600000C00000C000018000
+030000030000060018137D961F>I<00600000C00000C000018000030000030000060000
+1C00003FFFFEFFFFFF3FFFFE1C000006000003000003000001800000C00000C000006000
+18137D961F>I<C00000C00000C000006000003000001800001C00000E000007FFFE07FF
+FF07FFFE0E00001C0000180000300000600000C00000C00000C0000018137C961F>I<00
+000300000300000300000600000C0000180000380000707FFFE0FFFFE07FFFE000007000
+003800001800000C00000600000300000300000318137E961F>I<03F000000007FC0000
+000FFE0000001E0F0000003C07800000F803C001C0F001E003C0E000F007C00000780F00
+00003C1E0000001FFC0000000FF800000003F000220D7C932B>I<000000000600000000
+0003000000000003000000000001800000000000C00000000000C0000000000060000000
+0000387FFFFFFFFFFCFFFFFFFFFFFF7FFFFFFFFFFC000000000038000000000060000000
+0000C00000000000C000000000018000000000030000000000030000000000060030137D
+9637>I<00600000000000C00000000000C0000000000180000000000300000000000300
+000000000600000000001C00000000003FFFFFFFFFFEFFFFFFFFFFFF3FFFFFFFFFFE1C00
+0000000006000000000003000000000003000000000001800000000000C00000000000C0
+0000000000600000000030137D9637>I<00600000060000C00000030000C00000030001
+80000001800300000000C00300000000C00600000000601C00000000383FFFFFFFFFFCFF
+FFFFFFFFFF3FFFFFFFFFFC1C00000000380600000000600300000000C00300000000C001
+800000018000C00000030000C00000030000600000060030137D9637>I<006000000000
+00C00000000000C0000000000180000000000300000000000700000000000E0000000000
+1C00000000007FFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE300B7D9637>I<FFFFFFFFFF
+FEFFFFFFFFFFFF7FFFFFFFFFFE1C00000000000E00000000000700000000000300000000
+0001800000000000C00000000000C000000000006000000000300B7D8E37>I<00000000
+06000000000003000000000003000000000001800000000000C00000000000E000000000
+00700000000000387FFFFFFFFFFEFFFFFFFFFFFF7FFFFFFFFFFF300B7D9637>I<7FFFFF
+FFFFFFFFFFFFFFFFFF7FFFFFFFFFFE0000000000380000000000700000000000E0000000
+0000C0000000000180000000000300000000000300000000000600300B7D8E37>I<0001
+C00001C00000E00000F87FFFFEFFFFFE7FFFFE17077EA61C>I<07C01FF03FF8783C701C
+E00EE00EE00EE00EE00E701C783C3FF81FF007C00F0F7D9416>I<0F003FC07FE07FE0FF
+F0FFF0FFF0FFF07FE07FE03FC00F000C0C7F930F>I<E00007E0000770000E78001E3C00
+3C1E00780F81F007FFE001FF80007E00180A7D911F>I<007E0001FF8007FFE00F81F01E
+00783C003C78001E70000EE00007E00007180A7D921F>I E /Fb
+26 120 df<FFFF0000FFFFC000FFFFE0001E01F0001E00F8001E007C001E003C001E001E
+001E001E001E000F001E000F001E000F001E0007801E0007801E0007801E0007801E0007
+801E0007801E0007801E0007801E0007801E0007801E000F001E000F001E000F001E001F
+001E001E001E003E001E007C001E00F8001E01F800FFFFF000FFFFC000FFFF000019227F
+A11D>68 D<FFF800FFF800FFF8000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F000F0F000F0F000F0F000F0F000F0F000FFFFFFFFFFFFFFFFFFF18
+227EA11D>76 D<7FFE0000FFFF80007FFFE0000F03F0000F00F8000F0078000F007C000F
+003C000F003C000F003C000F003C000F007C000F0078000F00F8000F03F0000FFFE0000F
+FF80000FFFC0000F03E0000F00F0000F00F0000F0078000F0078000F0078000F0078000F
+0078000F0078000F0079E00F0079E00F0079E00F0039E07FE03FC0FFF01FC07FE007001B
+227FA11D>82 D<7FE07FE0FFF0FFF07FE07FE00F000F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F0007801E0007801E0003C03C0003C03C0001F0F80000FFF000007FE000001F80001C
+2280A11D>85 D<600000F00000F00000F800007800007C00003C00003E00001E00001F00
+000F00000F800007800007C00003C00003C00003E00001E00001F00000F00000F8000078
+00007C00003C00003E00001E00001F00000F00000F00000F800007800007C00003C00003
+E00001E00001F00000F00000F800007800007C00003C00003C000018162B7DA51D>92
+D<0FF800003FFF00007FFF80007C07C0007C03E0003801E0000000F0000000F0000000F0
+00003FF00003FFF0000FFFF0003FC0F0007E00F0007800F000F000F000F000F000F000F0
+00F000F0007801F0007C07F0003FFFFF800FFE7F8003F81F8019187D971D>97
+D<7F800000FF8000007F8000000780000007800000078000000780000007800000078000
+00078000000787C000079FF00007FFFC0007F83E0007E01F0007C00F0007C00780078007
+8007800380078003C0078003C0078003C0078003C0078003C0078003C007800380078007
+8007C0078007C00F0007E01E0007F07E0007FFFC0007BFF000038FC0001A2280A11D>I<
+007F8003FFE007FFF00F81F01E01F03C00E0780000780000780000F00000F00000F00000
+F00000F00000F000007800007800007800F03C00F01E01F00F83E007FFC003FF80007E00
+14187C971D>I<0007F800000FF8000007F8000000780000007800000078000000780000
+007800000078000000780000FC780003FF78000FFFF8001F83F8001E01F8003C00F80078
+0078007800780070007800F0007800F0007800F0007800F0007800F0007800F000780070
+007800780078007800F8003C01F8003E03F8001F07F8000FFF7F8003FE7FC000F87F801A
+227EA11D>I<00FC0003FF0007FFC01F83E01E01E03C00F07800F0780078700078F00078
+FFFFF8FFFFF8FFFFF8F00000F000007800007800003C00783C00781E00F80F81F007FFE0
+01FFC0007F0015187D971D>I<0001FC000FFE001FFF003E1F003C1F00780E0078000078
+000078000078007FFFFCFFFFFCFFFFFC0078000078000078000078000078000078000078
+000078000078000078000078000078000078000078000078000078000078000078003FFF
+F07FFFF83FFFF018227FA11D>I<00F83E0003FEFF0007FFFF800F8FC7801E03C7001E03
+C0003C01E0003C01E0003C01E0003C01E0003C01E0003C01E0001E03C0001E03C0000F8F
+80001FFF00001FFE00001CF800001C0000001C0000001E0000000FFF80000FFFF0003FFF
+FC003C007C0070000E0070000F00E0000700E0000700E0000700E000070070000E007800
+1E003F00FC001FFFF80007FFE00000FF000019257E971D>I<7F800000FF8000007F8000
+00078000000780000007800000078000000780000007800000078000000787E000079FF8
+0007BFFC0007F83C0007F01E0007E01E0007C01E0007801E0007801E0007801E0007801E
+0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E
+0007801E007FF87FE0FFFCFFF07FF87FE01C2280A11D>I<00600000F00001F80001F800
+00F0000060000000000000000000000000000000007FF800FFF8007FF800007800007800
+007800007800007800007800007800007800007800007800007800007800007800007800
+0078000078000078000078007FFFF8FFFFF87FFFF815237CA21D>I<FFF800FFF800FFF8
+000078000078000078000078000078000078000078000078000078000078000078000078
+000078000078000078000078000078000078000078000078000078000078000078000078
+00007800007800007800007800FFFFFCFFFFFCFFFFFC16227DA11D>108
+D<FC781E00FDFC7F00FFFEFF801F8FE3801F07C1C01E0781C01E0781C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C01C0701C01C0701C01C0701C0FF8FE3F8FF9FE7F8FF8FE3F81D1880971D>I<7F87E000
+FF9FF8007FBFFC0007F83C0007F01E0007E01E0007C01E0007801E0007801E0007801E00
+07801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E00
+07801E0007801E007FF87FE0FFFCFFF07FF87FE01C1880971D>I<00FC0003FF000FFFC0
+1F87E03E01F03C00F0780078780078F0003CF0003CF0003CF0003CF0003CF0003CF0003C
+F8007C7800787C00F83C00F03E01F01F87E00FFFC003FF0000FC0016187D971D>I<7F87
+C000FF9FF0007FFFFC0007F83E0007E01F0007C00F0007C0078007800780078003800780
+03C0078003C0078003C0078003C0078003C0078003C0078003800780078007C0078007C0
+0F0007E01E0007F07E0007FFFC0007BFF000078FC0000780000007800000078000000780
+000007800000078000000780000007800000078000007FF80000FFFC00007FF800001A24
+80971D>I<007E3C0001FF3C0007FFFC000F83FC001E00FC003C007C003C007C0078003C
+0078003C00F0003C00F0003C00F0003C00F0003C00F0003C00F0003C0078003C0078003C
+0078007C003C00FC001E01FC001F83FC0007FFBC0003FF3C0000FC3C0000003C0000003C
+0000003C0000003C0000003C0000003C0000003C0000003C0000003C000003FFC00007FF
+E00003FFC01B247E971D>I<7FE07C00FFE1FF007FE7FF8001EF8F8001FE0F8001FC0700
+01F8000001F0000001F0000001F0000001E0000001E0000001E0000001E0000001E00000
+01E0000001E0000001E0000001E0000001E0000001E000007FFFE000FFFFE0007FFFE000
+19187F971D>I<03FCE01FFFE03FFFE07C07E07001E0E001E0E001E0F001E07800007FC0
+003FFE000FFF8001FFE00007F00000F0700078F00038F00038F80038FC0070FE01F0FFFF
+E0EFFF80E1FE0015187C971D>I<00E00001E00001E00001E00001E00001E00001E0007F
+FFFCFFFFFCFFFFFC01E00001E00001E00001E00001E00001E00001E00001E00001E00001
+E00001E00001E00001E01E01E01E01E01E01E01E01E01E00F07C00FFF8003FF0000FC017
+1F7F9E1D>I<7F81FE00FF83FE007F81FE0007801E0007801E0007801E0007801E000780
+1E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E000780
+1E0007801E0007803E0007807E0003C0FE0003FFFFE001FFDFF0007F1FE01C1880971D>
+I<7FE1FF80FFE1FFC07FE1FF800E001C000F003C00070038000700380007807800038070
+000380700003C0F00001C0E00001C0E00001E1E00000E1C00000E1C00000F3C000007380
+000073800000738000003F0000003F0000003F0000001E00001A187F971D>I<FFC0FFC0
+FFE1FFC0FFC0FFC01C000E001C000E001C000E001C000E001C000E001E001E000E001C00
+0E1E1C000E1E1C000E3F1C000E3F1C000E331C00073338000773B8000773B8000773B800
+0761B80007E1F80003E1F00003E1F00003C0F0001A187F971D>I
+E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 400dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 0 55 a Fb(\\Rightharpoonup)167 b Fa(\000)0 177
+y Fb(\\Leftharpoondown)138 b Fa(\001)0 299 y Fb(\\Upharpoonleft)207
+b Fa(\002)0 421 y Fb(\\Downharpoonright)120 b Fa(\003)0
+542 y Fb(\\Rightharpoondown)109 b Fa(\004)0 664 y Fb(\\Leftharpoonup)
+196 b Fa(\005)0 786 y Fb(\\Upharpoonright)178 b Fa(\006)0
+908 y Fb(\\Downharpoonleft)149 b Fa(\007)0 1029 y Fb(\\Rrightarrow)254
+b Fa(\010)0 1151 y Fb(\\Lleftarrow)283 b Fa(\011)0 1273
+y Fb(\\Rrelbar)376 b Fa(\012)0 1395 y Fb(\\dashbar)g
+Fa(\013)0 1517 y Fb(\\shortrightarrow)151 b Fa(\014)0
+1638 y Fb(\\shortleftarrow)180 b Fa(\015)0 1760 y Fb(\\rightmonotail)
+209 b Fa(\016)0 1882 y Fb(\\leftmonotail)238 b Fa(\017)0
+2004 y Fb(\\squiggle)347 b Fa(\020)0 2125 y Fb(\\rightarrow)283
+b Fa(\021)0 2247 y Fb(\\leftarrow)312 b Fa(\022)0 2369
+y Fb(\\leftrightarrow)167 b Fa(\023)0 2491 y Fb(\\leftharpoonup)196
+b Fa(\024)0 2612 y Fb(\\leftharpoondown)138 b Fa(\025)0
+2734 y Fb(\\rightharpoonup)167 b Fa(\026)0 2856 y Fb
+(\\rightharpoondown)109 b Fa(\027)0 2978 y Fb(\\vect)471
+b Fa(\030)0 3099 y Fb(\\of)532 b Fa(\031)0 3221 y Fb(\\dotp)477
+b Fa(\032)0 3343 y Fb(\\cupp)470 b Fa(\033)0 3465 y Fb(\\capp)g
+Fa(\034)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/diagrams/kuvio/arrsy/symbols.tex b/macros/generic/diagrams/kuvio/arrsy/symbols.tex
new file mode 100644
index 0000000000..e7f5ef289b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/symbols.tex
@@ -0,0 +1,43 @@
+
+\input arrsy
+
+\parindent=0pt
+\nopagenumbers
+\parskip=10pt
+
+\def\disp#1{{\tt\string#1}\hfil\hbox to 0pt{\hss$#1$\hss}}
+\def\test#1{\leavevmode\hbox to 4cm{\disp#1}\par}
+
+\test\Rightharpoonup
+\test\Leftharpoondown
+\test\Upharpoonleft
+\test\Downharpoonright
+\test\Rightharpoondown
+\test\Leftharpoonup
+\test\Upharpoonright
+\test\Downharpoonleft
+\test\Rrightarrow
+\test\Lleftarrow
+\test\Rrelbar
+\test\dashbar
+\test\shortrightarrow
+\test\shortleftarrow
+\test\rightmonotail
+\test\leftmonotail
+\test\squiggle
+\test\rightarrow
+\test\leftarrow
+\test\leftrightarrow
+\test\leftharpoonup
+\test\leftharpoondown
+\test\rightharpoonup
+\test\rightharpoondown
+{\def\disp#1{#1}%
+ \leavevmode\test{{\tt \string\vect}\hfil\hbox to 0pt{\hss$\vect{ }$\hss}}
+}%
+\test\of
+\test\dotp
+\test\cupp
+\test\capp
+
+\bye
diff --git a/macros/generic/diagrams/kuvio/doc-src/README b/macros/generic/diagrams/kuvio/doc-src/README
new file mode 100644
index 0000000000..abd75abec4
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/README
@@ -0,0 +1,55 @@
+08 Jun 1996
+
+This is the source to my "Typesetting diagrams with kuvio.tex". In
+order to run tex (not latex!) on either tdwk.tex or tdwk-A4.tex,
+you'll first need to do the following.
+
+ 1. Get yourself on a really big TeX - tdwk.tex consumes an obscene amount
+ of memory. (I kid not.)
+
+ 2. Install the bbm family of fonts, available on any CTAN node.
+ In particular, you'll need bbm10 and bbmsl10. Please don't make
+ any substitutions if you're going to put the resulting .dvi or
+ .ps file in a public place.
+
+ 3. Install my arrsy10 font, available wherever kuvio.tex is.
+
+ 4. Include the subdirectories of ./macros in your TEXINPUTS path.
+
+ 5. Make sure the current patchlevel of kuvio.tex is on your TEXINPUTS.
+
+ 6. Make sure the directory ./tdwk exists and is writable.
+
+To speed things up, you can also do the following.
+
+ 7. Unpack either kuv.tar.gz or kuv-A4.tar.gz, depending on whether
+ you are using letter or A4 paper.
+
+With these files, you need only do "tex tdwk" or "tex tdwk-A4"
+to process the documentation. Otherwise you will have to do
+
+ tex file
+ makeindex -s tdwk.ist file.idx
+ tex file
+
+where file=tdwk or file=tdwk-A4, as appropriate.
+
+Unless you have a dvi previewer which understands dvips' \special
+syntax, you will not be able to properly preview tdwk.dvi or
+tdwk-A4.dvi. However, you can always do
+
+ dvips file -o
+
+and then preview the resulting .ps file. Also, you will need to keep
+the files in ./eps in their current location relative to tdwk.dvi and
+tdwk-A4.dvi should you move either of these two.
+
+If all this seems like too much work, a PostScript version of
+"Typesetting diagrams with kuvio.tex" can be obtained from
+
+ ftp://ftp.math.ubc.ca/pub/svensson/kuvio/
+
+in the files tdwk.ps.gz (letter) and tdwk-A4.ps.gz (A4). If this isn't
+available to you, send me an email.
+
+Anders <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex
new file mode 100644
index 0000000000..72a787ce44
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex
@@ -0,0 +1,15 @@
+$$
+\let~\tilde
+\cellwidth+=17mm \columndist+=12mm
+\gravitateleft
+\Dg
+ & & K & \rMono && E_1^\alpha& \rEpi^{\eta'}&& A' \\
+ & \ldTo& & && & & \ruBar \\
+~K& & \dBar\rMono\br& ~E_1^\alpha&& \dTo\rEpi^{~\eta'}\br&
+ A' \\
+\dBar& & & && & & & \dTo>\alpha \\
+ & & K & \rMono\dTo\br&& E_1\ax{2mm}& \rEpi\dTo\br&& A \\
+ & \ldTo& & & \ldTo& & & \ldBar \\
+~K& & \rMono & ~E_1 & \rEpi_{~\eta}& & A \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex
new file mode 100644
index 0000000000..c0be43f6d9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex
@@ -0,0 +1,23 @@
+$$
+\dotted
+\grid=7mm
+\yscale=2
+\Diagram
+&&&&&&&&&xz&&&&xyz&&&&xy^2z&&&&xy^3z&\\
+\\
+z&&&&zy&&&&zy^2&&&&zy^3\\
+\dy{-.2}
+&&&&&&&&&x&&&&xy&&&&xy^2&&&&xy^3\\
+\\
+&&&&y&&&&y^2&&&&y^3\\
+\Modify
+\Line (0,0) (4,0) \dt{1pt}
+\Line (4,0) (8,0)
+\Line (8,0) (12,0)
+\Line (12,0) (22.5,0)
+\Line (0,0) (0,3) \dt{1pt}
+\Line (0,3) (0,5.2)
+\To (9,2) (12,0)
+\To (9,5) (12,3)
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex
new file mode 100644
index 0000000000..919470e7b4
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex
@@ -0,0 +1,24 @@
+$$
+\dotted
+\grid=7mm
+\yscale=2
+\Diagrampad=0pt
+\Diagram
+&&&&&&&&&xz&&&&xyz&&&&xy^2z&&&&xy^3z&\\
+\\
+z&&&&zy&&&&zy^2&&&&zy^3\\
+\dy{-.2}
+&&&&&&&&&x&&&&xy&&&&xy^2&&&&xy^3\\
+\\
+&&&&y&&&&y^2&&&&y^3\\
+\Modify
+\Line (0,0) (4,0) \dt{1pt}
+\Line (4,0) (8,0)
+\Line (8,0) (12,0)
+\Line (12,0) (22.5,0)
+\Line (0,0) (0,3) \dt{1pt}
+\Line (0,3) (0,5.2)
+\To (9,2) (12,0)
+\To (9,5) (12,3)
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex
new file mode 100644
index 0000000000..f068b6acdc
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex
@@ -0,0 +1,30 @@
+$$
+\def\T{{\bf T}} \def\S{{\bf S}}
+\landscape \let\labelstyle\textstyle
+\cellpush=10pt \xscale=2.2
+\Diagram
+ & & H_n(X^+\cup\T A^+, X^+) &
+ \lTo ^{H_n(k_1)} & & H_n(\T A^+,A^+)
+ \aTo (-3,-2) _{H_n(p_1)}
+ \aTo (3,-4) ^{\partial_1} \\
+ & & \dTo >{H_n{q_1}} \\
+ & & H_n(\S A^+,P) &
+ & & * \dx{.7} \\
+ & \ruTo _{H_n(q_4)} \tx{15pt}
+ & \uTo >{H_n(t)} \\
+H_n(X^+\cup\T A^+,P) \aTo (2,4) ^{H_n(j_1)} \tx{15pt}
+ \aTo (2,-4) _{H_n(j_2)} \tx{15pt}
+ & & & & & & H_{n-1}(A) &
+ \rTo ^{H_{n-1}(i_A)} & H_{n-1}(A^+,P) \\
+ & \rdTo ^{H_n(q_2)} \tx{15pt}
+ & & & & \ruTo \\
+ & & H_n(X^+/A^+,P) &
+ \lTo ^{P_n(X,A)} & H_n(X,A)
+ \aTo (1,-2) >{H_n(i_X)} \\
+ & & \uTo >{H_n(q_3)} \\
+ & & H_n(X^+\cup\T A^+,\T A^+)&
+ \lTo _{H_n(k_2)} & & H_n(X^+,A^+)
+ \aTo (3,4) _{\partial_2}
+ \aTo (-3,2) _{H_n(p_X)} \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex
new file mode 100644
index 0000000000..f9b8c2024e
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex
@@ -0,0 +1,7 @@
+$$
+\Dg
+F\times K\times U & \rTo ^{\rm proj} & & K\times U \\
+\dTo & & & \dTo >{\rm proj} \\
+F\times_K (K\times U) & {} \approx F\times U & \rTo ^{\rm proj}& U \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex
new file mode 100644
index 0000000000..a2b3d0518c
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex
@@ -0,0 +1,22 @@
+$$
+\cellpush=4pt
+\let\labelstyle\textstyle
+\lpad=1in \bpad=1cm
+\Graph{4in,4}{3.5in,1in}
+\To (0,0) (3.3,0) \hd{p}
+\To (0,0) (0,3.5) \hd{q}
+\Line (2,0) (2,3.25) \Line (0,1) (3.2,1) \Dot (2,1)
+\Dot (0,0)
+%
+\Dot (2,0) \Dot (2.25,0) \Dot (2.5,0) \Dot (2.75,0) \Dot (3,0)
+%
+\Dot (0,1) \Dot (0,1.25) \Dot (0,1.5) \Dot (0,1.75)
+\Dot (0,2) \Dot (0,2.25) \Dot (0,2.5) \Dot (0,2.75) \Dot (0,3)
+%
+\Line (0,2.25) (2.5,0) ^{d^p} :{.35,5pt} \ro
+\Line (0,3) (3,0) ^{p + q = m + n} :{.35,5pt} \ro
+%
+\Math{q = n} (-.1,1) *1 \Math{E_{0,p-1}^2 = E_{0,p-1}^p} (-.1,2.25) *1
+\Math{p = m} (2,-.2) *{.55} \Math{E_{p,0}^2 = E_{p,0}^p} (2.75,-.2) *{.6}
+\endGraph
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex
new file mode 100644
index 0000000000..5f06e3915b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex
@@ -0,0 +1,15 @@
+$$
+\grid=.75cm
+\Diagram
+A' & & \rTo ^{f'} & & B' \\
+ & \rdTo <a \dh{2pt}& & & & \rdTo _b \\
+\dTo <{g'} & & A & & \dTo <{h'} :{.25}
+ \rTo ^f :{.25} \br
+ & & B \\
+ \\
+C' & & \rTo ^{k'} :{.75} \dTo <g :{.25} \br
+ & & D' & & \dTo >h \\
+ & \rdTo _c \dh{.5pt}&& & & \rdTo _d \\
+ & & C & & \rTo ^k & & D \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex
new file mode 100644
index 0000000000..402af15644
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex
@@ -0,0 +1,28 @@
+$$
+\rotatedlabels \let\labelstyle\textstyle \scale=2
+\Diagram
+ & & F(3,2) \aLine (1,-4) >{F(3,1,1)} :{.4} \br \\
+ & & & \rdLine >{F(1,2,2)} \pt{right,.75} \\
+ & & & & F(1,4) \\
+F(2,3) \aDash (4,1) ^{F(1,1,3)} :{.4} \pp \\
+ & & & F(4,1) \aLine (1,2) >{F(1,3,1)} \\
+\Modify
+\Pt{top} (2,4) \Pt{b1} (0,1) \Pt{b2} (3,0)
+\Pt{LeftF} (1.65,2) \Pt{BackF} (2,2.5)
+\Pt{BottomF} (2.5,1) \Pt{RightF} (3.1,2.25)
+\Nul \pt{b1} \pt{b2} \pt{bottom,.8}
+\Nul \pt{BottomF} \pt{bottom} \pt{BottomL,2}
+\Dash \pt{BottomF} \pt{bottom} \tl\circ \dt{3pt}
+\Line \pt{bottom} \pt{BottomL} \hd{F(1,1,2,1)}
+\Line \pt{b1} \pt{b2} _{F(2,2,1)} \br
+\Nul \pt{b1} \pt{top} \pt{left,.25} \pt{back,.75}
+\Nul \pt{BackF} \pt{back} \pt{BackL,2}
+\Nul \pt{LeftF} \pt{left} \pt{LeftL,2}
+\Dash \pt{BackF} \pt{back} \tl\circ \dt{3pt}
+\Line \pt{back} \pt{BackL} \hd{F(1,1,1,2)}
+\Line \pt{b1} \pt{top} <{F(2,1,2)} \br
+\Line \pt{LeftF} \pt{LeftL} \tl\bullet \hd{F(2,1,1,1)} \jt \br
+\Nul \pt{RightF} \pt{right} \pt{RightL,3}
+\Line \pt{RightF} \pt{RightL} \tl\bullet \hd{F(1,2,1,1)} \jt \br
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex
new file mode 100644
index 0000000000..383bdc4f63
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex
@@ -0,0 +1,13 @@
+$$
+\def\y#1#2{Y(#1,#2)} \def\RP{{\bb R}P}
+\gravitateright
+\Dg
+&&&\RP^1 = {}& \y11 & \rInto & \y21 & \rInto & \y31 & \rInto & \y41 & \rInto & \cdots \\
+&&& & & & \dTo & & \dTo & & \dTo & \\
+&&\RP^2 = {}&& & & \y12 & \rInto & \y22 & \rInto & \y32 & \rInto & \cdots \\
+&& && & & & & \dTo & & \dTo & \\
+&\RP^3 = {}&&& & & & & \y13 & \rInto & \y23 & \rInto & \cdots \\
+& &&& & & & & & & \dTo & \\
+\RP^4 = {}&&&& & & & & & & \y14 & \rInto & \cdots \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex
new file mode 100644
index 0000000000..be4727420f
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex
@@ -0,0 +1,15 @@
+$$
+\joined \let\labelstyle\textstyle
+\Graph{3cm,2}{3cm,4}
+\Line (0,0) (0,4) <{f(z,s)}
+\Line (0,4) (2,4) ^{H(z,t)}
+\Line (0,0) (2,0) _{*}
+\Line (2,0) (2,4)
+\Line (0,4) (2,2) _{\;\;H(z,0) = f(z,1)} \ro
+\endGraph
+\qquad\qquad
+H'(z,t,s) =
+\cases{f(z,2s/(2-t))& if $0\le 2s\le 2 - t$\cr
+ \cr
+ H(z,2s - 2 + t)& if $2 - t\le 2s\le 2$\cr}
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex
new file mode 100644
index 0000000000..7c5c0f3fa3
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex
@@ -0,0 +1,10 @@
+$$
+\def\mod{\mathrel{\big/}}
+\Dg
+{\rm Spin}(3) & & & & SU(2) \\
+ & \rdTo & & \ldTo \\
+ & & SO(3) \\
+ & & \dTo \\
+& O(3)\mod O(1)^3 = {} & SO(3)\mod(O(1)^3\cap SO(3)) \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex
new file mode 100644
index 0000000000..43a47a43d5
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex
@@ -0,0 +1,7 @@
+$$
+\Dg
+u & \rTo ^{e_1} & v & & \rTo \up{3pt} ^f \rTo \up{-3pt} _g & d \\
+\uDashto >s & & \dTo >e & & & \uTo \\
+w & \rTo ^{ee_1s} & w & {} = {\mit\Pi}k_i & \rTo & k_i \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex
new file mode 100644
index 0000000000..b2520a89fb
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex
@@ -0,0 +1,14 @@
+$$
+\def\cod{{\rm cod}\,} \def\dom{{\rm dom}\,}
+\cellwidth+=2mm
+\Dg
+& F & _{\cod u} & \rEq & F & _{\cod u} & & & F_i \\
+& \uTo >{p_u} & & & \uTo & & & \ruTo <{p_i} \tx{-5pt} &
+ \uDashto >{\mu_i} \\
+{\mit\Pi}_{u:j\to k}F_k = {\mit\Pi}_u &
+ F & _{\cod u} & \lTo ^f \up{3pt} \lTo _g \up{-3pt}
+ & {\mit\Pi}_i & & F_i & \lDashto ^e & d \\
+& \dTo >{p_u} & & & \dTo >{p_{\dom u}} \\
+& F & _{\cod u} & \lTo ^{Fu} & F & _{\dom u} \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex
new file mode 100644
index 0000000000..6d7791320e
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex
@@ -0,0 +1,10 @@
+$$
+\cellwidth+=3mm
+\Dg
+Y & \rMono ^y & A & \rLine \jh & \stop \\
+\dEpi & & \dEpi & & \mx{-1cm} \\
+D & \rMono ^d & i_A(A) & & \dLine >{\eta_A} \jn \\
+\dMono & & \dMono \\
+X & \rMono _x & \overline{i_A(A)} & \lTo \jt & \stop \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex
new file mode 100644
index 0000000000..b8e0400f20
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex
@@ -0,0 +1,20 @@
+$$
+\cellpush+=5pt
+\cellwidth+=2mm
+\Dg
+&&_{N+t'}X_p & \rTo ^{g_{p+q}} & _N X_{p+q} \\
+&& \dFillcell{\;\cdots\;\rightarrowfill} &
+ & \dFillcell{\;\cdots\;\rightarrowfill} \\
+ \\
+&& _{N+t'}X_1 & \rTo ^{g_{q+1}} & _N X_{q+1} \\
+&& \dTo & & \dTo \\
+S^{N+t+t'}X \aTo (2,5) ^{f_p} \tx{.7} \hx{5pt} & \rTo ^f &
+ S^{N+t'}X & \rTo ^{g_q} & _N X_q \\
+ \\
+&& & & \dFillcell{\rightarrowfill\;\cdots\;\rightarrowfill} \\
+ \\
+&& & & _N X_1 \\
+&& & & \dTo \\
+&& & & S^N X \bTo (-2,6) <g \hx{.2} \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex
new file mode 100644
index 0000000000..5f5b1d74a9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex
@@ -0,0 +1,13 @@
+$$
+\let\^\widehat \let\~\widetilde
+\flexible \columndist=1cm
+\xgrid+=2mm \ygrid+=-2mm
+\Diagram
+ & & & &H^0 \bTo(-1,-4) \hx{-2pt}
+ &\cdots &H^{n-1} &H^n &H^{n+1} &H^{n+2} &\cdots \\
+\mx{5mm}& & & &\dTo & &\dTo &\dEpi&\dBar &\dBar &\mx{-2mm}\\
+\cdots &\^H^{-3} &\^H^{-2} &\^H^{-1}&\^H^0 &\cdots &\^H^{n-1}&\^H^n&\^H^{n+1}&\^H^{n+2}&\cdots\\
+ &\dBar &\dBar &\dInto &\dTo & &\dTo \dx{-2mm} \\
+\cdots &\~H_{n+2}&\~H_{n+1}&\~H_n &\~H_{n-1}&\cdots&\~H_0 \aTo(1,4) \hx{-2pt} \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex
new file mode 100644
index 0000000000..6be4f5a5d6
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex
@@ -0,0 +1,13 @@
+$$
+\let\^\widehat \let\~\widetilde
+\flexible \columndist=1cm
+\xgrid+=2mm \ygrid+=-2mm
+\Diagram
+ & & & &H^0 \bTo(-1,-4) \hx{-2pt}
+ &\cdots&H^{n-1} &H^n &H^{n+1}&H^{n+2} &\cdots \\
+\mx{5mm}& & & &\dTo & &\dTo &\dEpi&\dBar &\dBar &\mx{-2mm}\\
+\cdots&\^H^{-3} &\^H^{-2} &\^H^{-1}&\^H^0 &\cdots&\^H^{n-1}&\^H^n&\^H^{n+1}&\^H^{n+2}&\cdots\\
+ &\dBar &\dBar &\dInto &\dTo & &\dTo \dx{-2mm} \\
+\cdots&\~H_{n+2}&\~H_{n+1}&\~H_n&\~H_{n-1}&\cdots&\~H_0 \aTo(1,4) \hx{-2pt} \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex
new file mode 100644
index 0000000000..a93205708b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex
@@ -0,0 +1,12 @@
+$$
+\def\M{{\cal M}\dot} \def\inv{^{-1}} \def\orlz#1{\langle#1\rangle}
+\let\labelstyle\textstyle
+\Dg
+[q(g,b),t] \aNul (1,-1) \aMapsto (2,-4) &&& \rMapsto &&&
+ q(g,\phi(b,t)) \aNul (-1,-1) \aMapsto (-2,-4) \mx{12pt} \\
+ & \M R_s & & \rTo & & \beta\inv(W_s) \\
+ & & \rdTo & & \ldTo >{R_s} \\
+ & & & \beta\inv\orlz{s} \\
+ & & q(g,r_s(b)) & {} = {} & q(g,r_s(\phi(b,t))) \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eps/face.eps b/macros/generic/diagrams/kuvio/doc-src/eps/face.eps
new file mode 100644
index 0000000000..47d51b7f84
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eps/face.eps
@@ -0,0 +1,211 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: UNTITLED1 - /Quantum/me
+%%Creator: Diagram
+%%CreationDate: Tue Oct 1 00:36:38 1991
+%%For: me
+%%DocumentFonts: (atend)
+%%Pages: 0 1
+%%BoundingBox: 201 314 384 450
+%%EndComments
+
+%%BeginDocument: /usr/lib/NextStep/printPackage.ps
+%!PS-Adobe-2.0
+%%Title: Printing Package
+%%EndComments
+%Version: 2.0
+%Copyright: 1988, NeXT, Inc.
+
+/__NXdef{1 index where{pop pop pop}{def}ifelse}bind def
+/__NXbdef{1 index where{pop pop pop}{bind def}ifelse}bind def
+/UserObjects 10 array __NXdef
+/defineuserobject{
+ exch dup 1 add dup UserObjects length gt{
+ array dup 0 UserObjects putinterval
+ /UserObjects exch def
+ }{pop}ifelse UserObjects exch 3 -1 roll put
+}__NXbdef
+/undefineuserobject{UserObjects exch null put}__NXbdef
+/execuserobject{UserObjects exch get exec}__NXbdef
+/__NXRectPath{4 2 roll moveto 1 index 0 rlineto
+0 exch rlineto neg 0 rlineto closepath}__NXbdef
+/__NXProcessRectArgs{
+ 1 index type /arraytype eq{
+ exch 0 4 2 index length 1 sub{
+ dup 3 add 1 exch{1 index exch get exch}for
+ 5 1 roll 5 index exec
+ }for pop pop
+ }{exec}ifelse
+}__NXbdef
+/rectfill{gsave newpath {__NXRectPath fill} __NXProcessRectArgs grestore}__NXbdef
+/rectclip{newpath {__NXRectPath} __NXProcessRectArgs clip newpath}__NXbdef
+/rectstroke{
+ gsave newpath dup type /arraytype eq{dup length 6 eq}{false}ifelse{
+ {gsave __NXRectPath null concat stroke grestore}
+ dup length array cvx copy dup 2 4 -1 roll put __NXProcessRectArgs
+ }{{__NXRectPath stroke} __NXProcessRectArgs}ifelse grestore
+}__NXbdef
+/xyshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index 2 mul 1 add get add exch
+ 3 index 3 index 2 mul get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/xshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ exch 3 index 3 index get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/yshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index get add moveto pop
+ }for pop pop
+}__NXbdef
+/arct{arcto pop pop pop pop}__NXbdef
+/setbbox{pop pop pop pop}__NXbdef
+/ucache{}__NXbdef
+/ucachestatus{mark 0 0 0 0 0}__NXbdef
+/setucacheparams{cleartomark}__NXbdef
+/uappend{systemdict begin cvx exec end}__NXbdef
+/ueofill{gsave newpath uappend eofill grestore}__NXbdef
+/ufill{gsave newpath uappend fill grestore}__NXbdef
+/ustroke{
+ gsave newpath dup length 6 eq
+ {exch uappend concat}{uappend}ifelse
+ stroke grestore
+}__NXbdef
+/__NXustrokepathMatrix dup where {pop pop}{matrix def}ifelse
+/ustrokepath{
+ newpath dup length 6 eq{
+ exch uappend __NXustrokepathMatrix currentmatrix exch concat
+ strokepath setmatrix
+ }{uappend strokepath}ifelse
+} __NXbdef
+/upath{
+ [exch {/ucache cvx}if pathbbox /setbbox cvx
+ {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx}pathforall]cvx
+} __NXbdef
+/setstrokeadjust{pop}__NXbdef
+/currentstrokeadjust{false}__NXbdef
+/selectfont{exch findfont exch
+dup type /arraytype eq {makefont}{scalefont}ifelse setfont}__NXbdef
+/_NXCombineArrays{
+ counttomark dup 2 add index dup length 3 -1 roll {
+ 2 index length sub dup 4 1 roll 1 index exch 4 -1 roll putinterval exch
+ }repeat pop pop pop
+}__NXbdef
+/setcmykcolor{
+ 1.0 exch sub dup dup 6 -1 roll
+ sub dup 0 lt{pop 0}if 5 1 roll
+ 4 -1 roll sub dup 0 lt{pop 0}if 3 1 roll
+ exch sub dup 0 lt{pop 0}if setrgbcolor
+}__NXbdef
+/currentcmykcolor{currentrgbcolor 3{1.0 exch sub 3 1 roll}repeat 0}__NXbdef
+/flushgraphics{}def
+/setwindowtype{pop pop}def
+/currentwindowtype{pop 0}def
+/setalpha{pop}def
+/currentalpha{1.0}def
+/hidecursor{}def
+/obscurecursor{}def
+/revealcursor{}def
+/setcursor{4 {pop}repeat}bind def
+/showcursor{}def
+/NextStepEncoding where not{
+/NextStepEncoding StandardEncoding 256 array copy def
+0 [129/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/Ccedilla/Egrave
+/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/Ugrave/Uacute
+/Ucircumflex/Udieresis/Yacute/Thorn/mu/multiply/divide/copyright
+176/registered 181/brokenbar 190/logicalnot 192/onesuperior 201/twosuperior
+204/threesuperior 209/plusminus/onequarter/onehalf/threequarters/agrave
+/aacute/acircumflex/atilde/adieresis/aring/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave 226/iacute 228/icircumflex/idieresis/eth
+/ntilde 236/ograve/oacute/ocircumflex/otilde/odieresis 242/ugrave/uacute
+/ucircumflex 246/udieresis/yacute 252/thorn/ydieresis]
+{dup type /nametype eq
+ {NextStepEncoding 2 index 2 index put pop 1 add}{exch pop}ifelse
+}forall pop
+/NextStepEncoding NextStepEncoding readonly def
+/_NXfstr 128 string dup 0 (_NX) putinterval def
+/findfont{
+ % Because we can never let NextStepEncoding get into
+ % SharedFontDirectory, we cannot reencode a font to NextStepEncoding
+ % if we are in shared mode. So if currentshared is true,
+ % we call the normal findfont and return that
+ /currentshared where {pop currentshared} {false} ifelse
+ {//findfont exec}
+ {dup _NXfstr 3 125 getinterval cvs length 3 add _NXfstr 0 3 -1 roll
+ getinterval cvn exch FontDirectory 2 index known
+ {pop FontDirectory exch get}
+ {//findfont exec dup /Encoding get StandardEncoding eq
+ { dup length dict exch
+ {1 index /FID ne {2 index 3 1 roll put}{pop pop}ifelse}forall
+ dup /Encoding NextStepEncoding put definefont
+ }{exch pop} ifelse
+ }ifelse
+ }ifelse
+}bind def
+}{pop}ifelse
+/_NXProcArray 5 array __NXdef
+/_NXChannels 0 __NXdef
+/_NXTotalBytes 0 __NXdef
+/_NXDoImageOp{
+ 1 index{dup}{1}ifelse /_NXChannels exch store
+ _NXChannels 2 add 2 roll _NXProcArray 0 _NXChannels getinterval astore pop
+ 5 index 4 index mul 2 index{1 sub 8 idiv 1 add mul}{mul 1 sub 8 idiv 1 add}ifelse
+ 4 index mul /_NXTotalBytes exch store pop exch pop
+ gsave matrix invertmatrix concat 0.5 setgray 0 0 4 2 roll rectfill grestore
+ { 0 1 _NXChannels 1 sub{
+ _NXProcArray exch get exec
+ length _NXTotalBytes exch sub /_NXTotalBytes exch store}for
+ _NXTotalBytes 0 le{exit}if
+ }loop /_NXProcArray 5 array def
+}__NXbdef
+/colorimage{_NXDoImageOp}__NXbdef
+/alphaimage{1 add _NXDoImageOp}def
+%%EndDocument
+
+gsave
+-20 -28 translate
+ /__NXbasematrix matrix currentmatrix def
+grestore
+%%EndProlog
+%%BeginSetup
+/DIAGRAMline {
+ moveto rlineto stroke
+} def /DIAGRAMarrow {
+ [] 0 setdash newpath moveto dup rotate 0 currentlinewidth sub 1.2 mul 0 rmoveto -9 3 rlineto 2 -3 rlineto -2 -3 rlineto closepath gsave 0 setlinejoin stroke grestore fill neg rotate
+} def /DIAGRAMpreparelines {
+ /DIAGRAMlinetype exch def setlinewidth setrgbcolor 2 setlinejoin DIAGRAMlinetype 0 eq {
+ [] 0 setdash
+ } if DIAGRAMlinetype 1 eq {
+ [ 5 currentlinewidth add dup ] 0 currentlinewidth add setdash
+ } if DIAGRAMlinetype 2 eq {
+ [ 0 currentlinewidth add 5 currentlinewidth add ] 0 currentlinewidth add setdash
+ } if DIAGRAMlinetype 3 eq {
+ [ 5 currentlinewidth add 4 currentlinewidth add 0 currentlinewidth add 4 currentlinewidth add ] 0 currentlinewidth add setdash
+ } if
+} def
+%%EndSetup
+gsave
+201 314 183 136 rectclip
+gsave
+206.000000 319.000000 transform
+gsave __NXbasematrix setmatrix itransform translate
+<ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5ffffffffffffffffffffffffffffffffffffff545599bfffffffffffffffffffffffffffffffffffffffffd4fffffffffffffffffffffffffffffffffff5555555555557ffffffffffffffffffffffffffffffffffffffc3fffffffffffffffffffffffffffffffff545454559999999afffffffffffffffffffffffffffffffffffffc2fffffffffffffffffffffffffffffff5555555555555555655affffffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff555459555599999999999affffffffffffffffffffffffffffffffffe4fffffffffffffffffffffffffffff55555555555555555555555afffffffffffffffffffffffffffffffffe5ffffffffffffffffffffffffffff4545455555595959599999999effffffffffffffffffffffffffffffffd0fffffffffffffffffffffffffff555555555555555565656565656bfffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffff5455545555999599959999999999abffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffd555555555555555555555555555556bffffffffffffffffebfffffffffffc0fffffffffffffffffffffffff5454545555959599999999999999999afffffffffffeffffebffeffffffffc0ffffffffffffffffffffffff555555555555555556565656565656565affffffffffebfffabfeaffffffffc0fffffffffffffffffffffff55455545555999999999999999999999999bfffffffffeaffeaffebffffffffc0ffffffffffffffffffffffd555555555555555555555555555555555556bfffffffffaffebffafffffffffc0ffffffffefffffffffffff4545454545595959595999999999999999999afffffffffebfeffebfefffffffc0ffffffafebfafffffffffd55555555555555565556565656565656565656bffffffffebfabfabfabffffffc0ffffffafdbfafffffffff554555455959995599599999999999999999999bffffffffeefaffafeefffffffc0ffffff6fdbf6ffffffffd5555555555555555555555555555555555555556ffffffffeaf6febfebfffffffc0ffffffafdffaffffffff45454545555545595959999999999999999999999fffffffffaf9feffeffffffffc0fffaff6fdbfebffffffd55555555555555555556565656565656565656565affffffffab5babeaffffffffc0fffaffafdbfdfffffff554555455599599999999999999999999999999999affffffffa9575bebffffffffc0fffeafdbdbfdbffffff5555555555555555555555555555555555555555556bfffffff56aaa6afffffffffc0ffffafdfdffebffffff5454555454955595959999999999999999999999999affffffeaeaeaebfffffffffc0ffffdadbf6f6ffffff555555555555555555555656565656565656565656566bfffffaaaaaaabfffffffffc0fffffafafafaffffff545554555459559995999599999999999999999999999bfffff554556aafffffffffc0fffff6b6b5f6fffffd555555555555555555555555555555555555555555555affffe955a96aafffffffffc0fffffd997576fffffd454545455555455959595999999999999999999999999abeaeaead6eaeafffffffffc0ffffff556aaafffff55555555555555555555555565656565656565656565656aaaaaaaa5aaabfffffffffc0ffffff5ae455ffffd45554555895999999999999999999999999999999999999d75556aa5aaaffffffffffc0fffffdaa5aa97fffd555555555555555555555555555555555555555555555556bfea56a9aaaffffffffffc0fffffea94eaebfff454545554545595959595959999999999999999999999999affffd468eafffffffffffc0fffffe96a6aaaaa95555555555555555555556565656565656565656565656565afffea956afffffffffffc0fffffeeaa6eaaae85554955599949995959599999995999999999999999999999afffffc9aefffffffffffc0ffffffaa96a955695555555555555555555555555555555555555555555555555affffff56afffffffffffc0fffffff68e9999954545455949595999595959999999999999999999999999999effffffdaafffffffffffc0fffffff555565ff555555555555555555555555656565656565656565656565656bfffffd6abffffffffffc0fffffff5545ffff55455545595599599999999999999999999999999999999999abffffffaaaffffffffffc0fffffff5567fffd555555555555555555555555555555555555555555555555556bffffff5aaffffffffffc0fffffff55affffd545454949455545595959595999999999999999999999999999affffffdaebfffffffffc0fffffff556ffffd5555555555555555555555656565656565656565656565656566fffffffaaafffffffffc0fffffff45affffd455545554599599959999999999999999999999999999999999afffffff9aabffffffffc0fffffff556ffff55555555555555555555555555555555555555555555555555556fffffffdaabffffffffc0fffffff55affff4545454545495949595959999999999999999999999999999999afffffffdaaeffffffffc0fffffff55affff55555555555555555555565656565656565656565656565656566ffffffff69affffffffc0fffffff59bffff5554555999999959999999999999999999999999999999999999affffffffedabfffffffc0fffffff55bffff555555555555555555555555555555555555555555555556a9556ffffffffd9aafffffffc0fffffff55fffff45454549594559595999999999999999999999999999999e0299abffffffff9eafffffffc0ffffffd66bffff55555555555555555555565656565656565656565656566800966957ffffffdaaaffffffc0ffffffd5abffff5455559594959599959999999999999999999999999999980099aaa99fffffdaeabfffffc0ffffffd5abffff55555555555555555555555555555555555555555555565800156aaaa5fffffaaaafffffc0ffffff49affffff5454e995549595959995959599999999999999999999d500019a6aeaeaeaeaeaeafffffc0ffffff56afffffd55560055555555656565656565656565656565656566600001666aaaaaaaaaa56aaffffc0ffffff59effffea55460059558999999999999999999999999999999999a000019a5eaaaeaaae999aabfffc0ffffff55affeaa55558005555555555555555555555555555555555556580000156555555aaaa555563fffc0fffffd495eae995545800959595959595959999999999999999999999d50000099a545454545457fffffffc0fffffd555655555555800255555555555556565656565656565656566500000056a5555555555fffffffffc0fffff5559994555455c00015999599959999999999999999999999999a00000099e455547fffffffffffffc0fffff555555555555560001555555555555555555555555555555556580000005597ffffffffffffffffffc0fffff54545457ff545600009495959599959599999999999999999ad9000000199bfffffffffffffffffffc0ffffd5555557fff555600000155555555656565656565656565656800000000256bfffffffffffffffffffc0ffffd455fffffffd546000001899999999999999999999999999a80c000000019affffffffffffffffffffc0fffffffffffffffd55580000061555555555555555555555555a95a00000000156ffffffffffffffffffffc0fffffffffffffffd454c000000154559599999999999999999a01980000000099affffffffffffffffffffc0fffffffffffffffd555800000015555555555656565656565a5700000000000657ffffffffffffffffffffc0ffffffffffffffff55580000000ae195999999999999999aa5ae0000000000099bffffffffffffffffffffc0ffffffffffffffff5556000000000155555555555555aaa0057800000000001557ffffffffffffffffffffc0fffffffffffffffff5460000000001ae8945aea99aae454ec1a00000000000199fffffffffffffffffffffc0fffffffffffffffff55580000000002b0555555aa956545f80000000000000565fffffffffffffffffffffc0fffffffffffffffffc5560000000000009eed45554ee809e0000000000000199bfffffffffffffffffffffc0fffffffffffffffffd5560000000000001abb0bb85bb800000000000000001557fffffffffffffffffffffc0ffffffffffffffffff454c0000000000002e01aec1ae00000000000000000999ffffffffffffffffffffffc0ffffffffffffffffffd556000000000000000058000000000000000000001657ffffffffffffffffffffffc0ffffffffffffffffffd455c0000000000000000000000000000000000000999fffffffffffffffffffffffc0fffffffffffffffffff55580000000000000000000000000000000000001555fffffffffffffffffffffffc0fffffffffffffffffff5456000000000000000000000000000000000000999bfffffffffffffffffffffffc0fffffffffffffffffffd555800000000000000000115400000000000001656ffffffffffffffffffffffffc0ffffffffffffffffffff54560000000000004440444444000000000000999bffffffffffffffffffffffffc0ffffffffffffffffffffd55580000000005511540111154000000000015557ffffffffffffffffffffffffc0fffffffffffffffffffff5456000000004444444044444440000000009999fffffffffffffffffffffffffc0fffffffffffffffffffffd555800000011010111410111550000000015567fffffffffffffffffffffffffc0ffffffffffffffffffffff5456c000004444444444444444000000019995ffffffffffffffffffffffffffc0ffffffffffffffffffffffd5556000000000111154001155400000055557ffffffffffffffffffffffffffc0fffffffffffffffffffffff5454e0000444444444444444440000059597fffffffffffffffffffffffffffc0fffffffffffffffffffffffd5555a00101010101114101155400055555ffffffffffffffffffffffffffffc0ffffffffffffffffffffffffd4555a044444444444444444440058999fffffffffffffffffffffffffffffc0fffffffffffffffffffffffff55555500000000111501115540555557fffffffffffffffffffffffffffffc0ffffffffffffffffffffffffff454549044404444444044444455957ffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffff5555555000100011501155555557fffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffff55545595444444444444444457ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffd555555554000111511155557fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffd4545454544444444444444ffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffd555555551010115115555ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffd54555455444444444444ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffff5555555501115015555ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffff5454444444444447fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff101114155555fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff444444444444fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff1111555555557ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff4444444444447ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffd015555555557ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffc444444444447ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffd115555555565ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffff444444844487ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffff115555555557ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffff44444444444fffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffd1155555555fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffff444444447ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffd115555ffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffff447fffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0>
+173
+126
+2
+[1 0 0 -1 0 126]
+ {} image
+grestore
+grestore
+gsave
+0 0 1152 756 rectclip
+[1 0 0 -1 0 756] concat
+grestore
+grestore
+%%Trailer
diff --git a/macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps b/macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps
new file mode 100644
index 0000000000..a872508ae9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps
@@ -0,0 +1,414 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: Harebra.halfsize.tiff - /homes/user/agss/Library/Images
+%%Creator: ImageViewer
+%%CreationDate: Sat Nov 26 18:28:36 1994
+%%For: agss
+%%DocumentFonts: (atend)
+%%Pages: 0 0
+%%BoundingBox: 0 0 240 361
+%%NXNextStepVersion: 3.0
+%%EndComments
+
+%%BeginProcSet: /usr/lib/NextStep/printPackage.ps 3.0
+%!
+% NeXT Printing Package
+% Version: 3.1
+% Copyright: 1988, NeXT, Inc.
+
+/__NXdef{1 index where{pop pop pop}{def}ifelse}bind def
+/__NXbdef{1 index where{pop pop pop}{bind def}ifelse}bind def
+/UserObjects 10 array __NXdef
+/defineuserobject{
+ exch dup 1 add dup UserObjects length gt{
+ array dup 0 UserObjects putinterval
+ /UserObjects exch def
+ }{pop}ifelse UserObjects exch 3 -1 roll put
+}__NXbdef
+/undefineuserobject{UserObjects exch null put}__NXbdef
+/execuserobject{UserObjects exch get exec}__NXbdef
+/__NXRectPath{4 2 roll moveto 1 index 0 rlineto
+0 exch rlineto neg 0 rlineto closepath}__NXbdef
+/__NXProcessRectArgs{
+ 1 index type /arraytype eq{
+ exch 0 4 2 index length 1 sub{
+ dup 3 add 1 exch{1 index exch get exch}for
+ 5 1 roll 5 index exec
+ }for pop pop
+ }{exec}ifelse
+}__NXbdef
+/rectfill{gsave newpath {__NXRectPath fill} __NXProcessRectArgs grestore}__NXbdef
+/rectclip{newpath {__NXRectPath} __NXProcessRectArgs clip newpath}__NXbdef
+/rectstroke{
+ gsave newpath dup type /arraytype eq{dup length 6 eq}{false}ifelse{
+ {gsave __NXRectPath null concat stroke grestore}
+ dup length array cvx copy dup 2 4 -1 roll put __NXProcessRectArgs
+ }{{__NXRectPath stroke} __NXProcessRectArgs}ifelse grestore
+}__NXbdef
+/_NXLevel2 systemdict /languagelevel known {languagelevel 2 ge}{false}ifelse __NXdef
+/xyshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index 2 mul 1 add get add exch
+ 3 index 3 index 2 mul get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/xshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ exch 3 index 3 index get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/yshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index get add moveto pop
+ }for pop pop
+}__NXbdef
+/arct{arcto pop pop pop pop}__NXbdef
+/setbbox{pop pop pop pop}__NXbdef
+/ucache{}__NXbdef
+/ucachestatus{mark 0 0 0 0 0}__NXbdef
+/setucacheparams{cleartomark}__NXbdef
+/uappend{systemdict begin cvx exec end}__NXbdef
+/ueofill{gsave newpath uappend eofill grestore}__NXbdef
+/ufill{gsave newpath uappend fill grestore}__NXbdef
+/ustroke{
+ gsave newpath dup length 6 eq
+ {exch uappend concat}{uappend}ifelse
+ stroke grestore
+}__NXbdef
+/__NXustrokepathMatrix dup where {pop pop}{matrix def}ifelse
+/ustrokepath{
+ newpath dup length 6 eq{
+ exch uappend __NXustrokepathMatrix currentmatrix exch concat
+ strokepath setmatrix
+ }{uappend strokepath}ifelse
+} __NXbdef
+/upath{
+ [exch {/ucache cvx}if pathbbox /setbbox cvx
+ {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx}pathforall]cvx
+} __NXbdef
+/setstrokeadjust{pop}__NXbdef
+/currentstrokeadjust{false}__NXbdef
+/selectfont{exch findfont exch
+dup type /arraytype eq {makefont}{scalefont}ifelse setfont}__NXbdef
+/_NXCombineArrays{
+ counttomark dup 2 add index dup length 3 -1 roll {
+ 2 index length sub dup 4 1 roll 1 index exch 4 -1 roll putinterval exch
+ }repeat pop pop pop
+}__NXbdef
+/flushgraphics{}def
+/setwindowtype{pop pop}def
+/currentwindowtype{pop 0}def
+/setalpha{pop}def
+/currentalpha{1.0}def
+/hidecursor{}def
+/obscurecursor{}def
+/revealcursor{}def
+/setcursor{4 {pop}repeat}bind def
+/showcursor{}def
+/NextStepEncoding where not{
+/NextStepEncoding StandardEncoding 256 array copy def
+0 [129/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/Ccedilla/Egrave
+/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/Ugrave/Uacute
+/Ucircumflex/Udieresis/Yacute/Thorn/mu/multiply/divide/copyright
+176/registered 181/brokenbar 190/logicalnot 192/onesuperior 201/twosuperior
+204/threesuperior 209/plusminus/onequarter/onehalf/threequarters/agrave
+/aacute/acircumflex/atilde/adieresis/aring/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave 226/iacute 228/icircumflex/idieresis/eth
+/ntilde 236/ograve/oacute/ocircumflex/otilde/odieresis 242/ugrave/uacute
+/ucircumflex 246/udieresis/yacute 252/thorn/ydieresis]
+{dup type /nametype eq
+ {NextStepEncoding 2 index 2 index put pop 1 add}{exch pop}ifelse
+}forall pop
+/NextStepEncoding NextStepEncoding readonly def
+/_NXfstr 128 string dup 0 (_NX) putinterval def
+/_NXfindfont /findfont load def
+/findfont{
+ % Because we can never let NextStepEncoding get into
+ % SharedFontDirectory, we cannot reencode a font to NextStepEncoding
+ % if we are in shared mode. So if currentshared is true,
+ % we call the normal findfont and return that
+ /currentshared where {pop currentshared} {false} ifelse
+ {_NXfindfont}
+ {dup _NXfstr 3 125 getinterval cvs length 3 add _NXfstr 0 3 -1 roll
+ getinterval cvn exch FontDirectory 2 index known
+ {pop FontDirectory exch get}
+ {_NXfindfont dup /Encoding get StandardEncoding eq
+ { dup length dict exch
+ {1 index /FID ne {2 index 3 1 roll put}{pop pop}ifelse}forall
+ dup /Encoding NextStepEncoding put definefont
+ }{exch pop} ifelse
+ }ifelse
+ }ifelse
+}bind def
+}{pop}ifelse
+/_NXImageString {/__NXImageString where{pop}{/__NXImageString 4000 string __NXdef}ifelse __NXImageString}__NXbdef
+/_NXDoImageOp{
+ 3 dict begin /parr 5 array def 1 index{dup}{1}ifelse /chans exch def
+ chans 2 add 2 roll parr 0 chans getinterval astore pop
+ 5 index 4 index mul 2 index{1 sub 8 idiv 1 add mul}{mul 1 sub 8 idiv 1 add}ifelse
+ 4 index mul /totbytes exch def pop exch pop
+ gsave matrix invertmatrix concat 0.5 setgray 0 0 4 2 roll rectfill grestore
+ {0 1 chans 1 sub{parr exch get exec length totbytes exch sub /totbytes exch def}for totbytes 0 le{exit}if}loop end
+}__NXbdef
+/alphaimage{1 add _NXDoImageOp}def
+_NXLevel2{
+ /NXCalibratedRGBColorSpace where{pop}{
+ /NXCalibratedRGBColorSpace
+ {mark /NXCalibratedRGB /ColorSpace findresource exch pop}stopped
+ {cleartomark /NXCalibratedRGB[/CIEBasedABC 2 dict dup begin
+ /MatrixLMN[.4124 .2126 .0193 .3576 .7152 .1192 .1805 .0722 .9505]def
+ /WhitePoint[.9505 1 1.089] def end] /ColorSpace defineresource}if def}ifelse
+ /nxsetrgbcolor{NXCalibratedRGBColorSpace setcolorspace setcolor}__NXbdef
+ /nxsetgray{dup dup nxsetrgbcolor}__NXbdef
+ /_NXCalibratedImage{exch{array astore dup length true}{false}ifelse
+ 8 -1 roll{NXCalibratedRGBColorSpace setcolorspace}if
+ 8 dict dup 9 1 roll begin /ImageType 1 def /MultipleDataSources exch def
+ currentcolorspace 0 get /Indexed eq{pop /Decode[0 2 6 index exp 1 sub]def}
+ {2 mul dup array /Decode exch def 1 sub 0 1 3 -1 roll{Decode exch dup 2 mod put}for}ifelse
+ /DataSource exch def /ImageMatrix exch def
+ /BitsPerComponent exch def /Height exch def /Width exch def end image}__NXbdef
+} {
+ /setcmykcolor{
+ 1.0 exch sub dup dup 6 -1 roll sub dup 0 lt{pop 0}if 5 1 roll
+ 4 -1 roll sub dup 0 lt{pop 0}if 3 1 roll exch sub dup 0 lt{pop 0}if setrgbcolor}__NXbdef
+ /currentcmykcolor{currentrgbcolor 3{1.0 exch sub 3 1 roll}repeat 0}__NXbdef
+ /colorimage{2 copy 3 ne or{_NXDoImageOp}{4 index dup 8 ne exch 4 ne and{_NXDoImageOp}{
+ pop pop save 6 1 roll 12 dict begin/Proc exch def/Res 0 string def
+ /Alloc{2 index length mul 2 add dup 2 index load length gt{1.2 mul round cvi string def}{pop pop}ifelse}def
+ 1 index 8 eq{/Unpack{.34 Alloc}def}{
+ /Wid 4 index 3 mul def exch pop 8 exch/Str1 0 string def/Lim Wid def
+ /Unpack{.67 Alloc/Str1 2 Alloc 0 exch Lim exch
+ {dup -4 bitshift 17 mul Str1 exch 4 index exch put 15 and 17 mul Str1 exch 3 index 1 add exch put
+ 2 sub dup 0 le{0 lt Wid exch{exch 1 sub exch}if}if exch 2 add exch
+ }forall/Lim exch def Str1 exch 0 exch getinterval
+ }def
+ }ifelse
+ /Ops[{.3 mul add 1}{.59 mul add 2}{.11 mul add round cvi Res exch 2 index exch put 1 add 0.0 0}]def/Val 0.0 def/Phase 0 def
+ {0 Val Phase Proc/Res Unpack{exch Ops exch get exec}forall/Phase exch def/Val exch def Res exch 0 exch getinterval}
+ image end restore}ifelse}ifelse
+ }__NXbdef
+ /nxsetrgbcolor{setrgbcolor}__NXbdef /nxsetgray{setgray}__NXbdef
+ /setpattern{pop .5 setgray}__NXbdef
+ /_NXCalibratedImage{dup 1 eq {pop pop image}{colorimage}ifelse pop}__NXbdef
+} ifelse
+/_NXSetCMYKOrRGB where{pop}{
+ mark{systemdict /currentwindow get exec}stopped
+ {{pop pop pop setcmykcolor}}{{nxsetrgbcolor pop pop pop pop}}ifelse /_NXSetCMYKOrRGB exch def cleartomark
+}ifelse
+%%EndProcSet
+
+gsave
+-20 -28 translate
+ /__NXbasematrix matrix currentmatrix def
+grestore
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+0 0 240 361 rectclip
+0 0 240 361 rectclip
+0.000000 0.000000 transform
+gsave __NXbasematrix setmatrix itransform translate
+240
+361
+2
+[1 0 0 -1 0 361]
+
+/_NXImageStr0 _NXImageString 0 1140 getinterval def {currentfile _NXImageStr0 readhexstring pop} bind
+%%BeginBinary: 43516
+image
+fffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fbef9bffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80050003fd00beaf4bffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf000197fe0470240fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc047fffffd003d5ffffffffffffffffffffffffffffffffff59ffffffffffffffffffffffffffffffffc0bffffffffffffffffffffffffffffffffffc007fffffd001fffffffffffffffffffffffffffff
+fffffff0044000002ffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffc007ffffff001ffffffffffffffffffffffffffffffffffff963c0ffd107fffffffffffffffffffffff083ffffffffffefffffffffffffffffffffff8047fffffe001ffffffffffffffffffffffffffffffffffffff441
+fff410bffffffffffffffffffffff043ffffffffd80bffffffffffffffffffffff4847ffffff001ffffffffffffffffffffffffffffffffffffffd00fffd002ffffffffffffffffffffff213fffffffffe0bffffffffffffffffffffff5807fffffe111ffffffffffffffffffffffffffffffffffffff400ffff081fffff
+fffffffffffffffff103ffffffffffffffffffffffffffffffffff8007ffffff001ffffffffffffffffffffffffffffffffffffff4c0ffff000ffffffffffffffffffffff007fffffffffffffffffffffffdbfffffffff4c47ffffff011ffffffffffffff9fffffffffffffffffffffff500ffff401fffffffffffffffff
+fffff007ffffffffffffffffffffffffbfffffffff440bffffff042ffffffe7fffffe0fe7ffffffffffffffffffff450ffff409ffffffffffffffffffffff00bffffffffffffffffffffffffffffffffff010fffffff003ffffd8802ffffc0f80ffff955fffffffffffff401fffe002ffffdfffffffffffffffff00fffff
+ffffffffffff
+ffffffffffffffffff41d15f8b5f112fffe07f00fffe01e007ff805c2ffffffffffff401fffd003ffff47f6ffffffffffffff00fffffffffffffffffffffffffffffffffff40260ab3c4155fff81ff00ffc0028047fd07fc03fffffffffff802fff405ffffe0f807ffff5efffffff01fffffffffffffffffffffffffffff
+ffffffc00abfa65d221fff02ff04ffe406b807f41fff00fffffffffff4007b501fffff41f103ff01003ffffff44fffffffffffffffffffffffffffffffffff000ffffffe0a2ffc02ff40fffe02fd1fe02fff90bffffffffff0c0541a86ffd003abd3f81fc01ffffff41fffffffffffffffffffffffffffffffffff004fff
+fffd013ffc0bff407fff00bfffd03ebf407ffffffffff041ffe9007ffd023d0bf03fd09ffffff41fffffffffffffffffffffffffffffffffff000ffffffd103fffffff407ffe00ffffc07500003ffffffffff101fffe001fff42bfbfc07fd04ffffff42fffffffffffffffffffffffffffffffffff000ffffffd102fffff
+f4407ffd00ffffc03ffff97ffffffffff042ffff400fff40bfff40ffe00ffffff43fffffffffffffffffffffffffffffffffff401ffffffe142ffffd4740bffd01ffff407ffffffffffffffff101ffffc103ff507fff9bffd04ffffff43fffffffffffffffffffffffffffffffffff400ffffffd003fffe02f407ffd00ff
+ff802ffffffffffffffff002ffffc003ff40ffffffffc00ffffff43fffffffffffffffffffffffffffffffffff800ffffffd003fff80ff40fffd01ffff801ffffffffffffffff0c0ffffd403ff40fffffff4406ffffff83fffffffffffffffffffffffffffffffffff400ffffffe003fff01ff04fffe00ffffc00bffffff
+fffffffff001ffffc007ff60fffffe02d01ffffff43fffffffffffffffffffffffffffffffff7f850ffffffd043ffd01fe00f3fd10ffffc01ffff9bffffffffff101ffffc00bff40fffff41fe01ffffffffffffffffffffffffffffffffffffffffe00b8280ff9b8085ffd01f84043fe00ffffe05cffd07ffffffffff001
+ffff000fff40ffffc43fd41ffffffffffffffffffffffffffffffffffffffffe1051200ff40000003e0c03e50fbd00bffff43a2c08bffffffffff002fffe182fff04ffff4c3fd01ebfffe13fffffffffffffffffffffffffffffffffffffff9ff9ffeff43f001ff02f016400fffd003a0bffffffffc6d0d1ffe000bfff0d
+ffff583f407d7fffc01ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9bfffffe4ffffc0242fffffffff810040500003ffe9003aff44283464bfff454bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6bffffffffffc2ff667856bfff41b900bfc141f801
+ffff80c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01bfd07ffffc40ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02fffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff413ffaad5f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40f5617bfc1bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0f0e549fe2557a2cd42fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95f28f8ef8146fe01ff9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5078b6df81ff7f417655660fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb5d7fb1d6ff4147f7fefbf42ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4becfd13fef84ebd02be7fff93fffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07f0f4aff007fffde10a042ff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8eacd01fdc3f7fe2d7fff4fd4950bfffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff80f89dbee43bbad1457fffc2f42f12fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01e3e0d62675fd01d7413f4d87e0206ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffebffffffffffffffffffffffffffc0bef6275f1d2c35802906155e1f3f507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fc2ff8f8ffcbf7cff4b7fdbff1bff0bffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffbffffffffc00ff1fe4cf5196e94fd2cc155029084a75fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001fffe1bdabdf40459fc0f59c1fe5e441cbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffe03effb0fe7bb9c2afd10bf7bc5bf907e6841fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0fbf373f4bfffdfde1fbfff04ff42816daa0affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0b49bfb
+ebfb63c7e0b4fe0ffc1e29f9cbb7513fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc3997fdfff90b7fbfe56c05c02fc347eb927f74fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ff4b5dfd79fe1be96f
+d3f8febf85d40440edd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff35b4fd3f0edc5ff43adbfb5588efa829f798d7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40a9feb0296fde82412fda02f403fc2
+f35cc3e5bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00f4ffbeff4640bebe60bfd93f81fcb8a1e0f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b0fe607c0fef9af447a54865fc326772b43cffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8143fe51e66f542aff88529452f5f5c356b42cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff5027dd0796de47bf53dfc9582707906ddd46ebfffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3ffffffff900d01a40b6e0f37100a3b32bf85552fe93fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03fffffffffefff90000edf20fff97f111e0f676fb80bfffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffeffffffffff80ffffffffffffffffff94174fe692431784b831f2363fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffb500510e603fbfc780b873c3fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b6ab92d0eb0c7260683fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02191f9e03608b0b3723fffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00f802f3741ac073636ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42c3c863c45f4e3438bffffffffffffffffffffffffffffffffff957fffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffff1c2cffc047705781c7ffffffffffffffffffffffffffffffffe05551ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff24bdb57442582da1d7fffffffffffffffffffffffffffffffe4117f92fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff2c24107dd2ec4cf1d3ffffffffffffffffffffffffffffffcc16941826ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4b684018d3d200f4e3fffffffffffffffffffffffffffffc10fffff51dffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffe2c1d078c8d764b043ffffffffffffffffffffffffffffe2cbfd117ff6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff47c847c2c02d550e3ffffffffffffffffffffffffffff8ab901571ff9cbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2e0f
+0bb40e4bd4e1fffffffffffffffffffffffffffe30407ffda9fcf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07c178240fc201e1ffffffffffffffffffffffffffe05a7bf941752e3d2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2f03c2d0541e1f0
+7fffffffffffffffffffffffffcbb02f41fffd676f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4341e5450f401f17fffffffffffffffffffffffff0b0ab42d300bfedad3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0c03f06d7029d07fffffffffff
+fffffffffffffc28fd05ffffd1fffeb4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f03f089633ddc3ffffffffffffffffffffffff153e17c87c2d53fec2c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b84ac320054dc2fffffffffffffffffffffff
+c81fc7d16f8bffcbfe1f2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43f02ed4301dd81fffffffffffffffffffffff24f41e1f43afff8a3f82e7ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffc0f8000ff40c740fffffffffffffffffffffffe0e650f60bff
+fff2efd266fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07c0d9c604e334ffffffffffffffffffffffc887ecf42fd10bff9f6e05cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82f0dd1dc7b4387fffffffffffffffffffff09cf9cc7ff9be7e7f7c7ccdbf
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7b01074d02fa0bfffffffffffffffffffffdf8f780bff83eb85ffc1fe43ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3f83d97d005d0bffffffffffffffffffffd200fd1ffffffffff2fe46f66fffffffffffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffe0bd0d175ec1d0fffffffffffffffffffffc2fed1fd1e1ffffffc7fe4ccdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07e0f008f81f0fffffffffffffffffffff0fff47d1bfdfffaffff45ecb3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffc7f49a1cd11e0ffffffffffffffffffffd2ac52e1f93dfff02ff3f5ff247ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fc0f44440f0dfffffffffffffffffffcbf2cfcf19bff90f87f3fd0fccaffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80fd02e4811c07fffffffffffffffffff0ff72e1bafffff97f9f03f92d64ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03e00c2cb3c03fffffffffffffffffff2fbf7470ffffffffffabcfdcb067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fc1f401fd27c03ffffffffffffffffffd757d07c2f97ffffffff6e2af387ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed1fac0c457815ffffffffffffffffff8e7742f1f91bfffffffe9f08fac0dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fed0a35f4
+2dffffffffffffffffff0fd51bd2faff8ff02fe9bf90b9e64bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd06e40605a829fffffffffffffffffe37ddde06f52beff657f78ffcf076e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc55f00541fe05ffffffffff
+fffffffc0f839cb946ffe16ffe3be1bcbb2dc2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe42fc1d03cc1cfffffffffffffffffc2f4b7a15bffffdd0bf1af8be0b8064fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe53be1fc1c704fffffffffffffffff43d3f
+02bfe90fffff6fd0fe2fe1ed7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff70ff03e2aa08ffffffffffffffffe0b4fc1ffd06ffffff47ec1fc37c0f5c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff24bf85f0364d7fffffffffffffffd1f2d0ff80bfffc03f
+c1e74677fe37892fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff403fc0e1380f3fffffffffffffffc0fbc3fc2f1ffffffff01fd13f2aa0f34fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f47f0f127cf3fffffffffffffff81fec7e1dff5fff7fff6b2f1cf8ee1
+b34bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe67ff8a00bc03fffffffffffffff19da1f8b0f963ff6cfffac6e0fd73fa2a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe008fd00f2743ffffffffffffffd3c267ca0683ff54fe3ffff87c7f3bdfaf7ffffffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffffa9ffe00f2795ffffffffffffffcbfe2fc0f4bfffe21b8fffff0f1f0fdf874fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01bff20f3bddffffffffffffff4f3c2e0f863fffffffc3fffbe1d0cccf47cffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffff6530f60405ddffffffffffffff1f646cbc1bfe18bfffe1fffebd1cb8cfd3c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033dfc238aecffffffffffffff1e437a81e141e51f83f87f7d7f9f1d4b81d3fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffd907fd238afcfffffffffffffd0fdf1f32ffeffff696ff2fbf3fffcf07e172ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe071ff07d4fdfffffffffffffca30f011ffc15d56a50bf8fff5ff3c791f3f4fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffd1f1f42c1cdfffffffffffff84078e67e51ffc0597e3fe3fffff3a7f1febdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff405a348b5c5fffffffffffff2c0f1f7f001f94bffd74ff53fd6b84bd4f8193fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe51fff8f1
+c74fffffffffffff3c7f787d07d4094af721ffdbff23cc7de347aafffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ea7ffc010b4fffffffffffff74fbf0442ffd1df00e191ff3ff90db6cb3c8f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffff80507fd17410fffffffff
+fffe10ef2842d40f8d561f7363d26fd563c8bfecb0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ac4ff03b54ffffffffffffd075c712c16d2d40481742cb17fd611f7a0da383fffffffffffffffffffffffffffffffffffffffffffffffffffffffff5584ff4510f7fffffffffff4c764d0ff
+e6f4c787e52b4b683fcd42f233153d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff81adbf4509d7fffffffffff1cf1e47fee550075ff802f0ce4bc4d7b32f9f0cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5717fc21d83fffffffffff0bf3c2e40ff062e4bec2c
+3eaf47f1d17f37c3e98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e3fc7cc33ffffffffffd0ba10b83ffe087e13ff0b1f3fb2f4f66f72f15f6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb4fd3c077ffffffffffc0f003fffe407c0fefffc347bfb01dbe07
+bcf0a733fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fdbf2c573ffffffffff8dfc0ffd76482f6fffffe3401e1f9f1be3fdb3f297ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557ff04f47ffffffffff195c3ff4b807c3fffffff80f7d3c635696cba670f9ffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe7d0bf5ca1bfffffffffd1f40bfd3b04ffafffffffe02fdb63fd9c8e2d434fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5743f82f3dfffffffffc0f02ff0f02efffffffffff4134f31addd4bdf870597fffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff57bfc0a69fffffffffc0d03f83e2c2ffffffffffff3a4398051f3107c71223fffffffffffffffffffffffffffffffffffffffffffffffffffffffff425ffd43c6fffffffff8a28be2e07f5ffffffffffff85d2ce273f51dbd33a36fffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffd0fd734bfffffffff0a10f8f8001ffffffffffffff0d8b70b3fcbe5722835fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1c2ff0b02fffffffff0d01e3e13ffffffffffffffffc3f3f217f4ed7b81c7cfffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffff8a8ff1f7dffffffffd0807ce4e2ffffffffffffffffe3a8bd4130af39dcf7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c3f039cffffffffc280ffc51c7ffffffffffffffff74874f0f73b40c06ecbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9faf
+470dffffffff96c1ffce2ffffffffffffffffff80732347ab7b0b11dd7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb0f4285ffffffff77c2ffc4abfffffffffffffffffedfe2347fc6b67519ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff80f7ffffffff
+6b87ff57bbffffffffffffffffff55743c3ec39fbe1dfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc2fcd57ffffffff3602fd03ffffffffffffffffffff62830e14e5c7839c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1afcf04fbfffffc4d67e50fffff
+ffffffffffffffffcbd22f15fac0c3c18bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5fc74af779ddf5dccfe47fffffffffffffffffffffd2e0e399f2c887c3cbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81bc2476011ccf4c9bfe07fffffffffffffffff
+fffff00beb9c37d10be38c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2fcd37d2df00e2e37b43bffffffffffffffffffffff8797f0db0e5c3b00d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4e6d577c70e99074fc6f47ffffffffffffffffffffffc20e6c8
+b5b7c134073fffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f2b477f1906d87ab02dffffffffffffebffffffffffd02e1d2593bc306c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffe20cf324414fdb7cca1abffffffffffffffebfffffffffff0662ce6493370bd7ef
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffeaa93fca59cacf3e11bffffc7fffffffffffffffffffffffc2081175cc358d73cffffffffffffffffffffffffffffffffffffffffffffffffffffffffad507d343820e24ebfffffaffffffffffffffffffffffffd0bc3437ea354be0cbffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffe1dfe3ee477b1e7c2fff96f8bffffffffffffffffffffffff0ee0439f758124867fffffffffffffffffffffffffffffffffffffffffffffffffffff4660bff0f47e9ff3c3ff864927ffffffffffffffffffffffff40fed7cb41f743af3ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffc3ffd0ffcd03fdff28ffc2fef83ffffffffffffffffffffffff90b6e7c0707381e72ffffffffffffffffffffffffffffffffffffffffffffffffffff3ffff82fcd637fd03dff0fffff0ffffffffffffffffffffffffc816cc0d74b1c8b76ffffffffffffffffffffffffffffffffffffffffffffffff
+fffdbffffe8fcbb4c35fa6fc2fffffc7ffffffffffffffffffffffff91e4c10f4bcffbf6fffffffffffffffffffffffffffffffffffffffffffffffffffcfffffc87f39fc76ed3fd5fffffd7ffffffffffffffffffffffffc0f9714166d0fb90fffffffffffffffffffffffffffffffffffffffffffffffffff8fffffa0b
+f1d8bf8bfbe68bffff83fffffffffffffffffffffffff02bb34cb6d0bff0bffffffffffffffffffffffffffffffffffffffffffffffffff07ffff883f5f84bdbcbdb2ffff436fffffffffffffffffffffffff838b18e13630fe07fffffffffffffffffffffffffffffffffffffffffffffffffc38fffffb7f47e636bdfde
+3fffd1b8ffffffffffffffffffffffffff0e74cf0361ffa03fffffffffffffffffffffffffffffffffffffffffffffffffcfd3ffff77fc7fbc3fdfdd7ffe1ff4ffffffffffffffffffffffffff819d8e4759ff502fffffffffffffffffffffffffffffffffffffffffffffffffcfd0bf7ff7fcd71c77efdcfff41fbcffff
+ffffffffffffffffffffffe0e01e13cebf795fffffffffffffffffffffffffffffffffffffffffffffffff5fd8015053fd9f3f665fcd1d013d7cfffffffffffffffffffffffffff4267743fdbf015fffffffffffffffffffffffffffffffffffffffffffffffff6fd503f7c1fc6f6fb6efc8bd0a81b8ffffffffffffffff
+fffffffffffd5333d00ba2851fffffffffffffffffffffffffffffffffffffffffffffffff5fe042d7d7fc2f324ecfd1ff0438fdbfffffffffffffffffffffffffff6b06f9bfff940fffffffffffffffffffffffffffffffffffffffffffffffff6ff9d58fdbfd3fb86fffe6ffd6fafeffffffffffffffffffffffffffff
+e7b2aff4ff6b8fffffffffffffffffffffffffffffffffffffffffffffffff6ffc16ff8ffd7bff1fe7fdfffd8ffdfffffffffffffffffffffffffffffdee1ffaf8023fffffffffffffffffffffffffffffffffffffffffffffffff4fff92ff0fd480be2e5bfcbffceffcfffffffffffffffffffffffffffffe3340f3b659
+0fffffffffff
+ffffffffffffffffffffffffffffffffffffff82ff7ffd3fe1f7d8ef76f43ffffff8bfffffffffffffffffffffffffffff880bf982b00fffffffffffffffffffffffffffffffffffffffffffffffffe0bffffcbff3f7d7877afd5fffffe342fffffffffffffffffffffffffffff40f8ce3a20fffffffffffffffffffffff
+ffffffffffffffffffffffffffec1bbfa1ffd3e3d06ef4bf8ffffe5b85fffffffffffffffffffffffffffffe0b05f3a01ffffffffffffffffffffffffffffffffffffffffffffffffecb401602ffd7cff91cf83fc1fd40bf4fffffffffffffffffffffffffffffffd180f0701fffffffffffffffffffffffffffffffffff
+fffffffffffffdf3fc6403ff8fcca06ffc2fc010a8cf8cfffffffffffffffffffffffffffffffc04f0803fffffffffffffffffffffffffffffffffffffffffffffffcddbf9e2f1fbce6ccd7f5cb7cdf7fe16fcffffffffffffffffffffffffffffffff50cb4c3fffffffffffffffffffffffffffffffffffffffffffffff
+fcdd2ffffef7847f1d7fe4f75dfffff8bbfffffffffffffffffffffffffffffffff903d4bffffffffffffffffffffffffffffffffffffffffffffffff05cfffffdd8103a84ddfffb3dffffecb8ffffffffffffffffffffffffffffffffffa042fffffffffffffffffffffffffffffffffffffffffffffffff212fffffccb
+f306d1f8d7d239ffaffe1fffffffffffffffffffffffffffffffffffff5ffffffffffffffffffffffffffffffffffffffffffffffffff317fc1ff1d7fb1bf5fcdff977ff07fd9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd757f802f2dfbd07c5f2fffe
+f3ffc2fd9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d7f07ff1fe2f42c163f8ff73ffd5fc56ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdd7e07ff1ff8b89c0abe1ffe3ff47fcd5ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4ddbe13ffcffe0be007f4bf349ff27fdafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffddcffc3ff53ffe1fe6946ff42ffe2ff8bffffffcbfffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8fff0ffe1fffdfff97ffe5fffc7ff5116ffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9fff4bff4bfffffbffffd7fff4fff677a01103ffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9fffc7ff90bffff3ffffffffd1ffc377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff2fff47ffff3ffffffff85ffd077ffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffff464ffff4fffeffffd7fffffffe2fff5d02fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6ecfcffc2fffffffc3ffffff903ffd3b1cafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffe1fdc08fff4ad55b6580057fef0ffffe3b0dc2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbfe4b6ffffd7a9b5587f543803ffff717dde22fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffe0ffc8772fffd7fff04abfffffe3fc3f712ccfe82ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fd1f311febd7fff65bfffffff6fd077368bbff9003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffff
+0bb826c83dffffffb7ffffff5fd637340b7ffff9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff450af3cffffff37ffffff5fc79b2cc3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffe1e1bb1cff
+ffff33ffffffcbc3cb8defd7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff8aa7031dffffff33ffffffc1f1d1dd1ef3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fff2f42f321ffffff33ffffff
+c0b2d59f1d15fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3ffc7f2f6b71fffffff3ffffffd023ee3354072ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fff8fc7f9731fffffff3ffffffd0d49e357047
+43bf5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fff2f8fe0a14ffffffb7ffffffd1f81b0d34b3fb514fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffe3f2ffe98cfffffff7ffffffd056cbdf3da1fcffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7e3ffffcdbffffff7ffffffc1c3cf4b5f00a8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfd7ffff1d7ffffff1ffffffd4c68263cd06075fbfffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4fcffdb87d7ffffff1ffffffc3438471de4683cd6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f8ffdfd9f7ffffff1ffffffc3f3caf551c162c7ffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffff3f5fffdb4a1ffffff3bfffff8722ccf2b1d0701d3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f2ffe0f4ea2ffffd31fffff233dc9f67cc0b88b3cbfffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffd7f3fd1ec1ff81a6ec7803502ba39ddf97c1e3c436e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fe3f57ffc042d02f8c3e7781ccc7d13bf9e0015ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff5fd7fefc33270712f42e0f2d720f7fcbd9d3de703891feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fdbf5d0efad23653c3f8d0d2d1f1acb9ce38e3e2def5d0bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3
+fcffa739c65337fbef3fb3fff1eccd78c92cc06801f2af9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fcffe973dcb337f7fd3f737cf1cddc6c738450f8140bdf92ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffcffc0be8b7d
+77ffbc7e975cf5ebc58db281fd6cd0a2bffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffdff136dcdbdbfff7d7fe7ceb677d2c9f1f02e0c11d687c6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ff4ffdbb94c9e33fe7dbffbbb
+3373d6d2f4170f1e3cc3f0b4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbff5ff9ce3a967738ffff2f77f2bb3bd70be87dacf0e61c1c2f4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4fff5ff3ac0b1fcb74bfef7f7efbb5dfff07fcd
+f8d7e7f400f87feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fff5fe67e263f8db1ff7fbf2eef3d9fde42fc5fd3b36e71c2c3d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfccccfca758f1bfffbf5beb9f9fdc8afc3e73056029d00
+3f8bfffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffdff599b4d353953ffdbf9bfecbcbfcf6ff373a89be9f4d41bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff37f11c6f2f8bcf5f7ef7ce3f3fd7cfb57910d9c4bc3c60bfffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffcbe24ccf9f5f6f2fbdf7ff3f3fd7db3c3e109dc3c12d6d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff8fc3cddfdf6d7f3b7dff7d7f7ffff3de0b4701d8a3438b40ffffffffffffffffffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffff5ffa58b26bddf3cfffb2ef37ee37f2cf8db66d342ee13b2d6473ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffe37b73f3febdffbf6ef36df7ff4cfd72d8d3f0db8078fc1d13ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffff5ffd73a7bb37dfeff7f3ebf9ed77fcffd3dccd3f8d7ca3c6feb0b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5ffcabcff1b3df7ff6f3fffecc77fcffd7d5cf1ec93cf2f62f147afffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffedecfdee7ff3fd5d7fffdfc77fd7edcf5cb5c8e2cf0ff8f063feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4c99dfd7ff3de7d7fffdfdf7fe3decf5e7dd3e2f359fd3c90bcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff2ce5dfdffebaf7d6ff7dfdf7ff3d9db67fdd2f3f0787f2d502dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ef3dccefefbf3d6dbfdbdb7ff9d8dfb7b1e0b4fc78bf5fc987bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f73ebd
+dfdfff3cfdffe3eb7bf4ecffbc35b815dd7d3f8fc2f2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d71c79ff6fff7dfdfff3ff7b79fcdf9d4d687ce5bb7b47c3f0b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ce2ff75b3bbd7cfcfb
+73bf37bcbceefd57b13c70c2b445f8407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e7ae3b7f87fbffcf73f3f3bfc3cfcf261b01cb4847ddcfc470fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff29d2c2f3fcbdffdffb773f77fd5dda
+70f02c8ced80fcfa3fc107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe38df05ffeefdffdfff771ffbfd9fdf30f18d8ce2cdffff1bf0a0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd79cf2f4faffcafffff7b57f7cdcfff30c5cd5431dd
+5bff2ffb3dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff36c93dbfbbffdfffff6f37f3cddfbdb0ccc99338e5a74f29db802fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff479c70ff7bfbdffbff8739f7cee7bdb5ccb2638e7f7f3f02c7ce0b
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff173d7ae9a3f397dbffdb9cf7cffbb866c623e9c333bfcb4fee7f63fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd367857d1d7ffe75bf3df5dffc7b3717663b0fcf396fa87b9f11263ffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff39f857705f33dbcfe3bfffffd7b7f333b374f84ffcb68ffe435a40bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff24f4cf612fb2ffdfcbbfdbf57366f3766435b5c4fd3fc5712bffffbfffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff579c8d5bfef55fdfcffecff573a5e33c463225f06f2cdd00fe507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2f95b0fbf40fdfebfdfffd73dfc71d306320f05d3a6c0be45bf6e7ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffff339a8f5e3f17ffff7fddf1ff19fcb4d323735f49d372c7d0bffd403ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff39bdfbc27effdffbf5cf0f788fcb4c739714e06e29c3feffe91b491fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffe3ca5efdefd7ffff7f5cfe734efc99c4dc367e20f2e8bfdffd1fe540bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3cbfce4ff0efdff7f5df7774df57495183d3e33a3d5f06f1010ff413fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7de9
+1d9fd0ffdff7f5ed7f6dbf935d31e3e7e1fc5d2f04a7f7f6ff60fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4fdddffc0ffffe7f5eb376d7f577619e22fbac8ecb9ffbffffe5fc92fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2fff85fd23fefd5
+b9efb77d7fdaf3cce11678c5d287ffffffffc1fc0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffe15ff53fd7edf6fbfb6d7fd9ffdde36bf8ef996fdfe2a35bc9fe0effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbffcb0ff42fd7fdf5f76fdd7fdc
+ffc0d3ee5cfd3a7f3b2453c1debf47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fdf8f6c323feffcb66e7bd13fbc7dccf38e9e7d2ebf233ebbb98d7966bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024fff3db77ffffef6bf5f51bf3c3e9d322fde7c
+37ffff0fd747cf7e32effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0afff93eff0ff7fff7be7e78ffffaf9f387bde70fff9bfeb73b49f1f34effffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81efff5ffbf0ff6fffffbbc39ff4fefff2dbfd6107fd54273722f
+847f8fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff51d37ff9bb70ff5fefbfbbd17ff2bffffc63f9fc2ff9ff591f346f46eeb5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd1db4ff5fff4ff2fefafffcefff379fffd73b6707ebdb19b8bf28ed3c92cfffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffa81dfe3f8f5f7ff5ef7efffdfffc77ffffff6ff01f8f1ffb1f5f9a1f9f3cebffffffffffffffffffffffffffffffffffffffffffffffffffffffffff705da3ffcf3f67f2be7fa3fffffff7ffffff9ff43f7eae5f6f0be9c7df8dbfffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffea03e02ffef3f27fbfdbe4fffffa7e7ffffffdbf83affff52b3f3dd71dfcf13fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd17403ffff3c37fd37fdbffff3579bffffffd3287f7f3f6e061782ac984f21ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffb8b160effe6767ea117fbfff7da974ffffffff37479278fff61bf5fcc4e4f343ffffffffffffffffffffffffffffffffffffffffffffffffffffffff34b070dfffba9fd430fb7ffda0f6fcffffffffaf1fdfff17ffe3f3784a3d7743fffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffe7e1201ffffff8fcbf5fbffd9c3f27fffffffffff01f495eb1039f76e035d2d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcd03b0ffffff0bb7febff386c3e97fffffffffe51babd4bfe3c8fb4f19ef4e43fffffffffffffffffffffffffffffffffffffffffffffffffffffffa6c021ef
+fffff93f7bfbeb33745ccfffffff7ffd537995e4ff3b336267cee6f85fffffffffffffffffffffffffffffffffffffffffffffffffffffff37e076bfffffffbe5b3ece73774cfffffffffffd53fff5762fb15762afdd9394dbfffffffffffffffffffffffffffffffffffffffffffffffffffffd7913b03ffffffcafaf63
+cdf1b235bffffffffffe93fa6fd8cf1d43b84c9751ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffcf018017ffffffa3cfe1d9ed0aa737f7ffffffffff00588fe77edc84e61ff72dd77ffffffffffffffffffffffffffffffffffffffffffffffffffffffd43c47fffffffe76ad763cd9c7766f3f
+ffffffffd47e8d3f25e5ec7b32fc30dbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffb14e4dbfffffffdd7a02becccdf116f7fffffffffd0eb2f7f5ef7953b737c3ba7f6ffffffffffffffffffffffffffffffffffffffffffffffffffffdb1ce0cbfffffffdfbf026dcacae153d5fffffffffe0ef
+1fffcfff773375fd87b759ffffffffffffffffffffffffffffffffffffffffffffffffffffce7d51cffffffff3ffa2f2afde0d893edd7fffffdfd0d787ffcffd773bb7fdc3f3fdffffffffffffffffffffffffffffffffffffffffffffffffffff9ced056fffffffe3ffc1dbbf4f57cd39ddffffffffe0c779ff97fcf72f
+f9fcc7f5fcffffffffffffffffffffffffffffffffffffffffffffffffffff385c423ffffffffdbde02fff8f169c75ccfffffffff07f7dffd5fef3dcfdfdc3fffbfffffffffffffffffffffffffffffffffffffffffffffffffffcb3f6477fffffffe3fdc0bfffdb982c35cdfffffffff29bfffee8bff3c1f2fec1fffbff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffdf77fe6bfffffffc7f14dffffd59efe38ffd7fffffff0e7fffefe2db7c1d3fdcceffffffffffffffffffffffffffffffffffffffffffffffffffffff9cb395effffffff72e05dfeffe5deff7cecefffffffd3dceffaff6ef7ecf3fcc9effbffffffffffffffffffffffffff
+fffffffffffffffffffffffff3be006fffffffffa94011fffff4dc773e8cefecffffe2fd9bfbff3ff994f7fcd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffe37cdcffffffffff3f7133fffff1dcf39ca9efcdfffff1fd5fffef3f7d7c70bdb9cfbbffffffffffffffffffffffffffffffffffffff
+ffffffffffffdb3dc1fffffffff57f0077ffbffdcc97d9ebefcde1fff1ed5aff5f3ebd7d75bd7c7f57ffffffffffffffffffffffffffffffffffffffffffffffffff8f74037fffffffb69f2497fffebefdc69cdea7ce48fdb1d765fffe7dbd7eb0f97d1f7fffffffffffffffffffffffffffffffffffffffffffffffffff
+2d3c57ffffffff6bdf53fffffebffd96efea338f8dfdb6abf6fef698fd7dd0f4bd2f7ffffffffffffffffffffffffffffffffffffffffffffffffffd7f6ccffffffffd830fc7fffffffffdf3ceb62b4f5d3ff5fff37377e2eb7dd3f6ed3ffffffffffffffffffffffffffffffffffffffffffffffffffffcab6c2fffffff
+fcff2fc7ffffff7ffff2dd735d5f576ff53f6f33fee3ebbed7c2ec773ffffffffffffffffffffffffffffffffffffffffffffffffff5379e3fffffffff3f0f4bffffff1d7ffccd739dd7775fb43f5f70fce3fdb5d7d3d8ab7ffffffffffffffffffffffffffffffffffffffffffffffffff3bffbbffffffffe7d022fffff
+ff0f7fffcf75cccc739ff87fcfb47ed7fdf6d383e1d3eabfffffffffffffffffffffffffffffffffffffffffffffffd7dc41fffffffffcbfc61fffffff267ff5c5b5c9dd73effc9acff5bbc69dcbe3a3f2c6977fffffffffffffffffffffffffffffffffffffffffffffff8fe9c2ffffffffe0bfc44fffffff357ff3c5fc
+c6e675fffd55d2fc23c95fced1cfe3dedf3fffffffffffffffffffffffffffffffffffffffffffffff5ffac7fffffffff3ffd03fffffff4b2fffc5fd943b7dffce1cf0fc33803fcdc4ced3bbcb2affffffffffffffffffffffffffffffffffffffffffffff3f534bffffffff83e6447fffffffc7dfffce2d594b7cff595c
+f4fd774c374fd5ddc7374bf6fffffffffffffffffffffffffffffffffffffffffffffdbf172fffffffff27c14c7fffffffcacd7f8f0f1dc33cf1cf9d7cbc7a6d07dbc269f773fffffffffffffffffffffffffffffffffffffffffffffffff8ff743ffffffffd3e3fc0ffffffffc84a7f572b6cd61df26ecffc7d3f5d1ed7
+cb79cb26fff83ffffffffffffffffffffffffffffffffffffffffffff17f11fffffffff87d1f82ffffffffc13fce77e37ddd8d57658ffc3e2a9d2ec39f3d0e57ff83ffffffffffffffffffffffffffffffffffffffffffffc6ff03fffffffff33f8f03ffffffffc53f4e5bf3a8e5cf4dec5bfd3f42acef8f2e7e3ddbffaf
+ffffffffffff
+ffffffffffffffffffefffffbfffffff8ffcd7ffffffffdb3f1843ffffffffd7103f9ff991a4d77df817fd2f42c89d8f3ce73ddf7fff5fffffffffffffffffffffffffffffeffff96dfe9ffe2ffd8fffffffffcc7ffa6ffffffffff7061c59fcd544e03e4f23ff1fc1dc3cdd32f8fcef3fff1fffffffffffffffffffffff
+fffffffffffffffff6fcbfe02fffffffff88ff5f3fffffffffd03f4e58f0fa15b11d0731ff0fe2d86d4b1376fcdc37fd5bfffffffffffffffffffffffffffffffffffffffff29ed0ffffffffff21d9583fffffffffd13f455fb2ff25774e9341ef8ff509fd034371ad3877f9c7ffffffffffffffffffffffffffffffffff
+ffffffc63fc1ffffffffffa6f9d0ffffffffffe03f43ed3ffa63334d53c1cfd2f8011ed605935d7877ffc2ffffffffffffffffffffffffffffffffffffffff5affcbfffff96040dcec44fffffffffff00b41ff3ff673389c56c5fff1fc75becd27c2ddf483ffabfffffffffffffffffffffffffffffffffffffff838bb83
+fff417fff65c9c12dffffffffff00f403fbff5552c5a74c07fd1fe10204d13c755f003ffffffffffffffffffffffffffffffffffffffffffe0b8d70bff82bffff37fef43dabfbffffff47b0c3fffffc764d7a9d07ff4ff4a071873cf77f047ffcfffffffffffffffffffffffffffffffffffffff0be3d63ff82fffffdb3e
+eb0bffffd5dffffc01bc3fffffd1a4f0de78bff46fc1d734fbcf33d707fff7fffbfffffffffffffffffffffffffffffffff07f8f217fe0bfffffcd7dc71f7ffffffff5983f003fffffc2d1b1db2c1ffc07d0df34f35c73c00fffdbffd7fffffffffffffffffffffffffffffffe43fe3f34bf47ffff4f6875c73ebfffffff
+fd5965a034ff9fc3c47943383fffc7f04f34f62cf74a1fff8fffffffffffffffffffffffffd4f67babfd449fe4bf02fd3ff9fc3f7179d2aff7fffbfff6f601b025ff8fd3d7bbb3a13ffb82f4c718783ddb483ffe0fffffffffffffffffffffff8057825597813ff916fd57f0fff6c1fcf7bef1cbe7fff9a9bfd76c8041ff
+ffffb375f3f037ffd0bc85107c91dfd0fffc0ffffffffffffffffffffffc2f547fffd5ff2f41fff8d7d3fffe0bf8cfb5a72ff7ebc1f066d0040d82fffffff368e340b67fe87f26b1fcf5cd41fff51fffffffffffffffffffffe1d05b911d997d107fcff6cf8ebff47ff28ffdd1bff1defff1ba5fffe06ffffffff57cc781
+fa27f57fc06530ecde42ffeb3fffffffffffffffffffff8b13fe2dd3d1d17cfffa736f2dffa0bfc6b974d0feb5f827fffffe17eb43fffffffd94cfc0ff8ff33fc00f32ecd04ffff93ffffbfffffffffffffffe2db36cbb8e2f4be1faf1323d78fb02ff4df740d3e621fbfffff5402391f1417ffffc78c950ffd7f30ff71a
+42a9c13fffc0fffff7fffffffffffffffd7fd07e3b6fff283bd2a0d6b8f3ee0fed3cf36c0b4fb2efffff95ff9f9561fd43ffff2c502efbe7ff4ff026d837c0bfff02fffff7fffffffffffffffc6284f8b3bffd2af28a03c3f5d0dd3fc4bceb3ddc6fffbffffe24ff70be2fffe08fffa920b8ffbcffcbf41d89b446fffc63
+fffff7ffffff
+fffffffffdfeb6eafbb785fffc3c9f87f39fee1e4978cf7cf6d8e4bf649407f46666568002d1fff707f2f7fdffc3ed203cf02ffff28ffffff7fffffffffffffff5d94baffffe2fffbf4dfc2fd2b7a0a67ed39d5cb9c02bfff34fffffaf84afd70ba50113fffff7feffc48f21bc00ffffeb2ffffffffffffffffffffff6f3
+5e6ff6d3ffff7f7ff83ff411b881fe0f3e3df060bffff742ffffd426917fae3fda50180093ffffc8ef007c2ffffff87ffffffbfffffffffffffff7813f3fb5cbfffd7efdc0bfff90f82afd2d783e91a2ffdf81c43ff817ff4e02ff014574fafc1bffffc49b7451fffbffe2ffffffebfffffffffffffff694bcb80f8ffff9
+fefe07fffff442f0f87df43f4c0ffe00c7c3ffa0fff429f440b509347884be7ffddad32bcffff3ffcbfffffffffffffffffffffff5ccfcf02d3ffff1ff407fffff43cb93e1fdf02b803fecb3c7c6d02e8541fecb9a7fb7001d1f42bdbed3f980effefbfd2fffffffdffffffffffffffff48cf81b6cbfffc6ff5ff97d51ef
+9f9f97f8f1b030bf9cb60b2c1cbf0402a56fff4bb63eedd4700dbf83a1e81fe0fcb0ffffffffdffffffffffffffffc01f94e13ffbeee7e10955fcbffffff7fe3d9754cff7d3038bafaff64d7e16953403f4f0c3f86cfff33e0ffd0bfe047ffffffffdffffffffffffffffff87eedd7fe7efed17ffffe7fffffffffcbd978
+02f8b603f2e1f7fd278f0f413c36f8ce4fafd3c3f057c8bffe1105bffffffffffffffffffffffffffffd01cd4bffafff4bfffffdfffffffffa5ec07ed1f3f41fdb88fff8072d3d2ff898230ad3efbc074457dfa41fbefffffffffffffffffffffffffffffffff5950bf75d89bfffaf81ffffebff77ffc7ffc3e3f4be2e2f
+f8731e7fef9fc1ffc3fd17fd336cbd10794692ffffffffffffffffffffffffffffffffffffffe011a5ffffff292fffff4bfff7fbcbff43fbed047cbef8113ebf2e2f8bfff3fde39e2e0dfc33783ffcbffffffffffffffffffffffffffffffffffffffffffffaffe8e1fffffc3fff79e1deff8fffc5df79fffc70fffcb8bf
+5fffff49fa3fdffc78b1f8ffff3ffffffffffffffffffffffffffffffffffffffffffffaffb3cbfffbf2ffff7ecdc5ff4fafc6fff4ff74b2fffe43ff7ffffe3d76fc8cafd34662ffffafffffffffffffffffffffffffffffffffffffffffffffffffffffffebfd7fffefffffaf2eeffffdffbffffff4bf7fbfffffffb7ff
+9fbf9ff55bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+%%EndBinary
+grestore
+%%Trailer
diff --git a/macros/generic/diagrams/kuvio/doc-src/eps/plot.eps b/macros/generic/diagrams/kuvio/doc-src/eps/plot.eps
new file mode 100644
index 0000000000..3b21887897
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eps/plot.eps
@@ -0,0 +1,11784 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 272 277
+%%Creator: Mathematica
+%%Title: Clipboard
+%%CreationDate: Sometime Sometime
+%%EndComments
+/Mnodistort true def
+100 dict begin
+/Mfixwid true def
+/Mrot 0 def
+/Mpstart {
+ MathPictureStart
+} bind def
+/Mpend {
+ MathPictureEnd
+} bind def
+/Mscale {
+ 0 1 0 1
+ 5 -1 roll
+ MathScale
+} bind def
+/Plain /Courier findfont def
+/Bold /Courier-Bold findfont def
+/Italic /Courier-Oblique findfont def
+/MathPictureStart {
+ /Mimatrix
+ matrix currentmatrix
+ def
+ gsave
+ newpath
+ Mleft
+ Mbottom
+ translate
+ 1 -1 scale
+ /Mtmatrix
+ matrix currentmatrix
+ def
+ Plain
+ Mfontsize scalefont
+ setfont
+ 0 setgray
+ 0 setlinewidth
+} bind def
+/MathPictureEnd {
+ grestore
+} bind def
+/MathSubStart {
+ Mgmatrix Mtmatrix
+ Mleft Mbottom
+ Mwidth Mheight
+ 8 -2 roll
+ moveto
+ Mtmatrix setmatrix
+ currentpoint
+ Mgmatrix setmatrix
+ 10 -2 roll
+ moveto
+ Mtmatrix setmatrix
+ currentpoint
+ 2 copy translate
+ /Mtmatrix matrix currentmatrix def
+ /Mleft 0 def
+ /Mbottom 0 def
+ 3 -1 roll
+ exch sub
+ /Mheight exch def
+ sub
+ /Mwidth exch def
+} bind def
+/MathSubEnd {
+ /Mheight exch def
+ /Mwidth exch def
+ /Mbottom exch def
+ /Mleft exch def
+ /Mtmatrix exch def
+ dup setmatrix
+ /Mgmatrix exch def
+} bind def
+/Mdot {
+ moveto
+ 0 0 rlineto
+ stroke
+} bind def
+/Mtetra {
+ moveto
+ lineto
+ lineto
+ lineto
+ fill
+} bind def
+/Metetra {
+ moveto
+ lineto
+ lineto
+ lineto
+ closepath
+ gsave
+ fill
+ grestore
+ 0 setgray
+ stroke
+} bind def
+/Mistroke {
+ flattenpath
+ 0 0 0
+ {
+ 4 2 roll
+ pop pop
+ }
+ {
+ 4 -1 roll
+ 2 index
+ sub dup mul
+ 4 -1 roll
+ 2 index
+ sub dup mul
+ add sqrt
+ 4 -1 roll
+ add
+ 3 1 roll
+ }
+ {
+ stop
+ }
+ {
+ stop
+ }
+ pathforall
+ pop pop
+ currentpoint
+ stroke
+ moveto
+ currentdash
+ 3 -1 roll
+ add
+ setdash
+} bind def
+/Mfstroke {
+ stroke
+ currentdash
+ pop 0
+ setdash
+} bind def
+/Mrotsboxa {
+ gsave
+ dup
+ /Mrot
+ exch def
+ Mrotcheck
+ Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll
+ 4 index
+ 4 index
+ translate
+ rotate
+ 3 index
+ -1 mul
+ 3 index
+ -1 mul
+ translate
+ /Mtmatrix
+ matrix
+ currentmatrix
+ def
+ grestore
+ Msboxa
+ 3 -1 roll
+ /Mtmatrix
+ exch def
+ /Mrot
+ 0 def
+} bind def
+/Msboxa {
+ newpath
+ 5 -1 roll
+ Mvboxa
+ pop
+ Mboxout
+ 6 -1 roll
+ 5 -1 roll
+ 4 -1 roll
+ Msboxa1
+ 5 -3 roll
+ Msboxa1
+ Mboxrot
+ [
+ 7 -2 roll
+ 2 copy
+ [
+ 3 1 roll
+ 10 -1 roll
+ 9 -1 roll
+ ]
+ 6 1 roll
+ 5 -2 roll
+ ]
+} bind def
+/Msboxa1 {
+ sub
+ 2 div
+ dup
+ 2 index
+ 1 add
+ mul
+ 3 -1 roll
+ -1 add
+ 3 -1 roll
+ mul
+} bind def
+/Mvboxa {
+ Mfixwid
+ {
+ Mvboxa1
+ }
+ {
+ dup
+ Mwidthcal
+ 0 exch
+ {
+ add
+ }
+ forall
+ exch
+ Mvboxa1
+ 4 index
+ 7 -1 roll
+ add
+ 4 -1 roll
+ pop
+ 3 1 roll
+ }
+ ifelse
+} bind def
+/Mvboxa1 {
+ gsave
+ newpath
+ [ true
+ 3 -1 roll
+ {
+ Mbbox
+ 5 -1 roll
+ {
+ 0
+ 5 1 roll
+ }
+ {
+ 7 -1 roll
+ exch sub
+ (m) stringwidth pop
+ .3 mul
+ sub
+ 7 1 roll
+ 6 -1 roll
+ 4 -1 roll
+ Mmin
+ 3 -1 roll
+ 5 index
+ add
+ 5 -1 roll
+ 4 -1 roll
+ Mmax
+ 4 -1 roll
+ }
+ ifelse
+ false
+ }
+ forall
+ { stop } if
+ counttomark
+ 1 add
+ 4 roll
+ ]
+ grestore
+} bind def
+/Mbbox {
+ 0 0 moveto
+ false charpath
+ flattenpath
+ pathbbox
+ newpath
+} bind def
+/Mmin {
+ 2 copy
+ gt
+ { exch } if
+ pop
+} bind def
+/Mmax {
+ 2 copy
+ lt
+ { exch } if
+ pop
+} bind def
+/Mrotshowa {
+ dup
+ /Mrot
+ exch def
+ Mrotcheck
+ Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll
+ 4 index
+ 4 index
+ translate
+ rotate
+ 3 index
+ -1 mul
+ 3 index
+ -1 mul
+ translate
+ /Mtmatrix
+ matrix
+ currentmatrix
+ def
+ Mgmatrix setmatrix
+ Mshowa
+ /Mtmatrix
+ exch def
+ /Mrot 0 def
+} bind def
+/Mshowa {
+ 4 -2 roll
+ moveto
+ 2 index
+ Mtmatrix setmatrix
+ Mvboxa
+ 7 1 roll
+ Mboxout
+ 6 -1 roll
+ 5 -1 roll
+ 4 -1 roll
+ Mshowa1
+ 4 1 roll
+ Mshowa1
+ rmoveto
+ currentpoint
+ Mfixwid
+ {
+ Mshowax
+ }
+ {
+ Mshoway
+ }
+ ifelse
+ pop pop pop pop
+ Mgmatrix setmatrix
+} bind def
+/Mshowax {
+ 0 1
+ 4 index length
+ -1 add
+ {
+ 2 index
+ 4 index
+ 2 index
+ get
+ 3 index
+ add
+ moveto
+ 4 index
+ exch get
+ show
+ } for
+} bind def
+/Mshoway {
+ 3 index
+ Mwidthcal
+ 5 1 roll
+ 0 1
+ 4 index length
+ -1 add
+ {
+ 2 index
+ 4 index
+ 2 index
+ get
+ 3 index
+ add
+ moveto
+ 4 index
+ exch get
+ [
+ 6 index
+ aload
+ length
+ 2 add
+ -1 roll
+ {
+ pop
+ Strform
+ stringwidth
+ pop
+ neg
+ exch
+ add
+ 0 rmoveto
+ }
+ exch
+ kshow
+ cleartomark
+ } for
+ pop
+} bind def
+/Mwidthcal {
+ [
+ exch
+ {
+ Mwidthcal1
+ }
+ forall
+ ]
+ [
+ exch
+ dup
+ Maxlen
+ -1 add
+ 0 1
+ 3 -1 roll
+ {
+ [
+ exch
+ 2 index
+ {
+ 1 index
+ Mget
+ exch
+ }
+ forall
+ pop
+ Maxget
+ exch
+ }
+ for
+ pop
+ ]
+ Mreva
+} bind def
+/Mreva {
+ [
+ exch
+ aload
+ length
+ -1 1
+ {1 roll}
+ for
+ ]
+} bind def
+/Mget {
+ 1 index
+ length
+ -1 add
+ 1 index
+ ge
+ {
+ get
+ }
+ {
+ pop pop
+ 0
+ }
+ ifelse
+} bind def
+/Maxlen {
+ [
+ exch
+ {
+ length
+ }
+ forall
+ Maxget
+} bind def
+/Maxget {
+ counttomark
+ -1 add
+ 1 1
+ 3 -1 roll
+ {
+ pop
+ Mmax
+ }
+ for
+ exch
+ pop
+} bind def
+/Mwidthcal1 {
+ [
+ exch
+ {
+ Strform
+ stringwidth
+ pop
+ }
+ forall
+ ]
+} bind def
+/Strform {
+ /tem (x) def
+ tem 0
+ 3 -1 roll
+ put
+ tem
+} bind def
+/Mshowa1 {
+ 2 copy
+ add
+ 4 1 roll
+ sub
+ mul
+ sub
+ -2 div
+} bind def
+/MathScale {
+ Mwidth
+ Mheight
+ Mlp
+ translate
+ scale
+ /Msaveaa exch def
+ /Msavebb exch def
+ /Msavecc exch def
+ /Msavedd exch def
+ /Mgmatrix
+ matrix currentmatrix
+ def
+} bind def
+/Mlp {
+ 3 copy
+ Mlpfirst
+ {
+ Mnodistort
+ {
+ Mmin
+ dup
+ } if
+ 4 index
+ 2 index
+ 2 index
+ Mlprun
+ 11 index
+ 11 -1 roll
+ 10 -4 roll
+ Mlp1
+ 8 index
+ 9 -5 roll
+ Mlp1
+ 4 -1 roll
+ and
+ { exit } if
+ 3 -1 roll
+ pop pop
+ } loop
+ exch
+ 3 1 roll
+ 7 -3 roll
+ pop pop pop
+} bind def
+/Mlpfirst {
+ 3 -1 roll
+ dup length
+ 2 copy
+ -2 add
+ get
+ aload
+ pop pop pop
+ 4 -2 roll
+ -1 add
+ get
+ aload
+ pop pop pop
+ 6 -1 roll
+ 3 -1 roll
+ 5 -1 roll
+ sub
+ dup /MsaveAx exch def
+ div
+ 4 1 roll
+ exch sub
+ dup /MsaveAy exch def
+ div
+} bind def
+/Mlprun {
+ 2 copy
+ 4 index
+ 0 get
+ dup
+ 4 1 roll
+ Mlprun1
+ 3 copy
+ 8 -2 roll
+ 9 -1 roll
+ {
+ 3 copy
+ Mlprun1
+ 3 copy
+ 11 -3 roll
+ /gt Mlpminmax
+ 8 3 roll
+ 11 -3 roll
+ /lt Mlpminmax
+ 8 3 roll
+ } forall
+ pop pop pop pop
+ 3 1 roll
+ pop pop
+ aload pop
+ 5 -1 roll
+ aload pop
+ exch
+ 6 -1 roll
+ Mlprun2
+ 8 2 roll
+ 4 -1 roll
+ Mlprun2
+ 6 2 roll
+ 3 -1 roll
+ Mlprun2
+ 4 2 roll
+ exch
+ Mlprun2
+ 6 2 roll
+} bind def
+/Mlprun1 {
+ aload pop
+ exch
+ 6 -1 roll
+ 5 -1 roll
+ mul add
+ 4 -2 roll
+ mul
+ 3 -1 roll
+ add
+} bind def
+/Mlprun2 {
+ 2 copy
+ add 2 div
+ 3 1 roll
+ exch sub
+} bind def
+/Mlpminmax {
+ cvx
+ 2 index
+ 6 index
+ 2 index
+ exec
+ {
+ 7 -3 roll
+ 4 -1 roll
+ } if
+ 1 index
+ 5 index
+ 3 -1 roll
+ exec
+ {
+ 4 1 roll
+ pop
+ 5 -1 roll
+ aload
+ pop pop
+ 4 -1 roll
+ aload pop
+ [
+ 8 -2 roll
+ pop
+ 5 -2 roll
+ pop
+ 6 -2 roll
+ pop
+ 5 -1 roll
+ ]
+ 4 1 roll
+ pop
+ }
+ {
+ pop pop pop
+ } ifelse
+} bind def
+/Mlp1 {
+ 5 index
+ 3 index sub
+ 5 index
+ 2 index mul
+ 1 index
+ le
+ 1 index
+ 0 le
+ or
+ dup
+ not
+ {
+ 1 index
+ 3 index div
+ .99999 mul
+ 8 -1 roll
+ pop
+ 7 1 roll
+ }
+ if
+ 8 -1 roll
+ 2 div
+ 7 -2 roll
+ pop sub
+ 5 index
+ 6 -3 roll
+ pop pop
+ mul sub
+ exch
+} bind def
+/intop 0 def
+/inrht 0 def
+/inflag 0 def
+/outflag 0 def
+/xadrht 0 def
+/xadlft 0 def
+/yadtop 0 def
+/yadbot 0 def
+/Minner {
+ outflag
+ 1
+ eq
+ {
+ /outflag 0 def
+ /intop 0 def
+ /inrht 0 def
+ } if
+ 5 index
+ gsave
+ Mtmatrix setmatrix
+ Mvboxa pop
+ grestore
+ 3 -1 roll
+ pop
+ dup
+ intop
+ gt
+ {
+ /intop
+ exch def
+ }
+ { pop }
+ ifelse
+ dup
+ inrht
+ gt
+ {
+ /inrht
+ exch def
+ }
+ { pop }
+ ifelse
+ pop
+ /inflag
+ 1 def
+} bind def
+/Mouter {
+ /xadrht 0 def
+ /xadlft 0 def
+ /yadtop 0 def
+ /yadbot 0 def
+ inflag
+ 1 eq
+ {
+ dup
+ 0 lt
+ {
+ dup
+ intop
+ mul
+ neg
+ /yadtop
+ exch def
+ } if
+ dup
+ 0 gt
+ {
+ dup
+ intop
+ mul
+ /yadbot
+ exch def
+ }
+ if
+ pop
+ dup
+ 0 lt
+ {
+ dup
+ inrht
+ mul
+ neg
+ /xadrht
+ exch def
+ } if
+ dup
+ 0 gt
+ {
+ dup
+ inrht
+ mul
+ /xadlft
+ exch def
+ } if
+ pop
+ /outflag 1 def
+ }
+ { pop pop}
+ ifelse
+ /inflag 0 def
+ /inrht 0 def
+ /intop 0 def
+} bind def
+/Mboxout {
+ outflag
+ 1
+ eq
+ {
+ 4 -1
+ roll
+ xadlft
+ leadjust
+ add
+ sub
+ 4 1 roll
+ 3 -1
+ roll
+ yadbot
+ leadjust
+ add
+ sub
+ 3 1
+ roll
+ exch
+ xadrht
+ leadjust
+ add
+ add
+ exch
+ yadtop
+ leadjust
+ add
+ add
+ /outflag 0 def
+ /xadlft 0 def
+ /yadbot 0 def
+ /xadrht 0 def
+ /yadtop 0 def
+ } if
+} bind def
+/leadjust {
+ (m) stringwidth pop
+ .5 mul
+} bind def
+/Mrotcheck {
+ dup
+ 90
+ eq
+ {
+ yadbot
+ /yadbot
+ xadrht
+ def
+ /xadrht
+ yadtop
+ def
+ /yadtop
+ xadlft
+ def
+ /xadlft
+ exch
+ def
+ }
+ if
+ dup
+ cos
+ 1 index
+ sin
+ Checkaux
+ dup
+ cos
+ 1 index
+ sin neg
+ exch
+ Checkaux
+ 3 1 roll
+ pop pop
+} bind def
+/Checkaux {
+ 4 index
+ exch
+ 4 index
+ mul
+ 3 1 roll
+ mul add
+ 4 1 roll
+} bind def
+/Mboxrot {
+ Mrot
+ 90 eq
+ {
+ brotaux
+ 4 2
+ roll
+ }
+ if
+ Mrot
+ 180 eq
+ {
+ 4 2
+ roll
+ brotaux
+ 4 2
+ roll
+ brotaux
+ }
+ if
+ Mrot
+ 270 eq
+ {
+ 4 2
+ roll
+ brotaux
+ }
+ if
+} bind def
+/brotaux {
+ neg
+ exch
+ neg
+} bind def
+/Mabswid {
+ Mimatrix
+ 0 get
+ Mgmatrix
+ 0 get
+ div
+ mul
+ setlinewidth
+} bind def
+/Mabsdash {
+ exch
+ Mimatrix
+ 0 get
+ Mgmatrix
+ 0 get
+ div
+ [
+ 3 1 roll
+ exch
+ {
+ exch
+ dup
+ 3 -1 roll
+ mul
+ exch
+ }
+ forall
+ pop ]
+ exch
+ setdash
+} bind def
+/colorimage where
+{ pop }
+{
+/colorimage {
+3 1 roll
+ pop pop
+ 5 -1 roll
+ mul
+ 4 1 roll
+{
+currentfile
+1 index
+readhexstring
+pop }
+image
+} bind def
+} ifelse
+/sampledsound where
+{ pop}
+{ /sampledsound {
+exch
+pop
+exch
+5 1 roll
+mul
+4 idiv
+mul
+2 idiv
+exch pop
+exch
+/Mtempproc exch def
+{ Mtempproc pop }
+repeat
+} bind def
+} ifelse
+
+/Mleft 0.000000 def
+/Mbottom 277.617249 def
+/Mwidth 272.790741 def
+/Mheight 277.617249 def
+/Mfontsize 12 def
+/Plain /Courier findfont def
+0 Mbottom Mheight neg add 2 mul Mheight add translate
+1 -1 scale
+
+%%Creator: Mathematica
+%%AspectRatio: 1.01769
+MathPictureStart
+/Courier findfont 10 scalefont setfont
+% Scaling calculations
+-0.017931 1.121556 0.028039 1.121556 [
+[ 0 0 0 0 ]
+[ 1 1.017693 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+%%Object: Graphics3D
+[ ] 0 setdash
+0 setgray
+0 0 moveto
+1 0 lineto
+1 1.01769 lineto
+0 1.01769 lineto
+closepath
+clip
+newpath
+gsave
+0.002 setlinewidth
+0.483 0.49066 moveto 0.5308 0.4923 lineto 0.53087 0.47433 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53087 0.47433 moveto 0.48331 0.47266 lineto 0.483 0.49066 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57788 0.47039 moveto 0.53087 0.47433 lineto 0.5308 0.4923 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43661 0.48354 moveto 0.483 0.49066 lineto 0.48331 0.47266 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48331 0.47266 moveto 0.43717 0.46543 lineto 0.43661 0.48354 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5308 0.4923 moveto 0.57806 0.48843 lineto 0.57788 0.47039 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62238 0.46094 moveto 0.57788 0.47039 lineto 0.57806 0.48843 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48268 0.50884 moveto 0.53074 0.51045 lineto 0.5308 0.4923 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5308 0.4923 moveto 0.483 0.49066 lineto 0.48268 0.50884 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57806 0.48843 moveto 0.5308 0.4923 lineto 0.53074 0.51045 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43604 0.50185 moveto 0.48268 0.50884 lineto 0.483 0.49066 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.483 0.49066 moveto 0.43661 0.48354 lineto 0.43604 0.50185 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53074 0.51045 moveto 0.57825 0.50665 lineto 0.57806 0.48843 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6228 0.47913 moveto 0.57806 0.48843 lineto 0.57825 0.50665 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57806 0.48843 moveto 0.6228 0.47913 lineto 0.62238 0.46094 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48236 0.52722 moveto 0.53068 0.5288 lineto 0.53074 0.51045 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53074 0.51045 moveto 0.48268 0.50884 lineto 0.48236 0.52722 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57825 0.50665 moveto 0.53074 0.51045 lineto 0.53068 0.5288 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39364 0.47111 moveto 0.43661 0.48354 lineto 0.43717 0.46543 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43717 0.46543 moveto 0.39445 0.45279 lineto 0.39364 0.47111 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43546 0.52036 moveto 0.48236 0.52722 lineto 0.48268 0.50884 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48268 0.50884 moveto 0.43604 0.50185 lineto 0.43546 0.52036 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53068 0.5288 moveto 0.57844 0.52507 lineto 0.57825 0.50665 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62324 0.49752 moveto 0.57825 0.50665 lineto 0.57844 0.52507 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57825 0.50665 moveto 0.62324 0.49752 lineto 0.6228 0.47913 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48203 0.5458 moveto 0.53061 0.54735 lineto 0.53068 0.5288 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53068 0.5288 moveto 0.48236 0.52722 lineto 0.48203 0.5458 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57844 0.52507 moveto 0.53068 0.5288 lineto 0.53061 0.54735 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39283 0.48964 moveto 0.43604 0.50185 lineto 0.43661 0.48354 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43661 0.48354 moveto 0.39364 0.47111 lineto 0.39283 0.48964 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66235 0.44619 moveto 0.62238 0.46094 lineto 0.6228 0.47913 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43487 0.53907 moveto 0.48203 0.5458 lineto 0.48236 0.52722 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48236 0.52722 moveto 0.43546 0.52036 lineto 0.43487 0.53907 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53061 0.54735 moveto 0.57863 0.54369 lineto 0.57844 0.52507 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62367 0.5161 moveto 0.57844 0.52507 lineto 0.57863 0.54369 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57844 0.52507 moveto 0.62367 0.5161 lineto 0.62324 0.49752 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4817 0.56458 moveto 0.53054 0.5661 lineto 0.53061 0.54735 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53061 0.54735 moveto 0.48203 0.5458 lineto 0.4817 0.56458 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57863 0.54369 moveto 0.53061 0.54735 lineto 0.53054 0.5661 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.392 0.50837 moveto 0.43546 0.52036 lineto 0.43604 0.50185 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43604 0.50185 moveto 0.39283 0.48964 lineto 0.392 0.50837 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.663 0.46462 moveto 0.6228 0.47913 lineto 0.62324 0.49752 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6228 0.47913 moveto 0.663 0.46462 lineto 0.66235 0.44619 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43428 0.55799 moveto 0.4817 0.56458 lineto 0.48203 0.5458 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48203 0.5458 moveto 0.43487 0.53907 lineto 0.43428 0.55799 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35619 0.45367 moveto 0.39364 0.47111 lineto 0.39445 0.45279 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39445 0.45279 moveto 0.35722 0.43506 lineto 0.35619 0.45367 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53054 0.5661 moveto 0.57883 0.56252 lineto 0.57863 0.54369 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62412 0.53489 moveto 0.57863 0.54369 lineto 0.57883 0.56252 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57863 0.54369 moveto 0.62412 0.53489 lineto 0.62367 0.5161 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48137 0.58357 moveto 0.53048 0.58506 lineto 0.53054 0.5661 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53054 0.5661 moveto 0.4817 0.56458 lineto 0.48137 0.58357 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57883 0.56252 moveto 0.53054 0.5661 lineto 0.53048 0.58506 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39117 0.5273 moveto 0.43487 0.53907 lineto 0.43546 0.52036 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43546 0.52036 moveto 0.392 0.50837 lineto 0.39117 0.5273 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66366 0.48326 moveto 0.62324 0.49752 lineto 0.62367 0.5161 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62324 0.49752 moveto 0.66366 0.48326 lineto 0.663 0.46462 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43369 0.57711 moveto 0.48137 0.58357 lineto 0.4817 0.56458 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4817 0.56458 moveto 0.43428 0.55799 lineto 0.43369 0.57711 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35515 0.4725 moveto 0.39283 0.48964 lineto 0.39364 0.47111 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39364 0.47111 moveto 0.35619 0.45367 lineto 0.35515 0.4725 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53048 0.58506 moveto 0.57903 0.58154 lineto 0.57883 0.56252 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62456 0.55389 moveto 0.57883 0.56252 lineto 0.57903 0.58154 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57883 0.56252 moveto 0.62456 0.55389 lineto 0.62412 0.53489 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48103 0.60276 moveto 0.53041 0.60422 lineto 0.53048 0.58506 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53048 0.58506 moveto 0.48137 0.58357 lineto 0.48103 0.60276 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57903 0.58154 moveto 0.53048 0.58506 lineto 0.53041 0.60422 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39033 0.54645 moveto 0.43428 0.55799 lineto 0.43487 0.53907 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43487 0.53907 moveto 0.39117 0.5273 lineto 0.39033 0.54645 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66433 0.5021 moveto 0.62367 0.5161 lineto 0.62412 0.53489 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62367 0.5161 moveto 0.66433 0.5021 lineto 0.66366 0.48326 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6957 0.42653 moveto 0.66235 0.44619 lineto 0.663 0.46462 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43308 0.59644 moveto 0.48103 0.60276 lineto 0.48137 0.58357 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48137 0.58357 moveto 0.43369 0.57711 lineto 0.43308 0.59644 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35409 0.49154 moveto 0.392 0.50837 lineto 0.39283 0.48964 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39283 0.48964 moveto 0.35515 0.4725 lineto 0.35409 0.49154 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53041 0.60422 moveto 0.57922 0.60078 lineto 0.57903 0.58154 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62501 0.5731 moveto 0.57903 0.58154 lineto 0.57922 0.60078 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57903 0.58154 moveto 0.62501 0.5731 lineto 0.62456 0.55389 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48069 0.62217 moveto 0.53034 0.62359 lineto 0.53041 0.60422 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53041 0.60422 moveto 0.48103 0.60276 lineto 0.48069 0.62217 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57922 0.60078 moveto 0.53041 0.60422 lineto 0.53034 0.62359 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38947 0.56581 moveto 0.43369 0.57711 lineto 0.43428 0.55799 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43428 0.55799 moveto 0.39033 0.54645 lineto 0.38947 0.56581 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66501 0.52116 moveto 0.62412 0.53489 lineto 0.62456 0.55389 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62412 0.53489 moveto 0.66501 0.52116 lineto 0.66433 0.5021 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69655 0.44529 moveto 0.663 0.46462 lineto 0.66366 0.48326 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.663 0.46462 moveto 0.69655 0.44529 lineto 0.6957 0.42653 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43247 0.61599 moveto 0.48069 0.62217 lineto 0.48103 0.60276 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48103 0.60276 moveto 0.43308 0.59644 lineto 0.43247 0.61599 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35303 0.51079 moveto 0.39117 0.5273 lineto 0.392 0.50837 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.392 0.50837 moveto 0.35409 0.49154 lineto 0.35303 0.51079 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53034 0.62359 moveto 0.57943 0.62023 lineto 0.57922 0.60078 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62547 0.59252 moveto 0.57922 0.60078 lineto 0.57943 0.62023 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57922 0.60078 moveto 0.62547 0.59252 lineto 0.62501 0.5731 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48035 0.64179 moveto 0.53027 0.64318 lineto 0.53034 0.62359 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53034 0.62359 moveto 0.48069 0.62217 lineto 0.48035 0.64179 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57943 0.62023 moveto 0.53034 0.62359 lineto 0.53027 0.64318 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38861 0.58539 moveto 0.43308 0.59644 lineto 0.43369 0.57711 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43369 0.57711 moveto 0.38947 0.56581 lineto 0.38861 0.58539 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66569 0.54043 moveto 0.62456 0.55389 lineto 0.62501 0.5731 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62456 0.55389 moveto 0.66569 0.54043 lineto 0.66501 0.52116 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69742 0.46426 moveto 0.66366 0.48326 lineto 0.66433 0.5021 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66366 0.48326 moveto 0.69742 0.46426 lineto 0.69655 0.44529 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43186 0.63576 moveto 0.48035 0.64179 lineto 0.48069 0.62217 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48069 0.62217 moveto 0.43247 0.61599 lineto 0.43186 0.63576 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32641 0.43176 moveto 0.35619 0.45367 lineto 0.35722 0.43506 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35722 0.43506 moveto 0.32764 0.41278 lineto 0.32641 0.43176 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35195 0.53026 moveto 0.39033 0.54645 lineto 0.39117 0.5273 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39117 0.5273 moveto 0.35303 0.51079 lineto 0.35195 0.53026 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53027 0.64318 moveto 0.57963 0.6399 lineto 0.57943 0.62023 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62593 0.61216 moveto 0.57943 0.62023 lineto 0.57963 0.6399 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57943 0.62023 moveto 0.62593 0.61216 lineto 0.62547 0.59252 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48 0.66163 moveto 0.5302 0.66298 lineto 0.53027 0.64318 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53027 0.64318 moveto 0.48035 0.64179 lineto 0.48 0.66163 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57963 0.6399 moveto 0.53027 0.64318 lineto 0.5302 0.66298 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38774 0.60519 moveto 0.43247 0.61599 lineto 0.43308 0.59644 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43308 0.59644 moveto 0.38861 0.58539 lineto 0.38774 0.60519 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66638 0.55991 moveto 0.62501 0.5731 lineto 0.62547 0.59252 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62501 0.5731 moveto 0.66638 0.55991 lineto 0.66569 0.54043 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69829 0.48344 moveto 0.66433 0.5021 lineto 0.66501 0.52116 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66433 0.5021 moveto 0.69829 0.48344 lineto 0.69742 0.46426 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43123 0.65575 moveto 0.48 0.66163 lineto 0.48035 0.64179 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48035 0.64179 moveto 0.43186 0.63576 lineto 0.43123 0.65575 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32517 0.45095 moveto 0.35515 0.4725 lineto 0.35619 0.45367 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35619 0.45367 moveto 0.32641 0.43176 lineto 0.32517 0.45095 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35086 0.54995 moveto 0.38947 0.56581 lineto 0.39033 0.54645 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39033 0.54645 moveto 0.35195 0.53026 lineto 0.35086 0.54995 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5302 0.66298 moveto 0.57983 0.65978 lineto 0.57963 0.6399 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6264 0.63202 moveto 0.57963 0.6399 lineto 0.57983 0.65978 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57963 0.6399 moveto 0.6264 0.63202 lineto 0.62593 0.61216 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47965 0.68169 moveto 0.53013 0.683 lineto 0.5302 0.66298 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5302 0.66298 moveto 0.48 0.66163 lineto 0.47965 0.68169 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57983 0.65978 moveto 0.5302 0.66298 lineto 0.53013 0.683 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38686 0.62522 moveto 0.43186 0.63576 lineto 0.43247 0.61599 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43247 0.61599 moveto 0.38774 0.60519 lineto 0.38686 0.62522 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66708 0.57962 moveto 0.62547 0.59252 lineto 0.62593 0.61216 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62547 0.59252 moveto 0.66708 0.57962 lineto 0.66638 0.55991 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69918 0.50284 moveto 0.66501 0.52116 lineto 0.66569 0.54043 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66501 0.52116 moveto 0.69918 0.50284 lineto 0.69829 0.48344 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4306 0.67597 moveto 0.47965 0.68169 lineto 0.48 0.66163 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48 0.66163 moveto 0.43123 0.65575 lineto 0.4306 0.67597 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72028 0.40262 moveto 0.6957 0.42653 lineto 0.69655 0.44529 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32392 0.47037 moveto 0.35409 0.49154 lineto 0.35515 0.4725 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35515 0.4725 moveto 0.32517 0.45095 lineto 0.32392 0.47037 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34976 0.56987 moveto 0.38861 0.58539 lineto 0.38947 0.56581 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38947 0.56581 moveto 0.35086 0.54995 lineto 0.34976 0.56987 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53013 0.683 moveto 0.58004 0.67989 lineto 0.57983 0.65978 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62687 0.6521 moveto 0.57983 0.65978 lineto 0.58004 0.67989 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57983 0.65978 moveto 0.62687 0.6521 lineto 0.6264 0.63202 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47929 0.70197 moveto 0.53006 0.70325 lineto 0.53013 0.683 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53013 0.683 moveto 0.47965 0.68169 lineto 0.47929 0.70197 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58004 0.67989 moveto 0.53013 0.683 lineto 0.53006 0.70325 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38597 0.64547 moveto 0.43123 0.65575 lineto 0.43186 0.63576 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43186 0.63576 moveto 0.38686 0.62522 lineto 0.38597 0.64547 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66779 0.59955 moveto 0.62593 0.61216 lineto 0.6264 0.63202 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62593 0.61216 moveto 0.66779 0.59955 lineto 0.66708 0.57962 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70008 0.52247 moveto 0.66569 0.54043 lineto 0.66638 0.55991 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66569 0.54043 moveto 0.70008 0.52247 lineto 0.69918 0.50284 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42996 0.69641 moveto 0.47929 0.70197 lineto 0.47965 0.68169 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47965 0.68169 moveto 0.4306 0.67597 lineto 0.42996 0.69641 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72131 0.42176 moveto 0.69655 0.44529 lineto 0.69742 0.46426 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69655 0.44529 moveto 0.72131 0.42176 lineto 0.72028 0.40262 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32265 0.49001 moveto 0.35303 0.51079 lineto 0.35409 0.49154 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35409 0.49154 moveto 0.32392 0.47037 lineto 0.32265 0.49001 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34864 0.59002 moveto 0.38774 0.60519 lineto 0.38861 0.58539 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38861 0.58539 moveto 0.34976 0.56987 lineto 0.34864 0.59002 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53006 0.70325 moveto 0.58025 0.70023 lineto 0.58004 0.67989 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62735 0.67241 moveto 0.58004 0.67989 lineto 0.58025 0.70023 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58004 0.67989 moveto 0.62735 0.67241 lineto 0.62687 0.6521 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47893 0.72249 moveto 0.52999 0.72373 lineto 0.53006 0.70325 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53006 0.70325 moveto 0.47929 0.70197 lineto 0.47893 0.72249 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58025 0.70023 moveto 0.53006 0.70325 lineto 0.52999 0.72373 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38507 0.66596 moveto 0.4306 0.67597 lineto 0.43123 0.65575 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43123 0.65575 moveto 0.38597 0.64547 lineto 0.38507 0.66596 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66851 0.6197 moveto 0.6264 0.63202 lineto 0.62687 0.6521 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6264 0.63202 moveto 0.66851 0.6197 lineto 0.66779 0.59955 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70098 0.54232 moveto 0.66638 0.55991 lineto 0.66708 0.57962 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66638 0.55991 moveto 0.70098 0.54232 lineto 0.70008 0.52247 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42932 0.71709 moveto 0.47893 0.72249 lineto 0.47929 0.70197 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47929 0.70197 moveto 0.42996 0.69641 lineto 0.42932 0.71709 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72234 0.44113 moveto 0.69742 0.46426 lineto 0.69829 0.48344 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69742 0.46426 moveto 0.72234 0.44113 lineto 0.72131 0.42176 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32137 0.50988 moveto 0.35195 0.53026 lineto 0.35303 0.51079 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35303 0.51079 moveto 0.32265 0.49001 lineto 0.32137 0.50988 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34752 0.6104 moveto 0.38686 0.62522 lineto 0.38774 0.60519 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38774 0.60519 moveto 0.34864 0.59002 lineto 0.34752 0.6104 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52999 0.72373 moveto 0.58046 0.7208 lineto 0.58025 0.70023 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62783 0.69296 moveto 0.58025 0.70023 lineto 0.58046 0.7208 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58025 0.70023 moveto 0.62783 0.69296 lineto 0.62735 0.67241 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47856 0.74324 moveto 0.52991 0.74444 lineto 0.52999 0.72373 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52999 0.72373 moveto 0.47893 0.72249 lineto 0.47856 0.74324 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58046 0.7208 moveto 0.52999 0.72373 lineto 0.52991 0.74444 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38416 0.68668 moveto 0.42996 0.69641 lineto 0.4306 0.67597 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4306 0.67597 moveto 0.38507 0.66596 lineto 0.38416 0.68668 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66923 0.64009 moveto 0.62687 0.6521 lineto 0.62735 0.67241 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62687 0.6521 moveto 0.66923 0.64009 lineto 0.66851 0.6197 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3065 0.40616 moveto 0.32641 0.43176 lineto 0.32764 0.41278 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32764 0.41278 moveto 0.30788 0.38677 lineto 0.3065 0.40616 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7019 0.5624 moveto 0.66708 0.57962 lineto 0.66779 0.59955 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66708 0.57962 moveto 0.7019 0.5624 lineto 0.70098 0.54232 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42866 0.73801 moveto 0.47856 0.74324 lineto 0.47893 0.72249 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47893 0.72249 moveto 0.42932 0.71709 lineto 0.42866 0.73801 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72339 0.46071 moveto 0.69829 0.48344 lineto 0.69918 0.50284 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69829 0.48344 moveto 0.72339 0.46071 lineto 0.72234 0.44113 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32007 0.52998 moveto 0.35086 0.54995 lineto 0.35195 0.53026 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35195 0.53026 moveto 0.32137 0.50988 lineto 0.32007 0.52998 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34637 0.63102 moveto 0.38597 0.64547 lineto 0.38686 0.62522 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38686 0.62522 moveto 0.34752 0.6104 lineto 0.34637 0.63102 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52991 0.74444 moveto 0.58068 0.7416 lineto 0.58046 0.7208 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62832 0.71374 moveto 0.58046 0.7208 lineto 0.58068 0.7416 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58046 0.7208 moveto 0.62832 0.71374 lineto 0.62783 0.69296 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.76423 moveto 0.52984 0.76539 lineto 0.52991 0.74444 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52991 0.74444 moveto 0.47856 0.74324 lineto 0.4782 0.76423 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58068 0.7416 moveto 0.52991 0.74444 lineto 0.52984 0.76539 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38323 0.70764 moveto 0.42932 0.71709 lineto 0.42996 0.69641 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42996 0.69641 moveto 0.38416 0.68668 lineto 0.38323 0.70764 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66996 0.66072 moveto 0.62735 0.67241 lineto 0.62783 0.69296 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62735 0.67241 moveto 0.66996 0.66072 lineto 0.66923 0.64009 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3051 0.42578 moveto 0.32517 0.45095 lineto 0.32641 0.43176 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32641 0.43176 moveto 0.3065 0.40616 lineto 0.3051 0.42578 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70283 0.58271 moveto 0.66779 0.59955 lineto 0.66851 0.6197 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66779 0.59955 moveto 0.70283 0.58271 lineto 0.7019 0.5624 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.428 0.75917 moveto 0.4782 0.76423 lineto 0.47856 0.74324 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47856 0.74324 moveto 0.42866 0.73801 lineto 0.428 0.75917 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72445 0.48053 moveto 0.69918 0.50284 lineto 0.70008 0.52247 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69918 0.50284 moveto 0.72445 0.48053 lineto 0.72339 0.46071 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31875 0.55033 moveto 0.34976 0.56987 lineto 0.35086 0.54995 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35086 0.54995 moveto 0.32007 0.52998 lineto 0.31875 0.55033 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34522 0.65188 moveto 0.38507 0.66596 lineto 0.38597 0.64547 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38597 0.64547 moveto 0.34637 0.63102 lineto 0.34522 0.65188 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52984 0.76539 moveto 0.5809 0.76264 lineto 0.58068 0.7416 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62882 0.73476 moveto 0.58068 0.7416 lineto 0.5809 0.76264 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58068 0.7416 moveto 0.62882 0.73476 lineto 0.62832 0.71374 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47782 0.78546 moveto 0.52977 0.78658 lineto 0.52984 0.76539 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52984 0.76539 moveto 0.4782 0.76423 lineto 0.47782 0.78546 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5809 0.76264 moveto 0.52984 0.76539 lineto 0.52977 0.78658 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3823 0.72885 moveto 0.42866 0.73801 lineto 0.42932 0.71709 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42932 0.71709 moveto 0.38323 0.70764 lineto 0.3823 0.72885 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6707 0.68159 moveto 0.62783 0.69296 lineto 0.62832 0.71374 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62783 0.69296 moveto 0.6707 0.68159 lineto 0.66996 0.66072 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30369 0.44563 moveto 0.32392 0.47037 lineto 0.32517 0.45095 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32517 0.45095 moveto 0.3051 0.42578 lineto 0.30369 0.44563 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70377 0.60327 moveto 0.66851 0.6197 lineto 0.66923 0.64009 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66851 0.6197 moveto 0.70377 0.60327 lineto 0.70283 0.58271 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73403 0.37541 moveto 0.72028 0.40262 lineto 0.72131 0.42176 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42733 0.78058 moveto 0.47782 0.78546 lineto 0.4782 0.76423 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.76423 moveto 0.428 0.75917 lineto 0.42733 0.78058 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72552 0.50058 moveto 0.70008 0.52247 lineto 0.70098 0.54232 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70008 0.52247 moveto 0.72552 0.50058 lineto 0.72445 0.48053 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31742 0.57091 moveto 0.34864 0.59002 lineto 0.34976 0.56987 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34976 0.56987 moveto 0.31875 0.55033 lineto 0.31742 0.57091 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34405 0.67299 moveto 0.38416 0.68668 lineto 0.38507 0.66596 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38507 0.66596 moveto 0.34522 0.65188 lineto 0.34405 0.67299 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52977 0.78658 moveto 0.58112 0.78393 lineto 0.5809 0.76264 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62932 0.75603 moveto 0.5809 0.76264 lineto 0.58112 0.78393 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5809 0.76264 moveto 0.62932 0.75603 lineto 0.62882 0.73476 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47745 0.80694 moveto 0.52969 0.80802 lineto 0.52977 0.78658 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52977 0.78658 moveto 0.47782 0.78546 lineto 0.47745 0.80694 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58112 0.78393 moveto 0.52977 0.78658 lineto 0.52969 0.80802 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38136 0.75031 moveto 0.428 0.75917 lineto 0.42866 0.73801 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42866 0.73801 moveto 0.3823 0.72885 lineto 0.38136 0.75031 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67145 0.7027 moveto 0.62832 0.71374 lineto 0.62882 0.73476 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62832 0.71374 moveto 0.67145 0.7027 lineto 0.6707 0.68159 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30226 0.46572 moveto 0.32265 0.49001 lineto 0.32392 0.47037 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32392 0.47037 moveto 0.30369 0.44563 lineto 0.30226 0.46572 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70472 0.62406 moveto 0.66923 0.64009 lineto 0.66996 0.66072 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66923 0.64009 moveto 0.70472 0.62406 lineto 0.70377 0.60327 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73517 0.39498 moveto 0.72131 0.42176 lineto 0.72234 0.44113 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72131 0.42176 moveto 0.73517 0.39498 lineto 0.73403 0.37541 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42666 0.80223 moveto 0.47745 0.80694 lineto 0.47782 0.78546 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47782 0.78546 moveto 0.42733 0.78058 lineto 0.42666 0.80223 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7266 0.52087 moveto 0.70098 0.54232 lineto 0.7019 0.5624 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70098 0.54232 moveto 0.7266 0.52087 lineto 0.72552 0.50058 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31608 0.59174 moveto 0.34752 0.6104 lineto 0.34864 0.59002 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34864 0.59002 moveto 0.31742 0.57091 lineto 0.31608 0.59174 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34287 0.69435 moveto 0.38323 0.70764 lineto 0.38416 0.68668 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38416 0.68668 moveto 0.34405 0.67299 lineto 0.34287 0.69435 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52969 0.80802 moveto 0.58134 0.80546 lineto 0.58112 0.78393 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62982 0.77754 moveto 0.58112 0.78393 lineto 0.58134 0.80546 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58112 0.78393 moveto 0.62982 0.77754 lineto 0.62932 0.75603 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47707 0.82866 moveto 0.52961 0.8297 lineto 0.52969 0.80802 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52969 0.80802 moveto 0.47745 0.80694 lineto 0.47707 0.82866 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58134 0.80546 moveto 0.52969 0.80802 lineto 0.52961 0.8297 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3804 0.77202 moveto 0.42733 0.78058 lineto 0.428 0.75917 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.428 0.75917 moveto 0.38136 0.75031 lineto 0.3804 0.77202 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67221 0.72406 moveto 0.62882 0.73476 lineto 0.62932 0.75603 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62882 0.73476 moveto 0.67221 0.72406 lineto 0.67145 0.7027 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30082 0.48605 moveto 0.32137 0.50988 lineto 0.32265 0.49001 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32265 0.49001 moveto 0.30226 0.46572 lineto 0.30082 0.48605 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70568 0.64511 moveto 0.66996 0.66072 lineto 0.6707 0.68159 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66996 0.66072 moveto 0.70568 0.64511 lineto 0.70472 0.62406 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73631 0.41478 moveto 0.72234 0.44113 lineto 0.72339 0.46071 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72234 0.44113 moveto 0.73631 0.41478 lineto 0.73517 0.39498 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42597 0.82414 moveto 0.47707 0.82866 lineto 0.47745 0.80694 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47745 0.80694 moveto 0.42666 0.80223 lineto 0.42597 0.82414 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7277 0.54141 moveto 0.7019 0.5624 lineto 0.70283 0.58271 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7019 0.5624 moveto 0.7277 0.54141 lineto 0.7266 0.52087 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31472 0.61281 moveto 0.34637 0.63102 lineto 0.34752 0.6104 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34752 0.6104 moveto 0.31608 0.59174 lineto 0.31472 0.61281 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34167 0.71597 moveto 0.3823 0.72885 lineto 0.38323 0.70764 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38323 0.70764 moveto 0.34287 0.69435 lineto 0.34167 0.71597 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52961 0.8297 moveto 0.58156 0.82725 lineto 0.58134 0.80546 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63034 0.79931 moveto 0.58134 0.80546 lineto 0.58156 0.82725 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58134 0.80546 moveto 0.63034 0.79931 lineto 0.62982 0.77754 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47668 0.85064 moveto 0.50027 0.85109 lineto gsave
+0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.52961 0.8297 moveto 0.49768 0.84233 lineto 0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.47668 0.85064 moveto 0.50687 0.84628 lineto 0.49768 0.84233 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.52956 0.84444 moveto 0.52961 0.8297 lineto gsave
+0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.50027 0.85109 moveto 0.51193 0.84844 lineto 0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.52956 0.84444 moveto 0.50687 0.84628 lineto 0.51193 0.84844 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.51188 0.85168 moveto 0.51891 0.85144 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51193 0.84844 moveto 0.51188 0.85168 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50027 0.85109 moveto 0.51188 0.85168 lineto 0.51193 0.84844 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50027 0.85109 moveto 0.52954 0.85164 lineto 0.52956 0.84444 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58156 0.82725 moveto 0.52961 0.8297 lineto 0.52954 0.85164 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52954 0.85164 moveto 0.58179 0.84929 lineto 0.58156 0.82725 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58179 0.84929 moveto 0.57848 0.82433 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51891 0.85144 moveto 0.58179 0.84929 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52961 0.8297 moveto 0.47707 0.82866 lineto 0.47668 0.85064 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57848 0.82433 moveto 0.51223 0.82673 lineto 0.51193 0.84844 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.57848 0.82433 moveto 0.51193 0.84844 lineto 0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill
+grestore
+gsave
+0.43606 0.84264 moveto 0.44443 0.84429 lineto 0.47707 0.82866 lineto 0.778 0.552 0.593 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.43571 0.84719 moveto 0.44212 0.84813 lineto 0.44264 0.84489 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44212 0.84813 moveto 0.4539 0.84873 lineto gsave
+0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47668 0.85064 moveto 0.47698 0.83345 lineto gsave
+0.44443 0.84429 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47698 0.83345 moveto 0.47707 0.82866 lineto gsave
+0.44443 0.84429 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4539 0.84873 moveto 0.47668 0.85064 lineto gsave
+0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47707 0.82866 moveto 0.42597 0.82414 lineto 0.42551 0.83904 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.47707 0.82866 moveto 0.42551 0.83904 lineto 0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.51223 0.82673 moveto 0.44612 0.82317 lineto 0.44264 0.84489 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44264 0.84489 moveto 0.44212 0.84813 lineto gsave
+0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.51223 0.82673 moveto 0.44264 0.84489 lineto 0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.42551 0.83904 moveto 0.42528 0.84632 lineto gsave
+0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42528 0.84632 moveto 0.4539 0.84873 lineto gsave
+0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37746 0.83873 moveto 0.42528 0.84632 lineto 0.42597 0.82414 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37746 0.83873 moveto 0.43571 0.84719 lineto gsave
+0.44612 0.82317 lineto 0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44264 0.84489 moveto 0.44612 0.82317 lineto gsave
+0.43571 0.84719 lineto 0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.51223 0.82673 moveto 0.44741 0.84651 lineto 0.50027 0.85109 lineto 0.751 0.623 0.717 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.4539 0.84873 moveto 0.50027 0.85109 lineto gsave
+0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51193 0.84844 moveto 0.51223 0.82673 lineto gsave
+0.50027 0.85109 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37943 0.79399 moveto 0.42666 0.80223 lineto 0.42733 0.78058 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42733 0.78058 moveto 0.3804 0.77202 lineto 0.37943 0.79399 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67298 0.74568 moveto 0.62932 0.75603 lineto 0.62982 0.77754 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62932 0.75603 moveto 0.67298 0.74568 lineto 0.67221 0.72406 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29936 0.50663 moveto 0.32007 0.52998 lineto 0.32137 0.50988 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32137 0.50988 moveto 0.30082 0.48605 lineto 0.29936 0.50663 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70665 0.6664 moveto 0.6707 0.68159 lineto 0.67145 0.7027 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6707 0.68159 moveto 0.70665 0.6664 lineto 0.70568 0.64511 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73748 0.43482 moveto 0.72339 0.46071 lineto 0.72445 0.48053 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72339 0.46071 moveto 0.73748 0.43482 lineto 0.73631 0.41478 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29849 0.37803 moveto 0.3065 0.40616 lineto 0.30788 0.38677 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30788 0.38677 moveto 0.29996 0.3582 lineto 0.29849 0.37803 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72881 0.56218 moveto 0.70283 0.58271 lineto 0.70377 0.60327 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70283 0.58271 moveto 0.72881 0.56218 lineto 0.7277 0.54141 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31334 0.63415 moveto 0.34522 0.65188 lineto 0.34637 0.63102 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34637 0.63102 moveto 0.31472 0.61281 lineto 0.31334 0.63415 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34046 0.73785 moveto 0.38136 0.75031 lineto 0.3823 0.72885 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3823 0.72885 moveto 0.34167 0.71597 lineto 0.34046 0.73785 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63086 0.82134 moveto 0.58156 0.82725 lineto 0.58179 0.84929 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58156 0.82725 moveto 0.63086 0.82134 lineto 0.63034 0.79931 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37845 0.81623 moveto 0.42597 0.82414 lineto 0.42666 0.80223 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42666 0.80223 moveto 0.37943 0.79399 lineto 0.37845 0.81623 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67376 0.76755 moveto 0.62982 0.77754 lineto 0.63034 0.79931 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62982 0.77754 moveto 0.67376 0.76755 lineto 0.67298 0.74568 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44612 0.82317 moveto 0.51223 0.82673 lineto 0.51257 0.80175 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51223 0.82673 moveto 0.57848 0.82433 lineto 0.57517 0.79936 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57517 0.79936 moveto 0.51257 0.80175 lineto 0.51223 0.82673 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51257 0.80175 moveto 0.45013 0.7982 lineto 0.44612 0.82317 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45013 0.7982 moveto 0.51257 0.80175 lineto 0.51291 0.77673 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51257 0.80175 moveto 0.57517 0.79936 lineto 0.57186 0.77436 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57186 0.77436 moveto 0.51291 0.77673 lineto 0.51257 0.80175 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29788 0.52746 moveto 0.31875 0.55033 lineto 0.32007 0.52998 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32007 0.52998 moveto 0.29936 0.50663 lineto 0.29788 0.52746 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70764 0.68795 moveto 0.67145 0.7027 lineto 0.67221 0.72406 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67145 0.7027 moveto 0.70764 0.68795 lineto 0.70665 0.6664 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51291 0.77673 moveto 0.45413 0.77322 lineto 0.45013 0.7982 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45413 0.77322 moveto 0.51291 0.77673 lineto 0.51326 0.75167 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51291 0.77673 moveto 0.57186 0.77436 lineto 0.56855 0.74935 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56855 0.74935 moveto 0.51326 0.75167 lineto 0.51291 0.77673 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73865 0.45511 moveto 0.72445 0.48053 lineto 0.72552 0.50058 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72445 0.48053 moveto 0.73865 0.45511 lineto 0.73748 0.43482 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.297 0.39811 moveto 0.3051 0.42578 lineto 0.3065 0.40616 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3065 0.40616 moveto 0.29849 0.37803 lineto 0.297 0.39811 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51326 0.75167 moveto 0.45813 0.74822 lineto 0.45413 0.77322 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45813 0.74822 moveto 0.51326 0.75167 lineto 0.5136 0.72658 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51326 0.75167 moveto 0.56855 0.74935 lineto 0.56523 0.72431 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56523 0.72431 moveto 0.5136 0.72658 lineto 0.51326 0.75167 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72993 0.58321 moveto 0.70377 0.60327 lineto 0.70472 0.62406 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70377 0.60327 moveto 0.72993 0.58321 lineto 0.72881 0.56218 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5136 0.72658 moveto 0.46214 0.72321 lineto 0.45813 0.74822 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46214 0.72321 moveto 0.5136 0.72658 lineto 0.51395 0.70146 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5136 0.72658 moveto 0.56523 0.72431 lineto 0.56191 0.69926 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56191 0.69926 moveto 0.51395 0.70146 lineto 0.5136 0.72658 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51395 0.70146 moveto 0.46615 0.69819 lineto 0.46214 0.72321 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46615 0.69819 moveto 0.51395 0.70146 lineto 0.51429 0.6763 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51395 0.70146 moveto 0.56191 0.69926 lineto 0.55858 0.67418 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55858 0.67418 moveto 0.51429 0.6763 lineto 0.51395 0.70146 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31195 0.65574 moveto 0.34405 0.67299 lineto 0.34522 0.65188 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34522 0.65188 moveto 0.31334 0.63415 lineto 0.31195 0.65574 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51429 0.6763 moveto 0.47017 0.67315 lineto 0.46615 0.69819 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47017 0.67315 moveto 0.51429 0.6763 lineto 0.51464 0.65111 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51429 0.6763 moveto 0.55858 0.67418 lineto 0.55525 0.64909 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55525 0.64909 moveto 0.51464 0.65111 lineto 0.51429 0.6763 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33924 0.75999 moveto 0.3804 0.77202 lineto 0.38136 0.75031 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38136 0.75031 moveto 0.34046 0.73785 lineto 0.33924 0.75999 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58179 0.84929 moveto 0.63138 0.84363 lineto 0.63086 0.82134 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67534 0.81209 moveto 0.63086 0.82134 lineto 0.63121 0.83631 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63121 0.83631 moveto 0.63138 0.84363 lineto gsave
+0.64032 0.83721 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.67534 0.81209 moveto 0.63121 0.83631 lineto 0.64032 0.83721 lineto 0.484 0.315 0.576 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.63086 0.82134 moveto 0.67534 0.81209 lineto 0.67454 0.78968 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64606 0.83778 moveto 0.64695 0.84102 lineto gsave
+0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63138 0.84363 moveto 0.64025 0.84187 lineto gsave
+0.67534 0.81209 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64025 0.84187 moveto 0.64695 0.84102 lineto 0.64606 0.83778 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67614 0.83476 moveto 0.67551 0.81703 lineto gsave
+0.64606 0.83778 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65597 0.83876 moveto 0.67614 0.83476 lineto gsave
+0.64606 0.83778 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67551 0.81703 moveto 0.67534 0.81209 lineto gsave
+0.64025 0.84187 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71274 0.79971 moveto 0.67534 0.81209 lineto 0.67551 0.81703 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67551 0.81703 moveto 0.67614 0.83476 lineto gsave
+0.69042 0.82108 lineto 0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.71274 0.79971 moveto 0.67551 0.81703 lineto 0.69042 0.82108 lineto 0.355 0.217 0.551 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.67534 0.81209 moveto 0.71274 0.79971 lineto 0.7117 0.77681 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70088 0.82393 moveto 0.70218 0.82717 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67614 0.83476 moveto 0.69269 0.82955 lineto gsave
+0.71274 0.79971 lineto 0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70218 0.82717 moveto 0.70088 0.82393 lineto gsave
+0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71345 0.81529 moveto 0.71274 0.79971 lineto gsave
+0.69715 0.82291 lineto 0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.69269 0.82955 moveto 0.70088 0.82393 lineto 0.69715 0.82291 lineto 0.355 0.217 0.551 setrgbcolor
+fill
+grestore
+gsave
+0.71345 0.81529 moveto 0.69715 0.82291 lineto 0.70088 0.82393 lineto 0.355 0.217 0.551 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.70218 0.82717 moveto 0.70606 0.82534 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65597 0.83876 moveto 0.69269 0.82955 lineto gsave
+0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69269 0.82955 moveto 0.70218 0.82717 lineto gsave
+0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.65024 0.83819 moveto 0.69269 0.82955 lineto 0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.69269 0.82955 moveto 0.7138 0.8229 lineto 0.71345 0.81529 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74069 0.78457 moveto 0.71274 0.79971 lineto 0.7138 0.8229 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71274 0.79971 moveto 0.74069 0.78457 lineto 0.73943 0.76106 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7138 0.8229 moveto 0.74196 0.80838 lineto 0.74069 0.78457 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74196 0.80838 moveto 0.72926 0.78356 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70606 0.82534 moveto 0.74196 0.80838 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.65024 0.83819 moveto 0.69346 0.82902 lineto 0.69213 0.80224 lineto 0.471 0.423 0.722 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.70088 0.82393 moveto 0.69213 0.80224 lineto gsave
+0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73943 0.76106 moveto 0.7117 0.77681 lineto 0.71274 0.79971 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72926 0.78356 moveto 0.69213 0.80224 lineto 0.70088 0.82393 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.72926 0.78356 moveto 0.70088 0.82393 lineto 0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.64695 0.84102 moveto 0.65597 0.83876 lineto gsave
+0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64025 0.84187 moveto 0.65597 0.83876 lineto gsave
+0.64606 0.83778 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58179 0.84929 moveto 0.64025 0.84187 lineto gsave
+0.64012 0.81606 lineto 0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64606 0.83778 moveto 0.64012 0.81606 lineto gsave
+0.64025 0.84187 lineto 0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7117 0.77681 moveto 0.67454 0.78968 lineto 0.67534 0.81209 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69213 0.80224 moveto 0.64012 0.81606 lineto 0.64606 0.83778 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.69213 0.80224 moveto 0.64606 0.83778 lineto 0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.67454 0.78968 moveto 0.63034 0.79931 lineto 0.63086 0.82134 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64012 0.81606 moveto 0.57848 0.82433 lineto 0.58179 0.84929 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51464 0.65111 moveto 0.47418 0.64811 lineto 0.47017 0.67315 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47418 0.64811 moveto 0.51464 0.65111 lineto 0.51499 0.62588 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51464 0.65111 moveto 0.55525 0.64909 lineto 0.55193 0.62397 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55193 0.62397 moveto 0.51499 0.62588 lineto 0.51464 0.65111 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63034 0.79931 moveto 0.67454 0.78968 lineto 0.67376 0.76755 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57848 0.82433 moveto 0.64012 0.81606 lineto 0.63329 0.79113 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63329 0.79113 moveto 0.57517 0.79936 lineto 0.57848 0.82433 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51499 0.62588 moveto 0.4782 0.62304 lineto 0.47418 0.64811 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.62304 moveto 0.51499 0.62588 lineto 0.51533 0.60062 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51499 0.62588 moveto 0.55193 0.62397 lineto 0.54859 0.59883 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54859 0.59883 moveto 0.51533 0.60062 lineto 0.51499 0.62588 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57517 0.79936 moveto 0.63329 0.79113 lineto 0.62648 0.76623 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62648 0.76623 moveto 0.57186 0.77436 lineto 0.57517 0.79936 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42597 0.82414 moveto 0.37845 0.81623 lineto 0.37746 0.83873 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57186 0.77436 moveto 0.62648 0.76623 lineto 0.61967 0.74136 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61967 0.74136 moveto 0.56855 0.74935 lineto 0.57186 0.77436 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51533 0.60062 moveto 0.48222 0.59797 lineto 0.4782 0.62304 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48222 0.59797 moveto 0.51533 0.60062 lineto 0.51568 0.57532 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51533 0.60062 moveto 0.54859 0.59883 lineto 0.54526 0.57368 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54526 0.57368 moveto 0.51568 0.57532 lineto 0.51533 0.60062 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56855 0.74935 moveto 0.61967 0.74136 lineto 0.61287 0.71652 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61287 0.71652 moveto 0.56523 0.72431 lineto 0.56855 0.74935 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56523 0.72431 moveto 0.61287 0.71652 lineto 0.60608 0.6917 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60608 0.6917 moveto 0.56191 0.69926 lineto 0.56523 0.72431 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51568 0.57532 moveto 0.48624 0.57288 lineto 0.48222 0.59797 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48624 0.57288 moveto 0.51568 0.57532 lineto 0.51603 0.54999 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51568 0.57532 moveto 0.54526 0.57368 lineto 0.54192 0.5485 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54192 0.5485 moveto 0.51603 0.54999 lineto 0.51568 0.57532 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29638 0.54854 moveto 0.31742 0.57091 lineto 0.31875 0.55033 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31875 0.55033 moveto 0.29788 0.52746 lineto 0.29638 0.54854 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56191 0.69926 moveto 0.60608 0.6917 lineto 0.59929 0.66692 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59929 0.66692 moveto 0.55858 0.67418 lineto 0.56191 0.69926 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70863 0.70976 moveto 0.67221 0.72406 lineto 0.67298 0.74568 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67221 0.72406 moveto 0.70863 0.70976 lineto 0.70764 0.68795 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73985 0.47564 moveto 0.72552 0.50058 lineto 0.7266 0.52087 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72552 0.50058 moveto 0.73985 0.47564 lineto 0.73865 0.45511 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55858 0.67418 moveto 0.59929 0.66692 lineto 0.59252 0.64216 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59252 0.64216 moveto 0.55525 0.64909 lineto 0.55858 0.67418 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51603 0.54999 moveto 0.49026 0.54777 lineto 0.48624 0.57288 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49026 0.54777 moveto 0.51603 0.54999 lineto 0.51638 0.52462 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51603 0.54999 moveto 0.54192 0.5485 lineto 0.53858 0.5233 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.5233 moveto 0.51638 0.52462 lineto 0.51603 0.54999 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2955 0.41843 moveto 0.30369 0.44563 lineto 0.3051 0.42578 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3051 0.42578 moveto 0.297 0.39811 lineto 0.2955 0.41843 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44612 0.82317 moveto 0.385 0.81378 lineto 0.37746 0.83873 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.385 0.81378 moveto 0.44612 0.82317 lineto 0.45013 0.7982 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45013 0.7982 moveto 0.39252 0.78886 lineto 0.385 0.81378 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39252 0.78886 moveto 0.45013 0.7982 lineto 0.45413 0.77322 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55525 0.64909 moveto 0.59252 0.64216 lineto 0.58575 0.61743 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58575 0.61743 moveto 0.55193 0.62397 lineto 0.55525 0.64909 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45413 0.77322 moveto 0.40003 0.76399 lineto 0.39252 0.78886 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40003 0.76399 moveto 0.45413 0.77322 lineto 0.45813 0.74822 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73107 0.6045 moveto 0.70472 0.62406 lineto 0.70568 0.64511 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70472 0.62406 moveto 0.73107 0.6045 lineto 0.72993 0.58321 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51638 0.52462 moveto 0.49429 0.52266 lineto 0.49026 0.54777 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49429 0.52266 moveto 0.51638 0.52462 lineto 0.51673 0.49922 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51638 0.52462 moveto 0.53858 0.5233 lineto 0.53524 0.49808 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53524 0.49808 moveto 0.51673 0.49922 lineto 0.51638 0.52462 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73509 0.34624 moveto 0.73403 0.37541 lineto 0.73517 0.39498 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55193 0.62397 moveto 0.58575 0.61743 lineto 0.57899 0.59273 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57899 0.59273 moveto 0.54859 0.59883 lineto 0.55193 0.62397 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45813 0.74822 moveto 0.40753 0.73916 lineto 0.40003 0.76399 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40753 0.73916 moveto 0.45813 0.74822 lineto 0.46214 0.72321 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46214 0.72321 moveto 0.41501 0.71437 lineto 0.40753 0.73916 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41501 0.71437 moveto 0.46214 0.72321 lineto 0.46615 0.69819 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54859 0.59883 moveto 0.57899 0.59273 lineto 0.57223 0.56805 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57223 0.56805 moveto 0.54526 0.57368 lineto 0.54859 0.59883 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51673 0.49922 moveto 0.49831 0.49753 lineto 0.49429 0.52266 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49831 0.49753 moveto 0.51673 0.49922 lineto 0.51708 0.47378 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51673 0.49922 moveto 0.53524 0.49808 lineto 0.53189 0.47284 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53189 0.47284 moveto 0.51708 0.47378 lineto 0.51673 0.49922 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46615 0.69819 moveto 0.42248 0.68963 lineto 0.41501 0.71437 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42248 0.68963 moveto 0.46615 0.69819 lineto 0.47017 0.67315 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54526 0.57368 moveto 0.57223 0.56805 lineto 0.56549 0.54341 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56549 0.54341 moveto 0.54192 0.5485 lineto 0.54526 0.57368 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47017 0.67315 moveto 0.42994 0.66492 lineto 0.42248 0.68963 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42994 0.66492 moveto 0.47017 0.67315 lineto 0.47418 0.64811 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31053 0.67759 moveto 0.34287 0.69435 lineto 0.34405 0.67299 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34405 0.67299 moveto 0.31195 0.65574 lineto 0.31053 0.67759 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47418 0.64811 moveto 0.43739 0.64026 lineto 0.42994 0.66492 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43739 0.64026 moveto 0.47418 0.64811 lineto 0.4782 0.62304 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54192 0.5485 moveto 0.56549 0.54341 lineto 0.55875 0.51879 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55875 0.51879 moveto 0.53858 0.5233 lineto 0.54192 0.5485 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51708 0.47378 moveto 0.50234 0.47239 lineto 0.49831 0.49753 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50234 0.47239 moveto 0.51708 0.47378 lineto 0.51743 0.44831 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51708 0.47378 moveto 0.53189 0.47284 lineto 0.52854 0.44758 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52854 0.44758 moveto 0.51743 0.44831 lineto 0.51708 0.47378 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.62304 moveto 0.44482 0.61564 lineto 0.43739 0.64026 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44482 0.61564 moveto 0.4782 0.62304 lineto 0.48222 0.59797 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.5233 moveto 0.55875 0.51879 lineto 0.55202 0.4942 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55202 0.4942 moveto 0.53524 0.49808 lineto 0.53858 0.5233 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48222 0.59797 moveto 0.45224 0.59106 lineto 0.44482 0.61564 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45224 0.59106 moveto 0.48222 0.59797 lineto 0.48624 0.57288 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48624 0.57288 moveto 0.45965 0.56652 lineto 0.45224 0.59106 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45965 0.56652 moveto 0.48624 0.57288 lineto 0.49026 0.54777 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51743 0.44831 moveto 0.50637 0.44723 lineto 0.50234 0.47239 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50637 0.44723 moveto 0.51743 0.44831 lineto 0.51778 0.4228 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51743 0.44831 moveto 0.52854 0.44758 lineto 0.52519 0.4223 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52519 0.4223 moveto 0.51778 0.4228 lineto 0.51743 0.44831 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53524 0.49808 moveto 0.55202 0.4942 lineto 0.5453 0.46964 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5453 0.46964 moveto 0.53189 0.47284 lineto 0.53524 0.49808 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.338 0.7824 moveto 0.37943 0.79399 lineto 0.3804 0.77202 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3804 0.77202 moveto 0.33924 0.75999 lineto 0.338 0.7824 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49026 0.54777 moveto 0.46705 0.54202 lineto 0.45965 0.56652 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46705 0.54202 moveto 0.49026 0.54777 lineto 0.49429 0.52266 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53189 0.47284 moveto 0.5453 0.46964 lineto 0.53858 0.44511 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.44511 moveto 0.52854 0.44758 lineto 0.53189 0.47284 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49429 0.52266 moveto 0.47444 0.51757 lineto 0.46705 0.54202 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47444 0.51757 moveto 0.49429 0.52266 lineto 0.49831 0.49753 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51778 0.4228 moveto 0.51041 0.42206 lineto 0.50637 0.44723 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51041 0.42206 moveto 0.51778 0.4228 lineto 0.51813 0.39726 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51778 0.4228 moveto 0.52519 0.4223 lineto 0.52184 0.397 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52184 0.397 moveto 0.51813 0.39726 lineto 0.51778 0.4228 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49831 0.49753 moveto 0.48181 0.49315 lineto 0.47444 0.51757 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48181 0.49315 moveto 0.49831 0.49753 lineto 0.50234 0.47239 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52854 0.44758 moveto 0.53858 0.44511 lineto 0.53187 0.4206 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53187 0.4206 moveto 0.52519 0.4223 lineto 0.52854 0.44758 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50234 0.47239 moveto 0.48917 0.46877 lineto 0.48181 0.49315 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48917 0.46877 moveto 0.50234 0.47239 lineto 0.50637 0.44723 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52519 0.4223 moveto 0.53187 0.4206 lineto 0.52517 0.39613 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52517 0.39613 moveto 0.52184 0.397 lineto 0.52519 0.4223 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50637 0.44723 moveto 0.49651 0.44444 lineto 0.48917 0.46877 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49651 0.44444 moveto 0.50637 0.44723 lineto 0.51041 0.42206 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51813 0.39726 moveto 0.51444 0.39688 lineto 0.51041 0.42206 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51444 0.39688 moveto 0.51813 0.39726 lineto 0.51848 0.37168 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51813 0.39726 moveto 0.52184 0.397 lineto 0.51848 0.37168 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51041 0.42206 moveto 0.50385 0.42015 lineto 0.49651 0.44444 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50385 0.42015 moveto 0.51041 0.42206 lineto 0.51444 0.39688 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52184 0.397 moveto 0.52517 0.39613 lineto 0.51848 0.37168 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51444 0.39688 moveto 0.51117 0.39589 lineto 0.50385 0.42015 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51117 0.39589 moveto 0.51444 0.39688 lineto 0.51848 0.37168 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.7363 0.31304 moveto
+0.83342 0.2869 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50693 0.39062 moveto 0.50719 0.39259 lineto 0.51848 0.37168 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50719 0.39259 moveto 0.50866 0.39441 lineto 0.51848 0.37168 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50866 0.39441 moveto 0.51117 0.39589 lineto 0.51848 0.37168 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51303 0.38591 moveto 0.51001 0.38709 lineto 0.51848 0.37168 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5079 0.38871 moveto 0.50693 0.39062 lineto 0.51848 0.37168 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51001 0.38709 moveto 0.5079 0.38871 lineto 0.51848 0.37168 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52517 0.39613 moveto 0.52778 0.39473 lineto 0.51848 0.37168 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52778 0.39473 moveto 0.52937 0.39296 lineto 0.51848 0.37168 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52937 0.39296 moveto 0.52978 0.391 lineto 0.51848 0.37168 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52978 0.391 moveto 0.52894 0.38907 lineto 0.51848 0.37168 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52894 0.38907 moveto 0.52695 0.38737 lineto 0.51848 0.37168 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52695 0.38737 moveto 0.52401 0.3861 lineto 0.51848 0.37168 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52401 0.3861 moveto 0.52044 0.38539 lineto 0.51848 0.37168 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52044 0.38539 moveto 0.51665 0.38532 lineto 0.51848 0.37168 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51665 0.38532 moveto 0.51303 0.38591 lineto 0.51848 0.37168 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52778 0.39473 moveto 0.52517 0.39613 lineto 0.53187 0.4206 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29486 0.56988 moveto 0.31608 0.59174 lineto 0.31742 0.57091 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31742 0.57091 moveto 0.29638 0.54854 lineto 0.29486 0.56988 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70964 0.73184 moveto 0.67298 0.74568 lineto 0.67376 0.76755 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67298 0.74568 moveto 0.70964 0.73184 lineto 0.70863 0.70976 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74105 0.49642 moveto 0.7266 0.52087 lineto 0.7277 0.54141 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7266 0.52087 moveto 0.74105 0.49642 lineto 0.73985 0.47564 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4988 0.41725 moveto 0.50385 0.42015 lineto 0.51117 0.39589 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51117 0.39589 moveto 0.50866 0.39441 lineto 0.4988 0.41725 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29397 0.43901 moveto 0.30226 0.46572 lineto 0.30369 0.44563 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30369 0.44563 moveto 0.2955 0.41843 lineto 0.29397 0.43901 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53712 0.41789 moveto 0.53187 0.4206 lineto 0.53858 0.44511 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53187 0.4206 moveto 0.53712 0.41789 lineto 0.52778 0.39473 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48888 0.44021 moveto 0.49651 0.44444 lineto 0.50385 0.42015 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50385 0.42015 moveto 0.4988 0.41725 lineto 0.48888 0.44021 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5465 0.44114 moveto 0.53858 0.44511 lineto 0.5453 0.46964 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.44511 moveto 0.5465 0.44114 lineto 0.53712 0.41789 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73222 0.62604 moveto 0.70568 0.64511 lineto 0.70665 0.6664 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70568 0.64511 moveto 0.73222 0.62604 lineto 0.73107 0.6045 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73627 0.36625 moveto 0.73517 0.39498 lineto 0.73631 0.41478 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73517 0.39498 moveto 0.73627 0.36625 lineto 0.73509 0.34624 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52937 0.39296 moveto 0.52778 0.39473 lineto 0.53712 0.41789 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55591 0.46449 moveto 0.5453 0.46964 lineto 0.55202 0.4942 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5453 0.46964 moveto 0.55591 0.46449 lineto 0.5465 0.44114 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4958 0.41369 moveto 0.4988 0.41725 lineto 0.50866 0.39441 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50866 0.39441 moveto 0.50719 0.39259 lineto 0.4958 0.41369 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47891 0.46329 moveto 0.48917 0.46877 lineto 0.49651 0.44444 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49651 0.44444 moveto 0.48888 0.44021 lineto 0.47891 0.46329 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56537 0.48794 moveto 0.55202 0.4942 lineto 0.55875 0.51879 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55202 0.4942 moveto 0.56537 0.48794 lineto 0.55591 0.46449 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30911 0.69972 moveto 0.34167 0.71597 lineto 0.34287 0.69435 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34287 0.69435 moveto 0.31053 0.67759 lineto 0.30911 0.69972 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4689 0.48648 moveto 0.48181 0.49315 lineto 0.48917 0.46877 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48917 0.46877 moveto 0.47891 0.46329 lineto 0.4689 0.48648 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57487 0.51149 moveto 0.55875 0.51879 lineto 0.56549 0.54341 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55875 0.51879 moveto 0.57487 0.51149 lineto 0.56537 0.48794 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33674 0.80509 moveto 0.37845 0.81623 lineto 0.37943 0.79399 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37943 0.79399 moveto 0.338 0.7824 lineto 0.33674 0.80509 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58441 0.53515 moveto 0.56549 0.54341 lineto 0.57223 0.56805 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56549 0.54341 moveto 0.58441 0.53515 lineto 0.57487 0.51149 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53712 0.41789 moveto 0.54036 0.41442 lineto 0.52937 0.39296 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52978 0.391 moveto 0.52937 0.39296 lineto 0.54036 0.41442 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45883 0.50979 moveto 0.47444 0.51757 lineto 0.48181 0.49315 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48181 0.49315 moveto 0.4689 0.48648 lineto 0.45883 0.50979 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54036 0.41442 moveto 0.53712 0.41789 lineto 0.5465 0.44114 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49521 0.40981 moveto 0.4958 0.41369 lineto 0.50719 0.39259 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50719 0.39259 moveto 0.50693 0.39062 lineto 0.49521 0.40981 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59399 0.5589 moveto 0.57223 0.56805 lineto 0.57899 0.59273 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57223 0.56805 moveto 0.59399 0.5589 lineto 0.58441 0.53515 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48431 0.43498 moveto 0.48888 0.44021 lineto 0.4988 0.41725 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4988 0.41725 moveto 0.4958 0.41369 lineto 0.48431 0.43498 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44871 0.53321 moveto 0.46705 0.54202 lineto 0.47444 0.51757 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47444 0.51757 moveto 0.45883 0.50979 lineto 0.44871 0.53321 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60361 0.58276 moveto 0.57899 0.59273 lineto 0.58575 0.61743 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57899 0.59273 moveto 0.60361 0.58276 lineto 0.59399 0.5589 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61328 0.60672 moveto 0.58575 0.61743 lineto 0.59252 0.64216 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58575 0.61743 moveto 0.61328 0.60672 lineto 0.60361 0.58276 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43854 0.55676 moveto 0.45965 0.56652 lineto 0.46705 0.54202 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46705 0.54202 moveto 0.44871 0.53321 lineto 0.43854 0.55676 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62299 0.63079 moveto 0.59252 0.64216 lineto 0.59929 0.66692 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59252 0.64216 moveto 0.62299 0.63079 lineto 0.61328 0.60672 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54036 0.41442 moveto 0.54122 0.41058 lineto 0.52978 0.391 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52894 0.38907 moveto 0.52978 0.391 lineto 0.54122 0.41058 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55143 0.43606 moveto 0.5465 0.44114 lineto 0.55591 0.46449 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5465 0.44114 moveto 0.55143 0.43606 lineto 0.54036 0.41442 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29333 0.59149 moveto 0.31472 0.61281 lineto 0.31608 0.59174 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31608 0.59174 moveto 0.29486 0.56988 lineto 0.29333 0.59149 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71066 0.75419 moveto 0.67376 0.76755 lineto 0.67454 0.78968 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67376 0.76755 moveto 0.71066 0.75419 lineto 0.70964 0.73184 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74227 0.51746 moveto 0.7277 0.54141 lineto 0.72881 0.56218 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7277 0.54141 moveto 0.74227 0.51746 lineto 0.74105 0.49642 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42832 0.58042 moveto 0.45224 0.59106 lineto 0.45965 0.56652 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45965 0.56652 moveto 0.43854 0.55676 lineto 0.42832 0.58042 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49712 0.40605 moveto 0.49521 0.40981 lineto 0.50693 0.39062 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50693 0.39062 moveto 0.5079 0.38871 lineto 0.49712 0.40605 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63273 0.65496 moveto 0.59929 0.66692 lineto 0.60608 0.6917 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59929 0.66692 moveto 0.63273 0.65496 lineto 0.62299 0.63079 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29243 0.45984 moveto 0.30082 0.48605 lineto 0.30226 0.46572 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30226 0.46572 moveto 0.29397 0.43901 lineto 0.29243 0.45984 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64253 0.67924 moveto 0.60608 0.6917 lineto 0.61287 0.71652 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60608 0.6917 moveto 0.64253 0.67924 lineto 0.63273 0.65496 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47271 0.45646 moveto 0.47891 0.46329 lineto 0.48888 0.44021 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48888 0.44021 moveto 0.48431 0.43498 lineto 0.47271 0.45646 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41805 0.6042 moveto 0.44482 0.61564 lineto 0.45224 0.59106 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45224 0.59106 moveto 0.42832 0.58042 lineto 0.41805 0.6042 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73338 0.64785 moveto 0.70665 0.6664 lineto 0.70764 0.68795 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70665 0.6664 moveto 0.73338 0.64785 lineto 0.73222 0.62604 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73746 0.38652 moveto 0.73631 0.41478 lineto 0.73748 0.43482 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73631 0.41478 moveto 0.73746 0.38652 lineto 0.73627 0.36625 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65236 0.70363 moveto 0.61287 0.71652 lineto 0.61967 0.74136 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61287 0.71652 moveto 0.65236 0.70363 lineto 0.64253 0.67924 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54122 0.41058 moveto 0.54036 0.41442 lineto 0.55143 0.43606 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40772 0.62811 moveto 0.43739 0.64026 lineto 0.44482 0.61564 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44482 0.61564 moveto 0.41805 0.6042 lineto 0.40772 0.62811 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54122 0.41058 moveto 0.53958 0.40676 lineto 0.52894 0.38907 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52695 0.38737 moveto 0.52894 0.38907 lineto 0.53958 0.40676 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56259 0.45788 moveto 0.55591 0.46449 lineto 0.56537 0.48794 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55591 0.46449 moveto 0.56259 0.45788 lineto 0.55143 0.43606 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66224 0.72812 moveto 0.61967 0.74136 lineto 0.62648 0.76623 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61967 0.74136 moveto 0.66224 0.72812 lineto 0.65236 0.70363 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50135 0.40282 moveto 0.49712 0.40605 lineto 0.5079 0.38871 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5079 0.38871 moveto 0.51001 0.38709 lineto 0.50135 0.40282 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30766 0.72212 moveto 0.34046 0.73785 lineto 0.34167 0.71597 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34167 0.71597 moveto 0.30911 0.69972 lineto 0.30766 0.72212 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48334 0.42927 moveto 0.48431 0.43498 lineto 0.4958 0.41369 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4958 0.41369 moveto 0.49521 0.40981 lineto 0.48334 0.42927 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67216 0.75272 moveto 0.62648 0.76623 lineto 0.63329 0.79113 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62648 0.76623 moveto 0.67216 0.75272 lineto 0.66224 0.72812 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39734 0.65214 moveto 0.42994 0.66492 lineto 0.43739 0.64026 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43739 0.64026 moveto 0.40772 0.62811 lineto 0.39734 0.65214 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.68212 0.77742 moveto 0.63329 0.79113 lineto 0.64012 0.81606 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63329 0.79113 moveto 0.68212 0.77742 lineto 0.67216 0.75272 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33547 0.82805 moveto 0.37746 0.83873 lineto 0.37845 0.81623 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37845 0.81623 moveto 0.33674 0.80509 lineto 0.33547 0.82805 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.461 0.47815 moveto 0.4689 0.48648 lineto 0.47891 0.46329 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47891 0.46329 moveto 0.47271 0.45646 lineto 0.461 0.47815 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38691 0.67629 moveto 0.42248 0.68963 lineto 0.42994 0.66492 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42994 0.66492 moveto 0.39734 0.65214 lineto 0.38691 0.67629 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67454 0.78968 moveto 0.7117 0.77681 lineto 0.71066 0.75419 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64012 0.81606 moveto 0.69213 0.80224 lineto 0.68212 0.77742 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53958 0.40676 moveto 0.53559 0.4034 lineto 0.52695 0.38737 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52401 0.3861 moveto 0.52695 0.38737 lineto 0.53559 0.4034 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50745 0.40049 moveto 0.50135 0.40282 lineto 0.51001 0.38709 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51001 0.38709 moveto 0.51303 0.38591 lineto 0.50745 0.40049 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57385 0.47987 moveto 0.56537 0.48794 lineto 0.57487 0.51149 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56537 0.48794 moveto 0.57385 0.47987 lineto 0.56259 0.45788 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37642 0.70057 moveto 0.41501 0.71437 lineto 0.42248 0.68963 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42248 0.68963 moveto 0.38691 0.67629 lineto 0.37642 0.70057 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53559 0.4034 moveto 0.52966 0.40086 lineto 0.52401 0.3861 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52044 0.38539 moveto 0.52401 0.3861 lineto 0.52966 0.40086 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36589 0.72497 moveto 0.40753 0.73916 lineto 0.41501 0.71437 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41501 0.71437 moveto 0.37642 0.70057 lineto 0.36589 0.72497 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51476 0.39932 moveto 0.50745 0.40049 lineto 0.51303 0.38591 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51303 0.38591 moveto 0.51665 0.38532 lineto 0.51476 0.39932 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5528 0.4304 moveto 0.55143 0.43606 lineto 0.56259 0.45788 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55143 0.43606 moveto 0.5528 0.4304 lineto 0.54122 0.41058 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44918 0.50004 moveto 0.45883 0.50979 lineto 0.4689 0.48648 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4689 0.48648 moveto 0.461 0.47815 lineto 0.44918 0.50004 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52966 0.40086 moveto 0.52245 0.39945 lineto 0.52044 0.38539 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51665 0.38532 moveto 0.52044 0.38539 lineto 0.52245 0.39945 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29177 0.61336 moveto 0.31334 0.63415 lineto 0.31472 0.61281 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31472 0.61281 moveto 0.29333 0.59149 lineto 0.29177 0.61336 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35529 0.7495 moveto 0.40003 0.76399 lineto 0.40753 0.73916 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40753 0.73916 moveto 0.36589 0.72497 lineto 0.35529 0.7495 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52245 0.39945 moveto 0.51476 0.39932 lineto 0.51665 0.38532 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53958 0.40676 moveto 0.54122 0.41058 lineto 0.5528 0.4304 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74351 0.53876 moveto 0.72881 0.56218 lineto 0.72993 0.58321 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72881 0.56218 moveto 0.74351 0.53876 lineto 0.74227 0.51746 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5852 0.50206 moveto 0.57487 0.51149 lineto 0.58441 0.53515 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57487 0.51149 moveto 0.5852 0.50206 lineto 0.57385 0.47987 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29087 0.48092 moveto 0.29936 0.50663 lineto 0.30082 0.48605 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30082 0.48605 moveto 0.29243 0.45984 lineto 0.29087 0.48092 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34464 0.77415 moveto 0.39252 0.78886 lineto 0.40003 0.76399 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40003 0.76399 moveto 0.35529 0.7495 lineto 0.34464 0.77415 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48615 0.42371 moveto 0.48334 0.42927 lineto 0.49521 0.40981 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49521 0.40981 moveto 0.49712 0.40605 lineto 0.48615 0.42371 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4713 0.44899 moveto 0.47271 0.45646 lineto 0.48431 0.43498 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48431 0.43498 moveto 0.48334 0.42927 lineto 0.4713 0.44899 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73456 0.66993 moveto 0.70764 0.68795 lineto 0.70863 0.70976 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70764 0.68795 moveto 0.73456 0.66993 lineto 0.73338 0.64785 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73867 0.40704 moveto 0.73748 0.43482 lineto 0.73865 0.45511 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73748 0.43482 moveto 0.73867 0.40704 lineto 0.73746 0.38652 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30321 0.79101 moveto 0.33674 0.80509 lineto 0.338 0.7824 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33394 0.79893 moveto 0.385 0.81378 lineto 0.39252 0.78886 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39252 0.78886 moveto 0.34464 0.77415 lineto 0.33394 0.79893 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30406 0.34894 moveto 0.29849 0.37803 lineto 0.29996 0.3582 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29996 0.3582 moveto 0.30554 0.32866 lineto 0.30406 0.34894 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30619 0.7448 moveto 0.33924 0.75999 lineto 0.34046 0.73785 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34046 0.73785 moveto 0.30766 0.72212 lineto 0.30619 0.7448 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59665 0.52443 moveto 0.58441 0.53515 lineto 0.59399 0.5589 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58441 0.53515 moveto 0.59665 0.52443 lineto 0.5852 0.50206 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43725 0.52213 moveto 0.44871 0.53321 lineto 0.45883 0.50979 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45883 0.50979 moveto 0.44918 0.50004 lineto 0.43725 0.52213 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.31582 0.81074 moveto 0.327 0.82059 lineto 0.33674 0.80509 lineto 0.957 0.718 0.535 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.31699 0.82067 moveto 0.32318 0.82385 lineto 0.32458 0.82061 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32318 0.82385 moveto 0.32882 0.8254 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33547 0.82805 moveto 0.33589 0.82052 lineto gsave
+0.327 0.82059 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33589 0.82052 moveto 0.33674 0.80509 lineto gsave
+0.327 0.82059 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32882 0.8254 moveto 0.33547 0.82805 lineto gsave
+0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33674 0.80509 moveto 0.30321 0.79101 lineto 0.30288 0.79614 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.33674 0.80509 moveto 0.30288 0.79614 lineto 0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.385 0.81378 moveto 0.33394 0.79893 lineto 0.32458 0.82061 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32458 0.82061 moveto 0.32318 0.82385 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.385 0.81378 moveto 0.32458 0.82061 lineto 0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.30288 0.79614 moveto 0.30169 0.81456 lineto gsave
+0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30169 0.81456 moveto 0.32882 0.8254 lineto gsave
+0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.28382 0.79706 moveto 0.28755 0.80072 lineto 0.30321 0.79101 lineto 0.997 0.771 0.46 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.28337 0.80197 moveto 0.28495 0.80421 lineto 0.2867 0.80098 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28495 0.80421 moveto 0.29158 0.80761 lineto gsave
+0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30169 0.81456 moveto 0.30288 0.79614 lineto gsave
+0.28755 0.80072 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30288 0.79614 moveto 0.30321 0.79101 lineto gsave
+0.28755 0.80072 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29158 0.80761 moveto 0.30169 0.81456 lineto gsave
+0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.338 0.7824 moveto 0.30471 0.76776 lineto 0.30321 0.79101 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28032 0.77447 moveto 0.30321 0.79101 lineto 0.30471 0.76776 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30321 0.79101 moveto 0.28032 0.77447 lineto 0.27916 0.79075 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.30321 0.79101 moveto 0.27916 0.79075 lineto 0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.33394 0.79893 moveto 0.29833 0.77943 lineto 0.2867 0.80098 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2867 0.80098 moveto 0.28495 0.80421 lineto gsave
+0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.33394 0.79893 moveto 0.2867 0.80098 lineto 0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.27916 0.79075 moveto 0.2786 0.79869 lineto gsave
+0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2786 0.79869 moveto 0.29158 0.80761 lineto gsave
+0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.26862 0.78114 moveto 0.2786 0.79869 lineto 0.28032 0.77447 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.26862 0.78114 moveto 0.28337 0.80197 lineto gsave
+0.29833 0.77943 lineto 0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2867 0.80098 moveto 0.29833 0.77943 lineto gsave
+0.28337 0.80197 lineto 0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.33394 0.79893 moveto 0.28877 0.8038 lineto 0.31699 0.82067 lineto 0.951 0.867 0.719 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.29158 0.80761 moveto 0.31699 0.82067 lineto gsave
+0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32458 0.82061 moveto 0.33394 0.79893 lineto gsave
+0.31699 0.82067 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37746 0.83873 moveto 0.385 0.81378 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32882 0.8254 moveto 0.37746 0.83873 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56453 0.45047 moveto 0.56259 0.45788 lineto 0.57385 0.47987 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56259 0.45788 moveto 0.56453 0.45047 lineto 0.5528 0.4304 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5528 0.4304 moveto 0.5504 0.42475 lineto 0.53958 0.40676 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53559 0.4034 moveto 0.53958 0.40676 lineto 0.5504 0.42475 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6082 0.54699 moveto 0.59399 0.5589 lineto 0.60361 0.58276 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59399 0.5589 moveto 0.6082 0.54699 lineto 0.59665 0.52443 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42522 0.54442 moveto 0.43854 0.55676 lineto 0.44871 0.53321 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44871 0.53321 moveto 0.43725 0.52213 lineto 0.42522 0.54442 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49251 0.41891 moveto 0.48615 0.42371 lineto 0.49712 0.40605 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49712 0.40605 moveto 0.50135 0.40282 lineto 0.49251 0.41891 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4591 0.46899 moveto 0.461 0.47815 lineto 0.47271 0.45646 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47271 0.45646 moveto 0.4713 0.44899 lineto 0.4591 0.46899 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2902 0.63551 moveto 0.31195 0.65574 lineto 0.31334 0.63415 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31334 0.63415 moveto 0.29177 0.61336 lineto 0.2902 0.63551 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74476 0.56032 moveto 0.72993 0.58321 lineto 0.73107 0.6045 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72993 0.58321 moveto 0.74476 0.56032 lineto 0.74351 0.53876 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5504 0.42475 moveto 0.5528 0.4304 lineto 0.56453 0.45047 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28928 0.50228 moveto 0.29788 0.52746 lineto 0.29936 0.50663 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29936 0.50663 moveto 0.29087 0.48092 lineto 0.28928 0.50228 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61984 0.56974 moveto 0.60361 0.58276 lineto 0.61328 0.60672 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60361 0.58276 moveto 0.61984 0.56974 lineto 0.6082 0.54699 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73576 0.69229 moveto 0.70863 0.70976 lineto 0.70964 0.73184 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70863 0.70976 moveto 0.73576 0.69229 lineto 0.73456 0.66993 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73989 0.42781 moveto 0.73865 0.45511 lineto 0.73985 0.47564 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73865 0.45511 moveto 0.73989 0.42781 lineto 0.73867 0.40704 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41306 0.56693 moveto 0.42832 0.58042 lineto 0.43854 0.55676 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43854 0.55676 moveto 0.42522 0.54442 lineto 0.41306 0.56693 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47498 0.44168 moveto 0.4713 0.44899 lineto 0.48334 0.42927 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48334 0.42927 moveto 0.48615 0.42371 lineto 0.47498 0.44168 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30256 0.36948 moveto 0.297 0.39811 lineto 0.29849 0.37803 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29849 0.37803 moveto 0.30406 0.34894 lineto 0.30256 0.36948 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57642 0.47081 moveto 0.57385 0.47987 lineto 0.5852 0.50206 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57385 0.47987 moveto 0.57642 0.47081 lineto 0.56453 0.45047 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5504 0.42475 moveto 0.54441 0.41976 lineto 0.53559 0.4034 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52966 0.40086 moveto 0.53559 0.4034 lineto 0.54441 0.41976 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30471 0.76776 moveto 0.338 0.7824 lineto 0.33924 0.75999 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33924 0.75999 moveto 0.30619 0.7448 lineto 0.30471 0.76776 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50174 0.41543 moveto 0.49251 0.41891 lineto 0.50135 0.40282 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50135 0.40282 moveto 0.50745 0.40049 lineto 0.50174 0.41543 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63158 0.59269 moveto 0.61328 0.60672 lineto 0.62299 0.63079 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61328 0.60672 moveto 0.63158 0.59269 lineto 0.61984 0.56974 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4008 0.58965 moveto 0.41805 0.6042 lineto 0.42832 0.58042 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42832 0.58042 moveto 0.41306 0.56693 lineto 0.4008 0.58965 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44673 0.48927 moveto 0.44918 0.50004 lineto 0.461 0.47815 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.461 0.47815 moveto 0.4591 0.46899 lineto 0.44673 0.48927 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54441 0.41976 moveto 0.53545 0.41598 lineto 0.52966 0.40086 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52245 0.39945 moveto 0.52966 0.40086 lineto 0.53545 0.41598 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64343 0.61583 moveto 0.62299 0.63079 lineto 0.63273 0.65496 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62299 0.63079 moveto 0.64343 0.61583 lineto 0.63158 0.59269 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51283 0.41368 moveto 0.50174 0.41543 lineto 0.50745 0.40049 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50745 0.40049 moveto 0.51476 0.39932 lineto 0.51283 0.41368 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2886 0.65794 moveto 0.31053 0.67759 lineto 0.31195 0.65574 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31195 0.65574 moveto 0.2902 0.63551 lineto 0.2886 0.65794 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74603 0.58215 moveto 0.73107 0.6045 lineto 0.73222 0.62604 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73107 0.6045 moveto 0.74603 0.58215 lineto 0.74476 0.56032 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58846 0.49141 moveto 0.5852 0.50206 lineto 0.59665 0.52443 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5852 0.50206 moveto 0.58846 0.49141 lineto 0.57642 0.47081 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28768 0.5239 moveto 0.29638 0.54854 lineto 0.29788 0.52746 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29788 0.52746 moveto 0.28928 0.50228 lineto 0.28768 0.5239 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38842 0.61258 moveto 0.40772 0.62811 lineto 0.41805 0.6042 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41805 0.6042 moveto 0.4008 0.58965 lineto 0.38842 0.61258 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53545 0.41598 moveto 0.52451 0.41387 lineto 0.52245 0.39945 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51476 0.39932 moveto 0.52245 0.39945 lineto 0.52451 0.41387 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52451 0.41387 moveto 0.51283 0.41368 lineto 0.51476 0.39932 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56141 0.44306 moveto 0.56453 0.45047 lineto 0.57642 0.47081 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56453 0.45047 moveto 0.56141 0.44306 lineto 0.5504 0.42475 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54441 0.41976 moveto 0.5504 0.42475 lineto 0.56141 0.44306 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73697 0.71492 moveto 0.70964 0.73184 lineto 0.71066 0.75419 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70964 0.73184 moveto 0.73697 0.71492 lineto 0.73576 0.69229 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65537 0.63918 moveto 0.63273 0.65496 lineto 0.64253 0.67924 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63273 0.65496 moveto 0.65537 0.63918 lineto 0.64343 0.61583 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74113 0.44884 moveto 0.73985 0.47564 lineto 0.74105 0.49642 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73985 0.47564 moveto 0.74113 0.44884 lineto 0.73989 0.42781 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30104 0.39028 moveto 0.2955 0.41843 lineto 0.297 0.39811 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.297 0.39811 moveto 0.30256 0.36948 lineto 0.30104 0.39028 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48346 0.43534 moveto 0.47498 0.44168 lineto 0.48615 0.42371 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48615 0.42371 moveto 0.49251 0.41891 lineto 0.48346 0.43534 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46361 0.45998 moveto 0.4591 0.46899 lineto 0.4713 0.44899 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4713 0.44899 moveto 0.47498 0.44168 lineto 0.46361 0.45998 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72217 0.31684 moveto 0.73509 0.34624 lineto 0.73627 0.36625 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43418 0.50983 moveto 0.43725 0.52213 lineto 0.44918 0.50004 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44918 0.50004 moveto 0.44673 0.48927 lineto 0.43418 0.50983 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37591 0.63574 moveto 0.39734 0.65214 lineto 0.40772 0.62811 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40772 0.62811 moveto 0.38842 0.61258 lineto 0.37591 0.63574 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66742 0.66272 moveto 0.64253 0.67924 lineto 0.65236 0.70363 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64253 0.67924 moveto 0.66742 0.66272 lineto 0.65537 0.63918 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60066 0.51227 moveto 0.59665 0.52443 lineto 0.6082 0.54699 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59665 0.52443 moveto 0.60066 0.51227 lineto 0.58846 0.49141 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67957 0.68647 moveto 0.65236 0.70363 lineto 0.66224 0.72812 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65236 0.70363 moveto 0.67957 0.68647 lineto 0.66742 0.66272 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36329 0.65911 moveto 0.38691 0.67629 lineto 0.39734 0.65214 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39734 0.65214 moveto 0.37591 0.63574 lineto 0.36329 0.65911 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28699 0.68066 moveto 0.30911 0.69972 lineto 0.31053 0.67759 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31053 0.67759 moveto 0.2886 0.65794 lineto 0.28699 0.68066 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74731 0.60426 moveto 0.73222 0.62604 lineto 0.73338 0.64785 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73222 0.62604 moveto 0.74731 0.60426 lineto 0.74603 0.58215 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28606 0.5458 moveto 0.29486 0.56988 lineto 0.29638 0.54854 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29638 0.54854 moveto 0.28768 0.5239 lineto 0.28606 0.5458 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56141 0.44306 moveto 0.55342 0.43647 lineto 0.54441 0.41976 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53545 0.41598 moveto 0.54441 0.41976 lineto 0.55342 0.43647 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57261 0.46169 moveto 0.57642 0.47081 lineto 0.58846 0.49141 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57642 0.47081 moveto 0.57261 0.46169 lineto 0.56141 0.44306 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73819 0.73785 moveto 0.71066 0.75419 lineto 0.7117 0.77681 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71066 0.75419 moveto 0.73819 0.73785 lineto 0.73697 0.71492 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74239 0.47014 moveto 0.74105 0.49642 lineto 0.74227 0.51746 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74105 0.49642 moveto 0.74239 0.47014 lineto 0.74113 0.44884 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42146 0.53068 moveto 0.42522 0.54442 lineto 0.43725 0.52213 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43725 0.52213 moveto 0.43418 0.50983 lineto 0.42146 0.53068 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49588 0.43074 moveto 0.48346 0.43534 lineto 0.49251 0.41891 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49251 0.41891 moveto 0.50174 0.41543 lineto 0.49588 0.43074 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69183 0.71043 moveto 0.66224 0.72812 lineto 0.67216 0.75272 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66224 0.72812 moveto 0.69183 0.71043 lineto 0.67957 0.68647 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2995 0.41134 moveto 0.29397 0.43901 lineto 0.2955 0.41843 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2955 0.41843 moveto 0.30104 0.39028 lineto 0.2995 0.41134 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35055 0.68271 moveto 0.37642 0.70057 lineto 0.38691 0.67629 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38691 0.67629 moveto 0.36329 0.65911 lineto 0.35055 0.68271 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61302 0.53342 moveto 0.6082 0.54699 lineto 0.61984 0.56974 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6082 0.54699 moveto 0.61302 0.53342 lineto 0.60066 0.51227 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72331 0.3373 moveto 0.73627 0.36625 lineto 0.73746 0.38652 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73627 0.36625 moveto 0.72331 0.3373 lineto 0.72217 0.31684 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.51848 0.37168 moveto
+0.72217 0.31684 lineto
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.72217 0.31684 moveto
+0.7363 0.31304 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45202 0.47863 moveto 0.44673 0.48927 lineto 0.4591 0.46899 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4591 0.46899 moveto 0.46361 0.45998 lineto 0.45202 0.47863 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55342 0.43647 moveto 0.56141 0.44306 lineto 0.57261 0.46169 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7042 0.73459 moveto 0.67216 0.75272 lineto 0.68212 0.77742 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67216 0.75272 moveto 0.7042 0.73459 lineto 0.69183 0.71043 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33769 0.70654 moveto 0.36589 0.72497 lineto 0.37642 0.70057 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37642 0.70057 moveto 0.35055 0.68271 lineto 0.33769 0.70654 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55342 0.43647 moveto 0.54139 0.43147 lineto 0.53545 0.41598 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52451 0.41387 moveto 0.53545 0.41598 lineto 0.54139 0.43147 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47422 0.45215 moveto 0.46361 0.45998 lineto 0.47498 0.44168 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47498 0.44168 moveto 0.48346 0.43534 lineto 0.47422 0.45215 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51084 0.42841 moveto 0.49588 0.43074 lineto 0.50174 0.41543 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50174 0.41543 moveto 0.51283 0.41368 lineto 0.51084 0.42841 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40855 0.55183 moveto 0.41306 0.56693 lineto 0.42522 0.54442 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42522 0.54442 moveto 0.42146 0.53068 lineto 0.40855 0.55183 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71667 0.75897 moveto 0.68212 0.77742 lineto 0.69213 0.80224 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.68212 0.77742 moveto 0.71667 0.75897 lineto 0.7042 0.73459 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28535 0.70366 moveto 0.30766 0.72212 lineto 0.30911 0.69972 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30911 0.69972 moveto 0.28699 0.68066 lineto 0.28535 0.70366 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74861 0.62666 moveto 0.73338 0.64785 lineto 0.73456 0.66993 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73338 0.64785 moveto 0.74861 0.62666 lineto 0.74731 0.60426 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28442 0.56798 moveto 0.29333 0.59149 lineto 0.29486 0.56988 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29486 0.56988 moveto 0.28606 0.5458 lineto 0.28442 0.56798 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62554 0.55484 moveto 0.61984 0.56974 lineto 0.63158 0.59269 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61984 0.56974 moveto 0.62554 0.55484 lineto 0.61302 0.53342 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32469 0.7306 moveto 0.35529 0.7495 lineto 0.36589 0.72497 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36589 0.72497 moveto 0.33769 0.70654 lineto 0.32469 0.7306 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54139 0.43147 moveto 0.52663 0.42867 lineto 0.52451 0.41387 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51283 0.41368 moveto 0.52451 0.41387 lineto 0.52663 0.42867 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7117 0.77681 moveto 0.73943 0.76106 lineto 0.73819 0.73785 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74366 0.49171 moveto 0.74227 0.51746 lineto 0.74351 0.53876 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74227 0.51746 moveto 0.74366 0.49171 lineto 0.74239 0.47014 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52663 0.42867 moveto 0.51084 0.42841 lineto 0.51283 0.41368 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.584 0.48064 moveto 0.58846 0.49141 lineto 0.60066 0.51227 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58846 0.49141 moveto 0.584 0.48064 lineto 0.57261 0.46169 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29794 0.43267 moveto 0.29243 0.45984 lineto 0.29397 0.43901 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29397 0.43901 moveto 0.2995 0.41134 lineto 0.29794 0.43267 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69213 0.80224 moveto 0.72926 0.78356 lineto 0.71667 0.75897 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72445 0.35802 moveto 0.73746 0.38652 lineto 0.73867 0.40704 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73746 0.38652 moveto 0.72445 0.35802 lineto 0.72331 0.3373 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31158 0.7549 moveto 0.34464 0.77415 lineto 0.35529 0.7495 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35529 0.7495 moveto 0.32469 0.7306 lineto 0.31158 0.7549 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44022 0.49762 moveto 0.43418 0.50983 lineto 0.44673 0.48927 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44673 0.48927 moveto 0.45202 0.47863 lineto 0.44022 0.49762 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39546 0.57328 moveto 0.4008 0.58965 lineto 0.41306 0.56693 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41306 0.56693 moveto 0.40855 0.55183 lineto 0.39546 0.57328 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63823 0.57656 moveto 0.63158 0.59269 lineto 0.64343 0.61583 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63158 0.59269 moveto 0.63823 0.57656 lineto 0.62554 0.55484 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57261 0.46169 moveto 0.56263 0.45355 lineto 0.55342 0.43647 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54139 0.43147 moveto 0.55342 0.43647 lineto 0.56263 0.45355 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56263 0.45355 moveto 0.57261 0.46169 lineto 0.584 0.48064 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2837 0.72696 moveto 0.30619 0.7448 lineto 0.30766 0.72212 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30766 0.72212 moveto 0.28535 0.70366 lineto 0.2837 0.72696 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74993 0.64933 moveto 0.73456 0.66993 lineto 0.73576 0.69229 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73456 0.66993 moveto 0.74993 0.64933 lineto 0.74861 0.62666 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29833 0.77943 moveto 0.33394 0.79893 lineto 0.34464 0.77415 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28202 0.75056 moveto 0.30471 0.76776 lineto 0.30619 0.7448 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30471 0.76776 moveto 0.28202 0.75056 lineto 0.28032 0.77447 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34464 0.77415 moveto 0.31158 0.7549 lineto 0.29833 0.77943 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48987 0.44643 moveto 0.47422 0.45215 lineto 0.48346 0.43534 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48346 0.43534 moveto 0.49588 0.43074 lineto 0.48987 0.44643 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28275 0.59044 moveto 0.29177 0.61336 lineto 0.29333 0.59149 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29333 0.59149 moveto 0.28442 0.56798 lineto 0.28275 0.59044 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74494 0.51356 moveto 0.74351 0.53876 lineto 0.74476 0.56032 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74351 0.53876 moveto 0.74494 0.51356 lineto 0.74366 0.49171 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59561 0.49994 moveto 0.60066 0.51227 lineto 0.61302 0.53342 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60066 0.51227 moveto 0.59561 0.49994 lineto 0.584 0.48064 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46477 0.46933 moveto 0.45202 0.47863 lineto 0.46361 0.45998 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46361 0.45998 moveto 0.47422 0.45215 lineto 0.46477 0.46933 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29636 0.45428 moveto 0.29087 0.48092 lineto 0.29243 0.45984 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29243 0.45984 moveto 0.29794 0.43267 lineto 0.29636 0.45428 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32411 0.32082 moveto 0.30406 0.34894 lineto 0.30554 0.32866 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30554 0.32866 moveto 0.32551 0.30012 lineto 0.32411 0.32082 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72562 0.37901 moveto 0.73867 0.40704 lineto 0.73989 0.42781 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73867 0.40704 moveto 0.72562 0.37901 lineto 0.72445 0.35802 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65109 0.59856 moveto 0.64343 0.61583 lineto 0.65537 0.63918 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64343 0.61583 moveto 0.65109 0.59856 lineto 0.63823 0.57656 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38218 0.59504 moveto 0.38842 0.61258 lineto 0.4008 0.58965 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4008 0.58965 moveto 0.39546 0.57328 lineto 0.38218 0.59504 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56263 0.45355 moveto 0.54747 0.44735 lineto 0.54139 0.43147 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52663 0.42867 moveto 0.54139 0.43147 lineto 0.54747 0.44735 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4282 0.51697 moveto 0.42146 0.53068 lineto 0.43418 0.50983 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43418 0.50983 moveto 0.44022 0.49762 lineto 0.4282 0.51697 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50881 0.44354 moveto 0.48987 0.44643 lineto 0.49588 0.43074 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49588 0.43074 moveto 0.51084 0.42841 lineto 0.50881 0.44354 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30619 0.7448 moveto 0.2837 0.72696 lineto 0.28202 0.75056 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75126 0.6723 moveto 0.73576 0.69229 lineto 0.73697 0.71492 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73576 0.69229 moveto 0.75126 0.6723 lineto 0.74993 0.64933 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28106 0.6132 moveto 0.2902 0.63551 lineto 0.29177 0.61336 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29177 0.61336 moveto 0.28275 0.59044 lineto 0.28106 0.6132 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66412 0.62086 moveto 0.65537 0.63918 lineto 0.66742 0.66272 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65537 0.63918 moveto 0.66412 0.62086 lineto 0.65109 0.59856 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74624 0.53569 moveto 0.74476 0.56032 lineto 0.74603 0.58215 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74476 0.56032 moveto 0.74624 0.53569 lineto 0.74494 0.51356 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36871 0.61712 moveto 0.37591 0.63574 lineto 0.38842 0.61258 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38842 0.61258 moveto 0.38218 0.59504 lineto 0.36871 0.61712 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54747 0.44735 moveto 0.5288 0.44386 lineto 0.52663 0.42867 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51084 0.42841 moveto 0.52663 0.42867 lineto 0.5288 0.44386 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5288 0.44386 moveto 0.50881 0.44354 lineto 0.51084 0.42841 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29476 0.47617 moveto 0.28928 0.50228 lineto 0.29087 0.48092 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29087 0.48092 moveto 0.29636 0.45428 lineto 0.29476 0.47617 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60742 0.51958 moveto 0.61302 0.53342 lineto 0.62554 0.55484 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61302 0.53342 moveto 0.60742 0.51958 lineto 0.59561 0.49994 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57204 0.47099 moveto 0.584 0.48064 lineto 0.59561 0.49994 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.584 0.48064 moveto 0.57204 0.47099 lineto 0.56263 0.45355 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3227 0.3418 moveto 0.30256 0.36948 lineto 0.30406 0.34894 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30406 0.34894 moveto 0.32411 0.32082 lineto 0.3227 0.3418 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7268 0.40026 moveto 0.73989 0.42781 lineto 0.74113 0.44884 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73989 0.42781 moveto 0.7268 0.40026 lineto 0.72562 0.37901 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54747 0.44735 moveto 0.56263 0.45355 lineto 0.57204 0.47099 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4551 0.48691 moveto 0.44022 0.49762 lineto 0.45202 0.47863 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45202 0.47863 moveto 0.46477 0.46933 lineto 0.4551 0.48691 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48371 0.46253 moveto 0.46477 0.46933 lineto 0.47422 0.45215 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47422 0.45215 moveto 0.48987 0.44643 lineto 0.48371 0.46253 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67733 0.64346 moveto 0.66742 0.66272 lineto 0.67957 0.68647 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66742 0.66272 moveto 0.67733 0.64346 lineto 0.66412 0.62086 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41594 0.53669 moveto 0.40855 0.55183 lineto 0.42146 0.53068 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42146 0.53068 moveto 0.4282 0.51697 lineto 0.41594 0.53669 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75261 0.69557 moveto 0.73697 0.71492 lineto 0.73819 0.73785 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73697 0.71492 moveto 0.75261 0.69557 lineto 0.75126 0.6723 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35504 0.63952 moveto 0.36329 0.65911 lineto 0.37591 0.63574 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37591 0.63574 moveto 0.36871 0.61712 lineto 0.35504 0.63952 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27936 0.63625 moveto 0.2886 0.65794 lineto 0.2902 0.63551 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2902 0.63551 moveto 0.28106 0.6132 lineto 0.27936 0.63625 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74756 0.55811 moveto 0.74603 0.58215 lineto 0.74731 0.60426 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74603 0.58215 moveto 0.74756 0.55811 lineto 0.74624 0.53569 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29314 0.49834 moveto 0.28768 0.5239 lineto 0.28928 0.50228 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28928 0.50228 moveto 0.29476 0.47617 lineto 0.29314 0.49834 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61944 0.53958 moveto 0.62554 0.55484 lineto 0.63823 0.57656 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62554 0.55484 moveto 0.61944 0.53958 lineto 0.60742 0.51958 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32126 0.36304 moveto 0.30104 0.39028 lineto 0.30256 0.36948 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30256 0.36948 moveto 0.3227 0.3418 lineto 0.32126 0.36304 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72799 0.4218 moveto 0.74113 0.44884 lineto 0.74239 0.47014 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74113 0.44884 moveto 0.72799 0.4218 lineto 0.7268 0.40026 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69073 0.66638 moveto 0.67957 0.68647 lineto 0.69183 0.71043 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67957 0.68647 moveto 0.69073 0.66638 lineto 0.67733 0.64346 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57204 0.47099 moveto 0.5537 0.46362 lineto 0.54747 0.44735 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5288 0.44386 moveto 0.54747 0.44735 lineto 0.5537 0.46362 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34117 0.66226 moveto 0.35055 0.68271 lineto 0.36329 0.65911 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36329 0.65911 moveto 0.35504 0.63952 lineto 0.34117 0.66226 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58166 0.48883 moveto 0.59561 0.49994 lineto 0.60742 0.51958 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59561 0.49994 moveto 0.58166 0.48883 lineto 0.57204 0.47099 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50671 0.45908 moveto 0.48371 0.46253 lineto 0.48987 0.44643 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48987 0.44643 moveto 0.50881 0.44354 lineto 0.50671 0.45908 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75398 0.71914 moveto 0.73819 0.73785 lineto 0.73943 0.76106 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73819 0.73785 moveto 0.75398 0.71914 lineto 0.75261 0.69557 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40345 0.5568 moveto 0.39546 0.57328 lineto 0.40855 0.55183 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40855 0.55183 moveto 0.41594 0.53669 lineto 0.40345 0.5568 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27763 0.65961 moveto 0.28699 0.68066 lineto 0.2886 0.65794 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2886 0.65794 moveto 0.27936 0.63625 lineto 0.27763 0.65961 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7489 0.58082 moveto 0.74731 0.60426 lineto 0.74861 0.62666 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74731 0.60426 moveto 0.7489 0.58082 lineto 0.74756 0.55811 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70431 0.68961 moveto 0.69183 0.71043 lineto 0.7042 0.73459 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69183 0.71043 moveto 0.70431 0.68961 lineto 0.69073 0.66638 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44521 0.50489 moveto 0.4282 0.51697 lineto 0.44022 0.49762 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44022 0.49762 moveto 0.4551 0.48691 lineto 0.44521 0.50489 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5537 0.46362 moveto 0.57204 0.47099 lineto 0.58166 0.48883 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2915 0.52081 moveto 0.28606 0.5458 lineto 0.28768 0.5239 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28768 0.5239 moveto 0.29314 0.49834 lineto 0.2915 0.52081 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5537 0.46362 moveto 0.53103 0.45946 lineto 0.5288 0.44386 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50881 0.44354 moveto 0.5288 0.44386 lineto 0.53103 0.45946 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53103 0.45946 moveto 0.50671 0.45908 lineto 0.50881 0.44354 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31981 0.38457 moveto 0.2995 0.41134 lineto 0.30104 0.39028 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30104 0.39028 moveto 0.32126 0.36304 lineto 0.31981 0.38457 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7292 0.44361 moveto 0.74239 0.47014 lineto 0.74366 0.49171 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74239 0.47014 moveto 0.7292 0.44361 lineto 0.72799 0.4218 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63169 0.55994 moveto 0.63823 0.57656 lineto 0.65109 0.59856 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63823 0.57656 moveto 0.63169 0.55994 lineto 0.61944 0.53958 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32709 0.68533 moveto 0.33769 0.70654 lineto 0.35055 0.68271 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35055 0.68271 moveto 0.34117 0.66226 lineto 0.32709 0.68533 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47739 0.47904 moveto 0.4551 0.48691 lineto 0.46477 0.46933 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46477 0.46933 moveto 0.48371 0.46253 lineto 0.47739 0.47904 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71807 0.71317 moveto 0.7042 0.73459 lineto 0.71667 0.75897 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7042 0.73459 moveto 0.71807 0.71317 lineto 0.70431 0.68961 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75536 0.74302 moveto 0.73943 0.76106 lineto 0.74069 0.78457 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73943 0.76106 moveto 0.75536 0.74302 lineto 0.75398 0.71914 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27587 0.68327 moveto 0.28535 0.70366 lineto 0.28699 0.68066 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28699 0.68066 moveto 0.27763 0.65961 lineto 0.27587 0.68327 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39072 0.57729 moveto 0.38218 0.59504 lineto 0.39546 0.57328 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39546 0.57328 moveto 0.40345 0.5568 lineto 0.39072 0.57729 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75026 0.60382 moveto 0.74861 0.62666 lineto 0.74993 0.64933 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74861 0.62666 moveto 0.75026 0.60382 lineto 0.7489 0.58082 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59149 0.50706 moveto 0.60742 0.51958 lineto 0.61944 0.53958 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60742 0.51958 moveto 0.59149 0.50706 lineto 0.58166 0.48883 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3128 0.70874 moveto 0.32469 0.7306 lineto 0.33769 0.70654 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33769 0.70654 moveto 0.32709 0.68533 lineto 0.3128 0.70874 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28984 0.54357 moveto 0.28442 0.56798 lineto 0.28606 0.5458 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28606 0.5458 moveto 0.2915 0.52081 lineto 0.28984 0.54357 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31834 0.40638 moveto 0.29794 0.43267 lineto 0.2995 0.41134 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2995 0.41134 moveto 0.31981 0.38457 lineto 0.31834 0.40638 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73042 0.46571 moveto 0.74366 0.49171 lineto 0.74494 0.51356 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74366 0.49171 moveto 0.73042 0.46571 lineto 0.7292 0.44361 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64416 0.58069 moveto 0.65109 0.59856 lineto 0.66412 0.62086 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65109 0.59856 moveto 0.64416 0.58069 lineto 0.63169 0.55994 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73203 0.73705 moveto 0.71667 0.75897 lineto 0.72926 0.78356 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71667 0.75897 moveto 0.73203 0.73705 lineto 0.71807 0.71317 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58166 0.48883 moveto 0.56009 0.4803 lineto 0.5537 0.46362 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53103 0.45946 moveto 0.5537 0.46362 lineto 0.56009 0.4803 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43509 0.5233 moveto 0.41594 0.53669 lineto 0.4282 0.51697 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4282 0.51697 moveto 0.44521 0.50489 lineto 0.43509 0.5233 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50456 0.47505 moveto 0.47739 0.47904 lineto 0.48371 0.46253 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48371 0.46253 moveto 0.50671 0.45908 lineto 0.50456 0.47505 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56009 0.4803 moveto 0.58166 0.48883 lineto 0.59149 0.50706 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75677 0.76722 moveto 0.74069 0.78457 lineto 0.74196 0.80838 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74069 0.78457 moveto 0.75677 0.76722 lineto 0.75536 0.74302 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29829 0.73251 moveto 0.31158 0.7549 lineto 0.32469 0.7306 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32469 0.7306 moveto 0.3128 0.70874 lineto 0.29829 0.73251 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27409 0.70725 moveto 0.2837 0.72696 lineto 0.28535 0.70366 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28535 0.70366 moveto 0.27587 0.68327 lineto 0.27409 0.70725 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35845 0.29589 moveto 0.32411 0.32082 lineto 0.32551 0.30012 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.33882 0.18488 moveto
+0.398 0.24641 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32551 0.30012 moveto 0.35965 0.27482 lineto 0.35845 0.29589 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75163 0.62713 moveto 0.74993 0.64933 lineto 0.75126 0.6723 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74993 0.64933 moveto 0.75163 0.62713 lineto 0.75026 0.60382 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37773 0.59818 moveto 0.36871 0.61712 lineto 0.38218 0.59504 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38218 0.59504 moveto 0.39072 0.57729 lineto 0.37773 0.59818 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74619 0.76128 moveto 0.72926 0.78356 lineto 0.74196 0.80838 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72926 0.78356 moveto 0.74619 0.76128 lineto 0.73203 0.73705 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28815 0.56664 moveto 0.28275 0.59044 lineto 0.28442 0.56798 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28442 0.56798 moveto 0.28984 0.54357 lineto 0.28815 0.56664 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4709 0.49598 moveto 0.44521 0.50489 lineto 0.4551 0.48691 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4551 0.48691 moveto 0.47739 0.47904 lineto 0.4709 0.49598 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31684 0.42848 moveto 0.29636 0.45428 lineto 0.29794 0.43267 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29794 0.43267 moveto 0.31834 0.40638 lineto 0.31684 0.42848 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73166 0.4881 moveto 0.74494 0.51356 lineto 0.74624 0.53569 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74494 0.51356 moveto 0.73166 0.4881 lineto 0.73042 0.46571 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56009 0.4803 moveto 0.53332 0.47549 lineto 0.53103 0.45946 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50671 0.45908 moveto 0.53103 0.45946 lineto 0.53332 0.47549 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53332 0.47549 moveto 0.50456 0.47505 lineto 0.50671 0.45908 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65686 0.60182 moveto 0.66412 0.62086 lineto 0.67733 0.64346 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66412 0.62086 moveto 0.65686 0.60182 lineto 0.64416 0.58069 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60154 0.5257 moveto 0.61944 0.53958 lineto 0.63169 0.55994 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61944 0.53958 moveto 0.60154 0.5257 lineto 0.59149 0.50706 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28357 0.75664 moveto 0.29833 0.77943 lineto 0.31158 0.7549 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31158 0.7549 moveto 0.29829 0.73251 lineto 0.28357 0.75664 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74196 0.80838 moveto 0.75819 0.79173 lineto 0.75677 0.76722 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75877 0.74848 moveto 0.75677 0.76722 lineto 0.75772 0.78369 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75772 0.78369 moveto 0.75819 0.79173 lineto gsave
+0.75831 0.78304 lineto 0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75877 0.74848 moveto 0.75772 0.78369 lineto 0.75831 0.78304 lineto 0 0 0.11 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.75868 0.78263 moveto 0.76055 0.78584 lineto gsave
+0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75877 0.74848 moveto 0.75831 0.78304 lineto 0.75862 0.7827 lineto 0 0 0.11 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.76055 0.78584 moveto 0.75932 0.78193 lineto gsave
+0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75859 0.78822 moveto 0.76055 0.78584 lineto 0.75868 0.78263 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75859 0.78822 moveto 0.76026 0.77375 lineto 0.7591 0.75399 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7591 0.75399 moveto 0.75877 0.74848 lineto gsave
+0.75859 0.78822 lineto 0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7573 0.72355 moveto 0.75536 0.74302 lineto 0.75677 0.76722 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75677 0.76722 moveto 0.75877 0.74848 lineto 0.7573 0.72355 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.76026 0.77375 moveto 0.75424 0.76577 lineto gsave
+0.74504 0.72946 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75895 0.78234 moveto 0.75393 0.76507 lineto 0.73837 0.73736 lineto 0 0 0.449 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.751 0.75837 moveto 0.73837 0.73736 lineto gsave
+0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74601 0.74694 moveto 0.74504 0.72946 lineto gsave
+0.7522 0.75772 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75424 0.76577 moveto 0.751 0.75837 lineto 0.7522 0.75772 lineto 0.935 0.689 0.211 setrgbcolor
+fill
+grestore
+gsave
+0.74601 0.74694 moveto 0.7522 0.75772 lineto 0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.73837 0.73736 moveto 0.74619 0.76128 lineto 0.75868 0.78263 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.73837 0.73736 moveto 0.75868 0.78263 lineto 0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.71015 0.69043 moveto 0.71807 0.71317 lineto 0.73203 0.73705 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72412 0.71366 moveto 0.73203 0.73705 lineto 0.74619 0.76128 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73203 0.73705 moveto 0.72412 0.71366 lineto 0.71015 0.69043 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74619 0.76128 moveto 0.73837 0.73736 lineto 0.72412 0.71366 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70341 0.7146 moveto 0.73837 0.73736 lineto 0.751 0.75837 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.70341 0.7146 moveto 0.751 0.75837 lineto 0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.75932 0.78193 moveto 0.75424 0.76577 lineto gsave
+0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75424 0.76577 moveto 0.7529 0.76153 lineto gsave
+0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75895 0.78234 moveto 0.75424 0.76577 lineto 0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.71617 0.73826 moveto 0.70341 0.7146 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75424 0.76577 moveto 0.74933 0.75927 lineto gsave
+0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7529 0.76153 moveto 0.751 0.75837 lineto gsave
+0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7529 0.76153 moveto 0.74933 0.75927 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74933 0.75927 moveto 0.71617 0.73826 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74648 0.75549 moveto 0.74601 0.74694 lineto gsave
+0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74933 0.75927 moveto 0.74648 0.75549 lineto gsave
+0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.751 0.75837 moveto 0.7529 0.76153 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75819 0.79173 moveto 0.75859 0.78822 lineto gsave
+0.75862 0.7827 lineto 0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75819 0.79173 moveto 0.75862 0.7827 lineto 0.75831 0.78304 lineto 0 0 0.11 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.74196 0.80838 moveto 0.75859 0.78822 lineto gsave
+0.74619 0.76128 lineto 0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75868 0.78263 moveto 0.74619 0.76128 lineto gsave
+0.75859 0.78822 lineto 0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27229 0.73155 moveto 0.28202 0.75056 lineto 0.2837 0.72696 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2837 0.72696 moveto 0.27409 0.70725 lineto 0.27229 0.73155 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35722 0.31724 moveto 0.3227 0.3418 lineto 0.32411 0.32082 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32411 0.32082 moveto 0.35845 0.29589 lineto 0.35722 0.31724 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75302 0.65076 moveto 0.75126 0.6723 lineto 0.75261 0.69557 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75126 0.6723 moveto 0.75302 0.65076 lineto 0.75163 0.62713 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42473 0.54213 moveto 0.40345 0.5568 lineto 0.41594 0.53669 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41594 0.53669 moveto 0.43509 0.5233 lineto 0.42473 0.54213 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28644 0.59001 moveto 0.28106 0.6132 lineto 0.28275 0.59044 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28275 0.59044 moveto 0.28815 0.56664 lineto 0.28644 0.59001 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36449 0.61949 moveto 0.35504 0.63952 lineto 0.36871 0.61712 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36871 0.61712 moveto 0.37773 0.59818 lineto 0.36449 0.61949 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31533 0.45087 moveto 0.29476 0.47617 lineto 0.29636 0.45428 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29636 0.45428 moveto 0.31684 0.42848 lineto 0.31533 0.45087 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73292 0.51079 moveto 0.74624 0.53569 lineto 0.74756 0.55811 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74624 0.53569 moveto 0.73292 0.51079 lineto 0.73166 0.4881 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27047 0.75618 moveto 0.28032 0.77447 lineto 0.28202 0.75056 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28032 0.77447 moveto 0.27047 0.75618 lineto 0.26862 0.78114 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29833 0.77943 moveto 0.28357 0.75664 lineto 0.26862 0.78114 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66981 0.62334 moveto 0.67733 0.64346 lineto 0.69073 0.66638 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67733 0.64346 moveto 0.66981 0.62334 lineto 0.65686 0.60182 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59149 0.50706 moveto 0.56665 0.49741 lineto 0.56009 0.4803 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53332 0.47549 moveto 0.56009 0.4803 lineto 0.56665 0.49741 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56665 0.49741 moveto 0.59149 0.50706 lineto 0.60154 0.5257 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50235 0.49145 moveto 0.4709 0.49598 lineto 0.47739 0.47904 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47739 0.47904 moveto 0.50456 0.47505 lineto 0.50235 0.49145 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61182 0.54477 moveto 0.63169 0.55994 lineto 0.64416 0.58069 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63169 0.55994 moveto 0.61182 0.54477 lineto 0.60154 0.5257 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28202 0.75056 moveto 0.27229 0.73155 lineto 0.27047 0.75618 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35598 0.33888 moveto 0.32126 0.36304 lineto 0.3227 0.3418 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3227 0.3418 moveto 0.35722 0.31724 lineto 0.35598 0.33888 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46424 0.51337 moveto 0.43509 0.5233 lineto 0.44521 0.50489 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44521 0.50489 moveto 0.4709 0.49598 lineto 0.46424 0.51337 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75443 0.6747 moveto 0.75261 0.69557 lineto 0.75398 0.71914 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75261 0.69557 moveto 0.75443 0.6747 lineto 0.75302 0.65076 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28471 0.6137 moveto 0.27936 0.63625 lineto 0.28106 0.6132 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28106 0.6132 moveto 0.28644 0.59001 lineto 0.28471 0.6137 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3138 0.47357 moveto 0.29314 0.49834 lineto 0.29476 0.47617 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29476 0.47617 moveto 0.31533 0.45087 lineto 0.3138 0.47357 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73419 0.53378 moveto 0.74756 0.55811 lineto 0.7489 0.58082 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74756 0.55811 moveto 0.73419 0.53378 lineto 0.73292 0.51079 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35098 0.64123 moveto 0.34117 0.66226 lineto 0.35504 0.63952 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35504 0.63952 moveto 0.36449 0.61949 lineto 0.35098 0.64123 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56665 0.49741 moveto 0.53567 0.49195 lineto 0.53332 0.47549 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50456 0.47505 moveto 0.53332 0.47549 lineto 0.53567 0.49195 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53567 0.49195 moveto 0.50235 0.49145 lineto 0.50456 0.47505 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.683 0.64528 moveto 0.69073 0.66638 lineto 0.70431 0.68961 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69073 0.66638 moveto 0.683 0.64528 lineto 0.66981 0.62334 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41412 0.56142 moveto 0.39072 0.57729 lineto 0.40345 0.5568 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40345 0.5568 moveto 0.42473 0.54213 lineto 0.41412 0.56142 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35472 0.3608 moveto 0.31981 0.38457 lineto 0.32126 0.36304 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32126 0.36304 moveto 0.35598 0.33888 lineto 0.35472 0.3608 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75586 0.69896 moveto 0.75398 0.71914 lineto 0.75536 0.74302 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75398 0.71914 moveto 0.75586 0.69896 lineto 0.75443 0.6747 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28296 0.63772 moveto 0.27763 0.65961 lineto 0.27936 0.63625 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27936 0.63625 moveto 0.28471 0.6137 lineto 0.28296 0.63772 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31225 0.49658 moveto 0.2915 0.52081 lineto 0.29314 0.49834 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29314 0.49834 moveto 0.3138 0.47357 lineto 0.31225 0.49658 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73549 0.55709 moveto 0.7489 0.58082 lineto 0.75026 0.60382 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7489 0.58082 moveto 0.73549 0.55709 lineto 0.73419 0.53378 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57338 0.51497 moveto 0.60154 0.5257 lineto 0.61182 0.54477 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60154 0.5257 moveto 0.57338 0.51497 lineto 0.56665 0.49741 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62235 0.56428 moveto 0.64416 0.58069 lineto 0.65686 0.60182 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64416 0.58069 moveto 0.62235 0.56428 lineto 0.61182 0.54477 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53567 0.49195 moveto 0.56665 0.49741 lineto 0.57338 0.51497 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3372 0.66341 moveto 0.32709 0.68533 lineto 0.34117 0.66226 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34117 0.66226 moveto 0.35098 0.64123 lineto 0.3372 0.66341 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69644 0.66764 moveto 0.70431 0.68961 lineto 0.71807 0.71317 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70431 0.68961 moveto 0.69644 0.66764 lineto 0.683 0.64528 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50008 0.50832 moveto 0.46424 0.51337 lineto 0.4709 0.49598 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4709 0.49598 moveto 0.50235 0.49145 lineto 0.50008 0.50832 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45741 0.53124 moveto 0.42473 0.54213 lineto 0.43509 0.5233 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43509 0.5233 moveto 0.46424 0.51337 lineto 0.45741 0.53124 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40539 0.2764 moveto 0.35845 0.29589 lineto 0.35965 0.27482 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35965 0.27482 moveto 0.40631 0.25505 lineto 0.40539 0.2764 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.40631 0.25505 moveto
+0.51848 0.37168 lineto
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.398 0.24641 moveto
+0.40631 0.25505 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35345 0.38303 moveto 0.31834 0.40638 lineto 0.31981 0.38457 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31981 0.38457 moveto 0.35472 0.3608 lineto 0.35345 0.38303 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40325 0.58118 moveto 0.37773 0.59818 lineto 0.39072 0.57729 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39072 0.57729 moveto 0.41412 0.56142 lineto 0.40325 0.58118 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75536 0.74302 moveto 0.7573 0.72355 lineto 0.75586 0.69896 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28118 0.66206 moveto 0.27587 0.68327 lineto 0.27763 0.65961 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27763 0.65961 moveto 0.28296 0.63772 lineto 0.28118 0.66206 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31067 0.51989 moveto 0.28984 0.54357 lineto 0.2915 0.52081 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2915 0.52081 moveto 0.31225 0.49658 lineto 0.31067 0.51989 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73679 0.58071 moveto 0.75026 0.60382 lineto 0.75163 0.62713 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75026 0.60382 moveto 0.73679 0.58071 lineto 0.73549 0.55709 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57338 0.51497 moveto 0.53809 0.50888 lineto 0.53567 0.49195 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50235 0.49145 moveto 0.53567 0.49195 lineto 0.53809 0.50888 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53809 0.50888 moveto 0.50008 0.50832 lineto 0.50235 0.49145 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71807 0.71317 moveto 0.71015 0.69043 lineto 0.69644 0.66764 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32314 0.68603 moveto 0.3128 0.70874 lineto 0.32709 0.68533 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32709 0.68533 moveto 0.3372 0.66341 lineto 0.32314 0.68603 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63311 0.58425 moveto 0.65686 0.60182 lineto 0.66981 0.62334 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65686 0.60182 moveto 0.63311 0.58425 lineto 0.62235 0.56428 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40446 0.29804 moveto 0.35722 0.31724 lineto 0.35845 0.29589 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35845 0.29589 moveto 0.40539 0.2764 lineto 0.40446 0.29804 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35216 0.40556 moveto 0.31684 0.42848 lineto 0.31834 0.40638 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31834 0.40638 moveto 0.35345 0.38303 lineto 0.35216 0.40556 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58028 0.53299 moveto 0.61182 0.54477 lineto 0.62235 0.56428 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61182 0.54477 moveto 0.58028 0.53299 lineto 0.57338 0.51497 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27938 0.68673 moveto 0.27409 0.70725 lineto 0.27587 0.68327 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27587 0.68327 moveto 0.28118 0.66206 lineto 0.27938 0.68673 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30908 0.54353 moveto 0.28815 0.56664 lineto 0.28984 0.54357 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28984 0.54357 moveto 0.31067 0.51989 lineto 0.30908 0.54353 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73812 0.60465 moveto 0.75163 0.62713 lineto 0.75302 0.65076 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75163 0.62713 moveto 0.73812 0.60465 lineto 0.73679 0.58071 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53809 0.50888 moveto 0.57338 0.51497 lineto 0.58028 0.53299 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39212 0.60142 moveto 0.36449 0.61949 lineto 0.37773 0.59818 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37773 0.59818 moveto 0.40325 0.58118 lineto 0.39212 0.60142 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45038 0.54959 moveto 0.41412 0.56142 lineto 0.42473 0.54213 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42473 0.54213 moveto 0.45741 0.53124 lineto 0.45038 0.54959 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49774 0.52567 moveto 0.45741 0.53124 lineto 0.46424 0.51337 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46424 0.51337 moveto 0.50008 0.50832 lineto 0.49774 0.52567 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30879 0.70913 moveto 0.29829 0.73251 lineto 0.3128 0.70874 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3128 0.70874 moveto 0.32314 0.68603 lineto 0.30879 0.70913 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40351 0.31998 moveto 0.35598 0.33888 lineto 0.35722 0.31724 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35722 0.31724 moveto 0.40446 0.29804 lineto 0.40351 0.31998 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35085 0.42839 moveto 0.31533 0.45087 lineto 0.31684 0.42848 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31684 0.42848 moveto 0.35216 0.40556 lineto 0.35085 0.42839 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64413 0.60469 moveto 0.66981 0.62334 lineto 0.683 0.64528 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66981 0.62334 moveto 0.64413 0.60469 lineto 0.63311 0.58425 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27755 0.71175 moveto 0.27229 0.73155 lineto 0.27409 0.70725 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27409 0.70725 moveto 0.27938 0.68673 lineto 0.27755 0.71175 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30746 0.5675 moveto 0.28644 0.59001 lineto 0.28815 0.56664 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28815 0.56664 moveto 0.30908 0.54353 lineto 0.30746 0.5675 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73947 0.62892 moveto 0.75302 0.65076 lineto 0.75443 0.6747 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75302 0.65076 moveto 0.73947 0.62892 lineto 0.73812 0.60465 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58028 0.53299 moveto 0.54058 0.52629 lineto 0.53809 0.50888 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50008 0.50832 moveto 0.53809 0.50888 lineto 0.54058 0.52629 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54058 0.52629 moveto 0.49774 0.52567 lineto 0.50008 0.50832 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58737 0.5515 moveto 0.62235 0.56428 lineto 0.63311 0.58425 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62235 0.56428 moveto 0.58737 0.5515 lineto 0.58028 0.53299 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40256 0.34221 moveto 0.35472 0.3608 lineto 0.35598 0.33888 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35598 0.33888 moveto 0.40351 0.31998 lineto 0.40256 0.34221 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29414 0.73271 moveto 0.28357 0.75664 lineto 0.29829 0.73251 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29829 0.73251 moveto 0.30879 0.70913 lineto 0.29414 0.73271 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34952 0.45155 moveto 0.3138 0.47357 lineto 0.31533 0.45087 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31533 0.45087 moveto 0.35085 0.42839 lineto 0.34952 0.45155 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38071 0.62216 moveto 0.35098 0.64123 lineto 0.36449 0.61949 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36449 0.61949 moveto 0.39212 0.60142 lineto 0.38071 0.62216 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27569 0.73712 moveto 0.27047 0.75618 lineto 0.27229 0.73155 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27229 0.73155 moveto 0.27755 0.71175 lineto 0.27569 0.73712 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30582 0.5918 moveto 0.28471 0.6137 lineto 0.28644 0.59001 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28644 0.59001 moveto 0.30746 0.5675 lineto 0.30582 0.5918 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74083 0.65353 moveto 0.75443 0.6747 lineto 0.75586 0.69896 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75443 0.6747 moveto 0.74083 0.65353 lineto 0.73947 0.62892 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44317 0.56844 moveto 0.40325 0.58118 lineto 0.41412 0.56142 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41412 0.56142 moveto 0.45038 0.54959 lineto 0.44317 0.56844 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54058 0.52629 moveto 0.58028 0.53299 lineto 0.58737 0.5515 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65542 0.62561 moveto 0.683 0.64528 lineto 0.69644 0.66764 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.683 0.64528 moveto 0.65542 0.62561 lineto 0.64413 0.60469 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49534 0.54353 moveto 0.45038 0.54959 lineto 0.45741 0.53124 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45741 0.53124 moveto 0.49774 0.52567 lineto 0.49534 0.54353 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40159 0.36476 moveto 0.35345 0.38303 lineto 0.35472 0.3608 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35472 0.3608 moveto 0.40256 0.34221 lineto 0.40159 0.36476 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34817 0.47502 moveto 0.31225 0.49658 lineto 0.3138 0.47357 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3138 0.47357 moveto 0.34952 0.45155 lineto 0.34817 0.47502 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27382 0.76285 moveto 0.27569 0.73712 lineto gsave
+0.28747 0.74183 lineto 0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.26862 0.78114 moveto 0.28357 0.75664 lineto gsave
+0.27945 0.75678 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27806 0.75935 moveto 0.26862 0.78114 lineto gsave
+0.27945 0.75678 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27806 0.75935 moveto 0.27382 0.76285 lineto gsave
+0.2797 0.7538 lineto 0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.28747 0.74183 moveto 0.28113 0.75363 lineto 0.2797 0.7538 lineto 0 0 0.311 setrgbcolor
+fill
+grestore
+gsave
+0.27806 0.75935 moveto 0.2797 0.7538 lineto 0.28113 0.75363 lineto 0 0 0.311 setrgbcolor
+fill
+grestore
+gsave
+0.29414 0.73271 moveto 0.31717 0.734 lineto 0.28564 0.75312 lineto 0 0 0 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.33209 0.71055 moveto 0.29414 0.73271 lineto 0.30879 0.70913 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38645 0.7166 moveto 0.32574 0.73239 lineto gsave
+0.33209 0.71055 lineto 0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32083 0.73102 moveto 0.33209 0.71055 lineto gsave
+0.32574 0.73239 lineto 0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3336 0.72911 moveto 0.32574 0.73239 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32574 0.73239 moveto 0.3122 0.73805 lineto gsave
+0.32083 0.73102 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.32591 0.72688 moveto 0.32574 0.73239 lineto 0.32083 0.73102 lineto 0.217 0.065 0.45 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.32574 0.73239 moveto 0.31913 0.73411 lineto 0.32083 0.73102 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29414 0.73271 moveto 0.33209 0.71055 lineto 0.32083 0.73102 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32083 0.73102 moveto 0.31913 0.73411 lineto gsave
+0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.29414 0.73271 moveto 0.32083 0.73102 lineto 0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.30879 0.70913 moveto 0.34471 0.6876 lineto 0.33209 0.71055 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39529 0.69352 moveto 0.33209 0.71055 lineto 0.34471 0.6876 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33209 0.71055 moveto 0.39529 0.69352 lineto 0.38645 0.7166 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29726 0.71857 moveto 0.33515 0.70201 lineto 0.33411 0.72021 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33411 0.72021 moveto 0.3336 0.72911 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.29726 0.71857 moveto 0.33411 0.72021 lineto 0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.29548 0.74503 moveto 0.29726 0.71857 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3122 0.73805 moveto 0.28564 0.75312 lineto gsave
+0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3122 0.73805 moveto 0.29548 0.74503 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31913 0.73411 moveto 0.3122 0.73805 lineto gsave
+0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28357 0.75664 moveto 0.28495 0.75351 lineto gsave
+0.27917 0.75679 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2851 0.75318 moveto 0.29414 0.73271 lineto 0.28113 0.75363 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28113 0.75363 moveto 0.29414 0.73271 lineto gsave
+0.28564 0.75312 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29548 0.74503 moveto 0.27806 0.75935 lineto gsave
+0.28747 0.74183 lineto 0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28564 0.75312 moveto 0.27917 0.75679 lineto 0.28113 0.75363 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27917 0.75679 moveto 0.27806 0.75935 lineto gsave
+0.27945 0.75678 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27382 0.76285 moveto 0.26862 0.78114 lineto 0.27047 0.75618 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27047 0.75618 moveto 0.27569 0.73712 lineto 0.27382 0.76285 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30416 0.61644 moveto 0.28296 0.63772 lineto 0.28471 0.6137 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28471 0.6137 moveto 0.30582 0.5918 lineto 0.30416 0.61644 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74221 0.67849 moveto 0.75586 0.69896 lineto 0.7573 0.72355 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75586 0.69896 moveto 0.74221 0.67849 lineto 0.74083 0.65353 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36901 0.64343 moveto 0.3372 0.66341 lineto 0.35098 0.64123 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35098 0.64123 moveto 0.38071 0.62216 lineto 0.36901 0.64343 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59465 0.5705 moveto 0.63311 0.58425 lineto 0.64413 0.60469 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63311 0.58425 moveto 0.59465 0.5705 lineto 0.58737 0.5515 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58737 0.5515 moveto 0.54314 0.5442 lineto 0.54058 0.52629 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49774 0.52567 moveto 0.54058 0.52629 lineto 0.54314 0.5442 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54314 0.5442 moveto 0.49534 0.54353 lineto 0.49774 0.52567 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40061 0.38761 moveto 0.35216 0.40556 lineto 0.35345 0.38303 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35345 0.38303 moveto 0.40159 0.36476 lineto 0.40061 0.38761 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34681 0.49883 moveto 0.31067 0.51989 lineto 0.31225 0.49658 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31225 0.49658 moveto 0.34817 0.47502 lineto 0.34681 0.49883 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66698 0.64705 moveto 0.69644 0.66764 lineto 0.71015 0.69043 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69644 0.66764 moveto 0.66698 0.64705 lineto 0.65542 0.62561 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43575 0.58783 moveto 0.39212 0.60142 lineto 0.40325 0.58118 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40325 0.58118 moveto 0.44317 0.56844 lineto 0.43575 0.58783 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30247 0.64143 moveto 0.28118 0.66206 lineto 0.28296 0.63772 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28296 0.63772 moveto 0.30416 0.61644 lineto 0.30247 0.64143 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74362 0.70379 moveto 0.7573 0.72355 lineto 0.75877 0.74848 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7573 0.72355 moveto 0.74362 0.70379 lineto 0.74221 0.67849 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54314 0.5442 moveto 0.58737 0.5515 lineto 0.59465 0.5705 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49287 0.56191 moveto 0.44317 0.56844 lineto 0.45038 0.54959 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45038 0.54959 moveto 0.49534 0.54353 lineto 0.49287 0.56191 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39961 0.41079 moveto 0.35085 0.42839 lineto 0.35216 0.40556 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35216 0.40556 moveto 0.40061 0.38761 lineto 0.39961 0.41079 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34542 0.52297 moveto 0.30908 0.54353 lineto 0.31067 0.51989 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31067 0.51989 moveto 0.34681 0.49883 lineto 0.34542 0.52297 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35702 0.66523 moveto 0.32314 0.68603 lineto 0.3372 0.66341 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3372 0.66341 moveto 0.36901 0.64343 lineto 0.35702 0.66523 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60213 0.59003 moveto 0.64413 0.60469 lineto 0.65542 0.62561 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64413 0.60469 moveto 0.60213 0.59003 lineto 0.59465 0.5705 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30076 0.66678 moveto 0.27938 0.68673 lineto 0.28118 0.66206 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28118 0.66206 moveto 0.30247 0.64143 lineto 0.30076 0.66678 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74504 0.72946 moveto 0.75877 0.74848 lineto 0.76026 0.77375 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75877 0.74848 moveto 0.74504 0.72946 lineto 0.74362 0.70379 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67882 0.66901 moveto 0.71015 0.69043 lineto 0.72412 0.71366 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71015 0.69043 moveto 0.67882 0.66901 lineto 0.66698 0.64705 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59465 0.5705 moveto 0.54577 0.56263 lineto 0.54314 0.5442 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49534 0.54353 moveto 0.54314 0.5442 lineto 0.54577 0.56263 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3986 0.4343 moveto 0.34952 0.45155 lineto 0.35085 0.42839 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35085 0.42839 moveto 0.39961 0.41079 lineto 0.3986 0.4343 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42811 0.60776 moveto 0.38071 0.62216 lineto 0.39212 0.60142 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39212 0.60142 moveto 0.43575 0.58783 lineto 0.42811 0.60776 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34402 0.54746 moveto 0.30746 0.5675 lineto 0.30908 0.54353 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30908 0.54353 moveto 0.34542 0.52297 lineto 0.34402 0.54746 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54577 0.56263 moveto 0.49287 0.56191 lineto 0.49534 0.54353 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.51449 0.911 moveto
+0.51707 0.56224 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29902 0.69249 moveto 0.27755 0.71175 lineto 0.27938 0.68673 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27938 0.68673 moveto 0.30076 0.66678 lineto 0.29902 0.69249 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54577 0.56263 moveto 0.59465 0.5705 lineto 0.60213 0.59003 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34471 0.6876 moveto 0.30879 0.70913 lineto 0.32314 0.68603 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32314 0.68603 moveto 0.35702 0.66523 lineto 0.34471 0.6876 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49032 0.58083 moveto 0.43575 0.58783 lineto 0.44317 0.56844 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44317 0.56844 moveto 0.49287 0.56191 lineto 0.49032 0.58083 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69096 0.69152 moveto 0.72412 0.71366 lineto 0.73837 0.73736 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72412 0.71366 moveto 0.69096 0.69152 lineto 0.67882 0.66901 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39757 0.45814 moveto 0.34817 0.47502 lineto 0.34952 0.45155 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34952 0.45155 moveto 0.3986 0.4343 lineto 0.39757 0.45814 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34259 0.57229 moveto 0.30582 0.5918 lineto 0.30746 0.5675 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30746 0.5675 moveto 0.34402 0.54746 lineto 0.34259 0.57229 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60982 0.6101 moveto 0.65542 0.62561 lineto 0.66698 0.64705 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65542 0.62561 moveto 0.60982 0.6101 lineto 0.60213 0.59003 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29726 0.71857 moveto 0.27569 0.73712 lineto 0.27755 0.71175 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27755 0.71175 moveto 0.29902 0.69249 lineto 0.29726 0.71857 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42026 0.62827 moveto 0.36901 0.64343 lineto 0.38071 0.62216 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38071 0.62216 moveto 0.42811 0.60776 lineto 0.42026 0.62827 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39653 0.48232 moveto 0.34681 0.49883 lineto 0.34817 0.47502 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34817 0.47502 moveto 0.39757 0.45814 lineto 0.39653 0.48232 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60213 0.59003 moveto 0.54849 0.58161 lineto 0.54577 0.56263 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49287 0.56191 moveto 0.54577 0.56263 lineto 0.54849 0.58161 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34115 0.59749 moveto 0.30416 0.61644 lineto 0.30582 0.5918 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30582 0.5918 moveto 0.34259 0.57229 lineto 0.34115 0.59749 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54849 0.58161 moveto 0.49032 0.58083 lineto 0.49287 0.56191 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73837 0.73736 moveto 0.70341 0.7146 lineto 0.69096 0.69152 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27569 0.73712 moveto 0.29726 0.71857 lineto 0.29548 0.74503 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54849 0.58161 moveto 0.60213 0.59003 lineto 0.60982 0.6101 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61772 0.63073 moveto 0.66698 0.64705 lineto 0.67882 0.66901 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66698 0.64705 moveto 0.61772 0.63073 lineto 0.60982 0.6101 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48769 0.60033 moveto 0.42811 0.60776 lineto 0.43575 0.58783 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43575 0.58783 moveto 0.49032 0.58083 lineto 0.48769 0.60033 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39548 0.50685 moveto 0.34542 0.52297 lineto 0.34681 0.49883 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34681 0.49883 moveto 0.39653 0.48232 lineto 0.39548 0.50685 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33968 0.62305 moveto 0.30247 0.64143 lineto 0.30416 0.61644 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30416 0.61644 moveto 0.34115 0.59749 lineto 0.33968 0.62305 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41218 0.64939 moveto 0.35702 0.66523 lineto 0.36901 0.64343 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36901 0.64343 moveto 0.42026 0.62827 lineto 0.41218 0.64939 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39441 0.53173 moveto 0.34402 0.54746 lineto 0.34542 0.52297 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34542 0.52297 moveto 0.39548 0.50685 lineto 0.39441 0.53173 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3382 0.64898 moveto 0.30076 0.66678 lineto 0.30247 0.64143 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30247 0.64143 moveto 0.33968 0.62305 lineto 0.3382 0.64898 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60982 0.6101 moveto 0.55128 0.60116 lineto 0.54849 0.58161 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49032 0.58083 moveto 0.54849 0.58161 lineto 0.55128 0.60116 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55128 0.60116 moveto 0.48769 0.60033 lineto 0.49032 0.58083 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55128 0.60116 moveto 0.60982 0.6101 lineto 0.61772 0.63073 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62585 0.65196 moveto 0.67882 0.66901 lineto 0.69096 0.69152 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67882 0.66901 moveto 0.62585 0.65196 lineto 0.61772 0.63073 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48498 0.62044 moveto 0.42026 0.62827 lineto 0.42811 0.60776 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42811 0.60776 moveto 0.48769 0.60033 lineto 0.48498 0.62044 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39332 0.55698 moveto 0.34259 0.57229 lineto 0.34402 0.54746 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34402 0.54746 moveto 0.39441 0.53173 lineto 0.39332 0.55698 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33669 0.6753 moveto 0.29902 0.69249 lineto 0.30076 0.66678 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30076 0.66678 moveto 0.3382 0.64898 lineto 0.33669 0.6753 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40386 0.67112 moveto 0.34471 0.6876 lineto 0.35702 0.66523 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35702 0.66523 moveto 0.41218 0.64939 lineto 0.40386 0.67112 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39222 0.5826 moveto 0.34115 0.59749 lineto 0.34259 0.57229 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34259 0.57229 moveto 0.39332 0.55698 lineto 0.39222 0.5826 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33515 0.70201 moveto 0.29726 0.71857 lineto 0.29902 0.69249 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29902 0.69249 moveto 0.33669 0.6753 lineto 0.33515 0.70201 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61772 0.63073 moveto 0.55416 0.62131 lineto 0.55128 0.60116 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48769 0.60033 moveto 0.55128 0.60116 lineto 0.55416 0.62131 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63422 0.67381 moveto 0.69096 0.69152 lineto 0.70341 0.7146 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69096 0.69152 moveto 0.63422 0.67381 lineto 0.62585 0.65196 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55416 0.62131 moveto 0.61772 0.63073 lineto 0.62585 0.65196 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55416 0.62131 moveto 0.48498 0.62044 lineto 0.48769 0.60033 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48219 0.64116 moveto 0.41218 0.64939 lineto 0.42026 0.62827 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42026 0.62827 moveto 0.48498 0.62044 lineto 0.48219 0.64116 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3911 0.60861 moveto 0.33968 0.62305 lineto 0.34115 0.59749 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34115 0.59749 moveto 0.39222 0.5826 lineto 0.3911 0.60861 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34471 0.6876 moveto 0.40386 0.67112 lineto 0.39529 0.69352 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38996 0.635 moveto 0.3382 0.64898 lineto 0.33968 0.62305 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33968 0.62305 moveto 0.3911 0.60861 lineto 0.38996 0.635 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64284 0.6963 moveto 0.70341 0.7146 lineto 0.71617 0.73826 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70341 0.7146 moveto 0.64284 0.6963 lineto 0.63422 0.67381 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62585 0.65196 moveto 0.55713 0.64208 lineto 0.55416 0.62131 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48498 0.62044 moveto 0.55416 0.62131 lineto 0.55713 0.64208 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55713 0.64208 moveto 0.62585 0.65196 lineto 0.63422 0.67381 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55713 0.64208 moveto 0.48219 0.64116 lineto 0.48498 0.62044 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47931 0.66255 moveto 0.40386 0.67112 lineto 0.41218 0.64939 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41218 0.64939 moveto 0.48219 0.64116 lineto 0.47931 0.66255 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38881 0.66179 moveto 0.33669 0.6753 lineto 0.3382 0.64898 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3382 0.64898 moveto 0.38996 0.635 lineto 0.38881 0.66179 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71617 0.73826 moveto 0.65171 0.71946 lineto 0.64284 0.6963 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38764 0.68899 moveto 0.33515 0.70201 lineto 0.33669 0.6753 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33669 0.6753 moveto 0.38881 0.66179 lineto 0.38764 0.68899 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56019 0.66351 moveto 0.63422 0.67381 lineto 0.64284 0.6963 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63422 0.67381 moveto 0.56019 0.66351 lineto 0.55713 0.64208 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48219 0.64116 moveto 0.55713 0.64208 lineto 0.56019 0.66351 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56019 0.66351 moveto 0.47931 0.66255 lineto 0.48219 0.64116 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47634 0.68463 moveto 0.39529 0.69352 lineto 0.40386 0.67112 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40386 0.67112 moveto 0.47931 0.66255 lineto 0.47634 0.68463 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38645 0.7166 moveto 0.3336 0.72911 lineto 0.33515 0.70201 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33515 0.70201 moveto 0.38764 0.68899 lineto 0.38645 0.7166 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56335 0.68562 moveto 0.64284 0.6963 lineto 0.65171 0.71946 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64284 0.6963 moveto 0.56335 0.68562 lineto 0.56019 0.66351 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47931 0.66255 moveto 0.56019 0.66351 lineto 0.56335 0.68562 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56335 0.68562 moveto 0.47634 0.68463 lineto 0.47931 0.66255 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47327 0.70743 moveto 0.38645 0.7166 lineto 0.39529 0.69352 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39529 0.69352 moveto 0.47634 0.68463 lineto 0.47327 0.70743 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65171 0.71946 moveto 0.56662 0.70845 lineto 0.56335 0.68562 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47634 0.68463 moveto 0.56335 0.68562 lineto 0.56662 0.70845 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56662 0.70845 moveto 0.47327 0.70743 lineto 0.47634 0.68463 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+grestore
+% End of Graphics
+MathPictureEnd%%PSTrailer
+end
+
+%%EPS Trailer
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd
new file mode 100644
index 0000000000..4176ca6e81
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd
@@ -0,0 +1,22 @@
+% auxfile.cd
+% Anders G S Svensson
+
+% Source: auxfile.nw
+% $Revision: 1.8 $
+% $Date: 1996/06/08 00:43:51 $
+
+\edef\auxfile@newwrite@{\noexpand\newwrite}
+
+\def\newauxfile{\bgroup\@ignorewhitespace@\auxfile@new@}
+\def\auxfile@new@#1{\egroup
+ \@csafter@\auxfile@newwrite@{auxfile@aux@#1}%
+ \@def@{open#1}{\auxfile@open@{#1}\global\@let@{open#1}\relax}%
+ \@def@{write#1}{\auxfile@write@{#1}}%
+ \@def@{read#1}{\auxfile@read@{#1}\global\@let@{read#1}\relax}}
+\def\auxfile@open@#1{\immediate\openout\@cs@{auxfile@aux@#1}=\jobname.#1\relax}
+\def\auxfile@read@#1{%
+ \IfFileExists{\jobname.#1}%
+ {\edef\@action@{\noexpand\@makeatletter@\noexpand\input\jobname.#1\relax
+ \noexpand\@restoreat@{\the\catcode`\@}}\@action@}%
+ {}}
+\def\auxfile@write@#1{\write\@cs@{auxfile@aux@#1}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex
new file mode 100644
index 0000000000..410049cf16
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex
@@ -0,0 +1,283 @@
+% carrot.tex
+% Anders G S Svensson
+
+% Source: carrot.nw
+% $Revision: 1.29 $
+% $Date: 1996/06/08 00:23:21 $
+
+\ifx\carrot\relax \expandafter\endinput\fi
+\let\carrot\relax
+
+\chardef\carrotcode=\catcode`\@
+\catcode`\@=11
+
+\def\@meaning@{\expandafter\@gobblemeaning@\meaning}
+\let\expansion\@meaning@
+\def\@gobblemeaning@#1:->{}
+
+\def\@makeatletter@{\catcode`\@=11 }
+\def\@restoreat@#1{\catcode`\@=#1\relax}
+
+\def\IfOption#1{\relax
+ \IfCarrot{\@ifundefined@{@op@\@currentcarrot@ @#1}%
+ \@SecondOfTwo@\@FirstOfTwo@}
+ {\nocarrot@\IfOption}}
+\def\IfOptionInCarrot#1#2{\relax
+ \@ifundefined@{@op@#2@#1}\@SecondOfTwo@\@FirstOfTwo@}
+
+\def\Option#1{\relax
+ \IfCarrot{\ifoption@{#1}{\executeopt@{#1}}}
+ {\nocarrot@\Option}}
+
+\def\IfCarrot{\relax
+ \ifx\@currentcarrot@\@empty@
+ \let\@action@\@SecondOfTwo@
+ \else
+ \let\@action@\@FirstOfTwo@
+ \fi
+ \@action@}
+
+\def\IfCarrotLoaded#1{\relax
+ \@ifundefined@{@cd@#1}\@SecondOfTwo@\@FirstOfTwo@}
+
+\def\@def@#1{%
+ \expandafter\def\csname #1\endcsname}
+\def\@edef@#1{%
+ \expandafter\edef\csname #1\endcsname}
+\def\@gdef@#1{%
+ \expandafter\gdef\csname #1\endcsname}
+\def\@xdef@#1{%
+ \expandafter\xdef\csname #1\endcsname}
+\def\@let@#1{%
+ \expandafter\let\csname #1\endcsname}
+
+\def\@cs@#1{\csname #1\endcsname}
+\def\@csafter@#1#2{\expandafter#1\csname #2\endcsname}
+
+\def\@space@{ }
+\def\@empty@{}
+
+\def\@ifempty@#1{%
+ \def\@tmp@{#1}%
+ \ifx\@tmp@\@empty@
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\@echo@#1{#1}
+\def\@eat@#1{}
+\def\@eattwo@#1#2{}
+\def\@FirstOfTwo@#1#2{#1}
+\def\@SecondOfTwo@#1#2{#2}
+\def\@gobble@#1{\@ifempty@{#1}{}{\@gobble@}}
+\def\@chomp@#1@ {}
+
+\def\@eatspace@#1{%
+ \@ifnextchar@\@space@
+ {\def\@action@{#1}\expandafter\@action@\@chomp@ @}%
+ {#1}}
+
+\def\@eatnextchar@#1{\@expandafter@{#1}\@eat@}
+
+\def\@expandafter@#1{\def\@action@{#1}\expandafter\@action@}
+\def\@afterassignment@#1{\def\@action@{#1}\afterassignment\@action@}
+
+\def\@ifnext@#1#2#3{\@eatspace@{\@ifnextchar@{#1}{#2}{#3}}}
+
+\def\@ifundefined@#1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\@ifnextchar@#1#2#3{%
+ \def\@action@{\@choice@{#1}\@action@{#2}{#3}}%
+ \futurelet\@ch@\@action@}
+
+\def\@choice@#1{%
+ \if#1\noexpand\@ch@
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi}
+
+\def\@strcmp@#1#2{%
+ \edef\@tmp@{#1}\edef\@action@{#2}%
+ \ifx\@tmp@\@action@
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\IfFileExists#1{%
+ \immediate\openin\@r@=#1\relax
+ \ifeof\@r@
+ \let\@action@\@SecondOfTwo@
+ \else
+ \let\@action@\@FirstOfTwo@
+ \fi
+ \immediate\closein\@r@
+ \@action@}
+
+\def\@ifx@#1#2{%
+ \ifx#1#2%
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\@ifmmode@{%
+ \ifmmode
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\InputIfFileExists#1{%
+ \IfFileExists{#1}{\input #1\relax}{}}
+
+\def\@ignorespaces@{\@ifmmode@{}\ignorespaces}
+
+\def\@ignorewhitespace@{%
+ \catcode`\ =9 \catcode`\^^I=9 }
+
+\def\@Warning@#1{%
+ \immediate\write16{** #1}}
+\def\@Message@#1{%
+ \immediate\write16{#1}}
+\def\@message@#1{%
+ \def\@tmp@{#1}\@Message@{\@meaning@\@tmp@}}
+\def\@warning@#1{%
+ \def\@tmp@{#1}\@Warning@{\@meaning@\@tmp@}}
+
+\def\@sum@#1#2+#3@{%
+ \advance#1 by #2\relax
+ \@ifempty@{#3}{}{\@sum@{#1}#3@}}
+
+\def\@define@#1{%
+ \@afterassignment@{\@edef@{#1}{\the\@t@}}\@t@}
+
+\def\@settodimen@#1#2#3{%
+ \setbox\@b@=\hbox{#3}#1=#2\@b@}
+
+\newcount\@c@
+\newskip\@s@
+\newbox\@b@
+\newtoks\@t@
+\newread\@r@
+\newdimen\@d@
+
+\def\@grabitems@#1,#2@{%
+ \@itemaction@{#1}%
+ \@ifempty@{#2}{}{\@grabitems@#2@}}
+
+\def\usecarrot{\relax
+ \let\@currentoptions@\@empty@
+ \@ifnextchar@[\carrotwithopts@\carrotnoopt@}
+
+\def\carrotwithopts@[#1]#2{%
+ \def\@itemaction@##1{%
+ \edef\@currentoptions@{\@currentoptions@{##1}}}%
+ \@grabitems@#1,@\pickcarrot@#2,@}
+
+\def\carrotnoopt@#1{\pickcarrot@#1,@}
+
+\def\pickcarrot@#1,#2@{%
+ \@ifundefined@{@cd@#1}%
+ {\IfFileExists{#1.cd}%
+ {\loadcd@{#1}}%
+ {\@Warning@{No carrot: #1.cd}}}%
+ {}%
+ \@ifempty@{#2}%
+ {}%
+ {\pickcarrot@#2@}}
+
+\def\PassToCarrot#1{\relax
+ \IfCarrot{\pickcarrot@#1,@%
+ \expandafter\declaresilently@\@currentoptions@{}}%
+ {\nocarrot@\PassToCarrot}}
+
+\def\declaresilently@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\@ifundefined@{@co@\@currentcarrot@ @#1}%
+ {\@let@{@co@\@currentcarrot@ @#1}\@empty@ \declaresilently@}%
+ {}}}
+
+\def\loadcd@#1{%
+ \@let@{@cd@#1}\@empty@
+ \@let@{@opt@#1}\@empty@
+ \@expandafter@{\markoption@{#1}}\@currentoptions@{}%
+ \@let@{@do@#1}\relax
+ \edef\@action@{%
+ \def\noexpand\@currentcarrot@{#1}
+ \noexpand\@makeatletter@
+ \noexpand\input #1.cd\relax
+ \noexpand\@restoreat@{\the\catcode`\@}%
+ \noexpand\checkoption@\@currentoptions@{}%
+ \noexpand\expandafter\noexpand\executeoption@
+ \expandafter\noexpand\csname @opt@#1\endcsname{}%
+ \noexpand\@cs@{@do@#1}%
+ \def\noexpand\@currentoptions@{\@currentoptions@}%
+ \def\noexpand\@currentcarrot@{\@currentcarrot@}}%
+ \@action@}
+
+\def\markoption@#1#2{%
+ \@ifempty@{#2}%
+ {}%
+ {\@let@{@op@#1@#2}\@empty@ \markoption@{#1}}}
+
+\def\executeoption@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\@ifundefined@{@op@\@currentcarrot@ @#1}%
+ {}%
+ {\@let@{@do@\@currentcarrot@}\relax \executeopt@{#1}}%
+ \executeoption@}}
+
+\def\executeopt@#1{%
+ \@cs@{@co@\@currentcarrot@ @#1}\@let@{@co@\@currentcarrot@ @#1}\@empty@}
+
+\def\checkoption@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\ifoption@{#1}{}\checkoption@}}
+
+\def\ifoption@#1#2{%
+ \@ifundefined@{@co@\@currentcarrot@ @#1}%
+ {\@Warning@{Unrecognized option: #1 (\@currentcarrot@.cd)}}%
+ {#2}}
+
+\let\@currentcarrot@\@empty@
+
+\def\nocarrot@#1{%
+ \@warning@{Ignored #1in non-carrot}}
+
+\def\DeclareOption{\relax
+ \IfCarrot\DeclareOption@
+ {\nocarrot@\DeclareOption\@eattwo@}}
+
+\def\DeclareOption@#1{%
+ \@edef@{@opt@\@currentcarrot@}{\@cs@{@opt@\@currentcarrot@}{#1}}
+ \@define@{@co@\@currentcarrot@ @#1}}
+
+\def\DeclareDefaultOption{\relax
+ \IfCarrot{\@define@{@do@\@currentcarrot@}}
+ {\nocarrot@\DeclareDefaultOption\@eat@}}
+
+\def\ExecuteOptions#1{\relax
+ \IfCarrot{\def\@itemaction@##1{\ifoption@{##1}{\executeopt@{##1}}}%
+ \@grabitems@#1,@}%
+ {\nocarrot@\ExecuteOptions}}
+
+
+\InputIfFileExists{\jobname.cd}
+
+\catcode`\@=\carrotcode
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd
new file mode 100644
index 0000000000..864e10ca81
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd
@@ -0,0 +1,24 @@
+% cite.cd
+% Anders G S Svensson
+
+% Source: cite.nw
+% $Revision: 1.3 $
+% $Date: 1996/02/19 04:06:30 $
+
+\usecarrot{xr}
+
+\def\citedef#1#2{%
+ \definexr{@cite@#1@}{#2}{@cite@}}
+\def\@cite@tag#1{\citetag{#1\@cite@opt}}
+
+\def\citesep{,}
+\def\citetag#1{[#1]}
+
+\def\cite{\relax
+ \@ifnextchar@[\cite@cite@\cite@citenoopt@}
+\def\cite@cite@[#1]#2{%
+ \def\@cite@opt{\citesep\@space@ #1}%
+ \refxr{@cite@#2@}}
+\def\cite@citenoopt@#1{\let\@cite@opt\relax \refxr{@cite@#1@}}
+
+\def\citepage#1{\pagexr{@cite@#1@}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd
new file mode 100644
index 0000000000..13e158bf7a
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd
@@ -0,0 +1,88 @@
+% contents.cd
+% Anders G S Svensson
+
+% Source: contents.nw
+% $Revision: 1.13 $
+% $Date: 1996/02/23 03:03:12 $
+
+\usecarrot{auxfile}
+
+\newauxfile{ccx}
+
+\def\readccx{%
+ \IfFileExists{\jobname.ccx}%
+ {\expandafter\contents@open@\contents@list@{}%
+ {\@makeatletter@ \input\jobname.ccx\relax}%
+ \expandafter\contents@close@\contents@list@{}}
+ {}%
+ \global\let\readccx\relax}
+
+\def\newcontentsfile{\bgroup\@ignorewhitespace@\contents@newfile@}
+\def\contents@newfile@#1{\egroup
+ \xdef\contents@list@{\contents@list@{#1}}%
+ \@let@{#1contents}\relax
+ \@let@{end#1contents}\relax
+ \@csafter@\auxfile@newwrite@{contents@toc@#1}}
+\let\contents@list@\@empty@
+
+\def\contents@open@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\immediate\openout\@cs@{contents@toc@#1}=\jobname.#1\relax
+ \contents@writefile@{#1}{%
+ \expandafter\noexpand\csname #1contents\endcsname}%
+ \contents@open@}}
+\def\contents@close@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\contents@writefile@{#1}{%
+ \expandafter\noexpand\csname end#1contents\endcsname}%
+ \immediate\closeout\@cs@{contents@toc@#1}\relax\contents@close@}}
+
+\def\contents@writefile@#1{%
+ \immediate\write\@cs@{contents@toc@#1}}
+
+\def\contents@writetoks@#1#2{%
+ \def\@tmp@{#2}\contents@writefile@{#1}{\@meaning@\@tmp@}}
+
+\def\readcontentsfile#1{\relax
+ \readccx
+ \@ifundefined@{contents@toc@#1}%
+ {\@Warning@{Undeclared contents file: #1}}%
+ {\InputIfFileExists{\jobname.#1\relax}}}
+\def\writecontentsfile#1#2{\relax
+ \@ifundefined@{contents@toc@#1}%
+ {\@Warning@{Undeclared contents file: #1}}%
+ {\def\@tmp@{\contents@writetoks@{#1}{#2}}%
+ \edef\@action@{\noexpand\writeccx{\@meaning@\@tmp@}}%
+ \@action@}}
+\def\writecontentsentry{\relax
+ \@ifnextchar@*%
+ {\expandafter\contents@writeentry@\expandafter\contents@sentry@\@eat@}%
+ {\contents@writeentry@\contents@entry@}}
+
+\def\contents@writeentry@#1#2{%
+ \@ifundefined@{contents@toc@#2}%
+ {\@Warning@{Undeclared contents file: #2}}%
+ {\readccx \openccx #1{#2}}}
+
+\def\contents@sentry@#1#2#3{%
+ \def\@tmp@{\contents@swrite@{#1}{#2}{#3}}%
+ \edef\@action@{%
+ \noexpand\writeccx{\@meaning@\@tmp@{\noexpand\folio}}}%
+ \@action@}
+
+\def\contents@entry@#1#2#3#4{%
+ \def\@tmp@{\contents@write@{#1}{#2}{#3}}%
+ \edef\@action@{%
+ \noexpand\writeccx{\@meaning@\@tmp@{#4}{\noexpand\folio}}}%
+ \@action@}
+\def\contents@swrite@#1#2#3#4{%
+ \def\@tmp@{{#3}{#4}}%
+ \contents@writefile@{#1}{%
+ \expandafter\noexpand\csname #1#2entryu\endcsname\@meaning@\@tmp@}}
+
+\def\contents@write@#1#2#3#4#5{%
+ \def\@tmp@{{#3}{#4}{#5}}%
+ \contents@writefile@{#1}{%
+ \expandafter\noexpand\csname #1#2entry\endcsname\@meaning@\@tmp@}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd
new file mode 100644
index 0000000000..ddc5855437
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd
@@ -0,0 +1,75 @@
+% counter.cd
+% Anders G S Svensson
+
+% Source: counter.nw
+% $Revision: 1.7 $
+% $Date: 1996/02/20 10:35:33 $
+
+\edef\counter@newcount@{\noexpand\newcount}
+
+\def\newcounter#1{%
+ \@ifundefined@{counter@ctn@#1}%
+ {\@def@{counter@ctn@#1}{#1}\@csafter@\counter@newcount@{counter@ctr@#1}%
+ \@def@{counter@ctr++@#1}{\counter@stepcounter@{#1}}%
+ \@def@{the#1}{\@csafter@\counter@arabic@{counter@ctr@#1}}%
+ \@cs@{counter@ctr@#1}=0 }%
+ {}%
+ \@ifnextchar@[%
+ {\counter@numberwithin@{\@cs@{counter@ctn@#1}}}%
+ {}}
+\def\stepcounter#1{\@cs@{counter@ctr++@\@cs@{counter@ctn@#1}}}
+\def\counter#1{\@cs@{counter@ctr@\@cs@{counter@ctn@#1}}}
+
+\def\arabic#1{\@csafter@\counter@arabic@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\roman#1{\@csafter@\counter@roman@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\Roman#1{\@csafter@\counter@Roman@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\alph#1{\@csafter@\counter@alph@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\Alph#1{\@csafter@\counter@Alph@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\counter@arabic@{\number}
+\def\counter@roman@{\romannumeral}
+\def\counter@Roman@#1{\uppercase{\romannumeral#1}}
+\def\counter@alph@#1{{\count0=\number#1 \advance\count0 by 96 \char\count0}}
+\def\counter@Alph@#1{{\count0=\number#1 \advance\count0 by 64 \char\count0}}
+\def\numberwithin#1#2{%
+ \newcounter{#1}[#2]}
+\def\numberwith#1#2{%
+ \newcounter{#2}%
+ \@def@{counter@ctn@#1}{\@cs@{counter@ctn@#2}}%
+ \@def@{the#1}{\@cs@{the\@cs@{counter@ctn@#2}}}}
+
+\def\counter@numberwithin@#1[#2]{%
+ \newcounter{#2}%
+ \@def@{the#1}{\@cs@{the#2}.\@csafter@\counter@arabic@{counter@ctr@#1}}%
+ \@ifundefined@{counter@container@#1}%
+ {}%
+ {\edef\@action@{\noexpand\counter@removeitem@
+ \expandafter\noexpand
+ \csname counter@within@\@cs@{counter@container@#1}\endcsname
+ {\@cs@{counter@ctn@#1}}%
+ \@cs@{counter@within@\@cs@{counter@container@#1}}{}}%
+ \@action@}
+ \@def@{counter@container@#1}{\@cs@{counter@ctn@#2}}%
+ \@ifundefined@{counter@within@\@cs@{counter@ctn@#2}}%
+ {\@edef@{counter@within@\@cs@{counter@ctn@#2}}{{#1}}}%
+ {\@edef@{counter@within@\@cs@{counter@ctn@#2}}{%
+ \@cs@{counter@within@\@cs@{counter@ctn@#2}}{#1}}}}
+
+\def\counter@removeitem@#1#2#3{%
+ \@ifempty@{#3}%
+ {}%
+ {\@strcmp@{#2}{#3}%
+ {}%
+ {\edef#2{#2{#3}}}%
+ \counter@removeitem@{#1}{#2}}}
+
+\def\counter@stepcounter@#1{%
+ \global\advance\@cs@{counter@ctr@#1} by 1
+ \@ifundefined@{counter@within@#1}%
+ {}%
+ {\expandafter\expandafter\expandafter
+ \counter@initcounter@\csname counter@within@#1\endcsname{}}}
+
+\def\counter@initcounter@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\global\@cs@{counter@ctr@#1}=0 \counter@initcounter@}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd
new file mode 100644
index 0000000000..5e316d6f3e
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd
@@ -0,0 +1,101 @@
+% environ.cd
+% Anders G S Svensson
+
+% Source: environ.nw
+% $Revision: 1.9 $
+% $Date: 1996/02/19 19:21:07 $
+
+\def\B#1{\environ@envin@{#1}\@cs@{environ@benv@#1}}
+\def\E#1{\@cs@{environ@eenv@#1}\environ@envout@{#1}}
+
+\def\environ@B@#1{\environ@blockin@{#1}\@cs@{environ@bblo@#1}}
+\def\environ@E@#1{\@cs@{environ@eblo@#1}\environ@blockout@{#1}}
+
+\def\environ@envin@#1{\environ@checkin@{env}{#1}}
+\def\environ@blockin@#1{\environ@checkin@{blo}{#1}}
+\def\environ@envout@#1{\environ@checkout@{env}{#1}}
+\def\environ@blockout@#1{\environ@checkout@{blo}{#1}}
+
+\let\environ@checkin@\@eattwo@
+\let\environ@checkout@\@eattwo@
+
+\DeclareOption{check}
+ {\def\environ@checkin@#1#2{\relax
+ \@ifundefined@{environ@b#1@#2}{\environ@unknown@{#1}{#2}}{}%
+ \gdef\environ@currenv@{{#1}{#2}}%
+ \xdef\environ@envstack@{{#1}{#2}\environ@envstack@}}
+ \def\environ@checkout@#1#2{\relax
+ \@ifx@\environ@currenv@\environ@topenv@
+ {\environ@toperror@{#1}{#2}}%
+ {\@strcmp@{#2}{\expandafter\@SecondOfTwo@\environ@currenv@}
+ {\@expandafter@{\expandafter\environ@popenv@\@eattwo@}\environ@envstack@ @}%
+ {\environ@incompat@{#1}{#2}}
+ \@ifundefined@{environ@e#1@#2}{\environ@unknown@{#1}{#2}}{}}}%
+ \def\environ@topenv@{{}{}}
+ \let\environ@currenv@\environ@topenv@
+ \let\environ@envstack@\environ@topenv@
+ \def\environ@toperror@#1#2{%
+ \@Warning@{\environ@endstring@{#1}{#2} at top level}}
+ \def\environ@incompat@#1#2{%
+ \@Warning@{\expandafter\environ@beginstring@\environ@currenv@\@space@
+ terminated by \environ@endstring@{#1}{#2}}}
+ \def\environ@unknown@#1#2{\@Warning@{Unknown \environ@environname@{#1}: #2}}
+ \def\environ@beginstring@#1#2{\@cs@{environ@b#1string@}{#2}}
+ \def\environ@endstring@#1#2{\@cs@{environ@e#1string@}{#2}}
+ \def\environ@benvstring@#1{\string\B{#1}}
+ \def\environ@eenvstring@#1{\string\E{#1}}
+ \def\environ@bblostring@#1{\expandafter\string\csname #1\endcsname}
+ \def\environ@eblostring@#1{\expandafter\string\csname end#1\endcsname}
+ \def\environ@environname@#1{\@cs@{environ@#1name@}}
+ \def\environ@envname@{environment}
+ \def\environ@bloname@{block}
+ \def\environ@popenv@#1#2#3@{%
+ \gdef\environ@currenv@{{#1}{#2}}\gdef\environ@envstack@{#3}}}
+
+\def\Bdef{\relax\environ@def@{def}{b}}
+\def\Blet{\relax\environ@def@{let}{b}}
+\def\Edef{\relax\environ@def@{def}{e}}
+\def\Elet{\relax\environ@def@{let}{e}}
+
+\def\environ@def@#1#2{%
+ \@ifnextchar@*%
+ {\@expandafter@{\environ@blodef@{#1}{#2}}\@eat@}%
+ {\environ@envdef@{#1}{#2}}}
+
+\def\environ@envdef@#1#2#3{%
+ \@cs@{@#1@}{environ@#2env@#3}}
+
+\def\environ@blodef@#1#2#3{%
+ \@def@{#3}{\environ@B@{#3}}\@def@{end#3}{\environ@E@{#3}}\@cs@{@#1@}{environ@#2blo@#3}}
+
+\def\newgroup{\relax
+ \@ifnextchar@*{\expandafter\environ@newblockgroup@\@eat@}\environ@newenvgroup@}
+
+\def\environ@newblockgroup@#1{%
+ \@def@{#1}{\environ@B@{#1}}\@def@{end#1}{\environ@E@{#1}}%
+ \environ@n@wblockgroup@{#1}}
+\long\def\environ@n@wblockgroup@#1#2#3{%
+ \@def@{environ@bblo@#1}{\begingroup#2}
+ \@def@{environ@eblo@#1}{#3\endgroup}}
+
+\def\environ@newenvgroup@#1{%
+ \environ@n@wenvgroup@{#1}}
+\long\def\environ@n@wenvgroup@#1#2#3{%
+ \@def@{environ@benv@#1}{\begingroup#2}
+ \@def@{environ@eenv@#1}{#3\endgroup}}
+
+\def\newpair{\relax
+ \@ifnextchar@*{\expandafter\environ@newblockpair@\@eat@}\environ@newenvpair@}
+
+\def\environ@newblockpair@#1{%
+ \@def@{#1}{\environ@B@{#1}}\@def@{end#1}{\environ@E@{#1}}%
+ \environ@n@wblockpair@{#1}}
+\long\def\environ@n@wblockpair@#1#2#3{%
+ \@def@{environ@bblo@#1}{#2}
+ \@def@{environ@eblo@#1}{#3}}
+
+\def\environ@newenvpair@#1{%
+ \environ@n@wenvpair@{#1}}
+\long\def\environ@n@wenvpair@#1#2#3{%
+ \@def@{environ@benv@#1}{#2}
+ \@def@{environ@eenv@#1}{#3}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd
new file mode 100644
index 0000000000..179ba9969f
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd
@@ -0,0 +1,332 @@
+% equation.cd
+% Anders G S Svensson
+
+% Source: equation.nw
+% $Revision: 1.17 $
+% $Date: 1996/02/19 22:40:12 $
+
+\usecarrot{label}
+
+\def\equation@cases@begin@{%
+ \left\{\,\vcenter\bgroup \let\\\cr \normalbaselines \m@th
+ \ialign\bgroup $##\hfil$&\quad##\hfil\crcr}
+\def\equation@cases@end@{\crcr\egroup\egroup\right.}
+\def\equation@eqalign@select@[#1]{%
+ \@ifundefined@{equation@vbox@#1@}%
+ {\@Warning@{Invalid eqalign option: #1}\equation@vbox@c@}%
+ {\@cs@{equation@vbox@#1@}}%
+ \bgroup
+ \let\\\cr
+ \openup\jot\m@th
+ \ialign\bgroup
+ \strut\hfil$\displaystyle{##}$
+ &$\displaystyle{{}##}$\hfil\crcr}
+\let\equation@vbox@t@\vtop
+\let\equation@vbox@b@\vbox
+\let\equation@vbox@c@\vcenter
+
+\def\equation@eqalign@begin@{%
+ \,\@ifnextchar@[\equation@eqalign@select@{\equation@eqalign@select@[c]}}
+\def\equation@eqalign@end@{\crcr\egroup\egroup\,}
+\def\equation@matrix@select@[#1]{%
+ \vcenter\bgroup\let\\\cr
+ \@ifundefined@{equation@lhfil@#1@}%
+ {\@Warning@{Invalid matrix option: #1}
+ \@let@{equation@lhfil@#1@}\hfil \@let@{equation@rhfil@#1@}\hfil}
+ {}
+ \normalbaselines\m@th
+ \ialign\bgroup
+ \@cs@{equation@lhfil@#1@}$##$\@cs@{equation@rhfil@#1@}&&\quad
+ \@cs@{equation@lhfil@#1@}$##$\@cs@{equation@rhfil@#1@}\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}}
+\let\equation@lhfil@l@\relax \let\equation@rhfil@l@\hfil
+\let\equation@lhfil@c@\hfil \let\equation@rhfil@c@\hfil
+\let\equation@lhfil@r@\hfil \let\equation@rhfil@r@\relax
+
+\def\equation@matrix@begin@{%
+ \,\@ifnextchar@[\equation@matrix@select@{\equation@matrix@select@[c]}}
+\def\equation@matrix@end@{%
+ \crcr\mathstrut\crcr
+ \noalign{\kern-\baselineskip}\egroup\egroup\,}
+\def\pmatrixdelimiters#1#2{%
+ \def\equation@pmatrixdelimiter@left@{#1}%
+ \def\equation@pmatrixdelimiter@right@{#2}}
+\pmatrixdelimiters()
+\def\equation@displaymath@begin@{%
+ \@ifmmode@
+ {\let\equation@displaymath@end@\relax}%
+ {$$\def\equation@displaymath@end@{$$}}}
+
+\def\equation@align@displaymath@begin@{\equation@displaymath@begin@}
+\def\equation@align@displaymath@end@{\equation@displaymath@end@}
+
+\def\equation@equation@begin@{%
+ \equation@insertifstarred@\equation@equation@nonumber@
+ \equation@equation@begin@primitive@}
+
+\def\equation@equation@end@{%
+ \equation@stepcounter@\currentcounter
+ \equation@eqno@\equation@number@ \equation@equation@label@
+ \equation@displaymath@end@\@ignorespaces@}
+\def\equation@equation@begin@primitive@#1{%
+ \equation@displaymath@begin@
+ #1\equation@equation@numbering@
+ \def\equation@align@displaymath@begin@{%
+ \def\equation@align@displaymath@end@{\egroup$\hss\egroup}%
+ \hbox to\z@\bgroup
+ \hss$\vcenter\bgroup
+ \equation@align@nonumbers@ \let\equation@tagcr@\crcr}}
+
+\def\equation@insertifstarred@#1#2{#2\relax}
+\let\equation@stepcounter@\@eat@
+\def\equation@equation@nonumber@{%
+ \let\equation@eqnobox@choice@\@eattwo@}
+\def\rightequationtags{%
+ \def\equation@eqno@{\equation@eqnobox@choice@\eqno}%
+ \let\equation@tagbox@\equation@tagbox@right@}
+
+\def\leftequationtags{%
+ \def\equation@eqno@{\equation@eqnobox@choice@\leqno}%
+ \let\equation@tagbox@\equation@tagbox@left@}
+
+\def\equation@tagbox@left@#1{\hbox to \displaywidth{#1\hss}}
+\def\equation@tagbox@right@#1{#1}
+
+\rightequationtags
+
+\let\equation@eqnobox@choice@\@eattwo@
+\def\equation@eqnobox@#1#2{#1{\hbox{#2}}}
+\def\equation@equation@label@{\equation@equation@label@primitive@}
+\let\equation@equation@label@primitive@\relax
+
+\def\equation@label@generate@{\@warning@{Missing \tag}\@eat@}
+
+\def\equation@equation@numbering@{%
+ \def\label##1{%
+ \def\equation@equation@label@primitive@{%
+ \equation@label@generate@{##1}}}%
+ \let\tag\equation@equation@tag@
+ \def\notag{%
+ \let\equation@eqno@\@eat@ \let\equation@equation@label@\relax}}
+
+\def\equation@equation@tag@{%
+ \let\equation@eqnobox@choice@\equation@eqnobox@
+ \@ifnextchar@*%
+ {\expandafter\equation@equation@tag@star@\@eat@}
+ \equation@equation@tag@nostar@}
+\def\equation@equation@tag@star@#1{%
+ \def\equation@number@{#1}%
+ \def\equation@label@generate@##1{\definexr{##1}{#1}{empty}}}
+
+\def\equation@equation@tag@nostar@#1{%
+ \def\equation@number@{\@cs@{\currentcounter tag}{#1}}%
+ \def\equation@label@generate@##1{\definexr{##1}{#1}\currentcounter}}
+\def\equation@display@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@display@begin@primitive@}
+
+\def\equation@display@end@{%
+ \equation@crcr@ \egroup \equation@align@displaymath@end@\@ignorespaces@}
+
+\def\equation@display@begin@primitive@#1{%
+ \equation@align@displaymath@begin@
+ #1\equation@align@numbering@
+ \displ@y \tabskip\z@skip
+ \halign\bgroup
+ &{\gdef\equation@crcr@{\equation@cr@}}%
+ \hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr}
+\def\equation@subdisplay@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subdisplay@begin@primitive@}
+
+\def\equation@subalign@numbering@{%
+ \def\equation@number@{\subequationtag\thesubequation}%
+ \def\currentcounter{subequation}%
+ \equation@tweaknumbering@
+ \equation@align@numbering@primitive@}
+
+\let\equation@tweaknumbering@\relax
+
+\def\equation@subdisplay@begin@primitive@#1{%
+ \equation@display@begin@primitive@{#1\equation@subalign@numbering@\@eat@}}
+\def\equation@align@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@align@begin@primitive@}
+
+\def\equation@align@end@{%
+ \equation@crcr@ \egroup \equation@align@displaymath@end@\@ignorespaces@}
+
+\def\equation@align@begin@primitive@#1{%
+ \equation@align@displaymath@begin@
+ #1\equation@align@numbering@
+ \displ@y \tabskip\centering
+ \halign to\displaywidth\bgroup
+ &{\gdef\equation@crcr@{\equation@cr@}}%
+ \hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering\crcr}
+\def\equation@subalign@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subalign@begin@primitive@}
+
+\def\equation@subalign@begin@primitive@#1{%
+ \equation@align@begin@primitive@{#1\equation@subalign@numbering@\@eat@}}
+\def\equation@align@numbering@primitive@{%
+ \def\\{\equation@cr@}%
+ \global\let\equation@align@label@\relax
+ \global\let\equation@align@label@generate@\equation@label@generate@
+ \def\label##1{%
+ \gdef\equation@align@label@{\equation@align@label@generate@{##1}}}%
+ \let\tag\equation@align@tag@ \let\notag\equation@align@notag@}
+\def\equation@align@numbering@{%
+ \def\currentcounter{equation}%
+ \equation@align@numbering@primitive@}
+
+\def\equation@align@nonumbers@{%
+ \def\equation@cr@{\crcr}\def\equation@crcr@{\crcr}}%
+\let\equation@align@notag@\equation@align@nonumbers@
+\def\equation@align@tag@{\relax
+ \def\equation@cr@{\equation@tagcr@}%
+ \gdef\equation@crcr@{\equation@tagcr@}%
+ \@ifnextchar@*%
+ {\expandafter\equation@align@tag@star@\@eat@}%
+ \equation@align@tag@nostar@}
+
+\def\equation@align@tag@star@#1{%
+ \equation@align@buildtab@\@echo@{#1}%
+ \gdef\equation@align@label@generate@##1{\definexr{##1}{#1}{empty}}}
+\def\equation@align@tag@nostar@#1{%
+ \equation@align@buildtab@{\@cs@{\currentcounter tag}}{#1}%
+ \gdef\equation@align@label@generate@##1{\definexr{##1}{#1}\currentcounter}}
+
+\def\equation@tagcr@{%
+ \equation@numbertab@tag@ \crcr
+ \noalign{%
+ \equation@align@label@
+ \global\let\equation@align@label@\relax
+ \global\let\equation@align@label@generate@\@eat@
+ \gdef\equation@crcr@{\crcr}}}
+
+\def\equation@align@buildtab@#1#2{%
+ \gdef\equation@numbertab@tag@{&\omit \llap{\equation@tagbox@{#1{#2}}}}}
+
+\let\equation@crcr@\crcr \let\equation@cr@\crcr
+\let\equation@autocr@\crcr
+\def\equationtag#1{(#1)}
+\let\subequationtag\equationtag
+
+\DeclareOption{number}
+ {\usecarrot{counter}
+ \newcounter{equation}
+ \newcounter{subequation}[equation]
+ \def\thesubequation{\theequation\alph{subequation}}
+ \def\equation@insertifstarred@#1#2{\@ifnextchar@*{\@eatnextchar@{#2#1}}{#2\relax}}
+ \let\equation@stepcounter@\stepcounter
+ \let\equation@eqnobox@choice@\equation@eqnobox@
+ \def\equation@number@{\equationtag\theequation}
+ \def\equation@equation@nonumber@{%
+ \let\equation@eqnobox@choice@\@eattwo@
+ \let\equation@stepcounter@\@eat@}
+ \def\equation@label@generate@#1{\definelabel{#1}\currentcounter}
+ \def\equation@equation@numbering@{%
+ \def\currentcounter{equation}%
+ \def\label##1{%
+ \def\equation@equation@label@primitive@{%
+ \equation@label@generate@{##1}}}%
+ \let\tag\equation@equation@tag@
+ \let\notag\equation@equation@notag@}
+ \def\equation@equation@tag@{\relax
+ \let\equation@stepcounter@\@eat@
+ \@ifnextchar@*%
+ {\expandafter\equation@equation@tag@star@\@eat@}
+ \equation@equation@tag@nostar@}
+ \def\equation@equation@notag@{%
+ \let\equation@eqno@\@eat@ \let\equation@equation@tag@\relax
+ \let\equation@stepcounter@\@eat@}
+ \def\equation@tweaknumbering@{%
+ \@def@{counter@ctr++@subequation}{%
+ \stepcounter{equation}%
+ \counter@stepcounter@{subequation}%
+ \@gdef@{counter@ctr++@subequation}{%
+ \counter@stepcounter@{subequation}}}}%
+ \def\equation@autocr@{%
+ \stepcounter\currentcounter
+ \equation@align@label@ \equation@numbertab@ \crcr
+ \noalign{%
+ \global\let\equation@align@label@\relax
+ \global\let\equation@align@label@generate@\equation@label@generate@
+ \gdef\equation@crcr@{\crcr}}}
+ \let\equation@cr@\equation@autocr@
+ \def\equation@numbertab@{&\omit \llap{\equation@tagbox@\equation@number@}}}
+
+\DeclareOption{arg}
+ {\def\cases#1{\equation@cases@begin@ #1\equation@cases@end@}
+ \def\equation@eqalign@arg@[#1]#2{%
+ \,\equation@eqalign@select@[#1]#2\equation@eqalign@end@}
+ \def\eqalign{\null
+ \@ifnextchar@[\equation@eqalign@arg@{\equation@eqalign@arg@[c]}}
+ \def\equation@matrix@arg@[#1]#2{%
+ \,\equation@matrix@select@[#1]#2\equation@matrix@end@}
+ \def\equation@pmatrix@arg@[#1]#2{%
+ \left\equation@pmatrixdelimiter@left@
+ \equation@matrix@arg@[#1]#2\equation@matrix@end@
+ \right\rpmtxdel@\ignorespaces}
+ \def\matrix{\null
+ \@ifnextchar@[\equation@matrix@arg@{\equation@matrix@arg@[c]}}
+ \def\pmatrix{\null
+ \@ifnextchar@[\equation@pmatrix@arg@{\equation@pmatrix@arg@[c]}}
+ \def\equation{%
+ \equation@insertifstarred@\equation@equation@nonumber@
+ \equation@equation@arg@}
+ \def\equation@equation@arg@#1#2{%
+ \equation@equation@begin@primitive@#1#2\equation@equation@end@}
+ \def\display{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@display@arg@}
+ \def\equation@display@arg@#1#2{%
+ \equation@display@begin@primitive@#1#2\equation@display@end@}
+ \def\subdisplay{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subdisplay@arg@}
+ \def\equation@subdisplay@arg@#1#2{%
+ \equation@subdisplay@begin@primitive@#1#2\equation@display@end@}
+ \def\align{%
+ \equation@insertifstarred@\equation@align@nonumbers@\equation@align@arg@}
+ \def\equation@align@arg@#1#2{%
+ \equation@align@begin@primitive@#1#2\equation@align@end@}
+ \def\subalign{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subalign@arg@}
+ \def\equation@subalign@arg@#1#2{%
+ \equation@subalign@begin@primitive@#1#2\equation@align@end@}}
+
+\DeclareOption{block}
+ {\usecarrot{environ}
+ \newpair*{cases}{\equation@cases@begin@}{\equation@cases@end@}
+ \newpair*{eqalign}{\null\equation@eqalign@begin@}{\equation@eqalign@end@}
+ \newpair*{matrix}{\null\equation@matrix@begin@}{\equation@matrix@end@}
+ \newpair*{pmatrix}
+ {\left\equation@pmatrixdelimiter@left@ \equation@matrix@begin@}
+ {\equation@matrix@end@ \right\equation@pmatrixdelimiter@right@}
+ \newpair*{equation}{\equation@equation@begin@}{\equation@equation@end@}
+ \newpair*{display}{\equation@display@begin@}{\equation@display@end@}
+ \newpair*{subdisplay}{\equation@subdisplay@begin@}{\equation@display@end@}
+ \newpair*{align}{\equation@align@begin@}{\equation@align@end@}
+ \newpair*{subalign}{\equation@subalign@begin@}{\equation@align@end@}}
+
+\DeclareOption{environ}
+ {\usecarrot{environ}
+ \newpair{cases}{\equation@cases@begin@}{\equation@cases@end@}
+ \newpair{eqalign}{\null\equation@eqalign@begin@}{\equation@eqalign@end@}
+ \newpair{matrix}{\null\equation@matrix@begin@}{\equation@matrix@end@}
+ \newpair{pmatrix}
+ {\left\equation@pmatrixdelimiter@left@ \equation@matrix@begin@}
+ {\equation@matrix@end@\right\equation@pmatrixdelimiter@right@}
+ \newpair{equation}{\equation@equation@begin@}{\equation@equation@end@}
+ \newpair{display}{\equation@display@begin@}{\equation@display@end@}
+ \newpair{subdisplay}{\equation@subdisplay@begin@}{\equation@display@end@}
+ \newpair{align}{\equation@align@begin@}{\equation@align@end@}
+ \newpair{subalign}{\equation@subalign@begin@}{\equation@align@end@}}
+
+\IfOption{arg}{}{\IfOption{block}{}{\Option{environ}}}
+
+\def\intertext#1{\noalign{#1}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd
new file mode 100644
index 0000000000..e494944e25
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd
@@ -0,0 +1,42 @@
+% index.cd
+% Anders G S Svensson
+
+% Source: index.nw
+% $Revision: 1.4 $
+% $Date: 1996/02/19 19:08:56 $
+
+\usecarrot{auxfile}
+
+\def\newindexfile{\bgroup\@ignorewhitespace@\index@newindexfile@}
+\def\index@newindexfile@#1{\egroup
+ \newauxfile{#1dx}%
+ \@def@{read#1dx}{\index@readind@{#1}\global\@let@{read#1dx}\relax}%
+ \@def@{read#1nd}{\@cs@{read#1dx}}}
+\def\index@readind@#1{%
+ \IfFileExists{\jobname.#1nd}%
+ {\input\jobname.#1nd\relax}%
+ {}}
+
+\def\readindexfile{\bgroup\@ignorewhitespace@\index@readindexfile@}
+\def\index@readindexfile@#1{\egroup
+ \@ifundefined@{auxfile@aux@#1dx}%
+ {\@Warning{Undeclared index file: #1}}%
+ {\@cs@{read#1dx}}}
+
+\def\writeindexentry{\bgroup\@ignorewhitespace@\index@writeindexentry@}
+\def\index@writeindexentry@#1{\egroup
+ \@ifundefined@{auxfile@aux@#1dx}%
+ {\@Warning{Undeclared index file: #1}\@eat@}%
+ {\index@writeidx@{#1}}}
+
+\def\index@writeidx@#1#2{%
+ \@cs@{open#1dx}%
+ \def\@tmp@{\indexentry{#2}}%
+ \edef\@action@{%
+ \expandafter\noexpand\csname write#1dx\endcsname{%
+ \@meaning@\@tmp@{\noexpand\folio}}}%
+ \@action@}
+
+\newindexfile{i}
+
+\def\index{\writeindexentry{i}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd
new file mode 100644
index 0000000000..0a10bbb3a8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd
@@ -0,0 +1,18 @@
+% label.cd
+% Anders G S Svensson
+
+% Source: label.nw
+% $Revision: 1.2 $
+% $Date: 1996/02/19 02:05:49 $
+
+\usecarrot{counter,xr}
+
+\def\definelabel#1#2{%
+ \@ifundefined@{counter@ctn@#2}%
+ {\@Warning@{Unknown class: #2}}%
+ {\definexr{#1}{\@cs@{the#2}}{#2}{\noexpand\folio}}}
+\def\label#1{\definelabel{#1}{\currentcounter}}
+
+\let\ref\refxr
+\let\pageref\pagexr
+\let\pagedef\definepage
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_10 b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_10
new file mode 100644
index 0000000000..89094d1340
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_10
@@ -0,0 +1 @@
+07 Jun 1996
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd
new file mode 100644
index 0000000000..0eb70fb8d9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd
@@ -0,0 +1,223 @@
+% section.cd
+% Anders G S Svensson
+
+% Source: section.nw
+% $Revision: 1.25 $
+% $Date: 1996/06/04 12:57:01 $
+
+\def\section@newunnumberedsection@#1#2{
+ \section@initsection@{#2}
+ \@def@{#2banneru}{%
+ \@cs@{section@banner@\@cs@{section@style@#2}}{#2}{}}%
+ \@def@{#2}{\section@unnumsect@{#1}{#2}}
+ \@ifnext@<{\section@skip@{pre}{#2}%
+ {\@eatspace@{\section@skip@{post}{#2}{}}}}%
+ {}}
+\let\section@newsection@\section@newunnumberedsection@
+
+\def\section@unnumsect@#1#2#3{%
+ \@ifnext@[%
+ {\section@@unnumsect@{#1}{#2}{#3}}%
+ {\section@@unnumsect@{#1}{#2}{#3}[#3]}}
+
+\def\section@@unnumsect@#1#2#3[#4]{%
+ \section@section@{#2}{%
+ \section@sectionbanner@{#2}{\@cs@{#2banneru}{#3}}%
+ \@expandafter@{\@expandafter@{#1*{toc}{#2}}}%
+ \csname section@\@cs@{section@tocchoice@#2}choice@\endcsname{#3}{#4}%
+ \@expandafter@{\@expandafter@{\@cs@{#2mark}}}%
+ \csname section@\@cs@{section@markchoice@#2}choice@\endcsname{#3}{#4}%
+ }\ignorespaces}%
+\def\section@skip@#1#2#3<#4>{\relax
+ \@ifempty@{#4}%
+ {#3}%
+ {\@def@{section@#1skip@#2}{\@s@\z@\@sum@\@s@#4+@\vskip\@s@}#3}}
+
+\def\section@newnumberedsection@#1#2{\relax
+ \@ifnextchar@*%
+ {\@expandafter@{\section@newunnumberedsection@{#1}{#2}}\@eat@}%
+ {\section@@newnumberedsection@{#1}{#2}}}
+
+\def\section@@newnumberedsection@#1#2{%
+ \section@initsection@{#2}
+ \@def@{#2banneru}{%
+ \@cs@{section@banner@\@cs@{section@style@#2}}{#2}{}}%
+ \@def@{#2banner}{%
+ \@cs@{section@banner@\@cs@{section@style@#2}}{#2}{\@cs@{the#2}}}%
+ \@ifnext@[%
+ {\section@newnumsectwithin@{#1}{#2}}
+ {\section@newnumsect@{#1}{#2}}}
+
+\def\section@sectionbanner@#1#2{{\@cs@{section@headinghook@#1}#2}}
+\def\section@initsection@#1{%
+ \@def@{#1plug}{\defaultsectionplug}
+ \@def@{#1mark}{\defaultsectionmark{#1}}
+ \@def@{section@markchoice@#1}{\section@markchoice@def@ult}
+ \@def@{section@tocchoice@#1}{\section@tocchoice@def@ult}
+ \@def@{section@style@#1}{\section@style@def@ult}
+ \@def@{section@preskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultpresectionskip+@\vskip\@s@}
+ \@def@{section@postskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultpostsectionskip+@\vskip\@s@}
+ \@def@{section@prehook@#1}{\section@prehook@def@ult}%
+ \@def@{section@posthook@#1}{\section@posthook@def@ult}%
+ \@def@{section@headinghook@#1}{\section@headinghook@def@ult}}
+
+\def\section@define@#1[#2]{%
+ \@define@{section@#1@#2}}
+
+\def\section@defvar@#1{\relax
+ \@ifnextchar@[{\section@define@{#1}}{\section@define@{#1}[def@ult]}}
+
+\def\presectionhook{\section@defvar@{prehook}}
+\def\postsectionhook{\section@defvar@{posthook}}
+\def\headinghook{\section@defvar@{headinghook}}
+
+\let\section@prehook@def@ult\relax
+\def\section@posthook@def@ult{\penalty200}
+\def\section@headinghook@def@ult{\bf}
+
+\let\defaultsectionmark\@eattwo@
+\def\defaultsectionplug{\hskip.8em}
+\def\defaultpresectionskip{-\lastskip+\bigskipamount+-.5\parskip}
+\def\defaultpostsectionskip{\medskipamount+-.5\parskip}
+
+\def\markchoice{\relax
+ \@ifnextchar@[%
+ {\section@choiceforclass@{mark}}%
+ {\section@choiceforclass@{mark}[def@ult]}}
+\def\tocchoice{\relax
+ \@ifnextchar@[%
+ {\section@choiceforclass@{toc}}%
+ {\section@choiceforclass@{toc}[def@ult]}}
+\def\section@choiceforclass@#1[#2]#3{%
+ \@ifundefined@{section@#3choice@}%
+ {\@Warning@{Invalid choice: #3}}%
+ {\@def@{section@#1choice@#2}{#3}}}
+
+\def\section@markchoice@def@ult{alt}
+\def\section@tocchoice@def@ult{full}
+
+\def\section@altchoice@#1#2{{#2}}
+\def\section@fullchoice@#1#2{{#1}}
+\def\sectionstyle{\relax
+ \@ifnextchar@[\section@styleforclass@{\section@styleforclass@[def@ult]}}
+\def\section@styleforclass@[#1]{%
+ \@afterassignment@{\section@checkstyle@{#1}}\@t@}
+\def\section@checkstyle@#1{%
+ \@ifundefined@{section@banner@\the\@t@}%
+ {\@Warning@{Unknown section style: \the\@t@}}%
+ {\@edef@{section@style@#1}{\the\@t@}}}
+\def\section@style@def@ult{plain}
+
+\def\section@banner@plain#1#2#3{%
+ \noindent
+ \@ifempty@{#2}{}{#2\@cs@{#1plug}}#3}
+\let\section@banner@p\section@banner@plain
+
+\def\section@banner@word#1#2#3{%
+ \noindent
+ \@ifempty@{#2}%
+ {}%
+ {\@ifundefined@{#1word}{}{\@cs@{#1word}\ }#2\@cs@{#1plug}}#3}
+\let\section@banner@w\section@banner@word
+
+\def\section@banner@center#1#2#3{%
+ \parindent\z@
+ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ \@ifempty@{#2}{}{#2\@cs@{#1plug}}#3\par}
+\let\section@banner@centre\section@banner@center
+\let\section@banner@c\section@banner@center
+
+\def\section@banner@centerword#1#2#3{%
+ \parindent\z@
+ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ \@ifempty@{#2}%
+ {}%
+ {\@ifundefined@{#1word}{}{\@cs@{#1word}\ }#2\@cs@{#1plug}}#3\par}
+\let\section@banner@centreword\section@banner@centerword
+\let\section@banner@cw\section@banner@centerword
+\def\section@newnumsectwithin@#1#2[#3]{
+ \newcounter{#2}[#3]
+ \@def@{#2}{\section@numsectcs@{#1}{#2}}%
+ \@ifnext@<{\section@skip@{pre}{#2}%
+ {\@eatspace@{\section@skip@{post}{#2}{}}}}%
+ {}}
+
+\def\section@newnumsect@#1#2{
+ \newcounter{#2}
+ \@def@{#2}{\section@numsectcs@{#1}{#2}}%
+ \@ifnext@<{\section@skip@{pre}{#2}%
+ {\@eatspace@{\section@skip@{post}{#2}{}}}}%
+ {}}
+
+\def\section@numsectcs@#1#2{\relax
+ \@ifnextchar@*%
+ {\section@numsectnonum@{#1}{#2}}%
+ {\section@numsect@{#1}{#2}}}
+
+\def\section@numsectnonum@#1#2#3#4{\par
+ \@ifnext@[%
+ {\section@numsectionnonum@{#1}{#2}{#4}}%
+ {\section@numsectionnonum@{#1}{#2}{#4}[#4]}}
+
+\def\section@numsectionnonum@#1#2#3[#4]{%
+ \section@section@{#2}{%
+ \section@sectionbanner@{#2}{\@cs@{#2banneru}{#3}}%
+ \@expandafter@{\@expandafter@{#1*{toc}{#2}}}%
+ \csname section@\@cs@{section@tocchoice@#2}choice@\endcsname{#3}{#4}%
+ \@expandafter@{\@expandafter@{\@cs@{#2mark}}}%
+ \csname section@\@cs@{section@markchoice@#2}choice@\endcsname{#3}{#4}%
+ }\ignorespaces}
+
+\def\section@numsect@#1#2#3{\par
+ \@ifnext@[%
+ {\section@@numsect@{#1}{#2}{#3}}%
+ {\section@@numsect@{#1}{#2}{#3}[#3]}}
+
+\def\section@@numsect@#1#2#3[#4]{%
+ \stepcounter{#2}%
+ \def\currentcounter{#2}%
+ \section@section@{#2}{%
+ \section@sectionbanner@{#2}{\@cs@{#2banner}{#3}}%
+ \@expandafter@{\@expandafter@{#1{toc}{#2}}}%
+ \csname section@\@cs@{section@tocchoice@#2}choice@\endcsname
+ {#3}{#4}{\@cs@{the#2}}%
+ \@expandafter@{\@expandafter@{\@cs@{#2mark}}}%
+ \csname section@\@cs@{section@markchoice@#2}choice@\endcsname{#3}{#4}%
+ }\ignorespaces}
+
+\DeclareOption{toc}
+ {\usecarrot{toc}
+ \let\newsection\section@newtocsection@}
+
+\DeclareOption{number}
+ {\usecarrot{counter}
+ \let\section@newsection@\section@newnumberedsection@}
+
+\def\newsection{\section@newsection@\section@notocentry@}
+
+\def\section@newtocsection@{\relax
+ \@ifnextchar@*
+ {\expandafter\section@newsection@\expandafter\section@notocentry@\@eat@}
+ {\section@newsection@\writecontentsentry}}
+
+\def\section@notocentry@#1#2{\@eattwo@}
+
+\def\section@section@#1#2{%
+ \@cs@{section@prehook@#1}\relax
+ \@cs@{section@preskip@#1}%
+ #2\par
+ \@cs@{section@posthook@#1}\relax
+ \@cs@{section@postskip@#1}%
+ \postsectionindent}
+
+\def\postsectionindent{%
+ \edef\@action@{\everypar={\hskip-\parindent\the\everypar
+ \everypar={\the\everypar}}}\@action@}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd
new file mode 100644
index 0000000000..19c6e316e6
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd
@@ -0,0 +1,185 @@
+% state.cd
+% Anders G S Svensson
+
+% Source: state.nw
+% $Revision: 1.17 $
+% $Date: 1996/02/22 10:00:43 $
+
+\usecarrot{environ}
+
+\def\state@newstatement@#1#2{%
+ \@def@{#1captionu}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#2}{}}
+ \state@newst@tement@{#1}{#2}\state@beginstate@}
+\let\newstatement\state@newstatement@
+
+\def\state@newst@tement@#1#2#3{%
+ \state@initstatement@{#1}{#2}
+ \state@statecsdef@{#1}{#3}\state@endstate@
+ \@ifnext@<{\state@skip@{pre}{#1}%
+ {\state@skip@{post}{#1}{}}}%
+ {}}
+
+\DeclareOption{block}
+ {\def\state@statecsdef@#1#2#3{%
+ \Bdef*{#1}{#2{#1}}\Edef*{#1}{#3{#1}}}}
+
+\DeclareOption{environ}
+ {\def\state@statecsdef@#1#2#3{%
+ \Bdef{#1}{#2{#1}}\Edef{#1}{#3{#1}}}}
+
+\IfOption{environ}{}{\Option{block}}
+
+\def\state@skip@#1#2#3<#4>{\relax
+ \@ifempty@{#4}{#3}{%
+ \@def@{state@#1skip@#2}{\@s@\z@\@sum@\@s@#4+@\vskip\@s@}#3}}
+
+\def\state@initstatement@#1#2{%
+ \@def@{state@style@#1}{\state@style@def@ult}%
+ \@def@{state@preskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultprestatementskip+@\vskip\@s@}
+ \@def@{state@postskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultpoststatementskip+@\vskip\@s@}
+ \@def@{state@prehook@#1}{\state@prehook@def@ult}%
+ \@def@{state@posthook@#1}{\state@posthook@def@ult}%
+ \@def@{state@captionhook@#1}{\state@captionhook@def@ult}%
+ \@def@{state@bodyhook@#1}{\state@bodyhook@def@ult}%
+ \@def@{#1tag}{\defaultstatementtag{#2}}%
+ \@def@{#1paren}{\defaultstatementparen}%
+ \@def@{#1plug}{\defaultstatementplug}}
+
+\def\state@define@#1[#2]{%
+ \@define@{state@#1@#2}}
+
+\def\state@defvar@#1{\relax
+ \@ifnextchar@[{\state@define@{#1}}{\state@define@{#1}[def@ult]}}
+
+\def\prestatementhook{\state@defvar@{prehook}}
+\def\poststatementhook{\state@defvar@{posthook}}
+\def\captionhook{\state@defvar@{captionhook}}
+\def\bodyhook{\state@defvar@{bodyhook}}
+
+\let\state@prehook@def@ult\relax
+\let\state@posthook@def@ult\relax
+\let\state@bodyhook@def@ult\relax
+\def\state@captionhook@def@ult{\bf}
+
+\def\defaultprestatementskip{-\lastskip+\medskipamount+-.5\parskip}
+\def\defaultpoststatementskip{\medskipamount+-.5\parskip}
+\def\defaultstatementparen#1{(#1)}
+\def\defaultstatementplug{\hskip.75em}
+\def\defaultstatementtag#1#2{#1 #2}
+
+\def\state@beginstate@#1{\par
+ \begingroup
+ \@cs@{state@prehook@#1}%
+ \@cs@{state@preskip@#1}%
+ \state@statenonum@{#1}{u}}
+
+\def\state@endstate@#1{\par
+ \@cs@{state@posthook@#1}%
+ \@cs@{state@postskip@#1}%
+ \endgroup\ignorespaces}
+
+\def\state@statenonum@#1#2{%
+ \@ifnextchar@[{\state@state@{#1}{#2}}{\state@state@{#1}{#2}[]}}
+
+\def\state@state@#1#2[#3]{\relax
+ \state@statementcaption@{#1}{\@cs@{#1caption#2}{#3}}\ignorespaces}
+
+\def\state@statementcaption@#1#2{%
+ {\@cs@{state@captionhook@#1}#2}\@cs@{state@bodyhook@#1}}
+
+\def\statementstyle{\relax
+ \@ifnextchar@[\state@styleforclass@{\state@styleforclass@[def@ult]}}
+\def\state@styleforclass@[#1]{%
+ \@afterassignment@{\state@checkstyle@{#1}}\@t@}
+\def\state@checkstyle@#1{%
+ \@ifundefined@{state@caption@\the\@t@}%
+ {\@Warning@{Unknown statement style: \the\@t@}}%
+ {\@edef@{state@style@#1}{\the\@t@}}}
+\def\state@style@def@ult{post}
+
+\def\state@caption@post#1#2#3#4{%
+ \noindent #2%
+ \@ifempty@{#3}{}{\ #3}%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}}
+
+\def\state@caption@pre#1#2#3#4{%
+ \noindent\@ifempty@{#3}{}{#3\ }%
+ #2%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}}
+
+\def\state@caption@nlpost#1#2#3#4{%
+ \noindent #2%
+ \@ifempty@{#3}{}{\ #3}%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}%
+ \unskip\par\penalty10000\smallskip\noindent}
+
+\def\state@caption@nlpre#1#2#3#4{%
+ \noindent \@ifempty@{#3}{}{#3\ }%
+ #2%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}%
+ \unskip\par\penalty10000\smallskip\noindent}
+
+\def\state@caption@clpre#1#2#3#4{%
+ {\parindent\z@ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ \@ifempty@{#3}{}{#3\ }%
+ #2%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}\par}%
+ \unskip\par\penalty10000\smallskip\noindent}
+
+\def\state@caption@clpost#1#2#3#4{%
+ {\parindent\z@ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ #2%
+ \@ifempty@{#3}{}{\ #3}%
+ \@ifempty@{#4}{}{\statementspace\@cs@{#1paren}{#4}}\@cs@{#1plug}%
+ \unskip\par}%
+ \penalty10000\smallskip\noindent}
+\def\state@newnumberstatement@{%
+ \@ifnextchar@*%
+ {\expandafter\state@newstatement@\@eat@}%
+ \state@newstatementwithnumbers@}
+
+\def\state@newstatementwithnumbers@#1{%
+ \@ifnextchar@[%
+ {\state@newstatementwithin@{#1}}%
+ {\state@newstatementwith@{#1}}}
+
+\def\state@newstatementwithin@#1[#2]#3{
+ \newcounter{#1}[#2]
+ \@def@{#1caption}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#3}{\@cs@{the#1}}}
+ \@def@{#1captionu}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#3}{}}
+ \state@newst@tement@{#1}{#3}\state@beginnumstate@}
+
+\def\state@newstatementwith@#1#2{%
+ \@def@{#1caption}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#2}{\@cs@{the#1}}}
+ \@def@{#1captionu}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#2}{}}
+ \@ifnextchar@[%
+ {\state@newst@tementwith@{#1}{#2}}%
+ {\newcounter{#1}\state@newst@tement@{#1}{#2}\state@beginnumstate@}}
+
+\def\state@newst@tementwith@#1#2[#3]{%
+ \numberwith{#1}{#3}\state@newst@tement@{#1}{#2}\state@beginnumstate@}
+
+\def\state@beginnumstate@#1{\par
+ \begingroup
+ \@cs@{state@prehook@#1}%
+ \@cs@{state@preskip@#1}%
+ \@ifnextchar@*%
+ {\@expandafter@{\state@statenonum@{#1}{u}}\@eat@}%
+ {\stepcounter{#1}\def\currentcounter{#1}\state@statenonum@{#1}{}}}
+
+\DeclareOption{number}
+ {\usecarrot{counter}
+ \let\newstatement\state@newnumberstatement@}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd
new file mode 100644
index 0000000000..be1d614a11
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd
@@ -0,0 +1,13 @@
+% theorem.cd
+% Anders G S Svensson
+
+% Source: theorem.nw
+% $Revision: 1.1 $
+% $Date: 1996/02/11 10:47:00 $
+
+\PassToCarrot{state}
+
+\let\newtheorem\newstatement
+\let\theoremstyle\statementstyle
+\let\pretheoremhook\prestatementhook
+\let\posttheoremhook\poststatementhook
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd
new file mode 100644
index 0000000000..3f65de6bae
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd
@@ -0,0 +1,21 @@
+% toc.cd
+% Anders G S Svensson
+
+% Source: toc.nw
+% $Revision: 1.4 $
+% $Date: 1996/02/20 09:22:32 $
+
+\usecarrot{contents}
+
+\newcontentsfile{toc}
+
+\def\writetocentry{\relax
+ \@ifnextchar@*%
+ {\expandafter\toc@writeentry@
+ \expandafter\contents@sentry@\@eat@}%
+ {\toc@writeentry@\contents@entry@}}
+
+\def\toc@writeentry@#1{\contents@writeentry@{#1}{toc}}
+
+\def\readtocfile{\readcontentsfile{toc}}
+\def\writetocfile{\writecontentsfile{toc}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd
new file mode 100644
index 0000000000..66edbf0bbc
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd
@@ -0,0 +1,45 @@
+% xr.cd
+% Anders G S Svensson
+
+% Source: xr.nw
+% $Revision: 1.5 $
+% $Date: 1996/03/23 18:44:30 $
+
+\usecarrot{auxfile}
+
+\newauxfile{cxr}
+
+\def\definexr#1#2#3{%
+ \readcxr \opencxr
+ \edef\@action@{%
+ \noexpand\writecxr{%
+ \noexpand\noexpand\noexpand\xr@definexr@
+ {#1}{#2}{#3}{\noexpand\folio}}}%
+ \@action@}
+
+\def\xr@definexr@#1#2#3#4{%
+ \@gdef@{xr@xr@#1}{\xr@xref@{#3}{#2}{#4}}}
+
+\def\refxr{\relax
+ \readcxr \opencxr
+ \@ifnextchar@*%
+ {\def\xr@xref@{\expandafter\@FirstOfTwo@\@eat@}%
+ \expandafter\xr@ref@\@eat@}%
+ {\let\xr@xref@\xr@tagcs@ \xr@ref@}}
+\def\xr@tagcs@#1#2{%
+ \@ifundefined@{#1tag}\@echo@{\@cs@{#1tag}}{#2}\@eat@}
+\let\emptytag\@echo@
+
+\def\xr@ref@#1{%
+ \@ifundefined@{xr@xr@#1}%
+ {\@Warning@{Undefined label: #1}[#1]}%
+ {\@cs@{xr@xr@#1}}}
+
+\def\pagexr#1{%
+ \readcxr \opencxr
+ \@ifundefined@{xr@xr@#1}%
+ {\@Warning@{Undefined label: #1}[#1]}%
+ {\def\xr@xref@{\expandafter\@SecondOfTwo@\@eat@}\@cs@{xr@xr@#1}}}
+
+\let\pagetag\@echo@
+\def\definepage#1{\definexr{#1}{\noexpand\folio}{page}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd
new file mode 100644
index 0000000000..0224e99b06
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd
@@ -0,0 +1,86 @@
+% biblio.cd
+% Anders G S Svensson
+
+% Source: biblio.nw
+% $Revision: 1.1 $
+% $Date: 1996/02/23 01:01:48 $
+
+\usecarrot{cite,environ,xr}
+
+\def\biblio@begin@{\par
+ \readcxr \opencxr
+ \@settodimen@\leftskip\wd{\citetag{\biblio@widest@}}%
+ \advance\leftskip by \bibindent\relax
+ \parindent\z@
+ \biblio@bibliodefs@}
+
+\let\biblio@widest@\@empty@
+\def\bibindent{2em}
+\def\bibsep{12pt plus 1pt minus 1pt}
+
+\def\biblio@entry@begin@#1{\par
+ \penalty-100
+ \@settodimen@\@d@\wd{\citetag{#1}}%
+ \setbox\@b@=\hbox{\citetag\biblio@widest@}%
+ \ifdim\@d@>\wd\@b@ \gdef\biblio@widest@{#1}\fi
+ \leavevmode\llap{\hbox to \leftskip{\citetag{#1}\hss}}%
+ \parskip\bibsep\relax}
+
+\def\biblio@end@{\par
+ \writecxr{\gdef\noexpand\biblio@widest@{\biblio@widest@}}}
+\def\abbrev{\@ifnextchar@[\biblio@def@\biblio@ref@}
+\def\biblio@def@[#1]#2{%
+ \def\@tmp@{#1}\definexr{@abbrev@#2@}{\@meaning@\@tmp@}{@abbrev@}}
+\def\biblio@ref@#1{\refxr{@abbrev@#1@}}
+
+\let\@abbrev@tag\@echo@
+
+{\catcode`\/=13
+ \catcode`\|=13
+ \catcode`\*=13
+ \catcode`\#=13
+ \catcode`\%=6
+
+ \gdef\biblio@bibliodefs@{
+ \catcode`\/=13 \catcode`\|=13 \catcode`\*=13 \catcode`\#=13
+ \def/{\@ifnextchar@{\noexpand/}{\biblio@slash@}{\biblio@it@}}
+ \def|{\@ifnextchar@{\noexpand|}{\biblio@bar@}{\biblio@bf@}}
+ \def*{\@ifnextchar@{\noexpand*}{\biblio@star@}{\biblio@ref@}}
+ \let#\bibentry
+ \biblio@contplus@ \let\\\biblio@newline@}
+
+ \xdef\biblio@contplus@{\let\noexpand\+\noexpand\biblio@contline@}
+
+ \gdef\biblio@it@%1/{{\it \let/\biblio@slash@ %1}\@ifnextchar@.{}{\@ifnextchar@,{}{\/}}}
+ \gdef\biblio@bf@%1|{{\bf \let|\biblio@bar@ %1}}
+}
+\def\biblio@slash@#1{/}\def\biblio@bar@#1{|}\def\biblio@star@{*}
+\def\biblio@newline@{\hfil\break}
+\def\biblio@contline@{\biblio@newline@\hbox to 1em{\hfil}}
+\def\bibentry{\@ifnextchar@[\biblio@entry@\biblio@entry@noopt@}
+\def\biblio@entry@[#1]#2{\citedef{#2}{#1}%
+ \biblio@entry@begin@{#1}\ignorespaces}
+\def\biblio@entry@noopt@#1{%
+ \@Warning@{Missing biblio label: #1}%
+ \biblio@entry@[?]{#1}}
+
+\DeclareOption{numeric}
+ {\usecarrot{counter}
+ \newcounter{bibentry}
+ \def\biblio@entry@[#1]#2{\biblio@entry@noopt@{#2}}
+ \def\biblio@entry@noopt@#1{%
+ \stepcounter{bibentry}%
+ \citedef{#2}{\thebibentry}%
+ \biblio@entry@begin@\thebibentry}}
+
+\DeclareOption{block}
+ {\newgroup*{biblio}{\biblio@begin@}{\biblio@end@}}
+
+\DeclareOption{environ}
+ {\newgroup{biblio}{\biblio@begin@}{\biblio@end@}}
+
+\IfOption{block}{}{\Option{environ}}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd
new file mode 100644
index 0000000000..61a306e0d6
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd
@@ -0,0 +1,73 @@
+% rcs.cd
+% Anders G S Svensson
+% $Date: 1996/02/10 21:43:45 $
+% $Revision: 1.1 $
+
+% Convert RCS strings into something palatable.
+
+\def\rcsdate$#1: #2/#3/#4#5 #6 ${\dateformat#4#5 #3 #2 }
+
+% #1#2 <- day
+% #3 <- month
+% #4 <- year
+%
+\def\DMYformat#1#2 #3 #4 {\dayformat#1#2 \monthname{#3} #4}
+\def\MDYformat#1#2 #3 #4 {\monthname{#3} \dayformat#1#2, #4}
+\def\stampformat#1#2 #3 #4 {#1#2 \shortmonthname{#3} #4}
+
+\DeclareOption{DMY}{\let\dateformat\DMYformat}
+\DeclareOption{MDY}{\let\dateformat\MDYformat}
+\DeclareOption{stamp}{\let\dateformat\stampformat}
+
+\def\dayformat#1#2{\ifnum#1>0 #1\fi#2}
+
+\DeclareOption{leadingzero}{\let\dayformat\relax}
+
+\def\monthname#1{%
+ \ifcase#1\relax
+ \or January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi}
+
+\def\shortmonthname#1{%
+ \ifcase#1\relax
+ \or Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi}
+
+\DeclareOption{shortmonths}{\let\monthname\shortmonthname}
+
+\def\rcsrevision$#1: #2 ${Revision \revisionformat#2 }
+
+\def\revisionformat#1 {#1}
+
+\def\r@patchlevels{\def\revisionformat##1 {\rcsstrip{13}{##1}}}
+\def\r@shortrevisions{\def\revisionformat##1 {\rcsstrip3{##1}}}
+
+\DeclareOption{patchlevels}{\r@patchlevels}
+\DeclareOption{shortrevisions}{\r@shortrevisions}
+
+\def\rcsstrip#1#2{{\count0=1 \r@rcspeel{#1}#2. }}
+
+\def\r@rcspeel#1#2.#3 {%
+ \r@scan#10 {\r@separate#2}%
+ \def\r@tmp{#3}%
+ \ifx\r@tmp\empty
+ \let\r@action\relax
+ \else
+ \def\r@action{\advance\count0 by 1 \r@rcspeel{#1}#3 }%
+ \fi
+ \r@action}
+\def\r@separate{\def\r@separate{.}}
+
+\def\r@scan#1#2 #3{%
+ \ifnum#1=0
+ \def\r@action{#3}%
+ \else
+ \ifnum\count0=#1
+ \let\r@action\relax
+ \else
+ \def\r@action{\r@scan#2 {#3}}%
+ \fi
+ \fi
+ \r@action}
+
+\ExecuteOptions{MDY}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs
new file mode 100644
index 0000000000..0d8ffdf10d
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs
@@ -0,0 +1,25 @@
+% arrsy.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/09 07:56:23 $
+% $Revision: 1.5 $
+
+% Created: Mon Feb 5 01:27:03 1996
+% Time-stamp: <1996/02/08 23:56:01 PST agss@klagshamn>
+
+\input arrsy
+
+\DeclareFont{arrsy}{10}
+
+\DeclareMathFamily{arrsy}{arrsy}
+
+\@famdef@{arrsy}{\arrfam}
+\@fnlet@{arrsy}{10}\A@tenarr
+\@fnlet@{arrsy}{7}\A@sevenarr
+\@fnlet@{arrsy}{5}\A@fivearr
+
+\selectmathfonts{arrsy}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs
new file mode 100644
index 0000000000..83ea1629b8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs
@@ -0,0 +1,49 @@
+% bbm.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/07 01:20:11 $
+% $Revision: 1.7 $
+
+% Created: Mon Feb 5 00:54:19 1996
+% Time-stamp: <1996/02/06 17:15:44 PST agss@klagshamn>
+
+\DeclareFont{bbmbxsl}{10}% bold extended slanted
+\DeclareFont{bbmbx}{5-10,12}% bold extended
+\DeclareFont{bbmb}{10}% bold
+\DeclareFont{bbmdunh}{10}% bold dunhill
+\DeclareFont{bbmfib}{8}% bold fibonacci
+\DeclareFont{bbmsltt}{10}% slanted typewriter
+\DeclareFont{bbmsl}{8-10,12}% slanted
+\DeclareFont{bbmssbx}{10}% sans serif bold extended
+\DeclareFont{bbmssdc}{10}% sans serif demibold condensed
+\DeclareFont{bbmssi}{8-10,12,17}% slanted sans serif
+\DeclareFont{bbmssq}{8}% sans serif quotation style
+\DeclareFont{bbmssqi}{8}% slanted sans serif quotation style
+\DeclareFont{bbmss}{8-10,12,17}% sans serif
+\DeclareFont{bbmtt}{8-10,12,17}% typewriter
+\DeclareFont{bbmvtt}{10}% variable width typewriter
+\DeclareFont{bbm}{5-10,12,17}% roman
+
+\DeclareShapeMap{sf}{bbm}{bbmss}
+\DeclareShapeMap{sf}{bbmsl}{bbmssi}
+\DeclareShapeMap{sl}{bbm}{bbmsl}
+\DeclareShapeMap{sl}{bbmbx}{bbmbxsl}
+\DeclareShapeMap{sl}{bbmss}{bbmssi}
+\DeclareShapeMap{sl}{bbmtt}{bbmsltt}
+\DeclareShapeMap{tt}{bbm}{bbmtt}
+\DeclareShapeMap{tt}{bbmsl}{bbmsltt}
+
+\DeclareWeightMap{bf}{bbm}{bbmbx}
+\DeclareWeightMap{bf}{bbmsl}{bbmbxsl}
+\DeclareWeightMap{bf}{bbmss}{bbmssbx}
+
+\def\bbmfont{bbmsl}
+\DeclareMathFamily{bbm}\bbmfont
+
+\def\bbm{\SelectMathFamily{bbm}\SelectTextFont\bbmfont}
+
+\selectmathfonts{bbm}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs
new file mode 100644
index 0000000000..b46159788c
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs
@@ -0,0 +1,20 @@
+% bbold.fs
+% Anders G S Svensson
+
+% Created: Tue May 14 03:10:19 1996
+% Time-stamp: <1996/05/14 10:15:18 PDT agss@klagshamn>
+
+% $Date: 1996/05/14 17:16:26 $
+% $Revision: 1.1 $
+
+\DeclareFont{bbold}{5-10,12,17}
+
+\DeclareMathFamily{bbold}{bbold}
+
+\def\bb{\SelectMathFamily{bbold}\SelectTextFont{bbold}}
+
+\selectmathfonts{bbold}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs
new file mode 100644
index 0000000000..cc8b14c39b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs
@@ -0,0 +1,108 @@
+% cm.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/08 23:21:40 $
+% $Revision: 1.10 $
+
+% Created: Sun Feb 4 16:13:25 1996
+% Time-stamp: <1996/02/08 15:20:08 PST agss@klagshamn>
+
+\DeclareFont{cmbsy}{10}% bold symbols
+\DeclareFont{cmbxsl}{10}% bold extended slanted
+\DeclareFont{cmbxti}{10}% bold extended text italic
+\DeclareFont{cmbx}{5-10,12}% bold extended
+\DeclareFont{cmb}{10}% bold
+\DeclareFont{cmcsc}{10}% small caps
+\DeclareFont{cmdunh}{10}% dunhill
+\DeclareFont{cmex}{9,10}% extended
+\DeclareFont{cmfib}{8}% fibonacci
+\DeclareFont{cmitt}{10}% italic typewriter
+\DeclareFont{cmmib}{10}% math italic bold
+\DeclareFont{cmmi}{5-10,12}% math italic
+\DeclareFont{cmr}{5-10,12,17}% roman
+\DeclareFont{cmsltt}{10}% slanted typewriter
+\DeclareFont{cmsl}{8-10,12}% slanted
+\DeclareFont{cmssbx}{10}% sans serif bold extended
+\DeclareFont{cmssdc}{10}% sans serif demibold condensed
+\DeclareFont{cmssi}{8-10,12,17}% slanted sans serif
+\DeclareFont{cmssqi}{8}% slanted sans serif quotation style
+\DeclareFont{cmssq}{8}% sans serif quotation style
+\DeclareFont{cmss}{8-10,12,17}% sans serif
+\DeclareFont{cmsy}{5-10}% symbol
+\DeclareFont{cmtcsc}{10}% typewriter small caps
+\DeclareFont{cmtex}{8-10}% typewriter extended
+\DeclareFont{cmti}{7-10,12}% text italic
+\DeclareFont{cmtt}{8-10,12}% typewriter
+\DeclareFont{cmu}{10}% unslanted italic
+\DeclareFont{cmvtt}{10}% variable width typewriter
+
+\DeclareShapeMap{it}{cmr}{cmti}
+\DeclareShapeMap{sl}{cmr}{cmsl}
+\DeclareShapeMap{sf}{cmr}{cmss}
+\DeclareShapeMap{tt}{cmr}{cmtt}
+\DeclareShapeMap{sc}{cmr}{cmcsc}
+\DeclareShapeMap{sl}{cmss}{cmssi}
+\DeclareShapeMap{it}{cmti}{cmr}
+\DeclareShapeMap{it}{cmtt}{cmitt}
+\DeclareShapeMap{sl}{cmtt}{cmsltt}
+\DeclareShapeMap{sc}{cmtt}{cmtcsc}
+
+\DeclareWeightMap{bf}{cmsy}{cmbsy}
+\DeclareWeightMap{bf}{cmsl}{cmbxsl}
+\DeclareWeightMap{bf}{cmti}{cmbxti}
+\DeclareWeightMap{bf}{cmr}{cmbx}
+\DeclareWeightMap{bf}{cmmi}{cmmib}
+\DeclareWeightMap{bf}{cmss}{cmssbx}
+
+\DeclareMathFamily{rm}{cmr} \@famdef@{rm}{0}
+\DeclareMathFamily{mit}{cmmi} \@famdef@{mit}{1}
+\DeclareMathFamily{sy}{cmsy} \@famdef@{sy}{2}
+\DeclareMathFamily{ex}{cmex} \@famdef@{ex}{3}
+\DeclareMathFamily{it}{cmti} \@famdef@{it}{4}
+\DeclareMathFamily{sl}{cmsl} \@famdef@{sl}{5}
+\DeclareMathFamily{bf}{cmbx} \@famdef@{bf}{6}
+\DeclareMathFamily{tt}{cmtt} \@famdef@{tt}{7}
+
+\@fnlet@{cmr}{10}\tenrm
+\@fnlet@{cmr}{7}\sevenrm
+\@fnlet@{cmr}{5}\fiverm
+\@fnlet@{cmmi}{10}\teni
+\@fnlet@{cmmi}{7}\seveni
+\@fnlet@{cmmi}{5}\fivei
+\@fnlet@{cmsy}{10}\tensy
+\@fnlet@{cmsy}{7}\sevensy
+\@fnlet@{cmsy}{5}\fivesy
+\@fnlet@{cmex}{10}\tenex
+\@fnlet@{cmbx}{10}\tenbf
+\@fnlet@{cmbx}{7}\sevenbf
+\@fnlet@{cmbx}{5}\fivebf
+\@fnlet@{cmtt}{10}\tentt
+\@fnlet@{cmsl}{10}\tensl
+\@fnlet@{cmti}{10}\tenit
+
+\def\rm{\SelectMathFamily{rm}\fontshape{up}}
+\def\it{\SelectMathFamily{it}\fontshape{it}}
+\def\sl{\SelectMathFamily{sl}\fontshape{sl}}
+\def\tt{\SelectMathFamily{tt}\fontshape{tt}}
+
+\def\sc{\fontshape{sc}}
+\def\sf{\fontshape{sf}}
+
+\def\mit{\SelectMathFamily{mit}}
+\def\oldstyle{\mit\SelectTextFont{cmmi}}
+\def\cal{\SelectMathFamily{sy}}
+
+\def\md{\SelectMathFamily{rm}\fontweight{md}}
+\def\bf{\SelectMathFamily{bf}\fontweight{bf}}
+\def\mdseries{\fontweight{md}\selectmathfonts*}
+\def\bfseries{\fontweight{bf}\selectmathfonts*}
+
+\FontName{cmr}
+\FontSize{10}
+\FontShape{up}
+\FontWeight{md}
+\selectmathfonts* \currentfont
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs
new file mode 100644
index 0000000000..a3c472b214
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs
@@ -0,0 +1,20 @@
+% rsfs.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/06 23:48:54 $
+% $Revision: 1.5 $
+
+% Created: Mon Feb 5 01:23:54 1996
+% Time-stamp: <1996/02/06 15:35:40 PST agss@klagshamn>
+
+\DeclareFont{rsfs}{5,7,10}
+
+\DeclareMathFamily{rsfs}{rsfs}
+
+\def\scr{\SelectMathFamily{rsfs}\SelectTextFont{rsfs}}
+
+\selectmathfonts{rsfs}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd
new file mode 100644
index 0000000000..0bf1b218a8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd
@@ -0,0 +1,206 @@
+% sfss.cd
+% Anders G S Svensson
+
+% Source: sfss.nw
+% $Revision: 1.21 $
+% $Date: 1996/06/08 00:33:27 $
+
+\def\@fnlet@#1#2{\@let@{fn@#1@#2}}
+\def\@famdef@#1{\@def@{fam@#1}}
+\def\usefs{\bgroup\@ignorespaces@\f@usefs}
+\def\f@usefs#1{\egroup
+ \f@pickfs#1,@}
+\def\f@pickfs#1,#2@{%
+ \@ifundefined@{fs@#1}%
+ {\f@loadfs{#1}}%
+ {}%
+ \@ifempty@{#2}%
+ {}%
+ {\f@pickfs#2@}}
+\def\f@loadfs#1{%
+ \IfFileExists{#1.fs}%
+ {\@let@{fs@#1}\@empty@
+ \edef\@action@{\noexpand\@makeatletter@
+ \noexpand\input #1.fs\relax
+ \noexpand\@restoreat@{\the\catcode`\@}}\@action@}%
+ {\@Warning@{No font selection file: #1.fs}}}
+
+\def\DeclareFont#1{\bgroup\@ignorespaces@\f@DeclareFont{#1}}
+
+\def\f@DeclareFont#1#2{\egroup
+ \let\f@size\@empty@
+ \f@ExpandSizes #2,@%
+ \@edef@{font@#1}{\f@size}}
+
+\def\f@ExpandSizes#1,#2@{%
+ \@ifempty@{#1}%
+ {}%
+ {\f@ExpandRange#1-@\@ifempty@{#2}{}{\f@ExpandSizes#2@}}}
+
+\def\f@ExpandRange#1-#2@{%
+ \@ifempty@{#2}{\edef\f@size{\f@size{#1}}}{\f@SizeRange#1-#2}}
+
+\def\f@SizeRange#1-#2-{\relax
+ \ifnum#1>#2
+ \let\@action@\relax
+ \else
+ \edef\f@size{\f@size{#1}}%
+ \@c@=#1 \advance\@c@ by 1
+ \def\@action@{\expandafter\f@SizeRange\the\@c@-#2-}%
+ \fi
+ \@action@}
+
+\def\DeclareMathFamily#1#2{%
+ \edef\f@families{\f@families{#1}}%
+ \@ifundefined@{family@#1}{\@gdef@{family@#1}{#2}}{}}
+\def\f@families{}
+\def\DeclareShapeMap#1#2#3{\@def@{shape@#2@#1}{#3}}
+\def\DeclareWeightMap#1#2#3{\@def@{weight@#2@#1}{#3}}
+
+\def\FontName{\def\f@currentfont}
+\def\FontShape{\def\f@currentshape}
+\def\FontWeight{\def\f@currentweight}
+
+\let\f@font\font
+\def\fontname#1{\FontName{#1}\currentfont}
+\def\fontshape#1{\FontShape{#1}\currentfont}
+\def\fontweight#1{\FontWeight{#1}\currentfont}
+\def\SelectTextFont{\f@selecttextfont}
+\def\currentfont{\SelectTextFont\f@currentfont}
+
+\def\SelectMathFamily{\f@selectmathfamily}
+\def\f@selecttextfont#1{%
+ \f@loadfont{#1}\f@currentsize\f@currentshape\f@currentweight
+ {\@cs@{fn@\f@name @\f@size}}}
+\def\f@loadfont#1#2#3#4#5{%
+ \edef\f@name{#1}%
+ \edef\f@size{#2}%
+ \def\f@shape{#3}%
+ \def\f@weight{#4}%
+ \def\f@sizespec{ at #2pt}%
+ \@ifundefined@{shape@\f@name @#3}%
+ {}%
+ {\edef\f@name{\@cs@{shape@\f@name @#3}}}%
+ \@ifundefined@{weight@\f@name @#4}%
+ {}%
+ {\edef\f@name{\@cs@{weight@\f@name @#4}}}%
+ \@ifundefined@{font@\f@name}%
+ {\@Warning@{Font \f@name\@space@ not declared.}}%
+ {\@ifundefined@{fn@\f@name @\f@size}{\f@load}{}#5}}
+\def\f@loadmathfont#1#2#3#4#5{%
+ \edef\f@name{#1}%
+ \edef\f@size{#2}%
+ \def\f@shape{#3}%
+ \def\f@weight{#4}%
+ \def\f@sizespec{ at #2pt}%
+ \@ifundefined@{weight@\f@name @#4}%
+ {}%
+ {\edef\f@name{\@cs@{weight@\f@name @#4}}}%
+ \@ifundefined@{font@\f@name}%
+ {\@Warning@{Font \f@name\@space@ not declared.}}%
+ {\@ifundefined@{fn@\f@name @\f@size}{\f@load}{}#5}}
+\def\f@load{%
+ \expandafter\expandafter\expandafter
+ \f@lookup\csname font@\f@name\endcsname{}%
+ \global\@csafter@\f@font{fn@\f@name @\f@size}=\f@name\f@sizespec\relax}
+
+\def\f@lookup#1{%
+ \@ifempty@{#1}%
+ {\let\@action@\relax}%
+ {\def\f@sizespec{#1 at \f@size pt}%
+ \let\@action@\@gobble@
+ \ifdim#1\p@>\f@size\p@\relax
+ \else
+ \ifdim#1\p@=\f@size\p@\relax
+ \let\f@sizespec\f@size
+ \else
+ \let\@action@\f@lookup
+ \fi
+ \fi
+ \@action@}}
+\def\f@selectmathfamily#1{%
+ \@ifundefined@{family@#1}%
+ {\@Warning@{Math family #1 not declared.}}%
+ {\f@loadfamily{#1}\f@currentsize\f@currentshape\f@currentweight
+ \@csafter@\fam{fam@#1}\relax}}
+
+\def\f@loadfamily#1#2#3#4{%
+ \@ifundefined@{fam@#1}%
+ {\@csafter@\f@newfamily{fam@#1}}%
+ {}%
+ \f@loadmathfont{\@cs@{family@#1}}{\@cs@{textsize@#2}}{#3}{#4}%
+ {\@csafter@\textfont{fam@#1}=\@cs@{fn@\f@name @\f@size}}%
+ \f@loadmathfont{\@cs@{family@#1}}{\@cs@{scriptsize@#2}}{#3}{#4}%
+ {\@csafter@\scriptfont{fam@#1}=\@cs@{fn@\f@name @\f@size}}%
+ \f@loadmathfont{\@cs@{family@#1}}{\@cs@{scriptscriptsize@#2}}{#3}{#4}%
+ {\@csafter@\scriptscriptfont{fam@#1}=\@cs@{fn@\f@name @\f@size}}}
+
+\let\f@newfam\newfam
+\edef\f@newfamily{\noexpand\f@newfam}
+\def\FontSize#1{%
+ \@ifnextchar@\bgroup
+ {\f@FontSize{#1}}%
+ {\f@FontSizeNoBaselineskip{#1}}}
+
+\newskip\f@baselineskip
+
+\def\f@FontSize#1#2{%
+ \def\f@currentsize{#1}%
+ \f@baselineskip=#2\p@
+ \f@MathSize}
+
+\def\f@FontSizeNoBaselineskip#1{%
+ \def\f@currentsize{#1}%
+ \f@baselineskip=#1\p@
+ \f@baselineskip=\f@openbaselines\f@baselineskip
+ \f@MathSize}
+
+\def\f@MathSize{%
+ \baselineskip=\f@baselinestretch\f@baselineskip
+ \@ifundefined@{textsize@\f@currentsize}%
+ {\@xdef@{textsize@\f@currentsize}{\f@currentsize}}%
+ {}%
+ \@ifundefined@{scriptsize@\f@currentsize}%
+ {\@xdef@{scriptsize@\f@currentsize}{\f@currentsize}}%
+ {}%
+ \@ifundefined@{scriptscriptsize@\f@currentsize}%
+ {\@xdef@{scriptscriptsize@\f@currentsize}{\f@currentsize}}%
+ {}}
+
+\def\fontsize#1{%
+ \@ifnextchar@\bgroup
+ {\f@fontsize{#1}}%
+ {\f@fontsizenobaselineskip{#1}}}
+
+\def\f@fontsize#1#2{%
+ \f@FontSize{#1}{#2}\selectmathfonts*\currentfont}
+
+\def\f@fontsizenobaselineskip#1{%
+ \f@FontSizeNoBaselineskip{#1}\selectmathfonts*\currentfont}
+
+\def\selectmathfonts{%
+ \@ifnextchar@*%
+ {\expandafter\f@SelectMathFonts\f@families{}\@eat@}%
+ \f@selectmathfonts}
+
+\def\f@selectmathfonts#1{%
+ \f@loadfamily{#1}\f@currentsize\f@currentshape\f@currentweight}
+
+\def\baselinestretch#1{%
+ \def\f@baselinestretch{#1}%
+ \baselineskip=#1\f@baselineskip}
+\def\f@baselinestretch{1}
+\def\openbaselines{\def\f@openbaselines}
+\openbaselines{1.2}
+
+\def\f@SelectMathFonts#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\f@selectmathfonts{#1}\f@SelectMathFonts}}
+
+\def\DeclareMathSizes#1#2#3#4{%
+ \@def@{textsize@#1}{#2}%
+ \@def@{scriptsize@#1}{#3}%
+ \@def@{scriptscriptsize@#1}{#4}}
+
+\input sfss.df
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df
new file mode 100644
index 0000000000..bd99c28be5
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df
@@ -0,0 +1,41 @@
+% sfss.df
+% Anders G S Svensson
+
+% $Date: 1996/02/09 08:15:35 $
+% $Revision: 1.6 $
+
+% Created: Mon Feb 5 01:03:33 1996
+% Time-stamp: <1996/02/09 00:15:19 PST agss@klagshamn>
+
+\DeclareMathSizes{5}{5}{5}{5}
+\DeclareMathSizes{6}{6}{5}{5}
+\DeclareMathSizes{7}{7}{5}{5}
+\DeclareMathSizes{8}{8}{6}{5}
+\DeclareMathSizes{9}{9}{6.5}{5}
+\DeclareMathSizes{10}{10}{7}{5}
+\DeclareMathSizes{11}{11}{7.7}{5.5}
+\DeclareMathSizes{12}{12}{8.4}{6}
+\DeclareMathSizes{13}{13}{9.1}{6.5}
+\DeclareMathSizes{14}{14}{9.8}{7}
+\DeclareMathSizes{15}{15}{10.5}{7.5}
+\DeclareMathSizes{16}{16}{11.2}{8}
+\DeclareMathSizes{17}{17}{11.9}{8.5}
+\DeclareMathSizes{18}{18}{12.6}{9}
+\DeclareMathSizes{19}{19}{13.3}{9.5}
+\DeclareMathSizes{20}{20}{14}{10}
+\DeclareMathSizes{21}{21}{14.7}{10.5}
+\DeclareMathSizes{22}{22}{15.4}{11}
+\DeclareMathSizes{23}{23}{16.1}{11.5}
+\DeclareMathSizes{24}{24}{16.8}{12}
+\DeclareMathSizes{25}{25}{17.5}{12.5}
+\DeclareMathSizes{26}{26}{18.2}{13}
+\DeclareMathSizes{27}{27}{18.9}{13.5}
+\DeclareMathSizes{28}{28}{19.6}{14}
+\DeclareMathSizes{29}{29}{20.3}{14.5}
+\DeclareMathSizes{30}{30}{21}{15}
+
+\input sfss.fs
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs
new file mode 120000
index 0000000000..d04e245335
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs
@@ -0,0 +1 @@
+fs/cm.fs \ No newline at end of file
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex b/macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex
new file mode 100644
index 0000000000..65ea4d1999
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex
@@ -0,0 +1,70 @@
+% calc.tex
+% Anders G S Svensson
+% $Date: 1994/08/18 00:55:29 $
+% $Revision: 1.0 $
+
+\chardef\CalccodE=\catcode`\@
+\catcode`\@=11
+
+% Get superscript height right. Plain has
+%
+% \def\sin{\mathop{\rm sin}\nolimits}
+%
+% etc, but \sin^2 x and \cos^2 x should have the superscript at the same
+% height.
+%
+\def\sin{\mathop{\smash{\rm sin}}\nolimits}
+\def\cos{\mathop{\smash{\rm cos}}\nolimits}
+\def\tan{\mathop{\smash{\rm tan}}\nolimits}
+\def\csc{\mathop{\smash{\rm csc}}\nolimits}
+\def\sec{\mathop{\smash{\rm sec}}\nolimits}
+\def\cot{\mathop{\smash{\rm cot}}\nolimits}
+\def\invsin{\sin^{-1}} \def\arcsin{\mathop{\smash{\rm arcsin}}\nolimits}
+\def\invcos{\cos^{-1}} \def\arccos{\mathop{\smash{\rm arccos}}\nolimits}
+\def\invtan{\tan^{-1}} \def\arctan{\mathop{\smash{\rm arctan}}\nolimits}
+\def\invcsc{\csc^{-1}} \def\arccsc{\mathop{\smash{\rm arccsc}}\nolimits}
+\def\invsec{\sec^{-1}} \def\arcsec{\mathop{\smash{\rm arcsec}}\nolimits}
+\def\invcot{\cot^{-1}} \def\arccot{\mathop{\smash{\rm arccot}}\nolimits}
+
+% First partials
+%
+\def\p#1\wrt#2{{\def\@@tmp{#1}\partial \ifx\@@tmp\empty \else #1\fi
+ \over \partial #2}}
+\let\fp\p % "partial wrt"
+%
+% Second partials
+% \sp is for superscripts!
+%
+\def\spar#1\wrt#2#3{{\def\@@tmp{#1}\partial^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over \partial #2 \partial #3}}
+\let\smp\spar % Second mixed partial
+\def\spp#1\wrt#2{{\def\@@tmp{#1}\partial^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over \partial #2^2}} % "2nd pure partial..."
+%
+% Ordinary first derivatives
+%
+\def\d#1\wrt#2{{\def\@@tmp{#1}d \ifx\@@tmp\empty \else #1 \fi
+ \over d #2}}
+\let\fd\d
+%
+% Ordinary second derivatives
+%
+\def\sd#1\wrt#2#3{{\def\@@tmp{#1}d^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over d #2 d #3}}
+\let\smd\sd
+\def\spd#1\wrt#2{{\def\@@tmp{#1}d^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over d #2^2}}
+
+\let\grad\nabla
+\let\implies\Longrightarrow
+
+% Unit vectors
+%
+\def\unit#1{\hat{#1}}
+\def\ui{\unit \imath}
+\def\uj{\unit \jmath}
+\def\uk{\unit k}
+\def\ue{\unit e} % \ue_1,...,\ue_n
+
+
+\catcode`\@=\CalccodE
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex b/macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex
new file mode 100644
index 0000000000..9e99e4377a
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex
@@ -0,0 +1,67 @@
+% listing.tex
+% Anders G S Svensson
+% $Date: 1995/08/11 10:15:30 $
+% $Revision: 1.4 $
+
+\chardef\ListingcodE=\catcode`\_
+\catcode`\_=11
+
+\def\__bailout__{\message{again}\catcode`\_=\ListingcodE \endinput}
+
+\ifx\__agss_listing__\relax
+\else
+ \let\__agss_listing__\relax
+ \let\__bailout__\relax
+\fi
+
+\__bailout__
+
+%%%%%%%%%%
+
+\newcount\listinglineno \listinglineno=0
+\newdimen\listingindent \listingindent=30pt
+\newdimen\listingskip \listingskip=12pt
+\newread\_listingfile
+
+\font\ninett=cmtt9
+
+\def\_listing#1{%
+ \ifeof\_listingfile
+ \immediate\closein\_listingfile
+ \def\_next{\egroup\csname end#1\endcsname}%
+ \else
+ \def\_next{%
+ \def\_action{\expandafter\expandafter
+ \csname #1line\endcsname\_tmp}%
+ \expandafter\_action\csname #1endline\endcsname
+ \immediate\read\_listingfile to \_tmp
+ \_listing{#1}}%
+ \fi
+ \_next}
+
+\def\newlisting#1{%
+ \expandafter\def\csname #1\endcsname##1{\bgroup
+ \def\do####1{\catcode`####1=12}\dospecials
+ \frenchspacing
+ \immediate\openin\_listingfile=##1
+ \vbadness10000\csname #1tt\endcsname\csname every#1\endcsname
+ \ifeof\_listingfile \else \immediate\read\_listingfile to \_tmp \fi
+ \_listing{#1}}%
+ \expandafter\def\csname every#1\endcsname{\par
+ \parindent=\listingindent\leavevmode\parskip=0pt
+ \baselineskip=\listingskip\listingspaces}
+ \expandafter\let\csname #1line\endcsname\leavevmode
+ \expandafter\let\csname #1endline\endcsname\par
+ \expandafter\let\csname end#1\endcsname\par
+ \expandafter\let\csname #1tt\endcsname\ninett}
+
+\let\listingspaces\obeyspaces
+
+\newlisting{listing}
+\def\listingline{\leavevmode\linemarker}
+
+\def\linemarker{\advance\listinglineno by 1
+ \llap{\hbox to 15pt{\hbox to 0pt{\hss\sevenrm\the\listinglineno}\hfil}}}
+\def\nolinenumbers{\let\linemarker\relax}
+
+\catcode`\_=\ListingcodE
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex b/macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex
new file mode 100644
index 0000000000..abe0bde366
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex
@@ -0,0 +1,96 @@
+% verbatim.tex
+% Anders G S Svensson
+% $Date: 1995/08/07 09:39:00 $
+% $Revision: 1.4 $
+
+\chardef\VerbatimcodE=\catcode`\_
+\catcode`\_=11
+
+\def\__bailout__{\message{again}\catcode`\_=\VerbatimcodE \endinput}
+
+\ifx\__agss_verbatim__\relax
+\else
+ \let\__agss_verbatim__\relax
+ \let\__bailout__\relax
+\fi
+
+\__bailout__
+
+%%%%%%%%%%
+
+\newdimen\verbatimindent \verbatimindent=30pt
+\newdimen\verbatimskip \verbatimskip=12pt
+
+{\escapechar=-1
+ \xdef\_namedtestdef#1{\noexpand\expandafter\edef
+ \noexpand\csname _end#1verbatim\noexpand\endcsname{\string\\end#1}}
+}
+
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\_verbeatim#1#2^^M{\csname _#1verbatim\endcsname}
+ \gdef\_namedsetup#1{%
+ \expandafter\def\csname _#1verbatim\endcsname##1^^M{\def\_found{##1}%
+ \expandafter\ifx\csname _end#1verbatim\endcsname\_found
+ \def\_next{\egroup\csname end#1\endcsname}%
+ \else
+ \def\_next{%
+ \def\_found{\csname #1line\endcsname ##1}%
+ \expandafter\_found\csname #1endline\endcsname
+ \csname _#1verbatim\endcsname}%
+ \fi
+ \_next}}
+}
+
+\def\newverbatim#1{%
+ \_namedtestdef{#1}%
+ \_namedsetup{#1}%
+ \expandafter\def\csname #1\endcsname{\bgroup
+ \def\do####1{\catcode`####1=12}\dospecials
+ \frenchspacing
+ \vbadness10000\csname #1tt\endcsname\csname every#1\endcsname
+ \endlinechar`\^^M \catcode`\^^M=12
+ \_verbeatim{#1}}%
+%
+% Default setup is for verbatim blocks.
+%
+ \expandafter\def\csname every#1\endcsname{\par
+ \parindent=\verbatimindent\leavevmode\parskip=0pt
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+% The order here is important. TeX skips vertically by \parskip just before
+% entering horizontal mode so \parskip=0pt\leavevmode won't work: We'll
+% skip by 0pt instead of whatever \parskip is outside the group. Similarly
+% \parindent has to be set before entering into horizontal mode.
+ \baselineskip=\verbatimskip\verbatimspaces}%
+ \expandafter\let\csname #1line\endcsname\leavevmode
+ \expandafter\let\csname #1endline\endcsname\par
+ \expandafter\let\csname end#1\endcsname\par
+ \expandafter\let\csname #1tt\endcsname\tt}
+
+\let\verbatimspaces\obeyspaces
+
+\newverbatim{verbatim}
+
+% Commented blocks.
+%
+\newverbatim{comment}
+\let\everycomment\relax
+\def\commentline#1\commentendline{}
+\let\endcomment\relax
+\let\commenttt\relax
+
+% Short verbatim selections delimited by \@ and @\.
+% Use @@ for a literal ampersand.
+
+\def\@{\leavevmode\bgroup\frenchspacing\_vb\vbtt\everyvb}
+\def\_vb{\def\do##1{\catcode`##1=12}\dospecials
+ \let\_endvb\endvb\def\endvb{\_endvb\egroup}\_vbactivate}
+
+{\catcode`\@=\active \gdef\_vbactivate{\catcode`\@=\active\let@\_vbtest}}
+{\catcode`\/=0 /catcode`\\=11
+ /gdef/_vbtest#1{/if/noexpand#1\/endvb/else/if/noexpand#1@@/else@#1/fi/fi}}
+
+\let\vbtt\tt
+\let\everyvb\obeyspaces
+\let\endvb\relax
+
+\catcode`\_=\VerbatimcodE
diff --git a/macros/generic/diagrams/kuvio/doc-src/revision_2.5.12 b/macros/generic/diagrams/kuvio/doc-src/revision_2.5.12
new file mode 100644
index 0000000000..fef96d0b5a
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/revision_2.5.12
@@ -0,0 +1 @@
+09 Jun 1996
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd
new file mode 120000
index 0000000000..dccc9bce30
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd
@@ -0,0 +1 @@
+tdwk.cd \ No newline at end of file
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex
new file mode 100644
index 0000000000..8d612f6fbe
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex
@@ -0,0 +1,5 @@
+% tdwk-A4.tex
+% Anders G S Svensson
+% 25 Aug 1995
+
+\input tdwk
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex
new file mode 100644
index 0000000000..98824624a9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex
@@ -0,0 +1,101 @@
+% tdwk-e.tex
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 04:02:06 PDT agss@klagshamn>
+
+% $Revision: 1.9 $
+% $Date: 1996/06/09 11:28:47 $
+
+\section{Examples}
+The {\tt Dash}, {\tt Dashto} and {\tt Mono} cell types in some of
+these examples use the {\tt arrsy10} font: See \ref{Another Font:
+arrsy10} and \csq\arrsy\ in \ref{Summary}. Also, \csq\bb\ invokes the
+bbm family of fonts.
+\ifAAAA \bigskip \fi
+
+\listingindent=0pt
+
+\def\Grok#1{\listing{eg/#1}\newpage
+ \null\vfill\bgroup\compileto{tdwk/#1}\input eg/#1 \egroup}
+\def\grok#1{\listing{eg/#1}\bgroup
+ \compileto{tdwk/#1}\input eg/#1 \egroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg06a}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf G. Bredon}, \emph{Introduction to Compact Transformation Groups},
+page 75.
+\grok{eg04}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg13}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg15}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf S. Mac Lane}, \emph{Categories for the Working Mathematician}, page 109.
+\grok{eg17}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf S. Mac Lane}, \emph{Categories for the Working Mathematician}, page 117.
+\grok{eg16}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf S. Mac Lane and I. Moerdijk}, \emph{Sheaves In Geometry and Logic},
+page 232.
+\grok{eg18}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf K. S. Brown}, \emph{Cohomology of Groups}, page 280.
+\ifAAAA\grok{eg20A4}\else\grok{eg20}\fi
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 592.
+\Grok{eg03}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf J. McCleary}, \emph{A User's to Spectral Sequences}, page 13.
+\ifAAAA\grok{eg02A4}\else\grok{eg02}\fi
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf J. McCleary}, \emph{A User's to Spectral Sequences}, page 346.
+\grok{eg19}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf P. J. Hilton and U. Stammbach}, \emph{A Course in Homological Algebra},
+page 149.
+\grok{eg01b}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 650.
+\grok{eg05}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg09}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg12}
+
+\vfill
+\grok{eg21}
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex
new file mode 100644
index 0000000000..ee8bd53831
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex
@@ -0,0 +1 @@
+\def\doclevel{216}
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex
new file mode 100644
index 0000000000..3cc26ec793
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex
@@ -0,0 +1,2123 @@
+% tdwk-s.tex
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 03:30:06 PDT agss@klagshamn>
+
+% $Revision: 1.21 $
+% $Date: 1996/06/09 11:31:01 $
+
+\autocompileto{tdwk/tdwk-s}
+
+\Graphpad=5pt
+
+\def\entry{\leavevmode\vtop\bgroup
+ \openup3pt
+ \FontSize{13}\currentfont
+ \catcode`\^^M=\active\Entry}
+{\catcode`\^^M=\active
+ \gdef\Entry#1{\anotherline #1%
+ \let\relax\entrystrut\aftergroup\lastline^^M\egroup}
+ \gdef\anotherline#1^^M{\hbox to \hsize{#1\relax\hfil}\anotherline}
+}
+
+\ifAAAA
+\def\endentry{\vskip20pt\goodbreak}
+\else
+\def\endentry{\vskip15pt\goodbreak}
+\fi
+\def\entrystrut{\vphantom{\vrule width 0pt depth 8pt}}
+\def\lastline#1{}
+\def\mod{\par\leavevmode\modmarker}
+\def\modmarker{{\llap{$\bullet$\hskip.4in}}}
+
+\def\d{\hfill\tt}
+\def\hs{\hskip15mm}
+
+\def\harebra{\epsfxsize=3cm \rot1\epsffile{harebra.eps}\endrot}
+
+\def\int{\emph{integer}}
+\def\dim{\emph{dimen}}
+\def\text{\emph{text}}
+\def\math{\emph{math}}
+\def\{{{\escapechar=-1 \tt\string\{}}
+\def\}{{\escapechar=-1 \tt\string\}}}
+\def\:{{\escapechar=-1 \tt\string\:}}
+\def\*{{\escapechar=-1 \tt\string\*}}
+\def\|{{\escapechar=-1 \tt\string\|}}
+\def\({{\escapechar=-1 \tt\string\(}}
+\def\){{\escapechar=-1 \tt\string\)}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Summary}
+\label{Summary}
+
+Brief descriptions (plus some examples) of the available control
+sequences and modifiers, including several not mentioned thus far.
+Modifiers are indicated by a $\bullet$ in the left margin. Default or
+predefined values, where appropriate, are listed in the right margin.
+{\let\egroup\relax\endentry}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\^\sindex mc\_%
+ \sindex mc\<\sindex mc\>%
+ \ch\^\{\math\}\qquad \ch\_\{\math\}
+ \ch\<\{\math\}\qquad \ch\>\{\math\}}
+Place labels on an arrow in \csq\labelstyle.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\(\tt\(\int,\int\)}
+Specify coordinates to an \csq\a\type\ or \csq\b\type\ cell macro.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\(\tt\(\num,\num\)}
+Specify coordinates to a modification.
+Both \index mm{Box} and \index mm{Frame} modifications require two sets of
+coordinates while others can accept either one or two sets.
+
+\side
+\Graph{2cm,2}{1cm}
+\Txt{bitterness} (2,.5) *{1.1}
+\Txt{bereavement} (3,.5) (4,.5) :{1.1} *0
+\Box (2,0) (3,1) \Frame (3,1) (4,0)
+\endGraph
+\endside
+
+For modifications on a Figure or Graph,
+a coordinate may be given as a dimension.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\*\ch\*\{\num\}\d .5}
+Set the tag point of a modification.
+Has no effect on type 2 modification cells,
+\index tm{Box} modifications or \index tm{Frame} modifications.
+
+\side
+\Graph{1cm}{1cm}
+\To (1,.5) *0 \Line (1,.5) *{1.5}
+\Text{chaos} (1,.5) *{-2}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\/\ch\/\{\int\}\d 0}
+Rotate a modification by \int\ degrees counterclockwise.
+Has no effect on type 2 modification cells,
+\index tm{Box} modifications or \index tm{Frame} modifications.
+
+\side
+\Graph{3cm}{1cm}
+\Line (0,.5) /{90} \Line (1,.5) /{90}
+\Txt{losfer words} (.5,.5) /{180}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mw{"|@\BAR}\ch\|\{\dim\}}
+Set the length of a type 1 modification cell.
+See \csq\celllength.
+
+\side
+\Graph{2cm}{5mm}
+\To (.5,1) \Two (.5,0) |{2cm}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\:%
+ \:\{\num\}\d .5
+ \:\{\dim\}\d 0pt
+ \:\{\num\ch\,\dim\} or \:\{\dim\ch\,\num\}}
+Adjust the positioning of a label tied to an arrow, \num\ determining
+a point along the line joining the endpoints of the arrow and \dim\ a
+point on a line perpendicular to the arrow.
+
+\eg
+\Diagram A & \rTo ^f :{.75} & B & \rTo ^g :{.75,5pt} & C & \rTo ^h :{5pt} & D \\
+\endDiagram
+\endeg
+
+A semicolon can also be used as the argument separator.
+In fact, in this case we can replace the label pad \dim\ by a
+comma-separated pair of
+dimensions, the first moving a label parallel to the
+direction of an arrow and a second being a label pad. That is,
+the forms \:\{\dim\ch\,\dim\}, \:\{\num\ch\;\dim\ch\,\dim\}
+and \:\{\dim\ch\,\dim\ch\;\num\} are also legal.
+
+\eg
+\Diagram A & \rTo ^f :{-10pt,0pt} & B & \rTo ^g :{0;10pt,0pt} & C \\
+\endDiagram
+\endeg
+
+Label positioning with \ch\: applies to all labels placed on an arrow.
+For any individual label, this can be overridden by supplying a
+positioning specification to \index tc\^, \index tc\_,
+\index tc\<\ or \index tc\>,
+delimited by square braces.
+This may be useful for cell types whose arrows are composed of many pieces,
+although the same results can be obtained using null arrows (see \csq\nl).
+
+\side
+\newcell{Adj}
+\def\Adjbox#1{\vcenter{\offinterlineskip\dimen0=#1
+ \hbox to #1{\leftarrowfill\hskip.2\dimen0} \hbox to #1{\hskip.2\dimen0\rightarrowfill}}}
+\labelpad{Adj}=2.5pt
+
+\Diagram A & \rAdj ^[.6]{f_1} _[.4]{f_2} & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\:\ch\:\{\num\}\d .5}
+For \index tm{Label}, \index tm{Math}, \index tm{Text}, \index tm{Txt}
+and \index tm{Vertex} modifications, specify a coordinate as a fractional
+distance from one point to another.
+
+{\edge{.75}
+\side
+\Graph{15mm}{15mm}
+\Line (0,1) (1,0)
+\Text{X} (0,1) (1,0) :{.25} *0
+\Math\bullet (0,1) (1,0) :{.75}
+\endGraph
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{al}}
+Move the column in which this control sequence occurs.
+Like \csq\dl\ except that, instead of also moving columns to
+the right of the given column, recursively moves those which are
+\sindex mw{binding}\emph{bound} to it.
+
+A column is bound to another in the following situations.
+
+{\parindent=30pt
+\item{(1)}If an arrow goes between two entries in columns $C_\ell <
+C_r$ and both columns are on or to the left of the
+gravitating column then $C_\ell$ is bound to $C_r$.
+\item{(2)}If two entries in the same row of columns $C_\ell < C_r$
+are adjacent (in the sense that these entries typeset material with
+non-zero dimensions and there are no other such entries in columns
+strictly between $C_\ell$ and $C_r$) and both columns are on or to the
+left of the \index tm{gravitating column} then $C_\ell$ is bound to
+$C_r$.
+\item{(3)}If an arrow goes between two entries in columns $C_\ell <
+C_r$ and both columns are on or to the right of the gravitating column
+then $C_r$ is bound to $C_\ell$.
+\item{(4)}If two entries in the same row of columns $C_\ell < C_r$
+are adjacent and both columns are on or to the right of the
+gravitating column then $C_r$ is bound to $C_\ell$.
+\par}
+
+The control sequence \index tm{displaybindings} causes a message of
+the form {\tt (B:$C$-$C'$)} to be displayed whenever column $C'$ is
+bound to column $C$.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{ar}}
+Move the column in which this control sequence occurs.
+Like \csq\dr\ except that, instead of also moving columns to
+the left of the given column, recursively moves those which are
+bound to it. See \csq\al.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{arrsy}}
+Load the font {\tt \index tw{arrsy10}} and define several control sequences
+and cell types using this font. Of course, the font has to have been installed
+on your system for this to work.
+
+\verbatim
+\input kuvio \arrsy % plain TeX \usepackage[arrsy]{kuvio} % LaTeX
+\endverbatim
+\hskip\egindent{\verbatimit blah, blah, blah...}
+\endentry
+\sindex tw{LaTeX@\LaTeX}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{atpush}%
+ \csq{\atpush=}\dim\d 3pt
+ \csq{\atpush+=}\dim
+ \csq{\atpush\{\type\}=}\dim\hs\csq{\atpush\{\type\}+=}\dim}
+Global and type-specific amounts by which the end of an arrow attached
+to another arrow (using \csq\pt) is shortened whenever a vertex has not been
+attached using \csq\hd\ or \csq\tl.
+The type-specific quantity applies to ends attached to an arrow of
+cell type \type. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{autocompile}}
+Abbreviation for \@\autocompileto{.\jobname}@\.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{autocompilecounter}}
+Count register used with \index tm{autocompileto}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{autocompileto}\{\name\}}
+Cause all diagrams to be compiled unless otherwise specified using
+\index tm{nocompile}. The files \name\@-\the\@\{\tt auto\-compilecounter.kdg}
+and \name\@-\the\@\{\tt autocompilecounter.kuv} are either written or read,
+the count register \index tm{autocompilecounter} being incremented with each
+diagram being compiled. Spaced in \name\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{ax}\{\dim\}}
+Move the column in which this control sequence occurs rightward by \dim.
+Like \csq\dx\ except that, instead of also moving columns to
+the right of the given column, recursively moves those which are
+bound to it. See \csq\al.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{base}}
+Make the baseline of a Diagram coincide with that of a row in its alignment.
+Takes precedence over any baseline specification given outside the alignment
+(using \index tm{tall}, \index tm{deep}, etc).
+
+{\edge{.7}
+\side
+\newDiagram{Ydiag}
+\def\everyYdiag{\flexible \xgrid=0pt \ygrid=4pt \joined \columndist=9pt}
+
+\def\Y#1#2#3{%
+ \Ydiag
+ & & #2 \\
+ \\ \\
+ & \rdLine & & \ldLine & \\
+ & \base & \stop\my{2pt} \\
+ & #1 & \qquad\dLine & #3 \\
+ \\
+ \endYdiag}
+
+Thus, $\Y\alpha\beta\gamma = \Y\delta\epsilon\zeta$.
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{black}}
+Typeset an arrow or modification with graylevel 0.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{black}\endblack}
+Typeset the enclosed material with graylevel 0.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Box}}
+Typeset a box as a modification. The coordinates of two
+diagonally opposite corners must be specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Boxcell}\{\emph{box} \emph{macro}\}}
+Typeset an arrow as a modification without naming a cell type.
+Possibly the most useless control sequence of the lot!
+Has ten equally useless siblings for use in the alignment part
+of a Diagram: \csq\aBoxcell, \csq\bBoxcell, \csq\rBoxcell,
+\csq\rdBoxcell, \csq\dBoxcell, \csq\ldBoxcell, \csq\lBoxcell,
+\csq\luBoxcell, \csq\uBoxcell\ and \csq\ruBoxcell.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{bpad}%
+ \csq{\bpad=}\dim\d 0pt
+ \csq{\bpad+=}\dim}
+Padding added to the bottom of a diagram or framed material.
+Does not alter the baseline.
+
+\side
+\framed \bpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{br}%
+ \csq\br\{\dim\}}
+Typeset an arrow on top of a white rule.
+
+\side
+\Graph{3cm,3}{12mm,2}
+\To (1,2) (1,0)
+\Line (0,2) (3,0) \br \Two (2,0) (2,2) \br
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{braced}}
+With flexible grids, make all diagonal arrows fully braced by default and
+invert the action of \index tm{db}: An arrow will be unbraced when \csq\db\ is
+specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{bracewidth}%
+ \csq{\bracewidth=}\dim\d 1cm
+ \csq{\bracewidth+=}\dim}
+With flexible grids, width of the
+\emph{brace} used with braced diagonal arrows.
+
+\side
+\braced
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\qquad\bracewidth+=1cm
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{breakpad}%
+ \csq{\breakpad=}\dim\d 2.5pt
+ \csq{\breakpad+=}\dim
+ \csq{\breakpad\{\type\}=}\dim\hs\csq{\breakpad\{\type\}+=}\dim}
+Global and type-specific pads to determine the rule width used
+with \index tm{br} and \index tm{rl}. Spaces in \type\ are ignored.
+
+\side
+\breakpad{One}=5pt \yscale=.75
+\Diagram
+\\ & \dTo \br & \rTo \pp \dOne \br & \\ \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{celllength}%
+ \csq{\celllength=}\dim\d 1cm
+ \csq{\celllength+=}\dim}
+Default length of a type 1.
+\sindex tw{modification cell!type 1}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{cellpush}%
+ \csq{\cellpush=}\dim\d 2pt
+ \csq{\cellpush+=}\dim
+ \csq{\cellpush\{\type\}=}\dim\hs\csq{\cellpush\{\type\}+=}\dim}
+Global and type-specific cell pushes. Spaces in \type\ are ignored.
+
+\side
+\cellpush=-10pt
+\Graph{2cm}{5mm,2}
+\Line (0,2) (1,2) \tl{\bullet} \hd{}
+\Line (0,0) (1,0) \hd{\bullet}
+\endGraph
+\endside
+
+Note the use of \index tm{tl} and \index tm{hd} in this example.
+Cell pushes are applied to a modification cell only when a vertex is attached
+using one of these two.\sindex tw{modification cell!applying cell pushes}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{cellwidth}%
+ \csq{\cellwidth=}\dim\d 1cm
+ \csq{\cellwidth+=}\dim}
+With flexible grids, the minimum distance between vertices at the ends of
+horizontal alignment cells.\sindex tw{alignment cell!length}
+
+{\edge{.5}
+\side
+\Dg A & \rTo & B & {} = C \\ \endDg
+\qquad\cellwidth+=1cm
+\Dg A & \rTo & B & {} = C \\ \endDg
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{center} or \index mm{centre}}
+Center diagrams on the math axis. With the exception of Diagrams
+consisting of a single row, this is the default in math modes.
+\endentry
+\pagedef{center def}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{centermath} or \index mm{centremath}}
+Center diagrams in math modes only. This is the default behaviour.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{columndist}%
+ \csq{\columndist=}\dim\d 15mm
+ \csq{\columndist+=}\dim}
+With flexible grids, the minimum distance between the centers of columns at
+either end of an unbraced diagonal arrow.
+\sindex tw{grid!flexible}
+
+\side
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\qquad\columndist+=1cm
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{compileto}\{\name\}}
+Compile a diagram to, or read a diagram from, the files \name{\tt .kdg} and
+\name{\tt .kuv}. Spaces in \name\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{db}}
+Make a diagonal arrow fully braced unless \index tm{braced} has been
+specified, in which case the arrow is made unbraced.
+\sindex tw{arrows!braced}
+
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{deep}}
+Make the baseline of a \sindex tw{Diagram!baseline}Diagram coincide
+with that of its topmost row and the baseline of a \sindex
+tw{Figure!baseline}Figure or \sindex tw{Graph!baseline}Graph coincide
+with that of its upper edge. This is the default for Diagrams in
+non-math modes.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Dg@{\tt Dg}}\tt Dg}
+Diagram type having \index tm{flexible}, \index tm{xgrid}{\tt =0pt},
+\index tm{ygrid}{\tt +=-2mm}, \index tm{cellwidth}{\tt +=3mm} and
+\index tm{bracewidth}{\tt +=-2.5mm}.
+
+\eg
+\Dg
+\eta_k:\qquad & {\bb R} & \rInto & X_k & {} =
+ \{\,(A,\vect v)\in W_k\times{\bb R}^n \mid A\vect v = \lambda_k\vect v\,\} \\
+ & & & \dTo \\ % \vect is from arrsy10
+ & & & W_k \\
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dh}\{\dim\}}
+Fudge the length of an arrow at its head.
+
+\side
+\Diagram
+A & \rTo \dh{-10pt} & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dh}\{\dim\ or \num\ch\,\dim\}}
+Fudge the positioning of an arrow at its head.
+Equivalent to \csq\hx\{\dim\ or \num\} \csq\hy\{\dim\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{%
+ \index mm{dh}\{\dim1 or \num\ch\,\dim2\ch\;\dim3\}
+ \csq\dh\{\dim3\ch\;\dim1 or \num\ch\,\dim2\}}
+Fudge both the length and positioning at the head of an arrow.
+Equivalent to \csq\hx\{\dim1 or \num\} \csq\hy\{\dim2\} \csq\dh\{\dim3\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Diag@{\tt Diag}}\tt Diag}
+Diagram type having \csq\flexible\ and \csq{\xgrid=0pt}.
+
+\eg
+\ygrid=7mm
+\Diag
+\cdots& \rTo& H_n A& \rTo& H_n X& \rTo& H_n(X,A)& \rTo& H_{n-1}A& \rTo& \cdots \\
+ & & \dTo & & \dTo & & \dTo & & \dTo \\
+\cdots& \rTo& H_n B& \rTo& H_n Y& \rTo& H_n(Y,B)& \rTo& H_{n-1}B& \rTo& \cdots \\
+\endDiag
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{Diagram}\endDiagram}
+Diagram delimiters. Uses a rigid grid unless \csq\flexible\ is specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{diagramdot}\d\csq\bullet}
+Token used with \csq\dotted\ and \csq\Dot.
+
+\side
+\let\diagramdot\circ \dotted
+\Diagram
+ & \\
+ \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Diagrampad}%
+ \csq{\Diagrampad=}\dim\d 5pt
+ \csq{\Diagrampad+=}\dim}
+Padding added to all sides of a Diagram.
+
+\side
+\framed
+\Diagram A & \rTo & B \\ \endDiagram
+\Diagrampad=10pt \quad
+\Diagram A & \rTo & B \\ \endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{displayall}}
+Abbreviation for \index tm{displaybindings} \index tm{displaymovements}
+\index tm{displaystretches}, each of which announce certain computations.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\displaybindings}
+Display the message (B:<C1>-<C2>) when column <C1> is bound to column <C2>.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\displaymovements}
+Display the message (X<C>) when a column is moved and
+(Y<C>) when a row is moved.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\displaystretches}
+Display messages of the form (A:r<R>,c<Cl>-<Cr>),
+(C:r<R>,c<C>) and (W:r<Rl>-<Rr>,c<Cl>-<Cr>) for stretches set by
+horizontal arrows, column entries and diagonal arrows respectively.
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Displaybox}}
+Control sequence, taking a single parameter (a box register),
+which displays a diagram.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dl}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the left. Additionally, move each column to the right of the
+given column by the same amount.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Dot}}
+Abbreviation for \@\Math{\diagramdot}@\.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dotted}}
+Place a \csq\diagramdot\ in every empty alignment entry
+in a Diagram unless prevented from doing so by \csq\nodot.
+
+\side
+\dotted
+\Diagram
+ & \nodot \\
+A \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dr}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the right.
+Additionally, move each column to the left of the
+given column by the same amount.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dt}\{\dim\}}
+Fudge the length of an arrow at its tail.
+
+\side
+\Diagram
+A & \rTo \dt{-10pt} & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dt}{\{\dim1 or \num\ch\,\dim2\}}}
+Fudge the positioning of an arrow at its tail.
+Equivalent to \csq\tx\{\dim1 or \num\} \csq\ty\{\dim2\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{%
+ \index mm{dt}\{\dim1 or \num\ch\,\dim2\ch\;\dim3\}
+ \csq\dt\{\dim3\ch\;\dim1 or \num\ch\,\dim2\}}
+Fudge both the length and positioning at the tail of an arrow.
+Equivalent to \csq\tx\{\dim1 or \num\} \csq\ty\{\dim2\} \csq\dt\{\dim3\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dx}\{\num\ or \dim\}}
+Move the column in which this control sequence occurs.
+\csq\dx\{\dim\} moves the column rightward by \dim\ and
+also moves all columns to the right of the given column by the same amount.
+If the distance to the next column (to the right) is currently $d$,
+\csq\dx\{\num\} moves the column rightward by $\num\cdot d$ and also moves all
+columns to the left of the given column by the same amount.
+
+\side
+\gridlines
+\Diagram
+A & B \dx{5mm} & C & D & E \\
+A & B & C & D \dx{-.25} & E \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dy}\{\num\ or \dim\}}
+Move the row in which this control sequence occurs.
+\csq\dy\{\dim\} moves the row upward by \dim\ and
+also moves all rows above the given row by the same amount.
+If the distance to the next row (above) is currently $d$,
+\csq\dy\{\num\} moves the row upward by $\num\cdot d$ and also moves all
+rows below the given row by the same amount.
+
+\side
+\gridlines
+\Diagram
+A \\
+\dEq & \dy{1} \\
+B & \rTo & C \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{epi}}
+An epimorphism arrow, as in $A\epi B$.
+The {\tt arrsy10} font must be loaded for this to work. See \csq\arrsy.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fd}\{\emph{fudge}\}}
+Abbreviation for \csq\dt\{\emph{fudge}\} \csq\dh\{\emph{fudge}\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{Figure}\endFigure}
+Figure delimiters.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Figurepad}%
+ \csq{\Figurepad=}\dim\d 0pt
+ \csq{\Figurepad+=}\dim}
+Padding added to all sides of a Figure.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Fillcell}\{{\it fill} \emph{macro}\}}
+Like, \csq\Boxcell, typeset an arrow as a modification without naming a
+cell type.
+Has ten siblings for use in the alignment part of a Diagram:
+\csq\aFillcell, \csq\bFillcell, \csq\rFillcell,
+\csq\rdFillcell, \csq\dFillcell, \csq\ldFillcell, \csq\lFillcell,
+\csq\luFillcell, \csq\uFillcell\ and \csq\ruFillcell.
+
+\side
+\Diagram
+A & \rFillcell\lrrrightarrowfill & B \\
+\Modify
+\Fillcell\rrightarrowxfill (3,0) /{90}
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{flexible}}
+Enable the flexible grid.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{flip}\endflip}
+Rotate the enclosed material by 180 degrees.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{forcekdg}}
+Force diagrams to be read from \csq{\jobname.kdg} if not otherwise
+being compiled. See \ref{Specifying Diagrams in Alignments}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fr}\{\dim\}}
+Abbreviation for \csq\tr\{\dim\} \csq\hr\{\dim\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Frame}}
+Typeset a frame as a modification. The coordinates of two
+diagonally opposite corners must be specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{frame}\endframe}
+Put a frame around the enclosed material.
+The material cannot contain vertical commands (unless enclosed in a box).
+
+{\edge{.65}
+\side
+\frame\bf N\"ara skjuter ingen hare.\endframe
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{framed}}
+Place diagrams in a frame.
+
+\eg
+\framed
+\Long
+H_n X\otimes G & \rMono & H_n(X;G) & \rEpi & {\rm Tor}(H_{n-1}X,G) \\
+\endLong
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{framegray}\sindex mm{framegrey}%
+ \csq{\framegray=}\num\ or \csq{\framegrey=}\num\d 0}
+Set the graylevel of the frame used with \csqq\frame\endframe.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{framepad}%
+ \csq{\framepad=}\dim\d 5pt
+ \csq{\framepad+=}\dim}
+Padding around material framed with \csqq\frame\endframe.
+
+\side
+\frame \TeX \endframe
+\framepad=10pt \frame \TeX \endframe
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Framerulewidth}%
+ \csq{\Framerulewidth=}\dim\d .4pt
+ \csq{\Framerulewidth+=}\dim}
+Default thickness of the rule used when typesetting \csq\Frame\ modifications.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{framerulewidth}%
+ \csq{\framerulewidth=}\dim\d .4pt
+ \csq{\framerulewidth+=}\dim}
+Thickness of the rule used when typesetting frames with \csq\framed\ or
+\csqq\frame\endframe.
+
+\side
+\framerulewidth=2mm
+\frame Which way to the home world?\endframe
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fs}\{\dim\ or \num\}}
+Abbreviation for \csq\ts\{\dim\ or \num\} \csq\hs\{\dim\ or \num\}.
+
+The following trick with %\sidx{fs@{\csqn{fs}}!trick}%
+\csq\fs\ can be used to typeset an arrow which is parallel to
+another but offset by some distance.
+
+\eg
+\Dg
+M & & \rTo ^\theta & & \beta^{-1}(W) \\
+ & \rdTo & & \ldTo \\
+ & & \beta^{-1}(F) \\
+\Modify
+\Mapsto (0,2) (2,0) \fs{-50pt} \tl{x} \hd{R(x)}
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fx}\{\dim\ or \num\}}
+Abbreviation for \csq\tx\{\dim\ or \num\} \csq\hx\{\dim\ or \num\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fy}\{\dim\}}
+Abbreviation for \csq\ty\{\dim\} \csq\hy\{\dim\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{gr}\{{\it number}\}}
+Typeset an arrow or modification with the specified graylevel.
+Probably none too pretty on many an output device.
+
+\side
+\Graph{1cm}{1cm}
+\Box (0,0) (1,1) \gr{.25}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\gr\{{\it number}\} \csq\endgr\sindex mp{gr}\endgr}
+Typeset the enclosed material with the specified graylevel.
+
+\side
+\gr{.25}Anyone seen my bat'leth?\endgr
+\endside
+\sindex tw{bat'leth}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{Graph}\endGraph
+ \csq\Graph\{\dim\}\{\dim\} \csq\endGraph
+ \csq{\Graph\{\dim,}\dim\ or \int\}\{\dim\} \csq\endGraph
+ \csq\Graph\{\dim\}\{\dim{\tt ,}\dim\ or \int\} \csq\endGraph
+ \csq{\Graph\{\dim,}\dim\ or \int\}\{\dim{\tt ,}\dim\ or \int\} \csq\endGraph}
+Graph delimiters.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Graphpad}%
+ \csq{\Graphpad=}\dim\d 0pt
+ \csq{\Graphpad+=}\dim}
+Padding added to all sides of a Graph.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{grav}}
+Explicitly set the gravitating column.
+Columns at the ends of an arrow which passes through the gravitating column
+will tend to be centered on it.
+
+\eg
+\loose
+\Dg
+p^{-1}(U) & & \rTo & & U\times F & {} \approx U\times {\bb R}P^2 \\
+ & \rdTo <p & & \ldTo >{\pi_1} \\
+ & & U \grav & & \\
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{gravitateleft}}
+Set the default location of the gravitating column to the first column of
+an alignment.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{gravitateright}}
+Set the default location of the gravitating column to the last column of
+an alignment.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{gray} or \index mm{grey}}
+Typeset an arrow or modification with the graylevel set by \csq\graygray.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{gray}\endgray\ or \index mp{grey}\endgrey}
+Typeset the enclosed material with the graylevel set by \csq\graygray.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{graygray}\sindex mm{greygrey}%
+ \csq{\graygray=}\num\ or \csq{\greygrey=}\num\d .5}
+Set the graylevel used with \csq\gray.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{grid}%
+ \csq{\grid=}\dim
+ \csq{\grid+=}\dim}
+Abbreviation for \csq{\xgrid=}\dim\ \csq{\ygrid=}\dim\ or
+\csq{\xgrid+=}\dim\ \csq{\ygrid+=}\dim.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{gridgray}\sindex mm{gridgrey}%
+ \csq{\gridgray=}\num\ or \csq{\gridgrey=}\num\d .5}
+Set the graylevel used with \csq\gridlines.
+
+\side
+\gridlines \gridgray=0
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{gridlines}}
+Display gridlines.
+
+\side
+\gridlines
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hd}\{\math\}}
+Attach math material to the head of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+
+\side
+\Graph{5cm}{1cm}
+\To (0,.5) (1,.5) \hd{B}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{hmir}\endhmir}
+Reflect the enclosed material across a horizontal mirror lying
+on the baseline. The material cannot contain vertical commands
+(unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{hpad}%
+ \csq{\hpad=}\dim
+ \csq{\hpad+=}\dim}
+Abbreviation for \csq{\lpad=}\dim \csq{\rpad=}\dim\ or \csq{\lpad+=}\dim
+\csq{\rpad+=}\dim.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hr}\{\dim\}}
+Raise the vertex attached to the head of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hs}\{\dim\ or \num\}}
+Slide the vertex attached to the head of a type 2 modification cell
+horizontally.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hx}\{\dim\ or \num\}}
+Fudge the positioning of an arrow at its head.
+Makes the head of an arrow point to a point which is offset horizontally
+from the center of the math axis of the head vertex
+($\num = 0 \leftrightarrow{}$left edge of
+head vertex, $\num = 1 \leftrightarrow{}$right edge of head vertex).
+Has no effect on type 1 modification cells.
+\sindex tw{modification cell!type 1}
+
+\side
+\Diagram
+X \\
+ & \rdTo \hx{.2} \\
+ & & X\times X \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hy}\{\dim\}}
+Fudge the positioning of an arrow at its head.
+Makes the head of an arrow point to a point which is offset vertically
+from the math axis of the head vertex.
+Has no effect on type 1 modification cells.
+\sindex tw{modification cell!type 1}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{into}}
+Abbreviation for \@\lhook\joinrel\rightarrow@\, as in $A\into X$.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{jh}}
+Join the head of an arrow to the point at the coordinate of its head
+vertex by applying \csq\joinpush\ rather than \csq\cellpush\ (or \csq\ptpush\
+and \csq\atpush) and ignoring the dimensions of the vertex.
+
+\side
+\Diagram
+\bullet & \rLine \jh & \bullet \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{joined}}
+Invert the action of the \csq\jh, \csq\jn\ and \csq\jt\ modifiers:
+Ends of arrows are joined unless one of these is specified.
+
+\side
+\joined \scale=.5
+\Diagram
+ & \rLine & \\
+\dLine & & \dLine \\
+ & \rLine \jn & \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{joinpush}%
+ \csq{\joinpush=}\dim\d -1pt
+ \csq{\joinpush+=}\dim
+ \csq{\joinpush\{\type\}=}\dim\hs\csq{\joinpush\{\type\}+=}\dim}
+Global and type specific pushes used with \csq\jt, \csq\jh\ and \csq\jn.
+Spaces in \type\ are ignored.
+\endentry
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{jn}}
+Abbreviation for \csqq\jt\jh.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{jt}}
+Join the tail of an arrow to the point at the coordinate of its tail vertex.
+
+\side
+\Diagram
+\bullet & \rLine \jt & \bullet \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuvio}}
+Abbreviation for \@{\tt kuvio.tex}@\.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviocs}\ch\\{\it name}}
+Access a control sequence which \kuvio\ makes available but does not define
+explicitly due to a name conflict with an existing control sequence.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviodate}}
+Expands to the date of the current patchlevel of \kuvio.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviodef}}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviodefine}}
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviofmt}}
+Load all macros. This should be expanded when using \kuvio\ to build a
+format file.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuvioforce}\ch\\{\it name}}
+Force redefinition of \ch\\\emph{name} when \kuvio\ makes it available only
+through \csq\kuviocs.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviolet}}
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviopatchlevel}}
+Expands to the current patchlevel of \kuvio.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviorequire}\{\int\}}
+A warning of forthcoming disaster will be issued if \csq\kuviopatchlevel\ is
+not at least \int.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviorevision}\{\text\}}
+With compilation, cause the string \text\ to be written to {\tt .kuv} files.
+A diagram is recompiled if this string doesn't match the one found in its
+{\tt .kuv} file.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviospecial}\ch\\{\it name}}
+Set the \csq\special\ syntax. Not a good thing to do unless you know what
+you're doing. The following two lines in \kuvio\ set the syntax for
+{\tt dvips}.
+
+\code
+\def\dvipsspecial#1{\special{ps:#1}}
+\kuviospecial\dvipsspecial
+\endcode
+
+Experimentation with other {\tt dvi} to \PS\ translators is possible using
+\csq\kuviospecial.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Label}\{\math\}}
+Typeset math material as a modification in \csq\labelstyle.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{labelpad}%
+ \csq{\labelpad=}\dim\d 3pt
+ \csq{\labelpad+=}\dim
+ \csq{\labelpad\{\type\}=}\dim\hs\csq{\labelpad\{\type\}+=}\dim}
+Global and type-specific label pads. Spaces in \type\ are ignored.
+
+\side
+\labelpad{One}=5pt
+\Diagram A & \rTo ^f & B \\ \endDiagram
+\quad
+\Diagram A & \rOne ^f & B \\ \endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{labelpoint}%
+ \csq{\labelpoint=}\num\d .5
+ \csq{\labelpoint\{\type\}=}\num}
+Set the default location of labels tied to an arrow. Spaces in \type\ are
+ignored.
+
+\side
+\labelpoint{One}=.75
+\Diagram A & \rTo ^f & B \\ \endDiagram
+\quad
+\Diagram A & \rOne ^f & B \\ \endDiagram
+\endside
+
+Once a type-specific
+default has been set it can be unset, causing the global default to be used,
+by making an empty assignment of the form
+\csq{\labelpoint\ch\{\type\ch\}=\ch\{\ch\}}.
+All predefined cell types in \kuvio\ have their \csq\labelpoint\
+unset.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{labelstyle}\d\csq\scriptstyle}
+Style in which labels of a diagram are typeset.
+
+\side
+\let\labelstyle\textstyle
+\Diagram
+A & \rTo ^f & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{labelwidthpad}%
+ \csq{\labelwidthpad=}\dim\d 5pt
+ \csq{\labelwidthpad+=}\dim
+ \csq{\labelwidthpad\{\type\}=}\dim\hs\csq{\labelwidthpad\{\type\}+=}\dim}
+With a flexible grid, \kuvio\ will stretch a horizontal arrow
+(specified using a \csq\l\type\ or \csq\r\type\ cell macro) so
+that a label centered along its length isn't wider than the arrow
+is long. The value of \csq\labelwidthpad\ determines the minimum
+allowable distance between the edges of the label and the ends of
+the arrow. Note that the comparison of the arrow length and label
+width occurs before the application of cell pushes specified using
+\csq\dt\ and \csq\dh.
+
+Spaces in \type\ are ignored.
+
+\csq\labelwidthpad\ has no effect on labels which are not centered and
+no attempt is made to ensure that these ``fit'' on the arrow to
+which they are attached. Also, \csq\labelwidthpad\ may not work well
+with arrows that are attached to other arrows and are thus also
+affected by \csq\atpush\ and \csq\ptpush. See also \csq\lw.
+
+\eg
+\let\labelstyle\textstyle
+\labelwidthpad{One}+=5pt
+\leavevmode
+\Dg
+X(s)\times |u| & & \rTo ^{(f_{s\to t},\pi_2)} & & X(t)\times |u| \\
+ & \rdTo <{f_{s\to u}} & & \ldTo >{f_{t\to u}} \\
+ & & X(u) \\
+\endDg\qquad
+\Dg
+X(s)\times |u| & & \rOne ^{(f_{s\to t},\pi_2)} & & X(t)\times |u| \\
+ & \rdTo <{f_{s\to u}} & & \ldTo >{f_{t\to u}} \\
+ & & X(u) \\
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{land}\endland}
+Rotate the enclosed material by 90 degrees counterclockwise.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{landscape}}
+Rotate a diagram 90 degrees counterclockwise.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{latexTo}}
+Load the font {\tt line10}, define \csq\sleftarrowfill\ and
+\csq\srightarrowfill\ using the arrowhead character from this font and do
+\@\let\Tofill\srightarrowfill@\.
+
+\side
+\latexTo
+\Dg
+A & \rTo & B & \rOne & C \\
+\endDg
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{lb}}
+Make an arrow left braced.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Long@{\tt Long}}\tt Long}
+Diagram type having \csq\flexible, \csq{\xgrid=0pt} and \csq{\ygrid+=-5mm}.
+
+\eg
+\Long
+0 & & & & & & 0 \\
+\dEq & & & & & & \dEq \\
+\pi_j S^k & \rTo & \pi_j V(n,k) & \rTo & \pi_j V(n-1,k+1) & \rTo & \pi_{j-1} S^k \\
+\endLong
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{loose}}
+Make all diagonal alignment cells unbraced by default.
+Additionally, sets \csq{\columndist=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{lpad}%
+ \csq{\lpad=}\dim\d 0pt
+ \csq{\lpad+=}\dim}
+Padding added to the left of a diagram or framed material.
+
+\side
+\framed \lpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{lw} or \csq\lw\{\dim\}}
+In the first case, don't stretch a horizontal
+arrow even if a centered label is wider than the arrow is long.
+In the second case, increase the effective width of the label by twice
+\dim. See \csq\labelwidthpad.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Math}\{\math\}}
+Typeset math material as a modification in \csq\textstyle.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{%
+ \csq{\MinimumCellLength=}\dim\d 0pt
+ \csq{\MinimumCellLength+=}\dim}
+Minimum arrow length to be typeset.
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{ml}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the left.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Modify}}
+Modifications are specified following an occurrence of this control sequence.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{mono}}
+A monomorphism arrow, as in $A\mono B$. The {\tt arrsy10} font must be loaded
+for this to work. See \csq\arrsy.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{mr}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the right.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{mx}\{\num\ or \dim\}}
+Move the column in which this control sequence occurs.
+\csq\mx\{\dim\} moves the column rightward by \dim.
+If the distance to the next column (to the right) is currently $d$,
+\csq\mx\{\num\} moves the column rightward by $\num\cdot d$.
+
+\side
+\gridlines
+\Diagram
+A & B \mx{5mm} & C & D & E \\
+A & B & C & D \mx{-.25} & E \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{my}\{\num\ or \dim\}}
+Move the row in which this control sequence occurs.
+\csq\my\{\dim\} moves the row upward by \dim.
+If the distance to the next row (above) is currently $d$,
+\csq\my\{\num\} moves the row upward by $\num\cdot d$.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mm{mv}\csq{\mv\{\dim1,\dim2\}}}
+Abbreviation for \csq\rt\{\dim1\} \csq\up\{\dim2\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newcell}\{\type\}}
+Define a new cell type.
+One must define either the fill macro
+\ch{\\\type fill} or redefine
+the box macro \ch{\\\type box} before using a cell macro associated with
+this cell type. Spaces in \type\ are ignored.
+
+\side
+\newcell{Br}
+\def\Brfill{\linefill\ \rightarrowfill}
+
+\Diagram
+A & \rBr & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newDiagram}\{\type\}}
+Define a new Diagram type. The macro pair \ch\\\type\ \csq\end\type\
+delimits Diagrams of this type. The macro \csq\every\type\ can be used
+to customize their setup. Spaces in \type\ are ignored.
+
+\side
+\newDiagram{Framed}
+\def\everyFramed{\Diagrampad=10pt \framed}
+
+\Framed
+A & \rTo & B \\
+\endFramed
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newFigure}\{\type\}}
+Define a new Figure type. The macro pair \ch\\\type\ \csq\end\type\
+delimits Figures of this type. The macro \csq\every\type\ can be used
+to customize their setup. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newfill}\{\name\}\{\emph{tail} \emph{tokens}\}%
+ \{\emph{mid} \emph{tokens}\}\{\emph{head} \emph{tokens}\}}
+Define a fill macro, which can then be used to construct arrows for diagrams.
+Spaces in \name\ are ignored.
+
+\side
+\font\tenln=line10
+\def\ltxah{\smash{\hbox{\kern-4pt\raise\fontdimen22\textfont2
+ \hbox{\tenln\char"2D}\hskip.5pt}}}
+\newfill{srightarrow}--\ltxah
+
+\hbox to 3cm{\srightarrowfill}
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newGraph}\{\type\}}
+Define a new Graph type. The macro pair \ch\\\type\ \csq\end\type\
+delimits Graphs of this type. The macro \csq\every\type\ can be used
+to customize their setup. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{nonkuviocs}\ch\\{\it name}}
+Access the original definition of a control sequence which \kuvio\ has
+redefined.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{nl}}
+Typeset an arrow as a phantom.
+
+{\edge{.7}
+\side
+\newcell{Adj}
+\def\Adjbox#1{\vcenter{\offinterlineskip\dimen0=#1
+ \hbox to #1{\hskip.2\dimen0\rightarrowfill}
+ \hbox to #1{\leftarrowfill\hskip.2\dimen0}}}
+
+\labelpad{Adj}=2.5pt
+\Diagram
+A & \rAdj ^{f_1} :{.6} \rAdj \nl _{f_2} :{.4} & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{nocompile}}
+Equivalent (almost) to \@\def\compileto#1{}@\.
+Note that \@\global\nocompile@\ behaves as expected.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{nodot}}
+Inhibit the typesetting of a \csq\diagramdot\ in an alignment entry of
+a Diagram for which \csq\dotted\ has been specified.
+See \csq\dotted.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{nw}}
+Ignore a horizontal alignment cell as far as positioning the columns at
+its head and tail.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{opland}\endopland}
+Rotate the enclosed material by 90 degrees clockwise.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{oplandscape}}
+Rotate a diagram 90 degrees clockwise.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{overgrid}}
+Typeset a grid on top of a Figure.
+For Diagrams and Graphs, synonymous with \csq\gridlines.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{pd}\{\math\}}
+Abbreviation for \csq\hd\{\csq\phantom\{\math\}\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{pl}\{\math\}}
+Abbreviation for \csq\tl\{\csq\phantom\{\math\}\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{pp}}
+Typeset an alignment cell before those corresponding to cell macros
+preceding it (above or to the left).
+Usually alignment cells are typeset in the same order in which
+their corresponding cell macros were processed (top to bottom, left to right)
+but order is important when breaking arrows with \csq\br\ or \csq\rl.
+Modification cells can be used for even greater control over the order in which
+arrows are typeset.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Pt}\{\name\}}
+Name a point which can then be referenced using \csq\pt.
+Spaces in \name\ are significant.
+
+\side
+\Graph{2cm}{15mm}
+\Pt{tail} (0,1)
+\Pt{head} (1,0)
+\To \pt{tail} \tl{X} \pt{head} \hd{Y}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mm{pt}%
+ \csq{\pt\{\name,\num\}}
+ \csq{\pt\{\name\}}}
+Name, or reference as a coordinate, a point on an arrow.
+The string \name\ must be enclosed in parentheses if it contains a comma.
+Also, spaces in \name\ are significant.
+For type 1 modification cells \csq\pt\ is somewhat stunted: A defined point
+is always just the specified coordinate.
+\sindex tw{modification cell!type 1}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{ptpoint}%
+ \csq{\ptpoint=\num\d .5}
+ \csq{\ptpoint\{\type\}=\num}}
+Set the default location of points defined on arrows. Behaves like
+\csq\labelpoint. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{ptpush}%
+ \csq{\ptpush=}\dim\d 0pt
+ \csq{\ptpush+=}\dim
+ \csq{\ptpush\{\type\}=}\dim\hs\csq{\ptpush\{\type\}+=}\dim}
+Global and type-specific amounts by which the end of an arrow attached
+to another arrow (using \csq\pt) is shortened whenever a vertex has not been
+attached using \csq\hd\ or \csq\tl.
+The type-specific quantity applies to ends of arrows of cell type \type.
+Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{range}\csq{\range=}\int}
+Set both \csq\xrange\ and \csq\yrange.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rb}}
+Make an arrow right braced.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{recompile}}
+Equivalent (almost) to \@\let\compileto\recompileto@\.
+Note that \@\global\recompile@\ behaves as expected.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{recompileto}\{\name\}}
+Compile a diagram to the files \name{\tt .kdg} and \name{\tt .kuv}.
+Spaces in \name\ are ignored.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rekuviodef}}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rekuviodefine}}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rekuviolet}}
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{%
+ \index mm{rl}%
+ \csq\rl\{\dim\}}
+Like \csq\br\ except a white rule is typeset in place of an arrow.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mm{rm}\csq{\rm\{\dim1,\dim2\}}}
+Abbreviation for \csq\rr\{\dim1\} \csq\ru\{\dim2\}. This meaning is only taken
+when a modifier is expected so does not conflict with the usual meaning of
+\csq\rm. This is also true of all other modifiers.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ro}}
+Rotate labels on an arrow.
+
+{\edge{.7}
+\side
+\Diagram
+ & & A \\
+ & \ldTo <L >R \ro & \dTo <L >R \ro & \rdTo <L >R \ro \\
+X & & X & & X \\
+\endDiagram
+\endside
+}
+
+If \csq\rotatedlabels\ is specified then \csq\ro\ inhibits rotation.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{rot}\endrot\csq\rot\{\num\} \csq\endrot}
+Rotate the enclosed material by \num\ degrees counterclockwise.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rotatedlabels}}
+Invert the action of the \csq\ro\ modifier: Labels are rotated
+unless \csq\ro\ is specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{rpad}%
+ \csq{\rpad=}\dim\d 0pt
+ \csq{\rpad+=}\dim}
+Padding added to the right of a diagram or framed material.
+
+\side
+\framed \rpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rr}\{\dim\}}
+Move an arrow or modification
+to the right relative to a rotated coordinate system.
+
+\side
+\Diagram
+A & & B & \lTo ^f \rr{2\xgrid} & C \\
+\endDiagram
+\endside
+
+Note that \csq\xgrid\ is not actually a dimension
+register, although in the context of a Diagram it can be used as
+such. Ditto for \csq\ygrid.
+For a Figure or Graph one can use
+\csq\xunit\ and \csq\yunit\ in the same way.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rt}\{\dim\}}
+Move an arrow or modification to the right.
+
+\side
+\Diagram
+A & & B & \rTo ^f \rt{-2\xgrid} & C \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ru}\{\dim\}}
+Move an arrow or modification
+upwards relative to a rotated coordinate system.
+
+{\edge{.7}
+\side
+\Diagram
+A \\
+ & \luTo _f \ru{5pt} \luTo ^g \ru{-5pt} \\
+ & & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Rule@{\tt Rule}}\tt Rule}
+Cell type whose arrows are rules. The rule width can be set using \csq\rw.
+
+{\edge{.7}
+\side
+\Diagram
+A & \rRule ^{\rm above} _{\rm below} & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Rulewidth}%
+ \csq{\Rulewidth=}\dim\d 5pt
+ \csq{\Rulewidth+=}\dim}
+Default rule width used with {\tt Rule} cells.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rw}\{\dim\}\d .4pt}
+Set the rule width for a {\tt Rule} cell or \csq\Frame\ modification.
+
+\side
+\Graph{.25\hsize}{5mm,2}
+\Frame (0,0) (.45,2) \rw{1mm}
+\Rule (.55,1) (1,1) \rw{3mm}
+\endGraph
+\endside
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{safe}\ch\\{\it name}}
+Inside an alignment, access the usual definition of a special control
+sequence.
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{scale}\csq{\scale=}\num}
+Abbreviation for \csq{\xscale=\num} \csq{\yscale=\num}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{shade}\endshade
+ \csq{\shade\{\dim,\dim\}\{\dim,\dim\}} \csq\endshade}
+Place a shadow behind a frame by specifying its offsets from the
+bottom left and top right corners of the enclosed material.
+The values of \csq\framegray, \csq\framepad\ and \csq\framerulewidth\ apply.
+
+\verbatim
+\shade{5pt,-5pt}{3pt,-3pt}\epsfxsize=3cm \epsffile{harebra.eps}\endshade
+\endverbatim
+
+\leavevmode\hskip\egindent\shade{5pt,-5pt}{3pt,-3pt}\harebra\endshade
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{shadegray}\sindex mm{shadegrey}%
+ \csq{\shadegray=}\num\ or \csq{\shadegrey=}\num\d 0}
+Set the graylevel of the shadow produced by \csqq\shade\endshade.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{stop}}
+Force an arrow to stop at an alignment entry. Has no effect on
+cell macros in the same alignment entry.
+
+{\edge{.7}
+\side
+\Diagram
+A & \rTo \up{-2pt} & \stop \rTo \up{2pt} & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{squash}}
+Like \csq\smash\ from {\tt plain.tex} except typesets the following
+parenthesized material in a box
+having no height, depth or width. The typeset material is centered
+horizontally.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{squish}}
+Like \csq\smash\ from {\tt plain.tex} except typesets the following
+parenthesized material in a box
+having the same height and depth but no width.
+The typeset material is centered horizontally.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{tall}}
+Make the baseline of a Diagram coincide with that of
+its bottommost row and
+the baseline of a Figure or Graph coincide with that of
+its lower edge.
+This is the default for Figures and Graphs in non-math modes.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Text}\{\text\}}
+Typeset \text\ as a modification.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{tl}\{\math\}}
+Attach math material to the tail of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+
+\side
+\Graph{5cm}{5mm}
+\To (0,.5) (1,.5) \tl{A}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{tpad}%
+ \csq{\tpad=}\dim\d 0pt
+ \csq{\tpad+=}\dim}
+Padding added to the top of a diagram or framed material.
+Does not alter the baseline.
+
+\side
+\framed \tpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{tr}\{\dim\}}
+Raise the vertex attached to the tail of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ts}\{\dim\ or \num\}}
+Slide the vertex attached to the tail of a type 2 modification cell
+horizontally.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{tx}\{\dim\ or \num\}}
+Fudge the positioning of an arrow at its tail. See \csq\hx.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Txt}\{\text\}}
+Typeset \text\ as a modification, centered vertically on its math axis.
+
+\eg
+\gridlines
+\Graph{2cm}{1cm,2}
+\Text{left} (0,1) *0 \Txt{right} (1,1) *1
+\endGraph
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ty}\{\dim\}}
+Fudge the positioning of an arrow at its tail.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\ch\\\type}
+Typeset an arrow of cell type \type\ as a modification.
+Has ten siblings for use in the alignment part of a Diagram:
+\csq\a\type, \csq\b\type, \csq\r\type,
+\csq\rd\type, \csq\d\type, \csq\ld\type, \csq\l\type,
+\csq\lu\type, \csq\u\type\ and \csq\ru\type.
+
+Non-empty alignment entries in a Diagram
+are implicitly attached (a la \csq\pl\ and \csq\pd) to the end of any
+type 2 modification cell having integral (no decimal point) coordinates.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{unit}%
+ \csq{\unit=}\dim
+ \csq{\unit+=}\dim}
+Abbreviation for \csq{\xunit=\dim} \csq{\yunit=\dim} or \csq{\xunit+=\dim}
+\csq{\yunit+=\dim}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{up}\{\dim\}}
+Move an arrow or modification upwards.
+
+\side
+\Diagram
+A & \rTo ^f \up{-\ygrid} & B \\
+A & & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Vertex}\{\math\}}
+Typeset math material as a modification in \csq\vertexstyle.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{vertexstyle}\d\csq\displaystyle}
+Style in which vertices of a diagram are typeset.
+
+\side
+\let\vertexstyle\scriptstyle
+\Diagram
+A & B \\
+C & D \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{vmir}\endvmir}
+Reflect the enclosed material across a vertical mirror located
+horizontally at the midpoint of the material. The material
+cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{vpad}%
+ \csq{\vpad=}\dim
+ \csq{\vpad+=}\dim}
+Abbreviation for \csq{\bpad=}\dim\ \csq{\tpad=}\dim\ or \csq{\bpad+=}\dim\
+\csq{\tpad+=}\dim.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{white}}
+Typeset an arrow or modification with graylevel 1.
+
+\eg
+\font\big=cmss17
+\Graph{.25\hsize}{1cm}
+\Box (0,0) (1,1)
+\Txt{\big \"Ovningsk\"orning} (.5,.5) \white
+\endGraph
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{white}\endwhite}
+Typeset the enclosed material with graylevel 1.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xgrid}%
+ \csq{\xgrid=}\dim\d 1cm
+ \csq{\xgrid+=}\dim}
+Set the default distance between the vertical gridlines of a
+Diagram. Sets \csq{\xscale=1}.
+
+\side
+\xgrid=2cm
+\Diagram
+A & B \\
+C & D \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xrange}\csq{\xrange=}\int\d 1}
+Set the horizontal units for the coordinate
+system used when typesetting modifications on a Figure or Graph
+by dividing the default unit by \int.
+
+\side
+\xrange=2
+\Graph{1cm}{5mm}
+\Dot (0,.5) \Dot (1,.5) \Dot (2,.5)
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xscale}\csq{\xscale=}\num\d 1}
+Scale \csq\xgrid\ by \num.
+
+\side
+\xscale=1.5
+\Diagram
+A & B \\
+C & D \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xunit}%
+ \csq{\xunit=}\dim
+ \csq{\xunit+=}\dim}
+Set the horizontal units for the coordinate
+system used when typesetting modifications on a Figure or Graph.
+
+\side
+\xunit=5mm
+\Graph{1cm}{5mm}
+\Dot (0,.5) \Dot (1,.5) \Dot (2,.5)
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{ygrid}%
+ \csq{\ygrid=}\dim\d 1cm
+ \csq{\ygrid+=}\dim}
+Set the default distance between the horizontal gridlines of a
+Diagram. Sets \csq{\yscale=1}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{yrange}\csq{\yrange=}\int\d 1}
+Set the vertical units for the coordinate
+system used when typesetting modifications on a Figure or Graph
+by dividing the default unit by \int. See \csq\xrange.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{yscale}\csq{\yscale=}\num\d 1}
+Scale \csq\ygrid\ by \num. See \csq\xscale.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{yunit}%
+ \csq{\yunit=}\dim
+ \csq{\yunit+=}\dim}
+Set the vertical units for the coordinate
+system used when typesetting modifications on a Figure or Graph.
+See \csq\xunit.
+\endentry
+
+\endinput
+
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk.cd b/macros/generic/diagrams/kuvio/doc-src/tdwk.cd
new file mode 100644
index 0000000000..aaea6cb981
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk.cd
@@ -0,0 +1,161 @@
+% tdwk.cd
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 14:35:42 PDT agss@klagshamn>
+
+% $Date: 1996/06/09 21:44:47 $
+% $Revision: 1.3 $
+
+\usecarrot{sfss,index,toc,environ,label}
+\usecarrot[toc,number]{section}
+\usecarrot[shortrevisions]{rcs}
+
+% Indicate the revision, date and author in the document.
+
+\let\@@revision\relax
+\def\revision{\gdef\@@revision}
+
+\let\@@date\relax
+\def\date{\gdef\@@date}
+
+\let\@@author\relax
+\def\author{\gdef\@@author}
+
+\let\@@email\relax
+\def\email{\gdef\@@email}
+
+\def\title#1{\gdef\@@title{#1}{\FontSize{16}\bf\noindent #1}%
+ \identifier\@@author\@@email\@@revision\@@date
+ \let\email\emailaddress}
+\let\@@title\relax
+
+\headline{\headliner\@@title\@@author\@@revision\@@date}
+
+\def\emailaddress#1{{\tt\lower.8pt\hbox{<}#1\lower.8pt\hbox{>}}}
+
+\def\identifier#1#2#3#4{
+ \ifx#1\relax
+ \else
+ \smallskip
+ \noindent{\bf#1}%
+ \ifx#2\relax
+ \else
+ \ \ \emailaddress#2\relax
+ \fi
+ \fi
+ \revisionidentifier#3#4\relax
+ \bigskip}
+
+\def\revisionidentifier#1#2{
+ \ifx#1\relax
+ \ifx#2\relax
+ \else
+ \bigskip\noindent#2\relax
+ \fi
+ \else
+ \revisionfootnote#1#2\relax
+ \fi}
+
+\def\revisionfootnote#1#2{\footnote{}{#1. \ifx#2\relax\else#2.\fi}}
+
+\def\headliner#1#2#3#4{%
+ \headlinefont
+ \ifnum\pageno=1
+ \hfil
+ \else
+ \ifx#1\relax \else #1\fi
+ \hfil \ifx#3\relax\else#3\fi
+ \fi}
+\def\headlinefont{\fontsize{8}}
+
+% Sectioning.
+
+\newsection{section}<-\lastskip+\bigskipamount><\medskipamount>
+\presectionhook[section]{\goodbreak}
+\headinghook[section]{\FontSize{14}\bf}
+\def\sectionplug{.\defaultsectionplug}
+
+\def\tableofcontents{\vfill\bgroup
+ \parskip=2pt
+ \tochead
+ \readtocfile
+ \egroup\newpage}
+
+\def\tochead{{\FontSize{14}\currentfont Contents}\par
+ \leavevmode
+ \hbox to .6\hsize{\hfil\squish{\it page}\ }\par}
+
+\def\tocsectionentry#1#2#3{\leavevmode
+ \hbox to .6\hsize{%
+ \ifnum#2<10 \phantom{1}\fi #2.\quad
+ {\bf #1}\ \dotfill\ #3}\par}
+
+\def\sectiontag#1{\S#1}
+
+\def\printindex{
+ \begindoublecolumns
+ \parskip\z@
+ \parindent=7pt
+ \fontsize{9}
+ \def\item{\par\noindent}
+ \def\subitem{\par\indent \hangindent\parindent \indent}
+ \let\indexspace\bigskip
+ \def\begin##1{}\def\end##1{}
+ \readind
+ \enddoublecolumns}
+
+% Double column code modified from Knuth's manmac.tex, with
+% \onpageout a modification of plain.tex's \plainoutput.
+
+\newdimen\pagewidth
+\newdimen\pageheight
+\newbox\partialpage
+
+\def\begindoublecolumns{%
+ \begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \output={\doublecolumnout} \hsize=15pc \vsize=2\pageheight}
+\def\enddoublecolumns{\newpage\endgroup \pagegoal=\vsize}
+
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=\pageheight
+ \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+
+\def\pagesofar{%
+ \unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+
+\def\onepageout#1{%
+ \shipout\vbox{{\hsize\pagewidth\makeheadline}\onepagebody{#1}%
+ {\hsize\pagewidth\makefootline}}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+\def\onepagebody#1{%
+ \vbox to\pageheight{\boxmaxdepth\maxdepth \onepagecontents{#1}}}
+
+\def\onepagecontents#1{%
+ \ifvoid\topins\else\unvbox\topins\fi
+ #1%
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+
+%%%%
+
+\def\emph#1{{\it #1}\@ifnextchar@.{}{\@ifnextchar@,{}{\/}}}
+
+\parindent 0pt
+\baselineskip=12pt
+\parskip=10pt plus 1pt
+\raggedbottom
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk.ist b/macros/generic/diagrams/kuvio/doc-src/tdwk.ist
new file mode 100644
index 0000000000..881d23f640
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk.ist
@@ -0,0 +1,10 @@
+% tdwk.ist
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 13:32:29 PDT agss@klagshamn>
+
+% $Date: 1996/06/09 20:32:58 $
+% $Revision: 1.2 $
+
+delim_0 "\\ \\dotfill\\ "
+delim_1 "\\ \\dotfill\\ "
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk.tex
new file mode 100644
index 0000000000..a165a5e5fa
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk.tex
@@ -0,0 +1,1743 @@
+% tdwk.tex
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 14:35:27 PDT agss@klagshamn>
+
+% $Revision: 2.5.0.12 $
+% $Date: 1996/06/09 21:43:53 $
+
+\input carrot \usecarrot{sfss} \usefs{arrsy,bbm}
+\input epsf
+\input kuvio \arrsy
+\input verbatim
+\input listing
+\input tdwk-r \kuviorequire\doclevel
+
+\let\bb\bbm
+
+\listingindent=10pt
+\verbatimindent=10pt
+
+\autocompileto{tdwk/tdwk}
+
+{\escapechar=-1
+ \xdef\AAAA{\expandafter\string\csname tdwk-A4\endcsname}\xdef\NAME{\jobname}}
+
+\newif\ifAAAA
+
+\ifx\AAAA\NAME
+\AAAAtrue
+\fi
+
+\ifAAAA
+\special{papersize=210mm,297mm}
+\hsize=15.9cm
+\vsize=24.6cm
+\kuviorevision{$Revision: 2.5.0.12 $ A4}
+\else
+\special{papersize=8.5in,11in}
+\kuviorevision{$Revision: 2.5.0.12 $}
+\fi
+
+\pagewidth\hsize \pageheight\vsize
+
+\def\verbatimit{\FontSize{9}\SelectTextFont{cmti}}
+\let\verbatimtt\listingtt
+
+\newverbatim{code}
+\def\everycode{\verbatimindent=25pt\everyverbatim}
+
+\newgroup*{indented}
+ {\par\parindent=25pt\leavevmode\parskip=0pt\obeylines}
+ {\par}
+
+\newwrite\tmpfile
+\def\opentmp{\immediate\openout\tmpfile=\jobname.tmp }
+\def\closetmp{\immediate\closeout\tmpfile}
+\def\writetmp{\immediate\write\tmpfile}
+
+\newverbatim{eg}
+\def\everyeg{\opentmp\obeyspaces}
+\def\egline#1\egendline{\writetmp{#1}}
+\def\endeg{\closetmp{\nolinenumbers\listing{\jobname.tmp}}%
+ \leavevmode\hskip\egindent
+ \vbox{\advance\hsize by -\egindent\leavevmode\input \jobname.tmp }\par}
+
+\def\egindent{10pt}
+
+\newverbatim{side}
+\let\everyside\everyeg
+\def\sideline#1\sideendline{\writetmp{#1}}
+\def\endside{\closetmp\par\leavevmode
+ \hbox to \hsize{%
+ \hbox to \ifx\sideedge\empty .6\else\sideedge\fi\hsize{%
+ \vbox{\nolinenumbers\listing{\jobname.tmp}}%
+ \hss}%
+ \vbox{\leavevmode\tall\input \jobname.tmp }%
+ \hss}%
+ \par}
+
+\let\sideedge\empty
+\def\edge#1{\def\sideedge{#1}}
+
+\let\stockepsffile\epsffile
+\def\epsffile#1{\stockepsffile{eps/#1}}
+
+\def\csq#1{{\tt\string#1}}
+\def\ch#1{{\escapechar=-1 \tt\string#1}}
+\def\newpage{\vfill\eject}
+\def\type{\emph{type}}
+\def\name{\emph{name}}
+\def\num{\emph{number}}
+\def\BAR{\ch\|}
+
+\def\PS{{\sf PostScript}}
+\def\LaTeXe{\LaTeX\kern.15em 2${}_{\textstyle\varepsilon}$}
+\def\AMS{{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}}
+\def\AMSLaTeX{\AMS-\LaTeX}
+\def\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em\TeX}%
+
+% Indexing
+
+\let\sidx\index
+\def\sidxe#1{\sidx{#1|emph}}
+\def\sidxm#1#2{\sidx{#2@#1{#2}}}
+\def\sidxme#1#2{\sidx{#2@#1{#2}|emph}}
+
+\def\index#1#2{\csname #1#2Idx\endcsname}
+\def\iindex#1#2#3{\emph{\index#1#2{#3}}}
+\def\sindex#1#2{\csname #1#2sIdx\endcsname}
+
+\def\tmsIdx{\sidxm\csqn}% text, macro
+\def\tpsIdx#1#2{\sidxm\csQ{#1 #2}}% text, macro pair
+\def\tcsIdx{\sidxm\ch}% text, character
+\def\twsIdx{\sidx}% text, word
+
+\def\tmIdx#1{\csqn{#1}\tmsIdx{#1}}
+\def\tpIdx#1#2{\csqqn#1 #2\tpsIdx{#1}#2}
+\def\tcIdx#1{\ch#1\tcsIdx#1}
+\def\twIdx#1{\EatAt#1@@\twsIdx{#1}}
+
+\def\mmsIdx{\sidxme\csqn}% main, macro
+\def\mpsIdx#1#2{\sidxme\csQ{#1 #2}}% main, macro pair
+\def\mcsIdx{\sidxme\ch}
+\def\mwsIdx#1{\sidxe{#1}}% main, word
+
+\def\mmIdx#1{\csqn{#1}\mmsIdx{#1}}
+\def\mpIdx#1#2{\csqqn#1 #2\mpsIdx{#1}#2}
+\def\mcIdx#1{\ch#1\mcsIdx#1}
+\def\mwIdx#1{\EatAt#1@@\mwsIdx#1}
+
+\def\EatAt#1@#2@{\def\Action{#2}%
+ \ifx\Action\empty\def\Action{#1}\else\def\Action{#2\Chomp}\fi
+ \Action}
+\def\Chomp#1{}
+\def\csqq#1#2{\csq#1\ \csq#2}
+\def\csqn#1{{\tt\expandafter\string\csname #1\endcsname}}
+\def\csQ#1{\csqqn#1}
+\def\csqqn#1 #2{{\tt\expandafter\string\csname #1\endcsname}\ \csq#2}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\author{Anders G. S. Svensson}
+\email{svensson@math.ubc.ca}
+\title{Typesetting diagrams with kuvio.tex}\footnote{}
+{\rcsrevision$Revision: 2.5.0.12 $ for patchlevel \doclevel.
+ \rcsdate$Date: 1996/06/09 21:43:53 $.\hfil\break}
+\revision{\rcsrevision$Revision: 2.5.0.12 $}
+
+The macros in \kuvio\ use \PS\ code embedded in \csq{\special} control
+sequences to perform rotations and reflections and to set graylevels.
+The \csq{\special} syntax used is that of Tomas Rokicki's excellent
+{\tt dvips}. Be forewarned that this is likely to confuse many {\tt
+dvi} (not \PS) previewers.
+
+A summary contains details on the syntax of control sequences as well
+as discussion of several points not covered in the main sections of
+this manual.
+
+\tableofcontents
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Cell Macros}
+
+Let's start with a simple diagram.
+
+\eg
+\Diagram
+P' \aTo (2,-4) <{b'} \aTo (4,-2) >{a'} \\
+ & \rdTo \\
+ & & P & \rTo ^a & A \\
+ & & \dTo <b & & \dTo \\
+ & & B & \rTo & X \\
+\endDiagram
+\endeg
+
+The control sequences \csq\rTo, \csq\dTo,
+\csq\rdTo\ and \csq\aTo\ in this example each specify an arrow in the diagram.
+These control sequences are called \sindex tw{cell macro}\emph{cell
+macros} and, in this case, each is associated with the \iindex tw{cell
+type} {\tt To}. Note that, except for \csq\aTo, the direction of the
+arrow is built into the name of the cell macro: \csq\rTo\ for a
+rightward {\tt To} cell, \csq\dTo\ for a downward {\tt To} cell, etc.
+In the case of \csq\aTo, the arrow extends from the alignment entry in
+which the macro was found to the alignment entry whose relative
+position is specified by a parenthesized pair of integers. In our
+example, the arrow specified by
+\code
+\aTo (2,-4)
+\endcode
+points to the alignment entry 2 columns to the right and 4 rows below
+the entry in which this code is located.
+
+We shall soon see that there are many cell types predefined in \kuvio\
+and that other types can easily be defined by the user using the
+control sequence \csq\newcell. The full list of cell macros
+associated with a cell type \type\ is as follows.
+
+{\parindent=25pt\leavevmode
+\vbox{\openup2pt\halign{#\hfil\qquad& #\hfil\cr
+\csq\a\type& \type\ cell originating at an alignment entry\cr
+\csq\b\type& \type\ cell terminating at an alignment entry\cr
+\csq\ru\type& rightward and upward \type\ cell\cr
+\csq\r\type& rightward \type\ cell\cr
+\csq\rd\type& rightward and downward \type\ cell\cr
+\csq\lu\type& leftward and upward \type\ cell\cr
+\csq\l\type& leftward \type\ cell\cr
+\csq\ld\type& leftward and downward \type\ cell\cr
+\csq\u\type& upward \type\ cell\cr
+\csq\d\type& downward \type\ cell\cr
+\ch\\\type& \type\ cell typeset as a \emph{modification}\cr
+}}}
+
+The last of these differs from the others in that it it not used in
+alignments. This will be discussed in \ref{Modification Cells I}. The
+\csq\b\type\ cell macro is similar to \csq\a\type\ except that the
+required coordinate pair specifies the relative position of the tail
+(rather than the head) of the arrow.
+
+\side
+\Diagram
+A \aTo (1,-1) & & A \\
+ & B \bTo (1,1) \\
+\endDiagram
+\endside
+
+Let us refer to cell macros which can be used in alignments as
+\sindex tw{cell macro!alignment}\emph{alignment cell macros}
+and all others as
+\sindex tw{cell macro!modification}\emph{modification cell macros}.
+Thus, associated with any cell type we have ten alignment cell macros
+and one modification cell macro.
+
+Labels are tied to arrows using \index tc\<, \index tc\>, \index tc\_\
+and \index tc\^\ for labels to the left, right, below and above an
+arrow respectively. Many characteristics of an arrow and its labels
+can be modified using certain characters and control sequences, which
+we will refer to as \sindex tw{modifier}\emph{modifiers}, following an
+occurrence of a cell macro. The \index tc\:\ modifier can be used to
+tie labels to a point other than the midpoint of an arrow.
+
+\side
+\Diagram
+A & \rTo ^f :{.75} & B \\
+\endDiagram
+\endside
+
+The argument passed to {\tt :} is used to interpolate linearly between
+the tail and head of an arrow, 0 being the tail and 1 being the head.
+One can also use {\tt :} to move labels in a direction perpendicular
+to that of an arrow by supplying it with a dimension rather than a
+real number.
+
+\side
+\Diagram
+A & \rTo ^f :{5pt} & B \\
+\endDiagram
+\endside
+
+To use both functions of the {\tt :} modifier, separate two arguments (in
+either order) by a comma or semicolon.
+
+\side
+\Diagram
+A & \rTo ^f :{.75,5pt} & B \\
+\endDiagram
+\endside
+
+Except for the \csq\a\type\ and \csq\b\type\ variants, arrows specified by
+alignment cell macros, \sindex tw{alignment cell}\emph{alignment cells},
+stretch to meet non-empty alignment entries.
+
+\goodbreak
+\side
+\Diagram
+A & \rTo & B \\
+C & & \rTo & D \\
+\endDiagram
+\endside
+
+The control sequence \index tm{stop} can be used to stop an alignment cell
+at an otherwise empty alignment entry.
+
+\side
+\Diagram
+ & \rTo & \stop & \rTo & \stop \\
+ & & \stop & \rTo & \stop & \rTo & \\
+\endDiagram
+\endside
+
+\ifAAAA \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Grid Lines}
+
+Each diagram is constructed on a grid, vertical grid lines
+corresponding to columns in an alignment and horizontal grid lines to
+rows. Tokens preceding the first occurrence of a cell macro in an
+alignment entry are typeset at the intersection point of two grid
+lines.
+
+There are two kinds of grid: \sindex tw{grid!rigid}\emph{rigid} and
+\sindex tw{grid!flexible}\emph{flexible}. The grid lines of a rigid
+grid will be uniformly spaced unless explicitly moved while those of a
+flexible grid will be positioned using knowledge of the particular
+vertices and arrows occurring in a diagram. The pair
+\csqq\Diagram\endDiagram\ uses a rigid grid by default. Flexible
+grids are enabled using the control sequence
+\csq\flexible. These will be discussed in \ref{Flexible Grids}.
+
+Grid lines can be moved using any of the control sequences
+\index tm{mx}, \index tm{my}, \index tm{dx}, \index tm{dy}, \index tm{ml},
+\index tm{mr}, \index tm{dl} and \index tm{dr}.
+\index tm{mx} adjusts the position of the vertical grid line
+associated with the column in which this control sequence occurs while
+\csq\dx\ simultaneously adjusts the position of all grid lines
+associated with columns lying to the right of the one in which it
+occurs. The row in which either \csq\mx\ or \csq\dx\ occurs is
+immaterial.
+
+\side
+\gridlines
+\Diagram
+A & B \mx{-5mm} & C & D & E & F \\
+A & B & C & D & E \dx{5mm} & F \\
+\endDiagram
+\endside
+
+The behaviour of \csq\my\ and \csq\dy\ on horizontal grid lines
+corresponding to alignment rows is analogous, \csq\dy\ moving grid
+lines associated with rows lying on or above a particular row.
+
+The control sequence \csq\ml\ moves a vertical grid line leftward so
+that the alignment entry in which this control sequence occurs abuts
+the next entry typesetting as a box of non-zero dimensions.
+
+\side
+\gridlines
+\Diagram
+A & \rTo & B \\
+\dTo \\
+C & {} = D \ml \\
+\endDiagram
+\endside
+
+Similarly, \csq\mr\ moves a vertical grid line rightward.
+\csq\dl\ and \csq\dr\ have the same relation to \csq\ml\ and \csq\mr\
+that \csq\dx\ has to \csq\mx.
+
+The default \sindex tw{grid!spacing}spacing between grid lines can be
+adjusted in two ways: By scaling the current values using \index
+tm{xscale} and \index tm{yscale} or by explicitly setting new values
+using \index tm{xgrid} and \index tm{ygrid}.
+
+\side
+\gridlines \xgrid=2cm
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\endDiagram
+\endside
+
+The control sequence \index tm{scale} can be used to set both
+\csq\xscale\ and \csq\yscale\ to the same value. Similarly, \index
+tm{grid} can be used to set both \csq\xgrid\ and \csq\ygrid.
+
+\ifAAAA \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Coordinates and Modifications}
+
+Grid lines provide us with a coordinate system in which points with
+non-integral coordinates are obtained by linear interpolation between
+grid lines. These coordinates can be used to typeset \sindex
+tw{modification}\emph{modifications} at arbitrary locations on (or
+outside) a diagram, following an occurrence of the control sequence
+\index tm{Modify}.
+
+\side
+\gridlines
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\Modify
+\Text{X} (2,1.5)
+\endDiagram
+\endside
+
+Here the control sequence \index tm{Text} takes a single argument,
+the material to be typeset, and must also be supplied with a
+parenthesized coordinate pair indicating a position on the diagram.
+
+Besides \csq\Text\ there are control sequences
+\index tm{Txt}, \index tm{Math}, \index tm{Vertex} and \index tm{Label}.
+The latter three typeset their argument in math mode:
+\csq\Math\ in \csq\textstyle, and \csq\Vertex\ and \csq\Label\
+in the current values of \index tm{vertexstyle} and \index
+tm{labelstyle}, the defaults being \csq\displaystyle\ and
+\csq\scriptstyle\ respectively. These are the same styles in which
+vertices and labels in the alignment part of a diagram are typeset.
+
+Control sequences which typeset modifications behave very much like
+cell macros in that they are also affected by
+\sindex tw{modifier}modifiers. The \index tc\:\ modifier can be used to
+specify a position to \csq\Text, \csq\Txt, \csq\Math, \csq\Vertex\ and
+\csq\Label\ as a fractional distance from a first coordinate to a
+second. The fraction $.5$ is assumed if none is specified explicitly.
+
+\side
+\gridlines
+\Diagram
+A \\
+ \\
+ & & B \\
+\Modify
+\Text{X} (0,0) (1,1)
+\Text{Y} (0,0) (2,2) :{.75}
+\endDiagram
+\endside
+
+The position indicated to \csq\Text\ and its siblings are those of the
+\iindex tw{tag point}: The point on the typeset material which is
+placed at the position in question. For \csq\Text\ the default tag
+point lies at the midpoint of the baseline while for \csq\Txt,
+\csq\Math, \csq\Vertex\ and \csq\Label\ it lies at the midpoint of the
+math axis. The location of the tag point along the length of the
+typeset material can be changed using the \index tc\*\ modifier.
+
+\side
+\gridlines
+\Diagram
+ \\
+ & & \\
+ \\
+\Modify
+\Text{v\"anster} (0,0) *0
+\Text{h\"oger} (2,2) *1
+\endDiagram
+\endside
+
+Modifications can be rotated using the \index tc\/\ modifier.
+\sindex tw{modification!rotation}
+
+\side
+\gridlines
+\Diagram
+ \\
+ & & \\
+ \\
+\Modify
+\Text{leftish} (0,0) *{.2} /{95}
+\Text{rightish} (2,2) *{.8} /{45}
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Modification Cells I}
+\label{Modification Cells I}
+
+Modification cell macros typeset arrows as modifications. We refer to
+such arrows as \sindex tw{modification cell}\emph{modification cells}.
+
+\side
+\Diagram
+xF & \rTo ^{fF} & yF \\
+\dTo <{x\eta} & & \dTo >{y\eta} \\
+xG & \rTo _{fG} & yG \\
+\Modify
+\Para (1.5,.5) <{f\eta} /{-135}
+\endDiagram
+\endside
+
+The \sindex tw{modification cell!length}length of a modification cell
+can be specified explicitly using the \sindex tw{"|@\BAR}{\tt |}
+modifier.
+
+\side
+\Diagram
+xF & \rTo ^{fF} & yF \\
+\dTo <{x\eta} & & \dTo >{y\eta} \\
+xG & \rTo _{fG} & yG \\
+\Modify
+\Para (1.3,.7) <{f\eta} /{-135} |{14mm}
+\endDiagram
+\endside
+
+The following alternative to the previous two examples will become
+clear in \ref{Naming Points and Attaching Arrows}.
+
+\eg
+\ptpush+=3pt
+\Diagram
+xF & \rTo ^{fF} & yF \\
+\dTo <{x\eta} & & \dTo >{y\eta} \pt{t} \\
+xG & \rTo _{fG} \pt{h} & yG \\
+\Modify
+\Para \pt{t} \pt{h} <{f\eta}
+\endDiagram
+\endeg
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Figures and Graphs}
+
+Before continuing our discussion of modification cells, let us first
+mention two variants of the \csqq\Diagram\endDiagram\ pair. The
+first, \sindex tw{Figure}\index tp{Figure}\endFigure, can be used to
+typeset modifications on top of any \TeX\ box. One use for this is for
+typesetting \TeX\ labels on top of included \PS\ figures.
+
+\verbatim
+\input epsf % from the dvips distribution
+\endverbatim
+\eg
+\Figure
+\epsfxsize=3in
+\epsffile{plot.eps}
+\Modify
+\Math{x^2 + y^2 = 1} (.8,.55) *0
+\Math{z = 2\sqrt{x^2 + y^2}} (.6,.9) *0
+\endFigure
+\endeg
+
+The second, \index tp{Graph}\endGraph, uses \csq\Figure\ to typeset
+modifications on top of an empty box whose dimensions we specify.
+
+\eg
+\Graph{\hsize}{1.5cm}
+\Two (0,.5)
+\Two /{45} (.25,.5)
+\Two /{90} (.5,.5)
+\Two /{135} (.75,.5)
+\Two /{180} (1,.5)
+\endGraph
+\endeg
+
+The coordinate \sindex tw{modification!coordinate system}system used
+for typesetting modifications on a \csq\Figure\ or \csq\Graph\ has its
+origin at the bottom left corner of the box in question. There are
+two ways of specifying units of length in the coordinate directions of
+this coordinate system, the default units being chosen so that the top
+right corner of the box has coordinates (1,1). First, the control
+sequences \index tm{xrange}, \index tm{yrange} and \index tm{range}
+can be used to divide the default units by any integer value.
+
+\ifAAAA \newpage \fi
+
+\eg
+\xrange=5 \yrange=20 \gridlines
+\Figure
+\epsfxsize=3in
+\epsffile{plot.eps}
+\Modify
+\Math{x^2 + y^2 = 1} (4,11) *0
+\Math{z = 2\sqrt{x^2 + y^2}} (3,18) *0
+\endFigure
+\endeg
+
+Second, one can use \index tm{xunit}, \index tm{yunit} and \index
+tm{unit} to explicitly specify units of length.
+
+\eg
+\xunit=.25\hsize \yrange=2 \gridlines
+\Graph{\hsize}{1.5cm}
+\Two (0,1) \Two /{45} (1,1) \Two /{90} (2,1) \Two /{135} (3,1) \Two /{180} (4,1)
+\endGraph
+\endeg
+
+For any individual \csq\Graph, unit and range specifications can be
+incorporated into the argument list.
+
+\eg
+\gridlines
+\Graph{\hsize,.25\hsize}{1.5cm,2}
+\Two (0,1) \Two /{45} (1,1) \Two /{90} (2,1) \Two /{135} (3,1) \Two /{180} (4,1)
+\endGraph
+\endeg
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Modification Cells II}
+
+The modification cells shown above place the midpoint of an arrow at a
+specified location on a diagram. Just as with ordinary modifications,
+we can change the \index tw{tag point} using the \index tc\*\
+modifier.
+
+\side
+\range=2
+\Graph{2cm}{2cm}
+\To (1,1) *0 \To (1,1) *0 /{180}
+\To (1,1) *0 /{90} \To (1,1) *0 /{270}
+\endGraph
+\endside
+
+There is another variant of modification cell in which we specify the
+coordinates of the tail and head of an arrow rather the position of
+the tag point.
+
+\side
+\Graph{2cm,2}{15mm,2}
+\Line (1,0) (1,2)
+\Bar (0,1) (2,1)
+\endGraph
+\endside
+
+We will refer to modification cells as
+\sindex tw{modification cell!type 1}\emph{type 1} or
+\sindex tw{modification cell!type 2}\emph{type 2}
+depending on whether they have been specified with one or two
+coordinate pairs.
+
+Vertices can be attached to the tail and head of such a modification
+cell using the modifiers \index tm{tl} and
+\sindex tw{attaching!with \csq\hd\ or \csq\tl}\index tm{hd}.
+In the case of \csq\Diagram\ \csq\endDiagram, if the coordinates of
+either end of a type 2 \sindex tw{modification cell!type
+2}modification cell are integral then an implicit \csq\tl\ or \csq\hd\
+is performed with the contents of the appropriate alignment entry
+whenever a tail or head hasn't been explicitely attached.
+
+\side
+\Diagram
+A & & \\
+ & & B \\
+\Modify
+\To (0,1) (2,0)
+\Line (0,0) (2,1) \tl{C} \hd{D}
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Fudges and Moves}
+
+The length of individual arrows can be adjusted using the modifiers
+\index tm{dt} and \index tm{dh} for the tail and head of an arrow
+respectively. Passing a single dimension to one of these control
+sequences lengthens the appropriate end of an arrow by the specified
+amount.
+
+{\edge{.65}
+\side
+\let\b\bullet
+\Diagram
+\b & \rTo \dh{10pt} & \stop & \rTo \dt{-10pt} & \b \\
+\b & \rTo & \stop & \rTo & \b \\
+\b & \rTo \dh{-10pt} & \stop & \rTo \dt{10pt} & \b \\
+\endDiagram
+\endside
+}
+
+\index tm{tx}, \index tm{ty}, \index tm{hx} and \index tm{hy}
+can be used to make an arrow point from or to a point other than the
+midpoint of a vertex.
+
+\side
+\Diagram
+A\times B \\
+\dTo & \rdTo \tx{7pt} \\
+A & & B \\
+\endDiagram
+\endside
+
+Length and positional adjustments with the aforementioned six control
+sequences are referred to as \sindex tw{fudge}\emph{fudges}.
+
+The length of a positionally fudged arrow is adjusted to accommodate
+the vertices at either end of the arrow.
+
+\side
+\Diagram
+X \\
+ & \rdTo \hy{-20pt}
+ \rdTo
+ \rdTo \hx{20pt} \\
+ & & A\times B\times C \\
+\endDiagram
+\endside
+
+Arrows and modifications can be \sindex tw{move}\emph{moved}
+using the modifiers \index tm{up} and \index tm{rt}.
+
+\side
+\Diagram
+X & \rTo \up{3pt}
+ \lTo \up{-2pt} & A \\
+\endDiagram
+\endside
+
+Moves differ from fudges in that an entire arrow is literally just
+moved: No length adjustments are made. Using the modifiers \index
+tm{ru} and \index tm{rr}, moves can be made relative to a coordinate
+system which has been rotated from the horizontal along with a
+(rightward pointing) arrow or modification.
+
+\side
+\Diagram
+A \\
+ & \rdTo ^f \ru{5pt}
+ \rdTo _g \ru{-5pt} \\
+ & & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Defining New Cell Types}
+
+The control sequence \index tm{newcell} is used to define cell types.
+For example, near the end of \kuvio\ we find the following two lines.
+\code
+\newcell{To}
+\let\Tofill\rightarrowfill
+\endcode
+Expansion of \@\newcell{@\\type\@}@\ causes several control sequences
+to be defined, one being the \iindex tw{box macro} \ch{\\\type box}.
+\indented %
+\@\def\@\\type\@box#1{\hbox to #1{\@\\type\@fill}}@\
+\endindented
+This definition tells the macros in \kuvio\ how to typeset a rightward
+arrow of cell type \type. As we can see, before using a cell macro
+associated with this cell type we were required to either define the
+\iindex tw{fill macro} \ch{\\\type fill} or else redefine \ch{\\\type
+box}.
+
+\newcell{Eql}
+\def\Eqlbox#1{\vcenter{\offinterlineskip
+ \hbox to #1{\rightarrowfill}
+ \vskip-2pt
+ \hbox to #1{\rightarrowfill}}}
+
+\side
+\newcell{Eql}
+\def\Eqlbox#1{\vcenter{\offinterlineskip
+ \hbox to #1{\rightarrowfill} \vskip-2pt \hbox to #1{\rightarrowfill}}}
+
+\Diagram
+A & \rEql & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Pads and Pushes}
+
+Let us try placing labels on our newly defined {\tt Eql} cells.
+
+{\bpad=5pt
+\side
+\Diagram
+X & \rEql ^{f_1} _{f_2} & A \\
+\endDiagram
+\endside
+}
+
+These labels are probably a little too close to the arrows for most
+people's tastes. There are three \sindex tw{label pad}\emph{label
+pads} associated with every arrow in a diagram. As we have already
+seen, a pad which applies to only a single arrow can be specified with
+the \index tc\:\ modifier. Global and type-specific label pads can be
+assigned using \index tm{labelpad}. For any individual arrow, these
+three label pads are summed to determine the distance at which a label
+is placed from line joining its endpoints.
+
+{\bpad=8pt
+\side
+\labelpad=4pt \labelpad{Eql}=2.5pt
+\Diagram
+X & \rEql ^{f_1} _{f_2} & A & \rTo ^g & B \\
+\endDiagram
+\endside
+}
+
+Another kind of padding determines how much space will be placed
+around the sides of a diagram. Assignments can be made to
+\index tm{lpad} (left), \index tm{rpad} (right), \index tm{bpad} (bottom)
+and \index tm{tpad} (top). Assignments can also be made to
+\index tm{Diagrampad}, \index tm{Figurepad}
+and \index tm{Graphpad} to add space to all four sides of a diagram.
+
+\eg
+\framed
+\Diagram A & \rTo & B \\ \endDiagram
+\quad\Diagrampad=10pt
+\Diagram A & \rTo & B \\ \endDiagram
+\quad\lpad=-5pt
+\Diagram A & \rTo & B \\ \endDiagram
+\endeg
+
+\sindex tw{cell push}\emph{Cell pushes} determine the spacing between
+an arrow and the vertices at its tail and head. As with label pads,
+cell pushes are additive. Global and type-specific cell pushes are
+assigned using \index tm{cellpush}, just as with \csq\labelpad.
+Length fudges with \index tm{dt} and \index tm{dh} can be thought of
+as arrow-specific pushes, although a positive fudge corresponds to a
+negative push.
+
+\side
+\cellpush{Eql}=3pt
+\Diagram
+X & \rEql & A & \rTo & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Naming Points and Attaching Arrows}
+\label{Naming Points and Attaching Arrows}
+
+Modification cells can be \sindex tw{arrows!attaching}\emph{attached}
+to points on other arrows by \sindex tw{points!naming}\emph{naming}
+these points using the \index tm{pt} modifier. Once a point has been
+named it can be referenced as a coordinate.
+
+\side
+\Diagram
+X & \rTo \up{10pt} \pt{a1,.2} \pt{b1,.8}
+ \rTo \up{-10pt} \pt{a2,.2} \pt{b2,.8} & Y \\
+\Modify
+\Two \pt{a1} \pt{a2}
+\Two \pt{b1} \pt{b2}
+\endDiagram
+\endside
+
+A point must be named \sindex tw{points!referencing}before it is
+referenced. Note that cell macros are processed in order from left to
+right and top to bottom.
+
+The form \csq{\pt\ch\{\name,\num\ch\}} can be shortened to
+\csq\pt\ch\{\name\ch\} if \name\ has not already been named or if
+another coordinate is not expected. In this case the default position
+is chosen. Global and type-specific defaults can be set using \index
+tm{ptpoint}.
+
+\side
+\ptpoint=.75 \ptpoint{One}=.5
+\Diagram
+X & \rTo \up{10pt} \pt1
+ \rTo \up{-10pt} \pt2 & Y & \rOne \up{10pt} \pt3
+ \rOne \up{-10pt} \pt4 & Z \\
+\Modify
+\Two \pt1 \pt2
+\Two \pt3 \pt4
+\endDiagram
+\endside
+
+A type-specific \csq\ptpoint\ can be unset, causing the global value
+to be used, by making an empty assignment of the form
+\csq{\ptpoint\ch\{\type\ch\}=\ch\{\ch\}}.
+
+Global and type-specific assignments can also be made with
+\index tm{ptpush} and \index tm{atpush}. The ends of an arrow of cell
+type \type\ attached to another arrow are shortened by the sum of the
+global and type-specific \csq\ptpush. The ends of an arrow attached
+to an arrow of cell type \type\ are shortened by the sum of the global
+and type-specific \csq\atpush.
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Defining New Diagram Types}
+
+Before actually typesetting a diagram, \csq\Diagram\ begins a group and
+expands \index tm{everyDiagram}. Similarly there a control sequences
+\index tm{everyFigure} and \index tm{everyGraph}. The control
+sequences \index tm{newDiagram}, \index tm{newFigure} and \index
+tm{newGraph} allow one to further customize the setup for a named
+class of diagrams.
+
+Expansion of
+\@\newDiagram{@\\type\@}@\ is roughly equivalent to the following.
+\indented %
+\@\def\@\\type\@{\bgroup\everyDiagram\every@\\type\@\D@Diagram}@\
+\@\def\end@\\type\@{\D@endDiagram\egroup}@\
+\@\let\every@\\type\@\relax@\
+\endindented
+Here \csq{\D@Diagram} and \csq{\D@endDiagram} are a pair of
+inaccessible control sequences in terms of which \csq{\Diagram} and
+\csq{\endDiagram} are similarly defined. Thus, the setup for diagrams
+of type \type\ is customized by redefining
+\csq\every\type.
+
+\eg
+\newDiagram{Diag}
+\def\everyDiag{\flexible \xgrid=0pt}
+
+\Diag
+\cdots & \rTo & H_n A & \rTo & H_n X & \rTo & H_n(X,A) & \rTo & H_{n-1}A & \rTo & \cdots \\
+\endDiag
+\endeg
+
+The diagram type \sindex tw{Diag@{\tt Diag}}{\tt Diag} is predefined in
+\kuvio. The other predefined diagram types are \sindex tw{Dg@{\tt Dg}}{\tt Dg}
+and \sindex tw{Long@{\tt Long}}{\tt Long}, both of which have \index
+tm{flexible} and \csq{\xgrid=0pt} in addition to adjusting the values
+of certain parameters.
+
+By a \iindex tw{Diagram} (capitalized) we will mean any diagram
+typeset using \csqq\Diagram\endDiagram\ or any pair associated with a
+diagram type defined using \index tm{newDiagram}. We will similarly
+use the terms \iindex tw{Figure} and \iindex tw{Graph}.
+
+Rather than make global changes to the parameters available in \kuvio,
+it is probably always best to identify the various kinds of diagrams
+one is interested in and then define diagram types for each of
+these. The predefined types have been set up with the author's
+interests and tastes in mind but a little experimentation should yield
+other useful possibilities.
+
+The following example uses \iindex tw{incremental assignment}, which
+is available for all dimension assignments made available by \kuvio.
+
+\side
+\newDiagram{Cat}
+\def\everyCat{\everyDiag\cellwidth+=25pt\ygrid+=-1mm}
+
+\Cat
+ & & \stop & \rTo \pt t & \stop \\
+ & \rTo _f & \stop & \rTo \pt m & \stop & \rTo _g & \\
+ & & \stop & \rTo \pt b & \stop \\
+\Modify
+\Two \pt t \pt m <\alpha
+\Two \pt m \pt b <\beta
+\endCat
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Flexible Grids}
+\label{Flexible Grids}
+
+Expansion of the control sequence \index tm{flexible} alters the way
+in which the macros in \kuvio\ position vertical grid lines in a
+Diagram. Rather than simply spacing them uniformly, they are instead
+placed using the knowledge of the particular vertices and arrows
+occuring in the Diagram.
+
+The vertical grid lines in a flexible grid gravitate toward a single
+column, the \iindex tw{gravitating column}. By default this will be
+the centermost column, or columns in case of an even number, but the
+gravitating column can also be set explicitly using the control
+sequence \index tm{grav}. For many diagrams though, especially
+simpler ones, the actual column will be immaterial.
+
+Columns gravitate in such a way as to ensure that the distance between
+adjacent vertices which do not otherwise have a horizontal arrow
+between them are at least \csq\xgrid\ apart. When \csq{\xgrid=0pt}
+this behaviour can be used to make adjacent entries abut.
+
+\eg
+\def\xc#1{#1\cdots#1}
+
+\Dg
+v_1\xc\otimes v_k & \rMapsto & v_k\xc\otimes v_1 \\
+T(V) & \rTo & T(V) \\
+\dTo <\theta & & \dTo >\theta \\
+C(V,q) & \rTo & C(V,q) \\
+v_1\cdots v_k & \rMapsto & v_k\cdots v_1 & {} \equiv (v_1\cdots v_k)^* \\
+\endDg
+\endeg
+
+Alignment entries are always centered on the column in which they
+occur. Notice how the two rightmost entries in the following example
+lie in different columns of the alignment.
+
+\eg
+\Dg
+A & & SO(4) & {} \approx S^3\times SO(3) \\
+\dMapsto & & \dTo \\
+[Ae_1] & \qquad & SO(4)/SO(3) & & {} \approx S^3 \\
+\endDg
+\endeg
+
+The parameter \index tm{cellwidth} controls the minimum distance
+between vertices the ends of a horizontal arrow. Other components of a
+particular diagram may, of course, cause this distance to increase but
+for Diagrams consisting of a single row arrows will be of a uniform
+length.
+
+\eg
+\cellwidth=25pt
+\Diag
+\cdots & \rTo &
+\pi_j S^k & \rTo & \pi_j V(n,k) & \rTo & \pi_j V(n-1,k+1) & \rTo & \pi_{j-1} S^k &
+\rTo & \cdots \\
+\endDiag
+\endeg
+
+There are two parameters which control the distance between columns
+containing the vertices at the ends of a diagonal arrow. Unless one of
+the the \index tm{lb}, \index tm{rb} or \index tm{db} modifiers is
+specified, the distance between the centers of the columns containing
+the two vertices at either end of such an arrow will be at least
+\index tm{columndist}. If one of these modifiers is specified, \index
+tm{bracewidth} will instead be used to position columns in the
+following manner.
+$$
+\scale=1.5
+\let\labelstyle\textstyle
+\Diagram
+\frame\phantom{XXX}\endframe \\
+ & \rdDashto \\
+ & & \frame\phantom{XX}\endframe \\
+\Modify
+\Line (2,0) (3.2,0) \tl\bullet \jt \hd{(R_r,C_r)}
+\Math{(R_\ell,C_r)} (2,2) *{-.2}
+\Line (0,2) (-1.3,2) \tl\bullet \jt \hd{(R_\ell,C_\ell)}
+\Math{(R_r,C_\ell)} (0,0) *{1.2}
+\Bij (0,0) (2,0) \tl\bullet _{d_\ell}
+\Bij (0,2) (2,2) \hd\bullet ^{d_r}
+\endDiagram
+\qquad
+\vcenter{\hsize=.4\ifAAAA 0\else 1\fi\hsize
+Suppose the vertices at the two ends of a diagonal arrow have row and
+column coordinates $(R_\ell,C_\ell)$ and $(R_r,C_r)$ with $C_\ell <
+C_r$. If \csq\lb\ is specified then the distance $d_\ell$ from the
+vertex at $(R_r,C_\ell)$ to the vertex at $(R_r,C_r)$ will be at least
+\csq\bracewidth. If \csq\rb\ is specified then the distance $d_r$
+from the vertex at $(R_\ell,C_\ell)$ to the vertex at $(R_\ell,C_r)$
+will be at least \csq\bracewidth. If \csq\db\ is specified then both
+requirements will be met.}
+$$
+Note that specifying \index tm{db} is not equivalent to specifying
+both \csq\lb\ and \csq\rb: The last modifier specified will take
+precedence.
+
+We will refer to a diagonal arrow as being either \sindex
+tw{arrows!braced}\emph{braced} or \sindex
+tw{arrows!unbraced}\emph{unbraced} depending on whether
+\csq\bracewidth\ or \csq\columndist\ has been used in positioning the columns
+containing its head and tail vertices. We will also distinguish
+between \sindex tw{arrows!fully braced}\emph{fully braced},
+\sindex tw{arrows!left braced}\emph{left braced} and
+\sindex tw{arrows!right braced}\emph{right braced}
+diagonal arrows, the latter two having been specified using the
+\csq\lb\ and \csq\rb\ modifiers respectively.
+
+The control sequence \index tm{braced} causes all diagonal arrows to
+be fully braced by default. It also inverts the action of \index
+tm{db} so that diagonal arrows will be unbraced only when this
+modifier is specified. The control sequence \index tm{loose} resets
+the behaviour to the default and, additionally, sets
+\csq{\columndist=0pt}. This may be appropriate for certain triangular
+diagrams.
+
+\ifAAAA \newpage \fi
+
+The control sequence \csq\bb\ in the following (and other) examples invokes the
+beautiful bbm family of fonts.
+
+\side
+\loose
+\Dg
+ & & {\bb R}^2 \\
+ & \ldTo & & \rdTo \\
+C({\bb R}^2,-g)&& \rTo & & {\bb H} \\
+\endDg
+\endside
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Predefined Cell Types}
+
+There are a number of fill macros defined in \kuvio.
+
+\def\testfill#1{\leavevmode\hbox to 8cm{\csq#1\hfil\hbox to 3cm{#1}}\par}
+
+\null{\parskip=0pt\parindent=25pt
+%\testfill\leftarrowfill
+%\testfill\rleftarrowfill
+%\testfill\Leftarrowfill
+%\testfill\leftharpoonupfill
+%\testfill\leftharpoondownfill
+%\testfill\hookleftarrowfill
+%\testfill\leftintofill
+%\testfill\lleftarrowfill
+%\testfill\leftepifill
+%\testfill\rlleftarrowfill
+%\testfill\llleftarrowfill
+%\testfill\rllleftarrowfill
+%\testfill\rightarrowfill
+\testfill\lrightarrowfill
+%\testfill\Rightarrowfill
+\testfill\rightharpoonupfill
+\testfill\rightharpoondownfill
+\testfill\hookrightarrowfill
+\testfill\rightintofill
+\testfill\rrightarrowfill
+\testfill\rightepifill
+\testfill\lrrightarrowfill
+\testfill\rrrightarrowfill
+\testfill\lrrrightarrowfill
+%\testfill\relbarfill
+\testfill\linefill
+%\testfill\Relbarfill
+\testfill\barfill
+\testfill\cdotfill
+\testfill\mapstofill
+\testfill\leftrightarrowfill
+\testfill\Leftrightarrowfill
+%\testfill\leftarrowxfill
+%\testfill\leftarrowxxfill
+%\testfill\xleftarrowxfill
+%\testfill\leftarrowxxxfill
+%\testfill\xxleftarrowxfill
+\testfill\rightarrowxfill
+\testfill\rightarrowxxfill
+\testfill\xrightarrowxfill
+\testfill\rightarrowxxxfill
+\testfill\xxrightarrowxfill
+%\testfill\lleftarrowxfill
+%\testfill\lleftarrowxxfill
+%\testfill\xlleftarrowxfill
+%\testfill\lleftarrowxxxfill
+%\testfill\xxleftarrowxfill
+\testfill\rrightarrowxfill
+\testfill\rrightarrowxxfill
+\testfill\xrrightarrowxfill
+\testfill\rrightarrowxxxfill
+\testfill\xxrrightarrowxfill
+%\testfill\llleftarrowxfill
+%\testfill\llleftarrowxxfill
+%\testfill\xllleftarrowxfill
+%\testfill\llleftarrowxxxfill
+%\testfill\xxllleftarrowxfill
+\testfill\rrrightarrowxfill
+\testfill\rrrightarrowxxfill
+\testfill\xrrrightarrowxfill
+\testfill\rrrightarrowxxxfill
+\testfill\xxrrrightarrowxfill
+}
+
+Several of these also have leftward variants.
+Of course, all can be used in diagrams, the nicest way
+being to define a new cell type using \index tm{newcell}.
+
+The following cell types are predefined in \kuvio.
+
+\def\testcell#1{\leavevmode
+ \hbox to 6cm{{\tt #1}\hfil\csname #1box\endcsname{3cm}}\par}
+
+\null{\parskip=0pt\parindent=25pt
+\testcell{To}
+\testcell{Mapsto}
+\testcell{Into}
+\testcell{Epi}
+\testcell{Line}
+\testcell{Bij}
+\testcell{Nul}
+\testcell{Two}
+\testcell{Bar}
+\testcell{Eq}
+\testcell{Null}
+\testcell{Dots}
+}
+
+The difference between a {\tt Nul} cell and a {\tt Null} cell is the
+value of their respective label pads. The former acts like a phantom
+{\tt To} cell, the latter like a phantom {\tt Two} cell. Phantom cells
+can also be realized using the \csq{\nl} modifier. The type {\tt One}
+can be used synonymously with {\tt To}. The type {\tt Impl} can be
+used synonymously with {\tt Two}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Another Font: arrsy10}
+\label{Another Font: arrsy10}
+
+Expanding the control sequence \index tm{arrsy}
+causes the author's \index tw{arrsy10} font to be
+loaded.\footnote{$^\dagger$}%
+{Use of this font is entirely optional and \csq\arrsy\ will result in an error
+if arrsy10 has not been installed. Also, users of \LaTeX\ should use the {\tt
+arrsy} option to the {\tt kuvio} package in place of the control sequence
+\csq\arrsy, as described in \ref{Using kuvio with LaTeX}.}
+The following fills then become available.
+
+\null{\parskip=0pt\parindent=25pt
+%\testfill\Leftharpoonupfill
+%\testfill\Leftparafill
+%\testfill\Leftharpoondownfill
+%\testfill\Leftallofill
+\testfill\Rightharpoonupfill
+%\testfill\Rightallofill
+\testfill\Rightharpoondownfill
+%\testfill\Rightparafill
+%\testfill\Lleftarrowfill
+\testfill\Rrightarrowfill
+%\testfill\Rrelbarfill
+\testfill\equivfill
+%\testfill\Lleftrightarrowfill
+%\testfill\dashbarfill
+\testfill\dashfill
+\testfill\rightdashfill
+%\testfill\leftdashfill
+\testfill\rightepifill
+%\testfill\leftepifill
+\testfill\rightmonofill
+%\testfill\leftmonofill
+\testfill\rightmonotailfill
+%\testfill\leftmonotailfill
+\testfill\rightisofill
+%\testfill\leftisofill
+\testfill\rightdashmonofill
+%\testfill\leftdashmonofill
+\testfill\rightdashmonotailfill
+%\testfill\leftdashmonotailfill
+\testfill\rightdashepifill
+%\testfill\leftdashepifill
+\testfill\rightdashisofill
+%\testfill\leftdashisofill
+\testfill\squigglefill
+}
+
+The following cell types also become available.
+
+\null{\parskip=0pt\parindent=25pt
+\testcell{Allo}
+\testcell{Para}
+\testcell{Three}
+\testcell{Equiv}
+\testcell{Nulll}
+\testcell{Dash}
+\testcell{Dashto}
+\testcell{Mono}
+\testcell{Tail}
+\testcell{Iso}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Fill Cells and Box Cells}
+
+Both fill and box macros can be used to specify arrows in a diagram
+without defining a new cell type. This (especially the former) may be
+useful for seldomly used arrows. The macros in question are used
+exactly as if we had defined cell types {\tt Fillcell} and {\tt
+Boxcell} except that the cell macros associated with these types
+accept a single argument, a fill or box macro.
+
+\side
+\Diagram
+A & \rFillcell\lrightarrowfill ^f & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Breaking Arrows}
+
+White rules can be used to break arrows in a more general way than is
+provided for by \csq{\stop}. The modifier \sindex
+tw{arrows!breaking}\index tm{br} causes an arrow to be typeset on top
+of a white rule.
+
+\side
+\Graph{3cm,3}{2cm,2}
+\To (2,2) (2,0)
+\Line (0,1) (3,1) \br
+\Two (1,2) (1,0) \br
+\endGraph
+\endside
+
+The order in which arrows are typeset here is significant: Cell macros
+are processed from left to right and top to bottom. The \index
+tm{pp} modifier can be used to change the order in which alignment
+cells are typeset.
+
+The modifier \index tm{rl} causes a white rule to be
+typeset in place of an arrow.
+
+Global and type-specific assignments made with \index tm{breakpad}
+determine the width of the rule used with \csq\br\ or \csq\rl. The
+width used with an arrow of cell type \type\ is twice the sum of an
+optional dimension passed as an argument to \csq\br\ or \csq\rl\ and
+the global and type-specific values of \csq{\breakpad}.
+
+The cell type \sindex tw{Rule@{\tt Rule}}{\tt Rule} can also used to
+typeset rules as arrows in a diagram. In this case the \index tm{rw}
+modifier can be used to set the width of the rule. The default width
+can be set using \index tm{Rulewidth}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Shades of Gray}
+
+The pair \index tp{gr}\endgr\ can be used to typeset material in
+shades of gray.
+
+\side
+\gr{.5}\vrule width 1cm height 12pt\endgr
+\endside
+
+The \iindex tw{graylevel} should lie between 0 (black) and 1 (white)
+inclusive. There are also pairs \index tp{gray}\endgray\ for a
+graylevel which can be set using \index tm{graygray} (the predefined
+value being .5), \index tp{black}\endblack\ for graylevel 0 and
+\index tp{white}\endwhite\ for graylevel 1. Arrows and modifications
+can be typeset in shades of gray using the first control sequence of
+one of the above pairs as a modifier.
+
+\side
+\Diagram
+A & \rTo \gray & B \\
+\endDiagram
+\endside
+
+Shades of gray may print unsatisfactorily on some printers.
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Frames and Shades}
+
+The pair \index tp{frame}\endframe\ can be used to put a frame around
+the enclosed material. This material should not contain any vertical
+commands (unless enclosed in a box).
+
+\eg
+\input calc % my calculus macros
+
+Laplacian:\quad
+\frame$\displaystyle
+ \Delta f = \p\wrt{x^i}\left( g^{ki} \p f\wrt{x^k} \right)
+ + g^{kj} \p f\wrt{x^k} \Gamma^i_{ij}
+$\endframe
+\endeg
+
+The thickness of the rule can be changed by making an assignment to
+\index tm{framerulewidth} while the padding around the formula can be
+changed by making an assignment to \index tm{framepad}. Padding can
+also be applied selectively to the sides of the material being framed
+using \index tm{lpad}, \index tm{rpad}, \index tm{bpad} and \index
+tm{tpad}. The graylevel of the frame can be changed using
+\index tm{framegray}. One can put a frame around a diagram using
+\index tm{framed}.
+
+The pair \index tp{shade}\endshade\ places a shadow behind a frame.
+The offsets of the bottom left and top right corners of the shadow
+must be specified as two coordinate pairs.
+
+\eg
+\framepad=1cm \shadegray=.5
+\shade{10pt,-10pt}{5pt,-5pt}\vbox{\hsize=.8\hsize
+``Om man l\"aser svenska k\"arleks visor fr\aa n 1600--talet \"ar det
+sl\aa ende hur vanligt det \"ar att de \"alskande drar sig undan och m\"ots i
+den gr\"ona naturen. F\"or de allra flesta var det endast d\"ar som man kunde
+uppn\aa\ n\aa gon sann avskildhet; under denna epok var sex en
+syssels\"attning som i h\"og grad idkades under \"oppen himmel.''\par
+Peter Englund, {\it F\"orflutenhetens Landskap}.}\endshade
+\endeg
+
+Frames and solid boxes can be typeset as modifications using
+\index tm{Frame} and \index tm{Box}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Rotation and Reflection}
+
+There are several control sequence pairs in \kuvio\ for performing
+rotations and reflections. The material enclosed by these pairs is
+enclosed in an \csq\hbox\ and should not contain any vertical commands
+unless enclosed in a \csq\vbox.
+
+Let us play with the following {\tt .eps} file.
+
+\eg
+\epsffile{face.eps}
+\endeg
+
+{\escapechar=-1
+ \xdef\verbatimhook{\string\\vbhook}
+}
+{\catcode`\_=11 \catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\hookedverbatim#1^^M{\def\_found{#1}%
+ \ifx\_found\_endverbatimverbatim
+ \def\_next{\egroup\endverbatim}%
+ \else
+ \ifx\_found\verbatimhook
+ \def\_next{\let\_everyline\verbatimline
+ \let\_everyendline\verbatimendline
+ \def\verbatimline{\leavevmode\bgroup\verbatimit}%
+ \def\verbatimendline{\egroup\par
+ \let\verbatimline\_everyline
+ \let\verbatimendline\_everyendline}
+ \hookedverbatim}%
+ \else
+ \def\_next{\verbatimline #1\verbatimendline\hookedverbatim}%
+ \fi
+ \fi
+ \_next}
+}
+
+\ifAAAA
+\newpage
+
+The pair \index tp{flip}\endflip\ rotates material by 180 degrees.
+
+\eg
+\flip\epsffile{face.eps}\endflip
+\endeg
+\fi
+
+The pair \index tp{land}\endland\ rotates material by 90 degrees
+counterclockwise. Similarly, the pair \index tp{opland}\endopland\
+rotates material by 90 degrees clockwise.
+
+\eg
+\land\epsffile{face.eps}\endland \opland\epsffile{face.eps}\endopland
+\endeg
+
+A diagram can be rotated using \index tm{landscape} or \index
+tm{oplandscape}.
+
+{\expandafter\let\csname _verbatimverbatim\endcsname\hookedverbatim
+\verbatim
+{\bf George W. Whitehead}, {\it Elements of Homotopy Theory}, page 592.
+\bigskip
+$$
+\landscape \let\labelstyle\textstyle \cellpad=10pt
+\Diagram
+\vbhook
+blah, blah, blah ...
+\endDiagram
+$$
+\endverbatim
+}
+
+\newpage
+{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 592.
+\bigskip
+{\compileto{tdwk/eg03}
+ \input eg/eg03
+}
+\newpage
+
+\ifAAAA
+\else
+The pair \index tp{flip}\endflip\ rotates material by 180 degrees.
+
+\eg
+\flip\epsffile{face.eps}\endflip
+\endeg
+\fi
+
+Material can also be reflected across horizontal or vertical mirrors.
+
+\eg
+\hmir\epsffile{face.eps}\endhmir
+\endeg
+
+\side
+\vmir Who me, get carried away?!\endvmir
+\endside
+
+One can also rotate material by an arbitrary angle using \index
+tp{rot}\endrot\ but be aware that this pair does not modify the
+bounding box of the rotated material.
+
+\verbatim
+\rot{45}\epsffile{face.eps}\endrot
+\endverbatim
+\vskip12mm
+\rot{45}\epsffile{face.eps}\endrot
+\vskip5mm
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Compilation}
+
+Due to the large number of computations being performed, typesetting
+large diagrams can be rather time-consuming. The control sequence
+\index tm{compileto} can be used to compile a diagram into a form
+which the macros in \kuvio\ can typeset more quickly. The information
+contained in a diagram is then written to two files having the
+extensions {\tt .kdg} and {\tt .kuv}.
+
+\verbatim
+\compileto{stable}
+\endverbatim
+\eg
+\Long
+0 & & & & & & 0 \\
+\dEq & & & & & & \dEq \\
+\pi_{n+1} S^k & \rTo & \pi_n O(k) & \rTo & \pi_n O(k+1) & \rTo & \pi_n S^k \\
+\endLong
+\endeg
+
+Expansion of \@\compileto{@\\name\@}@\ causes the next diagram in the input
+(at a given level of grouping) to be compiled to, or read from, the files
+\sindex tw{kdg@{\tt\leavevmode\llap{.}kdg}}%
+\sindex tw{kdg@{\tt\leavevmode\llap{.}kuv}}%
+\name{\tt .kdg} and \name{\tt .kuv}.
+If these files already exist, then the text of the diagram is compared
+with the contents of \name{\tt .kdg} to determine whether or not the
+diagram should be recompiled or read from
+\name{\tt .kuv}.
+
+To force the recompilation of a diagram, \index tm{recompileto} can
+be used in place of \csq{\compileto}. The control sequence \index
+tm{recompile} can also be used to force recompilation at a given
+level of grouping. The control sequence \index tm{nocompile} can be
+used to turn off compilation at a given level of grouping. Note that
+\csq\global\csq\recompile\ and \csq\global\csq\nocompile\ behave as expected.
+
+Compilation can be automated using \csq\autocompileto. Expansion of
+\@\autocompileto{@\\name\@}@\ allocates a count register, \index
+tm{autocompilecounter}, and causes the tokens
+\indented %
+\@\global\advance\autocompilecounter by 1@\
+\@\compileto{@\\name\@-\the\autocompilecounter}@\
+\endindented
+to be expanded just prior to each expansion of \csq\everyDiagram,
+\csq\everyFigure\ or \csq\everyGraph.
+Each subsequent expansion of \csq\autocompileto\ resets
+\csq\autocompilecounter\ to zero.
+Note that \csq\autocompilecounter\ is incremented even if
+\csq\nocompile\ has been specified.
+
+The control sequence \index tm{autocompile} is an abbreviation for
+\@\autocompileto{.\jobname}@\.
+
+\verbatim
+\input kuvio \autocompile
+\endverbatim
+\hskip\egindent{\verbatimit blah, blah, blah...}
+
+Be aware that compilation hard codes much information into {\tt .kuv}
+files. While changes to diagram input are detected during future \TeX
+ings, changes to many parameters which affect the layout of components
+of a diagram are not. It may be necessary to use \index
+tm{recompile} to have such changes propagate to compiled files. Note
+that whether or not \csq\gridlines\ was specified when a diagram was
+compiled will be detected by the macros. Also, parameters and control
+sequences which affect only the box containing a diagram
+(\csq\Diagrampad, \csq\lpad, \csq\landscape, \csq\deep, etc) can be
+safely applied to a diagram which has already been compiled.
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Making Definitions}
+
+\TeX\ associates a category code with each character of input and once
+a category code has been assigned it cannot be changed. Unfortunately,
+since several category codes are changed between diagram delimiters
+like \csqq\Diagram\endDiagram, an ordinary \index tm{def} having
+diagram macros in the replacement text may not behave as expected. In
+particular, the following characters require special consideration.
+\code
+( * / : < > ^ _ |
+\endcode
+Each of these should be preceded by a backslash when
+used as a modifier in a macro definition.
+
+\eg
+\def\ReallySimpleRightwardArrow#1#2#3{%
+ \Dg #1 & \rTo \^{#2} & #3 \\ \endDg}
+
+\ReallySimpleRightwardArrow{X^I}{e_0}X
+\endeg
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Name Clashes}
+
+Macros are loaded safely from \kuvio. If a name conflict is detected
+for an accessible control sequence (except for those having the string
+``kuvio'' as part of their names), a message announces the
+conflict. The control sequence is then either made available through
+the control sequence \index tm{kuviocs}, or it is redefined and the
+old definition is made available through the control sequence \index
+tm{nonkuviocs}.
+
+For example, \index tw{LaTeX@\LaTeX} defines \index tm{center}. This
+control sequence is not redefined by \kuvio: One must use
+\@\kuviocs\center@\ to access the control sequence documented on page
+\pageref{center def}. Also, {\tt plain.tex} defines \index
+tm{land}. This control sequence {\sl is\/} redefined by
+\kuvio: The version defined in {\tt plain.tex} can be accessed as
+\@\nonkuviocs\land@\. (It is also available as
+\csq\wedge\ since {\tt plain.tex} make this equivalent to \csq\land.)
+
+If a control sequence has not been defined by \kuvio, then prefixing
+it by \csq\kuviocs\ or \csq\nonkuviocs\ does nothing.
+
+The control sequence \index tm{kuvioforce} can be used to force
+redefinition of a control sequence which \kuvio\ makes available
+through \csq\kuviocs.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Using kuvio.tex with \LaTeX}
+\label{Using kuvio with LaTeX}
+
+Users of \sindex tw{LaTeX@\LaTeX!aka \LaTeXe}\LaTeX
+\footnote{$^\dagger$}{\LaTeXe, not \LaTeX\ 2.09.}
+can load \kuvio\ via the package file {\tt kuvio.sty} using the
+\@\usepackage{kuvio}@\ declaration. This package provides the option
+{\tt arrsy} which should be used in place of the control sequence
+\csq\arrsy. This option causes the \LaTeX\ package file {\tt
+arrsy.sty} to be loaded in place of its {\tt plain} \TeX\ counterpart
+{\tt arrsy.tex}.
+
+\verbatim
+\usepackage[arrsy]{kuvio}
+\endverbatim
+
+There are also options {\tt autocompile}, {\tt gridlines}, {\tt
+kuviofmt}, {\tt nocompile}, {\tt overgrid} and {\tt recompile} which
+can be used in place of the corresponding control sequences to affect
+global changes on a document, although none of these options offer any
+additional functionality.
+
+Diagrams should still be input using the
+\ch\\\emph{type} \csq\end\emph{\type} syntax and {\sl not\/}
+the \LaTeX\ environment syntax, \@\begin{@\\emph{type}\@}@\
+\@\end{@\\emph{type}\@}@\. The latter may appear to work but will fail when
+diagrams are being compiled.
+
+Several environments in the {\tt amsmath} package of
+\sindex tw{AMSLaTeX@\AMSLaTeX}\AMSLaTeX\ read their
+bodies as the argument of a delimited macro. This has the side effect
+of setting the category codes of all the characters in the body before
+its expansion. This is causes trouble for \kuvio\ since it wants to
+change several catcodes between a pair of diagram delimiters. To get
+around this the control sequence \index tm{forcekdg} will cause
+diagrams at the same level of grouping that are not already being
+compiled to be written to and then read from the file
+\csq{\jobname.kdg}, thereby circumventing any catcode assignments
+already made between a pair of diagram delimiters. This can be
+affected globally in \LaTeX\ by loading the {\tt kuvio} package with
+the {\tt forcekdg} option.
+
+\csq\forcekdg\ is expanded automatically if the {\tt amsmath} package
+is being used. If you don't want this, load {\tt kuvio} with the {\tt
+unforcekdg} option.
+
+The \LaTeX\ user should also aware of the following section when placing
+diagrams in an alignment-like environment.
+
+%*****************************************************************************
+\section{Specifying Diagrams in Alignments}
+\label{Specifying Diagrams in Alignments}
+
+Due to the nature in which \TeX\ processes alignments, it is an
+unfortunate necessity that a diagram specified inside an \index
+tw{alignment} (\csq\halign, etc) be enclosed in a pair of braces.
+
+\eg
+$$
+\eqalign{
+ {\rm equalizer:}\qquad& {\Dg X & \rTo & Y & \rTo \up{3pt}
+ \rTo \up{-3pt} & Z \\ \endDg}\cr
+ \noalign{\medskip}
+ {\rm coequalizer:}\qquad& {\Dg X & \rTo \up{3pt}
+ \rTo \up{-3pt} & Y & \rTo & Z \\ \endDg}\cr
+}
+$$
+\endeg
+
+The same consideration should be bourn in mind by \LaTeX\ and \AMSLaTeX\
+users when using any {\tt array}-like environment.
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\input tdwk-s }
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\input tdwk-e
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Availability}
+
+Both \kuvio\ and {\tt arrsy10} are available
+by anonymous ftp from the following location.
+\code
+ftp.math.ubc.ca:/pub/svensson
+\endcode
+They can also be found in
+$\langle${\it tex-archive}$\rangle${\tt /macros/generic/diagrams/kuvio}
+on any of the following CTAN hosts.
+\code
+ftp.dante.de (Deutschland)
+ftp.tex.ac.uk (England)
+ftp.cdrom.com (USA)
+\endcode
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Copyright}
+
+The file \kuvio\ may be freely distributed and used, with the
+following restrictions.
+
+{\leftskip=15pt
+\def\pt#1 {\leavevmode\llap{\hbox to 15pt{#1.\hss}}}
+\pt1 Substantial use of \kuvio\ in any published work should be suitably
+acknowledged.
+
+\pt2 No changes or modifications are to be made to \kuvio.
+
+\pt3 The documentation, \emph{Typesetting diagrams with kuvio.tex},
+must be distributed with \kuvio.
+
+}
+
+I would enjoy receiving a copy of any book, journal
+article or thesis prepared using \kuvio.
+
+Thank you.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Final Thoughts}
+
+This document was written using {\tt plain.tex}, {\tt epsf.tex} (from
+the {\tt dvips} distribution) and homegrown macros.
+
+Remember to use grouping and diagram types to keep changes local to a
+particular level (as was done with the examples in this manual).
+
+As noted earlier, \csq\special\ may wreak havoc with your {\tt dvi}
+file previewer. On the NeXT, Rokicki's \TeX view\ has no trouble.
+However, older versions of \TeX view may display rotated arrows
+improperly. The version from February 1994 (last seen at {\tt
+labrea.stanford.edu:/pub/texview.tar.Z}) has fixed this problem.
+
+If you have trouble previewing a {\tt dvi} file and can preview a \PS\ file,
+the command
+\code
+dvips name.dvi -o
+\endcode
+generates the \PS\ file {\tt name.ps} from the {\tt dvi} file {\tt name.dvi}.
+Save trees. Ghostview does an excellent job of previewing \PS\ under X.
+
+Two notable limitations of \kuvio:
+(1) Diagrams cannot be nested and
+(2) there are no helpful error messages if something goes wrong.
+This will probably not change anytime soon, if ever.
+
+\opentmp\closetmp
+
+\def\csqn#1{\leavevmode\llap{\ch\\}{\tt #1}}
+\def\csqqn#1 #2{\leavevmode\llap{\ch\\}{\tt #1} \csq#2}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Index}
+
+The page number of a Summary entry is set in italics.
+
+\printindex
+
+\bye
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc/README b/macros/generic/diagrams/kuvio/doc/README
new file mode 100644
index 0000000000..64cb94cc0d
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc/README
@@ -0,0 +1,10 @@
+16 Jan 1996
+
+PostScript versions of the documentation can be obtained from
+
+ ftp://ftp.math.ubc.ca/pub/svensson/kuvio/
+
+in the files tdwk.ps.gz (letter) and tdwk-A4.ps.gz (A4). If this isn't
+available to you, send me an email.
+
+Anders <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/examples-A4.ps b/macros/generic/diagrams/kuvio/examples-A4.ps
new file mode 100644
index 0000000000..46b05ee9d3
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/examples-A4.ps
@@ -0,0 +1,5171 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: tdwk.dvi
+%%Pages: 12 0
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -D300 tdwk -o
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1996.06.09:1515
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 300 300 (tdwk.dvi)
+@start /Fa 1 66 df<000C0000000C0000000C0000001E0000001E0000002F00000027
+0000002700000043800000438000004380000081C0000081C0000181E0000100E0000100
+E00003FFF000020070000200700004003800040038000C003C0008001C0008001C003C00
+1E00FF00FFC01A1A7E991E>65 D E /Fb 3 84 df<000000800000038000000780000007
+8000000F8000000F80000017800000378000002780000067800000478000008780000187
+8000010780000307800002078000040780000C078000180780001FFF80003FFF80006007
+C000C007C061C003C0738003C07F0003E0FE0003F87C0001E0380000001D1D809B1F>65
+D<0006000001000E000002000E000006000F00000E000F00001E001F00003E001700003C
+001700007C00178000FC00178001BC00238003BC002380073C0023C00E3C0043C01C3800
+41C038380041C070780081E060780081E0C0780080F180780100F7007801007F00780200
+7E007866007C0078FC0030007CFC0000007FF80000003C7000000000281B7E992E>77
+D<0003F8001FFC00307C00603C01C03C01C03003C00003C00003E00003F00001FC0000FF
+00003F80000FC00007E00003F00801F03000F07000F0F000E0F000E0F801C0FC01007F06
+003FF8000FE000161A7F9917>83 D E /Fc 45 122 df<00FE000381000601800E03801C
+01001C00001C00001C00001C00001C0000FFFF801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
+D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<60F0F86808080810102040050B7D990B>39
+D<60F0F07010101020204040040B7D830B>44 D<FFC0FFC00A0280880D>I<07E01C3838
+1C300C700E60066006E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C381C1C3807E010187F9713>48 D<03000700FF00070007000700070007000700070007
+000700070007000700070007000700070007000700070007007FF80D187D9713>I<0F80
+106020304038803CC01CE01C401C003C003800380070006000C001800100020004040804
+100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C001C00
+38007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F9713>I<
+001800180038007800F800B8013802380238043808381838103820384038C038FFFF0038
+0038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000200020
+002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E187E9713
+>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E007E007
+600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008801080
+10002000400040008001800100030003000700060006000E000E000E000E000E00040010
+197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF8307C601E
+600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C600EE0
+06E006E007E007E0076007700F3017182707C700070006000E000C700C7018603030600F
+8010187F9713>I<FFFF80000E00E0000E0070000E0038000E001C000E000E000E000E00
+0E0007000E0007000E0007800E0007800E0007800E0007800E0007800E0007800E000780
+0E0007800E0007000E0007000E000F000E000E000E001C000E001C000E0078000E00E000
+FFFF8000191A7F991D>68 D<FFFFF80E00380E00180E00080E000C0E00040E00040E0004
+0E01000E01000E01000E03000FFF000E03000E01000E01000E01000E00020E00020E0002
+0E00060E00040E00040E000C0E003CFFFFFC171A7F991A>I<FFFFF80E00380E00180E00
+080E000C0E00040E00040E00040E01000E01000E01000E03000FFF000E03000E01000E01
+000E01000E00000E00000E00000E00000E00000E00000E00000E0000FFE000161A7F9919
+>I<003F020001C0C60003002E000E001E001C000E001C00060038000600780002007000
+020070000200F0000000F0000000F0000000F0000000F0000000F001FFC070000E007000
+0E0078000E0038000E001C000E001C000E000E000E000300160001C06600003F82001A1A
+7E991E>I<FFE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00080E00080E00080E00180E00100E
+00300E00700E00F0FFFFF0151A7F9918>76 D<7FFFFF00701C0700401C0100401C0100C0
+1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C000003FFE000191A7F991C>84 D<FFC0FF800F003C000F00100007
+0020000380200003C0400001C0800000E1800000F10000007A0000003E0000001C000000
+1E0000001E00000017000000278000004380000041C0000081E0000100E0000300700002
+007800040038000C001C001E003E00FF007FC01A1A7F991D>88 D<1FC000387000383800
+101C00001C00001C0003FC001E1C00381C00701C00E01C00E01C80E01C80E03C80705F80
+1F8F0011107F8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001CFC001D07001E03801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C
+00E01C01C01C01801E030019060010F800131A809915>I<07F81C1C381C70087000E000
+E000E000E000E000E0007000700438081C1807E00E107F8F11>I<003F00000700000700
+00070000070000070000070000070000070000070003E7000C1700180F00300700700700
+E00700E00700E00700E00700E00700E00700600700700700380F001C370007C7E0131A7F
+9915>I<07C01C3030187018600CE00CFFFCE000E000E000E0006000700438081C1807E0
+0E107F8F11>I<01F007180E381C101C001C001C001C001C001C00FFC01C001C001C001C
+001C001C001C001C001C001C001C001C001C001C00FF800D1A80990C>I<0FCF00187180
+3030007038007038007038007038003030001860002FC0006000006000007000003FF000
+3FFC001FFE00600F00C00300C00300C00300C00300600600381C0007E00011187F8F13>
+I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87
+001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C
+1C1C1CFF081A80990A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C1FC01C0F001C0C001C18001C20001C40001CE0001DE0001E70001C78001C
+38001C1C001C1E001C0F001C0F80FF9FE0131A809914>107 D<FC001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C00FF80091A80990A>I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C0FF9FE7F81D107F8F20>I<FC7C001D87001E03801E03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C0380FF9FF01410808F15>I<07E01C3830
+0C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<FCFC
+001D07001E03801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01
+801E03001D06001CF8001C00001C00001C00001C00001C00001C0000FF80001317808F15
+>I<FC781D9C1E1C1E081C001C001C001C001C001C001C001C001C001C001C00FF800E10
+808F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0
+408F800C107F8F0F>I<0800080008000800180018003800FFC038003800380038003800
+380038003800382038203820382018201C4007800B177F960F>I<FC1F801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E0B80
+03F3F01410808F15>I<FF0F803C07001C06001C04001C04000E08000E08000710000710
+0007100003A00003A00001C00001C00001C00000800011107F8F14>I<FE7F1F80381C07
+003C1C06001C0C04001C0E04000E1608000E1708000E170800072310000723900007A390
+0003C1A00003C1E0000180C0000180C0000180C00019107F8F1C>I<FE3F803C1E001C08
+000E10000F300007600003C00001C00001E00003E000027000043800083800181C00381E
+00FC3FC012107F8F14>I<FF0F803C07001C06001C04001C04000E08000E080007100007
+100007100003A00003A00001C00001C00001C000008000008000010000010000E10000E2
+0000E4000078000011177F8F14>I E /Fd 2 59 df<01F00FFC1C0C3000200021802E40
+3FC04000400080008000C00860303FE01F800E107F8F12>34 D<60F0F06004047D830B>
+58 D E /Fe 5 118 df<001800003800003800005800009800008C00010C00020C00060C
+0007FC00080600100600300600F81F80110E7E8D16>65 D<0808000000007098B0303060
+646870060F7D8E0B>105 D<39C02E302C30183018301830186038C03780300030006000
+F8000C0D7F880F>112 D<0E4031C060C04180C180C180C18047003B000300030006001F
+800A0D7E880E>I<6060B060B06030C060C060C060D063E03CE00C097D8812>117
+D E /Ff 10 128 df<00007F0000000003FFE00000000FFFF80000003FFFFE0000007F80
+FF000000FE003F800001FC001FC00003F00007E00007E00003F00007E00003F0000FC000
+01F8001F800000FC001F800000FC001F0000007C003F0000007E003E0000003E007E0000
+003F007E0000003F007E0000003F007C0000001F00FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FE0000003F807E0000003F007E0000003F007E0000
+003F007E0000003F003F0000007E003F0000007E003F800000FE001F800000FC001FC000
+01FC000FC00001F80007E00003F00007F00007F00003F8000FE00001FC001FC00000FE00
+3F8000007F80FF0000003FFFFE0000000FFFF800000003FFE0000000007F00000029347C
+B232>79 D<007F00F801FFC7FC03FFFFFC07FFFFFC0FC1FC001F80FC001F007C001F007C
+003E003E003E003E003E003E003E003E003E003E003E003E001F007C001F007C001F80FC
+000FC1F8000FFFF0001FFFE0001DFFC0001C7F00003C0000003C0000003C0000001E0000
+001FFFF8001FFFFF000FFFFF801FFFFFC03FFFFFE03E000FF07C0003F0FC0001F8F80000
+F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E03FE03FE00FFFFF8007FFFF
+0001FFFC00003FE0001E2E7E9E22>103 D<FCFCFCFCFCFC00000000000000000000007C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C06307CAF10>
+105 D<F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8007F00F800FE00F801FC00F803F800F807F000F80FE000F81FC000F8
+3F8000F83F0000F87E0000F8FC0000F9FC0000FBFC0000FFFC0000FFFE0000FFFF0000FF
+BF0000FF1F8000FE0FC000FC0FC000F807E000F803F000F803F000F801F800F800FC00F8
+00FC00F8007E00F8003F00F8003F00F8001F80F8000FC01A327BB121>107
+D<F83F80F8FFE0F9FFF0FBFFF8FF83F8FF00F8FE00FCFC007CFC007CFC007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007C161F7A9E23>110
+D<001FC00000FFF80001FFFC0007FFFF000FE03F801F800FC01F0007C03E0003E03E0003
+E07C0001F07C0001F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000
+F8F80000F8FC0001F87C0001F07C0001F03E0003E03F0007E01F0007C01FC01FC00FF07F
+8007FFFF0001FFFC0000FFF800001FC0001D1F7E9E22>I<F80FF83FF8FFF9FFFBFFFFF0
+FFC0FF80FF00FE00FC00FC00F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800101F7B9E17>114 D<01FF000FFFE01FFFF83FFFF87E
+01F87C0030F80000F80000F80000F80000FC00007E00007FE0003FFE001FFF800FFFE003
+FFF0003FF80003F80000FC00007C00007C00007C40007C60007CF800F8FE03F8FFFFF07F
+FFE01FFFC001FE00161F7E9E1A>I<F80001F0FC0003F07C0003E07C0003E03E0007C03E
+0007C03E0007C01F000F801F000F801F000F800F801F000F801F000FC01F0007C03E0007
+C03E0007E03E0003E07C0003E07C0001E0780001F0F80001F0F80000F0F00000F9F00000
+F9F0000079E0000079E000007DE000003FC000003FC000001F8000001F80001C1F7F9E1F
+>118 D<FC07E0FC07E0FC07E0FC07E0FC07E0FC07E0130679AF22>127
+D E /Fg 1 46 df<8000F000FC00FF00FFE0FFFEFFFEFFE0FF00FC00F00080000F0C6785
+2A>45 D E /Fh 1 18 df<000020000010000008000004FFFFFFFFFFFF00000400000800
+0010000020180A7E8B1D>17 D E /Fi 5 115 df<004001C003C0FDC001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C001C001C001C001C003E07FFF10247CA319>49
+D<01F8000607000801801000C02000E0400070400070800078F00078F80038F80038F800
+382000780000780000700000F00000E00001E00001C0000380000700000600000C000018
+0000300000600000C0000180000300080600080400080800181000103FFFF07FFFF0FFFF
+F015247EA319>I<01FC000607000801801000C02000E07000F07800F07C00F07800F030
+00F00000E00000E00001C00001C0000380000700001C0003FC000007000003800001C000
+00E00000F0000070000078200078700078F80078F80078F00078A000704000F04000E020
+01C018038006070001FC0015257EA319>I<01FC000707000C01801800C0300060300060
+700070600030E00038E00038E00038E00038E00038E00038E00038600030700070300060
+3800E01800C00C018007070001FC0015177E9619>111 D<0E1E00FE63001E47800E8780
+0F03000F00000F00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000F0000FFE00011177F9613>114
+D E /Fj 22 122 df<000007FC00001C02000030070000600F0000E00F0000C0060001C0
+000001C0000001C0000003800000038000000380000003800000038000007FFFFC007FFF
+F8000700380007003800070038000E0070000E0070000E0070000E0070000E00E0001C00
+E0001C00E0001C00E0001C01C0001C01C0001C01C2003801C20038038400380384003803
+84003001880070018800700070007000000060000000E0000000E0000000C0000070C000
+00F1800000F1800000630000003C000000202F82A41E>12 D<007C6000C2E00382E00701
+E00E01E00E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F007
+08F00708700E10700E10701E1030262018C6200F01C015177B961B>97
+D<03C0001FC0001FC0000380000380000380000380000700000700000700000700000E00
+000E00000E00000E7C001C86001D07001E03001C03803803803803803803803803807007
+80700780700780700780E00F00E00F00E00E00E01E00601C0060380060300030600010C0
+000F000011257BA418>I<003F0000E0800180400300E00701E00E03C01C01803C00003C
+0000380000780000780000780000700000F00000F0000070004070008070010030020038
+04001C380007C00013177B9618>I<00001E0000FE0001FE00001C00001C00001C00001C
+000038000038000038000038000070000070000070007C7000C2E00382E00701E00E01E0
+0E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F00708F00708
+700E10700E10701E1030262018C6200F01C017257BA41B>I<007C0001C2000701000E00
+801C00803C0100380100780200780C00FFF000F00000F00000F00000E00000E00000E000
+00E00080E00100E002007004003008001870000F800011177A9618>I<00001E00000063
+000000C7800000CF000001C6000001800000038000000380000003800000038000000700
+00000700000007000000070000007FF80000FFF000000E0000000E0000000E0000000E00
+00001C0000001C0000001C0000001C0000001C0000003800000038000000380000003800
+0000380000007000000070000000700000007000000070000000E0000000E0000000E000
+0000E0000000C0000001C000000180000071800000F1000000F3000000620000003C0000
+00192F82A410>I<000F8C00185C00705C00E03C01C03C01C0380380380780380780380F
+00700F00700F00700F00701E00E01E00E01E00E01E00E00E01C00E01C00E03C00605C003
+1B8001E380000380000380000700000700000700700E00F00C00F018006070003FC00016
+217E9618>I<00F00007F0000FF00000E00000E00000E00000E00001C00001C00001C000
+01C000038000038000038000038F800730600740700780700780700F00700E00700E0070
+0E00701C00E01C00E01C00E01C01C03801C03801C0380382380382700384700704700708
+700308E003106001E017257DA41B>I<00E000E001E000C0000000000000000000000000
+0000000000000E0033002380438043808700870087000E000E000E001C001C001C003800
+38403840708070807080710032001C000B247BA310>I<00F00007F00007F00000E00000
+E00000E00000E00001C00001C00001C00001C0000380000380000380000380F007010807
+021C07043C07083C0E10380E20000E40000E80001F00001FE0001C38001C1C00381C0038
+0E00380E10380E10701C20701C20701C20700C40E00C4060078016257DA418>107
+D<00E00FE00FE001C001C001C001C0038003800380038007000700070007000E000E000E
+000E001C001C001C001C0038003800380038007000700071007100E200E200E200640064
+0038000B257CA40D>I<1C07C03E00261830C18043203901C043403A01C043403A01C087
+803C01C087003801C087003801C007003801C00E007003800E007003800E007003800E00
+7007001C00E007001C00E007001C00E00E081C00E00E083801C00E103801C01C103801C0
+1C203801C00C207003800C40300180078025177B962B>I<1C07C0261830432038434038
+4340388780388700388700380700380E00700E00700E00700E00E01C00E01C00E01C01C1
+1C01C13801C23803823803843801847001883000F018177B961E>I<003F0000E1800180
+C00300E00700700E00701E00703C00703C00703800F07800F07800F07800F07001E0F001
+E0F001C07003C0700380700700300E00381C001C380007C00014177B961B>I<01C0F802
+610C04320E04340604380708700708700708700700700700E00F00E00F00E00F00E00F01
+C01E01C01E01C01C01C03C03803803C07003C06003C0C0072180071E000700000700000E
+00000E00000E00000E00001C00001C0000FFC000FFC00018217F961B>I<1C0F80261040
+4320E04341E04381E08781C08700008700000700000E00000E00000E00000E00001C0000
+1C00001C00001C000038000038000038000038000070000030000013177B9616>114
+D<003E0000C1000180800300400301C006038006010007000007800003F80003FE0001FF
+00001F00000780000380300180700180F00300F00300400600400C003038000FE0001217
+7D9616>I<00300070007000E000E000E000E001C001C001C07FFEFFFC03800380038007
+000700070007000E000E000E000E001C001C001C081C08381038103820184018C007000F
+217CA012>I<0E00301100702180704180704380708380E08380E08700E00700E00701C0
+0E01C00E01C00E01C01C03801C03801C03841C03841C07081C07081C07080C0B100E3310
+03C1E016177B961C>I<01E0F006310808321C083C3C103C3C1038382038002038000038
+0000700000700000700000700000E00000E00000E01000E01061C020F1C020F1C040E2E0
+80446100381E0016177D9618>120 D<0E00181300382180384180384380388380708380
+708700700700700700E00E00E00E00E00E00E01C01C01C01C01C01C01C01C01C03801C03
+801C07800C0F8006170003E700000700000700000E00600E00F01C00F01800E030008060
+0041C0003F000015217B961A>I E /Fk 60 126 df<001C003C007800F001E003C00780
+0F000E001C001C0038003800700070007000E000E000E000E000E000E000E000E000E000
+E000700070007000380038001C001C000E000F00078003C001E000F0007C003C001C0E2A
+78A41C>40 D<6000F00078003C001E000F00078003C001C000E000E00070007000380038
+0038001C001C001C001C001C001C001C001C001C001C0038003800380070007000E000E0
+01C003C007800F001E003C007800F00060000E2A7BA41C>I<00E00000E00000E00000E0
+0000E000C0E060F0E1E0FCE7E07EEFC01FFF0007FC0001F00007FC001FFF007EEFC0FCE7
+E0F0E1E0C0E06000E00000E00000E00000E00000E00013177C9B1C>I<001800003C0000
+3C00003C00003C00003C00003C00003C00003C00003C007FFFFCFFFFFEFFFFFE7FFFFC00
+3C00003C00003C00003C00003C00003C00003C00003C00003C0000180017187E9B1C>I<
+183E7E7F3F1F070E0E1CFCF8E0080D76851C>I<7FFFF0FFFFF8FFFFF87FFFF015047D91
+1C>I<3078FCFC7830060675851C>I<0000300000780000780000F80000F00001F00001E0
+0003E00003C00007C0000780000F80000F00001F00001E00001E00003E00003C00007C00
+00780000F80000F00001F00001E00003E00003C00003C00007C0000780000F80000F0000
+1F00001E00003E00003C00007C0000780000F80000F00000F0000060000015297DA41C>
+I<00F80003FE0007FF000F07801E03C01C01C03800E03800E0700070700070700070E000
+38E00038E00038E00038E00038E00038E00038E00038E00038E00038F000787000707000
+707800F03800E03C01E01C01C01E03C00F078007FF0003FE0000F80015217DA01C>I<00
+C00001C00001C00003C00007C0000FC0003FC000FDC000F9C00061C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF0011217AA01C>I<01F800
+07FF001FFF803E07C07801E07000F0E00070E00038F00038F00038600038000038000038
+0000700000700000E00001E00001C0000380000780000F00001E00007C0000F80001E000
+03C0000780000F00001E00383C00387FFFF8FFFFF87FFFF815217DA01C>I<00FE0007FF
+800FFFE01F01F03C00703C00383C00381800380000380000380000700000700000E00003
+E001FFC001FFC001FFE00001F000007800003C00001C00000E00000E60000EF0000EF000
+0EE0001C70003C7800783F01F01FFFE007FFC000FE0017217EA01C>I<000F80001F8000
+1F80003B8000738000738000E38000E38001C38003C3800383800783800703800E03801E
+03801C03803C0380380380700380F00380FFFFFEFFFFFEFFFFFE00038000038000038000
+0380000380000380000380007FFC007FFC007FFC17217EA01C>I<3FFFE03FFFE03FFFE0
+38000038000038000038000038000038000038000038000038000038000039FC003FFF00
+3FFFC03E03E03800E0300070000070000038000038000038600038F00038F00038E00070
+7000F07801E03C07C01FFF800FFE0003F80015217DA01C>I<3078FCFC78300000000000
+0000000000003078FCFC7830061775961C>58 D<183C7E7E3C1800000000000000000000
+00183C7E7E3E1E0E0E1C3CF8F0C0071E76961C>I<0000300000F80001F80003F0000FE0
+001F80007F0000FE0003F80007F0000FC0003F80007E0000FC0000FC00007E00003F8000
+0FC00007F00003F80000FE00007F00001F80000FE00003F00001F80000F8000030151C7D
+9D1C>I<7FFFFCFFFFFEFFFFFE7FFFFC0000000000000000000000000000000000007FFF
+FCFFFFFEFFFFFE7FFFFC170E7E961C>I<600000F80000FC00007E00003F80000FC00007
+F00003F80000FE00007F00001F80000FE00003F00001F80001F80003F0000FE0001F8000
+7F0000FE0003F80007F0000FC0003F80007E0000FC0000F80000600000151C7D9D1C>I<
+FFFF00FFFFC0FFFFE01C00F01C00781C00381C001C1C001C1C001C1C001C1C001C1C0038
+1C00781C00F01FFFE01FFFC01FFFE01C01F01C00781C003C1C001C1C000E1C000E1C000E
+1C000E1C000E1C001E1C001C1C003C1C00F8FFFFF0FFFFE0FFFF8017217EA01C>66
+D<FFFE00FFFF80FFFFC01C03E01C01E01C00F01C00781C00381C003C1C001C1C001C1C00
+1C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C001E1C001C1C00
+1C1C003C1C00381C00781C00F01C01F01C03E0FFFFC0FFFF80FFFE0017217EA01C>68
+D<7FFFFEFFFFFE7FFFFE0E000E0E000E0E000E0E000E0E000E0E00000E00000E00000E00
+000E03800E03800E03800FFF800FFF800FFF800E03800E03800E03800E00000E00000E00
+000E00000E00000E00000E00000E00000E00007FE000FFF0007FE00017217EA01C>70
+D<007C3801FF3807FFF80F83F80E00F81C00F83C00783800383800387000387000387000
+00E00000E00000E00000E00000E00000E00000E003FEE003FEE003FE7000387000387000
+383800783800783C00781C00F80E01F80F83F807FFB801FF38007C3817217EA01C>I<7F
+E000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00040E000E0E000E0E000E0E000E0E000E7FFFFEFFFFFE7FFFFE17217EA01C>76
+D<7E003F00FF007F807F007F001D80DC001D80DC001D80DC001D80DC001DC1DC001DC1DC
+001CC19C001CC19C001CE39C001CE39C001C631C001C631C001C771C001C771C001C361C
+001C361C001C3E1C001C1C1C001C1C1C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C007F007F00FF80FF807F007F0019217FA01C>I<7FFF80FF
+FFE07FFFF80E00FC0E003E0E001E0E000E0E00070E00070E00070E00070E00070E000E0E
+001E0E003E0E00FC0FFFF80FFFE00FFF800E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00007FC000FFE0007FC00018217FA01C>80
+D<FFFC0000FFFF0000FFFF80001C07C0001C01E0001C00E0001C00F0001C0070001C0070
+001C0070001C0070001C00F0001C00E0001C01E0001C07C0001FFF80001FFF00001FFF80
+001C07C0001C01C0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E1
+001C00E3801C00E3801C00E380FF807F00FF807F00FF801C0019217EA01C>82
+D<7FFFFF80FFFFFF80FFFFFF80E01C0380E01C0380E01C0380E01C0380E01C0380001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C000001FFC00003FFE00001FFC00019217FA01C>84
+D<FF007F80FF80FF80FF007F801C001C001C001C001C001C000E0038000E0038000E0038
+000F0078000700700007007000070070000780F0000380E0000380E0000380E00003C1E0
+0001C1C00001C1C00001C1C00000C1800000E3800000E3800000E3800000630000007700
+00007700000077000000360000003E0000003E0000001C000019217FA01C>86
+D<600000F00000F00000F800007800007C00003C00003E00001E00001F00000F00000F80
+0007800007C00003C00003C00003E00001E00001F00000F00000F800007800007C00003C
+00003E00001E00001E00001F00000F00000F800007800007C00003C00003E00001E00001
+F00000F00000F800007800007800003015297DA41C>92 D<00C00003E0000FF8001F7C00
+7C1F00F80F80E0038011077BA01C>94 D<7FFFF0FFFFF8FFFFF87FFFF015047D7E1C>I<
+0FF8001FFE003FFF003C07801803C00001E00000E00000E0001FE001FFE00FFFE01FE0E0
+7E00E07800E0E000E0E000E0E000E0E000E07001E07C07E03FFFFF1FFE7F03F81F18177D
+961C>97 D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E
+1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0E00070E00070E00070E00070E
+00070E00070E00070F000E0F000E0F801C0FC03C0FE0F80EFFF00E7FC0061F0018217FA0
+1C>I<00FF8003FFC00FFFE01F01E03C00C0380000700000700000E00000E00000E00000
+E00000E00000E00000E000007000007000703800703C00F01F01E00FFFC003FF8000FE00
+14177C961C>I<0007F00007F00007F00000700000700000700000700000700000700000
+7000F87003FE700FFFF01F07F03C01F03800F07000F0700070E00070E00070E00070E000
+70E00070E00070E000707000F07000F03801F03C03F01E07F00FFF7F07FE7F01F87F1821
+7EA01C>I<00FC0003FF000FFF801F03C03C01C03800E07000E0700070E00070E00070FF
+FFF0FFFFF0FFFFF0E00000E000007000007800703800703E00F01F01E00FFFC003FF8000
+FE0014177D961C>I<0003F8000FFC001FFE003C1E00380C007000007000007000007000
+0070007FFFFCFFFFFCFFFFFC007000007000007000007000007000007000007000007000
+0070000070000070000070000070000070000070000070000070003FFFE03FFFE03FFFE0
+17217FA01C>I<00F07E03FDFF0FFFFF0F0F861C03801C03803801C03801C03801C03801
+C03801C01C03801C03800F0F001FFF001FFC0038F0003800001C00001C00001FFF801FFF
+E03FFFF878007C70001CE0000EE0000EE0000EE0000EE0000E70001C78003C3F01F81FFF
+F007FFC000FE0018247E961C>I<FE000000FE000000FE0000000E0000000E0000000E00
+00000E0000000E0000000E0000000E0000000E1F80000E7FE0000FFFF0000FE070000F80
+38000F0038000F0038000E0038000E0038000E0038000E0038000E0038000E0038000E00
+38000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80FFE3FF80FFE3
+FF8019217FA01C>I<01C00003E00003E00003E00001C000000000000000000000000000
+0000000000007FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFC0FFFFC0
+FFFFC012227BA11C>I<000E001F001F001F000E00000000000000000000000007FF0FFF
+07FF00070007000700070007000700070007000700070007000700070007000700070007
+000700070007000700070007000700070007000EF01EF03CFFF87FF01FC0102E7DA11C>
+I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E1FFC0E1F
+FE0E1FFC0E01E00E03C00E07800E0F000E1E000E3C000E78000EFC000FFC000FDE000F8F
+000F07000E03800E03C00E01C00E00E00E00F0FFE3FEFFE3FFFFE3FE18217EA01C>I<7F
+F000FFF0007FF00000700000700000700000700000700000700000700000700000700000
+700000700000700000700000700000700000700000700000700000700000700000700000
+70000070000070000070000070000070007FFFF0FFFFF87FFFF015217DA01C>I<7CF078
+00FDF8FC007FFFFE001F9FCF001E0F07001E0F07001C0E07001C0E07001C0E07001C0E07
+001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07
+001C0E07007F1F8FC0FF9FCFE07F1F8FC01B1780961C>I<FE1F8000FE7FE000FFFFF000
+0FE070000F8038000F0038000F0038000E0038000E0038000E0038000E0038000E003800
+0E0038000E0038000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80
+FFE3FF80FFE3FF8019177F961C>I<01FC0007FF000FFF801F07C03C01E03800E0700070
+700070E00038E00038E00038E00038E00038E00038F000787000707800F03800E03C01E0
+1F07C00FFF8007FF0001FC0015177D961C>I<FE1F80FE7FE0FFFFF00FE0780F803C0F00
+1C0F000E0E000E0E00070E00070E00070E00070E00070E00070E00070F000E0F000E0F80
+1C0FC03C0FE0F80EFFF00E7FC00E1F000E00000E00000E00000E00000E00000E00000E00
+000E00000E0000FFE000FFE000FFE00018237F961C>I<00FC380003FF38000FFFB8001F
+03F8003C01F8003800F8007000780070007800E0003800E0003800E0003800E0003800E0
+003800E0003800E000380070007800700078003800F8003C01F8001F07F8000FFFB80003
+FE380000F838000000380000003800000038000000380000003800000038000000380000
+003800000038000003FF800003FF800003FF8019237E961C>I<FF81FCFF87FEFF9FFF03
+BE0F03F80603F00003E00003C00003C00003800003800003800003800003800003800003
+8000038000038000038000038000FFFF00FFFF80FFFF0018177E961C>I<07F9C01FFFC0
+3FFFC07807C0F003C0E001C0E001C0F001C07C00003FE0001FFE0003FF80001FC00001E0
+6000F0E00070E00070F00070F800E0FE03E0FFFFC0EFFF80E1FC0014177C961C>I<00C0
+0001C00001C00001C00001C00001C00001C0007FFFF8FFFFF8FFFFF801C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C01C01C01C01C01C01C0
+1C01C01C00E07800FFF8007FE0001F80161E7F9D1C>I<FE03F800FE03F800FE03F8000E
+0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E
+0038000E0038000E0038000E0038000E0038000E0078000E00F8000701F80007FFFF8003
+FFBF8000FE3F8019177F961C>I<7FC1FF00FFE3FF807FC1FF000E0038000E0038000700
+700007007000070070000380E0000380E0000380E00001C1C00001C1C00001C1C00000E3
+800000E3800000E38000007700000077000000770000003E0000003E0000001C00001917
+7F961C>I<FFC1FF80FFC1FF80FFC1FF8038000E001C001C001C001C001C001C001C001C
+001C001C001C1C1C000E3E38000E3E38000E3638000E3638000E77380006773000067730
+0007637000076370000763700007E3F00003C1E00003C1E00019177F961C>I<7FC3FE00
+7FE3FF007FC3FE000780E0000381E00001C1C00001E3800000F78000007F0000003E0000
+003C0000001C0000003E00000077000000E7000000E3800001C1C0000381E0000780E000
+070070007FC1FF00FFE3FF807FC1FF0019177F961C>I<7FC1FF00FFE3FF807FC1FF000E
+0038000F0038000700700007007000038070000380E00003C0E00001C0E00001C1C00000
+E1C00000E1C00000E180000073800000738000007300000033000000370000001E000000
+1E0000001E0000001E0000001C0000001C0000003C000000380000003800003070000078
+F0000079E000007FC000003F8000001F00000019237F961C>I<0001F8000FF8001FF800
+3E0000780000700000700000700000700000700000700000700000700000700000700000
+700000700000F00003E000FFC000FF8000FFC00003E00000F00000700000700000700000
+7000007000007000007000007000007000007000007000007000007800003E00001FF800
+0FF80001F815297DA41C>123 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060042974A41C>I<7C0000FF8000FFC00003
+E00000F00000700000700000700000700000700000700000700000700000700000700000
+7000007000007800003E00001FF8000FF8001FF8003E0000780000700000700000700000
+700000700000700000700000700000700000700000700000700000F00003E000FFC000FF
+80007C000015297DA41C>I E /Fl 1 66 df<0000180000000018000000001800000000
+3C000000003C000000007E000000007E000000007E000000009F000000009F000000009F
+000000010F800000010F800000020FC000000207C000000207C000000403E000000403E0
+00000403E000000801F000000801F000001801F800001000F800001000F8000020007C00
+0020007C00003FFFFC00007FFFFE000040003E0000C0003F000080001F000080001F0001
+00001F800100000F800100000F8002000007C002000007C006000007E01F800007E0FFE0
+007FFFFFE0007FFF28297DA82F>65 D E /Fm 5 117 df<00C001C001C0018000000000
+000000000000000000001F80078003800700070007000700070007000E000E000E000E00
+0E000E001C001E00FF800A1D7F9C0C>105 D<1F8F8007B0C003C0E00780E00780E00700
+E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9F
+F014127F9117>110 D<00FC000307000E01801C01C03800C03000C07000E07000E07000
+E0E001C0E001C0E001C0600180600380700700380E001C180007E00013127E9115>I<03
+F20C0E18061004300438043E001FE00FF007F8003C401C400C400C6018E010D0608FC00F
+127F9110>115 D<020002000200060006000C001C003C00FFE01C001C00380038003800
+380038003800700070407040704070407080708031001E000B1A7C9910>I
+E /Fn 16 109 df<1838783808101020204080050B7D830C>44 D<3078F06005047C830C
+>46 D<007C000186000303000603000C03801C03801C0380380380380380380380700700
+700700700700700700E00E00E00E00E00E00E01C00E01C00E01800E0300060600030C000
+1F000011187C9714>48 D<000800180030007001F00E7000E000E000E000E001C001C001
+C001C0038003800380038007000700070007000F00FFE00D187C9714>I<007C00018600
+0203000403800483800883801083801083801083801107001207000C0E00001C00003000
+0060000180000200000C00001001002001003C060067FE00C1FC0080F00011187D9714>
+I<003E0000C3000101800201800481C00441C0088380048380070300000600000C0001F0
+00001800000C00000C00000E00000E00600E00E01C00E01C0080380040300020E0001F80
+0012187D9714>I<000300000380000700000700000700000E00000E00000E00001C0000
+1C0000180000300000300000600000C00000C600018E00030E00021C00041C00081C0010
+1C007FB800807F80003800003800007000007000007000007000006000111F7F9714>I<
+03018003FF0003FC000220000400000400000400000400000800000BE0000C1800081800
+001C00001C00001C00001C00201C00701C00E0380080300040700040E0002180001E0000
+11187C9714>I<001E000061800180800303800603800E00001C000018000038000039F0
+00721800740C00780E00700E00F00E00E00E00E00E00E00E00E01C00E01C006038006070
+0030C0001F800011187C9714>I<09C04017E0801FF1803C1F0030020060060040040080
+0C0000080000180000300000300000700000600000E00000C00001C00001C00001800003
+800003800003800007000003000012187B9714>I<003E0000C1800100800200C00600C0
+0600C00E018007030007860003CC0001F00001F800067C000C3E00181E00300700600700
+600700C00600C00600400C006018003070000FC00012187D9714>I<007C000186000703
+000E03000C03801C0380380380380380380380380780380700380F001817000C270007CE
+00000E00000C00001C00001800E03000E0600080C000C380003E000011187C9714>I<03
+CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F261341E180F107C8F14
+>97 D<7E000E000E000E001C001C001C001C00380038003BC03C307830701870187018E0
+38E038E038E038C070C060C0E060C063801E000D1A7C9912>I<1F800003800003800003
+80000700000700000700000700000E00000E00000E7C000F86001E07001E07001C07001C
+0700380E00380E00380E00381C00701C80701C80703880703900E01900600E00111A7E99
+14>104 D<1F0707070E0E0E0E1C1C1C1C3838383870707070E4E4E4E4E830081A7D990A>
+108 D E /Fo 2 83 df<0FFFF9FFE000FF803E0000C3003C0000C3003C0000C3003C0000
+C3003C0000C3003C00018600780001860078000186007800018600780001860078000186
+007800030FFFF000030C00F000030C00F000030C00F000030C00F000030C00F000061801
+E000061801E000061801E000061801E000061801E000061801E0000C3003C0000FF803E0
+00FFFF3FFC00231C7E9B23>72 D<0FFFFF000000FF81E00000C300700000C300380000C3
+003C0000C3001C0000C3001E000186003C000186003C0001860038000186007000018601
+E0000186078000030FFC0000030C0F0000030C078000030C03C000030C03C000030C01E0
+00061803C000061803C000061803C000061803C000061803C000061803C0800C3003C100
+0FF801C100FFFF01C2000000007C00211D7E9B23>82 D E /Fp 7
+112 df<00C00000C00000C00000C00000C00000C00000C00000C000FFFF80FFFF8000C0
+0000C00000C00000C00000C00000C00000C00000C00011127E8D15>43
+D<1E0061804080C0C0C0C0C0C0C0C0C0C0C0C0C0C0408061801E000A0D7E8C0E>48
+D<18F818181818181818181818FF080D7D8C0E>I<3E00418080C0C0C000C000C0018003
+000400084030407F80FF800A0D7E8C0E>I<03C000C000C000C000C01EC031C040C0C0C0
+C0C0C0C040C021C01EF00C0E7E8D10>100 D<F7CF803870C03060C03060C03060C03060
+C03060C03060C0FDFBF014097E8818>109 D<1E0061804080C0C0C0C0C0C0408061801E
+000A097E880E>111 D E /Fq 9 113 df<0000600000600000E00000C00000C00001C000
+0180000380000300000300000700000600000600000E00000C00000C00001C0000180000
+380000300000300000700000600000600000E00000C00000C00001C00001800001800003
+80000300000700000600000600000E00000C00000C00001C000018000018000038000030
+0000700000600000600000E00000C00000C0000013317E8118>14
+D<0000300000600000C0000180000300000700000E00000C000018000038000030000070
+0000E00000C00001C0000180000380000380000300000700000600000E00000E00000C00
+001C00001C00001C00001800003800003800003800003800007000007000007000007000
+00700000700000700000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+007000007000007000007000007000007000007000003800003800003800003800001800
+001C00001C00001C00000C00000E00000E00000600000700000300000380000380000180
+0001C00000C00000E000007000003000003800001800000C00000E000007000003000001
+800000C0000060000030146377811F>18 D<C000006000003000001800000C00000E0000
+07000003000001800001C00000C00000E000007000003000003800001800001C00001C00
+000C00000E000006000007000007000003000003800003800003800001800001C00001C0
+0001C00001C00000E00000E00000E00000E00000E00000E00000E0000070000070000070
+000070000070000070000070000070000070000070000070000070000070000070000070
+0000700000700000700000700000700000700000E00000E00000E00000E00000E00000E0
+0000E00001C00001C00001C00001C0000180000380000380000380000300000700000700
+000600000E00000C00001C00001C0000180000380000300000700000E00000C00001C000
+0180000300000700000E00000C0000180000300000600000C0000014637F811F>I<0018
+007800F001E003C007800F001F001E003E003C007C007C007800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+0D25707E25>56 D<F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F80078007C007C003C003E001E001F000F000780
+03C001E000F0007800180D25708025>58 D<007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00F800F800F8
+00F001F001E003E003C0078007000E001C003800F000C000F00038001C000E0007000780
+03C003E001E001F000F000F800F800F8007C007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C0E4D798025>60
+D<00300000FC0001CE000703801C00E0300030C0000C1607809E17>98
+D<07C0041FE018307830601FE0800F801605809D17>101 D<0000000002000000000600
+0000000C000000000C000000001800000000180000000030000000003000000000600000
+00006000000000C000000000C00000000180000000018000000003000000000300000000
+060000000006000000000C000000000C0000000018000000001800000000300000000030
+00000000600008000060001C0000C0003C0000C000CE000180000E000180000E00030000
+07000300000700060000038006000003800C000001C00C000001C018000001E018000000
+E030000000E0300000007060000000706000000038C000000038C00000001D800000001D
+800000001F000000000F000000000E000000000600000027327C812A>112
+D E /Fr 26 127 df<006000006000006000006000006000006000006000006000006000
+006000FFFFF0FFFFF0006000006000006000006000006000006000006000006000006000
+00600014167E9119>43 D<0F0030C0606060604020C030C030C030C030C030C030C030C0
+30C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C
+000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060
+F070F030603000700070006000C001C00180020004000810101020207FE0FFE00C137E92
+11>I<0FC030707038703870380038003000E00FC0007000380018001C601CF01CF018E0
+3860701FC00E137F9211>I<006000E000E00160026006600C600860106020606060C060
+FFFC0060006000600060006003FC0E137F9211>I<60607FC07F8044004000400040004F
+0070C040E0006000700070E070E070E06040E021C01F000C137E9211>I<07C00C201070
+207060006000C000CF00D0C0E060C020C030C030C03040306020206010C00F000C137E92
+11>I<40007FFC7FF8401080308020004000800100010003000200060006000E000E000E
+000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800FE031F0
+6078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0
+30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I<40E04000
+00000000000040E040030D7D8C09>I<7F00E1C0E0404060006007E038606060C060C064
+C06461E43E380E0D7E8C11>97 D<F00030003000300030003000300033E034303808300C
+30063006300630063006300C3808343023E00F147F9312>I<0FE0187020706020C000C0
+00C000C000C0006000201018200FC00C0D7F8C0F>I<0078001800180018001800180018
+0F98187820386018C018C018C018C018C0186018203818580F9E0F147F9312>I<0F8010
+4020206030C010FFF0C000C000C0006000201018200FC00C0D7F8C0F>I<020702000000
+00000F030303030303030303030303030343E2E67C081B82940A>106
+D<F0303030303030303030303030303030303030FC06147F9309>108
+D<F3E1F0343218381C0C30180C30180C30180C30180C30180C30180C30180C30180C3018
+0CFC7E3F180D7F8C1B>I<0FC0186020106018C00CC00CC00CC00CC00C6018601838700F
+C00E0D7F8C11>111 D<F3E034303808300C30063006300630063006300C3808343033E0
+30003000300030003000FC000F137F8C12>I<F3C034E038E03040300030003000300030
+00300030003000FE000B0D7F8C0D>114 D<F83C301830103830182018200C400C400680
+06800680030003000E0D7F8C11>118 D<F87CF8707030305820305820188840188C4018
+8C400D04800D06800D0680060300060300060300150D7F8C18>I<38407F8087000A037D
+9311>126 D E /Fs 4 122 df<FFFFC0FFFFC012027D871A>0 D<040004000400C460F5
+E03F800E003F80F5E0C4600400040004000B0D7E8D11>3 D<040E0E1C1C1C3838307070
+6060C0C0070F7F8F0A>48 D<0C000C000C000C000C000C00FFC0FFC00C000C000C000C00
+0C000C000C000C000C000C000C000C000C000C000C000C000C000C000A1A7E9310>121
+D E /Ft 1 49 df<181818303030606060C0C0050B7E8B09>48 D
+E /Fu 40 122 df<03C0000C2080183080301900601900601A00601A00C01C00C0180040
+180060280020CD001F0700110D7E8C16>11 D<003C00C20103020304030402080608FC08
+FC08041006100610061006200C200C30183010486047C040004000800080008000800010
+1A7F9313>I<30F05B184C189C1898181818181830303030303030306060606000600060
+00C000C000C000800D137F8C11>17 D<038004400C601860106030603060606060607FE0
+FFC0C0C0C0C0C180C180C100C300C600440038000B147E9310>I<0C0C0C0C0C0C181818
+1818181818303030323032307278B46F1C60006000C000C000C00080000F137E8C14>22
+D<3FFE7FFEC44084400C400840084018C018C010C030C0306020600F0D7E8C13>25
+D<40E06020202040408003097D820A>59 D<000100000300000700000780000B80001B80
+0013800023800023800043800083800083C00101C003FFC00201C00401C00C01C00801C0
+1801E0FE07F815147F9319>65 D<07FFE000E03801C01801C01C01C01C01C01C03803803
+80700380E003FFC00700E00700700700300700380E00700E00700E00E00E00E01C0380FF
+FE0016147F9319>I<003F0800C0980300700600300C0030180030380020700000700000
+700000E00000E00000E00000E000406000806000803001003002000C1C0007E00015147E
+9318>I<07FFE000E07001C01801C00C01C00C01C00E03800E03800E03800E03800E0700
+1C07001C07001C0700380E00300E00700E00E00E01C01C0700FFFC0017147F931B>I<07
+FFFC00E01C01C00C01C00C01C00C01C00803810803810003830003FF0007020007020007
+02000700000E00000E00000E00000E00001C0000FFC00016147F9315>70
+D<003F8400E04C0380380600180C0018180018380010700000700000700000E00000E00F
+F8E000E0E000E06001C06001C03001C01803C00C058003F88016147E931A>I<07FC00E0
+01C001C001C001C0038003800380038007000700070007000E000E000E000E001C00FF80
+0E147F930F>73 D<07FC1FC000E0060001C0080001C0100001C0600001C0800003810000
+03860000038E0000039E0000076700000787000007038000070380000E01C0000E01C000
+0E00E0000E00E0001C00F000FF83FC001A147F931C>75 D<07FC0000E00001C00001C000
+01C00001C0000380000380000380000380000700000700000700000700200E00400E0040
+0E00800E01801C0780FFFF0013147F9317>I<07E01FC000E00600017004000170040001
+38040001380400021C0800021C0800020E0800020E080004071000040710000403900004
+0390000801E0000801E0000800E0000800E00018004000FE0040001A147F931A>78
+D<07FFC000E07001C01801C01C01C01C01C01C0380380380700380C003FF000701C00701
+C00700E00700E00E01C00E01C00E01C00E01C21C01C4FF807817147F9319>82
+D<07FC3F8000E01C0000F0100000702000007040000038800000390000003E0000001C00
+00001E0000001E0000003F00000067000000C7000001838000030380000603C0000401C0
+001C01E000FE07F80019147F931B>88 D<006001A0012003200220062004400C400C800D
+0019001A001C0018001800380058009810086007800C1480930E>96
+D<07B00C7010703060606060606060C0C0C0C8C0C841C862D03C700D0D7E8C12>I<3C00
+0C001800180018001800300033803C6030206030603060306030C060C06040C060802300
+1E000C147F930F>I<03C00C20187030E0600060006000C000C0004010602030C01F000C
+0D7F8C0F>I<003C000C0018001800180018003007B00C7010703060606060606060C0C0
+C0C8C0C841C862D03C700E147E9311>I<0780184030206040C040FF80C00080008000C0
+20C04061803E000B0D7E8C10>I<0018006C007C006C00C000C000C007F800C001800180
+018001800180030003000300030003000200060006006600E400C80070000E1A7F9310>
+I<01CC062C0C1C1818301830183018603060302030307010E00F600060006060C0E0C0C3
+807E000E137F8C10>I<1E0006000C000C000C000C00180019E01E301830383030303030
+30306060606460C460C8C0C8C0700E147E9313>I<06070600000000384C4C8C98181830
+323264643808147F930C>I<003000380030000000000000000001C00260043004600860
+0060006000C000C000C000C001800180018001806300E300C60078000D1A81930E>I<1E
+0006000C000C000C000C0018001838185C189C3118360038003F8061C060C860C860C8C0
+D0C0600E147F9312>I<30F8590C4E0C9C0C980C180C180C30183019303130316032601C
+100D7F8C15>110 D<0C78168C130426062606060606060C0C0C0C0C080C101A2019C018
+001800300030003000FC000F13818C11>112 D<03880C5818383030603060306030C060
+C060406060E021C01EC000C000C00180018001800FE00D137F8C0F>I<31E05A704C709C
+609800180018003000300030003000600060000C0D7F8C0F>I<0700188019C031803800
+1E000F0003804180E180C10082007C000A0D7E8C10>I<04000C000C000C001800FF8018
+001800300030003000300060006100610062006400380009127F910D>I<380C4C0C4C0C
+8C18981818181818303030323032307218B40F1C0F0D7F8C14>I<0E3C13CE238E430C43
+000300030006000608C608E610CA2071C00F0D7F8C13>120 D<380C4C0C4C0C8C189818
+18181818303030303030307018E00F60006000C0E0C0E18043003C000E137F8C11>I
+E /Fv 14 25 df<00000180000000018000000000C000000000C0000000006000000000
+6000FFFFFFF000FFFFFFF80000000018000000000C000000000600000000030000000003
+8000000001C000000000E00000000030FFFFFFFFFCFFFFFFFFFC26127E9501>0
+D<FFFFFFFFFCFFFFFFFFFC000000003000000000E000000001C000000003800000000300
+00000006000000000C000000001800FFFFFFF800FFFFFFF0000000006000000000600000
+0000C000000000C0000000018000000001800026127E8F05>4 D<000001800000000180
+00000000C000000000C000000000600000000060000000003000FFFFFFF8007FFFFFFC00
+0000000600000000030000000001C000000000E0FFFFFFFFFCFFFFFFFFFC00000000E000
+000001C0000000030000000006007FFFFFFC00FFFFFFF800000000300000000060000000
+006000000000C000000000C00000000180000000018000261C7E9709>8
+D<FFFFFFF07FFFFFE000000000000000000000000000000000FFFFFFF0FFFFFFF0000000
+000000000000000000000000007FFFFFE0FFFFFFF01C0E7E900B>10
+D<FF001FE0FF001FE01B027E8A20>I<001000001000000800000800000400000300FFFF
+C0FFFFC0000300000400000800000800001000001000120E7E9017>I<80000080000040
+000040000020000018000007FF8007FF8018000020000040000040000080000080000011
+0E7D9017>14 D<070000000FC0000018E000001830000030180000E0180180C00C038000
+0C060000060C0000038C000001F80000007000190C7D8F20>16 D<000000040000000002
+000000000200000000010000000000800000000060FFFFFFFFF8FFFFFFFFF00000000060
+00000000800000000100000000020000000002000000000400250E7E902A>I<02000000
+0004000000000400000000080000000010000000006000000000FFFFFFFFF0FFFFFFFFF0
+600000000010000000000800000000040000000004000000000200000000240E7D902A>
+I<0200000800040000040004000004000800000200100000010060000000C0FFFFFFFFF0
+FFFFFFFFE060000000C01000000100080000020004000004000400000400020000080024
+0E7D902A>I<000000040000000002000000000100000000010000000000C00000000020
+FFFFFFFFF8FFFFFFFFF825087E902A>22 D<FFFFFFFFF8FFFFFFFFF80000000020000000
+00C0000000010000000001000000000200000000040025087E8A2A>I<000C00000C0000
+0600FFFF80FFFF8011057E9D15>I E /Fw 25 121 df<FFFFFF80FFFFFF8019027D8A20>
+0 D<60F0F06004047C8B0C>I<400020C000606000C03001801803000C0600060C000318
+0001B00000E00000E00001B000031800060C000C06001803003001806000C0C000604000
+2013147A9320>I<0300030003000300C30CE31C73381FE0078007801FE07338E31CC30C
+03000300030003000E127D9215>I<003F800000C0600003001800040004000800020014
+000500220008802100108040802040404040408020802080110020800A00208004002080
+040020800A00208011002080208020404040404080204021001080220008801400050008
+000200040004000300180000C06000003F80001B1C7E9720>10 D<03C00FF01C38300C60
+066006C003C003C003C00360066006300C1C380FF003C010107E9115>14
+D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E
+9115>I<FFFFFFE07FFFFFE0000000000000000000000000000000000000000000000000
+0000000000000000FFFFFFE0FFFFFFE00000000000000000000000000000000000000000
+0000000000000000000000007FFFFFE0FFFFFFE01B167E9420>17
+D<000001800000078000001E00000078000001E00000078000000E00000038000000F000
+0003C000000F0000003C000000F0000000F00000003C0000000F00000003C0000000F000
+0000380000000E0000000780000001E0000000780000001E000000078000000180000000
+00000000000000000000000000000000000000000000000000000000007FFFFF00FFFFFF
+8019247D9920>20 D<0F8000201FE000203FF0002070780060601E0060C00F00C0C007C1
+C08001FF808000FF0080003E000F8000201FE000203FF0002070780060601E0060C00F00
+C0C007C1C08001FF808000FF0080003E001B147E9320>25 D<0006000000000C00000000
+0C000000001800000000380000000030000000007FFFFFF801FFFFFFF803800000000E00
+0000003C00000000F00000000038000000000E000000000700000000018000000000FFFF
+FFF8007FFFFFF8003000000000180000000018000000000C000000000C00000000060000
+0025187E952A>40 D<000003000000000180000000018000000000C000000000E0000000
+006000FFFFFFF000FFFFFFFC000000000E00000000038000000001E00000000078000000
+00E0000000038000000007000000000C00FFFFFFF800FFFFFFF0000000006000000000C0
+00000000C00000000180000000018000000003000025187E952A>I<007FF801FFF80780
+000E0000180000300000300000600000600000C00000C00000C00000FFFFF8FFFFF8C000
+00C00000C000006000006000003000003000001800000E000007800001FFF8007FF8151A
+7D961C>50 D<C0C0C0C0C0C0E0E0C0C0C0C0C0C0030E7E9000>55
+D<00000020000000E0000001E0000001E0000003E0000003E0000005E0000005E0000009
+E0000009E0000011E0000031E0000021E0000061E0000041E0000081E0000181E0000101
+E0000301E0000601E0000401E0000FFFF0001FFFF0003000F0003000F0006000F060C000
+F0718000F87F8000F8FF00007E7E00007C3C0000001F20809D21>65
+D<0001800000100003800000300003800000300003800000600007C00000E00007C00001
+E00005C00003E00005C00007E00005C00007E00005E0000DC00009E00019C00008E00033
+C00008E00073C00010F000E3C00010F001C3C00010700383C00020700303C00020780603
+800020780C038000403818078000403C38078000403C70078000801CE0078000801FC007
+8001001F80078001000F00078062000E000780FE00040007C0FC00000007F0FC00000003
+C07800000000002C1F7F9C32>77 D<0001FC000007FF0000083F8000300F800070078000
+E0078000E0060001E0040001E0000001F0000001F8000000FC0000007E0000003F800000
+1FE0000007F0000001F8000000FC0008007C0038003C0070003C0070003C00F0003800F0
+003800F8007000F80060007C0080007F0300003FFC00000FF00000191E7F9C19>83
+D<400002C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C000
+06C00006C00006C00006C00006C00006C00006C0000660000C60000C3000181C00700F01
+E003FF8000FE00171A7E981C>91 D<00FE0003FF800F01E01C007030001860000C60000C
+C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006
+C00006C00006C00006C00006C00006C00006400002171A7E981C>I<003C00E001C00180
+0380038003800380038003800380038003800380038003800380030007001C00F0001C00
+070003000380038003800380038003800380038003800380038003800380018001C000E0
+003C0E297D9E15>102 D<F0001C00070003000380038003800380038003800380038003
+800380038003800380018001C000E0003C00E001C0018003800380038003800380038003
+80038003800380038003800380030007001C00F0000E297D9E15>I<004000C001800180
+0180030003000600060006000C000C0018001800180030003000600060006000C000C000
+600060006000300030001800180018000C000C0006000600060003000300018001800180
+00C000400A2A7D9E10>I<C000C000600060006000300030001800180018000C000C0006
+00060006000300030001800180018000C000C0018001800180030003000600060006000C
+000C0018001800180030003000600060006000C000C0000A2A7E9E10>I<C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C002
+297B9E0C>I<1F00308070406060E0E0E0E0E040E00060007000300018001C0033007180
+61C0E0C0E0E0E0E0E0E060E070C031C0198007000300018001C000C000E040E0E0E0E0E0
+C0C041C021801F000B257D9C12>120 D E /Fx 91 127 df<60F0F0F0F0F0F0F0F0F0F0
+F0F0F0600000000060F0F0600417789614>33 D<C060E0E0E0E0E0E0E0E0C060C060C060
+C060C06040400B0B7C9614>I<071C00071C00071C00071C00071C00FFFF80FFFF807FFF
+800E38000E38000E38000E38000E38000E38000E38007FFF80FFFF80FFFF801C70001C70
+001C70001C70001C700011177F9614>I<00800180018007E01FF039BC619CC18EC18EC1
+8EE18471807F801FE00FF001F8019C018E4186E186E186E186718C39B81FF00FC0018001
+8000800F1D7E9914>I<3806007C0E006C0E00EE1C00EE1C00EE3800EE38006C38007C70
+0038700000700000E00000E00001C00001C00001C000038000038000070000070E00071F
+000E1B000E3B800E3B801C3B801C3B80381B00381F00180E00111D7F9914>I<0700000F
+800018C00038E00038E00038E00038C00039CF80398F801F1C001E1C001E1C000E38001E
+3800377000677000E3F000E3E000E1C380E1E38063F3803F3F001E1E0011177F9614>I<
+60F0F878181818303060C080050C789614>I<0180038006000C001C0018003800700070
+007000E000E000E000E000E000E000E000E000E000700070007000380018001C000C0006
+0003800180091D799914>I<80C0603038181C0E0E0E0707070707070707070E0E0E1C18
+383060C080081D7C9914>I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E
+638C0380038003800F107E9214>I<01C00001C00001C00001C00001C00001C00001C000
+FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00011117F9314>
+I<70F8FCFC7C0C1830E0C0060A798414>I<FFFEFFFEFFFE0F037E8C14>I<70F8F8F87005
+05798414>I<0006000E000E001C001C003800380070007000E000E001C001C003800380
+0380070007000E000E001C001C003800380070007000E000E000C0000F1D7E9914>I<07
+C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00EE00EE00EE00E701C701C38
+3838381C700FE007C00F177E9614>I<0300030007000F003F00F7004700070007000700
+070007000700070007000700070007000700070007007FF07FF00C177C9614>I<0FC01F
+F03838701CE00EE00EE00E400E000E001C001C00380030007000E001C0030006000C0018
+0E300E7FFE7FFE0F177E9614>I<0FC01FF03838701C701C201C001C0018003800700FE0
+0FF00038001C000E000E400EE00EE00E701C78383FF00FC00F177E9614>I<00780000F8
+0001B80001B8000338000338000638000E38000C38001C3800383800303800703800E038
+00FFFF80FFFF8000380000380000380000380000380001FF0001FF0011177F9614>I<7F
+FC7FFC700070007000700070007000700077C07FF07838601C000C000E000E400EE00EE0
+1C601C78783FF00FC00F177E9614>I<01F007F80E1C1C1C381C300070007000E000E7C0
+EFF0F838F01CF00CE00EE00E600E700E700C381C1C380FF007C00F177E9614>I<E000FF
+FEFFFEE01CE0380030007000E000C001C001800380038007000700070007000E000E000E
+000E000E000E0004000F187E9714>I<0FE03FF8783C701CE00EE00EE00EE00E701C1EF0
+03801FF03838701CE00EE00EE00EE00EF01E701C38381FF007C00F177E9614>I<07C01F
+E038307038601CE01CE00CE00EE00E601E701E383E1FEE07CE000E001C001C001C703870
+3070E03FC01F000F177E9614>I<70F8F8F87000000000000070F8F8F8700510798F14>I<
+70F8F8F87000000000000060F0F8F878183070E0800515798F14>I<0006001E003E00F8
+01F003C00F801F003C00F800F000F8003C001F000F8003C001F000F8003E001E00060F15
+7E9514>I<FFFF80FFFF807FFF800000000000000000007FFF80FFFF80FFFF8011097F8F
+14>I<C000F000F8003E001F00078003E001F00078003E001E003E007801F003E007801F
+003E00F800F000C0000F157E9514>I<1FE03FF8701CE00EE00E400E003C007000E001C0
+03800380038003800300000000000000000003000780078003000F177E9614>I<01C000
+03E00003E0000360000360000770000770000770000770000630000E38000E38000E3800
+0E38001C1C001FFC001FFC001C1C001C1C00380E00380E00FE3F80FE3F8011177F9614>
+65 D<FFF0FFFC381E380E3807380738073807380E381E3FFC3FFC381E380E3807380738
+0738073807380E381EFFFCFFF810177F9614>I<01F18007FF800E1F801C078038078070
+0380700380700380E00000E00000E00000E00000E00000E00000E0000070038070038070
+03803807001C07000E0E0007FC0001F00011177F9614>I<FFE000FFF800383C00381E00
+380E00380700380700380700380380380380380380380380380380380380380380380380
+380700380700380E00381E00383C00FFF800FFE00011177F9614>I<FFFF00FFFF003807
+003807003807003807003800003800003838003838003FF8003FF8003838003838003800
+00380000380000380380380380380380380380FFFF80FFFF8011177F9614>I<FFFF80FF
+FF803803803803803803803803803800003800003838003838003FF8003FF80038380038
+3800380000380000380000380000380000380000380000FF0000FF000011177F9614>I<
+03C60FFE1C3E181E381E700E700E600EE000E000E000E000E07FE07FE00E600E700E700E
+381E181E1C3E0FFE03CE10177F9614>I<FE3F80FE3F80380E00380E00380E00380E0038
+0E00380E00380E00380E003FFE003FFE00380E00380E00380E00380E00380E00380E0038
+0E00380E00380E00FE3F80FE3F8011177F9614>I<FFF8FFF80700070007000700070007
+000700070007000700070007000700070007000700070007000700FFF8FFF80D177D9614
+>I<FE3F00FE3F00381C0038380038780038700038E00039E00039C0003B80003FC0003F
+E0003EE0003CF0003C7000387800383800381C00381C00380E00380E00FE1F80FE1F8011
+177F9614>75 D<FF00FF0038003800380038003800380038003800380038003800380038
+00380038003807380738073807FFFFFFFF10177E9614>I<FC1F80FC1F807C1F00763700
+76370076370076370077770077770073670073670073670073E70071C70071C700700700
+700700700700700700700700700700F80F80F80F8011177F9614>I<FE3F80FE3F803E0E
+003B0E003B0E003B0E003B0E003B8E00398E00398E0039CE0039CE0039CE0038CE0038CE
+0038EE00386E00386E00386E00386E00383E00FE3E00FE3E0011177F9614>I<1FF07FFC
+783C701CE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00E701C
+783C7FFC1FF00F177E9614>I<FFF0FFFC381E380E38073807380738073807380E381E3F
+FC3FF038003800380038003800380038003800FE00FE0010177F9614>I<FFE000FFF800
+383C00381C00380E00380E00380E00380E00381C00383C003FF8003FF000383800381C00
+381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012177F9614>82
+D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE0
+0EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF80E1C380E1C380E1C380E1C380
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C0000FF8000FF80011177F9614>I<FE0FE0FE0FE03803803803803803
+803803803803803803803803803803803803803803803803803803803803803803803803
+803803801C07001C07000E0E0007FC0001F0001317809614>I<FC1F80FC1F80380E0038
+0E00380E003C1E001C1C001C1C001C1C001C1C000E38000E38000E38000E380006300007
+700007700007700003600003600003E00003E00001C00011177F9614>I<FC1F80FC1F80
+70070070070070070070070070070070070070070031C60033E6003BEE003B6E003B6E00
+3B6E003B6E003B6E001B6C001B6C001A2C001E3C001E3C001E3C0011177F9614>I<7E3E
+007E3E001C3C001E38000E78000F700007700007E00003E00003C00001C00003C00003E0
+0003E0000770000770000E78000E38001C3C001C1C003C1E00FE3F80FE3F8011177F9614
+>I<FC1F80FC1F80380E003C1E001C1C001E3C000E38000E380007700007700003600003
+E00003E00001C00001C00001C00001C00001C00001C00001C00001C00007F00007F00011
+177F9614>I<7FFEFFFEE01CE01CE038E038007000E000E001C001C00380070007000E00
+0E001C00380E380E700E700EFFFEFFFE0F177E9614>I<FFE0FFE0E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000FFE0FFE00B1D799914>I<C000E000E00070007000380038001C001C000E00
+0E000700070003800380038001C001C000E000E00070007000380038001C001C000E000E
+00060F1D7E9914>I<FFE0FFE000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E0FFE0FFE00B1D7F9914
+>I<04001F007FC0F1E0E0E00B057C9614>I<FFFEFFFEFFFE0F037E7E14>I<0818306060
+C0C0C0F0F87830050C799914>I<1FC0007FF000707800201800001C00001C0007FC001F
+FC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>I<FC0000
+FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C03801C01C0
+1C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217809614>
+I<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03F00F107E
+8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00301E
+00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CF
+C012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E
+0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE07000700070007
+0007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001FFF80383B
+80301800701C00701C00701C003018003838003FF00037C0007000007000003FF8001FFC
+003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011197F8F14
+>I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F86001E07001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE013
+17809614>I<06000F000F0006000000000000000000FF00FF0007000700070007000700
+0700070007000700070007000700FFF8FFF80D187C9714>I<006000F000F00060000000
+00000000001FF01FF0007000700070007000700070007000700070007000700070007000
+70007000700070007040E0E0C07F803F000C207E9714>I<FC0000FC00001C00001C0000
+1C00001C00001C00001CFF801CFF801C1C001C38001C70001CE0001DC0001FE0001FE000
+1E70001C38001C3C001C1C001C0E00FF1F80FF1F801117809614>I<FF80FF8003800380
+03800380038003800380038003800380038003800380038003800380038003800380FFFE
+FFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038E380
+38E38038E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F86
+001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8F
+E0FF8FE01310808F14>I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C78
+3C3C781FF007C00F107E8F14>I<FCF800FDFE001F07001E03001C03801C01C01C01C01C
+01C01C01C01C01C01C01C01C03801E03001F0E001DFC001CF8001C00001C00001C00001C
+00001C00001C0000FF8000FF80001218808F14>I<03E7000FF7001C1F00300F00700F00
+E00700E00700E00700E00700E00700E00700700F00300F001C3F000FF70007C700000700
+000700000700000700000700000700003FE0003FE013187F8F14>I<FE1F00FE7F800EE3
+800F81000F00000F00000E00000E00000E00000E00000E00000E00000E00000E0000FFF0
+00FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF007F8001C6006E006F0
+06F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFFFC0E000E000E000E00
+0E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<FC3F00FC3F001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F000FFFE0
+03E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C1C001C1C000E38000E38000E38
+0006300007700007700007700003E00003E00003E00011107F8F14>I<FE3F80FE3F8070
+0700380E00380E00380E0039CE0039CE0039CE001B6C001A6C001A6C001A6C001E7C001E
+7C000E380011107F8F14>I<7E3F007E3F001E3C000E780007700007E00003E00001C000
+03C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F8F14>I<FE3F80FE3F
+801C0E001C1C001C1C000E1C000E38000E380007380007300007300003700003700003E0
+0001E00001E00001C00001C00001C0000380007380007700007E00003C000011187F8F14
+>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738077007FFFFFFFF1010
+7F8F14>I<003E00FE01E003800380038003800380038003800380038003807F00FE007F
+00038003800380038003800380038003800380038001E000FE003E0F1D7E9914>I<E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D789914>I<7800
+FE000F00038003800380038003800380038003800380038001FC00FE01FC038003800380
+03800380038003800380038003800F00FE0078000F1D7E9914>I<1C103F38E7E041C00D
+047D9614>I E /Fy 54 122 df<0003FE00001FFF80007F03C001F803E003F007E003F0
+07E007E007E007E007E007E007E007E0018007E0000007E0000007E0000007E03FF0FFFF
+FFF0FFFFFFF007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>
+12 D<0003FFF0001FFFF0007E07F001F807F003F00FF003F00FF007E007F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F0FFFFFFF0FFFFFFF007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>I<3C7EFFFFFFFF7E3C0808
+7B8712>46 D<003FC00001FFF80007E07E000FC03F001F801F801F000F803F000FC03F00
+0FC07E0007E07E0007E07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F07E0007E07E0007E07E0007E03F000FC03F000FC01F000F801F801F800FC03F0007E0
+7E0001FFF800003FC0001C257EA421>48 D<000E00001E0000FE000FFE00FFFE00F0FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFE17257BA421>I<00FF800007FFF000
+1E03FC003800FE0078007F007E007F80FF003F80FF003FC0FF003FC0FF001FC07E001FC0
+3C001FC000003FC000003F8000003F8000007F0000007F000000FE000000FC000001F000
+0003E0000007C000000F8000001E0000001C00C0003800C0007000C000C0018001800180
+0300018007FFFF800FFFFF801FFFFF803FFFFF807FFFFF00FFFFFF00FFFFFF001A257DA4
+21>I<00FF800007FFF0000F01FC001C007E003E007F007F003F807F803F807F803F807F
+803F807F807F803F007F000C007F0000007E000000FC000001F8000007F00000FFC00000
+FF80000001F0000000FC0000007E0000007F0000003F8000003F801C003FC03E003FC07F
+003FC0FF803FC0FF803FC0FF803F80FF803F807F007F807E007F003800FE001F01FC0007
+FFF00000FF80001A257DA421>I<00000E0000001E0000003E0000003E0000007E000000
+FE000001FE000003FE0000077E0000067E00000C7E00001C7E0000387E0000707E000060
+7E0000C07E0001C07E0003807E0007007E000E007E000C007E0018007E0038007E007000
+7E00E0007E00FFFFFFF0FFFFFFF00000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00003FFFF0003FFFF01C257EA421>I<180006001F803E001FFFFC
+001FFFF8001FFFF0001FFFE0001FFF80001FFE0000180000001800000018000000180000
+001800000018000000187F80001BFFF0001F81FC001C007E0008007F0000003F0000003F
+8000003F8000003FC000003FC03C003FC07E003FC0FF003FC0FF003FC0FF003FC0FE003F
+807C003F8060007F0030007E001C00FC000F03F80007FFE00000FF00001A257DA421>I<
+000FF000003FFC0000F80E0003E0070007C01F800F803F801F803F801F003F803F003F80
+3F001F007E0000007E0000007E000000FE000000FE1FE000FE7FF800FE407C00FE803E00
+FF001F00FF001F80FF001F80FE001FC0FE001FC0FE001FC0FE001FC07E001FC07E001FC0
+7E001FC07E001FC03E001F803F001F801F001F000F003F000F803E0003E0F80001FFF000
+007FC0001A257DA421>I<300000003C0000003FFFFFE03FFFFFE03FFFFFC07FFFFF807F
+FFFF007FFFFE007FFFFC0060000C006000180060003000C0006000C000C000C001800000
+0180000003000000070000000E0000000E0000001E0000001E0000003E0000003C000000
+7C0000007C000000FC000000FC000000FC000000FC000001FC000001FC000001FC000001
+FC000001FC000001FC000001FC000000F80000007000001B277CA621>I<007FC00003FF
+F80007007C001C001E0018000F003800078038000780780007807C0007807F0007807FC0
+07007FE00F003FF81E003FFE3C001FFF78000FFFE00007FFF00003FFF80003FFFE0007FF
+FF001F1FFF003C07FF803C01FF807800FFC078003FC0F0000FC0F00007C0F00003C0F000
+03C0F0000380F8000380780003003C0007003E000E000F807C0007FFF00000FF80001A25
+7DA421>I<007F800003FFE00007C0F8000F807C001F003E003E003E007E001F007E001F
+00FE001F80FE001F80FE001F80FE001F80FE001FC0FE001FC0FE001FC0FE001FC07E003F
+C07E003FC03E007FC01F005FC00F809FC007FF9FC001FE1FC000001FC000001F8000001F
+8000001F803E003F007F003F007F003E007F003E007F007C007E00F8003801F0001C07E0
+000FFF800003FC00001A257DA421>I<3C7EFFFFFFFF7E3C000000000000000000003C7E
+FFFFFFFF7E3C081A7B9912>I<00000600000000000F00000000000F00000000001F8000
+0000001F80000000001F80000000003FC0000000003FC0000000007FE0000000007FE000
+0000007FE000000000DFF000000000CFF000000001CFF80000000187F80000000187F800
+00000307FC0000000303FC0000000703FE0000000601FE0000000601FE0000000C00FF00
+00000C00FF0000001800FF80000018007F80000018007F80000030003FC000003FFFFFC0
+00007FFFFFE0000060001FE00000E0001FF00000C0000FF00000C0000FF0000180000FF8
+0001800007F80003800007FC0003000003FC0007800003FC00FFF8007FFFF0FFF8007FFF
+F02C287EA731>65 D<FFFFFFF800FFFFFFFF0003F8003FC003F8000FE003F80007F003F8
+0003F803F80003F803F80003FC03F80003FC03F80001FC03F80001FC03F80003FC03F800
+03FC03F80003F803F80007F803F80007F003F8000FE003F8003FC003FFFFFF0003FFFFFF
+0003F8003FC003F8000FE003F80007F003F80003F803F80003FC03F80001FC03F80001FE
+03F80001FE03F80001FE03F80001FE03F80001FE03F80001FE03F80001FC03F80003FC03
+F80003FC03F80007F803F8000FF003F8003FE0FFFFFFFF80FFFFFFFC0027287EA72E>I<
+00007FC0040007FFF80C001FE01E1C007F00073C01FC0001FC03F80000FC07F000007C0F
+E000007C0FC000003C1FC000001C3F8000001C3F8000001C7F8000000C7F0000000C7F00
+00000CFF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF000000007F000000007F0000000C7F8000000C3F800000
+0C3F8000000C1FC00000180FC00000180FE000003007F000003003F800006001FC0001C0
+007F000380001FE01E000007FFF80000007FC00026287CA72F>I<FFFFFFF80000FFFFFF
+FF000003FC003FC00003FC000FE00003FC0003F80003FC0001FC0003FC0000FE0003FC00
+007E0003FC00007F0003FC00003F8003FC00003F8003FC00001F8003FC00001FC003FC00
+001FC003FC00001FC003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FC003FC00001FC003FC00001FC003FC00001FC003FC00003F8003FC00003F8003FC00
+003F0003FC00007F0003FC0000FE0003FC0001FC0003FC0003F80003FC0007F00003FC00
+3FC000FFFFFFFF0000FFFFFFF800002B287EA732>I<FFFFFFFFC0FFFFFFFFC003FC001F
+C003FC0007E003FC0001E003FC0000E003FC0000E003FC00006003FC00006003FC000060
+03FC00003003FC01803003FC01803003FC01800003FC01800003FC03800003FC03800003
+FC0F800003FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC
+01800003FC01800C03FC01800C03FC00000C03FC00001C03FC00001803FC00001803FC00
+001803FC00003803FC00003803FC00007803FC0000F803FC0001F003FC000FF0FFFFFFFF
+F0FFFFFFFFF026287EA72B>I<FFFFFFFF80FFFFFFFF8003FC003F8003FC0007C003FC00
+03C003FC0001C003FC0001C003FC0000C003FC0000C003FC0000C003FC00006003FC0000
+6003FC01806003FC01800003FC01800003FC01800003FC03800003FC03800003FC0F8000
+03FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC01800003
+FC01800003FC01800003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC000023287E
+A729>I<00007FC004000007FFF80C00001FE01E1C00007F00073C0001FC0001FC0003F8
+0000FC0007F000007C000FE000007C000FC000003C001FC000001C003F8000001C003F80
+00001C007F8000000C007F0000000C007F0000000C00FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+03FFFFC0FF0003FFFFC07F000003FC007F800003FC007F800003FC003F800003FC003F80
+0003FC001FC00003FC000FC00003FC000FE00003FC0007F00003FC0003F80003FC0001FC
+0007FC00007F000EFC00001FE03C7C000007FFF03C0000007FC00C002A287CA733>I<FF
+FFF0FFFFF003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC00FFFFF0FFFFF014287EA718>73 D<FFFFF80000FFFFF8000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00018003FC00018003FC00018003FC00038003FC00030003FC00030003FC00070003
+FC00070003FC000F0003FC000F0003FC001F0003FC007E0003FC01FE00FFFFFFFE00FFFF
+FFFE0021287EA727>76 D<FFFC0000001FFF80FFFE0000003FFF8003FE0000003FE00003
+7F0000006FE000037F0000006FE000037F0000006FE000033F800000CFE000033F800000
+CFE000031FC000018FE000031FC000018FE000030FE000030FE000030FE000030FE00003
+07F000060FE0000307F000060FE0000303F8000C0FE0000303F8000C0FE0000303F8000C
+0FE0000301FC00180FE0000301FC00180FE0000300FE00300FE0000300FE00300FE00003
+007F00600FE00003007F00600FE00003003F80C00FE00003003F80C00FE00003003F80C0
+0FE00003001FC1800FE00003001FC1800FE00003000FE3000FE00003000FE3000FE00003
+0007F6000FE000030007F6000FE000030003FC000FE000030003FC000FE000030001F800
+0FE000030001F8000FE000030001F8000FE000078000F0000FE000FFFC00F003FFFF80FF
+FC006003FFFF8039287EA73E>I<FFFC0000FFFCFFFE0000FFFC03FF0000078003FF8000
+0300037FC0000300033FE0000300031FE0000300031FF0000300030FF80003000307FC00
+03000303FE0003000301FF0003000300FF00030003007F80030003007FC0030003003FE0
+030003001FF0030003000FF80300030007FC0300030003FC0300030003FE0300030001FF
+0300030000FF83000300007FC3000300003FE3000300001FE3000300001FF3000300000F
+FB0003000007FF0003000003FF0003000001FF0003000000FF00030000007F0003000000
+7F00030000003F00030000001F00030000000F00078000000700FFFC00000300FFFC0000
+03002E287EA733>I<FFFFFFF000FFFFFFFE0003FC007F8003FC001FE003FC0007F003FC
+0007F003FC0003F803FC0003F803FC0003FC03FC0003FC03FC0003FC03FC0003FC03FC00
+03FC03FC0003FC03FC0003F803FC0003F803FC0007F003FC0007F003FC001FE003FC007F
+8003FFFFFE0003FFFFF00003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF0000026287EA72D>80
+D<FFFFFFE00000FFFFFFFC000003FC007F800003FC001FC00003FC000FE00003FC0007F0
+0003FC0003F80003FC0003F80003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+0003FC0003FC0003FC0003F80003FC0003F80003FC0007F00003FC000FE00003FC001FC0
+0003FC007F800003FFFFFC000003FFFFFC000003FC00FF000003FC003F800003FC001FC0
+0003FC001FE00003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF0
+0003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF00C03FC0007F0
+0C03FC0007F81803FC0003FC38FFFFF000FFF0FFFFF0003FC02E287EA731>82
+D<00FF004003FFE0C00F80F9C01E001FC03C000FC0780003C0780003C0780001C0F80001
+C0F80000C0F80000C0FC0000C0FE000000FF000000FFE000007FFF00007FFFE0003FFFF8
+001FFFFE000FFFFF0007FFFF8001FFFF80007FFFC00003FFC000003FE000000FE0000007
+E0000007E0C00003E0C00003E0C00003E0C00003E0E00003C0E00003C0F0000780F80007
+80FE000F00E7C03E00C1FFF800803FE0001B287CA724>I<7FFFFFFFFE7FFFFFFFFE7E00
+FF007E7800FF001E7000FF000E6000FF00066000FF0006E000FF0007E000FF0007C000FF
+0003C000FF0003C000FF0003C000FF00030000FF00000000FF00000000FF00000000FF00
+000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000
+00FF00000000FF00000000FF00000000FF00000000FF00000000FF000000FFFFFF0000FF
+FFFF0028277EA62D>I<FFFFF001FFF8FFFFF001FFF803FC00000F0003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060001FC00000C0001FC00000C0000FE00000C0000FE00001800007F
+00003000003F00006000001FC001C0000007F00F80000001FFFE000000003FF000002D28
+7EA732>I<7FFFF03FFF807FFFF03FFF8003FE0003F00001FF0000C00001FF0001800000
+FF80038000007FC0070000007FC0060000003FE00C0000001FF01C0000001FF038000000
+0FF83000000007FC6000000007FEE000000003FFC000000001FF8000000000FF80000000
+00FF80000000007FC0000000003FE0000000003FE0000000003FF0000000003FF8000000
+006FF800000000E7FC00000001C3FE0000000183FE0000000301FF0000000700FF800000
+0E00FF8000000C007FC0000018003FE0000038003FE0000030001FF0000060000FF80000
+E0000FFC0001C00007FC0003E00003FE00FFFE007FFFF0FFFE007FFFF02C287EA731>88
+D<03FF80000FFFE0001F01F8003F80FC003F807E003F803E001F003F001F003F0000003F
+0000003F0000003F000007FF0000FFFF0007F03F001F803F003F003F007E003F007C003F
+00FC003F00FC003F00FC003F00FC005F007E00DF003F839F801FFE0FF803F803F81D1A7E
+9920>97 D<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC1FC000FCFFF800FDC0F
+C00FF003E00FE001F00FC001F80FC001FC0FC000FC0FC000FC0FC000FE0FC000FE0FC000
+FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FC0FC000FC0FC001F80FC001
+F80FE003F00FB007E00F1C0FC00E0FFF000C03FC001F287EA724>I<003FF001FFFC07E0
+3E0F807F1F807F3F007F3F003E7E003E7E0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE00007E00007F00003F00003F80031F80070FC00607F01C01FFF0003FC0181A
+7E991D>I<00007FE000007FE0000007E0000007E0000007E0000007E0000007E0000007
+E0000007E0000007E0000007E0000007E0000007E0000007E0007F87E001FFE7E007E077
+E00FC01FE01F800FE03F0007E03F0007E07E0007E07E0007E0FE0007E0FE0007E0FE0007
+E0FE0007E0FE0007E0FE0007E0FE0007E0FE0007E07E0007E07E0007E07F0007E03F0007
+E01F000FE00F801FE007E077E003FFC7FE007F07FE1F287EA724>I<007F800001FFF000
+07E0F8000F803C001F003E003F001F003F001F007E001F007E001F80FE000F80FE000F80
+FFFFFF80FFFFFF80FE000000FE000000FE000000FE0000007E0000007E0000003F000180
+3F0001801F8003000FC0060003E03C0001FFF800003FC000191A7E991E>I<0007F0003F
+F800FC7C01F0FE03F0FE03E0FE07E0FE07E07C07E00007E00007E00007E00007E00007E0
+00FFFF80FFFF8007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+007FFF007FFF0017287EA714>I<00FF01F007FFE7F80F81FC781F00F8783E007C703E00
+7C007E007E007E007E007E007E007E007E007E007E003E007C003E007C001F00F8000F81
+F0000FFFE00018FF00001000000038000000380000003C0000001FFFF8001FFFFE000FFF
+FF800FFFFFC01FFFFFE03C000FE07C0003F0F80001F0F80001F0F80001F0F80001F07C00
+03E07C0003E03E0007C01FC03F8007FFFE0000FFF0001D267E9921>I<FFC00000FFC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC0FC000FC3FF000FC60F800FC80FC00FD007E00FE007
+E00FE007E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E0FFFC7FFEFFFC7FFE1F287DA724>I<0F001F803FC03FC03FC03FC01F800F0000000000
+00000000000000000000FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFF8FFF80D297DA813>I<FFC000
+00FFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC01FF80FC01FF80FC003C00FC003000FC00E
+000FC01C000FC030000FC060000FC0C0000FC380000FC780000FCFC0000FDFE0000FF3F0
+000FE1F8000F80F8000F80FC000F807E000F803F000F801F800F800F800F800FC00F8007
+E00F8007F0FFF81FFEFFF81FFE1F287EA723>107 D<FFC0FFC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFFFC0E287DA713>
+I<FF80FE003F8000FF83FF80FFE0000F860FC183F0000F8807E201F8000F9003E400F800
+0FB003FC00FC000FA003F800FC000FE003F800FC000FC003F000FC000FC003F000FC000F
+C003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC0
+03F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003
+F000FC000FC003F000FC000FC003F000FC000FC003F000FC00FFFC3FFF0FFFC0FFFC3FFF
+0FFFC0321A7D9937>I<FF80FC00FF83FF000F860F800F880FC00F9007E00FA007E00FA0
+07E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC
+7FFEFFFC7FFE1F1A7D9924>I<003FC00001FFF80007E07E000F801F001F000F803F000F
+C03E0007C07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007
+F0FE0007F0FE0007F07E0007E07E0007E03F000FC03F000FC01F801F800FC03F0007E07E
+0001FFF800003FC0001C1A7E9921>I<FFC1FC00FFCFFF800FDC0FC00FF007E00FE003F0
+0FC001F80FC001FC0FC001FC0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE
+0FC000FE0FC000FE0FC000FE0FC000FC0FC001FC0FC001F80FC003F80FE003F00FF007E0
+0FDC1FC00FCFFF000FC3FC000FC000000FC000000FC000000FC000000FC000000FC00000
+0FC000000FC000000FC00000FFFC0000FFFC00001F257E9924>I<FF83E0FF8FF80F8C7C
+0F90FE0FB0FE0FA0FE0FA07C0FE07C0FC0000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE00171A7E
+991B>114 D<03FC601FFFE03C03E07801E07000E0F00060F00060F80060FC0000FFE000
+7FFE003FFF801FFFC00FFFE001FFF0000FF80001F8C000F8C00078E00078E00078F00070
+F800F0FE03E0E7FF80C1FE00151A7E991A>I<00600000600000600000600000E00000E0
+0001E00001E00003E00007E0001FE000FFFFE0FFFFE007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E03007E03007E0
+3007E03007E03007E03003F06001F0C000FF80003F0014257FA419>I<FFC07FE0FFC07F
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC00FE00FC00FE007C017E003E067E001FFC7FE007F07FE1F1A7D9924>I<FFFC01FF
+FFFC01FF0FC000700FE0007007E0006007F000E003F000C003F801C001F8018001FC0180
+00FC030000FE0300007E0600007E0600003F0C00003F0C00001F9800001F9800001FF800
+000FF000000FF0000007E0000007E0000003C0000003C00000018000201A7F9923>I<FF
+F87FF81FF0FFF87FF81FF00FC00F8007800FC007C003000FE007C0070007E007E0060007
+E00FE0060003F00FE00C0003F01FF00C0003F019F00C0001F819F8180001F830F8180001
+FC30F8380000FC70FC300000FC607C3000007E607C6000007EC03E6000007FC03EE00000
+3FC03FC000003F801FC000001F801F8000001F801F8000001F000F8000000F000F000000
+0E000700000006000600002C1A7F992F>I<FFF80FFEFFF80FFE0FE003C007F0038003F0
+030001F8060000FC0E0000FE1C00007F3800003F7000001FE000000FC0000007E0000007
+F0000007F800000FF800001CFC0000387E0000703F0000E03F8000C01FC001800FC00300
+07E00F0003F0FFE01FFFFFE01FFF201A7F9923>I<FFFC01FFFFFC01FF0FC000700FE000
+7007E0006007F000E003F000C003F801C001F8018001FC018000FC030000FE0300007E06
+00007E0600003F0C00003F0C00001F9800001F9800001FF800000FF000000FF0000007E0
+000007E0000003C0000003C0000001800000018000000300000003000030060000780600
+00FC0E0000FC0C0000FC380000787000003FE000001F80000020257F9923>I
+E /Fz 25 122 df<60F0F06004047D830A>46 D<06000E00FE000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
+D<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810
+183FF07FF0FFF00D157E9412>I<60307FE07FC0440040004000400040004F8070E04070
+0030003800384038E038E0388030406020C01F000D157E9412>53
+D<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C01C03801FFE
+001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072FF803C1817
+7F961A>82 D<7FFFF8603818403808403808803804803804803804003800003800003800
+003800003800003800003800003800003800003800003800003800003800003800003800
+03FF8016177F9619>84 D<3FC0706070302038003803F81E3830387038E039E039E07970
+FF1F1E100E7F8D12>97 D<003E00000E00000E00000E00000E00000E00000E00000E0000
+0E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E0030
+1E00182E0007CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060
+0070083010183007C00D0E7F8D10>I<0F9E18E33060707070707070306018C02F802000
+60003FE03FF83FFC600EC006C006C006600C38380FE010157F8D12>103
+D<F8000038000038000038000038000038000038000038000038000038F8003B1C003C0E
+00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00FE3F801117
+7F9614>I<307878300000000000F8383838383838383838383838FE07177F960A>I<F800
+38003800380038003800380038003800383E383838303840388039803FC039E038E038F0
+3878383C383CFE7F10177F9613>107 D<F8F83E003B1CC7003C0F0380380E0380380E03
+80380E0380380E0380380E0380380E0380380E0380380E0380380E0380380E0380FE3F8F
+E01B0E7F8D1E>109 D<F8F8003B1C003C0E00380E00380E00380E00380E00380E00380E
+00380E00380E00380E00380E00FE3F80110E7F8D14>I<07C018303018600C600CE00EE0
+0EE00EE00EE00E701C3018183007C00F0E7F8D12>I<F9F0003E1C003806003807003803
+00380380380380380380380380380300380700380E003E1C0039F0003800003800003800
+00380000380000FE000011147F8D14>I<F9E03A703C7038203800380038003800380038
+00380038003800FF000C0E7F8D0E>114 D<1F4060C0C040C040E000FF007F801FC001E0
+80608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FFC03800380038
+00380038003800380038403840384038401C800F000A147F930E>I<F83E00380E00380E
+00380E00380E00380E00380E00380E00380E00380E00380E00381E001C2E0007CF80110E
+7F8D14>I<FE1F380E3C0C1C081C080E100E100720072007E003C003C001800180100E7F
+8D13>I<FEFE7C383838383810383C101C3C201C4C201E4E600ECE400E87400787800703
+80070380030300020100160E7F8D19>I<FE3F3C1C1C100E20074007C0038001C002E004
+F008701838383CFC7F100E7F8D13>I<FE1F380E3C0C1C081C080E100E100720072007E0
+03C003C00180018001000100E200E200A400780010147F8D13>I
+E /FA 1 66 df<0003000000030000000300000007800000078000000FC000000BC00000
+0BC0000011E0000011E0000031F0000020F0000020F00000407800004078000040780000
+803C0000803C0001003E0001FFFE0001001E0002000F0002000F0002000F000400078004
+0007800C0007C01E0007C0FF803FFC1E1D7E9C22>65 D E /FB 60
+123 df<01FFFFFF80003C00380000380070000038007000003800700000380070000070
+00E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000E001
+C00001C003800001C003800001C003800001C00380000380070000038007000003800700
+00038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FFC000
+211C7E9B23>5 D<00F800030C000E06041C0704380308300388700390700390E003A0E0
+03A0E003C0E00380E00380E00380600780600B883071900F80E016127E911B>11
+D<0001F000061800080C00100C00200E00400E00800E00801C01001C010018010038020F
+F00210C0020FE00200300400300400300400380400380800700800700800700800E01800
+E01801C0140180140300230E0020F8002000002000004000004000004000004000008000
+0080000017257F9C17>I<0780101FC0103FE0207FF020603040C0184080088000088000
+0480000500000500000600000600000600000400000400000400000C00000C00000C0000
+1800001800001800001800003000003000002000141B7F9115>I<003800007F00008780
+01030001000001800001800001C00000C00000E00000E00000700000F80003B800063C00
+0C1C00181C00381C00701C00701C00E01C00E01C00E01C00E01C00E01800E03800603000
+70600038C0000F8000111E7F9D12>I<01F807000C0018003800300070007FC0E000E000
+E000E000E00060006000300018600F800D127E9111>I<001000001000001000001FC000
+3040006F800080000100000200000600000C000008000018000030000030000020000060
+0000600000600000E00000C00000E00000E00000E00000E000007000007C00003F00001F
+E00007F80000F800003C00001C00000C0000180003100000E00012257F9C12>I<3C1F00
+4E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C03801C0380380700
+380700380700380700700E00300E00000E00000E00001C00001C00001C00001C00003800
+003800003000121B7E9115>I<07800001C00001E00000E00000E00000F0000070000070
+00007800003800003800003C00001C00001C00001E00000E00001E00003F0000670000C7
+000187800303800603800E03C01C01C03801C07001E0E000E0C000F0141D7E9C18>21
+D<0FFFF81FFFF83FFFF8608400418400810400010400030C00030C00020C00060C00060C
+000E0C000C0C001C0E001C0E00380E0018060015127E9118>25 D<000100000200000200
+000200000200000400000400000400000400000800000800007E0001C9800710E00C1060
+181070381030702030702030E02070E02070E04070E040E0E040E06041C0608380308600
+1C9C0007E00001000001000001000001000002000002000002000002000014257E9C19>
+30 D<00FC03FE0E07180010002000200010C017201FE020004000400080008000800440
+0860303FE00F8010147F9213>34 D<1E3E60C0C0C0C0C0C0603E1E070C7E940C>44
+D<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C830C>I<00000180
+0000078000001E00000078000001E00000078000000E00000038000000F0000003C00000
+0F0000003C000000F0000000F00000003C0000000F00000003C0000000F0000000380000
+000E0000000780000001E0000000780000001E000000078000000180191A7D9620>I<00
+010003000600060006000C000C000C0018001800180030003000300060006000C000C000
+C0018001800180030003000300060006000C000C000C0018001800180030003000300060
+0060006000C000C00010297E9E15>I<003E0000C3000100C00200C00300600780600780
+7003003000003000003000003000FC700382700601700C01701800F03800E03000E07000
+E07000C0E001C0E001C0E00180E00380E00300E00600E00600600C003018001860000F80
+00141F7E9D16>64 D<00000C0000000C0000001C0000001C0000003C0000005C0000005C
+0000009E0000008E0000010E0000020E0000020E0000040E0000040E0000080E0000100E
+0000100E0000200700003FFF000040070000800700008007000100070001000700020007
+0004000700040007001C000780FF803FF01C1D7F9C1F>I<01FFFF00003C01C0003800E0
+003800F0003800700038007000700070007000F0007000F0007001E000E003C000E00780
+00E01F0000FFFC0001C00F0001C0078001C003C001C003C0038003C0038003C0038003C0
+038003C0070007800700070007000E0007001C000E007800FFFFC0001C1C7E9B1F>I<00
+01F808000E061800380138006000F001C0007003800070070000300F0000200E0000201C
+0000203C0000203C000000780000007800000078000000F0000000F0000000F0000000F0
+000000F0000100F0000100F0000100700002007000020030000400380008001C0010000E
+0060000701800000FE00001D1E7E9C1E>I<01FFFF80003C01E000380070003800380038
+003C0038001C0070001C0070001E0070001E0070001E00E0001E00E0001E00E0001E00E0
+001E01C0003C01C0003C01C0003C01C000380380007803800070038000F0038000E00700
+01C0070003800700070007001C000E007800FFFFC0001F1C7E9B22>I<01FFFFF8003C00
+78003800180038001000380010003800100070001000700010007008100070080000E010
+0000E0100000E0300000FFF00001C0200001C0200001C0200001C0200003804040038000
+400380008003800080070001000700010007000300070006000E003E00FFFFFC001D1C7E
+9B1F>I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020
+007008200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C02000
+01C020000380400003800000038000000380000007000000070000000700000007000000
+0F000000FFF000001C1C7E9B1B>I<0001F808000E061800380138006000F001C0007003
+800070070000300F0000200E0000201C0000203C0000203C000000780000007800000078
+000000F0000000F0000000F0007FF0F0000780F0000700F0000700F00007007000070070
+000E0030000E0038000E001C001E000E0064000701840000FE00001D1E7E9C21>I<01FF
+C3FF80003C0078000038007000003800700000380070000038007000007000E000007000
+E000007000E000007000E00000E001C00000E001C00000E001C00000FFFFC00001C00380
+0001C003800001C003800001C00380000380070000038007000003800700000380070000
+07000E000007000E000007000E000007000E00000F001E0000FFE1FFC000211C7E9B23>
+I<01FFC07F80003C001E0000380018000038002000003800400000380080000070020000
+00700400000070080000007010000000E040000000E0C0000000E1E0000000E2E0000001
+C470000001D070000001E038000001C0380000038038000003801C000003801C00000380
+0E000007000E000007000E0000070007000007000700000F00078000FFE03FF000211C7E
+9B23>75 D<01FE0000FF003E0000F0002E0001E0002E0002E0002E0002E0002E0004E000
+4E0009C0004E0009C000470011C000470011C00087002380008700438000870043800087
+00838001070107000107010700010382070001038207000203840E000203880E00020388
+0E000203900E000403A01C000403A01C000401C01C000C01C01C001C01803C00FF8103FF
+80281C7E9B28>77 D<0003F800000E0E000038038000E001C001C001C0038000E0070000
+E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F00001
+E0F00001E0F00001E0F00003C0F00003C0F0000780F0000780F0000F0070000E0070001C
+00380038003C0070001C01C0000707800001FC00001C1E7E9C20>79
+D<01FFFF00003C03C0003800E0003800F00038007000380070007000F0007000F0007000
+F0007000E000E001E000E003C000E0070000E01E0001FFF00001C0000001C0000001C000
+0003800000038000000380000003800000070000000700000007000000070000000F0000
+00FFE000001C1C7E9B1B>I<01FFFE00003C03C0003800E0003800F00038007000380070
+007000F0007000F0007000F0007001E000E001C000E0078000E01E0000FFF00001C03800
+01C00C0001C00E0001C00E0003800E0003800E0003800E0003800E0007001E0007001E08
+07001E0807001E100F000F10FFE00F20000003C01D1D7E9B20>82
+D<000FC100303300400F0080060180060300060300060600040600040700000700000780
+0003F00001FF0000FFC0003FE00003E00000F00000700000300000302000302000306000
+606000606000C0600080F00300CC060083F800181E7E9C19>I<1FFFFFF01C0380703007
+0030200700206007002040070020400E0020800E0020800E0020000E0000001C0000001C
+0000001C0000001C00000038000000380000003800000038000000700000007000000070
+00000070000000E0000000E0000000E0000000E0000001E000007FFF00001C1C7F9B18>
+I<7FF03FE00F0007000E0006000E0004000E0004000E0004001C0008001C0008001C0008
+001C00080038001000380010003800100038001000700020007000200070002000700020
+00E0004000E0004000E0004000E0008000E0008000E00100006002000060040000300800
+001830000007C000001B1D7D9B1C>I<FFC00FF01C0003801C0003001C0002001C000200
+1C0004001C0008001E0008000E0010000E0030000E0020000E0040000E0040000E008000
+0E0100000F01000007020000070400000704000007080000070800000710000007200000
+03A0000003C00000038000000380000003000000030000001C1D7D9B18>I<FFC0FFC0FF
+3C001C003C1C001C00101C003C00101C003C00201C005C00401C005C00401C009C00801C
+009C00801C011C01001C011C01001C021C02001C041C02001C041C04001C081C08001C08
+1C08001C100E10001E100E10000E200E20000E200E20000E400E40000E800EC0000E800E
+80000F000F00000F000F00000E000E00000E000E00000C000C00000C000C0000281D7D9B
+27>I<01FFC0FF80001E003C00001C003000000E002000000E004000000F008000000701
+0000000782000000038400000003CC00000001D800000001F000000001E000000000E000
+000000F00000000170000000027800000004380000000838000000103C000000201C0000
+00401E000000800E000001000F0000020007000006000700001E000F8000FF803FF00021
+1C7F9B22>I<FFE007F80F0001E00F0001800F00010007000200078004000380080003C0
+180003C0100001C0200001E0400000E0800000F1000000F2000000760000007C00000038
+0000003800000070000000700000007000000070000000E0000000E0000000E0000000E0
+000001C000001FFC00001D1C7F9B18>I<00FFFFE000F001C001C003800180070001000E
+0001001E0002001C0002003800020070000000E0000001C0000003800000070000000F00
+00001E0000001C0000003800000070020000E0040001C0040003800400070008000F0008
+000E0018001C003000380070007001E000FFFFE0001B1C7E9B1C>I<3F00070007000E00
+0E000E000E001C001C001C001C0039E03A303C1838187018701C701C701CE038E038E038
+E030E070E060E0C061C023001E000E1D7E9C12>98 D<0007E00000E00000E00001C00001
+C00001C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E
+00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E
+00131D7E9C16>100 D<01F007080C0818043808300870307FC0E000E000E000E000E000
+E0046008601030600F800E127E9113>I<0001E0000630000E78000EF0001C60001C0000
+1C00001C00001C0000380000380003FFC000380000380000700000700000700000700000
+700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00001800003
+8000038000630000F30000F60000E4000078000015257E9C14>I<0038C000C5C00183C0
+0303C00703800603800E03800E03801C07001C07001C07001C07001C0E001C0E001C0E00
+0C1E00047C00039C00001C00001C00003800603800F03000F07000E0C0007F0000121A80
+9114>I<01C003C003C001800000000000000000000000001C0027004700470087008700
+0E000E001C001C001C003800388038807080710032001C000A1C7E9B0E>105
+D<0007000F000F00060000000000000000000000000078009C010C020C021C041C001C00
+1C0038003800380038007000700070007000E000E000E000E001C061C0F180F300E6007C
+001024809B11>I<0FC00001C00001C00003800003800003800003800007000007000007
+00000700000E07000E08800E11C00E23C01C47801C83001D00001E00003FC00038E00038
+7000387000707100707100707100707200E03200601C00121D7E9C16>I<381F81F04E20
+C6184640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C0381C01C0381C01
+C0381C01C0703803807138038071380380E1380380E2700700643003003820127E9124>
+109 D<3C1F004E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C0380
+1C0700380710380710380E10380E2070064030038014127E9119>I<07878009C86008D0
+3008E03011C03011C03801C03801C0380380700380700380700380600700E00700C00701
+800783000E86000E78000E00000E00001C00001C00001C00001C00003C0000FF0000151A
+819115>112 D<01C206260C1E181E381C301C701C701CE038E038E038E038E070E070E0
+7060F023E01CE000E000E001C001C001C001C003801FF00F1A7E9113>I<3C3C4E424687
+470F8E1E8E0C0E000E001C001C001C001C0038003800380038007000300010127E9113>
+I<01F0060C0C040C0E180C1C001F000FE00FF003F80038201C7018F018F010803060601F
+800F127E9113>I<00C001C001C001C00380038003800380FFF00700070007000E000E00
+0E000E001C001C001C001C00382038203840384018800F000C1A80990F>I<1C00C02701
+C04701C04701C08703808703800E03800E03801C07001C07001C07001C0700180E20180E
+20180E201C1E200C264007C38013127E9118>I<1C03270747074703870187010E010E01
+1C021C021C021C041804180818081C100C2007C010127E9114>I<1C00C0802701C1C047
+01C1C04701C0C087038040870380400E0380400E0380401C0700801C0700801C0700801C
+07010018060100180601001C0E02001C0F04000E13080003E1F0001A127E911E>I<0787
+8008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C0006380
+80F38080F38100E5810084C60078780013127E9118>I<1C00C02701C04701C04701C087
+03808703800E03800E03801C07001C07001C07001C0700180E00180E00180E001C1E000C
+3C0007DC00001C00001800603800F03000F06000E0C0004180003E0000121A7E9114>I<
+038107C10FF6081C10080010002000400080010002000400080410043C1867F843F081E0
+10127E9113>I E /FC 46 128 df<0000FE000003018000060180000C0380001C018000
+1C0000001800000038000000380000003800000038000003FFFE0000700E0000700E0000
+700E0000701C0000701C0000E01C0000E01C0000E0380000E0380000E0380001C0380001
+C0720001C0720001C0720001C07200038034000380180003800000030000000300000007
+000000C6000000E6000000CC000000780000001925819C17>12 D<0001FEE0000707E000
+0E07E0000C07C0001C01C0001C01C0001801C00038038000380380003803800038038003
+FFFF0000700700007007000070070000700E0000700E0000E00E0000E00E0000E01C0000
+E01C0000E01C0001C01C0001C0390001C0390001C0390001C0390003801A0003800C0003
+800000030000000300000007000000C6000000E6000000CC000000780000001B25819C18
+>I<183C3C3C0404080810204080060C779C0D>39 D<FFC0FFC0FFC00A037D890F>45
+D<3078F06005047C830D>I<0004000C00180038007807B8007000700070007000E000E0
+00E000E001C001C001C001C0038003800380038007000700070007000F00FFF00E1C7B9B
+15>49 D<003E000041800080C00100C00200E00440E00440E00840E00840E00840E01081
+C01081C01103800E0300000600000C000018000060000080000300000400000800401000
+802000802001007F070043FE0081FC00807800131D7D9B15>I<00001800000018000000
+38000000380000007800000078000000B800000138000001380000023C0000021C000004
+1C00000C1C0000081C0000101C0000101C0000201C0000201C00007FFC0000C01C000080
+1C0001001C0001001E0002000E0002000E0004000E000C000E001C001E00FF00FFC01A1D
+7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E00
+00801E0000801C0000803C0000803C000000780000007800000078000000F0000000F000
+0000F0000000F0000000F0000400F0000400F0000400F000080070000800700010003800
+2000180040000C0180000706000001F800001B1E7A9C1E>67 D<01FFFF00003C03C00038
+00E0003800E000380070003800700070007800700038007000380070007800E0007800E0
+007800E0007800E0007801C000F001C000F001C000F001C000E0038001E0038001C00380
+03C0038003800700070007000E0007001C00070038000E00E000FFFF80001D1C7E9B1F>
+I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020007008
+200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C0200001C020
+0003804080038000800380008003800100070001000700030007000200070006000E003C
+00FFFFFC001C1C7E9B1C>I<01FFFFF0003C00F000380030003800200038002000380020
+0070002000700020007008200070080000E0100000E0100000E0300000FFF00001C02000
+01C0200001C0200001C02000038040000380000003800000038000000700000007000000
+07000000070000000F000000FFF000001C1C7E9B1B>I<0003F020001E0C60003002E000
+E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C00000078
+0000007800000078000000F0000000F0000000F001FF80F0001E00F0001C00F0001C00F0
+001C00F0001C00700038007000380038003800180078000C0090000707100001F800001B
+1E7A9C20>I<01FFC3FF80003C0078000038007000003800700000380070000038007000
+007000E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000
+FFFFC00001C003800001C003800001C003800001C0038000038007000003800700000380
+070000038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FF
+C000211C7E9B1F>I<03FF0078007000700070007000E000E000E000E001C001C001C001
+C0038003800380038007000700070007000E000E000E000E001E00FFC0101C7D9B10>I<
+01FFC0003C0000380000380000380000380000700000700000700000700000E00000E000
+00E00000E00001C00001C00001C00001C00003800203800203800203800407000407000C
+0700180700380E00F0FFFFF0171C7E9B1A>76 D<01FE0001FE003E0001E0002E0003C000
+2E0005C0002E0005C0002E0009C0004E000B80004E001380004E00238000470023800087
+0047000087004700008700870000870107000107010E000107020E000107040E00010704
+0E000207081C000203881C000203901C000203A01C000403A038000403C038000403C038
+000C038038001C03007800FF8307FF00271C7E9B25>I<000F8400304C00403C00801801
+001803001803001806001006001006000007000007000003E00003FC0001FF00007F8000
+07C00001C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC
+180083E000161E7D9C17>83 D<1FFFFFC01C0701C0300E00C0200E0080600E0080400E00
+80401C0080801C0080801C0080001C000000380000003800000038000000380000007000
+0000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C000
+0001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF03FE00F0007000E000600
+0E0004000E0004000E0004001C0008001C0008001C0008001C0008003800100038001000
+380010003800100070002000700020007000200070002000E0004000E0004000E0004000
+E0008000E0008000E00100006002000060040000300800001830000007C000001B1D789B
+1F>I<FF83FF07F03C007001C038007001803800F001003800F001003801700200380170
+040038027004003802700800380470080038047010003808701000380870200038107020
+00383070400038207040001C407080001C407080001C807100001C807100001D00720000
+1D007200001E007400001E007400001C003800001C003800001800300000180020000010
+00200000241D779B29>87 D<01E307170C0F180F380E300E700E700EE01CE01CE01CE01C
+E039E039E0396079319A1E0C10127C9115>97 D<3F00070007000E000E000E000E001C00
+1C001C001C0039E03A183C0C380C700C700E700E700EE01CE01CE01CE018E038E030E060
+60C031801E000F1D7C9C13>I<00F803040E041C0E181C300070007000E000E000E000E0
+00E000E0046008601030600F800F127C9113>I<0007E00000E00000E00001C00001C000
+01C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E0070
+0E00700E00E01C00E01C00E01C00E01C00E03900E03900E03900607900319A001E0C0013
+1D7C9C15>I<00F807040C0418023804300470087FF0E000E000E000E000E00060046008
+301030600F800F127C9113>I<0003C0000670000C70001C60001C00001C000038000038
+0000380000380000380003FF8000700000700000700000700000700000E00000E00000E0
+0000E00000E00001C00001C00001C00001C00001C0000380000380000380000300000300
+00070000C60000E60000CC00007800001425819C0D>I<0078C001C5C00303C00603C00E
+03800C03801C03801C0380380700380700380700380700380E00380E00380E00181E000C
+7C00079C00001C00001C00003800003800C03000E07000C1C0007F0000121A7E9113>I<
+0FC00001C00001C0000380000380000380000380000700000700000700000700000E3E00
+0EC3000F03800E03801E03801C03801C03801C0380380700380700380700380E00700E40
+700E40701C40701C80E00C80600700121D7E9C15>I<0180038001000000000000000000
+0000000000001C002600470047008E008E000E001C001C001C0038003800710071007100
+720072003C00091C7C9B0D>I<0FC00001C00001C0000380000380000380000380000700
+000700000700000700000E07800E08800E11C00E21C01C41801C80001D00001E00003FC0
+0038E000387000387000707100707100707100707200E03200601C00121D7E9C13>107
+D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038
+0038007000700070007000E200E200E200E40064003800091D7D9C0B>I<1C1E07802663
+18C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C07
+01C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122>
+I<383E004CC3004D03804E03809E03809C03801C03801C0380380700380700380700380E
+00700E40700E40701C40701C80E00C8060070012127C9117>I<00F800030C000E06001C
+0300180300300300700380700380E00700E00700E00700E00E00E00E00E01C0060180060
+300030E0000F800011127C9115>I<03878004C86004D03004E03009C03009C03801C038
+01C0380380700380700380700380600700E00700C00701800783000E86000E78000E0000
+0E00001C00001C00001C00001C0000380000FF0000151A809115>I<01E107130C0F180F
+380E300E700E700EE01CE01CE01CE01CE038E038E038607831F01E700070007000E000E0
+00E000E001C00FF8101A7C9113>I<1C3C2642468747078E068E000E000E001C001C001C
+001C0038003800380038007000300010127C9112>I<01F006080C080C1C18181C001F00
+1FC00FF007F0007800386030E030C030806060C01F000E127D9111>I<03000700070007
+000E000E000E000E00FFE01C001C001C0038003800380038007000700070007000E080E0
+80E100E100660038000B1A7C990E>I<1C01802E03804E03804E03808E07008E07001C07
+001C0700380E00380E00380E00380E00301C80301C80301C80383C80184D000F86001112
+7C9116>I<1C062E0E4E064E068E028E021C021C02380438043804380830083008301038
+2018400F800F127C9113>I<1E01832703874703874703838707018707010E07010E0701
+1C0E021C0E021C0E021C0E04180C04181C04181C081C1E080C263007C3C018127C911C>
+I<0387800CC8400870E01070E020E0C020E00000E00000E00001C00001C00001C00001C0
+00038100638100E38200C5820085840078780013127E9113>I<1C01802E03804E03804E
+03808E07008E07001C07001C0700380E00380E00380E00380E00301C00301C00301C0038
+3C001878000FB800003800003000007000E06000E0C0008180004300003C0000111A7C91
+14>I<70E0F1E0F1E060C00B04759C15>127 D E /FD 6 117 df<0001FC0080000E0380
+800038004180006000218001C00013800380000B80070000078006000007800E00000380
+1C000003801C0000018038000001803800000180780000008078000000807000000080F0
+00000000F000000000F000000000F000000000F000000000F000000000F000000000F000
+000000F000000000F0000000007000000000780000008078000000803800000080380000
+00801C000001001C000001000E0000010006000002000700000200038000040001C00008
+0000600010000038006000000E0380000001FC0000212A7DA827>67
+D<00FC000307800E01C01C00E01800F0380070780070700078700078F00038FFFFF8F000
+00F00000F00000F00000F000007000007800007800083800081C00100C00200600400381
+8000FE0015197E9818>101 D<0E0FC000FE3070001E4038000E8038000F001C000F001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C001F003E
+00FFE1FFC01A197E981E>110 D<00FE000383800600C00C006018003038003878003C70
+001C70001CF0001EF0001EF0001EF0001EF0001EF0001EF0001E70001C70001C78003C38
+00381C00701C00700600C003838000FE0017197E981B>I<07E100181B00200700400300
+C00300C00100C00100E00100F000007C00003FE0001FF80007FC00003E00000F00800380
+800380800180C00180C00180E00100E00300D00200CC0C0083F00011197E9815>115
+D<0100000100000100000100000300000300000300000700000700000F00003F0000FFFF
+000700000700000700000700000700000700000700000700000700000700000700000700
+0007000007008007008007008007008007008007008007008003810003810001C200007C
+0011247FA315>I E /FE 9 117 df<FFFC00FFFF00F00F80F003C0F001E0F000F0F000F0
+F000F0F000F0F000F0F000F0F001E0F003E0F00FC0FFFF80FFFE00F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000141D7C9C1B>
+80 D<03F8000FFE001C0F00380700700300600000E00000E00000E00000E00000F00000
+7800007F00003FE0001FFC0007FE0001FF00001F800007800003C00003C00001C00001C0
+0001C00001C0C00180E00380F007007C0E001FFC0007F000121F7E9D17>83
+D<03F00FFC1FFE3C0E78027000E000E000E000E000E000E000700078023C0E1FFE0FFC03
+F00F127F9112>99 D<F0F0F0F00000000000000070707070707070707070707070707070
+7070041D7E9C0A>105 D<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E0
+01C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>
+111 D<E3E0EFF8FFFCF83EE01EE00EE007E007E007E007E007E00FE00EF01EF87CFFF8EF
+F0E3E0E000E000E000E000E000E000E000E000101A7D9115>I<E380E780EF80FC00F800
+F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114
+D<1FC03FF07FF0F030E000E000F0007F003FC01FE001F0003800388038F078FFF07FE01F
+C00D127F9110>I<1C001C001C001C001C001C00FFE0FFE01C001C001C001C001C001C00
+1C001C001C001C001C001C001C201FF00FF007C00C187F970F>I
+E /FF 85 128 df<FFFFF00F00F00F00300F00100F00100F00180F00080F00080F00080F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F8000FFF800151C7E9B1A>0
+D<00030000000300000007800000078000000FC000000BC0000013E0000011E0000021F0
+000020F0000040F8000040780000807C0000803C0001003E0001001E0002001F0002000F
+0004000F8004000780080007C0080003C0100001E0300001F0200000F0600000F87FFFFF
+F8FFFFFFFCFFFFFFFC1E1D7E9C23>I<007E1F0001C1B1800303E3C00703C3C00E03C180
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0007F87FC001A1D809C18>11
+D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFF
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F
+CFF8151D809C17>I<3C42818181423C0807759D1F>23 D<60F0F0F0F0F0F0F060606060
+606060606060606060000000000060F0F060041E7C9D0C>33 D<6060F0F0F8F868680808
+08080808101010102020404080800D0C7F9C15>I<60F0F8680808081010204080050C7C
+9C0C>39 D<00800100020006000C000C00180018003000300030006000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600060003000300030
+00180018000C000C000600020001000080092A7C9E10>I<800040002000300018001800
+0C000C000600060006000300030003000300038003800380038003800380038003800380
+03800380038003000300030003000600060006000C000C00180018003000200040008000
+092A7E9E10>I<0006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C830C
+>I<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<03C00C301818300C300C700E60
+066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C300C18180C3007E0101D7E9B15>48 D<010007003F00C7000700070007000700070007
+0007000700070007000700070007000700070007000700070007000700070007000700FF
+F80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C
+001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07
+E01830201C201C781E780E781E381E001C001C00180030006007C00030001C001C000E00
+0F000F700FF80FF80FF80FF00E401C201C183007C0101D7E9B15>I<000C00000C00001C
+00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C
+00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C
+0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02C3030
+18301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E
+9B15>I<00F0030C04040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006
+E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<400000
+7FFF807FFF007FFF00400200800400800400800800001000001000002000006000004000
+00C00000C00001C000018000018000038000038000038000038000078000078000078000
+078000078000078000030000111D7E9B15>I<03E00C301008200C200660066006700670
+067C0C3E183FB01FE007F007F818FC307E601E600FC007C003C003C003C0036002600430
+0C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007
+E0076007700F300F18170C2707C700060006000E300C780C78187018203010C00F80101D
+7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F060000000
+0000000000000060F0F0701010101020204080041A7C910C>I<FFFFFFE0FFFFFFE00000
+000000000000000000000000000000000000000000000000000000000000FFFFFFE0FFFF
+FFE01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080
+01800100010001000100010001000000000000000000000003000780078003000F1D7E9C
+14>63 D<000600000006000000060000000F0000000F0000000F00000017800000178000
+0037C0000023C0000023C0000043E0000041E0000041E0000080F0000080F0000080F000
+010078000100780001FFF80002003C0002003C0002003C0004001E0004001E000C001F00
+0C000F001E001F00FF00FFF01C1D7F9C1F>65 D<FFFFC0000F0078000F003C000F001E00
+0F000E000F000F000F000F000F000F000F000F000F000E000F001E000F003C000F00F800
+0FFFF0000F003C000F001E000F000F000F0007000F0007800F0007800F0007800F000780
+0F0007800F000F000F000F000F001E000F007800FFFFE000191C7F9B1D>I<001F808000
+E0618001801980070007800E0003801C0003801C00018038000180780000807800008070
+000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000070
+0000807800008078000080380000801C0001001C0001000E000200070004000180080000
+E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E000F0007000F00
+07000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F00
+01E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F00
+07000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00
+040F00040F00060F00020F00020F01020F01000F01000F01000F03000FFF000F03000F01
+000F01000F01000F01010F00010F00020F00020F00020F00060F00060F000C0F003CFFFF
+FC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F01040F
+01000F01000F01000F03000FFF000F03000F01000F01000F01000F01000F00000F00000F
+00000F00000F00000F00000F00000F0000FFF800161C7E9B1B>I<001F808000E0618001
+801980070007800E0003801C0003801C00018038000180780000807800008070000080F0
+000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078
+00078078000780380007801C0007801C0007800E00078007000B800180118000E0608000
+1F80001C1E7E9C21>I<FFF0FFF00F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000FFFFF000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F00FFF0FFF01C1C7F9B1F>I<FFF00F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F00FFF00C1C7F9B0F>I<07FF80007C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00703C00F83C00F83C00F8380070780040700030E0000F8000111D7F9B15>I<FFF8
+000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00
+300F00700F01F0FFFFF0151C7E9B1A>76 D<FF8000FF800F8000F8000F8000F8000BC001
+78000BC00178000BC001780009E002780009E002780008F004780008F004780008F00478
+00087808780008780878000878087800083C107800083C107800083C107800081E207800
+081E207800081E207800080F407800080F40780008078078000807807800080780780008
+030078001C03007800FF8307FF80211C7E9B26>I<FF001FF00F8003800FC001000BC001
+0009E0010008F0010008F0010008780100083C0100083E0100081E0100080F0100080F81
+00080781000803C1000801E1000801F1000800F1000800790008007D0008003D0008001F
+0008001F0008000F0008000700080003001C000300FF8001001C1C7F9B1F>I<003F8000
+00E0E0000380380007001C000E000E001C0007003C00078038000380780003C0780003C0
+700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0
+700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800
+00E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E
+0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<FFFF
+00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F00
+1C000F003C000F0078000F01E0000FFF00000F01E0000F0070000F0078000F003C000F00
+3C000F003C000F003C000F003C000F003C000F003C100F003C100F001C100F001C10FFF0
+0E20000003C01C1D7E9B1F>82 D<07E0801C1980300580300380600180E00180E00080E0
+0080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C000
+03C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C
+17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F002080
+0F0020000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+1F800003FFFC001B1C7F9B1E>I<FFF01FF00F0003800F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F000100070002000780
+02000380040001C0040000E0180000706000000F80001C1D7F9B1F>I<FFE00FF01F0003
+C01F0001800F0001000F000100078002000780020007C0020003C0040003C0040003E00C
+0001E0080001E0080000F0100000F0100000F810000078200000782000003C4000003C40
+00003C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600
+001C1D7F9B1F>I<FFE1FFC0FF1F003E003C1E003C00180F001E00100F001E00100F001E
+001007801F002007801F002007801F002003C027804003C027804003C027804001E043C0
+8001E043C08001E043C08000F081E10000F081E10000F081E10000F900F300007900F200
+007900F200007E007E00003E007C00003E007C00003C003C00001C003800001C00380000
+180018000008001000281D7F9B2B>I<FFF07FC00FC01E0007800C0007C0080003C01000
+01E0200001F0200000F0400000788000007C8000003D0000003E0000001F0000000F0000
+000F8000000F80000013C0000023E0000021E0000040F0000080F8000080780001007C00
+02003E0002001E0006001F001F001F80FF807FF01C1C7F9B1F>I<FFF003FC0F8001E007
+8000C007C0008003C0010003E0030001E0020000F0040000F8040000780800007C180000
+3C1000003E2000001F2000000F4000000FC0000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000007FF8001E1C809B1F
+>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0FEFE07297C9E0C>91 D<08081010202040404040808080808080B0B0F8F878
+7830300D0C7A9C15>I<FEFE060606060606060606060606060606060606060606060606
+06060606060606060606060606FEFE0729809E0C>I<E0E0E0E003047C9C0C>95
+D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C
+00E01C40E01C40E01C40603C40304E801F870012127E9115>97 D<FC00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87001E01801C00C0
+1C00E01C00601C00701C00701C00701C00701C00701C00701C00601C00E01C00C01E0180
+19070010FC00141D7F9C17>I<03F80C0C181E301E700C6000E000E000E000E000E000E0
+0060007002300218040C1803E00F127F9112>I<001F8000038000038000038000038000
+038000038000038000038000038000038003F3800E0B80180780300380700380600380E0
+0380E00380E00380E00380E00380E003806003807003803003801807800E1B8003E3F014
+1D7F9C17>I<07E00C301818300C700E6006E006FFFEE000E000E000E000600070023002
+18040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FF
+E00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F
+1D809C0D>I<00038007C4C01C78C0383880301800701C00701C00701C00701C00301800
+3838001C700027C0002000002000003000003FF8001FFF001FFF802003806001C0C000C0
+C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00
+001C00001C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+80FF9FF0141D7F9C17>I<18003C003C0018000000000000000000000000000000FC001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F
+9C0C>I<00C001E001E000C0000000000000000000000000000007E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0
+F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C00001C0FE01C07801C06001C0C001C10001C20001C40001CE0001DE0
+001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C8388
+38001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C
+001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014
+127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0
+E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D87
+001E01801C01C01C00E01C00E01C00701C00701C00701C00701C00701C00701C00E01C00
+E01C01C01E01801D07001CFC001C00001C00001C00001C00001C00001C00001C0000FF80
+00141A7F9117>I<03E0800E1980180580380780700380700380E00380E00380E00380E0
+0380E00380E003807003807003803807801807800E1B8003E38000038000038000038000
+0380000380000380000380001FF0141A7F9116>I<FCE01D381E781E781C301C001C001C
+001C001C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F9020704030C010
+C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04
+000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C
+101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E1B
+8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E02000F060007040007
+040003880003880003C80001D00001D00000E00000E00000E00000400013127F9116>I<
+FF3FC7E03C0703C01C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400
+0711C4000720C40003A0E80003A0E80003C0680001C0700001C070000180300000802000
+1B127F911E>I<FF0FE01E07001C06000E040007080003900003B00001E00000E00000F0
+0001F000013800021C00041C000C0E001807003C0780FE1FF014127F9116>I<FF07E03C
+03801C01001C01000E02000E02000F060007040007040003880003880003C80001D00001
+D00000E00000E00000E000004000004000008000008000F08000F10000F3000066000038
+0000131A7F9116>I<7FFC70386038407040F040E041C003C0038007000F040E041C043C
+0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<1C043F0843F080E00E047D
+9B15>126 D<6060F0F0F0F060600C047C9C15>I E /FG 70 126
+df<038700038700038700038700038700038700FFFFE0FFFFE07FFFE0070E00070E0007
+0E000E1C000E1C000E1C000E1C007FFFE0FFFFE0FFFFE01C38001C38001C38001C38001C
+38001C380013197F9816>35 D<00E001E0038007000E001C001C00380038007000700070
+00E000E000E000E000E000E000E000E000E000700070007000380038001C001C000E0007
+00038001E000E00B217A9C16>40 D<C000E000700038001C000E000E0007000700038003
+80038001C001C001C001C001C001C001C001C001C0038003800380070007000E000E001C
+0038007000E000C0000A217B9C16>I<0380038003800380E38EF39EFFFE3FF80FE00FE0
+3FF8FFFEF39EE38E03800380038003800F127D9516>I<00E00000E00000E00000E00000
+E00000E00000E00000E000FFFFE0FFFFE0FFFFE000E00000E00000E00000E00000E00000
+E00000E00000E00013137F9516>I<387C7E7E3E0E1E1C78F060070B798416>I<FFFF80FF
+FF80FFFF8011037E8D16>I<70F8F8F8700505788416>I<00018000038000038000070000
+0700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00001
+C0000380000380000700000700000E00000E00001C00001C000038000038000070000070
+0000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E3C00380E00780F00
+700700700700E00380E00380E00380E00380E00380E00380E00380E00380F00780700700
+700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<0300070007000F00
+1F00FF00FF00E70007000700070007000700070007000700070007000700070007000700
+FFF8FFF8FFF80D197B9816>I<07E0001FF8003FFC00783E00E00700F00780F003806003
+80000380000380000700000700000E00001C0000380000700000E00001C0000380000F00
+001E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E0078
+0700300700000700000700000E00003E0007FC0007F00007FC00001E0000070000030000
+0380000380600380F00380E00700781E003FFC001FF80007E00011197E9816>I<007C00
+00FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C00381C00781C00
+F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC001FFC001FFC0
+13197F9816>I<3FFE007FFE007FFE007000007000007000007000007000007000007000
+0077F0007FFC007FFE00780F00300700000380000380600380F00380F00380E00700781E
+003FFC001FF80007E00011197E9816>I<70F8F8F870000000000000000070F8F8F87005
+12789116>58 D<387C7C7C38000000000000000038787C7C3C1C1C3870F0400618799116
+>I<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC
+00003E00000F800007C00001F00000F800003E00001F8000078000018011157E9616>I<
+FFFFE0FFFFE07FFFE00000000000000000000000000000007FFFE0FFFFE0FFFFE0130B7F
+9116>I<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F800007
+80001F80003E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616
+>I<00F80003FC0007FE000F07001C3B8038FF8079FF8073C7C07383C0E701C0E701C0E7
+01C0E701C0E701C0E701C0E701C073838073C78079FF0038FE001C38000F03C007FFC003
+FF0000FC0012197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B8
+00031800071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07
+001C07001C07007E0FC0FF1FE07E0FC013197F9816>I<7FF800FFFE007FFF001C07001C
+07801C03801C03801C03801C03801C07001FFF001FFE001FFE001C1F001C03801C03C01C
+01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<7FF800
+FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF800
+1319809816>68 D<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C
+1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C
+00E07FFFE0FFFFE07FFFE013197F9816>I<7FFFE0FFFFE07FFFE01C00E01C00E01C00E0
+1C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C0000
+1C00001C00001C00001C00007F8000FFC0007F800013197F9816>I<01F18007FB800FFF
+801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E01FC0E01F
+E0E01FC0F003807003807007803807803C07801E0F800FFF8007FB8001F38013197F9816
+>I<7FFCFFFE7FFC03800380038003800380038003800380038003800380038003800380
+038003800380038003807FFCFFFE7FFC0F197D9816>73 D<FF8000FFC000FF80001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>76
+D<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B3
+8039B38039B38039F38038E38038E380380380380380380380380380380380FE0FE0FE0F
+E0FE0FE013197F9816>I<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01C
+E1C01CE1C01C61C01C71C01C71C01C71C01C31C01C39C01C39C01C19C01C1DC01C0DC01C
+0DC01C0DC07F07C0FF87C07F03C01519809816>I<1FFC003FFE007FFF00780F00F00780
+E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380
+E00380E00380F00780F00780780F007FFF003FFE001FFC0011197E9816>I<7FF800FFFE
+007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE
+001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80007F00001219
+7F9816>I<7FF000FFFC007FFE001C0F001C07801C03801C03801C03801C03801C07801C
+0F001FFE001FFC001FFE001C0E001C07001C07001C07001C07001C07101C07381C07387F
+03F0FF83F07F01E01519809816>82 D<07E3001FFF003FFF00781F00F00700E00700E007
+00E00000F000007800003F80001FF00007FC0000FE00000F000007000003800003806003
+80E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0
+E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC0013197F9816>I<
+7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE00
+00F8001519809816>I<FE0FE0FE0FE0FE0FE03803803C07801C07001C07001C07001E0F
+000E0E000E0E000E0E000E0E00071C00071C00071C00071C0003180003B80003B80003B8
+0001B00001F00001F00000E00013197F9816>I<7FFF80FFFF80FFFF80E00700E00F00E0
+1E00E01C00003C0000780000700000F00001E00001C00003C0000780000700000F00001E
+03801C03803C0380780380700380FFFF80FFFF80FFFF8011197E9816>90
+D<C00000E00000E000007000007000003800003800001C00001C00000E00000E00000700
+0007000003800003800001C00001C00000E00000E000007000007000003800003800001C
+00001C00000E00000E0000070000070000038000038000018011207E9C16>92
+D<03000F803FE0FDF8F07840100D067C9816>94 D<FFFF80FFFF80FFFF8011037E7E16>
+I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E
+00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<FC0000FC0000FC0000
+1C00001C00001C00001C00001C7C001DFE001FFF001F07801E03C01C01C01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF001DFE000C780013197F9816>
+I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803
+F010127D9116>I<003F00003F00003F0000070000070000070000070003C7000FF7001F
+FF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00780F003C
+1F001FFFE00FF7E007C7E013197F9816>I<03F0000FFC001FFE003C0F00780700700380
+E00380FFFF80FFFF80FFFF80E00000E000007003807803803E07801FFF0007FE0001F800
+11127E9116>I<001E00007F0001FF8001C7800383000380000380007FFF00FFFF00FFFF
+000380000380000380000380000380000380000380000380000380000380000380000380
+007FFC00FFFE007FFC0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E0038
+0E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF8070
+03C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<
+FC0000FC0000FC00001C00001C00001C00001C00001C78001DFC001FFE001F0F001E0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0
+FF8FE013197F9816>I<03000780078003000000000000000000FF80FF80FF8003800380
+0380038003800380038003800380038003800380FFFCFFFEFFFC0F1A7C9916>I<003000
+780078003000000000000000000FF81FF80FF80038003800380038003800380038003800
+3800380038003800380038003800380038003800386070F0F0FFE07FC03F800D237E9916
+>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E
+1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF
+CFF07F87F01419809816>I<7FC000FFC0007FC00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C0007FFF00FFFF807FFF0011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78
+E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7C
+F8FE7CF81512809116>I<FC7800FDFC00FFFE001F0F001E07001C07001C07001C07001C
+07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0FF8FE013127F9116>I<
+03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780
+700700780F003C1E001FFC000FF80003E00011127E9116>I<FC7C00FDFE00FFFF001F07
+801E03C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF
+001DFE001C78001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000131B
+7F9116>I<03E3800FF3801FFB803E0F80780780700780E00380E00380E00380E00380E0
+0380E003807007807807803C1F801FFB800FF38003E38000038000038000038000038000
+0380000380001FF0003FF8001FF0151B7F9116>I<7F0FC0FF3FE07F7FE007F04007C000
+0780000780000700000700000700000700000700000700000700000700007FFC00FFFC00
+7FFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00E
+F00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FF
+FF00FFFF0007000007000007000007000007000007000007000007010007038007038007
+038007870003FE0001FC0000F80011177F9616>I<FC3F00FC3F00FC3F001C07001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F001FFFE00FF7E0
+07C7E013127F9116>I<7F1FC0FF9FE07F1FC01C07001C07000E0E000E0E000E0E00071C
+00071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>I<FF
+1FE0FF1FE0FF1FE038038038038038038038038039F38039F38019F30019B30019B30019
+B3001DB7001D17001F1F000F1E000E0E0013127F9116>I<7F1FC07F3FC07F1FC00F1E00
+073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0
+FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E
+00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E0
+0000E00001C00079C0007BC0007F80007F00003C0000131B7F9116>I<001F80007F8000
+FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C0007F
+8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001E00000FF80007F80001F8011207E9C16>123 D<E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>I<7C0000FF0000FF
+800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000
+FF00007F80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00003C000FF8000FF00007C000011207E9C16>I E /FH
+52 128 df<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000
+000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C007FE1FF807FE1FF80191D809C1B>12 D<003FFC0001F07C0003C07C0007C07C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C00FFFFFC00FFFFFC
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C007FF3FF807FF3FF80191D809C1B>I<
+78FCFCFCFC7806067D850D>46 D<03F8000F1E001C07003C07803803807803C07803C078
+03C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
+03E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>48
+D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E0
+0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
+0003E0007FFF807FFF80111B7D9A18>I<78FCFCFCFC7800000000000078FCFCFCFC7806
+127D910D>58 D<00038000000380000007C0000007C0000007C000000FE000000FE00000
+1FF000001BF000003BF8000031F8000031F8000060FC000060FC0000E0FE0000C07E0000
+C07E0001803F0001FFFF0003FFFF8003001F8007001FC006000FC006000FC00C0007E00C
+0007E0FF803FFEFF803FFE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00F
+C007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000F
+FFFE000FC00F800FC007C00FC003E00FC003E00FC003F00FC003F00FC003F00FC003F00F
+C003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FF
+F8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000607C000060FC00
+0000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C0000607E00
+00603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE0001B1C
+7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000
+FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC000
+7E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01F
+C0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC00300
+0FC003800FC003800FC0C1800FC0C1800FC0C1800FC1C0000FC3C0000FFFC0000FFFC000
+0FC3C0000FC1C0000FC0C0000FC0C0600FC0C0600FC000E00FC000C00FC000C00FC001C0
+0FC001C00FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000F
+C01F000FC007000FC003000FC003800FC003800FC001800FC0C1800FC0C1800FC0C0000F
+C1C0000FC3C0000FFFC0000FFFC0000FC3C0000FC1C0000FC0C0000FC0C0000FC0C0000F
+C000000FC000000FC000000FC000000FC000000FC00000FFFE0000FFFE0000191C7E9B1E
+>I<000FF008007FFE3801FC07F807E001F80F8000781F0000783F0000383E0000387E00
+00187C000018FC000000FC000000FC000000FC000000FC000000FC000000FC007FFFFC00
+7FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E001F801FC07F8007F
+FE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFCFFFC0FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC0FFFCFFFC0E1C7E9B12>I<07FFF007FFF0001F80001F80001F80001F80001F80
+001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80
+001F80301F80781F80FC1F80FC1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFC
+07FF00FFFC07FF000FC000E0000FC001C0000FC00380000FC00600000FC00C00000FC038
+00000FC07000000FC0E000000FC1C000000FC3C000000FC7E000000FCFF000000FFBF000
+000FF1F800000FE0FC00000FC0FE00000FC07E00000FC03F00000FC01F80000FC01FC000
+0FC00FC0000FC007E0000FC007F0000FC003F800FFFC1FFF80FFFC1FFF80211C7E9B25>
+I<FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0070FC0060FC0
+0E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>I<FFC00003FFFFE00007FF0FE00007F00D
+F0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E
+0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C3
+01F00C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801
+F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003FFFFE003FF0FF000300F
+F800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0FE0300C07F0300C
+03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C000FF00C
+0007F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<FFFF
+F800FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC0
+00000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC
+00001B1C7E9B21>80 D<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000F
+C007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC0
+3E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F
+80000FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C3
+00FFFC01FE00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F0
+0060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F000
+00F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFF
+E07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F80
+30001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE0007FFFE
+001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C0
+00FC0780007FFE00000FF800201C7E9B25>I<FFF87FFE0FFCFFF87FFE0FFC0FC007E000
+C00FC007F000C00FE003F001C007E003F0018007E007F8018007F007F8038003F00FFC03
+0003F00CFC030001F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC303F0C
+0000FE303F1C00007E703F9800007E601F9800003F601FB000003FE01FF000003FC00FF0
+00001FC00FE000001F8007E000001F8007E000000F8007C000000F0003C0000007000380
+000007000380002E1C7F9B31>87 D<7FFE1FFE007FFE1FFE0007F001800003F803800001
+F807000001FC06000000FE0C0000007F1C0000003F380000003FB00000001FE00000000F
+E00000000FE000000007F000000003F800000007F80000000FFC0000000CFE000000187E
+000000387F000000703F800000601FC00000C01FC00001C00FE000038007F000030003F0
+00FFF01FFF80FFF01FFF80211C7F9B24>I<0FF8001C1E003E0F803E07803E07C01C07C0
+0007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F8
+15127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F
+003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E00
+1C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F80000780000780180
+3C01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001
+F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801
+F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D
+7E9C1B>I<03FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F8
+0000F800007800007800603C00601E00C00F038001FC0013127F9116>I<007F0001E380
+03C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F8000
+0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000
+0F80007FF0007FF000121D809C0F>I<03F0F00E1F383C0F383807307807807807807807
+807807803807003C0F001E1C0033F0003000003000003000003FFF003FFFC01FFFE01FFF
+F07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF
+00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F
+40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F81F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000
+0000000000007F007F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F00FFC0FFC00A1E7F9D0E>I<007800FC00FC00FC00FC00780000000000000000000000
+0003FC03FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00
+7C007C007C707CF87CF878F8F070E01F800E26839D0F>I<FF0000FF00001F00001F0000
+1F00001F00001F00001F00001F00001F00001F00001F03FC1F03FC1F01C01F03001F0E00
+1F1C001F38001F78001FFC001FBE001F1F001F0F001F0F801F07C01F03E01F01E0FFE7FE
+FFE7FE171D7F9C19>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C
+0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F8
+07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
+C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40
+F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F8
+00F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015
+127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E
+1F003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00001F00001F00001F0000
+1F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE47001E8F801E8F801E8F801F07
+001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFE000FFE0
+0011127F9114>114 D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01C
+C01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F003FFCFF
+FC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F
+9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F
+00601F80600F80C00F80C007C18007C18003E30003E30003F70001F60001FE0000FC0000
+FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F03
+E0300F87F0600F86F0600FC6F8E007CC78C007CC78C003FC7D8003F83D8003F83F8001F0
+1F0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7FC1F81C00F83
+8007C70003EE0001FC0001F80000F800007C0000FE0001DF00039F80070F800607C00C03
+E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F80600F80C00F80C007C18007
+C18003E30003E30003F70001F60001FE0000FC0000FC0000780000780000300000300000
+6000706000F8E000F8C000F980007300003E0000161A7F9119>I<38387C7CFC7EFC7E7C
+7C38380F067C9D18>127 D E /FI 21 122 df<1E003F007F80FFC0FFC0FFC0FFC07F80
+3F001E000A0A7B8915>46 D<7FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF07F803FE00FF0
+7E003FE003F07C003FE001F078003FE000F070003FE00070F0003FE00078F0003FE00078
+F0003FE00078E0003FE00038E0003FE00038E0003FE00038E0003FE00038E0003FE00038
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000FFFFFFF80000FFFFFFF80000FFFFFFF8002D2D7DAC34>
+84 D<01FFE000000FFFF800001F007E00003F803F00003FC01F80003FC01FC0003FC00F
+C0001F800FE0000F000FE00000000FE00000000FE00000000FE00000007FE000003FFFE0
+0001FFCFE00007F80FE0000FE00FE0001F800FE0003F000FE0007F000FE000FE000FE000
+FE000FE000FE000FE000FE000FE000FE001FE0007F001FE0003F0037F0001FC0E7FF800F
+FFC3FF8001FF00FF80211E7E9D24>97 D<0000003F0000000FFF0000000FFF0000000FFF
+000000007F000000007F000000007F000000007F000000007F000000007F000000007F00
+0000007F000000007F000000007F000000007F000000007F00000FF87F00007FFE7F0001
+FC0F7F0003F003FF0007E000FF000FC0007F001F80007F003F80007F003F80007F007F00
+007F007F00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF0000
+7F00FF00007F00FF00007F007F00007F007F00007F007F00007F003F80007F001F80007F
+000FC000FF0007C001FF0003E003FF0001F80F7FF8007FFC7FF8000FF07FF8252E7EAD2A
+>100 D<001FF00000FFFC0001F83F0007E00F800FC007C01F8007E01F8003E03F8003F0
+7F0003F07F0001F87F0001F8FF0001F8FF0001F8FFFFFFF8FFFFFFF8FF000000FF000000
+FF000000FF0000007F0000007F0000007F0000003F8000381F8000380FC0007007C000E0
+03E001C001F80F80007FFF00000FF8001D1E7E9D22>I<003FC03E0001FFF9FF0003F0FF
+CF8007C03E1F800FC03F0F801F801F87001F801F80003F801FC0003F801FC0003F801FC0
+003F801FC0003F801FC0003F801FC0001F801F80001F801F80000FC03F000007C03E0000
+07F0FC00000FFFF800000C3FC000001C000000001C000000001C000000001E000000001F
+000000001FFFFE00000FFFFFC0000FFFFFF00007FFFFF80003FFFFFC001FFFFFFE003E00
+01FE007C00003F007800001F00F800001F00F800001F00F800001F00F800001F007C0000
+3E003E00007C001F0000F8000FE007F00003FFFFC000003FFC0000212C7E9D25>103
+D<03F0000000FFF0000000FFF0000000FFF000000007F000000007F000000007F0000000
+07F000000007F000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F01FC00007F07FF00007F1E0F80007F380FC0007F6007E0007FC
+007E0007FC007F0007F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+FFFF8FFFF8FFFF8FFFF8FFFF8FFFF8252E7DAD2A>I<07800FC01FE03FF03FF03FF03FF0
+1FE00FC00780000000000000000000000000000007E0FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE0FFFEFFFEFFFE0F2F7DAE14>I<07E0000000FFE0000000FFE0000000FFE00000000F
+E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
+0000000FE00000000FE00000000FE00000000FE00000000FE00FFF800FE00FFF800FE00F
+FF800FE001E0000FE003C0000FE00780000FE00F00000FE01E00000FE03C00000FE07000
+000FE1E000000FE3C000000FE7E000000FEFF000000FFFF800000FFBF800000FF1FC0000
+0FE0FE00000FC07E00000FC07F00000FC03F80000FC01FC0000FC01FC0000FC00FE0000F
+C007F0000FC003F0000FC003F800FFFC0FFFC0FFFC0FFFC0FFFC0FFFC0222E7DAD27>
+107 D<03E01FC001FC0000FFE07FF007FF0000FFE1E0F81E0F8000FFE380FC380FC00007
+E6007E6007E00007EC007EC007E00007EC007FC007F00007F8007F8007F00007F8007F80
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F000FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80391E7D9D3E>109
+D<03E01FC000FFE07FF000FFE1E0F800FFE380FC0007E6007E0007EC007E0007EC007F00
+07F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0
+007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00FFFF8FFFF8FFFF8F
+FFF8FFFF8FFFF8251E7D9D2A>I<001FF80000FFFF0003F81FC007E007E00FC003F01F80
+01F83F8001FC3F8001FC7F0000FE7F0000FE7F0000FEFF0000FFFF0000FFFF0000FFFF00
+00FFFF0000FFFF0000FFFF0000FFFF0000FF7F0000FE7F0000FE7F0000FE3F8001FC3F80
+01FC1F8001F80FC003F007E007E003F81FC000FFFF00001FF800201E7E9D25>I<03F07F
+8000FFF1FFF000FFF781FC00FFFE007E0007FC003F0007F8001F8007F0001FC007F0000F
+E007F0000FF007F0000FF007F00007F007F00007F807F00007F807F00007F807F00007F8
+07F00007F807F00007F807F00007F807F00007F807F00007F007F0000FF007F0000FE007
+F0000FE007F0001FC007F8001F8007FC003F0007FE007E0007F781FC0007F3FFF00007F0
+7F800007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F0000000FFFF800000FFFF800000FFFF800000252B7E9D
+2A>I<03E0FC00FFE1FF00FFE30F80FFE61F8007EC3FC007EC3FC007F83FC007F81F8007
+F80F0007F8000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F00000FFFFC000FFFFC000FFFFC0001A1E7E9D1F>114 D<01FF0C0FFFFC1E01FC38007C
+70003C70001CF0001CF0001CF8001CFE0000FFC0007FFE007FFFC03FFFF00FFFF807FFFC
+01FFFE000FFE0000FF60003FE0001FE0000FF0000FF0000FF8000EF8001EFE001CFF80F8
+E3FFE0C0FF80181E7E9D1D>I<00380000380000380000380000780000780000780000F8
+0000F80001F80003F80007F8001FFFFCFFFFFCFFFFFC03F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80E03F8
+0E03F80E03F80E03F80E03F80E03F80E01F81C00FC1C007C38003FF0000FE0172A7FA91D
+>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+07F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F000FF0007F000FF0003F001FF0001F0037F0000FC0E7FF8007F
+FC7FF8001FF07FF8251E7D9D2A>I<FFFC00FFC0FFFC00FFC0FFFC00FFC00FE0001C000F
+F0003C0007F000380007F000380003F800700003F800700003FC00F00001FC00E00001FE
+01E00000FE01C00000FE01C000007F038000007F038000003F870000003F870000003FCF
+0000001FCE0000001FFE0000000FFC0000000FFC00000007F800000007F800000007F800
+000003F000000003F000000001E000000001E00000221E7E9D27>I<FFFE1FFF81FFE0FF
+FE1FFF81FFE0FFFE1FFF81FFE007F001F8001E0007F001FC001C0007F000FC003C0003F8
+00FC00380003F801FE00380003FC01FE00780001FC01FE00700001FC03BF00700000FE03
+BF00E00000FE07BF80E00000FF071F81E000007F071F81C000007F0E0FC1C000003F8E0F
+C38000003F9E0FC38000003F9C07E78000001FDC07E70000001FFC07F70000001FF803FF
+0000000FF803FE0000000FF001FE00000007F001FC00000007F001FC00000007E000FC00
+000003E000F800000003C0007800000001C000700000331E7F9D36>I<FFFE03FFE0FFFE
+03FFE0FFFE03FFE007F800780003FC00F00001FC01E00000FE03C000007F03C000007F87
+8000003FCF0000001FDE0000000FFC00000007F800000007F800000003F800000001FC00
+000003FE00000007FF000000077F8000000F3F8000001E1FC000003C0FE00000780FF000
+00F007F80000E003F80001E001FC0003C000FE00FFF807FFF0FFF807FFF0FFF807FFF024
+1E7F9D27>I<7FFE007FE07FFE007FE07FFE007FE007F0000E0007F8001E0003F8001C00
+03F8001C0001FC00380001FC00380001FE00780000FE00700000FF00F000007F00E00000
+7F00E000003F81C000003F81C000001FC38000001FC38000001FE78000000FE70000000F
+FF00000007FE00000007FE00000003FC00000003FC00000003FC00000001F800000001F8
+00000000F000000000F000000000E000000000E000000001E000000001C000003803C000
+007C03800000FE07800000FE07000000FE0E000000FC1E000000787C0000003FF0000000
+0FC0000000232B7F9D27>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 56 1
+56 55 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y Fk(\\xunit=)p Fj(dimen)0
+106 y Fk(\\xunit+=)p Fj(dimen)0 172 y FF(Set)i(the)f(horizon)o(tal)g
+(units)g(for)g(the)g(co)q(ordinate)h(system)f(used)h(when)f(t)o(yp)q
+(esetting)h(mo)q(di\014cations)e(on)h(a)f(Figure)i(or)f(Graph.)42
+252 y Fx(\\xunit=5)o(mm)42 302 y(\\Graph{1)o(cm})o({5)o(mm})42
+352 y(\\Dot)18 b(\(0,.5\))f(\\Dot)h(\(1,.5\))f(\\Dot)h(\(2,.5\))42
+402 y(\\endGrap)o(h)1191 372 y
+gsave
+ 1191 372 a 1191 372 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+
+1191 372 a 1181 382 a Fw(\017)1191 372 y
+grestore
+ 1191 372 a 1250
+372 a
+gsave
+ 1250 372 a 1250 372 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1250 372 a 1240 382 a Fw(\017)1250
+372 y
+grestore
+ 1250 372 a 1309 372 a
+gsave
+ 1309 372 a 1309 372 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1309
+372 a 1299 382 a Fw(\017)1309 372 y
+grestore
+ 1309 372 a 0 568
+a Fk(\\ygrid=)p Fj(dimen)1531 b Fk(1cm)0 632 y(\\ygrid+=)p
+Fj(dimen)0 699 y FF(Set)14 b(the)h(default)f(distance)g(b)q(et)o(w)o
+(een)h(the)g(horizon)o(tal)e(gridlines)g(of)h(a)f(Diagram.)j(Sets)e
+FG(\\yscale=1)p FF(.)0 852 y Fk(\\yrange=)p Fj(inte)m(ger)1543
+b Fk(1)0 918 y FF(Set)15 b(the)h(v)o(ertical)e(units)h(for)g(the)g(co)q
+(ordinate)g(system)g(used)h(when)f(t)o(yp)q(esetting)h(mo)q
+(di\014cations)d(on)h(a)h(Figure)g(or)f(Graph)0 968 y(b)o(y)g(dividing)
+e(the)i(default)g(unit)g(b)o(y)f FC(inte)n(ger)p FF(.)18
+b(See)d FG(\\xrange)p FF(.)0 1122 y Fk(\\yscale=)p Fj(numb)m(er)1530
+b Fk(1)0 1188 y FF(Scale)14 b FG(\\ygrid)f FF(b)o(y)g
+FC(numb)n(er)p FF(.)18 b(See)d FG(\\xscale)p FF(.)0 1342
+y Fk(\\yunit=)p Fj(dimen)0 1406 y Fk(\\yunit+=)p Fj(dimen)0
+1473 y FF(Set)g(the)f(v)o(ertical)g(units)g(for)g(the)h(co)q(ordinate)f
+(system)g(used)h(when)g(t)o(yp)q(esetting)g(mo)q(di\014cations)d(on)i
+(a)g(Figure)g(or)g(Graph.)0 1522 y(See)h FG(\\xunit)p
+FF(.)954 2770 y(56)p eop
+%%Page: 57 2
+57 56 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y Fy(26.)52 b(Examples)0
+158 y FF(The)14 b FG(Dash)p FF(,)e FG(Dashto)f FF(and)j
+FG(Mono)e FF(cell)h(t)o(yp)q(es)h(in)f(some)f(of)h(these)h(examples)e
+(use)i(the)g FG(arrsy10)e FF(fon)o(t:)17 b(See)d Fw(x)q
+FF(14)e(and)h FG(\\arrsy)0 208 y FF(in)g Fw(x)q FF(25.)k(Also,)d
+FG(\\bb)f FF(in)o(v)o(ok)o(es)g(the)i(bbm)d(family)f(of)i(fon)o(ts.)-79
+299 y Fr(1)62 b Fx($$)-79 349 y Fr(2)g Fx(\\grid=.75c)o(m)-79
+399 y Fr(3)g Fx(\\Diagram)-79 448 y Fr(4)g Fx(A')176
+b(&)137 b(&)19 b(\\rTo)f(^{f'})g(&)137 b(&)19 b(B')529
+b(\\\\)-79 498 y Fr(5)278 b Fx(&)19 b(\\rdTo)f(<a)h(\\dh{2pt})o(&)e(&)
+137 b(&)176 b(&)19 b(\\rdTo)f(_b)215 b(\\\\)-79 548 y
+Fr(6)62 b Fx(\\dTo)18 b(<{g'})g(&)137 b(&)19 b(A)196
+b(&)137 b(&)19 b(\\dTo)f(<{h'})g(:{.25})-79 598 y Fr(7)886
+b Fx(\\rTo)18 b(^f)h(:{.25})e(\\br)-79 648 y Fr(8)1043
+b Fx(&)195 b(&)20 b(B)137 b(\\\\)-79 697 y Fr(9)1455
+b Fx(\\\\)-95 747 y Fr(10)61 b Fx(C')176 b(&)137 b(&)19
+b(\\rTo)f(^{k'})g(:{.75})f(\\dTo)h(<g)h(:{.25})e(\\br)-95
+797 y Fr(11)689 b Fx(&)137 b(&)19 b(D')117 b(&)195 b(&)20
+b(\\dTo)e(>h)h(\\\\)-95 847 y Fr(12)277 b Fx(&)19 b(\\rdTo)f(_c)h
+(\\dh{.5pt)o(}&&)134 b(&)176 b(&)19 b(\\rdTo)f(_d)215
+b(\\\\)-95 897 y Fr(13)277 b Fx(&)137 b(&)19 b(C)196
+b(&)137 b(&)19 b(\\rTo)f(^k)h(&)195 b(&)20 b(D)137 b(\\\\)-95
+946 y Fr(14)61 b Fx(\\endDiagra)o(m)-95 996 y Fr(15)g
+Fx($$)889 1135 y
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135 a 741
+1146 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)-21 b Fv(\021)889 1135 y
+grestore
+
+889 1135 a 889 1135 a
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135
+a 888 1123 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 888 1123 a 873 1117 a Fu(f)892 1105 y Ft(0)888
+1135 y
+grestore
+ 888 1135 a 800 1224 a
+gsave
+ 800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800
+1224 a 698 1234 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+h(\000)-19 b Fv(\021)800 1224 y
+grestore
+ 800 1224 a 800 1224 a
+gsave
+
+800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1224 a 800 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1236
+a 782 1249 a Fu(a)800 1224 y
+grestore
+ 800 1224 a 1154 1224 a
+gsave
+ 1154
+1224 a 1154 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1052 1234 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)1154
+1224 y
+grestore
+ 1154 1224 a 1154 1224 a
+gsave
+ 1154 1224 a 1154 1224
+a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1149 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1236 a 1134 1257 a Fu(b)1149
+1224 y
+grestore
+ 1149 1224 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 553 1323 a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)711
+1313 y
+grestore
+ 711 1313 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 705 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 705 1325 a 677 1335 a Fu(g)694 1323
+y Ft(0)705 1313 y
+grestore
+ 705 1313 a 1066 1313 a
+gsave
+ 1066 1313 a
+1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 907 1323 a Fw(\000)f(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)
+-16 b Fv(\021)1066 1313 y
+grestore
+ 1066 1313 a 1066 1313 a
+gsave
+ 1066
+1313 a 1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 983 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 983 1325 a
+952 1335 a Fu(h)971 1323 y Ft(0)983 1313 y
+grestore
+ 983 1313 a
+1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 889 1313
+a
+1 setgray
+ 889 1313 a 912 1323 306 21 v 1066 1313 a
+grestore
+ 1066 1313
+a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 912
+1323 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)1066 1313 y
+grestore
+
+1066 1313 a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066
+1313 a 989 1300 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 989 1300 a 979 1294 a Fu(f)989 1313
+y
+grestore
+ 989 1313 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 742 1500 a Fw(\000)-23 b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 961 1477 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 961 1477 a -15 w Fu(k)965 1465 y Ft(0)961
+1490 y
+grestore
+ 961 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889
+1490 a 711 1490 a
+1 setgray
+ 711 1490 a 730 1500 310 21 v 889 1490
+a
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 730 1500 a Fw(\000)-14 b(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 807 1502 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 807 1502 a 790 1513 a Fu(g)807 1490 y
+grestore
+ 807
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1084 1500 a Fw(\000)g(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)c Fv(\021)1243 1490 y
+grestore
+ 1243
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1239 1477 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 1239 1477 a 11 x Fu(h)1239 1490 y
+grestore
+ 1239
+1490 a 800 1578 a
+gsave
+ 800 1578 a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 698
+1589 a Fw(\000)-23 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-22 b Fv(\021)800 1578 y
+grestore
+ 800 1578 a 800 1578 a
+gsave
+ 800 1578
+a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 797 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 797 1591 a 782 1603
+a Fu(c)797 1578 y
+grestore
+ 797 1578 a 1154 1578 a
+gsave
+ 1154 1578 a
+1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1578 a 1052 1589 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)c Fv(\021)1154 1578
+y
+grestore
+ 1154 1578 a 1154 1578 a
+gsave
+ 1154 1578 a 1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154
+1578 a 1149 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1591 a 1132 1611 a Fu(d)1149
+1578 y
+grestore
+ 1149 1578 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 913 1677 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1066
+1667 y
+grestore
+ 1066 1667 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 1065 1654 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1065 1654 a -9 w Fu(k)1065
+1667 y
+grestore
+ 1065 1667 a 690 1146 a FB(A)721 1129 y Fs(0)1043
+1146 y FB(B)1076 1129 y Fs(0)873 1323 y FB(A)322 b(B)689
+1500 y(C)722 1483 y Fs(0)1042 1500 y FB(D)1077 1483 y
+Fs(0)872 1677 y FB(C)h(D)0 1852 y FH(G.)16 b(Bredon)p
+FF(,)11 b FC(Intr)n(o)n(duction)16 b(to)e(Comp)n(act)h(T)m(r)n
+(ansformation)f(Gr)n(oups)p FF(,)g(page)g(75.)-79 1944
+y Fr(1)62 b Fx($$)-79 1993 y Fr(2)g Fx(\\Dg)-79 2043
+y Fr(3)g Fx(F\\times)17 b(K\\times)g(U)98 b(&)19 b(\\rTo)f(^{\\rm)f
+(proj})97 b(&)215 b(&)19 b(K\\times)e(U)157 b(\\\\)-79
+2093 y Fr(4)62 b Fx(\\dTo)352 b(&)431 b(&)215 b(&)19
+b(\\dTo)f(>{\\rm)g(proj})g(\\\\)-79 2143 y Fr(5)62 b
+Fx(F\\times_K)16 b(\(K\\times)h(U\))i(&)g({})g(\\approx)d(F\\times)h(U)
+j(&)f(\\rTo)f(^{\\rm)g(proj}&)f(U)196 b(\\\\)-79 2193
+y Fr(6)62 b Fx(\\endDg)-79 2242 y Fr(7)g Fx($$)1012 2377
+y
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 885 2387 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-20 b Fv(\021)1012 2377 y
+grestore
+ 1012 2377 a 1012
+2377 a
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 1033 2364
+a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1033 2364 a 1003 2358 a Fr(pro)r(j)1033 2377 y
+grestore
+ 1033
+2377 a 774 2471 a
+gsave
+ 774 2471 a 774 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 774 2471 a 701
+2482 a Fw(\000)i(\000)-9 b(\000)g(\000)g(\000)-18 b Fv(\021)774
+2471 y
+grestore
+ 774 2471 a 1250 2471 a
+gsave
+ 1250 2471 a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1250 2471 a 1178 2482 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-16
+b Fv(\021)1250 2471 y
+grestore
+ 1250 2471 a 1250 2471 a
+gsave
+ 1250 2471
+a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1250 2471 a 1248 2459 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1248 2459 a 10
+x Fr(pro)r(j)1248 2471 y
+grestore
+ 1248 2471 a 1122 2566 a
+gsave
+ 1122
+2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1088 2576 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1122 2566 y
+grestore
+ 1122 2566
+a 1122 2566 a
+gsave
+ 1122 2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1157
+2553 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1157 2553 a 1127 2547 a Fr(pro)r(j)1157 2566 y
+grestore
+
+1157 2566 a 671 2387 a FB(F)15 b Fw(\002)10 b FB(K)i
+Fw(\002)d FB(U)318 b(K)12 b Fw(\002)e FB(U)639 2576 y(F)15
+b Fw(\002)713 2582 y Fu(K)754 2576 y FF(\()p FB(K)e Fw(\002)c
+FB(U)c FF(\))12 b Fw(\031)g FB(F)j Fw(\002)9 b FB(U)158
+b(U)954 2770 y FF(57)p eop
+%%Page: 58 3
+58 57 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\joined)17 b(\\let\\labe)o(lst)o(yle)o(\\t)o(ext)o(st)o
+(yle)-79 141 y Fr(3)62 b Fx(\\Graph{3cm)o(,2)o(}{3)o(cm)o(,4})-79
+191 y Fr(4)g Fx(\\Line)18 b(\(0,0\))f(\(0,4\))h(<{f\(z,s\)})-79
+241 y Fr(5)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,4\))h(^{H\(z,t\)})-79
+291 y Fr(6)62 b Fx(\\Line)18 b(\(0,0\))f(\(2,0\))h(_{*})-79
+340 y Fr(7)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,4\))-79
+390 y Fr(8)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,2\))h(_{\\;\\;H\(z,)o(0\))
+e(=)j(f\(z,1\)})e(\\ro)-79 440 y Fr(9)62 b Fx(\\endGraph)-95
+490 y Fr(10)f Fx(\\qquad\\qqu)o(ad)-95 540 y Fr(11)g
+Fx(H'\(z,t,s\))16 b(=)-95 589 y Fr(12)61 b Fx(\\cases{f\(z)o(,2)o(s/\()
+o(2-)o(t\)\))o(&)17 b(if)h($0\\le)g(2s\\le)g(2)h(-)g(t$\\cr)-95
+639 y Fr(13)198 b Fx(\\cr)-95 689 y Fr(14)g Fx(H\(z,2s)18
+b(-)h(2)g(+)g(t\)&)g(if)g($2)f(-)i(t\\le)e(2s\\le)f(2$\\cr})-95
+739 y Fr(15)61 b Fx($$)263 1012 y
+gsave
+ 263 1012 a 263 1012
+a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 82 1022 a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+-17 b(\000)263 1012 y
+grestore
+ 263 1012 a 263 1012 a
+gsave
+ 263 1012
+a 263 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 263 999 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 263 999 a 147 1009
+a FB(f)t FF(\()p FB(z)r(;)7 b(s)p FF(\))263 1012 y
+grestore
+ 263
+1012 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834 a 259 845
+a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-17 b(\000)440
+834 y
+grestore
+ 440 834 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834
+a 440 822 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 822 a 378 812 a FB(H)s FF(\()p FB(z)r(;)7
+b(t)p FF(\))440 834 y
+grestore
+ 440 834 a 440 1189 a
+gsave
+ 440 1189 a
+440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 259 1199 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)-17 b(\000)440 1189 y
+grestore
+ 440 1189 a
+440 1189 a
+gsave
+ 440 1189 a 440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 440 1201
+a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1201 a 430 1220 a Fw(\003)440 1189 y
+grestore
+ 440 1189 a
+617 1012 a
+gsave
+ 617 1012 a 617 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 617 1012 a 436 1022
+a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-16 b(\000)617
+1012 y
+grestore
+ 617 1012 a 440 923 a
+gsave
+ 440 923 a 440 923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923
+a 238 933 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)
+-19 b(\000)440 923 y
+grestore
+ 440 923 a 440 923 a
+gsave
+ 440 923 a 440
+923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923 a 300 967 a FB(H)s FF(\()p FB(z)r(;)7 b
+FF(0\))k(=)h FB(f)t FF(\()p FB(z)r(;)7 b FF(1\))440 923
+y
+grestore
+ 440 923 a 784 1022 a FB(H)822 1005 y Fs(0)833 1022
+y FF(\()p FB(z)r(;)g(t;)g(s)p FF(\))k(=)1013 937 y Fq(8)1013
+974 y(<)1013 1049 y(:)1057 972 y FB(f)t FF(\()p FB(z)r(;)c
+FF(2)p FB(s=)p FF(\(2)j Fw(\000)f FB(t)p FF(\)\))53 b(if)13
+b(0)e Fw(\024)h FF(2)p FB(s)g Fw(\024)f FF(2)e Fw(\000)h
+FB(t)1057 1072 y(H)s FF(\()p FB(z)r(;)d FF(2)p FB(s)i
+Fw(\000)h FF(2)f(+)g FB(t)p FF(\))42 b(if)13 b(2)c Fw(\000)g
+FB(t)j Fw(\024)g FF(2)p FB(s)f Fw(\024)h FF(2)-79 1471
+y Fr(1)62 b Fx($$)-79 1520 y Fr(2)g Fx(\\def\\mod{\\)o(ma)o(thr)o(el)o
+({\\b)o(ig/)o(}})-79 1570 y Fr(3)g Fx(\\Dg)-79 1620 y
+Fr(4)g Fx({\\rm)18 b(Spin}\(3\))f(&)156 b(&)137 b(&)g(&)19
+b(SU\(2\))136 b(\\\\)-79 1670 y Fr(5)337 b Fx(&)19 b(\\rdTo)37
+b(&)137 b(&)19 b(\\ldTo)293 b(\\\\)-79 1720 y Fr(6)337
+b Fx(&)156 b(&)19 b(SO\(3\))450 b(\\\\)-79 1769 y Fr(7)337
+b Fx(&)156 b(&)19 b(\\dTo)470 b(\\\\)-79 1819 y Fr(8)62
+b Fx(&)19 b(O\(3\)\\mod)e(O\(1\)^3)g(=)i({})g(&)g(SO\(3\)\\mod\()o
+(O\(1)o(\)^3)o(\\c)o(ap)d(SO\(3\)\))i(\\\\)-79 1869 y
+Fr(9)62 b Fx(\\endDg)-95 1919 y Fr(10)f Fx($$)1030 2150
+y
+gsave
+ 1030 2150 a 1030 2150 a
+currentpoint currentpoint translate -2983488 neg 2797019 atan rotate
+neg exch neg exch translate
+ 1030 2150 a 937 2161 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)-18 b Fv(\021)1030
+2150 y
+grestore
+ 1030 2150 a 1207 2150 a
+gsave
+ 1207 2150 a 1207 2150
+a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1207 2150 a 1114 2161 a Fw(\000)g(\000)-8 b(\000)f(\000)g(\000)g
+(\000)g(\000)-17 b Fv(\021)1207 2150 y
+grestore
+ 1207 2150 a 1119
+2339 a
+gsave
+ 1119 2339 a 1119 2339 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1119 2339 a 1053 2350
+a Fw(\000)k(\000)k(\000)g(\000)d Fv(\021)1119 2339 y
+grestore
+
+1119 2339 a 875 2066 a FF(Spin)o(\(3\))231 b FB(S)r(U)5
+b FF(\(2\))1062 2255 y FB(S)r(O)q FF(\(3\))597 2444 y
+FB(O)q FF(\(3\))695 2411 y Fq(\016)730 2444 y FB(O)q
+FF(\(1\))816 2427 y Fr(3)846 2444 y FF(=)12 b FB(S)r(O)q
+FF(\(3\))1015 2411 y Fq(\016)1051 2444 y FF(\()p FB(O)q
+FF(\(1\))1153 2427 y Fr(3)1181 2444 y Fw(\\)d FB(S)r(O)q
+FF(\(3\)\))954 2770 y(58)p eop
+%%Page: 59 4
+59 58 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)p
+FF(,)d FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(109.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\def\\cod{{)o(\\r)o(m)17 b(cod}\\,})g(\\def\\dom)o({{\\)o
+(rm)f(dom}\\,})-79 232 y Fr(3)62 b Fx(\\cellwidth)o(+=)o(2mm)-79
+282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i
+(&)g(\\rEq)136 b(&)19 b(F)g(&)g(_{\\cod)f(u})h(&)97 b(&)255
+b(&)19 b(F_i)293 b(\\\\)-79 382 y Fr(6)62 b Fx(&)19 b(\\uTo)f(>{p_u})g
+(&)h(&)235 b(&)19 b(\\uTo)f(&)157 b(&)97 b(&)20 b(\\ruTo)d(<{p_i})h
+(\\tx{-5pt)o(})f(&)-79 432 y Fr(7)1376 b Fx(\\uDashto)17
+b(>{\\mu_i})f(\\\\)-79 482 y Fr(8)62 b Fx({\\mit\\Pi}_)o({u)o(:j\\)o
+(to)16 b(k}F_k)i(=)h({\\mit\\Pi})o(_u)d(&)-79 531 y Fr(9)101
+b Fx(F)19 b(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^f)h(\\up{3pt})d(\\lTo)j(_g)
+f(\\up{-3pt})-95 581 y Fr(10)630 b Fx(&)19 b({\\mit\\Pi}_)o(i)d(&)k(&)f
+(F_i)f(&)i(\\lDashto)c(^e)j(&)g(d)333 b(\\\\)-95 631
+y Fr(11)61 b Fx(&)19 b(\\dTo)f(>{p_u})g(&)h(&)235 b(&)19
+b(\\dTo)f(>{p_{\\dom)e(u}})705 b(\\\\)-95 681 y Fr(12)61
+b Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^{Fu})g(&)h(F)g(&)g
+(_{\\dom)f(u})803 b(\\\\)-95 731 y Fr(13)61 b Fx(\\endDg)-95
+780 y Fr(14)g Fx($$)1018 915 y
+gsave
+ 1018 915 a 1018 915 a
+currentpoint currentpoint translate 0 neg 3793467 atan rotate neg exch
+neg exch translate
+
+1018 915 a 1013 925 a FF(=)1018 915 y
+grestore
+ 1018 915 a 842
+1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009 a 774 1019 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-15 b Fv(\021)842 1009
+y
+grestore
+ 842 1009 a 842 1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009
+a 846 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 846 1022 a 10 x Fu(p)863 1036 y Fe(u)846
+1009 y
+grestore
+ 846 1009 a 1138 1009 a
+gsave
+ 1138 1009 a 1138 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1138 1009 a 1070 1019 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1138 1009 y
+grestore
+ 1138 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1164 1019 a Fw(\000)-21 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)1276 1009 y
+grestore
+ 1276 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1277 997 a
+currentpoint currentpoint translate -2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1277 997 a 1247
+991 a Fu(p)1264 995 y Fe(i)1277 1009 y
+grestore
+ 1277 1009 a 1391
+1009 a
+gsave
+ 1391 1009 a 1391 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1327 1019
+a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)-14 b(\014)1391
+1009 y
+grestore
+ 1391 1009 a 1391 1009 a
+gsave
+ 1391 1009 a 1391 1009
+a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1392 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1392 1022 a 10 x Fu(\026)1412
+1036 y Fe(i)1392 1009 y
+grestore
+ 1392 1009 a 1018 1091 a
+gsave
+ 1018
+1091 a 1018 1091 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 930 1102 a Fw(\000)-19
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)1018
+1091 y
+grestore
+ 1018 1091 a 1018 1091 a
+gsave
+ 1018 1091 a 1018 1091
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104 a 1001 1098 a Fu(f)1011
+1091 y
+grestore
+ 1011 1091 a 1018 1116 a
+gsave
+ 1018 1116 a 1018 1116
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 930 1126 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-18 b Fv(\021)1018 1116 y
+grestore
+ 1018 1116 a 1018 1116 a
+gsave
+ 1018
+1116 a 1018 1116 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104
+a 1002 1116 a Fu(g)1011 1116 y
+grestore
+ 1011 1116 a 1286 1104
+a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286 1104 a 1205 1114 a Fv(\013)-9
+b(\013)g(\013)g(\013)h(\013)f(\013)-14 b(\014)1286 1104
+y
+grestore
+ 1286 1104 a 1286 1104 a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286
+1104 a 1281 1116 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1281 1116 a -8 w Fu(e)1281 1104 y
+grestore
+
+1281 1104 a 842 1198 a
+gsave
+ 842 1198 a 842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198
+a 767 1208 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)842 1198 y
+grestore
+ 842 1198 a 842 1198 a
+gsave
+ 842 1198 a
+842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198 a 838 1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 838 1186 a 10 x Fu(p)855
+1200 y Fe(u)838 1198 y
+grestore
+ 838 1198 a 1138 1198 a
+gsave
+ 1138 1198
+a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1068 1208 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1138 1198 y
+grestore
+ 1138 1198
+a 1138 1198 a
+gsave
+ 1138 1198 a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1137
+1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1137 1186 a 10 x Fu(p)1154 1200 y Fp(dom)t Fe(u)1137
+1198 y
+grestore
+ 1137 1198 a 1018 1293 a
+gsave
+ 1018 1293 a 1018 1293
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 922 1303 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)1018 1293 y
+grestore
+ 1018 1293 a 1018 1293 a
+gsave
+ 1018
+1293 a 1018 1293 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 1007 1305 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1007 1305
+a -23 w Fu(F)t(u)1007 1293 y
+grestore
+ 1007 1293 a 826 925 a FB(F)859
+931 y Fr(co)q(d)5 b Fu(u)1122 925 y FB(F)1160 931 y Fr(co)q(d)g
+Fu(u)1370 925 y FB(F)1397 931 y Fu(i)539 1114 y FB(\005)574
+1120 y Fu(u)p Fr(:)p Fu(j)r Fh(\021)p Fu(k)668 1114 y
+FB(F)695 1120 y Fu(k)726 1114 y FF(=)12 b FB(\005)805
+1120 y Fu(u)826 1114 y FB(F)859 1120 y Fr(co)q(d)5 b
+Fu(u)1114 1114 y FB(\005)1149 1120 y Fu(i)1162 1114 y
+FB(F)1189 1120 y Fu(i)1380 1114 y FB(d)826 1303 y(F)859
+1309 y Fr(co)q(d)g Fu(u)1122 1303 y FB(F)1154 1309 y
+Fr(dom)h Fu(u)0 1670 y FH(S.)16 b(Mac)g(Lane)p FF(,)d
+FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(117.)-79 1761 y Fr(1)62 b Fx($$)-79 1811
+y Fr(2)g Fx(\\Dg)-79 1861 y Fr(3)g Fx(u)215 b(&)20 b(\\rTo)e(^{e_1})56
+b(&)19 b(v)137 b(&)20 b(&)f(\\rTo)f(\\up{3pt})e(^f)j(\\rTo)f
+(\\up{-3pt})e(_g)j(&)g(d)79 b(\\\\)-79 1911 y Fr(4)62
+b Fx(\\uDashto)17 b(>s)h(&)294 b(&)19 b(\\dTo)f(>e)h(&)373
+b(&)352 b(&)19 b(\\uTo)g(\\\\)-79 1961 y Fr(5)62 b Fx(w)215
+b(&)20 b(\\rTo)e(^{ee_1s})e(&)j(w)137 b(&)20 b({})e(=)i({\\mit\\Pi})o
+(k_)o(i)d(&)i(\\rTo)253 b(&)19 b(k_i)39 b(\\\\)-79 2010
+y Fr(6)62 b Fx(\\endDg)-79 2060 y Fr(7)g Fx($$)812 2195
+y
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195 a 740 2205 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-14 b Fv(\021)812 2195
+y
+grestore
+ 812 2195 a 812 2195 a
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195
+a 813 2182 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 813 2182 a 797 2178 a Fu(e)813 2182 y Fp(1)813
+2195 y
+grestore
+ 813 2195 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+
+1066 2182 a 924 2193 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2182 a 1066 2170 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2170 a 1056 2164 a Fu(f)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 924 2218 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2207 y
+grestore
+ 1066 2207 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 1066 2220 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2220 a 1057 2232 a Fu(g)1066
+2207 y
+grestore
+ 1066 2207 a 720 2289 a
+gsave
+ 720 2289 a 720 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720
+2289 a 642 2300 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)-16
+b(\014)720 2289 y
+grestore
+ 720 2289 a 720 2289 a
+gsave
+ 720 2289 a 720
+2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720 2289 a 719 2302 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 719 2302 a 10 x Fu(s)719
+2289 y
+grestore
+ 719 2289 a 904 2289 a
+gsave
+ 904 2289 a 904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904
+2289 a 829 2300 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)904 2289 y
+grestore
+ 904 2289 a 904 2289 a
+gsave
+ 904 2289 a
+904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904 2289 a 905 2277 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 905 2277 a 10 x Fu(e)905
+2289 y
+grestore
+ 905 2289 a 1228 2289 a
+gsave
+ 1228 2289 a 1228 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1228 2289 a 1160 2300 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1228 2289 y
+grestore
+ 1228 2289 a 812 2384 a
+gsave
+ 812 2384
+a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 744 2394 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)-19 b Fv(\021)812 2384 y
+grestore
+ 812 2384
+a 812 2384 a
+gsave
+ 812 2384 a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 812 2371
+a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2371 a 780 2367 a Fu(ee)812 2371 y Fp(1)828 2367
+y Fu(s)812 2384 y
+grestore
+ 812 2384 a 1110 2384 a
+gsave
+ 1110 2384 a
+1110 2384 a
+currentpoint currentpoint translate 0 neg 3719362 atan rotate neg exch
+neg exch translate
+ 1110 2384 a 1065 2394 a Fw(\000)g(\000)-10
+b(\000)i(\000)f(\000)-19 b Fv(\021)1110 2384 y
+grestore
+ 1110 2384
+a 708 2205 a FB(u)162 b(v)303 b(d)705 2394 y(w)154 b(w)20
+b FF(=)12 b FB(\005)s(k)1043 2400 y Fu(i)1210 2394 y
+FB(k)1232 2400 y Fu(i)954 2770 y FF(59)p eop
+%%Page: 60 5
+60 59 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)g(and)f(I.)h
+(Mo)q(erdijk)p FF(,)c FC(She)n(aves)k(In)f(Ge)n(ometry)g(and)g(L)n(o)n
+(gic)p FF(,)f(page)f(232.)-79 133 y Fr(1)62 b Fx($$)-79
+183 y Fr(2)g Fx(\\cellwidth)o(+=)o(3mm)-79 232 y Fr(3)g
+Fx(\\Dg)-79 282 y Fr(4)g Fx(Y)117 b(&)20 b(\\rMono)d(^y)i(&)g(A)333
+b(&)19 b(\\rLine)e(\\jh)i(&)g(\\stop)312 b(\\\\)-79 332
+y Fr(5)62 b Fx(\\dEpi)37 b(&)216 b(&)19 b(\\dEpi)253
+b(&)235 b(&)19 b(\\mx{-1cm})232 b(\\\\)-79 382 y Fr(6)62
+b Fx(D)117 b(&)20 b(\\rMono)d(^d)i(&)g(i_A\(A\))233 b(&)i(&)19
+b(\\dLine)e(>{\\eta_A})g(\\jn)h(\\\\)-79 432 y Fr(7)62
+b Fx(\\dMono)17 b(&)216 b(&)19 b(\\dMono)939 b(\\\\)-79
+482 y Fr(8)62 b Fx(X)117 b(&)20 b(\\rMono)d(_x)i(&)g(\\overline)o({i_)o
+(A\()o(A\)})d(&)j(\\lTo)f(\\jt)58 b(&)19 b(\\stop)312
+b(\\\\)-79 531 y Fr(9)62 b Fx(\\endDg)-95 581 y Fr(10)f
+Fx($$)923 715 y
+gsave
+ 923 715 a 923 715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 818 726
+a Fv(\016)-10 b Fw(\000)h(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)923 715 y
+grestore
+ 923 715 a 923 715 a
+gsave
+ 923 715 a 923
+715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 924 703 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 924 703 a 915 697 a Fu(y)924
+715 y
+grestore
+ 924 715 a 1115 715 a
+gsave
+ 1115 715 a 1115 715 a
+currentpoint currentpoint translate 0 neg 1945767 atan rotate neg exch
+neg exch translate
+ 1115
+715 a 1077 726 a Fw(\000)-20 b(\000)-9 b(\000)g(\000)-19
+b(\000)1115 715 y
+grestore
+ 1115 715 a 793 810 a
+gsave
+ 793 810 a 793
+810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 810 a 717 820 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)-30 b(\014)793 810 y
+grestore
+ 793 810 a 1053 810 a
+gsave
+ 1053
+810 a 1053 810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 810 a 977 820 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)-16 b Fv(\021)-30 b(\014)1053 810
+y
+grestore
+ 1053 810 a 923 904 a
+gsave
+ 923 904 a 923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a
+819 915 a Fv(\016)-18 b Fw(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)
+-21 b Fv(\021)923 904 y
+grestore
+ 923 904 a 923 904 a
+gsave
+ 923 904 a
+923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a 906 892 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 892 a -9 w Fu(d)906
+904 y
+grestore
+ 906 904 a 1176 904 a
+gsave
+ 1176 904 a 1176 904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176
+904 a 983 915 a Fw(\000)k(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16
+b(\000)1176 904 y
+grestore
+ 1176 904 a 1176 904 a
+gsave
+ 1176 904 a 1176
+904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176 904 a 1176 892 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1176 892 a 10 x Fu(\021)1193
+906 y Fe(A)1176 904 y
+grestore
+ 1176 904 a 793 999 a
+gsave
+ 793 999 a
+793 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 999 a 717 1009 a Fv(\016)-9 b Fw(\000)g(\000)g(\000)g
+(\000)c Fv(\021)793 999 y
+grestore
+ 793 999 a 1053 999 a
+gsave
+ 1053 999
+a 1053 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 999 a 987 1009 a Fv(\016)-8 b Fw(\000)f(\000)g(\000)d
+Fv(\021)1053 999 y
+grestore
+ 1053 999 a 923 1093 a
+gsave
+ 923 1093 a 923
+1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 1093 a 820 1104 a Fv(\016)-18 b Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)923
+1093 y
+grestore
+ 923 1093 a 923 1093 a
+gsave
+ 923 1093 a 923 1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923
+1093 a 906 1106 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 1106 a 897 1118 a Fu(x)906 1093
+y
+grestore
+ 906 1093 a 1115 1093 a
+gsave
+ 1115 1093 a 1115 1093 a
+currentpoint currentpoint translate 0 neg -1945767 atan rotate neg
+exch neg exch translate
+ 1115
+1093 a 1049 1104 a Fw(\000)i(\000)h Fv(\021)1115 1093
+y
+grestore
+ 1115 1093 a 776 726 a FB(Y)237 b(A)775 915 y(D)191
+b(i)1014 921 y Fu(A)1042 915 y FF(\()p FB(A)p FF(\))774
+1104 y FB(X)p 1000 1068 105 2 v 192 w(i)1014 1110 y Fu(A)1042
+1104 y FF(\()p FB(A)p FF(\))0 1325 y FH(K.)17 b(S.)e(Bro)o(wn)p
+FF(,)e FC(Cohomolo)n(gy)i(of)g(Gr)n(oups)p FF(,)e(page)h(280.)-79
+1417 y Fr(1)62 b Fx($$)-79 1467 y Fr(2)g Fx(\\let\\^\\wid)o(eh)o(at)16
+b(\\let\\~\\wid)o(eti)o(ld)o(e)-79 1516 y Fr(3)62 b Fx(\\flexible)16
+b(\\columndis)o(t=1)o(cm)-79 1566 y Fr(4)62 b Fx(\\xgrid+=2m)o(m)16
+b(\\ygrid+=-2m)o(m)-79 1616 y Fr(5)62 b Fx(\\Diagram)-79
+1666 y Fr(6)219 b Fx(&)176 b(&)g(&)157 b(&H^0)18 b(\\bTo\(-1,-)o(4\))e
+(\\hx{-2pt})-79 1716 y Fr(7)945 b Fx(&\\cdots)36 b(&H^{n-1})g(&H^n)i
+(&H^{n+1})e(&H^{n+2})17 b(&\\cdots)g(\\\\)-79 1765 y
+Fr(8)62 b Fx(\\mx{5mm}&)173 b(&)j(&)157 b(&\\dTo)57 b(&)156
+b(&\\dTo)96 b(&\\dEpi&\\dB)o(ar)75 b(&\\dBar)17 b(&\\mx{-2mm}\\)o(\\)
+-79 1815 y Fr(9)62 b Fx(\\cdots)37 b(&\\^H^{-3})16 b(&\\^H^{-2})g
+(&\\^H^{-1}&)o(\\^H)o(^0)36 b(&\\cdots)g(&\\^H^{n-1})o(&\\^)o(H^)o
+(n&\\)o(^H)o(^{n)o(+1)o(}&\\)o(^H^)o({n)o(+2})o(&\\)o(cdo)o(ts\\)o(\\)
+-95 1865 y Fr(10)218 b Fx(&\\dBar)76 b(&\\dBar)g(&\\dInto)37
+b(&\\dTo)57 b(&)156 b(&\\dTo)18 b(\\dx{-2mm})546 b(\\\\)-95
+1915 y Fr(11)61 b Fx(\\cdots)37 b(&\\~H_{n+2)o(}&\\)o(~H_)o({n)o(+1})o
+(&\\)o(~H_)o(n)56 b(&\\~H_{n-1)o(}&)o(\\cd)o(ots)o(&\\)o(~H_)o(0)16
+b(\\aTo\(1,4\))h(\\hx{-2pt)o(})331 b(\\\\)-95 1965 y
+Fr(12)61 b Fx(\\endDiagra)o(m)-95 2014 y Fr(13)g Fx($$)752
+2345 y
+gsave
+ 752 2345 a 752 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 752 2345 a 592 2356 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-20 b Fv(\021)752 2345 y
+grestore
+ 752
+2345 a 827 2251 a
+gsave
+ 827 2251 a 827 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2251 a 752
+2261 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-21 b Fv(\021)827
+2251 y
+grestore
+ 827 2251 a 1087 2251 a
+gsave
+ 1087 2251 a 1087 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1087 2251 a 1011 2261 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1087 2251 y
+grestore
+ 1087 2251 a 1229 2251 a
+gsave
+ 1229 2251
+a 1229 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1229 2251 a 1153 2261 a Fw(\000)f(\000)-9
+b(\000)g(\000)h(\000)-21 b Fv(\021)-30 b(\014)1229 2251
+y
+grestore
+ 1229 2251 a 1371 2251 a
+gsave
+ 1371 2251 a 1371 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1371
+2251 a 1295 2261 a FF(=)-17 b(=)-9 b(=)g(=)g(=)-17 b(=)1371
+2251 y
+grestore
+ 1371 2251 a 1512 2251 a
+gsave
+ 1512 2251 a 1512 2251
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1512 2251 a 1437 2261 a FF(=)f(=)-9 b(=)h(=)f(=)-17
+b(=)1512 2251 y
+grestore
+ 1512 2251 a 402 2440 a
+gsave
+ 402 2440 a 402
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 402 2440 a 326 2450 a FF(=)g(=)-9 b(=)g(=)g(=)-16
+b(=)402 2440 y
+grestore
+ 402 2440 a 544 2440 a
+gsave
+ 544 2440 a 544 2440
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 544 2440 a 468 2450 a FF(=)f(=)-9 b(=)g(=)g(=)-16 b(=)544
+2440 y
+grestore
+ 544 2440 a 686 2440 a
+gsave
+ 686 2440 a 686 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 686
+2440 a 610 2450 a FB(,)-7 b Fw(\000)-13 b(\000)k(\000)g(\000)d
+Fv(\021)686 2440 y
+grestore
+ 686 2440 a 827 2440 a
+gsave
+ 827 2440 a 827
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2440 a 752 2450 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g
+(\000)-21 b Fv(\021)827 2440 y
+grestore
+ 827 2440 a 1087 2440 a
+gsave
+
+1087 2440 a 1087 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1087 2440 a 1011 2450 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)-21 b Fv(\021)1087 2440 y
+grestore
+ 1087 2440
+a 1154 2345 a
+gsave
+ 1154 2345 a 1154 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 1154 2345 a 994
+2356 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-20 b Fv(\021)1154
+2345 y
+grestore
+ 1154 2345 a 799 2167 a FB(H)837 2149 y Fr(0)945
+2167 y Fw(\001)7 b(\001)g(\001)41 b FB(H)1074 2149 y
+Fu(n)p Fs(\000)p Fr(1)1199 2167 y FB(H)1237 2149 y Fu(n)1319
+2167 y FB(H)1357 2149 y Fu(n)p Fr(+1)1461 2167 y FB(H)1499
+2149 y Fu(n)p Fr(+2)1606 2167 y Fw(\001)7 b(\001)g(\001)295
+2356 y(\001)g(\001)g(\001)371 2345 y Fq(b)361 2356 y
+FB(H)399 2338 y Fs(\000)p Fr(3)512 2345 y Fq(b)503 2356
+y FB(H)541 2338 y Fs(\000)p Fr(2)654 2345 y Fq(b)644
+2356 y FB(H)682 2338 y Fs(\000)p Fr(1)809 2345 y Fq(b)799
+2356 y FB(H)837 2338 y Fr(0)945 2356 y Fw(\001)g(\001)g(\001)1045
+2345 y Fq(b)1036 2356 y FB(H)1074 2338 y Fu(n)p Fs(\000)p
+Fr(1)1208 2345 y Fq(b)1199 2356 y FB(H)1237 2338 y Fu(n)1329
+2345 y Fq(b)1319 2356 y FB(H)1357 2338 y Fu(n)p Fr(+1)1471
+2345 y Fq(b)1461 2356 y FB(H)1499 2338 y Fu(n)p Fr(+2)1606
+2356 y Fw(\001)g(\001)g(\001)295 2545 y(\001)g(\001)g(\001)362
+2534 y Fq(e)353 2545 y FB(H)388 2551 y Fu(n)p Fr(+2)504
+2534 y Fq(e)494 2545 y FB(H)529 2551 y Fu(n)p Fr(+1)667
+2534 y Fq(e)657 2545 y FB(H)692 2551 y Fu(n)787 2534
+y Fq(e)778 2545 y FB(H)813 2551 y Fu(n)p Fs(\000)p Fr(1)945
+2545 y Fw(\001)g(\001)g(\001)1070 2534 y Fq(e)1061 2545
+y FB(H)1096 2551 y Fr(0)954 2770 y FF(60)p eop
+%%Page: 61 6
+61 60 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(592.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\def\\T{{\\b)o(f)16
+b(T}})j(\\def\\S{{\\)o(bf)d(S}})-79 232 y Fr(3)62 b Fx(\\landscape)16
+b(\\let\\labe)o(lst)o(yl)o(e\\t)o(ex)o(tst)o(yl)o(e)-79
+282 y Fr(4)62 b Fx(\\cellpush=)o(10)o(pt)16 b(\\xscale=2.)o(2)-79
+332 y Fr(5)62 b Fx(\\Diagram)-79 382 y Fr(6)199 b Fx(&)353
+b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,)i(X^+\))g(&)-79 432
+y Fr(7)121 b Fx(\\lTo)18 b(^{H_n\(k_1)o(\)})e(&)157 b(&)19
+b(H_n\(\\T)e(A^+,A^+\))-79 482 y Fr(8)670 b Fx(\\aTo)18
+b(\(-3,-2\))f(_{H_n\(p_1\))o(})-79 531 y Fr(9)670 b Fx(\\aTo)18
+b(\(3,-4\))f(^{\\partial_)o(1})369 b(\\\\)-95 581 y Fr(10)198
+b Fx(&)353 b(&)19 b(\\dTo)f(>{H_n{q_1})o(})605 b(\\\\)-95
+631 y Fr(11)198 b Fx(&)353 b(&)19 b(H_n\(\\S)e(A^+,P\))214
+b(&)-95 681 y Fr(12)453 b Fx(&)157 b(&)19 b(*)g(\\dx{.7})684
+b(\\\\)-95 731 y Fr(13)198 b Fx(&)20 b(\\ruTo)d(_{H_n\(q_4\))o(})g
+(\\tx{15pt)o(})-95 780 y Fr(14)571 b Fx(&)19 b(\\uTo)f(>{H_n\(t\)})644
+b(\\\\)-95 830 y Fr(15)61 b Fx(H_n\(X^+\\cu)o(p\\)o(T)17
+b(A^+,P\))g(\\aTo)h(\(2,4\))37 b(^{H_n\(j_1\))o(})17
+b(\\tx{15pt})-95 880 y Fr(16)473 b Fx(\\aTo)18 b(\(2,-4\))f
+(_{H_n\(j_2\))o(})g(\\tx{15pt})-95 930 y Fr(17)198 b
+Fx(&)59 b(&)f(&)78 b(&)157 b(&)58 b(&)19 b(H_{n-1}\(A\))d(&)-95
+980 y Fr(18)787 b Fx(\\rTo)18 b(^{H_{n-1})o(\(i_)o(A\))o(})f(&)i
+(H_{n-1}\(A)o(^+,)o(P\))d(\\\\)-95 1029 y Fr(19)198 b
+Fx(&)20 b(\\rdTo)d(^{H_n\(q_2\))o(})g(\\tx{15pt)o(})-95
+1079 y Fr(20)571 b Fx(&)490 b(&)19 b(&)g(&)h(\\ruTo)233
+b(\\\\)-95 1129 y Fr(21)198 b Fx(&)353 b(&)19 b(H_n\(X^+/A^)o(+,P)o(\))
+193 b(&)-95 1179 y Fr(22)100 b Fx(\\lTo)18 b(^{P_n\(X,A\))o(})36
+b(&)20 b(H_n\(X,A\))-95 1229 y Fr(23)493 b Fx(\\aTo)18
+b(\(1,-2\))f(>{H_n\(i_X)o(\)})585 b(\\\\)-95 1279 y Fr(24)198
+b Fx(&)353 b(&)19 b(\\uTo)f(>{H_n\(q_3\))o(})605 b(\\\\)-95
+1328 y Fr(25)198 b Fx(&)353 b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,\\T)h
+(A^+\)&)-95 1378 y Fr(26)100 b Fx(\\lTo)18 b(_{H_n\(k_2\))o(})f(&)i(&)g
+(H_n\(X^+,A^)o(+\))-95 1428 y Fr(27)512 b Fx(\\aTo)18
+b(\(3,4\))g(_{\\partia)o(l_2)o(})-95 1478 y Fr(28)512
+b Fx(\\aTo)18 b(\(-3,2\))f(_{H_n\(p_X\)})565 b(\\\\)-95
+1528 y Fr(29)61 b Fx(\\endDiagra)o(m)-95 1577 y Fr(30)g
+Fx($$)954 2770 y FF(61)p eop
+%%Page: 62 7
+62 61 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)1491 2502 y
+gsave
+ 1491 2502 a 1491
+2502 a
+currentpoint currentpoint translate 90 neg rotate neg exch neg exch
+translate
+ 1491 2502 a 2593 1516 a
+gsave
+ 2593 1516 a 2593 1516
+a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2374 1526 a Fw(\000)-14 b(\000)-9 b(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)2593 1516 y
+grestore
+ 2593 1516 a 2593 1516 a
+gsave
+ 2593 1516
+a 2593 1516 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2564 1528 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2564 1528 a 2499
+1518 a FB(H)2534 1524 y Fu(n)2556 1518 y FF(\()p FB(k)2594
+1524 y Fr(1)2612 1518 y FF(\))2564 1516 y
+grestore
+ 2564 1516 a
+2593 1634 a
+gsave
+ 2593 1634 a 2593 1634 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2298
+1644 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-19 b Fv(\021)2593
+1634 y
+grestore
+ 2593 1634 a 2593 1634 a
+gsave
+ 2593 1634 a 2593 1634
+a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2586 1622 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2586 1622 a 31 x FB(H)2621
+1659 y Fu(n)2643 1653 y FF(\()p FB(p)2680 1659 y Fr(1)2699
+1653 y FF(\))2586 1634 y
+grestore
+ 2586 1634 a 3281 1752 a
+gsave
+ 3281
+1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 2975 1763 a Fw(\000)k(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-14 b Fv(\021)3281 1752 y
+grestore
+ 3281 1752
+a 3281 1752 a
+gsave
+ 3281 1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 3278
+1740 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3278 1740 a -6 x FB(@)3300 1740 y Fr(1)3278 1752
+y
+grestore
+ 3278 1752 a 2203 1634 a
+gsave
+ 2203 1634 a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203
+1634 a 2147 1644 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)2203 1634 y
+grestore
+ 2203 1634 a 2203 1634 a
+gsave
+ 2203 1634
+a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203 1634 a 2201 1622 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2201 1622 a 10
+x FB(H)2236 1638 y Fu(n)2258 1632 y FB(q)2277 1638 y
+Fr(1)2201 1634 y
+grestore
+ 2201 1634 a 1974 1870 a
+gsave
+ 1974 1870 a
+1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1812 1881 a Fw(\000)-13 b(\000)k(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)1974 1870 y
+grestore
+ 1974 1870 a 1974 1870 a
+gsave
+ 1974 1870
+a 1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1978 1883 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1978 1883 a 31
+x FB(H)2013 1920 y Fu(n)2036 1914 y FF(\()p FB(q)2071
+1920 y Fr(4)2089 1914 y FF(\))1978 1870 y
+grestore
+ 1978 1870 a
+2203 1988 a
+gsave
+ 2203 1988 a 2203 1988 a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2033
+1999 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)2203
+1988 y
+grestore
+ 2203 1988 a 2203 1988 a
+gsave
+ 2203 1988 a 2203 1988
+a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2205 2001 a
+currentpoint currentpoint translate -7458716 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2001 a 10 x FB(H)2240
+2017 y Fu(n)2262 2011 y FF(\()p FB(t)p FF(\))2205 1988
+y
+grestore
+ 2205 1988 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974
+1752 a 1722 1763 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1974
+1752 y
+grestore
+ 1974 1752 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752
+a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1752 a 1977 1740 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1977 1740 a 1852 1729 a FB(H)1887
+1735 y Fu(n)1909 1729 y FF(\()p FB(j)1942 1735 y Fr(1)1961
+1729 y FF(\))1977 1752 y
+grestore
+ 1977 1752 a 1974 2225 a
+gsave
+ 1974
+2225 a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1716 2235 a Fw(\000)f(\000)-9
+b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-16
+b Fv(\021)1974 2225 y
+grestore
+ 1974 2225 a 1974 2225 a
+gsave
+ 1974 2225
+a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1971 2237 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1971 2237 a 1847
+2268 a FB(H)1882 2274 y Fu(n)1904 2268 y FF(\()p FB(j)1937
+2274 y Fr(2)1956 2268 y FF(\))1971 2225 y
+grestore
+ 1971 2225 a
+3320 1988 a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3184
+1999 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b Fv(\021)3320 1988 y
+grestore
+ 3320 1988 a 3320 1988
+a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3300 1976 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3300
+1976 a 3214 1966 a FB(H)3249 1972 y Fu(n)p Fs(\000)p
+Fr(1)3314 1966 y FF(\()p FB(i)3344 1972 y Fu(A)3371 1966
+y FF(\))3300 1988 y
+grestore
+ 3300 1988 a 1974 2106 a
+gsave
+ 1974 2106
+a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1804 2117 a Fw(\000)h(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)c Fv(\021)1974 2106 y
+grestore
+ 1974 2106 a 1974 2106 a
+gsave
+ 1974
+2106 a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1970 2094 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1970 2094
+a -10 x FB(H)2005 2090 y Fu(n)2027 2084 y FF(\()p FB(q)2062
+2090 y Fr(2)2080 2084 y FF(\))1970 2106 y
+grestore
+ 1970 2106 a
+2892 2106 a
+gsave
+ 2892 2106 a 2892 2106 a
+currentpoint currentpoint translate 3729358 neg 5332987 atan rotate
+neg exch neg exch translate
+ 2892 2106 a 2763
+2117 a Fw(\000)c(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-16 b Fv(\021)2892 2106 y
+grestore
+ 2892 2106 a 2463
+2225 a
+gsave
+ 2463 2225 a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2332 2235
+a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2463 2225 y
+grestore
+ 2463 2225 a 2463 2225 a
+gsave
+ 2463 2225
+a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2436 2237 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2436 2237 a 2353
+2227 a FB(P)2380 2233 y Fu(n)2402 2227 y FF(\()p FB(X)q(;)7
+b(A)p FF(\))2436 2225 y
+grestore
+ 2436 2225 a 2853 2343 a
+gsave
+ 2853
+2343 a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2749 2353 a Fw(\000)-22
+b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)2853 2343 y
+grestore
+ 2853 2343 a 2853 2343 a
+gsave
+ 2853 2343
+a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2850 2330 a
+currentpoint currentpoint translate 3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2850 2330 a -10
+x FB(H)2885 2326 y Fu(n)2907 2320 y FF(\()p FB(i)2937
+2326 y Fu(X)2969 2320 y FF(\))2850 2343 y
+grestore
+ 2850 2343 a
+2203 2343 a
+gsave
+ 2203 2343 a 2203 2343 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2151
+2353 a Fw(\000)f(\000)-9 b(\000)g(\000)-22 b Fv(\021)2203
+2343 y
+grestore
+ 2203 2343 a 2203 2343 a
+gsave
+ 2203 2343 a 2203 2343
+a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2205 2355 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2355 a 11 x FB(H)2240
+2372 y Fu(n)2262 2366 y FF(\()p FB(q)2297 2372 y Fr(3)2316
+2366 y FF(\))2205 2343 y
+grestore
+ 2205 2343 a 2593 2461 a
+gsave
+ 2593
+2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 2461 a 2361 2471 a Fw(\000)-14
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)2593 2461
+y
+grestore
+ 2593 2461 a 2593 2461 a
+gsave
+ 2593 2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593
+2461 a 2550 2448 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2550 2448 a 2485 2479 a FB(H)2520
+2485 y Fu(n)2542 2479 y FF(\()p FB(k)2580 2485 y Fr(2)2599
+2479 y FF(\))2550 2461 y
+grestore
+ 2550 2461 a 3281 2225 a
+gsave
+ 3281
+2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 2981 2235 a Fw(\000)e(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)-14 b Fv(\021)3281 2225 y
+grestore
+ 3281 2225
+a 3281 2225 a
+gsave
+ 3281 2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 3284
+2237 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3284 2237 a 29 x FB(@)3306 2272 y Fr(2)3284 2225
+y
+grestore
+ 3284 2225 a 2593 2343 a
+gsave
+ 2593 2343 a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593
+2343 a 2312 2353 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2593 2343 y
+grestore
+ 2593 2343 a 2593 2343 a
+gsave
+ 2593 2343
+a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 2343 a 2600 2330 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2600 2330 a 2458
+2361 a FB(H)2493 2367 y Fu(n)2515 2361 y FF(\()p FB(p)2552
+2367 y Fu(X)2584 2361 y FF(\))2600 2343 y
+grestore
+ 2600 2343 a
+2015 1526 a FB(H)2050 1532 y Fu(n)2072 1526 y FF(\()p
+FB(X)2125 1509 y Fr(+)2163 1526 y Fw([)9 b FH(T)p FB(A)2264
+1509 y Fr(+)2291 1526 y FB(;)e(X)2347 1509 y Fr(+)2375
+1526 y FF(\))462 b FB(H)2888 1532 y Fu(n)2911 1526 y
+FF(\()p FH(T)p FB(A)2991 1509 y Fr(+)3019 1526 y FB(;)7
+b(A)3069 1509 y Fr(+)3096 1526 y FF(\))2090 1763 y FB(H)2125
+1769 y Fu(n)2147 1763 y FF(\()p FH(S)p FB(A)2221 1745
+y Fr(+)2249 1763 y FB(;)g(P)f FF(\))655 b Fw(\003)1512
+1999 y FB(H)1547 2005 y Fu(n)1569 1999 y FF(\()p FB(X)1622
+1982 y Fr(+)1659 1999 y Fw([)9 b FH(T)p FB(A)1760 1982
+y Fr(+)1788 1999 y FB(;)e(P)f FF(\))1123 b FB(H)3014
+2005 y Fu(n)p Fs(\000)p Fr(1)3079 1999 y FF(\()p FB(A)p
+FF(\))318 b FB(H)3495 2005 y Fu(n)p Fs(\000)p Fr(1)3559
+1999 y FF(\()p FB(A)3606 1982 y Fr(+)3634 1999 y FB(;)7
+b(P)f FF(\))2062 2235 y FB(H)2097 2241 y Fu(n)2119 2235
+y FF(\()p FB(X)2172 2218 y Fr(+)2200 2235 y FB(=)n(A)2250
+2218 y Fr(+)2277 2235 y FB(;)h(P)f FF(\))291 b FB(H)2671
+2241 y Fu(n)2693 2235 y FF(\()p FB(X)q(;)7 b(A)p FF(\))2002
+2471 y FB(H)2037 2477 y Fu(n)2059 2471 y FF(\()p FB(X)2112
+2454 y Fr(+)2149 2471 y Fw([)i FH(T)p FB(A)2250 2454
+y Fr(+)2278 2471 y FB(;)e FH(T)p FB(A)2361 2454 y Fr(+)2388
+2471 y FF(\))463 b FB(H)2902 2477 y Fu(n)2924 2471 y
+FF(\()p FB(X)2977 2454 y Fr(+)3005 2471 y FB(;)7 b(A)3055
+2454 y Fr(+)3082 2471 y FF(\))1491 2502 y
+grestore
+ 1491 2502 a
+954 2770 a FF(62)p eop
+%%Page: 63 8
+63 62 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(13.)-79 133 y Fr(1)62 b Fx($$)-79 183 y
+Fr(2)g Fx(\\dotted)-79 232 y Fr(3)g Fx(\\grid=7mm)-79
+282 y Fr(4)g Fx(\\yscale=2)-79 332 y Fr(5)g Fx(\\Diagram)-79
+382 y Fr(6)g Fx(&&&&&&&&&x)o(z&)o(&&&)o(xy)o(z&&)o(&&x)o(y^)o(2z&)o(&&)
+o(&xy)o(^3)o(z&\\)o(\\)-79 432 y Fr(7)g Fx(\\\\)-79 482
+y Fr(8)g Fx(z&&&&zy&&&)o(&z)o(y^2)o(&&)o(&&z)o(y^3)o(\\\\)-79
+531 y Fr(9)g Fx(\\dy{-.2})-95 581 y Fr(10)f Fx(&&&&&&&&&x)o(&&)o(&&x)o
+(y&)o(&&&)o(xy^)o(2&)o(&&&)o(xy)o(^3\\)o(\\)-95 631 y
+Fr(11)g Fx(\\\\)-95 681 y Fr(12)g Fx(&&&&y&&&&y)o(^2)o(&&&)o(&y)o(^3\\)
+o(\\)-95 731 y Fr(13)g Fx(\\Modify)-95 780 y Fr(14)g
+Fx(\\Line)18 b(\(0,0\))f(\(4,0\))h(\\dt{1pt})-95 830
+y Fr(15)61 b Fx(\\Line)18 b(\(4,0\))f(\(8,0\))-95 880
+y Fr(16)61 b Fx(\\Line)18 b(\(8,0\))f(\(12,0\))-95 930
+y Fr(17)61 b Fx(\\Line)18 b(\(12,0\))f(\(22.5,0\))-95
+980 y Fr(18)61 b Fx(\\Line)18 b(\(0,0\))f(\(0,3\))h(\\dt{1pt})-95
+1029 y Fr(19)61 b Fx(\\Line)18 b(\(0,3\))f(\(0,5.2\))-95
+1079 y Fr(20)61 b Fx(\\To)18 b(\(9,2\))g(\(12,0\))-95
+1129 y Fr(21)61 b Fx(\\To)18 b(\(9,5\))g(\(12,3\))-95
+1179 y Fr(22)61 b Fx(\\endDiagra)o(m)-95 1229 y Fr(23)g
+Fx($$)772 1431 y FB(xz)277 b(xy)q(z)257 b(xy)1458 1413
+y Fr(2)1477 1431 y FB(z)248 b(xy)1789 1413 y Fr(3)1808
+1431 y FB(z)40 1761 y(z)300 b(z)r(y)281 b(z)r(y)723 1744
+y Fr(2)1011 1761 y FB(z)r(y)1053 1744 y Fr(3)782 1960
+y FB(x)296 b(xy)278 b(xy)1469 1943 y Fr(2)1754 1960 y
+FB(xy)1799 1943 y Fr(3)370 2290 y FB(y)301 b(y)712 2273
+y Fr(2)1022 2290 y FB(y)1043 2273 y Fr(3)40 1431 y Fw(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 1596 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)122 1761 y(\017)g(\017)g(\017)144 b(\017)62
+b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145 b(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)40
+1960 y(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 2125 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)40 2290 y(\017)f(\017)h(\017)g(\017)144
+b(\017)62 b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145
+b(\017)61 b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g
+(\017)216 2280 y
+gsave
+ 216 2280 a 216 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 216 2280 a 46
+2290 a Fw(\000)-18 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-17 b(\000)216 2280
+y
+grestore
+ 216 2280 a 546 2280 a
+gsave
+ 546 2280 a 546 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 546 2280
+a 400 2290 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b(\000)546 2280
+y
+grestore
+ 546 2280 a 877 2280 a
+gsave
+ 877 2280 a 877 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 877 2280
+a 740 2290 a Fw(\000)-15 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b(\000)877 2280 y
+grestore
+ 877
+2280 a 1476 2280 a
+gsave
+ 1476 2280 a 1476 2280 a
+currentpoint currentpoint translate 0 neg 13705387 atan rotate neg
+exch neg exch translate
+ 1476 2280
+a 1071 2290 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)1476 2280 y
+grestore
+ 1476 2280 a 50 2016 a
+gsave
+ 50 2016 a 50
+2016 a
+currentpoint currentpoint translate 8353752 neg 0 atan rotate neg exch
+neg exch translate
+ 50 2016 a -219 2026 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21 b(\000)50
+2016 y
+grestore
+ 50 2016 a 50 1569 a
+gsave
+ 50 1569 a 50 1569 a
+currentpoint currentpoint translate 5743202 neg 0 atan rotate neg exch
+neg exch translate
+ 50 1569
+a -116 1579 a Fw(\000)-13 b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d(\000)50
+1569 y
+grestore
+ 50 1569 a 918 2115 a
+gsave
+ 918 2115 a 918 2115 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918
+2115 a 733 2125 a Fw(\000)c(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)918 2115 y
+grestore
+ 918 2115 a 918 1586 a
+gsave
+ 918 1586 a
+918 1586 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918 1586 a 733 1596 a Fw(\000)e(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)918 1586 y
+grestore
+ 918 1586 a 954 2770 a FF(63)p
+eop
+%%Page: 64 9
+64 63 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(346.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\cellpush+)o(=5)o(pt)-79 232 y Fr(3)g Fx(\\cellwidth)o(+=)
+o(2mm)-79 282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&&_{N+t'}X)o(_p)36
+b(&)19 b(\\rTo)f(^{g_{p+q})o(})f(&)i(_N)g(X_{p+q})36
+b(\\\\)-79 382 y Fr(6)62 b Fx(&&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o
+(ts\\)o(;\\)o(rig)o(ht)o(arr)o(ow)o(fil)o(l})d(&)-79
+432 y Fr(7)690 b Fx(&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o(ts\\)o(;\\)o
+(rig)o(ht)o(arr)o(owf)o(il)o(l})d(\\\\)-79 482 y Fr(8)964
+b Fx(\\\\)-79 531 y Fr(9)62 b Fx(&&)19 b(_{N+t'}X_)o(1)e(&)i(\\rTo)f
+(^{g_{q+1})o(})f(&)i(_N)g(X_{q+1})36 b(\\\\)-95 581 y
+Fr(10)61 b Fx(&&)19 b(\\dTo)136 b(&)333 b(&)19 b(\\dTo)155
+b(\\\\)-95 631 y Fr(11)61 b Fx(S^{N+t+t'})o(X)16 b(\\aTo)i(\(2,5\))g
+(^{f_p})f(\\tx{.7})g(\\hx{5pt})g(&)i(\\rTo)f(^f)h(&)-95
+681 y Fr(12)120 b Fx(S^{N+t'}X)36 b(&)19 b(\\rTo)f(^{g_q})96
+b(&)19 b(_N)g(X_q)116 b(\\\\)-95 731 y Fr(13)963 b Fx(\\\\)-95
+780 y Fr(14)61 b Fx(&&)235 b(&)333 b(&)19 b(\\dFillcel)o(l{\\)o(ri)o
+(ght)o(arr)o(ow)o(fil)o(l\\)o(;\\c)o(dot)o(s\\)o(;\\r)o(ig)o(hta)o(rr)o
+(owf)o(ill)o(})d(\\\\)-95 830 y Fr(15)963 b Fx(\\\\)-95
+880 y Fr(16)61 b Fx(&&)235 b(&)333 b(&)19 b(_N)g(X_1)116
+b(\\\\)-95 930 y Fr(17)61 b Fx(&&)235 b(&)333 b(&)19
+b(\\dTo)155 b(\\\\)-95 980 y Fr(18)61 b Fx(&&)235 b(&)333
+b(&)19 b(S^N)f(X)i(\\bTo)e(\(-2,6\))f(<g)i(\\hx{.2})e(\\\\)-95
+1029 y Fr(19)61 b Fx(\\endDg)-95 1079 y Fr(20)g Fx($$)1161
+1214 y
+gsave
+ 1161 1214 a 1161 1214 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1103 1224
+a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-16 b Fv(\021)1161
+1214 y
+grestore
+ 1161 1214 a 1161 1214 a
+gsave
+ 1161 1214 a 1161 1214
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1163 1201 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1201 a 1128 1193 a Fu(g)1144
+1197 y Fe(p)p Fp(+)p Fe(q)1163 1214 y
+grestore
+ 1163 1214 a 1007
+1355 a
+gsave
+ 1007 1355 a 1007 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1355 a 928 1366 a
+Fw(\001)7 b(\001)g(\001)17 b(\000)-23 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)1007 1355 y
+grestore
+ 1007 1355 a 1314 1355 a
+gsave
+ 1314 1355
+a 1314 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1355 a 1236 1366 a Fw(\001)7 b(\001)g(\001)16
+b(\000)-23 b(\000)-8 b(\000)f(\000)-22 b Fv(\021)1314
+1355 y
+grestore
+ 1314 1355 a 1161 1497 a
+gsave
+ 1161 1497 a 1161 1497
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1103 1507 a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-15
+b Fv(\021)1161 1497 y
+grestore
+ 1161 1497 a 1161 1497 a
+gsave
+ 1161 1497
+a 1161 1497 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1163 1485 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1485 a 1129
+1476 a Fu(g)1145 1480 y Fe(q)q Fp(+1)1163 1497 y
+grestore
+ 1163
+1497 a 1007 1591 a
+gsave
+ 1007 1591 a 1007 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1591
+a 961 1602 a Fw(\000)i(\000)h Fv(\021)1007 1591 y
+grestore
+ 1007
+1591 a 1314 1591 a
+gsave
+ 1314 1591 a 1314 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1591
+a 1271 1602 a Fw(\000)-20 b(\000)-8 b(\000)-19 b Fv(\021)1314
+1591 y
+grestore
+ 1314 1591 a 864 1450 a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864
+1450 a 644 1460 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)e Fv(\021)864 1450 y
+grestore
+ 864 1450 a 864 1450
+a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864 1450 a 869 1437 a
+currentpoint currentpoint translate -7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 869 1437
+a 835 1429 a Fu(f)851 1433 y Fe(p)869 1450 y
+grestore
+ 869 1450
+a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836 1686 a 785 1696
+a Fw(\000)-16 b(\000)-9 b(\000)g(\000)-16 b Fv(\021)836
+1686 y
+grestore
+ 836 1686 a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836
+1686 a 845 1673 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 845 1673 a 835 1667 a Fu(f)845 1686
+y
+grestore
+ 845 1686 a 1161 1686 a
+gsave
+ 1161 1686 a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161
+1686 a 1109 1696 a Fw(\000)c(\000)-10 b(\000)h(\000)h(\000)-20
+b Fv(\021)1161 1686 y
+grestore
+ 1161 1686 a 1161 1686 a
+gsave
+ 1161 1686
+a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1686 a 1176 1673 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1176 1673 a 1160
+1665 a Fu(g)1176 1669 y Fe(q)1176 1686 y
+grestore
+ 1176 1686 a
+1314 1875 a
+gsave
+ 1314 1875 a 1314 1875 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1875 a 1177
+1885 a Fw(\000)k(\000)-9 b(\000)-16 b Fv(\021)18 b Fw(\001)7
+b(\001)g(\001)17 b(\000)-16 b(\000)-9 b(\000)-15 b Fv(\021)1314
+1875 y
+grestore
+ 1314 1875 a 1314 2158 a
+gsave
+ 1314 2158 a 1314 2158
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 2158 a 1266 2169 a Fw(\000)-22 b(\000)-8 b(\000)-20
+b Fv(\021)1314 2158 y
+grestore
+ 1314 2158 a 1146 1969 a
+gsave
+ 1146 1969
+a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 871 1980 a Fw(\000)i(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-16 b Fv(\021)1146 1969 y
+grestore
+ 1146 1969 a 1146 1969 a
+gsave
+ 1146
+1969 a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 1137 1982 a
+currentpoint currentpoint translate 8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1137 1982
+a 1120 1994 a Fu(g)1137 1969 y
+grestore
+ 1137 1969 a 940 1230 a
+Fu(N)s Fr(+)p Fu(t)1007 1222 y Ft(0)1020 1224 y FB(X)1054
+1230 y Fu(p)180 b(N)1283 1224 y FB(X)1317 1230 y Fu(p)p
+Fr(+)p Fu(q)940 1514 y(N)s Fr(+)p Fu(t)1007 1505 y Ft(0)1021
+1507 y FB(X)1055 1513 y Fr(1)1251 1514 y Fu(N)1283 1507
+y FB(X)1317 1513 y Fu(q)q Fr(+1)572 1696 y FB(S)599 1679
+y Fu(N)s Fr(+)p Fu(t)p Fr(+)p Fu(t)704 1667 y Ft(0)719
+1696 y FB(X)h(S)961 1679 y Fu(N)s Fr(+)p Fu(t)1028 1667
+y Ft(0)1042 1696 y FB(X)1272 1703 y Fu(N)1304 1696 y
+FB(X)1338 1702 y Fu(q)1272 2081 y(N)1304 2074 y FB(X)1338
+2080 y Fr(1)1266 2263 y FB(S)1293 2246 y Fu(N)1325 2263
+y FB(X)954 2770 y FF(64)p eop
+%%Page: 65 10
+65 64 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(P)l(.)16 b(J.)g(Hilton)d(and)j
+(U.)f(Stamm)o(bac)o(h)p FF(,)d FC(A)i(Course)h(in)g(Homolo)n(gic)n(al)f
+(A)o(lgebr)n(a)p FF(,)f(page)h(149.)-79 133 y Fr(1)62
+b Fx($$)-79 183 y Fr(2)g Fx(\\let~\\tild)o(e)-79 232
+y Fr(3)g Fx(\\cellwidth)o(+=)o(17m)o(m)16 b(\\columndist)o(+=)o(12m)o
+(m)-79 282 y Fr(4)62 b Fx(\\gravitate)o(le)o(ft)-79 332
+y Fr(5)g Fx(\\Dg)-79 382 y Fr(6)101 b Fx(&)118 b(&)19
+b(K)254 b(&)20 b(\\rMono)95 b(&&)19 b(E_1^\\alpha)o(&)e(\\rEpi^{\\)o
+(eta)o('}&)o(&)f(A')117 b(\\\\)-79 432 y Fr(7)101 b Fx(&)19
+b(\\ldTo&)292 b(&)235 b(&&)215 b(&)118 b(&)19 b(\\ruBar)213
+b(\\\\)-79 482 y Fr(8)62 b Fx(~K&)117 b(&)19 b(\\dBar\\rMo)o(no\\)o(br)
+o(&)e(~E_1^\\al)o(pha)o(&&)f(\\dTo\\rEpi^)o({~\\)o(et)o(a'})o(\\b)o(r&)
+-79 531 y Fr(9)1102 b Fx(A')430 b(\\\\)-95 581 y Fr(10)61
+b Fx(\\dBar&)c(&)293 b(&)235 b(&&)215 b(&)118 b(&)78
+b(&)19 b(\\dTo>\\alp)o(ha)d(\\\\)-95 631 y Fr(11)100
+b Fx(&)118 b(&)19 b(K)254 b(&)20 b(\\rMono\\d)o(To\\)o(br&)o(&)c
+(E_1\\ax{2mm})o(&)g(\\rEpi\\dTo\\b)o(r&)o(&)h(A)97 b(\\\\)-95
+681 y Fr(12)j Fx(&)19 b(\\ldTo&)292 b(&)118 b(&)19 b(\\ldTo&)213
+b(&)118 b(&)19 b(\\ldBar)213 b(\\\\)-95 731 y Fr(13)61
+b Fx(~K&)117 b(&)19 b(\\rMono)154 b(&)20 b(~E_1)e(&)h(\\rEpi_{~\\)o
+(eta)o(}&)55 b(&)20 b(A)450 b(\\\\)-95 780 y Fr(14)61
+b Fx(\\endDg)-95 830 y Fr(15)g Fx($$)931 969 y
+gsave
+ 931 969
+a 931 969 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 969 a 746 980 a Fv(\016)-16 b Fw(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-19 b Fv(\021)931 969 y
+grestore
+ 931 969 a
+1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 969 a 1181 980
+a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)-22 b Fv(\021)-30 b(\014)1346
+969 y
+grestore
+ 1346 969 a 1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346
+969 a 1349 957 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1349 957 a 1334 951 a Fu(\021)1352 939
+y Ft(0)1349 969 y
+grestore
+ 1349 969 a 559 1064 a
+gsave
+ 559 1064 a 559
+1064 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1064 a 402 1074 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)559
+1064 y
+grestore
+ 559 1064 a 1377 1064 a
+gsave
+ 1377 1064 a 1377 1064 a
+currentpoint currentpoint translate 2983488 neg 5407569 atan rotate
+neg exch neg exch translate
+
+1377 1064 a 1214 1074 a FF(=)-23 b(=)-9 b(=)h(=)f(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)g(=)-22 b(=)1377 1064 y
+grestore
+ 1377 1064 a 719
+1158 a
+gsave
+ 719 1158 a 719 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 719 1158 a 548 1169 a FF(=)i(=)-9
+b(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)h(=)f(=)-20 b(=)719
+1158 y
+grestore
+ 719 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601
+1158 a 400 1158 a
+1 setgray
+ 400 1158 a 427 1169 338 21 v 601 1158
+a
+grestore
+ 601 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1158
+a 427 1169 a Fv(\016)k Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20 b
+Fv(\021)601 1158 y
+grestore
+ 601 1158 a 1144 1158 a
+gsave
+ 1144 1158 a
+1144 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1144 1158 a 984 1169 a Fw(\000)h(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-18 b Fv(\021)1144 1158 y
+grestore
+ 1144 1158 a 1003 1158
+a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 801 1158 a
+1 setgray
+ 801
+1158 a 838 1169 338 21 v 1003 1158 a
+grestore
+ 1003 1158 a 1003
+1158 a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 838 1169 a
+Fw(\000)-23 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)-30
+b(\014)1003 1158 y
+grestore
+ 1003 1158 a 1003 1158 a
+gsave
+ 1003 1158
+a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 1006 1146 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1006 1146 a 994
+1140 a Fr(~)-20 b Fu(\021)1009 1128 y Ft(0)1007 1158
+y
+grestore
+ 1007 1158 a 400 1347 a
+gsave
+ 400 1347 a 400 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 400 1347
+a 229 1358 a FF(=)-13 b(=)k(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)c
+(=)400 1347 y
+grestore
+ 400 1347 a 1548 1158 a
+gsave
+ 1548 1158 a 1548
+1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1378 1169 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)1548 1158 y
+grestore
+ 1548 1158 a 1548 1158 a
+gsave
+ 1548 1158
+a 1548 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1544 1146 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1544 1146 a 10
+x Fu(\013)1544 1158 y
+grestore
+ 1544 1158 a 931 1347 a
+gsave
+ 931 1347
+a 931 1347 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 1347 a 746 1358 a Fv(\016)f Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-17 b Fv(\021)931 1347 y
+grestore
+ 931 1347
+a 801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 612 1347
+a
+1 setgray
+ 612 1347 a 641 1358 313 21 v 801 1347 a
+grestore
+ 801 1347 a
+801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 641 1358
+a Fw(\000)-12 b(\000)j(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)e Fv(\021)801 1347 y
+grestore
+ 801 1347 a 1346
+1347 a
+gsave
+ 1346 1347 a 1346 1347 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 1347 a 1177 1358
+a Fw(\000)-18 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-17 b Fv(\021)-30
+b(\014)1346 1347 y
+grestore
+ 1346 1347 a 1206 1347 a
+gsave
+ 1206 1347
+a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1017 1347 a
+1 setgray
+ 1017 1347 a 1035
+1358 333 21 v 1206 1347 a
+grestore
+ 1206 1347 a 1206 1347 a
+gsave
+ 1206
+1347 a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1035 1358 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)d Fv(\021)1206 1347 y
+grestore
+ 1206 1347 a 559 1442
+a
+gsave
+ 559 1442 a 559 1442 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1442 a 402 1452 a Fw(\000)g(\000)j(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)559 1442 y
+grestore
+ 559 1442 a 973 1442 a
+gsave
+ 973 1442 a 973
+1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 973 1442 a 814 1452 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)973 1442 y
+grestore
+ 973 1442 a 1377 1442 a
+gsave
+ 1377 1442
+a 1377 1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 1377 1442 a 1207 1452 a FF(=)j(=)-9 b(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)h(=)f(=)g(=)-17 b(=)1377 1442 y
+grestore
+ 1377 1442
+a 601 1536 a
+gsave
+ 601 1536 a 601 1536 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1536 a 427 1547
+a Fv(\016)j Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-18 b Fv(\021)601
+1536 y
+grestore
+ 601 1536 a 1003 1536 a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+
+1003 1536 a 834 1547 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b Fv(\021)-30 b(\014)1003 1536 y
+grestore
+ 1003 1536 a 1003 1536
+a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1536 a 1008 1549 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1008
+1549 a 1002 1568 a Fr(~)-20 b Fu(\021)1008 1536 y
+grestore
+ 1008
+1536 a 699 980 a FB(K)382 b(E)1149 963 y Fu(\013)1147
+990 y Fr(1)1527 980 y FB(A)1558 963 y Fs(0)392 1158 y
+FF(~)381 1169 y FB(K)783 1158 y FF(~)773 1169 y FB(E)806
+1152 y Fu(\013)804 1179 y Fr(1)1184 1169 y FB(A)1215
+1152 y Fs(0)699 1358 y FB(K)j(E)1150 1364 y Fr(1)1532
+1358 y FB(A)392 1536 y FF(~)381 1547 y FB(K)786 1536
+y FF(~)777 1547 y FB(E)808 1553 y Fr(1)1190 1547 y FB(A)954
+2770 y FF(65)p eop
+%%Page: 66 11
+66 65 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(650.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\cellpush=)o(4p)o(t)-79
+232 y Fr(3)g Fx(\\let\\label)o(st)o(yle)o(\\t)o(ext)o(sty)o(le)-79
+282 y Fr(4)g Fx(\\lpad=1in)16 b(\\bpad=1cm)-79 332 y
+Fr(5)62 b Fx(\\Graph{4in)o(,4)o(}{3)o(.5)o(in,)o(1in)o(})-79
+382 y Fr(6)g Fx(\\To)18 b(\(0,0\))g(\(3.3,0\))76 b(\\hd{p})-79
+432 y Fr(7)62 b Fx(\\To)18 b(\(0,0\))g(\(0,3.5\))76 b(\\hd{q})-79
+482 y Fr(8)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,3.25\))g(\\Line)h(\(0,1\))
+f(\(3.2,1\))g(\\Dot)h(\(2,1\))-79 531 y Fr(9)62 b Fx(\\Dot)18
+b(\(0,0\))-95 581 y Fr(10)61 b Fx(\045)-95 631 y Fr(11)g
+Fx(\\Dot)18 b(\(2,0\))g(\\Dot)g(\(2.25,0\))e(\\Dot)i(\(2.5,0\))f(\\Dot)
+h(\(2.75,0\))f(\\Dot)h(\(3,0\))-95 681 y Fr(12)61 b Fx(\045)-95
+731 y Fr(13)g Fx(\\Dot)18 b(\(0,1\))g(\\Dot)g(\(0,1.25\))e(\\Dot)i
+(\(0,1.5\))f(\\Dot)h(\(0,1.75\))-95 780 y Fr(14)61 b
+Fx(\\Dot)18 b(\(0,2\))g(\\Dot)g(\(0,2.25\))e(\\Dot)i(\(0,2.5\))f(\\Dot)
+h(\(0,2.75\))f(\\Dot)h(\(0,3\))-95 830 y Fr(15)61 b Fx(\045)-95
+880 y Fr(16)g Fx(\\Line)18 b(\(0,2.25\))e(\(2.5,0\))37
+b(^{d^p})17 b(:{.35,5pt})f(\\ro)-95 930 y Fr(17)61 b
+Fx(\\Line)18 b(\(0,3\))f(\(3,0\))38 b(^{p)18 b(+)h(q)h(=)f(m)g(+)g(n})g
+(:{.35,5pt})d(\\ro)-95 980 y Fr(18)61 b Fx(\045)-95 1029
+y Fr(19)g Fx(\\Math{q)17 b(=)i(n})g(\(-.1,1\))e(*1)97
+b(\\Math{E_{0)o(,p-)o(1})o(^2)16 b(=)j(E_{0,p-1}^p)o(})d(\(-.1,2.25\))g
+(*1)-95 1079 y Fr(20)61 b Fx(\\Math{p)17 b(=)i(m})g(\(2,-.2\))e(*{.55})
+g(\\Math{E_{p)o(,0})o(^2)f(=)j(E_{p,0}^p})d(\(2.75,-.2\))g(*{.6})-95
+1129 y Fr(21)61 b Fx(\\endGraph)-95 1179 y Fr(22)g Fx($$)1020
+2324 y
+gsave
+ 1020 2324 a 1020 2324 a
+currentpoint currentpoint translate 0 neg 15629758 atan rotate neg
+exch neg exch translate
+ 1020 2324 a 525 2335 a
+Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)-21 b Fv(\021)1020 2324 y
+grestore
+ 1020 2324 a 1505
+2335 a FB(p)525 1799 y
+gsave
+ 525 1799 a 525 1799 a
+currentpoint currentpoint translate 16577001 neg 0 atan rotate neg
+exch neg exch translate
+ 525 1799
+a 0 1810 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)525 1799
+y
+grestore
+ 525 1799 a 515 1285 a FB(q)1125 1837 y
+gsave
+ 1125 1837 a
+1125 1837 a
+currentpoint currentpoint translate 15392929 neg 0 atan rotate neg
+exch neg exch translate
+ 1125 1837 a 637 1847 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)
+-21 b(\000)1125 1837 y
+grestore
+ 1125 1837 a 1005 2024 a
+gsave
+ 1005 2024
+a 1005 2024 a
+currentpoint currentpoint translate 0 neg 15156100 atan rotate neg
+exch neg exch translate
+ 1005 2024 a 525 2035 a Fw(\000)j(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1005 2024 y
+grestore
+ 1005 2024 a 1125 2024 a
+gsave
+ 1125 2024
+a 1125 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2024 a 1115 2035 a Fw(\017)1125 2024
+y
+grestore
+ 1125 2024 a 525 2324 a
+gsave
+ 525 2324 a 525 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2324
+a 515 2335 a Fw(\017)525 2324 y
+grestore
+ 525 2324 a 1125 2324
+a
+gsave
+ 1125 2324 a 1125 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2324 a 1115 2335 a Fw(\017)1125
+2324 y
+grestore
+ 1125 2324 a 1200 2324 a
+gsave
+ 1200 2324 a 1200 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1200 2324 a 1190 2335 a Fw(\017)1200 2324 y
+grestore
+ 1200 2324
+a 1275 2324 a
+gsave
+ 1275 2324 a 1275 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1275 2324 a 1265
+2335 a Fw(\017)1275 2324 y
+grestore
+ 1275 2324 a 1350 2324 a
+gsave
+ 1350
+2324 a 1350 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350 2324 a 1340 2335 a Fw(\017)1350
+2324 y
+grestore
+ 1350 2324 a 1425 2324 a
+gsave
+ 1425 2324 a 1425 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1425 2324 a 1415 2335 a Fw(\017)1425 2324 y
+grestore
+ 1425 2324
+a 525 2024 a
+gsave
+ 525 2024 a 525 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2024 a 515 2035
+a Fw(\017)525 2024 y
+grestore
+ 525 2024 a 525 1949 a
+gsave
+ 525 1949 a
+525 1949 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1949 a 515 1960 a Fw(\017)525 1949 y
+grestore
+ 525
+1949 a 525 1874 a
+gsave
+ 525 1874 a 525 1874 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1874 a 515
+1885 a Fw(\017)525 1874 y
+grestore
+ 525 1874 a 525 1799 a
+gsave
+ 525 1799
+a 525 1799 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1799 a 515 1810 a Fw(\017)525 1799 y
+grestore
+
+525 1799 a 525 1724 a
+gsave
+ 525 1724 a 525 1724 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1724
+a 515 1735 a Fw(\017)525 1724 y
+grestore
+ 525 1724 a 525 1649 a
+gsave
+
+525 1649 a 525 1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1649 a 515 1660 a Fw(\017)525
+1649 y
+grestore
+ 525 1649 a 525 1574 a
+gsave
+ 525 1574 a 525 1574 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1574 a 515 1585 a Fw(\017)525 1574 y
+grestore
+ 525 1574 a 525 1499
+a
+gsave
+ 525 1499 a 525 1499 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1499 a 515 1510 a Fw(\017)525
+1499 y
+grestore
+ 525 1499 a 525 1424 a
+gsave
+ 525 1424 a 525 1424 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1424 a 515 1435 a Fw(\017)525 1424 y
+grestore
+ 525 1424 a 900 1987
+a
+gsave
+ 900 1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 396 1997 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-16 b(\000)900 1987 y
+grestore
+ 900 1987 a 900 1987 a
+gsave
+ 900
+1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 728 1954 a FB(d)750 1939
+y Fu(p)749 1987 y
+grestore
+ 749 1987 a 975 1874 a
+gsave
+ 975 1874 a 975
+1874 a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 339 1885 a Fw(\000)k(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)
+975 1874 y
+grestore
+ 975 1874 a 975 1874 a
+gsave
+ 975 1874 a 975 1874
+a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 655 1833 a FB(p)9 b FF(+)g FB(q)k FF(=)f
+FB(m)d FF(+)h FB(n)784 1874 y
+grestore
+ 784 1874 a 495 2024 a
+gsave
+ 495
+2024 a 495 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 2024 a 395 2035 a FB(q)i FF(=)g
+FB(n)495 2024 y
+grestore
+ 495 2024 a 495 1649 a
+gsave
+ 495 1649 a 495
+1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 1649 a 202 1660 a FB(E)235 1645 y Fr(2)233
+1670 y(0)p Fu(;p)p Fs(\000)p Fr(1)332 1660 y FF(=)g FB(E)409
+1640 y Fu(p)407 1671 y Fr(0)p Fu(;p)p Fs(\000)p Fr(1)495
+1649 y
+grestore
+ 495 1649 a 1125 2384 a
+gsave
+ 1125 2384 a 1125 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+
+1125 2384 a 1063 2395 a FB(p)f FF(=)h FB(m)1125 2384
+y
+grestore
+ 1125 2384 a 1350 2384 a
+gsave
+ 1350 2384 a 1350 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350
+2384 a 1225 2395 a FB(E)1258 2380 y Fr(2)1256 2405 y
+Fu(p;)p Fr(0)1313 2395 y FF(=)g FB(E)1390 2375 y Fu(p)1388
+2406 y(p;)p Fr(0)1350 2384 y
+grestore
+ 1350 2384 a 954 2770 a FF(66)p
+eop
+%%Page: 67 12
+67 66 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\rotatedla)o(be)o(ls)16 b(\\let\\label)o(sty)o(le)o
+(\\te)o(xt)o(sty)o(le)g(\\scale=2)-79 141 y Fr(3)62 b
+Fx(\\Diagram)-79 191 y Fr(4)82 b Fx(&)19 b(&)g(F\(3,2\))e(\\aLine)h
+(\(1,-4\))f(>{F\(3,1,1)o(\)})f(:{.4})i(\\br)38 b(\\\\)-79
+241 y Fr(5)82 b Fx(&)19 b(&)156 b(&)20 b(\\rdLine)d(>{F\(1,2,)o(2\)})f
+(\\pt{right)o(,.7)o(5})g(\\\\)-79 291 y Fr(6)82 b Fx(&)19
+b(&)156 b(&)177 b(&)19 b(F\(1,4\))370 b(\\\\)-79 340
+y Fr(7)62 b Fx(F\(2,3\))17 b(\\aDash)h(\(4,1\))f(^{F\(1,1,3\))o(})g
+(:{.4})g(\\pp)156 b(\\\\)-79 390 y Fr(8)82 b Fx(&)19
+b(&)156 b(&)20 b(F\(4,1\))d(\\aLine)g(\(1,2\))h(>{F\(1,3,1)o(\)})75
+b(\\\\)-79 440 y Fr(9)62 b Fx(\\Modify)-95 490 y Fr(10)f
+Fx(\\Pt{top})17 b(\(2,4\))g(\\Pt{b1})g(\(0,1\))h(\\Pt{b2})f(\(3,0\))-95
+540 y Fr(11)61 b Fx(\\Pt{LeftF})16 b(\(1.65,2\))g(\\Pt{BackF})g
+(\(2,2.5\))-95 589 y Fr(12)61 b Fx(\\Pt{Bottom)o(F})16
+b(\(2.5,1\))h(\\Pt{Right)o(F})f(\(3.1,2.25\))-95 639
+y Fr(13)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{b2})271
+b(\\pt{bottom,)o(.8)o(})-95 689 y Fr(14)61 b Fx(\\Nul)38
+b(\\pt{Botto)o(mF)o(})17 b(\\pt{botto)o(m})94 b(\\pt{BottomL)o(,2)o(})
+-95 739 y Fr(15)61 b Fx(\\Dash)18 b(\\pt{Botto)o(mF)o(})f(\\pt{botto)o
+(m})94 b(\\tl\\circ)17 b(\\dt{3pt})-95 789 y Fr(16)61
+b Fx(\\Line)18 b(\\pt{botto)o(m})e(\\pt{Bottom)o(L})94
+b(\\hd{F\(1,1,2)o(,1)o(\)})-95 839 y Fr(17)61 b Fx(\\Line)18
+b(\\pt{b1})f(\\pt{b2})g(_{F\(2,2,)o(1\)})35 b(\\br)-95
+888 y Fr(18)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{top})251
+b(\\pt{left,.2)o(5})16 b(\\pt{back,.)o(75)o(})-95 938
+y Fr(19)61 b Fx(\\Nul)38 b(\\pt{BackF)o(})16 b(\\pt{back})173
+b(\\pt{BackL,2)o(})-95 988 y Fr(20)61 b Fx(\\Nul)38 b(\\pt{LeftF)o(})16
+b(\\pt{left})173 b(\\pt{LeftL,2)o(})-95 1038 y Fr(21)61
+b Fx(\\Dash)18 b(\\pt{BackF)o(})e(\\pt{back})173 b(\\tl\\circ)17
+b(\\dt{3pt})-95 1088 y Fr(22)61 b Fx(\\Line)18 b(\\pt{back})e
+(\\pt{BackL)o(})173 b(\\hd{F\(1,1,1)o(,2)o(\)})-95 1137
+y Fr(23)61 b Fx(\\Line)18 b(\\pt{b1})f(\\pt{top})f(<{F\(2,1,2\))o(})g
+(\\br)-95 1187 y Fr(24)61 b Fx(\\Line)18 b(\\pt{LeftF)o(})e
+(\\pt{LeftL})153 b(\\tl\\bullet)16 b(\\hd{F\(2,1,)o(1,1)o(\)})g(\\jt)j
+(\\br)-95 1237 y Fr(25)61 b Fx(\\Nul)38 b(\\pt{Right)o(F})16
+b(\\pt{right})133 b(\\pt{RightL,)o(3})-95 1287 y Fr(26)61
+b Fx(\\Line)18 b(\\pt{Right)o(F})e(\\pt{RightL)o(})114
+b(\\tl\\bullet)16 b(\\hd{F\(1,2,)o(1,1)o(\)})g(\\jt)j(\\br)-95
+1337 y Fr(27)61 b Fx(\\endDiagra)o(m)-95 1386 y Fr(28)g
+Fx($$)1029 2114 y
+gsave
+ 1029 2114 a 1029 2114 a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a
+608 2124 a Fv(\013)-8 b(\013)f(\013)g(\013)g(\013)g(\013)g(\013)g(\013)
+g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f
+(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f(\013)g(\013)1029
+2114 y
+grestore
+ 1029 2114 a 1029 2114 a
+gsave
+ 1029 2114 a 1029 2114
+a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a 863 2091 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(3\))945 2114 y
+grestore
+ 945 2114 a 1147 1996 a
+gsave
+ 1147
+1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 660 1996 a
+1 setgray
+ 660 1996 a
+690 2006 915 21 v 1147 1996 a
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+
+1147 1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 690 2006 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1147 1996 y
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+ 1147 1996
+a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 973 1973 a FB(F)6 b FF(\(3)p
+FB(;)h FF(1)p FB(;)g FF(1\))1055 1996 y
+grestore
+ 1055 1996 a 1265
+1760 a
+gsave
+ 1265 1760 a 1265 1760 a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 968 1770 a
+Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-17 b(\000)1265
+1760 y
+grestore
+ 1265 1760 a 1265 1760 a
+gsave
+ 1265 1760 a 1265 1760
+a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 1183 1737 a FB(F)6 b FF(\(1)p FB(;)h FF(2)p
+FB(;)g FF(2\))1265 1760 y
+grestore
+ 1265 1760 a 1383 2232 a
+gsave
+ 1383
+2232 a 1383 2232 a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1150 2242 a Fw(\000)-12
+b(\000)j(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)1383
+2232 y
+grestore
+ 1383 2232 a 1383 2232 a
+gsave
+ 1383 2232 a 1383 2232
+a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1301 2276 a FB(F)6 b FF(\(1)p FB(;)h FF(3)p
+FB(;)g FF(1\))1383 2232 y
+grestore
+ 1383 2232 a 966 1534 a FB(F)f
+FF(\(3)p FB(;)h FF(2\))1439 2006 y FB(F)f FF(\(1)p FB(;)h
+FF(4\))494 2242 y FB(F)f FF(\(2)p FB(;)h FF(3\))1202
+2479 y FB(F)f FF(\(4)p FB(;)h FF(1\))910 2350 y
+gsave
+ 910 2350
+a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 910 2350 a
+grestore
+ 910 2350 a 1113 2320
+a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320 a 1113 2320 a
+grestore
+ 1113
+2320 a 1113 2320 a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320
+a 1025 2330 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)g(\013)1113
+2320 y
+grestore
+ 1113 2320 a 1136 2242 a Fw(\016)1050 2484 y
+gsave
+ 1050
+2484 a 1050 2484 a
+currentpoint currentpoint translate -2405159 neg -921240 atan rotate
+neg exch neg exch translate
+ 1050 2484 a 981 2494 a Fw(\000)-23
+b(\000)-9 b(\000)g(\000)h(\000)-22 b(\000)1050 2484 y
+grestore
+
+1050 2484 a 920 2570 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(2)p FB(;)g FF(1\))910 2350 y
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 537 2350 a
+1 setgray
+ 537 2350 a 614 2361 597
+21 v 910 2350 a
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 614 2361 a Fw(\000)-16 b(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b(\000)910 2350 y
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910
+2350 a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 830 2394 a FB(F)6 b FF(\(2)p
+FB(;)h FF(2)p FB(;)g FF(1\))912 2350 y
+grestore
+ 912 2350 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 792 1878 a
+grestore
+ 792
+1878 a 965 1796 a
+gsave
+ 965 1796 a 965 1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 965
+1796 a
+grestore
+ 965 1796 a 815 2018 a
+gsave
+ 815 2018 a 815 2018 a
+currentpoint currentpoint translate -713450 neg -4145418 atan rotate
+neg exch neg exch translate
+ 815
+2018 a 815 2018 a
+grestore
+ 815 2018 a 965 1796 a
+gsave
+ 965 1796 a 965
+1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 865 1807 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)965 1796 y
+grestore
+ 965 1796 a 1018 1888 a
+Fw(\016)845 1643 y
+gsave
+ 845 1643 a 845 1643 a
+currentpoint currentpoint translate 2271420 neg -1768140 atan rotate
+neg exch neg exch translate
+ 845 1643 a 767
+1653 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-14
+b(\000)845 1643 y
+grestore
+ 845 1643 a 688 1581 a FB(F)6 b FF(\(1)p
+FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g FF(2\))792 1878 y
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 367 1878 a
+1 setgray
+ 367 1878
+a 400 1888 786 21 v 792 1878 a
+grestore
+ 792 1878 a 792 1878 a
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 400 1888 a Fw(\000)-14
+b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)d(\000)792 1878 y
+grestore
+ 792 1878 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 710 1855 a FB(F)6
+b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(2\))792 1878 y
+grestore
+ 792
+1878 a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 441
+2039 a
+1 setgray
+ 441 2039 a 437 2049 402 21 v 696 2039 a
+grestore
+ 696 2039
+a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 437 2049
+a Fw(\000)-20 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)696 2039 y
+grestore
+ 696 2039 a 936 2006 a Fw(\017)344 2093
+y FB(F)6 b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g
+FF(1\))1329 1901 y
+gsave
+ 1329 1901 a 1329 1901 a
+currentpoint currentpoint translate 1139925 neg 1284136 atan rotate
+neg exch neg exch translate
+ 1329 1901
+a 1329 1901 a
+grestore
+ 1329 1901 a 1397 1841 a
+gsave
+ 1397 1841 a 1397
+1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1252 1841 a
+1 setgray
+ 1252 1841 a 1248 1851
+254 21 v 1397 1841 a
+grestore
+ 1397 1841 a 1397 1841 a
+gsave
+ 1397 1841
+a 1397 1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1248 1851 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-13
+b(\000)1397 1841 y
+grestore
+ 1397 1841 a 1278 1947 a Fw(\017)1403
+1755 y FB(F)6 b FF(\(1)p FB(;)h FF(2)p FB(;)g FF(1)p
+FB(;)g FF(1\))954 2770 y(67)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/diagrams/kuvio/examples.ps b/macros/generic/diagrams/kuvio/examples.ps
new file mode 100644
index 0000000000..7b547ab9eb
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/examples.ps
@@ -0,0 +1,5423 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: tdwk.dvi
+%%Pages: 12 0
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -D300 tdwk -o
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1996.06.09:1515
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 300 300 (tdwk.dvi)
+@start /Fa 1 66 df<000C0000000C0000000C0000001E0000001E0000002F00000027
+0000002700000043800000438000004380000081C0000081C0000181E0000100E0000100
+E00003FFF000020070000200700004003800040038000C003C0008001C0008001C003C00
+1E00FF00FFC01A1A7E991E>65 D E /Fb 3 84 df<000000800000038000000780000007
+8000000F8000000F80000017800000378000002780000067800000478000008780000187
+8000010780000307800002078000040780000C078000180780001FFF80003FFF80006007
+C000C007C061C003C0738003C07F0003E0FE0003F87C0001E0380000001D1D809B1F>65
+D<0006000001000E000002000E000006000F00000E000F00001E001F00003E001700003C
+001700007C00178000FC00178001BC00238003BC002380073C0023C00E3C0043C01C3800
+41C038380041C070780081E060780081E0C0780080F180780100F7007801007F00780200
+7E007866007C0078FC0030007CFC0000007FF80000003C7000000000281B7E992E>77
+D<0003F8001FFC00307C00603C01C03C01C03003C00003C00003E00003F00001FC0000FF
+00003F80000FC00007E00003F00801F03000F07000F0F000E0F000E0F801C0FC01007F06
+003FF8000FE000161A7F9917>83 D E /Fc 45 122 df<00FE000381000601800E03801C
+01001C00001C00001C00001C00001C0000FFFF801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
+D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<60F0F86808080810102040050B7D990B>39
+D<60F0F07010101020204040040B7D830B>44 D<FFC0FFC00A0280880D>I<07E01C3838
+1C300C700E60066006E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C381C1C3807E010187F9713>48 D<03000700FF00070007000700070007000700070007
+000700070007000700070007000700070007000700070007007FF80D187D9713>I<0F80
+106020304038803CC01CE01C401C003C003800380070006000C001800100020004040804
+100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C001C00
+38007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F9713>I<
+001800180038007800F800B8013802380238043808381838103820384038C038FFFF0038
+0038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000200020
+002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E187E9713
+>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E007E007
+600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008801080
+10002000400040008001800100030003000700060006000E000E000E000E000E00040010
+197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF8307C601E
+600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C600EE0
+06E006E007E007E0076007700F3017182707C700070006000E000C700C7018603030600F
+8010187F9713>I<FFFF80000E00E0000E0070000E0038000E001C000E000E000E000E00
+0E0007000E0007000E0007800E0007800E0007800E0007800E0007800E0007800E000780
+0E0007800E0007000E0007000E000F000E000E000E001C000E001C000E0078000E00E000
+FFFF8000191A7F991D>68 D<FFFFF80E00380E00180E00080E000C0E00040E00040E0004
+0E01000E01000E01000E03000FFF000E03000E01000E01000E01000E00020E00020E0002
+0E00060E00040E00040E000C0E003CFFFFFC171A7F991A>I<FFFFF80E00380E00180E00
+080E000C0E00040E00040E00040E01000E01000E01000E03000FFF000E03000E01000E01
+000E01000E00000E00000E00000E00000E00000E00000E00000E0000FFE000161A7F9919
+>I<003F020001C0C60003002E000E001E001C000E001C00060038000600780002007000
+020070000200F0000000F0000000F0000000F0000000F0000000F001FFC070000E007000
+0E0078000E0038000E001C000E001C000E000E000E000300160001C06600003F82001A1A
+7E991E>I<FFE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00080E00080E00080E00180E00100E
+00300E00700E00F0FFFFF0151A7F9918>76 D<7FFFFF00701C0700401C0100401C0100C0
+1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C000003FFE000191A7F991C>84 D<FFC0FF800F003C000F00100007
+0020000380200003C0400001C0800000E1800000F10000007A0000003E0000001C000000
+1E0000001E00000017000000278000004380000041C0000081E0000100E0000300700002
+007800040038000C001C001E003E00FF007FC01A1A7F991D>88 D<1FC000387000383800
+101C00001C00001C0003FC001E1C00381C00701C00E01C00E01C80E01C80E03C80705F80
+1F8F0011107F8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001CFC001D07001E03801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C
+00E01C01C01C01801E030019060010F800131A809915>I<07F81C1C381C70087000E000
+E000E000E000E000E0007000700438081C1807E00E107F8F11>I<003F00000700000700
+00070000070000070000070000070000070000070003E7000C1700180F00300700700700
+E00700E00700E00700E00700E00700E00700600700700700380F001C370007C7E0131A7F
+9915>I<07C01C3030187018600CE00CFFFCE000E000E000E0006000700438081C1807E0
+0E107F8F11>I<01F007180E381C101C001C001C001C001C001C00FFC01C001C001C001C
+001C001C001C001C001C001C001C001C001C001C00FF800D1A80990C>I<0FCF00187180
+3030007038007038007038007038003030001860002FC0006000006000007000003FF000
+3FFC001FFE00600F00C00300C00300C00300C00300600600381C0007E00011187F8F13>
+I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87
+001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C
+1C1C1CFF081A80990A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C1FC01C0F001C0C001C18001C20001C40001CE0001DE0001E70001C78001C
+38001C1C001C1E001C0F001C0F80FF9FE0131A809914>107 D<FC001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C00FF80091A80990A>I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C0FF9FE7F81D107F8F20>I<FC7C001D87001E03801E03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C0380FF9FF01410808F15>I<07E01C3830
+0C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<FCFC
+001D07001E03801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01
+801E03001D06001CF8001C00001C00001C00001C00001C00001C0000FF80001317808F15
+>I<FC781D9C1E1C1E081C001C001C001C001C001C001C001C001C001C001C00FF800E10
+808F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0
+408F800C107F8F0F>I<0800080008000800180018003800FFC038003800380038003800
+380038003800382038203820382018201C4007800B177F960F>I<FC1F801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E0B80
+03F3F01410808F15>I<FF0F803C07001C06001C04001C04000E08000E08000710000710
+0007100003A00003A00001C00001C00001C00000800011107F8F14>I<FE7F1F80381C07
+003C1C06001C0C04001C0E04000E1608000E1708000E170800072310000723900007A390
+0003C1A00003C1E0000180C0000180C0000180C00019107F8F1C>I<FE3F803C1E001C08
+000E10000F300007600003C00001C00001E00003E000027000043800083800181C00381E
+00FC3FC012107F8F14>I<FF0F803C07001C06001C04001C04000E08000E080007100007
+100007100003A00003A00001C00001C00001C000008000008000010000010000E10000E2
+0000E4000078000011177F8F14>I E /Fd 2 59 df<01F00FFC1C0C3000200021802E40
+3FC04000400080008000C00860303FE01F800E107F8F12>34 D<60F0F06004047D830B>
+58 D E /Fe 5 118 df<001800003800003800005800009800008C00010C00020C00060C
+0007FC00080600100600300600F81F80110E7E8D16>65 D<0808000000007098B0303060
+646870060F7D8E0B>105 D<39C02E302C30183018301830186038C03780300030006000
+F8000C0D7F880F>112 D<0E4031C060C04180C180C180C18047003B000300030006001F
+800A0D7E880E>I<6060B060B06030C060C060C060D063E03CE00C097D8812>117
+D E /Ff 10 128 df<00007F0000000003FFE00000000FFFF80000003FFFFE0000007F80
+FF000000FE003F800001FC001FC00003F00007E00007E00003F00007E00003F0000FC000
+01F8001F800000FC001F800000FC001F0000007C003F0000007E003E0000003E007E0000
+003F007E0000003F007E0000003F007C0000001F00FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FE0000003F807E0000003F007E0000003F007E0000
+003F007E0000003F003F0000007E003F0000007E003F800000FE001F800000FC001FC000
+01FC000FC00001F80007E00003F00007F00007F00003F8000FE00001FC001FC00000FE00
+3F8000007F80FF0000003FFFFE0000000FFFF800000003FFE0000000007F00000029347C
+B232>79 D<007F00F801FFC7FC03FFFFFC07FFFFFC0FC1FC001F80FC001F007C001F007C
+003E003E003E003E003E003E003E003E003E003E003E003E001F007C001F007C001F80FC
+000FC1F8000FFFF0001FFFE0001DFFC0001C7F00003C0000003C0000003C0000001E0000
+001FFFF8001FFFFF000FFFFF801FFFFFC03FFFFFE03E000FF07C0003F0FC0001F8F80000
+F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E03FE03FE00FFFFF8007FFFF
+0001FFFC00003FE0001E2E7E9E22>103 D<FCFCFCFCFCFC00000000000000000000007C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C06307CAF10>
+105 D<F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8007F00F800FE00F801FC00F803F800F807F000F80FE000F81FC000F8
+3F8000F83F0000F87E0000F8FC0000F9FC0000FBFC0000FFFC0000FFFE0000FFFF0000FF
+BF0000FF1F8000FE0FC000FC0FC000F807E000F803F000F803F000F801F800F800FC00F8
+00FC00F8007E00F8003F00F8003F00F8001F80F8000FC01A327BB121>107
+D<F83F80F8FFE0F9FFF0FBFFF8FF83F8FF00F8FE00FCFC007CFC007CFC007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007C161F7A9E23>110
+D<001FC00000FFF80001FFFC0007FFFF000FE03F801F800FC01F0007C03E0003E03E0003
+E07C0001F07C0001F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000
+F8F80000F8FC0001F87C0001F07C0001F03E0003E03F0007E01F0007C01FC01FC00FF07F
+8007FFFF0001FFFC0000FFF800001FC0001D1F7E9E22>I<F80FF83FF8FFF9FFFBFFFFF0
+FFC0FF80FF00FE00FC00FC00F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800101F7B9E17>114 D<01FF000FFFE01FFFF83FFFF87E
+01F87C0030F80000F80000F80000F80000FC00007E00007FE0003FFE001FFF800FFFE003
+FFF0003FF80003F80000FC00007C00007C00007C40007C60007CF800F8FE03F8FFFFF07F
+FFE01FFFC001FE00161F7E9E1A>I<F80001F0FC0003F07C0003E07C0003E03E0007C03E
+0007C03E0007C01F000F801F000F801F000F800F801F000F801F000FC01F0007C03E0007
+C03E0007E03E0003E07C0003E07C0001E0780001F0F80001F0F80000F0F00000F9F00000
+F9F0000079E0000079E000007DE000003FC000003FC000001F8000001F80001C1F7F9E1F
+>118 D<FC07E0FC07E0FC07E0FC07E0FC07E0FC07E0130679AF22>127
+D E /Fg 1 46 df<8000F000FC00FF00FFE0FFFEFFFEFFE0FF00FC00F00080000F0C6785
+2A>45 D E /Fh 1 18 df<000020000010000008000004FFFFFFFFFFFF00000400000800
+0010000020180A7E8B1D>17 D E /Fi 5 115 df<004001C003C0FDC001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C001C001C001C001C003E07FFF10247CA319>49
+D<01F8000607000801801000C02000E0400070400070800078F00078F80038F80038F800
+382000780000780000700000F00000E00001E00001C0000380000700000600000C000018
+0000300000600000C0000180000300080600080400080800181000103FFFF07FFFF0FFFF
+F015247EA319>I<01FC000607000801801000C02000E07000F07800F07C00F07800F030
+00F00000E00000E00001C00001C0000380000700001C0003FC000007000003800001C000
+00E00000F0000070000078200078700078F80078F80078F00078A000704000F04000E020
+01C018038006070001FC0015257EA319>I<01FC000707000C01801800C0300060300060
+700070600030E00038E00038E00038E00038E00038E00038E00038600030700070300060
+3800E01800C00C018007070001FC0015177E9619>111 D<0E1E00FE63001E47800E8780
+0F03000F00000F00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000F0000FFE00011177F9613>114
+D E /Fj 22 122 df<000007FC00001C02000030070000600F0000E00F0000C0060001C0
+000001C0000001C0000003800000038000000380000003800000038000007FFFFC007FFF
+F8000700380007003800070038000E0070000E0070000E0070000E0070000E00E0001C00
+E0001C00E0001C00E0001C01C0001C01C0001C01C2003801C20038038400380384003803
+84003001880070018800700070007000000060000000E0000000E0000000C0000070C000
+00F1800000F1800000630000003C000000202F82A41E>12 D<007C6000C2E00382E00701
+E00E01E00E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F007
+08F00708700E10700E10701E1030262018C6200F01C015177B961B>97
+D<03C0001FC0001FC0000380000380000380000380000700000700000700000700000E00
+000E00000E00000E7C001C86001D07001E03001C03803803803803803803803803807007
+80700780700780700780E00F00E00F00E00E00E01E00601C0060380060300030600010C0
+000F000011257BA418>I<003F0000E0800180400300E00701E00E03C01C01803C00003C
+0000380000780000780000780000700000F00000F0000070004070008070010030020038
+04001C380007C00013177B9618>I<00001E0000FE0001FE00001C00001C00001C00001C
+000038000038000038000038000070000070000070007C7000C2E00382E00701E00E01E0
+0E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F00708F00708
+700E10700E10701E1030262018C6200F01C017257BA41B>I<007C0001C2000701000E00
+801C00803C0100380100780200780C00FFF000F00000F00000F00000E00000E00000E000
+00E00080E00100E002007004003008001870000F800011177A9618>I<00001E00000063
+000000C7800000CF000001C6000001800000038000000380000003800000038000000700
+00000700000007000000070000007FF80000FFF000000E0000000E0000000E0000000E00
+00001C0000001C0000001C0000001C0000001C0000003800000038000000380000003800
+0000380000007000000070000000700000007000000070000000E0000000E0000000E000
+0000E0000000C0000001C000000180000071800000F1000000F3000000620000003C0000
+00192F82A410>I<000F8C00185C00705C00E03C01C03C01C0380380380780380780380F
+00700F00700F00700F00701E00E01E00E01E00E01E00E00E01C00E01C00E03C00605C003
+1B8001E380000380000380000700000700000700700E00F00C00F018006070003FC00016
+217E9618>I<00F00007F0000FF00000E00000E00000E00000E00001C00001C00001C000
+01C000038000038000038000038F800730600740700780700780700F00700E00700E0070
+0E00701C00E01C00E01C00E01C01C03801C03801C0380382380382700384700704700708
+700308E003106001E017257DA41B>I<00E000E001E000C0000000000000000000000000
+0000000000000E0033002380438043808700870087000E000E000E001C001C001C003800
+38403840708070807080710032001C000B247BA310>I<00F00007F00007F00000E00000
+E00000E00000E00001C00001C00001C00001C0000380000380000380000380F007010807
+021C07043C07083C0E10380E20000E40000E80001F00001FE0001C38001C1C00381C0038
+0E00380E10380E10701C20701C20701C20700C40E00C4060078016257DA418>107
+D<00E00FE00FE001C001C001C001C0038003800380038007000700070007000E000E000E
+000E001C001C001C001C0038003800380038007000700071007100E200E200E200640064
+0038000B257CA40D>I<1C07C03E00261830C18043203901C043403A01C043403A01C087
+803C01C087003801C087003801C007003801C00E007003800E007003800E007003800E00
+7007001C00E007001C00E007001C00E00E081C00E00E083801C00E103801C01C103801C0
+1C203801C00C207003800C40300180078025177B962B>I<1C07C0261830432038434038
+4340388780388700388700380700380E00700E00700E00700E00E01C00E01C00E01C01C1
+1C01C13801C23803823803843801847001883000F018177B961E>I<003F0000E1800180
+C00300E00700700E00701E00703C00703C00703800F07800F07800F07800F07001E0F001
+E0F001C07003C0700380700700300E00381C001C380007C00014177B961B>I<01C0F802
+610C04320E04340604380708700708700708700700700700E00F00E00F00E00F00E00F01
+C01E01C01E01C01C01C03C03803803C07003C06003C0C0072180071E000700000700000E
+00000E00000E00000E00001C00001C0000FFC000FFC00018217F961B>I<1C0F80261040
+4320E04341E04381E08781C08700008700000700000E00000E00000E00000E00001C0000
+1C00001C00001C000038000038000038000038000070000030000013177B9616>114
+D<003E0000C1000180800300400301C006038006010007000007800003F80003FE0001FF
+00001F00000780000380300180700180F00300F00300400600400C003038000FE0001217
+7D9616>I<00300070007000E000E000E000E001C001C001C07FFEFFFC03800380038007
+000700070007000E000E000E000E001C001C001C081C08381038103820184018C007000F
+217CA012>I<0E00301100702180704180704380708380E08380E08700E00700E00701C0
+0E01C00E01C00E01C01C03801C03801C03841C03841C07081C07081C07080C0B100E3310
+03C1E016177B961C>I<01E0F006310808321C083C3C103C3C1038382038002038000038
+0000700000700000700000700000E00000E00000E01000E01061C020F1C020F1C040E2E0
+80446100381E0016177D9618>120 D<0E00181300382180384180384380388380708380
+708700700700700700E00E00E00E00E00E00E01C01C01C01C01C01C01C01C01C03801C03
+801C07800C0F8006170003E700000700000700000E00600E00F01C00F01800E030008060
+0041C0003F000015217B961A>I E /Fk 60 126 df<001C003C007800F001E003C00780
+0F000E001C001C0038003800700070007000E000E000E000E000E000E000E000E000E000
+E000700070007000380038001C001C000E000F00078003C001E000F0007C003C001C0E2A
+78A41C>40 D<6000F00078003C001E000F00078003C001C000E000E00070007000380038
+0038001C001C001C001C001C001C001C001C001C001C0038003800380070007000E000E0
+01C003C007800F001E003C007800F00060000E2A7BA41C>I<00E00000E00000E00000E0
+0000E000C0E060F0E1E0FCE7E07EEFC01FFF0007FC0001F00007FC001FFF007EEFC0FCE7
+E0F0E1E0C0E06000E00000E00000E00000E00000E00013177C9B1C>I<001800003C0000
+3C00003C00003C00003C00003C00003C00003C00003C007FFFFCFFFFFEFFFFFE7FFFFC00
+3C00003C00003C00003C00003C00003C00003C00003C00003C0000180017187E9B1C>I<
+183E7E7F3F1F070E0E1CFCF8E0080D76851C>I<7FFFF0FFFFF8FFFFF87FFFF015047D91
+1C>I<3078FCFC7830060675851C>I<0000300000780000780000F80000F00001F00001E0
+0003E00003C00007C0000780000F80000F00001F00001E00001E00003E00003C00007C00
+00780000F80000F00001F00001E00003E00003C00003C00007C0000780000F80000F0000
+1F00001E00003E00003C00007C0000780000F80000F00000F0000060000015297DA41C>
+I<00F80003FE0007FF000F07801E03C01C01C03800E03800E0700070700070700070E000
+38E00038E00038E00038E00038E00038E00038E00038E00038E00038F000787000707000
+707800F03800E03C01E01C01C01E03C00F078007FF0003FE0000F80015217DA01C>I<00
+C00001C00001C00003C00007C0000FC0003FC000FDC000F9C00061C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF0011217AA01C>I<01F800
+07FF001FFF803E07C07801E07000F0E00070E00038F00038F00038600038000038000038
+0000700000700000E00001E00001C0000380000780000F00001E00007C0000F80001E000
+03C0000780000F00001E00383C00387FFFF8FFFFF87FFFF815217DA01C>I<00FE0007FF
+800FFFE01F01F03C00703C00383C00381800380000380000380000700000700000E00003
+E001FFC001FFC001FFE00001F000007800003C00001C00000E00000E60000EF0000EF000
+0EE0001C70003C7800783F01F01FFFE007FFC000FE0017217EA01C>I<000F80001F8000
+1F80003B8000738000738000E38000E38001C38003C3800383800783800703800E03801E
+03801C03803C0380380380700380F00380FFFFFEFFFFFEFFFFFE00038000038000038000
+0380000380000380000380007FFC007FFC007FFC17217EA01C>I<3FFFE03FFFE03FFFE0
+38000038000038000038000038000038000038000038000038000038000039FC003FFF00
+3FFFC03E03E03800E0300070000070000038000038000038600038F00038F00038E00070
+7000F07801E03C07C01FFF800FFE0003F80015217DA01C>I<3078FCFC78300000000000
+0000000000003078FCFC7830061775961C>58 D<183C7E7E3C1800000000000000000000
+00183C7E7E3E1E0E0E1C3CF8F0C0071E76961C>I<0000300000F80001F80003F0000FE0
+001F80007F0000FE0003F80007F0000FC0003F80007E0000FC0000FC00007E00003F8000
+0FC00007F00003F80000FE00007F00001F80000FE00003F00001F80000F8000030151C7D
+9D1C>I<7FFFFCFFFFFEFFFFFE7FFFFC0000000000000000000000000000000000007FFF
+FCFFFFFEFFFFFE7FFFFC170E7E961C>I<600000F80000FC00007E00003F80000FC00007
+F00003F80000FE00007F00001F80000FE00003F00001F80001F80003F0000FE0001F8000
+7F0000FE0003F80007F0000FC0003F80007E0000FC0000F80000600000151C7D9D1C>I<
+FFFF00FFFFC0FFFFE01C00F01C00781C00381C001C1C001C1C001C1C001C1C001C1C0038
+1C00781C00F01FFFE01FFFC01FFFE01C01F01C00781C003C1C001C1C000E1C000E1C000E
+1C000E1C000E1C001E1C001C1C003C1C00F8FFFFF0FFFFE0FFFF8017217EA01C>66
+D<FFFE00FFFF80FFFFC01C03E01C01E01C00F01C00781C00381C003C1C001C1C001C1C00
+1C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C001E1C001C1C00
+1C1C003C1C00381C00781C00F01C01F01C03E0FFFFC0FFFF80FFFE0017217EA01C>68
+D<7FFFFEFFFFFE7FFFFE0E000E0E000E0E000E0E000E0E000E0E00000E00000E00000E00
+000E03800E03800E03800FFF800FFF800FFF800E03800E03800E03800E00000E00000E00
+000E00000E00000E00000E00000E00000E00007FE000FFF0007FE00017217EA01C>70
+D<007C3801FF3807FFF80F83F80E00F81C00F83C00783800383800387000387000387000
+00E00000E00000E00000E00000E00000E00000E003FEE003FEE003FE7000387000387000
+383800783800783C00781C00F80E01F80F83F807FFB801FF38007C3817217EA01C>I<7F
+E000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00040E000E0E000E0E000E0E000E0E000E7FFFFEFFFFFE7FFFFE17217EA01C>76
+D<7E003F00FF007F807F007F001D80DC001D80DC001D80DC001D80DC001DC1DC001DC1DC
+001CC19C001CC19C001CE39C001CE39C001C631C001C631C001C771C001C771C001C361C
+001C361C001C3E1C001C1C1C001C1C1C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C007F007F00FF80FF807F007F0019217FA01C>I<7FFF80FF
+FFE07FFFF80E00FC0E003E0E001E0E000E0E00070E00070E00070E00070E00070E000E0E
+001E0E003E0E00FC0FFFF80FFFE00FFF800E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00007FC000FFE0007FC00018217FA01C>80
+D<FFFC0000FFFF0000FFFF80001C07C0001C01E0001C00E0001C00F0001C0070001C0070
+001C0070001C0070001C00F0001C00E0001C01E0001C07C0001FFF80001FFF00001FFF80
+001C07C0001C01C0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E1
+001C00E3801C00E3801C00E380FF807F00FF807F00FF801C0019217EA01C>82
+D<7FFFFF80FFFFFF80FFFFFF80E01C0380E01C0380E01C0380E01C0380E01C0380001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C000001FFC00003FFE00001FFC00019217FA01C>84
+D<FF007F80FF80FF80FF007F801C001C001C001C001C001C000E0038000E0038000E0038
+000F0078000700700007007000070070000780F0000380E0000380E0000380E00003C1E0
+0001C1C00001C1C00001C1C00000C1800000E3800000E3800000E3800000630000007700
+00007700000077000000360000003E0000003E0000001C000019217FA01C>86
+D<600000F00000F00000F800007800007C00003C00003E00001E00001F00000F00000F80
+0007800007C00003C00003C00003E00001E00001F00000F00000F800007800007C00003C
+00003E00001E00001E00001F00000F00000F800007800007C00003C00003E00001E00001
+F00000F00000F800007800007800003015297DA41C>92 D<00C00003E0000FF8001F7C00
+7C1F00F80F80E0038011077BA01C>94 D<7FFFF0FFFFF8FFFFF87FFFF015047D7E1C>I<
+0FF8001FFE003FFF003C07801803C00001E00000E00000E0001FE001FFE00FFFE01FE0E0
+7E00E07800E0E000E0E000E0E000E0E000E07001E07C07E03FFFFF1FFE7F03F81F18177D
+961C>97 D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E
+1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0E00070E00070E00070E00070E
+00070E00070E00070F000E0F000E0F801C0FC03C0FE0F80EFFF00E7FC0061F0018217FA0
+1C>I<00FF8003FFC00FFFE01F01E03C00C0380000700000700000E00000E00000E00000
+E00000E00000E00000E000007000007000703800703C00F01F01E00FFFC003FF8000FE00
+14177C961C>I<0007F00007F00007F00000700000700000700000700000700000700000
+7000F87003FE700FFFF01F07F03C01F03800F07000F0700070E00070E00070E00070E000
+70E00070E00070E000707000F07000F03801F03C03F01E07F00FFF7F07FE7F01F87F1821
+7EA01C>I<00FC0003FF000FFF801F03C03C01C03800E07000E0700070E00070E00070FF
+FFF0FFFFF0FFFFF0E00000E000007000007800703800703E00F01F01E00FFFC003FF8000
+FE0014177D961C>I<0003F8000FFC001FFE003C1E00380C007000007000007000007000
+0070007FFFFCFFFFFCFFFFFC007000007000007000007000007000007000007000007000
+0070000070000070000070000070000070000070000070000070003FFFE03FFFE03FFFE0
+17217FA01C>I<00F07E03FDFF0FFFFF0F0F861C03801C03803801C03801C03801C03801
+C03801C01C03801C03800F0F001FFF001FFC0038F0003800001C00001C00001FFF801FFF
+E03FFFF878007C70001CE0000EE0000EE0000EE0000EE0000E70001C78003C3F01F81FFF
+F007FFC000FE0018247E961C>I<FE000000FE000000FE0000000E0000000E0000000E00
+00000E0000000E0000000E0000000E0000000E1F80000E7FE0000FFFF0000FE070000F80
+38000F0038000F0038000E0038000E0038000E0038000E0038000E0038000E0038000E00
+38000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80FFE3FF80FFE3
+FF8019217FA01C>I<01C00003E00003E00003E00001C000000000000000000000000000
+0000000000007FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFC0FFFFC0
+FFFFC012227BA11C>I<000E001F001F001F000E00000000000000000000000007FF0FFF
+07FF00070007000700070007000700070007000700070007000700070007000700070007
+000700070007000700070007000700070007000EF01EF03CFFF87FF01FC0102E7DA11C>
+I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E1FFC0E1F
+FE0E1FFC0E01E00E03C00E07800E0F000E1E000E3C000E78000EFC000FFC000FDE000F8F
+000F07000E03800E03C00E01C00E00E00E00F0FFE3FEFFE3FFFFE3FE18217EA01C>I<7F
+F000FFF0007FF00000700000700000700000700000700000700000700000700000700000
+700000700000700000700000700000700000700000700000700000700000700000700000
+70000070000070000070000070000070007FFFF0FFFFF87FFFF015217DA01C>I<7CF078
+00FDF8FC007FFFFE001F9FCF001E0F07001E0F07001C0E07001C0E07001C0E07001C0E07
+001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07
+001C0E07007F1F8FC0FF9FCFE07F1F8FC01B1780961C>I<FE1F8000FE7FE000FFFFF000
+0FE070000F8038000F0038000F0038000E0038000E0038000E0038000E0038000E003800
+0E0038000E0038000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80
+FFE3FF80FFE3FF8019177F961C>I<01FC0007FF000FFF801F07C03C01E03800E0700070
+700070E00038E00038E00038E00038E00038E00038F000787000707800F03800E03C01E0
+1F07C00FFF8007FF0001FC0015177D961C>I<FE1F80FE7FE0FFFFF00FE0780F803C0F00
+1C0F000E0E000E0E00070E00070E00070E00070E00070E00070E00070F000E0F000E0F80
+1C0FC03C0FE0F80EFFF00E7FC00E1F000E00000E00000E00000E00000E00000E00000E00
+000E00000E0000FFE000FFE000FFE00018237F961C>I<00FC380003FF38000FFFB8001F
+03F8003C01F8003800F8007000780070007800E0003800E0003800E0003800E0003800E0
+003800E0003800E000380070007800700078003800F8003C01F8001F07F8000FFFB80003
+FE380000F838000000380000003800000038000000380000003800000038000000380000
+003800000038000003FF800003FF800003FF8019237E961C>I<FF81FCFF87FEFF9FFF03
+BE0F03F80603F00003E00003C00003C00003800003800003800003800003800003800003
+8000038000038000038000038000FFFF00FFFF80FFFF0018177E961C>I<07F9C01FFFC0
+3FFFC07807C0F003C0E001C0E001C0F001C07C00003FE0001FFE0003FF80001FC00001E0
+6000F0E00070E00070F00070F800E0FE03E0FFFFC0EFFF80E1FC0014177C961C>I<00C0
+0001C00001C00001C00001C00001C00001C0007FFFF8FFFFF8FFFFF801C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C01C01C01C01C01C01C0
+1C01C01C00E07800FFF8007FE0001F80161E7F9D1C>I<FE03F800FE03F800FE03F8000E
+0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E
+0038000E0038000E0038000E0038000E0038000E0078000E00F8000701F80007FFFF8003
+FFBF8000FE3F8019177F961C>I<7FC1FF00FFE3FF807FC1FF000E0038000E0038000700
+700007007000070070000380E0000380E0000380E00001C1C00001C1C00001C1C00000E3
+800000E3800000E38000007700000077000000770000003E0000003E0000001C00001917
+7F961C>I<FFC1FF80FFC1FF80FFC1FF8038000E001C001C001C001C001C001C001C001C
+001C001C001C1C1C000E3E38000E3E38000E3638000E3638000E77380006773000067730
+0007637000076370000763700007E3F00003C1E00003C1E00019177F961C>I<7FC3FE00
+7FE3FF007FC3FE000780E0000381E00001C1C00001E3800000F78000007F0000003E0000
+003C0000001C0000003E00000077000000E7000000E3800001C1C0000381E0000780E000
+070070007FC1FF00FFE3FF807FC1FF0019177F961C>I<7FC1FF00FFE3FF807FC1FF000E
+0038000F0038000700700007007000038070000380E00003C0E00001C0E00001C1C00000
+E1C00000E1C00000E180000073800000738000007300000033000000370000001E000000
+1E0000001E0000001E0000001C0000001C0000003C000000380000003800003070000078
+F0000079E000007FC000003F8000001F00000019237F961C>I<0001F8000FF8001FF800
+3E0000780000700000700000700000700000700000700000700000700000700000700000
+700000700000F00003E000FFC000FF8000FFC00003E00000F00000700000700000700000
+7000007000007000007000007000007000007000007000007000007800003E00001FF800
+0FF80001F815297DA41C>123 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060042974A41C>I<7C0000FF8000FFC00003
+E00000F00000700000700000700000700000700000700000700000700000700000700000
+7000007000007800003E00001FF8000FF8001FF8003E0000780000700000700000700000
+700000700000700000700000700000700000700000700000700000F00003E000FFC000FF
+80007C000015297DA41C>I E /Fl 1 66 df<0000180000000018000000001800000000
+3C000000003C000000007E000000007E000000007E000000009F000000009F000000009F
+000000010F800000010F800000020FC000000207C000000207C000000403E000000403E0
+00000403E000000801F000000801F000001801F800001000F800001000F8000020007C00
+0020007C00003FFFFC00007FFFFE000040003E0000C0003F000080001F000080001F0001
+00001F800100000F800100000F8002000007C002000007C006000007E01F800007E0FFE0
+007FFFFFE0007FFF28297DA82F>65 D E /Fm 5 117 df<00C001C001C0018000000000
+000000000000000000001F80078003800700070007000700070007000E000E000E000E00
+0E000E001C001E00FF800A1D7F9C0C>105 D<1F8F8007B0C003C0E00780E00780E00700
+E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9F
+F014127F9117>110 D<00FC000307000E01801C01C03800C03000C07000E07000E07000
+E0E001C0E001C0E001C0600180600380700700380E001C180007E00013127E9115>I<03
+F20C0E18061004300438043E001FE00FF007F8003C401C400C400C6018E010D0608FC00F
+127F9110>115 D<020002000200060006000C001C003C00FFE01C001C00380038003800
+380038003800700070407040704070407080708031001E000B1A7C9910>I
+E /Fn 16 109 df<1838783808101020204080050B7D830C>44 D<3078F06005047C830C
+>46 D<007C000186000303000603000C03801C03801C0380380380380380380380700700
+700700700700700700E00E00E00E00E00E00E01C00E01C00E01800E0300060600030C000
+1F000011187C9714>48 D<000800180030007001F00E7000E000E000E000E001C001C001
+C001C0038003800380038007000700070007000F00FFE00D187C9714>I<007C00018600
+0203000403800483800883801083801083801083801107001207000C0E00001C00003000
+0060000180000200000C00001001002001003C060067FE00C1FC0080F00011187D9714>
+I<003E0000C3000101800201800481C00441C0088380048380070300000600000C0001F0
+00001800000C00000C00000E00000E00600E00E01C00E01C0080380040300020E0001F80
+0012187D9714>I<000300000380000700000700000700000E00000E00000E00001C0000
+1C0000180000300000300000600000C00000C600018E00030E00021C00041C00081C0010
+1C007FB800807F80003800003800007000007000007000007000006000111F7F9714>I<
+03018003FF0003FC000220000400000400000400000400000800000BE0000C1800081800
+001C00001C00001C00001C00201C00701C00E0380080300040700040E0002180001E0000
+11187C9714>I<001E000061800180800303800603800E00001C000018000038000039F0
+00721800740C00780E00700E00F00E00E00E00E00E00E00E00E01C00E01C006038006070
+0030C0001F800011187C9714>I<09C04017E0801FF1803C1F0030020060060040040080
+0C0000080000180000300000300000700000600000E00000C00001C00001C00001800003
+800003800003800007000003000012187B9714>I<003E0000C1800100800200C00600C0
+0600C00E018007030007860003CC0001F00001F800067C000C3E00181E00300700600700
+600700C00600C00600400C006018003070000FC00012187D9714>I<007C000186000703
+000E03000C03801C0380380380380380380380380780380700380F001817000C270007CE
+00000E00000C00001C00001800E03000E0600080C000C380003E000011187C9714>I<03
+CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F261341E180F107C8F14
+>97 D<7E000E000E000E001C001C001C001C00380038003BC03C307830701870187018E0
+38E038E038E038C070C060C0E060C063801E000D1A7C9912>I<1F800003800003800003
+80000700000700000700000700000E00000E00000E7C000F86001E07001E07001C07001C
+0700380E00380E00380E00381C00701C80701C80703880703900E01900600E00111A7E99
+14>104 D<1F0707070E0E0E0E1C1C1C1C3838383870707070E4E4E4E4E830081A7D990A>
+108 D E /Fo 2 83 df<0FFFF9FFE000FF803E0000C3003C0000C3003C0000C3003C0000
+C3003C0000C3003C00018600780001860078000186007800018600780001860078000186
+007800030FFFF000030C00F000030C00F000030C00F000030C00F000030C00F000061801
+E000061801E000061801E000061801E000061801E000061801E0000C3003C0000FF803E0
+00FFFF3FFC00231C7E9B23>72 D<0FFFFF000000FF81E00000C300700000C300380000C3
+003C0000C3001C0000C3001E000186003C000186003C0001860038000186007000018601
+E0000186078000030FFC0000030C0F0000030C078000030C03C000030C03C000030C01E0
+00061803C000061803C000061803C000061803C000061803C000061803C0800C3003C100
+0FF801C100FFFF01C2000000007C00211D7E9B23>82 D E /Fp 7
+112 df<00C00000C00000C00000C00000C00000C00000C00000C000FFFF80FFFF8000C0
+0000C00000C00000C00000C00000C00000C00000C00011127E8D15>43
+D<1E0061804080C0C0C0C0C0C0C0C0C0C0C0C0C0C0408061801E000A0D7E8C0E>48
+D<18F818181818181818181818FF080D7D8C0E>I<3E00418080C0C0C000C000C0018003
+000400084030407F80FF800A0D7E8C0E>I<03C000C000C000C000C01EC031C040C0C0C0
+C0C0C0C040C021C01EF00C0E7E8D10>100 D<F7CF803870C03060C03060C03060C03060
+C03060C03060C0FDFBF014097E8818>109 D<1E0061804080C0C0C0C0C0C0408061801E
+000A097E880E>111 D E /Fq 9 113 df<0000600000600000E00000C00000C00001C000
+0180000380000300000300000700000600000600000E00000C00000C00001C0000180000
+380000300000300000700000600000600000E00000C00000C00001C00001800001800003
+80000300000700000600000600000E00000C00000C00001C000018000018000038000030
+0000700000600000600000E00000C00000C0000013317E8118>14
+D<0000300000600000C0000180000300000700000E00000C000018000038000030000070
+0000E00000C00001C0000180000380000380000300000700000600000E00000E00000C00
+001C00001C00001C00001800003800003800003800003800007000007000007000007000
+00700000700000700000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+007000007000007000007000007000007000007000003800003800003800003800001800
+001C00001C00001C00000C00000E00000E00000600000700000300000380000380000180
+0001C00000C00000E000007000003000003800001800000C00000E000007000003000001
+800000C0000060000030146377811F>18 D<C000006000003000001800000C00000E0000
+07000003000001800001C00000C00000E000007000003000003800001800001C00001C00
+000C00000E000006000007000007000003000003800003800003800001800001C00001C0
+0001C00001C00000E00000E00000E00000E00000E00000E00000E0000070000070000070
+000070000070000070000070000070000070000070000070000070000070000070000070
+0000700000700000700000700000700000700000E00000E00000E00000E00000E00000E0
+0000E00001C00001C00001C00001C0000180000380000380000380000300000700000700
+000600000E00000C00001C00001C0000180000380000300000700000E00000C00001C000
+0180000300000700000E00000C0000180000300000600000C0000014637F811F>I<0018
+007800F001E003C007800F001F001E003E003C007C007C007800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+0D25707E25>56 D<F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F80078007C007C003C003E001E001F000F000780
+03C001E000F0007800180D25708025>58 D<007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00F800F800F8
+00F001F001E003E003C0078007000E001C003800F000C000F00038001C000E0007000780
+03C003E001E001F000F000F800F800F8007C007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C0E4D798025>60
+D<00300000FC0001CE000703801C00E0300030C0000C1607809E17>98
+D<07C0041FE018307830601FE0800F801605809D17>101 D<0000000002000000000600
+0000000C000000000C000000001800000000180000000030000000003000000000600000
+00006000000000C000000000C00000000180000000018000000003000000000300000000
+060000000006000000000C000000000C0000000018000000001800000000300000000030
+00000000600008000060001C0000C0003C0000C000CE000180000E000180000E00030000
+07000300000700060000038006000003800C000001C00C000001C018000001E018000000
+E030000000E0300000007060000000706000000038C000000038C00000001D800000001D
+800000001F000000000F000000000E000000000600000027327C812A>112
+D E /Fr 26 127 df<006000006000006000006000006000006000006000006000006000
+006000FFFFF0FFFFF0006000006000006000006000006000006000006000006000006000
+00600014167E9119>43 D<0F0030C0606060604020C030C030C030C030C030C030C030C0
+30C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C
+000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060
+F070F030603000700070006000C001C00180020004000810101020207FE0FFE00C137E92
+11>I<0FC030707038703870380038003000E00FC0007000380018001C601CF01CF018E0
+3860701FC00E137F9211>I<006000E000E00160026006600C600860106020606060C060
+FFFC0060006000600060006003FC0E137F9211>I<60607FC07F8044004000400040004F
+0070C040E0006000700070E070E070E06040E021C01F000C137E9211>I<07C00C201070
+207060006000C000CF00D0C0E060C020C030C030C03040306020206010C00F000C137E92
+11>I<40007FFC7FF8401080308020004000800100010003000200060006000E000E000E
+000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800FE031F0
+6078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0
+30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I<40E04000
+00000000000040E040030D7D8C09>I<7F00E1C0E0404060006007E038606060C060C064
+C06461E43E380E0D7E8C11>97 D<F00030003000300030003000300033E034303808300C
+30063006300630063006300C3808343023E00F147F9312>I<0FE0187020706020C000C0
+00C000C000C0006000201018200FC00C0D7F8C0F>I<0078001800180018001800180018
+0F98187820386018C018C018C018C018C0186018203818580F9E0F147F9312>I<0F8010
+4020206030C010FFF0C000C000C0006000201018200FC00C0D7F8C0F>I<020702000000
+00000F030303030303030303030303030343E2E67C081B82940A>106
+D<F0303030303030303030303030303030303030FC06147F9309>108
+D<F3E1F0343218381C0C30180C30180C30180C30180C30180C30180C30180C30180C3018
+0CFC7E3F180D7F8C1B>I<0FC0186020106018C00CC00CC00CC00CC00C6018601838700F
+C00E0D7F8C11>111 D<F3E034303808300C30063006300630063006300C3808343033E0
+30003000300030003000FC000F137F8C12>I<F3C034E038E03040300030003000300030
+00300030003000FE000B0D7F8C0D>114 D<F83C301830103830182018200C400C400680
+06800680030003000E0D7F8C11>118 D<F87CF8707030305820305820188840188C4018
+8C400D04800D06800D0680060300060300060300150D7F8C18>I<38407F8087000A037D
+9311>126 D E /Fs 4 122 df<FFFFC0FFFFC012027D871A>0 D<040004000400C460F5
+E03F800E003F80F5E0C4600400040004000B0D7E8D11>3 D<040E0E1C1C1C3838307070
+6060C0C0070F7F8F0A>48 D<0C000C000C000C000C000C00FFC0FFC00C000C000C000C00
+0C000C000C000C000C000C000C000C000C000C000C000C000C000C000A1A7E9310>121
+D E /Ft 1 49 df<181818303030606060C0C0050B7E8B09>48 D
+E /Fu 40 122 df<03C0000C2080183080301900601900601A00601A00C01C00C0180040
+180060280020CD001F0700110D7E8C16>11 D<003C00C20103020304030402080608FC08
+FC08041006100610061006200C200C30183010486047C040004000800080008000800010
+1A7F9313>I<30F05B184C189C1898181818181830303030303030306060606000600060
+00C000C000C000800D137F8C11>17 D<038004400C601860106030603060606060607FE0
+FFC0C0C0C0C0C180C180C100C300C600440038000B147E9310>I<0C0C0C0C0C0C181818
+1818181818303030323032307278B46F1C60006000C000C000C00080000F137E8C14>22
+D<3FFE7FFEC44084400C400840084018C018C010C030C0306020600F0D7E8C13>25
+D<40E06020202040408003097D820A>59 D<000100000300000700000780000B80001B80
+0013800023800023800043800083800083C00101C003FFC00201C00401C00C01C00801C0
+1801E0FE07F815147F9319>65 D<07FFE000E03801C01801C01C01C01C01C01C03803803
+80700380E003FFC00700E00700700700300700380E00700E00700E00E00E00E01C0380FF
+FE0016147F9319>I<003F0800C0980300700600300C0030180030380020700000700000
+700000E00000E00000E00000E000406000806000803001003002000C1C0007E00015147E
+9318>I<07FFE000E07001C01801C00C01C00C01C00E03800E03800E03800E03800E0700
+1C07001C07001C0700380E00300E00700E00E00E01C01C0700FFFC0017147F931B>I<07
+FFFC00E01C01C00C01C00C01C00C01C00803810803810003830003FF0007020007020007
+02000700000E00000E00000E00000E00001C0000FFC00016147F9315>70
+D<003F8400E04C0380380600180C0018180018380010700000700000700000E00000E00F
+F8E000E0E000E06001C06001C03001C01803C00C058003F88016147E931A>I<07FC00E0
+01C001C001C001C0038003800380038007000700070007000E000E000E000E001C00FF80
+0E147F930F>73 D<07FC1FC000E0060001C0080001C0100001C0600001C0800003810000
+03860000038E0000039E0000076700000787000007038000070380000E01C0000E01C000
+0E00E0000E00E0001C00F000FF83FC001A147F931C>75 D<07FC0000E00001C00001C000
+01C00001C0000380000380000380000380000700000700000700000700200E00400E0040
+0E00800E01801C0780FFFF0013147F9317>I<07E01FC000E00600017004000170040001
+38040001380400021C0800021C0800020E0800020E080004071000040710000403900004
+0390000801E0000801E0000800E0000800E00018004000FE0040001A147F931A>78
+D<07FFC000E07001C01801C01C01C01C01C01C0380380380700380C003FF000701C00701
+C00700E00700E00E01C00E01C00E01C00E01C21C01C4FF807817147F9319>82
+D<07FC3F8000E01C0000F0100000702000007040000038800000390000003E0000001C00
+00001E0000001E0000003F00000067000000C7000001838000030380000603C0000401C0
+001C01E000FE07F80019147F931B>88 D<006001A0012003200220062004400C400C800D
+0019001A001C0018001800380058009810086007800C1480930E>96
+D<07B00C7010703060606060606060C0C0C0C8C0C841C862D03C700D0D7E8C12>I<3C00
+0C001800180018001800300033803C6030206030603060306030C060C06040C060802300
+1E000C147F930F>I<03C00C20187030E0600060006000C000C0004010602030C01F000C
+0D7F8C0F>I<003C000C0018001800180018003007B00C7010703060606060606060C0C0
+C0C8C0C841C862D03C700E147E9311>I<0780184030206040C040FF80C00080008000C0
+20C04061803E000B0D7E8C10>I<0018006C007C006C00C000C000C007F800C001800180
+018001800180030003000300030003000200060006006600E400C80070000E1A7F9310>
+I<01CC062C0C1C1818301830183018603060302030307010E00F600060006060C0E0C0C3
+807E000E137F8C10>I<1E0006000C000C000C000C00180019E01E301830383030303030
+30306060606460C460C8C0C8C0700E147E9313>I<06070600000000384C4C8C98181830
+323264643808147F930C>I<003000380030000000000000000001C00260043004600860
+0060006000C000C000C000C001800180018001806300E300C60078000D1A81930E>I<1E
+0006000C000C000C000C0018001838185C189C3118360038003F8061C060C860C860C8C0
+D0C0600E147F9312>I<30F8590C4E0C9C0C980C180C180C30183019303130316032601C
+100D7F8C15>110 D<0C78168C130426062606060606060C0C0C0C0C080C101A2019C018
+001800300030003000FC000F13818C11>112 D<03880C5818383030603060306030C060
+C060406060E021C01EC000C000C00180018001800FE00D137F8C0F>I<31E05A704C709C
+609800180018003000300030003000600060000C0D7F8C0F>I<0700188019C031803800
+1E000F0003804180E180C10082007C000A0D7E8C10>I<04000C000C000C001800FF8018
+001800300030003000300060006100610062006400380009127F910D>I<380C4C0C4C0C
+8C18981818181818303030323032307218B40F1C0F0D7F8C14>I<0E3C13CE238E430C43
+000300030006000608C608E610CA2071C00F0D7F8C13>120 D<380C4C0C4C0C8C189818
+18181818303030303030307018E00F60006000C0E0C0E18043003C000E137F8C11>I
+E /Fv 14 25 df<00000180000000018000000000C000000000C0000000006000000000
+6000FFFFFFF000FFFFFFF80000000018000000000C000000000600000000030000000003
+8000000001C000000000E00000000030FFFFFFFFFCFFFFFFFFFC26127E9501>0
+D<FFFFFFFFFCFFFFFFFFFC000000003000000000E000000001C000000003800000000300
+00000006000000000C000000001800FFFFFFF800FFFFFFF0000000006000000000600000
+0000C000000000C0000000018000000001800026127E8F05>4 D<000001800000000180
+00000000C000000000C000000000600000000060000000003000FFFFFFF8007FFFFFFC00
+0000000600000000030000000001C000000000E0FFFFFFFFFCFFFFFFFFFC00000000E000
+000001C0000000030000000006007FFFFFFC00FFFFFFF800000000300000000060000000
+006000000000C000000000C00000000180000000018000261C7E9709>8
+D<FFFFFFF07FFFFFE000000000000000000000000000000000FFFFFFF0FFFFFFF0000000
+000000000000000000000000007FFFFFE0FFFFFFF01C0E7E900B>10
+D<FF001FE0FF001FE01B027E8A20>I<001000001000000800000800000400000300FFFF
+C0FFFFC0000300000400000800000800001000001000120E7E9017>I<80000080000040
+000040000020000018000007FF8007FF8018000020000040000040000080000080000011
+0E7D9017>14 D<070000000FC0000018E000001830000030180000E0180180C00C038000
+0C060000060C0000038C000001F80000007000190C7D8F20>16 D<000000040000000002
+000000000200000000010000000000800000000060FFFFFFFFF8FFFFFFFFF00000000060
+00000000800000000100000000020000000002000000000400250E7E902A>I<02000000
+0004000000000400000000080000000010000000006000000000FFFFFFFFF0FFFFFFFFF0
+600000000010000000000800000000040000000004000000000200000000240E7D902A>
+I<0200000800040000040004000004000800000200100000010060000000C0FFFFFFFFF0
+FFFFFFFFE060000000C01000000100080000020004000004000400000400020000080024
+0E7D902A>I<000000040000000002000000000100000000010000000000C00000000020
+FFFFFFFFF8FFFFFFFFF825087E902A>22 D<FFFFFFFFF8FFFFFFFFF80000000020000000
+00C0000000010000000001000000000200000000040025087E8A2A>I<000C00000C0000
+0600FFFF80FFFF8011057E9D15>I E /Fw 25 121 df<FFFFFF80FFFFFF8019027D8A20>
+0 D<60F0F06004047C8B0C>I<400020C000606000C03001801803000C0600060C000318
+0001B00000E00000E00001B000031800060C000C06001803003001806000C0C000604000
+2013147A9320>I<0300030003000300C30CE31C73381FE0078007801FE07338E31CC30C
+03000300030003000E127D9215>I<003F800000C0600003001800040004000800020014
+000500220008802100108040802040404040408020802080110020800A00208004002080
+040020800A00208011002080208020404040404080204021001080220008801400050008
+000200040004000300180000C06000003F80001B1C7E9720>10 D<03C00FF01C38300C60
+066006C003C003C003C00360066006300C1C380FF003C010107E9115>14
+D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E
+9115>I<FFFFFFE07FFFFFE0000000000000000000000000000000000000000000000000
+0000000000000000FFFFFFE0FFFFFFE00000000000000000000000000000000000000000
+0000000000000000000000007FFFFFE0FFFFFFE01B167E9420>17
+D<000001800000078000001E00000078000001E00000078000000E00000038000000F000
+0003C000000F0000003C000000F0000000F00000003C0000000F00000003C0000000F000
+0000380000000E0000000780000001E0000000780000001E000000078000000180000000
+00000000000000000000000000000000000000000000000000000000007FFFFF00FFFFFF
+8019247D9920>20 D<0F8000201FE000203FF0002070780060601E0060C00F00C0C007C1
+C08001FF808000FF0080003E000F8000201FE000203FF0002070780060601E0060C00F00
+C0C007C1C08001FF808000FF0080003E001B147E9320>25 D<0006000000000C00000000
+0C000000001800000000380000000030000000007FFFFFF801FFFFFFF803800000000E00
+0000003C00000000F00000000038000000000E000000000700000000018000000000FFFF
+FFF8007FFFFFF8003000000000180000000018000000000C000000000C00000000060000
+0025187E952A>40 D<000003000000000180000000018000000000C000000000E0000000
+006000FFFFFFF000FFFFFFFC000000000E00000000038000000001E00000000078000000
+00E0000000038000000007000000000C00FFFFFFF800FFFFFFF0000000006000000000C0
+00000000C00000000180000000018000000003000025187E952A>I<007FF801FFF80780
+000E0000180000300000300000600000600000C00000C00000C00000FFFFF8FFFFF8C000
+00C00000C000006000006000003000003000001800000E000007800001FFF8007FF8151A
+7D961C>50 D<C0C0C0C0C0C0E0E0C0C0C0C0C0C0030E7E9000>55
+D<00000020000000E0000001E0000001E0000003E0000003E0000005E0000005E0000009
+E0000009E0000011E0000031E0000021E0000061E0000041E0000081E0000181E0000101
+E0000301E0000601E0000401E0000FFFF0001FFFF0003000F0003000F0006000F060C000
+F0718000F87F8000F8FF00007E7E00007C3C0000001F20809D21>65
+D<0001800000100003800000300003800000300003800000600007C00000E00007C00001
+E00005C00003E00005C00007E00005C00007E00005E0000DC00009E00019C00008E00033
+C00008E00073C00010F000E3C00010F001C3C00010700383C00020700303C00020780603
+800020780C038000403818078000403C38078000403C70078000801CE0078000801FC007
+8001001F80078001000F00078062000E000780FE00040007C0FC00000007F0FC00000003
+C07800000000002C1F7F9C32>77 D<0001FC000007FF0000083F8000300F800070078000
+E0078000E0060001E0040001E0000001F0000001F8000000FC0000007E0000003F800000
+1FE0000007F0000001F8000000FC0008007C0038003C0070003C0070003C00F0003800F0
+003800F8007000F80060007C0080007F0300003FFC00000FF00000191E7F9C19>83
+D<400002C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C000
+06C00006C00006C00006C00006C00006C00006C0000660000C60000C3000181C00700F01
+E003FF8000FE00171A7E981C>91 D<00FE0003FF800F01E01C007030001860000C60000C
+C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006
+C00006C00006C00006C00006C00006C00006400002171A7E981C>I<003C00E001C00180
+0380038003800380038003800380038003800380038003800380030007001C00F0001C00
+070003000380038003800380038003800380038003800380038003800380018001C000E0
+003C0E297D9E15>102 D<F0001C00070003000380038003800380038003800380038003
+800380038003800380018001C000E0003C00E001C0018003800380038003800380038003
+80038003800380038003800380030007001C00F0000E297D9E15>I<004000C001800180
+0180030003000600060006000C000C0018001800180030003000600060006000C000C000
+600060006000300030001800180018000C000C0006000600060003000300018001800180
+00C000400A2A7D9E10>I<C000C000600060006000300030001800180018000C000C0006
+00060006000300030001800180018000C000C0018001800180030003000600060006000C
+000C0018001800180030003000600060006000C000C0000A2A7E9E10>I<C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C002
+297B9E0C>I<1F00308070406060E0E0E0E0E040E00060007000300018001C0033007180
+61C0E0C0E0E0E0E0E0E060E070C031C0198007000300018001C000C000E040E0E0E0E0E0
+C0C041C021801F000B257D9C12>120 D E /Fx 91 127 df<60F0F0F0F0F0F0F0F0F0F0
+F0F0F0600000000060F0F0600417789614>33 D<C060E0E0E0E0E0E0E0E0C060C060C060
+C060C06040400B0B7C9614>I<071C00071C00071C00071C00071C00FFFF80FFFF807FFF
+800E38000E38000E38000E38000E38000E38000E38007FFF80FFFF80FFFF801C70001C70
+001C70001C70001C700011177F9614>I<00800180018007E01FF039BC619CC18EC18EC1
+8EE18471807F801FE00FF001F8019C018E4186E186E186E186718C39B81FF00FC0018001
+8000800F1D7E9914>I<3806007C0E006C0E00EE1C00EE1C00EE3800EE38006C38007C70
+0038700000700000E00000E00001C00001C00001C000038000038000070000070E00071F
+000E1B000E3B800E3B801C3B801C3B80381B00381F00180E00111D7F9914>I<0700000F
+800018C00038E00038E00038E00038C00039CF80398F801F1C001E1C001E1C000E38001E
+3800377000677000E3F000E3E000E1C380E1E38063F3803F3F001E1E0011177F9614>I<
+60F0F878181818303060C080050C789614>I<0180038006000C001C0018003800700070
+007000E000E000E000E000E000E000E000E000E000700070007000380018001C000C0006
+0003800180091D799914>I<80C0603038181C0E0E0E0707070707070707070E0E0E1C18
+383060C080081D7C9914>I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E
+638C0380038003800F107E9214>I<01C00001C00001C00001C00001C00001C00001C000
+FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00011117F9314>
+I<70F8FCFC7C0C1830E0C0060A798414>I<FFFEFFFEFFFE0F037E8C14>I<70F8F8F87005
+05798414>I<0006000E000E001C001C003800380070007000E000E001C001C003800380
+0380070007000E000E001C001C003800380070007000E000E000C0000F1D7E9914>I<07
+C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00EE00EE00EE00E701C701C38
+3838381C700FE007C00F177E9614>I<0300030007000F003F00F7004700070007000700
+070007000700070007000700070007000700070007007FF07FF00C177C9614>I<0FC01F
+F03838701CE00EE00EE00E400E000E001C001C00380030007000E001C0030006000C0018
+0E300E7FFE7FFE0F177E9614>I<0FC01FF03838701C701C201C001C0018003800700FE0
+0FF00038001C000E000E400EE00EE00E701C78383FF00FC00F177E9614>I<00780000F8
+0001B80001B8000338000338000638000E38000C38001C3800383800303800703800E038
+00FFFF80FFFF8000380000380000380000380000380001FF0001FF0011177F9614>I<7F
+FC7FFC700070007000700070007000700077C07FF07838601C000C000E000E400EE00EE0
+1C601C78783FF00FC00F177E9614>I<01F007F80E1C1C1C381C300070007000E000E7C0
+EFF0F838F01CF00CE00EE00E600E700E700C381C1C380FF007C00F177E9614>I<E000FF
+FEFFFEE01CE0380030007000E000C001C001800380038007000700070007000E000E000E
+000E000E000E0004000F187E9714>I<0FE03FF8783C701CE00EE00EE00EE00E701C1EF0
+03801FF03838701CE00EE00EE00EE00EF01E701C38381FF007C00F177E9614>I<07C01F
+E038307038601CE01CE00CE00EE00E601E701E383E1FEE07CE000E001C001C001C703870
+3070E03FC01F000F177E9614>I<70F8F8F87000000000000070F8F8F8700510798F14>I<
+70F8F8F87000000000000060F0F8F878183070E0800515798F14>I<0006001E003E00F8
+01F003C00F801F003C00F800F000F8003C001F000F8003C001F000F8003E001E00060F15
+7E9514>I<FFFF80FFFF807FFF800000000000000000007FFF80FFFF80FFFF8011097F8F
+14>I<C000F000F8003E001F00078003E001F00078003E001E003E007801F003E007801F
+003E00F800F000C0000F157E9514>I<1FE03FF8701CE00EE00E400E003C007000E001C0
+03800380038003800300000000000000000003000780078003000F177E9614>I<01C000
+03E00003E0000360000360000770000770000770000770000630000E38000E38000E3800
+0E38001C1C001FFC001FFC001C1C001C1C00380E00380E00FE3F80FE3F8011177F9614>
+65 D<FFF0FFFC381E380E3807380738073807380E381E3FFC3FFC381E380E3807380738
+0738073807380E381EFFFCFFF810177F9614>I<01F18007FF800E1F801C078038078070
+0380700380700380E00000E00000E00000E00000E00000E00000E0000070038070038070
+03803807001C07000E0E0007FC0001F00011177F9614>I<FFE000FFF800383C00381E00
+380E00380700380700380700380380380380380380380380380380380380380380380380
+380700380700380E00381E00383C00FFF800FFE00011177F9614>I<FFFF00FFFF003807
+003807003807003807003800003800003838003838003FF8003FF8003838003838003800
+00380000380000380380380380380380380380FFFF80FFFF8011177F9614>I<FFFF80FF
+FF803803803803803803803803803800003800003838003838003FF8003FF80038380038
+3800380000380000380000380000380000380000380000FF0000FF000011177F9614>I<
+03C60FFE1C3E181E381E700E700E600EE000E000E000E000E07FE07FE00E600E700E700E
+381E181E1C3E0FFE03CE10177F9614>I<FE3F80FE3F80380E00380E00380E00380E0038
+0E00380E00380E00380E003FFE003FFE00380E00380E00380E00380E00380E00380E0038
+0E00380E00380E00FE3F80FE3F8011177F9614>I<FFF8FFF80700070007000700070007
+000700070007000700070007000700070007000700070007000700FFF8FFF80D177D9614
+>I<FE3F00FE3F00381C0038380038780038700038E00039E00039C0003B80003FC0003F
+E0003EE0003CF0003C7000387800383800381C00381C00380E00380E00FE1F80FE1F8011
+177F9614>75 D<FF00FF0038003800380038003800380038003800380038003800380038
+00380038003807380738073807FFFFFFFF10177E9614>I<FC1F80FC1F807C1F00763700
+76370076370076370077770077770073670073670073670073E70071C70071C700700700
+700700700700700700700700700700F80F80F80F8011177F9614>I<FE3F80FE3F803E0E
+003B0E003B0E003B0E003B0E003B8E00398E00398E0039CE0039CE0039CE0038CE0038CE
+0038EE00386E00386E00386E00386E00383E00FE3E00FE3E0011177F9614>I<1FF07FFC
+783C701CE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00E701C
+783C7FFC1FF00F177E9614>I<FFF0FFFC381E380E38073807380738073807380E381E3F
+FC3FF038003800380038003800380038003800FE00FE0010177F9614>I<FFE000FFF800
+383C00381C00380E00380E00380E00380E00381C00383C003FF8003FF000383800381C00
+381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012177F9614>82
+D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE0
+0EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF80E1C380E1C380E1C380E1C380
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C0000FF8000FF80011177F9614>I<FE0FE0FE0FE03803803803803803
+803803803803803803803803803803803803803803803803803803803803803803803803
+803803801C07001C07000E0E0007FC0001F0001317809614>I<FC1F80FC1F80380E0038
+0E00380E003C1E001C1C001C1C001C1C001C1C000E38000E38000E38000E380006300007
+700007700007700003600003600003E00003E00001C00011177F9614>I<FC1F80FC1F80
+70070070070070070070070070070070070070070031C60033E6003BEE003B6E003B6E00
+3B6E003B6E003B6E001B6C001B6C001A2C001E3C001E3C001E3C0011177F9614>I<7E3E
+007E3E001C3C001E38000E78000F700007700007E00003E00003C00001C00003C00003E0
+0003E0000770000770000E78000E38001C3C001C1C003C1E00FE3F80FE3F8011177F9614
+>I<FC1F80FC1F80380E003C1E001C1C001E3C000E38000E380007700007700003600003
+E00003E00001C00001C00001C00001C00001C00001C00001C00001C00007F00007F00011
+177F9614>I<7FFEFFFEE01CE01CE038E038007000E000E001C001C00380070007000E00
+0E001C00380E380E700E700EFFFEFFFE0F177E9614>I<FFE0FFE0E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000FFE0FFE00B1D799914>I<C000E000E00070007000380038001C001C000E00
+0E000700070003800380038001C001C000E000E00070007000380038001C001C000E000E
+00060F1D7E9914>I<FFE0FFE000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E0FFE0FFE00B1D7F9914
+>I<04001F007FC0F1E0E0E00B057C9614>I<FFFEFFFEFFFE0F037E7E14>I<0818306060
+C0C0C0F0F87830050C799914>I<1FC0007FF000707800201800001C00001C0007FC001F
+FC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>I<FC0000
+FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C03801C01C0
+1C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217809614>
+I<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03F00F107E
+8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00301E
+00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CF
+C012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E
+0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE07000700070007
+0007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001FFF80383B
+80301800701C00701C00701C003018003838003FF00037C0007000007000003FF8001FFC
+003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011197F8F14
+>I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F86001E07001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE013
+17809614>I<06000F000F0006000000000000000000FF00FF0007000700070007000700
+0700070007000700070007000700FFF8FFF80D187C9714>I<006000F000F00060000000
+00000000001FF01FF0007000700070007000700070007000700070007000700070007000
+70007000700070007040E0E0C07F803F000C207E9714>I<FC0000FC00001C00001C0000
+1C00001C00001C00001CFF801CFF801C1C001C38001C70001CE0001DC0001FE0001FE000
+1E70001C38001C3C001C1C001C0E00FF1F80FF1F801117809614>I<FF80FF8003800380
+03800380038003800380038003800380038003800380038003800380038003800380FFFE
+FFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038E380
+38E38038E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F86
+001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8F
+E0FF8FE01310808F14>I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C78
+3C3C781FF007C00F107E8F14>I<FCF800FDFE001F07001E03001C03801C01C01C01C01C
+01C01C01C01C01C01C01C01C03801E03001F0E001DFC001CF8001C00001C00001C00001C
+00001C00001C0000FF8000FF80001218808F14>I<03E7000FF7001C1F00300F00700F00
+E00700E00700E00700E00700E00700E00700700F00300F001C3F000FF70007C700000700
+000700000700000700000700000700003FE0003FE013187F8F14>I<FE1F00FE7F800EE3
+800F81000F00000F00000E00000E00000E00000E00000E00000E00000E00000E0000FFF0
+00FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF007F8001C6006E006F0
+06F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFFFC0E000E000E000E00
+0E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<FC3F00FC3F001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F000FFFE0
+03E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C1C001C1C000E38000E38000E38
+0006300007700007700007700003E00003E00003E00011107F8F14>I<FE3F80FE3F8070
+0700380E00380E00380E0039CE0039CE0039CE001B6C001A6C001A6C001A6C001E7C001E
+7C000E380011107F8F14>I<7E3F007E3F001E3C000E780007700007E00003E00001C000
+03C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F8F14>I<FE3F80FE3F
+801C0E001C1C001C1C000E1C000E38000E380007380007300007300003700003700003E0
+0001E00001E00001C00001C00001C0000380007380007700007E00003C000011187F8F14
+>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738077007FFFFFFFF1010
+7F8F14>I<003E00FE01E003800380038003800380038003800380038003807F00FE007F
+00038003800380038003800380038003800380038001E000FE003E0F1D7E9914>I<E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D789914>I<7800
+FE000F00038003800380038003800380038003800380038001FC00FE01FC038003800380
+03800380038003800380038003800F00FE0078000F1D7E9914>I<1C103F38E7E041C00D
+047D9614>I E /Fy 54 122 df<0003FE00001FFF80007F03C001F803E003F007E003F0
+07E007E007E007E007E007E007E007E0018007E0000007E0000007E0000007E03FF0FFFF
+FFF0FFFFFFF007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>
+12 D<0003FFF0001FFFF0007E07F001F807F003F00FF003F00FF007E007F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F0FFFFFFF0FFFFFFF007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>I<3C7EFFFFFFFF7E3C0808
+7B8712>46 D<003FC00001FFF80007E07E000FC03F001F801F801F000F803F000FC03F00
+0FC07E0007E07E0007E07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F07E0007E07E0007E07E0007E03F000FC03F000FC01F000F801F801F800FC03F0007E0
+7E0001FFF800003FC0001C257EA421>48 D<000E00001E0000FE000FFE00FFFE00F0FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFE17257BA421>I<00FF800007FFF000
+1E03FC003800FE0078007F007E007F80FF003F80FF003FC0FF003FC0FF001FC07E001FC0
+3C001FC000003FC000003F8000003F8000007F0000007F000000FE000000FC000001F000
+0003E0000007C000000F8000001E0000001C00C0003800C0007000C000C0018001800180
+0300018007FFFF800FFFFF801FFFFF803FFFFF807FFFFF00FFFFFF00FFFFFF001A257DA4
+21>I<00FF800007FFF0000F01FC001C007E003E007F007F003F807F803F807F803F807F
+803F807F807F803F007F000C007F0000007E000000FC000001F8000007F00000FFC00000
+FF80000001F0000000FC0000007E0000007F0000003F8000003F801C003FC03E003FC07F
+003FC0FF803FC0FF803FC0FF803F80FF803F807F007F807E007F003800FE001F01FC0007
+FFF00000FF80001A257DA421>I<00000E0000001E0000003E0000003E0000007E000000
+FE000001FE000003FE0000077E0000067E00000C7E00001C7E0000387E0000707E000060
+7E0000C07E0001C07E0003807E0007007E000E007E000C007E0018007E0038007E007000
+7E00E0007E00FFFFFFF0FFFFFFF00000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00003FFFF0003FFFF01C257EA421>I<180006001F803E001FFFFC
+001FFFF8001FFFF0001FFFE0001FFF80001FFE0000180000001800000018000000180000
+001800000018000000187F80001BFFF0001F81FC001C007E0008007F0000003F0000003F
+8000003F8000003FC000003FC03C003FC07E003FC0FF003FC0FF003FC0FF003FC0FE003F
+807C003F8060007F0030007E001C00FC000F03F80007FFE00000FF00001A257DA421>I<
+000FF000003FFC0000F80E0003E0070007C01F800F803F801F803F801F003F803F003F80
+3F001F007E0000007E0000007E000000FE000000FE1FE000FE7FF800FE407C00FE803E00
+FF001F00FF001F80FF001F80FE001FC0FE001FC0FE001FC0FE001FC07E001FC07E001FC0
+7E001FC07E001FC03E001F803F001F801F001F000F003F000F803E0003E0F80001FFF000
+007FC0001A257DA421>I<300000003C0000003FFFFFE03FFFFFE03FFFFFC07FFFFF807F
+FFFF007FFFFE007FFFFC0060000C006000180060003000C0006000C000C000C001800000
+0180000003000000070000000E0000000E0000001E0000001E0000003E0000003C000000
+7C0000007C000000FC000000FC000000FC000000FC000001FC000001FC000001FC000001
+FC000001FC000001FC000001FC000000F80000007000001B277CA621>I<007FC00003FF
+F80007007C001C001E0018000F003800078038000780780007807C0007807F0007807FC0
+07007FE00F003FF81E003FFE3C001FFF78000FFFE00007FFF00003FFF80003FFFE0007FF
+FF001F1FFF003C07FF803C01FF807800FFC078003FC0F0000FC0F00007C0F00003C0F000
+03C0F0000380F8000380780003003C0007003E000E000F807C0007FFF00000FF80001A25
+7DA421>I<007F800003FFE00007C0F8000F807C001F003E003E003E007E001F007E001F
+00FE001F80FE001F80FE001F80FE001F80FE001FC0FE001FC0FE001FC0FE001FC07E003F
+C07E003FC03E007FC01F005FC00F809FC007FF9FC001FE1FC000001FC000001F8000001F
+8000001F803E003F007F003F007F003E007F003E007F007C007E00F8003801F0001C07E0
+000FFF800003FC00001A257DA421>I<3C7EFFFFFFFF7E3C000000000000000000003C7E
+FFFFFFFF7E3C081A7B9912>I<00000600000000000F00000000000F00000000001F8000
+0000001F80000000001F80000000003FC0000000003FC0000000007FE0000000007FE000
+0000007FE000000000DFF000000000CFF000000001CFF80000000187F80000000187F800
+00000307FC0000000303FC0000000703FE0000000601FE0000000601FE0000000C00FF00
+00000C00FF0000001800FF80000018007F80000018007F80000030003FC000003FFFFFC0
+00007FFFFFE0000060001FE00000E0001FF00000C0000FF00000C0000FF0000180000FF8
+0001800007F80003800007FC0003000003FC0007800003FC00FFF8007FFFF0FFF8007FFF
+F02C287EA731>65 D<FFFFFFF800FFFFFFFF0003F8003FC003F8000FE003F80007F003F8
+0003F803F80003F803F80003FC03F80003FC03F80001FC03F80001FC03F80003FC03F800
+03FC03F80003F803F80007F803F80007F003F8000FE003F8003FC003FFFFFF0003FFFFFF
+0003F8003FC003F8000FE003F80007F003F80003F803F80003FC03F80001FC03F80001FE
+03F80001FE03F80001FE03F80001FE03F80001FE03F80001FE03F80001FC03F80003FC03
+F80003FC03F80007F803F8000FF003F8003FE0FFFFFFFF80FFFFFFFC0027287EA72E>I<
+00007FC0040007FFF80C001FE01E1C007F00073C01FC0001FC03F80000FC07F000007C0F
+E000007C0FC000003C1FC000001C3F8000001C3F8000001C7F8000000C7F0000000C7F00
+00000CFF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF000000007F000000007F0000000C7F8000000C3F800000
+0C3F8000000C1FC00000180FC00000180FE000003007F000003003F800006001FC0001C0
+007F000380001FE01E000007FFF80000007FC00026287CA72F>I<FFFFFFF80000FFFFFF
+FF000003FC003FC00003FC000FE00003FC0003F80003FC0001FC0003FC0000FE0003FC00
+007E0003FC00007F0003FC00003F8003FC00003F8003FC00001F8003FC00001FC003FC00
+001FC003FC00001FC003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FC003FC00001FC003FC00001FC003FC00001FC003FC00003F8003FC00003F8003FC00
+003F0003FC00007F0003FC0000FE0003FC0001FC0003FC0003F80003FC0007F00003FC00
+3FC000FFFFFFFF0000FFFFFFF800002B287EA732>I<FFFFFFFFC0FFFFFFFFC003FC001F
+C003FC0007E003FC0001E003FC0000E003FC0000E003FC00006003FC00006003FC000060
+03FC00003003FC01803003FC01803003FC01800003FC01800003FC03800003FC03800003
+FC0F800003FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC
+01800003FC01800C03FC01800C03FC00000C03FC00001C03FC00001803FC00001803FC00
+001803FC00003803FC00003803FC00007803FC0000F803FC0001F003FC000FF0FFFFFFFF
+F0FFFFFFFFF026287EA72B>I<FFFFFFFF80FFFFFFFF8003FC003F8003FC0007C003FC00
+03C003FC0001C003FC0001C003FC0000C003FC0000C003FC0000C003FC00006003FC0000
+6003FC01806003FC01800003FC01800003FC01800003FC03800003FC03800003FC0F8000
+03FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC01800003
+FC01800003FC01800003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC000023287E
+A729>I<00007FC004000007FFF80C00001FE01E1C00007F00073C0001FC0001FC0003F8
+0000FC0007F000007C000FE000007C000FC000003C001FC000001C003F8000001C003F80
+00001C007F8000000C007F0000000C007F0000000C00FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+03FFFFC0FF0003FFFFC07F000003FC007F800003FC007F800003FC003F800003FC003F80
+0003FC001FC00003FC000FC00003FC000FE00003FC0007F00003FC0003F80003FC0001FC
+0007FC00007F000EFC00001FE03C7C000007FFF03C0000007FC00C002A287CA733>I<FF
+FFF0FFFFF003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC00FFFFF0FFFFF014287EA718>73 D<FFFFF80000FFFFF8000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00018003FC00018003FC00018003FC00038003FC00030003FC00030003FC00070003
+FC00070003FC000F0003FC000F0003FC001F0003FC007E0003FC01FE00FFFFFFFE00FFFF
+FFFE0021287EA727>76 D<FFFC0000001FFF80FFFE0000003FFF8003FE0000003FE00003
+7F0000006FE000037F0000006FE000037F0000006FE000033F800000CFE000033F800000
+CFE000031FC000018FE000031FC000018FE000030FE000030FE000030FE000030FE00003
+07F000060FE0000307F000060FE0000303F8000C0FE0000303F8000C0FE0000303F8000C
+0FE0000301FC00180FE0000301FC00180FE0000300FE00300FE0000300FE00300FE00003
+007F00600FE00003007F00600FE00003003F80C00FE00003003F80C00FE00003003F80C0
+0FE00003001FC1800FE00003001FC1800FE00003000FE3000FE00003000FE3000FE00003
+0007F6000FE000030007F6000FE000030003FC000FE000030003FC000FE000030001F800
+0FE000030001F8000FE000030001F8000FE000078000F0000FE000FFFC00F003FFFF80FF
+FC006003FFFF8039287EA73E>I<FFFC0000FFFCFFFE0000FFFC03FF0000078003FF8000
+0300037FC0000300033FE0000300031FE0000300031FF0000300030FF80003000307FC00
+03000303FE0003000301FF0003000300FF00030003007F80030003007FC0030003003FE0
+030003001FF0030003000FF80300030007FC0300030003FC0300030003FE0300030001FF
+0300030000FF83000300007FC3000300003FE3000300001FE3000300001FF3000300000F
+FB0003000007FF0003000003FF0003000001FF0003000000FF00030000007F0003000000
+7F00030000003F00030000001F00030000000F00078000000700FFFC00000300FFFC0000
+03002E287EA733>I<FFFFFFF000FFFFFFFE0003FC007F8003FC001FE003FC0007F003FC
+0007F003FC0003F803FC0003F803FC0003FC03FC0003FC03FC0003FC03FC0003FC03FC00
+03FC03FC0003FC03FC0003F803FC0003F803FC0007F003FC0007F003FC001FE003FC007F
+8003FFFFFE0003FFFFF00003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF0000026287EA72D>80
+D<FFFFFFE00000FFFFFFFC000003FC007F800003FC001FC00003FC000FE00003FC0007F0
+0003FC0003F80003FC0003F80003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+0003FC0003FC0003FC0003F80003FC0003F80003FC0007F00003FC000FE00003FC001FC0
+0003FC007F800003FFFFFC000003FFFFFC000003FC00FF000003FC003F800003FC001FC0
+0003FC001FE00003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF0
+0003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF00C03FC0007F0
+0C03FC0007F81803FC0003FC38FFFFF000FFF0FFFFF0003FC02E287EA731>82
+D<00FF004003FFE0C00F80F9C01E001FC03C000FC0780003C0780003C0780001C0F80001
+C0F80000C0F80000C0FC0000C0FE000000FF000000FFE000007FFF00007FFFE0003FFFF8
+001FFFFE000FFFFF0007FFFF8001FFFF80007FFFC00003FFC000003FE000000FE0000007
+E0000007E0C00003E0C00003E0C00003E0C00003E0E00003C0E00003C0F0000780F80007
+80FE000F00E7C03E00C1FFF800803FE0001B287CA724>I<7FFFFFFFFE7FFFFFFFFE7E00
+FF007E7800FF001E7000FF000E6000FF00066000FF0006E000FF0007E000FF0007C000FF
+0003C000FF0003C000FF0003C000FF00030000FF00000000FF00000000FF00000000FF00
+000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000
+00FF00000000FF00000000FF00000000FF00000000FF00000000FF000000FFFFFF0000FF
+FFFF0028277EA62D>I<FFFFF001FFF8FFFFF001FFF803FC00000F0003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060001FC00000C0001FC00000C0000FE00000C0000FE00001800007F
+00003000003F00006000001FC001C0000007F00F80000001FFFE000000003FF000002D28
+7EA732>I<7FFFF03FFF807FFFF03FFF8003FE0003F00001FF0000C00001FF0001800000
+FF80038000007FC0070000007FC0060000003FE00C0000001FF01C0000001FF038000000
+0FF83000000007FC6000000007FEE000000003FFC000000001FF8000000000FF80000000
+00FF80000000007FC0000000003FE0000000003FE0000000003FF0000000003FF8000000
+006FF800000000E7FC00000001C3FE0000000183FE0000000301FF0000000700FF800000
+0E00FF8000000C007FC0000018003FE0000038003FE0000030001FF0000060000FF80000
+E0000FFC0001C00007FC0003E00003FE00FFFE007FFFF0FFFE007FFFF02C287EA731>88
+D<03FF80000FFFE0001F01F8003F80FC003F807E003F803E001F003F001F003F0000003F
+0000003F0000003F000007FF0000FFFF0007F03F001F803F003F003F007E003F007C003F
+00FC003F00FC003F00FC003F00FC005F007E00DF003F839F801FFE0FF803F803F81D1A7E
+9920>97 D<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC1FC000FCFFF800FDC0F
+C00FF003E00FE001F00FC001F80FC001FC0FC000FC0FC000FC0FC000FE0FC000FE0FC000
+FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FC0FC000FC0FC001F80FC001
+F80FE003F00FB007E00F1C0FC00E0FFF000C03FC001F287EA724>I<003FF001FFFC07E0
+3E0F807F1F807F3F007F3F003E7E003E7E0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE00007E00007F00003F00003F80031F80070FC00607F01C01FFF0003FC0181A
+7E991D>I<00007FE000007FE0000007E0000007E0000007E0000007E0000007E0000007
+E0000007E0000007E0000007E0000007E0000007E0000007E0007F87E001FFE7E007E077
+E00FC01FE01F800FE03F0007E03F0007E07E0007E07E0007E0FE0007E0FE0007E0FE0007
+E0FE0007E0FE0007E0FE0007E0FE0007E0FE0007E07E0007E07E0007E07F0007E03F0007
+E01F000FE00F801FE007E077E003FFC7FE007F07FE1F287EA724>I<007F800001FFF000
+07E0F8000F803C001F003E003F001F003F001F007E001F007E001F80FE000F80FE000F80
+FFFFFF80FFFFFF80FE000000FE000000FE000000FE0000007E0000007E0000003F000180
+3F0001801F8003000FC0060003E03C0001FFF800003FC000191A7E991E>I<0007F0003F
+F800FC7C01F0FE03F0FE03E0FE07E0FE07E07C07E00007E00007E00007E00007E00007E0
+00FFFF80FFFF8007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+007FFF007FFF0017287EA714>I<00FF01F007FFE7F80F81FC781F00F8783E007C703E00
+7C007E007E007E007E007E007E007E007E007E007E003E007C003E007C001F00F8000F81
+F0000FFFE00018FF00001000000038000000380000003C0000001FFFF8001FFFFE000FFF
+FF800FFFFFC01FFFFFE03C000FE07C0003F0F80001F0F80001F0F80001F0F80001F07C00
+03E07C0003E03E0007C01FC03F8007FFFE0000FFF0001D267E9921>I<FFC00000FFC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC0FC000FC3FF000FC60F800FC80FC00FD007E00FE007
+E00FE007E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E0FFFC7FFEFFFC7FFE1F287DA724>I<0F001F803FC03FC03FC03FC01F800F0000000000
+00000000000000000000FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFF8FFF80D297DA813>I<FFC000
+00FFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC01FF80FC01FF80FC003C00FC003000FC00E
+000FC01C000FC030000FC060000FC0C0000FC380000FC780000FCFC0000FDFE0000FF3F0
+000FE1F8000F80F8000F80FC000F807E000F803F000F801F800F800F800F800FC00F8007
+E00F8007F0FFF81FFEFFF81FFE1F287EA723>107 D<FFC0FFC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFFFC0E287DA713>
+I<FF80FE003F8000FF83FF80FFE0000F860FC183F0000F8807E201F8000F9003E400F800
+0FB003FC00FC000FA003F800FC000FE003F800FC000FC003F000FC000FC003F000FC000F
+C003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC0
+03F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003
+F000FC000FC003F000FC000FC003F000FC000FC003F000FC00FFFC3FFF0FFFC0FFFC3FFF
+0FFFC0321A7D9937>I<FF80FC00FF83FF000F860F800F880FC00F9007E00FA007E00FA0
+07E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC
+7FFEFFFC7FFE1F1A7D9924>I<003FC00001FFF80007E07E000F801F001F000F803F000F
+C03E0007C07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007
+F0FE0007F0FE0007F07E0007E07E0007E03F000FC03F000FC01F801F800FC03F0007E07E
+0001FFF800003FC0001C1A7E9921>I<FFC1FC00FFCFFF800FDC0FC00FF007E00FE003F0
+0FC001F80FC001FC0FC001FC0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE
+0FC000FE0FC000FE0FC000FE0FC000FC0FC001FC0FC001F80FC003F80FE003F00FF007E0
+0FDC1FC00FCFFF000FC3FC000FC000000FC000000FC000000FC000000FC000000FC00000
+0FC000000FC000000FC00000FFFC0000FFFC00001F257E9924>I<FF83E0FF8FF80F8C7C
+0F90FE0FB0FE0FA0FE0FA07C0FE07C0FC0000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE00171A7E
+991B>114 D<03FC601FFFE03C03E07801E07000E0F00060F00060F80060FC0000FFE000
+7FFE003FFF801FFFC00FFFE001FFF0000FF80001F8C000F8C00078E00078E00078F00070
+F800F0FE03E0E7FF80C1FE00151A7E991A>I<00600000600000600000600000E00000E0
+0001E00001E00003E00007E0001FE000FFFFE0FFFFE007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E03007E03007E0
+3007E03007E03007E03003F06001F0C000FF80003F0014257FA419>I<FFC07FE0FFC07F
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC00FE00FC00FE007C017E003E067E001FFC7FE007F07FE1F1A7D9924>I<FFFC01FF
+FFFC01FF0FC000700FE0007007E0006007F000E003F000C003F801C001F8018001FC0180
+00FC030000FE0300007E0600007E0600003F0C00003F0C00001F9800001F9800001FF800
+000FF000000FF0000007E0000007E0000003C0000003C00000018000201A7F9923>I<FF
+F87FF81FF0FFF87FF81FF00FC00F8007800FC007C003000FE007C0070007E007E0060007
+E00FE0060003F00FE00C0003F01FF00C0003F019F00C0001F819F8180001F830F8180001
+FC30F8380000FC70FC300000FC607C3000007E607C6000007EC03E6000007FC03EE00000
+3FC03FC000003F801FC000001F801F8000001F801F8000001F000F8000000F000F000000
+0E000700000006000600002C1A7F992F>I<FFF80FFEFFF80FFE0FE003C007F0038003F0
+030001F8060000FC0E0000FE1C00007F3800003F7000001FE000000FC0000007E0000007
+F0000007F800000FF800001CFC0000387E0000703F0000E03F8000C01FC001800FC00300
+07E00F0003F0FFE01FFFFFE01FFF201A7F9923>I<FFFC01FFFFFC01FF0FC000700FE000
+7007E0006007F000E003F000C003F801C001F8018001FC018000FC030000FE0300007E06
+00007E0600003F0C00003F0C00001F9800001F9800001FF800000FF000000FF0000007E0
+000007E0000003C0000003C0000001800000018000000300000003000030060000780600
+00FC0E0000FC0C0000FC380000787000003FE000001F80000020257F9923>I
+E /Fz 25 122 df<60F0F06004047D830A>46 D<06000E00FE000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
+D<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810
+183FF07FF0FFF00D157E9412>I<60307FE07FC0440040004000400040004F8070E04070
+0030003800384038E038E0388030406020C01F000D157E9412>53
+D<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C01C03801FFE
+001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072FF803C1817
+7F961A>82 D<7FFFF8603818403808403808803804803804803804003800003800003800
+003800003800003800003800003800003800003800003800003800003800003800003800
+03FF8016177F9619>84 D<3FC0706070302038003803F81E3830387038E039E039E07970
+FF1F1E100E7F8D12>97 D<003E00000E00000E00000E00000E00000E00000E00000E0000
+0E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E0030
+1E00182E0007CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060
+0070083010183007C00D0E7F8D10>I<0F9E18E33060707070707070306018C02F802000
+60003FE03FF83FFC600EC006C006C006600C38380FE010157F8D12>103
+D<F8000038000038000038000038000038000038000038000038000038F8003B1C003C0E
+00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00FE3F801117
+7F9614>I<307878300000000000F8383838383838383838383838FE07177F960A>I<F800
+38003800380038003800380038003800383E383838303840388039803FC039E038E038F0
+3878383C383CFE7F10177F9613>107 D<F8F83E003B1CC7003C0F0380380E0380380E03
+80380E0380380E0380380E0380380E0380380E0380380E0380380E0380380E0380FE3F8F
+E01B0E7F8D1E>109 D<F8F8003B1C003C0E00380E00380E00380E00380E00380E00380E
+00380E00380E00380E00380E00FE3F80110E7F8D14>I<07C018303018600C600CE00EE0
+0EE00EE00EE00E701C3018183007C00F0E7F8D12>I<F9F0003E1C003806003807003803
+00380380380380380380380380380300380700380E003E1C0039F0003800003800003800
+00380000380000FE000011147F8D14>I<F9E03A703C7038203800380038003800380038
+00380038003800FF000C0E7F8D0E>114 D<1F4060C0C040C040E000FF007F801FC001E0
+80608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FFC03800380038
+00380038003800380038403840384038401C800F000A147F930E>I<F83E00380E00380E
+00380E00380E00380E00380E00380E00380E00380E00380E00381E001C2E0007CF80110E
+7F8D14>I<FE1F380E3C0C1C081C080E100E100720072007E003C003C001800180100E7F
+8D13>I<FEFE7C383838383810383C101C3C201C4C201E4E600ECE400E87400787800703
+80070380030300020100160E7F8D19>I<FE3F3C1C1C100E20074007C0038001C002E004
+F008701838383CFC7F100E7F8D13>I<FE1F380E3C0C1C081C080E100E100720072007E0
+03C003C00180018001000100E200E200A400780010147F8D13>I
+E /FA 1 66 df<0003000000030000000300000007800000078000000FC000000BC00000
+0BC0000011E0000011E0000031F0000020F0000020F00000407800004078000040780000
+803C0000803C0001003E0001FFFE0001001E0002000F0002000F0002000F000400078004
+0007800C0007C01E0007C0FF803FFC1E1D7E9C22>65 D E /FB 60
+123 df<01FFFFFF80003C00380000380070000038007000003800700000380070000070
+00E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000E001
+C00001C003800001C003800001C003800001C00380000380070000038007000003800700
+00038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FFC000
+211C7E9B23>5 D<00F800030C000E06041C0704380308300388700390700390E003A0E0
+03A0E003C0E00380E00380E00380600780600B883071900F80E016127E911B>11
+D<0001F000061800080C00100C00200E00400E00800E00801C01001C010018010038020F
+F00210C0020FE00200300400300400300400380400380800700800700800700800E01800
+E01801C0140180140300230E0020F8002000002000004000004000004000004000008000
+0080000017257F9C17>I<0780101FC0103FE0207FF020603040C0184080088000088000
+0480000500000500000600000600000600000400000400000400000C00000C00000C0000
+1800001800001800001800003000003000002000141B7F9115>I<003800007F00008780
+01030001000001800001800001C00000C00000E00000E00000700000F80003B800063C00
+0C1C00181C00381C00701C00701C00E01C00E01C00E01C00E01C00E01800E03800603000
+70600038C0000F8000111E7F9D12>I<01F807000C0018003800300070007FC0E000E000
+E000E000E00060006000300018600F800D127E9111>I<001000001000001000001FC000
+3040006F800080000100000200000600000C000008000018000030000030000020000060
+0000600000600000E00000C00000E00000E00000E00000E000007000007C00003F00001F
+E00007F80000F800003C00001C00000C0000180003100000E00012257F9C12>I<3C1F00
+4E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C03801C0380380700
+380700380700380700700E00300E00000E00000E00001C00001C00001C00001C00003800
+003800003000121B7E9115>I<07800001C00001E00000E00000E00000F0000070000070
+00007800003800003800003C00001C00001C00001E00000E00001E00003F0000670000C7
+000187800303800603800E03C01C01C03801C07001E0E000E0C000F0141D7E9C18>21
+D<0FFFF81FFFF83FFFF8608400418400810400010400030C00030C00020C00060C00060C
+000E0C000C0C001C0E001C0E00380E0018060015127E9118>25 D<000100000200000200
+000200000200000400000400000400000400000800000800007E0001C9800710E00C1060
+181070381030702030702030E02070E02070E04070E040E0E040E06041C0608380308600
+1C9C0007E00001000001000001000001000002000002000002000002000014257E9C19>
+30 D<00FC03FE0E07180010002000200010C017201FE020004000400080008000800440
+0860303FE00F8010147F9213>34 D<1E3E60C0C0C0C0C0C0603E1E070C7E940C>44
+D<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C830C>I<00000180
+0000078000001E00000078000001E00000078000000E00000038000000F0000003C00000
+0F0000003C000000F0000000F00000003C0000000F00000003C0000000F0000000380000
+000E0000000780000001E0000000780000001E000000078000000180191A7D9620>I<00
+010003000600060006000C000C000C0018001800180030003000300060006000C000C000
+C0018001800180030003000300060006000C000C000C0018001800180030003000300060
+0060006000C000C00010297E9E15>I<003E0000C3000100C00200C00300600780600780
+7003003000003000003000003000FC700382700601700C01701800F03800E03000E07000
+E07000C0E001C0E001C0E00180E00380E00300E00600E00600600C003018001860000F80
+00141F7E9D16>64 D<00000C0000000C0000001C0000001C0000003C0000005C0000005C
+0000009E0000008E0000010E0000020E0000020E0000040E0000040E0000080E0000100E
+0000100E0000200700003FFF000040070000800700008007000100070001000700020007
+0004000700040007001C000780FF803FF01C1D7F9C1F>I<01FFFF00003C01C0003800E0
+003800F0003800700038007000700070007000F0007000F0007001E000E003C000E00780
+00E01F0000FFFC0001C00F0001C0078001C003C001C003C0038003C0038003C0038003C0
+038003C0070007800700070007000E0007001C000E007800FFFFC0001C1C7E9B1F>I<00
+01F808000E061800380138006000F001C0007003800070070000300F0000200E0000201C
+0000203C0000203C000000780000007800000078000000F0000000F0000000F0000000F0
+000000F0000100F0000100F0000100700002007000020030000400380008001C0010000E
+0060000701800000FE00001D1E7E9C1E>I<01FFFF80003C01E000380070003800380038
+003C0038001C0070001C0070001E0070001E0070001E00E0001E00E0001E00E0001E00E0
+001E01C0003C01C0003C01C0003C01C000380380007803800070038000F0038000E00700
+01C0070003800700070007001C000E007800FFFFC0001F1C7E9B22>I<01FFFFF8003C00
+78003800180038001000380010003800100070001000700010007008100070080000E010
+0000E0100000E0300000FFF00001C0200001C0200001C0200001C0200003804040038000
+400380008003800080070001000700010007000300070006000E003E00FFFFFC001D1C7E
+9B1F>I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020
+007008200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C02000
+01C020000380400003800000038000000380000007000000070000000700000007000000
+0F000000FFF000001C1C7E9B1B>I<0001F808000E061800380138006000F001C0007003
+800070070000300F0000200E0000201C0000203C0000203C000000780000007800000078
+000000F0000000F0000000F0007FF0F0000780F0000700F0000700F00007007000070070
+000E0030000E0038000E001C001E000E0064000701840000FE00001D1E7E9C21>I<01FF
+C3FF80003C0078000038007000003800700000380070000038007000007000E000007000
+E000007000E000007000E00000E001C00000E001C00000E001C00000FFFFC00001C00380
+0001C003800001C003800001C00380000380070000038007000003800700000380070000
+07000E000007000E000007000E000007000E00000F001E0000FFE1FFC000211C7E9B23>
+I<01FFC07F80003C001E0000380018000038002000003800400000380080000070020000
+00700400000070080000007010000000E040000000E0C0000000E1E0000000E2E0000001
+C470000001D070000001E038000001C0380000038038000003801C000003801C00000380
+0E000007000E000007000E0000070007000007000700000F00078000FFE03FF000211C7E
+9B23>75 D<01FE0000FF003E0000F0002E0001E0002E0002E0002E0002E0002E0004E000
+4E0009C0004E0009C000470011C000470011C00087002380008700438000870043800087
+00838001070107000107010700010382070001038207000203840E000203880E00020388
+0E000203900E000403A01C000403A01C000401C01C000C01C01C001C01803C00FF8103FF
+80281C7E9B28>77 D<0003F800000E0E000038038000E001C001C001C0038000E0070000
+E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F00001
+E0F00001E0F00001E0F00003C0F00003C0F0000780F0000780F0000F0070000E0070001C
+00380038003C0070001C01C0000707800001FC00001C1E7E9C20>79
+D<01FFFF00003C03C0003800E0003800F00038007000380070007000F0007000F0007000
+F0007000E000E001E000E003C000E0070000E01E0001FFF00001C0000001C0000001C000
+0003800000038000000380000003800000070000000700000007000000070000000F0000
+00FFE000001C1C7E9B1B>I<01FFFE00003C03C0003800E0003800F00038007000380070
+007000F0007000F0007000F0007001E000E001C000E0078000E01E0000FFF00001C03800
+01C00C0001C00E0001C00E0003800E0003800E0003800E0003800E0007001E0007001E08
+07001E0807001E100F000F10FFE00F20000003C01D1D7E9B20>82
+D<000FC100303300400F0080060180060300060300060600040600040700000700000780
+0003F00001FF0000FFC0003FE00003E00000F00000700000300000302000302000306000
+606000606000C0600080F00300CC060083F800181E7E9C19>I<1FFFFFF01C0380703007
+0030200700206007002040070020400E0020800E0020800E0020000E0000001C0000001C
+0000001C0000001C00000038000000380000003800000038000000700000007000000070
+00000070000000E0000000E0000000E0000000E0000001E000007FFF00001C1C7F9B18>
+I<7FF03FE00F0007000E0006000E0004000E0004000E0004001C0008001C0008001C0008
+001C00080038001000380010003800100038001000700020007000200070002000700020
+00E0004000E0004000E0004000E0008000E0008000E00100006002000060040000300800
+001830000007C000001B1D7D9B1C>I<FFC00FF01C0003801C0003001C0002001C000200
+1C0004001C0008001E0008000E0010000E0030000E0020000E0040000E0040000E008000
+0E0100000F01000007020000070400000704000007080000070800000710000007200000
+03A0000003C00000038000000380000003000000030000001C1D7D9B18>I<FFC0FFC0FF
+3C001C003C1C001C00101C003C00101C003C00201C005C00401C005C00401C009C00801C
+009C00801C011C01001C011C01001C021C02001C041C02001C041C04001C081C08001C08
+1C08001C100E10001E100E10000E200E20000E200E20000E400E40000E800EC0000E800E
+80000F000F00000F000F00000E000E00000E000E00000C000C00000C000C0000281D7D9B
+27>I<01FFC0FF80001E003C00001C003000000E002000000E004000000F008000000701
+0000000782000000038400000003CC00000001D800000001F000000001E000000000E000
+000000F00000000170000000027800000004380000000838000000103C000000201C0000
+00401E000000800E000001000F0000020007000006000700001E000F8000FF803FF00021
+1C7F9B22>I<FFE007F80F0001E00F0001800F00010007000200078004000380080003C0
+180003C0100001C0200001E0400000E0800000F1000000F2000000760000007C00000038
+0000003800000070000000700000007000000070000000E0000000E0000000E0000000E0
+000001C000001FFC00001D1C7F9B18>I<00FFFFE000F001C001C003800180070001000E
+0001001E0002001C0002003800020070000000E0000001C0000003800000070000000F00
+00001E0000001C0000003800000070020000E0040001C0040003800400070008000F0008
+000E0018001C003000380070007001E000FFFFE0001B1C7E9B1C>I<3F00070007000E00
+0E000E000E001C001C001C001C0039E03A303C1838187018701C701C701CE038E038E038
+E030E070E060E0C061C023001E000E1D7E9C12>98 D<0007E00000E00000E00001C00001
+C00001C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E
+00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E
+00131D7E9C16>100 D<01F007080C0818043808300870307FC0E000E000E000E000E000
+E0046008601030600F800E127E9113>I<0001E0000630000E78000EF0001C60001C0000
+1C00001C00001C0000380000380003FFC000380000380000700000700000700000700000
+700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00001800003
+8000038000630000F30000F60000E4000078000015257E9C14>I<0038C000C5C00183C0
+0303C00703800603800E03800E03801C07001C07001C07001C07001C0E001C0E001C0E00
+0C1E00047C00039C00001C00001C00003800603800F03000F07000E0C0007F0000121A80
+9114>I<01C003C003C001800000000000000000000000001C0027004700470087008700
+0E000E001C001C001C003800388038807080710032001C000A1C7E9B0E>105
+D<0007000F000F00060000000000000000000000000078009C010C020C021C041C001C00
+1C0038003800380038007000700070007000E000E000E000E001C061C0F180F300E6007C
+001024809B11>I<0FC00001C00001C00003800003800003800003800007000007000007
+00000700000E07000E08800E11C00E23C01C47801C83001D00001E00003FC00038E00038
+7000387000707100707100707100707200E03200601C00121D7E9C16>I<381F81F04E20
+C6184640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C0381C01C0381C01
+C0381C01C0703803807138038071380380E1380380E2700700643003003820127E9124>
+109 D<3C1F004E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C0380
+1C0700380710380710380E10380E2070064030038014127E9119>I<07878009C86008D0
+3008E03011C03011C03801C03801C0380380700380700380700380600700E00700C00701
+800783000E86000E78000E00000E00001C00001C00001C00001C00003C0000FF0000151A
+819115>112 D<01C206260C1E181E381C301C701C701CE038E038E038E038E070E070E0
+7060F023E01CE000E000E001C001C001C001C003801FF00F1A7E9113>I<3C3C4E424687
+470F8E1E8E0C0E000E001C001C001C001C0038003800380038007000300010127E9113>
+I<01F0060C0C040C0E180C1C001F000FE00FF003F80038201C7018F018F010803060601F
+800F127E9113>I<00C001C001C001C00380038003800380FFF00700070007000E000E00
+0E000E001C001C001C001C00382038203840384018800F000C1A80990F>I<1C00C02701
+C04701C04701C08703808703800E03800E03801C07001C07001C07001C0700180E20180E
+20180E201C1E200C264007C38013127E9118>I<1C03270747074703870187010E010E01
+1C021C021C021C041804180818081C100C2007C010127E9114>I<1C00C0802701C1C047
+01C1C04701C0C087038040870380400E0380400E0380401C0700801C0700801C0700801C
+07010018060100180601001C0E02001C0F04000E13080003E1F0001A127E911E>I<0787
+8008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C0006380
+80F38080F38100E5810084C60078780013127E9118>I<1C00C02701C04701C04701C087
+03808703800E03800E03801C07001C07001C07001C0700180E00180E00180E001C1E000C
+3C0007DC00001C00001800603800F03000F06000E0C0004180003E0000121A7E9114>I<
+038107C10FF6081C10080010002000400080010002000400080410043C1867F843F081E0
+10127E9113>I E /FC 46 128 df<0000FE000003018000060180000C0380001C018000
+1C0000001800000038000000380000003800000038000003FFFE0000700E0000700E0000
+700E0000701C0000701C0000E01C0000E01C0000E0380000E0380000E0380001C0380001
+C0720001C0720001C0720001C07200038034000380180003800000030000000300000007
+000000C6000000E6000000CC000000780000001925819C17>12 D<0001FEE0000707E000
+0E07E0000C07C0001C01C0001C01C0001801C00038038000380380003803800038038003
+FFFF0000700700007007000070070000700E0000700E0000E00E0000E00E0000E01C0000
+E01C0000E01C0001C01C0001C0390001C0390001C0390001C0390003801A0003800C0003
+800000030000000300000007000000C6000000E6000000CC000000780000001B25819C18
+>I<183C3C3C0404080810204080060C779C0D>39 D<FFC0FFC0FFC00A037D890F>45
+D<3078F06005047C830D>I<0004000C00180038007807B8007000700070007000E000E0
+00E000E001C001C001C001C0038003800380038007000700070007000F00FFF00E1C7B9B
+15>49 D<003E000041800080C00100C00200E00440E00440E00840E00840E00840E01081
+C01081C01103800E0300000600000C000018000060000080000300000400000800401000
+802000802001007F070043FE0081FC00807800131D7D9B15>I<00001800000018000000
+38000000380000007800000078000000B800000138000001380000023C0000021C000004
+1C00000C1C0000081C0000101C0000101C0000201C0000201C00007FFC0000C01C000080
+1C0001001C0001001E0002000E0002000E0004000E000C000E001C001E00FF00FFC01A1D
+7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E00
+00801E0000801C0000803C0000803C000000780000007800000078000000F0000000F000
+0000F0000000F0000000F0000400F0000400F0000400F000080070000800700010003800
+2000180040000C0180000706000001F800001B1E7A9C1E>67 D<01FFFF00003C03C00038
+00E0003800E000380070003800700070007800700038007000380070007800E0007800E0
+007800E0007800E0007801C000F001C000F001C000F001C000E0038001E0038001C00380
+03C0038003800700070007000E0007001C00070038000E00E000FFFF80001D1C7E9B1F>
+I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020007008
+200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C0200001C020
+0003804080038000800380008003800100070001000700030007000200070006000E003C
+00FFFFFC001C1C7E9B1C>I<01FFFFF0003C00F000380030003800200038002000380020
+0070002000700020007008200070080000E0100000E0100000E0300000FFF00001C02000
+01C0200001C0200001C02000038040000380000003800000038000000700000007000000
+07000000070000000F000000FFF000001C1C7E9B1B>I<0003F020001E0C60003002E000
+E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C00000078
+0000007800000078000000F0000000F0000000F001FF80F0001E00F0001C00F0001C00F0
+001C00F0001C00700038007000380038003800180078000C0090000707100001F800001B
+1E7A9C20>I<01FFC3FF80003C0078000038007000003800700000380070000038007000
+007000E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000
+FFFFC00001C003800001C003800001C003800001C0038000038007000003800700000380
+070000038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FF
+C000211C7E9B1F>I<03FF0078007000700070007000E000E000E000E001C001C001C001
+C0038003800380038007000700070007000E000E000E000E001E00FFC0101C7D9B10>I<
+01FFC0003C0000380000380000380000380000700000700000700000700000E00000E000
+00E00000E00001C00001C00001C00001C00003800203800203800203800407000407000C
+0700180700380E00F0FFFFF0171C7E9B1A>76 D<01FE0001FE003E0001E0002E0003C000
+2E0005C0002E0005C0002E0009C0004E000B80004E001380004E00238000470023800087
+0047000087004700008700870000870107000107010E000107020E000107040E00010704
+0E000207081C000203881C000203901C000203A01C000403A038000403C038000403C038
+000C038038001C03007800FF8307FF00271C7E9B25>I<000F8400304C00403C00801801
+001803001803001806001006001006000007000007000003E00003FC0001FF00007F8000
+07C00001C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC
+180083E000161E7D9C17>83 D<1FFFFFC01C0701C0300E00C0200E0080600E0080400E00
+80401C0080801C0080801C0080001C000000380000003800000038000000380000007000
+0000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C000
+0001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF03FE00F0007000E000600
+0E0004000E0004000E0004001C0008001C0008001C0008001C0008003800100038001000
+380010003800100070002000700020007000200070002000E0004000E0004000E0004000
+E0008000E0008000E00100006002000060040000300800001830000007C000001B1D789B
+1F>I<FF83FF07F03C007001C038007001803800F001003800F001003801700200380170
+040038027004003802700800380470080038047010003808701000380870200038107020
+00383070400038207040001C407080001C407080001C807100001C807100001D00720000
+1D007200001E007400001E007400001C003800001C003800001800300000180020000010
+00200000241D779B29>87 D<01E307170C0F180F380E300E700E700EE01CE01CE01CE01C
+E039E039E0396079319A1E0C10127C9115>97 D<3F00070007000E000E000E000E001C00
+1C001C001C0039E03A183C0C380C700C700E700E700EE01CE01CE01CE018E038E030E060
+60C031801E000F1D7C9C13>I<00F803040E041C0E181C300070007000E000E000E000E0
+00E000E0046008601030600F800F127C9113>I<0007E00000E00000E00001C00001C000
+01C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E0070
+0E00700E00E01C00E01C00E01C00E01C00E03900E03900E03900607900319A001E0C0013
+1D7C9C15>I<00F807040C0418023804300470087FF0E000E000E000E000E00060046008
+301030600F800F127C9113>I<0003C0000670000C70001C60001C00001C000038000038
+0000380000380000380003FF8000700000700000700000700000700000E00000E00000E0
+0000E00000E00001C00001C00001C00001C00001C0000380000380000380000300000300
+00070000C60000E60000CC00007800001425819C0D>I<0078C001C5C00303C00603C00E
+03800C03801C03801C0380380700380700380700380700380E00380E00380E00181E000C
+7C00079C00001C00001C00003800003800C03000E07000C1C0007F0000121A7E9113>I<
+0FC00001C00001C0000380000380000380000380000700000700000700000700000E3E00
+0EC3000F03800E03801E03801C03801C03801C0380380700380700380700380E00700E40
+700E40701C40701C80E00C80600700121D7E9C15>I<0180038001000000000000000000
+0000000000001C002600470047008E008E000E001C001C001C0038003800710071007100
+720072003C00091C7C9B0D>I<0FC00001C00001C0000380000380000380000380000700
+000700000700000700000E07800E08800E11C00E21C01C41801C80001D00001E00003FC0
+0038E000387000387000707100707100707100707200E03200601C00121D7E9C13>107
+D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038
+0038007000700070007000E200E200E200E40064003800091D7D9C0B>I<1C1E07802663
+18C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C07
+01C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122>
+I<383E004CC3004D03804E03809E03809C03801C03801C0380380700380700380700380E
+00700E40700E40701C40701C80E00C8060070012127C9117>I<00F800030C000E06001C
+0300180300300300700380700380E00700E00700E00700E00E00E00E00E01C0060180060
+300030E0000F800011127C9115>I<03878004C86004D03004E03009C03009C03801C038
+01C0380380700380700380700380600700E00700C00701800783000E86000E78000E0000
+0E00001C00001C00001C00001C0000380000FF0000151A809115>I<01E107130C0F180F
+380E300E700E700EE01CE01CE01CE01CE038E038E038607831F01E700070007000E000E0
+00E000E001C00FF8101A7C9113>I<1C3C2642468747078E068E000E000E001C001C001C
+001C0038003800380038007000300010127C9112>I<01F006080C080C1C18181C001F00
+1FC00FF007F0007800386030E030C030806060C01F000E127D9111>I<03000700070007
+000E000E000E000E00FFE01C001C001C0038003800380038007000700070007000E080E0
+80E100E100660038000B1A7C990E>I<1C01802E03804E03804E03808E07008E07001C07
+001C0700380E00380E00380E00380E00301C80301C80301C80383C80184D000F86001112
+7C9116>I<1C062E0E4E064E068E028E021C021C02380438043804380830083008301038
+2018400F800F127C9113>I<1E01832703874703874703838707018707010E07010E0701
+1C0E021C0E021C0E021C0E04180C04181C04181C081C1E080C263007C3C018127C911C>
+I<0387800CC8400870E01070E020E0C020E00000E00000E00001C00001C00001C00001C0
+00038100638100E38200C5820085840078780013127E9113>I<1C01802E03804E03804E
+03808E07008E07001C07001C0700380E00380E00380E00380E00301C00301C00301C0038
+3C001878000FB800003800003000007000E06000E0C0008180004300003C0000111A7C91
+14>I<70E0F1E0F1E060C00B04759C15>127 D E /FD 6 117 df<0001FC0080000E0380
+800038004180006000218001C00013800380000B80070000078006000007800E00000380
+1C000003801C0000018038000001803800000180780000008078000000807000000080F0
+00000000F000000000F000000000F000000000F000000000F000000000F000000000F000
+000000F000000000F0000000007000000000780000008078000000803800000080380000
+00801C000001001C000001000E0000010006000002000700000200038000040001C00008
+0000600010000038006000000E0380000001FC0000212A7DA827>67
+D<00FC000307800E01C01C00E01800F0380070780070700078700078F00038FFFFF8F000
+00F00000F00000F00000F000007000007800007800083800081C00100C00200600400381
+8000FE0015197E9818>101 D<0E0FC000FE3070001E4038000E8038000F001C000F001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C001F003E
+00FFE1FFC01A197E981E>110 D<00FE000383800600C00C006018003038003878003C70
+001C70001CF0001EF0001EF0001EF0001EF0001EF0001EF0001E70001C70001C78003C38
+00381C00701C00700600C003838000FE0017197E981B>I<07E100181B00200700400300
+C00300C00100C00100E00100F000007C00003FE0001FF80007FC00003E00000F00800380
+800380800180C00180C00180E00100E00300D00200CC0C0083F00011197E9815>115
+D<0100000100000100000100000300000300000300000700000700000F00003F0000FFFF
+000700000700000700000700000700000700000700000700000700000700000700000700
+0007000007008007008007008007008007008007008007008003810003810001C200007C
+0011247FA315>I E /FE 9 117 df<FFFC00FFFF00F00F80F003C0F001E0F000F0F000F0
+F000F0F000F0F000F0F000F0F001E0F003E0F00FC0FFFF80FFFE00F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000141D7C9C1B>
+80 D<03F8000FFE001C0F00380700700300600000E00000E00000E00000E00000F00000
+7800007F00003FE0001FFC0007FE0001FF00001F800007800003C00003C00001C00001C0
+0001C00001C0C00180E00380F007007C0E001FFC0007F000121F7E9D17>83
+D<03F00FFC1FFE3C0E78027000E000E000E000E000E000E000700078023C0E1FFE0FFC03
+F00F127F9112>99 D<F0F0F0F00000000000000070707070707070707070707070707070
+7070041D7E9C0A>105 D<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E0
+01C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>
+111 D<E3E0EFF8FFFCF83EE01EE00EE007E007E007E007E007E00FE00EF01EF87CFFF8EF
+F0E3E0E000E000E000E000E000E000E000E000101A7D9115>I<E380E780EF80FC00F800
+F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114
+D<1FC03FF07FF0F030E000E000F0007F003FC01FE001F0003800388038F078FFF07FE01F
+C00D127F9110>I<1C001C001C001C001C001C00FFE0FFE01C001C001C001C001C001C00
+1C001C001C001C001C001C001C201FF00FF007C00C187F970F>I
+E /FF 85 128 df<FFFFF00F00F00F00300F00100F00100F00180F00080F00080F00080F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F8000FFF800151C7E9B1A>0
+D<00030000000300000007800000078000000FC000000BC0000013E0000011E0000021F0
+000020F0000040F8000040780000807C0000803C0001003E0001001E0002001F0002000F
+0004000F8004000780080007C0080003C0100001E0300001F0200000F0600000F87FFFFF
+F8FFFFFFFCFFFFFFFC1E1D7E9C23>I<007E1F0001C1B1800303E3C00703C3C00E03C180
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0007F87FC001A1D809C18>11
+D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFF
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F
+CFF8151D809C17>I<3C42818181423C0807759D1F>23 D<60F0F0F0F0F0F0F060606060
+606060606060606060000000000060F0F060041E7C9D0C>33 D<6060F0F0F8F868680808
+08080808101010102020404080800D0C7F9C15>I<60F0F8680808081010204080050C7C
+9C0C>39 D<00800100020006000C000C00180018003000300030006000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600060003000300030
+00180018000C000C000600020001000080092A7C9E10>I<800040002000300018001800
+0C000C000600060006000300030003000300038003800380038003800380038003800380
+03800380038003000300030003000600060006000C000C00180018003000200040008000
+092A7E9E10>I<0006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C830C
+>I<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<03C00C301818300C300C700E60
+066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C300C18180C3007E0101D7E9B15>48 D<010007003F00C7000700070007000700070007
+0007000700070007000700070007000700070007000700070007000700070007000700FF
+F80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C
+001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07
+E01830201C201C781E780E781E381E001C001C00180030006007C00030001C001C000E00
+0F000F700FF80FF80FF80FF00E401C201C183007C0101D7E9B15>I<000C00000C00001C
+00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C
+00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C
+0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02C3030
+18301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E
+9B15>I<00F0030C04040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006
+E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<400000
+7FFF807FFF007FFF00400200800400800400800800001000001000002000006000004000
+00C00000C00001C000018000018000038000038000038000038000078000078000078000
+078000078000078000030000111D7E9B15>I<03E00C301008200C200660066006700670
+067C0C3E183FB01FE007F007F818FC307E601E600FC007C003C003C003C0036002600430
+0C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007
+E0076007700F300F18170C2707C700060006000E300C780C78187018203010C00F80101D
+7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F060000000
+0000000000000060F0F0701010101020204080041A7C910C>I<FFFFFFE0FFFFFFE00000
+000000000000000000000000000000000000000000000000000000000000FFFFFFE0FFFF
+FFE01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080
+01800100010001000100010001000000000000000000000003000780078003000F1D7E9C
+14>63 D<000600000006000000060000000F0000000F0000000F00000017800000178000
+0037C0000023C0000023C0000043E0000041E0000041E0000080F0000080F0000080F000
+010078000100780001FFF80002003C0002003C0002003C0004001E0004001E000C001F00
+0C000F001E001F00FF00FFF01C1D7F9C1F>65 D<FFFFC0000F0078000F003C000F001E00
+0F000E000F000F000F000F000F000F000F000F000F000E000F001E000F003C000F00F800
+0FFFF0000F003C000F001E000F000F000F0007000F0007800F0007800F0007800F000780
+0F0007800F000F000F000F000F001E000F007800FFFFE000191C7F9B1D>I<001F808000
+E0618001801980070007800E0003801C0003801C00018038000180780000807800008070
+000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000070
+0000807800008078000080380000801C0001001C0001000E000200070004000180080000
+E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E000F0007000F00
+07000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F00
+01E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F00
+07000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00
+040F00040F00060F00020F00020F01020F01000F01000F01000F03000FFF000F03000F01
+000F01000F01000F01010F00010F00020F00020F00020F00060F00060F000C0F003CFFFF
+FC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F01040F
+01000F01000F01000F03000FFF000F03000F01000F01000F01000F01000F00000F00000F
+00000F00000F00000F00000F00000F0000FFF800161C7E9B1B>I<001F808000E0618001
+801980070007800E0003801C0003801C00018038000180780000807800008070000080F0
+000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078
+00078078000780380007801C0007801C0007800E00078007000B800180118000E0608000
+1F80001C1E7E9C21>I<FFF0FFF00F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000FFFFF000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F00FFF0FFF01C1C7F9B1F>I<FFF00F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F00FFF00C1C7F9B0F>I<07FF80007C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00703C00F83C00F83C00F8380070780040700030E0000F8000111D7F9B15>I<FFF8
+000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00
+300F00700F01F0FFFFF0151C7E9B1A>76 D<FF8000FF800F8000F8000F8000F8000BC001
+78000BC00178000BC001780009E002780009E002780008F004780008F004780008F00478
+00087808780008780878000878087800083C107800083C107800083C107800081E207800
+081E207800081E207800080F407800080F40780008078078000807807800080780780008
+030078001C03007800FF8307FF80211C7E9B26>I<FF001FF00F8003800FC001000BC001
+0009E0010008F0010008F0010008780100083C0100083E0100081E0100080F0100080F81
+00080781000803C1000801E1000801F1000800F1000800790008007D0008003D0008001F
+0008001F0008000F0008000700080003001C000300FF8001001C1C7F9B1F>I<003F8000
+00E0E0000380380007001C000E000E001C0007003C00078038000380780003C0780003C0
+700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0
+700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800
+00E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E
+0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<FFFF
+00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F00
+1C000F003C000F0078000F01E0000FFF00000F01E0000F0070000F0078000F003C000F00
+3C000F003C000F003C000F003C000F003C000F003C100F003C100F001C100F001C10FFF0
+0E20000003C01C1D7E9B1F>82 D<07E0801C1980300580300380600180E00180E00080E0
+0080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C000
+03C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C
+17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F002080
+0F0020000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+1F800003FFFC001B1C7F9B1E>I<FFF01FF00F0003800F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F000100070002000780
+02000380040001C0040000E0180000706000000F80001C1D7F9B1F>I<FFE00FF01F0003
+C01F0001800F0001000F000100078002000780020007C0020003C0040003C0040003E00C
+0001E0080001E0080000F0100000F0100000F810000078200000782000003C4000003C40
+00003C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600
+001C1D7F9B1F>I<FFE1FFC0FF1F003E003C1E003C00180F001E00100F001E00100F001E
+001007801F002007801F002007801F002003C027804003C027804003C027804001E043C0
+8001E043C08001E043C08000F081E10000F081E10000F081E10000F900F300007900F200
+007900F200007E007E00003E007C00003E007C00003C003C00001C003800001C00380000
+180018000008001000281D7F9B2B>I<FFF07FC00FC01E0007800C0007C0080003C01000
+01E0200001F0200000F0400000788000007C8000003D0000003E0000001F0000000F0000
+000F8000000F80000013C0000023E0000021E0000040F0000080F8000080780001007C00
+02003E0002001E0006001F001F001F80FF807FF01C1C7F9B1F>I<FFF003FC0F8001E007
+8000C007C0008003C0010003E0030001E0020000F0040000F8040000780800007C180000
+3C1000003E2000001F2000000F4000000FC0000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000007FF8001E1C809B1F
+>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0FEFE07297C9E0C>91 D<08081010202040404040808080808080B0B0F8F878
+7830300D0C7A9C15>I<FEFE060606060606060606060606060606060606060606060606
+06060606060606060606060606FEFE0729809E0C>I<E0E0E0E003047C9C0C>95
+D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C
+00E01C40E01C40E01C40603C40304E801F870012127E9115>97 D<FC00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87001E01801C00C0
+1C00E01C00601C00701C00701C00701C00701C00701C00701C00601C00E01C00C01E0180
+19070010FC00141D7F9C17>I<03F80C0C181E301E700C6000E000E000E000E000E000E0
+0060007002300218040C1803E00F127F9112>I<001F8000038000038000038000038000
+038000038000038000038000038000038003F3800E0B80180780300380700380600380E0
+0380E00380E00380E00380E00380E003806003807003803003801807800E1B8003E3F014
+1D7F9C17>I<07E00C301818300C700E6006E006FFFEE000E000E000E000600070023002
+18040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FF
+E00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F
+1D809C0D>I<00038007C4C01C78C0383880301800701C00701C00701C00701C00301800
+3838001C700027C0002000002000003000003FF8001FFF001FFF802003806001C0C000C0
+C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00
+001C00001C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+80FF9FF0141D7F9C17>I<18003C003C0018000000000000000000000000000000FC001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F
+9C0C>I<00C001E001E000C0000000000000000000000000000007E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0
+F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C00001C0FE01C07801C06001C0C001C10001C20001C40001CE0001DE0
+001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C8388
+38001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C
+001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014
+127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0
+E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D87
+001E01801C01C01C00E01C00E01C00701C00701C00701C00701C00701C00701C00E01C00
+E01C01C01E01801D07001CFC001C00001C00001C00001C00001C00001C00001C0000FF80
+00141A7F9117>I<03E0800E1980180580380780700380700380E00380E00380E00380E0
+0380E00380E003807003807003803807801807800E1B8003E38000038000038000038000
+0380000380000380000380001FF0141A7F9116>I<FCE01D381E781E781C301C001C001C
+001C001C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F9020704030C010
+C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04
+000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C
+101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E1B
+8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E02000F060007040007
+040003880003880003C80001D00001D00000E00000E00000E00000400013127F9116>I<
+FF3FC7E03C0703C01C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400
+0711C4000720C40003A0E80003A0E80003C0680001C0700001C070000180300000802000
+1B127F911E>I<FF0FE01E07001C06000E040007080003900003B00001E00000E00000F0
+0001F000013800021C00041C000C0E001807003C0780FE1FF014127F9116>I<FF07E03C
+03801C01001C01000E02000E02000F060007040007040003880003880003C80001D00001
+D00000E00000E00000E000004000004000008000008000F08000F10000F3000066000038
+0000131A7F9116>I<7FFC70386038407040F040E041C003C0038007000F040E041C043C
+0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<1C043F0843F080E00E047D
+9B15>126 D<6060F0F0F0F060600C047C9C15>I E /FG 70 126
+df<038700038700038700038700038700038700FFFFE0FFFFE07FFFE0070E00070E0007
+0E000E1C000E1C000E1C000E1C007FFFE0FFFFE0FFFFE01C38001C38001C38001C38001C
+38001C380013197F9816>35 D<00E001E0038007000E001C001C00380038007000700070
+00E000E000E000E000E000E000E000E000E000700070007000380038001C001C000E0007
+00038001E000E00B217A9C16>40 D<C000E000700038001C000E000E0007000700038003
+80038001C001C001C001C001C001C001C001C001C0038003800380070007000E000E001C
+0038007000E000C0000A217B9C16>I<0380038003800380E38EF39EFFFE3FF80FE00FE0
+3FF8FFFEF39EE38E03800380038003800F127D9516>I<00E00000E00000E00000E00000
+E00000E00000E00000E000FFFFE0FFFFE0FFFFE000E00000E00000E00000E00000E00000
+E00000E00000E00013137F9516>I<387C7E7E3E0E1E1C78F060070B798416>I<FFFF80FF
+FF80FFFF8011037E8D16>I<70F8F8F8700505788416>I<00018000038000038000070000
+0700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00001
+C0000380000380000700000700000E00000E00001C00001C000038000038000070000070
+0000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E3C00380E00780F00
+700700700700E00380E00380E00380E00380E00380E00380E00380E00380F00780700700
+700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<0300070007000F00
+1F00FF00FF00E70007000700070007000700070007000700070007000700070007000700
+FFF8FFF8FFF80D197B9816>I<07E0001FF8003FFC00783E00E00700F00780F003806003
+80000380000380000700000700000E00001C0000380000700000E00001C0000380000F00
+001E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E0078
+0700300700000700000700000E00003E0007FC0007F00007FC00001E0000070000030000
+0380000380600380F00380E00700781E003FFC001FF80007E00011197E9816>I<007C00
+00FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C00381C00781C00
+F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC001FFC001FFC0
+13197F9816>I<3FFE007FFE007FFE007000007000007000007000007000007000007000
+0077F0007FFC007FFE00780F00300700000380000380600380F00380F00380E00700781E
+003FFC001FF80007E00011197E9816>I<70F8F8F870000000000000000070F8F8F87005
+12789116>58 D<387C7C7C38000000000000000038787C7C3C1C1C3870F0400618799116
+>I<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC
+00003E00000F800007C00001F00000F800003E00001F8000078000018011157E9616>I<
+FFFFE0FFFFE07FFFE00000000000000000000000000000007FFFE0FFFFE0FFFFE0130B7F
+9116>I<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F800007
+80001F80003E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616
+>I<00F80003FC0007FE000F07001C3B8038FF8079FF8073C7C07383C0E701C0E701C0E7
+01C0E701C0E701C0E701C0E701C073838073C78079FF0038FE001C38000F03C007FFC003
+FF0000FC0012197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B8
+00031800071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07
+001C07001C07007E0FC0FF1FE07E0FC013197F9816>I<7FF800FFFE007FFF001C07001C
+07801C03801C03801C03801C03801C07001FFF001FFE001FFE001C1F001C03801C03C01C
+01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<7FF800
+FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF800
+1319809816>68 D<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C
+1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C
+00E07FFFE0FFFFE07FFFE013197F9816>I<7FFFE0FFFFE07FFFE01C00E01C00E01C00E0
+1C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C0000
+1C00001C00001C00001C00007F8000FFC0007F800013197F9816>I<01F18007FB800FFF
+801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E01FC0E01F
+E0E01FC0F003807003807007803807803C07801E0F800FFF8007FB8001F38013197F9816
+>I<7FFCFFFE7FFC03800380038003800380038003800380038003800380038003800380
+038003800380038003807FFCFFFE7FFC0F197D9816>73 D<FF8000FFC000FF80001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>76
+D<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B3
+8039B38039B38039F38038E38038E380380380380380380380380380380380FE0FE0FE0F
+E0FE0FE013197F9816>I<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01C
+E1C01CE1C01C61C01C71C01C71C01C71C01C31C01C39C01C39C01C19C01C1DC01C0DC01C
+0DC01C0DC07F07C0FF87C07F03C01519809816>I<1FFC003FFE007FFF00780F00F00780
+E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380
+E00380E00380F00780F00780780F007FFF003FFE001FFC0011197E9816>I<7FF800FFFE
+007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE
+001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80007F00001219
+7F9816>I<7FF000FFFC007FFE001C0F001C07801C03801C03801C03801C03801C07801C
+0F001FFE001FFC001FFE001C0E001C07001C07001C07001C07001C07101C07381C07387F
+03F0FF83F07F01E01519809816>82 D<07E3001FFF003FFF00781F00F00700E00700E007
+00E00000F000007800003F80001FF00007FC0000FE00000F000007000003800003806003
+80E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0
+E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC0013197F9816>I<
+7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE00
+00F8001519809816>I<FE0FE0FE0FE0FE0FE03803803C07801C07001C07001C07001E0F
+000E0E000E0E000E0E000E0E00071C00071C00071C00071C0003180003B80003B80003B8
+0001B00001F00001F00000E00013197F9816>I<7FFF80FFFF80FFFF80E00700E00F00E0
+1E00E01C00003C0000780000700000F00001E00001C00003C0000780000700000F00001E
+03801C03803C0380780380700380FFFF80FFFF80FFFF8011197E9816>90
+D<C00000E00000E000007000007000003800003800001C00001C00000E00000E00000700
+0007000003800003800001C00001C00000E00000E000007000007000003800003800001C
+00001C00000E00000E0000070000070000038000038000018011207E9C16>92
+D<03000F803FE0FDF8F07840100D067C9816>94 D<FFFF80FFFF80FFFF8011037E7E16>
+I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E
+00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<FC0000FC0000FC0000
+1C00001C00001C00001C00001C7C001DFE001FFF001F07801E03C01C01C01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF001DFE000C780013197F9816>
+I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803
+F010127D9116>I<003F00003F00003F0000070000070000070000070003C7000FF7001F
+FF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00780F003C
+1F001FFFE00FF7E007C7E013197F9816>I<03F0000FFC001FFE003C0F00780700700380
+E00380FFFF80FFFF80FFFF80E00000E000007003807803803E07801FFF0007FE0001F800
+11127E9116>I<001E00007F0001FF8001C7800383000380000380007FFF00FFFF00FFFF
+000380000380000380000380000380000380000380000380000380000380000380000380
+007FFC00FFFE007FFC0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E0038
+0E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF8070
+03C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<
+FC0000FC0000FC00001C00001C00001C00001C00001C78001DFC001FFE001F0F001E0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0
+FF8FE013197F9816>I<03000780078003000000000000000000FF80FF80FF8003800380
+0380038003800380038003800380038003800380FFFCFFFEFFFC0F1A7C9916>I<003000
+780078003000000000000000000FF81FF80FF80038003800380038003800380038003800
+3800380038003800380038003800380038003800386070F0F0FFE07FC03F800D237E9916
+>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E
+1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF
+CFF07F87F01419809816>I<7FC000FFC0007FC00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C0007FFF00FFFF807FFF0011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78
+E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7C
+F8FE7CF81512809116>I<FC7800FDFC00FFFE001F0F001E07001C07001C07001C07001C
+07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0FF8FE013127F9116>I<
+03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780
+700700780F003C1E001FFC000FF80003E00011127E9116>I<FC7C00FDFE00FFFF001F07
+801E03C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF
+001DFE001C78001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000131B
+7F9116>I<03E3800FF3801FFB803E0F80780780700780E00380E00380E00380E00380E0
+0380E003807007807807803C1F801FFB800FF38003E38000038000038000038000038000
+0380000380001FF0003FF8001FF0151B7F9116>I<7F0FC0FF3FE07F7FE007F04007C000
+0780000780000700000700000700000700000700000700000700000700007FFC00FFFC00
+7FFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00E
+F00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FF
+FF00FFFF0007000007000007000007000007000007000007000007010007038007038007
+038007870003FE0001FC0000F80011177F9616>I<FC3F00FC3F00FC3F001C07001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F001FFFE00FF7E0
+07C7E013127F9116>I<7F1FC0FF9FE07F1FC01C07001C07000E0E000E0E000E0E00071C
+00071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>I<FF
+1FE0FF1FE0FF1FE038038038038038038038038039F38039F38019F30019B30019B30019
+B3001DB7001D17001F1F000F1E000E0E0013127F9116>I<7F1FC07F3FC07F1FC00F1E00
+073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0
+FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E
+00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E0
+0000E00001C00079C0007BC0007F80007F00003C0000131B7F9116>I<001F80007F8000
+FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C0007F
+8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001E00000FF80007F80001F8011207E9C16>123 D<E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>I<7C0000FF0000FF
+800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000
+FF00007F80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00003C000FF8000FF00007C000011207E9C16>I E /FH
+52 128 df<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000
+000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C007FE1FF807FE1FF80191D809C1B>12 D<003FFC0001F07C0003C07C0007C07C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C00FFFFFC00FFFFFC
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C007FF3FF807FF3FF80191D809C1B>I<
+78FCFCFCFC7806067D850D>46 D<03F8000F1E001C07003C07803803807803C07803C078
+03C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
+03E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>48
+D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E0
+0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
+0003E0007FFF807FFF80111B7D9A18>I<78FCFCFCFC7800000000000078FCFCFCFC7806
+127D910D>58 D<00038000000380000007C0000007C0000007C000000FE000000FE00000
+1FF000001BF000003BF8000031F8000031F8000060FC000060FC0000E0FE0000C07E0000
+C07E0001803F0001FFFF0003FFFF8003001F8007001FC006000FC006000FC00C0007E00C
+0007E0FF803FFEFF803FFE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00F
+C007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000F
+FFFE000FC00F800FC007C00FC003E00FC003E00FC003F00FC003F00FC003F00FC003F00F
+C003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FF
+F8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000607C000060FC00
+0000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C0000607E00
+00603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE0001B1C
+7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000
+FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC000
+7E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01F
+C0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC00300
+0FC003800FC003800FC0C1800FC0C1800FC0C1800FC1C0000FC3C0000FFFC0000FFFC000
+0FC3C0000FC1C0000FC0C0000FC0C0600FC0C0600FC000E00FC000C00FC000C00FC001C0
+0FC001C00FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000F
+C01F000FC007000FC003000FC003800FC003800FC001800FC0C1800FC0C1800FC0C0000F
+C1C0000FC3C0000FFFC0000FFFC0000FC3C0000FC1C0000FC0C0000FC0C0000FC0C0000F
+C000000FC000000FC000000FC000000FC000000FC00000FFFE0000FFFE0000191C7E9B1E
+>I<000FF008007FFE3801FC07F807E001F80F8000781F0000783F0000383E0000387E00
+00187C000018FC000000FC000000FC000000FC000000FC000000FC000000FC007FFFFC00
+7FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E001F801FC07F8007F
+FE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFCFFFC0FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC0FFFCFFFC0E1C7E9B12>I<07FFF007FFF0001F80001F80001F80001F80001F80
+001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80
+001F80301F80781F80FC1F80FC1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFC
+07FF00FFFC07FF000FC000E0000FC001C0000FC00380000FC00600000FC00C00000FC038
+00000FC07000000FC0E000000FC1C000000FC3C000000FC7E000000FCFF000000FFBF000
+000FF1F800000FE0FC00000FC0FE00000FC07E00000FC03F00000FC01F80000FC01FC000
+0FC00FC0000FC007E0000FC007F0000FC003F800FFFC1FFF80FFFC1FFF80211C7E9B25>
+I<FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0070FC0060FC0
+0E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>I<FFC00003FFFFE00007FF0FE00007F00D
+F0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E
+0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C3
+01F00C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801
+F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003FFFFE003FF0FF000300F
+F800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0FE0300C07F0300C
+03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C000FF00C
+0007F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<FFFF
+F800FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC0
+00000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC
+00001B1C7E9B21>80 D<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000F
+C007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC0
+3E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F
+80000FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C3
+00FFFC01FE00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F0
+0060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F000
+00F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFF
+E07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F80
+30001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE0007FFFE
+001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C0
+00FC0780007FFE00000FF800201C7E9B25>I<FFF87FFE0FFCFFF87FFE0FFC0FC007E000
+C00FC007F000C00FE003F001C007E003F0018007E007F8018007F007F8038003F00FFC03
+0003F00CFC030001F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC303F0C
+0000FE303F1C00007E703F9800007E601F9800003F601FB000003FE01FF000003FC00FF0
+00001FC00FE000001F8007E000001F8007E000000F8007C000000F0003C0000007000380
+000007000380002E1C7F9B31>87 D<7FFE1FFE007FFE1FFE0007F001800003F803800001
+F807000001FC06000000FE0C0000007F1C0000003F380000003FB00000001FE00000000F
+E00000000FE000000007F000000003F800000007F80000000FFC0000000CFE000000187E
+000000387F000000703F800000601FC00000C01FC00001C00FE000038007F000030003F0
+00FFF01FFF80FFF01FFF80211C7F9B24>I<0FF8001C1E003E0F803E07803E07C01C07C0
+0007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F8
+15127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F
+003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E00
+1C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F80000780000780180
+3C01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001
+F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801
+F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D
+7E9C1B>I<03FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F8
+0000F800007800007800603C00601E00C00F038001FC0013127F9116>I<007F0001E380
+03C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F8000
+0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000
+0F80007FF0007FF000121D809C0F>I<03F0F00E1F383C0F383807307807807807807807
+807807803807003C0F001E1C0033F0003000003000003000003FFF003FFFC01FFFE01FFF
+F07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF
+00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F
+40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F81F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000
+0000000000007F007F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F00FFC0FFC00A1E7F9D0E>I<007800FC00FC00FC00FC00780000000000000000000000
+0003FC03FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00
+7C007C007C707CF87CF878F8F070E01F800E26839D0F>I<FF0000FF00001F00001F0000
+1F00001F00001F00001F00001F00001F00001F00001F03FC1F03FC1F01C01F03001F0E00
+1F1C001F38001F78001FFC001FBE001F1F001F0F001F0F801F07C01F03E01F01E0FFE7FE
+FFE7FE171D7F9C19>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C
+0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F8
+07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
+C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40
+F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F8
+00F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015
+127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E
+1F003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00001F00001F00001F0000
+1F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE47001E8F801E8F801E8F801F07
+001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFE000FFE0
+0011127F9114>114 D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01C
+C01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F003FFCFF
+FC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F
+9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F
+00601F80600F80C00F80C007C18007C18003E30003E30003F70001F60001FE0000FC0000
+FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F03
+E0300F87F0600F86F0600FC6F8E007CC78C007CC78C003FC7D8003F83D8003F83F8001F0
+1F0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7FC1F81C00F83
+8007C70003EE0001FC0001F80000F800007C0000FE0001DF00039F80070F800607C00C03
+E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F80600F80C00F80C007C18007
+C18003E30003E30003F70001F60001FE0000FC0000FC0000780000780000300000300000
+6000706000F8E000F8C000F980007300003E0000161A7F9119>I<38387C7CFC7EFC7E7C
+7C38380F067C9D18>127 D E /FI 21 122 df<1E003F007F80FFC0FFC0FFC0FFC07F80
+3F001E000A0A7B8915>46 D<7FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF07F803FE00FF0
+7E003FE003F07C003FE001F078003FE000F070003FE00070F0003FE00078F0003FE00078
+F0003FE00078E0003FE00038E0003FE00038E0003FE00038E0003FE00038E0003FE00038
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000FFFFFFF80000FFFFFFF80000FFFFFFF8002D2D7DAC34>
+84 D<01FFE000000FFFF800001F007E00003F803F00003FC01F80003FC01FC0003FC00F
+C0001F800FE0000F000FE00000000FE00000000FE00000000FE00000007FE000003FFFE0
+0001FFCFE00007F80FE0000FE00FE0001F800FE0003F000FE0007F000FE000FE000FE000
+FE000FE000FE000FE000FE000FE000FE001FE0007F001FE0003F0037F0001FC0E7FF800F
+FFC3FF8001FF00FF80211E7E9D24>97 D<0000003F0000000FFF0000000FFF0000000FFF
+000000007F000000007F000000007F000000007F000000007F000000007F000000007F00
+0000007F000000007F000000007F000000007F000000007F00000FF87F00007FFE7F0001
+FC0F7F0003F003FF0007E000FF000FC0007F001F80007F003F80007F003F80007F007F00
+007F007F00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF0000
+7F00FF00007F00FF00007F007F00007F007F00007F007F00007F003F80007F001F80007F
+000FC000FF0007C001FF0003E003FF0001F80F7FF8007FFC7FF8000FF07FF8252E7EAD2A
+>100 D<001FF00000FFFC0001F83F0007E00F800FC007C01F8007E01F8003E03F8003F0
+7F0003F07F0001F87F0001F8FF0001F8FF0001F8FFFFFFF8FFFFFFF8FF000000FF000000
+FF000000FF0000007F0000007F0000007F0000003F8000381F8000380FC0007007C000E0
+03E001C001F80F80007FFF00000FF8001D1E7E9D22>I<003FC03E0001FFF9FF0003F0FF
+CF8007C03E1F800FC03F0F801F801F87001F801F80003F801FC0003F801FC0003F801FC0
+003F801FC0003F801FC0003F801FC0001F801F80001F801F80000FC03F000007C03E0000
+07F0FC00000FFFF800000C3FC000001C000000001C000000001C000000001E000000001F
+000000001FFFFE00000FFFFFC0000FFFFFF00007FFFFF80003FFFFFC001FFFFFFE003E00
+01FE007C00003F007800001F00F800001F00F800001F00F800001F00F800001F007C0000
+3E003E00007C001F0000F8000FE007F00003FFFFC000003FFC0000212C7E9D25>103
+D<03F0000000FFF0000000FFF0000000FFF000000007F000000007F000000007F0000000
+07F000000007F000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F01FC00007F07FF00007F1E0F80007F380FC0007F6007E0007FC
+007E0007FC007F0007F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+FFFF8FFFF8FFFF8FFFF8FFFF8FFFF8252E7DAD2A>I<07800FC01FE03FF03FF03FF03FF0
+1FE00FC00780000000000000000000000000000007E0FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE0FFFEFFFEFFFE0F2F7DAE14>I<07E0000000FFE0000000FFE0000000FFE00000000F
+E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
+0000000FE00000000FE00000000FE00000000FE00000000FE00FFF800FE00FFF800FE00F
+FF800FE001E0000FE003C0000FE00780000FE00F00000FE01E00000FE03C00000FE07000
+000FE1E000000FE3C000000FE7E000000FEFF000000FFFF800000FFBF800000FF1FC0000
+0FE0FE00000FC07E00000FC07F00000FC03F80000FC01FC0000FC01FC0000FC00FE0000F
+C007F0000FC003F0000FC003F800FFFC0FFFC0FFFC0FFFC0FFFC0FFFC0222E7DAD27>
+107 D<03E01FC001FC0000FFE07FF007FF0000FFE1E0F81E0F8000FFE380FC380FC00007
+E6007E6007E00007EC007EC007E00007EC007FC007F00007F8007F8007F00007F8007F80
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F000FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80391E7D9D3E>109
+D<03E01FC000FFE07FF000FFE1E0F800FFE380FC0007E6007E0007EC007E0007EC007F00
+07F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0
+007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00FFFF8FFFF8FFFF8F
+FFF8FFFF8FFFF8251E7D9D2A>I<001FF80000FFFF0003F81FC007E007E00FC003F01F80
+01F83F8001FC3F8001FC7F0000FE7F0000FE7F0000FEFF0000FFFF0000FFFF0000FFFF00
+00FFFF0000FFFF0000FFFF0000FFFF0000FF7F0000FE7F0000FE7F0000FE3F8001FC3F80
+01FC1F8001F80FC003F007E007E003F81FC000FFFF00001FF800201E7E9D25>I<03F07F
+8000FFF1FFF000FFF781FC00FFFE007E0007FC003F0007F8001F8007F0001FC007F0000F
+E007F0000FF007F0000FF007F00007F007F00007F807F00007F807F00007F807F00007F8
+07F00007F807F00007F807F00007F807F00007F807F00007F007F0000FF007F0000FE007
+F0000FE007F0001FC007F8001F8007FC003F0007FE007E0007F781FC0007F3FFF00007F0
+7F800007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F0000000FFFF800000FFFF800000FFFF800000252B7E9D
+2A>I<03E0FC00FFE1FF00FFE30F80FFE61F8007EC3FC007EC3FC007F83FC007F81F8007
+F80F0007F8000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F00000FFFFC000FFFFC000FFFFC0001A1E7E9D1F>114 D<01FF0C0FFFFC1E01FC38007C
+70003C70001CF0001CF0001CF8001CFE0000FFC0007FFE007FFFC03FFFF00FFFF807FFFC
+01FFFE000FFE0000FF60003FE0001FE0000FF0000FF0000FF8000EF8001EFE001CFF80F8
+E3FFE0C0FF80181E7E9D1D>I<00380000380000380000380000780000780000780000F8
+0000F80001F80003F80007F8001FFFFCFFFFFCFFFFFC03F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80E03F8
+0E03F80E03F80E03F80E03F80E03F80E01F81C00FC1C007C38003FF0000FE0172A7FA91D
+>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+07F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F000FF0007F000FF0003F001FF0001F0037F0000FC0E7FF8007F
+FC7FF8001FF07FF8251E7D9D2A>I<FFFC00FFC0FFFC00FFC0FFFC00FFC00FE0001C000F
+F0003C0007F000380007F000380003F800700003F800700003FC00F00001FC00E00001FE
+01E00000FE01C00000FE01C000007F038000007F038000003F870000003F870000003FCF
+0000001FCE0000001FFE0000000FFC0000000FFC00000007F800000007F800000007F800
+000003F000000003F000000001E000000001E00000221E7E9D27>I<FFFE1FFF81FFE0FF
+FE1FFF81FFE0FFFE1FFF81FFE007F001F8001E0007F001FC001C0007F000FC003C0003F8
+00FC00380003F801FE00380003FC01FE00780001FC01FE00700001FC03BF00700000FE03
+BF00E00000FE07BF80E00000FF071F81E000007F071F81C000007F0E0FC1C000003F8E0F
+C38000003F9E0FC38000003F9C07E78000001FDC07E70000001FFC07F70000001FF803FF
+0000000FF803FE0000000FF001FE00000007F001FC00000007F001FC00000007E000FC00
+000003E000F800000003C0007800000001C000700000331E7F9D36>I<FFFE03FFE0FFFE
+03FFE0FFFE03FFE007F800780003FC00F00001FC01E00000FE03C000007F03C000007F87
+8000003FCF0000001FDE0000000FFC00000007F800000007F800000003F800000001FC00
+000003FE00000007FF000000077F8000000F3F8000001E1FC000003C0FE00000780FF000
+00F007F80000E003F80001E001FC0003C000FE00FFF807FFF0FFF807FFF0FFF807FFF024
+1E7F9D27>I<7FFE007FE07FFE007FE07FFE007FE007F0000E0007F8001E0003F8001C00
+03F8001C0001FC00380001FC00380001FE00780000FE00700000FF00F000007F00E00000
+7F00E000003F81C000003F81C000001FC38000001FC38000001FE78000000FE70000000F
+FF00000007FE00000007FE00000003FC00000003FC00000003FC00000001F800000001F8
+00000000F000000000F000000000E000000000E000000001E000000001C000003803C000
+007C03800000FE07800000FE07000000FE0E000000FC1E000000787C0000003FF0000000
+0FC0000000232B7F9D27>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 57 1
+57 56 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y Fy(26.)52 b(Examples)0
+158 y FF(The)14 b FG(Dash)p FF(,)e FG(Dashto)f FF(and)j
+FG(Mono)e FF(cell)h(t)o(yp)q(es)h(in)f(some)f(of)h(these)h(examples)e
+(use)i(the)g FG(arrsy10)e FF(fon)o(t:)17 b(See)d Fw(x)q
+FF(14)e(and)h FG(\\arrsy)0 208 y FF(in)g Fw(x)q FF(25.)k(Also,)d
+FG(\\bb)f FF(in)o(v)o(ok)o(es)g(the)i(bbm)d(family)f(of)i(fon)o(ts.)-79
+299 y Fr(1)62 b Fx($$)-79 349 y Fr(2)g Fx(\\grid=.75c)o(m)-79
+399 y Fr(3)g Fx(\\Diagram)-79 448 y Fr(4)g Fx(A')176
+b(&)137 b(&)19 b(\\rTo)f(^{f'})g(&)137 b(&)19 b(B')529
+b(\\\\)-79 498 y Fr(5)278 b Fx(&)19 b(\\rdTo)f(<a)h(\\dh{2pt})o(&)e(&)
+137 b(&)176 b(&)19 b(\\rdTo)f(_b)215 b(\\\\)-79 548 y
+Fr(6)62 b Fx(\\dTo)18 b(<{g'})g(&)137 b(&)19 b(A)196
+b(&)137 b(&)19 b(\\dTo)f(<{h'})g(:{.25})-79 598 y Fr(7)886
+b Fx(\\rTo)18 b(^f)h(:{.25})e(\\br)-79 648 y Fr(8)1043
+b Fx(&)195 b(&)20 b(B)137 b(\\\\)-79 697 y Fr(9)1455
+b Fx(\\\\)-95 747 y Fr(10)61 b Fx(C')176 b(&)137 b(&)19
+b(\\rTo)f(^{k'})g(:{.75})f(\\dTo)h(<g)h(:{.25})e(\\br)-95
+797 y Fr(11)689 b Fx(&)137 b(&)19 b(D')117 b(&)195 b(&)20
+b(\\dTo)e(>h)h(\\\\)-95 847 y Fr(12)277 b Fx(&)19 b(\\rdTo)f(_c)h
+(\\dh{.5pt)o(}&&)134 b(&)176 b(&)19 b(\\rdTo)f(_d)215
+b(\\\\)-95 897 y Fr(13)277 b Fx(&)137 b(&)19 b(C)196
+b(&)137 b(&)19 b(\\rTo)f(^k)h(&)195 b(&)20 b(D)137 b(\\\\)-95
+946 y Fr(14)61 b Fx(\\endDiagra)o(m)-95 996 y Fr(15)g
+Fx($$)889 1135 y
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135 a 741
+1146 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)-21 b Fv(\021)889 1135 y
+grestore
+
+889 1135 a 889 1135 a
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135
+a 888 1123 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 888 1123 a 873 1117 a Fu(f)892 1105 y Ft(0)888
+1135 y
+grestore
+ 888 1135 a 800 1224 a
+gsave
+ 800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800
+1224 a 698 1234 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+h(\000)-19 b Fv(\021)800 1224 y
+grestore
+ 800 1224 a 800 1224 a
+gsave
+
+800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1224 a 800 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1236
+a 782 1249 a Fu(a)800 1224 y
+grestore
+ 800 1224 a 1154 1224 a
+gsave
+ 1154
+1224 a 1154 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1052 1234 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)1154
+1224 y
+grestore
+ 1154 1224 a 1154 1224 a
+gsave
+ 1154 1224 a 1154 1224
+a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1149 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1236 a 1134 1257 a Fu(b)1149
+1224 y
+grestore
+ 1149 1224 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 553 1323 a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)711
+1313 y
+grestore
+ 711 1313 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 705 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 705 1325 a 677 1335 a Fu(g)694 1323
+y Ft(0)705 1313 y
+grestore
+ 705 1313 a 1066 1313 a
+gsave
+ 1066 1313 a
+1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 907 1323 a Fw(\000)f(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)
+-16 b Fv(\021)1066 1313 y
+grestore
+ 1066 1313 a 1066 1313 a
+gsave
+ 1066
+1313 a 1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 983 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 983 1325 a
+952 1335 a Fu(h)971 1323 y Ft(0)983 1313 y
+grestore
+ 983 1313 a
+1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 889 1313
+a
+1 setgray
+ 889 1313 a 912 1323 306 21 v 1066 1313 a
+grestore
+ 1066 1313
+a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 912
+1323 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)1066 1313 y
+grestore
+
+1066 1313 a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066
+1313 a 989 1300 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 989 1300 a 979 1294 a Fu(f)989 1313
+y
+grestore
+ 989 1313 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 742 1500 a Fw(\000)-23 b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 961 1477 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 961 1477 a -15 w Fu(k)965 1465 y Ft(0)961
+1490 y
+grestore
+ 961 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889
+1490 a 711 1490 a
+1 setgray
+ 711 1490 a 730 1500 310 21 v 889 1490
+a
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 730 1500 a Fw(\000)-14 b(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 807 1502 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 807 1502 a 790 1513 a Fu(g)807 1490 y
+grestore
+ 807
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1084 1500 a Fw(\000)g(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)c Fv(\021)1243 1490 y
+grestore
+ 1243
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1239 1477 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 1239 1477 a 11 x Fu(h)1239 1490 y
+grestore
+ 1239
+1490 a 800 1578 a
+gsave
+ 800 1578 a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 698
+1589 a Fw(\000)-23 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-22 b Fv(\021)800 1578 y
+grestore
+ 800 1578 a 800 1578 a
+gsave
+ 800 1578
+a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 797 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 797 1591 a 782 1603
+a Fu(c)797 1578 y
+grestore
+ 797 1578 a 1154 1578 a
+gsave
+ 1154 1578 a
+1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1578 a 1052 1589 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)c Fv(\021)1154 1578
+y
+grestore
+ 1154 1578 a 1154 1578 a
+gsave
+ 1154 1578 a 1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154
+1578 a 1149 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1591 a 1132 1611 a Fu(d)1149
+1578 y
+grestore
+ 1149 1578 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 913 1677 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1066
+1667 y
+grestore
+ 1066 1667 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 1065 1654 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1065 1654 a -9 w Fu(k)1065
+1667 y
+grestore
+ 1065 1667 a 690 1146 a FB(A)721 1129 y Fs(0)1043
+1146 y FB(B)1076 1129 y Fs(0)873 1323 y FB(A)322 b(B)689
+1500 y(C)722 1483 y Fs(0)1042 1500 y FB(D)1077 1483 y
+Fs(0)872 1677 y FB(C)h(D)0 1852 y FH(G.)16 b(Bredon)p
+FF(,)11 b FC(Intr)n(o)n(duction)16 b(to)e(Comp)n(act)h(T)m(r)n
+(ansformation)f(Gr)n(oups)p FF(,)g(page)g(75.)-79 1944
+y Fr(1)62 b Fx($$)-79 1993 y Fr(2)g Fx(\\Dg)-79 2043
+y Fr(3)g Fx(F\\times)17 b(K\\times)g(U)98 b(&)19 b(\\rTo)f(^{\\rm)f
+(proj})97 b(&)215 b(&)19 b(K\\times)e(U)157 b(\\\\)-79
+2093 y Fr(4)62 b Fx(\\dTo)352 b(&)431 b(&)215 b(&)19
+b(\\dTo)f(>{\\rm)g(proj})g(\\\\)-79 2143 y Fr(5)62 b
+Fx(F\\times_K)16 b(\(K\\times)h(U\))i(&)g({})g(\\approx)d(F\\times)h(U)
+j(&)f(\\rTo)f(^{\\rm)g(proj}&)f(U)196 b(\\\\)-79 2193
+y Fr(6)62 b Fx(\\endDg)-79 2242 y Fr(7)g Fx($$)1012 2377
+y
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 885 2387 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-20 b Fv(\021)1012 2377 y
+grestore
+ 1012 2377 a 1012
+2377 a
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 1033 2364
+a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1033 2364 a 1003 2358 a Fr(pro)r(j)1033 2377 y
+grestore
+ 1033
+2377 a 774 2471 a
+gsave
+ 774 2471 a 774 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 774 2471 a 701
+2482 a Fw(\000)i(\000)-9 b(\000)g(\000)g(\000)-18 b Fv(\021)774
+2471 y
+grestore
+ 774 2471 a 1250 2471 a
+gsave
+ 1250 2471 a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1250 2471 a 1178 2482 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-16
+b Fv(\021)1250 2471 y
+grestore
+ 1250 2471 a 1250 2471 a
+gsave
+ 1250 2471
+a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1250 2471 a 1248 2459 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1248 2459 a 10
+x Fr(pro)r(j)1248 2471 y
+grestore
+ 1248 2471 a 1122 2566 a
+gsave
+ 1122
+2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1088 2576 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1122 2566 y
+grestore
+ 1122 2566
+a 1122 2566 a
+gsave
+ 1122 2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1157
+2553 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1157 2553 a 1127 2547 a Fr(pro)r(j)1157 2566 y
+grestore
+
+1157 2566 a 671 2387 a FB(F)15 b Fw(\002)10 b FB(K)i
+Fw(\002)d FB(U)318 b(K)12 b Fw(\002)e FB(U)639 2576 y(F)15
+b Fw(\002)713 2582 y Fu(K)754 2576 y FF(\()p FB(K)e Fw(\002)c
+FB(U)c FF(\))12 b Fw(\031)g FB(F)j Fw(\002)9 b FB(U)158
+b(U)954 2770 y FF(57)p eop
+%%Page: 58 2
+58 57 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\joined)17 b(\\let\\labe)o(lst)o(yle)o(\\t)o(ext)o(st)o
+(yle)-79 141 y Fr(3)62 b Fx(\\Graph{3cm)o(,2)o(}{3)o(cm)o(,4})-79
+191 y Fr(4)g Fx(\\Line)18 b(\(0,0\))f(\(0,4\))h(<{f\(z,s\)})-79
+241 y Fr(5)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,4\))h(^{H\(z,t\)})-79
+291 y Fr(6)62 b Fx(\\Line)18 b(\(0,0\))f(\(2,0\))h(_{*})-79
+340 y Fr(7)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,4\))-79
+390 y Fr(8)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,2\))h(_{\\;\\;H\(z,)o(0\))
+e(=)j(f\(z,1\)})e(\\ro)-79 440 y Fr(9)62 b Fx(\\endGraph)-95
+490 y Fr(10)f Fx(\\qquad\\qqu)o(ad)-95 540 y Fr(11)g
+Fx(H'\(z,t,s\))16 b(=)-95 589 y Fr(12)61 b Fx(\\cases{f\(z)o(,2)o(s/\()
+o(2-)o(t\)\))o(&)17 b(if)h($0\\le)g(2s\\le)g(2)h(-)g(t$\\cr)-95
+639 y Fr(13)198 b Fx(\\cr)-95 689 y Fr(14)g Fx(H\(z,2s)18
+b(-)h(2)g(+)g(t\)&)g(if)g($2)f(-)i(t\\le)e(2s\\le)f(2$\\cr})-95
+739 y Fr(15)61 b Fx($$)263 1012 y
+gsave
+ 263 1012 a 263 1012
+a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 82 1022 a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+-17 b(\000)263 1012 y
+grestore
+ 263 1012 a 263 1012 a
+gsave
+ 263 1012
+a 263 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 263 999 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 263 999 a 147 1009
+a FB(f)t FF(\()p FB(z)r(;)7 b(s)p FF(\))263 1012 y
+grestore
+ 263
+1012 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834 a 259 845
+a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-17 b(\000)440
+834 y
+grestore
+ 440 834 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834
+a 440 822 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 822 a 378 812 a FB(H)s FF(\()p FB(z)r(;)7
+b(t)p FF(\))440 834 y
+grestore
+ 440 834 a 440 1189 a
+gsave
+ 440 1189 a
+440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 259 1199 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)-17 b(\000)440 1189 y
+grestore
+ 440 1189 a
+440 1189 a
+gsave
+ 440 1189 a 440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 440 1201
+a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1201 a 430 1220 a Fw(\003)440 1189 y
+grestore
+ 440 1189 a
+617 1012 a
+gsave
+ 617 1012 a 617 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 617 1012 a 436 1022
+a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-16 b(\000)617
+1012 y
+grestore
+ 617 1012 a 440 923 a
+gsave
+ 440 923 a 440 923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923
+a 238 933 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)
+-19 b(\000)440 923 y
+grestore
+ 440 923 a 440 923 a
+gsave
+ 440 923 a 440
+923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923 a 300 967 a FB(H)s FF(\()p FB(z)r(;)7 b
+FF(0\))k(=)h FB(f)t FF(\()p FB(z)r(;)7 b FF(1\))440 923
+y
+grestore
+ 440 923 a 784 1022 a FB(H)822 1005 y Fs(0)833 1022
+y FF(\()p FB(z)r(;)g(t;)g(s)p FF(\))k(=)1013 937 y Fq(8)1013
+974 y(<)1013 1049 y(:)1057 972 y FB(f)t FF(\()p FB(z)r(;)c
+FF(2)p FB(s=)p FF(\(2)j Fw(\000)f FB(t)p FF(\)\))53 b(if)13
+b(0)e Fw(\024)h FF(2)p FB(s)g Fw(\024)f FF(2)e Fw(\000)h
+FB(t)1057 1072 y(H)s FF(\()p FB(z)r(;)d FF(2)p FB(s)i
+Fw(\000)h FF(2)f(+)g FB(t)p FF(\))42 b(if)13 b(2)c Fw(\000)g
+FB(t)j Fw(\024)g FF(2)p FB(s)f Fw(\024)h FF(2)-79 1471
+y Fr(1)62 b Fx($$)-79 1520 y Fr(2)g Fx(\\def\\mod{\\)o(ma)o(thr)o(el)o
+({\\b)o(ig/)o(}})-79 1570 y Fr(3)g Fx(\\Dg)-79 1620 y
+Fr(4)g Fx({\\rm)18 b(Spin}\(3\))f(&)156 b(&)137 b(&)g(&)19
+b(SU\(2\))136 b(\\\\)-79 1670 y Fr(5)337 b Fx(&)19 b(\\rdTo)37
+b(&)137 b(&)19 b(\\ldTo)293 b(\\\\)-79 1720 y Fr(6)337
+b Fx(&)156 b(&)19 b(SO\(3\))450 b(\\\\)-79 1769 y Fr(7)337
+b Fx(&)156 b(&)19 b(\\dTo)470 b(\\\\)-79 1819 y Fr(8)62
+b Fx(&)19 b(O\(3\)\\mod)e(O\(1\)^3)g(=)i({})g(&)g(SO\(3\)\\mod\()o
+(O\(1)o(\)^3)o(\\c)o(ap)d(SO\(3\)\))i(\\\\)-79 1869 y
+Fr(9)62 b Fx(\\endDg)-95 1919 y Fr(10)f Fx($$)1030 2150
+y
+gsave
+ 1030 2150 a 1030 2150 a
+currentpoint currentpoint translate -2983488 neg 2797019 atan rotate
+neg exch neg exch translate
+ 1030 2150 a 937 2161 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)-18 b Fv(\021)1030
+2150 y
+grestore
+ 1030 2150 a 1207 2150 a
+gsave
+ 1207 2150 a 1207 2150
+a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1207 2150 a 1114 2161 a Fw(\000)g(\000)-8 b(\000)f(\000)g(\000)g
+(\000)g(\000)-17 b Fv(\021)1207 2150 y
+grestore
+ 1207 2150 a 1119
+2339 a
+gsave
+ 1119 2339 a 1119 2339 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1119 2339 a 1053 2350
+a Fw(\000)k(\000)k(\000)g(\000)d Fv(\021)1119 2339 y
+grestore
+
+1119 2339 a 875 2066 a FF(Spin)o(\(3\))231 b FB(S)r(U)5
+b FF(\(2\))1062 2255 y FB(S)r(O)q FF(\(3\))597 2444 y
+FB(O)q FF(\(3\))695 2411 y Fq(\016)730 2444 y FB(O)q
+FF(\(1\))816 2427 y Fr(3)846 2444 y FF(=)12 b FB(S)r(O)q
+FF(\(3\))1015 2411 y Fq(\016)1051 2444 y FF(\()p FB(O)q
+FF(\(1\))1153 2427 y Fr(3)1181 2444 y Fw(\\)d FB(S)r(O)q
+FF(\(3\)\))954 2770 y(58)p eop
+%%Page: 59 3
+59 58 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)p
+FF(,)d FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(109.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\def\\cod{{)o(\\r)o(m)17 b(cod}\\,})g(\\def\\dom)o({{\\)o
+(rm)f(dom}\\,})-79 232 y Fr(3)62 b Fx(\\cellwidth)o(+=)o(2mm)-79
+282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i
+(&)g(\\rEq)136 b(&)19 b(F)g(&)g(_{\\cod)f(u})h(&)97 b(&)255
+b(&)19 b(F_i)293 b(\\\\)-79 382 y Fr(6)62 b Fx(&)19 b(\\uTo)f(>{p_u})g
+(&)h(&)235 b(&)19 b(\\uTo)f(&)157 b(&)97 b(&)20 b(\\ruTo)d(<{p_i})h
+(\\tx{-5pt)o(})f(&)-79 432 y Fr(7)1376 b Fx(\\uDashto)17
+b(>{\\mu_i})f(\\\\)-79 482 y Fr(8)62 b Fx({\\mit\\Pi}_)o({u)o(:j\\)o
+(to)16 b(k}F_k)i(=)h({\\mit\\Pi})o(_u)d(&)-79 531 y Fr(9)101
+b Fx(F)19 b(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^f)h(\\up{3pt})d(\\lTo)j(_g)
+f(\\up{-3pt})-95 581 y Fr(10)630 b Fx(&)19 b({\\mit\\Pi}_)o(i)d(&)k(&)f
+(F_i)f(&)i(\\lDashto)c(^e)j(&)g(d)333 b(\\\\)-95 631
+y Fr(11)61 b Fx(&)19 b(\\dTo)f(>{p_u})g(&)h(&)235 b(&)19
+b(\\dTo)f(>{p_{\\dom)e(u}})705 b(\\\\)-95 681 y Fr(12)61
+b Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^{Fu})g(&)h(F)g(&)g
+(_{\\dom)f(u})803 b(\\\\)-95 731 y Fr(13)61 b Fx(\\endDg)-95
+780 y Fr(14)g Fx($$)1018 915 y
+gsave
+ 1018 915 a 1018 915 a
+currentpoint currentpoint translate 0 neg 3793467 atan rotate neg exch
+neg exch translate
+
+1018 915 a 1013 925 a FF(=)1018 915 y
+grestore
+ 1018 915 a 842
+1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009 a 774 1019 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-15 b Fv(\021)842 1009
+y
+grestore
+ 842 1009 a 842 1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009
+a 846 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 846 1022 a 10 x Fu(p)863 1036 y Fe(u)846
+1009 y
+grestore
+ 846 1009 a 1138 1009 a
+gsave
+ 1138 1009 a 1138 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1138 1009 a 1070 1019 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1138 1009 y
+grestore
+ 1138 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1164 1019 a Fw(\000)-21 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)1276 1009 y
+grestore
+ 1276 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1277 997 a
+currentpoint currentpoint translate -2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1277 997 a 1247
+991 a Fu(p)1264 995 y Fe(i)1277 1009 y
+grestore
+ 1277 1009 a 1391
+1009 a
+gsave
+ 1391 1009 a 1391 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1327 1019
+a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)-14 b(\014)1391
+1009 y
+grestore
+ 1391 1009 a 1391 1009 a
+gsave
+ 1391 1009 a 1391 1009
+a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1392 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1392 1022 a 10 x Fu(\026)1412
+1036 y Fe(i)1392 1009 y
+grestore
+ 1392 1009 a 1018 1091 a
+gsave
+ 1018
+1091 a 1018 1091 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 930 1102 a Fw(\000)-19
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)1018
+1091 y
+grestore
+ 1018 1091 a 1018 1091 a
+gsave
+ 1018 1091 a 1018 1091
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104 a 1001 1098 a Fu(f)1011
+1091 y
+grestore
+ 1011 1091 a 1018 1116 a
+gsave
+ 1018 1116 a 1018 1116
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 930 1126 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-18 b Fv(\021)1018 1116 y
+grestore
+ 1018 1116 a 1018 1116 a
+gsave
+ 1018
+1116 a 1018 1116 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104
+a 1002 1116 a Fu(g)1011 1116 y
+grestore
+ 1011 1116 a 1286 1104
+a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286 1104 a 1205 1114 a Fv(\013)-9
+b(\013)g(\013)g(\013)h(\013)f(\013)-14 b(\014)1286 1104
+y
+grestore
+ 1286 1104 a 1286 1104 a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286
+1104 a 1281 1116 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1281 1116 a -8 w Fu(e)1281 1104 y
+grestore
+
+1281 1104 a 842 1198 a
+gsave
+ 842 1198 a 842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198
+a 767 1208 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)842 1198 y
+grestore
+ 842 1198 a 842 1198 a
+gsave
+ 842 1198 a
+842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198 a 838 1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 838 1186 a 10 x Fu(p)855
+1200 y Fe(u)838 1198 y
+grestore
+ 838 1198 a 1138 1198 a
+gsave
+ 1138 1198
+a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1068 1208 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1138 1198 y
+grestore
+ 1138 1198
+a 1138 1198 a
+gsave
+ 1138 1198 a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1137
+1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1137 1186 a 10 x Fu(p)1154 1200 y Fp(dom)t Fe(u)1137
+1198 y
+grestore
+ 1137 1198 a 1018 1293 a
+gsave
+ 1018 1293 a 1018 1293
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 922 1303 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)1018 1293 y
+grestore
+ 1018 1293 a 1018 1293 a
+gsave
+ 1018
+1293 a 1018 1293 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 1007 1305 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1007 1305
+a -23 w Fu(F)t(u)1007 1293 y
+grestore
+ 1007 1293 a 826 925 a FB(F)859
+931 y Fr(co)q(d)5 b Fu(u)1122 925 y FB(F)1160 931 y Fr(co)q(d)g
+Fu(u)1370 925 y FB(F)1397 931 y Fu(i)539 1114 y FB(\005)574
+1120 y Fu(u)p Fr(:)p Fu(j)r Fh(\021)p Fu(k)668 1114 y
+FB(F)695 1120 y Fu(k)726 1114 y FF(=)12 b FB(\005)805
+1120 y Fu(u)826 1114 y FB(F)859 1120 y Fr(co)q(d)5 b
+Fu(u)1114 1114 y FB(\005)1149 1120 y Fu(i)1162 1114 y
+FB(F)1189 1120 y Fu(i)1380 1114 y FB(d)826 1303 y(F)859
+1309 y Fr(co)q(d)g Fu(u)1122 1303 y FB(F)1154 1309 y
+Fr(dom)h Fu(u)0 1670 y FH(S.)16 b(Mac)g(Lane)p FF(,)d
+FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(117.)-79 1761 y Fr(1)62 b Fx($$)-79 1811
+y Fr(2)g Fx(\\Dg)-79 1861 y Fr(3)g Fx(u)215 b(&)20 b(\\rTo)e(^{e_1})56
+b(&)19 b(v)137 b(&)20 b(&)f(\\rTo)f(\\up{3pt})e(^f)j(\\rTo)f
+(\\up{-3pt})e(_g)j(&)g(d)79 b(\\\\)-79 1911 y Fr(4)62
+b Fx(\\uDashto)17 b(>s)h(&)294 b(&)19 b(\\dTo)f(>e)h(&)373
+b(&)352 b(&)19 b(\\uTo)g(\\\\)-79 1961 y Fr(5)62 b Fx(w)215
+b(&)20 b(\\rTo)e(^{ee_1s})e(&)j(w)137 b(&)20 b({})e(=)i({\\mit\\Pi})o
+(k_)o(i)d(&)i(\\rTo)253 b(&)19 b(k_i)39 b(\\\\)-79 2010
+y Fr(6)62 b Fx(\\endDg)-79 2060 y Fr(7)g Fx($$)812 2195
+y
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195 a 740 2205 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-14 b Fv(\021)812 2195
+y
+grestore
+ 812 2195 a 812 2195 a
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195
+a 813 2182 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 813 2182 a 797 2178 a Fu(e)813 2182 y Fp(1)813
+2195 y
+grestore
+ 813 2195 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+
+1066 2182 a 924 2193 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2182 a 1066 2170 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2170 a 1056 2164 a Fu(f)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 924 2218 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2207 y
+grestore
+ 1066 2207 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 1066 2220 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2220 a 1057 2232 a Fu(g)1066
+2207 y
+grestore
+ 1066 2207 a 720 2289 a
+gsave
+ 720 2289 a 720 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720
+2289 a 642 2300 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)-16
+b(\014)720 2289 y
+grestore
+ 720 2289 a 720 2289 a
+gsave
+ 720 2289 a 720
+2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720 2289 a 719 2302 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 719 2302 a 10 x Fu(s)719
+2289 y
+grestore
+ 719 2289 a 904 2289 a
+gsave
+ 904 2289 a 904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904
+2289 a 829 2300 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)904 2289 y
+grestore
+ 904 2289 a 904 2289 a
+gsave
+ 904 2289 a
+904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904 2289 a 905 2277 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 905 2277 a 10 x Fu(e)905
+2289 y
+grestore
+ 905 2289 a 1228 2289 a
+gsave
+ 1228 2289 a 1228 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1228 2289 a 1160 2300 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1228 2289 y
+grestore
+ 1228 2289 a 812 2384 a
+gsave
+ 812 2384
+a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 744 2394 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)-19 b Fv(\021)812 2384 y
+grestore
+ 812 2384
+a 812 2384 a
+gsave
+ 812 2384 a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 812 2371
+a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2371 a 780 2367 a Fu(ee)812 2371 y Fp(1)828 2367
+y Fu(s)812 2384 y
+grestore
+ 812 2384 a 1110 2384 a
+gsave
+ 1110 2384 a
+1110 2384 a
+currentpoint currentpoint translate 0 neg 3719362 atan rotate neg exch
+neg exch translate
+ 1110 2384 a 1065 2394 a Fw(\000)g(\000)-10
+b(\000)i(\000)f(\000)-19 b Fv(\021)1110 2384 y
+grestore
+ 1110 2384
+a 708 2205 a FB(u)162 b(v)303 b(d)705 2394 y(w)154 b(w)20
+b FF(=)12 b FB(\005)s(k)1043 2400 y Fu(i)1210 2394 y
+FB(k)1232 2400 y Fu(i)954 2770 y FF(59)p eop
+%%Page: 60 4
+60 59 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)g(and)f(I.)h
+(Mo)q(erdijk)p FF(,)c FC(She)n(aves)k(In)f(Ge)n(ometry)g(and)g(L)n(o)n
+(gic)p FF(,)f(page)f(232.)-79 133 y Fr(1)62 b Fx($$)-79
+183 y Fr(2)g Fx(\\cellwidth)o(+=)o(3mm)-79 232 y Fr(3)g
+Fx(\\Dg)-79 282 y Fr(4)g Fx(Y)117 b(&)20 b(\\rMono)d(^y)i(&)g(A)333
+b(&)19 b(\\rLine)e(\\jh)i(&)g(\\stop)312 b(\\\\)-79 332
+y Fr(5)62 b Fx(\\dEpi)37 b(&)216 b(&)19 b(\\dEpi)253
+b(&)235 b(&)19 b(\\mx{-1cm})232 b(\\\\)-79 382 y Fr(6)62
+b Fx(D)117 b(&)20 b(\\rMono)d(^d)i(&)g(i_A\(A\))233 b(&)i(&)19
+b(\\dLine)e(>{\\eta_A})g(\\jn)h(\\\\)-79 432 y Fr(7)62
+b Fx(\\dMono)17 b(&)216 b(&)19 b(\\dMono)939 b(\\\\)-79
+482 y Fr(8)62 b Fx(X)117 b(&)20 b(\\rMono)d(_x)i(&)g(\\overline)o({i_)o
+(A\()o(A\)})d(&)j(\\lTo)f(\\jt)58 b(&)19 b(\\stop)312
+b(\\\\)-79 531 y Fr(9)62 b Fx(\\endDg)-95 581 y Fr(10)f
+Fx($$)923 715 y
+gsave
+ 923 715 a 923 715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 818 726
+a Fv(\016)-10 b Fw(\000)h(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)923 715 y
+grestore
+ 923 715 a 923 715 a
+gsave
+ 923 715 a 923
+715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 924 703 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 924 703 a 915 697 a Fu(y)924
+715 y
+grestore
+ 924 715 a 1115 715 a
+gsave
+ 1115 715 a 1115 715 a
+currentpoint currentpoint translate 0 neg 1945767 atan rotate neg exch
+neg exch translate
+ 1115
+715 a 1077 726 a Fw(\000)-20 b(\000)-9 b(\000)g(\000)-19
+b(\000)1115 715 y
+grestore
+ 1115 715 a 793 810 a
+gsave
+ 793 810 a 793
+810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 810 a 717 820 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)-30 b(\014)793 810 y
+grestore
+ 793 810 a 1053 810 a
+gsave
+ 1053
+810 a 1053 810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 810 a 977 820 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)-16 b Fv(\021)-30 b(\014)1053 810
+y
+grestore
+ 1053 810 a 923 904 a
+gsave
+ 923 904 a 923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a
+819 915 a Fv(\016)-18 b Fw(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)
+-21 b Fv(\021)923 904 y
+grestore
+ 923 904 a 923 904 a
+gsave
+ 923 904 a
+923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a 906 892 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 892 a -9 w Fu(d)906
+904 y
+grestore
+ 906 904 a 1176 904 a
+gsave
+ 1176 904 a 1176 904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176
+904 a 983 915 a Fw(\000)k(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16
+b(\000)1176 904 y
+grestore
+ 1176 904 a 1176 904 a
+gsave
+ 1176 904 a 1176
+904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176 904 a 1176 892 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1176 892 a 10 x Fu(\021)1193
+906 y Fe(A)1176 904 y
+grestore
+ 1176 904 a 793 999 a
+gsave
+ 793 999 a
+793 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 999 a 717 1009 a Fv(\016)-9 b Fw(\000)g(\000)g(\000)g
+(\000)c Fv(\021)793 999 y
+grestore
+ 793 999 a 1053 999 a
+gsave
+ 1053 999
+a 1053 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 999 a 987 1009 a Fv(\016)-8 b Fw(\000)f(\000)g(\000)d
+Fv(\021)1053 999 y
+grestore
+ 1053 999 a 923 1093 a
+gsave
+ 923 1093 a 923
+1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 1093 a 820 1104 a Fv(\016)-18 b Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)923
+1093 y
+grestore
+ 923 1093 a 923 1093 a
+gsave
+ 923 1093 a 923 1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923
+1093 a 906 1106 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 1106 a 897 1118 a Fu(x)906 1093
+y
+grestore
+ 906 1093 a 1115 1093 a
+gsave
+ 1115 1093 a 1115 1093 a
+currentpoint currentpoint translate 0 neg -1945767 atan rotate neg
+exch neg exch translate
+ 1115
+1093 a 1049 1104 a Fw(\000)i(\000)h Fv(\021)1115 1093
+y
+grestore
+ 1115 1093 a 776 726 a FB(Y)237 b(A)775 915 y(D)191
+b(i)1014 921 y Fu(A)1042 915 y FF(\()p FB(A)p FF(\))774
+1104 y FB(X)p 1000 1068 105 2 v 192 w(i)1014 1110 y Fu(A)1042
+1104 y FF(\()p FB(A)p FF(\))0 1325 y FH(K.)17 b(S.)e(Bro)o(wn)p
+FF(,)e FC(Cohomolo)n(gy)i(of)g(Gr)n(oups)p FF(,)e(page)h(280.)-79
+1417 y Fr(1)62 b Fx($$)-79 1467 y Fr(2)g Fx(\\let\\^\\wid)o(eh)o(at)16
+b(\\let\\~\\wid)o(eti)o(ld)o(e)-79 1516 y Fr(3)62 b Fx(\\flexible)16
+b(\\columndis)o(t=1)o(cm)-79 1566 y Fr(4)62 b Fx(\\xgrid+=2m)o(m)16
+b(\\ygrid+=-2m)o(m)-79 1616 y Fr(5)62 b Fx(\\Diagram)-79
+1666 y Fr(6)219 b Fx(&)176 b(&)g(&)157 b(&H^0)18 b(\\bTo\(-1,-)o(4\))e
+(\\hx{-2pt})-79 1716 y Fr(7)945 b Fx(&\\cdots)36 b(&H^{n-1})g(&H^n)i
+(&H^{n+1})e(&H^{n+2})17 b(&\\cdots)g(\\\\)-79 1765 y
+Fr(8)62 b Fx(\\mx{5mm}&)173 b(&)j(&)157 b(&\\dTo)57 b(&)156
+b(&\\dTo)96 b(&\\dEpi&\\dB)o(ar)75 b(&\\dBar)17 b(&\\mx{-2mm}\\)o(\\)
+-79 1815 y Fr(9)62 b Fx(\\cdots)37 b(&\\^H^{-3})16 b(&\\^H^{-2})g
+(&\\^H^{-1}&)o(\\^H)o(^0)36 b(&\\cdots)g(&\\^H^{n-1})o(&\\^)o(H^)o
+(n&\\)o(^H)o(^{n)o(+1)o(}&\\)o(^H^)o({n)o(+2})o(&\\)o(cdo)o(ts\\)o(\\)
+-95 1865 y Fr(10)218 b Fx(&\\dBar)76 b(&\\dBar)g(&\\dInto)37
+b(&\\dTo)57 b(&)156 b(&\\dTo)18 b(\\dx{-2mm})546 b(\\\\)-95
+1915 y Fr(11)61 b Fx(\\cdots)37 b(&\\~H_{n+2)o(}&\\)o(~H_)o({n)o(+1})o
+(&\\)o(~H_)o(n)56 b(&\\~H_{n-1)o(}&)o(\\cd)o(ots)o(&\\)o(~H_)o(0)16
+b(\\aTo\(1,4\))h(\\hx{-2pt)o(})331 b(\\\\)-95 1965 y
+Fr(12)61 b Fx(\\endDiagra)o(m)-95 2014 y Fr(13)g Fx($$)752
+2345 y
+gsave
+ 752 2345 a 752 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 752 2345 a 592 2356 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-20 b Fv(\021)752 2345 y
+grestore
+ 752
+2345 a 827 2251 a
+gsave
+ 827 2251 a 827 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2251 a 752
+2261 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-21 b Fv(\021)827
+2251 y
+grestore
+ 827 2251 a 1087 2251 a
+gsave
+ 1087 2251 a 1087 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1087 2251 a 1011 2261 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1087 2251 y
+grestore
+ 1087 2251 a 1229 2251 a
+gsave
+ 1229 2251
+a 1229 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1229 2251 a 1153 2261 a Fw(\000)f(\000)-9
+b(\000)g(\000)h(\000)-21 b Fv(\021)-30 b(\014)1229 2251
+y
+grestore
+ 1229 2251 a 1371 2251 a
+gsave
+ 1371 2251 a 1371 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1371
+2251 a 1295 2261 a FF(=)-17 b(=)-9 b(=)g(=)g(=)-17 b(=)1371
+2251 y
+grestore
+ 1371 2251 a 1512 2251 a
+gsave
+ 1512 2251 a 1512 2251
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1512 2251 a 1437 2261 a FF(=)f(=)-9 b(=)h(=)f(=)-17
+b(=)1512 2251 y
+grestore
+ 1512 2251 a 402 2440 a
+gsave
+ 402 2440 a 402
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 402 2440 a 326 2450 a FF(=)g(=)-9 b(=)g(=)g(=)-16
+b(=)402 2440 y
+grestore
+ 402 2440 a 544 2440 a
+gsave
+ 544 2440 a 544 2440
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 544 2440 a 468 2450 a FF(=)f(=)-9 b(=)g(=)g(=)-16 b(=)544
+2440 y
+grestore
+ 544 2440 a 686 2440 a
+gsave
+ 686 2440 a 686 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 686
+2440 a 610 2450 a FB(,)-7 b Fw(\000)-13 b(\000)k(\000)g(\000)d
+Fv(\021)686 2440 y
+grestore
+ 686 2440 a 827 2440 a
+gsave
+ 827 2440 a 827
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2440 a 752 2450 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g
+(\000)-21 b Fv(\021)827 2440 y
+grestore
+ 827 2440 a 1087 2440 a
+gsave
+
+1087 2440 a 1087 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1087 2440 a 1011 2450 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)-21 b Fv(\021)1087 2440 y
+grestore
+ 1087 2440
+a 1154 2345 a
+gsave
+ 1154 2345 a 1154 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 1154 2345 a 994
+2356 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-20 b Fv(\021)1154
+2345 y
+grestore
+ 1154 2345 a 799 2167 a FB(H)837 2149 y Fr(0)945
+2167 y Fw(\001)7 b(\001)g(\001)41 b FB(H)1074 2149 y
+Fu(n)p Fs(\000)p Fr(1)1199 2167 y FB(H)1237 2149 y Fu(n)1319
+2167 y FB(H)1357 2149 y Fu(n)p Fr(+1)1461 2167 y FB(H)1499
+2149 y Fu(n)p Fr(+2)1606 2167 y Fw(\001)7 b(\001)g(\001)295
+2356 y(\001)g(\001)g(\001)371 2345 y Fq(b)361 2356 y
+FB(H)399 2338 y Fs(\000)p Fr(3)512 2345 y Fq(b)503 2356
+y FB(H)541 2338 y Fs(\000)p Fr(2)654 2345 y Fq(b)644
+2356 y FB(H)682 2338 y Fs(\000)p Fr(1)809 2345 y Fq(b)799
+2356 y FB(H)837 2338 y Fr(0)945 2356 y Fw(\001)g(\001)g(\001)1045
+2345 y Fq(b)1036 2356 y FB(H)1074 2338 y Fu(n)p Fs(\000)p
+Fr(1)1208 2345 y Fq(b)1199 2356 y FB(H)1237 2338 y Fu(n)1329
+2345 y Fq(b)1319 2356 y FB(H)1357 2338 y Fu(n)p Fr(+1)1471
+2345 y Fq(b)1461 2356 y FB(H)1499 2338 y Fu(n)p Fr(+2)1606
+2356 y Fw(\001)g(\001)g(\001)295 2545 y(\001)g(\001)g(\001)362
+2534 y Fq(e)353 2545 y FB(H)388 2551 y Fu(n)p Fr(+2)504
+2534 y Fq(e)494 2545 y FB(H)529 2551 y Fu(n)p Fr(+1)667
+2534 y Fq(e)657 2545 y FB(H)692 2551 y Fu(n)787 2534
+y Fq(e)778 2545 y FB(H)813 2551 y Fu(n)p Fs(\000)p Fr(1)945
+2545 y Fw(\001)g(\001)g(\001)1070 2534 y Fq(e)1061 2545
+y FB(H)1096 2551 y Fr(0)954 2770 y FF(60)p eop
+%%Page: 61 5
+61 60 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(592.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\def\\T{{\\b)o(f)16
+b(T}})j(\\def\\S{{\\)o(bf)d(S}})-79 232 y Fr(3)62 b Fx(\\landscape)16
+b(\\let\\labe)o(lst)o(yl)o(e\\t)o(ex)o(tst)o(yl)o(e)-79
+282 y Fr(4)62 b Fx(\\cellpush=)o(10)o(pt)16 b(\\xscale=2.)o(2)-79
+332 y Fr(5)62 b Fx(\\Diagram)-79 382 y Fr(6)199 b Fx(&)353
+b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,)i(X^+\))g(&)-79 432
+y Fr(7)121 b Fx(\\lTo)18 b(^{H_n\(k_1)o(\)})e(&)157 b(&)19
+b(H_n\(\\T)e(A^+,A^+\))-79 482 y Fr(8)670 b Fx(\\aTo)18
+b(\(-3,-2\))f(_{H_n\(p_1\))o(})-79 531 y Fr(9)670 b Fx(\\aTo)18
+b(\(3,-4\))f(^{\\partial_)o(1})369 b(\\\\)-95 581 y Fr(10)198
+b Fx(&)353 b(&)19 b(\\dTo)f(>{H_n{q_1})o(})605 b(\\\\)-95
+631 y Fr(11)198 b Fx(&)353 b(&)19 b(H_n\(\\S)e(A^+,P\))214
+b(&)-95 681 y Fr(12)453 b Fx(&)157 b(&)19 b(*)g(\\dx{.7})684
+b(\\\\)-95 731 y Fr(13)198 b Fx(&)20 b(\\ruTo)d(_{H_n\(q_4\))o(})g
+(\\tx{15pt)o(})-95 780 y Fr(14)571 b Fx(&)19 b(\\uTo)f(>{H_n\(t\)})644
+b(\\\\)-95 830 y Fr(15)61 b Fx(H_n\(X^+\\cu)o(p\\)o(T)17
+b(A^+,P\))g(\\aTo)h(\(2,4\))37 b(^{H_n\(j_1\))o(})17
+b(\\tx{15pt})-95 880 y Fr(16)473 b Fx(\\aTo)18 b(\(2,-4\))f
+(_{H_n\(j_2\))o(})g(\\tx{15pt})-95 930 y Fr(17)198 b
+Fx(&)59 b(&)f(&)78 b(&)157 b(&)58 b(&)19 b(H_{n-1}\(A\))d(&)-95
+980 y Fr(18)787 b Fx(\\rTo)18 b(^{H_{n-1})o(\(i_)o(A\))o(})f(&)i
+(H_{n-1}\(A)o(^+,)o(P\))d(\\\\)-95 1029 y Fr(19)198 b
+Fx(&)20 b(\\rdTo)d(^{H_n\(q_2\))o(})g(\\tx{15pt)o(})-95
+1079 y Fr(20)571 b Fx(&)490 b(&)19 b(&)g(&)h(\\ruTo)233
+b(\\\\)-95 1129 y Fr(21)198 b Fx(&)353 b(&)19 b(H_n\(X^+/A^)o(+,P)o(\))
+193 b(&)-95 1179 y Fr(22)100 b Fx(\\lTo)18 b(^{P_n\(X,A\))o(})36
+b(&)20 b(H_n\(X,A\))-95 1229 y Fr(23)493 b Fx(\\aTo)18
+b(\(1,-2\))f(>{H_n\(i_X)o(\)})585 b(\\\\)-95 1279 y Fr(24)198
+b Fx(&)353 b(&)19 b(\\uTo)f(>{H_n\(q_3\))o(})605 b(\\\\)-95
+1328 y Fr(25)198 b Fx(&)353 b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,\\T)h
+(A^+\)&)-95 1378 y Fr(26)100 b Fx(\\lTo)18 b(_{H_n\(k_2\))o(})f(&)i(&)g
+(H_n\(X^+,A^)o(+\))-95 1428 y Fr(27)512 b Fx(\\aTo)18
+b(\(3,4\))g(_{\\partia)o(l_2)o(})-95 1478 y Fr(28)512
+b Fx(\\aTo)18 b(\(-3,2\))f(_{H_n\(p_X\)})565 b(\\\\)-95
+1528 y Fr(29)61 b Fx(\\endDiagra)o(m)-95 1577 y Fr(30)g
+Fx($$)954 2770 y FF(61)p eop
+%%Page: 62 6
+62 61 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)1491 2502 y
+gsave
+ 1491 2502 a 1491
+2502 a
+currentpoint currentpoint translate 90 neg rotate neg exch neg exch
+translate
+ 1491 2502 a 2593 1516 a
+gsave
+ 2593 1516 a 2593 1516
+a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2374 1526 a Fw(\000)-14 b(\000)-9 b(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)2593 1516 y
+grestore
+ 2593 1516 a 2593 1516 a
+gsave
+ 2593 1516
+a 2593 1516 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2564 1528 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2564 1528 a 2499
+1518 a FB(H)2534 1524 y Fu(n)2556 1518 y FF(\()p FB(k)2594
+1524 y Fr(1)2612 1518 y FF(\))2564 1516 y
+grestore
+ 2564 1516 a
+2593 1634 a
+gsave
+ 2593 1634 a 2593 1634 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2298
+1644 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-19 b Fv(\021)2593
+1634 y
+grestore
+ 2593 1634 a 2593 1634 a
+gsave
+ 2593 1634 a 2593 1634
+a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2586 1622 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2586 1622 a 31 x FB(H)2621
+1659 y Fu(n)2643 1653 y FF(\()p FB(p)2680 1659 y Fr(1)2699
+1653 y FF(\))2586 1634 y
+grestore
+ 2586 1634 a 3281 1752 a
+gsave
+ 3281
+1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 2975 1763 a Fw(\000)k(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-14 b Fv(\021)3281 1752 y
+grestore
+ 3281 1752
+a 3281 1752 a
+gsave
+ 3281 1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 3278
+1740 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3278 1740 a -6 x FB(@)3300 1740 y Fr(1)3278 1752
+y
+grestore
+ 3278 1752 a 2203 1634 a
+gsave
+ 2203 1634 a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203
+1634 a 2147 1644 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)2203 1634 y
+grestore
+ 2203 1634 a 2203 1634 a
+gsave
+ 2203 1634
+a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203 1634 a 2201 1622 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2201 1622 a 10
+x FB(H)2236 1638 y Fu(n)2258 1632 y FB(q)2277 1638 y
+Fr(1)2201 1634 y
+grestore
+ 2201 1634 a 1974 1870 a
+gsave
+ 1974 1870 a
+1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1812 1881 a Fw(\000)-13 b(\000)k(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)1974 1870 y
+grestore
+ 1974 1870 a 1974 1870 a
+gsave
+ 1974 1870
+a 1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1978 1883 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1978 1883 a 31
+x FB(H)2013 1920 y Fu(n)2036 1914 y FF(\()p FB(q)2071
+1920 y Fr(4)2089 1914 y FF(\))1978 1870 y
+grestore
+ 1978 1870 a
+2203 1988 a
+gsave
+ 2203 1988 a 2203 1988 a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2033
+1999 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)2203
+1988 y
+grestore
+ 2203 1988 a 2203 1988 a
+gsave
+ 2203 1988 a 2203 1988
+a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2205 2001 a
+currentpoint currentpoint translate -7458716 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2001 a 10 x FB(H)2240
+2017 y Fu(n)2262 2011 y FF(\()p FB(t)p FF(\))2205 1988
+y
+grestore
+ 2205 1988 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974
+1752 a 1722 1763 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1974
+1752 y
+grestore
+ 1974 1752 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752
+a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1752 a 1977 1740 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1977 1740 a 1852 1729 a FB(H)1887
+1735 y Fu(n)1909 1729 y FF(\()p FB(j)1942 1735 y Fr(1)1961
+1729 y FF(\))1977 1752 y
+grestore
+ 1977 1752 a 1974 2225 a
+gsave
+ 1974
+2225 a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1716 2235 a Fw(\000)f(\000)-9
+b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-16
+b Fv(\021)1974 2225 y
+grestore
+ 1974 2225 a 1974 2225 a
+gsave
+ 1974 2225
+a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1971 2237 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1971 2237 a 1847
+2268 a FB(H)1882 2274 y Fu(n)1904 2268 y FF(\()p FB(j)1937
+2274 y Fr(2)1956 2268 y FF(\))1971 2225 y
+grestore
+ 1971 2225 a
+3320 1988 a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3184
+1999 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b Fv(\021)3320 1988 y
+grestore
+ 3320 1988 a 3320 1988
+a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3300 1976 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3300
+1976 a 3214 1966 a FB(H)3249 1972 y Fu(n)p Fs(\000)p
+Fr(1)3314 1966 y FF(\()p FB(i)3344 1972 y Fu(A)3371 1966
+y FF(\))3300 1988 y
+grestore
+ 3300 1988 a 1974 2106 a
+gsave
+ 1974 2106
+a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1804 2117 a Fw(\000)h(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)c Fv(\021)1974 2106 y
+grestore
+ 1974 2106 a 1974 2106 a
+gsave
+ 1974
+2106 a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1970 2094 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1970 2094
+a -10 x FB(H)2005 2090 y Fu(n)2027 2084 y FF(\()p FB(q)2062
+2090 y Fr(2)2080 2084 y FF(\))1970 2106 y
+grestore
+ 1970 2106 a
+2892 2106 a
+gsave
+ 2892 2106 a 2892 2106 a
+currentpoint currentpoint translate 3729358 neg 5332987 atan rotate
+neg exch neg exch translate
+ 2892 2106 a 2763
+2117 a Fw(\000)c(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-16 b Fv(\021)2892 2106 y
+grestore
+ 2892 2106 a 2463
+2225 a
+gsave
+ 2463 2225 a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2332 2235
+a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2463 2225 y
+grestore
+ 2463 2225 a 2463 2225 a
+gsave
+ 2463 2225
+a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2436 2237 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2436 2237 a 2353
+2227 a FB(P)2380 2233 y Fu(n)2402 2227 y FF(\()p FB(X)q(;)7
+b(A)p FF(\))2436 2225 y
+grestore
+ 2436 2225 a 2853 2343 a
+gsave
+ 2853
+2343 a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2749 2353 a Fw(\000)-22
+b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)2853 2343 y
+grestore
+ 2853 2343 a 2853 2343 a
+gsave
+ 2853 2343
+a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2850 2330 a
+currentpoint currentpoint translate 3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2850 2330 a -10
+x FB(H)2885 2326 y Fu(n)2907 2320 y FF(\()p FB(i)2937
+2326 y Fu(X)2969 2320 y FF(\))2850 2343 y
+grestore
+ 2850 2343 a
+2203 2343 a
+gsave
+ 2203 2343 a 2203 2343 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2151
+2353 a Fw(\000)f(\000)-9 b(\000)g(\000)-22 b Fv(\021)2203
+2343 y
+grestore
+ 2203 2343 a 2203 2343 a
+gsave
+ 2203 2343 a 2203 2343
+a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2205 2355 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2355 a 11 x FB(H)2240
+2372 y Fu(n)2262 2366 y FF(\()p FB(q)2297 2372 y Fr(3)2316
+2366 y FF(\))2205 2343 y
+grestore
+ 2205 2343 a 2593 2461 a
+gsave
+ 2593
+2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 2461 a 2361 2471 a Fw(\000)-14
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)2593 2461
+y
+grestore
+ 2593 2461 a 2593 2461 a
+gsave
+ 2593 2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593
+2461 a 2550 2448 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2550 2448 a 2485 2479 a FB(H)2520
+2485 y Fu(n)2542 2479 y FF(\()p FB(k)2580 2485 y Fr(2)2599
+2479 y FF(\))2550 2461 y
+grestore
+ 2550 2461 a 3281 2225 a
+gsave
+ 3281
+2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 2981 2235 a Fw(\000)e(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)-14 b Fv(\021)3281 2225 y
+grestore
+ 3281 2225
+a 3281 2225 a
+gsave
+ 3281 2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 3284
+2237 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3284 2237 a 29 x FB(@)3306 2272 y Fr(2)3284 2225
+y
+grestore
+ 3284 2225 a 2593 2343 a
+gsave
+ 2593 2343 a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593
+2343 a 2312 2353 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2593 2343 y
+grestore
+ 2593 2343 a 2593 2343 a
+gsave
+ 2593 2343
+a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 2343 a 2600 2330 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2600 2330 a 2458
+2361 a FB(H)2493 2367 y Fu(n)2515 2361 y FF(\()p FB(p)2552
+2367 y Fu(X)2584 2361 y FF(\))2600 2343 y
+grestore
+ 2600 2343 a
+2015 1526 a FB(H)2050 1532 y Fu(n)2072 1526 y FF(\()p
+FB(X)2125 1509 y Fr(+)2163 1526 y Fw([)9 b FH(T)p FB(A)2264
+1509 y Fr(+)2291 1526 y FB(;)e(X)2347 1509 y Fr(+)2375
+1526 y FF(\))462 b FB(H)2888 1532 y Fu(n)2911 1526 y
+FF(\()p FH(T)p FB(A)2991 1509 y Fr(+)3019 1526 y FB(;)7
+b(A)3069 1509 y Fr(+)3096 1526 y FF(\))2090 1763 y FB(H)2125
+1769 y Fu(n)2147 1763 y FF(\()p FH(S)p FB(A)2221 1745
+y Fr(+)2249 1763 y FB(;)g(P)f FF(\))655 b Fw(\003)1512
+1999 y FB(H)1547 2005 y Fu(n)1569 1999 y FF(\()p FB(X)1622
+1982 y Fr(+)1659 1999 y Fw([)9 b FH(T)p FB(A)1760 1982
+y Fr(+)1788 1999 y FB(;)e(P)f FF(\))1123 b FB(H)3014
+2005 y Fu(n)p Fs(\000)p Fr(1)3079 1999 y FF(\()p FB(A)p
+FF(\))318 b FB(H)3495 2005 y Fu(n)p Fs(\000)p Fr(1)3559
+1999 y FF(\()p FB(A)3606 1982 y Fr(+)3634 1999 y FB(;)7
+b(P)f FF(\))2062 2235 y FB(H)2097 2241 y Fu(n)2119 2235
+y FF(\()p FB(X)2172 2218 y Fr(+)2200 2235 y FB(=)n(A)2250
+2218 y Fr(+)2277 2235 y FB(;)h(P)f FF(\))291 b FB(H)2671
+2241 y Fu(n)2693 2235 y FF(\()p FB(X)q(;)7 b(A)p FF(\))2002
+2471 y FB(H)2037 2477 y Fu(n)2059 2471 y FF(\()p FB(X)2112
+2454 y Fr(+)2149 2471 y Fw([)i FH(T)p FB(A)2250 2454
+y Fr(+)2278 2471 y FB(;)e FH(T)p FB(A)2361 2454 y Fr(+)2388
+2471 y FF(\))463 b FB(H)2902 2477 y Fu(n)2924 2471 y
+FF(\()p FB(X)2977 2454 y Fr(+)3005 2471 y FB(;)7 b(A)3055
+2454 y Fr(+)3082 2471 y FF(\))1491 2502 y
+grestore
+ 1491 2502 a
+954 2770 a FF(62)p eop
+%%Page: 63 7
+63 62 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(13.)-79 133 y Fr(1)62 b Fx($$)-79 183 y
+Fr(2)g Fx(\\dotted)-79 232 y Fr(3)g Fx(\\grid=7mm)-79
+282 y Fr(4)g Fx(\\yscale=2)-79 332 y Fr(5)g Fx(\\Diagram)-79
+382 y Fr(6)g Fx(&&&&&&&&&x)o(z&)o(&&&)o(xy)o(z&&)o(&&x)o(y^)o(2z&)o(&&)
+o(&xy)o(^3)o(z&\\)o(\\)-79 432 y Fr(7)g Fx(\\\\)-79 482
+y Fr(8)g Fx(z&&&&zy&&&)o(&z)o(y^2)o(&&)o(&&z)o(y^3)o(\\\\)-79
+531 y Fr(9)g Fx(\\dy{-.2})-95 581 y Fr(10)f Fx(&&&&&&&&&x)o(&&)o(&&x)o
+(y&)o(&&&)o(xy^)o(2&)o(&&&)o(xy)o(^3\\)o(\\)-95 631 y
+Fr(11)g Fx(\\\\)-95 681 y Fr(12)g Fx(&&&&y&&&&y)o(^2)o(&&&)o(&y)o(^3\\)
+o(\\)-95 731 y Fr(13)g Fx(\\Modify)-95 780 y Fr(14)g
+Fx(\\Line)18 b(\(0,0\))f(\(4,0\))h(\\dt{1pt})-95 830
+y Fr(15)61 b Fx(\\Line)18 b(\(4,0\))f(\(8,0\))-95 880
+y Fr(16)61 b Fx(\\Line)18 b(\(8,0\))f(\(12,0\))-95 930
+y Fr(17)61 b Fx(\\Line)18 b(\(12,0\))f(\(22.5,0\))-95
+980 y Fr(18)61 b Fx(\\Line)18 b(\(0,0\))f(\(0,3\))h(\\dt{1pt})-95
+1029 y Fr(19)61 b Fx(\\Line)18 b(\(0,3\))f(\(0,5.2\))-95
+1079 y Fr(20)61 b Fx(\\To)18 b(\(9,2\))g(\(12,0\))-95
+1129 y Fr(21)61 b Fx(\\To)18 b(\(9,5\))g(\(12,3\))-95
+1179 y Fr(22)61 b Fx(\\endDiagra)o(m)-95 1229 y Fr(23)g
+Fx($$)772 1431 y FB(xz)277 b(xy)q(z)257 b(xy)1458 1413
+y Fr(2)1477 1431 y FB(z)248 b(xy)1789 1413 y Fr(3)1808
+1431 y FB(z)40 1761 y(z)300 b(z)r(y)281 b(z)r(y)723 1744
+y Fr(2)1011 1761 y FB(z)r(y)1053 1744 y Fr(3)782 1960
+y FB(x)296 b(xy)278 b(xy)1469 1943 y Fr(2)1754 1960 y
+FB(xy)1799 1943 y Fr(3)370 2290 y FB(y)301 b(y)712 2273
+y Fr(2)1022 2290 y FB(y)1043 2273 y Fr(3)40 1431 y Fw(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 1596 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)122 1761 y(\017)g(\017)g(\017)144 b(\017)62
+b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145 b(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)40
+1960 y(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 2125 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)40 2290 y(\017)f(\017)h(\017)g(\017)144
+b(\017)62 b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145
+b(\017)61 b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g
+(\017)216 2280 y
+gsave
+ 216 2280 a 216 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 216 2280 a 46
+2290 a Fw(\000)-18 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-17 b(\000)216 2280
+y
+grestore
+ 216 2280 a 546 2280 a
+gsave
+ 546 2280 a 546 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 546 2280
+a 400 2290 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b(\000)546 2280
+y
+grestore
+ 546 2280 a 877 2280 a
+gsave
+ 877 2280 a 877 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 877 2280
+a 740 2290 a Fw(\000)-15 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b(\000)877 2280 y
+grestore
+ 877
+2280 a 1476 2280 a
+gsave
+ 1476 2280 a 1476 2280 a
+currentpoint currentpoint translate 0 neg 13705387 atan rotate neg
+exch neg exch translate
+ 1476 2280
+a 1071 2290 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)1476 2280 y
+grestore
+ 1476 2280 a 50 2016 a
+gsave
+ 50 2016 a 50
+2016 a
+currentpoint currentpoint translate 8353752 neg 0 atan rotate neg exch
+neg exch translate
+ 50 2016 a -219 2026 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21 b(\000)50
+2016 y
+grestore
+ 50 2016 a 50 1569 a
+gsave
+ 50 1569 a 50 1569 a
+currentpoint currentpoint translate 5743202 neg 0 atan rotate neg exch
+neg exch translate
+ 50 1569
+a -116 1579 a Fw(\000)-13 b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d(\000)50
+1569 y
+grestore
+ 50 1569 a 918 2115 a
+gsave
+ 918 2115 a 918 2115 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918
+2115 a 733 2125 a Fw(\000)c(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)918 2115 y
+grestore
+ 918 2115 a 918 1586 a
+gsave
+ 918 1586 a
+918 1586 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918 1586 a 733 1596 a Fw(\000)e(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)918 1586 y
+grestore
+ 918 1586 a 954 2770 a FF(63)p
+eop
+%%Page: 64 8
+64 63 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(346.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\cellpush+)o(=5)o(pt)-79 232 y Fr(3)g Fx(\\cellwidth)o(+=)
+o(2mm)-79 282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&&_{N+t'}X)o(_p)36
+b(&)19 b(\\rTo)f(^{g_{p+q})o(})f(&)i(_N)g(X_{p+q})36
+b(\\\\)-79 382 y Fr(6)62 b Fx(&&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o
+(ts\\)o(;\\)o(rig)o(ht)o(arr)o(ow)o(fil)o(l})d(&)-79
+432 y Fr(7)690 b Fx(&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o(ts\\)o(;\\)o
+(rig)o(ht)o(arr)o(owf)o(il)o(l})d(\\\\)-79 482 y Fr(8)964
+b Fx(\\\\)-79 531 y Fr(9)62 b Fx(&&)19 b(_{N+t'}X_)o(1)e(&)i(\\rTo)f
+(^{g_{q+1})o(})f(&)i(_N)g(X_{q+1})36 b(\\\\)-95 581 y
+Fr(10)61 b Fx(&&)19 b(\\dTo)136 b(&)333 b(&)19 b(\\dTo)155
+b(\\\\)-95 631 y Fr(11)61 b Fx(S^{N+t+t'})o(X)16 b(\\aTo)i(\(2,5\))g
+(^{f_p})f(\\tx{.7})g(\\hx{5pt})g(&)i(\\rTo)f(^f)h(&)-95
+681 y Fr(12)120 b Fx(S^{N+t'}X)36 b(&)19 b(\\rTo)f(^{g_q})96
+b(&)19 b(_N)g(X_q)116 b(\\\\)-95 731 y Fr(13)963 b Fx(\\\\)-95
+780 y Fr(14)61 b Fx(&&)235 b(&)333 b(&)19 b(\\dFillcel)o(l{\\)o(ri)o
+(ght)o(arr)o(ow)o(fil)o(l\\)o(;\\c)o(dot)o(s\\)o(;\\r)o(ig)o(hta)o(rr)o
+(owf)o(ill)o(})d(\\\\)-95 830 y Fr(15)963 b Fx(\\\\)-95
+880 y Fr(16)61 b Fx(&&)235 b(&)333 b(&)19 b(_N)g(X_1)116
+b(\\\\)-95 930 y Fr(17)61 b Fx(&&)235 b(&)333 b(&)19
+b(\\dTo)155 b(\\\\)-95 980 y Fr(18)61 b Fx(&&)235 b(&)333
+b(&)19 b(S^N)f(X)i(\\bTo)e(\(-2,6\))f(<g)i(\\hx{.2})e(\\\\)-95
+1029 y Fr(19)61 b Fx(\\endDg)-95 1079 y Fr(20)g Fx($$)1161
+1214 y
+gsave
+ 1161 1214 a 1161 1214 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1103 1224
+a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-16 b Fv(\021)1161
+1214 y
+grestore
+ 1161 1214 a 1161 1214 a
+gsave
+ 1161 1214 a 1161 1214
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1163 1201 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1201 a 1128 1193 a Fu(g)1144
+1197 y Fe(p)p Fp(+)p Fe(q)1163 1214 y
+grestore
+ 1163 1214 a 1007
+1355 a
+gsave
+ 1007 1355 a 1007 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1355 a 928 1366 a
+Fw(\001)7 b(\001)g(\001)17 b(\000)-23 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)1007 1355 y
+grestore
+ 1007 1355 a 1314 1355 a
+gsave
+ 1314 1355
+a 1314 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1355 a 1236 1366 a Fw(\001)7 b(\001)g(\001)16
+b(\000)-23 b(\000)-8 b(\000)f(\000)-22 b Fv(\021)1314
+1355 y
+grestore
+ 1314 1355 a 1161 1497 a
+gsave
+ 1161 1497 a 1161 1497
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1103 1507 a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-15
+b Fv(\021)1161 1497 y
+grestore
+ 1161 1497 a 1161 1497 a
+gsave
+ 1161 1497
+a 1161 1497 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1163 1485 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1485 a 1129
+1476 a Fu(g)1145 1480 y Fe(q)q Fp(+1)1163 1497 y
+grestore
+ 1163
+1497 a 1007 1591 a
+gsave
+ 1007 1591 a 1007 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1591
+a 961 1602 a Fw(\000)i(\000)h Fv(\021)1007 1591 y
+grestore
+ 1007
+1591 a 1314 1591 a
+gsave
+ 1314 1591 a 1314 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1591
+a 1271 1602 a Fw(\000)-20 b(\000)-8 b(\000)-19 b Fv(\021)1314
+1591 y
+grestore
+ 1314 1591 a 864 1450 a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864
+1450 a 644 1460 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)e Fv(\021)864 1450 y
+grestore
+ 864 1450 a 864 1450
+a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864 1450 a 869 1437 a
+currentpoint currentpoint translate -7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 869 1437
+a 835 1429 a Fu(f)851 1433 y Fe(p)869 1450 y
+grestore
+ 869 1450
+a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836 1686 a 785 1696
+a Fw(\000)-16 b(\000)-9 b(\000)g(\000)-16 b Fv(\021)836
+1686 y
+grestore
+ 836 1686 a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836
+1686 a 845 1673 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 845 1673 a 835 1667 a Fu(f)845 1686
+y
+grestore
+ 845 1686 a 1161 1686 a
+gsave
+ 1161 1686 a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161
+1686 a 1109 1696 a Fw(\000)c(\000)-10 b(\000)h(\000)h(\000)-20
+b Fv(\021)1161 1686 y
+grestore
+ 1161 1686 a 1161 1686 a
+gsave
+ 1161 1686
+a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1686 a 1176 1673 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1176 1673 a 1160
+1665 a Fu(g)1176 1669 y Fe(q)1176 1686 y
+grestore
+ 1176 1686 a
+1314 1875 a
+gsave
+ 1314 1875 a 1314 1875 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1875 a 1177
+1885 a Fw(\000)k(\000)-9 b(\000)-16 b Fv(\021)18 b Fw(\001)7
+b(\001)g(\001)17 b(\000)-16 b(\000)-9 b(\000)-15 b Fv(\021)1314
+1875 y
+grestore
+ 1314 1875 a 1314 2158 a
+gsave
+ 1314 2158 a 1314 2158
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 2158 a 1266 2169 a Fw(\000)-22 b(\000)-8 b(\000)-20
+b Fv(\021)1314 2158 y
+grestore
+ 1314 2158 a 1146 1969 a
+gsave
+ 1146 1969
+a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 871 1980 a Fw(\000)i(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-16 b Fv(\021)1146 1969 y
+grestore
+ 1146 1969 a 1146 1969 a
+gsave
+ 1146
+1969 a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 1137 1982 a
+currentpoint currentpoint translate 8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1137 1982
+a 1120 1994 a Fu(g)1137 1969 y
+grestore
+ 1137 1969 a 940 1230 a
+Fu(N)s Fr(+)p Fu(t)1007 1222 y Ft(0)1020 1224 y FB(X)1054
+1230 y Fu(p)180 b(N)1283 1224 y FB(X)1317 1230 y Fu(p)p
+Fr(+)p Fu(q)940 1514 y(N)s Fr(+)p Fu(t)1007 1505 y Ft(0)1021
+1507 y FB(X)1055 1513 y Fr(1)1251 1514 y Fu(N)1283 1507
+y FB(X)1317 1513 y Fu(q)q Fr(+1)572 1696 y FB(S)599 1679
+y Fu(N)s Fr(+)p Fu(t)p Fr(+)p Fu(t)704 1667 y Ft(0)719
+1696 y FB(X)h(S)961 1679 y Fu(N)s Fr(+)p Fu(t)1028 1667
+y Ft(0)1042 1696 y FB(X)1272 1703 y Fu(N)1304 1696 y
+FB(X)1338 1702 y Fu(q)1272 2081 y(N)1304 2074 y FB(X)1338
+2080 y Fr(1)1266 2263 y FB(S)1293 2246 y Fu(N)1325 2263
+y FB(X)954 2770 y FF(64)p eop
+%%Page: 65 9
+65 64 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(P)l(.)16 b(J.)g(Hilton)d(and)j
+(U.)f(Stamm)o(bac)o(h)p FF(,)d FC(A)i(Course)h(in)g(Homolo)n(gic)n(al)f
+(A)o(lgebr)n(a)p FF(,)f(page)h(149.)-79 133 y Fr(1)62
+b Fx($$)-79 183 y Fr(2)g Fx(\\let~\\tild)o(e)-79 232
+y Fr(3)g Fx(\\cellwidth)o(+=)o(17m)o(m)16 b(\\columndist)o(+=)o(12m)o
+(m)-79 282 y Fr(4)62 b Fx(\\gravitate)o(le)o(ft)-79 332
+y Fr(5)g Fx(\\Dg)-79 382 y Fr(6)101 b Fx(&)118 b(&)19
+b(K)254 b(&)20 b(\\rMono)95 b(&&)19 b(E_1^\\alpha)o(&)e(\\rEpi^{\\)o
+(eta)o('}&)o(&)f(A')117 b(\\\\)-79 432 y Fr(7)101 b Fx(&)19
+b(\\ldTo&)292 b(&)235 b(&&)215 b(&)118 b(&)19 b(\\ruBar)213
+b(\\\\)-79 482 y Fr(8)62 b Fx(~K&)117 b(&)19 b(\\dBar\\rMo)o(no\\)o(br)
+o(&)e(~E_1^\\al)o(pha)o(&&)f(\\dTo\\rEpi^)o({~\\)o(et)o(a'})o(\\b)o(r&)
+-79 531 y Fr(9)1102 b Fx(A')430 b(\\\\)-95 581 y Fr(10)61
+b Fx(\\dBar&)c(&)293 b(&)235 b(&&)215 b(&)118 b(&)78
+b(&)19 b(\\dTo>\\alp)o(ha)d(\\\\)-95 631 y Fr(11)100
+b Fx(&)118 b(&)19 b(K)254 b(&)20 b(\\rMono\\d)o(To\\)o(br&)o(&)c
+(E_1\\ax{2mm})o(&)g(\\rEpi\\dTo\\b)o(r&)o(&)h(A)97 b(\\\\)-95
+681 y Fr(12)j Fx(&)19 b(\\ldTo&)292 b(&)118 b(&)19 b(\\ldTo&)213
+b(&)118 b(&)19 b(\\ldBar)213 b(\\\\)-95 731 y Fr(13)61
+b Fx(~K&)117 b(&)19 b(\\rMono)154 b(&)20 b(~E_1)e(&)h(\\rEpi_{~\\)o
+(eta)o(}&)55 b(&)20 b(A)450 b(\\\\)-95 780 y Fr(14)61
+b Fx(\\endDg)-95 830 y Fr(15)g Fx($$)931 969 y
+gsave
+ 931 969
+a 931 969 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 969 a 746 980 a Fv(\016)-16 b Fw(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-19 b Fv(\021)931 969 y
+grestore
+ 931 969 a
+1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 969 a 1181 980
+a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)-22 b Fv(\021)-30 b(\014)1346
+969 y
+grestore
+ 1346 969 a 1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346
+969 a 1349 957 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1349 957 a 1334 951 a Fu(\021)1352 939
+y Ft(0)1349 969 y
+grestore
+ 1349 969 a 559 1064 a
+gsave
+ 559 1064 a 559
+1064 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1064 a 402 1074 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)559
+1064 y
+grestore
+ 559 1064 a 1377 1064 a
+gsave
+ 1377 1064 a 1377 1064 a
+currentpoint currentpoint translate 2983488 neg 5407569 atan rotate
+neg exch neg exch translate
+
+1377 1064 a 1214 1074 a FF(=)-23 b(=)-9 b(=)h(=)f(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)g(=)-22 b(=)1377 1064 y
+grestore
+ 1377 1064 a 719
+1158 a
+gsave
+ 719 1158 a 719 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 719 1158 a 548 1169 a FF(=)i(=)-9
+b(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)h(=)f(=)-20 b(=)719
+1158 y
+grestore
+ 719 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601
+1158 a 400 1158 a
+1 setgray
+ 400 1158 a 427 1169 338 21 v 601 1158
+a
+grestore
+ 601 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1158
+a 427 1169 a Fv(\016)k Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20 b
+Fv(\021)601 1158 y
+grestore
+ 601 1158 a 1144 1158 a
+gsave
+ 1144 1158 a
+1144 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1144 1158 a 984 1169 a Fw(\000)h(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-18 b Fv(\021)1144 1158 y
+grestore
+ 1144 1158 a 1003 1158
+a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 801 1158 a
+1 setgray
+ 801
+1158 a 838 1169 338 21 v 1003 1158 a
+grestore
+ 1003 1158 a 1003
+1158 a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 838 1169 a
+Fw(\000)-23 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)-30
+b(\014)1003 1158 y
+grestore
+ 1003 1158 a 1003 1158 a
+gsave
+ 1003 1158
+a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 1006 1146 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1006 1146 a 994
+1140 a Fr(~)-20 b Fu(\021)1009 1128 y Ft(0)1007 1158
+y
+grestore
+ 1007 1158 a 400 1347 a
+gsave
+ 400 1347 a 400 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 400 1347
+a 229 1358 a FF(=)-13 b(=)k(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)c
+(=)400 1347 y
+grestore
+ 400 1347 a 1548 1158 a
+gsave
+ 1548 1158 a 1548
+1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1378 1169 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)1548 1158 y
+grestore
+ 1548 1158 a 1548 1158 a
+gsave
+ 1548 1158
+a 1548 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1544 1146 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1544 1146 a 10
+x Fu(\013)1544 1158 y
+grestore
+ 1544 1158 a 931 1347 a
+gsave
+ 931 1347
+a 931 1347 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 1347 a 746 1358 a Fv(\016)f Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-17 b Fv(\021)931 1347 y
+grestore
+ 931 1347
+a 801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 612 1347
+a
+1 setgray
+ 612 1347 a 641 1358 313 21 v 801 1347 a
+grestore
+ 801 1347 a
+801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 641 1358
+a Fw(\000)-12 b(\000)j(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)e Fv(\021)801 1347 y
+grestore
+ 801 1347 a 1346
+1347 a
+gsave
+ 1346 1347 a 1346 1347 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 1347 a 1177 1358
+a Fw(\000)-18 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-17 b Fv(\021)-30
+b(\014)1346 1347 y
+grestore
+ 1346 1347 a 1206 1347 a
+gsave
+ 1206 1347
+a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1017 1347 a
+1 setgray
+ 1017 1347 a 1035
+1358 333 21 v 1206 1347 a
+grestore
+ 1206 1347 a 1206 1347 a
+gsave
+ 1206
+1347 a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1035 1358 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)d Fv(\021)1206 1347 y
+grestore
+ 1206 1347 a 559 1442
+a
+gsave
+ 559 1442 a 559 1442 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1442 a 402 1452 a Fw(\000)g(\000)j(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)559 1442 y
+grestore
+ 559 1442 a 973 1442 a
+gsave
+ 973 1442 a 973
+1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 973 1442 a 814 1452 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)973 1442 y
+grestore
+ 973 1442 a 1377 1442 a
+gsave
+ 1377 1442
+a 1377 1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 1377 1442 a 1207 1452 a FF(=)j(=)-9 b(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)h(=)f(=)g(=)-17 b(=)1377 1442 y
+grestore
+ 1377 1442
+a 601 1536 a
+gsave
+ 601 1536 a 601 1536 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1536 a 427 1547
+a Fv(\016)j Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-18 b Fv(\021)601
+1536 y
+grestore
+ 601 1536 a 1003 1536 a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+
+1003 1536 a 834 1547 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b Fv(\021)-30 b(\014)1003 1536 y
+grestore
+ 1003 1536 a 1003 1536
+a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1536 a 1008 1549 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1008
+1549 a 1002 1568 a Fr(~)-20 b Fu(\021)1008 1536 y
+grestore
+ 1008
+1536 a 699 980 a FB(K)382 b(E)1149 963 y Fu(\013)1147
+990 y Fr(1)1527 980 y FB(A)1558 963 y Fs(0)392 1158 y
+FF(~)381 1169 y FB(K)783 1158 y FF(~)773 1169 y FB(E)806
+1152 y Fu(\013)804 1179 y Fr(1)1184 1169 y FB(A)1215
+1152 y Fs(0)699 1358 y FB(K)j(E)1150 1364 y Fr(1)1532
+1358 y FB(A)392 1536 y FF(~)381 1547 y FB(K)786 1536
+y FF(~)777 1547 y FB(E)808 1553 y Fr(1)1190 1547 y FB(A)954
+2770 y FF(65)p eop
+%%Page: 66 10
+66 65 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(650.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\cellpush=)o(4p)o(t)-79
+232 y Fr(3)g Fx(\\let\\label)o(st)o(yle)o(\\t)o(ext)o(sty)o(le)-79
+282 y Fr(4)g Fx(\\lpad=1in)16 b(\\bpad=1cm)-79 332 y
+Fr(5)62 b Fx(\\Graph{4in)o(,4)o(}{3)o(.5)o(in,)o(1in)o(})-79
+382 y Fr(6)g Fx(\\To)18 b(\(0,0\))g(\(3.3,0\))76 b(\\hd{p})-79
+432 y Fr(7)62 b Fx(\\To)18 b(\(0,0\))g(\(0,3.5\))76 b(\\hd{q})-79
+482 y Fr(8)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,3.25\))g(\\Line)h(\(0,1\))
+f(\(3.2,1\))g(\\Dot)h(\(2,1\))-79 531 y Fr(9)62 b Fx(\\Dot)18
+b(\(0,0\))-95 581 y Fr(10)61 b Fx(\045)-95 631 y Fr(11)g
+Fx(\\Dot)18 b(\(2,0\))g(\\Dot)g(\(2.25,0\))e(\\Dot)i(\(2.5,0\))f(\\Dot)
+h(\(2.75,0\))f(\\Dot)h(\(3,0\))-95 681 y Fr(12)61 b Fx(\045)-95
+731 y Fr(13)g Fx(\\Dot)18 b(\(0,1\))g(\\Dot)g(\(0,1.25\))e(\\Dot)i
+(\(0,1.5\))f(\\Dot)h(\(0,1.75\))-95 780 y Fr(14)61 b
+Fx(\\Dot)18 b(\(0,2\))g(\\Dot)g(\(0,2.25\))e(\\Dot)i(\(0,2.5\))f(\\Dot)
+h(\(0,2.75\))f(\\Dot)h(\(0,3\))-95 830 y Fr(15)61 b Fx(\045)-95
+880 y Fr(16)g Fx(\\Line)18 b(\(0,2.25\))e(\(2.5,0\))37
+b(^{d^p})17 b(:{.35,5pt})f(\\ro)-95 930 y Fr(17)61 b
+Fx(\\Line)18 b(\(0,3\))f(\(3,0\))38 b(^{p)18 b(+)h(q)h(=)f(m)g(+)g(n})g
+(:{.35,5pt})d(\\ro)-95 980 y Fr(18)61 b Fx(\045)-95 1029
+y Fr(19)g Fx(\\Math{q)17 b(=)i(n})g(\(-.1,1\))e(*1)97
+b(\\Math{E_{0)o(,p-)o(1})o(^2)16 b(=)j(E_{0,p-1}^p)o(})d(\(-.1,2.25\))g
+(*1)-95 1079 y Fr(20)61 b Fx(\\Math{p)17 b(=)i(m})g(\(2,-.2\))e(*{.55})
+g(\\Math{E_{p)o(,0})o(^2)f(=)j(E_{p,0}^p})d(\(2.75,-.2\))g(*{.6})-95
+1129 y Fr(21)61 b Fx(\\endGraph)-95 1179 y Fr(22)g Fx($$)1020
+2324 y
+gsave
+ 1020 2324 a 1020 2324 a
+currentpoint currentpoint translate 0 neg 15629758 atan rotate neg
+exch neg exch translate
+ 1020 2324 a 525 2335 a
+Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)-21 b Fv(\021)1020 2324 y
+grestore
+ 1020 2324 a 1505
+2335 a FB(p)525 1799 y
+gsave
+ 525 1799 a 525 1799 a
+currentpoint currentpoint translate 16577001 neg 0 atan rotate neg
+exch neg exch translate
+ 525 1799
+a 0 1810 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)525 1799
+y
+grestore
+ 525 1799 a 515 1285 a FB(q)1125 1837 y
+gsave
+ 1125 1837 a
+1125 1837 a
+currentpoint currentpoint translate 15392929 neg 0 atan rotate neg
+exch neg exch translate
+ 1125 1837 a 637 1847 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)
+-21 b(\000)1125 1837 y
+grestore
+ 1125 1837 a 1005 2024 a
+gsave
+ 1005 2024
+a 1005 2024 a
+currentpoint currentpoint translate 0 neg 15156100 atan rotate neg
+exch neg exch translate
+ 1005 2024 a 525 2035 a Fw(\000)j(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1005 2024 y
+grestore
+ 1005 2024 a 1125 2024 a
+gsave
+ 1125 2024
+a 1125 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2024 a 1115 2035 a Fw(\017)1125 2024
+y
+grestore
+ 1125 2024 a 525 2324 a
+gsave
+ 525 2324 a 525 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2324
+a 515 2335 a Fw(\017)525 2324 y
+grestore
+ 525 2324 a 1125 2324
+a
+gsave
+ 1125 2324 a 1125 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2324 a 1115 2335 a Fw(\017)1125
+2324 y
+grestore
+ 1125 2324 a 1200 2324 a
+gsave
+ 1200 2324 a 1200 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1200 2324 a 1190 2335 a Fw(\017)1200 2324 y
+grestore
+ 1200 2324
+a 1275 2324 a
+gsave
+ 1275 2324 a 1275 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1275 2324 a 1265
+2335 a Fw(\017)1275 2324 y
+grestore
+ 1275 2324 a 1350 2324 a
+gsave
+ 1350
+2324 a 1350 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350 2324 a 1340 2335 a Fw(\017)1350
+2324 y
+grestore
+ 1350 2324 a 1425 2324 a
+gsave
+ 1425 2324 a 1425 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1425 2324 a 1415 2335 a Fw(\017)1425 2324 y
+grestore
+ 1425 2324
+a 525 2024 a
+gsave
+ 525 2024 a 525 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2024 a 515 2035
+a Fw(\017)525 2024 y
+grestore
+ 525 2024 a 525 1949 a
+gsave
+ 525 1949 a
+525 1949 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1949 a 515 1960 a Fw(\017)525 1949 y
+grestore
+ 525
+1949 a 525 1874 a
+gsave
+ 525 1874 a 525 1874 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1874 a 515
+1885 a Fw(\017)525 1874 y
+grestore
+ 525 1874 a 525 1799 a
+gsave
+ 525 1799
+a 525 1799 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1799 a 515 1810 a Fw(\017)525 1799 y
+grestore
+
+525 1799 a 525 1724 a
+gsave
+ 525 1724 a 525 1724 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1724
+a 515 1735 a Fw(\017)525 1724 y
+grestore
+ 525 1724 a 525 1649 a
+gsave
+
+525 1649 a 525 1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1649 a 515 1660 a Fw(\017)525
+1649 y
+grestore
+ 525 1649 a 525 1574 a
+gsave
+ 525 1574 a 525 1574 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1574 a 515 1585 a Fw(\017)525 1574 y
+grestore
+ 525 1574 a 525 1499
+a
+gsave
+ 525 1499 a 525 1499 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1499 a 515 1510 a Fw(\017)525
+1499 y
+grestore
+ 525 1499 a 525 1424 a
+gsave
+ 525 1424 a 525 1424 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1424 a 515 1435 a Fw(\017)525 1424 y
+grestore
+ 525 1424 a 900 1987
+a
+gsave
+ 900 1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 396 1997 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-16 b(\000)900 1987 y
+grestore
+ 900 1987 a 900 1987 a
+gsave
+ 900
+1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 728 1954 a FB(d)750 1939
+y Fu(p)749 1987 y
+grestore
+ 749 1987 a 975 1874 a
+gsave
+ 975 1874 a 975
+1874 a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 339 1885 a Fw(\000)k(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)
+975 1874 y
+grestore
+ 975 1874 a 975 1874 a
+gsave
+ 975 1874 a 975 1874
+a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 655 1833 a FB(p)9 b FF(+)g FB(q)k FF(=)f
+FB(m)d FF(+)h FB(n)784 1874 y
+grestore
+ 784 1874 a 495 2024 a
+gsave
+ 495
+2024 a 495 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 2024 a 395 2035 a FB(q)i FF(=)g
+FB(n)495 2024 y
+grestore
+ 495 2024 a 495 1649 a
+gsave
+ 495 1649 a 495
+1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 1649 a 202 1660 a FB(E)235 1645 y Fr(2)233
+1670 y(0)p Fu(;p)p Fs(\000)p Fr(1)332 1660 y FF(=)g FB(E)409
+1640 y Fu(p)407 1671 y Fr(0)p Fu(;p)p Fs(\000)p Fr(1)495
+1649 y
+grestore
+ 495 1649 a 1125 2384 a
+gsave
+ 1125 2384 a 1125 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+
+1125 2384 a 1063 2395 a FB(p)f FF(=)h FB(m)1125 2384
+y
+grestore
+ 1125 2384 a 1350 2384 a
+gsave
+ 1350 2384 a 1350 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350
+2384 a 1225 2395 a FB(E)1258 2380 y Fr(2)1256 2405 y
+Fu(p;)p Fr(0)1313 2395 y FF(=)g FB(E)1390 2375 y Fu(p)1388
+2406 y(p;)p Fr(0)1350 2384 y
+grestore
+ 1350 2384 a 954 2770 a FF(66)p
+eop
+%%Page: 67 11
+67 66 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\rotatedla)o(be)o(ls)16 b(\\let\\label)o(sty)o(le)o
+(\\te)o(xt)o(sty)o(le)g(\\scale=2)-79 141 y Fr(3)62 b
+Fx(\\Diagram)-79 191 y Fr(4)82 b Fx(&)19 b(&)g(F\(3,2\))e(\\aLine)h
+(\(1,-4\))f(>{F\(3,1,1)o(\)})f(:{.4})i(\\br)38 b(\\\\)-79
+241 y Fr(5)82 b Fx(&)19 b(&)156 b(&)20 b(\\rdLine)d(>{F\(1,2,)o(2\)})f
+(\\pt{right)o(,.7)o(5})g(\\\\)-79 291 y Fr(6)82 b Fx(&)19
+b(&)156 b(&)177 b(&)19 b(F\(1,4\))370 b(\\\\)-79 340
+y Fr(7)62 b Fx(F\(2,3\))17 b(\\aDash)h(\(4,1\))f(^{F\(1,1,3\))o(})g
+(:{.4})g(\\pp)156 b(\\\\)-79 390 y Fr(8)82 b Fx(&)19
+b(&)156 b(&)20 b(F\(4,1\))d(\\aLine)g(\(1,2\))h(>{F\(1,3,1)o(\)})75
+b(\\\\)-79 440 y Fr(9)62 b Fx(\\Modify)-95 490 y Fr(10)f
+Fx(\\Pt{top})17 b(\(2,4\))g(\\Pt{b1})g(\(0,1\))h(\\Pt{b2})f(\(3,0\))-95
+540 y Fr(11)61 b Fx(\\Pt{LeftF})16 b(\(1.65,2\))g(\\Pt{BackF})g
+(\(2,2.5\))-95 589 y Fr(12)61 b Fx(\\Pt{Bottom)o(F})16
+b(\(2.5,1\))h(\\Pt{Right)o(F})f(\(3.1,2.25\))-95 639
+y Fr(13)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{b2})271
+b(\\pt{bottom,)o(.8)o(})-95 689 y Fr(14)61 b Fx(\\Nul)38
+b(\\pt{Botto)o(mF)o(})17 b(\\pt{botto)o(m})94 b(\\pt{BottomL)o(,2)o(})
+-95 739 y Fr(15)61 b Fx(\\Dash)18 b(\\pt{Botto)o(mF)o(})f(\\pt{botto)o
+(m})94 b(\\tl\\circ)17 b(\\dt{3pt})-95 789 y Fr(16)61
+b Fx(\\Line)18 b(\\pt{botto)o(m})e(\\pt{Bottom)o(L})94
+b(\\hd{F\(1,1,2)o(,1)o(\)})-95 839 y Fr(17)61 b Fx(\\Line)18
+b(\\pt{b1})f(\\pt{b2})g(_{F\(2,2,)o(1\)})35 b(\\br)-95
+888 y Fr(18)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{top})251
+b(\\pt{left,.2)o(5})16 b(\\pt{back,.)o(75)o(})-95 938
+y Fr(19)61 b Fx(\\Nul)38 b(\\pt{BackF)o(})16 b(\\pt{back})173
+b(\\pt{BackL,2)o(})-95 988 y Fr(20)61 b Fx(\\Nul)38 b(\\pt{LeftF)o(})16
+b(\\pt{left})173 b(\\pt{LeftL,2)o(})-95 1038 y Fr(21)61
+b Fx(\\Dash)18 b(\\pt{BackF)o(})e(\\pt{back})173 b(\\tl\\circ)17
+b(\\dt{3pt})-95 1088 y Fr(22)61 b Fx(\\Line)18 b(\\pt{back})e
+(\\pt{BackL)o(})173 b(\\hd{F\(1,1,1)o(,2)o(\)})-95 1137
+y Fr(23)61 b Fx(\\Line)18 b(\\pt{b1})f(\\pt{top})f(<{F\(2,1,2\))o(})g
+(\\br)-95 1187 y Fr(24)61 b Fx(\\Line)18 b(\\pt{LeftF)o(})e
+(\\pt{LeftL})153 b(\\tl\\bullet)16 b(\\hd{F\(2,1,)o(1,1)o(\)})g(\\jt)j
+(\\br)-95 1237 y Fr(25)61 b Fx(\\Nul)38 b(\\pt{Right)o(F})16
+b(\\pt{right})133 b(\\pt{RightL,)o(3})-95 1287 y Fr(26)61
+b Fx(\\Line)18 b(\\pt{Right)o(F})e(\\pt{RightL)o(})114
+b(\\tl\\bullet)16 b(\\hd{F\(1,2,)o(1,1)o(\)})g(\\jt)j(\\br)-95
+1337 y Fr(27)61 b Fx(\\endDiagra)o(m)-95 1386 y Fr(28)g
+Fx($$)1029 2114 y
+gsave
+ 1029 2114 a 1029 2114 a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a
+608 2124 a Fv(\013)-8 b(\013)f(\013)g(\013)g(\013)g(\013)g(\013)g(\013)
+g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f
+(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f(\013)g(\013)1029
+2114 y
+grestore
+ 1029 2114 a 1029 2114 a
+gsave
+ 1029 2114 a 1029 2114
+a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a 863 2091 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(3\))945 2114 y
+grestore
+ 945 2114 a 1147 1996 a
+gsave
+ 1147
+1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 660 1996 a
+1 setgray
+ 660 1996 a
+690 2006 915 21 v 1147 1996 a
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+
+1147 1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 690 2006 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1147 1996 y
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+ 1147 1996
+a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 973 1973 a FB(F)6 b FF(\(3)p
+FB(;)h FF(1)p FB(;)g FF(1\))1055 1996 y
+grestore
+ 1055 1996 a 1265
+1760 a
+gsave
+ 1265 1760 a 1265 1760 a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 968 1770 a
+Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-17 b(\000)1265
+1760 y
+grestore
+ 1265 1760 a 1265 1760 a
+gsave
+ 1265 1760 a 1265 1760
+a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 1183 1737 a FB(F)6 b FF(\(1)p FB(;)h FF(2)p
+FB(;)g FF(2\))1265 1760 y
+grestore
+ 1265 1760 a 1383 2232 a
+gsave
+ 1383
+2232 a 1383 2232 a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1150 2242 a Fw(\000)-12
+b(\000)j(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)1383
+2232 y
+grestore
+ 1383 2232 a 1383 2232 a
+gsave
+ 1383 2232 a 1383 2232
+a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1301 2276 a FB(F)6 b FF(\(1)p FB(;)h FF(3)p
+FB(;)g FF(1\))1383 2232 y
+grestore
+ 1383 2232 a 966 1534 a FB(F)f
+FF(\(3)p FB(;)h FF(2\))1439 2006 y FB(F)f FF(\(1)p FB(;)h
+FF(4\))494 2242 y FB(F)f FF(\(2)p FB(;)h FF(3\))1202
+2479 y FB(F)f FF(\(4)p FB(;)h FF(1\))910 2350 y
+gsave
+ 910 2350
+a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 910 2350 a
+grestore
+ 910 2350 a 1113 2320
+a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320 a 1113 2320 a
+grestore
+ 1113
+2320 a 1113 2320 a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320
+a 1025 2330 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)g(\013)1113
+2320 y
+grestore
+ 1113 2320 a 1136 2242 a Fw(\016)1050 2484 y
+gsave
+ 1050
+2484 a 1050 2484 a
+currentpoint currentpoint translate -2405159 neg -921240 atan rotate
+neg exch neg exch translate
+ 1050 2484 a 981 2494 a Fw(\000)-23
+b(\000)-9 b(\000)g(\000)h(\000)-22 b(\000)1050 2484 y
+grestore
+
+1050 2484 a 920 2570 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(2)p FB(;)g FF(1\))910 2350 y
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 537 2350 a
+1 setgray
+ 537 2350 a 614 2361 597
+21 v 910 2350 a
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 614 2361 a Fw(\000)-16 b(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b(\000)910 2350 y
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910
+2350 a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 830 2394 a FB(F)6 b FF(\(2)p
+FB(;)h FF(2)p FB(;)g FF(1\))912 2350 y
+grestore
+ 912 2350 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 792 1878 a
+grestore
+ 792
+1878 a 965 1796 a
+gsave
+ 965 1796 a 965 1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 965
+1796 a
+grestore
+ 965 1796 a 815 2018 a
+gsave
+ 815 2018 a 815 2018 a
+currentpoint currentpoint translate -713450 neg -4145418 atan rotate
+neg exch neg exch translate
+ 815
+2018 a 815 2018 a
+grestore
+ 815 2018 a 965 1796 a
+gsave
+ 965 1796 a 965
+1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 865 1807 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)965 1796 y
+grestore
+ 965 1796 a 1018 1888 a
+Fw(\016)845 1643 y
+gsave
+ 845 1643 a 845 1643 a
+currentpoint currentpoint translate 2271420 neg -1768140 atan rotate
+neg exch neg exch translate
+ 845 1643 a 767
+1653 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-14
+b(\000)845 1643 y
+grestore
+ 845 1643 a 688 1581 a FB(F)6 b FF(\(1)p
+FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g FF(2\))792 1878 y
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 367 1878 a
+1 setgray
+ 367 1878
+a 400 1888 786 21 v 792 1878 a
+grestore
+ 792 1878 a 792 1878 a
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 400 1888 a Fw(\000)-14
+b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)d(\000)792 1878 y
+grestore
+ 792 1878 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 710 1855 a FB(F)6
+b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(2\))792 1878 y
+grestore
+ 792
+1878 a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 441
+2039 a
+1 setgray
+ 441 2039 a 437 2049 402 21 v 696 2039 a
+grestore
+ 696 2039
+a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 437 2049
+a Fw(\000)-20 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)696 2039 y
+grestore
+ 696 2039 a 936 2006 a Fw(\017)344 2093
+y FB(F)6 b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g
+FF(1\))1329 1901 y
+gsave
+ 1329 1901 a 1329 1901 a
+currentpoint currentpoint translate 1139925 neg 1284136 atan rotate
+neg exch neg exch translate
+ 1329 1901
+a 1329 1901 a
+grestore
+ 1329 1901 a 1397 1841 a
+gsave
+ 1397 1841 a 1397
+1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1252 1841 a
+1 setgray
+ 1252 1841 a 1248 1851
+254 21 v 1397 1841 a
+grestore
+ 1397 1841 a 1397 1841 a
+gsave
+ 1397 1841
+a 1397 1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1248 1851 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-13
+b(\000)1397 1841 y
+grestore
+ 1397 1841 a 1278 1947 a Fw(\017)1403
+1755 y FB(F)6 b FF(\(1)p FB(;)h FF(2)p FB(;)g FF(1)p
+FB(;)g FF(1\))954 2770 y(67)p eop
+%%Page: 68 12
+68 67 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\def\\y#1#2)o({Y)o(\(#1)o(,#)o(2\)})16
+b(\\def\\RP{{)o(\\bb)g(R}P})-79 141 y Fr(3)62 b Fx(\\gravitate)o(ri)o
+(ght)-79 191 y Fr(4)g Fx(\\Dg)-79 241 y Fr(5)g Fx(&&&\\RP^1)17
+b(=)i({}&)f(\\y11)g(&)i(\\rInto)d(&)i(\\y21)f(&)h(\\rInto)f(&)h(\\y31)f
+(&)h(\\rInto)e(&)j(\\y41)e(&)h(\\rInto)e(&)i(\\cdots)f(\\\\)-79
+291 y Fr(6)62 b Fx(&&&)195 b(&)117 b(&)157 b(&)19 b(\\dTo)f(&)157
+b(&)19 b(\\dTo)f(&)156 b(&)20 b(\\dTo)e(&)333 b(\\\\)-79
+340 y Fr(7)62 b Fx(&&\\RP^2)17 b(=)i({}&&)116 b(&)157
+b(&)19 b(\\y12)f(&)h(\\rInto)f(&)h(\\y22)f(&)h(\\rInto)e(&)j(\\y32)e(&)
+h(\\rInto)e(&)i(\\cdots)f(\\\\)-79 390 y Fr(8)62 b Fx(&&)195
+b(&&)117 b(&)157 b(&)117 b(&)157 b(&)19 b(\\dTo)f(&)156
+b(&)20 b(\\dTo)e(&)333 b(\\\\)-79 440 y Fr(9)62 b Fx(&\\RP^3)17
+b(=)j({}&&&)115 b(&)157 b(&)117 b(&)157 b(&)19 b(\\y13)f(&)h(\\rInto)e
+(&)j(\\y23)e(&)h(\\rInto)e(&)i(\\cdots)f(\\\\)-95 490
+y Fr(10)61 b Fx(&)196 b(&&&)116 b(&)157 b(&)117 b(&)157
+b(&)117 b(&)156 b(&)20 b(\\dTo)e(&)333 b(\\\\)-95 540
+y Fr(11)61 b Fx(\\RP^4)18 b(=)h({}&&&&)115 b(&)157 b(&)117
+b(&)157 b(&)117 b(&)156 b(&)20 b(\\y14)e(&)h(\\rInto)e(&)i(\\cdots)f
+(\\\\)-95 589 y Fr(12)61 b Fx(\\endDg)-95 639 y Fr(13)g
+Fx($$)666 781 y
+gsave
+ 666 781 a 666 781 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 666 781 a 597 791
+a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)666 781 y
+grestore
+ 666 781 a 945 781 a
+gsave
+ 945 781 a 945
+781 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 945 781 a 876 791 a FB(,)-7 b Fw(\000)-22 b(\000)-9
+b(\000)g(\000)g(\000)-21 b Fv(\021)945 781 y
+grestore
+ 945 781
+a 1224 781 a
+gsave
+ 1224 781 a 1224 781 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 1224 781 a 1155 791
+a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1224 781 y
+grestore
+ 1224 781 a 1484 781 a
+gsave
+ 1484 781 a
+1484 781 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 781 a 1434 791 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 781
+y
+grestore
+ 1484 781 a 805 875 a
+gsave
+ 805 875 a 805 875 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 805 875 a
+740 886 a Fw(\000)e(\000)-9 b(\000)g(\000)h(\000)-22
+b Fv(\021)805 875 y
+grestore
+ 805 875 a 1084 875 a
+gsave
+ 1084 875 a 1084
+875 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1084 875 a 1019 886 a Fw(\000)f(\000)-8 b(\000)f(\000)g(\000)-22
+b Fv(\021)1084 875 y
+grestore
+ 1084 875 a 1363 875 a
+gsave
+ 1363 875 a
+1363 875 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1363 875 a 1298 886 a Fw(\000)g(\000)-9 b(\000)g(\000)g
+(\000)-22 b Fv(\021)1363 875 y
+grestore
+ 1363 875 a 945 970 a
+gsave
+ 945
+970 a 945 970 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 945 970 a 876 980 a FB(,)-7 b Fw(\000)-22
+b(\000)-9 b(\000)g(\000)g(\000)-21 b Fv(\021)945 970
+y
+grestore
+ 945 970 a 1224 970 a
+gsave
+ 1224 970 a 1224 970 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 1224 970
+a 1155 980 a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1224 970 y
+grestore
+ 1224 970 a 1484 970 a
+gsave
+ 1484 970 a
+1484 970 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 970 a 1434 980 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 970
+y
+grestore
+ 1484 970 a 1084 1064 a
+gsave
+ 1084 1064 a 1084 1064 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1084
+1064 a 1019 1075 a Fw(\000)e(\000)-8 b(\000)f(\000)g(\000)-22
+b Fv(\021)1084 1064 y
+grestore
+ 1084 1064 a 1363 1064 a
+gsave
+ 1363 1064
+a 1363 1064 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1363 1064 a 1298 1075 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)-22 b Fv(\021)1363 1064 y
+grestore
+ 1363 1064
+a 1224 1159 a
+gsave
+ 1224 1159 a 1224 1159 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 1224 1159 a 1155
+1169 a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1224 1159 y
+grestore
+ 1224 1159 a 1484 1159 a
+gsave
+ 1484 1159
+a 1484 1159 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 1159 a 1434 1169 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 1159
+y
+grestore
+ 1484 1159 a 1363 1253 a
+gsave
+ 1363 1253 a 1363 1253 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1363
+1253 a 1298 1264 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)-22
+b Fv(\021)1363 1253 y
+grestore
+ 1363 1253 a 1484 1348 a
+gsave
+ 1484 1348
+a 1484 1348 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 1348 a 1434 1358 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 1348
+y
+grestore
+ 1484 1348 a 322 791 a Fo(R)p FB(P)390 774 y Fr(1)419
+791 y FF(=)12 b FB(Y)d FF(\(1)p FB(;)e FF(1\))153 b FB(Y)10
+b FF(\(2)p FB(;)d FF(1\))152 b FB(Y)10 b FF(\(3)p FB(;)d
+FF(1\))153 b FB(Y)9 b FF(\(4)p FB(;)e FF(1\))153 b Fw(\001)7
+b(\001)g(\001)601 980 y Fo(R)p FB(P)669 963 y Fr(2)698
+980 y FF(=)12 b FB(Y)e FF(\(1)p FB(;)d FF(2\))152 b FB(Y)10
+b FF(\(2)p FB(;)d FF(2\))153 b FB(Y)9 b FF(\(3)p FB(;)e
+FF(2\))153 b Fw(\001)7 b(\001)g(\001)880 1169 y Fo(R)p
+FB(P)948 1152 y Fr(3)978 1169 y FF(=)k FB(Y)f FF(\(1)p
+FB(;)d FF(3\))153 b FB(Y)9 b FF(\(2)p FB(;)e FF(3\))153
+b Fw(\001)7 b(\001)g(\001)1159 1358 y Fo(R)p FB(P)1227
+1341 y Fr(4)1257 1358 y FF(=)12 b FB(Y)d FF(\(1)p FB(;)e
+FF(4\))153 b Fw(\001)7 b(\001)g(\001)-79 1523 y Fr(1)62
+b Fx($$)-79 1573 y Fr(2)g Fx(\\def\\M{{\\c)o(al)16 b(M}\\dot})h
+(\\def\\inv{)o(^{-)o(1})o(})g(\\def\\orlz)o(#1)o({\\l)o(ang)o(le)o
+(#1\\)o(ra)o(ngl)o(e})-79 1623 y Fr(3)62 b Fx(\\let\\label)o(st)o(yle)o
+(\\t)o(ext)o(sty)o(le)-79 1673 y Fr(4)g Fx(\\Dg)-79 1722
+y Fr(5)g Fx([q\(g,b\),t])16 b(\\aNul)h(\(1,-1\))h(\\aMapsto)e(\(2,-4\))
+i(&&&)g(\\rMapsto)f(&&&)-79 1772 y Fr(6)395 b Fx(q\(g,\\phi\(b,)o(t\))o
+(\))17 b(\\aNul)g(\(-1,-1\))g(\\aMapsto)g(\(-2,-4\))g(\\mx{12pt})f
+(\\\\)-79 1822 y Fr(7)199 b Fx(&)20 b(\\M)e(R_s)h(&)137
+b(&)19 b(\\rTo)77 b(&)156 b(&)20 b(\\beta\\inv)o(\(W)o(_s\))55
+b(\\\\)-79 1872 y Fr(8)199 b Fx(&)157 b(&)19 b(\\rdTo)f(&)176
+b(&)19 b(\\ldTo)f(>{R_s})272 b(\\\\)-79 1922 y Fr(9)199
+b Fx(&)157 b(&)137 b(&)19 b(\\beta\\inv)o(\\or)o(lz{)o(s})369
+b(\\\\)-95 1971 y Fr(10)198 b Fx(&)39 b(&)19 b(q\(g,r_s\(b\)\))d(&)j
+({})g(=)g({})g(&)g(q\(g,r_s\(\\p)o(hi)o(\(b,)o(t\)\))o(\))350
+b(\\\\)-95 2021 y Fr(11)61 b Fx(\\endDg)-95 2071 y Fr(12)g
+Fx($$)676 2255 y
+gsave
+ 676 2255 a 676 2255 a
+currentpoint currentpoint translate -1491744 neg 2797019 atan rotate
+neg exch neg exch translate
+ 676 2255 a 676
+2255 a
+grestore
+ 676 2255 a 706 2397 a
+gsave
+ 706 2397 a 706 2397 a
+currentpoint currentpoint translate -5966976 neg 3747163 atan rotate
+neg exch neg exch translate
+ 706
+2397 a 516 2407 a Fw(7\000)-13 b(\000)k(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)d
+Fv(\021)706 2397 y
+grestore
+ 706 2397 a 967 2208 a
+gsave
+ 967 2208 a 967
+2208 a
+currentpoint currentpoint translate 0 neg 11974508 atan rotate neg
+exch neg exch translate
+ 967 2208 a 679 2218 a Fw(7\000)c(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-15
+b Fv(\021)967 2208 y
+grestore
+ 967 2208 a 1232 2255 a
+gsave
+ 1232 2255
+a 1232 2255 a
+currentpoint currentpoint translate -1491744 neg -3583451 atan rotate
+neg exch neg exch translate
+ 1232 2255 a 1232 2255 a
+grestore
+ 1232 2255 a 1225
+2397 a
+gsave
+ 1225 2397 a 1225 2397 a
+currentpoint currentpoint translate -5966976 neg -3819525 atan rotate
+neg exch neg exch translate
+ 1225 2397 a 1033 2407
+a Fw(7\000)-23 b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-22
+b Fv(\021)1225 2397 y
+grestore
+ 1225 2397 a 942 2303 a
+gsave
+ 942 2303
+a 942 2303 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 942 2303 a 822 2313 a Fw(\000)k(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-18 b Fv(\021)942
+2303 y
+grestore
+ 942 2303 a 853 2397 a
+gsave
+ 853 2397 a 853 2397 a
+currentpoint currentpoint translate -2983488 neg 2797019 atan rotate
+neg exch neg exch translate
+ 853
+2397 a 755 2407 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+-17 b Fv(\021)853 2397 y
+grestore
+ 853 2397 a 1030 2397 a
+gsave
+ 1030
+2397 a 1030 2397 a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1030 2397 a 937 2407 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)-20 b Fv(\021)1030
+2397 y
+grestore
+ 1030 2397 a 1030 2397 a
+gsave
+ 1030 2397 a 1030 2397
+a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1030 2397 a 1027 2385 a
+currentpoint currentpoint translate 2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1027 2385 a 28 x FB(R)1059
+2419 y Fu(s)1027 2397 y
+grestore
+ 1027 2397 a 504 2218 a FF([)p
+FB(q)q FF(\()p FB(g)q(;)7 b(b)p FF(\))p FB(;)g(t)p FF(])574
+b FB(q)q FF(\()p FB(g)q(;)7 b(\036)p FF(\()p FB(b;)g(t)p
+FF(\)\))715 2313 y Fw(M)778 2302 y FF(_)765 2313 y FB(R)797
+2319 y Fu(s)1039 2313 y FB(\014)1064 2296 y Fs(\000)p
+Fr(1)1109 2313 y FF(\()p FB(W)1164 2319 y Fu(s)1182 2313
+y FF(\))881 2502 y FB(\014)906 2485 y Fs(\000)p Fr(1)951
+2502 y Fw(h)p FB(s)p Fw(i)735 2596 y FB(q)q FF(\()p FB(g)q(;)g(r)830
+2602 y Fu(s)848 2596 y FF(\()p FB(b)p FF(\)\))k(=)h FB(q)q
+FF(\()p FB(g)q(;)7 b(r)1064 2602 y Fu(s)1082 2596 y FF(\()p
+FB(\036)p FF(\()p FB(b;)g(t)p FF(\)\)\))954 2770 y(68)p
+eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/diagrams/kuvio/kuvio.sty b/macros/generic/diagrams/kuvio/kuvio.sty
new file mode 100644
index 0000000000..f423274704
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/kuvio.sty
@@ -0,0 +1,28 @@
+% kuvio.sty
+% Anders G S Svensson
+% $Date: 1996/01/17 10:06:55 $
+% $Revision: 1.2 $
+
+\def\Revision@$#1 #2 ${v#2}
+\def\Date@$#1 #2 #3 ${#2}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{kuvio}
+ [\Date@$Date: 1996/01/17 10:06:55 $ \Revision@$Revision: 1.2 $]
+
+\DeclareOption{arrsy}{\AtEndOfPackage{\RequirePackage{arrsy}\arrsy}}
+\DeclareOption{cmarrows}{\PassOptionsToPackage{cmarrows}{arrsy}}
+
+\DeclareOption{autocompile}{\AtEndOfPackage{\autocompile}}
+\DeclareOption{gridlines}{\AtEndOfPackage{\gridlines}}
+\DeclareOption{kuviofmt}{\AtEndOfPackage{\kuviofmt}}
+\DeclareOption{nocompile}{\AtEndOfPackage{\nocompile}}
+\DeclareOption{overgrid}{\AtEndOfPackage{\overgrid}}
+\DeclareOption{recompile}{\AtEndOfPackage{\recompile}}
+\DeclareOption{forcekdg}{\AtEndOfPackage{\forcekdg}}
+\DeclareOption{unforcekdg}{\AtEndOfPackage{\let\forcekdg\relax}}
+\ProcessOptions
+
+\AtBeginDocument{\@ifpackageloaded{amsmath}{\forcekdg}{}}
+
+\input kuvio
diff --git a/macros/generic/diagrams/kuvio/kuvio.tex b/macros/generic/diagrams/kuvio/kuvio.tex
new file mode 100644
index 0000000000..96c7244be3
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/kuvio.tex
@@ -0,0 +1,1891 @@
+% kuvio.tex
+% patchlevel 216
+%
+%%
+%% Copyright (C) 1994-1996 Anders G S Svensson <svensson@math.ubc.ca>
+%%
+%% The file kuvio.tex may be freely distributed and used, with the
+%% following restrictions.
+%%
+%% 1. Substantial use of kuvio.tex in any published work should be suitably
+%% acknowledged.
+%%
+%% 2. No changes or modifications are to be made to kuvio.tex.
+%%
+%% 3. The documentation, "Typesetting diagrams with kuvio.tex", must
+%% be distributed with kuvio.tex.
+%%
+%% I would enjoy receiving a copy of any book, journal article or thesis
+%% prepared using kuvio.tex.
+%%
+%% Thank you.
+%%
+\chardef\kuvioletter=\catcode`\@\catcode`\@=11
+\chardef\K@aa=\catcode`\? \catcode`\?=7
+\gdef\K@ab{\global\let\K@ab\kuviobye}%
+\gdef\kuviobye{\gdef\D@kuviolevel{0}%
+\K@ac\@\kuvioletter\K@ac\?\K@aa
+\K@ac\~\K@ad\K@ac\??Z\K@ae
+\K@ac\??Y\K@af\K@ac\??X\K@ag
+\K@ac\??W\K@ah\K@ac\??V\K@ai
+\K@ac\??U\K@aj\K@ac\??T\K@ak
+\K@ac\??S\K@al\K@ac\??R\K@am
+\K@ac\??Q\K@an\K@ac\??P\K@ao
+\K@ac\??O\K@ap\K@ac\??N\K@aq
+\K@ac\??A\K@ar
+\endinput}%
+\gdef\K@as#1#2{\chardef#2=\catcode`#1 \catcode`#1=14 }%
+\K@as\~\K@ad\K@as\??Z\K@ae
+\K@as\??Y\K@af\K@as\??X\K@ag
+\K@as\??W\K@ah\K@as\??V\K@ai
+\K@as\??U\K@aj\K@as\??T\K@ak
+\K@as\??S\K@al\K@as\??R\K@am
+\K@as\??Q\K@an\K@as\??P\K@ao
+\K@as\??O\K@ap\K@as\??N\K@aq
+\K@as\??A\K@ar
+\ifx\D@kuvioloaded\relax
+\ifcase\D@kuviolevel\relax
+\gdef\K@ab{\message{again}\kuviobye}%
+\or\relax
+\or\catcode`\??Z=9 \or\catcode`\??Y=9 \or\catcode`\??X=9
+\or\catcode`\??W=9 \or\catcode`\??V=9 \or\catcode`\??U=9
+\or\catcode`\??T=9 \or\catcode`\??S=9 \or\catcode`\??R=9
+\or\catcode`\??Q=9 \or\catcode`\??P=9 \or\catcode`\??O=9
+\or\catcode`\??N=9 \or\catcode`\??A=9
+\fi
+\else
+\chardef\K@at=\catcode`\( \chardef\K@au=\catcode`\_
+\chardef\K@av=\catcode`\^ \chardef\K@aw=\catcode`\<
+\chardef\K@ax=\catcode`\> \chardef\K@ay=\catcode`\:
+\chardef\K@az=\catcode`\/ \chardef\K@ba=\catcode`\*
+\chardef\K@bb=\catcode`\| \gdef\D@kuviolevel{1}%
+\catcode`\~=9 \let\D@kuvioloaded\relax\global\let\K@ab\relax
+\fi
+\K@ab
+~\def\kuviocs#1{%
+~{\escapechar=-1
+~\expandafter\ifx\csname D@\string#1@k@D\endcsname\relax
+~\xdef\K@bc{\string#1}\else\xdef\K@bc{D@\string#1@k@D}\fi
+~}\csname\K@bc\endcsname}
+~\def\nonkuviocs#1{%
+~{\escapechar=-1
+~\expandafter\ifx\csname D@\string#1@nk@D\endcsname\relax
+~\xdef\K@bc{\string#1}\else\xdef\K@bc{D@\string#1@nk@D}\fi
+~}\csname\K@bc\endcsname}
+~\def\K@bd#1#2{%
+~{\escapechar=-1
+~\expandafter\ifx\csname\string#2\endcsname\relax
+~\xdef\K@bc{\string#2}\else
+~\aftergroup\K@be\aftergroup#2\xdef\K@bc{D@\string#2@k@D}\fi
+~}\def\K@bf{#1}\expandafter\K@bf\csname\K@bc\endcsname}
+~\def\K@bg{\K@bd\def}
+~\def\K@bh{\K@bd\let}
+~\def\K@bi#1#2{%
+~{\escapechar=-1
+~\expandafter\ifx\csname\string#2\endcsname\relax
+~\else\expandafter\expandafter\expandafter\let\expandafter\expandafter
+~\csname D@\string#2@nk@D\endcsname\csname\string#2\endcsname
+~\aftergroup\K@bj\aftergroup#2\fi
+~\xdef\K@bc{\string#2}%
+~}\def\K@bf{#1}\expandafter\K@bf\csname\K@bc\endcsname}
+~\def\K@bk{\K@bi\def}
+~\def\K@bl{\K@bi\let}
+~\def\K@bm#1#2{%
+~{\escapechar=-1
+~\expandafter\ifx\csname\string#1\endcsname\relax
+~\xdef\K@bc{\string#1}\else
+~\aftergroup\K@be\aftergroup#1\xdef\K@bc{D@\string#1@k@D}\fi
+~\expandafter\ifx\csname D@\string#2@k@D\endcsname\relax
+~\xdef\K@bf{\string#2}\else\xdef\K@bf{D@\string#2@k@D}\fi
+~}\expandafter\expandafter\expandafter\let\expandafter\expandafter
+~\csname\K@bc\endcsname\csname\K@bf\endcsname}
+~\let\kuviodef\K@bg\let\rekuviodef\K@bk
+~\let\kuviolet\K@bh\let\rekuviolet\K@bl
+~\let\kuviodefine\K@bd\let\rekuviodefine\K@bi
+~\def\kuvioforce#1{%
+~{\escapechar=-1
+~\expandafter\ifx\csname D@\string#1@k@D\endcsname\relax
+~\else\xdef\K@bc{\let\noexpand#1\expandafter\noexpand
+~\csname D@\string#1@k@D\endcsname\let\expandafter\noexpand
+~\csname D@\string#1@k@D\endcsname\relax}\aftergroup\K@bc\fi
+~}}
+~\def\K@be#1{\immediate\write16
+~{** \ifnum\D@kuviolevel=1 \else(kuvio.tex) \fi
+~\string#1\K@bn already defined: use \string\kuviocs\string#1}}
+~\def\K@bj#1{\immediate\write16
+~{** \ifnum\D@kuviolevel=1 \else(kuvio.tex) \fi
+~\string#1\K@bn redefined}}
+~\def\K@bn{ }
+~{\newlinechar=`\!\catcode`\ =13 \let \K@bn
+~\immediate\write16{***************************************************
+~!** Diagrams for dvips users **
+~!** patchlevel 216, 19 Feb 1996 **
+~!** Anders G S Svensson <svensson@math.ubc.ca> **
+~!***************************************************}}
+~\def\K@ac#1#2{\catcode`#1=#2\relax}\def\K@bo{\K@bp{2}{rotation}\global\let
+~\K@bo\relax}\def\K@bq{\K@bp{3}{frames and shades}\global\let\K@bq\relax
+~}\def\K@br{\K@bp{4}{figures and graphs}\global\let\K@br\relax}\def\K@bs
+~{\K@bp{5}{shifts}\global\let\K@bs\relax}\def\K@bt{\K@bp{6}{diagrams}\global
+~\let\K@bt\relax}\def\K@bu{\K@bp{7}{kdg files}\global\let\K@bu\relax}\def
+~\K@bv{\K@bp{8}{kuv files}\global\let\K@bv\relax}\def\K@bw{\K@bp
+~{9}{modification cells}\global\let\K@bw\relax}\def\K@bx{\K@bp{10}{text
+~modifications}\global\let\K@bx\relax}\def\K@by{\K@bp
+~{11}{modifications}\global\let\K@by\relax}\def\K@bz{\K@bp{12}{rotated
+~labels}\global\let\K@bz\relax}\def\K@ca{\K@bp{13}{points}\global\let\K@ca
+~\relax}\def\K@cb{\K@bp{14}{box and frame modifications}\global\let\K@cb
+~\relax}\def\K@cc{\K@bp{15}{dots}\global\let\K@cc\relax}\def\K@bp#1#2{\gdef
+~\D@kuviolevel{#1}\gdef\K@cd{\message{#2}}\input kuvio.tex\relax}\def
+~\kuviofmt{\xdef\K@bc{\everyjob={\the\everyjob\message{** kuvio.tex (p216)
+~Anders G S Svensson **}}}\K@bc\K@bo\K@bq\K@br\K@bs\K@bt\K@bu\K@bv\K@bw
+~\K@bx\K@by\K@bz\K@ca\K@cb\K@cc\let\kuviofmt\relax}\def\K@ce{\K@cd\catcode
+~`\(=\K@at\catcode`\_=\K@au\catcode`\^=\K@av\catcode`\<=\K@aw\catcode
+~`\>=\K@ax\catcode`\:=\K@ay\catcode`\/=\K@az\catcode`\*=\K@ba\catcode
+~`\|=\K@bb\let\K@cf\let\def\let{\global\K@cf}\K@cf\def\gdef}\K@bk
+~\dvipsspecial#1{\special{ps:#1}}\def\kuviospecial{\let\K@cg}\kuviospecial
+~\dvipsspecial\def\kuvio{{\tt kuvio.tex}}\def\kuviopatchlevel{216}\def
+~\kuviodate{19 Feb 1996}\newhelp\K@ch{Expect chaos to ensue.}\def
+~\kuviorequire#1{\relax\ifnum#1>\kuviopatchlevel\relax\errhelp=\K@ch
+~\errmessage{Hmm. Looks like I'll need a newer patchlevel of kuvio.tex.}\fi
+~}\def\K@ci{}\def\K@cj#1{}\def\K@ck#1#2{}\def\K@cl{{}}\def\K@cm{0}\def\K@cn
+~{.5}\def\K@co{1}\def\K@cp{-1}\def\K@cq#1#2{#1#2}\def\K@cr#1#2{#2#1}\def
+~\K@cs#1#2{{#2}{#1}}\def\K@ct#1#2{\let\K@bf#1\let#1#2\let#2\K@bf}\def\K@cu
+~#1\K@cv{\def\K@cw{#1}\K@cx}\def\K@cx{\K@cw\let\K@cy\K@cx\else\let\K@cy
+~\relax\fi\K@cy}\let\K@cv\fi\newif\ifkuvio@\def\K@cz{\relax\kuvio@false
+~}\newwrite\K@da\newwrite\K@db\newread\K@dc\newread\K@dd\newcount\K@de
+~\newcount\K@df\newcount\K@dg\newcount\K@dh\newcount\K@di\newcount\K@dj
+~\newcount\K@dk\newcount\K@dl\newdimen\K@dm\newdimen\K@dn\newdimen\K@do
+~\newdimen\K@dp\newtoks\K@dq\newtoks\K@dr\newbox\K@ds\newbox\K@dt
+~\newbox\K@du
+??V\begingroup\K@ce\def\K@dv#1{\bgroup\K@dw\K@dx{\K@dy\K@dr}{\the\K@dr}\def
+??V\K@dz{\egroup\egroup\egroup\K@ea}\def\Modify{\egroup\egroup\egroup\K@by
+??V\K@eb}\let\K@ec\relax\let\K@ed\relax\let\K@ee\relax\K@ef\setbox\K@du
+??V=\hbox\bgroup\vbox\bgroup\halign\bgroup&\K@eg\K@eh{##}\cr}\def\endDiagram
+??V{\K@dz\egroup}%
+~\def\K@ei{\K@dv}\K@bk\Diagram{\bgroup\K@bt\K@ej\K@ek\K@el\everyDiagram
+~\K@ei{Diagram}}\K@bl\everyDiagram\relax
+??V\def\K@ea{\K@em\global\setbox\K@ds=\hbox{\hbox to \K@en sp{\hfil\vbox to
+??V\K@eo sp{\vfil}}\K@ep\K@eq\K@er}\K@dx{}{{}{1}{\gdef\noexpand\K@es{\K@es
+??V}\gdef\noexpand\K@et{\K@et}\gdef\noexpand\K@eu{\K@eu}\gdef\noexpand\K@ev
+??V{\K@ev}}}\K@ew\K@ex\K@ey\egroup\Displaybox\K@ds}%
+~\let\K@ew\relax\let\K@dw\relax\let\K@dx\K@ck\K@bg\compileto{\bgroup\K@ez
+~\K@fa}\def\K@fa#1{\egroup\def\K@ej{\K@fb{#1}\global\let\K@ej\relax\let
+~\K@ek\relax}}\def\K@ez{\catcode`\ =9 \catcode`\??I=9 }\K@bg\recompileto
+~{\bgroup\K@ez\K@fc}\def\K@fc#1{\egroup\def\K@ej{\K@fd{#1}\global\let\K@ej
+~\relax\let\K@ek\relax}}\K@bg\recompile{\let\K@fb\K@fd}\K@bg\nocompile{\let
+~\K@fe\K@ck}\K@bg\forcekdg{\def\K@el{\def\K@ei{\K@ff}\def\K@fg{\K@fh}\def
+~\K@fi{\K@fj}\K@bu}}\let\K@el\relax\def\K@fb#1{\K@fe0{#1}}\def\K@fd#1{\K@fe
+~1{#1}}\K@bg\autocompileto{\bgroup\K@ez\K@fk}\def\K@fk#1{\egroup\K@fl
+~\autocompilecounter\def\K@ek{\global\advance\autocompilecounter by 1 \K@fb
+~{#1-\the\autocompilecounter}}}\K@bg\autocompile{\kuviocs\autocompileto
+~{.\jobname}}\let\K@ej\relax\let\K@ek\relax\edef\K@fl#1{\noexpand\newcount
+~#1\gdef\noexpand\K@fl##1{\global##1=0 }}\def\K@fe#1#2{\let\K@el\relax\gdef
+~\K@fm{#2}\ifcase#1 \immediate\openin\K@dc=#2.kuv \def\K@fn{\K@fd{#2}}\ifeof
+~\K@dc\immediate\closein\K@dc\def\K@bc{\K@fd{#2}}\else\def\K@dw{\K@fo
+~{reading #2.kuv}}\def\K@ei{\K@fp}\def\K@fg{\K@fq}\def\K@fi{\K@fr}\let\K@bc
+~\K@bv\fi\or\immediate\openout\K@da=#2.kuv \let\K@dx\K@fs\def\K@dw{\K@fo
+~{compiling #2.kuv}}\def\K@ei{\K@ff}\def\K@fg{\K@fh}\def\K@fi{\K@fj}\let
+~\K@bc\K@bu\let\K@ew\K@ft\fi\K@bc}\def\K@fm{\jobname}\def\K@fs
+~#1#2{{#1\immediate\write\K@da{#2}}}\def\K@ft{\immediate\closeout\K@da\K@fu
+~{done}}\def\K@fo#1{\message{(#1}}\def\K@fu#1{\message{#1)}}
+??U\begingroup\K@ce\def\K@ff{\K@fv\K@dv}\def\K@fh{\K@fv\K@fw}\def\K@fv
+??U#1#2{\let\K@fo\message\let\K@fu\message\def\K@fx{\K@fy{\relax
+??U}\expandafter\def\csname#2\endcsname{#1{}}\input\K@fm.kdg \K@fy
+??U{}}\expandafter\expandafter\expandafter\K@fz\expandafter\expandafter
+??U\csname#2\endcsname\csname end#2\endcsname\K@fx}%
+~\def\K@ga#1#2#3#4{\def\K@bc##1#3{\def\K@gb{#1#2##1#3}\gdef\K@fy####1{\K@gc
+~{#1#2##1#3####1}}#4}\K@bc}\def\K@fz{\K@ga{}}\def\K@gd{\K@ga{\relax}}\def
+~\K@ge{\K@ga{\relax\relax}}\def\K@gc#1{\immediate\openout\K@db=\K@fm.kdg
+~\K@dr={#1}\immediate\write\K@db{\the\K@dr}\immediate\closeout\K@db}%
+??U\def\K@fj#1{\let\K@fo\message\let\K@fu\message\expandafter\expandafter
+??U\expandafter\K@gf\expandafter\expandafter\csname#1\endcsname\csname
+??Uend#1\endcsname{\K@gg{#1}}}%
+~\let\K@gf\K@fz
+??U\def\K@gg#1{\expandafter\expandafter\expandafter\K@gh\expandafter
+??U\expandafter\csname end#1\endcsname\K@gb\Modify\K@gi\expandafter\def
+??U\csname#1\endcsname{\K@gj{}}\K@fy{\relax}\input\K@fm.kdg \K@fy{}}\endgroup
+~\def\K@gk#1#2#3#4#5\Modify#6\K@gi{\def\K@gl{#6}\ifx\K@gl\K@ci\def\K@bc
+~##1#1{\def\K@gm####1{####1={\vbox {\offinterlineskip\hbox{$##1$}\null
+~}}}}\K@bc#5\else\def\K@gm##1{##1={\vbox {\offinterlineskip\hbox
+~{$#5$}\null}}}\fi}\let\K@gn\K@gk\def\K@go{\K@gk{}}\def\K@gh{\K@gk{}{}}%
+??T\begingroup\K@ce\def\K@fp{\K@gp\K@gq\K@ff\K@dv}\def\K@fq{\K@gp\K@gr\K@fh
+??T\K@fw}\def\K@fr{\let\K@gs\K@gt\K@gp\K@gu\K@fj\K@gj}\def\K@gp
+??T#1#2#3{\immediate\read\K@dc to\K@bf\ifx\K@bf\K@gv\def\K@bc{\K@gs
+??T#1#3}\else\def\K@bc{\immediate\closein\K@dc\K@fn#2}\fi\K@bc}%
+~\def\kuviorevision#1{\def\K@dy##1{##1={{kuvio}{216}{#1}}}\def\K@gv
+~{{kuvio}{216}{#1} }}\kuviorevision{}
+??T\def\K@gs#1#2#3{\def\K@fx{\K@gw#1#2{#3}}\expandafter\expandafter
+??T\expandafter\K@fz\expandafter\expandafter\csname#3\endcsname\csname
+??Tend#3\endcsname\K@fx}\def\K@gw#1#2#3{\def\K@bc{\K@fy{\relax}\expandafter
+??T\def\csname#3\endcsname{\K@fn#2{}}\input\K@fm.kdg \K@fy{}}\immediate\openin
+??T\K@dd=\K@fm.kdg \ifeof\K@dd\immediate\closein\K@dd\immediate\closein\K@dc
+??T\let\K@fo\message\let\K@fu\message\else\immediate\read\K@dd to \K@bf
+??T\immediate\closein\K@dd\ifx\K@bf\K@gb\let\K@bc#1\else\immediate\closein
+??T\K@dc\let\K@fo\message\let\K@fu\message\fi\fi\K@bc}\def\K@gt#1#2#3{\def
+??T\K@fx{\expandafter\expandafter\expandafter\K@gh\expandafter\expandafter
+??T\csname end#3\endcsname\K@gb\Modify\K@gi\K@gw#1#2{#3}}\expandafter
+??T\expandafter\expandafter\K@gf\expandafter\expandafter\csname#3\endcsname
+??T\csname end#3\endcsname\K@fx}\def\K@gq{\K@dw\def\K@gx{\K@gy\K@gz\let\gr
+??T\K@ha}\K@hb\K@hc\K@hd\K@he\K@hf\let\stop\relax\let\grav\relax\let\base
+??T\relax\K@hg\K@hh\K@hi\catcode`\@=11 \immediate\read\K@dc to\K@bf
+??T\expandafter\K@hj\K@bf\K@fu{done}\K@ex\K@ey\egroup\Displaybox\K@ds}\def
+??T\K@gr{\let\K@hk\K@hl\let\K@hm\K@hj\K@gu}\def\K@hj#1#2#3#4#5 {\def\K@en
+??T{#1}\def\K@hn{#5}\def\K@ho{#3}\def\K@hp{#4}\global\setbox\K@ds=\hbox{\hbox
+??Tto #1sp{\hfil\vbox to #2sp{\vfil}}\K@hq}}\def\K@gu{\K@dw\def\K@gx{\let\gr
+??T\K@ha}\catcode`\@=11 \immediate\read\K@dc to\K@bf\expandafter\K@hm\K@bf
+??T\K@fu{done}\K@ex\K@hr\egroup\Displaybox\K@ds}\def\K@hm#1#2#3#4 {\def\K@en
+??T{#1}\def\K@hp{#4}\global\setbox\K@ds=\hbox{\hbox to #1sp{\hfil\vbox to
+??T#2sp{\vfil}}\K@hq}}\def\K@hq{\immediate\read\K@dc to\K@bf\ifeof\K@dc\def
+??T\K@bc{\immediate\closein\K@dc}\else\def\K@bc{\expandafter\K@hs\K@bf\K@hq
+??T}\fi\K@bc}\def\K@hs#1#2#3 {\def\K@bf{#1}\ifx\K@bf\K@ci\def\K@bc
+??T##1{{##1\ifnum#2=0 \immediate\read\K@dc to\K@bf\expandafter\K@ht\K@bf\fi
+??T}}\else\def\K@bc{\K@hu{#1}{#2}}\fi\K@bc{#3}}\def\K@ht#1#2#3 {\K@hu
+??T{#1}{#2}{#3}}\def\K@hu#1#2#3{\llap{\hbox to \K@en sp{\hskip#1 \smash{\hbox
+??T{\raise#2\hbox{\K@hv#3}}}\hss}}}\endgroup
+~\K@bk\newDiagram{\bgroup\K@ez\K@hw}\def\K@hw#1{\egroup\expandafter\ifx
+~\csname D@every#1@\endcsname\relax\expandafter\expandafter\expandafter\let
+~\expandafter\expandafter\csname D@@#1@@\endcsname\csname#1\endcsname
+~\expandafter\def\csname D@every#1@\endcsname{\expandafter\expandafter
+~\expandafter\let\expandafter\expandafter\csname#1\endcsname\csname
+~D@@#1@@\endcsname}\fi\expandafter\K@bk\csname#1\endcsname{\bgroup\K@bt
+~\csname D@every#1@\endcsname\K@ej\K@ek\K@el\everyDiagram\csname
+~every#1\endcsname\K@ei{#1}}\expandafter\K@bk\csname end#1\endcsname{\K@dz
+~\egroup}\expandafter\let\csname every#1\endcsname\relax}
+??V\def\K@ef{\K@df=-1\relax\K@de=-1\relax\let\K@hx\K@cp\everycr{\noalign
+??V{\global\advance\K@df by 1\relax\ifnum\K@hx<\K@de\xdef\K@hx{\the\K@de}\fi
+??V\global\K@de=-1}}\global\K@dg=0 \global\K@dh=0 \let\K@hy\K@ci\let\K@hz
+??V\K@ci\let\K@ia\K@ci\let\K@ib\K@ci\let\K@ic\K@ci\let\K@id\K@ci\let\K@ie
+??V\K@ci\let\K@if\K@ci\let\K@ig\K@ci\let\K@ih\K@ci\let\K@ii\K@ci\global
+??V\let\K@ij\relax\global\let\K@hn\K@cp\global\let\K@ik\K@ci\K@il\let\\\cr
+??V\let\K@es\K@cp\let\K@et\K@cp\let\K@eu\K@cm\let\K@ev\K@cm\let\K@im\K@cm
+??V\let\K@in\K@ci\K@hg\K@hd\K@he\K@hb\K@gy\let\gr\K@ha}%
+~\def\K@hb{\let\K@io(\let\K@ip\(\catcode`\(=\active\let\K@iq_\let\K@ir
+~\_\catcode`\_=\active\let\K@is^\let\K@it\^\catcode`\^=\active\let\K@iu
+~<\let\K@iv\<\catcode`\<=\active\let\K@iw>\let\K@ix\>\catcode`\>=\active
+~\let\K@iy:\let\K@iz\:\catcode`\:=\active}{\catcode`\(=\active\catcode
+~`\_=\active\catcode`\^=\active\catcode`\<=\active\catcode`\>=\active
+~\catcode`\:=\active\gdef\K@ja{\let(\K@jb\let<\K@jc\let>\K@jd\let_\K@je
+~\let^\K@jf\let:\K@jg\let\((\let\__\let\^^\let\<<\let\>>\let\::} \gdef
+~\K@gy{\let(\K@io\let\(\K@ip\let_\K@iq\let\_\K@ir\let^\K@is\let\^\K@it
+~\let<\K@iu\let\<\K@iv\let>\K@iw\let\>\K@ix\let:\K@iy\let\:\K@iz} \gdef
+~\K@hc{\def(##1,##2){}\let_\K@jh\let^\K@jh\let<\K@jh\let>\K@jh\let:\K@cj
+~\let\((\let\__\let\^^\let\<<\let\>>\let\::} \gdef\K@ji{\let(\K@jj\let
+~_\K@jk\let^\K@jl\let<\K@jm\let>\K@jn\let:\K@jo} }\def\K@jj{(}\def\K@jk
+~{_}\def\K@jl{^}\def\K@jm{<}\def\K@jn{>}\def\K@jo{:}\def\K@jh{\def\K@jp
+~##1{\K@cj}\let\K@jq\K@cj\futurelet\K@jr\K@js}\def\K@hg{\let\K@jt\dh\let
+~\K@ju\dt\let\K@jv\up\let\K@jw\rt\let\K@jx\mv\let\K@jy\nl\let\K@jz\ru
+~\let\K@ka\rr\let\K@kb\rm\let\K@kc\ro\let\K@kd\pt\let\K@ke\fd\let\K@kf
+~\rl\let\K@kg\br\let\K@kh\pp\let\K@ki\jt\let\K@kj\jh\let\K@kk\jn\let
+~\K@kl\rw\let\K@km\hx\let\K@kn\hy\let\K@ko\tx\let\K@kp\ty\let\K@kq\fx
+~\let\K@kr\fy\let\K@ks\ts\let\K@kt\hs\let\K@ku\fs\let\K@kv\tr\let\K@kw
+~\hr\let\K@kx\fr\let\K@ky\db\let\K@kz\lb\let\K@la\rb\let\K@lb\nw\let
+~\K@lc\tl\let\K@ld\hd\let\K@le\pl\let\K@lf\pd\let\K@lg\lw}\def\K@lh{\let
+~\dh\K@li\let\dt\K@lj\let\up\K@lk\let\rt\K@ll\let\mv\K@lm\let\nl\K@ln
+~\let\ru\K@lo\let\rr\K@lp\let\rm\K@lq\let\ro\K@lr\let\pt\K@ls\let\fd
+~\K@lt\let\rl\K@lu\let\br\K@lv\let\pp\K@lw\let\jt\K@lx\let\jh\K@ly\let
+~\jn\K@lz\let\rw\K@ma\let\K@mb\K@mc\let\K@md\K@me\let\hx\K@mf\let\hy
+~\K@mg\let\tx\K@mh\let\ty\K@mi\let\fx\K@mj\let\fy\K@mk\let\ts\K@ml\let
+~\hs\K@mm\let\fs\K@mn\let\tr\K@mo\let\hr\K@mp\let\fr\K@mq\let\db\K@mr
+~\let\lb\K@ms\let\rb\K@mt\let\nw\K@mu\let\lw\K@mv}\def\K@gz{\let\dh\K@jt
+~\let\dt\K@ju\let\up\K@jv\let\rt\K@jw\let\mv\K@jx\let\nl\K@jy\let\ru
+~\K@jz\let\rr\K@ka\let\rm\K@kb\let\ro\K@kc\let\pt\K@kd\let\fd\K@ke\let
+~\rl\K@kf\let\br\K@kg\let\pp\K@kh\let\jt\K@ki\let\jh\K@kj\let\jn\K@kk
+~\let\rw\K@kl\let\K@mb\K@kl\let\K@md\K@kl\let\hx\K@km\let\hy\K@kn\let
+~\tx\K@ko\let\ty\K@kp\let\fx\K@kq\let\fy\K@kr\let\ts\K@ks\let\hs\K@kt
+~\let\fs\K@ku\let\tr\K@kv\let\hr\K@kw\let\fr\K@kx\let\db\K@ky\let\lb
+~\K@kz\let\rb\K@la\let\nw\K@lb\let\tl\K@lc\let\hd\K@ld\let\pl\K@le\let
+~\pd\K@lf\let\lw\K@lg}\def\K@hh{\let\dh\K@cj\let\dt\K@cj\let\up\K@cj\let
+~\rt\K@cj\let\mv\K@cj\let\nl\relax\let\ru\K@cj\let\rr\K@cj\let\rm\K@cj
+~\let\ro\relax\let\pt\K@cj\let\fd\K@cj\let\rl\relax\let\br\relax\let\pp
+~\relax\let\jt\relax\let\jh\relax\let\jn\relax\let\rw\K@cj\let\K@mb
+~\K@cj\let\K@md\K@cj\let\hx\K@cj\let\hy\K@cj\let\tx\K@cj\let\ty\K@cj
+~\let\fx\K@cj\let\fy\K@cj\let\ts\K@cj\let\hs\K@cj\let\fs\K@cj\let\tr
+~\K@cj\let\hr\K@cj\let\fr\K@cj\let\db\relax\let\lb\relax\let\rb\relax
+~\let\nw\relax\let\lw\K@jh}
+??V\def\K@mw#1{\xdef\K@hy{\K@hy{\the\K@de}{#1}}}\def\K@mx#1{\relax\K@di=\K@df
+??V\multiply\K@di by -1 \advance\K@di by \K@ho\xdef\K@hz{{\the\K@di}{#1}\K@hz
+??V}}\def\K@my#1{\xdef\K@ia{\K@ia{\the\K@de}{#1}}}\def\K@mz#1{\relax\K@di
+??V=\K@df\multiply\K@di by -1 \advance\K@di by \K@ho\xdef\K@ib{{\the\K@di
+??V}{#1}\K@ib}}\def\K@na#1{\xdef\K@ic{\K@ic{\the\K@de}{#1}}}\def\K@nb{\xdef
+??V\K@id{\K@id{\the\K@df}{\the\K@de}}}\def\K@nc{\xdef\K@ie{\K@ie{\the\K@df
+??V}{\the\K@de}}}\def\K@nd{\xdef\K@if{\K@if{\the\K@df}{\the\K@de}}}\def\K@ne
+??V{\xdef\K@ig{\K@ig{\the\K@df}{\the\K@de}}}\def\K@nf{\xdef\K@ih{\K@ih{\the
+??V\K@df}{\the\K@de}}}\def\K@ng{\xdef\K@ii{\K@ii{\the\K@df}{\the\K@de}}}\def
+??V\K@nh{\global\let\K@ni\K@co}\def\K@nj{\xdef\K@ij{\the\K@de}}\def\K@nk{\xdef
+??V\K@hn{\the\K@df}}\def\K@nl{\def\grav{\relax\K@nj}\def\base{\relax\K@nk
+??V}}\def\K@nm{\let\K@nj\relax\let\K@nk\relax}\def\K@hd{\let\K@nn\stop\let
+??V\K@no\grav\let\K@np\base\let\K@nq\safe\let\K@nr\nodot\let\K@ns\dx\let
+??V\K@nt\dy\let\K@nu\dl\let\K@nv\dr\let\K@nw\mx\let\K@nx\my\let\K@ny\ml
+??V\let\K@nz\mr\let\K@oa\ax\let\K@ob\al\let\K@oc\ar}\def\K@he{\K@nl\def
+??V\stop{\relax\K@nh}\def\safe{\relax\K@od}\def\nodot{\relax\K@oe}\def\dl
+??V{\relax\K@nb}\def\dr{\relax\K@nc}\def\ml{\relax\K@nd}\def\mr{\relax\K@ne
+??V}\def\al{\relax\K@nf}\def\ar{\relax\K@ng}\def\mx{\relax\K@my}\def\my
+??V{\relax\K@mz}\def\dx{\relax\K@mw}\def\dy{\relax\K@mx}\def\ax{\relax\K@na
+??V}}\def\K@hf{\let\K@nb\relax\let\K@nc\relax\let\K@nd\relax\let\K@ne
+??V\relax\let\K@nf\relax\let\K@ng\relax\let\K@my\K@cj\let\K@mz\K@cj\let
+??V\K@mw\K@cj\let\K@mx\K@cj\let\K@na\K@cj}\def\K@of{\let\stop\K@nn\let\grav
+??V\K@no\let\base\K@np\let\safe\K@nq\let\nodot\K@nr\let\dx\K@ns\let\dy
+??V\K@nt\let\dl\K@nu\let\dr\K@nv\let\mx\K@nw\let\my\K@nx\let\ml\K@ny\let
+??V\mr\K@nz\let\ax\K@oa\let\al\K@ob\let\ar\K@oc}\def\K@od#1{{\K@of#1}}%
+~\def\K@jb#1,#2){\gdef\K@og{#1@#2}}\def\K@jc{\K@oh0}\def\K@jd{\K@oh1}\def
+~\K@je{\K@oh2}\def\K@jf{\K@oh3}\def\K@oh#1{\def\K@jp##1{\let\K@oi\K@cl\let
+~\K@oj\K@cl\let\K@ok\K@cl\K@ol##1;@\K@oi\K@oj\K@ok\edef\K@bc{\noexpand
+~\K@om {#1{\K@oi}{\K@oj}{\K@ok}}}\K@bc} \def\K@jq{\K@om{#1}}\futurelet\K@jr
+~\K@js}\def\K@om#1#2{\K@dr={#1@#2}\K@on}\def\K@oo#1#2{\K@dr={#1@#2}\def\K@bc
+~{\K@op#1{{}}@{#2}\K@on}\ifnum\K@oq=1\relax\else\ifnum\K@oq=5\relax\else
+~\let\K@bc\K@on\fi\fi\K@bc}\def\K@op#1#2#3@#4{\setbox\K@dt\hbox{$\K@gx
+~\labelstyle\hskip\K@or sp\hskip\K@os{\K@ot}{}sp \hskip\K@ou sp \hskip\K@ov
+~{\K@ot}{}sp \hskip\K@ow#4\hskip\K@ow\hskip\K@os{\K@ot}{}sp\hskip\K@or sp
+~\hskip\K@ov{\K@ot}{}sp \hskip\K@ou sp$}\K@di=\wd\K@dt\xdef\K@ox{\K@ox
+~{#2}{\the\K@di}}}\def\K@oy#1{\if\noexpand\K@jr\noexpand#1\let\K@bc\K@oz
+~\else\if\noexpand\K@jr\K@bn\def\K@bc{\K@pa\futurelet\K@jr\K@js @}\else
+~\let\K@bc\K@jq\fi\fi\K@bc}\def\OptDelim#1#2{\def\K@oz#1##1#2{\K@jp
+~{##1}}\def\K@js{\K@oy{#1}}}\OptDelim[] \def\K@on{\edef\K@bc{\global\K@dq
+~={\the\K@dq{\the\K@dr}}}\K@bc}\def\K@jg#1{\K@ol#1;@\K@pb\K@pc\K@pd}\def
+~\K@ol#1;#2@#3#4#5{\def\K@bf{#2}\ifx\K@bf\K@ci\let\K@pe\K@pf\K@pg
+~#1;@#3#4#5\else\let\K@ph\K@pi\let\K@pj\K@pk\K@pl#1;#2@#3#4#5\fi}\def
+~\K@pg#1;#2@#3#4#5{\def\K@bf{#2}\ifx\K@bf\K@ci\def\K@bf{#1,;}\else\edef
+~\K@bf{#1,#2}\fi\expandafter\K@pe\K@bf @#3#4#5}\def\K@pf
+~#1,#2;@#3#4#5{\setbox\K@du=\hbox{\K@do=#1pt}\def\K@bf{#2} \ifdim\wd\K@du
+~>\z@\ifx\K@bf\K@ci\K@pm#1@#5\else\setbox\K@du=\hbox{\K@do=#2pt}\ifdim\wd
+~\K@du>\z@\K@pm#1@#4\K@pm\K@pn#2@#5\else\K@pm#1@#5\xdef#3{\K@pn#2}\fi\fi
+~\else\gdef#3{#1}\ifx\K@bf\K@ci\else\K@pm\K@pn#2@#5\fi\fi}\def\K@pn
+~#1,{#1}\def\K@po#1;{#1}\def\K@pl#1;#2@#3#4#5{\K@pp#1,@#3#4#5\def\K@bf
+~{#2}\ifx\K@bf\K@ci\else\edef\K@bf{\K@po#2}\expandafter\K@pp\K@bf
+~,@#3#4#5\fi}\def\K@pp#1,#2@#3#4#5{\def\K@bf{#2}\ifx\K@bf\K@ci\K@ph
+~#1@#3#5\else\K@pj#1,#2@#4#5\fi}\def\K@pi#1@#2#3{\setbox\K@du=\hbox{\K@do
+~=#1pt}\ifdim\wd\K@du>\z@\K@pm#1@#3\else\gdef#2{#1}\fi}\def\K@pk
+~#1,#2,@#3#4{\K@pm#1@#3\K@pm#2@#4}\def\K@pm#1@#2{\K@do=#1 \K@di=\K@do\xdef
+~#2{\the\K@di}}\let\K@hp\K@cm\def\K@pq#1{\bgroup\edef\endgr{\noexpand\K@pr
+~{\K@hp}\egroup}\K@ps{#1}\K@hp\edef\K@bc{\noexpand\K@pr{\K@hp}}\K@bc}\def
+~\K@ha{\relax\K@pq}\def\K@pt#1{\K@ps{#1}\K@pu\global\let\K@pu\K@pu}\let\gr
+~\K@ha\def\K@ps#1#2{\K@do=1sp \K@do=#1\K@do\ifdim\K@do>1sp \else\ifdim
+~\K@do<\z@\else\def#2{#1}\fi\fi}\def\gray{\gr\K@pv}\let\grey\gray\def
+~\endgray{\endgr}\let\endgrey\endgray\def\white{\gr1}\let\endwhite\endgray
+~\def\black{\gr0}\let\endblack\endgray\def\K@li#1{\let\K@ph\K@pw\let\K@pj
+~\K@px\K@pl#1;@\K@py\K@pz\K@qa}\def\K@mf#1{\gdef\K@pz{#1}}\def\K@mg#1{\K@do
+~=#1 \K@di=\K@do\xdef\K@qa{\the\K@di}}\def\K@lj#1{\let\K@ph\K@pw\let\K@pj
+~\K@px\K@pl#1;@\K@qb\K@qc\K@qd}\def\K@mh#1{\gdef\K@qc{#1}}\def\K@mi#1{\K@do
+~=#1 \K@di=\K@do\xdef\K@qd{\the\K@di}}\def\K@lt#1{\K@li{#1}\K@lj{#1}}\def
+~\K@mj#1{\K@mh{#1}\K@mf{#1}}\def\K@mk#1{\K@mi{#1}\K@mg{#1}}\def\K@ml#1{\gdef
+~\K@qe{#1}}\def\K@mm#1{\gdef\K@qf{#1}}\def\K@mn#1{\K@ml{#1}\K@mm{#1}}\def
+~\K@mo#1{\K@do=#1 \K@di=\K@do\xdef\K@qg{\the\K@di}}\def\K@mp#1{\K@do=#1
+~\K@di=\K@do\xdef\K@qh{\the\K@di}}\def\K@mq#1{\K@mo{#1}\K@mp{#1}}\def\K@px
+~#1,#2@#3#4{\K@do=#2 \K@di=\K@do\xdef#4{\the\K@di}\gdef#3{#1}}\def\K@lk
+~#1{\K@do=#1 \K@di=\K@do\xdef\K@qi{\the\K@di}}\def\K@ll#1{\K@do=#1 \K@di
+~=\K@do\xdef\K@qj{\the\K@di}}\def\K@lm#1{\K@qk#1@}\def\K@qk#1,#2@{\K@ll
+~{#1}\K@lk{#2}}\def\K@lo#1{\K@do=#1 \K@di=\K@do\xdef\K@ql{\the\K@di}}\def
+~\K@lp#1{\K@do=#1 \K@di=\K@do\xdef\K@qm{\the\K@di}}\def\K@lq#1{\K@qn#1@}\def
+~\K@qn#1,#2@{\K@lp{#1}\K@lo{#2}}\def\K@mv{\let\K@jp\K@qo\def\K@jq{\global
+~\let\K@qp\K@ci}\futurelet\K@jr\K@qq}\let\K@qr\relax\K@bg\kuvioldlabels
+~{\K@cz\let\K@qr\K@ci}\def\K@qo#1{\egroup\K@do=#1 \gdef\K@ow{#1}}\def\K@ln
+~{\global\let\K@qs\K@ci}\def\K@lr{\global\let\K@qt\K@cl}\def\K@mr{\global
+~\let\K@qu\K@qv}\def\K@ms{\gdef\K@qu{2}}\def\K@mt{\gdef\K@qu{3}}\let\K@qw
+~\K@cm\let\K@qv\K@co\def\braced{\K@cz\let\K@qw\K@co\let\K@qv\K@cm}\def
+~\loose{\K@cz\let\K@qw\K@cm\let\K@qv\K@co\columndist=0pt}\def\K@mu{\global
+~\let\K@qx\K@ci}\def\K@ma#1{\K@do=#1 \K@di=\K@do\divide\K@di by 2 \xdef\K@qy
+~{=\the\K@di}\def\K@qz{\egroup\K@cj}}\def\K@mc#1{\K@do=#1 \global\K@dr
+~={{#1}}}\def\K@me#1{\K@do=#1 \gdef\K@ra{#1}}\def\K@qz#1{\egroup\K@do=#1
+~\K@di=\K@do\xdef\K@qy{\the\K@di}}\def\K@lu{\global\let\K@rb\K@ci\global\let
+~\K@rc\K@ci\let\K@jp\K@qz\let\K@jq\relax\futurelet\K@jr\K@qq}\def\K@lv
+~{\global\let\K@rc\K@ci\let\K@jp\K@qz\let\K@jq\relax\futurelet\K@jr\K@qq
+~}\def\K@lw{\global\let\K@rd\K@ci}\def\K@lx{\global\let\K@re\K@cl}\def\K@ly
+~{\global\let\K@rf\K@cl}\def\K@lz{\K@lx\K@ly}\let\K@rg\K@cl\def\joined
+~{\K@cz\let\K@rg\K@ci}\def\K@ls#1{\K@ca\K@rh#1,@}\def\K@ri#1{\K@ca\K@rj#1,@}
+??O\begingroup\K@ce\def\K@rh#1,#2@{{\K@ji\K@ed\def\K@bf{#2}\ifx\K@bf\K@ci
+??O\K@rk#1@,@\else\K@rk#1@#2@\fi }}\def\K@rk#1@#2,@{\xdef\K@in{{#1}\K@in
+??O}\xdef\K@rl{{#1@#2}\K@rl}}\def\K@rj#1,#2@{{\K@ji\K@ed\def\K@bf{#2}\ifx
+??O\K@bf\K@ci\ifx\K@in\K@ci\K@rk#1@,@\else\ifx\K@rm\K@ci\edef\K@gl
+??O{#1}\K@dr={\K@rn {\csname D@pt@#1@x\endcsname}{\csname D@pt@#1@y\endcsname
+??O}{\csname D@pt@#1@type\endcsname}}\expandafter\K@ro\K@in{}\ifx\K@gl\relax
+??O\else\K@rk#1@,@\fi\else\K@rk#1@,@\fi\fi\else\K@rk#1@#2@\fi }}\def
+??O\K@ro#1#2{\def\K@bf{#1}\ifx\K@bf\K@gl\the\K@dr\K@dr={}\let\K@gl\relax\fi
+??O\def\K@bf{#2}\ifx\K@bf\K@ci\let\K@bc\relax\else\def\K@bc{\K@ro{#2}}\fi
+??O\K@bc}\def\K@rn#1#2#3{\ifx\K@rp\K@ci\xdef\K@rp{#1,#2}\expandafter\ifx
+??O#3\relax\else\xdef\K@rq{\K@rr{#3}{}}\fi\else\xdef\K@rm
+??O{#1,#2}\expandafter\ifx#3\relax\else\xdef\K@rs{\K@rr{#3}{}}\fi\fi}%
+~\def\K@pr#1{\K@cg{#1 setgray}}\def\K@pw#1@#2#3{\K@do=#1 \K@di=-\K@do\xdef
+~#2{\the\K@di}}
+??V\def\K@eg{\global\advance\K@de by 1\relax\global\let\K@ni\K@cm\let\K@rt
+??V\K@ru}\def\K@eh#1{\K@dr={#1}\edef\K@bc{\gdef\expandafter\noexpand\csname
+??VD@Entry@\the\K@dh @\endcsname{\noexpand\D@\the\K@df @\the\K@de @\the\K@dr
+??V@}}\K@bc\global\advance\K@dh by 1\relax\setbox\K@du=\hbox{\K@hi\K@hf
+??V\K@hc\K@hh\let\gr\K@cj\let\endgr\relax\global\setbox\K@dt=\hbox\bgroup
+??V\K@rv$\vertexstyle\K@gx#1\K@rw}}\def\K@rw{\K@rt\K@di=\wd\K@dt\K@dj=\ht
+??V\K@dt\K@dk=\dp\K@dt {\count8=\K@di\advance\count8 by \K@dj\advance\count8
+??Vby \K@dk\relax\ifnum\count8>0 \K@nh\fi }\ifnum\K@ni=1\relax\expandafter
+??V\xdef\csname D@whd@\the\K@df @\the\K@de @\endcsname{\the\K@di @\the\K@dj
+??V@\the\K@dk @}\xdef\K@ik{\K@ik{\the\K@df}{\the\K@de}}\fi}\def\K@em{\advance
+??V\K@df by -1 \xdef\K@ho{\the\K@df}\let\K@rx\K@cm\let\K@ry\K@ho\let\K@rz
+??V\K@cm\let\K@sa\K@hx\K@sb\let\K@sc\K@sd\K@nm\let\K@nh\relax\K@se\K@sf
+??V\ifx\K@sg\relax\else\xdef\K@sh{\K@hy\K@ic\K@ia\K@hz\K@ib\K@id\K@ie\K@if
+??V\K@ig\K@ih\K@ii}\ifx\K@sh\K@ci {\K@dm=\K@hx\K@dm\K@di=\K@dm\xdef\K@en
+??V{\the\K@di}\K@dn=\K@ho\K@dn\K@di=\K@dn\xdef\K@eo{\the\K@di}}\def\K@bs
+??V\K@si{\K@sj}\fi\fi\K@bs\K@si\K@sk{.}\K@dx{}{{\K@en}{\K@eo}{\K@ho}{\K@hp
+??V}{\K@hn}}\K@hf\let\st@p\relax\K@nm}%
+~\let\K@sk\K@cj
+??V\def\K@sb{\def\K@bc{\K@sl{0}{0}}\expandafter\K@bc\K@ik{}{}}\def\K@sl
+??V#1#2#3#4{\def\K@bf{#3}\ifx\K@bf\K@ci\def\K@bc{\K@sm{#1}{#2}\K@sn\K@sl
+??V{#1}{#2}{}{}}\else\def\K@bc{\K@so{#1}{#2}{#3}{#4}}\fi\ifnum#1>\K@ho
+??V\relax\let\K@bc\relax\fi\K@bc}\def\K@so#1#2#3#4{\def\K@bc{\K@sm
+??V{#1}{#2}\K@sn\K@sl{#1}{#2}{#3}{#4}}\ifnum#1=#3\relax\ifnum#2=#4\relax
+??V\def\K@bc{\K@sn\K@sl{#1}{#2}}\fi\fi\K@bc}\def\K@sn#1#2#3{\ifnum#3<\K@hx
+??V\relax\K@di=#3 \advance\K@di by 1 \edef\K@bc{\noexpand#1{#2}{\the\K@di
+??V}}\else\K@di=#2 \advance\K@di by 1 \edef\K@bc{\noexpand#1{\the\K@di
+??V}{0}}\fi\K@bc}\def\K@sm#1#2{\global\expandafter\let\csname
+??VD@whd@#1@#2@\endcsname\relax}\def\K@se{\K@sp\K@sq0\K@sr\K@ja\K@lh\let
+??V\gr\K@pt\let\endgr\relax\let\D@\K@ss\K@st0\K@dh\K@su}\def\K@sv{\global
+??V\let\K@sw\K@co\global\expandafter\let\csname D@as@1@\endcsname\relax
+??V\global\let\K@sx\K@co\global\expandafter\let\csname D@cs@1@\endcsname
+??V\relax\global\let\K@sy\K@co\global\expandafter\let\csname
+??VD@ws@1@\endcsname\relax\global\let\K@sz\relax}\def\K@ta#1{\global
+??V\expandafter\let\csname D@Bindings@#1@\endcsname\K@ci\K@di=#1\relax\ifnum
+??V#1<\K@hx\advance\K@di by 1 \edef\K@bc{\noexpand\K@ta{\the\K@di}}\else\let
+??V\K@bc\relax\fi\K@bc}\def\K@tb#1{\K@di=#1\relax\ifnum#1<\K@hx\advance
+??V\K@di by 1 \edef\K@bc{\noexpand\K@tc{#1}{\the\K@di}}\K@bc{\expandafter\K@td
+??V\K@cs}\K@ck\K@td\edef\K@bc{\noexpand\K@tb{\the\K@di}}\else\let\K@bc\relax
+??V\fi\K@bc}\def\K@sp{\ifx\K@ij\relax\ifx\K@te\relax\K@di=\K@hx\divide
+??V\K@di by 2 \multiply\K@di by 2 \ifnum\K@di=\K@hx\multiply\K@di by 5 \else
+??V\multiply\K@di by 5 \advance\K@di by 5 \fi\else\K@di=\K@te\multiply\K@di
+??Vby 10 \fi\else\K@di=\K@ij\multiply\K@di by 10 \fi\xdef\K@ij{\the\K@di
+??V}}\def\K@su#1{\edef\K@tf{\expandafter\noexpand\csname D@Entry@\the
+??V#1@\endcsname}\csname D@Entry@\the#1@\endcsname}\def\K@ss#1@#2@#3@{\K@df
+??V=#1\relax\K@de=#2\relax\K@tg#3\K@th}\def\K@eq{\K@gy\K@ec\K@gz\let\gr
+??V\K@ha\K@st\K@im\K@dg\K@ti}\def\K@st#1#2#3{\edef\K@bf{#2{\the#2}}\global
+??V#2=#1 \expandafter\K@tj\K@bf#3}\def\K@tj#1#2#3{\ifnum#1=#2 \let\K@bc\relax
+??V\else\def\K@bc{#3#1\global\advance#1 by 1 \K@tj#1{#2}#3}\fi\K@bc}\def
+??V\K@ti#1{\csname D@Cell@\the#1@\endcsname}\def\K@tk#1{\ifcase#1 \relax\or
+??V\K@tl0{-1}\K@tm\K@tn{-1}0\K@tl01\K@to\K@tp{-1}\K@hx\or\K@tl{-1}{-1}\K@tm
+??V\K@tn00\K@tl11\K@to\K@tp\K@ho\K@hx\or\K@tl{-1}0\K@tm\K@tn0{-1}\K@tl
+??V10\K@to\K@tp\K@ho{-1}\or\K@tl{-1}1\K@tm\K@tn0\K@hx\K@tl1{-1}\K@to\K@tp
+??V\K@ho0\or\K@tl01\K@tm\K@tn{-1}\K@hx\K@tl0{-1}\K@to\K@tp{-1}0\or\K@tl
+??V11\K@tm\K@tn\K@ho\K@hx\K@tl{-1}{-1}\K@to\K@tp00\or\K@tl10\K@tm\K@tn\K@ho
+??V{-1}\K@tl{-1}0\K@to\K@tp0{-1}\or\K@tl1{-1}\K@tm\K@tn\K@ho0\K@tl{-1}1\K@to
+??V\K@tp0\K@hx\fi}\def\K@tl#1#2#3#4#5#6{\K@di=\K@df\K@dj=\K@de\let#3\relax
+??V\K@cu\ifnum\K@di=#5\relax\let\K@bc\K@tq\else\ifnum\K@dj=#6\relax\let
+??V\K@bc\K@tq\else\let\K@bc\K@tr\fi\fi\K@bc{#1}{#2}{#3}{#4}\ifx#3\relax
+??V\K@cv}\def\K@tq#1#2#3#4{\xdef#3{\the\K@di}\xdef#4{\the\K@dj}}\def\K@tr
+??V#1#2#3#4{\advance\K@di by #1\relax\advance\K@dj by #2\relax\K@ts{\the
+??V\K@di}{\the\K@dj}\K@bf\ifx\K@bf\relax\else\xdef#3{\the\K@di}\xdef#4{\the
+??V\K@dj}\fi}%
+~\def\K@tt#1#2#3{\ifx\K@rq\relax\xdef\K@bc{\noexpand\K@sc @\K@tn,\noexpand
+~\K@tu @\K@tm,\noexpand\K@tv @}\K@bc\else\let\K@tu\K@tn\let\K@tv\K@tm\fi
+~\ifnum#1=9 \let\K@tw\K@tx\else\K@ty1\K@qc\K@tz\K@ty1\K@pz\K@ua\ifnum
+~#1=0 \ifx\K@qe\relax\else\K@ub\K@tu by {-1}\K@qe\fi\ifx\K@qg\relax
+~\else\K@ub\K@tv by 1\K@qg\fi\fi\K@di=\K@qc\advance\K@di by \K@tu\edef
+~\K@tu{\the\K@di}\K@di=\K@qd\advance\K@di by \K@tv\edef\K@tv{\the\K@di}\ifx
+~\K@rs\relax\edef\K@bc{\noexpand\K@sc @\K@tp,\noexpand\K@uc @\K@to
+~,\noexpand\K@ud @}\K@bc\else\let\K@uc\K@tp\let\K@ud\K@to\fi\ifnum#1=0
+~\ifx\K@qf\relax\else\K@ub\K@uc by {-1}\K@qf\fi\ifx\K@qh\relax\else
+~\K@ub\K@ud by 1\K@qh\fi\fi\K@di=\K@pz\advance\K@di by \K@uc\edef\K@uc
+~{\the\K@di}\K@di=\K@qa\advance\K@di by \K@ud\edef\K@ud{\the\K@di}\K@ue
+~\ifnum\K@uf=0 \K@di=\K@ug\relax\ifnum\K@di<0 \multiply\K@di by -1 \fi\edef
+~\K@tw{\the\K@di}\else\ifnum\K@ug=0 \K@di=\K@uf\relax\ifnum\K@di<0
+~\multiply\K@di by -1 \fi\edef\K@tw{\the\K@di}\else\K@uh\fi\fi\fi
+~\ifnum\K@tw>0 \K@ui{#1}{#2}{#3}\fi}\def\K@ue{\K@di=\K@uc\multiply\K@di by
+~-1 \advance\K@di by \K@tu\multiply\K@di by -1 \edef\K@ug{\the\K@di}\K@di
+~=\K@ud\multiply\K@di by -1 \advance\K@di by \K@tv\multiply\K@di by -1 \edef
+~\K@uf{\the\K@di}}\def\K@ui#1#2#3{\ifnum#1=0 \K@uj{#1}\K@oq\else\def\K@oq
+~{#1}\fi {\ifnum#1=0 \ifx\K@tz\K@ci\let\K@tz\K@cm\let\K@uk\K@cm\let\K@ul
+~\K@cm\fi\K@um\K@tu\K@tv\K@tz\K@uk\K@ul\ifx\K@ua\K@ci\let\K@ua\K@cm\let
+~\K@un\K@cm\let\K@uo\K@cm\fi\K@um\K@uc\K@ud\K@ua\K@un\K@uo\fi\K@up\K@oq
+~}\K@uq#1{#2}\ifx\K@rl\K@ci\else\K@ur{#1}#2\fi\ifnum\K@us<\K@ut\relax
+~\else\ifx\K@pu\K@ci\else\edef\K@pu{\noexpand\K@pr{\K@pu}}\fi\K@uu
+~{#1}{#2}{#3}\fi}\def\K@uu#1#2#3{\ifnum#1=9 \K@uv{#1}{#2}{#3}\else\K@uw
+~{#1}{#2}{#3}\fi\ifx\K@rb\relax\def\K@gl{#3}\ifx\K@gl\K@ci\else\ifx
+~\K@qt\K@ux\def\K@uy{\K@bz\K@uz}\else\let\K@uy\K@va\fi\K@vb
+~{#1}{#2}#3{}\fi\fi}
+??S\begingroup\K@ce\def\K@uv#1#2#3{\K@di=\K@tu\advance\K@di by \K@qj\edef
+??S\K@vc{\the\K@di}\K@di=\K@tv\advance\K@di by \K@qi\edef\K@vd{\the\K@di
+??S}\K@um\K@vc\K@vd000\ifx\K@qs\relax {\dimen0=\K@tw sp \K@dx{}{{}{0}{\dimen
+??S0=\K@tw sp}}\edef\K@bc##1{\noexpand\K@ve1@\K@vc sp,\K@vd sp@{\noexpand\K@hv
+??S0{\noexpand\K@vf\noexpand\K@vg{\K@vh}\hskip\K@qm sp\raise\K@ql sp
+??S\noexpand\K@hv2{##1}\noexpand\K@vi}}}\ifx\K@rc\K@ci\K@bc{\K@pr{1}\K@hv
+??S0{\hskip\K@qb sp \lower\K@vj\hbox{$\vcenter{ \hbox{\vrule width \K@us sp
+??Sheight \K@qy sp depth \K@qy sp}}$}\hskip\K@py sp}\hskip\K@vk\dimen0}\fi
+??S\ifx\K@rb\relax\K@dr={\K@vl#2}\K@bc{\K@pu\K@hv0{\hskip\K@qb sp \the\K@dr
+??S{\K@us sp}\hskip\K@py sp}\hskip\K@vk\dimen0}\fi }\fi}%
+~\def\K@uw#1#2#3{\K@di=\K@tu\advance\K@di by \K@uc\divide\K@di by 2 \advance
+~\K@di by \K@qj\edef\K@vc{\the\K@di}\K@di=\K@tv\advance\K@di by \K@ud
+~\divide\K@di by 2 \advance\K@di by \K@qi\edef\K@vd{\the\K@di}\ifx\K@qs
+~\relax\edef\K@bc##1{\noexpand\K@ve1@\K@vc sp,\K@vd sp@{\noexpand\K@hv
+~0{\noexpand\K@vf\noexpand\K@vm{\K@uf}{\K@ug}\hskip\K@qm sp\raise\K@ql sp
+~\noexpand\K@hv1{##1}\noexpand\K@vi}}}\ifx\K@rc\K@ci\K@bc{\K@pr{1}\hbox
+~{\hskip\K@qb sp \lower\K@vj\hbox{$\vcenter{ \hbox{\vrule width \K@us sp
+~height \K@qy sp depth \K@qy sp}}$}\hskip\K@py sp}}\fi\ifx\K@rb\relax\K@dr
+~={\K@vl#2}\K@bc{\K@pu\hbox{\hskip\K@qb sp \the\K@dr{\K@us sp}\hskip\K@py
+~sp}}\fi\fi}\def\K@vb#1#2#3{\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\relax
+~\else\def\K@bc{\K@uy{#1}{#2}#3@\K@vb{#1}{#2}}\fi\K@bc}
+??O\def\K@ur#1#2#3{\edef\K@gl{\K@vn{#2}}\def\K@bf{\K@vo{#1}{#2}}\expandafter
+??O\K@bf\K@rl{}}\def\K@vo#1#2#3#4{\K@vp{#1}{#2}#3@\def\K@bf{#4}\ifx\K@bf\K@ci
+??O\let\K@bc\relax\else\def\K@bc{\K@vo{#1}{#2}{#4}}\fi\K@bc}\def\K@vp
+??O#1#2#3@#4@{{\K@ji\K@ed\ifnum#1=9 \global\expandafter\let\csname
+??OD@pt@#3@x\endcsname\K@tn\global\expandafter\let\csname D@pt@#3@y\endcsname
+??O\K@tm\global\expandafter\let\csname D@pt@#3@type\endcsname\relax\else
+??O\def\K@bf{#4}\ifx\K@bf\K@ci\else\let\K@gl\K@bf\fi\K@di=\K@qb\advance\K@di
+??Oby \K@qm\relax\K@vq\K@tu\K@ug\K@vq\K@tv\K@uf\K@di=\K@py\multiply\K@di
+??Oby -1 \advance\K@di by \K@qm\relax\K@vq\K@uc\K@ug\K@vq\K@ud\K@uf\K@do
+??O=\K@tu sp \multiply\K@do by -1 \advance\K@do by \K@uc sp \K@do=\K@gl\K@do
+??O\K@di=\K@do\advance\K@di by \K@tu\advance\K@di by \K@qj\relax\K@vr\K@dj
+??O=\K@ql\times\K@uf\over{-\K@tw}\advance\K@di by \K@dj\expandafter\xdef
+??O\csname D@pt@#3@x\endcsname{\the\K@di}\K@do=\K@tv sp \multiply\K@do by -1
+??O\advance\K@do by \K@ud sp \K@do=\K@gl\K@do\K@di=\K@do\advance\K@di by
+??O\K@tv\advance\K@di by \K@qi\relax\K@vr\K@dj=\K@ql\times\K@ug\over\K@tw
+??O\advance\K@di by \K@dj\expandafter\xdef\csname D@pt@#3@y\endcsname{\the
+??O\K@di}\expandafter\gdef\csname D@pt@#3@type\endcsname{#2}\fi }}%
+~\def\K@vq#1#2{\K@dk=\K@tw\relax\K@vs\K@dj=\K@di\times#2\over\K@dk\advance
+~\K@dj by #1 \edef#1{\the\K@dj}}\def\K@vr#1=#2\times#3\over#4{\K@dk=#2 \K@dl
+~=#4\relax\K@vs#1=\K@dk\times#3\over\K@dl}\let\K@ux\K@cl\def\rotatedlabels
+~{\let\K@ux\K@ci}\def\K@va#1#2#3#4@#5@{{\def\K@bf{#4}\ifx\K@bf\K@ci\else
+~\K@vt#4\fi\K@vu{#1}{#2}\let\K@vv\K@co\K@vw{#3}\multiply\K@dp by \K@vv
+~\advance\K@dp by \K@ql sp \edef\K@bc##1{\noexpand\K@vx @\K@vc sp,\K@vd
+~sp@{##1}{\the\K@do}{\the\K@dp}}\K@bc{\K@vy{$\labelstyle#5$}}}}\def\K@vt
+~#1#2#3{\def\K@bf{#1}\ifx\K@bf\K@cl\else\def\K@pb{#1}\fi\def\K@bf{#2}\ifx
+~\K@bf\K@cl\else\def\K@pc{#2}\fi\def\K@bf{#3}\ifx\K@bf\K@cl\else\def\K@pd
+~{#3}\fi}
+??P\begingroup\K@ce\def\K@uz#1#2#3#4@#5@{{\def\K@bf{#4}\ifx\K@bf\K@ci\else
+??P\K@vt#4\fi\K@vu{#1}{#2}\let\K@vv\K@co\let\K@vz\K@wa\K@vw{#3}\multiply
+??P\K@dp by \K@vv\advance\K@dp by \K@ql sp \edef\K@bc##1{\noexpand\K@vx
+??P@\K@vc sp,\K@vd sp@{##1}{\the\K@do}{\the\K@dp}}\K@bc{\K@vy{$\labelstyle#5$}}}}%
+~\def\K@vu#1#2{\def\K@wb{\K@wc}\edef\K@vx{\noexpand\K@wd{\K@uf}{\K@ug}}\edef
+~\K@vw{\noexpand\K@vz{\K@oq}}\K@do=\K@us sp \K@do=\K@pb\K@do\advance\K@do
+~by \K@pc sp \advance\K@do by \K@qb sp \advance\K@do by \K@qm sp \K@dp=\K@tw
+~sp \advance\K@do by -.5\K@dp\K@dp=\K@or sp \advance\K@dp by \K@os#2sp
+~\advance\K@dp by \K@pd sp}
+??S\def\K@vu#1#2{\ifnum#1=9 \def\K@wb{\K@we}\edef\K@vx{\noexpand\K@wf\K@vh
+??S}\edef\K@vw{\noexpand\K@wg{\K@vh}}\K@do=\K@us sp \K@do=\K@pb\K@do
+??S\advance\K@do by \K@pc sp \advance\K@do by \K@qb sp \advance\K@do by \K@qm
+??Ssp \K@dp=-\K@tw sp \advance\K@do by \K@vk\K@dp\K@dp=\K@or sp \advance\K@dp
+??Sby \K@os#2sp \advance\K@dp by \K@pd sp \else\def\K@wb{\K@wc}\edef\K@vx
+??S{\noexpand\K@wd{\K@uf}{\K@ug}}\edef\K@vw{\noexpand\K@vz{\K@oq}}\K@do=\K@us
+??Ssp \K@do=\K@pb\K@do\advance\K@do by \K@pc sp \advance\K@do by \K@qb sp
+??S\advance\K@do by \K@qm sp \K@dp=\K@tw sp \advance\K@do by -.5\K@dp\K@dp
+??S=\K@or sp \advance\K@dp by \K@os#2sp \advance\K@dp by \K@pd sp \fi}\def
+??S\K@wf#1@#2,#3@#4#5#6{\K@dr={#4}\K@dx{}{{}{0}{\let\noexpand\K@vy\expandafter
+??S\noexpand\K@vy\noexpand\K@gx}}\K@ve0@#2,#3@{\K@vf\K@wh{#1}\hskip#5 \raise
+??S#6 \hbox{\K@wb{#1}{}\the\K@dr}\K@vi}}%
+~\def\K@gx{\K@gy\K@gz\K@ec\let\gr\K@ha}\def\K@wh#1{\edef\K@bc{\noexpand\K@vg
+~{#1}}\K@bc}\def\K@we#1#2{\K@di=#1 \multiply\K@di by -1 \edef\K@bc
+~{\noexpand\K@vg{\the\K@di}}\K@bc}\def\K@wd#1#2@#3,#4@#5#6#7{\K@dr={#5}\K@dx
+~{}{{}{0}{\let\noexpand\K@vy\expandafter\noexpand\K@vy\noexpand\K@gx}}\K@ve
+~0@#3,#4@{\K@vf\K@wi{#1}{#2}\hskip#6 \raise#7 \hbox{\K@wb{#1}{#2}\the\K@dr
+~}\K@vi}}\def\K@wi#1#2{\edef\K@bc{\noexpand\K@vm{#1}{#2}}\K@bc}\def\K@wc
+~#1#2{\K@di=#1 \multiply\K@di by -1 \edef\K@bc{\noexpand\K@vm{\the\K@di
+~}{#2}}\K@bc}\def\K@uq#1#2{\ifnum#1=9 \relax\else\ifnum#1=0 \K@wj\K@qb
+~\K@re\K@tz\K@rq\K@wk{#2}\K@wj\K@py\K@rf\K@ua\K@rs\K@wl{#2}\else\K@wm\K@qb
+~\K@re\K@wk{#2}\K@wm\K@py\K@rf\K@wl{#2}\fi\fi\K@di=\K@qb\advance\K@di by
+~\K@py\multiply\K@di by -1 \advance\K@di by \K@tw\edef\K@us{\the\K@di
+~}}\def\K@wj#1#2#3#4#5#6{\K@di=#1\relax\ifx#2\K@rg\advance\K@di by \K@wn
+~\advance\K@di by \K@wo#6\else\ifx#3\K@ci\else\advance\K@di by #5\relax
+~\advance\K@di by \K@wp\advance\K@di by \K@wq#6\fi\fi\edef#1{\the\K@di}}
+??O\def\K@wj#1#2#3#4#5#6{\K@di=#1\relax\ifx#2\K@rg\advance\K@di by \K@wn
+??O\advance\K@di by \K@wo#6\else\ifx#3\K@ci\ifx#4\relax\else\advance\K@di
+??Oby \K@wr\advance\K@di by \K@ws#6\advance\K@di by #4\relax\advance\K@di
+??Oby \K@wt\fi\else\advance\K@di by #5\relax\advance\K@di by \K@wp
+??O\advance\K@di by \K@wq#6\fi\fi\edef#1{\the\K@di}}%
+~\def\K@wm#1#2#3#4{\K@di=#1\relax\ifx#2\K@rg\advance\K@di by \K@wn
+~\advance\K@di by \K@wo#4\else\advance\K@di by #3\relax\advance\K@di by
+~\K@wp\advance\K@di by \K@wq#4\fi\edef#1{\the\K@di}}
+??S\def\K@wg#1#2{\K@wu\K@di=#1\mod{360}\edef\K@vh{\the\K@di}\ifnum\K@di=0 \def
+??S\K@gl{{1}}\else\ifnum\K@di=90 \def\K@gl{{7}}\else\ifnum\K@di=180 \def
+??S\K@gl{{5}}\else\ifnum\K@di=270 \def\K@gl{{3}}\else\divide\K@di by 90
+??S\ifcase\K@di\def\K@gl{{8}}\or\def\K@gl{{6}}\or\def\K@gl{{4}}\or\def
+??S\K@gl{{2}}\fi\fi\fi\fi\fi\expandafter\K@vz\K@gl{#2}}%
+~\def\K@vz#1#2{\ifcase#1 \relax\or\let\K@bc\K@wv\or\let\K@bc\K@ww\or
+~\let\K@bc\K@wx\or\let\K@bc\K@wy\or\let\K@bc\K@wz\or\let\K@bc\K@xa\or
+~\let\K@bc\K@xb\or\let\K@bc\K@xc\fi\K@bc{#2}}\def\K@wv#1{\ifcase#1
+~\K@cf\K@vy\K@xd\or\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xe\let
+~\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\def\K@ww#1{\ifcase#1 \K@cf\K@vy\K@xf
+~\let\K@vv\K@cp\or\K@cf\K@vy\K@xg\or\K@cf\K@vy\K@xf\let\K@vv\K@cp\or
+~\K@cf\K@vy\K@xg\fi}\def\K@wx#1{\ifcase#1 \K@cf\K@vy\K@xh\let\K@vv\K@cp
+~\or\K@cf\K@vy\K@xi\or\K@cf\K@vy\K@xh\let\K@vv\K@cp\or\K@cf\K@vy\K@xi
+~\fi}\def\K@wy#1{\ifcase#1 \K@cf\K@vy\K@xj\let\K@vv\K@cp\or\K@cf\K@vy
+~\K@xk\or\K@cf\K@vy\K@xk\or\K@cf\K@vy\K@xj\let\K@vv\K@cp\fi}\def\K@wz
+~#1{\ifcase#1 \K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\or\K@cf
+~\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xa#1{\ifcase#1
+~\K@cf\K@vy\K@xf\or\K@cf\K@vy\K@xg\let\K@vv\K@cp\or\K@cf\K@vy\K@xf\or
+~\K@cf\K@vy\K@xg\let\K@vv\K@cp\fi}\def\K@xb#1{\ifcase#1 \K@cf\K@vy\K@xh
+~\or\K@cf\K@vy\K@xi\let\K@vv\K@cp\or\K@cf\K@vy\K@xi\let\K@vv\K@cp\or
+~\K@cf\K@vy\K@xh\fi}\def\K@xc#1{\ifcase#1 \K@cf\K@vy\K@xj\or\K@cf\K@vy
+~\K@xk\let\K@vv\K@cp\or\K@cf\K@vy\K@xk\let\K@vv\K@cp\or\K@cf\K@vy\K@xj
+~\fi}\def\K@xh#1{\K@hv2{\lower\K@vj\hbox{#1}}}\def\K@xj#1{\K@hv2{\vbox
+~{\offinterlineskip\hbox{#1}\null}}}\def\K@xd#1{\K@hv1{\vbox
+~{\offinterlineskip\hbox{#1}\null}}}\def\K@xg#1{\K@hv0{\vbox
+~{\offinterlineskip\hbox{#1}\null}}}\def\K@xi#1{\K@hv0{\lower\K@vj\hbox
+~{#1}}}\def\K@xk#1{\K@hv0{\vtop{\offinterlineskip\null\hbox{#1}}}}\def\K@xe
+~#1{\K@hv1{\vtop{\offinterlineskip\null\hbox{#1}}}}\def\K@xf#1{\K@hv2{\vtop
+~{\offinterlineskip\null\hbox{#1}}}}\def\K@xl#1#2{\K@vg{180}}
+??P\def\K@wa#1#2{\ifcase#1 \relax\or\let\K@bc\K@xm\or\let\K@bc\K@xn\or
+??P\let\K@bc\K@xo\or\let\K@bc\K@xp\or\let\K@bc\K@xq\or\let\K@bc\K@xr\or
+??P\let\K@bc\K@xs\or\let\K@bc\K@xt\fi\K@bc{#2}}\def\K@xm#1{\let\K@wb\K@ck
+??P\ifcase#1 \K@cf\K@vy\K@xd\or\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf
+??P\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\def\K@xn#1{\let\K@wb
+??P\K@ck\ifcase#1 \K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\or
+??P\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\def\K@xo#1{\K@cf
+??P\K@vy\K@xd\ifcase#1 \let\K@vv\K@cp\let\K@wb\K@xl\or\let\K@wb\K@ck\or
+??P\let\K@vv\K@cp\let\K@wb\K@xl\or\let\K@wb\K@ck\fi}\def\K@xp#1{\let\K@wb
+??P\K@xl\ifcase#1 \K@cf\K@vy\K@xd\let\K@vv\K@cp\or\K@cf\K@vy\K@xe\or
+??P\K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xq#1{\let
+??P\K@wb\K@xl\ifcase#1 \K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\or
+??P\K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xr#1{\let
+??P\K@wb\K@xl\ifcase#1 \K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\or
+??P\K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xs#1{\K@cf
+??P\K@vy\K@xd\ifcase#1 \let\K@wb\K@ck\or\let\K@vv\K@cp\let\K@wb\K@xl\or
+??P\let\K@vv\K@cp\let\K@wb\K@xl\or\let\K@wb\K@ck\fi}\def\K@xt#1{\let\K@wb
+??P\K@ck\ifcase#1 \K@cf\K@vy\K@xd\or\K@cf\K@vy\K@xe\let\K@vv\K@cp\or
+??P\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\endgroup
+~\def\K@cf#1#2{\def#1{#2}}\def\K@uj#1#2{\ifnum\K@uf>0 \ifnum\K@ug>0 \def
+~#2{8}\else\ifnum\K@ug=0 \def#2{7}\else\def#2{6}\fi\fi\else\ifnum\K@uf
+~=0 \ifnum\K@ug>0 \def#2{1}\else\ifnum\K@ug=0 \relax\else\def#2{5}\fi\fi
+~\else\ifnum\K@ug>0 \def#2{2}\else\ifnum\K@ug=0 \def#2{3}\else\def
+~#2{4}\fi\fi\fi\fi}\def\K@xu#1#2#3#4{\ifx#1\K@rg\let#2\K@ck\fi\ifx
+~#3\K@rg\let#4\K@ck\fi}\def\K@up#1{\global\let\K@wk\K@cm\global\let\K@wl
+~\K@cm\K@di=\K@uf\relax\ifnum\K@di<0 \multiply\K@di by -1 \fi\K@dj=\K@ug
+~\relax\ifnum\K@dj<0 \multiply\K@dj by -1 \fi\ifcase#1 \let\K@bc\relax\or
+~\K@xv\K@bc\or\K@xw\K@bc\or\K@xx\K@bc\or\K@xy\K@bc\or\K@xz\K@bc\or
+~\K@ya\K@bc\or\K@yb\K@bc\or\K@yc\K@bc\fi\K@bc}\def\K@xv#1{\K@xu\K@re
+~\K@yd\K@rf\K@ye\def#1{\K@yd1\K@wk\K@ye1\K@wl}}\def\K@xw#1{\K@xu\K@re\K@yd
+~\K@rf\K@ye\def#1{\K@yd2\K@wk\K@ye2\K@wl}}\def\K@xx#1{\K@xu\K@re\K@yd\K@rf
+~\K@ye\def#1{\K@yd3\K@wk\K@ye3\K@wl}}\def\K@xy#1{\K@xu\K@re\K@yd\K@rf\K@ye
+~\def#1{\K@yd4\K@wk\K@ye4\K@wl}}\def\K@xz#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd1\K@wl\K@ye1\K@wk}}\def\K@ya#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd2\K@wl\K@ye2\K@wk}}\def\K@yb#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd3\K@wl\K@ye3\K@wk}}\def\K@yc#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd4\K@wl\K@ye4\K@wk}}\def\K@yd#1#2{\ifcase#1 \relax\or
+~\K@yf{#2}\or\K@yg{#2}\or\K@yh{#2}\or\K@yi{#2}\fi}\def\K@yf#1{\K@dk=\K@tz
+~\advance\K@dk by \K@uk\advance\K@dk by \K@ul\relax\ifnum\K@dk>0 \K@dk
+~=\K@tz\divide\K@dk by -2 \advance\K@dk by \K@qc\multiply\K@dk by -1 \K@vs
+~\K@dl=\K@dk\times\K@tw\over\K@dj\xdef#1{\the\K@dl}\fi}\def\K@yg#1{\K@dk
+~=\K@tz\advance\K@dk by \K@uk\advance\K@dk by \K@ul\relax\ifnum\K@dk>0
+~\K@dk=\K@ul\advance\K@dk by \K@vj\advance\K@dk by \K@qd\K@dl=\K@tz\divide
+~\K@dl by -2 \advance\K@dl by \K@qc\multiply\K@dl by -1 \K@yj#1\fi}\def\K@yh
+~#1{\K@dk=\K@tz\advance\K@dk by \K@uk\advance\K@dk by \K@ul\relax\ifnum
+~\K@dk>0 \K@dk=\K@vj\advance\K@dk by \K@ul\relax\K@vs\K@dl=\K@dk\times\K@tw
+~\over\K@di\xdef#1{\the\K@dl}\fi}\def\K@yi#1{\K@dk=\K@tz\advance\K@dk by
+~\K@uk\advance\K@dk by \K@ul\relax\ifnum\K@dk>0 \K@dk=\K@ul\advance\K@dk
+~by \K@vj\advance\K@dk by \K@qd\K@dl=\K@tz\divide\K@dl by 2 \advance\K@dl
+~by \K@qc\relax\K@yj#1\fi}\def\K@ye#1#2{\ifcase#1 \relax\or\K@yk{#2}\or
+~\K@yl{#2}\or\K@ym{#2}\or\K@yn{#2}\fi}\def\K@yk#1{\K@dk=\K@ua\advance
+~\K@dk by \K@un\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk=\K@ua
+~\divide\K@dk by 2 \advance\K@dk by \K@pz\relax\K@vs\K@dl=\K@dk\times\K@tw
+~\over\K@dj\xdef#1{\the\K@dl}\fi}\def\K@yl#1{\K@dk=\K@ua\advance\K@dk by
+~\K@un\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk=\K@vj\advance\K@dk
+~by -\K@un\advance\K@dk by \K@qa\multiply\K@dk by -1 \K@dl=\K@ua\divide
+~\K@dl by 2 \advance\K@dl by \K@pz\relax\K@yj#1\fi}\def\K@ym#1{\K@dk=\K@ua
+~\advance\K@dk by \K@un\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk
+~=-\K@vj\advance\K@dk by \K@un\relax\K@vs\K@dl=\K@dk\times\K@tw\over\K@di
+~\xdef#1{\the\K@dl}\fi}\def\K@yn#1{\K@dk=\K@ua\advance\K@dk by \K@un
+~\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk=\K@vj\advance\K@dk by
+~-\K@un\advance\K@dk by \K@qa\multiply\K@dk by -1 \K@dl=\K@ua\divide\K@dl
+~by -2 \advance\K@dl by \K@pz\multiply\K@dl by -1 \K@yj#1\fi}\def\K@yj
+~#1{\ifnum\K@dk=0 \ifnum\K@dl<0 \K@vs\K@dk=\K@dl\times\K@tw\over\K@dj\xdef
+~#1{\the\K@dk}\else\global\let#1\K@cm\fi\else\ifnum\K@dl=0 \ifnum\K@dk
+~<0 \K@vs\K@dl=\K@dk\times\K@tw\over\K@di\xdef#1{\the\K@dl}\else\global
+~\let#1\K@cm\fi\else\ifnum\K@dk<0 \ifnum\K@dl<0 \K@yo#1\else\K@vs\K@dl
+~=\K@dk\times\K@tw\over\K@di\xdef#1{\the\K@dl}\fi\else\ifnum\K@dl<0 \K@vs
+~\K@dk=\K@dl\times\K@tw\over\K@dj\xdef#1{\the\K@dk}\else\K@yo#1\fi\fi\fi
+~\fi}\def\K@yo#1{\K@do=\K@di sp \divide\K@do by \K@dk\K@dp=\K@dj sp
+~\divide\K@dp by \K@dl\ifdim\K@do=\K@dp\K@vs\K@dh=\K@dk\times\K@tw\over
+~\K@di\K@vs\K@dg=\K@dl\times\K@tw\over\K@dj\ifnum\K@dh<\K@dg\xdef#1{\the
+~\K@dh}\else\xdef#1{\the\K@dg}\fi\else\ifdim\K@dp<\K@do\K@vs\K@dl=\K@dk
+~\times\K@tw\over\K@di\xdef#1{\the\K@dl}\else\K@vs\K@dk=\K@dl\times\K@tw
+~\over\K@dj\xdef#1{\the\K@dk}\fi\fi}
+??V\def\K@er{\K@hc\K@hh\K@ee\let\gr\K@cj\let\endgr\relax\K@hi\let\D@\K@yp
+??V\K@st0\K@dh\K@yq\K@yr}%
+~\def\K@hi{\def\K@ys##1##2{\K@rt\let\K@rt\relax}\def\K@yt##1##2{\K@rt\let
+~\K@rt\relax}\def\K@yu##1##2{\K@rt\let\K@rt\relax}\def\K@yv##1{\K@rt\let
+~\K@rt\relax}}
+??V\def\K@yq#1{\csname D@Entry@\the#1@\endcsname}\def\K@eb{\K@em\let\K@ec
+??V\K@yw\let\K@ed\K@yx\let\K@ee\K@yy\def\K@um{\K@yz}\let\K@dz\K@za\let
+??V\K@rt\egroup\global\setbox\K@ds=\hbox\bgroup\hbox to \K@en sp{\hfil\vbox
+??Vto \K@eo sp{\vfil}}\K@ep\K@eq\K@er\let\gr\K@pt\let\endgr\relax\K@lh
+??V\K@ja\K@zb\K@zc\K@zd\let\\\relax\setbox\K@du=\hbox\bgroup}%
+??Q\begingroup\K@ce\def\K@zd{\let\hd\K@ze\let\pd\K@zf\let\tl\K@zg\let\pl
+??Q\K@zh\let\pt\K@ri\def\Text{\K@bx\K@zi}\def\Txt{\K@bx\K@zj}\def\Math{\K@bx
+??Q\K@zk}\def\Label{\K@bx\K@zl}\def\Vertex{\K@bx\K@zm}\def\Pt{\K@ca\K@zn}\def
+??Q\Dot{\K@bx\K@zo}\def\Box{\K@cb\K@zp}\def\Frame{\K@cb\K@zq}}%
+~\def\K@ze#1{\gdef\K@zr{\K@dr={#1}}}\def\K@zg#1{\gdef\K@zs{\K@dr={#1}}}\def
+~\K@zf#1{\hd{\phantom{#1}}}\def\K@zh#1{\tl{\phantom{#1}}}
+??V\def\K@za{\K@rt\egroup\K@dx{}{{}{1}{\gdef\noexpand\K@es{\K@es}\gdef
+??V\noexpand\K@et{\K@et}\gdef\noexpand\K@eu{\K@eu}\gdef\noexpand\K@ev{\K@ev
+??V}}}\K@ew\K@ex\K@ey\egroup\Displaybox\K@ds}%
+??X\begingroup\K@ce\def\K@zt{$\egroup\null\egroup\K@di=\wd\K@ds\xdef\K@en
+??X{\the\K@di}\K@dj=\ht\K@ds\xdef\K@eo{\the\K@dj}\K@dx{}{{\K@en}{\K@eo
+??X}{}{\K@hp}}\let\K@gi\K@zu\K@zv}\def\K@zw{\K@di=\K@en\relax\K@dj=\K@eo
+??X\relax\K@zv}\def\K@zv{\ifx\K@zx\K@ci\K@dm=\K@di sp \divide\K@dm by \K@zy
+??X\let\K@hx\K@zy\else\K@dm=\K@zx\divide\K@di by \K@dm\edef\K@hx{\the\K@di
+??X}\fi\let\K@rz\K@cm\let\K@sa\K@hx\ifx\K@zz\K@ci\K@dn=\K@dj sp \divide
+??X\K@dn by \K@Aa\let\K@ho\K@Aa\else\K@dn=\K@zz\divide\K@dj by \K@dm\edef
+??X\K@ho{\the\K@dj}\fi\let\K@rx\K@cm\let\K@ry\K@ho\let\K@sc\K@Ab\let\K@in
+??X\K@ci\let\K@ec\K@yw\let\K@ed\K@yx\let\K@ee\K@yy\let\K@rt\egroup\global
+??X\setbox\K@ds=\hbox\bgroup\hbox to \K@en sp{\vbox to \K@eo sp{\vss}\hss
+??X}\K@Ac\K@ep{\llap{\box\K@ds}\K@Ad{\K@gm\K@dr}{{0pt}{0pt}{0{\the\K@dr
+??X}}}}\K@Ae\let\gr\K@pt\let\endgr\relax\K@hg\K@lh\K@hb\K@ja\K@zb\K@zc
+??X\K@zd\K@Af\setbox\K@du=\hbox\bgroup}\def\K@zu{\K@rt\egroup\K@ew\K@ex
+??X\K@hr\egroup\Displaybox\K@ds}%
+??Q\def\K@zb{\let\K@Ag/\let\K@Ah\/\catcode`\/=\active\let\K@Ai|\let\K@Aj
+??Q\|\catcode`\|=\active\let\K@Ak*\let\K@Al\*\catcode`\*=\active}{\catcode
+??Q`\/=\active\catcode`\|=\active\catcode`\*=\active\catcode`\(=\active
+??Q\gdef\K@zc{\let(\K@Am\let/\K@An\let|\K@Ao\let*\K@Ap\let\((\let\//\let
+??Q\||\let\**}\gdef\K@yw{\let/\K@Ag\let\/\K@Ah\let|\K@Ai\let\|\K@Aj\let
+??Q*\K@Ak\let\*\K@Al}\gdef\K@yy{\let/\K@cj\let|\K@cj\let*\K@cj\let\//\let
+??Q\||\let\**}\gdef\K@yx{\let/\K@Aq\let|\K@Ar\let*\K@As}}\def\K@Aq{/}\def
+??Q\K@Ar{|}\def\K@As{*}\def\K@Am#1,#2){\ifx\K@rp\K@ci\xdef\K@rp{#1,#2}\else
+??Q\ifx\K@rm\K@ci\xdef\K@rm{#1,#2}\fi\fi}\def\K@An#1{\edef\K@bf{\K@At
+??Q#1.@}\ifx\K@bf\K@ci\else\global\let\K@vh\K@bf\fi}\def\K@Ao#1{\K@do=#1
+??Q\K@di=\K@do\xdef\K@tx{\the\K@di}}\def\K@Ap#1{\gdef\K@vk{#1}}%
+~\def\K@At#1.#2@{#1}\def\K@ex#1{#1\K@ds\K@Au\K@ds\K@Av\K@ds\K@Aw\K@ds
+~\K@Ax\K@ds}
+??V\def\K@ey#1{\ifmmode\ifnum\K@ho=0 \let\K@Av\K@cj\fi\fi\K@do=\K@eu sp
+??V\advance\K@do by \K@Ay\K@dp=\K@ev sp \advance\K@dp by \K@Ay\relax\ifx
+??V\K@hn\K@cp\else\let\K@Az\K@Ba\let\K@Av\K@cj\fi\global\setbox#1=\hbox
+??V{\hskip\K@do\vtop{\offinterlineskip\vbox\bgroup\vskip\K@Ay\K@Az
+??V#1\vskip\K@Ay}\hskip\K@dp}}\def\K@Az#1{\ifx\K@Bb\relax\vskip-\K@vj\vskip
+??V\ifnum\K@es=-1 \K@vj\else\K@es sp\fi\box#1\vskip\K@vj\egroup\else\vskip
+??V\ifnum\K@es=-1 \K@vj\else\K@es sp\fi\egroup\vskip-\K@vj\box#1\vskip\K@vj
+??V\fi\vskip\ifnum\K@et=-1 -\K@vj\else\K@et sp\fi}\def\K@Ba#1{\K@di=-\K@ho
+??V\advance\K@di by \K@hn\relax\multiply\K@di by -1 \K@di=\csname D@Y\the
+??V\K@di @\endcsname\relax\vskip-\K@vj\vskip\ifnum\K@es=-1 \K@vj\else\K@es
+??Vsp\fi\hbox{\raise\K@vj\hbox{\lower\K@di sp\box#1}}\egroup\vskip\K@vj
+??V\vskip\ifnum\K@et=-1 -\K@vj\else\K@et sp\fi}%
+??X\def\K@hr#1{\global\setbox#1=\hbox{\hskip\K@hk\vtop{\offinterlineskip
+??X\vbox\bgroup\vskip\K@hk\ifx\K@Bc\relax\box#1\egroup\else\egroup\box#1
+??X\fi\vskip\K@hk}\hskip\K@hk}}%
+~\def\K@Aw#1{\global\setbox#1=\hbox{\hskip\K@Bd\vtop{\vbox{\vskip\K@Be\box
+~#1} \vskip\K@Bf}\hskip\K@Bg}}\def\K@Bh#1{\ifmmode\K@Bi#1\fi}\let\K@Av\K@Bh
+~\def\K@Bi#1{\global\setbox#1=\hbox{$\vcenter{\box#1}$}}\K@bg\center{\K@cz
+~\let\K@Av\K@Bi}\K@bm\centre\center\def\K@Bj{\K@cz\let\K@Av\K@Bh}\K@bh
+~\uncenter\K@Bj\K@bh\uncentre\K@Bj\K@bh\centermath\K@Bj\K@bh\centremath
+~\K@Bj\K@bg\deep{\K@cz\let\K@Av\K@cj\let\K@Bb\K@ci\let\K@Bc\K@ci}\K@bg
+~\tall{\K@cz\let\K@Av\K@cj\let\K@Bb\relax\let\K@Bc\relax}\let\K@Bb\K@ci\let
+~\K@Bc\relax\let\K@Au\K@cj\K@bg\landscape{\K@cz\def\K@Au{\K@bo\K@Bk
+~}}\K@bg\oplandscape{\K@cz\def\K@Au{\K@bo\K@Bl}}
+??Z\begingroup\K@ce\def\K@Bk#1{\global\setbox#1=\hbox{\K@Bm\box#1\K@Bn}\K@Bo
+??Z\K@Bg\K@Bd}\def\K@Bl#1{\global\setbox#1=\hbox{\K@Bp\box#1\K@Bq}\K@Bo\K@Bd
+??Z\K@Bg}\def\K@Bo#1#2{\let\K@bf\K@Be\let\K@Be#1\let#1\K@Bf\let\K@Bf#2\let
+??Z#2\K@bf}\def\K@Bm{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs}\def\K@Bn
+??Z{\K@Bt\egroup\K@do=\ht\K@du\advance\K@do by \dp\K@du\hbox to \K@do{\hfil
+??Z\vbox to \wd\K@du{\vfill\K@vf\K@vg{90}\K@xg{\box\K@du}\K@vi }}\egroup
+??Z}\K@bh\endland\K@Bn\def\K@Bp{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs
+??Z}\def\K@Bq{\K@Bt\egroup\K@do=\ht\K@du\advance\K@do by \dp\K@du\hbox to
+??Z\K@do{\hfil\vbox to \wd\K@du{\vfill\K@vf\K@vg{-90}\K@xf{\box\K@du}\K@vi
+??Z}}\egroup}\K@bh\endopland\K@Bq\def\K@Bu{\K@Br\bgroup\setbox\K@du=\hbox
+??Z\bgroup\K@Bs}\K@bg\endflip{\K@Bt\egroup\K@do=\ht\K@du\ht\K@du=\dp\K@du\dp
+??Z\K@du=\K@do\hbox to \wd\K@du{\hfil\K@vf\K@vg{180}\hbox to \z@{\box\K@du
+??Z\hss}\K@vi }\egroup}\def\K@Bv{\K@cg{currentpoint currentpoint translate 1
+??Z-1 scale neg exch neg exch translate}}\def\K@Bw{\K@cg{currentpoint
+??Zcurrentpoint translate -1 1 scale neg exch neg exch translate}}\def\K@Bx
+??Z{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs}\K@bg\endhmir{\K@Bt\egroup
+??Z\K@do=\ht\K@du\ht\K@du=\dp\K@du\dp\K@du=\K@do\hbox{\K@vf\K@Bv\box\K@du
+??Z\K@vi}\egroup}\def\K@By{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs}\K@bg
+??Z\endvmir{\K@Bt\egroup\hbox to \wd\K@du{\hfil\K@vf\K@Bw\hbox to \z@{\box
+??Z\K@du\hss}\K@vi}\egroup}\def\K@Bz#1{\K@Br\bgroup\edef\K@bc{\noexpand\K@vg
+??Z{\K@At#1.@}}\setbox\K@du=\hbox\bgroup\K@Bs}\K@bg\endrot{\K@Bt\egroup\K@do
+??Z=\ht\K@du\advance\K@do by -\dp\K@du\hbox{\phantom{\copy\K@du}\hbox to \z@
+??Z{\hskip-.5\wd\K@du\raise.5\K@do\hbox{\K@vf\K@bc\hbox to \z@{\hss\vbox to
+??Z\z@{\vss\box\K@du\vss}\hss}\K@vi}\hss}}\egroup}\endgroup
+~\K@bk\land{\relax\K@bo\K@Bm}\K@bg\opland{\relax\K@bo\K@Bp}\K@bg\flip{\relax
+~\K@bo\K@Bu}\K@bg\hmir{\relax\K@bo\K@Bx}\K@bg\hmirror{\relax\K@bo\K@Bv}\K@bg
+~\vmir{\relax\K@bo\K@By}\K@bg\rot{\relax\K@bo\K@Bz}\def\K@Br#1{\ifmmode
+~\ifinner\def\K@Bs{$}\else\def\K@Bs{$\displaystyle}\fi\def\K@Bt{$}\else
+~\let\K@Bs\bgroup\let\K@Bt\egroup\fi #1\let\K@Br\relax}\K@bg\squish{\relax
+~\ifmmode\def\next{\mathpalette\K@Ca}\else\let\next\K@Cb\fi\next}\def
+~\K@Cb#1{\hbox to \z@{\hss#1\hss}}\def\K@Ca#1#2{\hbox to \z@{\hss$\m@th
+~#1{#2}$\hss}}\K@bg\squash{\relax\ifmmode\def\next{\mathpalette\K@Cc}\else
+~\let\next\K@Cd\fi\next}\def\K@Cd#1{\setbox\z@\hbox to \z@{\hss#1\hss
+~}\K@Ce}\def\K@Cc#1#2{\setbox\z@\hbox to \z@{\hss$\m@th#1{#2}$\hss}\K@Ce
+~}\def\K@Ce{\ht\z@\z@\dp\z@\z@\box\z@}
+??Y\begingroup\K@ce\def\K@Cf{\K@Br\bgroup\hbox\bgroup\K@Cg\vtop\bgroup
+??Y\vbox\bgroup\K@Ch\vskip\K@Be\vskip\K@Ci\hbox\bgroup\hskip\K@Bd\hskip
+??Y\K@Ci\K@Bs}\K@bg\endframe{\K@Bt\hskip\K@Bg\hskip\K@Ci\egroup\egroup
+??Y\vskip\K@Bf\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup\egroup}%
+~\K@bg\frame{\relax\K@bq\K@Cf}\K@bg\framed{\let\K@Ax\K@Cj}\let\K@Ax\K@cj
+~\def\K@Cj#1{\global\setbox#1=\hbox{\K@Cg\vtop{\vbox{\K@Ch\box#1}\K@Ch
+~}\K@Cg}}\def\K@Cg{\K@Ck\vrule width \K@Cl\K@Cm}\def\K@Ch{\K@Ck\hrule
+~height \K@Cl\K@Cm}
+??Y\def\K@Cn#1#2{\K@Br\bgroup\K@Co#1@\K@qc\K@qd\K@Co#2@\K@pz\K@qa\setbox
+??Y8=\hbox\bgroup\K@Cg\vtop\bgroup\vbox\bgroup\K@Ch\vskip\K@Be\vskip\K@Ci
+??Y\hbox\bgroup\hskip\K@Bd\hskip\K@Ci\K@Bs}\def\K@Cp{\K@Bt\hskip\K@Bg\hskip
+??Y\K@Ci\egroup\egroup\vskip\K@Bf\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup
+??Y\dimen4=-\wd8 \advance\dimen4 by \K@qc\relax\multiply\dimen4 by -1
+??Y\advance\dimen4 by \K@pz\relax\ifdim\dimen4>\z@\dimen8=\ht8 \dimen6=-\dp
+??Y8 \advance\dimen8 by \K@qa\advance\dimen6 by \K@qd\multiply\dimen6 by -1
+??Y\K@do=\K@qc\K@dp=\K@pz\multiply\K@dp by -1 \setbox\K@du=\hbox{\ifdim\K@do
+??Y>\z@\hskip\K@do\fi\vrule width\dimen4 height \dimen8 depth \dimen6 \ifdim
+??Y\K@dp>\z@\hskip\K@dp\fi}\multiply\K@dp by -1 \hbox{\K@Cq\box\K@du\K@Cr
+??Y\llap{\K@ha1\vrule width\wd8 height \ht8 depth \dp8 \endgr\ifdim\K@dp>\z@
+??Y\hskip\K@dp\fi}\llap{\box8 \ifdim\K@dp>\z@\hskip\K@dp\fi}}\else\box8 \fi
+??Y\egroup}\def\K@Cs{\K@Bt\hskip\K@Bg\hskip\K@Ci\egroup\egroup\vskip\K@Bf
+??Y\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup\K@do=-\wd8 \advance\K@do by \K@qc
+??Y\multiply\K@do by -1 \advance\K@do by \K@pz\relax\ifdim\K@do>\z@\dimen
+??Y8=\ht8 \dimen6=-\dp8 \setbox\K@du=\hbox{\phantom{\copy8}}\ifdim\K@qa>\z@
+??Y\setbox\K@du=\vbox{\offinterlineskip\hbox to \wd8{\hskip\K@qc\vrule
+??Ywidth \K@do height \K@qa\hss} \box\K@du}\setbox8=\vbox{\vskip\K@qa\box8}\fi
+??Y\ifdim\K@qd<\z@\K@dp=\K@qd\multiply\K@dp by -1 \setbox\K@du=\vtop
+??Y{\offinterlineskip\box\K@du\hbox to \wd8{\hskip\K@qc\vrule width \K@do
+??Yheight \K@dp\hss}}\setbox8=\vtop{\box8\vskip\K@dp}\fi\ifdim\K@qa<\z@
+??Y\advance\dimen8 by \K@qa\fi\ifdim\K@qd>\z@\advance\dimen6 by \K@qd\fi
+??Y\multiply\dimen6 by -1 \K@do=\K@qc\multiply\K@do by -1 \K@dp=\K@pz\setbox
+??Y\K@du=\hbox{\ifdim\K@do>\z@\vrule width \K@do height \dimen8 depth \dimen
+??Y6 \fi\box\K@du\ifdim\K@dp>\z@\vrule width \K@dp height \dimen8 depth
+??Y\dimen6 \fi}\hbox{\K@Cq\box\K@du\K@Cr\llap{\hbox{\ifdim\K@do>\z@\hskip
+??Y\K@do\fi\box8 \ifdim\K@dp>\z@\hskip\K@dp\fi}}}\else\box8 \fi\egroup
+??Y}\K@bg\endshade{\K@Bt\hskip\K@Bg\hskip\K@Ci\egroup\egroup\vskip\K@Bf
+??Y\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup\dimen4=-\wd8 \advance\dimen4 by
+??Y\K@qc\relax\multiply\dimen4 by -1 \advance\dimen4 by \K@pz\relax\ifdim
+??Y\dimen4>\z@\dimen8=\ht8 \dimen6=-\dp8 \advance\dimen8 by \K@qa\advance
+??Y\dimen6 by \K@qd\multiply\dimen6 by -1 \K@do=\K@qc\K@dp=\K@pz\multiply
+??Y\K@dp by -1 \setbox\K@du=\hbox{\ifdim\K@do>\z@\hskip\K@do\fi\vrule
+??Ywidth\dimen4 height \dimen8 depth \dimen6 \ifdim\K@dp>\z@\hskip\K@dp\fi
+??Y}\multiply\K@dp by -1 \hbox{\K@Cq\box\K@du\K@Cr\llap{\K@ha1\dimen6=\K@Cl
+??Y\dimen2=\wd8 \K@do=\ht8 \K@dp=\dp8 \ifdim\K@qd<\z@\advance\K@dp by -\dimen
+??Y6 \fi\ifdim\K@qa>\z@\advance\K@do by -\dimen6 \fi\ifdim\K@qc<\z@
+??Y\advance\dimen2 by -\dimen6 \fi\ifdim\K@pz>\z@\advance\dimen2 by -\dimen
+??Y6 \else\dimen6=\z@\fi\vrule width\dimen2 height \K@do depth \K@dp\hskip
+??Y\dimen6 \endgr\ifdim\K@dp>\z@\hskip\K@dp\fi}\llap{\box8 \ifdim\K@dp>\z@
+??Y\hskip\K@dp\fi}}\else\box8 \fi\egroup}\def\K@Co#1,#2@#3#4{\edef
+??Y#3{#1}\edef#4{#2}}\endgroup
+~\K@bg\shade{\relax\K@bq\K@Cn}\K@bg\NoTeXviewHack{\def\endshade{\K@Cp}}\K@bg
+~\TeXshades{\def\endshade{\K@Cs}}
+??N\begingroup\K@ce\def\K@zp{\K@rt\let\K@pu\K@ci\let\K@rp\K@ci\let\K@rm
+??N\K@ci\let\K@qj\K@cm\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm\def\K@rt
+??N{\egroup\K@Ct}\setbox\K@du=\hbox\bgroup}\def\K@Ct{\ifx\K@rm\K@ci\else
+??N\K@Cu\expandafter\K@Cv\K@rp @\K@tn\K@tm\edef\K@bc{\noexpand\K@sc @\K@tn
+??N,\noexpand\K@tu @\K@tm,\noexpand\K@tv @}\K@bc\expandafter\K@Cv\K@rm @\K@tp
+??N\K@to\edef\K@bc{\noexpand\K@sc @\K@tp,\noexpand\K@uc @\K@to,\noexpand\K@ud
+??N@}\K@bc\ifnum\K@tu>\K@uc\relax\K@ct\K@tu\K@uc\fi\ifnum\K@tv>\K@ud\relax
+??N\K@ct\K@tv\K@ud\fi\K@di=\K@tu\multiply\K@di by -1 \advance\K@di by \K@uc
+??N\relax\K@dj=\K@tv\multiply\K@dj by -1 \advance\K@dj by \K@ud\relax\K@do
+??N=\K@tu sp \advance\K@do by \K@qj sp \advance\K@do by \K@qm sp \K@dp=\K@tv
+??Nsp \advance\K@dp by \K@qi sp \advance\K@do by \K@ql sp \edef\K@bc{\noexpand
+??N\K@ve0@\the\K@do,\the\K@dp @{\noexpand\K@Bs\vrule width \the\K@di sp
+??Nheight \the\K@dj sp \noexpand\K@Bt}}\K@bc\fi}%
+??Q\def\K@Cu{\ifx\K@pu\K@ci\def\K@Bs{\relax}\def\K@Bt{\relax}\else\edef\K@Bs
+??Q{\noexpand\K@ha{\K@pu}}\def\K@Bt{\endgr}\fi}\endgroup
+??N\def\K@zq{\K@rt\let\K@pu\K@ci\let\K@rp\K@ci\let\K@rm\K@ci\let\K@qj\K@cm
+??N\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm\let\K@ra\K@Cw\def\K@rt
+??N{\egroup\K@Cx}\setbox\K@du=\hbox\bgroup\def\rw{\K@md}}\def\K@Cx{\ifx\K@rm
+??N\K@ci\else\bgroup\K@Cu\expandafter\K@Cv\K@rp @\K@tn\K@tm\edef\K@bc
+??N{\noexpand\K@sc @\K@tn,\noexpand\K@tu @\K@tm,\noexpand\K@tv @}\K@bc
+??N\expandafter\K@Cv\K@rm @\K@tp\K@to\edef\K@bc{\noexpand\K@sc @\K@tp
+??N,\noexpand\K@uc @\K@to,\noexpand\K@ud @}\K@bc\ifnum\K@tu>\K@uc\relax\K@ct
+??N\K@tu\K@uc\fi\ifnum\K@tv>\K@ud\relax\K@ct\K@tv\K@ud\fi\K@di=\K@tu
+??N\multiply\K@di by -1 \advance\K@di by \K@uc\relax\K@dj=\K@tv\multiply\K@dj
+??Nby -1 \advance\K@dj by \K@ud\relax\K@do=\K@tu sp \advance\K@do by \K@qj
+??Nsp \advance\K@do by \K@qm sp \K@dp=\K@tv sp \advance\K@dp by \K@qi sp
+??N\advance\K@do by \K@ql sp \edef\K@bc{\noexpand\K@ve0@\the\K@do,\the\K@dp
+??N@{\noexpand\K@Bs\noexpand\K@Cy{\the\K@di sp}{\the\K@dj sp}\noexpand\K@Bt
+??N}}\K@bc\egroup\fi}\def\K@Cy#1#2{\hbox to #1{\vbox to #2{\vfil}\hfil}\llap
+??N{\vbox to #2{ \vfil\hbox to #1{\vrule width \K@ra height #2 \hss\vrule
+??Nwidth \K@ra height #2} \vfil}}\llap{\hbox to #1{\hfil\vbox to #2{ \hrule
+??Nheight \K@ra width #1 \vss\hrule height \K@ra width #1}\hfil}}}\endgroup
+??X\def\K@gj#1{\bgroup\K@dw\K@dx{\K@dy\K@dr}{\the\K@dr}\def\K@gi{\K@Cz}\def
+??X\Modify{\K@by\K@Af\K@zt}\global\setbox\K@ds=\vbox\bgroup\offinterlineskip
+??X\hbox\bgroup$}\K@bk\endFigure{\K@gi\egroup}%
+~\def\K@fi{\K@gj}\K@bk\Figure{\bgroup\K@br\K@ej\K@ek\K@el\everyFigure\K@fi
+~{Figure}}\K@bl\everyFigure\relax
+??X\def\K@Cz{$\egroup\null\egroup\K@dx{\K@di=\wd\K@ds\K@dj=\ht\K@ds}{{\the
+??X\K@di}{\the\K@dj}{}{\K@hp}}\K@ew\K@ex\K@hr\egroup\Displaybox\K@ds}%
+~\K@bk\newFigure{\bgroup\K@ez\K@Da}\def\K@Da#1{\egroup\expandafter\ifx
+~\csname D@every#1@\endcsname\relax\expandafter\expandafter\expandafter\let
+~\expandafter\expandafter\csname D@@#1@@\endcsname\csname#1\endcsname
+~\expandafter\def\csname D@every#1@\endcsname{\expandafter\expandafter
+~\expandafter\let\expandafter\expandafter\csname#1\endcsname\csname
+~D@@#1@@\endcsname}\fi\expandafter\K@bk\csname#1\endcsname{\bgroup\K@br
+~\csname D@every#1@\endcsname\K@ej\K@ek\K@el\everyFigure\csname
+~every#1\endcsname\K@fi{#1}}\expandafter\K@bk\csname end#1\endcsname{\K@gi
+~\egroup}\expandafter\let\csname every#1\endcsname\relax}
+??X\def\K@fw#1#2#3{\bgroup\K@dw\K@dx{\K@dy\K@dr}{\the\K@dr}\let\K@pe\K@Db
+??X\K@pg#2;@\K@en\K@zx\K@zy\K@pg#3;@\K@eo\K@zz\K@Aa\K@dx{}{{\K@en}{\K@eo
+??X}{}{\K@hp}}\let\K@Dc\K@zu\let\K@hk\K@hl\let\K@Ad\K@ck\global\setbox\K@ds
+??X=\hbox to \K@en sp {\vbox to \K@eo sp{\vss}\hss}\K@by\K@Af\K@zw}\K@bk
+??X\endGraph{\K@Dc\egroup}%
+~\def\K@fg{\K@fw}\K@bk\Graph{\bgroup\K@br\K@ej\K@ek\K@el\everyGraph\K@fg
+~{Graph}}\K@bl\everyGraph\relax
+??X\def\K@Ad{\K@dx}%
+~\def\K@Af{\def\K@um##1##2##3##4##5{}}\K@bk\newGraph{\bgroup\K@ez\K@Dd}\def
+~\K@Dd#1{\egroup\K@br\expandafter\ifx\csname D@every#1@\endcsname\relax
+~\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname
+~D@@#1@@\endcsname\csname#1\endcsname\expandafter\def\csname
+~D@every#1@\endcsname{\expandafter\expandafter\expandafter\let\expandafter
+~\expandafter\csname#1\endcsname\csname D@@#1@@\endcsname}\fi\expandafter
+~\K@bk\csname#1\endcsname{\bgroup\K@br\csname D@every#1@\endcsname\K@ej
+~\K@ek\K@el\everyGraph\csname every#1\endcsname\K@fg{#1}}\expandafter
+~\K@bk\csname end#1\endcsname{\K@Dc\egroup}\expandafter\let\csname
+~every#1\endcsname\relax}
+??X\def\K@Db#1,#2;@#3#4#5{\K@do=#1\relax\ifdim\K@do<\z@\multiply\K@do by -1
+??X\fi\K@di=\K@do\edef#3{\the\K@di}\def\K@bf{#2}\ifx\K@bf\K@ci\else\setbox
+??X\K@du=\hbox{\K@do=\K@pn#2pt}\ifdim\wd\K@du>\z@\K@do=\K@pn#2\relax\ifdim
+??X\K@do=\z@\else\edef#4{\the\K@do}\fi\else\K@di=\K@pn#2\relax\ifnum\K@di
+??X>\z@\edef#5{\the\K@di}\fi\fi\fi}\endgroup
+~\K@bg\gridlines{\K@cz\K@De\let\K@gf\K@gd\let\K@gh\K@go}\K@bg\overgrid
+~{\K@cz\K@De\let\K@gf\K@ge\let\K@gh\K@gn\let\K@Ac\K@cr}\let\K@Ac\K@cq\def
+~\K@De{\let\K@fz\K@gd\let\K@ep\K@Df\let\K@ep\K@Df\def\K@Cz{\K@zt\K@zu
+~}}\let\K@ep\relax\def\K@Dg#1#2{\K@do=1sp \K@do=#1\K@do\ifdim\K@do>1sp
+~\else\ifdim\K@do<\z@\else\K@do=1000sp \K@do=#1\K@do\ifdim\K@do=\z@\let
+~#2\K@ci\else\def#2{#1}\fi\fi\fi}\def\K@Df{\let\K@tz\K@ci\let\K@ua\K@ci
+~\let\K@rp\K@ci\let\K@rm\K@ci\let\K@zr\K@ci\let\K@zs\K@ci\let\K@qd\K@cm
+~\let\K@qc\K@ci\let\K@qa\K@cm\let\K@pz\K@ci\let\K@qj\K@cm\let\K@qi\K@cm
+~\let\K@qm\K@cm\let\K@ql\K@cm\def\K@qb{-65536}\let\K@py\K@qb\let\K@pu\K@Dh
+~\let\K@qs\relax\let\K@rb\relax\let\K@rc\relax\let\K@rl\K@ci\let\K@qe
+~\relax\let\K@qf\relax\let\K@qg\relax\let\K@qh\relax\let\K@rq\relax\let
+~\K@rs\relax\ifnum\K@ho>0 \K@di=0 \K@cu\let\K@tm\K@rx\edef\K@tn{\the\K@di
+~}\let\K@to\K@ry\let\K@tp\K@tn {\K@Af\K@tt0{{Line}{}}{}}\ifnum\K@di<\K@hx
+~\advance\K@di by 1 \K@cv\fi\ifnum\K@hx>0 \K@di=0 \K@cu\edef\K@tm{\the
+~\K@di}\let\K@tn\K@rz\let\K@to\K@tm\let\K@tp\K@sa {\K@Af\K@tt
+~0{{Line}{}}{}}\ifnum\K@di<\K@ho\advance\K@di by 1 \K@cv\fi}\K@bk\newcell
+~{\bgroup\K@ez\K@Di}\def\K@Di#1{\egroup\expandafter\K@bk\csname#1\endcsname
+~{\K@Dj{#1}} \expandafter\K@bk\csname a#1\endcsname{\null\K@yu0{#1}}
+~\expandafter\K@bk\csname r#1\endcsname{\null\K@yu1{#1}} \expandafter\K@bk
+~\csname rd#1\endcsname{\null\K@yu2{#1}} \expandafter\K@bk\csname
+~d#1\endcsname{\null\K@yu3{#1}} \expandafter\K@bk\csname ld#1\endcsname
+~{\null\K@yu4{#1}} \expandafter\K@bk\csname l#1\endcsname{\null\K@yu5{#1}}
+~\expandafter\K@bk\csname lu#1\endcsname{\null\K@yu6{#1}} \expandafter\K@bk
+~\csname u#1\endcsname{\null\K@yu7{#1}} \expandafter\K@bk\csname
+~ru#1\endcsname{\null\K@yu8{#1}} \expandafter\K@bk\csname b#1\endcsname
+~{\null\K@yu{10}{#1}} \expandafter\edef\csname D@#1b@x\endcsname
+~##1##2{\lower\K@vj\hbox{$\expandafter\noexpand\csname#1box\endcsname
+~{##2}$}} \expandafter\ifx\csname#1box\endcsname\relax\expandafter\K@bi
+~\expandafter\edef\csname#1box\endcsname##1{\hbox to ##1{$\expandafter
+~\noexpand\csname#1fill\endcsname$}} \fi\expandafter\let\csname
+~D@#1@lwp@\endcsname\K@cm\expandafter\let\csname D@#1@lp@\endcsname\K@cm
+~\expandafter\let\csname D@#1@cp@\endcsname\K@cm\expandafter\let\csname
+~D@#1@jp@\endcsname\K@cm\expandafter\let\csname D@#1@bp@\endcsname\K@cm
+~\expandafter\let\csname D@#1@lpt@\endcsname\K@ci\expandafter\let\csname
+~D@#1@ppt@\endcsname\K@ci\expandafter\let\csname D@#1@pp@\endcsname\K@cm
+~\expandafter\let\csname D@#1@ap@\endcsname\K@cm}\def\K@Dj#1{\K@rt\K@bw
+~\K@Dk\edef\K@pb{\K@Dl{#1}{}}\let\K@oi\K@pb\global\K@dr={{#1}{}}\def\K@rt
+~{\egroup\K@Dm}\setbox\K@du=\hbox\bgroup}
+??S\def\K@Dn#1{\K@rt\K@Dk\edef\K@pb{\K@Dl{Fillcell}{}}\let\K@oi\K@pb\global
+??S\K@dr={{Fillcell}{#1}}\def\K@rt{\egroup\K@Dm}\setbox\K@du=\hbox\bgroup}\def
+??S\K@Do#1{\K@rt\K@Dk\edef\K@pb{\K@Dl{Boxcell}{}}\let\K@oi\K@pb\global\K@dr
+??S={{Boxcell}{#1}}\def\K@rt{\egroup\K@Dm}\setbox\K@du=\hbox\bgroup}\def\K@Dp
+??S{\K@rt\K@Dk\edef\K@pb{\K@Dl{Rule}{}}\let\K@oi\K@pb\edef\K@bc{\global
+??S\K@dr={{\K@Dq}}}\K@bc\def\K@rt{\egroup\expandafter\K@Dr\the\K@dr\K@Dm
+??S}\setbox\K@du=\hbox\bgroup\def\rw{\K@mb}}\def\K@Dr#1{\K@do=#1 \divide
+??S\K@do by 2 \K@di=\K@pd\advance\K@di by \K@do\xdef\K@pd{\the\K@di}\K@di
+??S=\K@qy\advance\K@di by \K@do\xdef\K@qy{\the\K@di}\global\K@dr
+??S={{Rule}{#1}}}\def\K@Dk{\let\K@rp\K@ci\let\K@rm\K@ci\let\K@vh\K@cm\let
+??S\K@vk\K@cn\let\K@tx\K@Ds\let\K@zr\K@ci\let\K@zs\K@ci\let\K@pu\K@ci\let
+??S\K@qs\relax\let\K@rc\relax\let\K@rb\relax\let\K@qy\K@cm\let\K@rl\K@ci
+??S\let\K@pc\K@cm\let\K@oj\K@pc\let\K@pd\K@cm\let\K@ok\K@pd\let\K@qt\K@ci
+??S\let\K@re\K@ci\let\K@rf\K@ci\let\K@rq\relax\let\K@rs\relax\let\K@qe\relax
+??S\let\K@qf\relax\let\K@qg\relax\let\K@qh\relax\let\K@qj\K@cm\let\K@qi\K@cm
+??S\let\K@qm\K@cm\let\K@ql\K@cm\let\K@qb\K@cm\let\K@qd\K@cm\let\K@qc\K@ci
+??S\let\K@py\K@cm\let\K@qa\K@cm\let\K@pz\K@ci\K@dq={}}\def\K@Dm{\ifx\K@rc
+??S\K@ci\expandafter\K@Dt\K@qy @\K@di\K@Du {\expandafter\K@Dv\the\K@dr}\edef
+??S\K@qy{\the\K@di}\fi\ifx\K@rp\K@ci\else\expandafter\K@Dw\fi}\def\K@Dw{\ifx
+??S\K@rm\K@ci\ifnum\K@tx>0 \expandafter\K@Cv\K@rp @\K@tn\K@tm\edef\K@bc
+??S{\noexpand\K@tt9{\the\K@dr}{\the\K@dq}}{\K@gx\let\K@up\K@cj\K@bc }\fi
+??S\else\let\K@Dx\relax\let\K@Dy\relax\def\K@Dz{\let\K@up\K@cj\K@bc
+??S}\expandafter\K@Cv\K@rp @\K@tn\K@tm\expandafter\K@Cv\K@rm @\K@tp\K@to
+??S\let\K@tz\K@ci\let\K@ua\K@ci\K@Ea\K@zs\K@qe\K@qg\K@rq\K@re\K@rp\K@tz
+??S\K@uk\K@ul\K@Eb\K@Ec\K@tn\K@tm\K@Dy\K@Ea\K@zr\K@qf\K@qh\K@rs\K@rf\K@rm
+??S\K@ua\K@un\K@uo\K@Ed\K@Ee\K@tp\K@to\K@Dx\edef\K@bc{\noexpand\K@tt0{\the
+??S\K@dr}{\the\K@dq}}{\K@gx\K@Dz\K@Dy\K@Dx }\fi}\def\K@Ea
+??S#1#2#3#4#5#6#7#8#9{\ifx#1\K@ci\def\K@fx{\K@Ef#2#3#4#5#6#7#8#9}\else\def
+??S\K@fx{\K@Eg#1#7#8#9#2#3#4}\fi\K@fx}\def\K@Ef#1#2#3#4#5#6#7#8{\let#1\relax
+??S\let#2\relax\ifx\K@sc\K@Ab\else\ifx#3\relax\ifx#4\K@ci\expandafter
+??S\K@Eh#5@#6#7#8\fi\fi\fi\def\K@fx##1##2##3##4##5{}\K@fx}\def\K@Eg
+??S#1#2#3#4#5#6#7#8#9{\def\K@Dz{\K@bc}\setbox\K@dt=\hbox{$\vertexstyle\K@gx
+??S#1\the\K@dr$}\K@do=\wd\K@dt\K@di=\K@do\edef#2{\the\K@di}\K@do=\ht\K@dt\K@di
+??S=\K@do\edef#3{\the\K@di}\K@do=\dp\K@dt\K@di=\K@do\edef#4{\the\K@di}\ifx
+??S#5\relax\def#8{\relax}\else\K@ty{-1}#5#2\K@di=#5\relax\multiply\K@di by
+??S-2 \edef#8{\hskip\the\K@di sp}\fi\ifx#6\relax\def#9{\lower\noexpand\K@vj
+??S}\else\K@di=-\K@vj\advance\K@di by #6\relax\edef#9{\raise\the\K@di
+??Ssp}\fi\def\K@fx{\K@Ei#1#7#8#9}\K@fx}\def\K@Ei#1#2#3#4#5#6#7{\edef
+??S#7{\noexpand#1\ifx#2\relax\noexpand\K@Ej1@#5,#6@\else\noexpand\K@ve
+??S1@#5sp,#6sp@\fi {#4\hbox{#3\noexpand\noexpand\noexpand\K@gx $\noexpand
+??S\noexpand\noexpand\vertexstyle\noexpand\the\noexpand\K@dr$}}}}\def\K@Eh
+??S#1,#2@#3#4#5{\K@Ek#1.,#2.@#3#4#5}\def\K@Ek#1.#2,#3.#4@#5#6#7{\def\K@bf
+??S{#2#4}\ifx\K@bf\K@ci\ifnum#1>-1 \ifnum#1>\K@hx\relax\else\ifnum#3>-1
+??S\ifnum#3>\K@ho\relax\else\K@di=-\K@ho\advance\K@di by #3 \multiply\K@di
+??Sby -1 \K@ts{\the\K@di}{#1}\K@bf\ifx\K@bf\relax\else\expandafter\K@El
+??S\K@bf#5#6#7\def\K@Dz{\K@bc}\fi\fi\fi\fi\fi\fi}%
+~\def\K@Cv#1,#2@#3#4{\gdef#3{#1}\gdef#4{#2}}
+??V\def\K@yu#1#2{\K@rt\K@Em\def\K@oq{#1}\def\K@ot{#2}\global\K@dr
+??V={{#2}{}}\def\K@rt{\egroup\K@En{#1}}\setbox\K@du=\hbox\bgroup}\def\K@ys
+??V#1#2{\K@rt\K@Em\def\K@oq{#1}\def\CellName{Fillcell}\global\K@dr
+??V={{Fillcell}{#2}}\def\K@rt{\egroup\K@En{#1}}\setbox\K@du=\hbox\bgroup}\def
+??V\K@yt#1#2{\K@rt\K@Em\def\K@oq{#1}\def\CellName{Boxcell}\global\K@dr
+??V={{Boxcell}{#2}}\def\K@rt{\egroup\K@En{#1}}\setbox\K@du=\hbox\bgroup}\def
+??V\K@yv#1{\K@rt\K@Em\def\K@oq{#1}\def\CellName{Rule}\edef\K@bc{\global\K@dr
+??V={{\K@Dq}}}\K@bc\def\K@rt{\egroup\expandafter\K@Eo\the\K@dr\K@En
+??V{#1}}\setbox\K@du=\hbox\bgroup\def\rw{\K@mb}}\def\K@Eo#1{\K@do=#1 \divide
+??V\K@do by 2 \K@di=\K@pd\advance\K@di by \K@do\xdef\K@pd{\the\K@di}\K@di
+??V=\K@qy\advance\K@di by \K@do\xdef\K@qy{\the\K@di}\global\K@dr
+??V={{Rule}{#1}}}\def\K@Em{\let\K@qu\K@qw\let\K@qx\relax\let\K@pu\K@ci\let
+??V\K@qs\relax\let\K@qp\K@qr\def\K@ow{0pt}\let\K@rc\relax\let\K@rb\relax
+??V\let\K@qy\K@cm\let\K@rd\relax\let\K@py\K@cm\let\K@qb\K@cm\let\K@pb\K@ci
+??V\let\K@rl\K@ci\let\K@pc\K@cm\let\K@pd\K@cm\let\K@qt\K@ci\let\K@re\K@ci
+??V\let\K@rf\K@ci\let\K@qj\K@cm\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm
+??V\let\K@qd\K@cm\let\K@qc\K@ci\let\K@qa\K@cm\let\K@pz\K@ci\let\K@og\K@ci
+??V\let\K@ox\K@ci\K@dq={}}\def\K@Ep#1#2#3#4#5#6#7#8#9{\ifcase#1 #2\or#3\or
+??V#4\or#5\or#6\or #7\or#8\or#9\fi}\def\K@En#1{\def\K@oq{#1}\let\K@fx\K@ci
+??V\ifx\K@og\K@ci\ifnum#1=0 \let\K@fx\relax\else {\K@tk{#1}}\fi\else\ifnum
+??V#1=10 \edef\K@to{\the\K@df}\edef\K@tp{\the\K@de}\expandafter\K@Eq\K@og
+??V@\K@tm\K@tn\K@Er{\let\K@fx\relax}\K@Es\K@oq\else\ifnum#1=0 \edef\K@tm
+??V{\the\K@df}\edef\K@tn{\the\K@de}\expandafter\K@Eq\K@og @\K@to\K@tp\K@Er
+??V{\let\K@fx\relax}\K@Es\K@oq\else {\K@tk{#1}}\fi\fi\fi\let\K@Et\K@cm
+??V\ifx\K@qp\relax\expandafter\K@Eu\K@ox{}{}\fi\K@Ev\K@oq\ifx\K@fx\K@ci\ifx
+??V\K@qs\K@ci\let\K@pu\K@cl\fi\ifx\K@rc\K@ci\expandafter\K@Dt\K@qy @\K@dk
+??V\K@Du {\expandafter\K@Dv\the\K@dr}\edef\K@qy{\ifx\K@rb\relax1\else2\fi\the
+??V\K@dk}\fi\ifx\K@rd\relax\K@Ew\K@oq{\the\K@dg}\K@fx\global\advance\K@dg
+??Vby 1 \else\K@dk=\K@im\advance\K@dk by -1 \xdef\K@im{\the\K@dk}\K@Ew\K@oq
+??V\K@im\K@fx\fi\fi\K@fx}\def\K@Eu#1#2{\def\K@bf{#1}\ifx\K@bf\K@ci\let
+??V\K@bc\relax\else\ifx\K@bf\K@cl\ifx\K@pb\K@ci\def\K@bf{\K@Dl{\K@ot
+??V}{}}\else\let\K@bf\K@pb\fi\fi\ifdim\K@bf pt=.5pt \ifnum#2>\K@Et\relax
+??V\def\K@Et{#2}\fi\fi\let\K@bc\K@Eu\fi\K@bc}\def\K@Es#1{\ifnum\K@to>\K@tm
+??V\ifnum\K@tp>\K@tn\def#1{2}\else\ifnum\K@tp=\K@tn\def#1{3}\else\def
+??V#1{4}\fi\fi\else\ifnum\K@to=\K@tm\ifnum\K@tp>\K@tn\def#1{1}\else
+??V\ifnum\K@tp=\K@tn\relax\else\def#1{5}\fi\fi\else\ifnum\K@tp>\K@tn\def
+??V#1{8}\else\ifnum\K@tp=\K@tn\def#1{7}\else\def#1{6}\fi\fi\fi\fi}\def
+??V\K@Er#1{\ifnum\K@to<0\relax #1\else\ifnum\K@to>\K@ho\relax #1\else\ifnum
+??V\K@tp<0\relax #1\else\ifnum\K@tp>\K@hx\relax #1\fi\fi\fi\fi}\def\K@Dt
+??V#1#2@#3#4#5{\if#1=#3=#2 \else #3=#1#2 \advance#3 by #4 \advance#3 by #5
+??V\fi}\def\K@Ew#1#2#3{\edef#3{\gdef\expandafter\noexpand\csname
+??VD@Cell@#2@\endcsname{\noexpand\K@Ex#1@\the\K@dr @\K@tm @\K@tn @\K@to @\K@tp
+??V@{\the\K@dq}@{{\K@pb}{\K@rl}}{{\K@pc}{\K@pd}}{{\K@qb}{\K@py}}{{\K@qc
+??V}{\K@qd}}{{\K@pz}{\K@qa}}{{\K@pu}{\K@qt}}{{\K@qj}{\K@qm}}{{\K@qi}{\K@ql
+??V}}@{\K@qy}{\K@re}{\K@rf}@}}}\def\K@Eq#1@#2@#3#4{\K@di=\K@At#2.@\relax
+??V\multiply\K@di by -1 \advance\K@di by \K@df\edef#3{\the\K@di}\K@di=\K@At
+??V#1.@\relax\advance\K@di by \K@de\edef#4{\the\K@di}}\def\K@Ey#1{\ifnum
+??V#1=1\relax\ifx\K@qx\relax\K@Ez\K@tm\K@tn\K@tp\K@Et\fi\else\ifnum
+??V#1=5\relax\ifx\K@qx\relax\K@Ez\K@tm\K@tp\K@tn\K@Et\fi\else\ifnum\K@tn
+??V=\K@tp\else\K@Fa\fi\fi\fi}\def\K@Ez#1#2#3#4{{\K@di=\K@sw\relax\advance
+??V\K@di by 1 \K@Fb{A:r#1,c#2-#3}\expandafter\xdef\csname D@as@\K@sw
+??V@\endcsname{\noexpand\K@Fc{#1}{#2}{#3}{#4}\expandafter\noexpand\csname
+??VD@as@\the\K@di @\endcsname}\xdef\K@sw{\the\K@di}}\global\expandafter\let
+??V\csname D@as@\K@sw @\endcsname\relax}\def\K@Fa{{\ifnum\K@tn>\K@tp\relax
+??V\K@ct\K@tn\K@tp\K@ct\K@tm\K@to\fi\K@Fb{W:r\K@tm-\K@to,c\K@tn-\K@tp}\K@di
+??V=\K@sy\relax\advance\K@di by 1 \expandafter\xdef\csname D@ws@\K@sy
+??V@\endcsname{\noexpand\K@Fd {\K@tm}{\K@tn}{\K@to}{\K@tp}{\K@qu}\expandafter
+??V\noexpand\csname D@ws@\the\K@di @\endcsname}\xdef\K@sy{\the\K@di}}\global
+??V\expandafter\let\csname D@ws@\K@sy @\endcsname\relax}%
+~\K@bk\displaystretches{\K@cz\let\K@Fb\K@Fe\let\K@sk\K@Fe}\let\K@Fb\K@cj
+~\def\K@vl#1#2{\csname D@#1b@x\endcsname{#2}}\def\K@ov#1#2{\csname
+~D@#1@lwp@\endcsname}\def\K@os#1#2{\csname D@#1@lp@\endcsname}\def\K@Dv
+~#1#2{\csname D@#1@bp@\endcsname}\def\K@wq#1#2{\csname D@#1@cp@\endcsname
+~}\def\K@wo#1#2{\csname D@#1@jp@\endcsname}
+??O\def\K@ws#1#2{\csname D@#1@pp@\endcsname}\def\K@rr#1#2{\csname
+??OD@#1@ap@\endcsname}%
+~\def\K@Dl#1#2{\expandafter\ifx\csname D@#1@lpt@\endcsname\K@ci\K@Ff\else
+~\csname D@#1@lpt@\endcsname\fi}
+??O\def\K@vn#1{\expandafter\ifx\csname D@#1@ppt@\endcsname\K@ci\K@Fg\else
+??O\csname D@#1@ppt@\endcsname\fi}%
+~\def\D@Fillcellb@x#1#2{\lower\K@vj\hbox to #2{$#1$}}\K@bk\aFillcell#1{\null
+~\K@ys0{#1}}\K@bk\rFillcell#1{\null\K@ys1{#1}}\K@bk\rdFillcell#1{\null\K@ys
+~2{#1}}\K@bk\dFillcell#1{\null\K@ys3{#1}}\K@bk\ldFillcell#1{\null\K@ys
+~4{#1}}\K@bk\lFillcell#1{\null\K@ys5{#1}}\K@bk\luFillcell#1{\null\K@ys
+~6{#1}}\K@bk\uFillcell#1{\null\K@ys7{#1}}\K@bk\ruFillcell#1{\null\K@ys
+~8{#1}}\K@bk\bFillcell#1{\null\K@ys{10}{#1}}\K@bk\Fillcell#1{\K@bw\K@Dn
+~{#1}}\def\D@Boxcellb@x#1#2{\lower\K@vj\hbox{$#1{#2}$}}\K@bk\aBoxcell
+~#1{\null\K@yt0{#1}}\K@bk\rBoxcell#1{\null\K@yt1{#1}}\K@bk\rdBoxcell#1{\null
+~\K@yt2{#1}}\K@bk\dBoxcell#1{\null\K@yt3{#1}}\K@bk\ldBoxcell#1{\null\K@yt
+~4{#1}}\K@bk\lBoxcell#1{\null\K@yt5{#1}}\K@bk\luBoxcell#1{\null\K@yt
+~6{#1}}\K@bk\uBoxcell#1{\null\K@yt7{#1}}\K@bk\ruBoxcell#1{\null\K@yt
+~8{#1}}\K@bk\bBoxcell#1{\null\K@yt{10}{#1}}\K@bk\Boxcell#1{\K@bw\K@Do
+~{#1}}\def\D@Ruleb@x#1#2{\lower\K@vj\hbox{$\vcenter{ \hbox{\vrule width#2
+~height #1}}$}}\K@bk\aRule{\null\K@yv0}\K@bk\rRule{\null\K@yv1}\K@bk\rdRule
+~{\null\K@yv2}\K@bk\dRule{\null\K@yv3}\K@bk\ldRule{\null\K@yv4}\K@bk\lRule
+~{\null\K@yv5}\K@bk\luRule{\null\K@yv6}\K@bk\uRule{\null\K@yv7}\K@bk\ruRule
+~{\null\K@yv8}\K@bk\bRule{\null\K@yv{10}}\K@bk\Rule{\K@bw\K@Dp}\def\K@hv
+~#1#2{\hbox to \z@{\ifnum#1=0 \else\hss\fi\smash{#2}\ifnum#1=2 \else\hss\fi
+~}}\def\K@ve#1@#2,#3@#4{\llap{\hbox to \K@en sp{\hskip#2 \smash{\hbox{\raise
+~#3\hbox{\K@hv#1{#4}}}}\hss}}\K@dx{\K@Fh\K@hv\K@Fh\K@wi\K@Fh\K@wh\K@Fh
+~\K@vm\K@Fh\K@vg\K@Fh\K@wc\K@Fh\K@we\K@Fh\K@ha\K@Fh\K@pt\K@Fh\endgr\K@Fh
+~\K@vj\K@Fh\K@cg}{{#2}{#3}{#1{#4}}}}\def\K@Fh#1{\def#1{\noexpand#1}}\def
+~\K@Ej#1@#2,#3@#4{\K@sc @#2,\K@Fi @#3,\K@Fj @\K@ve#1@\K@Fi sp,\K@Fj
+~sp@{#4}}\def\K@Fk @#1,#2@#3,#4@{\K@do=#1\K@dm\ifdim\K@do<\z@\K@di=\K@do
+~\edef#2{\the\K@di}\else\K@Fl#1.@\K@Fm\K@Fn\ifnum\K@Fm<\K@hx\K@di=\csname
+~D@X\K@Fm @\endcsname\ifnum\K@Fn>0 \K@do=\csname D@dx\K@Fm @\endcsname sp
+~\K@do=.\K@Fn\K@do\advance\K@di by \K@do\fi\edef#2{\the\K@di}\else\K@di
+~=\K@Fm\advance\K@di by -\K@hx\K@do=\csname D@X\K@hx @\endcsname sp
+~\advance\K@do by \the\K@di\K@dm\advance\K@do by .\K@Fn\K@dm\K@di=\K@do
+~\edef#2{\the\K@di}\fi\fi\K@do=#3\K@dn\ifdim\K@do<\z@\K@di=\K@do\edef
+~#4{\the\K@di}\else\K@Fl#3.@\K@Fo\K@Fp\ifnum\K@Fo<\K@ho\K@di=\csname
+~D@Y\K@Fo @\endcsname\ifnum\K@Fp>0 \K@do=\csname D@dy\K@Fo @\endcsname sp
+~\K@do=.\K@Fp\K@do\advance\K@di by \K@do\fi\edef#4{\the\K@di}\else\K@di
+~=\K@Fo\advance\K@di by -\K@ho\K@do=\K@eo sp \advance\K@do by \the\K@di
+~\K@dn\advance\K@do by .\K@Fp\K@dn\K@di=\K@do\edef#4{\the\K@di}\fi\fi
+~}\def\K@sd @#1,#2@#3,#4@{\K@do=#1\K@dm\K@di=\K@do\edef#2{\the\K@di}\K@do
+~=#3\K@dn\K@di=\K@do\edef#4{\the\K@di}}\def\K@Ab @#1,#2@#3,#4@{\setbox
+~\K@du=\hbox{\global\K@do=#1\K@dm=0pt}\K@di=\K@do\edef#2{\the\K@di}\setbox
+~\K@du=\hbox{\global\K@do=#3\K@dn=0pt}\K@di=\K@do\edef#4{\the\K@di}}\def
+~\K@Fl#1.#2@#3#4{\def\K@gl{#1}\ifx\K@gl\K@ci\let#3\K@cm\else\def#3{#1}\fi
+~\def\K@gl{#2}\ifx\K@gl\K@ci\let#4\K@cm\else\edef#4{\K@At#2@}\fi}\def
+~\K@vm#1#2{\K@cg{currentpoint currentpoint translate #1 neg #2 atan rotate
+~neg exch neg exch translate}}\def\K@vg#1{\K@cg{currentpoint currentpoint
+~translate #1 neg rotate neg exch neg exch translate}}\def\K@vf{\K@cg
+~{gsave}}\def\K@vi{\K@cg{grestore}}\def\K@Fq#1,#2@#3,#4@#5{\K@Ej
+~#2@#3,#4@{\hbox{\K@vf\K@vg{#1}\K@hv{#2}{#5}\K@vi}}}
+??R\begingroup\K@ce\def\K@zl#1{\K@Fr{\lower\K@vj\hbox{$\labelstyle#1$}}}\def
+??R\K@zm#1{\K@Fr{\lower\K@vj\hbox{$\vertexstyle#1$}}}\def\K@zi#1{\K@Fr
+??R{#1}}\def\K@zj#1{\K@Fr{\lower\K@vj\hbox{$\vcenter{\hbox{#1}}$}}}\def\K@zk
+??R#1{\K@Fr{\lower\K@vj\hbox{$#1$}}}\def\K@zo{\K@zm{\diagramdot}}%
+??O\def\K@zn#1{\K@rt\let\K@rp\K@ci\def\K@rt{\egroup\K@Fs{#1}}\setbox\K@du
+??O=\hbox\bgroup}\def\K@Fs#1{\ifx\K@rp\K@ci\else\def\K@bf{\K@Ft
+??O{#1}}\expandafter\K@bf\K@rp @\fi}\def\K@Ft#1#2,#3@{{\K@ji\K@ed
+??O\expandafter\xdef\csname D@pt@#1@x\endcsname{#2}\expandafter\xdef\csname
+??OD@pt@#1@y\endcsname{#3}\global\expandafter\let\csname
+??OD@pt@#1@type\endcsname\relax\xdef\K@in{{#1}\K@in}}}\endgroup
+??R\def\K@Fr#1{\K@rt\def\K@rt{\egroup\K@Fu}\let\K@pu\K@ci\let\K@rp\K@ci\let
+??R\K@rm\K@ci\let\K@rq\relax\let\K@rs\relax\let\K@vh\K@cm\let\K@vk\K@cn\let
+??R\K@pb\K@cn\let\K@qj\K@cm\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm
+??R\setbox\K@dt=\hbox{\K@gx#1}\K@dx{\K@dr={\K@gx#1}\edef\K@bf{\the\wd\K@dt
+??R}}{{}{0}{\K@do=\K@bf\setbox\K@dt=\hbox{\the\K@dr}}}\setbox\K@du=\hbox
+??R\bgroup}\def\K@Fu{\ifx\K@rp\K@ci\else\K@Cu\relax\ifx\K@rm\K@ci\K@Fv
+??R\else\K@Fw\fi\K@bc{\hskip\K@qm sp\raise\K@ql sp \K@hv2{\K@hv0{\K@Bs\box
+??R\K@dt\K@Bt}\hskip\K@vk\K@do}}\fi}\def\K@Fv{\expandafter\K@Cv\K@rp @\K@tn
+??R\K@tm\ifx\K@rq\relax\edef\K@bc{\noexpand\K@sc @\K@tn,\noexpand\K@tu
+??R@\K@tm,\noexpand\K@tv @}\else\def\K@bc{\let\K@tu\K@tn\let\K@tv\K@tm}\fi
+??R\K@bc\K@di=\K@tu\advance\K@di by \K@qj\relax\K@dj=\K@tv\advance\K@dj by
+??R\K@qi\relax\K@do=\wd\K@dt\edef\K@bc##1{\noexpand\K@ve0@\the\K@di sp,\the
+??R\K@dj sp@{\noexpand\K@vf\noexpand\K@vg{\K@vh}##1\noexpand\K@vi}}}\def\K@Fw
+??R{\expandafter\K@Cv\K@rp @\K@tn\K@tm\ifx\K@rq\relax\edef\K@bc{\noexpand
+??R\K@sc @\K@tn,\noexpand\K@tu @\K@tm,\noexpand\K@tv @}\else\def\K@bc{\let
+??R\K@tu\K@tn\let\K@tv\K@tm}\fi\K@bc\expandafter\K@Cv\K@rm @\K@tp\K@to\ifx
+??R\K@rs\relax\edef\K@bc{\noexpand\K@sc @\K@tp,\noexpand\K@uc @\K@to
+??R,\noexpand\K@ud @}\else\def\K@bc{\let\K@uc\K@tp\let\K@ud\K@to}\fi\K@bc
+??R\K@ue\K@uh\K@di=\K@tu\advance\K@di by \K@qj\relax\K@dj=\K@tv\advance\K@dj
+??Rby \K@qi\relax\K@do=\wd\K@dt\K@dp=\K@tw sp \edef\K@bc##1{\noexpand\K@ve
+??R0@\the\K@di sp,\the\K@dj sp@{\noexpand\K@vf\noexpand\K@vm{\K@uf}{\K@ug
+??R}\K@dp=\the\K@dp\hskip\K@pb\K@dp\noexpand\K@wc{\K@uf}{\K@ug}\noexpand
+??R\K@vg{\K@vh}##1\noexpand\K@vi}}}\endgroup
+??W\begingroup\K@ce\def\K@si{\K@sg\expandafter\K@Fx\expandafter\K@Fy\K@hy
+??W{}{}\expandafter\K@Fx\expandafter\K@Fz\K@ic{}{}\expandafter\K@Fx
+??W\expandafter\K@Ga\K@ia{}{}\expandafter\K@Fx\expandafter\K@Gb\K@id
+??W{}{}\expandafter\K@Gc\expandafter\K@ie\K@ie{}{}\expandafter\K@Fx
+??W\expandafter\K@Gd\K@ie{}{}\expandafter\K@Fx\expandafter\K@Ge\K@ih
+??W{}{}\expandafter\K@Gc\expandafter\K@ii\K@ii{}{}\expandafter\K@Fx
+??W\expandafter\K@Gf\K@ii{}{}\expandafter\K@Fx\expandafter\K@Gg\K@if
+??W{}{}\expandafter\K@Gc\expandafter\K@ig\K@ig{}{}\expandafter\K@Fx
+??W\expandafter\K@Gh\K@ig{}{}\K@Gi\global\expandafter\let\expandafter\K@en
+??W\csname D@X\K@sa @\endcsname\expandafter\K@Fx\expandafter\K@Gj\K@hz
+??W{}{}\expandafter\K@Fx\expandafter\K@Gk\K@ib{}{}\K@Gl\global\expandafter
+??W\let\expandafter\K@eo\csname D@Y\K@ry @\endcsname\K@sj}\def\K@Fx
+??W#1#2#3{\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\relax\else\def\K@bc
+??W{#1{#2}{#3}\K@Fx#1}\fi\K@bc}\def\K@Gc#1{\let#1\K@ci\let\K@bf\K@ci\K@di
+??W=0 \K@Gm#1}\def\K@Gm#1#2#3{\def\K@gl{#2}\ifx\K@gl\K@ci\xdef#1{#1\K@bf}\let
+??W\K@bc\relax\else\def\K@bc{\K@Gm#1}\ifnum#2>\K@di\xdef#1{#1\K@bf}\def
+??W\K@bf{{#2}{#3}}\K@di=#2 \else\xdef\K@bf{{#2}{#3}\K@bf}\fi\fi\K@bc}\def
+??W\K@Gb#1#2{\K@Gn{#2}{#1}{#2}{-1}{<0}{\K@Go d\K@Gp}}\def\K@Gg#1#2{\K@Gn
+??W{#2}{#1}{#2}{-1}{<0}{\K@Go m\K@Gq}}\def\K@Ge#1#2{\K@Gn
+??W{#2}{#1}{#2}{-1}{<0}{\K@Go a\K@Gr}}\def\K@Go#1#2#3#4#5{\K@Gs{#1l}\K@Gt
+??W{#4}{#5}{#3}{#5}\multiply\K@dj by -1 #2{#5}{\K@dj}}\def\K@Gd#1#2{\K@Gn
+??W{#2}{#1}{#2}1{>\K@hx}{\K@Gu d\K@Gv}}\def\K@Gh#1#2{\K@Gn{#2}{#1}{#2}1{>\K@hx
+??W}{\K@Gu m\K@Gq}}\def\K@Gf#1#2{\K@Gn{#2}{#1}{#2}1{>\K@hx}{\K@Gu a\K@Gr}}\def
+??W\K@Gu#1#2#3#4#5{\K@Gs{#1r}\K@Gt{#4}{#5}{#5}{#3}#2{#5}{\K@dj}}\def\K@Gt
+??W#1#2#3#4{\K@sg\K@ts{#1}{#2}\K@bf\expandafter\K@El\K@bf\K@ua\K@un\K@uo
+??W\K@dj=\K@tz\advance\K@dj by \K@ua\divide\K@dj by 2 \advance\K@dj by
+??W\csname D@X#3@\endcsname\multiply\K@dj by -1 \advance\K@dj by \csname
+??WD@X#4@\endcsname\relax}\def\K@Fy#1#2{\K@Gs{dx}\K@Gw X{#1}{#2}\K@Gp\K@hx
+??W1}\def\K@Gj#1#2{\K@Gs{dy}\K@Gw Y{#1}{#2}\K@Gx\K@ho1}\def\K@Ga#1#2{\K@Gs
+??W{mx}\K@Gw X{#1}{#2}\K@Gq\K@hx0}\def\K@Gk#1#2{\K@Gs{my}\K@Gw Y{#1}{#2}\K@Gy
+??W\K@ho0}\def\K@Fz#1#2{\K@Gs{ax}\K@Gw{}{#1}{#2}\K@Gr0{}}\def\K@Gw
+??W#1#2#3#4#5#6{\setbox\K@du=\hbox{$\K@dp=#3pt$}\def\K@bc{#4{#2}}\ifdim\wd
+??W\K@du=\z@\K@di=#2 \advance\K@di by 1 \ifnum\K@di>#5 \K@dp=\z@\else\K@dp
+??W=\csname D@#1\the\K@di @\endcsname sp \multiply\K@dp by -1 \advance\K@dp
+??Wby \csname D@#1#2@\endcsname sp \K@dp=#3\K@dp\ifcase#6 \multiply\K@dp by
+??W-1 \or\edef\K@bc{\noexpand#4{\the\K@di}}\fi\fi\else\K@dp=#3 \fi\K@dk
+??W=\K@dp\K@bc{\K@dk}}\endgroup
+~\K@bg\flexible{\K@cz\def\K@Gz{\K@Ha}\def\K@Ev{\K@Ey}\def\K@Hb{\K@Hc}\def
+~\K@sq{\K@ta}\def\K@sr{\K@sv}\let\K@om\K@oo\def\K@sf{\K@Hd}}\def\K@He{\def
+~\K@Gz{\K@Hf}\let\K@Ev\K@cj\let\K@Hb\relax\def\K@sq{\K@ta0\K@tb}\let\K@sr
+~\relax\let\K@sf\relax}\let\K@te\relax
+??V\def\K@Hd{\K@Gs{A}\csname D@as@1@\endcsname\K@Gs{W}\csname
+??VD@ws@1@\endcsname\K@Gs{C}\csname D@cs@1@\endcsname}%
+~\K@bg\gravitateleft{\K@cz\let\K@te\K@cm}\K@bg\gravitateright{\K@cz\def\K@te
+~{\K@hx}}
+??V\def\K@Hg#1#2{\K@Gn{#2}{#1}{#2}{-1}{<0}\K@Hh}\def\K@Gn#1#2#3#4#5#6{\K@di
+??V=#1 \advance\K@di by #4\relax\ifnum\K@di#5\relax\let\K@bc\K@ck\else
+??V\K@ts{#2}{\the\K@di}\K@bf\ifx\K@bf\relax\edef\K@bc{\noexpand\K@Gn{\the
+??V\K@di}{#2}{#3}{#4}}\else\expandafter\K@El\K@bf\K@tz\K@uk\K@ul\edef\K@bc
+??V{\noexpand\K@Hi{\the\K@di}{#2}{#3}{#4}}\fi\fi\K@bc{#5}{#6}}\def\K@Hi
+??V#1#2#3#4#5#6{#6{#1}{#2}{#3}}\def\K@Hh#1#2#3{\K@sg\K@ts{#2}{#3}\K@bf
+??V\expandafter\K@El\K@bf\K@ua\K@un\K@uo\K@dk=\K@tz\advance\K@dk by \K@ua
+??V\divide\K@dk by 2 \advance\K@dk by \csname D@X#1@\endcsname\multiply\K@dk
+??Vby -1 \advance\K@dk by \csname D@X#3@\endcsname\K@dj=\csname
+??VD@X#1@\endcsname\advance\K@dj by \K@dm\multiply\K@dj by -1 \advance\K@dj
+??Vby \csname D@X#3@\endcsname\relax\ifnum\K@dk<\K@dj\K@dj=\K@dk\fi\ifnum
+??V\K@dj<0\relax\def\K@bc{\global\let\K@sc\K@Fk\K@tc{#1}{#3}\K@Hj\K@Hk\K@Hl
+??V}\else\let\K@bc\relax\fi\K@bc}\def\K@Hj#1#2{\K@Gr{#1}{\K@dj}\K@td
+??V{#2}{#1}}\def\K@Hl#1#2{\multiply\K@dj by -1 \K@Gr{#2}{\K@dj}\K@td
+??V{#1}{#2}}\def\K@Hk#1#2{\K@dj=\K@ua\divide\K@dj by 2 \advance\K@dj by
+??V\csname D@X#1@\endcsname\multiply\K@dj by -1 \K@Gr{#1}{\K@dj}\K@dj=\K@tz
+??V\divide\K@dj by 2 \multiply\K@dj by -1 \advance\K@dj by \csname
+??VD@X#2@\endcsname\multiply\K@dj by -1 \K@Gr{#2}{\K@dj}}\def\K@tc
+??V#1#2#3#4#5{{\K@di=#1 \multiply\K@di by 10 \advance\K@di by -\K@ij\K@dj=#2
+??V\multiply\K@dj by 10 \advance\K@dj by -\K@ij\K@dk=\K@di\multiply\K@dk by
+??V\K@dj\ifnum\K@dk<0 \gdef\K@bc{#4}\else\ifnum\K@di<0 \gdef\K@bc{#3}\else
+??V\gdef\K@bc{#5}\fi\fi }\K@bc{#1}{#2}}\def\K@td#1#2{\K@Hm
+??V{B:c#1-#2}\expandafter\xdef\csname D@Bindings@#1@\endcsname{{#2}\csname
+??VD@Bindings@#1@\endcsname}}%
+~\K@bk\displaybindings{\K@cz\let\K@Hm\K@Fe\let\K@sk\K@Fe}\let\K@Hm\K@cj
+~\K@bg\displayall{\K@cz\let\K@Hm\K@Fe\let\K@Gs\K@Fe\let\K@Fb\K@Fe\let
+~\K@sk\K@Fe}
+??V\def\K@Hn#1#2#3{\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\K@ck\else
+??V\expandafter\ifx\csname D@Bound@#2@#3@\endcsname\relax {\advance#1 by
+??V\csname D@X#3@\endcsname\expandafter\xdef\csname D@X#3@\endcsname{\the
+??V#1}}\K@Gs{X#3}\expandafter\let\csname D@Bound@#2@#3@\endcsname\K@ci\def
+??V\K@bc{\def\K@bc{\K@Hn{#1}{#3}}\expandafter\expandafter\expandafter\K@bc
+??V\csname D@Bindings@#3@\endcsname{}\K@Hn}\else\let\K@bc\K@Hn\fi\fi\K@bc
+??V{#1}{#2}}\def\K@Fc#1#2#3#4{\let\K@tz\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul
+??V\let\K@ua\K@cm\K@Ho{#1}{#3}\K@ua\K@un\K@uo\K@sg\K@dj=\K@tz\divide\K@dj
+??Vby 2 \advance\K@dj by \csname D@X#2@\endcsname\relax\ifnum#4>\K@Hp\relax
+??V\advance\K@dj by #4\else\advance\K@dj by \K@Hp\fi\multiply\K@dj by -1
+??V\advance\K@dj by \csname D@X#3@\endcsname\K@di=\K@ua\divide\K@di by -2
+??V\advance\K@dj by \K@di\ifnum\K@dj<0 \K@tc{#2}{#3}\K@Hq{\K@Hr{#4}}\K@Hs\fi
+??V}\def\K@Hq#1#2{\K@Gr{#1}{\K@dj}\K@td{#2}{#1}}\def\K@Hs#1#2{\multiply\K@dj
+??Vby -1 \K@Gr{#2}{\K@dj}\K@td{#1}{#2}}\def\K@Hr#1#2#3{\K@dj=\K@ua\advance
+??V\K@dj by \K@tz\divide\K@dj by 2 \ifnum#1>\K@Hp\relax\advance\K@dj by
+??V#1\else\advance\K@dj by \K@Hp\fi\divide\K@dj by 2 \K@di=\csname
+??VD@X#3@\endcsname\multiply\K@di by -1 \advance\K@di by \K@dj\K@Gr{#3}{\K@di
+??V}\K@di=\csname D@X#2@\endcsname\advance\K@di by \K@dj\multiply\K@di by
+??V-1 \K@Gr{#2}{\K@di}}\def\K@Gr#1#2{\K@Gq{#1}{#2}\def\K@bc{\K@Hn
+??V{#2}{#1}}{\expandafter\expandafter\expandafter\K@bc\csname
+??VD@Bindings@#1@\endcsname{}}}%
+~\def\displaymovements{\K@cz\let\K@Gs\K@Fe\let\K@sk\K@Fe}\let\K@Gs\K@cj
+~\def\K@Fe#1{\message{(#1)}}
+??V\def\K@Gp#1#2{\K@Ht X{#1}{#2}1{<\K@hx}}\def\K@Gv#1#2{\K@Ht
+??VX{#1}{#2}{-1}{>0}}\def\K@Gx#1#2{\K@Ht Y{#1}{#2}1{<\K@ho}}\def\K@Ht
+??V#1#2#3#4#5{\K@di=#2 \K@cu\K@Hu{#1}{\the\K@di}{#3}\ifnum\K@di#5 \advance
+??V\K@di by #4 \K@cv}\def\K@Gq#1#2{\K@Hu X{#1}{#2}}\def\K@Gy#1#2{\K@Hu
+??VY{#1}{#2}}\def\K@Hu#1#2#3{\global\let\K@sc\K@Fk\K@Gs{#1#2}{\advance#3 by
+??V\csname D@#1#2@\endcsname\expandafter\xdef\csname D@#1#2@\endcsname{\the
+??V#3}}}\def\K@Fd#1#2#3#4#5{\ifcase#5\relax\K@Hv{#2}{#4}\or\K@Hw
+??V{#1}{#2}{#3}{#4}\or\K@Hx{#1}{#2}{#3}{#4}\or\K@Hy{#1}{#2}{#3}{#4}\fi}\def
+??V\K@Hv#1#2{\K@sg\K@dj=\csname D@X#1@\endcsname\advance\K@dj by \K@Hz\relax
+??V\multiply\K@dj by -1 \advance\K@dj by \csname D@X#2@\endcsname\relax
+??V\ifnum\K@dj<0 \K@tc{#1}{#2}\K@Hq\K@Ia\K@Hs\fi}\def\K@Hw#1#2#3#4{\K@sg\let
+??V\K@tz\K@cm\let\K@gl\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul\K@Ho{#1}{#4}\K@gl
+??V\K@un\K@uo\K@Ib{#2}{#4}\K@dj\K@tz\K@gl\let\K@gl\K@cm\let\K@ua\K@cm\K@Ho
+??V{#3}{#2}\K@gl\K@uk\K@ul\K@Ho{#3}{#4}\K@ua\K@un\K@uo\K@Ib{#2}{#4}\K@dk
+??V\K@gl\K@ua\relax\ifnum\K@dk<\K@dj\K@dj=\K@dk\fi\ifnum\K@dj<0 \K@tc
+??V{#2}{#4}\K@Hq\K@Ic\K@Hs\fi}\def\K@Hx#1#2#3#4{\K@sg\let\K@tz\K@cm\let
+??V\K@ua\K@cm\let\K@gl\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul\K@Ho{#3}{#4}\K@ua
+??V\K@un\K@uo\K@Ho{#3}{#2}\K@gl\K@uk\K@ul\K@Ib{#2}{#4}\K@dj\K@gl\K@ua\relax
+??V\ifnum\K@dj<0 \K@tc{#2}{#4}\K@Hq\K@Ic\K@Hs\fi}\def\K@Hy#1#2#3#4{\K@sg\let
+??V\K@tz\K@cm\let\K@ua\K@cm\let\K@gl\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul\K@Ho
+??V{#3}{#4}\K@ua\K@un\K@uo\K@Ho{#1}{#4}\K@gl\K@un\K@uo\K@Ib{#2}{#4}\K@dj
+??V\K@tz\K@gl\relax\ifnum\K@dj<0 \K@tc{#2}{#4}\K@Hq\K@Ic\K@Hs\fi}\def\K@Ib
+??V#1#2#3#4#5{#3=#4 \advance#3 by #5 \divide#3 by 2 \advance#3 by \csname
+??VD@X#1@\endcsname\advance#3 by \K@Id\multiply#3 by -1 \advance#3 by
+??V\csname D@X#2@\endcsname}\def\K@Ic#1#2{\K@dk=\K@tz\multiply\K@dk by -1
+??V\advance\K@dk by \K@ua\divide\K@dk by 2 \advance\K@dk by \csname
+??VD@X#1@\endcsname\advance\K@dk by \csname D@X#2@\endcsname {\advance\K@dj
+??Vby \K@dk\divide\K@dj by -2 \K@Gr{#2}{\K@dj}}{\advance\K@dj by -\K@dk\divide
+??V\K@dj by 2 \K@Gr{#1}{\K@dj}}}\def\K@Ia#1#2{\K@di=\K@Hz\divide\K@di by 2
+??V\K@dj=\csname D@X#2@\endcsname\multiply\K@dj by -1 \advance\K@dj by \K@di
+??V\K@Gr{#2}{\K@dj}\K@dj=\csname D@X#1@\endcsname\advance\K@dj by \K@di
+??V\multiply\K@dj by -1 \K@Gr{#1}{\K@dj}}\def\K@Ho#1#2#3#4#5{\K@ts
+??V{#1}{#2}\K@bf\ifx\K@bf\relax\else\expandafter\K@El\K@bf#3#4#5\fi}\def
+??V\K@Ie#1#2#3{{\K@di=0 \K@dk=0 \K@cu\expandafter\xdef\csname D@#1\the\K@di
+??V@\endcsname{\the\K@dk}\ifnum\K@di<#3\relax\advance\K@di by 1 \advance\K@dk
+??Vby #2\relax\K@cv }}\def\K@Hf{\K@Ie X\K@dm\K@hx}\def\K@Ha{\K@Ie X\z@\K@hx
+??V}\def\K@If{\K@Ie Y\K@dn\K@ho}\def\K@sg{\K@Gz\K@If\let\K@sg\relax}\def\K@Ig
+??V#1#2#3{\K@di=0 \K@cu\ifnum\K@di<#3\relax\K@dj=\K@di\K@dk=\csname
+??VD@#1\the\K@di @\endcsname\multiply\K@dk by -1 \advance\K@di by 1 \advance
+??V\K@dk by \csname D@#1\the\K@di @\endcsname\expandafter\xdef\csname
+??VD@d#2\the\K@dj @\endcsname{\the\K@dk}\K@cv}\def\K@sj{\K@sg\K@Ig Xx\K@hx
+??V\K@Ig Yy\K@ho}\def\K@Ih#1#2#3#4{\K@di=\csname D@#10@\endcsname\K@dj=0
+??V\K@dk=\K@di\global\let#3\K@cm\global\let#4\K@cm\K@cu\ifnum\csname
+??VD@#1\the\K@dj @\endcsname<\K@di\xdef#3{\the\K@dj}\K@di=\csname D@#1\the
+??V\K@dj @\endcsname\fi\ifnum\csname D@#1\the\K@dj @\endcsname>\K@dk\xdef
+??V#4{\the\K@dj}\K@dk=\csname D@#1\the\K@dj @\endcsname\fi\ifnum\K@dj<#2
+??V\advance\K@dj by 1 \K@cv\ifnum\K@di=0 \else\multiply\K@di by -1 \K@dj=0
+??V\K@cu\K@dk=\csname D@#1\the\K@dj @\endcsname\advance\K@dk by \K@di
+??V\expandafter\xdef\csname D@#1\the\K@dj @\endcsname{\the\K@dk}\ifnum\K@dj
+??V<#2\relax\advance\K@dj by 1 \K@cv\fi}\def\K@Gi{\K@Ih X\K@hx\K@rz\K@sa
+??V}\def\K@Gl{\K@Ih Y\K@ho\K@rx\K@ry}\def\K@tg{\let\K@rt\K@ru\let\K@ni\K@cm
+??V\K@Ii\global\setbox\K@dt=\hbox\bgroup$\vertexstyle\K@gy\K@gz\K@rv}%
+~\def\K@rv{\let\box\copy\let\unhbox\unhcopy\let\unvbox\unvcopy}\def\K@ru
+~{$\egroup}
+??A\begingroup\K@ce\def\K@Ij{\ifx\K@Ik\relax\expandafter\global\expandafter
+??A\edef\K@tf{\let\expandafter\noexpand\csname D@\the\K@df @\the\K@de
+??A@\endcsname\noexpand\K@ci}\else\expandafter\global\expandafter\let\K@tf
+??A\relax\fi}%
+~\def\K@Il{\expandafter\global\expandafter\let\K@tf\relax}\K@bg\dotted{\K@cz
+~\K@cc\def\K@yr{\K@Im}\def\K@Ii{\K@In}\def\K@Il{\K@Ij}\def\K@Io{\K@Ip}}\let
+~\K@yr\relax\let\K@Ii\relax\let\K@Io\K@ck\def\K@oe{\global\let\K@Ik\relax}
+??A\def\K@In{\let\K@Ik\K@ci}\def\K@Ip#1#2{\expandafter\let\csname
+??AD@#1@#2@\endcsname\K@ci}%
+??V\def\K@th{\K@rt\K@ts{\the\K@df}{\the\K@de}\K@bf\ifx\K@bf\relax\K@Il
+??V\else\K@Hb\fi}%
+??A\def\K@Im{\K@di=0 \K@dj=0 \K@cu\K@cu\expandafter\let \expandafter\K@bf
+??A\csname D@\the\K@di @\the\K@dj @\endcsname\ifx\K@bf\K@ci\else\K@dk=\K@ho
+??A\advance\K@dk by -\K@di\edef\K@bc{\noexpand\K@Ej1@\the\K@dj,\the\K@dk
+??A@}{\K@bc{\lower\K@vj\hbox{$\vertexstyle\diagramdot$}}}\fi\ifnum\K@dj<\K@hx
+??A\advance\K@dj by 1 \K@cv\ifnum\K@di<\K@ho\advance\K@di by 1 \K@dj=0
+??A\K@cv}\endgroup
+??V\def\K@Hc{{\K@di=\K@sx\relax\advance\K@di by 1 \K@Fb{C:r\the\K@df,c\the
+??V\K@de}\K@dj=\K@de\multiply\K@dj by 10 \ifnum\K@dj<\K@ij\relax\let\K@bc
+??V\K@cr\else\let\K@bc\K@cq\fi\expandafter\xdef\csname D@cs@\K@sx
+??V@\endcsname{\K@bc{\noexpand\K@Hg{\the\K@df}{\the\K@de}}{\expandafter
+??V\noexpand\csname D@cs@\the\K@di @\endcsname}}\xdef\K@sx{\the\K@di}}\global
+??V\expandafter\let\csname D@cs@\K@sx @\endcsname\relax}\def\K@Ex
+??V#1@#2@#3@#4@#5@#6@#7@#8@#9@{\def\K@tm{#3}\def\K@tn{#4}\def\K@to{#5}\def
+??V\K@tp{#6}\K@Iq\K@tm\K@tn\K@tz\K@uk\K@ul\K@Iq\K@to\K@tp\K@ua\K@un\K@uo
+??V\edef\K@pb{\K@Ep0#8}\expandafter\K@Ir\K@pb\K@pb\K@rl\edef\K@pc{\K@Ep
+??V1#8}\expandafter\K@Ir\K@pc\K@pc\K@pd\edef\K@qb{\K@Ep2#8}\expandafter\K@Ir
+??V\K@qb\K@qb\K@py\edef\K@qc{\K@Ep3#8}\expandafter\K@Ir\K@qc\K@qc\K@qd\edef
+??V\K@pz{\K@Ep4#8}\expandafter\K@Ir\K@pz\K@pz\K@qa\edef\K@pu{\K@Ep
+??V5#8}\expandafter\K@Ir\K@pu\K@pu\K@qt\ifx\K@pu\K@cl\let\K@qs\K@ci\else
+??V\let\K@qs\relax\fi\edef\K@qj{\K@Ep6#8}\expandafter\K@Ir\K@qj\K@qj\K@qm
+??V\edef\K@qi{\K@Ep7#8}\expandafter\K@Ir\K@qi\K@qi\K@ql\let\K@rq\relax\let
+??V\K@rs\relax\K@di=\K@ho\advance\K@di by -\K@tm\edef\K@tm{\the\K@di}\K@di
+??V=\K@ho\advance\K@di by -\K@to\edef\K@to{\the\K@di}\edef\K@qy{\K@Ep
+??V0#9{}{}{}{}{}}\edef\K@re{\K@Ep1#9{}{}{}{}{}}\edef\K@rf{\K@Ep
+??V2#9{}{}{}{}{}}\expandafter\K@Is\K@qy @\ifx\K@rb\relax\ifx\K@pb\K@ci\edef
+??V\K@pb{\K@Dl#2}\fi\fi\expandafter\K@tt{#1}{#2}{#7}}\def\K@Is#1#2@{\ifcase
+??V#1 \let\K@rc\relax\let\K@rb\relax\or\let\K@rc\K@ci\let\K@rb\relax\def
+??V\K@qy{#2}\or\let\K@rc\K@ci\let\K@rb\K@ci\def\K@qy{#2}\fi}\def\K@Ir
+??V#1#2#3#4{\def#3{#1}\def#4{#2}}\def\K@Iq#1#2#3#4#5{\K@ts{#1}{#2}\K@bf\ifx
+??V\K@bf\relax\let#3\K@cm\let#4\K@cm\let#5\K@cm\else\expandafter\K@El\K@bf
+??V#3#4#5\fi}\def\K@El#1@#2@#3@#4#5#6{\def#4{#1}\def#5{#2}\def#6{#3}}\def
+??V\K@ts#1#2#3{\expandafter\let \expandafter#3\csname D@whd@#1@#2@\endcsname}%
+~\def\K@ub#1by #2#3{\K@di=#3 \multiply\K@di by #2 \advance\K@di by #1 \edef
+~#1{\the\K@di}}\def\K@ty#1#2#3{\ifx#2\K@ci\let#2\K@cm\else\setbox\K@du
+~=\hbox{\K@do=#2pt}\ifdim\wd\K@du>\z@\K@do=#2 \K@di=\K@do\multiply\K@di by
+~#1 \edef#2{\the\K@di}\else\ifx#3\K@ci\let#2\K@cm\else\K@do=#3sp \K@do
+~=#2\K@do\K@di=\K@do\multiply\K@di by -2 \advance\K@di by #3 \divide\K@di
+~by -2 \edef#2{\the\K@di}\fi\fi\fi}\def\K@vs#1=#2\times#3\over#4{\ifnum
+~#3<10737418 #1=#3 \multiply#1 by 100 \divide#1 by #4\relax\multiply#1 by
+~#2\relax\divide#1 by 100 \else {\ifnum#2<0 \multiply#2 by -1 \multiply#4
+~by -1 \fi\K@It#1=#2\times#3\over#4}\fi}\def\K@It#1=#2\times#3\over#4{\K@de
+~=1 \K@cu\multiply\K@de by 2 \ifnum#2>\K@de\K@cv\K@df=#3 \divide\K@df by
+~\K@de\divide#4 by \K@de\multiply\K@df by #2\relax\divide\K@df by
+~#4\relax\xdef\K@bc{#1=\the\K@df}\aftergroup\K@bc}\def\K@uh{\K@di=\K@ug
+~\relax\ifnum\K@di<0 \multiply\K@di by -1 \fi\K@dj=\K@uf\relax\ifnum\K@dj
+~<0 \multiply\K@dj by -1 \fi\K@dk=1 \let\K@bf\K@ci\K@cu\ifnum\K@di<23171
+~\ifnum\K@dj<23171 \let\K@bf\relax\fi\fi\ifx\K@bf\K@ci\divide\K@di by 2
+~\divide\K@dj by 2 \multiply\K@dk by 2 \K@cv\multiply\K@di by \K@di
+~\multiply\K@dj by \K@dj\advance\K@di by \K@dj\expandafter\K@Iu\the\K@di
+~=\K@dj\multiply\K@dj by \K@dk\edef\K@tw{\the\K@dj}}\def\K@Iu#1=#2{{\K@dh
+~=#1\relax\K@df=32768 \K@de=0 \K@cu\divide\K@df by 2 \K@dg=\K@de\advance
+~\K@dg by \K@df\multiply\K@dg by \K@dg\ifnum\K@dg>\K@dh\else\advance
+~\K@de by \K@df\fi\ifnum\K@df>1 \K@cv\global#2=\K@de}}\def\K@wu#1=#2\mod
+~#3{#1=#2\relax\ifnum#1<0 \K@cu\advance#1 by #3\relax\ifnum#1<0 \K@cv
+~\else\K@cu\ifnum#1>#3\relax\advance#1 by -#3\relax\K@cv\ifnum
+~#1=#3\relax #1=0 \fi\fi}
+??V\def\K@yp#1@#2@#3@{\K@Io{#1}{#2}\setbox\K@du=\hbox{\K@Iv#3\K@rt}\K@dx{\K@dr
+??V={\K@Iv#3\K@rt}}{{}{0}{\setbox\K@du=\hbox{\the\K@dr}}}\K@Iw{#1}{#2}\K@di
+??V=\K@ho\advance\K@di by -#1 \edef\K@bc{\noexpand\K@Ej1@#2,\the\K@di @}\K@bc
+??V{\lower\K@vj\hbox{\box\K@dt}}}\def\K@Iw#1#2{\K@di=\wd\K@dt\divide\K@di by
+??V2 \K@dj=\K@di\advance\K@dj by \csname D@X#2@\endcsname\advance\K@dj by
+??V-\K@en\advance\K@dj by -\K@ev\relax\ifnum\K@dj>0 \advance\K@dj by \K@ev
+??V\xdef\K@ev{\the\K@dj}\fi\K@dj=\K@di\advance\K@dj by -\csname
+??VD@X#2@\endcsname\advance\K@dj by -\K@eu\relax\ifnum\K@dj>0 \advance\K@dj
+??Vby \K@eu\xdef\K@eu{\the\K@dj}\fi\K@di=\wd\K@dt\advance\K@di by \ht\K@dt
+??V\advance\K@di by \dp\K@dt\ifnum\K@di>0 \ifnum#1=\K@rx\K@dj=\ht\K@dt
+??V\ifnum\K@dj>\K@es\xdef\K@es{\the\K@dj}\fi\fi\ifnum#1=\K@ry\K@dj=\dp
+??V\K@dt\relax\ifnum\K@dj>\K@et\xdef\K@et{\the\K@dj}\fi\fi\fi}%
+??S\def\K@yz#1#2#3#4#5{\K@di=#3 \divide\K@di by 2 \K@dj=\K@di\advance\K@dj
+??Sby #1 \advance\K@dj by -\K@en\advance\K@dj by -\K@ev\relax\ifnum\K@dj>0
+??S\advance\K@dj by \K@ev\xdef\K@ev{\the\K@dj}\fi\K@dj=#1\advance\K@dj by
+??S\K@eu\multiply\K@dj by -1 \advance\K@dj by \K@di\relax\ifnum\K@dj>0
+??S\advance\K@dj by \K@eu\xdef\K@eu{\the\K@dj}\fi\K@di=#4 \advance\K@di by
+??S#2\relax\ifnum\K@di>\K@eo\relax\advance\K@di by -\K@eo\relax\ifnum\K@di
+??S>\K@es\relax\xdef\K@es{\the\K@di}\fi\fi\K@di=#2 \multiply\K@di by -1
+??S\advance\K@di by #5\relax\ifnum\K@di>0\relax\ifnum\K@di>\K@et\relax\xdef
+??S\K@et{\the\K@di}\fi\fi}\endgroup
+??V\def\K@Iv{\let\K@rt\K@ru\global\setbox\K@dt=\hbox\bgroup$\vertexstyle\K@gx
+??V}\endgroup
+~\def\K@vj{\fontdimen22\textfont2}\def\K@Ix#1#2#3#4{\let\K@gl\K@ci\K@Iy
+~#1#2{}\ifx\K@gl\relax#3\else#4\fi}\def\K@Iy#1#2#3{\if\noexpand#1#2\let
+~\K@gl\relax\fi\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\relax\else\def\K@bc
+~{\K@Iy#1#3}\fi\K@bc}\def\K@Iz{\let\K@Ja\relax\K@dr={}\futurelet\K@jr\K@Jb
+~}\def\K@Jb{\if=\noexpand\K@jr\def\K@bc{\K@Jc\expandafter\futurelet
+~\expandafter\K@jr\expandafter\K@Jd @}\else\if\noexpand\K@jr\K@bn\def
+~\K@bc{\K@pa\expandafter\futurelet\expandafter\K@jr\expandafter\K@Jb
+~@}\else\def\K@bc{\expandafter\futurelet\expandafter\K@jr\expandafter
+~\K@Je}\fi\fi\K@bc}\def\K@Jd{\if\noexpand\K@jr\K@bn\def\K@bc{\K@pa
+~\expandafter\futurelet\expandafter\K@jr\expandafter\K@Je @}\else\let\K@bc
+~\K@Je\fi\K@bc}\def\K@Jc#1@#2{#1}\def\K@pa#1@ {#1}\def\K@Je{\if-\noexpand
+~\K@jr\def\K@bc{\K@dr={-}\K@Jc\expandafter\futurelet\expandafter\K@jr
+~\expandafter\K@Jf @}\else\let\K@bc\K@Jg\fi\K@bc}\def\K@Jf{\if\noexpand
+~\K@jr\K@bn\def\K@bc{\K@pa\expandafter\futurelet\expandafter\K@jr
+~\expandafter\K@Jg @}\else\let\K@bc\K@Jg\fi\K@bc}\def\K@Jg{\if.\noexpand
+~\K@jr\ifx\K@Ja\relax\let\K@Ja\K@ci\let\K@bc\K@Jh\else\if\noexpand\K@jr
+~\K@bn\def\K@bc{\K@pa\K@Ji @}\else\let\K@bc\K@Ji\fi\fi\else\K@Ix\K@jr
+~{0123456789}{\let\K@Ji\K@Jj\let\K@bc\K@Jh}{\if\noexpand\K@jr\K@bn\def\K@bc
+~{\K@pa\K@Ji @}\else\let\K@bc\K@Ji\fi}\fi\K@bc}\def\K@Jh#1{\edef\K@bc
+~{\K@dr={\the\K@dr#1}}\K@bc\futurelet\K@jr\K@Jg}\def\K@qq{\ifcat\noexpand
+~\K@jr\bgroup\def\K@bc{\bgroup\K@ez\K@jp}\else\let\K@bc\K@jq\fi\K@bc
+~}\def\K@Jk#1#2{\K@cz\def\K@jp##1{\egroup\def\K@Ji{\expandafter\let\csname
+~D@##1@#1@\endcsname\K@ci}\def\K@Jj{\expandafter\edef\csname
+~D@##1@#1@\endcsname{\the\K@dr}}\K@Iz}\def\K@jq{\let\K@Ji\relax\def\K@Jj
+~{\edef#2{\the\K@dr}}\K@Iz}\futurelet\K@jr\K@qq}\K@bk\labelpoint{\K@Jk
+~{lpt}\K@Ff}\K@bk\ptpoint{\K@Jk{ppt}\K@Fg}\def\K@Jl{\if\noexpand\K@jr\K@bn
+~\def\K@bc{\K@pa\futurelet\K@jr\K@Jl @}\else\if+\noexpand\K@jr\def\K@bc
+~{\K@Jc\futurelet\K@jr\K@Jm @}\else\def\K@bc{\afterassignment\K@Jn\K@do}\fi
+~\fi\K@bc}\def\K@Jm{\if\noexpand\K@jr\K@bn\def\K@bc{\K@pa\futurelet\K@jr
+~\K@Jm @}\else\if=\noexpand\K@jr\def\K@bc{\afterassignment\K@Jo\K@do}\else
+~\def\K@bc{\afterassignment\K@Jn\K@do}\fi\fi\K@bc}\def\K@Jp#1{\edef
+~#1{\the\K@do}}\def\K@Jq#1{\edef#1{\the\K@di}}\def\K@Jr#1{\K@di=\K@do\K@Jq
+~#1}\def\K@Js#1{\advance\K@do by #1\edef#1{\the\K@do}}\def\K@Jt#1{\advance
+~\K@di by #1\edef#1{\the\K@di}}\def\K@Ju#1{\K@di=\K@do\K@Jt#1}\def\K@Jv
+~#1#2{\K@cz\def\K@jp##1{\egroup\def\K@Jo{\expandafter\K@Ju\csname
+~D@##1@#1@\endcsname}\def\K@Jn{\expandafter\K@Jr\csname D@##1@#1@\endcsname
+~}\futurelet\K@jr\K@Jl}\def\K@jq{\def\K@Jo{\K@Ju#2}\def\K@Jn{\K@Jr
+~#2}\futurelet\K@jr\K@Jl}\futurelet\K@jr\K@qq}\K@bk\labelwidthpad{\K@Jv
+~{lwp}\K@ou}\K@bk\labelpad{\K@Jv{lp}\K@or}\K@bk\breakpad{\K@Jv{bp}\K@Du
+~}\K@bk\cellpush{\K@Jv{cp}\K@wp}\K@bk\ptpush{\K@Jv{pp}\K@wr}\K@bk\atpush
+~{\K@Jv{ap}\K@wt}\K@bk\joinpush{\K@Jv{jp}\K@wn}\def\K@Jw#1#2{\K@cz\def\K@Jo
+~{#1}\def\K@Jn{#2}\futurelet\K@jr\K@Jl}\K@bg\MinimumCellLength{\K@Jw {\K@Ju
+~\K@ut}{\K@Jr\K@ut}}\K@bg\celllength{\K@Jw {\K@Ju\K@Ds}{\K@Jr\K@Ds}}\K@bg
+~\cellwidth{\K@Jw {\K@Ju\K@Hp}{\K@Jr\K@Hp}}\K@bg\columndist{\K@Jw {\K@Ju
+~\K@Hz}{\K@Jr\K@Hz}}\K@bg\bracewidth{\K@Jw {\K@Ju\K@Id}{\K@Jr\K@Id}}\K@bk
+~\Diagrampad{\K@Jw {\K@Js\K@Ay}{\K@Jp\K@Ay}}\K@bk\Figurepad{\K@Jw {\K@Js
+~\K@hk}{\K@Jp\K@hk}}\K@bk\Graphpad{\K@Jw {\K@Js\K@hl}{\K@Jp\K@hl}}\K@bg\tpad
+~{\K@Jw {\K@Js\K@Be}{\K@Jp\K@Be}}\K@bg\bpad{\K@Jw {\K@Js\K@Bf}{\K@Jp\K@Bf
+~}}\K@bg\lpad {\K@Jw{\K@Js\K@Bd}{\K@Jp\K@Bd}}\K@bg\rpad {\K@Jw{\K@Js\K@Bg
+~}{\K@Jp\K@Bg}}\K@bg\vpad{\K@Jw {\K@dp=\K@do\K@Js\K@Be\K@do=\K@dp\K@Js\K@Bf
+~}{\K@Jp\K@Be\let\K@Bf\K@Be}}\K@bg\hpad{\K@Jw {\K@dp=\K@do\K@Js\K@Bd\K@do
+~=\K@dp\K@Js\K@Bg}{\K@Jp\K@Bd\let\K@Bg\K@Bd}}\K@bg\framepad{\K@Jw {\K@Js
+~\K@Ci}{\K@Jp\K@Ci}}\K@bg\framerulewidth{\K@Jw {\K@Js\K@Cl}{\K@Jp\K@Cl
+~}}\K@bg\Rulewidth{\K@Jw {\K@Js\K@Dq}{\K@Jp\K@Dq}}\K@bg\Framerulewidth{\K@Jw
+~{\K@Js\K@Cw}{\K@Jp\K@Cw}}\def\K@il{\let\xgrid\K@dm\let\ygrid\K@dn}\def
+~\K@Ae{\let\xunit\K@dm\let\yunit\K@dn}\def\K@Jx#1#2{\ifdim#1<\z@\else#2\fi
+~}\K@bg\xgrid{\K@Jw {\advance\K@do by \K@dm\K@Jx\K@do{\K@dm=\K@do\let\K@Jy
+~\K@co}}{\K@Jx\K@do{\K@dm=\K@do\let\K@Jy\K@co}}}\K@bg\ygrid{\K@Jw {\advance
+~\K@do by \K@dn\K@Jx\K@do{\K@dn=\K@do\let\K@Jz\K@co}}{\K@Jx\K@do{\K@dn
+~=\K@do\let\K@Jz\K@co}}}\K@bg\grid{\K@Jw {\K@dp=\K@do\advance\K@do by \K@dm
+~\K@Jx\K@do{\K@dm=\K@do\let\K@Jy\K@co}\advance\K@dp by \K@dn\K@Jx\K@dp
+~{\K@dn=\K@dp\let\K@Jz\K@co}}{\K@Jx\K@do{\K@dm=\K@do\let\K@Jy\K@co\K@dn
+~=\K@do\let\K@Jz\K@co}}}\def\K@Ka#1#2{\ifdim#1>\z@#2\fi}\K@bg\xunit{\K@Jw
+~{\ifx\K@zx\K@ci\else\advance\K@do by \K@zx\fi\K@Ka\K@do{\K@Jp\K@zx}}{\K@Ka
+~\K@do{\K@Jp\K@zx}}}\K@bg\yunit{\K@Jw {\ifx\K@zz\K@ci\else\advance\K@do by
+~\K@zz\fi\K@Ka\K@do{\K@Jp\K@zz}}{\K@Ka\K@do{\K@Jp\K@zz}}}\K@bg\unit{\K@Jw
+~{\K@dp=\K@do\ifx\K@zx\K@ci\else\advance\K@do by \K@zx\fi\K@Ka\K@do{\K@Jp
+~\K@zx}\ifx\K@zz\K@ci\else\advance\K@dp by \K@zz\fi\K@Ka\K@dp{\edef\K@zz
+~{\the\K@dp}}}{\K@Ka\K@do{\K@Jp\K@zx\let\K@zz\K@zx}}}\K@bg\xscale{\K@cz\let
+~\K@Ji\relax\def\K@Jj{\K@do=\the\K@dr\K@dm\ifdim\K@do<\z@\else\K@dm=\K@do
+~\edef\K@Jy{\the\K@dr}\fi}\K@Iz}\K@bg\yscale{\K@cz\let\K@Ji\relax\def\K@Jj
+~{\K@do=\the\K@dr\K@dn\ifdim\K@do<\z@\else\K@dn=\K@do\edef\K@Jz{\the\K@dr
+~}\fi}\K@Iz}\K@bg\scale{\K@cz\let\K@Ji\relax\def\K@Jj{\K@do=\the\K@dr\K@dm
+~\ifdim\K@do<\z@\else\K@dm=\K@do\K@dn=\the\K@dr\K@dn\edef\K@Jy{\the\K@dr
+~}\let\K@Jz\K@Jy\fi}\K@Iz}\def\K@Kb{\ifnum\K@di>0 \K@Ji\fi}\K@bg\xrange
+~{\K@cz\def\K@Ji{\K@Jq\K@zy\let\K@zx\K@ci}\afterassignment\K@Kb\K@di}\K@bg
+~\yrange{\K@cz\def\K@Ji{\K@Jq\K@Aa\let\K@zz\K@ci}\afterassignment\K@Kb\K@di
+~}\K@bg\range{\K@cz\def\K@Ji{\K@Jq\K@zy\let\K@Aa\K@zy\let\K@zx\K@ci\let
+~\K@zz\K@ci}\afterassignment\K@Kb\K@di}\K@bg\gridgray{\K@cz\let\K@Ji\relax
+~\def\K@Jj{\edef\K@bc{\noexpand\K@Dg{\the\K@dr}}\K@bc\K@Dh}\K@Iz}\K@bm
+~\gridgrey\gridgray\K@bg\graygray{\K@cz\let\K@Ji\relax\def\K@Jj{\edef
+~\K@bc{\noexpand\K@Dg{\the\K@dr}}\K@bc\K@pv}\K@Iz}\K@bm\greygrey\graygray
+~\K@bg\framegray{\K@cz\let\K@Ji\relax\def\K@Jj{\edef\K@bc{\noexpand\K@Dg
+~{\the\K@dr}}\K@bc\K@Kc\ifx\K@Kc\K@ci\let\K@Ck\relax\let\K@Cm\relax\else
+~\edef\K@Ck{\noexpand\K@ha{\K@Kc}}\def\K@Cm{\endgr}\fi}\K@Iz}\K@bm
+~\framegrey\framegray\K@bg\shadegray{\K@cz\let\K@Ji\relax\def\K@Jj{\edef
+~\K@bc{\noexpand\K@Dg{\the\K@dr}}\K@bc\K@Kd\ifx\K@Kd\K@ci\let\K@Cq\relax
+~\let\K@Cr\relax\else\edef\K@Cq{\noexpand\K@ha{\K@Kd}}\def\K@Cr{\endgr}\fi
+~}\K@Iz}\K@bm\shadegrey\shadegray\kuviocs\MinimumCellLength=0pt \K@He\ifx
+~\@@agss@arrsy@@\relax\else\let\A@rightarrow\rightarrow\let\A@leftarrow
+~\leftarrow\let\A@leftrightarrow\leftrightarrow\let\A@leftharpoonup
+~\leftharpoonup\let\A@leftharpoondown\leftharpoondown\let\A@rightharpoonup
+~\rightharpoonup\let\A@rightharpoondown\rightharpoondown\fi\K@bg\latexTo
+~{\font\K@Ke=line10 \def\K@Kf{\smash{\hbox{\kern-4pt\raise\K@vj\hbox{\K@Ke
+~\char"2D}\hskip.5pt}}}\newfill{srightarrow}--\K@Kf\newfill
+~{sleftarrow}\K@Kf--\let\Tofill\srightarrowfill}\K@bk\newfill{\bgroup\K@ez
+~\K@Kg}\def\K@Kg#1{\egroup\K@Kh{#1}}\def\K@Kh#1#2#3#4{\expandafter\def
+~\csname D@@#1fill\endcsname{\m@th\mathord{#2}\mkern-8mu \cleaders\hbox
+~{$\mkern-2mu\mathord{#3}\mkern-2mu$}\hfill\mkern-8mu\mathord
+~{#4}}\expandafter\K@bk\csname#1fill\endcsname{\ifmmode\csname
+~D@@#1fill\endcsname\else $\csname D@@#1fill\endcsname$\fi}}
+\K@ab
+%-----------------------------------------------------------------------------
+\rekuviodef\into{\lhook\joinrel\A@rightarrow}
+\rekuviodef\cdotfill{\cleaders
+ \hbox{$\m@th\mkern1.5mu\mathord\cdot\mkern1.5mu$}\hfill}
+\rekuviolet\cmleftarrowfill\leftarrowfill
+
+\newfill{leftarrow}\A@leftarrow--
+\newfill{rleftarrow}{-\mkern-12mu\A@leftarrow\mkern-5mu}--
+\newfill{Leftarrow}\Leftarrow==
+\newfill{leftharpoonup}\A@leftharpoonup--
+\newfill{leftharpoondown}\A@leftharpoondown--
+\newfill{hookleftarrow}\A@leftarrow-{-\mkern-8mu\rhook}
+\rekuviolet\leftintofill\hookleftarrowfill
+\newfill{lleftarrow}{\A@leftarrow\mkern-13mu\A@leftarrow\mkern-5mu}--
+\newfill{leftepi}{\A@leftarrow\mkern-15mu\A@leftarrow\mkern-3mu}--
+\newfill{rlleftarrow}{-\mkern-12mu\A@leftarrow\mkern-13mu\A@leftarrow
+ \mkern-5mu}--
+\newfill{llleftarrow}{\A@leftarrow\mkern-13mu\A@leftarrow
+ \mkern-13mu\A@leftarrow\mkern-10mu}--
+\newfill{rllleftarrow}{-\mkern-12mu\A@leftarrow\mkern-13mu\A@leftarrow
+ \mkern-13mu\A@leftarrow\mkern-10mu}--
+
+\rekuviolet\cmrightarrowfill\rightarrowfill
+\newfill{rightarrow}--\A@rightarrow
+\newfill{lrightarrow}--{\mkern-5mu\A@rightarrow\mkern-12mu-}
+\newfill{Rightarrow}==\Rightarrow
+\newfill{rightharpoonup}--\A@rightharpoonup
+\newfill{rightharpoondown}--\A@rightharpoondown
+\newfill{hookrightarrow}{\lhook\mkern-8mu-}-\A@rightarrow
+\rekuviolet\rightintofill\hookrightarrowfill
+\newfill{rrightarrow}--{\mkern-5mu\A@rightarrow\mkern-13mu\A@rightarrow}
+\newfill{rightepi}--{\mkern-3mu\A@rightarrow\mkern-15mu\A@rightarrow}
+\newfill{lrrightarrow}--{\mkern-5mu\A@rightarrow\mkern-13mu\A@rightarrow
+ \mkern-12mu-}
+\newfill{rrrightarrow}--{\mkern-10mu\A@rightarrow\mkern-13mu\A@rightarrow
+ \mkern-13mu\A@rightarrow}
+\newfill{lrrrightarrow}--{\mkern-10mu\A@rightarrow\mkern-13mu\A@rightarrow
+ \mkern-13mu\A@rightarrow\mkern-12mu-}
+
+\newfill{relbar}---
+\rekuviolet\linefill\relbarfill
+\newfill{Relbar}===
+\rekuviolet\barfill\Relbarfill
+\newfill{mapsto}{\mapstochar\mkern-5mu-}-\A@rightarrow
+\newfill{leftrightarrow}\A@leftarrow-\A@rightarrow
+\newfill{Leftrightarrow}\Leftarrow=\Rightarrow
+
+\def\kuviojoin{\hbox{$\mkern-8mu$}}
+
+\kuviodef\leftarrowxfill{\leftarrowfill\kuviojoin\relbarfill}
+\kuviodef\leftarrowxxfill{\leftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xleftarrowxfill{\relbarfill\kuviojoin\leftarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\leftarrowxxxfill{\leftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxleftarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\leftarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\rightarrowxfill{\rightarrowfill\kuviojoin\relbarfill}
+\kuviodef\rightarrowxxfill{\rightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xrightarrowxfill{\relbarfill\kuviojoin\rightarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\rightarrowxxxfill{\rightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxrightarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\rightarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\lleftarrowxfill{\lleftarrowfill\kuviojoin\relbarfill}
+\kuviodef\lleftarrowxxfill{\lleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xlleftarrowxfill{\relbarfill\kuviojoin\lleftarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\lleftarrowxxxfill{\lleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxlleftarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\lleftarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\rrightarrowxfill{\rrightarrowfill\kuviojoin\relbarfill}
+\kuviodef\rrightarrowxxfill{\rrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xrrightarrowxfill{\relbarfill\kuviojoin\rrightarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\rrightarrowxxxfill{\rrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxrrightarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\rrightarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\llleftarrowxfill{\llleftarrowfill\kuviojoin\relbarfill}
+\kuviodef\llleftarrowxxfill{\llleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xllleftarrowxfill{\relbarfill\kuviojoin\llleftarrowfill
+ \kuviojoin\relbarfill}
+
+\kuviodef\llleftarrowxxxfill{\llleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxllleftarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\llleftarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\rrrightarrowxfill{\rrrightarrowfill\kuviojoin\relbarfill}
+\kuviodef\rrrightarrowxxfill{\rrrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xrrrightarrowxfill{\relbarfill\kuviojoin\rrrightarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\rrrightarrowxxxfill{\rrrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxrrrightarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\rrrightarrowfill\kuviojoin\relbarfill}
+
+\rekuviolet\labelstyle\scriptstyle
+\rekuviolet\vertexstyle\displaystyle
+\rekuviolet\diagramdot\bullet
+
+\rekuviodef\Displaybox#1{%
+ \ifvmode
+ \ifinner
+ \box#1%
+ \else
+ \vskip-\lastskip
+ \vskip\baselineskip
+ \box#1%
+ {\advance\parskip by -\baselineskip\vskip-\parskip}%
+ \fi
+ \else
+ \box#1%
+ \fi}
+
+\kuviocs\grid=1cm
+\kuviocs\range=1
+
+\Diagrampad=5pt
+\Figurepad=0pt
+\Graphpad=0pt
+
+\kuviocs\vpad=0pt
+\kuviocs\hpad=0pt
+
+\kuviocs\gridgray=.5
+\kuviocs\framegray=0
+\kuviocs\shadegray=0
+\kuviocs\graygray=.5
+
+\kuviocs\framepad=5pt
+\kuviocs\framerulewidth=.4pt
+\kuviocs\Framerulewidth=.4pt
+\kuviocs\Rulewidth=5pt
+
+\kuviocs\celllength=1cm
+\kuviocs\cellwidth=1cm
+\kuviocs\columndist=15mm
+\kuviocs\bracewidth=1cm
+
+\labelpoint=.5
+\labelpoint{Fillcell}={}
+\labelpoint{Boxcell}={}
+\labelpoint{Rule}={}
+
+\ptpoint=.5
+\ptpoint{Fillcell}={}
+\ptpoint{Boxcell}={}
+\ptpoint{Rule}={}
+
+\labelwidthpad=5pt
+\labelwidthpad{Fillcell}=0pt
+\labelwidthpad{Boxcell}=0pt
+\labelwidthpad{Rule}=0pt
+
+\labelpad=3pt
+\labelpad{Fillcell}=0pt
+\labelpad{Boxcell}=0pt
+\labelpad{Rule}=0pt
+
+\breakpad=2.5pt
+\breakpad{Fillcell}=0pt
+\breakpad{Boxcell}=0pt
+\breakpad{Rule}=0pt
+
+\cellpush=2pt
+\cellpush{Fillcell}=0pt
+\cellpush{Boxcell}=0pt
+\cellpush{Rule}=1pt
+
+\ptpush=0pt
+\ptpush{Fillcell}=0pt
+\ptpush{Boxcell}=0pt
+\ptpush{Rule}=1pt
+
+\atpush=3pt
+\atpush{Fillcell}=0pt
+\atpush{Boxcell}=0pt
+\atpush{Rule}=0pt
+
+\joinpush=-1pt
+\joinpush{Fillcell}=0pt
+\joinpush{Boxcell}=0pt
+\joinpush{Rule}=1pt
+
+\newcell{To}
+\rekuviolet\Tofill\rightarrowfill
+
+\newcell{One}
+\rekuviolet\Onefill\rightarrowfill
+
+\newcell{Bij}
+\rekuviolet\Bijfill\leftrightarrowfill
+
+\newcell{Mapsto}
+\rekuviolet\Mapstofill\mapstofill
+
+\newcell{Into}
+\rekuviolet\Intofill\rightintofill
+
+\newcell{Epi}
+\rekuviolet\Epifill\rightepifill
+
+\newcell{Line}
+\rekuviolet\Linefill\linefill
+
+\newcell{Nul}
+\rekuviolet\Nulfill\hfil
+
+\newcell{Dots}
+\rekuviolet\Dotsfill\cdotfill
+
+\newcell{Two}
+\rekuviolet\Twofill\Rightarrowfill
+\labelpad{Two}=.8pt
+\atpush{Two}=.8pt
+\breakpad{Two}=.8pt
+
+\newcell{Impl}
+\rekuviolet\Implfill\Rightarrowfill
+\labelpad{Impl}=.8pt
+\atpush{Impl}=.8pt
+\breakpad{Impl}=.8pt
+
+\newcell{Bar}
+\rekuviolet\Barfill\barfill
+\labelpad{Bar}=.8pt
+\atpush{Bar}=.8pt
+\breakpad{Bar}=.8pt
+
+\newcell{Null}
+\rekuviolet\Nullfill\hfil
+\labelpad{Null}=.8pt
+\atpush{Null}=.8pt
+\breakpad{Null}=.8pt
+
+\newcell{Eq}
+\rekuviodef\Eqfill{\hfil=\hfil}
+\labelpad{Eq}=.8pt
+\atpush{Eq}=.8pt
+\breakpad{Eq}=.8pt
+
+\newDiagram{Diag}
+\rekuviodef\everyDiag{\kuviocs\flexible\kuviocs\xgrid=0pt}
+
+\newDiagram{Dg}
+\rekuviodef\everyDg{\kuviocs\flexible\kuviocs\xgrid=0pt
+ \kuviocs\ygrid+=-2mm\kuviocs\cellwidth+=3mm
+ \kuviocs\bracewidth+=-2.5mm}
+
+\newDiagram{Long}
+\rekuviodef\everyLong{\kuviocs\flexible\kuviocs\xgrid=0pt
+ \kuviocs\ygrid+=-5mm\kuviocs\bracewidth+=-2.5mm}
+
+\def\inputarrsy{\input arrsy\relax}
+\rekuviodefine{\long\def}\arrsy{
+ \inputarrsy
+
+ \rekuviolet\epi\rightepi
+ \rekuviolet\mono\rightmono
+
+ \newfill{Leftharpoonup}\A@Leftharpoonup==
+ \rekuviolet\Leftparafill\Leftharpoonupfill
+ \newfill{Leftharpoondown}\A@Leftharpoondown==
+ \rekuviolet\Leftallofill\Leftharpoondownfill
+
+ \newfill{Rightharpoonup}==\A@Rightharpoonup
+ \rekuviolet\Rightallofill\Rightharpoonupfill
+ \newfill{Rightharpoondown}==\A@Rightharpoondown
+ \rekuviolet\Rightparafill\Rightharpoondownfill
+
+ \newfill{Lleftarrow}\A@Lleftarrow\A@Rrelbar\A@Rrelbar
+ \newfill{Rrightarrow}\A@Rrelbar\A@Rrelbar\A@Rrightarrow
+ \newfill{Rrelbar}\A@Rrelbar\A@Rrelbar\A@Rrelbar
+ \rekuviolet\equivfill\Rrelbarfill
+ \newfill{Lleftrightarrow}\A@Lleftarrow\A@Rrelbar\A@Rrightarrow
+
+ \newfill{dashbar}{\mkern8mu}\A@dashbar{\mkern8mu}
+ \rekuviolet\dashfill\dashbarfill
+ \newfill{rightdash}{\mkern8mu}\A@dashbar\A@shortrightarrow
+ \newfill{leftdash}\A@shortleftarrow\A@dashbar{\mkern8mu}
+
+ \newfill{rightepi}--\A@rightepi
+ \newfill{leftepi}\A@leftepi--
+ \newfill{rightmono}{\A@rightmonotail\mkern2mu}-\A@rightarrow
+ \newfill{leftmono}\A@leftarrow-{\mkern2mu\A@leftmonotail}
+ \newfill{rightmonotail}{\A@rightmonotail\mkern2mu}--
+ \newfill{leftmonotail}--{\mkern2mu\A@leftmonotail}
+ \newfill{rightiso}{\A@rightmonotail\mkern2mu}-\A@rightepi
+ \newfill{leftiso}\A@leftepi-{\mkern2mu\A@leftmonotail}
+
+ \newfill{rightdashmono}{\A@rightmonotail\mkern2mu}\A@dashbar
+ \A@shortrightarrow
+ \newfill{leftdashmono}\A@shortleftarrow\A@dashbar{\mkern2mu\A@leftmonotail}
+ \newfill{rightdashmonotail}{\A@rightmonotail\mkern2mu}\A@dashbar{\mkern8mu}
+ \newfill{leftdashmonotail}{\mkern8mu}\A@dashbar{\mkern2mu\A@leftmonotail}
+ \newfill{rightdashepi}{\mkern8mu}\A@dashbar
+ {\mkern-2.5mu\A@shortrightarrow\mkern-7.5mu\A@shortrightarrow}
+ \newfill{leftdashepi}{\A@shortleftarrow\mkern-7.5mu\A@shortleftarrow
+ \mkern-2.5mu}\A@dashbar{\mkern8mu}
+ \newfill{rightdashiso}{\A@rightmonotail\mkern4mu}\A@dashbar
+ {\mkern-2.5mu\A@shortrightarrow\mkern-7.5mu\A@shortrightarrow}
+ \newfill{leftdashiso}{\A@shortleftarrow\mkern-7.5mu\A@shortleftarrow
+ \mkern-2.5mu}\A@dashbar{\mkern4mu\A@leftmonotail}
+
+ \newfill{squiggle}{\mkern8mu}\A@squiggle{\mkern8mu}
+
+ \newcell{Allo}
+ \rekuviolet\Allofill\Rightallofill
+ \labelpad{Allo}=.8pt
+ \atpush{Allo}=.8pt
+ \breakpad{Allo}=.8pt
+
+ \newcell{Para}
+ \rekuviolet\Parafill\Rightparafill
+ \labelpad{Para}=.8pt
+ \atpush{Para}=.8pt
+ \breakpad{Para}=.8pt
+
+ \newcell{Three}
+ \rekuviolet\Threefill\Rrightarrowfill
+ \labelpad{Three}=1.5pt
+ \atpush{Three}=1.5pt
+ \breakpad{Three}=1.5pt
+
+ \newcell{Equiv}
+ \rekuviolet\Equivfill\Rrelbarfill
+ \labelpad{Equiv}=1.5pt
+ \atpush{Equiv}=1.5pt
+ \breakpad{Equiv}=1.5pt
+
+ \newcell{Nulll}
+ \rekuviolet\Nulllfill\hfil
+ \labelpad{Nulll}=1.5pt
+ \atpush{Nulll}=1.5pt
+ \breakpad{Nulll}=1.5pt
+
+ \newcell{Dash}
+ \rekuviolet\Dashfill\dashfill
+
+ \newcell{Dashto}
+ \rekuviolet\Dashtofill\rightdashfill
+
+ \newcell{Mono}
+ \rekuviolet\Monofill\rightmonofill
+
+ \newcell{Tail}
+ \rekuviolet\Tailfill\rightmonotailfill
+
+ \newcell{Iso}
+ \rekuviolet\Isofill\rightisofill
+}
+
+\kuviobye
+
+% kuvio.fw: $Revision: 2.8 $
+% COPYRIGHT.fw: $Revision: 1.2 $
+% Diagrams.fw: $Revision: 1.72 $
+% _prepare.fw: $Revision: 2.75 $
+% _parse.fw: $Revision: 1.13 $
+% _process.fw: $Revision: 2.31 $
+% _explode.fw: $Revision: 2.44 $
+% _setnodes.fw: $Revision: 1.26 $
+% _setcells.fw: $Revision: 2.30 $
+% _place.fw: $Revision: 2.51 $
+% _modify.fw: $Revision: 2.47 $
+% _display.fw: $Revision: 1.42 $
+% Cells.fw: $Revision: 1.29 $
+% _cellmod.fw: $Revision: 2.37 $
+% _cellentry.fw: $Revision: 1.45 $
+% _extent.fw: $Revision: 2.10 $
+% _predefined.fw: $Revision: 1.23 $
+% Labelling.fw: $Revision: 2.33 $
+% Registers.fw: $Revision: 2.26 $
+% Fill.fw: $Revision: 1.19 $
+% Arrsy.fw: $Revision: 1.19 $
+% macros.fw: $Revision: 1.15 $
+
+% Tangle completed Mon Feb 19 13:43:03 PST 1996.
+% Mangle completed Mon Feb 19 13:43:15 PST 1996.
diff --git a/macros/generic/diagrams/kuvio/patchlevel_216 b/macros/generic/diagrams/kuvio/patchlevel_216
new file mode 100644
index 0000000000..bc76f37e72
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/patchlevel_216
@@ -0,0 +1 @@
+19 Feb 1996
diff --git a/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex b/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex
new file mode 100644
index 0000000000..d48eef3845
--- /dev/null
+++ b/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex
@@ -0,0 +1,796 @@
+\message{Partial emulation of Francis Borceux's diagrams using...............}
+% you need Paul Taylor's commutative diagrams package loaded as well.
+\input diagrams
+\message{<Emulation (PT) version 0.21, 16 June 1994>}
+
+% The macro names have been taken from Francis Borceux's "diagram.tex"
+% and replaced with equivalent commands in Paul Taylor's package.
+
+% The "ternary" (4x2), curved, multiple and free arrows have not yet
+% been implemented. To do so requires an option to be added to PT's
+% diagrams which, it is intended, will be in the next version.
+
+% Some of these commands can of course be implemented essentially by
+% copying FB's macros. You can do this if you want to, but I shall not
+% do it myself, distribute your code or guarantee that it will work
+% in future.
+
+% If you want to add commands which do have translations, please send
+% them to me, accompanied by a test file which exercises them. Please
+% test it with both FB's macros and the emulation. Your contributions
+% will then be included in this file, with acknowledgement.
+
+% The commands below are terminated with "\relax". This is to ensure
+% that anything that follows is printed afterwards instead of being
+% interpreted as a label or optional argument. DO NOT MAKE A HABIT OF
+% PUTTING \relax AFTER ARROW COMMANDS. If anything follows a horizontal
+% arrow within a cell, the "through" feature is disabled, so the filler
+% is printed in two parts instead of one. When the filler is made from
+% repeated components, such as those with double shafts, this may result
+% in gaps if the arrow is too short.
+
+% In this version all size parameters are ignored. We ought to save the
+% size specified in \DIAGV, and convert that in sized diagonals to cells.
+
+% If you think this emulation was worth the effort, please tell me!
+% (Otherwise I shaln't bother to maintain it.)
+
+%***************************************************************************
+
+%% crossed LaTeX arrowheads
+\def\lhxla{\lhla\mkern-3mu\scriptaxis+}%%
+\def\rhxla{\scriptaxis+\mkern-2mu\rhla}%%
+\def\uhxla{\hbox{\uhla\raise-1.5ex\hbox to0pt{\hss$\scriptstyle+$\hss}}}%%
+\def\dhxla{\hbox{\dhla\lower-1ex\hbox to0pt{\hss$\scriptstyle+$\hss}}}%%
+\newarrowhead{+la}\rhxla\lhxla\dhxla\uhxla
+
+\newarrowtail+++++
+
+\newarrow{Into}+--->
+\newarrow{Bi}+---{+la}
+\newarrow{Onto}----{+la}
+
+%\newarrow{To}---->
+%\newarrow{Dotsto}....>
+%\newarrow{Eq}=====
+%\newarrow{Mono}
+%\newarrow{ar}---->
+%\newarrow{dotar}....>
+%\newarrow{mono}+--->
+%\newarrow{epi}----{+>}
+%\newarrow{bimo}+---{+la}
+%\newarrow{iso}--{iso}->
+
+% It would be better to define \newarrow's with names like FBar, FBmono, etc
+
+% nohcheck allows arrows in text (ie not maths) mode, amongst other things.
+% The assumption is that you start off with a correct FB diagram; in this
+% case you don't want extra &s being inserted!
+% 2620000sp is approx 40pt (4em at 10pt size)
+\diagramstyle[heads=LaTeX,nohcheck,size=2620000sp]
+
+% This was for debugging, to list the commands as they're defined.
+%\let\ddef\def
+%\ddef\zdef#1{\message{\string#1^^J}\ddef#1}
+%\let\def\zdef
+
+% The begin/end diagram commands.
+\def\DIAG#1{\begin{diagram}[]\relax#1\relax}
+\def\DIAGV#1#2{\dimen0=#1\DiagramCellHeight\CellSize=.01\dimen0
+ \begin{diagram}[]\relax#2\relax}
+\def\diag{\relax\end{diagram}}
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\def\diagv#1#2#3{\relax\end{diagram}}% currently ignored.
+
+% Overprint, next cell & next line commands
+\def\n#1{&#1}
+\def\nn#1{\\#1}
+\def\cross#1#2{\relax#1\relax#2\relax}
+
+% Make the next arrow bold.
+\def\B{\csname diagramstyle\endcsname[thick]}
+
+% Not implemented.
+\def\movename#1#2#3{#1}
+\def\com{}
+
+% commutative diagram symbol
+%\newcommand{\com}{\begin{picture}(12,8)%
+%\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+%\put(6,8){\vector(-1,0){2}}\end{picture}}%
+
+\def\adj{\mbox{$\dashv$}}
+
+% Natural transformations
+\def\nat{\pile{\rTo\\\Downarrow\\\rTo}}
+
+\def\Nat#1#2#3{\pile{\rTo^{#1\qquad}\\
+ \Downarrow{\scriptstyle#2}\\
+ \rTo^{#3\quad}}}
+
+\def\binat{\pile{\rTo\\\Downarrow\\\rTo\\\Downarrow\\\rTo}}
+
+\def\Binat#1#2#3#4#5{\pile{\rTo^{#1\qquad}\\
+ \Downarrow{\scriptstyle#2}\\
+ \rTo^{#3\quad}\\
+ \Downarrow{\scriptstyle#2}\\
+ \rTo^{#3\quad}}}
+
+%***************************************************************************
+% PRIMARY ARROW COMMANDS - FULLY TESTED
+%***************************************************************************
+
+% right-ward in-text arrows
+\def\ar {\rTo\relax}
+\def\dotar{\rDotsto\relax}
+\def\mono {\rInto\relax}
+\def\epi {\rOnto\relax}
+\def\bimo {\rBi\relax}
+\def\iso {\rTo^{\cong}\relax}
+\def\biar {\pile{\rTo\\\rTo}\relax}
+\def\eql {\rEq\relax}
+\def\adjar{\pile{\lTo\\\rTo}\relax}
+
+% labelled right-ward in-text arrows
+\def\Ar #1{\rTo^{#1}\relax}
+\def\Dotar#1{\rDotsto^{#1}\relax}
+\def\Mono #1{\rInto^{#1}\relax}
+\def\Epi #1{\rOnto^{#1}\relax}
+\def\Bimo #1{\rBi^{#1}\relax}
+\def\Iso #1{\rTo^{{\cong}{#1}}\relax}
+\def\Biar #1#2{\pile{\rTo^{#1}\\\rTo_{#2}}\relax}
+%\def\Eql #1{\rEq^{#1}\relax}
+\def\Adjar#1#2{\pile{\lTo^{#1}\\\rTo_{#2}}\relax}
+
+% left-ward in-text arrows
+\def\bkar {\lTo\relax}
+\def\bkdotar{\lDotsto\relax}
+\def\bkmono {\lInto\relax}
+\def\bkepi {\lOnto\relax}
+\def\bkbimo {\lBi\relax}
+\def\bkiso {\lTo^{\cong}\relax}
+\def\bkbiar {\pile{\lTo\\\lTo}\relax}
+\def\bkeql {\lEq\relax}
+\def\bkadjar{\pile{\rTo\\\lTo}\relax}
+
+% labelled left-ward in-text arrows
+\def\Bkar #1{\lTo^{#1}\relax}
+\def\Bkdotar#1{\lDotsto^{#1}\relax}
+\def\Bkmono #1{\lInto^{#1}\relax}
+\def\Bkepi #1{\lOnto^{#1}\relax}
+\def\Bkbimo #1{\lBi^{#1}\relax}
+\def\Bkiso #1{\lTo^{{\cong}{#1}}\relax}
+\def\Bkbiar #1#2{\pile{\lTo^{#1}\\\lTo_{#2}}\relax}
+%\def\Bkeql #1{\lEq^{#1}\relax}
+\def\Bkadjar#1#2{\pile{\rTo^{#1}\\\lTo_{#2}}\relax}
+
+% east-ward diagram arrows
+\def\ear {\rTo\relax}
+\def\edotar{\rDotsto\relax}
+\def\emono {\rInto\relax}
+\def\eepi {\rOnto\relax}
+\def\ebimo {\rBi\relax}
+\def\eiso {\rTo^{\cong}\relax}
+\def\ebiar {\pile{\rTo\\\rTo}\relax}
+\def\eeql {\rEq\relax}
+\def\eadjar{\pile{\lTo\\\rTo}\relax}
+
+% labelled east-ward diagram arrows
+\def\Ear #1{\rTo^{#1}\relax}
+\def\Edotar#1{\rDotsto^{#1}\relax}
+\def\Emono #1{\rInto^{#1}\relax}
+\def\Eepi #1{\rOnto^{#1}\relax}
+\def\Ebimo #1{\rBi^{#1}\relax}
+\def\Eiso #1{\rTo^{{\cong}{#1}}\relax}
+\def\Ebiar #1#2{\pile{\rTo^{#1}\\\rTo_{#2}}\relax}
+%\def\Eeql #1{\rEq^{#1}\relax}
+\def\Eadjar#1#2{\pile{\lTo^{#1}\\\rTo_{#2}}\relax}
+
+% labelled east-ward diagram arrows
+\def\eaR #1{\rTo_{#1}\relax}
+\def\edotaR#1{\rDotsto_{#1}\relax}
+\def\emonO #1{\rInto_{#1}\relax}
+\def\eepI #1{\rOnto_{#1}\relax}
+\def\ebimO #1{\rBi_{#1}\relax}
+\def\eisO #1{\rTo_{{\cong}{#1}}\relax}
+%\def\ebiaR #1#2{\pile{\rTo_{#1}\\\rTo_{#2}}\relax}
+%\def\eeqL #1{\rEq_{#1}\relax}
+%\def\eadjaR#1#2{\pile{\lTo_{#1}\\\rTo_{#2}}\relax}
+
+
+% west-ward diagram arrows
+\def\war {\lTo\relax}
+\def\wdotar{\lDotsto\relax}
+\def\wmono {\lInto\relax}
+\def\wepi {\lOnto\relax}
+\def\wbimo {\lBi\relax}
+\def\wiso {\lTo^{\cong}\relax}
+\def\wbiar {\pile{\lTo\\\lTo}\relax}
+\def\weql {\lEq\relax}
+\def\wadjar{\pile{\rTo\\\lTo}\relax}
+
+% labelled west-ward diagram arrows
+\def\War #1{\lTo^{#1}\relax}
+\def\Wdotar#1{\lDotsto^{#1}\relax}
+\def\Wmono #1{\lInto^{#1}\relax}
+\def\Wepi #1{\lOnto^{#1}\relax}
+\def\Wbimo #1{\lBi^{#1}\relax}
+%\def\Wiso #1{\lTo^{{\cong}{#1}}\relax}%%%%%%% FB's has no \cong!!!!!!!!
+\def\Wiso #1{\lTo^{{#1}}\relax}
+\def\Wbiar #1#2{\pile{\lTo^{#1}\\\lTo_{#2}}\relax}
+%\def\Weql #1{\lEq^{#1}\relax}
+\def\Wadjar#1#2{\pile{\rTo^{#1}\\\lTo_{#2}}\relax}
+
+% labelled west-ward diagram arrows
+\def\waR #1{\lTo_{#1}\relax}
+\def\wdotaR#1{\lDotsto_{#1}\relax}
+\def\wmonO #1{\lInto_{#1}\relax}
+\def\wepI #1{\lOnto_{#1}\relax}
+\def\wbimO #1{\lBi_{#1}\relax}
+%\def\wisO #1{\lTo_{{\cong}{#1}}\relax}%%%%%%%%%%%%% FB's has no \cong!!!!!!!
+\def\wisO #1{\lTo_{{#1}}\relax}
+%\def\wbiaR #1#2{\pile{\lTo_{#1}\\\lTo_{#2}}\relax}
+%\def\weqL #1{\lEq_{#1}\relax}
+%\def\wadjaR#1#2{\pile{\rTo_{#1}\\\lTo_{#2}}\relax}
+
+
+% north-ward diagram arrows
+\def\nar {\uTo\relax}
+\def\ndotar{\uDotsto\relax}
+\def\nmono {\uInto\relax}
+\def\nepi {\uOnto\relax}
+\def\nbimo {\uBi\relax}
+\def\niso {\uTo>{\cong}\relax}
+\def\nbiar {\uTo\uTo\relax}
+\def\neql {\uEq\relax}
+\def\nadjar{\uTo\dTo\relax}
+
+% labelled north-ward diagram arrows
+\def\Nar #1{\uTo^{#1}\relax}
+\def\Ndotar#1{\uDotsto^{#1}\relax}
+\def\Nmono #1{\uInto^{#1}\relax}
+\def\Nepi #1{\uOnto^{#1}\relax}
+\def\Nbimo #1{\uBi^{#1}\relax}
+\def\Niso #1{\uTo<{#1}>{\cong}\relax}
+\def\Nbiar #1#2{uTo^{#1}\uTo_{#2}\relax}
+%\def\Neql #1{\uEq^{#1}\relax}
+\def\Nadjar#1#2{\uTo^{#1}\dTo_{#2}\relax}
+
+% labelled north-ward diagram arrows
+\def\naR #1{\uTo_{#1}\relax}
+\def\ndotaR#1{\uDotsto_{#1}\relax}
+\def\nmonO #1{\uInto_{#1}\relax}
+\def\nepI #1{\uOnto_{#1}\relax}
+\def\nbimO #1{\uBi_{#1}\relax}
+%\def\nisO #1{\uTo_{{\cong}{#1}}\relax}
+%\def\nbiaR #1#2{uTo_{#1}\\\uTo_{#2}\relax}
+%\def\neqL #1{\uEq_{#1}\relax}
+%\def\nadjaR#1#2{\uTo_{#1}\dTo_{#2}\relax}
+
+
+% south-ward diagram arrows
+\def\sar {\dTo\relax}
+\def\sdotar{\dDotsto\relax}
+\def\smono {\dInto\relax}
+\def\sepi {\dOnto\relax}
+\def\sbimo {\dBi\relax}
+\def\siso {\dTo>{\cong}\relax}
+\def\sbiar {\dTo\dTo\relax}
+\def\seql {\dEq\relax}
+\def\sadjar{\dTo\uTo\relax}
+
+% labelled south-ward diagram arrows
+\def\Sar #1{\dTo^{#1}\relax}
+\def\Sdotar#1{\dDotsto^{#1}\relax}
+\def\Smono #1{\dInto^{#1}\relax}
+\def\Sepi #1{\dOnto^{#1}\relax}
+\def\Sbimo #1{\dBi^{#1}\relax}
+\def\Siso #1{\dTo<{#1}>{\cong}\relax}
+\def\Sbiar #1#2{\dTo^{#1}\dTo_{#2}\relax}
+%\def\Seql #1{\dEq^{#1}\relax}
+\def\Sadjar#1#2{\dTo^{#1}\uTo_{#2}\relax}
+
+% labelled south-ward diagram arrows
+\def\saR #1{\dTo_{#1}\relax}
+\def\sdotaR#1{\dDotsto_{#1}\relax}
+\def\smonO #1{\dInto_{#1}\relax}
+\def\sepI #1{\dOnto_{#1}\relax}
+\def\sbimO #1{\dBi_{#1}\relax}
+%\def\sisO #1{\dTo_{{\cong}{#1}}\relax}
+%\def\sbiaR #1#2{\dTo_{#1}\dTo_{#2}\relax}
+%\def\seqL #1{\dEq_{#1}\relax}
+%\def\sadjaR#1#2{\dTo_{#1}\uTo_{#2}\relax}
+
+% east-ward variable-length diagram arrows
+\def\earv #1{\rTo\relax}
+\def\edotarv#1{\rDotsto\relax}
+\def\emonov #1{\rInto\relax}
+\def\eepiv #1{\rOnto\relax}
+\def\ebimov #1{\rBi\relax}
+\def\eisov #1{\rTo^{\cong}\relax}
+\def\ebiarv #1{\pile{\rTo\\\rTo}\relax}
+\def\eeqlv #1{\rEq\relax}
+\def\eadjarv#1{\pile{\lTo\\\rTo}\relax}
+
+% labelled east-ward variable-length diagram arrows
+\def\Earv #1#2{\rTo^{#1}\relax}
+\def\Edotarv#1#2{\rDotsto^{#1}\relax}
+\def\Emonov #1#2{\rInto^{#1}\relax}
+\def\Eepiv #1#2{\rOnto^{#1}\relax}
+\def\Ebimov #1#2{\rBi^{#1}\relax}
+\def\Eisov #1#2{\rTo^{{\cong}{#1}}\relax}
+\def\Ebiarv #1#2#3{\pile{\rTo^{#1}\\\rTo_{#2}}\relax}
+%\def\Eeqlv #1#2{\rEq^{#1}\relax}
+\def\Eadjarv#1#2#3{\pile{\lTo^{#1}\\\rTo_{#2}}\relax}
+
+% labelled east-ward variable-length diagram arrows
+\def\eaRv #1#2{\rTo_{#1}\relax}
+\def\edotaRv#1#2{\rDotsto_{#1}\relax}
+\def\emonOv #1#2{\rInto_{#1}\relax}
+\def\eepIv #1#2{\rOnto_{#1}\relax}
+\def\ebimOv #1#2{\rBi_{#1}\relax}
+\def\eisOv #1#2{\rTo_{{\cong}{#1}}\relax}
+%\def\ebiaRv #1#2#3{\pile{\rTo_{#1}\\\rTo_{#2}}\relax}
+%\def\eeqLv #1#2{\rEq_{#1}\relax}
+%\def\eadjaRv#1#2#3{\pile{\lTo_{#1}\\\rTo_{#2}}\relax}
+
+
+% west-ward variable-length diagram arrows
+\def\warv #1{\lTo\relax}
+\def\wdotarv#1{\lDotsto\relax}
+\def\wmonov #1{\lInto\relax}
+\def\wepiv #1{\lOnto\relax}
+\def\wbimov #1{\lBi\relax}
+\def\wisov #1{\lTo^{\cong}\relax}
+\def\wbiarv #1{\pile{\lTo\\\lTo}\relax}
+\def\weqlv #1{\lEq\relax}
+\def\wadjarv#1{\pile{\rTo\\\lTo}\relax}
+
+% labelled west-ward variable-length diagram arrows
+\def\Warv #1#2{\lTo^{#1}\relax}
+\def\Wdotarv#1#2{\lDotsto^{#1}\relax}
+\def\Wmonov #1#2{\lInto^{#1}\relax}
+\def\Wepiv #1#2{\lOnto^{#1}\relax}
+\def\Wbimov #1#2{\lBi^{#1}\relax}
+\def\Wisov #1#2{\lTo^{{\cong}{#1}}\relax}
+\def\Wbiarv #1#2#3{\pile{\lTo^{#1}\\\lTo_{#2}}\relax}
+%\def\Weqlv #1#2{\lEq^{#1}\relax}
+\def\Wadjarv#1#2#3{\pile{\rTo^{#1}\\\lTo_{#2}}\relax}
+
+% labelled west-ward variable-length diagram arrows
+\def\waRv #1#2{\lTo_{#1}\relax}
+\def\wdotaRv#1#2{\lDotsto_{#1}\relax}
+\def\wmonOv #1#2{\lInto_{#1}\relax}
+\def\wepIv #1#2{\lOnto_{#1}\relax}
+\def\wbimOv #1#2{\lBi_{#1}\relax}
+\def\wisOv #1#2{\lTo_{{\cong}{#1}}\relax}
+%\def\wbiaRv #1#2#3{\pile{\lTo_{#1}\\\lTo_{#2}}\relax}
+%\def\weqLv #1#2{\lEq_{#1}\relax}
+%\def\wadjaRv#1#2#3{\pile{\rTo_{#1}\\\lTo_{#2}}\relax}
+
+
+% north-ward variable-length diagram arrows
+\def\narv #1{\uTo\relax}
+\def\ndotarv#1{\uDotsto\relax}
+\def\nmonov #1{\uInto\relax}
+\def\nepiv #1{\uOnto\relax}
+\def\nbimov #1{\uBi\relax}
+\def\nisov #1{\uTo>{\cong}\relax}
+\def\nbiarv #1{\uTo\uTo\relax}
+\def\neqlv #1{\uEq\relax}
+\def\nadjarv#1{\uTo\dTo\relax}
+
+% labelled north-ward variable-length diagram arrows
+\def\Narv #1#2{\uTo^{#1}\relax}
+\def\Ndotarv#1#2{\uDotsto^{#1}\relax}
+\def\Nmonov #1#2{\uInto^{#1}\relax}
+\def\Nepiv #1#2{\uOnto^{#1}\relax}
+\def\Nbimov #1#2{\uBi^{#1}\relax}
+\def\Nisov #1#2{\uTo<{#1}>{\cong}\relax}
+\def\Nbiarv #1#2#3{\uTo^{#1}\uTo_{#2}\relax}
+%\def\Neqlv #1#2{\uEq^{#1}\relax}
+\def\Nadjarv#1#2#3{\uTo^{#1}\dTo_{#2}\relax}
+
+% labelled north-ward variable-length diagram arrows
+\def\naRv #1#2{\uTo_{#1}\relax}
+\def\ndotaRv#1#2{\uDotsto_{#1}\relax}
+\def\nmonOv #1#2{\uInto_{#1}\relax}
+\def\nepIv #1#2{\uOnto_{#1}\relax}
+\def\nbimOv #1#2{\uBi_{#1}\relax}
+%\def\nisOv #1#2{\uTo_{{\cong}{#1}}\relax}
+%\def\nbiaRv #1#2#3{\uTo_{#1}\uTo_{#2}\relax}
+%\def\neqLv #1#2{\uEq_{#1}\relax}
+%\def\nadjaRv#1#2#3{\uTo_{#1}\dTo_{#2}\relax}
+
+
+% south-ward variable-length diagram arrows
+\def\sarv #1{\dTo\relax}
+\def\sdotarv#1{\dDotsto\relax}
+\def\smonov #1{\dInto\relax}
+\def\sepiv #1{\dOnto\relax}
+\def\sbimov #1{\dBi\relax}
+\def\sisov #1{\dTo>{\cong}\relax}
+\def\sbiarv #1{\dTo\dTo\relax}
+\def\seqlv #1{\dEq\relax}
+\def\sadjarv#1{\dTo\uTo\relax}
+
+% labelled south-ward variable-length diagram arrows
+\def\Sarv #1#2{\dTo^{#1}\relax}
+\def\Sdotarv#1#2{\dDotsto^{#1}\relax}
+\def\Smonov #1#2{\dInto^{#1}\relax}
+\def\Sepiv #1#2{\dOnto^{#1}\relax}
+\def\Sbimov #1#2{\dBi^{#1}\relax}
+\def\Sisov #1#2{\dTo<{#1}>{\cong}\relax}
+\def\Sbiarv #1#2#3{\dTo^{#1}\dTo_{#2}\relax}
+%\def\Seqlv #1#2{\dEq^{#1}\relax}
+\def\Sadjarv#1#2#3{\dTo^{#1}\uTo_{#2}\relax}
+
+% labelled south-ward variable-length diagram arrows
+\def\saRv #1#2{\dTo_{#1}\relax}
+\def\sdotaRv#1#2{\dDotsto_{#1}\relax}
+\def\smonOv #1#2{\dInto_{#1}\relax}
+\def\sepIv #1#2{\dOnto_{#1}\relax}
+\def\sbimOv #1#2{\dBi_{#1}\relax}
+%\def\sisOv #1#2{\dTo_{{\cong}{#1}}\relax}
+%\def\sbiaRv #1#2#3{\dTo_{#1}\dTo_{#2}\relax}
+%\def\seqLv #1#2{\dEq_{#1}\relax}
+%\def\sadjaRv#1#2#3{\dTo_{#1}\uTo_{#2}\relax}
+
+%***************************************************************************
+% THE SECONDARY ARROWS NEED THOROUGH TESTING!
+%***************************************************************************
+
+% north-east-ward diagram arrows
+\def\near {\ruTo\relax}
+\def\nedotar{\ruDotsto\relax}
+\def\nemono {\ruInto\relax}
+\def\neepi {\ruOnto\relax}
+\def\nebimo {\ruBi\relax}
+\def\neiso {\ruTo^{\cong}\relax}
+\def\nebiar {\ruTo\ruTo\relax}
+\def\neeql {\ruEq\relax}
+\def\neadjar{\ldTo\ruTo\relax}
+
+% labelled north-east-ward diagram arrows
+\def\Near #1{\ruTo^{#1}\relax}
+\def\Nedotar#1{\ruDotsto^{#1}\relax}
+\def\Nemono #1{\ruInto^{#1}\relax}
+\def\Neepi #1{\ruOnto^{#1}\relax}
+\def\Nebimo #1{\ruBi^{#1}\relax}
+\def\Neiso #1{\ruTo^{{\cong}{#1}}\relax}
+\def\Nebiar #1#2{\ruTo^{#1}\ruTo_{#2}\relax}
+%\def\Neeql #1{\ruEq^{#1}\relax}
+\def\Neadjar#1#2{\ldTo^{#1}\ruTo_{#2}\relax}
+
+% labelled north-east-ward diagram arrows
+\def\neaR #1{\ruTo_{#1}\relax}
+\def\nedotaR#1{\ruDotsto_{#1}\relax}
+\def\nemonO #1{\ruInto_{#1}\relax}
+\def\neepI #1{\ruOnto_{#1}\relax}
+\def\nebimO #1{\ruBi_{#1}\relax}
+%\def\neisO #1{\ruTo_{{\cong}{#1}}\relax}
+%\def\nebiaR #1#2{\ruTo_{#1}\ruTo_{#2}\relax}
+%\def\neeqL #1{\ruEq_{#1}\relax}
+%\def\neadjaR#1#2{\ldTo_{#1}\ruTo_{#2}\relax}
+
+
+% north-west-ward diagram arrows
+\def\nwar {\luTo\relax}
+\def\nwdotar{\luDotsto\relax}
+\def\nwmono {\luInto\relax}
+\def\nwepi {\luOnto\relax}
+\def\nwbimo {\luBi\relax}
+\def\nwiso {\luTo^{\cong}\relax}
+\def\nwbiar {\luTo\luTo\relax}
+\def\nweql {\luEq\relax}
+\def\nwadjar{\luTo\rdTo\relax}
+
+% labelled north-west-ward diagram arrows
+\def\Nwar #1{\luTo^{#1}\relax}
+\def\Nwdotar#1{\luDotsto^{#1}\relax}
+\def\Nwmono #1{\luInto^{#1}\relax}
+\def\Nwepi #1{\luOnto^{#1}\relax}
+\def\Nwbimo #1{\luBi^{#1}\relax}
+\def\Nwiso #1{\luTo^{{\cong}{#1}}\relax}
+\def\Nwbiar #1#2{\luTo^{#1}\luTo_{#2}\relax}
+%\def\Nweql #1{\luEq^{#1}\relax}
+\def\Nwadjar#1#2{\luTo^{#1}\rdTo_{#2}\relax}
+
+% labelled north-west-ward diagram arrows
+\def\nwaR #1{\luTo_{#1}\relax}
+\def\nwdotaR#1{\luDotsto_{#1}\relax}
+\def\nwmonO #1{\luInto_{#1}\relax}
+\def\nwepI #1{\luOnto_{#1}\relax}
+\def\nwbimO #1{\luBi_{#1}\relax}
+%\def\nwisO #1{\luTo_{{\cong}{#1}}\relax}
+%\def\nwbiaR #1#2{\luTo_{#1}\luTo_{#2}\relax}
+%\def\nweqL #1{\luEq_{#1}\relax}
+%\def\nwadjaR#1#2{\luTo_{#1}\rdTo_{#2}\relax}
+
+
+% south-east-ward diagram arrows
+\def\sear {\rdTo\relax}
+\def\sedotar{\rdDotsto\relax}
+\def\semono {\rdInto\relax}
+\def\seepi {\rdOnto\relax}
+\def\sebimo {\rdBi\relax}
+\def\seiso {\rdTo^{\cong}\relax}
+\def\sebiar {\rdTo\rdTo\relax}
+\def\seeql {\rdEq\relax}
+\def\seadjar{\rdTo\luTo\relax}
+
+% labelled south-east-ward diagram arrows
+\def\Sear #1{\rdTo^{#1}\relax}
+\def\Sedotar#1{\rdDotsto^{#1}\relax}
+\def\Semono #1{\rdInto^{#1}\relax}
+\def\Seepi #1{\rdOnto^{#1}\relax}
+\def\Sebimo #1{\rdBi^{#1}\relax}
+\def\Seiso #1{\rdTo^{{\cong}{#1}}\relax}
+\def\Sebiar #1#2{\rdTo^{#1}\rdTo_{#2}\relax}
+%\def\Seeql #1{\rdEq^{#1}\relax}
+\def\Seadjar#1#2{\rdTo^{#1}\luTo_{#2}\relax}
+
+% labelled south-east-ward diagram arrows
+\def\seaR #1{\rdTo_{#1}\relax}
+\def\sedotaR#1{\rdDotsto_{#1}\relax}
+\def\semonO #1{\rdInto_{#1}\relax}
+\def\seepI #1{\rdOnto_{#1}\relax}
+\def\sebimO #1{\rdBi_{#1}\relax}
+%\def\seisO #1{\rdTo_{{\cong}{#1}}\relax}
+%\def\sebiaR #1#2{\rdTo_{#1}\rdTo_{#2}\relax}
+%\def\seeqL #1{\rdEq_{#1}\relax}
+%\def\seadjaR#1#2{\rdTo_{#1}\luTo_{#2}\relax}
+
+
+% south-west-ward diagram arrows
+\def\swar {\ldTo\relax}
+\def\swdotar{\ldDotsto\relax}
+\def\swmono {\ldInto\relax}
+\def\swepi {\ldOnto\relax}
+\def\swbimo {\ldBi\relax}
+\def\swiso {\ldTo^{\cong}\relax}
+\def\swbiar {\ldTo\ldTo\relax}
+\def\sweql {\ldEq\relax}
+\def\swadjar{\ruTo\ldTo\relax}% ?
+
+% labelled south-west-ward diagram arrows
+\def\Swar #1{\ldTo^{#1}\relax}
+\def\Swdotar#1{\ldDotsto^{#1}\relax}
+\def\Swmono #1{\ldInto^{#1}\relax}
+\def\Swepi #1{\ldOnto^{#1}\relax}
+\def\Swbimo #1{\ldBi^{#1}\relax}
+\def\Swiso #1{\ldTo^{{\cong}{#1}}\relax}
+\def\Swbiar #1#2{\ldTo^{#1}\ldTo_{#2}\relax}
+%\def\Sweql #1{\ldEq^{#1}\relax}
+\def\Swadjar#1#2{\ruTo^{#1}\ldTo_{#2}\relax}% ?
+
+% labelled south-west-ward diagram arrows
+\def\swaR #1{\ldTo_{#1}\relax}
+\def\swdotaR#1{\ldDotsto_{#1}\relax}
+\def\swmonO #1{\ldInto_{#1}\relax}
+\def\swepI #1{\ldOnto_{#1}\relax}
+\def\swbimO #1{\ldBi_{#1}\relax}
+%\def\swisO #1{\ldTo_{{\cong}{#1}}\relax}
+%\def\swbiaR #1#2{\ldTo_{#1}\ldTo_{#2}\relax}
+%\def\sweqL #1{\ldEq_{#1}\relax}
+%\def\swadjaR#1#2{\ruTo_{#1}\ldTo_{#2}\relax}% ?
+
+% secondary variable-length diagram arrows
+\def\nwarv#1{\luTo\relax}%
+\def\nearv#1{\ruTo\relax}%
+\def\swarv#1{\ldTo\relax}%
+\def\searv#1{\rdTo\relax}%
+
+% labelled secondary variable-length diagram arrows
+\def\nwaRv#1#2{\luTo^{#1}\relax}%
+\def\neaRv#1#2{\ruTo^{#1}\relax}%
+\def\swaRv#1#2{\ldTo^{#1}\relax}%
+\def\seaRv#1#2{\rdTo^{#1}\relax}%
+\def\Nwarv#1#2{\luTo^{#1}\relax}%
+\def\Nearv#1#2{\ruTo^{#1}\relax}%
+\def\Swarv#1#2{\ldTo^{#1}\relax}%
+\def\Searv#1#2{\rdTo^{#1}\relax}%
+
+% curved arrows second argument is length
+\def\Necurve#1#2{\uTo^{#1}\relax}
+\def\Nwcurve#1#2{\uTo^{#1}\relax}
+\def\Securve#1#2{\dTo^{#1}\relax}
+\def\Swcurve#1#2{\dTo^{#1}\relax}
+\def\Encurve#1#2{\rTo^{#1}\relax}
+\def\Escurve#1#2{\rTo^{#1}\relax}
+\def\Wncurve#1#2{\lTo^{#1}\relax}
+\def\Wscurve#1#2{\lTo^{#1}\relax}
+
+%***************************************************************************
+% THE TERNARY ARROWS ARE NOT CORRECTLY PLACED!
+%***************************************************************************
+
+% ternary arrows --- MISPLACED!
+\def\nnwar{\luTo[diagonalbase=(1,2)](2,4)\relax}
+\def\nnear{\ruTo[diagonalbase=(1,2)](2,4)\relax}
+\def\wnwar{\luTo[diagonalbase=(2,1)](4,2)\relax}
+\def\enear{\ruTo[diagonalbase=(2,1)](4,2)\relax}
+\def\sswar{\ldTo[diagonalbase=(1,2)](2,4)\relax}
+\def\ssear{\rdTo[diagonalbase=(1,2)](2,4)\relax}
+\def\wswar{\ldTo[diagonalbase=(2,1)](4,2)\relax}
+\def\esear{\rdTo[diagonalbase=(2,1)](4,2)\relax}
+
+% labelled ternary arrows --- MISPLACED!
+\def\Nnwar#1{\luTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Nnear#1{\ruTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Wnwar#1{\luTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+\def\Enear#1{\ruTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+\def\Sswar#1{\ldTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Ssear#1{\rdTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Wswar#1{\ldTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+\def\Esear#1{\rdTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+
+% labelled ternary arrows --- MISPLACED!
+\def\nnwaR#1{\luTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\nneaR#1{\ruTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\wnwaR#1{\luTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+\def\eneaR#1{\ruTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+\def\sswaR#1{\ldTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\sseaR#1{\rdTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\wswaR#1{\ldTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+\def\eseaR#1{\rdTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+
+%***************************************************************************
+% THE CURVED ARROWS ARE NOT SUPPORTED!
+%***************************************************************************
+
+% curved arrows
+\def\necurve#1{\uTo^{#1}\relax}
+\def\nwcurve#1{\uTo^{#1}\relax}
+\def\securve#1{\dTo^{#1}\relax}
+\def\swcurve#1{\dTo^{#1}\relax}
+\def\encurve#1{\rTo^{#1}\relax}
+\def\escurve#1{\rTo^{#1}\relax}
+\def\wncurve#1{\lTo^{#1}\relax}
+\def\wscurve#1{\lTo^{#1}\relax}
+
+% The remainder of this file is included so that the original
+% and emulated versions appear to have the same commands in them.
+%
+% missing commands
+%\def\ADJAR#1{}% draws a pair of adjoint arrows of length n units
+%\def\AR#1{}% draws an arrow of length n units
+%\def\BIAR#1{}% draws a pair of arrows of length n units
+%\def\BIMO#1{}% draws a bimorphism of length n units
+%\def\BKADJAR#1{}% draws a pair of adjoint arrows of length n units
+%\def\BKAR#1{}% draws a pointing back arrow of length n units
+%\def\BKBIAR#1{}% draws a pair of pointing back arrows of length n units
+%\def\BKBIMO#1{}% draws a pointing back bimorphism of length n units
+%\def\BKDOTAR#1{}% draws a backward dotted arrow
+%\def\BKEPI#1{}% draws a pointing back epimorphism of length n units
+%\def\BKMONO#1{}% draws a pointing back monomorphism of length n units
+%\def\DOTAR#1{}% draws a dotted arrow of length n units
+%\def\EADJAR#1{}% draws an east pair of adjoint arrows of length n
+%\def\EAR#1{}% draws an east arrow of length n units
+%\def\EBIAR#1{}% draws an east pair of arrows of length n units
+%\def\EBIMO#1{}% draws an east bimorphism of length n units
+%\def\EDOTAR{}% draws a dotted arrow of length n units
+%\def\EEPI#1{}% draws an east epimorphism of length n units
+%\def\EEQL#1{}% draws an east equality of length n units
+%\def\EMONO#1{}% draws an east monomorphism of length n units
+%\def\ENEAR{f}{g}{}% draws a east-north-east arrow with names f, g
+%\def\EPI#1{}% draws an epimorphism of length n units
+%\def\EQL#1{}% draws an equality of length n units
+%\def\ESEAR{f}{g}% draws an east-south-east arrow with names f, g
+%\def\MONO{}%
+%\def\NADJAR#1{}% draws a pair of vertical adjoint arrows of length n pt
+%\def\NAR#1{}% draws a north arrow of length n pt
+%\def\NBIAR#1{}% draws a pair of north arrows of length n pt
+%\def\NBIMO#1{}% draws a north bimorphism of length n pt
+%\def\NDOTAR#1{}% draws a north dotted arrow of length n units
+%\def\NEADJAR{}% draws a north-east pair of adjoint arrows
+%\def\NEAR{}% draws a north-east arrow
+%\def\NEARV#1{}% draws a north-east arrow of length nx100 units
+%\def\NEBIAR{}% draws a pair of north-east arrows
+%\def\NEBIMO{}% draws a north-east bimorphism
+%\def\NEDOTAR{}% draws a north-east dotted arrow
+%\def\NEEPI{}% draws a north-east epimorphism
+%\def\NEEQL{}% draws a north-east equality
+%\def\NEMONO{}% draws a north-east monomorphism
+%\def\NEPI#1{}% draws a north epimorphism of length n pt
+%\def\NMONO#1{}% draws a north monomorphism of length n pt
+%\def\NNEAR{f}{g}{}% draws a north-north-east arrow with names f, g
+%\def\NNWAR{f}{g}{}% draws a north-north-west arrow with names f, g
+%\def\NWADJAR{}% draws a north-west pair of adjoint arrows
+%\def\NWAR{}% draws a north-west arrow
+%\def\NWARV#1{}% draws a north-west arrow of length nx100 units
+%\def\NWBIAR{}% draws a pair of north-west arrows
+%\def\NWBIMO{}% draws a north-west bimorphism
+%\def\NWDOTAR{}% draws a north-west dotted arrow
+%\def\NWEPI{}% draws a north-west epimorphism
+%\def\NWMONO{}% draws a north-west monomorphism
+%\def\SADJAR#1{}% draws a pair of vertical adjoint arrows of length n units
+%\def\SAR#1{}% draws a south arrow of length n units
+%\def\SBIAR#1{}% draws a pair of south arrows of length n units
+%\def\SBIMO#1{}% draws a south bimorphism of length n units
+%\def\SDOTAR#1{}% draws a south dotted arrow of length n units
+%\def\SEADJAR{}% draws a south-east pair of adjoint arrows
+%\def\SEAR{}% draws a south-east arrow
+%\def\SEARV#1{}% draws a south-east arrow of length nx100 units
+%\def\SEBIAR{}% draws a pair of south-east arrows
+%\def\SEBIMO{}% draws a south-east bimorphism
+%\def\SEDOTAR{}% draws a south-east dotted arrow
+%\def\SEEPI{}% draws a south-east epimorphism
+%\def\SEEQL{}% draws a south-east equality
+%\def\SEMONO{}% draws a south-east monomorphism
+%\def\SEPI#1{}% draws a south epimorphism of length n units
+%\def\SEQL#1{}% draws a vertical equality of length n units
+%\def\SMONO#1{}% draws a south monomorphism of length n units
+%\def\SSEAR{f}{g}{}% draws a south-south-east arrow with names f, g
+%\def\SSWAR{f}{g}{}% draws a south-south-west arrow with names f, g
+%\def\SWADJAR{}% draws a south-west pair of adjoint arrows
+%\def\SWAR{}% draws a south-west arrow
+%\def\SWARV#1{}% draws a south-west arrow of length nx100 units
+%\def\SWBIAR{}% draws a pair of south-west arrows
+%\def\SWBIMO{}% draws a south-west bimorphism
+%\def\SWDOTAR{}% draws a south-west dotted arrow
+%\def\SWEPI{}% draws a south-west epimorphism
+%\def\SWMONO{}% draws a south-west monomorphism
+%\def\WADJAR#1{}% draws a pair of adjoint arrows of length n units
+%\def\WAR#1{}% draws a pointing back arrow of length n units
+%\def\WBIAR#1{}% draws a pair of pointing back arrows of length n units
+%\def\WBIMO#1{}% draws a pointing back bimorphism of length n units
+%\def\WDOTAR{}% draws a dotted arrow of length n units
+%\def\WEPI#1{}% draws a pointing back epimorphism of length n units
+%\def\WMONO#1{}% draws a pointing back monomorphism of length n units
+%\def\WNWAR{f}{g}% draws a west-north-west arrow with names f, g
+%\def\WSWAR{f}{g}% draws a west-south-west arrow with names f, g
+%
+%\newcount\ARROW{}%
+%\newcount\ARROWLENGTH{}%
+%\newcount\COLUMN{}%
+%\newcount\LINE{}%
+%\newcount\NUMBER{}%
+%\newcount\NUMBEROFDOTS{}%
+%\newcount\SCALE{}%
+%\newcount\SOURCE{}%
+%\newcount\TARGET
+%\newcount\WIDTH
+%\newskip\firstitem
+%\newskip\itemlength
+%\newskip\seconditem
+%
+%\def\Freear{}%
+%\def\Hbicase{}%
+%\def\Hcase{}%
+%\def\N{}%
+%\def\Tbicase{}%
+%\def\Tcase{}%
+%\def\Vbicase{}%
+%\def\Vcase{}%
+%\def\changecounters{}%
+%\def\conclude{}%
+%\def\crosslength{}%
+%\def\fdbicase{}%
+%\def\fdcase{}%
+%\def\freear{}%
+%\def\hbicase{}%
+%\def\hcasE{}%
+%\def\hcase{}%
+%\def\initialize{}%
+%\def\lowername{}%
+%\def\movearrow{}%
+%\def\movevertex{}%
+%\def\sdbicase{}%
+%\def\sdcase{}%
+%\def\tbicase{}%
+%\def\tcase{}%
+%\def\tlowername{}%
+%\def\truex{}%
+%\def\truey{}%
+%\def\truez{}%
+%\def\vbicase{}%
+%\def\vcasE{}%
+%\def\vcase{}%
+%
+%
+%\let\def\ddef\bye \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/V3,90.tex b/macros/generic/diagrams/taylor/V3,90.tex
new file mode 100644
index 0000000000..b5b5223039
--- /dev/null
+++ b/macros/generic/diagrams/taylor/V3,90.tex
@@ -0,0 +1,1908 @@
+% mangletex (24 Nov 1995) run at 16:49 BST Sunday 11 April 2004
+\message{<Paul Taylor's commutative diagrams, version 3.90, 11 April 2004>}%
+%%
+\message{#===============================================================#}%
+\message{........PostScript mode (dvips) is now the default...............}%
+\message{(DVI mode has not been supported since 1992 and produces inferior}%
+\message{results which are completely unsuitable for publication. However,}%
+\message{if you really still need it, read the manual for how to get it.)}%
+\message{#===============================================================#}%
+%%
+%% This code runs the LaTeX \ProvidesPackage command iff it is defined.
+%% included at the request of Michael Downes <mjd@ams.org> March 2002.
+%% Put \listfiles in your LaTeX preamble to see the effect.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{%
+\fi\ProvidesPackage{diagrams}[2004/04/11 v3.90 Paul Taylor's commutative
+diagrams]%%
+\toks0=\bgroup}%%
+%%======================================================================%
+%% TeX macros for drawing category-theoretic diagrams %
+%% %
+%% Paul Taylor %
+%% %
+%% www.ctan.org/tex-archive/macros/generic/diagrams/taylor %
+%% www.cs.man.ac.uk/~pt/diagrams %
+%% %
+%% PLEASE READ THE MANUAL! %
+%% %
+%% Please ensure that you are registered with me as a user so that %
+%% you can be informed of future releases. Any electronic mail %
+%% message with "commutative" or "diagram" in the subject line %
+%% (such as your request for the package, a question about it, or %
+%% even an otherwise blank message) automatically registers you. %
+%% %
+%% %
+%% CONTENTS: %
+%% (O) corruption-sensitive hacks (to approx line 328) %
+%% Arrow components & commands - starts approx line 1240 %
+%% (22) auxillary macros for adjustment of components %
+%% (23) bits of arrows (\rhvee etc) %
+%% (24) arrow commands (\rTo etc) %
+%% (25) miscellaneous %
+%% Apart from these five sections, the rest is intended to be totally %
+%% meaningless in the undocumented version, which is approximately %
+%% 1910 lines long. Please do not waste trees by printing it out. %
+%% %
+%% COPYRIGHT NOTICE: %
+%% This package may be copied and used freely for any academic %
+%% (not commercial or military) purpose, on condition that it %
+%% is not altered in any way, and that an acknowledgement is %
+%% included in any published work making substantial use of it. %
+%% %
+%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. %
+%% %
+%% If you are doing something where mistakes cost money (or where %
+%% success brings financial profit) then you must use commercial %
+%% software, not this package. In any case, please remember to %
+%% keep several backup copies of all files, and check everything %
+%% visually before sending final copy to the publishers. %
+%% %
+%% You may use this package as a (substantial) aid to writing an %
+%% academic research or text book on condition that %
+%% (i) you contact me at a suitable time to ensure that you have %
+%% an up-to-date version (and any infelicities can be fixed), %
+%% (ii) you send me a copy of the book when it's published. %
+%% %
+%% HISTORY %
+%% 3.90 Released 11 April 2004 %
+%% use PostScript=Rokicki not pure DVI by default %
+%% 3.89 Released 7 July 2002 %
+%% Added support for pdftex, which is recognised automatically. %
+%% 3.88 Released 1 September 2000 %
+%% Square hook tail: \newarrow{SquareInto}{sqhook}---> %
+%% 3.87 Released 1 September 1999 %
+%% This version was used for the final 1200dpi PS copy of my book %
+%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) %
+%% see http://www.dcs.qmw.ac.uk/~pt/Practical_Foundations %
+%% 3.86 Released 1 September 1998 %
+%% New options hug and nohug in PostScript mode: [PS,nohug] uses %
+%% PS for the arrows without rotating the labels, but the way of %
+%% calculating the actual position of these horizontal labels on %
+%% will remain subject to alteration for some period of time --- %
+%% please send me examples if you feel that adjustment is needed. %
+%% %
+%% Suppress indentation of following text (due to LaTeX change) %
+%% Mangle \left@label and \right@label (conflict with Elsevier). %
+%% midvshaft and snake for vertical arrows %
+%% New option [gap=width] (default=shortfall) to use instead of %
+%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ %
+%% labels to be moved too far away from the shaft. %
+%% Added >-> and <-< heads and tails, same as >> and << but the %
+%% shaft goes *through* the extra arrowhead. %
+%% 3.85 Released 20 August 1997 %
+%% New option [crab=distance] shifts horizontals and PS diagonals %
+%% transversally by the specified distance (positive=upward). %
+%% New option [snake=distance] shifts midshaft horizontals and %
+%% PS diagonals longitudinally by the specified distance. %
+%% New option [leftflush], like [flushleft] but reckons alignment %
+%% from multiple verticals, or from text if there's no vertical. %
+%% Most of the history has been suppressed from the user version. %
+%% 3.83 Released 18 May 1995 %
+%% "dotted" option (set dot filler on maps) %
+%% Parallel maps (\pile) outside diagrams stretch correctly. %
+%% Option "LaTeXeqno" uses LaTeX's equation number and style %
+%% for "eqno"; LaTeX's \label command picks this up. %
+%% Suppress warnings & 2nd pass errors with "silent" option. %
+%% 3.81 Second alpha release 18 July 1994 %
+%% \overprint{text} sets text in maths and overprints it in the %
+%% current cell, centered in the column irrespective of other stuff%
+%% "repositionpullbacks" option uses this for \SEpbk etc %
+%% \newdiagramgrid declaration, grid option and pentagon grid. %
+%% 3.80 Alpha release for adjusted diagonals 15 July 1994. %
+%% Introduced landscape and portrait options. %
+%% Diagonals adjusted to meet their endpoints, at last!!!! %
+%% 3.28 Released 30 November 1993 %
+%% Peter Freyd's \puncture symbol provided. %
+%% 3.25 Released 30 January 1993 %
+%% LaTeX heads made default (unless \tenln undefined, when vee) %
+%% Circle, cross, little vee, little black triangle heads. %
+%% First-use warning when defaulted diagonal components are used. %
+%% AMSTEX emulation - works at least when amstex not present. %
+%% 3.24 Release 7 Sept 1992 advertised to users. %
+%% PostScript option introduced: %
+%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails %
+%% TPIC option introduced as an alternative to \LaTeX@make@line. %
+%% Postscript arrows (basic code). %
+%% Implemented \newarrow \newarrowhead etc. %
+%% Horizontal arrows outside diagram can stretch by wordspacing. %
+%% Added < and > for labels on left and right of arrow; %
+%% 3.16 (20.7.90) as mass mailed; only have mangled version %
+%% -- all following version numbers are post-facto -- %
+%% 3 (Jan 90) stretching vertical arrows %
+%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels %
+%% 1 (1987) horizontal arrows stretch to edge of cell %
+%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis %
+%%======================================================================%
+
+%%======================================================================%
+%% %
+%% (1) CORRUPTION-SENSITIVE HACKS %
+%% %
+%%======================================================================%
+
+%% CORRUPTION & \catcode WARNING
+
+%% BITNET (IBM) machines may corrupt certain important characters
+%% in transmission by electronic mail:
+%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
+%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
+%% {}=curly braces (grouping), \=backslash (keywords),
+%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
+%% <>=angle brackets (relations \ifnum,\ifdim), ==equals,
+%% ,=comma, .=dot, :=colon, ;=semicolon, =space
+%% $=dollar (maths) is only used in the "bits of maps" section
+
+%% The following characters are marked by a comment including the word "ASCII",
+%% except in comments and messages:
+%% &=and (alignment), ~=tilde, |=vertical, []=square brackets,
+%% ^=caret (superscript), _=underline (subscript),
+%% `=grave/backquote (catcodes), '=acute/single quote (octal),
+%% "=double quote (hex), ()=round brackets,
+%% /=slash, ?=query, !=pling/bang,
+
+%% The \catcode's marked * are assumed for reading this file:
+%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
+%% space=10* letter=11* other=12 active=13 %=14* invalid=15
+%% If you want to load this package inside Stallman's "texinfo", you must do
+%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
+%% Also need @catcode`@&=4.
+
+%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)****
+%% don't load me twice!
+\ifx\diagram\undefined\else\message{WARNING: the \string\diagram\space command
+is already defined and will not be loaded again}\expandafter\endinput\fi
+
+%% make @ letter, saving its old code to restore at the end of this file
+%%% look for this on the last line of the file if you think something's missing!
+%% the other \catcode assignments are to make it work with texinfo.
+\edef\cdrestoreat{%%
+\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%%
+\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%%
+\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%%
+\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%%
+\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%%
+\noexpand\catcode\lq\noexpand\:=\the\catcode\lq\:%% Johannes L. Braams's
+\noexpand\catcode\lq\noexpand\;=\the\catcode\lq\;%% Babel languages package
+\noexpand\catcode\lq\noexpand\!=\the\catcode\lq\!%% makes these \active.
+\noexpand\catcode\lq\noexpand\?=\the\catcode\lq\?%%
+\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53%
+%% texinfo @+ is @outer@active
+}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode
+\rq53=12 \catcode\lq\:=12 \catcode\lq\;=12 \catcode\lq\!=12 \catcode\lq\?=12
+
+%% Change y to n if pool_size in your implementation of TeX is small.
+%% This is reasonable if you have a small ("personal") computer, but if you
+%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
+%% system manager and get him/her to install a version of TeX with bigger
+%% parameters. The "hash size" (number of command names) gets you next.
+\ifx\diagram@help@messages\undefined\let\diagram@help@messages y\fi
+
+%% The following macro is used to include literal PostScript commands in the
+%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is
+%%% dependent on the convention used by your local DVI-to-PostScript translator.
+%% Choose whichever line applies to the program used at your site, or, if
+%% yours is not listed, consult the manual, experiment with this macro and
+%% (please) tell me what is needed to make it work.
+%%
+%%
+%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
+%% CTAN: dviware/dvips
+\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
+\cdps@RadicalEye\cdps@Rokicki\let\CD@IK\cdps@Rokicki\let\CD@HB\cdps@Rokicki
+%%
+%% I'm not sure that the rest work.
+%%
+%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
+%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
+\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
+%% ASCII two dbl quotes
+\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
+\cdps@Bechtolsheim%%
+%% dvitops (James Clark)
+%% CTAN: dviware/dvitops
+\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
+\let\cdps@dvitops\cdps@Clark%%
+%% OzTeX (Andrew Trevorrow) cannot be used
+\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
+%% dvi3ps (Kevin Coombes)
+%% CTAN: dviware/dvi2ps/dvi3ps
+\def\cdps@Coombes#1{\special{ps-string #1}}%%
+%% psprint (Trevorrow) CTAN: dviware/psprint
+%% dvi2ps (Senn) CTAN: dviware/dvi2ps
+%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi
+
+\count@=\year\multiply\count@12 \advance\count@\month%%
+\ifnum\count@>24080 %% (August 2006)
+\message{***********************************************************}%%ascii
+\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%%
+\message{! it expired in December 2004 and is time-bombed for January *}%%
+\message{! You may get an up to date version of this package from *}%%ascii
+\message{! ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams/ *}%%
+\message{***********************************************************}%%ascii
+\ifnum\count@>24083 %% (November 2006)
+\errhelp{You may press RETURN and carry on for the time being.}\message{! It
+is embarrassing to see papers in conference proceedings}\message{! and
+journals containing bugs which I had fixed years before.}\message{! It is easy
+to obtain and install a new version, which will}\errmessage{! remain
+compatible with your files. Please get it NOW.}\fi\fi
+
+\def\CD@DE{\global\let}\def\CD@RH{\outer\def}
+
+%% safe names for braces, tab (&) and maths ($), as commands and for messages
+{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%%
+%%
+%% three ASCII ampersands (ands) (&&&) appear on the next line
+\catcode\lq\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands
+%%
+%% ASCII ^ and _ each appear twice on next line
+%% six ASCII dollars ($$$$$$) appear on the next two lines.
+\catcode\lq\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars
+\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars
+%%
+%% two ASCII underlines (__) appear on the next line.
+\catcode\lq\_=8 \CD@DE\CD@lJ=_%%ascii two underlines
+%%
+%% eight ASCII carets (^^^^^^^^) appear on the next three lines.
+\obeylines\catcode\lq\^=7 \CD@DE\@super=^%%ascii two carets
+\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets
+\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets
+\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets
+\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand
+\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
+\fi\fi\fi}%%
+
+%% avoid using <> (because I personally re-define them to mean \langle\rangle)
+\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476
+
+%% LaTeX line and arrowhead font
+%% the "hit return" comments show up if the font is missing.
+\ifx\tenln\undefined%%
+\font\tenln=line10\relax%% Hit return - who needs diagonals?
+\fi\ifx\tenlnw\undefined\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
+\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
+\fi\fi%%
+
+%% report line numbers in TeX3 only
+\ifx\inputlineno\undefined\csname newcount\endcsname\inputlineno\inputlineno
+\m@ne\message{***************************************************}\message{!
+Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
+has been available since 1990. *}\message{***********************************%
+****************}\fi
+
+\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}}
+
+%% turn round- and square-bracketed arguments into curly-bracketed
+\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
+\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
+\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets
+\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
+\enddiagram}}
+
+%% ASCII open square bracket occurs on next line
+\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else
+\aftergroup\CD@JH\fi}}%%
+\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF}
+
+%% ASCII vertical bar (|) occurs on the next line
+\def\CD@KK{|}
+
+\def\CD@PB{%% arguments to maps inside diagrams
+\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:%
+\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
+\tokcase<:\CD@iF;%%ascii less-than
+\tokcase>:\CD@iI;%%ascii greater-than
+\tokcase(:\CD@BC;%%)%ascii open round bracket
+\tokcase[:\optional@;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
+\break@args;\endswitch}
+
+\def\switch@arg{%% arguments to horizontal maps outside diagrams
+\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@
+;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
+\middle@label;%%ascii tilde (questionable!)
+\default:\CD@y\break@args;\endswitch}
+
+%% That's as much as you get to read "in clear" - the rest is private!
+
+\let\CD@tJ\relax\ifx\protect\undefined\let\protect\relax\fi\ifx\AtEndDocument
+\undefined\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}%
+\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{%
+\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{%
+\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}%
+\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def
+\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1%
+\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def
+\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
+\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=%
+\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
+\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF
+=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7
+\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4
+\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9
+\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef
+\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9
+\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
+}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{%
+\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1%
+\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE
+#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}%
+\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1%
+\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{%
+\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef
+\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram
+}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\undefined
+\expandafter\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def
+\@ignoretrue{\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi
+
+\def\CD@g{{\ifnum0=\lq}\fi}\def\CD@wC{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat
+\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def
+\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}%
+\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:%
+#1;#2\endswitch{#1}\ifx\at@\undefined\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}%
+\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z
+\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%
+%%ascii round
+\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
+\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}%
+\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{%
+\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{%
+\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp
+\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax
+\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P
+\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
+\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode\lq\@%
+\active\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA
+\newcount\CD@vA\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA
+\CD@tG\CD@gE\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA
+\newcount\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA
+\CD@bA\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2%
+\relax\fi}\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH
+=1sp \newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def
+\CD@nJ{\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{%
+\CD@t\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=%
+\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0%
+\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1%
+\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide
+\CD@@I300 \def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I
+\divide#1\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{%
+\afterassignment\CD@gI\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI
+\CD@LF\CD@V\CD@@I{4\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V
+\CD@oI\CD@@I\fi\CD@cJ}\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@
+\divide\CD@@I\count@\fi\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@
+\divide\count@5\divide\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ
+\z@}\def\CD@QJ#1{\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5%
+\CD@oI\CD@zH\CD@tI\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@
+\newdimen\CD@eJ\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI
+\CD@LF\relax}\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{%
+\fontdimen22\the\textfont\tw@}\def\script@axisheight{\fontdimen22\the
+\scriptfont\tw@}\def\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def
+\CD@NC{0.4pt}\def\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3%
+\textfont\z@}\newdimen\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{%
+\ifincommdiag1.3em\else2em\fi}\newdimen\CD@YB\def\CellSize{\afterassignment
+\CD@kB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-%
+\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{%
+\DiagramCellWidth\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def
+\MapsAbut{\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA
+\CD@iA\z@\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}\def\newarrowtail{\CD@mG t%
+\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG\hbox@maths\empty}\def
+\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#4#5#6#7#8#9{\CD@RC{r#1%
+:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}}\CD@RC{u#1:#5}{#3{#9}%
+}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4\endcsname\noexpand\CD@MC}%
+\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4\endcsname\noexpand\CD@MC}}%
+\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless PostScript is set}\def
+\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{\CD@IJ\CD@sJ<>ht\CD@IJ
+\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@HJ{r#5}{#%
+2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@HJ{d#5}{#2}{u#4}{#3}{u%
+#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup\CD@GJ\CD@L{#1+:#2}\CD@L{#1%
+:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#3#4{\csname newbox%
+\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@sJ{}%
+\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@sJ{vee}\else
+\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup\aftergroup\CD@wF\CD@L{#1#2:#3%
+#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3-#3}\CD@L{#1#2:#3}\endgroup}%
+\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{%
+\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<%
+\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}%
+}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<\def\CD@wF#1#2{\def#1{\vbox{\vbox to%
+\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\vbox{%
+\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>%
+\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1#2{\def#1{\vbox{\kern-.4\CD@zC\vbox
+to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<%
+\CD@xF ut<\def\CD@BG#1{\hbox{\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5%
+mu{#1}\mkern-1.5mu\CD@ND}}\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1%
+{\hbox to\CD@LF{\setbox0=\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}%
+\CD@ND}\dimen0.5\wd0\advance\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0%
+\unhbox0\hss}}\def\CD@sB#1{\hbox to2\CD@LF{\hss\offinterlineskip\mathsurround
+\z@\CD@k{#1}\CD@ND\hss}}\def\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}%
+\def\CD@bE#1{\hbox{\kern-.15\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#%
+1{\vbox{\offinterlineskip\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{%
+\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-%
+}{@fillh}\CD@nF{lf:-}{@fillh}\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{%
+rh:}{null}\CD@nF{rm:}{null}\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null%
+}\CD@nF{lt:}{null}\CD@nF{dh:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{%
+uh:}{null}\CD@nF{um:}{null}\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null%
+}\CD@nF{+t:}{null}\CD@nF{-h:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def
+\CD@@D{\hbox{\vrule height 1pt depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF
+{lf:}{rf:}\CD@nF{+f:}{rf:}\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}%
+\def\CD@BD{\CD@U\null\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def
+\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3%
+}\edef\CD@QG{#4}\edef\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK
+\CD@BH\let\@x\CD@AH\ifx\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let
+\CD@LE\empty\fi\def\CD@LI{r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH
+{+}\def\@m{-}\ifx\CD@iD\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE
+\empty\ifx\CD@iD\CD@aE\let\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{%
+\CD@iD\CD@oJ}\ifx\CD@a\empty\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode
+\aftergroup\CD@kG\else\CD@@A\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler%
+}\CD@iD\CD@oB rm{middle}\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi
+\CD@oB rt{tail\space\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}%
+\NorthWest\CD@nG r+2+2{ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r%
++2-2{rd}{se}\SouthEast\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def
+\CD@sG{\CD@vG\CD@LI\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du%
+\Vertical@Map}\def\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH
+\@m+-\Slant@Map}\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode\lq\/=\active
+\def\CD@vG#1#2#3#4#5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE
+//\CD@jG#2#4#5h:\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3%
+#4//{\edef\CD@fG{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3%
+\CD@M#4//\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{%
+\CD@fG#1}\expandafter\CD@M\fi}\catcode\lq\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{%
+\aftergroup\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup
+\CD@CI\else\aftergroup\CD@BI\fi\CD@L{#1\@name}%
+%% ASCII round brackets and comma (,) appear on the next line
+\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
+\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{%
+arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined
+before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a
+declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}%
+\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{%
+\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket
+\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket
+\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF
+\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1
+\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}%
+\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or
+\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG
+\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef
+\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or
+#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi
+\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}%
+\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA
+\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
+\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax
+\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD
+#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1%
+\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{%
+\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}%
+\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC
+\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space
+ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed
+in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string
+\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and
+vertical arrows are terminated implicitly means\CD@uG that they cannot be
+mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for
+parallel horizontal arrows; verticals can just be put together in\CD@uG a cell%
+. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The
+horizontal maps must point to an object, not each other (I've put in\CD@uG one
+which you're unlikely to want). Use \string\pile\space if you want them
+parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers
+of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but
+must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don%
+'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from
+stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty
+before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi
+\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24087
+\message{because this one expired in December 2006!}\expandafter\endinput\fi
+\def\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{%
+\CD@GB-9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@
+plus 1.5\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{%
+fill@dot}{rf:.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6%
+\fi}}\def\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}%
+\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1%
+}\def\CD@NI{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}%
+\CD@tG\CD@pE\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let
+\CD@OG\CD@OC\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE
+\CD@aD\else\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else
+\CD@BD\global\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC
+\CD@YD\fi}\def\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=%
+\MapShortFall\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x
+\CD@pD\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}%
+\CD@tG\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let
+\CD@QG#3\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#%
+2#3#4#5{\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD
+\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def
+\break@args{\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{%
+\setbox1=\CD@oJ\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi
+\fi\CD@@G2\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2%
+\else\CD@oF2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5%
+\else\CD@oF5#1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1%
+\dimen@\prevdepth\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@
+\box0}}\def\CD@@G#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def
+#2{\xleaders\box#1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string
+\VerticalMap\space and \string\DiagonalMap\CD@uG are obsolete - use \CD@lG
+\space to pre-define maps}\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old
+horizontal map}\CD@LC\CD@TJ\def\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{%
+\CD@UH{#3}}\CD@SH\CD@jD{#4}\def\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#%
+3#4#5{\CD@BK\CD@pB433{vertical map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv
+\def\CD@oJ{\CD@GG{#1}}\CD@VH\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}%
+\def\CD@LE{\CD@GG{#5}}\CD@tD}\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def
+\CD@OG{4}\let\CD@kD\undefined\let\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def
+\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{\CD@vF{#3}}\ifPositiveGradient\let\mv\raise
+\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{%
+\CD@vF{#1}}\else\let\mv\lower\def\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def
+\CD@jD{\CD@vF{#4}}\def\CD@LE{\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{%
+\empty}\def\CD@SH{\CD@EG\CD@bE\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK
+\@fillv}\def\CD@EG#1#2#3#4#5{\def\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4%
+\null\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def
+\CD@UH#1{\hbox{\mathsurround\z@\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH
+\empty\else\ifx\CD@CH\CD@AD\else\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND
+\fi\fi}}\def\CD@yD#1#2{\setbox#1=\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle(%
+)\CD@ND}%% ASCII round brackets
+\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle
+\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def
+\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments
+\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;%
+\tokcase[:\CD@XF;%%]%ascii close square bracket
+\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{%
+\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH
+\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1%
+\actually@braces@missing@around@macro@in@label}\CD@UF}\def
+\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label
+{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer
+\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let
+\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been
+read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC
+\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def
+\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{%
+\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ
+\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{%
+\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter
+\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are
+obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi
+-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment
+\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{%
+\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def
+\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def
+\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let
+\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD
+\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter
+\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx
+\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name
+\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef
+\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was
+trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}%
+\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax
+\CD@CH}\def\CD@H#1],{%% ASCII close square bracket
+\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}%
+%% ASCII open and close square bracket
+\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket
+\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\undefined\ifx#1\undefined\CD@gB{option `%
+\@name' undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK
+\fi\fi\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\undefined
+\CD@e\else\expandafter\CD@oH\CD@GK,#1,(,),(,)[]%
+%%ASCII 5commas two pairs round, pair square
+\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y)
+value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}%
+\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\undefined\fi}%
+%% ASCII 2commas 2pair round, pair square on next line
+\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}%
+\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def
+\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\undefined\CD@gB{option `%
+\@name' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK
+\undefined#1#2\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=%
+#1,y=#2}}\def\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI
+#1{\CD@nF{@x}{cdps@#1}\ifx\@x\relax\CD@f{#1}{unknown}\else\ifx\@x\empty\CD@f{%
+#1}{cannot be used}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB{PostScript
+translator `#1' #2}\CD@ZB\let\cds@PS\empty\let\cds@noPS\empty}\def\CD@PH{}%
+\def\CD@PJ{\CD@fA\edef\CD@PH{\noexpand\CD@KB{\@name\space ignored within maths%
+}}}\def\diagramstyle{\CD@cJ\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let
+\diagramsstyle\diagramstyle\CD@tG\CD@sE\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB
+\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA
+\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG\CD@vE\CD@aB\CD@ZB\CD@tG\CD@EF\CD@DK
+\CD@CK\CD@tG\CD@rE\CD@JB\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG\CD@nE\CD@kA
+\CD@jA\CD@tG\CD@AF\CD@iG\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC{cds@1em}{%
+\CellSize1\CD@zC}\CD@RC{cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2em}{%
+\CellSize2\CD@zC}\CD@RC{cds@2.5em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{%
+\CellSize3\CD@zC}\CD@RC{cds@3.5em}{\CellSize3.5\CD@zC}\CD@RC{cds@4em}{%
+\CellSize4\CD@zC}\CD@RC{cds@4.5em}{\CellSize4.5\CD@zC}\CD@RC{cds@5em}{%
+\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize6\CD@zC}\CD@RC{cds@7em}{\CellSize7%
+\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}\def\cds@abut{\MapsAbut\dimen1\z@
+\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag
+\CD@O\else\def\CD{\diagram[amstex]}%%ascii square brackets []
+\fi\CD@T\catcode\lq\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{%
+\let\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre
+\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ
+\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE
+\CD@DC{.5\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{%
+cds@crab+}{\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}%
+\CD@RC{cds@crab--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let
+\CD@QC}{3em}\CD@NJ}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def
+\cds@dpi{\CD@RJ{1truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\undefined
+\def\cds@eqno{\let\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG
+\CD@fE\CD@J\CD@I\def\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE
+\CD@nA\CD@nA}\def\cds@gap{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{%
+\wd3=}\MapShortFall} \def\cds@grid{\ifx\CD@GK\undefined\let\h@grid\relax\let
+\v@grid\relax\else\CD@nF{h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx
+\h@grid\relax\CD@gB{unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax
+\let\v@grid\relax\def\cds@gridx{\ifx\CD@GK\undefined\else\cds@grid\fi\let
+\CD@CH\h@grid\let\h@grid\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD
+\DiagramCellHeight}\def\cds@hcenter{\let\CD@hA\CD@aA}\let\cds@hcentre
+\cds@hcenter\def\cds@heads{\CD@BE{\let\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx
+\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle
+\cds@balance\def\cds@htriangleheight{\CD@BE\DiagramCellHeight
+\DiagramCellHeight\DiagramCellWidth1.73205\DiagramCellHeight}\def
+\cds@htrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth
+\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE\CD@dE\CD@eE\def
+\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def
+\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}%
+\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def
+\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{%
+equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def
+\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def
+\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{%
+\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
+\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
+\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance
+\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def
+\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def
+\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@noPostScript{\global\let\CD@n\empty
+\CD@BE\CD@DI\empty\CD@ZB\let\cds@PS\empty\let\cds@noPS\empty}\def\cds@noPS{%
+\CD@ZB\global\let\CD@n\empty}\def\cds@notextflow{\CD@RB}\def\cds@noTPIC{%
+\CD@CK}\def\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let
+\CD@hA\CD@iB}\def\cds@p{\CD@zD\PileSpacing}\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\let
+\cds@pilespacing\cds@p\def\cds@pixelsize{\CD@zD\CD@@I\CD@gI}\def\cds@portrait
+{\CD@jA}\def\cds@PostScript{\CD@aB\global\let\CD@n\empty\let\cds@PS\CD@aB\let
+\cds@noPS\CD@ZB\CD@BE\CD@DI\empty}\def\cds@PS{\CD@aB\global\let\CD@n\empty}%
+\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript option for better results}}%
+\def\cds@repositionpullbacks{\let\make@pbk\CD@fH\let\CD@qH\CD@pH}\def
+\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{\dimen5 }}\def
+\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG\CD@sB\let
+\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}\def
+\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@zD
+\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{%
+\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}\def\CD@gB##1{}}\let
+\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def\cds@snake{\CD@BE\CD@eJ\z@
+}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{\CD@SB\CD@PJ}\def\cds@thick{%
+\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2\CD@LF}\CD@@J}\def\cds@thin{%
+\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}\def\cds@tight{\CD@WB}\let
+\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def\cds@uppershortfall{%
+\ifPositiveGradient\cds@rightshortfall\else\cds@leftshortfall\fi}\def
+\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre\cds@vcenter\def
+\cds@vtriangleheight{\CD@BE\DiagramCellHeight\DiagramCellHeight
+\DiagramCellWidth.577035\DiagramCellHeight}\def\cds@vtrianglewidth{\CD@BE
+\DiagramCellWidth\DiagramCellWidth\DiagramCellHeight1.73205\DiagramCellWidth}%
+\def\cds@vmiddle{\let\CD@dB\CD@eB}\def\cds@w{\CD@zD\DiagramCellWidth}\let
+\cds@width\cds@w\def\diagram{\relax\protect\CD@bC}\def\enddiagram{\protect
+\CD@SG}\def\CD@bC{\CD@g\CD@uI\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global
+\CD@NB\z@\boxmaxdepth\maxdimen\everycr{}\ifx\pdfoutput\undefined\else\ifx
+\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@dK\CD@aB\global\let\CD@n\empty
+\fi\fi\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def\CD@ZC{%
+\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let\CD@EH
+\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without PostScript%
+}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{\CD@nE
+\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0\CD@pI
+\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\undefined
+\global\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=%
+\hbox to\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@
+\dp2\z@\wd2\z@\CD@hK\pdfliteral{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1
+bturn}\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global
+\@ignorefalse\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else
+\CD@qE\CD@gA\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi
+\fi\fi\fi\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else
+\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}%
+\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1%
+\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2
+\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{%
+\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance
+\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
+\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
+\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
+\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
+\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def
+\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox
+2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\undefined\else\CD@k
+\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen
+0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA
+\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the
+\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box
+1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }%
+\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen
+\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen
+\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q
+\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par
+\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip
+\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
+\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign
+\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#%
+#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup
+\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i
+}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax
+\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax
+\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA
+\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
+\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat
+\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{%
+\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim
+\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance
+\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the
+\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@
+\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH
+\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0%
+\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2%
+\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{%
+\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@
+\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht
+3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen
+3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ
+\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2%
+\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid
+2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else
+\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen
+2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance
+\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3%
+\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6
+\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else
+\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern
+\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE
+\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else
+\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum
+\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V
+{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup
+\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5%
+\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5
+\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else
+\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower
+\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9%
+\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient
+\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8
+\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient
+\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8
+\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance
+\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6
+\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ
+\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK
+\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK
+\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise
+\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK
+\expandafter\pdfliteral{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0
+cm}\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the
+\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ
+\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else
+\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH
+\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}%
+\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{%
+\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip
+\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA
+\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi
+\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA
+\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-%
+\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH
+:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-%
+\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG
+\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect
+\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop
+\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD
+\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC
+\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def
+\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##%
+\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}%
+\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC
+\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup
+\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC
+\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{%
+\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1%
+\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
+\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{%
+\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip
+\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox
+\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox
+\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def
+\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox
+\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in
+pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}%
+\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box
+1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7
+\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH
+\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH
+\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd
+\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox
+\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ
+{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox
+\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid
+3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3
+\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB
+\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd
+0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi
+\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi
+\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else
+\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH
+\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3
+\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern
+\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=%
+\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}%
+\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi
+\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty
+\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht
+\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp
+\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=%
+\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern
+\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF
+\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }%
+\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA
+\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum
+\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{%
+\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA
+\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{%
+\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi
+\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox
+\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0%
+\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB
+{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{%
+\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA
+\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:%
+rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=%
+\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty
+\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=%
+\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox
+0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA
+\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{%
+\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern
+\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2
+\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-%
+\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1%
+=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@
+\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of
+vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to%
+\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen
+1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to%
+\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen
+6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}%
+\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB
+\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG
+\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else
+\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists
+\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB
+=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance
+\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too
+many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{%
+\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1%
+\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum
+\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D%
+\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ
+\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ
+\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{%
+\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty
+\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip
+\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{%
+\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF
+\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance
+\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB
+\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum
+\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA
+\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox
+\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{%
+diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum
+\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB
+\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@
+\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi
+\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f%
+\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@
+\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB
+\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB
+\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null
+\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE
+\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA
+\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance
+\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year
+\multiply\count@12 \advance\count@\month\ifnum\count@>24090 \loop\iftrue
+\message{gone October 2007!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF
+\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA
+\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA
+\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}%
+\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax
+\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #%
+3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox
+\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA
+\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance
+\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance
+\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd
+\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1
+\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA
+\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4
+\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance
+\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0%
+\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB
+\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0%
+\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB
+\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB
+\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance
+\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def
+\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK
+\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF
+\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-%
+\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see
+manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA
+\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen
+0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1%
+\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
+\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
+\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V
+\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA
+\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA
+\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd
+\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA
+\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA
+\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox
+\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance
+\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA
+\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF
+\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround
+\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
+9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
+\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
+\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
+\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@
+\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000
+\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
+\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox
+\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def
+\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox
+\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH
+\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf
+\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else
+\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
+\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF
+\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat
+\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB
+\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{%
+prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox
+\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip
+\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp
+\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd
+\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH
+\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance
+\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox
+\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty
+\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip
+\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp
+\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{%
+\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH
+width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox
+\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA
+\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or
+\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG
+\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{%
+\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum
+\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip
+\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi
+\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile
+\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing
+horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi
+\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox
+0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1
+\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}%
+\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
+}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI
+\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF
+\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI
+\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=%
+\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC
+\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox
+\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht
+\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd
+\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB
+\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
+\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}%
+\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{%
+\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
+\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance
+\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or
+\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@\rq33 \else
+\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH
+\advance\count@\CD@LH\fi}\def\CD@fF{\count@\rq\ifcase\CD@LH55\or\ifcase\CD@TC
+66\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase
+\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi
+\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient
+\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
+\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
+\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#%
+1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
+\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{%
+\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}%
+\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{%
+\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>%
+}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+%
+h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t%
+:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC
+\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-%
+t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF
+\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#%
+2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}%
+%% % .7em until 29.7.98
+\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98
+\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{%
+\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}%
+\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f%
+:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment
+\CD@CH%%
+\count@=\rq}\def\lnchar{\CD@@K\CD@qF}\let\laf\lnchar\let\lah\lnchar\def\lad{%
+\CD@@K\xlad}\def\xlad{\setbox2=\hbox{\CD@qF}\setbox0=\hbox to.3\wd2{\hss.\hss
+}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance\dimen1-\dimen0 \dp
+0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5\dimen1 \raise\dp0%
+\box0}\def\lahh{\CD@@K\xlahh}\def\lat{\CD@@K\xlat}\def\xlat{\setbox0=\hbox{%
+\CD@qF}\dimen0=\ht0 \setbox1=\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss
+\or\hss\box0 \or\hss\box0 \or\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1%
+\vss\else\vss\box1\fi\kern\z@}}\def\xlahh{\setbox0=\hbox{\CD@qF}%
+\ifPositiveGradient\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing
+\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0
+\box0 \fi\fi}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1
+\dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum\count@=0 \box8 \ifdim
+\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi\else\dimen3=\dimen5
+\advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4\dimen3 \CD@dG{\dimen4}%
+\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6\dimen1 \advance\dimen6-%
+\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@>0 \kern-\dimen6 \advance
+\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1}\else\CD@dF{#1}\fi}\def
+\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex \newdimen\objectwidth
+\objectwidth1em \def\CD@YD{\dimen6=\CD@aK\DiagramCellHeight\dimen7=\CD@WK
+\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum\CD@TC>0 \CD@aF\else\aftergroup
+\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{\CD@YA{diagonal map is nearly
+vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map is nearly horizontal}\CD@NA}%
+\CD@rG\CD@NA{Use an orthogonal map instead}\def\CD@aF{\CD@MJ\dimen3\dimen7%
+\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-\dimen7 \CD@MF\ifnum\CD@LH>%
+\CD@TC\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \CD@iC{\dimen1}\CD@iC{%
+\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\CD@dG{\dimen0}\advance
+\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7%
+\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-%
+\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK\DiagramCellWidth\setbox6=\llap{%
+\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1
+\advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}%
+\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox
+7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}\advance\dimen0-\axisheight\advance
+\dimen0-\CD@bK\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6
+\advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@TB\fi\fi\dimen3%
+\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@tE\else\dimen8%
+\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8}\CD@X{\dimen8}{.5\wd3}\dimen9%
+\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}\CD@X{\dimen9}{.5\wd3}%
+\ifPositiveGradient\advance\dimen2-\dimen9\advance\dimen4-\dimen8 \else
+\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3
+\fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@tE
+\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0\advance\dimen2\dp2 \else
+\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen
+4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2%
+\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1
+\else\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance
+\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}%
+\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7
+\lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \CD@tE\else\raise
+\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht
+5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi
+\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI\CD@rB
+\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def\SouthWest
+{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB\DiagonalChoice2 }%
+\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA\ifPositiveGradient\else-\fi
+\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK\relax\hbox{\advance\CD@uA
+\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK\hbox{\box6 \kern\CD@DC\kern
+\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA\penalty\CD@vA}\penalty\CD@uA
+\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax\vadjust{\hbox@maths{#1}%
+\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{\ifcase\CD@GB\or\or
+\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@bH{.5\wd0}%
+{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@TG\else
+\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern
+\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-\CD@NB\penalty\CD@uA
+\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@\global\CD@yA
+\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA-\CD@yA\CD@vA
+\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA\lastpenalty
+\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-\lastpenalty
+\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern\unkern
+\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox\unpenalty\CD@eJ
+\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7\CD@tB\advance
+\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne\let\mv\empty
+\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>\CD@NB\dimen6%
+\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK\setbox1\null\ht
+1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA\CD@LH\CD@vA\CD@TC
+\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance\dimen2\CD@eJ\CD@eG{%
+\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0\ifPositiveGradient\else-%
+\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight\ht2\dimen0 \dimen0\CD@DC
+\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen0\ifPositiveGradient-\fi
+\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 \setbox4\null\dimen0 .6%
+\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC\CD@dG{\dimen0}\wd4\dimen0
+\dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance\dimen1\ht2 \CD@CC6+-\raise
+\dimen1\rlap{\ifPositiveGradient\advance\dimen0-\wd6\advance\dimen0-\wd4 \else
+\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi\dimen0\wd2 \ifvoid7\else\dimen1%
+\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower\dimen1\rlap{\ifPositiveGradient
+\advance\dimen0\wd4 \else\advance\dimen0-\wd7\advance\dimen0-\wd4 \fi\kern
+\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@\CD@bH{\z@}{\box\z@}{\z@}{%
+\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim\dimen4>.25\dimen7\dimen4=%
+.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 \advance\dimen4.6\CD@zC\fi
+\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}\advance\dimen4-\dimen5 \dimen
+5\dimen4\CD@eG{\dimen5}\advance\dimen0\ifPositiveGradient#2\else#3\fi\dimen5
+\CD@dG{\dimen4}\advance\dimen1\dimen4 } \def\CD@eD#1{\expandafter\CD@IK{#1}}%
+\CD@ZA\CD@EK{output is PostScript dependent}\def\CD@SC{\CD@IK{/bturn {gsave
+currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg
+exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@gK{%
+\relax\CD@hK\pdfliteral{Q}\else\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax
+\multiply\count@7\advance\count@16577\divide\count@33154 }\def\CD@fD#1{%
+\expandafter\special{#1}} \def\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{%
+\dimen0}\CD@OJ{\dimen0}\setbox0=\null\ifPositiveGradient\count@-\count@\ht0%
+\dimen0 \else\dp0\dimen0 \fi\box0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the
+\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#1}\CD@fD{pa \the\count@\space\the\CD@uA}%
+\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{\CD@KJ\begingroup\ifdim\dimen7<\dimen6
+\dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@LH\CD@LH\CD@TC
+\CD@TC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA
+\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA\CD@iK\CD@lK{%
+\ifPositiveGradient\else-\fi\dimen6}\CD@iK\CD@kK{\ifPositiveGradient-\fi
+\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ\ifdim\dimen7>1.73\dimen6
+\divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.353553\dimen2 \advance\CD@LH
+-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2%
+.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2
+\ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\CD@@A
+\else\CD@y\fi\advance\dimen0-\count@\dimen2 \CD@gE\multiply\dimen0\m@ne\fi
+\ifnum\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7
+3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}\fi\CD@KJ\dimen2\dimen3\CD@dG{%
+\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 \CD@ZG1\CD@ZG{0.3}\dimen1%
+\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{1.5}\CD@ZG{0.3}\divide
+\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1%
+\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne
+\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global\CD@RA\dimen1\endgroup
+\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG\CD@OC\def\CD@KJ{%
+\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen6\dimen6\dimen9%
+\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0\z@\dimen8=%
+\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA\dimen
+\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@\dimen6
+\divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 \advance
+\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim\dimen6>%
+\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter\expandafter
+\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen9<2\dimen8
+\dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim
+\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance\dimen9\count@
+\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2%
+\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\CD@ZG#1{%
+\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1\CD@TC
+\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def\CD@iC#1{%
+\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH\multiply
+\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def\CD@iK#1#2{%
+\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply\dimen2\tw@
+\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@\dimen2\relax
+\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup\let#1\CD@fK}{%
+\catcode\lq p=12 \catcode\lq0=12 \catcode\lq.=12 \catcode\lq t=12 \gdef\CD@jK
+#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\undefined\CD@tJ\let\CD@GH\relax
+\else\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@CD
+\empty\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax\let
+\CD@zF\relax\message{! Why not upgrade to TeX version 3? (available since 1990%
+)}\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred}%
+\def\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999}%
+\def\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum
+\CD@h<\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else
+\edef\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2%
+\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter
+\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum
+\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-%
+\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the
+\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi
+\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}%
+\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{%
+Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{%
+Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{%
+\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}%
+\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{%
+\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB
+\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}%
+\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not
+available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA
+#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax
+\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA
+}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else
+\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@
+\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the
+\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH
+\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message
+above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before
+resuming the text, in\CD@uG which case some garbage may be added to the
+diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line
+in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are
+misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already
+closed too many brace pairs or environments; an \CD@HD\CD@uG command was (%
+over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}%
+\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD
+\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}%
+\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand
+\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}%
+\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}%
+\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing
+group}}\ifx\DeclareOption\undefined\else\ifx\DeclareOption\@notprerr\else
+\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E
+\CurrentOption,}\fi\fi
+%%======================================================================%
+%% %
+%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS %
+%% %
+%%======================================================================%
+
+%% NOTE: The recommended way of defining arrow commands is now
+%% \newarrow{Name}{tail}{filler}{middle}{filler}{head}
+%% which defines \rName, \lName, \dName and \uName using arrow parts which
+%% have themselves previously been defined using the commands
+%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.
+
+%% The components \rhvee etc have been retained for the time being, as an
+%% intermediate stage and to continue to support the old \HorizontalMap and
+%% \VerticalMap commands, but you should not rely on the continued existence
+%% of these macros.
+
+%% The various components usually need some correction
+%% - longitudinally, ie to prevent gaps and overprints with the shaft,
+%% - transversally, ie to prevent "steps" in the junction with the shaft.
+%% The former can be done safely ad hoc, eg with \mkern1mu.
+%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
+%% \shifthook and \raisehook, which include pixel corrections.
+
+%% Please note that these and the other auxillary macros which follow are
+%% interim. When it becomes clear exactly what kinds of adjustments are
+%% needed for characters, this job will be done by a suitable extension
+%% to the language of \newarrowhead, etc. If you have any other ideas for
+%% transformations of general use please tell me.
+
+%% By all means experiment with other characters for arrowheads, but
+%% please, in your own interests, do not rely on macros like \rhvee,
+%% send me a copy of your definitions for distribution to other users
+%% in this file, and keep track of where your efforts get copied so
+%% that they can be replaced with the "official" version when it is
+%% incorporated.
+
+%% ***** DONT use macros with mangled names like \Cd@gH. *****
+
+\catcode\lq\$=3 %% make sure that $ means maths-shift
+\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt
+
+%% print #1 in \scriptstyle, adjusting for the maths axis height
+\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
+\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
+\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise
+\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-%
+\ss@axisheight\raise\dimen0\hbox{#1}}
+
+%% Some of the characters would look better in bold since they're
+%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
+%% do this, defining this to do nothing if it doesn't exist.
+%% With the old LaTeX font selection at other than 10pt you may still
+%% get nothing happenning. Also, PK fonts may be missing.
+%% If you have problems, DONT use boldhook or boldlittlevee.
+\ifx\boldmath\undefined%%
+\let\boldscriptaxis\scriptaxis%%
+\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
+\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
+\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
+\fi
+
+%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
+\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
+%% the character to use
+\dimen0\ss@axisheight%% \scriptscriptstyle axis height
+\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
+\dimen2\ht3\advance\dimen2-\dimen0%
+%% height of char above axis (half spread)
+\advance\dimen2-0.021em\advance\dimen1 #2\dimen2%
+%% shift = axis_difference +/- half_spread
+\raise\dimen1\box3}}%% print the character
+%% Mark Dawson suggested using the width
+\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1%
+\divide\dimen0 12\CD@zH{\dimen0}%% "u"
+\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}%
+\kern#2\dimen1\box1}%% print
+
+%% use the extension font (cmex) for double vertical arrows
+\def\@cmex{\mathchar"03}%%ascii double quote
+
+%% ************* P U L L B A C K S ************
+
+%% These will probably be replaced by something less ad hoc
+%% in a future version.
+
+\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
+\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0%
+.35em}
+
+%% This is a hack for my book ``Practical Foundations of Mathematics''
+%% and WILL NOT BE SUPPORTED --- DO NOT USE IT!
+\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{}
+
+\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.%
+95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}}
+
+\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em
+\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}}
+
+\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.%
+95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}}
+
+\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em
+\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}}
+
+%% Freyd & Scedrov puncture symbol for non-commuting polygon
+\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
+0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
+\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
+depth-.47\ht0 width.35\ht0 }}
+
+%% 2-cells: (24.11.95)
+%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
+\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%%
+\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%%
+\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%%
+\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%%
+\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%%
+\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%%
+\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%%
+\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}}
+
+%%======================================================================%
+%% %
+%% (23) BITS OF ARROWS %
+%% %
+%%======================================================================%
+
+%% ********** H E A D S ***********
+
+%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
+%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}
+
+%% vee head
+\def\rhvee{\mkern-10mu\greaterthan}%%
+\def\lhvee{\lessthan\mkern-10mu}%%
+\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
+\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
+\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee
+
+%% little vee head
+\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
+\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
+\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\ifx\boldmath\undefined%%
+\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\else%%
+\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
+\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
+\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
+\lhvee}\dhblvee\uhblvee%%
+\fi
+
+%% curly vee head (uses AMS symbols fonts)
+\def\rhcvee{\mkern-10mu\succ}%%
+\def\lhcvee{\prec\mkern-10mu}%%
+\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
+\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
+\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee
+
+%% double vee head %% will probably be withdrawn later
+\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
+\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
+\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
+\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
+\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee
+
+%% open and closed triangles (uses AMS symbols fonts)
+\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
+\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
+\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
+\def\lhtriangle{\triangleleft\mkern.8mu}%%
+\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
+\kern-.25ex}}%%
+%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
+%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
+%% and also for compatibility with upward arrow.
+\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
+\kern-.1ex}}%% 15.1.93 from -.25ex
+\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
+%% AMS
+\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
+%% AMS
+\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangledown$}}}%% AMS
+\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangle$}}}%% AMS
+\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
+\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
+\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
+\dhlblack\uhlblack
+
+%% LaTeX arrowheads
+\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
+\axisheight\box0\kern.1\dimen0}}%%
+\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
+\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
+\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla
+
+%% double LaTeX arrowheads %% will probably be withdrawn later
+\def\lhlala{\lhla\kern.3em\lhla}%%
+\def\rhlala{\rhla\kern.3em\rhla}%%
+\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
+\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
+\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala
+
+%% circles % \rho is a Greek letter!
+\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
+\newarrowhead{o}\hho\hho\circ\circ%%
+\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
+\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
+\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
+\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++
+
+%% empty head {} is also available
+
+%% Y from stmaryrd (vertical ones still need large adjustment)
+\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown
+
+%% ********** H E A D S with S H A F T S ***********
+
+%% little arrow with shaft
+\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow
+
+%% arrow with double shaft
+%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
+\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
+\upharpoonleft
+
+%% little double-headed arrow with shaft (uses AMS symbols fonts)
+\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
+\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
+\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
+\twoheaduparrow
+
+%% ********** T A I L S ***********
+
+%% vee tail
+\def\rtvee{\greaterthan}%%
+\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
+\def\dtvee{\vee}%%
+\def\utvee{\wedge}%%
+\newarrowtail{vee}\greaterthan\ltvee\vee\wedge
+
+%% little vee tail
+\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\undefined
+\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
+boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
+\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi
+
+%% curly vee tail (uses AMS symbols fonts)
+\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge
+
+%% open and closed triangle tails (uses AMS symbols fonts)
+\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
+\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
+\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
+\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
+\dhlblack\uhlblack
+
+%% LaTeX tails
+\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.2\dimen0}}%%
+\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
+\kern-.1\dimen0}}%% 15.1.93 from -.6
+\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
+\kern-.6\dimen0}}%%
+\newarrowtail{LaTeX}\rtla\ltla\dtla\utla
+
+%% double vee tail %% will probably be withdrawn later
+\def\rtvvee{\gg\mkern-3mu}%%
+\def\ltvvee{\mkern-3mu\ll}%%
+\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
+\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
+\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee
+
+%% double LaTeX tails %% will probably be withdrawn later
+\def\ltlala{\ltla\kern.3em\ltla}%%
+\def\rtlala{\rtla\kern.3em\rtla}%%
+\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
+\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
+\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala
+
+%% bar (as in \mapsto)
+\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
+\let\dtbar\utbar%%
+\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
+%%
+\let\ltbar\rtbar%%
+\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
+\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)
+
+%% hooks (as in \into): choice of after/above and before/below
+
+\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
+\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
+\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
+\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%
+
+\def\dthooka{\shifthook{}+\cap}%%
+\def\dthookb{\shifthook{}-\cap}%%
+\def\uthooka{\shifthook{}+\cup}%%
+\def\uthookb{\shifthook{}-\cup}%%
+
+\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
+\rthookb\lthookb\dthookb\uthookb
+
+\ifx\boldmath\undefined\newarrowtail{boldhooka}\rthooka\lthooka\dthooka
+\uthooka\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail
+{boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook
+\boldmath+\subset\mkern-1mu}%%
+\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
+\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
+\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
+\def\dtbhooka{\shifthook\boldmath+\cap}%%
+\def\dtbhookb{\shifthook\boldmath-\cap}%%
+\def\utbhooka{\shifthook\boldmath+\cup}%%
+\def\utbhookb{\shifthook\boldmath-\cup}%%
+\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
+boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
+\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi
+
+%% square-ended hooks (used for closed subsets in ``lifting and gluing'')
+\def\dtsqhooka{\shifthook{}+\sqcap}%%
+\def\dtsqhookb{\shifthook{}-\sqcap}%%
+\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%%
+\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%%
+\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%%
+\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%%
+\def\utsqhooka{\shifthook{}+\sqcup}%%
+\def\utsqhookb{\shifthook{}-\sqcup}%%
+\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka
+
+%% the following seem the better choices at 10pt & 300dpi
+\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
+\lthookb\dthooka\uthooka
+
+%% circles
+\newarrowtail{o}\hho\hho\circ\circ%%
+\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++
+
+%% empty tail {} is also available
+
+%% Y from stmaryrd (vertical ones still need adjustment)
+\newarrowtail{Y}\Yright\Yleft\Yup\Ydown
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
+\downharpoonright
+
+%% ********** F I L L E R S ***********
+
+%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.
+
+%% dot {.}, single rule {-} and empty {} fillers are also available
+
+%% double and triple lines
+%%\newarrowfiller{=}==\Vert\Vert%%
+\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
+\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
+\newarrowfiller{3}\equiv\equiv\vfthree\vfthree
+
+%% dashed line
+\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
+\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%%
+\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%%
+\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
+\def\vfdash{\vfdashstrut\vfthedash}%%
+\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash
+
+%% ************* M I D D L E S ************
+
+%% plus
+\newarrowmiddle+++++
+
+%% ************* D I A G O N A L S ************
+
+%% simple arrow heads
+%%\def\nwhTO{\nwarrow\mkern-1mu}%%
+%%\def\nehTO{\mkern-.1mu\nearrow}%%
+%%\def\sehTO{\searrow\mkern-.02mu}%%
+%%\def\swhTO{\mkern-.8mu\swarrow}%%
+
+%%======================================================================%
+%% %
+%% (24) ARROW COMMANDS %
+%% %
+%%======================================================================%
+
+%% change to \iftrue to get mixed heads
+\iffalse%%
+\newarrow{To}----{vee}%%
+\newarrow{Arr}----{LaTeX}%%
+\newarrow{Dotsto}....{vee}%%
+\newarrow{Dotsarr}....{LaTeX}%%
+\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
+\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
+\newarrow{Mapsto}{mapsto}---{vee}%%
+\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
+\newarrow{IntoA}{hooka}---{vee}%%
+\newarrow{IntoB}{hookb}---{vee}%%
+\newarrow{Embed}{vee}---{vee}%%
+\newarrow{Emarr}{LaTeX}---{LaTeX}%%
+\newarrow{Onto}----{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\newarrow{Dotsonto}....{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\else%%
+\newarrow{To}---->%%
+\newarrow{Arr}---->%%
+\newarrow{Dotsto}....>%%
+\newarrow{Dotsarr}....>%%
+\newarrow{Dashto}{}{dash}{}{dash}>%%
+\newarrow{Dasharr}{}{dash}{}{dash}>%%
+\newarrow{Mapsto}{mapsto}--->%%
+\newarrow{Mapsarr}{mapsto}--->%%
+\newarrow{IntoA}{hooka}--->%%
+\newarrow{IntoB}{hookb}--->%%
+\newarrow{Embed}>--->%%
+\newarrow{Emarr}>--->%%
+\newarrow{Onto}----{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\newarrow{Dotsonto}....{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\fi%%
+
+\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
+\newarrow{Project}----{triangle}%%
+\newarrow{Pto}----{harpoon}%% partial function
+\newarrow{Relto}{harpoon}---{harpoon}%% binary relation
+
+\newarrow{Eq}=====%%
+\newarrow{Line}-----%%
+\newarrow{Dots}.....%%
+\newarrow{Dashes}{}{dash}{}{dash}{}%%
+
+%% square hooked arrow (used in my ``gluing and lifting'' paper)
+\newarrow{SquareInto}{sqhook}--->
+
+%% braces and parentheses
+%% \newarrow gives inappropriate directions, so we change the names
+%% the vertical filler is too far to the right; horizontal too high
+%% the vertical middles are too low with midvshaft
+%% maybe we'll add square brackets and the integral sign one day
+\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
+\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
+\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{%
+\hbox@maths{\@cmex3D\mkern-2mu}}}%% right
+{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left
+\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
+\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
+\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets []
+\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets []
+\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets []
+\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets []
+\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets []
+\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets []
+\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets []
+\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets []
+
+%% synonyms for reverse compatibility
+
+\let\uFrom\uTo%%
+\let\lFrom\lTo%%
+\let\uDotsfrom\uDotsto%%
+\let\lDotsfrom\lDotsto%%
+\let\uDashfrom\uDashto%%
+\let\lDashfrom\lDashto%%
+\let\uImpliedby\uImplies%%
+\let\lImpliedby\lImplies%%
+\let\uMapsfrom\uMapsto%%
+\let\lMapsfrom\lMapsto%%
+\let\lOnfrom\lOnto%%
+\let\uOnfrom\uOnto%%
+\let\lPfrom\lPto%%
+\let\uPfrom\uPto%%
+
+\let\uInfromA\uIntoA%%
+\let\uInfromB\uIntoB%%
+\let\lInfromA\lIntoA%%
+\let\lInfromB\lIntoB%%
+\let\rInto\rIntoA%%
+\let\lInto\lIntoA%%
+\let\dInto\dIntoB%%
+\let\uInto\uIntoA%%
+\let\ruInto\ruIntoA%%
+\let\luInto\luIntoA%%
+\let\rdInto\rdIntoA%%
+\let\ldInto\ldIntoA%%
+%%
+\let\hEq\rEq%%
+\let\vEq\uEq%%
+\let\hLine\rLine%%
+\let\vLine\uLine%%
+\let\hDots\rDots%%
+\let\vDots\uDots%%
+\let\hDashes\rDashes%%
+\let\vDashes\uDashes%%
+
+%%=========================================================================%
+%% The following are included for reverse compatibility only.
+%%=========================================================================%
+\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
+\ruTo(2,3)}%%ascii
+\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
+\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
+\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
+\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
+\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
+\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
+\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
+\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
+\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
+\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
+\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii
+
+\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
+{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
+\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
+\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
+\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
+\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
+\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
+\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
+\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
+\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
+\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
+\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
+\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii
+
+\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
+(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
+\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
+\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
+\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
+\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
+\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
+\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
+\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
+\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
+\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
+\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
+\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii
+
+\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
+\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
+\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
+\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
+\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
+\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
+\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
+\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
+\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
+\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
+\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
+\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
+\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii
+
+\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
+\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
+\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
+\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
+\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
+\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
+\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
+\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
+\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
+\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
+\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
+\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
+\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii
+
+\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
+(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
+\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
+\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
+\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
+\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
+\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
+\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
+\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
+\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
+\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
+\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
+\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii
+
+\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
+\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
+\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
+\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
+\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
+\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
+\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
+\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
+\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
+\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
+\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
+\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
+\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii
+
+%%======================================================================%
+%% %
+%% (25) MISCELLANEOUS %
+%% %
+%%======================================================================%
+
+\def\labelstyle{%%
+\ifincommdiag%%
+\textstyle%%
+\else%%
+\scriptstyle%%
+\fi}%%
+\let\objectstyle\displaystyle
+
+\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
+17557,1.17557,1.902113,1.902113}
+
+\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
+.75,0.75,1.1,1.1,0.9,0.9}
+
+\diagramstyle[%%ascii open square bracket
+dpi=300,%% office laserwriters are usually 300 dots per inch
+vmiddle,nobalance,%% vertical and horizontal positioning
+loose,%% allow rows and columns to stretch
+thin,%% line10 arrows; default rule thickness (TeXbook p447)
+pilespacing=10pt,%
+%% parallel vertical separation (horizontals: half this)
+shortfall=4pt,%% distance between arrowheads and their targets
+PostScript=Rokicki,%% default to PostScript not pure DVI
+%% The following are defaulted on entry to the diagram itself.
+%% l>=2em minimum length of horizontal arrow shafts in text
+%% l>=1em ditto in diagrams
+%% size=3em cell size
+%% heads=LaTeX arrowheads
+]%%ascii close square bracket
+
+%% process options to LaTeX2e's \usepackage[options]{diagrams}
+\ifx\ProcessOptions\undefined\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi
+\fi
+
+\cdrestoreat%% restore old category code for @ etc
+%%============================== THE END ==============================
+
+\dimen0 200pt \dimen1 210pt \dimen2 220pt \dimen3 230pt \dimen4 240pt \dimen5
+250pt \dimen6 260pt \dimen7 270pt \dimen8 280pt \dimen9 290pt
+
+%% This is the end of Paul Taylor's commutative diagrams package.
+
diff --git a/macros/generic/diagrams/taylor/V3,91.tex b/macros/generic/diagrams/taylor/V3,91.tex
new file mode 100644
index 0000000000..c5c6ce2f11
--- /dev/null
+++ b/macros/generic/diagrams/taylor/V3,91.tex
@@ -0,0 +1,1917 @@
+% mangletex (24 Nov 1995) run at 17:43 BST Friday 01 September 2006
+\message{===================================================================}%
+\message{< Paul Taylor's commutative diagrams - version 3.91, August 2006 > }%
+%%
+%%
+%% This code runs the LaTeX \ProvidesPackage command iff it is defined.
+%% included at the request of Michael Downes <mjd@ams.org> March 2002.
+%% Put \listfiles in your LaTeX preamble to see what this is for.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{%
+\fi\ProvidesPackage{diagrams}[2006/08/31 v3.91 Paul Taylor's commutative
+diagrams]%%
+\toks0=\bgroup}%%
+%%======================================================================%
+%% TeX macros for drawing category-theoretic diagrams %
+%% %
+%% Paul Taylor %
+%% %
+%% www.ctan.org or www.cs.man.ac.uk/~pt/diagrams %
+%% %
+%% PLEASE READ THE MANUAL! %
+%% %
+%% Please ensure that you are registered with me as a user so that %
+%% you can be informed of future releases. Any electronic mail %
+%% message with "commutative" or "diagram" in the subject line %
+%% (such as your request for the package, a question about it, or %
+%% even an otherwise blank message) automatically registers you. %
+%% %
+%% %
+%% CONTENTS: %
+%% (O) corruption-sensitive hacks (to approx line 328) %
+%% Arrow components & commands - starts approx line 1240 %
+%% (22) auxillary macros for adjustment of components %
+%% (23) bits of arrows (\rhvee etc) %
+%% (24) arrow commands (\rTo etc) %
+%% (25) miscellaneous %
+%% Apart from these five sections, the rest is intended to be totally %
+%% meaningless in the undocumented version, which is approximately %
+%% 1910 lines long. Please do not waste trees by printing it out. %
+%% %
+%% COPYRIGHT NOTICE: %
+%% This package may be copied and used freely for any academic %
+%% (not commercial or military) purpose, on condition that it %
+%% is not altered in any way, and that an acknowledgement is %
+%% included in any published work making substantial use of it. %
+%% %
+%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. %
+%% %
+%% If you are doing something where mistakes cost money (or where %
+%% success brings financial profit) then you must use commercial %
+%% software, not this package. In any case, please remember to %
+%% keep several backup copies of all files, and check everything %
+%% visually before sending final copy to the publishers. %
+%% %
+%% You may use this package as a (substantial) aid to writing an %
+%% academic research or text book on condition that %
+%% (i) you contact me at a suitable time to ensure that you have %
+%% an up-to-date version (and any infelicities can be fixed), %
+%% (ii) you send me a copy of the book when it's published. %
+%% %
+%% HISTORY %
+%% 3.91 Released 31 August 2006 %
+%% Renamed "noPostScript" option as "UglyObsolete". %
+%% 3.90 Released 11 April 2004 %
+%% use PostScript=Rokicki not pure DVI by default %
+%% 3.89 Released 7 July 2002 %
+%% Added support for pdftex, which is recognised automatically. %
+%% 3.88 Released 1 September 2000 %
+%% Square hook tail: \newarrow{SquareInto}{sqhook}---> %
+%% 3.87 Released 1 September 1999 %
+%% This version was used for the final 1200dpi PS copy of my book %
+%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) %
+%% see http://www.cs.man.ac.uk/~pt/Practical_Foundations %
+%% 3.86 Released 1 September 1998 %
+%% New options hug and nohug in PostScript mode: [PS,nohug] uses %
+%% PS for the arrows without rotating the labels, but the way of %
+%% calculating the actual position of these horizontal labels on %
+%% will remain subject to alteration for some period of time --- %
+%% please send me examples if you feel that adjustment is needed. %
+%% %
+%% Suppress indentation of following text (due to LaTeX change) %
+%% Mangle \left@label and \right@label (conflict with Elsevier). %
+%% midvshaft and snake for vertical arrows %
+%% New option [gap=width] (default=shortfall) to use instead of %
+%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ %
+%% labels to be moved too far away from the shaft. %
+%% Added >-> and <-< heads and tails, same as >> and << but the %
+%% shaft goes *through* the extra arrowhead. %
+%% 3.85 Released 20 August 1997 %
+%% New option [crab=distance] shifts horizontals and PS diagonals %
+%% transversally by the specified distance (positive=upward). %
+%% New option [snake=distance] shifts midshaft horizontals and %
+%% PS diagonals longitudinally by the specified distance. %
+%% New option [leftflush], like [flushleft] but reckons alignment %
+%% from multiple verticals, or from text if there's no vertical. %
+%% Most of the history has been suppressed from the user version. %
+%% 3.83 Released 18 May 1995 %
+%% "dotted" option (set dot filler on maps) %
+%% Parallel maps (\pile) outside diagrams stretch correctly. %
+%% Option "LaTeXeqno" uses LaTeX's equation number and style %
+%% for "eqno"; LaTeX's \label command picks this up. %
+%% Suppress warnings & 2nd pass errors with "silent" option. %
+%% 3.81 Second alpha release 18 July 1994 %
+%% \overprint{text} sets text in maths and overprints it in the %
+%% current cell, centered in the column irrespective of other stuff%
+%% "repositionpullbacks" option uses this for \SEpbk etc %
+%% \newdiagramgrid declaration, grid option and pentagon grid. %
+%% 3.80 Alpha release for adjusted diagonals 15 July 1994. %
+%% Introduced landscape and portrait options. %
+%% Diagonals adjusted to meet their endpoints, at last!!!! %
+%% 3.28 Released 30 November 1993 %
+%% Peter Freyd's \puncture symbol provided. %
+%% 3.25 Released 30 January 1993 %
+%% LaTeX heads made default (unless \tenln undefined, when vee) %
+%% Circle, cross, little vee, little black triangle heads. %
+%% First-use warning when defaulted diagonal components are used. %
+%% AMSTEX emulation - works at least when amstex not present. %
+%% 3.24 Release 7 Sept 1992 advertised to users. %
+%% PostScript option introduced: %
+%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails %
+%% TPIC option introduced as an alternative to \LaTeX@make@line. %
+%% Postscript arrows (basic code). %
+%% Implemented \newarrow \newarrowhead etc. %
+%% Horizontal arrows outside diagram can stretch by wordspacing. %
+%% Added < and > for labels on left and right of arrow; %
+%% 3.16 (20.7.90) as mass mailed; only have mangled version %
+%% -- all following version numbers are post-facto -- %
+%% 3 (Jan 90) stretching vertical arrows %
+%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels %
+%% 1 (1987) horizontal arrows stretch to edge of cell %
+%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis %
+%%======================================================================%
+
+%%======================================================================%
+%% %
+%% (1) CORRUPTION-SENSITIVE HACKS %
+%% %
+%%======================================================================%
+
+%% CORRUPTION & \catcode WARNING
+
+%% BITNET (IBM) machines may corrupt certain important characters
+%% in transmission by electronic mail:
+%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
+%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
+%% {}=curly braces (grouping), \=backslash (keywords),
+%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
+%% <>=angle brackets (relations \ifnum,\ifdim), ==equals,
+%% ,=comma, .=dot, :=colon, ;=semicolon, =space
+%% $=dollar (maths) is only used in the "bits of maps" section
+
+%% The following characters are marked by a comment including the word "ASCII",
+%% except in comments and messages:
+%% &=and (alignment), ~=tilde, |=vertical, []=square brackets,
+%% ^=caret (superscript), _=underline (subscript),
+%% `=grave/backquote (catcodes), '=acute/single quote (octal),
+%% "=double quote (hex), ()=round brackets,
+%% /=slash, ?=query, !=pling/bang,
+
+%% The \catcode's marked * are assumed for reading this file:
+%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
+%% space=10* letter=11* other=12 active=13 %=14* invalid=15
+%% If you want to load this package inside Stallman's "texinfo", you must do
+%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
+%% Also need @catcode`@&=4.
+
+%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)****
+
+%% don't load me twice!
+\ifx\diagram\CD@qK\else\message{WARNING: the \string\diagram\space command is
+already defined and will not be loaded again}\expandafter\endinput\fi
+
+%% make @ letter, saving its old code to restore at the end of this file
+%%% look for this on the last line of the file if you think something's missing!
+%% the other \catcode assignments are to make it work with texinfo.
+\edef\cdrestoreat{%%
+\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%%
+\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%%
+\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%%
+\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%%
+\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%%
+\noexpand\catcode\lq\noexpand\:=\the\catcode\lq\:%% Johannes L. Braams's
+\noexpand\catcode\lq\noexpand\;=\the\catcode\lq\;%% Babel languages package
+\noexpand\catcode\lq\noexpand\!=\the\catcode\lq\!%% makes these \active.
+\noexpand\catcode\lq\noexpand\?=\the\catcode\lq\?%%
+\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53%
+%% texinfo @+ is @outer@active
+}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode
+\rq53=12 \catcode\lq\:=12 \catcode\lq\;=12 \catcode\lq\!=12 \catcode\lq\?=12
+
+%% Change y to n if pool_size in your implementation of TeX is small.
+%% This is reasonable if you have a small ("personal") computer, but if you
+%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
+%% system manager and get him/her to install a version of TeX with bigger
+%% parameters. The "hash size" (number of command names) gets you next.
+\ifx\diagram@help@messages\CD@qK\let\diagram@help@messages y\fi
+
+%% The following macro is used to include literal PostScript commands in the
+%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is
+%%% dependent on the convention used by your local DVI-to-PostScript translator.
+%% Choose whichever line applies to the program used at your site, or, if
+%% yours is not listed, consult the manual, experiment with this macro and
+%% (please) tell me what is needed to make it work.
+%%
+%%
+%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
+%% CTAN: dviware/dvips
+\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
+\cdps@RadicalEye\cdps@Rokicki\let\CD@HB\cdps@Rokicki\let\CD@IK\cdps@Rokicki
+\let\CD@HB\cdps@Rokicki%%
+%% I'm not sure that the rest work.
+%%
+%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
+%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
+\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
+%% ASCII two dbl quotes
+\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
+\cdps@Bechtolsheim%%
+%% dvitops (James Clark)
+%% CTAN: dviware/dvitops
+\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
+\let\cdps@dvitops\cdps@Clark%%
+%% OzTeX (Andrew Trevorrow) cannot be used
+\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
+%% dvi3ps (Kevin Coombes)
+%% CTAN: dviware/dvi2ps/dvi3ps
+\def\cdps@Coombes#1{\special{ps-string #1}}%%
+%% psprint (Trevorrow) CTAN: dviware/psprint
+%% dvi2ps (Senn) CTAN: dviware/dvi2ps
+%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi
+
+\count@=\year\multiply\count@12 \advance\count@\month%%
+\ifnum\count@>24096 %% (December 2007)
+\message{***********************************************************}%%ascii
+\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%%
+\message{! it expired in December 2007 and is time-bombed for April *}%%
+\message{! You may get an up to date version of this package from *}%%ascii
+\message{! either www.ctan.org or www.cs.man.ac.uk/~pt/diagrams/ *}%%
+\message{***********************************************************}%%ascii
+\ifnum\count@>24099 %% (March 2008)
+\errhelp{You may press RETURN and carry on for the time being.}\message{! It
+is embarrassing to see papers in conference proceedings}\message{! and
+journals containing bugs which I had fixed years before.}\message{! It is easy
+to obtain and install a new version, which will}\errmessage{! remain
+compatible with your files. Please get it NOW.}\fi\fi
+
+\def\CD@DE{\global\let}\def\CD@RH{\outer\def}
+
+%% safe names for braces, tab (&) and maths ($), as commands and for messages
+{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%%
+%%
+%% three ASCII ampersands (ands) (&&&) appear on the next line
+\catcode\lq\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands
+%%
+%% ASCII ^ and _ each appear twice on next line
+%% six ASCII dollars ($$$$$$) appear on the next two lines.
+\catcode\lq\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars
+\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars
+%%
+%% two ASCII underlines (__) appear on the next line.
+\catcode\lq\_=8 \CD@DE\CD@lJ=_%%ascii two underlines
+%%
+%% eight ASCII carets (^^^^^^^^) appear on the next three lines.
+\obeylines\catcode\lq\^=7 \CD@DE\@super=^%%ascii two carets
+\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets
+\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets
+\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets
+\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand
+\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
+\fi\fi\fi}%%
+
+%% avoid using <> (because I personally re-define them to mean \langle\rangle)
+\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476
+
+%% LaTeX line and arrowhead font
+%% the "hit return" comments show up if the font is missing.
+\ifx\tenln\CD@qK%%
+\font\tenln=line10\relax%% Hit return - who needs diagonals?
+\fi\ifx\tenlnw\CD@qK\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
+\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
+\fi\fi%%
+
+%% report line numbers in TeX3 only
+\ifx\inputlineno\CD@qK\csname newcount\endcsname\inputlineno\inputlineno\m@ne
+\message{***************************************************}\message{!
+Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
+has been available since 1990. *}\message{***********************************%
+****************}\fi
+
+\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}}
+
+%% turn round- and square-bracketed arguments into curly-bracketed
+\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
+\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
+\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets
+\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
+\enddiagram}}
+
+%% ASCII open square bracket occurs on next line
+\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else
+\aftergroup\CD@JH\fi}}%%
+\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF}
+
+%% ASCII vertical bar (|) occurs on the next line
+\def\CD@KK{|}
+
+\def\CD@PB{%% arguments to maps inside diagrams
+\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:%
+\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
+\tokcase<:\CD@iF;%%ascii less-than
+\tokcase>:\CD@iI;%%ascii greater-than
+\tokcase(:\CD@BC;%%)%ascii open round bracket
+\tokcase[:\optional@;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
+\break@args;\endswitch}
+
+\def\switch@arg{%% arguments to horizontal maps outside diagrams
+\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@
+;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
+\middle@label;%%ascii tilde (questionable!)
+\default:\CD@y\break@args;\endswitch}
+
+%% That's as much as you get to read "in clear" - the rest is private!
+
+\let\CD@tJ\relax\ifx\protect\CD@qK\let\protect\relax\fi\ifx\AtEndDocument
+\CD@qK\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}%
+\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{%
+\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{%
+\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}%
+\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def
+\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1%
+\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def
+\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
+\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=%
+\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
+\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF
+=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7
+\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4
+\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9
+\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef
+\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9
+\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
+}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{%
+\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1%
+\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE
+#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}%
+\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1%
+\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{%
+\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef
+\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram
+}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\CD@qK\expandafter
+\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def\@ignoretrue{%
+\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi
+
+\def\CD@g{{\ifnum0=\lq}\fi}\def\CD@wC{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat
+\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def
+\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}%
+\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:%
+#1;#2\endswitch{#1}\ifx\at@\CD@qK\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}%
+\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z
+\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%
+%%ascii round
+\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
+\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}%
+\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{%
+\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{%
+\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp
+\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax
+\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P
+\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
+\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode\lq\@%
+\active\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA
+\newcount\CD@vA\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA
+\CD@tG\CD@gE\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA
+\newcount\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA
+\CD@bA\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2%
+\relax\fi}\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH
+=1sp \newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def
+\CD@nJ{\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{%
+\CD@t\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=%
+\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0%
+\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1%
+\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide
+\CD@@I300 \def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I
+\divide#1\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{%
+\afterassignment\CD@gI\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI
+\CD@LF\CD@V\CD@@I{4\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V
+\CD@oI\CD@@I\fi\CD@cJ}\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@
+\divide\CD@@I\count@\fi\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@
+\divide\count@5\divide\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ
+\z@}\def\CD@QJ#1{\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5%
+\CD@oI\CD@zH\CD@tI\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@
+\newdimen\CD@eJ\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI
+\CD@LF\relax}\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{%
+\fontdimen22\the\textfont\tw@}\def\script@axisheight{\fontdimen22\the
+\scriptfont\tw@}\def\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def
+\CD@NC{0.4pt}\def\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3%
+\textfont\z@}\newdimen\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{%
+\ifincommdiag1.3em\else2em\fi}\newdimen\CD@YB\def\CellSize{\afterassignment
+\CD@kB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-%
+\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{%
+\DiagramCellWidth\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def
+\MapsAbut{\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA
+\CD@iA\z@\CD@tG\CD@vE\CD@aB\CD@ZB\expandafter\ifx\expandafter\iftrue\csname
+ifUglyObsoleteDiagrams\endcsname\CD@ZB\else\CD@aB\fi\CD@nF{%
+ifUglyObsoleteDiagrams}{relax}\newif\ifUglyObsoleteDiagrams\def\CD@nK{\CD@aB
+\UglyObsoleteDiagramsfalse}\def\CD@oK{\CD@ZB\UglyObsoleteDiagramstrue}\CD@vE
+\CD@nK\else\CD@oK\fi\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\def\CD@pK{\global\CD@dK
+\global\CD@aB\global\UglyObsoleteDiagramsfalse\global\let\CD@n\empty\global
+\let\CD@oK\relax}\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}\def\newarrowtail{%
+\CD@mG t\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG\hbox@maths\empty}%
+\def\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#4#5#6#7#8#9{\CD@RC
+{r#1:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}}\CD@RC{u#1:#5}{#3%
+{#9}}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4\endcsname\noexpand
+\CD@MC}\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4\endcsname\noexpand
+\CD@MC}}\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless PostScript is set%
+}\def\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{\CD@IJ\CD@sJ<>ht%
+\CD@IJ\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@HJ{%
+r#5}{#2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@HJ{d#5}{#2}{u#4}%
+{#3}{u#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup\CD@GJ\CD@L{#1+:#2}%
+\CD@L{#1:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#3#4{\csname newbox%
+\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@sJ{}%
+\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@sJ{vee}\else
+\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup\aftergroup\CD@wF\CD@L{#1#2:#3%
+#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3-#3}\CD@L{#1#2:#3}\endgroup}%
+\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{%
+\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<%
+\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}%
+}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<\def\CD@wF#1#2{\def#1{\vbox{\vbox to%
+\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\vbox{%
+\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>%
+\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1#2{\def#1{\vbox{\kern-.4\CD@zC\vbox
+to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<%
+\CD@xF ut<\def\CD@BG#1{\hbox{\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5%
+mu{#1}\mkern-1.5mu\CD@ND}}\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1%
+{\hbox to\CD@LF{\setbox0=\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}%
+\CD@ND}\dimen0.5\wd0\advance\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0%
+\unhbox0\hss}}\def\CD@sB#1{\hbox to2\CD@LF{\hss\offinterlineskip\mathsurround
+\z@\CD@k{#1}\CD@ND\hss}}\def\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}%
+\def\CD@bE#1{\hbox{\kern-.15\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#%
+1{\vbox{\offinterlineskip\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{%
+\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-%
+}{@fillh}\CD@nF{lf:-}{@fillh}\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{%
+rh:}{null}\CD@nF{rm:}{null}\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null%
+}\CD@nF{lt:}{null}\CD@nF{dh:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{%
+uh:}{null}\CD@nF{um:}{null}\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null%
+}\CD@nF{+t:}{null}\CD@nF{-h:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def
+\CD@@D{\hbox{\vrule height 1pt depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF
+{lf:}{rf:}\CD@nF{+f:}{rf:}\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}%
+\def\CD@BD{\CD@U\null\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def
+\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3%
+}\edef\CD@QG{#4}\edef\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK
+\CD@BH\let\@x\CD@AH\ifx\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let
+\CD@LE\empty\fi\def\CD@LI{r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH
+{+}\def\@m{-}\ifx\CD@iD\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE
+\empty\ifx\CD@iD\CD@aE\let\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{%
+\CD@iD\CD@oJ}\ifx\CD@a\empty\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode
+\aftergroup\CD@kG\else\CD@@A\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler%
+}\CD@iD\CD@oB rm{middle}\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi
+\CD@oB rt{tail\space\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}%
+\NorthWest\CD@nG r+2+2{ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r%
++2-2{rd}{se}\SouthEast\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def
+\CD@sG{\CD@vG\CD@LI\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du%
+\Vertical@Map}\def\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH
+\@m+-\Slant@Map}\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode\lq\/=\active
+\def\CD@vG#1#2#3#4#5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE
+//\CD@jG#2#4#5h:\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3%
+#4//{\edef\CD@fG{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3%
+\CD@M#4//\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{%
+\CD@fG#1}\expandafter\CD@M\fi}\catcode\lq\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{%
+\aftergroup\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup
+\CD@CI\else\aftergroup\CD@BI\fi\CD@L{#1\@name}%
+%% ASCII round brackets and comma (,) appear on the next line
+\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
+\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{%
+arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined
+before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a
+declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}%
+\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{%
+\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket
+\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket
+\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF
+\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1
+\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}%
+\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or
+\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG
+\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef
+\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or
+#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi
+\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}%
+\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA
+\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
+\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax
+\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD
+#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1%
+\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{%
+\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}%
+\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC
+\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space
+ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed
+in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string
+\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and
+vertical arrows are terminated implicitly means\CD@uG that they cannot be
+mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for
+parallel horizontal arrows; verticals can just be put together in\CD@uG a cell%
+. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The
+horizontal maps must point to an object, not each other (I've put in\CD@uG one
+which you're unlikely to want). Use \string\pile\space if you want them
+parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers
+of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but
+must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don%
+'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from
+stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty
+before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi
+\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24103
+\message{because this one expired in July 2008!}\expandafter\endinput\fi\def
+\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{\CD@GB-%
+9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ plus 1.5%
+\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{fill@dot}{rf:%
+.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6\fi}}\def
+\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}\def\CD@aK{%
+2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1}\def\CD@NI
+{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}\CD@tG\CD@pE
+\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let\CD@OG\CD@OC
+\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE\CD@aD\else
+\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else\CD@BD\global
+\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC\CD@YD\fi}\def
+\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=\MapShortFall
+\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@pD
+\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}\CD@tG
+\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let\CD@QG#3%
+\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#2#3#4#5{%
+\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD\CD@LC
+\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def\break@args{%
+\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{\setbox1=\CD@oJ
+\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi\fi\CD@@G2%
+\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2\else\CD@oF
+2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5\else\CD@oF5#%
+1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1\dimen@\prevdepth
+\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@\box0}}\def\CD@@G
+#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{\xleaders\box#%
+1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string\VerticalMap\space and
+\string\DiagonalMap\CD@uG are obsolete - use \CD@lG\space to pre-define maps}%
+\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old horizontal map}\CD@LC\CD@TJ\def
+\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{\CD@UH{#3}}\CD@SH\CD@jD{#4}\def
+\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#3#4#5{\CD@BK\CD@pB433{vertical
+map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\def\CD@oJ{\CD@GG{#1}}\CD@VH
+\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}\def\CD@LE{\CD@GG{#5}}\CD@tD}%
+\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def\CD@OG{4}\let\CD@kD\CD@qK\let
+\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{%
+\CD@vF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{%
+\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{\CD@vF{#1}}\else\let\mv\lower\def
+\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def\CD@jD{\CD@vF{#4}}\def\CD@LE{%
+\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{\empty}\def\CD@SH{\CD@EG\CD@bE
+\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK\@fillv}\def\CD@EG#1#2#3#4#5{\def
+\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4\null\ifx\CD@CH\empty\else\ifx\CD@CH
+\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def\CD@UH#1{\hbox{\mathsurround\z@
+\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else
+\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND\fi\fi}}\def\CD@yD#1#2{\setbox#1=%
+\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle()\CD@ND}%% ASCII round brackets
+\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle
+\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def
+\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments
+\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;%
+\tokcase[:\CD@XF;%%]%ascii close square bracket
+\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{%
+\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH
+\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1%
+\actually@braces@missing@around@macro@in@label}\CD@UF}\def
+\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label
+{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer
+\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let
+\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been
+read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC
+\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def
+\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{%
+\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ
+\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{%
+\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter
+\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are
+obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi
+-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment
+\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{%
+\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def
+\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def
+\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let
+\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD
+\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter
+\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx
+\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name
+\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef
+\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was
+trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}%
+\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax
+\CD@CH}\def\CD@H#1],{%% ASCII close square bracket
+\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}%
+%% ASCII open and close square bracket
+\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket
+\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\CD@qK\ifx#1\CD@qK\CD@gB{option `\@name'
+undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK\fi\fi
+\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\CD@qK\CD@e\else
+\expandafter\CD@oH\CD@GK,#1,(,),(,)[]%
+%%ASCII 5commas two pairs round, pair square
+\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y)
+value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}%
+\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\CD@qK\fi}%
+%% ASCII 2commas 2pair round, pair square on next line
+\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}%
+\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def
+\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\CD@qK\CD@gB{option `\@name
+' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK\CD@qK#1#2%
+\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=#1,y=#2}}\def
+\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI#1{\def\CD@CH
+{#1}\CD@nF{@x}{cdps@#1}\ifx\CD@CH\empty\CD@f\CD@CH{cannot be used}\else\ifx
+\CD@CH\relax\CD@f\CD@CH{unknown}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB
+{PostScript translator `#1' #2}\CD@oK\let\cds@PS\empty\let\cds@noPS\empty}%
+\def\CD@PH{}\def\CD@PJ{\CD@fA\edef\CD@PH{\noexpand\CD@KB{\@name\space ignored
+within maths}}}\def\diagramstyle{\CD@cJ\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let
+\diagramsstyle\diagramstyle\CD@tG\CD@sE\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB
+\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA
+\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG\CD@EF\CD@DK\CD@CK\CD@tG\CD@rE\CD@JB
+\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG\CD@nE\CD@kA\CD@jA\CD@tG\CD@AF\CD@iG
+\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC{cds@1em}{\CellSize1\CD@zC}\CD@RC{%
+cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2em}{\CellSize2\CD@zC}\CD@RC{cds@2.5%
+em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{\CellSize3\CD@zC}\CD@RC{cds@3.5em}{%
+\CellSize3.5\CD@zC}\CD@RC{cds@4em}{\CellSize4\CD@zC}\CD@RC{cds@4.5em}{%
+\CellSize4.5\CD@zC}\CD@RC{cds@5em}{\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize
+6\CD@zC}\CD@RC{cds@7em}{\CellSize7\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}%
+\def\cds@abut{\MapsAbut\dimen1\z@\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA
+}\def\cds@amstex{\ifincommdiag\CD@O\else\def\CD{\diagram[amstex]}%
+%%ascii square brackets []
+\fi\CD@T\catcode\lq\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{%
+\let\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre
+\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ
+\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE
+\CD@DC{.5\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{%
+cds@crab+}{\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}%
+\CD@RC{cds@crab--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let
+\CD@QC}{3em}\CD@NJ}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def
+\cds@dpi{\CD@RJ{1truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\CD@qK\def
+\cds@eqno{\let\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG\CD@fE
+\CD@J\CD@I\def\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE\CD@nA
+\CD@nA}\def\cds@gap{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{\wd3=}%
+\MapShortFall} \def\cds@grid{\ifx\CD@GK\CD@qK\let\h@grid\relax\let\v@grid
+\relax\else\CD@nF{h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx\h@grid
+\relax\CD@gB{unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax\let
+\v@grid\relax\def\cds@gridx{\ifx\CD@GK\CD@qK\else\cds@grid\fi\let\CD@CH
+\h@grid\let\h@grid\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD
+\DiagramCellHeight}\def\cds@hcenter{\let\CD@hA\CD@aA}\let\cds@hcentre
+\cds@hcenter\def\cds@heads{\CD@BE{\let\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx
+\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle
+\cds@balance\def\cds@htriangleheight{\CD@BE\DiagramCellHeight
+\DiagramCellHeight\DiagramCellWidth1.73205\DiagramCellHeight}\def
+\cds@htrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth
+\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE\CD@dE\CD@eE\def
+\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def
+\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}%
+\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def
+\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{%
+equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def
+\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def
+\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{%
+\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
+\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
+\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance
+\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def
+\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def
+\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@UO{\CD@oK\global\let\CD@n\empty}%
+\def\cds@UglyObsolete{\cds@UO\let\cds@PS\empty\let\cds@noPS\empty}\ifnum\year
+<2008 \let\cds@noPostScript\UglyObsolete\let\cds@noPS\cds@UO\else\def
+\cds@noPS{\CD@gB{option `noPS' no longer recognised}}\def\cds@noPS{\CD@gB{%
+option `noPostScript' no longer recognised}}\fi\def\cds@notextflow{\CD@RB}%
+\def\cds@noPS{\CD@oK\global\let\CD@n\empty}\def\cds@noTPIC{\CD@CK}\def
+\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let\CD@hA\CD@iB}%
+\def\cds@p{\CD@zD\PileSpacing}\let\cds@pilespacing\cds@p\def\cds@pixelsize{%
+\CD@zD\CD@@I\CD@gI}\def\cds@portrait{\CD@jA}\def\cds@PostScript{\CD@nK\global
+\let\CD@n\empty\CD@BE\CD@DI\empty}\def\cds@PS{\CD@nK\global\let\CD@n\empty}%
+\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript option for better results}}%
+\def\cds@repositionpullbacks{\let\make@pbk\CD@fH\let\CD@qH\CD@pH}\def
+\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{\dimen5 }}\def
+\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG\CD@sB\let
+\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}\def
+\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@zD
+\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{%
+\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}\def\CD@gB##1{}}\let
+\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def\cds@snake{\CD@BE\CD@eJ\z@
+}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{\CD@SB\CD@PJ}\def\cds@thick{%
+\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2\CD@LF}\CD@@J}\def\cds@thin{%
+\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}\def\cds@tight{\CD@WB}\let
+\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def\cds@uppershortfall{%
+\ifPositiveGradient\cds@rightshortfall\else\cds@leftshortfall\fi}\def
+\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre\cds@vcenter\def
+\cds@vtriangleheight{\CD@BE\DiagramCellHeight\DiagramCellHeight
+\DiagramCellWidth.577035\DiagramCellHeight}\def\cds@vtrianglewidth{\CD@BE
+\DiagramCellWidth\DiagramCellWidth\DiagramCellHeight1.73205\DiagramCellWidth}%
+\def\cds@vmiddle{\let\CD@dB\CD@eB}\def\cds@w{\CD@zD\DiagramCellWidth}\let
+\cds@width\cds@w\def\diagram{\relax\protect\CD@bC}\def\enddiagram{\protect
+\CD@SG}\def\CD@bC{\CD@g\CD@uI\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global
+\CD@NB\z@\boxmaxdepth\maxdimen\everycr{}\everymath{}\everyhbox{}\ifx
+\pdfoutput\CD@qK\else\ifx\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@pK\fi
+\fi\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def\CD@ZC{%
+\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let\CD@EH
+\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without PostScript%
+}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{\CD@nE
+\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0\CD@pI
+\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\CD@qK\global
+\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=\hbox to%
+\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@\dp2\z@\wd
+2\z@\CD@hK\pdfliteral{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1 bturn}%
+\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global\@ignorefalse
+\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else\CD@qE\CD@gA
+\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi\fi\fi\fi
+\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else
+\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}%
+\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1%
+\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2
+\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{%
+\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance
+\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
+\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
+\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
+\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
+\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def
+\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox
+2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\CD@qK\else\CD@k
+\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen
+0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA
+\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the
+\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box
+1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }%
+\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen
+\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen
+\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q
+\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par
+\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip
+\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
+\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign
+\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#%
+#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup
+\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i
+}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax
+\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax
+\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA
+\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
+\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat
+\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{%
+\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim
+\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance
+\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the
+\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@
+\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH
+\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0%
+\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2%
+\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{%
+\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@
+\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht
+3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen
+3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ
+\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2%
+\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid
+2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else
+\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen
+2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance
+\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3%
+\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6
+\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else
+\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern
+\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE
+\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else
+\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum
+\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V
+{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup
+\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5%
+\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5
+\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else
+\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower
+\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9%
+\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient
+\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8
+\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient
+\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8
+\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance
+\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6
+\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ
+\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK
+\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK
+\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise
+\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK
+\expandafter\pdfliteral{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0
+cm}\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the
+\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ
+\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else
+\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH
+\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}%
+\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{%
+\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip
+\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA
+\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi
+\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA
+\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-%
+\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH
+:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-%
+\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG
+\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect
+\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop
+\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD
+\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC
+\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def
+\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##%
+\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}%
+\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC
+\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup
+\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC
+\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{%
+\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1%
+\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
+\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{%
+\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip
+\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox
+\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox
+\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def
+\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox
+\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in
+pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}%
+\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box
+1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7
+\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH
+\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH
+\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd
+\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox
+\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ
+{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox
+\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid
+3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3
+\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB
+\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd
+0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi
+\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi
+\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else
+\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH
+\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3
+\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern
+\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=%
+\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}%
+\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi
+\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty
+\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht
+\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp
+\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=%
+\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern
+\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF
+\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }%
+\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA
+\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum
+\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{%
+\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA
+\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{%
+\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi
+\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox
+\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0%
+\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB
+{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{%
+\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA
+\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:%
+rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=%
+\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty
+\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=%
+\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox
+0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA
+\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{%
+\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern
+\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2
+\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-%
+\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1%
+=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@
+\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of
+vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to%
+\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen
+1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to%
+\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen
+6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}%
+\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB
+\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG
+\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else
+\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists
+\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB
+=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance
+\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too
+many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{%
+\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1%
+\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum
+\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D%
+\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ
+\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ
+\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{%
+\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty
+\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip
+\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{%
+\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF
+\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance
+\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB
+\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum
+\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA
+\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox
+\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{%
+diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum
+\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB
+\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@
+\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi
+\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f%
+\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@
+\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB
+\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB
+\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null
+\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE
+\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA
+\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance
+\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year
+\multiply\count@12 \advance\count@\month\ifnum\count@>24110 \loop\iftrue
+\message{gone February 2009!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF
+\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA
+\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA
+\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}%
+\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax
+\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #%
+3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox
+\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA
+\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance
+\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance
+\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd
+\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1
+\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA
+\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4
+\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance
+\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0%
+\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB
+\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0%
+\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB
+\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB
+\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance
+\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def
+\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK
+\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF
+\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-%
+\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see
+manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA
+\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen
+0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1%
+\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
+\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
+\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V
+\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA
+\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA
+\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd
+\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA
+\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA
+\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox
+\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance
+\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA
+\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF
+\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround
+\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
+9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
+\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
+\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
+\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@
+\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000
+\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
+\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox
+\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def
+\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox
+\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH
+\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf
+\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else
+\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
+\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF
+\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat
+\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB
+\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{%
+prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox
+\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip
+\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp
+\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd
+\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH
+\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance
+\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox
+\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty
+\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip
+\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp
+\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{%
+\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH
+width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox
+\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA
+\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or
+\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG
+\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{%
+\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum
+\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip
+\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi
+\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile
+\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing
+horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi
+\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox
+0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1
+\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}%
+\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
+}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI
+\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF
+\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI
+\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=%
+\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC
+\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox
+\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht
+\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd
+\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB
+\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
+\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}%
+\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{%
+\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
+\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance
+\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or
+\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@\rq33 \else
+\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH
+\advance\count@\CD@LH\fi}\def\CD@fF{\count@\rq\ifcase\CD@LH55\or\ifcase\CD@TC
+66\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase
+\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi
+\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient
+\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
+\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
+\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#%
+1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
+\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{%
+\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}%
+\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{%
+\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>%
+}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+%
+h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t%
+:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC
+\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-%
+t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF
+\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#%
+2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}%
+%% % .7em until 29.7.98
+\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98
+\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{%
+\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}%
+\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f%
+:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment
+\CD@CH%%
+\count@=\rq}\def\lnchar{\CD@@K\CD@qF}\let\laf\lnchar\let\lah\lnchar\def\lad{%
+\CD@@K\xlad}\def\xlad{\setbox2=\hbox{\CD@qF}\setbox0=\hbox to.3\wd2{\hss.\hss
+}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance\dimen1-\dimen0 \dp
+0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5\dimen1 \raise\dp0%
+\box0}\def\lahh{\CD@@K\xlahh}\def\lat{\CD@@K\xlat}\def\xlat{\setbox0=\hbox{%
+\CD@qF}\dimen0=\ht0 \setbox1=\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss
+\or\hss\box0 \or\hss\box0 \or\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1%
+\vss\else\vss\box1\fi\kern\z@}}\def\xlahh{\setbox0=\hbox{\CD@qF}%
+\ifPositiveGradient\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing
+\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0
+\box0 \fi\fi}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1
+\dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum\count@=0 \box8 \ifdim
+\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi\else\dimen3=\dimen5
+\advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4\dimen3 \CD@dG{\dimen4}%
+\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6\dimen1 \advance\dimen6-%
+\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@>0 \kern-\dimen6 \advance
+\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1}\else\CD@dF{#1}\fi}\def
+\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex \newdimen\objectwidth
+\objectwidth1em \def\CD@YD{\dimen6=\CD@aK\DiagramCellHeight\dimen7=\CD@WK
+\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum\CD@TC>0 \CD@aF\else\aftergroup
+\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{\CD@YA{diagonal map is nearly
+vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map is nearly horizontal}\CD@NA}%
+\CD@rG\CD@NA{Use an orthogonal map instead}\def\CD@aF{\CD@MJ\dimen3\dimen7%
+\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-\dimen7 \CD@MF\ifnum\CD@LH>%
+\CD@TC\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \CD@iC{\dimen1}\CD@iC{%
+\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\CD@dG{\dimen0}\advance
+\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7%
+\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-%
+\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK\DiagramCellWidth\setbox6=\llap{%
+\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1
+\advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}%
+\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox
+7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}\advance\dimen0-\axisheight\advance
+\dimen0-\CD@bK\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6
+\advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@TB\fi\fi\dimen3%
+\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@tE\else\dimen8%
+\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8}\CD@X{\dimen8}{.5\wd3}\dimen9%
+\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}\CD@X{\dimen9}{.5\wd3}%
+\ifPositiveGradient\advance\dimen2-\dimen9\advance\dimen4-\dimen8 \else
+\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3
+\fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@tE
+\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0\advance\dimen2\dp2 \else
+\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen
+4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2%
+\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1
+\else\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance
+\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}%
+\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7
+\lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \CD@tE\else\raise
+\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht
+5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi
+\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI\CD@rB
+\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def\SouthWest
+{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB\DiagonalChoice2 }%
+\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA\ifPositiveGradient\else-\fi
+\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK\relax\hbox{\advance\CD@uA
+\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK\hbox{\box6 \kern\CD@DC\kern
+\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA\penalty\CD@vA}\penalty\CD@uA
+\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax\vadjust{\hbox@maths{#1}%
+\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{\ifcase\CD@GB\or\or
+\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@bH{.5\wd0}%
+{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@TG\else
+\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern
+\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-\CD@NB\penalty\CD@uA
+\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@\global\CD@yA
+\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA-\CD@yA\CD@vA
+\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA\lastpenalty
+\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-\lastpenalty
+\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern\unkern
+\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox\unpenalty\CD@eJ
+\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7\CD@tB\advance
+\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne\let\mv\empty
+\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>\CD@NB\dimen6%
+\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK\setbox1\null\ht
+1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA\CD@LH\CD@vA\CD@TC
+\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance\dimen2\CD@eJ\CD@eG{%
+\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0\ifPositiveGradient\else-%
+\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight\ht2\dimen0 \dimen0\CD@DC
+\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen0\ifPositiveGradient-\fi
+\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 \setbox4\null\dimen0 .6%
+\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC\CD@dG{\dimen0}\wd4\dimen0
+\dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance\dimen1\ht2 \CD@CC6+-\raise
+\dimen1\rlap{\ifPositiveGradient\advance\dimen0-\wd6\advance\dimen0-\wd4 \else
+\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi\dimen0\wd2 \ifvoid7\else\dimen1%
+\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower\dimen1\rlap{\ifPositiveGradient
+\advance\dimen0\wd4 \else\advance\dimen0-\wd7\advance\dimen0-\wd4 \fi\kern
+\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@\CD@bH{\z@}{\box\z@}{\z@}{%
+\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim\dimen4>.25\dimen7\dimen4=%
+.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 \advance\dimen4.6\CD@zC\fi
+\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}\advance\dimen4-\dimen5 \dimen
+5\dimen4\CD@eG{\dimen5}\advance\dimen0\ifPositiveGradient#2\else#3\fi\dimen5
+\CD@dG{\dimen4}\advance\dimen1\dimen4 } \def\CD@eD#1{\expandafter\CD@IK{#1}}%
+\CD@ZA\CD@EK{output is PostScript dependent}\def\CD@SC{\CD@IK{/bturn {gsave
+currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg
+exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@gK{%
+\relax\CD@hK\pdfliteral{Q}\else\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax
+\multiply\count@7\advance\count@16577\divide\count@33154 }\def\CD@fD#1{%
+\expandafter\special{#1}} \def\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{%
+\dimen0}\CD@OJ{\dimen0}\setbox0=\null\ifPositiveGradient\count@-\count@\ht0%
+\dimen0 \else\dp0\dimen0 \fi\box0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the
+\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#1}\CD@fD{pa \the\count@\space\the\CD@uA}%
+\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{\CD@KJ\begingroup\ifdim\dimen7<\dimen6
+\dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@LH\CD@LH\CD@TC
+\CD@TC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA
+\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA\CD@iK\CD@lK{%
+\ifPositiveGradient\else-\fi\dimen6}\CD@iK\CD@kK{\ifPositiveGradient-\fi
+\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ\ifdim\dimen7>1.73\dimen6
+\divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.353553\dimen2 \advance\CD@LH
+-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2%
+.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2
+\ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\CD@@A
+\else\CD@y\fi\advance\dimen0-\count@\dimen2 \CD@gE\multiply\dimen0\m@ne\fi
+\ifnum\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7
+3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}\fi\CD@KJ\dimen2\dimen3\CD@dG{%
+\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 \CD@ZG1\CD@ZG{0.3}\dimen1%
+\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{1.5}\CD@ZG{0.3}\divide
+\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1%
+\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne
+\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global\CD@RA\dimen1\endgroup
+\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG\CD@OC\def\CD@KJ{%
+\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen6\dimen6\dimen9%
+\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0\z@\dimen8=%
+\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA\dimen
+\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@\dimen6
+\divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 \advance
+\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim\dimen6>%
+\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter\expandafter
+\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen9<2\dimen8
+\dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim
+\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance\dimen9\count@
+\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2%
+\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\CD@ZG#1{%
+\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1\CD@TC
+\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def\CD@iC#1{%
+\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH\multiply
+\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def\CD@iK#1#2{%
+\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply\dimen2\tw@
+\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@\dimen2\relax
+\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup\let#1\CD@fK}{%
+\catcode\lq p=12 \catcode\lq0=12 \catcode\lq.=12 \catcode\lq t=12 \gdef\CD@jK
+#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\CD@qK\CD@tJ\let\CD@GH\relax\else
+\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@CD\empty
+\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax\let\CD@zF
+\relax\message{! Why not upgrade to TeX version 3? (available since 1990)}%
+\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred}\def
+\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999}\def
+\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum\CD@h<%
+\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else\edef
+\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2%
+\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter
+\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum
+\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-%
+\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the
+\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi
+\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}%
+\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{%
+Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{%
+Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{%
+\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}%
+\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{%
+\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB
+\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}%
+\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not
+available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA
+#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax
+\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA
+}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else
+\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@
+\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the
+\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH
+\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message
+above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before
+resuming the text, in\CD@uG which case some garbage may be added to the
+diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line
+in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are
+misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already
+closed too many brace pairs or environments; an \CD@HD\CD@uG command was (%
+over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}%
+\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD
+\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}%
+\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand
+\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}%
+\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}%
+\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing
+group}}\ifx\DeclareOption\CD@qK\else\ifx\DeclareOption\@notprerr\else
+\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E
+\CurrentOption,}\fi\fi
+%%======================================================================%
+%% %
+%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS %
+%% %
+%%======================================================================%
+
+%% NOTE: The recommended way of defining arrow commands is now
+%% \newarrow{Name}{tail}{filler}{middle}{filler}{head}
+%% which defines \rName, \lName, \dName and \uName using arrow parts which
+%% have themselves previously been defined using the commands
+%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.
+
+%% The components \rhvee etc have been retained for the time being, as an
+%% intermediate stage and to continue to support the old \HorizontalMap and
+%% \VerticalMap commands, but you should not rely on the continued existence
+%% of these macros.
+
+%% The various components usually need some correction
+%% - longitudinally, ie to prevent gaps and overprints with the shaft,
+%% - transversally, ie to prevent "steps" in the junction with the shaft.
+%% The former can be done safely ad hoc, eg with \mkern1mu.
+%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
+%% \shifthook and \raisehook, which include pixel corrections.
+
+%% Please note that these and the other auxillary macros which follow are
+%% interim. When it becomes clear exactly what kinds of adjustments are
+%% needed for characters, this job will be done by a suitable extension
+%% to the language of \newarrowhead, etc. If you have any other ideas for
+%% transformations of general use please tell me.
+
+%% By all means experiment with other characters for arrowheads, but
+%% please, in your own interests, do not rely on macros like \rhvee,
+%% send me a copy of your definitions for distribution to other users
+%% in this file, and keep track of where your efforts get copied so
+%% that they can be replaced with the "official" version when it is
+%% incorporated.
+
+%% ***** DONT use macros with mangled names like \Cd@gH. *****
+
+\catcode\lq\$=3 %% make sure that $ means maths-shift
+\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt
+
+%% print #1 in \scriptstyle, adjusting for the maths axis height
+\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
+\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
+\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise
+\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-%
+\ss@axisheight\raise\dimen0\hbox{#1}}
+
+%% Some of the characters would look better in bold since they're
+%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
+%% do this, defining this to do nothing if it doesn't exist.
+%% With the old LaTeX font selection at other than 10pt you may still
+%% get nothing happenning. Also, PK fonts may be missing.
+%% If you have problems, DONT use boldhook or boldlittlevee.
+\ifx\boldmath\CD@qK%%
+\let\boldscriptaxis\scriptaxis%%
+\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
+\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
+\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
+\fi
+
+%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
+\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
+%% the character to use
+\dimen0\ss@axisheight%% \scriptscriptstyle axis height
+\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
+\dimen2\ht3\advance\dimen2-\dimen0%
+%% height of char above axis (half spread)
+\advance\dimen2-0.021em\advance\dimen1 #2\dimen2%
+%% shift = axis_difference +/- half_spread
+\raise\dimen1\box3}}%% print the character
+%% Mark Dawson suggested using the width
+\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1%
+\divide\dimen0 12\CD@zH{\dimen0}%% "u"
+\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}%
+\kern#2\dimen1\box1}%% print
+
+%% use the extension font (cmex) for double vertical arrows
+\def\@cmex{\mathchar"03}%%ascii double quote
+
+%% ************* P U L L B A C K S ************
+
+%% These will probably be replaced by something less ad hoc
+%% in a future version.
+
+\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
+\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0%
+.35em}
+
+%% This is a hack for my book ``Practical Foundations of Mathematics''
+%% and WILL NOT BE SUPPORTED --- DO NOT USE IT!
+\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{}
+
+\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.%
+95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}}
+
+\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em
+\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}}
+
+\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.%
+95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}}
+
+\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em
+\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}}
+
+%% Freyd & Scedrov puncture symbol for non-commuting polygon
+\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
+0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
+\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
+depth-.47\ht0 width.35\ht0 }}
+
+%% 2-cells: (24.11.95)
+%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
+\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%%
+\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%%
+\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%%
+\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%%
+\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%%
+\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%%
+\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%%
+\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}}
+
+%%======================================================================%
+%% %
+%% (23) BITS OF ARROWS %
+%% %
+%%======================================================================%
+
+%% ********** H E A D S ***********
+
+%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
+%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}
+
+%% vee head
+\def\rhvee{\mkern-10mu\greaterthan}%%
+\def\lhvee{\lessthan\mkern-10mu}%%
+\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
+\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
+\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee
+
+%% little vee head
+\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
+\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
+\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\ifx\boldmath\CD@qK%%
+\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\else%%
+\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
+\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
+\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
+\lhvee}\dhblvee\uhblvee%%
+\fi
+
+%% curly vee head (uses AMS symbols fonts)
+\def\rhcvee{\mkern-10mu\succ}%%
+\def\lhcvee{\prec\mkern-10mu}%%
+\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
+\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
+\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee
+
+%% double vee head %% will probably be withdrawn later
+\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
+\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
+\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
+\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
+\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee
+
+%% open and closed triangles (uses AMS symbols fonts)
+\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
+\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
+\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
+\def\lhtriangle{\triangleleft\mkern.8mu}%%
+\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
+\kern-.25ex}}%%
+%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
+%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
+%% and also for compatibility with upward arrow.
+\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
+\kern-.1ex}}%% 15.1.93 from -.25ex
+\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
+%% AMS
+\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
+%% AMS
+\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangledown$}}}%% AMS
+\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangle$}}}%% AMS
+\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
+\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
+\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
+\dhlblack\uhlblack
+
+%% LaTeX arrowheads
+\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
+\axisheight\box0\kern.1\dimen0}}%%
+\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
+\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
+\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla
+
+%% double LaTeX arrowheads %% will probably be withdrawn later
+\def\lhlala{\lhla\kern.3em\lhla}%%
+\def\rhlala{\rhla\kern.3em\rhla}%%
+\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
+\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
+\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala
+
+%% circles % \rho is a Greek letter!
+\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
+\newarrowhead{o}\hho\hho\circ\circ%%
+\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
+\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
+\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
+\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++
+
+%% empty head {} is also available
+
+%% Y from stmaryrd (vertical ones still need large adjustment)
+\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown
+
+%% ********** H E A D S with S H A F T S ***********
+
+%% little arrow with shaft
+\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow
+
+%% arrow with double shaft
+%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
+\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
+\upharpoonleft
+
+%% little double-headed arrow with shaft (uses AMS symbols fonts)
+\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
+\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
+\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
+\twoheaduparrow
+
+%% ********** T A I L S ***********
+
+%% vee tail
+\def\rtvee{\greaterthan}%%
+\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
+\def\dtvee{\vee}%%
+\def\utvee{\wedge}%%
+\newarrowtail{vee}\greaterthan\ltvee\vee\wedge
+
+%% little vee tail
+\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\CD@qK
+\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
+boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
+\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi
+
+%% curly vee tail (uses AMS symbols fonts)
+\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge
+
+%% open and closed triangle tails (uses AMS symbols fonts)
+\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
+\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
+\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
+\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
+\dhlblack\uhlblack
+
+%% LaTeX tails
+\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.2\dimen0}}%%
+\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
+\kern-.1\dimen0}}%% 15.1.93 from -.6
+\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
+\kern-.6\dimen0}}%%
+\newarrowtail{LaTeX}\rtla\ltla\dtla\utla
+
+%% double vee tail %% will probably be withdrawn later
+\def\rtvvee{\gg\mkern-3mu}%%
+\def\ltvvee{\mkern-3mu\ll}%%
+\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
+\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
+\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee
+
+%% double LaTeX tails %% will probably be withdrawn later
+\def\ltlala{\ltla\kern.3em\ltla}%%
+\def\rtlala{\rtla\kern.3em\rtla}%%
+\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
+\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
+\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala
+
+%% bar (as in \mapsto)
+\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
+\let\dtbar\utbar%%
+\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
+%%
+\let\ltbar\rtbar%%
+\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
+\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)
+
+%% hooks (as in \into): choice of after/above and before/below
+
+\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
+\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
+\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
+\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%
+
+\def\dthooka{\shifthook{}+\cap}%%
+\def\dthookb{\shifthook{}-\cap}%%
+\def\uthooka{\shifthook{}+\cup}%%
+\def\uthookb{\shifthook{}-\cup}%%
+
+\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
+\rthookb\lthookb\dthookb\uthookb
+
+\ifx\boldmath\CD@qK\newarrowtail{boldhooka}\rthooka\lthooka\dthooka\uthooka
+\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail{%
+boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook
+\boldmath+\subset\mkern-1mu}%%
+\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
+\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
+\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
+\def\dtbhooka{\shifthook\boldmath+\cap}%%
+\def\dtbhookb{\shifthook\boldmath-\cap}%%
+\def\utbhooka{\shifthook\boldmath+\cup}%%
+\def\utbhookb{\shifthook\boldmath-\cup}%%
+\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
+boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
+\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi
+
+%% square-ended hooks (used for closed subsets in ``lifting and gluing'')
+\def\dtsqhooka{\shifthook{}+\sqcap}%%
+\def\dtsqhookb{\shifthook{}-\sqcap}%%
+\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%%
+\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%%
+\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%%
+\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%%
+\def\utsqhooka{\shifthook{}+\sqcup}%%
+\def\utsqhookb{\shifthook{}-\sqcup}%%
+\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka
+
+%% the following seem the better choices at 10pt & 300dpi
+\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
+\lthookb\dthooka\uthooka
+
+%% circles
+\newarrowtail{o}\hho\hho\circ\circ%%
+\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++
+
+%% empty tail {} is also available
+
+%% Y from stmaryrd (vertical ones still need adjustment)
+\newarrowtail{Y}\Yright\Yleft\Yup\Ydown
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
+\downharpoonright
+
+%% ********** F I L L E R S ***********
+
+%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.
+
+%% dot {.}, single rule {-} and empty {} fillers are also available
+
+%% double and triple lines
+%%\newarrowfiller{=}==\Vert\Vert%%
+\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
+\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
+\newarrowfiller{3}\equiv\equiv\vfthree\vfthree
+
+%% dashed line
+\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
+\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%%
+\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%%
+\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
+\def\vfdash{\vfdashstrut\vfthedash}%%
+\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash
+
+%% ************* M I D D L E S ************
+
+%% plus
+\newarrowmiddle+++++
+
+%% ************* D I A G O N A L S ************
+
+%% simple arrow heads
+%%\def\nwhTO{\nwarrow\mkern-1mu}%%
+%%\def\nehTO{\mkern-.1mu\nearrow}%%
+%%\def\sehTO{\searrow\mkern-.02mu}%%
+%%\def\swhTO{\mkern-.8mu\swarrow}%%
+
+%%======================================================================%
+%% %
+%% (24) ARROW COMMANDS %
+%% %
+%%======================================================================%
+
+%% change to \iftrue to get mixed heads
+\iffalse%%
+\newarrow{To}----{vee}%%
+\newarrow{Arr}----{LaTeX}%%
+\newarrow{Dotsto}....{vee}%%
+\newarrow{Dotsarr}....{LaTeX}%%
+\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
+\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
+\newarrow{Mapsto}{mapsto}---{vee}%%
+\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
+\newarrow{IntoA}{hooka}---{vee}%%
+\newarrow{IntoB}{hookb}---{vee}%%
+\newarrow{Embed}{vee}---{vee}%%
+\newarrow{Emarr}{LaTeX}---{LaTeX}%%
+\newarrow{Onto}----{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\newarrow{Dotsonto}....{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\else%%
+\newarrow{To}---->%%
+\newarrow{Arr}---->%%
+\newarrow{Dotsto}....>%%
+\newarrow{Dotsarr}....>%%
+\newarrow{Dashto}{}{dash}{}{dash}>%%
+\newarrow{Dasharr}{}{dash}{}{dash}>%%
+\newarrow{Mapsto}{mapsto}--->%%
+\newarrow{Mapsarr}{mapsto}--->%%
+\newarrow{IntoA}{hooka}--->%%
+\newarrow{IntoB}{hookb}--->%%
+\newarrow{Embed}>--->%%
+\newarrow{Emarr}>--->%%
+\newarrow{Onto}----{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\newarrow{Dotsonto}....{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\fi%%
+
+\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
+\newarrow{Project}----{triangle}%%
+\newarrow{Pto}----{harpoon}%% partial function
+\newarrow{Relto}{harpoon}---{harpoon}%% binary relation
+
+\newarrow{Eq}=====%%
+\newarrow{Line}-----%%
+\newarrow{Dots}.....%%
+\newarrow{Dashes}{}{dash}{}{dash}{}%%
+
+%% square hooked arrow (used in my ``gluing and lifting'' paper)
+\newarrow{SquareInto}{sqhook}--->
+
+%% braces and parentheses
+%% \newarrow gives inappropriate directions, so we change the names
+%% the vertical filler is too far to the right; horizontal too high
+%% the vertical middles are too low with midvshaft
+%% maybe we'll add square brackets and the integral sign one day
+\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
+\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
+\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{%
+\hbox@maths{\@cmex3D\mkern-2mu}}}%% right
+{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left
+\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
+\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
+\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets []
+\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets []
+\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets []
+\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets []
+\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets []
+\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets []
+\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets []
+\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets []
+
+%% synonyms for reverse compatibility
+
+\let\uFrom\uTo%%
+\let\lFrom\lTo%%
+\let\uDotsfrom\uDotsto%%
+\let\lDotsfrom\lDotsto%%
+\let\uDashfrom\uDashto%%
+\let\lDashfrom\lDashto%%
+\let\uImpliedby\uImplies%%
+\let\lImpliedby\lImplies%%
+\let\uMapsfrom\uMapsto%%
+\let\lMapsfrom\lMapsto%%
+\let\lOnfrom\lOnto%%
+\let\uOnfrom\uOnto%%
+\let\lPfrom\lPto%%
+\let\uPfrom\uPto%%
+
+\let\uInfromA\uIntoA%%
+\let\uInfromB\uIntoB%%
+\let\lInfromA\lIntoA%%
+\let\lInfromB\lIntoB%%
+\let\rInto\rIntoA%%
+\let\lInto\lIntoA%%
+\let\dInto\dIntoB%%
+\let\uInto\uIntoA%%
+\let\ruInto\ruIntoA%%
+\let\luInto\luIntoA%%
+\let\rdInto\rdIntoA%%
+\let\ldInto\ldIntoA%%
+%%
+\let\hEq\rEq%%
+\let\vEq\uEq%%
+\let\hLine\rLine%%
+\let\vLine\uLine%%
+\let\hDots\rDots%%
+\let\vDots\uDots%%
+\let\hDashes\rDashes%%
+\let\vDashes\uDashes%%
+
+%%=========================================================================%
+%% The following are included for reverse compatibility only.
+%%=========================================================================%
+\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
+\ruTo(2,3)}%%ascii
+\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
+\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
+\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
+\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
+\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
+\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
+\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
+\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
+\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
+\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
+\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii
+
+\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
+{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
+\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
+\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
+\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
+\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
+\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
+\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
+\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
+\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
+\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
+\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
+\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii
+
+\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
+(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
+\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
+\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
+\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
+\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
+\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
+\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
+\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
+\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
+\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
+\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
+\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii
+
+\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
+\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
+\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
+\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
+\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
+\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
+\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
+\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
+\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
+\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
+\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
+\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
+\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii
+
+\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
+\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
+\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
+\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
+\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
+\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
+\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
+\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
+\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
+\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
+\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
+\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
+\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii
+
+\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
+(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
+\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
+\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
+\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
+\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
+\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
+\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
+\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
+\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
+\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
+\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
+\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii
+
+\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
+\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
+\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
+\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
+\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
+\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
+\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
+\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
+\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
+\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
+\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
+\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
+\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii
+
+%%======================================================================%
+%% %
+%% (25) MISCELLANEOUS %
+%% %
+%%======================================================================%
+
+\def\labelstyle{%%
+\ifincommdiag%%
+\textstyle%%
+\else%%
+\scriptstyle%%
+\fi}%%
+\let\objectstyle\displaystyle
+
+\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
+17557,1.17557,1.902113,1.902113}
+
+\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
+.75,0.75,1.1,1.1,0.9,0.9}
+
+\diagramstyle[%%ascii open square bracket
+dpi=300,%% office laserwriters are usually 300 dots per inch
+vmiddle,nobalance,%% vertical and horizontal positioning
+loose,%% allow rows and columns to stretch
+thin,%% line10 arrows; default rule thickness (TeXbook p447)
+pilespacing=10pt,%
+%% parallel vertical separation (horizontals: half this)
+shortfall=4pt,%% distance between arrowheads and their targets
+%% The following are defaulted on entry to the diagram itself.
+%% l>=2em minimum length of horizontal arrow shafts in text
+%% l>=1em ditto in diagrams
+%% size=3em cell size
+%% heads=LaTeX arrowheads
+]%%ascii close square bracket
+
+%% process options to LaTeX2e's \usepackage[options]{diagrams}
+\ifx\ProcessOptions\CD@qK\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi\fi
+
+%%============================== THE END ====================================
+\CD@vE\message{| >>>>>>>> POSTSCRIPT MODE (DVIPS) IS NOW THE DEFAULT <<<<<<<<%
+<<<<|}\message{|(DVI mode has not been supported since 1992 and produces
+inferior|}\message{|results which are completely unsuitable for publication.
+However,|}\message{|if you really still need it, you can still get it by
+loading the |}\message{|package using ``\string\usepackage[UglyObsolete]{%
+diagrams}'' instead. ) |}\else\message{| >>>>>>>> USING UGLY OBSOLETE DVI CODE
+- PLEASE STOP <<<<<<<<<<<<|}\message{|(DVI mode has not been supported since
+1992 and produces inferior|}\message{|results which are completely unsuitable
+for publication - Please |}\message{|use the PostScript or PDF mode instead,
+for much better results.)|}\fi\cdrestoreat
+%% restore old category code for @ etc
+\message{===================================================================}%
+%% This is the end of Paul Taylor's commutative diagrams package.
+
diff --git a/macros/generic/diagrams/taylor/V3,93.tex b/macros/generic/diagrams/taylor/V3,93.tex
new file mode 100644
index 0000000000..1969460bb1
--- /dev/null
+++ b/macros/generic/diagrams/taylor/V3,93.tex
@@ -0,0 +1,1912 @@
+\message{==================================================================}%
+\message{<Paul Taylor's commutative diagrams - version 3.93, 9 June 2009>}%%
+%%
+%% This code runs the LaTeX \ProvidesPackage command iff it is defined.
+%% included at the request of Michael Downes <mjd@ams.org> March 2002.
+%% Put \listfiles in your LaTeX preamble to see what this is for.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{%
+\fi\ProvidesPackage{diagrams}[2008/10/15 v3.93 Paul Taylor's commutative
+diagrams]%%
+\toks0=\bgroup}%%
+%%======================================================================%
+%% TeX macros for drawing category-theoretic diagrams %
+%% %
+%% Paul Taylor %
+%% %
+%% www.PaulTaylor.EU/diagrams %
+%% www.ctan.org/tex-archive/macros/generic/diagrams/taylor/ %
+%% %
+%% PLEASE READ THE MANUAL! %
+%% %
+%% Please ensure that you are registered with me as a user so that %
+%% you can be informed of future releases. Any electronic mail %
+%% message with "commutative" or "diagram" in the subject line %
+%% (such as your request for the package, a question about it, or %
+%% even an otherwise blank message) automatically registers you. %
+%% %
+%% %
+%% CONTENTS: %
+%% (O) corruption-sensitive hacks (to approx line 330) %
+%% Arrow components & commands - starts approx line 1240 %
+%% (22) auxillary macros for adjustment of components %
+%% (23) bits of arrows (\rhvee etc) %
+%% (24) arrow commands (\rTo etc) %
+%% (25) miscellaneous %
+%% Apart from these five sections, the rest is intended to be totally %
+%% meaningless in the undocumented version, which is approximately %
+%% 1913 lines long. Please do not waste trees by printing it out. %
+%% %
+%% COPYRIGHT NOTICE: %
+%% This package may be copied and used freely for any academic %
+%% (not commercial or military) purpose, on condition that it %
+%% is not altered in any way, and that an acknowledgement is %
+%% included in any published work making substantial use of it. %
+%% %
+%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. %
+%% %
+%% If you are doing something where mistakes cost money (or where %
+%% success brings financial profit) then you must use commercial %
+%% software, not this package. In any case, please remember to %
+%% keep several backup copies of all files, and check everything %
+%% visually before sending final copy to the publishers. %
+%% %
+%% You may use this package as a (substantial) aid to writing an %
+%% academic research or text book on condition that %
+%% (i) you contact me at a suitable time to ensure that you have %
+%% an up-to-date version (and any infelicities can be fixed), %
+%% (ii) you send me a copy of the book when it's published. %
+%% %
+%% HISTORY %
+%% 3.93 Released 9 June 2009 %
+%% Added support for XeTeX, with help from Apostolos Syropoulos. %
+%% 3.92 Released 31 December 2007 %
+%% 3.91 Released 31 August 2006 %
+%% Renamed "noPostScript" option as "UglyObsolete". %
+%% 3.90 Released 11 April 2004 %
+%% use PostScript=Rokicki not pure DVI by default %
+%% 3.89 Released 7 July 2002 %
+%% Added support for pdftex, which is recognised automatically. %
+%% 3.88 Released 1 September 2000 %
+%% Square hook tail: \newarrow{SquareInto}{sqhook}---> %
+%% 3.87 Released 1 September 1999 %
+%% This version was used for the final 1200dpi PS copy of my book %
+%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) %
+%% see http://www.PaulTaylor.EU/Practical_Foundations %
+%% 3.86 Released 1 September 1998 %
+%% New options hug and nohug in PostScript mode: [PS,nohug] uses %
+%% PS for the arrows without rotating the labels, but the way of %
+%% calculating the actual position of these horizontal labels on %
+%% will remain subject to alteration for some period of time --- %
+%% please send me examples if you feel that adjustment is needed. %
+%% %
+%% midvshaft and snake for vertical arrows %
+%% New option [gap=width] (default=shortfall) to use instead of %
+%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ %
+%% labels to be moved too far away from the shaft. %
+%% Added >-> and <-< heads and tails, same as >> and << but the %
+%% shaft goes *through* the extra arrowhead. %
+%% 3.85 Released 20 August 1997 %
+%% New option [crab=distance] shifts horizontals and PS diagonals %
+%% transversally by the specified distance (positive=upward). %
+%% New option [snake=distance] shifts midshaft horizontals and %
+%% PS diagonals longitudinally by the specified distance. %
+%% New option [leftflush], like [flushleft] but reckons alignment %
+%% from multiple verticals, or from text if there's no vertical. %
+%% Most of the history has been suppressed from the user version. %
+%% 3.83 Released 18 May 1995 %
+%% "dotted" option (set dot filler on maps) %
+%% Parallel maps (\pile) outside diagrams stretch correctly. %
+%% Option "LaTeXeqno" uses LaTeX's equation number and style %
+%% for "eqno"; LaTeX's \label command picks this up. %
+%% Suppress warnings & 2nd pass errors with "silent" option. %
+%% 3.81 Second alpha release 18 July 1994 %
+%% \overprint{text} sets text in maths and overprints it in the %
+%% current cell, centered in the column irrespective of other stuff%
+%% "repositionpullbacks" option uses this for \SEpbk etc %
+%% \newdiagramgrid declaration, grid option and pentagon grid. %
+%% 3.80 Alpha release for adjusted diagonals 15 July 1994. %
+%% Introduced landscape and portrait options. %
+%% Diagonals adjusted to meet their endpoints, at last!!!! %
+%% 3.28 Released 30 November 1993 %
+%% Peter Freyd's \puncture symbol provided. %
+%% 3.25 Released 30 January 1993 %
+%% LaTeX heads made default (unless \tenln undefined, when vee) %
+%% Circle, cross, little vee, little black triangle heads. %
+%% First-use warning when defaulted diagonal components are used. %
+%% AMSTEX emulation - works at least when amstex not present. %
+%% 3.24 Release 7 Sept 1992 advertised to users. %
+%% PostScript option introduced: %
+%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails %
+%% TPIC option introduced as an alternative to \LaTeX@make@line. %
+%% Postscript arrows (basic code). %
+%% Implemented \newarrow \newarrowhead etc. %
+%% Horizontal arrows outside diagram can stretch by wordspacing. %
+%% Added < and > for labels on left and right of arrow; %
+%% 3.16 (20.7.90) as mass mailed; only have mangled version %
+%% -- all following version numbers are post-facto -- %
+%% 3 (Jan 90) stretching vertical arrows %
+%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels %
+%% 1 (1987) horizontal arrows stretch to edge of cell %
+%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis %
+%%======================================================================%
+
+%%======================================================================%
+%% %
+%% (1) CORRUPTION-SENSITIVE HACKS %
+%% %
+%%======================================================================%
+
+%% CORRUPTION & \catcode WARNING
+
+%% BITNET (IBM) machines may corrupt certain important characters
+%% in transmission by electronic mail:
+%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
+%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
+%% {}=curly braces (grouping), \=backslash (keywords),
+%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
+%% <>=angle brackets (relations \ifnum,\ifdim), ==equals,
+%% ,=comma, .=dot, :=colon, ;=semicolon, =space
+%% $=dollar (maths) is only used in the "bits of maps" section
+
+%% The following characters are marked by a comment including the word "ASCII",
+%% except in comments and messages:
+%% &=and (alignment), ~=tilde, |=vertical, []=square brackets,
+%% ^=caret (superscript), _=underline (subscript),
+%% "=double quote (hex), ()=round brackets,
+%% /=slash, ?=query, !=pling/bang,
+%% The following are no longer flagged:
+%% `=grave/backquote (catcodes), '=acute/single quote (octal),
+
+%% The \catcode's marked * are assumed for reading this file:
+%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
+%% space=10* letter=11* other=12 active=13 %=14* invalid=15
+%% If you want to load this package inside Stallman's "texinfo", you must do
+%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
+%% Also need @catcode`@&=4.
+
+%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)****
+
+%% don't load me twice!
+\ifx\diagram\isundefined\else\message{WARNING: the \string\diagram\space
+command is already defined and will not be loaded again}\expandafter\endinput
+\fi
+
+%% make @ letter, saving its old code to restore at the end of this file
+%%% look for this on the last line of the file if you think something's missing!
+%% the other \catcode assignments are to make it work with texinfo.
+\edef\cdrestoreat{%%
+\noexpand\catcode`\noexpand\@=\the\catcode`\@%%
+\noexpand\catcode`\noexpand\#=\the\catcode`\#%%
+\noexpand\catcode`\noexpand\$=\the\catcode`\$%%
+\noexpand\catcode`\noexpand\<=\the\catcode`\<%%
+\noexpand\catcode`\noexpand\>=\the\catcode`\>%%
+\noexpand\catcode`\noexpand\:=\the\catcode`\:%% Johannes L. Braams's
+\noexpand\catcode`\noexpand\;=\the\catcode`\;%% Babel languages package
+\noexpand\catcode`\noexpand\!=\the\catcode`\!%% makes these \active.
+\noexpand\catcode`\noexpand\?=\the\catcode`\?%%
+\noexpand\catcode`\noexpand\+=\the\catcode'53%% texinfo @+ is @outer@active
+}\catcode`\@=11 \catcode`\#=6 \catcode`\<=12 \catcode`\>=12 \catcode'53=12
+\catcode`\:=12 \catcode`\;=12 \catcode`\!=12 \catcode`\?=12
+
+%% Change y to n if pool_size in your implementation of TeX is small.
+%% This is reasonable if you have a small ("personal") computer, but if you
+%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
+%% system manager and get him/her to install a version of TeX with bigger
+%% parameters. The "hash size" (number of command names) gets you next.
+\ifx\diagram@help@messages\CD@qK\let\diagram@help@messages y\fi
+
+%% The following macro is used to include literal PostScript commands in the
+%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is
+%%% dependent on the convention used by your local DVI-to-PostScript translator.
+%% Choose whichever line applies to the program used at your site, or, if
+%% yours is not listed, consult the manual, experiment with this macro and
+%% (please) tell me what is needed to make it work.
+%%
+%%
+%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
+%% CTAN: dviware/dvips
+\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
+\cdps@RadicalEye\cdps@Rokicki\let\CD@HB\cdps@Rokicki\let\CD@IK\cdps@Rokicki
+\let\CD@HB\cdps@Rokicki%%
+%% I'm not sure that the rest work.
+%%
+%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
+%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
+\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
+%% ASCII two dbl quotes
+\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
+\cdps@Bechtolsheim%%
+%% dvitops (James Clark)
+%% CTAN: dviware/dvitops
+\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
+\let\cdps@dvitops\cdps@Clark%%
+%% OzTeX (Andrew Trevorrow) cannot be used
+\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
+%% dvi3ps (Kevin Coombes)
+%% CTAN: dviware/dvi2ps/dvi3ps
+\def\cdps@Coombes#1{\special{ps-string #1}}%%
+%% psprint (Trevorrow) CTAN: dviware/psprint
+%% dvi2ps (Senn) CTAN: dviware/dvi2ps
+%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi
+
+\count@=\year\multiply\count@12 \advance\count@\month%%
+\ifnum\count@>24144 %% (December 2011)
+\message{***********************************************************}%%ascii
+\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%%
+\message{! it expired in December 2009 and is time-bombed for April *}%%
+\message{! You may get an up to date version of this package from *}%%ascii
+\message{! either www.ctan.org or www.PaulTaylor.EU/diagrams/ *}%%
+\message{***********************************************************}%%ascii
+\ifnum\count@>24147 %% (March 2012)
+\errhelp{You may press RETURN and carry on for the time being.}\message{! It
+is embarrassing to see papers in conference proceedings}\message{! and
+journals containing bugs which I had fixed years before.}\message{! It is easy
+to obtain and install a new version, which will}\errmessage{! remain
+compatible with your files. Please get it NOW.}\fi\fi
+
+\def\CD@DE{\global\let}\def\CD@RH{\outer\def}
+
+%% safe names for braces, tab (&) and maths ($), as commands and for messages
+{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%%
+%%
+%% three ASCII ampersands (ands) (&&&) appear on the next line
+\catcode`\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands
+%%
+%% ASCII ^ and _ each appear twice on next line
+%% six ASCII dollars ($$$$$$) appear on the next two lines.
+\catcode`\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars
+\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars
+%%
+%% two ASCII underlines (__) appear on the next line.
+\catcode`\_=8 \CD@DE\CD@lJ=_%%ascii two underlines
+%%
+%% eight ASCII carets (^^^^^^^^) appear on the next three lines.
+\obeylines\catcode`\^=7 \CD@DE\@super=^%%ascii two carets
+\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets
+\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets
+\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets
+\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand
+\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
+\fi\fi\fi}%%
+
+%% avoid using <> (because I personally re-define them to mean \langle\rangle)
+\mathchardef\lessthan='30474 \mathchardef\greaterthan='30476
+
+%% LaTeX line and arrowhead font
+%% the "hit return" comments show up if the font is missing.
+\ifx\tenln\CD@qK%%
+\font\tenln=line10\relax%% Hit return - who needs diagonals?
+\fi\ifx\tenlnw\CD@qK\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
+\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
+\fi\fi%%
+
+%% report line numbers in TeX3 only
+\ifx\inputlineno\CD@qK\csname newcount\endcsname\inputlineno\inputlineno\m@ne
+\message{***************************************************}\message{!
+Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
+has been available since 1990. *}\message{***********************************%
+****************}\fi
+
+\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}}
+
+%% turn round- and square-bracketed arguments into curly-bracketed
+\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
+\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
+\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets
+\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
+\enddiagram}}
+
+%% ASCII open square bracket occurs on next line
+\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else
+\aftergroup\CD@JH\fi}}%%
+\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF}
+
+%% ASCII vertical bar (|) occurs on the next line
+\def\CD@KK{|}
+
+\def\CD@PB{%% arguments to maps inside diagrams
+\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:%
+\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
+\tokcase<:\CD@iF;%%ascii less-than
+\tokcase>:\CD@iI;%%ascii greater-than
+\tokcase(:\CD@BC;%%)%ascii open round bracket
+\tokcase[:\optional@;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
+\break@args;\endswitch}
+
+\def\switch@arg{%% arguments to horizontal maps outside diagrams
+\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@
+;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
+\middle@label;%%ascii tilde (questionable!)
+\default:\CD@y\break@args;\endswitch}
+
+%% That's as much as you get to read "in clear" - the rest is private!
+
+\let\CD@tJ\relax\ifx\protect\CD@qK\let\protect\relax\fi\ifx\AtEndDocument
+\CD@qK\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}%
+\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{%
+\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{%
+\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}%
+\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def
+\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1%
+\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def
+\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
+\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=%
+\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
+\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF
+=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7
+\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4
+\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9
+\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef
+\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9
+\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
+}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{%
+\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1%
+\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE
+#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}%
+\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1%
+\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{%
+\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef
+\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram
+}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\CD@qK\expandafter
+\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def\@ignoretrue{%
+\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi
+
+\def\CD@g{{\ifnum0=`}\fi}\def\CD@wC{\ifnum0=`{\fi}}\def\catcase#1:{\ifcat
+\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def
+\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}%
+\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:%
+#1;#2\endswitch{#1}\ifx\at@\CD@qK\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}%
+\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z
+\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%
+%%ascii round
+\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
+\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}%
+\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{%
+\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{%
+\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp
+\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax
+\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P
+\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
+\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode`\@\active
+\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA\newcount\CD@vA
+\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA\CD@tG\CD@gE
+\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA\newcount
+\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA\CD@bA
+\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2\relax\fi}%
+\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH=1sp
+\newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def\CD@nJ{%
+\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{\CD@t
+\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=\lastbox
+\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0\unskip
+\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1\unskip
+\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide\CD@@I300
+\def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I\divide#1%
+\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{\afterassignment\CD@gI
+\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI\CD@LF\CD@V\CD@@I{4%
+\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V\CD@oI\CD@@I\fi\CD@cJ}%
+\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@\divide\CD@@I\count@\fi
+\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@\divide\count@5\divide
+\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ\z@}\def\CD@QJ#1{%
+\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5\CD@oI\CD@zH\CD@tI
+\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@\newdimen\CD@eJ
+\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI\CD@LF\relax}%
+\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{\fontdimen22\the
+\textfont\tw@}\def\script@axisheight{\fontdimen22\the\scriptfont\tw@}\def
+\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def\CD@NC{0.4pt}\def
+\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3\textfont\z@}\newdimen
+\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{\ifincommdiag1.3em\else2em\fi}%
+\newdimen\CD@YB\def\CellSize{\afterassignment\CD@kB\DiagramCellHeight}%
+\newdimen\DiagramCellHeight\DiagramCellHeight-\maxdimen\newdimen
+\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{\DiagramCellWidth
+\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def\MapsAbut{%
+\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA\CD@iA\z@
+\CD@tG\CD@vE\CD@aB\CD@ZB\expandafter\ifx\expandafter\iftrue\csname
+ifUglyObsoleteDiagrams\endcsname\CD@ZB\else\CD@aB\fi\CD@nF{%
+ifUglyObsoleteDiagrams}{relax}\newif\ifUglyObsoleteDiagrams\def\CD@nK{\CD@aB
+\UglyObsoleteDiagramsfalse}\def\CD@oK{\CD@ZB\UglyObsoleteDiagramstrue}\CD@vE
+\CD@nK\else\CD@oK\fi\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\def\CD@sK{\ifx\pdfoutput
+\CD@qK\else\ifx\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@pK\fi\fi\fi} \def
+\CD@pK{\global\CD@dK\global\CD@aB\global\UglyObsoleteDiagramsfalse\global\let
+\CD@n\empty\global\let\CD@oK\relax\global\let\CD@pK\relax\global\let\CD@sK
+\relax}\def\CD@tK#1{\special{pdf: literal #1}}\ifx\pdfliteral\CD@qK\else\ifx
+\pdfliteral\relax\else\let\CD@tK\pdfliteral\fi\fi\ifx\XeTeXrevision\CD@qK
+\else\ifx\XeTeXrevision\relax\else\ifdim\XeTeXrevision pt<.996pt \expandafter
+\message{! XeTeX version \XeTeXrevision\space does not support PDF literals,
+so diagonals will not work!}\else\expandafter\message{RUNNING UNDER XETEX
+\XeTeXrevision}\CD@pK\fi\fi\fi\CD@sK\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}%
+\def\newarrowtail{\CD@mG t\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG
+\hbox@maths\empty}\def\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#%
+4#5#6#7#8#9{\CD@RC{r#1:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}%
+}\CD@RC{u#1:#5}{#3{#9}}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4%
+\endcsname\noexpand\CD@MC}\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4%
+\endcsname\noexpand\CD@MC}}\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless
+PostScript is set}\def\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{%
+\CD@IJ\CD@sJ<>ht\CD@IJ\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2%
+}{r#4:#1}\CD@HJ{r#5}{#2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}%
+\CD@HJ{d#5}{#2}{u#4}{#3}{u#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup
+\CD@GJ\CD@L{#1+:#2}\CD@L{#1:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#%
+3#4{\csname newbox\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box
+\voidb@x}\def\CD@sJ{}\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln
+\nullfont\def\CD@sJ{vee}\else\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup
+\aftergroup\CD@wF\CD@L{#1#2:#3#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3%
+-#3}\CD@L{#1#2:#3}\endgroup}\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4%
+\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC
+}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-%
+.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<%
+\def\CD@wF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#%
+2}}}\def\CD@yF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4%
+\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1%
+#2{\def#1{\vbox{\kern-.4\CD@zC\vbox to\z@{#2\vss}\nointerlineskip\kern.4%
+\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<\CD@xF ut<\def\CD@BG#1{\hbox{%
+\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5mu{#1}\mkern-1.5mu\CD@ND}}%
+\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1{\hbox to\CD@LF{\setbox0=%
+\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}\CD@ND}\dimen0.5\wd0\advance
+\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0\unhbox0\hss}}\def\CD@sB#1{\hbox
+to2\CD@LF{\hss\offinterlineskip\mathsurround\z@\CD@k{#1}\CD@ND\hss}}\def
+\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}\def\CD@bE#1{\hbox{\kern-.15%
+\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#1{\vbox{\offinterlineskip
+\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def
+\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-}{@fillh}\CD@nF{lf:-}{@fillh}%
+\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{rh:}{null}\CD@nF{rm:}{null}%
+\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null}\CD@nF{lt:}{null}\CD@nF{dh%
+:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{uh:}{null}\CD@nF{um:}{null}%
+\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null}\CD@nF{+t:}{null}\CD@nF{-h%
+:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def\CD@@D{\hbox{\vrule height 1pt
+depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF{lf:}{rf:}\CD@nF{+f:}{rf:}%
+\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}\def\CD@BD{\CD@U\null
+\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def\newarrow#1#2#3#4#5#6%
+{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3}\edef\CD@QG{#4}\edef
+\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK\CD@BH\let\@x\CD@AH\ifx
+\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let\CD@LE\empty\fi\def\CD@LI{%
+r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH{+}\def\@m{-}\ifx\CD@iD
+\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE\empty\ifx\CD@iD\CD@aE\let
+\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{\CD@iD\CD@oJ}\ifx\CD@a\empty
+\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode\aftergroup\CD@kG\else\CD@@A
+\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler}\CD@iD\CD@oB rm{middle}%
+\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi\CD@oB rt{tail\space
+\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}\NorthWest\CD@nG r+2+2{%
+ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r+2-2{rd}{se}\SouthEast
+\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def\CD@sG{\CD@vG\CD@LI
+\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du\Vertical@Map}\def
+\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH\@m+-\Slant@Map}%
+\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode`\/=\active\def\CD@vG#1#2#3#4#%
+5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE//\CD@jG#2#4#5h:%
+\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3#4//{\edef\CD@fG
+{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3\CD@M#4//%
+\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{\CD@fG#1}%
+\expandafter\CD@M\fi}\catcode`\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{\aftergroup
+\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup\CD@CI\else
+\aftergroup\CD@BI\fi\CD@L{#1\@name}%
+%% ASCII round brackets and comma (,) appear on the next line
+\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
+\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{%
+arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined
+before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a
+declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}%
+\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{%
+\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket
+\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket
+\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF
+\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1
+\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}%
+\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or
+\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG
+\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef
+\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or
+#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi
+\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}%
+\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA
+\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
+\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax
+\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD
+#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1%
+\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{%
+\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}%
+\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC
+\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space
+ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed
+in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string
+\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and
+vertical arrows are terminated implicitly means\CD@uG that they cannot be
+mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for
+parallel horizontal arrows; verticals can just be put together in\CD@uG a cell%
+. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The
+horizontal maps must point to an object, not each other (I've put in\CD@uG one
+which you're unlikely to want). Use \string\pile\space if you want them
+parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers
+of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but
+must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don%
+'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from
+stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty
+before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi
+\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24151
+\message{because this one expired in July 2012!}\expandafter\endinput\fi\def
+\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{\CD@GB-%
+9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ plus 1.5%
+\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{fill@dot}{rf:%
+.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6\fi}}\def
+\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}\def\CD@aK{%
+2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1}\def\CD@NI
+{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}\CD@tG\CD@pE
+\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let\CD@OG\CD@OC
+\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE\CD@aD\else
+\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else\CD@BD\global
+\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC\CD@YD\fi}\def
+\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=\MapShortFall
+\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@pD
+\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}\CD@tG
+\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let\CD@QG#3%
+\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#2#3#4#5{%
+\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD\CD@LC
+\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def\break@args{%
+\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{\setbox1=\CD@oJ
+\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi\fi\CD@@G2%
+\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2\else\CD@oF
+2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5\else\CD@oF5#%
+1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1\dimen@\prevdepth
+\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@\box0}}\def\CD@@G
+#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{\xleaders\box#%
+1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string\VerticalMap\space and
+\string\DiagonalMap\CD@uG are obsolete - use \CD@lG\space to pre-define maps}%
+\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old horizontal map}\CD@LC\CD@TJ\def
+\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{\CD@UH{#3}}\CD@SH\CD@jD{#4}\def
+\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#3#4#5{\CD@BK\CD@pB433{vertical
+map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\def\CD@oJ{\CD@GG{#1}}\CD@VH
+\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}\def\CD@LE{\CD@GG{#5}}\CD@tD}%
+\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def\CD@OG{4}\let\CD@kD\CD@qK\let
+\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{%
+\CD@vF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{%
+\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{\CD@vF{#1}}\else\let\mv\lower\def
+\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def\CD@jD{\CD@vF{#4}}\def\CD@LE{%
+\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{\empty}\def\CD@SH{\CD@EG\CD@bE
+\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK\@fillv}\def\CD@EG#1#2#3#4#5{\def
+\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4\null\ifx\CD@CH\empty\else\ifx\CD@CH
+\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def\CD@UH#1{\hbox{\mathsurround\z@
+\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else
+\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND\fi\fi}}\def\CD@yD#1#2{\setbox#1=%
+\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle()\CD@ND}%% ASCII round brackets
+\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle
+\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def
+\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments
+\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;%
+\tokcase[:\CD@XF;%%]%ascii close square bracket
+\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{%
+\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH
+\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1%
+\actually@braces@missing@around@macro@in@label}\CD@UF}\def
+\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label
+{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer
+\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let
+\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been
+read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC
+\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def
+\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{%
+\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ
+\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{%
+\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter
+\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are
+obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi
+-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment
+\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{%
+\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def
+\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def
+\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let
+\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD
+\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter
+\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx
+\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name
+\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef
+\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was
+trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}%
+\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax
+\CD@CH}\def\CD@H#1],{%% ASCII close square bracket
+\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}%
+%% ASCII open and close square bracket
+\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket
+\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\CD@qK\ifx#1\CD@qK\CD@gB{option `\@name'
+undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK\fi\fi
+\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\CD@qK\CD@e\else
+\expandafter\CD@oH\CD@GK,#1,(,),(,)[]%
+%%ASCII 5commas two pairs round, pair square
+\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y)
+value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}%
+\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\CD@qK\fi}%
+%% ASCII 2commas 2pair round, pair square on next line
+\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}%
+\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def
+\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\CD@qK\CD@gB{option `\@name
+' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK\CD@qK#1#2%
+\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=#1,y=#2}}\def
+\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI#1{\def\CD@CH
+{#1}\CD@nF{@x}{cdps@#1}\ifx\CD@CH\empty\CD@f\CD@CH{cannot be used}\else\ifx
+\CD@CH\relax\CD@f\CD@CH{unknown}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB
+{PostScript translator `#1' #2}}\def\CD@PH{}\def\CD@PJ{\CD@fA\edef\CD@PH{%
+\noexpand\CD@KB{\@name\space ignored within maths}}}\def\diagramstyle{\CD@cJ
+\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let\diagramsstyle\diagramstyle\CD@tG\CD@sE
+\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE
+\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG
+\CD@EF\CD@DK\CD@CK\CD@tG\CD@rE\CD@JB\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG
+\CD@nE\CD@kA\CD@jA\CD@tG\CD@AF\CD@iG\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC
+{cds@1em}{\CellSize1\CD@zC}\CD@RC{cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2%
+em}{\CellSize2\CD@zC}\CD@RC{cds@2.5em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{%
+\CellSize3\CD@zC}\CD@RC{cds@3.5em}{\CellSize3.5\CD@zC}\CD@RC{cds@4em}{%
+\CellSize4\CD@zC}\CD@RC{cds@4.5em}{\CellSize4.5\CD@zC}\CD@RC{cds@5em}{%
+\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize6\CD@zC}\CD@RC{cds@7em}{\CellSize7%
+\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}\def\cds@abut{\MapsAbut\dimen1\z@
+\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag
+\CD@O\else\def\CD{\diagram[amstex]}%%ascii square brackets []
+\fi\CD@T\catcode`\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{\let
+\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre\cds@nobalance}%
+\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ\cds@balance}%
+\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE\CD@DC{.5%
+\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{cds@crab+}{%
+\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}\CD@RC{cds@crab%
+--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let\CD@QC}{3em}\CD@NJ
+}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def\cds@dpi{\CD@RJ{1%
+truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\CD@qK\def\cds@eqno{\let
+\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG\CD@fE\CD@J\CD@I\def
+\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE\CD@nA\CD@nA}\def\cds@gap
+{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{\wd3=}\MapShortFall} \def
+\cds@grid{\ifx\CD@GK\CD@qK\let\h@grid\relax\let\v@grid\relax\else\CD@nF{%
+h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx\h@grid\relax\CD@gB{%
+unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax\let\v@grid\relax
+\def\cds@gridx{\ifx\CD@GK\CD@qK\else\cds@grid\fi\let\CD@CH\h@grid\let\h@grid
+\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD\DiagramCellHeight}\def\cds@hcenter
+{\let\CD@hA\CD@aA}\let\cds@hcentre\cds@hcenter\def\cds@heads{\CD@BE{\let
+\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let
+\cds@height\cds@h\let\cds@hmiddle\cds@balance\def\cds@htriangleheight{\CD@BE
+\DiagramCellHeight\DiagramCellHeight\DiagramCellWidth1.73205%
+\DiagramCellHeight}\def\cds@htrianglewidth{\CD@BE\DiagramCellWidth
+\DiagramCellWidth\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE
+\CD@dE\CD@eE\def\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def
+\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}%
+\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def
+\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{%
+equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def
+\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def
+\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{%
+\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
+\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
+\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance
+\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def
+\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def
+\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@UO{\CD@oK\global\let\CD@n\empty}%
+\def\cds@UglyObsolete{\cds@UO\let\cds@PS\empty}\def\CD@rK#1{\CD@gB{option `#1%
+' renamed as `UglyObsolete'}}\def\cds@noPostScript{\CD@rK{noPostScript}}\def
+\cds@noPS{\CD@rK{noPostScript}}\def\cds@notextflow{\CD@RB}\def\cds@noTPIC{%
+\CD@CK}\def\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let
+\CD@hA\CD@iB}\def\cds@p{\CD@zD\PileSpacing}\let\cds@pilespacing\cds@p\def
+\cds@pixelsize{\CD@zD\CD@@I\CD@gI}\def\cds@portrait{\CD@jA}\def
+\cds@PostScript{\CD@nK\global\let\CD@n\empty\CD@BE\CD@DI\empty}\def\cds@PS{%
+\CD@nK\global\let\CD@n\empty}\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript
+option for better results}}\def\cds@repositionpullbacks{\let\make@pbk\CD@fH
+\let\CD@qH\CD@pH}\def\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{%
+\dimen5 }}\def\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG
+\CD@sB\let\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth
+\DiagramCellHeight}\def\cds@scriptlabels{\let\labelstyle\scriptstyle}\def
+\cds@shortfall{\CD@zD\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}%
+\def\cds@showfirstpass{\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}%
+\def\CD@gB##1{}}\let\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def
+\cds@snake{\CD@BE\CD@eJ\z@}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{%
+\CD@SB\CD@PJ}\def\cds@thick{\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2%
+\CD@LF}\CD@@J}\def\cds@thin{\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}%
+\def\cds@tight{\CD@WB}\let\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def
+\cds@uppershortfall{\ifPositiveGradient\cds@rightshortfall\else
+\cds@leftshortfall\fi}\def\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre
+\cds@vcenter\def\cds@vtriangleheight{\CD@BE\DiagramCellHeight
+\DiagramCellHeight\DiagramCellWidth.577035\DiagramCellHeight}\def
+\cds@vtrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth
+\DiagramCellHeight1.73205\DiagramCellWidth}\def\cds@vmiddle{\let\CD@dB\CD@eB}%
+\def\cds@w{\CD@zD\DiagramCellWidth}\let\cds@width\cds@w\def\diagram{\relax
+\protect\CD@bC}\def\enddiagram{\protect\CD@SG}\def\CD@bC{\CD@g\CD@uI
+\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global\CD@NB\z@\boxmaxdepth\maxdimen
+\everycr{}\CD@sK\everymath{}\everyhbox{}\ifx\pdfsyncstop\CD@qK\else
+\pdfsyncstop\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def
+\CD@ZC{\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let
+\CD@EH\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without
+PostScript}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{%
+\CD@nE\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0%
+\CD@pI\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\CD@qK
+\global\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=%
+\hbox to\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@
+\dp2\z@\wd2\z@\CD@hK\CD@tK{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1
+bturn}\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global
+\@ignorefalse\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else
+\CD@qE\CD@gA\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi
+\fi\fi\fi\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else
+\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}%
+\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1%
+\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2
+\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{%
+\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance
+\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
+\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
+\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
+\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
+\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def
+\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox
+2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\CD@qK\else\CD@k
+\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen
+0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA
+\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the
+\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box
+1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }%
+\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen
+\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen
+\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q
+\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par
+\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip
+\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
+\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign
+\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#%
+#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup
+\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i
+}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax
+\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax
+\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA
+\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
+\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat
+\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{%
+\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim
+\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance
+\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the
+\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@
+\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH
+\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0%
+\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2%
+\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{%
+\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@
+\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht
+3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen
+3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ
+\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2%
+\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid
+2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else
+\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen
+2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance
+\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3%
+\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6
+\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else
+\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern
+\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE
+\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else
+\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum
+\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V
+{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup
+\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5%
+\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5
+\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else
+\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower
+\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9%
+\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient
+\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8
+\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient
+\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8
+\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance
+\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6
+\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ
+\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK
+\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK
+\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise
+\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK
+\expandafter\CD@tK{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0 cm}%
+\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the
+\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ
+\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else
+\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH
+\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}%
+\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{%
+\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip
+\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA
+\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi
+\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA
+\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-%
+\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH
+:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-%
+\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG
+\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect
+\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop
+\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD
+\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC
+\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def
+\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##%
+\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}%
+\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC
+\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup
+\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC
+\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{%
+\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1%
+\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
+\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{%
+\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip
+\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox
+\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox
+\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def
+\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox
+\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in
+pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}%
+\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box
+1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7
+\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH
+\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH
+\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd
+\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox
+\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ
+{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox
+\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid
+3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3
+\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB
+\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd
+0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi
+\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi
+\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else
+\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH
+\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3
+\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern
+\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=%
+\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}%
+\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi
+\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty
+\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht
+\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp
+\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=%
+\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern
+\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF
+\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }%
+\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA
+\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum
+\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{%
+\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA
+\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{%
+\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi
+\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox
+\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0%
+\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB
+{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{%
+\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA
+\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:%
+rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=%
+\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty
+\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=%
+\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox
+0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA
+\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{%
+\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern
+\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2
+\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-%
+\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1%
+=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@
+\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of
+vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to%
+\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen
+1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to%
+\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen
+6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}%
+\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB
+\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG
+\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else
+\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists
+\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB
+=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance
+\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too
+many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{%
+\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1%
+\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum
+\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D%
+\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ
+\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ
+\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{%
+\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty
+\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip
+\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{%
+\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF
+\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance
+\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB
+\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum
+\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA
+\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox
+\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{%
+diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum
+\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB
+\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@
+\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi
+\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f%
+\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@
+\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB
+\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB
+\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null
+\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE
+\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA
+\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance
+\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year
+\multiply\count@12 \advance\count@\month\ifnum\count@>24158 \loop\iftrue
+\message{gone February 2013!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF
+\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA
+\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA
+\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}%
+\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax
+\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #%
+3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox
+\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA
+\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance
+\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance
+\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd
+\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1
+\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA
+\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4
+\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance
+\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0%
+\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB
+\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0%
+\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB
+\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB
+\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance
+\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def
+\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK
+\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF
+\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-%
+\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see
+manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA
+\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen
+0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1%
+\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
+\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
+\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V
+\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA
+\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA
+\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd
+\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA
+\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA
+\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox
+\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance
+\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA
+\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF
+\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround
+\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
+9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
+\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
+\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
+\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@
+\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000
+\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
+\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox
+\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def
+\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox
+\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH
+\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf
+\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else
+\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
+\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF
+\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat
+\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB
+\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{%
+prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox
+\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip
+\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp
+\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd
+\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH
+\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance
+\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox
+\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty
+\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip
+\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp
+\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{%
+\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH
+width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox
+\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA
+\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or
+\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG
+\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{%
+\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum
+\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip
+\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi
+\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile
+\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing
+horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi
+\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox
+0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1
+\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}%
+\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
+}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI
+\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF
+\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI
+\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=%
+\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC
+\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox
+\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht
+\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd
+\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB
+\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
+\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}%
+\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{%
+\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
+\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance
+\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or
+\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@'33 \else
+\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH
+\advance\count@\CD@LH\fi}\def\CD@fF{\count@'\ifcase\CD@LH55\or\ifcase\CD@TC66%
+\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase
+\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi
+\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient
+\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
+\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
+\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#%
+1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
+\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{%
+\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}%
+\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{%
+\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>%
+}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+%
+h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t%
+:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC
+\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-%
+t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF
+\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#%
+2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}%
+%% % .7em until 29.7.98
+\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98
+\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{%
+\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}%
+\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f%
+:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment
+\CD@CH%%
+\count@='}\def\lnchar{\CD@@K\CD@qF}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen
+#1 \setbox8=\box#1 \dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum
+\count@=0 \box8 \ifdim\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi
+\else\dimen3=\dimen5 \advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4%
+\dimen3 \CD@dG{\dimen4}\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6%
+\dimen1 \advance\dimen6-\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@
+>0 \kern-\dimen6 \advance\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1%
+}\else\CD@dF{#1}\fi}\def\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex
+\newdimen\objectwidth\objectwidth1em \def\CD@YD{\dimen6=\CD@aK
+\DiagramCellHeight\dimen7=\CD@WK\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum
+\CD@TC>0 \CD@aF\else\aftergroup\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{%
+\CD@YA{diagonal map is nearly vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map
+is nearly horizontal}\CD@NA}\CD@rG\CD@NA{Use an orthogonal map instead}\def
+\CD@aF{\CD@MJ\dimen3\dimen7\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-%
+\dimen7 \CD@MF\ifnum\CD@LH>\CD@TC\advance\dimen6-\dimen1\advance\dimen6-%
+\dimen5 \CD@iC{\dimen1}\CD@iC{\dimen5}\else\dimen0\dimen1\advance\dimen0%
+\dimen5\CD@dG{\dimen0}\advance\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance
+\dimen2-\dimen1 \dimen4.5\dimen7\advance\dimen4-\dimen5 \ifPositiveGradient
+\dimen0\dimen5 \advance\dimen1-\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK
+\DiagramCellWidth\setbox6=\llap{\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht
+2\unhbox7}\else\dimen0\dimen1 \advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7%
+=\llap{\unhbox7\kern.1\ht2}\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=%
+\vbox{\box6\kern.1\wd2}\setbox7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}%
+\advance\dimen0-\axisheight\advance\dimen0-\CD@bK\DiagramCellHeight\dimen5-%
+\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim
+\ht3>-\dp3\CD@TB\fi\fi\dimen3\dimen2 \dimen7\dimen2\advance\dimen7\dimen4
+\ifvoid3 \else\CD@tE\else\dimen8\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8%
+}\CD@X{\dimen8}{.5\wd3}\dimen9\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}%
+\CD@X{\dimen9}{.5\wd3}\ifPositiveGradient\advance\dimen2-\dimen9\advance
+\dimen4-\dimen8 \else\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi
+\advance\dimen3-.5\wd3 \fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2%
+\DiagramCellHeight\CD@tE\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0%
+\advance\dimen2\dp2 \else\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0%
+\advance\dimen2\dp2 \dimen4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0%
+\advance\dimen4\dp4 \dimen2\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to%
+\z@{\kern\dimen1 \ifvoid1 \else\ifPositiveGradient\advance\dimen0-\dp1 \lower
+\dimen0 \else\advance\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise
+\dimen2\rlap{\unhbox2}\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3%
+}\fi\kern.5\dimen7 \lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7
+\CD@tE\else\raise\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient
+\advance\dimen5-\ht5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi
+\llap{\unhbox5}\fi\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI
+\CD@rB\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def
+\SouthWest{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB
+\DiagonalChoice2 }\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA
+\ifPositiveGradient\else-\fi\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK
+\relax\hbox{\advance\CD@uA\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK
+\hbox{\box6 \kern\CD@DC\kern\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA
+\penalty\CD@vA}\penalty\CD@uA\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax
+\vadjust{\hbox@maths{#1}\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{%
+\ifcase\CD@GB\or\or\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@
+\lastbox\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@
+\lastbox\or\CD@TG\else\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi
+\setbox\z@\hbox{\kern\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-%
+\CD@NB\penalty\CD@uA\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@
+\global\CD@yA\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA
+-\CD@yA\CD@vA\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA
+\lastpenalty\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-%
+\lastpenalty\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern
+\unkern\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox
+\unpenalty\CD@eJ\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7%
+\CD@tB\advance\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne
+\let\mv\empty\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>%
+\CD@NB\dimen6\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK
+\setbox1\null\ht1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA
+\CD@LH\CD@vA\CD@TC\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance
+\dimen2\CD@eJ\CD@eG{\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0%
+\ifPositiveGradient\else-\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight
+\ht2\dimen0 \dimen0\CD@DC\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen
+0\ifPositiveGradient-\fi\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0
+\setbox4\null\dimen0 .6\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC
+\CD@dG{\dimen0}\wd4\dimen0 \dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance
+\dimen1\ht2 \CD@CC6+-\raise\dimen1\rlap{\ifPositiveGradient\advance\dimen0-%
+\wd6\advance\dimen0-\wd4 \else\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi
+\dimen0\wd2 \ifvoid7\else\dimen1\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower
+\dimen1\rlap{\ifPositiveGradient\advance\dimen0\wd4 \else\advance\dimen0-\wd7%
+\advance\dimen0-\wd4 \fi\kern\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@
+\CD@bH{\z@}{\box\z@}{\z@}{\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim
+\dimen4>.25\dimen7\dimen4=.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4
+\advance\dimen4.6\CD@zC\fi\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}%
+\advance\dimen4-\dimen5 \dimen5\dimen4\CD@eG{\dimen5}\advance\dimen0%
+\ifPositiveGradient#2\else#3\fi\dimen5 \CD@dG{\dimen4}\advance\dimen1\dimen4 }
+\def\CD@eD#1{\expandafter\CD@IK{#1}}\CD@ZA\CD@EK{output is PostScript
+dependent}\def\CD@SC{\CD@IK{/bturn {gsave currentpoint currentpoint translate
+4 2 roll neg exch atan rotate neg exch neg exch translate } def /eturn {%
+currentpoint grestore moveto} def}}\def\CD@gK{\relax\CD@hK\CD@tK{Q}\else
+\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax\multiply\count@7\advance
+\count@16577\divide\count@33154 }\def\CD@fD#1{\expandafter\special{#1}} \def
+\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{\dimen0}\CD@OJ{\dimen0}\setbox
+0=\null\ifPositiveGradient\count@-\count@\ht0\dimen0 \else\dp0\dimen0 \fi\box
+0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#%
+1}\CD@fD{pa \the\count@\space\the\CD@uA}\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{%
+\CD@KJ\begingroup\ifdim\dimen7<\dimen6 \dimen2=\dimen6 \dimen6=\dimen7 \dimen
+7=\dimen2 \count@\CD@LH\CD@LH\CD@TC\CD@TC\count@\else\dimen2=\dimen7 \fi
+\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA\dimen0 \else\global\CD@QA\dimen7 \fi
+\endgroup\dimen2\CD@QA\CD@iK\CD@lK{\ifPositiveGradient\else-\fi\dimen6}\CD@iK
+\CD@kK{\ifPositiveGradient-\fi\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ
+\ifdim\dimen7>1.73\dimen6 \divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.%
+353553\dimen2 \advance\CD@LH-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG
+4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45%
+pt \divide\count@\dimen2 \ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd
+\count@\advance\count@1\CD@@A\else\CD@y\fi\advance\dimen0-\count@\dimen2
+\CD@gE\multiply\dimen0\m@ne\fi\ifnum\count@<0 \multiply\count@-7 \fi\dimen3%
+\dimen1 \dimen6\dimen0 \dimen7 3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}%
+\fi\CD@KJ\dimen2\dimen3\CD@dG{\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2
+\CD@ZG1\CD@ZG{0.3}\dimen1\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{%
+1.5}\CD@ZG{0.3}\divide\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@
+\dimen2\dimen1\dimen1\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@
+\multiply\dimen0\m@ne\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global
+\CD@RA\dimen1\endgroup\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG
+\CD@OC\def\CD@KJ{\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen
+6\dimen6\dimen9\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0%
+\z@\dimen8=\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA
+\dimen\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@
+\dimen6 \divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4
+\advance\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim
+\dimen6>\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter
+\expandafter\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen
+9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8%
+\dimen0 \ifdim\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance
+\dimen9\count@\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9
+\advance\dimen2\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }%
+\def\CD@ZG#1{\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1%
+\CD@TC\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def
+\CD@iC#1{\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH
+\multiply\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def
+\CD@iK#1#2{\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply
+\dimen2\tw@\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@
+\dimen2\relax\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup
+\let#1\CD@fK}{\catcode`p=12 \catcode`0=12 \catcode`.=12 \catcode`t=12 \gdef
+\CD@jK#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\CD@qK\CD@tJ\let\CD@GH
+\relax\else\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let
+\CD@CD\empty\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax
+\let\CD@zF\relax\message{! Why not upgrade to TeX version 3? (available since
+1990)}\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred%
+}\def\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999%
+}\def\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum
+\CD@h<\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else
+\edef\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2%
+\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter
+\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum
+\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-%
+\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the
+\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi
+\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}%
+\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{%
+Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{%
+Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{%
+\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}%
+\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{%
+\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB
+\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}%
+\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not
+available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA
+#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax
+\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA
+}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else
+\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@
+\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the
+\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH
+\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message
+above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before
+resuming the text, in\CD@uG which case some garbage may be added to the
+diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line
+in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are
+misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already
+closed too many brace pairs or environments; an \CD@HD\CD@uG command was (%
+over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}%
+\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD
+\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}%
+\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand
+\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}%
+\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}%
+\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing
+group}}\ifx\DeclareOption\CD@qK\else\ifx\DeclareOption\@notprerr\else
+\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E
+\CurrentOption,}\fi\fi
+%%======================================================================%
+%% %
+%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS %
+%% %
+%%======================================================================%
+
+%% NOTE: The recommended way of defining arrow commands is now
+%% \newarrow{Name}{tail}{filler}{middle}{filler}{head}
+%% which defines \rName, \lName, \dName and \uName using arrow parts which
+%% have themselves previously been defined using the commands
+%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.
+
+%% The components \rhvee etc have been retained for the time being, as an
+%% intermediate stage and to continue to support the old \HorizontalMap and
+%% \VerticalMap commands, but you should not rely on the continued existence
+%% of these macros.
+
+%% The various components usually need some correction
+%% - longitudinally, ie to prevent gaps and overprints with the shaft,
+%% - transversally, ie to prevent "steps" in the junction with the shaft.
+%% The former can be done safely ad hoc, eg with \mkern1mu.
+%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
+%% \shifthook and \raisehook, which include pixel corrections.
+
+%% Please note that these and the other auxillary macros which follow are
+%% interim. When it becomes clear exactly what kinds of adjustments are
+%% needed for characters, this job will be done by a suitable extension
+%% to the language of \newarrowhead, etc. If you have any other ideas for
+%% transformations of general use please tell me.
+
+%% By all means experiment with other characters for arrowheads, but
+%% please, in your own interests, do not rely on macros like \rhvee,
+%% send me a copy of your definitions for distribution to other users
+%% in this file, and keep track of where your efforts get copied so
+%% that they can be replaced with the "official" version when it is
+%% incorporated.
+
+%% ***** DONT use macros with mangled names like \Cd@gH. *****
+
+\catcode`\$=3 %% make sure that $ means maths-shift
+\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt
+
+%% print #1 in \scriptstyle, adjusting for the maths axis height
+\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
+\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
+\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise
+\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-%
+\ss@axisheight\raise\dimen0\hbox{#1}}
+
+%% Some of the characters would look better in bold since they're
+%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
+%% do this, defining this to do nothing if it doesn't exist.
+%% With the old LaTeX font selection at other than 10pt you may still
+%% get nothing happenning. Also, PK fonts may be missing.
+%% If you have problems, DONT use boldhook or boldlittlevee.
+\ifx\boldmath\CD@qK%%
+\let\boldscriptaxis\scriptaxis%%
+\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
+\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
+\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
+\fi
+
+%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
+\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
+%% the character to use
+\dimen0\ss@axisheight%% \scriptscriptstyle axis height
+\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
+\dimen2\ht3\advance\dimen2-\dimen0%
+%% height of char above axis (half spread)
+\advance\dimen2-0.021em\advance\dimen1 #2\dimen2%
+%% shift = axis_difference +/- half_spread
+\raise\dimen1\box3}}%% print the character
+%% Mark Dawson suggested using the width
+\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1%
+\divide\dimen0 12\CD@zH{\dimen0}%% "u"
+\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}%
+\kern#2\dimen1\box1}%% print
+
+%% use the extension font (cmex) for double vertical arrows
+\def\@cmex{\mathchar"03}%%ascii double quote
+
+%% ************* P U L L B A C K S ************
+
+%% These will probably be replaced by something less ad hoc
+%% in a future version.
+
+\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
+\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0%
+.35em}
+
+%% This is a hack for my book ``Practical Foundations of Mathematics''
+%% and WILL NOT BE SUPPORTED --- DO NOT USE IT!
+\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{}
+
+\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.%
+95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}}
+
+\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em
+\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}}
+
+\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.%
+95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}}
+
+\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em
+\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}}
+
+%% Freyd & Scedrov puncture symbol for non-commuting polygon
+\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
+0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
+\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
+depth-.47\ht0 width.35\ht0 }}
+
+%% 2-cells: (24.11.95)
+%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
+\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%%
+\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%%
+\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%%
+\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%%
+\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%%
+\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%%
+\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%%
+\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}}
+
+%%======================================================================%
+%% %
+%% (23) BITS OF ARROWS %
+%% %
+%%======================================================================%
+
+%% ********** H E A D S ***********
+
+%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
+%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}
+
+%% vee head
+\def\rhvee{\mkern-10mu\greaterthan}%%
+\def\lhvee{\lessthan\mkern-10mu}%%
+\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
+\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
+\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee
+
+%% little vee head
+\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
+\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
+\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\ifx\boldmath\CD@qK%%
+\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\else%%
+\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
+\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
+\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
+\lhvee}\dhblvee\uhblvee%%
+\fi
+
+%% curly vee head (uses AMS symbols fonts)
+\def\rhcvee{\mkern-10mu\succ}%%
+\def\lhcvee{\prec\mkern-10mu}%%
+\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
+\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
+\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee
+
+%% double vee head %% will probably be withdrawn later
+\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
+\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
+\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
+\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
+\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee
+
+%% open and closed triangles (uses AMS symbols fonts)
+\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
+\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
+\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
+\def\lhtriangle{\triangleleft\mkern.8mu}%%
+\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
+\kern-.25ex}}%%
+%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
+%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
+%% and also for compatibility with upward arrow.
+\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
+\kern-.1ex}}%% 15.1.93 from -.25ex
+\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
+%% AMS
+\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
+%% AMS
+\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangledown$}}}%% AMS
+\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangle$}}}%% AMS
+\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
+\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
+\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
+\dhlblack\uhlblack
+
+%% LaTeX arrowheads
+\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
+\axisheight\box0\kern.1\dimen0}}%%
+\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
+\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
+\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla
+
+%% double LaTeX arrowheads %% will probably be withdrawn later
+\def\lhlala{\lhla\kern.3em\lhla}%%
+\def\rhlala{\rhla\kern.3em\rhla}%%
+\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
+\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
+\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala
+
+%% circles % \rho is a Greek letter!
+\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
+\newarrowhead{o}\hho\hho\circ\circ%%
+\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
+\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
+\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
+\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++
+
+%% empty head {} is also available
+
+%% Y from stmaryrd (vertical ones still need large adjustment)
+\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Ydown\Yup
+
+%% ********** H E A D S with S H A F T S ***********
+
+%% little arrow with shaft
+\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow
+
+%% arrow with double shaft
+%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
+\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
+\upharpoonleft
+
+%% little double-headed arrow with shaft (uses AMS symbols fonts)
+\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
+\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
+\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
+\twoheaduparrow
+
+%% ********** T A I L S ***********
+
+%% vee tail
+\def\rtvee{\greaterthan}%%
+\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
+\def\dtvee{\vee}%%
+\def\utvee{\wedge}%%
+\newarrowtail{vee}\greaterthan\ltvee\vee\wedge
+
+%% little vee tail
+\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\CD@qK
+\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
+boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
+\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi
+
+%% curly vee tail (uses AMS symbols fonts)
+\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge
+
+%% open and closed triangle tails (uses AMS symbols fonts)
+\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
+\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
+\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
+\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
+\dhlblack\uhlblack
+
+%% LaTeX tails
+\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.2\dimen0}}%%
+\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
+\kern-.1\dimen0}}%% 15.1.93 from -.6
+\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
+\kern-.6\dimen0}}%%
+\newarrowtail{LaTeX}\rtla\ltla\dtla\utla
+
+%% double vee tail %% will probably be withdrawn later
+\def\rtvvee{\gg\mkern-3mu}%%
+\def\ltvvee{\mkern-3mu\ll}%%
+\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
+\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
+\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee
+
+%% double LaTeX tails %% will probably be withdrawn later
+\def\ltlala{\ltla\kern.3em\ltla}%%
+\def\rtlala{\rtla\kern.3em\rtla}%%
+\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
+\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
+\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala
+
+%% bar (as in \mapsto)
+\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
+\let\dtbar\utbar%%
+\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
+%%
+\let\ltbar\rtbar%%
+\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
+\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)
+
+%% hooks (as in \into): choice of after/above and before/below
+
+\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
+\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
+\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
+\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%
+
+\def\dthooka{\shifthook{}+\cap}%%
+\def\dthookb{\shifthook{}-\cap}%%
+\def\uthooka{\shifthook{}+\cup}%%
+\def\uthookb{\shifthook{}-\cup}%%
+
+\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
+\rthookb\lthookb\dthookb\uthookb
+
+\ifx\boldmath\CD@qK\newarrowtail{boldhooka}\rthooka\lthooka\dthooka\uthooka
+\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail{%
+boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook
+\boldmath+\subset\mkern-1mu}%%
+\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
+\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
+\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
+\def\dtbhooka{\shifthook\boldmath+\cap}%%
+\def\dtbhookb{\shifthook\boldmath-\cap}%%
+\def\utbhooka{\shifthook\boldmath+\cup}%%
+\def\utbhookb{\shifthook\boldmath-\cup}%%
+\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
+boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
+\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi
+
+%% square-ended hooks (used for closed subsets in ``lifting and gluing'')
+\def\dtsqhooka{\shifthook{}+\sqcap}%%
+\def\dtsqhookb{\shifthook{}-\sqcap}%%
+\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%%
+\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%%
+\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%%
+\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%%
+\def\utsqhooka{\shifthook{}+\sqcup}%%
+\def\utsqhookb{\shifthook{}-\sqcup}%%
+\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka
+
+%% the following seem the better choices at 10pt & 300dpi
+\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
+\lthookb\dthooka\uthooka
+
+%% circles
+\newarrowtail{o}\hho\hho\circ\circ%%
+\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++
+
+%% empty tail {} is also available
+
+%% Y from stmaryrd (vertical ones still need adjustment)
+\newarrowtail{Y}\Yright\Yleft\Ydown\Yup
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
+\downharpoonright
+
+%% ********** F I L L E R S ***********
+
+%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.
+
+%% dot {.}, single rule {-} and empty {} fillers are also available
+
+%% double and triple lines
+%%\newarrowfiller{=}==\Vert\Vert%%
+\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
+\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
+\newarrowfiller{3}\equiv\equiv\vfthree\vfthree
+
+%% dashed line
+\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
+\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%%
+\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%%
+\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
+\def\vfdash{\vfdashstrut\vfthedash}%%
+\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash
+
+%% ************* M I D D L E S ************
+
+%% plus
+\newarrowmiddle+++++
+
+%% ************* D I A G O N A L S ************
+
+%% simple arrow heads
+%%\def\nwhTO{\nwarrow\mkern-1mu}%%
+%%\def\nehTO{\mkern-.1mu\nearrow}%%
+%%\def\sehTO{\searrow\mkern-.02mu}%%
+%%\def\swhTO{\mkern-.8mu\swarrow}%%
+
+%%======================================================================%
+%% %
+%% (24) ARROW COMMANDS %
+%% %
+%%======================================================================%
+
+%% change to \iftrue to get mixed heads
+\iffalse%%
+\newarrow{To}----{vee}%%
+\newarrow{Arr}----{LaTeX}%%
+\newarrow{Dotsto}....{vee}%%
+\newarrow{Dotsarr}....{LaTeX}%%
+\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
+\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
+\newarrow{Mapsto}{mapsto}---{vee}%%
+\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
+\newarrow{IntoA}{hooka}---{vee}%%
+\newarrow{IntoB}{hookb}---{vee}%%
+\newarrow{Embed}{vee}---{vee}%%
+\newarrow{Emarr}{LaTeX}---{LaTeX}%%
+\newarrow{Onto}----{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\newarrow{Dotsonto}....{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\else%%
+\newarrow{To}---->%%
+\newarrow{Arr}---->%%
+\newarrow{Dotsto}....>%%
+\newarrow{Dotsarr}....>%%
+\newarrow{Dashto}{}{dash}{}{dash}>%%
+\newarrow{Dasharr}{}{dash}{}{dash}>%%
+\newarrow{Mapsto}{mapsto}--->%%
+\newarrow{Mapsarr}{mapsto}--->%%
+\newarrow{IntoA}{hooka}--->%%
+\newarrow{IntoB}{hookb}--->%%
+\newarrow{Embed}>--->%%
+\newarrow{Emarr}>--->%%
+\newarrow{Onto}----{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\newarrow{Dotsonto}....{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\fi%%
+
+\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
+\newarrow{Project}----{triangle}%%
+\newarrow{Pto}----{harpoon}%% partial function
+\newarrow{Relto}{harpoon}---{harpoon}%% binary relation
+
+\newarrow{Eq}=====%%
+\newarrow{Line}-----%%
+\newarrow{Dots}.....%%
+\newarrow{Dashes}{}{dash}{}{dash}{}%%
+
+%% square hooked arrow (used in my ``gluing and lifting'' paper)
+\newarrow{SquareInto}{sqhook}--->
+
+%% braces and parentheses
+%% \newarrow gives inappropriate directions, so we change the names
+%% the vertical filler is too far to the right; horizontal too high
+%% the vertical middles are too low with midvshaft
+%% maybe we'll add square brackets and the integral sign one day
+\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
+\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
+\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{%
+\hbox@maths{\@cmex3D\mkern-2mu}}}%% right
+{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left
+\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
+\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
+\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets []
+\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets []
+\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets []
+\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets []
+\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets []
+\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets []
+\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets []
+\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets []
+
+%% synonyms for reverse compatibility
+
+\let\uFrom\uTo%%
+\let\lFrom\lTo%%
+\let\uDotsfrom\uDotsto%%
+\let\lDotsfrom\lDotsto%%
+\let\uDashfrom\uDashto%%
+\let\lDashfrom\lDashto%%
+\let\uImpliedby\uImplies%%
+\let\lImpliedby\lImplies%%
+\let\uMapsfrom\uMapsto%%
+\let\lMapsfrom\lMapsto%%
+\let\lOnfrom\lOnto%%
+\let\uOnfrom\uOnto%%
+\let\lPfrom\lPto%%
+\let\uPfrom\uPto%%
+
+\let\uInfromA\uIntoA%%
+\let\uInfromB\uIntoB%%
+\let\lInfromA\lIntoA%%
+\let\lInfromB\lIntoB%%
+\let\rInto\rIntoA%%
+\let\lInto\lIntoA%%
+\let\dInto\dIntoB%%
+\let\uInto\uIntoA%%
+\let\ruInto\ruIntoA%%
+\let\luInto\luIntoA%%
+\let\rdInto\rdIntoA%%
+\let\ldInto\ldIntoA%%
+%%
+\let\hEq\rEq%%
+\let\vEq\uEq%%
+\let\hLine\rLine%%
+\let\vLine\uLine%%
+\let\hDots\rDots%%
+\let\vDots\uDots%%
+\let\hDashes\rDashes%%
+\let\vDashes\uDashes%%
+
+%%=========================================================================%
+%% The following are included for reverse compatibility only.
+%%=========================================================================%
+\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
+\ruTo(2,3)}%%ascii
+\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
+\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
+\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
+\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
+\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
+\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
+\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
+\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
+\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
+\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
+\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii
+
+\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
+{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
+\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
+\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
+\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
+\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
+\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
+\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
+\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
+\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
+\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
+\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
+\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii
+
+\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
+(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
+\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
+\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
+\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
+\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
+\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
+\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
+\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
+\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
+\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
+\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
+\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii
+
+\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
+\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
+\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
+\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
+\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
+\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
+\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
+\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
+\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
+\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
+\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
+\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
+\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii
+
+\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
+\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
+\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
+\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
+\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
+\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
+\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
+\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
+\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
+\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
+\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
+\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
+\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii
+
+\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
+(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
+\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
+\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
+\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
+\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
+\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
+\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
+\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
+\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
+\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
+\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
+\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii
+
+\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
+\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
+\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
+\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
+\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
+\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
+\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
+\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
+\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
+\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
+\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
+\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
+\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii
+
+%%======================================================================%
+%% %
+%% (25) MISCELLANEOUS %
+%% %
+%%======================================================================%
+
+\def\labelstyle{%%
+\ifincommdiag%%
+\textstyle%%
+\else%%
+\scriptstyle%%
+\fi}%%
+\let\objectstyle\displaystyle
+
+\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
+17557,1.17557,1.902113,1.902113}
+
+\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
+.75,0.75,1.1,1.1,0.9,0.9}
+
+\diagramstyle[%%ascii open square bracket
+dpi=300,%% office laserwriters are usually 300 dots per inch
+vmiddle,nobalance,%% vertical and horizontal positioning
+loose,%% allow rows and columns to stretch
+thin,%% line10 arrows; default rule thickness (TeXbook p447)
+pilespacing=10pt,%
+%% parallel vertical separation (horizontals: half this)
+shortfall=4pt,%% distance between arrowheads and their targets
+%% The following are defaulted on entry to the diagram itself.
+%% l>=2em minimum length of horizontal arrow shafts in text
+%% l>=1em ditto in diagrams
+%% size=3em cell size
+%% heads=LaTeX arrowheads
+]%%ascii close square bracket
+
+%% process options to LaTeX2e's \usepackage[options]{diagrams}
+\ifx\ProcessOptions\CD@qK\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi\fi
+
+%%============================== THE END ====================================
+\CD@vE\CD@hK\message{| running in pdf mode -- diagonal arrows will work
+automatically |}\else\message{| >>>>>>>> POSTSCRIPT MODE (DVIPS) IS NOW THE
+DEFAULT <<<<<<<<<<<<|}\message{|(DVI mode has not been supported since 1992
+and produces inferior|}\message{|results which are completely unsuitable for
+publication. However,|}\message{|if you really still need it, you can still
+get it by loading the |}\message{|package using ``\string\usepackage[%
+UglyObsolete]{diagrams}'' instead. ) |}\fi\else\message{| >>>>>>>> USING UGLY
+OBSOLETE DVI CODE - PLEASE STOP <<<<<<<<<<<<|}\message{|(DVI mode has not been
+supported since 1992 and produces inferior|}\message{|results which are
+completely unsuitable for publication - Please |}\message{|use the PostScript
+or PDF mode instead, for much better results.)|}\fi\cdrestoreat
+%% restore old category code for @ etc
+\message{===================================================================}%
+%% This is the end of Paul Taylor's commutative diagrams package.
diff --git a/macros/generic/diagrams/taylor/diagrams.sty b/macros/generic/diagrams/taylor/diagrams.sty
new file mode 120000
index 0000000000..900cb89f4b
--- /dev/null
+++ b/macros/generic/diagrams/taylor/diagrams.sty
@@ -0,0 +1 @@
+diagrams.tex \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/diagrams.tex b/macros/generic/diagrams/taylor/diagrams.tex
new file mode 120000
index 0000000000..a18d216e51
--- /dev/null
+++ b/macros/generic/diagrams/taylor/diagrams.tex
@@ -0,0 +1 @@
+V3,93.tex \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/index.html b/macros/generic/diagrams/taylor/index.html
new file mode 100644
index 0000000000..ae66144ea2
--- /dev/null
+++ b/macros/generic/diagrams/taylor/index.html
@@ -0,0 +1,599 @@
+
+
+
+
+
+
+
+
+<title> Commutative Diagrams in TeX</title>
+
+<h1 align="center">Commutative Diagrams in TeX </h1>
+
+<h3 align="center">Paul Taylor </h3>
+
+<h3 align="center">since 1986 </h3>
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+ This is a macro package for drawing so-called "commutative" diagrams
+in category theory and related subjects.
+
+<div class="p"><!----></div>
+
+<h2>The macros and the manual</h2>
+
+<div class="p"><!----></div>
+Unlike many other packages there is no "installation procedure" -
+you just copy <a href="diagrams.sty"><b>the macros themselves</b></a>
+to your <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;macros directory.
+
+<div class="p"><!----></div>
+The <b>manual</b> is available in several formats:
+<a href="manual.tex">LaTeX source</a>,
+<a href="manual.pdf">PDF</a>,
+<a href="manual.dvi">DVI</a>,
+<a href="manual.ps.gz">600dpi A4 PostScript</a> and
+<a href="booklet.ps.gz">600dpi A5 PS booklet</a>.
+The "booklet" form requires a two-sided printer with A4 paper;
+if you don't have such a thing, don't bother taking the file.
+
+<div class="p"><!----></div>
+If you have not already done so, please register as a user by sending
+a message to <b>pt @ cs.man.ac.uk</b>
+with the words "commutative diagrams" in the subject line.
+
+<div class="p"><!----></div>
+I have also written some macros for <a href="../proofs/index.html">proofs</a>
+and <a href="../tex/index.html">other things</a>.
+
+<div class="p"><!----></div>
+
+<h2>Diagonal arrows, PostScript and PDF</h2>
+
+<div class="p"><!----></div>
+<a href="http://en.wikipedia.org/wiki/TeX"><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span></a> itself
+and its basic output format
+(<a href="http://en.wikipedia.org/wiki/DVI_(file_format)">DVI</a>) were
+designed by Donald Knuth to place letters and symbols from a variety
+of typefaces on an orthogonal grid, an idea that goes back to
+Gutenberg's original "movable type" printing press. This means that
+there is no natural way of drawing diagonal lines or rotating text.
+
+<div class="p"><!----></div>
+Though DVI has the merit of simplicity, most complex documents
+nowadays in both the open-source and commercial worlds are distributed
+in Adobe's PostScript or PDF formats.
+In particular, the commonest way of printing (the DVI output from) <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;documents is to use Tomas Rokicki's program
+<a href="http://www.radicaleye.com"><b>dvips</b></a>.
+
+<div class="p"><!----></div>
+PostScript and PDF have a much more general coordinate system than
+<span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;has, and it is very easy to rotate blocks of text.
+The diagrams package was designed in 1992 to take advantage of this
+feature of PostScript and (from 2002) PDF. It was always intended to
+be used in this way, although only in 2004 was the default changed to
+use this.
+
+<div class="p"><!----></div>
+Unfortunately, because of the inappropriately set optional behaviour,
+many users were not enjoying any of the benefits of the package.
+They were instead using the obsolete pre-1992 code (see below);
+this generated <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>-style arrows, that had incompatible arrowheads
+and didn't meet the objects to which they were supposed to point.
+
+<div class="p"><!----></div>
+<br />There are other graphical packages, including several that are also
+used to draw categorical diagrams, that draw diagonal lines in other
+ways, some of which are understood by xdvi. Like <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s
+<tt>picture</tt> environment, they do this by juxtaposing many
+characters (such as diagonal line-segments or dots) from special fonts.
+These fonts need to be distributed and installed along with the
+macro packages themselves.
+
+<div class="p"><!----></div>
+My diagrams package, on the other hand, needs no special fonts, and
+there is just the macro package itself to install. It achieves the
+same generality of diagonal arrows as it has horizontal ones by
+taking advantage of the method that most people use to print their
+documents.
+This design decision was taken following
+<a href="msg1992.html">consultation</a> with users,
+and I have always remained convinced that it was the correct one.
+
+<div class="p"><!----></div>
+The method was adapted to
+<a href="http://www.tug.org/applications/pdftex">pdftex</a>.
+If xdvi or other programs implemented extensions to DVI to rotate boxes,
+it could be used for them too.
+
+<div class="p"><!----></div>
+
+<h2>DVI previewers</h2>
+
+<div class="p"><!----></div>
+DVI previewers such as
+<a href="http://math.berkeley.edu/~vojta/xdvi.html">xdvi</a> and
+<a href="http://math.ndsu.nodak.edu/resources/tex/bibliography/yap/yap.html">YAP</a>
+do not understand the fragments of PostScript that are used to rotate
+the arrows, so what should be diagonal arrows appear horizontal
+instead. This behaviour is automatically corrected when you use
+dvips to print the document.
+
+<div class="p"><!----></div>
+If, for some reason, you need to use xdvi or yap to display documents
+containing diagonals, you can still make use of the obsolete code. Use
+the command
+
+<center>
+ <tt><tt>\usepackage&nbsp;</tt>[UglyObsolete,tight,heads=LaTeX] {diagrams}</tt>
+</center>
+to load the diagrams package.
+
+<div class="p"><!----></div>
+<br /><b>Please do not use the obsolete code for publication.</b>
+
+<div class="p"><!----></div>
+<br />Previous generations understood that you had to understand what
+tools did and how they worked. Indeed, there was a saying that
+"<b>bad workmen blame their tools</b>".
+In the computer age, maybe even more so than in the pre-scientific one,
+people expect things to "just work", <em>i.e</em>.&nbsp;by magic,
+without understanding anything.
+
+<div class="p"><!----></div>
+The pre-1992 pure DVI code in the diagrams package was a useful tool
+in its day, and I still try to make most of my diagrams work with it.
+However, if you wish to make extensive use of it, you too will have to
+understand how it works, and make the manual adjustments that are
+necessary to make up for the lack of magical programming behind it.
+
+<div class="p"><!----></div>
+Firstly, since pure DVI cannot rotate characters, only the standard <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;arrowheads are available for diagonals, so you should only use the
+<b>heads=LaTeX</b> option, and not (for example) <b>heads=vee</b>.
+
+<div class="p"><!----></div>
+Second, since it uses <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s diagonal line and arrow characters,
+the only slopes that are allowed are those with numerator and
+denominator at most&nbsp;4. However, since the package rounds slopes to
+simple rationals anyway (even in the "PostScript" code), this is
+not usually a problem in small diagrams.
+
+<div class="p"><!----></div>
+<br />But there is a <b>more serious problem</b> than this.
+
+<div class="p"><!----></div>
+The package makes two "passes" when constructing each diagram:
+one in which it constructs a "matrix" from the data that you type,
+and a second in which it takes this matrix apart and stretches
+each of the arrows to meet its endpoints.
+
+<div class="p"><!----></div>
+The obsolete "pure DVI" code constructs diagonal lines entirely in
+the first pass and <b>does not stretch them</b> in the second pass.
+It just makes a guess at the appropriate length, based on the
+<b>width</b> and <b>height</b> options for the diagram.
+
+<div class="p"><!----></div>
+<br /><b>You should always choose the appropriate width and height yourself.</b>
+
+<div class="p"><!----></div>
+<br />By default, the rows and columns of the diagram are <b>loose</b> -
+they stretch in the same way as any other matrix or table, and
+the "PostScript" code corrects for this.
+This default was chosen to make the package "just work",
+but <b>diagrams look better if they are of a uniform regular size</b>.
+
+<div class="p"><!----></div>
+Since the obsolete pure DVI code does not make the necessary correction
+in the second pass, you have to make sure that its first guess is correct,
+by setting the width and height yourself, and making the diagram
+<b>tight</b>. When you set the <b>tight</b> option, you will
+find at first that the object labels sometimes overprint. The package
+generates error messages to tell you where this happens,
+and makes a suggestion for the appropriate <b>size</b>
+(common height and width), although this is usually too big.
+
+<div class="p"><!----></div>
+Sometimes you will also need to adjust the <b>shortfall</b>
+of any arrows that point at large object labels,
+<em>i.e</em>.&nbsp;the distance between the end of the arrow and the object.
+
+<div class="p"><!----></div>
+<br />Finally, you may ask why I don't "fix" this code. Indeed I have looked
+into doing so several times. The answer is quite simply that the
+small benefit that would accrue from rewriting it does not justify the
+labour that would be needed.
+Not only is it much simpler to rotate horizontal arrows,
+but the the results are also far superior.
+
+<div class="p"><!----></div>
+
+<h2>Arrowheads used in my book</h2>
+
+<div class="p"><!----></div>
+You will see that the diagrams in my book
+<a href="../Practical-Foundations/index.html"><i>Practical Foundations of Mathematics</i></a>
+have arrowheads compatible with those of <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s ordinary <tt>\rightarrow</tt>.
+This was done by modifying the MetaFont source of <tt>\rightarrow</tt>
+to reduce its shaft to nothing, ie to make it just an arrowhead.
+
+<div class="p"><!----></div>
+I regret that I will <em>not</em> be releasing this MetaFont code, or PK
+files derived from it, because I am not prepared to undertake the
+support work that would be necessary afterwards.
+(Not even if you "promise to keep it to yourself",
+as you will inevitably release DVI files into the world containing
+references to these characters, obliging me to provide PK files to
+your readers, and explain to them why they keep getting checksum errors
+from dvips.)
+
+<div class="p"><!----></div>
+However, if you are intending to create a new symbols font yourself
+(to follow the "St. Mary Road" fonts),
+<em>and undertake the necessary support work</em>,
+I will be very pleased to give you the MetaFont source for these arrowheads
+and the other new symbols that are introduced in the book.
+I now have these in a form that's compatible with teTeX.
+
+<div class="p"><!----></div>
+
+<h2>Features introduced since September 1992</h2>
+
+<div class="p"><!----></div>
+See also the top of the source file for bug fixes and adjustments
+to the positioning of things.
+
+<div class="p"><!----></div>
+
+<h3>3.91 Released 1 September 2006</h3>
+
+<div class="p"><!----></div>
+
+<h3>3.90 Released 11 April 2004</h3>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+PostScript mode made default.
+
+<div class="p"><!----></div>
+
+<h3>3.89 Released 7 July 2002</h3>
+
+<div class="p"><!----></div>
+Added support for pdftex, which is recognised automatically.
+
+<div class="p"><!----></div>
+
+<h3>3.88 Released 1 September 2000</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> Square hooks made available as arrowtails:
+
+<pre>
+&nbsp;&nbsp;&nbsp;\newarrow{SquareInto}{sqhook}---&#62;
+&nbsp;&nbsp;&nbsp;\begin{diagram}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&amp;&nbsp;\rSquareInto&nbsp;B
+&nbsp;&nbsp;&nbsp;\end{diagram}
+
+</pre>
+
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.87 Released 1 September 1999</h3>
+
+<div class="p"><!----></div>
+This version was used for the absolutely final 1200dpi PostScript copy
+of the book, as it was handed over to CUP in December 1998.
+
+<div class="p"><!----></div>
+The only change was a 0.2pt fudge to the positioning of the components
+of arrows. Previously a lot of tweaking had been done in this department.
+
+<div class="p"><!----></div>
+
+<h3>3.86 Released 1 September 1998</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> New options <b>hug</b> and <b>nohug</b> in PostScript mode:
+
+<pre>
+&nbsp;&nbsp;&nbsp;\diagramstyle[PS,nohug]
+
+</pre>
+ uses PostScript for the arrows without rotating the labels, but the
+ way of calculating the actual position of these horizontal labels on
+ will remain subject to alteration for some period of time - please
+ send me examples if you feel that adjustment is needed.
+<div class="p"><!----></div>
+</li>
+
+<li> <b>midvshaft</b> and <b>snake</b> for vertical arrows
+<div class="p"><!----></div>
+</li>
+
+<li> New option
+
+<pre>
+&nbsp;&nbsp;\rTo[gap=5pt]
+
+</pre>
+ to create a gap in horizontals and PS diagonals, instead of the hack
+
+<pre>
+&nbsp;&nbsp;\rTo~{\;}
+
+</pre>
+ which caused <tt>^</tt> and <tt>_</tt> labels to be moved too far away
+ from the shaft. The width, here 5pt, defaults to the same
+ value as <b>shortfall</b>.
+<div class="p"><!----></div>
+</li>
+
+<li> Added <tt>&gt;-&gt;</tt> and /verb/&lt;-&lt;/ arrowheads; these are the same
+ as <tt>&gt;</tt> and <tt>&lt;</tt> but the shaft goes <em>through</em> the extra
+ arrowhead.
+<div class="p"><!----></div>
+</li>
+
+<li> Added 2pt space separating labels from vertical arrows.
+<div class="p"><!----></div>
+</li>
+
+<li> Identify the cell in which a second-pass error occurs.
+<div class="p"><!----></div>
+</li>
+
+<li> Corrected position of hook in <tt>\dInto</tt> (see <tt>\shifthook</tt>).
+<div class="p"><!----></div>
+</li>
+
+<li> Corrections to <tt>\lhtriangle</tt>, <tt>\dhtriangle</tt>,
+ and <tt>\newarrowtail{boldhook}</tt>.
+<div class="p"><!----></div>
+</li>
+
+<li> Suppress indentation of text following diagram (due to <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;change).
+<div class="p"><!----></div>
+</li>
+
+<li> Mangle <tt>\left@label</tt> and <tt>\right@label</tt> because of a
+ conflict with Elsevier's macros.
+<div class="p"><!----></div>
+</li>
+
+<li> Corrected dot spacing with <tt>[dotted]</tt> option.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.85 Released 20 August 1997</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> New option <tt>[leftflush=margin]</tt> for left alignment of
+ diagrams on a margin, instead of centering them.
+ <tt>[leftflush]</tt> is like <tt>[flushleft]</tt>,
+ except that it reckons the alignment from multiple
+ verticals, or from text if there's no vertical.
+<div class="p"><!----></div>
+</li>
+
+<li> New options <tt>[hug]</tt> and <tt>[nohug]</tt> in PostScript mode:
+ <tt>[PS,nohug]</tt> uses PS for the arrows <b>without rotating the
+ labels</b>. Beware that this has been done in a lazy way by
+ overprinting empty <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>-style diagonals carrying the labels, which
+ may therefore be mis-placed.
+<div class="p"><!----></div>
+</li>
+
+<li> New option <tt>[crab=distance]</tt> shifts horizontals and PS
+ diagonals transversally by the specified distance.
+ The abbreviations <tt>[crab+]</tt> and <tt>[crab-]</tt> use
+ <tt>\PileSpacing</tt>, so to put four diagonal lines in parallel
+ do something like
+
+<pre>
+&nbsp;&nbsp;\ruTo[crab--]&nbsp;\ldTo[crab-]&nbsp;\ruTo[crab+]&nbsp;\ldTo[crab++]
+
+</pre>
+ This doesn't work with <tt>[nohug]</tt>.
+<div class="p"><!----></div>
+</li>
+
+<li> New option <tt>[snake=distance]</tt> shifts the middle of midshaft
+ horizontals and PS diagonals longitudinally by the specified
+ distance.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.84 Released 2 September 1996</h3>
+
+<div class="p"><!----></div>
+Provided <tt>\NWclck</tt> etc 2-cell arrows.
+
+<div class="p"><!----></div>
+
+<h3>3.83 Released 18 May 1995</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> New <tt>[dotted]</tt> option to change the filler on an arrow to
+ dots (useful for mediators for universal properties).
+<div class="p"><!----></div>
+</li>
+
+<li> Option <tt>[LaTeXeqno]</tt> uses <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s equation number and style
+ for "eqno"; <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s <tt>\label</tt> command picks this up.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.81 Released 18 July 1994</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> <b>Stretchable PostScript diagonals implemented</b>.
+<div class="p"><!----></div>
+</li>
+
+<li> <tt>\overprint{text}</tt> sets text in maths and overprints it in the
+ current cell, centered in the column irrespective of other stuff.
+<div class="p"><!----></div>
+</li>
+
+<li> Option <tt>[repositionpullbacks]</tt>
+ redefines <tt>\SEpbk</tt> etc to use <tt>\overprint</tt>.
+<div class="p"><!----></div>
+</li>
+
+<li> New option <tt>[grid]</tt> to set column and row widths individually:
+ see manual for examples such as a regular pentagon and cube with perspective.
+<div class="p"><!----></div>
+</li>
+
+<li> Option <tt>[PostScript=name]</tt> takes the name of a DVI<font face="symbol">®</font
+>PS
+ translator as argument.
+<div class="p"><!----></div>
+</li>
+
+<li> Equilateral triangle or regular hexagon size options.
+<div class="p"><!----></div>
+</li>
+
+<li> Introduced landscape and portrait options.
+<div class="p"><!----></div>
+</li>
+
+<li> Peter Freyd's <tt>\puncture</tt> symbol provided.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>Earlier Version numbers</h3>
+
+<ul>
+<li> 2 was circulated to some people in September 1989
+<div class="p"><!----></div>
+</li>
+
+<li> 3.16 was advertised on <tt>types</tt> and <tt>categories</tt>
+ in July 1990 and emailed to those who asked for it.
+<div class="p"><!----></div>
+</li>
+
+<li> 3.18 was the final bug-fix before the re-write began in April
+ 1992.
+<div class="p"><!----></div>
+</li>
+
+<li> 3.20 introduced error-recovery, and <tt>\newarrow</tt> for
+ horizontals and verticals.
+<div class="p"><!----></div>
+</li>
+
+<li> 3.22 completely rewrote the reformatting program for h and
+ corrected numerous alignment errors; introduced options in square
+ brackets
+<div class="p"><!----></div>
+</li>
+
+<li> 3.23 fixed a catastrophic error in nested diagrams
+<div class="p"><!----></div>
+</li>
+
+<li> 3.24 extended <tt>\newarrow</tt> to diagonals, added
+ trigonometry code, rewrote code for drawing <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;diagonals,
+ introduced PostScript and TPIC diagonals, consistent choice of
+ arrowheads.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
diff --git a/macros/generic/diagrams/taylor/manual.bklt.gz b/macros/generic/diagrams/taylor/manual.bklt.gz
new file mode 100644
index 0000000000..d0260bdf1e
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.bklt.gz
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.dvi b/macros/generic/diagrams/taylor/manual.dvi
new file mode 100644
index 0000000000..afaa65122c
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.dvi
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.pdf b/macros/generic/diagrams/taylor/manual.pdf
new file mode 100644
index 0000000000..13bd061411
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.pdf
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.ps.gz b/macros/generic/diagrams/taylor/manual.ps.gz
new file mode 100644
index 0000000000..1b831e2e1f
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.ps.gz
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.tex b/macros/generic/diagrams/taylor/manual.tex
new file mode 100644
index 0000000000..e9b6a044a0
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.tex
@@ -0,0 +1,2695 @@
+\errorcontextlines 999
+%
+% =========================================
+\title { Commutative Diagrams in \TeX\ %
+ (version 4)}
+% | |
+% | by |
+% | |
+\author {{\bf Paul Taylor }\\
+% =========================================
+%
+ {\tt www.cs.man.ac.uk/$\sim$pt}}
+%
+\date {15 June 1997}
+%
+\def\abstracttext
+ {\TeX\ and \LaTeX\ have become standard as a way of writing papers
+ in Computer Science and Category Theory.
+ Even in source form they are easier to compose and read than
+ attempts to write mathematics in ASCII. In~Category Theory
+ ``commutative diagrams'' are essential for a clear visual
+ understanding of the paper, but the graphics capabilities of \TeX\
+ are so limited that it is very difficult to draw them nicely, if at
+ all. This manual describes a new but reverse-compatible version of
+ a package to draw such diagrams, expressed in a language in which many
+ users have already found it very easy to express themselves.}
+%
+% ===============================================================
+\documentclass[a4paper]{article}
+\usepackage{diagrams}
+\makeatletter
+\makeindex
+\def\pt@input#1#2#3{\openin1 #1 \ifeof1 \typeout{#2}#3%
+ \else\closein1 \relax\input #1 \fi}%
+%
+% Read the diagram macros file, saving the banner from the top.
+\let\messagex\message
+\def\banner{Paul Taylor's diagrams package}%
+%\def\getbanner<#1>{\def\banner{#1}}%
+%\def\message#1{\getbanner#1\let\message\messagex\message{#1}}%
+%\pt@input{diagrams}%
+%{I can't find the commutative diagrams package,
+%so I can't process the manual!}\endinput
+%\ifx\newarrow\undefined
+%\message{This manual cannot be processed by any version earlier than 3.24.}%
+%\message{Please get an up-to-date version from ftp.dcs.qmw.ac.uk.}%
+%\expandafter\endinput\fi
+%
+% **********************************************************
+% * You can experiment with changing the following options *
+% * as explained in the "Options" section of this manual. *
+% **********************************************************
+%
+\diagramstyle[tight,centredisplay%
+%,dpi=300% 300dpi is default;
+%,dpi=212% for two-up (A4 on A5) reduction of 300dpi
+,dpi=600% for more modern laser-printers
+%,dpi=424% for two-up (A4 on A5) reduction of 600dpi
+%,PostScript=Rokicki%
+,UglyObsolete% formerly called ``noPostScript''
+%,TPIC%
+,heads=LaTeX%
+%,heads=vee%
+%,heads=triangle%
+%,heads=curlyvee% uses AMS symbols
+%,heads=littlevee%
+%,heads=boldlittlevee% needs good-bold-math below
+%,heads=littleblack% uses AMS symbols
+%,heads=blacktriangle% uses AMS symbols
+]
+% The boldhook tails and boldlittlevee heads use sizes of cmsy and cmmi
+% fonts which you may not have available. In this case, please change
+% the following to \havegoodboldmathfalse.
+\newif\ifhavegoodboldmath\havegoodboldmathtrue
+%
+% ===============================================================
+% ===============================================================
+% Try to read various non-essential auxiliary input files.
+%
+\iftrue
+ \ifx\ds@amssymb\undefined
+ \ifx\ds@mssymb\undefined
+ \ifx\ds@amssymbols\undefined
+ \pt@input{amssymb.sty}{}{%
+ \pt@input{mssymb.tex}{}{%
+ \pt@input{amssymbols.sty}%
+ {Some of the arrowheads in the diagrams package use symbols from the extra
+ ^^Jfonts (msxm/msym or msam/msbm) provided by the American Mathematical
+ Society.^^JYou can get these by anonymous FTP from e-math.ams.com and
+ elsewhere.
+ ^^JIn this manual the relevant examples will just be left out.^^J}{}}}%
+ \else\ds@amssymbols\fi\else\ds@mssymb\fi\else\ds@amssymb\fi
+ \makeatletter % old versions of mssymb b*gg*r up \catcode`\@
+\fi
+%
+\pt@input{a4.sty}%
+{^^JThis manual was written for European A4 paper, but you do not have a4.sty.
+^^JYou'll get lots of Over-full \string\hbox'es, but don't worry.
+It doesn't matter.^^JWe can carry on without any real harm.}{}%
+\advance\textheight 5mm
+%
+\def\AMS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}
+\def\AmSTeX{\AMS-\TeX}
+\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}%
+ \kern-.2em\lower.376ex\hbox{\the\textfont2 M}%
+ \kern-.125em {\the\textfont2 S}-\TeX}
+\def\AMSLaTeX{\AMS-\LaTeX}
+\def\LaTeXe{\mbox{\LaTeX\kern.15em$2_{\textstyle\varepsilon}$}}
+
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+\def\XYpic{\leavevmode\hbox{X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}-pic}}
+
+%
+% I prefer paragraphs spaced rather than indented
+\parskip=2pt plus 2pt minus 1pt
+% and I don't like hyphenation
+\spaceskip=.5em plus .6em minus .2em
+\pretolerance=2000
+\binoppenalty=2000
+\relpenalty=1500
+% Penalty for splitting paragraphs
+\interlinepenalty=150
+\predisplaypenalty=10000
+\postdisplaypenalty=400
+\@beginparpenalty=\predisplaypenalty
+%
+%
+%\let\@mkboth\markboth
+\def\@oddfoot{}%
+\def\@evenfoot{}%
+\def\@evenhead{{\bf\thepage}\hfil{\rm\topmark}}%
+\def\@oddhead{{\rm\banner}\hfil{\bf\thepage}}%
+\def\sectionmark#1{\mark{\thesection. #1}}% should have \S but doesn't work
+%\def\section@mark#1{\markboth{#1}{\banner}}%
+\@twosidetrue
+%
+%
+\let\volx\relax % for ltugbot.sty
+\newcommand{\bsl}{$\backslash$}
+%
+\def\ix#1{#1\index{#1}}\def\person#1#2{#1 #2\index{#2, #1}}%
+{\escapechar-1 \xdef\bslch{\string\\}}%
+\def\ixcmd#1{{\escapechar-1 \xdef\cmdname{\string#1}}%
+ \expandafter\index{\cmdname @\bslch verb/\string#1/}}%
+\def\ixprotect#1{{\escapechar-1 \xdef\cmdname{\string#1}}%
+ \expandafter\index{\cmdname @\protect#1}}%
+
+\newarrow{Congruent}33333
+\newarrow{Curlyto}----{curlyvee}
+\newarrow{TeXto}----{->}
+\newarrow{TeXonto}----{->>}
+\newarrow{Blackinto}{blacktriangle}--->
+\newarrow{Openinto}{triangle}--->
+\newarrow{EEmbedd}{>>}---{>>}
+\newarrow{Corresponds}<--->
+\newarrow{Backwards}<----
+\newarrow{Multi}----o
+\newarrow{Crossto}----X
+\newarrow{Partial}----{harpoon}
+\newarrow{Into}{\ifhavegoodboldmath bold\fi hook}--->
+
+%=================================================================
+%
+% verbatim array
+%
+%=================================================================
+
+
+% This defines two new LaTeX environments: verbarray and verbdiag.
+
+% The first is like the verbatim environment, except that it treats each
+% cell of an array individually, centring the text within aligned &s. The two
+% arguments specify the text to be used for & and \\. Because of the
+% eager parsing at the beginning of a cell, \relax is needed before
+% commands that expand to anything other than their own text.
+% For example,
+% \begin{verbarray}{\ \&\ }{\ \string\\ \ }
+% A&\relax\rTo^f&B\\
+% \relax\dTo^g&&\relax\dTo^h\\
+% C&\relax\rTo^k&D
+% \end{verbarray}
+% produces the contents of a simple diagram.
+
+% The second packages this to produce a verbatim diagram, ie it encloses
+% the text in ``\begin{diagram}'' and ``\end{diagram}''. Any text which
+% follows ``\begin{verbdiag}'' on the same line is copied verbatim after
+% \begin{diagram}.
+
+% Here is a list of the characters that have been specially catcoded
+% except & [adapted from plain.tex]
+\def\dospecialsexceptand{\do\\\do\{\do\}\do\$%
+ \do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+% (not counting ascii null, tab, linefeed, formfeed, return, delete)
+% Each symbol in the list is preceded by \do, which can be defined
+% if you want to do something to every item in the list.
+
+\def\lverbcell{\begingroup \catcode``=13 \@noligs
+\tt \let\do\@makeother \dospecialsexceptand \dolverbcell}
+\def\dolverbcell#1\rverbcell{#1\endgroup}
+
+\def\verbarraycr{\omit{\verbarraycrstring}\cr}
+
+\newenvironment{verbarray}[2]%
+{\abovedisplayskip\z@ \abovedisplayshortskip\abovedisplayskip
+\belowdisplayskip\abovedisplayskip\belowdisplayshortskip\abovedisplayskip
+$$\hss\vbox\bgroup
+\tabskip\z@
+\let\\\verbarraycr\edef\verbarraycrstring{#2}%
+\halign\bgroup
+\hfil\lverbcell##\rverbcell\hfil&&{#1}\hfil\lverbcell##\rverbcell\hfil\cr
+%$$
+}%
+{%$$
+\verbarraycr\egroup\egroup\hss$$}
+
+\def\ke{\kern.25em}
+
+\newenvironment{verbdiag}%
+{\begin{pageblock}%
+ \vspace{2ex}%
+ \let\do\@makeother
+ \def\beginverbdiag{\begin{verbarray}{\ke\tt\&\ke}{\ke\string\\}}%
+ \noindent\tt\string\begin\{diagram\}
+ \bgroup\aftergroup\beginverbdiag\let\par\egroup
+ \obeylines\dospecials
+}%
+{\end{verbarray}%
+ \string\end\{diagram\}%\$\$
+ \vspace{2ex}%
+ \end{pageblock}%
+}
+
+\newenvironment{clean}{}{}
+\newenvironment{pageblock}{\vbox\bgroup}{\egroup}
+
+\makeatother
+%=============================================================================
+%=============================================================================
+%=============================================================================
+
+\begin{document}
+\maketitle
+\begin{abstract}\noindent\abstracttext\end{abstract}
+
+\section{Introduction}
+In papers in mathematics and computer science which employ Category Theory,
+there is much benefit in clarity if ``commutative diagrams'' are used as
+much as possible to illustrate definitions, equations and universal
+properties. Here is a typical such diagram: it is one of the
+Mac~Lane-Kelly equations.%
+\index{Mac Lane, Saunders}\index{Kelly, Gregory Max}
+\def\Id{{\rm id}}\def\Assl{{\rm assl}}%
+\begin{diagram}[width=6em]
+A*(B*(C*D))&\relax\rTo^\Assl&(A*B)*(C*D)&\relax\rTo^\Assl&((A*B)*C)*D\\
+\dTo^{\Id*\Assl} & & = & &\relax\uTo_{\Assl*\Id}\\
+ A*((B*C)*D) & &\relax\rTo^\Assl & & (A*(B*C))*D\\
+\end{diagram}
+This manual describes version~4 of the author's package for drawing
+diagrams line this in (plain) \TeX\ or \LaTeX.
+Version~3 is already very widely used in
+the Category Theory and Theoretical Computer Science communities.
+Most of the underlying code has been rewritten, with a great improvement to
+the appearance of the diagrams, but it remains compatible with the previously
+developed and very popular straightforward language.
+
+\section{Design Criteria}
+Drawing such a diagram using the \LaTeX\ \verb/picture/ environment%
+\ixprotect\LaTeX\index{picture environment}
+takes
+about sixty lines of code, though some saving is possible (with the positioning
+of labels on arrows) by means of some simple macro programming.
+To get the arrows to match up neatly with the objects takes quite a lot of
+experimentation, and the whole job has to be repeated with each new diagram
+or each modification.
+Again, the use of macros for commonly occurring diagrams such as squares and
+triangles can save effort, but this does not postpone the difficulty very
+far, because as soon as we want to draw a slightly more complicated diagram
+we're back to square one.
+
+The now widespread use of workstations with big screens and ``personal''
+computers has lead to a kind of religious fervour that a mouse with at most
+three buttons is always easier to use than a keyboard with maybe over a hundred.
+This might be so if the tracking software were accurate and could use telepathy
+to ascertain what the user wanted, but in reality the attempts I have seen to
+``draw it on the screen'' and include the result in a \TeX\ document have
+looked as professional as what children bring home from their first
+day at school. My view is, if you want {\em wysiwyg,} use pen and paper!%
+\index{wysiwyg}\index{mouse}
+
+Besides the awful results, mouse-driven methods take longer and are less
+portable. If you want to write a joint paper with a colleague on the other
+side of the world, it is a great deal simpler to send a single ascii file
+by electronic mail than to package twenty of them (including one file per
+diagram as well as the main text) encoded in some weird commercial binary
+format.
+
+On the basis of these remarks, the design criteria of this package are as
+follows:
+
+\begin{enumerate}
+
+\item The entire diagram must form part of the source of the document itself.
+In other words, there must be no preprocessing
+({\em cf.}~{\tt eqn} in {\sc Unix})
+or inclusion of files (such as {\sc \ix{PostScript}} pictures).
+
+\item Simple diagrams must be able to be drawn ``on the fly'' and not
+need to be drawn on paper first.
+Obviously, complex diagrams will already have been worked out on paper anyway.
+
+\item The layout of the source code must resemble the intended
+diagram as far as syntactically possible.
+
+\item There must be no \ix{measuring} of labels to calculate \ix{co-ordinates}
+or lengths of arrows.
+
+\item There must be a variety of arrow styles, with facilities for
+defining new ones.\index{arrowheads}\index{heads}\index{diagonal arrows}
+Diagonal arrows (which, through lack of appropriate primitives,
+\TeX\ makes very difficult to draw) should be provided at various
+slopes, albeit with limited choice and features.
+
+\item The package must be compatible both with {\tt plain}~\TeX\ and%
+\index{plain \protect\TeX}\ixprotect\LaTeX\
+with \LaTeX, and not rely on non-standard fonts\footnote{Diagonal lines
+can {\em only\/} be drawn using \LaTeX's {\tt line10} and {\tt linew10}
+fonts,\index{line10 and linew10 fonts}\index{AMS symbols fonts}
+and for exotic arrow styles the AMS maths symbols fonts may be
+useful: we regard these as standard.
+\person{Alan}{Jeffery}'s \ix{St.\protect~Mary Road symbols font}
+is also useful.}
+or language features.
+
+\item Future versions which improve the appearance of the diagrams
+must, as far as possible, be compatible with past papers written using the
+package --- but you hack at your own risk!
+
+\end{enumerate}
+
+\noindent In addition there are {\ae}sthetic criteria,
+some of which may be a matter of opinion:
+
+\begin{itemize}
+
+\item Arrows should \ix{stretch} to meet the objects which are intended to
+be their endpoints.
+
+\item Arrows should be aligned (both horizontally and vertically)
+with the centres of the objects.\index{aligned labels}
+
+\item Labels on arrows should not affect the spacing of the diagram
+except to avoid overlapping.\index{labels}
+
+\item Stretching of arrows should not affect the centering of their
+labels.
+
+\end{itemize}
+
+%=================================================================
+%
+% my version
+%
+%=================================================================
+
+\section{Typing the diagram}\label{typing}
+
+The diagram above is produced in \LaTeX\ixprotect\LaTeX\
+as follows:%
+\ixcmd\input\ixcmd\usepackage
+\ixcmd\diagram\ixcmd\enddiagram
+\ixcmd{\begin{diagram}}\ixcmd{\end{diagram}}%
+
+
+\vskip2ex
+
+\begin{pageblock}
+\noindent\verb/\input diagrams/\\
+\verb/\def\Assl{{\rm assl}}\def\Id{{\rm id}}/\\[-2ex]
+\begin{verbdiag}
+A*(B*(C*D))&\relax\rTo^\Assl&(A*B)*(C*D)&\relax\rTo^\Assl&((A*B)*C)*D&\\
+\relax\dTo^{\Id*\Assl}&&=&&\relax\uTo_{\Assl*\Id}&\\
+A*((B*C)*D)&&\relax\rTo^\Assl&&(A*(B*C))*D&
+\end{verbdiag}
+\end{pageblock}
+In {\tt plain} \TeX\index{plain \protect\TeX}
+you do the same thing, writing \verb/\diagram/ and
+\verb/\enddiagram/ wherever we have \verb/\begin{diagram}/ and
+\verb/\end{diagram}/.
+
+In \LaTeXe\ixprotect\LaTeXe\ you can put
+\begin{quote}
+\verb/\usepackage{diagrams}/
+\end{quote}
+in place of the \verb/\input/ command, but you have to rename or alias
+the file to \verb/diagrams.sty/.\index{diagrams.sty}\index{diagrams.tex}
+
+The basic rule is to divide the diagram into cells,
+\begin{diagram}[height=1em,width=0pt,loose,textflow]
+%&&\relax\ && \ && \ && \ \\%39
+&A*(B*(C*D))\;&&\rTo^{\qquad\Assl\qquad}&&\;(A*B)*(C*D)\;&&
+\rTo^{\qquad\Assl\qquad}&&\;((A*B)*C)*D\\%38
+\ &\HonV&&&& \rDots &&&&\HonV& \ \\%37
+\\
+&\dTo^{\Id*\Assl} &
+ \uDots && \uDots &=& \uDots && \uDots &
+ \uTo_{\Assl*\Id}\\%36
+\\
+\ &\HonV&&&& \rDots &&&&\HonV& \ \\%35
+&A*((B*C)*D) & & & & \rTo_\Assl & & & & (A*(B*C))*D \\%34
+%&& \ && \ && \ && \ \\%33
+\end{diagram}
+just like the cells of a \ix{matrix}, and then type the contents
+of the cells with columns delimited by ``{\tt\&}''\ixcmd{&} and rows by
+``\verb/\\/''.\expandafter\index{\string\\@\string\\}
+The bottom arrow extends through the \ix{empty cells} either
+side of~it. Notice that although the matrix imposes a kind of co-ordinate
+system, the widths of the columns and the heights of the rows are variable
+and chosen automatically --- by \TeX, in the same way as it does for matrices,
+tables,~{\it etc.}\index{co-ordinates}
+
+At first you will probably need to draw the diagram carefully on paper and
+divide it into cells in this way before typing it in.
+The main difficulty is working out how many \verb/&/s\ixcmd{&} to insert;
+for this it is useful to observe that {\em in the simplest cases\/}%
+ \footnote{The bottom arrow disobeys this rule, since it goes across
+ three columns.}
+\begin{itemize}\index{parity rule}
+\item objects and verticals go in odd-numbered columns, and
+\item horizontals and diagonals go in even-numbered columns.
+\end{itemize}
+Then, of course, you need an even number of \verb/&/s between columns
+of the same parity and an odd number between different ones.
+After a little practice you'll learn other rules of thumb,
+but even if you make a mistake, the DVI previewer will make it clear how
+to correct~it.
+Error messages about {\em clashing\/}\index{clashing arrows}
+or {\em unterminated\/} arrows\index{unterminated arrows} indicate
+that something is wrong without previewing.\index{error checking}
+
+Each cell should contain {\it either\/} an \ix{object} (an~ordinary
+mathematical expression, set in maths mode) {\it or\/}~a~\ix{morphism}
+(an~\ix{arrow} such as \verb/\rTo^f/). Horizontal and vertical arrows cannot
+be mixed in one cell; moreover only one horizontal arrow per cell is allowed,
+but see the section~\ref{parallels} on parallel maps below.
+
+The horizontal and vertical arrows extend through the \ix{empty cells} either
+side until they meet a non-empty cell, just like the
+rook\index{rook (chess rule)} (castle\index{castle (chess rule)})
+in chess.
+For this purpose anything other than \ix{white space} (space, tab and newline),
+comments (\verb/%/) and \verb/\empty/ in the source make a cell non-empty.
+For example \verb/\null/, \verb*/\ / or \verb/{}/\index{{}}
+may be used to terminate arrows: it's not necessary that anything be printed.
+If you don't terminate an arrow, it will extend to
+the \ix{edge of the diagram},
+but just exactly where the ``edge'' {\em is}, particularly the right one,
+will be determined somewhat arbitrarily.
+
+The \ix{chess rule} does not apply to diagonals, whose endpoints are specified
+differently: see section~\ref{diagonals}.
+
+Do not enclose the arrow commands in \ix{boxes} or \ix{braces}, because this
+prevents the automatic \ix{stretch}ing from working.
+
+The {\em horizontal\/} arrow commands
+\index{horizontal arrows} (including \verb/\pile/) \ixcmd\pile
+may also be used in \ix{text}, $A \rTo^f B$.
+Since there is no enclosing matrix, this is written
+as \verb/$A \rTo^f B$/ {\em without\/}~\verb/&/.\ixcmd{&}
+You still need the \ix{dollars}\ixcmd{$}
+because it's still a \ix{mathematical expression}.
+Arrows participate in the horizontal stretching and shrinking of spaces
+between words in a paragraph, but of course their labels also force
+the lines of the paragraph apart.
+
+The arrow commands are {\em \ix{fragile}\/} in the \LaTeX\ sense:
+if you want to use them in section headings you must \verb/\protect/%
+\ixcmd\protect\ them.
+
+
+%===========================================================================
+
+\section{Labels}
+
+Each arrow carries up to three \ix{labels}, whose position is specified
+analogously to \ix{superscripts}%
+ \footnote{However they are {\em not\/} recognised syntactically in the
+ same way, and so for instance {\tt\bsl nolimits}\ixcmd\nolimits\
+ will not work.
+ The sub- and superscript characters are recognised by their
+ {\tt\string\catcode}s, so {\tt\string\sp} and {\tt\string\sb}%
+ \ixcmd\catcode\ixcmd\sp\ixcmd\sb\ixcmd\ifx\ixcmd\ifcat\
+ will work, but the others are compared using {\tt\string\ifx},
+ so have to be the same characters, with the same {\tt\string\catcode}s
+ as when {\tt diagrams.tex} was read in.
+ \index{Sp environment}\index{Sb environment}%
+ \ixprotect\AmSTeX\ixprotect\AMSLaTeX\index{{}}\ixcmd\bgroup\ixcmd\egroup
+ The {\tt Sb} and {\tt Sp} environments
+ in \AmSTeX\space and \AMSLaTeX\space will not work, and the text of the
+ label itself must be either a single token or be explicitly enclosed in
+ {\tt\string{\string}} or {\tt\string\bgroup\string\egroup}.}
+by
+\begin{center}
+\vskip-2ex
+\verb/^/ above,\qquad \verb/_/ below,\qquad \verb/</ left,\qquad
+\verb/>/ right\qquad and\qquad \verb/~/ middle.
+\end{center}
+\ixcmd{^}\ixcmd{_}\ixcmd{~}\index{<@$<$}\index{>@$>$}%
+For reverse compatibility, above=left and below=right for vertical arrows.
+Very old versions of the package used positional arguments; these are also
+still supported, but {\em must be enclosed in braces, e.g.\/}~\verb/\rTo{f}{g}/
+but not \verb/\rTo f g/.
+
+Explicitly, the labels are placed as follows:
+\begin{itemize}
+\item for {\bf horizontal} arrows,\index{horizontal arrows}
+ \verb/\rTo^f_g/ and \verb/\rTo{f}{g}/
+ give \smash{$\mathop{\longrightarrow}\limits^f_g$};
+\item for {\bf vertical} arrows,\index{vertical arrows}
+ \verb/\dTo <f >g/, \verb/\dTo^f_g/ and
+ \verb/\dTo{f}{g}/ give $f{\big\downarrow}g$;
+\item for {\bf positive\/} gradient {\bf diagonal} arrows,%
+ \index{diagonal arrows}\index{positive gradient}\index{negative gradient}
+ \verb/\ldTo^f_g/, \verb/\ldTo <f >g/ and \verb/\ldTo{f}{g}/ all give
+ ${}^f\!\!\!\!\swarrow\!\!\!\!_g$ (similarly \verb/\ruTo/).
+\item but for {\bf negative\/} gradient arrows, above=right and below=left,
+ so \verb/\rdTo^f_g/, \verb/\rdTo <g >f/ and \verb/\rdTo{f}{g}/ give
+ ${}_g\!\!\!\searrow\!\!\!^f$ (similarly \verb/\luTo/);
+\item Using tilde, the label may instead {\bf break} the arrow: \verb/\rTo~f/
+ gives \hbox to5em{$A\rTo~{\textstyle f}B$}.\index{broken arrows}
+ If~the arrow had a middle
+ ({\em e.g.}~\verb/+/ in \verb/\rCrossedInto/, page~\pageref{crossedinto}),
+ \ixcmd\newarrowmiddle\ixcmd\rCrossedInto
+ the label would replace~it.
+ This is sometimes useful to preserve the symmetry of a diagram with three
+ verticals.
+\end{itemize}
+Although the arrows extend into adjacent cells, the labels on horizontal and
+vertical maps remain centred {\em in~the cell in which the arrow was declared.}
+
+Any ordinary (mathematical) text you put in the cell with an arrow will
+appear in the usual way:
+\begin{itemize}
+\item For horizontal arrows it will therefore be attached to the arrowhead
+ or tail.
+
+ This offers a simple way of \ix{annotating the head of an arrow},%
+ \index{arrowheads!annotating}
+ for example
+ \verb/$ A \rTo^f \relax ^* B {}_s \lTo_g C$/\quad gives
+ \begin{quote}
+ $ A \rTo^f \relax ^* B {}_s \lTo_g C$.
+ \end{quote}
+ where \verb/\relax/ is needed to stop \verb/\rTo/ from reading \verb/^*/
+ as another label and \verb/{}/ serves as an object to which $s$ is
+ subscripted.\ixcmd\relax\index{{}}
+ The spacing in this example is not entirely satisfactory, because
+ \verb/\rTo/ and \verb/\lTo/ generate the \verb/shortfall/ spacing as
+ part of themselves and regard everything else as their targets.
+ You can use \verb/\!/ and \verb/\;/ commands to compensate for this,
+ remembering that should you subsequently change the \verb/shortfall/
+ amount then you must also adjust the compensation.\index{shortfall}
+
+ An alternative way of doing this is to define a new arrow command:
+ section~\ref{newarrow} explains how.\ixcmd\newarrow
+
+ Don't make a habit of putting \verb/\relax/ after arrow commands:
+ it can lead to gaps in short double-shafted arrows, for reasons which
+ are too complicated to explain here.
+\item For vertical and diagonal arrows additional text will lie to the
+ side of (or between) the arrows.
+ In the case of verticals this is at the same height as the middle and labels
+ of the arrows; see section~\ref{parallels}.
+\end{itemize}
+
+\ixcmd\textstyle\ixcmd\displaystyle\ixcmd\scriptstyle\ixcmd\scriptscriptstyle
+\ixcmd\labelstyle\ixcmd\objectstyle
+By default the labels on the arrows are set in \verb/\textstyle/
+(the same size as in text) when they are part of a matrix, and in
+\verb/\scriptstyle/ (like subscripts) in text. However this may be changed
+using the \verb/labelstyle/ option (page~\pageref{labelstyle}).
+%This re-defines the command \verb/\labelstyle/, for instance
+\begin{quote}
+\begin{verbatim}
+\begin{displaymath}
+\begin{diagram}[labelstyle=\scriptscriptstyle]
+A &\rTo^{\sum^n_1 f_i}_{\rm scriptscript} & B
+\end{diagram}
+\qquad
+...
+\end{displaymath}
+\end{verbatim}
+\end{quote}
+\noindent gives \vadjust{\vskip-4ex}%
+\begin{displaymath}
+\hss\begin{diagram}[inline,labelstyle=\scriptscriptstyle]
+A & \rTo^{\sum^n_1 f_i}_{\rm scriptscript} & B
+\end{diagram}
+\qquad
+\begin{diagram}[inline,labelstyle=\scriptstyle]
+A & \rTo^{\sum^n_1 f_i}_{\rm script} & B
+\end{diagram}
+\qquad
+\begin{diagram}[inline,labelstyle=\textstyle]
+A & \rTo^{\sum^n_1 f_i}_{\rm text} & B
+\end{diagram}
+\qquad
+\begin{diagram}[inline,labelstyle=\displaystyle]
+A &\relax\rTo^{\sum^n_1 f_i}_{\rm display} & B
+\end{diagram}
+\hss\end{displaymath}
+Similarly, objects within a diagram are set in \verb/\displaystyle/ unless the
+\verb/objectstyle/ option is used.
+(In text, {\em e.g.}~\verb/$A \rTo B$/, the setting of the objects is
+out of the control of the diagrams package.
+Unless you have done some special programming of your own, they will
+be set in \verb/\textstyle/.)
+
+%===========================================================================
+
+\section{The Cube}\label{cube}
+The \ix{cube} offers a good example of how horizontal and \ix{vertical arrows}
+\ix{stretch}.\index{horizontal arrows}
+Notice how the cells have been sub-divided further to give the
+``3D'' effect,\index{3D effect}
+and that the positions of the labels on the maps betray
+the cells in which they were declared.
+Because of the sub-division, the \ix{parity rule} for the column in which the
+horizontal arrows go has broken down.
+You should now formulate for yourself a new rule of thumb
+for the cases when you need one, two, three or four \verb/&/s between
+two commands.\ixcmd{&}
+
+\begin{verbdiag}
+A'&&\relax\rTo^{f'}&&B'&&&\\
+&\relax\rdTo_a&&&\relax\vLine^{h'}&\relax\rdTo_b&&\\
+\relax\dTo^{g'}&&A&\relax\rTo^f&\relax\HonV&&B&\\
+&&\relax\dTo^g&&\relax\dTo&&&\\
+C'&\relax\hLine&\relax\VonH&\relax\rTo^{k'}&D'&&\relax\dTo_h&\\
+&\relax\rdTo_c&&&&\relax\rdTo_d&&\\
+&&C&&\relax\rTo^k&&D&
+\end{verbdiag}
+
+\ixcmd\HonV\ixcmd\VonH\index{broken arrows}\index{hidden lines}%
+\index{meeting lines}\index{joining lines}\index{corners}
+The broken lines ($h'$~and~$k'$) are simply two arrows. The commands
+\verb/\HonV/ (``horizontal on vertical'') and \verb/\VonH/ (``vertical
+on horizontal'') allow arrows in one direction to pass through, whilst
+obstructing arrows in the other direction as if an object were present.
+They each have an optional argument: \verb/\HonV[=]/ and \verb/\VonH[\|]/
+should be used to allow extra space for double lines.
+An~alternative is to declare the ``front'' line in the intersection cell,
+where it will have the effect of obstructing the other arrow,
+but then its label (if any) would clash with the other arrow.
+
+\ixcmd\HmeetV
+There is also a command \verb/\HmeetV/ which causes single horizontal and
+vertical lines to meet, forming a corner.
+\begin{diagram}[notextflow]
+ A' & &\rTo^{f'} & & B' \\
+ & \rdTo_a & & & \vLine^{h'}& \rdTo_b \\
+\dTo^{g'} & & A & \rTo^f & \HonV & & B \\
+ & & \dTo^g & & \dTo \\
+ C' & \hLine & \VonH & \rTo^{k'} & D' & & \dTo_h \\
+ & \rdTo_c & & & & \rdTo_d \\
+ & & C & & \rTo^k & & D \\
+\end{diagram}
+You should soon be able to read and compose the source of
+these diagrams as easily as the printed version, although one would not
+normally go to the trouble of aligning the \verb/&/s in the source code!%
+\footnote{To do so neatly in this manual required special programming: the
+{\tt verbatim} environment produced unsatisfactory results.}%
+\index{verbatim environment}
+
+%==========================================================================
+
+\section{Parallel arrows}\label{parallels}\index{parallel arrows}%
+\ixcmd\pile\ixcmd\Downarrow\ixcmd\dashv\ixcmd\puncture
+You can draw two arrows between the same two vertices,
+including extra things like \ix{2-cells} ($\Downarrow$, \verb/\Downarrow/),
+the adjoint symbol ($\dashv$, \verb/\dashv/) in between.
+\person{Peter}{Freyd}'s \verb/\puncture/ symbol is also defined in the diagrams
+package.\index{adjunction}
+
+\begin{verbdiag}
+A&\relax\pile{\rTo^f\\
+\puncture\quad\alpha \\
+\rTo_g}&B&\\
+\relax\dTo^h\dashv\uTo_k&&&\\
+C&&&
+\end{verbdiag}
+
+\vskip-4ex
+\diagram
+A & \pile{ \rTo^f \\ \puncture\quad\alpha \\ \rTo_g } & B \\
+\dTo^h \relax\dashv \uTo_k \\
+C \\
+\enddiagram
+
+{\bf Horizontal} arrows\index{horizontal arrows}\index{pilespacing}
+may be \verb/\pile/d on top of each other.
+Effectively, a one-column diagram is created, which may have {\em either\/}
+a horizontal arrow {\em or\/} an object in each row. This works both
+in diagrams and in text.
+The spacing (\verb/\baselineskip/\ixcmd\baselineskip) between the rows
+is {\em half\/} of that specified by the \verb/pilespacing/ option
+(page~\pageref{pilespacing}),
+on the assumption that you will put something
+between parallel arrows; a blank line (\verb/\\ \\/) will suffice, then
+the spacing is the same as that for vertical arrows.
+
+{\bf Vertical} arrows\index{vertical arrows}
+may simply be put together in the same cell,
+with any text between them. The spacing is always that given by
+\verb/\pilespacing/.
+(\verb/\pile/ must not be used.)
+
+{\bf Diagonal} lines.\index{diagonal arrows}
+At the moment parallel diagonal lines are not properly implemented;
+(there will be a \verb/crab/\index{crab} option for transverse movement).
+
+However the option \verb/fixed/\index{fixed} may be used to force the
+diagonals to be set on the firsr pass, as fixed (non-stretching) boxes.
+These can be juxtaposed, separated with explicit space and
+moved with \verb/\raise/ or \verb/\raisebox/ commands.
+\begin{quote}
+\verb/\raise 5pt \hbox{$\ldTo^R$}\rightthreetimes\raise-5pt\hbox{$\ruTo^L$}/
+\end{quote}
+\ixcmd\raise\ixcmd\raisebox\ixcmd\lower\index{error checking}%
+There is an error message (``you must not put arrows in \ix{braces}''),
+which warns you that this is not a satisfactory solution.
+
+%==========================================================================
+\section{Defining arrow styles}\label{newarrow}
+It is easy to define other arrows besides the basic line with arrowhead given
+by \verb/\rTo/ and friends.\index{arrowheads} For example,\ixcmd\newarrow
+
+%\vskip-3\baselineskip
+
+\ifx\twoheadrightarrow\undefined % a typical AMS symbol name
+ \let\amsarrows\empty
+\else
+ \def\amsarrows{%
+ TeXonto&----\{->>\}&\rTeXonto\cr
+ }%
+ \ixcmd\rTeXonto
+\fi
+
+\ifhavegoodboldmath
+ \def\boldarrows{CrossedInto&\{boldhook\}-+->&
+ %\showboxdepth999 \showboxbreadth 999 \tracingonline 1
+ %\tracingcommands1 \tracingmacros1
+ \rCrossedInto
+ %\showlists
+ \cr}%
+ \newarrow{CrossedInto}{boldhook}-+->
+\else
+ \def\boldarrows{CrossedInto&C-+->&\rCrossedInto\cr}%
+ \newarrow{CrossedInto}C-+->
+\fi
+
+\ixcmd\rTo\ixcmd\rLine\ixcmd\rEmbed\ixcmd\rOnto\ixcmd\rEEmbedd
+\ixcmd\rDotsto\ixcmd\rDashto\ixcmd\rCorresponds\ixcmd\rImplies
+\ixcmd\rMapsto\ixcmd\rInto\ixcmd\rOpeninto\ixcmd\rCongruent
+\ixcmd\rTeXto\ixcmd\rBackwards\ixcmd\rMulti\ixcmd\rCrossto
+\ixcmd\rPartial\ixcmd\rCrossedInto
+\index{>@$>$ arrowhead}\index{-- filler}\index{>>@$\gg$ arrowhead}
+\index{. filler}%
+\index{dash filler}\index{| tail}\index{O arrowheads}\index{x arrowheads}%
+\index{harpoon arrowhead}\index{triangle arrowheads}\index{3 filler}%
+\index{hook tail}\index{C tail}\index{boldhook tail}%
+
+\begin{quote}\leavevmode\label{crossedinto}
+\vbox{\halign{\tt\string\newarrow\kern2pt\{#\}\kern2pt\hfil&\tt#\quad\hfil&%
+ $#$\cr\omit&&\omit\kern80pt\cr
+ To&---->&\rTo\cr
+ Line&-----&\rLine\cr
+ Embed&>--->&\rEmbed\cr
+ Onto&----\{>>\}&\rOnto\cr
+ EEmbedd&\{>>\}---\{>>\}&\rEEmbedd\cr
+ Dotsto&....>&\rDotsto\cr
+ Dashto&\{\}\{dash\}\{\}\{dash\}>&\rDashto\cr
+ Corresponds&<--->&\rCorresponds\cr
+ \boldarrows
+ Implies&====\{=>\}&\rImplies\cr
+ Mapsto&|--->&\rMapsto\cr
+ Into&C--->&\rInto\cr
+ Openinto&\{triangle\}--->&\rOpeninto\cr
+ Congruent&33333&\rCongruent\cr
+ TeXto&----\{->\}&\rTeXto\cr
+ Backwards&<----&\rBackwards\cr
+ Multi&----o&\rMulti\cr
+ Crossto&----X&\rCrossto\cr
+ Partial&----\{harpoon\}&\rPartial\cr
+ \amsarrows
+}}\end{quote}
+\noindent Note that the
+\ixcmd\rightharpoonhown\ixcmd\twoheadrightarrow\ixcmd\rightarrow
+\ixcmd\Rightarrow\ixcmd\boldmath
+\index{->>@\protect\verb/->>/ arrowhead}%
+\index{->@\protect\verb/->/ arrowhead}%
+\index{littlevee arrowheads}\index{boldlittlevee arrowheads}%
+\ifx\twoheadrightarrow\undefined\else\verb/{->>}/, \fi
+\verb/{harpoon}/, \verb/{->}/ and \verb/{=>}/ heads
+use \TeX's \verb/\rightharpoondown/ ($\rightharpoondown$), \verb/\rightarrow/
+($\rightarrow$) and \verb/\Rightarrow/ ($\Rightarrow$) symbols, consisting
+of heads {\em with shafts.}
+\ifhavegoodboldmath
+ Also, the \verb/boldbook/ tail uses \LaTeX's \verb/\boldmath/:
+\else
+ There is also a \verb/boldhook/ tail, which is not shown because the
+ appropriate fonts were not available when this copy of the manual
+ was printed:
+\fi
+please see the note about \verb/heads=littlevee/
+on page~\pageref{heads option}.
+The \verb/hook/ and \verb/C/ tails are the same.
+
+Each declaration\ixcmd\newarrow
+\index{north (east, west)}\index{south (east, west)}\index{east}\index{west}%
+\index{compass}\index{left}\index{right}\index{up}\index{down}
+\begin{center}
+\verb/\newarrow{/{\em Name\/}\verb/}{/{\em tail\/}\verb/}{/{\em filler\/}%
+\verb/}{/{\em middle\/}\verb/}{/{\em filler\/}\verb/}{/{\em head\/}\verb/}/
+\end{center}
+defines eight arrow commands
+$$\vcenter{\advance\hsize-2.5\baselineskip\advance\hsize-6em
+ \halign{\tt\bsl#\it Name\quad\hfil&#\hfil\quad or\quad&#\hfil\cr
+ r&right&east\cr
+ l&left&west\cr
+ d&down&south\cr
+ u&up&north\cr
+ ru&right \& up&northeast\cr
+ rd&right \& down&southeast\cr
+ lu&left \& up&northwest\cr
+ ld&left \& down&southwest\cr
+}}\qquad\qquad
+ \begin{diagram}[vcentre,inline,size=1.75\baselineskip,abut,shortfall=4pt]
+ \hbox{\tt lu}&&\hbox{\tt u}&&\hbox{\tt ru}\\
+ &\luTo[lowershortfall=2pt]&\uTo[lowershortfall=2pt]&
+ \ruTo[lowershortfall=2pt]\\
+ \hbox{\tt l}&\lTo[rightshortfall=2pt]&\vcenter{}&\rTo[leftshortfall=2pt]&
+ \hbox{\tt r}\\
+ &\ldTo[uppershortfall=2pt]&\dTo[uppershortfall=2pt]&
+ \rdTo[uppershortfall=2pt]\\
+ \hbox{\tt ld}&&\hbox{\tt d}&&\hbox{\tt rd}
+ \end{diagram}$$
+from the five named components.
+
+\ixcmd\isomorphic\ixcmd\cong
+Some but not all of the names given in the examples above are defined in the
+source of the package as distributed.
+However this is only really intended for reverse compatibility, because
+just as it is better to define a macro \verb/\isomorphic/ for the
+symbol $\cong$ (if that is what you use it to mean) than to write
+\verb/\cong/ in your documents, so it is advisable to define the arrow
+command names in the file where you keep your private collection of symbols.
+
+\ixcmd\rEmbed\ixcmd\rInto\ixcmd\rOpeninto\ixcmd\rImmerse\ixcmd\rInclude
+\ixcmd\rInternalise
+For example, if in your subject there are special kinds of functions known
+standardly as immersions, inclusions and internalisations and written as
+$\rInto$, $\rEmbed$ and $\rOpeninto$, then you should define
+\verb/\rImmerse/, \verb/\rInclude/ and \verb/\rInternalise/ instead of
+using the names \verb/\rInto/, \verb/\rEmbed/ and \verb/\rOpeninto/.
+The motto is {\em what you see is what you mean\/}!
+This avoids remembering or getting confused about the so-called
+standard macro names, and also enables you to change your mind about the
+notation if it is not standard but subject to experimentation.
+
+\ixcmd\newarrowhead\ixcmd\newarrowtail\ixcmd\newarrowmiddle
+\ixcmd\newarrowfiller
+The components as given in the \verb/\newarrow/ command are mnemonics,
+which are themselves defined using the commands
+\begin{center}
+\verb/\newarrowhead/, \verb/\newarrowtail/, \verb/\newarrowfiller/
+and \verb/\newarrowmiddle/.
+\end{center}
+Most of the characters in the standard \TeX\ \ix{Computer Modern fonts} which
+are appropriate for these components have already been used in the package
+and are illustrated above.
+If you wish to define other components, the examples at the end of the
+source show how to do this.
+If you are doing this with publicly available fonts, please contribute
+them for the benefit of other users by sending the definitions to me by
+electronic mail.
+It is in your interests to do so --- and to confine use of these four
+component-declaration commands to a single macro file --- because a more
+elaborate syntax may be used in future to facilitate adjustment of
+positioning. The \verb/\newarrow/ command itself, however, will remain
+as it is.
+
+\index{>@$>$ arrowhead}\index{>>@$\gg$ arrowhead}%
+\index{heads}\index{arrowheads}\index{+ arrowhead}\index{x arrowheads}%
+\index{O arrowheads}%
+\ixcmd\rBackwards\ixprotect{\LaTeX\ arrowheads}%
+The components \verb/>/, \verb/{>>}/, \verb/</, \verb/{<<}/, \verb/x/,
+\verb/+/, \verb/O/ and \verb/o/ can be used both as heads (fifth position)
+and \ix{tails} (first).
+The declaration \verb/<----/ defines \verb/\rBackwards/ to be a left-ward
+pointing arrow and \verb/\lBackwards/ to point right;
+this is not recommended, as you're certain to get confused.
+We shall see in the next section how to change the style of the four
+arrowhead components in a systematic way, thereby avoiding the ugly mixture
+of vee and \LaTeX\ arrowheads obtained using earlier versions of this package.
+
+\ixcmd\newarrow
+In some of the examples above (with the dot and rule fillers) the filler was
+repeated as the middle and one or both of the tips, whereas with others
+(dash) we used empty middle and tips instead.
+This was just to make the definitions easier to type: \verb/\newarrow/
+treats middles and tips which agree with the fillers as empty ones.
+It is possible to use two different fillers, but this is not recommended.
+
+\ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap
+The commands \verb/\HorizontalMap/ and \verb/\VerticalMap/ are still
+supported, but should be replaced by \verb/\newarrow/.
+These ought only to have been used in macro files --- not in the text of
+documents --- to define four arrow commands together (right, left, up and down).
+The twenty arguments defining the five components of each of these four
+arrows can (if they're not already provided) be re-arranged as the four
+arguments of each of five \verb/\newarrowhead/, {\em etc.,} declarations
+with the same effect.
+The mnemonics of the five components are then given to \verb/\newarrow/.
+If~you have any difficulty doing this conversion, please contact me.
+
+
+%==========================================================================
+
+\section{Options}\label{options}\index{options}
+\ixcmd\diagram\ixcmd{\begin{diagram}}\ixcmd\diagramstyle\ixcmd\usepackage
+\ixprotect\LaTeX\ixprotect\LaTeXe
+The \verb/\diagram/ or \verb/\begin{diagram}/ command and the arrow
+commands may be followed by a list of options in square brackets, for example
+\begin{center}
+\verb/\begin{diagram}[size=2em,textflow]/ \qquad \verb/\rTo[abut]/
+\end{center}
+which apply to the diagram or arrow to which they are attached.
+Options may be given for an entire document, or within \TeX's normal
+scoping rules, by a stand-alone command such as
+\begin{center}
+\verb/\diagramstyle[centredisplay,PostScript=dvips]/
+\end{center}
+You may use any number of \verb/\diagramstyle/ commands.
+In \LaTeXe\ these options can be given when loading:
+\begin{center}
+\verb/\usepackage[centredisplay,PostScript=dvips]{diagrams}/
+\end{center}
+though you should avoid using macros in the option values
+(see page~\pageref{miss endcs}).
+
+{\bf Note:} if the text of the first cell in a diagram begins with a
+square bracket, the program will attempt to read it as an option, just
+as square brackets within \LaTeX\ \verb/array/s can cause trouble.
+This usually leads to a catastrophic
+error, which can be avoided using \verb/\diagramstyle[nooptions]/.%
+\index{nooptions}\index{{}[]}\ixcmd{\begin{diagram}}
+This problem doesn't arise in \LaTeX\ if you use \verb/\begin{diagram}/
+followed by a (space or) new line before the text of the diagram.
+
+Some options take a value, using an equals sign; those enclosed in square
+brackets below are optional, the others mandatory.
+Most of the options are appropriate for diagrams rather than arrows.
+
+\def\coordpair{{\rm($x$,$y$)}}
+
+\begin{description}
+\def\makelabel#1{{\tt#1} --- }
+\item[abut] Leave no gap between maps and objects; useful for (``Hasse'')
+ diagrams displaying order structures (page~\pageref{Hasse}).%
+ \index{abut}\index{posets}\index{Hasse diagrams}\index{order structures}%
+ \index{lattices}\index{shortfall}
+\item[alignlabels] The \ix{labels} on horizontal arrows remain centred in the
+ cells where they are defined, despite different size endpoints;
+ {\em cf.} \verb/midshaft/.\index{midshaft}\index{aligned labels}
+ This is the default, and it is recommended for diagrams of a regular
+ character.
+ If there is insufficient space to position the labels in this way, they
+ are centred (automatically and silently) instead.
+ Whichever option is used, the middle of the arrow, if present, is always
+ positioned with the labels.
+\item[amstex] Enable recognition of \AmSTeX's commutative diagram commands;
+ see section~\ref{emulate}.\ixprotect\AmSTeX\index{amscd.sty}
+\item[balance] The whole diagram is centred horizontally without regard to
+ the left- and rightmost labels,
+ so that its weight lies in the middle of the page.
+ This is not the default, because if you were not aware of it the gaps
+ would come as a surprise, but it is recommended.%
+ \index{balance}\index{centre}
+\item[bottom] When the diagram is placed alongside some simple text,
+ the baseline of that text is aligned with that of the bottom row of the
+ diagram.\index{bottom}
+\item[centre {\em or\/} center] The diagram is centred%
+ \footnote{Notice that I have provided the ``-er'' alternative as a
+ courtesy to American users which \person{Donald}{Knuth}
+ and \person{Leslie}{Lamport} did not afford to British ones.}
+ na\"{\i}vely, using \verb/nobalance/ and \verb/vcentre/;
+ {\em cf.}~\verb/middle/.\index{nobalance}\ixcmd\vcenter\index{centre}
+\item[centredisplay {\em or\/} centerdisplay] Disables \verb/flushleft/,
+ enables \verb/balance/ and gives a warning when used within \verb/$$...$$/
+ (see below).\index{flush left}\ixcmd{$$}
+\item[cmex] Set the arrow parts appropriately for use of the \verb/cmex/
+ (Computer Modern \ix{extension font})\index{Computer Modern fonts};
+ used by the \ix{brace} and \ix{paretheses} arrows.\index{cmex}
+%\item[defaultsize]
+\item[diagonalbase=\coordpair] Start \ix{diagonal arrows} from
+ $x$~columns beyond (left or right depending on the direction)
+ and $y$~rows above the current cell. Default (1,1).
+ Intended for emulation of other diagrams packages:
+ see section~\ref{emulate}.
+%\item[displayoneliner] Disables \verb/inlineoneliner/.
+\item[dotted] Use \ix{dots} instead of a ruled line for arrow shafts.
+ Useful for mediators for \ix{universal properties} in category theory.
+\item[dpi={\em resolution\/}] Anticipate the output resolution in pixels per
+ inch (default 300). A~fudge factor is applied to horizontal and vertical
+ ruled lines, without which pixel rounding at 300dpi would cause the
+ {\em bottom\/} rather than the middle of the horizontal rule to align
+ with the cusp of the \ix{vee arrowheads}:\index{dpi}
+ compare $\rTo[heads=vee]$ and $\rTo[nopixel,heads=vee]$.
+ Other similar adjustments may also be made to character positioning,
+ and to the slopes of diagonals in PostScript mode to avoid ``stepping.''
+ Most office laser printers are 300dpi, but if you intend to use a printer
+ of a different resolution for your final output, set {\tt dpi=1270} or
+ whatever --- otherwise the shafts will be too low instead. The same applies
+ if you intend to magnify or reduce; for example {\tt dpi=212} should be
+ used for two-up or \ix{A4-on-A5} final printing.
+ In \verb/plain/ \TeX\ you may set \verb/\magnification/ at the beginning
+ of the file, but {\em do not\/} change \verb/dpi/ as this compensates
+ automatically.
+ The \verb/nopixel/ option disables the fudge factor.%
+ \ixcmd\magnification\index{pixel size}\index{300 dpi}\index{resolution}
+\item[dpm={\em resolution\/}] As {\tt dpi} but in dots per metre; {\em e.g.}
+ 1270dpi=50000dpm.
+\item[eqno={\em label\/}] Place {\em label\/} (in maths mode) beside the
+ diagram, as an \ix{equation number}.
+ See also \verb/LaTeXeqno/.
+\item[fixed] Force diagonal arrows to be set on the first pass and not
+ stretched.
+\item[flushleft{[={\em width\/}]}] The old version of \verb/leftflush/.
+ The alignment is on the edge of the grid, irrespective of
+ what vertical maps are present
+ (this makes the diagram stick out on the left with no good visual reason).
+ \index{indented style}\index{asymmetric design}
+\item[grid={\em name\/}] Use the \ix{grid} {\em name}.
+ See page~\pageref{grid}.\ixcmd\newdiagramgrid
+\item[gridx={\em name\/}] Use the grid with the horizontal and vertical
+ components interchanged.
+\item[h={\em distance\/}] Same as \verb/height/.\index{height}\index{size}
+\item[hcentre {\em or\/} hcenter] Same as \verb/nobalance/.%
+ \index{balance}\index{centre}
+\item[heads={\em name\/}]\label{heads option}
+ Set the \verb/>/ and \verb/{>>}/ arrow heads
+ and tails to those defined by \verb/\newarrowhead{/{\em name\/}\verb/}/ and
+ \verb/\newarrowtail{/{\em name\/}\verb/}/.
+ \index{arrowheads}\index{heads}\ixcmd\newarrowhead\ixcmd\newarrowtail
+ \index{line10 and linew10 fonts}\ixprotect{\LaTeX\ arrowheads}%
+ \index{vee arrowheads}\index{littlevee arrowheads}\index{O arrowheads}%
+ \index{boldlittlevee arrowheads}\index{triangle arrowheads}%
+ \index{x arrowheads}\index{curlyvee arrowheads}%
+ \index{blacktriangle arrowheads}\index{littleblack arrowheads}%
+ \index{AMS symbols fonts}\ixcmd\boldmath
+ The following styles are currently available:
+ \message{(There may follow a warning message about LaTeX diagonals
+ - please ignore it.)}%
+ \begin{quote}
+ \ifx\twoheadrightarrow\undefined\else\def\amsarrows{%
+ \dohead{curlyvee}(uses AMS symbols)\cr
+ \dohead{blacktriangle}(uses AMS symbols)\cr
+ \dohead{littleblack}(uses AMS symbols)\cr
+ }\fi
+ \ifhavegoodboldmath\def\boldarrows{%
+ \dohead{boldlittlevee}(uses {\tt\string\boldmath})\cr
+ }\else\let\boldarrows\empty\fi
+ \diagramstyle[l>=50pt]\leavevmode
+ \def\dohead#1{\tt#1\quad&\relax
+ \csname diagramstyle\endcsname[heads=#1]$\rEmbed\quad\rEEmbedd$&\quad}
+ \vbox{\halign{#&#&#\hfil\cr&\omit\kern100pt\cr
+ \dohead{LaTeX}(default; uses {\tt line10})\cr
+ \dohead{vee}\cr
+ \dohead{littlevee}\cr
+ \boldarrows
+ \dohead{triangle}\cr
+ \dohead{o}\cr
+ \dohead{O}\cr
+ \dohead{X}\cr
+ \dohead{+}\cr
+ \amsarrows
+ }}\end{quote}
+ \ifx\twoheadrightarrow\undefined
+ There are also heads called
+ \verb/curlyvee/, \verb/blacktriangle/ and \verb/littleblack/,
+ but these require the AMS symbols fonts, which were unfortunately
+ not available when this copy of the manual was printed.
+ If~you try to use them
+ \else
+ The vertical \verb/curlyvee/ heads come from the AMS symbols, and
+ the horizontals, from \verb/cmsy/ in the \ix{Computer Modern fonts},
+ seem appear to be slightly mis-aligned with the \verb/vee/ heads
+ from \verb/cmmi/.
+ If~you use them but forget to
+ \ifx\usepackage\undefined
+ \verb/\input mssymb/,
+ \else
+ \verb/\usepackage{amssymb}/,
+ \fi
+ \fi
+ \index{undefined control sequence}\index{cmsy}\index{amssymb.sty}%
+ you'll get an ``{\tt undefined control sequence}'' error in the middle of
+ a lot of garbage (deeply nested): hit return several times and carry on.
+
+ The \verb/boldlittlevee/ heads \ifhavegoodboldmath\else(not shown above) \fi
+ rely on \LaTeX's \verb/\boldmath/ command, and default to \verb/littlevee/
+ in \verb/plain/ \TeX.\index{plain \protect\TeX}\ixprotect{\LaTeX 2.09}
+ They~may not work correctly if you use \person{Leslie}{Lamport}'s old
+ \LaTeX2.09 \ix{font selection}.
+ Even if you use \person{Frank}{Mittelbach} and \person{Rainer}{Sch\"opf}'s
+ new one (which is part of \LaTeXe\ixprotect\LaTeXe) some \ix{PK files}
+ \ifhavegoodboldmath
+ which are not in the standard distribution may be needed.
+ \else
+ are needed which were not available when this copy of the manual
+ was printed.
+ \fi
+ It~is only intended for final copy in the event that the \verb/littlevee/
+ appears too feint. The same applies to the \verb/boldhook/ tails.
+\item[height={\em distance\/}] The distance between the baselines of
+ successive rows in the diagram is as specified. Note that as objects and
+ arrows commonly alternate, this is usually half the distance between
+ one horizontal arrow and the next.\index{height}\index{size}
+\item[hmiddle] Same as \verb/balance/.\index{balance}\index{centre}
+\item[hug] If \verb/PostScript/ is enabled, rotate labels on %vertical and
+ diagonal maps. %The text then runs {\em up\/} the verticals.
+ (Not yet implemented --- in fact the \verb/PostScript/ option currently
+ {\em always\/} does this to diagonals, but not to verticals.
+\item[htriangleheight={\em distance\/}] Set \verb/height/={\em distance\/}
+ and then \verb/width/ in such a way that the minimal $3\times5$-grid
+ will make an equilateral $\triangleright$ \ix{triangle},
+ and a $5\times7$-grid makes a regular \ix{hexagon} (page~\pageref{hexagon}).
+ If~the {\em distance\/} is not specified, the existing \verb/height/
+ is used and the \verb/width/ adjusted accordingly.
+\item[htrianglewidth={\em distance\/}] Set \verb/width/={\em distance\/}
+ and then \verb/height/ to make these figures.
+\item[inline] Use this option on individual diagrams which are being displayed
+ alongside one another, for example in \verb/$$/...\verb/$$/ or \LaTeX's
+ \verb/center/ or \verb/displaymath/ environments, when the global display
+ option is \verb/flushleft/ or \verb/centredisplay/.\index{in line}%
+ \index{flush left}\index{displaymath environment}\index{center environment}
+%\item[inlineoneliner] If the diagram has only one row, run it on in the text
+% instead of displaying~it. (This is highly questionable.)
+\item[l>={\em distance\/}] Forces arrows (particularly horizontals and
+ rotated diagonals) to have at least the specified length (default 2em),
+ to avoid getting \ix{birds' feet} instead of arrows:
+ \hbox to2.8em{$A\rTo[l>=0pt,heads=vee]B$}.
+ Sometimes this makes the arrow \ix{over-print} an object or appear displaced;
+ in this case you'll see an ``over-full \verb/\hbox/'' or ``increase
+ cell \ix{width}'' error message.\index{over-full hbox}
+\item[labelstyle={\em command\/}]\label{labelstyle}
+ Inserts this command in every label
+ text;\ixcmd\scriptstyle\index{labels}
+ \verb/\scriptstyle/ is the commonest choice apart from the default.
+\item[landscape] If \verb/PostScript/ is enabled, rotate the entire diagram
+ by $90^\circ$ anticlockwise.\index{landscape}\index{PostScript}
+ Options which refer to the extreme rows and columns are modified
+ accordingly. Useful for big diagrams with long objects or labels.%
+ \index{rotation}
+\item[large] Same as \verb/size=5em/.\index{size}\index{large}
+\item[LaTeXeqno] Use \LaTeX's running \verb/equation/ numbering
+ for an \verb/eqno/ (\emph{q.v.}).\index{equation number}
+ You can put a \LaTeX\ \verb/\label/ inside the diagram.\ixcmd{label}
+\item[lefteqno] Place the \ix{equation number}, as given by \verb/eqno/, on the
+ left of the diagram.
+\item[leftflush{[={\em width\/}]}]
+ Display the diagram on the left of the page instead of the centre,
+ {\em cf.} \verb/fleqn.sty/.\index{flush left}\index{fleqn.sty}
+ This is considered good \ix{book design} by certain publishers.
+ If {\em width\/} is given, the leftmost vertical of the diagram is,
+ if possible, aligned at that distance from the left edge of the page.
+ The idea is that the arrows, rather than the text, define the
+ visual extent of the diagram.
+ If the first column contains multiple verticals, the leftmost
+ of them is used for the alignment.
+ If there are no verticals in the leftmost column, the alignment
+ is on the left extremity of the text.
+ \index{indented style}\index{asymmetric design}
+\item[leftshortfall={\em distance\/}] The gap between the arrow (to which it
+ is applied individually) and the object on its left is as specified.%
+ \index{short fall}
+%\item[locate=$x$:$y$] Move the origin of the diagonals. Not yet implemented.
+\item[lowershortfall={\em distance\/}] Similarly below.
+\item[loose] The rows and columns of the diagram have {\em at least\/} the
+ \verb/height/ and \verb/width/ specified, but may stretch, in the same
+ way as those of an array or table.
+ This is the default, because the results are more of less right in most
+ circumstances, but this can result in gaps in the diagram, so it is
+ recommended that \verb/tight/ be used in the final version of a document,
+ with appropriate manual adjustment of the size of the grid.%
+ \index{tight}\index{loose}\index{width}
+\item[middle] The diagram is centred both horizontally
+ using \verb/balance/ and vertically using \verb/vmiddle/, {\em q.v.}%
+ \index{middle}\index{centre}\index{balance}
+\item[midhshaft {\em or\/} midshaft] Labels are centred in the shafts of
+ horizontal arrows; {\em cf.} \verb/alignlabels/.%
+ \index{aligned labels}\index{midshaft}
+ This happens automatically for in-text or one-line diagrams,
+ or if the arrow is too short to align the labels.
+%\item[midvshaft] The same for vertical arrows (doesn't work).
+%\item[missives] Enable missives.
+\item[moreoptions] Allow another list of \ix{options} in square brackets.
+ This is intended for macros like
+ %\begin{center}
+ \verb/\def\funnydiagram{\diagram[/{\em options\/}\verb/,moreoptions]}/
+ %\end{center}
+ to allow \verb/\funnydiagram[/{\em options\/}\verb/]/.
+ The arrow commands always allow any number of lists of options.
+\item[nobalance] Horizontal centring of diagrams is done with respect to the
+ extremities.\index{balance}
+\item[nohcheck] Disables certain \ix{error checking}.
+\item[nohug] Do not rotate the labels on vertical and diagonal maps, but
+ print them horizontally.
+ (Not yet implemented --- in fact the \verb/PostScript/ option currently
+ {\em always\/} rotates labels on diagonals, but not on verticals.
+\item[nooptions] Used in \verb/\diagramstyle/, this disables the parsing
+ of \ix{options}. \ixcmd\diagramstyle
+ This is for reverse compatibility in the case where several diagrams
+ begin with a square bracket.
+\item[noorigin] Disables \verb/origin/ and \verb/balance/.%
+ \index{balance}\index{origin}
+\item[nopixel] Disable the \verb/dpi/ fudge factor, {\em q.v.}, by setting
+ a very high resolution.\index{pixel size}
+\item[noPostScript] Disables the use of embedded {\sc \ix{PostScript}}
+ {\em and\/} the \verb/PS/ and \verb/noPS/ options.
+ The value, if any, is ignored, so you need only edit in/out the prefix
+ \verb/no/ whilst leaving the choice of {\sc PostScript} translator intact.
+\item[noPS] Disable {\sc PostScript} on individual maps and diagrams.
+\item[notextflow] Disables \verb/textflow/. This is needed on some individual
+ diagrams (where they appear as nouns in a sentence, for instance) when you
+ use \verb/\diagramstyle[textflow]/.\index{text flow}
+\item[noTPIC] Disable the use of TPIC \verb/\special/s.%
+ \index{TPIC}\ixcmd\special
+\item[objectstyle={\em command\/}] Inserts this command in every \ix{object}
+ text; \ixcmd\scriptstyle
+ \verb/\scriptstyle/ is the commonest choice apart from the default.
+\item[origin] Makes the width, height and depth of the whole diagram zero,
+ locating it at the baseline of the bottom row, in the centre of the leftmost
+ column.
+ This allows it to be positioned by the user; useful for mixing diagrams with
+ \LaTeX\ pictures and other graphics.
+ \index{origin}\index{picture environment}\ixprotect\LaTeX
+\item[p={\em distance or\/} pilespacing={\em distance\/}] Set the distance
+ between parallel verticals (in the same cell); that between the rows of a
+ \verb/\pile/ is half of this to allow things to be put between parallel
+ horizontals.\index{parallel arrows}\ixcmd\pile\label{pilespacing}
+\item[pixelsize={\em distance\/}] Anticipate this output resolution;
+ {\tt pixelsize=.02true mm} is the same as {\tt dpi=1270} or {\tt dpm=50000}.%
+ \index{pixel size}
+\item[portrait] Disable the \verb/landscape/ option,
+ {\em q.v.}\index{landscape}\index{portrait}
+\item[PostScript={\em author\/}]\label{PS}
+ Enable the use of embedded \ix{Adobe}
+ {\sc \ix{PostScript}} \verb/\special/ commands in a form supported by
+ {\em author\/}'s translator.
+ The following are currently recognised by the {\em author\/}s' surnames,
+ their programs or their companies.
+ The surname is the preferable form, since the programs have very similar
+ names.
+ The master \ix{FTP} source is also given.\index{anonymous FTP}
+ \begin{itemize}
+ \item (Tomas) \verb/Rokicki/, \verb/dvips/, \verb/RadicalEye/:
+ labrea.stanford.edu /pub/dvips9999.tar.Z%
+ \index{Rokicki, Tomas}\index{dvips}\index{Radical Eye}
+ \item (Stephan) \verb/Bechtolsheim/, \verb/dvitps/,
+ \verb/IntegratedComputerSystems/:\\
+ arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z%
+ \index{Bechtolsheim, Stephen}\index{Integrated Computer Systems}%
+ \index{dvitps}
+ \item (James) \verb/Clark/, \verb/dvitops/\index{Clark, James}\index{dvitops}
+ \end{itemize}
+ These are currently used to implement diagonals by rotating horizontals.
+ It is not possible to use \person{Andrew}{Trevorrow}'s Oz\TeX.%
+ \index{oztex@Oz\protect\TeX}
+\item[PS] Suppose you want to use {\sc \ix{PostScript}} for some but not all
+ maps and diagrams in the final version. Then use \verb/PS/ for each of them
+ but put \verb/\diagramstyle{noPostScript}/ in the preamble during drafting.
+\item[repositionpullbacks] The \ix{pullback} symbols
+ have a fixed position relative to the cell, irrespectively of
+ where you put the \verb/\SEpbk/ {\em etc}.~command.
+\item[righteqno] Put the \ix{equation number} (\verb/eqno/), if any,
+ on the right.
+\item[rightshortfall={\em distance\/}] Analogous to \verb/leftshortfall/.%
+ \index{short fall}
+\item[ruleaxis] Set the height of the shaft of the horizontal arrows;
+ normally \verb/\mathaxis/.
+ \index{ruleaxis}\index{horizontal arrow}\ixcmd\mathaxis
+\item[s={\em distance\/}] Same as \verb/size/.\index{size}
+\item[scriptlabels] Labels on maps are set in \verb/\scriptstyle/; useful
+ if they're rather long.
+\item[shortfall={\em distance\/}] Set the gap between arrows and the objects
+ to which they point.\index{short fall}
+%\item[showpair=\coordpair] Debug
+\item[silent] Suppress \ix{warnings} and second-pass \ix{error messages}.
+ Only use this option if either you don't care what the diagram looks like
+ or you've typeset it and looked at the result already. Not recommended.
+ \index{silent}
+\item[size={\em distance\/}] Set both \verb/height=/{\em distance\/} and
+ \verb/width=/{\em distance}.\index{size}
+ \begin{center}
+ {\bf Most geometrical problems with diagrams can be solved by enlarging
+ the cells.} Please try this and the \verb/tight/ option before contacting me.
+ \end{center}
+\item[small] Same as \verb/size=2em/.\index{size}
+\item[textflow] The text which follows the diagram in the \TeX\ source is
+ brought up to fill out the line preceding it; useful to avoid the
+ ``such that the diagram $\clubsuit$ commutes'' clich\'e.
+ This has been used for several diagrams in this manual.\index{text flow}
+\item[thick{[={\em breadth\/}]}] As \LaTeX\ \verb/\thicklines/, optionally
+ setting the width of orthogonal ruled lines. The \LaTeX\ command itself has
+ no effect within diagrams. The default rule breadth is twice that for the
+ \verb/thin/ option.\ixcmd\thicklines
+\item[thin{[={\em breadth\/}]}] This is similarly analogous to
+ \verb/\thinlines/.\ixcmd\thinlines
+ The default rule breadth is the same as that used by \TeX, namely
+ \verb/\fontdimen8\textfont3/.
+\item[tight] Force all of the cells in the grid to have exactly the \ix{size}
+ you specify.\index{tight}\index{height}\index{width}\index{loose}
+ This is recommended for the final version of a document, but
+ is not the default because it may cause \ix{over-print}ing,
+ which requires the intervention of the user to cure
+ (by setting \verb/height/ and \verb/width/); {\em cf.} \verb/loose/.
+\item[top] Analogous to \verb/bottom/, except that the top row is used.
+\item[TPIC] Use \ix{TPIC} \verb/\special/ commands instead of \LaTeX\ line
+ segments to draw diagonal lines.
+ These are supported by {\sc Textures}, \person{Tomas}{Rokicki}'s
+ \verb/dvips/ and \person{Paul}{Vojta}'s \verb/xdvi/.%
+ \ixcmd\special\index{xdvi}\index{dvips}
+\item[uppershortfall={\em distance\/}] Analogous to \verb/leftshortfall/,
+ except above.\index{short fall}
+\item[vcentre {\em or\/} vcenter] Vertical positioning is the same as with
+ \TeX's \verb/\vcenter/\ixcmd\vcenter\ixcmd{[c]}\index{centre}
+ command or \LaTeX's \verb/[c]/ option.
+ However \verb/vmiddle/ is what is usually wanted.
+\item[vmiddle] If a diagram with an odd number of rows of constant height
+ (the usual case) is placed alongside some simple text,
+ the baseline of the text will be aligned
+ with that of the middle row, irrespectively of the height and depth of the
+ labels on the top and bottom rows.
+ In general, the baseline of the diagram is half-way between those of the
+ top and bottom rows.\index{centre}
+\item[vtriangleheight={\em distance\/}] Set \verb/height/={\em distance\/}
+ and then \verb/width/ in such a way that the minimal $5\times3$-grid
+ will make an equilateral $\bigtriangleup$ \ix{triangle}
+ and a $9\times 5$-grid makes a regular \ix{hexagon} (page~\pageref{hexagon}).
+ \index{width}\index{height}
+\item[vtrianglewidth={\em distance\/}] Set \verb/width/={\em distance\/}
+ and then \verb/height/ to make these figures.
+\item[w={\em distance or\/} width={\em distance\/}] Set the distance between
+ the centre of one column and the next to the right.\index{width}
+\end{description}
+
+
+%==========================================================================
+
+\section{Application to adjunctions}
+Here is a side application of commutative diagrams to displaying
+``adjoint correspondences.'' It also illustrates the way arrows
+stretch to meet their endpoints but keep their labels centred in
+the column of arrows. The options are chosen to avoid getting
+lots of extra space around the cells, which in this case we don't want.
+Notice also the invisible ``objects'' terminating the \verb/\hLine/
+``morphism'' command.\index{adjunction}
+
+\ixcmd\hLine\ixcmd\dashv\index{empty cells}\index{invisible objects}
+
+\begin{verbdiag}[loose,height=.8em,width=0pt]
+&Z\times X&\relax\rTo^f&Y&\\
+\relax\ &&\relax\hLine&&\relax\ &\\
+&Z&\relax\rTo^{{\bf curry}(f)}&Y^X&
+\end{verbdiag}
+
+\vskip-6ex
+\diagram[loose,height=.8em,width=0pt]
+&Z \times X &\relax\rTo^f & Y \\
+\ &&\relax\hLine && \ \\
+&Z & \rTo^{\ {\bf curry}(f)\ } & Y^X \\
+\enddiagram
+
+\ixcmd\hfill
+
+If you want the $Z$s lined up, it's no good \verb/\hfill/ing the second
+one on the right, because the arrow will not stretch to meet
+it\footnote{There is no way of detecting {\em where\/} \ix{glue} is placed
+inside a box, so the \ix{stretch}ing algorithm {\em assumes\/} the object
+is centred and extends the arrow by half the amount of glue in the
+object box.}. The best solution is probably to split the object into
+two cells:
+
+\begin{verbdiag}[loose,height=.8em,width=0pt,l>=3em,midshaft]
+&Z&\relax{}\times X&\relax\rTo^f&Y&\\
+\relax\ &&&\relax\hLine&&\relax\ &\\
+&Z&&\relax\rTo^{{\bf curry}(f)}&Y^X&
+\end{verbdiag}
+
+\vskip-6ex
+\diagram[loose,height=.8em,width=0pt,l>=3em,midshaft]
+&Z & {} \times X &\relax\rTo^f & Y \\
+\ &&& \hLine&& \ \\
+&Z & & \rTo^{{\bf curry}(f)} & Y^X \\
+\enddiagram
+
+\noindent The \verb/{}/ makes sure \verb/\times/ still gets the spacing
+appropriate to a binary operator.
+
+%==========================================================================
+\section{Diagonal lines}\label{diagonals}\index{diagonal arrows}
+Whereas horizontal and vertical arrows such as \verb/\rTo/ and \verb/\dTo/
+stretch to meet their endpoints without your telling them where those are,
+the diagonals (\verb/\ruTo/) need to be told explicitly if you want to use
+them for anything other than to go across a $3\times3$ square.
+
+\ixcmd\line\ixcmd\vector\ixcmd\ruTo\ixcmd\rdTo\ixcmd\luTo\ixcmd\ldTo
+\ixcmd{()}%
+The approximate direction of the arrow stays the same ---
+right/left and up/down --- as given by its name.
+The length (and exact direction) are given by {\em positive\/} coordinates.
+As with \LaTeX's \verb/\line/s and \verb/\vector/s,
+these are given pairs of (small) positive integers in round brackets, except
+that there is no restriction on the values.
+
+\ixcmd\laf\ixcmd\lah\index{line10 and linew10 fonts}\index{height}\index{width}
+However these numbers count the {\em cells,} horizontally and vertically,
+through which the arrow passes, rather than the absolute distance.
+This means%
+ \footnote{This represents a change from version~3, in which they were
+ required to be the same for the diagonals to work. The coordinates are
+ now converted internally into distances, and then back into a rational
+ number, and the appropriate \LaTeX\ arrow characters chosen.
+ The macros {\tt\string\laf}, {\tt\string\lah}, {\em etc.} and their octal
+ arguments are now obsolete.}
+that if the \verb/height/ of the rows and the \verb/width/ of the
+columns are different, \verb/\ruTo(2,2)/ is no longer a $45^\circ$ slope.
+
+The names of the arrow commands specify the horizontal direction first,
+as a reminder that this is also the convention for coordinates.
+
+Another difference from the orthogonal arrows is the rule for where to place
+the command. Somewhat arbitrarily,%
+ \footnote{The option \texttt{diagonalbase} changes this; it is
+ intended for emulation of other diagrams packages.}
+this is
+\begin{quote}
+ in the row {\em below the upper endpoint\/} (irrespectively of the direction
+ of the arrowheads, if any), and in the adjoining column
+\end{quote}
+In the commonest case (the diagonal of a small square) this means the middle
+of the square; more generally for positive gradients (\verb/\ruTo/ and
+\verb/\ldTo/) the arrow command goes below and to the left of the upper
+endpoint, and for negative gradients (\verb/\rdTo/ and \verb/\luTo/) below
+and to the right.
+
+\ixcmd\SEpbk\ixcmd\SWpbk\ixcmd\NEpbk\ixcmd\NWpbk
+For example, here is the diagram which defines a \ix{pullback}.
+The corner symbol is a macro (\verb/\SEpbk/) placed in the same cell as the
+object, but which prints way outside it.
+$$\begin{verbdiag}
+U&&&&&\\
+&\relax\rdTo~{(x,y)}\rdTo(4,2)^x\rdTo(2,4)_y&&&&\\
+&&X\times_Z\SEpbk Y&\relax\rTo_p&X&\\
+&&\relax\dTo^q&&\relax\dTo_f&\\
+&&Y&\relax\rTo^g&Z&
+\end{verbdiag}$$
+\vskip-6ex
+\begin{diagram}
+U \\
+ &\relax\rdTo~{(x,y)} \rdTo(4,2)^x
+ \rdTo(2,4)_y \\
+ & & X\times_Z \SEpbk Y & \rTo_p & X \\
+ & & \dTo^q & & \dTo_f \\
+ & & Y & \rTo^g & Z \\
+\end{diagram}
+
+For reverse compatibility, some commands with ``\ix{compass}''
+names are provided, such as \verb/\NW/, \verb/\WNW/, \verb/\NNNW/,
+together with dotted and other variants. However
+{\em the auxiliary file \verb/extra-diagonals.tex/ is obsolete and must
+not be used.}
+
+\label{Hasse}
+The main use of diagonals other than the simplest ones is for illustrating
+\ix{order structures} (``\ix{Hasse diagrams}'').\index{posets}\index{lattices}
+Posets are trivial categories, but in practice they're the most difficult
+diagrams to draw!
+\begin{quote}
+\begin{verbatim}
+\begin{diagram}[height=2.5em,width=1.5em,abut]
+o&&&&o&&&&o&&&&o\\
+&\luLine\luLine(10,2)&&\ruLine&&\relax\luLine(6,2)&&
+\ruLine(6,2)&&\luLine&&\ruLine\ruLine(10,2)&\\
+&&o&&&&&&&&o&
+\end{diagram}
+\end{verbatim}
+\end{quote}
+
+\begin{diagram}[height=2.5em,width=1.5em,abut]
+o&&&&o&&&&o&&&&o\\
+&\relax\luLine\luLine(10,2)&&\relax\ruLine&&\relax\luLine(6,2)&&
+\relax\ruLine(6,2)&&\relax\luLine&&\relax\ruLine\ruLine(10,2)\\
+&&o&&&&&&&&o
+\end{diagram}
+
+\ixcmd\DiagonalMap\index{lams1 to 5 fonts}\index{line10 and linew10 fonts}
+The obsolete command \verb/\DiagonalMap/ is also still supported, but should
+be replaced by the new commands. If you have used this with fonts other than
+\verb/line10/ (for example \person{Michael}{Spivak}'s fonts
+\verb/lams1/ to \verb/lams5/),
+please contact me to assist with conversion.
+
+\ixcmd\raise\ixcmd\lower\ixcmd\raisebox\index{abut}%
+By default, the diagonal arrows are set on the \ix{first pass} using
+\LaTeX\ line segments.
+By~contrast, the horizontals and verticals use ruled lines wherever possible
+and are adjusted on a \ix{second pass} of the diagram
+(within the \verb/\enddiagram/ command) to meet their endpoints.
+
+When the diagonals are set during the first pass, everything happens
+within the cell where they are declared, where the algorithm has
+no access to information about the size (and exact whereabouts)
+of the objects at which the arrows are meant to point.
+Therefore the lengths of the diagonals are chosen somewhat arbitrarily,
+though the \verb/abut/ option will make them touch a \verb/\cdot/.
+
+To get better results we have to use more sophisticated methods,
+and go outside what is strictly ``standard'' \TeX.
+
+%==========================================================================
+\section{Alternative \TeX nology}
+In order to get the best results, you should be aware of the way in which
+diagonals are constructed.
+\TeX\ is ultimately only capable of positioning characters from various fonts
+and drawing black rectangles with horizontal and vertical sides: there
+is no primitive for diagonal lines or for \ix{rotation}.\index{diagonal arrows}
+This means that we have
+\begin{itemize}\ixcmd\line\ixcmd\vector
+\item either to juxtapose characters with a limited choice of angles,
+ as \LaTeX's \verb/\line/ and \verb/\vector/ commands do,
+ with the result that (because of pixel rounding
+ errors) they may not line up correctly,
+\item or to use the loophole in the \ix{DVI} language provided by the
+ \verb/\special/ command to tell some post-processing software
+ (such as \verb/dvips/) to do the work for us, thereby surrendering
+ portability,\ixcmd\special\index{dvips}
+\item or to over-print a large number of dots, making the DVI file very
+ large since at least 12 bytes are needed for each dot.
+ This is what \PiCTeX\ does.\ixprotect\PiCTeX
+\end{itemize}
+In this package options are provided to employ the first two of these methods.
+\begin{itemize}
+\item By default, characters from \LaTeX's%
+ \footnote{The code is similar to that underlying the \LaTeX\ commands,
+ but is not the same. In particular, the line segment characters are
+ equally spaced, instead of a single overlap between the last two.}
+ \verb/line10/ font are used.\index{line10 and linew10 fonts}
+ Arrowheads from this font are used irrespectively of those chosen by the
+ \verb/heads/ option.
+ The nearest%
+ \footnote{The approximation uses \ix{continued fractions}, {\em alias\/}
+ \ix{Euclid's algorithm}, with a correction.
+ There is also code for computing \ix{Pythagorean sums} (for the lengths of
+ rotated diagonals) and \ix{trigonometric functions} (currently unused).}
+ available \LaTeX\ slope is chosen, with the effect that arrows
+ may sometimes fall short or overshoot: \verb/height/ and \verb/width/
+ should be set with this in mind.\index{height}\index{width}\index{size}
+\item If the \verb/PostScript/ option is enabled, horizontal arrows are
+ used, and \verb/\special/ commands%
+ \footnote{The code is adapted from \person{Tomas}{Rokicki}'s
+ {\tt \ix{rotate.sty}}.}
+ are embedded in the DVI file which have the effect of rotating them.
+ If the DVI file is post-processed
+ by a program which does not understand Adobe {\sc PostScript} an error
+ message will probably be generated and the arrows will appear horizontal.
+
+ Currently the labels are rotated with the arrows; later there will be an
+ option either to do this or to set them horizontally.
+
+ Literal {\sc PostScript} commands are included in the DVI file
+ using \TeX's \verb/\special/ command.
+ The various DVI to {\sc PostScript} translators (page~\pageref{PS})
+ make use of this in different ways,
+ so it is necessary to specify which one you are using.
+ I~use Tomas Rokicki's \verb/dvips/;
+ if the program you use is not listed,
+ please consult its manual for the appropriate way of including literal
+ {\sc PostScript} commands and tell me the result
+ so that I can add this as an option.
+ The rotation code should be independent of the design of the translator.
+
+ It does not and cannot work with the Oz\TeX\ {\sc PostScript} translator
+ because this sorts the characters on each page by font and cannot deal
+ with \verb/\special/ commands.\index{oztex@Oz\protect\TeX}
+\item If the \verb/TPIC/%
+ \footnote{\ix{TPIC} is a graphics preprocessor for \TeX\ by
+ \person{Tim}{Morgan} which uses this set of {\tt\string\special} commands.
+ The same ones were also adopted by \ixcmd\special
+ \person{Dirk}{Grunwald} for {\tt \ix{texpictex}} and
+ by \person{Conrad}{Kwok} for {\tt \ix{eepic}},
+ which are \LaTeX\ macro packages for \ix{graphics}.}
+ option is enabled, a simpler set of \verb/\special/
+ commands is used to draw diagonal lines, but rotation is not available.
+ \verb/dvips/ and \verb/xdvi/ understand these, but other post-processors
+ may give error messages and print nothing.\index{xdvi}\index{dvips}
+\end{itemize}
+No additional macro packages or special knowledge are needed to make use of
+these methods: all of the necessary code is built in to the diagrams package.
+
+Future versions may exploit these extensions to provide other features, such
+as curved lines; indeed this is likely to be the main direction of further
+development. Other methods may also be provided.
+However
+\begin{itemize}
+\item if no extension option is selected a standard DVI file
+ (using the \verb/line10/ font) will be always generated,
+ giving an approximation to the features requested.
+\item development of new features will use \verb/PostScript/ mode,
+ without which a ``\ix{second class service}'' will be provided.
+\end{itemize}
+
+
+
+%===========================================================================
+\section{Regular figures}
+
+The difference between these options can be seen by trying to draw a
+regular \ix{hexagon}.\label{hexagon}\index{abut}\index{tight}
+$$\begin{verbdiag}[vtrianglewidth=1em,abut,tight]
+ &&\relax{}&&\relax\rLine&&\relax{}&\\
+ &\relax\ruLine&&&&&&\relax\luLine&\\
+ \relax{}&&&&&&&&\relax{}&\\
+ &\relax\luLine&&&&&&\relax\ruLine&\\
+ &&\relax{}&&\relax\rLine&&\relax{}&
+\end{verbdiag}$$
+The \verb/PostScript/ and
+\verb/TPIC/ options will make it meet up exactly, whereas the default \LaTeX\
+method does not --- though it is surprisingly accurate!
+\begin{center}
+ \begin{diagram}[vtrianglewidth=1em,abut,tight,inline,PS]
+ &&{}&&\rLine&&{}\\
+ &\ruLine&&&&&&\luLine\\
+ {}&&&&&&&&{}\\
+ &\luLine&&&&&&\ruLine\\
+ &&{}&&\rLine&&{}
+ \end{diagram}
+ \qquad\qquad
+ \begin{diagram}[vtrianglewidth=1em,abut,tight,inline,noTPIC,noPS]
+ &&{}&&\rLine&&{}\\
+ &\ruLine&&&&&&\luLine\\
+ {}&&&&\hbox{\rm\LaTeX}&&&&{}\\
+ &\luLine&&&&&&\ruLine\\
+ &&{}&&\rLine&&{}
+ \end{diagram}
+\end{center}
+The \verb/vtrianglewidth/ option and its variants set the \verb/width/
+and \verb/height/\index{width}\index{height}\index{size} of the cells,
+but the array retains the symmetry of a rectangle.
+Tesselations of \ix{triangle}s and \ix{hexagon}s
+may be drawn in this way.
+
+Drawing a regular \ix{pentagon} requires rows and columns
+of different sizes.
+It~is envisaged that only a few special ways of doing this will
+be used, so this feature is provided by a \emph{declaration}%
+ \footnote{I cannot think of a natural way of specifying the distances
+ without coding general \ix{Gaussian elimination}.
+ I'm~quite happy to accept angles expressed in degrees.}
+of the form\ixcmd\newdiagramgrid\label{grid}
+\begin{quote}
+\begin{verbatim}
+\newdiagramgrid{pentagon}%
+ {0.618034,0.618034,1,1,1,1,0.618034,0.618034}%
+ {1.17557,1.17557,1.902113,1.902113}
+\end{verbatim}
+\end{quote}
+(In fact this is already made within the source of the package.)
+The numbers in the first list specify the distances between the centres
+of the first and second columns, the second and third, and so on,
+and similarly those in the second list the distances between the
+baselines of the rows.
+The units are the specified cell \verb/height/ and \verb/width/.
+
+Once declared, the \ix{grid} is chosen by name using the obvious option.
+Note that this forces the \verb/tight/ option.\index{tight}
+\begin{verbatim}
+\begin{verbdiag}[grid=pentagon,PostScript]
+ &&&&(A*B)*(C*D)& \\
+ &&&\ruTo(4,2)^\Assl&&\rdTo(4,2)^\Assl&\\
+ A*(B*(C*D))&&&&&&&&((A*B)*C)*D&\\
+ &\rdTo_{\Id*\Assl}&&&&&&\ruTo_{\Assl*\Id}&\\
+ &&A*((B*C)*D)&&\rTo^\Assl&&(A*(B*C))*D&
+\end{verbdiag}
+\end{verbatim}
+\begin{diagram}[grid=pentagon,small]
+ &&&&(A*B)*(C*D)& \\
+ &&&\relax\ruTo(4,2)^\Assl&&\relax\rdTo(4,2)^\Assl&\\
+ A*(B*(C*D))&&&&&&&&((A*B)*C)*D&\\
+ &\relax\rdTo_{\Id*\Assl}&&&&&&\relax\ruTo_{\Assl*\Id}&\\
+ &&A*((B*C)*D)&&\relax\rTo^\Assl&&(A*(B*C))*D&
+\end{diagram}
+A similar grid for a pentagon with a vertical side is obtained by
+the \verb/gridx/ option.
+
+The grid \verb/perspective/\index{perspective} has this effect
+on the \ix{cube} on page~\pageref{cube}:
+\begin{diagram}[grid=perspective]
+ A' & &\rTo^{f'} & & B' \\
+ & \rdTo_a & & & \vLine^{h'}& \rdTo_b \\
+\dTo^{g'} & & A & \rTo^f & \HonV & & B \\
+ & & \dTo^g & & \dTo \\
+ C' & \hLine & \VonH & \rTo^{k'} & D' & & \dTo_h \\
+ & \rdTo_c & & & & \rdTo_d \\
+ & & C & & \rTo^k & & D \\
+\end{diagram}
+Without the \verb/PostScript/\index{PostScript} option the
+\ix{diagonal arrows} will not be set correctly.
+
+
+%===========================================================================
+
+\iffalse
+\section{Bent lines --- not currently implemented}
+
+The diagonal lines in the previous section were difficult to draw and
+rather ugly. Here is a prettier way of doing it:
+\begin{verbdiag}
+U&&\relax\hLine^x&&\relax\dlBentto&\\
+&\relax\rdTo^{\langle x,y\rangle}&\\
+\vLine^y&&X\times_Z\SEpbk Y&\relax\rTo^p&X&\\
+&&\relax\dTo^q&&\relax\dTo_f\\
+\relax\ruBentto&&Y&\relax\rTo^g&Z&\\
+\end{verbdiag}
+which gives:
+\begin{diagram}
+U && \hLine^x & &
+\dlBentto \\
+& \rdTo^{\langle x,y\rangle} \\
+\vLine^y && X \times_Z \SEpbk Y & \rTo^p & X \\
+&&\dTo^q && \dTo_f \\
+\ruBentto&& Y & \rTo^g & Z \\
+\end{diagram}
+
+Notice that the bent lines consist of two separate arrow commands,
+one of them an ordinary \verb/\hLine/ or \verb/\vLine/ and the other
+a ``bent'' arrow. The latter are designed to meet orthogonal lines
+exactly. To be precise,
+\begin{itemize}
+
+\item \verb/\dlBentto/, {\em etc.}, has a corner which is vertically
+positioned on the maths axis and includes a short horizontal line to
+compensate for the space at the end of \verb/\hLine/.
+{\em It~must be placed in the cell corresponding to the corner.}
+There are similar commands \verb/\ulBentto/
+for upward maps, \verb/\drBentto/ to meet lines on the right and
+\verb/\dlBent/ without an arrowhead (and all the combinations).
+
+\item \verb/\ruBentto/, {\em etc.}, has a corner which is horizontally
+positioned in the centre of the {\em next\/} cell (assuming that's
+empty). So {\em it must be placed in the cell next to the corner,
+in fact that corresponding to the edge.} The arrow is extended
+automatically.
+Again there are commands with variant names.
+
+\end{itemize}
+
+These bent line commands are defined in exactly the same way as ordinary
+horizontal and vertical arrows, except that
+\begin{itemize}
+
+\item \verb/\dlBentto/ has only a bottom half, {\em i.e.}~the leading
+tip and first filler are \verb/\empty/. The second filler and trailing
+tip are quite ordinary but the middle is special (\verb/\ldmcorner/).
+
+\item \verb/\ruBentto/, on the other hand, is a complete arrow, the
+{\em tail\/} now being a special corner.
+
+\end{itemize}
+Other middles could be defined to give rounded corners, using \LaTeX's
+{\tt circle10} font.
+\fi
+
+
+%=========================================================================
+\section{Emulation of \TeX ercise 18.46}\label{18.46}
+\ixprotect{\TeX book}\index{Exercise 18.46}\ixprotect{\TeX ercise 18.46}%
+\index{emulation}%
+This and the next section describe how to convert diagrams in your existing
+documents which were drawn using other commutative diagram macro packages to
+use this one, wherever possible changing only the preamble or macro
+file and not the text itself.
+
+Exercise 18.46 of {\em The \TeX book\/} provided some ideas for commutative
+diagrams, from which the present package was originally developed.
+The following instructions are based on what is given there,
+but if you have added other arrow macros you will have to work out how to
+re-define them by following the examples given.
+
+\ixcmd\matrix
+If you have used the {\em\TeX book\/} macros as they stand --- with
+\verb/\matrix/ enclosing the diagram --- you will first have to distinguish
+between the diagrams and real matrices.
+(If~you give arrays of numbers to the commutative diagrams package, they
+will come out rather widely spaced.)
+This process is unnecessary if you already have a macro for diagrams
+rather than matrices: just re-define that in a similar way.
+
+In~your macro file you probably have something like what follows the
+\verb/\iffalse/ command below, but with additional macros written in
+a similar way (this is the reason for setting it all out in gory detail
+in the manual rather than providing an extra input file as in the case
+of some of the ``packages'' described in the next section).
+If~you make the following additions you will be able to revert to the
+original (in the unlikely event that you are not satisfied)
+by changing this to \verb/\iftrue/.
+
+This is not particularly difficult: when, as a \TeX\ novice, I~wrote my
+Ph.D.~thesis in August 1986, I~had sixty diagrams drawn using
+the {\it\TeX book\/}
+macros, together with several others that had to be drawn by hand.
+Recovering that from an archive tape, I~recently found that all but five
+of the sixty could be converted without any change at all to the text,
+whilst the hand-drawn ones can now be drawn with the up-to-date package.
+
+\ixcmd\mapright\ixcmd\mapleft\ixcmd\mapup\ixcmd\mapdown
+\ixcmd\inputlineno
+\begin{quote}\small
+\begin{verbatim}
+\iffalse
+ % your macros, copied or adapted from TeXercise 18.46 (page 325)
+ \def\mapright#1{\smash{\mathop{\longrightarrow}\limits^{#1}}}}
+ \def\mapdown#1{\Big\downarrow\rlap{$\vcenter{\hbox{$\scriptstyle#1$}}$}}
+ %
+ \let\cdmatrix\matrix % revert to using \matrix for diagrams
+\else
+ % Replacement for the above using ...
+ \input diagrams % Paul Taylor's diagrams.
+%
+ \def\mapright#1{\global\matrixwascdtrue\rTo^{#1}\relax}
+ \def\mapleft #1{\global\matrixwascdtrue\lTo^{#1}\relax}
+ \def\mapup #1{\global\matrixwascdtrue\uTo>{#1}\relax}
+ \def\mapdown #1{\global\matrixwascdtrue\dTo>{#1}\relax}
+%
+ % Maybe you have some variants like this:
+ \def\mapupbefore#1{\global\matrixwascdtrue\uTo<{#1}\relax}
+%
+ % The following examples may also be useful:
+ \let\into\rInto
+ \def\horizadjoint#1#2{\pile{\lTo^{#1}\\\bot\\\rTo_{#2}}}
+ \def\vertadjoint #1#2{\dTo<{#1}\dashv\uTo>{#2}}
+%
+ % Here is a replacement for \matrix which gives a commutative
+ % diagram, including some extra macros for use inside them.
+ \def\cdmatrix{\bgroup
+ \edef\matrixlineno{\the\inputlineno}\global\matrixwascdfalse
+ %
+ \let\matrix\pile % inner \matrix is probably parallel horizontals
+ %
+ % re-define the diagonal arrows
+ \let\nwarrow\luTo\let\nearrow\ruTo\let\swarrow\ldTo\let\searrow\rdTo
+ %
+ \diagram[]% begin the diagram (without options)
+ \getthematrix% delete this line if you use amstex rather than plain
+ }
+ \def\getthematrix#1{#1\endcdmatrix}
+ \newif\ifmatrixwascd
+ \def\endcdmatrix{\enddiagram\egroup}
+%
+ % The following tells you whether it was actually a diagram or
+ % a matrix. Remove this when you've changed those \matrix
+ % commands in your text which should be diagrams to \cdmatrix.
+ \def\endcdmatrix{\enddiagram\egroup
+ \expandafter\message{^^JThe \string\matrix\space at lines
+ \matrixlineno--\the\inputlineno\space was really a
+ \ifmatrixwascd diagram\else matrix\fi.^^J}}
+ \let\matrix\cdmatrix \let\endmatrix\endcdmatrix
+%
+\fi
+\end{verbatim}\end{quote}
+
+The code as shown above assumes you have \TeX\ version~3 (to provide
+\verb/\inputlineno/); it prints a \verb/\message/ to tell you whether
+each \verb/\matrix/ has used any arrow commands.
+With a clever choice of this message you can even get your editor
+to make the necessary changes to the text for you in batch mode!
+Delete the extra code after you have done this.
+
+\ixprotect\AmSTeX\index{array environment}\ixcmd\endmatrix
+Beware that \AmSTeX\space uses \verb/\matrix#1\endmatrix/ instead of
+\verb/\matrix#1/.
+In~this case, delete \verb/\getthematrix/ as indicated.
+Then (where appropriate) change \verb/\endmatrix/ as well as \verb/\matrix/.
+The same applies if you have used the \verb/array/ enviroment in \LaTeX.
+
+% \begin{itemize}
+% \item \verb/\matrix{..}/ must be changed to
+% \verb/\diagram..\enddiagram/ (or~\verb/\commdiag{..}/).
+% \item \verb/\mapright/, {\em etc.,} must be changed to (or~defined
+% as) \verb/\rTo/. Positional arguments are still recognised,
+% {\em so long as they are enclosed in braces.}
+% \item \verb/\cr/ should be changed to \verb/\\/.
+% \end{itemize}
+
+%=========================================================================
+\section{Emulation of other macro packages}\label{emulate}\index{emulation}
+There are several other \TeX\ macro packages in circulation for drawing
+commutative diagrams, of varying degrees of sophistication.
+This section describes how to adapt the preamble of an existing document
+which was written to use such macros so that it prints diagrams like those
+in this manual instead.
+When you publish documents prepared in this fashion, please remember to
+acknowledge the authors of both packages, making it clear which you used to
+type the original source and which produced the finished product.%
+\index{acknowledgement}
+
+\bigskip
+\noindent{\bf \ix{American Mathematical Society}}%
+\ixprotect\AmSTeX\ixprotect\AMSLaTeX\index{amscd.sty}
+(\AmSTeX, and \AMSLaTeX's \verb/amscd.sty/): see Michael Spivak below.
+
+\bigskip
+\noindent{\bf \person{Michael}{Barr}}'s \verb/catmac/\index{catmac.tex} macros
+were based on a principle of overlapping squares.
+Whilst this is perhaps closer conceptually to the
+ categorical ideas which are being expressed, it is not possible to emulate
+ the language using the matrix syntax. The simple shape macros can, however,
+ be replaced by
+\ixcmd\square
+\begin{quote}\begin{verbatim}
+\def\square[#1`#2`#3`#4;#5`#6`#7`#8]{%
+ \diagram[]
+ {#1} & \rTo^{#5} & {#2} \\
+ \dTo<{#6} & & \dTo>{#7} \\
+ {#3} & \rTo^{#8} & {#4}
+ \enddiagram}
+\end{verbatim}\end{quote}
+ and similarly \verb/\atriangle/, \verb/\btriangle/, \verb/\dtriangle/,
+ \verb/\ptriangle/, \verb/\qtriangle/, \verb/\Atriangle/, \verb/\Ctriangle/,
+ \verb/\Driangle/, \verb/\Vriangle/,
+ \verb/\Arianglepair/, \verb/\Vrianglepair/ and \verb/\recurse/,
+ which are easy exercises.%
+\ixcmd\atriangle\ixcmd\btriangle\ixcmd\dtriangle\ixcmd\ptriangle
+\ixcmd\qtriangle\ixcmd\Atriangle\ixcmd\Ctriangle\ixcmd\Driangle
+\ixcmd\Vriangle\ixcmd\Arianglepair\ixcmd\Vrianglepair\ixcmd\recurse
+
+\bigskip
+\noindent{\bf \person{Karl}{Berry}}'s \verb/eplain/:\index{eplain.tex}
+see Steven Smith below.
+
+\bigskip
+\noindent{\bf \person{Francis}{Borceux}}'s \verb/diagram/ package uses \LaTeX's
+ \verb/picture/ environment\index{picture environment}
+ instead of \TeX\ arrays, but since it is designed in an array fashion
+ it can be interpreted.
+ Instead of that file, use
+\begin{quote}\begin{verbatim}
+\input diagrams
+\input Borceux-to-Taylor
+\end{verbatim}\end{quote}
+ This is available from the same place as (my) \verb/diagrams.tex/ itself.
+ Currently the curved, free and multiple arrows
+ are not implemented, and all size parameters are ignored.
+
+\bigskip
+\noindent{\bf \person{Eitan}{Gurari}}'s \verb/dratex/:\index{dratex}
+I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf Donald Knuth}'s Exercise 18.46:
+ see section~\ref{18.46} of this manual.
+
+%\bigskip
+%\noindent{\bf J\"urgen Koslowski}: I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf \person{Frank}{Mittelbach}}'s \AMSLaTeX\space \verb/amscd.sty/:
+see Michael Spivak below.
+
+\bigskip
+\noindent{\bf \person{John}{Reynolds}}:
+I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf \person{Kris}{Rose}}'s \XYpic\ixprotect\XYpic\
+ uses a different convention for
+ where to declare arrows, namely in the cells with their sources.
+ This convention will be supported in the next release.
+ The syntax of Rose's arrow commands is also more complicated.
+ I~do not intend to support his fonts or turning commands.
+
+\bigskip
+\noindent{\bf \person{Rainer}{Sch\"opf}}'s \AMSLaTeX\space \verb/amscd.sty/:
+see Michael Spivak below.
+
+\bigskip
+\noindent{\bf \person{Steven}{Smith}}: I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf \person{Michael}{Spivak}}'s \LAMSTeX:\ixprotect\LAMSTeX
+similar comments apply here as to Kris Rose's package.
+
+\bigskip\noindent{\bf Michael Spivak}'s \AmSTeX\space\ixprotect\AmSTeX
+ (as described in {\em The Joy of \TeX\/})%
+ \index{joy@{\em The Joy of \protect\TeX}}
+ had some very primitive commutative diagrams,\ixcmd\CD\ixcmd\endCD
+ enclosed in \verb/\CD...\endCD/.
+ \iffalse
+ Horizontal arrows were drawn with the commands
+ \verb/@</$f$\verb/</$g$/\verb/</ or \verb/@(/$f$\verb/(/$g$/\verb/(/
+ and \verb/@>/$f$\verb/>/$g$/\verb/>/ or \verb/@)/$f$\verb/)/$g$/\verb/)/,
+ where $f$ and $g$ are the upper and lower labels.
+ Vertical arrows used
+ \verb/@A/$f$\verb/A/$g$/\verb/A/ and \verb/@V/$f$\verb/V/$g$/\verb/V/
+ where $f$ and $g$ are the left and right labels.
+ These arrows were only as long as their labels.
+ A~long equals without labels could be drawn with % ??? \verb/@-/,
+ \verb/@=/ and \verb/@|/ or \verb/@\vert/. % ?? \verb/@\|/ and \verb/@\Vert/
+ for single and double lines.
+ \fi
+
+ You can obtain a dramatic improvement in these diagrams without changing
+ the text of your document by using my package with the \verb/amstex/ option.
+ Given a (complete, correct) \AmSTeX\ document, change the header to read
+ \begin{quote}\begin{verbatim}
+ \input amstex
+ \input diagrams
+ \diagramstyle[amstex]
+ \end{verbatim}\end{quote}
+ \vskip-2ex
+ If~\AmSTeX\space or \AMSLaTeX\space (\verb/amscd.sty/) had been loaded,
+ this will replace the definitions.\ixprotect\AMSLaTeX\index{amscd.sty}
+
+ You can also include \AmSTeX\space diagrams extracted from old papers
+ in new \verb/plain/ \TeX\ or \LaTeX\ documents. In~this case,
+ do not load \AmSTeX\ (unless you want it for some other reason)
+ but instead use
+ \begin{quote}\begin{verbatim}
+ \input diagrams
+ \def\CD{\diagram[amstex]}
+ \end{verbatim}\end{quote}
+ \vskip-2ex
+ to confine the changes to the meaning of the \verb/@/ character to the
+ diagrams themselves.
+ The in-line horizontal arrows will then not be interpreted.
+
+\bigskip
+\noindent{\bf \person{Timothy}{van Zandt}}'s \verb/pstricks/:\index{pstricks}
+I haven't looked in to this package yet.
+
+%=========================================================================
+\section{Frequently asked questions}\label{faq}
+\noindent{\bf Wouldn't it be better to draw it with a mouse?} No.%
+\index{mouse}\index{wysiwyg}
+
+\bigskip\noindent{\bf How do I get it?}
+See section~\ref{get}.
+
+\bigbreak\noindent{\bf Is it compatible with ...?}\index{compatibility}
+From 1986 until after version~3 of this package was announced in July~1990
+I~used \verb/plain/ \TeX,\index{plain \protect\TeX}
+whilst giving assistance to colleagues who used \LaTeX. \ixprotect\LaTeX
+In~December 1991 the local \TeX\ system was converted to use
+\person{Frank}{Mittelbach} and \person{Rainer}{Sch\"opf}'s font selection
+(NFSS1)\index{NFSS} for \LaTeX.
+Now we use \LaTeXe\ixprotect\LaTeXe, which includes NFSS2.
+
+Consequently there is a great deal of collective experience in using the
+diagrams package in all of these environments. I~do not have experience
+of \AmSTeX, \AMSLaTeX, \verb/eplain/ or commercial \TeX\ packages, but
+do not know of any reason why it should not work with them:
+please tell me if you find any difficulties.
+
+It is, regrettably, not uncommon for publishers to copy parts of
+\LaTeX\ and {\tt\ix{article.sty}}
+into their own journal and conference styles,%
+\index{journals}\index{conference proceedings}
+and not keep these up to date with respect to bug-fixes and other changes.
+Many of the bug reports which I~receive in connection with the diagrams
+package are in fact traceable to errors of this kind in publishers' styles.
+My~policy is that I~will no longer fix bugs in software from commercial
+organisations for free, but suggest some consultancy arrangement.
+If, however, it is possible to make the package more robust and circumvent
+such bugs in other software then I~will do this.
+
+\person{Richard}{Stallman}'s \verb/texinfo/\index{texinfo.tex}
+is designed for documenting other software,
+in which \TeX's special characters often have important meanings.
+For this reason many of the \verb/\catcode/s \ixcmd\catcode
+have been changed, and in
+particular \verb/@/ is used where \TeX\ uses \verb/\/.
+The usual \TeX\ meanings are restored within \verb/@tex..\Etex/.
+It~is possible to load this package without this, but you must do
+\begin{quote}\begin{verbatim}
+@catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+\end{verbatim}\end{quote}
+You must also do \verb/@catcode`@&=4/ before using \verb/@diagram/.
+Braces \verb/{}/ stay the same.
+
+Unfortunately the package does not seem to work with TeX-XeT,
+the extension to \TeX\ for typesetting Arabic and Hebrew.
+I~believe this problem is insuperable.
+
+\bigbreak\noindent{\bf Does it use any special \ix{fonts}?} No.
+One of the design
+criteria of the package is that all of the components come from the standard
+\ix{Computer Modern fonts} that come with \TeX,
+except that the diagonal arrowhead characters come from \LaTeX's
+\verb/line10/ font.\index{line10 and linew10 fonts}
+As~one user said,
+\begin{quote}
+``I agree with you in being against the use of additional fonts.
+It takes some time and experience to port, say,
+\LAMSTeX\ixprotect\LAMSTeX\space fonts to [my `personal' computer].
+I would much prefer embedded {\sc PostScript} commands.\index{PostScript}
+Custom \ix{DVI} drivers such as \verb/xdvi/,\index{xdvi} on the other hand,
+are not widely available, at least not for [my computer].''
+\end{quote}
+There are {\em optional\/} arrowheads from the \ix{AMS symbols fonts},
+which were
+\ifx\twoheadrightarrow\undefined not available\else used\fi\space
+when this copy of the manual was printed. They may be obtained by anonymous
+\ix{FTP} from \verb/e-math.ams.com/.\index{anonymous FTP}
+
+It is sometimes claimed that it is advantageous to have specially designed
+fonts in order to ensure that the components match up correctly.
+However the reason why they frequently do not is pixel-rounding,
+{\em even when the DVI-driver does this correctly according to the rules
+specified by \person{Donald}{Knuth}}.\index{pixel size}%
+ \footnote{If you don't believe me, calculate for yourself which pixels
+ are inked when a 0.4pt-wide rule is centered on the maths axis of
+ {\tt cmmi10} (2.5pt above the baseline) at 300dpi (1~point~=~4.15~pixels),
+ and compare this with characters such as $\greaterthan$ in the output of
+ {\tt gftype -i cmmi10.300gf}. The character $\succ$ in {\tt cmsy} is
+ one pixel lower than this.}
+The \verb/dpi/ option has been included to correct for this.\index{dpi}
+
+If you have other arrowhead fonts available, such as those provided by
+\person{Kris}{Rose} for \XYpic\ixprotect\XYpic\
+and \person{Michael}{Spivak} for \LAMSTeX,\ixprotect\LAMSTeX\
+you may use them if you write your own \verb/\newarrowhead/ commands.%
+\ixcmd\newarrowhead
+
+\bigbreak\noindent{\bf Corruption by \ix{electronic mail}.}\index{corruption}
+If you cannot use FTP and the route to you by electronic mail passes
+through non-\ix{ASCII} machines (such as through \ix{BITNET}),
+the file may suffer corruption.\index{EBCDIC}
+This doesn't matter very much with the manual, but the macro
+package itself has a list of characters at the top, and use of most of those
+which experience has shown to be vulnerable has been confined to the first
+section, wherever possible. Search for the word ASCII if in doubt.
+
+\bigbreak\noindent{\bf \TeX\ capacity exceeded.}
+\TeX\ was designed in the early 1980s, when RAM was measured in kilobytes,
+and does not have \ix{dynamic memory allocation}.
+Although \verb/tex.web/\index{tex.web}
+says loudly ``Don't Touch!'', the compile-time
+parameters listed on page 300 of {\it The \TeX book\/} {\em are\/} meant to be
+changeable, and \person{Donald}{Knuth} provided a mechanism
+(\verb/tex.ch/) for doing so.
+\person{Karl}{Berry}'s widely used \verb/web-to-C/\index{web-to-C}
+{\sc Unix}\index{Unix} port of \TeX\
+increases them substantially --- in accordance with the \ix{RAM} available in
+1990s hardware and that needed by 1990s software. There is nothing
+{\sc Unix}-specific about these changes: they can just as well be made in
+any other compilation environment.
+Currently it seems Oz\TeX\index{oztex@Oz\protect\TeX} has not made
+the changes --- please complain about this to its author,
+\person{Andrew}{Trevorrow}, not~me.
+
+The increase in size over version~3 is largely due to the diagnostics,
+{\em i.e.} helping you to use the package!\index{error recovery}
+
+If you get ``no room for another \verb/\dimen/'' \ixcmd\dimen
+it probably means you're using \PiCTeX\ixprotect\PiCTeX,
+which uses 110 out of the available~256; I~use~20.
+
+The process of stretching the arrows in a completed diagram is quite slow,
+but at least in this package \TeX\ spends the time doing something useful
+rather than parsing (\LaTeX\ \verb/picture/)\index{picture environment}
+\verb/\put/ commands inside macros.
+The emulation of \person{Francis}{Borceux}'s macros, for instance,
+is 50\% faster than the original.
+\person{Kris}{Rose}'s \XYpic\ixprotect\XYpic\ takes about six times
+as long to draw the same diagram.
+
+\bigbreak\noindent{\bf Default \ix{arrowheads}.} Even when you define your own
+arrows with special arrowheads, you still get get \LaTeX\ heads on diagonals.
+This is because \LaTeX\ heads are available in a variety of directions,
+but your special ones are only defined for up, down, left and right.
+To~get special heads on diagonals, it is necessary to rotate them, and to
+do that you need the \verb/PostScript/ option.%
+\index{diagonal arrows}\index{PostScript}
+
+\bigbreak\noindent{\bf Display options.} If, as was advised in earlier versions
+of this manual, you enclose the diagram in \verb/$$...$$/\ixcmd{$$}
+or a \index{displaymath environment},
+the new \ix{options} in section~\ref{options} for positioning it cannot work.
+Except in those cases where you want two or more diagrams side by side,
+or a small diagram in-line in the text, it is better to remove such
+enclosings; then you can experiment with the options using
+\verb/\diagramstyle/. \ixcmd\diagramstyle
+\LaTeX's \verb/center/ environment is,\index{center environment}
+for this purpose, {\em not\/} a display but a paragraph of text,
+with some strange results if you use the \verb/textflow/ option;%
+\index{text flow}
+in this case you should use the \verb/inline/ option\index{in line}
+on the individual diagrams to make them appear side by side.
+
+\bigskip\noindent{\bf Large \ix{gaps} between diagonals and their endpoints.}
+\index{PostScript}\index{diagonal arrows}
+This happens if you try to use the default \verb/LaTeX/ line segments
+to draw very steep or very shallow diagonals.
+Try using the \verb/PostScript/ option.
+
+By~default, the (rows and) columns of the matrix forming the diagram can
+\ix{stretch} to accommodate long pieces of text as objects and arrow labels.
+This is appropriate for rectangular diagrams and requires no user intervention.
+If,~however, you have diagonals, this stretching causes them to fall short of
+the objects to which they are meant to point, because currently they are
+(unlike the horizontals and verticals) rigid.
+\message{A message about "badly drawn diagonals" follows. It is deliberate.}%
+
+\vskip-5ex
+\begin{diagram}[loose,size=3em,notextflow,heads=LaTeX,noPS]
+ A & \rTo^{\lessthan 1_A,0_A\greaterthan} & A\times N\\
+ & \rdTo[fixed]_f&\dDotsto>h\\
+ &&B
+\end{diagram}
+An example provided by a user is shown. The solution is to use options like
+\begin{quote}
+ \verb/\begin{diagram}[tight,width=4em,height=3em]/
+\end{quote}
+See section~\ref{options} for details.\index{tight}
+Sometimes there isn't room on the page to increase the width sufficiently.
+Try using the \verb/scriptlabels/ option, or, failing that, put the whole
+diagram in the scope of a \LaTeX\ \verb/\small/ or even \verb/\tiny/
+declaration.\ixcmd\small\ixcmd\tiny
+
+This real-life example illustrates another common problem: the symbols
+$\lessthan$ and $\greaterthan$ are {\em \ix{relations}\/}
+$\langle$not~brackets$\rangle$ --- and it's not unusual to see line-breaks
+the wrong side of them, even in published, supposedly proof-read, books.
+If~you don't often use the strict arithmetical relations and find it a bore
+to type \verb/\langle..\rangle/, put the following in your macro file:%
+\ixcmd\langle\ixcmd\rangle\ixcmd{<}\ixcmd{>}\ixcmd\mathcode
+\ixcmd\mathchardef
+\begin{quote}\begin{verbatim}
+\mathcode`\<="4268 % < = \langle
+\mathcode`\>="5269 % > = \rangle
+\mathchardef\gt="313E % arithmetic
+\mathchardef\lt="313C % strict order
+\end{verbatim}\end{quote}
+\ixcmd\mbox
+As another piece of general advice, many people use \verb/\mbox/ when it is
+completely unnecessary. Amongst other things, it inhibits the reduction of
+the contents when used as a sub- or superscript.
+In~\LaTeXe, try using the \verb/\text/\ixcmd\text\ and
+\verb/\ensuremath/\ixcmd\ensuremath\ commands.
+
+%\bigskip\noindent{\bf Diagonals overprint or don't quite meet their
+%endpoints.} I'm~sorry about this: it's because I~haven't got round to writing
+%the code to stretch the diagonals in the same way as the horizontals and
+%verticals. This will be done in the next release, because I~need it for my
+%book.
+%
+%In~the case of poset diagrams, the \verb/[tight,abut]/ options should work
+%satisfactorily.
+
+\bigskip\noindent{\bf ``Badly drawn diagonals'' error message.}%
+\index{badly drawn diagonals}\index{diagonal arrows}
+This warning is given if (a)~you use diagonals which are set on the first
+pass ({\em i.e.}~\LaTeX, \ix{TPIC} or \verb/fixed/\index{fixed}) {\em and\/}
+(b)~some of the columns are significantly wider than was specified by
+the \verb/width/ or \verb/size/ option.\index{width}\index{size}
+It~indicates that the problem above, with big gaps at the ends of diagonals,
+may have occurred.
+Check this, and if necessary set the \verb/tight/ option and specify the
+necessary (increased) \verb/width/ yourself.
+Alternatively, use the \verb/PostScript/ option to get the diagonals
+set on the second pass; then they will meet their endpoints.%
+\index{PostScript}\index{width}\index{size}
+
+\bigskip\noindent{\bf Labels on arrows \ix{over-print} objects or
+\ix{arrowheads} become detached.}\index{labels}\index{decapitated arrows}
+You're trying to squeeze too much into the column: increase
+\verb/width/ (as it tells you to do). If~the object at one end is much
+longer than that at the other, the \verb/midshaft/ option may be appropriate.%
+\index{midshaft}\index{width}\index{size}
+
+\bigskip\noindent{\bf Mixed or missing \ix{arrowheads}.}
+The idea of providing the \verb/heads/\index{heads} option
+is that you should specify at the beginning of your
+document which style you want. The default is \verb/heads=LaTeX/ since this
+provides consistency between orthogonal and diagonal arrowheads when rotation
+is not available.
+
+\bigskip\noindent{\bf Undefined symbols.}%
+\index{undefined control sequence} To~use the curly and black
+arrowheads you need the \ix{AMS symbols fonts};
+if one of these (\verb/\curlyvee/, \verb/\blacktriangleleft/)%
+\ixcmd\curlyvee\ixcmd\blacktriangleleft\ is undefined,
+hit return several times to complete
+the run of \TeX\ on your document, then go back and insert
+ \ifx\usepackage\undefined
+ \verb/\input mssymb/
+ \else
+ \verb/\usepackage{amssymb}/
+ \fi
+or change the heads declaration.\index{amssymb.sty}
+
+If~you find a symbol with a \ix{meaningless name} like \verb/\CD@gF/
+\ixcmd{\CD@gF} or
+\verb/\cD@hA/ is undefined, it means that you have used internal macros
+from a previous version of the diagrams package. Please remove them:
+the names are deliberately meaningless to persuade you not to use them.
+
+\bigbreak\noindent{\bf Can you put \ix{diagrams within diagrams}?}%
+\index{nested diagrams}\ixcmd\pile\index{parallel arrows}
+Yes, but it's not often that such things are needed. Remember that
+\verb/\pile/ is used for parallel horizontals. Sometimes you may want an
+array of diagrams.
+
+During development I~found problems when the first cell of the inner
+diagram was empty, and version 3.22 resulted in \TeX's elusive
+``\ix{interwoven alignment preambles} are not allowed'' error
+({\it The \TeX book}, page 299).\ixprotect{\TeX book}
+Although I believe these bugs have now been fixed, this is a delicate area
+and it is possible that others may arise.
+
+\bigskip\noindent{\bf \verb/Missing \endcsname inserted./}\label{miss endcs}
+\index{missing \protect\verb/\endcsname/}\ixcmd\endcsname\ixcmd\the
+This can happen if a macro occurs within an option [in~square brackets].
+In~general you must ensure that such macros expand to text characters only.
+For example in \LaTeXe:\ixprotect\LaTeXe\ixcmd\usepackage
+\begin{quote}
+ \verb/\usepackage[flushleft=\mainindent]{diagrams}/
+\end{quote}
+where \verb/\mainindent/ is a \verb/\dimen/;
+in this case \verb/\the\mainindent/ will work,
+because \verb/\the/ expands the \verb/\dimen/ to its value
+({\it\TeX book}, page 214).
+Values for options to individual diagrams and arrows, or parsed by
+\verb/\diagramstyle/ instead of \verb/\usepackage/, may safely contain
+macros where appropriate.
+
+\bigskip\noindent{\bf Horizontal arrows \ix{overprint} objects.}
+\index{horizontal arrows}\ixcmd\hfill\ixcmd\hss\ixcmd\hspace\ixcmd\hidewidth
+You must not use \verb/\hfill/, \verb/\hss/, \verb/\hspace/,
+\verb/\hidewidth/ or other similar commands to try to
+alter the effective size of the object.
+
+\index{bug reports}
+\bigskip\noindent{\bf What if it still doesn't work?} If you have a problem
+which is not answered by this manual, please compile a {\em short\/} file
+containing your problem diagram and any macros (such as \verb/\Assl/ in
+section~\ref{typing}) it contains. Run it through \verb/tex/ or \verb/latex/
+to check that no definitions are missing, and include a note of the date
+and version number which you are using. Then send it by {\em electronic\/}
+mail: please do not use the telephone or postal mail.
+
+\ixcmd\scrollmode\index{error recovery}
+I am keen to know about any adverse interactions with other software,
+anything which is not well explained in this manual, or any cases of
+mis-typing in which \verb/\scrollmode/ does not get to the end of the
+document because of a diagrams error.
+
+% automatic floats
+% picture-mode inserts for braids, etc
+
+%=========================================================================
+\section{Conditions of use}\index{conditions of use}\index{copyright}
+You may freely copy and pass on this package and include it in collections
+of free software, but may not alter it or charge a fee for it.
+
+\index{registration as a user}
+Please ensure that you are registered with me as a user, so that you can be
+informed of new versions. Any \ix{electronic mail} message containing the words
+``commutative'' or ``diagram'' automatically registers you, as does quoting
+your electronic mail address when fetching it by~\ix{FTP} from
+\verb/ftp.dcs.qmw.ac.uk/.
+
+\index{acknowledgement}
+If you consider this package good enough to use, then it is good enough to
+acknowledge. After all, it is academic protocol to credit prior or
+simultaneous discovery of techniques related to your own, even if you were
+unaware of them or did not rely on them when you made your own discovery.
+Such acknowledgement is a condition of use of this package.
+However this condition is waived if use amounts to no more than five diagrams,
+each of which is either a square or a triangle.
+This acknowledgement must, of course, be removed if the document is re-typeset
+by methods which do not use this package.
+
+No permission was in the past given to use this package for
+commercial purposes.\index{commercial use}
+This includes a document whose copyright is seded by the author (for valuable
+consideration or not) to another person or body which subsequently intends to
+collect \ix{royalties} for its reproduction.
+This applies to certain journals and conference proceedings.
+Permission is now granted for its use for the production of academic
+research and \ix{textbooks}, \ix{journals} and \ix{conference proceedings},
+subject to the conditions that
+\begin{itemize}
+\item acknowledgement be given as above,
+\item an up-to-date version of the package be used for the final production,
+\item and one copy of the book be sent to me on publication in lieu of royalty,
+ at the above address.
+\end{itemize}
+Use by commercial organisations is considered (for this purpose) to be
+academic if the results are intended for publication in an academic forum,
+concern pure research and do not relate to any particular commercial product.
+
+The software may not be used for any military purpose under any circumstances.%
+\index{military use}
+
+No \ix{warranty} is given with this software.
+It is supplied ``\ix{as is}'', and neither the source nor this manual
+nor anything else shall be taken as a \ix{representation}
+that it will perform any particular function, is suitable for any particular
+purpose or is of \ix{merchantable quality}.
+In executing the software, the user implicitly accepts the above conditions
+and indemnifies\index{indemnification} the author,
+\ix{Queen Mary and Westfield College}
+and any person through whom the software was obtained, against
+\ix{liability} for direct or consequential \ix{damages}
+arising from the use of this software.
+
+{\em Whenever\/} you use computers you {\em must\/} keep at least two
+back-up copies of all of your files, with one of them well away from the
+machine, in case of fire or major failure.
+Before sending any documents for publication or to an expendive printer
+make a thorough visual check using a previewer such as \verb/xdvi/\index{xdvi}
+and a low resolution printer.
+
+%=========================================================================
+\section{Reverse compatibility}\index{compatibility}
+Compatibility with past and future versions (the numbers of some of which have
+been assigned {\em post facto\/}) is as follows. Note the difference between
+``should'' and ``must''.
+
+\begin{description}
+\item[Version 0:] See section~\ref{18.46}.
+\item[Version 1:] Horizontal arrows made to stretch to edge of cell; 1987--9.
+ \begin{itemize}
+ \item \verb/\rTo{f}{g}/ works, but \verb/\rTo f g/ doesn't: it must
+ be changed to \verb/\rTo^f_g/.
+ \item the \verb/\mkern-20mu\rTo{f}{g}\mkern-20mu/ idiom for manual
+ stretching of horizontal arrows to meet objects must be
+ removed.\ixcmd\mkern
+ \item \verb/\VerticalMapHeight/ and \verb/\VerticalMapDepth/ commands
+ are obsolete and are ignored: they should be removed.%
+ \ixcmd\VerticalMapHeight\ixcmd\VerticalMapDepth
+ \item Three- or four-argument uses of \verb/\HorizontalMap/,
+ \verb/\VerticalMap/ and \verb/\DiagonalMap/ must be
+ changed to five-argument uses or, preferably, to
+ \verb/\newarrow/.%
+ \ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap
+ \item Nested \verb/\commdiag/ commands for parallel maps must be
+ changed to \verb/\pile/.\ixcmd\commdiag\ixcmd\pile
+ \index{nested diagrams}\index{parallel arrows}
+ \item Parallel maps constructed by putting them in the rows or columns
+ before and after must be moved to the correct cell and
+ (in the case of horizontals) put in a \verb/\pile/.
+ \end{itemize}
+\item[Version 2:] Horizontal arrows made to stretch to meet objects and
+``\ix{superscript}'' labels introduced; versions with banners
+dated September to December 1989.
+ \begin{itemize}
+ \item \verb/&\rTo\across3&/ now works more accurately than in
+ version~3, but should be changed to \verb/&&\rTo&&/.%
+ \ixcmd\across
+ \item {\raggedright The parameters \verb/\HorizontalMapLength/,
+ \verb/\VerticalMapHeight/, \verb/\VerticalMapDepth/,
+ \verb/\VerticalMapExtraHeight/, \verb/\VerticalMapExtraDepth/
+ and \verb/\DiagonalLineSegments/ are obsolete and are ignored:
+ they should be removed.\par}%
+ \ixcmd\HorizontalMapLength\ixcmd\VerticalMapHeight
+ \ixcmd\VerticalMapExtraDepth\ixcmd\DiagonalLineSegments
+ \ixcmd\VerticalMapDepth\ixcmd\VerticalMapExtraHeight
+ \item The \ix{labels} on southeast and northwest \ix{diagonal arrows}
+ have changed their position.
+ \verb/^/~and \verb/_/\ixcmd{^}\ixcmd{_} previously meant
+ left and right respectively for diagonals; they now mean ---
+ more logically --- above and below; \verb/</ and \verb/>/ are
+ used for left and right, respectively. Unqualified labels
+ are positioned as they originally were: the first above and
+ the second below.
+ \item Diagonal lines are constructed differently; user-defined
+ \ix{diagonal arrows} should be replaced with \verb/\ruTo(2,4)/
+ {\em etc.,} and explicit movement of them removed.
+ \item Bent lines, with \verb/\dlBent/ and \verb/\ruBentto/, currently
+ do not work. Instead \verb/\HmeetV/ must be
+ placed at the corner. Bent or half arrows will be reintroduced
+ later but with a different naming convention.%
+ \index{bent lines}\ixcmd\dlBent\ixcmd\ruBentto\ixcmd\HmeetV
+ \end{itemize}
+\item[Version 3:] Vertical maps also made to stretch to meet objects; widely
+circulated with banners dated July 1990 to April 1992.
+ \begin{itemize}
+ \item \verb/\HorizontalMap/, \verb/\VerticalMap/ and
+ \verb/\DiagonalMap/ should be replaced by \verb/\newarrow/
+ declarations.%
+ \ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap
+ \item Negative spacing around \ix{wide objects} (used to avoid the
+ stretching of the diagram which they caused) should be
+ removed, and the \verb/tight/ option used instead.
+ This is because objects are now allowed to extend into the
+ neighbouring columns, with a check that there is enough space.
+ \item Enclosing \verb/$$...$$/ or display environments should be
+ removed, as they prevent the new display positioning options
+ from working.\ixcmd{$$}\index{display options}
+ \item Diagonal arrows with ``\ix{compass}'' names,
+ particularly the ones from \verb/extra-diagonals.tex/
+ \index{extra-diagonals.tex}\index{diagonal arrows}
+ (which must not be used any more),
+ should be changed to the new geometrical names.
+ \item The command names \verb/\lt/ and \verb/\gt/ (for $\lessthan$ and
+ $\greaterthan$) have been removed, at the request of a user
+ who considered these to be unreasonable names for internal
+ commands.\ixcmd\lt\ixcmd\gt\ixcmd{>}\ixcmd{<}%
+ \ixcmd\greaterthan\ixcmd\lessthan
+ \item The arrow commands with names like \verb/\rArr/ and \verb/\rTo/
+ now all use the default \ix{arrowheads}; the original behaviour
+ (\verb/\rArr/ used \verb/LaTeX/ and \verb/\rTo/ used \verb/vee/)
+ may be restored by changing a switch \verb/\iffalse/ in the
+ final section of the source.\ixcmd\rArr\index{vee arrowheads}%
+ \ixprotect{\LaTeX\ arrowheads}
+ \end{itemize}
+\item[Version 4:] Advertised in September 1992.
+ \begin{itemize}
+ \item The default arrowhead has been changed from \verb/vee/ to
+ \verb/LaTeX/ to ensure consistency if \verb/PostScript/
+ is not used.\index{arrowheads}
+ \item Explicit movement of \ix{diagonal arrows} vertically using
+ \verb/\raise/, \verb/\lower/ or \verb/\raisebox/
+ \ixcmd\raise\ixcmd\lower\ixcmd\raisebox
+ or horizontally by spacing commands or otherwise
+ will not work for the diagonals which are adjusted to meet
+ their endpoints.\index{stretch}
+ For the time being use either of the options
+ \verb/noPS/ or \verb/fixed/\index{PostScript}\index{fixed}
+ to suppress adjustment.
+ A~new option \verb/crab/\index{crab} will be introduced
+ shortly to allow \ix{sideways movement of arrows}.
+ \end{itemize}
+\item[Future:] The following are high on the agenda:
+ \begin{itemize}
+ \item Placing of labels at the head and tail of arrows.
+ \item Curved arrows (\verb/PostScript/ only).
+ \item Sideways movement of arrows.
+ \item An~alternative way of specifying the positions of arrows,
+ namely at the tail with signed relative co-ordinates for
+ the head, to allow emulation of
+ \person{Kris}{Rose}'s \XYpic\ixprotect\XYpic\ and
+ \person{Michael}{Spivak}'s \LAMSTeX\ixprotect\LAMSTeX.
+ \item Shifting objects, by specifying the left or right width.
+ \item Option to rotate labels on diagonals or leave them horizontal.
+ \item Application to electronic circuit diagrams.
+ \end{itemize}
+\end{description}
+
+Suggestions for improvements and further applications ({\em e.g.\/} proof nets,
+Petri nets and circuit diagrams) are welcome.
+
+%==========================================================================
+
+\section{Availability}\label{get}
+
+
+The diagram package is currently available as a single
+112kb\footnote{Without comments; the development version is about 300kb.}
+printable \TeX\ source file which is compatible with both \LaTeX\
+and {\tt plain} \TeX. It loads the \LaTeX\ {\tt line10} font as \verb/\tenln/
+(its \LaTeX\ name) and also defines some (exotic) arrow commands in terms
+the AMS symbols, but if these are to be used then the
+ \ifx\usepackage\undefined
+ file \verb/mssymb/
+ \else
+ package \verb/amssymb/
+ \fi
+must be loaded separately.
+
+\index{anonymous FTP}
+It~is easiest to get this package by anonymous \ix{FTP}.
+This stands for ``\ix{file transfer protocol}'';
+it is a way in which you can log on interactively to my computer and fetch
+(some of) my files. A~very large amount of software is now freely available
+by this method, so it is well worth putting pressure on your system
+administrator to get your machines connected.
+
+The authoritative version of the package may be found at the FTP address
+\begin{quote}
+{\tt ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams}
+\end{quote}
+It may also be obtained from the \ix{Comprehensive \TeX\ Archive Network}
+(\ix{CTAN)} at any of the sites
+\begin{quote}
+ \begin{tabular}{llll}
+ ftp.adfa.oz.au &Australia& /pub/tex/ctan\\
+ ftp.cs.rmit.edu.au &Australia& /tex-archive\\
+ ftp.muni.cz &Czech Republic& /pub/tex/CTAN\\
+ ftp.tex.ac.uk &England& /tex-archive\\% (/pub/tex /pub/archive)\\
+ ftp.loria.fr &France& /pub/unix/tex/ctan\\
+ ftp.uni-bielefeld.de &Germany& /pub/tex\\
+ ftp.uni-stuttgart.de &Germany& /tex-archive (/pub/tex)\\
+ ftp.dante.de &Germany& /tex-archive\\% (/pub/tex /pub/archive)\\
+ ftp.center.osaka-u.ac.jp &Japan& /CTAN\\
+ wuarchive.wustl.edu &Missouri, USA& /packages/TeX\\
+ ftp.cs.ruu.nl &Netherlands& /pub/tex-archive\\
+ ftp.duke.edu &North Carolina, USA& /tex-archive\\
+ sunsite.unc.edu &North Carolina, USA& /pub/packages/TeX\\
+ ftpserver.nus.sg &Singapore& /pub/zi/TeX\\
+ nic.switch.ch &Switzerland& /mirror/tex\\
+ dongpo.math.ncu.edu.tw &Taiwan& /tex-archive\\
+ ftp.uu.net &Virginia, USA& /pub/text-processing/TeX\\
+ ftp.shsu.edu &Texas, USA& /tex-archive\\% (/pub/tex /pub/archive)\\
+ \end{tabular}
+\end{quote}
+where the root of the archive is the given directory and my package is
+\begin{quote}
+ {\tt macros/generic/diagrams/Taylor/diagrams.tex}
+\end{quote}
+relative to this.
+
+The ``\verb/archie/''\index{archie} utility is extremely useful as a way
+of locating software and other information on the \ix{Internet}.
+You just give it (part of) the name of the file you want
+({\em e.g.}~``diagram'') and it will tell you where files of that name
+are located in numerous public \ix{FTP} archives around the world.
+Beware, however, that many of them are just ``\ix{magpies' nests}'' ---
+they collect things from other places without verifying their
+authenticity or keeping them up to date.\index{anonymous FTP}
+
+If you are unable to use FTP it is possible to get the package
+(and indeed anything you can get by ftp) by electronic mail.
+I~do not recommend this method, because it is susceptible to
+corruption, and you have to concatenate the files and remove the
+mail headers. Send the following message to
+\verb/<ftpmail@doc.ic.ac.uk>/:
+\begin{quote}
+\begin{verbatim}
+open ftp.dcs.qmw.ac.uk
+cd pub/tex/pt/diagrams
+get diagrams-V4-news
+get diagrams.tex
+get diagrams-manual.tex
+quit
+\end{verbatim}
+\end{quote}
+You will get an acknowledgement message first, followed by the files,
+and finally a job log file.
+The files may be split up into several messages.
+%in which case the \verb/Subject:/
+%lines will begin \verb/[part /$n$\verb/ of /$m$\verb/]/.
+%
+\iffalse Other availability information will be added later, after checking.
+Also available from
+archive.cs.ruu.nl [131.211.80.17] /pub/TEX/DIAGRAM/diagrams.tex
+%
+Other \TeX\ FTP sources:
+e-math.ams.com [130.44.1.100] for AMS symbols and AMS-\LaTeX.
+ftp.cs.umb.edu [192.12.26.23] for Karl Berry's web-to-C \TeX\ port.
+\fi
+
+\makeatletter\pt@input{manual.ind}{}{}
+%============================================================================
+\end{document}
+
+% Ideas for future editions of this manual:
+
+% Use bezier.sty and the origin option in a picture environment to draw
+% braids on top of a diagram - Robert Seely had an example.
+
+% I haven't composed the example yet.
+%\newif\ifHaveBezier\HaveBeziertrue
+%\pt@input{bezier.sty}%
+%{^^JYou don't have bezier.sty. That's a pity, because I wanted to show you an
+%^^Jexample of drawing curved lines on top of a diagram. We'll do without it.}%
+%\HaveBezierfalse
+
+% Use \matrix or array environment to put long objects on two lines within
+% a diagram. LFPP.tex has a suitable example.
+
+% Commutative diagram of posets. Example in my thesis (fig 2.2.13) (5.2.2)
+
+% new sections:
+% other TeX macros of mine
+% resource usage
+% list of errors
+% how to draw {\em nice\/} diagrams
+
+% FTP instructions \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/msg1992.html b/macros/generic/diagrams/taylor/msg1992.html
new file mode 100644
index 0000000000..14158b7260
--- /dev/null
+++ b/macros/generic/diagrams/taylor/msg1992.html
@@ -0,0 +1,236 @@
+
+
+
+
+
+
+
+
+<title> Commutative Diagrams in TeX</title>
+
+<h1 align="center">Commutative Diagrams in TeX </h1>
+
+<h3 align="center">Paul Taylor </h3>
+
+<h3 align="center">September 1992 </h3>
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+<h2>Message sent to registered users in September 1992</h2>
+
+<div class="p"><!----></div>
+This message brings news of the development of my <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;package for
+drawing "commutative" diagrams, which is now widely used in the
+category theory and theoretical computer science communities. It is
+being sent directly to all of the users I know of (who have requested
+it by electronic mail or FTP from me, or asked questions about it),
+but as I know the package has been passed on, I would be grateful if
+you would <em>copy this message to anyone to whom you have given
+ the package itself.</em>
+
+<div class="p"><!----></div>
+The package was originally advertised on the "types" and
+"categories" electronic mailing lists in July 1990. In the following
+eighteen months some fixing of bugs took place, but there was little
+substantial change.
+
+<div class="p"><!----></div>
+Since April 1992, I have re-written most of the code, largely with a
+view to improving the geometrical layout of the diagrams. Before
+completing this work and calling it version 4, I would like some
+feedback from users.
+
+<div class="p"><!----></div>
+One of the areas which I have neglected in the past (largely because
+<span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;makes it so difficult) is diagonal arrows. The code for drawing
+these using <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;line segments has been re-written: now the closest
+available slope is chosen automatically and the commands have names
+similar to the horizontals and verticals.
+
+<div class="p"><!----></div>
+However to do a better job of diagonals (and in future to support
+curved lines) some extension to <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;is needed. Being extensions they
+are necessarily not standard. Three possibilities are:
+
+<ul>
+<li> additional fonts (as, for example, used by Spivak's Lamstex).
+ However my experience of design-size fonts and linear logic symbols
+ suggests that for users without expert knowledge or control of their
+ local <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;systems this is more trouble than it's worth.
+<div class="p"><!----></div>
+</li>
+
+<li> PostScript is, I believe, now almost universally used as the
+ language in which <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;documents are sent to a printer. PS commands
+ can be embedded in DVI files and incorporated in the PS translation
+ without extra system or user files or any user intervention. This is
+ to some extent dependent on which DVI<font face="symbol">®</font
+>PS translator is used. In
+ the new version this is exploited in an option to implement
+ diagonals by rotating horizontals, which works with Tomas Rokicki's
+ "dvips".
+<div class="p"><!----></div>
+</li>
+
+<li> TPIC is a graphics extension of <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;which uses a simpler set
+ of embedded commands. These can be used to draw diagonal lines and
+ curves but not to perform rotations; they are, however, understood
+ by Vojta's "xdvi" as well. Another option in the new version uses
+ these to draw diagonal lines.
+<div class="p"><!----></div>
+</li>
+</ul>
+Besides diagonals, the code for adjusting horizontal and vertical
+arrows has been completely rewritten and does a much better job of the
+geometry. Many of the problems with alignment, positioning and gaps
+have been fixed automatically, and greater control is given to the
+user to adjust those which cannot be. There are also several new
+options for the placement of the finished diagram on the page.
+
+<div class="p"><!----></div>
+Arrow commands are now declared in a much simpler way. The declaration
+
+<pre>
+&nbsp;\newarrow{CrossedInto}{hook}-+-&#62;
+
+</pre>
+is now all that is needed to define the example <tt>\rCrossedInto</tt>
+in the manual, along with the corresponding left, down, up and
+diagonal commands. Another option makes a consistent selection of
+arrowheads for all arrows, from a choice of vee, LaTeX, curlyvee,
+triangle and blacktriangle.
+
+<div class="p"><!----></div>
+So much for selling you the new version. The reason for mailing you
+and asking for comments before completing what I intend to do for
+version 4 is that I want to get feedback on the following questions:
+
+<div class="p"><!----></div>
+
+<ul>
+<li> Can you use FTP (file transfer protocol)? This is the easiest
+ method of distribution for me and for you, and there is now a huge
+ volume of public domain software available by this method. My
+ archive is called <tt>ftp.dcs.qmw.ac.uk</tt>
+ and the diagrams package is in the directory /pub/tex/contrib/pt/diagrams.
+ Please try to fetch the new version and manual by this method.
+<div class="p"><!----></div>
+</li>
+
+<li> If you can't use FTP, and your electronic mail passes via
+ non-ASCII machines (particularly BITNET), what characters tend to
+ get corrupted? The new version uses a restricted character set to
+ avoid this problem.
+<div class="p"><!----></div>
+</li>
+
+<li> Do you have available for printing final copy a printer which
+ understands Adobe PostScript, for example an Apple or Sun
+ laserwriter? Who is the author of the DVI-&#62; PS translation program
+ you use? Please fetch the new version, try the PostScript option and
+ tell me if you have any difficulty printing. (You may have to change
+ the <tt>\verbatim@ps@special</tt> macro if you don't use Rokicki's
+ dvips: if so, please send me details.) You can preview with a PS
+ previewer such as PageView under OpenWindows or
+ GhostView/GhostScript under Xwindows.
+<div class="p"><!----></div>
+</li>
+
+<li> Do your DVI translators and previewers understand TPIC
+ <tt>\special</tt>s (as used in eepic.sty)? Please try the TPIC
+ option. I would like to know whether it is worth putting effort into
+ PostScript, TPIC or some other method.
+<div class="p"><!----></div>
+</li>
+
+<li> Have you defined your own arrow commands using
+ <tt>\HorizontalMap</tt>, <tt>\VerticalMap</tt> or <tt>\DiagonalMap</tt>?
+ Please use "grep alMap *.tex *.sty" or some similar command to
+ find out, and tell me if you have used any components other than
+ those in the source of version&nbsp;3. It is in your interests to do
+ this, because <tt>\newarrow</tt> defines arrow commands in a
+ different way.
+<div class="p"><!----></div>
+</li>
+
+<li> Please tell me if you have any difficulty adapting to the new
+ version, or any general comments about doing so which might be of
+ benefit to other users.
+<div class="p"><!----></div>
+</li>
+
+<li> Other comments: have you used other packages for drawing
+ diagrams? Do you have applications for my package other than the
+ categorical diagrams for which it was designed? What do you see as
+ the major limitations of the package? What persuaded you to use it,
+ or not to use it?
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
diff --git a/macros/generic/diagrams/xypic/CATALOG b/macros/generic/diagrams/xypic/CATALOG
new file mode 100644
index 0000000000..0d99647ab7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/CATALOG
@@ -0,0 +1,21 @@
+Name: xypic
+Version: 3.8.9 <2013/10/06>
+
+Description: Xy-pic is a package for typesetting graphs and diagrams.
+ It is structured as several modules, each defining a custom notation for
+ a particular kind of graphical object or structure. Example objects are
+ arrows, curves, frames, and colouring/rotation on drivers that support
+ it; these can be organised in matrix, directed graph, path, polygon, knot,
+ and 2-cell structure. Xy-pic works with most formats, including LaTeX,
+ AMS-LaTeX, AMS-TeX, and plain TeX, and has been used to typeset
+ complicated diagrams from many application areas including category
+ theory, automata theory, algebra, neural networks, and database theory.
+
+Keywords: diagram, picture, graph, arrow, curve, commutative diagram,
+ knot, braid, two-cell, cartesian coordinates, tree.
+
+Author: Kristoffer H. Rose
+Problems-To: xy-pic@tug.org
+Address: IBM T.J.Watson Research Center, PO Box 704, Yorktown Heights, NY 10598, USA
+
+<URL: http://xy-pic.sourceforge.net>
diff --git a/macros/generic/diagrams/xypic/COPYING b/macros/generic/diagrams/xypic/COPYING
new file mode 100644
index 0000000000..d159169d10
--- /dev/null
+++ b/macros/generic/diagrams/xypic/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/macros/generic/diagrams/xypic/FONTCOPYING b/macros/generic/diagrams/xypic/FONTCOPYING
new file mode 100644
index 0000000000..a868741bb6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/FONTCOPYING
@@ -0,0 +1,94 @@
+ FONT GENERAL PUBLIC LICENSE EXCEPTIONS
+ Version 1, October 1998
+
+ Copyright (C) 1998 Kristoffer H. Rose <krisrose@tug.org>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ Software for typesetting frequently includes fonts of characters.
+If this software is covered by the GNU General Public License, then a
+document, created as a result of running the software, which also
+contains the fonts (for example for presentation purposes), is a
+"derived" work. This license grants specific rights to separately
+distribute fonts in order to make it clear that documents containing
+the fonts (with the purpose of printing and viewing the characters and
+images depicted in the document) are permitted.
+
+ Exception Terms and Conditions
+
+ 0. This License applies to any font or other work which contains a
+notice placed by the copyright holder saying it may be distributed
+under the terms of the GNU General Public License, either version 2 or
+a later version, below the "License", with the explicit mention that
+the exceptions of this Font General Public License Exceptions, below
+the "Exceptions", apply.
+
+The "Font", below, refers to just the single file that has the
+explicit mention that these Exceptions apply.
+
+All other terms used are those of the License.
+
+ 1. You may distribute any unmodified version of the Font without the
+requirement that the full remaining source of the Program is enclosed.
+
+An intact copy of the Font file with the same name, insofar as the
+environment where the file is stored permits this, is considered as an
+unmodified version.
+
+ 2. You may distribute files with the Font translated to another
+format provided that the following two conditions are met:
+
+ a) The name of the Font, if it appears, must remain the same or be
+ as close to the original name as the format permits.
+
+ b) You accompany the file by a prominent notice about the lack of
+ warranty for the Font as detailed in the GPL.
+
+ 3. You may include fragments of the Font, or of the Font translated
+to another format, in documents or other work with the purpose of
+making it possible to view or print the document, provided that you
+accompany the document with a prominent notice about the lack of
+warranty of any kind for the Font, as detailed in the GPL.
+
+ End of Exception Terms and Conditions
+
+ Appendix: How to Apply These Terms to Your New Fonts
+
+ If you develop a new font or an icon as part of a program, and you
+want it to be of the greatest possible use to the public, the best way
+to achieve this is to make it free software which everyone can
+redistribute and change under these terms. However, in order to avoid
+encumbering the use of your font in printable and viewable formats,
+you may want to include this exception notice with it.
+
+ To do so, attach the following notices to the font source file. It
+is safest to attach them to the start of the source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+ <one line to give the font's name and a brief idea of what it does.>
+ Copyright (C) yyyy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see http://www.gnu.org/licenses/.
+
+ Special permission is granted to distribute this font separately
+ under the terms of the Font General License Exceptions enclosed
+ with this program.
+
+Otherwise follow the instructions in the appendix of the GNU General Public
+License.
diff --git a/macros/generic/diagrams/xypic/INSTALL b/macros/generic/diagrams/xypic/INSTALL
new file mode 100644
index 0000000000..a2ce4eb223
--- /dev/null
+++ b/macros/generic/diagrams/xypic/INSTALL
@@ -0,0 +1,233 @@
+-*-text-*- $Id: INSTALL,v 3.23 2011/03/31 06:04:02 krisrose Exp $
+
+
+ ================================================
+ INSTALLING THE Xy-pic DIAGRAM TYPESETTING MACROS
+ ================================================
+
+
+This file explains how you install the runtime files in the
+distribution of Xy-pic. See `README' for general information.
+
+Contents:
+
+-1- Copyleft
+-2- Overview of files and where they should be installed
+-3- Bugs & comments & where to get help
+
+
+---------------------------------------------------------------------------
+-1- COPYLEFT
+---------------------------------------------------------------------------
+
+Note that the entire Xy-pic package is distributed with copyleft:
+
+ Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+ Copyright (c) 1994-2011 Ross Moore <ross.moore@mq.edu.au>
+
+ The Xy-pic package is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The Xy-pic package is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this package; if not, see http://www.gnu.org/licenses/.
+
+What this means is that if you install Xy-pic then you should (1) make
+sure that the file `COPYING' is accessible to the users, and (2) be
+prepared to provide Xy-pic (including sources including of your
+modifications) to any of your users that request it (you may charge a
+fee for this if you are so inclined).
+
+Note: Some option files may be copyrighted by other people and use a
+different (more relaxed) license but the conditions remain the same
+for the entirety of Xy-pic.
+
+
+---------------------------------------------------------------------------
+-2- OVERVIEW OF FILES AND WHERE THEY SHOULD BE INSTALLED
+---------------------------------------------------------------------------
+
+In this section we explain in 10 steps where the different groups of
+Xy-pic files in the `run' and `doc' distribution should be installed.
+For each file category we indicate the location recommended by TDS,
+the TeX Directory Standard (as formed by a TUG working group of that
+name).
+
+
+IMPORTANT
+---------
+If you have an older system (more than 10 years) then these
+instructions may not be suitable. Go to the source directory
+http://xy-pic.cvs.sourceforge.net/viewvc/xy-pic/src/Historic/
+where we keep some older instructions, or ask on the mailing list.
+
+
+Step 1. Availability & License
+------------------------------
+These eight files contain general information and should be installed
+in a publicly readable place:
+
+ README generic information on Xy-pic
+ CATALOG version information and summary
+ TRAILER announcement and availability
+ INSTALL how to install (this file)
+ MANIFEST list of all files
+ VERSIONS the RCS version ids of all source files
+ COPYING GNU General Public License
+ FONTCOPYING Special license for fonts
+ Xy-pic.html HTML source of Xy-pic home page
+ Xy-logo.png Xy-pic logo (gotta have one of those)
+
+TDS directory: texmf/doc/generic/xypic
+
+
+Step 2. Macros
+--------------
+Files `texinputs/*' are TeX and LaTeX macro files that must be
+installed in a place which TeX and LaTeX will search (e.g., with un*x
+TeX, a directory users include in the TEXINPUTS environment variable).
+
+TDS directory: texmf/tex/generic/xypic
+
+
+Step 3. TeX Font Metric
+-----------------------
+Files `texfonts/*.tfm' should be installed in a directory that TeX
+will search for fonts (e.g., with un*x TeX, a directory users include
+in the TEXFONTS environment variable).
+
+TDS directory: texmf/fonts/tfm/public/xypic
+
+
+Step 4. METAFONT Sources
+------------------------
+Files `mfinputs/*.mf' should be installed in some directory where the
+METAFONT program will search for them (e.g., with un*x TeX, a
+directory included in the MFINPUTS environment variable).
+
+NOTE: The METAFONT source files are only useful on installations where
+the printer driver and previewer can utilise them to generate the
+required bitmap fonts `on-line'. If this is possible on your
+installation then please use it: it saves substantial amounts of space
+and means that you will automatically use fonts optimised for each
+printer (provided evrything is correctly set up, of course).
+
+TDS directory: texmf/fonts/source/public/xypic
+
+
+Step 5. PostScript Type1 Fonts
+------------------------------
+Files `type1/*.pfb' contain versions of the Xy-pic fonts in special
+PostScript form that may be useful on some installations. They should
+be installed where the applications using them look for such fonts (if
+used with DVIPS then the `ps/xypic.map' file from the next group
+should also be installed).
+
+NOTE: Some installations, notably teTeX 0.4, will PREFER using these
+fonts over the METAFONT-generated equivalents (IMHO this is a bug in
+the MakeTeXPK script). On those systems we recommend that you ALSO
+install the PK fonts to circumvent the problem.
+
+IMPORTANT: Make sure that you do not have any old Xy-pic PostScript
+`xy*.pfa' fonts floating around in your system - search for and remove
+all files named `xy*.pfa' when you have installed the new fonts. One
+common way old (and wrong) fonts is manifest is when some arrowheads
+appear skewed or too thin.
+
+TDS directory: texmf/fonts/type1/public/xypic
+
+
+Step 6. PostScript Font Metric Files
+------------------------------------
+
+Files `pfm/*.pfm' are special files for some font handling software.
+Install them if you need them.
+
+TDS directory (usually): texmf/fonts/pfm/public/xypic
+
+
+Step 7. Adobe Font Metric Files
+-------------------------------
+Files `afm/*.afm' are special files for the Adobe Type Manager.
+Install them if you need them.
+
+TDS directory (usually): texmf/fonts/afm/public/xypic
+
+
+Step 8. PostScript Header Files
+-------------------------------
+Files `ps/*' contain PostScript header files. If you plan to use
+the PostScript extension option then you should copy these files to a
+place where your PostScript DVI driver will find them.
+
+TDS directory (usually): texmf/dvips/xypic
+
+
+Step 9. PostScript Font Map Files
+---------------------------------
+Files `map/*' contain PostScript and PDF font mappings that link each
+font to the used encoding.
+
+TDS directory (usually): texmf/fonts/map/dvips/xypic
+
+
+Step 10. PDF Font Encoding Files
+-------------------------------
+Files `enc/*' contain PDF encoding files (that name each character in
+the special Xy-pic fonts). If you plan to use the PDF backend then
+you should copy these files to a place where PDFTeX will find them.
+
+TDS directory: texmf/fonts/enc/dvips/xypic
+
+
+Step 11. Documentation
+----------------------
+The documentation is provided in Adobe PDF files.
+
+ doc/xyguide.pdf User's Guide for everyone.
+ doc/xyrefer.pdf Reference Manual for experienced users
+
+The source code documentation is also included.
+
+ doc/xysource.pdf TeXnical documentation for TeXperts
+ doc/xypdf.pdf TeXnical details about PDF generation
+ doc/xy*src.tar.gz the actual source files
+
+TDS directory: texmf/doc/generic/xypic
+
+
+That's all.
+
+
+---------------------------------------------------------------------------
+-3- BUGS & COMMENTS & WHERE TO GET HELP
+---------------------------------------------------------------------------
+
+We will appreciate reports on any problems you may encounter and
+opinions you have on how the usefulness of Xy-pic can be improved.
+Please report using either
+
+ Electronic mail (Internet): xy-pic@tug.org [preferred]
+
+ Paper mail: Kristoffer H. Rose
+ IBM T.J.Watson Research Center
+ P.O.Box 704
+ Yorktown Heights, NY 10598
+ USA
+
+ W3 <URL: http://sourceforge.net/projects/xy-pic/>
+
+---------------------------------------------------------------------------
+
+This is the end of INSTALL. We hope you'll enjoy Xy-pic!
+
+ -- Ross Moore and Kristoffer Rose
+
+---------------------------------------------------------------------------
+
diff --git a/macros/generic/diagrams/xypic/MANIFEST b/macros/generic/diagrams/xypic/MANIFEST
new file mode 100644
index 0000000000..fe61510f86
--- /dev/null
+++ b/macros/generic/diagrams/xypic/MANIFEST
@@ -0,0 +1,232 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+b96441955c41494658ad110a58004f28 xy-3.8.9/texfonts/xylubt12.tfm
+9ed32077e353fd45d4be79b566b34102 xy-3.8.9/texfonts/xyline10.tfm
+c277d5c81d76bb6a6a508cddd7f2d554 xy-3.8.9/texfonts/xyeubt11.tfm
+b85db7c9d93062a9dc2a06f1ecd2a853 xy-3.8.9/texfonts/xyqc10.tfm
+ed83ddbc3136e3e7310f9f4354939703 xy-3.8.9/texfonts/xyeuat10.tfm
+ed83ddbc3136e3e7310f9f4354939703 xy-3.8.9/texfonts/xyeubt10.tfm
+9d465699a13fb7706bf38bc873e9526c xy-3.8.9/texfonts/xycmbt12.tfm
+f082096f0df4b6a9cf22d7d15e6e8cfa xy-3.8.9/texfonts/xyeubt12.tfm
+50246cc71b0635b0ba0a5c10a0bf4257 xy-3.8.9/texfonts/xybtip10.tfm
+52a29d45fdb6009d8eb8c1abfcf62dcb xy-3.8.9/texfonts/xylubt11.tfm
+f124f78ed50a1817738d2adb190cf2bd xy-3.8.9/texfonts/xycmbt10.tfm
+5c01c46b93e3ba8369f3f8edc6e62aef xy-3.8.9/texfonts/xydash10.tfm
+50246cc71b0635b0ba0a5c10a0bf4257 xy-3.8.9/texfonts/xyatip10.tfm
+52a29d45fdb6009d8eb8c1abfcf62dcb xy-3.8.9/texfonts/xyluat11.tfm
+b96441955c41494658ad110a58004f28 xy-3.8.9/texfonts/xyluat12.tfm
+c277d5c81d76bb6a6a508cddd7f2d554 xy-3.8.9/texfonts/xyeuat11.tfm
+9d465699a13fb7706bf38bc873e9526c xy-3.8.9/texfonts/xycmat12.tfm
+b1b2aed5f832d24df2d2ebd1dba18e07 xy-3.8.9/texfonts/xymisc10.tfm
+a3a3bc08980c5126ff2a7a68fb5a64ff xy-3.8.9/texfonts/xylubt10.tfm
+63bbec86ecb2350ba30adc95b53766e7 xy-3.8.9/texfonts/xycmbt11.tfm
+f124f78ed50a1817738d2adb190cf2bd xy-3.8.9/texfonts/xycmat10.tfm
+4db60f15ea23b4ec2d796c6d568a63fa xy-3.8.9/texfonts/xybsql10.tfm
+a3a3bc08980c5126ff2a7a68fb5a64ff xy-3.8.9/texfonts/xyluat10.tfm
+3393210079fb4ed9347e214b3bfd7c1a xy-3.8.9/texfonts/xycirc10.tfm
+63bbec86ecb2350ba30adc95b53766e7 xy-3.8.9/texfonts/xycmat11.tfm
+f082096f0df4b6a9cf22d7d15e6e8cfa xy-3.8.9/texfonts/xyeuat12.tfm
+7ec42cb4e4e3cd19cac45c089401846c xy-3.8.9/TRAILER
+c7f5c01e69077db8d158f582e156f764 xy-3.8.9/INSTALL
+792a7b006f4613644463030b58290e1a xy-3.8.9/Xy-logo.png
+b53bbf23a56f2c543207ff92c94ce94a xy-3.8.9/texinputs/xyps-t.tex
+8a83c6b5fad6b75e43169805d37efcef xy-3.8.9/texinputs/xysmart.tex
+7867b36e610322f4fc54881bd5d94343 xy-3.8.9/texinputs/xydvips.tex
+65bb1e3f69dba004cb0c2224359fef48 xy-3.8.9/texinputs/xyps-l.tex
+6a18d06abfab2b5d5e4e31b4f0e78639 xy-3.8.9/texinputs/xycmactex.tex
+24340b6befc66d28ee1ebb657efb5892 xy-3.8.9/texinputs/xyall.tex
+25a964ebb390bcfcd35c040f477eef1d xy-3.8.9/texinputs/xypdf-cu.tex
+edd672434f45626662368282c0322160 xy-3.8.9/texinputs/xycolor.tex
+d44dc9545b4f26bd4d9b564c7c2db7cd xy-3.8.9/texinputs/xyimport.tex
+904907c40950fade6b43f89606792d9b xy-3.8.9/texinputs/movie.cls
+c8603d98d3a55ecb74d439e6abba791c xy-3.8.9/texinputs/xy16textures.tex
+125a67de88ccbd0e0283f67b83f9855f xy-3.8.9/texinputs/xynecula.tex
+413d5f789929a45aab7d12ce0d0aee7d xy-3.8.9/texinputs/xy.tex
+990ce136a3cc15728ba417a2e78b25c8 xy-3.8.9/texinputs/xyarrow.tex
+1a12b316e2132654e44ba2cd21def637 xy-3.8.9/texinputs/xypdf-li.tex
+66beb10e89ca3b367faccdfebe2d3965 xy-3.8.9/texinputs/xy2cell.tex
+dd1eb8ddca95d11b8d051f1471fa767e xy-3.8.9/texinputs/xydvitops.tex
+09ebbd3ce07e365a24f3d2343248d192 xy-3.8.9/texinputs/xyps-f.tex
+d412ee1ff259daefee5e927172e2f9a8 xy-3.8.9/texinputs/xycurve.tex
+43fb8dc80dd748631d78096701166d76 xy-3.8.9/texinputs/xycmtip.tex
+925a882bdae45c3da43ade17301079c8 xy-3.8.9/texinputs/xydummy.tex
+2692b08b5ea11fbbd1937106f77fb996 xy-3.8.9/texinputs/xyps-s.tex
+c335c5dc674b95bb786b74396ffce83d xy-3.8.9/texinputs/xytile.tex
+1f8227a166a019780dc8eed55d412d56 xy-3.8.9/texinputs/xymovie.tex
+e16fc85c85f64d0a5c04708bf3312d00 xy-3.8.9/texinputs/xypdf-ro.tex
+1575250bfcedf61f8b4181e09ad0659e xy-3.8.9/texinputs/xypicture.tex
+c3a572983ccc9fc596b4e9ce454d5652 xy-3.8.9/texinputs/xyline.tex
+cd87cbae3acd962decd7311b3fe30c06 xy-3.8.9/texinputs/xy17oztex.tex
+1445855973f58d3d2f34be51b4c796f1 xy-3.8.9/texinputs/xypspatt.tex
+90cb8a3b00c2081384c1ce988d2ba0a3 xy-3.8.9/texinputs/xypdf-co.tex
+c4ec75d66727413dc329c2850acba72a xy-3.8.9/texinputs/xyps-r.tex
+cb768d8d63a12d35607cbb3c4e7ba163 xy-3.8.9/texinputs/xyrotate.tex
+28134012dafb2972d4c32eb8af3edb2e xy-3.8.9/texinputs/xyarc.tex
+420d24f213436fc501669a04517144ff xy-3.8.9/texinputs/xypic.sty
+2116ea6e35d010eb5873cf4a0d4321e3 xy-3.8.9/texinputs/xytextures.tex
+f48057783f0327dc9f0b2ed8ed948918 xy-3.8.9/texinputs/xypoly.tex
+e61049d36bdfccb226f22e582d70d368 xy-3.8.9/texinputs/xypdf.tex
+15673cabca043d4a807f82d1134e13b7 xy-3.8.9/texinputs/xyps-col.tex
+94e05e3b7b09e5f01f27ce0fba9652cf xy-3.8.9/texinputs/xyknot.tex
+5686b19cc46d046c885428794ed9c114 xy-3.8.9/texinputs/xypdf-fr.tex
+b051b6278342f915daceaf554e3ade5f xy-3.8.9/texinputs/xypsdict.tex
+1e1bcf75c622af1eefd9169948208302 xy-3.8.9/texinputs/xy.sty
+25b1e7edeee41f181ee9733429da4a9c xy-3.8.9/texinputs/xymatrix.tex
+4c147d7ae8f6e4af74a0bd7519424984 xy-3.8.9/texinputs/xyps.tex
+2f514d7533d1b7575176df5f035b8b16 xy-3.8.9/texinputs/xyemtex.tex
+a0ca4f0babb67cf5a136634e656e8eaa xy-3.8.9/texinputs/xytpic.tex
+a26f363497b268d896fe6f9b293e55a6 xy-3.8.9/texinputs/xytp-f.tex
+32ef3b517aa860b1d253bb3ecc1a1686 xy-3.8.9/texinputs/xydvidrv.tex
+ad325e351be74f7bcaa1bc1c81eebd06 xy-3.8.9/texinputs/xyoztex.tex
+186931a828664624939ab0b347e3952c xy-3.8.9/texinputs/xyframe.tex
+0fa6740bd2c7f70b0932c701baf17d71 xy-3.8.9/texinputs/xyv2.tex
+c8763fc8e281cb6ecf697988b6608e4a xy-3.8.9/texinputs/xyrecat.tex
+6511906ab396486a3d70e9be8e789397 xy-3.8.9/texinputs/xyxdvi.tex
+f8dc90c79e604ca1df868f124870db43 xy-3.8.9/texinputs/xymacpat.xyp
+b85c02e8c5ca6610b964bfc4b75b2bb5 xy-3.8.9/texinputs/xyps-c.tex
+f44bd717e744dd46e14a440829de701c xy-3.8.9/texinputs/xyps-pro.tex
+ed63dd19c6d3ab5dc21a7fea2432c167 xy-3.8.9/texinputs/xypic.tex
+1ee562fde0b53c9cd16f7a604f33fdf0 xy-3.8.9/texinputs/xyidioms.tex
+b7e4d9a6936ba2ad6119a280abde9641 xy-3.8.9/texinputs/xygraph.tex
+6a94c4af5f0f0b6d87ec6c0c8d43e800 xy-3.8.9/texinputs/xybarr.tex
+0d51788a4141bc66ab896f7ac63495fd xy-3.8.9/texinputs/xytips.tex
+668f546acdd1b45fd4ba1fb5e09f313d xy-3.8.9/texinputs/xycrayon.tex
+51ad0ec17c89323f6c2a1c9ac78acfb6 xy-3.8.9/texinputs/xyps-ps.tex
+af98c1c4cb762e0f70e44f8238042b9d xy-3.8.9/texinputs/xyweb.tex
+42c2cee117438240570127cb66ad9fe9 xy-3.8.9/map/xypic.map
+ba464963f0a718d0034c33e4705b2b03 xy-3.8.9/Xy-pic.html
+d2f4ce1df3c1bdf434fe4088b95b7ca8 xy-3.8.9/mfinputs/xyluat10.mf
+e1ca9c39718c95d435564b07506ec0c0 xy-3.8.9/mfinputs/xyeuat10.mf
+c72ee4a8c80bbd94a3f106f867898e70 xy-3.8.9/mfinputs/xyeubt12.mf
+1fd35dd064c8773d14a2f6c10904d1f3 xy-3.8.9/mfinputs/xyluat12.mf
+b542f59d13fb9fb5c0abe9e00dd2aa35 xy-3.8.9/mfinputs/xylubt12.mf
+8a38747b2cebaae3a51ade8259d2842e xy-3.8.9/mfinputs/xycm.mf
+e5b7039affcba01d09fd1ba8670c29e7 xy-3.8.9/mfinputs/xyeuat11.mf
+572f3ac95b7612e6117929dff3953290 xy-3.8.9/mfinputs/xyd2.mf
+1c48bb2080f4fc76a338d46f303caea4 xy-3.8.9/mfinputs/xytech.mf
+097a4b3c290b19bf5c09cab26fd81752 xy-3.8.9/mfinputs/xycmbt12.mf
+ed7e9166aef5bac3b8bd0f781a8a77c0 xy-3.8.9/mfinputs/xybsql10.mf
+2cd5f8127c7fd54faf3014bb39443549 xy-3.8.9/mfinputs/xylubt10.mf
+6f0a09e5168ce9933a13549a306db3c3 xy-3.8.9/mfinputs/xyd.mf
+6e23c28e708557bd25ba219b41b53331 xy-3.8.9/mfinputs/xycmbt10.mf
+b67a1a09c063cfa92a1d0a222a5e0ee1 xy-3.8.9/mfinputs/xycmbt11.mf
+47b1e0699a22fbc602fb5ed90109d68d xy-3.8.9/mfinputs/xybtip10.mf
+ec9c5c57cbe11ad2f8a65e0fee40f07d xy-3.8.9/mfinputs/xycmat11.mf
+f3b0803a58bc0bc2ff4871278c722cf2 xy-3.8.9/mfinputs/xyeubt11.mf
+df1f6d78735463cd024f124181bd2442 xy-3.8.9/mfinputs/xybtip.mf
+5a2ed4dd03a4dedc29bc344c58e0d3a4 xy-3.8.9/mfinputs/xydash10.mf
+750c660b6d0ee05a98a43ab75882118f xy-3.8.9/mfinputs/xycmat12.mf
+2c6dc4f84512f8af8254d533c5b74eb6 xy-3.8.9/mfinputs/xymisc10.mf
+81b94c8c7a5edfcfe2e8efa8390d1fad xy-3.8.9/mfinputs/xyeuat12.mf
+d500feb421bbb8828b1f65c27738eaed xy-3.8.9/mfinputs/xyline10.mf
+396029b313c1d5a51aa62689485c3946 xy-3.8.9/mfinputs/xyatri.mf
+9b38600264beb943d9a5f8e1038a0800 xy-3.8.9/mfinputs/xyeuler.mf
+a720ddab53c52aed1d9d184b789fcc50 xy-3.8.9/mfinputs/xyeubt10.mf
+e8fa720da1935ba850f3f5876a2ba780 xy-3.8.9/mfinputs/xybtri.mf
+c5094f25e9ef643693e3cb39169b70dd xy-3.8.9/mfinputs/xyatip10.mf
+168ff060ac2ff811c572684a442cba30 xy-3.8.9/mfinputs/xyatip.mf
+d0e1478e812ec8122370bf104eeecbed xy-3.8.9/mfinputs/xycirc10.mf
+13cb4b0558fd30e72372aae3e548492f xy-3.8.9/mfinputs/xyqc10.mf
+65db02dd96922bc88ece443db561b9b8 xy-3.8.9/mfinputs/xylu.mf
+85f828fa67af5f257bf4c2e250b3e646 xy-3.8.9/mfinputs/xylubt11.mf
+85f74cb0e6f4d7e06d7346f0dd0a4bbe xy-3.8.9/mfinputs/xycmat10.mf
+23e380dc02b5b1e367107265daca4d59 xy-3.8.9/mfinputs/xyluat11.mf
+d76abb4db084ce7809ec626b2636bd00 xy-3.8.9/README
+3ea0c09f75df8a0eddf67188f3125d97 xy-3.8.9/FONTCOPYING
+8d4bfbafedc7d6d34dc7855f75e1cc79 xy-3.8.9/type1/xydash10.pfb
+ec38b53842f4384705514c6703fa9108 xy-3.8.9/type1/xyatip10.pfb
+a78cc51eb4f348072c100f5aaeae0558 xy-3.8.9/type1/xyeubt11.pfb
+ad391dfddfd050862d933e5807ab1edc xy-3.8.9/type1/xybtip10.pfb
+795860c5431eaae7308ca253adbb1c0d xy-3.8.9/type1/xyluat11.pfb
+c969bb01276d994b7c8b4e880e102c85 xy-3.8.9/type1/xycmat12.pfb
+3a6edd6ccf24491c7033b04c115c0b6a xy-3.8.9/type1/xyeuat12.pfb
+8b0e892fce2d68c56334f7e7bb581398 xy-3.8.9/type1/xycmbt11.pfb
+a492245d942af2cc4c65197bb428d65e xy-3.8.9/type1/xycmat10.pfb
+7e46951913f6ce1c9cfa86ee5677f4d9 xy-3.8.9/type1/xyeubt10.pfb
+4ee6e8966db8ede56e6cb1e2398ac8d3 xy-3.8.9/type1/xylubt10.pfb
+0b914d9b6b76b3fa46e1056a631395cd xy-3.8.9/type1/xyluat12.pfb
+fb5e71d872cd8b5ac1b06647ef4783d0 xy-3.8.9/type1/xyluat10.pfb
+ad63ca0f58b4d04cf77f148b91306645 xy-3.8.9/type1/xycirc10.pfb
+f0e48b203f9f17ffe3a5a6130b5333f6 xy-3.8.9/type1/xylubt11.pfb
+9651e62afdd7ebf3ac3282d58963cfdd xy-3.8.9/type1/xyeubt12.pfb
+cb0265cb09bda014ce2dfa08a6c45ca9 xy-3.8.9/type1/xylubt12.pfb
+f05969bc40cebd556181cce3dd01d312 xy-3.8.9/type1/xybsql10.pfb
+acadf379adb78f4d555808f641098158 xy-3.8.9/type1/xycmbt12.pfb
+0abb99aa0820f446bfb8433cd41f1515 xy-3.8.9/type1/xyeuat11.pfb
+d0c5ff3cf7c69e3724b9e4131319667c xy-3.8.9/type1/xyeuat10.pfb
+bbd4525571da643ce623b9b3e31ae24c xy-3.8.9/type1/xycmat11.pfb
+89c3546ee426179761f124b92f40158d xy-3.8.9/type1/xycmbt10.pfb
+bd87b05d1301be9116740f603263c9fd xy-3.8.9/CATALOG
+5ad4d52a4bd04bae23ca548c793c5c3f xy-3.8.9/enc/xyd2.enc
+49cd4c2d54e7a7fccf078e946f586f8b xy-3.8.9/enc/xyd.enc
+81499e8f6fc4029878adc87117df6452 xy-3.8.9/enc/xycirc.enc
+8849a3a6359690e59663657b7d6a4c93 xy-3.8.9/VERSIONS
+56b0ecf3af1b9fdd808a23c34ab5bf04 xy-3.8.9/doc/xypdf.pdf
+17c0efce393a0bd29919e4d477a232b6 xy-3.8.9/doc/xysource.pdf
+8590792a6323e9abc1da1caeaa51b966 xy-3.8.9/doc/xy389src.tar.gz
+ad5043ac1412229c2af729fe5460855c xy-3.8.9/doc/xyrefer.pdf
+5d20d8e19b6daa6c6a3402cb95ba7bc4 xy-3.8.9/doc/barrdoc.pdf
+cef4e0acc39f1bcb4b223bcf2cd465fa xy-3.8.9/doc/xyguide.pdf
+bd6921308d20195a598b181da6fc7ac4 xy-3.8.9/pfm/xybsql10.pfm
+1c41a6de86897b93eb1e303834cb0bd5 xy-3.8.9/pfm/xybtip10.pfm
+b897c84c75b8f28d013e368eae043943 xy-3.8.9/pfm/xycmbt10.pfm
+9edcf4223b5874f83935f5b401c7099e xy-3.8.9/pfm/xyluat10.pfm
+74279bafa4bbd54ba2d75df40255e094 xy-3.8.9/pfm/xylubt11.pfm
+5d6cb3b11c219514c01f04f55c2bdace xy-3.8.9/pfm/xyluat12.pfm
+f8905a16778d31a4e114196eb9e215cd xy-3.8.9/pfm/xyluat11.pfm
+2ba60a1797087a1e69ebcf1177f1f010 xy-3.8.9/pfm/xydash10.pfm
+fd85dc8eaa8922f5fc7200ecb80a0295 xy-3.8.9/pfm/xycirc10.pfm
+97d32867339d784f624f664cd30dc4ec xy-3.8.9/pfm/xycmat11.pfm
+01e802a5d0e5933062d5a363f6589fca xy-3.8.9/pfm/xyeuat10.pfm
+c75e69c47ccd29c0b634fa0cedf0e9b6 xy-3.8.9/pfm/xylubt10.pfm
+e09cc223013283f0c73746c7d4dd5664 xy-3.8.9/pfm/xycmbt11.pfm
+ffe3164d1ae7cd08299915555cf8eebe xy-3.8.9/pfm/xylubt12.pfm
+dff3f2e66c5b4231a6ca60c35c0e277c xy-3.8.9/pfm/xyeuat11.pfm
+d2830702b8ea6a1e9283727514939947 xy-3.8.9/pfm/xycmat10.pfm
+6eedc88885c8b5cfaacbe4860b3420b1 xy-3.8.9/pfm/xyeubt12.pfm
+f44b82894334b4615b63c8fd84e48aba xy-3.8.9/pfm/xycmbt12.pfm
+35255610825b5e8f3d772caca3678329 xy-3.8.9/pfm/xyeuat12.pfm
+e5624a0f4072297282b837bb2efa7a0f xy-3.8.9/pfm/xyeubt11.pfm
+fbde2a4ec4136292945eb296db3089af xy-3.8.9/pfm/xyeubt10.pfm
+f90f3a42dcc2ac2da9bb8041ae7363d6 xy-3.8.9/pfm/xyatip10.pfm
+cb6612baec562e1995679cb24dbcac2b xy-3.8.9/pfm/xycmat12.pfm
+ff9c63ccd64ec715c04c742297ae1a19 xy-3.8.9/ps/xy389dict.pro
+3cadfeb0f91fa799b1ac6503768e5665 xy-3.8.9/afm/xyeubt11.afm
+9a47eb0a3ad542b416ebf7479eafe3ac xy-3.8.9/afm/xycmbt10.afm
+de99b9bbe52455f75f973bb292dd8a7d xy-3.8.9/afm/xyluat12.afm
+70a4cd8037b8a93f3130fa637c9ee18b xy-3.8.9/afm/xycmbt12.afm
+7e790d43c62759cbe79cf93361c569a7 xy-3.8.9/afm/xycmat10.afm
+c689bbee8e69a60d3ee81ca31d9dabec xy-3.8.9/afm/xyeuat11.afm
+722d0a464624372934ce71c89e58c7ee xy-3.8.9/afm/xyluat10.afm
+4e1948fe92379226af679ab7ed9e3ef4 xy-3.8.9/afm/xycmat11.afm
+bc4dc22e8d9263fb9c2e11becab82268 xy-3.8.9/afm/xyluat11.afm
+b28beb431be6cf8b2819618031b0b95f xy-3.8.9/afm/xyeuat12.afm
+13c5a6c1bde1f791af8e6101fdb6c860 xy-3.8.9/afm/xycmat12.afm
+d149a18e99739f0865333efbf46f6633 xy-3.8.9/afm/xyeubt10.afm
+b3e16ef6c2400c95d94736f39b27cbe7 xy-3.8.9/afm/xyeuat10.afm
+d6a4798d0ab76fa08e763f5f308061c6 xy-3.8.9/afm/xylubt10.afm
+f0dd6fbf4ad6df0776e0f8894025f88e xy-3.8.9/afm/xyatip10.afm
+2571856107d2a518e71f788941fe6e67 xy-3.8.9/afm/xyeubt12.afm
+6ce17d3d2ce233712aeaad4fa2ada039 xy-3.8.9/afm/xydash10.afm
+acddc1ec3f77268a1fa271156968b450 xy-3.8.9/afm/xylubt12.afm
+eee5ebe87058d1c636515d34af3ed476 xy-3.8.9/afm/xybsql10.afm
+5cc17d7dd2ee81647462b50ca0016c63 xy-3.8.9/afm/xycirc10.afm
+95d3817fc7e7c3fc1e12ffeceb33e621 xy-3.8.9/afm/xylubt11.afm
+cc992b395280f05b91b8401174603641 xy-3.8.9/afm/xycmbt11.afm
+3c07a4e5952b08ab9766419e76bbd20b xy-3.8.9/afm/xybtip10.afm
+b234ee4d69f5fce4486a80fdaf4a4263 xy-3.8.9/COPYING
+aa343431ff9e933fa16e5068959564f9 xy-3.8.9/support/install-tds
+276994651134121f9b5b9720a485ac67 xy-3.8.9/support/pnmrawtopcropwhite.c
+85bc76623f2217f06df7e0af4abdb2f4 xy-3.8.9/support/dvitogif89a
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iQEcBAEBCAAGBQJSULppAAoJEMTQEv/gFjeHUj0IAKOa+foDJ71hg7LnAQJpwfAI
+jZVqdg54K5jo86CjpXPIQQ9yFLLWsTQgPufBUofyft850eraWda08uUTyPOVOpVc
+Q3exE74GAii7fJBsidka5pbTKoft9A/lIJsBxvIsKRzwI6xf6F2RsNzC/IPK2rbE
+RKAGvHE+rebdneyYuxc2b7oPZ478sK87rOD2Dkm6BzjmTxQBIRwjGao8uDFeuFuK
+FR4CaMR8E64F/76dpFNXE6QYxTUXs6UDLv+XIsX3peU5hh0f5V7DRfSRxT39VQ7n
+tisnbWiGsTwHqzphQ6Ny93GqOVoat75pyl21H3KZoi4scWYbaR29UPG/m3Rh1+k=
+=vpIn
+-----END PGP SIGNATURE-----
diff --git a/macros/generic/diagrams/xypic/README b/macros/generic/diagrams/xypic/README
new file mode 100644
index 0000000000..6fcb3f26bd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/README
@@ -0,0 +1,107 @@
+-*-text-*- $Id: README,v 3.11 2010/05/06 17:46:29 krisrose Exp $
+
+ ======================================================
+ THE Xy-pic PACKAGE FOR TYPESETTING GRAPHS AND DIAGRAMS
+ ======================================================
+
+Xy-pic is a package for typesetting graphs and diagrams with TeX.
+
+It works with most formats, including LaTeX (both 2.09 and 2e),
+AMS-LaTeX, AMS-TeX, and plain TeX.
+
+It has been used to typeset complicated diagrams from many application
+areas including category theory, automata theory, algebra, neural
+networks, and database theory.
+
+ - o -
+
+See below in this file for an overview of the structure and features!
+See CATALOG for up to date version information!
+See TRAILER for author and accessibility information!
+See COPYING for the conditions for redistribution and modification!
+See VERSIONS for the exact list of the versions of all source files!
+See INSTALL for how to install Xy-pic on your system!
+Go to <URL: http://xy-pic.sourceforge.net> for source and news!
+
+ - o -
+
+Xy-pic is structured as a `kernel' and several orthogonal modules called
+`options', each defining a custom notation for a particular kind of
+graphical object or structure.
+
+These (combinable) structures are available:
+
+* A graph combinator mode where diagrams are specified the way they are
+ composed as graphs.
+
+* A matrix-like mode where the dimensions of the drawing are computed by
+ aligning diagram entries in rows and columns (this is the `diagram'
+ mode Xy-pic version 2 users are used to).
+
+* A polygon mode where diagrams shaped as regular polygons are entered
+ in a simple way.
+
+* A mode for typesetting beautiful knots and links.
+
+* A general object-oriented `turtle graphic' drawing language for
+ specifying graphs with objects and connections between them in a
+ manner independent of orientation.
+
+* An experimental facility for generating movies where diagrams wiggle
+ and bend into place...
+
+The following objects may be used:
+
++ Positions can be given in variety of formats (extendable) including
+ user defined coordinates (x,y) and relative to previous positions,
+ objects, object edges, and points on connections.
+
++ Objects may be circular, elliptic, or rectangular (more shapes can be
+ added) and adjusted in several ways.
+
++ Large library of objects with mnemonic names.
+
++ Objects that orient themself along a connection when placed relative
+ to it, e.g., `\dir{|-}' is like \vdash but thus oriented; new such
+ objects can be defined in a convenient way.
+
++ TeX `boxes', i.e., text and mathematical formulae.
+
++ Includes circle segments and optionally arbitrary elliptical,
+ quadratic, and cubic arcs.
+
++ Connections are aligned between the reference points of objects but
+ start and end on the edges.
+
++ Any object can be used to build a connection (using `diagonal
+ filling'); library objects provide common line types.
+
++ Flexible notation for drawing arrows and general paths with tail,
+ stem, and head built from any object(s). Special support for arrows
+ that cross each other, arrows that `go by' other entries, paired
+ arrows (including support for 2-cells), curved arrows, and arrows with
+ bends.
+
++ Library of frames and braces.
+
++ Special notation for rotation, scaling, colour, and line thickness.
+ The correct typesetting of these features requires a backend that
+ supports it (i.e., PostScript) but even when this is not available
+ Xy-pic tries to approximate what is requested such that at least the
+ picture size is stable (and thus page breaks).
+
++ Output can use PDF or PostScript for drawing (several \special
+ formats are supported, including pdfTeX, dvips, and Textures).
+ Notation for inclusion of literal PostScript is available.
+
+* Other graphics can be imported and then `decorated' using Xy-pic.
+
+All object forms may be used with all structures.
+
+ - o -
+
+Finally, enjoy Xy-pic!
+
+Sincerely,
+ Kristoffer H. Rose <krisrose@tug.org>
+ Ross Moore <ross.moore@mq.edu.au>
diff --git a/macros/generic/diagrams/xypic/TRAILER b/macros/generic/diagrams/xypic/TRAILER
new file mode 100644
index 0000000000..5b6be11418
--- /dev/null
+++ b/macros/generic/diagrams/xypic/TRAILER
@@ -0,0 +1,117 @@
+-*-text-*- $Id: TRAILER,v 3.27 2013/10/02 02:04:28 krisrose Exp $
+
+=======================================================================
+ ANNOUNCING the Xy-pic version 3.8 DIAGRAM TYPESETTING PACKAGE
+=======================================================================
+
+This is to announce a release of the diagram typesetting package Xy-pic.
+It has been more than a decade, so we found that a release was in order.
+
+-----------------------------------------------------------------------
+ GENERAL
+-----------------------------------------------------------------------
+
+Xy-pic is a package for typesetting a variety of graphs and diagrams
+with TeX. Xy-pic works with most formats (including LaTeX, AMS-LaTeX,
+AMS-TeX, and plain TeX).
+
+Further specifics of the package are in the distribution README file
+and other documentation.
+
+-----------------------------------------------------------------------
+ LATEST NEWS
+-----------------------------------------------------------------------
+
+Release 3.8.9 includes Michael Barr's "diagxy" macros as the "barr"
+feature.
+
+Release 3.8.8 corrects a typo in xyframes (thanks to Norbert Preining).
+
+Release 3.8.7 includes a fix to the squiggly fonts (thanks, Daniel) to
+avoid PFB font generation errors.
+
+Release 3.8.6 includes a fix to xypdf of colour allocation (thank you
+to Leslie Saper for the report).
+
+Release 3.8.5 fixes some problems with xypdf, notably when used
+together with the beamer package.
+
+Release 3.8.4 fixes a scoping bug in xypdf that made color definitions
+"bleed" to surrounding text (thanks to John G. Bullock for the report).
+
+Release 3.8.3 fixes the xycirc10 font to work around a limitation of
+the mf2pt1 tool (thanks to Daniel Müllner's fix).
+
+Release 3.8.2 fixes the xypic.map file to load the bitmap fonts
+correctly (thanks to Alexander Perlis for the analysis).
+
+Release 3.8.1 includes the missing ".enc" files in the distribution.
+
+The primary purpose of release 3.8 is to incorporate support for
+proper PDF output by including Daniel Müllner's "xypdf" package using
+native PDF for drawing. The driver is integrated with most of
+Xy-pic's extensions, however, there may still be gray areas where
+support is sketchy, so please try your favorite diagrams with pdfTeX
+and tell us if it works for you. We're grateful to Daniel for having
+contributed such a key piece of infrastructure that Xy-pic has been
+lacking for many years.
+
+This version also marks the first version where xymatrix entries are
+aligned by their math axis by default as suggested by Alexander Perlis
+(in TUGboat 22 (2001), 330-334); thanks to Alexander for the thorough
+analysis. Please check whether your matrices still work as you
+expect!
+
+Also thanks to Jeremy Gibbons for contributing the new "lu" style of
+arrow tips suitable for use with Lucida, and to Scott Pakin and the
+FontForge team for the great programs now used to generate all Type1
+fonts directly from their METAFONT sources.
+
+Release 3.8 furthermore fixes a few bugs in release 3.7; do tell if
+you believe that any of the "fixes" are really new bugs.
+
+Finally, thanks to our loyal users; indeed if you enjoy Xy-pic then
+please rate us on http://sourceforge.net/projects/xy-pic where Xy-pic
+development is now completely in the open!
+
+-----------------------------------------------------------------------
+ AVAILABILITY
+-----------------------------------------------------------------------
+
+Xy-pic can be retrieved through the World Wide Web Xy-pic `home page':
+
+ http://xy-pic.sourceforge.net
+
+Make sure to check that you have reached a version 3.8 copy (some
+archives take a while to mirror the latest files)!
+
+-----------------------------------------------------------------------
+ HISTORY & CREDITS
+-----------------------------------------------------------------------
+
+The first public release (version 1.40) of Xy-pic was created by
+Kristoffer H. Rose, then at DIKU, U of Copenhagen, and distributed via
+Usenet on December 19, 1991. This quickly became version 2 of which
+version 2.6 was stable for a few years.
+
+The thorough rewrite that became version 3 is a continued
+collaboration with Ross Moore, Macquarie U, Sydney, initiated through
+a visit to Macquarie (Jan-May 1994 supported by the Australian
+Research Council, Macquarie University, and using donated DEC
+equipment). However, full backwards compatibility is maintained
+(except for the unavoidable but fully documented obscure cases).
+
+Xy-pic is principally Copyright (c) 1991-2011 by Kristoffer H. Rose
+and 1994-2011 by Ross Moore, with contributions by several others, all
+under GNU COPYLEFT (GPL) which means that you can use the package for
+any purpose but if you provide the macros or any code derived from
+them to a third party then you are obliged to include the entire
+Xy-pic package (full details in the file COPYING). The FONTCOPYING
+file details the special permissions to distribute fonts without the
+full requirements of the GPL.
+
+-----------------------------------------------------------------------
+
+ This is the end of the announcement. Enjoy Xy-pic!
+
+-----------------------------------------------------------------------
diff --git a/macros/generic/diagrams/xypic/VERSIONS b/macros/generic/diagrams/xypic/VERSIONS
new file mode 100644
index 0000000000..a422147951
--- /dev/null
+++ b/macros/generic/diagrams/xypic/VERSIONS
@@ -0,0 +1,115 @@
+$Id: CATALOG.doc,v 3.12 2011/03/14 20:13:59 krisrose Exp $
+$Id: dvitogif89a,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: install-tds,v 3.16 2011/03/14 20:14:00 krisrose Exp $
+$Id: INSTALL,v 3.23 2011/03/31 06:04:02 krisrose Exp $
+$Id: latin1.sty,v 3.6 2010/06/10 18:45:49 krisrose Exp $
+$Id: Makefile,v 3.73 2013/10/06 00:12:29 krisrose Exp $
+$Id: MAKE,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+$Id: movie.cls,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: pnmrawtopcropwhite.c,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+$Id: README,v 3.11 2010/05/06 17:46:29 krisrose Exp $
+$Id: TRAILER,v 3.27 2013/10/02 02:04:28 krisrose Exp $
+$Id: xy16textures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xy17oztex.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xy2cell.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyall.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyarc.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyarrow.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyatip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyatip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyatri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xybarr.doc,v 1.3 2013/10/06 00:12:30 krisrose Exp $
+$Id: xybsql10.mf,v 3.10 2011/08/28 22:19:06 krisrose Exp $
+$Id: xybtip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xybtip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xybtri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycirc10.mf,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycmactex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycmat10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmbt10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmbt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmbt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycm.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmtip.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycolor.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycrayon.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycurve.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyd2.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+$Id: xydash10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyd.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+$Id: xydoc.bib,v 3.19 2011/05/27 04:51:17 krisrose Exp $
+$Id: xydocps.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydoc.sty,v 3.36 2011/05/27 04:51:17 krisrose Exp $
+$Id: xy.doc,v 3.34 2013/08/26 03:56:11 krisrose Exp $
+$Id: xydummy.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydvidrv.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydvips.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydvitops.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyemtex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyeuat10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeuat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeuat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeubt10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeubt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeubt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeuler.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyframe.doc,v 3.14 2012/05/24 00:30:38 krisrose Exp $
+$Id: xygraph.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyguide.man,v 3.23 2011/05/27 04:51:17 krisrose Exp $
+$Id: xyidioms.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyimport.doc,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyknot.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyline10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyline.doc,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyling.doc,v 3.3 2013/10/02 02:04:28 krisrose Exp $
+$Id: Xy-logo.doc,v 3.2 2010/06/10 18:45:49 krisrose Exp $
+$Id: Xy-logo.xy,v 3.2 2010/06/10 18:45:49 krisrose Exp $
+$Id: xyluat10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyluat11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyluat12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylubt10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylubt11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylubt12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylu.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xymacpat.xyp,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xymatrix.doc,v 3.14 2011/03/31 06:10:57 krisrose Exp $
+$Id: xymisc10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $
+$Id: xymovie.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xynecula.doc,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyoztex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypic.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+$Id: Xy-pic.html,v 3.38 2013/10/02 02:04:28 krisrose Exp $
+$Id: xypic.sty,v 3.4 2010/04/16 06:06:52 krisrose Exp $
+$Id: xypicture.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypoly.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-c.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-col.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypsdict.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps.doc,v 3.12 2011/05/27 04:51:17 krisrose Exp $
+$Id: xyps-f.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-l.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypspatt.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-pro.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-ps.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-r.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-s.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-t.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyqc10.mf,v 3.1 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyrecat.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyrefer.man,v 3.37 2013/10/02 02:04:28 krisrose Exp $
+$Id: xyrotate.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xysmart.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+$Id: xysource.man,v 3.28 2011/03/31 06:04:02 krisrose Exp $
+$Id: xy.sty,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytech.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xytest.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $
+$Id: xytextures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytile.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytips.doc,v 3.10 2013/10/02 02:04:28 krisrose Exp $
+$Id: xytp-f.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytpic.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyv2.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyweb.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyxdvi.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
diff --git a/macros/generic/diagrams/xypic/Xy-logo.png b/macros/generic/diagrams/xypic/Xy-logo.png
new file mode 100644
index 0000000000..b0b48ef62f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/Xy-logo.png
Binary files differ
diff --git a/macros/generic/diagrams/xypic/Xy-pic.html b/macros/generic/diagrams/xypic/Xy-pic.html
new file mode 100644
index 0000000000..2173f87de4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/Xy-pic.html
@@ -0,0 +1,377 @@
+<html> <head>
+<!--$Id: Xy-pic.html,v 3.38 2013/10/02 02:04:28 krisrose Exp $-->
+<title>Xy-pic Home Page</title>
+<!--``Xy-pic home page.''
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2012 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+-->
+<meta name="description"
+ content="Xy-pic diagram drawing (La)TeX package home page.">
+<meta name="keywords"
+ content="xypic, TeX, LaTeX, commutative diagram, planar graph, flow chart">
+</head>
+
+<body lang="EN" bgcolor="#FFFFFF">
+<center>
+<h1>
+<img src="Xy-logo.png" alt="Xy" width=95 height=111 align=center alt="Xy">-pic
+&mdash;
+Typesetting Graphs and Diagrams in TeX
+</h1>
+</center>
+
+<p>
+ Xy-pic is a package for typesetting graphs and diagrams using the
+ principle of <q>logical composition of visual components.</q> It is
+ structured as several modules, each defining a mnemonic plain text
+ notation for a particular kind of graphical object or structure.
+ Example objects are arrows, curves, frames, and colouring/rotation
+ on drivers that support it; these can be organised in matrix,
+ directed graph, path, polygon, knot, and 2-cell structure (a more
+ complete list of the features is given below).
+<p>
+ Xy-pic works with most formats, including all variants of LaTeX,
+ AMS-TeX, and plain TeX, and has been used to typeset complicated
+ diagrams from many application areas including category theory,
+ automata theory, algebra, neural networks, topology (knots and
+ braids), database theory, chemistry, and genealogy.
+<p>
+ Xy-pic has been designed with great care to allow the style of
+ pictures to match well with the exquisite quality of the surrounding
+ TeX typeset material.
+</p>
+
+<h2><a name="avail">Availability</a></h2>
+
+<p>
+ You can get Xy-pic from
+ <a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/">CTAN</a>
+ or directly from the
+ <a href="http://sourceforge.net/projects/xy-pic/">SourceForge development project home</a>,
+ however, chances are that Xy-pic is already included with your TeX installation
+ (for <a href="http://www.tug.org/texlive/">TeX Live</a>, for example,
+ Xy-pic is part of the <q>pictures</q> bundle).
+<p>
+ Xy-pic was conceived by
+ <a href="http://www.krisrose.net">Kristoffer H&oslash;gsbro Rose</a>,
+ the present version is the result of several years of collaboration with
+ <a href="http://www.maths.mq.edu.au/~ross/">Ross Moore</a> with
+ essential contributions from George Necula, Jeremy Gibbons,
+ <a href="http://www.math.uni-bonn.de/people/muellner">Daniel M&uuml;llner</a>,
+ and Alex Perlis<!--, <a href="http://www.tug.org/yandy/">Y&amp;Y Inc.</a>-->,
+ and with many suggestions from more than two decades of users.
+<p>
+ Xy-pic is &copy; by its authors as
+ <a href="http://www.fsf.org/">free software</a>.
+</p>
+
+<h2>Features</h2>
+
+<p>
+ Xy-pic is structured as a <q>kernel</q> and several orthogonal modules
+ called <q>options</q>, each defining a custom notation for a particular
+ kind of graphical object or structure.
+<p>
+
+These (combinable) <q>logical composition</q> structures are available:
+
+<ul>
+ <li>A graph combinator mode where diagrams are specified the way they are
+ composed as graphs.
+ <li>A matrix-like mode where the dimensions of the drawing are computed by
+ aligning diagram entries in rows and columns (this is the <q>diagram</q>
+ mode Xy-pic version 2 users are used to).
+ <li>A polygon mode where diagrams shaped as regular polygons are entered
+ in a simple way.
+ <li>A mode for typesetting beautiful knots and links.
+ <li>A general object-oriented <q>turtle graphic</q> drawing language for
+ specifying graphs with objects and connections between them in a
+ manner independent of orientation.
+</ul>
+
+The following <q>visual component</q> objects can be used:
+
+<ul>
+ <li>Positions can be given in variety of formats (extendable) including
+ user defined coordinates (x,y) and relative to previous positions,
+ objects, object edges, and points on connections.
+ <li>Objects may be circular, elliptic, or rectangular (more shapes can be
+ added) and adjusted in several ways.
+ <li>Large library of objects with mnemonic names.
+ <li>Objects that orient themself along a connection when placed relative
+ to it, e.g., <q><code>@{|-}</code></q> is like <q><code>\vdash</code></q>
+ but thus oriented; new such objects can be defined in a convenient way.
+ <li>TeX <q>boxes</q>, i.e., text and mathematical formulae.
+ <li>Includes circle segments and optionally arbitrary elliptical,
+ quadratic, and cubic arcs.
+ <li>Connections are aligned between the reference points of objects but
+ start and end on the edges.
+ <li>Any object can be used to build a connection (using <q>diagonal
+ filling</q>); library objects provide common line types.
+ <li>Flexible notation for drawing arrows and general paths with
+ tail, stem, and head built from any object(s). Special support
+ for arrows that cross each other, arrows that <q>go by</q> other
+ entries, paired arrows (including support for 2-cells), curved
+ arrows, and arrows with bends. The style of arrow tips can be
+ configured to match several styles of symbol arrows.
+ <li>Library of frames and braces.
+ <li>Special notation for rotation, scaling, colour, and line thickness.
+ The correct typesetting of these features requires a backend that
+ supports it but even when this is not available
+ Xy-pic tries to approximate what is requested such that at least the
+ picture size is stable (and thus page breaks).
+ <li>Output can use PostScript<a href="#PS">*</a> for drawing (several \special formats are
+ supported: dvips, Textures, and OzTeX - more are being added
+ continuously: contact Ross Moore <ross.moore@mq.edu.au> for the current
+ list). Notation for inclusion of literal PostScript<a href="#PS">*</a> is available.
+ <li>Support for Adobe PDF<a href="#PS">*</a> output is available
+ from version 3.8 (thanks to support by Daniel M&uuml;llner and
+ font conversion software by Scott Pakin).</a>).
+</ul>
+
+<h2>Documentation</h2>
+
+The official Xy-pic documentation, updated with each release, consists of the following four documents.
+
+<ul>
+
+ <li><em>Xy-pic User's Guide</em>
+ by <a href="http://www.krisrose.net/">Kristoffer H. Rose</a>.
+ Explains how to use the Xy-pic macro package to typeset
+ basic <q>matrix-like</q> diagrams with TeX
+ (<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xyguide.pdf">pdf</a>).<p>
+
+ <li><em>Xy-pic Reference Manual</em>
+ by <a href="http://www.krisrose.net/">Kristoffer H. Rose</a> &amp; <a href="http://www.maths.mq.edu.au/~ross/">Ross Moore</a>.
+ Reference manual for Xy-pic summarising syntax and <q>drawing
+ semantics</q> of the capabilities in the kernel, all extensions and
+ features, and the PostScript<a href="#PS">*</a> backend
+ (<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xyrefer.pdf">pdf</a>).<p>
+
+ <li><em>Xy-pic Complete Sources with TeXnical Commentary</em>
+ by <a href="http://www.krisrose.net/">Kristoffer H. Rose</a> &amp; <a href="http://www.maths.mq.edu.au/~ross/">Ross Moore</a>.
+ Just that (a large document, <a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xysource.pdf">pdf</a>).<p>
+
+ <li><em>The xypdf package</em>
+ by <a href="http://www.math.uni-bonn.de/people/muellner">Daniel M&uuml;llner</a>.
+ Detailed user and TeXnical documentation of the PDF<a href="#PS">*</a> support for Xy-pic
+ (<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xypdf.pdf">pdf</a>).<p>
+
+</ul>
+
+In addition there are several tutorials on Xy-pic.
+
+<ul>
+
+ <li><em>An Introduction to Xy-pic</em>
+ by Cameron McLeman (<a href="http://math.arizona.edu/~swig/documentation/xypic/Xypic.pdf">pdf slides</a>).<p>
+
+ <li><em>Commutative Diagrams with XY-pic---I. Kernel Functions and Arrows</em>
+ by Paul A. Blaga (<a href="http://tug.org/pracjourn/2006-4/blaga/blaga.pdf">pdf</a>).<p>
+
+ <li><em>LaTeX/Creating Graphics/Xy-pic</em>
+ is a <a href="http://en.wikibooks.org/wiki/LaTeX/Creating_Graphics#XY-pic">WikiBook chapter</a>.<p>
+
+ <li><em>The LaTeX Graphics Companion</em>, Second Edition
+ by <a href="http://goossens.web.cern.ch/goossens/">Michel Goossens</a>, <a href="http://users.ox.ac.uk/~rahtz/">Sebastian Rahtz</a>, Frank Mittelbach, Denis Roegel, and Herbert Vo&szlig;,
+ <a href="http://aw.com">Addison-Wesley</a>, 2007.
+ Chapter 7 gives a concise introduction to some advanced uses of Xy-pic
+ (<a href="http://www.informit.com/store/product.aspx?isbn=0321508920">official page</a>;
+ in the <a href="http://books.google.com/books?id=hh6rdgZ9m3MC&printsec=frontcover&dq=The+LaTeX+Graphics+Companion&source=bl&ots=1rmNFdwt3O&sig=dQdy79YBDYQBq2r-CHfY3jL63ek&hl=en&ei=FrPXS_SkDpX49AS3tPiXBw&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAsQ6AEwAA#v=onepage&q&f=false">first edition on Google books</a> chapter 5 is dedicated to Xy-pic).<p>
+
+ <li><em>Examples on Typesetting Commutative Diagrams Using Xy-pic</em>
+ by M. Alsani (<a href="http://north.ecc.edu/alsani/xypicbyexample.ps">ps</a>).<p>
+
+ <li><em>Using Xy-pic in LyX</em>
+ by H. Peter Gumm (<a href="http://wiki.lyx.org/uploads/Examples/XY-pic/xypic.pdf">pdf</a>).<p>
+
+ <li><em>Drawing knot pictures using LaTeX with Xy-pic &ndash; An introduction and tutorial</em>
+ by Lars Fischer (<a href="http://lf.starlogik.de/drawing_knot_pictures.html">html</a>).<p>
+
+ <li><em>Xy-pic tutorial with an archive of examples</em>
+ by Aaron Lauda (<a href="http://www.math.columbia.edu/~lauda/xy/">html</a>).
+ Uses low level Xy-pic directives for everything.
+ <p>
+
+ <li><em>Tutorial de Xy-pic</em>
+ by Carlos A. P. Campani (<a href="http://ufpel.edu.br/~campani/xypictutorial.pdf">pdf</a>, in Portuguese).<p>
+
+</ul>
+
+Finally, we maintain a collection of
+<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xysamples/">examples</a> and
+<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xypapers/">papers</a> on CTAN.
+
+<p>
+
+If you know of other tutorials, interesting papers, or instructive examples, that can be shared, then please drop a note to the <a href="http://www.tug.org/mailman/listinfo/xy-pic">mailing list</a>!
+
+<h2>Help and Support</h2>
+
+Help and support on Xy-pic matters, as well as announcement of new versions, etc., is provided by the <a href="http://www.tug.org/mailman/listinfo/xy-pic">Xy-pic mailing list</a>, graciously hosted by <a href="http://tug.org">TUG</a>.
+
+<hr>
+<p>
+<a name="PS">*</a> PostScript and PDF are trademarks of <a href="http://www.adobe.com/">Adobe, Inc.</a>
+<p>
+<hr>
+<address>
+<a href="http://www.krisrose.net/">Kristoffer H&oslash;gsbro Rose</a>
+&mdash;
+$Id: Xy-pic.html,v 3.38 2013/10/02 02:04:28 krisrose Exp $
+&mdash;
+Hits by
+<A HREF="http://www.digits.com/thumbnail/"><IMG
+ ALT=WebCounter SRC="http://www.digits.com/thumbnail/wc-01.gif"
+ WIDTH=79 HEIGHT=22 BORDER=1 ALIGN=absmiddle></A>:
+<IMG SRC="http://counter.digits.com/wc/-c/13/-d/5/-f/000000/-b/bebebe/Xy-pic"
+ ALIGN=absmiddle WIDTH=75 HEIGHT=20 BORDER=0 ALT=Count>.
+</address>
+</body></html>
+
+<!--
+-- $Log: Xy-pic.html,v $
+-- Revision 3.38 2013/10/02 02:04:28 krisrose
+-- Release 3.8.9 including Barr's diagxy feature.
+--
+-- Revision 3.37 2011/03/14 20:14:00 krisrose
+-- Preparing for release 3.8.6.
+--
+-- Revision 3.36 2010/06/23 21:20:33 krisrose
+-- Bad backslash.
+--
+-- Revision 3.35 2010/06/23 21:17:35 krisrose
+-- Chemistry rules!
+--
+-- Revision 3.34 2010/06/10 18:45:49 krisrose
+-- Reference to GPL by URL.
+--
+-- Revision 3.33 2010/06/04 03:44:06 krisrose
+-- More tutorials!
+--
+-- Revision 3.32 2010/06/03 22:58:26 krisrose
+-- Oops.
+--
+-- Revision 3.31 2010/06/03 22:53:58 krisrose
+-- Link documents on CTAN.
+--
+-- Revision 3.30 2010/06/03 05:51:20 krisrose
+-- Link to v3.8 documentation.
+--
+-- Revision 3.29 2010/06/02 19:44:21 krisrose
+-- Cleanup.
+--
+-- Revision 3.28 2010/05/22 23:20:35 dmuellner
+-- no message
+--
+-- Revision 3.27 2010/05/21 04:36:29 krisrose
+-- Experimental version with Alex's xymatrix adjustment modifiers as default.
+--
+-- Revision 3.26 2010/05/17 23:29:21 krisrose
+-- Experiment: generate all the Type1 fonts with METAPOST.
+--
+-- Revision 3.25 2010/05/14 00:50:09 krisrose
+-- Daniel's link included.
+--
+-- Revision 3.24 2010/05/14 00:37:09 krisrose
+-- Update documentation links to PDF and include Daniel's manual.
+--
+-- Revision 3.23 2010/05/06 17:46:29 krisrose
+-- Ross Moore's e-mail address updated.
+-- Many obsolete files degraded to Historic.
+--
+-- Revision 3.22 2010/04/28 20:17:28 krisrose
+-- Link to (defunct) Y&Y Inc.
+--
+-- Revision 3.21 2010/04/28 19:59:28 krisrose
+-- Acknowledge properly.
+--
+-- Revision 3.20 2010/04/28 19:31:55 krisrose
+-- Boast about the style integration.
+--
+-- Revision 3.19 2010/04/28 07:17:17 krisrose
+-- PDF only in 3.8.
+--
+-- Revision 3.18 2010/04/28 07:11:02 krisrose
+-- Sic, again...
+--
+-- Revision 3.17 2010/04/28 07:09:10 krisrose
+-- CTAN samples and papers links...
+--
+-- Revision 3.16 2010/04/28 07:05:39 krisrose
+-- &szlig;
+--
+-- Revision 3.15 2010/04/28 07:01:24 krisrose
+-- Users!
+--
+-- Revision 3.14 2010/04/28 06:54:55 krisrose
+-- Removed Latin1 specific characters.
+--
+-- Revision 3.13 2010/04/28 06:50:42 krisrose
+-- Removed dangling link.
+--
+-- Revision 3.12 2010/04/28 06:43:27 krisrose
+-- Sic.
+--
+-- Revision 3.11 2010/04/28 05:39:25 krisrose
+-- Checked and made version independent.
+--
+-- Revision 3.10 2010/04/26 05:56:57 krisrose
+-- Link fixes in progress...
+--
+-- Revision 3.9 2010/04/21 18:41:02 krisrose
+-- Adjustments preparing for xypdf.dtx and friends!
+--
+-- Revision 3.8 2010/04/16 06:06:51 krisrose
+-- Preparing for a new release...
+--
+-- Revision 3.7 1999/02/16 15:01:59 krisrose
+-- Updated for the interim 3.7.
+--
+-- Revision 3.6 1998/03/06 01:28:05 krisrose
+-- Releasing (with Y&Y fonts).
+--
+-- Revision 3.5 1997/05/28 13:05:01 krisrose
+-- Fixed missing breaks bug.
+--
+-- Revision 3.4 1997/05/18 01:14:25 krisrose
+-- Essential bugfixes.
+--
+-- Revision 3.3 1996/12/19 17:03:13 krisrose
+-- Maintenance release.
+--
+-- Revision 3.2 1995/09/19 18:22:27 kris
+-- Bug fix release.
+--
+-- Revision 3.1 1995/09/05 20:31:32 kris
+-- Releasing!
+--
+-- Revision 3.0 1995/07/07 20:55:47 kris
+-- Refers to v3!
+--
+-- Revision 2.13 1995/07/04 15:11:17 kris
+-- Ready to release v3?
+--
+-- Revision 1.2 1994/10/06 16:43:38 kris
+-- Cleaned up to be a proper Xy-pic home page.
+--
+-- Revision 1.1 1994/08/29 12:24:13 kris
+-- Initial revision
+--
+-- Xy-pic `home page'.
+-->
diff --git a/macros/generic/diagrams/xypic/afm/xyatip10.afm b/macros/generic/diagrams/xypic/afm/xyatip10.afm
new file mode 100644
index 0000000000..3f42ed9386
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyatip10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:25 2013
+FontName XYATIP-Medium
+FullName XYATIP
+FamilyName XYATIP
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -544 -545 544 545
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -20 -20 476 280 ;
+C 1 ; WX 0 ; N d1 ; B -20 -20 466 295 ;
+C 2 ; WX 0 ; N d2 ; B -20 -20 456 311 ;
+C 3 ; WX 0 ; N d3 ; B -21 -21 445 328 ;
+C 4 ; WX 0 ; N d4 ; B -20 -20 431 345 ;
+C 5 ; WX 0 ; N d5 ; B -20 -20 417 362 ;
+C 6 ; WX 0 ; N d6 ; B -20 -20 401 380 ;
+C 7 ; WX 0 ; N d7 ; B -21 -21 383 399 ;
+C 8 ; WX 0 ; N d8 ; B -20 -21 364 417 ;
+C 9 ; WX 0 ; N d9 ; B -20 -20 341 435 ;
+C 10 ; WX 0 ; N d10 ; B -21 -21 317 452 ;
+C 11 ; WX 0 ; N d11 ; B -21 -21 293 468 ;
+C 12 ; WX 0 ; N d12 ; B -20 -20 265 484 ;
+C 13 ; WX 0 ; N d13 ; B -20 -20 236 497 ;
+C 14 ; WX 0 ; N d14 ; B -20 -21 206 510 ;
+C 15 ; WX 0 ; N d15 ; B -20 -21 175 521 ;
+C 16 ; WX 0 ; N d16 ; B -20 -21 145 529 ;
+C 17 ; WX 0 ; N d17 ; B -21 -20 113 536 ;
+C 18 ; WX 0 ; N d18 ; B -25 -20 81 541 ;
+C 19 ; WX 0 ; N d19 ; B -35 -21 50 543 ;
+C 20 ; WX 0 ; N d20 ; B -47 -20 21 545 ;
+C 21 ; WX 0 ; N d21 ; B -64 -20 21 543 ;
+C 22 ; WX 0 ; N d22 ; B -85 -21 20 541 ;
+C 23 ; WX 0 ; N d23 ; B -107 -20 21 537 ;
+C 24 ; WX 0 ; N d24 ; B -131 -20 21 532 ;
+C 25 ; WX 0 ; N d25 ; B -154 -21 21 527 ;
+C 26 ; WX 0 ; N d26 ; B -177 -21 21 520 ;
+C 27 ; WX 0 ; N d27 ; B -197 -21 21 514 ;
+C 28 ; WX 0 ; N d28 ; B -216 -20 21 506 ;
+C 29 ; WX 0 ; N d29 ; B -233 -20 21 499 ;
+C 30 ; WX 0 ; N d30 ; B -249 -20 21 492 ;
+C 31 ; WX 0 ; N d31 ; B -264 -20 21 484 ;
+C 32 ; WX 0 ; N d32 ; B -279 -20 21 476 ;
+C 33 ; WX 0 ; N d33 ; B -295 -21 21 466 ;
+C 34 ; WX 0 ; N d34 ; B -312 -21 20 456 ;
+C 35 ; WX 0 ; N d35 ; B -328 -20 21 445 ;
+C 36 ; WX 0 ; N d36 ; B -344 -21 20 431 ;
+C 37 ; WX 0 ; N d37 ; B -362 -21 20 417 ;
+C 38 ; WX 0 ; N d38 ; B -380 -20 21 401 ;
+C 39 ; WX 0 ; N d39 ; B -398 -19 21 383 ;
+C 40 ; WX 0 ; N d40 ; B -417 -19 21 363 ;
+C 41 ; WX 0 ; N d41 ; B -435 -20 21 342 ;
+C 42 ; WX 0 ; N d42 ; B -452 -21 21 318 ;
+C 43 ; WX 0 ; N d43 ; B -468 -20 20 292 ;
+C 44 ; WX 0 ; N d44 ; B -483 -19 20 265 ;
+C 45 ; WX 0 ; N d45 ; B -497 -20 21 236 ;
+C 46 ; WX 0 ; N d46 ; B -511 -20 21 206 ;
+C 47 ; WX 0 ; N d47 ; B -521 -20 20 175 ;
+C 48 ; WX 0 ; N d48 ; B -530 -20 20 144 ;
+C 49 ; WX 0 ; N d49 ; B -536 -21 21 113 ;
+C 50 ; WX 0 ; N d50 ; B -541 -26 21 81 ;
+C 51 ; WX 0 ; N d51 ; B -543 -35 21 50 ;
+C 52 ; WX 0 ; N d52 ; B -544 -48 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -543 -65 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -541 -84 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -537 -107 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -532 -131 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -527 -154 21 21 ;
+C 58 ; WX 0 ; N d58 ; B -521 -176 21 21 ;
+C 59 ; WX 0 ; N d59 ; B -514 -197 21 21 ;
+C 60 ; WX 0 ; N d60 ; B -507 -216 21 21 ;
+C 61 ; WX 0 ; N d61 ; B -499 -234 21 21 ;
+C 62 ; WX 0 ; N d62 ; B -491 -248 21 21 ;
+C 63 ; WX 0 ; N d63 ; B -484 -264 21 21 ;
+C 64 ; WX 0 ; N d64 ; B -476 -280 21 21 ;
+C 65 ; WX 0 ; N d65 ; B -466 -295 21 21 ;
+C 66 ; WX 0 ; N d66 ; B -456 -312 21 21 ;
+C 67 ; WX 0 ; N d67 ; B -445 -328 21 21 ;
+C 68 ; WX 0 ; N d68 ; B -431 -345 21 21 ;
+C 69 ; WX 0 ; N d69 ; B -417 -362 21 21 ;
+C 70 ; WX 0 ; N d70 ; B -401 -380 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -383 -398 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -364 -417 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -341 -434 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -317 -452 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -292 -469 21 21 ;
+C 76 ; WX 0 ; N d76 ; B -265 -483 21 21 ;
+C 77 ; WX 0 ; N d77 ; B -236 -497 21 21 ;
+C 78 ; WX 0 ; N d78 ; B -206 -510 21 21 ;
+C 79 ; WX 0 ; N d79 ; B -175 -521 21 21 ;
+C 80 ; WX 0 ; N d80 ; B -145 -528 21 21 ;
+C 81 ; WX 0 ; N d81 ; B -112 -536 21 21 ;
+C 82 ; WX 0 ; N d82 ; B -81 -541 25 21 ;
+C 83 ; WX 0 ; N d83 ; B -50 -543 34 21 ;
+C 84 ; WX 0 ; N d84 ; B -20 -545 47 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -543 64 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -541 84 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -537 107 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -533 131 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -527 154 21 ;
+C 90 ; WX 0 ; N d90 ; B -20 -521 176 21 ;
+C 91 ; WX 0 ; N d91 ; B -20 -514 197 21 ;
+C 92 ; WX 0 ; N d92 ; B -20 -507 216 21 ;
+C 93 ; WX 0 ; N d93 ; B -20 -499 233 21 ;
+C 94 ; WX 0 ; N d94 ; B -21 -491 249 21 ;
+C 95 ; WX 0 ; N d95 ; B -20 -484 264 21 ;
+C 96 ; WX 0 ; N d96 ; B -20 -476 280 21 ;
+C 97 ; WX 0 ; N d97 ; B -20 -467 295 21 ;
+C 98 ; WX 0 ; N d98 ; B -20 -456 312 21 ;
+C 99 ; WX 0 ; N d99 ; B -20 -445 328 21 ;
+C 100 ; WX 0 ; N d100 ; B -21 -431 345 21 ;
+C 101 ; WX 0 ; N d101 ; B -20 -417 362 21 ;
+C 102 ; WX 0 ; N d102 ; B -21 -401 380 21 ;
+C 103 ; WX 0 ; N d103 ; B -20 -383 398 22 ;
+C 104 ; WX 0 ; N d104 ; B -20 -362 417 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -340 434 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -317 452 21 ;
+C 107 ; WX 0 ; N d107 ; B -20 -292 468 21 ;
+C 108 ; WX 0 ; N d108 ; B -20 -265 483 21 ;
+C 109 ; WX 0 ; N d109 ; B -20 -235 497 21 ;
+C 110 ; WX 0 ; N d110 ; B -20 -205 511 21 ;
+C 111 ; WX 0 ; N d111 ; B -20 -176 521 21 ;
+C 112 ; WX 0 ; N d112 ; B -20 -143 529 21 ;
+C 113 ; WX 0 ; N d113 ; B -20 -112 536 21 ;
+C 114 ; WX 0 ; N d114 ; B -20 -81 541 25 ;
+C 115 ; WX 0 ; N d115 ; B -20 -50 544 35 ;
+C 116 ; WX 0 ; N d116 ; B -20 -20 544 48 ;
+C 117 ; WX 0 ; N d117 ; B -20 -21 543 64 ;
+C 118 ; WX 0 ; N d118 ; B -20 -21 541 84 ;
+C 119 ; WX 0 ; N d119 ; B -20 -21 537 106 ;
+C 120 ; WX 0 ; N d120 ; B -20 -21 533 131 ;
+C 121 ; WX 0 ; N d121 ; B -20 -20 527 154 ;
+C 122 ; WX 0 ; N d122 ; B -20 -20 520 176 ;
+C 123 ; WX 0 ; N d123 ; B -20 -21 514 197 ;
+C 124 ; WX 0 ; N d124 ; B -20 -20 507 216 ;
+C 125 ; WX 0 ; N d125 ; B -20 -20 499 233 ;
+C 126 ; WX 0 ; N d126 ; B -20 -20 491 249 ;
+C 127 ; WX 0 ; N d127 ; B -20 -20 484 264 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xybsql10.afm b/macros/generic/diagrams/xypic/afm/xybsql10.afm
new file mode 100644
index 0000000000..f1193f6aee
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xybsql10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:28 2013
+FontName XYBSQL-Medium
+FullName XYBSQL
+FamilyName XYBSQL
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -375 -375 375 375
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -262 -278 21 21 ;
+C 1 ; WX 0 ; N d1 ; B -253 -286 20 21 ;
+C 2 ; WX 0 ; N d2 ; B -244 -295 22 21 ;
+C 3 ; WX 0 ; N d3 ; B -236 -302 21 21 ;
+C 4 ; WX 0 ; N d4 ; B -225 -312 20 21 ;
+C 5 ; WX 0 ; N d5 ; B -215 -320 21 21 ;
+C 6 ; WX 0 ; N d6 ; B -204 -329 21 21 ;
+C 7 ; WX 0 ; N d7 ; B -191 -338 21 21 ;
+C 8 ; WX 0 ; N d8 ; B -179 -344 21 21 ;
+C 9 ; WX 0 ; N d9 ; B -167 -351 20 21 ;
+C 10 ; WX 0 ; N d10 ; B -155 -357 21 21 ;
+C 11 ; WX 0 ; N d11 ; B -142 -362 21 21 ;
+C 12 ; WX 0 ; N d12 ; B -129 -367 22 21 ;
+C 13 ; WX 0 ; N d13 ; B -118 -371 22 21 ;
+C 14 ; WX 0 ; N d14 ; B -106 -373 21 21 ;
+C 15 ; WX 0 ; N d15 ; B -93 -375 21 21 ;
+C 16 ; WX 0 ; N d16 ; B -83 -374 44 21 ;
+C 17 ; WX 0 ; N d17 ; B -73 -371 65 21 ;
+C 18 ; WX 0 ; N d18 ; B -65 -368 86 21 ;
+C 19 ; WX 0 ; N d19 ; B -56 -363 106 21 ;
+C 20 ; WX 0 ; N d20 ; B -49 -358 126 21 ;
+C 21 ; WX 0 ; N d21 ; B -43 -352 144 21 ;
+C 22 ; WX 0 ; N d22 ; B -37 -344 162 21 ;
+C 23 ; WX 0 ; N d23 ; B -33 -337 179 21 ;
+C 24 ; WX 0 ; N d24 ; B -31 -329 194 21 ;
+C 25 ; WX 0 ; N d25 ; B -27 -320 208 22 ;
+C 26 ; WX 0 ; N d26 ; B -25 -312 222 21 ;
+C 27 ; WX 0 ; N d27 ; B -23 -303 233 21 ;
+C 28 ; WX 0 ; N d28 ; B -22 -295 243 21 ;
+C 29 ; WX 0 ; N d29 ; B -20 -287 253 21 ;
+C 30 ; WX 0 ; N d30 ; B -22 -277 263 21 ;
+C 31 ; WX 0 ; N d31 ; B -20 -270 270 22 ;
+C 32 ; WX 0 ; N d32 ; B -21 -262 278 21 ;
+C 33 ; WX 0 ; N d33 ; B -22 -253 286 21 ;
+C 34 ; WX 0 ; N d34 ; B -21 -244 295 21 ;
+C 35 ; WX 0 ; N d35 ; B -21 -236 303 21 ;
+C 36 ; WX 0 ; N d36 ; B -20 -225 312 21 ;
+C 37 ; WX 0 ; N d37 ; B -21 -215 320 21 ;
+C 38 ; WX 0 ; N d38 ; B -21 -204 329 22 ;
+C 39 ; WX 0 ; N d39 ; B -22 -190 338 22 ;
+C 40 ; WX 0 ; N d40 ; B -22 -178 344 21 ;
+C 41 ; WX 0 ; N d41 ; B -21 -167 352 21 ;
+C 42 ; WX 0 ; N d42 ; B -21 -155 357 21 ;
+C 43 ; WX 0 ; N d43 ; B -21 -142 362 21 ;
+C 44 ; WX 0 ; N d44 ; B -21 -129 368 21 ;
+C 45 ; WX 0 ; N d45 ; B -21 -118 371 22 ;
+C 46 ; WX 0 ; N d46 ; B -21 -106 373 22 ;
+C 47 ; WX 0 ; N d47 ; B -21 -93 375 22 ;
+C 48 ; WX 0 ; N d48 ; B -20 -83 374 44 ;
+C 49 ; WX 0 ; N d49 ; B -21 -74 371 64 ;
+C 50 ; WX 0 ; N d50 ; B -20 -64 368 86 ;
+C 51 ; WX 0 ; N d51 ; B -20 -56 363 106 ;
+C 52 ; WX 0 ; N d52 ; B -20 -49 358 126 ;
+C 53 ; WX 0 ; N d53 ; B -20 -43 352 146 ;
+C 54 ; WX 0 ; N d54 ; B -20 -37 344 162 ;
+C 55 ; WX 0 ; N d55 ; B -21 -33 337 180 ;
+C 56 ; WX 0 ; N d56 ; B -20 -31 330 194 ;
+C 57 ; WX 0 ; N d57 ; B -22 -27 320 208 ;
+C 58 ; WX 0 ; N d58 ; B -20 -26 312 222 ;
+C 59 ; WX 0 ; N d59 ; B -20 -24 303 234 ;
+C 60 ; WX 0 ; N d60 ; B -21 -21 295 244 ;
+C 61 ; WX 0 ; N d61 ; B -20 -20 287 253 ;
+C 62 ; WX 0 ; N d62 ; B -20 -20 277 262 ;
+C 63 ; WX 0 ; N d63 ; B -19 -19 270 271 ;
+C 64 ; WX 0 ; N d64 ; B -20 -20 262 278 ;
+C 65 ; WX 0 ; N d65 ; B -20 -20 253 287 ;
+C 66 ; WX 0 ; N d66 ; B -21 -21 245 296 ;
+C 67 ; WX 0 ; N d67 ; B -21 -21 236 303 ;
+C 68 ; WX 0 ; N d68 ; B -20 -20 225 312 ;
+C 69 ; WX 0 ; N d69 ; B -21 -21 215 320 ;
+C 70 ; WX 0 ; N d70 ; B -21 -21 204 329 ;
+C 71 ; WX 0 ; N d71 ; B -21 -21 190 338 ;
+C 72 ; WX 0 ; N d72 ; B -20 -21 179 344 ;
+C 73 ; WX 0 ; N d73 ; B -20 -21 167 352 ;
+C 74 ; WX 0 ; N d74 ; B -20 -21 155 358 ;
+C 75 ; WX 0 ; N d75 ; B -20 -21 142 363 ;
+C 76 ; WX 0 ; N d76 ; B -22 -21 129 368 ;
+C 77 ; WX 0 ; N d77 ; B -22 -21 118 372 ;
+C 78 ; WX 0 ; N d78 ; B -22 -22 105 373 ;
+C 79 ; WX 0 ; N d79 ; B -21 -22 93 375 ;
+C 80 ; WX 0 ; N d80 ; B -43 -20 83 374 ;
+C 81 ; WX 0 ; N d81 ; B -65 -21 74 371 ;
+C 82 ; WX 0 ; N d82 ; B -86 -20 64 368 ;
+C 83 ; WX 0 ; N d83 ; B -106 -20 56 363 ;
+C 84 ; WX 0 ; N d84 ; B -126 -20 49 359 ;
+C 85 ; WX 0 ; N d85 ; B -146 -20 43 352 ;
+C 86 ; WX 0 ; N d86 ; B -162 -20 37 344 ;
+C 87 ; WX 0 ; N d87 ; B -180 -21 33 337 ;
+C 88 ; WX 0 ; N d88 ; B -194 -20 31 330 ;
+C 89 ; WX 0 ; N d89 ; B -208 -22 27 321 ;
+C 90 ; WX 0 ; N d90 ; B -221 -20 26 313 ;
+C 91 ; WX 0 ; N d91 ; B -233 -20 24 303 ;
+C 92 ; WX 0 ; N d92 ; B -244 -21 21 295 ;
+C 93 ; WX 0 ; N d93 ; B -254 -20 20 287 ;
+C 94 ; WX 0 ; N d94 ; B -262 -20 21 278 ;
+C 95 ; WX 0 ; N d95 ; B -271 -19 20 271 ;
+C 96 ; WX 0 ; N d96 ; B -278 -20 20 262 ;
+C 97 ; WX 0 ; N d97 ; B -286 -20 20 254 ;
+C 98 ; WX 0 ; N d98 ; B -296 -21 21 245 ;
+C 99 ; WX 0 ; N d99 ; B -302 -21 21 236 ;
+C 100 ; WX 0 ; N d100 ; B -312 -19 21 225 ;
+C 101 ; WX 0 ; N d101 ; B -320 -21 21 214 ;
+C 102 ; WX 0 ; N d102 ; B -329 -21 22 203 ;
+C 103 ; WX 0 ; N d103 ; B -338 -21 21 191 ;
+C 104 ; WX 0 ; N d104 ; B -344 -20 21 179 ;
+C 105 ; WX 0 ; N d105 ; B -351 -20 21 167 ;
+C 106 ; WX 0 ; N d106 ; B -357 -20 21 155 ;
+C 107 ; WX 0 ; N d107 ; B -362 -20 21 143 ;
+C 108 ; WX 0 ; N d108 ; B -367 -22 21 129 ;
+C 109 ; WX 0 ; N d109 ; B -371 -22 21 118 ;
+C 110 ; WX 0 ; N d110 ; B -373 -22 22 105 ;
+C 111 ; WX 0 ; N d111 ; B -375 -21 22 94 ;
+C 112 ; WX 0 ; N d112 ; B -374 -44 20 83 ;
+C 113 ; WX 0 ; N d113 ; B -371 -65 21 73 ;
+C 114 ; WX 0 ; N d114 ; B -368 -86 20 64 ;
+C 115 ; WX 0 ; N d115 ; B -363 -106 20 56 ;
+C 116 ; WX 0 ; N d116 ; B -358 -126 20 49 ;
+C 117 ; WX 0 ; N d117 ; B -352 -144 20 43 ;
+C 118 ; WX 0 ; N d118 ; B -344 -161 20 38 ;
+C 119 ; WX 0 ; N d119 ; B -337 -179 21 33 ;
+C 120 ; WX 0 ; N d120 ; B -329 -194 20 30 ;
+C 121 ; WX 0 ; N d121 ; B -320 -208 22 27 ;
+C 122 ; WX 0 ; N d122 ; B -312 -222 21 25 ;
+C 123 ; WX 0 ; N d123 ; B -303 -233 20 23 ;
+C 124 ; WX 0 ; N d124 ; B -295 -243 21 22 ;
+C 125 ; WX 0 ; N d125 ; B -287 -253 20 21 ;
+C 126 ; WX 0 ; N d126 ; B -277 -263 20 21 ;
+C 127 ; WX 0 ; N d127 ; B -270 -270 20 21 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xybtip10.afm b/macros/generic/diagrams/xypic/afm/xybtip10.afm
new file mode 100644
index 0000000000..f7ad652d41
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xybtip10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:31 2013
+FontName XYBTIP-Medium
+FullName XYBTIP
+FamilyName XYBTIP
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -544 -544 544 544
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -21 -21 249 491 ;
+C 1 ; WX 0 ; N d1 ; B -20 -21 233 499 ;
+C 2 ; WX 0 ; N d2 ; B -20 -21 216 506 ;
+C 3 ; WX 0 ; N d3 ; B -20 -21 197 514 ;
+C 4 ; WX 0 ; N d4 ; B -20 -21 177 521 ;
+C 5 ; WX 0 ; N d5 ; B -20 -20 154 527 ;
+C 6 ; WX 0 ; N d6 ; B -21 -21 131 532 ;
+C 7 ; WX 0 ; N d7 ; B -21 -20 107 538 ;
+C 8 ; WX 0 ; N d8 ; B -21 -20 84 541 ;
+C 9 ; WX 0 ; N d9 ; B -20 -21 64 543 ;
+C 10 ; WX 0 ; N d10 ; B -20 -21 47 544 ;
+C 11 ; WX 0 ; N d11 ; B -50 -21 34 544 ;
+C 12 ; WX 0 ; N d12 ; B -81 -21 26 541 ;
+C 13 ; WX 0 ; N d13 ; B -113 -21 22 537 ;
+C 14 ; WX 0 ; N d14 ; B -144 -20 21 529 ;
+C 15 ; WX 0 ; N d15 ; B -175 -21 21 521 ;
+C 16 ; WX 0 ; N d16 ; B -206 -21 20 510 ;
+C 17 ; WX 0 ; N d17 ; B -236 -21 21 497 ;
+C 18 ; WX 0 ; N d18 ; B -265 -20 21 484 ;
+C 19 ; WX 0 ; N d19 ; B -292 -20 21 468 ;
+C 20 ; WX 0 ; N d20 ; B -318 -21 21 452 ;
+C 21 ; WX 0 ; N d21 ; B -341 -21 20 435 ;
+C 22 ; WX 0 ; N d22 ; B -364 -20 21 417 ;
+C 23 ; WX 0 ; N d23 ; B -383 -21 21 398 ;
+C 24 ; WX 0 ; N d24 ; B -401 -21 21 381 ;
+C 25 ; WX 0 ; N d25 ; B -417 -21 21 362 ;
+C 26 ; WX 0 ; N d26 ; B -431 -21 21 345 ;
+C 27 ; WX 0 ; N d27 ; B -445 -21 21 328 ;
+C 28 ; WX 0 ; N d28 ; B -456 -21 20 311 ;
+C 29 ; WX 0 ; N d29 ; B -466 -21 20 295 ;
+C 30 ; WX 0 ; N d30 ; B -476 -20 20 279 ;
+C 31 ; WX 0 ; N d31 ; B -484 -21 21 264 ;
+C 32 ; WX 0 ; N d32 ; B -491 -20 21 249 ;
+C 33 ; WX 0 ; N d33 ; B -499 -21 21 233 ;
+C 34 ; WX 0 ; N d34 ; B -507 -19 21 216 ;
+C 35 ; WX 0 ; N d35 ; B -514 -21 21 197 ;
+C 36 ; WX 0 ; N d36 ; B -520 -20 21 176 ;
+C 37 ; WX 0 ; N d37 ; B -527 -21 21 154 ;
+C 38 ; WX 0 ; N d38 ; B -533 -20 21 131 ;
+C 39 ; WX 0 ; N d39 ; B -537 -20 21 106 ;
+C 40 ; WX 0 ; N d40 ; B -541 -20 21 84 ;
+C 41 ; WX 0 ; N d41 ; B -543 -20 21 64 ;
+C 42 ; WX 0 ; N d42 ; B -544 -21 21 47 ;
+C 43 ; WX 0 ; N d43 ; B -543 -50 21 35 ;
+C 44 ; WX 0 ; N d44 ; B -541 -81 21 25 ;
+C 45 ; WX 0 ; N d45 ; B -536 -112 21 21 ;
+C 46 ; WX 0 ; N d46 ; B -529 -143 21 21 ;
+C 47 ; WX 0 ; N d47 ; B -521 -176 21 21 ;
+C 48 ; WX 0 ; N d48 ; B -510 -205 21 21 ;
+C 49 ; WX 0 ; N d49 ; B -497 -235 21 21 ;
+C 50 ; WX 0 ; N d50 ; B -483 -265 21 21 ;
+C 51 ; WX 0 ; N d51 ; B -468 -292 21 21 ;
+C 52 ; WX 0 ; N d52 ; B -452 -317 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -434 -340 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -417 -362 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -398 -383 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -380 -401 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -362 -417 21 21 ;
+C 58 ; WX 0 ; N d58 ; B -345 -431 21 21 ;
+C 59 ; WX 0 ; N d59 ; B -328 -445 21 21 ;
+C 60 ; WX 0 ; N d60 ; B -312 -456 21 21 ;
+C 61 ; WX 0 ; N d61 ; B -295 -467 21 21 ;
+C 62 ; WX 0 ; N d62 ; B -280 -476 21 21 ;
+C 63 ; WX 0 ; N d63 ; B -264 -484 21 21 ;
+C 64 ; WX 0 ; N d64 ; B -249 -491 21 21 ;
+C 65 ; WX 0 ; N d65 ; B -233 -499 21 21 ;
+C 66 ; WX 0 ; N d66 ; B -216 -507 21 21 ;
+C 67 ; WX 0 ; N d67 ; B -197 -514 21 21 ;
+C 68 ; WX 0 ; N d68 ; B -176 -521 21 21 ;
+C 69 ; WX 0 ; N d69 ; B -154 -527 21 21 ;
+C 70 ; WX 0 ; N d70 ; B -131 -533 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -107 -537 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -84 -541 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -65 -543 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -47 -544 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -35 -543 50 21 ;
+C 76 ; WX 0 ; N d76 ; B -25 -541 81 21 ;
+C 77 ; WX 0 ; N d77 ; B -21 -536 112 21 ;
+C 78 ; WX 0 ; N d78 ; B -20 -528 145 21 ;
+C 79 ; WX 0 ; N d79 ; B -21 -521 175 21 ;
+C 80 ; WX 0 ; N d80 ; B -20 -510 206 21 ;
+C 81 ; WX 0 ; N d81 ; B -20 -497 236 21 ;
+C 82 ; WX 0 ; N d82 ; B -20 -483 265 21 ;
+C 83 ; WX 0 ; N d83 ; B -20 -469 292 21 ;
+C 84 ; WX 0 ; N d84 ; B -21 -452 317 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -434 341 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -417 364 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -398 383 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -380 401 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -362 417 21 ;
+C 90 ; WX 0 ; N d90 ; B -20 -345 431 21 ;
+C 91 ; WX 0 ; N d91 ; B -20 -328 445 21 ;
+C 92 ; WX 0 ; N d92 ; B -20 -312 456 21 ;
+C 93 ; WX 0 ; N d93 ; B -20 -295 466 21 ;
+C 94 ; WX 0 ; N d94 ; B -20 -279 476 21 ;
+C 95 ; WX 0 ; N d95 ; B -20 -264 484 21 ;
+C 96 ; WX 0 ; N d96 ; B -20 -248 491 21 ;
+C 97 ; WX 0 ; N d97 ; B -20 -234 499 21 ;
+C 98 ; WX 0 ; N d98 ; B -20 -216 507 21 ;
+C 99 ; WX 0 ; N d99 ; B -20 -197 514 21 ;
+C 100 ; WX 0 ; N d100 ; B -20 -177 520 21 ;
+C 101 ; WX 0 ; N d101 ; B -20 -154 527 21 ;
+C 102 ; WX 0 ; N d102 ; B -20 -131 532 21 ;
+C 103 ; WX 0 ; N d103 ; B -20 -107 537 21 ;
+C 104 ; WX 0 ; N d104 ; B -20 -84 541 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -65 543 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -48 544 21 ;
+C 107 ; WX 0 ; N d107 ; B -20 -35 544 50 ;
+C 108 ; WX 0 ; N d108 ; B -20 -25 541 81 ;
+C 109 ; WX 0 ; N d109 ; B -20 -21 536 112 ;
+C 110 ; WX 0 ; N d110 ; B -20 -20 530 144 ;
+C 111 ; WX 0 ; N d111 ; B -20 -20 521 175 ;
+C 112 ; WX 0 ; N d112 ; B -20 -20 510 206 ;
+C 113 ; WX 0 ; N d113 ; B -20 -21 497 237 ;
+C 114 ; WX 0 ; N d114 ; B -20 -20 483 265 ;
+C 115 ; WX 0 ; N d115 ; B -20 -21 468 292 ;
+C 116 ; WX 0 ; N d116 ; B -20 -20 452 318 ;
+C 117 ; WX 0 ; N d117 ; B -20 -20 434 341 ;
+C 118 ; WX 0 ; N d118 ; B -20 -21 417 363 ;
+C 119 ; WX 0 ; N d119 ; B -20 -21 398 383 ;
+C 120 ; WX 0 ; N d120 ; B -21 -20 380 401 ;
+C 121 ; WX 0 ; N d121 ; B -20 -21 362 418 ;
+C 122 ; WX 0 ; N d122 ; B -21 -21 345 431 ;
+C 123 ; WX 0 ; N d123 ; B -20 -21 328 445 ;
+C 124 ; WX 0 ; N d124 ; B -20 -21 312 457 ;
+C 125 ; WX 0 ; N d125 ; B -20 -21 295 466 ;
+C 126 ; WX 0 ; N d126 ; B -20 -20 279 476 ;
+C 127 ; WX 0 ; N d127 ; B -20 -20 264 484 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycirc10.afm b/macros/generic/diagrams/xypic/afm/xycirc10.afm
new file mode 100644
index 0000000000..5aaaca33b3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycirc10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:36 2013
+FontName XYCIRC-Medium
+FullName XYCIRC
+FamilyName XYCIRC
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -22 -3220 2284 3221
+StartCharMetrics 128
+C 0 ; WX 29 ; N c0 ; B -21 -91 50 21 ;
+C 1 ; WX 71 ; N c1 ; B -22 -120 91 -50 ;
+C 2 ; WX 71 ; N c2 ; B -19 -121 92 -50 ;
+C 3 ; WX 29 ; N c3 ; B -21 -92 49 21 ;
+C 4 ; WX 29 ; N c4 ; B -21 -19 50 91 ;
+C 5 ; WX 71 ; N c5 ; B -21 50 92 121 ;
+C 6 ; WX 71 ; N c6 ; B -22 49 90 121 ;
+C 7 ; WX 29 ; N c7 ; B -20 -20 50 91 ;
+C 8 ; WX 59 ; N c8 ; B -20 -162 79 21 ;
+C 9 ; WX 141 ; N c9 ; B -21 -222 162 -121 ;
+C 10 ; WX 141 ; N c10 ; B -19 -220 163 -121 ;
+C 11 ; WX 59 ; N c11 ; B -22 -163 80 21 ;
+C 12 ; WX 59 ; N c12 ; B -21 -19 78 163 ;
+C 13 ; WX 141 ; N c13 ; B -21 120 163 221 ;
+C 14 ; WX 141 ; N c14 ; B -21 121 161 221 ;
+C 15 ; WX 59 ; N c15 ; B -22 -20 79 162 ;
+C 16 ; WX 88 ; N c16 ; B -20 -233 108 21 ;
+C 17 ; WX 212 ; N c17 ; B -21 -320 234 -192 ;
+C 18 ; WX 212 ; N c18 ; B -20 -322 234 -192 ;
+C 19 ; WX 88 ; N c19 ; B -22 -234 107 21 ;
+C 20 ; WX 88 ; N c20 ; B -21 -20 109 234 ;
+C 21 ; WX 212 ; N c21 ; B -21 191 234 321 ;
+C 22 ; WX 212 ; N c22 ; B -22 191 234 321 ;
+C 23 ; WX 88 ; N c23 ; B -20 -22 108 233 ;
+C 24 ; WX 117 ; N c24 ; B -20 -302 138 21 ;
+C 25 ; WX 283 ; N c25 ; B -21 -420 303 -261 ;
+C 26 ; WX 283 ; N c26 ; B -19 -422 304 -262 ;
+C 27 ; WX 117 ; N c27 ; B -22 -304 137 21 ;
+C 28 ; WX 117 ; N c28 ; B -21 -19 138 304 ;
+C 29 ; WX 283 ; N c29 ; B -21 261 304 421 ;
+C 30 ; WX 283 ; N c30 ; B -22 261 302 421 ;
+C 31 ; WX 117 ; N c31 ; B -20 -20 138 303 ;
+C 32 ; WX 146 ; N c32 ; B -21 -375 168 21 ;
+C 33 ; WX 354 ; N c33 ; B -21 -522 374 -332 ;
+C 34 ; WX 354 ; N c34 ; B -19 -520 375 -333 ;
+C 35 ; WX 146 ; N c35 ; B -22 -375 168 21 ;
+C 36 ; WX 146 ; N c36 ; B -21 -19 167 375 ;
+C 37 ; WX 354 ; N c37 ; B -21 332 375 522 ;
+C 38 ; WX 354 ; N c38 ; B -22 332 373 521 ;
+C 39 ; WX 146 ; N c39 ; B -22 -20 167 375 ;
+C 40 ; WX 176 ; N c40 ; B -20 -445 197 21 ;
+C 41 ; WX 424 ; N c41 ; B -21 -620 445 -403 ;
+C 42 ; WX 424 ; N c42 ; B -21 -621 446 -404 ;
+C 43 ; WX 176 ; N c43 ; B -21 -445 196 21 ;
+C 44 ; WX 176 ; N c44 ; B -20 -20 196 445 ;
+C 45 ; WX 424 ; N c45 ; B -21 403 446 621 ;
+C 46 ; WX 424 ; N c46 ; B -22 403 445 621 ;
+C 47 ; WX 176 ; N c47 ; B -20 -20 196 445 ;
+C 48 ; WX 205 ; N c48 ; B -20 -516 226 22 ;
+C 49 ; WX 495 ; N c49 ; B -21 -721 515 -473 ;
+C 50 ; WX 495 ; N c50 ; B -19 -720 515 -473 ;
+C 51 ; WX 205 ; N c51 ; B -20 -515 226 21 ;
+C 52 ; WX 205 ; N c52 ; B -20 -20 226 515 ;
+C 53 ; WX 495 ; N c53 ; B -21 473 516 722 ;
+C 54 ; WX 495 ; N c54 ; B -22 473 514 721 ;
+C 55 ; WX 205 ; N c55 ; B -21 -20 226 515 ;
+C 56 ; WX 234 ; N c56 ; B -20 -587 256 21 ;
+C 57 ; WX 566 ; N c57 ; B -21 -822 586 -545 ;
+C 58 ; WX 566 ; N c58 ; B -19 -820 587 -545 ;
+C 59 ; WX 234 ; N c59 ; B -21 -587 255 21 ;
+C 60 ; WX 234 ; N c60 ; B -20 -20 255 586 ;
+C 61 ; WX 566 ; N c61 ; B -21 544 587 822 ;
+C 62 ; WX 566 ; N c62 ; B -22 544 585 821 ;
+C 63 ; WX 234 ; N c63 ; B -22 -20 255 586 ;
+C 64 ; WX 293 ; N c64 ; B -21 -728 314 21 ;
+C 65 ; WX 707 ; N c65 ; B -21 -1020 728 -686 ;
+C 66 ; WX 707 ; N c66 ; B -20 -1022 728 -686 ;
+C 67 ; WX 293 ; N c67 ; B -21 -728 313 21 ;
+C 68 ; WX 293 ; N c68 ; B -20 -20 313 728 ;
+C 69 ; WX 707 ; N c69 ; B -21 687 729 1021 ;
+C 70 ; WX 707 ; N c70 ; B -22 686 728 1021 ;
+C 71 ; WX 293 ; N c71 ; B -20 -20 314 728 ;
+C 72 ; WX 351 ; N c72 ; B -20 -869 373 22 ;
+C 73 ; WX 849 ; N c73 ; B -21 -1220 869 -828 ;
+C 74 ; WX 849 ; N c74 ; B -19 -1220 870 -828 ;
+C 75 ; WX 351 ; N c75 ; B -21 -869 372 21 ;
+C 76 ; WX 351 ; N c76 ; B -20 -20 372 869 ;
+C 77 ; WX 849 ; N c77 ; B -21 827 870 1221 ;
+C 78 ; WX 849 ; N c78 ; B -22 827 869 1221 ;
+C 79 ; WX 351 ; N c79 ; B -20 -20 372 870 ;
+C 80 ; WX 410 ; N c80 ; B -21 -1010 432 21 ;
+C 81 ; WX 990 ; N c81 ; B -21 -1422 1010 -968 ;
+C 82 ; WX 990 ; N c82 ; B -19 -1420 1011 -969 ;
+C 83 ; WX 410 ; N c83 ; B -21 -1010 431 21 ;
+C 84 ; WX 410 ; N c84 ; B -20 -20 432 1011 ;
+C 85 ; WX 990 ; N c85 ; B -21 968 1011 1421 ;
+C 86 ; WX 990 ; N c86 ; B -21 969 1009 1421 ;
+C 87 ; WX 410 ; N c87 ; B -22 -20 431 1010 ;
+C 88 ; WX 469 ; N c88 ; B -20 -1153 489 22 ;
+C 89 ; WX 1131 ; N c89 ; B -21 -1620 1152 -1111 ;
+C 90 ; WX 1131 ; N c90 ; B -20 -1620 1152 -1110 ;
+C 91 ; WX 469 ; N c91 ; B -20 -1153 489 21 ;
+C 92 ; WX 469 ; N c92 ; B -20 -20 489 1152 ;
+C 93 ; WX 1131 ; N c93 ; B -22 1110 1152 1621 ;
+C 94 ; WX 1131 ; N c94 ; B -21 1110 1152 1621 ;
+C 95 ; WX 469 ; N c95 ; B -20 -21 489 1152 ;
+C 96 ; WX 586 ; N c96 ; B -20 -1435 607 21 ;
+C 97 ; WX 1414 ; N c97 ; B -21 -2021 1435 -1393 ;
+C 98 ; WX 1414 ; N c98 ; B -20 -2021 1435 -1393 ;
+C 99 ; WX 586 ; N c99 ; B -21 -1435 606 21 ;
+C 100 ; WX 586 ; N c100 ; B -20 -20 606 1436 ;
+C 101 ; WX 1414 ; N c101 ; B -21 1394 1436 2021 ;
+C 102 ; WX 1414 ; N c102 ; B -21 1394 1435 2021 ;
+C 103 ; WX 586 ; N c103 ; B -21 -20 607 1435 ;
+C 104 ; WX 703 ; N c104 ; B -20 -1719 723 21 ;
+C 105 ; WX 1697 ; N c105 ; B -20 -2420 1718 -1677 ;
+C 106 ; WX 1697 ; N c106 ; B -20 -2421 1718 -1677 ;
+C 107 ; WX 703 ; N c107 ; B -20 -1719 723 21 ;
+C 108 ; WX 703 ; N c108 ; B -20 -20 723 1719 ;
+C 109 ; WX 1697 ; N c109 ; B -20 1677 1718 2420 ;
+C 110 ; WX 1697 ; N c110 ; B -20 1677 1718 2421 ;
+C 111 ; WX 703 ; N c111 ; B -20 -20 724 1718 ;
+C 112 ; WX 820 ; N c112 ; B -20 -2000 842 22 ;
+C 113 ; WX 1980 ; N c113 ; B -20 -2820 2000 -1959 ;
+C 114 ; WX 1980 ; N c114 ; B -20 -2820 2000 -1959 ;
+C 115 ; WX 820 ; N c115 ; B -21 -2000 841 21 ;
+C 116 ; WX 820 ; N c116 ; B -20 -20 841 2001 ;
+C 117 ; WX 1980 ; N c117 ; B -20 1959 2000 2821 ;
+C 118 ; WX 1980 ; N c118 ; B -21 1960 2000 2821 ;
+C 119 ; WX 820 ; N c119 ; B -20 -20 841 2000 ;
+C 120 ; WX 937 ; N c120 ; B -21 -2284 958 20 ;
+C 121 ; WX 2263 ; N c121 ; B -20 -3220 2283 -2242 ;
+C 122 ; WX 2263 ; N c122 ; B -20 -3220 2284 -2242 ;
+C 123 ; WX 937 ; N c123 ; B -20 -2283 958 20 ;
+C 124 ; WX 937 ; N c124 ; B -20 -20 958 2284 ;
+C 125 ; WX 2263 ; N c125 ; B -21 2242 2283 3221 ;
+C 126 ; WX 2263 ; N c126 ; B -21 2242 2284 3221 ;
+C 127 ; WX 937 ; N c127 ; B -20 -20 958 2284 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmat10.afm b/macros/generic/diagrams/xypic/afm/xycmat10.afm
new file mode 100644
index 0000000000..bff59bb49a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmat10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:00 2013
+FontName XYCMAT-Medium
+FullName XYCMAT
+FamilyName XYCMAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -341 -341 341 341
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -20 -46 340 50 ;
+C 1 ; WX 0 ; N d1 ; B -20 -35 341 55 ;
+C 2 ; WX 0 ; N d2 ; B -20 -24 341 60 ;
+C 3 ; WX 0 ; N d3 ; B -20 -21 341 67 ;
+C 4 ; WX 0 ; N d4 ; B -20 -21 340 74 ;
+C 5 ; WX 0 ; N d5 ; B -20 -20 338 82 ;
+C 6 ; WX 0 ; N d6 ; B -20 -21 336 91 ;
+C 7 ; WX 0 ; N d7 ; B -20 -21 334 102 ;
+C 8 ; WX 0 ; N d8 ; B -20 -20 330 113 ;
+C 9 ; WX 0 ; N d9 ; B -20 -20 326 126 ;
+C 10 ; WX 0 ; N d10 ; B -21 -20 319 140 ;
+C 11 ; WX 0 ; N d11 ; B -21 -21 312 155 ;
+C 12 ; WX 0 ; N d12 ; B -20 -20 303 171 ;
+C 13 ; WX 0 ; N d13 ; B -21 -21 294 188 ;
+C 14 ; WX 0 ; N d14 ; B -20 -20 283 205 ;
+C 15 ; WX 0 ; N d15 ; B -20 -21 271 221 ;
+C 16 ; WX 0 ; N d16 ; B -21 -20 258 236 ;
+C 17 ; WX 0 ; N d17 ; B -21 -20 244 250 ;
+C 18 ; WX 0 ; N d18 ; B -21 -21 230 263 ;
+C 19 ; WX 0 ; N d19 ; B -21 -21 215 276 ;
+C 20 ; WX 0 ; N d20 ; B -21 -21 200 286 ;
+C 21 ; WX 0 ; N d21 ; B -20 -21 184 296 ;
+C 22 ; WX 0 ; N d22 ; B -21 -21 169 304 ;
+C 23 ; WX 0 ; N d23 ; B -21 -20 156 311 ;
+C 24 ; WX 0 ; N d24 ; B -23 -21 141 317 ;
+C 25 ; WX 0 ; N d25 ; B -26 -21 127 323 ;
+C 26 ; WX 0 ; N d26 ; B -28 -20 113 328 ;
+C 27 ; WX 0 ; N d27 ; B -32 -21 100 331 ;
+C 28 ; WX 0 ; N d28 ; B -34 -21 88 334 ;
+C 29 ; WX 0 ; N d29 ; B -38 -20 77 336 ;
+C 30 ; WX 0 ; N d30 ; B -42 -20 66 338 ;
+C 31 ; WX 0 ; N d31 ; B -46 -20 56 339 ;
+C 32 ; WX 0 ; N d32 ; B -50 -21 46 340 ;
+C 33 ; WX 0 ; N d33 ; B -55 -21 35 340 ;
+C 34 ; WX 0 ; N d34 ; B -60 -21 24 341 ;
+C 35 ; WX 0 ; N d35 ; B -68 -20 21 341 ;
+C 36 ; WX 0 ; N d36 ; B -75 -20 21 340 ;
+C 37 ; WX 0 ; N d37 ; B -83 -20 21 339 ;
+C 38 ; WX 0 ; N d38 ; B -91 -21 21 336 ;
+C 39 ; WX 0 ; N d39 ; B -102 -21 21 334 ;
+C 40 ; WX 0 ; N d40 ; B -114 -20 21 330 ;
+C 41 ; WX 0 ; N d41 ; B -127 -20 21 325 ;
+C 42 ; WX 0 ; N d42 ; B -139 -20 21 319 ;
+C 43 ; WX 0 ; N d43 ; B -155 -20 21 312 ;
+C 44 ; WX 0 ; N d44 ; B -171 -20 20 303 ;
+C 45 ; WX 0 ; N d45 ; B -188 -19 21 294 ;
+C 46 ; WX 0 ; N d46 ; B -205 -20 21 282 ;
+C 47 ; WX 0 ; N d47 ; B -221 -21 21 271 ;
+C 48 ; WX 0 ; N d48 ; B -236 -19 21 258 ;
+C 49 ; WX 0 ; N d49 ; B -250 -20 21 244 ;
+C 50 ; WX 0 ; N d50 ; B -263 -20 21 229 ;
+C 51 ; WX 0 ; N d51 ; B -276 -21 21 215 ;
+C 52 ; WX 0 ; N d52 ; B -286 -19 21 200 ;
+C 53 ; WX 0 ; N d53 ; B -296 -20 21 184 ;
+C 54 ; WX 0 ; N d54 ; B -304 -21 21 170 ;
+C 55 ; WX 0 ; N d55 ; B -311 -21 21 155 ;
+C 56 ; WX 0 ; N d56 ; B -317 -23 21 140 ;
+C 57 ; WX 0 ; N d57 ; B -323 -25 21 127 ;
+C 58 ; WX 0 ; N d58 ; B -327 -29 21 114 ;
+C 59 ; WX 0 ; N d59 ; B -331 -31 21 101 ;
+C 60 ; WX 0 ; N d60 ; B -333 -34 21 88 ;
+C 61 ; WX 0 ; N d61 ; B -336 -38 21 78 ;
+C 62 ; WX 0 ; N d62 ; B -337 -42 21 66 ;
+C 63 ; WX 0 ; N d63 ; B -339 -46 21 56 ;
+C 64 ; WX 0 ; N d64 ; B -340 -50 21 46 ;
+C 65 ; WX 0 ; N d65 ; B -341 -55 21 35 ;
+C 66 ; WX 0 ; N d66 ; B -341 -60 21 23 ;
+C 67 ; WX 0 ; N d67 ; B -341 -67 21 21 ;
+C 68 ; WX 0 ; N d68 ; B -340 -74 21 21 ;
+C 69 ; WX 0 ; N d69 ; B -338 -82 21 21 ;
+C 70 ; WX 0 ; N d70 ; B -336 -92 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -334 -102 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -330 -114 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -325 -126 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -319 -140 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -312 -155 21 21 ;
+C 76 ; WX 0 ; N d76 ; B -303 -172 21 21 ;
+C 77 ; WX 0 ; N d77 ; B -294 -187 21 21 ;
+C 78 ; WX 0 ; N d78 ; B -283 -205 21 21 ;
+C 79 ; WX 0 ; N d79 ; B -271 -221 21 21 ;
+C 80 ; WX 0 ; N d80 ; B -258 -236 21 21 ;
+C 81 ; WX 0 ; N d81 ; B -244 -250 21 21 ;
+C 82 ; WX 0 ; N d82 ; B -230 -264 21 21 ;
+C 83 ; WX 0 ; N d83 ; B -215 -276 21 21 ;
+C 84 ; WX 0 ; N d84 ; B -200 -285 21 21 ;
+C 85 ; WX 0 ; N d85 ; B -184 -296 21 21 ;
+C 86 ; WX 0 ; N d86 ; B -169 -304 21 21 ;
+C 87 ; WX 0 ; N d87 ; B -156 -311 21 21 ;
+C 88 ; WX 0 ; N d88 ; B -141 -317 23 21 ;
+C 89 ; WX 0 ; N d89 ; B -127 -323 26 21 ;
+C 90 ; WX 0 ; N d90 ; B -113 -327 28 21 ;
+C 91 ; WX 0 ; N d91 ; B -100 -331 31 21 ;
+C 92 ; WX 0 ; N d92 ; B -88 -334 34 21 ;
+C 93 ; WX 0 ; N d93 ; B -77 -336 38 21 ;
+C 94 ; WX 0 ; N d94 ; B -66 -337 43 21 ;
+C 95 ; WX 0 ; N d95 ; B -56 -339 46 21 ;
+C 96 ; WX 0 ; N d96 ; B -46 -340 50 21 ;
+C 97 ; WX 0 ; N d97 ; B -35 -341 55 21 ;
+C 98 ; WX 0 ; N d98 ; B -24 -341 60 21 ;
+C 99 ; WX 0 ; N d99 ; B -20 -341 68 21 ;
+C 100 ; WX 0 ; N d100 ; B -20 -340 75 21 ;
+C 101 ; WX 0 ; N d101 ; B -20 -338 82 21 ;
+C 102 ; WX 0 ; N d102 ; B -20 -336 91 21 ;
+C 103 ; WX 0 ; N d103 ; B -20 -334 102 21 ;
+C 104 ; WX 0 ; N d104 ; B -20 -330 113 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -325 126 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -319 140 21 ;
+C 107 ; WX 0 ; N d107 ; B -21 -312 156 21 ;
+C 108 ; WX 0 ; N d108 ; B -20 -302 171 21 ;
+C 109 ; WX 0 ; N d109 ; B -20 -293 188 21 ;
+C 110 ; WX 0 ; N d110 ; B -20 -282 205 21 ;
+C 111 ; WX 0 ; N d111 ; B -20 -271 221 21 ;
+C 112 ; WX 0 ; N d112 ; B -20 -258 236 21 ;
+C 113 ; WX 0 ; N d113 ; B -20 -245 250 21 ;
+C 114 ; WX 0 ; N d114 ; B -20 -230 263 21 ;
+C 115 ; WX 0 ; N d115 ; B -20 -215 276 21 ;
+C 116 ; WX 0 ; N d116 ; B -20 -200 286 21 ;
+C 117 ; WX 0 ; N d117 ; B -20 -184 296 21 ;
+C 118 ; WX 0 ; N d118 ; B -20 -169 304 21 ;
+C 119 ; WX 0 ; N d119 ; B -20 -154 312 22 ;
+C 120 ; WX 0 ; N d120 ; B -20 -141 318 23 ;
+C 121 ; WX 0 ; N d121 ; B -20 -127 323 25 ;
+C 122 ; WX 0 ; N d122 ; B -20 -113 328 28 ;
+C 123 ; WX 0 ; N d123 ; B -20 -100 331 31 ;
+C 124 ; WX 0 ; N d124 ; B -20 -88 334 34 ;
+C 125 ; WX 0 ; N d125 ; B -20 -77 336 38 ;
+C 126 ; WX 0 ; N d126 ; B -20 -66 337 42 ;
+C 127 ; WX 0 ; N d127 ; B -20 -56 338 46 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmat11.afm b/macros/generic/diagrams/xypic/afm/xycmat11.afm
new file mode 100644
index 0000000000..aa47818fa1
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmat11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:06 2013
+FontName XYCMAT-Medium
+FullName XYCMAT
+FamilyName XYCMAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -339 -339 339 339
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -18 -44 338 48 ;
+C 1 ; WX 0 ; N d1 ; B -18 -33 338 53 ;
+C 2 ; WX 0 ; N d2 ; B -18 -21 339 58 ;
+C 3 ; WX 0 ; N d3 ; B -18 -19 339 65 ;
+C 4 ; WX 0 ; N d4 ; B -18 -19 338 72 ;
+C 5 ; WX 0 ; N d5 ; B -18 -18 336 80 ;
+C 6 ; WX 0 ; N d6 ; B -18 -18 334 89 ;
+C 7 ; WX 0 ; N d7 ; B -18 -19 332 100 ;
+C 8 ; WX 0 ; N d8 ; B -18 -18 328 111 ;
+C 9 ; WX 0 ; N d9 ; B -18 -18 323 124 ;
+C 10 ; WX 0 ; N d10 ; B -18 -18 317 138 ;
+C 11 ; WX 0 ; N d11 ; B -18 -18 310 153 ;
+C 12 ; WX 0 ; N d12 ; B -18 -18 301 169 ;
+C 13 ; WX 0 ; N d13 ; B -19 -19 291 186 ;
+C 14 ; WX 0 ; N d14 ; B -19 -18 280 203 ;
+C 15 ; WX 0 ; N d15 ; B -19 -18 269 218 ;
+C 16 ; WX 0 ; N d16 ; B -19 -18 256 234 ;
+C 17 ; WX 0 ; N d17 ; B -19 -18 242 248 ;
+C 18 ; WX 0 ; N d18 ; B -19 -18 227 261 ;
+C 19 ; WX 0 ; N d19 ; B -19 -18 213 274 ;
+C 20 ; WX 0 ; N d20 ; B -18 -18 197 284 ;
+C 21 ; WX 0 ; N d21 ; B -18 -18 183 294 ;
+C 22 ; WX 0 ; N d22 ; B -19 -19 167 302 ;
+C 23 ; WX 0 ; N d23 ; B -20 -19 154 309 ;
+C 24 ; WX 0 ; N d24 ; B -21 -18 138 315 ;
+C 25 ; WX 0 ; N d25 ; B -23 -18 125 321 ;
+C 26 ; WX 0 ; N d26 ; B -27 -18 111 325 ;
+C 27 ; WX 0 ; N d27 ; B -30 -18 98 329 ;
+C 28 ; WX 0 ; N d28 ; B -33 -18 87 332 ;
+C 29 ; WX 0 ; N d29 ; B -37 -18 76 334 ;
+C 30 ; WX 0 ; N d30 ; B -41 -18 65 335 ;
+C 31 ; WX 0 ; N d31 ; B -44 -19 55 337 ;
+C 32 ; WX 0 ; N d32 ; B -49 -19 44 338 ;
+C 33 ; WX 0 ; N d33 ; B -53 -18 33 338 ;
+C 34 ; WX 0 ; N d34 ; B -59 -18 21 339 ;
+C 35 ; WX 0 ; N d35 ; B -65 -19 19 339 ;
+C 36 ; WX 0 ; N d36 ; B -73 -18 19 338 ;
+C 37 ; WX 0 ; N d37 ; B -80 -18 19 336 ;
+C 38 ; WX 0 ; N d38 ; B -90 -18 19 335 ;
+C 39 ; WX 0 ; N d39 ; B -100 -18 19 332 ;
+C 40 ; WX 0 ; N d40 ; B -112 -18 19 328 ;
+C 41 ; WX 0 ; N d41 ; B -125 -19 19 323 ;
+C 42 ; WX 0 ; N d42 ; B -138 -19 19 317 ;
+C 43 ; WX 0 ; N d43 ; B -152 -18 18 310 ;
+C 44 ; WX 0 ; N d44 ; B -168 -19 19 301 ;
+C 45 ; WX 0 ; N d45 ; B -186 -19 19 291 ;
+C 46 ; WX 0 ; N d46 ; B -203 -18 19 281 ;
+C 47 ; WX 0 ; N d47 ; B -219 -18 19 269 ;
+C 48 ; WX 0 ; N d48 ; B -234 -19 19 256 ;
+C 49 ; WX 0 ; N d49 ; B -248 -18 19 242 ;
+C 50 ; WX 0 ; N d50 ; B -261 -18 19 227 ;
+C 51 ; WX 0 ; N d51 ; B -273 -18 19 213 ;
+C 52 ; WX 0 ; N d52 ; B -284 -18 19 197 ;
+C 53 ; WX 0 ; N d53 ; B -294 -19 19 183 ;
+C 54 ; WX 0 ; N d54 ; B -302 -19 19 167 ;
+C 55 ; WX 0 ; N d55 ; B -309 -19 19 153 ;
+C 56 ; WX 0 ; N d56 ; B -315 -21 19 138 ;
+C 57 ; WX 0 ; N d57 ; B -321 -24 19 125 ;
+C 58 ; WX 0 ; N d58 ; B -325 -26 19 111 ;
+C 59 ; WX 0 ; N d59 ; B -329 -29 19 98 ;
+C 60 ; WX 0 ; N d60 ; B -331 -32 19 87 ;
+C 61 ; WX 0 ; N d61 ; B -335 -36 19 75 ;
+C 62 ; WX 0 ; N d62 ; B -334 -40 19 64 ;
+C 63 ; WX 0 ; N d63 ; B -337 -44 19 54 ;
+C 64 ; WX 0 ; N d64 ; B -338 -48 19 44 ;
+C 65 ; WX 0 ; N d65 ; B -338 -53 19 33 ;
+C 66 ; WX 0 ; N d66 ; B -339 -59 19 21 ;
+C 67 ; WX 0 ; N d67 ; B -339 -65 19 19 ;
+C 68 ; WX 0 ; N d68 ; B -338 -73 19 19 ;
+C 69 ; WX 0 ; N d69 ; B -336 -80 19 19 ;
+C 70 ; WX 0 ; N d70 ; B -334 -89 19 19 ;
+C 71 ; WX 0 ; N d71 ; B -332 -100 19 19 ;
+C 72 ; WX 0 ; N d72 ; B -328 -111 19 19 ;
+C 73 ; WX 0 ; N d73 ; B -323 -125 19 19 ;
+C 74 ; WX 0 ; N d74 ; B -317 -138 19 19 ;
+C 75 ; WX 0 ; N d75 ; B -310 -153 19 19 ;
+C 76 ; WX 0 ; N d76 ; B -301 -169 19 19 ;
+C 77 ; WX 0 ; N d77 ; B -290 -186 19 19 ;
+C 78 ; WX 0 ; N d78 ; B -281 -203 19 19 ;
+C 79 ; WX 0 ; N d79 ; B -269 -218 19 19 ;
+C 80 ; WX 0 ; N d80 ; B -256 -234 19 19 ;
+C 81 ; WX 0 ; N d81 ; B -242 -248 19 19 ;
+C 82 ; WX 0 ; N d82 ; B -227 -261 19 19 ;
+C 83 ; WX 0 ; N d83 ; B -213 -273 19 20 ;
+C 84 ; WX 0 ; N d84 ; B -196 -284 19 19 ;
+C 85 ; WX 0 ; N d85 ; B -182 -294 19 19 ;
+C 86 ; WX 0 ; N d86 ; B -166 -302 19 19 ;
+C 87 ; WX 0 ; N d87 ; B -153 -310 20 19 ;
+C 88 ; WX 0 ; N d88 ; B -138 -315 21 19 ;
+C 89 ; WX 0 ; N d89 ; B -125 -321 23 19 ;
+C 90 ; WX 0 ; N d90 ; B -111 -325 27 19 ;
+C 91 ; WX 0 ; N d91 ; B -98 -329 30 20 ;
+C 92 ; WX 0 ; N d92 ; B -87 -331 33 20 ;
+C 93 ; WX 0 ; N d93 ; B -75 -334 37 19 ;
+C 94 ; WX 0 ; N d94 ; B -64 -334 40 20 ;
+C 95 ; WX 0 ; N d95 ; B -54 -337 45 19 ;
+C 96 ; WX 0 ; N d96 ; B -45 -338 49 19 ;
+C 97 ; WX 0 ; N d97 ; B -33 -338 54 19 ;
+C 98 ; WX 0 ; N d98 ; B -21 -339 59 19 ;
+C 99 ; WX 0 ; N d99 ; B -18 -339 65 19 ;
+C 100 ; WX 0 ; N d100 ; B -18 -338 72 19 ;
+C 101 ; WX 0 ; N d101 ; B -18 -336 80 19 ;
+C 102 ; WX 0 ; N d102 ; B -18 -334 90 19 ;
+C 103 ; WX 0 ; N d103 ; B -19 -332 100 19 ;
+C 104 ; WX 0 ; N d104 ; B -18 -328 111 19 ;
+C 105 ; WX 0 ; N d105 ; B -18 -323 125 19 ;
+C 106 ; WX 0 ; N d106 ; B -18 -317 138 19 ;
+C 107 ; WX 0 ; N d107 ; B -19 -310 153 19 ;
+C 108 ; WX 0 ; N d108 ; B -19 -301 169 19 ;
+C 109 ; WX 0 ; N d109 ; B -19 -290 186 19 ;
+C 110 ; WX 0 ; N d110 ; B -18 -281 203 19 ;
+C 111 ; WX 0 ; N d111 ; B -18 -269 219 20 ;
+C 112 ; WX 0 ; N d112 ; B -18 -256 234 19 ;
+C 113 ; WX 0 ; N d113 ; B -18 -242 248 20 ;
+C 114 ; WX 0 ; N d114 ; B -18 -227 261 19 ;
+C 115 ; WX 0 ; N d115 ; B -18 -213 273 19 ;
+C 116 ; WX 0 ; N d116 ; B -18 -196 284 19 ;
+C 117 ; WX 0 ; N d117 ; B -18 -182 294 19 ;
+C 118 ; WX 0 ; N d118 ; B -18 -166 302 19 ;
+C 119 ; WX 0 ; N d119 ; B -18 -153 309 20 ;
+C 120 ; WX 0 ; N d120 ; B -18 -138 315 21 ;
+C 121 ; WX 0 ; N d121 ; B -18 -125 321 23 ;
+C 122 ; WX 0 ; N d122 ; B -18 -112 326 26 ;
+C 123 ; WX 0 ; N d123 ; B -18 -98 329 29 ;
+C 124 ; WX 0 ; N d124 ; B -18 -86 331 32 ;
+C 125 ; WX 0 ; N d125 ; B -18 -76 334 36 ;
+C 126 ; WX 0 ; N d126 ; B -18 -64 335 40 ;
+C 127 ; WX 0 ; N d127 ; B -18 -54 337 44 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmat12.afm b/macros/generic/diagrams/xypic/afm/xycmat12.afm
new file mode 100644
index 0000000000..096489eb16
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmat12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:12 2013
+FontName XYCMAT-Medium
+FullName XYCMAT
+FamilyName XYCMAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -337 -337 337 338
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -18 -43 337 46 ;
+C 1 ; WX 0 ; N d1 ; B -18 -32 337 51 ;
+C 2 ; WX 0 ; N d2 ; B -18 -19 337 57 ;
+C 3 ; WX 0 ; N d3 ; B -17 -17 337 63 ;
+C 4 ; WX 0 ; N d4 ; B -17 -17 337 70 ;
+C 5 ; WX 0 ; N d5 ; B -18 -18 335 79 ;
+C 6 ; WX 0 ; N d6 ; B -18 -18 333 88 ;
+C 7 ; WX 0 ; N d7 ; B -18 -18 331 98 ;
+C 8 ; WX 0 ; N d8 ; B -18 -18 326 110 ;
+C 9 ; WX 0 ; N d9 ; B -17 -17 322 122 ;
+C 10 ; WX 0 ; N d10 ; B -17 -17 315 137 ;
+C 11 ; WX 0 ; N d11 ; B -18 -17 309 151 ;
+C 12 ; WX 0 ; N d12 ; B -18 -17 300 168 ;
+C 13 ; WX 0 ; N d13 ; B -17 -17 291 184 ;
+C 14 ; WX 0 ; N d14 ; B -17 -17 280 201 ;
+C 15 ; WX 0 ; N d15 ; B -17 -17 267 217 ;
+C 16 ; WX 0 ; N d16 ; B -17 -18 255 232 ;
+C 17 ; WX 0 ; N d17 ; B -17 -17 241 247 ;
+C 18 ; WX 0 ; N d18 ; B -18 -17 227 260 ;
+C 19 ; WX 0 ; N d19 ; B -17 -18 211 272 ;
+C 20 ; WX 0 ; N d20 ; B -17 -17 196 282 ;
+C 21 ; WX 0 ; N d21 ; B -17 -18 182 293 ;
+C 22 ; WX 0 ; N d22 ; B -17 -18 166 300 ;
+C 23 ; WX 0 ; N d23 ; B -19 -18 152 308 ;
+C 24 ; WX 0 ; N d24 ; B -20 -18 137 314 ;
+C 25 ; WX 0 ; N d25 ; B -21 -18 124 319 ;
+C 26 ; WX 0 ; N d26 ; B -25 -18 111 323 ;
+C 27 ; WX 0 ; N d27 ; B -27 -17 98 327 ;
+C 28 ; WX 0 ; N d28 ; B -32 -17 85 330 ;
+C 29 ; WX 0 ; N d29 ; B -34 -18 73 333 ;
+C 30 ; WX 0 ; N d30 ; B -39 -17 64 334 ;
+C 31 ; WX 0 ; N d31 ; B -42 -17 52 336 ;
+C 32 ; WX 0 ; N d32 ; B -47 -17 43 336 ;
+C 33 ; WX 0 ; N d33 ; B -52 -17 31 337 ;
+C 34 ; WX 0 ; N d34 ; B -57 -17 19 338 ;
+C 35 ; WX 0 ; N d35 ; B -63 -18 17 337 ;
+C 36 ; WX 0 ; N d36 ; B -70 -18 17 337 ;
+C 37 ; WX 0 ; N d37 ; B -80 -17 18 336 ;
+C 38 ; WX 0 ; N d38 ; B -88 -18 18 333 ;
+C 39 ; WX 0 ; N d39 ; B -99 -18 17 331 ;
+C 40 ; WX 0 ; N d40 ; B -110 -18 18 326 ;
+C 41 ; WX 0 ; N d41 ; B -122 -17 18 322 ;
+C 42 ; WX 0 ; N d42 ; B -136 -17 18 315 ;
+C 43 ; WX 0 ; N d43 ; B -151 -18 17 308 ;
+C 44 ; WX 0 ; N d44 ; B -168 -18 17 300 ;
+C 45 ; WX 0 ; N d45 ; B -184 -17 17 290 ;
+C 46 ; WX 0 ; N d46 ; B -201 -17 18 279 ;
+C 47 ; WX 0 ; N d47 ; B -218 -17 17 268 ;
+C 48 ; WX 0 ; N d48 ; B -232 -18 17 254 ;
+C 49 ; WX 0 ; N d49 ; B -246 -17 17 240 ;
+C 50 ; WX 0 ; N d50 ; B -260 -17 17 226 ;
+C 51 ; WX 0 ; N d51 ; B -273 -17 18 211 ;
+C 52 ; WX 0 ; N d52 ; B -282 -17 18 196 ;
+C 53 ; WX 0 ; N d53 ; B -293 -17 18 181 ;
+C 54 ; WX 0 ; N d54 ; B -300 -17 17 166 ;
+C 55 ; WX 0 ; N d55 ; B -308 -17 17 151 ;
+C 56 ; WX 0 ; N d56 ; B -314 -19 17 137 ;
+C 57 ; WX 0 ; N d57 ; B -320 -21 17 123 ;
+C 58 ; WX 0 ; N d58 ; B -323 -24 18 110 ;
+C 59 ; WX 0 ; N d59 ; B -328 -27 17 98 ;
+C 60 ; WX 0 ; N d60 ; B -331 -31 17 85 ;
+C 61 ; WX 0 ; N d61 ; B -331 -34 17 73 ;
+C 62 ; WX 0 ; N d62 ; B -335 -38 17 63 ;
+C 63 ; WX 0 ; N d63 ; B -336 -42 18 52 ;
+C 64 ; WX 0 ; N d64 ; B -337 -47 17 43 ;
+C 65 ; WX 0 ; N d65 ; B -337 -51 17 31 ;
+C 66 ; WX 0 ; N d66 ; B -337 -57 17 19 ;
+C 67 ; WX 0 ; N d67 ; B -337 -63 17 17 ;
+C 68 ; WX 0 ; N d68 ; B -337 -70 17 17 ;
+C 69 ; WX 0 ; N d69 ; B -335 -80 17 18 ;
+C 70 ; WX 0 ; N d70 ; B -333 -89 18 18 ;
+C 71 ; WX 0 ; N d71 ; B -331 -98 18 17 ;
+C 72 ; WX 0 ; N d72 ; B -326 -109 18 18 ;
+C 73 ; WX 0 ; N d73 ; B -322 -122 17 17 ;
+C 74 ; WX 0 ; N d74 ; B -315 -136 17 18 ;
+C 75 ; WX 0 ; N d75 ; B -309 -151 17 17 ;
+C 76 ; WX 0 ; N d76 ; B -300 -167 18 18 ;
+C 77 ; WX 0 ; N d77 ; B -290 -184 17 18 ;
+C 78 ; WX 0 ; N d78 ; B -280 -201 17 18 ;
+C 79 ; WX 0 ; N d79 ; B -268 -217 17 18 ;
+C 80 ; WX 0 ; N d80 ; B -255 -232 17 18 ;
+C 81 ; WX 0 ; N d81 ; B -241 -246 17 18 ;
+C 82 ; WX 0 ; N d82 ; B -227 -260 18 18 ;
+C 83 ; WX 0 ; N d83 ; B -211 -272 18 18 ;
+C 84 ; WX 0 ; N d84 ; B -196 -282 18 18 ;
+C 85 ; WX 0 ; N d85 ; B -182 -293 18 18 ;
+C 86 ; WX 0 ; N d86 ; B -166 -300 17 18 ;
+C 87 ; WX 0 ; N d87 ; B -151 -307 19 18 ;
+C 88 ; WX 0 ; N d88 ; B -137 -314 19 18 ;
+C 89 ; WX 0 ; N d89 ; B -124 -319 22 18 ;
+C 90 ; WX 0 ; N d90 ; B -111 -323 25 18 ;
+C 91 ; WX 0 ; N d91 ; B -97 -327 28 18 ;
+C 92 ; WX 0 ; N d92 ; B -86 -330 32 18 ;
+C 93 ; WX 0 ; N d93 ; B -73 -333 35 18 ;
+C 94 ; WX 0 ; N d94 ; B -64 -334 38 18 ;
+C 95 ; WX 0 ; N d95 ; B -51 -336 43 18 ;
+C 96 ; WX 0 ; N d96 ; B -43 -336 47 18 ;
+C 97 ; WX 0 ; N d97 ; B -31 -337 52 18 ;
+C 98 ; WX 0 ; N d98 ; B -19 -337 58 18 ;
+C 99 ; WX 0 ; N d99 ; B -18 -337 63 17 ;
+C 100 ; WX 0 ; N d100 ; B -18 -336 70 17 ;
+C 101 ; WX 0 ; N d101 ; B -18 -336 79 17 ;
+C 102 ; WX 0 ; N d102 ; B -18 -333 88 17 ;
+C 103 ; WX 0 ; N d103 ; B -17 -331 99 17 ;
+C 104 ; WX 0 ; N d104 ; B -17 -326 110 17 ;
+C 105 ; WX 0 ; N d105 ; B -18 -321 122 17 ;
+C 106 ; WX 0 ; N d106 ; B -18 -315 136 17 ;
+C 107 ; WX 0 ; N d107 ; B -18 -308 151 17 ;
+C 108 ; WX 0 ; N d108 ; B -18 -299 168 18 ;
+C 109 ; WX 0 ; N d109 ; B -18 -290 184 18 ;
+C 110 ; WX 0 ; N d110 ; B -18 -279 201 17 ;
+C 111 ; WX 0 ; N d111 ; B -18 -267 217 17 ;
+C 112 ; WX 0 ; N d112 ; B -18 -254 232 17 ;
+C 113 ; WX 0 ; N d113 ; B -17 -240 247 17 ;
+C 114 ; WX 0 ; N d114 ; B -18 -227 260 18 ;
+C 115 ; WX 0 ; N d115 ; B -17 -211 272 17 ;
+C 116 ; WX 0 ; N d116 ; B -17 -196 282 17 ;
+C 117 ; WX 0 ; N d117 ; B -17 -181 292 17 ;
+C 118 ; WX 0 ; N d118 ; B -17 -166 300 17 ;
+C 119 ; WX 0 ; N d119 ; B -17 -151 308 18 ;
+C 120 ; WX 0 ; N d120 ; B -17 -137 315 19 ;
+C 121 ; WX 0 ; N d121 ; B -17 -124 319 21 ;
+C 122 ; WX 0 ; N d122 ; B -17 -110 323 25 ;
+C 123 ; WX 0 ; N d123 ; B -18 -98 327 27 ;
+C 124 ; WX 0 ; N d124 ; B -18 -86 331 32 ;
+C 125 ; WX 0 ; N d125 ; B -17 -73 332 34 ;
+C 126 ; WX 0 ; N d126 ; B -18 -63 335 38 ;
+C 127 ; WX 0 ; N d127 ; B -18 -52 336 42 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmbt10.afm b/macros/generic/diagrams/xypic/afm/xycmbt10.afm
new file mode 100644
index 0000000000..eb703312aa
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmbt10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:03 2013
+FontName XYCMBT-Medium
+FullName XYCMBT
+FamilyName XYCMBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -341 -341 341 341
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -67 -20 43 338 ;
+C 1 ; WX 0 ; N d1 ; B -77 -21 38 336 ;
+C 2 ; WX 0 ; N d2 ; B -88 -21 34 333 ;
+C 3 ; WX 0 ; N d3 ; B -100 -20 32 331 ;
+C 4 ; WX 0 ; N d4 ; B -113 -21 28 327 ;
+C 5 ; WX 0 ; N d5 ; B -127 -21 25 323 ;
+C 6 ; WX 0 ; N d6 ; B -141 -21 23 317 ;
+C 7 ; WX 0 ; N d7 ; B -156 -21 20 311 ;
+C 8 ; WX 0 ; N d8 ; B -169 -21 21 304 ;
+C 9 ; WX 0 ; N d9 ; B -184 -20 21 296 ;
+C 10 ; WX 0 ; N d10 ; B -200 -20 21 286 ;
+C 11 ; WX 0 ; N d11 ; B -215 -20 21 275 ;
+C 12 ; WX 0 ; N d12 ; B -230 -20 21 263 ;
+C 13 ; WX 0 ; N d13 ; B -244 -21 21 250 ;
+C 14 ; WX 0 ; N d14 ; B -258 -20 21 236 ;
+C 15 ; WX 0 ; N d15 ; B -271 -21 20 221 ;
+C 16 ; WX 0 ; N d16 ; B -282 -21 21 205 ;
+C 17 ; WX 0 ; N d17 ; B -293 -20 21 188 ;
+C 18 ; WX 0 ; N d18 ; B -303 -20 21 171 ;
+C 19 ; WX 0 ; N d19 ; B -312 -19 21 155 ;
+C 20 ; WX 0 ; N d20 ; B -319 -21 21 140 ;
+C 21 ; WX 0 ; N d21 ; B -326 -21 20 126 ;
+C 22 ; WX 0 ; N d22 ; B -330 -20 20 113 ;
+C 23 ; WX 0 ; N d23 ; B -334 -21 21 102 ;
+C 24 ; WX 0 ; N d24 ; B -336 -21 21 91 ;
+C 25 ; WX 0 ; N d25 ; B -338 -19 21 82 ;
+C 26 ; WX 0 ; N d26 ; B -340 -19 21 74 ;
+C 27 ; WX 0 ; N d27 ; B -341 -21 21 67 ;
+C 28 ; WX 0 ; N d28 ; B -341 -24 21 60 ;
+C 29 ; WX 0 ; N d29 ; B -341 -35 21 55 ;
+C 30 ; WX 0 ; N d30 ; B -340 -46 21 50 ;
+C 31 ; WX 0 ; N d31 ; B -338 -56 21 46 ;
+C 32 ; WX 0 ; N d32 ; B -337 -66 21 42 ;
+C 33 ; WX 0 ; N d33 ; B -336 -77 21 38 ;
+C 34 ; WX 0 ; N d34 ; B -334 -88 20 34 ;
+C 35 ; WX 0 ; N d35 ; B -331 -100 20 31 ;
+C 36 ; WX 0 ; N d36 ; B -328 -113 20 28 ;
+C 37 ; WX 0 ; N d37 ; B -323 -127 21 25 ;
+C 38 ; WX 0 ; N d38 ; B -318 -141 21 23 ;
+C 39 ; WX 0 ; N d39 ; B -312 -154 21 21 ;
+C 40 ; WX 0 ; N d40 ; B -304 -169 21 21 ;
+C 41 ; WX 0 ; N d41 ; B -296 -184 21 21 ;
+C 42 ; WX 0 ; N d42 ; B -286 -200 21 21 ;
+C 43 ; WX 0 ; N d43 ; B -276 -215 21 21 ;
+C 44 ; WX 0 ; N d44 ; B -263 -230 21 21 ;
+C 45 ; WX 0 ; N d45 ; B -250 -245 21 21 ;
+C 46 ; WX 0 ; N d46 ; B -236 -258 21 21 ;
+C 47 ; WX 0 ; N d47 ; B -221 -271 21 21 ;
+C 48 ; WX 0 ; N d48 ; B -205 -282 21 21 ;
+C 49 ; WX 0 ; N d49 ; B -188 -293 21 21 ;
+C 50 ; WX 0 ; N d50 ; B -171 -302 21 21 ;
+C 51 ; WX 0 ; N d51 ; B -156 -312 21 21 ;
+C 52 ; WX 0 ; N d52 ; B -140 -319 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -126 -325 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -114 -330 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -102 -334 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -92 -336 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -82 -338 21 21 ;
+C 58 ; WX 0 ; N d58 ; B -75 -340 21 21 ;
+C 59 ; WX 0 ; N d59 ; B -68 -341 21 21 ;
+C 60 ; WX 0 ; N d60 ; B -60 -341 24 21 ;
+C 61 ; WX 0 ; N d61 ; B -55 -341 35 21 ;
+C 62 ; WX 0 ; N d62 ; B -50 -340 46 21 ;
+C 63 ; WX 0 ; N d63 ; B -46 -339 56 21 ;
+C 64 ; WX 0 ; N d64 ; B -43 -337 66 21 ;
+C 65 ; WX 0 ; N d65 ; B -38 -336 78 21 ;
+C 66 ; WX 0 ; N d66 ; B -34 -334 88 21 ;
+C 67 ; WX 0 ; N d67 ; B -32 -331 100 21 ;
+C 68 ; WX 0 ; N d68 ; B -28 -327 113 21 ;
+C 69 ; WX 0 ; N d69 ; B -26 -323 127 21 ;
+C 70 ; WX 0 ; N d70 ; B -23 -317 141 21 ;
+C 71 ; WX 0 ; N d71 ; B -21 -312 156 21 ;
+C 72 ; WX 0 ; N d72 ; B -21 -304 169 21 ;
+C 73 ; WX 0 ; N d73 ; B -21 -296 184 21 ;
+C 74 ; WX 0 ; N d74 ; B -21 -285 200 21 ;
+C 75 ; WX 0 ; N d75 ; B -21 -276 215 21 ;
+C 76 ; WX 0 ; N d76 ; B -21 -264 230 21 ;
+C 77 ; WX 0 ; N d77 ; B -21 -250 244 21 ;
+C 78 ; WX 0 ; N d78 ; B -21 -236 258 21 ;
+C 79 ; WX 0 ; N d79 ; B -20 -221 271 21 ;
+C 80 ; WX 0 ; N d80 ; B -20 -205 283 21 ;
+C 81 ; WX 0 ; N d81 ; B -20 -187 294 21 ;
+C 82 ; WX 0 ; N d82 ; B -21 -172 303 21 ;
+C 83 ; WX 0 ; N d83 ; B -21 -155 312 21 ;
+C 84 ; WX 0 ; N d84 ; B -20 -140 319 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -127 325 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -114 330 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -102 334 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -91 336 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -82 338 21 ;
+C 90 ; WX 0 ; N d90 ; B -20 -74 340 21 ;
+C 91 ; WX 0 ; N d91 ; B -20 -67 341 21 ;
+C 92 ; WX 0 ; N d92 ; B -20 -61 341 24 ;
+C 93 ; WX 0 ; N d93 ; B -20 -55 341 35 ;
+C 94 ; WX 0 ; N d94 ; B -20 -50 340 46 ;
+C 95 ; WX 0 ; N d95 ; B -20 -46 339 56 ;
+C 96 ; WX 0 ; N d96 ; B -20 -42 337 67 ;
+C 97 ; WX 0 ; N d97 ; B -20 -38 336 78 ;
+C 98 ; WX 0 ; N d98 ; B -20 -34 334 89 ;
+C 99 ; WX 0 ; N d99 ; B -20 -32 331 100 ;
+C 100 ; WX 0 ; N d100 ; B -20 -28 327 114 ;
+C 101 ; WX 0 ; N d101 ; B -20 -25 323 127 ;
+C 102 ; WX 0 ; N d102 ; B -20 -23 317 141 ;
+C 103 ; WX 0 ; N d103 ; B -20 -22 311 155 ;
+C 104 ; WX 0 ; N d104 ; B -20 -21 304 169 ;
+C 105 ; WX 0 ; N d105 ; B -20 -20 296 185 ;
+C 106 ; WX 0 ; N d106 ; B -20 -21 286 199 ;
+C 107 ; WX 0 ; N d107 ; B -20 -20 276 215 ;
+C 108 ; WX 0 ; N d108 ; B -20 -20 263 230 ;
+C 109 ; WX 0 ; N d109 ; B -20 -21 250 244 ;
+C 110 ; WX 0 ; N d110 ; B -20 -21 236 258 ;
+C 111 ; WX 0 ; N d111 ; B -20 -20 221 271 ;
+C 112 ; WX 0 ; N d112 ; B -20 -20 205 282 ;
+C 113 ; WX 0 ; N d113 ; B -20 -21 188 293 ;
+C 114 ; WX 0 ; N d114 ; B -20 -20 171 303 ;
+C 115 ; WX 0 ; N d115 ; B -21 -21 155 312 ;
+C 116 ; WX 0 ; N d116 ; B -20 -21 140 319 ;
+C 117 ; WX 0 ; N d117 ; B -20 -21 126 325 ;
+C 118 ; WX 0 ; N d118 ; B -20 -20 113 330 ;
+C 119 ; WX 0 ; N d119 ; B -20 -20 102 334 ;
+C 120 ; WX 0 ; N d120 ; B -21 -20 92 336 ;
+C 121 ; WX 0 ; N d121 ; B -20 -20 82 338 ;
+C 122 ; WX 0 ; N d122 ; B -20 -21 75 340 ;
+C 123 ; WX 0 ; N d123 ; B -21 -21 67 341 ;
+C 124 ; WX 0 ; N d124 ; B -23 -20 60 341 ;
+C 125 ; WX 0 ; N d125 ; B -35 -20 55 340 ;
+C 126 ; WX 0 ; N d126 ; B -46 -21 50 340 ;
+C 127 ; WX 0 ; N d127 ; B -56 -21 46 339 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmbt11.afm b/macros/generic/diagrams/xypic/afm/xycmbt11.afm
new file mode 100644
index 0000000000..c799bd9708
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmbt11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:09 2013
+FontName XYCMBT-Medium
+FullName XYCMBT
+FamilyName XYCMBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -339 -339 339 339
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -64 -18 40 335 ;
+C 1 ; WX 0 ; N d1 ; B -75 -18 36 334 ;
+C 2 ; WX 0 ; N d2 ; B -87 -18 32 331 ;
+C 3 ; WX 0 ; N d3 ; B -98 -18 30 329 ;
+C 4 ; WX 0 ; N d4 ; B -111 -18 26 326 ;
+C 5 ; WX 0 ; N d5 ; B -125 -18 24 321 ;
+C 6 ; WX 0 ; N d6 ; B -138 -19 20 315 ;
+C 7 ; WX 0 ; N d7 ; B -154 -19 19 309 ;
+C 8 ; WX 0 ; N d8 ; B -166 -18 19 302 ;
+C 9 ; WX 0 ; N d9 ; B -182 -18 19 294 ;
+C 10 ; WX 0 ; N d10 ; B -196 -18 19 284 ;
+C 11 ; WX 0 ; N d11 ; B -213 -18 19 273 ;
+C 12 ; WX 0 ; N d12 ; B -228 -18 19 261 ;
+C 13 ; WX 0 ; N d13 ; B -242 -18 19 248 ;
+C 14 ; WX 0 ; N d14 ; B -256 -18 19 234 ;
+C 15 ; WX 0 ; N d15 ; B -269 -18 19 218 ;
+C 16 ; WX 0 ; N d16 ; B -280 -18 19 203 ;
+C 17 ; WX 0 ; N d17 ; B -290 -18 19 186 ;
+C 18 ; WX 0 ; N d18 ; B -301 -18 19 169 ;
+C 19 ; WX 0 ; N d19 ; B -310 -18 19 153 ;
+C 20 ; WX 0 ; N d20 ; B -317 -19 19 138 ;
+C 21 ; WX 0 ; N d21 ; B -323 -19 19 124 ;
+C 22 ; WX 0 ; N d22 ; B -328 -18 19 111 ;
+C 23 ; WX 0 ; N d23 ; B -332 -18 19 100 ;
+C 24 ; WX 0 ; N d24 ; B -334 -18 19 89 ;
+C 25 ; WX 0 ; N d25 ; B -336 -18 19 80 ;
+C 26 ; WX 0 ; N d26 ; B -338 -18 19 72 ;
+C 27 ; WX 0 ; N d27 ; B -339 -18 19 65 ;
+C 28 ; WX 0 ; N d28 ; B -339 -21 19 58 ;
+C 29 ; WX 0 ; N d29 ; B -338 -33 19 53 ;
+C 30 ; WX 0 ; N d30 ; B -338 -44 19 48 ;
+C 31 ; WX 0 ; N d31 ; B -337 -55 19 44 ;
+C 32 ; WX 0 ; N d32 ; B -334 -64 19 40 ;
+C 33 ; WX 0 ; N d33 ; B -334 -75 19 36 ;
+C 34 ; WX 0 ; N d34 ; B -331 -87 19 32 ;
+C 35 ; WX 0 ; N d35 ; B -329 -98 19 29 ;
+C 36 ; WX 0 ; N d36 ; B -326 -112 19 26 ;
+C 37 ; WX 0 ; N d37 ; B -321 -125 19 23 ;
+C 38 ; WX 0 ; N d38 ; B -315 -138 19 21 ;
+C 39 ; WX 0 ; N d39 ; B -309 -153 19 19 ;
+C 40 ; WX 0 ; N d40 ; B -302 -166 19 19 ;
+C 41 ; WX 0 ; N d41 ; B -294 -182 19 19 ;
+C 42 ; WX 0 ; N d42 ; B -284 -196 19 19 ;
+C 43 ; WX 0 ; N d43 ; B -273 -213 19 19 ;
+C 44 ; WX 0 ; N d44 ; B -261 -227 19 19 ;
+C 45 ; WX 0 ; N d45 ; B -248 -242 19 19 ;
+C 46 ; WX 0 ; N d46 ; B -234 -256 19 19 ;
+C 47 ; WX 0 ; N d47 ; B -219 -269 19 19 ;
+C 48 ; WX 0 ; N d48 ; B -203 -281 19 19 ;
+C 49 ; WX 0 ; N d49 ; B -186 -290 19 19 ;
+C 50 ; WX 0 ; N d50 ; B -169 -301 19 19 ;
+C 51 ; WX 0 ; N d51 ; B -152 -310 19 19 ;
+C 52 ; WX 0 ; N d52 ; B -138 -317 19 19 ;
+C 53 ; WX 0 ; N d53 ; B -125 -323 19 19 ;
+C 54 ; WX 0 ; N d54 ; B -111 -328 19 19 ;
+C 55 ; WX 0 ; N d55 ; B -100 -332 19 19 ;
+C 56 ; WX 0 ; N d56 ; B -90 -334 19 19 ;
+C 57 ; WX 0 ; N d57 ; B -80 -336 19 19 ;
+C 58 ; WX 0 ; N d58 ; B -73 -338 19 20 ;
+C 59 ; WX 0 ; N d59 ; B -65 -339 19 19 ;
+C 60 ; WX 0 ; N d60 ; B -59 -339 21 19 ;
+C 61 ; WX 0 ; N d61 ; B -54 -338 33 19 ;
+C 62 ; WX 0 ; N d62 ; B -49 -338 45 19 ;
+C 63 ; WX 0 ; N d63 ; B -45 -337 54 19 ;
+C 64 ; WX 0 ; N d64 ; B -41 -334 64 19 ;
+C 65 ; WX 0 ; N d65 ; B -37 -334 75 19 ;
+C 66 ; WX 0 ; N d66 ; B -33 -331 87 19 ;
+C 67 ; WX 0 ; N d67 ; B -29 -329 98 20 ;
+C 68 ; WX 0 ; N d68 ; B -27 -325 111 19 ;
+C 69 ; WX 0 ; N d69 ; B -23 -321 125 19 ;
+C 70 ; WX 0 ; N d70 ; B -21 -315 138 19 ;
+C 71 ; WX 0 ; N d71 ; B -19 -310 153 19 ;
+C 72 ; WX 0 ; N d72 ; B -19 -302 167 19 ;
+C 73 ; WX 0 ; N d73 ; B -18 -294 182 19 ;
+C 74 ; WX 0 ; N d74 ; B -19 -284 197 20 ;
+C 75 ; WX 0 ; N d75 ; B -19 -273 213 20 ;
+C 76 ; WX 0 ; N d76 ; B -19 -261 228 19 ;
+C 77 ; WX 0 ; N d77 ; B -18 -248 242 19 ;
+C 78 ; WX 0 ; N d78 ; B -18 -234 256 19 ;
+C 79 ; WX 0 ; N d79 ; B -19 -218 269 19 ;
+C 80 ; WX 0 ; N d80 ; B -18 -203 281 20 ;
+C 81 ; WX 0 ; N d81 ; B -19 -186 291 19 ;
+C 82 ; WX 0 ; N d82 ; B -18 -169 301 19 ;
+C 83 ; WX 0 ; N d83 ; B -18 -153 310 19 ;
+C 84 ; WX 0 ; N d84 ; B -19 -138 317 19 ;
+C 85 ; WX 0 ; N d85 ; B -19 -125 323 19 ;
+C 86 ; WX 0 ; N d86 ; B -18 -111 328 19 ;
+C 87 ; WX 0 ; N d87 ; B -18 -100 332 19 ;
+C 88 ; WX 0 ; N d88 ; B -18 -89 334 19 ;
+C 89 ; WX 0 ; N d89 ; B -18 -80 336 19 ;
+C 90 ; WX 0 ; N d90 ; B -18 -72 338 19 ;
+C 91 ; WX 0 ; N d91 ; B -18 -65 339 19 ;
+C 92 ; WX 0 ; N d92 ; B -18 -58 339 21 ;
+C 93 ; WX 0 ; N d93 ; B -18 -53 338 33 ;
+C 94 ; WX 0 ; N d94 ; B -18 -49 338 44 ;
+C 95 ; WX 0 ; N d95 ; B -18 -45 337 54 ;
+C 96 ; WX 0 ; N d96 ; B -18 -40 335 65 ;
+C 97 ; WX 0 ; N d97 ; B -18 -36 334 76 ;
+C 98 ; WX 0 ; N d98 ; B -18 -32 331 87 ;
+C 99 ; WX 0 ; N d99 ; B -18 -29 329 99 ;
+C 100 ; WX 0 ; N d100 ; B -18 -27 326 112 ;
+C 101 ; WX 0 ; N d101 ; B -18 -24 321 124 ;
+C 102 ; WX 0 ; N d102 ; B -18 -21 315 139 ;
+C 103 ; WX 0 ; N d103 ; B -18 -19 310 153 ;
+C 104 ; WX 0 ; N d104 ; B -18 -19 302 167 ;
+C 105 ; WX 0 ; N d105 ; B -18 -19 294 183 ;
+C 106 ; WX 0 ; N d106 ; B -18 -18 284 197 ;
+C 107 ; WX 0 ; N d107 ; B -18 -19 273 213 ;
+C 108 ; WX 0 ; N d108 ; B -18 -18 261 227 ;
+C 109 ; WX 0 ; N d109 ; B -18 -18 248 242 ;
+C 110 ; WX 0 ; N d110 ; B -18 -19 234 256 ;
+C 111 ; WX 0 ; N d111 ; B -18 -19 218 269 ;
+C 112 ; WX 0 ; N d112 ; B -18 -19 203 281 ;
+C 113 ; WX 0 ; N d113 ; B -19 -19 186 291 ;
+C 114 ; WX 0 ; N d114 ; B -18 -18 169 302 ;
+C 115 ; WX 0 ; N d115 ; B -18 -18 153 310 ;
+C 116 ; WX 0 ; N d116 ; B -18 -19 138 317 ;
+C 117 ; WX 0 ; N d117 ; B -18 -18 125 323 ;
+C 118 ; WX 0 ; N d118 ; B -18 -18 112 328 ;
+C 119 ; WX 0 ; N d119 ; B -18 -18 100 332 ;
+C 120 ; WX 0 ; N d120 ; B -18 -18 90 335 ;
+C 121 ; WX 0 ; N d121 ; B -18 -18 80 336 ;
+C 122 ; WX 0 ; N d122 ; B -18 -19 73 338 ;
+C 123 ; WX 0 ; N d123 ; B -18 -18 65 339 ;
+C 124 ; WX 0 ; N d124 ; B -21 -18 59 339 ;
+C 125 ; WX 0 ; N d125 ; B -33 -18 54 339 ;
+C 126 ; WX 0 ; N d126 ; B -45 -18 48 338 ;
+C 127 ; WX 0 ; N d127 ; B -54 -18 45 337 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmbt12.afm b/macros/generic/diagrams/xypic/afm/xycmbt12.afm
new file mode 100644
index 0000000000..16e67e939d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmbt12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:15 2013
+FontName XYCMBT-Medium
+FullName XYCMBT
+FamilyName XYCMBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -338 -338 338 338
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -64 -17 38 334 ;
+C 1 ; WX 0 ; N d1 ; B -73 -18 35 332 ;
+C 2 ; WX 0 ; N d2 ; B -85 -17 32 330 ;
+C 3 ; WX 0 ; N d3 ; B -97 -17 28 327 ;
+C 4 ; WX 0 ; N d4 ; B -111 -18 24 323 ;
+C 5 ; WX 0 ; N d5 ; B -124 -17 22 320 ;
+C 6 ; WX 0 ; N d6 ; B -138 -18 19 314 ;
+C 7 ; WX 0 ; N d7 ; B -151 -18 19 308 ;
+C 8 ; WX 0 ; N d8 ; B -166 -18 17 300 ;
+C 9 ; WX 0 ; N d9 ; B -182 -17 18 293 ;
+C 10 ; WX 0 ; N d10 ; B -196 -17 17 282 ;
+C 11 ; WX 0 ; N d11 ; B -211 -17 18 272 ;
+C 12 ; WX 0 ; N d12 ; B -227 -17 18 260 ;
+C 13 ; WX 0 ; N d13 ; B -241 -18 17 247 ;
+C 14 ; WX 0 ; N d14 ; B -255 -18 17 233 ;
+C 15 ; WX 0 ; N d15 ; B -267 -18 17 217 ;
+C 16 ; WX 0 ; N d16 ; B -280 -18 17 201 ;
+C 17 ; WX 0 ; N d17 ; B -291 -18 17 184 ;
+C 18 ; WX 0 ; N d18 ; B -301 -17 17 168 ;
+C 19 ; WX 0 ; N d19 ; B -309 -18 17 151 ;
+C 20 ; WX 0 ; N d20 ; B -315 -17 17 137 ;
+C 21 ; WX 0 ; N d21 ; B -321 -18 17 122 ;
+C 22 ; WX 0 ; N d22 ; B -326 -17 18 109 ;
+C 23 ; WX 0 ; N d23 ; B -330 -17 18 98 ;
+C 24 ; WX 0 ; N d24 ; B -333 -17 17 89 ;
+C 25 ; WX 0 ; N d25 ; B -335 -17 17 79 ;
+C 26 ; WX 0 ; N d26 ; B -337 -17 17 70 ;
+C 27 ; WX 0 ; N d27 ; B -337 -17 17 63 ;
+C 28 ; WX 0 ; N d28 ; B -338 -19 17 57 ;
+C 29 ; WX 0 ; N d29 ; B -338 -31 17 51 ;
+C 30 ; WX 0 ; N d30 ; B -337 -43 17 46 ;
+C 31 ; WX 0 ; N d31 ; B -336 -52 18 42 ;
+C 32 ; WX 0 ; N d32 ; B -335 -63 17 38 ;
+C 33 ; WX 0 ; N d33 ; B -332 -73 17 34 ;
+C 34 ; WX 0 ; N d34 ; B -331 -86 17 31 ;
+C 35 ; WX 0 ; N d35 ; B -328 -98 17 27 ;
+C 36 ; WX 0 ; N d36 ; B -323 -110 18 24 ;
+C 37 ; WX 0 ; N d37 ; B -319 -123 17 21 ;
+C 38 ; WX 0 ; N d38 ; B -315 -137 17 19 ;
+C 39 ; WX 0 ; N d39 ; B -308 -151 17 18 ;
+C 40 ; WX 0 ; N d40 ; B -300 -166 17 17 ;
+C 41 ; WX 0 ; N d41 ; B -292 -181 17 17 ;
+C 42 ; WX 0 ; N d42 ; B -282 -196 17 17 ;
+C 43 ; WX 0 ; N d43 ; B -272 -211 17 18 ;
+C 44 ; WX 0 ; N d44 ; B -260 -227 17 17 ;
+C 45 ; WX 0 ; N d45 ; B -247 -240 17 17 ;
+C 46 ; WX 0 ; N d46 ; B -232 -254 17 17 ;
+C 47 ; WX 0 ; N d47 ; B -217 -267 17 17 ;
+C 48 ; WX 0 ; N d48 ; B -201 -280 17 18 ;
+C 49 ; WX 0 ; N d49 ; B -184 -290 17 17 ;
+C 50 ; WX 0 ; N d50 ; B -168 -299 18 18 ;
+C 51 ; WX 0 ; N d51 ; B -151 -308 18 18 ;
+C 52 ; WX 0 ; N d52 ; B -136 -315 17 18 ;
+C 53 ; WX 0 ; N d53 ; B -123 -321 18 17 ;
+C 54 ; WX 0 ; N d54 ; B -110 -326 18 18 ;
+C 55 ; WX 0 ; N d55 ; B -99 -331 17 18 ;
+C 56 ; WX 0 ; N d56 ; B -88 -333 18 18 ;
+C 57 ; WX 0 ; N d57 ; B -79 -336 18 17 ;
+C 58 ; WX 0 ; N d58 ; B -71 -336 18 18 ;
+C 59 ; WX 0 ; N d59 ; B -63 -337 17 18 ;
+C 60 ; WX 0 ; N d60 ; B -57 -338 19 18 ;
+C 61 ; WX 0 ; N d61 ; B -52 -337 31 18 ;
+C 62 ; WX 0 ; N d62 ; B -47 -336 43 18 ;
+C 63 ; WX 0 ; N d63 ; B -43 -335 52 18 ;
+C 64 ; WX 0 ; N d64 ; B -38 -334 64 18 ;
+C 65 ; WX 0 ; N d65 ; B -34 -333 73 18 ;
+C 66 ; WX 0 ; N d66 ; B -32 -330 86 18 ;
+C 67 ; WX 0 ; N d67 ; B -28 -327 97 18 ;
+C 68 ; WX 0 ; N d68 ; B -25 -323 111 18 ;
+C 69 ; WX 0 ; N d69 ; B -21 -319 124 18 ;
+C 70 ; WX 0 ; N d70 ; B -20 -314 137 18 ;
+C 71 ; WX 0 ; N d71 ; B -18 -307 151 18 ;
+C 72 ; WX 0 ; N d72 ; B -17 -300 166 18 ;
+C 73 ; WX 0 ; N d73 ; B -18 -293 182 18 ;
+C 74 ; WX 0 ; N d74 ; B -17 -282 196 18 ;
+C 75 ; WX 0 ; N d75 ; B -18 -272 211 18 ;
+C 76 ; WX 0 ; N d76 ; B -17 -260 227 18 ;
+C 77 ; WX 0 ; N d77 ; B -17 -246 241 17 ;
+C 78 ; WX 0 ; N d78 ; B -17 -232 255 18 ;
+C 79 ; WX 0 ; N d79 ; B -17 -217 268 17 ;
+C 80 ; WX 0 ; N d80 ; B -17 -201 280 17 ;
+C 81 ; WX 0 ; N d81 ; B -18 -184 290 17 ;
+C 82 ; WX 0 ; N d82 ; B -18 -167 300 17 ;
+C 83 ; WX 0 ; N d83 ; B -18 -151 309 18 ;
+C 84 ; WX 0 ; N d84 ; B -17 -136 315 18 ;
+C 85 ; WX 0 ; N d85 ; B -18 -122 321 17 ;
+C 86 ; WX 0 ; N d86 ; B -18 -109 326 18 ;
+C 87 ; WX 0 ; N d87 ; B -18 -98 331 18 ;
+C 88 ; WX 0 ; N d88 ; B -18 -88 333 18 ;
+C 89 ; WX 0 ; N d89 ; B -18 -79 335 17 ;
+C 90 ; WX 0 ; N d90 ; B -18 -70 337 17 ;
+C 91 ; WX 0 ; N d91 ; B -18 -63 337 17 ;
+C 92 ; WX 0 ; N d92 ; B -18 -57 338 19 ;
+C 93 ; WX 0 ; N d93 ; B -18 -50 338 31 ;
+C 94 ; WX 0 ; N d94 ; B -18 -46 337 43 ;
+C 95 ; WX 0 ; N d95 ; B -18 -42 336 52 ;
+C 96 ; WX 0 ; N d96 ; B -18 -39 335 63 ;
+C 97 ; WX 0 ; N d97 ; B -17 -34 332 73 ;
+C 98 ; WX 0 ; N d98 ; B -18 -31 331 86 ;
+C 99 ; WX 0 ; N d99 ; B -18 -27 327 97 ;
+C 100 ; WX 0 ; N d100 ; B -17 -25 323 110 ;
+C 101 ; WX 0 ; N d101 ; B -17 -21 319 124 ;
+C 102 ; WX 0 ; N d102 ; B -17 -19 314 137 ;
+C 103 ; WX 0 ; N d103 ; B -17 -18 308 151 ;
+C 104 ; WX 0 ; N d104 ; B -17 -17 300 166 ;
+C 105 ; WX 0 ; N d105 ; B -17 -17 293 181 ;
+C 106 ; WX 0 ; N d106 ; B -17 -17 282 196 ;
+C 107 ; WX 0 ; N d107 ; B -17 -17 273 211 ;
+C 108 ; WX 0 ; N d108 ; B -18 -17 261 226 ;
+C 109 ; WX 0 ; N d109 ; B -17 -17 246 240 ;
+C 110 ; WX 0 ; N d110 ; B -18 -17 232 255 ;
+C 111 ; WX 0 ; N d111 ; B -18 -18 217 267 ;
+C 112 ; WX 0 ; N d112 ; B -18 -17 201 280 ;
+C 113 ; WX 0 ; N d113 ; B -18 -17 184 290 ;
+C 114 ; WX 0 ; N d114 ; B -18 -18 168 300 ;
+C 115 ; WX 0 ; N d115 ; B -17 -17 151 308 ;
+C 116 ; WX 0 ; N d116 ; B -18 -18 136 316 ;
+C 117 ; WX 0 ; N d117 ; B -18 -18 122 322 ;
+C 118 ; WX 0 ; N d118 ; B -18 -17 110 326 ;
+C 119 ; WX 0 ; N d119 ; B -17 -17 99 331 ;
+C 120 ; WX 0 ; N d120 ; B -18 -18 88 333 ;
+C 121 ; WX 0 ; N d121 ; B -18 -17 80 336 ;
+C 122 ; WX 0 ; N d122 ; B -18 -17 70 337 ;
+C 123 ; WX 0 ; N d123 ; B -18 -17 63 337 ;
+C 124 ; WX 0 ; N d124 ; B -19 -18 58 338 ;
+C 125 ; WX 0 ; N d125 ; B -32 -18 52 337 ;
+C 126 ; WX 0 ; N d126 ; B -42 -18 47 336 ;
+C 127 ; WX 0 ; N d127 ; B -53 -17 42 335 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xydash10.afm b/macros/generic/diagrams/xypic/afm/xydash10.afm
new file mode 100644
index 0000000000..4b15516be9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xydash10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:40 2013
+FontName XYDASH-Medium
+FullName XYDASH
+FamilyName XYDASH
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -21 -521 521 520
+StartCharMetrics 128
+C 0 ; WX 484 ; N a0 ; B -20 -21 369 380 ;
+C 1 ; WX 469 ; N a1 ; B -20 -21 363 385 ;
+C 2 ; WX 453 ; N a2 ; B -20 -21 356 391 ;
+C 3 ; WX 438 ; N a3 ; B -20 -21 350 397 ;
+C 4 ; WX 422 ; N a4 ; B -21 -21 343 403 ;
+C 5 ; WX 406 ; N a5 ; B -21 -21 336 409 ;
+C 6 ; WX 391 ; N a6 ; B -21 -21 329 415 ;
+C 7 ; WX 375 ; N a7 ; B -20 -21 321 421 ;
+C 8 ; WX 359 ; N a8 ; B -21 -21 312 426 ;
+C 9 ; WX 344 ; N a9 ; B -20 -21 304 433 ;
+C 10 ; WX 328 ; N a10 ; B -20 -21 295 439 ;
+C 11 ; WX 313 ; N a11 ; B -20 -21 285 444 ;
+C 12 ; WX 297 ; N a12 ; B -20 -21 276 450 ;
+C 13 ; WX 281 ; N a13 ; B -20 -21 266 456 ;
+C 14 ; WX 266 ; N a14 ; B -21 -21 256 462 ;
+C 15 ; WX 250 ; N a15 ; B -20 -21 244 468 ;
+C 16 ; WX 234 ; N a16 ; B -20 -21 233 473 ;
+C 17 ; WX 219 ; N a17 ; B -20 -21 221 479 ;
+C 18 ; WX 203 ; N a18 ; B -21 -21 209 484 ;
+C 19 ; WX 188 ; N a19 ; B -21 -21 196 489 ;
+C 20 ; WX 172 ; N a20 ; B -20 -21 183 494 ;
+C 21 ; WX 156 ; N a21 ; B -20 -20 169 498 ;
+C 22 ; WX 141 ; N a22 ; B -20 -21 157 502 ;
+C 23 ; WX 125 ; N a23 ; B -20 -21 142 506 ;
+C 24 ; WX 109 ; N a24 ; B -20 -21 127 509 ;
+C 25 ; WX 94 ; N a25 ; B -20 -21 113 512 ;
+C 26 ; WX 78 ; N a26 ; B -20 -21 98 515 ;
+C 27 ; WX 63 ; N a27 ; B -20 -21 83 517 ;
+C 28 ; WX 47 ; N a28 ; B -20 -21 67 519 ;
+C 29 ; WX 31 ; N a29 ; B -20 -21 52 520 ;
+C 30 ; WX 16 ; N a30 ; B -20 -21 36 520 ;
+C 31 ; WX 0 ; N a31 ; B -21 -521 21 21 ;
+C 32 ; WX 16 ; N a32 ; B -20 -519 36 21 ;
+C 33 ; WX 31 ; N a33 ; B -20 -520 52 21 ;
+C 34 ; WX 47 ; N a34 ; B -20 -518 67 21 ;
+C 35 ; WX 63 ; N a35 ; B -20 -517 82 21 ;
+C 36 ; WX 78 ; N a36 ; B -20 -515 98 21 ;
+C 37 ; WX 94 ; N a37 ; B -20 -512 113 21 ;
+C 38 ; WX 109 ; N a38 ; B -20 -510 127 21 ;
+C 39 ; WX 125 ; N a39 ; B -20 -506 142 21 ;
+C 40 ; WX 141 ; N a40 ; B -20 -502 157 21 ;
+C 41 ; WX 156 ; N a41 ; B -20 -499 169 21 ;
+C 42 ; WX 172 ; N a42 ; B -21 -494 183 21 ;
+C 43 ; WX 188 ; N a43 ; B -21 -489 196 21 ;
+C 44 ; WX 203 ; N a44 ; B -21 -484 209 21 ;
+C 45 ; WX 219 ; N a45 ; B -21 -479 222 21 ;
+C 46 ; WX 234 ; N a46 ; B -21 -474 233 21 ;
+C 47 ; WX 250 ; N a47 ; B -20 -468 244 21 ;
+C 48 ; WX 266 ; N a48 ; B -20 -463 256 21 ;
+C 49 ; WX 281 ; N a49 ; B -20 -457 266 21 ;
+C 50 ; WX 297 ; N a50 ; B -20 -451 276 21 ;
+C 51 ; WX 313 ; N a51 ; B -20 -444 285 21 ;
+C 52 ; WX 328 ; N a52 ; B -20 -439 295 21 ;
+C 53 ; WX 344 ; N a53 ; B -20 -433 303 21 ;
+C 54 ; WX 359 ; N a54 ; B -21 -427 312 21 ;
+C 55 ; WX 375 ; N a55 ; B -20 -421 321 21 ;
+C 56 ; WX 391 ; N a56 ; B -21 -415 329 21 ;
+C 57 ; WX 406 ; N a57 ; B -21 -409 336 21 ;
+C 58 ; WX 422 ; N a58 ; B -21 -403 344 21 ;
+C 59 ; WX 438 ; N a59 ; B -20 -397 350 21 ;
+C 60 ; WX 453 ; N a60 ; B -20 -391 356 21 ;
+C 61 ; WX 469 ; N a61 ; B -20 -384 363 21 ;
+C 62 ; WX 484 ; N a62 ; B -20 -380 369 21 ;
+C 63 ; WX 500 ; N a63 ; B -20 -375 374 21 ;
+C 64 ; WX 500 ; N a64 ; B -20 -369 380 21 ;
+C 65 ; WX 500 ; N a65 ; B -20 -362 385 21 ;
+C 66 ; WX 500 ; N a66 ; B -20 -357 391 21 ;
+C 67 ; WX 500 ; N a67 ; B -20 -350 397 21 ;
+C 68 ; WX 500 ; N a68 ; B -20 -343 403 21 ;
+C 69 ; WX 500 ; N a69 ; B -20 -336 409 21 ;
+C 70 ; WX 500 ; N a70 ; B -20 -329 415 21 ;
+C 71 ; WX 500 ; N a71 ; B -20 -322 421 21 ;
+C 72 ; WX 500 ; N a72 ; B -20 -313 427 21 ;
+C 73 ; WX 500 ; N a73 ; B -20 -303 433 21 ;
+C 74 ; WX 500 ; N a74 ; B -20 -295 439 21 ;
+C 75 ; WX 500 ; N a75 ; B -20 -285 444 21 ;
+C 76 ; WX 500 ; N a76 ; B -20 -276 451 21 ;
+C 77 ; WX 500 ; N a77 ; B -20 -266 456 21 ;
+C 78 ; WX 500 ; N a78 ; B -20 -255 462 21 ;
+C 79 ; WX 500 ; N a79 ; B -20 -244 468 21 ;
+C 80 ; WX 500 ; N a80 ; B -20 -233 474 21 ;
+C 81 ; WX 500 ; N a81 ; B -20 -222 479 21 ;
+C 82 ; WX 500 ; N a82 ; B -20 -209 484 21 ;
+C 83 ; WX 500 ; N a83 ; B -20 -196 489 21 ;
+C 84 ; WX 500 ; N a84 ; B -20 -183 493 21 ;
+C 85 ; WX 500 ; N a85 ; B -20 -169 499 21 ;
+C 86 ; WX 500 ; N a86 ; B -20 -156 503 21 ;
+C 87 ; WX 500 ; N a87 ; B -20 -142 506 21 ;
+C 88 ; WX 500 ; N a88 ; B -20 -127 509 21 ;
+C 89 ; WX 500 ; N a89 ; B -20 -113 512 21 ;
+C 90 ; WX 500 ; N a90 ; B -20 -98 515 21 ;
+C 91 ; WX 500 ; N a91 ; B -20 -82 517 21 ;
+C 92 ; WX 500 ; N a92 ; B -20 -67 519 21 ;
+C 93 ; WX 500 ; N a93 ; B -20 -52 520 21 ;
+C 94 ; WX 500 ; N a94 ; B -20 -36 520 20 ;
+C 95 ; WX 500 ; N a95 ; B -20 -21 521 21 ;
+C 96 ; WX 500 ; N a96 ; B -20 -20 520 36 ;
+C 97 ; WX 500 ; N a97 ; B -20 -20 520 52 ;
+C 98 ; WX 500 ; N a98 ; B -20 -20 518 67 ;
+C 99 ; WX 500 ; N a99 ; B -20 -20 517 83 ;
+C 100 ; WX 500 ; N a100 ; B -20 -20 515 98 ;
+C 101 ; WX 500 ; N a101 ; B -20 -20 512 113 ;
+C 102 ; WX 500 ; N a102 ; B -20 -20 509 127 ;
+C 103 ; WX 500 ; N a103 ; B -20 -20 506 142 ;
+C 104 ; WX 500 ; N a104 ; B -20 -20 503 156 ;
+C 105 ; WX 500 ; N a105 ; B -20 -20 499 170 ;
+C 106 ; WX 500 ; N a106 ; B -20 -21 494 183 ;
+C 107 ; WX 500 ; N a107 ; B -20 -21 489 196 ;
+C 108 ; WX 500 ; N a108 ; B -20 -20 484 209 ;
+C 109 ; WX 500 ; N a109 ; B -20 -20 479 222 ;
+C 110 ; WX 500 ; N a110 ; B -20 -20 474 233 ;
+C 111 ; WX 500 ; N a111 ; B -20 -20 468 244 ;
+C 112 ; WX 500 ; N a112 ; B -20 -21 462 255 ;
+C 113 ; WX 500 ; N a113 ; B -20 -21 457 266 ;
+C 114 ; WX 500 ; N a114 ; B -20 -21 450 276 ;
+C 115 ; WX 500 ; N a115 ; B -20 -20 444 285 ;
+C 116 ; WX 500 ; N a116 ; B -20 -20 439 295 ;
+C 117 ; WX 500 ; N a117 ; B -20 -20 433 304 ;
+C 118 ; WX 500 ; N a118 ; B -20 -21 427 312 ;
+C 119 ; WX 500 ; N a119 ; B -20 -20 421 321 ;
+C 120 ; WX 500 ; N a120 ; B -20 -21 415 328 ;
+C 121 ; WX 500 ; N a121 ; B -20 -21 409 336 ;
+C 122 ; WX 500 ; N a122 ; B -20 -21 403 343 ;
+C 123 ; WX 500 ; N a123 ; B -20 -21 397 350 ;
+C 124 ; WX 500 ; N a124 ; B -20 -20 391 357 ;
+C 125 ; WX 500 ; N a125 ; B -20 -21 385 362 ;
+C 126 ; WX 500 ; N a126 ; B -20 -20 380 368 ;
+C 127 ; WX 500 ; N a127 ; B -20 -20 374 374 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeuat10.afm b/macros/generic/diagrams/xypic/afm/xyeuat10.afm
new file mode 100644
index 0000000000..a9c34dd9a6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeuat10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:18 2013
+FontName XYEUAT-Medium
+FullName XYEUAT
+FamilyName XYEUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -273 -273 273 272
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -20 -79 266 21 ;
+C 1 ; WX 0 ; N d1 ; B -20 -71 267 21 ;
+C 2 ; WX 0 ; N d2 ; B -20 -61 270 21 ;
+C 3 ; WX 0 ; N d3 ; B -20 -52 271 22 ;
+C 4 ; WX 0 ; N d4 ; B -20 -42 272 24 ;
+C 5 ; WX 0 ; N d5 ; B -20 -29 273 28 ;
+C 6 ; WX 0 ; N d6 ; B -20 -20 272 33 ;
+C 7 ; WX 0 ; N d7 ; B -20 -20 272 40 ;
+C 8 ; WX 0 ; N d8 ; B -20 -21 272 50 ;
+C 9 ; WX 0 ; N d9 ; B -20 -21 269 61 ;
+C 10 ; WX 0 ; N d10 ; B -20 -20 267 75 ;
+C 11 ; WX 0 ; N d11 ; B -20 -20 264 89 ;
+C 12 ; WX 0 ; N d12 ; B -20 -21 259 103 ;
+C 13 ; WX 0 ; N d13 ; B -20 -20 254 118 ;
+C 14 ; WX 0 ; N d14 ; B -20 -20 247 132 ;
+C 15 ; WX 0 ; N d15 ; B -20 -20 239 146 ;
+C 16 ; WX 0 ; N d16 ; B -20 -20 231 159 ;
+C 17 ; WX 0 ; N d17 ; B -20 -20 222 172 ;
+C 18 ; WX 0 ; N d18 ; B -20 -20 212 184 ;
+C 19 ; WX 0 ; N d19 ; B -21 -20 203 195 ;
+C 20 ; WX 0 ; N d20 ; B -20 -21 192 205 ;
+C 21 ; WX 0 ; N d21 ; B -20 -20 181 214 ;
+C 22 ; WX 0 ; N d22 ; B -20 -20 172 223 ;
+C 23 ; WX 0 ; N d23 ; B -20 -21 160 230 ;
+C 24 ; WX 0 ; N d24 ; B -21 -21 150 237 ;
+C 25 ; WX 0 ; N d25 ; B -21 -20 139 242 ;
+C 26 ; WX 0 ; N d26 ; B -21 -20 131 248 ;
+C 27 ; WX 0 ; N d27 ; B -20 -20 121 253 ;
+C 28 ; WX 0 ; N d28 ; B -21 -21 112 255 ;
+C 29 ; WX 0 ; N d29 ; B -20 -21 104 259 ;
+C 30 ; WX 0 ; N d30 ; B -20 -20 95 261 ;
+C 31 ; WX 0 ; N d31 ; B -20 -21 88 264 ;
+C 32 ; WX 0 ; N d32 ; B -20 -21 79 266 ;
+C 33 ; WX 0 ; N d33 ; B -21 -21 70 267 ;
+C 34 ; WX 0 ; N d34 ; B -21 -20 61 269 ;
+C 35 ; WX 0 ; N d35 ; B -23 -20 52 271 ;
+C 36 ; WX 0 ; N d36 ; B -24 -20 41 272 ;
+C 37 ; WX 0 ; N d37 ; B -28 -21 30 272 ;
+C 38 ; WX 0 ; N d38 ; B -32 -20 21 272 ;
+C 39 ; WX 0 ; N d39 ; B -40 -21 20 272 ;
+C 40 ; WX 0 ; N d40 ; B -51 -20 21 271 ;
+C 41 ; WX 0 ; N d41 ; B -62 -20 21 269 ;
+C 42 ; WX 0 ; N d42 ; B -75 -21 21 267 ;
+C 43 ; WX 0 ; N d43 ; B -89 -21 21 263 ;
+C 44 ; WX 0 ; N d44 ; B -103 -21 20 259 ;
+C 45 ; WX 0 ; N d45 ; B -118 -20 21 254 ;
+C 46 ; WX 0 ; N d46 ; B -132 -20 21 247 ;
+C 47 ; WX 0 ; N d47 ; B -146 -21 21 239 ;
+C 48 ; WX 0 ; N d48 ; B -160 -21 21 231 ;
+C 49 ; WX 0 ; N d49 ; B -172 -21 21 222 ;
+C 50 ; WX 0 ; N d50 ; B -184 -21 21 212 ;
+C 51 ; WX 0 ; N d51 ; B -196 -19 21 203 ;
+C 52 ; WX 0 ; N d52 ; B -205 -20 21 192 ;
+C 53 ; WX 0 ; N d53 ; B -214 -20 21 181 ;
+C 54 ; WX 0 ; N d54 ; B -223 -20 21 171 ;
+C 55 ; WX 0 ; N d55 ; B -230 -21 21 160 ;
+C 56 ; WX 0 ; N d56 ; B -237 -20 21 150 ;
+C 57 ; WX 0 ; N d57 ; B -242 -20 21 140 ;
+C 58 ; WX 0 ; N d58 ; B -247 -20 21 130 ;
+C 59 ; WX 0 ; N d59 ; B -252 -20 20 121 ;
+C 60 ; WX 0 ; N d60 ; B -256 -20 21 111 ;
+C 61 ; WX 0 ; N d61 ; B -259 -20 21 103 ;
+C 62 ; WX 0 ; N d62 ; B -261 -20 21 95 ;
+C 63 ; WX 0 ; N d63 ; B -264 -20 21 87 ;
+C 64 ; WX 0 ; N d64 ; B -266 -21 21 79 ;
+C 65 ; WX 0 ; N d65 ; B -267 -20 21 70 ;
+C 66 ; WX 0 ; N d66 ; B -270 -21 21 61 ;
+C 67 ; WX 0 ; N d67 ; B -271 -23 21 52 ;
+C 68 ; WX 0 ; N d68 ; B -272 -25 21 42 ;
+C 69 ; WX 0 ; N d69 ; B -273 -28 21 30 ;
+C 70 ; WX 0 ; N d70 ; B -271 -34 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -272 -40 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -272 -51 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -269 -62 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -267 -75 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -263 -89 21 21 ;
+C 76 ; WX 0 ; N d76 ; B -259 -103 21 21 ;
+C 77 ; WX 0 ; N d77 ; B -253 -117 21 21 ;
+C 78 ; WX 0 ; N d78 ; B -247 -132 21 21 ;
+C 79 ; WX 0 ; N d79 ; B -240 -146 21 21 ;
+C 80 ; WX 0 ; N d80 ; B -231 -159 21 21 ;
+C 81 ; WX 0 ; N d81 ; B -223 -172 21 21 ;
+C 82 ; WX 0 ; N d82 ; B -212 -184 21 21 ;
+C 83 ; WX 0 ; N d83 ; B -203 -195 21 21 ;
+C 84 ; WX 0 ; N d84 ; B -192 -205 21 21 ;
+C 85 ; WX 0 ; N d85 ; B -181 -214 21 21 ;
+C 86 ; WX 0 ; N d86 ; B -171 -223 21 21 ;
+C 87 ; WX 0 ; N d87 ; B -160 -231 21 21 ;
+C 88 ; WX 0 ; N d88 ; B -150 -237 21 21 ;
+C 89 ; WX 0 ; N d89 ; B -140 -242 21 21 ;
+C 90 ; WX 0 ; N d90 ; B -131 -247 21 21 ;
+C 91 ; WX 0 ; N d91 ; B -121 -252 21 21 ;
+C 92 ; WX 0 ; N d92 ; B -111 -256 21 21 ;
+C 93 ; WX 0 ; N d93 ; B -104 -259 21 21 ;
+C 94 ; WX 0 ; N d94 ; B -95 -261 21 21 ;
+C 95 ; WX 0 ; N d95 ; B -87 -264 21 21 ;
+C 96 ; WX 0 ; N d96 ; B -80 -266 21 21 ;
+C 97 ; WX 0 ; N d97 ; B -70 -267 21 21 ;
+C 98 ; WX 0 ; N d98 ; B -61 -269 21 21 ;
+C 99 ; WX 0 ; N d99 ; B -52 -271 23 21 ;
+C 100 ; WX 0 ; N d100 ; B -41 -272 24 21 ;
+C 101 ; WX 0 ; N d101 ; B -30 -273 28 21 ;
+C 102 ; WX 0 ; N d102 ; B -21 -271 34 21 ;
+C 103 ; WX 0 ; N d103 ; B -21 -272 40 21 ;
+C 104 ; WX 0 ; N d104 ; B -21 -272 51 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -269 62 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -267 75 21 ;
+C 107 ; WX 0 ; N d107 ; B -20 -263 89 21 ;
+C 108 ; WX 0 ; N d108 ; B -21 -259 103 21 ;
+C 109 ; WX 0 ; N d109 ; B -20 -253 118 21 ;
+C 110 ; WX 0 ; N d110 ; B -20 -247 132 21 ;
+C 111 ; WX 0 ; N d111 ; B -20 -240 146 21 ;
+C 112 ; WX 0 ; N d112 ; B -20 -232 160 21 ;
+C 113 ; WX 0 ; N d113 ; B -20 -223 172 21 ;
+C 114 ; WX 0 ; N d114 ; B -21 -212 184 21 ;
+C 115 ; WX 0 ; N d115 ; B -21 -203 195 21 ;
+C 116 ; WX 0 ; N d116 ; B -20 -192 205 21 ;
+C 117 ; WX 0 ; N d117 ; B -20 -181 214 21 ;
+C 118 ; WX 0 ; N d118 ; B -20 -171 223 21 ;
+C 119 ; WX 0 ; N d119 ; B -20 -160 230 21 ;
+C 120 ; WX 0 ; N d120 ; B -20 -150 237 21 ;
+C 121 ; WX 0 ; N d121 ; B -20 -140 242 21 ;
+C 122 ; WX 0 ; N d122 ; B -20 -129 247 21 ;
+C 123 ; WX 0 ; N d123 ; B -20 -121 252 21 ;
+C 124 ; WX 0 ; N d124 ; B -20 -112 255 21 ;
+C 125 ; WX 0 ; N d125 ; B -20 -103 259 21 ;
+C 126 ; WX 0 ; N d126 ; B -20 -95 262 21 ;
+C 127 ; WX 0 ; N d127 ; B -20 -87 264 21 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeuat11.afm b/macros/generic/diagrams/xypic/afm/xyeuat11.afm
new file mode 100644
index 0000000000..65f3bea8dd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeuat11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:24 2013
+FontName XYEUAT-Medium
+FullName XYEUAT
+FamilyName XYEUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -270 -271 270 271
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -18 -77 264 19 ;
+C 1 ; WX 0 ; N d1 ; B -18 -69 265 19 ;
+C 2 ; WX 0 ; N d2 ; B -18 -59 268 19 ;
+C 3 ; WX 0 ; N d3 ; B -18 -50 269 20 ;
+C 4 ; WX 0 ; N d4 ; B -18 -40 270 23 ;
+C 5 ; WX 0 ; N d5 ; B -18 -29 270 26 ;
+C 6 ; WX 0 ; N d6 ; B -18 -18 270 32 ;
+C 7 ; WX 0 ; N d7 ; B -18 -19 270 38 ;
+C 8 ; WX 0 ; N d8 ; B -18 -18 269 49 ;
+C 9 ; WX 0 ; N d9 ; B -18 -18 268 59 ;
+C 10 ; WX 0 ; N d10 ; B -18 -19 265 73 ;
+C 11 ; WX 0 ; N d11 ; B -18 -18 262 87 ;
+C 12 ; WX 0 ; N d12 ; B -18 -19 257 101 ;
+C 13 ; WX 0 ; N d13 ; B -18 -18 251 115 ;
+C 14 ; WX 0 ; N d14 ; B -18 -18 245 130 ;
+C 15 ; WX 0 ; N d15 ; B -18 -19 238 144 ;
+C 16 ; WX 0 ; N d16 ; B -18 -18 229 157 ;
+C 17 ; WX 0 ; N d17 ; B -18 -18 221 170 ;
+C 18 ; WX 0 ; N d18 ; B -18 -18 210 182 ;
+C 19 ; WX 0 ; N d19 ; B -18 -18 200 193 ;
+C 20 ; WX 0 ; N d20 ; B -18 -18 191 204 ;
+C 21 ; WX 0 ; N d21 ; B -19 -19 179 213 ;
+C 22 ; WX 0 ; N d22 ; B -18 -18 169 221 ;
+C 23 ; WX 0 ; N d23 ; B -19 -19 159 229 ;
+C 24 ; WX 0 ; N d24 ; B -18 -18 149 235 ;
+C 25 ; WX 0 ; N d25 ; B -19 -18 138 240 ;
+C 26 ; WX 0 ; N d26 ; B -18 -18 128 245 ;
+C 27 ; WX 0 ; N d27 ; B -18 -18 119 250 ;
+C 28 ; WX 0 ; N d28 ; B -19 -18 109 253 ;
+C 29 ; WX 0 ; N d29 ; B -19 -19 102 257 ;
+C 30 ; WX 0 ; N d30 ; B -19 -18 94 259 ;
+C 31 ; WX 0 ; N d31 ; B -18 -19 86 262 ;
+C 32 ; WX 0 ; N d32 ; B -18 -18 77 264 ;
+C 33 ; WX 0 ; N d33 ; B -18 -18 68 266 ;
+C 34 ; WX 0 ; N d34 ; B -19 -19 59 267 ;
+C 35 ; WX 0 ; N d35 ; B -20 -18 50 269 ;
+C 36 ; WX 0 ; N d36 ; B -22 -19 40 270 ;
+C 37 ; WX 0 ; N d37 ; B -25 -18 28 270 ;
+C 38 ; WX 0 ; N d38 ; B -31 -18 19 271 ;
+C 39 ; WX 0 ; N d39 ; B -38 -18 19 270 ;
+C 40 ; WX 0 ; N d40 ; B -48 -18 19 270 ;
+C 41 ; WX 0 ; N d41 ; B -60 -18 19 268 ;
+C 42 ; WX 0 ; N d42 ; B -73 -18 19 265 ;
+C 43 ; WX 0 ; N d43 ; B -87 -18 18 262 ;
+C 44 ; WX 0 ; N d44 ; B -101 -18 19 257 ;
+C 45 ; WX 0 ; N d45 ; B -116 -18 19 251 ;
+C 46 ; WX 0 ; N d46 ; B -130 -18 19 245 ;
+C 47 ; WX 0 ; N d47 ; B -144 -18 19 237 ;
+C 48 ; WX 0 ; N d48 ; B -157 -18 19 230 ;
+C 49 ; WX 0 ; N d49 ; B -170 -18 19 221 ;
+C 50 ; WX 0 ; N d50 ; B -182 -18 19 210 ;
+C 51 ; WX 0 ; N d51 ; B -194 -18 19 200 ;
+C 52 ; WX 0 ; N d52 ; B -202 -18 19 191 ;
+C 53 ; WX 0 ; N d53 ; B -212 -18 19 180 ;
+C 54 ; WX 0 ; N d54 ; B -221 -18 19 169 ;
+C 55 ; WX 0 ; N d55 ; B -229 -18 19 158 ;
+C 56 ; WX 0 ; N d56 ; B -235 -18 19 148 ;
+C 57 ; WX 0 ; N d57 ; B -240 -18 19 138 ;
+C 58 ; WX 0 ; N d58 ; B -246 -19 19 129 ;
+C 59 ; WX 0 ; N d59 ; B -250 -18 19 119 ;
+C 60 ; WX 0 ; N d60 ; B -254 -18 19 109 ;
+C 61 ; WX 0 ; N d61 ; B -257 -18 19 101 ;
+C 62 ; WX 0 ; N d62 ; B -259 -18 19 93 ;
+C 63 ; WX 0 ; N d63 ; B -262 -18 19 85 ;
+C 64 ; WX 0 ; N d64 ; B -264 -19 19 77 ;
+C 65 ; WX 0 ; N d65 ; B -265 -19 19 68 ;
+C 66 ; WX 0 ; N d66 ; B -268 -19 19 59 ;
+C 67 ; WX 0 ; N d67 ; B -269 -21 19 50 ;
+C 68 ; WX 0 ; N d68 ; B -270 -22 19 39 ;
+C 69 ; WX 0 ; N d69 ; B -270 -26 19 28 ;
+C 70 ; WX 0 ; N d70 ; B -270 -31 19 18 ;
+C 71 ; WX 0 ; N d71 ; B -270 -38 19 18 ;
+C 72 ; WX 0 ; N d72 ; B -269 -48 19 19 ;
+C 73 ; WX 0 ; N d73 ; B -268 -60 19 19 ;
+C 74 ; WX 0 ; N d74 ; B -265 -73 19 19 ;
+C 75 ; WX 0 ; N d75 ; B -262 -87 19 19 ;
+C 76 ; WX 0 ; N d76 ; B -257 -101 19 19 ;
+C 77 ; WX 0 ; N d77 ; B -251 -115 19 19 ;
+C 78 ; WX 0 ; N d78 ; B -245 -130 19 19 ;
+C 79 ; WX 0 ; N d79 ; B -237 -144 19 19 ;
+C 80 ; WX 0 ; N d80 ; B -229 -157 19 19 ;
+C 81 ; WX 0 ; N d81 ; B -221 -170 19 19 ;
+C 82 ; WX 0 ; N d82 ; B -210 -182 19 19 ;
+C 83 ; WX 0 ; N d83 ; B -200 -193 19 19 ;
+C 84 ; WX 0 ; N d84 ; B -191 -204 19 19 ;
+C 85 ; WX 0 ; N d85 ; B -179 -212 19 19 ;
+C 86 ; WX 0 ; N d86 ; B -169 -221 19 19 ;
+C 87 ; WX 0 ; N d87 ; B -158 -228 19 19 ;
+C 88 ; WX 0 ; N d88 ; B -149 -235 19 19 ;
+C 89 ; WX 0 ; N d89 ; B -138 -240 19 19 ;
+C 90 ; WX 0 ; N d90 ; B -129 -246 19 19 ;
+C 91 ; WX 0 ; N d91 ; B -118 -249 19 19 ;
+C 92 ; WX 0 ; N d92 ; B -109 -253 19 20 ;
+C 93 ; WX 0 ; N d93 ; B -101 -257 19 20 ;
+C 94 ; WX 0 ; N d94 ; B -94 -259 19 19 ;
+C 95 ; WX 0 ; N d95 ; B -86 -262 19 20 ;
+C 96 ; WX 0 ; N d96 ; B -77 -264 19 19 ;
+C 97 ; WX 0 ; N d97 ; B -69 -265 19 19 ;
+C 98 ; WX 0 ; N d98 ; B -59 -268 19 20 ;
+C 99 ; WX 0 ; N d99 ; B -50 -268 21 20 ;
+C 100 ; WX 0 ; N d100 ; B -40 -270 22 19 ;
+C 101 ; WX 0 ; N d101 ; B -28 -271 26 19 ;
+C 102 ; WX 0 ; N d102 ; B -18 -270 32 19 ;
+C 103 ; WX 0 ; N d103 ; B -18 -270 38 19 ;
+C 104 ; WX 0 ; N d104 ; B -19 -269 48 19 ;
+C 105 ; WX 0 ; N d105 ; B -19 -268 60 19 ;
+C 106 ; WX 0 ; N d106 ; B -18 -265 73 19 ;
+C 107 ; WX 0 ; N d107 ; B -18 -262 87 20 ;
+C 108 ; WX 0 ; N d108 ; B -18 -256 101 20 ;
+C 109 ; WX 0 ; N d109 ; B -18 -251 115 19 ;
+C 110 ; WX 0 ; N d110 ; B -19 -245 130 19 ;
+C 111 ; WX 0 ; N d111 ; B -18 -237 144 19 ;
+C 112 ; WX 0 ; N d112 ; B -18 -229 157 19 ;
+C 113 ; WX 0 ; N d113 ; B -18 -221 170 19 ;
+C 114 ; WX 0 ; N d114 ; B -19 -210 182 19 ;
+C 115 ; WX 0 ; N d115 ; B -18 -200 194 19 ;
+C 116 ; WX 0 ; N d116 ; B -18 -191 204 19 ;
+C 117 ; WX 0 ; N d117 ; B -18 -179 212 20 ;
+C 118 ; WX 0 ; N d118 ; B -18 -169 221 19 ;
+C 119 ; WX 0 ; N d119 ; B -18 -159 229 19 ;
+C 120 ; WX 0 ; N d120 ; B -18 -148 235 19 ;
+C 121 ; WX 0 ; N d121 ; B -18 -138 240 19 ;
+C 122 ; WX 0 ; N d122 ; B -18 -129 246 19 ;
+C 123 ; WX 0 ; N d123 ; B -18 -118 249 19 ;
+C 124 ; WX 0 ; N d124 ; B -18 -109 253 19 ;
+C 125 ; WX 0 ; N d125 ; B -18 -102 257 19 ;
+C 126 ; WX 0 ; N d126 ; B -18 -93 259 19 ;
+C 127 ; WX 0 ; N d127 ; B -18 -86 262 19 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeuat12.afm b/macros/generic/diagrams/xypic/afm/xyeuat12.afm
new file mode 100644
index 0000000000..04e55485e9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeuat12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:30 2013
+FontName XYEUAT-Medium
+FullName XYEUAT
+FamilyName XYEUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -269 -269 269 269
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -17 -75 263 17 ;
+C 1 ; WX 0 ; N d1 ; B -17 -67 265 17 ;
+C 2 ; WX 0 ; N d2 ; B -18 -58 266 18 ;
+C 3 ; WX 0 ; N d3 ; B -17 -48 268 18 ;
+C 4 ; WX 0 ; N d4 ; B -17 -38 269 22 ;
+C 5 ; WX 0 ; N d5 ; B -17 -27 269 25 ;
+C 6 ; WX 0 ; N d6 ; B -17 -17 269 30 ;
+C 7 ; WX 0 ; N d7 ; B -18 -17 269 37 ;
+C 8 ; WX 0 ; N d8 ; B -18 -17 268 46 ;
+C 9 ; WX 0 ; N d9 ; B -18 -17 266 58 ;
+C 10 ; WX 0 ; N d10 ; B -18 -17 264 71 ;
+C 11 ; WX 0 ; N d11 ; B -18 -18 260 85 ;
+C 12 ; WX 0 ; N d12 ; B -18 -17 256 100 ;
+C 13 ; WX 0 ; N d13 ; B -18 -18 250 114 ;
+C 14 ; WX 0 ; N d14 ; B -18 -17 243 129 ;
+C 15 ; WX 0 ; N d15 ; B -18 -18 236 142 ;
+C 16 ; WX 0 ; N d16 ; B -18 -18 228 156 ;
+C 17 ; WX 0 ; N d17 ; B -17 -17 219 169 ;
+C 18 ; WX 0 ; N d18 ; B -17 -17 209 180 ;
+C 19 ; WX 0 ; N d19 ; B -17 -17 199 191 ;
+C 20 ; WX 0 ; N d20 ; B -18 -17 189 202 ;
+C 21 ; WX 0 ; N d21 ; B -18 -18 179 211 ;
+C 22 ; WX 0 ; N d22 ; B -17 -18 167 219 ;
+C 23 ; WX 0 ; N d23 ; B -17 -17 158 227 ;
+C 24 ; WX 0 ; N d24 ; B -18 -17 146 234 ;
+C 25 ; WX 0 ; N d25 ; B -17 -17 136 239 ;
+C 26 ; WX 0 ; N d26 ; B -17 -17 126 244 ;
+C 27 ; WX 0 ; N d27 ; B -17 -17 117 248 ;
+C 28 ; WX 0 ; N d28 ; B -18 -17 109 253 ;
+C 29 ; WX 0 ; N d29 ; B -17 -17 99 256 ;
+C 30 ; WX 0 ; N d30 ; B -17 -17 91 258 ;
+C 31 ; WX 0 ; N d31 ; B -17 -17 83 261 ;
+C 32 ; WX 0 ; N d32 ; B -17 -17 75 263 ;
+C 33 ; WX 0 ; N d33 ; B -17 -17 67 264 ;
+C 34 ; WX 0 ; N d34 ; B -17 -18 58 266 ;
+C 35 ; WX 0 ; N d35 ; B -19 -17 48 267 ;
+C 36 ; WX 0 ; N d36 ; B -21 -18 38 269 ;
+C 37 ; WX 0 ; N d37 ; B -26 -17 28 269 ;
+C 38 ; WX 0 ; N d38 ; B -30 -18 18 269 ;
+C 39 ; WX 0 ; N d39 ; B -38 -17 18 269 ;
+C 40 ; WX 0 ; N d40 ; B -47 -17 18 268 ;
+C 41 ; WX 0 ; N d41 ; B -58 -18 17 266 ;
+C 42 ; WX 0 ; N d42 ; B -71 -17 17 263 ;
+C 43 ; WX 0 ; N d43 ; B -85 -17 18 260 ;
+C 44 ; WX 0 ; N d44 ; B -100 -18 17 255 ;
+C 45 ; WX 0 ; N d45 ; B -115 -18 17 250 ;
+C 46 ; WX 0 ; N d46 ; B -128 -18 17 244 ;
+C 47 ; WX 0 ; N d47 ; B -142 -18 17 236 ;
+C 48 ; WX 0 ; N d48 ; B -155 -18 18 228 ;
+C 49 ; WX 0 ; N d49 ; B -168 -18 17 219 ;
+C 50 ; WX 0 ; N d50 ; B -180 -18 17 210 ;
+C 51 ; WX 0 ; N d51 ; B -190 -18 17 199 ;
+C 52 ; WX 0 ; N d52 ; B -203 -18 17 189 ;
+C 53 ; WX 0 ; N d53 ; B -212 -17 18 179 ;
+C 54 ; WX 0 ; N d54 ; B -220 -18 17 167 ;
+C 55 ; WX 0 ; N d55 ; B -227 -17 17 158 ;
+C 56 ; WX 0 ; N d56 ; B -234 -18 17 147 ;
+C 57 ; WX 0 ; N d57 ; B -239 -17 18 136 ;
+C 58 ; WX 0 ; N d58 ; B -244 -17 17 126 ;
+C 59 ; WX 0 ; N d59 ; B -249 -17 17 118 ;
+C 60 ; WX 0 ; N d60 ; B -253 -17 17 108 ;
+C 61 ; WX 0 ; N d61 ; B -255 -17 18 100 ;
+C 62 ; WX 0 ; N d62 ; B -258 -18 17 91 ;
+C 63 ; WX 0 ; N d63 ; B -260 -17 18 83 ;
+C 64 ; WX 0 ; N d64 ; B -263 -17 17 76 ;
+C 65 ; WX 0 ; N d65 ; B -264 -18 17 67 ;
+C 66 ; WX 0 ; N d66 ; B -266 -17 17 58 ;
+C 67 ; WX 0 ; N d67 ; B -267 -17 17 49 ;
+C 68 ; WX 0 ; N d68 ; B -269 -21 17 38 ;
+C 69 ; WX 0 ; N d69 ; B -269 -25 18 27 ;
+C 70 ; WX 0 ; N d70 ; B -269 -30 17 17 ;
+C 71 ; WX 0 ; N d71 ; B -269 -37 17 17 ;
+C 72 ; WX 0 ; N d72 ; B -268 -46 17 17 ;
+C 73 ; WX 0 ; N d73 ; B -266 -57 17 17 ;
+C 74 ; WX 0 ; N d74 ; B -264 -71 17 17 ;
+C 75 ; WX 0 ; N d75 ; B -260 -85 17 17 ;
+C 76 ; WX 0 ; N d76 ; B -256 -100 17 18 ;
+C 77 ; WX 0 ; N d77 ; B -250 -114 17 17 ;
+C 78 ; WX 0 ; N d78 ; B -244 -128 17 17 ;
+C 79 ; WX 0 ; N d79 ; B -236 -143 18 17 ;
+C 80 ; WX 0 ; N d80 ; B -228 -156 18 18 ;
+C 81 ; WX 0 ; N d81 ; B -219 -169 17 18 ;
+C 82 ; WX 0 ; N d82 ; B -209 -180 17 17 ;
+C 83 ; WX 0 ; N d83 ; B -199 -190 17 18 ;
+C 84 ; WX 0 ; N d84 ; B -189 -201 17 18 ;
+C 85 ; WX 0 ; N d85 ; B -178 -211 18 18 ;
+C 86 ; WX 0 ; N d86 ; B -168 -220 17 18 ;
+C 87 ; WX 0 ; N d87 ; B -157 -227 17 18 ;
+C 88 ; WX 0 ; N d88 ; B -146 -234 18 18 ;
+C 89 ; WX 0 ; N d89 ; B -136 -239 17 18 ;
+C 90 ; WX 0 ; N d90 ; B -126 -244 17 18 ;
+C 91 ; WX 0 ; N d91 ; B -118 -248 18 18 ;
+C 92 ; WX 0 ; N d92 ; B -109 -252 18 18 ;
+C 93 ; WX 0 ; N d93 ; B -99 -255 17 18 ;
+C 94 ; WX 0 ; N d94 ; B -91 -258 17 18 ;
+C 95 ; WX 0 ; N d95 ; B -83 -260 17 18 ;
+C 96 ; WX 0 ; N d96 ; B -75 -262 18 18 ;
+C 97 ; WX 0 ; N d97 ; B -67 -265 17 18 ;
+C 98 ; WX 0 ; N d98 ; B -58 -266 17 18 ;
+C 99 ; WX 0 ; N d99 ; B -48 -267 19 18 ;
+C 100 ; WX 0 ; N d100 ; B -38 -269 22 18 ;
+C 101 ; WX 0 ; N d101 ; B -28 -269 25 18 ;
+C 102 ; WX 0 ; N d102 ; B -17 -269 30 18 ;
+C 103 ; WX 0 ; N d103 ; B -17 -269 37 18 ;
+C 104 ; WX 0 ; N d104 ; B -17 -268 47 18 ;
+C 105 ; WX 0 ; N d105 ; B -17 -266 58 18 ;
+C 106 ; WX 0 ; N d106 ; B -17 -263 71 18 ;
+C 107 ; WX 0 ; N d107 ; B -18 -260 85 17 ;
+C 108 ; WX 0 ; N d108 ; B -17 -254 100 18 ;
+C 109 ; WX 0 ; N d109 ; B -18 -250 115 17 ;
+C 110 ; WX 0 ; N d110 ; B -18 -243 128 17 ;
+C 111 ; WX 0 ; N d111 ; B -18 -236 142 17 ;
+C 112 ; WX 0 ; N d112 ; B -17 -228 156 17 ;
+C 113 ; WX 0 ; N d113 ; B -18 -219 168 17 ;
+C 114 ; WX 0 ; N d114 ; B -18 -209 180 17 ;
+C 115 ; WX 0 ; N d115 ; B -18 -199 191 17 ;
+C 116 ; WX 0 ; N d116 ; B -18 -189 203 17 ;
+C 117 ; WX 0 ; N d117 ; B -18 -179 212 18 ;
+C 118 ; WX 0 ; N d118 ; B -18 -168 219 18 ;
+C 119 ; WX 0 ; N d119 ; B -18 -157 228 17 ;
+C 120 ; WX 0 ; N d120 ; B -18 -146 233 17 ;
+C 121 ; WX 0 ; N d121 ; B -17 -137 240 17 ;
+C 122 ; WX 0 ; N d122 ; B -18 -126 245 17 ;
+C 123 ; WX 0 ; N d123 ; B -18 -117 249 17 ;
+C 124 ; WX 0 ; N d124 ; B -18 -109 252 17 ;
+C 125 ; WX 0 ; N d125 ; B -18 -99 255 17 ;
+C 126 ; WX 0 ; N d126 ; B -17 -91 258 18 ;
+C 127 ; WX 0 ; N d127 ; B -17 -83 260 17 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeubt10.afm b/macros/generic/diagrams/xypic/afm/xyeubt10.afm
new file mode 100644
index 0000000000..dabe58b246
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeubt10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:21 2013
+FontName XYEUBT-Medium
+FullName XYEUBT
+FamilyName XYEUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -273 -273 273 272
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -95 -20 21 261 ;
+C 1 ; WX 0 ; N d1 ; B -103 -20 21 259 ;
+C 2 ; WX 0 ; N d2 ; B -112 -20 21 255 ;
+C 3 ; WX 0 ; N d3 ; B -121 -21 21 252 ;
+C 4 ; WX 0 ; N d4 ; B -131 -20 20 247 ;
+C 5 ; WX 0 ; N d5 ; B -139 -20 21 242 ;
+C 6 ; WX 0 ; N d6 ; B -151 -20 21 237 ;
+C 7 ; WX 0 ; N d7 ; B -160 -21 20 231 ;
+C 8 ; WX 0 ; N d8 ; B -172 -21 20 223 ;
+C 9 ; WX 0 ; N d9 ; B -181 -21 20 214 ;
+C 10 ; WX 0 ; N d10 ; B -192 -20 21 205 ;
+C 11 ; WX 0 ; N d11 ; B -203 -21 21 196 ;
+C 12 ; WX 0 ; N d12 ; B -212 -19 21 184 ;
+C 13 ; WX 0 ; N d13 ; B -223 -21 21 172 ;
+C 14 ; WX 0 ; N d14 ; B -231 -20 21 159 ;
+C 15 ; WX 0 ; N d15 ; B -239 -20 20 146 ;
+C 16 ; WX 0 ; N d16 ; B -247 -21 21 132 ;
+C 17 ; WX 0 ; N d17 ; B -254 -19 21 118 ;
+C 18 ; WX 0 ; N d18 ; B -259 -21 21 103 ;
+C 19 ; WX 0 ; N d19 ; B -264 -21 21 89 ;
+C 20 ; WX 0 ; N d20 ; B -266 -20 21 75 ;
+C 21 ; WX 0 ; N d21 ; B -269 -20 21 62 ;
+C 22 ; WX 0 ; N d22 ; B -271 -20 20 50 ;
+C 23 ; WX 0 ; N d23 ; B -272 -20 21 41 ;
+C 24 ; WX 0 ; N d24 ; B -271 -21 21 34 ;
+C 25 ; WX 0 ; N d25 ; B -273 -29 21 28 ;
+C 26 ; WX 0 ; N d26 ; B -272 -42 21 24 ;
+C 27 ; WX 0 ; N d27 ; B -271 -52 21 22 ;
+C 28 ; WX 0 ; N d28 ; B -270 -61 21 21 ;
+C 29 ; WX 0 ; N d29 ; B -267 -71 21 21 ;
+C 30 ; WX 0 ; N d30 ; B -266 -79 21 21 ;
+C 31 ; WX 0 ; N d31 ; B -264 -87 21 21 ;
+C 32 ; WX 0 ; N d32 ; B -262 -95 21 21 ;
+C 33 ; WX 0 ; N d33 ; B -259 -104 21 21 ;
+C 34 ; WX 0 ; N d34 ; B -255 -112 21 21 ;
+C 35 ; WX 0 ; N d35 ; B -252 -121 21 21 ;
+C 36 ; WX 0 ; N d36 ; B -247 -129 21 21 ;
+C 37 ; WX 0 ; N d37 ; B -242 -140 21 21 ;
+C 38 ; WX 0 ; N d38 ; B -237 -150 21 21 ;
+C 39 ; WX 0 ; N d39 ; B -230 -160 21 21 ;
+C 40 ; WX 0 ; N d40 ; B -223 -171 21 21 ;
+C 41 ; WX 0 ; N d41 ; B -214 -181 21 21 ;
+C 42 ; WX 0 ; N d42 ; B -205 -192 21 21 ;
+C 43 ; WX 0 ; N d43 ; B -195 -203 21 21 ;
+C 44 ; WX 0 ; N d44 ; B -184 -212 21 21 ;
+C 45 ; WX 0 ; N d45 ; B -172 -223 21 21 ;
+C 46 ; WX 0 ; N d46 ; B -160 -231 21 21 ;
+C 47 ; WX 0 ; N d47 ; B -146 -240 21 21 ;
+C 48 ; WX 0 ; N d48 ; B -131 -247 21 21 ;
+C 49 ; WX 0 ; N d49 ; B -118 -253 21 21 ;
+C 50 ; WX 0 ; N d50 ; B -103 -259 21 21 ;
+C 51 ; WX 0 ; N d51 ; B -89 -264 21 21 ;
+C 52 ; WX 0 ; N d52 ; B -75 -267 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -62 -269 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -51 -272 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -41 -272 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -32 -271 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -28 -273 30 21 ;
+C 58 ; WX 0 ; N d58 ; B -23 -272 42 21 ;
+C 59 ; WX 0 ; N d59 ; B -22 -271 52 21 ;
+C 60 ; WX 0 ; N d60 ; B -21 -269 61 21 ;
+C 61 ; WX 0 ; N d61 ; B -21 -267 70 21 ;
+C 62 ; WX 0 ; N d62 ; B -20 -266 80 21 ;
+C 63 ; WX 0 ; N d63 ; B -20 -264 88 21 ;
+C 64 ; WX 0 ; N d64 ; B -21 -261 95 21 ;
+C 65 ; WX 0 ; N d65 ; B -20 -259 103 21 ;
+C 66 ; WX 0 ; N d66 ; B -21 -256 111 21 ;
+C 67 ; WX 0 ; N d67 ; B -20 -252 121 21 ;
+C 68 ; WX 0 ; N d68 ; B -21 -247 131 21 ;
+C 69 ; WX 0 ; N d69 ; B -21 -242 140 21 ;
+C 70 ; WX 0 ; N d70 ; B -20 -237 150 21 ;
+C 71 ; WX 0 ; N d71 ; B -20 -231 160 21 ;
+C 72 ; WX 0 ; N d72 ; B -20 -223 171 21 ;
+C 73 ; WX 0 ; N d73 ; B -20 -214 181 21 ;
+C 74 ; WX 0 ; N d74 ; B -20 -205 192 21 ;
+C 75 ; WX 0 ; N d75 ; B -20 -195 203 21 ;
+C 76 ; WX 0 ; N d76 ; B -21 -184 212 21 ;
+C 77 ; WX 0 ; N d77 ; B -20 -172 223 21 ;
+C 78 ; WX 0 ; N d78 ; B -20 -159 231 21 ;
+C 79 ; WX 0 ; N d79 ; B -20 -146 240 21 ;
+C 80 ; WX 0 ; N d80 ; B -20 -132 247 21 ;
+C 81 ; WX 0 ; N d81 ; B -20 -117 253 21 ;
+C 82 ; WX 0 ; N d82 ; B -20 -103 259 21 ;
+C 83 ; WX 0 ; N d83 ; B -20 -89 264 21 ;
+C 84 ; WX 0 ; N d84 ; B -20 -74 267 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -62 269 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -51 272 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -40 272 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -33 272 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -27 273 30 ;
+C 90 ; WX 0 ; N d90 ; B -20 -24 272 41 ;
+C 91 ; WX 0 ; N d91 ; B -20 -23 271 52 ;
+C 92 ; WX 0 ; N d92 ; B -20 -21 270 61 ;
+C 93 ; WX 0 ; N d93 ; B -20 -21 267 70 ;
+C 94 ; WX 0 ; N d94 ; B -20 -20 266 79 ;
+C 95 ; WX 0 ; N d95 ; B -20 -20 264 87 ;
+C 96 ; WX 0 ; N d96 ; B -20 -21 262 95 ;
+C 97 ; WX 0 ; N d97 ; B -20 -20 259 103 ;
+C 98 ; WX 0 ; N d98 ; B -20 -20 256 111 ;
+C 99 ; WX 0 ; N d99 ; B -20 -21 252 121 ;
+C 100 ; WX 0 ; N d100 ; B -20 -20 247 130 ;
+C 101 ; WX 0 ; N d101 ; B -20 -21 242 140 ;
+C 102 ; WX 0 ; N d102 ; B -20 -21 237 151 ;
+C 103 ; WX 0 ; N d103 ; B -20 -21 230 160 ;
+C 104 ; WX 0 ; N d104 ; B -20 -20 223 171 ;
+C 105 ; WX 0 ; N d105 ; B -20 -20 214 182 ;
+C 106 ; WX 0 ; N d106 ; B -20 -20 205 192 ;
+C 107 ; WX 0 ; N d107 ; B -21 -20 196 202 ;
+C 108 ; WX 0 ; N d108 ; B -21 -21 184 212 ;
+C 109 ; WX 0 ; N d109 ; B -20 -21 172 222 ;
+C 110 ; WX 0 ; N d110 ; B -20 -20 160 231 ;
+C 111 ; WX 0 ; N d111 ; B -20 -20 146 239 ;
+C 112 ; WX 0 ; N d112 ; B -20 -20 131 247 ;
+C 113 ; WX 0 ; N d113 ; B -20 -21 118 253 ;
+C 114 ; WX 0 ; N d114 ; B -21 -21 103 259 ;
+C 115 ; WX 0 ; N d115 ; B -20 -21 89 263 ;
+C 116 ; WX 0 ; N d116 ; B -20 -21 75 267 ;
+C 117 ; WX 0 ; N d117 ; B -21 -20 61 270 ;
+C 118 ; WX 0 ; N d118 ; B -21 -20 51 271 ;
+C 119 ; WX 0 ; N d119 ; B -21 -21 40 272 ;
+C 120 ; WX 0 ; N d120 ; B -21 -21 34 272 ;
+C 121 ; WX 0 ; N d121 ; B -30 -21 28 272 ;
+C 122 ; WX 0 ; N d122 ; B -41 -20 24 272 ;
+C 123 ; WX 0 ; N d123 ; B -52 -21 22 271 ;
+C 124 ; WX 0 ; N d124 ; B -61 -21 22 269 ;
+C 125 ; WX 0 ; N d125 ; B -70 -20 21 267 ;
+C 126 ; WX 0 ; N d126 ; B -79 -21 21 266 ;
+C 127 ; WX 0 ; N d127 ; B -87 -21 21 264 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeubt11.afm b/macros/generic/diagrams/xypic/afm/xyeubt11.afm
new file mode 100644
index 0000000000..071cd8f27a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeubt11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:27 2013
+FontName XYEUBT-Medium
+FullName XYEUBT
+FamilyName XYEUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -271 -271 270 271
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -94 -18 19 260 ;
+C 1 ; WX 0 ; N d1 ; B -101 -18 19 257 ;
+C 2 ; WX 0 ; N d2 ; B -109 -18 19 254 ;
+C 3 ; WX 0 ; N d3 ; B -118 -18 19 250 ;
+C 4 ; WX 0 ; N d4 ; B -129 -18 19 245 ;
+C 5 ; WX 0 ; N d5 ; B -138 -18 19 241 ;
+C 6 ; WX 0 ; N d6 ; B -148 -18 19 235 ;
+C 7 ; WX 0 ; N d7 ; B -158 -19 19 229 ;
+C 8 ; WX 0 ; N d8 ; B -169 -18 19 221 ;
+C 9 ; WX 0 ; N d9 ; B -180 -18 19 212 ;
+C 10 ; WX 0 ; N d10 ; B -190 -18 19 203 ;
+C 11 ; WX 0 ; N d11 ; B -200 -18 19 193 ;
+C 12 ; WX 0 ; N d12 ; B -210 -18 19 182 ;
+C 13 ; WX 0 ; N d13 ; B -220 -19 19 170 ;
+C 14 ; WX 0 ; N d14 ; B -230 -18 19 157 ;
+C 15 ; WX 0 ; N d15 ; B -237 -18 19 144 ;
+C 16 ; WX 0 ; N d16 ; B -245 -18 19 130 ;
+C 17 ; WX 0 ; N d17 ; B -252 -18 19 115 ;
+C 18 ; WX 0 ; N d18 ; B -257 -18 19 101 ;
+C 19 ; WX 0 ; N d19 ; B -262 -19 19 87 ;
+C 20 ; WX 0 ; N d20 ; B -265 -18 19 73 ;
+C 21 ; WX 0 ; N d21 ; B -268 -18 19 59 ;
+C 22 ; WX 0 ; N d22 ; B -270 -18 19 48 ;
+C 23 ; WX 0 ; N d23 ; B -270 -18 19 39 ;
+C 24 ; WX 0 ; N d24 ; B -271 -19 19 32 ;
+C 25 ; WX 0 ; N d25 ; B -271 -29 19 26 ;
+C 26 ; WX 0 ; N d26 ; B -270 -40 19 22 ;
+C 27 ; WX 0 ; N d27 ; B -269 -50 19 20 ;
+C 28 ; WX 0 ; N d28 ; B -268 -59 19 19 ;
+C 29 ; WX 0 ; N d29 ; B -265 -69 19 18 ;
+C 30 ; WX 0 ; N d30 ; B -264 -77 19 19 ;
+C 31 ; WX 0 ; N d31 ; B -262 -86 19 19 ;
+C 32 ; WX 0 ; N d32 ; B -260 -93 19 19 ;
+C 33 ; WX 0 ; N d33 ; B -257 -102 19 19 ;
+C 34 ; WX 0 ; N d34 ; B -253 -109 19 19 ;
+C 35 ; WX 0 ; N d35 ; B -249 -118 19 19 ;
+C 36 ; WX 0 ; N d36 ; B -246 -129 19 19 ;
+C 37 ; WX 0 ; N d37 ; B -240 -138 19 19 ;
+C 38 ; WX 0 ; N d38 ; B -235 -148 19 19 ;
+C 39 ; WX 0 ; N d39 ; B -229 -159 19 19 ;
+C 40 ; WX 0 ; N d40 ; B -221 -169 19 19 ;
+C 41 ; WX 0 ; N d41 ; B -212 -179 19 19 ;
+C 42 ; WX 0 ; N d42 ; B -204 -191 19 19 ;
+C 43 ; WX 0 ; N d43 ; B -194 -200 19 19 ;
+C 44 ; WX 0 ; N d44 ; B -182 -210 19 19 ;
+C 45 ; WX 0 ; N d45 ; B -170 -221 19 19 ;
+C 46 ; WX 0 ; N d46 ; B -157 -229 19 19 ;
+C 47 ; WX 0 ; N d47 ; B -144 -237 19 20 ;
+C 48 ; WX 0 ; N d48 ; B -130 -245 19 19 ;
+C 49 ; WX 0 ; N d49 ; B -116 -251 19 19 ;
+C 50 ; WX 0 ; N d50 ; B -101 -256 19 19 ;
+C 51 ; WX 0 ; N d51 ; B -87 -262 19 19 ;
+C 52 ; WX 0 ; N d52 ; B -73 -265 19 19 ;
+C 53 ; WX 0 ; N d53 ; B -60 -268 19 19 ;
+C 54 ; WX 0 ; N d54 ; B -48 -269 19 19 ;
+C 55 ; WX 0 ; N d55 ; B -38 -270 19 20 ;
+C 56 ; WX 0 ; N d56 ; B -31 -270 19 20 ;
+C 57 ; WX 0 ; N d57 ; B -26 -271 28 19 ;
+C 58 ; WX 0 ; N d58 ; B -22 -270 40 19 ;
+C 59 ; WX 0 ; N d59 ; B -20 -268 50 19 ;
+C 60 ; WX 0 ; N d60 ; B -20 -268 59 19 ;
+C 61 ; WX 0 ; N d61 ; B -18 -265 69 19 ;
+C 62 ; WX 0 ; N d62 ; B -19 -264 77 19 ;
+C 63 ; WX 0 ; N d63 ; B -18 -262 86 19 ;
+C 64 ; WX 0 ; N d64 ; B -19 -259 94 20 ;
+C 65 ; WX 0 ; N d65 ; B -19 -257 101 19 ;
+C 66 ; WX 0 ; N d66 ; B -19 -253 109 19 ;
+C 67 ; WX 0 ; N d67 ; B -18 -249 119 19 ;
+C 68 ; WX 0 ; N d68 ; B -18 -246 129 19 ;
+C 69 ; WX 0 ; N d69 ; B -18 -240 138 19 ;
+C 70 ; WX 0 ; N d70 ; B -18 -235 149 19 ;
+C 71 ; WX 0 ; N d71 ; B -19 -228 158 19 ;
+C 72 ; WX 0 ; N d72 ; B -19 -221 169 20 ;
+C 73 ; WX 0 ; N d73 ; B -19 -212 179 19 ;
+C 74 ; WX 0 ; N d74 ; B -18 -204 191 19 ;
+C 75 ; WX 0 ; N d75 ; B -18 -193 200 19 ;
+C 76 ; WX 0 ; N d76 ; B -18 -182 210 19 ;
+C 77 ; WX 0 ; N d77 ; B -18 -170 221 19 ;
+C 78 ; WX 0 ; N d78 ; B -18 -157 229 19 ;
+C 79 ; WX 0 ; N d79 ; B -18 -144 237 19 ;
+C 80 ; WX 0 ; N d80 ; B -18 -130 245 19 ;
+C 81 ; WX 0 ; N d81 ; B -18 -116 251 19 ;
+C 82 ; WX 0 ; N d82 ; B -18 -101 257 19 ;
+C 83 ; WX 0 ; N d83 ; B -18 -87 262 19 ;
+C 84 ; WX 0 ; N d84 ; B -18 -73 265 19 ;
+C 85 ; WX 0 ; N d85 ; B -18 -59 268 19 ;
+C 86 ; WX 0 ; N d86 ; B -18 -48 269 19 ;
+C 87 ; WX 0 ; N d87 ; B -18 -38 270 19 ;
+C 88 ; WX 0 ; N d88 ; B -18 -31 270 19 ;
+C 89 ; WX 0 ; N d89 ; B -18 -27 270 29 ;
+C 90 ; WX 0 ; N d90 ; B -18 -23 270 39 ;
+C 91 ; WX 0 ; N d91 ; B -18 -21 269 50 ;
+C 92 ; WX 0 ; N d92 ; B -18 -19 268 59 ;
+C 93 ; WX 0 ; N d93 ; B -18 -19 265 68 ;
+C 94 ; WX 0 ; N d94 ; B -18 -18 264 77 ;
+C 95 ; WX 0 ; N d95 ; B -18 -18 262 85 ;
+C 96 ; WX 0 ; N d96 ; B -18 -18 259 93 ;
+C 97 ; WX 0 ; N d97 ; B -18 -18 258 101 ;
+C 98 ; WX 0 ; N d98 ; B -18 -18 253 109 ;
+C 99 ; WX 0 ; N d99 ; B -18 -18 249 119 ;
+C 100 ; WX 0 ; N d100 ; B -18 -19 246 128 ;
+C 101 ; WX 0 ; N d101 ; B -18 -18 241 138 ;
+C 102 ; WX 0 ; N d102 ; B -18 -18 235 148 ;
+C 103 ; WX 0 ; N d103 ; B -18 -18 229 159 ;
+C 104 ; WX 0 ; N d104 ; B -18 -18 222 169 ;
+C 105 ; WX 0 ; N d105 ; B -18 -18 212 180 ;
+C 106 ; WX 0 ; N d106 ; B -18 -18 204 190 ;
+C 107 ; WX 0 ; N d107 ; B -18 -18 194 200 ;
+C 108 ; WX 0 ; N d108 ; B -19 -19 182 210 ;
+C 109 ; WX 0 ; N d109 ; B -18 -19 170 221 ;
+C 110 ; WX 0 ; N d110 ; B -18 -18 157 230 ;
+C 111 ; WX 0 ; N d111 ; B -18 -18 144 237 ;
+C 112 ; WX 0 ; N d112 ; B -18 -18 130 245 ;
+C 113 ; WX 0 ; N d113 ; B -18 -18 115 251 ;
+C 114 ; WX 0 ; N d114 ; B -18 -18 101 257 ;
+C 115 ; WX 0 ; N d115 ; B -18 -18 87 262 ;
+C 116 ; WX 0 ; N d116 ; B -19 -18 73 265 ;
+C 117 ; WX 0 ; N d117 ; B -19 -18 60 268 ;
+C 118 ; WX 0 ; N d118 ; B -19 -18 49 269 ;
+C 119 ; WX 0 ; N d119 ; B -18 -18 38 270 ;
+C 120 ; WX 0 ; N d120 ; B -18 -19 31 271 ;
+C 121 ; WX 0 ; N d121 ; B -28 -18 26 270 ;
+C 122 ; WX 0 ; N d122 ; B -40 -19 23 270 ;
+C 123 ; WX 0 ; N d123 ; B -50 -18 20 269 ;
+C 124 ; WX 0 ; N d124 ; B -59 -18 20 268 ;
+C 125 ; WX 0 ; N d125 ; B -68 -18 19 265 ;
+C 126 ; WX 0 ; N d126 ; B -77 -18 19 265 ;
+C 127 ; WX 0 ; N d127 ; B -86 -18 19 262 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeubt12.afm b/macros/generic/diagrams/xypic/afm/xyeubt12.afm
new file mode 100644
index 0000000000..f9a6515d65
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeubt12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:32 2013
+FontName XYEUBT-Medium
+FullName XYEUBT
+FamilyName XYEUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -269 -269 269 269
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -91 -18 17 258 ;
+C 1 ; WX 0 ; N d1 ; B -100 -18 17 256 ;
+C 2 ; WX 0 ; N d2 ; B -109 -17 18 253 ;
+C 3 ; WX 0 ; N d3 ; B -117 -18 18 249 ;
+C 4 ; WX 0 ; N d4 ; B -126 -18 17 244 ;
+C 5 ; WX 0 ; N d5 ; B -136 -18 17 239 ;
+C 6 ; WX 0 ; N d6 ; B -147 -17 18 233 ;
+C 7 ; WX 0 ; N d7 ; B -157 -17 17 227 ;
+C 8 ; WX 0 ; N d8 ; B -167 -18 17 219 ;
+C 9 ; WX 0 ; N d9 ; B -178 -17 18 211 ;
+C 10 ; WX 0 ; N d10 ; B -189 -18 18 202 ;
+C 11 ; WX 0 ; N d11 ; B -199 -18 17 191 ;
+C 12 ; WX 0 ; N d12 ; B -210 -17 18 181 ;
+C 13 ; WX 0 ; N d13 ; B -219 -17 17 169 ;
+C 14 ; WX 0 ; N d14 ; B -228 -18 18 156 ;
+C 15 ; WX 0 ; N d15 ; B -236 -18 17 142 ;
+C 16 ; WX 0 ; N d16 ; B -243 -17 17 129 ;
+C 17 ; WX 0 ; N d17 ; B -250 -18 18 115 ;
+C 18 ; WX 0 ; N d18 ; B -256 -18 17 100 ;
+C 19 ; WX 0 ; N d19 ; B -260 -17 17 85 ;
+C 20 ; WX 0 ; N d20 ; B -263 -17 17 71 ;
+C 21 ; WX 0 ; N d21 ; B -266 -17 17 58 ;
+C 22 ; WX 0 ; N d22 ; B -268 -18 17 46 ;
+C 23 ; WX 0 ; N d23 ; B -269 -18 17 37 ;
+C 24 ; WX 0 ; N d24 ; B -269 -17 18 30 ;
+C 25 ; WX 0 ; N d25 ; B -269 -27 18 25 ;
+C 26 ; WX 0 ; N d26 ; B -269 -38 17 21 ;
+C 27 ; WX 0 ; N d27 ; B -268 -48 17 18 ;
+C 28 ; WX 0 ; N d28 ; B -266 -58 17 17 ;
+C 29 ; WX 0 ; N d29 ; B -265 -67 17 17 ;
+C 30 ; WX 0 ; N d30 ; B -263 -75 17 17 ;
+C 31 ; WX 0 ; N d31 ; B -260 -83 18 17 ;
+C 32 ; WX 0 ; N d32 ; B -258 -91 17 18 ;
+C 33 ; WX 0 ; N d33 ; B -255 -99 17 17 ;
+C 34 ; WX 0 ; N d34 ; B -253 -109 17 18 ;
+C 35 ; WX 0 ; N d35 ; B -249 -117 17 17 ;
+C 36 ; WX 0 ; N d36 ; B -245 -126 17 17 ;
+C 37 ; WX 0 ; N d37 ; B -240 -137 18 17 ;
+C 38 ; WX 0 ; N d38 ; B -233 -146 17 17 ;
+C 39 ; WX 0 ; N d39 ; B -228 -157 17 18 ;
+C 40 ; WX 0 ; N d40 ; B -219 -167 17 18 ;
+C 41 ; WX 0 ; N d41 ; B -212 -178 18 17 ;
+C 42 ; WX 0 ; N d42 ; B -203 -189 17 18 ;
+C 43 ; WX 0 ; N d43 ; B -190 -199 17 18 ;
+C 44 ; WX 0 ; N d44 ; B -180 -209 18 17 ;
+C 45 ; WX 0 ; N d45 ; B -168 -219 18 17 ;
+C 46 ; WX 0 ; N d46 ; B -155 -228 18 18 ;
+C 47 ; WX 0 ; N d47 ; B -142 -236 18 18 ;
+C 48 ; WX 0 ; N d48 ; B -128 -243 17 18 ;
+C 49 ; WX 0 ; N d49 ; B -115 -250 17 18 ;
+C 50 ; WX 0 ; N d50 ; B -100 -254 17 18 ;
+C 51 ; WX 0 ; N d51 ; B -85 -260 18 18 ;
+C 52 ; WX 0 ; N d52 ; B -71 -263 17 18 ;
+C 53 ; WX 0 ; N d53 ; B -58 -266 17 18 ;
+C 54 ; WX 0 ; N d54 ; B -47 -268 17 18 ;
+C 55 ; WX 0 ; N d55 ; B -37 -269 18 18 ;
+C 56 ; WX 0 ; N d56 ; B -30 -269 18 18 ;
+C 57 ; WX 0 ; N d57 ; B -25 -269 28 18 ;
+C 58 ; WX 0 ; N d58 ; B -21 -269 38 18 ;
+C 59 ; WX 0 ; N d59 ; B -19 -267 48 18 ;
+C 60 ; WX 0 ; N d60 ; B -17 -266 58 18 ;
+C 61 ; WX 0 ; N d61 ; B -18 -265 67 18 ;
+C 62 ; WX 0 ; N d62 ; B -17 -262 75 18 ;
+C 63 ; WX 0 ; N d63 ; B -18 -260 83 18 ;
+C 64 ; WX 0 ; N d64 ; B -17 -259 91 18 ;
+C 65 ; WX 0 ; N d65 ; B -17 -255 99 18 ;
+C 66 ; WX 0 ; N d66 ; B -17 -252 109 18 ;
+C 67 ; WX 0 ; N d67 ; B -17 -248 118 18 ;
+C 68 ; WX 0 ; N d68 ; B -17 -244 126 18 ;
+C 69 ; WX 0 ; N d69 ; B -17 -239 136 17 ;
+C 70 ; WX 0 ; N d70 ; B -18 -234 146 17 ;
+C 71 ; WX 0 ; N d71 ; B -17 -227 157 17 ;
+C 72 ; WX 0 ; N d72 ; B -17 -220 168 18 ;
+C 73 ; WX 0 ; N d73 ; B -18 -211 178 18 ;
+C 74 ; WX 0 ; N d74 ; B -18 -201 189 17 ;
+C 75 ; WX 0 ; N d75 ; B -18 -190 199 17 ;
+C 76 ; WX 0 ; N d76 ; B -18 -180 209 18 ;
+C 77 ; WX 0 ; N d77 ; B -17 -169 219 18 ;
+C 78 ; WX 0 ; N d78 ; B -18 -156 228 18 ;
+C 79 ; WX 0 ; N d79 ; B -18 -143 236 17 ;
+C 80 ; WX 0 ; N d80 ; B -17 -129 243 17 ;
+C 81 ; WX 0 ; N d81 ; B -18 -114 250 18 ;
+C 82 ; WX 0 ; N d82 ; B -18 -100 256 17 ;
+C 83 ; WX 0 ; N d83 ; B -18 -85 260 17 ;
+C 84 ; WX 0 ; N d84 ; B -17 -71 264 17 ;
+C 85 ; WX 0 ; N d85 ; B -18 -57 266 17 ;
+C 86 ; WX 0 ; N d86 ; B -17 -47 268 18 ;
+C 87 ; WX 0 ; N d87 ; B -18 -37 269 18 ;
+C 88 ; WX 0 ; N d88 ; B -18 -29 269 17 ;
+C 89 ; WX 0 ; N d89 ; B -17 -25 269 28 ;
+C 90 ; WX 0 ; N d90 ; B -17 -21 268 38 ;
+C 91 ; WX 0 ; N d91 ; B -17 -17 267 48 ;
+C 92 ; WX 0 ; N d92 ; B -17 -18 266 58 ;
+C 93 ; WX 0 ; N d93 ; B -17 -17 265 67 ;
+C 94 ; WX 0 ; N d94 ; B -17 -17 263 75 ;
+C 95 ; WX 0 ; N d95 ; B -18 -17 260 83 ;
+C 96 ; WX 0 ; N d96 ; B -18 -17 258 92 ;
+C 97 ; WX 0 ; N d97 ; B -17 -17 255 99 ;
+C 98 ; WX 0 ; N d98 ; B -18 -17 252 109 ;
+C 99 ; WX 0 ; N d99 ; B -18 -17 248 118 ;
+C 100 ; WX 0 ; N d100 ; B -18 -17 245 126 ;
+C 101 ; WX 0 ; N d101 ; B -17 -17 239 136 ;
+C 102 ; WX 0 ; N d102 ; B -18 -17 233 146 ;
+C 103 ; WX 0 ; N d103 ; B -18 -17 227 157 ;
+C 104 ; WX 0 ; N d104 ; B -18 -17 219 167 ;
+C 105 ; WX 0 ; N d105 ; B -17 -17 212 179 ;
+C 106 ; WX 0 ; N d106 ; B -18 -18 203 189 ;
+C 107 ; WX 0 ; N d107 ; B -18 -17 191 199 ;
+C 108 ; WX 0 ; N d108 ; B -18 -17 180 210 ;
+C 109 ; WX 0 ; N d109 ; B -18 -17 168 219 ;
+C 110 ; WX 0 ; N d110 ; B -18 -17 156 228 ;
+C 111 ; WX 0 ; N d111 ; B -18 -17 142 236 ;
+C 112 ; WX 0 ; N d112 ; B -18 -17 128 243 ;
+C 113 ; WX 0 ; N d113 ; B -18 -17 115 250 ;
+C 114 ; WX 0 ; N d114 ; B -18 -17 100 255 ;
+C 115 ; WX 0 ; N d115 ; B -18 -18 86 260 ;
+C 116 ; WX 0 ; N d116 ; B -17 -17 71 263 ;
+C 117 ; WX 0 ; N d117 ; B -17 -17 58 266 ;
+C 118 ; WX 0 ; N d118 ; B -17 -17 47 268 ;
+C 119 ; WX 0 ; N d119 ; B -17 -18 37 269 ;
+C 120 ; WX 0 ; N d120 ; B -17 -18 30 269 ;
+C 121 ; WX 0 ; N d121 ; B -28 -17 25 269 ;
+C 122 ; WX 0 ; N d122 ; B -38 -17 21 269 ;
+C 123 ; WX 0 ; N d123 ; B -48 -18 19 267 ;
+C 124 ; WX 0 ; N d124 ; B -58 -18 17 266 ;
+C 125 ; WX 0 ; N d125 ; B -67 -18 17 264 ;
+C 126 ; WX 0 ; N d126 ; B -75 -18 17 262 ;
+C 127 ; WX 0 ; N d127 ; B -83 -17 17 260 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyluat10.afm b/macros/generic/diagrams/xypic/afm/xyluat10.afm
new file mode 100644
index 0000000000..da4c67078e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyluat10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:43 2013
+FontName XYLUAT-Medium
+FullName XYLUAT
+FamilyName XYLUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -202 -202 202 202
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -27 -29 200 80 ;
+C 1 ; WX 0 ; N d1 ; B -26 -30 198 83 ;
+C 2 ; WX 0 ; N d2 ; B -25 -30 197 85 ;
+C 3 ; WX 0 ; N d3 ; B -22 -32 195 88 ;
+C 4 ; WX 0 ; N d4 ; B -22 -32 192 91 ;
+C 5 ; WX 0 ; N d5 ; B -21 -34 190 93 ;
+C 6 ; WX 0 ; N d6 ; B -19 -34 186 96 ;
+C 7 ; WX 0 ; N d7 ; B -18 -36 181 98 ;
+C 8 ; WX 0 ; N d8 ; B -16 -36 178 101 ;
+C 9 ; WX 0 ; N d9 ; B -14 -37 173 106 ;
+C 10 ; WX 0 ; N d10 ; B -12 -38 166 115 ;
+C 11 ; WX 0 ; N d11 ; B -10 -39 160 125 ;
+C 12 ; WX 0 ; N d12 ; B -7 -38 152 134 ;
+C 13 ; WX 0 ; N d13 ; B -5 -39 143 143 ;
+C 14 ; WX 0 ; N d14 ; B -2 -37 134 151 ;
+C 15 ; WX 0 ; N d15 ; B 0 -39 125 160 ;
+C 16 ; WX 0 ; N d16 ; B -7 -40 114 167 ;
+C 17 ; WX 0 ; N d17 ; B -13 -37 104 174 ;
+C 18 ; WX 0 ; N d18 ; B -20 -39 93 180 ;
+C 19 ; WX 0 ; N d19 ; B -27 -37 82 185 ;
+C 20 ; WX 0 ; N d20 ; B -33 -37 71 189 ;
+C 21 ; WX 0 ; N d21 ; B -38 -36 61 193 ;
+C 22 ; WX 0 ; N d22 ; B -44 -34 50 196 ;
+C 23 ; WX 0 ; N d23 ; B -48 -35 40 198 ;
+C 24 ; WX 0 ; N d24 ; B -53 -33 30 200 ;
+C 25 ; WX 0 ; N d25 ; B -58 -33 21 201 ;
+C 26 ; WX 0 ; N d26 ; B -62 -33 23 201 ;
+C 27 ; WX 0 ; N d27 ; B -66 -31 24 202 ;
+C 28 ; WX 0 ; N d28 ; B -69 -30 25 201 ;
+C 29 ; WX 0 ; N d29 ; B -72 -29 26 202 ;
+C 30 ; WX 0 ; N d30 ; B -75 -28 27 202 ;
+C 31 ; WX 0 ; N d31 ; B -77 -27 28 200 ;
+C 32 ; WX 0 ; N d32 ; B -80 -27 29 200 ;
+C 33 ; WX 0 ; N d33 ; B -82 -26 30 198 ;
+C 34 ; WX 0 ; N d34 ; B -85 -25 30 197 ;
+C 35 ; WX 0 ; N d35 ; B -88 -22 32 195 ;
+C 36 ; WX 0 ; N d36 ; B -91 -22 32 192 ;
+C 37 ; WX 0 ; N d37 ; B -93 -21 34 190 ;
+C 38 ; WX 0 ; N d38 ; B -95 -19 34 186 ;
+C 39 ; WX 0 ; N d39 ; B -98 -18 36 182 ;
+C 40 ; WX 0 ; N d40 ; B -101 -16 36 178 ;
+C 41 ; WX 0 ; N d41 ; B -106 -14 37 172 ;
+C 42 ; WX 0 ; N d42 ; B -115 -12 38 166 ;
+C 43 ; WX 0 ; N d43 ; B -125 -10 39 160 ;
+C 44 ; WX 0 ; N d44 ; B -134 -7 38 152 ;
+C 45 ; WX 0 ; N d45 ; B -143 -5 39 143 ;
+C 46 ; WX 0 ; N d46 ; B -151 -2 36 134 ;
+C 47 ; WX 0 ; N d47 ; B -160 0 39 125 ;
+C 48 ; WX 0 ; N d48 ; B -167 -7 40 114 ;
+C 49 ; WX 0 ; N d49 ; B -174 -14 37 104 ;
+C 50 ; WX 0 ; N d50 ; B -180 -20 39 93 ;
+C 51 ; WX 0 ; N d51 ; B -185 -27 37 82 ;
+C 52 ; WX 0 ; N d52 ; B -189 -33 37 71 ;
+C 53 ; WX 0 ; N d53 ; B -193 -38 36 60 ;
+C 54 ; WX 0 ; N d54 ; B -196 -44 34 50 ;
+C 55 ; WX 0 ; N d55 ; B -198 -49 35 40 ;
+C 56 ; WX 0 ; N d56 ; B -199 -53 32 30 ;
+C 57 ; WX 0 ; N d57 ; B -201 -58 33 21 ;
+C 58 ; WX 0 ; N d58 ; B -201 -62 33 23 ;
+C 59 ; WX 0 ; N d59 ; B -202 -66 32 24 ;
+C 60 ; WX 0 ; N d60 ; B -202 -69 30 25 ;
+C 61 ; WX 0 ; N d61 ; B -202 -72 29 26 ;
+C 62 ; WX 0 ; N d62 ; B -201 -75 28 27 ;
+C 63 ; WX 0 ; N d63 ; B -200 -78 28 28 ;
+C 64 ; WX 0 ; N d64 ; B -200 -80 27 29 ;
+C 65 ; WX 0 ; N d65 ; B -198 -82 26 30 ;
+C 66 ; WX 0 ; N d66 ; B -197 -85 25 31 ;
+C 67 ; WX 0 ; N d67 ; B -195 -88 24 32 ;
+C 68 ; WX 0 ; N d68 ; B -192 -91 21 32 ;
+C 69 ; WX 0 ; N d69 ; B -190 -93 22 35 ;
+C 70 ; WX 0 ; N d70 ; B -186 -96 19 34 ;
+C 71 ; WX 0 ; N d71 ; B -181 -98 18 36 ;
+C 72 ; WX 0 ; N d72 ; B -178 -101 16 36 ;
+C 73 ; WX 0 ; N d73 ; B -173 -106 14 37 ;
+C 74 ; WX 0 ; N d74 ; B -165 -115 12 38 ;
+C 75 ; WX 0 ; N d75 ; B -160 -125 10 39 ;
+C 76 ; WX 0 ; N d76 ; B -152 -134 7 38 ;
+C 77 ; WX 0 ; N d77 ; B -143 -143 5 39 ;
+C 78 ; WX 0 ; N d78 ; B -133 -151 2 36 ;
+C 79 ; WX 0 ; N d79 ; B -125 -160 0 39 ;
+C 80 ; WX 0 ; N d80 ; B -114 -167 7 40 ;
+C 81 ; WX 0 ; N d81 ; B -104 -174 14 39 ;
+C 82 ; WX 0 ; N d82 ; B -93 -180 20 39 ;
+C 83 ; WX 0 ; N d83 ; B -82 -185 26 39 ;
+C 84 ; WX 0 ; N d84 ; B -71 -189 33 37 ;
+C 85 ; WX 0 ; N d85 ; B -61 -193 38 36 ;
+C 86 ; WX 0 ; N d86 ; B -50 -196 44 35 ;
+C 87 ; WX 0 ; N d87 ; B -40 -198 48 35 ;
+C 88 ; WX 0 ; N d88 ; B -30 -199 53 35 ;
+C 89 ; WX 0 ; N d89 ; B -21 -201 58 33 ;
+C 90 ; WX 0 ; N d90 ; B -23 -200 62 33 ;
+C 91 ; WX 0 ; N d91 ; B -24 -202 66 31 ;
+C 92 ; WX 0 ; N d92 ; B -25 -201 69 30 ;
+C 93 ; WX 0 ; N d93 ; B -26 -202 72 30 ;
+C 94 ; WX 0 ; N d94 ; B -27 -202 75 28 ;
+C 95 ; WX 0 ; N d95 ; B -28 -200 78 28 ;
+C 96 ; WX 0 ; N d96 ; B -29 -199 80 27 ;
+C 97 ; WX 0 ; N d97 ; B -30 -198 82 26 ;
+C 98 ; WX 0 ; N d98 ; B -30 -197 85 25 ;
+C 99 ; WX 0 ; N d99 ; B -32 -195 88 22 ;
+C 100 ; WX 0 ; N d100 ; B -32 -192 91 22 ;
+C 101 ; WX 0 ; N d101 ; B -34 -190 93 21 ;
+C 102 ; WX 0 ; N d102 ; B -34 -186 96 19 ;
+C 103 ; WX 0 ; N d103 ; B -36 -181 98 18 ;
+C 104 ; WX 0 ; N d104 ; B -36 -178 101 16 ;
+C 105 ; WX 0 ; N d105 ; B -37 -173 106 14 ;
+C 106 ; WX 0 ; N d106 ; B -38 -165 115 12 ;
+C 107 ; WX 0 ; N d107 ; B -39 -160 125 10 ;
+C 108 ; WX 0 ; N d108 ; B -38 -152 134 7 ;
+C 109 ; WX 0 ; N d109 ; B -39 -143 143 5 ;
+C 110 ; WX 0 ; N d110 ; B -37 -133 151 2 ;
+C 111 ; WX 0 ; N d111 ; B -39 -125 160 0 ;
+C 112 ; WX 0 ; N d112 ; B -40 -114 167 7 ;
+C 113 ; WX 0 ; N d113 ; B -39 -104 174 13 ;
+C 114 ; WX 0 ; N d114 ; B -38 -93 180 20 ;
+C 115 ; WX 0 ; N d115 ; B -38 -82 185 27 ;
+C 116 ; WX 0 ; N d116 ; B -37 -71 189 32 ;
+C 117 ; WX 0 ; N d117 ; B -36 -60 193 38 ;
+C 118 ; WX 0 ; N d118 ; B -34 -50 196 44 ;
+C 119 ; WX 0 ; N d119 ; B -35 -40 198 49 ;
+C 120 ; WX 0 ; N d120 ; B -33 -30 200 53 ;
+C 121 ; WX 0 ; N d121 ; B -33 -21 201 58 ;
+C 122 ; WX 0 ; N d122 ; B -33 -23 201 62 ;
+C 123 ; WX 0 ; N d123 ; B -31 -24 202 66 ;
+C 124 ; WX 0 ; N d124 ; B -30 -25 201 69 ;
+C 125 ; WX 0 ; N d125 ; B -29 -26 202 72 ;
+C 126 ; WX 0 ; N d126 ; B -28 -27 202 75 ;
+C 127 ; WX 0 ; N d127 ; B -27 -28 200 77 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyluat11.afm b/macros/generic/diagrams/xypic/afm/xyluat11.afm
new file mode 100644
index 0000000000..a127204362
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyluat11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:49 2013
+FontName XYLUAT-Medium
+FullName XYLUAT
+FamilyName XYLUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -205 -205 205 205
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -24 -26 202 83 ;
+C 1 ; WX 0 ; N d1 ; B -23 -27 201 85 ;
+C 2 ; WX 0 ; N d2 ; B -22 -28 199 88 ;
+C 3 ; WX 0 ; N d3 ; B -21 -29 197 91 ;
+C 4 ; WX 0 ; N d4 ; B -20 -29 194 94 ;
+C 5 ; WX 0 ; N d5 ; B -18 -30 193 96 ;
+C 6 ; WX 0 ; N d6 ; B -18 -32 188 99 ;
+C 7 ; WX 0 ; N d7 ; B -15 -32 184 102 ;
+C 8 ; WX 0 ; N d8 ; B -14 -33 179 104 ;
+C 9 ; WX 0 ; N d9 ; B -13 -34 173 109 ;
+C 10 ; WX 0 ; N d10 ; B -10 -34 168 120 ;
+C 11 ; WX 0 ; N d11 ; B -9 -35 160 129 ;
+C 12 ; WX 0 ; N d12 ; B -6 -34 153 138 ;
+C 13 ; WX 0 ; N d13 ; B -4 -34 145 147 ;
+C 14 ; WX 0 ; N d14 ; B -2 -35 134 155 ;
+C 15 ; WX 0 ; N d15 ; B 0 -36 124 163 ;
+C 16 ; WX 0 ; N d16 ; B -7 -35 114 171 ;
+C 17 ; WX 0 ; N d17 ; B -14 -36 104 178 ;
+C 18 ; WX 0 ; N d18 ; B -21 -34 93 184 ;
+C 19 ; WX 0 ; N d19 ; B -27 -34 81 188 ;
+C 20 ; WX 0 ; N d20 ; B -34 -34 70 193 ;
+C 21 ; WX 0 ; N d21 ; B -39 -32 59 196 ;
+C 22 ; WX 0 ; N d22 ; B -44 -33 49 200 ;
+C 23 ; WX 0 ; N d23 ; B -51 -31 39 202 ;
+C 24 ; WX 0 ; N d24 ; B -55 -29 29 204 ;
+C 25 ; WX 0 ; N d25 ; B -59 -30 19 204 ;
+C 26 ; WX 0 ; N d26 ; B -64 -30 21 204 ;
+C 27 ; WX 0 ; N d27 ; B -68 -27 22 205 ;
+C 28 ; WX 0 ; N d28 ; B -71 -28 23 205 ;
+C 29 ; WX 0 ; N d29 ; B -74 -27 24 204 ;
+C 30 ; WX 0 ; N d30 ; B -77 -26 25 204 ;
+C 31 ; WX 0 ; N d31 ; B -80 -24 25 204 ;
+C 32 ; WX 0 ; N d32 ; B -82 -24 26 202 ;
+C 33 ; WX 0 ; N d33 ; B -85 -23 27 201 ;
+C 34 ; WX 0 ; N d34 ; B -88 -22 28 199 ;
+C 35 ; WX 0 ; N d35 ; B -91 -21 29 197 ;
+C 36 ; WX 0 ; N d36 ; B -94 -20 29 194 ;
+C 37 ; WX 0 ; N d37 ; B -96 -18 30 193 ;
+C 38 ; WX 0 ; N d38 ; B -99 -17 30 188 ;
+C 39 ; WX 0 ; N d39 ; B -102 -15 32 184 ;
+C 40 ; WX 0 ; N d40 ; B -104 -14 33 179 ;
+C 41 ; WX 0 ; N d41 ; B -109 -13 34 173 ;
+C 42 ; WX 0 ; N d42 ; B -119 -10 34 168 ;
+C 43 ; WX 0 ; N d43 ; B -129 -9 35 160 ;
+C 44 ; WX 0 ; N d44 ; B -138 -6 34 152 ;
+C 45 ; WX 0 ; N d45 ; B -148 -4 34 144 ;
+C 46 ; WX 0 ; N d46 ; B -155 -2 35 134 ;
+C 47 ; WX 0 ; N d47 ; B -163 0 36 124 ;
+C 48 ; WX 0 ; N d48 ; B -171 -7 36 114 ;
+C 49 ; WX 0 ; N d49 ; B -178 -14 36 104 ;
+C 50 ; WX 0 ; N d50 ; B -184 -21 34 93 ;
+C 51 ; WX 0 ; N d51 ; B -188 -27 34 81 ;
+C 52 ; WX 0 ; N d52 ; B -193 -34 34 70 ;
+C 53 ; WX 0 ; N d53 ; B -196 -39 32 59 ;
+C 54 ; WX 0 ; N d54 ; B -198 -45 33 49 ;
+C 55 ; WX 0 ; N d55 ; B -202 -51 31 39 ;
+C 56 ; WX 0 ; N d56 ; B -204 -55 31 29 ;
+C 57 ; WX 0 ; N d57 ; B -204 -60 29 19 ;
+C 58 ; WX 0 ; N d58 ; B -204 -64 30 21 ;
+C 59 ; WX 0 ; N d59 ; B -204 -68 28 22 ;
+C 60 ; WX 0 ; N d60 ; B -205 -71 27 23 ;
+C 61 ; WX 0 ; N d61 ; B -204 -74 27 24 ;
+C 62 ; WX 0 ; N d62 ; B -204 -77 27 25 ;
+C 63 ; WX 0 ; N d63 ; B -204 -80 26 26 ;
+C 64 ; WX 0 ; N d64 ; B -202 -82 24 26 ;
+C 65 ; WX 0 ; N d65 ; B -201 -85 23 27 ;
+C 66 ; WX 0 ; N d66 ; B -199 -88 22 28 ;
+C 67 ; WX 0 ; N d67 ; B -197 -91 22 29 ;
+C 68 ; WX 0 ; N d68 ; B -194 -94 19 29 ;
+C 69 ; WX 0 ; N d69 ; B -193 -96 18 30 ;
+C 70 ; WX 0 ; N d70 ; B -188 -99 18 32 ;
+C 71 ; WX 0 ; N d71 ; B -184 -102 16 32 ;
+C 72 ; WX 0 ; N d72 ; B -179 -104 14 33 ;
+C 73 ; WX 0 ; N d73 ; B -173 -109 13 34 ;
+C 74 ; WX 0 ; N d74 ; B -168 -119 10 33 ;
+C 75 ; WX 0 ; N d75 ; B -159 -128 9 35 ;
+C 76 ; WX 0 ; N d76 ; B -152 -138 6 34 ;
+C 77 ; WX 0 ; N d77 ; B -144 -148 4 34 ;
+C 78 ; WX 0 ; N d78 ; B -134 -155 2 35 ;
+C 79 ; WX 0 ; N d79 ; B -124 -163 0 36 ;
+C 80 ; WX 0 ; N d80 ; B -114 -171 7 35 ;
+C 81 ; WX 0 ; N d81 ; B -104 -178 14 36 ;
+C 82 ; WX 0 ; N d82 ; B -93 -184 21 34 ;
+C 83 ; WX 0 ; N d83 ; B -81 -189 27 34 ;
+C 84 ; WX 0 ; N d84 ; B -70 -193 34 34 ;
+C 85 ; WX 0 ; N d85 ; B -59 -196 40 33 ;
+C 86 ; WX 0 ; N d86 ; B -49 -200 45 33 ;
+C 87 ; WX 0 ; N d87 ; B -39 -202 51 31 ;
+C 88 ; WX 0 ; N d88 ; B -29 -204 55 32 ;
+C 89 ; WX 0 ; N d89 ; B -19 -204 60 29 ;
+C 90 ; WX 0 ; N d90 ; B -21 -202 64 30 ;
+C 91 ; WX 0 ; N d91 ; B -22 -205 68 27 ;
+C 92 ; WX 0 ; N d92 ; B -23 -205 71 28 ;
+C 93 ; WX 0 ; N d93 ; B -24 -204 74 27 ;
+C 94 ; WX 0 ; N d94 ; B -25 -204 77 26 ;
+C 95 ; WX 0 ; N d95 ; B -26 -205 80 26 ;
+C 96 ; WX 0 ; N d96 ; B -26 -202 83 24 ;
+C 97 ; WX 0 ; N d97 ; B -27 -201 85 23 ;
+C 98 ; WX 0 ; N d98 ; B -28 -199 88 22 ;
+C 99 ; WX 0 ; N d99 ; B -29 -197 91 21 ;
+C 100 ; WX 0 ; N d100 ; B -29 -194 94 20 ;
+C 101 ; WX 0 ; N d101 ; B -30 -193 96 18 ;
+C 102 ; WX 0 ; N d102 ; B -30 -188 99 17 ;
+C 103 ; WX 0 ; N d103 ; B -32 -184 102 15 ;
+C 104 ; WX 0 ; N d104 ; B -33 -179 104 14 ;
+C 105 ; WX 0 ; N d105 ; B -34 -173 109 12 ;
+C 106 ; WX 0 ; N d106 ; B -34 -168 119 10 ;
+C 107 ; WX 0 ; N d107 ; B -35 -160 128 9 ;
+C 108 ; WX 0 ; N d108 ; B -34 -152 138 6 ;
+C 109 ; WX 0 ; N d109 ; B -35 -144 147 4 ;
+C 110 ; WX 0 ; N d110 ; B -35 -134 155 2 ;
+C 111 ; WX 0 ; N d111 ; B -36 -124 163 0 ;
+C 112 ; WX 0 ; N d112 ; B -34 -114 171 7 ;
+C 113 ; WX 0 ; N d113 ; B -36 -104 178 14 ;
+C 114 ; WX 0 ; N d114 ; B -34 -93 184 21 ;
+C 115 ; WX 0 ; N d115 ; B -34 -81 188 27 ;
+C 116 ; WX 0 ; N d116 ; B -34 -70 193 34 ;
+C 117 ; WX 0 ; N d117 ; B -32 -59 196 40 ;
+C 118 ; WX 0 ; N d118 ; B -33 -49 200 45 ;
+C 119 ; WX 0 ; N d119 ; B -31 -39 202 50 ;
+C 120 ; WX 0 ; N d120 ; B -29 -29 204 55 ;
+C 121 ; WX 0 ; N d121 ; B -30 -19 204 60 ;
+C 122 ; WX 0 ; N d122 ; B -30 -21 204 64 ;
+C 123 ; WX 0 ; N d123 ; B -27 -22 205 68 ;
+C 124 ; WX 0 ; N d124 ; B -28 -23 205 71 ;
+C 125 ; WX 0 ; N d125 ; B -27 -24 204 75 ;
+C 126 ; WX 0 ; N d126 ; B -26 -25 204 77 ;
+C 127 ; WX 0 ; N d127 ; B -22 -25 204 80 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyluat12.afm b/macros/generic/diagrams/xypic/afm/xyluat12.afm
new file mode 100644
index 0000000000..6d75acb44e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyluat12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:54 2013
+FontName XYLUAT-Medium
+FullName XYLUAT
+FamilyName XYLUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -208 -208 208 208
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -22 -24 204 85 ;
+C 1 ; WX 0 ; N d1 ; B -21 -25 203 88 ;
+C 2 ; WX 0 ; N d2 ; B -21 -26 202 90 ;
+C 3 ; WX 0 ; N d3 ; B -19 -26 199 93 ;
+C 4 ; WX 0 ; N d4 ; B -18 -27 197 96 ;
+C 5 ; WX 0 ; N d5 ; B -17 -28 193 99 ;
+C 6 ; WX 0 ; N d6 ; B -16 -29 188 102 ;
+C 7 ; WX 0 ; N d7 ; B -15 -30 183 104 ;
+C 8 ; WX 0 ; N d8 ; B -13 -30 178 107 ;
+C 9 ; WX 0 ; N d9 ; B -11 -30 176 112 ;
+C 10 ; WX 0 ; N d10 ; B -10 -31 169 122 ;
+C 11 ; WX 0 ; N d11 ; B -8 -32 160 131 ;
+C 12 ; WX 0 ; N d12 ; B -6 -32 153 141 ;
+C 13 ; WX 0 ; N d13 ; B -4 -32 144 150 ;
+C 14 ; WX 0 ; N d14 ; B -2 -32 134 158 ;
+C 15 ; WX 0 ; N d15 ; B 0 -33 124 166 ;
+C 16 ; WX 0 ; N d16 ; B -7 -32 115 175 ;
+C 17 ; WX 0 ; N d17 ; B -14 -32 103 180 ;
+C 18 ; WX 0 ; N d18 ; B -21 -31 92 186 ;
+C 19 ; WX 0 ; N d19 ; B -27 -31 81 192 ;
+C 20 ; WX 0 ; N d20 ; B -35 -30 69 195 ;
+C 21 ; WX 0 ; N d21 ; B -41 -31 58 199 ;
+C 22 ; WX 0 ; N d22 ; B -46 -30 48 203 ;
+C 23 ; WX 0 ; N d23 ; B -52 -29 37 204 ;
+C 24 ; WX 0 ; N d24 ; B -57 -27 27 206 ;
+C 25 ; WX 0 ; N d25 ; B -61 -27 18 207 ;
+C 26 ; WX 0 ; N d26 ; B -66 -27 19 208 ;
+C 27 ; WX 0 ; N d27 ; B -69 -26 20 208 ;
+C 28 ; WX 0 ; N d28 ; B -74 -25 21 207 ;
+C 29 ; WX 0 ; N d29 ; B -77 -23 22 206 ;
+C 30 ; WX 0 ; N d30 ; B -80 -23 22 206 ;
+C 31 ; WX 0 ; N d31 ; B -82 -22 23 206 ;
+C 32 ; WX 0 ; N d32 ; B -84 -22 24 204 ;
+C 33 ; WX 0 ; N d33 ; B -88 -21 25 203 ;
+C 34 ; WX 0 ; N d34 ; B -90 -21 26 202 ;
+C 35 ; WX 0 ; N d35 ; B -93 -19 26 199 ;
+C 36 ; WX 0 ; N d36 ; B -96 -18 27 197 ;
+C 37 ; WX 0 ; N d37 ; B -99 -17 28 193 ;
+C 38 ; WX 0 ; N d38 ; B -102 -16 29 190 ;
+C 39 ; WX 0 ; N d39 ; B -104 -15 30 185 ;
+C 40 ; WX 0 ; N d40 ; B -107 -13 30 181 ;
+C 41 ; WX 0 ; N d41 ; B -112 -11 30 175 ;
+C 42 ; WX 0 ; N d42 ; B -122 -10 31 169 ;
+C 43 ; WX 0 ; N d43 ; B -131 -8 32 161 ;
+C 44 ; WX 0 ; N d44 ; B -139 -6 32 152 ;
+C 45 ; WX 0 ; N d45 ; B -149 -4 32 144 ;
+C 46 ; WX 0 ; N d46 ; B -158 -2 32 134 ;
+C 47 ; WX 0 ; N d47 ; B -166 0 33 124 ;
+C 48 ; WX 0 ; N d48 ; B -174 -7 32 114 ;
+C 49 ; WX 0 ; N d49 ; B -180 -14 30 103 ;
+C 50 ; WX 0 ; N d50 ; B -186 -21 31 91 ;
+C 51 ; WX 0 ; N d51 ; B -192 -28 31 80 ;
+C 52 ; WX 0 ; N d52 ; B -195 -35 30 69 ;
+C 53 ; WX 0 ; N d53 ; B -199 -41 31 58 ;
+C 54 ; WX 0 ; N d54 ; B -202 -47 30 48 ;
+C 55 ; WX 0 ; N d55 ; B -204 -51 30 37 ;
+C 56 ; WX 0 ; N d56 ; B -206 -57 27 27 ;
+C 57 ; WX 0 ; N d57 ; B -207 -62 27 18 ;
+C 58 ; WX 0 ; N d58 ; B -208 -66 27 19 ;
+C 59 ; WX 0 ; N d59 ; B -208 -69 26 20 ;
+C 60 ; WX 0 ; N d60 ; B -207 -74 26 21 ;
+C 61 ; WX 0 ; N d61 ; B -206 -77 25 22 ;
+C 62 ; WX 0 ; N d62 ; B -206 -80 25 23 ;
+C 63 ; WX 0 ; N d63 ; B -206 -82 24 24 ;
+C 64 ; WX 0 ; N d64 ; B -204 -85 22 24 ;
+C 65 ; WX 0 ; N d65 ; B -203 -88 21 25 ;
+C 66 ; WX 0 ; N d66 ; B -202 -90 21 26 ;
+C 67 ; WX 0 ; N d67 ; B -199 -93 19 26 ;
+C 68 ; WX 0 ; N d68 ; B -197 -96 18 27 ;
+C 69 ; WX 0 ; N d69 ; B -193 -99 17 28 ;
+C 70 ; WX 0 ; N d70 ; B -188 -102 17 30 ;
+C 71 ; WX 0 ; N d71 ; B -183 -104 15 30 ;
+C 72 ; WX 0 ; N d72 ; B -181 -107 13 30 ;
+C 73 ; WX 0 ; N d73 ; B -173 -112 11 30 ;
+C 74 ; WX 0 ; N d74 ; B -169 -122 10 31 ;
+C 75 ; WX 0 ; N d75 ; B -160 -131 8 32 ;
+C 76 ; WX 0 ; N d76 ; B -152 -139 6 32 ;
+C 77 ; WX 0 ; N d77 ; B -144 -150 4 32 ;
+C 78 ; WX 0 ; N d78 ; B -134 -158 2 32 ;
+C 79 ; WX 0 ; N d79 ; B -124 -166 0 33 ;
+C 80 ; WX 0 ; N d80 ; B -114 -174 7 32 ;
+C 81 ; WX 0 ; N d81 ; B -103 -181 14 30 ;
+C 82 ; WX 0 ; N d82 ; B -92 -186 21 31 ;
+C 83 ; WX 0 ; N d83 ; B -80 -192 28 31 ;
+C 84 ; WX 0 ; N d84 ; B -69 -195 35 30 ;
+C 85 ; WX 0 ; N d85 ; B -58 -199 41 31 ;
+C 86 ; WX 0 ; N d86 ; B -48 -203 47 30 ;
+C 87 ; WX 0 ; N d87 ; B -37 -204 52 30 ;
+C 88 ; WX 0 ; N d88 ; B -27 -206 57 27 ;
+C 89 ; WX 0 ; N d89 ; B -18 -207 62 27 ;
+C 90 ; WX 0 ; N d90 ; B -19 -206 66 28 ;
+C 91 ; WX 0 ; N d91 ; B -20 -208 69 26 ;
+C 92 ; WX 0 ; N d92 ; B -21 -205 74 25 ;
+C 93 ; WX 0 ; N d93 ; B -22 -206 77 23 ;
+C 94 ; WX 0 ; N d94 ; B -22 -206 80 23 ;
+C 95 ; WX 0 ; N d95 ; B -24 -204 82 24 ;
+C 96 ; WX 0 ; N d96 ; B -24 -204 85 22 ;
+C 97 ; WX 0 ; N d97 ; B -25 -203 88 21 ;
+C 98 ; WX 0 ; N d98 ; B -26 -202 90 21 ;
+C 99 ; WX 0 ; N d99 ; B -26 -199 93 19 ;
+C 100 ; WX 0 ; N d100 ; B -27 -197 96 18 ;
+C 101 ; WX 0 ; N d101 ; B -28 -193 99 17 ;
+C 102 ; WX 0 ; N d102 ; B -29 -188 102 16 ;
+C 103 ; WX 0 ; N d103 ; B -30 -183 104 15 ;
+C 104 ; WX 0 ; N d104 ; B -30 -181 107 13 ;
+C 105 ; WX 0 ; N d105 ; B -30 -173 112 11 ;
+C 106 ; WX 0 ; N d106 ; B -31 -169 122 10 ;
+C 107 ; WX 0 ; N d107 ; B -31 -161 131 8 ;
+C 108 ; WX 0 ; N d108 ; B -32 -153 140 6 ;
+C 109 ; WX 0 ; N d109 ; B -32 -144 150 4 ;
+C 110 ; WX 0 ; N d110 ; B -32 -134 158 2 ;
+C 111 ; WX 0 ; N d111 ; B -33 -124 166 0 ;
+C 112 ; WX 0 ; N d112 ; B -32 -114 174 7 ;
+C 113 ; WX 0 ; N d113 ; B -32 -103 180 14 ;
+C 114 ; WX 0 ; N d114 ; B -32 -92 186 21 ;
+C 115 ; WX 0 ; N d115 ; B -31 -81 192 28 ;
+C 116 ; WX 0 ; N d116 ; B -30 -69 195 35 ;
+C 117 ; WX 0 ; N d117 ; B -31 -58 199 41 ;
+C 118 ; WX 0 ; N d118 ; B -30 -48 203 47 ;
+C 119 ; WX 0 ; N d119 ; B -29 -37 204 52 ;
+C 120 ; WX 0 ; N d120 ; B -27 -27 206 57 ;
+C 121 ; WX 0 ; N d121 ; B -27 -18 207 61 ;
+C 122 ; WX 0 ; N d122 ; B -27 -19 208 66 ;
+C 123 ; WX 0 ; N d123 ; B -26 -20 208 70 ;
+C 124 ; WX 0 ; N d124 ; B -25 -21 207 74 ;
+C 125 ; WX 0 ; N d125 ; B -23 -22 206 77 ;
+C 126 ; WX 0 ; N d126 ; B -23 -22 206 80 ;
+C 127 ; WX 0 ; N d127 ; B -22 -23 206 82 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xylubt10.afm b/macros/generic/diagrams/xypic/afm/xylubt10.afm
new file mode 100644
index 0000000000..51fd33c7e1
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xylubt10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:46 2013
+FontName XYLUBT-Medium
+FullName XYLUBT
+FamilyName XYLUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -202 -202 202 202
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -27 -28 75 202 ;
+C 1 ; WX 0 ; N d1 ; B -26 -29 72 202 ;
+C 2 ; WX 0 ; N d2 ; B -25 -30 69 202 ;
+C 3 ; WX 0 ; N d3 ; B -24 -31 66 202 ;
+C 4 ; WX 0 ; N d4 ; B -23 -33 62 201 ;
+C 5 ; WX 0 ; N d5 ; B -21 -33 58 201 ;
+C 6 ; WX 0 ; N d6 ; B -30 -32 53 199 ;
+C 7 ; WX 0 ; N d7 ; B -40 -35 49 198 ;
+C 8 ; WX 0 ; N d8 ; B -50 -34 44 196 ;
+C 9 ; WX 0 ; N d9 ; B -60 -36 38 193 ;
+C 10 ; WX 0 ; N d10 ; B -72 -37 33 190 ;
+C 11 ; WX 0 ; N d11 ; B -82 -37 27 185 ;
+C 12 ; WX 0 ; N d12 ; B -93 -39 20 180 ;
+C 13 ; WX 0 ; N d13 ; B -104 -37 14 174 ;
+C 14 ; WX 0 ; N d14 ; B -114 -40 7 167 ;
+C 15 ; WX 0 ; N d15 ; B -125 -39 0 160 ;
+C 16 ; WX 0 ; N d16 ; B -134 -36 2 151 ;
+C 17 ; WX 0 ; N d17 ; B -143 -39 5 143 ;
+C 18 ; WX 0 ; N d18 ; B -152 -38 7 134 ;
+C 19 ; WX 0 ; N d19 ; B -160 -39 10 125 ;
+C 20 ; WX 0 ; N d20 ; B -166 -38 12 115 ;
+C 21 ; WX 0 ; N d21 ; B -172 -37 14 106 ;
+C 22 ; WX 0 ; N d22 ; B -178 -36 16 101 ;
+C 23 ; WX 0 ; N d23 ; B -182 -36 18 98 ;
+C 24 ; WX 0 ; N d24 ; B -186 -34 19 96 ;
+C 25 ; WX 0 ; N d25 ; B -190 -34 21 93 ;
+C 26 ; WX 0 ; N d26 ; B -192 -32 22 91 ;
+C 27 ; WX 0 ; N d27 ; B -195 -32 22 88 ;
+C 28 ; WX 0 ; N d28 ; B -197 -30 25 85 ;
+C 29 ; WX 0 ; N d29 ; B -198 -30 26 83 ;
+C 30 ; WX 0 ; N d30 ; B -200 -29 27 80 ;
+C 31 ; WX 0 ; N d31 ; B -200 -28 28 78 ;
+C 32 ; WX 0 ; N d32 ; B -202 -27 28 75 ;
+C 33 ; WX 0 ; N d33 ; B -202 -26 29 72 ;
+C 34 ; WX 0 ; N d34 ; B -201 -25 30 69 ;
+C 35 ; WX 0 ; N d35 ; B -202 -24 31 66 ;
+C 36 ; WX 0 ; N d36 ; B -201 -23 33 62 ;
+C 37 ; WX 0 ; N d37 ; B -201 -21 33 58 ;
+C 38 ; WX 0 ; N d38 ; B -199 -30 33 54 ;
+C 39 ; WX 0 ; N d39 ; B -198 -40 35 49 ;
+C 40 ; WX 0 ; N d40 ; B -196 -50 34 44 ;
+C 41 ; WX 0 ; N d41 ; B -193 -60 36 38 ;
+C 42 ; WX 0 ; N d42 ; B -189 -71 37 33 ;
+C 43 ; WX 0 ; N d43 ; B -185 -82 37 27 ;
+C 44 ; WX 0 ; N d44 ; B -180 -93 39 20 ;
+C 45 ; WX 0 ; N d45 ; B -174 -104 39 14 ;
+C 46 ; WX 0 ; N d46 ; B -167 -114 40 7 ;
+C 47 ; WX 0 ; N d47 ; B -160 -125 39 0 ;
+C 48 ; WX 0 ; N d48 ; B -151 -133 39 2 ;
+C 49 ; WX 0 ; N d49 ; B -143 -143 40 5 ;
+C 50 ; WX 0 ; N d50 ; B -134 -152 38 7 ;
+C 51 ; WX 0 ; N d51 ; B -125 -160 39 10 ;
+C 52 ; WX 0 ; N d52 ; B -115 -165 38 12 ;
+C 53 ; WX 0 ; N d53 ; B -106 -173 37 14 ;
+C 54 ; WX 0 ; N d54 ; B -101 -178 36 16 ;
+C 55 ; WX 0 ; N d55 ; B -98 -181 36 18 ;
+C 56 ; WX 0 ; N d56 ; B -96 -186 34 19 ;
+C 57 ; WX 0 ; N d57 ; B -93 -190 34 21 ;
+C 58 ; WX 0 ; N d58 ; B -91 -192 32 22 ;
+C 59 ; WX 0 ; N d59 ; B -88 -195 32 24 ;
+C 60 ; WX 0 ; N d60 ; B -85 -197 31 25 ;
+C 61 ; WX 0 ; N d61 ; B -82 -198 30 26 ;
+C 62 ; WX 0 ; N d62 ; B -80 -200 29 27 ;
+C 63 ; WX 0 ; N d63 ; B -77 -200 28 27 ;
+C 64 ; WX 0 ; N d64 ; B -75 -202 27 28 ;
+C 65 ; WX 0 ; N d65 ; B -72 -202 26 29 ;
+C 66 ; WX 0 ; N d66 ; B -69 -201 25 30 ;
+C 67 ; WX 0 ; N d67 ; B -66 -202 24 31 ;
+C 68 ; WX 0 ; N d68 ; B -62 -201 23 33 ;
+C 69 ; WX 0 ; N d69 ; B -58 -201 21 33 ;
+C 70 ; WX 0 ; N d70 ; B -53 -199 30 33 ;
+C 71 ; WX 0 ; N d71 ; B -48 -198 40 35 ;
+C 72 ; WX 0 ; N d72 ; B -44 -196 50 34 ;
+C 73 ; WX 0 ; N d73 ; B -38 -193 60 36 ;
+C 74 ; WX 0 ; N d74 ; B -33 -189 71 37 ;
+C 75 ; WX 0 ; N d75 ; B -27 -185 82 37 ;
+C 76 ; WX 0 ; N d76 ; B -20 -180 93 39 ;
+C 77 ; WX 0 ; N d77 ; B -14 -174 104 37 ;
+C 78 ; WX 0 ; N d78 ; B -7 -167 114 40 ;
+C 79 ; WX 0 ; N d79 ; B 0 -160 125 39 ;
+C 80 ; WX 0 ; N d80 ; B -2 -151 133 37 ;
+C 81 ; WX 0 ; N d81 ; B -5 -143 143 39 ;
+C 82 ; WX 0 ; N d82 ; B -7 -134 152 39 ;
+C 83 ; WX 0 ; N d83 ; B -10 -125 160 39 ;
+C 84 ; WX 0 ; N d84 ; B -12 -115 165 38 ;
+C 85 ; WX 0 ; N d85 ; B -14 -106 173 37 ;
+C 86 ; WX 0 ; N d86 ; B -16 -101 179 36 ;
+C 87 ; WX 0 ; N d87 ; B -18 -98 181 36 ;
+C 88 ; WX 0 ; N d88 ; B -19 -96 186 34 ;
+C 89 ; WX 0 ; N d89 ; B -21 -93 190 34 ;
+C 90 ; WX 0 ; N d90 ; B -22 -91 192 32 ;
+C 91 ; WX 0 ; N d91 ; B -22 -88 195 32 ;
+C 92 ; WX 0 ; N d92 ; B -25 -85 197 30 ;
+C 93 ; WX 0 ; N d93 ; B -26 -82 198 30 ;
+C 94 ; WX 0 ; N d94 ; B -26 -80 199 29 ;
+C 95 ; WX 0 ; N d95 ; B -27 -77 200 28 ;
+C 96 ; WX 0 ; N d96 ; B -27 -75 202 27 ;
+C 97 ; WX 0 ; N d97 ; B -29 -72 202 26 ;
+C 98 ; WX 0 ; N d98 ; B -30 -69 201 25 ;
+C 99 ; WX 0 ; N d99 ; B -31 -66 202 24 ;
+C 100 ; WX 0 ; N d100 ; B -33 -62 200 23 ;
+C 101 ; WX 0 ; N d101 ; B -33 -58 201 21 ;
+C 102 ; WX 0 ; N d102 ; B -35 -53 199 30 ;
+C 103 ; WX 0 ; N d103 ; B -35 -49 198 40 ;
+C 104 ; WX 0 ; N d104 ; B -35 -44 195 50 ;
+C 105 ; WX 0 ; N d105 ; B -36 -38 194 61 ;
+C 106 ; WX 0 ; N d106 ; B -37 -33 190 72 ;
+C 107 ; WX 0 ; N d107 ; B -38 -27 185 83 ;
+C 108 ; WX 0 ; N d108 ; B -39 -20 180 93 ;
+C 109 ; WX 0 ; N d109 ; B -37 -14 174 104 ;
+C 110 ; WX 0 ; N d110 ; B -40 -7 167 114 ;
+C 111 ; WX 0 ; N d111 ; B -39 0 160 125 ;
+C 112 ; WX 0 ; N d112 ; B -37 -2 151 133 ;
+C 113 ; WX 0 ; N d113 ; B -39 -5 143 143 ;
+C 114 ; WX 0 ; N d114 ; B -38 -7 134 152 ;
+C 115 ; WX 0 ; N d115 ; B -39 -10 125 160 ;
+C 116 ; WX 0 ; N d116 ; B -38 -12 115 165 ;
+C 117 ; WX 0 ; N d117 ; B -37 -14 106 173 ;
+C 118 ; WX 0 ; N d118 ; B -36 -16 101 179 ;
+C 119 ; WX 0 ; N d119 ; B -36 -18 98 181 ;
+C 120 ; WX 0 ; N d120 ; B -34 -19 96 186 ;
+C 121 ; WX 0 ; N d121 ; B -34 -21 93 190 ;
+C 122 ; WX 0 ; N d122 ; B -32 -22 91 192 ;
+C 123 ; WX 0 ; N d123 ; B -32 -22 88 195 ;
+C 124 ; WX 0 ; N d124 ; B -30 -25 85 197 ;
+C 125 ; WX 0 ; N d125 ; B -30 -26 82 198 ;
+C 126 ; WX 0 ; N d126 ; B -29 -27 80 200 ;
+C 127 ; WX 0 ; N d127 ; B -28 -28 78 200 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xylubt11.afm b/macros/generic/diagrams/xypic/afm/xylubt11.afm
new file mode 100644
index 0000000000..aa429d1a92
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xylubt11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:51 2013
+FontName XYLUBT-Medium
+FullName XYLUBT
+FamilyName XYLUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -205 -205 205 205
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -25 -26 77 204 ;
+C 1 ; WX 0 ; N d1 ; B -24 -27 74 204 ;
+C 2 ; WX 0 ; N d2 ; B -23 -28 71 205 ;
+C 3 ; WX 0 ; N d3 ; B -22 -27 68 205 ;
+C 4 ; WX 0 ; N d4 ; B -21 -30 64 204 ;
+C 5 ; WX 0 ; N d5 ; B -19 -29 60 204 ;
+C 6 ; WX 0 ; N d6 ; B -29 -31 55 204 ;
+C 7 ; WX 0 ; N d7 ; B -39 -31 51 202 ;
+C 8 ; WX 0 ; N d8 ; B -49 -33 45 198 ;
+C 9 ; WX 0 ; N d9 ; B -60 -32 40 196 ;
+C 10 ; WX 0 ; N d10 ; B -70 -34 34 194 ;
+C 11 ; WX 0 ; N d11 ; B -81 -34 27 188 ;
+C 12 ; WX 0 ; N d12 ; B -93 -34 21 184 ;
+C 13 ; WX 0 ; N d13 ; B -104 -36 14 178 ;
+C 14 ; WX 0 ; N d14 ; B -114 -36 7 171 ;
+C 15 ; WX 0 ; N d15 ; B -124 -36 0 163 ;
+C 16 ; WX 0 ; N d16 ; B -134 -35 2 155 ;
+C 17 ; WX 0 ; N d17 ; B -144 -35 4 147 ;
+C 18 ; WX 0 ; N d18 ; B -152 -34 6 138 ;
+C 19 ; WX 0 ; N d19 ; B -159 -35 9 128 ;
+C 20 ; WX 0 ; N d20 ; B -168 -34 10 119 ;
+C 21 ; WX 0 ; N d21 ; B -173 -34 13 109 ;
+C 22 ; WX 0 ; N d22 ; B -180 -33 14 104 ;
+C 23 ; WX 0 ; N d23 ; B -184 -32 15 102 ;
+C 24 ; WX 0 ; N d24 ; B -188 -32 18 99 ;
+C 25 ; WX 0 ; N d25 ; B -193 -30 18 96 ;
+C 26 ; WX 0 ; N d26 ; B -194 -29 20 94 ;
+C 27 ; WX 0 ; N d27 ; B -197 -29 21 91 ;
+C 28 ; WX 0 ; N d28 ; B -199 -28 22 88 ;
+C 29 ; WX 0 ; N d29 ; B -201 -27 23 85 ;
+C 30 ; WX 0 ; N d30 ; B -202 -26 24 83 ;
+C 31 ; WX 0 ; N d31 ; B -204 -26 26 80 ;
+C 32 ; WX 0 ; N d32 ; B -204 -25 26 77 ;
+C 33 ; WX 0 ; N d33 ; B -204 -24 27 75 ;
+C 34 ; WX 0 ; N d34 ; B -205 -23 28 71 ;
+C 35 ; WX 0 ; N d35 ; B -205 -22 27 68 ;
+C 36 ; WX 0 ; N d36 ; B -204 -21 30 64 ;
+C 37 ; WX 0 ; N d37 ; B -204 -19 30 60 ;
+C 38 ; WX 0 ; N d38 ; B -204 -29 29 55 ;
+C 39 ; WX 0 ; N d39 ; B -202 -39 31 51 ;
+C 40 ; WX 0 ; N d40 ; B -200 -49 33 45 ;
+C 41 ; WX 0 ; N d41 ; B -196 -59 32 40 ;
+C 42 ; WX 0 ; N d42 ; B -193 -70 34 34 ;
+C 43 ; WX 0 ; N d43 ; B -188 -81 34 27 ;
+C 44 ; WX 0 ; N d44 ; B -184 -93 34 21 ;
+C 45 ; WX 0 ; N d45 ; B -178 -104 36 14 ;
+C 46 ; WX 0 ; N d46 ; B -171 -114 35 7 ;
+C 47 ; WX 0 ; N d47 ; B -163 -124 36 0 ;
+C 48 ; WX 0 ; N d48 ; B -155 -134 35 2 ;
+C 49 ; WX 0 ; N d49 ; B -147 -144 35 4 ;
+C 50 ; WX 0 ; N d50 ; B -138 -152 34 7 ;
+C 51 ; WX 0 ; N d51 ; B -128 -159 35 9 ;
+C 52 ; WX 0 ; N d52 ; B -119 -168 33 10 ;
+C 53 ; WX 0 ; N d53 ; B -109 -173 34 13 ;
+C 54 ; WX 0 ; N d54 ; B -104 -179 33 14 ;
+C 55 ; WX 0 ; N d55 ; B -102 -184 32 16 ;
+C 56 ; WX 0 ; N d56 ; B -99 -188 32 18 ;
+C 57 ; WX 0 ; N d57 ; B -96 -193 30 19 ;
+C 58 ; WX 0 ; N d58 ; B -94 -194 29 20 ;
+C 59 ; WX 0 ; N d59 ; B -90 -197 28 21 ;
+C 60 ; WX 0 ; N d60 ; B -88 -199 28 23 ;
+C 61 ; WX 0 ; N d61 ; B -85 -201 27 23 ;
+C 62 ; WX 0 ; N d62 ; B -82 -202 26 24 ;
+C 63 ; WX 0 ; N d63 ; B -80 -204 25 24 ;
+C 64 ; WX 0 ; N d64 ; B -77 -204 25 26 ;
+C 65 ; WX 0 ; N d65 ; B -74 -204 24 27 ;
+C 66 ; WX 0 ; N d66 ; B -71 -205 23 28 ;
+C 67 ; WX 0 ; N d67 ; B -68 -205 22 29 ;
+C 68 ; WX 0 ; N d68 ; B -64 -204 21 30 ;
+C 69 ; WX 0 ; N d69 ; B -59 -204 19 30 ;
+C 70 ; WX 0 ; N d70 ; B -55 -204 29 29 ;
+C 71 ; WX 0 ; N d71 ; B -51 -202 39 31 ;
+C 72 ; WX 0 ; N d72 ; B -44 -200 49 33 ;
+C 73 ; WX 0 ; N d73 ; B -39 -196 59 32 ;
+C 74 ; WX 0 ; N d74 ; B -33 -193 70 33 ;
+C 75 ; WX 0 ; N d75 ; B -27 -188 81 34 ;
+C 76 ; WX 0 ; N d76 ; B -21 -184 92 35 ;
+C 77 ; WX 0 ; N d77 ; B -14 -178 104 36 ;
+C 78 ; WX 0 ; N d78 ; B -7 -171 114 36 ;
+C 79 ; WX 0 ; N d79 ; B 0 -163 124 36 ;
+C 80 ; WX 0 ; N d80 ; B -2 -155 134 35 ;
+C 81 ; WX 0 ; N d81 ; B -4 -147 144 35 ;
+C 82 ; WX 0 ; N d82 ; B -6 -138 152 34 ;
+C 83 ; WX 0 ; N d83 ; B -9 -128 160 35 ;
+C 84 ; WX 0 ; N d84 ; B -10 -119 168 34 ;
+C 85 ; WX 0 ; N d85 ; B -12 -109 173 33 ;
+C 86 ; WX 0 ; N d86 ; B -14 -104 179 33 ;
+C 87 ; WX 0 ; N d87 ; B -15 -102 184 32 ;
+C 88 ; WX 0 ; N d88 ; B -17 -99 188 30 ;
+C 89 ; WX 0 ; N d89 ; B -18 -96 193 30 ;
+C 90 ; WX 0 ; N d90 ; B -20 -94 194 29 ;
+C 91 ; WX 0 ; N d91 ; B -21 -91 197 29 ;
+C 92 ; WX 0 ; N d92 ; B -22 -88 199 28 ;
+C 93 ; WX 0 ; N d93 ; B -23 -85 201 27 ;
+C 94 ; WX 0 ; N d94 ; B -24 -82 202 26 ;
+C 95 ; WX 0 ; N d95 ; B -22 -80 204 25 ;
+C 96 ; WX 0 ; N d96 ; B -26 -77 204 25 ;
+C 97 ; WX 0 ; N d97 ; B -27 -74 204 24 ;
+C 98 ; WX 0 ; N d98 ; B -28 -71 205 23 ;
+C 99 ; WX 0 ; N d99 ; B -27 -68 205 22 ;
+C 100 ; WX 0 ; N d100 ; B -30 -64 202 21 ;
+C 101 ; WX 0 ; N d101 ; B -29 -60 204 19 ;
+C 102 ; WX 0 ; N d102 ; B -29 -55 204 29 ;
+C 103 ; WX 0 ; N d103 ; B -31 -51 203 39 ;
+C 104 ; WX 0 ; N d104 ; B -32 -45 199 49 ;
+C 105 ; WX 0 ; N d105 ; B -33 -39 196 60 ;
+C 106 ; WX 0 ; N d106 ; B -34 -34 193 70 ;
+C 107 ; WX 0 ; N d107 ; B -34 -27 188 81 ;
+C 108 ; WX 0 ; N d108 ; B -33 -21 185 94 ;
+C 109 ; WX 0 ; N d109 ; B -36 -14 178 104 ;
+C 110 ; WX 0 ; N d110 ; B -35 -7 171 114 ;
+C 111 ; WX 0 ; N d111 ; B -36 0 163 124 ;
+C 112 ; WX 0 ; N d112 ; B -35 -2 155 134 ;
+C 113 ; WX 0 ; N d113 ; B -34 -4 147 144 ;
+C 114 ; WX 0 ; N d114 ; B -34 -6 138 153 ;
+C 115 ; WX 0 ; N d115 ; B -35 -9 128 159 ;
+C 116 ; WX 0 ; N d116 ; B -33 -10 119 168 ;
+C 117 ; WX 0 ; N d117 ; B -34 -12 109 173 ;
+C 118 ; WX 0 ; N d118 ; B -33 -14 104 179 ;
+C 119 ; WX 0 ; N d119 ; B -32 -15 102 184 ;
+C 120 ; WX 0 ; N d120 ; B -30 -17 99 188 ;
+C 121 ; WX 0 ; N d121 ; B -30 -18 96 192 ;
+C 122 ; WX 0 ; N d122 ; B -29 -20 94 194 ;
+C 123 ; WX 0 ; N d123 ; B -29 -22 91 197 ;
+C 124 ; WX 0 ; N d124 ; B -28 -22 88 199 ;
+C 125 ; WX 0 ; N d125 ; B -27 -23 85 201 ;
+C 126 ; WX 0 ; N d126 ; B -26 -24 83 202 ;
+C 127 ; WX 0 ; N d127 ; B -26 -26 80 205 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xylubt12.afm b/macros/generic/diagrams/xypic/afm/xylubt12.afm
new file mode 100644
index 0000000000..e585d8569e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xylubt12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:57 2013
+FontName XYLUBT-Medium
+FullName XYLUBT
+FamilyName XYLUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -208 -209 208 209
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -22 -24 80 206 ;
+C 1 ; WX 0 ; N d1 ; B -22 -25 77 207 ;
+C 2 ; WX 0 ; N d2 ; B -21 -25 74 208 ;
+C 3 ; WX 0 ; N d3 ; B -20 -26 69 209 ;
+C 4 ; WX 0 ; N d4 ; B -19 -27 66 208 ;
+C 5 ; WX 0 ; N d5 ; B -18 -27 62 207 ;
+C 6 ; WX 0 ; N d6 ; B -27 -27 57 206 ;
+C 7 ; WX 0 ; N d7 ; B -38 -29 51 204 ;
+C 8 ; WX 0 ; N d8 ; B -48 -30 47 203 ;
+C 9 ; WX 0 ; N d9 ; B -58 -31 41 199 ;
+C 10 ; WX 0 ; N d10 ; B -69 -30 35 195 ;
+C 11 ; WX 0 ; N d11 ; B -80 -31 28 192 ;
+C 12 ; WX 0 ; N d12 ; B -91 -31 21 186 ;
+C 13 ; WX 0 ; N d13 ; B -103 -30 14 180 ;
+C 14 ; WX 0 ; N d14 ; B -114 -32 7 174 ;
+C 15 ; WX 0 ; N d15 ; B -124 -33 0 166 ;
+C 16 ; WX 0 ; N d16 ; B -134 -32 2 158 ;
+C 17 ; WX 0 ; N d17 ; B -144 -32 4 149 ;
+C 18 ; WX 0 ; N d18 ; B -152 -32 6 139 ;
+C 19 ; WX 0 ; N d19 ; B -161 -32 8 131 ;
+C 20 ; WX 0 ; N d20 ; B -169 -31 10 122 ;
+C 21 ; WX 0 ; N d21 ; B -176 -30 11 112 ;
+C 22 ; WX 0 ; N d22 ; B -181 -30 13 107 ;
+C 23 ; WX 0 ; N d23 ; B -185 -30 15 104 ;
+C 24 ; WX 0 ; N d24 ; B -190 -29 16 102 ;
+C 25 ; WX 0 ; N d25 ; B -193 -28 17 99 ;
+C 26 ; WX 0 ; N d26 ; B -197 -27 18 96 ;
+C 27 ; WX 0 ; N d27 ; B -199 -26 19 93 ;
+C 28 ; WX 0 ; N d28 ; B -201 -25 20 90 ;
+C 29 ; WX 0 ; N d29 ; B -203 -25 21 88 ;
+C 30 ; WX 0 ; N d30 ; B -204 -24 22 85 ;
+C 31 ; WX 0 ; N d31 ; B -204 -24 24 82 ;
+C 32 ; WX 0 ; N d32 ; B -206 -23 24 80 ;
+C 33 ; WX 0 ; N d33 ; B -207 -22 25 77 ;
+C 34 ; WX 0 ; N d34 ; B -207 -21 25 74 ;
+C 35 ; WX 0 ; N d35 ; B -208 -20 26 70 ;
+C 36 ; WX 0 ; N d36 ; B -208 -19 27 66 ;
+C 37 ; WX 0 ; N d37 ; B -207 -18 28 62 ;
+C 38 ; WX 0 ; N d38 ; B -206 -27 27 57 ;
+C 39 ; WX 0 ; N d39 ; B -204 -37 30 52 ;
+C 40 ; WX 0 ; N d40 ; B -203 -48 30 47 ;
+C 41 ; WX 0 ; N d41 ; B -199 -58 31 41 ;
+C 42 ; WX 0 ; N d42 ; B -195 -69 30 35 ;
+C 43 ; WX 0 ; N d43 ; B -192 -81 31 28 ;
+C 44 ; WX 0 ; N d44 ; B -186 -92 31 21 ;
+C 45 ; WX 0 ; N d45 ; B -180 -103 32 14 ;
+C 46 ; WX 0 ; N d46 ; B -174 -114 32 7 ;
+C 47 ; WX 0 ; N d47 ; B -166 -124 33 0 ;
+C 48 ; WX 0 ; N d48 ; B -158 -134 32 2 ;
+C 49 ; WX 0 ; N d49 ; B -150 -144 32 4 ;
+C 50 ; WX 0 ; N d50 ; B -140 -153 32 6 ;
+C 51 ; WX 0 ; N d51 ; B -131 -160 32 8 ;
+C 52 ; WX 0 ; N d52 ; B -122 -169 31 10 ;
+C 53 ; WX 0 ; N d53 ; B -112 -175 30 11 ;
+C 54 ; WX 0 ; N d54 ; B -107 -181 30 13 ;
+C 55 ; WX 0 ; N d55 ; B -104 -183 30 15 ;
+C 56 ; WX 0 ; N d56 ; B -102 -190 29 16 ;
+C 57 ; WX 0 ; N d57 ; B -98 -193 28 17 ;
+C 58 ; WX 0 ; N d58 ; B -96 -197 27 18 ;
+C 59 ; WX 0 ; N d59 ; B -93 -199 26 19 ;
+C 60 ; WX 0 ; N d60 ; B -90 -202 26 21 ;
+C 61 ; WX 0 ; N d61 ; B -88 -203 25 21 ;
+C 62 ; WX 0 ; N d62 ; B -84 -204 24 22 ;
+C 63 ; WX 0 ; N d63 ; B -82 -206 23 22 ;
+C 64 ; WX 0 ; N d64 ; B -79 -206 23 24 ;
+C 65 ; WX 0 ; N d65 ; B -77 -207 22 25 ;
+C 66 ; WX 0 ; N d66 ; B -74 -207 21 25 ;
+C 67 ; WX 0 ; N d67 ; B -69 -209 20 26 ;
+C 68 ; WX 0 ; N d68 ; B -66 -208 19 27 ;
+C 69 ; WX 0 ; N d69 ; B -61 -207 18 28 ;
+C 70 ; WX 0 ; N d70 ; B -56 -206 27 27 ;
+C 71 ; WX 0 ; N d71 ; B -52 -204 37 29 ;
+C 72 ; WX 0 ; N d72 ; B -47 -202 48 30 ;
+C 73 ; WX 0 ; N d73 ; B -40 -199 58 31 ;
+C 74 ; WX 0 ; N d74 ; B -35 -195 69 30 ;
+C 75 ; WX 0 ; N d75 ; B -28 -192 80 31 ;
+C 76 ; WX 0 ; N d76 ; B -21 -186 92 32 ;
+C 77 ; WX 0 ; N d77 ; B -14 -181 103 32 ;
+C 78 ; WX 0 ; N d78 ; B -7 -174 114 32 ;
+C 79 ; WX 0 ; N d79 ; B 0 -166 124 33 ;
+C 80 ; WX 0 ; N d80 ; B -2 -158 134 32 ;
+C 81 ; WX 0 ; N d81 ; B -4 -150 144 32 ;
+C 82 ; WX 0 ; N d82 ; B -6 -140 153 32 ;
+C 83 ; WX 0 ; N d83 ; B -9 -131 160 31 ;
+C 84 ; WX 0 ; N d84 ; B -9 -122 169 31 ;
+C 85 ; WX 0 ; N d85 ; B -11 -112 173 30 ;
+C 86 ; WX 0 ; N d86 ; B -13 -107 181 30 ;
+C 87 ; WX 0 ; N d87 ; B -15 -104 183 30 ;
+C 88 ; WX 0 ; N d88 ; B -16 -102 188 29 ;
+C 89 ; WX 0 ; N d89 ; B -17 -99 193 28 ;
+C 90 ; WX 0 ; N d90 ; B -18 -96 197 27 ;
+C 91 ; WX 0 ; N d91 ; B -19 -93 199 26 ;
+C 92 ; WX 0 ; N d92 ; B -21 -90 202 26 ;
+C 93 ; WX 0 ; N d93 ; B -21 -88 203 25 ;
+C 94 ; WX 0 ; N d94 ; B -22 -85 204 24 ;
+C 95 ; WX 0 ; N d95 ; B -22 -82 206 23 ;
+C 96 ; WX 0 ; N d96 ; B -23 -80 206 22 ;
+C 97 ; WX 0 ; N d97 ; B -23 -77 206 22 ;
+C 98 ; WX 0 ; N d98 ; B -25 -74 205 21 ;
+C 99 ; WX 0 ; N d99 ; B -26 -69 208 20 ;
+C 100 ; WX 0 ; N d100 ; B -27 -66 206 19 ;
+C 101 ; WX 0 ; N d101 ; B -27 -62 207 18 ;
+C 102 ; WX 0 ; N d102 ; B -28 -57 206 27 ;
+C 103 ; WX 0 ; N d103 ; B -29 -51 204 37 ;
+C 104 ; WX 0 ; N d104 ; B -30 -47 203 48 ;
+C 105 ; WX 0 ; N d105 ; B -31 -41 199 58 ;
+C 106 ; WX 0 ; N d106 ; B -30 -35 195 69 ;
+C 107 ; WX 0 ; N d107 ; B -31 -28 192 81 ;
+C 108 ; WX 0 ; N d108 ; B -31 -21 186 92 ;
+C 109 ; WX 0 ; N d109 ; B -30 -14 181 103 ;
+C 110 ; WX 0 ; N d110 ; B -32 -7 174 114 ;
+C 111 ; WX 0 ; N d111 ; B -33 0 166 124 ;
+C 112 ; WX 0 ; N d112 ; B -32 -2 158 134 ;
+C 113 ; WX 0 ; N d113 ; B -32 -4 149 144 ;
+C 114 ; WX 0 ; N d114 ; B -32 -6 141 153 ;
+C 115 ; WX 0 ; N d115 ; B -32 -8 131 160 ;
+C 116 ; WX 0 ; N d116 ; B -31 -10 122 169 ;
+C 117 ; WX 0 ; N d117 ; B -30 -11 112 173 ;
+C 118 ; WX 0 ; N d118 ; B -30 -13 107 181 ;
+C 119 ; WX 0 ; N d119 ; B -30 -15 104 183 ;
+C 120 ; WX 0 ; N d120 ; B -29 -16 102 188 ;
+C 121 ; WX 0 ; N d121 ; B -28 -17 99 193 ;
+C 122 ; WX 0 ; N d122 ; B -27 -18 96 197 ;
+C 123 ; WX 0 ; N d123 ; B -26 -19 93 199 ;
+C 124 ; WX 0 ; N d124 ; B -25 -20 90 202 ;
+C 125 ; WX 0 ; N d125 ; B -25 -21 88 204 ;
+C 126 ; WX 0 ; N d126 ; B -24 -22 85 204 ;
+C 127 ; WX 0 ; N d127 ; B -24 -24 82 206 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/doc/barrdoc.pdf b/macros/generic/diagrams/xypic/doc/barrdoc.pdf
new file mode 100644
index 0000000000..00510a310f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/barrdoc.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xyguide.pdf b/macros/generic/diagrams/xypic/doc/xyguide.pdf
new file mode 100644
index 0000000000..7159646559
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xyguide.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xypdf.pdf b/macros/generic/diagrams/xypic/doc/xypdf.pdf
new file mode 100644
index 0000000000..695036a11a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xypdf.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xyrefer.pdf b/macros/generic/diagrams/xypic/doc/xyrefer.pdf
new file mode 100644
index 0000000000..e21cf0fb13
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xyrefer.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xysource.pdf b/macros/generic/diagrams/xypic/doc/xysource.pdf
new file mode 100644
index 0000000000..e95926b34b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xysource.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/enc/xycirc.enc b/macros/generic/diagrams/xypic/enc/xycirc.enc
new file mode 100644
index 0000000000..0ed836bfe4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/enc/xycirc.enc
@@ -0,0 +1,281 @@
+% $Id: xycirc.enc,v 3.4 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCIRC: PDF character encoding of `Xy-pic Circle Segment' font.
+% Copyright (c) 1998 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+/_XYCIRC_Encoding [
+/c0
+/c1
+/c2
+/c3
+/c4
+/c5
+/c6
+/c7
+/c8
+/c9
+/c10
+/c11
+/c12
+/c13
+/c14
+/c15
+/c16
+/c17
+/c18
+/c19
+/c20
+/c21
+/c22
+/c23
+/c24
+/c25
+/c26
+/c27
+/c28
+/c29
+/c30
+/c31
+/c32
+/c33
+/c34
+/c35
+/c36
+/c37
+/c38
+/c39
+/c40
+/c41
+/c42
+/c43
+/c44
+/c45
+/c46
+/c47
+/c48
+/c49
+/c50
+/c51
+/c52
+/c53
+/c54
+/c55
+/c56
+/c57
+/c58
+/c59
+/c60
+/c61
+/c62
+/c63
+/c64
+/c65
+/c66
+/c67
+/c68
+/c69
+/c70
+/c71
+/c72
+/c73
+/c74
+/c75
+/c76
+/c77
+/c78
+/c79
+/c80
+/c81
+/c82
+/c83
+/c84
+/c85
+/c86
+/c87
+/c88
+/c89
+/c90
+/c91
+/c92
+/c93
+/c94
+/c95
+/c96
+/c97
+/c98
+/c99
+/c100
+/c101
+/c102
+/c103
+/c104
+/c105
+/c106
+/c107
+/c108
+/c109
+/c110
+/c111
+/c112
+/c113
+/c114
+/c115
+/c116
+/c117
+/c118
+/c119
+/c120
+/c121
+/c122
+/c123
+/c124
+/c125
+/c126
+/c127
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/macros/generic/diagrams/xypic/enc/xyd.enc b/macros/generic/diagrams/xypic/enc/xyd.enc
new file mode 100644
index 0000000000..e98ea67ded
--- /dev/null
+++ b/macros/generic/diagrams/xypic/enc/xyd.enc
@@ -0,0 +1,281 @@
+% $Id: xyd.enc,v 3.4 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD: PDF character encoding of `Xy-pic Directional' fonts.
+% Copyright (c) 1998-2010 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+/_XYD_Encoding [
+/d0
+/d1
+/d2
+/d3
+/d4
+/d5
+/d6
+/d7
+/d8
+/d9
+/d10
+/d11
+/d12
+/d13
+/d14
+/d15
+/d16
+/d17
+/d18
+/d19
+/d20
+/d21
+/d22
+/d23
+/d24
+/d25
+/d26
+/d27
+/d28
+/d29
+/d30
+/d31
+/d32
+/d33
+/d34
+/d35
+/d36
+/d37
+/d38
+/d39
+/d40
+/d41
+/d42
+/d43
+/d44
+/d45
+/d46
+/d47
+/d48
+/d49
+/d50
+/d51
+/d52
+/d53
+/d54
+/d55
+/d56
+/d57
+/d58
+/d59
+/d60
+/d61
+/d62
+/d63
+/d64
+/d65
+/d66
+/d67
+/d68
+/d69
+/d70
+/d71
+/d72
+/d73
+/d74
+/d75
+/d76
+/d77
+/d78
+/d79
+/d80
+/d81
+/d82
+/d83
+/d84
+/d85
+/d86
+/d87
+/d88
+/d89
+/d90
+/d91
+/d92
+/d93
+/d94
+/d95
+/d96
+/d97
+/d98
+/d99
+/d100
+/d101
+/d102
+/d103
+/d104
+/d105
+/d106
+/d107
+/d108
+/d109
+/d110
+/d111
+/d112
+/d113
+/d114
+/d115
+/d116
+/d117
+/d118
+/d119
+/d120
+/d121
+/d122
+/d123
+/d124
+/d125
+/d126
+/d127
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/macros/generic/diagrams/xypic/enc/xyd2.enc b/macros/generic/diagrams/xypic/enc/xyd2.enc
new file mode 100644
index 0000000000..cf3e42c9d3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/enc/xyd2.enc
@@ -0,0 +1,281 @@
+% $Id: xyd2.enc,v 3.4 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD2: PDF character encoding of `Xy-pic Semi-Directional' fonts.
+% Copyright (c) 1998-2010 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+/_XYD2_Encoding [
+/a0
+/a1
+/a2
+/a3
+/a4
+/a5
+/a6
+/a7
+/a8
+/a9
+/a10
+/a11
+/a12
+/a13
+/a14
+/a15
+/a16
+/a17
+/a18
+/a19
+/a20
+/a21
+/a22
+/a23
+/a24
+/a25
+/a26
+/a27
+/a28
+/a29
+/a30
+/a31
+/a32
+/a33
+/a34
+/a35
+/a36
+/a37
+/a38
+/a39
+/a40
+/a41
+/a42
+/a43
+/a44
+/a45
+/a46
+/a47
+/a48
+/a49
+/a50
+/a51
+/a52
+/a53
+/a54
+/a55
+/a56
+/a57
+/a58
+/a59
+/a60
+/a61
+/a62
+/a63
+/a64
+/a65
+/a66
+/a67
+/a68
+/a69
+/a70
+/a71
+/a72
+/a73
+/a74
+/a75
+/a76
+/a77
+/a78
+/a79
+/a80
+/a81
+/a82
+/a83
+/a84
+/a85
+/a86
+/a87
+/a88
+/a89
+/a90
+/a91
+/a92
+/a93
+/a94
+/a95
+/a96
+/a97
+/a98
+/a99
+/a100
+/a101
+/a102
+/a103
+/a104
+/a105
+/a106
+/a107
+/a108
+/a109
+/a110
+/a111
+/a112
+/a113
+/a114
+/a115
+/a116
+/a117
+/a118
+/a119
+/a120
+/a121
+/a122
+/a123
+/a124
+/a125
+/a126
+/a127
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/macros/generic/diagrams/xypic/map/xypic.map b/macros/generic/diagrams/xypic/map/xypic.map
new file mode 100644
index 0000000000..4fd68e5557
--- /dev/null
+++ b/macros/generic/diagrams/xypic/map/xypic.map
@@ -0,0 +1,64 @@
+%% $Id: xypic.map,v 3.13 2010/06/19 01:56:51 krisrose Exp $
+%%
+%% Xy-pic PostScript type 1 font map for DVIPS.
+%% Copyright (c) 1995-2010 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2010 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+
+% USAGE:
+% Put this line in your DVIPS (and/or other PS driver) header
+% file directory (uncommented, starting in column 1):
+%
+% p+ xypic.map
+
+xydash10 XYDASH-Medium <xydash10.pfb
+xyatip10 XYATIP-Medium <xyatip10.pfb
+xybtip10 XYBTIP-Medium <xybtip10.pfb
+xybsql10 XYBSQL-Medium <xybsql10.pfb
+xycirc10 XYCIRC-Medium <xycirc10.pfb
+
+xycmat10 XYCMAT-Medium <xycmat10.pfb
+xycmbt10 XYCMBT-Medium <xycmbt10.pfb
+xycmat11 XYCMAT-Medium <xycmat11.pfb
+xycmbt11 XYCMBT-Medium <xycmbt11.pfb
+xycmat12 XYCMAT-Medium <xycmat12.pfb
+xycmbt12 XYCMBT-Medium <xycmbt12.pfb
+
+xyeuat10 XYEUAT-Medium <xyeuat10.pfb
+xyeubt10 XYEUBT-Medium <xyeubt10.pfb
+xyeuat11 XYEUAT-Medium <xyeuat11.pfb
+xyeubt11 XYEUBT-Medium <xyeubt11.pfb
+xyeuat12 XYEUAT-Medium <xyeuat12.pfb
+xyeubt12 XYEUBT-Medium <xyeubt12.pfb
+
+% Generated from Jeremy Gibbon's fonts.
+xyluat10 XYLUAT-Medium <xyluat10.pfb
+xylubt10 XYLUBT-Medium <xylubt10.pfb
+xyluat11 XYLUAT-Medium <xyluat11.pfb
+xylubt11 XYLUBT-Medium <xylubt11.pfb
+xyluat12 XYLUAT-Medium <xyluat12.pfb
+xylubt12 XYLUBT-Medium <xylubt12.pfb
+
+% Obsolete (v2.6) fonts not included by default (and not available for PDF).
+%xyline10 XYLINE-Medium <xyline10.pfb
+%xyqc10 XYQC-Medium <xyqc10.pfb
+%xymisc10 XYMISC-Medium <xymisc10.pfb
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyatip.mf b/macros/generic/diagrams/xypic/mfinputs/xyatip.mf
new file mode 100644
index 0000000000..d3c5d117bd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyatip.mf
@@ -0,0 +1,71 @@
+% $Id: xyatip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Generate upper arrow tips for Xy-pic.
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Arrow tips *pointing* in all directions. With zero bounding box
+% placed at the tip; note most of the ink goes on the opposite side of where
+% the tip points.
+%
+% Generates the half of the tip that is upper when pointing right.
+% _________________________________________________________________________
+%
+pickup pencircle scaled segw; char_pen := savepen;
+%
+% chartowards makes char cc a tip pointing towards (dx,dy)...
+%
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,1/2 segx) rotated a; % tail ends
+ z3 = curvature [z1,z2]; % tail directions
+ pickup char_pen; draw z2..{-z3}z0;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% GENERATE...
+%
+input xyd
+
+bye.
+%
+% $Log: xyatip.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:05:28 krisrose
+% New for this maintenance release.
+%
+% Based on xyatip10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyatip10.mf b/macros/generic/diagrams/xypic/mfinputs/xyatip10.mf
new file mode 100644
index 0000000000..22b5ca9ca2
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyatip10.mf
@@ -0,0 +1,59 @@
+% $Id: xyatip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYATIP10: upper arrow tips for Xy-pic at 10 point "technical style".
+% Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restrictions. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYATIP"; font_size 10pt#;
+mode_setup;
+
+input xytech
+input xyatip
+
+% $Log: xyatip10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd.mf.
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.1 1991/11/27 06:40:24 kris
+% Initial: \beta-test on DIKU.
+%
+% Based on obsolete xytip10.mf v.1.4.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyatri.mf b/macros/generic/diagrams/xypic/mfinputs/xyatri.mf
new file mode 100644
index 0000000000..2bc3a4031c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyatri.mf
@@ -0,0 +1,58 @@
+% $Id: xyatri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyatri, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,1/2 segx) rotated a; % tail ends
+ z3 = indent [z1,z0]; % back of tip
+ fill z2--z0--z3--cycle;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+input xyd
+
+ bye.
+
+% $Log: xyatri.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xyatip (triangular rather than curvilinear barbs)
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybsql10.mf b/macros/generic/diagrams/xypic/mfinputs/xybsql10.mf
new file mode 100644
index 0000000000..dfa7c9cbf9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybsql10.mf
@@ -0,0 +1,95 @@
+% $Id: xybsql10.mf,v 3.10 2011/08/28 22:19:06 krisrose Exp $
+%
+% XYBSQL10: lower squiggles/quarter circles for Xy-pic at 10 point.
+% Copyright (c) 1992-2011 Kristoffer H. Rose <krisrose@tug.org>
+% 2011 Daniel Müllner <http://math.stanford.edu/~muellner>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Squiggles are quarter circles with secant in all directions.
+% Each has zero bounding box around the start point, i.e., from which the
+% quarter circle `turns letf' ... this can be illustrated as follows:
+%
+% Code: [-1] 15 31 47 63 79 95 111 127
+% _
+% | ) | /\
+% _o o o o o- o o o _o
+% | ( |_ \/ |
+% _________________________________________________________________________
+%
+font_identifier "XYBSQL"; font_size 10pt#;
+mode_setup;
+
+% METANESS...
+%
+segl# = sqrt 2 * 1/4 designsize; define_pixels(segl); % segment length
+segx# = (sqrt 2 - 1)*segl#; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+radius# = 1/4 designsize; define_pixels(radius);
+%
+% chartowards makes char cc with quarter circle that is secant to line
+% from (0,0) to (dx,dy), turning left.
+%
+path arc;
+arc = quartercircle scaled (2 radius + segw)
+ & halfcircle rotated 90 scaled segw shifted (radius * up)
+ & reverse quartercircle scaled (2 radius - segw)
+ & halfcircle rotated 180 scaled segw shifted (radius * right)
+ & cycle;
+
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ fill arc shifted (radius * left) rotated (angle(dx, dy)-135);
+ endchar
+enddef;
+
+% GENERATE...
+%
+input xyd
+
+bye.
+%
+% $Log: xybsql10.mf,v $
+% Revision 3.10 2011/08/28 22:19:06 krisrose
+% Font fix (stroke to outline) by Daniel.
+%
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd.mf.
+%
+% Based on obsolete xyqc10.mf [Revision 2.6 1992/06/24 01:23:34 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybtip.mf b/macros/generic/diagrams/xypic/mfinputs/xybtip.mf
new file mode 100644
index 0000000000..e6e95e7159
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybtip.mf
@@ -0,0 +1,71 @@
+% $Id: xybtip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Generate lower arrow tips for Xy-pic.
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Arrow tips *pointing* in all directions. With zero bounding box
+% placed at the tip; note most of the ink goes on the opposite side of where
+% the tip points.
+%
+% Generates the half of the tip that is lower when pointing right.
+% _________________________________________________________________________
+%
+pickup pencircle scaled segw; char_pen := savepen;
+%
+% chartowards makes char cc a tip pointing towards (dx,dy)...
+%
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,-1/2 segx) rotated a; % tail ends
+ z3 = curvature [z1,z2] ; % tail directions
+ pickup char_pen; draw z2..{-z3}z0;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% GENERATE...
+%
+input xyd
+
+bye.
+%
+% $Log: xybtip.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:05:28 krisrose
+% New for this maintenance release.
+%
+% Based on xybtip10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybtip10.mf b/macros/generic/diagrams/xypic/mfinputs/xybtip10.mf
new file mode 100644
index 0000000000..c944c2b8a8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybtip10.mf
@@ -0,0 +1,59 @@
+% $Id: xybtip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYBTIP10: lower arrow tips for Xy-pic at 10 point "technical style".
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYBTIP"; font_size 10pt#;
+mode_setup;
+
+input xytech
+input xybtip
+
+% $Log: xybtip10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd.mf.
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.1 1991/11/27 06:41:03 kris
+% Initial: \beta-test on DIKU.
+%
+% Based on obsolete xytip10.mf v.1.4.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybtri.mf b/macros/generic/diagrams/xypic/mfinputs/xybtri.mf
new file mode 100644
index 0000000000..7b7549f895
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybtri.mf
@@ -0,0 +1,58 @@
+% $Id: xybtri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xybtri, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,-1/2 segx) rotated a; % tail ends
+ z3 = indent [z1,z0]; % back of tip
+ fill z2--z0--z3--cycle;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+input xyd
+
+bye.
+
+% $Log: xybtri.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xybtip (triangular rather than curvilinear barbs)
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycirc10.mf b/macros/generic/diagrams/xypic/mfinputs/xycirc10.mf
new file mode 100644
index 0000000000..8d23e2e9d3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycirc10.mf
@@ -0,0 +1,177 @@
+% $Id: xycirc10.mf,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+%
+% XYCIRC10: 1/8 circles with varying radii for Xy-pic at 10 point.
+% Copyright (c) 1992,2011 Kristoffer H. Rose <krisrose@tug.org>
+% 2011 Daniel Müllner <http://www.math.uni-bonn.de/people/muellner>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: 1/8 circles with radii from 1 to 32pt dissected into the 1/8
+% circle segments shown below
+% 6 5
+% ....... _
+% 7 .. | .. 4 |
+% : | | | : | radius
+% : | | | : |
+% Reference point ---> ___:__|___|___|__:_____|
+% : | | | :
+% : | | | :
+% 0 .! | !. 3
+% ...|...
+% 1 2
+%
+% such that each group of 8 characters cc+0 to cc+7 constitute a full circle
+% with the given radius when typeset on the same baseline (as shown).
+%
+% The bounding box of each segment is the vertical slice of the unit square
+% around the circle.
+%
+% The radius is given for each character group g = cc mod 8 by the formula
+%
+% radius [pt] = g+1, if 0 <= g < 8
+% 2(g-8) + 10, if 8 <= g < 12 [= 2g-6]
+% 4(g-12) + 20, if 12 <= g < 16 [= 4g-28]
+% _________________________________________________________________________
+%
+font_identifier "XYCIRC"; font_size 10pt#;
+mode_setup;
+
+% METANESS...
+%
+rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = %let echar = endchar; def endchar = echar; stop ". " enddef;
+ openwindow currentwindow from origin to (1000,800) at (-200,300)
+enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
+%
+font_coding_scheme:="xycirc.enc";
+fontdimen 8: rulew#; % default_rule_thickness
+
+% (It's unnecessary to give the exact control points. MetaFont
+% automatically chooses a good approximation to a circular arc.)
+path eighthcircle;
+eighthcircle = right{up} .. {left+up}(right+up)/sqrt2;
+
+% Use the following macro that generates an entire group from character cc
+% to cc+7 with radius:
+%
+def makeg(expr g,radius) =
+
+ major# := radius/sqrt2;
+ minor# := radius - major#;
+ full# := radius;
+ define_pixels(minor,major,full);
+
+ path arc;
+ arc = eighthcircle scaled (full + rulew/2)
+ & halfcircle scaled rulew shifted (full*right) rotated 45
+ & reverse eighthcircle scaled (full - rulew/2)
+ & halfcircle scaled rulew rotated 180 shifted (full*right)
+ & cycle;
+
+ beginchar(8g ,minor#,full#,full#);
+ fill arc rotated 180 shifted (full*right);
+ endchar;
+
+ beginchar(8g+1,major#,full#,full#);
+ fill arc rotated 225 shifted (major*right);
+ endchar;
+
+ beginchar(8g+2,major#,full#,full#);
+ fill arc rotated 270;
+ endchar;
+
+ beginchar(8g+3,minor#,full#,full#);
+ fill arc rotated 315 shifted (major*left);
+ endchar;
+
+ beginchar(8g+4,minor#,full#,full#);
+ fill arc shifted (major*left);
+ endchar;
+
+ beginchar(8g+5,major#,full#,full#);
+ fill arc rotated 45;
+ endchar;
+
+ beginchar(8g+6,major#,full#,full#);
+ fill arc rotated 90 shifted (major*right);
+ endchar;
+
+ beginchar(8g+7,minor#,full#,full#);
+ fill arc rotated 135 shifted (full*right);
+ endchar;
+
+enddef;
+
+% Make groups:
+%
+for g = 0 step 1 until 7: makeg(g, (g+1)*pt#); endfor;
+for g = 8 step 1 until 11: makeg(g, (2g-6)*pt#); endfor;
+for g = 12 step 1 until 15: makeg(g,(4g-28)*pt#); endfor;
+
+bye.
+
+% $Log: xycirc10.mf,v $
+% Revision 3.13 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.12 2010/07/07 16:26:39 krisrose
+% Rules should be whole pixels (thanks again to Daniel).
+%
+% Revision 3.11 2010/07/06 21:49:55 krisrose
+% Daniel's fix that works around bug in mf2pt1/fontforge script.
+%
+% Revision 3.10 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.9 2010/05/17 23:29:21 krisrose
+% Experiment: generate all the Type1 fonts with METAPOST.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1994/03/08 02:09:27 kris
+% Release 3alpha.
+%
+% Revision 2.6.9.1 1994/03/07 04:22:46 kris
+% Last internal 3alpha and pre-2.7 release.
+%
+% NEW file to go in version 2.7!
+% Based on xymisc10.mf [Revision 2.6 1992/06/24 01:23:34 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycm.mf b/macros/generic/diagrams/xypic/mfinputs/xycm.mf
new file mode 100644
index 0000000000..fb0a424023
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycm.mf
@@ -0,0 +1,42 @@
+% $Id: xycm.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Parameter file for Xy-pic "Computer Modern style" arrow tips.
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+segl# = 1/5 designsize; define_pixels(segl); % segment length
+segx# = 1/2 designsize; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+tipo# = 0#; define_pixels(tipo); % tip overshoot
+curvature = 1/3; % 1 = straight tails, 0= curved tails
+%
+% $Log: xycm.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Extracted from xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmat10.mf b/macros/generic/diagrams/xypic/mfinputs/xycmat10.mf
new file mode 100644
index 0000000000..ecd65e1cfc
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmat10.mf
@@ -0,0 +1,58 @@
+% $Id: xycmat10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMAT10: upper arrow tips for Xy-pic at 10 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMAT"; font_size 10pt#;
+mode_setup;
+
+input xycm
+input xyatip
+
+% $Log: xycmat10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Recreated from xyatip10.mf (Revision 2.7 1992/12/14 01:41:26 kris).
+%
+% Revision 2.6 1993/10/21 21:21:24 kris
+% NEW for 2.7...
+%
+% Based on xyatip10.mf [2.6] and Knuth's SYMBOL.MF.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmat11.mf b/macros/generic/diagrams/xypic/mfinputs/xycmat11.mf
new file mode 100644
index 0000000000..9e9f8f086d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmat11.mf
@@ -0,0 +1,41 @@
+% $Id: xycmat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMAT11: upper arrow tips for Xy-pic at 11 point "Computer Modern style".
+% Copyright (c) 1995 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMAT"; font_size 11pt#;
+mode_setup;
+
+input xycm
+input xyatip
+
+% $Log: xycmat11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp krisrose
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmat12.mf b/macros/generic/diagrams/xypic/mfinputs/xycmat12.mf
new file mode 100644
index 0000000000..0c02125181
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmat12.mf
@@ -0,0 +1,41 @@
+% $Id: xycmat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMAT12: upper arrow tips for Xy-pic at 12 point "Computer Modern style".
+% Copyright (c) 1995 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMAT"; font_size 12pt#;
+mode_setup;
+
+input xycm
+input xyatip
+
+% $Log: xycmat12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp krisrose
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf b/macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf
new file mode 100644
index 0000000000..fd3fd9c8d0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf
@@ -0,0 +1,58 @@
+% $Id: xycmbt10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMBT10: lower arrow tips for Xy-pic at 10 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMBT"; font_size 10pt#;
+mode_setup;
+
+input xycm
+input xybtip
+
+% $Log: xycmbt10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Recreated from xybtip10.mf (Revision 2.7 1992/12/14 01:41:26 kris).
+%
+% Revision 2.6 1993/10/21 21:21:24 kris
+% NEW for 2.7...
+%
+% Based on xyatip10.mf [2.6] and Knuth's SYMBOL.MF.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf b/macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf
new file mode 100644
index 0000000000..a286a4883c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf
@@ -0,0 +1,41 @@
+% $Id: xycmbt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMBT11: lower arrow tips for Xy-pic at 11 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMBT"; font_size 11pt#;
+mode_setup;
+
+input xycm
+input xybtip
+
+% $Log: xycmbt11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on : xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp kris
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf b/macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf
new file mode 100644
index 0000000000..f9ebff3be8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf
@@ -0,0 +1,41 @@
+% $Id: xycmbt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMBT12: lower arrow tips for Xy-pic at 12 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMBT"; font_size 12pt#;
+mode_setup;
+
+input xycm
+input xybtip
+
+% $Log: xycmbt12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on : xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp kris
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyd.mf b/macros/generic/diagrams/xypic/mfinputs/xyd.mf
new file mode 100644
index 0000000000..fad1c242b0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyd.mf
@@ -0,0 +1,79 @@
+% $Id: xyd.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD: generate characters of `Xy-pic Directional' font.
+% Copyright (c) 1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Generate `directional' characters from 0..127 by calling
+% `chartowards(Code, Dx, Dy)' with
+%
+% Code: 0 15 31 47 63 79 95 111 127
+% Dx,Dy: -15/16,-1 0,-1 1,-1 1,0 1,1 0,1 -1,1 -1,0 -1,-1
+% / | \
+% Direction: o o o o- o o o -o o
+% / | \ /
+%
+% where the intervening codes are got by interpolating either Dx or Dy as
+% appropriate.
+% _________________________________________________________________________
+%
+% Parameters:
+%
+font_coding_scheme:="xyd.enc";
+%
+font_x_height segx#;
+font_quad segl#;
+fontdimen 8: segw#; % default_rule_thickness
+%
+% Characters:
+%
+for cc = 0 step 1 until 31: chartowards(cc,(cc-15)/16, -1); endfor;
+for cc = 32 step 1 until 63: chartowards(cc, 1, (cc-47)/16); endfor;
+for cc = 64 step 1 until 95: chartowards(cc,(79-cc)/16, 1); endfor;
+for cc = 96 step 1 until 127: chartowards(cc, -1,(111-cc)/16); endfor;
+%
+% $Log: xyd.mf,v $
+% Revision 3.10 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.9 2010/05/17 23:29:21 krisrose
+% Experiment: generate all the Type1 fonts with METAPOST.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Generate all Xy-pic `directional' characters.
+%
+% Extracted from xyatip10.mf [Revision 2.1 1992/01/02 14:54:07 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyd2.mf b/macros/generic/diagrams/xypic/mfinputs/xyd2.mf
new file mode 100644
index 0000000000..d4ab6f9c37
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyd2.mf
@@ -0,0 +1,81 @@
+% $Id: xyd2.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD2: generate characters of `Xy-pic SemiDirectional' font.
+% Copyright (c) 1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Generate `semidirectional' characters from 0..127 by calling
+% `chartowards(Code, Dx, Dy)' with
+%
+% Code: 0 30 31 63 95 127
+% Dx,Dy: 31/32,1 1/32,1 0,-1 1,-1 1,0 1,1
+% / | /
+% Direction: o o o o o- o
+% | \
+%
+% where the intervening codes are got by interpolating either Dx or Dy as
+% appropriate.
+% _________________________________________________________________________
+%
+% Parameters:
+%
+font_coding_scheme:="xyd2.enc";
+%
+font_x_height segx#;
+font_quad segl#;
+fontdimen 8: segw#; % default_rule_thickness
+%
+% Characters:
+%
+for cc = 0 step 1 until 30: chartowards(cc,(31-cc)/32, 1); endfor;
+for cc = 31 step 1 until 63: chartowards(cc,(cc-31)/32, -1); endfor;
+for cc = 64 step 1 until 127: chartowards(cc, 1,(cc-95)/32); endfor;
+%
+% $Log: xyd2.mf,v $
+% Revision 3.10 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.9 2010/05/17 23:29:21 krisrose
+% Experiment: generate all the Type1 fonts with METAPOST.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Generate all Xy-pic `semidirectionsl' characters.
+%
+% Extracted from xyline10.mf [Revision 2.1 1992/01/02 14:54:07 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xydash10.mf b/macros/generic/diagrams/xypic/mfinputs/xydash10.mf
new file mode 100644
index 0000000000..b97d2026f2
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xydash10.mf
@@ -0,0 +1,89 @@
+% $Id: xydash10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYDASH10: dashes for Xy-pic at 10 point.
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Line segments going segl# in all rightward directions...each
+% character has (width + italic correction) = cos(direction) * segl#.
+% _________________________________________________________________________
+%
+% SETUP:
+%
+font_identifier "XYDASH"; font_size 10pt#;
+mode_setup;
+
+% METANESS...
+%
+segl# = 1/2 designsize; define_pixels(segl); % segment length
+segx# = 1/5 designsize; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+pickup pencircle scaled segw; char_pen := savepen;
+%
+% chartowards makes char cc with length segl line from (0,0) towards (dx,dy)...
+%
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc, abs(dx)*segl#, 0, 0);
+ a := angle(dx,dy);
+ z0 = (0,0); z1 = z0 + dir a scaled segl;
+ pickup char_pen; draw z0--z1;
+ charic := abs ((cosd a)*segl#) - charwd;
+ penlabels(0,1);
+ endchar
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% GENERATE...
+%
+input xyd2
+
+bye.
+%
+% $Log: xydash10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd2.mf.
+%
+% Based on obsolete xyline10.mf 2.1 1992/01/02 14:54:07 kris
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf
new file mode 100644
index 0000000000..170ea3b5a7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf
@@ -0,0 +1,41 @@
+% $Id: xyeuat10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUAT10: upper arrow tips for Xy-pic at 10 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUAT"; font_size 10pt#;
+mode_setup;
+
+input xyeuler
+input xyatip
+
+% $Log: xyeuat10.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf
new file mode 100644
index 0000000000..6dcc7da88a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf
@@ -0,0 +1,41 @@
+% $Id: xyeuat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUAT11: upper arrow tips for Xy-pic at 11 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUAT"; font_size 11pt#;
+mode_setup;
+
+input xyeuler
+input xyatip
+
+% $Log: xyeuat11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf
new file mode 100644
index 0000000000..20f6fd1dd0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf
@@ -0,0 +1,41 @@
+% $Id: xyeuat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUAT12: upper arrow tips for Xy-pic at 12 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUAT"; font_size 12pt#;
+mode_setup;
+
+input xyeuler
+input xyatip
+
+% $Log: xyeuat12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf b/macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf
new file mode 100644
index 0000000000..507825ffbd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf
@@ -0,0 +1,41 @@
+% $Id: xyeubt10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUBT10: lower arrow tips for Xy-pic at 10 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUBT"; font_size 10pt#;
+mode_setup;
+
+input xyeuler
+input xybtip
+
+% $Log: xyeubt10.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf b/macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf
new file mode 100644
index 0000000000..24af94c70b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf
@@ -0,0 +1,41 @@
+% $Id: xyeubt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUBT11: lower arrow tips for Xy-pic at 11 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUBT"; font_size 11pt#;
+mode_setup;
+
+input xyeuler
+input xybtip
+
+% $Log: xyeubt11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf b/macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf
new file mode 100644
index 0000000000..dfe3935612
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf
@@ -0,0 +1,41 @@
+% $Id: xyeubt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUBT12: lower arrow tips for Xy-pic at 12 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUBT"; font_size 12pt#;
+mode_setup;
+
+input xyeuler
+input xybtip
+
+% $Log: xyeubt12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuler.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuler.mf
new file mode 100644
index 0000000000..efad5dfd6d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuler.mf
@@ -0,0 +1,42 @@
+% $Id: xyeuler.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Parameter file for Xy-pic "Euler style" arrow tips.
+% Copyright (c) 1995 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+segl# = 1/8 designsize; define_pixels(segl); % segment length
+segx# = 7/16 designsize; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+tipo# = 0#; define_pixels(tipo); % tip overshoot
+curvature = 2/3; % 1 = straight tails, 0= curved tails
+%
+% $Log: xyeuler.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyline10.mf b/macros/generic/diagrams/xypic/mfinputs/xyline10.mf
new file mode 100644
index 0000000000..41aad6e043
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyline10.mf
@@ -0,0 +1,119 @@
+% $Id: xyline10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $ -*-tex-*-
+%
+% XYLINE10: line segments for XY mode at 10 point.
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the XY-pic macro package.
+%
+% The XY-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The XY-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% CONTENTS: Line segments going either segl# down or to the right. Codes
+% range from 0 to 127, distributed evenly in each of the
+% intervals between the `purely' horizontal/
+% vertical/diagonal characters with code 31, ..../
+% 63, 95, and 127 (code -1 would be pure as : /:
+% well if it existed): : / :
+% :/ :
+% ..../ ..../ | o o.... o.... o---- o...:
+% : /: : /: | | :\ : :\ :
+% : / : : / : | | : \ : : \ :
+% :/ : :/ : | | : \: : \:
+% o...: o...: o | :...\ :...\
+%
+% Code: [-1] 0 30 31 63 64 95 127
+%
+font_identifier "XYLINE"; font_size 10pt#;
+font_coding_scheme:="XY line segments";
+mode_setup;
+
+% METANESS...
+%
+segl# = 1/2 designsize; define_pixels(segl); % line segment length
+rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
+%
+% drawsegment draws a line from (0,0) to the argument point...
+def drawsegment expr endpoint =
+ z0 = (0,0); z1 = endpoint;
+ pickup pencircle scaled rulew rotated (angle (z1-z0) - 90);
+ draw z0--z1; penlabels(0,1) enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
+fontdimen 8: rulew#;
+%
+% The characters follow...
+%
+for cc = 0 step 1 until 30:
+ beginchar(cc,(31-cc)/32*segl#,segl#,0); drawsegment (w,h); endchar;
+endfor;
+%
+for cc = 31 step 1 until 63:
+ beginchar(cc,(cc-31)/32*segl#,0,segl#); drawsegment (w,-d); endchar;
+endfor;
+%
+for cc = 64 step 1 until 94:
+ beginchar(cc,segl#,0,(95-cc)/32*segl#); drawsegment (w,-d); endchar;
+endfor;
+%
+for cc = 95 step 1 until 126:
+ beginchar(cc,segl#,(cc-95)/32*segl#,0); drawsegment (w,h); endchar;
+endfor;
+%
+beginchar(127,segl#,segl#,0); drawsegment (w,h); endchar;
+
+bye.
+%
+% $Log: xyline10.mf,v $
+% Revision 3.5 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.7 1991/12/17 04:51:16 kris
+% Version distributed with `final draft' on Usenet.
+%
+% Revision 1.6 1991/11/27 06:54:21 kris
+% \beta-test on DIKU.
+%
+% Revision 1.5 1991/10/21 23:19:08 kris
+% Version described in DIKU student report 91-7-10.
+%
+% Revision 1.4 1991/07/28 22:16:18 kris
+% Inverted char0..30 to avoid negative widths.
+%
+% Revision 1.3 1991/07/26 01:22:28 kris
+% Set bounding box completely!
+%
+% Revision 1.2 91/06/09 21:59:49 kris
+% separated METANESS and CHARACTERS
+%
+% Revision 1.1 91/06/06 22:52:31 kris
+% furst succesful attempt
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylu.mf b/macros/generic/diagrams/xypic/mfinputs/xylu.mf
new file mode 100644
index 0000000000..216b0d7397
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylu.mf
@@ -0,0 +1,47 @@
+% $Id: xylu.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylu, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+tipo# = 2segw#; define_pixels(tipo); % tip overshoot
+
+segw# = .2pt#; define_whole_blacker_pixels(segw); % segment thickness
+segl# = 1/5 designsize - tipo#; define_pixels(segl); % segment length
+segx# = 1/4 designsize; define_pixels(segx); % segment height
+
+indent = 1/4; % 1 = barbs, 0 = triangular tails
+
+% $Log: xylu.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycm.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyluat10.mf b/macros/generic/diagrams/xypic/mfinputs/xyluat10.mf
new file mode 100644
index 0000000000..71a3fb0411
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyluat10.mf
@@ -0,0 +1,45 @@
+% $Id: xyluat10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyluat10, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUAT"; font_size 10pt#;
+mode_setup;
+
+input xylu
+input xyatri
+
+% $Log: xyluat10.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmat10
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyluat11.mf b/macros/generic/diagrams/xypic/mfinputs/xyluat11.mf
new file mode 100644
index 0000000000..edfac5ba27
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyluat11.mf
@@ -0,0 +1,45 @@
+% $Id: xyluat11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyluat11, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUAT"; font_size 11pt#;
+mode_setup;
+
+input xylu
+input xyatri
+
+% $Log: xyluat11.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmat11
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyluat12.mf b/macros/generic/diagrams/xypic/mfinputs/xyluat12.mf
new file mode 100644
index 0000000000..6ef996f66e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyluat12.mf
@@ -0,0 +1,45 @@
+% $Id: xyluat12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyluat12, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUAT"; font_size 12pt#;
+mode_setup;
+
+input xylu
+input xyatri
+
+% $Log: xyluat12.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmat12
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylubt10.mf b/macros/generic/diagrams/xypic/mfinputs/xylubt10.mf
new file mode 100644
index 0000000000..45ae7bf8bb
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylubt10.mf
@@ -0,0 +1,45 @@
+% $Id: xylubt10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylubt10, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUBT"; font_size 10pt#;
+mode_setup;
+
+input xylu
+input xybtri
+
+% $Log: xylubt10.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmbt10
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylubt11.mf b/macros/generic/diagrams/xypic/mfinputs/xylubt11.mf
new file mode 100644
index 0000000000..e246f9ed76
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylubt11.mf
@@ -0,0 +1,45 @@
+% $Id: xylubt11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylubt11, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUBT"; font_size 11pt#;
+mode_setup;
+
+input xylu
+input xybtri
+
+% $Log: xylubt11.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmbt11.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylubt12.mf b/macros/generic/diagrams/xypic/mfinputs/xylubt12.mf
new file mode 100644
index 0000000000..8d852d85dd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylubt12.mf
@@ -0,0 +1,45 @@
+% $Id: xylubt12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylubt12, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUBT"; font_size 12pt#;
+mode_setup;
+
+input xylu
+input xybtri
+
+% $Log: xylubt12.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% Based on xycmbt12.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xymisc10.mf b/macros/generic/diagrams/xypic/mfinputs/xymisc10.mf
new file mode 100644
index 0000000000..268e3c42a6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xymisc10.mf
@@ -0,0 +1,143 @@
+% $Id: xymisc10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $ -*-tex-*-
+%
+% XYMISC10: miscellaneous characters for XY mode at 10 point.
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the XY-pic macro package.
+%
+% The XY-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The XY-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% CONTENTS:
+% Metaness.
+% Testing...
+% Font.
+% Dot fitting the rule width.
+% Quarter circles with radii from 1 to 10 and 12 to 30 pt; all have
+% height = depth = .5width = radius and are centered such that they
+% enter and leave the box in the middle of the sides.
+%
+font_identifier "XYMISC"; font_size 10pt#;
+font_coding_scheme:="XY miscellaneous";
+mode_setup;
+
+% METANESS...
+%
+rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
+%
+def pickuppen = pickup pencircle scaled rulew enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = %%let echar = endchar; def endchar = echar; stop ". " enddef;
+ openwindow currentwindow
+ from origin to (1000,800) at (-200,300)
+ enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
+fontdimen 8: rulew#;
+
+% DOT FOR DOTTED LINES AND DUMMY CIRCLE...
+%
+beginchar(0,0,0,0); pickuppen; drawdot (0,0); endchar;
+beginchar(1,0,0,0); pickuppen; drawdot (0,0); endchar;
+beginchar(2,0,0,0); pickuppen; drawdot (0,0); endchar;
+beginchar(3,0,0,0); pickuppen; drawdot (0,0); endchar;
+
+% QUARTER CIRCLES... The four circles with radius N pt, 0 < N <= 10, are
+% located at N*4 + QUADRANT, where 1 <= QUADRANT <= 4. All have width as
+% their radius with reference point at the level of the horizontal end of the
+% arc and height, depth as the extent of the arc.
+%
+for radius = 1 step 1 until 10:
+ beginchar(radius*4,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 180 shifted (1,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*4+1,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated -90 shifted (0,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*4+2,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle shifted (0,-.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*4+3,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 90 shifted (1,-.5) scaled (radius*2pt);
+ endchar;
+endfor;
+%
+% For 12 <= N <= 40 we step in 2pt increments... so for 10 <= N <= 40 the
+% quarter circle with radius N is located at (N div 2 + 20 + QUADRANT).
+%
+for radius = 12 step 2 until 40:
+ beginchar(radius*2+20,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 180 shifted (1,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*2+21,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated -90 shifted (0,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*2+22,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle shifted (0,-.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*2+23,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 90 shifted (1,-.5) scaled (radius*2pt);
+ endchar;
+endfor;
+
+bye.
+%
+% $Log: xymisc10.mf,v $
+% Revision 3.5 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.6 1992/06/24 01:23:34 kris
+% Cleaned up.
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.6 1991/11/27 06:54:21 kris
+% \beta-test on DIKU.
+%
+% Revision 1.5 1991/10/21 23:19:08 kris
+% Version described in DIKU student report 91-7-10.
+%
+% Revision 1.4 1991/08/22 01:07:46 kris
+% Now has quarter circles to radius 40pt as required for xy.doc[1.28].
+%
+% Revision 1.3 1991/07/21 21:04:35 kris
+% Tested with xy.doc[1.19].
+%
+% Revision 1.2 1991/07/19 14:52:26 kris
+% Changed quarter circles to fit xy.doc[1.19?].
+%
+% Revision 1.1 1991/06/24 20:57:37 kris
+% Works with xy.doc [1.6] :-)
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyqc10.mf b/macros/generic/diagrams/xypic/mfinputs/xyqc10.mf
new file mode 100644
index 0000000000..ef30cdb8f9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyqc10.mf
@@ -0,0 +1,96 @@
+% $Id: xyqc10.mf,v 3.1 2010/06/10 18:45:50 krisrose Exp $ -*-tex-*-
+%
+% XYQC10: quarter circles for XY mode at 10 point.
+% Copyright (c) 1992 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the XY-pic macro package.
+%
+% The XY-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The XY-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% CONTENTS: Quarter circles in all directions:
+%
+% -.
+% | ) | /\
+% o o o o-' o o o .-o o
+% ( |_ \/ | (
+%
+% Code: [-1] 15 31 47 65 79 95 111 127
+%
+% Each character has a cosinoid bounding box :-) with wd = cos I = sin F,
+% where I,F are the angles from direction --> to the initial,final direction.
+%
+font_identifier "XYQC"; font_size 10pt#;
+font_coding_scheme:="XY quarter circles";
+mode_setup;
+
+% METANESS...
+%
+qcd# = 1/2 designsize; % quarter circle diameter
+rulew# = .4pt#; % quarter circle line width
+define_pixels(qcd,rulew);
+%
+% beginqc draws the quarter circle starting in the direction towards endpoint
+% and turning left...
+def beginqc(expr cc,ex,ey) =
+ alpha := angle (ex,ey);
+ cw := sqrt(1/2) * abs(sind(alpha + 135));
+ beginchar(cc,cw*qcd#,0,0);
+ pickup pencircle scaled rulew rotated (alpha - 90);
+ if (cc<64): draw quartercircle shifted (-.5,0) rotated (alpha - 90)
+ scaled qcd
+ else: draw quartercircle shifted (-.5,0) rotated (alpha - 90) shifted (cw,0)
+ scaled qcd
+ fi
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,200) enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G).
+fontdimen 8: rulew#;
+%
+% Here are the characters...
+%
+for cc = 0 step 1 until 31:
+ beginqc(cc,cc-15,-16); endchar;
+endfor;
+%
+for cc = 32 step 1 until 63:
+ beginqc(cc,16,cc-47); endchar;
+endfor;
+%
+for cc = 64 step 1 until 95:
+ beginqc(cc,79-cc,16); endchar;
+endfor;
+%
+for cc = 96 step 1 until 127:
+ beginqc(cc,-16,111-cc); endchar;
+endfor;
+
+bye.
+%
+% $Log: xyqc10.mf,v $
+% Revision 3.1 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.6 1992/06/24 01:23:34 kris
+% Implemented and used for hooks.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xytech.mf b/macros/generic/diagrams/xypic/mfinputs/xytech.mf
new file mode 100644
index 0000000000..60e36c86a3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xytech.mf
@@ -0,0 +1,42 @@
+% $Id: xytech.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Parameter file for Xy-pic "technical style" arrow tips.
+% Copyright (c) 1991-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic macro package is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+segl# = 1/2 designsize; define_pixels(segl); % segment length
+segx# = 0.62 segl#; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+tipo# = 0#; define_pixels(tipo); % tip overshoot
+curvature = 1/3; % 1 = straight tails, 0= curved tails
+%
+% $Log: xytech.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:53:24 krisrose
+% Maintenance release.
+%
+% Extracted from xyatip10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/pfm/xyatip10.pfm b/macros/generic/diagrams/xypic/pfm/xyatip10.pfm
new file mode 100644
index 0000000000..6cd2ecb8d3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyatip10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xybsql10.pfm b/macros/generic/diagrams/xypic/pfm/xybsql10.pfm
new file mode 100644
index 0000000000..bec8b1507b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xybsql10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xybtip10.pfm b/macros/generic/diagrams/xypic/pfm/xybtip10.pfm
new file mode 100644
index 0000000000..b3ce943a81
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xybtip10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycirc10.pfm b/macros/generic/diagrams/xypic/pfm/xycirc10.pfm
new file mode 100644
index 0000000000..66d0d1e746
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycirc10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmat10.pfm b/macros/generic/diagrams/xypic/pfm/xycmat10.pfm
new file mode 100644
index 0000000000..46a81dd945
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmat10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmat11.pfm b/macros/generic/diagrams/xypic/pfm/xycmat11.pfm
new file mode 100644
index 0000000000..6c079bcf33
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmat11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmat12.pfm b/macros/generic/diagrams/xypic/pfm/xycmat12.pfm
new file mode 100644
index 0000000000..736a1b0e8f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmat12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmbt10.pfm b/macros/generic/diagrams/xypic/pfm/xycmbt10.pfm
new file mode 100644
index 0000000000..246e5dac46
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmbt10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmbt11.pfm b/macros/generic/diagrams/xypic/pfm/xycmbt11.pfm
new file mode 100644
index 0000000000..6b53d6a5e9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmbt11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmbt12.pfm b/macros/generic/diagrams/xypic/pfm/xycmbt12.pfm
new file mode 100644
index 0000000000..db87a28591
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmbt12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xydash10.pfm b/macros/generic/diagrams/xypic/pfm/xydash10.pfm
new file mode 100644
index 0000000000..b734309bc9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xydash10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeuat10.pfm b/macros/generic/diagrams/xypic/pfm/xyeuat10.pfm
new file mode 100644
index 0000000000..5861d27fc8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeuat10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeuat11.pfm b/macros/generic/diagrams/xypic/pfm/xyeuat11.pfm
new file mode 100644
index 0000000000..6f9091a088
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeuat11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeuat12.pfm b/macros/generic/diagrams/xypic/pfm/xyeuat12.pfm
new file mode 100644
index 0000000000..c596d4411b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeuat12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeubt10.pfm b/macros/generic/diagrams/xypic/pfm/xyeubt10.pfm
new file mode 100644
index 0000000000..0542f9c281
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeubt10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeubt11.pfm b/macros/generic/diagrams/xypic/pfm/xyeubt11.pfm
new file mode 100644
index 0000000000..30ffe62d0c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeubt11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeubt12.pfm b/macros/generic/diagrams/xypic/pfm/xyeubt12.pfm
new file mode 100644
index 0000000000..885f3c1bea
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeubt12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyluat10.pfm b/macros/generic/diagrams/xypic/pfm/xyluat10.pfm
new file mode 100644
index 0000000000..e17ccf673d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyluat10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyluat11.pfm b/macros/generic/diagrams/xypic/pfm/xyluat11.pfm
new file mode 100644
index 0000000000..9e74210256
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyluat11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyluat12.pfm b/macros/generic/diagrams/xypic/pfm/xyluat12.pfm
new file mode 100644
index 0000000000..05fb9275d8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyluat12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xylubt10.pfm b/macros/generic/diagrams/xypic/pfm/xylubt10.pfm
new file mode 100644
index 0000000000..26b02764f9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xylubt10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xylubt11.pfm b/macros/generic/diagrams/xypic/pfm/xylubt11.pfm
new file mode 100644
index 0000000000..67977b5016
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xylubt11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xylubt12.pfm b/macros/generic/diagrams/xypic/pfm/xylubt12.pfm
new file mode 100644
index 0000000000..3ccb060c68
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xylubt12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/ps/xy389dict.pro b/macros/generic/diagrams/xypic/ps/xy389dict.pro
new file mode 100644
index 0000000000..c1a2c890f0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/ps/xy389dict.pro
@@ -0,0 +1,380 @@
+%!PS-Adobe-3.0 Resource-procset
+%%Title: xy389dict.pro
+%%Version: 3.8.9
+%%Creator: Xy-ps backend to Xy-pic
+%%DocumentSuppliedProcSets: XYdict
+%%For: nulluse of Xy-pic
+%%BeginResource: procset XYdict
+/XYdict where not{250 dict /XYdict exch def
+ /xy{mark exch XYdict begin countdictstack /xylevel exch def
+ xyopen xycolor mark xypatt xypattern stopped xyclose end
+ cleartomark}def /xyg{gsave xy}def
+ /xyf{currentfont exch xy grestore setfont}def
+ /xycc{{xychgcol}xy}def /xyc{XYdict begin xycolstore end}def
+ /xyx{/xyYpos exch def /xyXpos exch def}def
+ /xyp{currentpoint xyx}def
+ /xyd{setupDirection XYdirection 2 mul}def
+ /xyct{currentpoint xyt 2 copy 6 2 roll}def
+ /xyt{xyXpos xyYpos 2 copy translate}def /xyr{neg rotate xynt}def
+ /xyrs{neg rotate 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xynt{neg exch neg exch translate}def /xys{scale xynt}def
+ /xyss{scale 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xyi{0 0 transform grestore gsave itransform}def
+ }if
+
+/XYdict where pop begin XYdict begin
+ /xyopen{currentdict /XYddict known{XYddict null eq{}
+ {XYddict begin xyopen}ifelse}if}def
+ /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
+ /xychgcol{/xycolor exch def}def /xysetcol{xypush xychgcol}def
+
+ /xypush{16 dict /XYddict exch def XYddict begin}def
+ /undef where
+ {pop /xypop{countdictstack xylevel eq{}{end}ifelse
+ currentdict /XYddict undef}def}
+ {/xypop{countdictstack xylevel eq{}{end}ifelse
+ /XYddict null def}def}ifelse
+ /pu /xypush load def /pp /xypop load def
+ /xypspt{72 72.27 div dup scale}bind def /pscorrect{.85 mul}bind def
+ /gstartxy{gsave xypspt xywidth xycap xyjoin xymiter newpath 0 0 moveto}def
+ /xypath{gstartxy rmoveto counttomark 2 idiv -1 1{pop lineto}for}def
+ /xystroke{stroke grestore}bind def
+ /xyfill{closepath fill grestore}bind def
+ /xystfil{closepath gsave fill grestore 0 setgray
+ 0 setlinewidth xystroke}bind def
+ /xyeofill{closepath eofill grestore}bind def
+
+ /xypolyline{xypath xystroke}def /xypolyfill{xypath xyfill}def
+ /xydotsep{/@ currentlinewidth 2 mul def}def
+ /xypolydot{xypath xydotsep [xydt @] 0 setdash xystroke}def
+ /xypolydash{xypath xydotsep [@ @] 0 setdash xystroke}def
+ /xypolyeofill{xypath xyeofill}def /pe /xypolyeofill load def
+ /pl /xypolyline load def /pf /xypolyfill load def
+ /pt /xypolydot load def /pd /xypolydash load def
+ /arc4pop{arcto 4{pop}repeat}bind def
+ /xyoval{gstartxy oval closepath xystroke}def
+ /xycircle{gstartxy circle xystroke}def
+ /circle{dup 0 moveto 0 0 3 -1 roll 0 360 arc}def
+ /oval{newpath 2 copy exch 5 index add 2 div exch 3 copy 10 3 roll
+ moveto 1 index dup 5 1 roll 3 index 7 index arc4pop
+ dup dup 4 1 roll 4 index exch 6 index arc4pop
+ 1 index dup 8 1 roll 4 index 4 index arc4pop
+ arc4pop closepath}def
+ /xyellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ circle xystroke}def
+ /ov /xyoval load def /ox /xyellipse load def
+ /dotit{dup currentlinewidth 6 mul div round div
+ /@ exch def [xydt @] 0 setdash}def
+ /elldash{dup 4 -1 roll 10 exch div dashit}def
+ /ovdash{dup 10 dashit}def
+ /dashit{div round 2 mul div /@ exch def [@ @] 0 setdash}def
+ /dotcirc{gstartxy cirlen dotit circle xystroke}def
+ /dashcirc{gstartxy cirlen dashit circle xystroke}def
+ /dotoval{gstartxy 5 copy ovlen dotit oval xystroke}def
+ /dashoval{gstartxy 5 copy ovlen ovdash oval xystroke}def
+ /cirlen{dup 6.283185 mul}bind def
+ /ovlen{3 -1 roll sub 3 1 roll sub add exch 1.716815 mul sub}def
+ /dotellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ cirlen dotit circle closepath xystroke}def
+ /dashellipse{gstartxy counttomark 1 gt{squarify add 2 div 1}
+ {1 exch 1 exch}ifelse cirlen elldash circle xystroke}def
+ /ot /dotellipse load def /od /dashellipse load def
+ /vt /dotoval load def /vd /dashoval load def
+ /filloval{gstartxy oval xyfill}def
+ /stfiloval{gstartxy oval xystfil}def
+ /fillcircle{gstartxy circle xyfill}def
+ /stfilcircle{gstartxy circle xystfil}def
+ /fillellipse{gstartxy squarify pop pop 1 circle xyfill}def
+ /stfilellipse{gstartxy squarify pop pop 1 circle xystfil}def
+ /squarify{4 copy sub 2 div 3 1 roll sub 2 div translate
+ add 2 div 3 1 roll add 2 div 2 copy scale
+ 2 copy add 2 div currentlinewidth exch div setlinewidth
+ newpath}def
+ /fe /fillellipse load def /sfe /stfilellipse load def
+ /fo /filloval load def /sfo /stfiloval load def
+ /fc /fillcircle load def /sfc /stfilcircle load def
+ /xywidth{.4 pscorrect setlinewidth}bind def
+ /xydash{[] 0 setdash}bind def /xycap{1 setlinecap}bind def
+ /xyjoin{1 setlinejoin}bind def /xymiter{10 setmiterlimit}bind def
+
+ /cc{dup exec xychgcol}def
+ /lw{dup setlinewidth /@l exch def
+ /xywidth{@l setlinewidth}bind def}def
+ /lc{dup setlinecap /@c exch def
+ /xycap{@c setlinecap}bind def}def
+ /lj{dup setlinejoin /@j exch def
+ /xyjoin{@j setlinejoin}bind def}def
+ /ml{dup setmitrelimit /@m exch def
+ /xymiter{@m setmitrelimit}bind def}def
+
+ /setupDirection{dup -2048 lt{3072 add neg 1024 exch}
+ {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch}
+ {3072 sub 1024}ifelse}ifelse}ifelse atan
+ dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def
+
+ userdict begin
+ /gray{setgray}bind def /gray@{setgray}bind def
+ /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def
+ /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def
+ /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll
+ exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll
+ exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse
+ /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def
+ /sethalftone where{/sethalftone load /tone exch def}if
+ /xycolarray 3 array def /xycolstore{currentrgbcolor 2 -1 0
+ {exch xycolarray 3 1 roll put}for}def xycolstore
+ /xycolor{0 1 2{xycolarray exch get}for setrgbcolor}def
+ /xypatt{}def /xypattern{cleartomark}bind def
+ end
+end end
+/XYdict where pop begin XYdict begin
+/:patt
+{XYddict begin
+14 dict begin
+/BGnd exch def
+/FGnd exch def
+/PaintData exch def
+/PatternType 1 def
+/PaintType 1 def
+/BBox[0 0 1 1]def
+/TilingType 1 def
+/XStep 1 def
+/YStep 1 def
+/PatternMtx[24 0 0 24 0 0]def
+/PaintProc BGnd null ne
+ {{begin BGnd aload pop setrgbcolor 0 0 1 1 rF
+ FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ {{begin FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ ifelse def
+ currentdict PatternMtx end
+ gsave patangle xyland{180 add}if
+ rotate macfreq patfreq div dup neg exch scale matrix currentmatrix
+ grestore gsave setmatrix /DeviceRGB setcolorspace makepattern grestore
+ end}def
+/rF{gsave
+ newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill grestore}bind def
+ /setpatscreen{/pattstring exch store patfreq
+ patangle xyport not{90 add}if
+ {1 add 4 mul cvi pattstring exch get exch 1 add 4 mul cvi 7 sub
+ bitshift 1 and}setscreen}bind def
+ /setcolpattern{setpatscreen 64 div 1 exch sub currentrgbcolor
+ 1 1 3{pop 1 exch sub 3 index mul 1 exch sub 3 1 roll}for
+ setrgbcolor pop}def
+ /setgraypattern{setpatscreen 64 div setgray}def
+ /macfreq 9.375 def /patangle 0 def /patfreq 12.5 def
+/checkland{ /normland where{pop normland not}{false}ifelse
+ /xyland exch def
+ /por where{pop por}{/isls where{pop isls not /xyland true def}
+ {/land where{pop land not}{true}
+ ifelse}ifelse}ifelse /xyport exch def}def
+ /setpatfreq{/patfreq exch def}def
+ /setpatangle{/patangle exch def}def
+ /setbackcolor{/backcolor exch def}def
+ /setforecolor{/forecolor exch def}def
+ [1 1 1] setbackcolor xycolarray setforecolor
+ /bg /setbackcolor load def /fg /setforecolor load def
+ /pa /setpatangle load def /pq /setpatfreq load def
+ /xypattern{checkland counttomark dup 0 eq{pop}
+ {dup 1 eq{pop setpatscreen}
+ {dup 2 eq{pop setcolpattern}
+ {dup 3 eq{pop
+ /setcolorspace where {
+ /.setcolorspace where{pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ forecolor backcolor :patt setpattern
+ }{pop pop setcolpattern}ifelse}ifelse}
+ {pop setcolpattern}ifelse}
+ {5 eq{/setcolorspace where{
+ /.setcolorspace where{pop pop pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ :patt setpattern
+ }{pop pop pop pop setcolpattern}ifelse}ifelse}
+ {pop pop pop setcolpattern}ifelse
+ }{}ifelse}ifelse}ifelse}ifelse}ifelse cleartomark }def
+ /xysetpattern{/xypatt exch def}def
+ /sp /xysetpattern load def
+end end
+/XYdict where pop begin XYdict begin
+ /xysize 10 def /T true def /F false def
+ /dimendiv{65536 div}bind def
+ /xysegl 327680 dimendiv def
+ /xyopp{1 -1 scale}bind def
+ /xynormwidth{26213 dimendiv pscorrect}bind def
+ /xywidth{xynormwidth setlinewidth}bind def
+
+ /xyfont{4096 add 64 div round 64 mul 4096 sub}def /xydt 0.01 def
+ /xysdfont{4096 add 32 div round 32 mul 4096 sub}def
+ /xydots{xywidth 1 setlinecap [xydt 2] 0 setdash}bind def
+ /f /xyfont load def /fs /xysdfont load def
+ /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul
+ dup dup XYdirection sub 180 div round 180 mul XYdirection add
+ dup 3 -1 roll sub abs 10 gt not{exch}if pop}def
+
+ /xyrulth{26213 dimendiv pscorrect setlinewidth
+ 0 setlinecap}bind def
+
+ /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def
+ /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def
+
+ /xyswap{XYdirection 180 add /XYdirection exch def}def
+ /xyline{gstartxy setupDirection rlineto xystroke}def
+
+ /dash{exch gchksavexy xysegl XYdirection dup
+ -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if
+ 0 rlineto xystroke}def
+ /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto
+ 0 xysegl neg rlineto xystroke }def
+ /d /dash load def /st /stopper load def
+ /solid{gstartxy xydash neg exch neg exch rlineto xystroke}def
+ /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash
+ neg exch neg exch rlineto xystroke}def
+ /l /solid load def /dd /dashed load def
+ /dot{gstartxy 2 setlinecap [xydt 2] 0 setdash
+ 1 0 rlineto xystroke}def
+ /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ 2 div round 1 add div 2 setlinecap [xydt 3 -1 roll] 0 setdash
+ neg exch neg exch rlineto 0 0 rlineto xystroke}def
+ /p /dot load def /dt /dotted load def
+ /cubic{gstartxy docubic} def
+ /docubic{chkvalid
+ {chkcubedge 8 -2 roll moveto curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse}
+ {pop cubicedge}ifelse}def
+ /bz /cubic load def
+ /dotcubic{gstartxy 1 setlinecap [xydt 2] 0 setdash docubic}def
+ /dashcubic{gstartxy [5 5] 0 setdash docubic}def
+ /bt /dotcubic load def /bd /dashcubic load def
+ /squine{gstartxy dosquine}def
+ /dosquine{chkvalid
+ {chksquedge 2 copy moveto xysq2cub curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /q /squine load def
+ /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def
+
+ /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse}
+ {pop squineedge}ifelse}def
+ /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index
+ xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def
+ /xysq2cubit{2 index 2 mul add 3 div}def
+
+ /dotsquine{gstartxy 1 setlinecap [xydt 2] 0 setdash dosquine}def
+ /dashsquine{gstartxy [5 5] 0 setdash dosquine}def
+ /qt /dotsquine load def /qd /dashsquine load def
+/xy4mul{8 copy
+ 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll
+ 3 -1 roll mul exch 4 -1 roll mul 3 1 roll
+ add 3 1 roll add exch 10 2 roll
+ 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll
+ 4 -1 roll mul 4 1 roll mul add 3 1 roll add
+ exch 3 -1 roll }def
+
+ /xy44mul{4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll
+ xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll
+ 8 4 roll xy4mul 12 4 roll xy4mul}def
+
+ /cubicedge{10 2 roll exch 8 1 roll 3 -1 roll dup dup 9 2 roll
+ 5 -1 roll dup dup 9 1 roll 8 3 roll
+ 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll
+ 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy444mul
+ pop pop pop 13 1 roll pop pop pop 9 1 roll 10 1 roll
+ pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll}def
+
+ /xy444mul{4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll
+ xy44mul 20 8 roll xy44mul
+ 12 -4 roll 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch
+ 4 2 roll 16 8 roll 8 4 roll
+ 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
+ 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll
+ 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll
+ xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def
+
+ /squineedge{8 2 roll
+ exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch
+ 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def
+
+ /xyshort{2 copy abs exch abs add xysegl .5 mul lt
+ {pop pop grestore}{rlineto xystroke}ifelse}def
+
+ /tipwidth{xywidth xynormwidth dup currentlinewidth exch div
+ sqrt dup dup scale mul setlinewidth 1 setlinecap}def
+
+ /halftip{tipwidth xysize 10 div 0 0 moveto
+ -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg
+ dup .62 mul 2 div neg curveto}bind def
+
+/atip{gchksavexy halftip xystroke}def
+ /btip{gchksavexy xyopp halftip xystroke}def
+ /tip{gchksavexy gsave halftip stroke grestore
+ xyopp halftip xystroke}def
+ /t /tip load def /a /atip load def /b /btip load def
+/cmatip{gchksavexy halfcmtip xystroke}def
+ /cmbtip{gchksavexy xyopp halfcmtip xystroke}def
+ /cmtip{gchksavexy gsave halfcmtip stroke grestore
+ xyopp halfcmtip xystroke}def
+ /halfcmtip{tipwidth 0 0 moveto
+ -.1333 0 .25 neg dup .125 3 -1 roll .25 curveto}bind def
+ /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def
+ /xyfscale{/xyfsize exch def}def /xyfsize{10}def
+ /eu{-0.0551 0.0643 -0.0976 0.1386 -0.125 0.2188}def
+ /cm{-0.105 0.0437 -0.1804 0.1380 -0.2 0.25}def
+ /XY{-0.1753 0.0181 -0.3452 0.0708 -0.5 0.155}def
+ /tipstart{3 -1 roll gchksavexy exch xyfscale tipwidth dup XYdict exch
+ known{dup /xy eq{pop /XY}if}{pop /XY}ifelse XYdict exch get}def
+ /tipend{halfxytip xystroke}def
+ /halfxytip{1 1 6{pop xyfsize mul 6 1 roll}for 0 0 moveto curveto}def
+ /A{tipstart D}def /B{tipstart C}def /C{xyopp D}def /D{exec tipend}def
+ /AB{tipstart dup gsave exec halfxytip stroke grestore C}def
+
+ /Tip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /XT}if}{pop /XT}ifelse
+ XYdict exch get dup
+ halfTip stroke grestore xyopp halfTip xystroke}def
+ /XT{360 32 div neg}def /Xt{-1 .31 mul 1 atan}def
+ /ET{360 64 div 5 mul neg}def /Et{-1 .31 mul 1 atan}def
+ /halfTip{exec rotate XY halfxytip}def /halfTtip{halfTip}def
+ /Ttip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /Xt}if}{pop /Xt}ifelse
+ XYdict exch get dup
+ halfTtip stroke grestore xyopp halfTtip xystroke}def
+ /tt /Tip load def /tT /Ttip load def
+/halfturn{xysegl 2 div dup dup neg exch rmoveto
+ 0 exch dup exch -180 -90 arc}bind def
+ /aturn{gchksavexy halfturn xystroke}def
+ /bturn{gchksavexy xyopp halfturn xystroke}def
+ /ta /aturn load def /tb /bturn load def
+ /xysqll 231705 dimendiv def
+ /squigl{gchksavexy xysqll dup neg 0 rmoveto
+ 2 div dup dup neg dup 3 -1 roll
+ 2 sqrt mul dup 5 1 roll
+ 135 45 arcn dup 3 -1 roll -135 -45 arc
+ xystroke}def
+ /g /squigl load def
+/fullhook{0 xysegl 2 div dup -90 90 arcn}bind def
+ /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def
+
+/ahook{gchksavexy fullhook xystroke}def
+ /bhook{gchksavexy xyopp fullhook xystroke}def
+ /hook{gchksavexy gsave halfhook stroke grestore
+ xyopp halfhook xystroke}def
+ /h /hook load def /ha /ahook load def /hb /bhook load def
+ /xyqcirc{dup dup neg exch translate newpath
+ dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def
+
+ /circ{gstartxy
+ 3 copy pop 2 copy cos mul 3 1 roll sin mul
+ rmoveto 0 0 5 2 roll arc xystroke}bind def
+ /o /circ load def
+ /circhar{gsave dup 3 gt{7 sub neg}if dup
+ 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul}
+ {0 eq{dup}{0}ifelse}ifelse}ifelse
+ 0 translate 3 1 roll circ grestore}bind def
+ /c /circhar load def
+end end
+%%EndResource
diff --git a/macros/generic/diagrams/xypic/support/dvitogif89a b/macros/generic/diagrams/xypic/support/dvitogif89a
new file mode 100644
index 0000000000..c2d4385b79
--- /dev/null
+++ b/macros/generic/diagrams/xypic/support/dvitogif89a
@@ -0,0 +1,215 @@
+#!/bin/sh
+# $Id: dvitogif89a,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+#
+# Pack consecutive pages of TeX DVI file as GIF89a animation.
+# Copyright (c) 1996-1997 Kristoffer H. Rose <krisrose@tug.org>
+#
+# This file is part of the Xy-pic macro package.
+# Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+# See the README and INSTALL files for further information.
+#
+# The Xy-pic package is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# The Xy-pic package is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this package; if not, see http://www.gnu.org/licenses/.
+
+NAME=`basename $0`
+SYNOPSIS="Usage: $NAME file[.dvi]"
+DESCRIPTION="Pack consecutive pages of TeX DVI file as GIF89a animation."
+
+# Crop efficiently if possible.
+#
+if [ -n "`which pnmrawtopcropwhite`" ]
+then
+ cropwhite="pnmrawtopcropwhite |pnmcrop -white"
+elif [ -x ./pnmrawtopcropwhite ]
+then
+ cropwhite="./pnmrawtopcropwhite |pnmcrop -white"
+else
+ cropwhite="pnmcrop -white"
+fi
+
+# Check files.
+#
+ok=yes
+#
+if [ $# -ne 1 ]; then ok=no; fi
+#
+dvi="$1.dvi"
+if [ ! -f "$dvi" ]
+then
+ dvi="$1"
+ if [ ! -f "$dvi" ]; then ok=no; fi
+fi
+#
+base=`basename "$dvi" .dvi`
+size="$base.size"
+#
+if [ ! -f "$size" ]
+then
+ echo $NAME": could not find $size file!" >&2
+ ok=no
+else
+ eval `cat "$size"`
+ if [ -z "$dpi" -o -z "$delay" ]
+ then
+ echo $NAME": could not interpret $size file!" >&2
+ ok=no
+ fi
+fi
+#
+if [ $ok = no ]
+then
+ echo $SYNOPSIS >&2; exit 2
+fi
+
+# Initialise.
+#
+echo "${NAME}: Animating $base."
+rm -f $base.ps $base.[0-9][0-9][0-9].*
+#
+exec 2>"$base.log"
+set -x
+#
+date "+${NAME} Animating $dvi (log started %c)" >&2
+
+# Produce PostScript file!
+#
+echo -n "Producing PostScript..."
+echo "Producing PostScript:" >&2
+dvips -D $dpi "$base.dvi" -o "$base.ps"
+if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
+echo '' >&2
+
+# Produce PPM files!
+#
+echo -n "Producing PPMs"
+echo "Producing PPMs:" >&2
+echo '' \
+| gs -sOutputFile="|$cropwhite >$base.%03d.ppm" \
+ -sDEVICE=ppmraw -r$dpi - "$base.ps" 2>&1 \
+| while read ln; do
+ echo "$ln" >&2
+ case "$ln" in
+ *cols*off*the*left) echo -n . ;;
+ esac
+ done
+if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
+echo '' >&2
+
+# Measure first image and alert user.
+#
+top=0 bottom=0 left=0 right=0 height=0 width=0
+eval `pnmcrop -black "$base.001.ppm" |pnmfile |\
+ sed -n -e 's/.*[ \t]\([0-9]*\) by \([0-9]*\).*$/ width=\1 height=\2/p'`
+length=`echo $base.[0-9][0-9][0-9].ppm | wc -w | tr -d " \t"`
+#
+echo "Animation has $length frames of ${width}x${height}."
+echo "Length: $length" >&2
+echo "Image size: ${width}x${height}" >&2
+
+# Convert to incremental GIFs!
+#
+echo -n "Producing GIFs"
+lastppm=
+for ppm in $base.[0-9][0-9][0-9].ppm
+do
+
+ echo -n "."
+ echo -e "\nImage: $ppm" >&2
+
+ # filenames
+ gif="`basename $ppm .ppm`.gif"
+
+ # crop black border [sic]
+ mv $ppm $base.000.ppm
+ pnmcrop -black $base.000.ppm >$ppm
+
+ # produce smallest GIF image and add to gifpack command
+ if [ -z "$lastppm" ]
+ then
+
+ # first bitmap is used directly
+ ppmtogif $ppm > $gif
+ gifpack="gifpack -delay $delay $loop -output $base.gif $gif"
+
+ else
+
+ # measure unchanged border
+ top=0 bottom=0 left=0 right=0 height=0 width=0
+ measures="\
+ `( pnmarith -difference $lastppm $ppm | pnmcrop | pnmfile )2>&1 \
+ | sed -n \
+ -e 's/.*cropping \([0-9]*\) .* \([a-z]*\)$/\2=\1/p' \
+ -e 's/.* \([0-9]*\) by \([0-9]*\).*$/width=\1 height=\2/p'`"
+ eval "$measures"
+
+ # if no change just pass top left pixel
+ if [ $width -lt 1 -o $height -lt 1 ]
+ then
+ width=1; height=1; left=1; top=1
+ fi
+
+ # add GIF with changed rectangle to animation
+ pnmcut $left $top $width $height $ppm | ppmtogif >$gif
+ gifpack="$gifpack +$left,+$top $gif"
+
+ fi
+
+ # prepare next image
+ lastppm=$ppm
+
+done
+echo "done"
+echo '' >&2
+
+echo -n "Packing GIFs..."
+echo -e "\nPacking animation:" >&2
+eval $gifpack >&2
+if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
+echo '' >&2
+
+# Clean up.
+#
+rm -f $base.[0-9][0-9][0-9].*
+
+# Done.
+#
+echo Done. >&2
+exit
+
+# $Log: dvitogif89a,v $
+# Revision 3.8 2011/03/14 20:14:00 krisrose
+# Preparing for release 3.8.6.
+#
+# Revision 3.7 2010/06/10 18:45:49 krisrose
+# Reference to GPL by URL.
+#
+# Revision 3.6 2010/04/16 06:06:51 krisrose
+# Preparing for a new release...
+#
+# Revision 3.5 1997/05/28 13:05:01 krisrose
+# Fixed missing breaks bug.
+#
+# Revision 3.4 1997/05/18 01:14:25 krisrose
+# Essential bugfixes.
+#
+# Revision 1.3 1997/05/01 21:32:32 krisrose
+# Changed to exploit pnmrawtopcropwhite hack if available...
+# Output cleaned up; uses log file for the rest.
+#
+# Revision 1.2 1997/05/01 19:23:16 krisrose
+# Doesn't quite work...
+#
+# Revision 1.1 1997/02/11 04:19:23 krisrose
+# Initial revision
+#
+# Based on MakeTeXmovie...
diff --git a/macros/generic/diagrams/xypic/support/install-tds b/macros/generic/diagrams/xypic/support/install-tds
new file mode 100644
index 0000000000..9f7e9b3284
--- /dev/null
+++ b/macros/generic/diagrams/xypic/support/install-tds
@@ -0,0 +1,174 @@
+#!/bin/sh
+# $Id: install-tds,v 3.16 2011/03/14 20:14:00 krisrose Exp $
+#
+# sh(1) installation of Xy-pic into a TeX Directory Structure system.
+# Copyright (c) 1997 Kristoffer H. Rose <krisrose@tug.org>
+#
+# This file is part of the Xy-pic macro package.
+# Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+# See the README and INSTALL files for further information.
+#
+# The Xy-pic package is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# The Xy-pic package is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this package; if not, see http://www.gnu.org/licenses/.
+
+# check that we are in the right place (and get version :)
+
+# greet
+echo ''
+echo ' Welcome to the Xy-pic TDS-compliant installation script!'
+echo ' Copyright (c) 1997-1998 by krisrose@tug.org'
+echo ' Xy-pic is free software: see the User's Guide for details.'
+echo ''
+echo ' The author has seriously tried to ensure the portability of'
+echo ' this script among all un*x platforms, however, if you experience'
+echo ' problems then don't hesitate to contact me.'
+echo ''
+echo ' See the file INSTALL for details about what this script does.'
+
+# record the argument as TEXMF
+: ${TEXMF:=$1}
+
+# if no TEXMF specified try to figure it out
+: ${TEXMF:=`kpsewhich --expand-var='$TEXMFMAIN' 2>/dev/null`}
+: ${TEXMF:=`kpsexpand '$TEXMFMAIN' 2>/dev/null`}
+: ${TEXMF:=`kpsewhich --expand-var='$TEXMF' 2>/dev/null`}
+: ${TEXMF:=`kpsexpand '$TEXMF' 2>/dev/null`}
+
+if [ -d "$TEXMF" ]
+then
+ echo ''
+ echo "TEXMF directory $TEXMF found."
+else
+ echo ''
+ echo 'ERROR: I could not find the TEXMF directory (tried '"$TEXMF"')!' >&2
+ echo 'Usage: ./support/install-tds [TEXMF]' >&2
+ echo 'Xy-pic installation aborted.'
+ exit 2
+fi
+
+# get confirmation
+echo ''
+echo ' This script will install Xy-pic under the indicated TEXMF tree.'
+echo ' We assume that it is the root of a standard TeX Directory Structure.'
+echo ''
+echo ' Also we asume that the commands find, grep, mkdir, and cp, conform'
+echo ' to their POSIX specification and can be found in the standard path.'
+echo ''
+echo 'Type <enter> to continue (anything else to stop - this is your last chance):'
+read reply
+if [ -z "$reply" ];
+then
+ echo ''
+ echo 'Thanks: proceeding with the installation.'
+else
+ echo 'Xy-pic installation aborted.'
+ exit 1
+fi
+
+# warn user about obsolete files
+echo ''
+echo 'Checking for obsolete files.'
+if [ -d "$TEXMF/dvips/xypic" ]
+then
+
+ files=`find "$TEXMF/dvips" -name "xy*.map" -print 2>/dev/null`
+ if [ -n "$files" ]
+ then
+ echo 'WARNING: xy*.map files exist:'
+ echo $files
+ fi
+
+ files=`find "$TEXMF/dvips" -name psfonts.map -print 2>/dev/null`
+ files=`grep -svl '^xy' $files /dev/null`
+ if [ -n "$files" ]
+ then
+ echo 'WARNING: psfonts.map xy*-font mappings exist in:'
+ echo "$files"
+ fi
+
+ files=`find "$TEXMF/fonts/type1" -name "xy*.pf?" -print 2>/dev/null \
+ | grep -v "$TEXMF/fonts/type1/public/xypic/xy.*[.]pfb"`
+ if [ -n "$files" ]
+ then
+ echo 'WARNING: xy*.pfa or xy*.pfb files exist:'
+ echo "$files"
+ fi
+
+fi
+
+# function for installing simple files in a directory
+installd () {
+ text=$1; shift
+ dir=`eval 'echo ${'$#'}'` # extract last parameter
+ echo "Installing $text in $dir."
+ if mkdir -p "$dir"; then cp -f "$@"
+ else
+ echo ' WARNING: could not make directory - files not installed.'
+ fi
+}
+
+# do the actual installation
+echo ''
+echo 'Installing Xy-pic...'
+
+installd "1. administrivia" \
+ README CATALOG TRAILER INSTALL MANIFEST VERSIONS *COPYING \
+ Xy-pic.html Xy-logo.png \
+ "$TEXMF/doc/generic/xypic"
+installd "2. macros" texinputs/* "$TEXMF/tex/generic/xypic"
+installd "3. font metrics" texfonts/*.tfm "$TEXMF/fonts/tfm/public/xypic"
+installd "4. font sources" mfinputs/*.mf "$TEXMF/fonts/source/public/xypic"
+installd "5. ps type1 fonts" type1/*.pfb "$TEXMF/fonts/type1/public/xypic"
+installd "6. ps pfm fonts" pfm/*.pfm "$TEXMF/fonts/pfm/public/xypic"
+installd "7. afm metrics" afm/*.afm "$TEXMF/fonts/afm/public/xypic"
+installd "8. ps headers" ps/* "$TEXMF/dvips/xypic"
+installd "9. ps font maps" map/* "$TEXMF/fonts/map/dvips/xypic"
+installd "10. ps font encodings" enc/* "$TEXMF/fonts/enc/dvips/xypic"
+installd "11. documentation" doc/xyguide.pdf doc/xyrefer.pdf "$TEXMF/doc/generic/xypic"
+
+# done
+echo "Xy-pic installation done."
+exit
+
+# $Log: install-tds,v $
+# Revision 3.16 2011/03/14 20:14:00 krisrose
+# Preparing for release 3.8.6.
+#
+# Revision 3.15 2010/07/26 11:21:02 krisrose
+# 3.8.3 version oopses
+#
+# Revision 3.14 2010/07/06 22:43:56 krisrose
+# Release 3.8.3.
+#
+# Revision 3.13 2010/06/10 18:45:49 krisrose
+# Reference to GPL by URL.
+#
+# Revision 3.12 2010/06/08 07:28:43 krisrose
+# Identify .map file.
+#
+# Revision 3.11 2010/06/07 04:16:53 krisrose
+# Fix forgotten enc files.
+#
+# Revision 3.10 2010/05/09 22:11:05 krisrose
+# Loose /usr/bin prefixes.
+#
+# Revision 3.9 2010/04/22 14:52:09 krisrose
+# Documentation up to date. Install PDF encoding files and XYLU metric files.
+#
+# Revision 3.8 2010/04/16 06:06:51 krisrose
+# Preparing for a new release...
+#
+# Revision 3.7 1999/02/16 15:12:50 krisrose
+# Interim release (Y&Y fonts now free).
+#
+# New with release 3.5...changed significantly for 3.6.
diff --git a/macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c b/macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c
new file mode 100644
index 0000000000..ff6ab48a3c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c
@@ -0,0 +1,183 @@
+/* $Id: pnmrawtopcropwhite.c,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+**
+** Crop off top white lines from raw PBM file (efficiently :)
+** Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@tug.org>
+**
+** This file is part of the Xy-pic package for graphs and diagrams in TeX.
+** Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+**
+** The Xy-pic package is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by the
+** Free Software Foundation; either version 2 of the License, or (at your
+** option) any later version.
+**
+** The Xy-pic package is distributed in the hope that it will be useful, but
+** WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+** or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+** for more details.
+**
+** You should have received a copy of the GNU General Public License along
+** with this package; if not, see http://www.gnu.org/licenses/.
+*/
+static const char Id[] =
+"@(#)$Id: pnmrawtopcropwhite.c,v 3.10 2011/03/14 20:14:00 krisrose Exp $\n";
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/* Globals */
+
+#define PBMRAWMAGIC "P4" /* Portable BitMap magic cookie */
+#define PGMRAWMAGIC "P5" /* Portable GrayMap magic cookie */
+#define PPMRAWMAGIC "P6" /* Portable PixMap magic cookie */
+#define MAGICSIZE 2
+
+static char *me; /* program name */
+
+/* Subroutines */
+
+void oops(void) {
+ fprintf(stderr, "Usage: %s\n", me);
+ exit(1);
+}
+
+void panic(const char *mess) {
+ fprintf(stderr, "Error: %s\nUsage: %s\n", mess, me);
+ exit(2);
+}
+
+void skipcomment(void) {
+ int c;
+ while(1) {
+ switch (c = getchar()) {
+ case EOF: panic("premature EOF on input"); break;
+ case '\n': return;
+ default: break;
+ }
+ }
+}
+
+void skipwhite(void) {
+ int c;
+ while(1) {
+ switch (c = getc(stdin)) {
+ case EOF: panic("premature EOF on input"); break;
+ case ' ': case '\t': case '\r': case '\n': break;
+ case '#': skipcomment(); break;
+ default: ungetc(c, stdin); return;
+ }
+ }
+}
+
+int nextint(const char *what) {
+ int i;
+ skipwhite();
+ if (!scanf("%d", &i)) panic(what);
+ return i;
+}
+
+/* Program */
+
+int main (int argc, char *argv[]) {
+
+ char magic[MAGICSIZE];
+ enum { PBM, PGM, PPM } which;
+ int width, height, newheight, pixelmax;
+
+ int linelength;
+ char *line, *whiteline;
+
+ /* establish identity and proper usage */
+ me = argv[0];
+ if (argc != 1) oops();
+
+ /* magic */
+ if (!fread(magic, 1, MAGICSIZE, stdin))
+ panic("no magic (nothing on standard input)");
+
+ if (!memcmp(magic, PBMRAWMAGIC, MAGICSIZE))
+ which = PBM;
+ else if (!memcmp(magic, PGMRAWMAGIC, MAGICSIZE))
+ which = PGM;
+ else if (!memcmp(magic, PPMRAWMAGIC, MAGICSIZE))
+ which = PPM;
+ else
+ panic("bad magic (standard input not a raw anymap)");
+
+ /* width and height */
+ width = nextint("pixelwidth integer");
+ height = nextint("pixelheight integer");
+ switch (which) {
+ case PBM: pixelmax = 0; break; /* hack (used by memset below) */
+ case PGM: case PPM:
+ pixelmax = nextint("pixelmax integer");
+ if (pixelmax > 255) panic("pixelmax larger than 255");
+ }
+ if (getchar() != '\n')
+ panic("something not a simple newline after width height [pixelmax]");
+
+ /* allocate pixel line */
+ switch (which) {
+ case PBM: linelength = (width + 7) / 8; break;
+ case PGM: linelength = width; break;
+ case PPM: linelength = width * 3; break;
+ }
+ line = (char*)malloc(linelength);
+ if (!line) panic("could not allocate pixel line");
+ whiteline = (char*)malloc(linelength);
+ if (!whiteline) panic("could not allocate white pixel line");
+ memset(whiteline, pixelmax, linelength);
+
+ /* skip white pixel lines */
+ newheight = height;
+ while (fread(line, linelength, 1, stdin)
+ && !memcmp(line, whiteline, linelength)) {
+ newheight--;
+ if (newheight <= 0) panic("entire image blank");
+ }
+
+ /* output revised header */
+ if (newheight < height)
+ fprintf(stderr,"%s: cropping %d rows off the top\n", me, height-newheight);
+ printf("%.*s\n%d %d\n", MAGICSIZE, magic, width, newheight);
+ switch (which) {
+ case PBM: break;
+ case PGM: case PPM:
+ printf("%d\n", pixelmax); break;
+ }
+
+ /* output remainder of image */
+ do {
+ if (!fwrite(line, linelength, 1, stdout)) panic("could not write");
+ } while (fread(line, linelength, 1, stdin));
+ if (!feof(stdin)) panic("input not exhausted");
+
+ return(0);
+}
+
+
+/*
+** $Log: pnmrawtopcropwhite.c,v $
+** Revision 3.10 2011/03/14 20:14:00 krisrose
+** Preparing for release 3.8.6.
+**
+** Revision 3.9 2010/06/10 18:45:49 krisrose
+** Reference to GPL by URL.
+**
+** Revision 3.8 2010/04/16 06:06:51 krisrose
+** Preparing for a new release...
+**
+** Revision 3.7 1999/02/16 15:12:50 krisrose
+** Interim release (Y&Y fonts now free).
+**
+** Revision 1.3 1997/05/01 20:59:51 krisrose
+** Works for all three raw formats now.
+**
+** Revision 1.2 1997/05/01 17:34:58 krisrose
+** Extended to raw PGM and PPM in addition to PBM.
+**
+** Revision 1.1 1997/04/30 21:30:31 krisrose
+** Initial revision
+*/
diff --git a/macros/generic/diagrams/xypic/texfonts/xyatip10.tfm b/macros/generic/diagrams/xypic/texfonts/xyatip10.tfm
new file mode 100644
index 0000000000..1c2a1d492e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyatip10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xybsql10.tfm b/macros/generic/diagrams/xypic/texfonts/xybsql10.tfm
new file mode 100644
index 0000000000..6fcb178833
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xybsql10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xybtip10.tfm b/macros/generic/diagrams/xypic/texfonts/xybtip10.tfm
new file mode 100644
index 0000000000..1c2a1d492e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xybtip10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycirc10.tfm b/macros/generic/diagrams/xypic/texfonts/xycirc10.tfm
new file mode 100644
index 0000000000..545afce044
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycirc10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmat10.tfm b/macros/generic/diagrams/xypic/texfonts/xycmat10.tfm
new file mode 100644
index 0000000000..98f646e332
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmat10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmat11.tfm b/macros/generic/diagrams/xypic/texfonts/xycmat11.tfm
new file mode 100644
index 0000000000..d51fb1769e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmat11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmat12.tfm b/macros/generic/diagrams/xypic/texfonts/xycmat12.tfm
new file mode 100644
index 0000000000..dcb3026bca
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmat12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmbt10.tfm b/macros/generic/diagrams/xypic/texfonts/xycmbt10.tfm
new file mode 100644
index 0000000000..98f646e332
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmbt10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmbt11.tfm b/macros/generic/diagrams/xypic/texfonts/xycmbt11.tfm
new file mode 100644
index 0000000000..d51fb1769e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmbt11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmbt12.tfm b/macros/generic/diagrams/xypic/texfonts/xycmbt12.tfm
new file mode 100644
index 0000000000..dcb3026bca
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmbt12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xydash10.tfm b/macros/generic/diagrams/xypic/texfonts/xydash10.tfm
new file mode 100644
index 0000000000..6fc35039ae
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xydash10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeuat10.tfm b/macros/generic/diagrams/xypic/texfonts/xyeuat10.tfm
new file mode 100644
index 0000000000..3fc8aa911a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeuat10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeuat11.tfm b/macros/generic/diagrams/xypic/texfonts/xyeuat11.tfm
new file mode 100644
index 0000000000..4076825a6e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeuat11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeuat12.tfm b/macros/generic/diagrams/xypic/texfonts/xyeuat12.tfm
new file mode 100644
index 0000000000..5ab3d4612a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeuat12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeubt10.tfm b/macros/generic/diagrams/xypic/texfonts/xyeubt10.tfm
new file mode 100644
index 0000000000..3fc8aa911a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeubt10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeubt11.tfm b/macros/generic/diagrams/xypic/texfonts/xyeubt11.tfm
new file mode 100644
index 0000000000..4076825a6e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeubt11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeubt12.tfm b/macros/generic/diagrams/xypic/texfonts/xyeubt12.tfm
new file mode 100644
index 0000000000..5ab3d4612a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeubt12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyline10.tfm b/macros/generic/diagrams/xypic/texfonts/xyline10.tfm
new file mode 100644
index 0000000000..b6965721ee
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyline10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyluat10.tfm b/macros/generic/diagrams/xypic/texfonts/xyluat10.tfm
new file mode 100644
index 0000000000..f1cea0101c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyluat10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyluat11.tfm b/macros/generic/diagrams/xypic/texfonts/xyluat11.tfm
new file mode 100644
index 0000000000..bf0b08c974
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyluat11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyluat12.tfm b/macros/generic/diagrams/xypic/texfonts/xyluat12.tfm
new file mode 100644
index 0000000000..197e248e42
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyluat12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xylubt10.tfm b/macros/generic/diagrams/xypic/texfonts/xylubt10.tfm
new file mode 100644
index 0000000000..f1cea0101c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xylubt10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xylubt11.tfm b/macros/generic/diagrams/xypic/texfonts/xylubt11.tfm
new file mode 100644
index 0000000000..bf0b08c974
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xylubt11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xylubt12.tfm b/macros/generic/diagrams/xypic/texfonts/xylubt12.tfm
new file mode 100644
index 0000000000..197e248e42
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xylubt12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xymisc10.tfm b/macros/generic/diagrams/xypic/texfonts/xymisc10.tfm
new file mode 100644
index 0000000000..9de7ce48e3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xymisc10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyqc10.tfm b/macros/generic/diagrams/xypic/texfonts/xyqc10.tfm
new file mode 100644
index 0000000000..1ac87cf999
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyqc10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texinputs/movie.cls b/macros/generic/diagrams/xypic/texinputs/movie.cls
new file mode 100644
index 0000000000..6486901aa8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/movie.cls
@@ -0,0 +1,333 @@
+%% $Id: movie.cls,v 3.7 2011/03/14 20:14:00 krisrose Exp $ -*-latex-*-
+%%
+%% ``LaTeX Movie'' document class for DVI animations.
+%% Copyright (c) 1994-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+
+\NeedsTeXFormat{LaTeX2e}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version.
+
+\def\next$#1: #2 #3${#2}
+\edef\next{\noexpand\ProvidesClass{movie}%
+ [\next$Date: 2011/03/14 20:14:00 $
+ Movies in LaTeX v.\next$Revision: 3.7 $.]}\next
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Options.
+
+% nocaption (omit caption at lower left; default)
+% caption (include caption)
+\newif\ifm@caption
+\DeclareOption{nocaption}{\m@captionfalse}
+\DeclareOption{caption}{\m@captiontrue}
+
+% nocount (omit count at lower left; default)
+% count (include count)
+\newif\ifm@count
+\DeclareOption{nocount}{\m@countfalse}
+\DeclareOption{count}{\m@counttrue}
+
+% notime (omit elapsed time in "seconds"; default)
+% time (include elapsed time)
+\newif\ifm@time
+\DeclareOption{notime}{\m@timefalse}
+\DeclareOption{time}{\m@timetrue}
+
+% loop (make the animation loop; default)
+% once (don't loop)
+\def\loop@@{-ns2}
+\DeclareOption{loop}{\def\loop@@{-ns2}}
+\DeclareOption{once}{\def\loop@@{-once}}
+
+% Paper size (ignored since result is never printed).
+\DeclareOption{a4paper}{}
+\DeclareOption{a5paper}{}
+\DeclareOption{b5paper}{}
+\DeclareOption{letterpaper}{}
+\DeclareOption{legalpaper}{}
+\DeclareOption{executivepaper}{}
+\DeclareOption{landscape}{}
+
+%\vsize=9in \voffset=0in
+%\hsize=7in \hoffset=0in % safe? :)
+
+\newdimen\textheight \textheight=\vsize
+\newdimen\textwidth \textwidth=\hsize
+
+% Font size.
+\renewcommand\normalsize{\fontsize{10}{12}\selectfont}
+\DeclareOption{10pt}{\renewcommand\normalsize{\fontsize{10}{12}\selectfont}}
+\DeclareOption{11pt}{\renewcommand\normalsize{\fontsize{11}{13}\selectfont}}
+\DeclareOption{12pt}{\renewcommand\normalsize{\fontsize{12}{14}\selectfont}}
+
+% Driver (passed on to packages).
+\DeclareOption{cmactex}{\OptionNotUsed}
+\DeclareOption{dvips}{\OptionNotUsed}
+\DeclareOption{dvitops}{\OptionNotUsed}
+\DeclareOption{emtex}{\OptionNotUsed}
+\DeclareOption{ln}{\OptionNotUsed}
+\DeclareOption{oztex}{\OptionNotUsed}
+\DeclareOption{textures}{\OptionNotUsed}
+\DeclareOption{xdvi}{\OptionNotUsed}
+
+% ...remaining options are numeric assignments...
+\def\m@keys{}
+\def\add@m@keys#1{\expandafter\def\expandafter\m@keys\expandafter{\m@keys,#1}}
+\DeclareOption*{\expandafter\add@m@keys\expandafter{\CurrentOption}}
+
+\ProcessOptions*
+
+\LoadClass{article}
+\pagestyle{empty}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dependencies.
+
+\RequirePackage{keyval} % key=value pair support
+\input xy % Xy-pic kernel (not package to prevent clash)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Parameters (set via options or the setup).
+
+% pixel=<dimen> (makes \pixels{<number>} a valid <dimen>; default: 1in/300)
+% dpi=<number> (dots per inch ~ pixel=1in/number)
+\newdimen\m@pixel \m@pixel=0.0033333333in
+\define@key{movie}{pixel}{\m@pixel=#1\relax}
+\define@key{movie}{dpi}{\m@pixel=1in \divide \m@pixel by #1\relax}
+
+% height=<dimen>
+% width=<dimen>
+\newdimen\m@height \m@height=2in
+\newdimen\m@width \m@width=2in
+\define@key{movie}{height}{\m@height=#1\relax}
+\define@key{movie}{width}{\m@width=#1\relax}
+
+% tick=<fraction> (set the duration of each frame to <fraction> seconds)
+% fps=<number> (frames per second ~ tick=1/number)
+\newdimen\m@tick \m@tick=0.083333333pt
+\define@key{movie}{tick}{\m@tick=#1pt\relax}
+\define@key{movie}{fps}{\m@tick=1pt \divide \m@tick by #1\relax}
+
+\def\next#1{\setkeys{movie}{#1}}
+\expandafter\next\expandafter{\m@keys}
+\let\m@keys=\undefined
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Setting parameters explicitly...
+
+\def\MovieSetup#1{\setkeys{movie}{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Internals.
+
+\def\m@caption{}
+
+\countdef\m@scene=1 % count1 = scene#
+\countdef\m@frame=2 % count2 = frame# (in scene)
+
+\font\fiverm=cmr5 % safe small font
+
+\newdimen\m@total \m@total=0pt % total elapsed time
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% User accessible progress macros:
+
+\def\theFrame{0}
+\def\theScene{0}
+
+\def\theF{0}
+\def\theFr{1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% User command: \scene [<fraction>] {...}
+%
+% Produce scene of <fraction> seconds (default: 1.0) with each frame produced
+% by ... centered in vertical mode.
+
+\newif\iflastframe@
+\newdimen\m@length % duration of scene
+\newdimen\m@init % start of zoom
+
+\newcommand\scene{%
+ \@ifnextchar*{\lastframe@true \DN@*{\scene@i}\next@}%
+ {\lastframe@false \scene@i}}
+
+\newcommand\scene@i[1][1]{\scene@ii{#1}}
+
+\def\setm@caption#1{\xdef\m@caption{#1}}
+
+\long\def\scene@ii#1#2{{%
+ \let\caption=\setm@caption
+ \global\advance\m@scene\@ne \edef\theScene{\the\m@scene}%
+ \global\m@frame=\z@ \m@length=#1pt \m@init=\z@
+ \loop
+ \dimen@=\m@frame\m@tick
+ \ifdim\dimen@<\m@length
+ \scene@frame{#2}%
+ \repeat
+ \iflastframe@ \scene@frame{#2}\fi
+ \dimen@=#1pt \advance\dimen@ by -\m@frame\m@tick
+ \ifdim.1\m@tick<\ifdim\dimen@<\z@-\fi\dimen@
+ \dimen@=\m@frame\m@tick
+ \@warning{scene \the\m@scene\space rounded from #1 to
+ \expandafter\unPT@\the\dimen@\space seconds}%
+ \fi}\ignorespaces}
+
+\def\scene@frame#1{\frame@compute
+ \null
+ \vfill
+ \hrule width\m@width
+ \hbox to\m@width{\hss
+ \vbox to\m@height{\hsize=\m@width \null\vfil{#1}\vfil\null}%
+ \hss}%
+ \setbox0=\hbox{%
+ \setbox0=\hbox to\m@width{\hss\fiverm\strut
+ \ifm@caption \m@caption \fi
+ \ifm@time \quad \m@nicetotal s \fi
+ \ifm@count \quad \the\m@scene.%
+ \ifnum\m@frame<100 0\ifnum\m@frame<10 0\fi\fi\the\m@frame\fi}%
+ \dimen0=\dp0 \ht0=0pt \dp0=0pt \raise\dimen0\box0}%
+ \ht0=0pt \dp0=0pt \box0\relax
+ \hrule width\m@width
+ \global\advance\m@frame\@ne
+ \global\advance\m@total\m@tick
+ \eject}
+
+\def\frame@compute{%
+ \edef\theFrame{\the\m@frame}%
+ \dimen@=\m@frame\m@tick \advance\dimen@-\m@init
+ \ifdim\dimen@<\z@ \dimen@=\z@ \fi
+ \ifdim\dimen@>\m@length \dimen@=\m@length \fi
+ \quotient@\theF\dimen@\m@length
+ \dimen@=-\dimen@ \advance\dimen@\m@length
+ \quotient@\theFr\dimen@\m@length}
+
+\def\m@nicetotal{%
+ \edef\tmp{\expandafter\removePT@\the\m@total}%
+ \expandafter\twodecimals@\tmp 00@}
+\def\twodecimals@#1.#2#3#4@{#1.#2#3}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Triggers.
+%
+% Triggers are used to make the individual frames in a scene different! :)
+
+% \F{C} expands to C(F) where F = (#frames / frame#) ; 0.0 < F <= 1.0 .
+% \Fr{C} expands to C(Fr) where Fr = 1 - F .
+
+\def\F{\expandafter\F@\expandafter{\theF}}
+\def\Fr{\expandafter\F@\expandafter{\theFr}}
+
+\def\F@#1#2{#2(#1)}
+
+% \Zoom[A;B]{C} expands C zooming onto the interval [A;B], i.e., within C the
+% interval [0;1] really denotes the (current) interval [A;B] ...
+
+% Specifically: F F inside [A;B]
+% 0;A 0
+% A;B F-A / B-A
+% B;1 1
+
+\newcommand\Zoom[1][0;1]{\Zoom@#1;}
+\def\Zoom@#1;#2;#3{{%
+ \dimen@=#1\m@length \advance\dimen@\m@init
+ \m@length=#2\m@length \advance\m@length\m@init
+ \advance\m@length-\dimen@ \m@init=\dimen@
+ \frame@compute #3}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Preliminary FADING support...
+%
+% by Ross Moore; depends on Xy-pic `ps' backend...
+%
+% use as a <shape> modifier: \drop[<colour>][!\F\lighten]<object>
+% use as a <shape> modifier: \drop[<colour>][!\F\darken}]<object>
+%
+% \lighten(1) = white \lighten(0) = natural colour
+% \darken (1) = black \darken (0) = natural colour
+%
+\def\lighten@(#1){/@col #1 def{1 sub 1 @col sub mul 1 add}settransfer}
+\def\darken@(#1){/@col #1 def{1 @col sub mul}settransfer}
+
+\xywithoption{ps}{\let\lighten=\lighten@ \let\darken=\darken@}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dump size file.
+%
+\AtEndDocument{\dumpsizefile}
+
+\newwrite\m@write
+
+{\catcode`p=12 \catcode`t=12 \gdef\unPT@#1pt{#1}}
+
+\def\dumpsizefile{\immediate\openout\m@write=\jobname.size
+%
+ \dimen@=1in \divide\dimen@\m@pixel
+ \immediate\write\m@write{dpi=\number\dimen@}%
+%
+ \dimen@=\m@tick \multiply\dimen@ by 1000\advance\dimen@.5\m@tick
+ \divide\dimen@\p@ \immediate\write\m@write{delay=\number\dimen@}%
+%
+ \immediate\write\m@write{loop=\loop@@}%
+%
+ \immediate\closeout\m@write}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Misc. class-provided commands...
+
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The End.
+
+\endinput
+
+% $Log: movie.cls,v $
+% Revision 3.7 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.6 2010/06/10 18:45:49 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.5 2010/04/16 06:06:51 krisrose
+% Preparing for a new release...
+%
+% Revision 3.4 1997/05/18 01:14:25 krisrose
+% Essential bugfixes.
+%
+% Revision 1.5 1997/05/13 12:36:26 krisrose
+% Intermediate version; factors function nicely.
+%
+% Revision 1.4 1997/05/01 21:55:44 krisrose
+% Works again.
+%
+% Revision 1.3 1997/02/11 04:20:19 krisrose
+% Fits new dvitogif89a 1.1 :)
+%
+% Moved to Xy-pic hierarchy.
diff --git a/macros/generic/diagrams/xypic/texinputs/xy.sty b/macros/generic/diagrams/xypic/texinputs/xy.sty
new file mode 100644
index 0000000000..29218a0a26
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy.sty
@@ -0,0 +1,137 @@
+%% $Id: xy.sty,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% ``Xy-pic as LaTeX 2.09 style option and LaTeX 2e package''.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+
+% Load Xy-pic with catcode of @ set as it will be in user text:
+\count255=\the\catcode`\@ {\catcode`\@=11 \xdef\xystycatcode{\the\count255}}
+\makeatletter
+
+% REPAIR bug of the 2e version of AMS-LaTeX where \makeatother is broken...
+\ifx\@ifpackageloaded\undefined \makeatother
+\else \@ifpackageloaded{amstex}{\catcode`\@=\active}{\makeatother}\fi
+
+\input xy
+
+% That is all unless this is called as a LaTeX2e `native mode' package. Is
+% there an official way to check this? Anyway, this seems to work:
+\makeatletter
+\ifx\if@compatibility\undefined \catcode`\@=\xystycatcode \endinput \fi
+
+% Ensure that we are *really* running LaTeX2e...!
+\NeedsTeXFormat{LaTeX2e}
+
+% So we can check for pdfTeX.
+\RequirePackage{ifpdf}
+
+% This file provides the current version of Xy-pic!
+\edef\next{%
+ \noexpand\ProvidesPackage{xy}[\xydate\space Xy-pic version \xyversion]}\next
+
+% Recognise some standard LaTeX2e class options (cf. old `LaTeX Companion' p.317):
+\DeclareOption{cmactex}{\xyoption{dvips}} % Thomas Kiffe's CMacTeX uses dvips
+\DeclareOption{dvips}{\xyoption{dvips}\xyoption{ps}}
+\DeclareOption{dvitops}{\xyoption{dvitops}\xyoption{ps}}
+\DeclareOption{emtex}{\xyoption{emtex}}
+\DeclareOption{ln}{\xywarning@{`ln' DVI driver not yet fully supported}}
+\DeclareOption{oztex}{\xyoption{oztex}}
+\DeclareOption{textures}{\xyoption{textures}}
+\DeclareOption{xdvi}{\xyoption{xdvi}}
+
+% Recognise standard aliases for the pdf option.
+\DeclareOption{pdftex}{\xyoption{pdf}}
+\DeclareOption{dvipdfm}{\xyoption{pdf}}
+\DeclareOption{dvipdfmx}{\xyoption{pdf}}
+
+% This is special.
+\DeclareOption{colour}{\xyoption{color}} % :-)
+
+% This (obsolete) cmtip style option should be activated after loading:
+\DeclareOption{cmtip}{\xyoption{cmtip}\UseComputerModernTips}
+
+% Pass the desired tip size if defined
+\DeclareOption{10pt}{\xywithoption{tips}{\def\tipsize@@{10}}}
+\DeclareOption{11pt}{\xywithoption{tips}{\def\tipsize@@{11}}}
+\DeclareOption{12pt}{\xywithoption{tips}{\def\tipsize@@{12}}}
+
+% Other options are just loaded.
+\DeclareOption*{\edef\next{\noexpand\xyoption{\CurrentOption}}\next}
+
+% Reinstall catcode of @...
+\catcode`\@=\xystycatcode
+
+% ...and process the options.
+\ProcessOptions\relax
+
+% Now, if no backend is loaded but we can generate PDF, do.
+\ifpdf\makeatletter
+ \ifx\xydriversloaded@@\xydriversloaded@none
+ \makeatother\xyoption{pdf}\fi\fi
+
+% That's all.
+\endinput
+
+% $Log: xy.sty,v $
+% Revision 3.10 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.9 2010/06/10 18:45:49 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/28 07:14:30 krisrose
+% New Xy-pic home page installed.
+%
+% Revision 3.7 2010/04/26 01:45:23 krisrose
+% First proper integration of xypdf into Xy-pic "make dist".
+%
+% Revision 3.6 2010/04/25 21:48:06 krisrose
+% First proper integration of xypdf into Xy-pic "make dist".
+%
+% Revision 3.5 2010/04/20 20:36:43 krisrose
+% Documentation updates.
+%
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.1 1995/09/05 20:31:32 kris
+% Releasing!
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Revision 2.9 1994/06/09 14:59:19 kris
+% Release 3beta.
+%
+% Revision 2.8 1994/04/08 04:30:00 kris
+% Second (bug fix) 3alpha release.
+%
+% Revision 2.7 1994/03/08 02:06:01 kris
+% Release 3alpha.
+%
+% New for version 2.7.
diff --git a/macros/generic/diagrams/xypic/texinputs/xy.tex b/macros/generic/diagrams/xypic/texinputs/xy.tex
new file mode 100644
index 0000000000..0ea737b2ab
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy.tex
@@ -0,0 +1,2694 @@
+%% xy.tex from $Id: xy.doc,v 3.35 2013/10/06 01:14:17 krisrose Exp $
+%%
+%% Basic Xy-pictures: Xy-pic bootstrap and kernel macros.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined\else\message{not reloaded}\endinput\fi
+\let\xyloaded=\relax
+\message{Bootstrap\string'ing\string:}
+{\catcode96 12\catcode`\#6\catcode`\.12\catcode`\:12\catcode`\'12\catcode`\@11
+\ifx\xywarnifdefined\undefined\else \immediate\write16{}%
+ \immediate\write16{Xy-pic Warning: \string\xywarnifdefined\space redefined.}%
+ \immediate\write16{}\fi
+\gdef\xywarnifdefined#1{\ifx#1\undefined\else \immediate\write16{}%
+ \immediate\write16{Xy-pic Warning: `\string#1' redefined.}%
+ \immediate\write16{}\fi}
+\xywarnifdefined\xydef@ \gdef\xydef@#1{\xywarnifdefined#1\gdef#1}
+\xywarnifdefined\xylet@ \gdef\xylet@#1{\xywarnifdefined#1\global\let#1}
+\xywarnifdefined\xynew@
+ \gdef\xynew@#1#2{\xywarnifdefined#2\csname new#1\endcsname#2}}
+\message{catcodes\string,}
+\xywarnifdefined\xyuncatcodes
+\xywarnifdefined\xyreuncatcodes \def\xyreuncatcodes{\edef\xyuncatcodes{%
+ \catcode92 0 \catcode123 1 \catcode125 2 \catcode37 14
+ \catcode 9 \the\catcode 9 \catcode10 \the\catcode10 \catcode12 \the\catcode12
+ \catcode35 \the\catcode35 \catcode36 \the\catcode36 \catcode38 \the\catcode38
+ \catcode43 \the\catcode43 \catcode45 \the\catcode45 \catcode46 \the\catcode46
+ \catcode47 \the\catcode47
+ \catcode60 \the\catcode60 \catcode61 \the\catcode61 \catcode62 \the\catcode62
+ \catcode64 \the\catcode64 \catcode96 \the\catcode96
+ \newlinechar \the\newlinechar \endlinechar \the\endlinechar }}
+\xyreuncatcodes
+\xywarnifdefined\xycatcodes \def\xycatcodes{%
+ \catcode 9 10
+ \catcode 35 6 \catcode 36 3 \catcode 38 4
+ \catcode 43 12 \catcode 45 12 \catcode 46 12 \catcode 47 12
+ \catcode 60 12 \catcode 61 12 \catcode 62 12
+ \catcode 64 11 \catcode 96 12 }
+\xycatcodes
+\message{docmode,}
+{\catcode`\|0 \xywarnifdefined|DOCMODE
+\gdef|DOCMODE#1{\ifx(#1\relax \xycatcodes \expandafter\ignorespaces
+ \else \skipspecials@ \expandafter\docm@\fi}%
+\xywarnifdefined\skipspecials@
+\gdef\skipspecials@{%
+ \catcode`\\12 \catcode`\{12 \catcode`\}12 \catcode`\#12 \catcode`\%12
+ \catcode`\^^L12 \endlinechar`\^^J }%
+\catcode`\/=12 \lccode`\/`\\%
+\lccode`\D`\D \lccode`\O`\O \lccode`\C`\C \lccode`\M`\M \lccode`\E`\E
+\lowercase{%
+\xywarnifdefined\docm@ \gdef\docm@{\docm@i}%
+\xywarnifdefined\docm@i \gdef\docm@i#1^^J{\docm@ii#1/DOCMODE\docm@iii}%
+\xywarnifdefined\docm@ii
+ \gdef\docm@ii#1/DOCMODE{\def\next@{#1}\futurelet\next\docm@iii}%
+\xywarnifdefined\docm@iii \gdef\docm@iii#1\docm@iii{%
+ \ifx\next\docm@iii \let\next\next@ \docecho@ \let\next@\docm@
+ \else\ifx\next@\empty \let\next@\docfinish@
+ \else \edef\next@{\noexpand\docm@iv\next@/DOCMODE#1\noexpand\docm@iv}%
+ \fi\fi \next@}%
+\xywarnifdefined\docm@iv
+ \gdef\docm@iv#1/DOCMODE\docm@iv{\def\next{#1}\docecho@ \docm@}}%
+\xywarnifdefined\docecho@ \global\let\docecho@\relax
+\xywarnifdefined\docfinish@ \gdef\docfinish@{\xyuncatcodes|DOCMODE\next}}
+\xydef@\xydefcsname@#1{\DN@{#1}\DNii@##1{%
+ \ifx ##1\relax\else \xywarning@{\string`\string##1\string' redefined}\fi
+ \def##1}%
+ \expandafter\nextii@\csname\codeof\next@\endcsname}
+\xydef@\xyletcsnamecsname@#1#2{\def\1{#1}\def\2{#2}\DN@##1##2{%
+ \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined}\fi
+ \let##1=##2}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\csname\expandafter\codeof\expandafter\1\expandafter\endcsname
+ \csname\codeof\2\endcsname}
+\xywarnifdefined\codeof
+\xywarnifdefined\codeof@
+{\catcode`\:=12
+ \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:}
+ \gdef\codeof@#1:->#2<-:{#2}}
+\xywarnifdefined\addAT@
+\xywarnifdefined\addHASH@
+\xywarnifdefined\addDOLL@
+\xywarnifdefined\addAND@
+\xywarnifdefined\addRQ@
+\xywarnifdefined\addPLUS@
+\xywarnifdefined\addDASH@
+\xywarnifdefined\addDOT@
+\xywarnifdefined\addLT@
+\xywarnifdefined\addEQ@
+\xywarnifdefined\addGT@
+\xywarnifdefined\addLQ@
+\xydef@\xymakeADD@#1#2 #3 {\ifnum\catcode#3=6 \def#1##1{##1#2#2}%
+ \else \def#1##1{##1#2}\fi}
+\xydef@\xyrecat@{\xymakeADD@\addAT@}
+\xydef@\xyrecat{\xyrecat@}
+\xydef@\xyresetcatcodes{\def\xyrecat{\xyrecat@}\xyreuncatcodes
+ \input xyrecat \relax \xyuncatcodes}
+\xyuncatcodes \xyresetcatcodes \xycatcodes
+\xydef@\testAND@{{\aftergroup\ifx
+ \addAND@\ifx\next\addFalse@\else\addTrue@\fi}}
+\xydef@\addFalse@{\aftergroup\iffalse}
+\xydef@\addTrue@{\aftergroup\iftrue}
+\input xyidioms
+\xydef@\stripRCS$#1${\stripRCS@#1: @@ @@@}
+\xydef@\stripRCS@#1: #2@ #3@@@{%
+ \ifx @#2\string?\else\ifx :#2\else\stripRCS@@#2\fi\fi}
+\xydef@\stripRCS@@#1 #2: @{#1}
+\xydef@\xyversion{3.8.9}
+\edef\next{\stripRCS$Date: 2013/10/06 01:14:17 $}
+\xylet@\xydate=\next
+\xydef@\Xygreet@{%
+ \W@{}%
+ \W@{ Xy-pic version \xyversion\space<\xydate>}%
+ \W@{ Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others}%
+ \W@{ Xy-pic is free software: see the User\string's Guide for details.}%
+ \W@{}}
+\Xygreet@
+\expandafter\everyjob\expandafter{\the\everyjob\Xygreet@}
+\message{Loading kernel:}
+\xydef@\Xy@{\leavevmode
+ \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}}
+\ifx\undefined\DeclareRobustCommand\let\Xy=\Xy@
+\else\DeclareRobustCommand{\Xy}{\Xy@}\fi
+\message{messages;}
+\xywarnifdefined\thelineno@
+\ifx\inputlineno\undefined \edef\thelineno@{\string?}
+\else \def\thelineno@{\the\inputlineno}\fi
+\xydef@\xytracelineno@{ \string[\jobname:\thelineno@\string]}
+\xydef@\xywarning@#1{{\newlinechar=10
+ \W@{}\W@{Xy-pic Warning: #1\xytracelineno@.}\W@{}}}
+\xydef@\xyerror@#1#2{\if\inxy@\xy@{ERROR #1}{}\fi
+ {\def\2{#2}\newlinechar=10
+ \ifx\2\empty \errhelp{See the Xy-pic manual for further information.}%
+ \else \errhelp{#2}\fi
+ \errmessage{Xy-pic error: #1}}}
+\xydef@\xybug@#1{{\newlinechar=10
+ \errhelp{This is a bug in Xy-pic and should not happen!^^J%
+If it did then please send a bug report with the offending Xy-pic code^^J%
+to the author of Xy-pic, krisrose@tug.org.}%
+ \errmessage{Xy-pic BUG: #1 -- notify krisrose@tug.org.}}}
+\message{fonts;}
+\xydef@\xyfont@#1{\ifx#1\undefined \DN@{\global\font#1}\expandafter\next@
+ \else \xywarning@{Using previously loaded \string#1\space font}\fi}
+\xyfont@\xydashfont=xydash10
+\xydef@\xydashl@{\fontdimen6\xydashfont}
+\xydef@\xydashh@{\fontdimen5\xydashfont}
+\xydef@\xydashw@{\fontdimen8\xydashfont}
+\xyfont@\xyatipfont=xyatip10
+\xyfont@\xybtipfont=xybtip10
+\xyfont@\xybsqlfont=xybsql10
+\xydef@\xybsqll@{\fontdimen6\xybsqlfont}
+\xydef@\xybsqlh@{\fontdimen5\xybsqlfont}
+\xydef@\xybsqlw@{\fontdimen8\xybsqlfont}
+\xyfont@\xycircfont=xycirc10
+\message{allocations:}
+\message{state,}
+\xynew@{dimen}\X@c
+\xynew@{dimen}\Y@c
+\xynew@{dimen}\U@c
+\xynew@{dimen}\D@c
+\xynew@{dimen}\L@c
+\xynew@{dimen}\R@c
+\xynew@{toks}\Edge@c
+\xynew@{dimen}\X@p
+\xynew@{dimen}\Y@p
+\xynew@{dimen}\U@p
+\xynew@{dimen}\D@p
+\xynew@{dimen}\L@p
+\xynew@{dimen}\R@p
+\xynew@{toks}\Edge@p
+\xynew@{dimen}\X@origin \X@origin=\z@
+\xynew@{dimen}\Y@origin \X@origin=\z@
+\xynew@{dimen}\X@xbase \X@xbase=1mm
+\xynew@{dimen}\Y@xbase \Y@xbase=\z@
+\xynew@{dimen}\X@ybase \X@ybase=\z@
+\xynew@{dimen}\Y@ybase \Y@ybase=1mm
+\xynew@{dimen}\X@min
+\xynew@{dimen}\Y@min
+\xynew@{dimen}\X@max
+\xynew@{dimen}\Y@max
+\xynew@{box}\lastobjectbox@
+\xynew@{box}\zerodotbox@
+\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@
+ \kern-\dimen@ \vrule width\xydashw@ height\dimen@ depth\dimen@}
+\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
+\xynew@{dimen}\almostz@ \almostz@=50sp
+\xydef@\zz@#1{\ifdim#1<\z@-\fi#1<\almostz@\relax}
+\xynew@{if}\iftmp@
+\message{direction,}
+\xynew@{dimen}\d@X
+\xynew@{dimen}\d@Y
+\xydef@\sd@X{}
+\xydef@\sd@Y{}
+\xynew@{count}\K@ \K@=1024
+\xynew@{count}\KK@ \KK@=32
+\xynew@{count}\Direction
+\xynew@{dimen}\K@dXdY
+\xynew@{dimen}\K@dYdX
+\xydef@\cosDirection{}
+\xydef@\sinDirection{}
+\xywarnifdefined\DirectionChar
+\xywarnifdefined\SemiDirectionChar
+\xynew@{read}\xyread@
+\xynew@{write}\xywrite@
+\xynew@{count}\csp@
+\xynew@{dimen}\quotPTK@
+\message{utility macros;}
+\xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}}
+\xydef@\xyinputorelse@#1#2{%
+ \expandafter\let\expandafter\next@\csname#1loaded\endcsname
+ \ifx\next@\empty \else
+ \DN@{\xyinputorelse@@{#1}{\xyinputorelse@@{#1.doc}{#2}}}%
+ \fi \next@}
+\xydef@\xyinputorelse@@#1#2{\openin\xyread@=#1
+ \ifeof\xyread@ \DN@{#2}\else \DN@{\closein\xyread@\input#1 }\fi \next@}
+\global\csp@=\z@
+\xydef@\enter@#1{\global\advance\csp@\@ne
+ \expandafter\xdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces}
+\xydef@\nter@#1{\global\advance\csp@\@ne
+ \expandafter\gdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces}
+\xydef@\dontleave@{\csname cs@\number\csp@\endcsname}
+\xydef@\unenter@{\global\advance\csp@\m@ne}
+\xydef@\leave@{\expandafter\unenter@\csname cs@\number\csp@\endcsname}
+\quotPTK@=\p@ \divide\quotPTK@\K@
+\xylet@\quotsign@@=\empty
+\xywarnifdefined\removePT@
+{\catcode`p=12 \catcode`t=12 \gdef\removePT@#1pt{#1}}
+\xydef@\quotient@#1#2#3{\A@=#2\relax \B@=#3\relax
+ \ifdim\A@<\z@\def\quotsign@@{-}\else\def\quotsign@@{+}\fi
+ \ifdim\quotsign@@\A@<15pt \multiply\A@\K@
+ \else\ifdim\quotsign@@\A@<511pt \multiply\A@\KK@
+ \advance\B@\ifdim\B@<\z@-\fi 16sp \divide\B@\KK@
+ \else
+ \advance\B@\ifdim\B@<\z@-\fi 512sp \divide\B@\K@
+ \fi\fi
+ \ifdim\ifdim\B@<\z@-\fi\B@<\quotPTK@ \xywarning@{division overflow}%
+ \else \advance\A@.5\B@ \divide\A@\B@ \fi
+ \multiply\A@\quotPTK@ \edef#1{\expandafter\removePT@\the\A@}}
+\xydef@\quotient@@#1#2#3{\A@=#2\relax \B@=#3\relax \multiply\A@\KK@
+ \advance\B@\ifdim\B@<\z@-\fi 128sp \divide\B@\KK@ \divide\B@ 8
+ \ifdim\B@=\z@\else \advance\A@.5\B@ \divide\A@\B@ \fi
+ \B@=.125\quotPTK@ \multiply\A@\B@ \edef#1{\expandafter\removePT@\the\A@}}
+\xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi
+\xydef@\iterate@{\body@\expandafter\iterate@\else\fi}
+\xydef@\xyinitial@#1#2{\DN@{#1}%
+ \xyerror@{command used out of context: \codeof\next@}{}}
+\xylet@\xy@=\xyinitial@
+\xylet@\oxy@=\xy@
+\xydef@\change@oxy@#1{\let\oxy@=#1\relax
+}
+\xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi}
+\xydef@\xyxy@@ix@{\begingroup
+ \xyuncatcodes\afterassignment\endgroup\global\toks9=}
+\xydef@\xy@@{\xy@{}}
+\xydef@\plainxy@{\let\xy@=\xyxy@ \change@oxy@\xy@ \let\xy@@ix@=\xyxy@@ix@}
+\message{pictures: \string\xy,}
+\xydef@\xy{\ifmmode\expandafter\xymath@\else\expandafter\xynomath@\fi}
+\xydef@\xymath@{\hbox\bgroup \dimen@=\the\fontdimen22\textfont\tw@ \xyinside@}
+\xydef@\xynomath@{\hbox\bgroup \dimen@=\z@ \xyinside@}
+\xydef@\xyinside@{%
+ \saveXyStyle@ \aftergroup\xycheck@end
+ \setboxz@h\bgroup
+ \plainxy@
+ \X@c=\z@ \Y@c=\z@ \czeroEdge@
+ \X@p=\z@ \Y@p=\z@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}%
+ \X@min=\hsize \X@max=-\hsize \Y@min=\hsize \Y@max=-\hsize
+ \mathsurround=\z@
+ \expandafter\POS\everyxy@@}
+\xydef@\czeroEdge@{\U@c=\z@ \D@c=\U@c \L@c=\U@c \R@c=\U@c \Edge@c={\zeroEdge}}
+\xydef@\xyxy@#1#2{#2}
+\xywarnifdefined\everyxy
+\expandafter\def\addEQ@\everyxy#1{\def\everyxy@@{#1}\ignorespaces}
+\xylet@\everyxy@@=\empty
+\xydef@\endxy{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi
+ \relax
+ \dimen@=\Y@max \advance\dimen@-\Y@min
+ \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi
+ \dimen@=\X@max \advance\dimen@-\X@min
+ \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi
+ \edef\tmp@{\egroup
+ \setboxz@h{\kern-\the\X@min\boxz@}%
+ \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@
+ \noexpand\maybeunraise@ \raise\dimen@\boxz@
+ \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end
+ \U@c=\the\Y@max \D@c=-\the\Y@min \L@c=-\the\X@min \R@c=\the\X@max}\tmp@}
+\xydef@\maybeunraise@{\if\inxy@\else \dimen@ii=\dp\z@
+ \ifdim\dimen@ii<\z@ \advance\dimen@\dimen@ii \fi\fi}
+\xydef@\xycheck@end{\xyFN@\xycheck@end@}
+\xydef@\xycheck@end@{\ifx\next\xy@end\DN@\xy@end{}\else\DN@{\xy@end}\fi\next@}
+\xydef@\xy@end{%
+ \xyerror@{An \string\xy\space environment is not closed correctly.}%
+ {I expected \string\endxy. You probably have an umatched {} grouping.}}
+\message{positions,}
+\xydef@\POS{\afterPOS{}}
+\xydef@\afterPOS#1{%
+ \DN@##1{\def\afterPOS@{\def\afterPOS@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterPOS@}%
+ \afterCOORD{\xyFN@\POS@}}
+\xylet@\afterPOS@=\empty
+\xydef@\afterCOORD#1{%
+ \DN@##1{\def\afterCOORD@{\def\afterCOORD@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterCOORD@}%
+ \afterVECTORorEMPTY{\xy@@\czeroEdge@ \afterCOORD@}{\xyFN@\COORD@}}
+\xylet@\afterCOORD@=\empty
+\xydef@\afterVECTORorEMPTY#1#2{%
+ \DN@##1{\def\afterVECTOR@{\def\afterVECTOR@{##1}%
+ \ifVECTORempty@\DN@{#2}\else\DN@{#1}\fi \next@}}%
+ \expandafter\next@\expandafter{\afterVECTOR@}%
+ \xyFN@\VECTOR@}
+\xynew@{if}\ifVECTORempty@
+\xylet@\afterVECTOR@=\empty
+\xydef@\xyVECTOR@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}%
+ \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter
+ \else \let\next@=\VECTOR@other \fi\fi \next@}
+\xylet@\VECTOR@=\xyVECTOR@
+\def\notrelaxorelse@#1#2{\ifx#1\relax \expandafter#2\else\expandafter#1\fi}
+\xydef@\VECTOR@letter{%
+ \ifx a\next \expandafter\VECTOR@a \else \expandafter\CORNER@ \fi}
+\xydef@\VECTOR@a a(#1){\xy@{a(#1)}{\vfromcartesianangle@{#1}}%
+ \VECTORempty@false \afterVECTOR@}
+\xydef@\CORNER@{%
+ \xy@{}{\A@=-.5\L@c \advance\A@.5\R@c \B@=-.5\D@c \advance\B@.5\U@c
+ \let\nextii@=\zeroit@}%
+ \VECTORempty@true\CORNER@i}
+\xydef@\zeroit@#1{#1=\z@}
+\xydef@\CORNER@i{%
+ \ifx D\next \DN@ D{\xy@{D}{\Y@c=-\D@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}%
+ \else\ifx U\next \DN@ U{\xy@{U}{\Y@c= \U@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}%
+ \else\ifx L\next \DN@ L{\xy@{L}{\X@c=-\L@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}%
+ \else\ifx R\next \DN@ R{\xy@{R}{\X@c= \R@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}%
+ \else\ifx C\next \DN@ C{\xy@{C}{\X@c= \A@ \Y@c= \B@}\CORNER@ii}%
+ \else\ifx E\next \DN@ E{\xy@{E}{%
+ \A@=\X@c \B@=\Y@c \the\Edge@c\z@ \advance\X@c-\A@ \advance\Y@c-\B@}%
+ \CORNER@ii}%
+ \else\ifx P\next \DN@ P{\xy@{P}{%
+ \A@=\X@c \B@=\Y@c \the\Edge@c\thr@@ \advance\X@c-\A@ \advance\Y@c-\B@}%
+ \CORNER@ii}%
+ \else\ifx (\next
+ \DN@(##1){\xy@{(##1)}{\X@c=##1\X@c \Y@c=##1\Y@c}\afterVECTOR@}%
+ \else\ifx A\next \DN@ A{\xy@{A}{\Y@c=\fontdimen22\textfont\tw@ \nextii@\X@c \B@=\Y@c}\CORNER@ii}%
+ \else\ifx V\next \DN@ V{\xy@{V}{\nextii@\X@c \Y@c=\U@p}\CORNER@ii}%
+ \else\ifx H\next \DN@ H{\xy@{H}{\nextii@\Y@c \X@c=\R@p}\CORNER@ii}%
+ \else \let\next@=\afterVECTOR@
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}%
+ \VECTORempty@false \xyFN@\CORNER@i}
+\xydef@\VECTOR@other{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@##1}{\xy@{<##1>}{\vfromabsolute@{##1}}%
+ \VECTORempty@false\afterVECTOR@}%
+ \else\ifx (\next
+ \DN@({\xyFN@\VECTOR@other@open}%
+ \else\ifx /\next
+ \DN@/##1/{\xy@@ix@{{##1}}%
+ \xy@{/##1/}{\expandafter\vfromslide@\the\toks9 }%
+ \VECTORempty@false\afterVECTOR@}%
+ \else\ifx 0\next
+ \DN@ 0{\xy@{0}{\X@c=\z@ \Y@c=\z@}\VECTORempty@false\afterVECTOR@}%
+ \else
+ \DN@{\VECTORempty@true\afterVECTOR@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\VECTOR@other@open{%
+ \ifx *\next \DN@{\VECTORempty@true \xyFN@\afterVECTOR@(}%
+ \else
+ \DN@##1){\xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}%
+ \fi \next@}
+\xydef@\xyCOORD@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}%
+ \else \ifcat A\noexpand\next \let\next@=\xyCOORD@letter
+ \else \let\next@=\xyCOORD@other \fi\fi \next@}
+\xylet@\COORD@=\xyCOORD@
+\xydef@\xyCOORD@letter{%
+ \ifx c\next
+ \DN@ c{\xy@{c}{}\afterCOORD@}%
+ \else\ifx p\next
+ \DN@ p{\xy@{p}\cfromp@ \afterCOORD@}%
+ \else\ifx x\next
+ \DN@ x{\xy@{x}{\R@c=\X@xbase \U@c=\Y@xbase \intersect@}\afterCOORD@}%
+ \else\ifx y\next
+ \DN@ y{\xy@{y}{\R@c=\X@ybase \U@c=\Y@ybase \intersect@}\afterCOORD@}%
+ \else\ifx s\next
+ \DN@ s##1{\xy@{s{##1}}{\cfroms@{##1}}\afterCOORD@}%
+ \else \let\next@=\afterCOORD@ \fi\fi\fi\fi\fi \next@}
+\xydef@\xyCOORD@other{%
+ \ifx "\next
+ \DN@"##1"{\xy@{"##1"}{\cfromid@{##1}}\afterCOORD@}%
+ \else\ifx \bgroup\next
+ \DN@##1{\xy@{{##1}}{\enter@{\pfromthep@\basefromthebase@}}%
+ \silencexy@ \POS##1\relax \unsilencexy@ \xy@@\leave@ \afterCOORD@}%
+ \else\ifx (\next
+ \DN@({\xyFN@\xyCOORD@other@open}%
+ \else \let\next@=\afterCOORD@ \fi\fi\fi \next@}
+\xynew@{if}\ifsilentxy@
+\xydef@\silencexy@{%
+ \ifsilentxy@ \nter@{}%
+ \else \nter@{\silentxy@false \let\xy@=\unsilent@@xy@}
+ \silentxy@true \let\unsilent@@xy@=\xy@ \def\xy@##1##2{\unsilent@@xy@{}{##2}}%
+ \fi}
+\xydef@\unsilencexy@{\leave@}
+\xydef@\xyCOORD@other@open{%
+ \ifx *\next
+ \DN@*##1*){\xy@{(*}{\enter@{\pfromthep@\basefromthebase@}}%
+ \POS##1\relax \xy@{*)}\leave@ \afterCOORD@}%
+ \else \DN@{\xyFN@\afterCOORD@(}%
+ \fi \next@}
+\xydef@\xyPOS@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}%
+ \else\addPLUS@\ifx \next
+ \addPLUS@\DN@{\xy@+{\enter@\cplusthec@}%
+ \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
+ \else\addDASH@\ifx \next
+ \addDASH@\DN@{\xy@-{\enter@\cplusthec@}%
+ \afterCOORD{\xy@@{\X@c=-\X@c \Y@c=-\Y@c\leave@}\xyFN@\POS@}}%
+ \else\ifx !\next
+ \DN@ !{\xy@!{\enter@\cskewthec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
+ \else\addDOT@\ifx \next
+ \addDOT@\DN@{\xy@.{\enter@\cmergethec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
+ \else\ifx ,\next
+ \DN@ ,{\xy@,{\comma@@}\afterCOORD{\xyFN@\POS@}}%
+ \else\ifx ;\next
+ \DN@ ;{\xy@;{\swap@}\afterCOORD{\xyFN@\POS@}}%
+ \else\ifx :\next
+ \DN@ :{\xyFN@\POS@colon}%
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@{\xyFN@\saveid@}%
+ \else\ifx *\next
+ \DN@ *{\xyFN@\POS@star}%
+ \else\ifx ?\next
+ \DN@ ?{\xy@?{}\afterPLACE{\xyFN@\POS@}}%
+ \else \addAT@\ifx \next
+ \addAT@\DN@{\xyFN@\STACK@}%
+ \else
+ \let\next@=\afterPOS@
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\comma@@=\relax
+\xylet@\POS@=\xyPOS@
+\xydef@\POS@colon{\DNii@{\afterCOORD{\xyFN@\POS@}}%
+ \ifx :\next \xy@{::}{\setbase@@\X@c\Y@c}\DN@:{\nextii@}%
+ \else \xy@:{\setbase@\X@p\Y@p\X@c\Y@c}\let\next@=\nextii@ \fi
+ \next@}
+\xydef@\POS@star{%
+ \ifx *\next
+ \DN@*##1##{\nextii@{##1}}%
+ \DNii@##1##2{\xy@@ix@{{##1}{##2}}%
+ \xy@{**##1{##2}}{\expandafter\connect@\the\toks9 }\xyFN@\POS@}%
+ \else
+ \DN@##1##{\nextii@{##1}}%
+ \DNii@##1##2{\xy@@ix@{{##1}{##2}}%
+ \xy@{*##1{##2}}{\expandafter\drop@\the\toks9 }\xyFN@\POS@}%
+ \fi
+ \next@}
+\xydef@\cfromp@{\X@c=\X@p \Y@c=\Y@p \U@c=\U@p \D@c=\D@p \L@c=\L@p \R@c=\R@p
+ \Edge@c=\expandafter{\the\Edge@p}}
+\xydef@\pfromc@{\X@p=\X@c \Y@p=\Y@c \U@p=\U@c \D@p=\D@c \L@p=\L@c \R@p=\R@c
+ \Edge@p=\expandafter{\the\Edge@c}}
+\xydef@\swapdimen@#1#2{\dimen@=#1\relax #1=#2\relax #2=\dimen@}
+\xynew@{toks}\swaptoks@@
+\xydef@\swap@{\swapdimen@\X@c\X@p \swapdimen@\Y@c\Y@p
+ \swapdimen@\U@c\U@p\swapdimen@\D@c\D@p \swapdimen@\L@c\L@p\swapdimen@\R@c\R@p
+ \swaptoks@@=\Edge@c \Edge@c=\Edge@p \Edge@p=\swaptoks@@}
+\xydef@\vfromabsolute@#1{\vfromabsolute@@#1,@}
+\xydef@\vfromabsolute@@#1,#2@{\X@c=#1\relax
+ \DN@{#2}\ifx\next@\empty \Y@c=\X@c
+ \else \DN@##1,{\Y@c=##1}\next@#2\relax \fi
+}
+\xydef@\cfromthec@{\X@c=\the\X@c \Y@c=\the\Y@c
+ \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \Edge@c={\expandafter\noexpand\the\Edge@c}}
+\xydef@\cfromthep@{\X@c=\the\X@p \Y@c=\the\Y@p
+ \U@c=\the\U@p \D@c=\the\D@p \L@c=\the\L@p \R@c=\the\R@p
+ \Edge@c={\expandafter\noexpand\the\Edge@p}}
+\xydef@\pfromthep@{\X@p=\the\X@p \Y@p=\the\Y@p
+ \U@p=\the\U@p \D@p=\the\D@p \L@p=\the\L@p \R@p=\the\R@p
+ \Edge@p={\expandafter\noexpand\the\Edge@p}}
+\xydef@\pfromthec@{\X@p=\the\X@c \Y@p=\the\Y@c
+ \U@p=\the\U@c \D@p=\the\D@c \L@p=\the\L@c \R@p=\the\R@c
+ \Edge@p={\expandafter\noexpand\the\Edge@c}}
+\xydef@\cplusthec@{\advance\X@c\the\X@c \advance\Y@c\the\Y@c}
+\xydef@\cskewthec@{%
+ \noexpand\cskew@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}}
+\xydef@\cskew@#1#2#3#4#5#6{%
+ \D@c=#3\advance\D@c \Y@c \ifdim\D@c<\z@ \D@c=\z@ \fi
+ \U@c=#4\advance\U@c-\Y@c \ifdim\U@c<\z@ \U@c=\z@ \fi
+ \advance\Y@c#1%
+ \L@c=#5\advance\L@c \X@c \ifdim\L@c<\z@ \L@c=\z@ \fi
+ \R@c=#6\advance\R@c-\X@c \ifdim\R@c<\z@ \R@c=\z@ \fi
+ \advance\X@c#2%
+ \Edge@c={\rectangleEdge}}
+\xydef@\cmergethec@{%
+ \noexpand\cmerge@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}}
+\xydef@\cmerge@#1#2#3#4#5#6{\the\Edge@c4%
+ \A@=#2\advance\A@-\X@c \B@=#1\advance\B@-\Y@c
+ \dimen@=#5\advance\L@c \A@ \ifdim\L@c<\dimen@ \L@c=\dimen@ \fi
+ \dimen@=#6\advance\R@c-\A@ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \dimen@=#3\advance\D@c \B@ \ifdim\D@c<\dimen@ \D@c=\dimen@ \fi
+ \dimen@=#4\advance\U@c-\B@ \ifdim\U@c<\dimen@ \U@c=\dimen@ \fi
+ \advance\X@c\A@ \advance\Y@c\B@}
+\xydef@\halfroottwo{.70710678}
+\xydef@\partroottwo{.29289322}
+\xydef@\halfrootthree{.8660254}
+\xydef@\vfromcartesian@#1{\vfromcartesian@@#1@}
+\xydef@\vfromcartesian@@#1,#2@{%
+ \X@c=\X@origin \advance\X@c#1\X@xbase \advance\X@c#2\X@ybase
+ \Y@c=\Y@origin \advance\Y@c#1\Y@xbase \advance\Y@c#2\Y@ybase}
+\xydef@\setbase@#1#2#3#4{%
+ \X@origin=#1\relax \Y@origin=#2\relax
+ \X@xbase=#3\relax \advance\X@xbase-\X@origin
+ \Y@xbase=#4\relax \advance\Y@xbase-\Y@origin
+ \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}
+\xydef@\setbase@@#1#2{%
+ \X@ybase=#1\relax \advance\X@ybase-\X@origin
+ \Y@ybase=#2\relax \advance\Y@ybase-\Y@origin}
+\xydef@\basefromthebase@{\X@origin=\the\X@origin \Y@origin=\the\Y@origin
+ \X@xbase=\the\X@xbase \Y@xbase=\the\Y@xbase
+ \X@ybase=\the\X@ybase \Y@ybase=\the\Y@ybase}
+\xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@
+ \B@=360\p@
+ \loop@ \ifdim\R@<\z@ \advance\R@\B@ \repeat@
+ \loop@ \ifdim\R@>\B@ \advance\R@-\B@ \repeat@
+ \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@
+ \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi
+ \B@=180\p@
+ \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@
+ \X@xbase=-\X@xbase \Y@xbase=-\Y@xbase \fi
+ \B@=90\p@
+ \ifdim\R@<.5\B@ \let\nextiii@=\literal@
+ \else \R@=-\R@ \advance\R@\B@ \def\nextiii@##1,##2@{##2,##1@}\fi
+ \dimen@=\z@ \DN@{1,0@}%
+ \dimen@ii=45\p@ \DNii@{.70710678,.70710678@}%
+ \chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {4.090909}{.99677570,.08023846@}%
+ {}}%
+ {6}{.99452190,.10452846@}%
+ {\chooseangleinterval@
+ {}%
+ {8.181818}{.98982144,.14231484@}%
+ {}}}%
+ {10}{.98480775,.17364818@}%
+ {\chooseangleinterval@
+ {}%
+ {12.857143}{.97492791,.22252093@}%
+ {}}}%
+ {15}{.96592583,.25881905@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {16.363636}{.95949297,.28173256@}%
+ {}}%
+ {18}{.95105652,.30901699@}%
+ {\chooseangleinterval@
+ {}%
+ {20}{.93969262,.34202014@}%
+ {}}}}%
+ {22.5}{.92387953,.38268343@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {24.545455}{.90963200,.41541501@}%
+ {}}%
+ {25.714286}{.90096887,.43388374@}%
+ {}}%
+ {30}{.86602540,.5@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {32.727273}{.84125353,.54064082@}%
+ {}}%
+ {36}{.80901699,.58778525@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {38.571429}{.78183148,.62348980@}%
+ {}}%
+ {40.909091}{.75574957,.65486073@}%
+ {\chooseangleinterval@
+ {}%
+ {40}{.76604444,.64278761@}%
+ {}}}}}%
+ \A@=\R@ \advance\A@-\dimen@
+ \ifdim\ifdim\A@<\z@-\fi\A@<.01\p@ \edef\next@{\expandafter\nextiii@\next@}%
+ \else \B@=\dimen@ii \advance\B@-\R@
+ \ifdim\A@<\B@ \dimen@=\toradians@\A@
+ \edef\next@{\next@ \expandafter\removePT@\the\dimen@ @}%
+ \else \dimen@=-\toradians@\B@
+ \edef\next@{\nextii@ \expandafter\removePT@\the\dimen@ @}%
+ \fi
+ \expandafter\interpolatepoint@\next@
+ \edef\next@{\expandafter\nextiii@\next@}%
+ \fi
+ \expandafter\vfromcartesian@@\next@
+ \leave@}
+\xydef@\chooseangleinterval@#1#2#3#4{%
+ \B@=#2\p@ \def\next{#3}%
+ \ifdim\R@<\B@ \dimen@ii=\B@ \let\nextii@=\next #1%
+ \else \dimen@=\B@ \let\next@=\next \ifdim\B@<\R@ #4\fi\fi}
+\xydef@\interpolateinterval@#1,#2@#3,#4@{%
+ \A@=#1\p@ \dimen@=#3\p@ \advance\dimen@-\A@ \advance\A@\next\dimen@
+ \B@=#2\p@ \dimen@=#4\p@ \advance\dimen@-\B@ \advance\B@\next\dimen@
+ \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}}
+\xydef@\toradians@{0.01745329}
+\xydef@\interpolatepoint@#1,#2@#3@{%
+ \A@=#1\p@ \dimen@ii=#3\A@ \dimen@ii=-.5\dimen@ii \advance\A@#3\dimen@ii
+ \dimen@=-#2\p@ \advance\A@#3\dimen@
+ \B@=#2\p@ \dimen@ii=#3\B@ \dimen@ii=-.5\dimen@ii \advance\B@#3\dimen@ii
+ \dimen@=#1\p@ \advance\B@#3\dimen@
+ \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}}
+\xydef@\drop@#1#2{%
+ \global\setbox\lastobjectbox@=\object#1{#2}%
+ \ifHidden@ \dimen@=\X@c \advance\dimen@-\L@c \else
+ \dimen@=\Y@c \advance\dimen@ \U@c \ifdim\Y@max<\dimen@ \Y@max=\dimen@ \fi
+ \dimen@=\Y@c \advance\dimen@-\D@c \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi
+ \dimen@=\X@c \advance\dimen@ \R@c \ifdim\X@max<\dimen@ \X@max=\dimen@ \fi
+ \dimen@=\X@c \advance\dimen@-\L@c \ifdim\dimen@<\X@min \X@min=\dimen@ \fi
+ \fi
+ \ifInvisible@\else
+ \setboxz@h{\kern\dimen@ \raise\Y@c\box\lastobjectbox@}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi}
+\xydef@\connect@#1#2{\setupDirection@ \enter@{\cfromthec@}%
+ \global\setbox\lastobjectbox@=\object#1{#2}\leave@
+ \Connect@@}
+\xydef@\preconnect@#1#2{\setupDirection@ \enter@{\cfromthec@}%
+ \global\setbox\lastobjectbox@=\object#1{#2}\leave@ \connectStore@
+ \ifInvisible@ \Connect@@ \else \Invisible@true\Connect@@\Invisible@false \fi}
+\xynew@{box}\connectobjectbox@@
+\xylet@\connectDrop@@=\empty
+\xylet@\connectpreXY@style@=\empty
+\xylet@\connectpostXY@style@=\empty
+\xylet@\connectRest@@=\empty
+\xydef@\connectStore@{%
+ \global\setbox\connectobjectbox@@=\copy\lastobjectbox@
+ \let\connectDrop@@=\Drop@@
+ \let\connectpreXY@style@ =\preXY@style@
+ \let\connectpostXY@style@=\postXY@style@
+ \xdef\connectRest@@{%
+ \def\noexpand\Upness@{\Upness@}%
+ \def\noexpand\Leftness@{\Leftness@}%
+ \ifInvisible@ \noexpand\Invisible@true \else \noexpand\Invisible@false \fi
+ \ifHidden@ \noexpand\Hidden@true \else \noexpand\Hidden@false \fi}}
+\xydef@\connectRestore@{%
+ \ifvbox\connectobjectbox@@
+ \setbox\lastobjectbox@=\copy\voidb@x
+ \else
+ \global\setbox\lastobjectbox@=\copy\connectobjectbox@@
+ \fi
+ \let\Drop@@=\connectDrop@@
+ \global\let\preXY@style@ =\connectpreXY@style@
+ \global\let\postXY@style@=\connectpostXY@style@
+ \connectRest@@}
+\xydef@\afterPLACE#1{%
+ \DN@##1{\def\afterPLACE@{\xy@@\leave@ \def\afterPLACE@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterPLACE@}%
+ \def\PLACEf@{{.5}}%
+ \xy@@{\enter@{\pfromthep@}%
+ \Creset@@ \def\PLACEf@{{.5}}%
+ \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@}%
+ \xyFN@\PLACE@}
+\xydef@\PLACEf@{}
+\xydef@\PLACEedgep@@{}
+\xydef@\PLACEedgec@@{}
+\xydef@\PLACEedgep@{\Cshavep@@ \def\PLACEedgep@@{\Cslidep@@\jot}}
+\xydef@\PLACEedgec@{\Cshavec@@ \def\PLACEedgec@@{\Cslidec@@{-\jot}}}
+\xylet@\afterPLACE@=\empty
+\xydef@\PLACE@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@}%
+ \else\addLT@\ifx \next
+ \addLT@\DN@{\addLT@\xy@{\def\PLACEf@{{0}}\PLACEedgep@@}\xyFN@\PLACE@}%
+ \else\addGT@\ifx \next
+ \addGT@\DN@{\addGT@\xy@{\def\PLACEf@{{1}}\PLACEedgec@@}\xyFN@\PLACE@}%
+ \else\ifx (\next
+ \DN@(##1){\def\PLACEf@{{##1}}\xy@{(##1)}{\def\PLACEf@{{##1}}}\xyFN@\PLACE@}%
+ \else\ifx !\next
+ \DN@!{\xyFN@\PLACE@intercept}%
+ \else
+ \DN@{\xy@@{\expandafter\Calong@@\PLACEf@ \czeroEdge@}\PLACE@@}%
+ \fi\fi\fi\fi\fi \next@}
+\xydef@\PLACE@intercept{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@intercept}%
+ \else\ifx \bgroup\next
+ \DN@##1{\xy@{!{##1}}{}\PLACE@intercept@{##1}}%
+ \else\ifx (\next
+ \DN@(*##1*){\xy@{!(*##1*)}{}\PLACE@intercept@{##1}}%
+ \else \DN@{\xyerror@{{<pos>} expected after ! in <place>}{}}%
+ \fi\fi\fi \next@}
+\xydef@\PLACE@intercept@#1{%
+ \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}%
+ \xy@@ix@{#1}\xy@@{\plainxy@ \expandafter\POS\the\toks9\relax
+ \edef\next@{\endgroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \next@ \Cintercept@@ \leave@}%
+ \PLACE@@}
+\xydef@\PLACE@@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@@}%
+ \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}%
+ \else \let\next@=\afterPLACE@
+ \fi\fi \next@}
+\xydef@\intersect@{%
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin
+ \edef\next@{\expandafter\removePT@\the\R@c}%
+ \edef\nextii@{\expandafter\removePT@\the\U@c}%
+ \D@c=\next@\d@Y \advance\D@c-\nextii@\d@X \divide\D@c\KK@
+ \L@c=\next@\B@ \advance\L@c-\nextii@\A@ \divide\L@c\KK@
+ \ifdim\D@c=\z@\zeroDivide@\else \quotient@\next@\L@c\D@c \fi
+ \advance\X@c-\next@\d@X \advance\Y@c-\next@\d@Y
+ \czeroEdge@}
+\xydef@\zeroDivide@@{\zeroDivide@message{\intersect@}{treated as 0}\DN@{0}}
+\xydef@\zeroDivide@message#1#2{\xywarning@{division by 0 in \string#1, #2}}
+\xylet@\zeroDivide@=\zeroDivide@@
+\xydef@\zeroDivideLimit@@{\ifdim\L@c=\z@ \DN@{0}%
+ \else\ifdim\L@c<\z@\DN@{-\zeroDivide@Limit}%
+ \else\DN@{\zeroDivide@Limit}\fi\fi
+ \zeroDivide@message{\intersect@}{replaced by \zeroDivide@Limit}}
+\xydef@\zeroDivideLimit@#1{\edef\zeroDivide@Limit{#1}%
+ \let\zeroDivide@=\zeroDivideLimit@@}
+\xylet@\zeroDivideLimit=\zeroDivideLimit@
+\xydef@\vfromslide@#1{\enter@\DirectionfromtheDirection@ \begingroup
+ \plainxy@\afterDIRECTIONorEMPTY\vfromslide@i\vfromslide@i#1@}
+\xydef@\vfromslide@i#1@{\DN@{#1}%
+ \edef\next{\endgroup
+ \ifx\next@\empty \dimen@=.5pc \else \dimen@=#1\relax \fi
+ \X@c=\cosDirection\dimen@ \Y@c=\sinDirection\dimen@}\next
+ \leave@}
+\xydef@\s@bot{-1}
+\xydef@\s@top{-1}
+\xydef@\cfroms@#1{\tests@{#1}\runs@\outofranges@}
+\xydef@\tests@#1#2#3{\DN@{#3}%
+ \count@=\s@top \advance\count@-#1\relax
+ \ifnum\count@>\s@bot\relax \ifnum\count@>\s@top\else\DN@{#2}\fi\fi
+ \next@}
+\xydef@\runs@{\csname S@\the\count@\endcsname}
+\xydef@\outofranges@{\count@=\s@top \advance\count@-\s@bot
+ \xyerror@{stack index out of range (should be 0..\the\count@)}{}}
+\xydef@\STACK@{%
+ \addPLUS@\ifx\next
+ \addPLUS@\DN@{\xy@{@+}{}\afterCOORD{\xy@@\spushc@ \xyFN@\POS@}}%
+ \else\addDASH@\ifx\next
+ \addDASH@\DN@{\xy@{@-}{}\afterCOORD{\xy@@\spop@ \xyFN@\POS@}}%
+ \else \ifx i\next \DN@ i{\xy@{@i}\sinit@ \xyFN@\POS@}%
+ \else \ifx (\next \DN@ ({\xy@{@(}\senter@ \xyFN@\POS@}%
+ \else \ifx )\next \DN@ ){\xy@{@)}\sleave@ \xyFN@\POS@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\STACK@load}%
+ \else\addAT@\ifx\next \addAT@\DN@{\xy@{@@}{}\smap@}%
+ \else \DN@##1{\xyerror@{illegal stack command ##1}{}\afterCOORD{\xyFN@\POS@}}%
+ \fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\STACK@load{\xy@{@=}{%
+ \if\sempty@\else \xywarning@{loading on top of non-empty stack}\sinit@ \fi
+ \let\comma@@=\spushc@}%
+ \afterCOORD{\xy@@{\spushc@ \let\comma@@=\relax}\xyFN@\POS@}}
+\xydef@\spushc@{%
+ \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}%
+ \expandafter\edef\csname S@\s@top\endcsname{\cfromthec@}}
+\xydef@\spushid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}%
+ \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname
+ \ifx\next@\relax \xyerror@{<pos> \string"\nextii@\string" not defined}{}%
+ \else
+ \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}%
+ \DNii@##1{\expandafter\def\csname S@\s@top\endcsname{##1}}%
+ \expandafter\nextii@\expandafter{\next@}%
+ \fi}
+\xydef@\idfroms@#1#2{%
+ \tests@{#2}{\DN@{\idfromxy@{#1}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\csname S@\the\count@\endcsname}%
+ }\outofranges@}
+\xydef@\spop@{\count@=\s@top
+ \ifnum\count@>\s@bot \advance\count@\m@ne \edef\s@top{\the\count@}%
+ \else \xyerror@{nothing to pop from stack}{}\fi}
+\xydef@\sinit@{\edef\s@top{\s@bot}}
+\xydef@\senter@{%
+ \count@=\s@top \advance\count@\@ne
+ \expandafter\edef\csname S@\the\count@\endcsname{\s@bot}%
+ \edef\s@bot{\the\count@}\edef\s@top{\the\count@}}
+\xydef@\sleave@{%
+ \ifnum\s@bot=\s@top\else \xywarning@{leaving non-empty stack}\sinit@ \fi
+ \ifnum\s@bot>\m@ne \edef\s@bot{\csname S@\s@top\endcsname}%
+ \count@=\s@top \advance\count@\m@ne \edef\s@top{\the\count@}%
+ \edef\sbot{\the\count@}\fi}
+\xydef@\sempty@{\ifnum\s@top=\s@bot TT\else TF\fi}
+\xydef@\xytotoks@#1#2{\addtotoks@{#2}}
+\xydef@\xytotoks@@toksix@#1{\addtotoks@{\toks9={#1}}}
+\xydef@\smap@{%
+ \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@
+ \let\xy@@ix@=\xytotoks@@toksix@
+ \afterCOORD{\expandafter\endgroup
+ \expandafter\smapxy@@\expandafter{\the\toks@}\xyFN@\POS@}}
+\xydef@\smapxy@@#1{\xy@@{\edef\smapp@@{\s@bot}\smapxy@i{#1}}}
+\xylet@\smapp@@=\empty
+\xydef@\smapxy@i#1{%
+ \ifnum\smapp@@<\s@top
+ \count@=\smapp@@ \advance\count@\@ne \edef\smapp@@{\the\count@}%
+ \DN@{\csname S@\smapp@@\endcsname #1\relax \smapxy@i{#1}}%
+ \else \let\next@=\relax
+ \fi \next@}
+\xydef@\saveid@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}%
+ \else \ifx "\next\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\POS@}%
+ \else \ifx :\next\DN@:##1"##2"{\xy@{=:"##2"}{\idfrombase@{##2}}\xyFN@\POS@}%
+ \else\addAT@\ifx\next
+ \addAT@\DN@"##1"{\xy@{=@"##1"}{\idfromstack@{##1}}\xyFN@\POS@}%
+ \else \ifx s\next
+ \DN@ s##1"##2"{\xy@{=s##1"##2"}{\idfroms@{##2}{##1}}\xyFN@\POS@}%
+ \else\addEQ@\ifx\next \let\saveid@COORD@@=\saveid@COORDii
+ \addEQ@\DN@{\xyFN@\saveid@COORD}%
+ \else \let\saveid@COORD@@=\saveid@COORDi \let\next@=\saveid@COORD
+ \fi\fi\fi\fi\fi\fi \next@}
+\xylet@\saveid@COORD@@=\relax
+\xydef@\idfromc@#1{\DN@{#1}%
+ \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@}}
+\xydef@\idfrombase@#1{\DN@{#1}%
+ \expandafter\edef\csname Q@\codeof\next@\endcsname{\basefromthebase@}}
+\xydef@\idfromstack@#1{%
+ \toks@={\if\sempty@\else
+ \xywarning@{loading on top of non-empty stack}\sinit@ \fi}%
+ \count@=\s@bot \advance\count@\@ne
+ \ifnum\count@>\s@top\else
+ \loop@
+ \expandafter\let\expandafter\next@\csname S@\the\count@\endcsname
+ \expandafter\addtotoks@\expandafter{\next@}%
+ \ifnum\count@<\s@top \advance\count@\@ne \addtotoks@{\spushc@}\repeat@
+ \fi
+ \DN@{#1}\edef\next@##1{%
+ \def\expandafter\noexpand\csname Q@\codeof\next@\endcsname{##1}}%
+ \expandafter\next@\expandafter{\the\toks@}}
+\xydef@\saveid@COORD{%
+ \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@
+ \let\xy@@ix@=\xytotoks@@toksix@
+ \afterCOORD{\expandafter\saveid@COORDi\expandafter{\the\toks@}}}
+\xydef@\saveid@COORDi#1#2"#3"{\endgroup \xy@@{\idfromxy@{#3}{#1}}\xyFN@\POS@}
+\xydef@\saveid@COORDii#1#2"#3"{\endgroup \xy@@{\idfromcxy@{#3}{#1}}\xyFN@\POS@}
+\xydef@\idfromxy@#1#2{\DN@{#1}%
+ \expandafter\def\csname Q@\codeof\next@\endcsname{#2}}
+\xydef@\idfromcxy@#1#2{\DN@{#1}%
+ \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@#2}}
+\xydef@\cfromid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}%
+ \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname
+ \ifx\next@\relax \xyerror@{<pos> \string"\nextii@\string" not defined}{}%
+ \else \expandafter\next@\fi}
+\message{objects,}
+\xydef@\OBJECT@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}%
+ \else\ifcat A\noexpand\next \let\next@=\OBJECT@letter
+ \else \let\next@=\OBJECT@other \fi\fi \next@}
+\xydef@\OBJECT@letter{%
+ \ifx i\next \DN@ i{\addtotoks@\Invisible@true \xyFN@\OBJECT@}%
+ \else\ifx h\next\DN@ h{\addtotoks@\Hidden@true \xyFN@\OBJECT@}%
+ \else\ifx o\next\DN@ o{\xywarning@{Obsolete o modifier used}\OBJECT@shape{o}}%
+ \else\ifx x\next\DN@ x{\xywarning@{Obsolete x modifier used}\OBJECT@shape{}}%
+ \else\ifx @\next\DN@ @##1##{%
+\xywarning@{Impossible @ (letter) should not be here!!}
+ \OBJECT@@{\dir##1}}%
+ \else \let\next@=\OBJECT@direction
+ \fi\fi\fi\fi\fi \next@}
+\xydef@\OBJECT@other{%
+ \ifx !\next \DN@!{\OBJECT@shift}%
+ \else\addPLUS@\ifx \next \DN@{\OBJECT@change}%
+ \else\addDASH@\ifx \next \DN@{\OBJECT@change}%
+ \else\addEQ@\ifx \next \DN@{\OBJECT@set}%
+ \else\ifx [\next
+ \DN@[##1]{\xy@{[##1]}{\OBJECT@shape{##1}}}%
+ \else\ifx ^\next \let\next@=\OBJECT@direction
+ \else\ifx _\next \let\next@=\OBJECT@direction
+ \else\ifx :\next \let\next@=\OBJECT@direction
+ \else\ifx ?\next
+ \DN@ ?{\xywarning@{\string? modifier used}\xyFN@\OBJECT@direction}%
+ \else\ifx (\next
+ \let\next@=\OBJECT@direction
+ \else\addAT@\ifx\next \addAT@\DN@##1##{\OBJECT@@{\dir##1}}%
+ \else \DN@##1##{\OBJECT@@{##1}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\prevEdge@@{\zeroEdge}
+\xydef@\OBJECT@@#1#2{%
+ \expandafter\def\expandafter\prevEdge@@\expandafter{\the\Edge@c}%
+ \expandafter\Edge@c\expandafter{\objectEdge}%
+ \Invisible@false\Hidden@false
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \gdef\preXY@style@{}\gdef\postXY@style@{}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}%
+ \DN@{#1}\ifx\next@\empty \DNii@{#2}%
+ \ifx\nextii@\empty \DN@{\hbox\bgroup\no@}\else \let\next@=\objectbox \fi\fi
+ \setbox\z@=\next@{#2}\L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c
+ \D@c=\dp\z@ \advance\D@c\ht\z@ \U@c=\Upness@\D@c \advance\D@c-\U@c
+ \R@p=\z@ \L@p=\L@c \U@p=\U@c \advance\U@p-\ht\z@ \D@p=-\U@p
+ \the\toks@\toks@={}\setboxz@h{\kern\R@p \raise\U@p\boxz@}%
+ \checkZeroEdge@
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c \boxz@
+ \OBJECT@x}
+\xydef@\adjustLR@{%
+ \ifdim\zz@\wdz@ \L@c=\z@ \R@c=\z@ \dimen@=\Leftness@\p@
+ \ifdim\dimen@<\z@ \L@c=\dimen@ \R@c=-\L@c
+ \else\ifdim\dimen@>\p@ \L@c=\dimen@ \advance\L@c-\p@ \R@c=-\L@c \fi\fi
+ \else \L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c \fi}
+\xydef@\adjustUD@{\dimen@=\ht\z@ \advance\dimen@\dp\z@
+ \ifdim\zz@\dimen@ \U@c=\z@ \D@c=\z@ \dimen@=\Upness@\p@
+ \ifdim\dimen@<\z@ \U@c=\dimen@ \D@c=-\L@c
+ \else\ifdim\dimen@>\p@ \U@c=\dimen@ \advance\U@c-\p@ \D@c=-\L@c \fi\fi
+ \else \D@c=\dimen@ \U@c=\Upness@\dimen@ \advance\D@c-\U@c \fi}
+\def\checkZeroEdge@{%
+ \expandafter\DN@\expandafter{\the\Edge@c}\def\nextii@{\zeroEdge}%
+ \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi
+ \DN@{}\def\nextii@{}%
+ \ifdim\zz@\L@c \ifdim\zz@\R@c \ifdim\zz@\U@c \ifdim\zz@\D@c
+ \DN@{\Edge@c={\zeroEdge}}\fi\fi\fi\fi
+ \next@}
+\xydef@\OBJECT@x{\toks@={\egroup\def\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
+ \edef\tmp@{\D@c=\the\D@c \U@c=\the\U@c \L@c=\the\L@c \R@c=\the\R@c
+ \Edge@c={\expandafter\noexpand\the\Edge@c}%
+ \ifInvisible@\noexpand\Invisible@true\else\noexpand\Invisible@false\fi
+ \ifHidden@\noexpand\Hidden@true\else\noexpand\Hidden@false\fi
+ \def\noexpand\Leftness@{\Leftness@}\def\noexpand\Upness@{\Upness@}}%
+ \expandafter\addtotoks@\expandafter{\tmp@}\the\toks@}
+\xynew@{if}\ifInvisible@
+\xynew@{if}\ifHidden@
+\xydef@\Leftness@{}
+\xydef@\Upness@{}
+\xydef@\Drop@@{\styledboxz@}
+\xydef@\Connect@@{}
+\xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}}
+\xylet@\objectstyle=\textstyle
+\xydef@\object{\hbox\bgroup\resetStyle@\object@}
+\xydef@\object@{%
+ \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@
+ \plainxy@ \xyFN@\OBJECT@}
+\xydef@\composite#1#{\hbox\bgroup\composite@{#1}}
+\xydef@\composite@#1#2{%
+ \DN@{#1}\ifx\next@\empty\else\xywarning@{no variants of
+ \string\composite\space allowed}\fi
+ \global\setbox9=\hbox\bgroup
+ \D@p=-\maxdimen \U@p=-\maxdimen \L@p=-\maxdimen \R@p=-\maxdimen
+ \xyFN@\composite@i#2@}
+\xydef@\composite@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@i}%
+ \else\ifx *\next \DN@ *{\xyFN@\composite@i}%
+ \else\ifx @\next \DN@ @{\composite@x}%
+ \xyerror@{<composite> object expected}{}\czeroEdge@
+ \else \DN@{\composite@ii}\fi\fi\fi \next@}
+\xydef@\composite@ii#1#{\composite@iii{#1}}
+\xydef@\composite@iii#1#2{%
+ \setbox\z@=\object#1{#2}%
+ \ifInvisible@ \setboxz@h{}\else
+ \setboxz@h{\kern-\L@c \boxz@}\ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi
+ \ifHidden@\else
+ \ifdim\U@p<\U@c \U@p=\U@c \fi \ifdim\D@p<\D@c \D@p=\D@c \fi
+ \ifdim\R@p<\R@c \R@p=\R@c \fi \ifdim\L@p<\L@c \L@p=\L@c \fi
+ \fi
+ \xyFN@\composite@iv}
+\xydef@\composite@iv{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@iv}%
+ \else \ifx @\next \DN@ @{\composite@x}%
+ \else \let\next@=\composite@i \fi\fi \next@}
+\xydef@\composite@x{%
+ \edef\tmp@{\egroup
+ \D@c=\the\D@p \U@c=\the\U@p \L@c=\the\L@p \R@c=\the\R@p}\tmp@
+ \setboxz@h{\kern\L@c\box9}\ht\z@=\U@c \dp\z@=\D@c
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
+ \Edge@c={\rectangleEdge}\computeLeftUpness@ \boxz@
+ \OBJECT@x}
+\xydef@\computeLeftUpness@{%
+ \dimen@=\L@c \advance\dimen@\R@c
+ \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}%
+ \ifdim\zz@\L@c\else
+ \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}%
+ \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi
+ \else \quotient@\Leftness@\L@c\dimen@ \fi
+ \dimen@=\U@c \advance\dimen@\D@c
+ \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}%
+ \ifdim\zz@\U@c\else
+ \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}%
+ \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi
+ \else \quotient@\Upness@\U@c\dimen@ \fi}
+\xydef@\xybox#1{\xy#1\endxy \Edge@c={\rectangleEdge}\computeLeftUpness@}
+\xydef@\OBJECT@shift{%
+ \let\xy@=\xytotoks@ \afterVECTORorEMPTY
+ {\OBJECT@shift@}%
+ {\addtotoks@{\X@c=-\L@c \advance\X@c\R@p \advance\X@c\L@p \Y@c=\U@p}%
+ \OBJECT@shift@}}
+\xydef@\OBJECT@shift@{%
+ \addtotoks@{\advance\U@p-\Y@c
+ \advance\L@c\X@c \advance\R@c-\X@c \advance\D@c\Y@c \advance\U@c-\Y@c
+ \computeLeftUpness@}%
+ \let\xy@=\oxy@ \xyFN@\OBJECT@}
+\xylet@\objectmargin@=\jot
+\xylet@\objectwidth@=\z@
+\xylet@\objectheight@=\z@
+\xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}}
+\xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}}
+\xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}}
+\xydef@\OBJECT@change{%
+ \afterADDOP{%
+ \addEQ@\ifx \next
+ \addtotoks@{\X@c=\D@c \advance\X@c\U@c \Y@c=\L@c \advance\Y@c\R@c}%
+ \else
+ \addtotoks@{\X@c=\objectmargin@ \advance\X@c\X@c \Y@c=\X@c}%
+ \fi
+ \let\xy@=\xytotoks@
+ \afterVECTORorEMPTY\OBJECT@change@\OBJECT@change@}}
+\xydef@\OBJECT@set{%
+ \afterADDOP{%
+ \let\xy@=\xytotoks@ \afterVECTORorEMPTY\OBJECT@change@
+ {\addtotoks@{\X@c=\objectwidth@ \Y@c=\objectheight@}\OBJECT@change@}}}
+\xydef@\OBJECT@change@{%
+ \addtotoks@{\advance\R@c\L@c \advance\R@p-\L@c \let\tmp@=\R@c}%
+ \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\X@c\R@c=\tmp@
+ \L@c=\Leftness@\R@c \advance\R@p\L@c \advance\R@c-\L@c}%
+ \addtotoks@{\advance\D@c\U@c \let\tmp@=\D@c}%
+ \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\Y@c\D@c=\tmp@
+ \U@c=\Upness@\D@c \advance\D@c-\U@c}%
+ \let\xy@=\oxy@ \xyFN@\OBJECT@}
+\xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@}
+\xylet@\afterADDOP@=\empty
+\xydef@\ADDOP@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}%
+ \else\addPLUS@\ifx \next \addPLUS@\DN@{\xyFN@\ADDOP@plus}%
+ \else\addDASH@\ifx \next \addDASH@\DN@{\xyFN@\ADDOP@minus}%
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}%
+ \else
+ \DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\ADDOP@plus{%
+ \addEQ@\ifx \next
+ \addEQ@\DN@{\def\Addop@@{\Addop@0+<}\afterADDOP@}%
+ \else
+ \DN@{\def\Addop@@{\Addop@1+=}\afterADDOP@}%
+ \fi \next@}
+\xydef@\ADDOP@minus{%
+ \addEQ@\ifx \next
+ \addEQ@\DN@{\def\Addop@@{\Addop@0+>}\afterADDOP@}%
+ \else
+ \DN@{\def\Addop@@{\Addop@1-=}\afterADDOP@}%
+ \fi \next@}
+\xydef@\Addop@#1#2#3#4#5{%
+ \dimen@=#4\relax \edef#4{\the\dimen@}%
+ \dimen@=#1\dimen@ \advance\dimen@#2#5\relax
+ \ifdim\dimen@#3#4\else \edef#4{\the\dimen@}\fi
+ \ifx\xy@\xyinitial@\else \DN@##1{\xy@@{\edef#4{##1}\checkZeroEdge@}}%
+ \expandafter\next@\expandafter{#4}\fi}
+\xydef@\objectEdge{\rectangleEdge}
+\xydefcsname@{shape [r]}{\advance\U@p\D@c \centerobject@
+ \ifdim\L@c>\D@c
+ \advance\R@c\L@c \L@c=.5\U@c \advance\L@c.5\D@c \advance\R@c-\L@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [l]}{\advance\U@p\D@c \centerobject@
+ \ifdim\L@c>\D@c
+ \advance\L@c\R@c \R@c=.5\U@c \advance\R@c.5\D@c \advance\L@c-\R@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [u]}{\advance\U@p\D@c \centerobject@
+ \ifdim\D@c>\L@c
+ \advance\U@c\D@c \D@c=.5\L@c \advance\D@c.5\R@c \advance\U@c-\D@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [d]}{\advance\U@p\D@c \centerobject@
+ \ifdim\D@c>\L@c
+ \advance\D@c\U@c \U@c=.5\L@c \advance\U@c.5\R@c \advance\D@c-\U@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [c]}{\advance\U@p\D@c \centerobject@ \advance\U@p-\D@c}
+\xydef@\centerobject@{%
+ \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c}
+\xydef@\OBJECT@shape#1{\DN@{shape [#1]}%
+ \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+ \ifx\nextii@\relax\DN@{style [#1]}%
+ \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+ \ifx\nextii@\relax \DN@{\OBJECT@shapei[#1]}%
+ \else\DN@{\nextii@\xyFN@\OBJECT@}\fi
+ \else \expandafter\addtotoks@\expandafter{\nextii@}%
+ \DN@{\xyFN@\OBJECT@}%
+ \fi \next@}
+\xydefcsname@{shape []}{\the\Edge@c5\relax}%
+\xydefcsname@{shape [Outer]}{\the\Edge@c5\relax}%
+\xydefcsname@{shape [Inner]}{\the\Edge@c4\relax}%
+\xydefcsname@{shape [o]}{\Edge@c={\circleEdge}\the\Edge@c5\relax
+ \Edge@c={\circleEdge}\def\prevEdge@@{\circleEdge}}
+\xydefcsname@{shape [.]}{\czeroEdge@}
+\def\OBJECT@shapei[#1#2]{\DN@{shape [#1...]}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax\DN@{*stylechar@#1@}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax\DNii@{shape [#1#2]}%
+ \xywarning@{illegal [<shape>] ignored: \codeof\nextii@\space not defined}%
+ \DN@{\xyFN@\OBJECT@}%
+ \else% Delete this: \expandafter\addtotoks@\expandafter{\next{#2}}%
+ \DN@{\next{#2}\xyFN@\OBJECT@}%
+ \fi
+ \else
+\expandafter\addtotoks@\expandafter{\next{#2}}\DN@{\next{#2}\xyFN@\OBJECT@}%
+ \fi \next@}
+\xydef@\preXY@style@{}
+\xydef@\postXY@style@{}
+\xydef@\resetStyle@{\gdef\preXY@style@{}\gdef\postXY@style@{}}
+\xynew@{toks}{\styletoks@}
+\xydef@\addtostyletoks@#1{%
+ \expandafter\styletoks@\expandafter{\the\styletoks@#1}}
+\xydef@\styledboxz@{%
+ \xypre@Style@@
+ \boxz@
+ \xypost@Style@@}
+\xydef@\xypre@Style@{\styletoks@={}\saveXyStyle@\preXY@style@
+ \expandafter\DN@\expandafter{\the\styletoks@}%
+ \ifx\next@\empty \DN@{\let\xypre@Style@@=\relax
+ \let\xypost@Style@@=\relax \xypre@skipStyle@}%
+ \else
+ \let\xypre@Style@@=\relax \let\xypost@Style@@=\xypost@Style@
+ \DN@{\expandafter\xydoprestyles@\expandafter{\the\styletoks@}}%
+ \fi \next@ }
+\xydef@\xypost@Style@{\styletoks@={}\postXY@style@
+ \expandafter\xydopoststyles@\expandafter{\the\styletoks@}%
+ \let\xypost@Style@@=\relax \let\xypre@Style@@=\xypre@Style@ }
+\xydef@\xypre@skipStyle@#1\xypost@Style@@{#1\relax
+ \let\xypre@Style@@=\xypre@Style@ }
+\xydef@\xydoprestyles@@{\literal@}
+\xydef@\xydopoststyles@@{\literal@}
+\xylet@\xydoprestyles@=\xydoprestyles@@
+\xylet@\xydopoststyles@=\xydopoststyles@@
+\xydef@\modXYstyle@{%
+ \ifx\xy@style@\empty\resetStyle@\fi \checkXyStyle@
+ \expandafter\expandafter\expandafter\DN@
+ \expandafter\expandafter\expandafter{\preXYstyle@@}%
+ \ifx\next@\empty\else\DN@{\modXYstyle@@}\fi \next@ }
+\xydef@\modXYstyle@@{%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\preStyle@@}%
+ \DN@##1{\expandafter\gdef\expandafter\preXY@style@\expandafter{%
+ \preXY@style@ ##1}}\expandafter\next@\expandafter{\tmp@}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\postStyle@@}%
+ \DN@##1{\expandafter\gdef\expandafter\postXY@style@\expandafter{%
+ \tmp@ ##1}}\expandafter\next@\expandafter{\postXY@style@}}
+\xydef@\xy@style@{}
+\xydef@\checkXyStyle@{\ifx\xy@style@\empty\resetStyle@\fi
+ \let\xy@style@=\relax}
+\xydef@\preStyle@@{}
+\xydef@\postStyle@@{}
+\xydef@\preXYstyle@@{\relax}
+\xydef@\loadxystyle@{%
+ \let\xypre@Style@@=\xypre@Style@ \def\preXYstyle@@{\preStyle@@}}
+\loadxystyle@
+\xydef@\Unloadstyle@{%
+ \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax
+ \def\preXYstyle@@{\relax}}
+\xydefcsname@{shape [=...]}#1{\checkXyStyle@ \addtotoks@{\xynamestyle@{#1}}}
+\xydef@\xynamestyle@#1{\checkXyStyle@
+ \expandafter\DNii@\expandafter{\csname shape [#1]\endcsname}%
+ \expandafter\ifx\nextii@\relax
+ \else\xywarning@{Redefining style [#1]}\fi
+ \expandafter\xynamestyle@@\csname shape [#1]\endcsname }
+\xydef@\xynamestyle@@#1{%
+ \expandafter\def\expandafter\tmp@\expandafter{\preXY@style@}%
+ \DN@##1{\def\tmp@{\checkXyStyle@\gdef\preXY@style@{##1}}}%
+ \expandafter\next@\expandafter{\preXY@style@}%
+ \DN@##1{\expandafter\gdef\expandafter#1\expandafter{\tmp@
+ \gdef\postXY@style@{##1}}}%
+ \expandafter\next@\expandafter{\postXY@style@}\DN@{}}
+\xydef@\prevXypreStyle@@{}
+\xydef@\prevXypostStyle@@{}
+\xydef@\saveXyStyle@{\expandafter
+ \def\expandafter\prevXypreStyle@@\expandafter{\preXY@style@}%
+ \expandafter\def\expandafter\prevXypostStyle@@\expandafter{%
+ \postXY@style@}}
+\xydef@\recoverXyStyle@{\expandafter
+ \gdef\expandafter\preXY@style@\expandafter{\prevXypreStyle@@}%
+ \expandafter\gdef\expandafter\postXY@style@\expandafter{%
+ \prevXypostStyle@@}}
+\xydef@\newxystyle#1#2#3{%
+ \DN@{#3}\ifx\next@\empty
+ \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}%
+ \else \expandafter\def\csname shape [#1]\endcsname{%
+ \csname xyshape@#1@\endcsname}\fi
+ \DN@{#2}\ifx\next@\empty
+ \expandafter\def\csname xyshape@#1@\endcsname{%
+ \xyundefinedStyle@{#1}{}@@}%
+ \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi}
+\xydef@\xyundefinedStyle@#1#2@@{%
+ \xywarning@{style #1 not defined, nothing to apply}}
+\xydef@\applyFIFOstyle@#1#2#3#4{\bgroup
+ \styletoks@={\egroup\gdef\preXY@style@}%
+ \expandafter\toks@\expandafter{\preXY@style@}%
+ \expandafter\addtotoks@\expandafter{\expandafter#1\expandafter{#2}}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}%
+ \gdef\postXY@style@}%
+ \expandafter\toks@\expandafter{\expandafter#3\expandafter{#4}}%
+ \expandafter\addtotoks@\expandafter{\postXY@style@}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}%
+ \the\styletoks@ }
+\xydef@\applyLIFOstyle@#1#2#3#4{\bgroup
+ \styletoks@={\egroup\gdef\preXY@style@}%
+ \expandafter\toks@\expandafter{\expandafter#1\expandafter{#2}}%
+ \expandafter\addtotoks@\expandafter{\preXY@style@}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}%
+ \gdef\postXY@style@}%
+ \expandafter\toks@\expandafter{\postXY@style@}%
+ \expandafter\addtotoks@\expandafter{\expandafter#3\expandafter{#4}}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}%
+ \the\styletoks@ }
+\xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{%
+ \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@
+ \xyFN@\OBJECT@}%
+ {\xyFN@\OBJECT@}}
+\xydef@\afterDIRECTIONorEMPTY#1#2{%
+ \DN@##1{\def\afterDIRECTION@{\def\afterDIRECTION@{##1}%
+ \ifDIRECTIONempty@\DN@{#2}\else\DN@{#1}\fi \next@}}%
+ \expandafter\next@\expandafter{\afterDIRECTION@}%
+ \xyFN@\DIRECTION@}
+\xylet@\afterDIRECTION@=\empty
+\xynew@{if}\ifDIRECTIONempty@
+\xydef@\DIRECTION@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\DIRECTION@}%
+ \else\ifx v\next \DN@ v{\DIRECTION@v}%
+ \else\ifx \bgroup\next \let\next@=\DIRECTION@group
+ \else\ifx (\next \DN@({\xyFN@\DIRECTION@open}%
+ \else
+ \DN@{\count@=8
+ \afterDIAG{\ifnum\count@=8 \DN@{\DIRECTIONempty@true \xyFN@\DIRECTION@i}%
+ \else \DN@{\xy@@{\dimen@=\xydashl@}\Directionfromdiag@}\fi \next@}}%
+ \fi\fi\fi\fi \next@}
+\xydef@\DIRECTION@open{%
+ \ifx *\next \DN@*##1*){\DIRECTION@group{##1}}%
+ \else \DN@{\xyerror@{(* <pos> *) expected}{} \xyFN@\DIRECTION@i}%
+ \fi \next@}
+\def\afterDIAG#1{\def\afterDIAG@{#1}\xyFN@\DIAG@}
+\xydef@\DIAG@{%
+ \ifx d\next \DN@ d{\count@=1 \xyFN@\DIAG@@}%
+ \else\ifx r\next \DN@ r{\count@=3 \xyFN@\DIAG@@}%
+ \else\ifx u\next \DN@ u{\count@=5 \xyFN@\DIAG@@}%
+ \else\ifx l\next \DN@ l{\count@=7 \xyFN@\DIAG@@}%
+ \else \let\next@=\afterDIAG@
+ \fi\fi\fi\fi \next@}
+\xydef@\DIAG@@{\ifcase\count@ \or
+ \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0%
+ \else\xybug@{impossible <diag> number}\fi
+ \next@}
+\xydef@\DIAG@@@#1#2#3#4{%
+ \ifx #1\next \count@=#2\DN@#1{\afterDIAG@}%
+ \else \ifx #3\next \count@=#4\DN@#3{\afterDIAG@}%
+ \else \let\next@=\afterDIAG@ \fi\fi}
+\xydef@\Directionfromdiag@{\ifcase\count@
+ \xy@@{\dlDirection@\dimen@}%
+ \or \xy@@{\dDirection@\dimen@}%
+ \or \xy@@{\drDirection@\dimen@}%
+ \or \xy@@{\rDirection@\dimen@}%
+ \or \xy@@{\urDirection@\dimen@}%
+ \or \xy@@{\uDirection@\dimen@}%
+ \or \xy@@{\ulDirection@\dimen@}%
+ \or \xy@@{\lDirection@\dimen@}%
+ \or
+ \else\xybug@{impossible <diag>}\fi
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}
+\xydef@\DIRECTION@v{%
+ \xy@{v}{\enter@{\cfromthec@ \X@origin=\the\X@origin \Y@origin=\the\Y@origin
+ \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \X@origin=\z@ \Y@origin=\z@}%
+ \afterVECTORorEMPTY
+ {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ {\xy@@\leave@ \xyerror@{<vector> expected after v}{}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}}
+\xydef@\DIRECTION@group#1{%
+ \xy@@{\begingroup}\xy@@ix@{#1}\xy@@{\plainxy@\expandafter\POS\the\toks9\relax
+ \setupDirection@\edef\next@{\endgroup \DirectionfromtheDirection@}\next@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}
+\xydef@\DIRECTION@i{%
+ \ifx ^\next \DN@ ^{\xy@^{\aboveDirection@\xydashl@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ \else\ifx _\next \DN@ _{\xy@_{\belowDirection@\xydashl@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ \else\ifx :\next \DN@ :{%
+ \xy@{:}{\enter@{\cfromthec@ \basefromthebase@ \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \X@origin=\z@ \Y@origin=\z@
+ \X@xbase=\cosDirection\xydashl@ \Y@xbase=\sinDirection\xydashl@
+ \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}%
+ \afterVECTORorEMPTY
+ {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ {\xy@@\leave@ \xyerror@{<vector> expected after :}{}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}}%
+ \else
+ \let\next@=\afterDIRECTION@
+ \fi\fi\fi \next@}
+\message{decorations;}
+\xydef@\drop#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
+ \xy@{\drop#1{##1}}{\expandafter\drop@\the\toks9 }\ignorespaces}\next@}
+\xydef@\connect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
+ \xy@{\connect#1{##1}}{\expandafter\connect@\the\toks9 }\ignorespaces}\next@}
+\xydef@\preconnect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
+ \xy@{\connect#1{##1}}{\expandafter\preconnect@\the\toks9 }\ignorespaces}\next@}
+\xydef@\save{\relax\saveC}
+\xydef@\saveC{\xy@\save\save@ \POS}
+\xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}}
+\xydef@\restore{\xy@\restore\leave@ \ignorespaces}
+\xydef@\xyecho{%
+ \xy@\xyecho{\let\xy@=\xyecho@ \message{\string\xyecho}}\POS}
+\xydef@\xyecho@#1#2{{\def\1{#1}\ifx\1\empty\else\message{\codeof\1}\fi}%
+ \oxy@{#1}{#2}}
+\xydef@\xyverbose{%
+ \xy@\xyverbose{\let\xy@=\xyverbose@
+ \W@{Xy: \string\xyverbose\xytracelineno@}}\POS}
+\xydef@\xyverbose@#1#2{%
+ {\def\1{#1}\ifx\1\empty\else\W@{Xy: \codeof\1\xytracelineno@}\fi}%
+ \oxy@{#1}{#2}}
+\xydef@\xytracing{%
+ \xy@\xytracing{\let\xy@=\xytracing@
+ \W@{Xy TRACE: \string\xytracing\xytracelineno@}\xystatus@:}\POS}
+\xydef@\xytracing@#1#2{{\def\1{#1}\def\2{#2}%
+ \W@{Xy TRACE: \codeof\1 {\codeof\2}\xytracelineno@}}\oxy@{#1}{#2}\xystatus@:}
+\xydef@\xystatus@#1{\xystatus@cp{#1}%
+ \W@{#1 d=<\the\d@X,\the\d@Y>
+ Direction=\the\Direction=\string(\cosDirection,\sinDirection\string)}%
+ \W@{#1 base=<\the\X@origin,\the\Y@origin>+%
+ <\the\X@xbase,\the\Y@xbase>x+<\the\X@ybase,\the\Y@ybase>y}%
+ \W@{#1 min/max=<\the\X@min,\the\Y@min>/<\the\X@max,\the\Y@max>
+ S=\the\csp@}}
+\xydef@\xystatus@cp#1{%
+ \W@{#1 c=<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c
+ \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]
+ \ifInvisible@ I\fi\ifHidden@ H\fi}%
+ \W@{#1 p=<\the\X@p,\the\Y@p> \expandafter\string\the\Edge@p
+ \string[\the\L@p+\the\R@p,\the\D@p+\the\U@p\string]}}
+\xydef@\xystatus@c#1{%
+ \W@{#1<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c
+ \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]}}
+\xydef@\xyquiet{\xy@\xyquiet{\let\xy@=\oxy@}}
+\xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces}
+\xydef@\xyignore@#1{{\let\xy@=\xyeat@ \change@oxy@\xy@ \POS#1\relax}}
+\xydef@\xyeat@#1#2{}
+\xydef@\xycompile@@{\jobname-}
+\xydef@\xycompileno@@{0}
+\xydef@\CompilePrefix#1{%
+ \def\xycompile@@{#1}\xdef\xycompile@@{\codeof\xycompile@@}%
+ \xdef\xycompileno@@{0}}
+\xydef@\xycompile{%
+ \count@=\xycompileno@@ \advance\count@\@ne
+ \xdef\xycompileno@@{\ifnum10>\count@ 0\fi \the\count@}%
+ \edef\next{\noexpand\xycompileto{\xycompile@@\xycompileno@@}}\next}
+\xylet@\compilename@@=\empty
+\xylet@\xyrecompile@@=\relax
+\xydef@\xycompileto#1#2{%
+ \if\inxy@ \DN@{\xy@@{\nter@{}}}%
+ \else \DN@{\xy \xy@@{\nter@{\endxy}}}\fi \next@
+ \ifxysaving@ \xyerror@{Compilations can not be nested}{}\fi
+ \DN@{#1}\edef\compilename@@{\codeof\next@}\DNii@{#2}%
+ \def\xyrecompile@@{recompiling TRUNCATED}%
+ \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyc}%
+ {\def\xyrecompile@@{compiling to}}%
+ \ifx\xyrecompile@@\relax \else \expandafter\xyrecompile@ \fi
+ \xy@@\leave@ \ignorespaces}
+\xydef@\xyrecompile@{%
+ \message{(\xyrecompile@@\space\string`\compilename@@.xyc\string'}%
+ \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyc
+ \immediate\write\xywrite@{%
+ \string\xycompiled{\compilename@@}%
+ {\the\year/\the\month/\the\day\string:\the\time\xytracelineno@}%
+ {Xy-pic \xyversion}\xycomment@}%
+ \immediate\write\xywrite@{{\codeof\nextii@}\relax}%
+ {\xysaving@ \expandafter\POS\nextii@ \relax}%
+ \immediate\write\xywrite@{\string\xyendcompiled}%
+ \immediate\closeout\xywrite@ \message{done)}%
+ \expandafter\input\compilename@@.xyc
+ \outlines@@\writeoutline@\writeoutline@}
+\xydef@\xysaving@{\let\xy@=\xysave@ \change@oxy@\xy@
+ \let\xy@@ix@=\xysave@@toksix@ \xysaving@true}
+\xynew@{if}\ifxysaving@ \xysaving@false
+\xydef@\xysave@#1#2{{\DN@{{#1}{#2}}%
+ \immediate\write\xywrite@{\string\xy@\codeof\next@\xycomment@}}}
+\xydef@\xysave@@toksix@#1{{\DN@{{#1}}%
+ \immediate\write\xywrite@{\string\xy@@ix@\codeof\next@\relax}}}
+\xywarnifdefined\xycomment@
+{\catcode`\%=12 \catcode`\(=1 \catcode`\)=2 \gdef\xycomment@(%)}
+\xydef@\xycompiled#1#2#3#4{\DN@{#1}\edef\next@{\codeof\next@}%
+ \ifx\next@\compilename@@\else
+ \xywarning@{This file does not contain the result of
+ \string\xycompileto{\compilename@@}{...}^^J%
+ but of \string\xycompileto{\next@}}\fi
+ \edef\next{Xy-pic \xyversion}\DN@{#3}\ifx\next\next@
+ \DN@{#4}\ifx\next@\nextii@ \xycatcodes \outlines@@\relax\readoutline@
+ \else \def\xyrecompile@@{recompiling to}\endinput \fi
+ \else \def\xyrecompile@@{Xy-pic version change - recompiling}\endinput \fi}
+\xydef@\xyendcompiled{\let\xyrecompile@@=\relax \xyuncatcodes\endinput}
+\xydef@\CompileFixPoint#1{%
+ \expandafter\ifx\csname#1FIX@@\endcsname\relax
+ \expandafter\xdef\csname#1FIX@@\endcsname{\xycompileno@@}%
+ \else
+ \xdef\xycompileno@@{\csname#1FIX@@\endcsname}\fi}
+\xydef@\outlines@no#1#2{}
+\xydef@\outlines@make#1#2{#1}
+\xydef@\outlines@only#1#2{#2}
+\xylet@\outlines@@=\outlines@no
+\xylet@\writeoutline@@=\relax
+\xylet@\readoutline@@=\relax
+\xydef@\MakeOutlines{\let\outlines@@=\outlines@make}
+\xydef@\OnlyOutlines{\xywarning@{Compiled pictures only shown as outlines}%
+ \let\outlines@@=\outlines@only}
+\xydef@\ShowOutlines{\let\readoutline@@=\typesetoutline@}
+\xydef@\NoOutlines{\let\outlines@@=\outlines@no}
+\xydef@\writeoutline@{%
+ \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyd
+ \immediate\write\xywrite@{\xycomment@\space\compilename@@.xyd}
+ \immediate\write\xywrite@{%
+ \string\X@min=\the\X@min \string\X@max=\the\X@max
+ \string\Y@min=\the\Y@min \string\Y@max=\the\Y@max \string\relax}%
+ \writeoutline@@
+ \immediate\closeout\xywrite@}
+\xynew@{if}\ifoutlineread@
+\xydef@\readoutline@{\outlineread@true
+ \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyd}%
+ {\def\xyrecompile@@{outline missing - recompiling to}\outlineread@false}%
+ \ifoutlineread@ \readoutline@@
+ \writeoutline@\expandafter\xyendcompiled\fi}
+\xydef@\typesetoutline@{%
+ \xy@@{\czeroEdge@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}%
+ \X@p=\X@min \Y@p=\Y@min \X@c=\X@min \Y@c=\Y@max \connect@\dir{.}%
+ \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@max \connect@\dir{.}%
+ \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@min \connect@\dir{.}%
+ \X@p=\X@c \Y@p=\Y@c \X@c=\X@min \Y@c=\Y@min \connect@\dir{.}}}
+\message{kernel objects:}
+\message{directionals,}
+\xydef@\dir{\hbox\bgroup\xyFN@\dir@i}
+\xydef@\dir@i{\ifx *\next \DN@*{\resetStyle@\object@}%
+ \else \let\next@=\dir@ii \fi \next@}
+\xydef@\dir@ii#1#{\dir@{#1}}
+\xydef@\dir@#1#2{\DN@{dir#1{#2}}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax \DN@{dir{#2}}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax \DN@{\dir#1{#2}}%
+ \xyerror@{illegal <dir>: \codeof\next@\space not defined}{}%
+ \let\next=\no@ \fi\fi \next}
+\xydefcsname@{dir{}}{\no@}
+\xyletcsnamecsname@{dir0{}}{dir{}}
+\xyletcsnamecsname@{dir1{}}{dir{}}
+\xyletcsnamecsname@{dir^{}}{dir{}}
+\xyletcsnamecsname@{dir_{}}{dir{}}
+\xyletcsnamecsname@{dir2{}}{dir{}}
+\xyletcsnamecsname@{dir3{}}{dir{}}
+\xyletcsnamecsname@{dir{ }}{dir{}}
+\xydef@\no@{\egroup \czeroEdge@
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}}
+\xydefcsname@{dir1{-}}{\line@}
+\xydefcsname@{dir2{-}}{\line@ \double@\xydashh@}
+\xydefcsname@{dir3{-}}{\line@ \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{-}}{dir{}}
+\xyletcsnamecsname@{dir{-}}{dir1{-}}
+\xyletcsnamecsname@{dir{=}}{dir2{-}}
+\xydef@\line@{\dimen@=\sd@Y\sinDirection\xydashl@
+ \ifnum\SemiDirectionChar<31 \D@c=\z@ \U@c=\dimen@ \DN@{\d@Y<\z@}%
+ \else\ifnum\SemiDirectionChar<64 \D@c=\dimen@ \U@c=\z@ \DN@{\z@<\d@Y}%
+ \else\ifnum\SemiDirectionChar<96 \D@c=\dimen@ \U@c=\z@ \DN@{\d@X<\z@}%
+ \else \D@c=\z@ \U@c=\dimen@ \DN@{\d@X<\z@}\fi\fi\fi
+ \setboxz@h{\line@@}\ht\z@=\U@c \dp\z@=\D@c
+ \L@c=\z@ \R@c=\wdz@
+ \ifdim\next@ \dimen@=\R@c \R@c=\L@c \L@c=\dimen@
+ \dimen@=\U@c \U@c=\D@c \D@c=\dimen@ \advance\dimen@-\U@c
+ \lower\dimen@\boxz@
+ \else \boxz@ \fi
+ \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c}%
+ \tmp@
+ \Edge@c={\rectangleEdge}%
+ \ifdim\z@<\U@c \def\Upness@{1}\else \def\Upness@{0}\fi
+ \ifdim\z@<\L@c \def\Leftness@{1}\else \def\Leftness@{0}\fi
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}}
+\xydef@\line@@{{\xydashfont\SemiDirectionChar\/}}
+\xydef@\solid@{%
+ \checkXy@rules@\solidhrule@\solidvrule@{\straight@\solidSpread@}}
+\xydef@\checkXy@rules@#1#2#3{%
+ \dimen@=\Y@c \advance\dimen@-\Y@p
+ \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#1}%
+ \else \dimen@=\X@c \advance\dimen@-\X@p
+ \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#2}%
+ \else \DN@{#3}\fi\fi \next@}
+\xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi}
+\xylet@\ifjusthvtest@=\ifdim
+\xydef@\NoRules{\let\ifjusthvtest@=\iffalse}
+\xydef@\UseRules{\let\ifjusthvtest@=\ifdim}
+\xydef@\solidvrule@{\no@@ \solidvrule@typeset \ifHidden@\else\noinsert@\fi
+ \solidvrule@pre}
+\xydef@\solidvrule@pre{%
+ \def\Cbreak@@{%
+ \connectRestore@ \swap@\lastbreak@@\swap@
+ \solidvrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}%
+ \def\Clast@@{%
+ \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@
+ \solidvrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}%
+}
+\xydef@\solidvrule@typeset{%
+ \ifInvisible@ \let\next@=\relax \else \let\next@=\solidvrule@typeset@ \fi
+ \checkoverlap@@ \next@}
+\xydef@\solidvrule@typeset@{{%
+ \advance\X@c\X@p \X@c=.5\X@c \X@p=\X@c
+ \advance\X@c-.5\xydashw@ \advance\X@p.5\xydashw@
+ \ifdim\Y@c<\Y@p \advance\Y@c\U@c \advance\Y@p-\D@p
+ \else \swapdimen@\Y@c\Y@p \advance\Y@c\U@p \advance\Y@p-\D@c \fi
+ \Droprule@}}
+\xydef@\solidhrule@{\no@@ \solidhrule@typeset \ifHidden@\else\noinsert@\fi
+ \solidhrule@pre}
+\xydef@\solidhrule@pre{%
+ \def\Cbreak@@{%
+ \connectRestore@ \swap@\lastbreak@@\swap@
+ \solidhrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}%
+ \def\Clast@@{%
+ \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@
+ \solidhrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}%
+}
+\xydef@\solidhrule@typeset{%
+ \ifInvisible@ \let\next@=\relax \else \let\next@=\solidhrule@typeset@ \fi
+ \checkoverlap@@ \next@}
+\xydef@\solidhrule@typeset@{{%
+ \ifdim\X@c<\X@p \advance\X@c\R@c \advance\X@p-\L@p
+ \else \swapdimen@\X@c\X@p \advance\X@c\R@p \advance\X@p-\L@c \fi
+ \advance\Y@c\Y@p \Y@c=.5\Y@c \Y@p=\Y@c
+ \advance\Y@c-.5\xydashw@ \advance\Y@p.5\xydashw@
+ \Droprule@}}
+\xydef@\Droprule@{\advance\X@p-\X@c
+ \setboxz@h{\kern\X@c \vrule width\X@p depth-\Y@c height\Y@p}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \Drop@@}
+\xydef@\zerodot{\copy\zerodotbox@}
+\xydefcsname@{dir1{.}}{\point@}
+\xydefcsname@{dir2{.}}{\point@ \double@\xydashh@}
+\xydefcsname@{dir3{.}}{\point@ \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{.}}{dir{}}
+\xyletcsnamecsname@{dir{.}}{dir1{.}}
+\xyletcsnamecsname@{dir{:}}{dir2{.}}
+\xydef@\point@{\pointlike@\zerodot\p@}
+\xydef@\pointlike@#1#2{%
+ \setboxz@h{#1}\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@\egroup
+ \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}}
+\xydef@\dottedSpread@#1{%
+ \dimen@=#1\relax \DN@{\A@=2\A@ \B@=2\B@ \dottedSpread@i}%
+ \A@=\sd@X\cosDirection\dimen@ \B@=\sd@Y\sinDirection\dimen@
+ \dimen@=\A@ \advance\dimen@\B@
+ \dimen@ii=\sd@X\d@X \advance\dimen@ii\sd@Y\d@Y
+ \ifdim\dimen@>\dimen@ii \DN@{\count@@=\z@}\fi
+ \next@}
+\xydef@\dottedSpread@i{%
+ \global\setbox8=\hbox to\A@{\hss
+ \kern.5\A@\box\lastobjectbox@\kern.5\A@\hss}\dp8=.5\B@ \ht8=.5\B@
+ \advance\d@X\sd@X\A@ \advance\d@Y\sd@Y\B@
+ \advance\X@c\sd@X.5\A@ \advance\Y@c\sd@Y.5\B@
+ \ifdim\sd@Y\d@Y<\sd@X\d@X \dimen@=\sd@X\d@X
+ \ifdim\zz@\A@\else \divide\dimen@\A@ \fi \count@@=\dimen@
+ \else \dimen@=\sd@Y\d@Y
+ \ifdim\zz@\B@\else \divide\dimen@\B@ \fi \count@@=\dimen@
+ \fi \advance\count@@\@ne}
+\xydefcsname@{dir1{~}}{\squiggle@}
+\xydefcsname@{dir2{~}}{\squiggle@ \double@\xybsqlh@}
+\xydefcsname@{dir3{~}}{\squiggle@ \triple@\xybsqlh@}
+\xyletcsnamecsname@{dir0{~}}{dir{}}
+\xyletcsnamecsname@{dir{~}}{dir1{~}}
+\xydef@\squiggle@{\xybsqlfont
+ \dimen@=\sd@X\cosDirection\xybsqll@ \advance\dimen@.1\p@
+ \dimen@ii=\sd@Y\sinDirection\xybsqll@
+ \kern\dimen@\squiggle@@
+ \edef\tmp@{\egroup \U@c=\the\dimen@ii \L@c=\the\dimen@}\tmp@
+ \wdz@=2\L@c \R@c=\L@c \ht\z@=\U@c \D@c=\U@c \dp\z@=\U@c
+ \Edge@c={\rectangleEdge}%
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\squiggledSpread@}}
+\xydef@\squiggle@@{\DirectionChar \count@=\DirectionChar
+ \advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}
+\xydef@\squiggledSpread@{%
+ \dimen@=\d@X \advance\dimen@-\sd@X\count@@\A@ \advance\dimen@\sd@X.3\p@
+ \advance\X@c-.5\dimen@ \advance\d@X-\dimen@
+ \dimen@=\d@Y \advance\dimen@-\sd@Y\count@@\B@ \advance\dimen@\sd@Y.3\p@
+ \advance\Y@c-.5\dimen@ \advance\d@Y-\dimen@}
+\xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax
+ \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
+ \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
+ \setbox2=\hbox{\kern-\A@\raise-\B@ \noexpand\boxz@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}}
+\xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax
+ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
+ \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
+ \setbox2=\hbox{\kern-\A@\raise-\B@\copy\z@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
+ \dp\z@=\z@ \ht\z@=\z@ \wdz@=\z@ \noexpand\boxz@}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}}
+\xydefcsname@{dir1{--}}{\dash@}
+\xydefcsname@{dir2{--}}{\dash@ \double@\xydashh@}
+\xydefcsname@{dir3{--}}{\dash@ \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{--}}{dir{}}
+\xyletcsnamecsname@{dir{--}}{dir1{--}}
+\xyletcsnamecsname@{dir{==}}{dir2{--}}
+\xydef@\dash@{\line@ \wdz@=2\wdz@ \ht\z@=2\ht\z@ \dp\z@=2\dp\z@
+ \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@
+ \def\Connect@@{\straight@\dashedSpread@}}
+\xydef@\dashedSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi
+ \advance\d@X\sd@X.5\A@ \advance\d@Y\sd@Y.5\B@
+ \ifdim\z@<\d@X \advance\X@c.5\A@ \fi \advance\Y@c\sd@Y.5\B@}
+\xydefcsname@{dir1{~~}}{\dashsquiggle@}
+\xydefcsname@{dir2{~~}}{\dashsquiggle@ \double@\xybsqlh@}
+\xydefcsname@{dir3{~~}}{\dashsquiggle@ \triple@\xybsqlh@}
+\xyletcsnamecsname@{dir0{~~}}{dir{}}
+\xyletcsnamecsname@{dir{~~}}{dir1{~~}}
+\xydef@\dashsquiggle@{\squiggle@
+ \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c
+ \def\Connect@@{\straight@\dashsquiggledSpread@}}
+\xydef@\dashsquiggledSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi
+ \advance\X@c.5\A@ \advance\d@X.5\A@ \advance\Y@c.25\B@ \advance\d@Y.5\B@}
+\xyletcsnamecsname@{dir1{..}}{dir{.}}
+\xyletcsnamecsname@{dir2{..}}{dir2{.}}
+\xyletcsnamecsname@{dir3{..}}{dir3{.}}
+\xyletcsnamecsname@{dir{..}}{dir1{.}}
+\xyletcsnamecsname@{dir{::}}{dir2{.}}
+\xylet@\ctipEdge@=\czeroEdge@
+\xydefcsname@{dir1{>}}{\tip@}
+\xydefcsname@{dir^{>}}{\atip@}
+\xydefcsname@{dir_{>}}{\btip@}
+\xyletcsnamecsname@{dir0{>}}{dir{}}
+\xyletcsnamecsname@{dir{>}}{dir1{>}}
+\xydefcsname@{dir1{<}}{\reverseDirection@\tip@}
+\xydefcsname@{dir^{<}}{\reverseDirection@\btip@}
+\xydefcsname@{dir_{<}}{\reverseDirection@\atip@}
+\xyletcsnamecsname@{dir0{<}}{dir{}}
+\xyletcsnamecsname@{dir{<}}{dir1{<}}
+\xydef@\tip@{\tip@x\tip@@}
+\xydef@\atip@{\tip@x\atip@@}
+\xydef@\btip@{\tip@x\btip@@}
+\xydef@\tip@x#1{#1\egroup
+ \ctipEdge@
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\tip@@{\atip@@\btip@@}
+\xydef@\atip@@{\xyatipfont\DirectionChar}
+\xydef@\btip@@{\xybtipfont\DirectionChar}
+\xydefcsname@{dir2{>}}{\Tip@}
+\xydefcsname@{dir2{<}}{\reverseDirection@\Tip@}
+\xydef@\Tip@{\kern2.5pt \vrule height2.5pt depth2.5pt width\z@
+ \Tip@@ \kern2.5pt \egroup
+ \U@c=2.5pt \D@c=2.5pt \L@c=2.5pt \R@c=2.5pt \Edge@c={\circleEdge}%
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Tip@@{\count@=\DirectionChar
+ \advance\count@-4 \ifnum\count@<\z@ \advance\count@128 \fi
+ \xyatipfont\char\count@
+ \advance\count@ 8 \ifnum127<\count@ \advance\count@-128 \fi
+ \xybtipfont\char\count@}
+\xydefcsname@{dir3{>}}{\Ttip@}
+\xydefcsname@{dir3{<}}{\composite@{}{:(-1,0)\dir3{>}}}
+\xydef@\Ttip@{\kern3.2pt \vrule height3.2pt depth3.2pt width\z@
+ \Ttip@@ \kern3.2pt \egroup
+ \U@c=3.2pt \D@c=3.2pt \L@c=3.2pt \R@c=3.2pt \Edge@c={\circleEdge}%
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Ttip@@{%
+ \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c
+ {\vDirection@(1,-.31)\xydashl@ \xyatipfont\char\DirectionChar}%
+ {\vDirection@(1,+.31)\xydashl@ \xybtipfont\char\DirectionChar}}
+\xydefcsname@{dir1{|}}{\stopper@}
+\xydefcsname@{dir^{|}}{\aboveDirection@\xydashl@
+ \shiftdir@\line@\z@ \pointlike@{}\xydashh@}
+\xydefcsname@{dir_{|}}{\belowDirection@\xydashl@
+ \shiftdir@\line@\z@ \pointlike@{}\xydashh@}
+\xydefcsname@{dir2{|}}{\stopper@ \double@\xydashh@}
+\xydefcsname@{dir3{|}}{\stopper@ \double@{2\xydashh@}}
+\xyletcsnamecsname@{dir0{|}}{dir{}}
+\xyletcsnamecsname@{dir{|}}{dir1{|}}
+\xydef@\stopper@{\tip@x\stopper@@}
+\xydef@\stopper@@{\setboxz@h{\count@=\SemiDirectionChar \advance\count@64
+ \ifnum127<\count@ \advance\count@-128 \fi \xydashfont\char\count@\/}%
+ \setboxz@h{\kern-.5\wdz@ \dimen@=\sd@Y\cosDirection\xydashl@
+ \ifnum\SemiDirectionChar=95 \dimen@=\sd@X\sd@Y\dimen@ \fi
+ \raise.5\dimen@\boxz@}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydefcsname@{dir1{(}}{\hook@}
+\xydefcsname@{dir^{(}}{\ahook@}
+\xydefcsname@{dir_{(}}{\bhook@}
+\xyletcsnamecsname@{dir0{(}}{dir{}}
+\xyletcsnamecsname@{dir{(}}{dir1{(}}
+\xydefcsname@{dir1{)}}{\reverseDirection@\hook@}
+\xydefcsname@{dir^{)}}{\reverseDirection@\bhook@}
+\xydefcsname@{dir_{)}}{\reverseDirection@\ahook@}
+\xyletcsnamecsname@{dir0{)}}{dir{}}
+\xyletcsnamecsname@{dir{)}}{dir1{)}}
+\xydef@\hook@{\tip@x\hook@@}
+\xydef@\hook@@{\setboxz@h{\xybsqlfont
+ \vDirection@(1,-1){.707107\xybsqll@}%
+ \hbox{\DirectionChar
+ \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\ahook@{\tip@x\ahook@@}
+\xydef@\ahook@@{\setboxz@h{\xybsqlfont
+ \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X
+ \lower\d@Y\hbox{\DirectionChar
+ \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\bhook@{\tip@x\bhook@@}
+\xydef@\bhook@@{\setboxz@h{\xybsqlfont
+ \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar
+ \kern\d@X\raise\d@Y\hbox{\count@=\DirectionChar \advance\count@-96
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydefcsname@{dir^{'}}{\reverseDirection@\bturn@}
+\xydefcsname@{dir_{'}}{\reverseDirection@\aturn@}
+\xydefcsname@{dir^{`}}{\aturn@}
+\xydefcsname@{dir_{`}}{\bturn@}
+\xydef@\aturn@{\tip@x\aturn@@}
+\xydef@\aturn@@{\setboxz@h{\xybsqlfont
+ \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X
+ \lower\d@Y\hbox{\DirectionChar}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\bturn@{\tip@x\bturn@@}
+\xydef@\bturn@@{\setboxz@h{\xybsqlfont
+ \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\newdir#1#{\newdir@{#1}}
+\xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}}
+\xydef@\shiftdir@#1#2{%
+ \setbox\z@=\hbox\bgroup#1\relax
+ \setboxz@h{\dimen@ii=#2\relax
+ \dimen@=-\cosDirection\dimen@ii \advance\dimen@-\L@c
+ \kern\dimen@ \lower\sinDirection\dimen@ii\boxz@}%
+ \wdz@\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xylet@\tipjot@=\jot
+\xydefcsname@{dir1{>>}}{\shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir^{>>}}{\shiftdir@\atip@\tipjot@ \atip@}
+\xydefcsname@{dir_{>>}}{\shiftdir@\btip@\tipjot@ \btip@}
+\xydefcsname@{dir2{>>}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}}}
+\xydefcsname@{dir3{>>}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}}}
+\xyletcsnamecsname@{dir0{>>}}{dir{}}
+\xyletcsnamecsname@{dir{>>}}{dir1{>>}}
+\xydefcsname@{dir1{<<}}{\reverseDirection@ \shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir^{<<}}{\reverseDirection@ \shiftdir@\btip@\tipjot@ \btip@}
+\xydefcsname@{dir_{<<}}{\reverseDirection@ \shiftdir@\atip@\tipjot@ \atip@}
+\xydefcsname@{dir2{<<}}{\composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}}}
+\xydefcsname@{dir3{<<}}{\composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}}}
+\xyletcsnamecsname@{dir0{<<}}{dir{}}
+\xyletcsnamecsname@{dir{<<}}{dir1{<<}}
+\xydefcsname@{dir1{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
+ \pointlike@{}\jot}
+\xydefcsname@{dir^{||}}{\shiftdir@{\aboveDirection@\xydashl@\line@}\xydashh@
+ \shiftdir@{\aboveDirection@\xydashl@\line@}\z@ \pointlike@{}\jot}
+\xydefcsname@{dir_{||}}{\shiftdir@{\belowDirection@\xydashl@\line@}\xydashh@
+ \shiftdir@{\belowDirection@\xydashl@\line@}\z@ \pointlike@{}\jot}
+\xydefcsname@{dir2{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
+ \pointlike@{}\jot \double@\xydashh@}
+\xydefcsname@{dir3{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
+ \pointlike@{}\jot \double@{2\xydashh@}}
+\xyletcsnamecsname@{dir0{||}}{dir{}}
+\xyletcsnamecsname@{dir{||}}{dir1{||}}
+\xydefcsname@{dir1{>|}}{\shiftdir@\stopper@\z@ \tip@}
+\xydefcsname@{dir2{>|}}{\composite@{}{\dir2{>}*\dir2{|}}}
+\xydefcsname@{dir3{>|}}{\composite@{}{\dir3{>}*\dir3{|}}}
+\xyletcsnamecsname@{dir0{>|}}{dir{}}
+\xyletcsnamecsname@{dir{>|}}{dir1{>|}}
+\xydefcsname@{dir1{>>|}}{\shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir2{>>|}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}*\dir2{|}}}
+\xydefcsname@{dir3{>>|}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}*\dir3{|}}}
+\xyletcsnamecsname@{dir0{>>|}}{dir{}}
+\xyletcsnamecsname@{dir{>>|}}{dir1{>>|}}
+\xydefcsname@{dir1{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \tip@}
+\xydefcsname@{dir2{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Tip@}
+\xydefcsname@{dir3{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Ttip@}
+\xyletcsnamecsname@{dir0{|<}}{dir{}}
+\xyletcsnamecsname@{dir{|<}}{dir1{|<}}
+\xydefcsname@{dir1{|<<}}{\reverseDirection@
+ \shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir2{|<<}}{%
+ \composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}*\dir2{|}}}
+\xydefcsname@{dir3{|<<}}{%
+ \composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}*\dir3{|}}}
+\xyletcsnamecsname@{dir0{|<<}}{dir{}}
+\xyletcsnamecsname@{dir{|<<}}{dir1{|<<}}
+\xydefcsname@{dir1{|-}}{\shiftdir@\stopper@\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot}
+\xydefcsname@{dir^{|-}}{\shiftdir@{\aboveDirection@\xydashl@ \line@}\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot}
+\xydefcsname@{dir_{|-}}{\shiftdir@{\belowDirection@\xydashl@ \line@}\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot}
+\xydefcsname@{dir2{|-}}{\shiftdir@\stopper@\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot \double@\xydashh@}
+\xydefcsname@{dir3{|-}}{\shiftdir@\stopper@\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{|-}}{dir{}}
+\xyletcsnamecsname@{dir{|-}}{dir1{|-}}
+\xyletcsnamecsname@{dir{|=}}{dir2{|-}}
+\xydefcsname@{dir{+}}{%
+ \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@}
+\xyletcsnamecsname@{dir0{+}}{dir{}}
+\xydefcsname@{dir{x}}{\vDirection@(1,1)\jot
+ \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@}
+\xyletcsnamecsname@{dir0{x}}{dir{}}
+\xydefcsname@{dir{/}}{\vDirection@(1,-.3)\jot \stopper@}
+\xyletcsnamecsname@{dir0{/}}{dir{}}
+\xydefcsname@{dir{//}}{\vDirection@(1,-.3)\jot
+ \shiftdir@\stopper@\xydashh@ \stopper@}
+\xyletcsnamecsname@{dir0{//}}{dir{}}
+\xydefcsname@{dir{*}}{\solidpoint@}
+\xydef@\solidpoint@{%
+ \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\bullet$}}\jot}
+\xyletcsnamecsname@{dir0{*}}{dir{}}
+\xydefcsname@{dir{o}}{\hollowpoint@}
+\xydef@\hollowpoint@{%
+ \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\circ$}}\jot}
+\xyletcsnamecsname@{dir0{o}}{dir{}}
+\message{circles,}
+\xydef@\cir#1#{\hbox\bgroup
+ \afterVECTORorEMPTY{\xy@@{\R@=\X@c}\cir@}{\xy@@{\R@=\R@c}\cir@}#1@}
+\xydef@\cir@#1@#2{%
+ \DN@{#1}\ifx\next@\empty\else \xyerror@{illegal circle <radius>: must be
+ <vector> or <empty>}{}\fi
+ \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@}
+\xydef@\cir@cir{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}%
+ \else \ifx @\next \DN@ @{\cir@i}%
+ \else \xyerror@{illegal <cir>: must have form <diag><orient><diag> or
+ <empty>}{}%
+ \fi\fi \next@}
+\xydef@\cir@diag{%
+ \DN@{\xyerror@{illegal <cir>: must have form <diag><orient><diag> or
+ <empty>}{}}%
+ \ifx @\next \ifnum\count@=8
+ \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}%
+ \fi\fi \next@}
+\xydef@\cir@i{%
+ \ifnum\CIRin@@=8 \xyerror@{incomplete <cir> specification}{%
+The <cir> you specified as <diag><orient><diag> is not sufficiently specific.}%
+ \def\CIRin@@{0}\fi
+ \ifdim\R@<.5\p@ \R@=\z@ \zerodot
+ \else \CIRorient@@ \cirbuild@ \fi
+ \L@c=\R@ \R@c=\R@ \D@c=\R@ \U@c=\R@ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}%
+ \Edge@c={\circleEdge}\OBJECT@x}
+\xydef@\CIRin@@{3}
+\xydef@\CIRout@@{3}
+\xylet@\CIRorient@@=\empty
+\xydef@\afterCIRorDIAG#1#2{\def\afterCIR@{#1}\def\afterCIRDIAG@{#2}\xyFN@\CIR@}
+\xylet@\afterCIR@=\empty
+\xylet@\afterCIRDIAG@=\empty
+\xydef@\CIR@{\count@=8 \afterDIAG{\edef\CIRin@@{\the\count@}\xyFN@\CIR@@}}
+\xydef@\CIR@@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\CIR@@}%
+ \else\ifx ^\next
+ \DN@ ^{\def\CIRorient@@{\CIRacw@}%
+ \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}%
+ \else\ifx _\next
+ \DN@_{\def\CIRorient@@{\CIRcw@}%
+ \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}%
+ \else
+ \DN@{\def\CIRorient@@{\relax}\afterCIRDIAG@}%
+ \fi\fi\fi \next@}
+\xylet@\CIRtest@@=\relax
+\xydef@\CIRlo@@{0}
+\xydef@\CIRhi@@{0}
+\xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}}
+\xydef@\cirbuild@{\cirrestrict@@ \multiply\count@8
+ \circhar@0\circhar@7\kern\dimen@
+ \circhar@1\circhar@6\kern\dimen@
+ \circhar@2\circhar@5\kern\dimen@
+ \circhar@3\circhar@4\kern\dimen@}
+\xydef@\circhar@#1{%
+ \setboxz@h{\circhar@@{#1}}\dimen@=\wdz@ \wdz@=\z@ \ht\z@=\R@ \dp\z@=\R@
+ \CIRtest@@#1{\styledboxz@}\setbox\z@=\copy\voidb@x}
+\xydef@\circhar@@#1{{\xycircfont \advance\count@#1\relax \char\count@}}
+\xydef@\cirrestrict@@{\begingroup \dimen@=\R@
+ \setboxz@h{\xycircfont\char\z@\char\@ne}\A@=\wdz@
+ \ifdim\R@<8\A@ \count@=\dimen@ \divide\count@\A@ \advance\count@\m@ne
+ \else\ifdim\R@<16\A@ \count@=\dimen@
+ \dimen@=2\A@ \divide\count@\dimen@ \advance\count@3
+ \else\ifdim\R@<32\A@ \count@=\dimen@
+ \dimen@=4\A@ \divide\count@\dimen@ \advance\count@7
+ \else \count@=15 \fi\fi\fi
+ \R@=\A@
+ \ifnum\count@<8 \multiply\R@\count@ \advance\R@\A@
+ \else\ifnum\count@<12 \multiply\R@\count@ \multiply\R@\tw@ \advance\R@-6\A@
+ \else\ifnum\count@<16 \multiply\R@\count@ \multiply\R@ 4 \advance\R@-28\A@
+ \else \multiply\R@ 32 \fi\fi\fi
+ \edef\@tmp{\endgroup \R@=\the\R@ \count@=\the\count@}\@tmp}
+\xydef@\CIRacw@{\count@@=\CIRin@@ \count@=\CIRout@@
+ \ifnum\count@=8 \count@=\count@@
+ \ifnum\count@<6 \advance\count@\tw@ \else \advance\count@-6 \fi \fi
+ \ifnum\count@@<\@ne \advance\count@@7 \else \advance\count@@\m@ne \fi
+ \ifnum\count@<\@ne \advance\count@7 \else \advance\count@\m@ne \fi
+ \ifnum\count@@>\count@ \let\CIRtest@@=\CIRtest@outside
+ \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}%
+ \else \let\CIRtest@@=\CIRtest@inside
+ \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}%
+ \fi}
+\xydef@\CIRcw@{\count@@=\CIRin@@ \count@=\CIRout@@
+ \ifnum\count@=8 \count@=\count@@
+ \ifnum\count@>\@ne \advance\count@-\tw@ \else \advance\count@6 \fi \fi
+ \ifnum\count@@<5 \advance\count@@\thr@@ \else \advance\count@@-5 \fi
+ \ifnum\count@<5 \advance\count@\thr@@ \else \advance\count@-5 \fi
+ \ifnum\count@@<\count@ \let\CIRtest@@=\CIRtest@outside
+ \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}%
+ \else \let\CIRtest@@=\CIRtest@inside
+ \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}%
+ \fi}
+\xydef@\CIRtest@inside#1#2{\let\next@=\relax
+ \ifnum\CIRlo@@>#1\else \ifnum#1<\CIRhi@@\DN@{#2}\fi\fi \next@}
+\xydef@\CIRtest@outside#1#2{\let\next@=\relax
+ \ifnum\CIRlo@@>#1\DN@{#2}\else \ifnum#1<\CIRhi@@\else\DN@{#2}\fi\fi \next@}
+\message{text;}
+\xydef@\txt{\hbox\bgroup \xyFN@\txt@}
+\xydef@\txt@{%
+ \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\txt@i}%
+ \else \DN@{\A@=\maxdimen \txt@i}\fi \next@}
+\xydef@\txt@i#1#{%
+ \setboxz@h{#1\mathstrut}\dimen@=\ht\z@ \advance\dimen@\dp\z@
+ \baselineskip=1.1\dimen@ \lineskip=.2\dimen@ \lineskiplimit=\lineskip
+ \def\txtline@@##1{\txtline@{#1}{##1}}\object@\txt@ii}
+\xylet@\txtline@@=\eat@
+\xydef@\txtline@#1#2{\relax\setboxz@h{#1{\ignorespaces #2\unskip}}%
+ \ifdim\A@<\wdz@ \setboxz@h{\hsize=\A@
+ \leftskip=0pt plus4em \rightskip=\leftskip
+ \parfillskip=0pt \parindent=0pt
+ \spaceskip=.3333em \xspaceskip=.5em
+ \pretolerance=9999 \tolerance=9999
+ \hyphenpenalty=9999 \exhyphenpenalty=9999
+ \vbox{#1\noindent\ignorespaces #2\unskip}}%
+ \else\ifdim\A@<\maxdimen\setboxz@h to\A@{\hfil\boxz@\hfil}\fi\fi
+ \boxz@}
+\xydef@\txt@ii#1{\vbox{%
+ \let\\=\cr
+ \tabskip=\z@skip \halign{\relax\hfil\txtline@@{##}\hfil\cr\leavevmode#1\crcr}}}
+\message{options;}
+\xylet@\xyoption@@=\relax
+\xydef@\xyoption#1{\DN@{#1}\edef\next@{\codeof\next@}%
+ \csname xyeveryrequest@\next@ @\endcsname
+ \xyinputorelse@{xy#1}{\xyoption@truncated#1@@@@@@@@@,#1@}%
+ \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}
+ \expandafter\let\expandafter\next@\csname xy\xyoption@@ version\endcsname
+ \expandafter\let\csname xy\xyoption@@ loaded\endcsname=\next@
+ \runxywith@ \ignorespaces}
+\xydef@\xyoption@truncated#1#2#3#4#5#6#7@#8,#9@{%
+ \DN@{#7}\ifx\next@\empty \DN@##1##2{##2}\else\let\next@=\xyinputorelse@ \fi
+ \next@{xy#1#2#3#4#5#6}%
+ {\DN@{#1#2#3#4#5#6}\edef\next@{\codeof\next@}%
+ \xyerror@{No `\next@' option}{%
+Your \xyoption{#9} request could not be granted: the required^^J%
+file `xy#9.tex' could not be located. Please make sure that it is^^J%
+properly installed before continuing.}}}
+\xydef@\xyrequire#1{\DN@{#1}\edef\next@{\codeof\next@}%
+ \csname xyeveryrequest@\next@ @\endcsname
+ \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname
+ \ifx \next@\relax \DN@{\xyoption{#1}}\else \DN@{\ignorespaces}\fi \next@}
+\xylet@\xywith@@=\empty
+\xydef@\runxywith@{\let\xywithdo@@=\xywithtest@ \xywith@@}
+\xydef@\xywithoption#1#2{\DN@{#1}\edef\next@{\codeof\next@}%
+ \expandafter\let\expandafter\nextii@\csname xy\next@ loaded\endcsname
+ \ifx \nextii@\relax
+ \expandafter\def\expandafter\xywith@@\expandafter{\xywith@@
+ \xywithdo@@{#1}{#2}}%
+ \else \expandafter\xywithrun@\expandafter{\next@}{#2}\fi}
+\xydef@\xywithtest@#1#2{\DN@{#1}\edef\next@{\codeof\next@}%
+ \ifx\next@\xyoption@@ \expandafter\xywithrun@\expandafter{\next@}{#2}\fi}
+\xydef@\xywithrun@#1#2{\csname xyeverywithoption@#1@\endcsname #2}
+\xydef@\xyevery@#1#2#3{\DN@{#2}\edef\next@{\codeof\next@}%
+ \expandafter\ifx\csname xyevery#1@\next@ @\endcsname\relax
+ \expandafter\let\csname xyevery#1@\next@ @\endcsname=\empty \fi
+ \DNii@##1{\expandafter\def\expandafter##1\expandafter{##1#3}}%
+ \expandafter\nextii@\csname xyevery#1@\next@ @\endcsname}
+\xydef@\xyeveryrequest{\xyevery@{request}}
+\xydef@\xyeverywithoption{\xyevery@{withoption}}
+\xydef@\xyprovide#1#2#3#4#5#6{%
+ \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}\edef\next@{#3}%
+ \message{ Xy-pic option: #2 v.\next@}%
+ \expandafter\let\expandafter\nextii@\csname xy\xyoption@@ loaded\endcsname
+ \ifx \next@\nextii@ \message{not reloaded}\endinput
+ \else
+ \ifx \nextii@\relax\else \xyerror@{Option `\xyoption@@' version mismatch}{%
+You previously loaded, or the format has preloaded, a different version^^J%
+of this option. Just continue to try to load this version instead (and^^J%
+be prepared for a lot of warnings about redefinitions).}%
+ \fi
+ \expandafter\let\csname xy\xyoption@@ version\endcsname=\next@
+ \expandafter\let\expandafter\xyenddocmode@\csname DOCMODE\endcsname
+ \expandafter\let\csname DOCMODE\endcsname\xyprovidedocmode@
+ \xycatcodes
+ \fi \ignorespaces}
+\xydef@\xyendinput{\expandafter\let\csname DOCMODE\endcsname=\xyenddocmode@
+ \message{loaded}\xyuncatcodes\endinput}
+\expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname
+\xylet@\xyenddocmode@=\relax
+\xydef@\xydriversloaded@none{\do{unload}}
+\xylet@\xydriversloaded@@=\xydriversloaded@none
+\xylet@\xydriversselected@@=\empty
+\xylet@\xydriver@unload@support@@=\empty
+\xydef@\selectdriver@#1{\DN@{#1}\edef\next@{\codeof\next@}%
+ \expandafter\selectdriver@@\expandafter{\next@}}
+\xydef@\selectdriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}%
+ \xyLoadDrivers@}\let\selectdriver@@=\changedriver@single}
+\xydef@\changedriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}%
+ \xyReloadDrivers@}}
+\xydef@\selectdriver@multiple#1{\expandafter\xysetup@@\expandafter{%
+ \expandafter\def\expandafter\xydriversselected@@\expandafter{%
+ \xydriversselected@@ \do{#1}}%
+ \let\do=\activatedriver@ \xydriversselected@@}}
+\xydef@\UseSingleDriver{\let\selectdriver@@=\selectdriver@single}
+\xydef@\MultipleDrivers{\let\selectdriver@@=\selectdriver@multiple}
+\xydef@\xyLoadDrivers@{\let\do=\activatedriver@ \xydriversselected@@}
+\xydef@\xyReloadDrivers@{\activatedriver@{unload}\xyLoadDrivers@}
+\xylet@\xyReloadDrivers=\xyReloadDrivers@
+\xydef@\activatedriver@#1{%
+ \let\doii=\activatedriversupport@ \csname xydriver@#1@support@@\endcsname}
+\xydef@\activatedriversupport@#1#2{%
+ \expandafter\ifx\csname xy#1loaded\endcsname\relax\DN@{}%
+ \else\DN@{#2}\fi \next@}
+\UseSingleDriver
+\xydef@\xyselectoptionsupport@{\let\do=\activatedriver@ \xydriversselected@@}
+\xydef@\xyShowDrivers{{\W@{Loaded:}\let\do=\doShow \xydriversloaded@@
+ \let\next@=\empty
+ \def\do##1{\ifx\next@\empty \DN@{##1}%
+ \else \expandafter\DN@\expandafter{\next@, ##1}\fi}%
+ \xydriversselected@@\W@{Selected: \next@.}}}
+\def\doShow#1{\let\next@=\empty
+ \def\doii##1##2{\ifx\next@\empty \DN@{##1}%
+ \else \expandafter\DN@\expandafter{\next@, ##1}\fi}%
+ \csname xydriver@#1@support@@\endcsname
+ \W@{ <driver> #1 supports \next@.}}
+\xydef@\newdriver#1{%
+ \def\nextiii@##1{%
+ \expandafter\def\expandafter\xydriversloaded@@
+ \expandafter{\xydriversloaded@@\do{##1}}%
+ \expandafter\let\csname xydriver@\xyoption@@ @support@@\endcsname=\empty}%
+ \def\do##1{\DNii@{##1}\ifx\xyoption@@\nextii@ \let\nextiii@=\eat@ \fi}%
+ \xydriversloaded@@ \expandafter\nextiii@\expandafter{\xyoption@@}%
+ #1\relax
+ \DN@##1{\xywithoption{##1}{%
+ \selectdriver@{##1}\xyeveryrequest{##1}{\selectdriver@{##1}}}}%
+ \expandafter\next@\expandafter{\xyoption@@}\ignorespaces}
+\xydef@\xyaddsupport{\expandafter\xyadddriversupport@\expandafter{\xyoption@@}}
+\xydef@\xyaddunsupport{\xyadddriversupport@{unload}}
+\xydef@\xyadddriversupport@#1#2#3{%
+ \DNii@{#1}\edef\nextii@{\codeof\nextii@}%
+ \def\nextiii@{#2}\edef\nextiii@{\codeof\nextiii@}%
+\def\next{\xybug@{<driver> \nextii@\space not loaded}}%
+\def\do##1{\DN@{##1}\edef\next@{\codeof\next@}%
+ \ifx\next@\nextii@ \let\next=\relax \fi}\xydriversloaded@@ \next
+\def\next{\xybug@{<driver> \nextii@\space already supports \nextiii@}}%
+\def\doii##1##2{\DN@{##1}\edef\next@{\codeof\next@}%
+ \ifx\next@\nextiii@ \let\next=\relax \fi}\xydriversloaded@@ \next
+ \DN@##1##2{\ifx##1\relax \let##1=\empty \fi
+ \expandafter\def\expandafter##1\expandafter{##1\doii{##2}{#3}}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\csname xydriver@\nextii@ @support@@\endcsname
+ \expandafter{\nextiii@}%
+ \DN@##1{\expandafter\xyeverywithoption\expandafter{\nextiii@}{%
+ \xytestforsupport@{##1}}}%
+ \expandafter\next@\expandafter{\nextii@}\xydriversloaded@@
+ \ignorespaces}
+\xydef@\xytestforsupport@#1{\def\do##1{\DN@{##1}\DNii@{#1}%
+ \ifx\next@\nextii@ \expandafter\xyselectoptionsupport@ \fi}}
+\xynew@{if}\ifunsupportwarnings@
+\xydef@\xyunsupportwarning@#1#2{{%
+ \DN@{#1}\edef\next@{\codeof\next@}
+ \expandafter\ifx\csname xywarn@unload@\next@ @\endcsname\relax
+ \expandafter\gdef\csname xywarn@unload@\next@ @\endcsname{}%
+ \ifunsupportwarnings@ \xyclosedown@@\xyunsupportwarnings@@ \fi
+ \global\unsupportwarnings@true
+ \expandafter\gdef\expandafter\xyunsupportwarnings@@\expandafter{%
+ \xyunsupportwarnings@@ \W@{ #2.}}%
+ \W@{}%
+ \W@{Xy-pic Warning: `\next@' reproduction is NOT EXACT\xytracelineno@:}%
+ \W@{ #2.}%
+ \W@{}%
+ \fi}}
+\xydef@\xyunsupportwarnings@@{\W@{}%
+ \W@{Xy-pic Warning: The produced DVI file is NOT EXACT:}}
+\xynew@{if}\ifsupportwarnings@
+\xydef@\xysupportwarning@#1#2{{%
+ \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}%
+ \expandafter\ifx\csname xywarn@\next@ @\nextii@ @\endcsname\relax
+ \expandafter\gdef\csname xywarn@\next@ @\nextii@ @\endcsname{}%
+ \ifsupportwarnings@ \xyclosedown@@\xysupportwarnings@@ \fi
+ \global\supportwarnings@true
+ \expandafter\gdef\expandafter\xysupportwarnings@@\expandafter{%
+ \xysupportwarnings@@ \driverextensioncomplain@{#1}{#2}}%
+ \W@{}%
+ \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE\xytracelineno@:}%
+ \driverextensioncomplain@{#1}{#2}%
+ \W@{}%
+ \fi}}
+\xydef@\xysupportwarnings@@{%
+ \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE:}}
+\xydef@\driverextensioncomplain@#1#2{%
+ \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}%
+ \W@{ It contains <driver> `\next@' \string\special s for the `\nextii@'
+ extension.}}
+\xydef@\dvimessage@#1#2{\xysupportwarning@{#1}{#2}}
+\xynew@{if}\ifxydrivernoloads@
+\xydef@\xydrivernoload@#1{\xyerror@{Could not load xy#1.tex}{}%
+ \xydrivernoloads@true}
+\xydef@\xydriverfail@#1{\xyerror@{Sorry, #1 not supported.}{}}
+\xydef@\xyunload@#1{\xywarning@{Unloading #1.}}
+\message{algorithms: directions,}
+\xydef@\DirectionfromtheDirection@{\noexpand\Direction=\the\Direction
+ \noexpand\d@X=\the\d@X \noexpand\d@Y=\the\d@Y
+ \def\noexpand\sd@X{\sd@X}\def\noexpand\sd@Y{\sd@Y}%
+ \noexpand\K@dXdY=\the\K@dXdY \noexpand\K@dYdX=\the\K@dYdX
+ \chardef\noexpand\DirectionChar=\the\DirectionChar
+ \chardef\noexpand\SemiDirectionChar=\the\SemiDirectionChar
+ \def\noexpand\cosDirection{\cosDirection}%
+ \def\noexpand\sinDirection{\sinDirection}%
+ \noexpand\resetupDirection@}
+\xydef@\Directiontest@@#1#2{#2}
+\xydef@\setupDirection@{%
+ \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p
+ \Directiontest@@\relax\setupDirection@i}
+\xydef@\setupDirection@i{\DN@{\setupDirection@ii}%
+ \ifdim\d@X=\d@Y
+ \ifdim\zz@\d@Y \DN@{}%
+ \else\ifdim\d@X<\z@ \DN@{\dlDirection@{-1.4142\d@X}}%
+ \else \DN@{\urDirection@{1.4142\d@X}}\fi\fi
+ \else\ifdim\d@X<\d@Y
+ \ifdim\zz@\d@X \DN@{\uDirection@\d@Y}%
+ \else\ifdim\zz@\d@Y \DN@{\lDirection@{-\d@X}}%
+ \else\ifdim-\d@X=\d@Y \DN@{\ulDirection@{-1.4142\d@X}}\fi\fi\fi
+ \else
+ \ifdim\zz@\d@X \DN@{\dDirection@{-\d@Y}}%
+ \else\ifdim\zz@\d@Y \DN@{\rDirection@\d@X}%
+ \else\ifdim\d@X=-\d@Y \DN@{\drDirection@{1.4142\d@X}}\fi\fi\fi
+ \fi\fi \next@}
+\xydef@\dlDirection@{\Direction=\z@
+ \def\cosDirection{-.7071}\def\sinDirection{-.7071}\def\sd@X{-}\def\sd@Y{-}%
+ \chardef\DirectionChar=127\relax\chardef\SemiDirectionChar=127\relax
+ \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@}
+\xydef@\dDirection@{\Direction=\K@
+ \def\cosDirection{0}\def\sinDirection{-1}\def\sd@Y{-}%
+ \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}%
+ \chardef\DirectionChar=15\relax\chardef\SemiDirectionChar=31\relax
+ \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@}
+\xydef@\drDirection@{\dimen@ii=2\K@ \Direction=\dimen@ii
+ \def\cosDirection{+.7071}\def\sinDirection{-.7071}\def\sd@X{+}\def\sd@Y{-}%
+ \chardef\DirectionChar=31\relax\chardef\SemiDirectionChar=63\relax
+ \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@}
+\xydef@\rDirection@{\dimen@ii=3\K@ \Direction=\dimen@ii
+ \def\cosDirection{+1}\def\sinDirection{0}\def\sd@X{+}%
+ \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}%
+ \chardef\DirectionChar=47\relax\chardef\SemiDirectionChar=95\relax
+ \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@}
+\xydef@\urDirection@{\dimen@ii=4\K@ \Direction=\dimen@ii
+ \def\cosDirection{+.7071}\def\sinDirection{+.7071}\def\sd@X{+}\def\sd@Y{+}%
+ \chardef\DirectionChar=63\relax\chardef\SemiDirectionChar=127\relax
+ \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@}
+\xydef@\uDirection@{\dimen@ii=-3\K@ \Direction=\dimen@ii
+ \def\cosDirection{0}\def\sinDirection{+1}\def\sd@Y{+}%
+ \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}%
+ \chardef\DirectionChar=79\relax\chardef\SemiDirectionChar=31\relax
+ \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@}
+\xydef@\ulDirection@{\dimen@ii=-2\K@ \Direction=\dimen@ii
+ \def\cosDirection{-.7071}\def\sinDirection{+.7071}\def\sd@X{-}\def\sd@Y{+}%
+ \chardef\DirectionChar=95\relax\chardef\SemiDirectionChar=63\relax
+ \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@}
+\xydef@\lDirection@{\Direction=-\K@
+ \def\cosDirection{-1}\def\sinDirection{0}\def\sd@X{-}%
+ \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}%
+ \chardef\DirectionChar=111\relax\chardef\SemiDirectionChar=95\relax
+ \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@}
+\xydef@\fixedDirection@#1{\dimen@ii=#1\relax
+ \d@X=\cosDirection\dimen@ii \d@Y=\sinDirection\dimen@ii
+ \resetupDirection@}
+\xydef@\setupDirection@ii{%
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \K@dXdY=\sd@X\d@X \ifdim\K@dXdY<500pt \multiply\K@dXdY\KK@ \fi
+ \dimen@=\sd@Y\d@Y
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@
+ \ifdim\dimen@=\z@\else
+ \advance\K@dXdY by.5\dimen@\relax \divide\K@dXdY\dimen@
+ \fi \K@dXdY=\sd@X\sd@Y\K@dXdY
+ \K@dYdX=\sd@Y\d@Y \ifdim\K@dYdX<500pt \multiply\K@dYdX\KK@ \fi
+ \dimen@=\sd@X\d@X
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@
+ \ifdim\dimen@=\z@\else
+ \advance\K@dYdX by.5\dimen@\relax \divide\K@dYdX\dimen@
+ \fi \K@dYdX=\sd@X\sd@Y\K@dYdX
+ \Direction=\maxdimen
+ \ifnum\K@dXdY<-\K@ \else \ifnum\K@<\K@dXdY \else
+ \ifdim \d@Y<\z@
+ \Direction=\K@ \advance\Direction-\K@dXdY
+ \else
+ \Direction=\K@ \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY
+ \fi\fi\fi
+ \ifnum-\K@<\K@dYdX \ifnum\K@dYdX<\K@
+ \ifdim \d@X<\z@
+ \Direction=-\K@ \advance\Direction\K@dYdX
+ \else
+ \Direction=\K@ \multiply\Direction\thr@@ \advance\Direction\K@dYdX
+ \fi\fi\fi
+ \ifnum\Direction=\maxdimen
+ \Direction=\K@dYdX \advance\Direction-\K@dXdY
+ \advance\Direction\ifnum\Direction<\z@-\fi\@ne \divide\Direction\tw@
+ \ifnum\K@dXdY<\z@ \advance\Direction\K@ \advance\Direction\K@
+ \else \advance\Direction-\K@ \advance\Direction-\K@ \fi
+ \fi
+ \imposeDirection@i
+ \resetupDirection@
+ }
+\xydef@\imposeDirection@{\count@@=\Direction
+ \loop@\ifnum\count@@>4096 \advance\count@@-8192 \repeat@
+ \loop@\ifnum\count@@<-4096 \advance\count@@8192 \repeat@
+ \def\sd@X{+}\ifnum\count@@<\K@ \relax
+ \ifnum\count@@>-3072 \def\sd@X{-}\fi\fi
+ \def\sd@Y{+}\ifnum\count@@<3072 \relax
+ \ifnum\count@@>-\K@ \relax\def\sd@Y{-}\fi\fi
+ \imposeDirection@i
+ \d@X=\cosDirection\xydashl@ \d@Y=\sinDirection\xydashl@
+ \resetupDirection@}
+\xydef@\imposeDirection@i{%
+ \count@@=\K@ \multiply\count@@ by8 \advance\count@@\Direction
+ \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne
+ \loop@\ifnum127<\count@ \advance\count@-128 \repeat@
+ \chardef\DirectionChar\count@
+ \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne
+ \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@
+ \chardef\SemiDirectionChar\count@@
+ \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}%
+ \quotient@@\cosDirection{\sd@X\wd8}\xydashl@
+ \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@\/}%
+ \quotient@@\sinDirection{\sd@Y\wd8}\xydashl@}
+\xydef@\getxyDirection@#1{\xy@@\bgroup\xy@@ix@{#1}%
+ \xy@@{\expandafter\POS\the\toks9\relax\setupDirection@
+ \edef\next@{\egroup \Direction=\the\Direction}\next@ \imposeDirection@ }}
+\xydef@\reverseDirection@{%
+ \d@X=-\d@X \d@Y=-\d@Y
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \dimen@=4\K@ \ifnum\Direction<\z@ \advance\Direction\dimen@
+ \else \advance\Direction-\dimen@ \fi
+ \count@=\DirectionChar \ifnum\count@<64 \advance\count@64
+ \else \advance\count@-64 \fi \chardef\DirectionChar=\count@
+ \edef\cosDirection{\if-\cosDirection\else-\cosDirection\fi}%
+ \edef\sinDirection{\if-\sinDirection\else-\sinDirection\fi}%
+ \resetupDirection@}
+\xydef@\aboveDirection@#1{%
+ \dimen@=\d@X \d@X=-\d@Y \d@Y=\dimen@
+ \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \dimen@=2\K@ \ifdim 1\Direction<\dimen@\else \dimen@=-6\K@ \fi
+ \advance\Direction\dimen@
+ \count@=\DirectionChar \ifnum\count@<96 \advance\count@32
+ \else \advance\count@-96 \fi \chardef\DirectionChar=\count@
+ \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64
+ \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@
+ \let\tmp@=\cosDirection
+ \edef\cosDirection{\if-\sinDirection\else-\sinDirection\fi}%
+ \let\sinDirection=\tmp@
+ \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@
+ \resetupDirection@}
+\xydef@\belowDirection@#1{%
+ \dimen@=\d@X \d@X=\d@Y \d@Y=-\dimen@
+ \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \dimen@=-2\K@\ifdim 1\Direction<\dimen@\dimen@=6\K@\fi
+ \advance\Direction\dimen@
+ \count@=\DirectionChar \ifnum\count@<32 \advance\count@96
+ \else \advance\count@-32 \fi \chardef\DirectionChar=\count@
+ \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64
+ \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@
+ \let\tmp@=\sinDirection
+ \edef\sinDirection{\if-\cosDirection\else-\cosDirection\fi}%
+ \let\cosDirection=\tmp@
+ \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@
+ \resetupDirection@}
+\xydef@\vDirection@(#1,#2)#3{\dimen@ii=#3\relax
+ \dimen@=#1\dimen@ii \dimen@ii=#2\dimen@ii
+ \d@X=\cosDirection\dimen@ \advance\d@X-\sinDirection\dimen@ii
+ \d@Y=\sinDirection\dimen@ \advance\d@Y \cosDirection\dimen@ii
+ \X@p=\X@c \advance\X@p-\d@X \Y@p=\Y@c \advance\Y@p-\d@Y
+ \setupDirection@\ignorespaces}
+\xydef@\resetDirection@{%
+ \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p
+ \let\next@=\resetupDirection@
+ \ifdim\sd@X\d@X<\z@ \let\next@=\setupDirection@i \fi
+ \ifdim\sd@Y\d@Y<\z@ \let\next@=\setupDirection@i \fi
+ \next@}
+\xydef@\resetupDirection@{%
+ \edef\Directiontest@@##1##2{\noexpand\DN@{##2}%
+ \noexpand\ifdim\noexpand\d@X=\the\d@X\relax
+ \noexpand\ifdim\noexpand\d@Y=\the\d@Y\relax \noexpand\DN@{##1}%
+ \noexpand\fi\noexpand\fi \noexpand\next@}}
+\xydef@\unsetupDirection@{\def\Directiontest@@##1##2{##2}}
+\uDirection@\xydashl@
+\message{edges,}
+\xynew@{if}\ifInside@
+\xydef@\zeroEdge#1{%
+ \ifcase#1\relax \or \Inside@false \or \dimen@=\z@
+ \or \else \Edge@c={\rectangleEdge}\fi}
+\xydef@\circleEdge#1{\ifcase#1\expandafter\circleEdge@
+ \or \expandafter\circleUnder@ \or \dimen@=\R@c
+ \or \expandafter\circleProp@ \or \expandafter\circleInner@
+ \else \expandafter\circleOuter@ \fi}
+\xydef@\circleEdge@{\DN@{\ellipseEdge@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\circlecentredEdge@}%
+ \else\DN@{\ellipsecentredEdge@}\fi
+ \fi\fi \next@}
+\xydef@\circleProp@{\DN@{\reverseDirection@\ellipseEdge@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\reverseDirection@\circlecentredEdge@}%
+ \else\DN@{\reverseDirection@\ellipsecentredEdge@}\fi
+ \fi\fi \next@}
+\xydef@\circleUnder@{\Inside@false
+ \ifdim\X@p=\X@c \relax \ifdim\Y@p=\Y@c \Inside@true \fi \fi
+ \ifInside@ \else \expandafter \circleCentre@ \fi}
+\xydef@\circleCentre@{{%
+ \ifdim\L@c=\R@c \relax\else
+ \dimen@=\R@c\advance\dimen@-\L@c \divide\dimen@\tw@
+ \advance\X@c\dimen@ \advance\R@c-\dimen@ \fi
+ \d@X=\X@c \advance\d@X-\X@p \d@X=\ifdim\d@X<\z@-\fi\d@X
+ \ifdim\U@c=\D@c\relax \else
+ \dimen@=\U@c\advance\dimen@-\D@c \divide\dimen@\tw@
+ \advance\Y@c\dimen@ \advance\U@c-\dimen@ \fi
+ \d@Y=\Y@c \advance\d@Y-\Y@p \d@Y=\ifdim\d@Y<\z@-\fi\d@Y
+ \DN@{}\ifdim\d@X>\R@c \relax \else \ifdim\d@Y>\U@c \relax
+ \else \ifdim\U@c=\R@c \DN@{\circlecentredUnder@}%
+ \else \DN@{\ellipsecentredUnder@}\fi
+ \fi\fi \next@}}
+\xydef@\circleInner@{\DN@{\ellipseInner@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\circlecentredInner@}%
+ \else\DN@{\ellipsecentredInner@}\fi
+ \fi\fi \next@}
+\xydef@\circleOuter@{\DN@{\ellipseOuter@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\circlecentredOuter@}%
+ \else\DN@{\ellipsecentredOuter@}\fi
+ \fi\fi \next@}
+\xydef@\circlecentredEdge@{%
+ \dimen@=-\cosDirection\R@c \advance\X@c\dimen@
+ \dimen@=-\sinDirection\R@c \advance\Y@c\dimen@}
+\xydef@\circlecentredUnder@{%
+ \loop\ifdim\R@c>100\p@ \circlescale@ \repeat
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@c
+ \edef\tmp@{\expandafter\removePT@\the\d@X}\advance\dimen@-\tmp@\d@X
+ \edef\tmp@{\expandafter\removePT@\the\d@Y}\advance\dimen@-\tmp@\d@Y
+ \ifdim\dimen@>\z@ \aftergroup\Inside@true \fi}
+%%\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ }
+\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ }
+\xydef@\circlecentredInner@{%
+ \L@c=\sd@X\cosDirection\R@c \D@c=\sd@Y\sinDirection\R@c
+ \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}}
+\xydef@\circlecentredOuter@{%
+ \L@c=\R@c \D@c=\R@c \U@c=\D@c \Edge@c={\rectangleEdge}}
+\xydef@\ellipsecentredEdge@{\bgroup \X@p=\X@c \Y@p=\Y@c
+ \ifdim\U@c>\R@c
+ \X@c=\cosDirection\U@c \Y@c=\sinDirection\U@c
+ \quotient@\tmp@\U@c\R@c \X@c=\tmp@\X@c \R@c=\U@c
+ \else
+ \X@c=\cosDirection\R@c \Y@c=\sinDirection\R@c
+ \quotient@\tmp@\R@c\U@c \Y@c=\tmp@\Y@c
+ \fi
+ \advance\X@c\X@p \advance\Y@c\Y@p
+ \setupDirection@ \X@c=\X@p \Y@c=\Y@p \circlecentredEdge@
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \ifdim\U@c>\L@c \quotient@\tmp@\L@c\U@c \d@X=\tmp@\d@X
+ \else \quotient@\tmp@\U@c\R@c \d@Y =\tmp@\d@Y \fi
+ \X@c=\X@p \advance\X@c\d@X \Y@c=\Y@p \advance\Y@c\d@Y
+ \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }%
+\xydef@\ellipsecentredUnder@{%
+ \ifdim\R@c>64\p@ \circlescale@ \divide\U@c\KK@
+ \else \ifdim\U@c>64\p@ \circlescale@ \divide\U@c\KK@ \fi\fi
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\d@Y=\tmp@\d@Y
+ \edef\tmp@{\expandafter\removePT@\the\U@c}\d@X=\tmp@\d@X
+ \R@c=\tmp@\R@c \circlecentredUnder@ }
+\xydef@\ellipsecentredOuter@{\Edge@c={\rectangleEdge}}
+\xydef@\ellipsecentredInner@{%
+ \bgroup \X@p=\X@c \Y@p=\Y@c \ellipsecentredEdge@
+ \advance\X@c-\X@p \L@c=\ifdim\X@c<\z@-\fi\X@c
+ \advance\Y@c-\Y@p \D@c=\ifdim\Y@c<\z@-\fi\Y@c
+ \edef\next@{\egroup \L@c=\the\L@c \D@c=\the\D@c}\next@
+ \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}}
+\xydef@\ellipseEdge@{\bgroup
+ \A@=\R@c \B@=\U@c
+ \ifdim\R@c=\L@c \d@X=\z@
+ \else \d@X=.5\R@c \advance\d@X-.5\L@c
+ \advance\A@\L@c \divide\A@\tw@ \fi
+ \ifdim\U@c=\D@c \d@Y=\z@
+ \else \d@Y=.5\U@c \advance\d@Y-.5\D@c
+ \advance\B@\D@c \divide\B@\tw@ \fi
+ \bgroup
+ \L@c=\A@ \U@c=\B@
+ \R@p=\U@c \advance\R@p\L@c \multiply\R@p\tw@
+ \ifdim\B@<\A@ \quotient@\tmp@\U@c\L@c \R@c=\tmp@\p@ \D@c=\p@
+ \quotient@\tmp@\R@p\L@c \R@p=\tmp@\p@
+ \else
+ \ifdim\A@<\B@ \quotient@\tmp@\L@c\U@c \D@c=\tmp@\p@ \R@c=\p@
+ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@
+ \else
+ \R@c=\p@ \D@c=\p@ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@
+ \fi\fi
+ \quotient@\sd@X\d@X\L@c \d@X=\sd@X\p@
+ \quotient@\sd@Y\d@Y\U@c \d@Y=\sd@Y\p@
+ \loop
+ \bgroup \U@p=-\p@ \D@p=\z@
+ \ifdim\R@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@p
+ \advance\d@X\cosDirection\dimen@
+ \else \advance\d@X\cosDirection\R@p \fi
+ \edef\sd@X{\expandafter\removePT@\the\d@X}%
+ \advance\U@p\sd@X\d@X
+ \ifdim\R@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\d@X
+ \advance\D@p\cosDirection\dimen@
+ \else \advance\D@p\cosDirection\d@X \fi
+ \ifdim\D@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\R@p
+ \advance\d@Y\sinDirection\dimen@
+ \else \advance\d@Y\sinDirection\R@p \fi
+ \edef\sd@Y{\expandafter\removePT@\the\d@Y}%
+ \advance\U@p\sd@Y\d@Y
+ \ifdim\D@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\d@Y
+ \advance\D@p\sinDirection\dimen@
+ \else \advance\D@p\sinDirection\d@Y \fi
+ \multiply\D@p\tw@
+ \dimen@=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\dimen@<.01\p@ \U@p=\z@
+ \else
+ \quotient@\tmp@\U@p\D@p \U@p=\tmp@\p@
+ \ifdim\U@p<\z@\xywarning@{poor convergence}\U@p=\z@
+ \else \advance\R@p-\U@p \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \fi \fi
+ \edef\next@{\egroup \R@p=\the\R@p \U@p=\the\U@p \D@p=\the\D@p}\next@
+ \ifdim\U@p>\z@ \repeat
+ \edef\next@{\egroup \dimen@=\the\R@p}\next@
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \ifdim\B@<\A@ \dimen@=\tmp@\B@ \else \dimen@=\tmp@\A@ \fi
+ \dimen@=-\dimen@
+ \advance\X@c\cosDirection\dimen@
+ \advance\Y@c\sinDirection\dimen@
+ \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }%
+\xydef@\ellipseOuter@{\Edge@c={\rectangleEdge}}
+\xydef@\ellipseInner@{%
+ \bgroup \X@p=\X@c \Y@p=\Y@c \ellipseEdge@
+ \d@X=\X@c\advance\d@X-\X@p
+ \ifdim\d@X>\z@ \R@p=\d@X \L@p=\R@p
+ \ifdim\L@c=\R@c\else\advance\L@p\L@c \advance\L@p-\R@c \fi
+ \else \L@p=-\d@X \R@p=\L@p
+ \ifdim\L@c=\R@c \else\advance\R@p\R@c \advance\R@p-\L@c \fi
+ \fi
+ \d@Y=\Y@c\advance\d@Y-\Y@p
+ \ifdim\d@Y>\z@ \U@p=\d@Y \D@p=\U@p
+ \ifdim\D@c=\U@c\else\advance\D@p\D@c \advance\D@p-\U@c \fi
+ \else \D@p=-\d@Y \U@p=\D@p
+ \ifdim\D@c=\U@c\else\advance\U@p\U@c \advance\U@p-\D@c \fi
+ \fi
+ \edef\next@{\egroup
+ \L@c=\the\L@p \D@c=\the\D@p \R@c=\the\R@p \U@c=\the\U@p}%
+ \next@ \Edge@c={\rectangleEdge}}
+\xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@
+ \or \expandafter\rectangleUnder@ \or \expandafter\rectangleDist@
+ \or \expandafter\rectangleProp@
+ \else \relax \fi}
+\xydef@\rectangleEdge@{%
+ \ifdim\d@Y<-.05\p@ \rectangleEdge@i
+ \else\ifdim\d@Y<.05\p@ \rectangleEdge@ii
+ \else \rectangleEdge@iii\fi\fi
+ \resetupDirection@}
+\xydef@\rectangleEdge@i{%
+ \ifdim\d@X<-.05\p@
+ \settomin@\X@c+\R@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\R@c\d@Y\d@X%1a
+ \else\ifdim\d@X<.05\p@ \advance\Y@c\U@c
+ \else \settomin@\X@c-\L@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\L@c\d@Y\d@X
+ \fi\fi}
+\xydef@\rectangleEdge@ii{%
+ \ifdim\d@X<-.05\p@ \advance\X@c\R@c
+ \else\ifdim\d@X<.05\p@
+ \else \advance\X@c-\L@c
+ \fi\fi}
+\xydef@\rectangleEdge@iii{%
+ \ifdim\d@X<-.05\p@
+ \settomin@\X@c+\R@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\R@c\d@Y\d@X%3a
+ \else\ifdim\d@X<.05\p@ \advance\Y@c-\D@c
+ \else \settomin@\X@c-\L@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\L@c\d@Y\d@X
+ \fi\fi}
+\xydef@\settomin@#1#2#3#4#5#6{%
+ \edef\nextii@{\A@=\the\A@ \B@=\the\B@}\quotient@\next@{#5}{#6}\nextii@
+ \dimen@=\sd@X\sd@Y\next@#4\relax
+ \ifdim#3<\dimen@ \dimen@=#3\fi \advance#1#2\dimen@}
+\xydef@\rectangleUnder@{\Inside@false
+ \ifdim\X@p=\X@c \ifdim\Y@p=\Y@c \Inside@true \fi\fi
+ \ifInside@ \else
+ \dimen@=\X@p \advance\dimen@-\X@c
+ \ifdim \dimen@>-\L@c \relax \ifdim\dimen@<\R@c
+ \dimen@=\Y@p \advance\dimen@-\Y@c
+ \ifdim \dimen@>-\D@c \relax \ifdim\dimen@<\U@c
+ \Inside@true
+ \fi\fi\fi\fi\fi }
+\xydef@\rectangleDist@{\let\next@=\rectangleDist@i
+ \ifdim\d@X<-.05\p@ \dimen@=\R@c
+ \else\ifdim\d@X<.05\p@ \dimen@=\z@ \DN@{\dimen@=\dimen@ii}%
+ \else \dimen@=\L@c \fi\fi
+ \ifdim\d@Y<-.05\p@ \dimen@ii=\U@c
+ \else\ifdim\d@Y<.05\p@ \DN@{}%
+ \else \dimen@ii=\D@c \fi\fi
+ \next@}
+\xydef@\rectangleDist@i{%
+ \begingroup \quotient@\next\p@{\sd@X\cosDirection\p@}%
+ \edef\next{\endgroup \dimen@=\next\dimen@}\next
+ \begingroup \quotient@\next\p@{\sd@Y\sinDirection\p@}%
+ \edef\next{\endgroup \dimen@ii=\the\dimen@ii}\next
+ \ifdim\dimen@ii<\dimen@ \dimen@=\dimen@ii \fi}
+\xydef@\rectangleProp@{%
+ \enter@{\A@=\the\A@ \B@=\the\B@ \DirectionfromtheDirection@}%
+ \reverseDirection@
+ \dimen@=1\Direction \count@=\K@ \multiply\count@\tw@
+ \ifnum \Direction>\count@
+ \DN@{0}%
+ \advance\dimen@-2\K@ \quotient@\nextii@{\dimen@}{2\K@}%
+ \else\ifnum \Direction>\z@
+ \dimen@=-\dimen@ \advance\dimen@2\K@ \quotient@\next@{\dimen@}{2\K@}%
+ \DNii@{0}%
+ \else\ifnum \Direction>-\count@
+ \DN@{1}%
+ \quotient@\nextii@{-\dimen@}{2\K@}%
+ \else
+ \advance\dimen@4\K@ \quotient@\next@{\dimen@}{2\K@}%
+ \DNii@{1}%
+ \fi\fi\fi
+ \advance\X@c-\L@c \dimen@=\L@c \advance\dimen@\R@c
+ \ifdim\dimen@=\z@ \advance\X@c 2\L@c \else \advance\X@c\next@\dimen@ \fi
+ \advance\Y@c+\U@c \dimen@=\D@c \advance\dimen@\U@c
+ \ifdim\dimen@=\z@ \advance\Y@c-2\U@c \advance\Y@c\Upness@\U@c
+ \else \advance\Y@c-\nextii@\dimen@ \fi
+ \leave@}
+\message{connections;}
+\xydef@\Creset@@{}
+\xydef@\Cshavep@@{\noCshavep@@}
+\xydef@\Cshavec@@{\noCshavec@@}
+\xydef@\Cslidep@@{\noCslidep@@}
+\xydef@\Cslidec@@{\noCslidec@@}
+\xydef@\Calong@@{\noCalong@@}
+\xydef@\Cintercept@@{\noCintercept@@}
+\xydef@\Cbreak@@{\noCbreak@@}
+\xydef@\Clast@@{\noClast@@}
+\xylet@\lastbreak@@=\empty
+\xydef@\noCshavep@@{\setupDirection@
+ \enter@{\cfromthec@ \DirectionfromtheDirection@}%
+ \reverseDirection@ \cfromp@ \the\Edge@c\z@
+ \pfromc@ \leave@ \resetDirection@}
+\xydef@\noCshavec@@{\setupDirection@ \the\Edge@c\z@ \resetDirection@}
+\xydef@\noCslidep@@#1{\dimen@=#1\relax
+ \advance\X@p\cosDirection\dimen@ \advance\Y@p\sinDirection\dimen@
+ \resetDirection@}
+\xydef@\noCslidec@@#1{\dimen@=#1\relax
+ \advance\X@c\cosDirection\dimen@ \advance\Y@c\sinDirection\dimen@
+ \resetDirection@}
+\xydef@\noCalong@@#1{%
+ \d@X=#1\d@X \d@Y=#1\d@Y \X@c=\X@p \Y@c=\Y@p \advance\X@c\d@X \advance\Y@c\d@Y
+ \resetupDirection@}
+\xydef@\noCintercept@@{\enter@{\pfromthep@}%
+ \begingroup\Creset@@ \edef\tmp@{\endgroup
+ \X@origin=\the\X@p \Y@origin=\the\Y@p \R@c=\the\d@X \U@c=\the\d@Y}\tmp@
+ \loop@\dimen@=\ifdim\R@c<\z@-\fi\R@c \advance\dimen@\ifdim\U@c<\z@-\fi\U@c
+ \ifdim\dimen@>10\p@ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@
+ \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@ \repeat@
+ \intersect@ \leave@}
+\xydef@\noCbreak@@{\edef\lastbreak@@{\cfromthec@}}
+\xydef@\noClast@@{\Creset@@ \edef\lastbreak@@{\cfromthep@}}
+\xydef@\no@@{\setupDirection@ \edef\lastbreak@@{\cfromthep@}%
+ \enter@{\cfromthec@\pfromthep@\DirectionfromtheDirection@}%
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@
+ \setupDirection@ \the\Edge@c\z@
+ \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@
+ \resetDirection@
+ \edef\Cshavep@@{\DirectionfromtheDirection@
+ \pfromthep@\noexpand\resetDirection@}%
+ \edef\Cshavec@@{\DirectionfromtheDirection@
+ \cfromthec@\noexpand\resetDirection@}%
+ \leave@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}%
+ \def\Cbreak@@{\noCbreak@@}\def\Clast@@{\noClast@@}\noinsert@}
+\xydef@\noinsert@{\ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi
+ \fi}
+\xydef@\Spread@@{}
+\xydef@\checkoverlap@@{}
+\xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}%
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \edef\lastbreak@@{\cfromthep@}%
+ \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@
+ \setupDirection@ \the\Edge@c\z@
+ \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@
+ \resetDirection@
+ \edef\Cshavep@@{\DirectionfromtheDirection@
+ \pfromthep@\noexpand\resetDirection@}%
+ \edef\Cshavec@@{\DirectionfromtheDirection@
+ \cfromthec@\noexpand\resetDirection@}%
+ \noinsert@
+ \straight@typeset
+ \def\Cbreak@@{\straightCbreak@}\def\Clast@@{\straightClast@}%
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}%
+ \Creset@@}
+\xydef@\straightcheckoverlap@#1#2{\def\checkoverlap@@{%
+ \ifdim#1\X@p>#1\X@c \let\next@=\relax \fi
+ \ifdim#2\Y@p>#2\Y@c \let\next@=\relax \fi}}
+\xydef@\straight@typeset{%
+ \ifInvisible@ \let\next@=\relax
+ \else\ifdim 1\Direction<-2\K@ \DN@{\straightv@}%
+ \else\ifdim 1\Direction<\z@ \DN@{\straighth@}%
+ \else\ifdim 1\Direction<2\K@ \DN@{\straightv@}%
+ \else \DN@{\straighth@}%
+ \fi\fi\fi\fi \checkoverlap@@ \next@}
+\xylet@\nextbreak@@=\empty
+\xydef@\straightCbreak@{\connectRestore@
+ \edef\nextbreak@@{\cfromthec@}%
+ \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@
+ \swap@ \the\Edge@c4\enter@{\cmergethec@}\nextbreak@@ \leave@
+ \setupDirection@
+ \the\Edge@c\z@
+ \swap@ \reverseDirection@ \the\Edge@c\z@ \swap@ \reverseDirection@
+ \resetDirection@ \noinsert@ \straight@typeset
+ \Creset@@ \let\lastbreak@@=\nextbreak@@}
+\xydef@\straightClast@{\connectRestore@
+ \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@
+ \swap@
+ \setupDirection@
+ \the\Edge@c\z@
+ \swap@\reverseDirection@ \the\Edge@c\z@ \swap@\reverseDirection@
+ \resetDirection@ \noinsert@ \straight@typeset
+ \Creset@@ \edef\lastbreak@@{\cfromthep@}}
+\xydef@\straighth@{\setbox\z@=\hbox{%
+ \setbox8=\copy\lastobjectbox@
+ \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax
+ \ifdim \A@=\z@ \count@@=\m@ne
+ \else \dimen@=\sd@X\d@X \divide\dimen@\A@ \count@@=\dimen@ \fi
+ \Spread@@
+ \ifdim\d@X>\z@ \advance\X@c-\wd8\relax\fi
+ \dimen@=-\sd@X\wd8\relax
+ \multiply\dimen@\K@dYdX \divide\dimen@\K@
+ \ifdim\d@X>\z@ \advance\Y@c\dimen@ \advance\Y@c-\Leftness@\dimen@
+ \else \advance\Y@c\Leftness@\dimen@ \fi
+ \dimen@=\wd8\relax \A@=\sd@X\d@X \advance\A@-\dimen@
+ \B@=\sd@X\dimen@ \multiply\B@\K@dYdX \divide\B@\K@
+ \advance\B@-\d@Y \B@=\sd@Y\B@
+ \count@=\count@@ \advance\count@\m@ne
+ \ifnum\z@<\count@ \divide\A@\count@ \divide\B@\count@ \fi
+ \A@=-\sd@X\A@ \B@=\sd@Y\B@ \wd8=\A@
+ \kern\X@c \count@=\z@
+ \loop@\ifnum\count@<\count@@ \advance\count@\@ne
+ \raise\Y@c\copy8\relax \advance\Y@c\B@ \repeat@}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}
+\xydef@\straightv@{\setbox\z@=\vtop{%
+ \setbox8=\copy\lastobjectbox@
+ \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax
+ \ifdim \B@=\z@ \count@@=\m@ne
+ \else \dimen@=\sd@Y\d@Y \divide\dimen@\B@ \count@@=\dimen@ \fi
+ \Spread@@
+ \dimen@=\dp8\relax \advance\dimen@\ht8\relax
+ \B@=\sd@Y\d@Y \advance\B@-\dimen@
+ \A@=\sd@Y\dimen@ \multiply\A@\K@dXdY \divide\A@\K@ \advance\A@-\d@X
+ \A@=\sd@X\A@ \count@=\count@@ \advance\count@\m@ne
+ \ifnum\z@<\count@ \divide\B@\count@ \divide\A@\count@ \fi
+ \B@=\sd@Y\B@ \A@=\sd@X\A@ \ht8=\B@ \dp8=\z@
+ \ifdim\d@Y<\z@
+ \advance\Y@c\dimen@ \advance\Y@c\Upness@\B@
+ \else
+ \advance\dimen@\Upness@\B@ \advance\Y@c-\dimen@ \advance\Y@c\B@
+ \fi
+ \advance\Y@c\B@
+ \ifdim\d@X<\z@ \else \advance\X@c-\wd8\relax \fi
+ \null \kern-\Y@c \count@=\z@
+ \loop@\ifnum\count@<\count@@ \advance\count@\@ne
+ \nointerlineskip \moveright\X@c\copy8\relax \advance\X@c\A@
+ \repeat@}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}
+\message{ Xy-pic loaded}\xyuncatcodes \endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xy16textures.tex b/macros/generic/diagrams/xypic/texinputs/xy16textures.tex
new file mode 100644
index 0000000000..79b773b025
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy16textures.tex
@@ -0,0 +1,122 @@
+%% xy16textures.tex from $Id: xy16textures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Textures v1.6'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{16textures}{Textures v1.6 driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\oldTextures@@#1{\dvimessage@{Textures v1.6}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\oldtexturesColor@@
+ \xyaddsupport{crayon}\oldtexturesCrayon@@
+ \xyaddsupport{ps}\oldtexturesPS@@
+ \xyaddsupport{rotate}\oldtexturesRotate@@
+ \xyaddsupport{line}\oldtexturesLine@@
+ \xyaddsupport{frame}\oldtexturesFrames@@
+ \xyaddsupport{tile}\oldtexturesTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\oldTexturesColours@{\oldtexturesPStypes@
+ \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\oldtexturesCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@ \fi \next@
+ \let\xycolorwarning@=\relax
+ \let\oldtexturesColor@@=\relax
+ \let\UnloadColor@@=\NooldTexturesColor@
+ }
+\xydef@\oldtexturesColor@@{\oldTexturesColours@}
+\xydef@\NooldTexturesColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\oldtexturesColor@@=\oldTexturesColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\oldtexturesCrayon@@{\oldtexturesColor@@\oldtexturesCrayon@}
+\xydef@\oldtexturesCrayon@{\installCrayolaColors@}%
+\xydef@\oldtexturesPS@@{\oldtexturesPS@}
+\xydef@\oldtexturesPSunload@{\UnloadPS@
+ \ifx\xyrealshipout@\undefined\else
+ \ifx\shipout\xyrealshipout@
+ \else \let\shipout=\xyrealshipout@\fi\fi
+ \let\installxyps@@=\relax
+ \let\UnloadPS@@=\UnloadPS@
+ \let\oldtexturesPS@@=\oldtexturesPS@ }
+\xydef@\oldTexturesSpecial@#1{\firstPS@@\special{postscript #1}}
+\xydef@\oldTexturesMacro@#1{\special{postscript {#1}xy}}
+\xydef@\oldTexturesInclude@#1{\firstPS@@\special{rawpostscriptfile #1}}
+\xydef@\oldTexturesRaw@#1{\firstPS@@\special{rawpostscript #1}}
+\xydef@\oldtexturesPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\oldTexturesSpecial@\else
+ \let\PSspecial@@=\oldTexturesSpecial@
+ \let\PSmacro@@=\oldTexturesMacro@
+ \let\PSdict@@=\oldTexturesRaw@
+ \let\PSraw@@=\oldTexturesRaw@
+ \let\PSinclude@@=\oldTexturesInclude@
+ \let\PSspecialdict@@=\oldTexturesRaw@
+ \let\xyPSobeylines@@=\obeyoldTextureslines@
+ \oldTextures@@{PostScript}%
+ \fi
+ \oldtexturesCurrpt@ \@PSshipout }
+{\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\par \obeyspaces}}
+\xylet@\obeyoldTextureslines@=\next
+\xydef@\oldtexturesCurrpt@{\let\xyPScurrpt@@=\oldtexturesCurrpt@@}%
+\xydef@\oldtexturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
+\xydef@\oldtexturesPS@{\oldtexturesPStypes@
+ \let\oldtexturesPS@@=\relax
+ \let\UnloadPS@@=\oldtexturesPSunload@
+ \let\installxyps@@=\@PSshipout \installxyps@ }
+\xydef@\oldtexturesRotate@@{\oldtexturesRotate@}
+\xydef@\oldtexturesRotate@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xyRotScale@@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\oldtexturesLine@@{\oldtexturesLine@}
+\xydef@\oldtexturesLine@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}%
+ \installPSline@ }%
+ \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\oldtexturesFrames@@{\oldtexturesFrames@}
+\xydef@\oldtexturesFrames@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}%
+ \installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\oldtexturesTiles@@{\oldtexturesTiles@}
+\xydef@\oldtexturesTiles@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}%
+ \installPSpatterns@ \xystandardpatterns@}%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex b/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex
new file mode 100644
index 0000000000..fed8bf2a6a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex
@@ -0,0 +1,121 @@
+%% xy17oztex.tex from $Id: xy17oztex.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``OzTeX v1.7'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{17oztex}{OzTeX v1.7 driver}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\OzTeX@@#1{\dvimessage@{OzTeX v1.7}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\oldoztexColor@@
+ \xyaddsupport{crayon}\oldoztexCrayon@@
+ \xyaddsupport{ps}\oldoztexPS@@
+ \xyaddsupport{rotate}\oldoztexRotate@@
+ \xyaddsupport{line}\oldoztexLine@@
+ \xyaddsupport{frame}\oldoztexFrames@@
+ \xyaddsupport{tile}\oldoztexTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\oldoztexColor@@{\oldOzTeXColours@}
+\xydef@\oldOzTeXColours@{\oldOzTeXPStypes@
+ \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\oldOzTeXCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@\fi \next@
+ \let\xycolorwarning@=\relax
+ \let\oldoztexColor@@=\relax
+ \let\UnloadColor@@=\NooldOzTeXColor@
+ }
+\xydef@\NooldOzTeXColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\oldoztexColor@@=\oldOzTeXColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\oldOzTeXCrayon@@{\installCrayolaColors@}
+\xydef@\oldoztexPS@@{\oldoztexPS@}
+\xydef@\oldoztexPSunload@{\UnloadPS@
+ \def\xyPSdictname{}\UsePSdict@@false
+ \let\installxyps@@=\relax
+ \let\UnloadPS@@=\UnloadPS@
+ \xyPSshapes@true
+ \let\oldoztexPS@@=\oldoztexPS@ }
+\xydef@\oldOzTeXSpecial@#1{\special{empty.ps {#1}xy}}
+\xydef@\oldOzTeXMacro@#1{\special{empty.ps {#1}xy}}
+\xydef@\oldOzTeXDict@#1{\special{empty.ps @obxy{#1}stopped pop @eoxy}}
+\xydef@\oldOzTeXinclude@#1{\special{#1}}
+\xydef@\oldOzTeXraw@#1{\special{empty.ps @boxy #1 @eoxy}}%
+\xydef@\oldOzTeXPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\oldOzTeXSpecial@\else
+ \let\PSspecial@@=\oldOzTeXSpecial@
+ \let\PSmacro@@=\oldOzTeXMacro@
+ \let\PSdict@@=\oldOzTeXDict@
+ \let\PSraw@@=\oldOzTeXraw@
+ \let\PSinclude@@=\oldOzTeXinclude@
+ \let\xyPSobeylines@@=\obeyoldOzTeXlines@
+ \let\PSspecialdict@@=\oldOzTeXDict@
+ \oldOzTeX@@{PostScript}%
+ \fi
+ \oldOzTeXCurrpt@ }
+{\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}}
+\xylet@\obeyoldOzTeXlines@=\next
+\xydef@\oldOzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}%
+\xydef@\oldOzTeXCurrpt@@{}
+\xydef@\oldoztexPS@@{\oldOzTeXPStypes@
+ \let\installxyps@@=\old@OzTeX@PS@
+ \installxyps@ }
+\xydef@\old@OzTeX@PS@{\UsePSdict@@true
+ \let\includePSmessage@=\xyoldOzTeXheader
+ \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi}
+\xydef@\xyoldOzTeXheader#1#2#3{\UsePSdict@@true}
+\xydef@\oldoztexLine@@{\oldoztexLine@}
+\xydef@\oldoztexLine@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\oldoztexFrames@@{\oldOzTeXFrames@}
+\xydef@\oldOzTeXFrames@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\oldoztexTiles@@{\oldOzTeXTiles@}
+\xydef@\oldOzTeXTiles@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@
+ \xystandardpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\oldoztexRotate@@{\oldOzTeXRotate@}
+\xydef@\oldOzTeXRotate@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xyRotScale@@ \installPSrotscale@ \xyPSshapes@false }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xy2cell.tex b/macros/generic/diagrams/xypic/texinputs/xy2cell.tex
new file mode 100644
index 0000000000..05d3534f48
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy2cell.tex
@@ -0,0 +1,668 @@
+%% xy2cell.tex from $Id: xy2cell.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``2-cell'' feature.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this macro package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{2cell}{Two-cell feature}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{curve}\xycatcodes
+\message{two-cells,}
+\xydef@\UseTwocells{\definesupermorphism{twocell}{%
+ \xy@{start of 2-cell}{\begingroup}%
+ \twocell@}}
+\xydef@\UseHalfTwocells{%
+ \definesupermorphism{uppertwocell}{%
+ \xy@{start of 2-cell}{\begingroup}%
+ \uppertwocell@}%
+ \definesupermorphism{lowertwocell}{%
+ \xy@{start of 2-cell}{\begingroup}%
+ \lowertwocell@}}
+\xydef@\UseCompositeMaps{\definesupermorphism{compositemap}{%
+ \xy@{start composite-map}{\begingroup}%
+ \compositemap@}}
+\xydef@\UseAllTwocells{%
+ \UseTwocells \UseHalfTwocells \UseCompositeMaps }
+\xydef@\supermorphism#1[#2]#3{\def\afterMORPHISM{[#2]#3}#1}
+\xydef@\afterMORPHISM{}
+\xydef@\definesupermorphism#1#2{%
+ \expandafter\def\csname x#1\endcsname{\supermorphism{#2}}%
+ \expandafter\def\csname u#1\endcsname{\supermorphism{#2}[-1,0]{}}%
+ \expandafter\def\csname d#1\endcsname{\supermorphism{#2}[1,0]{}}%
+ \expandafter\def\csname l#1\endcsname{\supermorphism{#2}[0,-1]{}}%
+ \expandafter\def\csname r#1\endcsname{\supermorphism{#2}[0,1]{}}%
+ \expandafter\def\csname uu#1\endcsname{\supermorphism{#2}[-2,0]{}}%
+ \expandafter\def\csname dd#1\endcsname{\supermorphism{#2}[2,0]{}}%
+ \expandafter\def\csname ll#1\endcsname{\supermorphism{#2}[0,-2]{}}%
+ \expandafter\def\csname rr#1\endcsname{\supermorphism{#2}[0,2]{}}%
+ \expandafter\def\csname ur#1\endcsname{\supermorphism{#2}[-1,1]{}}%
+ \expandafter\def\csname ul#1\endcsname{\supermorphism{#2}[-1,-1]{}}%
+ \expandafter\def\csname dr#1\endcsname{\supermorphism{#2}[1,1]{}}%
+ \expandafter\def\csname dl#1\endcsname{\supermorphism{#2}[1,-1]{}}%
+ \expandafter\def\csname uul#1\endcsname{\supermorphism{#2}[-2,-1]{}}%
+ \expandafter\def\csname uur#1\endcsname{\supermorphism{#2}[-2,1]{}}%
+ \expandafter\def\csname ull#1\endcsname{\supermorphism{#2}[-1,-2]{}}%
+ \expandafter\def\csname urr#1\endcsname{\supermorphism{#2}[-1,2]{}}%
+ \expandafter\def\csname ddl#1\endcsname{\supermorphism{#2}[2,-1]{}}%
+ \expandafter\def\csname ddr#1\endcsname{\supermorphism{#2}[2,1]{}}%
+ \expandafter\def\csname dll#1\endcsname{\supermorphism{#2}[1,-2]{}}%
+ \expandafter\def\csname drr#1\endcsname{\supermorphism{#2}[1,2]{}}%
+ \expandafter\def\csname uull#1\endcsname{\supermorphism{#2}[-2,-2]{}}%
+ \expandafter\def\csname uurr#1\endcsname{\supermorphism{#2}[-2,2]{}}%
+ \expandafter\def\csname ddll#1\endcsname{\supermorphism{#2}[2,-2]{}}%
+ \expandafter\def\csname ddrr#1\endcsname{\supermorphism{#2}[2,2]{}}}
+\newdir{=>}{!/5pt/\dir{=}!/2.5pt/\dir{=}*!/-5pt/\dir2{>}}
+\xydef@\arrowobject#1{\def\Arrowobject@{#1}}
+\xydef@\Arrowobject@{\dir{=>}}
+\xydef@\twocell@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={f}%
+ \tw@cell@ }
+\xydef@\uppertwocell@{\toks6={7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}%
+ \tw@cell@ }
+\xydef@\lowertwocell@{\toks6={-7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}%
+ \tw@cell@ }
+\xydef@\compositemap@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={t}%
+ \tw@cell@ }
+\xydef@\tw@cell@@@{%
+ \expandafter\ifx\the\toks6\omit\relax\toks6={}\else
+ \expandafter\ifx\expandafter @\the\toks7\relax\expandafter\dimen@\the\toks6\p@
+ \expandafter\if\the\toks3t\relax\dimen@=\p@
+ \else\expandafter\if\the\toks3o\divide\dimen@\tw@
+ \ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@
+ \dimen@=\dimen@ii \else \dimen@\p@ \fi
+ \else\dimen@\p@
+ \fi\fi
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\toks\expandafter7\expandafter{\tmp@}\fi
+ \expandafter\ifx\expandafter @\the\toks8\relax
+ \expandafter\dimen@\the\toks6\p@
+ \expandafter\if\the\toks3t\relax\dimen@\p@
+ \else\expandafter\if\the\toks3o\divide\dimen@\tw@
+ \ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@
+ \dimen@=\dimen@ii \else \dimen@\p@ \fi
+ \else\dimen@\p@
+ \fi\fi
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\toks\expandafter8\expandafter{\tmp@}\fi
+ \expandafter\ifx\expandafter @\the\toks5\relax
+ \expandafter\dimen@\the\toks6\p@
+ \expandafter\if\the\toks3o\divide\dimen@ by-4\relax
+ \else\dimen@\z@\fi
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\toks\expandafter5\expandafter{\tmp@}\fi
+ \fi
+ \twocellmod@
+ \expandafter\if\the\toks3t\relax
+ \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
+ {\the\toks7}{\the\toks8}{\the\toks3}%
+ {\the\toks2}{\the\toks1}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
+ \else
+ \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
+ {\the\toks7}{\the\toks8}{\the\toks3}%
+ {\the\toks1}{\the\toks2}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
+ \fi
+ \toks@={\endgroup}%
+ \expandafter\def\expandafter\next@\expandafter{%
+ \expandafter\def\expandafter\twocellhead@\expandafter{\twocellhead@}}%
+ \expandafter\addtotoks@\expandafter{\next@}%
+ \expandafter\def\expandafter\next@\expandafter{%
+ \expandafter\def\expandafter\twocelltail@\expandafter{\twocelltail@}}%
+ \expandafter\addtotoks@\expandafter{\next@}%
+ \expandafter\addtotoks@\expandafter{\expandafter\twocellPATH\tmp@}%
+ \the\toks@ }%
+\xydef@\twocellstyle{\scriptstyle}
+\xydef@\droptwocelllabel@#1{\xyFN@\droptwocelllabel@@#1@!}
+\xydef@\droptwocelllabel@@{%
+ \ifx*\next\DN@*{\droptwocelldrop@}%
+ \else\DN@##1@!{\droptwocelltext@{##1}}%
+ \fi \next@ }
+{\xyuncatcodes \gdef\next#1{\drop+!C{\twocellstyle #1}}}
+\xylet@\droptwocelltext@=\next
+\xydef@\droptwocelldrop@#1@!{\bgroup \let\xy@=\oxy@
+ \let\objectstyle=\twocellstyle \drop#1{}%
+ \edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@ }
+\xydef@\twocellhead#1{\def\twocellhead@{#1}}
+\xydef@\twocelltail#1{\def\twocelltail@{#1}}
+\xydef@\twocellhead@{\dir{>}}
+\xydef@\twocelltail@{}
+\xywarnifdefined\twocellmod@
+\xydef@\tw@cell@{\begingroup
+ \toks@={{}}\toks1={{}}\toks2={{}}\toks4={{}}%
+ \def\twocellmod@{}\xyFN@\tw@@cell@}%
+\xydef@\tw@@cell@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\tw@@cell@}%
+ \else\ifx\bgroup\next \let\next@=\toks@\afterassignment\tw@@cell@@
+ \else\ifx ^\next \DN@^##1{\toks@={##1}\nudgepos@71\tw@@cell@}%
+ \else\ifx _\next \DN@_##1{\toks@={##1}\nudgepos@82\tw@@cell@}%
+ \else\addLT@\ifx \next \addGT@{\addLT@\DN@##1}{%
+ \toks6={##1}\ifx\omit##1\relax\toks3={t}\toks5={0}\fi\xyFN@\tw@@cell@}%
+ \else\ifx\omit\next \DN@\omit{\omitarrows@\xyFN@\tw@@cell@}%
+ \else\ifx~\next \DN@~{\xyFN@\whichCurveObject@}%
+ \else \DN@{\xyFN@\tw@cell@@\empty @}%
+ \fi\fi\fi\fi\fi\fi\fi%
+ \next@ }
+\xydef@\whichCurveObject@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\whichCurveObject@}%
+ \else\ifx\next^\DN@^##1{\xy@{~^{##1}}{\uppercurveobject{##1}}\xyFN@\tw@@cell@}%
+ \else\ifx\next_\DN@_##1{\xy@{~_{##1}}{\lowercurveobject{##1}}\xyFN@\tw@@cell@}%
+ \else\addRQ@\ifx\next \addRQ@\DN@##1{%
+ \xy@{~'{##1}}{\def\twocellhead@{##1}}\xyFN@\tw@@cell@}%
+ \else\addLQ@\ifx\next \addLQ@\DN@##1{%
+ \xy@{~`{##1}}{\def\twocelltail@{##1}}\xyFN@\tw@@cell@}%
+ \else\ifx!\next \DN@!{\xyFN@\checkmodmap@}%
+ \else\ifx\next\bgroup\DN@##1{\xy@{~{##1}}{\curveobject{##1}}\xyFN@\tw@@cell@}%
+ \else\DN@##1{\xy@{~##1}{\curveobject{##1}}\xyFN@\tw@@cell@}%
+ \fi\fi\fi\fi \fi\fi\fi
+ \next@ }
+\xydef@\checkmodmap@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkmodmap@}%
+ \else \def\twocellmod@{\modmap@}%
+ \ifx\next!\DN@!##1{%
+ \xy@{~!!{##1}}{\def\modmapobject@{##1}}\xyFN@\tw@@cell@}%
+ \else \DN@{\xyFN@\tw@@cell@}\fi
+ \fi \next@ }
+\xydef@\omitarrows@{\toks5={0}\toks6={}\toks7={0}\toks8={0}}
+\xydef@\tw@@cell@@{\expandafter\xyFN@\expandafter\tw@cell@@\the\toks@ @}
+\xydef@\tw@cell@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\tw@cell@@}%
+ \else\ifx ^\next
+ \DN@^##1@{\toks@={##1}\toks4={^}\nudgepos@50\tw@cell@@@}%
+ \else\addEQ@\ifx\next
+ \addEQ@\DN@##1@{\toks@={##1}\toks4={=}\nudgepos@50\tw@cell@@@}%
+ \else\ifx _\next
+ \DN@_##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}%
+ \else\addLT@\ifx \next
+ \DN@##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}%
+ \else\ifx\omit\next \DN@\omit##1@{\toks4={@}\toks@={##1}\tw@cell@@@}%
+ \else\addRQ@\ifx\next \addRQ@\DN@##1@{\toks4={@}\toks3={/}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\addLQ@\ifx\next \addLQ@\DN@##1@{\toks4={@}\toks3={b}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\ifx"\next \DN@"##1@{\toks4={@}\toks3={B}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\ifx!\next \DN@!##1@{\toks4={@}\toks3={@}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\ifx\next\empty\DN@##1@{\toks@={{}}\toks4={_}\tw@cell@@@}%
+ \else\DN@##1@{\toks@={##1}\toks4={_}\tw@cell@@@}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ }
+\xywarnifdefined\whichnudge
+\xywarnifdefined\whichinfo
+\xywarnifdefined\afternudge
+\xydef@\nudgepos@#1#2#3{\def\whichnudge{\toks#1}\def\whichinfo{\toks#2}%
+ \def\afternudge{#3}\expandafter\xyFN@\expandafter\nudgepos@@\the\toks@ @}
+\xydef@\nudgepos@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\nudgepos@}%
+ \else\addLT@\ifx \next
+ \addGT@{\addLT@\DN@##1}##2@{%
+ \ifx\omit##1\relax\whichnudge={0}\whichinfo={}%
+ \else\whichnudge={##1}\whichinfo={##2}\fi\xyFN@\afternudge}%
+ \else \DN@##1@{\whichinfo={##1}\xyFN@\afternudge}%
+ \fi\fi \next@ }
+\xydef@\modmap@{%
+ \expandafter\ifx\the\toks4@\toks4={!}%
+ \else\expandafter\ifx\the\toks4=\toks4={H}%
+ \else\expandafter\ifx\the\toks4^\toks4={A}%
+ \else\expandafter\ifx\the\toks4_\toks4={V}\fi\fi\fi\fi
+ \expandafter\DN@\expandafter{\the\toks6}%
+ \ifx\next@\empty\relax\else\expandafter\moddefs@\fi}
+\xydef@\moddefs@{%
+ \expandafter\dimen@\the\toks6\p@
+ \ifdim\dimen@=\z@\relax
+ \expandafter\dimen@\the\toks7\p@
+ \ifdim\dimen@<\z@\advance\dimen@.5\p@\else\advance\dimen@-.5\p@\fi
+ \edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@
+ \expandafter\dimen@\the\toks8\p@
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \expandafter\ifx\the\toks3t\advance\dimen@-1\p@\fi
+ \edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@
+ \else
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \edef\tmp@{\noexpand\toks6={\expandafter\removePT@\the\dimen@}}\tmp@
+ \expandafter\dimen@\the\toks7\p@
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi
+ \edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@
+ \expandafter\dimen@\the\toks8\p@
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi
+ \edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@
+ \fi }%
+\xydef@\modmapobject#1{\def\modmapobject@{#1}}
+\xydef@\modmapobject@{\dir{|}}
+\xydef@\@modmapobject@{{\if\@mod@\relax\expandafter\empty
+ \else\expandafter\modmapobject@\fi}}
+\xydef@\curveobject#1{\def\ucurveObject@{~*#1}\def\dcurveObject@{~*#1}}
+\xydef@\uppercurveobject#1{\def\ucurveObject@{~*#1}}
+\xydef@\lowercurveobject#1{\def\dcurveObject@{~*#1}}
+\xydef@\ucurveObject@{}
+\xydef@\dcurveObject@{}
+\xydef@\savetwocellobjects{%
+ \xy@{twocell objects}{%
+ \expandafter\uppercurveobject\expandafter{\ucurveObject@}%
+ \expandafter\lowercurveobject\expandafter{\dcurveObject@}%
+ \expandafter\modmapobject\expandafter{\modmapobject@}%
+ \expandafter\twocellhead\expandafter{\twocellhead@}%
+ \expandafter\twocelltail\expandafter{\twocelltail@}%
+ \expandafter\arrowobject\expandafter{Arrowobject@}%
+ }}
+\xydef@\twocell@path.[#1].{%
+ \expandafter\ifx\csname Q@@c\endcsname\relax
+ \DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
+ \xy@{}{\expandafter\edef\csname Q@@\endcsname{\cfromthec@}}%
+ \afterPOS{\xy@{}%
+ {\expandafter\edef\csname Q@@c\endcsname{\cfromthec@}}%
+ \xy@{}%
+ {\cfromid@{@}\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}}%
+ \xy@{twocell #1}{#1}\leave@\aftertwoCELL};p,}%
+ \else
+ \DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
+ \xy@{twocell #1}{#1}\leave@\aftertwoCELL}%
+ \fi \next@ }
+\xydef@\twocellpath.[#1].{%
+ \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}%
+ \xy@{}{\enter@{\pfromthep@}}%
+ \xy@{}{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
+ \enter@{\pfromthec@}}%
+ \afterPOS{\xy@{}{\leave@\setupDirection@}#1\restore\restore
+ \xy@{end of 2-cell}\xysaveMinMax@ }}%
+\xydef@\xysaveMinMax@{\edef\tmp@{\endgroup
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi
+ }\tmp@ }
+\xylet@\twocellPATH=\twocellpath
+\xydef@\aftertwo@CELL{\let\twocellPATH=\twocellpath \def\aftertwoCELL{}}
+\xydef@\aftertwoCELL{}
+\xydef@\twocell@@@@#1!!!{\xy@{twocell #1}{\twocell@@#1!!!}}
+\let\xystatus=\xystatus@
+\xydef@\twocell{\hbox\bgroup\@twocell}
+\xydef@\uppertwocell{\hbox\bgroup\@uppertwocell}
+\xydef@\lowertwocell{\hbox\bgroup\@lowertwocell}
+\xydef@\compositemap{\hbox\bgroup\@compositemap}
+\xydef@\twocelll#1#{\hbox\bgroup\xy@\save\save@\@twocelll{#1}}
+\xydef@\@twocelll#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\twocell@#1{#2}}}
+\xydef@\uppertwocelll#1#{\hbox\bgroup\xy@\save\save@\@uppertwocelll{#1}}
+\xydef@\@uppertwocelll#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\uppertwocell@#1{#2}}}
+\xydef@\lowertwocelll#1#{\hbox\bgroup\xy@\save\save@\@lowertwocelll{#1}}
+\xydef@\@lowertwocelll#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\lowertwocell@#1{#2}}}
+\xydef@\compositemapp#1#{\hbox\bgroup\xy@\save\save@\@compositemapp{#1}}
+\xydef@\@compositemapp#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\compositemap@#1{#2}}}
+\xydef@\@twocelll@{%
+ \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
+ \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
+ \let\twocellPATH=\twocell@path
+ \def\aftertwoCELL{\twocell@DONE \xy@\restore \leave@
+ }}
+\xydef@\@twocell#1{\DN@{\@twocell@\twocell@}\xyFN@\next@[#1]}
+\xydef@\@uppertwocell#1{\DN@{\@twocell@\uppertwocell@}\xyFN@\next@[#1]}
+\xydef@\@lowertwocell#1{\DN@{\@twocell@\lowertwocell@}\xyFN@\next@[#1]}
+\xydef@\@compositemap#1{\DN@{\@twocell@\compositemap@}\xyFN@\next@[#1]}
+\xydef@\@twocell@#1{\ifx\next[\DN@[{\toks@={#1}\xyFN@\@@twocell@}%
+ \else\DN@{#1{}}\fi
+%%
+ \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
+ \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
+ \let\twocellPATH=\twocell@path
+ \def\aftertwoCELL{\twocell@DONE}\next@}
+\xydef@\@@twocell@{\ifx\next\bgroup\DN@##1]{\the\toks@{##1}}%
+ \else\DN@##1]{\the\toks@##1}\fi\next@}
+%% \DN@{\twocell}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@twocell}
+%% \DN@{\uppertwocell}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@uppertwocell}
+%% \DN@{\lowertwocell}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@lowertwocell}
+%% \DN@{\compositemap}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@compositemap}
+\xydef@\twocell@DONE{%
+ \edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@
+ \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c
+ \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
+ \computeLeftUpness@
+\setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }%
+\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c
+ \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false
+ \edef\Drop@@{\noexpand\drop@Twocell
+ \noexpand\def\noexpand\Leftness@{\Leftness@}%
+ \noexpand\def\noexpand\Upness@{\Upness@}}%
+ \edef\Connect@@{\noexpand\connect@Twocell
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }}%
+\xydef@\drop@Twocell{\boxz@ }
+\xydef@\connect@Twocell{%
+ \setboxz@h{\kern\X@p \raise\Y@c\box\lastobjectbox@ }%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \Drop@@ }
+\xywarnifdefined\@mod@
+\xywarnifdefined\Arrowtok@
+\xydef@\twocell@@#1#2#3#4#5#6#7#8#9!!!{%
+ \def\@mod@{@}\DN@{#9}%
+ \ifx #9!\def\Arrowtok@{@}\else\ifx #9A\def\Arrowtok@{^}%
+ \else\ifx #9V\def\Arrowtok@{_}\else\ifx #9H\def\Arrowtok@{=}%
+ \else\def\@mod@{\relax}%
+ \ifx #5/\def\Arrowtok@{@}\else\ifx #5b\def\Arrowtok@{@}%
+ \else\ifx #5B\def\Arrowtok@{@}\else\ifx #5@\def\Arrowtok@{@}%
+ \else\def\Arrowtok@{#9}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \addEQ@\ifx #9\def\Arrowtok@{=}\fi
+ \DN@{\omit}\ifx\next@\Arrowtok@\def\Arrowtok@{}\else
+ \edef\Arrowtok@{\codeof\Arrowtok@}\fi
+ \save@ \idfromc@{@c}\swap@\idfromc@{@p}\swap@
+ \cfromid@{@c}\no@@
+ \ifdim \X@c<\X@p \X@min=\X@c \X@max=\X@p \else \X@min=\X@p \X@max=\X@c \fi
+ \ifdim \Y@c<\Y@p \Y@min=\Y@c \Y@max=\Y@p \else \Y@min=\Y@p \Y@max=\Y@c \fi
+ \Calong@@{.5}\idfromc@{@m}\idfromc@{@m1}\idfromc@{@m2}%
+ \ifx #5t\relax
+ \enter@{\cplusthec@\pfromthep@}%
+ \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@=\z@ \DN@{\vfromslide@i{\xydashl@}@}\relax
+ \else\DN@{\vfromslide@i{#1\xydashl@}@}\fi \next@
+ \czeroEdge@ \leave@ \no@@ \drop@{+}{}\idfromc@{@m1}%
+ \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
+ \else
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@=\z@ \enter@{\cplusthec@\pfromthep@}%
+ \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@\xydashl@
+ \vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m1}%
+ \cfromid@{@p}\swap@\cfromid@{@c}%
+ \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
+ \else \DN@{\enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@
+ \vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@
+ \idfromc@{@m1}\cfromid@{@p}\swap@\cfromid@{@c}%
+ \edef\next@{\codeof\ucurveObject@}%
+ \ifx\next@\empty\DN@{\connect@\crv{"@m1"}}%
+ \else
+ \DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{%
+ \expandafter\nextii@\expandafter{\ucurveObject@"@m1"}}%
+ \fi \next@ }%
+%% \ifx\next@\empty\def\ucurveObject@{.}\fi
+%% \enter@\cfromthec@\sinit@\cfromid@{@m1}\senter@\leave@
+%% \expandafter\connect@\expandafter\crvs\expandafter{\ucurveObject@}%
+%% \sinit@\sleave@ }%
+ \fi
+ \fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else
+ \if\@mod@ @\relax
+ \enter@\pfromthep@ \Creset@@
+ \ifx #5t\relax
+ \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}%
+ \else \def\next@{\crvreset@}%
+ \ifx\next@\Creset@@
+ \gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi
+ \fi
+ \expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@
+ \edef\tmp@{\codeof\modmapobject@}%
+ \ifx\tmp@\empty \DN@{\drop@{\dir}{|}}%
+ \else \DNii@##1##{\drop@{##1}}%
+ \DN@{\expandafter\nextii@\modmapobject@{}}%
+ \fi \next@
+ \fi\fi
+ \DN@{#6}\ifx\next@\empty\DN@{\relax}\else
+ \DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else
+ \ifx @#3\relax\DN@{\relax}\else
+ \DN@{\enter@\pfromthep@ \Creset@@
+ \Calong@@{.5}\czeroEdge@ \leave@
+ \enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@\begingroup
+ \DN@{#1}\ifx\next@\empty\dimen@\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@<\z@ \belowDirection@ \xydashl@
+ \else \aboveDirection@ \xydashl@ \fi
+ \dimen@=#3\p@ \if\@mod@ @\relax
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi
+ \edef\next@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@
+ \droptwocelllabel@{#6}}%
+ \fi\fi\fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else
+ \ifx #5b\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@ \DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi
+ \else\ifx #5@\relax
+ \else
+ \enter@\pfromthep@ \Creset@@ \PLACEedgec@
+ \Calong@@{1}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocellhead@}%
+ \ifx\next@\empty\drop@{\dir}{>}%
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
+ \fi
+ \ifx #5B\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@\DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}%
+ \fi
+ \else\ifx #5/\relax
+ \else \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty\relax\else
+ \enter@\pfromthep@ \Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi\fi\fi
+ \fi\fi\fi
+ \cfromid@{@p}\swap@\cfromid@{@c}\no@@ \cfromid@{@m}%
+ \ifx #5t\relax
+ \idfromc@{@m2}\cfromid@{@m1}\swap@ \cfromid@{@c}\no@@
+ \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
+ \else\ifx #5o\relax
+ \idfromc@{@m2}\DN@{}%
+ \else
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@=\z@
+ \enter@{\cplusthec@\pfromthep@}%
+ \enter@\DirectionfromtheDirection@ \begingroup \belowDirection@\xydashl@
+ \vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m2}%
+ \DN@{\cfromid@{@p}\swap@\cfromid@{@c}\no@@}%
+ \else \DN@{\enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup \belowDirection@ \xydashl@
+ \vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@
+ \idfromc@{@m2}\cfromid@{@p}\swap@\cfromid@{@c}%
+ \edef\next@{\codeof\dcurveObject@}%
+ \ifx\next@\empty\DN@{\connect@\crv{"@m2"}}%
+ \else
+ \DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{%
+ \expandafter\nextii@\expandafter{\dcurveObject@"@m2"}}%
+ \fi \next@ }\fi
+%% \enter@\cfromthec@\sinit@\cfromid@{@m2}\senter@\leave@
+%% \expandafter\connect@\expandafter\crvs\expandafter{\dcurveObject@}%
+%% \sinit@\sleave@
+%% }\fi
+ \fi\fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else \ifx #5o\relax\else
+ \if\@mod@ @\DN@{\enter@\pfromthep@ \Creset@@
+ \ifx #5t\relax
+ \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}%
+ \else \def\next@{\crvreset@}%
+ \ifx\next@\Creset@@
+ \gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi
+ \fi
+ \expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@
+ \edef\tmp@{\codeof\modmapobject@}\ifx\tmp@\empty\DN@{\drop@{\dir}{|}}%
+ \else \DNii@####1####{\drop@{####1}}%
+ \DN@{\expandafter\nextii@\modmapobject@{}}\fi
+ \next@ }\else\DN@{\relax}\fi
+ \next@ \fi\fi
+ \DN@{#7}\ifx\next@\empty\DN@{\relax}\else
+ \DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else
+ \ifx @#4\relax\DN@{\relax}\else
+ \DN@{\enter@\pfromthep@ \Creset@@
+ \Calong@@{.5}\czeroEdge@ \leave@
+ \enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \DN@{#1}\ifx\next@\empty\dimen@\z@ \else\dimen@=#1\p@\fi
+ \ifx #5t\relax \ifdim\dimen@<\z@ \belowDirection@ \xydashl@
+ \else \aboveDirection@ \xydashl@ \fi
+ \else \ifdim\dimen@<\z@ \aboveDirection@ \xydashl@
+ \else \belowDirection@ \xydashl@ \fi
+ \fi \dimen@=#4\p@ \if\@mod@ @\relax
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi
+ \edef\next@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@
+ \droptwocelllabel@{#7}}%
+ \fi\fi\fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else
+ \ifx #5o\relax
+ \else\ifx #5b\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgec@
+ \Calong@@{1}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{>}%
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}%
+ \fi
+ \else\ifx #5/\relax
+ \enter@{\pfromthep@}\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@\DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi
+ \else\ifx #5@\relax
+ \else
+ \enter@\pfromthep@ \Creset@@ \PLACEedgec@
+ \Calong@@{1}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocellhead@}%
+ \ifx\next@\empty\drop@{\dir}{>}%
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
+ \fi
+ \ifx #5B\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty\DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@\DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi
+ \else
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty\relax\else
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi\fi
+ \fi\fi\fi
+ \fi\fi
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@<\z@ \cfromid@{@m2}\swap@\cfromid@{@m1}%
+ \else \cfromid@{@m1}\swap@\cfromid@{@m2}%
+ \fi \no@@ \cfromid@{@m}%
+ \ifx\Arrowtok@\empty
+ \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m}%
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}%
+ \else\DN@{^}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \DN@{_}\edef\Arrowtok@{\codeof\next@}%
+ \enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m}\reverseDirection@
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}%
+ \else \DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \enter@{\pfromthep@ \cplusthec@}%
+ \dimen@=#2\xydashl@ \advance\dimen@\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m2}%
+ \cfromid@{@m}%
+ \enter@{\pfromthep@ \cplusthec@}%
+ \dimen@=#2\xydashl@ \advance\dimen@-\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m1}%
+ \cfromid@{@m2}\swap@\cfromid@{@m1}\connect@{\dir 2}{-}%
+ \fi\fi\fi\fi
+ \DN@{#8}\ifx\next@\empty\DN@{}\else\DN@{%
+ \ifx\Arrowtok@\empty
+ \Calong@@{.5}%
+ \else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \Calong@@{.5}%
+ \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \cfromid@{@m}%
+ \fi\fi\fi
+ \enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup \aboveDirection@\xydashl@
+ \ifx\Arrowtok@\empty
+ \def\tmp@{0pt}%
+ \else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \def\tmp@{\xydashl@}%
+ \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \def\tmp@{1.2\xydashl@}%
+ \else\def\tmp@{0pt}%
+ \fi\fi\fi
+ \expandafter\vfromslide@i\expandafter{\tmp@}@\czeroEdge@ \leave@
+ \droptwocelllabel@{#8}%
+ }\fi \next@
+ \leave@ }%
+\xydef@\gettwocelledges@{%
+ \bgroup \the\crvpts@
+ \edef\next@{\edges@}%
+ \expandafter\gettwocelledges@@\next@ }
+\xydef@\gettwocelledges@@#1;#2,#3;#4,{%
+ \dimen@=#2\advance\dimen@-#4\relax
+ \advance\dimen@ 2\p@ \divide\dimen@ by4 \relax
+ \edef\next@{\egroup\dimen@=\the\dimen@ }\next@}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyall.tex b/macros/generic/diagrams/xypic/texinputs/xyall.tex
new file mode 100644
index 0000000000..a95fe9d213
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyall.tex
@@ -0,0 +1,36 @@
+%% xyall.tex from $Id: xyall.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``All features'' option.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{all}{All features}{\stripRCS$Revision: 3.8 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xyrequire{curve}
+\xyrequire{frame}
+\xyrequire{cmtip}
+\xyrequire{line}
+\xyrequire{rotate}
+\xyrequire{color}
+\xyrequire{matrix}
+\xyrequire{arrow}
+\xyrequire{graph}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyarc.tex b/macros/generic/diagrams/xypic/texinputs/xyarc.tex
new file mode 100644
index 0000000000..eaad720083
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyarc.tex
@@ -0,0 +1,683 @@
+%% xyarc.tex from $Id: xyarc.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Circles, Ellipses and Arcs'' feature.
+%% Copyright (c) 1995-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The XY-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The XY-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{arc}{Circle, Ellipse, Arc feature}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{curve}
+\xycatcodes
+\xydef@\ellipse#1#{\xy@{ELLIPSE}{\hbox\bgroup\save@}%
+ \let\endarc@=\endellipse@@ \xyFN@\preARC@ #1@}
+\xydef@\endellipse@@{\xy@{endELLIPSE}{\leave@\origDirection@
+ \edef\next@{\egroup \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max }\next@}\let\bstartPLACE@=\relax}
+\xydef@\preARC@{%
+ \ifx\next\space@ \expandafter\DN@\space{\xyFN@\preARC@}%
+ \else\ifx\next @\DN@{\xy@{ellipseARC}\ellipticARC@ \arc@}%
+ \else\ifx\next ~\DN@~##1{\tildeARC@{##1}}%
+ \else\DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}%
+ \fi\fi\fi \next@ }
+\xydef@\arc@#1@#2{\DN@{#2}%
+ \ifx\next@\empty \xy@{arcSTYLE}{\def\arcSTYLE{-}}%
+ \else \xy@{arcSTYLE}{\def\arcSTYLE{#2}}\fi \arc@i
+ \DNii@{#1}%
+ \ifx\nextii@\empty \DN@{\fullCircle@}%
+ \else \DN@{_}%
+ \ifx\next@\nextii@ \xy@{_}{\def\arcOrient@@{_}}%
+ \let\arcOrient@@=\next@ \DN@{\fullCircle@}%
+ \else \DN@{^}%
+ \ifx\next@\nextii@ \xy@{^}{\def\arcOrient@@{^}}%
+ \let\arcOrient@@=\next@ \DN@{\fullCircle@}%
+ \else \DN@{\def\afterARCextents@@{%
+ \xy@{aftARCext}{\let\doCircleArc@=\doCircleArc@@}%
+ \ellipseArc@ \xy@{doCircARCs}{\doCircleArcs@}\endarc@ }%
+ \xyFN@\getarcparams@#1@}\fi\fi\fi
+ \next@ }
+\xydef@\arc@i{\xy@{ARCi}{%
+ \save@\idfromc@{0@c}\cfromp@\idfromc@{0@p}%
+ \enter@\cplusthec@ \enter@\relax\begingroup\vfromslide@i{}@\czeroEdge@
+ \leave@\idfromc@{0@m}\leave@ \zeroDivideLimit@{50}%
+ \edef\origDirection@{\Direction=\the\Direction
+ \relax\noexpand\imposeDirection@}%
+ \let\startDirection@=\origDirection@ \def\startDirection@@{}%
+ \def\endDirection@{}\def\endDirection@@{}\def\arcOrient@@{^}}%
+ \def\arcOrient@@{^}\let\processDirections@=\checkstartDirection@
+ \def\arcRadius@{}\def\ellipseRatio@{}\def\arcScale@{\arcScale@@}}
+\message{circles,}
+\xydef@\fullCircle@{\xy@{fullCIRC}{\let\endDirection@=\relax
+ \let\doCircleArc@=\doMergeEndArc@@}\circleArc@ }%
+\xydef@\getarcparams@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\getarcparams@}%
+ \else\addLT@\ifx \next \xy@{<}{}%
+ \addGT@{\addLT@\DN@##1}{\splitRadius@dim##1,,@}%
+ \else\ifx\next (\DN@({\xyFN@\checkRadOpen@}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}%
+ \else \addLQ@\ifx \next \addLQ@\DN@{\xy@`{}\ARCturn@}%
+ \else \DN@{\getarcExtents@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\checkRadOpen@{%
+ \ifx\next *\DN@{\xyFN@\getarcExtents@ (}%
+ \else \xy@{(}{}\DN@##1){\splitRadius@##1,,@}%
+ \fi \next@ }
+\xydef@\fixedRadiusArc@{%
+ \xy@{fixRadArc}{\save@ \idfromc@{0@0}\cfromp@\idfromc@{0@c}\leave@}%
+ \xyFN@\fixedRadiusArc@i }
+\xydef@\fixedRadiusArc@i{%
+ \ifx\next\space@ \expandafter\DN@\space{\xyFN@\fixedRadiusArc@i}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}%
+ \else\DN@{\let\processDirections@=\processArcDirections@
+ \def\afterARCextents@@{\xy@{aftARCext}{\let\doCircleArc@=\doCircleArc@@
+ \ellipseSector@}}\xyFN@\getarcExtents@}%
+ \fi\fi \next@ }
+\xydef@\arcScale@@{\xy@{arcSCALE@@}{\save@
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c}}
+\xydef@\arcScale@dim#1{\xy@{arcSCALEdim}{\save@
+ \cfromid@{0@0}\pfromc@ \cfromid@{0@p}\setupDirection@\cfromp@
+ \enter@\cplusthec@ \begingroup\vfromslide@i#1@%
+ \setbase@\X@p\Y@p\X@c\Y@c \idfromc@{0@p}}}
+\xydef@\ellipseScale@dim#1{\xy@{ellSCALEdim}{\setupDirection@\cfromp@
+ \enter@\cplusthec@ \aboveDirection@\xydashl@ \vfromslide@{#1}\leave@
+ \setbase@@\X@c\Y@c}}
+\xydef@\ellipseScale@#1{\xy@{ellSCALE@}%
+ {\vfromcartesian@@0,#1@\setbase@@\X@c\Y@c}}
+\xydef@\splitRadius@dim#1,#2,#3@{%
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\relax%\splinetracing
+ \expandafter\def\expandafter\arcRadius@
+ \expandafter{\arcScale@dim{#1}}\fi
+ \DN@{#2}\ifx\next@\empty\dimen@ii=\z@\def\ellipseRatio@{}%
+ \else\dimen@ii=#2\relax \expandafter
+ \def\expandafter\ellipseRatio@\expandafter{\ellipseScale@dim{#2}}%
+ \fi \fixedRadiusArc@ }
+\xydef@\splitRadius@#1,#2,#3@{%
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\relax\fi
+ \DN@{#2}\ifx\next@\empty\dimen@ii=\z@\else\dimen@ii=#2\p@\relax\fi
+ \ifdim\dimen@=\z@ \ifdim\dimen@ii=\z@\else \expandafter
+ \def\expandafter\ellipseRatio@\expandafter{\ellipseScale@{#2}}\fi
+ \else
+ \ifdim\dimen@ii=\z@
+ \def\arcScale@{\xy@{arcSCALE@}{\save@\cfromid@{0@0}%
+ \X@origin=\X@c \Y@origin=\Y@c
+ \X@xbase=#1\X@xbase \Y@xbase=#1\Y@xbase
+ \X@ybase=#1\X@ybase \Y@ybase=#1\Y@ybase
+ \advance\X@c\X@xbase \advance\Y@c\Y@xbase \czeroEdge@
+ \idfromc@{0@p}\idfromc@{0@c}}}%
+ \else
+ \def\arcScale@{\xy@{arcSCALE@}{\save@\cfromid@{0@0}%
+ \X@origin=\X@c \Y@origin=\Y@c
+ \X@xbase=#1\X@xbase \Y@xbase=#1\Y@xbase
+ \X@ybase=#2\X@ybase \Y@ybase=#2\Y@ybase
+ \advance\X@c\X@xbase \advance\Y@c\Y@xbase \czeroEdge@
+ \idfromc@{0@p}\idfromc@{0@c}}}%
+ \fi
+ \fi \fixedRadiusArc@ }
+\xydef@\baseOrient@{\DN@{_}\ifx\next@\arcOrient@@
+ \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi }
+\message{ellipses,}
+\xydef@\fullEllipse@{\xy@{fullELLIPSE}%
+ {\def\startDirection@{}\let\doCircleArc@=\doMergeEndArc@@}%
+ \ellipseArc@
+ \xy@{doCIRCarcs}{\leave@ \doCircleArcs@}\endarc@ }
+\xydef@\ellipseArc@{%
+ \arcScale@ \arcRadius@ \ellipseRatio@
+ \xy@{arcCONTROLS}{\baseOrient@ \arcControls@ \let\bstartPLACE@=\relax }}
+\xydef@\cubicARCcontrols@@{\czeroEdge@
+ \vfromcartesian@@0,1@\idfromc@{1@c}%
+ \vfromcartesian@@-1,0@\idfromc@{2@c}%
+ \vfromcartesian@@0,-1@\idfromc@{3@c}%
+ \vfromcartesian@@1,\arcparam@ @\idfromc@{1@m}%
+ \vfromcartesian@@\arcparam@,1@\idfromc@{2@m}%
+ \vfromcartesian@@-\arcparam@,1@\idfromc@{3@m}%
+ \vfromcartesian@@-1,\arcparam@ @\idfromc@{4@m}%
+ \vfromcartesian@@-1,-\arcparam@ @\idfromc@{5@m}%
+ \vfromcartesian@@-\arcparam@,-1@\idfromc@{6@m}%
+ \vfromcartesian@@\arcparam@,-1@\idfromc@{7@m}%
+ \vfromcartesian@@1,-\arcparam@ @\idfromc@{8@m}%
+ }
+\xydef@\doCircleArc@@#1#2{\save@ \ifcase#2\relax
+ \doCircleArc@@@{0@p}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleArc@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleArc@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleArc@@@{3@c}{7@m}{8@m}{0@p}{#1}\or
+ \doCircleArc@@@{0@p}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleArc@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleArc@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleArc@@@{3@c}{7@m}{8@m}{0@p}{#1}\fi \leave@ }
+\xydef@\doCircleArc@@@#1#2#3#4#5{%
+ \cfromid@{#1}\pfromc@\senter@
+ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \connect@\crvs{#5}\relax\sinit@\sleave@}
+\xydef@\doMergeEndArc@@#1#2{\save@\ifcase#2\relax
+ \doMergeEnd@@@{0@p}{1@m}{2@m}{1@c}{#1}\relax\or
+ \doMergeEnd@@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or
+ \doMergeEnd@@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or
+ \doMergeEnd@@@{3@c}{7@m}{8@m}{0@p}{#1}@\fi \leave@ }
+\xydef@\doMergeEnd@@@#1#2#3#4#5#6{%
+ \cfromid@{#1}\pfromc@\senter@
+ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \ifx#6\relax
+ \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi
+ \enter@\cmergethec@\cfromid@{0@c}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#1}{#2}{#3}{#4}\leave@
+ \connect@\crvs{#5}\relax
+ \sinit@\sleave@}
+\xydef@\doMergeStartArc@#1#2{\save@\ifcase#2\relax
+ \doMergeStart@@{0@p}{1@m}{2@m}{1@c}{#1}@\or
+ \doMergeStart@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or
+ \doMergeStart@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or
+ \doMergeStart@@{3@c}{7@m}{8@m}{0@p}{#1}\relax\fi \leave@ }
+\xydef@\doMergeStart@@#1#2#3#4#5#6{%
+ \cfromid@{#1}\ifx#6\relax
+ \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi
+ \enter@\cmergethec@\cfromid@{0@x}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#4}{#3}{#2}{#1}\leave@
+ \pfromc@
+ \senter@ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \connect@\crvs{#5}\relax\sinit@\sleave@}
+\xydef@\doMergeBothArc@#1#2{\save@\ifcase#2\relax
+ \doMergeBoth@@{0@p}{1@m}{2@m}{1@c}{#1}@\or
+ \doMergeBoth@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or
+ \doMergeBoth@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or
+ \doMergeBoth@@{3@c}{7@m}{8@m}{0@p}{#1}\relax\fi \leave@ }
+\xydef@\doMergeBoth@@#1#2#3#4#5#6{%
+ \cfromid@{#1}\ifx#6\relax
+ \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi
+ \enter@\cmergethec@\cfromid@{0@x}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#4}{#3}{#2}{#1}\leave@
+ \pfromc@
+ \senter@ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \enter@\cmergethec@\cfromid@{0@c}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#1}{#2}{#3}{#4}\leave@
+ \connect@\crvs{#5}\relax\sinit@\sleave@}
+\xydef@\doMergeEndArc@#1#2{\count@@=#2\relax
+ \ifnum\count@@>\thr@@ \advance\count@@-4\fi\relax
+ \doMergeEndArc@@{#1}\count@@ }
+\xydef@\doStraightArc@@#1{\xy@{STRAITarc}{\save@
+ \cfromid@{0@p}\pfromc@\cfromid@{0@c}%
+ \senter@\connect@\crvs{#1}\sinit@\sleave@\leave@}}
+\xydef@\cfromcontrols@#1#2#3#4{\bgroup
+ \cfromid@{#1}\L@p=\X@c \U@p=\Y@c
+ \cfromid@{#4}\R@p=\X@c \D@p=\Y@c
+ \cfromid@{#3}\A@=\X@c \B@=\Y@c \cfromid@{#2}%
+ \ifdim\R@p>\L@p \ifdim\A@>\R@p \R@p=\A@
+ \ifdim\X@c>\R@p \R@p=\X@c\fi\fi
+ \else \ifdim\A@<\R@p \R@p=\A@
+ \ifdim\X@c<\R@p \R@p=\X@c\fi\fi
+ \fi
+ \ifdim\D@p>\U@p \ifdim\B@>\D@p \D@p=\B@
+ \ifdim\Y@p>\D@p \D@p=\Y@p\fi\fi
+ \else \ifdim\B@<\D@p \D@p=\B@
+ \ifdim\Y@p<\D@p \D@p=\Y@p\fi\fi
+ \fi
+ \edef\next@{\egroup \X@c=\the\R@p \Y@c=\the\D@p}\next@ }
+\xydef@\doCircleArcs@{\save@
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@
+ \startDirection@ \edef\startDirection@@{\the\Direction}%
+ \cfromid@{1@c}\setupDirection@ \edef\quadDirection@{\the\Direction}\relax
+ \count@=\quadDirection@ \relax\def\nextii@{^}%
+ \let\preDirection@@=\startDirection@@
+ \ifx\nextii@\arcOrient@@
+ \ifnum\quadDirection@>\startDirection@@ \relax
+ \else \advance\count@ by8192 \relax\edef\quadDirection@{\the\count@}\fi
+ \ifx\endDirection@@\empty
+ \ifx\endDirection@\relax
+ \bgroup\cfromid@{0@c}\setupDirection@
+ \edef\next@{\egroup \count@@=\the\Direction}\next@ \relax
+ \ifnum\count@@<\startDirection@@ \advance\count@@ 8192 \fi
+ \edef\endDirection@@{\the\count@@}%
+ \else
+ \count@@=\startDirection@@
+ \advance\count@@ by8192 \edef\endDirection@@{\the\count@@}%
+ \fi
+ \else
+ \count@@=\endDirection@@ \relax\ifnum\count@@<\startDirection@@ \relax
+ \advance\count@@ by8192 \edef\endDirection@@{\the\count@@}\fi
+ \fi
+ \ifnum\endDirection@@>\quadDirection@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}%
+ \else
+ \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}%
+ \fi
+ \else
+ \ifnum\count@<\startDirection@@\relax\else\advance\count@ by-8192 \relax
+ \edef\quadDirection@{\the\count@}\fi
+ \ifx\endDirection@@\empty
+ \ifx\endDirection@\relax
+ \bgroup\cfromid@{0@c}\setupDirection@
+ \edef\next@{\egroup \count@@=\the\Direction}\next@ \relax
+ \ifnum\count@@>\startDirection@@ \advance\count@@-8192 \fi
+ \edef\endDirection@@{\the\count@@}%
+ \else
+ \count@@=\startDirection@@
+ \advance\count@@ by-8192 \edef\endDirection@@{\the\count@@}%
+ \fi
+ \else
+ \count@@=\endDirection@@ \relax \ifnum\count@@>\startDirection@@
+ \advance\count@@ by-8192 \edef\endDirection@@{\the\count@@}\fi
+ \fi
+ \ifnum\endDirection@@<\quadDirection@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}\fi
+ \fi
+ \next@ \relax
+ \count@=\quadDirection@ \relax\def\nextii@{^}\DN@{}%
+ \ifx\nextii@\arcOrient@@
+ \count@@=\startDirection@@ \advance\count@@ by4096 \relax
+ \ifnum \count@<\endDirection@@ \relax
+ \ifnum\endDirection@@>\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{1}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{1}}\fi
+ \fi
+ \else
+ \count@@=\startDirection@@ \advance\count@@ by-4096 \relax
+ \ifnum \count@>\endDirection@@ \relax
+ \ifnum\endDirection@@<\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{1}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{1}}\fi
+ \fi\fi
+ \next@ \relax
+ \ifx\next@\empty \else \relax
+ \count@=\startDirection@@ \relax\def\nextii@{^}\DN@{}%
+ \ifx\nextii@\arcOrient@@ \advance\count@ by4096 \relax
+ \count@@=\quadDirection@ \advance\count@@ by4096 \relax
+ \ifnum \count@<\endDirection@@
+ \ifnum\endDirection@@>\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{2}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{2}}\fi
+ \fi
+ \else \advance\count@ by-4096 \relax
+ \count@@=\quadDirection@ \advance\count@@ by-4096 \relax
+ \ifnum \count@>\endDirection@@ \relax
+ \ifnum\endDirection@@<\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{2}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{2}}\fi
+ \fi\fi
+ \next@ \relax
+ \fi
+ \ifx\next@\empty \else \relax
+ \count@=\quadDirection@ \def\nextii@{^}\DN@{}%
+ \ifx\nextii@\arcOrient@@ \advance\count@ by4096 \relax
+ \ifnum \count@<\endDirection@@
+ \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{3}}\fi
+ \else \advance\count@ by-4096 \relax
+ \ifnum \count@>\endDirection@@
+ \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{3}}\fi
+ \fi \next@ \relax
+ \fi
+ \leave@ }
+\message{elliptical arcs,}
+\xydef@\arcmagic@@{0.5517847}
+\xylet@\arcmagic=\arcmagic@@
+\xydef@\tildeARC@#1{%
+ \if q#1\DN@{\xy@{quadARC}\quadARC@ \arc@}%
+ \else\if c#1\DN@{\xyFN@\cubicARC@i}%
+ \else\if e#1\DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}%
+ \else\if i#1\DN@{\xy@{interpARC}\interpARC@ \arc@}%
+ \else\if p#1\DN@{\xy@{cuspidalARC}\cuspidalARC@ \arc@}%
+ \else\xywarning@{unknown arc type: #1 }%
+ \DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\cubicARC@i{%
+ \ifx\next\space@ \expandafter\DN@\space{\xyFN@\cubicARC@i}%
+ \else\ifx\next (\DN@(##1){\xy@{cubicARC(##1)}{\cubicARC@{##1}}\arc@}%
+ \else \DN@{\xy@{cubicARC(1)}{\cubicARC@{1}}\arc@}%
+ \fi\fi \next@ }
+\xydef@\ellipticARC@{\let\arcControls@=\cubicARCcontrols@@
+ \edef\arcparam@{\arcmagic@@}}
+\xydef@\cubicARC@#1{\let\arcControls@=\cubicARCcontrols@@
+ \dimen@=#1\p@ \edef\arcparam@{\expandafter\removePT@\the\dimen@}}
+\xydef@\quadARC@{\let\arcControls@=\cubicARCcontrols@@
+ \def\arcparam@{.66667}}
+\xydef@\cuspidalARC@{\let\arcControls@=\cubicARCcontrols@@
+ \def\arcparam@{2}}
+\xydef@\interpARC@{\let\arcControls@=\cubicARCcontrols@@
+ \def\arcparam@{1.33333}}
+\xydef@\ARCturn@{\xy@@\bgroup\afterCOORD{%
+ \xy@@{\edef\next@{\egroup \A@=\the\X@c \B@=\the\Y@c}\next@}\ARCturn@@}}
+\xydef@\ARCturn@@#1@{\DN@{#1}\DNii@{^}%
+ \ifx\next@\nextii@ \xy@{^}{\def\arcOrient@@{^}}%
+ \else\DNii@{_}\ifx\next@\nextii@ \xy@{_}{\def\arcOrient@@{_}}%
+ \else\xy@{}{\def\arcOrient@@{}}\fi\fi
+ \xy@@\ARCturn@@@ \processDirections@@ }
+\xydef@\ARCturn@@@{%
+ \bgroup\cfromid@{0@p}\X@p=\X@c \Y@p=\Y@c \X@c=\A@ \Y@c=\B@
+ \setupDirection@ \edef\next@{\egroup\count@=\the\Direction}\next@\relax
+ \edef\startDirection@@{\the\count@ }%
+ \bgroup\cfromid@{0@c}\X@p=\A@ \Y@p=\B@
+ \setupDirection@ \edef\next@{\egroup\count@=\the\Direction}\next@\relax
+ \edef\endDirection@@{\the\count@}%
+ \ifx\arcOrient@@\empty
+ \bgroup\cfromid@{0@p}\X@p=\X@c \Y@p=\Y@c \cfromid@{0@c}%
+ \setupDirection@ \edef\next@{\egroup\count@@=\the\Direction}\next@\relax
+ \count@=-\count@@ \advance\count@\startDirection@@ \relax \count@=-\count@
+ \ifnum\count@>4096 \def\arcOrient@@{_}%
+ \else\ifnum\count@<-4096 \def\arcOrient@@{^}%
+ \else\ifnum\count@>\z@ \def\arcOrient@@{^}%
+ \else\def\arcOrient@@{_}\fi\fi\fi
+ \fi }
+\xydef@\circleArc@{%
+ \xy@{circARC@}{\cfromid@{0@p}\pfromc@\cfromp@\startDirection@
+ \arcCenter@\idfromc@{0@0}%
+ \def\startDirection@{\bgroup
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@
+ \edef\next@{\egroup \Direction=\the\Direction}\next@
+ \relax\imposeDirection@}}%
+ \ifx\endDirection@@\empty
+ \ifx\arcRadius@\empty \ifx\ellipseRatio@\empty\else
+ \DN@{\arcScale@@}\ifx\arcScale@\next@\else
+ \xy@@{\bgroup\cfromid@{0@0}\pfromc@\cfromid@{0@c}\setupDirection@
+ \edef\next@{\egroup \Direction=\the\Direction}\next@
+ \edef\endDirection@@{\the\Direction}}\fi\fi\fi\fi
+ \ellipseArc@ \xy@@{\leave@ \doCircleArcs@}\endarc@ }
+\xydef@\arcbisector{%
+ \cfromid@{0@p}\pfromc@\cfromid@{0@c}\setupDirection@
+ \advance\X@c\X@p\divide\X@c\tw@
+ \advance\Y@c\Y@p\divide\Y@c\tw@ \czeroEdge@ \pfromc@
+ \enter@\cplusthec@ \enter@\relax\begingroup
+ \aboveDirection@\xydashl@ \vfromslide@i{}@\leave@ }
+\xydef@\arcCenter@{%
+ \cfromid@{0@p}\pfromc@\cfromid@{0@m}\setupDirection@
+ \cfromp@\enter@\cplusthec@ \enter@\relax\begingroup
+ \aboveDirection@\xydashl@ \vfromslide@i{}@\leave@\no@@
+ \arcCenter@i }
+\xydef@\arcCenter@i{%
+ \enter@{\pfromthep@}\setupDirection@ \Creset@@
+ \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@
+ \enter@{\pfromthep@\basefromthebase@}\bgroup
+ \arcbisector \edef\next@{\egroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p }%
+ \next@ \Cintercept@@ \leave@\leave@ }
+\xydef@\getarcExtents@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcExtents@}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}%
+ \else\DN@{\xy@{arcEXTENTs}{\save@
+ \def\startDirection@{\Direction=\startDirection@@ \imposeDirection@}}%
+ \xyFN@\getarcExtents@ii}\fi\fi \next@ }
+\xydef@\getarcExtents@ii{%
+ \ifx\next!\xy@{![[}{}\DN@![[##1]]{\getxyDirection@{##1}\getarcExtents@iv}%
+ \else\DN@{\getarcExtents@iv}\fi \next@ }
+\xydef@\getarcExtents@iv{\afterDIRECTIONorEMPTY
+ {\xy@{startDIR}{\edef\startDirection@@{\the\Direction}\leave@}%
+ \xyFN@\getarcOrientation@}%
+ {\xy@{startDIR}{\edef\startDirection@@{\the\Direction}\leave@}%
+ \xyFN@\getarcOrientation@}}
+\xydef@\getarcOrientation@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcOrientation@}%
+ \else\ifx\next @\xy@{@}{}\DN@{\getEndDirection@x}%
+ \else\ifx\next,\xy@{,}{}\DN@,{\xyFN@\getarcOrientation@i}%
+ \else\DN@{\getarcOrientation@i}\fi\fi\fi \next@ }%
+\xydef@\getarcOrientation@i{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcOrientation@i}%
+ \else\ifx\next @\xy@{@}{}\DN@{\getEndDirection@x}%
+ \else\ifx\next^{}\DN@##1{\xy@{^}{\def\arcOrient@@{^}}%
+ \def\arcOrient@@{^}\xyFN@\getEndDirection@}%
+ \else\ifx\next_\DN@##1{\xy@{_}{\def\arcOrient@@{_}}%
+ \def\arcOrient@@{_}\xyFN@\getEndDirection@}%
+ \else\DN@{\xyFN@\getEndDirection@}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\getEndDirection@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getEndDirection@}%
+ \else\ifx\next,\DN@,{\xy@{,}{}\xyFN@\getEndDirection@}%
+ \else\addEQ@\ifx\next\addEQ@\DN@{\xy@{=}{\save@\startDirection@}%
+ \xyFN@\getEqDirection@}%
+ \else \ifx\next!\DN@![[##1]]{\xy@{![[}{\save@}\getxyDirection@{##1}%
+ \xy@{endDIR}{\edef\endDirection@@{\the\Direction}}%
+ \xyFN@\getEndDirection@i}%
+ \else \DN@{\xy@{origDIR}{\save@\origDirection@}\getEndDirection@i}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\getEqDirection@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getEqDirection@}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{%
+ \xy@{sameDIR}{\edef\endDirection@@{\startDirection@@}\leave@}%
+ \parEllipse@{1}{}}%
+ \else\ifx\next (\DN@({\xyFN@\checkEqOpen@}%
+ \else \DN@{\getEndDirection@i}\fi\fi\fi \next@ }
+\xydef@\checkEqOpen@{%
+ \ifx\next *\DN@{\getEndDirection@i (}%
+ \else \DN@##1)##2@{\xy@{()}\leave@ \parEllipse@{##1}{##2}}%
+ \fi \next@ }
+\xydef@\getEndDirection@i{\afterDIRECTIONorEMPTY
+ {\xy@{endDIR}{\edef\endDirection@@{\the\Direction}\leave@}%
+ \getEndDirection@x }%
+ {\xy@{endDIR}\leave@ \getEndDirection@x }}
+\xydef@\getEndDirection@x#1@{%
+ \DN@{#1}\ifx\next@\empty\relax \else\xywarning@{\omittingTokens@}\fi
+ \processDirections@ }
+\xydef@\omittingTokens@{omitting unused tokens: \codeof\next@ }
+\xydef@\processDirections@@{%
+ \ifx\endDirection@@\empty \skewCircle@
+ \else \skewEllipse@ \expandafter \afterARCextents@@ \fi }
+\xydef@\processArcDirections@{%
+ \xy@{ARCdirs}{\ifx\endDirection@@\empty
+ \origDirection@ \edef\endDirection@@{\the\Direction}\fi}%
+ \ellipseArc@
+ \xy@{procARCdirs}\processArcDirections@@
+ \let\arcScale@\ellsave@ \let\arcRadius@\ellsave@ \def\ellipseRatio@{}%
+ \xy@{circSECTORS}{\doCircleSectors@}\endarc@ }
+\xydef@\ellsave@{\xy@@{\save@}}
+\xydef@\processArcDirections@@{\save@
+ \bgroup \cfromid@{0@0}\pfromc@ \Direction=\startDirection@@
+ \DN@{_}\ifx\next@\arcOrient@@
+ \advance\Direction \ifnum\Direction<\z@-\fi 4096 \relax\fi
+ \imposeDirection@
+ \d@X=\cosDirection\Y@ybase \advance\d@X-\sinDirection\X@ybase
+ \d@Y=-\cosDirection\Y@xbase \advance\d@Y\sinDirection\X@xbase
+ \setupDirection@i
+ \d@X=-\cosDirection\X@ybase \advance\d@X\sinDirection\X@xbase
+ \d@Y=-\cosDirection\Y@ybase \advance\d@Y\sinDirection\Y@xbase
+ \enter@\cplusthec@\X@c=\d@X \Y@c=\d@Y \leave@ \czeroEdge@
+ \setupDirection@i
+ \czeroEdge@
+ \edef\next@{\egroup \cfromthec@ \count@=\the\Direction}\next@
+ \edef\startDirection@@{\the\count@}\idfromc@{0@x}%
+ \bgroup \cfromid@{0@0}\pfromc@ \Direction=\endDirection@@
+ \DN@{_}\ifx\next@\arcOrient@@
+ \advance\Direction \ifnum\Direction<\z@-\fi 4096 \relax\fi
+ \imposeDirection@
+ \d@X=\cosDirection\Y@ybase \advance\d@X-\sinDirection\X@ybase
+ \d@Y=-\cosDirection\Y@xbase \advance\d@Y\sinDirection\X@xbase
+ \setupDirection@i
+ \d@X=-\cosDirection\X@ybase \advance\d@X\sinDirection\X@xbase
+ \d@Y=-\cosDirection\Y@ybase \advance\d@Y\sinDirection\Y@xbase
+ \enter@\cplusthec@\X@c=\d@X \Y@c=\d@Y \leave@
+ \czeroEdge@
+ \setupDirection@i
+ \edef\next@{\egroup \cfromthec@ \count@=\the\Direction}\next@
+ \edef\endDirection@@{\the\count@}\idfromc@{0@c}%
+ \count@=\startDirection@@ \relax \count@@=\endDirection@@ \relax
+ \DN@{^}\ifx\arcOrient@@\next@
+ \ifnum\count@@>\count@ \else\advance\count@@ 8192 \relax\fi
+ \else
+ \ifnum\count@@<\count@ \else\advance\count@@-8192 \relax\fi\fi
+ \edef\startDirection@@{\the\count@}%
+ \edef\endDirection@@{\the\count@@}}%
+\xydef@\doCircleSectors@{%
+ \let\doCircleArc@=\doMergeEndArc@@ \leave@ \leave@
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@
+ \count@=\Direction \DN@{^}\ifx\arcOrient@@\next@
+ \ifnum\count@>\startDirection@@ \advance\count@-8192 \fi\relax
+ \count@@=\count@ \advance\count@@ 8192 \relax
+ \ifnum\count@@<\endDirection@@ \advance\count@@ 8192 \fi\relax
+ \else
+ \ifnum\count@<\startDirection@@ \advance\count@ 8192 \fi\relax
+ \count@@=\count@ \advance\count@@-8192 \relax
+ \ifnum\count@@>\endDirection@@ \advance\count@@-8192 \fi\relax
+ \fi \relax
+ \edef\preDirection@@{\the\count@}\edef\postDirection@@{\the\count@@}%
+ \cfromid@{1@c}\setupDirection@ \count@=\Direction
+ \def\nextii@{^}\ifx\nextii@\arcOrient@@
+ \DN@{\forwardSectors@\doEllipseSectors@}%
+ \ifnum\count@<\preDirection@@ \advance\count@ 8192 \relax
+ \else \count@@=\count@\advance\count@-8192 \relax
+ \ifnum\count@@<\preDirection@@ \else\count@=\count@@ \fi\fi
+ \else
+ \DN@{\backwardSectors@\doEllipseSectors@}%
+ \ifnum\count@>\preDirection@@ \advance\count@-8192 \relax
+ \else \count@@=\count@\advance\count@ 8192 \relax
+ \ifnum\count@@>\preDirection@@ \else\count@=\count@@ \fi\fi
+ \fi \edef\quadDirection@{\the\count@}%
+ \next@ }
+\xydef@\forwardSectors@{%
+ \ifnum \startDirection@@<\quadDirection@ \def\startSector@@{0}%
+ \else\count@=\preDirection@@ \advance\count@ 4096 \relax
+ \ifnum \startDirection@@<\count@ \def\startSector@@{1}%
+ \else\count@=\quadDirection@ \advance\count@ 4096 \relax
+ \ifnum\startDirection@@<\count@ \def\startSector@@{2}%
+ \else \def\startSector@@{3}\fi\fi\fi
+ \ifnum\quadDirection@ <\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@ 4096 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@ 4096 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@ 8192 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@ 8192 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@ 12288 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@ 12288 \relax
+ \ifnum\count@<\endDirection@@ \def\endSector@@{7}%
+ \else \def\endSector@@{6}\fi
+ \else \def\endSector@@{5}\fi
+ \else \def\endSector@@{4}\fi
+ \else \def\endSector@@{3}\fi
+ \else \def\endSector@@{2}\fi
+ \else \def\endSector@@{1}\fi
+ \else \def\endSector@@{0}\fi }
+\xydef@\backwardSectors@{%
+ \ifnum \startDirection@@>\quadDirection@ \def\startSector@@{0}%
+ \else\count@=\preDirection@@ \advance\count@-4096 \relax
+ \ifnum \startDirection@@>\count@ \def\startSector@@{1}%
+ \else\count@=\quadDirection@ \advance\count@-4096 \relax
+ \ifnum\startDirection@@>\count@ \def\startSector@@{2}%
+ \else \def\startSector@@{3}\fi\fi\fi
+ \ifnum\quadDirection@>\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@-4096 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@-4096 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@-8192 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@-8192 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@-12288 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@-12288 \relax
+ \ifnum\count@>\endDirection@@ \def\endSector@@{7}%
+ \else \def\endSector@@{6}\fi
+ \else \def\endSector@@{5}\fi
+ \else \def\endSector@@{4}\fi
+ \else \def\endSector@@{3}\fi
+ \else \def\endSector@@{2}\fi
+ \else \def\endSector@@{1}\fi
+ \else \def\endSector@@{0}\fi }
+\xydef@\doEllipseSectors@{%
+ \ifx\startSector@@\endSector@@
+ \DN@{\expandafter\doMergeBothArc@\expandafter{\arcSTYLE}{\endSector@@}}%
+ \else
+ \expandafter\doMergeStartArc@\expandafter{\arcSTYLE}{\startSector@@}%
+ \edef\countArcs@@{\startSector@@}%
+ \loop@ \count@=\countArcs@@ \relax \advance\count@\@ne
+ \ifnum \count@ < \endSector@@ \edef\countArcs@@{\the\count@}%
+ \bgroup\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{\countArcs@@}%
+ \egroup
+ \repeat@
+ \DN@{\expandafter\doMergeEndArc@\expandafter{\arcSTYLE}{\endSector@@}}%
+ \fi \next@ }
+\xydef@\checkstartDirection@{%
+ \bgroup\no@@ \edef\next@{\egroup\count@@=\the\Direction}\next@\relax
+ \ifnum\count@@=\startDirection@@ \relax \DN@{\straightArc@}%
+ \else \advance\count@@-\startDirection@@ \relax
+ \ifnum\count@@=\ifnum\count@@<\z@-\fi 4096 \relax \DN@{\straightArc@}%
+ \else \DN@{\processDirections@@}\fi\fi \next@ }
+\xydef@\straightArc@{\xywarning@{straight arc encountered}%
+ \xy@@{\let\bstartPLACE@=\relax
+ \expandafter\doStraightArc@@\expandafter{\arcSTYLE}}\endarc@ }%
+\xydef@\skewEllipse@{\xy@@{\doskewEllipse@}%
+ \def\afterARCextents@@{\xy@{aftARCext}{\let\doCircleArc@=\doMergeEndArc@@}%
+ \ellipseArc@ \xy@{doCircARCs}{\doCircleArcs@}\endarc@ }%
+ \let\arcScale@=\relax \def\arcRadius@{}\def\ellipseRatio@{}}
+\xydef@\skewCircle@{\xy@@{\setupDirection@}%
+ \ifnum\Direction=\startDirection@@\relax\DN@{\halfEllipse@{1}}%
+ \else
+ \xy@@{\def\startDirection@{\Direction=\startDirection@@\imposeDirection@}%
+ \cfromid@{0@p}\enter@\cplusthec@ \startDirection@
+ \enter@\relax\begingroup\vfromslide@i{}@\czeroEdge@\leave@\idfromc@{0@m}%
+ \let\endDirection@=\relax \let\doCircleArc@=\doMergeEndArc@@}%
+ \DN@{\circleArc@}%
+ \fi \next@ }
+\xydef@\doskewEllipse@{%
+ \def\startDirection@{\Direction=\startDirection@@ \relax
+ \imposeDirection@}\startDirection@ \cfromid@{0@p}%
+ \enter@\cplusthec@ \enter@\relax\begingroup\vfromslide@i{}@\leave@
+ \idfromc@{0@x}%
+ \ifx\endDirection@@\empty \parallelDirection@
+ \else
+ \def\endDirection@{\Direction=\endDirection@@ \relax
+ \imposeDirection@ }\endDirection@ \skewEllB@
+ \bgroup\setupDirection@\edef\next@{\egroup\count@@=\the\Direction}\next@
+ \edef\endDirection@@{\the\count@@}%
+ \fi
+ \cfromid@{0@p}\bgroup \setupDirection@
+ \edef\next@{\egroup \count@@=\the\Direction}\next@
+ \edef\startDirection@@{\the\count@@}}
+\xydef@\halfEllipse@#1{\xy@@{%
+ \cfromid@{0@p}\pfromc@\cfromid@{0@c}\no@@
+ \edef\endDirection@@{\the\Direction}%
+ \advance\X@c\X@p \divide\X@c\tw@ \advance\Y@c\Y@p \divide\Y@c\tw@
+ \idfromc@{0@0}\pfromc@ \cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c
+ \dimen@=\X@origin \advance\dimen@-\X@c \dimen@ii=\cosDirection\dimen@
+ \dimen@=\Y@origin \advance\dimen@-\Y@c \advance\dimen@ii \sinDirection\dimen@
+ \X@c=\X@origin \Y@c=\Y@origin \enter@\cplusthec@
+ \dimen@=#1\p@ \ifdim\dimen@<\z@ \DN@{^}\dimen@ii=-#1\dimen@ii
+ \ifx\next@\arcOrient@@\def\arcOrient@@{_}\else\def\arcOrient@@{^}\fi
+ \else \dimen@ii=#1\dimen@ii\fi
+ \startDirection@ \enter@\relax\begingroup\expandafter
+ \vfromslide@i\expandafter{\the\dimen@ii}@\leave@
+ \idfromc@{1@c}\setbase@@ \X@c \Y@c \adjustBaseOrient@
+ \count@@=\endDirection@@ \relax
+ \DN@{^}\advance\count@@\ifx\arcOrient@@\next@\else-\fi 4096 \relax
+ \edef\startDirection@@{\the\count@@}%
+ \def\startDirection@{\Direction=\startDirection@@ \imposeDirection@ }%
+ \let\doCircleArc@=\doMergeEndArc@@ }%
+ \let\arcScale@=\relax \ellipseArc@
+ \xy@@{\doCircleArcs@}\endarc@ }
+\xydef@\parallelDirection@{\show\parallelDirection@}%
+\xydef@\parEllipse@#1#2{\DN@{#2}\ifx\next@\empty
+ \else\xywarning@{\omittingTokens@ }\fi \halfEllipse@{#1}}
+\xydef@\skewEllB@{\cfromid@{0@c}\pfromc@\enter@\cplusthec@
+ \enter@\relax\begingroup\vfromslide@i{}@\leave@
+ \enter@{\pfromthep@\basefromthebase@}\no@@
+ \bgroup \cfromid@{0@p}\pfromc@\cfromid@{0@x}\edef\next@{\egroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p }\next@
+ \Cintercept@@\leave@ \idfromc@{0@x}\cfromid@{0@p}\enter@\cplusthec@
+ \cfromid@{0@c}\leave@ \enter@\cplusthec@ \cfromid@{0@x}%
+ \X@c=-\X@c \Y@c=-\Y@c \leave@ \idfromc@{0@0}\pfromc@\cfromid@{0@p}%
+ \setbase@\X@p\Y@p\X@c\Y@c \cfromid@{0@c}\setbase@@\X@c\Y@c
+ \adjustBaseOrient@ }
+\xydef@\adjustBaseOrient@{%
+ \edef\tmp@{\expandafter\removePT@\the\X@xbase}\dimen@=\Y@ybase
+ \divide\dimen@ 64 \relax \dimen@ii=\tmp@\dimen@
+ \edef\tmp@{\expandafter\removePT@\the\X@ybase}\dimen@=\Y@xbase
+ \divide\dimen@ 64 \relax \dimen@=\tmp@\dimen@
+ \ifdim\dimen@>\dimen@ii \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyarrow.tex b/macros/generic/diagrams/xypic/texinputs/xyarrow.tex
new file mode 100644
index 0000000000..56f8349940
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyarrow.tex
@@ -0,0 +1,538 @@
+%% xyarrow.tex from $Id: xyarrow.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Arrows and Paths'' feature.
+%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{arrow}{Arrow and Path feature}{\stripRCS$Revision: 3.9 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\message{path,}
+\xydef@\PATH{\afterPATH{}}
+\xylet@\afterPATH@=\empty
+\xydef@\afterPATH#1{\save
+ \DN@##1{\def\afterPATH@{\restore \def\afterPATH@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterPATH@}%
+ \let\PATHfail@@=\empty
+ \let\PATHbefore@@=\empty
+ \let\PATHafter@@=\empty
+ \let\PATHlabelsevery@@=\empty
+ \let\PATHlabelsnext@@=\empty
+ \let\PATHlabelslast@@=\empty
+ \xy@{\afterPATH{#1}}{\def\PATHslide@@{\z@}}%
+ \def\PATHcontinue@@{\xyFN@\PATH@}%
+ \xyFN@\PATH@}
+\xynew@{if}\ifPATHsingle@
+\xydef@\PATH@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATH@}%
+ \else\ifPATHsingle@ \let\next@=\PATH@single
+ \else \let\next@=\PATH@normal \fi\fi \next@}
+\xydef@\PATH@normal{%
+ \ifx ~\next \DN@ ~{\xyFN@\PATHsetting@}%
+ \else \addRQ@\ifx \next \addRQ@\DN@{\xy@'{}\xyFN@\PATHstraight@}%
+ \else \addLQ@\ifx \next \addLQ@\DN@{\xy@`{}\xyFN@\PATHturn@}%
+ \else\ifx \PATHfail@@\PATH@x \DN@{\xyFN@\PATHfinal@}%
+ \else
+ \DNii@{\let\PATHfail@@=\PATH@x \xyFN@\PATH@}%
+ \DN@{\expandafter\nextii@\PATHfail@@}%
+ \fi\fi\fi\fi \next@}
+\xylet@\PATHfail@@=\empty
+\xylet@\PATHbefore@@=\empty
+\xylet@\PATHafter@@=\empty
+\xylet@\PATHlabelsevery@@=\empty
+\xylet@\PATHlabelsnext@@=\empty
+\xylet@\PATHlabelslast@@=\empty
+\xydef@\PATHsetting@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHsetting@}%
+ \else\ifx \bgroup\next
+ \DN@##1{\xy@{~{##1}}{}\def\PATHfail@@{##1}\xyFN@\PATH@}%
+ \else \addEQ@\ifx \next
+ \addEQ@\DN@##1{\xy@{~={##1}}{}\def\PATHbefore@@{##1}\xyFN@\PATH@}%
+ \else \addLT@\ifx \next
+ \addLT@\DN@##1{\xy@{~<{##1}}{}\def\PATHlabelsnext@@{##1}\xyFN@\PATH@}%
+ \else \addGT@\ifx \next
+ \addGT@\DN@##1{\xy@{~>{##1}}{}\def\PATHlabelslast@@{##1}\xyFN@\PATH@}%
+ \else \addPLUS@\ifx \next
+ \addPLUS@\DN@##1{\xy@{~+{##1}}{}\def\PATHlabelsevery@@{##1}\xyFN@\PATH@}%
+ \else \ifx /\next
+ \DN@/##1{\xy@{~/{##1}}{}\def\PATHafter@@{##1}\xyFN@\PATH@}%
+ \else \addDASH@\ifx \next
+ \xywarning@{Obsolete `-' PATH <action> translated to `='.}%
+ \addDASH@\DN@##1{\xy@{~-{##1}}{}\def\PATHbefore@@{##1}\xyFN@\PATH@}%
+ \else
+ \xyerror@{Unknown \string~ setting: \meaning\next}%
+ {See the Xy-pic arrow feature documentation for help.}%
+ \fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\PATHinit@@=\empty
+\xylet@\PATHextra@@=\empty
+\xylet@\PATHpost@@=\empty
+\xylet@\PATHcontinue@@=\empty
+\xydef@\PATHstraight@{%
+ \def\PATHinit@@{\PATHinitstraight@}%
+ \let\PATHextra@@=\empty
+ \let\PATHpost@@=\empty
+ \let\PATHlabelsextra@@=\relax
+ \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}
+\xydef@\PATHfinal@{%
+ \def\PATHinit@@{\PATHinitstraight@}%
+ \def\PATHextra@@{\let\PATHcontinue@@=\afterPATH@}%
+ \let\PATHpost@@=\empty
+ \let\PATHlabelsextra@@=\PATHlabelsextralast@
+ \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}
+\xydef@\PATHlabelsextralast@{\let\PATHlabelsextra@@=\relax
+ \expandafter\xyFN@\expandafter\PATHlabels@\PATHlabelslast@@}
+\xydef@\PATHinitstraight@{\xy@@{\setupDirection@ \dimen@=\PATHslide@@
+ \dimen@ii=-\sinDirection\dimen@
+ \ifPATHomitslide@@\else\advance\X@p\dimen@ii\fi \advance\X@c\dimen@ii
+ \dimen@ii= \cosDirection\dimen@
+ \ifPATHomitslide@@\else\advance\Y@p\dimen@ii\fi \advance\Y@c\dimen@ii
+ \PATHomitslide@@false \resetupDirection@}}
+\xydef@\PATHslide@@{\z@}
+\xynew@{if}\ifPATHomitslide@@
+\xydef@\PATHsegment@{%
+ \addLT@\ifx\next
+ \addGT@{\addLT@\DN@##1}{%
+ \xy@{<##1>}{\dimen@=##1\relax \edef\PATHslide@@{\the\dimen@}}%
+ \xyFN@\PATHsegment@@}%
+ \else \let\next@=\PATHsegment@@
+ \fi \next@}
+\xydef@\PATHsegment@@{\PATHinit@@ \addEQ@\PATHaction@\PATHbefore@@ \PATHextra@@
+ \expandafter\toks@\expandafter{\PATHlabelsnext@@}\let\PATHlabelsnext@@=\empty
+ \expandafter\addtotoks@\expandafter{\PATHlabelsevery@@}%
+ \expandafter\def\expandafter\PATHlabels@@\expandafter{\the\toks@}%
+ \toks@={}\expandafter\xyFN@\expandafter\PATHlabels@\PATHlabels@@}
+\xylet@\PATHlabelit@@=\empty
+\xydef@\PATHlabels@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHlabels@}%
+ \else \ifx ^\next
+ \DN@##1{\xy@^{}\let\PATHlabelit@@=\PATHlabelabove@@
+ \DNii@{}\xyFN@\PATHanchor@}%
+ \else \ifx _\next
+ \DN@##1{\xy@_{}\let\PATHlabelit@@=\PATHlabelbelow@@
+ \DNii@{}\xyFN@\PATHanchor@}%
+ \else \ifx |\next
+ \DN@##1{\xy@|{}\let\PATHlabelit@@=\PATHlabelbreak@
+ \DNii@{}\xyFN@\PATHanchor@}%
+ \else \let\next@=\PATHfinishsegments@ \fi\fi\fi\fi \next@}
+\xydef@\PATHanchor@{\begingroup \toks@={}\PATHanchor@i}
+\xydef@\PATHanchor@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHanchor@i}%
+ \else\addDASH@\ifx \next
+ \addDASH@\DN@{\expandafter\addtotoks@\expandafter{\PATHanchor@toks}%
+ \xyFN@\PATHanchor@i}%
+ \else
+ \DNii@##1{\endgroup\afterPLACE{\xyFN@\PATHit@}##1}%
+ \DN@{\expandafter\nextii@\expandafter{\the\toks@}}%
+ \fi\fi \next@}
+{\xyuncatcodes \gdef\next{<>(.5)}}
+\xylet@\PATHanchor@toks=\next
+\xylet@\PATHitshapes@@=\empty
+\xydef@\PATHit@{\let\PATHitshape@@=\empty \xyFN@\PATHit@i}
+\xydef@\PATHit@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHit@i}%
+ \else \ifx *\next \DN@*##1##{\PATHlabelit@@{!C##1}}%
+ \else \addAT@\ifx\next \addAT@\DN@##1##{\PATHlabelit@@{\dir##1}}%
+ \else \ifx [\next \DN@[##1]{%
+ \expandafter\def\expandafter\PATHitshape@@\expandafter{\PATHitshape@@[##1]}%
+ \xyFN@\PATHit@i}%
+ \else \DN@{\PATHlabelit@@{}}%
+ \fi\fi\fi\fi \next@}
+\xydef@\PATHfinishsegments@{%
+ \ifx\PATHlabelsextra@@\relax \expandafter\PATHfinishsegments@i
+ \else
+ \expandafter\PATHlabelsextra@@ \fi}
+\xydef@\PATHfinishsegments@i{%
+ \xy@@{\Clast@@}\the\toks@ \toks@={}%
+ \xy@@\setupDirection@
+ \PATHpost@@ \PATHaction@/\PATHafter@@
+ \PATHcontinue@@}
+\xydef@\PATHaction@default#1#2{\xy@{PATHaction#1{#2}}{}\POS#2\relax}
+\xylet@\PATHaction=\PATHaction@default
+\xydef@\PATHaction@#1#2{\expandafter\PATHaction\expandafter#1\expandafter{#2}}
+\xylet@\PATHafterPOS@default=\afterPOS
+\xylet@\PATHafterPOS=\PATHafterPOS@default
+\xydef@\PATHlastout@@{3}
+\xydef@\PATHturn@{\afterCIRorDIAG\PATHturn@cir\PATHturn@diag}
+\xydef@\PATHturn@cir{\toks@={\xy@@{%
+ \count@=\CIRin@@ \ifnum\count@<4\else\advance\count@-4\fi
+ \count@@=\CIRout@@ \ifnum\count@@<4\else\advance\count@@-4\fi
+ \ifnum\count@=\count@@ \xyerror@{<turn> cannot be half or full}{%
+You asked for a <turn>ed segment with parallel in- and out-direction.^^J%
+This is not allowed because it is not possible to position it uniquely.}\fi}}%
+ \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}%
+ \expandafter\PATHturn@i\next@}
+\xydef@\PATHturn@diag{\toks@={\xy@@{%
+ \setupDirection@ \count@=\CIRin@@ \dimen@=\xydashl@ \ABfromdiag@
+ \ifdim \sinDirection\A@>\cosDirection\B@ \def\CIRorient@@{\CIRacw@}%
+ \advance\count@\ifnum\count@<6 \tw@ \else -6\fi
+ \else \def\CIRorient@@{\CIRcw@}%
+ \advance\count@\ifnum\count@>\@ne -\tw@ \else 6\fi
+ \fi
+ \edef\CIRout@@{\the\count@}}}%
+ \edef\next@{{\CIRin@@}{}{}}%
+ \expandafter\PATHturn@i\next@}
+\xylet@\PATHpostpos@@=\empty
+\xydef@\PATHturn@i#1#2#3{%
+ \DN@##1{\def\PATHinit@@{\xy@@{%
+ \def\CIRin@@{#1}\def\CIRorient@@{#2}\def\CIRout@@{#3}%
+ \ifnum\CIRin@@=8 \let\CIRin@@=\PATHlastout@@ \fi
+ \R@=\turnradius@
+ ##1\relax}%
+ \xy@@{\count@=\CIRin@@
+ \ifPATHomitslide@@ \dimen@=-\PATHslide@@
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ \fi
+ \enter@{\pfromthep@ \basefromthebase@}}%
+ \xy@@{\dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@
+ \X@origin=\X@p \Y@origin=\Y@p}%
+ \xy@@{\dimen@=\xydashl@ \ABfromdiag@ \R@c=\A@ \U@c=\B@
+ \count@=\CIRout@@
+ \dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@
+ \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@
+ \dimen@=\xydashl@ \X@p=\X@c \Y@p=\Y@c
+ \ABfromdiag@ \advance\X@p-\A@ \advance\Y@p-\B@
+ \intersect@
+ \count@=\CIRin@@ \dimen@=\p@ \ABfromdiag@}%
+ \xy@@{\edef\next@{\expandafter\removePT@\the\A@}%
+ \edef\nextii@{\expandafter\removePT@\the\B@}%
+ \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin
+ \ifdim \next@\A@<-\nextii@\B@
+ \dontleave@ \cfromp@
+ \count@=\CIRin@@ \advance\count@\ifnum\count@<4 +4\else -4\fi
+ \dimen@=\xydashl@ \Directionfromdiag@
+ \the\Edge@c\z@
+ \count@=\CIRin@@ \dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@
+ \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@
+ \dimen@=5sp \ABfromdiag@ \advance\X@c\A@ \advance\Y@c\B@
+ \fi
+ \dimen@ii=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\PATHslide@@
+ \advance\R@\dimen@ii
+ \drop@\literal@{\hbox\bgroup\cir@i}}%
+ \xy@@{\X@p=\X@c \Y@p=\Y@c
+ \count@=\CIRout@@
+ \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@
+ \edef\PATHpostpos@@{\X@c=\the\X@p \Y@c=\the\Y@p \noexpand\czeroEdge@
+ \noexpand\PATHomitslide@@true}}%
+ \xy@@{\count@=\CIRin@@
+ \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c
+ \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@ \czeroEdge@}%
+ \xy@@{\leave@
+ \count@=\CIRin@@ \dimen@=\PATHslide@@
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@
+ \edef\PATHlastout@@{\CIRout@@}%
+ \count@=\CIRout@@ \dimen@=\xydashl@ \Directionfromdiag@}}}%
+ \expandafter\next@\expandafter{\the\toks@}\toks@={}%
+ \let\PATHextra@@=\empty
+ \def\PATHpost@@{\xy@@\PATHpostpos@@}%
+ \let\PATHlabelsextra@@=\relax
+ \xyFN@\PATHturn@ii}
+\xydef@\PATHturn@ii{%
+ \ifx /\next
+ \DN@ /{\afterassignment\nextii@\dimen@=}%
+ \DNii@{%
+ \edef\next@{\noexpand\xy@@{\edef\noexpand\turnradius@{\the\dimen@}}}\next@
+ \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}%
+ \else \DN@{\xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}\fi
+ \next@}
+\xydef@\ABfromdiag@{\ifcase\count@\relax
+ \A@=-.7071\dimen@ \B@=-.7071\dimen@ \or \A@=\z@ \B@=-\dimen@
+ \or \A@=+.7071\dimen@ \B@=-.7071\dimen@ \or \A@=\dimen@ \B@=\z@
+ \or \A@=+.7071\dimen@ \B@=+.7071\dimen@ \or \A@=\z@ \B@=+\dimen@
+ \or \A@=-.7071\dimen@ \B@=+.7071\dimen@ \or \A@=-\dimen@ \B@=\z@
+ \else\xybug@{impossible <diag>?}\fi}
+\xydef@\turnradius@{10pt}
+\xydef@\turnradius{\afterADDOP{\Addop@@\turnradius@}}
+\xydef@\PATHlabelabove@#1#2{\droplabel@\belowDirection@{#1}{#2}%
+ \let\afteraliases@@=\empty \xyFN@\PATHlabelalias@}
+\xydef@\PATHlabelbelow@#1#2{\droplabel@\aboveDirection@{#1}{#2}%
+ \let\afteraliases@@=\empty \xyFN@\PATHlabelalias@}
+\xylet@\PATHlabelabove@@=\PATHlabelabove@
+\xylet@\PATHlabelbelow@@=\PATHlabelbelow@
+\xydef@\droplabel@#1#2#3{\xy@@{\enter@\DirectionfromtheDirection@}%
+ \DN@{#2}\ifx\next@\empty
+ \expandafter\xy@@ix@\expandafter{\PATHitshape@@\labelbox{#3}}%
+ \else \expandafter\xy@@ix@\expandafter{\PATHitshape@@#2{#3}}\fi
+ \xy@@{\setbox\z@=\expandafter\object\the\toks9
+ \advance\L@c\labelmargin@ \advance\R@c\labelmargin@
+ \advance\D@c\labelmargin@ \advance\U@c\labelmargin@
+ \setboxz@h{\kern\labelmargin@\boxz@\kern\labelmargin@}%
+ \A@=\X@c \B@=\Y@c #1\xydashl@ \the\Edge@c\thr@@
+ \advance\A@-\X@c \advance\B@-\Y@c \advance\X@c 2\A@ \advance\Y@c 2\B@
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wd\z@=\dimen@
+ \setbox\lastobjectbox@=\hbox{\X@c=\L@c \Y@c=\z@ \Drop@@}%
+ \drop@{\box\lastobjectbox@}{}%
+ \leave@}}
+\xydef@\PATHlabelbreak@#1#2{%
+ \DN@{#1}\ifx\next@\empty \drop\labelbox{#2}\else \drop#1{#2}\fi
+ \def\afteraliases@@{\xy@@\Cbreak@@}\xyFN@\PATHlabelalias@}
+\xylet@\labelmargin@=\objectmargin@
+\xydef@\labelmargin{\afterADDOP{\Addop@@\labelmargin@}}
+\xydef@\hole{\hbox{\dimen@=\objectmargin@ \kern2\dimen@
+ \vrule height\dimen@ depth\dimen@ width\z@}}
+\xylet@\labelstyle=\scriptstyle
+\xydef@\labelbox#1{\hbox{$\m@th\labelstyle{#1}$}}
+\xydef@\PATHlabelalias@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHlabelalias@}%
+ \else \addEQ@\ifx \next
+ \addEQ@\DN@"##1"{\savealias@{##1}\xyFN@\PATHlabelalias@}%
+ \else \DN@{\afteraliases@@\PATHlabels@}\fi\fi \next@}
+\xylet@\afteraliases@@=\empty
+\xydef@\savealias@#1{\xy@@{\enter@\cfromthec@
+ \advance\X@c-\L@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c \advance\X@c\L@c
+ \advance\Y@c-\D@c \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\Y@c\D@c
+ \idfromc@{#1}\leave@}}
+\message{\string\ar,}
+\xylet@\arvariant@@=\empty
+\xylet@\arstemprefix@@=\empty
+\xylet@\artail@@=\empty
+\xylet@\arstem@@=\empty
+\xylet@\arhead@@=\empty
+\xylet@\armodifiers@@=\empty
+\xylet@\arlabels@@=\empty
+\xylet@\arafterPOS@@=\empty
+\xylet@\arinit@@=\empty
+\xylet@\arexit@@=\empty
+\xylet@\arcomponent@@=\relax
+\xylet@\arcomponenttype@@=\relax
+\xylet@\afterar@@=\relax
+\xydef@\ar{\relax\arSAFE}
+\xydef@\arSAFE{%
+ \let\arvariant@@=\empty
+ \def\arstemprefix@@{\dir}%
+ \edef\artail@@{\arvariant@@{}}%
+ \edef\arstem@@{\arvariant@@{-}}%
+ \edef\arhead@@{\arvariant@@{>}}%
+ \def\armodifiers@@{}%
+ \def\arafterPOS@@{}%
+ \def\arlabels@@{}%
+ \def\arinit@@{}%
+ \def\arexit@@{}%
+ \let\PATHlabelabove@@=\PATHlabelabove@
+ \let\PATHlabelbelow@@=\PATHlabelbelow@
+ \xyFN@\ar@}
+\xydef@\ar@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@}%
+ \else \addAT@\ifx\next \addAT@\DN@{\xyFN@\ar@form}%
+ \else\ifx |\next
+ \DN@ |{\ar@anchor|}%
+ \else\ifx ^\next
+ \DN@ ^{\ar@anchor^}%
+ \else\ifx _\next
+ \DN@ _{\ar@anchor_}%
+ \else \let\next@=\ar@x \fi\fi\fi\fi\fi \next@}
+\xydef@\addtoarinit@#1{%
+ \expandafter\def\expandafter\arinit@@\expandafter{\arinit@@ #1}}
+\xydef@\addtoarlabels@#1{%
+ \expandafter\def\expandafter\arlabels@@\expandafter{\arlabels@@ #1}}
+\xydef@\ar@anchor#1{\begingroup
+ \def\PATHlabelit@@##1##2{%
+ \DN@{##1}\ifx\next@\empty
+ \DN@####1{\expandafter\endgroup\expandafter\addtoarlabels@
+ \expandafter{\the\toks@####1{##2}}\xyFN@\ar@}%
+ \else
+ \DN@####1{\expandafter\endgroup\expandafter\addtoarlabels@
+ \expandafter{\the\toks@*!C####1##1{##2}}\xyFN@\ar@}\fi
+ \expandafter\next@\expandafter{\PATHitshape@@}}%
+ \toks@={#1}%
+ \def\xy@##1##2{\addtotoks@{##1}}\change@oxy@\xy@ \let\xy@@ix@=\eat@
+ \DNii@{}\xyFN@\PATHanchor@}
+\xydef@\ar@form{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@form}%
+ \else\ifx ^\next \DN@ ^{\xyFN@\ar@style}\edef\arvariant@@{\string^}%
+ \else\ifx _\next \DN@ _{\xyFN@\ar@style}\edef\arvariant@@{\string_}%
+ \else\ifx 0\next \DN@ 0{\xyFN@\ar@style}\def\arvariant@@{0}%
+ \else\ifx 1\next \DN@ 1{\xyFN@\ar@style}\def\arvariant@@{1}%
+ \else\ifx 2\next \DN@ 2{\xyFN@\ar@style}\def\arvariant@@{2}%
+ \else\ifx 3\next \DN@ 3{\xyFN@\ar@style}\def\arvariant@@{3}%
+ \else\ifx \bgroup\next \let\next@=\ar@style
+ \else\ifx [\next \DN@[##1]{\ar@modifiers{[##1]}}%
+ \else\ifx *\next \DN@ *{\ar@modifiers}%
+ \else\addLT@\ifx\next \let\next@=\ar@slide
+ \else\ifx /\next \let\next@=\ar@curveslash
+ \else\ifx (\next \let\next@=\ar@curveinout
+ \else\addRQ@\ifx\next \addRQ@\DN@{\ar@curve@}%
+ \else\addLQ@\ifx\next \addLQ@\DN@{\xyFN@\ar@curve}%
+ \else\addDASH@\ifx\next \addDASH@\DN@{\defarstem@-\xyFN@\ar@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\def\arvariant@@{2}\defarstem@-\xyFN@\ar@}%
+ \else\addDOT@\ifx\next \addDOT@\DN@{\defarstem@.\xyFN@\ar@}%
+ \else\ifx :\next \DN@:{\def\arvariant@@{2}\defarstem@.\xyFN@\ar@}%
+ \else\ifx ~\next \DN@~{\defarstem@~\xyFN@\ar@}%
+ \else\ifx !\next \DN@!{\dasharstem@\xyFN@\ar@}%
+ \else\ifx ?\next \DN@?{\ar@upsidedown\xyFN@\ar@}%
+ \else \let\next@=\ar@error
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\defarstem@#1{\edef\arstem@@{\arvariant@@{\string#1}}%
+ \DNii@##1##{\next@}%
+ \edef\next@##1{\def\noexpand\artail@@{\arvariant@@{##1}}}%
+ \expandafter\nextii@\artail@@
+ \edef\next@##1{\def\noexpand\arhead@@{\arvariant@@{##1}}}%
+ \expandafter\nextii@\arhead@@}
+\xydef@\dasharstem@{%
+ \DN@##1##{\nextii@{##1}}\DNii@##1##2{\def\arstem@@{##1{##2##2}}}%
+ \expandafter\next@\arstem@@}
+\xydef@\ar@error#1{\xyerror@{Illegal <form>ation (\meaning\next)}{}%
+ \xyFN@\ar@}
+\xydef@\ar@style{%
+ \ifx \bgroup\next \def\artail@@{{}}%
+ \edef\arstem@@{\arvariant@@{-}}\edef\arhead@@{\arvariant@@{>}}%
+ \expandafter\ar@i
+ \else \resetvariant@\artail@@ \resetvariant@\arstem@@ \resetvariant@\arhead@@
+ \expandafter\xyFN@\expandafter\ar@ \fi}
+\xydef@\resetvariant@#1{%
+ \DN@##1##{\DN@{##1}\ifx\next@\empty
+ \DN@{\expandafter\nextii@\expandafter{\arvariant@@}}%
+ \else \DN@{\nextii@{##1}}\fi \next@}%
+ \DNii@##1##2{\def#1{##1{##2}}}%
+ \expandafter\next@#1}
+\xydef@\ar@i#1{\DN@{#1}%
+ \ifx\next@\empty \edef\arstem@@{\arvariant@@{}}\edef\arhead@@{\arvariant@@{}}%
+ \DN@{\xyFN@\ar@}%
+ \else
+ \let\arcomponent@@=\ar@ii \let\arcomponenttype@@=\artip@
+ \DN@{\xyFN@\arcomponent@#1$}%
+ \fi \next@}
+\xydef@\ar@ii{\ifx $\next \let\next@=\ar@iv
+ \else \expandafter\def\expandafter\artail@@\expandafter{\the\toks@}%
+ \let\arcomponent@@=\ar@iii \let\arcomponenttype@@=\arconn@
+ \DN@{\xyFN@\arcomponent@}\fi \next@}
+\xydef@\ar@iii{%
+ \expandafter\def\expandafter\arstem@@\expandafter{\the\toks@}%
+ \resetvariant@\artail@@
+ \let\arcomponent@@=\ar@iv \let\arcomponenttype@@=\artip@
+ \xyFN@\arcomponent@}
+\xydef@\ar@iv{%
+ \expandafter\def\expandafter\arhead@@\expandafter{\the\toks@}%
+ \ifx $\next \DN@ ${\xyFN@\ar@}%
+ \else \xyerror@{illegal <arrow>: \meaning\next\space not valid}{}\fi \next@}
+\xydef@\ar@x{%
+ \let\arsavedPATHafterPOS@@=\PATHafterPOS \let\PATHafterPOS=\arafterPOS@
+ \toks@={\ar@PATH}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\artail@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arstem@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arstemprefix@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arhead@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\armodifiers@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arinit@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arexit@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arlabels@@}}%
+ \addtotoks@{\afterar@@}%
+ \expandafter\DNii@\expandafter{\the\toks@}\toks@={}%
+ \nextii@}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{%
+ \def\next{%
+ \afterPATH{#9}%
+ ~={#6\preconnect#5#3#2}%
+ ~/{#7}%
+ ~<{|<*h#5\dir#1}%
+ ~>{|>*h#5\dir#4}%
+ ~+{#8}%
+ }%
+ \next}}
+\xylet@\ar@PATH=\next
+\xydef@\arafterPOS@#1{%
+ \arsavedPATHafterPOS@@{\let\PATHafterPOS=\arsavedPATHafterPOS@@
+ \DN@{#1}\expandafter\next@\arafterPOS@@}}%
+\xylet@\arsavedPATHafterPOS@@=\relax
+\xydef@\arcomponent@{%
+ \ifx ^\next \toks@ii={^}\DN@ ^{\xyFN@\arcomponent@i}%
+ \else\ifx _\next \toks@ii={_}\DN@ _{\xyFN@\arcomponent@i}%
+ \else\ifx 1\next \toks@ii={1}\DN@ 1{\xyFN@\arcomponent@i}%
+ \else\ifx 2\next \toks@ii={2}\DN@ 2{\xyFN@\arcomponent@i}%
+ \else\ifx 3\next \toks@ii={3}\DN@ 3{\xyFN@\arcomponent@i}%
+ \else\ifx \bgroup\next \expandafter\toks@ii\expandafter{\arvariant@@}%
+ \let\next@=\arcomponent@i
+ \else\ifx *\next \DN@*##1##{\arcomponent@ii{##1}}%
+ \else \expandafter\toks@ii\expandafter{\arvariant@@}\toks@={}%
+ \let\next@=\arcomponenttype@@
+ \fi\fi\fi\fi\fi\fi\fi
+ \next@}
+\xydef@\arcomponent@i#1{\toks@={#1}\arcomponent@x}
+\xydef@\arcomponent@ii#1#2{\toks@={*#1{#2}}\xyFN@\arcomponent@@}
+\xydef@\artip@{%
+ \addGT@\ifx\next \addGT@\addtotoks@ \addGT@\DN@{\xyFN@\artip@}%
+ \else\addLT@\ifx\next \addLT@\addtotoks@ \addLT@\DN@{\xyFN@\artip@}%
+ \else\ifx (\next \addtotoks@(\DN@({\xyFN@\artip@}%
+ \else\ifx )\next \addtotoks@)\DN@){\xyFN@\artip@}%
+ \else\ifx |\next \addtotoks@|\DN@|{\xyFN@\artip@}%
+ \else\addLQ@\ifx\next \addLQ@\addtotoks@ \addLQ@\DN@{\xyFN@\artip@}%
+ \else\addRQ@\ifx\next \addRQ@\addtotoks@ \addRQ@\DN@{\xyFN@\artip@}%
+ \else\addPLUS@\ifx \next \addPLUS@\addtotoks@ \addPLUS@\DN@{\xyFN@\artip@}%
+ \else\ifx /\next \addtotoks@/\DN@/{\xyFN@\artip@}%
+ \else\ifcat A\noexpand\next \DN@##1{\addtotoks@{##1}\xyFN@\artip@}%
+ \else\ifx\space@\next \addtotoks@{ }\expandafter\DN@\space{\xyFN@\artip@}%
+ \else \let\next@=\arcomponent@x
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\arconn@{%
+ \addDASH@\ifx\next \addDASH@\addtotoks@ \addDASH@\DN@{\xyFN@\arconn@}%
+ \else\addEQ@\ifx\next \addEQ@\addtotoks@ \addEQ@\DN@{\xyFN@\arconn@}%
+ \ifx\arvariant@@\empty \def\arvariant@@{2}\fi
+ \else\addDOT@\ifx\next \addDOT@\addtotoks@ \addDOT@\DN@{\xyFN@\arconn@}%
+ \else\ifx :\next \addtotoks@:\DN@:{\xyFN@\arconn@}%
+ \ifx\arvariant@@\empty \def\arvariant@@{2}\fi
+ \else\ifx ~\next \addtotoks@~\DN@~{\xyFN@\arconn@}%
+ \else \let\next@=\arcomponent@x
+ \fi\fi\fi\fi\fi \next@}
+\xydef@\arcomponent@x{%
+ \DN@##1{\toks@=\expandafter{\the\toks@ii{##1}}}%
+ \expandafter\next@\expandafter{\the\toks@}%
+ \xyFN@\arcomponent@@}
+\xydef@\ar@curveslash/#1/{\expandafter\ar@curve@\ar@slashing{#1}}
+\xydef@\ar@slashing#1{{\xy@{**{} ?+/#1/+/#1/ @+c}{\setupDirection@
+ \vfromslide@{#1}%
+ \X@c=2\X@c \advance\X@c\X@p \advance\X@c.5\d@X
+ \Y@c=2\Y@c \advance\Y@c\Y@p \advance\Y@c.5\d@Y
+ \czeroEdge@
+ \spushc@}}}
+{\xyuncatcodes \catcode`\#=6
+ \gdef\next(#1,#2){{+/#1 3pc/,p+/#2 3pc/}}}
+\xylet@\ar@curveinout@=\next
+\xydef@\ar@curveinout{\expandafter\ar@curve@load\ar@curveinout@}
+\xydef@\ar@curve{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@curve}%
+ \else\ifx \bgroup\next \let\next@=\ar@curve@load
+ \else\ifx "\next \DN@"##1"{\ar@curve@{"##1"}}%
+ \else \xyerror@{@= <form> must be followed by \string"<id>\string" or
+ {<control point list>}}{}%
+ \fi\fi\fi \next@}
+{\xyuncatcodes \gdef\next#1#2{\def#1##1{#2{;@={##1}}}}}
+\next\ar@curve@load\ar@curve@
+\xydef@\ar@curve@#1{\curve@check
+ \setcurvearinit@{#1}\setcurvearexit@\arexit@@
+ \def\arstemprefix@@{\crvi}\xyFN@\ar@}
+{\xyuncatcodes \gdef\next#1{\save @(,#1\restore}}
+\xylet@\setcurvearinit@i=\next
+\xydef@\setcurvearinit@#1{%
+ \expandafter\addtoarinit@\expandafter{\setcurvearinit@i{#1}}}
+{\xyuncatcodes \gdef\next#1{\def#1{\POS @i @) }}}
+\xylet@\setcurvearexit@=\next
+\xydef@\curve@check{%
+ \xyerror@{Forms @/.../, @(...), and @`{...}, only available when curve
+ extension loaded}{}}
+\xywithoption{curve}{\let\curve@check=\relax}
+\xydef@\ar@modifiers#1{%
+ \expandafter\def\expandafter\armodifiers@@\expandafter{\armodifiers@@#1}%
+ \xyFN@\ar@}
+{\xyuncatcodes \catcode`\#=6 \catcode`\@=11
+ \gdef\next<#1>{\def\arafterPOS@@{<#1>}\xyFN@\ar@}}
+\xylet@\ar@slide=\next
+\xydef@\ar@upsidedown{\let\next=\PATHlabelabove@@
+ \let\PATHlabelabove@@=\PATHlabelbelow@@ \let\PATHlabelbelow@@=\next}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xybarr.tex b/macros/generic/diagrams/xypic/texinputs/xybarr.tex
new file mode 100644
index 0000000000..51a419db15
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xybarr.tex
@@ -0,0 +1,1016 @@
+%% xybarr.tex from $Id: xybarr.doc,v 1.3 2013/10/06 00:12:30 krisrose Exp $
+%%
+%% Xy-pic ``Barr Feature'' option.
+%% Copyright (c) 2001 Michael Barr <barr@barrs.org>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Michael Barr
+%%
+%% This work is derived from the file diagxy.tex and has
+%% documentation/tutorial file barrdoc.latex
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{barr}{Barr's diagram feature}{2011-06-18}%
+ {Michael Barr}{barr@math.mcgill.ca}%
+ {Dept of Math and Stats,
+ McGill University,
+ 805 Sherbrooke Street West,
+ Montreal, Quebec H3A 0B9, Canada}
+\xyrequire{curve}
+\xyrequire{arrow}
+\xycatcodes
+\def\dated#1{\def\thedate{#1}}%
+\dated{2011-06-18}%
+ \newdimen\xydashw@@
+ \xydashw@@\xydashw@
+ \multiply\xydashw@@ by 7
+ \divide\xydashw@@ by 4
+\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@@
+ \kern-\dimen@ \vrule width\xydashw@@ height\dimen@ depth\dimen@}
+\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
+\catcode`\@=12
+\newdir{ >}{{ }*!/-.9em/@{>}}%
+\newdir^{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{< }{!/.9em/@{<}*{ }}%
+\newdir{) }{!/.9em/@^{)}*{ }}%
+\newdir{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{d}{\object{.}}
+\newdir{into}{{ }*!/-.5em/@^{(}}%
+\newdimen\high%
+\newdimen\ul%
+\newcount\deltax%
+\newcount\deltay%
+\newcount\deltaX%
+\newcount\deltaXprime%
+\newcount\deltaY%
+\newcount\deltaYprime%
+\newdimen\wdth%
+\newcount\xend%
+\newcount\yend%
+\newcount\Xend%
+\newcount\Yend%
+\newcount\xpos%
+\newcount\ypos%
+\newcount\default \default=500%
+\newcount\defaultmargin \defaultmargin=150%
+\newcount\topw%
+\newcount\botw%
+\newcount\Xpos%
+\newcount\Ypos%
+\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}%
+\catcode`\@=11%
+\expandafter\ifx\csname @ifnextchar\endcsname\relax%
+\def\ifnextchar#1#2#3{\let\@tempe%
+#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@ifnch}%
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch%
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+ \fi \@tempd}%
+\def\:{\let\@sptoken= } \:
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}%
+\else%
+\let\ifnextchar\@ifnextchar%
+\fi%
+\setbox0=\hbox{$x$}
+\newdimen\axis \axis=\fontdimen22\textfont2%
+\ul=.01em%
+\X@xbase =.01em%
+\Y@ybase =.01em%
+\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}%
+\catcode`\@=12%
+\def\fontscale#1{%
+\if#1h\relax%
+\font\xydashfont=xydash10 scaled \magstephalf%
+\font\xyatipfont=xyatip10 scaled \magstephalf%
+\font\xybtipfont=xybtip10 scaled \magstephalf%
+\font\xybsqlfont=xybsql10 scaled \magstephalf%
+\font\xycircfont=xycirc10 scaled \magstephalf%
+\else%
+\font\xydashfont=xydash10 scaled \magstep#1%
+\font\xyatipfont=xyatip10 scaled \magstep#1%
+\font\xybtipfont=xybtip10 scaled \magstep#1%
+\font\xybsqlfont=xybsql10 scaled \magstep#1%
+\font\xycircfont=xycirc10 scaled \magstep#1%
+\fi}%
+\def\bfig{\vcenter\bgroup\xy}%
+\def\efig{\endxy\egroup}%
+\def\car#1#2\nil{#1}%
+\def\morphism{\ifnextchar({\morphismp}{\morphismp(0,0)}}%
+\def\morphismp(#1){\ifnextchar|{\morphismpp(#1)}{\morphismpp(#1)|a|}}%
+\def\morphismpp(#1)|#2|{\ifnextchar/{\morphismppp(#1)|#2|}%
+ {\morphismppp(#1)|#2|/>/}}%
+\def\morphismppp(#1)|#2|/#3/{%
+ \ifnextchar<{\morphismpppp(#1)|#2|/#3/}%
+ {\morphismpppp(#1)|#2|/#3/<\default,0>}}%
+\def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+\xend#1\advance \xend by #5%
+\yend#2\advance \yend by #6%
+\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}%
+\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+\def\next{\car#4.\nil}%
+\if@\next\relax%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+\else%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+\fi\ignorespaces}%
+\def\vect(#1,#2)/#3/<#4,#5>{%
+ \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5%
+ \POS(#1,#2)\ar#3 (\xend,\yend)}%
+\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#7}/<\deltax,0>[\nodec`\noded;\labeld]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\noded;\labelc]%
+\ignorespaces}%
+\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}%
+\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|alrb|}}%
+\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}%
+ {\squareppp(#1)|#2|/>`>`>`>/}}%
+\def\squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}%
+\def\diamondpppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}%
+\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\advance\ypos\deltay
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labelc]%
+\advance\xpos \deltax
+\advance\xpos \deltax
+\morphism(\xpos,\ypos)|\xd|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labeld]%
+\advance\ypos\deltay \advance\xpos -\deltax
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+}
+\def\Diamond{\ifnextchar({\diamondp}{\diamondp(0,0)}}%
+\def\diamondp(#1){\ifnextchar|{\diamondpp(#1)}{\diamondpp(#1)|lrlr|}}%
+\def\diamondpp(#1)|#2|{\ifnextchar/{\diamondppp(#1)|#2|}%
+ {\diamondppp(#1)|#2|/>`>`>`>/}}%
+\def\diamondppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\diamondpppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\diamondpppp(#1)|#2|/#3`#4`#5`#6/<400,400>}}%
+\def\ptrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+\def\qtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+\def\dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay\advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\btrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Atrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\divide\deltax by 2%
+\advance\ypos by \deltay\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Vtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\advance\xpos by \deltax \divide \deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+\def\Ctrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\multiply\deltay by 2%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\xpos by \deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\xpos by -\deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodeb;\labelb]%
+\multiply \deltay by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodec;\labela]%
+\ignorespaces}%
+\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}%
+\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|alr|}}%
+\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}%
+ {\ptriangleppp(#1)|#2|/>`>`>/}}%
+\def\ptriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}%
+\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|alr|}}%
+\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}%
+ {\qtriangleppp(#1)|#2|/>`>`>/}}%
+\def\qtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}%
+\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|lrb|}}%
+\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}%
+ {\dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}%
+\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|lrb|}}%
+\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}%
+ {\btriangleppp(#1)|#2|/>`>`>/}}%
+\def\btriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}%
+\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|lrb|}}%
+\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}%
+ {\Atriangleppp(#1)|#2|/>`>`>/}}%
+\def\Atriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}%
+\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|alb|}}%
+\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}%
+ {\Vtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}%
+\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|arb|}}%
+\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}%
+ {\Ctriangleppp(#1)|#2|/>`>`>/}}%
+\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}%
+\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|lab|}}%
+\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}%
+ {\Dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,0>[\nodeb`\nodec;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<\deltax,0>[\nodec`\noded;\labele]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\ignorespaces}%
+\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,0>[\nodeb`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<0,-\deltay>[\nodec`\noded;\labele]%
+\advance\xpos by -\deltax%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\ypos by -\deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
+\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
+{\Atrianglepairpp(#1)|lmrbb|}}%
+\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}%
+ {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}%
+\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}%
+{\Vtrianglepairpp(#1)|aalmr|}}%
+\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}%
+ {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}%
+\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}%
+{\Ctrianglepairpp(#1)|lrmlr|}}%
+\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}%
+ {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}%
+\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}%
+{\Dtrianglepairpp(#1)|lrmlr|}}%
+\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}%
+ {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}%
+\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}%
+\def\place{\ifnextchar[{\pplace}{\cplace}}%
+\def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}%
+\def\tridentppp|#1#2#3|/#4`#5`#6/<#7,#8>[#9]{%
+\def\next[##1;##2`##3`##4]{\def\nodee{##1}\def\labele{##2}%
+ \def\labelf{##3}\def\labelg{##4}}%
+\next[#9]%
+\advance \xpos by -\deltax%
+\advance \xpos by -#7\advance \ypos by #8%
+\advance\deltax by #7%
+\morphism(\xpos,\ypos)|#1|/{#4}/<\deltax,-#8>[\nodee`\nodeb;\labele]%
+\advance\deltax by -#7%
+\morphism(\xpos,\ypos)|#2|/{#5}/<#7,-#8>[\nodee`\nodea;\labelf]%
+\advance\deltay by #8%
+\morphism(\xpos,\ypos)|#3|/{#6}/<#7,-\deltay>[\nodee`\nodec;\labelg]%
+\ignorespaces}%
+\def\trident{\ifnextchar|{\tridentp}{\tridentp|amb|}}%
+\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}%
+\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}%
+ {\tridentppp|#1|/#2/<500,500>}}%
+\def\setmorphismwidth#1#2#3#4{%
+ \setbox0=\hbox{$#1{\labelstyle#3#3}#2$}#4=\wd0%
+ \divide #4 by 2 \divide #4 by \ul%
+ \advance #4 by 350 \ratchet{#4}{500}}%
+\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{%
+ \setmorphismwidth{#1}{#2}{#5}{\topw}%
+ \setmorphismwidth{#3}{#4}{#8}{\botw}%
+\ratchet{\topw}{\botw}}%
+\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{%
+ \setSquarewidth[#5]%
+ \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]%
+\ignorespaces}%
+\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}%
+\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|alrb|}}%
+\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}%
+ {\Squareppp(#1)|#2|/>`>`>`>/}}%
+\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}%
+\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohsquares/#4/}%
+\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \deltaX%
+\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}%
+\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp%
+(#1)|aalmrbb|}}%
+\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}%
+ {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}%
+ {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaY=#5%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohSquares/#4/}%
+\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \topw%
+\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+\def\hSquares{\ifnextchar({\hSquaresp}{\hSquaresp(0,0)}}%
+\def\hSquaresp(#1){\ifnextchar|{\hSquarespp(#1)}{\hSquarespp%
+(#1)|aalmrbb|}}%
+\def\hSquarespp(#1)|#2|{\ifnextchar/{\hSquaresppp(#1)|#2|}%
+ {\hSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}%
+ {\hSquarespppp(#1)|#2|/#3/<\default>}}%
+\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dovsquares/#4/}%
+\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>%
+[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+ \advance\Ypos by \deltaYprime%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+\ignorespaces}%
+\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}%
+\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp%
+(#1)|aalmrbb|}}%
+\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}%
+ {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}%
+ {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaX=#5%
+\deltaY=#6%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#7]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#8]%
+\dovSquares/#4/\ignorespaces}%
+\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}%
+\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}%
+\ratchet{\topw}{\botw}%
+\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}%
+\ratchet{\topw}{\botw}%
+\square(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\topw,\deltaY>%
+ [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+\advance \Ypos by \deltaY%
+\square(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\topw,\deltaX>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+}%
+\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}%
+\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp%
+(#1)|alrmlrb|}}%
+\def\vSquarespp(#1)|#2|{\ifnextchar/{\vSquaresppp(#1)|#2|}%
+ {\vSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vSquarespppp(#1)|#2|/#3/}%
+ {\vSquarespppp(#1)|#2|/#3/<\default,\default>}}%
+\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp%
+ (#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+ \let\Nodea\nodea\let\Nodeb\nodeb%
+\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos%
+\deltaX=\deltax \deltaY=\deltay \isquare}%
+\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}%
+\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}%
+\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}%
+ {\osquareppp(#1)|#2|/>`>`>`>/}}%
+\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}%
+\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
+ \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+\ifnextchar|{\cubep}{\cubep|mmmm|}}%
+\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}%
+\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}%
+\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}%
+\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}%
+ {\isquareppp(#1)|#2|/>`>`>`>/}}%
+\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}%
+\def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{%
+\def\next[##1`##2`##3`##4]{\gdef\Labela{##1}%
+\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]%
+\xend\xpos \yend\ypos%
+\Xend\xend\advance\Xend by -\Xpos%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]%
+\advance\Xpos by-\deltaX%
+\advance\xend by-\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]%
+\advance\Ypos by-\deltaY%
+\advance\yend by-\deltay%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]%
+\advance\Xpos by\deltaX%
+\advance\xend by\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]%
+\ignorespaces}%
+\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}%
+\def\topppp/#1/<#2>^#3_#4{\:%
+\ifnum#2=0%
+ \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul%
+ \advance \deltax by \defaultmargin \ratchet{\deltax}{100}%
+\else \deltax #2%
+\fi%
+\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy%
+\:}%
+\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}%
+\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}%
+\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}%
+\def\to{\ifnextchar/{\toop}{\toop/>/}}%
+\def\mon{\to/ >->/}%
+\def\epi{\to/->>/}%
+\def\toleft{\to/<-/}%
+\def\monleft{\to/<-< /}%
+\def\epileft{\to/<<-/}%
+\def\rlimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{->}(100,0) \endxy}\,}}
+\def\llimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{<-}(100,0) \endxy}\,}}
+\def\twopppp/#1`#2/<#3>^#4_#5{\:%
+\ifnum0=#3%
+ \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax%
+ by \defaultmargin \ratchet{\deltax}{200}%
+\else \deltax#3 \fi%
+\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)%
+\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}%
+\def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}%
+ {\twopppp/#1`#2/<#3>^{#4}_{}}}%
+\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}%
+\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}%
+\def\two{\ifnextchar/{\twop}{\twop/>`>/}}%
+\def\twoleft{\two/<-`<-/}%
+\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:%
+\ifnum0=#4%
+\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\deltax=\wdth \divide \deltax by \ul \advance \deltax by%
+\defaultmargin \ratchet{\deltax}{300}%
+\else\deltax#4 \fi%
+ \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)%
+ \else \ar@{#2}|{#6}(\deltax,0)\fi%
+\ar@{#1}@<4.5pt>^{#5}(\deltax,0)%
+\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}%
+\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp%
+ /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}%
+\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp%
+ /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}%
+\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}%
+ {\threeppp/#1`#2`#3/<#4>^{}}}%
+\def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}%
+ {\threepp/#1`#2`#3/<0>}}%
+\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}%
+\def\twoar(#1,#2){{%
+ \scalefactor{0.1}%
+ \deltax#1\deltay#2%
+ \deltaX=\ifnum\deltax<0-\fi\deltax%
+ \deltaY=\ifnum\deltay<0-\fi\deltay%
+ \Xend\deltax \multiply \Xend by \deltax%
+ \Yend\deltay \multiply \Yend by \deltay%
+ \advance\Xend by \Yend \multiply \Xend by 3%
+ \ifnum \deltaX > \deltaY%
+ \multiply \deltaX by 3 \advance \deltaX by \deltaY%
+ \else%
+ \multiply \deltaY by 3 \advance \deltaX by \deltaY%
+ \fi%
+ \multiply\deltax by 500%
+ \multiply\deltay by 500%
+ \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX%
+ \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend%
+ \advance \xpos by \Xpos%
+ \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX%
+ \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend%
+ \advance \ypos by \Ypos%
+ \xy \ar@{=>}(\xpos,\ypos) \endxy%
+}\ignorespaces}%
+\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}%
+ \def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}%
+ \def\xi{##3}\def\xj{##4}\def\xk{##5}\def\xl{##6}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \def\next<##1,##2>{\deltaX##1\deltaY##2}%
+ \next<#7>%
+ \def\next##1{\topw##1\relax%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi}%
+ \next{#6}%
+ \def\next[##1`##2`##3`##4`##5`##6`##7`##8`##9]{%
+ \def\nodeA{##1}\def\nodeB{##2}\def\nodeC{##3}%
+ \def\nodeD{##4}\def\nodeE{##5}\def\nodeF{##6}%
+ \def\nodeG{##7}\def\nodeH{##8}\def\nodeI{##9}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\nextt[##7]}%
+ \def\nextt[##1`##2`##3`##4`##5`##6]{%
+ \def\labelg{##1}\def\labelh{##2}\def\labeli{##3}%
+ \def\labelj{##4}\def\labelk{##5}\def\labell{##6}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7`##8/{%
+ \advance\ypos\deltay
+ \ifx\zf\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeD`0;]\fi
+ \morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeD`\nodeE;\labelf]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xg|/{##7}/<\deltax,0>[\nodeE`\nodeF;\labelg]%
+ \ifx\zg\empty \advance\xpos \deltax
+ \morphism(\xpos,\ypos)<\deltaX,0>[\nodeF`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \ifx\zd\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeA`0;]\fi
+ \ifx\za\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeA`0;]\fi
+ \morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodeA`\nodeB;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/{##3}/<0,-\deltay>[\nodeA`\nodeD;\labelc]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeB`\nodeC;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/{##4}/<0,-\deltay>[\nodeB`\nodeE;\labeld]%
+ \ifx\zb\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeB`0;]\fi
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xe|/{##5}/<0,-\deltay>[\nodeC`\nodeF;\labele]%
+ \ifx\zc\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeC`0;]\fi
+ \ifx\ze\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeC`0;]\fi
+ \nextt/##8/}%
+ \def\nextt/##1`##2`##3`##4`##5/{%
+ \xpos#1\ypos#2\relax%
+ \ifx\zh\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeG`0;]\fi
+ \ifx\zj\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeG`0;]\fi
+ \morphism(\xpos,\ypos)|\xk|/{##4}/<\deltax,0>[\nodeG`\nodeH;\labelk]%
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xl|/{##5}/<\deltax,0>[\nodeH`\nodeI;\labell]%
+ \ifx\zk\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeH`0;]\fi
+ \advance\xpos\deltax
+ \ifx\zi\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeI`0;]\fi
+ \ifx\zl\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeI`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \morphism(\xpos,\ypos)|\xh|/{##1}/<0,-\deltay>[\nodeD`\nodeG;\labelh]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xi|/{##2}/<0,-\deltay>[\nodeE`\nodeH;\labeli]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xj|/{##3}/<0,-\deltay>[\nodeF`\nodeI;\labelj]}%
+ \next/#4/\ignorespaces}%
+\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}%
+\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}%
+ {\iiixiiipp(#1)|aalmrmmlmrbb|}}%
+\def\iiixiiipp(#1)|#2|{\ifnextchar/{\iiixiiippp(#1)|#2|}%
+ {\iiixiiippp(#1)|#2|/>`>`>`>`>`>`>`>`>`>`>`>/}}%
+\def\iiixiiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiiipppp(#1)|#2|/#3/}%
+ {\iiixiiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiiippppp(#1)|#2|/#3/%
+ <#4>0<0,0>}{\iiixiiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}%
+\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \deltaX#7
+ \topw#6
+ \def\next{%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}%
+ \next%
+ \def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\noded{##4}\def\nodee{##5}\def\nodef{##6}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7/{%
+ {\ifx\zc\empty\advance\xpos -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi}%
+ \morphism(\xpos,\ypos)|\xf|/##6/<\deltax,0>[\noded`\nodee;\labelf]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xg|/##7/<\deltax,0>[\nodee`\nodef;\labelg]%
+ {\ifx\zd\empty \advance\xpos by \deltax
+\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi}%
+ \advance\xpos by -\deltax \advance\ypos by \deltay
+ {\ifx\za\empty\advance \xpos by -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi}%
+ \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/##3/<0,-\deltay>[\nodea`\noded;\labelc]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/##4/<0,-\deltay>[\nodeb`\nodee;\labeld]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodec`\nodef;\labele]%
+ \ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}%
+ \next/#4/\ignorespaces}%
+\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}%
+\def\iiixiip(#1){\ifnextchar|{\iiixiipp(#1)}%
+ {\iiixiipp(#1)|aalmrbb|}}%
+\def\iiixiipp(#1)|#2|{\ifnextchar/{\iiixiippp(#1)|#2|}%
+ {\iiixiippp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\iiixiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiipppp(#1)|#2|/#3/}%
+ {\iiixiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiippppp(#1)|#2|/#3/%
+ <#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}%
+\def\node#1(#2,#3)[#4]{%
+\expandafter\gdef\csname x@#1\endcsname{#2}%
+\expandafter\gdef\csname y@#1\endcsname{#3}%
+\expandafter\gdef\csname ob@#1\endcsname{#4}%
+\ignorespaces}%
+\newcount\xfinish%
+\newcount\yfinish%
+\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+\def\arrowpp|#1|/#2/[#3`#4;#5]{%
+\xfinish=\csname x@#4\endcsname%
+\yfinish=\csname y@#4\endcsname%
+\advance\xfinish by -\csname x@#3\endcsname%
+\advance\yfinish by -\csname y@#3\endcsname%
+\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+<\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]%
+}%
+\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}%
+\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycmactex.tex b/macros/generic/diagrams/xypic/texinputs/xycmactex.tex
new file mode 100644
index 0000000000..78e5fe6f8a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycmactex.tex
@@ -0,0 +1,28 @@
+%% xycmactex.tex from $Id: xycmactex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``CMacTeX'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{cmactex}{CMacTeX driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{dvips}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycmtip.tex b/macros/generic/diagrams/xypic/texinputs/xycmtip.tex
new file mode 100644
index 0000000000..ac0a223d3c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycmtip.tex
@@ -0,0 +1,29 @@
+%% xycmtip.tex from $Id: xycmtip.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Computer Modern tips'' extension.
+%% Copyright (c) 1992-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{cmtip}{Computer Modern tip extension}{\stripRCS$Revision: 3.7 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xyrequire{tips}\xycatcodes
+\xydef@\UseComputerModernTips{\SelectTips{cm}{10}\UseTips}
+\xydef@\NoComputerModernTips{\NoTips}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycolor.tex b/macros/generic/diagrams/xypic/texinputs/xycolor.tex
new file mode 100644
index 0000000000..d4a6574218
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycolor.tex
@@ -0,0 +1,112 @@
+%% xycolor.tex from $Id: xycolor.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Colour extension'' option.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{color}{Colour extension}{\stripRCS$Revision: 3.11 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xycolorwarning@@{\xycolormessage@
+ \gdef\xycolorwarning@{\xycolormessage@
+ \xywarning@{...no further colour warnings will be given.}%
+ \global\let\xycolorwarning@=\relax }}
+\xylet@\xycolorwarning@=\xycolorwarning@@
+\xydef@\xycolormessage@{%
+ \xywarning@{Current driver does not support colour.}}%
+\xydef@\xyNoColor@#1{}
+\xylet@\xycolor@@=\xyNoColor@
+\xydef@\xyNoColor@@#1#2{\xycolorwarning@}
+\xydef@\xycolor@{\xycolor@@}
+\xylet@\xylocalColor@=\xyNoColor@@
+\xydef@\UnloadColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@ }
+\xylet@\UnloadColor@@=\UnloadColor@
+\xyaddunsupport{color}{\UnloadColor@@\relax}
+\ifx\current@color\undefined \xydef@\xybasecolor@{}%
+\else \def\xybasecolor@{\current@color}\fi
+\xydef@\xystackcolor@{\bgroup \DN@##1##2{\egroup}%
+ \ifInvisible@\else\ifHidden@\else\DNii@{\no@@}\ifx\nextii@\Connect@@
+ \else\DN@{\xystackcolor@i}\fi\fi\fi \next@ }
+\xydef@\xystackcolor@i#1#2{\checkXyStyle@
+ \DN@{#2}\ifx\next@\empty
+ \def\tmp@##1{\DN@{\xycolor@push{#1}##1\xycolor@pop}}%
+ \else\def\tmp@##1{\DN@{\xycolor@push{#2 #1}##1\xycolor@pop}}\fi
+ \toks@={\egroup \let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\tmp@\expandafter{\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}\def\Connect@@}%
+ \expandafter\tmp@\expandafter{\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}}%
+ \the\toks@ }%
+\xydef@\xycolor@push@@#1{\special{color push #1}}
+\xydef@\xycolor@pop{\special{color pop}}
+\xylet@\xycolor@push=\xycolor@push@@
+\xydef@\newxycolor#1#2{\newxyColor{#1}{}{}{#2}{}}
+\xydef@\newxyColor#1#2#3#4{\newxycolor@{#1}{#2}{#3}{#4}{}}
+\xydef@\newxycolor@#1#2#3#4#5{%
+ \expandafter\let\expandafter\next@\csname shape [#1]\endcsname
+ \ifx\next@\relax
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{}{#3}\xycolor@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#2 #3}}}%
+ \fi
+ \else\DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{#4}{}\xycolor@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#4}}}%
+ \fi \fi
+ \else \def\tmp@{\relax}\DNii@{#5}%
+ \ifx\nextii@\tmp@
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{}{#3}\xycolor@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#2 #3}}}%
+ \fi
+ \else
+ \DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{#4}{}\xycolor@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#4}}}%
+ \fi \fi
+ \else\DN@{}\fi\fi \next@\relax}
+\xydef@\xystandardcolors@{%
+ \newxycolor@{black}{0. 0. 0.}{rgb}{}\relax
+ \newxycolor@{white}{1. 1. 1.}{rgb}{}\relax
+ \newxycolor@{gray}{.5}{gray}{}\relax
+ \newxycolor@{grey}{.5}{gray}{}\relax
+ \newxycolor@{red}{1. 0. 0.}{rgb}{}\relax
+ \newxycolor@{green}{0. 1. 0.}{rgb}{}\relax
+ \newxycolor@{blue}{0. 0. 1.}{rgb}{}\relax
+ \newxycolor@{cyan}{0. 1. 1.}{rgb}{}\relax
+ \newxycolor@{magenta}{1. 0. 1.}{rgb}{}\relax
+ \newxycolor@{yellow}{1. 1. 0.}{rgb}{}\relax
+ \xyuncatcodes }
+\xydef@\UseCrayolaColors{\xyrequire{crayon}\xyuncatcodes}%
+\xydef@\xyBEcolorcheck@{\ifx\xycolor@@\xyNoColor@\else
+ \xywarning@{PostScript colour support should be OK.}\fi }%
+\xywithoption{ps}{%
+ \xyinputorelse@{xyps-c}{\xyerror@{Could not load xyps-c}{}}}%
+ \xycatcodes
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycrayon.tex b/macros/generic/diagrams/xypic/texinputs/xycrayon.tex
new file mode 100644
index 0000000000..8eae152ab8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycrayon.tex
@@ -0,0 +1,32 @@
+%% xycrayon.tex from $Id: xycrayon.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Crayola colours'' PostScript backend support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{crayon}{Crayola Colours}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\installCrayolaColors@{%
+ \xyinputorelse@{xyps-col}{\xyerror@{Could not load Crayola colours}{}}%
+ \let\installCrayolaColors@=\relax
+ \xyuncatcodes }
+\xyendinput
+#
diff --git a/macros/generic/diagrams/xypic/texinputs/xycurve.tex b/macros/generic/diagrams/xypic/texinputs/xycurve.tex
new file mode 100644
index 0000000000..f5692fe257
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycurve.tex
@@ -0,0 +1,2702 @@
+%% xycurve.tex from $Id: xycurve.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Curves and Splines'' extension.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{curve}{Curve and Spline extension}{\stripRCS$Revision: 3.12 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\message{curve,}
+\xynew@{count}\crv@cnt@
+\xydef@\xynumctrlpts@{\the\crv@cnt@}
+\xynew@{toks}\crvpts@
+\xydef@\setcurve@{%
+ \edef\xysplineparams@{%
+ \expandafter\noexpand\csname params@\endcsname}%
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \edef\xycrvcnt@{%
+ \expandafter\noexpand\csname crvcnt@\endcsname}%
+ \expandafter\edef\xycrvcnt@{\number\crv@cnt@}%
+ \ifcase\crv@cnt@
+ \expandafter\xycvxhull@\or
+ \expandafter\xyquadbezier@\or
+ \expandafter\xycubicbezier@\or
+ \expandafter\xybspline@iii\or
+ \expandafter\xybspline@iv\else
+ \expandafter\xybspline@
+ \fi}
+\xydef@\curve{\connect\crv}
+\xydef@\crv#1#{\hbox \bgroup \crvresetbreaks@ \initshape@
+ \def\pure@crv{\crv@saveStyles@}\crv@{#1}}
+\xydef@\crv@#1#2{%
+ \DN@{#1}\ifx\empty\next@
+ \DN@{\def\afterCURVEaction@{}\parsecurve@\xycurve@@}%
+ \else\DN@{\parseCURVE@#1\parsecurve@\curveSTYLE@}\fi
+ \next@ #2\@endcurve\endcrv@ }
+\xydef@\curveSTYLE@{\xycurve@@}%
+\xydef@\afterCURVEaction@{}%
+\xydef@\@endcurve{}%
+\xydef@\endcrv@@{\endcrv@\POS}%
+\xydef@\pure@crv{\relax}
+\xywarnifdefined\crv@normaltemplate
+\xywarnifdefined\crv@othertemplate
+\xywarnifdefined\crv@specialtemplate@@
+{\xyuncatcodes \catcode`\@=11 \catcode`\#=6
+ \gdef\crv@normaltemplate#1{{}{~**#1\xy@@crvaddstack@}}
+ \gdef\crv@othertemplate#1{{}{~*=<2\jot>{}~**#1\xy@@crvaddstack@}}
+ \gdef\crv@specialtemplate@@#1{{}{~**\dir{#1}\xy@@crvaddstack@}}
+}
+\xydef@\crvs#1#{\hbox \bgroup \def\pure@crv{\relax}\crvs@{#1}}%
+\xydef@\crvi#1#{\hbox \bgroup \def\pure@crv{\relax}\invisbreaks@ \crvs@{#1}}%
+\xydef@\crvs@#1{\DN@{\initshape@ \@crv@{#1}}%
+ \def\crv@defaultshape{-}%
+ \ifx\bstartPLACE@\relax \else
+ \ifx\bstartPLACE@\empty \Invisible@true \else
+\splinetrace@{bstartPLACE@=\bstartPLACE@, bendPLACE@=\bendPLACE@}%
+ \DN@{\let\xy@@crvaddstack@=\xy@@samecurve@
+ \let\saveshape@=\savesame@
+ \let\savectrlptsnum@=\relax
+ \let\startxycurve@=\recovercurve@
+ \crv@cnt@=\xycrvptsnum@\relax \@crv@{#1}}%
+ \fi \fi \next@ }
+\xydef@\xy@@samecurve@{\xyFN@\checkendcurve@}
+\xydef@\savesame@{\egroup }
+\xydef@\recovercurve@{%
+ \crv@cnt@=\xycrvptsnum@ \splinereset@ \recovercv@end
+ \ifx\bendPLACE@\relax \def\bendPLACE@{1}\fi
+ \ifdim\zz@\R@c \ifdim\zz@\L@c \ifdim\zz@\D@c \ifdim\zz@\U@c
+ \Edge@c={\zeroEdge}\fi\fi\fi\fi
+ \edef\cv@end{\cfromthec@}\edef\cv@start{\cfromthep@}}
+\xydef@\recovercv@end{\count@=\ptsnum@\relax\advance\count@\@ne
+ \edef\tmp@{\the\count@}\csname cv@\tmp@\endcsname}%
+\xydef@\crvSTYLE@@{}
+\expandafter\xydef@\expandafter\crv@defaultshape\expandafter{\addDASH@{}}
+\xydef@\crv@noobject{\Invisible@true}
+\xydef@\@crv@#1#2{\DN@{#1#2}%
+ \ifx\next@\empty \edef\next@{\crv@defaultshape}%
+ \ifx\bstartPLACE@\empty \xdef\crvSTYLE@@{{\crv@defaultshape}}\fi
+ \else
+ \ifx\bstartPLACE@\empty \gdef\crvSTYLE@@{#1{#2}}\fi
+ \fi
+ \ifx\next@\empty \crv@noobject \DN@{\crv@{}{\xy@@crvaddstack@}}%
+ \else\def\tmp@{-}\ifx\next@\tmp@ \DN@{\crv@{}{\xy@@crvaddstack@}}%
+ \else\def\tmp@{=}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{=}}}%
+ \else\def\tmp@{2-}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{2.}}}%
+ \else\def\tmp@{3-}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{3.}}}%
+ \else\def\tmp@{--}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@specialtemplate@{--}}%
+ \else\def\tmp@{==}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}%
+ \else\def\tmp@{2--}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}%
+ \else\def\tmp@{3--}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir3{--}}}%
+ \else\def\tmp@{.}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@specialtemplate@{.}}%
+ \else\def\tmp@{:}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}%
+ \else\def\tmp@{2.}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}%
+ \else\def\tmp@{..}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@specialtemplate@{.}}%
+ \else
+ \DN@{\expandafter\crv@\crv@othertemplate{\dir#1{#2}}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\crv@specialtemplate@=\crv@specialtemplate@@
+\xydef@\crv@special#1{}
+\xydef@\parseCURVE@{\def\curveSTYLE@{\xycurve@@}\def\afterCURVEaction@{}%
+ \xyFN@\parseCURVE@@}
+\xydef@\parseCURVE@@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\parseCURVE@@}%
+ \else\ifx ~\next \DN@ ~{\xy@~{}\xyFN@\setcurveSTYLE@@}%
+ \else\ifx\parsecurve@\next\DN@{}%
+ \else\ifcat\active\noexpand\next\DN@{\xyactive@Warning}%
+ \else\ifcat a\noexpand\next\DN@##1{\xytilde@Warning\setcurveSTYLE@{##1}%
+ \xyFN@\parseCURVE@@}%
+ \else\DN@{}\fi\fi\fi\fi\fi \next@ }%
+\xydef@\xyactive@Warning{\xywarning@{expandable control sequences should
+ not be here, results are unpredictable in diagrams.}}%
+\xydef@\xytilde@Warning{Please use ~ to set curve style.}%
+\xydef@\setcurveSTYLE@#1{\xyFN@\setcurveSTYLE@@#1}
+\xydef@\setcurveSTYLE@@{%
+ \ifx\next p\def\curveSTYLE@{\xyc@trlpts@@}%
+ \DN@ p{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next P\def\curveSTYLE@{\xyc@trlpts@}%
+ \DN@ P{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next l\def\curveSTYLE@{\xyc@vxhull@@}%
+ \DN@ l{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next L\def\curveSTYLE@{\xyc@vxhull@}%
+ \DN@ L{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next c\def\curveSTYLE@{\xycurve@@}%
+ \DN@ c{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next C\def\curveSTYLE@{\xycurve@@}%
+ \DN@ C{\xyFN@\setafterCURVEaction@}%
+ \else \DN@##1{\xywarning@{unknown curve style ##1}\xyFN@\parseCURVE@@}%
+ \fi\fi\fi\fi\fi\fi \next@ }
+\xydef@\setafterCURVEaction@{%
+ \ifx\next~\DN@~{\xyFN@\setcurveSTYLE@@}%
+ \else\ifcat a\noexpand\next\DN@{\setafterCURVEaction@@}%
+ \else\DN@{\xyFN@\parseCURVE@@}%
+ \fi\fi \next@}
+\xydef@\setafterCURVEaction@@{%
+ \ifx\next c\DN@ c{%
+ \def\afterCURVEaction@{\noexpand\endcurve\noexpand\xy@curve@}%
+ \xyFN@\parseCURVE@@ }%
+ \else\ifx\next C\DN@ C{%
+ \def\afterCURVEaction@{\noexpand\endcurve\noexpand\xy@curve@@}%
+ \xyFN@\parseCURVE@@ }%
+ \else \DN@##1{\xywarning@{unknown after-curve action ##1}%
+ \xyFN@\parseCURVE@@ }%
+ \fi\fi \next@ }
+\xydef@\parsecurve@{\xyFN@\parsecurve@@}
+\xydef@\parsecurve@@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\parsecurve@@}%
+ \else\ifx\next\@endcurve\DN@\@endcurve{\checkafterCURVE@}%
+ \else\ifcat\active\noexpand\next\DN@{\relax}%
+ \else\DN@{\xycurve@@}\fi\fi\fi\next@}%
+\xydef@\xycurve@{\begingroup\afterCURVE{\setcurve@\endgroup}\crvobjects@
+ \startxycurve@\xycrvmods@}
+\xydef@\xycurve@@{\afterCURVE{\setcurve@}\crvobjects@\startxycurve@
+ \xycrvmods@}
+\xydef@\xy@curve@{\xy@curve@@@{\splinedefaulttol@\crvobjects@}}
+\xydef@\xy@curve@@{\xy@curve@@@{\resetcrvobjects@}}
+\xydef@\xy@curve@@@#1{\ifx\cv@start\relax
+ \DN@{\xywarning@{There is no curve to plot}}.
+ \else\DN@{\begingroup\afterCURVE{\setcurve@\endgroup}#1\cv@end}%
+ \fi \next@ }
+\xydef@\crvobjects@{\def\xycrvdrop@{}\def\xycrvconn@{}}
+\xydef@\resetcrvobjects@{\crvobjects@}
+\xylet@\savecurve=\xycurve@@
+\xylet@\samecurve=\xy@curve@
+\xydef@\xycrvmods@{\xyFN@\xy@crvmods@}%
+\xydef@\xy@crvmods@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@}%
+ \else\ifx\next ~\DN@ ~{\xyFN@\xy@crvmods@@}%
+ \else\DN@{\xy@crvmods@@@@}\fi\fi \next@}%
+\xydef@\xy@crvmods@@@@{\xyFN@\checkendcurve@}%
+\xydef@\xy@crvmods@@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@@}%
+ \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@}%
+ \else\addAT@\ifx\next\addAT@\DN@{\xyFN@\xy@@crvaddstack}%
+ \else\DN@{\xywarning@{badly-formed curve option}\xyFN@\xy@crvmods@}%
+ \fi\fi\fi \next@}%
+\xydef@\xy@@crvmods@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@@crvmods@}%
+ \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@@}%
+ \else\DN@{\xy@crv@mods@@}\fi\fi \next@}%
+\xydef@\xy@crv@mods@@#1#{\DN@##1{\xy@crvmods@@@{#1}{##1}}\next@}%
+\xydef@\xy@crvmods@@@#1#2{%
+ \DN@{#1#2}\ifx\next@\empty \def\xycrvdrop@{ #1{\zerodot}}%
+ \else \def\xycrvdrop@{ #1{#2}}\fi
+ \xyFN@\xy@crvmods@ }%
+\xydef@\xy@@crvmods@@#1#{\DN@##1{\xy@@crvmods@@@{#1}{##1}}\next@}%
+\xydef@\xy@@crvmods@@@#1#2{\def\xycrvconn@{ #1{#2}}\xyFN@\xy@crvmods@ }%
+\xydef@\checkendcurve@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkendcurve@}%
+ \else\ifx\next\endcurve\DN@\endcurve{\clearsearchflag@\endxycurve@}%
+ \else\ifx\next\@endcurve\DN@\@endcurve{\checkafterCURVE@}%
+ \else\ifx\next\xy@@crvaddstack@\DN@{}%
+ \else\ifx\next\endxy\DN@{\clearsearchflag@\sloppyendcrv@}%
+ \else\testAND@\iffalse \DN@##1{\clearsearchflag@\searchnextpt@}%
+ \else\ifx ~\next\DN@ ~{\xyFN@\checkcrvtilde@}%
+ \else\ifx\next\relax\DN@\relax{\clearsearchflag@\searchnextpt@}%
+ \else\ifx\next\\\DN@\\{\clearsearchflag@\searchnextpt@}%
+ \else\ifx\searchflag@\relax
+ \DN@{\setsearchflag@\searchnextpt@}%
+ \else\DN@##1{\flagwarn@{##1}}\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ }
+\xydef@\searchnextpt@{\afterPOS{\xy@@\addtocrv@ \xyFN@\checkendcurve@}}
+\xydef@\checkafterCURVE@{%
+ \edef\tmp@{\noexpand\xyFN@\noexpand\checkendcurve@
+ \afterCURVEaction@\noexpand\endcurve}\tmp@ }
+\xylet@\searchflag@=\relax
+\xydef@\setsearchflag@{\let\searchflag@=@}
+\xydef@\clearsearchflag@{\let\searchflag@=\relax}
+\xydef@\flagwarn@#1{%
+ \ifx\next\@endcurve\DN@{\xyFN@\checkendcurve@\endcurve}%
+ \else\setsearchflag@\DN@{\xyFN@\checkendcurve@}%
+ \xywarning@{skipping invalid token \string#1\space in curve}%
+ \fi \next@ }
+\xydef@\sloppyendcrv@{%
+\xywarning@{Please use \string\endcurve\space to end the curve.}\endxycurve@}
+\xydef@\endcrv@{\saveshape@
+ \Edge@c={\splineEdge}\Invisible@false\Hidden@false
+ \edef\Drop@@{\noexpand\ifInvisible@ \setbox\z@=\copy\voidb@x
+ \noexpand\else
+ \noexpand\wdz@=\z@
+ \noexpand\ht\z@=\z@ \noexpand\dp\z@=\z@
+ \noexpand\splineDrop@
+ \noexpand\fi }%
+ \edef\Connect@@{%
+ \noexpand\setbox\z@=\noexpand\box\lastobjectbox@
+ \noexpand\wdz@=\z@
+ \noexpand\ht\z@=\z@ \noexpand\dp\z@=\z@
+ \expandafter\noexpand\pure@crv
+ \noexpand\ifInvisible@ \noexpand\crv@saveStyles@ \noexpand\else
+ \noexpand\crv@getStyles@\noexpand\styledboxz@ \noexpand\fi
+ \noexpand\ifHidden@\noexpand\else
+ \noexpand\ifx\noexpand\COORD@\noexpand\xymatrixCOORD@ \noexpand\else
+ \noexpand\X@min=\the\X@min \noexpand\X@max=\the\X@max
+ \noexpand\Y@min=\the\Y@min \noexpand\Y@max=\the\Y@max
+ \noexpand\fi \noexpand\fi
+ \savecrvparams@ \noexpand\crvconnect@
+ }%
+ \wdz@=\z@
+ \ht\z@=\z@ \dp\z@=\z@ }
+\xydef@\crvXY@pre@{}
+\xydef@\crvXY@post@{}
+\xydef@\crv@saveStyles@{\def\xy@style@{}%
+ \expandafter\def\expandafter\crvXY@pre@\expandafter{\preXY@style@}%
+ \expandafter\def\expandafter\crvXY@post@\expandafter{\postXY@style@}}
+\xydef@\crv@getStyles@{\def\xy@style@{}%
+ \gdef\preXY@style@{\crvXY@pre@}\gdef\postXY@style@{\crvXY@post@}}
+\xydef@\initshape@{\savescope@
+ \ifdim\X@c>\X@p \X@min=\X@p \X@max=\X@c \else \X@max=\X@p \X@min=\X@c \fi
+ \ifdim\Y@c>\Y@p \Y@min=\Y@p \Y@max=\Y@c \else \Y@max=\Y@p \Y@min=\Y@c \fi }
+\xydef@\saveshape@{\savectrlptsnum@
+ \R@c=\X@max \advance\R@c-\X@c \L@c=\X@c \advance\L@c-\X@min
+ \U@c=\Y@max \advance\U@c-\Y@c \D@c=\Y@c \advance\D@c-\Y@min
+ \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \noexpand\ifdim\noexpand\X@min>\the\X@min\noexpand\X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\noexpand\Y@min>\the\Y@min\noexpand\Y@min=\the\Y@min\noexpand\fi
+ \noexpand\ifdim\noexpand\X@max<\the\X@max\noexpand\X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\noexpand\Y@max<\the\Y@max\noexpand\Y@max=\the\Y@max\noexpand\fi
+ \savecrvparams@ \def\noexpand\pure@crv{\expandafter\noexpand\pure@crv}}%
+ \tmp@ }
+\xydef@\savecrvparams@{\crvpts@={\the\crvpts@}%
+ \noexpand\def\noexpand\crvconnect@{\expandafter\noexpand\crvconnect@}}%
+\xydef@\splineEdge{\rectangleEdge}
+\xydef@\xy@@crvaddstack{%
+ \ifx\next ~\xywarning@{there should be a poslist here, \string~@ ignored}%
+ \DN@{\xy@crvmods@}%
+ \else\DN@{\xy@@crvaddstack@}\fi \next@}
+\xydef@\xy@@crvaddstack@{\smapxy@@\addtocrv@ \xyFN@\checkendcurve@}
+\xydef@\checkcrvtilde@{%
+ \addAT@\ifx\next\addAT@\DN@{\xy@@crvaddstack@}%
+ \else\xywarning@{invalid token after ~, ignored}%
+ \DN@##1{\xyFN@\checkendcurve@}%
+ \fi \next@ }
+\xydef@\crvconnect@@{%
+ \def\Creset@@{\crvreset@}%
+ \def\Cshavep@@{\crvshavep@}%
+ \def\Cshavec@@{\crvshavec@}%
+ \def\Cslidep@@{\crvslidep@}%
+ \def\Cslidec@@{\crvslidec@}%
+ \def\Calong@@{\crvalong@}%
+ \def\Cintercept@@{\crvintercept@}%
+ \def\Cbreak@@{\crvbreak@}%
+ \def\Clast@@{\crvlast@}%
+}
+\xydef@\straitconnect@{\crvconnect@@
+ \let\crvreset@=\straitreset@
+ \let\crvshavep@=\straitshavep@
+ \let\crvshavec@=\straitshavec@
+ \let\crvslidep@=\straitslidep@
+ \let\crvslidec@=\straitslidec@
+ \let\crvalong@=\straitalong@
+ \let\crvintercept@=\straitintercept@
+ \let\crvbreak@=\straitbreak@
+ \let\crvlast@=\straitlast@
+}
+\xydef@\straitreset@{\the\crvpts@
+ \edef\xycrvptsnum@{\csname ptsnum@\endcsname}%
+ \def\segmentnum@{0}}
+\xydef@\straitslidep@{\setupDirection@ii \noCslidep@@ }
+\xydef@\straitslidec@{\setupDirection@ii \noCslidec@@ }
+\xydef@\straitshavep@{%
+ \expandafter\ifnum\xycrvptsnum@>\z@
+ \def\segmentnum@{0}%
+ \csname cv@1\endcsname
+ \resetDirection@ \setupDirection@ii
+ \fi \noCshavep@@ }
+\xydef@\straitshavec@{%
+ \expandafter\ifnum\xycrvptsnum@>\z@
+ \expandafter\count@@\xycrvptsnum@\relax
+ \bgroup \csname cv@\number\count@@\endcsname
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \edef\segmentnum@{\xycrvptsnum@}%
+ \resetDirection@ \setupDirection@ii
+ \fi \noCshavec@@ }
+\xydef@\straitalong@#1{%
+ \ifdim#1\p@<\z@
+ \xywarning@{parameter value #1 is negative, using 0}%
+ \cfromp@ \def\PLACEf@{{0}}%
+ \else
+ \dimen@=#1\p@ \count@=\dimen@ \divide\count@\p@
+ \expandafter\count@@\xycrvptsnum@\relax \advance\count@@\@ne
+ \advance\dimen@\segmentnum@\p@
+ \advance\count@\segmentnum@\relax
+ \def\segmentnum@{0}%
+ \ifnum\count@@<\count@
+ \xywarning@{parameter value #1 too large, using \the\count@@}%
+ \count@=\count@@ \advance\count@\m@ne \edef\PLACEf@{{1}}%
+ \else
+ \advance\dimen@-\count@\p@
+ \ifdim\zz@\dimen@\ifnum\count@>\z@
+ \advance\count@\m@ne \advance\dimen@\p@ \fi\fi
+ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \fi
+ \ifnum\count@=\z@\else \bgroup
+ \csname cv@\number\count@\endcsname
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \fi
+ \advance\count@\@ne
+ \ifnum\count@<\count@@
+\splinetrace@{find place \the\dimen@\space along straight segment
+ \the\count@}%
+ \csname cv@\number\count@\endcsname
+ \fi
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi \expandafter\noCalong@@\PLACEf@ \czeroEdge@ }
+\xydef@\straitintercept@{\noCintercept@@}
+\xydef@\straitbreak@{\straightCbreak@@}
+\xydef@\straitlast@{\straightClast@@}
+\xydef@\splineconnect@{%
+ \let\crvreset@=\splinereset@
+ \let\crvshavep@=\splineshavep@
+ \let\crvshavec@=\splineshavec@
+ \let\crvslidep@=\splineslidep@
+ \let\crvslidec@=\splineslidec@
+ \let\crvalong@=\splinealong@
+ \let\crvintercept@=\splineintercept@
+ \let\crvbreak@=\splinebreak@
+ \let\crvlast@=\splinelast@
+}
+\xydef@\splinereset@{\the\crvpts@
+ \edef\xycrvptsnum@{\csname ptsnum@\endcsname}%
+ \edef\xysplineparams@{%
+ \expandafter\noexpand\csname params@\endcsname}%
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \def\segmentnum@{1}\def\splinecorrect@p{0}\def\splinecorrect@c{0}%
+ \splinelength@=\z@ \def\splineplace@f{.5}%
+}
+\xydef@\splineshavep@{\begingroup
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@%
+ \edef\tmp@{\noexpand\removePT@\the\dimen5}%
+ \edef\tmp@{\endgroup
+ \noexpand\def\noexpand\splinecorrect@p{\tmp@}}\tmp@
+ \setupDirection@ii }
+\xydef@\splineshavec@{\begingroup
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@%
+ \dimen@=-\dimen7\relax \advance\dimen@\p@
+%% \getcrvsegsnum@ \advance\dimen@\count@\p@
+ \edef\tmp@{\noexpand\removePT@\the\dimen@}%
+ \edef\tmp@{\endgroup
+ \noexpand\def\noexpand\splinecorrect@c{\tmp@}}\tmp@
+ \setupDirection@ii }
+\xydef@\splineslidep@#1{\enter@{\pfromthep@}%
+ \begingroup \splinealong@@{0}{#1}+\splineslidep@@@
+ \setupDirection@ii \leave@ }%
+\xydef@\splineslidep@@@{%
+ \d@X=\dimen5 \d@Y=\dimen7 \edef\tmp@{\postfind@}\tmp@ \dimen@=\splineval@
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@>\tw@ \advance\count@\m@ne
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \fi
+ \edef\tmp@{\endgroup \endgroup
+ \noexpand\def\noexpand\xysplineval@{\the\splineval@}%
+ \noexpand\def\noexpand\splinecorrect@p{\expandafter\removePT@\the\dimen@}%
+\splinetrace@{slide = \the\splinelength@}%
+ \X@c=\dimen@i \Y@c=\dimen3
+ \d@X=\the\d@X \d@Y=\the\d@Y
+ \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ }
+\xydef@\splineslidec@#1{\enter@{\pfromthep@}%
+ \begingroup
+ \expandafter\splinealong@@\PLACEf@{#1}+\splineslidec@@@
+ \setupDirection@ii \leave@ }
+\xydef@\splineslidec@@@{%
+ \d@X=\dimen5 \d@Y=\dimen7 \edef\tmp@{\postfind@}\tmp@ \dimen@=\splineval@
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@>\tw@ \advance\count@\m@ne
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \dimen@=-\dimen@ \advance\dimen@\count@\p@
+ \else \dimen@=-\dimen@ \advance\dimen@\p@ \fi
+%% splinecorrect@c is probably wrong here!!
+ \edef\tmp@{\endgroup \endgroup
+ \noexpand\def\noexpand\xysplineval@{\the\splineval@}%
+ \noexpand\def\noexpand\splinecorrect@c{\expandafter\removePT@\the\dimen@}%
+\splinetrace@{slide = \the\splinelength@; correct@c=\noexpand\splinecorrect@c}%
+ \X@c=\dimen@i \Y@c=\dimen3
+ \d@X=\the\d@X \d@Y=\the\d@Y
+ \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ }
+\xydef@\checkslidemore@#1{%
+ \dimen@ii=-#1\relax\ifdim\dimen@ii<\z@\multiply\dimen@ii\m@ne\fi
+ \dimen@=-\splinelength@ \advance\dimen@\dimen@ii\relax
+ \ifdim\dimen@<\z@\dimen@ii=-\dimen@\else\dimen@ii=\dimen@\fi
+ \ifdim\dimen@ii<.2\p@\DN@{\splineslidec@@ \leave@}%
+ \else \splinetrace@{not found yet, \the\dimen@ii\space still to go}%
+ \dimen@ii=#1\relax\ifdim\dimen@ii<\z@\multiply\dimen@\m@ne\fi
+ \DN@{\expandafter\splineslidemore@\expandafter{\the\dimen@}}\fi
+ \next@}%
+\xydef@\splineslidemore@#1{%
+ \expandafter\count@\segmentnum@\relax
+ \ifdim#1<\z@\advance\count@\m@ne\dimen@=\p@
+ \else\advance\count@\@ne\dimen@=\z@\fi
+ \ifnum\count@<\@ne
+ \expandafter\splinesegment@\expandafter{\segmentnum@}%
+ \DN@{\xywarning@{cannot slide beyond start of curve}%
+ \spline@find{\z@}{\z@}{}\splineslidec@@ \leave@ }%
+ \else \expandafter\count@@\xycrvptsnum@\relax\advance\count@@\m@ne
+ \expandafter\ifnum\count@@<\count@\relax
+ \expandafter\splinesegment@\expandafter{\segmentnum@}%
+ \DN@{\xywarning@{cannot slide beyond end of curve}%
+ \spline@find{\p@}{\z@}{}\splineslidec@@ \leave@ }%
+ \else
+ \edef\segmentnum@{\the\count@}%
+ \expandafter\splinesegment@\expandafter{\segmentnum@}%
+\splinetrace@{sliding onto segment \segmentnum@}%
+ \expandafter\spline@find\expandafter{\the\dimen@}{#1}{}%
+ \DN@{\checkslidemore@{#1}}%
+ \fi\fi \next@ }
+\xydef@\splineslidec@@{%
+ \dimen@=\splineval@ \advance\dimen@\segmentnum@\p@\advance\dimen@-\p@
+ \edef\tmp@{\endgroup
+ \noexpand\def\noexpand\xysplineval@{\the\dimen@}%
+\splinetrace@{slide = \the\splinelength@}%
+ \X@c=\the\dimen@i \Y@c=\the\dimen3 \d@X=\the\dimen5 \d@Y=\the\dimen7 \postfind@
+ \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@
+ \setupDirection@ii}
+\xydef@\splinealong@#1{\def\postfind@{}\splinealong@@{#1}\z@+%
+ \splineslidec@@
+ \dimen@=\xysplineval@\relax
+ \count@=\xycrvptsnum@\relax \ifnum\count@>\@ne \advance\count@\m@ne\fi
+ \ifnum\count@>\@ne \dimen@nth\count@\dimen@
+ \fi \edef\bthisPLACE@{\expandafter\removePT@\the\dimen@}%
+\splinetrace@{bthisPLACE@=\bthisPLACE@}}%
+\xydef@\splinealong@@#1#2#3{%
+ \edef\tmp@{#1}\relax \dimen@ii\tmp@\p@
+%% \getcrvsegsnum@
+%% \dimen@=-\count@\p@
+ \dimen@=-\p@
+ \expandafter\advance\expandafter\dimen@\splinecorrect@p\p@
+ \expandafter\advance\expandafter\dimen@\splinecorrect@c\p@
+ \edef\tmp@{#1}\relax \dimen@=-\tmp@\dimen@ \relax
+ \expandafter\advance\expandafter\dimen@\splinecorrect@p\p@
+ \getcrvsegsnum@ \multiply \dimen@ by\count@\relax
+\splinetrace@{actual:\the\dimen@; f:\the\dimen@ii; p:\splinecorrect@p, c:\splinecorrect@c}%
+ \count@=\dimen@ \divide\count@\p@ \DN@{\relax}%
+ \def\tmp@{\relax}\ifx\next@\tmp@
+ \expandafter\ifnum\xycrvptsnum@<\count@
+ \xywarning@{parameter value #1 too large}%
+ \DNii@{\relax}\DN@{\begingroup}%
+ \else
+ \edef\xysplineval@{\the\dimen@}%
+ \advance\dimen@-\count@\p@
+ \ifdim\dimen@=\z@
+\splinetrace@{find knot point \the\count@}%
+ \ifnum\count@=\z@ \count@=\@ne \else \dimen@=\p@ \fi
+ \else \advance\count@\@ne
+\splinetrace@{find point \the\dimen@\space on spline segment \the\count@}%
+ \fi
+ \edef\segmentnum@{\the\count@}%
+ \edef\next@{\begingroup\noexpand\splinesegment@{\the\count@}}%
+ \edef\nextii@{%
+ \noexpand\spline@find{\the\dimen@}{#2}{}\noexpand\checksplinefind@{#2}}%
+ \ifx>#3\relax
+ \edef\nextii@{%
+ \noexpand\spline@find{\the\dimen@}{#2}#3\noexpand\checksplinefind@{#2}}%
+ \else\ifx-#3\relax \ifdim\dimen@>\z@\relax \ifdim\dimen@<\p@
+ \dimen@=-\dimen@ \advance\dimen@\p@
+ \edef\nextii@{\noexpand\splinereverse@
+ \noexpand\spline@find{\the\dimen@}{#2}{}\noexpand\checksplinefind@{#2}}%
+ \fi\fi
+ \else\ifx<#3\relax \ifdim\dimen@>\z@\relax \ifdim\dimen@<\p@
+ \dimen@=-\dimen@ \advance\dimen@\p@
+ \edef\nextii@{\noexpand\splinereverse@
+ \noexpand\spline@find{\the\dimen@}{#2}#3\noexpand\checksplinefind@{#2}}%
+ \fi\fi
+ \fi\fi\fi
+ \fi\fi \expandafter\next@\nextii@ }
+\xydef@\checksplinefind@#1{%
+ \dimen@ii=#1\relax \dimen@=\splinelength@
+ \ifdim\dimen@ii=\z@\DN@{}%
+ \else
+ \ifdim\dimen@ii<\z@\advance\dimen@\dimen@ii
+ \else\advance\dimen@-\dimen@ii\fi
+ \ifdim\dimen@<\z@\multiply\dimen@\m@ne\fi
+ \ifdim\dimen@<.2\p@\DN@{}%
+ \else
+ \count@=\segmentnum@\relax
+ \ifdim\dimen@ii<\z@\advance\dimen@ii\splinelength@
+ \ifnum\count@>\@ne\advance\count@\m@ne
+ \edef\next@{\noexpand\splinesegment@{\the\count@}%
+ \noexpand\spline@find\p@{\the\dimen@ii}{}%
+ \noexpand\checksplinefind@{\the\dimen@ii}}%
+ \else
+ \xywarning@{cannot slide \the\dimen@ii\space before start}%
+ \DN@{\splinesegment@\@ne \spline@find\z@\z@{}}\fi
+ \else\advance\dimen@ii-\splinelength@
+ \count@@=\numcontrolpts
+ \ifnum\count@<\count@@ \advance\count@\@ne
+ \edef\next@{\noexpand\splinesegment@{\the\count@}%
+ \noexpand\spline@find\z@{\the\dimen@ii}{}%
+ \noexpand\checksplinefind@{\the\dimen@ii}}%
+ \else
+ \xywarning@{cannot slide \the\dimen@ii\space beyond end}%
+ \DN@{\splinesegment@{\the\count@@}\spline@find\p@\z@{}}\fi
+ \fi
+ \fi\fi \next@ }
+\xydef@\resetbreaks@{%
+ \let\bstartPLACE@=\relax \let\bthisPLACE@=\empty
+ \let\bendPLACE@=\relax \let\bprevPLACE@=\relax}
+\xydef@\invisbreaks@{\resetbreaks@ \let\bstartPLACE@=\empty}
+\xydef@\crvresetbreaks@{\resetbreaks@ \let\bstartPLACE@=\relax }
+\xydef@\initbreaks@{\xy@@{\ifx\bstartPLACE@\relax
+ \def\bstartPLACE@{0}\def\bendPLACE@{1}\else
+ \ifx\bstartPLACE@\empty\def\bstartPLACE@{0}\def\bendPLACE@{1}%
+ \fi\fi}}
+\xydef@\lastbreaks@{\ifx\bprevPLACE@\relax \def\bstartPLACE@{0}%
+ \else \expandafter \bprevPLACE@ \fi
+ \let\bprevPLACE@\relax \let\bendPLACE@\relax}
+\xylet@\bstartPLACE@\relax
+\xylet@\bendPLACE@\relax
+\xylet@\bprevPLACE@\relax
+\xydef@\bthisPLACE@{1}
+\xydef@\splinebreak@{%
+\splinetrace@{***new break*** this:\bthisPLACE@ }%
+ \ifx\bthisPLACE@\empty\def\bendPLACE@{1}%
+ \else\edef\bendPLACE@{\bthisPLACE@}\let\bthisPLACE@\empty\fi
+ \ifx\bprevPLACE@\relax\def\bstartPLACE@{0}\else\expandafter\bprevPLACE@\fi
+ \edef\bprevPLACE@{\def\noexpand\bstartPLACE@{\bendPLACE@}\pfromthec@}%
+\splinetrace@{splineBREAK: \bstartPLACE@ <> \bendPLACE@}%
+ \edef\cv@brend{\cfromthec@}%
+ \edef\cv@brstart{\cfromthep@}%
+ \expandafter\connect\expandafter\crvs\crvSTYLE@@{}%
+ \let\cv@brend=\relax
+ \let\cv@brstart=\relax
+\splinetrace@{**break done**}%
+}
+\xydef@\splinelast@{\splinereset@ \lastbreaks@
+\splinetrace@{splineLAST}%
+ \edef\cv@brend{\cfromthec@}%
+ \edef\cv@brstart{\cfromthep@}%
+ \expandafter\connect\expandafter\crvs\crvSTYLE@@{}%
+ \let\cv@brend=\relax
+ \let\cv@brstart=\relax
+\splinetrace@{**last done**}%
+ \resetbreaks@}
+\xydef@\splineNointercept@{\enter@{\pfromthep@}%
+ \begingroup \splinereset@ \csname cv@0\endcsname \swap@
+ \count@=\ptsnum@ \advance\count@\@ne \csname cv@\the\count@\endcsname
+ \edef\tmp@{\endgroup \X@origin=\the\X@p \Y@origin=\the\Y@p
+ \R@c=\the\d@X \U@c=\the\d@Y}\tmp@
+ \loop@
+ \dimen@=\ifdim\R@c<\z@-\fi\R@c
+ \advance\dimen@ \ifdim\U@c<\z@-\fi\U@c
+ \ifdim\dimen@>10\p@
+ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@
+ \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@
+ \repeat@
+ \intersect@ \leave@}
+\xydef@\splineintercept@{\Hidden@true\Invisible@true\splineintercept@i}
+\xydef@\splineintercept@i{\enter@{\pfromthep@}\begingroup
+ \R@p=\X@c \L@p=\X@p \d@X=\R@p \advance\d@X-\L@p
+ \D@p=\Y@c \U@p=\Y@p \d@Y=\D@p \advance\d@Y-\U@p
+ \dimen@nth\KK@\d@X \edef\sd@X{\expandafter\removePT@\the\d@X}%
+ \dimen@nth\KK@\d@Y \edef\sd@Y{\expandafter\removePT@\the\d@Y}%
+ \dimen@=\sd@Y\L@p \advance\dimen@-\sd@X\U@p
+ \edef\sideOffset@{\the\dimen@}\def\closestseg@{1}%
+ \let\crvconnect@@=\relax \crvconnect@
+ \let\spline@end=\splinef@end
+ \def\spline@start{\bgroup \def\prevnext@{+-}%
+ \def\splinerec@{\let\splinerec@=\splineIrec@ \splineinterceptTest@}%
+ \def\splinedecast@{\let\splinedecast@=\splinedecast@@
+ \def\splineadvance@{\splineIadvance@@}\splinedecast@@}%
+ \def\splineadvance@{\intercepthull@}%
+ \global\let\splinepoint=\splineIpt@@
+ \global\let\splinegoal@=\splinef@pt
+ \global\let\splinefinish@=\splinefinish@@}%
+ \begingroup \splineIsegment@
+ \splinesetparams@ \splined@@ \def\postfind@{}\splineIplace@
+ \setupDirection@ii \leave@ }
+\xydef@\splineIplace@{%
+ \d@X=\dimen5 \d@Y=\dimen7 \dimen@=\splineval@
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@>\tw@ \advance\count@\m@ne
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \dimen@nth\count@\dimen@
+ \fi \edef\tmp@{\endgroup \endgroup
+ \def\noexpand\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \X@c=\dimen@i \Y@c=\dimen3
+ \d@X=\the\d@X \d@Y=\the\d@Y }\tmp@
+\splinetrace@{PLACE = \PLACEf@:(\the\X@c, \the\Y@c)}%
+ \expandafter\edef\expandafter\bthisPLACE@\PLACEf@
+ }
+\xydef@\splineIrec@{\splineinterceptTest@ }
+\xydef@\squineIpt@{\edef\tmp@{\endgroup
+ \def\noexpand\prevnext@{\next}\begingroup}\tmp@ }
+\xydef@\squineIadvance@{\edef\tmp@{\endgroup
+ \def\noexpand\prevnext@{\next}\def\noexpand\howclose@{\howclose@}}%
+ \tmp@ \splineadvance@@\begingroup}
+\xydef@\cubicIpt@{\edef\tmp@{\endgroup
+ \def\noexpand\prevnext@{\next}\begingroup}\tmp@ }
+\xydef@\cubicIadvance@{\edef\tmp@{\egroup
+ \def\noexpand\prevnext@{\next}\def\noexpand\howclose@{\howclose@}}%
+ \tmp@ \splineadvance@@\bgroup}
+\xydef@\splineIsegment@{\DN@{\splinesegment@\@ne}%
+ \ifx\splinesegment@\squinesegment@\else
+ \ifx\splinesegment@\cubicsegment@\else\DN@{\findIsegment@}%
+ \fi\fi\next@}
+\xydef@\findIsegment@{\expandafter\count@\xycrvptsnum@ \count@@\z@
+ \loop@ \advance\count@@\@ne \bgroup
+ \expandafter\splinesegment@\expandafter{\the\count@@}%
+ \xysidesofinterval@
+ \findIsegment@i \repeat@
+ \expandafter\dimen@\prevhowclose@ \relax
+ \ifdim\dimen@=\z@ \edef\closestseg@{\the\count@@}\fi
+ \expandafter\splinesegment@\expandafter{\closestseg@}}
+\xydef@\findIsegment@i{%
+ \expandafter\ifx\next \expandafter\findIsegment@ii
+ \else\expandafter\findIsegment@x\fi \next@ }
+\xydef@\findIsegment@ii{\expandafter\count@\xycrvptsnum@ \relax
+ \advance\count@\m@ne \ifnum\count@>\segmentnum@\relax
+ \expandafter\findIsegment@y\else\expandafter\findIsegment@x\fi}
+\xydef@\findIsegment@x{%
+ \edef\next@{\egroup\def\noexpand\next{\next}%
+ \def\noexpand\prevhowclose@{\prevhowclose@}%
+ \def\noexpand\closestseg@{\closestseg@}\noexpand\iffalse}}
+\xydef@\findIsegment@y{%
+ \edef\next@{\egroup\def\noexpand\next{\next}%
+ \def\noexpand\prevhowclose@{\prevhowclose@}%
+ \def\noexpand\closestseg@{\closestseg@}\noexpand\iftrue}}
+\xydef@\xysidesofinterval@{\bgroup
+ \L@p=\sd@X\Y@p \advance\L@p-\sd@Y\X@p \advance\L@p\sideOffset@
+ \U@p=\sd@X\Y@c \advance\U@p-\sd@Y\X@c \advance\U@p\sideOffset@
+ \def\this@{}\ifdim\L@p>\almostz@ \ifdim\U@p>\almostz@ \def\next{++}\else
+ \ifdim\U@p<-\almostz@ \def\next{+-}\else\def\next{+0}\def\this@{-}\fi\fi
+ \else\ifdim\L@p<-\almostz@ \ifdim\U@p>\almostz@ \def\next{-+}\else
+ \ifdim\U@p<-\almostz@ \def\next{--}\else\def\next{-0}\def\this@{+}\fi\fi
+ \else \ifdim\U@p>\almostz@ \def\next{0+}\else
+ \ifdim\U@p<-\almostz@ \def\next{0-}\else\def\next{00}\def\this@{+}\fi\fi
+ \fi\fi
+ \ifx\this@\empty
+ \L@p=\ifdim\L@p<\z@-\fi\L@p \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\L@p<\U@p \edef\howclose@{\the\L@p}\def\this@{-}%
+ \else \edef\howclose@{\the\U@p}\def\this@{+}\fi
+ \else\def\howclose@{0.0pt}\fi
+\splinetrace@{\next:\this@:\howclose@;\the\splineval@:%
+ (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c)}%
+ \ifdim\howclose@<\prevhowclose@\relax
+ \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}%
+ \def\noexpand\howclose@{\howclose@}\def\noexpand\prevhowclose@{\howclose@}%
+ \def\noexpand\closestseg@{\segmentnum@}}%
+\splinetrace@{closest yet: \howclose@, in segment \segmentnum@}%
+ \else
+ \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}%
+ \def\noexpand\howclose@{\howclose@}}%
+ \fi \tmp@ }
+\xydef@\splineinterceptTest@{%
+ \xysidesofinterval@ \DN@{\splineadvance@}%
+ \DNii@{0.0pt}\ifx\howclose@\nextii@ \DN@{\splineclosest@}%
+ \else\expandafter\ifx\next \expandafter\ifx\prevnext@
+ \ifx\next\prevnext@\else\DN@{\X@c=\X@p \Y@c=\Y@p
+ \splinefinishf@}\fi\fi
+ \else \DN@{\splinedecast@}\fi\fi
+ {\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\next@
+ \else\aftergroup\splineclosest@
+\splinetrace@{too close: (\the\X@p,\the\Y@p)::(\the\X@c,\the\Y@c)}%
+ \fi}}
+\xydef@\splineclosest@{%
+ \expandafter\ifx\this@-\relax
+ \X@c=\X@p \Y@c=\Y@p \global\advance\splineval@-\splinedepth@
+ \fi \splinefinishf@ }%
+\xydef@\squinetestcvxhull@{\begingroup
+\splinetrace@{hull: closest in segment \closestseg@}%
+ \expandafter\splinesegment@\ifx\undefined\closestseg@\@ne\else\closestseg@\fi
+ \X@c=\L@c \Y@c=\U@c \xysidesofinterval@
+ \expandafter\ifx\next \expandafter\splineoutsidehull@@
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\cubictestcvxhull@{\begingroup
+ \expandafter\splinesegment@\ifx\undefined\closestseg@\@ne\else\closestseg@\fi
+ \X@c=\L@c \Y@c=\U@c \xysidesofinterval@
+ \expandafter\ifx\next \expandafter\cubictestcvxhull@i
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\cubictestcvxhull@i{%
+ \X@c=\R@c \Y@c=\D@c \xysidesofinterval@
+ \expandafter\ifx\next \expandafter\splineoutsidehull@@
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\xysidesofhull@{\bgroup
+ \L@p=\sd@X\Y@p \advance\L@p-\sd@Y\X@p \advance\L@p\sideOffset@
+ \U@p=\sd@X\Y@c \advance\U@p-\sd@Y\X@c \advance\U@p\sideOffset@
+ \L@p=\ifdim\L@p<\z@-\fi\L@p \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\L@p<\U@p \edef\howclose@{\the\L@p}\def\this@{-}%
+ \else \edef\howclose@{\the\U@p}\def\this@{+}\fi
+ \ifx\splinedecast@\squinedecast@ \D@c=\U@c \R@c=\L@c \fi
+ \L@p=\sd@X\U@c \advance\L@p-\sd@Y\L@c \advance\L@p\sideOffset@
+ \L@p=\ifdim\L@p<\z@-\fi\L@p
+ \expandafter\if\this@-%
+ \ifdim\L@p<\prevhowclose@ \def\next{-+}\else \def\next{--}\fi
+ \else
+ \ifdim\L@p<\howclose@ \def\next{-+}\else
+ \U@p=\sd@X\D@c \advance\U@p-\sd@Y\R@c \advance\U@p\sideOffset@
+ \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\U@p<\howclose@ \def\next{+-}\else \def\next{++}\fi
+ \fi\fi
+ \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}%
+ \def\noexpand\howclose@{\howclose@}}\tmp@ }
+\def\PLACE@intercept@#1{%
+ \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}%
+ \xy@@ix@{#1}\xy@@{\plainxy@ \def\Creset@@{}%
+ \expandafter\POS\the\toks9\relax
+ \DNii@{\crvreset@}\ifx\nextii@\Creset@@ \edef\next@{\endgroup
+ \def\noexpand\xyinterceptpts@{\the\crvpts@}%
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p
+ \noexpand\CCintercept@@ }%
+ \else \edef\next@{\endgroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p
+ \noexpand\Cintercept@@ }%
+ \fi \next@ \leave@}%
+ \PLACE@@}
+\xydef@\CCintercept@@{\splineSintercept@}
+\xydef@\splineSintercept@{\enter@{\pfromthep@}\begingroup
+ \Creset@@ \edef\connect@pts{\cfromthec@ \pfromthep@}%
+ \xyinterceptpts@ \splinereset@ \connect@pts \splineintercept@
+ \edef\next@{\endgroup \cfromthec@ \DirectionfromtheDirection@ }%
+ \next@ \let\xyinterceptpts@=\empty \leave@}
+\xydef@\nointerceptwarning@{\let\nointerceptwarning@=\relax
+ \xywarning@{perhaps no curve intersection, or many. }}
+\xydef@\intercepthull@{\nointerceptwarning@
+ \expandafter\def\expandafter\prevnext@\expandafter{\next}%
+ \splinetestcvxhull@}
+\xydef@\splinetestcvxhull@{\begingroup
+ \X@c=\L@c \Y@c=\U@c \splinetrace@{hull:}\xysidesofinterval@
+ \expandafter\ifx\next \expandafter\splineoutsidehull@@
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\splineinsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}%
+ \noexpand\interceptinsidehull@}\tmp@ }
+\xydef@\interceptinsidehull@{\edef\prevhowclose@{\howclose@}%
+ \splinedecast@@ }
+{\xdef\next{\the\maxdimen}}
+\xylet@\prevhowclose@=\next
+\xydef@\splineoutsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}%
+ \noexpand\interceptoutsidehull@}\tmp@}
+\xylet@\splineoutsidehull@@=\splineoutsidehull@
+\xydef@\interceptoutsidehull@{\dimen@=\howcvxclose@ \relax
+\splinetrace@{OUTSIDE HULL: \the\dimen@ : (\howclose@)(\prevhowclose@)}%
+ \let\splinedecast@=\splinedecast@@
+ \let\splinerec@\splineHnear@test
+ \let\splineadvance@\splineIadvance@@
+ \splinedecast@@ }
+\xydef@\splineHnear@test{%
+ \xysidesofhull@ \DN@{\splinedecast@}%
+ \ifdim\howclose@<\prevhowclose@\edef\howclose@{\prevhowclose@}\fi
+ \expandafter\if\this@-%
+ \expandafter\ifx\next\DN@{\splineclosest@}\fi
+ \else
+ \expandafter\ifx\next\DN@{\splineadvance@}\fi
+ \fi
+ {\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\next@
+ \else\aftergroup\splineclosest@
+\splinetrace@{too close: (\the\X@p,\the\Y@p)::(\the\X@c,\the\Y@c)}%
+ \fi}}
+\xydef@\cubicoutsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}}\tmp@
+ \edef\prevhowcvxclose@{\howcvxclose@}\begingroup
+ \X@p=\R@c \Y@p=\D@c \splinetrace@{hullii:}\xysidesofinterval@
+ \expandafter\ifx\next \expandafter\cubicoutsidehull@i
+ \else \expandafter\cubicinsidehull@\fi}
+\xydef@\cubicinsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howclose@{\howclose@}}\tmp@
+ \cubicoutsidehull@ii }
+\xydef@\cubicoutsidehull@i{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}}\tmp@
+ \dimen@=\prevhowcvxclose@\relax
+ \ifdim\dimen@<\howcvxclose@ \relax
+ \edef\howcvxclose@{\the\dimen@}\expandafter\interceptoutsidehull@
+ \else \expandafter\cubicoutsidehull@ii\fi }
+\xydef@\cubicoutsidehull@ii{%
+ \def\splineadvance@{\splineadvance@@}%
+ \def\splinepoint\endgroup{\endgroup
+ \global\let\splinepoint=\relax
+ \def\splineadvance@{\intercepthull@}}%
+ \splinedecast@@ }%
+\xydef@\splineHadvance@{\futurelet\next@\splineHadvance@i}
+\xydef@\splineHadvance@i{\ifx\next@\endgroup
+ \expandafter\splineHadvance@x\else\expandafter\splineclosest@\fi}
+\xydef@\splineHadvance@x{\edef\tmp@{\endgroup
+ \def\noexpand\prevhowclose@{\prevhowclose@}%
+ \def\noexpand\prevnext@{\next}\def\noexpand\howcvxclose@{\howclose@}}%
+ \tmp@ \dimen@=\prevhowclose@ \relax
+ \ifdim\dimen@<\howclose@ \relax \DN@{\splineclosest@\begingroup}%
+ \else\ifdim\howcvxclose@=\dimen@\DN@{\splineclosest@\begingroup}%
+ \else\DN@{\splineadvance@@\begingroup}\fi\fi \next@ }
+\xydef@\xyclearcrv@{\cv@end\cv@restore\loop@
+ \expandafter\let\csname cv@\number\crv@cnt@\endcsname\relax
+ \ifnum\crv@cnt@>0\advance\crv@cnt@\m@ne\repeat@
+ \let\cv@start=\relax \let\cv@end=\relax \let\cv@restore=\relax \POS}
+\xylet@\clearcurve=\xyclearcrv@
+\xylet@\numcontrolpts=\xynumctrlpts@
+\xydef@\xycontrolpt@#1{{%
+ \ifnum#1<\z@\aftergroup\cv@restore\aftergroup\cv@start
+ \else
+ \expandafter\count@\xycrvptsnum@\relax \advance\count@\@ne
+ \ifnum#1>\count@ \ifx\cv@end\relax
+ \expandafter\aftergroup\csname cv@\number#1\endcsname
+ \else\aftergroup\cv@end\fi
+ \else
+ \expandafter\ifx\csname cv@\number#1\endcsname\relax
+ \ifnum#1=\z@\aftergroup\cv@start\else\aftergroup\cv@end\fi
+ \else\expandafter\aftergroup\csname cv@\number#1\endcsname
+ \fi\fi\fi}}%
+\xylet@\xycontrolpt=\xycontrolpt@
+\xydef@\startxycurve@@{\crv@cnt@=\z@
+ \edef\cv@start{\cfromthep@}%
+ \ifdim\zz@\R@c \ifdim\zz@\L@c \ifdim\zz@\D@c \ifdim\zz@\U@c
+ \Edge@c={\zeroEdge}\fi\fi\fi\fi
+ \edef\cv@end{\cfromthec@}%
+ \edef\cv@restore{\pfromthep@\basefromthebase@}}
+\xylet@\startxycurve@=\startxycurve@@
+\xylet@\cv@start=\relax
+\xylet@\cv@end=\relax
+\xylet@\cv@restore=\relax
+\xydef@\readxycurve@{\startxycurve@\xycrvmods@}
+\xylet@\readxycurve=\readxycurve@
+\xydef@\addtocrv@{\advance\crv@cnt@\@ne
+ \edef\tmp@{%
+ \expandafter\noexpand\csname cv@\number\crv@cnt@\endcsname}%
+ \expandafter\edef\tmp@{\cfromthec@}%
+ \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def
+ \expandafter\noexpand\tmp@{\X@c=\the\X@c \Y@c=\the\Y@c }}}\tmp@
+ \edef\xycrvptsnum@{\the\crv@cnt@}%
+}
+\xydef@\xycrvdrop@{ {\zerodot}}
+\xydef@\xycrvconn@{}
+\xydef@\xyc@trlpts@{\def\xycrvdrop@{ \dir{x}}\def\xycrvconn@{}%
+ \afterCURVE{\savecrvobjects@\xyctrlpts@}\readxycurve@}
+\xydef@\xyc@trlpts@@{%
+ \afterCURVE{\savecrvobjects@\def\xycrvdrop@{ \dir{x}}%
+ \def\xycrvconn@{}\xyctrlpts@}\readxycurve@}
+\xydef@\xyc@vxhull@{\def\xycrvdrop@{ {}}%
+ \edef\xycrvconn@{ \noexpand\dir{\addDASH@{}}}%
+ \afterCURVE{\savecrvobjects@\xycvxhull@}\readxycurve@}
+\xydef@\xyc@vxhull@@{%
+ \afterCURVE{\savecrvobjects@\def\xycrvdrop@{ {}}%
+ \edef\xycrvconn@{ \noexpand\dir{\addDASH@{}}}\xycvxhull@}\readxycurve@}
+\xylet@\controlpts=\xyc@trlpts@
+\xylet@\convexhull=\xyc@vxhull@
+\xydef@\savecrvobjects@{\bgroup
+ \expandafter\toks@\expandafter{\xycrvdrop@}%
+ \expandafter\toks@ii\expandafter{\xycrvconn@}%
+ \edef\tmp@{\egroup\noexpand\def\noexpand\resetcrvobjects@{%
+ \noexpand\def\noexpand\xycrvdrop@{\the\toks@}%
+ \noexpand\def\noexpand\xycrvconn@{\the\toks@ii}%
+ }}\tmp@}
+\xydef@\afterCURVE#1{\def\afterCURVE@{#1}}
+\xydef@\endxycurve@{\cv@end\savectrlptsnum@
+ \expandafter\def\csname params@\endcsname{\the\crvpts@}%
+ \cv@restore\afterCURVE@\POS}
+\xylet@\endcurve=\endxycurve@
+\xydef@\xyctrlpts@{\cv@end \cv@restore
+ \def\crvconnect@{\straitconnect@}%
+ \ifnum\crv@cnt@>\z@
+ \count@@@=\@ne \DN@{\loop@\xycontrolpt@{\count@@@}\relax
+ \expandafter\xycvxhulldrop@\xycrvdrop@
+ \ifnum\crv@cnt@>\count@@@\advance\count@@@\@ne\repeat@
+ \cv@end \cv@restore }%
+ \else\DN@{\relax}\fi \next@ }
+\xylet@\xyctrlpts=\xyctrlpts@
+\xydef@\addtocrvpts@#1{\crvpts@=\expandafter{\the\crvpts@#1}}
+\xydef@\savescope@{\crvpts@={}%
+ \edef\tmp@{\expandafter\noexpand\csname cv@0\endcsname}%
+ \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def
+ \expandafter\noexpand\tmp@{\X@c=\the\X@p \Y@c=\the\Y@p}}}%
+ \tmp@ }
+\xydef@\savectrlptsnum@{%
+ \advance\crv@cnt@\@ne \edef\tmp@{%
+ \expandafter\noexpand\csname cv@\number\crv@cnt@\endcsname}%
+ \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def
+ \expandafter\noexpand\tmp@{\X@c=\the\X@c \Y@c=\the\Y@c}}}\tmp@
+ \advance\crv@cnt@\m@ne
+ \edef\tmp@{\expandafter\noexpand\csname ptsnum@\endcsname}%
+ \edef\tmp@{\noexpand\addtocrvpts@{%
+ \noexpand\def\expandafter\noexpand\tmp@{\number\crv@cnt@}}}%
+ \tmp@ }
+\xydef@\xycvxhull@{\cv@end \cv@restore
+ \addtocrvpts@{\def\crvconnect@{\straitconnect@}}%
+ \def\crvconnect@{\straitconnect@}%
+ \ifnum\crv@cnt@>\z@
+ \count@@@=\@ne\relax \DN@{\loop@\xycontrolpt@{\count@@@}\relax
+ \expandafter\xycvxhulldrop@\xycrvdrop@
+ {\expandafter\connect\xycrvconn@{}}\pfromc@
+ \ifnum\crv@cnt@>\count@@@\relax \advance\count@@@\@ne\repeat@
+ \cv@end }%
+ \else
+ \ifx\empty\xycrvconn@
+ \edef\xycrvconn@{\noexpand!C\noexpand\dir{\addDASH@{}}}\fi
+ \DN@{\relax}\fi \next@
+ {{\expandafter\connect\xycrvconn@{}}}%
+ \cv@end \cv@restore }
+\xylet@\xycvxhull=\xycvxhull@
+\xydef@\xycvxhulldrop@#1#{\drop@{#1}}
+\xydef@\savespline@{%
+\splinetrace@{savespline@:}%
+ \edef\endspline@{\endgroup
+ \savesplineparams@ \savesplinerefs@
+ \X@min=\the\X@min\relax \X@max=\the\X@max\relax
+ \Y@min=\the\Y@min\relax \Y@max=\the\Y@max\relax
+ \ifInvisible@\noexpand\Invisible@true
+ \else\noexpand\Invisible@false\fi
+ }\endspline@
+ \edef\tmp@{\noexpand\addtocrvpts@{\savesplineparams@}}\tmp@
+ \xycontrolpt@\z@ \cv@end }
+\xydef@\savesplineparams@{%
+ \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}}
+\xydef@\savesplinerefs@{%
+ \noexpand\def\noexpand\xysplineparams@{%
+ \expandafter\noexpand\xysplineparams@}%
+ \noexpand\def\noexpand\xysplineedges@{%
+ \expandafter\noexpand\xysplineedges@}%
+}
+\xynew@{box}\splinebox@
+\xynew@{dimen}\splineval@
+\xynew@{dimen}\splinedepth@
+\xynew@{dimen}\splinetol@
+\xynew@{dimen}\splinelength@
+\xynew@{if}\ifsplinefar@
+\xynew@{if}\ifsplineplot@
+\xydef@\splinetracing{\let\splinetrace@=\W@}
+\xydef@\splineignore@#1{}
+\xylet@\splinetrace@=\splineignore@
+\xydef@\readsplineparams@{%
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+ \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@}
+\xydef@\getsplineedges@safe#1@@{\DN@{#1}%
+ \ifx\next@\empty \DN@{\getsplineedges@.0pt;0.0pt,0.0pt;0.0pt,}%
+ \else \DN@{\getsplineedges@safe@#1@@}\fi \next@}
+\xydef@\getsplineedges@safe@#1;#2,#3@@{\DN@{#3}%
+\splinetrace@{getsplineedges@safe}%
+ \ifx\next@\empty \DN@{\getsplineedges@#1;#2,0.0pt;0.0pt,}%
+ \else \DN@{\getsplineedges@#1;#2,#3}\fi \next@}
+\xydef@\getsplineedges@#1;#2,#3;#4,{%
+ \global\dimen@i=#1\global\dimen5=#2\relax
+ \dimen@=#3\multiply\dimen@\m@ne \advance\dimen@\splinelength@
+ \global\dimen3=\dimen@
+ \dimen@=#4\relax
+ \ifdim\dimen@>\p@ \xywarning@{edge out-of-range: \the\dimen@}%
+ \count@=\dimen@ \divide\count@\p@
+ \advance\dimen@-\count@\p@ \multiply\dimen@\m@ne
+ \advance\dimen@ \count@\p@ \advance\dimen@\p@
+\splinetrace@{\the\dimen@}%
+ \else
+ \multiply\dimen@\m@ne \advance\dimen@\p@
+ \fi
+ \global\dimen7=\dimen@ }
+\xydef@\dimen@half{%
+ \advance\dimen@ \ifdim\dimen@<\z@-\fi 1sp \divide\dimen@\tw@}
+\xydef@\halve@dimen#1{\dimen@=#1\relax \dimen@half #1=\dimen@}
+\xydef@\dimen@nth#1#2{\dimen@=#2\relax \dimen@ii=#1sp
+ \advance\dimen@ \ifdim\dimen@<\z@-\fi.5\dimen@ii
+ \divide\dimen@ by#1\relax #2=\dimen@}
+\xydef@\splinetolerance@#1{\dimen@=#1\relax
+ \ifdim\dimen@>\z@ \splinetol@=\dimen@
+ \else\splinetol@=.4\p@\fi}
+\xylet@\splinedefaulttol@=\relax
+\xydef@\splinetolerance#1{\splinetolerance@{#1}%
+ \edef\splinedefaulttol@{\splinetol@=\the\splinetol@}}
+\splinetolerance\z@
+\xydef@\SloppyCurves{\splinetolerance{.8\p@}}
+\xydef@\xylowtolerance@{\splinedefaulttol@
+ \ifdim\splinetol@<\p@ \divide\splinetol@\tw@ \fi}
+\xywarnifdefined\splinedrop@
+\xydef@\setstdsplinedrop@{%
+ \setbox\splinebox@=\hbox\bgroup
+ \setboxz@h{\expandafter\object\xycrvdrop@{}}%
+ \splinedefaulttol@ \dimen@=\wd\z@ \dimen@ii=\ht\z@ \advance\dimen@ii\dp\z@
+ \ifdim\dimen@ii>\dimen@ \dimen@=\dimen@ii \fi \dimen@=1.4142\dimen@
+ \ifdim\dimen@>\splinetol@ \splinetol@=\dimen@\else\dimen@=\splinetol@\fi
+ \dimen@=.5\wd\z@
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \kern-\dimen@ \Drop@@ \kern\dimen@
+ \edef\tmp@{\egroup \splinetol@=\the\splinetol@
+ \ifInvisible@\noexpand\Invisible@true
+ \else\noexpand\Invisible@false\fi}\tmp@
+ \edef\splinedefaulttol@{\splinetol@=\the\splinetol@}%
+ \def\splinedrop@{\copy\splinebox@\splineextra@@}}
+\xywarnifdefined\splineconn@
+\xydef@\stdsplineconn@{{\setsplinedir@
+ \setboxz@h\bgroup\expandafter\object\xycrvconn@{}%
+ \edef\tmp@{\egroup\L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c
+ \noexpand\def\noexpand\Drop@@}\expandafter\tmp@\expandafter{\Drop@@}%
+ \setboxz@h{\kern-\L@c \boxz@}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \Drop@@}}
+\xydef@\setcrvobjects@{\setstdsplinedrop@ \def\splineconn@{\stdsplineconn@}}
+\xylet@\splineextra@@=\relax
+\xydef@\splinenear@#1#2#3#4{{\d@X=#1\advance\d@X-#2%
+ \ifdim\d@X<\z@ \d@X=-\d@X\fi
+ \ifdim\splinetol@<\d@X \aftergroup\splinefar@true
+ \else \d@Y=#3\advance\d@Y-#4\ifdim\d@Y<\z@ \d@Y=-\d@Y\fi
+ \ifdim\splinetol@<\d@Y\aftergroup\splinefar@true
+ \else \xydist@\d@X\d@Y
+ \ifdim\splinetol@<\dimen@ \aftergroup\splinefar@true
+ \else
+ \ifdim\dimen@<.1\splinetol@\aftergroup\splinetooclose@\fi
+ \fi\fi\fi}}
+\xydef@\splineadvance@@{\global\advance\splineval@\splinedepth@}
+\xydef@\splinetooclose@{\aftergroup\aftergroup\aftergroup\splinetooclose@@}
+\xydef@\splinetooclose@@{\def\splineplotpt@{\relax}}
+\xydef@\splinepoint@@{%
+\splinetrace@{P@:(\the\X@c,\the\Y@c)::\the\splineval@;\the\splinedepth@}%
+ {\splinetest@\ifsplineplot@\relax\else\aftergroup\splinecontinue\fi}}
+\xydef@\splinepoint@{%
+ {\splinetest@\ifsplineplot@\aftergroup\splinecontinue\fi}}
+\xylet@\splinepoint=\splinepoint@
+\xydef@\splinecontinue@{%
+ \global\let\splinepoint=\splinepoint@@
+ \global\let\splinecontinue=\splinecontinue@@}
+\xydef@\splinecontinue@@{%
+ \global\let\splinepoint=\splinepoint@
+ \global\let\splinecontinue=\relax}
+\xylet@\splinecontinue=\splinecontinue@
+\xydef@\splineknotpoint@{{\X@p=\X@c \Y@p=\Y@c \cv@start
+ \the\Edge@c\@ne \ifInside@\else\aftergroup\splineknotpoint@@\fi}}%
+\xydef@\splineknotpoint@@{{\X@p=\X@c \Y@p=\Y@c \cv@end
+ \the\Edge@c\@ne \ifInside@\else \aftergroup\splinepoint\fi}}%
+\xylet@\firstsplinepoint@=\splineknotpoint@
+\xylet@\lastsplinepoint@= \splineknotpoint@
+\xydef@\splined@@@{%
+\splinetrace@{finding end types}%
+\splinetrace@{bstartPLACE@:\bstartPLACE@; bendPLACE@:\bendPLACE@}%
+ \DN@{\splinescan@}\ifx\bstartPLACE@\empty
+ \ifx\bendPLACE@\relax\def\bendPLACE@{1}\fi
+ \else\ifx\bstartPLACE@\relax
+ \else\ifx\bstartPLACE@\undefined
+ \else
+ \DN@{\splinescanbreak@}\ifx\bendPLACE@\relax\def\bendPLACE@{1}\fi
+ \DNii@{0}\ifx\bstartPLACE@\nextii@
+ \DNii@{1}\ifx\bendPLACE@\nextii@\DN@{}%
+ \fi\fi
+ \fi\fi\fi \next@ }%
+\xydef@\splineStarttest@{{\X@p=\X@c \Y@p=\Y@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineEndtest@{{\X@p=\X@c \Y@p=\Y@c \cv@end \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineBreakStarttest@{{\X@p=\X@c \Y@p=\Y@c \cv@brstart \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineBreakEndtest@{{\X@p=\X@c \Y@p=\Y@c \cv@brend \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xylet@\splineStarttest=\splineStarttest@
+\xylet@\splineEndtest=\splineEndtest@
+\xydef@\splineSlowStarttest{{\X@p=\X@c \Y@p=\Y@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@maybe@@\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineSlowEndtest{{\X@p=\X@c \Y@p=\Y@c \cv@end \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@maybe@@\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineplot@maybe{\splineplot@false}%
+\xylet@\splineplot@maybe@@=\splineplot@maybe
+\xydef@\splinescan@{\bgroup%
+ \expandafter\def\xysplineedges@{\z@;\z@,\z@;\z@,}%
+ \bgroup \cv@start
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \gdef\splineedges@{\z@;\z@,}%
+ \else\aftergroup\splinestartScan@\fi
+ \egroup \relax
+ \bgroup \cv@end
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@
+ \getcrvsegsnum@ \edef\segmentnum@{\the\count@}%
+ \splineval@=\z@ \splineRecordEndValue@
+ \else\aftergroup\splineendScan@\fi
+ \egroup \egroup
+ \expandafter\testsplineedges@\splineedges@;,@@%
+ \expandafter\edef\xysplineedges@{\splineedges@}%
+ \global\let\splineedges@=\relax
+\splinetrace@{edge params: \xysplineedges@}}%
+\xydef@\testsplineedges@#1;#2,#3;#4,#5@@{%
+ \DN@{#5}\ifx\next@\empty
+ \DNii@{#4}\ifx\nextii@\empty
+ \xynoedgespline@{end}\def\splineedges@{#1;#2,\z@;\z@,}\fi
+ \DNii@{#2}\ifx\nextii@\empty
+ \xynoedgespline@{start}\def\splineedges@{\z@;\z@,\z@;\z@,}\fi
+ \fi }
+\xydef@\xynoedgespline@#1{\xywarning@{#1 edge of spline not found}}%
+\xydef@\splinestartScan@{\bgroup
+\splinetrace@{scan for start}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindStart@
+ \let\spline@end=\spline@end@@
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\splinelength@=\z@
+ \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}%
+ \edef\splineedges@{}%
+ \expandafter\let\xysplineedges@\relax
+ \xylowtolerance@ \splined@@
+ \ifx\splineedges@\empty\expandafter\splineslowScan@\fi
+ \ifx\splineedges@\relax\expandafter\splinenostart@\fi
+ \egroup }%
+\xydef@\splineslowScan@{%
+ \let\splineStarttest=\splineSlowStarttest
+ \let\splinescanStarttest=\relax
+ \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}%
+ \splined@@ }
+\xydef@\splineslowEnd@{%
+ \global\let\splineEndtest=\splineSlowEndtest
+ \let\splinescanEndtest=\relax
+ \def\splinerec@{\let\splinerec@=\splineErec@ \splinedecast@@}%
+ \splined@@ }
+\xydef@\splinenostart@{%
+ \def\segmentnum@{1}\splinelength@=\z@ \splineval@=\z@
+ \xynoedgespline@{start}\splineRecordValue@ }
+\xydef@\splineendScan@{\bgroup
+ \bgroup
+\splinetrace@{scan for end}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindEnd@
+ \let\spline@end=\spline@end@@
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\splinelength@=\z@
+ \global\let\splineEndtest=\splineEndtest@
+ \def\splinerec@{\let\splinerec@=\splineErec@ \splinedecast@@}%
+ \expandafter\def\expandafter\prevedges@\expandafter{\splineedges@}%
+ \xylowtolerance@ \splined@@
+ \ifx\splineedges@\prevedges@\expandafter\splineslowScan@\fi
+ \egroup \egroup}
+\xydef@\splinescanbreak@{%
+\splinetrace@{SCANBREAK}%
+ \gdef\breakedges@{}%
+ \DN@{0}\ifx\next@\bstartPLACE@
+ \DN@{\bgroup \def\tmp@####1;####2,####3;####4,{%
+ \global\splineval@=####2\relax}%
+ \expandafter\expandafter\expandafter\tmp@\xysplineedges@
+ \def\segmentnum@{1}\splineRecordBreakValue@ \egroup}%
+ \else
+ \bgroup \cv@start
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\splinezerostart
+ \else\aftergroup\splinewidestart\fi
+ \egroup
+ \fi \next@
+ \DN@{1}\ifx\next@\bendPLACE@
+ \DN@{\bgroup \def\tmp@####1;####2,####3;####4,{%
+ \global\splineval@=####4\relax}%
+ \expandafter\expandafter\expandafter\tmp@\xysplineedges@
+%% \multiply\splineval@\m@ne \advance\splineval@\p@
+%% \def\segmentnum@{1}
+ \getcrvsegsnum@ \edef\segmentnum@{\the\count@}%
+ \global\multiply\splineval@\count@
+ \splineRecordEndBreakValue@ \egroup}%
+ \else
+ \bgroup \cv@end
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\splinezeroend
+ \else\aftergroup\splinewideend\fi
+ \egroup
+ \fi \next@
+ \expandafter\def\expandafter
+ \xybreakedges@\expandafter{\breakedges@}%
+ \global\let\breakedges@=\relax
+\splinetrace@{break params: \xybreakedges@::\bstartPLACE@--\bendPLACE@}%
+ \expandafter\let\xysplineedges@\xybreakedges@ }
+\xydef@\getcrvsegsnum@{%
+ \count@=\ptsnum@\relax \ifnum\count@>\@ne\advance\count@\m@ne\fi}
+\xydef@\splinezerostart{\DN@{\bgroup
+\splinetrace@{splinezerostart:}%
+ \dimen@=\bstartPLACE@\p@
+ \global\splineval@=\dimen@
+ \splineRecordBreakValue@ \egroup }}
+\xydef@\splinezeroend{\DN@{\bgroup
+\splinetrace@{splinezeroend:}%
+ \dimen@=\bendPLACE@\p@
+ \multiply\dimen@\m@ne \advance\dimen@\p@
+ \def\segmentnum@{0}\global\splineval@=\dimen@
+ \splineRecordEndBreakValue@ \egroup }}
+\xydef@\splinewidestart{\DN@{\bgroup
+ \splinetrace@{scan for start}%
+ \let\splinefbcontinue@=\breakstartcontinue@
+ \let\splinef@pt=\splinef@breakpt
+ \let\splinef@end=\break@start
+ \edef\tmp@{{\bstartPLACE@}}%
+ \expandafter\splinealong@@\tmp@\z@>\endgroup\egroup }}
+\xydef@\splinewideend{\DN@{\bgroup
+ \splinetrace@{scan for wide end}%
+ \let\splinefbcontinue@=\breakendcontinue@
+ \let\splinef@pt=\splinef@breakpt
+ \let\splinef@end=\break@end
+ \edef\tmp@{{\bendPLACE@}}%
+ \expandafter\splinealong@@\tmp@\z@<\endgroup\egroup }}
+\xydef@\splineSrec@{{%
+\splinetrace@{v=\the\splineval@ + d=\the\splinedepth@ :
+ (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c):Srec }%
+ \splineStarttest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \global\advance\splineval@ .5\splinedepth@
+ \else\aftergroup\splinedecast@@ \fi
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\splinefindStart@@{\bgroup \bgroup
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinepoint=\relax
+ \let\splinegoal@=\splineRecordValue@ \global\dimen5=\z@
+ {\X@c=\X@p \Y@c=\Y@p \splinescanStarttest }%
+}
+\xydef@\splinefindStart@{%
+ \expandafter\crv@cnt@\xycrvptsnum@\relax
+ \ifnum\crv@cnt@>\tw@
+ \crv@cnt@=\@ne \splineplot@false \splinesegment@{\crv@cnt@}%
+ {\splineStarttest
+ \ifsplineplot@\aftergroup\splineplot@true\fi}%
+ \ifsplineplot@ \else \searchforStartsegment@ \fi
+ \splinesegment@{\crv@cnt@}%
+\splinetrace@{start is in segment \segmentnum@}%
+ \else \splinesegment@\@ne \fi
+ \splineplot@false \splinefindStart@@
+}
+\xydef@\searchforStartsegment@{\splineplot@true\loop@
+ \advance\crv@cnt@\@ne
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@=\crv@cnt@\expandafter\splineplot@false
+ \else
+ \splinesegment@{\crv@cnt@}{\splineStarttest
+ \ifsplineplot@\aftergroup\splineplot@false
+ \else\aftergroup\splineplot@true\fi }%
+ \fi \ifsplineplot@\repeat@
+}
+\xydef@\splinefindEnd@@{\bgroup \bgroup
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+\splinetrace@{params:\xysplineparams@}%
+ \splinereverse@@
+\splinetrace@{params:\xysplineparams@}%
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinepoint=\splinescanEndtest
+ \let\splinegoal@=\splineRecordEndValue@ \global\dimen5=\z@
+ {\X@c=\X@p \Y@c=\Y@p \splinescanEndtest }%
+}
+\xydef@\splinereverse@@{\splinereverse@@@}
+\xydef@\splinereverse@@@{%
+ \def\postspline@{\d@X=-\d@X \d@Y=-\d@Y}%
+ \dimen@ii=\X@c \X@c=\X@p \X@p=\dimen@ii
+ \dimen@ii=\Y@c \Y@c=\Y@p \Y@p=\dimen@ii
+ \global\dimen5=-\dimen5\relax
+ \global\advance\dimen5\splinelength@ }
+\xydef@\postspline@{}
+\xydef@\splineErec@{{%
+ \dimen@=\splineval@ \advance\dimen@\splinedepth@
+\splinetrace@{ER (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+\the\dimen@,\the\splinedepth@}%
+ \splineEndtest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \else\aftergroup\splinedecast@@ \fi
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\splinefindEnd@{%
+ \expandafter\crv@cnt@\xycrvptsnum@\relax
+ \ifnum\crv@cnt@>\tw@
+ \advance\crv@cnt@\m@ne
+ \splineplot@false \splinesegment@{\crv@cnt@}%
+ {\X@c=\X@p \Y@c=\Y@p \splineEndtest
+ \ifsplineplot@\aftergroup\splineplot@true\fi }%
+ \ifsplineplot@
+ \else \searchforEndsegment@ \fi
+ \splinesegment@{\crv@cnt@}%
+\splinetrace@{end is in segment: \segmentnum@ }%
+ \else \splinesegment@\@ne \fi
+ \splineplot@false\splinefindEnd@@
+}
+\xydef@\searchforEndsegment@{\splineplot@true\loop@
+ \advance\crv@cnt@\m@ne
+ \ifnum\crv@cnt@=\z@\expandafter\splineplot@false
+ \else
+ \splinesegment@{\crv@cnt@}{\X@c=\X@p \Y@c=\Y@p \splineEndtest
+ \ifsplineplot@\aftergroup\splineplot@false
+ \else\aftergroup\splineplot@true\fi}%
+ \fi \ifsplineplot@\repeat@
+}
+\xydef@\splinescanStarttest{%
+\splinetrace@{SST (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}%
+ {\splineplot@false\splineStarttest
+ \ifsplineplot@\expandafter\splinefinish@\fi}}
+\xydef@\splinescanEndtest{%
+\splinetrace@{SET (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}%
+ {\splineplot@false\splineEndtest
+ \ifsplineplot@\expandafter\splinefinish@\fi}}
+\xydef@\splineBrec@{{%
+ \dimen@=\splineval@ \advance\dimen@\splinedepth@
+\splinetrace@{BR (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+\the\dimen@,\the\splinedepth@}%
+ \splineEndtest
+ \ifsplineplot@ \aftergroup\splineadvance@ \else
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \else\aftergroup\splinedecast@@ \fi \fi}}
+\xydef@\splineBSrec@{{%
+\splinetrace@{SR (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+\the\dimen@,\the\splinedepth@:SR}%
+ \splineStarttest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \global\advance\splineval@ .5\splinedepth@
+ \else \advance\splineval@\splinedepth@
+ \splinetest@ \advance\splineval@-\splinedepth@
+ \ifsplineplot@\aftergroup\splineadvance@
+ \else\aftergroup\splinedecast@@\fi
+ \fi
+ \else
+ \global\advance\splineval@\splinedepth@
+ \aftergroup\splinefinish@ \fi }}
+\xydef@\splineBErec@{{%
+ \dimen@=\splineval@ \advance\dimen@\splinedepth@
+\splinetrace@{BE (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+ \the\dimen@,\the\splinedepth@}%
+ \splineEndtest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \global\advance\splineval@ .5\splinedepth@
+ \else \advance\splineval@\splinedepth@
+ \splinetest@ \advance\splineval@-\splinedepth@
+ \ifsplineplot@\aftergroup\splineadvance@
+ \else\aftergroup\splinedecast@@\fi
+ \fi
+ \else
+ \ifdim\splinedepth@<\p@ \global\advance\splineval@\splinedepth@ \fi
+ \aftergroup\splinefinish@ \fi }}
+\xydef@\splinef@breakpt#1{%
+ \ifdim\splineval@>\z@
+\splinetrace@{found: val=\the\splineval@;(\the\X@c,\the\Y@c)}%
+ \else
+\splinetrace@{found: val=\the\splineval@;(\the\X@p,\the\Y@p)}%
+ \fi \splinefbcontinue@ }
+\xydef@\splinef@pt@@{%
+ \ifdim\splineval@>\z@
+\splinetrace@{found: val=\the\splineval@;c:(\the\X@c,\the\Y@c)}%
+ \global\dimen@i=\X@c \global\dimen3=\Y@c
+ \else
+\splinetrace@{found: val=\the\splineval@;p:(\the\X@p,\the\Y@p)}%
+ \fi
+ \setsplinedir@ \global\dimen5=\d@X \global\dimen7=\d@Y
+ \global\splineval@=\splineval@
+ \aftergroup\splinefocus@ }
+\xydef@\findbreakwarning@#1{%
+ \xywarning@{#1 of break not found: bSTART=\bstartPLACE@, bEND=\bendPLACE@}%
+ \DN@{#1}\def\DNii@{start}\ifx\next@\nextii@\splineRecordBreakValue@
+ \else\splineRecordEndBreakValue@\fi\egroup}%
+\xydef@\breakstartcontinue@{\bgroup \cv@start
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\breakstartfound@
+ \else \aftergroup\breakstartcontinue@i\fi \egroup }%
+\xydef@\breakstartcontinue@i{%
+\splinetrace@{move to start edge, from (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splineEndtest=\splineBreakStarttest@
+ \global\let\splinetest@=\splineBreakStarttest@
+ \gdef\splinerec@{\global\let\splinerec@=\splineSrec@ \splinedecast@@}%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\checkfoundSbreak@
+ \global\let\splinegoal@=\splineRecordSBreakValue@
+ \global\let\splinefinish@=\splinefinish@@ }
+\xydef@\breakstartfound@{%
+\splinetrace@{found start edge, at (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splinetest@=\splineStarttest
+ \gdef\splinerec@{\splinegoal@ \global\let\splinerec@=\splinefinish@ }%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\relax
+ \global\let\splinegoal@=\splineRecordBreakValue@
+ \global\let\splinefinish@=\splinefinish@@
+ }
+\xydef@\checkfoundSbreak@{%
+ \ifnum\xycrvptsnum@<\thr@@\DN@{\findbreakwarning@{start}}%
+ \else\DN@{\searchBreakSsegment@}\fi \next@ }%
+\xydef@\searchBreakSsegment@{%
+ \crv@cnt@=\segmentnum@ \DN@{}\count@=\crv@cnt@
+ \DNii@{}\ifnum\splineval@=\z@ \ifnum\crv@cnt@=\@ne
+ \ifnum\xycrvptsnum@=\@ne\count@=\z@\DNii@{\egroup}\fi
+ \else \DN@{\egroup}\fi
+ \else \ifnum\splineval@=\m@ne
+ \else \advance\crv@cnt@\@ne \fi \fi
+ \ifnum\crv@cnt@=\xycrvptsnum@\relax
+ \ifnum\xycrvptsnum@>\tw@ \DNii@{\egroup}\fi
+ \DN@{\expandafter\splineRecordBreakValue@\nextii@}%
+ \else
+ \DN@{\splinesegment@{\crv@cnt@}\splinesetparams@
+ \splined@@ \egroup}%
+ \fi \next@ }
+\xydef@\checkfoundEbreak@{%
+ \ifnum\xycrvptsnum@<\thr@@\DN@{\findbreakwarning@{end}}%
+ \else\DN@{\searchBreakEsegment@}\fi \next@ }%
+\xydef@\searchBreakEsegment@{%
+ \crv@cnt@=\segmentnum@ \DN@{}\count@=\crv@cnt@
+ \DNii@{}\ifnum\splineval@=\z@ \ifnum\crv@cnt@=\@ne
+ \ifnum\xycrvptsnum@=\@ne\count@=\z@\DNii@{\egroup}\fi
+ \else\DN@{\egroup}\fi
+ \else \advance\crv@cnt@\m@ne \fi
+ \ifnum\count@=\z@
+ \ifnum\xycrvptsnum@>\tw@ \splineval@=\m@ne\p@
+ \DNii@{\egroup}\fi
+ \DN@{\expandafter\splineRecordEndBreakValue@\nextii@}\else
+ \DN@{\splinesegment@{\crv@cnt@}\splinereverse@
+ \readsplineparams@ \splined@@ \egroup}%
+ \fi \next@ }
+\xydef@\break@start{\egroup \egroup
+\splinetrace@{scan for start}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindBStart@
+ \let\spline@end=\egroup
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinepoint=\relax
+ \let\splinegoal@=\splineRecordBreakValue@
+ \global\dimen5=\z@ \global\splinelength@=\z@
+ \let\splinerec@=\splineSrec@
+ \def\breakedges@{}%
+ \bgroup \bgroup \splined@@ }
+\xydef@\splinefindBStart@{\bgroup
+ \global\splineval@=\z@ \splinedepth@=.5\p@}
+\xydef@\breakendcontinue@{\bgroup
+ \edef\tmp@{\X@p = \the\X@c \Y@p=\the\Y@c}\cv@end\tmp@
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\breakendfound@
+ \else\aftergroup\breakendcontinue@i\fi \egroup }%
+\xydef@\breakendcontinue@i{%
+\splinetrace@{move to end edge, from (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splineEndtest=\splineBreakEndtest@
+ \global\let\splinetest@=\splineBreakEndtest@
+ \gdef\splinerec@{\global\let\splinerec@=\splineErec@\splinedecast@@}%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\checkfoundEbreak@
+ \global\let\splinegoal@=\splineRecordEBreakValue@
+ \global\let\splinefinish@=\splinefinish@@
+ \splinerec@ }
+\xydef@\splineRecordEBreakValue@{%
+\splinetrace@{\the\count@\space segments, \the\splineval@}%
+ \splineRecordEndBreakValue@ }
+\xydef@\splineRecordSBreakValue@{\getcrvsegsnum@
+ \dimen@=\splineval@
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@ \def\segmentnum@{1}%
+ \splineRecordBreakValue@ }
+\xydef@\breakendfound@{%
+\splinetrace@{found end edge, at (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splinetest@=\splineEndtest
+ \gdef\splinerec@{\splinegoal@ \global\let\splinerec@=\splinefinish@}%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\relax
+ \global\let\splinegoal@=\splineRecordEndBreakValue@
+ \global\let\splinefinish@=\splinefinish@@ }
+\xydef@\break@end{\egroup \egroup
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindBEnd@
+ \let\spline@end=\egroup
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinegoal@=\splineRecordEndBreakValue@
+ \global\splinelength@=\z@
+ \let\splinerec@=\splineErec@
+ \global\let\splineEndtest=\splineEndtest@
+ \bgroup \splined@@ }
+\xydef@\splinefindBEnd@{\bgroup\bgroup
+ \splinereverse@ \readsplineparams@
+ \global\splineval@=\z@ }
+\xydef@\splineRecordValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else
+ \getcrvsegsnum@
+ \dimen@=\splineval@ \advance\dimen@ \segmentnum@\p@
+ \advance\dimen@-\p@ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@
+ \fi
+ \xdef\splineedges@{\splineedges@\the\splinelength@;\the\splineval@,}%
+\splinetrace@{found edge: \splineedges@}}
+\xydef@\splineRecordEndValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else
+ \getcrvsegsnum@
+ \dimen@=\splineval@ \advance\dimen@ \count@\p@
+ \advance\dimen@-\segmentnum@\p@ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@
+ \fi
+ \xdef\splineedges@{\splineedges@\the\splinelength@;\the\splineval@,}%
+\splinetrace@{found edge: \splineedges@}}
+\xydef@\splineRecordBreakValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else\expandafter\advance\expandafter\splineval@\segmentnum@\p@
+ \count@=\segmentnum@\relax
+ \ifnum\count@>0 \advance\splineval@-\p@ \fi\fi
+ \xdef\breakedges@{\breakedges@\the\splinelength@;\the\splineval@,}%
+ \global\let\spline@end=\egroup
+\splinetrace@{found break edge: \breakedges@}}
+\xydef@\splineRecordEndBreakValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else\count@=\segmentnum@\relax \ifnum\count@=\z@
+ \else \getcrvsegsnum@
+ \count@@=\count@ \advance\count@@-\segmentnum@\relax
+ \dimen@=\splineval@ \advance\dimen@ \count@@\p@
+ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@
+ \fi\fi
+ \ifdim\splineval@<\z@ \relax\splineval@=\z@ \fi
+ \ifx\breakedges@\relax\relax\else\ifx\breakedges@\empty\else
+ \ifdim\splineval@<\p@\relax \ifdim\splineval@>\z@
+ \expandafter\testbreakedges@\breakedges@ @%
+ \fi\fi\fi\fi
+ \xdef\breakedges@{\breakedges@\the\splinelength@;\the\splineval@,}%
+ \global\let\spline@end=\egroup
+\splinetrace@{found break edge: \breakedges@}}
+\xydef@\testbreakedges@#1;#2,#3@{\bgroup \dimen@=#2\relax
+ \advance\dimen@\splineval@ \advance\dimen@-\p@
+\splinetrace@{testbreak: #1;#2,#3@ \the\splineval@::\the\dimen@}%
+ \DN@{\egroup}\ifdim\dimen@>\z@
+ \edef\next@{\egroup\def\noexpand\breakedges@{#1;1pt,#3}}%
+ \else\ifdim\zz@\dimen@
+ \edef\next@{\egroup\def\noexpand\breakedges@{#1;1pt,#3}}%
+ \fi \fi \next@ }
+\xydef@\splineRecordBreakEValue{%
+ \ifdim\splineval@>\z@
+ \splineval@=-\splineval@ \advance\splineval@\p@ \fi
+ \splineRecordBreakValue@ }%
+\xydef@\xydist@#1#2{\ifdim#1>#2\relax
+ \quotient@@\tmp@#2#1\expandafter\dimen@ii\tmp@#2\relax
+ \ifdim\dimen@ii>.41422#1\relax
+ \dimen@=1.060665#1\advance\dimen@ .353555\dimen@ii\relax
+ \else \dimen@=#1\advance\dimen@.5\dimen@ii\fi
+ \else
+ \quotient@@\tmp@#1#2\expandafter\dimen@ii\tmp@#1\relax
+ \ifdim\dimen@ii>.41422#2\relax
+ \dimen@=1.060665#2\advance\dimen@ .353555\dimen@ii\relax
+ \else \dimen@=#2\advance\dimen@.5\dimen@ii\fi
+ \fi}
+\xydef@\splineDadvance@{\splineadvance@@
+ \expandafter\splineDadvance@@\splineDadvance@@@}
+\xydef@\splineDadvance@@#1#2#3#4{%
+ {\d@X=#1\advance\d@X-#2\ifdim\d@X<\z@ \d@X=-\d@X\fi
+ \d@Y=#3\advance\d@Y-#4\ifdim\d@Y<\z@ \d@Y=-\d@Y\fi
+ \xydist@\d@X\d@Y
+ \global\advance\splinelength@\dimen@
+\splinetrace@{d=(\the\d@X,\the\d@Y): v=\the\splineval@: l=\the\splinelength@}%
+}}
+\xydef@\spline@end@{\lastsplinepoint@ \egroup \egroup
+ \ht\z@=\z@ \dp\z@=\z@ \wdz@=\z@ \boxz@}%
+\gdef\splinetest@{\splineplot@true}
+\xydef@\spline@end@@{\egroup \egroup}
+\xydef@\splinefrec@{{%
+ \advance\splineval@\splinedepth@
+\splinetrace@{F:(\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;
+\the\splineval@;\the\splinedepth@}%
+ \ifdim\dimen5=\splineval@ \aftergroup\splinefinishf@
+ \else \dimen@=\dimen5\advance\dimen@-\splineval@
+ \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi
+ \ifdim\dimen@<.0001\p@ \aftergroup\splinefinishf@
+ \else
+ \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@
+ \else \aftergroup\splineadvance@
+ \fi\fi\fi}}
+\xydef@\splinefinishf@{\global\advance\splineval@\splinedepth@
+ \splinefinish@}%
+\xydef@\spline@find#1#2#3{%
+\splinetrace@{spline@find #1 #2 #3}%
+ \readsplineparams@
+ \global\let\splinefinish@=\splinefinish@@
+ \global\let\splinegoal@=\splinef@pt
+ \global\let\splinepoint=\relax
+ \dimen@=#1\relax\dimen@ii=#2\relax
+ \ifdim\dimen@ii=\z@ \def\postfind@{}%
+ \else\def\postfind@{}%
+ \ifdim\dimen@ii<\z@ \splinereverse@
+ \readsplineparams@
+\splinetrace@{reverse orientation: (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}%
+ \dimen@=#1\relax\dimen@ii=#2\relax
+ \multiply\dimen@\m@ne \advance\dimen@\p@ \multiply\dimen@ii\m@ne
+ \def\postfind@{\d@X=-\the\d@X \d@Y=-\the\d@Y \noexpand\reversesplineval@}%
+ \fi\fi
+ \expandafter\splinetrace@\expandafter{\xysplineparams@}%
+ \edef\next@{\noexpand\spline@@find{\the\dimen@}{\the\dimen@ii}{#3}}%
+ \next@ }
+\xydef@\reversesplineval@{\splineval@=-\splineval@ \advance\splineval@\p@ }
+\xydef@\spline@@find#1#2#3{%
+\splinetrace@{spline@@find #1 #2 #3}%
+ \let\splinerec@=\splinefrec@
+ \global\let\splineadvance@=\splineadvance@@
+ \dimen5=#1\relax
+ \ifdim #2=\z@\relax
+ \ifdim #1=\z@\relax \bgroup
+ \let\splined@@=\spline@@knot
+ \global\splineval@=\m@ne\p@
+ \else\ifdim #1=\p@\relax \bgroup
+ \let\splined@@=\spline@@knot
+ \global\splineval@=\z@
+ \else
+ \global\splineval@=\z@
+ \global\let\splineadvance@=\splineadvance@@
+ \DN@{#3}\ifx\next@\empty \setsplinetest@\splineval@>{#1}{}%
+ {{\ifdim\splineval@=\dimen5\aftergroup\splineplot@false\fi}}%
+ \else\DNii@{>}\ifx\next@\nextii@
+ \setsplineundertest@\splineval@>{#1}{}{}%
+ \let\splinerec@=\splineBSrec@
+ \else\DNii@{<}\ifx\next@\nextii@
+ \setsplineundertest@\splineval@>{#1}{}{}%
+ \let\splinerec@=\splineBErec@
+ \else\xywarning@{unknown find-mode: #3}\fi\fi\fi
+ \fi\fi
+ \else
+ \global\splineval@=\z@
+ \def\splineslidetest@@{%
+ \setsplinetest@\splinelength@<{#2}{}{}}%
+ \let\splinefinish@=\splinefcontinue@
+ \fi
+ \let\spline@end=\splinef@end
+ \let\splinepoint@=\relax
+ \splinelength@=\z@
+ \def\spline@start{\bgroup\xylowtolerance@}%
+ \splined@@ }
+\xydef@\spline@@knot{%
+ \let\setsplinedir@=\setsplineknotdir@
+ \splinesetparams@\spline@start
+ \splinedepth@=\p@
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \splinefinishf@ \spline@end \egroup }
+\xydef@\splinefcontinue@{%
+\splinetrace@{sliding... from (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splinerec@=\splinerec@@
+ \global\splinelength@=\z@
+ \global\splineval@=\splineval@
+ \global\let\splinepoint=\splinefindtest@
+ \global\let\splinegoal@=\splinef@pt
+ \global\let\splineadvance@=\splineDadvance@
+ \global\let\splinefinish@=\splinefinish@@
+ \splineslidetest@@
+ }
+\xydef@\splinefindtest@{%
+\splinetrace@{SFT (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}%
+ {\splineplot@false\splinetest@
+ \ifsplineplot@\expandafter\splinefinishf@\fi}}
+\def\setsplineundertest@#1#2#3#4#5{%
+\splinetrace@{setsplineundertest@: #1,#2,#3,#4,#5,}%
+ \DNii@{\gdef\splinetest@}%
+ \DN@##1\next{\def\tmp@{{\splineplot@false
+ \ifdim#1#2##1\relax #4\else\splineplot@true#5\fi }}}%
+ \next@#3\relax\next
+ \expandafter\nextii@\tmp@ }
+\xydef@\splinef@end{\edef\tmp@{\egroup\splinelength@=\the\splinelength@}\tmp@}
+\xydef@\splinef@pt{%
+ \ifdim\splineval@>\z@
+\splinetrace@{found: val=\the\splineval@;c:(\the\X@c,\the\Y@c)}%
+ \global\dimen@i=\X@c \global\dimen3=\Y@c
+ \else
+\splinetrace@{found: val=\the\splineval@;p:(\the\X@p,\the\Y@p)}%
+ \fi
+ \setsplinedir@ \global\dimen5=\d@X \global\dimen7=\d@Y
+ \global\splineval@=\splineval@
+ \aftergroup\splinefocus@ }
+\def\setsplinetest@#1#2#3#4#5{%
+ \DNii@{\gdef\splinetest@}%
+ \DN@##1\next{\def\tmp@{{\splineplot@false \ifdim#1#2##1\relax
+ #4\else\splineplot@true#5\fi}}}%
+ \next@#3\relax\next
+ \expandafter\nextii@\tmp@ }%
+\xydef@\splinefocus@{%
+ \d@X=\dimen5\relax \d@Y=\dimen7\relax \setsplinedir@ }
+\xydef@\splinesegment@#1{}
+\xydef@\xyprecurve@{}
+\xydef@\xypostcurve@{}
+\xydef@\splineset@{%
+\splinetrace@{splineset@:}%
+ \ifx\bstartPLACE@\empty
+ \DN@{\xyprecurve@
+ \edef\tmp@{\egroup \X@max=\the\X@max \X@min=\the\X@min
+ \Y@max=\the\Y@max \Y@min=\the\Y@min}\tmp@ \xypostcurve@ }%
+ \else
+ \DN@{\xyprecurve@ \xysplinespecialcases@
+ \edef\tmp@{\egroup \X@max=\the\X@max \X@min=\the\X@min
+ \Y@max=\the\Y@max \Y@min=\the\Y@min}\tmp@ \xypostcurve@ }%
+ \fi
+ \next@ }
+\xydef@\xysplinespecialcases@{%
+ \ifx\empty\xycrvdrop@
+ \ifx\empty\xycrvconn@ \DN@{\splinesolid@}%
+ \else \DN@{ \dir{-}}\ifx\next@\xycrvconn@ \DN@{\splinesolid@}%
+ \else \DN@{ \dir 2{-}}\ifx\next@\xycrvconn@ \DN@{\splinedoubled@}%
+ \else \DN@{ \dir{=}}\ifx\next@\xycrvconn@ \DN@{\splineribboned@}%
+ \else \DN@{ \dir {2.}}\ifx\next@\xycrvconn@ \DN@{\splinedoubled@}%
+ \else \DN@{ \dir 3{-}}\ifx\next@\xycrvconn@ \DN@{\splinetrebled@}%
+ \else \DN@{ \dir {3.}}\ifx\next@\xycrvconn@ \DN@{\splinetrebled@}%
+ \else \DN@{ \dir{--}}\ifx\next@\xycrvconn@ \DN@{\splinedashed@}%
+ \else \DN@{ \dir{.}}\ifx\next@\xycrvconn@ \DN@{\splinedotted@}%
+ \else \DN@{ \dir{:}}\ifx\next@\xycrvconn@ \DN@{\splinedbldotted@}%
+ \else \ifdim\splinetol@>\z@ \else \splinedefaulttol@ \fi
+ \DN@{\splineset@@}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \else
+ \DN@{\splineset@@}%
+ \fi \ifInvisible@\DN@{}\fi \next@ }
+\xydef@\splinesolid@{\setbox\splinebox@=\zerodot \def\xycrvdrop@{ }%
+ \def\xycrvconn@{}\splineset@@}
+\xydef@\splinedoubled@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \def\xycrvconn@{!C\dir2{.}}\splineset@@}
+\xydef@\splineribboned@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \def\xycrvconn@{!C\dir{:}}\splineset@@}
+\xydef@\splinetrebled@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \def\xycrvconn@{!C\dir3{.}}\splineset@@}
+\xydef@\splinedashed@{\splinetol@=1.5pc \def\xycrvdrop@{ }%
+ \def\splinedrop@{}\edef\xycrvconn@{\noexpand!C\noexpand\dir{\addDASH@{}}}%
+ \splineset@@}
+\xydef@\splinedotted@{\setbox\splinebox@=\zerodot \def\xycrvdrop@{ }%
+ \splinetol@=1.5\jot \def\xycrvconn@{}\splineset@@}
+\xydef@\splinedbldotted@{\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \splinetol@=1.5\jot \def\xycrvconn@{!C\dir{:}}\splineset@@}
+\xydef@\splineset@@{%
+ \readsplineparams@
+ \ifx\xycrvdrop@\empty \splinetol@=7.5\p@
+ \def\splinedefaulttol@{\splinetol@=7.5\p@}\def\splinedrop@{}%
+ \else\edef\splinedefaulttol@{\splinetol@=\the\splinetol@}\fi
+ \ifx\xycrvconn@\empty \def\splineconn@{}\fi
+\splinetrace@{set the curve: >\the\dimen5, <\the\dimen7}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\splinerec@=\splineTrec@
+ \def\splineStarttest{\splinetest@}%
+ \global\let\splinepoint=\relax
+ \let\spline@start=\spline@start@
+ \let\spline@end=\spline@end@
+ \ifdim\dimen7=\p@
+ \gdef\splinecontinue{\splinesetting@
+ \global\let\splinetest@=\splineplot@true}%
+ \else
+ \ifdim\dimen7=\tw@\p@
+%% \ifdim\bendPLACE@\p@=\z@ \emptyspline@ \else
+ \ifdim\bendPLACE@\p@=\p@
+ \fi
+ \else
+ \xdef\splinecontinue{\noexpand\setsplinetest@
+ \splineval@>{\the\dimen7}{\noexpand\splinebreakcancel@}{}%
+ \noexpand\splinesetting@ }%
+ \fi\fi
+ \ifdim\dimen7>\z@ \DN@{\splinesetting@\splinecontinue}%
+ \ifdim\zz@{\dimen5}%
+ \else
+ \edef\next@{\noexpand\setsplinetest@
+ \splineval@<{\the\dimen5}{}%
+ {\noexpand\expandafter\noexpand\splinecontinue}%
+ \noexpand\splinesetting@ }%
+ \fi
+ \else\DN@{\dimen5=\p@}\fi
+ \next@
+ \ifdim\dimen5=\p@\DN@{}\else\DN@{\splined@@}\fi \next@
+ }
+\xydef@\emptyspline@{\xywarning@{empty curve subsegment}%
+\splinetrace@{bstartPLACE@=\bstartPLACE@, bendPLACE@=\bendPLACE@,
+ empty segment}%
+ \gdef\splinecontinue{\splinesetting@
+ \global\let\splinetest@=\splineplot@false
+ \global\dimen5=\z@ }}
+\xydef@\splineTrec@{{%
+ \advance\splineval@\splinedepth@
+ \ifdim\dimen5=\splineval@
+ \aftergroup\splinecontinue
+ \else \dimen@=\dimen5\advance\dimen@-\splineval@
+ \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi
+ \ifdim\dimen@<.001\p@
+ \aftergroup\splinecontinue
+ \else
+ \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@
+ \else \aftergroup\splineadvance@
+ \fi\fi\fi}}
+\xydef@\splinesetting@{\splinesetting@@}
+\xydef@\splinesetting@@{%
+\splinetrace@{splinesetting@@:}%
+ \ifdim\splinedepth@=\z@ \splinedepth@=\p@ \fi
+ \ifdim\splinedepth@=\p@
+ \def\splinerec@{\global\let\splinerec@=\splinerec@@\splinedecast@@}%
+ \else \global\let\splinerec@=\splinerec@@ \fi
+ \gdef\splinepoint{\splineplotpt@}}
+\xydef@\splineplotpt@{{\global\advance\dimen@i-\X@c
+ \splinetest@ \DN@{\splineglue@}\ifsplineplot@
+ \DN@{\dosplineplotpt@}%
+ \fi \next@ \global\dimen@i=\X@c \global\dimen3=\Y@c }}
+\xydef@\splineglue@{\hglue-\dimen@i
+\splinetrace@{N:(\the\X@c,\the\Y@c);;\the\dimen@i;\the\dimen3%
+ ,\the\splinelength@,\the\splineval@,\the\splinedepth@}}
+\xydef@\dosplineplotpt@{\ifdim\dimen@i<\z@
+ \raise\Y@c\hbox to-\dimen@i{\hfill\splinedrop@}%
+ \else \kern-\dimen@i\raise\Y@c\hbox{\splinedrop@}\fi
+ \ifx\splineconn@\relax\else\raise\Y@c\hbox{%
+ \setboxz@h{\splineconn@}\Drop@@}\fi
+\splinetrace@{P:(\the\X@c,\the\Y@c);;\the\dimen@i;\the\dimen3
+ ,\the\splinelength@,\the\splineval@,\the\splinedepth@}}
+\xydef@\splinefinish@@{\postspline@ \splinegoal@ \splinecancel@ }
+\xydef@\splinecancel@{%
+ \global\let\splinerec@=\relax
+ \global\let\splinepoint=\relax
+ \global\let\splinecontinue=\relax
+ \global\let\splinedecast@=\relax
+ }
+\xydef@\splinebreakcancel@{\bsplinecancel@ \splinecancel@}
+\xydef@\bsplinecancel@{\gdef\lastbspline@{\leave@\leave@}%
+ \global\let\middlebspline@=\lastbspline@ }
+\xydef@\splinegoal@{\ifdim\splineval@>\z@
+ \global\dimen@i=\X@c \global\dimen3=\Y@c \fi
+ \global\splineval@=\splineval@ \global\splinelength@=\splinelength@
+ \splinesetdir@ }
+\xylet@\splinefinish@\splinefinish@@
+\xylet@\splinewhich\splineDwhich@
+\xydef@\squinewhich@{%
+ \ifdim\dimen5>\squinelength
+ \d@X=\X@c \d@Y=\Y@c \advance\d@X-\L@c \advance\d@Y-\U@c
+ \advance\squineval-\squinedepth
+ \else \X@c=\X@p \Y@c=\Y@p \advance\squineval-\squinedepth
+ \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p \fi
+ \d@X=-\d@X \d@Y=-\d@Y
+ \squinefinish}
+\xydef@\squineDwhich@{%
+ \ifdim\dimen5>\squinelength
+ \d@X=\X@c \d@Y=\Y@c \advance\d@X-\L@c \advance\d@Y-\U@c
+ \else \X@c=\X@p \Y@c=\Y@p \advance\squineval-\squinedepth
+ \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p \fi
+ \d@X=-\d@X \d@Y=-\d@Y
+ \squinefinish}
+\xydef@\xyquadbezier@{%
+ \global\let\splinerec@=\relax
+ \addtocrvpts@{\def\crvconnect@{\squineconnect@}}%
+ \xyquadmethods@ \let\splinesegment@=\squinesegment@
+ \begingroup\setcrvobjects@ \xysplineparams@ \splined@@@
+ \bgroup \setupsquine@ \squined@ \splineset@ \savespline@ }
+\xydef@\xyquadmethods@{%
+ \def\crvconnect@{\squineconnect@}%
+ \def\splinereverse@@{\splinereverse@@@}%
+ \let\getsplineparams@=\getsquineparams@
+ \let\spline@start@=\squine@start@
+ \let\splinedecast@@=\squinedecast@
+ \let\splinerec@@=\squinerec@
+ \let\splined@@=\squined@@
+ \let\splineIpt@@=\squineIpt@
+ \let\splineIadvance@@=\squineIadvance@
+ \let\splineinfo@=\squineinfo@
+ \let\setsplinedir@=\setsquinedir@
+ \let\splinetestcvxhull@=\squinetestcvxhull@
+ \let\setsplineknotdir@=\setsquineknotdir@
+ \let\splinereverse@=\squinereverse@
+ \let\splineDadvance@@@=\squineDadvance@@@
+ \let\splinesetparams@=\squinesetparams@
+ \let\splineplot@maybe@@=\squineplot@maybe
+}
+\xydef@\squineconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\squinesegment@ }%
+\xydef@\squinesegment@#1{\xyquadmethods@ \def\segmentnum@{1}%
+ \setupsquine@ \squined@ }
+\xydef@\setupsquine@{%
+ \xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c
+ \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c
+ \xycontrolpt@\tw@
+ \ifdim \A@>\X@max
+ \dimen@=\X@p\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@>\X@max \X@max=\dimen@ \fi
+ \dimen@=\X@c\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@>\X@max \X@max=\dimen@ \fi
+ \else \ifdim \A@<\X@min
+ \dimen@=\X@p\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@<\X@min \X@min=\dimen@ \fi
+ \dimen@=\X@c\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@>\X@min \X@min=\dimen@ \fi
+ \fi\fi
+ \ifdim \B@>\Y@max
+ \dimen@=\Y@p\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@>\Y@max \Y@max=\dimen@ \fi
+ \dimen@=\Y@c\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@>\Y@max \Y@max=\dimen@ \fi
+ \else \ifdim \B@<\Y@min
+ \dimen@=\Y@p\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@<\Y@min \Y@min=\dimen@ \fi
+ \dimen@=\Y@c\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@>\Y@min \Y@min=\dimen@ \fi
+ \fi\fi }
+\xydef@\squinedecast@{\halve@dimen\splinedepth@
+ \R@c=\L@c \advance\L@c\X@p \halve@dimen\L@c
+ \advance\R@c\X@c \halve@dimen\R@c
+ \A@=\L@c \advance\A@\R@c \halve@dimen\A@
+ \D@c=\U@c \advance\U@c\Y@p \halve@dimen\U@c
+ \advance\D@c\Y@c \halve@dimen\D@c
+ \B@=\U@c \advance\B@\D@c \halve@dimen\B@
+ \begingroup \X@c=\A@ \Y@c=\B@ \splinerec@ \endgroup
+ \begingroup \X@c=\A@ \Y@c=\B@ \splinepoint \endgroup
+ \X@p=\A@ \L@c=\R@c \Y@p=\B@ \U@c=\D@c \splinerec@}
+\xydef@\squinerec@{{\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\squinedecast@
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\squineDadvance@@@{\X@p\L@c\Y@p\D@c}
+\xydef@\squineplot@maybe{{\X@p=\L@c \Y@p=\U@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}
+\xydef@\setsquinedir@{%
+ \d@X=\X@c \advance\d@X-\L@c \d@Y=\Y@c \advance\d@Y-\U@c
+ \dimen@=\ifdim\d@X<\z@-\fi\d@X \ifdim\dimen@<.02\p@
+ \dimen@=\ifdim\d@Y<\z@-\fi\d@Y \ifdim\dimen@<.02\p@
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \fi\fi
+ \ifdim\X@c=\X@p \ifdim\Y@c=\Y@p
+ \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p \fi\fi
+ \setupDirection@ii }
+\xydef@\setsquineknotdir@{%
+ \ifdim\zz@\splineval@ \expandafter \setsquinezerodir@
+ \else\expandafter \setsquinedir@ \fi }
+\xydef@\setsquinezerodir@{%
+ \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi\fi \setupDirection@ii }
+\xydef@\getsquineparams@#1,#2,#3,#4,#5,#6,#7,{%
+ \splinelength@=#1\relax\X@p=#2\relax\Y@p=#3\relax
+ \A@=#4\relax\B@=#5\relax\X@c=#6\relax\Y@c=#7\relax
+}
+\xydef@\squineinfo@{%
+\expandafter\removePT@\the\X@c\space
+\expandafter\removePT@\the\Y@c\space
+\expandafter\removePT@\the\A@\space
+\expandafter\removePT@\the\B@\space
+\expandafter\removePT@\the\X@p\space
+\expandafter\removePT@\the\Y@p\space
+\expandafter\removePT@\the\dimen5\space\space
+\expandafter\removePT@\the\dimen7\space
+ }%
+\xydef@\squinereverse@{\readsplineparams@
+ \expandafter\edef\xysplineparams@{\the\splinelength@,%
+ \the\X@c,\the\Y@c,\the\A@,\the\B@,\the\X@p,\the\Y@p,}}%
+\xydef@\squine@start@{\setboxz@h\bgroup
+ \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@
+ \kern\X@p
+ {\squinesetparams@ \X@c=\X@p \Y@c=\Y@p \firstsplinepoint@
+ }\bgroup }
+\xydef@\squinesetparams@{%
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \L@c=\A@ \U@c=\B@ \R@c=\L@c \D@c=\U@c }%
+\xydef@\squined@{%
+ \expandafter\edef\xysplineparams@{%
+ \the\z@,\the\X@p,\the\Y@p,\the\A@,\the\B@,\the\X@c,\the\Y@c,}}
+\xydef@\squined@@{%
+ \splinedepth@=\p@
+ \global\splineval@=\z@
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \spline@start
+ \ifx\splinerec@\relax \let\splinerec@=\squinerec@\fi
+ \L@c=\A@ \U@c=\B@ \R@c=\L@c \D@c=\U@c
+ \splinerec@ \spline@end }
+\xydef@\xycubicbezier@{%
+ \addtocrvpts@{\def\crvconnect@{\cubicconnect@}}%
+ \xycubicmethods@ \let\splinesegment@=\cubicsegment@
+ \begingroup \setcrvobjects@ \xysplineparams@ \splined@@@
+ \bgroup \setupcubic@ \cubiced@ \splineset@ \savespline@ }
+\xydef@\xycubicmethods@{%
+ \def\crvconnect@{\cubicconnect@}%
+ \def\splinereverse@@{\cubicreverse@@}%
+ \let\getsplineparams@=\getcubicparams@
+ \let\spline@start@=\cubic@start@
+ \let\splinedecast@@=\cubicdecast@
+ \let\splinerec@@=\cubicrec@
+ \let\splined@@=\cubiced@@
+ \let\splineIpt@@=\cubicIpt@
+ \let\splineIadvance@@=\cubicIadvance@
+ \let\splineoutsidehull@@=\cubicoutsidehull@
+ \let\splinetestcvxhull@=\cubictestcvxhull@
+ \let\splineinfo@=\cubicinfo@
+ \let\setsplinedir@=\setcubicdir@
+ \let\setsplineknotdir@=\setcubicknotdir@
+ \let\splinereverse@=\cubicreverse@
+ \let\splineDadvance@@@=\cubicDadvance@@@
+ \let\splinesetparams@=\cubicsetparams@
+ \let\splineplot@maybe@@=\cubicplot@maybe
+ }
+\xydef@\cubicconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\cubicsegment@ }%
+\xydef@\cubicsegment@#1{\xycubicmethods@ \def\segmentnum@{1}%
+ \setupcubic@ \cubiced@ }
+\xydef@\setupcubic@{%
+ \xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c
+ \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c
+ \xycontrolpt@\tw@ \global\dimen3=\X@c \global\dimen5=\Y@c
+ \xycontrolpt@\thr@@
+ \adjustmaxmin@ }
+\xydef@\adjustmaxmin@{%
+ \ifdim \A@>\X@max \dimen@=\A@ \advance\dimen@\X@p \dimen@half
+ \ifdim\dimen@>\X@max \X@max=\dimen@ \fi \else
+ \ifdim \A@<\X@min \dimen@=\A@ \advance\dimen@\X@p \dimen@half
+ \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi\fi
+ \ifdim \B@>\Y@max \dimen@=\B@ \advance\dimen@\Y@p \dimen@half
+ \ifdim\dimen@>\Y@max \Y@max=\dimen@ \fi \else
+ \ifdim \B@<\Y@min \dimen@=\B@ \advance\dimen@\Y@p \dimen@half
+ \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \fi\fi
+ \ifdim \dimen3>\X@max \dimen@=\dimen3\advance\dimen@\X@c \dimen@half
+ \ifdim\dimen@>\X@max \X@max=\dimen@ \fi \else
+ \ifdim \dimen3<\X@min \dimen@=\dimen3\advance\dimen@\X@c \dimen@half
+ \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi\fi
+ \ifdim \dimen5>\Y@max \dimen@=\dimen5\advance\dimen@\Y@c \dimen@half
+ \ifdim\dimen@>\Y@max \Y@max=\dimen@ \fi \else
+ \ifdim \dimen5<\Y@min \dimen@=\dimen5\advance\dimen@\Y@c \dimen@half
+ \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \fi\fi
+ \dimen@=\A@ \advance\dimen@\dimen3 \dimen@half
+ \ifdim\dimen@>\X@max \X@max=\dimen@
+ \else \ifdim\dimen@<\X@min \X@min=\dimen@ \fi\fi
+ \dimen@=\B@ \advance\dimen@\dimen5 \dimen@half
+ \ifdim\dimen@>\Y@max \Y@max=\dimen@
+ \else \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi\fi
+}
+\xydef@\cubicdecast@{\halve@dimen\splinedepth@
+ \A@=\L@c \advance\A@\R@c \halve@dimen\A@
+ \advance\R@c\X@c \halve@dimen\R@c
+ \B@=\U@c \advance\B@\D@c \halve@dimen\B@
+ \advance\D@c\Y@c \halve@dimen\D@c
+ \advance\L@c\X@p \halve@dimen\L@c
+ \advance\U@c\Y@p \halve@dimen\U@c
+ \begingroup
+ \X@c=\R@c \advance\X@c\L@c \halve@dimen\X@c
+ \advance\X@c\A@ \halve@dimen\X@c
+ \Y@c=\D@c \advance\Y@c\U@c \halve@dimen\Y@c
+ \advance\Y@c\B@ \halve@dimen\Y@c
+ \R@c=\L@c \advance\R@c\A@ \halve@dimen\R@c
+ \D@c=\U@c \advance\D@c\B@ \halve@dimen\D@c
+ \bgroup \splinerec@
+ \egroup \splinepoint \endgroup
+ \X@p=\L@c \advance\X@p\R@c \halve@dimen\X@p
+ \advance\X@p\A@ \halve@dimen\X@p
+ \L@c=\R@c \advance\L@c\A@ \halve@dimen\L@c
+ \Y@p=\U@c \advance\Y@p\D@c \halve@dimen\Y@p
+ \advance\Y@p\B@ \halve@dimen\Y@p
+ \U@c=\D@c \advance\U@c\B@ \halve@dimen\U@c
+ \splinerec@ }
+\xydef@\cubicrec@{{\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\cubicdecast@
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\cubicDadvance@@@{\X@p\X@c\Y@p\Y@c}
+\xydef@\cubicplot@maybe{{\X@p=\L@c \Y@p=\U@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\cubicplot@maybeii\else\aftergroup\splineplot@true\fi}}
+\xydef@\cubicplot@maybeii{{\X@p=\R@c \Y@p=\D@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}
+\xydef@\cubiced@@{%
+ \splinedepth@=\p@
+ \global\splineval@=\z@
+ \spline@start
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \splinerec@ \spline@end }
+\xydef@\setcubicdir@{%
+ \ifdim\splinedepth@<.001\p@\DN@{\cubiccoarsedir@}%
+ \else\DN@{\cubicfinedir@}\fi \next@ }
+\xydef@\cubicfinedir@{%
+ \d@X=\X@c \advance\d@X-\R@c \d@Y=\Y@c \advance\d@Y-\D@c
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\L@c \d@Y=\Y@c \advance\d@Y-\U@c
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi\fi \fi\fi
+ \setupDirection@ii
+\splinetrace@{dir:(\the\d@X,\the\d@Y),\the\Direction; depth:\the\splinedepth@}%
+}
+\xydef@\cubiccoarsedir@{%
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \setupDirection@ii
+ \global\dimen5=\d@X \global\dimen7=\d@Y
+\splinetrace@{dir:(\the\d@X,\the\d@Y),\the\Direction; depth:\the\splinedepth@}%
+}
+\xydef@\setcubicknotdir@{%
+ \ifdim\zz@\splineval@ \DN@{\setcubiczerodir@}%
+ \else \DN@{\cubicfinedir@}\fi \next@ }
+\xydef@\setcubiczerodir@{%
+ \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\R@c \advance\d@X-\X@p \d@Y=\D@c \advance\d@Y-\Y@p
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi\fi \fi\fi \setupDirection@ii }
+\xydef@\getcubicparams@#1,#2,#3,#4,#5,#6,#7,#8,#9,{%
+ \splinelength@=#1\relax\X@p=#2\relax\Y@p=#3\relax\L@c=#4\relax
+ \U@c=#5\relax\R@c=#6\relax\D@c=#7\relax\X@c=#8\relax\Y@c=#9\relax
+}%
+\xydef@\cubicinfo@{%
+\expandafter\removePT@\the\X@p\space
+\expandafter\removePT@\the\Y@p\space
+\expandafter\removePT@\the\L@c\space
+\expandafter\removePT@\the\U@c\space
+\expandafter\removePT@\the\R@c\space
+\expandafter\removePT@\the\D@c\space
+\expandafter\removePT@\the\X@c\space
+\expandafter\removePT@\the\Y@c\space
+\expandafter\removePT@\the\dimen5\space\space
+\expandafter\removePT@\the\dimen7\space
+ }%
+\xydef@\cubicreverse@{\readsplineparams@
+ \expandafter\edef\xysplineparams@{\the\splinelength@,%
+ \the\X@c,\the\Y@c,\the\R@c,\the\D@c,\the\L@c,\the\U@c,\the\X@p,\the\Y@p,}}%
+\xydef@\cubicreverse@@{%
+ \splinereverse@@@
+ \dimen@ii=\L@c \L@c=\R@c \R@c=\dimen@ii
+ \dimen@ii=\U@c \U@c=\D@c \D@c=\dimen@ii }
+\xydef@\cubic@start@{\setboxz@h\bgroup
+ \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@
+ \kern\X@p
+ {\cubicsetparams@ \X@c=\X@p \Y@c=\Y@p \R@c=\X@c \D@c=\Y@c
+ \firstsplinepoint@ }\bgroup
+}
+\xydef@\cubicsetparams@{%
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+ \global\dimen@i=\X@p \global\dimen3=\Y@p }
+\xydef@\cubiced@{%
+ \expandafter\edef\xysplineparams@{\the\z@,\the\X@p,\the\Y@p
+ ,\the\A@,\the\B@,\the\dimen3,\the\dimen5,\the\X@c,\the\Y@c,}%
+ }%
+\xydef@\xybspline@iii{%
+ \addtocrvpts@{\def\crvconnect@{\bsplineiiiconnect@}}%
+ \def\crvconnect@{\bsplineiiiconnect@}\xybsplinemethods@
+ \let\splinesegment@=\bsplinesegment@iii
+ \begingroup\setcrvobjects@ \dobspline@ \savespline@ }
+\xydef@\bsplineiiiconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\bsplinesegment@iii }%
+\xydef@\xybspline@iv{%
+ \addtocrvpts@{\def\crvconnect@{\bsplineivconnect@}}%
+ \def\crvconnect@{\bsplineivconnect@}\xybsplinemethods@
+ \let\splinesegment@=\bsplinesegment@iv
+ \begingroup\setcrvobjects@ \dobspline@ \savespline@ }
+\xydef@\bsplineivconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\bsplinesegment@iv }%
+\xydef@\xybspline@{%
+\splinetrace@{B-spline with \numcontrolpts\space control points.}%
+ \addtocrvpts@{\def\crvconnect@{\bsplineconnect@}}%
+ \def\crvconnect@{\bsplineconnect@}\xybsplinemethods@
+ \let\splinesegment@=\bsplinesegment@
+ \begingroup\setcrvobjects@
+ \dobspline@ \savespline@ }
+\xydef@\xybsplinemethods@{%
+ \def\splinereverse@@{\cubicreverse@@}%
+ \let\getsplineparams@=\getbsplineparams@
+ \let\spline@start@=\cubic@start@
+ \let\splinedecast@@=\cubicdecast@
+ \let\splinerec@@=\cubicrec@
+ \let\splineIpt@@=\cubicIpt@
+ \let\splineIadvance@@=\cubicIadvance@
+ \let\splined@@=\bsplined@@
+ \let\splineinfo@=\cubicinfo@
+ \let\setsplinedir@=\setcubicdir@
+ \let\setsplineknotdir@=\setcubicknotdir@
+ \let\splinereverse@=\cubicreverse@
+ \let\splineDadvance@@@=\cubicDadvance@@@
+ \let\splinesetparams@=\cubicsetparams@
+ \global\let\lastbspline@=\lastbspline@@
+ \global\let\middlebspline@=\middlebspline@@
+}
+\xydef@\bsplined@@{%
+ \splinedepth@=\p@
+ \global\splineval@=\z@
+ \spline@start
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \splinerec@ \spline@end }
+\xydef@\bsplineconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\bsplinesegment@ }%
+\xydef@\getbsplineparams@{\getcubicparams@}
+\xydef@\dobspline@{\xysplineparams@ \scanbspline@ \firstbspline@ }%
+\xydef@\firstbspline@{%
+ \enter@{\pfromthep@ \cfromthec@}\enter@{\cfromthec@}\bgroup
+ \def\segmentnum@{1}\xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c
+\splinetrace@{0: \the\X@p, \the\Y@p}%
+ \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c
+\splinetrace@{1: \the\X@c, \the\Y@c}%
+ \xycontrolpt@\tw@
+\splinetrace@{2: \the\X@c, \the\Y@c}%
+ \dimen@=\X@c \advance\dimen@\A@ \dimen@half
+ \global\dimen3=\dimen@
+ \dimen@=\Y@c \advance\dimen@\B@ \dimen@half
+ \global\dimen5=\dimen@
+ \xycontrolpt@{3}%
+\splinetrace@{3: \the\X@c, \the\Y@c}%
+ \expandafter\count@\xycrvcnt@\relax
+ \ifnum\count@=3\relax
+ \advance\X@c-\A@ \dimen@nth4\X@c
+ \advance\X@c\dimen3\relax
+ \advance\Y@c-\B@ \dimen@nth4\Y@c
+ \advance\Y@c\dimen5\relax
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\@ne\relax
+ \noexpand\lastbspline@ }%
+ \else
+ \advance\X@c 7\dimen3 \advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c 7\dimen5 \advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\@ne\relax
+ \noexpand\middlebspline@ }%
+ \fi \adjustmaxmin@ \czeroEdge@
+ \bsplined@ \splineset@ \leave@ }
+\xydef@\lastbspline@@{\bgroup
+ \advance\crv@cnt@\@ne \edef\segmentnum@{\the\crv@cnt@}%
+\splinetrace@{<: \the\X@p, \the\Y@p}%
+ \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}%
+ \global\dimen3=\X@c \global\dimen5=\Y@c
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \advance\crv@cnt@\m@ne \xycontrolpt@{\crv@cnt@}%
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \A@=\X@c \advance\A@\dimen3 \halve@dimen\A@
+ \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@
+ \adjustmaxmin@ \leave@ \relax \cv@end
+\splinetrace@{>: \the\X@c, \the\Y@c}%
+ \bsplined@ \splineset@ \leave@ }%
+\xylet@\lastbspline@=\lastbspline@@
+\xydef@\middlebspline@@{%
+ \advance\crv@cnt@\@ne \edef\segmentnum@{\the\crv@cnt@}%
+\splinetrace@{<: \the\X@p, \the\Y@p}%
+ \bgroup
+ \xycontrolpt@{\crv@cnt@}\A@=2\X@c \B@=2\Y@c
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}%
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \advance\A@\X@c \dimen@nth3\A@
+ \advance\B@\Y@c \dimen@nth3\B@
+ \advance\X@c\A@ \halve@dimen\X@c
+ \advance\Y@c\B@ \halve@dimen\Y@c
+ \global\dimen3=\X@c \global\dimen5=\Y@c
+ \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}%
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \expandafter\count@\xycrvcnt@\relax
+ \ifnum\crv@cnt@<\count@\relax
+ \advance\X@c 7\dimen3\advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c 7\dimen5\advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\segmentnum@\relax
+ \noexpand\middlebspline@}%
+ \else
+ \advance\X@c-\A@ \dimen@nth4\X@c
+ \advance\X@c \dimen3\relax
+ \advance\Y@c-\B@ \dimen@nth4\Y@c
+ \advance\Y@c \dimen5\relax
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \noexpand\lastbspline@}%
+ \fi \adjustmaxmin@
+ \bsplined@ \splineset@ \leave@ }
+\xylet@\middlebspline@=\middlebspline@@
+\xydef@\scanbspline@{\splined@@@}
+\xydef@\bsplined@{\cubiced@
+ \expandafter\ifx\xysplineedges@\relax\relax\DN@{}%
+ \else\DN@{\adjustbsplineedges@}\fi \next@ }
+\xydef@\adjust@forsegments@{\getcrvsegsnum@
+ \ifnum\count@>\@ne
+\splinetrace@{adjust for \the\count@\space segments:
+ \the\dimen5, \the\dimen7}%
+ \multiply\dimen5 by \count@\relax \dimen@=\segmentnum@\p@
+ \ifnum\dimen5>\dimen@ \relax\dimen5=\p@
+ \else \advance\dimen5-\segmentnum@\p@ \advance\dimen5 by\p@ \fi
+ \ifnum\dimen5<\z@ \relax\dimen5=\z@\relax\fi
+ \multiply\dimen7 by \count@\relax
+ \dimen@=\segmentnum@\p@
+ \ifnum\dimen7<\dimen@ \advance\dimen@-\p@
+ \ifnum\dimen7>\dimen@ \advance\dimen7-\dimen@
+ \else \dimen7=\z@ \fi
+ \else \dimen7=\p@ \fi
+\splinetrace@{adjusted for \the\count@\space segments:
+ \the\dimen5, \the\dimen7}%
+ \fi}
+\xydef@\adjustbsplineedges@{\bgroup
+\splinetrace@{** adjusting edges **}%
+ \readsplineparams@ \adjust@forsegments@
+\splinetrace@{params:\xysplineparams@}%
+\splinetrace@{segment \segmentnum@:<\the\dimen5,\the\dimen7>:\xysplineedges@}%
+ \multiply\dimen7by\m@ne \advance\dimen7by\p@
+ \expandafter\edef\xysplineedges@{%
+ \noexpand\z@;\the\dimen5,\noexpand\z@;\the\dimen7,}%
+ \edef\tmp@{\egroup
+ \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}}%
+ \tmp@ }
+\xydef@\bsegment@@ii@iii{%
+ \xycontrolpt@{\count@@}\global\dimen3=\X@c \global\dimen5=\Y@c
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\count@@\@ne \xycontrolpt@{\count@@}\A@=\X@c \B@=\Y@c
+ \advance\A@ by2\dimen3 \dimen@nth3\A@
+ \advance\B@ by2\dimen5 \dimen@nth3\B@
+ \dimen@=\dimen3 \advance\dimen@ by2\X@c
+ \dimen@nth3\dimen@
+ \global\dimen3=\dimen@
+ \dimen@=\dimen5 \advance\dimen@ by2\Y@c
+ \dimen@nth3\dimen@
+ \global\dimen5=\dimen@
+\splinetrace@{<: \the\dimen3, \the\dimen5}%
+\splinetrace@{>: \the\A@, \the\B@}%
+ \advance\count@@\m@ne }
+\xydef@\bsegment@@i{\bgroup
+ \advance\count@@\m@ne \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \advance\X@p-2\dimen3\advance\X@p by7\A@
+ \dimen@nth6\X@p
+ \advance\Y@p-2\dimen5\advance\Y@p by7\B@
+ \dimen@nth6\Y@p
+}
+\xydef@\bsegment@@iv{%
+ \advance\count@@\tw@ \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\X@c by7\dimen3\advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c by7\dimen5\advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+\splinetrace@{>>: \the\X@c, \the\Y@c }%
+}
+\xydef@\bsegment@@ii@i{\bgroup
+ \advance\count@@\m@ne \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \advance\X@p-\dimen3\advance\X@p by4\A@
+ \dimen@nth4\X@p
+ \advance\Y@p-\dimen5\advance\Y@p by4\B@
+ \dimen@nth4\Y@p
+\splinetrace@{<<: \the\X@p, \the\Y@p}%
+}
+\xydef@\bsegment@@y@iv{%
+ \advance\count@@\tw@ \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\X@c by4\dimen3\advance\X@c-\A@
+ \dimen@nth4\X@c
+ \advance\Y@c by4\dimen5\advance\Y@c-\B@
+ \dimen@nth4\Y@c
+}
+\xydef@\bsegment@i{%
+ \xycontrolpt@\z@ \X@p=\the\X@c \Y@p=\the\Y@c
+\splinetrace@{0: \the\X@p \the\Y@p}%
+ \xycontrolpt@\@ne
+\splinetrace@{1: \the\X@c, \the\Y@c}\A@=\X@c \B@=\Y@c
+ \xycontrolpt@\tw@
+ \dimen@=\X@c \advance\dimen@\A@ \dimen@half
+ \global\dimen3=\dimen@
+\splinetrace@{2: \the\X@c, \the\Y@c}%
+ \dimen@=\Y@c \advance\dimen@\B@ \dimen@half
+ \global\dimen5=\dimen@ }
+\xydef@\bsegment@i@iv{%
+ \xycontrolpt@{3}%
+\splinetrace@{3: \the\X@c, \the\Y@c}%
+ \advance\X@c by7\dimen3\advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c by7\dimen5\advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+ }
+\xydef@\bsegment@z{%
+ \expandafter\count@@\xycrvptsnum@ \advance\count@@\@ne
+ \xycontrolpt@{\the\count@@}\relax
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\count@@\m@ne
+ \bgroup
+ \xycontrolpt@{\the\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \global\dimen3=\X@c \global\dimen5=\Y@c
+ \advance\count@@\m@ne \xycontrolpt@{\the\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \A@=\X@c \advance\A@\dimen3 \halve@dimen\A@
+ \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@
+ \edef\tmp@{\egroup \A@=\the\A@ \B@=\the\B@ \count@@=\the\count@@}%
+ \tmp@ }
+\xydef@\bsegment@z@i{%
+ \expandafter\count@@\xycrvptsnum@\relax\advance\count@@-\tw@
+ \bgroup
+ \xycontrolpt@{\count@@}\X@p=\the\X@c \Y@p=\the\Y@c
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\X@p by7\A@ \advance\X@p-2\dimen3 \dimen@nth6\X@p
+ \advance\Y@p by7\B@ \advance\Y@p-2\dimen5 \dimen@nth6\Y@p
+ \edef\tmp@{\egroup \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \tmp@ }
+\xydef@\bsplinesegment@#1{\xybsplinemethods@
+ \count@@=#1\relax
+ \ifnum\count@@=\@ne
+ \bsegment@i \bsegment@i@iv
+ \else\ifnum\count@@=\tw@
+ \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@iv
+ \else\expandafter\count@\xycrvptsnum@\advance\count@\m@ne
+ \ifnum\count@@=\count@
+ \bsegment@z \bsegment@z@i
+ \else\advance\count@\m@ne
+ \ifnum\count@@=\count@
+ \bsegment@@ii@iii \bsegment@@i \bsegment@@y@iv
+ \else
+ \bsegment@@ii@iii \bsegment@@i \bsegment@@iv
+ \fi\fi\fi\fi
+ \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
+ \bsplined@ }
+\xydef@\bsplinesegment@iii#1{\xybsplinemethods@
+\splinetrace@{2 segments; \number#1}%
+ \count@@=#1\relax
+ \ifnum\count@@=\@ne \bsegment@i
+ \xycontrolpt@{3}%
+\splinetrace@{3: \the\X@c, \the\Y@c}%
+ \advance\X@c 4\dimen3\advance\X@c-\A@
+ \dimen@nth4\X@c
+ \advance\Y@c 4\dimen5\advance\Y@c-\B@
+ \dimen@nth4\Y@c
+ \else\ifnum\count@@=\tw@ \bsegment@z
+ \bgroup\xycontrolpt@{\@ne}%
+\splinetrace@{1: \the\X@c, \the\Y@c}%
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \advance\X@p 4\A@ \advance\X@p-\dimen3
+ \dimen@nth4\X@p
+ \advance\Y@p 4\B@ \advance\Y@p-\dimen5
+ \dimen@nth4\Y@p
+ \fi\fi
+ \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
+ \bsplined@ }
+\xydef@\bsplinesegment@iv#1{\xybsplinemethods@
+\splinetrace@{3 segments; \number#1}%
+ \count@@=#1\relax
+ \ifnum\count@@=\@ne \bsegment@i \bsegment@i@iv
+ \else\ifnum\count@@=\tw@
+ \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@y@iv
+ \else\ifnum\count@@=3\relax
+ \bsegment@z \bsegment@z@i
+ \fi\fi\fi
+ \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
+ \bsplined@ }
+\message{circles,}
+\xydef@\Circmagic@@{0.5517847}
+\xylet@\Circmagic=\Circmagic@@
+\xydef@\twoPi@{6.2831852}
+\xydef@\fullPi@{3.1415926}
+\xydef@\halfPi@{1.5707963}
+\xynew@{dimen}\L@
+\xydef@\xycircle#1#{\hbox\bgroup\afterVECTORorEMPTY{%
+ \xy@@{\R@=\X@c \L@=\Y@c}\xycircle@}{\xy@@{\R@=\R@c \L@=\L@c}\xycircle@}#1@}
+\xydef@\xycircle@#1@#2{%
+ \DN@{#1}\ifx\next@\empty\def\onlyQuad@{}\else \count@=#1\relax
+ \ifnum\count@<5 \advance\count@-3\relax
+ \ifnum\count@<\z@ \advance\count@ 4\relax\fi \edef\onlyQuad@{\the\count@}%
+ \else\xyerror@{illegal circle <radius>: must be <vector> or <empty>}{}\fi
+ \fi \xy@@{\def\circleSTYLE@{#2}}\def\circleSTYLE@{#2}\xycircle@i}
+\xydef@\xycircle@i{\hbox{\vbox{\vskip\L@
+ \hbox to2\R@{\hfill \buildcircle@ \hfill}\vskip\L@ }}%
+ \L@c=\R@ \R@c=\R@ \D@c=\L@ \U@c=\L@ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}\Edge@c={\circleEdge}%
+ \OBJECT@x}
+\xydef@\adjustMinMaxcirc@#1#2{%
+ \dimen@=\X@c \advance\dimen@#1\relax\ifdim\dimen@>\X@max \X@max=\dimen@\fi
+ \dimen@=\X@c \advance\dimen@-#1\relax\ifdim\dimen@<\X@min \X@min=\dimen@\fi
+ \dimen@=\Y@c \advance\dimen@#2\relax\ifdim\dimen@>\Y@max \Y@max=\dimen@\fi
+ \dimen@=\Y@c \advance\dimen@-#2\relax\ifdim\dimen@<\Y@min \Y@min=\dimen@\fi
+}
+%% \cubicCircleControls@@
+\xydef@\cubicCircleControls@@{\X@origin=\z@ \Y@origin=\z@
+ \X@xbase=\R@ \Y@xbase=\z@ \X@ybase=\z@ \Y@ybase=\L@
+ \vfromcartesian@@1,0@\czeroEdge@\idfromc@{0@c}%
+ \vfromcartesian@@0,1@\czeroEdge@\idfromc@{1@c}%
+ \vfromcartesian@@-1,0@\czeroEdge@\idfromc@{2@c}%
+ \vfromcartesian@@0,-1@\czeroEdge@\idfromc@{3@c}%
+ \vfromcartesian@@1,\Circmagic@@ @\czeroEdge@\idfromc@{1@m}%
+ \vfromcartesian@@\Circmagic@@,1@\czeroEdge@\idfromc@{2@m}%
+ \vfromcartesian@@-\Circmagic@@,1@\czeroEdge@\idfromc@{3@m}%
+ \vfromcartesian@@-1,\Circmagic@@ @\czeroEdge@\idfromc@{4@m}%
+ \vfromcartesian@@-1,-\Circmagic@@ @\czeroEdge@\idfromc@{5@m}%
+ \vfromcartesian@@-\Circmagic@@,-1@\czeroEdge@\idfromc@{6@m}%
+ \vfromcartesian@@\Circmagic@@,-1@\czeroEdge@\idfromc@{7@m}%
+ \vfromcartesian@@1,-\Circmagic@@ @\czeroEdge@\idfromc@{8@m}%
+ }
+\xydef@\doCircleQuadrant@@#1#2{\save@ \ifcase#2\relax
+ \doCircleQuadrant@@@{0@c}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleQuadrant@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleQuadrant@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleQuadrant@@@{3@c}{7@m}{8@m}{0@c}{#1}\or
+ \doCircleQuadrant@@@{0@c}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleQuadrant@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleQuadrant@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleQuadrant@@@{3@c}{7@m}{8@m}{0@c}{#1}\fi \leave@ }
+\xydef@\doCircleQuadrant@@@#1#2#3#4#5{%
+ \cfromid@{#1}\pfromc@\senter@
+ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \let\bstartPLACE@=\empty \connect@\crvs{#5}\relax\sinit@\sleave@
+ \resetbreaks@}
+\xydef@\dosolidcircle@#1{%
+ \cubicCircleControls@@
+ \doCircleQuadrant@@{#1}1 \relax\Clast@@
+ \doCircleQuadrant@@{#1}2 \relax\Clast@@
+ \doCircleQuadrant@@{#1}3 \relax\Clast@@
+ \doCircleQuadrant@@{#1}4 \relax\Clast@@}%
+\xydef@\solidcircle@{\dosolidcircle@@}
+\xylet@\dosolidcircle@@=\dosolidcircle@
+\xydef@\circledobjects@{\cubicCircleControls@@
+ \setboxz@h{\expandafter\object\circleSTYLE@{}}%
+ \ifdim\L@>\R@ \dimen@ii=\ht\z@ \advance\dimen@ii \dp\z@
+ \ifdim\zz@\dimen@ii \dimen@ii=\wdz@\fi
+ \else \dimen@ii=\wdz@
+ \ifdim\zz@\dimen@ii \dimen@ii=\ht\z@ \advance\dimen@ii \dp\z@\fi
+ \fi \ifdim\zz@\dimen@ii \dimen@ii=2\jot\fi
+ \expandafter\dimen@\ifdim\L@>\R@ \twoPi@\L@\else \twoPi@\R@\fi
+ \advance\dimen@.5\dimen@ii
+ \count@@=\dimen@ \count@=\dimen@ii \divide\count@@\count@
+ \edef\numobjects{\the\count@@}\dimen@=4\p@
+ \dimen@nth\numobjects\dimen@
+ \edef\circleseparation@{\expandafter\removePT@\the\dimen@}%
+ \edef\circleplace@{-\circleseparation@}\placeQuadrants@}%
+\xydef@\placeQuadrants@{\DN@{\placeAllQuadrants@}%
+ \ifx\onlyQuad@\undefined\else\ifx\onlyQuad@\empty\else
+ \DN@{\expandafter\placeCircQuadrant@\expandafter{\onlyQuad@}}%
+ \fi\fi \next@ }%
+\xydef@\placeAllQuadrants@{%
+ \placeCircQuadrant@{1}%
+ \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \placeCircQuadrant@{2}%
+ \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \placeCircQuadrant@{3}%
+ \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \placeCircQuadrant@{4}}
+\xydef@\placeCircQuadrant@#1{%
+ \let\bstartPLACE@=\relax \doCircleQuadrant@@{}#1%
+ \loop@
+ \expandafter\dimen@\circleplace@\p@
+ \advance\dimen@\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \ifdim\dimen@<\p@ \placeCircObject@
+ \repeat@ }
+\xydef@\placeCircObject@{\begingroup
+ \crvconnect@@ \Creset@@ \Invisible@false
+ \expandafter\splinealong@\expandafter{\circleplace@}%
+ \expandafter\drop\circleSTYLE@{}\endgroup }
+\xydef@\buildcircle@{\save@
+ \DNii@{\circledobjects@}%
+ \ifx\circleSTYLE@\empty\DNii@{\solidcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDASH@{}}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\solidcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addEQ@{}}%
+ \ifx\next@\circleSTYLE@
+ \expandafter\circletemplate@\expandafter{\addEQ@{}}{}%
+ \else \expandafter\DN@\expandafter{\addDASH@ 2}%
+ \ifx\next@\circleSTYLE@ \DNii@{\doublecircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDASH@ 3}%
+ \ifx\next@\circleSTYLE@ \DNii@{\triplecircle@{}}%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addDASH@\addDASH@{}}%
+ \ifx\next@\circleSTYLE@ \DNii@{\dashedcircle@{}}%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addEQ@\addEQ@{}}%
+ \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter
+ \circletemplate@\expandafter\expandafter\expandafter{%
+ \expandafter\addEQ@\addEQ@{}}2%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addEQ@\addEQ@2}%
+ \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter
+ \circletemplate@\expandafter\expandafter\expandafter{%
+ \expandafter\addEQ@\addEQ@{}}2%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addEQ@\addEQ@3}%
+ \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter
+ \circletemplate@\expandafter\expandafter\expandafter{%
+ \expandafter\addEQ@\addEQ@{}}3%
+ \else \expandafter\DN@\expandafter{\addDOT@{}}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\dottedcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDOT@2}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\dbldottedcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDOT@3}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\trpldottedcircle@{}}%
+ \else \DN@{:}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\dbldottedcircle@{}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \nextii@ \leave@}
+\xydef@\circletemplate@#1#2{\def\circleSTYLE@{\dir#2{#1}}}
+\xydef@\doublecircle@#1{%
+ \advance\R@-\p@ \advance\L@-\p@ \solidcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}}
+\xydef@\triplecircle@#1{%
+ \advance\R@-2\p@ \advance\L@-2\p@ \solidcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}}
+\xydef@\dottedcircle@#1{%
+ \expandafter\def\expandafter\circleSTYLE@\expandafter{%
+ \zerodot@i}%
+ \circledobjects@}
+\xydef@\dashedcircle@#1{%
+ \expandafter\def\expandafter\circleSTYLE@\expandafter{\zerodash@i}%
+ \circledobjects@}
+\xydef@\dbldottedcircle@#1{%
+ \advance\R@-\p@ \advance\L@-\p@ \dottedcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}}
+\xydef@\trpldottedcircle@{%
+ \advance\R@-2\p@ \advance\L@-2\p@ \dottedcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}}
+{\xyuncatcodes \gdef\next{=<.75\jot>{\zerodot}}}
+\xylet@\zerodot@i=\next
+{\dimen0=2\xydashl@ \xyuncatcodes
+\expandafter\gdef\expandafter\next\expandafter{\expandafter
+ =\expandafter<\the\dimen0 >_\dir{|}}}
+\xylet@\zerodash@i=\next
+{\xyuncatcodes\gdef\next{--}}
+\xylet@\dashcorntemp@@=\next
+{\xyuncatcodes\gdef\next{.}}
+\xylet@\dotcorntemp@@=\next
+\xydef@\dotcorner@#1{%
+ \expandafter\circleCorner@\expandafter{\dotcorntemp@@}{#1}}%
+\xydef@\dashcorner@#1{%
+ \expandafter\circleCorner@\expandafter{\dashcorntemp@@}{#1}}
+\xydef@\circleCorner@#1#2{\setboxz@h\bgroup
+ \edef\next{#2\relax\R@=\the\R@\relax\L@=\R@ }%
+ \expandafter\xycircle@\next @{#1}%
+ \ifcase#2\or \setboxz@h{\lower\R@\boxz@\kern\X@c}%
+ \or \setboxz@h{\kern-\R@\lower\R@\boxz@\kern\R@\kern\X@c}%
+ \or \setboxz@h{\kern-\R@\lower\R@\boxz@\kern\R@\kern\X@c}%
+ \or \setboxz@h{\lower\R@\boxz@\kern\X@c}\fi
+ \wdz@=\R@ \ht\z@=\R@ \dp\z@=\R@ \boxz@
+ }
+\xydef@\qspline{\hbox\bgroup\crvresetbreaks@ \xy@spline@}
+\xydef@\xy@spline@#1#{\if\sempty@ \DN@{\crvs@{}\resetbreaks@}%
+ \else\DN@{\xy@spline@i{#1}}\fi \next@ }%
+\xydef@\xy@spline@i#1#2{\def\splineSTYLE@{#2}%
+ \DN@{\xy@spline@ii}\DNii@{#1}%
+ \ifx\nextii@\empty\DN@{\xy@spline@ii@@}\fi \next@ }
+\xydef@\xy@spline@ii{\save@ \cfromp@\idfromc@{@p}%
+ \enter@\cplusthec@ \count@@=\s@top\advance\count@@\m@ne
+ \cfroms@{\count@@}\leave@
+ \halve@dimen\X@c
+ \halve@dimen\Y@c
+ \czeroEdge@ \idfromc@{@c}%
+ \expandafter\doSplineStraight@\expandafter{\splineSTYLE@}%
+ \count@=\@ne \edef\next@{\the\count@}%
+ \ifx\next@\s@top\DN@{\xy@spline@iv}\else\DN@{\xy@spline@iii}\fi
+ \next@ }
+\xylet@\xy@spline@ii@@=\xy@spline@ii
+\xydef@\xy@spline@iii{\crv@cnt@=\s@top
+ \loop \advance\crv@cnt@\m@ne \xy@spline@g \ifnum\crv@cnt@>\@ne\repeat
+ \xy@spline@iv}
+\xydef@\xy@spline@g{\cfromid@{@c}\idfromc@{@p}%
+ \count@@=\crv@cnt@\cfroms@{\count@@}\idfromc@{@m}%
+ \enter@\cplusthec@ \count@@=\crv@cnt@ \advance\count@@\m@ne
+ \cfroms@{\count@@}\leave@
+ \halve@dimen\X@c
+ \halve@dimen\Y@c
+ \czeroEdge@\idfromc@{@c}%
+ \expandafter\doSplineSegment@\expandafter{\splineSTYLE@}}
+\xydef@\xy@spline@iv{\cfromid@{@c}\idfromc@{@p}%
+ \cfroms@{\z@}\idfromc@{@m}\leave@ \save@
+ \enter@\cplusthec@ \cfromid@{@m}\leave@
+ \halve@dimen\X@c
+ \halve@dimen\Y@c
+ \czeroEdge@\idfromc@{@c}%
+ \expandafter\doSplineSegment@\expandafter{\splineSTYLE@}%
+ \xy@spline@v }
+\xydef@\xy@spline@v{\cfromid@{@c}\idfromc@{@p}%
+ \leave@ \save@ \idfromc@{@c}%
+ \expandafter\doSplineStraight@\expandafter{\splineSTYLE@}%
+ \xy@spline@x }
+\xydef@\xy@spline@x{\leave@
+ \def\Drop@@{\splineDrop@ \resetbreaks@}%
+ \def\Connect@@{\straight@\relax\splineConnect@ \resetbreaks@}%
+ \OBJECT@x}
+\xydef@\splineDrop@{\ifInvisible@\setboxz@h{}%
+ \else\setboxz@h{\kern-\the\X@c\raise-\the\Y@c\hbox{\styledboxz@}}\fi
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@ }
+\xydef@\splineConnect@{%
+ \ifInvisible@\else\box\lastobjectbox@\fi }%
+\xydef@\doSplineStraight@#1{\begingroup \sinit@
+ \cfromid@{@p}\pfromc@\cfromid@{@c}%
+ \connect@\crvs{#1}\relax\sleave@\endgroup }
+\xydef@\doSplineSegment@#1{\begingroup \sinit@
+ \cfromid@{@p}\pfromc@\senter@\cfromid@{@m}\spushc@\cfromid@{@c}%
+ \connect@\crvs{#1}\relax\sinit@\sleave@\endgroup }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydummy.tex b/macros/generic/diagrams/xypic/texinputs/xydummy.tex
new file mode 100644
index 0000000000..99182b8b5c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydummy.tex
@@ -0,0 +1,30 @@
+%% xydummy.tex from $Id: xydummy.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Dummy'' option.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dummy}{Dummy option}{\stripRCS$Revision: 3.7 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xynew@{count}\xydummyrequires@@
+\xyeveryrequest{dummy}{\global\advance\xydummyrequires@@\@ne
+ \W@{The `dummy' option was used \the\xydummyrequires@@\space times!}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex b/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex
new file mode 100644
index 0000000000..2f8eb1745e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex
@@ -0,0 +1,36 @@
+%% xydvidrv.tex from $Id: xydvidrv.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``dvidrv-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dvidrv}{dvidrv driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\dvidrv@@#1{\dvimessage@{dvidrv}{#1}}
+\newdriver{%
+ \xyaddsupport{emtex}\dvidrvEmTeX@@
+ \xyaddsupport{line}\dvidrvLine@@
+}
+\xydef@\dvidrvEmTeX@@{\dvidrvEmTeX@}%
+\xydef@\dvidrvEmTeX@{\setupxyEMTeX@}%
+\xydef@\dvidrvLine@@{\dvidrvLine@}%
+\xydef@\dvidrvLine@{\xywithoption{emtex}{\installEMline@}}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydvips.tex b/macros/generic/diagrams/xypic/texinputs/xydvips.tex
new file mode 100644
index 0000000000..d0d1176753
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydvips.tex
@@ -0,0 +1,154 @@
+%% xydvips.tex from $Id: xydvips.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``dvips-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dvips}{DVIPS driver}{\stripRCS$Revision: 3.9 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\dvips@@#1{\dvimessage@{dvips}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\dvipsColor@@
+ \xyaddsupport{crayon}\dvipsCrayola@@
+ \xyaddsupport{ps}\dvipsPS@@
+ \xyaddsupport{rotate}\dvipsRotate@@
+ \xyaddsupport{line}\dvipsLine@@
+ \xyaddsupport{frame}\dvipsFrames@@
+ \xyaddsupport{tile}\dvipsTiles@@
+ \xyaddsupport{tpic}\dvipsTPIC@
+ \xyaddsupport{emtex}\dvipsEM@
+ \xyaddsupport{tips}\dvipsTIPS@
+}
+\xydef@\dvips@Color@{\dvipsPStypes@
+ \let\xylocalColor@=\xystackcolor@
+ \let\xycolor@push\xycolor@push@@
+ \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\installPScolor@ }%
+ \else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\dvipsCrayola@{}}%
+ \else \DN@{\xystandardcolors@}\fi \next@
+ \let\dvipsColor@@=\relax
+ \let\UnloadColor@@=\NoDVIPScolor@
+ }%
+\xydef@\dvipsColor@@{\dvips@Color@}
+\xydef@\NoDVIPScolor@{%
+ \def\xycolor@{\xycolor@@}%
+ \let\xycolor@@=\xyNoColor@
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\dvipsColor@@=\dvips@Color@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\NoDVIPScolordvi@{\xywarning@{%
+ Neither colordvi.tex nor colordvi.sty could be found.}%
+ \xyBEcolorcheck@}%
+\xydef@\dvipsCrayola@@{\dvipsColor@@\dvipsCrayola@}
+\xydef@\dvipsCrayola@{%
+ \let\prevxycolor@=\newxycolor@
+ \def\newxyDVIPScolor@##1##2##3{\prevxycolor@{##1}{}{##1}}%
+ \let\newxycolor@=\newxyDVIPScolor@ \dvipsInclude@{color.pro}%
+ \installCrayolaColors@
+ \let\newxycolor@=\prevxycolor@ }%
+\xydef@\dvipsPS@@{\dvipsPS@}
+\xydef@\dvipsPS@unload{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\dvipsPS@@=\dvipsPS@ }
+\xydef@\dvipsPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\dvipsSpecial@\else
+ \let\PSspecial@@=\dvipsSpecial@
+ \let\PSmacro@@=\dvipsMacro@
+ \let\PSdict@@=\dvipsDict@
+ \let\PSspecialdict@@=\dvipsDict@
+ \let\PSraw@@=\dvipsRaw@
+ \let\PSinclude@@=\dvipsInclude@
+ \let\xyPSobeylines@@=\obeyDVIPSlines@
+ \let\xyPScurrpt@@=\dvipsCurrpt@@
+ \dvips@@{PostScript}%
+ \fi
+ \XYpredict@ }
+\xywarnifdefined\dvipsSpecial@
+\xywarnifdefined\dvipsMacro@
+\xywarnifdefined\dvipsDict@
+\xywarnifdefined\dvipsInclude@
+\xywarnifdefined\dvipsRaw@
+{\catcode`\"=11 \catcode`\!=11 \catcode`\:=11
+ \gdef\dvipsSpecial@#1{\special{ps:: SDict begin #1 end}}
+ \gdef\dvipsMacro@#1{\firstPS@@\special{" {#1}xy}}
+ \gdef\dvipsDict@#1{\special{! #1}}
+ \gdef\dvipsInclude@#1{\special{header=#1}}
+ \gdef\dvipsRaw@#1{\special{ps: SDict begin #1 end}}
+\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space }}%
+\xylet@\obeyDVIPSlines@=\next
+\xydef@\dvipsCurrpt@{\let\xyPScurrpt@@=\dvipsCurrpt@@}%
+\xydef@\dvipsCurrpt@@{\PSraw@@{xyp}}
+\xydef@\dvipsPS@{\dvipsPStypes@
+ \let\dvipsPS@@=\PSspecials@true
+ \let\UnloadPS@@=\dvipsPS@unload
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\dvipsRotate@@{\dvipsRotate@}
+\xydef@\dvipsRotate@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \dvipsCurrpt@ \dvipsRotScale@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\dvipsRotScale@{%
+ \def\xyrot@start(##1){{xyct ##1\space xyrs }}%
+ \def\xyrot@end{}%
+ \def\xyscale@start(##1,##2){{xyct ##1\space##2\space xyss }}%
+ \def\xyscale@end{}}
+\xydef@\dvipsLine@@{\dvipsLine@}
+\xydef@\dvipsLine@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\dvipsFrames@@{\dvipsFrames@}
+\xydef@\dvipsFrames@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi
+ \next@ }
+\xydef@\dvipsTiles@@{\dvipsTiles@}
+\xydef@\dvipsTiles@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\dvipsTPIC@@{\dvipsTPIC@}
+\xydef@\dvipsTPIC@{\setupxyTPIC@}
+\xydef@\dvipsEM@@{\dvipsEM@}
+\xydef@\dvipsEM@{\setupxyEMTeX@}
+\xydef@\dvipsTIPS@{
+ \PSdict@@{/XYdict where pop begin XYdict begin}%
+ \PSdict@@{%
+ /lu{0.04 0.0 -0.16 0.125 -0.11 0.0
+ 1 1 6{pop xyfsize mul 6 1 roll}for
+ lineto lineto lineto closepath fill
+ 0 0 0 0 0 0}def
+ }%
+ \PSdict@@{end end}%
+}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydvitops.tex b/macros/generic/diagrams/xypic/texinputs/xydvitops.tex
new file mode 100644
index 0000000000..42f8f8ea2e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydvitops.tex
@@ -0,0 +1,179 @@
+%% xydvitops.tex from $Id: xydvitops.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``DVITOPS-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dvitops}{DVITOPS driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\dvitops@@#1{\dvimessage@{DVITOPS}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\dvitopsColor@@
+ \xyaddsupport{crayon}\dvitopsCrayon@@
+ \xyaddsupport{ps}\dvitopsPS@@
+ \xyaddsupport{rotate}\dvitopsRotate@@
+ \xyaddsupport{line}\dvitopsLine@@
+ \xyaddsupport{frame}\dvitopsFrames@@
+ \xyaddsupport{tile}\dvitopsTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\dvitopsColor@@{\dvitops@Color@}
+\xydef@\dvitops@Color@{\dvitopsPStypes@
+ \let\xylocalColor@=\xyDVITOPScolor@
+ \let\xycolor@push\xycolor@push@@
+ \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\xycatcodes
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\dvitopsCrayon@{}}%
+ \else\let\next@=\xystandardcolors@
+ \fi \next@
+ \let\dvitops@Color@@=\relax
+ \let\UnloadColor@@=\NoDVITOPScolor@
+ }%
+\xydef@\NoDVITOPScolor@{%
+ \def\xycolor@{\xycolor@@}%
+ \let\xycolor@@=\xyNoColor@
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\dvitops@Color@@=\dvitops@Color@
+ }
+\xydef@\xyDVITOPScolor@{\bgroup \DN@##1##2{\egroup}%
+ \ifInvisible@\else\ifHidden@\else\DNii@{\no@@}\ifx\nextii@\Connect@@
+ \else\DN@{\xyDVITOPScolor@i}\fi\fi\fi \next@ }
+\xydef@\xyDVITOPScolor@i#1#2{\checkXyStyle@
+ \DN@{#2}\ifx\next@\empty
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{#1}}}%
+ \else\DNii@{gray}\ifx\next@\nextii@
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{gray}{#1}}}%
+ \else\DNii@{rgb}\ifx\next@\nextii@
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{rgbcolor}{#1}}}%
+ \else\DNii@{hsb}\ifx\next@\nextii@
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{hsbcolor}{#1}}}%
+ \else \DN@{\xywarning@{DVITOPS cannot support color: #2 #1}}%
+ \fi\fi\fi\fi
+ \toks@={\egroup \let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\tmp@\expandafter{\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}\def\Connect@@}%
+ \expandafter\tmp@\expandafter{\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}}%
+ \the\toks@ }%
+\xydef@\xycolor@begin{\dvitopsBegin@{color}}
+\xydef@\xycolor@end{\dvitopsEnd@{color}\dvitopsColor@x}
+\xydef@\dvitopsCrayon@@{\dvitopsColor@@\dvitopsCrayon@}
+\xydef@\dvitopsCrayon@{\installCrayolaColors@}%
+\xydef@\dvitopsPS@@{\dvipsPS@}
+\xydef@\dvitopsPS@unload{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\dvitopsPS@@=\dvitopsPS@ }
+\xydef@\dvitopsPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\dvitopsSpecial@\else
+ \let\PSspecial@@=\dvitopsSpecial@
+ \let\PSmacro@@=\dvitopsMacro@
+ \let\PSdict@@=\dvitopsDict@
+ \let\PSspecialdict@@=\dvitopsDict@
+ \let\PSraw@@=\dvitopsRaw@
+ \let\PSinclude@@=\dvitopsInclude@
+ \let\xyPSobeylines@@=\obeyDVIPSlines@
+ \let\xyPScurrpt@@=\dvitopsCurrpt@@
+ \dvitops@@{PostScript}%
+ \fi
+ \XYpredict@ }
+\xywarnifdefined\dvitopsSpecial@
+\xywarnifdefined\dvitopsMacro@
+\xywarnifdefined\dvitopsDict@
+\xywarnifdefined\dvitopsInclude@
+\xywarnifdefined\dvitopsRaw@
+\xywarnifdefined\dvitopsOrigin@
+\xywarnifdefined\dvitopsBegin@
+\xywarnifdefined\dvitopsEnd@
+\xywarnifdefined\dvitopsRotate@x
+\xywarnifdefined\dvitopsTransform@x
+\xywarnifdefined\dvitopsColor@x
+{\catcode`\:=11
+ \gdef\dvitopsSpecial@#1{\special{dvitops: inline #1}}
+ \gdef\dvitopsMacro@#1{\special{dvitops: inline {#1}xy}}
+ \gdef\dvitopsDict@#1{\special{dvitops: inline #1}}
+ \gdef\dvitopsInclude@#1{\special{dvitops: prolog #1}}
+ \gdef\dvitopsRaw@#1{\special{dvitops: inline #1}}
+ \gdef\dvitopsOrigin@#1{\special{dvitops: origin #1}}
+ \gdef\dvitopsBegin@#1{\special{dvitops: begin #1}}
+ \gdef\dvitopsEnd@#1{\special{dvitops: end #1}}
+ \gdef\dvitopsRotate@x#1{\special{dvitops: rotate #1}}
+ \gdef\dvitopsTransform@x#1{\special{dvitops: transform #1}}
+ \gdef\dvitopsColor@x#1#2{\special{dvitops: #1 color #2}}
+}
+\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space }}%
+\xylet@\obeyDVIPSlines@=\next
+\xydef@\dvitopsCurrpt@{\global\let\xyPScurrpt@@=\relax}%
+\xydef@\dvitopsPS@{\dvitopsPStypes@
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\dvitopsRotate@@{\dvitopsRotate@}
+\xydef@\dvitopsRotate@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty
+ \DN@{\xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \installDVITOPSrotate@ }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\dvitopsRotScale@{%
+ \def\xyrot@start{\dvitopsBegin@{rot}\dvitopsOrigin@{rot}}%
+ \def\xyrot@end(##1){\dvitopsEnd@{rot}\dvitopsRotate@x{##1}}%
+ \def\xyscale@start{\dvitopsBegin@{scal}\dvitopsOrigin@{scal}}%
+ \def\xyscale@end(##1,##2){%
+ \dvitopsEnd@{scal}\dvitopsTransform@x{##1 0 ##2 0}}%
+ }
+\xydef@\installDVITOPSrotate@{\installPSstyle@
+ \let\xyRotate@@=\dvitopsRotate@
+ \let\doSpecialRotate@@=\dvitopsSpecialRotate@
+ \let\xyscale@@=\dvitopsScale@
+ \dvitopsCurrpt@
+ \dvitopsRotScale@ \xyPSshapes@true }
+\xydef@\UnloadDVITOPSrotate@{\UnloadRotate@\relax}
+ \xydef@\dvitopsRotate@#1{\xyPSsplitPS@
+ {\dvitopsBegin@{rot}\dvitopsOrigin@{rot}}%
+ {\dvitopsEnd@{rot}\dvitopsRotate@x{#1}}}%
+ \xydef@\dvitopsScale@#1#2{\xyPSsplitPS@
+ {\dvitopsBegin@{scal}\dvitopsOrigin@{scal}}%
+ {\dvitopsEnd@{scal}\dvitopsTransform@x{#1 0 #2 0}}}
+ \xydef@\dvitopsSpecialRotate@#1@@{\dvitopsRotate@{#1}}
+\xydef@\dvitopsLine@@{\dvitopsLine@}
+\xydef@\dvitopsLine@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\dvitopsFrames@@{\dvitopsFrames@}
+\xydef@\dvitopsFrames@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi
+ \next@ }
+\xydef@\dvitopsTiles@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\dvitopsTPIC@@{\dvitopsTPIC@}
+\xydef@\dvitopsTPIC@{\setupxyTPIC@}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyemtex.tex b/macros/generic/diagrams/xypic/texinputs/xyemtex.tex
new file mode 100644
index 0000000000..d1a7e76da0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyemtex.tex
@@ -0,0 +1,101 @@
+%% xyemtex.tex from $Id: xyemtex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``em-TeX'' back-end extension.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{emtex}{em-TeX backend}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xynew@{if}\ifEMspecials@
+\xydef@\UseEMspecials{\EMspecials@true}
+\xydef@\NoEMspecials{\EMspecials@false}
+\xydef@\xyemtex@lineto{\xyEM@special{lineto}}
+\xydef@\xyemtex@moveto{\xyEM@special{moveto}}
+\xydef@\xyemtex@line#1{\xyEM@special{line #1}}
+\xydef@\xyemtex@point#1{\xyEM@special{point #1}}
+\xydef@\xyemtex@pen#1{\addtostyletoks@{\xyEM@special{linewidth #1}}}
+{\catcode`:=12 \gdef\next#1{\special{em:#1}}}
+\xylet@\xyEM@special=\next
+{\catcode`:=12 \gdef\next#1{%
+ \W@{EM:#1 (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}\special{em:#1}}}
+\xylet@\xyEM@noisy=\next
+\xydef@\NoisyEMTeX{\let\xyEM@special=\xyEM@noisy}
+\xydef@\EMalternative@#1#2{%
+\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
+ \xdef#1{\noexpand\ifEMspecials@
+ \noexpand\expandafter\expandafter\noexpand\csname xyemtex@#2@\endcsname
+ \noexpand\else
+ \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
+ \noexpand\fi}}%
+\xydef@\setupxyEMTeX@{\xywarning@{using em-TeX specials}%
+ \EMalternative@{\solid@}{solid}%
+ \EMalternative@{\splinesolid@}{splinesolid}%
+ \let\setupxyEM@=\reloadxyEM@
+ \activateEM@ }
+\xydef@\xyunloadEM@{\xywarning@{EM specials turned off}%
+ \xywithoption{line}{\xysetup@@\uninstallEMline@ }%
+ \EMspecials@false
+ \let\setupxyEM@=\reloadxyEM@ }
+\xydef@\activateEM@{%
+ \xywithoption{line}{\xysetup@@\installEMline@}%
+ \EMspecials@true }
+\xydef@\reloadxyEM@{\xywarning@{EM specials back on}\activateEM@ }
+\xydef@\xyemtex@solid@{%
+ \ifInvisible@ \let\next@=\no@@
+ \else \DN@{\xyEMstraight@}\fi
+ \next@ }
+\xydef@\xyEMstraight@{\setupDirection@
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \DN@##1##2{\def\checkoverlap@@{%
+ \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
+ \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
+ \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
+ \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
+ \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
+ \ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
+ \ifInvisible@\let\next@=\relax \else
+ \DN@{%
+ \setboxz@h{\kern\X@p \raise\Y@p\hbox{\xyemtex@moveto}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@
+ \setboxz@h{\boxz@ \kern\X@c \raise\Y@c\hbox{\xyemtex@lineto}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}%
+ \fi
+ \checkoverlap@@
+ \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\Creset@@ }
+\xydef@\xyemtex@splinesolid@{\setbox\splinebox@=\copy\voidb@x
+ \multiply\splinetol@\thr@@
+ \gdef\splineextra@@{\xyemtex@moveto\gdef\splineextra@@{\xyemtex@lineto}}%
+ \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ }
+\xydef@\xyEMlinewidth@#1{\dimen@=#1\relax\edef\next@{\the\dimen@}}
+\xydef@\installEMline@{%
+ \let\xylinewidth@@=\xylinewidth@
+ \let\xylineSpecial@@=\xyemtex@pen
+ \let\transxyline@@=\xyEMlinewidth@ }
+\xydef@\uninstallEMline@{\UnloadLine@\relax}%
+\xydef@\UseEMlinewidth{\installEMline@}%
+\xydef@\NoEMlinewidth{\uninstallEMline@}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyframe.tex b/macros/generic/diagrams/xypic/texinputs/xyframe.tex
new file mode 100644
index 0000000000..c4a04214a6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyframe.tex
@@ -0,0 +1,537 @@
+%% xyframe.tex from $Id: xyframe.doc,v 3.14 2012/05/24 00:30:38 krisrose Exp $
+%%
+%% Xy-pic ``Frames and Brackets'' extension.
+%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{frame}{Frame and Bracket extension}{\stripRCS$Revision: 3.14 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xydef@\frm{\hbox{}\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\U@c \advance\dimen@\D@c
+ \ifdim\wdz@=\z@ \def\Leftness@{.5}\else \quotient@\Leftness@\L@c\wdz@ \fi
+ \ifdim\dimen@=\z@ \def\Upness@{.5}\else \quotient@\Upness@\U@c\dimen@ \fi
+ \expandafter\Edge@c\expandafter{\prevEdge@@}\let\frmradius@@=\z@
+ \def\Drop@@{}%
+ \def\Connect@@{\xy@@{\save@\cmerge@\Y@p\X@p\D@p\U@p\L@p\R@p\Drop@@}\restore}%
+ \xyFN@\frm@i}
+\xylet@\frmradius@@=\z@
+\xydef@\frm@i{%
+ \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\def\frmradius@@{##1}\xyFN@\frm@i}%
+ \else \DN@##1##{\frm@{##1}}\fi \next@}
+\xydef@\frm@#1#2{\DNii@{frm#1{#2}}%
+ \expandafter\let\expandafter\next@\csname\codeof\nextii@\endcsname
+ \ifx\next@\relax \DNii@{frm{#2}}%
+ \expandafter\let\expandafter\next@\csname\codeof\nextii@\endcsname
+ \ifx\next@\relax \let\next@=\frm@generic \fi\fi \next@}
+\xydef@\frm@generic{\xyerror@{No generic frames yet!}{}}
+\xydef@\frmDrop@#1{%
+ \ifx\frmradius@@\z@ \addtoDrop@@{\let\frmradius@@=\z@ #1}%
+ \else \expandafter\addtoDrop@@\expandafter{%
+ \expandafter\def\expandafter\frmradius@@\expandafter{\frmradius@@}#1}\fi}
+\xydef@\EdgefromtheEdge@{%
+ \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \Edge@c={\expandafter\noexpand\the\Edge@c}}
+\xydef@\prevEdgefromtheEdge@{%
+ \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \noexpand\def\noexpand\prevEdge@@{\expandafter\noexpand\the\Edge@c}}
+\xydef@\addtoDrop@@#1{%
+ \expandafter\def\expandafter\Drop@@\expandafter{\Drop@@#1}}
+\xydef@\addbeforeDrop@@#1{\DNii@{#1}%
+ \expandafter\DN@\expandafter{\expandafter\nextii@\Drop@@}%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\Drop@@
+ \expandafter\expandafter\expandafter{\next@}}
+\xydefcsname@{frm{}}{}
+\xyletcsnamecsname@{frm[]{}}{frm{}}
+\xyletcsnamecsname@{frm[o]{}}{frm{}}
+\xydefcsname@{frm{.}}{\frmDrop@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@doth@@ \let\framevfill=\frm@dotv@@
+ \framed@@{\frmradius@@}}}
+\xyletcsnamecsname@{frm[]{.}}{frm{.}}
+\xydef@\frm@doth@@{\setboxz@h{\kern5\B@\framezerodot@@\kern5\B@}\ht\z@=\B@
+ \dp\z@=\B@\kern5\B@\xleaders\boxz@\hss\kern5\B@}
+\xydef@\frm@dotv@@{\setboxz@h to2\B@{\hss\framezerodot@@\hss}\ht\z@=5\B@
+ \dp\z@=5\B@\kern5\B@\xleaders\boxz@\vss\kern5\B@}
+\xyletcsnamecsname@{frm{..}}{frm{.}}
+\xylet@\framezerodot@@=\zerodot
+\xydefcsname@{frm{-}}{\frmDrop@{\framed@\frmradius@@}}
+\xyletcsnamecsname@{frm[]{-}}{frm{-}}
+\xydef@\framed@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@ \framed@@}
+\xylet@\framesetthick@=\relax
+\xydef@\frm@solidh@@{\framesetthick@\leaders\hrule height\B@ depth\B@\hfill}
+\xydef@\frm@solidv@@{\framesetthick@\leaders\vrule width2\B@\vfill}
+\xydefcsname@{frm{=}}{\frmDrop@{\framed@\frmradius@@
+ {\advance\L@c-2\p@ \advance\R@c-2\p@ \advance\U@c-2\p@ \advance\D@c-2\p@
+ \dimen@=\frmradius@@
+ \ifdim\dimen@>2\p@ \advance\dimen@-2\p@ \else \dimen@=\z@\fi
+ \framed@\dimen@}}}
+\xyletcsnamecsname@{frm[]{=}}{frm{=}}
+\xydef@\framesetthick@line{\B@=.5\xylinethick@}
+\xydef@\frm@thickc@@{\hbox{\framesetthick@line
+ \vrule height.5\B@ depth.5\B@ width\B@}}
+\xywithoption{line}{%
+ \let\framezerodot@@\frm@thickc@@ \let\framesetthick@=\framesetthick@line}
+\xydef@\framed@@#1{\setboxz@h{\R@=#1\relax
+ \dimen@=\L@c \advance\dimen@\R@c \dimen@ii=\U@c \advance\dimen@ii\D@c
+ \ifdim.5\dimen@<\R@ \R@=.5\dimen@ \fi
+ \ifdim.5\dimen@ii<\R@ \R@=.5\dimen@ii \fi
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \ifdim\R@<\p@\else \cirrestrict@@ \fi
+ \dimen@=2\R@ \advance\dimen@-\L@c \advance\dimen@-\R@c
+ \ifdim\dimen@>\z@ \advance\A@-.5\dimen@ \fi
+ \dimen@=2\R@ \advance\dimen@-\U@c \advance\dimen@-\D@c
+ \ifdim\dimen@>\z@ \advance\B@-.5\dimen@ \fi
+ \kern\A@ \raise\B@\vbox to \dimen@ii{\framed@body@@}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\framed@body@{%
+ \advance\dimen@ii.22\p@ \advance\dimen@-.2\p@
+ \setboxz@h{\corn@@4\R@}\A@=-.5\wdz@ \B@=.5\xydashw@
+ \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@
+ \setboxz@h to\dimen@{\kern\A@ \boxz@ \framehfill\corn@@3\R@\kern\A@}%
+ \advance\dimen@ii-\dp\z@ \kern-\ht\z@ \nointerlineskip\boxz@
+ \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@
+ \setboxz@h to\dimen@{\kern\A@\corn@@1\R@\framehfill\corn@@2\R@\kern\A@}%
+ \advance\dimen@ii-\ht\z@
+ \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@.2\p@
+ \nointerlineskip\hbox to\dimen@{%
+ \setbox\z@=\vbox to\dimen@ii{\framevfill}\kern-.5\wdz@\copy\z@
+ \hss \copy\z@\kern-.5\wdz@ }%
+ \nointerlineskip\boxz@ \vss \kern\z@}
+\xylet@\framed@body@@=\framed@body@
+\xylet@\zerocorner=\framezerodot@@
+\xydef@\solidcorner@#1#2{\hbox\bgroup \R@=#2\relax
+ \ifdim\R@<\p@ \zerocorner
+ \else \cirrestrict@@ \multiply\count@8
+ \setboxz@h{\corn@x@@{#1}}\dimen@=\wdz@
+ \ifcase#1\or \ht\z@=\z@ \kern\dimen@ \raise\dimen@\boxz@
+ \or \ht\z@=\z@ \raise\dimen@\boxz@ \kern\dimen@
+ \or \dp\z@=\z@ \lower\dimen@\boxz@ \kern\dimen@
+ \or \dp\z@=\z@ \kern\dimen@ \lower\dimen@\boxz@ \fi
+ \vrule height\dimen@ depth\dimen@ width\z@\fi
+ \edef\tmp@{\egroup \U@c=\the\dimen@}\tmp@ \D@c=\U@c \L@c=\U@c \R@c=\U@c
+ \Edge@c={\circleEdge}\ignorespaces}
+\xydef@\corn@x@#1{\ifcase#1\or
+ \circhar@@\z@ \circhar@@\@ne\or\circhar@@\tw@ \circhar@@3\or
+ \circhar@@5\circhar@@4\or\circhar@@7\circhar@@6\fi}
+\xylet@\corn@x@@=\corn@x@
+\xydef@\corn@@{\DN@{\solidcorner@}%
+ \ifx\framehfill\frm@doth@@ \DN@{\let\cirrestrict@@=\relax
+ \let\corn@x@@=\dotcorner@@ \let\zerodot=\framezerodot@@
+ \solidcorner@ }%
+ \else\ifx\framehfill\frm@dashh@@ \DN@{\let\cirrestrict@@=\relax
+ \let\corn@x@@=\dashcorner@@ \let\zerodot=\framezerodot@@
+ \solidcorner@ }%
+ \fi\fi \next@}
+\xydef@\dotcorner@@#1{\zerocorner}
+\xydef@\dashcorner@@#1{\zerocorner}
+\xywithoption{curve}{%
+ \let\dotcorner@@=\dotcorner@ \let\dashcorner@@=\dashcorner@}
+\xydefcsname@{frm{--}}{%
+ \frmDrop@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@dashh@@ \let\framevfill=\frm@dashv@@
+ \framed@@\frmradius@@}}
+\xyletcsnamecsname@{frm[]{--}}{frm{--}}
+\xydef@\frm@dashh@@{\setboxz@h{\dashhfillchar}%
+ \ht\z@=\B@ \dp\z@=\B@ \wdz@=2\xydashl@
+ \copy\z@ \xleaders\copy\z@\hss \boxz@\kern-\xydashl@}
+\xydef@\frm@dashv@@{\setboxz@h to2\B@{\hss\dashvfillchar\hss}\ht\z@=\z@
+ \dp\z@=2\xydashl@ \nointerlineskip\copy\z@ \xleaders\copy\z@\vss
+ \nointerlineskip\boxz@\kern-\xydashl@}%
+\xydef@\dashhfillchar{{\rDirection@\xydashl@ \line@@}}
+\xydef@\dashvfillchar{{\dDirection@\xydashl@ \line@@}}
+\xydefcsname@{frm{o-}}{%
+ \ifdim\frmradius@@<2\xydashl@\relax \dimen@=.8\xydashl@
+ \expandafter\def\expandafter\frmradius@@\expandafter{\the\dimen@}\fi
+ \frmDrop@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@rddashh@@ \let\framevfill=\frm@rddashv@@
+ \framed@@\frmradius@@}}%
+\xydef@\frm@rddashh@@{\setboxz@h{\kern\xydashl@\dashhfillchar}%
+ \ht\z@=\B@ \dp\z@=\B@ \copy\z@ \xleaders\copy\z@\hss \boxz@ \kern\xydashl@}
+\xydef@\frm@rddashv@@{\ifdim\dimen@ii<2\xydashl@\else
+ \setbox\z@=\vbox to2\xydashl@{\hbox to2\B@{\hss\dashvfillchar\hss}\vss}%
+ \kern\xydashl@ \copy\z@ \xleaders\copy\z@\vss
+ {\ifdim\dimen@ii<2\xydashl@\else\aftergroup\boxz@\fi}\fi}
+\xydefcsname@{frm{,}}{%
+ \ifx\frmradius@@\z@ \shaded@{1.2\p@}\else \shaded@\frmradius@@ \fi}
+\xydef@\shaded@#1{\frmDrop@{\R@=#1\relax
+ {\advance\X@c\R@ \advance\Y@c-\D@c \U@c=\z@ \D@c=\R@ \blacked@}%
+ {\advance\X@c\R@c \advance\Y@c-\R@ \L@c=\z@ \R@c=\R@ \blacked@}}}
+\xydefcsname@{frm{-,}}{\addtoDrop@@{\drop\frm{-}\drop\frm{,}}}
+\xydef@\blacked@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \dimen@=\L@c \advance\dimen@\R@c
+ \B@=\Y@c \advance\B@-\D@c \dimen@ii=\Y@c \advance\dimen@ii\U@c
+ \advance\A@-.5\xydashw@
+ \kern\A@ \blacked@@ }%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\bblacked@{\setboxz@h{%
+ \dimen@=\L@c \advance\dimen@\R@c \B@=-\D@c \dimen@ii=\U@c
+ \kern-\L@c \blacked@@ \kern-\dimen@ \kern\L@c}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\blacked@@{\vrule width\dimen@ depth-\B@ height\dimen@ii}
+\xydefcsname@{frm{o}}{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@
+ \circled@\dimen@}%
+ \else
+ \frmDrop@{\let\framehfill=\frm@solidh@@
+ \let\framevfill=\frm@solidv@@ \circled@\frmradius@@}%
+ \fi}
+\xydefcsname@{frm{oo}}{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@
+ {\circled@\dimen@}\advance\dimen@-2.1\p@ \circled@\dimen@}%
+ \else
+ \frmDrop@{\dimen@=\frmradius@@
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@
+ {\circled@\dimen@}\advance\dimen@-2.1\p@ \circled@\dimen@}%
+ \fi}
+\xydef@\circled@#1{\setboxz@h\bgroup \R@=#1\relax
+ \setboxz@h{\vbox{\circled@x@@}}%
+ \A@=\X@c \advance\A@-.5\wd\z@
+ \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@ \advance\B@.2\p@
+ \edef\tmp@{\egroup\dimen@=\the\wdz@}%
+ \kern\A@ \raise\B@\boxz@
+ \tmp@ \divide\dimen@4 \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\circled@x@{\hbox{\corn@@4\R@ \corn@@3\R@}%
+ \nointerlineskip\hbox{\corn@@1\R@ \corn@@2\R@}}
+\xylet@\circled@x@@=\circled@x@
+\xydefcsname@{frm{.o}}{%
+ \ifx\frmradius@@\z@ \frmDrop@{\let\framehfill=\frm@doth@@
+ \dimen@=.5\L@c \advance\dimen@.5\R@c \circled@\dimen@}%
+ \else
+ \frmDrop@{\let\framehfill=\frm@doth@@ \circled@\frmradius@@}%
+ \fi}
+\xydefcsname@{frm{-o}}{%
+ \ifx\frmradius@@\z@ \frmDrop@{\let\framehfill=\frm@dashh@@
+ \dimen@=.5\L@c \advance\dimen@.5\R@c \circled@\dimen@}%
+ \else
+ \frmDrop@{\let\framehfill=\frm@dashh@@ \circled@\frmradius@@}%
+ \fi}
+\xydefcsname@{frm{e}}{\ellipse@whichfrm@\ellipsesolidframed@}%
+\xydefcsname@{frm{.e}}{\ellipse@whichfrm@\ellipsedotframed@}%
+\xydefcsname@{frm{-e}}{\ellipse@whichfrm@\ellipsedashframed@}%
+\xydefcsname@{frm{ee}}{\ellipse@whichdblfrm@\ellipsesolidframed@}%
+\xydefcsname@{frm2{.e}}{\ellipse@whichdblfrm@\ellipsedotframed@}%
+\xydefcsname@{frm2{-e}}{\ellipse@whichdblfrm@\ellipsedashframed@}%
+\xyletcsnamecsname@{frm[o]{-}}{frm{e}}
+\xyletcsnamecsname@{frm[o]{=}}{frm{ee}}
+\xyletcsnamecsname@{frm[o]{.}}{frm{.e}}
+\xyletcsnamecsname@{frm[o]{--}}{frm{-e}}
+\xydef@\ellipse@whichfrm@#1{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{#1\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ }%
+ \else
+ \frmDrop@{#1\expandafter\ellipsed@i@\frmradius@@,,@@}%
+ \fi}
+\xydef@\ellipse@whichdblfrm@#1{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{#1\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}\next@ }%
+ \else
+ \frmDrop@{#1\expandafter\ellipsed@ei@\frmradius@@,,@@}%
+ \fi}
+\xydef@\ellipsed@i@#1,#2,#3@@{\DNii@{,}\DN@{#3}%
+ \ifx\next@\nextii@
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \else \ifx\next@\empty \DN@{#2}%
+ \ifx\next@\empty \DN@{#1}%
+ \dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \else \dimen@=#1\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \fi
+ \else\xywarning@{ignoring extra tokens in elliptical frame: #3 }%
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \fi\fi \next@ }
+\xydef@\ellipsed@ei@#1,#2,#3@@{\DNii@{,}\DN@{#3}%
+ \ifx\next@\nextii@
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}%
+ \else \ifx\next@\empty \DN@{#2}%
+ \ifx\next@\empty \DN@{#1}%
+ \dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}%
+ \else
+ \dimen@=#1\relax
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@}}%
+ \fi
+ \else\xywarning@{ignoring extra tokens in elliptical frame: #3 }%
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}%
+ \fi\fi \next@ }
+\xydef@\ellipsed@e@#1#2{%
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \ifdim\dimen@>2\p@ \advance\dimen@-2\p@ \else \dimen@=\z@\fi
+ \ifdim\dimen@ii>2\p@ \advance\dimen@ii-2\p@ \else \dimen@ii=\z@\fi
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ }%
+\xydef@\ellipsed@#1#2{\setboxz@h\bgroup \relax
+ \setboxz@h{\vbox{\ellipsed@x@@{#1}{#2}}}%
+ \A@=\X@c \advance\A@-.5\wd\z@
+ \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@
+ \edef\tmp@{\egroup\dimen@=\the\wdz@}%
+ \kern\A@ \raise\B@\boxz@
+ \tmp@ \divide\dimen@4 \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\ellipsed@i#1#2{{\R@c=#1\relax\L@c=\R@c
+ \U@c=#2\relax\D@c=\U@c \ellipsed@{#1}{#2}}}
+\xydef@\ellipsed@x@#1#2{\R@=#1\relax\advance\R@#2\relax
+ \divide\R@\tw@ \circled@x@@ }
+\xylet@\ellipsed@x@@=\ellipsed@x@
+\xydef@\ellipsesolidframed@{%
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@}
+\xydef@\ellipsedotframed@{%
+ \let\framehfill=\frm@doth@@ \let\framevfill=\frm@dotv@@}
+\xydef@\ellipsedashframed@{%
+ \let\framehfill=\frm@dashh@@ \let\framevfill=\frm@dashv@@}
+\xydefcsname@{frm{\{}}{\addtoDrop@@{\lbraced}}
+\xydefcsname@{frm{\}}}{\addtoDrop@@{\rbraced}}
+\xydefcsname@{frm{^\}}}{\addtoDrop@@{\ubraced}}
+\xydefcsname@{frm{_\}}}{\addtoDrop@@{\dbraced}}
+\xydef@\dbraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ \advance\B@-.5\ht\z@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \advance\A@-.25pt
+ \kern\A@\raise\B@\hbox{%
+ \hbox to\L@c{$\m@th\bracelu\leaders\vrule\hfil\bracerd$}%
+ \kern.5pt
+ \hbox to\R@c{$\m@th\braceld\leaders\vrule\hfil\braceru$}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\ubraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@\U@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \advance\A@-.25pt
+ \kern\A@\raise\B@\hbox{%
+ \hbox to\L@c{$\m@th\braceld\leaders\vrule\hfil\braceru$}%
+ \kern.5pt
+ \hbox to\R@c{$\m@th\bracelu\leaders\vrule\hfil\bracerd$}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+{\catcode`\"=12
+ \global\mathchardef\braceur="338
+ \global\mathchardef\braceul="339
+ \global\mathchardef\bracedr="33A
+ \global\mathchardef\bracedl="33B
+ \global\mathchardef\bracecl="33C
+ \global\mathchardef\bracecr="33D
+ \global\mathchardef\bracec="33E }
+\xydef@\lbraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecl$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \kern\A@\raise\B@\vbox{\vbox to\U@c{%
+ \nointerlineskip\hbox{$\m@th\braceur$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.4\dimen@
+ \nointerlineskip\hbox{$\m@th\bracecl$}\kern-.5\dimen@ii}%
+ \nointerlineskip\vbox to\D@c{\kern.5\dimen@ii
+ \kern-.4\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedr$}\kern\z@}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\rbraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@\R@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \kern\A@\raise\B@\vbox{\vbox to\U@c{%
+ \nointerlineskip\hbox{$\m@th\braceul$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.4\dimen@
+ \nointerlineskip\hbox{$\m@th\bracecr$}\kern-.5\dimen@ii}%
+ \nointerlineskip\vbox to\D@c{\kern.5\dimen@ii
+ \kern-.4\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedl$}\kern\z@}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydefcsname@{frm{(}}{\addtoDrop@@{\lparenthesized}}
+\xydefcsname@{frm{)}}{\addtoDrop@@{\rparenthesized}}
+\xydefcsname@{frm{^)}}{\addtoDrop@@{\uparenthesized}}
+\xydefcsname@{frm{_)}}{\addtoDrop@@{\dparenthesized}}
+\xydef@\dparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ \advance\B@-.5\ht\z@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \dimen@=\L@c \advance\dimen@\R@c
+ \kern\A@\raise\B@\hbox to\dimen@{%
+ $\m@th\bracelu\leaders\vrule\hfil\braceru$}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\uparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@\U@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \dimen@=\L@c \advance\dimen@\R@c
+ \kern\A@\raise\B@\hbox to\dimen@{%
+ $\m@th\braceld\leaders\vrule\hfil\bracerd$}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\lparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \dimen@ii\U@c \advance\dimen@ii\D@c
+ \kern\A@\raise\B@\vbox to \dimen@ii{%
+ \nointerlineskip\hbox{$\m@th\braceur$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedr$}\kern\z@}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\rparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@\R@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \dimen@ii\U@c \advance\dimen@ii\D@c
+ \kern\A@\raise\B@\vbox to \dimen@ii{%
+ \nointerlineskip\hbox{$\m@th\braceul$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedl$}\kern\z@}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydefcsname@{frm{*}}{%
+ \expandafter\frmDrop@\expandafter{%
+ \expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}%
+ \frame@fill@@\frmradius@@}}
+\xydefcsname@{frm{**}}{%
+ \expandafter\frmDrop@\expandafter{%
+ \expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}%
+ \frame@emph@@\frmradius@@}}
+\xydef@\frame@fill@#1{\filled@{#1}\empty}
+\xydef@\frame@emph@#1{\framed@\frmradius@@}
+\xylet@\frame@fill@@=\frame@fill@
+\xylet@\frame@emph@@=\frame@emph@
+\xydef@\filled@#1{\R@=#1\relax
+ \expandafter\DNii@\expandafter{\prevEdge@@}%
+ \DN@{\rectangleEdge}\ifx\next@\prevEdge@@
+ \ifdim\R@=\z@ \DN@{\filled@Rectangle@}%
+ \else \DN@{\filled@Oval@}\fi
+ \else \DN@{\circleEdge}\ifx\next@\prevEdge@@
+ \ifdim\R@=\z@ \DN@{\filled@Ellipse@}%
+ \else \DN@{\restR@max\filled@Circle@}\fi
+ \else
+ \ifdim\R@=\z@ \DN@{\filled@Rectangle@}%
+ \else \DN@{\filled@Circle@}\fi
+ \fi\fi \next@}
+\xydef@\restR@max{%
+ \dimen@=\L@c\advance\dimen@\R@c
+ \dimen@ii=\U@c \advance\dimen@ii\D@c
+ \ifdim\dimen@ii>\dimen@ \dimen@=\dimen@ii\fi
+ \ifdim\dimen@>\z@ \divide\dimen@\tw@
+ \ifdim\R@>\dimen@\R@=\dimen@\fi\fi }
+\xylet@\filledRectangle@@=\bblacked@
+\xylet@\filledCircle@@=\bblacked@
+\xylet@\filledEllipse@@=\bblacked@
+\xylet@\filledOval@@=\bblacked@
+\xydef@\filled@Region@#1#2{\setboxz@h\bgroup
+ \setboxz@h{\vbox{#1#2\empty}}%
+ \A@=\X@c \advance\A@-.5\wd\z@
+ \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@
+ \edef\tmp@{\egroup\dimen@=\the\wdz@}%
+ \kern\A@ \raise\B@\boxz@ \kern-\A@
+ \tmp@ \divide\dimen@\tw@ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \styledboxz@}
+\xydef@\filled@Rectangle@{\filled@Region@\filledRectangle@@}
+\xydef@\filled@Oval@{\filled@Region@\filledOval@@}
+\xydef@\filled@Circle@{\filled@Region@\filledCircle@@}
+\xydef@\filled@Ellipse@{\filled@Region@\filledEllipse@@}
+\xydefcsname@{shape [F...]}#1{\xyFN@\Fshape@#1:@}
+\xylet@\whichframe@@=\empty
+\xylet@\whichoptions@@=\empty
+\xydef@\Fshape@#1:{\def\whichframe@@{{#1}}%
+ \DN@{{}}\ifx\whichframe@@\next@ \def\whichframe@@{{-}}\fi
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\circleEdge}\ifx\next@\nextii@
+ \DN@##1{\def\whichframe@@{[o]##1}}%
+ \expandafter\next@\expandafter{\whichframe@@}\fi
+ \let\whichoptions@@=\empty \xyFN@\Fshape@i}
+\xydef@\Fshape@i{%
+ \ifx @\next \let\next@=\Fshape@x
+ \else\addLT@\ifx\next \let\next@=\Fshape@iii
+ \else \let\next@=\Fshape@ii \fi\fi \next@}
+\xydef@\Fshape@ii#1:{%
+ \expandafter\def\expandafter\whichoptions@@\expandafter{\whichoptions@@[#1]}%
+ \xyFN@\Fshape@i}
+\xydef@\Fshape@iii#1:{\DN@##1{\def\whichframe@@{#1##1}}%
+ \expandafter\next@\expandafter{\whichframe@@}\xyFN@\Fshape@i}
+\xydef@\Fshape@x @{%
+ \edef\next@##1{\noexpand\addbeforeDrop@@{{\EdgefromtheEdge@##1}}}%
+ \DNii@##1##2{\next@{\saveframestyles@{\setbox\z@=\object##2\frm##1%
+ \xypre@Style@@\Drop@@\xypost@Style@@\restoreframestyles@}}}%
+ \expandafter\expandafter\expandafter\nextii@
+ \expandafter\expandafter\expandafter{%
+ \expandafter\whichframe@@\expandafter}\expandafter{\whichoptions@@}}
+\xydef@\saveframestyles@{%
+ \expandafter\def\expandafter\afterframe@preStyle@\expandafter{\preXY@style@}%
+ \expandafter\def\expandafter\afterframe@postStyle@\expandafter{\postXY@style@}}
+\xydef@\restoreframestyles@{%
+ \expandafter\gdef\expandafter\preXY@style@\expandafter{\afterframe@preStyle@}%
+ \expandafter\gdef\expandafter\postXY@style@\expandafter{\afterframe@postStyle@}%
+ \def\afterframe@preStyle@{}\def\afterframe@postStyle@{}}
+\xydef@\xycircleframe@x@{\L@=\R@ \xycircleframe@x@i}%
+\xydef@\xyellipseframe@x@#1#2{\R@=#1\relax \L@=#2\relax \xycircleframe@x@i}
+\xydef@\xycircleframe@x@i{%
+ \ifx\framehfill\frm@solidh@@\def\circleSTYLE@{}%
+ \else\ifx\framehfill\frm@doth@@
+ \expandafter\def\expandafter\circleSTYLE@\expandafter{\addDOT@{}}%
+ \else\ifx\framehfill\frm@dashh@@
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter
+ \expandafter\circleSTYLE@\expandafter\expandafter\expandafter
+ {\expandafter\addDASH@\addDASH@{}}%
+ \fi\fi\fi \xycircleframe@x@x }
+\xydef@\xycircleframe@x@x{\hbox{\vbox{\vskip\L@
+ \hbox to2\R@{\hfill \buildcircle@ \hfill}\vskip\L@ }}}
+\xydef@\UseCurveFrames@{%
+ \let\circled@x@@=\xycircleframe@x@
+ \let\ellipsed@x@@=\xyellipseframe@x@ }
+\def\UseCurveFrames{\xywithoption{curve}{\UseCurveFrames@}}%
+\xydef@\UseFontFrames@{%
+ \let\circled@x@@=\circled@x@
+ \let\ellipsed@x@@=\ellipsed@x@ }
+\xylet@\UseFontFrames=\UseFontFrames@
+\xydef@\UnloadFrames@{%
+ \let\framed@body@@=\framed@body@
+ \let\circled@x@@=\circled@x@
+ \let\ellipsed@x@@=\ellipsed@x@
+ \let\frame@fill@@=\frame@fill@
+ \let\frame@emph@@=\frame@emph@
+ \let\filledRectangle@@=\bblacked@
+ \let\filledCircle@@=\bblacked@
+ \let\filledEllipse@@=\bblacked@
+ \let\filledOval@@=\bblacked@
+}
+\xyaddunsupport{frame}\UnloadFrames@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xygraph.tex b/macros/generic/diagrams/xypic/texinputs/xygraph.tex
new file mode 100644
index 0000000000..fef420ce6f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xygraph.tex
@@ -0,0 +1,219 @@
+%% xygraph.tex from $Id: xygraph.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Graph Combinator feature'' option.
+%% Copyright (c) 1994-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{graph}{Graph feature}{\stripRCS$Revision: 3.11 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xyrequire{arrow}\xycatcodes
+\xydef@\xygraph#1{\relax\graph#1\endgraph}
+\xydef@\graph{\if\inxy@ \DN@{\xy@@{\nter@{}}}%
+ \else \DN@{\xy \xy@\xy{\nter@\endxy}}\fi \next@
+ \xy@\xygraph{\senter@ \idfromc@{?NODE}\spushc@
+ \expandafter\let\expandafter\next@\csname Q@graphbase\endcsname
+ \ifx\next@\relax \setbase@\z@\z@{3pc}\z@
+ \else \expandafter\next@ \fi}%
+ \GRAPH[]}
+\xydef@\endgraph{\ignorespaces}
+\xydef@\GRAPH{\xyFN@\GRAPH@}
+\xydef@\GRAPH@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\GRAPH@}%
+ \else\ifx :\next \DN@:{\xy@:{}\expandafter\GRAPHar@\GRAPHeveryarrow@@}%
+ \else\addDASH@\ifx\next
+ \addDASH@\DN@{\xy@-{}\expandafter\GRAPHar@\GRAPHeveryline@@}%
+ \else\ifx (\next
+ \DN@({\xy@({\spushid@{?NODE}\idfromc@{?NODE}}\xyFN@\GRAPH@}%
+ \else\ifx ,\next
+ \DN@,{\xy@,{\cfromid@{?NODE}}\xyFN@\GRAPH@}%
+ \else\ifx )\next
+ \DN@){\xy@){\cfromid@{?NODE}%
+ \tests@\z@{\idfroms@{?NODE}\z@ \spop@}{\xyerror@{) without (}{}}}%
+ \xyFN@\GRAPH@}%
+ \else\ifx \endgraph\next \DN@{\xy@@{\tests@\z@\spop@\sleave@\leave@}}%
+ \else\ifx \end\next \DN@{\xy@@{\tests@\z@\spop@\sleave@\leave@}}%
+ \else\ifx ~\next
+ \DN@~{\xy@@{\enter@\cfromthec@}\afterNODE{\leave@ \xyFN@\GRAPH@}!}%
+ \else \DN@{\afterNODE{\xyFN@\GRAPH@}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\GRAPHsaved@PATHafterPOS=\PATHafterPOS
+\xylet@\GRAPHsaved@afterar@@=\afterar@@
+\xydef@\GRAPHar@{%
+ \let\PATHafterPOS=\afterNODE \let\afterar@@=\GRAPHafterar@ \ar}
+\xydef@\GRAPHafterar@{%
+ \let\PATHafterPOS=\GRAPHsaved@PATHafterPOS
+ \let\afterar@@=\GRAPHsaved@afterar@@
+ \xy@@{\cfromid@{}}\xyFN@\GRAPH@}
+\xylet@\afterNODE@@=\empty
+\xydef@\afterNODE#1{\xy@@{\enter@\pfromthep@}%
+ \DN@##1{\def\afterNODE@@{\xy@@\leave@ \def\afterNODE@@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterNODE@@}%
+ \xyFN@\NODE@}
+\xylet@\theMOVE@@=\relax
+\xydef@\NODE@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@}%
+ \else\ifx [\next \DN@[##1]{\xy@{[##1]}{}%
+ \def\theMOVE@@{[##1]}\xyFN@\MOVE@##1]}%
+ \else\ifx "\next \DN@ "##1"{%
+ \xy@{"##1"}{\cfromid@{##1}}\def\theMOVE@@{"##1"}\xyFN@\NODE@i}%
+ \else\ifx ?\next \DN@ ?{%
+ \xy@?{\cfromid@{?NODE}}\def\theMOVE@@{?}\xyFN@\NODE@i}%
+ \else\ifx !\next \def\theMOVE@@{[]}\let\next@=\NODE@i
+ \else \testAND@\iffalse
+ \DN@##1{\xy@{}{\pfromc@ \advance\X@c\X@xbase \advance\Y@c\Y@xbase
+ \czeroEdge@}\jumpMOVE@ \xyFN@\NODE@i}%
+ \else\ifx \\\next
+ \DN@\\{\xy@\\{\pfromc@ \advance\X@c\X@xbase \advance\Y@c\Y@xbase
+ \R@c=\X@ybase \U@c=\Y@ybase \intersect@
+ \advance\X@c-\X@ybase \advance\Y@c-\Y@ybase
+ \czeroEdge@}\def\theMOVE@@{\\}\xyFN@\NODE@i}%
+ \else \xyerror@{Illegal <node>: \string`\meaning\next\string' unexpected}{}%
+ \fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\jumpMOVE@@{&}
+\xydef@\jumpMOVE@{\let\theMOVE@@=\jumpMOVE@@}
+\xydef@\MOVE@{\xy@@{\count@=\z@ \count@@=\z@}%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\MOVE@}%
+ \else\ifcat A\noexpand\next \let\next@=\MOVE@letter
+ \else \let\next@=\MOVE@x \fi\fi \next@}
+\xydef@\MOVE@letter{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\MOVE@letter}%
+ \else\ifx u\next \DN@ u{\xy@@{\advance\count@\@ne}\xyFN@\MOVE@letter}%
+ \else\ifx d\next \DN@ d{\xy@@{\advance\count@\m@ne}\xyFN@\MOVE@letter}%
+ \else\ifx l\next \DN@ l{\xy@@{\advance\count@@\m@ne}\xyFN@\MOVE@letter}%
+ \else\ifx r\next \DN@ r{\xy@@{\advance\count@@\@ne}\xyFN@\MOVE@letter}%
+ \else \let\next@=\MOVE@x \fi\fi\fi\fi\fi \next@}
+\xydef@\MOVE@x{%
+ \ifx ]\next \DN@ ]{\MOVE@hop \xyFN@\NODE@i}%
+ \else\ifx (\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\ifx !\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\ifx /\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\addLT@\ifx\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\addGT@\ifx\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\addDASH@\ifx\next \addDASH@\DN@{\xyerror@{- not implemented yet}{}}%
+ \else \xyerror@{illegal <move>: \codeof\theMOVE@@}{}\let\next@=\NODE@i
+ \fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\MOVE@hop{\xy@@{\pfromc@ \czeroEdge@
+ \edef\next@{\the\count@@,\the\count@ @}\expandafter\vfromcartesian@@\next@
+ \advance\X@c-\X@origin \advance\Y@c-\Y@origin
+ \advance\X@c\X@p \advance\Y@c\Y@p}}
+\xydef@\MOVE@place{\xy@@\no@@ \afterPLACE{\xyFN@\MOVE@}}
+\xydef@\NODE@i{\let\next@=\NODE@x
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@i}%
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\NODE@i}%
+ \else\ifx !\next \DN@!{\xyFN@\NODE@escape}%
+ \else\ifx :\next
+ \else\addDASH@\ifx\next
+ \else\ifx (\next
+ \else\ifx ,\next
+ \else\ifx )\next
+ \else\ifx ~\next
+ \else\ifx [\next
+ \else\ifx "\next
+ \else\ifx ?\next
+ \else\ifx ^\next
+ \else\ifx _\next
+ \else\ifx |\next
+ \else\addLQ@\ifx\next
+ \else\addRQ@\ifx\next
+ \else \testAND@ \iffalse
+ \else\ifx \\\next
+ \else\ifx \endgraph\next
+ \else\ifx \end\next
+ \else \let\next@=\NODE@it
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\NODE@x{\xy@@{\idfromc@{}}\afterNODE@@}
+\xydef@\NODE@it{\let\PATHlabelit@@=\NODEit@ \PATHit@}
+{\xyuncatcodes \gdef\next{+}}
+\xylet@\GRAPHnodemodifiers@@=\next
+\xydef@\NODEit@#1{%
+ \DN@{#1}\ifx\next@\empty
+ \DN@{\expandafter\NODEit@i\expandafter{\GRAPHnodemodifiers@@}}%
+ \else \DN@{\NODEit@i{#1}}\fi \next@}
+\def\NODEit@i#1#2{\xy@{*#1{#2}}{\drop@{#1}{#2}}%
+ \DN@{\addEQ@\ifx\next\else \xy@@{\idfromc@{#2}}\fi \NODE@i}%
+ \xyFN@\next@}
+\xydef@\NODE@escape{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@escape}%
+ \else\ifcat A\noexpand\next \DN@##1{\rungraphescape@{##1}}%
+ \else\ifcat !\noexpand\next \DN@##1{\rungraphescape@{##1}}%
+ \else\ifx \bgroup\next \DN@##1{\xy@{!{##1}}{}\POS##1\relax \xyFN@\NODE@i}%
+ \else\ifx ~\next \let\next@=\graphsetup@
+ \else \DN@{\xyerror@{Unknown graph <escape>}{}\xyFN@\NODE@i}%
+ \fi\fi\fi\fi\fi \next@}
+\xydefcsname@{graph !M}#1#{\NODE@matrix{#1}}
+\xydef@\NODE@matrix#1#2{\xyerror@{matrix feature not loaded}{}\xyFN@\GRAPH@}
+\xydef@\NODE@matrix@#1#2{\xy@{!M#1{#2}}{}%
+ \def\everyentry@{\GRAPHeveryentry}%
+ \xymatrix#1{#2}%
+ \let\everyentry@=\empty \insertmatrixingraph@ \xyFN@\NODE@i}
+\xydef@\GRAPHeveryentry{\def\:{\ar}\def\="##1"{\xy@@{\idfromc@{##1}}}}
+\xywithoption{matrix}{\let\NODE@matrix=\NODE@matrix@}
+\xydef@\insertmatrixingraph@{%
+ \xy@@{\enter@{\cfromthec@ \pfromthep@}%
+ \expandafter\let\expandafter\next@\csname Q@1,1\endcsname
+ \ifx\next@\relax\else
+ \next@ \swap@
+ \expandafter\let\expandafter\next@\csname Q@1,2\endcsname
+ \ifx\next@\relax\else \next@ \setbase@\X@p\Y@p\X@c\Y@c
+ \expandafter\let\expandafter\next@\csname Q@2,1\endcsname
+ \ifx\next@\relax\else
+ \next@ \setbase@@{-\X@c}{-\Y@c}\fi\fi\fi
+ \leave@}}
+\xydefcsname@{graph !P}#1#{\NODE@poly{#1}}
+\xydef@\NODE@poly#1#2{\xyerror@{poly(gon) feature not loaded}{}\xyFN@\GRAPH@}
+\xydef@\NODE@poly@#1#2{\xy@{!P#1{#2}}{}\xypoly@#1{#2}\xyFN@\NODE@i}
+\xywithoption{poly}{\let\NODE@poly=\NODE@poly@}
+\xydefcsname@{graph !E}#1#{\NODE@arc{#1}!}
+\xydef@\NODE@arc#1#2{\xyerror@{(ellipse+)arc feature not loaded}{}%
+ \xyFN@\GRAPH@}
+\xydef@\NODE@arc@#1#2{\xy@{!E#1{#2}}{}\ellipse#1{#2}\xyFN@\NODE@i}
+\xywithoption{arc}{\let\NODE@arc=\NODE@arc@}
+\xylet@\GRAPHeveryarrow@@=\empty
+{\xyuncatcodes \gdef\next{@{-}}}
+\xylet@\GRAPHeveryline@@=\next
+\xydef@\graphsetup@~{\xyFN@\graphsetup@i}
+\xydef@\graphsetup@i{%
+ \ifx :\next \DN@:##1{\def\GRAPHeveryarrow@@{##1}\xyFN@\NODE@i}%
+ \else\addDASH@\ifx\next
+ \addDASH@\DN@##1{\def\GRAPHeveryline@@{##1}\xyFN@\NODE@i}%
+ \else\ifx *\next \DN@*##1{\def\GRAPHnodemodifiers@@{##1}\xyFN@\NODE@i}%
+ \else\ifcat A\next \DN@##1##2{\newgraphescape{##1}{##2}\xyFN@\NODE@i}%
+ \else \DN@{\xyerror@{illegal graph setup \codeof\next@}{}\xyFN@\NODE@i}%
+ \fi\fi\fi\fi \next@}
+\xydef@\newgraphescape#1{%
+ \expandafter\let\expandafter\next\csname graph !#1\endcsname
+ \ifx\next\relax\else \expandafter\let\csname G!#1\endcsname=\undefined
+ \xywarning@{Redefining graph <escape> !#1}\fi
+ \expandafter\gdef\csname graph !#1\endcsname{%
+ \expandafter\let\expandafter\next\csname G!#1\endcsname
+ \expandafter\xyFN@\expandafter\NODE@\next}%
+ \DN@{\newgraphescape@{#1}}\xyFN@\next@}
+\xydef@\newgraphescape@#1{%
+ \ifx [\next
+ \ifx\newcommand\undefined \xyerror@{[n] only with LaTeX}%
+ \else
+ \def\nextiv@{\expandafter\newcommand\expandafter{\csname G!#1\endcsname}}\fi
+ \else \def\nextiv@{\expandafter\gdef\csname G!#1\endcsname}\fi \nextiv@}
+\xydef@\rungraphescape@#1{%
+ \expandafter\let\expandafter\next\csname graph !#1\endcsname
+ \ifx\next\relax \xyerror@{Undefined graph <escape> !#1}\fi \next}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyidioms.tex b/macros/generic/diagrams/xypic/texinputs/xyidioms.tex
new file mode 100644
index 0000000000..c4026d436b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyidioms.tex
@@ -0,0 +1,72 @@
+%% xyidioms.tex from $Id: xyidioms.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Format-dependent idioms for Xy-pic.
+%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyidiomsloaded\empty \message{not reloaded}\endinput \fi
+\let\xyidiomsloaded=\empty
+\xywarnifdefined\A@ \dimendef\A@=4
+\xywarnifdefined\B@ \dimendef\B@=6
+\xywarnifdefined\R@ \dimendef\R@=8
+\ifx\undefined\AveryUNLIKELYc@ntr@lSEQUENCE@@\else
+\errmessage{Xy-pic Error: \string\undefined\space defined.}\fi
+\ifx\undefined\literal@ \def\literal@#1{#1}\fi
+\ifx\undefined\eat@ \def\eat@#1{}\fi
+\xydef@\xyFN@{\futurelet\next}
+\ifx\undefined\DN@ \def\DN@{\def\next@}\fi
+\ifx\undefined\DNii@ \def\DNii@{\def\nextii@}\fi
+\ifx\undefined\setboxz@h\def\setboxz@h{\setbox\z@\hbox}\fi
+\ifx\undefined\wdz@ \def\wdz@{\wd\z@}\fi
+\ifx\undefined\boxz@ \def\boxz@{\box\z@}\fi
+\ifx\undefined\W@ \def\W@{\immediate\write16 }\fi
+\ifx\undefined\space@ \def\space@.{\futurelet\space@\relax}\space@. \fi
+\ifx\undefined\notempty \def\notempty#1{T\if @#1@F\else T\fi}\fi
+\xydef@\xysetup@dummy#1{\xyuncatcodes#1}
+\xywarnifdefined\xysetup@@
+\ifx\AtEndDocument\undefined
+ \expandafter\ifx\csname amsppt.sty\endcsname\relax
+ \let\xysetup@@=\xysetup@dummy
+ \else
+ \def\xysetup@@#1{%
+ \expandafter\def\expandafter\topmatter\expandafter{\topmatter
+ #1\xyuncatcodes}}\fi
+\else
+ \def\xysetup@@#1{\AtBeginDocument{#1\xyuncatcodes}}
+\fi
+\ifx\xysetup@@\xysetup@dummy\else
+ \xysetup@@{\let\xysetup@@=\xysetup@dummy \xyuncatcodes}\fi
+\xywarnifdefined\xyclosedown@@
+\ifx\AtEndDocument\undefined \let\xyclosedown@@=\eat@
+\else \def\xyclosedown@@#1{\AtEndDocument{#1}}\fi
+\xylet@\xy@begindvi=\literal@
+\ifx\undefined\AtBeginDvi\else
+ \AtBeginDocument{\let\xy@begindvi=\AtBeginDvi}
+ \AtBeginDvi{\global\let\xy@begindvi=\literal@}\fi
+\ifx\amstexloaded@\relax
+\xylet@\toks@ii=\toks@@ \endinput \fi
+\ifx\@tempcnta\undefined
+\xynew@{count}\count@@
+\xynew@{count}\count@@@
+\else
+\xylet@\count@@=\@tempcnta
+\xylet@\count@@@=\@tempcntb
+\fi
+\ifx\undefined\toks@ii \toksdef\toks@ii=2 \fi
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyimport.tex b/macros/generic/diagrams/xypic/texinputs/xyimport.tex
new file mode 100644
index 0000000000..6c5e340d4e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyimport.tex
@@ -0,0 +1,68 @@
+%% xyimport.tex from $Id: xyimport.doc,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Import feature'' option.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{import}{Import graphics extension}{\stripRCS$Revision: 3.13 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xyimport#1#{\xyimport@{#1}}
+\xydef@\xyimport@#1#2{\xydelayimport@{#1}{#2}}
+\xydef@\xydelayimport@#1#2{\xy@@ix@{#1{#2}}%
+ \xy@@{\expandafter\xyextern@\the\toks9}}
+\xydef@\xyextern@(#1,#2){\hbox\bgroup\R@c=#1\p@ \U@c=#2\p@\xyextern@i}
+\xydef@\xyextern@i#1#{\DN@{#1}%
+ \ifx\next@\empty \L@c=\z@ \D@c=\z@ \DN@{\xyextern@x}%
+ \else \DN@{\xyextern@ii#1}\fi \next@ }
+\xydef@\xyextern@ii(#1,#2){\L@c=#1\p@ \D@c=#2\p@
+ \advance\R@c-\L@c \advance\U@c-\D@c \xyextern@x}
+\xydef@\xyimportdefault@{3}
+\xydef@\xyexportwarning@#1#2#3{\xywarning@{%
+ #1 for import has zero #2; using \xyimportdefault@#3 default}}
+\xydef@\xyextern@x#1{\toks@={\egroup\L@c=}\setboxz@h{#1}%
+ \dimen@ii=\L@c \advance\dimen@ii\R@c \dimen@=\wdz@
+ \ifdim\dimen@=\z@ \xyexportwarning@{graphic}{width}{cm}%
+ \dimen@=\xyimportdefault@ cm\fi
+ \ifdim\dimen@ii=\z@ \xyexportwarning@{coords}{width}{unit}%
+ \dimen@ii=\xyimportdefault@\p@\fi
+ \quotient@\next@\dimen@\dimen@ii \dimen@=\next@\p@
+ \edef\tmp@{\expandafter\removePT@\the\L@c}\L@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\L@c\relax\R@c=}%
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\R@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\R@c\relax\setbase@\z@\z@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\dimen@}\z@\D@c=}%
+ \dimen@ii=\U@c \advance\dimen@ii\D@c \dimen@=\ht\z@\advance\dimen@\dp\z@
+ \ifdim\dimen@=\z@ \xyexportwarning@{graphic}{height}{cm}%
+ \dimen@=\xyimportdefault@ cm\fi
+ \ifdim\dimen@ii=\z@ \xyexportwarning@{coords}{height}{unit}%
+ \dimen@ii=\xyimportdefault@\p@\fi
+ \quotient@\next@\dimen@\dimen@ii \dimen@=\next@\p@
+ \edef\tmp@{\expandafter\removePT@\the\D@c}\D@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\D@c\relax\U@c=}%
+ \edef\tmp@{\expandafter\removePT@\the\U@c}\U@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\U@c\relax\setbase@@\z@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\dimen@}}%
+ \setboxz@h{\kern-\L@c\lower\D@c\boxz@\kern\L@c}%
+ \wd\z@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@ \the\toks@ \X@c=\z@ \Y@c=\z@
+ \ifdim\X@min>-\L@c \X@min=-\L@c \fi \ifdim\X@max<\R@c \X@max=\R@c \fi
+ \ifdim\Y@min>-\D@c \Y@min=-\D@c \fi \ifdim\Y@max<\U@c \Y@max=\U@c \fi
+ \idfromc@{import}\POS }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyknot.tex b/macros/generic/diagrams/xypic/texinputs/xyknot.tex
new file mode 100644
index 0000000000..4c5d7108ed
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyknot.tex
@@ -0,0 +1,901 @@
+%% xyknot.tex from $Id: xyknot.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Knots and Links'' feature.
+%% Copyright (c) 1994-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this macro package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{knot}{Knots and Links feature}{\stripRCS$Revision: 3.9 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\message{knots and links,}
+\xyrequire{arrow}\xycatcodes
+\xydef@\xykparsecross@{%
+ \def\xykSCALE@@{}\edef\xyknotPLACE{\xykmidPLACE@}%
+ \let\xykparser@=\xykparsecross@@
+ \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
+ \def\xyknotPLACE{(.5)}\appendtoholder@}%
+ \xyFN@\xykparsescale@ }
+{\xyuncatcodes \catcode`@=11
+\gdef\next{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsecross@@}%
+ \else\addLT@\ifx\next \addLT@\DN@{\xyprecross@}%
+ \else\addGT@\ifx\next \addGT@\DN@{\xypostcross@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
+ \else\ifx|\next\DN@|{\xymidcross@}%
+ \else\addAT@\ifx\next \addAT@\DN@(##1){%
+ \xyadjustBREAK@i##1@@\xyFN@\xykparsecross@@}%
+ \else\DN@{\afterknot@}%
+ \fi\fi\fi\fi\fi\fi \next@ }}
+\xylet@\xykparsecross@@=\next
+\xydef@\xyprecross@{%
+ \def\xykholder@{\xykprebreak@@}%
+ \edef\xyknotPLACE{\xykprePLACE@}%
+ \xyFN@\xykparsebreak@}
+\xydef@\xypostcross@{%
+ \def\xykholder@{\xykpostbreak@@}%
+ \edef\xyknotPLACE{\xykpostPLACE@}%
+ \xyFN@\xykparsebreak@}
+\xydef@\xymidcross@{%
+ \def\xykholder@{\xykmidbreak@@}%
+ \edef\xyknotPLACE{\xykmidPLACE@}%
+ \xyFN@\xykparsebreak@}
+\xydef@\xykcross@#1{\xykcheckTIPS@
+ \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
+\xydef@\xykoverstring@{\addtotoks@{{}}\xykmidbreak@ \xyknottips@}
+\xydef@\xykunderstring@{\xykprebreak@ \xykpostbreak@ \xyknottips@}
+\xydef@\vcross{\begingroup\def\afterknot@{\xyvcross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hcross{\begingroup\def\afterknot@{\xyhcross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vcrossneg{\begingroup\def\afterknot@{\xyvcrossneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hcrossneg{\begingroup\def\afterknot@{\xyhcrossneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vuncross{\begingroup\def\afterknot@{\xyvuncross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\huncross{\begingroup\def\afterknot@{\xyhuncross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xyvcross{\xykcross@\xykcrossv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhcross{\xykcross@\xykcrossh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvcrossneg{\xykcross@\xykcrossv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhcrossneg{\xykcross@\xykcrossh
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvuncross{\xykcross@\xykuncrossv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhuncross{\xykcross@\xykuncrossh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz_\ar #1@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
+ "_>";"^>"**{}?-(.375,0)@+,?(.25)@+}"_>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.375,0)@+,
+ "^>";"_>"**{}?-(.375,0)@+,?(.25)@+}"^>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykcrossv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
+ "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.375)@+,
+ "^<";"^>"**{}?-(0,.375)@+,?(.25)@+}"^<"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykcrossh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"_<"**{}?(.25)@+,?(.375)+(.375,0)@+,
+ "^>";"_>"**{}?(.375)-(.375,0)@+,?(.25)@+}"^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.375)+(.375,0)@+,
+ "_>";"^>"**{}?(.375)-(.375,0)@+,?(.25)@+}"_>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykuncrossv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz^\ar #1@'{"_>"**{}?(.25)@+,?(.375)+(0,.375)@+,
+ "^<";"^>"**{}?(.375)-(0,.375)@+,?(.25)@+}"^<"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.375)+(0,.375)@+,
+ "^>";"^<"**{}?(.375)-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykuncrossh=\next
+\xydef@\vover{\begingroup\def\afterknot@{\xyvover}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hover{\begingroup\def\afterknot@{\xyhover}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vunder{\begingroup\def\afterknot@{\xyvunder}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hunder{\begingroup\def\afterknot@{\xyhunder}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vunover{\begingroup\def\afterknot@{\xyvunover}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hunover{\begingroup\def\afterknot@{\xyhunover}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xoverv{\begingroup\def\afterknot@{\xyxoverv}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunderv{\begingroup\def\afterknot@{\xyxunderv}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xoverh{\begingroup\def\afterknot@{\xyxoverh}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunderh{\begingroup\def\afterknot@{\xyxunderh}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunover{\begingroup\def\afterknot@{\xyxunover}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunoverv{\begingroup\def\afterknot@{\xyxunoverv}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunoverh{\begingroup\def\afterknot@{\xyxunoverh}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xyvover{\xykcross@\xykoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhover{\xykcross@\xykoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvunder{\xykcross@\xykoverv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhunder{\xykcross@\xykoverh
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvunover{\xykcross@\xykunoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhunover{\xykcross@\xykunoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxoverv{\xykcross@\xykxoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxunderv{\xykcross@\xykxoverv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxoverh{\xykcross@\xykxoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxunderh{\xykcross@\xykxoverh
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxunover{\xykcross@\xykxoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxunoverv{\xykcross@\xykxunoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxunoverh{\xykcross@\xykxunoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?(.625)+(0,-.125)@+,
+ "_>";"^>"**{}?(.625)-(.125,0)@+,?(.25)@+}"_>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
+ "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#6#7#8},\restore\POS#9}}
+\xylet@\xykoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
+ "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.625)+(0,.125)@+,
+ "^<";"_<"**{}?(.625)+(.125,0)@+,?(.25)@+}"^<"#6#7#8},\restore\POS#9}}
+\xylet@\xykoverh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?-(0,.175)@+,?(.75)@+}
+ "^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.125,0)@+,
+ "_>"**{}?+(0,.7)@+,"_>";"^>"**{}?-(.125,0)@+,?(.25)@+}
+ "_>"#6#7#8},\restore\POS#9}}
+\xylet@\xykunoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?+(.175,0)@+,?(.75)@+}
+ "^<"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.125)@+,
+ "^>"**{}?-(.7,0)@+,"^>";"^<"**{}?-(0,.125)@+,?(.25)@+}
+ "^>"#6#7#8},\restore\POS#9}}
+\xylet@\xykunoverh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
+ "^>",{\xykz^\ar #1@'{"^_"@+}"_<"#3#4#5},
+ "^<",{\xykz_\ar #2@'{"^_"@+}"_>"#6#7#8},\restore\POS#9}}
+\xylet@\xykxoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
+ "^<",{\xykz_\ar #1@'{"^_"@+}"_>"#3#4#5},
+ "_<",{\xykz_\ar #2@'{"^_"@+}"^>"#6#7#8},\restore\POS#9}}
+\xylet@\xykxoverh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
+ "^>",{\xykz^\ar #1@'{"^_"@+}"_>"#3#4#5},
+ "^<",{\xykz^\ar #2@'{"^_"@+}"_<"#6#7#8},\restore\POS#9}}
+\xylet@\xykxunoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
+ "^<",{\xykz^\ar #1@'{"^_"@+}"^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^_"@+}"_>"#6#7#8},
+ \restore\POS#9}}
+\xylet@\xykxunoverh=\next
+\xydef@\vtwist{\begingroup\def\afterknot@{\xyvtwist}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\htwist{\begingroup\def\afterknot@{\xyhtwist}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vtwistneg{\begingroup\def\afterknot@{\xyvtwistneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\htwistneg{\begingroup\def\afterknot@{\xyhtwistneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vuntwist{\begingroup\def\afterknot@{\xyvuntwist}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\huntwist{\begingroup\def\afterknot@{\xyhuntwist}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xyvtwist{\xykcross@\xyktwistv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyvtwistneg{\xykcross@\xyktwistv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyvuntwist{\xykcross@\xykuntwistv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhtwist{\xykcross@\xyktwisth
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyhuntwist{\xykcross@\xykuntwisth
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyhtwistneg{\xykcross@\xyktwisth
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^>",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?-(.375,0)@+,
+ "_<";"^<"**{}?+(.375,0)@+,?(.25)@+}"_<"#3#4#5},
+ "^<",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
+ "_>";"^>"**{}?+(-.375,0)@+,?(.25)@+}"_>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xyktwistv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^>",{\xykz^\ar #1@'{"_>"**{}?(.125)@+,?(.375)-(.25,0)@+,
+ ?(.625)-(.25,0)@+,?(.875)@+}"_>"#3#4#5},
+ "^<",{\xykz^\ar #2@'{"_<"**{}?(.125)@+,?(.375)+(.25,0)@+,
+ ?(.625)+(.25,0)@+,?(.875)@+}"_<"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykuntwistv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz_\ar #1@'{"^>"**{}?(.25)@+,?+(0,-.375)@+,
+ "_>";"_<"**{}?+(0,.375)@+,?(.25)@+}"_>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
+ "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xyktwisth=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"^>",**{}?(.125)@+,?(.375)+(0,-.25)@+,
+ ?(.625)+(0,-.25)@+,?(.875)@+}"^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"_>",**{}?(.125)@+,?(.375)+(0,.25)@+,
+ ?(.625)+(0,.25)@+,?(.875)@+}"_>"#6#7#8},\restore\POS #9}}
+\xylet@\xykuntwisth=\next
+\xydef@\xykparsescale@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsescale@}%
+ \else\addDASH@\ifx\next \addDASH@\DN@{\def\xykSCALE@@{-1}%
+ \xyFN@\xykparser@}%
+ \else\ifx[\next \DN@[##1]{\dimen@=##1\p@
+ \ifdim\dimen@=\z@\xywarning@{\xykscaleerror@}%
+ \else\edef\xykSCALE@@{\expandafter\removePT@\the\dimen@}\fi
+ \xyFN@\xykparser@}%
+ \else\ifx~\next \DN@~##1##2##3##4{%
+ \def\xykSCALE@@{@{##1}{##2}{##3}{##4}}\xyFN@\xykparser@}%
+ \else\DN@{\xyFN@\xykparser@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\xykscaleerror@{Ignoring zero scale factor}
+\xydef@\xykhobject@{\aftergroup\xykhadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xykvobject@{\aftergroup\xykvadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xykhvobject@{\aftergroup\xykhvadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xykhuobject@{\aftergroup\xykhuadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xyksavescale@#1#2{%
+ \expandafter\ifx\the\Edge@c\zeroEdge\relax \def\xyksaveEdgec{}%
+ \else
+ \edef\xyksaveEdgec{\noexpand\Edge@c={\expandafter\noexpand\the\Edge@c}%
+ \L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c}%
+ \fi
+ \edef\next@##1##2{\endgroup
+ \def\noexpand\xyksaveEdgec{}%
+ \def\noexpand\xykSCALE@@\noexpand{##1}%
+ \def\noexpand\xykjoincontrol\noexpand{\xykjoincontrol}%
+ \noexpand\toks@\noexpand{##2}%
+ \noexpand\xy@@{\def\noexpand\xyksaveEdgec{}%
+ \def\noexpand\xykSCALE@@{##1}%
+ \def\noexpand\xykjoincontrol{\xykjoincontrol}}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\xykSCALE@@\expandafter}%
+ \expandafter{\the\toks@}%
+ \xykrescale@ #1\the\toks@\restore\POS#2}
+\xydef@\xykkeepscale@{%
+ \edef\next@##1{\endgroup \noexpand\toks@={##1}%
+ \def\noexpand\xykjoincontrol{\xykjoincontrol}}%
+ \expandafter\next@\expandafter{\the\toks@}%
+ \def\xykSCALE@@{}\def\xyksaveEdgec{}%
+ \xy@@{\def\xykSCALE@@{}\def\xyksaveEdgec{}}%
+ \edef\next@{\def\noexpand\xykjoincontrol{\xykjoincontrol}}%
+ \expandafter\xy@@\expandafter{\next@}%
+ \xyknoflexscale@ \the\toks@}
+\xydef@\xykrescale@{\expandafter\xykcheckscale@\xykSCALE@@ !}%
+\xydef@\xykcheckscale@#1#2!{%
+ \expandafter\DN@\expandafter{\codeof{#1}}%
+ \expandafter\DNii@\expandafter{\codeof{@}}%
+ \ifx\next@\nextii@\relax\DN@{\xykflexiscale@#2%
+ \xy@@{\divide\X@xbase2\divide\X@ybase2\divide\Y@xbase2\divide\Y@ybase2%
+ \def\xykSCALE@@{}}\def\xykSCALE@@{}%
+ \expandafter\toks@\expandafter{\afterFLEX@}}%
+ \else\DN@{\save \xykrescale@@}\fi \next@ }
+\xydef@\xykflexiscale@{%
+ \expandafter\def\expandafter\afterFLEX@\expandafter{\the\toks@}%
+ \xykflexiscale@@ }
+\xydef@\xykrescale@@{%
+ \edef\next@{\X@xbase=\xykSCALE@@\X@xbase \X@ybase=\xykSCALE@@\X@ybase
+ \Y@xbase=\xykSCALE@@\Y@xbase \Y@ybase=\xykSCALE@@\Y@ybase}%
+ \expandafter\xy@@\expandafter{\next@}%
+ \ifdim\xykSCALE@@\p@<\z@\relax \DN@{\xyknegflexscale@}%
+ \else\DN@{\xyknoflexscale@}\fi \next@ }
+{\xyuncatcodes \gdef\next#1#2#3#4{\save="@",
+ #1,="^<",\POS"@",#2,="^>",\POS"@",#3,="_<",\POS"@",#4,="_>",
+ (0,0);"^>"-"^<"+"_>"-"_<":"^<"-"_<"+"^>"-"_>"::}}
+\xylet@\xykflexiscale@@=\next
+{\xyuncatcodes \gdef\next{\save ="^<",
+ +(1,0)="^>",-(1,1)="_<",+(1,0)="_>"\restore }}
+\xylet@\xyknoflexscale@@=\next
+\xylet@\xyknoflexscale@=\next
+{\xyuncatcodes \gdef\next{\save ="_>",
+ +(-1,1)="^<",+(1,0)="^>",-(1,1)="_<"\restore }}
+\xylet@\xyknegflexscale@@=\next
+\xylet@\xyknegflexscale@=\next
+{\xyuncatcodes \gdef\next{\save ="_<",
+ +(1,0)="_>",+(-1,1)="^<",+(1,0)="^>"\restore }}
+\xylet@\xykhscale@@=\next
+{\xyuncatcodes \gdef\next{\save ="^>",
+ -(1,0)="^<",+(1,-1)="_>",-(1,0)="_<"\restore }}
+\xylet@\xykvscale@@=\next
+\xydef@\xykhadjust@{%
+ \let\xyknoflexscale@=\xykhscale@@
+ \let\xyknegflexscale@=\xyknegflexscale@@ }
+\xydef@\xykvadjust@{%
+ \let\xyknoflexscale@=\xyknoflexscale@@
+ \let\xyknegflexscale@=\xykhscale@@ }
+\xydef@\xykhvadjust@{%
+ \let\xyknoflexscale@=\xyknoflexscale@@
+ \let\xyknegflexscale@=\xyknegflexscale@@ }
+\xydef@\xykhuadjust@{%
+ \let\xyknoflexscale@=\xykhscale@@
+ \let\xyknegflexscale@=\xykvscale@@ }
+\xydef@\xykprebreak@{%
+ \ifx\xykprebreak@@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xykprebreak@@}}\fi}
+\xydef@\xykpostbreak@{%
+ \ifx\xykpostbreak@@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xykpostbreak@@}}\fi}
+\xydef@\xykmidbreak@{%
+ \ifx\xykmidbreak@@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xykmidbreak@@}}\fi}
+\xydef@\xykparsebreak@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsebreak@}%
+ \else \addLT@\ifx\next
+ \expandafter\appendtoholder@\xykbacktemp@\next@
+ \addLT@\DN@{\xyFN@\xykparser@}%
+ \else \addGT@\ifx\next
+ \expandafter\appendtoholder@\xykforetemp@\next@
+ \addGT@\DN@{\xyFN@\xykparser@}%
+ \else \ifx|\next
+ \expandafter\appendtoholer@\xyknulltemp@\next@
+ \DN@|{\xyFN@\xykparser@}%
+ \else \ifx\next \bgroup\DN@##1{\checkgroupbreak@##1@}%
+ \else \ifx (\next\DN@(##1){\xyadjustknotPLACE@i##1@@%
+ \xyFN@\xykparsebreak@}%
+ \else \ifx\next \knothole@\DN@##1{\expandafter\appendtoholder@@
+ \expandafter{\expandafter|\xyknotPLACE\knothole}\next@
+ \xyFN@\xykparser@}%
+ \else
+ \expandafter\xykdefaultbreak@\xykbreak@\next@
+ \DN@{\xyFN@\xykparser@}%
+ \fi\fi\fi\fi\fi\fi\fi \next@ }
+{\xyuncatcodes \gdef\next{^>*\dir{>}}}
+\xylet@\xykforetips@=\next
+{\xyuncatcodes \gdef\next{^<*\dir{<}}}
+\xylet@\xykbacktips@=\next
+{\xyuncatcodes \gdef\next{*!/-1pt/=0\dir{>}}}
+\xylet@\xykforetemp@=\next
+{\xyuncatcodes \gdef\next{*!/1pt/=0\dir{<}}}
+\xylet@\xykbacktemp@=\next
+{\xyuncatcodes \gdef\next{*=<\xykholesize>[o]{}}}
+\xylet@\xykholetemp@=\next
+\xydef@\knothole@{\hbox to\xykholesize{%
+ \dimen@=\xykholesize \divide\dimen@\tw@
+ \hfill \vrule height\dimen@ depth\dimen@ width\z@ }}
+\xylet@\knothole=\knothole@
+\xylet@\khole=\knothole@
+{\xyuncatcodes \gdef\next{*=<0pt>{}}}
+\xylet@\xyknulltemp@=\next
+\xylet@\xykbreak@=\xyknulltemp@
+\xydef@\checkgroupbreak@#1#2@{%
+ \ifx|#1\DN@{\appendtoholder@@#1#2\next@ \xyFN@\xykparser@}%
+ \else \ifx_#1\DN@{\appendtoholder@@_#2\next@ \xyFN@\xykparser@}%
+ \else \ifx^#1\DN@{\appendtoholder@@^#2\next@ \xyFN@\xykparser@}%
+ \else
+ \def\next##1\next{\expandafter\DNii@\expandafter{\xyk@@##1}}%
+ \expandafter\next\xyknotPLACE\next
+ \ifx*#1%
+ \expandafter\DN@\expandafter{%
+ \expandafter\appendtoholder@@\nextii@#1#2\next@ \xyFN@\xykparser@}%
+ \else
+ \expandafter\DN@\expandafter{%
+ \expandafter\appendtoholder@@\nextii@{#1#2}\next@ \xyFN@\xykparser@}%
+ \fi\fi\fi\fi \next@ }
+{\xyuncatcodes \gdef\next{%
+ \expandafter{\expandafter^\xyknotPLACE##1}}}%
+ \DN@{\xydef@\xykholder@@##1}\DNii@{\expandafter\toks@}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
+\xydef@\appendtoholder@#1\next@{\xykholder@@{#1}%
+ \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
+ \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
+\xydef@\appendtoholder@@#1\next@{%
+ \DN@##1\next@{\expandafter\DN@\expandafter{\xykholder@##1}}%
+ \next@#1\next@ \appendtoholder@@@}%
+\xydef@\appendtoholder@@@{%
+ \expandafter\expandafter\expandafter\DN@
+ \expandafter\expandafter\expandafter{\next@}%
+ \DNii@{\expandafter\def\xykholder@}%
+ \expandafter\nextii@\expandafter{\next@}}
+{\xyuncatcodes \gdef\next{%
+ \expandafter{\expandafter|\xyknotPLACE##1}}}%
+\DN@{\xydef@\xykholer@@##1}\DNii@{\expandafter\toks@}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
+\xydef@\appendtoholer@#1\next@{\xykholer@@{#1}%
+ \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
+ \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
+\xydef@\xykz#1{\let\xyk@@=#1\xy@@{\let\xyk@@=#1}}
+{\xyuncatcodes \global\let\next=_}
+\xylet@\xyk@@=\next
+\xydef@\xyadjustknotPLACE@i{%
+ \ifx\xyknotPLACE\empty\DN@{\dimen@=.5\p@}%
+ \else\DN@{\expandafter\xygetknotPLACE@@\xyknotPLACE}%
+ \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetknotPLACE@@
+ \xyFN@\xyadjustknotPLACE@}
+\xydef@\xyadjustknotPLACE@{\expandafter\ifx\space@\next
+ \expandafter\DN@\space{\xyFN@\xyadjustknotPLACE@}%
+ \else\addDASH@\ifx\next\DN@{\xyadjustknotPLACE@@}%
+ \else\addPLUS@\ifx\next\DN@{\xyadjustknotPLACE@@}%
+ \else\addEQ@\ifx\next\addEQ@\DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
+ \else \DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\xyadjustknotPLACE@@#1@@{\advance\dimen@#1\p@
+ \expandafter\xysetknotPLACE@\expandafter{\the\dimen@}}
+\xydef@\xysetknotPLACE@#1{%
+ \expandafter\xywhichknotPLACE@@\expandafter{\removePT@#1}}
+{\xyuncatcodes\gdef\next#1{\def\xyknotPLACE{(#1)}}}%
+\xylet@\xysetknotPLACE@@=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next(#1){\DN@\next@{#1}\ifx\next@\empty
+ \dimen@=\z@\else\dimen@=#1\p@ \fi}}%
+\xylet@\xygetknotPLACE@@=\next
+\xydef@\xyadjustJOIN@i{%
+ \ifx\xykjoincontrol\empty\DN@{\dimen@=.75\p@}%
+ \else\DN@{\expandafter\xygetknotPLACE@@\expandafter(\xykjoincontrol)}%
+ \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetjoincontrol@
+ \xyFN@\xyadjustknotPLACE@}
+\xydef@\xyadjustBREAK@i{%
+ \ifx\xykpostbreak@@\empty\DN@{\dimen@=.5\p@}%
+ \else\DN@{\expandafter\xygetpostBREAK@\xykpostbreak@@}%
+ \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetpostbreak@
+ \xyFN@\xyadjustknotPLACE@}
+\xydef@\xygetpostBREAK@|#1\knothole{\DN@{#1}%
+ \ifx\next@\empty\dimen@=.5\p@\else \xygetknotPLACE@@#1\fi}
+\xydef@\xysetpostbreak@#1{\def\xykpostbreak@@{|(#1)\knothole}}
+\xydef@\xysetjoincontrol@#1{\edef\xykjoincontrol{#1}}
+\xydef@\xykparsetips@{%
+ \def\xyknotTIPS@@{}\def\xyknotPLACE{}%
+ \let\xykparser@=\xykparsetips@@
+ \xyFN@\xykparser@ }
+\xydef@\xykparsetips@@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsetips@@}%
+ \else\addLT@\ifx\next
+ \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{TF}%
+ \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TF}%
+ \else\DN@{FT}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
+ \fi\fi\fi
+ \addLT@\DN@{\xyFN@\xykparser@}%
+ \else\addGT@\ifx\next
+ \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{FT}%
+ \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{FT}%
+ \else\DN@{TF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
+ \fi\fi\fi
+ \addGT@\DN@{\xyFN@\xykparser@}%
+ \else\addEQ@\ifx\next \def\xyknotTIPS@@{TT}%
+ \addEQ@\DN@{\xyFN@\xykparser@}%
+ \else \ifx!\next \def\xyknotTIPS@@{FF}\DN@!{\xyFN@\xykparser@}%
+ \else\DN@{\xyFN@\xykparser@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\xykcheckTIPS@{%
+ \ifx\xyknotTIPS@@\empty \edef\xyknotTIPS@@{\xyknotTIPS@}\fi
+ \DN@{FF}\ifx\next@\xyknotTIPS@@\def\tmp@{}%
+ \else\DN@{FT}\ifx\next@\xyknotTIPS@@
+ \expandafter\def\expandafter\tmp@\expandafter{\xykforetips@}%
+ \else\DN@{TF}\ifx\next@\xyknotTIPS@@
+ \expandafter\def\expandafter\tmp@\expandafter{\xykbacktips@}%
+ \else
+ \DN@##1\next@{\DN@{\xykforetips@##1}}%
+ \expandafter\next@\xykbacktips@\next@
+ \DNii@{\expandafter\def\expandafter\tmp@\expandafter}%
+ \expandafter\nextii@\expandafter{\next@}%
+ \fi\fi\fi \def\xyknotTIPS@@{}}
+\xydef@\xyknottips@{%
+ \ifx\tmp@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}\fi}
+\xydef@\xykparsejoin@{%
+ \def\xykSCALE@@{}%
+ \edef\xyknotPLACE{\xykmidPLACE@}%
+ \let\xykparser@=\xykparsejoin@@
+ \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
+ \def\xyknotPLACE{(.5)}\appendtoholder@}%
+ \xyFN@\xykparsescale@ }
+{\xyuncatcodes \catcode`@=11
+\gdef\next{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsejoin@@}%
+ \else\addLT@\ifx\next \let\xykbreak@=\xykbacktemp@
+ \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
+ \appendtoholder@}\addLT@\DN@{\xyprecross@}%
+ \else\addGT@\ifx\next \let\xykbreak@=\xykforetemp@
+ \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
+ \appendtoholder@}\addGT@\DN@{\xypostcross@}%
+ \else\ifx|\next \let\xykbreak@=\xyknulltemp@
+ \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
+ \appendtoholer@}\DN@|{\xymidcross@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
+ \else\addAT@\ifx\next \addAT@\DN@(##1){%
+ \xyadjustJOIN@i##1@@\xyFN@\xykparsejoin@@}%
+ \else\DN@{\afterknot@}%
+ \fi\fi\fi\fi\fi\fi \next@ }}
+\xylet@\xykparsejoin@@=\next
+\xydef@\xykjoincontrol@@{.75}%
+\xydef@\xyk@joincontrol@#1{\DN@{#1}%
+ \ifx\next@\empty\edef\xykjoincontrol@@{.75}%
+ \else\dimen@=#1\p@
+ \edef\xykjoincontrol@@{\expandafter\removePT@\the\dimen@}\fi}
+\xylet@\xykjoincontrol\empty
+\xydef@\xykjoincontrol@(#1){\DN@{#1}%
+ \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \else\dimen@=#1\p@
+ \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}%
+ \fi \xyFN@\xykparsejoin@@ }
+\xydef@\xykjoincontrol@i#1{\DN@{#1}%
+ \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \else\dimen@=#1\p@
+ \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}\fi}
+\xydef@\xykjoin@#1{%
+ \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
+\xydef@\xyksetjoin@{\xykcheckTIPS@
+ \xykprebreak@ \xykmidbreak@ \xykpostbreak@ \xyknottips@ }
+\xydef@\hcap{\begingroup\def\afterknot@{\xyhcap}%
+ \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\vcap{\begingroup\def\afterknot@{\xyvcap}%
+ \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xcapv{\begingroup\def\afterknot@{\xyxcapv}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xcaph{\begingroup\def\afterknot@{\xyxcaph}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xyvcap{\xykjoin@\xykcapv \xyksetjoin@ \xykhobject@{}}
+\xydef@\xyhcap{\xykjoin@\xykcaph \xyksetjoin@ \xykvobject@{}}
+\xydef@\xyxcapv{\xykjoin@\xykxcapv \xyksetjoin@ \xykvobject@{+(0,-1)}}
+\xydef@\xyxcaph{\xykjoin@\xykxcaph \xyksetjoin@ \xykhobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+
+ ,?-(.25,0)@+,"_<";"^<"**{}?+(.25,0)@+,?(\xykjoincontrol)@+}
+ "_<"#3#4#5#6},\restore \POS#7}}
+\xylet@\xykcapv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
+ ?+(0,.25)@+,"^<";"^>"**{}?-(0,.25)@+,?(\xykjoincontrol)@+}
+ "^<"#3#4#5#6}
+ \restore \POS#7}}
+\xylet@\xykcaph=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^>";"_>"**{}?="^_","^<";"_<"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
+ "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
+ "^<"#3#4#5#6},\restore \POS#7}}
+\xylet@\xykxcapv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
+ "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
+ "_<"#3#4#5#6},\restore \POS#7}}
+\xylet@\xykxcaph=\next
+\xydef@\hloop{\begingroup\def\afterknot@{\xyhloop}%
+ \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\vloop{\begingroup\def\afterknot@{\xyvloop}%
+ \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xyvloop{\xykjoin@\xykloopv \xyksetjoin@ \xykhobject@{}}
+\xydef@\xyhloop{\xykjoin@\xyklooph \xyksetjoin@ \xykvobject@{}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_>",{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,?(1.25)-(.25,0)@+,
+ "_<";"^<"**{}?(1.25)+(.25,0)@+,?(\xykjoincontrol)@+}"_<"#3#4#5#6}
+ \restore \POS#7}}
+\xylet@\xykloopv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,?(1.25)+(0,.25)@+,
+ "^<";"^>"**{}?(1.25)+(0,-.25)@+,?(\xykjoincontrol)@+}"^<"#3#4#5#6}
+ \restore \POS#7}}
+\xylet@\xyklooph=\next
+\xydef@\zbendh{\begingroup\def\afterknot@{\xyzbendh}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\sbendv{\begingroup\def\afterknot@{\xysbendv}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\sbendh{\begingroup\def\afterknot@{\xysbendh}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\zbendv{\begingroup\def\afterknot@{\xyzbendv}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendr{\begingroup\def\afterknot@{\xyxbendr}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendl{\begingroup\def\afterknot@{\xyxbendl}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendu{\begingroup\def\afterknot@{\xyxbendu}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendd{\begingroup\def\afterknot@{\xyxbendd}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xyzbendh{\xykjoin@\xykzbendh \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+\xydef@\xysbendv{\xykjoin@\xyksbendv \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+\xydef@\xysbendh{\xykjoin@\xyksbendh \xyksetjoin@ \xykhuobject@{+(1,1)}}
+\xydef@\xyzbendv{\xykjoin@\xykzbendv \xyksetjoin@ \xykhuobject@{+(1,1)}}
+\xydef@\xyxbendr{\xykjoin@\xykxbendr \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+\xydef@\xyxbendl{\xykjoin@\xykxbendl \xyksetjoin@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxbendu{\xykjoin@\xykxbendu \xyksetjoin@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxbendd{\xykjoin@\xykxbendd \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<",{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,
+ "_>";"_<"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykzbendh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<",{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_<"**{}?(\xykjoincontrol)@+,
+ "_>";"^>"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xyksbendv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
+ "^>";"^<"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xyksbendh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"^<"**{}?(\xykjoincontrol)@+,
+ "^>";"_>"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykzbendv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<"-(0,.5),{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_<";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendr=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^>"-(0,.5),{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"_>";"_<"**{}?(\xykjoincontrol)@+,}"_<"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendl=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<"+(.5,0),{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_>";"^>"**{}?(\xykjoincontrol)@+,}"^>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendu=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<"+(.5,0),{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"^>";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendd=\next
+{\xyuncatcodes \gdef\next{{@{-}}{@{-}}}}
+\xylet@\knotSTYLE=\next
+{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{{@{#1}}{@{#1}}}}}
+\xylet@\knotstyle=\next
+{\xyuncatcodes \gdef\next#1#2{\def\knotSTYLE{{@{#1}}{@{#2}}}}}
+\xylet@\knotstyles=\next
+{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{#1}}}
+\xylet@\KNOTstyle=\next
+\xydef@\knotholesize@#1{\def\xykholesize{#1}}
+\xydef@\xykholesize{5pt}
+\xylet@\knotholesize=\knotholesize@
+\xylet@\holesize=\knotholesize@
+\xydef@\knottips#1{\def\xyknotTIPS@{#1}}
+\xydef@\xyknotTIPS@{FF}
+\xydef@\xyknotTIPS@@{}
+\xydef@\xykSCALE@@{}
+\xydef@\xykprebreak@@{}%
+\xydef@\xykpostbreak@@{}%
+\xydef@\xykmidbreak@@{}%
+\xydef@\xykprePLACE@{(.25)}%
+\xydef@\xykpostPLACE@{(.75)}%
+\xydef@\xykmidPLACE@{}%
+\xylet@\xykPLACE@=\xykmidPLACE@
+{\gdef\next#1#2#3#4{%
+ \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
+ "#3"-"#1"+"#4"-"#2"::(0,.5)::}}
+\xylet@\xykflexbase@=\next
+\xylet@\xykflexbase=\xykflexbase@
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.1875,.125)@+,
+ "#4"-(.1875,.25)@++(.1875,.125)@+}"#4" #6},
+ "#2",{\ar @{#5}@'{"#2"+(0,.125)@++(-.1875,.125)@+,
+ "#3"+(.1875,-.25)@++(-.1875,.125)@+}"#3" #7}%
+\restore \POS#8}}
+\xylet@\Xtwist=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(0,.0625)@++(.1875,.0625)@+,
+ "#3"+(.1875,-.125)@++(-.1875,.0625)@+}"#3" #6},
+ "#2",{\ar @{#5}@'{"#2"+(0,.0625)@++(-.1875,.0625)@+,
+ "#4"-(.1875,.125)@++(.1875,.0625)@+}"#4" #7}%
+\restore \POS#8}}
+\xylet@\Xuntwist=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
+ "#4"+(-#9,-.125)@+}"#4" #6},
+ "#2",{\ar @{#5}@'{"#2"+(-.1875,.0625)@++(-.1875,.1875)@+,
+ "#3"+(#9,-.125)@+}"#3" #7}%
+\restore \POS#8}}
+\xylet@\Xover=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
+ "#2"+(-.1875,.0625)@+}"#2" #6},
+ "#3",{\ar @{#5}@'{"#3"+(#9,-.125)@+,"#3"+(.25,-.25)@+,
+ "#4"+(-#9,-.125)@+}"#4" #7}%
+\restore \POS#8}}
+\xylet@\Xunover=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.125,.25)@+,
+ "#4"+(-.125,.375)@++(.125,-.25)@+}"#4" #6},
+\restore \POS#7}}
+\xylet@\Xcap=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4#5#6#7#8#9{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\Xunover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}%
+ \else\ifdim\dimen@>\z@
+ \DNii@{#6}\ifx\nextii@\empty
+ \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
+ \else \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \else
+ \DNii@{#7}\ifx\nextii@\empty
+ \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
+ \else\DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \fi\fi
+ \def\tmp@{{#9}}\ifx\tmp@\empty\def\tmp@{{0}}\else\dimen@=#9\p@\fi
+ \expandafter\next@\tmp@ }}
+\xylet@\XXover=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4#5#6#7#8{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\Xuntwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}%
+ \else\ifdim\dimen@>\z@
+ \DNii@{#6}\ifx\nextii@\empty
+ \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
+ \else \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \else
+ \DNii@{#7}\ifx\nextii@\empty
+ \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
+ \else\DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \fi\fi \next@ }}
+\xylet@\XXtwist=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\xykuncrossv{#4}{#2}{#3}{+(0,-1)}}%
+ \else\ifdim\dimen@>\z@
+ \DNii@{#2}\ifx\nextii@\empty
+ \DN@{\xyktwistv{#4}{|\knothole}{#3}{+(1,0)}}%
+ \else \DN@{\xyktwistv{#4}{#2}{#3}{+(1,0)}}\fi
+ \else
+ \DNii@{#3}\ifx\nextii@\empty
+ \DN@{\xyktwistv{#4}{#2}{|\knothole}{+(0,-1)}}%
+ \else\DN@{\xyktwistv{#4}{#2}{#3}{+(0,-1)}}\fi
+ \fi\fi \next@ }}
+\xylet@\Vcross=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\xykuncrossh{#4}{#2}{#3}{+(0,-1)}}%
+ \else\ifdim\dimen@<\z@
+ \DNii@{#2}\ifx\nextii@\empty
+ \DN@{\xyktwisth{#4}{|\knothole}{#3}{+(1,0)}}%
+ \else \DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
+ \else
+ \DNii@{#3}\ifx\nextii@\empty
+ \DN@{\xyktwisth{#4}{}{|\knothole}{+(1,0)}}%
+ \else\DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
+ \fi\fi \next@ }}
+\xylet@\Hcross=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3{\dimen@=#1\p@ \save
+ \ifdim\dimen@<\z@
+ \DN@{\POS="@",p="@@",(0,0);(-1,0):(0,-1)::"@@";"@",}%
+ \else\DN@{}\fi
+ \next@ \xykcaph{#3}{#2}\restore }}
+\xylet@\Hcap=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3{\dimen@=#1\p@ \save
+ \ifdim\dimen@<\z@
+ \DN@{\POS="@",p="@@",(0,0);(0,-1)::"@@";"@",}%
+ \else\DN@{}\fi
+ \next@ \xykcapv{#3}{#2}\restore }}
+\xylet@\Vcap=\next
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyline.tex b/macros/generic/diagrams/xypic/texinputs/xyline.tex
new file mode 100644
index 0000000000..d70d6f84ab
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyline.tex
@@ -0,0 +1,237 @@
+%% xyline.tex from $Id: xyline.doc,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Line Width'' extension.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{line}{Line styles extension}{\stripRCS$Revision: 3.10 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydefcsname@{*stylechar@|@}#1{\xyFN@\xywidthchar@#1@@}%
+\xydefcsname@{style [thinner]}{\xyshape@thinner@}
+\xydefcsname@{style [thicker]}{\xyshape@thicker@}
+\xynew@{dimen}\xylinethick@ \xylinethick@=\xydashw@
+\xydef@\xyshape@thicker@{\xylinewidth@i{\multiply\xylinethick@\tw@}}
+\xydef@\xyshape@thinner@{\xylinewidth@i{\divide\xylinethick@\tw@}}
+\xydef@\xylinewidth@i#1{\edef\xyprevwidth@@{\the\xylinethick@}%
+ #1\edef\next@{\xylinethick@=\the\xylinethick@}%
+ \edef\next@ii{\noexpand\addtotoks@{%
+ \noexpand\xylinewidth@@{\next@}{\xyprevwidth@@}}}%
+ \next@ii }
+\xydef@\xywidthchar@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xywidthchar@}%
+ \else\ifx @\next \DN@ @@{\checkXyStyle@}%
+ \else\ifx (\next \DN@ (##1)##2@@{%
+ \xylinewidth@i{\xylinethick@=##1\xydashw@}}%
+ \else\addLT@\ifx \next \addGT@{\addLT@\DN@ ##1}##2@@{%
+ \xylinewidth@i{\xylinethick@=##1\relax}}%
+ \else\ifx *\next \DN@ *@@{\recoverXyStyle@}%
+ \else\addEQ@\ifx \next \addEQ@\DN@##1@@{\checkXyStyle@
+ \addtotoks@{\xynamestyle@{##1}}}%
+ \else\ifx C\next \DN@ C##1@@{\xysetlinecap@{##1}@}%
+ \else\ifx J\next \DN@ J##1@@{\xysetlinejoin@{##1}@}%
+ \else\ifx M\next \DN@ M(##1)@@{\xymiterlimit@{##1}@}%
+ \else \DN@##1@@{\xylinewidth@i{\xylinethick@=##1\relax}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\xylinecap@{2}
+\xydef@\xylinejoin@{2}
+\xydef@\xylinemiter@{10}
+\xydefcsname@{style [bevel]}{\xyshape@bevel@}
+\xydefcsname@{style [roundjoin]}{\xyshape@rdjoin@}
+\xydefcsname@{style [miter]}{\xyshape@miter@}
+\xydefcsname@{style [butt]}{\xyshape@butt@}
+\xydefcsname@{style [roundcap]}{\xyshape@rdcap@}
+\xydefcsname@{style [projcap]}{\xyshape@projcap@}
+\xydef@\xyshape@butt@{\xysetlinecap@@0}
+\xydef@\xyshape@rdcap@{\xysetlinecap@@1}
+\xydef@\xyshape@projcap@{\xysetlinecap@@2}
+\xydef@\xyshape@miter@{\xysetlinejoin@@0}
+\xydef@\xyshape@rdjoin@{\xysetlinejoin@@1}
+\xydef@\xyshape@bevel@{\xysetlinejoin@@2}
+\xydef@\xysetlinecap@#1@{\DN@ii{#1}\count@=#1\relax
+ \expandafter\DN@\expandafter{\the\count@}%
+ \ifx\next@\next@ii\else
+ \xywarning@{ignoring extra tokens in line-cap: \next@}\fi
+ \expandafter\xysetlinecap@@\expandafter{\next@}}
+\xydef@\xysetlinejoin@#1@{\DN@ii{#1}\count@=#1\relax
+ \expandafter\DN@\expandafter{\the\count@}%
+ \ifx\next@\next@ii\else
+ \xywarning@{ignoring extra tokens in line-join: \next@}\fi
+ \expandafter\xysetlinejoin@@\expandafter{\next@}}
+\xydef@\xysetmiterlimit@#1@{\DN@ii{#1}\dimen@=#1\p@\relax
+ \edef\next@{\expandafter\removePT@\the\dimen@}%
+ \ifx\next@\next@ii\else
+ \xywarning@{ignoring extra tokens in miter-limit: \next@}\fi
+ \expandafter\xysetmiterlimit@@\expandafter{\next@}}
+\xydef@\xysetlinecap@@#1{\xy@linecap@i{\def\xylinecap@{#1}}}
+\xydef@\xysetlinejoin@@#1{\xy@linejoin@i{\def\xylinejoin@{#1}}}
+\xydef@\xysetmiterlimit@@#1{%
+ \xy@linemiter@i{\def\xylinemiter@{#1}}}
+\xydef@\xy@linecap@i#1{#1\addtotoks@{\xy@linecap@@{#1}}}
+\xydef@\xy@linejoin@i#1{#1\addtotoks@{\xy@linejoin@{#1}}}
+\xydef@\xy@linemiter@i#1{#1\addtotoks@{\xy@linemiter@{#1}}}
+\xydef@\xy@linecap@#1{\checkXyStyle@ \edef\xyprevcap@@{\xylinecap@}%
+ #1\let\prexylinecap@=\prexylinecap@@ \let\postxylinecap@=\postxylinecap@@
+ \applyLIFOstyle@\prexylinecap@{\xylinecap@}%
+ \postxylinecap@{\xyprevcap@@}}
+\xydef@\prexylinecap@@{\let\prexylinecap@=\eat@
+ \let\postxylinecap@=\postxylinecap@@ \outputxylinecap@ }
+\xydef@\postxylinecap@@{\let\postxylinecap@=\eat@
+ \let\prexylinecap@=\prexylinecap@@ \resetxylinecap@@ }
+\xylet@\prexylinecap@=\prexylinecap@@
+\xylet@\postxylinecap@=\postxylinecap@@
+\xydef@\outputxylinecap@#1{\xycapSpecial@@{#1}}
+\xydef@\resetxylinecap@#1{\resetxylinecap@i{#1}\outputxylinecap@{#1}}
+\xydef@\resetxylinecap@i#1{\def\xylinecap@{#1}}
+\xylet@\resetxylinecap@@=\resetxylinecap@
+\xylet@\xycapSpecial@@=\eat@
+\xydef@\xy@linejoin@#1{\checkXyStyle@
+ \edef\xyprevjoin@@{\xylinejoin@}#1%
+ \let\prexylinejoin@=\prexylinejoin@@
+ \let\postxylinejoin@=\postxylinejoin@@
+ \applyLIFOstyle@\prexylinejoin@{\xylinejoin@}%
+ \postxylinecap@{\xyprevjoin@@}}
+\xydef@\prexylinejoin@@{\let\prexylinejoin@=\eat@
+ \let\postxylinejoin@=\postxylinejoin@@ \outputxylinejoin@ }
+\xydef@\postxylinejoin@@{\let\postxylinejoin@=\eat@
+ \let\prexylinejoin@=\prexylinejoin@@ \resetxylinejoin@@ }
+\xylet@\prexylinejoin@=\prexylinejoin@@
+\xylet@\postxylinejoin@=\postxylinejoin@@
+\xydef@\outputxylinejoin@#1{\xyjoinSpecial@@{#1}}
+\xydef@\resetxylinejoin@#1{\resetxylinejoin@i{#1}\outputxylinejoin@{#1}}
+\xydef@\resetxylinejoin@i#1{\def\xylinejoin@{#1}}
+\xylet@\resetxylinejoin@@=\resetxylinejoin@
+\xylet@\xyjoinSpecial@@=\eat@
+\xydef@\xy@linemiter@#1{\checkXyStyle@
+ \edef\xyprevmiter@@{\xylinemiter@}#1%
+ \let\prexylinemiter@=\prexylinemiter@@
+ \let\postxylinemiter@=\postxylinemiter@@
+ \applyLIFOstyle@\prexylinemiter@{\xylinemiter@}%
+ \postxylinecap@{\xyprevmiter@@}}
+\xydef@\prexylinemiter@@{\let\prexylinemiter@=\eat@
+ \let\postxylinemiter@=\postxylinemiter@@ \outputxylinemiter@ }
+\xydef@\postxylinemiter@@{\let\postxylinemiter@=\eat@
+ \let\prexylinemiter@=\prexylinemiter@@ \resetxylinemiter@@ }
+\xylet@\prexylinemiter@=\prexylinemiter@@
+\xylet@\postxylinemiter@=\postxylinemiter@@
+\xydef@\outputxylinemiter@#1{\xymiterSpecial@@{#1}}
+\xydef@\resetxylinemiter@#1{\resetxylinemiter@i{#1}\outputxylinemiter@{#1}}
+\xydef@\resetxylinemiter@i#1{\def\xylinemiter@{#1}}
+\xylet@\resetxylinemiter@@=\resetxylinemiter@
+\xylet@\xymiterSpecial@@=\eat@
+\xydef@\xypolyline#1{\xypolyline@{#1}}
+\xydef@\xypolyline@#1{\hbox\bgroup
+ \enter@{\pfromthep@ \basefromthebase@ \cfromthec@}%
+ \def\xyps@list{}\edef\smapp@@{\s@bot}%
+ \smapxy@i{\enter@{\pfromthep@ \basefromthebase@ }%
+ \edef\xyps@list{\expandafter\removePT@\the\X@c\space
+ \expandafter\removePT@\the\Y@c\space \xyps@list}\leave@}%
+ \leave@ \xy@polystyle@@{#1}\xydopoly@style\egroup
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\styledboxz@}}%
+\xylet@\xypolyline@Special=\eat@
+\xylet@\xypolyfill@Special=\eat@
+\xylet@\xypolyeofill@Special=\eat@
+\xylet@\xypolydot@Special=\eat@
+\xylet@\xypolydash@Special=\eat@
+\xydef@\UnloadpolySpecials@{%
+ \let\xypolyline@Special=\eat@
+ \let\xypolyfill@Special=\eat@
+ \let\xypolyeofill@Special=\eat@
+ \let\xypolydot@Special=\eat@
+ \let\xypolydash@Special=\eat@
+}
+\xydef@\xy@polystyle@#1{%
+ \let\poly@style@@=\xypolyline@Special
+ \DNii@{#1}\ifx\nextii@\empty
+ \else\DN@{*}\ifx\next@\nextii@ \let\poly@style@@=\xypolyfill@Special
+ \else\DN@{?}\ifx\next@\nextii@ \let\poly@style@@=\xypolyeofill@Special
+ \else\expandafter\DN@\expandafter{\addDOT@{}}\ifx\next@\nextii@
+ \let\poly@style@@=\xypolydot@Special
+ \else\expandafter\DN@\expandafter{\addDASH@{}}\ifx\next@\nextii@
+ \let\poly@style@@=\xypolydash@Special
+ \else\DN@{{*}}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{*}}%
+ \else \def\poly@style@@{\xypolystraight@{#1}}%
+ \fi\fi\fi\fi\fi\fi }
+\xydef@\xydopoly@style{\expandafter\poly@style@@\expandafter{\xyps@list}}
+\xydef@\xynopolystyle@#1#2{\xyundefinedLine@{polyline}{{#1}}@@}
+\xydef@\xypolynospec@#1{\DNii@{#1}%
+ \ifx\nextii@\empty\def\poly@style@@{\xypolystraight@{-}}%
+ \else\DN@{.}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}%
+ \else\DN@{-}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{--}}%
+ \else\DN@{*}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}%
+ \else\DN@{?}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}%
+ \else\DN@{{*}}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{*}}%
+ \else \def\poly@style@@{\xypolystraight@{#1}}%
+ \fi\fi\fi\fi\fi\fi }
+\xydef@\xypolystraight@#1#2{%
+ \enter@{\pfromthep@ \basefromthebase@ \cfromthec@}%
+ \edef\smapp@@{\s@bot}\csname S@0\endcsname\czeroEdge@\pfromc@\def\smapp@@{0}%
+ \smapxy@i{\czeroEdge@\enter@{\pfromthec@}{\connect@\dir{#1}}\leave@}\leave@ }
+\xylet@\xy@polystyle@@=\xypolynospec@
+\xydef@\UninstallPolylines@{%
+ \UnloadpolySpecials@
+ \let\xy@polystyle@@=\xypolynospec@ }
+\UninstallPolylines@
+\xydef@\xyundefinedLine@#1#2@@{%
+ \xywarning@{The #1 #2 effect is not implemented with the current driver.}}%
+\xydef@\xynolinewidth@#1#2{%
+ \xyundefinedLine@{linewidth}{\the\xylinethick@}@@}%
+\xydef@\xynolinecap@#1{\xyundefinedLine@{linecap}{\xylinecap@}@@}%
+\xydef@\xynolinejoin@#1{\xyundefinedLine@{linejoin}{\xylinejoin@}@@}%
+\xydef@\xynolinemiter@#1{\xyundefinedLine@{miterlimit}{\xylinemiter@}@@}%
+\xylet@\xylinewidth@@=\xynolinewidth@
+\xylet@\xy@linecap@@=\xynolinecap@
+\xylet@\xy@linejoin@@=\xynolinejoin@
+\xylet@\xy@linemiter@@=\xynolinemiter@
+\xydef@\UnloadLine@#1{%
+ \ifx#1\relax\else\xyunload@{line width extension}\fi
+ \let\resetxyline@@=\resetxyline@
+ \let\resetxylinecap@@=\resetxylinecap@
+ \let\resetxylinejoin@@=\resetxylinejoin@
+ \let\resetxylinemiter@@=\resetxylinemiter@
+ \let\transxyline@@=\DN@
+ \let\xylineSpecial@@=\eat@
+ \let\xycapSpecial@@=\eat@
+ \let\xyjoinSpecial@@=\eat@
+ \let\xymiterSpecial@@=\eat@
+ \let\xylinewidth@@=\xynolinewidth@
+ \let\xy@linecap@@=\xynolinecap@
+ \let\xy@linejoin@@=\xynolinejoin@
+ \let\xy@linemiter@@=\xynolinemiter@
+ \UninstallPolylines@ }
+\xyaddunsupport{line}{\UnloadLine@\relax}
+\xydef@\xylinewidth@#1#2{\checkXyStyle@
+ #1\let\prexyline@=\prexyline@@ \let\postxyline@=\postxyline@@
+ \applyLIFOstyle@\prexyline@{\the\xylinethick@}\postxyline@{#2}}
+\xydef@\prexyline@@{\let\prexyline@=\eat@
+ \let\postxyline@=\postxyline@@ \outputxyline@ }
+\xydef@\postxyline@@{\let\postxyline@=\eat@
+ \let\prexyline@=\prexyline@@ \resetxyline@@ }
+\xylet@\prexyline@=\prexyline@@
+\xylet@\postxyline@=\postxyline@@
+\xydef@\resetxyline@#1{\resetxyline@i{#1}\outputxyline@{#1}}
+\xydef@\resetxyline@i#1{\xylinethick@=#1\relax}
+\xydef@\outputxyline@#1{\transxyline@@{#1}%
+ \expandafter\xylineSpecial@@\expandafter{\next@}}
+\xylet@\resetxyline@@=\resetxyline@
+\xydef@\transxyline@#1{\edef\next@{\removePT@#1}}
+\xylet@\transxyline@@=\DN@
+\xylet@\xylineSpecial@@=\eat@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp b/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp
new file mode 100644
index 0000000000..5bdf9716db
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp
@@ -0,0 +1,60 @@
+% $Id: xymacpat.xyp,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%
+% Patterns for Xy-pic tile extension.
+% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% See the companion README and INSTALL files for further information.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic package is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% The Xy-pic package is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+% for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this package; if not, see http://www.gnu.org/licenses/.
+%
+mac01 00 <FFFFFFFFFFFFFFFF>
+mac02 08 <DDFF77FFDDFF77FF>
+mac03 16 <DD77DD77DD77DD77>
+mac04 32 <AA55AA55AA55AA55>
+mac05 16 <55FF55FF55FF55FF>
+mac06 32 <AAAAAAAAAAAAAAAA> <AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
+mac07 16 <EEDDBB77EEDDBB77> <EEEEEEDDDDDDBBBBBB777777EEEEEEDDDDDDBBBBBB777777>
+mac08 48 <8888888888888888> <888888888888888888888888888888888888888888888888>
+mac09 40 <B130031BD8C00C8D> <B1B1B13030300303031B1B1BD8D8D8C0C0C00C0C0C8D8D8D>
+mac10 56 <8010022001084004> <808080101010020202202020010101080808404040040404>
+mac11 36 <FF888888FF888888> <FFFFFF888888888888888888FFFFFF888888888888888888>
+mac12 42 <FF808080FF080808> <FFFFFF808080808080808080FFFFFF080808080808080808>
+mac13 63 <8000000000000000> <808080000000000000000000000000000000000000000000>
+mac14 58 <8040200002040800> <808080404040202020000000020202040404080808000000>
+mac15 49 <8244394482010101> <828282444444393939444444828282010101010101010101>
+mac16 34 <F87422478F172271> <F8F8F87474742222224747478F8F8F171717222222717171>
+mac17 48 <55A04040550A0404> <555555A0A0A04040404040405555550A0A0A040404040404>
+mac18 50 <2050888888880502> <202020505050888888888888888888888888050505020202>
+mac19 31 <BF00BFBFB0B0B0B0> <BFBFBF000000BFBFBFBFBFBFB0B0B0B0B0B0B0B0B0B0B0B0>
+mac20 64 <0000000000000000>
+mac21 60 <8000080080000800>
+mac22 56 <8800220088002200>
+mac23 48 <8822882288228822>
+mac24 48 <AA00AA00AA00AA00>
+mac25 32 <FF00FF00FF00FF00> <FFFFFF000000FFFFFF000000FFFFFF000000FFFFFF000000>
+mac26 48 <1122448811224488> <111111222222444444888888111111222222444444888888>
+mac27 48 <FF000000FF000000> <FFFFFF000000000000000000FFFFFF000000000000000000>
+mac28 56 <0102040810204080> <010101020202040404080808101010202020404040808080>
+mac29 56 <AA00800088008000> <AAAAAA000000808080000000888888000000808080000000>
+mac30 49 <FF80808080808080> <FFFFFF808080808080808080808080808080808080808080>
+mac31 51 <081C22C180010204> <0808081C1C1C222222C1C1C1808080010101020202040404>
+mac32 50 <881422418800AA00> <888888141414222222414141888888000000AAAAAA000000>
+mac33 58 <40A00000040A0000> <404040A0A0A00000000000000404040A0A0A000000000000>
+mac34 51 <038448300C020101> <0303038484844848483030300C0C0C020202010101010101>
+mac35 46 <8080413E080814E3> <8080808080804141413E3E3E080808080808141414E3E3E3>
+mac36 44 <102054AAFF020408> <101010202020545454AAAAAAFFFFFF020202040404080808>
+mac37 26 <77898F8F7798F8F8> <7777778989898F8F8F8F8F8F777777989898F8F8F8F8F8F8>
+mac38 48 <0008142A552A1408> <0000000808081414142A2A2A5555552A2A2A141414080808>
diff --git a/macros/generic/diagrams/xypic/texinputs/xymatrix.tex b/macros/generic/diagrams/xypic/texinputs/xymatrix.tex
new file mode 100644
index 0000000000..9cdf39b8d7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xymatrix.tex
@@ -0,0 +1,500 @@
+%% xymatrix.tex from $Id: xymatrix.doc,v 3.14 2011/03/31 06:10:57 krisrose Exp $
+%%
+%% Xy-pic ``Matrix'' feature.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{matrix}{Matrix feature}{\stripRCS$Revision: 3.14 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xynew@{count}\Row
+\xynew@{count}\Col
+\xydef@\maxrow@{0}
+\xydef@\maxcol@{0}
+\xydef@\maxcolrow@{0}
+\xynew@{toks}\queue@
+\xynew@{toks}\queue@@
+\xynew@{count}\qcount@
+\xynew@{count}\qcount@@
+\xydef@\clearq@{%
+ \global\queue@={}\global\qcount@=\@ne
+ \global\queue@@={}\global\qcount@@=\z@}
+\xydef@\addq@#1{\global\advance\matrixsize@\@ne
+ \ifnum\qcount@@<\qcount@ \let\addq@@=\addq@i
+ \else \let\addq@@=\addq@ii \fi
+ \expandafter\addq@@\the\queue@@\addq@@{#1}}
+\xylet@\addq@@=\relax
+\xydef@\addq@i#1\addq@@#2{%
+ \global\advance\qcount@@\@ne \global\queue@@={#1#2}}
+\xydef@\addq@ii#1\addq@@#2{%
+ \global\advance\qcount@\@ne \global\qcount@@=\z@
+ \global\queue@=\expandafter{\the\queue@#1#2}\global\queue@@={}}
+\xydef@\finishq@{\expandafter\addq@ii\the\queue@@\addq@@{}}
+\xynew@{count}\matrixsize@
+\xynew@{if}\ifnoisymatrices@ \noisymatrices@true
+\xydef@\SilentMatrices{\noisymatrices@false}
+\xydef@\NoisyMatrices{\noisymatrices@true}
+\xydef@\xymatrixnocompile{\global\matrixsize@=\z@
+ \ifnoisymatrices@\message{<xymatrix}\fi
+ \if\inxy@
+ \DN@{\nter@{}\xy@\xymatrix{\enter@{%
+ \def\noexpand\xy@minX@@{\xy@minX@@}\def\noexpand\xy@maxX@@{\xy@maxX@@}%
+ \def\noexpand\xy@minY@@{\xy@minY@@}\def\noexpand\xy@maxY@@{\xy@maxY@@}%
+ \edef\noexpand\xymatrixprefix@@{\codeof\xymatrixprefix@@}}}}%
+ \else \DN@{\xy \nter@\endxy \xy@\xymatrix{\nter@{}}}\fi \next@
+ \xy@@{\save@ \edef\matrixorigin@{\X@c=\the\X@c \Y@c=\the\Y@c}%
+ \edef\xy@minX@@{\the\X@c}\edef\xy@maxX@@{\the\X@c}%
+ \edef\xy@minY@@{\the\Y@c}\edef\xy@maxY@@{\the\Y@c}}%
+ \xdef\maxrow@{0}\xdef\maxcol@{0}\xdef\maxcolrow@{0}%
+ \mkHWdefaults@ \xymatrix@prefix""}
+\xylet@\xymatrix=\xymatrixnocompile
+\xydef@\xymatrixprefix@@{}
+\xydef@\xymatrix@prefix"#1"{\DN@{#1}\edef\xymatrixprefix@@{\codeof\next@}%
+ \DNii@##1{\xy@{"#1"}{\edef\xymatrixprefix@@{##1}}}%
+ \expandafter\nextii@\expandafter{\xymatrixprefix@@}%
+ \xyFN@\xymatrix@setup}
+\xydef@\xymatrix@setup{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@setup}%
+ \else\ifx \bgroup\next \let\next@=\xymatrix@ii
+ \else\addAT@\ifx\next \addAT@\DN@{\xy@{@}{}\xyFN@\xymatrix@at}%
+ \else\ifx "\next \let\next@=\xymatrix@prefix
+ \else \DN@{\xyerror@{\string\xymatrix<setup>{<rows>} expected}{}}%
+ \fi\fi\fi\fi \next@}
+\xydef@\xymatrix@ii#1{%
+ \xymatrix@pretypeset{#1}%
+ \ifnum\maxcol@=\z@ \mkWcol@ \mkWmax@ \mkHrow@ \mkHmax@
+ \xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi
+ \ifnoisymatrices@\message{\maxcol@ x\maxrow@}\fi
+ \xymatrix@measureit@@ \the\queue@ \global\queue@={}%
+ \xymatrix@typeset{#1}\restore\xymatrix@insert
+ \xy@@\leave@ \leave@
+ \ifnoisymatrices@\message{\the\matrixsize@>}\fi \ignorespaces}
+\xydef@\xymatrixcompile#1#{\xymatrixcompile@{#1}}
+\xydef@\xymatrixcompile@#1#2{\xycompile{\xymatrixnocompile#1{#2}}}
+\xydef@\CompileMatrices{\let\xymatrix=\xymatrixcompile}
+\xydef@\NoCompileMatrices{\let\xymatrix=\xymatrixnocompile}
+\xydef@\xy@cossign@@{+}
+\xydef@\xy@sinsign@@{+}
+\xydef@\xy@cosabs@@{1}
+\xydef@\xy@sinabs@@{0}
+\xydef@\xy@tanabs@@{0}
+\xydef@\xy@cotabs@@{100}
+\xydef@\xymatrix@rotation{%
+ \xy@@{%
+ \edef\xy@cossign@@{\ifdim\cosDirection\p@<\z@-\else+\fi}%
+ \edef\xy@sinsign@@{\ifdim\sinDirection\p@<\z@-\else+\fi}%
+ \edef\xy@cosabs@@{%
+ \if\xy@cossign@@\cosDirection\else\xy@cossign@@\cosDirection\fi}%
+ \edef\xy@sinabs@@{%
+ \if\xy@sinsign@@\sinDirection\else\xy@sinsign@@\sinDirection\fi}%
+ \dimen@=\xy@cosabs@@\p@ \dimen@ii=\xy@sinabs@@\p@
+ \ifdim\dimen@ii<.01\p@ \def\xy@cotabs@@{100}%
+ \else \quotient@\xy@cotabs@@\dimen@\dimen@ii \fi
+ \dimen@=\xy@cosabs@@\p@ \dimen@ii=\xy@sinabs@@\p@
+ \ifdim\dimen@<.01\p@ \def\xy@tanabs@@{100}%
+ \else \quotient@\xy@tanabs@@\dimen@ii\dimen@ \fi}}
+\xylet@\xymatrixsavedCOORD@=\relax
+\xydef@\xymatrix@pretypeset#1{%
+ \global\Row=\z@ \xdef\maxcol@{0}\clearq@
+ \setbox8=\vtop{%
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@
+ \everycr{}\let\\=\cr \tabskip=\z@ \offinterlineskip
+ \halign{\prentry@ ##!@&&\xyFN@\prentry@@##!@\cr#1\crcr}%
+ \prentry@@@}%
+ \xdef\maxrow@{\the\Row}%
+ \finishq@}
+\xydef@\prentry@{\relax
+ \ifnum\Row>\z@
+ \ifnum\maxcol@<\Col\xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi
+ \expandafter\xdef\csname maxcol@\the\Row\endcsname{\the\Col}\fi
+ \global\advance\Row\@ne \global\Col=\z@ \xyFN@\prentry@@}
+\xylet@\lastprentry@@=\relax
+\xydef@\xyeatall@{\let\xy@=\xyeat@ \change@oxy@\xyeat@ \let\xy@@ix@=\eat@}
+\xydef@\prentry@@{\global\advance\Col\@ne
+ \let\next@=\prentry@@norm
+ \ifoldxymatrix@\else \ifx *\next \DN@*{\xyFN@\prentry@@star}\fi \fi
+ \next@}
+\xydef@\prentry@@star{\ifx *\next \DN@*{\xyFN@\prentry@@star@ii}%
+ \else \DN@##1##{\prentry@@star@i{##1}}\fi \next@}
+\xydef@\prentry@@star@i#1#2#3!@{\gdef\lastprentry@@{*#1{#2}#3}%
+ \setbox\lastobjectbox@=\object#1{#2}%
+ \prentry@@x}
+\xydef@\prentry@@star@ii{%
+ \ifx [\next
+ \DN@[##1]{\DN@####1{\def\entrymodifiers@{[##1]####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\prentry@@norm}%
+ \else
+ \DN@##1{\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\prentry@@norm}%
+ \fi \next@}
+\xydef@\prentry@@norm#1!@{\gdef\lastprentry@@{#1}%
+ \DN@{\setbox\lastobjectbox@=\object}%
+ \expandafter\next@\entrymodifiers@{\xyeatall@ \everyentry@ #1}%
+ \prentry@@x}
+\xydef@\prentry@@x{%
+ \edef\next@{{\noexpand\pre@emit{\the\Row}{\Upness@}{\the\Col}{\Leftness@}%
+ {\the\L@c}{\the\R@c}{\the\D@c}{\the\U@c}{\expandafter\noexpand\the\Edge@c}}}%
+ \expandafter\addq@\next@ \box\lastobjectbox@}
+\xynew@{if}\ifoldxymatrix@ \oldxymatrix@false
+\xydef@\prentry@@@{\relax \let\next@=\prentry@@@i
+ \ifoldxymatrix@ \ifnum\Col=\@ne \ifx\lastprentry@@\empty
+ \global\advance\Row\m@ne \let\next@=\relax \fi\fi\fi
+ \global\let\lastprentry@@=\relax \next@}
+\xydef@\prentry@@@i{%
+ \ifnum\maxcol@<\Col \xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi
+ \expandafter\xdef\csname maxcol@\the\Row\endcsname{\the\Col}}
+\xydef@\xy@minX@@{\z@}
+\xydef@\xy@maxX@@{\z@}
+\xydef@\xy@minY@@{\z@}
+\xydef@\xy@maxY@@{\z@}
+\xydef@\pre@emit#1#2#3#4#5#6#7#8#9{%
+ \global\Row=#1\global\Col=#3\relax
+ \ifnum#3=\@ne
+ \ifnum#1=\@ne \xy@@{\matrixorigin@}%
+ \else \count@@=#1\advance\count@@\m@ne
+ \edef\next@{\noexpand\xy@@{\noexpand\cfromid@
+ {\xymatrixprefix@@\the\count@@,1}}}\next@
+ \pre@emit@ \W@maxout\Hrow@c@@\W@maxin\Hrow@in\xy@tanabs@@
+ \X@c\xy@sinsign@@\xy@sinabs@@\xymatrixrowsep@
+ \pre@emit@ \Hrow@c@@\W@maxout\Hrow@in\W@maxin\xy@cotabs@@
+ \Y@c{-\xy@cossign@@}\xy@cosabs@@\xymatrixrowsep@
+ \fi
+ \else \count@@=#3\advance\count@@\m@ne
+ \pre@emit@ \Wcol@c@@\H@maxout\Wcol@in\H@maxin\xy@cotabs@@
+ \X@c\xy@cossign@@\xy@cosabs@@\xymatrixcolsep@
+ \pre@emit@ \H@maxout\Wcol@c@@\H@maxin\Wcol@in\xy@tanabs@@
+ \Y@c\xy@sinsign@@\xy@sinabs@@\xymatrixcolsep@
+ \fi
+ \DN@##1{\xy@@{\L@c=#5\R@c=#6\D@c=#7\U@c=#8\Edge@c={#9}\idfromc@{##1#1,#3}}}%
+ \expandafter\next@\expandafter{\xymatrixprefix@@}%
+ \xy@@{%
+ \dimen@=\X@c \advance\dimen@-\L@c
+ \ifdim\dimen@<\xy@minX@@ \edef\xy@minX@@{\the\dimen@}\fi
+ \dimen@=\X@c \advance\dimen@+\R@c
+ \ifdim\dimen@>\xy@maxX@@ \edef\xy@maxX@@{\the\dimen@}\fi
+ \dimen@=\Y@c \advance\dimen@-\D@c
+ \ifdim\dimen@<\xy@minY@@ \edef\xy@minY@@{\the\dimen@}\fi
+ \dimen@=\Y@c \advance\dimen@+\U@c
+ \ifdim\dimen@>\xy@maxY@@ \edef\xy@maxY@@{\the\dimen@}\fi}}
+\xydef@\pre@emit@#1#2#3#4{#1\A@ #2\B@ #3\R@ #4\dimen@
+ \edef\next@{{\the\A@}{\the\B@}{\the\R@}{\the\dimen@}}%
+ \expandafter\pre@emit@i\next@}
+\xydef@\pre@emit@i#1#2#3#4#5{\xy@@{%
+ \dimen@=#2\R@=#5\dimen@ \dimen@=#1\relax \ifdim\R@>\dimen@ \R@=\dimen@ \fi
+ \dimen@=#4\B@=#5\dimen@ \dimen@=#3\relax \ifdim\B@>\dimen@ \B@=\dimen@ \fi
+ \advance\R@\B@}%
+ \pre@emit@ii}
+\xydef@\pre@emit@ii#1#2#3#4{\xy@@{%
+ \dimen@=#4\dimen@=#3\dimen@ \advance\R@\dimen@ \advance#1#2\R@}}
+\xydef@\Wcol@in#1{#1=\csname Wcol@\the\Col\endcsname #1=.5#1}
+\xydef@\Wcol@out#1{#1=\csname Wcol@\the\Col\endcsname #1=.5#1}
+\xydef@\Wcol@c@@#1{#1=\csname Wcol@\the\count@@\endcsname #1=.5#1}
+\xydef@\W@maxin#1{#1=\W@max #1=.5#1}
+\xydef@\W@maxout#1{#1=\W@max #1=.5#1}
+\xydef@\Hrow@in#1{#1=\csname Hrow@\the\Row\endcsname #1=.5#1}
+\xydef@\Hrow@out#1{#1=\csname Hrow@\the\Row\endcsname #1=.5#1}
+\xydef@\Hrow@c@@#1{#1=\csname Hrow@\the\count@@\endcsname #1=.5#1}
+\xydef@\H@maxin#1{#1=\H@max #1=.5#1}
+\xydef@\H@maxout#1{#1=\H@max #1=.5#1}
+\xydef@\H@max{\z@}
+\xydef@\W@max{\z@}
+\xydef@\HW@max{\z@}
+\xydef@\mkHrow@{}
+\xydef@\mkWcol@{}
+\xydef@\mkHmax@{}
+\xydef@\mkWmax@{}
+\xydef@\mkHWmax@{}
+\xydef@\mkHWdefaults@{\let\xymatrix@measureit@@=\xymatrix@measureit
+ \let\mkHrow@=\Hrow@R \let\mkWcol@=\Wcol@C
+ \def\mkHmax@{\ifdim\dimen@>\H@max\relax \xdef\H@max{\the\dimen@}\fi}%
+ \def\mkWmax@{\ifdim\dimen@>\W@max\relax \xdef\W@max{\the\dimen@}\fi}%
+ \let\mkHWmax@=\HWmax@max}
+\xydef@\Hrow@R{\expandafter\xdef\csname Hrow@\the\Row\endcsname{\the\dimen@}}
+\xydef@\Wcol@C{\expandafter\xdef\csname Wcol@\the\Col\endcsname{\the\dimen@}}
+\xydef@\Hrow@max{\expandafter\gdef\csname Hrow@\the\Row\endcsname{\H@max}}
+\xydef@\Wcol@max{\expandafter\gdef\csname Wcol@\the\Col\endcsname{\W@max}}
+\xydef@\Hrow@HWmax{\expandafter\gdef\csname Hrow@\the\Row\endcsname{\HW@max}}
+\xydef@\Wcol@HWmax{\expandafter\gdef\csname Wcol@\the\Col\endcsname{\HW@max}}
+\xydef@\HWmax@max{%
+ \ifdim\H@max>\W@max\global\let\HW@max=\H@max\else\global\let\HW@max=\W@max\fi}
+\xydef@\HWmax@set#1{\gdef\HW@max{#1}%
+ \global\let\H@max=\HW@max \global\let\W@max=\HW@max}
+\xydef@\xymatrix@measureit{%
+ \xdef\H@max{\z@}\xdef\W@max{\z@}%
+ \setbox6=\vbox{\unvbox8 \global\Row=\maxrow@
+ \loop@ \dimen@ii=\lastskip\unskip \ifnum\z@<\Row
+ \setbox4=\lastbox \dimen@=\dp4 \advance\dimen@\ht4 \mkHrow@ \mkHmax@
+ \ifnum\Row=\maxcolrow@
+ \setbox2=\hbox{\unhbox4
+ \global\Col=\maxcol@
+ \loop@ \dimen@ii=\lastskip\unskip \ifnum\z@<\Col
+ \setbox\z@=\lastbox \dimen@=\wdz@ \mkWcol@ \mkWmax@
+ \global\advance\Col\m@ne
+ \repeat@}\fi
+ \global\advance\Row\m@ne
+ \repeat@}%
+ \mkHWmax@}
+\xylet@\xymatrix@measureit@@=\relax
+\xydef@\xymatrix@typeset#1{%
+ \clearq@
+ \hbox{\vtop{\xyqall@
+ \xy@@{\ifx\xymatrixsavedCOORD@\relax
+ \enter@{\noexpand\let\noexpand\COORD@\noexpand\xymatrixsavedCOORD@}%
+ \let\xymatrixsavedCOORD@=\COORD@ \let\COORD@=\xymatrixCOORD@
+ \else \enter@{}\fi}%
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@
+ \kern\z@ \global\Row=\z@
+ \everycr{}\let\\=\cr \tabskip=\z@ \offinterlineskip
+ \halign{\entry@##!@&&\entry@@##!@\cr#1\crcr}%
+ \xy@@{\leave@}}}%
+ \finishq@ \expandafter\xy@@\expandafter{\the\queue@}\global\queue@={}}
+\xydef@\entry@{\relax \global\advance\Row\@ne \global\Col=\z@ \entry@@}
+\xydef@\entry@@{\global\advance\Col\@ne
+ \DN@##1,##2,##3@{\xy@{ENTRY "##3##1,##2"}{\Row=##1 \Col=##2\relax
+ \cfromid@{##3##1,##2}\pfromc@}}%
+ \edef\nextii@{\the\Row,\the\Col,\xymatrixprefix@@ @}%
+ \expandafter\next@\nextii@
+ \xyFN@\entry@@i}
+\xydef@\entry@@i{\let\next@=\entry@@norm
+ \ifoldxymatrix@\else \ifx *\next \DN@*{\xyFN@\entry@@star}\fi \fi
+ \next@}
+\xydef@\entry@@star{\ifx *\next \DN@*{\xyFN@\entry@@star@ii}%
+ \else \DN@##1##{\entry@@star@i{##1}}\fi \next@}
+\xydef@\entry@@star@i#1#2#3!@{%
+ \xy@@ix@{{#1}{#2}}\xy@@{\expandafter\dropentry@\the\toks9}%
+ \setboxz@h{\xyqall@
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@ \everyentry@ #3}%
+ \setbox\z@=\copy\voidb@x}
+\xydef@\entry@@star@ii{%
+ \ifx [\next
+ \DN@[##1]{\DN@####1{\def\entrymodifiers@{[##1]####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\entry@@norm}%
+ \else
+ \DN@##1{\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\entry@@norm}%
+ \fi \next@}
+\xydef@\entry@@norm#1!@{%
+ \DN@##1{\expandafter\xy@@ix@
+ \expandafter{\expandafter{\entrymodifiers@}{##1}}}%
+ \expandafter\next@\expandafter{\everyentry@#1}%
+ \xy@@{\expandafter\dropentry@\the\toks9}%
+ \setbox\z@=\expandafter\object\entrymodifiers@{\xyqall@
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@ \everyentry@ #1}%
+ \setbox\z@=\copy\voidb@x}
+\xydef@\dropentry@#1#2{\drop@{#1}{\xyeatall@
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@ #2}}
+\xydef@\xyqall@{%
+ \ifxysaving@ \let\xy@=\xyqs@ \let\xy@@ix@=\xysave@@toksix@
+ \else \let\xy@=\xyq@ \let\xy@@ix@=\xyq@@toksix@ \fi
+ \change@oxy@\xy@}
+\xydef@\xyq@#1#2{\addq@{#2}}
+\xydef@\xyq@@toksix@{\begingroup
+ \xyuncatcodes \afterassignment\xyq@@toksix@i \global\toks9=}
+\xydef@\xyq@@toksix@i{%
+ \DN@##1{\endgroup \xy@@{\global\toks9={##1}}}%
+ \expandafter\next@\expandafter{\the\toks9}}
+\xydef@\xyqs@{\global\advance\matrixsize@\@ne \xysave@}
+\xydef@\xymatrix@insert{%
+ \xy@@{\edef\nextii@{{\xy@minX@@}{\xy@maxX@@}{\xy@minY@@}{\xy@maxY@@}}%
+ \expandafter\xymatrix@insert@\nextii@}}
+\xydef@\xymatrix@insert@#1#2#3#4{\matrixorigin@
+ \L@c=+\X@c \advance\L@c-#1\relax
+ \R@c=-\X@c \advance\R@c+#2\relax
+ \D@c=+\Y@c \advance\D@c-#3\relax
+ \U@c=-\Y@c \advance\U@c+#4\relax
+ \Edge@c={\rectangleEdge}}
+\xylet@\thematrixCOORD@@=\relax
+\xylet@\thematrixprefix@@=\relax
+\xydef@\xymatrixCOORD@{%
+ \ifx [\next
+ \DN@[##1]{\xy@{[##1]}{\def\thematrixCOORD@@{[##1]}}%
+ \xyFN@\xymatrixCOORD@i##1]}%
+ \else \let\next@=\xymatrixsavedCOORD@ \fi \next@}
+\xydef@\xymatrixCOORD@i{\count@=\Row \count@@=\Col
+ \let\thematrixprefix@@=\xymatrixprefix@@
+ \ifcat A\noexpand\next
+ \DN@##1{\expandafter\notrelaxorelse@\csname xymatrixCOORD@i@##1\endcsname
+ \xymatrixCOORD@other}%
+ \else\ifx ]\next \DN@]{\xymatrixCOORD@x}%
+ \else\ifx "\next \DN@"##1"{\DN@{##1}\edef\thematrixprefix@@{\codeof\next@}%
+ \xyFN@\xymatrixCOORD@ii}%
+ \else \let\next@=\xymatrixCOORD@other \fi\fi\fi \next@}
+\xydef@\xymatrixCOORD@i@u{\advance\count@ \m@ne\xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@i@d{\advance\count@ \@ne \xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@i@l{\advance\count@@\m@ne\xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@i@r{\advance\count@@\@ne \xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@ii{%
+ \ifcat A\noexpand\next
+ \DN@##1{\expandafter\notrelaxorelse@\csname xymatrixCOORD@i@##1\endcsname
+ \xymatrixCOORD@error}%
+ \else\ifx ]\next \DN@]{\xymatrixCOORD@x}%
+ \else \let\next@=\xymatrixCOORD@xx \fi\fi \next@}
+\xydef@\xymatrixCOORD@error#1{\DN@{#1}%
+ \xyerror@{illegal <coord> (\codeof\next@): illegal [...] target form}{}%
+ \xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@other#1,#2]{%
+ \advance\count@#1\advance\count@@#2\xymatrixCOORD@x}
+\xydef@\xymatrixCOORD@x{%
+ \DN@##1{\xy@@{%
+ \expandafter\let\expandafter\next@\csname Q@##1\endcsname
+ \ifx\next@\relax \xyerror@RC{##1}\else \next@ \fi}%
+ \afterCOORD@}%
+ \edef\nextii@{{\thematrixprefix@@\the\count@,\the\count@@}}%
+ \expandafter\next@\nextii@}
+\xydef@\xymatrixCOORD@xx{%
+ \DN@##1{\xy@@{%
+ \expandafter\let\expandafter\next@\csname Q@##1\endcsname
+ \ifx\next@\relax \xyerror@RC{##1}\else \next@\no@@ \fi}%
+ \afterPLACE\xymatrixCOORD@after}%
+ \edef\nextii@{{\thematrixprefix@@\the\count@,\the\count@@}}%
+ \expandafter\next@\nextii@}
+\xydef@\xymatrixCOORD@after{%
+ \ifx ]\next \DN@]{\afterCOORD@}%
+ \else \let\next@=\xymatrixCOORD@error \fi \next@}
+\xydef@\xyerror@RC#1{\xyerror@{in entry \string"\the\Row,\the\Col\string":
+ No \codeof\thematrixCOORD@@\space(is \string"#1\string") from here}{}}
+\xylet@\xymatrix@addop@@=\relax
+\xydef@\xymatrix@at{\def\xymatrix@addop@@{\xymatrix@R\xymatrix@C}%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@at}%
+ \else\ifx !\next \DN@!{\xyFN@\xymatrix@fix}%
+ \else\addPLUS@\ifx \next \let\next@=\xymatrix@addop
+ \else\addDASH@\ifx \next \let\next@=\xymatrix@addop
+ \else\addEQ@\ifx \next \let\next@=\xymatrix@addop
+ \else\ifx 1\next \DN@1{%
+ \let\objectmargin@=\p@ \xyFN@\xymatrix@setup}%
+ \else\ifx R\next \def\xymatrix@addop@@{\xymatrix@R}\DN@ R{\xymatrix@addop}%
+ \else\ifx C\next \def\xymatrix@addop@@{\xymatrix@C}\DN@ C{\xymatrix@addop}%
+ \else\ifx M\next \def\xymatrix@addop@@{\xymatrix@M}\DN@ M{\xymatrix@addop}%
+ \else\ifx L\next \def\xymatrix@addop@@{\xymatrix@L}\DN@ L{\xymatrix@addop}%
+ \else\ifx H\next \def\xymatrix@addop@@{\xymatrix@H}\DN@ H{\xymatrix@addop}%
+ \else\ifx W\next \def\xymatrix@addop@@{\xymatrix@W}\DN@ W{\xymatrix@addop}%
+ \else\ifx *\next \DN@*{\xyFN@\xymatrix@mods}%
+ \else \DN@{\afterDIRECTIONorEMPTY
+ {\xymatrix@rotation \xyFN@\xymatrix@setup}{%
+ \xyerror@{<addop> or <direction> or one of 1RCMLHW*! expected}{}%
+ \xyFN@\xymatrix@setup}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\xymatrix@fix{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@fix}%
+ \else\ifx R\next \let\mkHrow@=\Hrow@max \DN@ R{\xyFN@\xymatrix@fix@}%
+ \else\ifx C\next \let\mkWcol@=\Wcol@max \DN@ C{\xyFN@\xymatrix@fix@}%
+ \else \let\mkHrow@=\Hrow@HWmax \let\mkWcol@=\Wcol@HWmax
+ \let\next@=\xymatrix@fix@
+ \fi\fi\fi \next@}
+\xydef@\xymatrix@fix@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@fix@}%
+ \else\ifx 0\next \def\mkHWmax@{\HWmax@set\z@}\DN@ 0{\xyFN@\xymatrix@setup}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\afterassignment\xymatrix@fix@x\dimen@ii=}%
+ \else \let\mkHWmax@=\HWmax@max \let\next@=\xymatrix@setup \fi\fi\fi \next@}
+\xydef@\xymatrix@fix@x{%
+ \edef\mkHWmax@{\noexpand\HWmax@set{\the\dimen@ii}}\xyFN@\xymatrix@setup}
+\xydef@\xymatrix@addop{\afterADDOP{\xyFN@\xymatrix@addop@}}
+\xydef@\xymatrix@addop@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@addop@}%
+ \else\ifx R\next \DN@ R{\xy@{R}{}\dimen@ii=\xymatrixrowsep@\xymatrix@addop@x}%
+ \else\ifx C\next \DN@ C{\xy@{C}{}\dimen@ii=\xymatrixcolsep@\xymatrix@addop@x}%
+ \else \DN@{\afterassignment\xymatrix@addop@x\dimen@ii=}\fi\fi\fi \next@}
+\xydef@\xymatrix@addop@x{\expandafter\xy@\expandafter{\the\dimen@ii}{}%
+ \xymatrix@addop@@ \xyFN@\xymatrix@setup}
+\xydef@\xymatrix@R{\Addop@@\xymatrixrowsep@\dimen@ii}
+\xydef@\xymatrix@C{\Addop@@\xymatrixcolsep@\dimen@ii}
+\xydef@\xymatrix@M{\Addop@@\objectmargin@\dimen@ii}
+\xydef@\xymatrix@L{\Addop@@\labelmargin@\dimen@ii}
+\xydef@\xymatrix@H{\Addop@@\objectheight@\dimen@ii}
+\xydef@\xymatrix@W{\Addop@@\objectwidth@\dimen@ii}
+\xydef@\xymatrixrowsep@{2pc}
+\xydef@\xymatrixcolsep@{2pc}
+\xydef@\xymatrixrowsep{\afterADDOP{\Addop@@\xymatrixrowsep@}}
+\xydef@\xymatrixcolsep{\afterADDOP{\Addop@@\xymatrixcolsep@}}
+\xydef@\xymatrix@mods{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@mods}%
+ \else\ifx [\next
+ \DN@ [##1]{\xy@{[##1]}{}\DN@####1{\def\entrymodifiers@{[##1]####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}%
+ \else\addPLUS@\ifx \next \DN@##1{\DNii@{##1}\xyFN@\xymatrix@change}%
+ \else\addDASH@\ifx \next \DN@##1{\DNii@{##1}\xyFN@\xymatrix@change}%
+ \else\addEQ@\ifx \next \DN@##1{\DNii@{##1}\xymatrix@set}%
+ \else \let\next@=\xymatrix@mods@error \fi\fi\fi\fi\fi \next@}
+\xydef@\xymatrix@set{%
+ \begingroup \plainxy@
+ \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@error}
+\xydef@\xymatrix@change{%
+ \addEQ@\ifx\next \DN@##1{\expandafter\DNii@\expandafter{\nextii@##1}%
+ \expandafter\xy@\expandafter{\nextii@}{}\begingroup \plainxy@
+ \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@xx}%
+ \else \DN@{\expandafter\xy@\expandafter{\nextii@}{}\begingroup \plainxy@
+ \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@xx}\fi
+ \next@}
+\xydef@\xymatrix@mods@x{\expandafter\xy@\expandafter{\nextii@}{}%
+ \def\next@##1##2##3{\def\nextii@####1{##1##2####1##3}}%
+ \addGT@{\addLT@{\expandafter\next@\expandafter{\nextii@}}}%
+ \DN@##1{\gdef\tmp@@@{{##1}}}%
+ \edef\nextiii@{{\the\X@c,\the\Y@c}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\nextii@\nextiii@}%
+ \endgroup
+ \DN@##1{\xy@{##1}{}\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}%
+ \expandafter\next@\tmp@@@}
+\xydef@\xymatrix@mods@xx{\expandafter\xy@\expandafter{\nextii@}{}%
+ \expandafter\gdef\expandafter\tmp@@@\expandafter{\expandafter{\nextii@}}%
+ \endgroup
+ \DN@##1{\xy@{##1}{}\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}%
+ \expandafter\next@\tmp@@@}
+\xydef@\xymatrix@mods@error{\endgroup
+ \xyerror@{Impossible @*<addop><size> <setup>.}{}\xyFN@\xymatrix@setup}
+\xywarnifdefined\entrymodifiers
+\expandafter\def\addEQ@\entrymodifiers#1{\def\entrymodifiers@{#1}\ignorespaces}
+\xydef@\entrymodifiers@{!V\entrybox}
+\xydef@\entrybox#1{\hbox{\setbox\z@=\objectbox{#1}%
+%%
+%% \L@p=\wdz@ \D@p=\ht\z@ \advance\D@p\dp\z@
+%% \dimen@=\objectwidth@ \advance\dimen@-\L@p
+%% \ifdim\dimen@>\z@ \advance\L@p\dimen@ \R@p=.5\dimen@ \else \R@p=\z@ \fi
+%% \dimen@=\objectheight@ \advance\dimen@-\D@p
+%% \ifdim\dimen@>\z@ \advance\D@p\dimen@ \fi
+%% \dimen@=\objectmargin@ \advance\L@p2\dimen@ \advance\D@p2\dimen@
+%% \U@p=-.5\ht\z@ \advance\U@p.5\dp\z@ \advance\R@p\objectmargin@
+%% \setboxz@h{\kern\R@p \raise\U@p\boxz@}%
+%% \wdz@=\L@p \ht\z@=.5\D@p \dp\z@=.5\D@p
+ \L@p=\wdz@ \R@p=\z@
+ \dimen@=\objectwidth@ \advance\dimen@-\L@p
+ \ifdim\dimen@>\z@ \advance\L@p\dimen@ \R@p=.5\dimen@ \fi
+ \dimen@=\objectmargin@ \advance\L@p2\dimen@ \advance\R@p\dimen@
+ \D@p=\ht\z@ \advance\D@p\dp\z@ \U@p=-\fontdimen22\textfont\tw@
+ \dimen@=\objectheight@ \advance\dimen@-\D@p
+ \ifdim\dimen@>\z@ \advance\D@p\dimen@ \fi
+ \dimen@=\objectmargin@ \advance\D@p2\dimen@
+ \setboxz@h{\kern\R@p \raise\U@p\boxz@}%
+ \wdz@=\L@p
+ \advance\D@p-\ht\z@ \advance\D@p-\dp\z@ \D@p=.5\D@p
+ \dimen@=\ht\z@ \advance\dimen@\D@p \ht\z@=\dimen@
+ \dimen@=\dp\z@ \advance\dimen@\D@p \dp\z@=\dimen@
+ \boxz@}}
+\xywarnifdefined\everyentry
+\expandafter\def\addEQ@\everyentry#1{\def\everyentry@{#1}\ignorespaces}
+\xylet@\everyentry@=\empty
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xymovie.tex b/macros/generic/diagrams/xypic/texinputs/xymovie.tex
new file mode 100644
index 0000000000..a8950e694a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xymovie.tex
@@ -0,0 +1,75 @@
+%% xymovie.tex from $Id: xymovie.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Movie Storyboard extension'' option.
+%% Copyright (c) 1996-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{movie}{Movie Storyboard extension}{\stripRCS$Revision: 3.9 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xynew@{dimen}\m@height
+\xynew@{dimen}\m@width
+\xydef@\extractparameterm@#1#2#3{%
+ \DN@##1,#1=##2,##3@{\csname m@#1\endcsname=##2\relax}%
+ \next@,#2,#3,@}
+\xydef@\MovieSetup#1{%
+ \extractparameterm@{height}{#1}{height=2in}%
+ \extractparameterm@{width}{#1}{width=2in}%
+}
+\xydef@\theScene{0}
+\xydef@\theF{0}
+\xydef@\theFr{1}
+\xydef@\F#1{#1(0)}
+\xydef@\Fr#1{#1(1)}
+\xynew@{if}\iflastframe@
+\xynew@{count}\m@scene
+\xydef@\scene{\advance\m@scene\@ne
+ \DN@{\ifx*\next \lastframe@true \DN@*{\xyFN@\scene@}%
+ \else \let\next@=\scene@ \fi \next@}%
+ \xyFN@\next@}
+\xydef@\scene@{%
+ \ifx[\next \DN@[##1]{\scene@i}\else \let\next@=\scene@i \fi \next@}
+\long\def\scene@i#1{{%
+ \def\caption##1{\gdef\m@caption{Scene \the\m@scene. ##1}}%
+ \edef\theScene{\the\m@scene}%
+ \def\theF{0}\def\theFr{1}%
+ \def\F##1{##1(0)}\def\Fr##1{##1(1)}%
+ \scene@frame{#1}%
+ \iflastframe@
+ \def\caption##1{}%
+ \gdef\m@caption{The End.}%
+ \def\theF{1}\def\theFr{0}%
+ \def\F##1{##1(1)}\def\Fr##1{##1(0)}%
+ \scene@frame{#1}%
+ \fi
+ }\ignorespaces}
+\def\scene@frame#1{\vbox{\null
+ \dimen@=\m@width \advance\dimen@2\xydashw@
+ \hrule width\dimen@
+ \hbox to\dimen@{\vrule width\xydashw@ \hss
+ \vbox to\m@height{\hsize=\m@width \null\vfil{#1}\vfil\null}%
+ \hss \vrule width\xydashw@}%
+ \hrule width\dimen@
+ \setbox0=\hbox{%
+ \setbox0=\hbox to\m@width{\hss\strut \m@caption\hss}%
+ \dimen0=\dp0 \ht0=0pt \dp0=0pt \raise\dimen0\box0}%
+ \ht0=0pt \dp0=0pt \box0\relax
+ \null}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xynecula.tex b/macros/generic/diagrams/xypic/texinputs/xynecula.tex
new file mode 100644
index 0000000000..d39f505232
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xynecula.tex
@@ -0,0 +1,330 @@
+%% xynecula.tex from $Id: xynecula.doc,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Necula extensions'' option.
+%% Copyright (c) 1998 George C. Necula <necula@cs.cmu.edu>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{necula}{Necula's extensions}{\stripRCS$Revision: 3.4 $}%
+ {George C. Necula}{necula@cs.cmu.edu}%
+ {School of Computer Science,
+ Carnegie Mellon University,
+ 5000 Forbes Avenue,
+ Pittsburgh, PA 15213-3891, USA}
+\def\expandbeforenext@#1{%
+ \DN@ e|##1|{\edef\tmp@{##1}\expandafter\xyFN@\expandafter#1\tmp@}%
+}
+\xylet@\xy@oldOBJECT@=\OBJECT@
+\xydef@\xy@newOBJECT@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xy@newOBJECT@}%
+ \else\ifx e\next
+ \expandbeforenext@\OBJECT@
+ \else
+ \DN@{\xy@oldOBJECT@}\fi\fi
+ \next@}%
+\let\OBJECT@=\xy@newOBJECT@
+\xylet@\xy@oldCOORD@=\COORD@
+\xydef@\xy@newCOORD@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xy@newCOORD@}%
+ \else\ifx e\next
+ \expandbeforenext@\COORD@
+ \else
+ \DN@{\xy@oldCOORD@}\fi\fi
+ \next@}%
+\let\COORD@=\xy@newCOORD@
+\xydefcsname@{*stylechar@P@}#1{\Pshape@#1@}
+\xynew@{count}\c@poly@count \c@poly@count=\z@
+\xydef@\Pshape@:#1@{%
+ \addtotoks@{%
+ \def\poly@list{@}%
+ \poly@parse #1,\relax,%Sets the poly@list
+ \def\poly@cache{}%
+ \edef\poly@id{\the\c@poly@count}%
+ \global\advance\c@poly@count\@ne
+ \poly@setEdge
+ \edef\poly@saveLcshape{\the\L@c}%
+ \polygonEdge@Outer% Set U,R,D,L
+ \poly@setEdge
+ \dimen@=\poly@saveLcshape\advance\dimen@-\L@c
+ \advance\R@p -\dimen@
+}}
+\xydef@\poly@setEdge{\expandafter\poly@setEdge@\poly@list\poly@id}
+\xydef@\poly@setEdge@#1@#2{\Edge@c={\polygonEdge#1@#2@}%
+ \expandafter\xdef\csname poly@cache#2%
+ \endcsname{\poly@cache}}
+\xydefcsname@{frm[P]{-}}{\expandafter\draw@polyframe\the\Edge@c{-}}
+\xydefcsname@{frm[P]{.}}{\expandafter\draw@polyframe\the\Edge@c{.}}
+\xydefcsname@{frm[P]{=}}{\expandafter\draw@polyframe\the\Edge@c{=}}
+\xydef@\draw@polyframe\polygonEdge#1@#2@#3{%
+ \def\poly@dir{#3}%
+ \def\poly@list{#1@}%
+ \def\poly@id{#2}%
+ \edef\poly@cache{\csname poly@cache\poly@id\endcsname}%
+ \draw@polygon}
+\xydef@\poly@empty{}
+\xydef@\poly@map#1#2,#3;#4@{%
+ #1{#2}{#3}%
+ \def\tmp@{#4}%
+ \ifx \poly@empty\tmp@ \else
+ \poly@map@next#1#4@%
+ \fi
+}
+\xydef@\poly@map@stop#1@{}
+\xydef@\poly@mapExpand#1#2{%
+ \edef\tmp@{\noexpand\poly@map\noexpand #1#2}%
+ \tmp@}
+\xydef@\poly@parse #1,{%
+ \ifx #1\relax
+ \poly@close
+ \let\next@=\relax
+ \else
+ \save@
+ \POS #1%
+ \edef\tmp@{{\the\X@c}{\the\Y@c}}%
+ \expandafter\poly@append\tmp@
+ \restore
+ \let\next@=\poly@parse
+ \fi
+ \next@
+}
+\xydef@\poly@append#1#2{\expandafter\poly@append@\poly@list{#1,#2;}}
+\xydef@\poly@append@#1@#2{\global\def\poly@list{#1#2@}}
+\xydef@\poly@close{\expandafter\poly@close@\poly@list}
+\xydef@\poly@close@#1,#2;#3@{\poly@append{#1}{#2}}
+\xydef@\draw@polygon{%
+ \save@
+ \X@origin=\X@c \Y@origin=\Y@c
+ \poly@setp
+ \U@c=\z@\R@c=\z@\D@c=\z@\L@c=\z@\U@p=\z@\R@p=\z@\D@p=\z@\L@p=\z@
+ \Edge@c={\zeroEdge}\Edge@p={\zeroEdge}%
+ \let\poly@map@next=\poly@map
+ \poly@mapExpand\poly@drawseg\poly@rest
+ \restore
+}
+\xydef@\poly@setp{\expandafter\poly@setp@\poly@list}
+\xydef@\poly@setp@#1,#2;#3@{%
+ \X@p=#1\advance\X@p\X@origin \Y@p=#2\advance\Y@p\Y@origin%
+ \global\def\poly@rest{#3@}}
+\xydef@\poly@drawseg#1#2{%
+ \dimen@=#1\X@c=\the\dimen@\advance\X@c \X@origin
+ \dimen@=#2\Y@c=\the\dimen@\advance\Y@c \Y@origin
+ \expandafter\connect@\expandafter\dir\poly@dir%
+ \X@p=\X@c\Y@p=\Y@c}
+\xydef@\polygonEdge#1@#2@#3{%
+ \def\poly@list{#1@}%
+ \def\poly@id{#2}%
+ \edef\poly@cache{\csname poly@cache\poly@id\endcsname}%
+ \ifcase#3\relax
+ \DN@{\polygonEdge@Inters
+ }%
+ \or \DN@{\polygonEdge@Under}%
+ \or \DN@{\polygonEdge@Dist}%
+ \or \DN@{\rectangleProp@}%
+ \or \DN@{\polygonEdge@Inner}%
+ \or \DN@{\polygonEdge@Outer}%
+ \else \DN@{}\fi
+ \next@}
+\newif\ifpoly@badinters
+\xydef@\polygonEdge@Inters{%
+ \ifx\poly@cache\poly@empty
+ \poly@intersdoit
+ \else
+ \expandafter\poly@intersprobecache\poly@cache @%
+ \fi
+}
+\xydef@\poly@cachehit#1#2{%
+ \X@c=#1\Y@c=#2}
+\xydef@\poly@cachehitdisable#1#2{\poly@intersdoit}
+\xydef@\poly@intersprobecache#1,#2,#3,#4,#5@{%
+ \dimen@=#1\advance\dimen@-\d@X
+ \ifdim\zz@\dimen@
+ \dimen@=#2\advance\dimen@-\d@Y
+ \ifdim\zz@\dimen@
+ \poly@cachehit{#3}{#4}
+ \else
+ \poly@intersdoit
+ \fi
+ \else
+ \poly@intersdoit
+ \fi
+}
+\xydef@\poly@intersdoit{%
+ \edef\polyoldA@{\the\A@}\edef\polyoldB@{\the\B@}%
+ \def\poly@intersneg{}\def\poly@interspos{}%
+ \save@
+ \poly@setorigin
+ \def\zeroDivide@{\poly@badinterstrue}%
+ \let\poly@map@next=\poly@map
+ \poly@mapExpand\poly@interseg\poly@rest
+ \ifx\poly@intersneg\poly@empty
+ \poly@badinterstrue
+ \else
+ \ifx\poly@interspos\poly@empty
+ \poly@badinterstrue
+ \else
+ \poly@badintersfalse
+ \fi
+ \fi
+ \restore
+ \A@=\polyoldA@\B@=\polyoldB@
+ \ifpoly@badinters \else
+ \edef\tmp@{\poly@interspos,\poly@intersneg @}%
+ \expandafter\poly@intersfinish\tmp@
+ \fi
+}
+\xydef@\poly@intersfinish#1,#2,#3@{%
+ \X@c=#1\Y@c=#2\relax
+ \xdef\poly@cache{\the\d@X,\the\d@Y,#1,#2,#3}%
+ \poly@setEdge
+}
+\xydef@\poly@setorigin{\expandafter\poly@setorigin@\poly@list}
+\xydef@\poly@setorigin@#1,#2;#3@{%
+ \X@origin=#1\advance\X@origin\X@c \Y@origin=#2\advance\Y@origin\Y@c%
+ \global\def\poly@rest{#3@}}
+\xydef@\poly@interseg#1#2{%
+ \dimen@=#1\advance\dimen@\X@c \edef\poly@saveXcinters{\the\dimen@}%
+ \dimen@=#2\advance\dimen@\Y@c \edef\poly@saveYcinters{\the\dimen@}%
+ \save@
+ \poly@badintersfalse
+ \R@c=\poly@saveXcinters \advance\R@c -\X@origin
+ \U@c=\poly@saveYcinters \advance\U@c -\Y@origin
+ \intersect@
+ \A@=\X@c \B@=\Y@c
+ \restore
+ \ifpoly@badinters
+ \else
+\poly@isonseg\X@origin\Y@origin\A@\B@\poly@saveXcinters\poly@saveYcinters
+ \ifpoly@badinters
+ \else
+ \poly@isonray\X@c\Y@c\A@\B@\X@p\Y@p
+ \ifpoly@badinters
+ \edef\poly@intersneg{\the\A@,\the\B@}%
+ \else
+ \edef\poly@interspos{\the\A@,\the\B@}%
+ \fi
+ \fi
+ \fi
+ \X@origin=\poly@saveXcinters\Y@origin=\poly@saveYcinters
+}
+\xydef@\polygonEdge@Dist{\xyerror@{Dist is not yet implemented for polygons}}
+\newif\ifpoly@closedrange
+\xydef@\poly@isinrange#1#2#3{%
+ \ifpoly@badinters \else
+ \dimen@=#1\dimen@i=#2\dimen@ii=#3\relax
+ \advance\dimen@ii -\dimen@ \advance\dimen@i -\dimen@
+ \ifdim\dimen@ii<0pt\relax
+ \ifdim\dimen@i>100\almostz@
+ \poly@badinterstrue
+ \fi
+ \dimen@i=-\dimen@i \dimen@ii=-\dimen@ii
+ \else
+ \ifdim\dimen@i<-100\almostz@\relax
+ \poly@badinterstrue
+ \fi
+ \fi
+ \ifpoly@closedrange
+ \advance\dimen@ii 100\almostz@
+ \ifdim\dimen@i>\dimen@ii
+ \poly@badinterstrue
+ \fi
+ \fi
+ \fi}
+\xydef@\poly@isonseg#1#2#3#4#5#6{%
+ \poly@closedrangetrue
+ \poly@isinrange{#1}{#3}{#5}%
+ \poly@isinrange{#2}{#4}{#6}%
+}
+\xydef@\poly@isonray#1#2#3#4#5#6{%
+ \poly@closedrangefalse
+ \poly@isinrange{#1}{#3}{#5}%
+ \poly@isinrange{#2}{#4}{#6}%
+}
+\xydef@\polygonEdge@Under{%
+ \edef\polysaveA@under{\the\A@}\edef\polysaveB@under{\the\B@}%
+ \edef\poly@saveXcUnder{\the\X@c}\edef\poly@saveYcUnder{\the\Y@c}%
+ \polygonEdge@Inters
+ \ifpoly@badinters% p is very close to c
+ \Inside@true
+ \else
+ \A@=\X@c\B@=\Y@c
+ \X@c=\poly@saveXcUnder\Y@c=\poly@saveYcUnder
+ \poly@isonseg\X@c\Y@c\X@p\Y@p\A@\B@
+ \ifpoly@badinters \Inside@false \else \Inside@true\fi
+ \A@=\polysaveA@under\B@=\poly@saveB@under
+ \fi
+}
+\xydef@\polygonEdge@Inner{%
+ \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}%
+ \L@c=\X@c \D@c=\Y@c
+ \polygonEdge@Inters
+ \ifpoly@badinters
+ \czeroEdge@
+ \else
+ \expandafter\poly@getinterspoints\poly@cache @%
+ \ifdim\X@c>\R@c
+ \L@c=\R@c \R@c=\X@c
+ \else
+ \L@c=\X@c
+ \fi
+ \X@c=0.5\L@c \advance\X@c 0.5\R@c \advance\R@c -\X@c \L@c=\R@c
+ \ifdim\Y@c>\U@c
+ \D@c=\U@c \U@c=\Y@c
+ \else
+ \D@c=\Y@c
+ \fi
+ \Y@c=0.5\D@c \advance\Y@c 0.5\U@c \advance\U@c -\Y@c \D@c=\U@c
+ \Edge@c={\rectangleEdge}%
+ \fi
+ \leave@
+}
+\xydef@\poly@getinterspoints#1,#2,#3,#4,#5,#6@{%
+ \R@c=#3\U@c=#4\X@c=#5\Y@c=#6}
+\xydef@\polygonEdge@Outer{%
+ \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}%
+ \czeroEdge@
+ \let\poly@map@next=\poly@map
+ \poly@mapExpand\poly@findextent\poly@list
+ \Edge@c={\rectangleEdge}%
+ \leave@
+}
+\xydef@\poly@findextent#1#2{%
+ \dimen@=#1\dimen@=\the\dimen@% it fails if I remove the second assign
+ \ifdim\dimen@>\R@c \R@c=\dimen@ \fi
+ \ifdim -\dimen@>\L@c \L@c=-\dimen@ \fi
+ \dimen@=#2\dimen@=\the\dimen@% it fails if I remove the second assign
+ \ifdim\dimen@>\U@c \U@c=\dimen@ \fi
+ \ifdim -\dimen@>\D@c \D@c=-\dimen@ \fi
+}
+\xydef@\Fshape@#1:{\def\whichframe@@{{#1}}\let\whichoptions@@=\empty
+ \DN@{{}}\ifx\whichframe@@\next@ \def\whichframe@@{{-}}\fi
+ \expandafter\xyFN@\expandafter\Fshape@whichframe\the\Edge@c}
+\xydef@\Fshape@whichframe{%
+ \ifx\next\circleEdge
+ \edef\whichframe@@{[o]\whichframe@@}%
+ \DN@##1{\xyFN@\Fshape@i}%
+ \else
+ \ifx\next\polygonEdge
+ \edef\whichframe@@{[P]\whichframe@@}%
+ \DN@\polygonEdge##1@##2@{\xyFN@\Fshape@i}%
+ \else
+ \DN@##1{\xyFN@\Fshape@i}%
+ \fi\fi
+ \next@
+}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyoztex.tex b/macros/generic/diagrams/xypic/texinputs/xyoztex.tex
new file mode 100644
index 0000000000..68550dafb5
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyoztex.tex
@@ -0,0 +1,130 @@
+%% xyoztex.tex from $Id: xyoztex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``OzTeX'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{oztex}{OzTeX driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\OzTeX@@#1{\dvimessage@{OzTeX}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\oztexColor@@
+ \xyaddsupport{crayon}\oztexCrayon@@
+ \xyaddsupport{ps}\oztexPS@@
+ \xyaddsupport{rotate}\oztexRotate@@
+ \xyaddsupport{line}\oztexLine@@
+ \xyaddsupport{frame}\oztexFrames@@
+ \xyaddsupport{tile}\oztexTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\oztexColor@@{\OzTeXColours@}
+\xydef@\OzTeXColours@{\OzTeXPStypes@
+ \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\OzTeXCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@\fi \next@
+ \let\xycolorwarning@=\relax
+ \let\oztexColor@@=\relax
+ \let\UnloadColor@@=\NoOzTeXColor@
+}
+\xydef@\NoOzTeXColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\oztexColor@@=\OzTeXColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\OzTeXCrayon@@{\installCrayolaColors@}
+\xydef@\oztexPS@@{\oztexPS@}
+\xydef@\oztexPSunload@{\UnloadPS@
+ \def\xyPSdictname{}\UsePSdict@@false
+ \let\installxyps@@=\relax
+ \let\UnloadPS@@=\UnloadPS@
+ \xyPSshapes@true
+ \let\oztexPS@@=\oztexPS@ }
+\xydef@\OzTeXSpecial@#1{\special{empty.ps {#1}xy}}
+\xydef@\OzTeXMacro@#1{\special{empty.ps {#1}xy}}
+\xydef@\OzTeXDict@#1{\special{empty.ps @bxy{#1}stopped pop @exy}}
+\xydef@\OzTeXinclude@#1{\special{#1}}
+\xydef@\OzTeXraw@#1{\special{empty.ps @bxy #1 @exy}}%
+\xydef@\OzTeXPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\OzTeXSpecial@\else
+ \let\PSspecial@@=\OzTeXSpecial@
+ \let\PSmacro@@=\OzTeXMacro@
+ \let\PSdict@@=\OzTeXDict@
+ \let\PSraw@@=\OzTeXraw@
+ \let\PSinclude@@=\OzTeXinclude@
+ \let\xyPSobeylines@@=\obeyOzTeXlines@
+ \let\PSspecialdict@@=\OzTeXDict@
+ \OzTeX@@{PostScript}%
+ \fi
+ \OzTeXCurrpt@ }
+{\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}}
+\xylet@\obeyOzTeXlines@=\next
+\xydef@\OzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}%
+\xydef@\OzTeXCurrpt@@{\PSraw@@{xyp}}
+\xydef@\oztexPS@{\OzTeXPStypes@
+ \let\oztexPS@@=\relax
+ \let\UnloadPS@@=\oztexPSunload@
+ \let\installxyps@@=\@OzTeX@PS@
+ \installxyps@ }
+\xydef@\@OzTeX@PS@{\UsePSdict@@true
+ \let\includePSmessage@=\xyOzTeXheader
+ \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi}
+\xydef@\xyOzTeXheader#1#2#3{\UsePSdict@@true}
+\xydef@\oztexLine@@{\oztexLine@}
+\xydef@\oztexLine@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\oztexFrames@@{\OzTeXFrames@}
+\xydef@\OzTeXFrames@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\oztexTiles@@{\OzTeXTiles@}
+\xydef@\OzTeXTiles@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@
+ \xystandardpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\oztexRotate@@{\OzTeXRotate@}
+\xydef@\OzTeXRotate@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \OzTeXRotScale@ \installPSrotscale@ \xyPSshapes@false }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\OzTeXRotScale@{%
+ \def\xyrot@start(##1){%
+ {xyp xyt ##1\space xyr}{OzXy begin gsave}}%
+ \def\xyscale@start(##1,##2){%
+ {xyp xyt ##1\space##2\space xys}{OzXy begin gsave}}%
+ \def\xyrot@end{grestore end}\def\xyscale@end{grestore end}}
+\let\OzTeXRotScale@=\xyRotScale@@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex
new file mode 100644
index 0000000000..60e4060dbb
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex
@@ -0,0 +1,129 @@
+%%
+%% This is file `xypdf-co.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `color')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~muellner>
+%% --------------------------------------------------------------------------
+%%
+%% This program is free software: you can redistribute it and/or modify it
+%% under the terms of the GNU General Public License as published by the Free
+%% Software Foundation, either version 2 of the License, or (at your option)
+%% any later version.
+%%
+%% This program is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf
+%% package may be distributed and/or modified under the conditions of the
+%% GNU General Public License as published by the Free Software Foundation,
+%% either version 2 of the License, or (at your option) any later version.
+%% The distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% The xypdf package improves the output quality of the Xy-pic package when
+%% PDF documents are generated. It produces generic PDF code for graphical
+%% elements like lines, curves and circles instead of approximating these
+%% elements with glyphs in special fonts as the original Xy-pic package does.
+%% The xypdf package works with both TeX and LaTeX in the occurrences of
+%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-co@loaded\endcsname\@empty
+\@ifdefinable\xP@colorname\relax
+\@ifdefinable\xP@colA\relax
+\@ifdefinable\xP@colB\relax
+\@ifdefinable\xP@colC\relax
+\@ifdefinable\xP@colD\relax
+\xP@hook{color}{newxycolor}
+\newcommand*\xP@newxycolor[2]{\def\xP@colorname{#1}\xP@parsecolor#2 @}
+\xP@color@on
+\@ifdefinable\xP@parsecolor\relax
+\def\xP@parsecolor#1 #2 #3@{\def\xP@colA{#1}\def\xP@colB{#2}\ifx\xP@colB\xP@gray
+\xP@newcolor\xP@colorname\xP@colA\xP@gray\newxycolor
+\else
+\xP@parsecolor@#3 @\fi
+}
+\@ifdefinable\xP@parsecolor@\relax
+\def\xP@parsecolor@#1 #2 #3 #4@{\def\xP@colC{#1}\def\xP@colD{#2}\ifx\xP@colD\xP@rgb
+\xP@newcolor\xP@colorname{\xP@colA,\xP@colB,\xP@colC}\xP@rgb\newxycolor
+\else
+\def\@tempa{#3}\ifx\@tempa\xP@cmyk
+\xP@newcolor\xP@colorname{\xP@colA,\xP@colB,\xP@colC,\xP@colD}{cmyk}\newxycolor
+\else
+\PackageError{xypdf}{Syntax error in \string\newxycolor}{}\fi
+\fi
+}
+\newcommand*\xP@gray{gray}
+\newcommand*\xP@rgb{rgb}
+\newcommand*\xP@cmyk{cmyk}
+\xP@hook{color}{OBJECT@shape}
+\newcommand*\xP@OBJECT@shape[1]{\DN@{shape [#1]}\expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+\ifx\nextii@\relax\DN@{style [#1]}\expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+\ifx\nextii@\relax\DN@{\xP@checkcolor{#1}}\else\DN@{\nextii@\xyFN@\OBJECT@}\fi
+\else\expandafter\addtotoks@\expandafter{\nextii@}\DN@{\xyFN@\OBJECT@}\fi \next@}
+\newcommand*\xP@checkcolor[1]{\@ifundefined{\string\color@\detokenize{#1}}{\OBJECT@shapei[#1]}{\xP@append\toks@{\noexpand\xP@color{{\detokenize{#1}}}}\xyFN@\OBJECT@
+}}
+\newcommand*\xP@color[1]{\def\preStyle@@{\addtostyletoks@{\bgroup\xP@protectedcolor#1}}\def\postStyle@@{\addtostyletoks@{\egroup}}\modXYstyle@
+}
+\@ifdefinable\xP@protectedcolor\relax
+\protected\def\xP@protectedcolor{\@ifundefined{color}\xP@pdfcolor\color
+}
+\@ifdefinable\xP@pdfcolor\relax
+\def\xP@pdfcolor[#1]#2{\edef\@tempa{#1}\ifx\@tempa\xP@gray
+\DN@{\xP@graycolor{#2}}\else\ifx\@tempa\xP@rgb
+\DN@{\xP@rgbcolor#2@}\else\ifx\@tempa\xP@cmyk
+\DN@{\xP@cmykcolor#2@}\fi\fi\fi
+\aftergroup\xP@resetcolor
+\next@
+}\newcommand*\xP@graycolor[1]{\xP@setcolor{#1}gG}\@ifdefinable\xP@rgbcolor\relax
+\def\xP@rgbcolor#1,#2,#3@{\xP@setcolor{#1 #2 #3}{rg}{RG}}
+\@ifdefinable\xP@cmykcolor\relax
+\def\xP@cmykcolor#1,#2,#3,#4@{\xP@setcolor{#1 #2 #3 #4}kK}
+\newcommand*\xP@newcolor[4]{\expandafter\let\expandafter\next@\csname shape [#1]\endcsname
+\ifx\next@\relax
+\@ifundefined{\string\color@#1}\relax
+{\xP@warning{xypdf}{The color `#1' is overridden by \string#4}}\edef\next@{\noexpand\newxystyle{#1}{\noexpand\xP@unnamedcolor{#2}{#3}}}\else
+\DN@{}\fi
+\next@\relax}
+\newcommand*\xP@unnamedcolor[2]{\xP@color{[#2]{#1}}}
+\newcommand\xP@definecrayolacolor[2]{\xP@newcolor{#1}{#2}{cmyk}\UseCrayolaColors}\newcommand*\xP@installCrayolaColors{\xP@definecrayolacolor{GreenYellow}{.15,0,.69,0}\xP@definecrayolacolor{Yellow}{0,0,1,0}\xP@definecrayolacolor{Goldenrod}{0,.1,.84,0}\xP@definecrayolacolor{Dandelion}{0,.29,.84,0}\xP@definecrayolacolor{Apricot}{0,.32,.52,0}\xP@definecrayolacolor{Peach}{0,.5,.7,0}\xP@definecrayolacolor{Melon}{0,.46,.5,0}\xP@definecrayolacolor{YellowOrange}{0,.42,1,0}\xP@definecrayolacolor{Orange}{0,.61,.87,0}\xP@definecrayolacolor{BurntOrange}{0,.51,1,0}\xP@definecrayolacolor{Bittersweet}{0,.75,1,.24}\xP@definecrayolacolor{RedOrange}{0,.77,.87,0}\xP@definecrayolacolor{Mahogany}{0,.85,.87,.35}\xP@definecrayolacolor{Maroon}{0,.87,.68,.32}\xP@definecrayolacolor{BrickRed}{0,.89,.94,.28}\xP@definecrayolacolor{Red}{0,1,1,0}\xP@definecrayolacolor{OrangeRed}{0,1,.5,0}\xP@definecrayolacolor{RubineRed}{0,1,.13,0}\xP@definecrayolacolor{WildStrawberry}{0,.96,.39,0}\xP@definecrayolacolor{Salmon}{0,.53,.38,0}\xP@definecrayolacolor{CarnationPink}{0,.63,0,0}\xP@definecrayolacolor{Magenta}{0,1,0,0}\xP@definecrayolacolor{VioletRed}{0,.81,0,0}\xP@definecrayolacolor{Rhodamine}{0,.82,0,0}\xP@definecrayolacolor{Mulberry}{.34,.9,0,.02}\xP@definecrayolacolor{RedViolet}{.07,.9,0,.34}\xP@definecrayolacolor{Fuchsia}{.47,.91,0,.08}\xP@definecrayolacolor{Lavender}{0,.48,0,0}\xP@definecrayolacolor{Thistle}{.12,.59,0,0}\xP@definecrayolacolor{Orchid}{.32,.64,0,0}\xP@definecrayolacolor{DarkOrchid}{.4,.8,.2,0}\xP@definecrayolacolor{Purple}{.45,.86,0,0}\xP@definecrayolacolor{Plum}{.5,1,0,0}\xP@definecrayolacolor{Violet}{.79,.88,0,0}\xP@definecrayolacolor{RoyalPurple}{.75,.9,0,0}\xP@definecrayolacolor{BlueViolet}{.86,.91,0,.04}\xP@definecrayolacolor{Periwinkle}{.57,.55,0,0}\xP@definecrayolacolor{CadetBlue}{.62,.57,.23,0}\xP@definecrayolacolor{CornflowerBlue}{.65,.13,0,0}\xP@definecrayolacolor{MidnightBlue}{.98,.13,0,.43}\xP@definecrayolacolor{NavyBlue}{.94,.54,0,0}\xP@definecrayolacolor{RoyalBlue}{1,.5,0,0}\xP@definecrayolacolor{Blue}{1,1,0,0}\xP@definecrayolacolor{Cerulean}{.94,.11,0,0}\xP@definecrayolacolor{Cyan}{1,0,0,0}\xP@definecrayolacolor{ProcessBlue}{.96,0,0,0}\xP@definecrayolacolor{SkyBlue}{.62,0,.12,0}\xP@definecrayolacolor{Turquoise}{.85,0,.2,0}\xP@definecrayolacolor{TealBlue}{.86,0,.34,.02}\xP@definecrayolacolor{Aquamarine}{.82,0,.3,0}\xP@definecrayolacolor{BlueGreen}{.85,0,.33,0}\xP@definecrayolacolor{Emerald}{1,0,.5,0}\xP@definecrayolacolor{JungleGreen}{.99,0,.52,0}\xP@definecrayolacolor{SeaGreen}{.69,0,.5,0}\xP@definecrayolacolor{Green}{1,0,1,0}\xP@definecrayolacolor{ForestGreen}{.91,0,.88,.12}\xP@definecrayolacolor{PineGreen}{.92,0,.59,.25}\xP@definecrayolacolor{LimeGreen}{.5,0,1,0}\xP@definecrayolacolor{YellowGreen}{.44,0,.74,0}\xP@definecrayolacolor{SpringGreen}{.26,0,.76,0}\xP@definecrayolacolor{OliveGreen}{.64,0,.95,.4}\xP@definecrayolacolor{RawSienna}{0,.72,1,.45}\xP@definecrayolacolor{Sepia}{0,.83,1,.7}\xP@definecrayolacolor{Brown}{0,.81,1,.6}\xP@definecrayolacolor{Tan}{.14,.42,.56,0}\xP@definecrayolacolor{Gray}{0,0,0,.5}\xP@definecrayolacolor{Black}{0,0,0,1}\xP@definecrayolacolor{White}{0,0,0,0}}
+\xywithoption{crayon}{\xP@installCrayolaColors
+\renewcommand*\installCrayolaColors@{}}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-co.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex
new file mode 100644
index 0000000000..310d6a8ce6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex
@@ -0,0 +1,1187 @@
+%%
+%% This is file `xypdf-cu.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `curve')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~muellner>
+%% --------------------------------------------------------------------------
+%%
+%% This program is free software: you can redistribute it and/or modify it
+%% under the terms of the GNU General Public License as published by the Free
+%% Software Foundation, either version 2 of the License, or (at your option)
+%% any later version.
+%%
+%% This program is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf
+%% package may be distributed and/or modified under the conditions of the
+%% GNU General Public License as published by the Free Software Foundation,
+%% either version 2 of the License, or (at your option) any later version.
+%% The distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% The xypdf package improves the output quality of the Xy-pic package when
+%% PDF documents are generated. It produces generic PDF code for graphical
+%% elements like lines, curves and circles instead of approximating these
+%% elements with glyphs in special fonts as the original Xy-pic package does.
+%% The xypdf package works with both TeX and LaTeX in the occurrences of
+%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-cu@loaded\endcsname\@empty
+\newcommand*\xP@tempvar[2]{\@ifdefinable#1\relax
+\let#1#2}
+\newcommand*\xP@oldornewdimen[2]{\@ifundefined{#2}{\xP@newdimen#1}{\expandafter\xP@tempvar\expandafter#1\csname#2\endcsname}}
+\xP@tempvar\xP@bigdim\quotPTK@
+\xP@tempvar\xP@parA\L@p
+\xP@tempvar\xP@velA\U@p
+\xP@tempvar\xP@parB\R@p
+\xP@tempvar\xP@velB\D@p
+\xP@tempvar\xP@parC\X@origin
+\xP@tempvar\xP@velC\Y@origin
+\xP@tempvar\xP@parD\X@xbase
+\xP@tempvar\xP@velD\Y@xbase
+\xP@tempvar\xP@parE\X@ybase
+\xP@tempvar\xP@velE\Y@ybase
+\xP@tempvar\xP@lenA\X@min
+\xP@tempvar\xP@lenB\Y@min
+\xP@tempvar\xP@partlen\X@max
+\xP@tempvar\xP@oldpartlen\Y@max
+\xP@tempvar\xP@tolerance\almostz@
+\xP@tempvar\xP@A\L@p
+\xP@tempvar\xP@B\U@p
+\xP@tempvar\xP@C\R@p
+\xP@tempvar\xP@D\D@p
+\xP@tempvar\xP@E\X@origin
+\xP@tempvar\xP@F\Y@origin
+\xP@tempvar\xP@G\X@xbase
+\xP@tempvar\xP@H\Y@xbase
+\xP@tempvar\xP@I\X@ybase
+\xP@tempvar\xP@J\Y@ybase
+\xP@tempvar\xP@K\X@min
+\xP@tempvar\xP@L\Y@min
+\xP@tempvar\xP@fa\X@max
+\xP@tempvar\xP@fd\Y@max
+\xP@tempvar\xP@tm\almostz@
+\xP@tempvar\xP@xm\K@dXdY
+\xP@tempvar\xP@ym\K@dYdX
+\xP@tempvar\xP@off\splineval@
+\xP@tempvar\xP@ta\splinedepth@
+\xP@tempvar\xP@tb\splinetol@
+\xP@tempvar\xP@tc\splinelength@
+\xP@tempvar\xP@M\L@
+\@tempcnta\count11\relax
+\xP@oldornewdimen\xP@oldobj{normallineskiplimit}
+\xP@oldornewdimen\xP@Tax{@savsk}
+\xP@oldornewdimen\xP@Tay{lower@bound}
+\xP@oldornewdimen\xP@Tdx{upper@bound}
+\xP@oldornewdimen\xP@Tdy{leftmargin}
+\xP@oldornewdimen\xP@Tmx{rightmargin}
+\xP@oldornewdimen\xP@Tmy{listparindent}
+\xP@oldornewdimen\xP@xa{itemindent}
+\xP@oldornewdimen\xP@ya{labelwidth}
+\xP@oldornewdimen\xP@xb{labelsep}
+\xP@oldornewdimen\xP@yb{linewidth}
+\xP@oldornewdimen\xP@xc{@totalleftmargin}
+\xP@oldornewdimen\xP@yc{leftmargini}
+\xP@oldornewdimen\xP@xd{leftmarginii}
+\xP@oldornewdimen\xP@yd{leftmarginiii}
+\count11\@tempcnta
+\xP@tempvar\xP@a\X@ybase
+\xP@tempvar\xP@b\Y@ybase
+\xP@tempvar\xP@c\X@min
+\xP@tempvar\xP@valA\Y@min
+\xP@tempvar\xP@valB\X@max
+\xP@tempvar\xP@devA\Y@max
+\xP@tempvar\xP@devB\almostz@
+\xP@tempvar\xP@ti\K@dXdY
+\xP@tempvar\xP@tip\K@dYdX
+\xP@tempvar\xP@sa\xP@Tax
+\xP@tempvar\xP@sb\xP@Tay
+\xP@tempvar\xP@sc\xP@Tdx
+\xP@tempvar\xP@Ab\xP@Tdy
+\xP@tempvar\xP@AAb\xP@Tmx
+\xP@tempvar\xP@Aba\xP@Tmy
+\xP@tempvar\xP@Abb\xP@xa
+\xP@tempvar\xP@Abc\xP@ya
+\xP@tempvar\xP@AAba\xP@xb
+\xP@tempvar\xP@AAbb\xP@yb
+\xP@tempvar\xP@AAbc\xP@xc
+\xP@tempvar\xP@dta\xP@yc
+\xP@tempvar\xP@dtb\xP@xd
+\xP@tempvar\xP@dtc\xP@yd
+\xP@tempvar\xP@temppar\X@origin
+\xP@tempvar\xP@tempvel\Y@origin
+\xP@tempvar\xP@posX\X@xbase
+\xP@tempvar\xP@posY\Y@xbase
+\xP@tempvar\xP@oldpar\X@ybase
+\xP@tempvar\xP@lastpar\Y@ybase
+\xP@tempvar\xP@tempvel@\X@min
+\xP@tempvar\xP@parinc\Y@min
+\xP@tempvar\xP@squiglen\almostz@
+\xP@tempvar\xP@scaleone\K@
+\xP@tempvar\xP@scaletwo\KK@
+\xP@tempvar\xP@scalethree\Direction
+\xP@hook{curve}{splinesolid@}
+\newcommand*\xP@splinesolid@{\xP@spline\xP@setsolidpat}
+\xP@hook{curve}{splinedashed@}
+\newcommand*\xP@splinedashed@{\xP@spline\xP@setdashpat}
+\xP@hook{curve}{splinedotted@}
+\newcommand*\xP@splinedotted@{\xP@spline\xP@setdottedpat}
+\newcommand*\xP@spline[1]{\readsplineparams@
+\ifdim\dimen5<\dimen7
+\xP@preparespline
+\ifdim\@tempdimb>\z@
+#1\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\L@c\U@c\xP@coor\R@c\D@c\xP@coor\X@c\Y@c c}\xP@savec
+\fi
+\fi
+}
+\newcommand*\xP@preparespline{\ifx\splineinfo@\squineinfo@
+\L@c\dimexpr(\X@p+2\A@)/3\relax
+\U@c\dimexpr(\Y@p+2\B@)/3\relax
+\R@c\dimexpr(\X@c+2\A@)/3\relax
+\D@c\dimexpr(\Y@c+2\B@)/3\relax
+\fi
+\xP@shavespline
+\xP@bezierlength
+}
+\newcommand*\xP@inibigdim{\xP@bigdim5040pt}
+\newcommand*\xP@shavespline{\xP@shaveprec{\dimen5*\xP@bigdim/\p@}{\dimen7*\xP@bigdim/\p@}}
+\newcommand*\xP@shaveprec[2]{{\xP@inibigdim
+\A@\dimexpr#1\relax
+\B@\dimexpr#2\relax
+\@tempswatrue
+\ifdim\A@=\z@\ifdim\B@=\xP@bigdim\@tempswafalse\fi\fi
+\if@tempswa
+\L@p\dimexpr\L@c-\X@p\relax
+\U@p\dimexpr\R@c-\L@p-\L@c\relax
+\R@p\dimexpr\X@c-3\R@c+3\L@c-\X@p\relax
+\D@p\dimexpr\U@c-\Y@p\relax
+\X@min\dimexpr\D@c-\D@p-\U@c\relax
+\Y@min\dimexpr\Y@c-3\D@c+3\U@c-\Y@p\relax
+\xdef\@gtempa{\X@p\the\dimexpr\X@p+(3\L@p+(3\U@p+\R@p*\A@/\xP@bigdim)*\A@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\Y@p\the\dimexpr\Y@p+(3\D@p+(3\X@min+\Y@min*\A@/\xP@bigdim)*\A@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\L@c\the\dimexpr\X@p+(2\A@+\B@)*\L@p/\xP@bigdim+((\A@+2\B@)*\U@p/\xP@bigdim+\R@p*\A@/\xP@bigdim*\B@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\U@c\the\dimexpr\Y@p+(2\A@+\B@)*\D@p/\xP@bigdim+((\A@+2\B@)*\X@min/\xP@bigdim+\Y@min*\A@/\xP@bigdim*\B@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\R@c\the\dimexpr\X@p+(2\B@+\A@)*\L@p/\xP@bigdim+((\B@+2\A@)*\U@p/\xP@bigdim+\R@p*\B@/\xP@bigdim*\A@/\xP@bigdim)*\B@/\xP@bigdim\relax
+\D@c\the\dimexpr\Y@p+(2\B@+\A@)*\D@p/\xP@bigdim+((\B@+2\A@)*\X@min/\xP@bigdim+\Y@min*\B@/\xP@bigdim*\A@/\xP@bigdim)*\B@/\xP@bigdim\relax
+\X@c\the\dimexpr\X@p+(3\L@p+(3\U@p+\R@p*\B@/\xP@bigdim)*\B@/\xP@bigdim)*\B@/\xP@bigdim\relax
+\Y@c\the\dimexpr\Y@p+(3\D@p+(3\X@min+\Y@min*\B@/\xP@bigdim)*\B@/\xP@bigdim)*\B@/\xP@bigdim\relax}\else
+\global\let\@gtempa\relax
+\fi
+}\@gtempa
+}
+\newcommand*\xP@bezierlength{{\xP@inibigdim
+\@tempdimb\z@
+\xP@parA\z@
+\xP@velocity\z@\xP@velA
+\xP@parC.5\xP@bigdim
+\xP@velocity\xP@parC\xP@velC
+\xP@velocity\xP@bigdim\xP@velE
+\xP@oldpartlen\dimexpr(\xP@velA+4\xP@velC+\xP@velE)/6\relax
+\xP@tolerance\xP@max{1sp}{\dimexpr\xP@oldpartlen/100000\relax}\xP@arclength\xP@parC\xP@velC\xP@bigdim\xP@velE\xP@oldpartlen
+\global\dimen@i\@tempdimb
+}\@tempdimb\dimen@i
+}
+\newcommand*\xP@velocity[2]{{\@tempdima\dimexpr#1\relax
+\xP@tangent
+\global\dimen@i\@tempdimb
+}#2\dimen@i
+}
+\newcommand*\xP@tangent{\d@X3\xP@precbeziertan\X@p\L@c\R@c\X@c\@tempdima
+\d@Y3\xP@precbeziertan\Y@p\U@c\D@c\Y@c\@tempdima
+\xP@veclen
+}
+\newcommand*\xP@tangentvec[1]{{\@tempdima#1\relax
+\xP@tangent
+\ifdim\@tempdimb=\z@
+\L@p\dimexpr\X@c-\X@p+(\L@c-\R@c)*3\relax
+\U@p\dimexpr\Y@c-\Y@p+(\U@c-\D@c)*3\relax
+\d@X\dimexpr\L@p*\@tempdima/\xP@bigdim+(\X@p-2\L@c+\R@c)\relax
+\d@Y\dimexpr\U@p*\@tempdima/\xP@bigdim+(\Y@p-2\U@c+\D@c)\relax
+\xP@veclen
+\ifdim\@tempdimb=\z@
+\d@X\L@p
+\d@Y\U@p
+\xP@veclen
+\ifdim\@tempdimb=\z@
+\xP@warning{xypdf}{Cannot determine a tangent vector to a curve}\@tempdimb\p@
+\fi
+\fi
+\fi
+\global\dimen@i\d@X
+\global\dimen3\d@Y
+\global\dimen5\@tempdimb
+}\d@X\dimen@i
+\d@Y\dimen3\relax
+\@tempdimb\dimen5\relax
+}
+\newcommand*\xP@arclength[5]{\xP@parE#3\xP@velE#4\xP@parC#1\xP@velC#2\xP@oldpartlen#5\xP@parB\dimexpr(\xP@parC+\xP@parA)/2\relax
+\xP@velocity\xP@parB\xP@velB
+\xP@parD\dimexpr(\xP@parE+\xP@parC)/2\relax
+\xP@velocity\xP@parD\xP@velD
+\xP@lenA
+\dimexpr(\xP@velA+4\xP@velB+\xP@velC)/6*(\xP@parC-\xP@parA)/\xP@bigdim\relax
+\xP@lenB
+\dimexpr(\xP@velC+4\xP@velD+\xP@velE)/6*(\xP@parE-\xP@parC)/\xP@bigdim\relax
+\xP@partlen\dimexpr\xP@lenA+\xP@lenB\relax
+{\@tempdima\dimexpr\xP@oldpartlen-\xP@partlen\relax
+\expandafter}\ifdim\ifdim\@tempdima<\z@-\fi\@tempdima>\xP@tolerance
+\edef\next@{\noexpand\xP@arclength\xP@parB\xP@velB\xP@parC\xP@velC\xP@lenA
+\noexpand\xP@arclength{\the\xP@parD}{\the\xP@velD}{\the\xP@parE}{\the\xP@velE}{\the\xP@lenB}}\else
+\xP@parA\xP@parE
+\xP@velA\xP@velE
+\advance\@tempdimb\xP@partlen
+\DN@{}\fi
+\next@
+}
+\xP@hook{curve}{@crv@}
+\newcommand*\xP@@crv@[2]{\DN@{#1#2}\ifx\next@\@empty \edef\next@{\crv@defaultshape}\ifx\bstartPLACE@\@empty\xdef\crvSTYLE@@{{\crv@defaultshape}}\fi
+\else
+\ifx\bstartPLACE@\@empty\gdef\crvSTYLE@@{#1{#2}}\fi
+\fi
+\ifx\next@\@empty\crv@noobject \DN@{\crv@{}{\xy@@crvaddstack@}}\else\def\tmp@{-}\ifx\next@\tmp@ \DN@{\crv@{}{\xy@@crvaddstack@}}\else\def\tmp@{=}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{=}}}\else\def\tmp@{2-}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{2.}}}\else\def\tmp@{3-}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{3.}}}\else\def\tmp@{--}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@specialtemplate@{--}}\else\def\tmp@{==}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}\else\def\tmp@{2--}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}\else\def\tmp@{3--}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{--}}}\else\def\tmp@{.}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@specialtemplate@{.}}\else\def\tmp@{:}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}\else\def\tmp@{2.}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}\else\def\tmp@{3.}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{.}}}\else\def\tmp@{~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{~}}}\else\def\tmp@{2~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{~}}}\else\def\tmp@{3~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{~}}}\else\def\tmp@{~~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{~~}}}\else\def\tmp@{2~~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{~~}}}\else\def\tmp@{3~~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{~~}}}\else\def\tmp@{..}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@specialtemplate@{.}}\else
+\DN@{\expandafter\crv@\crv@othertemplate{\dir#1{#2}}}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\next@}
+\xP@hook{curve}{xysplinespecialcases@}
+\newcommand*\xP@xysplinespecialcases@{\ifx\@empty\xycrvdrop@
+\ifx\@empty\xycrvconn@\DN@{\splinesolid@}\else\DN@{ \dir{-}}\ifx\next@\xycrvconn@\DN@{\splinesolid@}\else\DN@{ \dir2{-}}\ifx\next@\xycrvconn@\DN@{\splinedoubled@}\else\DN@{ \dir{=}}\ifx\next@\xycrvconn@\DN@{\splineribboned@}\else\DN@{ \dir{2.}}\ifx\next@\xycrvconn@\DN@{\splinedoubled@}\else\DN@{ \dir3{-}}\ifx\next@\xycrvconn@\DN@{\splinetrebled@}\else\DN@{ \dir{3.}}\ifx\next@\xycrvconn@\DN@{\splinetrebled@}\else\DN@{ \dir{--}}\ifx\next@\xycrvconn@\DN@{\splinedashed@}\else\DN@{ \dir{.}}\ifx\next@\xycrvconn@\DN@{\splinedotted@}\else\DN@{ \dir{:}}\ifx\next@\xycrvconn@\DN@{\splinedbldotted@}\else\DN@{ \dir2{.}}\ifx\next@\xycrvconn@\DN@{\splinedbldotted@}\else\DN@{ \dir3{.}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrbldotted}\else\DN@{ \dir2{--}}\ifx\next@\xycrvconn@\DN@{\xP@splinedbldashed}\else\DN@{ \dir3{--}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrbldashed}\else\DN@{ \dir{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinesquiggled}\else\DN@{ \dir2{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinedblsquiggled}\else\DN@{ \dir3{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrblsquiggled}\else\DN@{ \dir{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokensquiggled}\else\DN@{ \dir2{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokendblsquiggled}\else\DN@{ \dir3{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokentrblsquiggled}\else\ifdim\splinetol@>\z@\else\splinedefaulttol@\fi
+\DN@{\splineset@@}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+\else
+\DN@{\splineset@@}\fi
+\ifInvisible@\DN@{}\fi
+\next@
+}
+\xP@hook{curve}{splinedoubled@}
+\newcommand*\xP@splinedoubled@{\xP@checkspline\xP@splinemultsolid\xP@doublestroke}
+\xP@hook{curve}{splineribboned@}
+\@ifdefinable\xP@splineribboned@\relax
+\let\xP@splineribboned@\xP@splinedoubled@
+\xP@hook{curve}{splinetrebled@}
+\newcommand*\xP@splinetrebled@{\xP@checkspline\xP@splinemultsolid\xP@trblstroke}
+\newcommand*\xP@doublestroke{\xydashh@/2,-\xydashh@/2}
+\newcommand*\xP@trblstroke{\xydashh@,\z@,-\xydashh@}
+\newcommand*\xP@checkspline[1]{\readsplineparams@
+\let\next@\@gobble
+\ifdim\dimen5<\dimen7
+\xP@preparespline
+\ifdim\@tempdimb>\z@
+\ifdim\@tempdimb<2\dimexpr\xP@preclw\relax
+\let\next@\xP@splinemultsolid
+\else
+\let\next@#1\fi
+\fi
+\fi
+\next@
+}
+\newcommand*\xP@splinemultsolid[1]{{\xP@inibigdim
+\@temptokena{}\xP@setsolidpat
+\@for\@tempa:={#1}\do{\xP@paintsolid\z@\xP@bigdim}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintsolid[2]{{\xP@savepts
+\xP@a#1\relax
+\xP@c#2\relax
+\xP@movetotrue
+\xP@paintsolid@
+\xdef\@gtempa{\the\@temptokena}}\@temptokena\expandafter{\@gtempa}}
+\newcommand*\xP@paintsolid@{\xP@b\xP@c
+\xP@off\dimexpr\@tempa\relax
+\ifdim\xP@off=\z@
+\xP@shaveprec\xP@a\xP@c
+\else
+\loop
+\xP@restorepts
+\xP@offsetsegment
+\xP@testoffset
+\unless\ifxP@offsetok
+\xP@b\dimexpr\xP@a+(\xP@b-\xP@a)*7/10\relax
+\repeat
+\fi
+\xP@append\@temptokena{\ifxP@moveto\xP@coor\X@p\Y@p m \fi
+\xP@coor\L@c\U@c\xP@coor\R@c\D@c\xP@coor\X@c\Y@c c }\xP@movetofalse
+\ifdim\xP@b<\xP@c\relax
+\xP@a\xP@b
+\expandafter\xP@paintsolid@
+\fi
+}
+\@ifdefinable\ifxP@moveto\relax
+\@ifdefinable\xP@movetotrue\relax
+\@ifdefinable\xP@movetofalse\relax
+\newif\ifxP@moveto
+\newcommand*\xP@savepts{\xP@xa\X@p
+\xP@ya\Y@p
+\xP@xb\L@c
+\xP@yb\U@c
+\xP@xc\R@c
+\xP@yc\D@c
+\xP@xd\X@c
+\xP@yd\Y@c
+}
+\newcommand*\xP@restorepts{\X@p\xP@xa
+\Y@p\xP@ya
+\L@c\xP@xb
+\U@c\xP@yb
+\R@c\xP@xc
+\D@c\xP@yc
+\X@c\xP@xd
+\Y@c\xP@yd
+}
+\@ifdefinable\xP@tmx\relax
+\@ifdefinable\xP@tmy\relax
+\newcommand*\xP@Tmxy{*\xP@Tmx/\xP@Tmy}
+\newcommand*\xP@Tmyx{*\xP@Tmy/\xP@Tmx}
+\newcommand*\xP@Tmzero{*\z@}
+\newcommand*\xP@offsetsegment{{\xP@tangentvec\xP@a
+\xP@xa\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@a/8+\d@Y*\xP@off/\@tempdimb\relax
+\xP@ya\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@a/8-\d@X*\xP@off/\@tempdimb\relax
+\xP@scaleT
+\xP@Tax\d@X
+\xP@Tay\d@Y
+\xP@E\@tempdimb
+\xP@tangentvec\xP@b
+\xP@xd\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@b/8+\d@Y*\xP@off/\@tempdimb\relax
+\xP@yd\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@b/8-\d@X*\xP@off/\@tempdimb\relax
+\xP@scaleT
+\xP@Tdx-\d@X
+\xP@Tdy-\d@Y
+\xP@F\@tempdimb
+\xP@M\z@
+\xP@Max\xP@M\xP@Tdx
+\xP@Max\xP@M\xP@Tdy
+\xP@L\dimexpr\xP@Tax*\xP@Tdx/\xP@M+\xP@Tay*\xP@Tdy/\xP@M\relax
+\xP@tm\dimexpr(\xP@a+\xP@b)/2\relax
+\ifdim\xP@L>\dimexpr\xP@E*\xP@F/\xP@M*49/50\relax
+\d@X-\dimexpr\xP@Tay+\xP@Tdy\relax
+\d@Y\dimexpr\xP@Tax+\xP@Tdx\relax
+\xP@veclen
+\xP@A\dimexpr\X@c-\X@p\relax
+\xP@B\dimexpr\Y@c-\Y@p\relax
+\xP@M\z@
+\xP@Max\xP@M\xP@A
+\xP@Max\xP@M\xP@B
+\ifdim\xP@M=\z@
+\xP@A\dimexpr\R@c-\L@c\relax
+\xP@B\dimexpr\D@c-\U@c\relax
+\xP@Max\xP@M\xP@A
+\xP@Max\xP@M\xP@B
+\fi
+\xP@M\dimexpr\d@X*\xP@A/\xP@M+\d@Y*\xP@B/\xP@M\relax
+\ifdim\xP@M<\z@
+\multiply\d@X\m@ne
+\multiply\d@Y\m@ne
+\fi
+\else
+\xP@tangentvec\xP@tm
+\fi
+\xP@xm\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@tm+8\d@Y*\xP@off/\@tempdimb\relax
+\xP@ym\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@tm-8\d@X*\xP@off/\@tempdimb\relax
+\xP@Tmx\d@X
+\xP@Tmy\d@Y
+\xP@ifabsless\xP@Tmy\xP@Tmx
+\let\xP@tmy\xP@Tmyx
+\let\xP@tmx\@empty
+\else
+\ifdim\xP@Tmy=\z@
+\let\xP@tmx\xP@Tmzero
+\let\xP@tmy\xP@Tmzero
+\else
+\let\xP@tmy\@empty
+\let\xP@tmx\xP@Tmxy
+\fi
+\fi
+\xP@fa\p@
+\xP@fd\p@
+\xP@tm\p@
+\count@\z@
+\loop
+\xP@offsetpoints
+\@tempswafalse
+\ifnum10>\count@
+\xP@objfun\xP@oldobj
+\ifdim\xP@oldobj>\xP@maxobjfun\relax\@tempswatrue\fi
+\fi
+\if@tempswa
+\xP@offsetloop
+\repeat
+\xdef\@gtempa{\X@p\the\xP@xa\Y@p\the\xP@ya
+\L@c\the\xP@xb\U@c\the\xP@yb\R@c\the\xP@xc\D@c\the\xP@yc
+\X@c\the\xP@xd\Y@c\the\xP@yd\relax}}\@gtempa
+}
+\newcommand*\xP@scaleT{\xP@B6.28\xP@off
+\xP@abs\xP@B
+\xP@C\dimexpr\d@X*\xP@B/\@tempdimb\relax
+\xP@D\dimexpr\d@Y*\xP@B/\@tempdimb\relax
+\xP@A\dimexpr\xP@b-\xP@a\relax
+\d@X\dimexpr\xP@C+\d@X*\xP@A/\xP@bigdim\relax
+\d@Y\dimexpr\xP@D+\d@Y*\xP@A/\xP@bigdim\relax
+\@tempdimb\dimexpr\xP@B+\@tempdimb*\xP@A/\xP@bigdim\relax
+}
+\newcommand*\xP@offsetloop{\xP@C\dimexpr\xP@C/2\relax
+\xP@G\dimexpr\xP@G/2\relax
+\xP@ta\dimexpr2\p@-\xP@tm\relax
+\xP@tb\dimexpr\xP@tm*\xP@ta/\p@\relax
+\xP@A\dimexpr\xP@Tax*\xP@tb/\p@*\xP@ta/\p@\relax
+\xP@B\dimexpr\xP@Tdx*\xP@tb/\p@*\xP@tm/\p@\relax
+\xP@E\dimexpr\xP@Tay*\xP@tb/\p@*\xP@ta/\p@\relax
+\xP@F\dimexpr\xP@Tdy*\xP@tb/\p@*\xP@tm/\p@\relax
+\xP@tb\dimexpr2\p@-3\xP@tm\relax
+\xP@tc\dimexpr\xP@tb+2\p@\relax
+\xP@I\dimexpr(2\xP@Tay\xP@tmx-2\xP@Tax\xP@tmy)*\xP@tb/\p@*\xP@ta/\p@\relax
+\xP@J\dimexpr(2\xP@Tdy\xP@tmx-2\xP@Tdx\xP@tmy)*\xP@tc/\p@*\xP@tm/\p@\relax
+\xP@K\dimexpr((\xP@yd-\xP@ya+(\xP@yb-\xP@yc)*3)
+*\xP@tm/\p@+(\xP@yc-2\xP@yb+\xP@ya)*2)*12\xP@tmx
+-((\xP@xd-\xP@xa+(\xP@xb-\xP@xc)*3)
+*\xP@tm/\p@+(\xP@xc-2\xP@xb+\xP@xa)*2)*12\xP@tmy\relax
+\xP@solvelinearsystem
+\ifxP@validsol
+\xP@correctsol
+\ifdim\xP@ta=\z@
+\ifdim\xP@tb=\z@
+\ifdim\xP@tc=\z@
+\xP@validsolfalse
+\fi\fi\fi
+\fi
+\ifxP@validsol
+\else
+\xP@applinsys
+\advance\xP@fa-\xP@ta
+\advance\xP@fd-\xP@tb
+\advance\xP@tm-\xP@tc
+\ifdim\xP@tm<\z@\xP@tm\z@\fi
+\ifdim\xP@tm>2\p@\xP@tm2\p@\fi
+\fi
+\advance\count@\@ne
+}
+\newcommand*\xP@maxsol{3pt}
+\newcommand*\xP@correctsol{\xP@M\z@
+\xP@Max\xP@M\xP@ta
+\xP@Max\xP@M\xP@tb
+\xP@Max\xP@M\xP@tc
+\ifdim\xP@M>\xP@maxsol
+\xP@ta\dimexpr\xP@maxsol*\xP@ta/\xP@M\relax
+\xP@tb\dimexpr\xP@maxsol*\xP@tb/\xP@M\relax
+\xP@tc\dimexpr\xP@maxsol*\xP@tc/\xP@M\relax
+\fi
+\advance\xP@fa-\xP@ta
+\advance\xP@fd-\xP@tb
+\xP@M\xP@tm
+\advance\xP@tm-\xP@tc
+\ifdim\xP@tm<\z@\xP@tm\z@\fi
+\ifdim\xP@tm>2\p@\xP@tm2\p@\fi
+{\xP@offsetpoints
+\xP@objfun\xP@M
+\expandafter}\ifdim\xP@M>\xP@oldobj
+\advance\xP@fa\xP@ta
+\advance\xP@fd\xP@tb
+\xP@tm\xP@M
+\xP@validsolfalse
+\fi
+}
+\newcommand*\xP@objfun[1]{\xP@D\dimexpr\xP@bezierpoly\xP@xa\xP@xb\xP@xc\xP@xd\xP@tm-\xP@xm\relax
+\xP@H\dimexpr\xP@bezierpoly\xP@ya\xP@yb\xP@yc\xP@yd\xP@tm-\xP@ym\relax
+\xP@C\xP@beziertan\xP@xa\xP@xb\xP@xc\xP@xd\xP@tm
+\xP@G\xP@beziertan\xP@ya\xP@yb\xP@yc\xP@yd\xP@tm
+\xP@L\dimexpr\xP@G\xP@tmx-\xP@C\xP@tmy\relax
+#1\z@
+\xP@Max#1\xP@D
+\xP@Max#1\xP@H
+\xP@Max#1\xP@L
+#1\ifdim#1>4843165sp
+\maxdimen
+\else
+\dimexpr\xP@D*\xP@D/\p@+\xP@H*\xP@H/\p@+\xP@L*\xP@L/\p@\relax
+\fi
+}
+\newcommand*\xP@offsetpoints{\xP@xb\dimexpr\xP@xa+\xP@Tax*\xP@fa/196608\relax
+\xP@yb\dimexpr\xP@ya+\xP@Tay*\xP@fa/196608\relax
+\xP@xc\dimexpr\xP@xd+\xP@Tdx*\xP@fd/196608\relax
+\xP@yc\dimexpr\xP@yd+\xP@Tdy*\xP@fd/196608\relax
+}
+\newcommand*\xP@bezierpoly[5]{\dimexpr(((#4-#1+(#2-#3)*3)*#5/\p@+(#1-2#2+#3)*6)*#5/\p@+(#2-#1)*12)*#5/\p@
++#1*8\relax
+}
+\newcommand*\xP@precbezierpoly[5]{\dimexpr(((#4-#1+(#2-#3)*3)*2*#5/\xP@bigdim+(#1-2#2+#3)*6)*2*#5/\xP@bigdim
++(#2-#1)*12)*2*#5/\xP@bigdim+#1*8\relax
+}
+\newcommand*\xP@beziertan[5]{\dimexpr((#4-#1+(#2-#3)*3)*3*#5/32768+(#1-2#2+#3)*24)*#5/\p@+(#2-#1)*24\relax
+}
+\newcommand*\xP@precbeziertan[5]{\dimexpr((#4-#1+(#2-#3)*3)*#5/\xP@bigdim+(#1-2#2+#3)*2)*#5/\xP@bigdim
++#2-#1\relax
+}
+\@ifdefinable\xP@varone\relax
+\@ifdefinable\xP@vartwo\relax
+\@ifdefinable\xP@varthree\relax
+\@ifdefinable\ifxP@validsol\relax
+\@ifdefinable\xP@validsoltrue\relax
+\@ifdefinable\xP@validsolfalse\relax
+\newif\ifxP@validsol
+\newcommand*\xP@solvelinearsystem{{\xP@scalerow\xP@A\xP@B\xP@C\xP@D
+\xP@scalerow\xP@E\xP@F\xP@G\xP@H
+\xP@scalerow\xP@I\xP@J\xP@K\xP@L
+\xP@scalecol\xP@A\xP@E\xP@I\xP@scaleone
+\xP@scalecol\xP@B\xP@F\xP@J\xP@scaletwo
+\xP@scalecol\xP@C\xP@G\xP@K\xP@scalethree
+\let\xP@varone\xP@ta
+\let\xP@vartwo\xP@tb
+\let\xP@varthree\xP@tc
+\count@\m@ne
+\@tempcnta\m@ne
+\xP@ifabsless\xP@A\xP@B\@tempcnta\z@\xP@M\xP@B
+\else\xP@M\xP@A\fi
+\xP@ifabsless\xP@M\xP@C\@tempcnta\@ne\xP@M\xP@C\fi
+\xP@ifabsless\xP@M\xP@E\@tempcnta\m@ne\count@\z@\xP@M\xP@E\fi
+\xP@ifabsless\xP@M\xP@F\@tempcnta\z@\count@\z@\xP@M\xP@F\fi
+\xP@ifabsless\xP@M\xP@G\@tempcnta\@ne\count@\z@\xP@M\xP@G\fi
+\xP@ifabsless\xP@M\xP@I\@tempcnta\m@ne\count@\@ne\xP@M\xP@I\fi
+\xP@ifabsless\xP@M\xP@J\@tempcnta\z@\count@\@ne\xP@M\xP@J\fi
+\xP@ifabsless\xP@M\xP@K\@tempcnta\@ne\count@\@ne\fi
+\ifcase\count@
+\xP@swapdim\xP@A\xP@E
+\xP@swapdim\xP@B\xP@F
+\xP@swapdim\xP@C\xP@G
+\xP@swapdim\xP@D\xP@H
+\or
+\xP@swapdim\xP@A\xP@I
+\xP@swapdim\xP@B\xP@J
+\xP@swapdim\xP@C\xP@K
+\xP@swapdim\xP@D\xP@L
+\fi
+\ifcase\@tempcnta
+\xP@swapdim\xP@A\xP@B
+\xP@swapdim\xP@E\xP@F
+\xP@swapdim\xP@I\xP@J
+\let\xP@varone\xP@tb
+\let\xP@vartwo\xP@ta
+\xP@swapnum\xP@scaleone\xP@scaletwo
+\or
+\xP@swapdim\xP@A\xP@C
+\xP@swapdim\xP@E\xP@G
+\xP@swapdim\xP@I\xP@K
+\let\xP@varone\xP@tc
+\let\xP@varthree\xP@ta
+\xP@swapnum\xP@scaleone\xP@scalethree
+\fi
+\multiply\xP@E\m@ne
+\multiply\xP@I\m@ne
+\ifdim\xP@A=\z@
+\else
+\advance\xP@F\dimexpr\xP@B*\xP@E/\xP@A\relax
+\advance\xP@G\dimexpr\xP@C*\xP@E/\xP@A\relax
+\advance\xP@H\dimexpr\xP@D*\xP@E/\xP@A\relax
+\advance\xP@J\dimexpr\xP@B*\xP@I/\xP@A\relax
+\advance\xP@K\dimexpr\xP@C*\xP@I/\xP@A\relax
+\advance\xP@L\dimexpr\xP@D*\xP@I/\xP@A\relax
+\fi
+\count@\m@ne
+\xP@ifabsless\xP@F\xP@G\@tempcnta\z@\xP@M\xP@G
+\else\@tempcnta\m@ne\xP@M\xP@F\fi
+\xP@ifabsless\xP@M\xP@J\@tempcnta\m@ne\count@\z@\xP@M\xP@J\fi
+\xP@ifabsless\xP@M\xP@K\@tempcnta\z@\count@\z@\fi
+\ifnum\count@=\z@
+\xP@swapdim\xP@F\xP@J
+\xP@swapdim\xP@G\xP@K
+\xP@swapdim\xP@H\xP@L
+\fi
+\ifnum\@tempcnta=\z@
+\xP@swapdim\xP@B\xP@C
+\xP@swapdim\xP@F\xP@G
+\xP@swapdim\xP@J\xP@K
+\let\@tempa\xP@varthree
+\let\xP@varthree\xP@vartwo
+\let\xP@vartwo\@tempa
+\xP@swapnum\xP@scaletwo\xP@scalethree
+\fi
+\ifdim\xP@F=\z@
+\else
+\advance\xP@K\dimexpr-\xP@G*\xP@J/\xP@F\relax
+\advance\xP@L\dimexpr-\xP@H*\xP@J/\xP@F\relax
+\fi
+\xP@ifabsless{\dimexpr\xP@L/60\relax}{\dimexpr\xP@K/\xP@scalethree\relax}\xP@validsoltrue
+\xP@varthree\dimexpr\xP@L*(\xP@scalethree*\p@)/\xP@K\relax
+\else
+\xP@validsolfalse
+\fi
+\xP@checkabs{\xP@H/8191}{\xP@F/\xP@scaletwo}\xP@checkabs{\xP@G/\xP@scalethree/136}{\xP@F/\xP@scaletwo}\ifxP@validsol
+\xP@vartwo\dimexpr\xP@H*(\xP@scaletwo*\p@)/\xP@F
+-\xP@varthree*\xP@scaletwo/\xP@scalethree*\xP@G/\xP@F\relax
+\xP@checkabs\xP@vartwo{60pt}\fi
+\xP@checkabs{\xP@D/5461}{\xP@A/\xP@scaleone}\xP@checkabs{\xP@B/\xP@scaletwo/91}{\xP@A/\xP@scaleone}\xP@checkabs{\xP@C/\xP@scalethree/91}{\xP@A/\xP@scaleone}\ifxP@validsol
+\xP@varone\dimexpr\xP@D*(\xP@scaleone*\p@)/\xP@A
+-\xP@vartwo*\xP@scaleone/\xP@scaletwo*\xP@B/\xP@A
+-\xP@varthree*\xP@scaleone/\xP@scalethree*\xP@C/\xP@A\relax
+\xP@checkabs\xP@varone{60pt}\fi
+\xdef\@gtempa{\ifxP@validsol
+\xP@ta\the\xP@ta\relax
+\xP@tb\the\xP@tb\relax
+\xP@tc\the\xP@tc\relax
+\noexpand\xP@validsoltrue
+\else
+\noexpand\xP@validsolfalse
+\fi
+}}\@gtempa
+}
+\newcommand*\xP@scalerow[4]{\xP@M\z@
+\xP@Max\xP@M#1\xP@Max\xP@M#2\xP@Max\xP@M#3\xP@Max\xP@M#4\count@134217727
+\loop
+\divide\xP@M\tw@
+\ifdim\xP@M>\z@
+\divide\count@\tw@
+\repeat
+\advance\count@\@ne
+\multiply#1\count@
+\multiply#2\count@
+\multiply#3\count@
+\multiply#4\count@
+}
+\newcommand*\xP@scalecol[4]{\xP@M\z@
+\xP@Max\xP@M#1\xP@Max\xP@M#2\xP@Max\xP@M#3#416777215
+\loop
+\divide\xP@M\tw@
+\ifdim\xP@M>\z@
+\divide#4\tw@
+\repeat
+\advance#4\@ne
+\multiply#1#4\multiply#2#4\multiply#3#4}
+\newcommand*\xP@checkabs[2]{\xP@ifabsless{\dimexpr#1\relax}{\dimexpr#2\relax}\else\xP@validsolfalse\fi}
+\newcommand*\xP@applinsys{{\xP@applinsys@
+\xP@ta\xP@dta
+\xP@tb\xP@dtb
+\xP@tc\xP@dtc
+\xP@checkapp
+\if@tempswa
+\xP@modobj
+\xP@applinsys@
+\xP@checkapp
+\if@tempswa
+\xP@modsol
+\xP@modobj
+\xP@applinsys@
+\xP@modsol
+\fi
+\fi
+\xdef\@gtempa{\xP@ta\the\xP@ta\relax
+\xP@tb\the\xP@tb\relax
+\xP@tc\the\xP@tc\relax
+}}\@gtempa
+}
+\newcommand*\xP@checkapp{\@tempswatrue
+\ifdim\xP@dta=\z@
+\ifdim\xP@dtb=\z@
+\ifdim\xP@dtc=\z@
+\@tempswafalse
+\fi\fi\fi
+}
+\newcommand*\xP@modobj{\advance\xP@D
+\dimexpr-\xP@A*\xP@dta/\p@-\xP@B*\xP@dtb/\p@-\xP@C*\xP@dtc/\p@\relax
+\advance\xP@H
+\dimexpr-\xP@E*\xP@dta/\p@-\xP@F*\xP@dtb/\p@-\xP@G*\xP@dtc/\p@\relax
+\advance\xP@L
+\dimexpr-\xP@I*\xP@dta/\p@-\xP@J*\xP@dtb/\p@-\xP@K*\xP@dtc/\p@\relax
+}
+\newcommand*\xP@modsol{\advance\xP@ta\xP@dta
+\advance\xP@tb\xP@dtb
+\advance\xP@tc\xP@dtc
+}
+\newcommand*\xP@applinsys@{{\xP@sa\z@
+\xP@Max\xP@sa\xP@A
+\xP@Max\xP@sa\xP@B
+\xP@Max\xP@sa\xP@C
+\xP@Max\xP@sa\xP@E
+\xP@Max\xP@sa\xP@F
+\xP@Max\xP@sa\xP@G
+\xP@Max\xP@sa\xP@I
+\xP@Max\xP@sa\xP@J
+\xP@Max\xP@sa\xP@K
+\xP@sa\ifdim\xP@sa<5460pt\thr@@\xP@sa\else\maxdimen\fi
+\xP@sb\z@
+\xP@Max\xP@sb\xP@D
+\xP@Max\xP@sb\xP@H
+\xP@Max\xP@sb\xP@L
+\ifdim\xP@sb>\z@
+\xP@D\dimexpr\xP@D*\maxdimen/\xP@sb\relax
+\xP@H\dimexpr\xP@H*\maxdimen/\xP@sb\relax
+\xP@L\dimexpr\xP@L*\maxdimen/\xP@sb\relax
+\fi
+\xP@Aba\dimexpr\xP@A*\xP@D/\xP@sa+\xP@E*\xP@H/\xP@sa+\xP@I*\xP@L/\xP@sa\relax
+\xP@Abb\dimexpr\xP@B*\xP@D/\xP@sa+\xP@F*\xP@H/\xP@sa+\xP@J*\xP@L/\xP@sa\relax
+\xP@Abc\dimexpr\xP@C*\xP@D/\xP@sa+\xP@G*\xP@H/\xP@sa+\xP@K*\xP@L/\xP@sa\relax
+\xP@AAba\dimexpr\xP@A*\xP@Aba/\xP@sa+\xP@B*\xP@Abb/\xP@sa
++\xP@C*\xP@Abc/\xP@sa\relax
+\xP@AAbb\dimexpr\xP@E*\xP@Aba/\xP@sa+\xP@F*\xP@Abb/\xP@sa
++\xP@G*\xP@Abc/\xP@sa\relax
+\xP@AAbc\dimexpr\xP@I*\xP@Aba/\xP@sa+\xP@J*\xP@Abb/\xP@sa
++\xP@K*\xP@Abc/\xP@sa\relax
+\xP@sc\z@
+\xP@Max\xP@sc\xP@Aba
+\xP@Max\xP@sc\xP@Abb
+\xP@Max\xP@sc\xP@Abc
+\xP@Max\xP@sc\xP@AAba
+\xP@Max\xP@sc\xP@AAbb
+\xP@Max\xP@sc\xP@AAbc
+\ifdim\xP@sc=\z@
+\xP@AAb\z@
+\else
+\xP@Ab\dimexpr\xP@Aba*\xP@bigdim/\xP@sc*\xP@Aba/\xP@sc
++\xP@Abb*\xP@bigdim/\xP@sc*\xP@Abb/\xP@sc
++\xP@Abc*\xP@bigdim/\xP@sc*\xP@Abc/\xP@sc
+\relax
+\xP@AAb\dimexpr\xP@AAba*\xP@bigdim/\xP@sc*\xP@AAba/\xP@sc
++\xP@AAbb*\xP@bigdim/\xP@sc*\xP@AAbb/\xP@sc
++\xP@AAbc*\xP@bigdim/\xP@sc*\xP@AAbc/\xP@sc
+\relax
+\fi
+\xdef\@gtempa{\ifdim\xP@AAb=\z@
+\xP@dta\z@
+\xP@dtb\z@
+\xP@dtc\z@
+\else
+\xP@dta\the\dimexpr\xP@Aba*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen
+\relax
+\xP@dtb\the\dimexpr\xP@Abb*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen
+\relax
+\xP@dtc\the\dimexpr\xP@Abc*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen
+\relax
+\fi
+}}\@gtempa
+}
+\@ifdefinable\ifxP@offsetok\relax
+\@ifdefinable\xP@offsetoktrue\relax
+\@ifdefinable\xP@offsetokfalse\relax
+\newif\ifxP@offsetok
+\newcommand*\xP@maxdev{.1pt}
+\newcommand*\xP@maxobjfun{.005pt}
+\newcommand*\xP@testoffset{{\gdef\xP@afteroffsetok{\xP@offsetoktrue}\def\xP@offsetokif{\ifdim\xP@ti<1.85pt}\xP@ti.1pt
+\loop
+\xP@tip\dimexpr\xP@a+(\xP@b-\xP@a)*\xP@ti/131072\relax
+\L@p\xP@precbezierpoly\xP@xa\xP@xb\xP@xc\xP@xd\xP@tip
+\U@p\xP@precbezierpoly\xP@ya\xP@yb\xP@yc\xP@yd\xP@tip
+\xP@valA\dimexpr\xP@bezierpoly\X@p\L@c\R@c\X@c\xP@ti-\L@p\relax
+\xP@valB\dimexpr\xP@bezierpoly\Y@p\U@c\D@c\Y@c\xP@ti-\U@p\relax
+\d@X3\xP@precbeziertan\xP@xa\xP@xb\xP@xc\xP@xd\xP@tip
+\d@Y3\xP@precbeziertan\xP@ya\xP@yb\xP@yc\xP@yd\xP@tip
+\xP@veclen
+\@tempdimc\dimexpr(\xP@b-\xP@a)*\@tempdimb/\xP@bigdim\relax
+\xP@abs\@tempdimc
+\ifdim.01pt<\@tempdimc
+\xP@devA\dimexpr\xP@valA*\d@X/\@tempdimb+\xP@valB*\d@Y/\@tempdimb\relax
+\xP@devB\dimexpr\xP@valA*\d@Y/\@tempdimb-\xP@valB*\d@X/\@tempdimb-8\xP@off
+\relax
+\xP@abs\xP@devA
+\xP@abs\xP@devB
+\@tempdima\dimexpr\xP@devA+\xP@devB\relax
+\else
+\ifdim\@tempdimc=\z@
+\@tempdima\z@
+\else
+{\d@X\xP@valA
+\d@Y\xP@valB
+\xP@veclen@
+\global\dimen@i\@tempdimb
+}\@tempdima\dimen@i
+\advance\@tempdima\ifdim\xP@off>\z@-\fi8\xP@off
+\xP@abs\@tempdima
+\fi
+\fi
+\ifdim\@tempdima>\xP@maxdev
+\divide\L@p-8\relax
+\divide\U@p-8\relax
+{\xP@transformcoor\X@p\Y@p
+\xP@transformcoor\L@c\U@c
+\xP@transformcoor\R@c\D@c
+\xP@transformcoor\X@c\Y@c
+\xP@findzero
+}\fi
+\xP@offsetokif
+\advance\xP@ti.1pt
+\repeat
+\expandafter}\xP@afteroffsetok
+}
+\newcommand*\xP@afteroffsetok{}
+\newcommand*\xP@offsetokif{}
+\newcommand*\xP@transformcoor[2]{\advance#1\L@p
+\advance#2\U@p
+\@tempdima\dimexpr#1*\d@X/\@tempdimb+#2*\d@Y/\@tempdimb\relax
+#2\dimexpr#2*\d@X/\@tempdimb-#1*\d@Y/\@tempdimb\relax
+#1\@tempdima
+}
+\newcommand*\xP@findzero{\xP@setleftvalue{.05}\xP@setrightvalue{.05}\ifdim\xP@valB<\z@\xP@reversecoeff\fi
+\ifdim\xP@valA>\z@
+\@tempswatrue
+\@for\@tempa:={.1,.15,.2,.25,.35,.5,1.1}\do{\if@tempswa
+\xP@setleftvalue\@tempa
+\ifdim\xP@valA<\z@\@tempswafalse\fi
+\if@tempswa
+\xP@setrightvalue\@tempa
+\ifdim\xP@valB<\z@
+\@tempswafalse
+\xP@reversecoeff
+\fi
+\fi
+\fi
+}\if@tempswa
+\L@p\xP@ti
+\xP@valA\xP@bezierpoly\X@p\L@c\R@c\X@c\L@p
+\ifdim\xP@valA<\z@
+\xP@setrightvalue{.05}\else
+\U@p\L@p
+\xP@valB\xP@valA
+\fi
+\fi
+\fi
+\loop
+\ifnum\numexpr\U@p-\L@p\relax>\@ne
+\xP@ti\dimexpr(\L@p+\U@p)/2\relax
+\xP@devA\xP@bezierpoly\X@p\L@c\R@c\X@c\xP@ti
+\ifdim\xP@devA>\z@
+\U@p\xP@ti
+\xP@valB\xP@devA
+\else
+\L@p\xP@ti
+\xP@valA\xP@devA
+\fi
+\repeat
+\xP@ifabsless\xP@valB\xP@valA
+\L@p\U@p
+\xP@valA\xP@valB
+\fi
+\xP@valB\dimexpr\xP@bezierpoly\Y@p\U@c\D@c\Y@c\L@p+8\xP@off\relax
+\xP@abs\xP@valA
+\xP@abs\xP@valB
+\ifdim\dimexpr\xP@valA+\xP@valB\relax>\xP@maxdev\relax
+\xP@failed
+\fi
+}
+\newcommand*\xP@failed{\global\let\xP@offsetokif\iffalse
+\gdef\xP@afteroffsetok{\xP@offsetokfalse}}
+\newcommand*\xP@reversecoeff{\multiply\X@p\m@ne
+\multiply\L@c\m@ne
+\multiply\R@c\m@ne
+\multiply\X@c\m@ne
+\multiply\xP@valA\m@ne
+\multiply\xP@valB\m@ne
+}
+\newcommand*\xP@setleftvalue[1]{\L@p\dimexpr\xP@ti-#1\p@\relax
+\ifdim\L@p<-.1pt\L@p-.1pt\fi
+\xP@valA\xP@bezierpoly\X@p\L@c\R@c\X@c\L@p
+}
+\newcommand*\xP@setrightvalue[1]{\U@p\dimexpr\xP@ti+#1\p@\relax
+\ifdim\U@p>2.1\p@\U@p2.1\p@\fi
+\xP@valB\xP@bezierpoly\X@p\L@c\R@c\X@c\U@p
+}
+\newcommand*\xP@splinedbldashed{\xP@checkspline\xP@splinemultdashed\xP@doublestroke}
+\newcommand*\xP@splinetrbldashed{\xP@checkspline\xP@splinemultdashed\xP@trblstroke}
+\newcommand*\xP@splinemultdashed[1]{\xP@testcont\xP@dashmacro
+\@tempcnta
+\ifxP@splinecont
+\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax
+\else
+\numexpr2*((\@tempdimb+\xydashl@)/(2*\xydashl@))-1\relax
+\fi
+\ifnum\@tempcnta>\@ne
+\xP@splinemultdashed@#1\else
+\ifnum\@tempcnta=\@ne
+\xP@splinemultsolid#1
+\else
+\xP@savec
+\fi
+\fi
+\global\let\xP@lastpattern\xP@dashmacro
+}
+\newcommand*\xP@splinemultdashed@[1]{{\xP@inibigdim
+\@tempdima\dimexpr\@tempdimb/\@tempcnta\relax
+\xP@temppar\z@
+\toks@{}\xP@savec
+\ifodd\@tempcnta
+\else
+\xP@slide
+\fi
+\@tempcnta\z@
+\loop
+\advance\@tempcnta\@ne
+\xP@append\toks@{\ifodd\@tempcnta\noexpand\xP@paintdash\fi
+{\the\xP@temppar}}\xP@oldpar\xP@temppar
+\xP@slide
+\ifdim\xP@temppar<\xP@bigdim
+\repeat
+\xP@lastpar
+\ifodd\@tempcnta
+\xP@temppar
+\xP@append\toks@{{\the\xP@temppar}}\else
+\xP@oldpar
+\fi
+\@temptokena{}\xP@setsolidpat
+\global\let\xP@lastpattern\xP@dashmacro
+\@for\@tempa:={#1}\do{\the\toks@}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintdash[2]{\xP@paintsolid{\dimexpr#1*\xP@bigdim/\xP@lastpar\relax}{\dimexpr#2*\xP@bigdim/\xP@lastpar\relax}}
+\xP@hook{curve}{splinedbldotted@}
+\newcommand*\xP@splinedbldotted@{\let\xP@normalmult\@ne
+\xP@checkspline\xP@splinemultdotted\xP@doublestroke}
+\newcommand*\xP@splinetrbldotted{\let\xP@normalmult\tw@
+\xP@checkspline\xP@splinemultdotted\xP@trblstroke}
+\newcommand*\xP@multidottedpat{\def\xP@pattern{0 J [\xP@coor\xP@preclw{\xydashh@-\xP@preclw}]0 d}\global\let\xP@lastpattern\xP@dotmacro
+}
+\@ifdefinable\xP@normalmult\relax
+\newcommand\xP@splinemultdotted[1]{{\xP@inibigdim
+\xP@temppar\z@
+\xP@testcont\xP@dotmacro
+\ifxP@splinecont
+\@tempdimc\dimexpr\@tempdimb/(\@tempdimb/131072+1)\relax
+\@tempdima\dimexpr\@tempdimc-\xP@preclw/2\relax
+\xP@slide
+\@tempdima\@tempdimc
+\else
+\@tempdima\dimexpr\xP@preclw/2\relax
+\xP@slide
+\@tempdima\dimexpr\@tempdimb-\xP@preclw\relax
+\ifdim\@tempdima<\z@\@tempdima\z@\fi
+\@tempdima\dimexpr\@tempdima/(\@tempdima/131072+1)\relax
+\fi
+\xP@savec
+\toks@{}\ifdim\xP@temppar<\xP@bigdim
+\loop
+\xP@append\toks@{\noexpand\xP@paintdot{\the\xP@temppar}}\xP@oldpar\xP@temppar
+\xP@slide
+\ifdim\xP@temppar<\xP@bigdim
+\repeat
+\xP@velocity\xP@bigdim\xP@tempvel
+\ifdim
+\ifdim\xP@preclw<\xP@tempvel
+\dimexpr2\xP@bigdim-\xP@oldpar-\xP@preclw*\xP@bigdim/\xP@tempvel\relax
+\else
+-\maxdimen
+\fi<\xP@temppar
+\xP@temppar\xP@oldpar
+\else
+\xP@append\toks@{\noexpand\xP@paintdot{\the\xP@temppar}}\fi
+\@tempdima\dimexpr\xP@preclw/2\relax
+\xP@slide
+\xP@lastpar\xP@temppar
+\@temptokena{}\the\toks@
+\xP@multidottedpat
+\xP@stroke{\the\@temptokena}\else
+\global\let\xP@lastpattern\@empty
+\fi
+}}
+\newcommand*\xP@slide{{\xP@slide@
+\global\dimen@i\xP@temppar
+}\xP@temppar\dimen@i
+}
+\newcommand*\xP@slide@{\xP@velocity\xP@temppar\xP@tempvel
+\@tempdimc\dimexpr\xP@bigdim*\@tempdima/\@tempdimb\relax
+\count@\z@
+\@tempswatrue
+\loop
+\xP@velocity{\xP@temppar+\@tempdimc}\xP@tempvel@
+\ifdim\dimexpr\@tempdima*4/13\relax>\xP@tempvel@
+\@tempswafalse
+\else
+\xP@parinc\dimexpr\@tempdima*\xP@bigdim/\xP@tempvel@
+-(\xP@tempvel+\xP@tempvel@)/2*\@tempdimc/\xP@tempvel@\relax
+\advance\@tempdimc\xP@parinc
+\ifdim\@tempdimc>.12\xP@bigdim
+\@tempswafalse
+\else
+\ifdim\xP@parinc=\z@
+\@tempswafalse
+\else
+\ifnum\count@=9\relax
+\@tempswafalse
+\fi
+\fi
+\fi
+\fi
+\if@tempswa
+\advance\count@\@ne
+\repeat
+\ifdim\xP@temppar<5461pt
+\ifdim\@tempdimc>.1\xP@bigdim
+\@tempswatrue
+\fi
+\fi
+\if@tempswa
+{\dimen5\xP@temppar
+\advance\xP@temppar.1\xP@bigdim
+\ifdim\xP@temppar>5461pt\xP@temppar5461pt\fi
+\dimen7\xP@temppar
+\xP@shaveprec{\dimen5}{\dimen7}\xP@bezierlength
+\global\dimen@i\dimexpr\@tempdima-\@tempdimb\relax
+\global\dimen3\xP@temppar
+}\@tempdima\dimen@i
+\xP@temppar\dimen3\relax
+\expandafter\xP@slide@
+\else
+\advance\xP@temppar\@tempdimc
+\fi
+}
+\newcommand*\xP@paintdot[1]{\@tempdima\dimexpr#1*\xP@bigdim/\xP@lastpar\relax
+\xP@tangent
+\xP@posX\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\@tempdima/8\relax
+\xP@posY\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\@tempdima/8\relax
+\@tempdima\dimexpr(\xydashh@+\xP@preclw/\xP@normalmult)/2\relax
+\L@p\dimexpr\d@Y*\@tempdima/\@tempdimb\relax
+\U@p\dimexpr-\d@X*\@tempdima/\@tempdimb\relax
+\xP@append\@temptokena{\xP@coor{\xP@posX+\L@p*\xP@normalmult}{\xP@posY+\U@p*\xP@normalmult}m \xP@coor{\xP@posX-\L@p*(\xP@normalmult+\@ne)}{\xP@posY-\U@p*(\xP@normalmult+\@ne)}l }}
+\newcommand*\xP@splinesquiggled{\xP@checkspline\xP@splinesquiggled@\z@}
+\newcommand*\xP@splinedblsquiggled{\xP@checkspline\xP@splinesquiggled@\xP@doublestroke}
+\newcommand*\xP@splinetrblsquiggled{\xP@checkspline\xP@splinesquiggled@\xP@trblstroke}
+\newcommand*\xP@splinesquiggled@[1]{{\xP@inibigdim
+\xP@testcont\xP@oddsquigglemacro
+\ifxP@splinecont
+\def\xP@squigsign{-}\else
+\let\xP@squigsign\@empty
+\fi
+\xP@savec
+\@tempcnta=\numexpr\@tempdimb/\xybsqll@\relax
+\ifnum\@tempcnta<\tw@\@tempcnta\tw@\fi
+\multiply\@tempcnta\tw@
+\@tempdima\dimexpr\@tempdimb/\@tempcnta\relax
+\xP@squiglen\@tempdima
+\xP@temppar\z@
+\toks@{}\@tempcnta\z@
+\loop
+\advance\@tempcnta\@ne
+\xP@append\toks@{\noexpand\xP@paintsquiggle{\the\xP@temppar}}\xP@oldpar\xP@temppar
+\xP@slide
+\ifdim\xP@temppar<\xP@bigdim
+\repeat
+\xP@lastpar
+\ifodd\@tempcnta
+\xP@oldpar
+\advance\@tempcnta\m@ne
+\else
+\xP@temppar
+\xP@append\toks@{\noexpand\xP@paintsquiggle{\the\xP@temppar}}\fi
+\@temptokena{}\xP@setsolidpat
+\global\expandafter\let\expandafter\xP@lastpattern
+\ifodd\numexpr\@tempcnta/2\if\xP@squigsign-+1\fi\relax
+\xP@oddsquigglemacro
+\else
+\xP@evensquigglemacro
+\fi
+\@for\@tempa:={#1}\do{\let\xP@dosquiggle\xP@dosquiggle@
+\count@\z@
+\the\toks@
+}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintsquiggle[1]{\xP@squigglevectors{#1}\xP@dosquiggle
+\ifnum\count@=\thr@@\relax\count@\z@\else\advance\count@\@ne\fi
+}
+\newcommand*\xP@squigglevectors[1]{\@tempdima\dimexpr#1*\xP@bigdim/\xP@lastpar\relax
+\xP@tangent
+\xP@posX\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\@tempdima/8-\d@Y*(\@tempa)/\@tempdimb\relax
+\xP@posY\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\@tempdima/8+\d@X*(\@tempa)/\@tempdimb\relax
+\L@p\dimexpr\d@X*\xP@squiglen/\@tempdimb\relax
+\U@p\dimexpr\d@Y*\xP@squiglen/\@tempdimb\relax
+\R@p\dimexpr\L@p*543339720/1311738121\relax
+\D@p\dimexpr\U@p*543339720/1311738121\relax
+\X@min\dimexpr\L@p*362911648/967576667\relax
+\Y@min\dimexpr\U@p*362911648/967576667\relax
+\X@max\dimexpr(\L@p+\xP@squigsign\U@p)*173517671/654249180\relax
+\Y@max\dimexpr(\L@p-\xP@squigsign\U@p)*173517671/654249180\relax
+}
+\@ifdefinable\xP@dosquiggle@\relax
+\newcommand*\xP@dosquiggle@{\edef\next@{\xP@coor{\xP@posX}{\xP@posY}m
+\xP@coor{\xP@posX+\Y@max}{\xP@posY+\xP@squigsign\X@max}}\let\xP@dosquiggle\xP@dosquiggle@@
+}
+\newcommand*\xP@dosquiggle@@{\xP@append\@temptokena{\next@\expandafter\xP@coor
+\ifcase\count@
+{\xP@posX-\Y@max}{\xP@posY-\xP@squigsign\X@max}\xP@coor\xP@posX\xP@posY
+\or
+{\xP@posX-\xP@squigsign\D@p-\X@min}{\xP@posY+\xP@squigsign\R@p-\Y@min}\xP@coor{\xP@posX-\xP@squigsign\D@p}{\xP@posY+\xP@squigsign\R@p}\or
+{\xP@posX-\X@max}{\xP@posY+\xP@squigsign\Y@max}\xP@coor\xP@posX\xP@posY
+\or
+{\xP@posX+\xP@squigsign\D@p-\X@min}{\xP@posY-\xP@squigsign\R@p-\Y@min}\xP@coor{\xP@posX+\xP@squigsign\D@p}{\xP@posY-\xP@squigsign\R@p}\fi c }\edef\next@{\expandafter\xP@coor
+\ifcase\count@
+{\xP@posX+\Y@max}{\xP@posY+\xP@squigsign\X@max}\or
+{\xP@posX-\xP@squigsign\D@p+\X@min}{\xP@posY+\xP@squigsign\R@p+\Y@min}\or
+{\xP@posX+\X@max}{\xP@posY-\xP@squigsign\Y@max}\or
+{\xP@posX+\xP@squigsign\D@p+\X@min}{\xP@posY-\xP@squigsign\R@p+\Y@min}\fi
+}}
+\newcommand*\xP@splinebrokensquiggled{\xP@checkspline\xP@splinebrokensquiggled@\z@}
+\newcommand*\xP@splinebrokendblsquiggled{\xP@checkspline\xP@splinebrokensquiggled@\xP@doublestroke}
+\newcommand*\xP@splinebrokentrblsquiggled{\xP@checkspline\xP@splinebrokensquiggled@\xP@trblstroke}
+\newcommand*\xP@splinebrokensquiggled@[1]{{\xP@inibigdim
+\xP@testcont\xP@brokensquigglemacro
+\ifxP@splinecont
+\let\xP@squigsign\@firstoftwo
+\else
+\let\xP@squigsign\@secondoftwo
+\fi
+\xP@savec
+\@tempcnta\numexpr(\@tempdimb\xP@squigsign{}{+2*\xybsqll@})/(4*\xybsqll@)\relax
+\ifnum\@tempcnta<\@ne\@tempcnta\@ne\fi
+\@tempdima\dimexpr\@tempdimb/(8*\@tempcnta\xP@squigsign{}{-4})\relax
+\xP@squiglen\@tempdima
+\xP@temppar\z@
+\xP@squigsign{\xP@slide\xP@slide\xP@slide\xP@slide}{}\count@\z@
+\toks@{}\loop
+\xP@append\toks@{\noexpand\xP@paintbrokensquiggle{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@lastpar\xP@temppar
+\advance\count@\@ne
+\ifnum\count@<\@tempcnta
+\xP@slide
+\xP@slide
+\xP@slide
+\xP@slide
+\repeat
+\@temptokena{}\xP@setsolidpat
+\global\let\xP@lastpattern\xP@brokensquigglemacro
+\let\xP@squigsign\@empty
+\@for\@tempa:={#1}\do{\the\toks@}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintbrokensquiggle[5]{\xP@squigglevectors{#1}\xP@append\@temptokena{\xP@coor\xP@posX\xP@posY m \xP@coor{\xP@posX+\Y@max}{\xP@posY+\X@max}}\xP@squigglevectors{#2}\xP@append\@temptokena{\xP@coor{\xP@posX-\D@p-\X@min}{\xP@posY+\R@p-\Y@min}\xP@coor{\xP@posX-\D@p}{\xP@posY+\R@p}c \xP@coor{\xP@posX-\D@p+\X@min}{\xP@posY+\R@p+\Y@min}}\xP@squigglevectors{#3}\xP@append\@temptokena{\xP@coor{\xP@posX-\X@max}{\xP@posY+\Y@max}\xP@coor\xP@posX\xP@posY c \xP@coor{\xP@posX+\X@max}{\xP@posY-\Y@max}}\xP@squigglevectors{#4}\xP@append\@temptokena{\xP@coor{\xP@posX+\D@p-\X@min}{\xP@posY-\R@p-\Y@min}\xP@coor{\xP@posX+\D@p}{\xP@posY-\R@p}c \xP@coor{\xP@posX+\D@p+\X@min}{\xP@posY-\R@p+\Y@min}}\xP@squigglevectors{#5}\xP@append\@temptokena{\xP@coor{\xP@posX-\Y@max}{\xP@posY-\X@max}\xP@coor\xP@posX\xP@posY c }}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-cu.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex
new file mode 100644
index 0000000000..4138294c1a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex
@@ -0,0 +1,438 @@
+%%
+%% This is file `xypdf-fr.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `frame')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~muellner>
+%% --------------------------------------------------------------------------
+%%
+%% This program is free software: you can redistribute it and/or modify it
+%% under the terms of the GNU General Public License as published by the Free
+%% Software Foundation, either version 2 of the License, or (at your option)
+%% any later version.
+%%
+%% This program is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf
+%% package may be distributed and/or modified under the conditions of the
+%% GNU General Public License as published by the Free Software Foundation,
+%% either version 2 of the License, or (at your option) any later version.
+%% The distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% The xypdf package improves the output quality of the Xy-pic package when
+%% PDF documents are generated. It produces generic PDF code for graphical
+%% elements like lines, curves and circles instead of approximating these
+%% elements with glyphs in special fonts as the original Xy-pic package does.
+%% The xypdf package works with both TeX and LaTeX in the occurrences of
+%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xyrequire{curve}\xycatcodes
+\expandafter\let\csname xypdf-fr@loaded\endcsname\@empty
+\newcommand*\xP@framedrop[1]{\expandafter\frmDrop@\expandafter{\expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}\setboxz@h{#1\frmradius@@}\styledboxz@}}
+\xP@hook{frame}{frm{-}}
+\expandafter\newcommand\expandafter*\csname xP@frm{-}\endcsname{\xP@framedrop\xP@solidframe
+}
+\newcommand*\xP@solidframe[1]{\R@#1\relax
+\xP@setsolidpat
+\let\xP@fillorstroke\xP@stroke
+\xP@frameifnotzero\xP@oval
+}
+\newcommand*\xP@ifzerosize[2]{\@tempswafalse
+\ifdim\L@c=\z@\ifdim\R@c=\z@\ifdim\U@c=\z@\ifdim\D@c=\z@
+\@tempswatrue
+\fi\fi\fi\fi
+\if@tempswa#1\else#2\fi
+}
+\newcommand*\xP@frameifnotzero[1]{\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@ifzerosize{}{#1}}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}
+\newcommand*\xP@oval{\hskip-\L@c
+\lower\D@c\hbox{\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\R@\xP@min\R@{.5\dimen@}\R@\xP@min\R@{.5\dimen@ii}\@tempdimb\dimexpr2\dimen@+2\dimen@ii-\R@*696621973/405764219\relax
+\ifdim\R@=\z@
+\xP@fillorstroke{0 0 \xP@coor\dimen@\dimen@ii re}\else
+\def\@tempa{*119763188/267309217}\xP@fillorstroke{\xP@dim\R@0 m \xP@dim{\R@\@tempa}0 0 \xP@dim{\R@\@tempa}0 \xP@dim\R@ c \ifdim2\R@=\dimen@ii\else
+0 \xP@dim{\dimen@ii-\R@}l \fi
+0 \xP@dim{\dimen@ii-\R@\@tempa}\xP@coor{\R@\@tempa}\dimen@ii
+\xP@coor\R@\dimen@ii c \ifdim2\R@=\dimen@\else
+\xP@coor{\dimen@-\R@}\dimen@ii l \fi
+\xP@coor{\dimen@-\R@\@tempa}\dimen@ii
+\xP@coor\dimen@{\dimen@ii-\R@\@tempa}\xP@coor\dimen@{\dimen@ii-\R@} c \ifdim2\R@=\dimen@ii\else
+\xP@coor\dimen@\R@ l \fi
+\xP@coor\dimen@{\R@\@tempa}\xP@dim{\dimen@-\R@\@tempa}0 \xP@dim{\dimen@-\R@}0 c h}\fi
+}}
+\xP@hook{frame}{frm[o]{-}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{-}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setsolidpat}}
+\newcommand*\xP@ellipseframe[2]{\xP@getradii{#2}\xP@ifzerosize{}{\def\xP@fillorstroke{#1\xP@stroke}\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@framedellipse}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}}
+\xP@hook{frame}{frm{.}}
+\expandafter\newcommand\expandafter*\csname xP@frm{.}\endcsname{\xP@framedrop\xP@rectframedotted
+}
+\newcommand*\xP@rectframedotted[1]{\R@#1\relax
+\xP@frameifnotzero{\ifdim\R@=\z@
+\xP@dottedrect
+\else
+\xP@dottedoval
+\fi
+}}
+\newcommand*\xP@dottedrect{\hskip-\L@c
+\lower\D@c\hbox{\dimen@ii\dimexpr\U@c+\D@c\relax
+\@tempdimc\dimexpr\xP@preclw/-2\relax
+\@tempdimb\dimexpr\L@c+\R@c+\xP@preclw\relax
+\xP@contfalse
+\xP@setdottedpat
+\dimen@\dimexpr\@tempdimb+\@tempdima/2+\@tempdimc\relax
+\xP@stroke{\xP@dim\@tempdimc0 m \xP@dim\dimen@0 l \xP@coor\@tempdimc\dimen@ii m \xP@coor\dimen@\dimen@ii l}\let\xP@testcont\xP@alwaysconttrue
+\@tempdimb\dimen@ii
+\xP@setdottedpat
+\dimen@\dimexpr\L@c+\R@c\relax
+\advance\dimen@ii\dimexpr\@tempdimc-\@tempdima/2\relax
+\multiply\@tempdimc\m@ne
+\xP@stroke{0 \xP@dim\@tempdimc m 0 \xP@dim\dimen@ii l \xP@coor\dimen@\@tempdimc m \xP@coor\dimen@\dimen@ii l}}}
+\newcommand*\xP@dottedoval{\def\xP@fillorstroke{\xP@setcldottedpat\xP@stroke}\xP@oval
+}
+\xP@hook{frame}{frm[o]{.}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{.}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldottedpat}}
+\xP@hook{frame}{frm{--}}
+\expandafter\newcommand\expandafter*\csname xP@frm{--}\endcsname{\xP@framedrop\xP@rectframedashed
+}
+\newcommand*\xP@rectframedashed[1]{\R@#1\relax
+\xP@frameifnotzero{\ifdim\R@=\z@
+\xP@dashedrect
+\else
+\xP@dashedoval
+\fi
+}}
+\newcommand*\xP@dashedrect{\hskip-\L@c
+\lower\D@c\hbox{\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\@tempdimb\dimen@
+\xP@contfalse
+\xP@setdashpat
+\xP@stroke{0 0 m \xP@dim\dimen@0 l 0 \xP@dim\dimen@ii m \xP@coor\dimen@\dimen@ii l}\@tempdimb\dimen@ii
+\xP@setdashpat
+\xP@stroke{0 0 m 0 \xP@dim\dimen@ii l \xP@dim\dimen@0 m \xP@coor\dimen@\dimen@ii l}}}
+\newcommand*\xP@dashedoval{\def\xP@fillorstroke{\xP@setcldashpat\xP@stroke}\xP@oval
+}
+\xP@hook{frame}{frm[o]{--}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{--}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldashpat}}
+\xP@hook{frame}{frm{,}}
+\expandafter\newcommand\expandafter*\csname xP@frm{,}\endcsname{\xP@framedrop\xP@frameshadow
+}
+\newcommand*\xP@frameshadow[1]{\R@#1\relax
+\ifdim\R@=\z@\R@1.2pt\relax\fi
+\xP@frameifnotzero\xP@shadow
+}
+\newcommand*\xP@shadow{\hskip\dimexpr\R@c+\R@/2\relax
+\lower\dimexpr\D@c+\R@/2\relax\hbox{\def\xP@pattern{0 J 0 j []0 d}\edef\xP@lw{\xP@dim\R@}\xP@stroke{\xP@dim{\R@/2-\L@c-\R@c} 0 m 0 0 l 0 \xP@dim{\D@c+\U@c-\R@/2}l}}}
+\xP@hook{frame}{frm{o-}}
+\expandafter\newcommand\expandafter*\csname xP@frm{o-}\endcsname{\xP@framedrop\xP@roundedrectframe
+}
+\newcommand*\xP@roundedrectframe[1]{\R@#1\relax
+\ifdim\R@=\z@\R@\xydashl@\relax\fi
+\xP@frameifnotzero\xP@roundedrectangle
+}
+\newcommand*\xP@roundedrectangle{\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\R@\xP@min\R@{.5\dimen@}\R@\xP@min\R@{.5\dimen@ii}\hskip-\L@c
+\lower\D@c\hbox{\@tempdimb\dimexpr2\dimen@+2\dimen@ii-\R@*696621973/405764219\relax
+\def\@tempa{*119763188/267309217}\xP@setsolidpat
+\xP@stroke{\xP@dim\R@0 m \xP@dim{\R@\@tempa}0 0 \xP@dim{\R@\@tempa}0 \xP@dim\R@ c \ifdim2\R@=\dimen@ii\else
+0 \xP@dim{\dimen@ii-\R@}m \fi
+0 \xP@dim{\dimen@ii-\R@\@tempa}\xP@coor{\R@\@tempa}\dimen@ii
+\xP@coor\R@\dimen@ii c \ifdim2\R@=\dimen@\else
+\xP@coor{\dimen@-\R@}\dimen@ii m \fi
+\xP@coor{\dimen@-\R@\@tempa}\dimen@ii
+\xP@coor\dimen@{\dimen@ii-\R@\@tempa}\xP@coor\dimen@{\dimen@ii-\R@} c \ifdim2\R@=\dimen@ii\else
+\xP@coor\dimen@\R@ m \fi
+\xP@coor\dimen@{\R@\@tempa}\xP@dim{\dimen@-\R@\@tempa}0 \xP@dim{\dimen@-\R@}0 c}\xP@contfalse
+\@tempdimb\dimexpr\L@c+\R@c-2\R@\relax
+\ifdim\@tempdimb<\z@\@tempdimb\z@\fi
+\xP@setdashpat
+\ifdim\@tempdima>\z@
+\dimen@\dimexpr\@tempdimb+\R@-\@tempdima/2\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\xP@stroke{\xP@dim{\R@+\@tempdima}0 m \xP@dim\dimen@ 0 l \xP@coor{\R@+\@tempdima}\dimen@ii m \xP@coor\dimen@\dimen@ii l}\fi
+\@tempdimb\dimexpr\U@c+\D@c-2\R@\relax
+\ifdim\@tempdimb<\z@\@tempdimb\z@\fi
+\xP@setdashpat
+\ifdim\@tempdima>\z@
+\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\@tempdimb+\R@-\@tempdima/2\relax
+\xP@stroke{0 \xP@dim{\R@+\@tempdima}m 0 \xP@dim\dimen@ii l \xP@coor\dimen@{\R@+\@tempdima}m \xP@coor\dimen@\dimen@ii l}\fi
+}}
+\xP@hook{frame}{frm{=}}
+\expandafter\newcommand\expandafter*\csname xP@frm{=}\endcsname{\xP@framedrop\xP@dsframe
+}
+\newcommand*\xP@dsframe[1]{\R@#1\relax
+\xP@frameifnotzero\xP@dsoval
+}
+\newcommand*\xP@dsoval{\dimen@\dimexpr(\L@c+\R@c)/2\relax
+\ifdim\dimen@<\xydashh@\dimen@\xydashh@\fi
+\dimen@ii\dimexpr(\U@c+\D@c)/2\relax
+\ifdim\dimen@ii<\xydashh@\dimen@ii\xydashh@\fi
+\R@\xP@min\R@\dimen@
+\R@\xP@min\R@\dimen@ii
+\xP@setsolidpat
+\let\xP@fillorstroke\xP@stroke
+\xP@oval
+\hskip\L@c
+\advance\L@c-\xydashh@
+\advance\R@c-\xydashh@
+\advance\U@c-\xydashh@
+\advance\D@c-\xydashh@
+\advance\R@-\xydashh@
+\ifdim\R@<\z@\R@\z@\fi
+\xP@oval
+}
+\xP@hook{frame}{frm[o]{=}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{=}\endcsname{\xP@framedrop\xP@dsellframe
+}
+\xP@hook{frame}{frm{ee}}
+\expandafter\newcommand\expandafter*\csname xP@frm{ee}\endcsname{\xP@framedrop\xP@dsellframe
+}
+\newcommand*\xP@dsellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsellipse
+}
+\@ifdefinable\xP@temppath\relax
+\newcommand*\xP@dsellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\advance\A@-\xydashh@
+\advance\B@-\xydashh@
+\ifdim\A@<\z@\A@\z@\fi
+\ifdim\B@<\z@\B@\z@\fi
+\def\xP@fillorstroke{\edef\xP@temppath}\xP@ellipse@
+\xP@inibigdim
+\let\@tempa\xydashh@
+\xP@offsetellipse
+\xP@setsolidpat
+\xP@stroke{\xP@temppath\space\the\@temptokena}}}
+\newcommand*\xP@offsetellipse{\xP@movetotrue
+\@temptokena{}\xP@offsetelliptseg\A@\z@\A@{\B@*173517671/654249180}{\A@*554561898/619869377}{\B@*34221476/65864945}{\A@*543339720/768398401}{\B@*543339720/768398401}\xP@offsetelliptseg{\A@*543339720/768398401}{\B@*543339720/768398401}{\A@*34221476/65864945}{\B@*554561898/619869377}{\A@*173517671/654249180}\B@\z@\B@
+\xP@mirrorpath
+}
+\newcommand*\xP@mirrorpath{\edef\@tempa{\the\@temptokena\relax\space\space\space\space}\let\@tempb\@empty
+\let\@tempc\@empty
+\expandafter\xP@mirrorpath@\@tempa
+}
+\@ifdefinable\xP@mirrorpath@\relax
+\def\xP@mirrorpath@#1 #2 #3 #4 #5 #6 #7 {\ifx\relax#4\xP@append\@temptokena{\@tempb\xP@minus#1 \xP@minus#2 #3 \@tempc h}\else
+\edef\@tempb{\xP@minus#6 #7 \xP@minus#4 #5 \xP@minus#1 #2 c \@tempb\if#3m\else\xP@minus#1 \xP@minus#2 #3 \fi\xP@minus#4 \xP@minus#5 \xP@minus#6 \xP@minus#7 }\edef\@tempc{#6 \xP@minus#7 #4 \xP@minus#5 #1 \xP@minus#2 c \@tempc}\expandafter\xP@mirrorpath@
+\fi
+}
+\@ifdefinable\xP@minus\relax
+\def\xP@minus#1 {\if-#1 \else\ifdim\dimexpr#1pt\relax=\z@\else-\fi#1 \fi}
+\newcommand*\xP@insertbefore[2]{{\edef\@tempa{#1{#2\the#1}}\expandafter}\@tempa}
+\newcommand*\xP@offsetelliptseg[8]{\X@p\dimexpr#1\relax
+\Y@p\dimexpr#2\relax
+\L@c\dimexpr#3\relax
+\U@c\dimexpr#4\relax
+\R@c\dimexpr#5\relax
+\D@c\dimexpr#6\relax
+\X@c\dimexpr#7\relax
+\Y@c\dimexpr#8\relax
+\xP@savepts
+\xP@a\z@
+\xP@c\xP@bigdim
+\xP@paintsolid@
+}
+\newcommand*\xP@getradii[1]{\edef\@tempa{#1}\expandafter\xP@getradii@\@tempa,\maxdimen,@}
+\@ifdefinable\xP@getradii@\relax
+\def\xP@getradii@#1,#2,#3@{\A@#1\relax
+\B@#2\relax
+\ifdim\B@=\maxdimen
+\A@\dimexpr(\L@c+\R@c)/2\relax
+\B@\dimexpr(\U@c+\D@c)/2\relax
+\fi
+}
+\xP@hook{frame}{frm{o}}
+\expandafter\newcommand\expandafter*\csname xP@frm{o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setsolidpat}}
+\xP@hook{frame}{frm{-o}}
+\expandafter\newcommand\expandafter*\csname xP@frm{-o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setcldashpat}}
+\xP@hook{frame}{frm{.o}}
+\expandafter\newcommand\expandafter*\csname xP@frm{.o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setcldottedpat}}
+\newcommand*\xP@circleframe[2]{\R@#2\relax
+\def\xP@fillorstroke{#1\xP@stroke}\xP@ifzerosize{\ifdim\R@>\z@
+\xP@circleframe@
+\fi
+}{\ifdim\R@=\z@
+\A@\dimexpr(\L@c+\R@c)/2\relax
+\B@\dimexpr(\U@c+\D@c)/2\relax
+\R@\xP@max\A@\B@
+\fi
+\xP@circleframe@
+}}
+\newcommand*\xP@circleframe@{\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@circle}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}
+\xP@hook{frame}{frm{e}}
+\expandafter\newcommand\expandafter*\csname xP@frm{e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setsolidpat}}
+\xP@hook{frame}{frm{-e}}
+\expandafter\newcommand\expandafter*\csname xP@frm{-e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldashpat}}
+\xP@hook{frame}{frm{.e}}
+\expandafter\newcommand\expandafter*\csname xP@frm{.e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldottedpat}}
+\xP@hook{frame}{frm2{.e}}
+\expandafter\newcommand\expandafter*\csname xP@frm2{.e}\endcsname{\xP@framedrop\xP@dsdottedellframe
+}
+\newcommand*\xP@dsdottedellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsdottedellipse
+}
+\newcommand*\xP@dsdottedellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\@tempdima.5\xydashh@\relax
+\advance\A@-\@tempdima
+\advance\B@-\@tempdima
+\ifdim\A@<\@tempdima\A@\@tempdima\fi
+\ifdim\B@<\@tempdima\B@\@tempdima\fi
+\let\xP@normalmult\@ne
+\xP@specialellipse{\xP@splinemultdotted\xP@doublestroke}}}
+\newcommand*\xP@specialellipse[1]{\def\@tempa{*147546029/267309217}\X@p\A@
+\Y@p\z@
+\L@c\A@
+\U@c\dimexpr\B@\@tempa\relax
+\R@c\dimexpr\A@\@tempa\relax
+\D@c\B@
+\X@c\z@
+\Y@c\B@
+\xP@bezierlength
+\let\xP@testcont\xP@alwaysconttrue
+#1\X@p\z@
+\Y@p\B@
+\L@c-\R@c
+\D@c\U@c
+\U@c\B@
+\R@c-\A@
+\X@c-\A@
+\Y@c\z@
+#1\X@p-\A@
+\Y@p\z@
+\R@c\L@c
+\L@c-\A@
+\U@c-\D@c
+\D@c-\B@
+\X@c\z@
+\Y@c-\B@
+#1\X@p\z@
+\Y@p-\B@
+\L@c-\R@c
+\D@c\U@c
+\U@c-\B@
+\R@c\A@
+\X@c\A@
+\Y@c\z@
+#1}
+\newcommand*\xP@alwaysconttrue[1]{\xP@splineconttrue}
+\xP@hook{frame}{frm2{-e}}
+\expandafter\newcommand\expandafter*\csname xP@frm2{-e}\endcsname{\xP@framedrop\xP@dsdashellframe
+}
+\newcommand*\xP@dsdashellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsdashellipse
+}
+\newcommand*\xP@dsdashellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\advance\A@-\xydashh@
+\advance\B@-\xydashh@
+\ifdim\A@<\z@\A@\z@\fi
+\ifdim\B@<\z@\B@\z@\fi
+\xP@specialellipse{\xP@splinemultdashed\xP@elldoublestroke}}}
+\newcommand*\xP@elldoublestroke{\z@,\xydashh@}
+\newcommand*\xP@fill[1]{\xP@literal{#1 f}}
+\newcommand*\xP@fillstroke[1]{\xP@literal{\xP@dim{\xP@preclw/2}w 1 j 0 G #1 b}}
+\newcommand*\xP@fillorstroke{}
+\xP@hook{frame}{frm{*}}
+\expandafter\newcommand\expandafter*\csname xP@frm{*}\endcsname{\xP@framedrop{\let\xP@fillorstroke\xP@fill\xP@framefill}}
+\xP@hook{frame}{frm{**}}
+\expandafter\newcommand\expandafter*\csname xP@frm{**}\endcsname{\xP@framedrop{\let\xP@fillorstroke\xP@fillstroke\xP@framefill}}
+\newcommand*\xP@framefill[1]{\R@#1\relax
+\xP@setsolidpat
+\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\DN@{\rectangleEdge}\ifx\next@\prevEdge@@
+\DN@{\xP@oval}\else
+\DN@{\circleEdge}\ifx\next@\prevEdge@@
+\ifdim\R@=\z@
+\DN@{\xP@filledellipse}\else
+\DN@{\restR@max\xP@circle}\fi
+\else
+\ifdim\R@=\z@
+\DN@{\xP@oval}\else
+\DN@{\xP@circle}\fi
+\fi
+\fi
+\next@
+}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}
+\newcommand*\xP@circle{\xP@ellipse\R@\R@
+}
+\newcommand*\xP@filledellipse{\xP@ellipse{\dimexpr(\L@c+\R@c)/2\relax}{\dimexpr(\U@c+\D@c)/2\relax}}
+\newcommand*\xP@framedellipse{\xP@ellipse\A@\B@
+}
+\newcommand*\xP@ellipse[2]{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\A@#1\relax
+\B@#2\relax
+\xP@ellipse@
+}}
+\newcommand*\xP@ellipse@{\X@p\dimexpr\A@*543339720/768398401\relax
+\Y@p\dimexpr\B@*543339720/768398401\relax
+\L@c\dimexpr\A@*34221476/65864945\relax
+\U@c\dimexpr\B@*554561898/619869377\relax
+\R@c\dimexpr\A@*173517671/654249180\relax
+\D@c\B@
+\X@c\z@
+\Y@c\B@
+\xP@bezierlength
+\@tempdima\@tempdimb
+\X@p\A@
+\Y@p\z@
+\L@c\A@
+\U@c\dimexpr\B@*173517671/654249180\relax
+\R@c\dimexpr\A@*554561898/619869377\relax
+\D@c\dimexpr\B@*34221476/65864945\relax
+\X@c\dimexpr\A@*543339720/768398401\relax
+\Y@c\dimexpr\B@*543339720/768398401\relax
+\xP@bezierlength
+\@tempdimb4\dimexpr\@tempdima+\@tempdimb\relax
+\edef\@tempa{\xP@dim\A@0 m
+\xP@coor\L@c\U@c
+\xP@coor\R@c\D@c
+\xP@coor\X@c\Y@c c \xP@coor{\A@*34221476/65864945}{\B@*554561898/619869377}\xP@coor{\A@*173517671/654249180}\B@
+0 \xP@dim\B@ c }\@temptokena\expandafter{\@tempa}\xP@mirrorpath
+\xP@fillorstroke{\the\@temptokena}}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-fr.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex
new file mode 100644
index 0000000000..5fc4de376b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex
@@ -0,0 +1,69 @@
+%%
+%% This is file `xypdf-li.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `line')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~muellner>
+%% --------------------------------------------------------------------------
+%%
+%% This program is free software: you can redistribute it and/or modify it
+%% under the terms of the GNU General Public License as published by the Free
+%% Software Foundation, either version 2 of the License, or (at your option)
+%% any later version.
+%%
+%% This program is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf
+%% package may be distributed and/or modified under the conditions of the
+%% GNU General Public License as published by the Free Software Foundation,
+%% either version 2 of the License, or (at your option) any later version.
+%% The distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% The xypdf package improves the output quality of the Xy-pic package when
+%% PDF documents are generated. It produces generic PDF code for graphical
+%% elements like lines, curves and circles instead of approximating these
+%% elements with glyphs in special fonts as the original Xy-pic package does.
+%% The xypdf package works with both TeX and LaTeX in the occurrences of
+%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-li@loaded\endcsname\@empty
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-li.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex
new file mode 100644
index 0000000000..d0bcf79638
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex
@@ -0,0 +1,133 @@
+%%
+%% This is file `xypdf-ro.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `rotate')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~muellner>
+%% --------------------------------------------------------------------------
+%%
+%% This program is free software: you can redistribute it and/or modify it
+%% under the terms of the GNU General Public License as published by the Free
+%% Software Foundation, either version 2 of the License, or (at your option)
+%% any later version.
+%%
+%% This program is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf
+%% package may be distributed and/or modified under the conditions of the
+%% GNU General Public License as published by the Free Software Foundation,
+%% either version 2 of the License, or (at your option) any later version.
+%% The distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% The xypdf package improves the output quality of the Xy-pic package when
+%% PDF documents are generated. It produces generic PDF code for graphical
+%% elements like lines, curves and circles instead of approximating these
+%% elements with glyphs in special fonts as the original Xy-pic package does.
+%% The xypdf package works with both TeX and LaTeX in the occurrences of
+%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-ro@loaded\endcsname\@empty
+\xP@hook{rotate}{xyscale@@}
+\newcommand*\xP@xyscale@@[2]{\setboxz@h{\hskip\L@c
+\hskip-\R@p
+\lower\U@p\hbox{\xP@cm{#1}00{#2}{\raise\U@p\hb@xt@\z@{\hskip-\L@c\hskip\R@p\boxz@\hss}}}}\global\let\xP@lastpattern\@empty
+}
+\xP@hook{rotate}{xyRotate@@}
+\newcommand\xP@xyRotate@@{\xP@rotate@\xP@trigfromdir}
+\xP@hook{rotate}{doSpecialRotate@@}
+\@ifdefinable\xP@doSpecialRotate@@\relax
+\def\xP@doSpecialRotate@@#1@@{\xP@rotate@\xP@trig{#1}}
+\newcommand*\xP@rotate@[2]{\setboxz@h{#1{#2}\hskip\L@c
+\hskip-\R@p
+\lower\U@p\hbox{\xP@cm\cosDirection\sinDirection
+{\if-\sinDirection\else-\sinDirection\fi}\cosDirection
+{\raise\U@p\hb@xt@\z@{\hskip-\L@c\hskip\R@p\boxz@\hss}}}}\global\let\xP@lastpattern\@empty
+}
+\newcommand*\xP@trig[1]{\@tempdima\dimexpr#1pt\relax
+\@tempdimb\@tempdima
+\divide\@tempdimb23592960
+\advance\@tempdima-23592960\@tempdimb
+\ifdim\@tempdima<\z@\advance\@tempdima360pt\fi
+\@tempdimb\@tempdima
+\divide\@tempdimb5898240
+\ifcase\@tempdimb
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\@tempdimb}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\@tempdimb}\or
+\@tempdima\dimexpr180pt-\@tempdima\relax
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\@tempdimb}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\or
+\@tempdima\dimexpr\@tempdima-180pt\relax
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\or
+\@tempdima\dimexpr360pt-\@tempdima\relax
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\@tempdimb}\else
+\PackageError{xypdf}{Unexpected case in sin/cos calculation}{Feel free to contact the author of the xypdf package with a minimal example.}\fi
+}
+\newcommand*\xP@sinpoly{{\ifdim\@tempdima<49pt
+\ifdim\@tempdima<27pt
+\@tempdimb\dimexpr((\@tempdima*-529771058/16039085-1384933sp)*\@tempdima/268756075+10714164sp)*\@tempdima/613777813\relax
+\else
+\advance\@tempdima-27pt
+\@tempdimb\dimexpr(((\@tempdima*-743101305/20672414-238989613sp)*\@tempdima/80975565+42661556sp)*\@tempdima/622461739+2\p@)*157520747/693945047\relax
+\fi
+\else
+\ifdim\@tempdima<70pt
+\advance\@tempdima-49pt
+\@tempdimb\dimexpr(((\@tempdima*-348406699/107952940-55079229sp)*\@tempdima/866635628+408805sp)*\@tempdima/26926757+\p@)*135751711/179873976\relax
+\else
+\advance\@tempdima-70pt
+\@tempdimb\dimexpr(((\@tempdima*-1015850353/137849442-460519207sp)*\@tempdima/8742349+142263941sp)*\@tempdima/972432199+23\p@)*31253604/764969669\relax
+\fi
+\fi
+\global\dimen@i\@tempdimb
+}\@tempdimb\dimen@i
+}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-ro.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf.tex b/macros/generic/diagrams/xypic/texinputs/xypdf.tex
new file mode 100644
index 0000000000..176128f515
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf.tex
@@ -0,0 +1,522 @@
+%%
+%% This is file `xypdf.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `basic')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~muellner>
+%% --------------------------------------------------------------------------
+%%
+%% This program is free software: you can redistribute it and/or modify it
+%% under the terms of the GNU General Public License as published by the Free
+%% Software Foundation, either version 2 of the License, or (at your option)
+%% any later version.
+%%
+%% This program is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf
+%% package may be distributed and/or modified under the conditions of the
+%% GNU General Public License as published by the Free Software Foundation,
+%% either version 2 of the License, or (at your option) any later version.
+%% The distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% The xypdf package improves the output quality of the Xy-pic package when
+%% PDF documents are generated. It produces generic PDF code for graphical
+%% elements like lines, curves and circles instead of approximating these
+%% elements with glyphs in special fonts as the original Xy-pic package does.
+%% The xypdf package works with both TeX and LaTeX in the occurrences of
+%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\ifx\xyloaded\undefined\input xy \fi
+\xyprovide{pdf}{PDF driver}{1.7}{Daniel M\"ullner\newline}{\url{http://math.stanford.edu/~muellner}}{}
+\ifx\makeatletter\undefined\input miniltx \fi
+\newcommand*\xypdfdate{2011/03/20}
+\newdriver{\xyaddsupport{pdf}\xP@pdf@on
+\xyaddsupport{color}\xP@color@on
+\xyaddsupport{curve}\xP@curve@on
+\xyaddsupport{frame}\xP@frame@on
+\xyaddsupport{rotate}\xP@rotate@on
+}
+\xyaddunsupport{pdf}\xP@pdf@off
+\xyaddunsupport{color}\xP@color@off
+\xyaddunsupport{curve}\xP@curve@off
+\xyaddunsupport{frame}\xP@frame@off
+\xyaddunsupport{rotate}\xP@rotate@off
+\newcommand*\xypdfon{\xP@pdf@on
+\xP@color@on
+\xP@curve@on
+\xP@frame@on
+\xP@line@on
+\xP@rotate@on
+}
+\newcommand*\xypdfoff{\xP@pdf@off
+\xP@color@off
+\xP@curve@off
+\xP@frame@off
+\xP@line@off
+\xP@rotate@off
+}
+\ifx\unexpanded\@undefined
+\PackageError{xypdf}{eTeX is needed for the xypdf package}{}
+\fi
+\newcommand*\xP@testpdfsave{\ifpdf
+\ifx\pdfsave\@undefined
+\PackageError{xypdf}{pdfTeX version 1.40.0 or higher is needed for the xypdf^^Jpackage with PDF output}{}\fi
+\fi
+\let\xP@testpdfsave\@undefined
+}
+\ifx\PackageWarning\@undefined
+\newcommand*\xP@warning[2]{{\newlinechar`\^^J\@warning{Package #1 Warning: #2\@empty.}}}
+\else
+\newcommand*\xP@warning{\PackageWarning}
+\fi
+\newcommand*\xP@pdf@on{}
+\newcommand*\xP@pdf@off{}
+\newcommand*\xP@color@on{}
+\newcommand*\xP@color@off{}
+\newcommand*\xP@curve@on{}
+\newcommand*\xP@curve@off{}
+\newcommand*\xP@frame@on{}
+\newcommand*\xP@frame@off{}
+\newcommand*\xP@line@on{}
+\newcommand*\xP@line@off{}
+\newcommand*\xP@rotate@on{}
+\newcommand*\xP@rotate@off{}
+\newcommand*\xP@hook[2]{\edef\next@{\let\expandafter\noexpand\csname xP@old@#2\endcsname
+\expandafter\noexpand\csname#2\endcsname}\next@
+\expandafter\edef\csname xP@#1@on\endcsname{\unexpanded\expandafter\expandafter\expandafter{\csname xP@#1@on\endcsname}\let\expandafter\noexpand\csname#2\endcsname
+\expandafter\noexpand\csname xP@#2\endcsname
+}\expandafter\edef\csname xP@#1@off\endcsname{\unexpanded\expandafter\expandafter\expandafter{\csname xP@#1@off\endcsname}\let\expandafter\noexpand\csname#2\endcsname
+\expandafter\noexpand\csname xP@old@#2\endcsname
+}}
+\newcommand*\xP@defpdfliteral{\ifpdf
+\newcommand*\xP@literal[1]{\pdfsave\pdfliteral{##1}\pdfrestore}
+\newcommand*\xP@cm[5]{\pdfsave
+\pdfsetmatrix{##1 ##2 ##3 ##4}##5\pdfrestore
+}
+\@ifundefined{@pdfcolorstack}{\def\@pdfcolorstack{\z@}}{}\newcommand*\xP@setcolor[3]{\pdfcolorstack\@pdfcolorstack push{##1 ##2 ##1 ##3}}
+\newcommand*\xP@resetcolor{\pdfcolorstack\@pdfcolorstack pop\relax}\else
+\newcommand*\xP@literal{\xP@warning{xypdf}{The produced DVI file is NOT PORTABLE. Convert it with^^Jdvipdfm(x) to the PDF format but do not expect the DVI file itself to be^^Jdisplayed correctly\@gobble}\global\let\xP@literal\xP@literal@
+\xP@literal
+}
+\newcommand*\xP@literal@[1]{\special{pdf:content ##1}}
+\newcommand*\xP@cm[5]{\special{pdf:btrans matrix ##1 ##2 ##3 ##4 0 0}##5\special{pdf:etrans}}
+\newcommand*\xP@setcolor[3]{\special{pdf:bcolor[##1]}}
+\newcommand*\xP@resetcolor{\special{pdf:ecolor}}\fi
+\let\xP@defpdfliteral\@undefined
+}
+\DN@{\@firstofone}
+\DNii@{xy}
+\ifx\@currname\nextii@
+\ifx\AtEndOfPackage\@undefined
+\else
+\DN@{\AtEndOfPackage}\fi
+\fi
+\next@
+{\RequirePackage{ifpdf}\xP@testpdfsave
+\xP@defpdfliteral}
+\ifx\pdfdecimaldigits\@undefined
+\newcommand*\xP@digits{2}
+\else
+\@ifdefinable\xP@digits\relax
+\xdef\xP@digits{\the\pdfdecimaldigits}
+\ifnum\pdfdecimaldigits<2
+\xP@warning{xypdf}{The precision in \string\pdfdecimaldigits\space is only \xP@digits\space
+decimals.^^JIt is recommended to set \string\pdfdecimaldigits\space to 2 or 3 for best output quality\@gobble}
+\fi
+\fi
+\newcommand*\xP@dim[1]{\expandafter\xP@removePT\the\dimexpr(#1)*800/803\relax\space}
+\newcommand*\xP@precdim[1]{\xP@EARPT\dimexpr(#1)*800/803\relax\space}
+\newcommand*\xP@EARPT{\expandafter\removePT@\the}
+\newcommand*\xP@coor[1]{\xP@dim{#1}\xP@dim}
+\@ifdefinable\xP@removePT\relax
+{\@makeother\p\@makeother\t\gdef\xP@removePT#1pt{\xP@removePT@#10000@}}
+\@ifdefinable\xP@removePT@\relax
+\ifcase\xP@digits
+\def\xP@removePT@#1.#2#3@{\ifnum#2<5
+#1\else
+\the\numexpr-\if-#1-\else-#1+\fi\@ne\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5@{\ifnum#4<5
+#1#2\if#30\else
+.#3\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3pt+\if#1--\fi.12pt\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5#6@{\ifnum#5<5
+#1#2\if#40\if#30\else
+.#3\fi
+\else
+.#3#4\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3#4pt+\if#1--\fi786sp\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5#6#7@{\ifnum#6<5
+#1#2\if#50\if#40\if#30\else
+.#3\fi
+\else
+.#3#4\fi
+\else
+.#3#4#5\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3#4#5pt+\if#1--\fi79sp\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5#6#7#8@{\ifnum#7<5
+#1#2\if#60\if#50\if#40\if#30\else
+.#3\fi
+\else
+.#3#4\fi
+\else
+.#3#4#5\fi
+\else
+.#3#4#5#6\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3#4#5#6pt+\if#1--\fi8sp\relax
+\fi
+}
+\else
+\let\xP@dim\xP@precdim
+\fi
+\AtBeginDocument{{\setboxz@h{$ $}}\@ifdefinable\xP@lw\relax
+\@ifdefinable\xP@preclw\relax
+\edef\xP@preclw{\the\fontdimen8\textfont3}\edef\xP@lw{\xP@dim\xP@preclw}\PackageInfo{xypdf}{Line width: \xP@preclw}}
+\xP@hook{pdf}{line@}
+\newcommand*\xP@line@{\setboxz@h{\xP@setsolidpat
+\xP@stroke{0 0 m \xP@coor{\cosDirection\xydashl@}{\sinDirection\xydashl@}l}}\U@c\sinDirection\xydashl@
+\D@c\z@
+\ifdim\U@c<\z@
+\multiply\U@c\m@ne
+\xP@swapdim\U@c\D@c
+\fi
+\ht\z@\U@c
+\dp\z@\D@c
+\R@c\cosDirection\xydashl@
+\L@c\z@
+\ifdim\R@c<\z@
+\multiply\R@c\m@ne
+\xP@swapdim\L@c\R@c
+\fi
+\hskip\L@c\boxz@\hskip\R@c
+\edef\tmp@{\egroup\U@c\the\U@c\D@c\the\D@c\L@c\the\L@c\R@c\the\R@c}\tmp@
+\Edge@c={\rectangleEdge}\edef\Upness@{\ifdim\z@<\U@c1\else0\fi}\edef\Leftness@{\ifdim\z@<\L@c1\else0\fi}\def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}}
+\xP@hook{pdf}{solid@}
+\newcommand*\xP@solid@{\straight@\xP@solidSpread}
+\@ifdefinable\xP@solidSpread\relax
+\def\xP@solidSpread#1\repeat@{{\@tempswatrue
+\ifdim\X@p=\X@c
+\ifdim\Y@p=\Y@c
+\@tempswafalse
+\fi
+\fi
+\if@tempswa
+\xP@setsolidpat
+\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi
+}}
+\newcommand*\xP@pattern{}
+\newcommand*\xP@setsolidpat{\def\xP@pattern{1 J 1 j []0 d}\global\let\xP@lastpattern\xP@solidmacro
+}
+\newcommand*\xP@stroke[1]{\xP@literal{\xP@lw w \xP@pattern\space#1 S}}
+\xP@hook{pdf}{dash@}
+\newcommand\xP@dash@{\line@\def\Connect@@{\straight@\xP@dashedSpread}}
+\@ifdefinable\xP@dashedSpread\relax
+\def\xP@dashedSpread#1\repeat@{{\xP@veclen
+\ifdim\@tempdimb>\z@
+\xP@setdashpat
+\xP@savec
+\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi
+}}
+\newcommand*\xP@setdashpat{\xP@testcont\xP@dashmacro
+\ifxP@splinecont
+{\count@\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax
+\global\dimen@i
+\ifnum\count@>\z@
+\dimexpr\@tempdimb/\count@\relax
+\else
+\z@
+\fi
+}\@tempdima\dimen@i
+\edef\xP@pattern{1 J 1 j [\ifdim\@tempdima>\z@
+\xP@precdim\@tempdima]\xP@precdim\@tempdima
+\else
+]0 \fi
+d}\else
+\@tempdima
+\ifdim\@tempdimb>\xydashl@
+\dimexpr\@tempdimb/(2*((\@tempdimb+\xydashl@)/(2*\xydashl@))-1)\relax
+\else
+\z@
+\fi
+\edef\xP@pattern{1 J 1 j [\ifdim\@tempdima>\z@\xP@precdim\@tempdima\fi
+]0 d}\fi
+\global\let\xP@lastpattern\xP@dashmacro
+}
+\newcommand*\xP@setcldashpat{{\count@\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax
+\xdef\@gtempa{1 J 1 j [\ifnum\count@>\z@\xP@precdim{\@tempdimb/\count@}\fi]\ifnum\count@>\z@\xP@precdim{\@tempdimb*3/2/\count@}\else0 \fi d}}\edef\xP@pattern{\@gtempa}}
+\xP@hook{pdf}{point@}
+\newcommand*\xP@point@{\xP@zerodot\egroup\Invisible@false
+\Hidden@false\def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@
+\def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xP@dottedSpread}}
+\newcommand*\xP@zerodot{\hb@xt@\z@{\hss
+\vbox to\z@{\vss\hrule\@width\xP@preclw\@height\xP@preclw\vss}\hss}}
+\@ifdefinable\xP@dottedSpread\relax
+\def\xP@dottedSpread#1\repeat@{{\xP@veclen
+\ifdim\@tempdimb>\z@
+\xP@setdottedpat
+\xP@savec
+\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi
+}}
+\newcommand*\xP@setdottedpat{\xP@testcont\xP@dotmacro
+\ifxP@splinecont
+\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax
+\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@
+\xP@precdim\xP@preclw\xP@precdim\@tempdima
+\fi
+]\xP@precdim{\xP@preclw+1sp}d}\else
+\advance\@tempdimb-\xP@preclw
+\ifdim\@tempdimb<\z@\@tempdimb\z@\fi
+\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax
+\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@
+\xP@precdim\xP@preclw\xP@precdim\@tempdima
+\fi
+]0 d}\fi
+\global\let\xP@lastpattern\xP@dotmacro
+}
+\newcommand*\xP@setcldottedpat{\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax
+\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@
+\xP@precdim\xP@preclw\xP@precdim\@tempdima
+\fi
+]\xP@precdim{\dimexpr\xP@preclw+\@tempdima/2\relax}d}}
+\newcommand*\xP@abs[1]{\ifdim#1<\z@\multiply#1\m@ne\fi}
+\newcommand*\xP@ifabsless[2]{\ifpdfabsdim#1<#2}
+\ifx\ifpdfabsdim\@undefined
+\renewcommand*\xP@ifabsless[2]{\ifdim\ifdim#1<\z@-\fi#1<\ifdim#2<\z@-\fi#2}
+\@gobble\fi
+\fi
+\newcommand*\xP@swapdim[2]{\@tempdima#1#1#2#2\@tempdima}
+\newcommand*\xP@swapnum[2]{\@tempcnta#1#1#2#2\@tempcnta}
+\newcommand*\xP@min[2]{\ifdim#1<#2#1\else#2\fi}
+\newcommand*\xP@max[2]{\ifdim#1>#2#1\else#2\fi}
+\newcommand*\xP@Max[2]{#1\ifdim#2<\z@\xP@max#1{-#2}\else\xP@max#1#2\fi}
+\newcommand*\xP@sqrt{\loop
+\@tempdimb\dimexpr(\@tempdimc+(\@tempdima*\p@/\@tempdimc))/2\relax
+\unless\ifdim\@tempdimc=\@tempdimb
+\@tempdimc\@tempdimb\relax
+\repeat
+}
+\newcommand*\xP@veclen{{\xP@veclen@
+\global\dimen@i\@tempdimb
+}\@tempdimb\dimen@i
+}
+\newcommand*\xP@veclen@{\xP@abs\d@Y
+\ifdim\d@X=\z@
+\@tempdimb\d@Y
+\else
+\xP@abs\d@X
+\ifdim\d@Y=\z@
+\@tempdimb\d@X
+\else
+\@tempswatrue
+\ifdim\d@X>5931641sp\relax\@tempswafalse\fi
+\ifdim\d@Y>5931641sp\relax\@tempswafalse\fi
+\if@tempswa
+\count@\@ne
+\loop
+\@tempdima\dimexpr\d@X*\d@X/\p@+\d@Y*\d@Y/\p@\relax
+\ifdim\@tempdima<4096pt
+\@tempcnta\ifdim\@tempdima<1024pt\ifdim\@tempdima<256pt8\else4\fi\else\tw@\fi
+\multiply\d@X\@tempcnta
+\multiply\d@Y\@tempcnta
+\multiply\count@\@tempcnta
+\repeat
+\@tempdimc\dimexpr(\d@X+\d@Y)*3/4\relax
+\xP@sqrt
+\@tempdimb\dimexpr\@tempdimb/\count@\relax
+\else
+\ifdim\d@X>83042982sp\relax\@tempswatrue\fi
+\ifdim\d@Y>83042982sp\relax\@tempswatrue\fi
+\if@tempswa
+\@tempdima\dimexpr\d@X/182*\d@X/11927552+\d@Y/182*\d@Y/11927552\relax
+\@tempdimc\dimexpr(\d@X+\d@Y)*3/728\relax
+\xP@sqrt
+\multiply\@tempdimb182\relax
+\else
+\@tempdima\dimexpr\d@X*\d@X/12845056+\d@Y*\d@Y/12845056\relax
+\@tempdimc\dimexpr(\d@X+\d@Y)*3/56\relax
+\xP@sqrt
+\multiply\@tempdimb14\relax
+\fi
+\fi
+\fi
+\fi
+}
+\xP@hook{pdf}{squiggledSpread@}
+\@ifdefinable\xP@squiggledSpread@\relax
+\def\xP@squiggledSpread@#1\repeat@{{\xP@veclen
+\ifdim\@tempdimb>\z@
+\edef\@tempa{\xP@coor\X@p\Y@p m }\toks@\expandafter{\@tempa}\@tempcnta\numexpr\@tempdimb/\xybsqll@\relax
+\ifnum\@tempcnta<\tw@\@tempcnta\tw@\fi
+\@tempdima\dimexpr\d@X/\@tempcnta\relax
+\@tempdimc\dimexpr\d@Y/\@tempcnta\relax
+\xP@testcont\xP@oddsquigglemacro
+\ifxP@splinecont
+\def\xP@squigsign{-}\else
+\let\xP@squigsign\@empty
+\fi
+\count@\z@
+\loop
+\xP@append\toks@{\xP@coor{\X@p+\d@X*\count@/\@tempcnta+(\@tempdima
+-\xP@squigsign\ifodd\count@-\fi\@tempdimc)*147546029/534618434}{\Y@p+\d@Y*\count@/\@tempcnta+(\@tempdimc
++\xP@squigsign\ifodd\count@-\fi\@tempdima)*147546029/534618434}}\advance\count@\@ne
+\xP@append\toks@{\xP@coor{\X@p+\d@X*\count@/\@tempcnta-(\@tempdima
+-\xP@squigsign\ifodd\count@-\fi\@tempdimc)*147546029/534618434}{\Y@p+\d@Y*\count@/\@tempcnta-(\@tempdimc
++\xP@squigsign\ifodd\count@-\fi\@tempdima)*147546029/534618434}\xP@coor{\X@p+\d@X*\count@/\@tempcnta}{\Y@p+\d@Y*\count@/\@tempcnta}c }\ifnum\count@<\@tempcnta
+\repeat
+\xP@setsolidpat
+\global\expandafter\let\expandafter\xP@lastpattern
+\ifodd\numexpr\count@\if\xP@squigsign-+1\fi\relax
+\xP@oddsquigglemacro
+\else
+\xP@evensquigglemacro
+\fi
+\xP@savec
+\xP@stroke{\the\toks@}\fi
+}}
+\newcommand*\xP@squigsign{}
+\newcommand*\xP@append[2]{{\edef\@tempa{#1{\the#1#2}}\expandafter}\@tempa
+}
+\xP@hook{pdf}{circhar@@}
+\newcommand*\xP@circhar@@[1]{\expandafter\xP@circhar@@@\ifcase#1 000{-173517671/654249180}{65307479/619869377}{-34221476/65864945}{225058681/768398401}{-543339720/768398401}\or
+0{-543339720/768398401}{181455824/967576667}{-554561898/619869377}{826676217/1870772527}{-1}{543339720/768398401}{-1}\or
+0{-1}{173517671/654249180}{-1}{34221476/65864945}{-554561898/619869377}{543339720/768398401}{-543339720/768398401}\or
+0{-543339720/768398401}{181455824/967576667}{-34221476/65864945}{225058681/768398401}{-173517671/654249180}{225058681/768398401}0\or
+0{543339720/768398401}{181455824/967576667}{34221476/65864945}{225058681/768398401}{173517671/654249180}{225058681/768398401}0\or
+01{173517671/654249180}1{34221476/65864945}{554561898/619869377}{543339720/768398401}{543339720/768398401}\or
+0{543339720/768398401}{181455824/967576667}{554561898/619869377}{826676217/1870772527}1{543339720/768398401}1\or
+000{173517671/654249180}{65307479/619869377}{34221476/65864945}{225058681/768398401}{543339720/768398401}\fi}
+\newcommand\xP@circhar@@@[8]{\xP@setsolidpat
+\xP@stroke{\xP@coor{\R@*#1}{\R@*#2}m
+\xP@coor{\R@*#3}{\R@*#4}\xP@coor{\R@*#5}{\R@*#6}\xP@coor{\R@*#7}{\R@*#8}c}\vrule width\z@ height\R@ depth\R@
+\kern\dimexpr\R@*#7\relax
+}
+\xP@hook{pdf}{cirrestrict@@}
+\newcommand*\xP@cirrestrict@@{\count@\z@\relax}
+\newcommand*\xP@trigfromdir[1]{{\Direction#1\relax
+\count@-\Direction
+\advance\count@4096
+\divide\count@2048
+\ifcase\count@
+\d@X\K@\p@
+\d@Y\numexpr\Direction-3*\K@\relax\p@
+\or
+\d@X\numexpr\Direction-\K@\relax\p@
+\d@Y-\K@\p@
+\or
+\d@X-\K@\p@
+\d@Y\numexpr-\Direction-\K@\relax\p@
+\or
+\d@X\numexpr-\Direction-3*\K@\relax\p@
+\d@Y\K@\p@
+\else
+\PackageError{xypdf}{Unexpected case in direction calculation}{Feel free to contact the author of the xypdf package with a minimal example.}\fi
+\xP@veclen
+\xdef\@gtempa{\def\noexpand\cosDirection{\xP@EARPT\dimexpr\d@X*\p@/\@tempdimb\relax}\def\noexpand\sinDirection{\xP@EARPT\dimexpr\d@Y*\p@/\@tempdimb\relax}}}\@gtempa
+}
+\outer\def\@tempa{\alloc@1\dimen\dimendef\insc@unt}
+\let\xP@newdimen\newdimen
+\ifx\newdimen\@tempa
+\def\xP@newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\fi
+\outer\def\@tempa#1{\count@=\escapechar\escapechar=-1
+\expandafter\expandafter\expandafter
+\def\@if#1{true}{\let#1=\iftrue}\expandafter\expandafter\expandafter
+\def\@if#1{false}{\let#1=\iffalse}\@if#1{false}\escapechar=\count@}
+\let\@tempa\relax
+\newcommand*\xP@lastX{}
+\newcommand*\xP@lastY{}
+\newcommand*\xP@lastpattern{}
+\newcommand*\xP@solidmacro{solid}
+\newcommand*\xP@dotmacro{dot}
+\newcommand*\xP@dashmacro{dash}
+\newcommand*\xP@evensquigglemacro{evensquiggle}
+\newcommand*\xP@oddsquigglemacro{oddsquiggle}
+\newcommand*\xP@brokensquigglemacro{brokensquiggle}
+\renewcommand*\xyinside@{\global\let\xP@lastpattern\@empty
+\saveXyStyle@ \aftergroup\xycheck@end
+\setboxz@h\bgroup
+\plainxy@
+\X@c=\z@\Y@c=\z@\czeroEdge@
+\X@p=\z@\Y@p=\z@\U@p=\z@\D@p=\z@\L@p=\z@\R@p=\z@\Edge@p={\zeroEdge}\X@min=\hsize\X@max=-\hsize\Y@min=\hsize\Y@max=-\hsize
+\mathsurround=\z@
+\expandafter\POS\everyxy@@
+}
+\newcommand*\xP@savec{\xdef\xP@lastX{\the\X@c}\xdef\xP@lastY{\the\Y@c}}
+\@ifdefinable\ifxP@splinecont\relax
+\@ifdefinable\xP@splineconttrue\relax
+\@ifdefinable\xP@splinecontfalse\relax
+\newif\ifxP@splinecont
+\newcommand*\xP@testcont[1]{\xP@splinecontfalse
+\ifxP@cont
+\ifx\xP@lastpattern#1\ifdim\xP@lastX=\X@p
+\ifdim\xP@lastY=\Y@p
+\xP@splineconttrue
+\fi
+\fi
+\fi
+\fi
+}
+\@ifdefinable\ifxP@cont\relax
+\@ifdefinable\xP@conttrue\relax
+\@ifdefinable\xP@contfalse\relax
+\newif\ifxP@cont
+\newcommand*\xypdfcontpatternon{\xP@conttrue}
+\newcommand*\xypdfcontpatternoff{\xP@contfalse}
+\xP@conttrue
+\let\@tempa\@undefined
+\let\nextii@\@undefined
+\DN@{\xywithoption{color}{\message{Xy-pic pdf driver: `color' extension support}\@ifundefined{xypdf-co@loaded}{\input xypdf-co\relax}{\message{not reloaded}}}\xywithoption{curve}{\message{Xy-pic pdf driver: `curve' extension support}\@ifundefined{xypdf-cu@loaded}{\input xypdf-cu\relax}{\message{not reloaded}}}\xywithoption{frame}{\message{Xy-pic pdf driver: `frame' extension support}\@ifundefined{xypdf-fr@loaded}{\input xypdf-fr\relax}{\message{not reloaded}}}\xywithoption{line}{\message{Xy-pic pdf driver: `line' extension support}\@ifundefined{xypdf-li@loaded}{\input xypdf-li\relax}{\message{not reloaded}}}\xywithoption{rotate}{\message{Xy-pic pdf driver: `rotate' extension support}\@ifundefined{xypdf-ro@loaded}{\input xypdf-ro\relax}{\message{not reloaded}}}}
+\next@
+\xyendinput
+%%
+%% End of file `xypdf.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypic.sty b/macros/generic/diagrams/xypic/texinputs/xypic.sty
new file mode 100644
index 0000000000..befdb653b4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypic.sty
@@ -0,0 +1,32 @@
+%% $Id: xypic.sty,v 3.4 2010/04/16 06:06:52 krisrose Exp $ -*-tex-*-
+%%
+%% LaTeX style option to load Xy-pic in version 2 compatibility mode.
+%% by Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is in the public domain. It is distributed in the hope that it
+%% will be useful, but WITHOUT ANY WARRANTY; without even the implied
+%% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+\input{xy.sty}
+\xyoption{v2}
+\catcode`\@=\xystycatcode
+\endinput
+
+% $Log: xypic.sty,v $
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.8 1994/04/08 04:30:00 kris
+% Second (bug fix) 3alpha release.
+%
+% Revision 2.7 1994/03/08 02:06:01 kris
+% Release 3alpha.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypic.tex b/macros/generic/diagrams/xypic/texinputs/xypic.tex
new file mode 100644
index 0000000000..db0839b363
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypic.tex
@@ -0,0 +1,24 @@
+%% xypic.tex from $Id: xypic.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic v2 compatibility loading.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\input xyv2
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypicture.tex b/macros/generic/diagrams/xypic/texinputs/xypicture.tex
new file mode 100644
index 0000000000..d1d44c3f2d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypicture.tex
@@ -0,0 +1,55 @@
+%% xypicture.tex from $Id: xypicture.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``LaTeX Picture Mode'' option.
+%% Copyright (c) 199802011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{picture}{LaTeX Picture extension}{\stripRCS$Revision: 3.6 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.J.Watson Research Center, P.O.Box 704, Yorktown Heights, NY 10598, USA}
+\xynew@{dimen}\xyp@xsize
+\xynew@{dimen}\xyp@ysize
+\xylet@\xyp@arrow=\relax
+{\xyuncatcodes\makeatletter
+ \gdef\xyp@tail{}
+ \gdef\xyp@mid{-}
+ \gdef\xyp@head{>}
+}
+\xydef@\xyvector(#1,#2)#3{%
+ \xyp@xsize#3\relax
+ \ifnum#1<\z@\multiply\xyp@xsize\m@ne\fi
+ \xyp@ysize\xyp@xsize\relax
+ \ifnum#1=\z@
+ \xyp@xsize\z@
+ \ifnum#2<\z@\multiply\xyp@ysize\m@ne\fi
+ \else
+ \multiply\xyp@ysize#2\relax\divide\xyp@ysize#1\relax
+ \fi
+ \edef\xyp@arrow{\noexpand\arAT{\xyp@tail\xyp@mid\xyp@head}}%
+ \ifnum#1<\z@
+ \makebox(\xyp@xsize,\xyp@ysize){%
+ \begin{xy} 0;<\unitlength,\z@>:%
+ \xyp@arrow(\xyp@xsize,\xyp@ysize)
+ \end{xy}}%
+ \else
+ \xyp@arrow(\xyp@xsize,\xyp@ysize)\relax
+ \fi
+}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypoly.tex b/macros/generic/diagrams/xypic/texinputs/xypoly.tex
new file mode 100644
index 0000000000..48c01fe501
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypoly.tex
@@ -0,0 +1,609 @@
+%% xypoly.tex from $Id: xypoly.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Polygon'' feature.
+%% Copyright (c) 1994-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this macro package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{poly}{Polygon feature}{\stripRCS$Revision: 3.11 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{arrow}\xycatcodes
+\message{polygons,}
+\xynew@{count}\xypolynode@\xypolynode@=\m@ne
+\xydef@\xypolynode{\the\xypolynode@}
+\xydef@\xypolyNUMSIDES@{}
+\xydef@\xypolynum{\xypolyNUMSIDES@}
+\xydef@\xypolygon{\xypoly@}%
+\xydef@\xypoly@{%
+ \if\inxy@
+ \if\inxypoly@
+ \edef\next@{\noexpand\xy@@{\noexpand\nter@{\xypolynode@=\the\xypolynode@
+ \noexpand\def\noexpand\xypolyNUMSIDES@{\xypolyNUMSIDES@}}}}%
+ \else
+ \DN@{\xy@@{\def\inxypoly@{TT}%
+ \nter@{\def\inxypoly@{TF}\xypolynode@=\m@ne}}}%
+ \fi
+ \else
+ \if\inxypoly@
+ \edef\next@{\noexpand\xy
+ \noexpand\xy@@{\noexpand\nter@{\xypolyside=\the\xypolyside
+ \noexpand\def\noexpand\xypolyNUMSIDES@{\xypolyNUMSIDES@}\endxy}}}%
+ \else
+ \DN@{\xy \xy@@{\def\inxypoly@{TT}%
+ \nter@{\def\inxypoly@{TF}\xypolynode@=\m@ne \endxy}}}%
+ \fi
+ \fi
+ \next@ \count@=\z@ \xyFN@\xypoly@n}
+\xydef@\inxypoly@{TF}%
+\xydef@\xypoly@x{\xy@@{\leave@\leave@}}
+\xydef@\xypoly@n{%
+ \DN@##1{\multiply\count@10\relax \advance\count@##1\relax \xyFN@\xypoly@n}%
+ \ifx \space@\next
+ \ifnum\count@>\z@ \expandafter\DN@\space@{\xyFN@\xypoly@i}%
+ \else \expandafter\DN@\space@{\xyFN@\xypoly@n}\fi
+ \else\ifx 0\next \else\ifx 1\next \else\ifx 2\next \else\ifx 3\next
+ \else\ifx 4\next \else\ifx 5\next \else\ifx 6\next \else\ifx 7\next
+ \else\ifx 8\next \else\ifx 9\next
+ \else \let\next@=\xypoly@i \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\xypoly@i{\edef\xypolyNUMSIDES@{\the\count@}\xyFN@\xygetpolyprefix@}
+\xydef@\xypolyPREFIX@{}%
+\xydef@\xypolyPREFIX@@{}%
+\xydef@\xypolyname{\xypolyPREFIX@}%
+\xydef@\xygetpolyprefix@{%
+ \ifx\next"\DN@"##1"{\def\xypolyPREFIX@@{##1}\expandafter
+ \edef\csname\xypolyPREFIX@@ NUMSIDES\endcsname{\xypolyNUMSIDES@}%
+ \xypolyprefix@@ }%
+ \else
+ \ifnum\xypolynode@<\z@\def\xypolyPREFIX@@{}%
+ \else
+ \edef\xypolyPREFIX@@{\xypolyPREFIX@\the\xypolynode@,}%
+ \fi \DN@{\xypolyprefix@@}%
+ \fi \next@ }
+\xydef@\xypolyprefix@@{%
+ \expandafter\toks@\expandafter{\addEQ@\POS"}%
+ \expandafter\addtotoks@\expandafter{\xypolyPREFIX@@0"\relax}%
+ \the\toks@
+ \ifnum\xypolynode@<\z@
+ \expandafter\def\expandafter\xypolyPREFIX@\expandafter{\xypolyPREFIX@@}%
+ \xy@@{\enter@{\xypolynode@=\the\xypolynode@
+ \noexpand\def\noexpand\xypolyPREFIX@{\xypolyPREFIX@}}\xypolynode@=\z@ }%
+ \else
+ \xy@@{\enter@{\xypolynode@=\the\xypolynode@
+ \noexpand\def\noexpand\xypolyPREFIX@{\xypolyPREFIX@}}\xypolynode@=\z@ }%
+ \expandafter\def\expandafter\xypolyPREFIX@\expandafter{\xypolyPREFIX@@}%
+ \fi
+ \xypoly@@i }
+\xydef@\xypoly@@i#1#{\begingroup
+ \DN@{#1}\ifx\next@\empty\else
+ \xywarning@{discarding unused tokens: #1}\fi \xypoly@@ }
+\xydef@\xypoly@@#1{\xypolydefaults@
+ \DN@{#1}\ifx\next@\empty\DN@{\xypoly@@@}%
+ \else \DN@{\xyFN@\xypolyparams@#1~!}\fi \next@}
+\xydef@\xypolydefaults@{\def\xypolySCALE@{}%
+ \def\xypolySPOKES@{{}}\def\xypostSPOKES@{}\let\xypreSPOKES@\relax
+ \def\xypolySIDES@{{-}}\def\xypostSIDES@{}\let\xypreSIDES@\relax
+ \def\xypolyVERTEX@{}\def\xypolyALIGN@{}}
+{\xyuncatcodes \gdef\next{*=0}}
+\xylet@\xypolynullvertex@=\next
+{\xyuncatcodes \gdef\next{*[o]}}
+\xylet@\xypolyvertex@=\next
+{\xyuncatcodes \gdef\next{*+[o]}}
+\xylet@\xypolywidevertex@=\next
+\xydef@\xypolyparams@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xypolyparams@}%
+ \else\ifx\next~\DN@~{\xyFN@\xypolywhich@}%
+ \else\ifx\next\bgroup\DN@##1~!{%
+ \ifx\empty\xypolyVERTEX@\expandafter
+ \def\expandafter\xypolyVERTEX@\expandafter{\xypolyvertex@{##1}}%
+ \else\xypolyVERTEXerror@{##1}\fi \xypoly@@@}%
+ \else\DN@##1~!{\DN@{##1}\ifx\next@\empty\else
+ \ifx\empty\xypolyVERTEX@\def\xypolyVERTEX@{*##1}%
+ \expandafter\checkpolytok@\expandafter\xypolyVERTEX@
+ \expandafter{\xypolynullvertex@}##1@@!\relax
+ \else\xypolyVERTEXerror@{##1}\fi\fi \xypoly@@@}%
+ \fi\fi\fi \next@ }
+\xydef@\xypolyVERTEXerror@#1{\xywarning@{%
+ vertex already specified, discarding unused tokens:#1}}
+\xydef@\xypolywhich@{%
+ \ifx\next!\DN@!{\xypoly@@@}%
+ \else \addLT@\ifx\next \addLT@\DN@{\xyFN@\xypoly@SPOKES@}%
+ \else \addGT@\ifx\next \addGT@\DN@{\xyFN@\xypoly@SIDES@}%
+ \else \addEQ@\ifx\next \addEQ@\DN@##1{%
+ \def\xypolyALIGN@{##1}\xyFN@\xypolyparams@ }%
+ \else \ifx :\next \DN@:##1{%
+ \def\xypolySCALE@{##1}\xyFN@\xypolyparams@ }%
+ \else\ifx\next*\DN@*##1{\expandafter
+ \def\expandafter\xypolyVERTEX@\expandafter{\xypolywidevertex@{##1}}%
+ \xyFN@\xypolyparams@}%
+ \fi\fi\fi\fi\fi\fi \next@ }
+\xydef@\xypoly@SPOKES@{%
+ \addLT@\ifx\next \addLT@\DN@##1{%
+ \def\xypreSPOKES@{##1}\def\xypolySPOKES@{}\xyFN@\xypolyparams@ }%
+ \else \addGT@\ifx\next \addGT@\DN@##1{%
+ \def\xypostSPOKES@{##1}\xyFN@\xypolyparams@ }%
+ \else \ifx\next\bgroup \DN@##1{%
+ \def\xypolySPOKES@{##1}\let\xypreSPOKES@\relax
+ \checkpolytok@\xypolySPOKES@{}##1@@!{\xyFN@\xypolyparams@}}%
+ \else \DN@##1{%
+ \let\xypreSPOKES@\relax \def\xypolySPOKES@{{##1}}\xyFN@\xypolyparams@}%
+ \fi\fi\fi \next@ }
+\xydef@\xypoly@SIDES@{%
+ \addLT@\ifx\next \addLT@\DN@##1{%
+ \def\xypreSIDES@{##1}\def\xypolySIDES@{}\xyFN@\xypolyparams@ }%
+ \else \addGT@\ifx\next \addGT@\DN@ ##1{%
+ \def\xypostSIDES@{##1}\xyFN@\xypolyparams@ }%
+ \else \ifx\next\bgroup \DN@##1{%
+ \def\xypolySIDES@{##1}\let\xypreSIDES@\relax
+ \checkpolytok@\xypolySIDES@{}##1@@!{\xyFN@\xypolyparams@}}%
+ \else \DN@##1{%
+ \let\xypreSIDES@\relax \def\xypolySIDES@{{##1}}\xyFN@\xypolyparams@}%
+ \fi\fi\fi \next@ }
+\xydef@\checkpolytok@#1#2#3#4@!#5{\DNii@{#1}\DN@{#4}%
+ \ifx\next@\empty\expandafter\def\nextii@{{}}%
+ \else\ifx#4@\expandafter\def\nextii@{#2{#3}}\fi\fi #5}
+\xydef@\xytrigerror@#1#2{\string#1 only works from 0 to 12}
+\xydef@\cosPIon#1{\ifcase#1 1\or-1\or0\or.5\or\halfroottwo\or
+ .809017\or\halfrootthree\or.900969\or.92388\or.939693\or.951057\or
+ .959493\or.965926\else1\xytrigerror@\cosPIon{#1}\fi}
+\xydef@\sinPIon#1{\ifcase#1 0\or0\or1\or\halfrootthree\or\halfroottwo\or
+ .587785\or.5\or.433884\or.382683\or.34202\or.309017\or
+ .281733\or.258819\else0\xytrigerror@\sinPIon{#1}\fi}
+\xydef@\cosTwoPIon#1{\ifcase#1 1\or1\or-1\or-\cosPIon3\or\cosPIon2\or
+ \sinPIon{10}\or\cosPIon3\or.62349\or\cosPIon4\or
+ .766044\or\cosPIon5\or.841254\or\cosPIon6%
+ \else1\xytrigerror@\cosTwoPIon{#1}\fi}
+\xydef@\sinTwoPIon#1{\ifcase#1 0\or0\or0\or-\sinPIon3\or\sinPIon2\or
+ \cosPIon{10}\or\sinPIon3\or.781831\or\sinPIon4\or
+ .642788\or\sinPIon5\or.540641\or\sinPIon6%
+ \else0\xytrigerror@\sinTwoPIon{#1}\fi}
+\xydef@\cosThreePIon#1{\ifcase#1 1\or-1\or0\or-1\or-\cosPIon4\or
+ -\cosPIon5\or\cosPIon2\or.222521\or\sinPIon8\or\cosPIon3\or
+ \sinTwoPIon5\or.654861\or\cosPIon4%
+ \else1\xytrigerror@\cosThreePIon{#1}\fi}
+\xydef@\sinThreePIon#1{\ifcase#1 0\or0\or1\or0\or\sinPIon4\or
+ \sinTwoPIon5\or\sinPIon2\or.974928\or\cosPIon8\or\sinPIon3\or
+ \cosTwoPIon5\or.75575\or\sinPIon4%
+ \else0\xytrigerror@\sinThreePIon{#1}\fi}
+\xydef@\cosFourPIon#1{\ifcase#1 1\or1\or1\or-\cosPIon3\or-1\or-\cosPIon5\or
+ \cosTwoPIon3\or-\cosThreePIon7\or0\or.173648\or\cosTwoPIon5\or
+ .415415\or\cosPIon3%
+ \else1\xytrigerror@\cosFourPIon{#1}\fi}
+\xydef@\sinFourPIon#1{\ifcase#1 0\or0\or0\or-\sinPIon3\or0\or\sinPIon5\or
+ \sinTwoPIon3\or\sinThreePIon7\or1\or.984808\or\sinTwoPIon5\or
+ .909632\or\sinPIon3%
+ \else0\xytrigerror@\sinFourPIon{#1}\fi}
+\xydef@\cosFivePIon#1{\ifcase#1 1\or-1\or0\or\cosPIon3\or-\cosPIon4\or
+ -1\or-\cosPIon6\or-\cosTwoPIon7\or-\cosThreePIon8\or-\cosFourPIon9\or
+ 0\or.142315\or\sinPIon{12}%
+ \else1\xytrigerror@\cosFivePIon{#1}\fi}
+\xydef@\sinFivePIon#1{\ifcase#1 0\or0\or1\or-\sinPIon3\or-\sinPIon4\or
+ 0\or\sinPIon6\or\sinTwoPIon7\or\sinThreePIon8\or\sinFourPIon9\or1\or
+ .989821\or\cosPIon{12}%
+ \else0\xytrigerror@\sinFivePIon{#1}\fi}
+\xydef@\xypoly@@@{\count@=\xypolyNUMSIDES@\relax
+ \ifx\xypolyALIGN@\empty
+ \ifnum\count@<\thr@@\relax\DN@{\xypolytoosmall@{\the\count@}}%
+ \else \advance\count@-\thr@@
+ \ifcase\count@ \DN@{\xyPolygon@@@\xytriangle@@}%
+ \or \DN@{\xyPolygon@@@\xysquare@@}%
+ \or \DN@{\xyPolygon@@@\xypentagon@@}%
+ \or \DN@{\xyPolygon@@@\xyhexagon@@}%
+ \or \DN@{\xyPolygon@@@\xyheptagon@@}%
+ \or \DN@{\xyPolygon@@@\xyoctagon@@}%
+ \or \DN@{\xyPolygon@@@\xynonagon@@}%
+ \or \DN@{\xyPolygon@@@\xydecagon@@}%
+ \or \DN@{\xyPolygon@@@\xyundecagon@@}%
+ \or \DN@{\xyPolygon@@@\xydodecagon@@}%
+ \else \DN@{\xylargePolygon@{0}{\xypolyNUMSIDES@}}%
+ \fi\fi
+ \else
+ \DN@{\xylargePolygon@{\xypolyALIGN@}{\xypolyNUMSIDES@}}%
+ \fi \next@ \xypoly@@@x}
+\xydef@\xypoly@@@x{\restore\xypoly@x}
+\xydef@\xypolytoosmall@#1{\xyerror@{#1 sides is too few for a polygon}}
+\xydef@\xyPolygon@@@#1{%
+ \toks@={\def\xypolyNUMSIDES@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyNUMSIDES@}\save}%
+ \ifx\empty\xypolySCALE@ \addtotoks@{\POS"}%
+ \else \addtotoks@{\POS;0;}%
+ \expandafter\addtotoks@\expandafter{\xypolySCALE@\relax\POS"}%
+ \fi
+ \expandafter\addtotoks@\expandafter{\xypolyPREFIX@0"\relax}%
+ \ifx\xypreSPOKES@\relax
+ \addtotoks@{#1{;}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyVERTEX@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyPREFIX@}}%
+ \DN@##1\next@{\def\tmp@{**\dir##1}}%
+ \expandafter\next@\expandafter{\xypolySPOKES@}\next@
+ \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}%
+ \else
+ \expandafter\DN@\expandafter{\expandafter\ar\xypreSPOKES@}%
+ \addtotoks@{#1}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyVERTEX@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyPREFIX@}{}}%
+ \fi
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypostSPOKES@}}%
+ \ifx\xypreSIDES@\relax
+ \addtotoks@{{;}}%
+ \DN@##1\next@{\def\tmp@{**\dir##1}}%
+ \expandafter\next@\expandafter{\xypolySIDES@}\next@
+ \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}%
+ \else
+ \expandafter\DN@\expandafter{\expandafter\ar\xypreSIDES@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}{}}%
+ \fi
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypostSIDES@}}%
+ \ifx\xypolyALIGN@\empty
+ \ifnum\xypolyNUMSIDES@>12\addtotoks@{{0}}\fi
+ \else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyALIGN@}}%
+ \fi
+ \expandafter\DN@\expandafter{\expandafter\endgroup\the\toks@ }%
+ \next@}
+\xydef@\xytriangle@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(0,1)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(-\cosPIon6, -.5)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon6,-.5)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#33"#6"#31"#7#8\relax }
+\xydef@\xysquare@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\halfroottwo,\halfroottwo)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(-\halfroottwo,\halfroottwo)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\halfroottwo,\halfroottwo)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(-\halfroottwo,\halfroottwo)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#34"#6"#31"#7#8\relax }
+\xydef@\xypentagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\cosPIon{10},\sinPIon{10})#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(0,1)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\cosPIon{10},\sinPIon{10})#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon5,\cosPIon5)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon5,-\cosPIon5)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#35"#6"#31"#7#8\relax }
+\xydef@\xyhexagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(1,0)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(.5,\halfrootthree)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-.5,\halfrootthree)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(1,0)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(.5,\halfrootthree)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(-.5,\halfrootthree)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#36"#6"#31"#7#8\relax }
+\xydef@\xyheptagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\sinTwoPIon7,\cosTwoPIon7)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(0,1)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinTwoPIon7,\cosTwoPIon7)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinThreePIon7,\cosThreePIon7)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon7,\cosPIon7)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon7,-\cosPIon7)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinThreePIon7,-\cosThreePIon7)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#37"#6"#31"#7#8\relax }
+\xydef@\xyoctagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\cosPIon8,\sinPIon8)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\sinPIon8,\cosPIon8)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon8,-\cosPIon8)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon8,-\sinPIon8)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon8,\sinPIon8)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon8,\cosPIon8)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon8,-\cosPIon8)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon8,-\sinPIon8)#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#38"#6"#31"#7#8\relax }
+\xydef@\xynonagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\sinFourPIon9,\cosFourPIon9)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\sinTwoPIon9,\cosTwoPIon9)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(0,1)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinTwoPIon9,\cosTwoPIon9)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinFourPIon9,\cosFourPIon9)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon6,\sinPIon6)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon9,\cosPIon9)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon9,-\cosPIon9)#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon6,-\sinPIon6)#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#39"#6"#31"#7#8\relax }
+\xydef@\xydecagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(1,0)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\cosPIon5,\sinPIon5)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{10},\cosPIon{10})#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{10},-\cosPIon{10})#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon5,-\sinPIon5)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(1,0)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon5,\sinPIon5)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{10},\cosPIon{10})#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{10},-\cosPIon{10})#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon5,-\sinPIon5)#2="#310"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#39"#6"#310"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#310"#6"#31"#7#8\relax }
+\xydef@\xyundecagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\sinFourPIon{11},\cosFourPIon{11})#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\sinTwoPIon{11},\cosTwoPIon{11})#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(0,1)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinTwoPIon{11},\cosTwoPIon{11})#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinFourPIon{11},\cosFourPIon{11})#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinFivePIon{11},\cosFivePIon{11})#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinThreePIon{11},\cosThreePIon{11})#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{11},\cosPIon{11})#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{11},-\cosPIon{11})#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinThreePIon{11},-\cosThreePIon{11})#2="#310"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#39"#6"#310"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinFivePIon{11},-\cosFivePIon{11})#2="#311"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#310"#6"#311"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#311"#6"#31"#7#8\relax }
+\xydef@\xydodecagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\cosPIon{12},\sinPIon{12})#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\halfroottwo,\halfroottwo)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{12},\cosPIon{12})#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{12},-\cosPIon{12})#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\halfroottwo,-\halfroottwo)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon{12},-\sinPIon{12})#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon{12},\sinPIon{12})#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\halfroottwo,\halfroottwo)#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{12},\cosPIon{12})#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{12},-\cosPIon{12})#2="#310"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#39"#6"#310"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\halfroottwo,-\halfroottwo)#2="#311"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#310"#6"#311"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon{12},-\sinPIon{12})#2="#312"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#311"#6"#312"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#312"#6"#31"#7#8\relax }
+\xydef@\xylargePolygon@#1#2{%
+ \dimen@=#1\p@
+ \xyPolygon@@@\xypolygon@@}
+\xydef@\xypolyrepeat@{\fi}
+\xydef@\xypolybody@{}
+\xydef@\xypolyiterate@{\xypolybody@\expandafter\xypolyiterate@\else\fi}
+\xydef@\xypolyloop@#1\xypolyrepeat@{\def\xypolybody@{#1}\xypolyiterate@}
+\xydef@\xypolygon@@#1#2#3#4#5#6#7#8#9{\save
+ \vfromcartesianangle@{#9}\edef\next@{\the\X@c,\the\Y@c\addGT@\empty}%
+ \xy@@{\xypolynode@=\@ne}%
+ \toks@={\POS#1"#30"+}%
+ \expandafter\expandafter\expandafter\addtotoks@\expandafter
+ \expandafter\expandafter{\addLT@\empty}%
+ \expandafter\addtotoks@\expandafter{\next@#2="#31"#4#5\relax}%
+ \xy@@\dontleave@ \the\toks@
+ \xypolyloop@
+ \dimen@=360\p@ \count@@=\xypolyNUMSIDES@\relax \advance\dimen@ .5\count@@
+ \divide\dimen@ \xypolyNUMSIDES@ \relax
+ \multiply\dimen@\xypolynode@ \relax \advance\dimen@ #9\p@
+ \edef\tmp@{%
+ \noexpand\vfromcartesianangle@{\expandafter\removePT@\the\dimen@}}%
+ \tmp@ \edef\next@{\the\X@c,\the\Y@c\addGT@\empty}%
+ \xy@@{\advance\xypolynode@\@ne}\count@=\xypolynode@
+ \toks@={\POS"#30"#1"#30"+}\edef\nextii@{\the\count@}%
+ \expandafter\expandafter\expandafter\addtotoks@\expandafter
+ \expandafter\expandafter{\addLT@\space}%
+ \expandafter\addtotoks@\expandafter{\next@#2="#3}%
+ \expandafter\addtotoks@\expandafter{\nextii@"#4#5\relax}%
+ \the\toks@
+ \count@=\xypolynode@ \xy@@{\advance\xypolynode@\m@ne}%
+ \toks@={\POS"#3}\expandafter\addtotoks@\expandafter{\the\xypolynode@"#6"#3}%
+ \expandafter\addtotoks@\expandafter{\the\count@"#7#8\relax}%
+ \the\toks@
+ \xy@@{\advance\xypolynode@\@ne}\count@=\xypolyNUMSIDES@ \relax
+ \ifnum\xypolynode@<\count@ \relax \xypolyrepeat@
+ \toks@={\POS"#3}%
+ \expandafter\addtotoks@\expandafter{\xypolyNUMSIDES@"#6"#31"#7#8\relax}%
+ \the\toks@ \restore }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-c.tex b/macros/generic/diagrams/xypic/texinputs/xyps-c.tex
new file mode 100644
index 0000000000..e471ede76d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-c.tex
@@ -0,0 +1,69 @@
+%% xyps-c.tex from $Id: xyps-c.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Colour extension'' PostScript backend support.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-cloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-cloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx \csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\UsePScolor{\installPScolor@}
+\xydef@\NoPScolor{\UnloadColor@}
+\xydef@\installPScolor@{\installPSstyle@
+ \let\xymath@=\xyPSmath@ \let\xynomath@=\xyPSnomath@
+ \let\checkxyPScolor@=\checkxyPScolor@@
+ \let\xycolor@@=\xyPScolor@@
+ \xystandardcolors@
+ \xyuncatcodes }
+\xydef@\xyPSmath@{\hbox\bgroup\dimen@=.55ex \checkxyPScolor@ \xyinside@}
+\xydef@\xyPSnomath@{\hbox\bgroup\dimen@=\z@ \checkxyPScolor@ \xyinside@}
+\xydef@\checkxyPScolor@@{\xycolor@raw@@{}\let\checkxyPScolor@=\relax}
+\xylet@\checkxyPScolor@=\relax
+\xydef@\xyPSnewcolor@#1#2#3#4#5{%
+ \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}%
+ \DNii@{\relax}\ifx\next@\nextii@\newxycolor{#1}{}\relax\fi
+ \DNii@{#4}\ifx\nextii@\empty
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPScolor@{#2 #3}}\else
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPScolor@{#4}}\fi
+ \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}%
+ \else
+ \edef\tmp@{\noexpand\let\expandafter\noexpand\next@
+ \expandafter\noexpand\nextii@}\expandafter\tmp@\fi }
+\xydef@\xyPScolor@{\ifPSspecials@\expandafter\xyPScolor@@
+ \else\expandafter\eat@\fi}
+\xydef@\xyPScolor@@#1{\bgroup \checkXyStyle@
+ \def\preStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpre@}}%
+ \def\postStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpost@}}%
+ \let\modPSboxz@=\modXYstyle@ \xyPS@color@@{#1}%
+ \toks@={\egroup\let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
+ \the\toks@ }
+\xydef@\xyPS@color@@#1{\xyPSsplitPS@{{#1}cc}{}}
+\xydef@\xycolor@raw@@#1{\PSraw@@{xyc}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-col.tex b/macros/generic/diagrams/xypic/texinputs/xyps-col.tex
new file mode 100644
index 0000000000..83413ae77e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-col.tex
@@ -0,0 +1,97 @@
+%% xyps-col.tex from $Id: xyps-col.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Crayola colour names'' PostScript colour support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyrequire{color}\xycatcodes
+\newxycolor@{GreenYellow}{0.15 0 0.69 0}{cmyk}{}{}%
+\newxycolor@{Yellow}{0 0 1. 0}{cmyk}{}{}%
+\newxycolor@{Goldenrod}{0 0.10 0.84 0}{cmyk}{}{}%
+\newxycolor@{Dandelion}{0 0.29 0.84 0}{cmyk}{}{}%
+\newxycolor@{Apricot}{0 0.32 0.52 0}{cmyk}{}{}%
+\newxycolor@{Peach}{0 0.50 0.70 0}{cmyk}{}{}%
+\newxycolor@{Melon}{0 0.46 0.50 0}{cmyk}{}{}%
+\newxycolor@{YellowOrange}{0 0.42 1. 0}{cmyk}{}{}%
+\newxycolor@{Orange}{0 0.61. 0.87 0}{cmyk}{}{}%
+\newxycolor@{BurntOrange}{0 0.51 1. 0}{cmyk}{}{}%
+\newxycolor@{Bittersweet}{0 0.75 1. 0.24}{cmyk}{}{}%
+\newxycolor@{RedOrange}{0 0.77 0.87 0}{cmyk}{}{}%
+\newxycolor@{Mahogany}{0 0.85 0.87 0.35}{cmyk}{}{}%
+\newxycolor@{Maroon}{0 0.87 0.68 0.32}{cmyk}{}{}%
+\newxycolor@{BrickRed}{0 0.89 0.94 0.28}{cmyk}{}{}%
+\newxycolor@{Red}{0 1. 1. 0}{cmyk}{}{}%
+\newxycolor@{OrangeRed}{0 1. 0.50 0}{cmyk}{}{}%
+\newxycolor@{RubineRed}{0 1. 0.13 0}{cmyk}{}{}%
+\newxycolor@{WildStrawberry}{0 0.96 0.39 0}{cmyk}{}{}%
+\newxycolor@{Salmon}{0 0.53 0.38 0}{cmyk}{}{}%
+\newxycolor@{CarnationPink}{0 0.63 0 0}{cmyk}{}{}%
+\newxycolor@{Magenta}{0 1. 0 0}{cmyk}{}{}%
+\newxycolor@{VioletRed}{0 0.81 0 0}{cmyk}{}{}%
+\newxycolor@{Rhodamine}{0 0.82 0 0}{cmyk}{}{}%
+\newxycolor@{Mulberry}{0.34 0.90 0 0.02}{cmyk}{}{}%
+\newxycolor@{RedViolet}{0.07 0.90 0 0.34}{cmyk}{}{}%
+\newxycolor@{Fuchsia}{0.47 0.91 0 0.08}{cmyk}{}{}%
+\newxycolor@{Lavender}{0 0.48 0 0}{cmyk}{}{}%
+\newxycolor@{Thistle}{0.12 0.59 0 0}{cmyk}{}{}%
+\newxycolor@{Orchid}{0.32 0.64 0 0}{cmyk}{}{}%
+\newxycolor@{DarkOrchid}{0.40 0.80 0.20 0}{cmyk}{}{}%
+\newxycolor@{Purple}{0.45 0.86 0 0}{cmyk}{}{}%
+\newxycolor@{Plum}{0.50 1. 0 0}{cmyk}{}{}%
+\newxycolor@{Violet}{0.79 0.88 0 0}{cmyk}{}{}%
+\newxycolor@{RoyalPurple}{0.75 0.90 0 0}{cmyk}{}{}%
+\newxycolor@{BlueViolet}{0.86 0.91 0 0.04}{cmyk}{}{}%
+\newxycolor@{Periwinkle}{0.57 0.55 0 0}{cmyk}{}{}%
+\newxycolor@{CadetBlue}{0.62 0.57 0.23 0}{cmyk}{}{}%
+\newxycolor@{CornflowerBlue}{0.65 0.13 0 0}{cmyk}{}{}%
+\newxycolor@{MidnightBlue}{0.98 0.13 0 0.43}{cmyk}{}{}%
+\newxycolor@{NavyBlue}{0.94 0.54 0 0}{cmyk}{}{}%
+\newxycolor@{RoyalBlue}{1. 0.50 0 0}{cmyk}{}{}%
+\newxycolor@{Blue}{1. 1. 0 0}{cmyk}{}{}%
+\newxycolor@{Cerulean}{0.94 0.11 0 0}{cmyk}{}{}%
+\newxycolor@{Cyan}{1. 0 0 0}{cmyk}{}{}%
+\newxycolor@{ProcessBlue}{0.96 0 0 0}{cmyk}{}{}%
+\newxycolor@{SkyBlue}{0.62 0 0.12 0}{cmyk}{}{}%
+\newxycolor@{Turquoise}{0.85 0 0.20 0}{cmyk}{}{}%
+\newxycolor@{TealBlue}{0.86 0 0.34 0.02}{cmyk}{}{}%
+\newxycolor@{Aquamarine}{0.82 0 0.30 0}{cmyk}{}{}%
+\newxycolor@{BlueGreen}{0.85 0 0.33 0}{cmyk}{}{}%
+\newxycolor@{Emerald}{1. 0 0.50 0}{cmyk}{}{}%
+\newxycolor@{JungleGreen}{0.99 0 0.52 0}{cmyk}{}{}%
+\newxycolor@{SeaGreen}{0.69 0 0.50 0}{cmyk}{}{}%
+\newxycolor@{Green}{1. 0 1. 0}{cmyk}{}{}%
+\newxycolor@{ForestGreen}{0.91 0 0.88 0.12}{cmyk}{}{}%
+\newxycolor@{PineGreen}{0.92 0 0.59 0.25}{cmyk}{}{}%
+\newxycolor@{LimeGreen}{0.50 0 1. 0}{cmyk}{}{}%
+\newxycolor@{YellowGreen}{0.44 0 0.74 0}{cmyk}{}{}%
+\newxycolor@{SpringGreen}{0.26 0 0.76 0}{cmyk}{}{}%
+\newxycolor@{OliveGreen}{0.64 0 0.95 0.40}{cmyk}{}{}%
+\newxycolor@{RawSienna}{0 0.72 1. 0.45}{cmyk}{}{}%
+\newxycolor@{Sepia}{0 0.83 1. 0.70}{cmyk}{}{}%
+\newxycolor@{Brown}{0 0.81 1. 0.60}{cmyk}{}{}%
+\newxycolor@{Tan}{0.14 0.42 0.56 0}{cmyk}{}{}%
+\newxycolor@{Gray}{0 0 0 0.50}{cmyk}{}{}%
+\newxycolor@{Black}{0 0 0 1.}{cmyk}{}{}%
+\newxycolor@{White}{0 0 0 0}{cmyk}{}{}%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-f.tex b/macros/generic/diagrams/xypic/texinputs/xyps-f.tex
new file mode 100644
index 0000000000..83b5766591
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-f.tex
@@ -0,0 +1,127 @@
+%% xyps-f.tex from $Id: xyps-f.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Frame extension'' PostScript backend support.
+%% Copyright (c) 1995-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-floaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-floaded\endcsname=\empty \xycatcodes
+\xydef@\installPSframes@{%
+ \let\framed@body@@=\xyPSframed@body@
+ \let\circled@x@@=\xyPScircled@x@
+ \let\ellipsed@x@@=\xyPSellipsed@x@
+ \installPSfills@
+ \xyuncatcodes}
+\xydef@\UsePSframes{\installPSframes@}
+\xydef@\NoPSframes{\UnloadFrames@}
+\xydef@\xyPSframed@body@{\DN@{\framed@body@}%
+ \ifx\framehfill\frm@solidh@@
+ \DN@{\xyPSframed@oval@\xyPSoval@Special}%
+ \else\ifdim\R@=\z@\else
+ \ifx\framehfill\frm@dashh@@
+ \DN@{\xyPSframed@oval@\xyPSdashoval@Special}%
+ \else\ifx\framehfill\frm@doth@@
+ \DN@{\xyPSframed@oval@\xyPSdotoval@Special}%
+ \fi\fi
+ \fi\fi \next@ }
+\xydef@\xyPSframed@oval@#1{\vglue\U@c
+ \hbox{\hglue\L@c\xypsoval@#1\hglue\R@c}\vglue\D@c}
+\xydef@\xyPScircled@x@{\DN@{\xyPScircled@x@@\xyPScirc@Special}%
+ \ifx\framehfill\frm@doth@@
+ \DN@{\xyPScircled@x@@\xyPSdotcirc@Special}%
+ \else\ifx\framehfill\frm@dashh@@
+ \DN@{\xyPScircled@x@@\xyPSdashcirc@Special}%
+ \fi\fi \next@ }
+\xydef@\xyPScircled@x@@#1{\vglue2\R@
+ \hbox{\hglue2\R@\xypscircle@#1\hglue2\R@}%
+ \vglue2\R@}
+\xydef@\xyPSellipsed@x@#1#2{%
+ \DN@{\xyPSellipsed@x@@\xyPScirc@Special}%
+ \ifx\framehfill\frm@doth@@
+ \DN@{\xyPSellipsed@x@@\xyPSdotcirc@Special}%
+ \else\ifx\framehfill\frm@dashh@@
+ \DN@{\xyPSellipsed@x@@\xyPSdashcirc@Special}%
+ \fi\fi \next@{#1}{#2}}
+\xydef@\xyPSellipsed@x@@#1#2#3{\vglue #3\vglue #3\relax
+ \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c
+ \hglue#2\hglue#2\relax\xypsellipse@#1\hglue#2\hglue#2\relax}%
+ \vglue #3\vglue #3\relax}
+\xydef@\xyPSdashhfill@{{\SemiDirectionChar=95 \Direction=3072 \xyPSdash@}}
+\xydef@\xyPSdashvfill@{{\SemiDirection=31 \Direction=1023 \xyPSdash@}}
+\xydef@\xypsoval@#1{%
+ \dimen@=\L@c \advance\dimen@\R@c
+ \dimen@ii=\U@c \advance\dimen@ii\D@c
+ \ifdim\dimen@ii<\dimen@ \relax \dimen@=\dimen@ii\fi \divide\dimen@\tw@
+ \ifdim\R@>\dimen@ \relax \R@=\dimen@ \fi
+ \D@c=-\D@c \L@c=-\L@c
+ \edef\tmp@{\expandafter\removePT@\the\R@
+ \space\expandafter\removePT@\the\R@c
+ \space\expandafter\removePT@\the\D@c
+ \space\expandafter\removePT@\the\L@c
+ \space\expandafter\removePT@\the\U@c }%
+ \expandafter#1\expandafter{\tmp@}}
+\xydef@\xypscircle@#1{\dimen@=\R@
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter#1\expandafter{\tmp@}}
+\xydef@\xypsellipse@#1{\edef\tmp@{%
+ \expandafter\removePT@\the\U@c \space
+ \expandafter\removePT@\the\D@c \space
+ \expandafter\removePT@\the\L@c \space
+ \expandafter\removePT@\the\R@c }%
+ \expandafter#1\expandafter{\tmp@}}
+\xydef@\xyPSoval@Special#1{\PSmacro@{#1 ov}}
+\xydef@\xyPScirc@Special#1{\PSmacro@{#1 ox}}
+\xydef@\xyPSdotcirc@Special#1{\PSmacro@{#1 ot}}
+\xydef@\xyPSdashcirc@Special#1{\PSmacro@{#1 od}}
+\xydef@\xyPSdotoval@Special#1{\PSmacro@{#1 vt}}
+\xydef@\xyPSdashoval@Special#1{\PSmacro@{#1 vd}}
+\xydef@\xyPSfilledRegion#1#2{\setboxz@h{\lower\D@c\vbox{%
+ \vglue\U@c\hbox{#1#2\empty\hglue\L@c\hglue\R@c}\vglue\D@c}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\filledRectangle@PS{%
+ \xyPSfilledRegion{\xypsoval@\xyPSfilloval@Special}}
+\xydef@\filledCircle@PS#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@
+ \xyPSfilledRegion{\xypscircle@\xyPSfillcirc@Special}#1}}
+\xydef@\filledEllipse@PS{%
+ \xyPSfilledRegion{\xypsellipse@\xyPSfillellipse@Special}}
+\xydef@\filledOval@PS{%
+ \xyPSfilledRegion{\xypsoval@\xyPSfilloval@Special}}
+\xydef@\frame@emph@PS#1{\filled@{#1}\relax}
+\xydef@\installPSfills@{%
+ \let\frame@emph@@=\frame@emph@PS
+ \let\filledRectangle@@=\filledRectangle@PS
+ \let\filledOval@@=\filledOval@PS
+ \let\filledCircle@@=\filledCircle@PS
+ \let\filledEllipse@@=\filledEllipse@PS
+}
+\xydef@\xyPSfilloval@Special#1#2{%
+ \ifx#2\relax\PSmacro@{#1 sfo}%
+ \else\PSmacro@{#1 fo}\fi}
+\xydef@\xyPSfillcirc@Special#1#2{%
+ \ifx#2\relax\PSmacro@{#1 sfc}%
+ \else\PSmacro@{#1 fc}\fi}
+\xydef@\xyPSfillellipse@Special#1#2{%
+ \ifx#2\relax\PSmacro@{#1 sfe}%
+ \else\PSmacro@{#1 fe}\fi}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-l.tex b/macros/generic/diagrams/xypic/texinputs/xyps-l.tex
new file mode 100644
index 0000000000..4220082f6d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-l.tex
@@ -0,0 +1,68 @@
+%% xyps-l.tex from $Id: xyps-l.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Line extension'' PostScript backend support.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-lloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-lloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\installPSline@{\installPSstyle@
+ \installPSlinestyles@ \installPSpolylines@ }
+\xydef@\UsePSlines{\installPSline@}
+\xydef@\NoPSlines{\UnloadLine@\relax}
+\xydef@\xyPSlineSpecial@#1{\addtostyletoks@{ #1 lw}}
+\xydef@\xyPScapSpecial@#1{\addtostyletoks@{ #1 lc}}
+\xydef@\xyPSjoinSpecial@#1{\addtostyletoks@{ #1 lj}}
+\xydef@\xyPSmiterSpecial@#1{\addtostyletoks@{ #1 ml}}
+\xydef@\installPSlinestyles@{%
+ \let\xylinewidth@@=\xylinewidth@
+ \let\transxyline@@=\transxyline@
+ \let\xylineSpecial@@=\xyPSlineSpecial@
+ \let\resetxyline@@=\resetxyline@i
+ \let\xy@linecap@@=\xy@linecap@
+ \let\xycapSpecial@@=\xyPScapSpecial@
+ \let\resetxylinecap@@=\resetxylinecap@i
+ \let\xy@linejoin@@=\xy@linejoin@
+ \let\xyjoinSpecial@@=\xyPSjoinSpecial@
+ \let\resetxylinejoin@@=\resetxylinejoin@i
+ \let\xy@linemiter@@=\xy@linemiter@
+ \let\xymiterSpecial@@=\xyPSmiterSpecial@
+ \let\resetxylinemiter@@=\resetxylinemiter@i
+}
+\xydef@\xypolylinePS@Special#1{\PSmacro@{#1 pl}}
+\xydef@\xypolydotPS@Special#1{\PSmacro@{#1 pt}}
+\xydef@\xypolydashPS@Special#1{\PSmacro@{#1 pd}}
+\xydef@\xypolyfillPS@Special#1{\PSmacro@{#1 pf}}
+\xydef@\xypolyeofillPS@Special#1{\PSmacro@{#1 pe}}
+\xydef@\installPSpolylines@{%
+ \let\xypolyline@Special=\xypolylinePS@Special
+ \let\xypolydot@Special=\xypolydotPS@Special
+ \let\xypolydash@Special=\xypolydashPS@Special
+ \let\xypolyfill@Special=\xypolyfillPS@Special
+ \let\xypolyeofill@Special=\xypolyeofillPS@Special
+ \let\xy@polystyle@@=\xy@polystyle@ }
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex b/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex
new file mode 100644
index 0000000000..17aa385d2f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex
@@ -0,0 +1,173 @@
+%% xyps-pro.tex from $Id: xyps-pro.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript Prolog'' for PostScript support.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+\begingroup \xycatcodes%
+ \count@=\xydashl@\relax \count@@=\xydashw@\relax%
+ \let\firstPS@@=\relax%
+ \xyPSobeylines@@%
+\PSspecialdict@@{%
+/XYdict where not{250 dict /XYdict exch def
+ /xy{mark exch XYdict begin countdictstack /xylevel exch def
+ xyopen xycolor mark xypatt xypattern stopped xyclose end
+ cleartomark}def /xyg{gsave xy}def
+ /xyf{currentfont exch xy grestore setfont}def
+ /xycc{{xychgcol}xy}def /xyc{XYdict begin xycolstore end}def
+ /xyx{/xyYpos exch def /xyXpos exch def}def
+ /xyp{currentpoint xyx}def
+ /xyd{setupDirection XYdirection 2 mul}def
+ /xyct{currentpoint xyt 2 copy 6 2 roll}def
+ /xyt{xyXpos xyYpos 2 copy translate}def /xyr{neg rotate xynt}def
+ /xyrs{neg rotate 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xynt{neg exch neg exch translate}def /xys{scale xynt}def
+ /xyss{scale 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xyi{0 0 transform grestore gsave itransform}def
+ }if}%
+\tmp@false\def\do#1{\DN@{#1}\ifx\next@\nextii@\tmp@true\fi}%
+\DNii@{17oztex}\xydriversselected@@\iftmp@\PSspecialdict@@{%
+ /@boxy{prespecialVM restore grestore}def
+ /@eoxy{gsave /prespecialVM save def}def
+ }%
+\else \DNii@{oztex}\xydriversselected@@\iftmp@\PSspecialdict@@{%
+ /@oxy{prespecialVM restore grestore}def
+ /@oxy{gsave /prespecialVM save def}def
+ }\fi\fi%
+\PSdict@@{/XYdict where pop begin XYdict begin}%
+\PSdict@@{%
+ /xyopen{currentdict /XYddict known{XYddict null eq{}
+ {XYddict begin xyopen}ifelse}if}def
+ /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
+ /xychgcol{/xycolor exch def}def /xysetcol{xypush xychgcol}def
+}%
+\PSdict@@{%
+ /xypush{16 dict /XYddict exch def XYddict begin}def
+ /undef where
+ {pop /xypop{countdictstack xylevel eq{}{end}ifelse
+ currentdict /XYddict undef}def}
+ {/xypop{countdictstack xylevel eq{}{end}ifelse
+ /XYddict null def}def}ifelse
+ /pu /xypush load def /pp /xypop load def}%
+\PSdict@@{%
+ /xypspt{72 72.27 div dup scale}bind def /pscorrect{.85 mul}bind def
+ /gstartxy{gsave xypspt xywidth xycap xyjoin xymiter newpath 0 0 moveto}def
+ /xypath{gstartxy rmoveto counttomark 2 idiv -1 1{pop lineto}for}def
+ /xystroke{stroke grestore}bind def
+ /xyfill{closepath fill grestore}bind def
+ /xystfil{closepath gsave fill grestore 0 setgray
+ 0 setlinewidth xystroke}bind def
+ /xyeofill{closepath eofill grestore}bind def
+}%
+\PSdict@@{%
+ /xypolyline{xypath xystroke}def /xypolyfill{xypath xyfill}def
+ /xydotsep{/@ currentlinewidth 2 mul def}def
+ /xypolydot{xypath xydotsep [xydt @] 0 setdash xystroke}def
+ /xypolydash{xypath xydotsep [@ @] 0 setdash xystroke}def
+ /xypolyeofill{xypath xyeofill}def /pe /xypolyeofill load def
+ /pl /xypolyline load def /pf /xypolyfill load def
+ /pt /xypolydot load def /pd /xypolydash load def }%
+\PSdict@@{%
+ /arc4pop{arcto 4{pop}repeat}bind def
+ /xyoval{gstartxy oval closepath xystroke}def
+ /xycircle{gstartxy circle xystroke}def
+ /circle{dup 0 moveto 0 0 3 -1 roll 0 360 arc}def
+ /oval{newpath 2 copy exch 5 index add 2 div exch 3 copy 10 3 roll
+ moveto 1 index dup 5 1 roll 3 index 7 index arc4pop
+ dup dup 4 1 roll 4 index exch 6 index arc4pop
+ 1 index dup 8 1 roll 4 index 4 index arc4pop
+ arc4pop closepath}def
+ /xyellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ circle xystroke}def
+ /ov /xyoval load def /ox /xyellipse load def }%
+\PSdict@@{%
+ /dotit{dup currentlinewidth 6 mul div round div
+ /@ exch def [xydt @] 0 setdash}def
+ /elldash{dup 4 -1 roll 10 exch div dashit}def
+ /ovdash{dup 10 dashit}def
+ /dashit{div round 2 mul div /@ exch def [@ @] 0 setdash}def
+ /dotcirc{gstartxy cirlen dotit circle xystroke}def
+ /dashcirc{gstartxy cirlen dashit circle xystroke}def
+ /dotoval{gstartxy 5 copy ovlen dotit oval xystroke}def
+ /dashoval{gstartxy 5 copy ovlen ovdash oval xystroke}def
+ /cirlen{dup 6.283185 mul}bind def
+ /ovlen{3 -1 roll sub 3 1 roll sub add exch 1.716815 mul sub}def
+ /dotellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ cirlen dotit circle closepath xystroke}def
+ /dashellipse{gstartxy counttomark 1 gt{squarify add 2 div 1}
+ {1 exch 1 exch}ifelse cirlen elldash circle xystroke}def
+ /ot /dotellipse load def /od /dashellipse load def
+ /vt /dotoval load def /vd /dashoval load def }%
+\PSdict@@{%
+ /filloval{gstartxy oval xyfill}def
+ /stfiloval{gstartxy oval xystfil}def
+ /fillcircle{gstartxy circle xyfill}def
+ /stfilcircle{gstartxy circle xystfil}def
+ /fillellipse{gstartxy squarify pop pop 1 circle xyfill}def
+ /stfilellipse{gstartxy squarify pop pop 1 circle xystfil}def
+ /squarify{4 copy sub 2 div 3 1 roll sub 2 div translate
+ add 2 div 3 1 roll add 2 div 2 copy scale
+ 2 copy add 2 div currentlinewidth exch div setlinewidth
+ newpath}def
+ /fe /fillellipse load def /sfe /stfilellipse load def
+ /fo /filloval load def /sfo /stfiloval load def
+ /fc /fillcircle load def /sfc /stfilcircle load def }%
+\PSdict@@{%
+ /xywidth{.4 pscorrect setlinewidth}bind def
+ /xydash{[] 0 setdash}bind def /xycap{1 setlinecap}bind def
+ /xyjoin{1 setlinejoin}bind def /xymiter{10 setmiterlimit}bind def
+}%
+\PSdict@@{%
+ /cc{dup exec xychgcol}def
+ /lw{dup setlinewidth /@l exch def
+ /xywidth{@l setlinewidth}bind def}def
+ /lc{dup setlinecap /@c exch def
+ /xycap{@c setlinecap}bind def}def
+ /lj{dup setlinejoin /@j exch def
+ /xyjoin{@j setlinejoin}bind def}def
+ /ml{dup setmitrelimit /@m exch def
+ /xymiter{@m setmitrelimit}bind def}def
+}%
+\PSdict@@{%
+ /setupDirection{dup -2048 lt{3072 add neg 1024 exch}
+ {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch}
+ {3072 sub 1024}ifelse}ifelse}ifelse atan
+ dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def
+ }%
+\PSdict@@{%
+ userdict begin
+ /gray{setgray}bind def /gray@{setgray}bind def
+ /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def
+ /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def
+ /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll
+ exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll
+ exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse
+ /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def
+ /sethalftone where{/sethalftone load /tone exch def}if
+ /xycolarray 3 array def /xycolstore{currentrgbcolor 2 -1 0
+ {exch xycolarray 3 1 roll put}for}def xycolstore
+ /xycolor{0 1 2{xycolarray exch get}for setrgbcolor}def
+ /xypatt{}def /xypattern{cleartomark}bind def
+ end}%
+\PSdict@@{end end}%
+\endgroup%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex b/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex
new file mode 100644
index 0000000000..5fa607c10e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex
@@ -0,0 +1,280 @@
+%% xyps-ps.tex from $Id: xyps-ps.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PS-PS'' PostScript support.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-psloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-psloaded\endcsname=\empty \xycatcodes
+\xylet@\PSmacro@@=\eat@
+\xylet@\PSdict@@=\eat@
+\xylet@\PSspecial@@=\eat@
+\xylet@\PSread@@=\eat@
+\xylet@\PSinclude@@=\eat@
+\xylet@\PSraw@@=\eat@
+\xylet@\xyPSobeylines@@=\relax
+\xylet@\PSspecialdict@@=\eat@
+\xydef@\UnloadPSps@{%
+ \let\PSmacro@@=\eat@
+ \let\PSdict@@=\eat@
+ \let\PSspecial@@=\eat@
+ \let\PSread@@=\eat@
+ \let\PSinclude@@=\eat@
+ \let\PSraw@@=\eat@
+ \let\xyPSobeylines@@=\relax
+ \let\PSspecialdict@@=\eat@
+}
+\xydef@\UnloadPS@{\UnloadPSps@
+ \expandafter\ifx\csname xypsloaded\endcsname\unknown\PSspecials@false
+ \else\expandafter\NoPSspecials\fi}
+\xylet@\UnloadPS@@=\UnloadPS@
+\ifx\undefined\dvitype@\xydef@\dvitype@{null}\fi
+\xylet@\xyrealshipout@=\shipout
+\xydef@\xyPSshipout@{\setbox9=\copy\voidb@x
+ \afterassignment\xyPSshipout@i\setbox9=}
+\xydef@\xyPSshipout@i{\ifvoid9 \expandafter\aftergroup\fi\xyPSshipout@ii}
+\xydef@\xyPSshipout@ii{\xyrealshipout@\vbox{\XYpredict@@\box9}}
+\xydef@\@PSshipout{\global\let\shipout=\xyPSshipout@ }
+\xydef@\xyPSshipout@PSii{%
+ \ifUsePSdict@@\let\XYshipdict@=\includeXYPSdict@@
+ \else\def\XYshipdict@{\XYpredict@@\XYdict@@}\fi
+ \xyrealshipout@\vbox{\XYshipdict@\box9}}
+\xydef@\firstPS@{%
+ \global\let\firstPS@@=\relax \global\let\firstPS@=\relax}
+\xylet@\firstPS@@=\firstPS@
+\ifx\undefined\dumpPSdict@@ \xylet@\dumpPSdict@@=\relax \fi
+\xydef@\installxyps@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}\xycatcodes
+ \installxyps@@ \installxyps@x }
+\xylet@\installxyps@@=\relax
+\xylet@\setupxyPS@@=\relax
+\xywithoption{ps}{\let\setupxyPS@@=\setupxyPS@}
+\xydef@\installxyps@x{\dumpPSdict@@
+ \ifx\xyrealshipout@\undefined \let\xyrealshipout@=\shipout\fi
+ \ifx \shipout \xyrealshipout@
+ \ifUsePSdict@@ \DN@{\includePSmessage@\includeXYPSdict@\message{>}}%
+ \else \DN@{\XYdict@\endXYdict@}\fi
+ \else \DN@{\let\xyPSshipout@ii=\xyPSshipout@PSii \@PSshipout}\fi
+ \let\firstPS@=\relax \next@
+ \let\XYpredict@=\relax
+ \setupxyPS@@ }
+\let\realinstallxyps@x=\installxyps@x
+\ifx\undefined\AfterBeginDocument
+ \def\installxyps@x{\xysetup@@{\realinstallxyps@x}}%
+\else
+ \def\installxyps@x{\AfterBeginDocument{\realinstallxyps@x}}%
+\fi
+\xydef@\xydefaultdriver@{dvips}
+\xydef@\xyPSdriver#1{\def\xydefaultdriver@{#1}}
+\xydef@\installxyps@orig{\DN@{}%
+ \ifx\xydriversselected@@\empty
+ \DN@{\expandafter\defaultinstallps@\expandafter{\xydefaultdriver@}}%
+ \else \def\do##1{%
+ \expandafter\ifx\csname##1@xy@ps\endcsname\relax
+ \DN@{\defaultinstallps@{##1}}}%
+ \xydriversselected@@
+ \else \DN@##1{}\fi\fi \next@ }
+\xydef@\defaultinstallps@#1#2{%
+ \xywarning@{no driver specified, using #1 }%
+ \xyrequire{#1}\csname #1@xy@ps\endcsname{}}
+\xydef@\null@xy@ps{\installxyps@}
+\xydefcsname@{shape [!...]}#1{%
+ \expandafter\ifx\csname xyps-sloaded\endcsname\empty \DN@{\xyPSescapestyle@{#1}@@}%
+ \else\ifxyPSshapes@\DN@{\xyPSshapechar@{#1}@@}%
+ \else \DN@{\xyPScharwarning@}\fi\fi \next@ }
+\xydefcsname@{shape [psxy]}{\ifxyPSshapes@\DN@{\xyPSpsxy@}%
+ \else \DN@{\xyPScharwarning@}\fi \next@ }
+\xydef@\xyPSpsxy@{%
+ \setboxz@h{\dimen@=\L@p \advance\dimen@-\R@p
+ \dimen@ii=-\U@p \raise\dimen@ii\hbox to\z@{%
+ \kern\dimen@\xyPScurrpt@\kern-\dimen@}\boxz@}}%
+\xydef@\xyPScurrpt@{\ifxyPSshapes@\expandafter\xyPScurrpt@@\fi}
+\xydef@\xyPScurrpt@@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
+\ifx\undefined\xyPScurrpt@@ \xylet@\xyPScurrpt@@=\xyPScurrpt@@@ \fi
+\xywarnifdefined\xyPSshapechar@
+\xywarnifdefined\xyPSsplitshape@
+{\xyuncatcodes \catcode`@=11
+ \gdef\xyPSshapechar@#1@@{\xyPSsplitshape@#1<><>@@}%
+ \gdef\xyPSsplitshape@#1<>#2<>#3@@{\xyPSsplitPS@{#1}{#2}}}
+\xydef@\xyPSrawA@#1{\expandafter\xyPSrawAA@ #1{}}%
+\xydef@\xyPSrawAA@#1#2{\PSraw@@{{pu #1}xyg #2}%
+ \PSmessage{{pu #1}xyg #2}}%
+\xydef@\xyPSrawZ@#1{\PSraw@@{{#1 pp}xyf}\PSmessage{{#1 pp}xyf}}%
+\xydef@\modPSboxz@{%
+ \expandafter\DN@\expandafter{\xyPSpre@{}}\ifx\next@\empty\else
+ \setboxz@h{\expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}\boxz@
+ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}\DN@{}\fi}%
+\xydef@\modPSdrop@{%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}%
+ \expandafter\next@\expandafter{\Drop@@}%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}%
+ \DN@##1{\expandafter\def\expandafter\Drop@@\expandafter{\tmp@ ##1}}%
+ \expandafter\next@\expandafter{\nextii@}}%
+\xydef@\modPSconnect@{%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}%
+ \expandafter\next@\expandafter{\Connect@@}%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}%
+ \DN@##1{\expandafter\def\expandafter\Connect@@\expandafter{\tmp@ ##1}}%
+ \expandafter\next@\expandafter{\nextii@}}%
+\xydef@\xyPSpre@{{}{}}
+\xydef@\xyPSpost@{}
+\xydef@\PSmessage@#1{\W@{PS: #1, direction=\the\Direction}}
+\xydef@\PSignore@#1{}%
+\xydef@\showPSmessages{\let\PSmessage=\PSmessage@}
+\xydef@\hidePSmessages{\let\PSmessage=\PSignore@}
+\xylet@\PStracing=\showPSmessages
+\hidePSmessages
+\xydef@\PSmacro@#1{\PSmacro@@{#1}\PSmessage{#1}}
+\xydef@\includeXYPSdict@@{%
+ \expandafter\PSinclude@@\expandafter{\xyPSdictname}}
+\xydef@\includeXYPSdict@r{\message{PS: includeXYPSdict}\includeXYPSdict@@
+ \let\includeXYPSdict@=\relax}
+\xylet@\includeXYPSdict@\includeXYPSdict@r
+\xydef@\endXYdict@{}
+\xydef@\includePSmessage@@{\message{<xyps: including \xyPSdictname}}
+\xylet@\includePSmessage@=\includePSmessage@@
+\xydef@\xyPSdictknown@{%
+ \immediate\closein\xyread@
+ \xywarning@{File \xyPSdictname\space already exists}
+ \message{ Do you wish to overwrite it \string? y/n }%
+ \read16 to \next
+ \DNii@{\xywarning@{You did not type Y or N -- try again please}%
+ \xyPSdictknown@}%
+ \DN@{Y }\ifx\next@\next \DNii@{\writePSdict@@}%
+ \else\DN@{y }\ifx\next@\next \DNii@{\writePSdict@@}%
+ \else\DN@{n }\ifx\next@\next \DNii@{\cancelPSdict@}%
+ \else\DN@{N }\ifx\next@\next \DNii@{\cancelPSdict@}%
+ \fi\fi\fi\fi \nextii@ }
+\xydef@\cancelPSdict@{%
+ \xywarning@{cancelling dump of PostScript dictionary}}
+\xydef@\noDictmessage@{%
+ \xywarning@{\dvitype@\space does not support the use of a header file}}
+\DN@{\csname newif\endcsname\ifUsePSdict@@\DN@{}}
+ \ifx\undefined\UsePSdict@@true\else\DN@{}\fi \next@
+\ifx\undefined\xyPSdefaultdict
+ \xydef@\xyPSdefaultdict{%
+ \DN@##1.##2.##3@{\gdef\xyPSdictname{xy##1##2dict.pro}}%
+ \expandafter\next@\xyversion.@}%
+\fi
+\ifx\undefined\UsePSheader@
+ \xydef@\UsePSheader@#1{%
+ \DN@{#1}\ifx\next@\empty
+ \else \gdef\xyPSdictname{#1}\fi
+ \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi
+ \gdef\xyHeaderMessage@{%
+ It includes a reference to the PostScript file \xyPSdictname.^^J}%
+ \UsePSdict@@true}%
+ \let\UsePSheader=\UsePSheader@
+\fi
+\xywarnifdefined\xyPS@@
+\xywarnifdefined\xyPS@@@
+{\catcode`|=14 \catcode`\%=12 \catcode`\<=1 \catcode`\>=2 |
+ \gdef\xyPS@@<%%>\gdef\xyPS@@@<%!>}
+\xydef@\writePSdict@@{\message{PS: writePSdict@@}\writePSdict@
+ \def\writePSdict@@{\message{write PS relaxed}}}
+{\catcode`|=14 \catcode`\%=12
+ \gdef\writePSdict@{{\begingroup|
+ \immediate\openout\xywrite@=\xyPSdictname \relax
+ \message{<xyps: dumping \xyPSdictname}|
+ \def\PSdict@@@##1{\immediate\write\xywrite@{##1}}|
+ \let\xyPSobeylines@@=\obeyoutlines@
+ \let\firstPS@@=\relax
+ \let\endXYdict@=\relax
+ \PSdict@@@{\xyPS@@@ PS-Adobe-3.0 Resource-procset}|
+ \PSdict@@@{\xyPS@@ Title: \xyPSdictname}|
+ \PSdict@@@{\xyPS@@ Version: 3.8.9}|
+ \PSdict@@@{\xyPS@@ Creator: Xy-ps backend to Xy-pic}|
+ \PSdict@@@{\xyPS@@ DocumentSuppliedProcSets: XYdict}|
+ \ifx\dvitype@\undefined
+ \PSdict@@@{\xyPS@@ For: use with Xy-pic}\else
+ \PSdict@@@{\xyPS@@ For: \dvitype@ use of Xy-pic}\fi
+ \PSdict@@@{\xyPS@@ BeginResource: procset XYdict}|
+ \def\PSspecialdict@@##1{\PSdict@@@{##1^^J}}|
+ \let\PSdict@@=\PSdict@@@ \let\xy@begindvi=\literal@|
+ \UsePSdict@@false\XYpredict@@|
+ \XYdict@@|
+ \PSdict@@@{\xyPS@@ EndResource}|
+ \immediate\closeout\xywrite@
+ \message{>}|
+ \endgroup}}}
+\xywarnifdefined\obeyoutlines@
+{\catcode`\^^M=\active%
+ \gdef\obeyoutlines@{\catcode`\^^M=\active \def^^M{^^J}%
+ \newlinechar=`\^^J\obeyspaces}}
+\xydef@\XYpredict@@{\ifUsePSdict@@\DN@{}\else
+ \DN@{\xy@begindvi{\xyinputorelse@{xyps-pro}%
+ {\xyerror@{Could not load xyps-pro}{}}\xyuncatcodes}}%
+ \next@
+ \DN@{\xy@begindvi{\xyinputorelse@{xypspatt}%
+ {\xyerror@{Could not load xypspatt}{}}\xyuncatcodes}}\fi
+ \next@ }
+\xydef@\XYpredict@r{\XYpredict@@ \let\XYpredict@=\relax \installxyps@}
+\xylet@\XYpredict@\XYpredict@r
+\xydef@\XYdict@{\XYdict@@\def\XYdict@{\message{PS relaxed}}}%
+\xydef@\XYdict@@{\DN@{\xyinputorelse@{xypsdict}%
+ {\xyerror@{Could not load xypsdict}{}}\xyuncatcodes}%
+ \expandafter\xy@begindvi\expandafter{\next@}}
+\xydef@\forceload@XYdict{%
+ \let\includeXYPSdict@=\includeXYPSdict@r
+ \let\XYpredict@=\XYpredict@r
+ \let\XYdict@=\XYdict@@ \expandafter\installxyps@ }
+\xynew@{if}\ifxyPSshapes@ \xyPSshapes@true
+\xydef@\xyPScharwarning@@{\xyPScharmessage@
+ \gdef\xyPScharwarning@@{\xyPScharmessage@
+ \xywarning@{...no further PostScript warnings will be given}%
+ \global\let\xyPScharwarning@@=\relax }}
+\xydef@\xyPScharmessage@{\xywarning@{%
+ the current <driver> does not fully support PostScript effects}}%
+\xydef@\newxyshape#1#2#3{%
+ \DN@{#3}\ifx\next@\empty
+ \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}%
+ \else \expandafter\def\csname shape [#1]\endcsname{%
+ \csname xyshape@#1@\endcsname}\fi
+ \DN@{#2}\ifx\next@\empty
+ \expandafter\def\csname xyshape@#1@\endcsname{%
+ \xyundefinedEffect@{#1}{}@@}%
+ \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi }
+\xydef@\xyundefinedEffect@#1#2@@{%
+ \xywarning@{The #1 #2 effect is not implemented with the current driver}}%
+\xydef@\newxyPSshape#1#2{%
+ \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}%
+ \DNii@{\relax}\ifx\next@\nextii@ \newxyshape{#1}{}\relax\fi
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{#2}%
+ \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}%
+ \else
+ \edef\tmp@{\noexpand\let\expandafter\noexpand\next@
+ \expandafter\noexpand\nextii@}%
+ \expandafter\tmp@\fi }
+\xydef@\xyPSnotimplemented@@#1@@{%
+ \xywarning@{This PostScript effect is not implemented yet}}%
+\xydef@\xyPSnotfinished@@{%
+ \xywarning@{This effect is not reliable yet; box sizes may be wrong}}%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-r.tex b/macros/generic/diagrams/xypic/texinputs/xyps-r.tex
new file mode 100644
index 0000000000..c862790063
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-r.tex
@@ -0,0 +1,61 @@
+%% xyps-r.tex from $Id: xyps-r.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript Rotations and Scaling''.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-rloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-rloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\installPSrotscale@{\installPSstyle@
+ \let\xyRotate@@=\xyPSrotate@@
+ \let\doSpecialRotate@@=\doPSspecialRotate@@
+ \let\xyscale@@=\xyPSscale@@
+ \xyPSshapes@true
+ \xyuncatcodes }
+\xydef@\UsePSrotate{\installPSrotscale@}
+\xydef@\NoPSrotate{\UnloadRotate@\relax}
+\xydef@\xyPSpretransform@{\xyPSrawA@{\preXYtransform@@}}
+\xydef@\xyPSposttransform@{\xyPSrawZ@{\postXYtransform@@}}
+\let\preXYtransform@=\xyPSpretransform@
+\let\postXYtransform@=\xyPSposttransform@
+\xydef@\xyPSrotSplit@{%
+ \expandafter\def\expandafter\preShape@@\expandafter{\xyPSpre@}%
+ \expandafter\def\expandafter\postShape@@\expandafter{\xyPSpost@}}
+\xydef@\xyPSscale@@#1#2{%
+ \xyPSsplitPS@{\xyscale@start(#1,#2)}{\xyscale@end}%
+ \xyPSrotSplit@\xyPSpsxy@ }
+\xydef@\xyPSrotate@@#1{%
+ \xyPSsplitPS@{\xyrot@start(#1 xyd)}{\xyrot@end}%
+ \xyPSrotSplit@\xyPSpsxy@ }
+\xydef@\xyPSspecialRotate@#1{%
+ \xyPSsplitPS@{\xyrot@start(#1)}{\xyrot@end}\xyPSrotSplit@\xyPSpsxy@ }
+\xydef@\doPSspecialRotate@@#1@@{\xyPSspecialRotate@{#1}}
+\xydef@\xyRotScale@@{%
+ \def\xyrot@start(##1){{xyt ##1\space xyr}}%
+ \def\xyscale@start(##1,##2){{xyt ##1\space##2\space xys}}%
+ \def\xyrot@end{}\def\xyscale@end{}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-s.tex b/macros/generic/diagrams/xypic/texinputs/xyps-s.tex
new file mode 100644
index 0000000000..45f2299a8e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-s.tex
@@ -0,0 +1,51 @@
+%% xyps-s.tex from $Id: xyps-s.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Style extension'' PostScript support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-sloaded\endcsname=\empty \xycatcodes
+\xydef@\xykillstyles@@{\Unloadstyle@}%
+\xywarnifdefined\xyPSescapestyle@
+\xywarnifdefined\xyPSsplitescape@
+{\xyuncatcodes \catcode`@=11
+ \gdef\xyPSescapestyle@#1@@{\xyPSsplitescape@#1<><>@@}%
+ \gdef\xyPSsplitescape@#1<>#2<>#3@@{\xyescape@@{#1}{#2}}}
+\xydef@\xyPSsplitPS@#1#2{%
+ \def\xyPSpre@{#1}\def\xyPSpost@{#2}\modPSboxz@ }
+\xydef@\xyescape@@#1#2{\checkXyStyle@
+ \applyFIFOstyle@\prexyescape@{#1}\postxyescape@{#2}}
+\xydef@\prexyescape@{\xyescapeSpecial@}
+\xydef@\postxyescape@{\xyescapeSpecial@}
+\xylet@\xyescapeSpecial@=\eat@
+\let\xyescapeSpecial@=\addtostyletoks@
+\xydef@\installPSstyle@{%
+ \def\preXYstyle@@{\xyPSpre@}%
+ \let\xydoprestyles@=\xyPSrawstyleA@
+ \let\xydopoststyles@=\xyPSrawZ@
+ \let\xykillstyles@=\xykillstyles@@
+ }
+\xydef@\xyPSrawstyleA@#1{\xyPSrawA@{{#1}{}}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-t.tex b/macros/generic/diagrams/xypic/texinputs/xyps-t.tex
new file mode 100644
index 0000000000..cfb7cce2d7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-t.tex
@@ -0,0 +1,64 @@
+%% xyps-t.tex from $Id: xyps-t.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Pattern and Tile extension'' PostScript support.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-tloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-tloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\installPSpatterns@{\installPSstyle@
+ \let\xypattern@=\xyPSpattern@@
+ \let\xypatternwarning@=\relax
+ \xystandardpatterns@
+ \xyuncatcodes }
+\xylet@\UnloadPSpatterns@=\Unloadpattern@
+\xydef@\UsePStiles{\installPSpatterns@}
+\xydef@\NoPStiles{\UnloadPSpatterns@\relax}
+\xydef@\xyPSnewpattern@#1#2#3#4#5{%
+ \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}%
+ \DNii@{\relax}\ifx\next@\nextii@\newxypattern{#1}{}\relax\fi
+ \DNii@{#4}\ifx\nextii@\empty
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPSpattern@{#2 #3}}\else
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPSpattern@{#4}}\fi
+ \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}%
+ \else
+ \edef\tmp@{\noexpand\let\expandafter\noexpand\next@
+ \expandafter\noexpand\nextii@}\expandafter\tmp@\fi }
+\xydef@\xyPSpattern@{\ifPSspecials@\expandafter\xyPSpattern@@
+ \else\expandafter\eat@\fi}%
+\xydef@\xyPSpattern@@#1{\bgroup \checkXyStyle@
+ \def\preStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpre@}}%
+ \def\postStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpost@}}%
+ \let\modPSboxz@=\modXYstyle@ \xyPS@pattern@@{#1}%
+ \toks@={\egroup\let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
+ \the\toks@ }
+\xydef@\xyPS@pattern@@#1{\xyPSsplitPS@{{#1}sp}{}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps.tex b/macros/generic/diagrams/xypic/texinputs/xyps.tex
new file mode 100644
index 0000000000..09a3536924
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps.tex
@@ -0,0 +1,367 @@
+%% xyps.tex from $Id: xyps.doc,v 3.12 2011/05/27 04:51:17 krisrose Exp $
+%%
+%% Xy-pic ``PostScript backend''.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{ps}{PostScript backend}{\stripRCS$Revision: 3.12 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\UsePSspecials{\DNii@{{[4]}}\xyFN@\UsePSspecials@i}
+\xydef@\UsePSspecials@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\UsePSspecials@i}%
+ \else\ifx [\next \DN@[##1]{\DNii@{{[##1]}}\xyFN@\UsePSspecials@i}%
+ \else\ifcat 5\noexpand\next \DN@##1{\DNii@{{[##1]}}\xyFN@\UsePSspecials@i}%
+ \else\ifx\bgroup\next \DN@{\expandafter\UsePS@specials\nextii@}%
+ \else \DN@{\UsePS@specials{[4]}}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\UsePS@specials#1#2{%
+ \ifx\empty\whichPSspecials@
+ \DN@{#2}\ifx\next@\empty
+ \else
+ \expandafter\let\expandafter\next\csname#2@\endcsname
+ \ifx\next\relax \DN@{\UsePSspecials@{#2}{}}%
+ \else \DN@{\UsePSspecials@{#2}{#1}}\fi
+ \fi
+ \else
+ \DN@{#2}\ifx\next@\empty \DN@{\PSspecials@true}%
+ \else
+ \DN@{#2}%
+ \edef\nextii@{\expandafter\string\whichPSspecials@}%
+ \ifx\next@\nextii@\DN@{\PSspecials@true}%
+ \else
+ \ifx\firstPS@@\relax
+ \DN@{\xyerror@{Only one PS <driver> allowed: \dvitype@ already loaded}{}}%
+ \else
+ \expandafter\let\expandafter\next\csname#2@\endcsname
+ \ifx\next\relax
+ \DN@{\xyerror@{PostScript specials for `#2' not supported}{}}%
+ \else
+ \xywarning@{Changing PS <driver> to #2 }%
+ \DN@{\UsePSspecials@{#2}{#1}}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi \next@}
+\xydef@\UseDVIPSspecials{\UsePSspecials@\dvips@}
+\xydef@\UseTexturesPSspecials{\UsePSspecials@\Textures@}
+\xydef@\UseTexturesSpecials{\UsePSspecials@\Textures@}
+\xydef@\UsePostScriptSpecials{\UsePSspecials@\dvips@}
+\xydef@\UseOzTeXspecials{\UsePSspecials@\OzTeX@}
+\xydef@\UseDVITOPSspecials{\UsePSspecials@\dvitops@}
+\message{drivers,}
+\xydef@\loadPSdriver@#1#2{\xyinputorelse@{xy#1}%
+ {\xyrequire{#2}\expandafter\ifx\csname xy#2loaded\else
+ {\xyerror@{Unable to load xy#1.tex for #2 driver}{}}\fi}}
+\xydef@\dvips@{\loadPSdriver@{ps-dvi}{dvips}}
+\xydef@\Textures@{\loadPSdriver@{ps-txt}{Textures}}
+\xydef@\OzTeX@{\loadPSdriver@{ps-oz}{OzTeX}}
+\xydef@\dvitops@{\loadPSdriver@{ps-dto}{dvitops}}
+\xydef@\dvipsone@{\loadPSdriver@{ps-one}{dvipsone}}
+\global\newif\ifPSspecials@
+\xydef@\UsePSspecials@#1{\def\whichPSspecials@{#1}%
+ \DN@{\Textures@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{textures}%
+ \def\whichPSspecials@{textures}\xyps@options}%
+ \else\DN@{\dvips@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{dvips}%
+ \def\whichPSspecials@{dvips}\xyps@options}%
+ \else\DN@{\OzTeX@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{oztex}%
+ \def\whichPSspecials@{oztex}\xyps@options}%
+ \else\DN@{\dvitops@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{dvitops}%
+ \def\whichPSspecials@{dvitops}\xyps@options}%
+ \else
+ \DN@##1{\xyrequire{ps}\xyrequire{#1}\xyps@options}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\xyps@options{%
+ \xyrequire{ps}\xyrequire{line}\xyrequire{color}\xyrequire{crayon}%
+ \xyrequire{rotate}\xyrequire{tile}\xyrequire{frame}\xyuncatcodes }
+\xydef@\whichPSspecials@{}
+\xydef@\NoPSspecials{\xyPSwarning@{off}%
+ \PSspecials@false\aftergroup\resetPS@}
+\xydef@\resetPS@{\ifPSspecials@\xyPSwarning@{back on}\fi}
+\xydef@\UsePSspecials@x{\PSspecials@true\resetPS@}
+\xydef@\xyPSwarning@#1{\xywarning@{PostScript switched #1}}
+\xyaddunsupport{ps}{\csname UnloadPS@@\endcsname}
+\xydef@\PSspecials@{%
+ \ifx\next[\DN@[##1]{\setxyPSlevel@{##1}\xyFN@\PSspecials@}%
+ \else\DN@{\whichPSspecials@\PSspecials@@}%
+ \fi \next@ }%
+\xydef@\PSspecials@@{%
+ \ifx\und@fined\PSmessage\hidePSmessages\fi \setupxyPS@}
+\xydef@\setupxyPSlevelO@{\relax}
+\xydef@\setxyPSlevel@#1{\ifcase#1%
+ \gdef\setupxyPS@{\setupxyPSlevelO@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelA@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelB@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelC@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelD@}%
+ \else\gdef\setupxyPS@{\setupxyPSlevelD@}\fi }
+\xywarnifdefined\setupxyPS@
+ \gdef\setupxyPS@{\setupxyPSlevelD@ \gdef\setupxyPS@{\PSspecials@true}}
+\xydef@\PSincrease@#1{%
+ \xywarning@{The PS level may only increase: #1 is already active}}
+\DN@{\csname newif\endcsname\ifUsePSdict@@\DN@{}}
+ \ifx\undefined\UsePSdict@@true\else\DN@{}\fi \next@
+\ifx\undefined\xyPSdefaultdict
+ \xydef@\xyPSdefaultdict{%
+ \DN@##1.##2.##3@{\gdef\xyPSdictname{xy##1##2dict.pro}}%
+ \expandafter\next@\xyversion.@}%
+\fi
+\ifx\undefined\UsePSheader@
+ \xydef@\UsePSheader@#1{%
+ \DN@{#1}\ifx\next@\empty
+ \else \gdef\xyPSdictname{#1}\fi
+ \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi
+ \gdef\xyHeaderMessage@{%
+ It includes a reference to the PostScript file \xyPSdictname.^^J}%
+ \UsePSdict@@true}%
+ \let\UsePSheader=\UsePSheader@
+\fi
+\xydef@\dumpPSdict#1{\DN@{#1}\ifx\next@\empty
+ \ifx\undefined\xyPSdictname\xyPSdefaultdict\fi
+ \else\gdef\xyPSdictname{#1}\fi
+ \def\dumpPSdict@@{\writePSdict@@}%
+ \ifx\xydriversselected@@\empty\DN@{\xysetup@@\null@xy@ps}%
+ \else \DN@{\installxyps@x}\fi \next@}
+\message{hooks,}
+\gdef\xyPSalternative@#1#2{%
+\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
+ \xdef#1{\noexpand\ifPSspecials@
+ \noexpand\expandafter\expandafter\noexpand\csname xyPS#2@\endcsname
+ \noexpand\else
+ \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
+ \noexpand\fi}}%
+\xydef@\setupxyPSlevelA@{\xyPStips@%
+ \xyPSalternative@{\Tip@@}{Tip}%
+ \xyPSalternative@{\Ttip@@}{Ttip}%
+ \xyPSalternative@{\Tip@@eu}{Tip@eu}%
+ \xyPSalternative@{\Ttip@@eu}{Ttip@eu}%
+ \xyPSalternative@{\hook@@}{hook}%
+ \xyPSalternative@{\ahook@@}{ahook}%
+ \xyPSalternative@{\bhook@@}{bhook}%
+ \xyPSalternative@{\aturn@@}{aturn}%
+ \xyPSalternative@{\bturn@@}{bturn}%
+ \xyPSalternative@{\squiggle@@}{squiggle}%
+ \xyPSalternative@{\stopper@@}{stopper}%
+ \xyPSalternative@{\line@@}{dash}%
+ \xyPSalternative@{\circhar@@}{circhar@}%
+ \gdef\setupxyPSlevelA@{\PSincrease@{1}}%
+ \global\let\UsePSspecials=\UsePSspecials@x \PSspecials@true}
+\xydef@\setupxyPSlevelB@{%
+ \let\xyPSfont@=\empty \let\xyPSsemifont@=\empty
+ \xyPSalternative@{\cirrestrict@@}{cirrest}%
+ \gdef\setupxyPSlevelB@{\PSincrease@{2}}%
+ \setupxyPSlevelA@ }
+\xydef@\setupxyPSlevelC@{%
+ \xyPSalternative@{\cirbuild@}{cirbuild}%
+ \xyPSalternative@{\CIRfull@}{CIRfull}%
+ \xyPSalternative@{\solid@}{solid}%
+ \xyPSalternative@{\point@}{point}%
+ \xywithoption{curve}{%
+ \xyPSalternative@{\splinesolid@}{splinesolid}}%
+ \gdef\setupxyPSlevelC@{\PSincrease@{3}}%
+ \setupxyPSlevelB@ }%
+\xydef@\setupxyPSlevelD@{%
+ \xyPSalternative@{\dash@}{dashed}%
+ \xywithoption{curve}{%
+ \xyPSalternative@{\splinedashed@}{splinedashed}%
+ \xyPSalternative@{\splinedotted@}{splinedotted}}%
+ \gdef\setupxyPSlevelD@{}%
+ \setupxyPSlevelC@ }
+\xydef@\xyPSchar@#1{%
+ \PSmacro@{\the\Direction\space \xyPSfont@ #1}}
+\xydef@\xyPSsemichar@#1{%
+ \PSmacro@{\the\Direction\space \xyPSsemifont@ #1}}
+\xydef@\xyPSfont@{f }%
+\xydef@\xyPSsemifont@{fs }%
+\xydef@\xyPStip@{\xyPSchar@{t}}%
+\xydef@\xyPSTip@{\xyPSchar@{/XT tt}}%
+\xydef@\xyPSTtip@{\setboxz@h\bgroup
+ \reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c \xyPSchar@{/Xt tT}}%
+\xydef@\xyPSTip@eu@{\xyPSchar@{/ET tt}}%
+\xydef@\xyPSTtip@eu@{\setboxz@h\bgroup
+ \reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c \xyPSchar@{/ET tT}}%
+\xydef@\xyPScm@\tip@x{\xyFN@\xyPScm@@}%
+\xydef@\xyPScm@@{%
+ \ifx\next\tip@@ \DN@\tip@@{\tip@x\xyPScmtip@}%
+ \else\ifx\next\atip@@ \DN@\atip@@{\tip@x\xyPScmatip@}%
+ \else\ifx\next\btip@@ \DN@\btip@@{\tip@x\xyPScmbtip@}%
+ \else\DN@{}%
+ \fi\fi\fi \next@}%
+\xydef@\xyPScmtip@{\xyPSchar@{ct}}%
+\xydef@\xyPScmatip@{\xyPSchar@{ca}}%
+\xydef@\xyPScmbtip@{\xyPSchar@{cb}}%
+\xydef@\xyPStips@{%
+ \xyPSalternative@{\atip@@}{atip}%
+ \xyPSalternative@{\btip@@}{btip}%
+ \xyPSalternative@{\tip@@}{abtip}%
+}%
+\xydef@\xyPSatip@{\xyPSwhichatip@
+ \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}%
+\xydef@\xyPSbtip@{\xyPSwhichbtip@
+ \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}%
+\xydef@\xyPSabtip@{\xyPSwhichabtip@
+ \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}%
+\xydef@\xyPSwhichatip@{\ifx\xyatipfont\xy@@atfont
+ \expandafter\xyPSatip@i \else\def\xyPSfont@@{10 /xy A}\fi }%
+\xydef@\xyPSwhichbtip@{\ifx\xybtipfont\xy@@btfont
+ \expandafter\xyPSbtip@i \else\def\xyPSfont@@{10 /xy B}\fi }%
+\xydef@\xyPSwhichabtip@{\ifx\xyatipfont\xy@@atfont
+ \expandafter\xyPSabtip@i \else\def\xyPSfont@@{10 /xy AB}\fi }%
+\xydef@\xyPSatip@i{%
+ \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space A}}
+\xydef@\xyPSbtip@i{%
+ \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space B}}
+\xydef@\xyPSabtip@i{%
+ \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space AB}}
+\xydef@\xyPSTtips@{%
+ \let\Ttip@xy=\Ttip@
+ \let\Ttip@cm=\Ttip@
+ \let\Ttip@eu=\Ttip@ }
+\xydef@\xyPShook@{\xyPSchar@{h}}%
+\xydef@\xyPSahook@{\xyPSchar@{ha}}%
+\xydef@\xyPSbhook@{\xyPSchar@{hb}}%
+\xydef@\xyPSaturn@{\xyPSchar@{ta}}%
+\xydef@\xyPSbturn@{\xyPSchar@{tb}}%
+\xydef@\xyPSsquiggle@{\xyPSchar@{g}}%
+\xydef@\xyPSstopper@{\xyPSchar@{st}}%
+\xydef@\xyPSfliptrue@{\DN@{\xyPSsemichar@{T d}}}
+\xydef@\xyPSdash@{%
+ \DN@{\xyPSsemichar@{F d}}%
+ \ifnum\SemiDirectionChar=31
+ \ifdim\d@Y<\z@
+ \ifdim\d@X<\z@ \ifx\xyPSsemifont@\empty\xyPSfliptrue@\fi\fi
+ \else
+ \ifdim\z@>\d@X
+ \ifx\xyPSsemifont@\empty\else\xyPSfliptrue@\fi
+ \else\xyPSfliptrue@\fi
+ \fi\fi
+ \next@ \setboxz@h{\origxydash@}\kern\wdz@
+ \setbox\z@=\box\voidb@x }
+\xydef@\xyPScirchar@#1{\count@=#1\edef\tmp@{\the\count@}%
+ \ifcase#1%
+ \xyPScirchar@@@{-180}{-135}{\tmp@}\dimen@=\partroottwo\R@
+ \or\xyPScirchar@@@{-135}{-90}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{-90}{-45}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{-45}0{\tmp@}\dimen@=\partroottwo\R@
+ \or\xyPScirchar@@@0{45}{\tmp@}\dimen@=\partroottwo\R@
+ \or\xyPScirchar@@@{45}{90}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{90}{135}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{135}{180}{\tmp@}\dimen@=\partroottwo\R@
+ \fi}
+\xydef@\xyPScirrest@{\relax}%
+\xydef@\xyPScirchar@@#1{\relax\count@=#1\edef\tmp@{\the\count@}%
+ \expandafter\xyPScirchar@@@\ifcase#1%
+ {-180}{-135}{\tmp@}\kern\partroottwo\R@
+ \or{-135}{-90}{\tmp@}\kern\halfroottwo\R@
+ \or{-90}{-45}{\tmp@}\kern\halfroottwo\R@
+ \or{-45}0{\tmp@}\kern\partroottwo\R@
+ \or 0{45}{\tmp@}\kern\partroottwo\R@
+ \or{45}{90}{\tmp@}\kern\halfroottwo\R@
+ \or{90}{135}{\tmp@}\kern\halfroottwo\R@
+ \or{135}{180}{\tmp@}\kern\partroottwo\R@
+ \fi}
+\xydef@\xyPScirchar@@@#1#2#3{\edef\tmp@{#1\space#2\space
+ \expandafter\removePT@\the\R@\space #3\space c}%
+ \PSmacro@{\tmp@}}
+\xydef@\xyPScirc@#1#2{\edef\tmp@{\expandafter\removePT@\the\R@}%
+ \PSmacro@{\tmp@\space #1 #2 o}}
+\xydef@\xyPSCIRfull@{\setboxz@h{\kern\R@\xyPScirc@0{360}\kern\R@}%
+ \wd\z@=\z@ \ht\z@=\R@ \dp\z@=\R@ \boxz@}%
+\xydef@\xyPScirbuild@{{%
+ \count@=\CIRlo@@ \count@@=\CIRhi@@
+ \multiply\count@ by45 \advance\count@-180 \relax
+ \multiply\count@@ by45 \advance\count@@-180 \relax
+ \def\tmp@{}%
+ \ifx\CIRtest@@\CIRtest@inside
+ \ifnum\count@@>\count@
+ \edef\tmp@{\noexpand\xyPScirc@{\the\count@}{\the\count@@}}\fi
+ \else\ifx\CIRtest@@\CIRtest@outside
+ \ifnum\count@>-180 \advance\count@ by360 \relax
+ \edef\tmp@{\noexpand\xyPScirc@{\the\count@@}{\the\count@}}%
+ \else
+ \ifnum\count@@<180 \relax
+ \edef\tmp@{\noexpand\xyPScirc@{\the\count@@}{180}}%
+ \fi\fi
+ \fi\fi
+ \kern\R@\tmp@\kern\R@}}
+\xydef@\xyPSstraight@#1{\setupDirection@
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \DN@##1##2{\def\checkoverlap@@{%
+ \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
+ \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
+ \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
+ \noCshavep@@
+ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
+ \noCshavec@@
+ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
+ \ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
+ \ifInvisible@\let\next@=\relax \else
+ \DN@{\setboxz@h{\kern\X@c \raise\Y@c\hbox{#1}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\xykillstyles@\Drop@@}}%
+ \fi
+ \checkoverlap@@
+ \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\Creset@@ }
+\xylet@\xykillstyles@=\relax
+\xydef@\xyPSsolid@{\straight@\xyPSsolidSpread@}%
+\xydef@\xyPSsolidSpread@{\xyPSspread@{solid}{l}@@}%
+\xydef@\xyPSdottedSpread@{\xyPSspread@{dotted}{dt}@@}%
+\xydef@\xyPSdashed@{\line@ \def\Connect@@{\straight@\xyPSdashedSpread@}}
+\xydef@\xyPSdashedSpread@{\xyPSspread@{dashed}{dd}@@}%
+\xydef@\xyPSspread@#1#2@@#3\repeat@{\edef\tmp@{%
+ \expandafter\removePT@\the\d@X\space\expandafter\removePT@\the\d@Y}%
+ \setboxz@h{\kern\X@c \raise\Y@c\hbox{%
+ \PSmessage{#1 line:}\PSmacro@{\tmp@\space #2}}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\xyPSpoint@{\xyPSzerodot@\egroup
+ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xyPSdottedSpread@}}
+\xydef@\xyPSzerodot@{\PSmessage{dot:}\PSmacro@{p}}
+\xydef@\xyPScubic@#1{\readsplineparams@
+ \PSmessage{CUBIC:}%
+ \DN@{#1}\ifx\next@\empty\PSmacro@{mark \cubicinfo@\space bz}%
+ \else\PSmacro@{mark \cubicinfo@\space b#1}\fi}
+\xydef@\xyPSsquine@#1{\readsplineparams@
+ \PSmessage{SQUINE:}%
+ \DN@{#1}\ifx\next@\empty\PSmacro@{mark \squineinfo@\space q#1}%
+ \else\PSmacro@{mark \squineinfo@\space q#1}\fi}
+\xydef@\xyPSsplinesolid@{\ifx\splineinfo@\squineinfo@
+ \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{}}
+\xydef@\xyPSsplinedashed@{\ifx\splineinfo@\squineinfo@
+ \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{d}}
+\xydef@\xyPSsplinedotted@{\ifx\splineinfo@\squineinfo@
+ \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{t}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypsdict.tex b/macros/generic/diagrams/xypic/texinputs/xypsdict.tex
new file mode 100644
index 0000000000..0d949b0cdf
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypsdict.tex
@@ -0,0 +1,241 @@
+%% xypsdict.tex from $Id: xypsdict.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript backend prolog''.
+%% Copyright (c) 1995-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+\begingroup \xycatcodes%
+ \count@=\xydashl@\relax \count@@=\xydashw@\relax%
+ \XYpredict@\relax \xycatcodes \xyPSobeylines@@%
+\PSdict@@{/XYdict where pop begin XYdict begin}%
+\PSdict@@{%
+ /xysize 10 def /T true def /F false def
+ /dimendiv{65536 div}bind def
+ /xysegl \number\count@\space dimendiv def
+ /xyopp{1 -1 scale}bind def
+ /xynormwidth{\number\count@@\space dimendiv pscorrect}bind def
+ /xywidth{xynormwidth setlinewidth}bind def
+}%
+\PSdict@@{%
+ /xyfont{4096 add 64 div round 64 mul 4096 sub}def /xydt 0.01 def
+ /xysdfont{4096 add 32 div round 32 mul 4096 sub}def
+ /xydots{xywidth 1 setlinecap [xydt 2] 0 setdash}bind def
+ /f /xyfont load def /fs /xysdfont load def}%
+\PSdict@@{%
+ /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul
+ dup dup XYdirection sub 180 div round 180 mul XYdirection add
+ dup 3 -1 roll sub abs 10 gt not{exch}if pop}def
+}%
+\ifdim\xydashw@=0pt\xydashw@=.4pt\fi\count@@=\xydashw@\relax%
+\PSdict@@{%
+ /xyrulth{\number\count@@\space dimendiv pscorrect setlinewidth
+ 0 setlinecap}bind def
+}%
+\PSdict@@{%
+ /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def
+ /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def
+}%
+\PSdict@@{%
+ /xyswap{XYdirection 180 add /XYdirection exch def}def
+ /xyline{gstartxy setupDirection rlineto xystroke}def
+}%
+\PSdict@@{%
+ /dash{exch gchksavexy xysegl XYdirection dup
+ -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if
+ 0 rlineto xystroke}def
+ /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto
+ 0 xysegl neg rlineto xystroke }def
+ /d /dash load def /st /stopper load def}%
+\PSdict@@{%
+ /solid{gstartxy xydash neg exch neg exch rlineto xystroke}def
+ /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash
+ neg exch neg exch rlineto xystroke}def
+ /l /solid load def /dd /dashed load def}%
+\PSdict@@{%
+ /dot{gstartxy 2 setlinecap [xydt 2] 0 setdash
+ 1 0 rlineto xystroke}def
+ /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ 2 div round 1 add div 2 setlinecap [xydt 3 -1 roll] 0 setdash
+ neg exch neg exch rlineto 0 0 rlineto xystroke}def
+ /p /dot load def /dt /dotted load def}%
+\PSdict@@{%
+ /cubic{gstartxy docubic} def
+ /docubic{chkvalid
+ {chkcubedge 8 -2 roll moveto curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse}
+ {pop cubicedge}ifelse}def
+ /bz /cubic load def}%
+\PSdict@@{%
+ /dotcubic{gstartxy 1 setlinecap [xydt 2] 0 setdash docubic}def
+ /dashcubic{gstartxy [5 5] 0 setdash docubic}def
+ /bt /dotcubic load def /bd /dashcubic load def}%
+\PSdict@@{%
+ /squine{gstartxy dosquine}def
+ /dosquine{chkvalid
+ {chksquedge 2 copy moveto xysq2cub curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /q /squine load def}%
+\PSdict@@{%
+ /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def
+}%
+\PSdict@@{%
+ /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse}
+ {pop squineedge}ifelse}def
+ /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index
+ xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def
+ /xysq2cubit{2 index 2 mul add 3 div}def
+}%
+\PSdict@@{%
+ /dotsquine{gstartxy 1 setlinecap [xydt 2] 0 setdash dosquine}def
+ /dashsquine{gstartxy [5 5] 0 setdash dosquine}def
+ /qt /dotsquine load def /qd /dashsquine load def}%
+\PSdict@@{%
+/xy4mul{8 copy
+ 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll
+ 3 -1 roll mul exch 4 -1 roll mul 3 1 roll
+ add 3 1 roll add exch 10 2 roll
+ 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll
+ 4 -1 roll mul 4 1 roll mul add 3 1 roll add
+ exch 3 -1 roll }def
+}%
+\PSdict@@{%
+ /xy44mul{4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll
+ xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll
+ 8 4 roll xy4mul 12 4 roll xy4mul}def
+}%
+\PSdict@@{%
+ /cubicedge{10 2 roll exch 8 1 roll 3 -1 roll dup dup 9 2 roll
+ 5 -1 roll dup dup 9 1 roll 8 3 roll
+ 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll
+ 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy444mul
+ pop pop pop 13 1 roll pop pop pop 9 1 roll 10 1 roll
+ pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll}def
+}%
+\PSdict@@{%
+ /xy444mul{4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll
+ xy44mul 20 8 roll xy44mul
+ 12 -4 roll 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch
+ 4 2 roll 16 8 roll 8 4 roll
+ 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
+ 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll
+ 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll
+ xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def
+}%
+\PSdict@@{%
+ /squineedge{8 2 roll
+ exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch
+ 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def
+}%
+\PSdict@@{%
+ /xyshort{2 copy abs exch abs add xysegl .5 mul lt
+ {pop pop grestore}{rlineto xystroke}ifelse}def
+}%
+\PSdict@@{%
+ /tipwidth{xywidth xynormwidth dup currentlinewidth exch div
+ sqrt dup dup scale mul setlinewidth 1 setlinecap}def
+}%
+\PSdict@@{%
+ /halftip{tipwidth xysize 10 div 0 0 moveto
+ -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg
+ dup .62 mul 2 div neg curveto}bind def
+}%
+\PSdict@@{/atip{gchksavexy halftip xystroke}def
+ /btip{gchksavexy xyopp halftip xystroke}def
+ /tip{gchksavexy gsave halftip stroke grestore
+ xyopp halftip xystroke}def
+ /t /tip load def /a /atip load def /b /btip load def}%
+\PSdict@@{/cmatip{gchksavexy halfcmtip xystroke}def
+ /cmbtip{gchksavexy xyopp halfcmtip xystroke}def
+ /cmtip{gchksavexy gsave halfcmtip stroke grestore
+ xyopp halfcmtip xystroke}def
+ /halfcmtip{tipwidth 0 0 moveto
+ -.1333 0 .25 neg dup .125 3 -1 roll .25 curveto}bind def
+ /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def}%
+\PSdict@@{%
+ /xyfscale{/xyfsize exch def}def /xyfsize{10}def
+ /eu{-0.0551 0.0643 -0.0976 0.1386 -0.125 0.2188}def
+ /cm{-0.105 0.0437 -0.1804 0.1380 -0.2 0.25}def
+ /XY{-0.1753 0.0181 -0.3452 0.0708 -0.5 0.155}def
+ /tipstart{3 -1 roll gchksavexy exch xyfscale tipwidth dup XYdict exch
+ known{dup /xy eq{pop /XY}if}{pop /XY}ifelse XYdict exch get}def
+ /tipend{halfxytip xystroke}def
+ /halfxytip{1 1 6{pop xyfsize mul 6 1 roll}for 0 0 moveto curveto}def
+ /A{tipstart D}def /B{tipstart C}def /C{xyopp D}def /D{exec tipend}def
+ /AB{tipstart dup gsave exec halfxytip stroke grestore C}def
+}%
+\PSdict@@{%
+ /Tip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /XT}if}{pop /XT}ifelse
+ XYdict exch get dup
+ halfTip stroke grestore xyopp halfTip xystroke}def
+ /XT{360 32 div neg}def /Xt{-1 .31 mul 1 atan}def
+ /ET{360 64 div 5 mul neg}def /Et{-1 .31 mul 1 atan}def
+ /halfTip{exec rotate XY halfxytip}def /halfTtip{halfTip}def
+ /Ttip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /Xt}if}{pop /Xt}ifelse
+ XYdict exch get dup
+ halfTtip stroke grestore xyopp halfTtip xystroke}def
+ /tt /Tip load def /tT /Ttip load def}%
+\PSdict@@{/halfturn{xysegl 2 div dup dup neg exch rmoveto
+ 0 exch dup exch -180 -90 arc}bind def
+ /aturn{gchksavexy halfturn xystroke}def
+ /bturn{gchksavexy xyopp halfturn xystroke}def
+ /ta /aturn load def /tb /bturn load def}%
+\dimen@=\xybsqll@\relax\count@=\dimen@%
+\PSdict@@{%
+ /xysqll \the\count@\space dimendiv def
+ /squigl{gchksavexy xysqll dup neg 0 rmoveto
+ 2 div dup dup neg dup 3 -1 roll
+ 2 sqrt mul dup 5 1 roll
+ 135 45 arcn dup 3 -1 roll -135 -45 arc
+ xystroke}def
+ /g /squigl load def}%
+\PSdict@@{/fullhook{0 xysegl 2 div dup -90 90 arcn}bind def
+ /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def
+}%
+\PSdict@@{/ahook{gchksavexy fullhook xystroke}def
+ /bhook{gchksavexy xyopp fullhook xystroke}def
+ /hook{gchksavexy gsave halfhook stroke grestore
+ xyopp halfhook xystroke}def
+ /h /hook load def /ha /ahook load def /hb /bhook load def}%
+\PSdict@@{%
+ /xyqcirc{dup dup neg exch translate newpath
+ dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def
+}%
+\PSdict@@{%
+ /circ{gstartxy
+ 3 copy pop 2 copy cos mul 3 1 roll sin mul
+ rmoveto 0 0 5 2 roll arc xystroke}bind def
+ /o /circ load def}%
+\PSdict@@{%
+ /circhar{gsave dup 3 gt{7 sub neg}if dup
+ 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul}
+ {0 eq{dup}{0}ifelse}ifelse}ifelse
+ 0 translate 3 1 roll circ grestore}bind def
+ /c /circhar load def}%
+\PSdict@@{end end}%
+\endgroup%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypspatt.tex b/macros/generic/diagrams/xypic/texinputs/xypspatt.tex
new file mode 100644
index 0000000000..927ad08c11
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypspatt.tex
@@ -0,0 +1,104 @@
+%% xypspatt.tex from $Id: xypspatt.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript pattern prolog''.
+%% Copyright (c) 1995-1998 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\begingroup \xycatcodes \xyPSobeylines@@%
+\PSdict@@{/XYdict where pop begin XYdict begin}%
+\PSdict@@{/:patt
+{XYddict begin
+14 dict begin
+/BGnd exch def
+/FGnd exch def
+/PaintData exch def
+/PatternType 1 def
+/PaintType 1 def
+/BBox[0 0 1 1]def
+/TilingType 1 def
+/XStep 1 def
+/YStep 1 def
+/PatternMtx[24 0 0 24 0 0]def
+/PaintProc BGnd null ne
+ {{begin BGnd aload pop setrgbcolor 0 0 1 1 rF
+ FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ {{begin FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ ifelse def
+ currentdict PatternMtx end
+ gsave patangle xyland{180 add}if
+ rotate macfreq patfreq div dup neg exch scale matrix currentmatrix
+ grestore gsave setmatrix /DeviceRGB setcolorspace makepattern grestore
+ end}def}%
+\PSdict@@{%
+/rF{gsave
+ newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill grestore}bind def }%
+\PSdict@@{%
+ /setpatscreen{/pattstring exch store patfreq
+ patangle xyport not{90 add}if
+ {1 add 4 mul cvi pattstring exch get exch 1 add 4 mul cvi 7 sub
+ bitshift 1 and}setscreen}bind def
+ /setcolpattern{setpatscreen 64 div 1 exch sub currentrgbcolor
+ 1 1 3{pop 1 exch sub 3 index mul 1 exch sub 3 1 roll}for
+ setrgbcolor pop}def
+ /setgraypattern{setpatscreen 64 div setgray}def
+ /macfreq 9.375 def /patangle 0 def /patfreq 12.5 def}%
+\PSdict@@{/checkland{%
+ /normland where{pop normland not}{false}ifelse
+ /xyland exch def
+ /por where{pop por}{/isls where{pop isls not /xyland true def}
+ {/land where{pop land not}{true}
+ ifelse}ifelse}ifelse /xyport exch def}def }%
+\PSdict@@{%
+ /setpatfreq{/patfreq exch def}def
+ /setpatangle{/patangle exch def}def
+ /setbackcolor{/backcolor exch def}def
+ /setforecolor{/forecolor exch def}def
+ [1 1 1] setbackcolor xycolarray setforecolor
+ /bg /setbackcolor load def /fg /setforecolor load def
+ /pa /setpatangle load def /pq /setpatfreq load def }%
+\PSdict@@{%
+ /xypattern{checkland counttomark dup 0 eq{pop}
+ {dup 1 eq{pop setpatscreen}
+ {dup 2 eq{pop setcolpattern}
+ {dup 3 eq{pop
+ /setcolorspace where {
+ /.setcolorspace where{pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ forecolor backcolor :patt setpattern
+ }{pop pop setcolpattern}ifelse}ifelse}
+ {pop setcolpattern}ifelse}
+ {5 eq{/setcolorspace where{
+ /.setcolorspace where{pop pop pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ :patt setpattern
+ }{pop pop pop pop setcolpattern}ifelse}ifelse}
+ {pop pop pop setcolpattern}ifelse
+ }{}ifelse}ifelse}ifelse}ifelse}ifelse cleartomark }def
+ /xysetpattern{/xypatt exch def}def
+ /sp /xysetpattern load def }%
+\PSdict@@{end end}%
+\endgroup%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyrecat.tex b/macros/generic/diagrams/xypic/texinputs/xyrecat.tex
new file mode 100644
index 0000000000..a70f24e5c4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyrecat.tex
@@ -0,0 +1,36 @@
+%% xyrecat.tex from $Id: xyrecat.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Reset Category Codes'' utility.
+%% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\xyuncatcodes
+\xyrecat @ 64 \catcode 64 11
+\xymakeADD@\addHASH@ # 35
+\xymakeADD@\addDOLL@ $ 36
+\xymakeADD@\addAND@ & 38
+\xymakeADD@\addRQ@ ' 39
+\xymakeADD@\addPLUS@ + 43
+\xymakeADD@\addDASH@ - 45
+\xymakeADD@\addDOT@ . 46
+\xymakeADD@\addLT@ < 60
+\xymakeADD@\addEQ@ = 61
+\xymakeADD@\addGT@ > 62
+\xymakeADD@\addLQ@ ` 96
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyrotate.tex b/macros/generic/diagrams/xypic/texinputs/xyrotate.tex
new file mode 100644
index 0000000000..302e8819d0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyrotate.tex
@@ -0,0 +1,161 @@
+%% xyrotate.tex from $Id: xyrotate.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Rotate and Scale extension'' option.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{rotate}{Rotate and Scale extension}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xyundefinedRotate@#1#2@@{%
+ \xywarning@{The #1 #2 effect is not implemented with the current driver.}}%
+\xydef@\NoResizing{\xyNoResizing@}
+\xydef@\UseResizing{\xyUseResizing@}
+\xydef@\xyNoResizing@{%
+ \global\let\origxyrescale@=\xyrescale@
+ \global\let\origxyrotSizeMod@=\xyrotateSizeMod@
+ \global\let\xyNoResizing@=\xyNoResizing@@
+ \global\let\xyUseResizing@=\xyUseResizing@@
+ \xyNoResizing@@ }
+\xydef@\xyNoResizing@@{%
+ \global\let\xyrescale@=\xyignorescale@
+ \global\let\xyrotateSizeMod@=\xyignoreSizeMod@
+ }
+\xylet@\xyUseResizing@=\relax
+\xydef@\xyUseResizing@@{%
+ \global\let\xyrescale@=\origxyrescale@
+ \global\let\xyrotateSizeMod@=\origxyrotSizeMod@
+ }
+\xydefcsname@{shape [@...]}#1{\xyrotatechar@#1@@}%
+\xydefcsname@{shape [<...]}#1{\xyshearchar@{#1}@@}%
+\xydefcsname@{shape [*...]}#1{\xyscalechar@{#1}@@}%
+\xydefcsname@{shape [left]}{\xyshape@left@}
+\xydefcsname@{shape [right]}{\xyshape@right@}
+\xydefcsname@{shape [flip]}{\xyshape@flip@}
+\xydefcsname@{shape [halfsize]}{\xyshape@halfsize@}
+\xydefcsname@{shape [dblsize]}{\xyshape@dblsize@}
+\xydefcsname@{shape [vflip]}{\xyshape@vflip@}
+\xydefcsname@{shape [hflip]}{\xyshape@hflip@}
+\xydef@\preXYtransform@{}
+\xydef@\postXYtransform@{}
+\xywarnifdefined\preXYtransform@@
+\xywarnifdefined\postXYtransform@@
+ \gdef\preXYtransform@@{}
+ \gdef\postXYtransform@@{}
+\xydef@\xy@transform@{}
+\xydef@\preShape@@{}
+\xydef@\postShape@@{}
+\xydef@\modXYtransform@{%
+ \ifx\xy@transform@\empty
+ \transformDrop@\transformConnect@\resetTransform@\fi
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\preShape@@}%
+ \DN@##1{\expandafter\gdef\expandafter\preXYtransform@@\expandafter{%
+ \tmp@ ##1}}\expandafter\next@\expandafter{\preXYtransform@@}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\postShape@@}%
+ \DN@##1{\expandafter\gdef\expandafter\postXYtransform@@\expandafter{%
+ \postXYtransform@@ ##1}}\expandafter\next@\expandafter{\tmp@}}%
+\xydef@\transformDrop@{\let\xy@transform@=\relax
+ \expandafter\def\expandafter\Drop@@\expandafter{%
+ \expandafter\preXYtransform@\Drop@@\postXYtransform@}}
+\xydef@\transformConnect@{\let\xy@transform@=\relax
+ \expandafter\def\expandafter\Connect@@\expandafter{%
+ \expandafter\preXYtransform@\Connect@@\postXYtransform@}}
+\xydef@\resetTransform@{\gdef\preXYtransform@@{}\gdef\postXYtransform@@{}}
+\xydef@\xynametransform@#1{%
+ \DN@{\expandafter\gdef\expandafter#1\expandafter{\the\toks@}}\next@ }
+\xydef@\xyscalechar@#1@@{\xyscalechars@#1,#1,@@}
+\xydef@\xyscalechars@#1,#2,#3@@{%
+ \DN@{\xyrescale@(#1,#2)}%
+ \dimen@=#1\p@
+ \ifdim\dimen@>\z@ \else \ifdim\dimen@<\z@ \else
+ \DN@{\xywarning@{invalid scaling factors #1, #2}}%
+ \fi\fi \dimen@=#2\p@
+ \ifdim\dimen@>\z@ \else \ifdim\dimen@<\z@ \else
+ \DN@{\xywarning@{invalid scaling factors #1, #2 }}%
+ \fi\fi \next@ }
+\xydef@\xyrescale@(#1,#2){%
+ \setboxz@h{\xyscale@@{#1}{#2}%
+ \dimen@=\ifx-#1\R@c\advance\dimen@-\R@c \dimen@=-\dimen@
+ \else#1\L@c \advance\dimen@-\L@c\fi
+ \kern\dimen@\boxz@\kern-\dimen@}%
+ \R@c=\if-#1\L@c\else#1\R@c\fi
+ \L@c=\if-#1\R@c\else#1\L@c\fi
+ \U@c=\if-#2\D@c\else#2\U@c\fi
+ \D@c=\if-#2\U@c\else#2\D@c\fi }
+\xydef@\xyignorescale@(#1,#2){\xywarning@{Ignoring rescale: #1,#2}%
+ \setboxz@h{\xyscale@@{#1}{#2}\boxz@}}%
+\xydef@\xyshape@halfsize@{\xyrescale@(.5,.5)}
+\xydef@\xyshape@dblsize@{\xyrescale@(2,2)}
+\xydef@\xyshape@flip@{\xyrescale@(-1,-1)}
+\xydef@\xyshape@vflip@{\xyrescale@(1,-1)}
+\xydef@\xyshape@hflip@{\xyrescale@(-1,1)}
+\xydef@\xyrotatechar@{\bgroup
+ \afterDIRECTIONorEMPTY{\xyrotateSizeMod@}{\xyFN@\xySpecialRotate@i}}
+\xydef@\xySpecialRotate@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xySpecialRotate@i}%
+ \else\ifx @\next \let\next@=\xyrotateSizeMod@
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@##1@@{%
+ \expandafter\xynametransform@\csname shape [##1]\endcsname\egroup}%
+ \else\ifx !\next \DN@!{\egroup\getSpecialRotate@}%
+ \else\ifx *\next \DN@*@@{\egroup\transformDrop@}%
+ \else \DN@{\xySpecialRotate@@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\getSpecialRotate@{\doSpecialRotate@@}
+\xydef@\xyRotate@#1{\xyundefinedRotate@{rotate}{#1}@@}
+\xydef@\xySpecialRotate@#1@@{\xyundefinedRotate@{rotate}{#1}@@\egroup}
+\xydef@\doSpecialRotate@#1@@{\xyundefinedRotate@{special rotate}{#1}@@}
+\xydef@\xyscale@#1#2{\xyundefinedRotate@{scale}{#1,#2}@@}
+\xydef@\UnloadRotate@#1{%
+ \ifx#1\relax\else\xyunload@{rotation extension}\fi
+ \let\xyRotate@@=\xyRotate@
+ \let\xySpecialRotate@@=\xySpecialRotate@
+ \let\doSpecialRotate@@=\doSpecialRotate@
+ \let\xyscale@@=\xyscale@ }
+\UnloadRotate@\relax
+\xyaddunsupport{rotate}{\UnloadRotate@\relax}
+\xydef@\xyrotateSizeMod@ @@{%
+ \L@p=\L@c \R@p=\R@c \U@p=\U@c \D@p=\D@c
+ \ifdim\cosDirection\p@>\z@
+ \R@c=\cosDirection\R@p \L@c=\cosDirection\L@p
+ \U@c=\cosDirection\U@p \D@c=\cosDirection\D@p
+ \else
+ \R@c=\cosDirection\L@p \L@c=\cosDirection\R@p
+ \U@c=\cosDirection\D@p \D@c=\cosDirection\U@p
+ \fi
+ \advance\L@c \if-\sinDirection\D@p\else\sinDirection\U@p\fi
+ \advance\R@c \if-\sinDirection\U@p\else\sinDirection\D@p\fi
+ \advance\U@c \if-\sinDirection\L@p\else\sinDirection\R@p\fi
+ \advance\D@c \if-\sinDirection\R@p\else\sinDirection\L@p\fi
+ \dimen@ii=\L@c \advance\dimen@ii-\L@p
+ \edef\tmp@{\egroup \L@c=\the\L@c \R@c=\the\R@c \U@c=\the\U@c \D@c=\the\D@c
+ \dimen@ii=\the\dimen@ii \noexpand\setboxz@h\bgroup
+ \noexpand\xyRotate@@{\the\Direction}}\tmp@
+ \xydropRotated@ }
+\xydef@\xydropRotated@@{%
+ \kern\dimen@ii \boxz@ \kern-\dimen@ii \modXYtransform@ \egroup }
+\xylet@\xydropRotated@=\xydropRotated@@
+\xydef@\xyignoreSizeMod@ @@{\xywarning@{Ignoring rotation}}
+\xydef@\xyshape@left@{\xyrotatechar@ v(0,1)@@}
+\xydef@\xyshape@right@{\xyrotatechar@ v(0,-1)@@}
+\xydef@\xyshearchar@{\xyundefinedRotate@{shearing}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xysmart.tex b/macros/generic/diagrams/xypic/texinputs/xysmart.tex
new file mode 100644
index 0000000000..e98c281f4e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xysmart.tex
@@ -0,0 +1,320 @@
+%% xysmart.tex from $Id: xysmart.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Smart Path feature'' option.
+%% Copyright (c) 1998 George C. Necula <necula@cs.cmu.edu>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{smart}{Smart Path option}{\stripRCS$Revision: 3.6 $}%
+ {George C. Necula}{necula@cs.cmu.edu}%
+ {School of Computer Science,
+ Carnegie Mellon University,
+ 5000 Forbes Avenue,
+ Pittsburgh, PA 15213-3891, USA}
+\xyrequire{arrow}\xycatcodes
+\let\origPATHturn@=\PATHturn@
+\def\PATHturn@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHturn@}%
+ \else\ifx s\next
+ \let\origPATHturn@i=\PATHturn@i\let\PATHturn@i=\PATHsmartturn@i
+ \let\origPATHturn@cir=\PATHturn@cir\let\PATHturn@cir=\PATHsmartturn@cir
+ \DN@ s{\xyFN@\origPATHturn@}%
+ \else
+ \DN@{\origPATHturn@}%
+ \fi\fi
+ \next@}
+\xydef@\PATHsmartturn@cir{%
+ \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}%
+ \expandafter\PATHturn@i\next@}
+\xydef@\PATHsmartturn@i#1#2#3{%
+ \DN@##1{%
+ \def\PATHinit@@{%
+ \xy@@{%
+ \def\sm@CIRin{#1}\def\sm@CIRout{#3}%
+ \ifx\sm@CIRout\empty
+ \let\sm@CIRout=\sm@CIRin
+ \let\sm@CIRin=\PATHlastout@@
+ \fi
+ ##1\relax}%
+ \xy@@{\enter@{\basefromthebase@}}%
+ \xy@@{\sm@conn}%
+ \xy@@{\X@p=\X@c \Y@p=\Y@c \czeroEdge@% Save the start of the segment
+ \count@=\sm@CIRout\count@=\the\count@% Move forward a dash to
+ \dimen@=\xydashl@ \ABfromdiag@ \advance\X@c\A@ \advance\Y@c\B@
+ \edef\PATHpostpos@@{\X@c=\the\X@c \Y@c=\the\Y@c \noexpand\czeroEdge@
+ \noexpand\PATHomitslide@@true}}%
+ \xy@@{\leave@
+ \edef\PATHlastout@@{\sm@CIRout}%
+ \count@=\sm@CIRout \dimen@=\xydashl@ \Directionfromdiag@}}}%
+ \expandafter\next@\expandafter{\the\toks@}\toks@={}%
+ \let\PATHextra@@=\empty
+ \def\PATHpost@@{\xy@@\PATHpostpos@@}%
+ \let\PATHlabelsextra@@=\relax
+ \let\PATHturn@i=\origPATHturn@i
+ \let\PATHturn@cir=\origPATHturn@cir
+ \xyFN@\PATHturn@ii}
+\xydef@\sm@nil{}
+\xydef@\sm@nnil{\sm@nil}
+\xydef@\sm@maxcost{1000mm}%
+\xydef@\sm@conn{
+ \enter@{\cfromthec@ \DirectionfromtheDirection@}\cfromp@% Adjust p
+ \count@=\sm@CIRin\count@=\the\count@
+ \dimen@=\xydashl@ \ABfromdiag@ \advance\X@p\A@\advance\Y@p\B@
+ \setupDirection@ \the\Edge@c\z@ \czeroEdge@
+ \pfromc@
+ \reverseDirection@
+ \count@=\sm@CIRin\count@=\the\count@
+ \dimen@=\xydashl@ \ABfromdiag@
+ \edef\tmp@{\noexpand\dir\artail@@}\expandafter\sm@drop@\tmp@
+ \X@c=\X@p\advance\X@c\A@ \Y@c=\Y@p\advance\Y@c\B@ \czeroEdge@
+ \sm@stri
+ \X@p=\X@c \Y@p=\Y@c
+ \leave@
+ \enter@{\pfromthep@ \DirectionfromtheDirection@}\pfromc@% Adjust c
+ \count@=\sm@CIRout\count@=\the\count@
+ \dimen@=\xydashl@ \ABfromdiag@ \advance\X@p-\A@\advance\Y@p-\B@
+ \setupDirection@ \the\Edge@c\z@
+ \advance\X@c-\A@\advance\Y@c-\B@% Leave room for a dash to terminate the seg
+ \czeroEdge@
+ \def\PATHlabelsnext@@{}%
+ \leave@
+ \R@=\turnradius@
+ \cirrestrict@@%Adjust the radius to fit the circles
+ \let\sm@circles=\sm@nil
+ \edef\sm@bestcost{\sm@maxcost}%
+ \sm@trycircles 1%Try counter clockwise first
+ \sm@trycircles{-1}%
+ \ifdim\sm@bestcost<\sm@maxcost
+ \cfromp@
+ \expandafter\sm@conndraw\sm@bestconn
+ \else
+ \xyerror@{Cannot draw the smart connector}{}%
+ \fi
+}
+\xydef@\sm@trycircles#1{%
+ \ifnum #1>0% Compute the opposite orientation
+ \def\sm@CIRorienti{-1}%
+ \else
+ \def\sm@CIRorienti{1}%
+ \fi
+ \edef\tmp@{{{\sm@CIRin}{#1}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \count@@=\sm@CIRin\count@@=\the\count@@\count@=\count@@
+ \sm@roundcount@{#1}%
+ \edef\sm@savecount@{\the\count@}%
+ \ifnum\the\count@=\the\count@@ \else
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \fi
+ \count@=\sm@savecount@\count@=\the\count@
+ \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}%
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \count@=\sm@savecount@\count@=\the\count@
+ \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}%
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \count@=\sm@savecount@\count@=\the\count@
+ \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}%
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+}
+\xydef@\sm@advancecount@#1#2{%
+ \ifnum #2>0
+ \edef\tmp@{#1}%
+ \else
+ \edef\tmp@{-#1}%
+ \fi
+ \advance\count@\tmp@\count@=\the\count@
+ \ifnum\the\count@<0 \advance\count@ 8\fi
+ \ifnum\the\count@>7 \advance\count@ -8\fi
+ \count@=\the\count@
+}
+\xydef@\sm@roundcount@#1{%
+ \ifcase\the\count@
+ \advance\count@ #1\or
+ \or \advance\count@ #1\or
+ \or \advance\count@ #1\or
+ \or \advance\count@ #1\fi
+ \count@=\the\count@
+ \ifnum\the\count@<0 \advance\count@ 8\fi
+ \ifnum\the\count@>7 \advance\count@ -7\fi
+ \count@=\the\count@
+}
+\newif\ifsm@firstseg
+\newif\ifsm@acceptable
+\xydef@\sm@trycirclelist#1{%
+ \R@p=\z@\U@p=\R@p% Clear the deltas
+ \def\sm@exthp{0}\def\sm@exthm{0}%
+ \def\sm@extvp{0}\def\sm@extvm{0}%
+ \def\sm@dxp{0pt}\def\sm@dxm{0pt}%
+ \def\sm@dyp{0pt}\def\sm@dym{0pt}%
+ \def\sm@segs{}%
+ \sm@firstsegtrue
+ \def\sm@connlen{0pt}%
+ \let\sm@tryclcont=\sm@trycirclelist@i
+ \sm@trycirclelist@i #1%Strip {} to expose the list elements
+ \count@@=\sm@CIRout\count@@=\the\count@\count@=\the\count@
+ \sm@roundcount@{1}%
+ \ifnum\count@=\count@@
+ \edef\sm@segs{\sm@segs{{\the\count@}{1}{\the\count@}}}%
+ \fi
+ \A@=\X@p\advance\A@\R@p\advance\A@ -\X@c\A@=-\A@
+ \B@=\Y@p\advance\B@\U@p\advance\B@ -\Y@c\B@=-\B@
+ \sm@acceptabletrue
+ \ifdim\A@>0pt
+ \ifnum\sm@exthp>0 \dimen@=\A@ \divide\dimen@\sm@exthp
+ \edef\sm@dxp{\the\dimen@}%
+ \else \sm@acceptablefalse\fi\fi
+ \ifdim\A@<0pt
+ \ifnum\sm@exthm>0 \dimen@=\A@ \divide\dimen@\sm@exthm
+ \edef\sm@dxm{\the\dimen@}%
+ \else \sm@acceptablefalse\fi
+ \A@=-\A@%Make it positive
+ \fi
+ \ifdim\B@>0pt
+ \ifnum\sm@extvp>0 \dimen@=\B@ \divide\dimen@\sm@extvp
+ \edef\sm@dyp{\the\dimen@}%
+ \else \sm@acceptablefalse\fi\fi
+ \ifdim\B@<0pt
+ \ifnum\sm@extvm>0 \dimen@=\B@ \divide\dimen@\sm@extvm
+ \edef\sm@dym{\the\dimen@}%
+ \else \sm@acceptablefalse\fi
+ \B@=-\B@
+ \fi
+ \ifsm@acceptable
+ \dimen@=\sm@connlen\advance\dimen@\A@\advance\dimen@\B@
+ \ifdim\dimen@<\sm@bestcost
+ \edef\sm@bestcost{\the\dimen@}%
+ \edef\sm@bestconn{{\sm@dxp}{\sm@dxm}{\sm@dyp}{\sm@dym}{\sm@segs}}%
+ \fi
+ \fi
+}
+\xydef@\sm@showext#1{%
+ \W@{#1\space hp=\sm@exthp,hm=\sm@exthm,vp=\sm@extvp
+ ,vm=\sm@extvm,len=\sm@connlen}}
+\xydef@\sm@trycirclelist@i#1{%
+ \def\@tmp{#1}%
+ \ifx \@tmp\sm@nnil \let\sm@tryclcont=\relax\else
+ \expandafter\sm@tryclcar\@tmp \fi
+ \sm@tryclcont}
+\xydef@\sm@tryclcar#1#2#3{%
+ \dimen@=\ifnum #2<0 -\fi\R@
+ \count@=#1\count@=\the\count@ \ABfromdiag@
+ \advance\R@p -\B@ \advance\U@p \A@
+ \count@=#3\count@=\the\count@ \ABfromdiag@
+ \advance\R@p \B@ \advance\U@p -\A@
+ \sm@computeext{#1}{#2}{#3}%
+}
+\xydef@\sm@computeext#1#2#3{%
+ \ifsm@firstseg
+ \sm@accumext#1%
+ \sm@firstsegfalse
+ \fi
+ \count@@=#1\count@@=\the\count@@\count@=\count@@
+ \dimen@=\sm@connlen
+ \sm@roundcount@{#2}%
+ \ifnum \count@=\count@@
+ \sm@advancecount@ 1{#2}%
+ \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
+ \ifnum \count@=#3% Check if done
+ \else
+ \sm@advancecount@ 1{#2}%
+ \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
+ \fi
+ \else
+ \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
+ \fi
+ \edef\sm@connlen{\the\dimen@}%
+ \sm@accumext{\the\count@}%
+ \edef\sm@segs{\sm@segs{{#1}{#2}{\the\count@}}}%
+ \ifnum\the\count@=#3 \else
+ \edef\tmp@{{\the\count@}{#2}{#3}}%
+ \expandafter\sm@computeext\tmp@
+ \fi
+}
+\xydef@\sm@accumext#1{%
+ \ifcase #1%
+ \or \count@@=\sm@extvm\advance\count@@ by1%
+ \edef\sm@extvm{\the\count@@}%
+ \or\or \count@@=\sm@exthp\advance\count@@ by1%
+ \edef\sm@exthp{\the\count@@}%
+ \or\or \count@@=\sm@extvp\advance\count@@ by1%
+ \edef\sm@extvp{\the\count@@}%
+ \or\or \count@@=\sm@exthm\advance\count@@ by1%
+ \edef\sm@exthm{\the\count@@}%
+ \fi
+}
+\xydef@\sm@conndraw#1#2#3#4#5{%
+ \def\sm@contlist{\sm@drawseglist}%
+ \edef\sm@dxp{#1}%
+ \edef\sm@dxm{#2}%
+ \edef\sm@dyp{#3}%
+ \edef\sm@dym{#4}%
+ \sm@drawseglist #5\sm@nil}
+\xydef@\sm@drawseglist#1{%
+ \ifx #1\sm@nil \def\sm@contlist{}\else
+ \sm@drawseg #1\fi
+ \sm@contlist}
+\xydef@\sm@drawseg#1#2#3{%
+ \def\CIRin@@{#1}\def\CIRout@@{#3}%
+ \sm@straight%See if a straight line is needed here. Insert it and
+ \ifnum\CIRin@@=\CIRout@@ \else
+ \count@=\CIRin@@
+ \dimen@=\ifnum #2<0 -\fi\R@
+ \ABfromdiag@
+ \advance\X@c -\B@ \advance\Y@c \A@
+ \ifnum #2>0 \def\CIRorient@@{\CIRacw@}%
+ \else \def\CIRorient@@{\CIRcw@}\fi
+ \drop@\literal@{\hbox\bgroup\cir@i}%
+ \dimen@=\ifnum #2<0 -\fi\R@
+ \count@=\CIRout@@\count@=\count@%Wierd. If I remove this last assignm
+ \ABfromdiag@
+ \advance\X@c\B@ \advance\Y@c-\A@
+ \fi
+}
+\xydef@\sm@straight{%
+ \U@c=\z@\D@c=\U@c\L@c=\U@c\R@c=\U@c
+ \pfromc@
+ \ifcase \CIRin@@ \or% 1 is V-
+ \A@=\sm@dym\advance \Y@c\A@
+ \or\or
+ \A@=\sm@dxp\advance \X@c\A@
+ \or\or
+ \A@=\sm@dyp\advance \Y@c\A@
+ \or\or
+ \A@=\sm@dxm\advance \X@c\A@ \fi
+ \ifdim\X@c=\X@p\ifdim\Y@c=\Y@p\else \sm@stri \fi\else \sm@stri \fi
+}
+\xydef@\sm@stri{%
+ \edef\tmp@{\expandafter\noexpand\arstemprefix@@\arstem@@}%
+ \expandafter\sm@connect@\tmp@}
+\xydef@\sm@connect@#1#{%
+ \DN@##1{\connect@{#1}{##1}}\next@}
+\xydef@\sm@drop@#1#{%
+ \DN@##1{\drop@{#1}{##1}}\next@}
+\xydef@\smconn#1#2#3{%
+ \edef\sm@CIRin{#1}\edef\sm@CIRout{#2}%
+ \R@=#3\R@=\the\R@
+ \sm@conn}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytextures.tex b/macros/generic/diagrams/xypic/texinputs/xytextures.tex
new file mode 100644
index 0000000000..e69f1de5f2
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytextures.tex
@@ -0,0 +1,123 @@
+%% xytextures.tex from $Id: xytextures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Textures'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{textures}{Textures driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\Textures@@#1{\dvimessage@{Textures}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\texturesColor@@
+ \xyaddsupport{crayon}\texturesCrayon@@
+ \xyaddsupport{ps}\texturesPS@@
+ \xyaddsupport{rotate}\texturesRotate@@
+ \xyaddsupport{line}\texturesLine@@
+ \xyaddsupport{frame}\texturesFrames@@
+ \xyaddsupport{tile}\texturesTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\TexturesColor@push#1{\special{color push}\special{color #1}}
+\xydef@\TexturesColours@{\texturesPStypes@
+ \let\xylocalColor@=\xystackcolor@
+ \let\xycolor@push=\TexturesColor@push
+ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\texturesCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@ \fi \next@
+ \let\xycolorwarning@=\relax \Textures@@{color}%
+ \let\texturesColor@@=\relax
+ \let\UnloadColor@@=\NoTexturesColor@
+ }
+\xydef@\texturesColor@@{\TexturesColours@}
+\xydef@\NoTexturesColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\texturesColor@@=\TexturesColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\texturesCrayon@@{\texturesColor@@\texturesCrayon@}
+\xydef@\texturesCrayon@{\installCrayolaColors@}%
+\xydef@\texturesPS@@{\texturesPS@}
+\xydef@\texturesPSunload@{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\texturesPS@@=\texturesPS@ }
+\xydef@\texturesPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\TexturesSpecial@\else
+ \let\PSspecial@@=\TexturesSpecial@
+ \let\PSmacro@@=\TexturesMacro@
+ \let\PSdict@@=\TexturesDict@
+ \let\PSraw@@=\TexturesRaw@
+ \let\PSinclude@@=\TexturesInclude@
+ \let\PSspecialdict@@=\TexturesSpecialDict@
+ \let\xyPSobeylines@@=\obeyTextureslines@
+ \Textures@@{PostScript}%
+ \fi \texturesCurrpt@ \XYpredict@ }
+\xydef@\TexturesSpecial@#1{\firstPS@@\special{postscript #1}}
+\xydef@\TexturesMacro@#1{\special{postscript {#1}xy}}
+\xydef@\TexturesDict@#1{\special{prePostScript #1}}
+\xydef@\TexturesSpecialDict@#1{\special{prePostScript #1}}
+\xydef@\TexturesInclude@#1{\firstPS@@\special{prePostScriptfile #1}}
+\xydef@\TexturesRaw@#1{\firstPS@@\special{rawpostscript #1}}%
+{\catcode`\^^M=\active%
+ \gdef\next{\catcode`\^^M=\active \let^^M=\par%
+ \let\PSspecial@@=\TexturesDict@ \obeyspaces}}
+\xylet@\obeyTextureslines@=\next
+\xydef@\texturesCurrpt@{\let\xyPScurrpt@@=\texturesCurrpt@@}%
+\xydef@\texturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
+\xydef@\texturesPS@{\texturesPStypes@
+ \let\texturesPS@@=\relax
+ \let\UnloadPS@@=\texturesPSunload@
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\texturesRotate@@{\texturesRotate@}
+\xydef@\texturesRotate@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xyRotScale@@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@}
+\xydef@\texturesLine@@{\texturesLine@}
+\xydef@\texturesLine@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}%
+ \installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\texturesFrames@@{\texturesFrames@}
+\xydef@\texturesFrames@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}%
+ \installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\texturesTiles@@{\texturesTiles@}
+\xydef@\texturesTiles@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}%
+ \installPSpatterns@ \xystandardpatterns@}%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytile.tex b/macros/generic/diagrams/xypic/texinputs/xytile.tex
new file mode 100644
index 0000000000..fb411fca66
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytile.tex
@@ -0,0 +1,125 @@
+%% xytile.tex from $Id: xytile.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Pattern and Tile extension'' option.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{tile}{Pattern and Tile extension}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xypatternwarning@@{\xypatternmessage@
+ \gdef\xypatternwarning@{\xypatternmessage@
+ \xywarning@{...no further pattern warnings will be given.}%
+ \global\let\xypatternwarning@=\relax }}
+\xylet@\xypatternwarning@=\xypatternwarning@@
+\xydef@\xypatternmessage@{%
+ \xywarning@{Current driver does not support patterns.}}%
+\xydef@\newxypattern{\begingroup\xycatcodes\newxypattern@i}
+\xydef@\newxypattern@i#1#2{\edef\next@{\endgroup
+ \noexpand\newxyPattern{#1}{}{#2}{}}\next@}
+\xydef@\newxyPattern#1#2#3#4{\newxypattern@{#1}{#2}{#3}{#4}{}}
+\xydef@\newxypattern@#1#2#3#4#5{%
+ \expandafter\let\expandafter\next@\csname shape [#1]\endcsname
+ \ifx\next@\relax
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{}{#3}\xypattern@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#2 #3}}}%
+ \fi
+ \else\DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#4}{}\xypattern@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#4}}}%
+ \fi\fi
+ \else \def\tmp@{\relax}\DNii@{#5}%
+ \ifx\nextii@\tmp@
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{}{#3}\xypattern@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#2 #3}}}%
+ \fi
+ \else
+ \DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#4}{}\xypattern@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#4}}}%
+ \fi\fi
+ \else\DN@{}\fi\fi \next@\relax }
+\xydef@\xyNopattern@#1{}
+\xylet@\xypattern@@=\xyNopattern@
+\xydef@\xyNopattern@@#1#2{\xypatternwarning@}
+\xylet@\xypattern@=\xypattern@@
+\xylet@\xylocalpattern@=\xyNopattern@@
+\xydef@\Unloadpattern@{%
+ \let\xylocalpattern@=\xyNopattern@@
+ \let\xypattern@=\xyNopattern@
+ \let\xypatternwarning@=\xypatternwarning@@ }
+\Unloadpattern@
+\xydef@\xystandardpatterns@{}%
+\xynew@{read}{\xypatread@}
+\xydef@\defaultpattfile@{}
+\xydef@\xygetfilepatterns@#1{\DN@{#1}%
+ \ifx\next@\empty
+ \ifx\defaultpattfile@\empty \xywarning@{No pattern file specified.}%
+ \else \DN@{\expandafter\openpattfile@\expandafter{\defaultpattfile@}}\fi
+ \else \DN@{\openpattfile@{#1}}\fi \next@ }
+\xydef@\openpattfile@#1{\openin\xypatread@=#1.xyp
+ \ifeof\xypatread@\xywarning@{No patterns in file: #1.xyp}%
+ \closein\xypatread@
+ \else \expandafter \xyreadpatfile@ \fi }%
+\xydef@\UsePatternFile#1{\def\defaultpattfile@{#1}}
+\xydef@\LoadAllPatterns{\let\parsepattern@=\parsepattern@@
+ \xygetfilepatterns@ }
+\xydef@\LoadPattern#1{\let\parsepattern@=\filepattern@@
+ \def\pattname@{#1}\xygetfilepatterns@}
+\xydef@\AliasPattern#1#2{\let\parsepattern@=\aliaspattern@@
+ \def\aliasname@{#1}\def\pattname@{#2}\xygetfilepatterns@}
+\xydef@\xyreadpatfile@{%
+ \loop@ \bgroup\xycatcodes
+ \global\read\xypatread@ to\xypatline@
+ \ifeof\xypatread@ \aftergroup\endpatread@
+ \else\aftergroup\morepatread@\fi \edef\next@{%
+ \egroup\noexpand\getxypattern@{\xypatline@!!!}\relax}\next@
+ \repeat@ }
+\xydef@\endpatread@{\closein\xypatread@\iffalse}
+\xydef@\morepatread@{\iftrue}
+\xydef@\getxypattern@#1{\def\next{#1}\getxypattern@@}
+\xydef@\getxypattern@@{\DN@{!!!}\ifx\next\next@\DN@{}%
+ \else\DN@{\expandafter\parsepattern@\next}\fi \next@ }
+\xydef@\parsepattern@@#1 #2!#3\relax{\newxypattern{#1}{#2}}
+\xydef@\filepattern@@#1 #2!#3\relax{\DN@{#1}%
+ \ifx\next@\pattname@
+ \DN@{\expandafter\foundpattern@\expandafter{\pattname@}{#2}}%
+ \else\DN@{}\fi \next@ }
+\xydef@\foundpattern@#1#2{\newxypattern{#1}{#2}\endpatread@\fi
+ \expandafter\eat@}
+\xydef@\aliaspattern@@#1 #2!#3\relax{\DN@{#1}%
+ \ifx\next@\pattname@
+ \DN@{\expandafter\foundpattern@\expandafter{\aliasname@}{#2}}%
+ \else\DN@{}\fi \next@ }
+\DN@{\xyaddunsupport{tile}\Unloadpattern@}%
+\ifx\xyeverywithoption@tile@\undefined
+\else\ifx\xyeverywithoption@tile@\empty
+\else
+ \DN@{\xysetup@@{\xywithoption{tile}{\xyeverywithoption@tile@\xydriversloaded@@}}}%
+\fi\fi \next@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytips.tex b/macros/generic/diagrams/xypic/texinputs/xytips.tex
new file mode 100644
index 0000000000..55a61b25e4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytips.tex
@@ -0,0 +1,81 @@
+%% xytips.tex from $Id: xytips.doc,v 3.11 2013/10/06 01:12:08 krisrose Exp $
+%%
+%% Xy-pic ``More Tips'' extension.
+%% Copyright (c) 1992-1996 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{tips}{More Tips extension}{\stripRCS$Revision: 3.11 $}%
+ {Kristoffer H.~Rose}{kris@diku.dk}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xylet@\tip@xy=\tip@
+\xylet@\atip@xy=\atip@
+\xylet@\btip@xy=\btip@
+\xylet@\Tip@xy=\Tip@
+\xylet@\Ttip@xy=\Ttip@
+\xylet@\tipjot@xy=\tipjot@
+\xyfont@\xy@@atfont=xycmat10
+\xyfont@\xy@@btfont=xycmbt10
+\xyfont@\xy@@alfont=xyluat10
+\xyfont@\xy@@blfont=xylubt10
+\xydef@\tipfamily@@{cm}
+\xydef@\tipsize@@{10}
+\xydef@\SelectTips#1#2{%
+ \DN@{#1}\ifx\next@\empty\else \def\tipfamily@@{#1}\fi
+ \DN@{#2}\ifx\next@\empty\else \def\tipsize@@{#2}\fi
+ \csname tipfamily \tipfamily@@\endcsname \ignorespaces}
+\xydefcsname@{tipfamily cm}{\loadtipfonts@
+ \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm
+ \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \def\tipjot@{.2em}}
+\xydef@\loadtipfonts@{\edef\next##1##2{##1=xy\tipfamily@@##2\tipsize@@}%
+ \next{\font\xy@@atfont}{at}
+ \next{\font\xy@@btfont}{bt}
+}
+\xydef@\tip@cm{\activatetips@ \tip@x\tip@@}
+\xydef@\atip@cm{\activatetips@ \tip@x\atip@@}
+\xydef@\btip@cm{\activatetips@ \tip@x\btip@@}
+\xydef@\activatetips@{\let\xyatipfont=\xy@@atfont \let\xybtipfont=\xy@@btfont}
+\xydefcsname@{tipfamily eu}{\loadtipfonts@
+ \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm
+ \let\Tip@=\Tip@eu \let\Ttip@=\Ttip@eu \def\tipjot@{.15em}}
+\xydef@\Tip@eu{\kern1.5pt \vrule height1.5pt depth1.5pt width\z@
+ \Tip@@eu \kern1.5pt \egroup
+ \U@c=1.5pt \D@c=1.5pt \L@c=1.5pt \R@c=1.5pt \Edge@c={\circleEdge}%
+ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Tip@@eu{\count@=\DirectionChar
+ \advance\count@-10 \ifnum\count@<\z@ \advance\count@128 \fi
+ \xyatipfont\char\count@
+ \advance\count@ 20 \ifnum127<\count@ \advance\count@-128 \fi
+ \xybtipfont\char\count@}
+\xydef@\Ttip@eu{\kern2.4pt \vrule height2.4pt depth2.4pt width\z@
+ \Ttip@@eu \kern2.4pt \egroup
+ \U@c=2.4pt \D@c=2.4pt \L@c=2.4pt \R@c=2.4pt \Edge@c={\circleEdge}%
+ \Invisible@false \Hidden@false
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Ttip@@eu{%
+ \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c \Tip@@eu}
+\xydefcsname@{tipfamily lu}{\loadtipfonts@
+ \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm
+ \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \def\tipjot@{.2em}}
+\xydef@\UseTips{\csname tipfamily \tipfamily@@\endcsname}
+\xydef@\NoTips{\let\tip@=\tip@xy \let\atip@=\atip@xy \let\btip@=\btip@xy
+ \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \let\tipjot@=\tipjot@xy}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytp-f.tex b/macros/generic/diagrams/xypic/texinputs/xytp-f.tex
new file mode 100644
index 0000000000..68243fe9c4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytp-f.tex
@@ -0,0 +1,174 @@
+%% xytp-f.tex from $Id: xytp-f.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Frame extension'' TPIC backend support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xytpfloaded\empty \message{not reloaded}\endinput \fi
+\let\xytpfloaded=\empty \xycatcodes
+\xydef@\installTPICframes@{%
+ \let\framed@body@@=\xyTPICframed@body@
+ \let\circled@x@@=\xyTPICcircled@x@
+ \let\ellipsed@x@@=\xyTPICellipsed@x@
+ \installTPICfills@
+ \xyuncatcodes}
+\xydef@\UseTPICframes{\installTPICframes@}
+\xydef@\NoTPICframes{\UnloadFrames@}
+\xydef@\xyTPICframed@body@{\DN@{\framed@body@}%
+ \ifdim\R@=\z@
+ \ifx\framehfill\frm@solidh@@
+ \DN@{\xyTPICframed@rect@i\xytpic@solid@@}%
+ \else\ifx\framehfill\frm@dashh@@
+ \DN@{\xyTPICframed@rect@i\xytpic@dashed@@}%
+ \else\ifx\framehfill\frm@doth@@
+ \DN@{\xyTPICframed@rect@i\xytpic@dotted@@}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\xyTPICframed@rect@i#1{\vglue\U@c
+ \hbox{\hglue\L@c\xyTPICrect@{#1}\hglue\R@c}\vglue\D@c}
+\xydef@\xyTPICcircled@x@{\DN@{\xyTPICcircled@xx{}}%
+ \ifx\framehfill\frm@doth@@ \DN@{\xyTPICdotcirc@}%
+ \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashcirc@}%
+ \fi\fi \next@ }
+\xydef@\xyTPICcircled@xx#1{\vglue2\R@
+ \hbox{\hglue2\R@\xyTPICfullcircle@#1\hglue2\R@}\vglue2\R@}
+\xydef@\xyTPICdotcirc@{\let\zerodot=\framezerodot@@
+ \L@=\R@ \circled@x@@ }
+\xydef@\xyTPICdashcirc@{\L@=\R@ \circled@x@@ }
+\xydef@\xyTPICdotellip@{\ellipsed@x@@ }
+\xydef@\xyTPICdashellip@{\ellipsed@x@@ }
+\xydef@\xyTPICellipsed@x@#1#2{\DN@{\xyTPICellipsed@xx{}}%
+ \ifx\framehfill\frm@doth@@\DN@{\xyTPICdotellip@}%
+ \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashellip@}%
+ \fi\fi \next@{#1}{#2}}
+\xydef@\xyTPICellipsed@xx#1#2#3{\vglue #3\vglue #3\relax
+ \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c
+ \hglue#2\hglue#2\relax \R@=#2\relax \L@=#3\relax
+ \xyTPICfullcircle@#1\hglue#2\hglue#2\relax}%
+ \vglue #3\vglue #3\relax}
+\xydef@\xyTPICrect@#1{\DNii@{\relax}\DN@{#1}\toks@={}%
+ \ifx\next@\nextii@ \xytpic@pn0\relax\xytpic@bk
+ \def\xytpic@style@@{\xytpic@fp}%
+ \else\DNii@{\empty}%
+ \ifx\next@\nextii@\def\xytpic@style@@{\xytpic@ip}\xytpic@bk
+ \else\ifx\next@\empty\def\xytpic@style@@{\xytpic@ip}\xytpic@bk
+ \else#1\fi\fi\fi
+ \xytpic@pt\R@c
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt\D@c
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt{\L@c}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt{\U@c}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \expandafter\xyTPICrect@x\the\toks@
+ \DNii@{\relax}\DN@{#1}\ifx\next@\nextii@
+ \def\xytpic@style@@{\xytpic@fp}\expandafter\xyTPICrect@x\the\toks@\fi }
+\xydef@\xyTPICrect@x#1#2#3#4{\xyTPIC@special{pa -#3 -#4}%
+ \xyTPIC@special{pa -#3 #2}\xyTPIC@special{pa #1 #2}%
+ \xyTPIC@special{pa #1 -#4}\xyTPIC@special{pa -#3 -#4}%
+ \xytpic@style@@ }
+\xydef@\xyTPICoval@#1{\DN@{#1}\DNii@{\relax}%
+ \ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\relax}%
+ \else\DNii@{\empty}\ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\empty}%
+ \else\DN@{\xyTPICoval@i{#1}}\fi\fi \next@ }
+\xylet@\xyTPICoval@i=\eat@
+\xydef@\xyTPICfilledoval@#1{%
+ {\advance\L@c-\R@ \advance\R@c-\R@ \xyTPICrect@{\empty}}%
+ {\advance\U@c-\R@ \advance\D@c-\R@ \xyTPICrect@{\empty}}%
+ \L@=\R@ \bgroup
+ \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \bgroup
+ \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \bgroup
+ \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \bgroup
+ \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \DN@{#1}\DNii@{\relax}\ifx\next@\nextii@
+ \def\tmp@{{\xytpic@pn0\def\xytpic@style@@{\xytpic@fp}}}%
+ \DN@{\expandafter\xyTPICoval@i\tmp@}%
+ \else\DN@{}\fi \next@ }
+\xydef@\setTPICcircstyle@{%
+ \def\xytpic@circstyle@@{\xytpic@ia}\xytpic@bk}
+\xydef@\xyTPICcircle@#1{\DNii@{\relax}%
+ \DN@{#1}\toks@={00}\ifx\next@\nextii@
+ \xytpic@pn0\relax\xytpic@bk \def\xytpic@circstyle@@{\xytpic@ar}%
+ \else\DNii@{\empty}%
+ \ifx\next@\nextii@ \setTPICcircstyle@
+ \else\ifx\next@\empty \setTPICcircstyle@
+ \else#1\fi\fi\fi
+ \xytpic@pt\R@
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt\L@
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \expandafter\xytpic@circstyle@@\the\toks@ 0\twoPi@}
+\xydef@\xyTPICellipse@{%
+ \X@p=\R@c \advance\X@p-\L@c \divide\X@p\tw@ \R@=\R@c \advance\R@-\X@p
+ \Y@p=\D@c \advance\Y@p-\U@c \divide\Y@p\tw@ \L@=\D@c \advance\L@-\Y@p
+ \xyTPICcircle@}
+\xydef@\xyTPICrect@Special#1#2#3#4{\TPICmacro@@{#1 fp}}
+\xydef@\xyTPICdotrect@Special#1{\TPICmacro@@{#1 fp}}
+\xydef@\xyTPICdashrect@Special#1{\TPICmacro@@{#1 fp}}
+\xydef@\xyTPICcirc@Special#1{\TPICmacro@@{#1 ar}}
+\xydef@\xyTPICdotcirc@Special#1{\TPICmacro@@{#1 ar}}
+\xydef@\xyTPICdashcirc@Special#1{\TPICmacro@@{#1 ar}}
+\xydef@\xyTPICfilledRegion#1#2{\vglue\U@c
+ \hbox{\hglue\L@c#1#2\empty\hglue\R@c}\vglue\D@c}
+\xydef@\filledRectangle@TPIC@@{%
+ \ifdim\R@=\z@ \DN@{\xyTPICfilledRegion\xyTPICrect@}%
+ \else \DN@{\xyTPICfilledRegion\xyTPICoval@}%
+ \fi \next@ }
+\xydef@\filledCircle@TPIC@@#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@
+ \xyTPICfilledRegion\xyTPICcircle@#1{}}}
+\xydef@\filledEllipse@TPIC@@{\xyTPICfilledRegion\xyTPICellipse@}
+\xydef@\filledOval@TPIC@@{\xyTPICfilledRegion\xyTPICoval@}
+\xydef@\installTPICfills@{%
+ \let\filledRectangle@@=\filledRectangle@TPIC@@
+ \let\filledOval@@=\filledOval@TPIC@@
+ \let\filledCircle@@=\filledCircle@TPIC@@
+ \let\filledEllipse@@=\filledEllipse@TPIC@@
+}
+\xydef@\xyTPICfillrect@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 fp}%
+ \else\TPICmacro@@{#1 ip}\fi}
+\xydef@\xyTPICfilloval@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 fp}%
+ \else\TPICmacro@@{#1 ip}\fi}
+\xydef@\xyTPICfillcirc@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 ar}%
+ \else\TPICmacro@@{#1 ai}\fi}
+\xydef@\xyTPICfillellipse@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 ar}%
+ \else\TPICmacro@@{#1 ai}\fi}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytpic.tex b/macros/generic/diagrams/xypic/texinputs/xytpic.tex
new file mode 100644
index 0000000000..a58ca347e8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytpic.tex
@@ -0,0 +1,228 @@
+%% xytpic.tex from $Id: xytpic.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``tpic'' TPIC backend, for lines, curves and fills.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{tpic}{TPIC backend}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xynew@{if}\ifTPICspecials@
+\xydef@\UseTPICspecials{\TPICspecials@true}
+\xydef@\NoTPICspecials{\TPICspecials@false}
+\xynew@{count}\xytpic@cnt
+\xydef@\xytpic@max{300}
+\xydef@\maxTPICpoints#1{\count@=#1 \relax
+ \ifnum\count@>\tw@ \edef\xytpic@max{\the\count@}%
+ \else\expandafter\xyTPICmaxwarning@\expandafter{\the\count@}\fi}
+\xydef@\xyTPICmaxwarning@#1{max points must be at least 2, #1 invalid}
+\xydef@\xytpic@style@@{\xytpic@fp}
+\xydef@\xytpic@reset@{\gdef\xytpic@style@@{\xytpic@fp}%
+ \global\xytpic@cnt=\z@ }
+\xydef@\xytpic@set@#1{\xdef\xytpic@style@@{\noexpand#1}}
+\xydef@\xytpic@pn#1{\xyTPIC@special{pn #1}}
+\xydef@\xytpic@pa#1#2{\global\advance\xytpic@cnt\@ne\relax
+ \ifnum\xytpic@cnt=\xytpic@max\relax \xyTPIC@special{pa #1 #2}%
+ \kern-\X@c\raise-\Y@c\hbox{\xytpic@style@@}\kern\X@c
+ \global\xytpic@cnt=\@ne \relax\fi \xyTPIC@special{pa #1 #2}}
+\xydef@\xytpic@fp{\xyTPIC@special{fp}}
+\xydef@\xytpic@ip{\xyTPIC@special{ip}}
+\xydef@\xytpic@da#1{\xyTPIC@special{da #1}}
+\xydef@\xytpic@dt#1{\xyTPIC@special{dt #1}}
+\xydef@\xytpic@sp#1{\xyTPIC@special{sp #1}}
+\xydef@\xytpic@ar#1#2#3#4#5#6{\xyTPIC@special{ar #1 #2 #3 #4 #5 #6}}
+\xydef@\xytpic@ia#1#2#3#4#5#6{\xyTPIC@special{ia #1 #2 #3 #4 #5 #6}}
+\xydef@\xytpic@sh#1{\xyTPIC@special{sh #1}}
+\xydef@\xytpic@wh{\xyTPIC@special{sh 0}}
+\xydef@\xytpic@bk{\xyTPIC@special{sh 1}}
+\xydef@\xyTPIC@special#1{\special{#1}}
+\xydef@\xyTPIC@noisy#1{\W@{TPIC: #1}\special{#1}}
+\xydef@\NoisyTPIC{\let\xyTPIC@special=\xyTPIC@noisy}
+\xydef@\xyTPICsplit@#1#2{\setboxz@h{#1\boxz@#2}}%
+\xydef@\xytpic@pt#1{\dimen@=#1\divide\dimen@ by72
+ \multiply\dimen@ by 1000 \advance\dimen@.5\p@
+ \count@=\dimen@ \divide\count@\p@ }
+\xydef@\xytpic@in#1{\dimen@=#1\divide\dimen@ by72
+ \edef\next@{\expandafter\removePT@\the\dimen@}}%
+\xydef@\xytpic@dot@@{\xytpic@pa00}
+\xydef@\xytpic@width@{\xytpic@pt{\xylinethick@}%
+ \expandafter\xytpic@pn\expandafter{\the\count@}}
+\xydef@\xytpic@line{%
+ \xytpic@dot@@ \xytpic@pt{-\d@X}\count@@=\count@
+ \xytpic@pt\d@Y \edef\next@{{\the\count@@}{\the\count@}}%
+ \expandafter\xytpic@pa\next@ \xytpic@style@@ \xytpic@reset@ }
+\xydef@\xytpic@solid@@{\xytpic@set@\xytpic@fp}
+\xydef@\xytpic@dashed@@{\xytpic@in\xydashl@ \xytpic@dad}
+\xydef@\xytpic@dotted@@{\dimen@=.5\xydashl@ \xytpic@in\dimen@ \xytpic@dtd}
+\xydef@\xytpic@dad{\expandafter\xytpic@set@\expandafter{%
+ \expandafter\xytpic@da\expandafter{\next@}}}
+\xydef@\xytpic@dtd{\expandafter\xytpic@set@\expandafter{%
+ \expandafter\xytpic@dt\expandafter{\next@}}}
+\xydef@\xytpic@polysolid@{\xytpic@set@\xytpic@fp}
+\xydef@\xytpic@polydashed@#1{\count@=#1 \xytpic@dad}
+\xydef@\xytpic@polydotted@#1{\count@=#1 \xytpic@dtd}
+\xydef@\xytpic@postpoly@{\xytpic@style@@ \xytpic@reset@}
+\xydef@\TPICalternative@#1#2{%
+\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
+ \xdef#1{\noexpand\ifTPICspecials@
+ \noexpand\expandafter\expandafter\noexpand\csname xytpic@#2@\endcsname
+ \noexpand\else
+ \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
+ \noexpand\fi}}%
+\xydef@\setupxyTPIC@{\xywarning@{using TPIC specials}%
+ \TPICalternative@{\solid@}{solid}%
+ \TPICalternative@{\dash@}{dashed}%
+ \TPICalternative@{\point@}{point}%
+ \TPICalternative@{\circhar@@}{circhar}%
+ \TPICalternative@{\splinesolid@}{splinesolid}%
+ \xywithoption{frame}{\xyinputorelse@{xytp-f}{}\xyuncatcodes}%
+ \let\setupxyTPIC@=\reloadxyTPIC@
+ \activateTPIC@ }
+\xydef@\xyunloadTPIC@{\xywarning@{TPIC specials turned off}%
+ \xywithoption{curve}{\xysetup@@\uninstallTPICcurves@ }%
+ \xywithoption{line}{\xysetup@@\uninstallTPICline@ }%
+ \xywithoption{frame}{\xysetup@@\uninstallTPICframes@ }%
+ \TPICspecials@false
+ \let\setupxyTPIC@=\reloadxyTPIC@ }
+\xydef@\activateTPIC@{%
+ \xywithoption{line}{\xysetup@@\installTPICline@}%
+ \xywithoption{curve}{\xysetup@@\installTPICcurves@}%
+ \xywithoption{frame}{\xysetup@@\installTPICframes@}%
+ \TPICspecials@true }
+\xydef@\reloadxyTPIC@{\xywarning@{TPIC specials back on}\activateTPIC@ }
+\xydef@\xytpic@solid@{%
+ \ifInvisible@ \let\next@=\no@@
+ \else \DN@{\xyTPICstraight@{\xytpic@solid@@ \xytpic@line}}\fi
+ \next@ }
+\xydef@\xytpic@dashed@{\line@
+ \def\Connect@@{\xyTPICstraight@{\xytpic@dashed@@ \xytpic@line}}}
+\xydef@\xytpic@point@{\xytpic@dot@@\xytpic@fp\egroup
+ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@
+ \def\Drop@@{\styledboxz@}%
+ \def\Connect@@{\xyTPICstraight@{\xytpic@dotted@@ \xytpic@line}}}
+\xydef@\xyTPICstraight@#1{\setupDirection@
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \DN@##1##2{\def\checkoverlap@@{%
+ \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
+ \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
+ \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
+ \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
+ \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
+ \ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
+ \ifInvisible@\let\next@=\relax \else
+ \DN@{\setboxz@h{\kern\X@c \raise\Y@c\hbox{#1}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}%
+ \fi
+ \checkoverlap@@
+ \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\Creset@@ }
+\xydef@\xytpic@splinesolid@{\xyTPICspline@\xytpic@fp }
+\xydef@\xytpic@splinedashed@{\xytpic@in\xydashl@\expandafter\xyTPICspline@
+ \expandafter{\expandafter\xytpic@da\expandafter{\next@}}}
+\xydef@\xytpic@splinedotted@{\xytpic@in{.5\xydashl@}\expandafter\xyTPICspline@
+ \expandafter{\expandafter\xytpic@dt\expandafter{\next@}}}
+\xydef@\xyTPICspline@#1{\setbox\splinebox@=\copy\voidb@x
+ \SloppyCurves
+ \global\xytpic@cnt=\@ne \xytpic@set@{#1}%
+ \def\splineextra@@{\xyTPICspline@dot}%
+ \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ \xytpic@style@@}
+\xydef@\xyTPICspline@dot{\xytpic@pt{\X@c}\count@@=\count@
+ \xytpic@pt{-\Y@c}\edef\next@{{\the\count@@}{\the\count@}}%
+ \expandafter\xytpic@pa\next@ }
+\xydef@\xyTPIClinewidth@#1{\xytpic@pt{#1}\edef\next@{\the\count@}}
+\xydef@\installTPICline@{%
+ \let\xylinewidth@@=\xylinewidth@
+ \let\xylineSpecial@@=\xytpic@pn
+ \let\transxyline@@=\xyTPIClinewidth@ }
+\xydef@\uninstallTPICline@{\UnloadLine@}%
+\xydef@\xydoTPICcircle@#1{\DN@{#1}%
+ \ifx\next@\empty\DN@{\xyTPICfullcircle@}%
+ \else\expandafter\DNii@\expandafter{\addDASH@{}}%
+ \ifx\next@\nextii@\DN@{\L@=\R@ \xyTPICfullcircle@}%
+ \else\DN@{\dosolidcircle@{#1}}\fi\fi \next@ }
+\xydef@\xyTPICfullcircle@{\xyTPICpartcircle@{00}0\twoPi@}%
+\xydef@\xyTPICpartcircle@#1#2#3{%
+ \xytpic@pt{\R@}\expandafter\DNii@\expandafter{\the\count@}%
+ \xytpic@pt{\L@}\edef\next@{#1{\nextii@}{\the\count@}{#2}{#3}}%
+ \expandafter\xytpic@ar\next@ }
+\xydef@\qartPi@{0.7853981}
+\xydef@\tartPi@{2.3561944}
+\xydef@\xytpic@circhar@#1{\xytpic@width@\ifcase#1%
+ \xytpic@pt{\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{\tartPi@}{\fullPi@}\kern\partroottwo\R@
+ \or
+ \xytpic@pt{\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{\halfPi@}{\tartPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{\z@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{\qartPi@}{\halfPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{-\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@0{\qartPi@}\kern\partroottwo\R@
+ \or
+ \xytpic@pt{-\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\qartPi@}0\kern\partroottwo\R@
+ \or
+ \xytpic@pt{\z@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\halfPi@}{-\qartPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\tartPi@}{-\halfPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\fullPi@}{-\tartPi@}\kern\partroottwo\R@
+ \fi}
+\xydef@\xyTPICcirchar@i#1#2#3{\L@=\R@ \xyTPICpartcircle@{#1}{#2}{#3}}
+\xydef@\xyTPIC@spline@ii@{\DN@{\xy@spline@ii}%
+ \ifx\splineSTYLE@\empty\DN@{\xyTPICqspline@{0}}%
+ \else\expandafter\DNii@\expandafter{\addDASH@{}}%
+ \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{0}}%
+ \else\expandafter\DNii@\expandafter{\addDOT@{}}%
+ \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{-.5}}%
+ \else\expandafter\expandafter\expandafter\DNii@\expandafter\expandafter
+ \expandafter{\expandafter\addDASH@\addDASH@{}}%
+ \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{}}%
+ \fi\fi\fi\fi
+ \next@ }%
+\xydef@\xyTPIC@accumulate{\xytpic@pt\X@c \count@@=\count@
+ \xytpic@pt{-\Y@c}\edef\next@{{\the\count@@}{\the\count@}}%
+ \expandafter\xytpic@pa\next@ }
+\xydef@\xyTPICqspline@#1{\xytpic@width@
+ \xytpic@in{#1\xydashl@}\expandafter\gdef\expandafter\xytpic@style@@
+ \expandafter{\expandafter\xytpic@sp\expandafter{\next@}}%
+ \save@ \cfromp@ \xyTPIC@accumulate
+ \edef\smapp@@{\s@bot}\smapxy@i{\xyTPIC@accumulate}%
+ \leave@ \xyTPIC@accumulate \xytpic@style@@ \xytpic@reset@
+ \enter@{}\xy@spline@x }
+\xydef@\installTPICcurves@{%
+ \let\dosolidcircle@@=\xydoTPICcircle@
+ \let\xy@spline@ii@@=\xyTPIC@spline@ii@
+ }
+\xydef@\uninstallTPICcurves@{%
+ \let\dosolidcircle@@=\dosolidcircle@
+ \let\xy@spline@ii@@=\xy@spline@ii }
+ \xywithoption{frame}{\xyinputorelse@{xytp-f}{}}
+\xydef@\uninstallTPICframes@{\UnloadFrames@}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyv2.tex b/macros/generic/diagrams/xypic/texinputs/xyv2.tex
new file mode 100644
index 0000000000..4d92bd01cf
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyv2.tex
@@ -0,0 +1,277 @@
+%% xyv2.tex from $Id: xyv2.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Version 2 compatibility'' feature.
+%% Copyright (c) 1993-1995 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{v2}{Version 2 Compatibility}{\stripRCS$Revision: 3.8 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xylet@\XY=\Xy
+\ifx\redefine\undefined \let\redefine=\def \fi
+\ifx\define\undefined \let\define=\xydef@ \fi
+\ifx\dsize\undefined \let\dsize=\displaystyle \fi
+\ifx\tsize\undefined \let\dsize=\textstyle \fi
+\ifx\ssize\undefined \let\ssize=\scriptstyle \fi
+\ifx\sssize\undefined \let\sssize=\scriptscriptstyle \fi
+\ifx\text\undefined
+ \def\text{\relax\textC}%
+ \xydef@\textC#1{\relax
+ \ifmmode\mathchoice
+ {\hbox{\the\textfont0\relax#1}}%
+ {\hbox{\the\textfont0\relax#1}}%
+ {\hbox{\the\scriptfont0\relax#1}}%
+ {\hbox{\the\scriptscriptfont0\relax#1}}%
+ \else{\relax#1}\fi}
+\fi
+\xydef@\Text{\relax\xyFN@\Text@}
+\xydef@\TextC{\relax\textC}%
+\xydef@\Text@{%
+ \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\Text@i}%
+ \else \DN@{\A@=\maxdimen \Text@i}\fi \next@}
+\xydef@\Text@i#1{%
+ \ifmmode \mathchoice
+ {\expandafter\Text@ii\the\textfont0{#1}}%
+ {\expandafter\Text@ii\the\textfont0{#1}}%
+ {\expandafter\Text@ii\the\scriptfont0{#1}}%
+ {\expandafter\Text@ii\the\scriptscriptfont0{#1}}%
+ \else
+ \leavevmode \expandafter\Text@ii\the\textfont0{#1}%
+ \fi\ignorespaces}
+\xydef@\Text@ii{\hbox\bgroup \txt@i}
+\xylet@\cL=\L@c
+\xylet@\cR=\R@c
+\xylet@\cD=\D@c
+\xylet@\cH=\U@c
+\xylet@\Xc=\X@c
+\xylet@\Yc=\Y@c
+\xylet@\Uc=\U@c
+\xylet@\Dc=\D@c
+\xylet@\Lc=\L@c
+\xylet@\Rc=\R@c
+\xylet@\Xp=\X@p
+\xylet@\Yp=\Y@p
+\xylet@\Up=\U@p
+\xylet@\Dp=\D@p
+\xylet@\Lp=\L@p
+\xylet@\Rp=\R@p
+\xylet@\dX=\d@X
+\xylet@\dY=\d@Y
+\xylet@\Xorigin=\X@origin
+\xylet@\Yorigin=\Y@origin
+\xylet@\Xxbase =\X@xbase
+\xylet@\Yxbase =\Y@xbase
+\xylet@\Xybase =\X@ybase
+\xylet@\Yybase =\Y@ybase
+\xylet@\Xmin=\X@min
+\xylet@\Ymin=\Y@min
+\xylet@\Xmax=\X@max
+\xylet@\Ymax=\Y@max
+\xydef@\go{\aftergo{}}
+\xydef@\aftergo#1{\xy@\aftergo{\enter@\pfromthec@}\afterPOS{\xy@@\leave@#1}}
+\xydef@\merge{\POS.p\relax}
+\xydef@\swap{\xy@\swap\swap@}
+\xydef@\Drop{\expandafter\drop\entrymodifiers@}
+\xydef@\none{\xy@\none{}\ignorespaces}
+\xydef@\solid{\connect h\dir{-}}
+\xydef@\Solid{\connect h\dir2{-}}
+\xydef@\Ssolid{\connect h\dir3{-}}
+\xydef@\dashed{\connect h\dir{--}}
+\xydef@\Dashed{\connect h\dir2{--}}
+\xydef@\Ddashed{\connect h\dir3{--}}
+\xydef@\dotted{\connect h\dir{.}}
+\xydef@\Dotted{\connect h\dir2{.}}
+\xydef@\Ddotted{\connect h\dir3{.}}
+\xydef@\dottedwith#1{\connect h{#1}}
+\xydef@\notip{\dir{}}
+\xydef@\stop{\dir{|}}
+\xydef@\astop{\dir^{|}}
+\xydef@\bstop{\dir_{|}}
+\xydef@\tip{\dir{>}}
+\xydef@\atip{\dir^{>}}
+\xydef@\btip{\dir_{>}}
+\xydef@\Tip{\dir2{>}}
+\xywarnifdefined\aTip
+\xywarnifdefined\bTip
+{\xyuncatcodes
+ \gdef\aTip{\object=<5pt>:(32,-1)\dir^{>}}
+ \gdef\bTip{\object=<5pt>:(32,+1)\dir_{>}}}
+\xydef@\Ttip{\dir3{>}}
+\xydef@\ahook{\dir^{(}}
+\xydef@\bhook{\dir_{(}}
+\xydef@\aturn{\dir^{'}}
+\xydef@\bturn{\dir_{'}}
+\xydef@\rotate{\hbox\bgroup
+ \DN@{\ifx (\next
+ \DN@(####1){\rotate@ii{####1}}%
+ \else \DN@{\rotate@i}\fi\next@}\xyFN@\next@}
+\xydef@\rotate@i#1{\reverseDirection@ #1\OBJECT@x}
+\xydef@\rotate@ii#1#2{\dimen@=#1\p@
+ \ifdim \dimen@=-\p@ \aboveDirection@\xydashl@
+ \else\ifdim\dimen@= \p@ \belowDirection@\xydashl@
+ \else\ifdim\dimen@<-1.5\p@ \advance\dimen@-2\p@
+ \edef\next@{\expandafter\removePT@\the\dimen@}\vDirection@(-1,\next@){1pc}%
+ \else\ifdim\dimen@<-.5\p@ \vDirection@(#1,-1){1pc}%
+ \else\ifdim\dimen@< .5\p@ \vDirection@( 1,#1){1pc}%
+ \else\ifdim\dimen@<1.5\p@ \vDirection@(#1, 1){1pc}%
+ \else \dimen@=-\dimen@ \advance\dimen@2\p@
+ \edef\next@{\expandafter\removePT@\the\dimen@}\vDirection@(-1,\next@){1pc}%
+ \fi\fi\fi\fi\fi\fi
+ #2\OBJECT@x}
+\xydef@\squash#1{%
+ \ifmmode\setboxz@h{\m@th${\mathstrut}#1{\mathstrut}$}\else\setboxz@h{#1}\fi
+ \setboxz@h{\kern-.5\wdz@ \dimen@=.5\ht\z@ \advance\dimen@-.5\dp\z@
+ \lower\dimen@\boxz@}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\grow{%
+ \DN@{\ifx <\next \DN@<####1>{\dimen@=####1\grow@\empty}%
+ \else \DN@{\dimen@=2\p@ \grow@\empty}\fi\next@}\xyFN@\next@}
+\xydef@\grow@#1#{\grow@@{#1}}
+\xydef@\grow@@#1#2{\relax
+ \ifmmode \setboxz@h{\kern\dimen@ \m@th$#2$\kern\dimen@}%
+ \else \setboxz@h{\kern\dimen@ {#2}\kern\dimen@}\fi
+ \dimen@ii=\ht\z@ \advance\dimen@ii\dimen@ \ht\z@=\dimen@ii
+ \dimen@ii=\dp\z@ \advance\dimen@ii\dimen@ \dp\z@=\dimen@ii \boxz@}
+\xydef@\squarify{\addEQ@{\addPLUS@\object}}
+\xydef@\qc{\corn@@}
+\xyrequire{frame}\xycatcodes
+\xydef@\framed{\relax\convertframed{-}}
+\xydef@\Framed{\relax\convertframed{=}}
+\xydef@\circled{\relax\convertframed{o}}
+\xydef@\Circled{\relax\convertframed{oo}}
+\xydef@\convertframed#1{\DNii@##1@{\drop\frm##1{#1}}\xyFN@\convertframed@i}
+\xydef@\convertframed@i{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@##1}{\addGT@{\addLT@{\nextii@}##1}@}%
+ \else \DN@{\nextii@ @}\fi \next@}
+\xydef@\dotframed{\relax\drop\frm{.}}
+\xydef@\dashframed{\relax\drop\frm{--}}
+\xydef@\rounddashframed{\relax\drop\frm{o-}}
+\xydef@\filled{\DN@{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@####1}{\xy@@{\frame@fill@@{####1}}}%
+ \else \DN@{\xy@@{\frame@fill@@\z@}}%
+ \fi\next@}\xyFN@\next@}
+\xydef@\Filled{\DN@{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@####1}{\xy@@{\frame@emph@@{####1}}}%
+ \else \DN@{\xy@@{\frame@emph@@\z@}}%
+ \fi\next@}\xyFN@\next@}
+\xyrequire{matrix}\xycatcodes
+\xydef@\diagram#1\enddiagram{\relax\diagram@\diagram@@{#1}}
+\xydef@\diagram@{\relax
+ \ifmmode \DN@##1##2{\vcenter{\oldxymatrix@true \xy##1{\xymatrix{##2}}\endxy}}%
+ \else\DN@##1##2{{\oldxymatrix@true \xy/u.8ex/##1{\xymatrix{##2}}\endxy}}%
+ \fi \next@}
+\xydef@\LaTeXdiagrams{\def\diagram{\ltxdiagram@\diagram@@}%
+ \def\diagramnocompile{\ltxdiagram@\literal@}%
+ \def\diagramcompileto##1{\ltxdiagram@{\NoCompileMatrices\xycompileto{##1}}}}
+\xydef@\ltxdiagram@#1#2\end#3{\relax
+ \DN@{#3}\DNii@{diagram}\ifx\next@\nextii@\diagram@{#1}{#2}\end{diagram}%
+ \else\xyerr@{Put \string{\string} around \string\begin...\string\end\space
+ within diagrams}\fi}
+\xylet@\diagram@@=\literal@
+\xydef@\NoisyDiagrams{}
+\xydef@\spreaddiagramrows#1{\addPLUS@\xymatrixrowsep{#1}}
+\xydef@\spreaddiagramcolumns#1{\addPLUS@\xymatrixcolsep{#1}}
+\xyrequire{arrow}\xycatcodes
+\xylet@\arrow=\ar
+{\xyuncatcodes
+ \gdef\morPHISM#1#2#3{\PATH~={\oldconnect{#1}}~<{|<*{#3}}~>{|>*{#2}}}}
+\xydef@\morphism{\relax\morPHISM}
+\xylet@\connect@iii=\connect
+\xydef@\oldconnect#1{%
+ \let\PATHlabelabove@@=\PATHlabelabove@
+ \let\PATHlabelbelow@@=\PATHlabelbelow@
+ \let\connect=\preconnect#1\let\connect=\connect@iii}
+\xydef@\definemorphism#1#2#3#4{%
+ \xydefcsname@{x#1}{\morphism{#2}{#3}{#4}}%
+ \xydefcsname@{u#1}{\morphism{#2}{#3}{#4}[u]}%
+ \xydefcsname@{d#1}{\morphism{#2}{#3}{#4}[d]}%
+ \xydefcsname@{l#1}{\morphism{#2}{#3}{#4}[l]}%
+ \xydefcsname@{r#1}{\morphism{#2}{#3}{#4}[r]}%
+ \xydefcsname@{uu#1}{\morphism{#2}{#3}{#4}[uu]}%
+ \xydefcsname@{dd#1}{\morphism{#2}{#3}{#4}[dd]}%
+ \xydefcsname@{ll#1}{\morphism{#2}{#3}{#4}[ll]}%
+ \xydefcsname@{rr#1}{\morphism{#2}{#3}{#4}[rr]}%
+ \xydefcsname@{ur#1}{\morphism{#2}{#3}{#4}[ur]}%
+ \xydefcsname@{ul#1}{\morphism{#2}{#3}{#4}[ul]}%
+ \xydefcsname@{dr#1}{\morphism{#2}{#3}{#4}[dr]}%
+ \xydefcsname@{dl#1}{\morphism{#2}{#3}{#4}[dl]}%
+ \xydefcsname@{uul#1}{\morphism{#2}{#3}{#4}[uul]}%
+ \xydefcsname@{uur#1}{\morphism{#2}{#3}{#4}[uur]}%
+ \xydefcsname@{ull#1}{\morphism{#2}{#3}{#4}[ull]}%
+ \xydefcsname@{urr#1}{\morphism{#2}{#3}{#4}[urr]}%
+ \xydefcsname@{ddl#1}{\morphism{#2}{#3}{#4}[ddl]}%
+ \xydefcsname@{ddr#1}{\morphism{#2}{#3}{#4}[ddr]}%
+ \xydefcsname@{dll#1}{\morphism{#2}{#3}{#4}[dll]}%
+ \xydefcsname@{drr#1}{\morphism{#2}{#3}{#4}[drr]}%
+ \xydefcsname@{uull#1}{\morphism{#2}{#3}{#4}[uull]}%
+ \xydefcsname@{uurr#1}{\morphism{#2}{#3}{#4}[uurr]}%
+ \xydefcsname@{ddll#1}{\morphism{#2}{#3}{#4}[ddll]}%
+ \xydefcsname@{ddrr#1}{\morphism{#2}{#3}{#4}[ddrr]}}
+\definemorphism{to}\solid\tip\notip
+\definemorphism{line}\solid\notip\notip
+\definemorphism{dashed}\dashed\notip\notip
+\definemorphism{dotted}\dotted\notip\notip
+\definemorphism{double}\Solid\notip\notip
+\xywarnifdefined\xyviitoi
+\xywarnifdefined\xyviitoii
+\xydef@\XXtoY@#1#2#3#4#5{\save;[#3]\relax
+ \xy@@{%
+ \dimen@=\turnradius@ \ifdim#1<#2\relax \dimen@ii=#2\else\dimen@ii=#1\fi
+ \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi
+ \edef\xyviitoi{\the\dimen@}\leave@}%
+ \xto ~{[#3]} `#4[#3]#5/#4\xyviitoi/ `[#3]}
+\xydef@\toXY@#1#2#3#4#5{\xy@@{\idfromc@{@}%
+ \dimen@=\turnradius@ \dimen@ii=#1\relax
+ \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi
+ \edef\xyviitoi{\the\dimen@}%
+ \dimen@=\turnradius@ \dimen@ii=#2\relax
+ \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi
+ \edef\xyviitoii{\the\dimen@}}%
+ \morphism\solid{\object #4:(-1,0)\dir{>}}\notip
+ ~{`"@" "@"} `#3"@"#5/#3\xyviitoi/#5/#4\p@/ `"@"#5/#4\xyviitoii/}
+\xyuncatcodes \catcode64=11
+\xydef@\lltod{\XXtoY@\D@c\D@p{ll}{d}+}
+\xydef@\lltou{\XXtoY@\U@c\U@p{ll}{u}+}
+\xydef@\rrtod{\XXtoY@\D@c\D@p{rr}{d}+}
+\xydef@\rrtou{\XXtoY@\U@c\U@p{rr}{u}+}
+\xydef@\ddtol{\XXtoY@\L@c\L@p{dd}{l}+}
+\xydef@\ddtor{\XXtoY@\R@c\R@p{dd}{r}+}
+\xydef@\uutol{\XXtoY@\L@c\L@p{uu}{l}+}
+\xydef@\uutor{\XXtoY@\R@c\R@p{uu}{r}+}
+\xydef@\told{\toXY@\L@c\D@c{l}{d}+}
+\xydef@\tolu{\toXY@\L@c\U@c{l}{u}+}
+\xydef@\tord{\toXY@\R@c\D@c{r}{d}+}
+\xydef@\toru{\toXY@\R@c\U@c{r}{u}+}
+\xydef@\todl{\toXY@\D@c\L@c{d}{l}+}
+\xydef@\todr{\toXY@\D@c\R@c{d}{r}+}
+\xydef@\toul{\toXY@\U@c\L@c{u}{l}+}
+\xydef@\tour{\toXY@\U@c\R@c{u}{r}+}
+\xycatcodes
+\xydef@\TurnRadius{\addEQ@\turnradius}
+\xydef@\diagramcompileto#1#2\enddiagram{\relax
+ \diagram@{\NoCompileMatrices\xycompileto{#1}}{#2}}
+\xydef@\diagramnocompile#1\enddiagram{\relax\diagram@\literal@{#1}}
+\xydef@\CompileAllDiagrams#1{\CompilePrefix{#1}\CompileMatrices}
+\xydef@\NoCompileAllDiagrams{\NoCompileMatrices}
+\xydef@\ReCompileAllDiagrams{\CompileMatrices}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyweb.tex b/macros/generic/diagrams/xypic/texinputs/xyweb.tex
new file mode 100644
index 0000000000..290612e5de
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyweb.tex
@@ -0,0 +1,94 @@
+%% xyweb.tex from $Id: xyweb.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Lattice and web'' feature.
+%% Copyright (c) 1994-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{web}{Lattice and web feature}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\message{lattices,}
+\xynew@{count}\lattice@A
+\xynew@{count}\lattice@B
+\xydef@\latticeA{\lattice@A}
+\xydef@\latticeB{\lattice@B}
+\xydef@\xylattice#1#2#3#4{\xy@{LATTICE}{\xylattice@{#1}{#2}{#3}{#4}}}%
+\xydef@\xylattice@#1#2#3#4{%
+ \lattice@A=#1\relax
+ \loop \bgroup\lattice@B=#3\relax
+ \innerlatticeloop@{#4}%
+ \edef\tmp@{\egroup
+ \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max
+ }\tmp@ \ifnum\lattice@A<#2\relax \advance\lattice@A\@ne
+ \repeat }
+\xydef@\innerlatticeloop@#1{%
+ \loop \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ \the\lattice@A,\the\lattice@B @%
+ \edef\latticeX{\expandafter\removePT@\the\X@c}%
+ \edef\latticeY{\expandafter\removePT@\the\Y@c}%
+ \leave@ \latticebody \leave@
+ \ifnum\lattice@B<#1\relax \advance\lattice@B\@ne
+ \repeat }
+\xydef@\croplattice#1#2#3#4#5#6#7#8{\xy@{LATTICE}%
+ {\xycroplattice@{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+\xydef@\xycroplattice@#1#2#3#4#5#6#7#8{%
+ \enter@{\X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}%
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ #5,0 @\leave@ \X@min=\X@c \leave@
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ #6,0 @\leave@ \X@max=\X@c \leave@
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ 0,#7 @\leave@ \Y@min=\Y@c \leave@
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ 0,#8 @\leave@ \Y@max=\Y@c \leave@
+ \lattice@A=#1\relax
+ \loop
+ \bgroup\lattice@B=#3\relax
+ \enter@{\cfromthec@}\innercroplatticeloop@{#4}\leave@
+ \egroup
+ \ifnum\lattice@A<#2\relax \advance\lattice@A\@ne
+ \repeat \mergecropextents@ }
+\xydef@\innercroplatticeloop@#1{%
+ \loop
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ \the\lattice@A,\the\lattice@B @%
+ \edef\latticeX{\expandafter\removePT@\the\X@c}%
+ \edef\latticeY{\expandafter\removePT@\the\Y@c}%
+ \leave@ \DN@{\latticebody}%
+ \ifdim\X@c<\X@min\DN@{}%
+ \else\ifdim\X@c>\X@max\DN@{}%
+ \else\ifdim\Y@c<\Y@min\DN@{}%
+ \else\ifdim\Y@c>\Y@max\DN@{}%
+ \fi\fi\fi\fi \next@ \leave@
+ \ifnum\lattice@B<#1\relax \advance\lattice@B\@ne
+ \repeat }
+\xydef@\mergecropextents@{%
+ \edef\tmp@{%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi}%
+ \leave@ \tmp@ }
+\xydef@\deflatticebody@{\def\latticebody{\drop{\bullet}}}
+\xydef@\defaultlatticebody{\deflatticebody@}
+\deflatticebody@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex b/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex
new file mode 100644
index 0000000000..7da34d1d1d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex
@@ -0,0 +1,138 @@
+%% xyxdvi.tex from $Id: xyxdvi.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``xdvi-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by the
+%% Free Software Foundation; either version 2 of the License, or (at your
+%% option) any later version.
+%%
+%% The Xy-pic package is distributed in the hope that it will be useful, but
+%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{xdvi}{XDVI driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xdvi@@#1{\dvimessage@{xdvi}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\xdviColor@@
+ \xyaddsupport{crayon}\xdviCrayola@@
+ \xyaddsupport{ps}\xdviPS@@
+ \xyaddsupport{rotate}\xdviRotate@@
+ \xyaddsupport{line}\xdviLine@@
+ \xyaddsupport{frame}\xdviFrames@@
+ \xyaddsupport{tile}\xdviTiles@@
+ \xyaddsupport{tpic}\xdviTPIC@
+}
+\xydef@\xdvi@Color@{\xdviPStypes@
+ \let\xylocalColor@=\xyNoColor@@
+ \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\installPScolor@ }%
+ \else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\xdviCrayola@{}}%
+ \else \DN@{\xystandardcolors@}\fi \next@
+ \let\xdviColor@@=\relax
+ \let\UnloadColor@@=\NoXDVIcolor@
+ }%
+\xydef@\xdviColor@@{\xdvi@Color@}
+\xydef@\NoXDVIcolor@{%
+ \def\xycolor@{\xycolor@@}%
+ \let\xycolor@@=\xyNoColor@
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\xdviColor@@=\xdvi@Color@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\NoXDVIcolordvi@{\xywarning@{%
+ Neither colordvi.tex nor colordvi.sty could be found.}%
+ \xyBEcolorcheck@}%
+\xydef@\xdviCrayola@@{\xdviColor@@\xdviCrayola@}
+\xydef@\xdviCrayola@{%
+ \let\prevxycolor@=\newxycolor@
+ \def\newxyXDVIcolor@##1##2##3{\prevxycolor@{##1}{}{##1}}%
+ \let\newxycolor@=\newxyXDVIcolor@
+ \installCrayolaColors@
+ \let\newxycolor@=\prevxycolor@ }%
+\xydef@\xdviPS@@{\xdviPS@}
+\xydef@\xdviPS@unload{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\xdviPS@@=\xdviPS@ }
+\xydef@\xdviPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\xdviSpecial@\else
+ \let\PSspecial@@=\xdviSpecial@
+ \let\PSmacro@@=\xdviMacro@
+ \let\PSdict@@=\xdviDict@
+ \let\PSspecialdict@@=\xdviDict@
+ \let\PSraw@@=\xdviRaw@
+ \let\PSinclude@@=\xdviInclude@
+ \let\xyPSobeylines@@=\obeyXDVIlines@
+ \let\xyPScurrpt@@=\xdviCurrpt@@
+ \xdvi@@{PostScript}%
+ \fi \XYpredict@ }
+\xywarnifdefined\xdviSpecial@
+\xywarnifdefined\xdviMacro@
+\xywarnifdefined\xdviDict@
+\xywarnifdefined\xdviInclude@
+\xywarnifdefined\xdviRaw@
+{\catcode`\"=11 \catcode`\!=11 \catcode`\:=11
+ \gdef\xdviSpecial@#1{\special{ps:: SDict begin #1 end}}
+ \gdef\xdviMacro@#1{\firstPS@@\special{" {#1}xy}}
+ \gdef\xdviDict@#1{\special{! #1}}
+ \gdef\xdviInclude@#1{\special{header=#1}}
+ \gdef\xdviRaw@#1{\special{ps: SDict begin #1 end}}
+\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space }}%
+\xylet@\obeyXDVIlines@=\next
+\xydef@\xdviCurrpt@{\let\xyPScurrpt@@=\xdviCurrpt@@}%
+\xydef@\xdviCurrpt@@{\PSraw@@{xyp}}
+\xydef@\xdviPS@{\xdviPStypes@
+ \let\xdviPS@@=\PSspecials@true
+ \let\UnloadPS@@=\xdviPS@unload
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\xdviRotate@@{\xdviRotate@}
+\xydef@\xdviRotate@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xdviCurrpt@ \xdviRotScale@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\xdviRotScale@{%
+ \def\xyrot@start(##1){{xyct ##1\space xyrs }}%
+ \def\xyrot@end{}%
+ \def\xyscale@start(##1,##2){{xyct ##1\space##2\space xyss }}%
+ \def\xyscale@end{}}
+\xydef@\xdviLine@@{\xdviLine@}
+\xydef@\xdviLine@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\xdviFrames@@{\xdviFrames@}
+\xydef@\xdviFrames@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi
+ \next@ }
+\xydef@\xdviTiles@@{\xdviTiles@}
+\xydef@\xdviTiles@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\xdviTPIC@@{\xdviTPIC@}
+\xydef@\xdviTPIC@{\setupxyTPIC@}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/type1/xyatip10.pfb b/macros/generic/diagrams/xypic/type1/xyatip10.pfb
new file mode 100644
index 0000000000..0d33c7264e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyatip10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xybsql10.pfb b/macros/generic/diagrams/xypic/type1/xybsql10.pfb
new file mode 100644
index 0000000000..93416c6d4c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xybsql10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xybtip10.pfb b/macros/generic/diagrams/xypic/type1/xybtip10.pfb
new file mode 100644
index 0000000000..031666e33c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xybtip10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycirc10.pfb b/macros/generic/diagrams/xypic/type1/xycirc10.pfb
new file mode 100644
index 0000000000..e46354d2fa
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycirc10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmat10.pfb b/macros/generic/diagrams/xypic/type1/xycmat10.pfb
new file mode 100644
index 0000000000..0ed9d2da2d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmat10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmat11.pfb b/macros/generic/diagrams/xypic/type1/xycmat11.pfb
new file mode 100644
index 0000000000..483736a424
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmat11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmat12.pfb b/macros/generic/diagrams/xypic/type1/xycmat12.pfb
new file mode 100644
index 0000000000..20635afdb0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmat12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmbt10.pfb b/macros/generic/diagrams/xypic/type1/xycmbt10.pfb
new file mode 100644
index 0000000000..938ed78e11
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmbt10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmbt11.pfb b/macros/generic/diagrams/xypic/type1/xycmbt11.pfb
new file mode 100644
index 0000000000..8afdb36d8e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmbt11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmbt12.pfb b/macros/generic/diagrams/xypic/type1/xycmbt12.pfb
new file mode 100644
index 0000000000..8d8cc46e62
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmbt12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xydash10.pfb b/macros/generic/diagrams/xypic/type1/xydash10.pfb
new file mode 100644
index 0000000000..1e98c8dcc1
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xydash10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeuat10.pfb b/macros/generic/diagrams/xypic/type1/xyeuat10.pfb
new file mode 100644
index 0000000000..521c9c6f44
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeuat10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeuat11.pfb b/macros/generic/diagrams/xypic/type1/xyeuat11.pfb
new file mode 100644
index 0000000000..f27052055e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeuat11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeuat12.pfb b/macros/generic/diagrams/xypic/type1/xyeuat12.pfb
new file mode 100644
index 0000000000..5c08a947e8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeuat12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeubt10.pfb b/macros/generic/diagrams/xypic/type1/xyeubt10.pfb
new file mode 100644
index 0000000000..0ca4aa8456
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeubt10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeubt11.pfb b/macros/generic/diagrams/xypic/type1/xyeubt11.pfb
new file mode 100644
index 0000000000..e24d02fcdc
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeubt11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeubt12.pfb b/macros/generic/diagrams/xypic/type1/xyeubt12.pfb
new file mode 100644
index 0000000000..310265f588
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeubt12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyluat10.pfb b/macros/generic/diagrams/xypic/type1/xyluat10.pfb
new file mode 100644
index 0000000000..97695589f9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyluat10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyluat11.pfb b/macros/generic/diagrams/xypic/type1/xyluat11.pfb
new file mode 100644
index 0000000000..b127decc3b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyluat11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyluat12.pfb b/macros/generic/diagrams/xypic/type1/xyluat12.pfb
new file mode 100644
index 0000000000..dc4b81befb
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyluat12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xylubt10.pfb b/macros/generic/diagrams/xypic/type1/xylubt10.pfb
new file mode 100644
index 0000000000..ff8ae8110e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xylubt10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xylubt11.pfb b/macros/generic/diagrams/xypic/type1/xylubt11.pfb
new file mode 100644
index 0000000000..9154c0055c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xylubt11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xylubt12.pfb b/macros/generic/diagrams/xypic/type1/xylubt12.pfb
new file mode 100644
index 0000000000..db87a5206b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xylubt12.pfb
Binary files differ
diff --git a/macros/generic/dirtree/README b/macros/generic/dirtree/README
new file mode 100644
index 0000000000..3ac18f495b
--- /dev/null
+++ b/macros/generic/dirtree/README
@@ -0,0 +1,17 @@
+The dirtree package provides a macro to typeset directory trees like
+in windows explorator.
+
+To install, simply run TeX on dirtree.ins, then move dirtree.sty and
+dirtree.tex to somewhere in your TEXINPUTS path.
+
+To obtain documentation, run:
+latex dirtree.dtx
+makeindex -s gind.ist dirtree
+makeindex -s gglo.ist -o dirtree.gls dirtree.glo
+latex dirtree.dtx
+
+For any questiuon, suggestion, improvment,..., send a message at
+
+ Jean-Come.Charpentier@wanadoo.fr
+
+with the word `dirtree' in the subject (to help my anti-spam software!).
diff --git a/macros/generic/dirtree/dirtree.dtx b/macros/generic/dirtree/dirtree.dtx
new file mode 100644
index 0000000000..1991b1b35e
--- /dev/null
+++ b/macros/generic/dirtree/dirtree.dtx
@@ -0,0 +1,825 @@
+% \iffalse
+%%
+%% Package `dirtree.dtx'
+%% -----------------------------------------------
+%% Copyright (C) 2004-2009 Jean-C\^ome Charpentier
+%% -----------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%% See CTAN archives in directory macros/latex/base/lppl.txt.
+%%
+%% CONTENTS:
+%% This work consists of the files dirtree.ins and dirtree.dtx.
+%% Derived files are dirtree.tex and dirtree.sty.
+%%
+%% DESCRIPTION:
+%% dirtree is a package displaying directory trees.
+%%
+% \fi
+% \iffalse
+%<latex-wrapper|tex> \def\fileversion{0.32}
+%<latex-wrapper|tex> \def\filedate{2012/12/11}
+%<*driver>
+\documentclass{ltxdoc}
+\GetFileInfo{dirtree.dtx}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage{lmodern}
+\usepackage[english]{babel}
+\usepackage{hypdoc}
+\usepackage{xcolor}
+\usepackage{pstricks}
+\usepackage{dirtree}
+\newcommand*\package[1]{\textsf{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\AtBeginDocument{%
+ \OnlyDescription % comment out for implementation details
+ \EnableCrossrefs
+ \RecordChanges
+ \CodelineIndex}
+\AtEndDocument{%
+ \PrintChanges
+ \PrintIndex}
+\hbadness=7000 % Over and under full box warnings
+\hfuzz=3pt
+\begin{document}
+ \DocInput{dirtree.dtx}
+\end{document}
+%</driver>
+% \fi
+% \changes{v0.01}{2004/08/10}{First realease to answer a question on
+% fctt.}
+% \changes{v0.11}{2005/12/19}{fix bug}
+% \changes{v0.12}{2005/12/20}{\cs{DTbaselineskip}. local \cs{parskip},
+% \cs{baselineskip}, and \cs{strut} in order to fix a displaying bug.}
+% \changes{v0.2}{2006/01/25}{dtx for CTAN, code for both Plain \TeX{}
+% and \LaTeX.}
+% \changes{v0.3}{2009/04/08}{xkeyval syntax, breakable tree}
+% \changes{v0.31}{2012/11/02}{bug about some lengths}
+% \changes{v0.32}{2012/12/11}{bug about length (thanks to Philipp
+% K\"uhl). Some macro names changed in order to prevent clash with
+% other packages.}
+%
+% \DoNotIndex{\@,\@gobble,\@latex@error,\@nameuse}
+% \DoNotIndex{\@ne,\@nil,\@namedef}
+% \DoNotIndex{\advance}
+% \DoNotIndex{\baselineskip,\box}
+% \DoNotIndex{\catcode,\count@,\csname}
+% \DoNotIndex{\def,\dimen,\dotfill,\dp}
+% \DoNotIndex{\edef,\else,\endcsname,\endgraf,\expandafter}
+% \DoNotIndex{\fi,\filedate,\fileversion}
+% \DoNotIndex{\hbox,\hrule,\hsize,\ht}
+% \DoNotIndex{\ifnum,\ifx,\input,\iterate}
+% \DoNotIndex{\kern}
+% \DoNotIndex{\leavevmode,\let,\long,\loop}
+% \DoNotIndex{\m@ne,\message}
+% \DoNotIndex{\NeedsTeXFormat,\newcount,\newcommand,\newdimen,\next,\noindent}
+% \DoNotIndex{\par,\parindent,\parskip,\ProvidesFile,\ProvidesPackage}
+% \DoNotIndex{\relax,\repeat,\rm,\rmfamily}
+% \DoNotIndex{\setbox,\space,\strut}
+% \DoNotIndex{\the,\tt,\ttfamily}
+% \DoNotIndex{\vbox,\vrule,\vss}
+% \DoNotIndex{\z@}
+% \setcounter{IndexColumns}{2}
+%
+% \CheckSum{0}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%  ................. Beginning of the documentation part .................
+%
+% \title{The \package{dirtree} package\\Directory Tree}
+% \author{Jean-C\^ome
+% Charpentier\thanks{\texttt{Jean-Come.Charpentier@wanadoo.fr}}}
+% \date{Version \fileversion\ \filedate\ \\
+% {\small Documentation revised \today}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% Package \package{dirtree} allows to display directory tree, like
+% in the windows explorator.
+% \end{abstract}
+%
+% \tableofcontents
+% \section{Introduction}
+% During a discussion on fctt (\texttt{fr.comp.text.tex}) about
+% directory tree and how display such a structure, it appeared that
+% there wasn't many packages which do the job.
+%
+% One obvious solution is to use \package{PSTricks} but some people
+% don't like or don't know this package, so I made the first release
+% of \package{dirtree}.
+%
+% In fact, I didn't plan to send it in CTAN but Robin Fairbairns and
+% Danie was very convincing!
+%
+% \section{Usage}
+% Package \package{dirtree} works both on Plain \TeX{} and \LaTeX{}.
+% No surprise to call it:
+% \begin{verbatim}
+% \usepackage{dirtree}
+% \end{verbatim}
+% for \LaTeX{} and
+% \begin{verbatim}
+% \input dirtree
+% \end{verbatim}
+% for Plain \TeX{}.
+%
+% Since version~0.3, \package{dirtree} has some
+% package options. We'll see these options one by one.
+%
+% \begin{DescribeMacro}{\dirtree}
+% The main macro is |\dirtree| which take one argument (the tree
+% structure). This tree structure is a sequence of
+% \begin{verbatim}
+% .<level><space><text node>.<space>
+% \end{verbatim}
+% Note that there is a dot in the beginning and another one at the end
+% of each node specification. The spaces are very important: if you
+% forgot the space before the |level| there will be an error and if
+% you forgot the space after the last dot, you don't indicate the end
+% of the node. Since an end of line is like a space for \TeX{}, I
+% recommand to write a node per line in the source file: it's handy
+% and more readeable.
+%
+% The |level| indicates the node depth in the tree. There is two
+% rules you must respect:
+% \begin{enumerate}
+% \item The root must have the level one.
+% \item When you create a node, if the last node have the level $n$,
+% the created node must have a level between 2 and $n+1$.
+% \end{enumerate}
+% In fact, you can indicates a level greater than $n+1$ if one node
+% have a level $n$ somewhere in the tree but the result will be
+% strange!
+%
+% A node of level $n$ will be connected to the last node defined which
+% has a level lesser or equal to $n$.
+%
+% For example, the code
+% \begin{verbatim}
+% \dirtree{%
+% .1 /.
+% .2 bin.
+% .2 home.
+% .3 jeancome.
+% .4 texmf.
+% .5 tex.
+% .6 latex.
+% .7 dirtree.
+% .3 jeancomeson.
+% .3 jeancomedaughter.
+% .2 usr.
+% .3 bin.
+% .3 games.
+% .4 fortunes.
+% .3 include.
+% .3 local.
+% .4 bin.
+% .4 share.
+% .5 texmf.
+% .6 fonts.
+% .6 metapost.
+% .6 tex.
+% .3 share.
+% }
+% \end{verbatim}
+% give the result
+% \dirtree{%^^A
+% .1 /.
+% .2 bin.
+% .2 home.
+% .3 jeancome.
+% .4 texmf.
+% .5 tex.
+% .6 latex.
+% .7 dirtree.
+% .3 jeancomeson.
+% .3 jeancomedaughter.
+% .2 usr.
+% .3 bin.
+% .3 games.
+% .4 fortunes.
+% .3 include.
+% .3 local.
+% .4 bin.
+% .4 share.
+% .5 texmf.
+% .6 fonts.
+% .6 metapost.
+% .6 tex.
+% .3 share.
+% }
+%
+% Note the |%| after the left brace in the beginning: it's important
+% because the first character encountered must be a dot.
+%
+% \begin{DescribeMacro}{\DTstyle}
+% A text node is typeset with the command |\DTstyle|. Its default
+% value is |\ttfamily| when you are under \LaTeX{} and |\tt| when you
+% are under Plain \TeX{}. You can redefine this macro as you want,
+% it is used with the syntax |{\DTstyle{text node}}|, so you can use
+% both |\ttfamily| and |\texttt| for example.
+% \end{DescribeMacro}
+%
+% \begin{DescribeMacro}{\DTcomment}
+% The |\DTcomment| command allows to put text at the right side, with
+% leaders. The syntax is
+% \begin{verbatim}
+% \DTcomment{comment text}
+% \end{verbatim}
+% \begin{DescribeMacro}{\DTstylecomment}
+% The style of comment is defined by |\DTstylecomment|. Its default
+% value is |\rmfamilly| under \LaTeX{} and |\rm| under Plain \TeX{},
+% and it acts like |\DTstyle|.
+% Here is an example: the code
+% \begin{verbatim}
+% \renewcommand*\DTstylecomment{\rmfamily\color{green}\textsc}
+% \renewcommand*\DTstyle{\ttfamily\textcolor{red}}
+% \dirtree{%
+% .1 /.
+% .2 bin.
+% .2 home.
+% .3 jeancome.
+% .4 texmf.
+% .5 tex.
+% .3 jeancomeson\DTcomment{Guillaume}.
+% .3 jeancomedaughter\DTcomment{Mathilde}.
+% .2 usr.
+% .3 bin.
+% }
+% \end{verbatim}
+% give the result
+% \begingroup
+% \renewcommand*\DTstylecomment{\rmfamily\color{green}\textsc}
+% \renewcommand*\DTstyle{\ttfamily\textcolor{red}}
+% \dirtree{%^^A
+% .1 /.
+% .2 bin.
+% .2 home.
+% .3 jeancome.
+% .4 texmf.
+% .5 tex.
+% .3 jeancomeson\DTcomment{Guillaume}.
+% .3 jeancomedaughter\DTcomment{Mathilde}.
+% .2 usr.
+% .3 bin.
+% }
+% \endgroup
+% In this example we have used the \package{xcolor} package.
+% \end{DescribeMacro}
+% \end{DescribeMacro}
+%
+% You can build complex text node. For example, the code
+% \begin{verbatim}
+% \dirtree{%
+% .1 /.
+% .2 bin \ldots{} \begin{minipage}[t]{5cm}
+% This directory holds executable files (binary
+% files or link on binary files){.}
+% \end{minipage}.
+% .2 home \ldots{} \begin{minipage}[t]{5cm}
+% jeancome\\
+% guillaume\\
+% mathilde\\
+% \end{minipage}.
+% .4 texmf.
+% }
+% \end{verbatim}
+% give the result
+% \dirtree{%^^A
+% .1 /.
+% .2 bin \ldots{} \begin{minipage}[t]{5cm}
+% This directory holds executable files (binary
+% files or link on binary files){.}
+% \end{minipage}.
+% .2 home \ldots{} \begin{minipage}[t]{5cm}
+% jeancome\\
+% guillaume\\
+% mathilde\\
+% \end{minipage}.
+% .4 texmf.
+% }
+% We don't encourage to try too complicated code. Package
+% \package{dirtree} is still fragile! Note that we pay attention to
+% use optional parameter |[t]| in order to have a right vertical
+% alignment with horizontal rules.
+%
+% \begin{DescribeMacro}{\DTsetlength}
+% Some dimensions can be changed using the |\DTsetlength| command. The
+% syntax is:
+% \begin{verbatim}
+% \DTsetlength{offset}{width}{sep}{rule-width}{dot-size}
+% \end{verbatim}
+% \begin{center}
+% \begin{pspicture}(0,0)(8,4)
+% \psset{linewidth=3pt}
+% \psline(1,0)(1,4)
+% \psline(1,2)(2.5,2)
+% \psline(3.5,0)(3.5,1.75)
+% \psset{linewidth=0.4pt}
+% \rput[bl](3,2){\framebox{\LARGE Text node}}
+% \psframe*(0.75,1.75)(1.25,2.25)
+% \psset{linewidth=0.2pt}
+% \psline{<->}(0.5,1.75)(0.5,2.25)
+% \uput[l](0.5,2){\scriptsize \ttfamily dot-size}
+% \psline{<->}(1,2.5)(2.5,2.5)
+% \uput[u](1.75,2.5){\scriptsize \ttfamily width}
+% \psline{<->}(2.5,2)(3,2)
+% \uput[u](2.75,2){\scriptsize \ttfamily sep}
+% \psline{<->}(3,1.5)(3.5,1.5)
+% \uput[d](3,1.5){\scriptsize \ttfamily offset}
+% \end{pspicture}
+% \end{center}
+% The default value are:
+% \begin{itemize}
+% \item \texttt{offset = 0.2em}
+% \item \texttt{width = 1em}
+% \item \texttt{sep = 0.2em}
+% \item \texttt{rule-width = 0.4pt}
+% \item \texttt{dot-size = 1.6pt}
+% \end{itemize}
+%
+% \begin{DescribeMacro}{\DTbaselineskip}
+% The last length parameter is |\DTbaselineskip| which indicates the
+% skip between lines of the tree.
+% \end{DescribeMacro}
+%
+% If we typeset the first example with
+% \begin{verbatim}
+% \setlength{\DTbaselineskip}{20pt}
+% \DTsetlength{1em}{3em}{0.1em}{1pt}{4pt}
+% \end{verbatim}
+% we obtain the (strange) result:
+% \begingroup
+% \setlength{\DTbaselineskip}{20pt}
+% \DTsetlength{1em}{3em}{0.1em}{1pt}{4pt}
+% \dirtree{%^^A
+% .1 /.
+% .2 bin.
+% .2 home.
+% .3 jeancome.
+% .4 texmf.
+% .5 tex.
+% .6 latex.
+% .7 dirtree.
+% .3 jeancomeson.
+% .3 jeancomedaughter.
+% .2 usr.
+% .3 bin.
+% .3 games.
+% .4 fortunes.
+% .3 include.
+% .3 local.
+% .4 bin.
+% .4 share.
+% .5 texmf.
+% .6 fonts.
+% .6 metapost.
+% .6 tex.
+% .3 share.
+% }
+% \endgroup
+% \end{DescribeMacro} %^^A of \DTsetlength
+% \end{DescribeMacro} %^^A of \dirtree
+%
+% Note that \package{dirtree} package is not able to split tree on
+% several pages. If this case occurs, the result will be very strange
+% with overfull rules. I suppose that the best is to place such trees
+% inside floats.
+%
+% \section{ToDo}
+%
+% \begin{itemize}
+% \item Parameters with \package{xkeyval} syntax;
+% \item Command |\DTsplittree| to allows a tree to be typeseted on
+% several pages;
+% \item Style parameters to rules (color for example) and gap between
+% text and comment (by now it's |\dotfill|).
+% \item Dimension parameter |abovetreeskip| and |belowtreeskip|.
+% \end{itemize}
+%  .................... End of the documentation part ....................
+%
+%<*latex-wrapper>
+% \newpage
+% \section{\package{dirtree} \LaTeX{} Wrapper}
+% Nothing special here but the |\DT@fromsty| definition. This latter
+% is intended to check if \package{dirtree} is called under \LaTeX{}
+% (with |\usepackage|) or under Plain \TeX{}.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{dirtree}[\filedate\space v\fileversion\space
+ package wrapper for dirtree]
+\newcommand*\DT@fromsty{}
+\input{dirtree.tex}
+\ProvidesFile{dirtree.tex}
+ [\filedate\space v\fileversion\space `dirtree' (jcc)]
+% \end{macrocode}
+%</latex-wrapper>
+%<*tex>
+% \newpage
+% \section{\package{dirtree} Code}
+% An ``hello'' message.
+% \begin{macrocode}
+\message{`dirtree' v\fileversion, \filedate\space (jcc)}
+% \end{macrocode}
+% Save at current catcode and make @ a letter
+% \begin{macrocode}
+\edef\DTAtCode{\the\catcode`\@}
+\catcode`\@=11
+% \end{macrocode}
+% \changes{v0.32}{2012/12/11}{LOOP, REPEAT and ITERATE modified to DT@
+% form in order to prevent some clash with other packages.}
+% Define |\DT@loop|, |\DT@repeat|, and |\DT@iterate| like |\loop|,
+% |\repeat|, and |\iterate|. The |\DT@| form allows to place loop
+% inside loop.
+% \begin{macrocode}
+\long\def\DT@loop#1\DT@repeat{%
+ \def\DT@iterate{#1\relax\expandafter\DT@iterate\fi}%
+ \DT@iterate
+ \let\DT@iterate\relax
+}
+\let\DT@repeat=\fi
+% \end{macrocode}
+% Define some \LaTeX{} macros if we work under Plain \TeX{}.
+% |\@namedef|-like for |\edef|.
+% \begin{macrocode}
+\expandafter\ifx\csname DT@fromsty\endcsname\relax
+ \def\@namedef#1{\expandafter\def\csname #1\endcsname}
+ \def\@nameuse#1{\csname #1\endcsname}
+ \long\def\@gobble#1{}
+\fi
+\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
+% \end{macrocode}
+% Offset between vertical rule below text and text left boundary.
+% \begin{macrocode}
+\newdimen\DT@offset \DT@offset=0.2em
+% \end{macrocode}
+% Length of horizontal rule.
+% \begin{macrocode}
+\newdimen\DT@width \DT@width=1em
+% \end{macrocode}
+% Gap between horizontal rule and text.
+% \begin{macrocode}
+\newdimen\DT@sep \DT@sep=0.2em
+% \end{macrocode}
+% |\DT@offset|$\null+\null$|\DT@width|$\null+\null$|\DT@sep|
+% \begin{macrocode}
+\newdimen\DT@all
+\DT@all=\DT@offset
+\advance\DT@all \DT@width
+\advance\DT@all \DT@sep
+% \end{macrocode}
+% Rule thickness
+% \begin{macrocode}
+\newdimen\DT@rulewidth \DT@rulewidth=0.4pt
+% \end{macrocode}
+% Size of square junction.
+% \begin{macrocode}
+\newdimen\DT@dotwidth \DT@dotwidth=1.6pt
+% \end{macrocode}
+% baselineskip inside tree.
+% \begin{macrocode}
+\newdimen\DTbaselineskip \DTbaselineskip=\baselineskip
+% \end{macrocode}
+% Max index node.
+% \begin{macrocode}
+\newcount\DT@counti
+% \end{macrocode}
+% Current index node
+% \begin{macrocode}
+\newcount\DT@countii
+% \end{macrocode}
+% |\DT@countiii|$\null=\null$|\DT@countii|$\null-1$. That is, Previous
+% index node.
+% \begin{macrocode}
+\newcount\DT@countiii
+% \end{macrocode}
+% Last node of a level lesser or equal to current one.
+% \begin{macrocode}
+\newcount\DT@countiv
+% \end{macrocode}
+% \begin{macro}{\DTsetlength}
+% |\DTsetlength| allows to define dimensions in use for the directory
+% tree (see above).
+% \begin{macrocode}
+\def\DTsetlength#1#2#3#4#5{%
+ \DT@offset=#1\relax
+ \DT@width=#2\relax
+ \DT@sep=#3\relax
+% \end{macrocode}
+% |\DT@all| is the width of a whole column.
+% \begin{macrocode}
+ \DT@all=\DT@offset
+ \advance\DT@all by\DT@width
+ \advance\DT@all by\DT@sep
+ \DT@rulewidth=#4\relax
+ \DT@dotwidth=#5\relax
+}
+% \end{macrocode}
+% \end{macro}
+% |\DTstyle| is the style used to typeset nodes. |\DTstylecomment| is
+% the style used to typeset comments. Since \TeX{} and \LaTeX{} are
+% very different, we test the format used before initializations.
+% \begin{macro}{\DTstyle}
+% \begin{macro}{\DTstylecomment}
+% \begin{macrocode}
+\expandafter\ifx\csname DT@fromsty\endcsname\relax
+ \def\DTstyle{\tt}
+ \def\DTstylecomment{\rm}
+\else
+ \def\DTstyle{\ttfamily}
+ \def\DTstylecomment{\rmfamily}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\DTcomment}
+% |\DTcomment| places comment in a line of the tree.
+% \begin{macrocode}
+\def\DTcomment#1{%
+ \kern\parindent\dotfill
+ {\DTstylecomment{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \changes{v0.31}{2012/11/02}{save lengths as lengths (not as macro)}
+% In order to save some lengths we create newdimen
+% \begin{macrocode}
+\newdimen\DT@indent
+\newdimen\DT@parskip
+\newdimen\DT@baselineskip
+% \end{macrocode}
+% \begin{macro}{\dirtree}
+% |\dirtree| is the main package macro.
+% \begin{macrocode}
+\def\dirtree#1{%
+% \end{macrocode}
+% Change some parameters (save them before).
+% \begin{macrocode}
+ \DT@indent=\parindent
+ \parindent=\z@
+ \DT@parskip=\parskip
+ \parskip=\z@
+ \DT@baselineskip=\baselineskip
+ \baselineskip=\DTbaselineskip
+ \let\DT@strut=\strut
+ \def\strut{\vrule width\z@ height0.7\baselineskip depth0.3\baselineskip}%
+% \end{macrocode}
+% Read the argument and before that, initialize counters. |\DTcounti|
+% is the current index node.
+% \begin{macrocode}
+ \DT@counti=\z@
+ \let\next\DT@readarg
+ \next#1\@nil
+% \end{macrocode}
+% When |\DT@readarg| has done its job, the node levels and the node
+% texts are saved in |\DT@level@<index>| and |\DT@body@<index>|
+% respectively. |\DT@counti| holds the greater index. We can now
+% display the tree.
+%
+% Firstly, display the root. For that, the text is boxed.
+% \begin{macrocode}
+ \dimen\z@=\hsize
+ \advance\dimen\z@ -\DT@offset
+ \advance\dimen\z@ -\DT@width
+ \setbox\z@=\hbox to\dimen\z@{%
+ \hsize=\dimen\z@
+ \vbox{\@nameuse{DT@body@1}}%
+ }%
+% \end{macrocode}
+% We change the height and the depth of this box in order to have the
+% same total height and a height of |0.7\baselineskip|, that is, the
+% height of |\strut|.
+% \begin{macrocode}
+ \dimen\z@=\ht\z@
+ \advance\dimen0 by\dp\z@
+ \advance\dimen0 by-0.7\baselineskip
+ \ht\z@=0.7\baselineskip
+ \dp\z@=\dimen\z@
+% \end{macrocode}
+% Then we display this box with an indentation as if there had a level 0.
+% \begin{macrocode}
+ \par\leavevmode
+ \kern\DT@offset
+ \kern\DT@width
+ \box\z@
+ \endgraf
+% \end{macrocode}
+% Initialize index for the loop.
+% \begin{macrocode}
+ \DT@countii=\@ne
+ \DT@countiii=\z@
+% \end{macrocode}
+% |\dimen3| holds the height of the node in the tree. In fact, the
+% bottom of the node since this dimension is used to connect vertical
+% rules.
+% \begin{macrocode}
+ \dimen3=\dimen\z@
+% \end{macrocode}
+% |\DT@lastlevel@<level>| holds the baseline of the last node in level
+% |<level>|.
+% \begin{macrocode}
+ \@namedef{DT@lastlevel@1}{-0.7\baselineskip}%
+% \end{macrocode}
+% Loop for displaying the remainder of the tree.
+% \begin{macrocode}
+ \loop
+% \end{macrocode}
+% Exit loop when the last current index is lesser or equal to max
+% index.
+% \begin{macrocode}
+ \ifnum\DT@countii<\DT@counti
+% \end{macrocode}
+% |\DT@counti| holds current index and |\DT@countii| holds previous
+% index (just current index minus one).
+% \begin{macrocode}
+ \advance\DT@countii \@ne
+ \advance\DT@countiii \@ne
+% \end{macrocode}
+% Horizontal offset for the text:
+%
+% $(\mathtt{current\ level} - 1) \times \mathtt{DT@all} +
+% \mathtt{DT@offset}$.
+% \begin{macrocode}
+ \dimen\z@=\@nameuse{DT@level@\the\DT@countii}\DT@all
+ \advance\dimen\z@ by\DT@offset
+ \advance\dimen\z@ by-\DT@all
+ \leavevmode
+ \kern\dimen\z@
+% \end{macrocode}
+% Look for last node in previous level in order to know how connect
+% the current node.
+% \begin{macrocode}
+ \DT@countiv=\DT@countii
+ \count@=\z@
+ \DT@loop
+% \end{macrocode}
+% Look for previous node
+% \begin{macrocode}
+ \advance\DT@countiv \m@ne
+% \end{macrocode}
+% Repeat until this previous node has a level lesser or equal to
+% current level.
+% \begin{macrocode}
+ \ifnum\@nameuse{DT@level@\the\DT@countiv} >
+ \@nameuse{DT@level@\the\DT@countii}\relax
+ \else
+ \count@=\@ne
+ \fi
+ \ifnum\count@=\z@
+ \DT@repeat
+% \end{macrocode}
+% Now |\DT@countiv| holds the index node connected to current node.
+%
+% We box the text node.
+% \begin{macrocode}
+ \edef\DT@hsize{\the\hsize}%
+% \end{macrocode}
+% \begin{macrocode}
+ \count@=\@nameuse{DT@level@\the\DT@countii}\relax
+% \end{macrocode}
+% Since text node is vboxed, we use a |\hsize| minus horizontal
+% current offset.
+% \begin{macrocode}
+ \dimen\z@=\count@\DT@all
+ \advance\hsize by-\dimen\z@
+ \setbox\z@=\vbox{\@nameuse{DT@body@\the\DT@countii}}%
+% \end{macrocode}
+% Restore |\hsize|.
+% \begin{macrocode}
+ \hsize=\DT@hsize
+% \end{macrocode}
+% Change height and depth in such a way that height is
+% |0.7\DT@baselineskip| (that is, the |\strut| height), and total
+% height is unchanged.
+% \begin{macrocode}
+ \dimen\z@=\ht\z@
+ \advance\dimen\z@ by\dp\z@
+ \advance\dimen\z@ by-0.7\baselineskip
+ \ht\z@=0.7\baselineskip
+ \dp\z@=\dimen\z@
+% \end{macrocode}
+% Save the height of the box in tree. The last node is the last node
+% in its level!
+% \begin{macrocode}
+ \@nameedef{DT@lastlevel@\the\DT@countii}{\the\dimen3}%
+% \end{macrocode}
+% |\dimen3| holds the vertical position of the bottom.
+% \begin{macrocode}
+ \advance\dimen3 by\dimen\z@
+ \advance\dimen3 by0.7\baselineskip
+% \end{macrocode}
+% Display vertical rule
+% \begin{macrocode}
+ \dimen\z@=\@nameuse{DT@lastlevel@\the\DT@countii}\relax
+ \advance\dimen\z@ by-\@nameuse{DT@lastlevel@\the\DT@countiv}\relax
+ \advance\dimen\z@ by0.3\baselineskip
+% \end{macrocode}
+% If this vertical rule connect two nodes which have different level,
+% the rule must be reduced by |0.5\baselineskip| (the rule don't rise
+% up to the baselineskip of the connected node).
+% \begin{macrocode}
+ \ifnum\@nameuse{DT@level@\the\DT@countiv} <
+ \@nameuse{DT@level@\the\DT@countii}\relax
+ \advance\dimen\z@ by-0.5\baselineskip
+ \fi
+% \end{macrocode}
+% Display vertical rule
+% \begin{macrocode}
+ \kern-0.5\DT@rulewidth
+ \hbox{\vbox to\z@{\vss\hrule width\DT@rulewidth height\dimen\z@}}%
+ \kern-0.5\DT@rulewidth
+% \end{macrocode}
+% Display square junction.
+% \begin{macrocode}
+ \kern-0.5\DT@dotwidth
+ \vrule width\DT@dotwidth height0.5\DT@dotwidth depth0.5\DT@dotwidth
+ \kern-0.5\DT@dotwidth
+% \end{macrocode}
+% Display horizontal rule and gap between horizontal rule and text node.
+% \begin{macrocode}
+ \vrule width\DT@width height0.5\DT@rulewidth depth0.5\DT@rulewidth
+ \kern\DT@sep
+% \end{macrocode}
+% Display text node.
+% \begin{macrocode}
+ \box\z@
+% \end{macrocode}
+% New paragraph for next node.
+% \begin{macrocode}
+ \endgraf
+ \repeat
+% \end{macrocode}
+% Restore indentation, paragraph skip, and |\strut|.
+% \begin{macrocode}
+ \parindent=\DT@indent
+ \parskip=\DT@parskip
+% \end{macrocode}
+% \changes{v0.32}{2012/12/11}{Inverse order of assignation between
+% baselineskip and DT@baselineskip.}
+% \begin{macrocode}
+ \baselineskip=\DT@baselineskip
+ \let\strut\DT@strut
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\DT@readarg}
+% The first processing step is to read the whole tree. It's a
+% recursive macro: each call process one node, that is, a
+% \begin{verbatim}
+% .<index> <text node>.<space>
+% \end{verbatim}
+% in the source file.
+% \begin{macrocode}
+\def\DT@readarg.#1 #2. #3\@nil{%
+% \end{macrocode}
+% |\DT@counti| is the current index.
+% \begin{macrocode}
+ \advance\DT@counti \@ne
+% \end{macrocode}
+% save level node in |\DT@level@<index>| and text node in
+% |\DT@body@<index>|. Two \package{dirtree} |\strut| are added to text
+% node in order to ensure a right vertical alignment, according to
+% \package{dirtree} |\baselineskip|
+% \begin{macrocode}
+ \@namedef{DT@level@\the\DT@counti}{#1}%
+ \@namedef{DT@body@\the\DT@counti}{\strut{\DTstyle{#2}\strut}}%
+% \end{macrocode}
+% If |#3| is not empty, it contains the remainder nodes and macro
+% calls itself. Otherwise, recursive call is stopped.
+% \begin{macrocode}
+ \ifx\relax#3\relax
+ \let\next\@gobble
+ \fi
+ \next#3\@nil
+}
+% \end{macrocode}
+% \end{macro}
+% Restore at catcode.
+% \begin{macrocode}
+\catcode`\@=\DTAtCode\relax
+% \end{macrocode}
+%</tex>
+% \endinput
diff --git a/macros/generic/dirtree/dirtree.ins b/macros/generic/dirtree/dirtree.ins
new file mode 100644
index 0000000000..5a68bee3c7
--- /dev/null
+++ b/macros/generic/dirtree/dirtree.ins
@@ -0,0 +1,37 @@
+%% `dirtree.ins'
+%%
+%% Docstrip installation instruction file for docstyle `dirtree'
+%%
+%% Jean-C\^ome Charpentier <Jean-Come.Charpentier@wanadoo.fr> (jcc)
+%%
+%% April 08, 2009
+
+\def\batchfile{dirtree.ins}
+\input docstrip.tex
+\keepsilent
+\Msg{*** Generating the `dirtree' package ***}
+\askforoverwritefalse
+\generate{\file{dirtree.tex}{\from{dirtree.dtx}{tex}}}
+\generate{\file{dirtree.sty}{\from{dirtree.dtx}{latex-wrapper}}}
+%
+\ifToplevel{%
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the files}
+\Msg{* dirtree.sty and dirtree.tex in a directory/folder searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation, run the file `dirtree.dtx'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* If you require the commented code, desactivating the}
+\Msg{* OnlyDescription macro, you must recompile, execute:}
+\Msg{* `makeindex -s gind.ist dirtree'}
+\Msg{* `makeindex -s gglo.ist -o dirtree.gls dirtree.glo'}
+\Msg{* and recompile.}
+\Msg{*}
+\Msg{***********************************************************}
+}
+
+\endinput
+%%
+%% End of file `dirtree.ins'
diff --git a/macros/generic/dirtree/dirtree.pdf b/macros/generic/dirtree/dirtree.pdf
new file mode 100644
index 0000000000..9aaf1318ec
--- /dev/null
+++ b/macros/generic/dirtree/dirtree.pdf
Binary files differ
diff --git a/macros/generic/docbytex/README b/macros/generic/docbytex/README
new file mode 100644
index 0000000000..0978b41e50
--- /dev/null
+++ b/macros/generic/docbytex/README
@@ -0,0 +1,44 @@
+Seznam souborù
+
+docby.tex ... makro DocBy.TeX
+docby.pdf ... dokumentace (èesky)
+docby-e.pdf ... dokumentace (anglicky)
+docby.d ... zdrojový soubor dokumentace, zpracujte: pdfcsplain docby.d
+docby-e.d ... zdrojový soubor anglické dokumentace: pdfcsplain docby-e.d
+cosi.c ... ukázka, která se naèítá pøi zpracování dokumentace
+main.c, win.c, base.c ... ukázkový program lup (spí¹e torzo programu)
+lup.tex, main.d, win.d, base.d ... ukázková dokumentace programu lup
+lup.pdf ... výstup ukázkové dokumentace
+annonce ... co jsem psal do listu cstex
+README ... tento soubor
+docbytex.zip ... archiv vsech souborù zde zmínìných
+
+Licence k balíèku DocbyTeX
+
+Se soubory z balíèku DocBy.TeX si mù¾ete bez omezení dìlat
+co chcete. Bude-li se vám makro jevit u¾iteèné, mù¾ete potì¹it
+autora informací o tom. Na makro není poskytována ¾ádná záruka.
+
+------------------------------------------
+
+List of files
+
+docby.tex ... the macro DocBy.TeX
+docby-e.pdf ... the documentation (in English)
+docby.pdf ... the documentation (in Czech)
+docby-e.d ... the source of the documentation, do: pdfcsplain docby-e.d
+docby.d ... the source of the documentation, do: pdfcsplain docby.d
+cosi.c ... an example used in documentation
+main.c, win.c, base.c ... the expample program lup (a part of program)
+lup.tex, main.d, win.d, base.d ... the source of documentation of program lup
+lup.pdf ... the output of documentation of program lup
+annonce ... the text sent to cstex list
+README ... this file
+docbytex.zip ... the archive of all files mentioned here
+
+License to DocBy.TeX package
+
+You can do anything with the files from DocBy.TeX package without
+any limit. If the macro will be usable for you, you can tell the author
+about it. There is no warranty for this macro.
+
diff --git a/macros/generic/docbytex/annonce b/macros/generic/docbytex/annonce
new file mode 100644
index 0000000000..50fcd930c7
--- /dev/null
+++ b/macros/generic/docbytex/annonce
@@ -0,0 +1,24 @@
+annonce: DocBy.TeX -- dokumentování zdrojových kódù TeXem
+
+Vá¾ení
+
+pro potøeby dokumentování zdrojových kód# (C nebo jiný jazyk) jsem
+vytvoøil TeXové udìlátko (makro), které jsem nazval DocBy.TeX.
+Mùj syn Mirek toti¾ potøebuje odevzdat dokumentovaný program
+v rámci své roèníkové práce.
+
+DocBy.TeX jsem pøedstavil jako èerstvou novinku na konferenci
+TeXperinence pøed týdnem a nyní pøichází okam¾ik, kdy jeho
+první verzi zveøejòuji na internetu na
+
+ http://www.olsak.net/docbytex.html
+
+Dal¹í osud tohoto balíèku bude záviset na tom, zda se bude jevit
+u¾iteèný i dal¹ím lidem. V takovém pøípadì bych mohl napsat kromì
+existující èeské i anglickou dokumentaci a zapracovat pøípadné
+námìty. Ov¹em nevím nevím. Na konferenci TeXperience se mi zdálo,
+¾e balíèek byl publikem pøijat/nepøijat velmi vla¾nì.
+
+Zdravím
+
+Petr Ol¹ák
diff --git a/macros/generic/docbytex/base.c b/macros/generic/docbytex/base.c
new file mode 100644
index 0000000000..b2d1ce368b
--- /dev/null
+++ b/macros/generic/docbytex/base.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+//: dvojice
+
+struct dvojice {
+ float x, y;
+};
+
+//: uzasna_funkce
+
+struct dvojice uzasna_funkce (float p)
+{
+ struct dvojice navrat;
+ navrat.x = 2*p; // tady nasobim p dvema
+ navrat.y = 3*p; // tady nasobim p tremi
+ return navrat;
+}
diff --git a/macros/generic/docbytex/base.d b/macros/generic/docbytex/base.d
new file mode 100644
index 0000000000..9c381b570e
--- /dev/null
+++ b/macros/generic/docbytex/base.d
@@ -0,0 +1,8 @@
+Struktura \dg dvojice se pou¾ívá jako návratová hodnota funkce
+"uzasna_funkce" a sdru¾uje dvì hodnoty typu "float".
+\ins c dvojice
+
+Funkce \dg [struct dvojice] uzasna_funkce() si vezme jeden parametr
+"p" a vrátí ve struktuøe "dvojice" dvojnásobek a trojnásobek
+tohoto parametru.
+\ins c uzasna_funkce
diff --git a/macros/generic/docbytex/cosi.c b/macros/generic/docbytex/cosi.c
new file mode 100644
index 0000000000..b2d1ce368b
--- /dev/null
+++ b/macros/generic/docbytex/cosi.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+//: dvojice
+
+struct dvojice {
+ float x, y;
+};
+
+//: uzasna_funkce
+
+struct dvojice uzasna_funkce (float p)
+{
+ struct dvojice navrat;
+ navrat.x = 2*p; // tady nasobim p dvema
+ navrat.y = 3*p; // tady nasobim p tremi
+ return navrat;
+}
diff --git a/macros/generic/docbytex/docby-e.d b/macros/generic/docbytex/docby-e.d
new file mode 100644
index 0000000000..8a00260575
--- /dev/null
+++ b/macros/generic/docbytex/docby-e.d
@@ -0,0 +1,2637 @@
+
+%% DocBy.\TeX{} -- Making a Documentation Of Source Codes By TeX
+
+\def\projectversion{\dbtversion}
+\def\headtitle{DocBy.\TeX}
+
+\showboxbreadth=1500 \showboxdepth=2 \hfuzz=4pt
+
+\input docby.tex
+
+\title DocBy.\TeX{} -- Making a Documentation Of Sources By \TeX{}
+
+\author Petr Ol\v s\'ak
+
+\centerline{\ulink[http://www.olsak.net/docbytex.html]%
+ {www.olsak.net/docbytex.html}}
+
+\def\db{\dg\nb}
+\def\du#1{\api{\nb#1}}
+\let\quotehook=\langleactive
+\def\insdef#1 {\ifirst{docby.tex}{def\nb#1 }{^^B\cbrace}{++}}
+\def\inssdef#1 {\ifirst{docby.tex}{def\nb#1}{\empty}{+-}}
+\bgroup
+ \catcode`\[=1 \catcode`]=2 \catcode`\{=12 \catcode`\}=12
+ \gdef\obrace[{] \gdef\cbrace[}]
+\egroup
+\def\indexhook{The control sequences marked by ($\succ$)
+ are sequences at user level. Other control sequences are internal in
+ DocBy.\TeX. The bold page number points to the place where the
+ sequence is defined and documented, other page numbers point
+ to occurrence of the sequence. The control sequences for users
+ have underlined pagenumber in the list of page numbers. This
+ means the page where the sequence is documented at user level.
+ \medskip}
+\def\nn#1 {\noactive{\nb#1}} \nn insert \nn undefined
+
+\def\cnvbookmark#1{\lowercase{\lowercase{#1}}}
+\def\bookmarkshook{\lo ìe \lo ¹s \lo èc \lo ør \lo ¾z \lo ýy
+ \lo áa \lo íi \lo ée \lo úu \lo ùu \lo óo \lo òn }
+\def\lo #1#2{\lccode`#1=`#2}
+
+\dotoc \bookmarks
+
+\sec Preface
+%%%%%%%%%
+
+DocBy.\TeX{} gives you a possibility to creating a documentation of
+source codes by \TeX{}. The source codes can be i C language or
+whatever other computer language.
+
+On the contrast of Knuth's ``literal programming'' this tool does not
+use any preprocessors for doing filters of information for human and
+for computer which is stored in single source file. I suppose that
+programmers prefer to write and tune the program in computer language
+before they start to write the documentation. It would be fine to
+write the documentation after that and without modifying of the source
+code of the working program. Modern systems gives possibility to open
+more windows with more than one text editors: you can see the source
+code in one editor and write the documentation of it in second.
+Now, there is no need to merge both information (for computer and
+for human being) to single file.
+
+The first part of this document (\cite[uziv]) describes the
+\docbytex{} at user level. The next part documents the implicit macros
+implemented in \docbytex{}, which are supposed that experienced user
+will want to change them in order to realize special wishes.
+The next section~\cite[design] includes the documentation of
+design-like macros. User can change them to create a better look of
+his/her document. The last section~\cite[implementace] describes all
+macros of \docbytex{} at implementation level in detail.
+
+This document is created by \docbytex{} itself, it means that it can
+serve as an example of \docbytex{} usage.
+
+
+\sec [uziv] For Users
+%%%%%%%%%%%%%%%%%%%%%
+
+\subsec [cleneni] File Types
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \docbytex{} is proposed as a tool for making documentation of C
+language. That is a reason why the next example is a documentation of
+the hypothetical program written in this language. If you needs to
+document another computer language, you can change some macros
+(see the section~\cite[zmeny]).
+
+Wee suppose that the source code is separated into
+``modules''. Each module is intended to one special problem which is solved
+by programmer. Each module has its own name ("foo" for example) and it is
+written in files "foo.h" and "foo.c". These files are compiled into
+"foo.o". All modules are linked at the end of compilation into the
+executable program.
+
+If we want to document these source files, we create new file with
+".d" extension for each module, for example "foo.d". The documentation
+of the module will be written in that file. Next we create the main
+file (for example "program.tex") where all "*.d" files are included
+by the command "\module"\du{module}. You can use commands
+"\title" (name of the program), "\author"
+(name of the author) and (for example) "\dotoc" for making
+of table of contents, "\doindex" for generating of the
+index. Of course, you can write first or general notes to the program
+in the main file too. The contents of the file "program.tex" can be:
+
+\begtt
+\input docby.tex
+\title The Program lup -- Documentation of The Source Codes
+
+\author Progr and Ammer
+
+\dotoc % the table of contents will be here
+
+\sec The structure of the source files
+
+The source files are in the three modules.
+The auxiliary functions are defined in "base.c" and "base.h" files.
+The window management are solved in "win.c" and "win.h" files.
+The file "main.c" includes the function "main".
+\module base
+\module win
+\module main
+\doindex % the index will be created here
+\bye
+\endtt
+
+We decided to sort the documentation from ``simple'' functions to the
+more complicated problems. Somebody can prefer another way from
+"main" function first and the auxiliary functions at the end.
+He/she can write:
+\begtt
+\module main
+\module win
+\module base
+\doindex
+\bye
+\endtt
+
+Both ways are possible because the documentation is hyperlinked
+automatically. When the reader see the usage of some function,
+he/she can simply go to the definition of this
+function simply by one click. The reverse hyperlinks are included too.
+
+
+\subsec [priklad] An Example of the Module Documentation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Let we document the module "foo" in the file "foo.d".
+This file is included by "module"~"foo" command. We can document any
+part of source "foo.c" by words and combine this by a listing of parts
+of source "foo.c" or "foo.h" by command "\ins"~"c <keyword>"\du{ins} or
+"\ins"~"h <keyword>". The part of the source code is declared usually by
+"//: <keyword>" line. The example follows.
+
+Suppose that the following text is written in the file "foo.d"
+\begtt
+The struct \dg [struct] mypair is used as a return value of
+"my_special_function". There are two "float" values.
+\ins c mypair
+
+The \dg [struct mypair] my_special_function() has one parameter "p"
+and returns double and triple of this parameter in "mypair" struct.
+\ins c my_special_function
+\endtt
+
+The file "foo.c" has to include the comments
+"//: "{\tt mypair} and "//: "{\tt my\_special\_function}.
+These comments delimit the part of source code to be listed in
+the documentation:
+
+\begtt
+#include <stdio.h>
+
+//: mypair
+
+struct mypair {
+ float x, y;
+};
+
+//: my_special_function
+
+struct my_special_function (float p)
+{
+ struct mypair return_pair;
+ return_pair.x = 2*p; // double of p
+ return_pair.y = 3*p; // triple of p
+ return return_pair;
+}
+\endtt
+
+The result looks like that:
+
+\bigskip
+
+The struct \dg [struct] mypair is used as a return value of
+"my_special_function". There are two "float" values.
+\def\modulename{foo}
+\ins c mypair
+
+The \dg [struct mypair] my_special_function() has one parameter "p"
+and returns double and triple of this parameter in "mypair" struct.
+\ins c my_special_function
+
+
+The first listed part of source code is started by
+"//: "{\tt mypair} and ended by firs occurrence of the "//:".
+The second listed part is started by "//: "{\tt my\_special\_function}
+and ended at the end of file. These delimiters (and the neighbouring
+empty lines) are not printed.
+
+The order of the listed parts are independent of the order in source
+file. We can first comment my special function and include its source
+code. Afterward we can explain the structure mypair and show the
+source code of this structure.
+
+Notice that the numbers of lines are inserted exactly by the lines in
+source code. It means that the missing line
+"#include "{\tt<stdio.h>} has number one and first printed line has
+the number five.
+
+The "//: <keyword>" delimiter and the closing delimiter "//:"
+can be at arbitrary place of the line, no essential at begin of line.
+The lines with the delimiters are not printed.
+
+Notice the command "\dg" in source of the documentation. The
+documented word (separated by space) follows immediately. The optional
+parameter in brackets is interpreted as ``type'' of the documented
+word. The documented word is printed in red color on the rectangle
+and all occurrences of that word in the documentation is printed in
+blue color and treated as hyperlink to the place where is the word
+documented (red color). The occurrence of that word have to be written
+between the quotes {\tt\char`\"...\char`\"} or it is placed in the
+inserted source code. You need not do any marks in source code in
+order to highlight the usage of the documented word. This is done
+automatically.
+
+If the documented word has the brackets "()" at the end, then it is the
+function. These brackets are not printed in the current place,
+but they are printed in the footnotes and in the index.
+
+The quotes {\tt\char`\"...\char`\"} are delimiters of ``parts of
+listings inside paragraph''. This text is printed by typewriter font
+and the occurrences of documented words are hyperlinked here.
+All characters have printed here without re-interpretation, it means
+this environment behaves like ``verbatim''.
+
+The footnote includes a list of all documented words on the current page.
+Each word is followed by list of pages here. These pages points to all
+pages here the documented word occurs.
+
+All documented words are automatically inserted to the alphabetical
+index created by "\doindex" command.
+
+
+\subsec What Version of \TeX{} for \docbytex{}?
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+In order to activate all features mentioned above we need to use
+pdf\TeX{} extended by enc\TeX{}. The language of automatically
+generated words (such as Contents, Index) is selected by current
+value of "\language" register when "\input docby.tex" is processed.
+\docbytex{} writes on the terminal the ``modes'' information:
+
+\def\begtthook{\catcode`\!=0 \sfcode`.=1000 }
+\begtt
+This is DocBy.TeX, version !dbtversion, modes: enc+PDF+ENG
+\endtt
+\def\begtthook{}
+
+\docbytex{} can work in the following modes:
+"enc/NOenc", "PDF/DVI", "ENG/CS".
+
+The "enc"\api{enc} mode is activated if the enc\TeX{} is detected.
+Otherwise (if enc\TeX{} is unavailable), \docbytex{} prints warning
+and sets the "NOenc"\api{NOenc} mode: the occurrences of documented
+words are not detected and hyperlinked. The index is much more poor,
+because the pages with occurrences of the words are missing.
+Only the places of documentation of the words are referred.
+It means that the enc\TeX{} extension is very important for \docbytex.
+This extension is usually available in current \TeX{} distributions
+and it is activated by "pdfcsplain" format. So the recommendation is:
+use "pdfcsplain" when you are using \docbytex.
+
+The "PDF"\api{PDF} mode is activated if the pdf\TeX{} is
+used. Otherwise \docbytex{} switches to the "DVI"\api{DVI} mode
+and prints the warning message on the terminal. The colors and
+hyperlinks are not working in "DVI" mode but the list of pages with
+all occurrences of documented words is printed in index
+(if enc\TeX{} is activated).
+
+If "\language=0" or "(pdf)csplain" isn't used
+then language mode is set to ENG (English words
+will be generated). Else this mode is set to CS (Czech words
+will be generated). If you are using another language, you need
+to redefine some macros, see section~\cite[nazvy].
+
+
+
+\subsec Searching Words by Enc\TeX{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The hyperlinked words are located by enc\TeX{} by ``hungry algorithm''.
+It means that if there are two documented words "abc" and "abcde" then
+the text "abcdefg" is divided to the hyperlinked part "abcde" (the blue
+color is used) and to the normal part "fg" (black color). The hyperlinked
+part points to the place of the documentation of the word "abcde".
+On the other hand the text "abcdx" is divided to hyperlinked part
+"abc" and this part points to the documentation of the word "abc".
+
+Enc\TeX{} is not able to work with regular expositions. It means that
+there is no simple possibility to search only words bounded by spaces,
+other white characters or by punctuation. Enc\TeX{}
+searches the word as a part of another word.
+This leads to unexpected situations: the
+short word is documented but it is a part of longer undocumented words
+used in source code. For example, you document the structure "turn"
+but you don't need to hyperlink the part of the word "return".
+In such case you can define the "return" word as a ``normal''
+undocumented word by the command "\noactive{<word>}"\du{noactive}
+(for example "\noactive{return}"). This command declares the "<word>"
+as a searched word (for enc\TeX) but sets it as inactive.
+
+Imagine that you document a word which is used in code in ``documented
+meaning'' only if some text precedes this word and/or some text
+followed the word. If the word is used with another prefix/postfix
+then this is undocumented meaning of the word. You can use in such
+case a declaration "\onlyactive{<before>}{<word>}{<post>}"\du{onlyactive}.
+If you declare the word by "\dg <word>" (or by similar manner, see
+section~\cite[ddsl]), then the word is hyperlinked in source code
+only if the text "<before>" precedes and the text "<post>" follows.
+The text "<before>" and/or "<post>" itself stays inactive.
+The parameters "<before>" or "<post>" can be empty (no both
+simultaneously) and you can use more "\onlyactive" declarations of
+single "<word>".
+
+\docbytex{} activates the enc\TeX{} searching only inside the group
+{\tt\char`\"...\char`\"} or in listings of source codes.
+It means that "\mubytein=1" (see enc\TeX{} documentation) is set only
+in these situations. We recommend to leave "\mubytein=0" outside these
+environment. If you set "\mubytein=1" (for example because of UTF-8
+encoding) for the whole document then you do it on your own risk.
+The words inside your comments can be hyperlinked in such case.
+
+
+\subsec The Index, Table of Contents, Footnotes and Bookmarks Generation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The index and table of contents generation is fully done on macro
+level of \docbytex{}. You needn't use any external program
+(\docbytex{} itself does the alphabetical sorting). Just write
+"\doindex"\du{doindex} or "\dotoc"\du{dotoc} on the desired place in
+your document. Warning: the table of contents is not correctly
+generated after first pass of \TeX. You have to run \TeX{} twice.
+The pages may be changed after second pass because of table of
+contents is inserted. Thus correct oputput is (may be)
+guaranteed after third pass of \TeX. The words ``may be'' are written
+here due to the problem with footnotes mentioned in
+section~\cite[specfootnote].
+The footnotes are changed in all three \TeX{} runs and this influences
+the vertical typesetting retrospectively.
+This is a reason why \docbytex{} performs the check of
+consistency of references generated by current and previous
+\TeX{} pass. This check is done during the "\bye"\du{bye}
+macro is processing. Thus, it is usable to write "\bye" command
+instead "\end" primitive command at the end of the document.
+If the "\bye" macro is used then you can see the message
+``{\tt OK, all references are consistent}'' on the terminal or the warning
+``{\tt page references are inconsistent, run me again}''.
+
+You can do test of consistency in more detail by following script:
+
+\begtt
+#!/bin/bash
+cp document.ref document.r0
+pdfcsplain document
+diff document.r0 document.ref
+\endtt
+
+\docbytex{} tries to fix the footnote processing after second pass in
+order to document convergence. If you do big changes in the document
+after that then \docbytex{} does change the numbers of lines for
+footnotes and the Overfull/Underfull boxes may occur. We recommend
+to remove the {\tt.ref} file and to run three passes of
+\docbytex{} again in such case.
+
+\docbytex{} creates the structured bookmarks in PDF output
+if "\bookmarks"\du{bookmarks} command is used. The structured
+bookmarks include names of parts, sections, subsections and documented words.
+There is no matter where the command "\bookmarks" is written because
+the information used in bookmarks is read from {\tt.ref} file.
+The problem about encoding of texts of bookmarks is discussed in
+section~\cite[hooky].
+
+
+\subsec [vkladani] Source Code Inserting
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Instead of simply command "\ins" you can use two more elaborate
+commands "\ifirst"\du{ifirst} and "\inext"\du{inext} in order to
+insert a part of source code in your documentation.
+
+The "\ifirst{<file>}{<from>}{<to>}{<why>}" command inserts
+a part of the file "<file>" (full file name including extension)
+from first line with the pattern "<from>" ending by line with the
+pattern "<to>" or (if such line does not exists) to the end of file.
+If the pattern "<from>" does not exists then the warning is printed on
+the terminal.
+
+The parameters of "\ifirst" command are first expanded and used
+thereafter. The active tie character is expanded to the space.
+
+The parameter "<why>" specifies if the line with "<from>" pattern
+and/or the line with "<to>" pattern have to be printed or not.
+This parameter has only two characters (plus and/or minus) with the
+following meaning:
+
+\begtt
+why: -- don't print first nor ending line
+why: +- print first line but don't print ending line
+why: -+ don't print first line but print ending line
+why: ++ print both lines
+\endtt
+
+If the parameter "<from>" is empty (use "{}" notation) then the
+printing starts on the begin of file. If the parameter "<to>" is
+empty, only one line is printed. If "<to>=\end",\du{end} then
+printing stops at the end of file. The ending line does not exists in
+such case.
+
+If the parameter "<from>" (or "<to>" respectively)
+has "\empty"\du{empty} value (use "{\empty}" notation) then
+the printing starts (or stops respectively) at the first empty line.
+You can specify if this line is printed by "<why>" parameter.
+
+The parameters "<from>" and "<to>" can be started by "^^B" character
+(it means that the pattern have to be at the begin of the line) and/or
+they can be ended by "^^E" character (it means that the pattern have
+to be at the end of line). For example the parameter "^^Btext^^E"
+means that "text" have to be on the line without nothing more.
+
+The special \TeX{} characters (special categories) are not allowed
+in "<from>" and "<to>" parameters. You have to use special control
+sequences "\nb"\du{nb}, "\obrace"\du{obrace}, "\cbrace"\du{cbrace},
+"\percent"\du{percent} and "\inchquote"\du{inchquote} instead of
+"\", "{", "}", "%", {\tt\char`\"} characters. You can define aditional
+sequences for another special \TeX{} characters, for example:
+
+\begtt
+{\catcode`\#=12 \gdef\hashmark{#}}
+\endtt
+
+If parameters "<from>" and "<to>" are the same or the "<from>" pattern
+is on the same line as "<to>" pattern then only this line is printed
+("<why>" have to be "++" or "+-"). If this condition is true but
+"<why>" is "-+" or "--", then the printing of the code is stopped
+at next line with "<to>" pattern or at the end of the file.
+
+The "\ifirst" command remembers the name of the included file and the
+number of the last line which was read. Next time you can use the
+command "\inext{<from>}{<to>}{<why>}". This command starts the
+searching of the "<from>" pattern from the first line which wasn't
+read by the previous "\ifirst" or "\inext" command. The parameters
+of the "\inext" command have the same meaning as the parameters of the
+"\ifirst" command. The parameter "<file>" is missing because the "<file>"
+from the last "\ifirst" command is used.
+
+The number of the last line read by "\ifirst" or "\inext" command is
+stored in "\lineno"\du{lineno} register (no matter if this line was
+printed or no). If the printing of code was stopped at the end of the
+file then "\lineno" equals to the number of lines of the file.
+You can do test of reaching of the end of file by "\ifeof\infile".
+
+Examples:
+
+\begtt
+\ifirst {file.txt}{foo}{foo}{++} % print the first line
+ % with the text "foo"
+\inext {foo}{foo}{++} % print the next line with
+ % the occurence of "foo"
+\ifirst {file.c}{//: from}{//:}{--} % the same as \ins command
+\ifirst {file.h}{func(}{)}{++} % print of function prototype
+\ifirst {file.c}{func(}{^^B\cbrace}{++} % print of the code func
+\ifirst {file.txt}{}{\end}{++} % print of the whole file
+\ifirst {file.txt}{}{\empty}{+-} % print of the first block
+ % separated by empty line
+\endtt
+
+If the first line of the code to be printed is empty then it is not printed.
+If the last line of the code to be printed is empty, it is not printed too.
+This is an implicit behavior. But if you write
+"\skippingfalse",\du{skippingfalse} then this behavior is switched off.
+It means that the empty lines can occur at the begin or at the end of
+listings. You can use "\skippingtrue"\du{skippingtrue} in order to
+return to the implicit behavior.
+
+The parameter "<from>" and "<to>" can have the prefix in the form
+"\count=<number> ".\du{count} The value of the "<number> - 1" means how
+many occurrences of the pattern have to be skipped and ignored during
+searching. The "<number>"-th occurrence of the pattern is only
+significant. For example "{\count=3 foo}" means that two occurrences
+of "foo" have to be skipped and the third occurrence points to the
+right place, where the printing of the code starts (or ends).
+
+If the prefix "\count=<number> " is missing then \docbytex{} supposes
+that "\count=1".
+
+If the parameters "<from>" or "<to>" are empty and "\count=<number>" is
+used then the space after "<number>" needn't be written and the
+meaning is slightly different:
+If the "<from>" parameter is empty then "\count" means the number of
+line from where the printing is started. If the parameter "<to>" is
+empty then "\count" means the number of printed lines. The previous
+sentences are true for "<why>=++" and for "\skippingfalse".
+If the "<why>" parameter have different value and/or "\skipingtrue"
+then you must add/subtract one or two to/from the line
+number/number of lines. Examples:
+
+\begtt
+\skippingfalse
+\ifirst {file.txt}{\count=20}{\count=10}{++} % print from line 20 to 29
+\ifirst {file.txt}{}{\count=2 \empty}{+-} % print to the second empty line
+\ifirst {file.txt}{\count=50}{\end}{++} % print from 50th line to the end
+\ifirst {file.tex}{\count=5 \nb section}{\count=2 \nb section}{+-}
+ % print fifth section from TeX source
+\endtt
+
+
+\subsec [lineodkazy] References to Line Numbers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The command "\cite[<label>]" expands to the number of the line in
+source code. How to declare the "<label>"? You can do it by "\ilabel
+[<label>]{<text>}".\du{ilabel} command used before the "\ifirst" or
+"\inext" command. You can write more "\ilabel" commands if you want to
+declare more "<label>"s hidden in the following listing. The order of
+"\ilabel" commands is irrelevant.
+
+If the couple "<label>" -- "<text>" is declared by "\ilabel" then the
+"\ifirst" or "\inext" command recognizes the occurrence of the "<text>" in
+the listing. The line number of the first occurrence of "<text>" is
+connected to the "<label>", it means the "\cite" expands to such line
+number.
+
+The "<label>" have to be unambiguous in the whole document. The "\cite"
+reference works forward and backward (after second pass of \TeX{} run).
+
+The table of couples "<label>" -- "<text>" created by set of "\ilabel"
+commands is local. It means that it cooperate only with the first
+"\ifirst" or "\inext" command. These commands use this table and reset
+it to the null state. You have to create this table before next
+"\ifirst"/"\inext" command again.
+
+\docbytex{} does not write any warning if a "<text>" doesn't occur in
+the listing. Of course, if you use the unconnected "<label>" by
+"\cite" command then the warning is printed.
+
+The following example uses the known file "foo.c" mentioned in the
+section~\cite[priklad].
+
+\begtt
+The declaration of my very special function is on the line~\cite[myfunct].
+
+\ilabel [myfunct] {function (float}
+\ilabel [returnx] {pair.x}
+\ifirst {foo.c}{}{}{++}
+
+There is very specific idea on the line~\cite[returnx] where the input
+parameter is multiplied by two.
+\endtt
+
+
+\subsec Verbatim Environment by {\tt\nb begtt}/{\tt\nb endtt}
+ and by Quotes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Verbatim displays of the code can be included to the documentation by
+"\begtt"\du{begtt} and "\endtt"\du{endtt} pair of commands. The
+material to be displayed is written between these commands. All lines
+are inserted without changes, without interpretation of special \TeX{}
+characters. The lines are not numbered here and the occurrences of
+documented words are not hyperlinked automatically.
+
+The following sections~\cite[hooky] and~\cite[begtt] discuss more
+possibilities of this environment.
+
+You can write verbatim text in paragraph between quotes
+{\tt\char`\"...\char`\"}. This text is written by typewriter font and
+documented words are hyperlinked automatically. We recommend to use
+this environment for all parts of documented code which is
+mentioned inside the paragraph. This is analogical to math environment
+separated by "$...$".
+
+
+\subsec [ddsl] The Declaration of the Documented Word
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+You can use commands "\dg",\du{dg}
+"\dgn",\du{dgn} "\dgh",\du{dgh} "\dl",\du{dl} "\dln"\du{dln}
+or "\dlh"\du{dlh} in order to declare the documented word. The
+semantic of these commands is explained below. The syntax of these
+commands are slightly special. The purpose is to minimize the work of
+the writer, so the braces ("{}") are not used, parameters are separated
+by space for instance. All these commands have the same syntax
+thus the example below uses only "\dg" command.
+
+The possibilities of the syntax follows:
+
+\def\begtthook{\langleactive \mubytein=1}
+\begtt
+\dg <word> % <word> separed by space
+\dg [<text>] <word> % optional paremeter <text>
+\dg [<text>]<word> % the space between [<text>] add <word> is optional
+\dg <word>() % <word> with "()" separed by space
+\dg [<text>]<word>() % a combination of previous syntax
+\dg <word>, % <word> separed by comma
+\dg [<text>] <word>, % a combination of previous syntax
+\dg <word>(), % <word> with "()" separed by comma
+\dg [<text>]<word>(), % a combination of previous syntax
+\dg <word>. % <word> separed by period
+etc...
+\endtt
+\def\begtthook{}
+
+In general: The optional "[" can follow after "\dg" command. The
+"<text>" separated by "]" is read in such case and subsequent optional
+space is moved to the end of the "<text>". It means that
+"\dg"~"[text] word" is the same as "\dg"~"[text ]word".
+Next, the "<word>" is read. The "<word>" parameter cannot
+include the space, comma, period, colon and semicolon because these
+characters can be separator of the "<word>". These punctuation
+characters are not part of the "<word>" but they are printed.
+It means that "\dg word:" prints "word": to the output and sets
+the "word" as a documented word. If the scanned "<word>" ends by
+brackets "()" then these brackets are removed from "<word>" parameter,
+they are not printed in the current place but they are printed in
+footnotes and in the index.
+
+Attention: the space have to be written after comma, period, colon or
+semicolon separator. If the space does follow immediately then the
+scanning process works only if the text between comma-like separator
+and space does not contain active characters ({\tt\char`\"...\char`\"}
+for example). If the first character after space is {\tt\char`\`}
+(backward quote) then the space and this quote is not printed.
+
+Examples: "\dg"~"<word> `~<next text without line breaking>"
+or: "\dg"~"<word> `"{\tt\char`\"...\char`\"}.
+
+The commands "\dgh", "\dgn", "\dln", "\dlh" with space as a separator
+doesn't print this separator because they usually print nothing
+(see below).
+
+Semantic: The "<word>" parameter is documented word. If this "<word>"
+occurs on the other place in the document between
+{\tt\char`\"...\char`\"} or in code listing then it is hyperlinked
+automatically (blue color). The documented word is highlighted by red
+color in the place where the "\dg" command is used and the optional
+"<text>" or "()" does not printed.
+This is the destination of all blue hyperlinks. The "<word>" is printed in
+footnote of the current page too including the optional "<text>" in
+and/or including the optional "()". The list of pages where
+the word is used is printed here too. The same is printed in the
+index. The index is sorted alphabetically by the "<word>", not by the
+optional "<text>".
+
+The "<word>" declared by "\dg" is declared globally. This place is a
+reference point for the whole document.
+
+The "\dgh" works like "\dg" but the word is not printed in the place
+of "\dgh" (mnemonic: "\dg" hidden). But this place is still the
+destination of hyperlinks and the word occurs in the footnote and in
+the index.
+
+The "\dgn" command (mnemonic: "\dg" next)
+saves its parameters but prints nothing.
+The first occurrence of the "<word>" in the next listing will
+be treated as the "\dg" is written here.
+
+The "\dl" declares "<word>" locally. If the short name "<word>" is
+used in the same name space then it is hyperlinked and pointed to the
+place where "\dl" is used. The name space is changed by "\module"
+command. It means that "<word>" is used locally in the module.
+The word declared by "\dl" lives in two variants: short name ``"<word>"''
+and long name (depends on the current name space, typically
+``"<word>./<modulename>"''). The long name is accessible in the whole
+document.
+
+The section~\cite[jmenneprostory] explains the name spaces in more detail
+
+Each word can be declared at most once in the document else the error
+is printed by \docbytex{} on the terminal. In case of "\dl" the short
+name is irrelevant but the long name have to be unambiguous.
+
+The "\dlh" command is "\dl" hidden and the "\dln" means "\dl" next.
+They are similar as "\dgh" and "\dgn".
+
+If somebody hate this complicated parameter scanning then he/she can
+use internal commands with three parameters in braces:
+"\iidg",\du{iidg}
+"\iidgh",\du{iidgh} "\iidgn",\du{iidgn}
+"\iidl",\du{iidl} "\iidlh",\du{iidlh} "\iidln".\du{iidln}
+The usage of the parameters is: "\iidg{<text>}{<word>}{<brackets>}".
+Of course, you can do more by these commands: you can declare "<word>"
+with spaces or another delimiters, you can write something different
+than ``"()"'' as "<brackets>" parameter.
+
+
+\subsec [jmenneprostory] Namespaces
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The namespace is a rule by which the short name of documented
+word is transformed to long name when "\dl" is used. You can set the
+namespace by the command "\namespace"\du{namespace}.
+If the command "\dl<word>" is used inside the
+"\namespace" "{<pre-text>#1<post-text>}...\endnamespace".\du{endnamespace}
+environment then the short name is "<word>" and the long name is
+"<pre-text><word><post-text>".
+All occurrences of "<word>" are transformed to the long name inside the
+namespace environment. Outside of this environment the occurrence of
+short name "<word>" is treated as no "\dl" command is used.
+For example each word declared as "\dl<word>" inside
+"\namespace"~"{#1//uff}...\endnamespace" environment is transformed to
+the long name ``"<word>//uff"'' and the occurrences of "<word>" inside
+this environment is hyperlinked and pointed to the place where
+"\dl<word>" is used. Outside of this environment only sequences
+"<word>//uff" are hyperlinked.
+
+The namespace is undefined out of "\namespace...\endnamespace"
+environment thus the "\dl" command cannot be used here.
+The "\module" command declares namespace "#1./<modulename>"
+thus you can use "\dl" command for local functions and variables
+used in current module.
+
+The long names are printed in the footnotes and in the index.
+The index is sorted by the long names alphabetically. The table of
+contents uses short names.
+
+An example about namespaces follows:
+
+\begtt
+\namespace {ju::#1} %% namespace "ju" is set
+The word \dl aha is declared here.
+The word "aha" is hyperlinked to the place of its declaration.
+The word "ju::aha" is hyperlinked too.
+\endnamespace
+\namespace {wow::#1} %% namespace "wow" is set
+The word \dl aha is declared here again.
+The word "aha" points to the declaration inside "wow".
+\endnamespace %% namespace off
+The word "aha" is inactive here but the words
+"ju::aha" and "wow::aha" points to the right places.
+\endtt
+
+The "\namespace...\endnamespace" environments can be nested. The inner
+environment have to have another namespace than the outside
+environment. These environments work globally independent of the
+"\bgroup" and "\egroup". The "\endnamespace" command used outside of all
+namespace environments does nothing. You needn't to close these
+environments before "\bye" command.
+
+
+\subsec The Application Level of the Documentation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+You can write the documentation to users of your code. For example the
+rules of the usage of functions are documented here (API) without codes
+of these functions. Suppose that you want to document the ``inside
+behavior'' of these functions by presenting their codes in the same
+document. The documented "<word>" (a function name) can point to two
+different places in your documentation in such case: API documentation
+and CODE documentation.
+
+The place with the function code (detail documentation) is located by
+"\dg" command (or similar). The second place where the word is
+documented only for users without code can be declared by
+"\api{<word>}"\du{api}. This command inserts the invisible mark only,
+the destination of links. The table of contents mentions the word
+and points to this place. The list of pages with the occurrences of the
+word (in the index and in footnotes) contains one underlined
+page number. This is the page where "\api" command is used.
+Of course, the "\api{<word>}" command is not sufficient to including
+the word to the index. You need use the "\dg" command (in another
+place of the document) too.
+
+The word declared by "\api" command are printed in the index with the
+"\apitext"\du{apitext} prefix. The implicit value of "\apitext" macro
+is the special right arrow. You can see it in the index and in the
+table of contents in this document. The "\api{\nb api}" is used here
+but the code of "\api" macro is documented in section~\cite[reference].
+
+You can reference the place marked by "\api{<word>}" by
+"\cite[+<word>]". This macro expands to the page number where the
+"\api{<word>}" is used. For example the "\cite[+\nb api]" expands to
+\cite[+\nb api] in this document.
+
+If there exist the API destination declared by "\api" command then
+the red word printed in the "\dg" place is hyperlinked and it points
+to the API destination. Typically, the occurrence of this word is
+hyperlinked here with the "\dg" place as a destination. It means we have
+these two destinations cross hyperlinked.
+
+
+\subsec [kapsec] Title, Parts, Sections, Subsections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Sections starts by "\sec"~"<Section Name>\par"\du{sec} command.
+Each section can include subsections started by the command
+"\subsec"~"<Subsection Name>\par"\du{subsec}.
+Of course, the "\par" separator can be replaced by empty line
+(see the example in section~\cite[cleneni]).
+Sections and subsections are numbered automatically.
+
+One or more sections can form a ``part'' which is started by
+"\part"~"<Part Name>\par"\du{part} command. Parts are labeled by
+letters A, B, C,~\dots\ and they are printed more noticeable in table
+of contents than sections. The "\part" command does not reset the
+section numbering. It means that sections are numbered from one in
+the whole document, no matter if the document is divided into parts.
+
+The "\module <modulename> " command creates a new section
+"Module <modulename>", creates namespace and includes the
+"<modulename>.d" file. You can change this default behavior,
+see sections~\cite[nazvy] and~\cite[module].
+
+The "\title<Name>\par"\du{title} command prints the title of the
+document by huge font in rectangle. If the
+"\projectversion"\du{projectversion} macro is defined then it expands
+to the text printed in the right upper corner of the rectangle
+by small font. The word ``version'' precedes. If our project has no
+version then you can define (for example):
+
+\begtt
+\def\projectversion{\the\day. \the\month. \the\year}
+\endtt
+
+The "\author<text>\par"\du{author} command centers the "<text>"
+i the line and prints it bold. The common meaning is name(s) of the
+author(s).
+
+The headline is created at each page of the document with the
+current section (from left) and title of the document (from right).
+You can redefine the right headline by new definition of the
+"\headtitle"\du{headtitle} macro.
+
+The optional parameter "<label>" in square brackets can be used
+with "\sec" and "\subsec" commands. The parameters looks like:
+"\sec"~"[<label>] <Section Name>\par". If the "<label>" parameter is
+used then you can reference this place by "\cite[<label>]". This macro
+prints the number of referenced (sub)section and acts like
+hyperlink.
+
+You can disable the transport of "<(Sub)Section Name>" into table of
+contents by "\savetocfalse"\du{savetocfalse} used before "\sec" or
+"\subsec" command. This section has no number. The macro
+"\emptynumber"\du{emptynumber} expands instead of number printing. This
+macro is set to empty by default. The "\savetocfalse" command
+influences only first "\sec" or "\subsec" command.
+
+
+\subsec [krizodkaz] Hyperlinks, References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+The destination of the hyperlink and/or reference have to be marked by
+"<label>". This can be done by optional parameter of the "\sec" or
+"\subsec" command (see the section~\cite[kapsec]) or by the command
+"\label[<label>]"\du{label} itself. You can make labels to line
+numbers of inserted code too (see the section~\cite[lineodkazy]). All
+labels have to be unambiguous in whole document (independent of their
+type).
+
+The command "\pgref[<label>]"\du{pgref} expands to the number of the
+page where the "<label>" is. The command
+"\numref[<label>]"\du{numref} expands to the result which depends
+on the type of the destination:
+
+\begitems
+\item * sections number if the destination is the section
+\item * the pair "<secnumber>.<subsecnumber>" if the destination is
+ the subsection.
+\item * the number of the line if the destination is the line in the
+ printed code
+\item * empty if the destination is marked by "\label" command.
+\enditems
+
+Both macros "\pgref" and "\numref" expand to the texts mentioned above
+without any more processing. It means that the printed text is not
+treated as hyperlink.
+
+You can use the command "\ilink"~"[<label>]{<text>}"\du{ilink}
+in order to create the hyperlink in PDF mode.
+This macro prints the "<text>" in blue color and it is treated as
+hyperlink to the destination specified by "<label>".
+For example the command "\cite[<label>]"\du{cite}
+does the same as "\ilink[<label>]{\numref[<label>]}".
+The real macro "\cite" executes a test if the "\numref[<label>]"
+is empty and prints the "\pgref" in such case.
+
+If the "<label>" is not declared then "\pgref{<label>}" and
+"\numref{<label>}" have no destination. The "\pgref" expands to
+the text "-1000" and "\numref" is empty in such case. These macros
+work on expand processor level thus no warning message is implemented
+here. On the other hand the "\cite" command implements warnings.
+See the code of "\cite" on the page~\cite[@\nb cite] for more detail.
+
+The "\module"~"<modulename> " command creates the section with the
+label ``"m:<modulename>"''. You can reference it by:
+
+\begtt
+\def\refmodule[#1]{\ilink[m:#1]{\tt#1}}
+\endtt
+%
+The "\refmodule{<modulename>}" defined in the example above
+prints "<modulename>" and creates it as
+hyperlink. For example "\refmodule[base]" prints the word ``base''
+in blue typewriter font and creates it as the hyperlink to the begin of
+the section ``Module base'' if this section is crated by
+"\module base " command.
+
+The "\dg", "\dgn" and "\dgh" commands perform the command "\label[@<word>]"
+internally and the "\dl", "\dln" and "\dlh" perform the command
+"\label[@<longname>]" internally. The "<longname>" is the long name of
+the "<word>" in context of the current namespace.
+For example, you can reference these places by
+"\link[@<word>]{The <word> documented on the page~\pgref[@<word>]}".
+
+The "\api{<word>}" command executes "\label[+<word>]" internally. It
+means that you can reference this place by
+"\ilink[+<word>]{API: <word>}" for instance.
+
+No more automatic numbering is processed by \docbytex{}. Only
+numbers of sections, subsections and line numbers of the printed code.
+If you want to create the numbers of figures, publications etc. Then
+you have to write your own macros. You can use the
+"\labeltext[<label>]{<text>}"\du{labeltext} command in such case.
+This macro expands it parameters immediately and
+inserts invisible hyperlink destination into typeset material in
+horizontal mode. Then macro "\numref{<label>}" expands to
+"<text>" in the next pass of the \TeX{} run.
+Example: we define the macro "\bib[label]" which inserts the
+destination marked by the "<label>". The hyperlink with the number
+of the book can be created by "\cite[b:<label>]".
+
+\begtt
+\newcount\bibnum
+\def\bib [#1]{\par\advance\bibnum by1 \indent
+ \llap{[\the\bibnum] }\labeltext[b:#1]{[\the\bibnum]}\ignorespaces}
+\endtt
+
+\subsec Pictures Inserting
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The command "\ifig" "<width> <picname> "\du{ifig} inserts the picture
+into your document. The picture have to be prepared in the file
+"fig/<picname>.eps" (if \ilink[+DVI]{DVI mode} is used) and in the file
+"fig/<picname>.pdf" (if \ilink[+PDF]{PDF mode} is used).
+You can use another directory for pictures than "fig/" -- this name is
+stored in the "\figdir"\du{figdir} macro and you can redefine it.
+The "<width>" parameter is the ratio of the width of inserted picture
+to the "\hsize" (unit-less). The inserted picture is placed to left
+side with the paragraph indentation.
+For example "\ifig 0.5 foo" inserts the picture prom "foo.pdf"
+(in PDF mode). The picture is scaled that its width is one half
+of the width of the printed text.
+
+If you have the picture in "eps" format and you need to convert it to
+"pdf" then you can use:
+
+{\def\begtthook{\langleactive}
+\begtt
+ps2pdf -dEPSCrop <picname>.eps
+\endtt
+\par}
+
+
+\subsec Items
+%%%%%%%%%%%%%
+
+The list of items are surrounded by "\begitems"\du{begitems} and
+"\enditems"\du{enditems} commands. The text is printed with one indent space
+("\parindent") more in this environment. These environments can be
+nested. Each item is started by "\item"~"<mark> ".\du{item}
+The "<mark>" is printed left from the text. If the "<mark>" is the
+star ("*") then it is changed to the bullet. You can write
+"\item"~"\the\itemno) "\du{itemno} if you want to print numbered
+items. The "\itemno" register counts from one in each
+"\begitems"..."\enditems" environment.
+
+The "\item" macro is redefined only inside "\begitems"..."\enditems"
+environment. If you wish to use the plain\TeX{} macro "\item" then
+just don't use "\begitems" and "\enditems" commands.
+
+
+\noactive{/*}\noactive{*/}\noactive{//}
+\setlinecomment{\percent} \noactive{\nb\percent} \noactive{\percent\cbrace}
+
+
+\sec [zmeny] For Advanced Users
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The definitions of basis macros of \docbytex{} are mentioned in
+this section. The user can change these definitions if he need
+different behavior of \docbytex{} than default one. For example, user
+documents different language than C and he/she redefine the
+"\docsuffix" macro or he/she redefine the code of "\module" and
+"\ins" commands completely.
+
+
+\subsec [nazvy] Internal Names
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The "\doindex" command creates new section with the name ``Index''.
+The sections with names ``Table Of Contents'' or ``Module''
+are inserted when table of contents is generated or "\module" command
+is executed. The word ``version'' is prefixed when the number of
+version is printed (if "\projectverion" is used). The text
+">> PART" is inserted into bookmarks by "\part" command.
+These texts are defined in the following macros:
+\db titindex, \db tittoc, \db titmodule, \db titversion and \db opartname.
+
+\ifirst {docby.tex}{Intern}{\empty}{--}
+
+Note that different names are used by default when plain or csplain
+format is processed. But user can redefine these macros independently
+of the used format.
+
+
+\subsec [hooky] Hooks
+%%%%%%%%%%%%%%%%%%%%%
+
+Some more elaborate macros ("\begtt", quotes, "\ifirst",
+"\inext", "\doindex", "\dotoc") execute so called ``hook''
+before processing of more code. These hooks are macros and they are
+empty by default.
+
+\ifirst {docby.tex}{begtthook}{\empty}{+-}
+
+The \db begtthook macro is inserted after begin of the group and after all
+catcodes are set by default before text inside the environment
+"\begtt...\endtt" is processed.
+The \db quotehook macro is inserted after begin of the group and after
+all cactodes are set by default before the text inside
+"\begtt...\endtt" is processed.
+The \db indexhook macro is inserted by "\doindex" command after new
+section name is printed and before two column printing is activated.
+You can insert the notice to index here (see the index of this document
+for example).
+The \db tochook macro is inserted by "\dotoc" command after new
+section name is inserted and before first line of table of contents is
+printed.
+The \db bookmarkshook macro is inserted inside the group at the begin
+of bookmarks processing. You can set the different expansion of macros
+used in bookmarks here. For example "\def\mylogo{MyProgram(R)}".
+Moreover, if you
+say "\let\cnvbookmark=\lowercase" here then all characters is
+converted to lower case in bookmarks. This is done by "\lowercase"
+primitive thus the different meaning of special characters can be set
+by "\lccode". I use it for removing of accents because accents in
+bookmarks are interpreted by most PDF viewers wrongly.
+The \db outputhook macro is inserted at the begin of the output
+routine. We recommend to set chosen macros to "\relax" meaning in
+order to they are not expanded in ".ref" file.
+
+Examples:
+
+\bgroup
+\catcode`'13 \def'{\nb} \catcode`?=13 \def?{<}
+\def\begtthook{\langleactive\mubytein=1}
+\begtt
+\def\quotehook{\obeyspaces} % normal spaces inside "..."
+\def\quotehook{\langleactive} % ?text> is changed to <text>
+\def\begtthook{\mubytein=1} % auto-hyperlinks between 'begtt...'endtt
+\def\begtthook{\setsmallprinting} % 'begtt...'endtt printed by small font
+\def\begtthook{\catcode`\!=0} % !commands can be used in 'begtt...'endtt
+\def\indexhook{The special index with such and such properties follows.}
+\def\outputhook{\let\mylogo=\relax} % \mylogo is not expaded in *.ref
+\endtt
+\par
+\egroup
+
+\subsec [module] The Commands {\tt\nb module} and {\tt\nb ins}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The user documentation of these commands is in section~\cite[cleneni].
+The \db module "<file> " command reads the file with the name "<file>\docsuffix"
+where \db docsuffix macro includes the suffix including the period.
+
+\ilabel [linkincomment] {extension}
+\insdef docsuffix
+
+The "\module" command inserts the name of the file (without the suffix)
+into the auxiliary macro \db modulename. This macro is used by the
+\db ins "<extension> <text> " command.
+
+\inssdef ins
+
+\subsec The Comments Turned to Green Color
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The "\ifirst" and "\inext" commands recognise C comments in the form
+"//..<eol>" and "/* .. */". These comments are printed in green color.
+You can disable this behavior by "\noactive<string>" command.
+You can set a new type of comments by \db setlinecomment "{<string>}" command.
+These commands will be turned to green color from "<sting>" to end of line.
+These commands work globally. For example
+
+{\def\begtthook{\mubytein=1}
+\begtt
+\noactive{/*}\noactive{*/}\noactive{//}
+\setlinecomment{\percent} \noactive{\nb\percent}}
+\endtt
+\par}
+\noindent
+activates comments used in \TeX{} sources and PostScript language.
+
+You can set the comments of the type "/*...*/"
+by the command \db setlrcomment "{<left>}{<right>}".
+
+If you are interested what these macros do internally then you can read
+the following part of this section.
+
+
+\inext {mubyte}{\empty}{+-}
+
+These macros are empty in no-enc mode. When enc\TeX{} is detected,
+they write information to enc\TeX{} table by "\mubyte...\endmubyte"
+primitive commands.
+
+The \db linecomment a \db leftcomment commands are inserted by enc\TeX{}
+before each occurrence of declared character sequence. These commands sets
+the current color to green:
+
+\inext {linecomment}{\empty}{+-}
+
+On the other hand, the \db rightcomment command have to switch off the
+green color after the declared sequence is detected. Thus
+enc\TeX{} cancels the detected sequence and "\rightcomment"
+command returns this sequence back. After the returned sequence
+the \db returntoBlack command set the current color to black.
+
+\inext {returntoBlack}{\empty}{+-}
+
+Each line of listing is started by "\Black" switch. So, the green comments
+to the end of line work. But the green comment can be interrupted by
+the pair "\Blue...\Black" (see line~\cite[linkincomment] in previous section).
+In this case the "\Black" command have the "\Green" meaning so it
+returns to the green color. Next line is started with original "\Black"
+switch because each line is printed inside its own \TeX{} group.
+
+The comments of type "/* ... */" can affect more lines. So more lines
+have to be green and we re-define "\Black" to "\Green" globally.
+The lines starts with "\Black" command with "\Green" meaning in such
+case. The "\returntoBlack" returns to the original "\Black" switch
+globally.
+
+\docbytex{} initializes the comments by the rules of C language:
+
+\inext {setlinecomment}{\empty}{+-}
+
+
+\sec [design] For Designers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The documentation of macros which influence the look of the document
+follows. You can redefine it in order to change the design of your
+document. I mean that it is better to write simply and good documented
+macros for one purpose than the complicated macros with many
+parameters. You can simply use them or redefine them.
+
+The main processing of docbytex{} is hidden in more complicated macros
+described in section~\cite[implementace]. This differentiation of
+levels gives possibility to the designers to concentrate to
+design-like problems and not to drown in complicated recursive loops
+etc. of internal macros.
+
+There are two different version of design macros: for pdf\TeX{} mode
+and for DVI mode (without pdf\TeX{}). This is the reason why you can
+see that the listings of following macros are often started by the text
+"\ifx\pdfoutput\undefined".
+
+
+\subsec Parameters and Auxiliary Macros
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The parameters \db hsize and \db vsize are unchanged in
+\docbytex{}. User can set his/her own preferred values.
+If they are unchanged by user then the default values from plain
+(usable for letter format) or csplain (usable for A4) are used.
+
+\docbytex{} sets new value for "\parindent" because we need more space
+here for colourised squares in section names.
+
+\ifirst {docby.tex}{parindent=}{\empty}{+-}
+
+The \db nwidth dimen is used like ``narrowed "\hsize"'' for many
+situations: the width of headline, footline and for title text.
+
+\inext {nwidth}{\empty}{+-}
+
+The glue at the bottom of each page is set by "\raggedbottom" macro
+(defined in plain\TeX).
+Moreover, the "\exhyphenpenalty=10000" is set in order to deny
+the linebreaking after dashes (like pp~11--13).
+
+\inext {raggedbottom}{\empty}{+-}
+
+The fonts
+\db bbf, \db bbbf, \db btt,
+\db ttsmall, \db rmsmall, \db itsmall and \db partfont
+are loaded here.
+
+\inext {bbf=}{\empty}{+-}
+
+The \db setsmallprinting macro sets the typewriter font and prepares
+the \db ttstrut of appropriate size and activates the line printing
+without vertical spaces between them by "\offinterlineskip" macro.
+The "\parskip" value is set to "-1pt" in order to a small overlaps of
+struts guarantee that no dashes-artifacts occur at background of
+listings. The \db setnormalprinting is similar.
+
+\inext {setsmallprinting}{\empty}{+-}
+
+The design is projected only with the following colors:
+\db Blue, \db Red, \db Brown, \db Green, \db Yellow a \db Black.
+If you need other colors you can define more similar macros.
+
+\inext {pdfoutput}{\empty}{+-}
+
+All colors are defined by \db setcmykcolor macro which is empty in DVI
+mode but~a proper "\special" is used in PDF\TeX{} mode. It means that
+the commands "\Brown" etc. can be used in DVI mode too, but they do
+nothing in that mode.
+The \db oriBlack macro switches to black color and this macro is never changed.
+On the other hand, the "\Black" macro can be redefined in special
+environments and we need to return to real black color
+by "\oriBlack" macro at the end of such environment.
+
+The \db rectangle "{<height>}{<depth>}{<width>}{<contents>}"
+command creates a rectangle with specified dimensions and contents.
+This rectangle is filled by yellow color in PDF mode.
+The same rectangle has only black outline in DVI mode.
+Attention: the "<contents>" have to be prefixed by color switch
+otherwise it is invisible in PDF version (yellow on yellow).
+The "\rectangle" macro returns back to black color after rectangle
+is created.
+
+\inext {pdfoutput}{\empty}{+-}
+
+The \docbytex{} logo is typeset by \db docbytex macro.
+
+\inext {def\nb docbytex}{\empty}{+-}
+
+
+\subsec Sections and Subsections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db printsec "{<sec-title>}" and \db printsecbelow macros are
+invoked from "\sec" macro. Their main task is to print the title of
+the section. You can redefine these implicit macros.
+You can concern with design of section here and you need
+not solve other problems (reference to the TOC, numbers, running heads
+etc.) which are hidden in "\sec" macro.
+
+The following rules are mandatory: The vertical mode have to be
+initialized at the begin of the "\printsec" macro. Then you can insert
+vertical space and then you can insert the text of title.
+The "\makelinks" macro have to be inserted in the horizontal mode here. It
+creates the aim of hyperlinks. The "\par" command have to be the last
+command of your "\printsec" macro. No more vertical spaces can be
+inserted here. The main "\sec" macro inserts another elements below
+the text and then it call the second macro "\printsecbelow". The
+vertical space below the text is inserted from this macro (probably
+protected by "\noberak". The right order of elements in \TeX{}'s
+vertical list is: ``box, (whatsit, mark, etc.), penalty, glue''.
+The objects mentioned in the brace here is inserted by "\sec" macro.
+You can insert the ``box'' (by "\printsec" macro) and the
+``penalty+glue'' (by "\printsecbelow" macro).
+
+There are numerical registers "\secnum" and "\subsecnum" which store the
+actual (sub)section number. Moreover you can use the "\ifsavetoc"
+test. This is true if the title is printed in table of contents.
+If it is false then you can use "\emptynumber" macro instead of
+"\the\secnum".
+
+The "\seclabel" includes the "<label>" of processed section or it is
+empty. You can use it for draft printing is you wish to see the labels
+(in margins, for example). \docbytex{} doesn't implement this feature
+by default.
+
+\ifirst {docby.tex}{def\nb printsec }{\empty}{+-}
+
+The \db printsubsec and \db printsubsecbelow macros does the same
+things but subsection is printed. They are invoked by "\subsec" macro.
+
+\inext {def\nb printsubsec }{\empty}{+-}
+
+The \db printpart macro prints the title of part which is enumerated by
+uppercase letters. The \db printpartbelow macro inserts the vertical
+space below the part title.
+
+\inext {def\nb printpart }{\empty}{+-}
+
+The \db emptynumber is normally used if "\savetocfalse". It prints
+nothing by default.
+
+\inext {emptynumber}{\empty}{+-}
+
+
+\subsec The Title, The Author
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db title "<title>\par" macro reads its parameter "<title>" by
+auxiliary macro "\secparam" which ignores the possible space at the
+end of this parameter. This parameter is stored into "\sectitle"
+tokenlist and internal macro \db iititle is invoked. This macro works
+in two different modes (DVI and PDF). The "<title>" is stored into
+"\headtitle" macro (in both modes) only if the "\headtitle" is empty,
+it means that it it not initialized by user. Then "\iititle"
+suppresses the headline printing on the current page by the
+"\nohedaline" command.
+
+\inext {def\nb title}{\empty}{+-}
+
+The "\iititle" macro expands to normal "\centerline" in DVI mode.
+On the other hand it creates the yellow rectangle of the width
+"\nwidth" in PDF mode.
+
+If the \db projectversion macro is undefined then its default value is
+empty.
+
+\inext {ifx\nb project}{\empty}{+-}
+
+The \db author "<author>\par" does the same in both modes: prints the
+"<author>" text on the center by boldface font.
+
+\inssdef author
+
+
+\subsec Headers and Footers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\docbytex{} doesn't change the output routine defined by plain\TeX.
+It uses the standard plain\TeX{}'s macros "\headline" and "\footline"
+when the design of headers and footers need to be changed.
+
+The default design doesn't do any difference between left page and
+right page because we suppose that the document will be read on
+monitor and may be printed without duplex.
+
+The \db footline prints the page number on center with "\rectangle".
+
+\inext {footline}{\empty}{+-}
+
+The text of \db headline is changed during document is processed. It
+includes only \db normalhead macro by default but if the "\noheadline"
+command is used then "\headline" changes its content until one page is printed.
+
+\ilabel[headlinebox] {headlinebox}
+\inext {headline}{\empty}{+-}
+
+The "\normalhead" macro stores page link by "\savepglink"
+and creates the header by nested "\vbox/\hbox"es. The name of section
+("\firstmark") is printed from the left side and the constant
+"\headtitle" is printed on the right side.
+
+The \db noheadline macro sets "\headline" to the temporary macro text
+which stores page link and does the change of "\headline" to its
+default value. This setting is global because we are inside the output
+routine.
+
+\inssdef noheadline
+
+The \db headtile macro prints the text in right side of header. It is
+empty by default but it is changed by "\title" command to the name of
+the document. User can define its value manually.
+
+\inext {headtitle}{\empty}{+-}
+
+The auxiliary macro \db headlinebox prints the empty rectangle in DVI
+mode and solid yellow rectangle in PDF mode. It is used on the
+line~\cite[headlinebox] for creating of square filled line in the header.
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+
+\subsec Printing of the Hyperlink Destinations and Footnote References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The hyperlink destination created by "\dg" or "\dl" macros are printed
+highlighted in order to reader can easy find it. The printing is
+processed by the macro \db printdg "{<text>}{<word>}{<brackets>}"
+where the parameters are the same as in "\iidg" macro described
+in~\cite[ddsl] section.
+
+Only one parameter "<word>" is printed by default. The "<word>" is
+printed in rectangle in DVI mode or it is printed in red on solid
+yellow rectangle in PDF mode.
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+The red text is printed by auxiliary macro \db printdginside.
+This macro prints only in red color if does not exist the "\api"
+destination. On the other hand it prints in red by "\ilink" macro if
+the "\api" destination does exist.
+
+\inext {def\nb printdginside}{\empty}{+-}
+
+One item below the footnote rule is printed by
+\db printfnote "{<text>}{<word>}{<brackets>}" macro (the parameters from
+"\iidg" macro are here). The "<word>" is printed in red, other
+information is printed in black.
+
+The "\specfootnote"~"{<text>}" macro is used here. It sends the
+"<text>" to the special footnote. The "\pgref[+<word>]" returns the
+page number where the "\api" destination of the "<word>" is or it
+returns $-1000$ if "\api" destination does not exist. This number is
+stored in "\apinum" and if it is non-negative number then it is
+printed as first page number underlined. The list of page numbers
+where the "<word>" occurs is printed by
+"\listofpages{<word>}" macro. This macro ignores the number of page
+where "\api" destination is. The empty list of page numbers is
+detected by zero width of "\box0".
+
+\inext {def\nb printfnote}{\empty}{+-}
+
+\subsec The Index and Table of Contents Item
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db ptocline "{<number>}{<text>}{<pageno>}" command prints the
+item about a section or a part in table of contents. The
+\db ptocsubline "{<number>}{<text>}{<pageno>}" does the same with the
+item about subsection. There is no substantial differences between these commands
+in \docbytex{}'s default design, only one "\indent" more in "\ptocsubline":
+
+\inext {def\nb ptocline}{\empty}{+-}
+
+The \db mydotfill command prints the dots in table of contents so they
+are aligned.
+
+The \db ptocentry "<type>{<word>}{<s-word>}" prints one item about
+documented word in table of contents. If it is "\api" occurrence of
+the "<word>" then "<type>=+" else "<type>=@". The "<s-word>" parameter
+is empty but if the "<word>" is declared by "\dl" then "<s-word>"
+includes a short variant of the word and "<word>" includes a long
+variant of it. We use long variant for hyperlinking and short variant
+for printing.
+
+\inext {def\nb ptocentry}{\empty}{+-}
+
+If someone want to print "<text>" before "<word>" or "<braces>" after
+"<word>" then he can use a control sequence
+"\csname-<word>\endcsname". The example follows in the next macro
+"\printindexentry".
+
+The \db myldots command creates three dots, they are aligned wit
+another dots in table of contents.
+
+The \db printindexentry "{<word>}" macro prints an item of the
+"<word>" in the index. It starts in vertical mode inside column,
+prints the item and it have to switch to vertical mode back by "\par"
+command.
+
+\inext {def\nb printindexentry}{\empty}{+-}
+
+The \db separeright macro stores the "<text>" before the declared word
+into the "\tmpa" and the "<braces>" into the "\tmpb". The control
+sequence "\csname-<word>\endcsname" is prepared by the "\refdg" macro.
+This sequence expands to "<text>\right<braces>".
+The page number with the "\dg" (or "\dl") occurrence of the word
+is obtained by "\pgref[@<slovo>]" and the page number with "\api"
+occurrence is obtained by "\pgref[+<word>]". This page number
+is underlined if it does exist.
+
+
+\subsec The Source Code Listing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The "\ifirst" and "\inext" macros print the required part of source
+code. They start with "\bgroup" and calls the \db printiabove
+macro. Each line is printed by \db printiline "{<number>}{<text>}"
+macro. They finish by calling of \db printibelow macro and "\egroup"
+command at the end. The designer can define these three macros. The
+default design makes differences between DVI and PDF mode.
+
+\ilabel [isnameprinted] {raise8}
+\ilabel [isnameprinted2] {pt \nb inputfilename}
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+The line above with file name is printed in DVI mode by "\leaders"
+primitive and \db specrule macro. The line below listing is simple.
+In the PDF mode, we set "\setsmallprinting" at the start of listing
+and insert a small vertical space.
+
+The "\printline" macro sets the horizontal mode and strut is inserted
+here (in DVI mode) followed by box with number of the line. The
+interline penalty is 11 in the listing. In PDF mode, the solid
+yellow rectangle is printed by "\rlap". We need to print the filename
+above the listing after the yellow rectangle of the first line is
+printed. That is the reason why there is the test if first line of the
+listing is printed by \db isnameprinted control sequence. It is
+"\undefined" by default but if the filename is printed then
+"\isnameprinted" is set to "\relax" (see lines~\cite[isnameprinted]
+and~\cite[isnameprinted2]). After the "\egroup" (inserted
+at the end of "\ifirst" or "\inext") the default value of "\isnameprinted"
+is restored. This value is "\undefined".
+
+
+\subsec [begtt] The {\tt\nb begtt ... \nb endtt} Printing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The "\begtt" establishes a new group and calls the \db printvabove
+macro. Next, each printed line is processed by
+\db printvline "{<number>}{<text>}" macro. At the end,
+the \db printvbelow macro is invoked and the group is closed.
+
+The implicit design doesn't print the numbers of lines. We draw only
+lines above and below in DVI mode. Moreover, we draw yellow lines in
+PDF mode and the yellow lines left and right in each line by "\rlap" macro.
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+
+\subsec Pictures
+%%%%%%%%%%%%%%%%
+
+The pictures are inserted in order to align their left side with the
+paragraph indent. The implicit design sets the "\parindent" to
+sufficient big value that the result is quite good.
+The width of the picture \db figwidth is calculated as
+"\hsize" minus "\parindent".
+
+\inext {newdimen\nb figwidth}{\empty}{+-}
+
+DVI mode: The macro \db ifig "<width ratio> <filename> " inserts
+the picture from "<filename>.eps" usig the {\tt epsf.tex} macro package.
+PDF mode: The macro inserts the picture from "<filename>.pdf" by
+pdf\TeX{} primitive commands "\pdfximage", "\pdfrefximage", "\pdflastximage".
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+The \db figdir includes the directory with the pictures.
+
+\subsec Items
+%%%%%%%%%%%%%
+
+The macros for items mentioned in text are simple. The \db begitems
+macro starts the items environment and the \db enditems ends it.
+The \db itemno register counts the number of the current item and the
+\db dbtitem "<mark> " is the global variant of \db item macro.
+The "\item" macro is the same as in plain\TeX{} by default but it
+changes its behavior inside "\begitems"..."\enditems" environment.
+
+\inext {newcount\nb itemno}{def\nb enditems}{++}
+
+
+\sec [implementace] For \TeX{} Wizards
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The implementation of \docbytex{} is documented here. All internal
+macros of \docbytex{} are listed and commented in this section.
+May be, it is not so good idea to redefine these macros unless the
+reader want to do his own \docbytex.
+
+
+\subsec Auxiliary Macros
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db dbtwarning macro prints warning on the terminal:
+
+\inext {def\nb dbtwarning}{\empty}{+-}
+
+The macros \db defsec "{<text>}", \db edefsec "{<text>}" and \db undef "{<text>}"
+define control sequence "\csname<text>\endcsname".
+
+\inext {def\nb defsec}{\empty}{+-}
+
+You can use the "\undef" macro in following way:
+
+{\def\begtthook{\langleactive\mubytein=1}
+\begtt
+\undef{<text>}\iftrue <sequence is undefined> \else <sequence is defined> \fi
+\endtt
+\par}
+
+You have to write "\iftrue" after "\undef{<text>}". There is a
+practical reason of this concept: you can use "\undef" test nested
+inside another "\if...\fi" conditional.
+
+The \db nb macro expands to normal backslash of catcode 12. You can
+use it if you need to search text with this character. The active
+tabulator is defined as eight spaces and auxiliary macros
+\db obrace, \db cbrace, \db percent, \db inchquote are defined here.
+
+{\catcode`\%=12 \noactive{\nb %} \noactive{[%} }
+
+\inext {catcode}{\empty}{+-}
+
+The \db softinput macro inputs the specified file only if this file
+exists. Else the warning is printed.
+
+\inext {def\nb softinput}{\empty}{+-}
+
+The \db setverb macro sets the cactodes of all special characters to
+normal~(12).
+
+\inext {def\nb setverb}{\empty}{+-}
+
+
+\subsec Initialization
+%%%%%%%%%%%%%%%%%%%%%%
+
+\docbytex{} prints on the terminal:
+
+\inext {This is DocBy}{\empty}{+-}
+
+The \db dbtversion macro expands to the version of the \docbytex.
+It is defined at the begin of the file {\tt docby.tex}. If new version
+is released then this definition will be changed.
+
+\inssdef dbtversion
+
+%The csplain mode is detected by "\chyph" control sequence. It
+%initializes the Czech hyphenation patterns.
+%
+%\inext {^^B\nb ifx\nb chyph\nb undefined \nb else}{\empty}{+-}
+
+If "(pdf)csplain" is used then the UTF-8 input is activated by enc\TeX.
+Unfortunately this isn't compatible with \docbytex{} which uses
+enc\TeX{} by different way. We need to deactivate the UTF-8 encoding
+input. If you need to write something in different language than English
+you need to use the 8bit encoding (ISO-8859-2 is usable for Czech
+when "(pdf)csplain" is used).
+
+\inext {utf8off}{\empty}{+-}
+
+The enc\TeX{} mode is detected and initialized:
+
+\inext {encTeX ??}{\empty}{+-}
+
+The \db enctextable "{<word>}{<macrobody>}" command inserts new
+item into enc\TeX{} table with the key "<word>". If this key is found
+by enc\TeX{} then it is removed from input stream and replaced by
+the "\.<word>" macro which expands to "<macrobody>".
+For example after "\dg"~"foo" the key "foo" is activated for
+enc\TeX by "\enctextable{foo}{\sword{foo}}" command. If the
+"foo" is found in the input stream then it is replaced by
+"\sword{foo}".
+
+The "\enctextable" doesn't store the key to the enc\TeX{} table if it
+is included in the list of prohibited words stored in \db owordbuffer.
+The words are separated by comma here. They are prohibited because of
+"\onlyactive". The "\enctextable" defines only the "\.<word>" sequence
+in such situation.
+
+The \db noactive "{<text>}" macro inserts the "<text>" as a key in the
+enc\TeX{} table. This key is not removed from input but the
+\db emptysec control sequence is inserted before it. Enc\TeX{} is not
+able to remove the key from its table, it is only able to rewrite the
+behavior of the transformation process if the key is found. If we need
+to deactivate some key by "\noactive" then we rewrite its behavior.
+
+All occurrences of documented words "<word>" is transformed to
+\db sword "{<word>}" by enc\TeX{}. The hyperlink is created by this macro:
+
+\inext {def\nb sword}{\empty}{+-}
+
+The \db onlyactive "{<before>}{<word>}{<post>}" command inserts the
+"<word>" into the list of prohibited words "\owordbuffer" (only if
+this word isn't here already). Enc\TeX{} changes all occurrences of
+"<before><word><post>" to "\oword{<before>}{<word>}{<post>}".
+Moreover, the "<word>" is deactivated by "\noactive" (may be it was
+activated when "\reffile" is read). The
+\db oword "{<before>}{<word>}{<post>}" command prints "<before>" by
+normal font, then runs "\.<word>" if it is defined (else prints
+"<word>" normally). Finally, it prints "<post>" by normal font.
+
+\inext {def\nb onlyactive}{\empty}{+-}
+
+The DVI/PDF mode is initialized here:
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+
+\subsec The {\tt\nb ifirst}, {\tt\nb inext}, {\tt\nb ilabel} Macros
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db lineno register is the number of the line, \db ttlineno register
+is the number of the line in the "\begtt...\endtt" environment. We use
+\db ifcontinue for loop controlling and \db ifskipping for setting
+\db skippingfalse and \db skippingtrue.
+
+\inext {newcount\nb lineno}{\empty}{+-}
+
+The \db ifirst "{<filename>}{<from>}{<to>}{<why>}" command analyses
+its parameter "<why>" by "\readiparamwhy" and tries to open the file
+"<filename>" for reading by "\openin" primitive. If it is unsuccessful
+then a warning is printed. Else the "<filename>" is stored to
+\db inputfilename macro and other parameters are analyzed by
+"\scaniparam". The "<from>" resp. "<to>" parameter is stored to "\tmpa"
+resp. "\tmpb" macro. The "<num>" parameter from "\count=<num>" is
+stored to "\tmpA" and "\tmbB" macros. The command "\insinternal"
+is invoked with expanded parameters "<from>" and "<to>". The expansion
+is done via "\edef"ed macro "\act".
+
+\insdef ifirst
+
+The \db inext "{<from>}{<to>}{<why>}" macro does the analogical work
+as the "\ifirst". The only difference is that the "<filename>" is not
+open by "\openin". We suppose that the file is opened already. We are
+not sure that this is true and we check it by test of contents of the
+"\inputfilename" macro.
+
+\insdef inext
+
+When the parameters "<from>" and "<to>" are expanded then we want to
+suppress all expansions of macros automatically inserted by
+enc\TeX{}. This work is done by \db noswords macro.
+
+\inssdef noswords
+
+The \db readiparamwhy reads "+" or "-" characters from "<why>"
+parameter and stores them to \db startline and \db stopline
+control sequences.
+
+\inssdef readiparamwhy
+
+The \db scaniparam "<param>^^X<out><outnum>" reads "<param>" in
+the form "\count=<num> <text>". It stores the "<text>" to the "<out>"
+control sequence and "<num>" to the "<outnum>" control sequence.
+The prefix "\count=<num>" is optional thus we need to do a little more
+work to scan the parameters. This work is realized by auxiliary macros
+\db scaniparamA, \db scaniparamB, \db scaniparamC. If the
+prefix "\count=<num>" is missing then "<outnum>" is one.
+
+\inssdef scaniparam
+
+The main work (inserting of source code) is done by the macro \db
+insinternal with parameters "{<from>}{<to>}".
+
+\ilabel [prvniloop] {preskakovani}
+\ilabel [konec:prvniloop] {ifcontinue \nb repeat}
+\ilabel [druhyloop] {pretisk}
+\ilabel [konec:druhyloop] {readnewline \nb repeat}
+\ilabel [insinternal:end] {printibelow}
+\insdef insinternal
+
+The "\isinternal" macro has two main loops. First one (from
+line~\cite[prvniloop] to~\cite[konec:prvniloop]) reads the lines from
+input source file (by the macro "\readnewline"). Each line is stored to
+"\etext" macro. This loop finds the occurrence of the "<from>"
+parameter and nothing is printed.
+
+The second loop (lines from~\cite[druhyloop] to~\cite[konec:druhyloop])
+reads lines from input source file and searches the occurrence of the
+"<to>" parameter. The lines are printed by the "\printilineA" macro.
+
+The preliminary work is done before first loop is started:
+the catcode, fonts and "\mubytein" setting.
+The \db testline macro is defined here with the "<from>" separator.
+We will test the existence of "<from>" parameter by it.
+More flexible definition of the "\testline" macro is used here because
+of special form of "<from>" parameter (see user documentation in
+the~\cite[vkladani]~section). The end of loop is controlled by
+the "\ifcontinue" condition. The \db nocontinue command runs
+the "\continuefalse" but not always. If "\count>1", it means
+"\tempnum>1", then the command only decreases the "\tempnum" by~1.
+
+\inssdef nocontinue
+
+The similar preliminary work is done before second loop. The
+"\testline" macro is defined again with the "<to>" separator.
+The searching process is similar as in the first loop.
+
+The "\ifx+\startline" is a test if user want to print the first line.
+The "\ifx+\stopline" is a test if user want to print the last line.
+
+The "\ilabellist" macro tests the occurrence of labels declared by
+the "\ilabel" command.
+
+The macro \db returninsinternal "{<text>}{<possible fi>}{<ignore>}"
+is more tricky. It is inserted when the end of the source file is
+occurred. The macro leaves its loop by the "<ignore>" parameter which
+is separated by the "\printibelow" text. Thus the part of the
+"\insinternal" macro is skipped to the line~\cite[insinternal:end].
+The inserted conditionals have to by closed properly: the "\fi"s are
+inserted here from the second parameter. The first parameter "<text>"
+includes the warning text if the warning have to be printed to the log
+file. If the "<text>" parameter is empty, no warning is printed.
+
+\insdef returninsinternal
+
+The \db readnewline is simple:
+
+\inssdef readnewline
+
+We are working with the line of source file in two versions: noexpanded
+line in the "\text" macro and expanded line in the "\etext" macro.
+The "\noswords" macro before expanding of the line guarantees that the
+"\etext" does not include control sequences created by enc\TeX
+(we need not these sequences when we are testing the occurrence of
+"<from>" or "<to>" parameter). The noexpanded "\text" version of the
+line (including the enc\TeX{}s sequences) is used when the line is
+printed.
+
+The more intelligence is implemented in the \db printilineA macro:
+the empty lines are printed with delay if the nonempty line follows.
+We need it because the last empty line have to be unprinted if
+"\skippingtrue". The \db lastline macro has three states: "\empty" (at
+the begin), "\relax" (after the line is printed), "<line number>" (if
+the previous line is empty).
+
+\insdef printilineA
+
+The \db ilabellist macro stores all declarations from
+\db ilabel "[<label>]{<text>}" commands. The empty value of
+"\ilabellist" have to be set as default.
+
+\insdef ilabellist
+
+The "\ilabel" macro first expands its parameters (by the "\act" macro)
+and calls the internal \db ilabelee macro. This macro adds the
+following text to the "\ilabellist":
+
+\def\begtthook{\langleactive\mubytein=1}
+\begtt
+\expandafter\testilabel\etext\end{<label>}{<text>}
+\endtt
+
+The \db testilabel "<line>\end{<label>}{<text>}" command
+defines the temporary "\tmp" macro with the "<text>" separator in
+order to test if the "<text>" is included in "<line>". If it is true
+then the aim of the reference is registered by the "\labeltext" command.
+
+\inext {testilabel}{\empty}{+-}
+
+\def\begtthook{}
+
+\subsec Commands {\tt\nb begtt}, {\tt\nb endtt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db begtt and "\endtt" macros are described in ``\TeX{}book
+inside out'' (the book in Czech language) in pages~27--30.
+The \db startverb macro reads the following text separated by
+the word "\endtt". This text is divided into lines by
+"^^M" character of catcode 12. The loop is started by
+the \db runttloop macro and the text is separated into lines.
+Each line is processed by the "\printvline" macro.
+The \db endttloop is performed at the end of the loop. The final work
+is done here (the "\printvbelow" macro and the end of the group) and
+the next token is scanned by \db scannexttoken macro. If this token
+isn't "\par" then the following text is prefixed by "\noindent".
+It means that "\begtt"..."\endtt" is ``inside'' the paragraph.
+
+\ifirst {docby.tex}{def\nb begtt }{\empty}{+-}
+
+The number of line globally incremented in "\begtt"..."\endtt"
+is stored in "\ttlineno" register. You can set this
+register to zero at each begin of section (for example).
+
+\subsec [ns] The Namespaces
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Each name space is connected to its own \db namespacemacro. This is a
+macro with one parameter which is declared by "\namespace{<macro body>}".
+The "\namespacemacro" is empty by default.
+
+\ifirst {docby.tex}{def\nb namespacemacro}{\empty}{+-}
+
+We need to set a label to each name space. The label is the text
+expanded by "\namespacemacro{@!}" and the mark "<nslabel>" is used for
+such label in this documentation. There is a little risk that the
+"<nslabel>" is ambiguous but I hope that this situation will not occur.
+
+Each name space have to know all local words declared in it in order
+to the occurrence of this local word can be referenced to the "\dl"
+declaration; the "\dl" declaration can be used after first occurrence
+of such word. The enc\TeX{} tables have to be initialised with all
+local words at the start of the name space. The original state of
+these tables have to be restored at the end of the name space. We
+cannot wait to the "\dl" command but we need to use the "\reffile"
+file. It means that the name spaces are inactive in the first \TeX{}'s
+run.
+
+The macro "\ns:<nslabel>" includes the list of all locally declared
+words in the namespace "<nslabel>" after the "\reffile" file is
+read. The list has the following format:
+
+{\def\begtthook{\mubytein=1\langleactive}
+\begtt
+\locword{<word1>}\locword{<word2>}\locword{<word3>}...
+\endtt
+\par}
+
+Because the enc\TeX{} table setting is global, we define all namespace
+macros globally too. This is the reason why
+"\namespace...\endnamespace" is independent of groups in \TeX.
+
+The "\namespacemacro" is defined at the start of the \db namespace
+command. The original value of the "\namespacemacro" is stored to
+the "\no:<nslabel>" macro in order we are able to restore this value
+at the end of the "\namespace...\endnamespace" environment.
+Next we define the macro \db locword so that the enc\TeX{} table is
+set after invoking of the "\ns:<nslabel>". The "\locword" macro stores
+the original meanings of redefined control sequences first.
+
+\inext {def\nb namespace }{^^B\cbrace}{++}
+
+The \db endnamespace command redefines the "\locword" macro so that
+the original meaning of redefined sequences are restored.
+If the original meaning is ``undefined'' we need to store the "\nword"
+to the enc\TeX{} table in order to there is no possibility to clear
+the item from enc\TeX{} table definitely.
+The original value of the "\namespacemacro" is restored by the
+"\no:<nslabel>" macro.
+
+\inext {def\nb endnamespace}{^^B\cbrace}{++}
+
+These macros used the \db ewrite sequence which writes the text to the
+"\reffile" with delay (in output routine) but the expansion is done
+immediately. But the "\nb" control sequence is not expanded.
+
+\inext {def\nb ewrite}{\empty}{+-}
+
+Enc\TeX{} stores the control sequence "\.<word>" instead local
+"<word>" at the start of each name space. The "\.<word>" macro expands
+to "\lword{<word>}". If the local word occurs the \db lword works as
+follows:
+
+\inext {def\nb lword}{\empty}{+-}
+
+The \db genlongword "<tmp>{<word>}" command creates long version of
+the "<word>" from short variant of it and stores this log version to
+"<tmp>" macro. The occurrence of the "<word>" is presented by the
+parameter of the "\ilink" command and by the long name (unambiguous)
+written to the "\reffile". The short variant of the word is printed.
+
+The reading of the "\reffile" is controlled by \db refns "{<nslabel>}"
+macro. This control sequence is stored to the file at the begin of the
+name space. The second control sequence \db refnsend "{<nslabel>}"
+is stored at the end. The items of the type
+"\refdg{<text>}{<long-word>}{<brackets>}{<short-word>}"
+are stored between these control sequences. We read only the items
+with the nonempty "<short-word>" parameter. These items are stored by
+"\dl" command.
+
+\inext {def\nb refns}{\empty}{+-}
+
+The "\refns" macro remembers the previous "<nslabel>" which is stored
+in \db currns. This value is stored to the "\o:<new nslabel>" and the
+"\currns" is redefined as "<new nslabel>". The implicit value of the
+"\ns:<nslabel>" is empty. The "\refdg" commands add information to the
+"\ns:<nslabel>" buffer (see lines~\cite[ns1]--\cite[ns2] in
+section~\cite[reference]). Finally, the "\refnsend" command returns
+the "\currns" macro to the original value before name space was started.
+
+
+\subsec The {\tt\nb dg} Command and Friends
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The macros \db dg, \db dl, \db dgn, \db dgh, \db dln, \db dlh
+save its name to a "\tmpA" and then they scan parameters by
+a \db dgpar. Finally they run the internal version for itself
+"\csname ii\tmpA\endcsname".
+
+\inext {def\nb dg}{\count=2 \empty}{+-}
+
+The previous macros prepare the reading of optional parameter. The
+main work is done by the \db dparam macro.
+
+\ilabel [managebrackets] {managebrackets}
+\ilabel [ii] {csname ii}
+\inext {def\nb dparam}{\empty}{+-}
+
+
+If there is a space after closed bracket "]" then the "#2" parameter
+is empty (it is separated by space). The "\dparam" macro runs again in
+such case (by \db nextdparam macro which scans the rest of parameters
+of the "\dparam"). The space is inserted inside the braces before the
+"\dparam" is run again. Now, we can separate the "#2" parameter (it
+means the "<word>") to the part before the first comma or period or
+colon or semicolon and to the second part with the rest. The first
+part is stored to "\tmpa" and the second part (including the separator)
+is stored to "\tmpb". This work is done by the macro \db varparam:
+
+\inext {def\nb varparam}{\empty}{+-}
+
+The macro "\varparam<separ>" defines the temporary macro
+"\tmp#1<separ>#2 " which is run by "\tmp<word><separ> ". If the
+"#2" is empty then the explicitly written "<separ>" was used as
+separator and the "<word>" does not include the "<separ>". The "\tmpa"
+still includes the "<word>" in such case. On the other hand, if the
+"<word>" includes "<separ>" then we need to store the rest after the
+"<separ>" to "\tmpb" including such "<separ>". The "#2" parameter includes
+"<rest><separ>". The desired work is done by the \db gobblelast macro
+with the parameter "<contents of tmpb>\end<separ><rest><separ>". The
+"#1" includes the "<rest>" and the new "\tmpb" is filled up by
+"<separ><rest><old contents of tmpb>".
+
+
+At the end of this work, we have the "<word>" in "\tmpa" but it can be
+followed by "()". This problem is solved by \db managebrackets macro
+which separates these braces if they exist. The braces are stored to
+\db printbrackets in such case.
+
+\inext {def\nb managebrackets}{\empty}{+-}
+
+The \db maybespace macro prints the space after the contents of
+"\tmpb" only if the name of the macro used by the user has only two
+letters ("\dg", "\dl") and the character "`" follows.
+
+\inext {def\nb maybespace}{\empty}{+-}
+
+The "\dparam" macro changes the original command "\dg*", "\dl*"
+respectively to internal variant "\iidg*", "\iidl*"
+respectively. This is done on the line~\cite[ii]. Parameters are
+expanded before the internal macro is started. Now, we'll concentrate to
+the internal macros.
+
+The \db iidg macro inserts the "\sword" to the enc\TeX{} table
+(this is redundant because the same work is done when "\reffile" is
+read by "\refdg" macro). Next, the "\iidg" macro creates the aim of the
+reference in the form "@<word>" and saves
+"\refdg{<text>}{<word>}{<brackets>}{}" to the "\reffile".
+The highlighted "<word>" is printed by the "\printdg" command and the
+footnote is inserted by the "\printfnote" command.
+
+\inext {def\nb iidg }{^^B\cbrace}{++}
+
+The \db iidl
+creates the aim of the reference by "\label [@<long-word>]",
+writes the information to the "\reffile" in the format
+"\refdg{<text>}{<long-word>}{<brackets>}{<short-word>}" and
+prints the "<short-word>" highlighted by "\printdg" command.
+It stores nothing to the enc\TeX{} table.
+Finally, it inserts the footnote by "\printfnote{<text>}{<long-word>}{<braces>}".
+
+\inext {def\nb iidl }{^^B\cbrace}{++}
+
+The \db iidgh a \db iidlh macros do the same work as the non-"h"
+variants. The only difference is that they do not print the word.
+The "\printdg" is redefined locally in order to do nothing.
+
+\inext {def\nb iidgh}{\empty}{+-}
+
+The \db iidgn command redefines the "\.<word>" macro which is inserted to
+the text by enc\TeX. The result of the expansion will be
+"\fword{<text>}{<word>}{<braces>}" instead of the common result
+"\sword{<word>}".
+
+\inext {def\nb iidgn}{\empty}{+-}
+
+The tasks of the \db fword macro are: do "\iidgh", print the "<word>"
+in red and return the "\.<word>" macro to the normal state.
+
+\inext {def\nb fword}{\empty}{+-}
+
+The \db iidln macro stores the current meaning of the "\.<word>" to
+the new control sequence "\;<word>" and redefines the "\.<word>". The
+result of the expansion is "\flword{<text>}{<word>}{<braces>}".
+
+\inext {def\nb iidln}{\empty}{+-}
+
+
+The tasks of the \db flword macro are: do "\iidlh", print "<word>" in
+red, return the original meaning of the "\.<word>" (from the
+"\;<word>" storage). If the "\;<word>" is undefined we need to
+inactivate the "\.<word>" macro by "\nword{<word>}" because there is
+no possibility to remove the item from enc\TeX{} table.
+
+\inext {def\nb flword}{\empty}{+-}
+
+
+\subsec [specfootnote] The Special Footnotes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The footnotes are placed beside each other. There are only words
+which are declared on this page by "\dg". Because this concept is
+visual incompatible with the ``normal'' footnotes, we deny them:
+
+\inext {let\nb footnote=}{\empty}{+-}
+
+Our special footnotes use the ``insert'' "\footins" declared in
+plain\TeX{}. The problem is to estimate the vertical space of one
+footnote when these footnotes are beside each other. The dirty trick
+from the \TeX{}book (to insert the inserts by percent of the width) is
+not used here because the pagebreaks didn't converge in the sequence
+of \TeX{} runs. The second run gets the pagenumber lists in the
+footnotes but they are not definite because of new pagebreaks. The new
+pagebreaks influence new lists of pagenumbers in footnotes and the new
+lists influences the new pagebreaks because the widths of
+the footnotes are different from previous \TeX{} run. The oscillation
+is very common in such case.
+
+I decided to work only with the average space of the footnotes common
+for each of them. This coefficient is the number of the lines of the
+footnotes divided by the number of the footnotes. Each footnote
+inserts to the vertical list the space of the line hight (10pt)
+multiplied by this coefficient. I need to set the "\count\footins"
+only.
+
+In order to guarantee the convergence of this problem, we need to fix
+the coefficient (mentioned above) after second \TeX{} run. If this
+coefficient is changed in each \TeX{} run then the unconvergence is
+very possible. The value of this coefficient after first \TeX{} run is
+unusable because the lists of pagenumbers in footnotes are empty at
+this state. The implicit coefficient is set to "\count\footins=200"
+for first and second \TeX{} run (we suppose five footnotes on the one
+line).
+
+The average coefficient (instead of the width of each footnote) can
+produce a little overfull or underfull pages. We need to have the
+resource for this situation in "\skip\footins" and we need to
+use the vertical glue above and below the footnote rule.
+
+\inext {skip\nb footins}{\empty}{+-}
+
+The \db totalfoocount accumulates the number of the footnotes and the
+\db totalfoodim accumulates the total height of all lines with footnotes.
+
+\inext {newcount\nb totalfoocount}{\empty}{+-}
+
+The \db specfootnote "{<text>}" macro inserts to the "\footins" one
+"\hbox{<text>}" and advances "\totalfoocount" by one.
+
+\inext {def\nb specfootnote}{\empty}{+-}
+
+I decided to keep the output routine of plain\TeX{} unchanged. It
+means that the part of this routine which solves the
+footnote printing was needed to change. The "\footnoterule" macro of
+plain\TeX{} was redefined. The "\unvbox\footins" separator removes the
+same text from the original output routine.
+
+\inext {def\nb footnoterule}{\empty}{+-}
+
+This macro decomposes the vertical list of inserts "\footins" and
+composes them again beside each other in horizontal box~4. The
+raggedright parameters are set and the box 4 is unboxed in horizontal
+mode ended by "\endgraf". This means that the footnotes are divided to
+lines. The "\totalfoodim" is advanced here too.
+
+The "\bye" macro (see the line~\cite[write]) writes the
+"\totalfoocount" and "\totalfoodim" to the "\reffile". The actual
+average coefficient is added here too. This information is written
+only if the "\indexbuffer" is not empty, it means that (at least)
+the second \TeX{} run is in progress.
+
+This information is read by the
+\db refcoef "{<coef>}{<number>}{<height>}" macro
+at the start of the next \TeX{} run. It sets the
+average coefficient "\count\footins". The change from implicit value
+200 to the new value is done only once. Next \TeX{} runs keep this
+value unchanged. The auxiliary macro \db gobblerest removes the digits
+after decimal point including the text~"pt".
+
+\inext {def\nb refcoef}{\empty}{+-}
+
+We need to suppress the expansion of some macros in output routine
+which are presented in "\write" parameter. These macros are set to
+"\relax" meaning in output routine. In order to the headline printing
+is done correctly we need to expand "\makehedaline" before the setting
+of these macros to relax and we need to store the result of
+"\makeheadline" in a box.
+
+\inext {\nb output=}{\empty}{+-}
+
+
+\subsec [secsec] Section, Subsection, Part
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \db secnum, \db subsecnum, \db sectitle and \db ifsavetoc
+are declared here. "\savetoc" is true by default.
+
+\ifirst {docby.tex}{newcount\nb secnum}{\empty}{+-}
+
+There is an optional parameter "[<label>]" followed by optional (ignored) space
+when \db sec and \db subsec macros are used. The last token of "<title>" can be
+space too and we need to ignore it. This is reason what the macros are somewhat
+complicated. The name of the macro is stored to \db tmpA and the parameter
+scanning process is started by "\secparam".
+
+\inext {def\nb sec}{\empty}{+-}
+
+The \db secparam reads the optional "[<label>]". If it exists then it
+is stored to \db seclabel macro else "\seclabel" is empty.
+The \db secparamA macro ignores optional space after the "]".
+The \db secparamB "<title>\par" macro reads "<title>". The unwanted
+space at the end of the "<title>" is removed by \db nolastspace macro which
+cooperates with the \db setparamC macro. This macro stores the "<title>"
+(without the last space) into "\sectitle" and executes "\iisec" or "\iisubsec".
+
+\inext {def\nb secparam}{\empty}{+-}
+
+The \db iisec macro sets the "\secnum" and "\subsecnum" values and defines
+\db makelinks where the hyperlinks are prepared (used by "\printsec").
+The "\printsec" macro prints the title of the section.
+The information of the type
+"\reftocline"~"{<secnum>}{<title>}{<pagenumber>}"
+is stored to "\reffile".
+The command "\mark{<secnum> <title>}" is executed and the vertical space
+is appended by "\printsecbelow".
+
+\inext {def\nb iisec}{^^B\cbrace}{++}
+
+The \db iisubsec macro is similar as "\iisec".
+
+\inext {def\nb iisubsec}{^^B\cbrace}{++}
+
+The "\part" macro uses the conversion of the \db partnum register to letters.
+It is implemented as \db thepart macro.
+
+\inext {newcount\nb partnum}{\empty}{+-}
+
+The \db part macro is implemented by \db iipart and it is similar to "\iisec".
+
+\inext {def\nb part}{\empty}{+-}
+
+\subsec [reference] Links and References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The hyperlinks are solved by \db savelink "[<label>]" and
+\db iilink "[<label>]{<text>}" macros. The "\savelink" stores the
+invisible destination into document raised to the height of
+\db linkskip above baselineskip. The "\ilink" (i.e.\ internal link)
+is documented in the \cite[krizodkaz] section. The "\savepglink"
+saves the numerical destination (page number) which will be used by
+"\pglink" if a page is referred.
+
+\ifirst {docby.tex}{Odkazy, ref}{\empty}{--}
+
+These macros have special implementation for DVI and PDF modes.
+The blue color for links are declared in the "\ilink" macro.
+You can change this feature by changing of this macro.
+
+The internal labels for PDF links cannot include backslashes.
+That is the reason why the "\nb" (normal backslash) macro is redefined here.
+We expect the unexpanded parameter of "\savelink" and "\ilink" macros.
+
+The \db savepglink macro (see above) is used by "\headline", this places
+the destination at every page. The \db pglink "<number>" macro reads the
+"<number>" (it is numerical register or number itself) and creates the link
+to the page "<number>". The "<number>" is printed in blue color and it is
+clickable. The numerical register is scanned by "\afterassignment" followed by
+\db dopglink.
+
+The line "\reflabel"~"{<label>}{<text>}{<page>}"
+is stored to "\jobname.ref" file by "\labeltext" macro.
+This information is read by \db reflabel macro and stored in
+"^^X<label>" and "^^Y<label>" control sequences. These sequences are used by
+\db numref a \db pgref.
+Note that if the "<text>" is empty (this is a case of documented words for example)
+then the control sequence "^^X<label>" is not defined. This saves the
+\TeX{} memory for names of control sequences.
+
+\inext {reflabel}{\empty}{+-}
+
+The \db labeltext "[<label>]{<text>}" stores the desired information
+as pronounced above. First, it creates PDF link by "\savelink" macro
+and second, it stores data to ".ref" file. The
+\db writelabel "[<label>]{<text>}" us used for this purpose which expands to
+the asynchronous "\write" primitive (in order to save right value of the page number).
+We need to expand the "<text>" parameter because "\the\secnum" (or similar data)
+is here. This is a reason why the parameters are switched (the
+"<label>" parameter cannot be expanded) and the auxiliary macro
+\db writelabelinternal "{<text>}{<label>}" is used. The first part,
+i.e.\ "\writelabel{<text>}" is expanded by "\edef".
+
+\inext {labeltext}{\empty}{+-}
+
+The \db label is defined simply as ``empty'' "\labeltext".
+
+\inext {label}{\empty}{+-}
+
+The \db cite "[<label>]" macro prints the hyperlink. The warning on the
+terminal is printed when "<label>" is misspelled. The macro is
+documented in \cite[krizodkaz] section.
+
+\inext {cite}{\empty}{+-}
+
+The links are solved in \db api "{<word>}" too.
+This macro uses "\label[+<word>]" and saves the "<word>" prefixed by
+"\refapiword" to "\reffile".
+
+\inext {def\nb api}{\empty}{+-}
+
+The \db apitext is printed alongside the "<word>" in the table of contents and
+the index.
+
+When the \db bye is executed, the information for "\refcoef" (line~\cite[write])
+is stored in "\reffile" and the test of "\reffile" data consistence is processed.
+
+\ilabel [texttoc] {text\nb tocbuffer}
+\ilabel [vypust] {indexbuffer}
+\ilabel [write] {write\nb reffile}
+\inext {def\nb bye}{^^B\cbrace}{++}
+
+The test of "\reffile" data consistence is done by following steps.
+First the "\reffile" is closed, then the control sequences used in "\reffile"
+are redefined by "\setrefchecking" macro, then the "\reffile" is read again.
+Now the macros from "\reffile" do the test itself. If inconsistency occurs then
+the "\continuefalse" is executed. We can ask to the result of the test by
+"\ifcontinue" conditional. The elaborate check of all automatically generated
+hyperlinks is done after the "\reffile" is read. This check is realised by
+"\indexbuffer". Why? See the \db setrefchecking.
+
+\ilabel[jerelax] {=\nb relax}
+\inext {def\nb setrefchecking}{\empty}{+-}
+
+The "\refcoef" macro is redefined here: it does nothing.
+Next, the new version of the "\reflabel" checks if the reference is in the same
+page as in the last run and if it has the same text.
+The new macro "\refuseword" works as its original, only the "-<word>"
+control sequences are used instead "w:<word>". These control sequence are
+used foe another purpose than during normal processing. First, these sequences
+take the "\relax" meaning at line~\cite[jerelax].
+Second, the "\," is redefined in order to do the test of equivalence of the
+"w:<word>" and "-<word>" sequences. The test is executed by
+"\indexbuffer\relax" at line~\cite[vypust]. If an inconsistency occurs then
+the message is printed and macro processing is skipped to \db ignoretorelax.
+next, the "\refdg"macro is redefined: it writes data only to "\tocbuffer".
+The other macros from "\reffile" write data to "\tocbuffer" too.
+The old contents of "\tocbuffer" is stored to the "\text" and the new one is
+created during "\reffile" reading. We check if the table of contents is changed
+at line~\cite[texttoc].
+
+
+\subsec Generating of Table of Contents, Index and PDF Outlines
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The table of contents (TOC) and index can be printed at various places in the document
+(at the begin, end, in the middle\dots). We need to print them correctly
+independent of their position. The "\reffile" can be read only at begin of
+the document. After that, it is cleared and reopen to write new information.
+So, we need to store all desired information for TOC or index printing
+during reading of the "\reffile". We are using the "\tocbuffer" and "\indexbuffer"
+macros for this. First, these ``buffers'' must be set as empty.
+The \db addtext "<text>\to<buffer>" is used for adding new "<text>" to the
+"<buffer>".
+
+\inext {def\nb tocbuffer}{\empty}{+-}
+
+The following commands are used in the \db reffile.
+
+{\def\begtthook{\langleactive\catcode`\!=0\mubytein=1}
+\begtt
+\reftocline{<number>}{<title>}{<page>} % about section, subsection for TOC
+\refdg{<before>}{<word>}{<after>}{<k-word>} % about usage of \dg, \dl
+\refapiword{<word>} % about usage of \api{<word>}
+\refuseword{<word>}{<page>} % about the existence of <word>
+\reflabel{<label>}{<text>}{<page>} % see section !cite[reference], links, references
+\refcoef{<coefficient>}{<number>}{<height>} % see section !cite[specfootnote], spec. notes
+\refns{<nslabel>} % see section !cite[ns], name spaces
+\refnsend{<nslabel>} % see section !cite[ns], name spaces
+\endtt
+\par}
+
+The \db reftocline "{<number>}{<title>}{<pagenumber>}" macro is used for TOC.
+
+\inext {def\nb reftocline}{\empty}{+-}
+
+The information about all sections and subsections are stored in \db tocbuffer gradually.
+This buffer includes control sequences \db dotocline "{<number>}{<title>}{<page>}".
+The only difference between section and subsection is stored in the "<number>" parameter:
+subsection has the "<number>" with a period. This difference is recognised by
+the \db istocsec macro.
+
+\inext {def\nb dotocline}{\empty}{+-}
+
+The "\tocbuffer" includes TOC information about sections and subsections.
+Moreover, it includes the data about documented words stored by
+\db refdg a \db refapiword.
+
+\ilabel [right] {right}
+\ilabel [ns1] {\nb dl}
+\ilabel [ns2] {locword}
+\inext {def\nb refdg}{\empty}{+-}
+
+The "\refdg" macro has "{<before>}{<word>}{<after>}{<k-word>}" parameters where
+"<before>" is a text before word, "<word>" is a long variant of the word and "<after>"
+can include optional braces "()". If the long word differ from short word (when "\dl" is used)
+then "<k-word>" includes the short variant of the word else "<k-word>" is empty.
+The "\refdg" macro stores its information to "\tocbuffer" and "\indexbuffer" in parallel.
+If "<k-word>" is empty then "\sword" is stored to enc\TeX{} table.
+If "<k-word>" is nonempty then namespaces are taken into account.
+The TOC is created by the \db dotoc macro.
+
+\inext {def\nb dotoc}{\empty}{+-}
+
+The {\bf Index} is created by \db indexbuffer which includes the list of
+all declared words in the document. Each word is sored in the form of
+control sequence (this takes minimum \TeX{} memory) and they are separated
+by comma (before sorting) or "\," (after sorting):
+
+{\def\begtthook{\langleactive \sfcode`\:=1000 }
+\begtt
+before sorting: \-<word1> , \-<word2> , \-<word3> , \-<word4> , ...
+after sorting: \, \-<wordA> \, \-<wordB> \, \-<wordC> \, \-<wordD> ...
+\endtt
+\par}
+
+\noindent The "\-<word>" means one control sequence here.
+Each control sequence is a macro with the body "<before>\right<after>",
+see the \cite[right] line. The index is printed by the \db doindex macro.
+
+\ilabel [calculatedimone] {calculatedimone}
+\inext {def\nb doindex }{^^B\cbrace}{++}
+
+The "\calculatedimone" command and the test of "\dimen1" value prepares the
+two columns typesetting, see the section~\cite[dvasloupce].
+The "\doindex" begins the "\sec" with the "\titindex" title.
+The index printing is started when "\indexbuffer" is nonempty.
+The "\indexbuffer" is sorted by "\sortindex" (see section~\cite[abeceda]).
+Then the two columns printing is opened by "\begmulti 2" and the "\,"
+separator takes the meaning "\doindexentry".
+This macro prints each index entry when "\indexbuffer" expands.
+
+\inext {def\nb doindexentry}{\empty}{+-}
+
+The "\doindexentry" macro removes the "\-" characters from the control
+sequence "\-<word>" by the \db ignoretwo, so the "\tmp" includes "<word>" only.
+If the "<word>" begins by backslash, it is replaced by "\nb" using
+\db remakebackslash macro. The reason: we needn't the backslash in the
+PDF internal labels, see \cite[reference] for more information.
+The index entry is finally printed by the "\printindexentry" macro.
+
+When the {\bf PDF outlines} are created, we need to know the number
+of children of each node in the outlines tree. This number is calculated
+when "\reffile" is read by \db addbookmark "<node>" macro
+(see "\reftocline" and "\refdg" macros). The parameter "<node>"
+can be the number of section or the "<section>.<subsection>" pair.
+The "<node>" for which we are calculating children is saved in
+\db currb macro. The \db currsecb includes the parent of the "\currb",
+if it exists. The "\bk:<node>" is advanced by one using the
+"\addbookmark" macro.
+
+\inext {def\nb addbookmark}{\empty}{+-}
+
+The \db bookmarks macro opens the group, redefines the "\dotocline"
+and "\ptocentry" (i.e.\ macros from "\tocbuffer"), inserts the first
+PDF outline with the name of the document and executes the "\tocbuffer".
+
+\inext {def\nb bookmarks}{^^B\cbrace}{++}
+
+The \db setoutline "[<label>]{<text>}{<prefix>}" creates the PDF outline
+"<prefix><text>" and the link with "<label>" is activated.
+The "\tempnum" register includes the number of children of this PDF outline.
+
+\inext {def\nb setoutline}{\empty}{+-}
+
+The special ``conversion'' macro \db cnvbookmark is used here.
+It is nonactive by default. User can set (for example)
+"\let\cnvbookmark=\lowercase" for \v c $\to$ c, \v z $\to$ z etc.\
+conversions. The "\lccode" setting can be done by "\bookmarkshook".
+
+The text is converted by \db nobraces macro for removing "{}". The macro
+\db nobrA is used here too. When we have (for example)
+"{\tt text} in \TeX{}" then the "text in TeX" is the result of
+such conversion.
+
+
+\subsec [abeceda] Sorting by Alphabetical Order
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This work is done by "\sortindex" macro. First version implemented
+the bubble sort algorithm but it was slow for large indexes. For example
+sorting of the index of this document has taken circa 2 seconds of computer time.
+My son Mirek rewrote the sorting by mergesort algorithm in the second version
+of docByTeX. The previous 52 thousand sorting queries (for an index of the size
+comparable with the index used here) was reduced to 1600 queries, so
+30 times better.
+
+First, we declare the \db ifAleB which
+answers true if $A<B$ (see also "\isAleB" macro below).
+The auxiliary macros \db nullbuf, \db return and \db fif
+are used here. The "\return" macro is used for escaping from various loops
+to the "\relax" mark.
+The "\fi" are balanced by the "\fif" macro in nested "\if...\fi"
+constructions. This save the number of "\expandafter" commands.
+
+\inext {newif\nb ifAleB}{\empty}{+-}
+
+The \db sortindex macro puts to the input queue the content of the
+whole "\indexbuffer" followed by "\end,\end", the new "\indexbuffer"
+is set as empty and the "\mergesort" macro is executed.
+
+\inext {def\nb sortindex}{^^B\cbrace}{++}
+
+The \db mergesort takes two groups of items repeatedly, each group is sorted
+already. The groups are separated by commas in the input queue. These two groups
+are merged to one sorted group. This process is repeated until "\end" occurs.
+One merging of two groups looks like that: suppose for example two
+groups "eimn,bdkz," which is merged to one group "bdeikmnz,".
+Letters in that example are the whole sorted entries.
+
+At the begin of the process, all groups have only one item. After first pass
+over input queue, the result is the groups with two items. They are saved
+back in the "\indexbuffer". Next pass puts the "\indexbuffer" to the input
+queue and creates groups with four items. Next, there are 8~items per group etc.
+This process is repeated until only one sorted group is created
+(line~\cite[konecsortu]) and only "\end" is in the second group.
+The "\gobblerest" macro removes the second "\end" from input queue.
+
+\noactive{dvojice}
+\ilabel [merge:porovnani] {isAleB}
+\ilabel [merge:trojka] {mergesort p1+}
+\ilabel [merge:p1] {ifx,}
+\ilabel [merge:p2] {fif\nb mergesort\cbrace}
+\ilabel [konecsortu] {empty\nb indexbuffer}
+\ilabel [napercarky] {napercarky}
+\inext {def\nb mergesort }{^^B\cbrace}{++}
+
+{\def\quotehook{\catcode`\<12}
+The core of the "\mergesort" is on the
+lines~\cite[merge:porovnani]--\cite[merge:trojka].
+The "\mergesort" macro saves first item of the first group to the "#1" parameter,
+next items of the first group to the "#2" parameter and the first item of the
+second group to the "#3" parameter. If "#1<#3" then we save "#1" to the output
+"\indexbuffer", the "#1" is removed from input queue and "\mergesort"
+is executed again. The cases with empty parameters are solved in the lines
+\cite[merge:p1]--\cite[merge:p2]: we need to save the rest of the nonempty group
+to the output "\indexbuffer" and go to the next pair of groups.
+If the terminal string "\end,\end" is scanned then the next run
+of "\mergesort" is executed after "\indexbuffer" is put to the input queue and set
+it to empty value.
+\par}
+
+The sorting of the two items are realized by \db isAleB "<itemA><itemB>"
+macro. The items are in the form "\-<wordA>" and "\-<wordB>".
+The macro converts these parameters to the strings by "\string" primitive
+and expands to "\testAleB"~"<wordA>\relax<wordB>\relax".
+The "\lowercase" primitive is executed here because we needn't distinguish
+between uppercase/lowercase letters.
+
+\ilabel [teckanula] {0\nb relax}
+%\ilabel [teckajedna] {2.1}
+\inext {def\nb isAleB }{^^B\cbrace}{++}
+
+The \db testAleB "<wordA>\relax<wordB>\relax" macro tests if
+"<wordA>" precedes "<wordB>". It he first letters are the same, the macro
+is called recursively. The recursion will be truly finished because
+different tails are appended to the compared words at line~\cite[teckanula].
+
+\inext {def\nb testAleB}{^^B\cbrace}{++}
+
+The macro \db napercarky inserts "\," separators between items in the sorted
+"\indexbuffer".
+
+\inext {def\nb napercarky}{\empty}{+-}
+
+
+\subsec Merging of the List of the Page Numbers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Each occurrence of the "<word>" is stored to the "\reffile" as
+\db refuseword "{<word>}{<page>}". This macro is processed at
+the begin of the document when "\reffile" is read.
+
+\inext {def\nb refuseword}{^^B\cbrace}{++}
+
+So, the list of the pages where the "<word>" occurs is stored in
+the "\w:<word>" macro. Pages are separated by commas.
+The list looks like:
+
+\begtt
+2,5,5,10,11,12,12,13,13,13,27
+\endtt
+
+We need to convert this list to the format "2, 5, 10--13, 27",
+i.e.\ we need to remove double occurrences and to replace
+consecutive lists of pages by intervals in the form "<from>--<to>".
+This work is done by \db listofpages "{<word>}" macro which
+puts the list of pages to the input queue terminated by ",0,"
+and executes the "\transf" macro.
+
+\inext {def\nb listofpages}{^^B\cbrace}{++}
+
+The "\transf" macro removes the page numbers which are equal to
+\db dgnum or \db apinum. We want to avoid the double occurrence of the main page
+and underlined page in the list. These pages are printed separately.
+The declaration of the registers follows:
+
+\inext {newcount\nb apinum}{\empty}{+-}
+
+The "\tempnum" is current page number processed in the list and
+"\ifdash" returns true if the interval is opened by "<from>--".
+The "\iffirst" returns true if the first page of the list is processed.
+
+The \db transf "<list of pages>,0," executes repeatedly the \db cykltransf macro.
+
+\inext {def\nb transf}{def\nb carka}{++}
+
+The "\cykltransf" macro is a little finite state automaton.
+It needs no more comments.
+
+
+\subsec [dvasloupce] Multicolumn typesetting
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The macros for multicolumn printing are borrowed from
+``\TeX{}book inside out'', pages 244--246.
+
+\ilabel [dimen1] {dimen1<2}
+\inext {newdimen\nb colsep}{TBN}{++}
+
+One problem is solved in addition. We check the empty space on the
+current page before the section title is printed. This work is done
+by \db calculatedimone
+(executed by "\doindex" macro at the line \cite[calculatedimone]).
+
+\inext {def\nb calculatedimone}{\empty}{+-}
+
+\subsec The final settings, catcodes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The catcodes are set at the end of the {\tt docby.tex} file.
+We add the active category for the {\tt\char`\"} character and we set
+the "_" as a normal character because this character is mostly used in the
+identifiers and the catcode 8 of this character causes many problems.
+
+\inext {catcode`\nb_}{\empty}{+-}
+
+The "\everymath" and "\everydisplay" returns the category of "_" to
+the plain\TeX{} meaning (as math index prefix).
+
+The active {\tt\char`\"} character separates the ``inline verbatim'' environment.
+
+\inext {catcode`\nb}{\empty}{+-}
+
+The \db langleactive sets the active catcode for the {\tt<} char.
+So, you can write {\tt<text>} in ``inline verbatim'' and the
+"<text>" is printed.
+
+\inext {def\nb langleactive}{\empty}{+-}
+
+\doindex
+
+\bye
+
+
diff --git a/macros/generic/docbytex/docby-e.pdf b/macros/generic/docbytex/docby-e.pdf
new file mode 100644
index 0000000000..16d8b1f681
--- /dev/null
+++ b/macros/generic/docbytex/docby-e.pdf
Binary files differ
diff --git a/macros/generic/docbytex/docby.d b/macros/generic/docbytex/docby.d
new file mode 100644
index 0000000000..4404875f3a
--- /dev/null
+++ b/macros/generic/docbytex/docby.d
@@ -0,0 +1,2635 @@
+
+%% DocBy.\TeX{} -- nástroj na dokumentování zdrojových kódù
+
+\def\projectversion{\dbtversion}
+\def\headtitle{DocBy.\TeX}
+
+\showboxbreadth=1500 \showboxdepth=2
+
+\chyph
+\input docby.tex
+
+\title DocBy.\TeX{} -- nástroj na dokumentování zdrojových kódù
+
+\author Petr Ol¹ák
+
+\centerline{\ulink[http://www.olsak.net/docbytex.html]%
+ {www.olsak.net/docbytex.html}}
+
+\def\db{\dg\nb}
+\def\du#1{\api{\nb#1}}
+\let\quotehook=\langleactive
+\def\insdef#1 {\ifirst{docby.tex}{def\nb#1 }{^^B\cbrace}{++}}
+\def\inssdef#1 {\ifirst{docby.tex}{def\nb#1}{\empty}{+-}}
+\bgroup
+ \catcode`\[=1 \catcode`]=2 \catcode`\{=12 \catcode`\}=12
+ \gdef\obrace[{] \gdef\cbrace[}]
+\egroup
+\def\indexhook{Kontrolní sekvence oznaèené ¹ipkou ($\succ$) jsou
+ u¾ivatelskými pøíkazy. Ostatní kontrolní sekvence jsou
+ v~DocBy.\TeX{}u interní. Tuènì je oznaèena strana, kde je slovo
+ dokumentováno, pak následuje seznam stran s výskyty slova.
+ U¾ivatelské pøíkazy mají v seznamu stránek podtr¾ené èíslo,
+ co¾ je stránka, kde je pøíkaz vylo¾en na u¾ivatelské úrovni.
+ \medskip}
+\def\nn#1 {\noactive{\nb#1}} \nn insert \nn undefined
+
+\def\cnvbookmark#1{\lowercase{\lowercase{#1}}}
+\def\bookmarkshook{\lo ìe \lo ¹s \lo èc \lo ør \lo ¾z \lo ýy
+ \lo áa \lo íi \lo ée \lo úu \lo ùu \lo óo \lo òn }
+\def\lo #1#2{\lccode`#1=`#2}
+
+\dotoc \bookmarks
+
+\sec Úvod
+%%%%%%%%%
+
+DocBy.\TeX{} umo¾òuje jednodu¹e dokumentovat pomocí \TeX{}u
+zdrojové kódy programu napsaném v~jazyce~C pøípadnì v jakémkoli
+jiném jazyce.
+
+Na rozdíl od Knuthova literárního programování tento nástroj nepou¾ívá
+¾ádné preprocesory nebo filtry pro oddìlení informace pro èlovìka a
+pro poèítaè. Vycházím z toho, ¾e programátor je zvyklý psát tyto
+informace oddìlenì a chce mít vìci pod vlastní kontrolou. Rovnì¾ mnozí
+programátoøi uvítají, ¾e mohou psát dokumentaci dodateènì, a pøitom
+skoro nezasahovat do u¾ napsaného (a mo¾ná odladìného) zdrojového
+kódu. Doba, kdy Knuth navrhoval literární programování, pokroèila a
+tvùrce dokumentace dnes mù¾e mít zároveò ve více oknech otevøeno více
+textù. Nìkteré jsou urèeny pro èlovìka a jiné pro poèítaè. Nevnímám
+tedy tak hlasitou potøebu tyto informace sluèovat do jednoho
+souboru, jako tomu bylo kdysi.
+
+V první èásti (sekce~\cite[uziv]) dokumentu seznamujeme ètenáøe
+s pou¾itím \docbytex{}u na u¾ivatelské úrovni. V dal¹í sekci jsou
+dokumentovaná výchozí makra \docbytex{}u, u nich¾ se pøedpokládá, ¾e
+je bude chtít nároèný u¾ivatel mìnit, aby pøizpùsobil chování \docbytex{}u
+obrazu svému. Dále následuje sekce~\cite[design] s dokumentací
+maker, která rovnì¾ budou mìnìna, pokud u¾ivatel bude chtít jiný
+vzhled dokumentu. V~poslední sekci~\cite[implementace]
+je dokumentován kompletní \docbytex{} na implementaèní úrovni.
+Tak¾e se tam mù¾ete doèíst, jak makra fungují.
+
+Tento dokument je zpracován \docbytex{}em, tak¾e slou¾í mimo jiné jako
+ukázka, co je mo¾né tímto nástrojem vytvoøit.
+
+\sec [uziv] Pro u¾ivatele
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsec [cleneni] Èlenìní souborù
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\docbytex{} je implicitnì navr¾en pro dokumentování zdrojových kódù
+v~jazyce~C. Proto i následující ukázka dokumentuje hypotetický program
+napsaný v tomto jazyce. Chcete-li dokumentovat jiný jazyk, mù¾ete
+implicitní chování \docbytex{}u pozmìnit. Tomu je vìnována
+sekce~\cite[zmeny].
+
+Pøedpokládá se, ¾e zdrojové kódy programu jsou èlenìny na moduly. Ka¾dý modul
+je my¹lenkovì samostatná zále¾itost. Alespoò pro programátora. Ka¾dý modul
+má své jméno (napøíklad "cosi") a je napsán v souborech "cosi.h" a "cosi.c",
+pøípadnì v dal¹ích. Tyto soubory se kompilují, aby vznikl "cosi.o" a
+v~závìru kompilace se linkují v¹echny kompilované moduly do výsledného
+programu.
+
+Chceme-li takové zdrojové kódy dokumentovat, pøipí¹eme ke ka¾dému
+modulu soubor s pøíponou ".d", napøíklad "cosi.d", který obsahuje
+dokumentaci k danému modulu. Dále zalo¾íme tøeba soubor
+"program.tex", ze kterého postupnì naèítáme dokumentace jednotlivých
+modulù pomocí pøíkazu "\module"\du{module}. V \uv{hlavním souboru} "program.tex"
+mù¾eme té¾ pou¾ít pøíkazy "\title" pro vyznaèení názvu programu,
+"\author" se jménem autora programu a tøeba "\dotoc" pro vytvoøení
+obsahu a "\doindex" pro vygenerování rejstøíku. Samozøejmì zde mù¾eme
+napsat tøeba úvodní poznámky ke zdrojovým kódùm programu a pou¾ít plno
+dal¹ích vymezovacích pøíkazù (viz dále). Obsah souboru "program.tex"
+mù¾e vypadat tøeba takto:
+
+\begtt
+\input docby.tex
+\title Program lup -- dokumentace ke zdrojovým textùm
+
+\author Progr a Mátor
+
+\dotoc % tady bude obsah
+
+\sec Èlenìní zdrojových textù
+
+Zdrojové texty programu "lup" jsou rozdìleny do tøí modulù.
+V "base.c" jsou definovány pomocné funkce a v "base.h" jsou jejich
+prototypy. Podobnì ve "win.c" jsou funkce pro okenní zále¾itosti a
+"win.h" obsahuje jejich prototypy. Koneènì "main.c" obsahuje hlavní
+funkci programu.
+\module base
+\module win
+\module main
+\doindex % v tomto místì bude sestaven rejstøík
+\bye
+\endtt
+
+V tomto pøíkladì jsme se rozhodli ètenáøe dokumentace seznamovat s
+programem \uv{zdola nahoru}, tedy od elementárních funkcí a¾ k hotovému
+programu. Nìkdo mo¾ná preferuje cestu \uv{shora dolù} a mù¾e mít v
+dokumentaci napsáno:
+
+\begtt
+\module main
+\module win
+\module base
+\doindex
+\bye
+\endtt
+
+Oba pøístupy jsou mo¾né, proto¾e dokumentace je automaticky provázána
+hyperlinky. Ètenáø se kdykoli mù¾e podívat na dokumentaci té funkce,
+její¾ pou¾ití zrovna ète, a obrácenì mù¾e projít výskyty ve¹kerého
+pou¾ití funkce, kdy¾ ète její dokumentaci.
+
+\subsec [priklad] Pøíklad dokumentace modulu
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Soubor s dokumentací jednotlivého modulu budu pro tento
+pøípad znaèit "cosi.d". Ten je naèten pøíkazem "\module"~"cosi ".
+V souboru "cosi.d" je mo¾no se literárnì vyøádit a kdykoli vlo¾it èást
+existujícího zdrojového kódu programu se stejným jménem modulu.
+To provedeme pøíkazem "\ins"~"c keyword "\du{ins}, který vlo¾í do dokumentace
+èást zdrojového kódu ze souboru "cosi.c", která je vymezena pomocí slova
+"keyword". Místo písmene "c" je mo¾no pou¾ít "h" nebo jakoukoli jinou
+pøíponu souboru, ze kterého chceme vlo¾it èást do dokumentace. K
+vymezení èástí, které se mají vlo¾it, je nutno mít ve zdrojovém
+souboru text "//: keyword". V¹e vysvìtlí následující pøíklad.
+
+Pøedpokládejme, ¾e v souboru "cosi.d" máme napsánu tuto dokumentaci:
+
+\begtt
+Struktura \dg dvojice se pou¾ívá jako návratová hodnota funkce
+"uzasna_funkce" a sdru¾uje dvì hodnoty typu "float".
+\ins c dvojice
+
+Funkce \dg [struct dvojice] uzasna_funkce() si vezme jeden parametr "p"
+a vrátí ve struktuøe "dvojice" dvojnásobek a trojnásobek tohoto parametru.
+\ins c uzasna_funkce
+\endtt
+
+V tomto pøípadì je nutné, aby v souboru "cosi.c" existoval vymezující
+text "//: "{\tt dvojice} a text "//: "{\tt uzasna\_funkce}.
+Tyto texty vymezují úseky,
+které se mají do dokumentace vlo¾it. Soubor "cosi.c" mù¾e vypadat
+tøeba takto:
+
+\begtt
+#include <stdio.h>
+
+//: dvojice
+
+struct dvojice {
+ float x, y;
+};
+
+//: uzasna_funkce
+
+struct dvojice uzasna_funkce (float p)
+{
+ struct dvojice navrat;
+ navrat.x = 2*p; // tady nasobim p dvema
+ navrat.y = 3*p; // tady nasobim p tremi
+ return navrat;
+}
+\endtt
+
+Výsledek po zpracování èásti dokumentace z "cosi.d" pak vypadá takto:
+
+\bigskip
+
+Struktura \dg [struct] dvojice se pou¾ívá jako návratová hodnota funkce
+"uzasna_funkce" a sdru¾uje dvì hodnoty typu "float".
+\def\modulename{cosi}
+\ins c dvojice
+
+Funkce \dg [struct dvojice] uzasna_funkce() si vezme jeden parametr "p" a vrátí
+ve struktuøe "dvojice" dvojnásobek a trojnásobek tohoto parametru.
+\ins c uzasna_funkce
+
+V ukázkovém zdrojovém kódu je první vlo¾ený úsek vymezen na
+zaèátku textem "//: "{\tt dvojice} a na konci textem "//:". Druhý úsek je
+vymezen textem "//: "{\tt uzasna\_funkce} a konèí na konci souboru.
+
+Na poøadí úsekù, které zahrnujeme ze zdrojového textu do dokumentace,
+nezále¾í. Klidnì jsme mohli dokumentaci zaèít od povídání o ú¾asné
+funkci (vèetnì vlo¾ení jejího kódu) a potom je¹tì dopsat, co to je ta
+struktura "dvojice" a následnì vlo¾it deklaraci této struktury.
+
+Kdybychom pøed øádek "#include "{\tt<stdio.h>} vlo¾ili tøeba text
+"//: start", bylo by mo¾né pøíkazem "\ins"~"c start " vlo¾it
+do dokumentace zaèátek souboru "cosi.c", který v ukázce vlo¾en není.
+
+V¹imnìme si, ¾e \TeX{} zapsal èísla øádkù pøesnì podle toho, jak
+jsou ve zdrojovém kódu. Tj. poèítal i pøeskakovaný øádek
+"#include "{\tt<stdio.h>} i pøeskakované prázdné a vymezující øádky.
+
+Vymezení "//: keyword" se mù¾e v øádku nacházet kdekoli, není nutné,
+aby se vyskytovalo na zaèátku øádku. Øádek s~tímto vymezením není do
+dokumentace zahrnut a pokud následuje za øádkem s~vymezením prázdný
+øádek, ani ten není do dokumentace zahrnut.
+
+Stejnì tak koncové vymezení "//:" se mù¾e v øádku nacházet kdekoli a
+celý øádek s tímto vymezením není do dokumentace zahrnut.
+Pokud pøed tímto koncovým øádkem je prázdný øádek, ani ten
+není do dokumentace zahrnut.
+
+Koneènì za pov¹imnutí stojí pou¾ití pøíkazu "\dg" v dokumentaci. Za
+ním následuje slovo (separované mezerou), které dokumentujeme. Toto
+slovo se v dokumentaci výraznì oznaèí (v PDF verzi èervenou barvou
+navíc v barevném rámeèku) a jakýkoli jiný výskyt takového slova ve
+zdrojovém textu nebo mezi uvozovkami {\tt\char`\"...\char`\"} bude
+automaticky oznaèen modrou barvou a bude klikací. Kliknutí na modrý
+výskyt slova kdekoli v dokumentaci vrátí ètenáøe na èervený výskyt,
+kde je slovo dokumentováno.
+
+Dokumentované slovo mù¾e mít pøed sebou v hranatých závorkách text,
+který napø. oznaèuje typ funkce a za sebou mù¾e mít kulaté závorky
+"()". Tím mù¾eme dát najevo, ¾e dokumentujeme funkci. V místì
+dokumentace se neobjeví ani tento nepovinný text ani závorky, ale v
+poznámce pod èarou a v~rejstøíku se tyto informace vytisknou.
+
+\uv{Palcové uvozovky} {\tt\char`\"...\char`\"} vymezují kusy kódu
+uvnitø odstavce. Text takto uvozený je psán strojopisem a pokud se
+v nìm vyskutují deklarovaná slova, tato slova automaticky modrají
+a stávají se klikatelnými odkazy.
+Text mezi tìmito uvozovkami je navíc pøepisován ve \uv{verbatim}
+módu \TeX{}u, tj. ¾ádné znaky nemají speciální vlastnosti (s výjimkou
+koncové palcové uvozovky).
+
+Na stránce, kde je slovo dokumentováno (pomocí "\dg"), je v poznánkách
+pod èarou slovo znovu zmínìno a vedle této zmínky je seznam v¹ech
+stránek, na kterých se kdekoli v textu vyskytuje pou¾ití tohoto slova.
+Dále jsou v¹echna dokumentovaná slova zahrnuta do závìreèného
+abecedního rejstøíku, který odkazuje jednak na stránku, kde je
+slovo dokumentováno, i na stránky se v¹emi výskyty slova.
+
+
+\subsec Jaký \TeX{} pro \docbytex{}?
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Aby fungovaly v¹echny vý¹e uvedené vlastnosti, je potøeba pou¾ít
+pdf\TeX{} roz¹íøený o enc\TeX{}. Dále je dle "\language" detekován
+jazyk, který se pou¾ije v automaticky generovaných slovech.
+\docbytex{} se ohlásí na terminálu napøíklad tìmito slovy:
+
+\def\begtthook{\catcode`\!=0}
+\begtt
+This is DocBy.TeX, version !dbtversion, modes: enc+PDF+ENG
+\endtt
+
+\def\begtthook{}
+
+\docbytex{} rozli¹uje tøi módy, ka¾dý mù¾e nabývat dvou stavù:
+mód "enc/NOenc", dále mód "PDF/DVI" a koneènì mód jazyka "ENG/CS".
+
+Mód "enc"\api{enc} se zapne, je-li detekována pøítomnost enc\TeX{}u.
+Pokud enc\TeX{} není dostupný, vypí¹e o~tom \docbytex{} varování a
+pøejde do "NOenc"\api{NOenc} módu. V tomto módu nefunguje automatická detekce
+slov, která jsou dokumentována, tak¾e tato slova nemodrají a nestávají
+se klikacími odkazy. V rejstøíku pak také není seznam stránek se v¹emi
+výskyty slova, ale jen místo, kde je slovo dokumentováno.
+V~tomto pøípadì tedy je deaktivována nejdùle¾itìj¹í vlastnost
+\docbytex{}u, tak¾e je ¾ádoucí vynalo¾it jisté úsilí a enc\TeX{}
+zprovoznit. V souèasných distribucích \TeX{}u bývá enc\TeX{}
+v pdf\TeX{}u zahrnut a je aktivován napøíklad ve formátu "pdfcsplain".
+
+Mód "PDF"\api{PDF} je detekován, pokud je pou¾it pdf\TeX{}, jinak \docbytex{}
+pøejde do módu "DVI"\api{DVI} a napí¹e o tom varování na terminál. V módu "DVI"
+nefungují barvy ani klikací odkazy. Ov¹em seznam stránek s~pou¾itím
+dokumentovaného slova se generuje, je-li pøítomen enc\TeX.
+
+\docbytex{} detekuje mód jazyka "ENG" (angliètina), je-li
+"\language=0". To je implicitní chování.
+Pokud napøíklad v "csplainu" nastavíte "\chyph" pøed
+"\input docby.tex", \docbytex{}
+to vyhodnotí jako dokument v èe¹tinì ("CS").
+Jiné jazyky nejsou zatím podporovány.
+V módu "ENG" jsou automaticky generované názvy
+\uv{Contents}, \uv{Index} anglické,
+v módu "CS" jsou tyto názvy \uv{Obsah}, \uv{Rejstøík} èeské.
+V~sekci~\cite[nazvy] je øeèeno, jak jsou tato slova generována
+a co tedy udìlat, kdy¾ chcete mít dokument v jiném jazyce.
+
+\subsec Vyhledávání slov enc\TeX{}em
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Slova, která se stávají klikatelnými odkazy vyhledává enc\TeX{}. Ten
+má zabudován tzv. \uv{hladový algoritmus}. To znamená, ¾e jsou-li
+dokumentována napø. slova "abc" a "abcde", pak text "abcdefgh" zmodrá
+a¾ po písmeno "e" a odkazuje na "abcde", zatímco "abcdx" zmodrá a¾ po
+písmeno "c" a odkazuje na "abc". To bývá obvykle ¾ádoucí.
+%
+V enc\TeX{}u není mo¾no programovat vyhledávání podle regulárních
+výrazù, tak¾e není mo¾né jednodu¹e øíci, aby enc\TeX{} hledal jen
+slova, která jsou ohranièena mezerou, teèkou, závorkou, støedníkem,
+atd. Místo toho enc\TeX{} tupì vyhledá slovo tøeba uvnitø jiného slova.
+
+Mù¾e se tedy stát, ¾e máme dokumentováno krat¹í slovo, které se
+objevuje jako èást jiných nedokumentovaných slov. Napøíklad je
+dokumentována struktura "turn", ale ve výpisech programu nechceme, aby
+v ka¾dém výskytu klíèového slova "return" zmodrala jeho èást. V
+takovém pøípadì je potøeba explicitnì definovat "return" jako
+\uv{normální} nedokumentované slovo. K tomu slou¾í pøíkaz
+"\noactive{<slovo>}"\du{noactive}, tedy napøíklad
+"\noactive{return}". Tento pøíkaz globálnì
+deklaruje "<slovo>" jako vyhledávané slovo (pro enc\TeX), ale
+specifikuje jej jako neaktivní.
+
+Mù¾e se také stát, ¾e máme dokumentováno slovo, které se objevuje ve
+zdrojových textech i v jiném (nedokumentovaném) významu. Pøitom dokumentované
+slovo poznáme podle toho, jak vypadá text pøed slovem a za slovem.
+Pak lze pou¾ít deklaraci "\onlyactive{<pøed>}{<slovo>}{<za>}"\du{onlyactive},
+která sama o sobì nedìlá nic. Pokud ale vyznaèíme "<slovo>" pomocí
+"\dg" (nebo podobného makra na dokumentování slov, viz
+sekce~\cite[ddsl]), pak bude "<slovo>" automaticky modrat jen tehdy,
+pøedchází-li mu text "<pøed>" a následuje text "<za>". Texty "<pøed>"
+nebo "<za>" mohou být prázdné (ne oba souèasnì) a k jednomu "<slovu>"
+mù¾eme napsat více rùzných deklarací "\onlyactive".
+
+\docbytex{} aktivuje enc\TeX{} (pomocí "\mubytein=1") jen uvnitø
+skupiny, kdy¾ zpracovává text mezi palcovými uvozovkami
+({\tt\char`\"...\char`\"}) nebo pøi naèítání zdrojového textu
+programu. Pøedpokládá se, ¾e nepou¾íváte enc\TeX{} k~dekódování UTF-8
+kódu. Pokud pou¾íváte, zkuste si zapnout "\mubytein=1" pro celý dokument,
+ale na {\it vlastní riziko}. V takovém pøípadì vám budou modrat slova
+nebo jejich èásti i v~bì¾ném textu a pokud je dokumentované slovo
+podmno¾inou nìjaké \TeX{}ové sekvence, kterou pou¾íváte, pak se
+doèkáte nepøíjemných chyb.
+
+\subsec Generování rejstøíku, obsahu, poznámek pod èarou a zálo¾ek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Generování rejstøíku i obsahu probíhá v \docbytex{}u zcela
+automaticky. Pro vytvoøení rejstøíku není nutné pou¾ívat externí
+program (\docbytex{} si slova abecednì zatøídí sám).
+Staèí tedy vlo¾it na po¾adovaná místa pøíkazy "\dotoc"\du{dotoc} a
+"\doindex"\du{doindex}. Upozoròuji, ¾e rejstøík ani obsah nejsou správnì
+vygenerovány po prvním prùchodu \TeX{}u. Je potøeba \TeX{}ovat
+dvakrát. Po druhém prùchodu dojde zøejmì k pøestránkování textu
+(proto¾e je napøíklad vlo¾en obsah). Je tedy nutné \TeX{}ovat je¹tì
+jednou. Tøi prùchody \TeX{}em jsou (snad) dostaèující.
+Slovo \uv{snad} vychází z problému s poznámkami pod èarou podrobnì
+popsaném v sekci~\cite[specfootnote].
+Poznámky pod èarou se toti¾ prùbì¾nì v prùchodech mìní a ovlivòují
+zpìtnì vertikální sazbu. \docbytex{} proto provádí na konci zpracování
+v pøíkaze "\bye"\du{bye} kontrolu, zda nedo¹lo ke zmìnám v referencích.
+Je proto u¾iteèné pou¾ívat "\bye" místo "\end".
+V závìru zpracování pak \docbytex{} vypí¹e zprávu
+"OK, all references are consistent" nebo vypí¹e
+varování, ¾e nìkteré reference jsou nekonzistentní a
+¾e je tedy potøeba \TeX{}ovat znovu.
+
+Dal¹í test konzistence mù¾eme provést napøíklad následujícím skriptem:
+
+\begtt
+#!/bin/bash
+cp dokument.ref dokument.r0
+pdfcsplain dokument.d
+diff dokument.r0 dokument.ref
+\endtt
+
+\docbytex{} se sna¾í (z dùvodu záruky konvergence dokumentu) fixovat
+zpracování poznámek pod èarou po druhém prùchodu. Pokud poté mìníte
+rozsáhle dokument, tak¾e seznamy stránek vedle poznámek pod èarou jsou
+výraznì jiné délky, \docbytex{} to nepozná a mù¾e docházet
+k pøeplnìní nebo nenaplnìní stránek. V takovém pøípadì je rozumné
+vymazat soubor {\tt.ref} a znovu spustit tøi prùchody.
+
+Pro vytvoøení zálo¾ek se strukturovaným obsahem v PDF výstupu slou¾í
+pøíkaz "\bookmarks"\du{bookmarks}. Je zcela jedno, v které èásti
+dokumentu je tento pøíkaz napsaný, nebo» sestaví stukturovaný seznam
+zálo¾ek prolinkovaný s dokumentem na základì údajù ze souboru~{\tt.ref}.
+Mù¾e se stát, ¾e nìkteré texty v zálo¾kách nejsou optimálnì èitelné. O
+mo¾nostech, jak toto øe¹it, pojednává sekce~\cite[hooky].
+
+\subsec [vkladani] Vkládání zdrojových textù podrobnìji
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Kromì jednoduchého pøíkazu "\ins" na vkládání zdrojových textù jsou
+k dispozici pøíkazy "\ifirst"\du{ifirst} a "\inext"\du{inext},
+které nabízejí u¾ivateli
+daleko více mo¾ností.
+
+Pøíkaz "\ifirst{<soubor>}{<odkud>}{<kam>}{<jak>}" vlo¾í do
+dokumentu èást souboru "<soubor>" (plný název souboru vèetnì pøípony)
+od prvního øádku, na kterém se vyskytuje text "<odkud>" po
+øádek, na kterém se vyskytuje text "<kam>", nebo (pokud text "<kam>"
+nelze nalézt) po konec souboru. Neexistuje-li ani øádek s textem
+"<odkud>", \docbytex{} vypí¹e pouze varování na terminál.
+
+Pøíkaz "\ifirst" si své parametry nejprve
+expanduje a pak teprve pou¾ije.
+Aktivní vlnka v parametru expanduje na mezeru.
+
+Parametr "<jak>" udává, zda se bude tisknout výchozí øádek (s~textem
+"<odkud>") a koncový øádek (s~textem "<kam>"). Tento parametr obsahuje
+právì dva znaky (plus nebo mínus) s následujícím významem:
+
+\begtt
+jak: -- netiskne se výchozí ani koncový øádek
+jak: +- tiskne se výchozí øádek a netiskne se koncový øádek
+jak: -+ netiskne se výchozí øádek, tiskne se koncový øádek
+jak: ++ tisknou se oba øádky
+\endtt
+
+Je-li parametr "<odkud>" prázdný (zapí¹eme pomocí "{}"), tiskne se od
+zaèátku souboru. Je-li parametr "<kam>" prázdný, tiskne se jediný øádek.
+Je-li parametr "<kam>=\end",\du{end} tiskne se a¾ do konce souboru.
+Koncový øádek v tomto pøípadì neexistuje.
+
+Má-li parametr "<odkud>" (nebo "<kam>") hodnotu "\empty"\du{empty}
+(zapí¹eme pomocí "{\empty}"), tiskne se od (nebo do) prvního prázdného øádku.
+Parametr "<jak>" ovlivní jeho tisk.
+
+Parametry "<odkud>" nebo "<kam>" mohou mít na svém zaèátku znak "^^B"
+(tím dáváme najevo, ¾e text musí na øádku zaèínat) nebo na svém konci
+znak "^^E" (tím dáváme najevo, ¾e text musí na øádku konèit). Tak¾e
+tøeba "^^Btext^^E" znamená, ¾e se vyhledává øádek, ve kterém je pouze
+"text" a nic jiného.
+
+V parametrech "<odkud>" a "<kam>" se nesmìjí vyskytovat speciální
+\TeX{}ové znaky (speciální kategorie). Pro pou¾ití znakù
+"\", "{", "}", "%" a {\tt\char`\"} v tìchto parametrech jsou
+v~\docbytex{}u pøipraveny zástupné kontrolní
+sekvence "\nb"\du{nb}, "\obrace"\du{obrace}, "\cbrace"\du{cbrace},
+"\percent"\du{percent} a "\inchquote"\du{inchquote}.
+Sekvence pro dal¹í speciální
+znaky "#", "$", atd. si musíte vytvoøit napø. pomocí:
+
+\begtt
+{\catcode`\#=12 \gdef\vezeni{#}}
+\endtt
+
+Jsou-li parametry "<odkud>" a "<kam>" stejné, nebo oba texty jsou na
+stejném øádku, pak se pøi "<jak>=++" nebo "<jak>=+-" vytiskne
+tento jeden øádek. Pøi "<jak>=-+" nebo "<jak>=--" se tiskne a¾
+do konce souboru nebo do dal¹ího výskytu textu "<kam>".
+
+Pøíkaz "\ifirst" si zapamatuje název èteného souboru a pozici
+posledního pøeèteného øádku v~daném souboru. Pak je mo¾né pou¾ít
+pøíkaz "\inext{<odkud>}{<kam>}{<jak>}", který zaèíná hledat výchozí øádek
+s textem "<odkud>" od místa v souboru, kde naposledy skonèilo ètení
+pøíkazem "\ifirst" nebo "\inext". Parametry "<odkud>", "<kam>" a "<jak>"
+mají stejný význam, jako u pøíkazu "\ifirst".
+
+V registru "\lineno"\du{lineno} je po ukonèení pøíkazu "\ifirst" nebo "\inext"
+èíslo øádku, které bylo naposledy pøeèteno (tøeba¾e tento øádek nebyl
+vyti¹tìn). Pokud bylo dosa¾eno konce souboru, obsahuje "\lineno"
+poèet øádkù souboru. Pomocí "\ifeof\infile" je mo¾né se zeptat, zda
+bylo dosa¾eno konce souboru.
+
+Pøíklady
+
+\begtt
+\ifirst {soubor.txt}{textik}{textik}{++} % vytiskne první výskyt øádku
+ % obsahující slovo textik
+\inext {textik}{textik}{++} % vytiskne následující výskyt
+ % øádku obsahující slovo textík
+\ifirst {soubor.c}{//: odkud}{//:}{--} % analogie pøíkazu \ins
+\ifirst {soubor.c}{funkce(}{)}{++} % tisk prototypu funkce
+\ifirst {soubor.c}{funkce(}{^^B\cbrace}{++} % tisk celého kódu funkce
+\ifirst {soubor.txt}{}{\end}{++} % tisk celého souboru
+\ifirst {soubor.txt}{}{\empty}{+-} % tisk po prázdný øádek
+\endtt
+
+Je-li první øádek, který se má tisknout, prázdný, netiskne se. Je-li
+poslední øádek, který se má tisknout, prázdný, také se netiskne. Toto
+je implicitní chování. Pokud napí¹ete "\skippingfalse",\du{skippingfalse}
+uvedená inteligence je zru¹ena a pøepisují se i prázdné øádky vpøedu a vzadu.
+Pøíkazem "\skippingtrue"\du{skippingtrue} se vrátíte k pùvodnímu nastavení.
+
+Parametrùm "<odkud>" a "<kam>" mù¾e pøedcházet text
+"\count=<èíslo> ".\du{count} Hodnota "<èíslo>" oznaèuje,
+kolikátý výskyt textu "<odkud>" nebo "<kam>" se má pou¾ít.
+Napøíklad "{\count=3 <odkud>}" znamená, ¾e se má
+pøi vyhledávání "<odkud>" pøeskoèit dva jeho výskyty a zaèít
+pøepisovat soubor a¾ od výskytu tøetího. Podobnì "{\count=5 <kam>}"
+znaèí, ¾e se pøi pøepisování souboru ignorují ètyøi výskyty "<kam>" a
+pøepisování se zastaví a¾ u výskytu pátého.
+
+Implicitnì, není-li "\count=<èíslo> " uvedeno, pøedpokládá se
+"\count=1 ".
+
+Pokud je text "<odkud>" prázdný, pak
+"\count" oznaèuje èíslo øádku, na kterém se má zahájit výpis. Je-li
+prázdný parametr "<kam>", pak "\count" oznaèuje poèet pøepisovaných
+øádkù. Toto platí pro "<jak>=++" a pro "\skippingfalse".
+Pøi jiných hodnotách "<jak>" se
+uvedená èísla logicky posunou o jednièku. Pøi prázdném "<odkud>" nebo
+"<kam>" není mezera za "\count=<èíslo>" povinná. Pøíklady:
+
+\begtt
+\skippingfalse
+\ifirst {soubor.txt}{\count=20}{\count=10}{++} % tisk øádkù 20 a¾ 29
+\ifirst {soubor.txt}{}{\count=2 \empty}{+-} % tisk po druhý prázdný øádek
+\ifirst {soubor.txt}{\count=50}{\end}{++} % tisk od 50. øádku do konce
+\ifirst {soubor.tex}{\count=5 \nb section}{\count=2 \nb section}{+-}
+ % tisk páté sekce z TeXového souboru
+\endtt
+
+
+\subsec [lineodkazy] Odkazy na èísla øádkù
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pomocí "\cite[<lejblík>]" je mo¾né odkazovat na èíslo øádku ve výpisu
+zdrojového kódu. Tento pøíkaz se promìní na skuteèné èíslo øádku.
+Pøed pou¾itím pøíkazu "\ifirst" nebo "\inext" je nutné "<lejblík>"
+deklarovat pøíkazem "\ilabel [<lejblík>]{<text>}".\du{ilabel}
+Tìchto pøíkazù mù¾e být pøed pou¾itím "\ifirst" resp. "\inext" více.
+Na poøadí pøíkazù "\ilabel" pøed jedním "\ifirst" nebo "\inext" nezále¾í.
+
+Existují-li deklarované "<lejblík>"y a "<text>"y, pak pøíkaz
+"\ifirst" nebo "\inext" si v¹ímá výskytu "<text>"u ve vkládaných
+øádcích. Pokud takový "<text>" najde, pøiøadí èíslo øádku
+odpovídajícímu "<lejblík>"u, tak¾e pøíkaz "\cite" bude fungovat, jak má.
+
+Parametr "<lejblík>" musí být jednoznaèný v celém dokumentu. Pøíkaz
+"\cite" funguje dopøednì i zpìtnì.
+
+Pøíkazy "\ilabel" mají lokální pùsobnost a spolupracují jen
+s nejbli¾¹ím následujícím "\ifirst" a "\inext".
+Tak¾e pøed pou¾itím dal¹ího "\ifirst" resp. "\inext"
+je potøeba deklarovat dal¹í vyhledávané texty
+pomocí "\ilabel" znovu.
+
+\docbytex{} nevypí¹e ¾ádné varování, pokud nìjaký "<text>"
+deklarovaný v "\ilabel" nenajde. Ov¹em pøi pou¾ití "\cite" se objeví
+varování, ¾e není známý "<lejblík>" a toto varování nezmizí ani pøi
+opakovaném \TeX{}ování.
+
+Pokud se "<text>" vyskytuje ve více øádcích ukázky, je odkazován
+øádek s prvním výskytem.
+
+V následující ukázce je èten ji¾ známý soubor "cosi.c"
+(viz kapitolu~\cite[priklad]).
+
+\begtt
+Na øádku~\cite[ufunkce] je deklarovaná ú¾asná funkce.
+
+\ilabel [ufunkce] {funkce (float}
+\ilabel [navratx] {navrat.x}
+\ifirst {cosi.c}{}{}{++}
+
+Zvlá¹tì upozoròuji na geniální my¹lenku na øádku~\cite[navratx],
+kde je vstupní parametr vynásoben dvìma.
+\endtt
+
+\subsec Verbatim ukázky pomocí {\tt\nb begtt}/{\tt\nb endtt} a
+ palcových uvozovek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Verbatim ukázky mù¾ete do dokumentace vkládat pomocí "\begtt"\du{begtt} a
+"\endtt"\du{endtt}. Ty jsou (na rozdíl od vkládaných souborù) napsány pøímo ve
+zdrojovém textu \TeX{}u.
+V¹echny øádky za "\begtt" jsou vlo¾eny beze zmìn a¾ po
+ukonèovací "\endtt". Øádky nejsou èíslovány a texty v nich nemodrají a
+nestávají se klikatelnými odkazy.
+
+Následující sekce~\cite[hooky] a~\cite[begtt] obsahují informace,
+jak je mo¾né toto implicitní chování zmìnit.
+
+Verbatim ukázky uvnitø odstavce lze vymezit palcovými uvozovkami
+{\tt\char`\"...\char`\"}. V tomto prostøedí probíhá tisk strojopisem a
+je aktivní enc\TeX{}, tak¾e dokumentovaná slova se stávají
+automaticky odkazy na místo, kde je "\dg". Doporuèuje se toto
+prostøedí pou¾ívat na výpisy ve¹kerých èástí kódù dokumentovaného
+programu, které jsou vlo¾eny uvnitø textu v odstavci (analogie
+matematického prostøedí "$...$").
+
+\subsec [ddsl] Deklarace dokumentovaného slova
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Na deklaraci slova, které dokumentujeme, lze pou¾ít pøíkaz "\dg",\du{dg}
+"\dgn",\du{dgn} "\dgh",\du{dgh} "\dl",\du{dl} "\dln"\du{dln}
+nebo "\dlh"\du{dlh}. Významy jednotlivých
+pøíkazù vysvìtlíme pozdìji. Nejprve se vìnujme syntaxi parametrù.
+V¹echny pøíkazy mají stejnou syntaxi, tak¾e nebude vadit, kdy¾ bude
+vylo¾ena jen v souvislosti s pøíkazem "\dg". Syntaxe je ponìkud
+zvlá¹tní. Úèelem toti¾ bylo minimalizovat práci písaøe, tak¾e jsem se
+vyhnul kuèeravým závorkám, parametr separuji podle mezery nebo nìèeho
+jiného, atd.
+
+Existují tyto mo¾nosti syntaxe parametrù:
+
+\def\begtthook{\langleactive \mubytein=1}
+\begtt
+\dg <slovo> % <slovo> separované mezerou
+\dg [<text>] <slovo> % navíc nepovinný "pøední" <text>
+\dg [<text>]<slovo> % <slovo> mù¾e na [<text>] navazovat bez mezery
+\dg <slovo>() % <slovo> s dvojicí "()" separované mezerou
+\dg [<text>]<slovo>() % kombinace pøedchozího
+\dg <slovo>, % <slovo> separované èárkou
+\dg [<text>] <slovo>, % kombinace pøedchozího
+\dg <slovo>(), % <slovo> s dvojicí "()" separované èárkou
+\dg [<text>]<slovo>(), % kombinace pøedchozího
+\dg <slovo>. % slovo separované teèkou
+atd...
+\endtt
+\def\begtthook{}
+
+Obecnì: za pøíkazem "\dg" mù¾e následovat nepovinná "[". Pokud
+následuje, pak se pøeète "<text>" a¾ po ukonèovací "]". Parametr
+"<text>" mù¾e obsahovat mezery. Za ukonèovací "]" mù¾e a nemusí být
+mezera. Pokud tam je, pak ji makro pøesune pøed koncovou závorku "]",
+tak¾e "\dg"~"[aha] slovo" je toté¾ jako "\dg"~"[aha ]slovo".
+Dále následuje ètení parametru "<slovo>".
+Tento parametr nesmí obsahovat mezeru, èárku, teèku, støedník
+a dvojteèku. Ètení parametru je ukonèeno, jakmile se objeví mezera
+nebo èárka nebo teèka nebo støedník nebo dvojteèka. Uvedená
+interpunkce není souèástí parametru "<slovo>" a po zpracování parametru
+se vrátí do vstupní fronty, tak¾e se bì¾nì vytiskne.
+Nakonec se zjistí, zda pøeètený parametr a¾ po separátor není ve tvaru
+"<slovo>()". Pokud je, pak symbol "()" se nepova¾uje za souèást
+parametru "<slovo>", ale mluvíme o "<slovu>" následovaném dvojicí~"()".
+
+Pozor, za separátorem typu èárka, teèka, støedník a dvojteèka se musí
+vyskytnout mezera. Ne nutnì ihned, ale døíve, ne¾ se objeví úsek
+textu, který má být pøeèten s jinými kategoriemi
+(napø.~{\tt\char`\"...\char`\"}). Není tedy mo¾né psát
+"\dg" {\tt text,\char`\"...\char`\"}.
+Pokud za separátorem mezera následuje znak {\tt\char`\`} (obrácený
+apostrof), mezera ani tento znak se netiskne. To je mo¾né vyu¾ít
+napøíklad pro vlo¾ení nezlomitelné mezery nebo pro jiné úèely:
+"\dg"~"<slovo> `~<pøilepený text>"
+nebo "\dg"~"<slovo> `"{\tt\char`\"...\char`\"}.
+
+Pøíkazy "\dgh", "\dgn", "\dln", "\dlh" separující mezeru
+netisknou nikdy, proto¾e tyto pøíkazy vìt¹inou netisknou nic (viz ní¾e).
+
+Parametr "<slovo>" je dokumentované slovo. Pokud se takové "<slovo>"
+vyskytne nìkde jinde v dokumentu mezi {\tt\char`\"...\char`\"} nebo ve
+vlo¾eném zdrojovém kódu, automaticky zmodrá a stává se klikatelným
+odkazem na místo, kde je pou¾ito "\dg". V místì pou¾ití "\dg" je slovo
+zvýraznìno èervenou barvou. Je vyti¹tìno samotné bez parametru
+"<text>" a bez pøípadných závorek "()". V poznámce pod èarou se vypí¹e
+"<slovo>" (èervenì). Tam je i pøípadný "<text>" (pøed slovem) a za ním
+je pøípadná dvojice "()". Vedle tohoto výpisu je
+seznam stránek s výskyty "<slova>". V rejstøíku se objeví nìco podobného,
+jako v poznámce pod èarou. Rejstøík je øazen abecednì podle "<slovo>",
+nikoli podle "<text>".
+
+Pøíkaz "\dg" deklaruje "<slovo>" globálnì. Bude na nìj odkazováno v celém
+dokumentu.
+
+Pøíkaz "\dgh" pracuje jako "\dg", ale slovo nebude v místì "\dgh"
+vypsáno ("\dg" hidden). Bude tam jen cíl odkazù a "<slovo>"
+se objeví v poznámce a v rejstøíku.
+
+Pøíkaz "\dgn" zpùsobí, ¾e první následující výskyt
+"<slova>" ve vypisovaném zdrojovém kódu
+se stane cílem v¹ech ostatních odkazù, zèervená (tedy
+nezmodrá) a v místì tohoto výskytu se objeví pøíslu¹ná poznámka pod
+èarou. Pøíkaz "\dgn" èteme jako "\dg" next, nebo "\dg" následující.
+
+Pøíkaz "\dl" deklaruje "<slovo>" lokálnì. Bude na nìj odkazováno svým
+krátkým jménem "<slovo>" jen v místì stejného jmenného prostoru,
+typicky pøi dokumentaci jednoho modulu. Ka¾dý modul zahájený pøíkazem
+"\module" zavádí jmenný prostor tvaru "<slovo>./<název>", kde
+"<název>" je jméno modulu. Slovo deklarované pomocí "\dl" ¾ije ve dvou
+variantách. V krátké variantì jako "<slovo>" jen v rozsahu jednoho
+jmenného prostoru a v dlouhé variantì "<slovo>./<název>" ¾ije globálnì
+v celém dokumentu. Pøípadný výskyt dlouhého názvu odká¾e na místo
+deklarace napøíè celým dokumentem.
+
+Podrobnìji o jmenných prostorech a mo¾nosti jejich zmìny najdete
+v~sekci~\cite[jmenneprostory].
+
+Ka¾dé "<slovo>" musí být v dokumentu deklarováno nejvý¹e jednou, jinak
+\docbytex{} ohlásí chybu. V pøípadì "\dl" musí existovat
+jednoznaèný dlouhý název.
+
+Pøíkaz "\dlh" je skrytý "\dl". Pøíkaz "\dln" znamená "\dl" next.
+Analogicky, jako pøíkazy "\dgh" a "\dgn".
+
+Pokud nìkoho irituje vysoká inteligence tìchto pøíkazù pøi ètení
+parametrù, mù¾e pou¾ít interní verzi pøíkazù s povinnými tøemi
+parametry obalenými do kuèeravých závorek: "\iidg",\du{iidg}
+"\iidgh",\du{iidgh} "\iidgn",\du{iidgn}
+"\iidl",\du{iidl} "\iidlh",\du{iidlh} "\iidln".\du{iidln}
+Parametry vypadají
+takto: "\iidg{<pøed>}{<slovo>}{<za>}". Pravda, tyto pøíkazy umo¾òují
+více ne¾ jejich krátké verze: umo¾òují do parametru "<slovo>"
+propa¹ovat èárku, mezeru, støedník atd. a do parametru "<za>" napsat
+cokoli, nejen kulaté závorky.
+
+
+\subsec [jmenneprostory] Jmenné prostory
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Jmenný prostor je pravidlo, podle kterého se krátký název
+dokumentovaného "<slova>" transformuje pøi pou¾ití "\dl"
+na název dlouhý. Je mo¾né jej nastavit nebo zmìnit pomocí pøíkazu
+"\namespace"\du{namespace}, který se pou¾ije takto:
+"\namespace" "{<text1>#1<text2>}...\endnamespace".\du{endnamespace}
+Pokud je uvnitø tohoto prostøedí pou¾it pøíkaz
+"\dl<slovo>", je slovu pøidìlen krátký název "<slovo>" a dlouhý název
+"<text1><slovo><text2>".
+Uvnitø takto deklarovaného prostøedí se v¹echny výskyty
+krátkého názvu "<slovo>" transformují na dlouhý název a jsou
+prolinkovány s odpovídajícím místem "\dl". Jmenný prostor je lokální
+uvnitø svého prostøedí, tak¾e vnì prostøedí se "<slovo>"
+chová, jakoby nebyl ¾ádný pøíkaz "\dl" pou¾it.
+Napøíklad uvnitø prostøedí "\namespace"~"{#1//uff}...\endnamespace" je ke
+ka¾dému slovu deklarovanému pomocí "\dl<slovo>" pøidìlen dlouhý název
+"<slovo>//uff" a výskyty "<slovo>" odkazují na místo "\dl<slovo>".
+
+Vnì v¹ech prostøedí "\namespace...\endnamespace" není jmenný prostor definován,
+tak¾e tam není mo¾né pou¾ít pøíkaz "\dl".
+Ov¹em pøíkaz "\module"~"<název> " nastaví jmenný
+prostor na "{#1./<název>}", tak¾e uvnitø dokumentace modulu
+je mo¾né pou¾ívat pøíkaz~"\dl".
+
+V rejstøíku a v poznámce pod èarou se tisknou dlouhé názvy. Rejstøík
+abecednì øadí podle dlouhých~názvù. V obsahu se tisknou názvy krátké.
+
+Pøíklad práce se jmennými prostory:
+
+\begtt
+\namespace {ju::#1} %% nastavuji namespace ju
+Tady deklaruji slovo \dl aha.
+Tady slovo "aha" automaticky odkazuje na místo deklarace.
+Slovo "ju::aha" také odkazuje na místo deklarace.
+\endnamespace
+\namespace {hele::#1} %% nastavuji namespace hele
+Tady znovu deklaruji slovo \dl aha.
+Zde slovo "aha" odkazuje na lokální deklaraci uvnitø "hele"
+\endnamespace %% ru¹ím namespace
+Zde slovo "aha" neodkazuje nikam, ale slova "ju::aha"
+a "hele::aha" stále odkazují na místa, kde byla deklarována.
+\endtt
+
+Prostøedí "\namespace...\endnamespace" je mo¾né vnoøovat, ov¹em vnoøená
+prostøedí musejí mít jiný jmenný prostor ne¾ prostøedí vnìj¹í. Prostøedí
+jmenných prostorù pracují globálnì nezávisle na "\bgroup", "\egroup".
+Pøíkaz "\endnamespace" pou¾itý vnì v¹ech prostøedí
+"\namespace...\endnamespace" neudìlá nic. Prostøedí není nutné pøed
+pøíkazem "\bye" ukonèovat.
+
+
+\subsec Místo pro dokumentaci aplikaèního rozhraní
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Mù¾e se stát, ¾e pí¹eme dokumentaci jednak pro u¾ivatele, které zajímá
+zpùsob pou¾ití dokumentovaných funkcí a co zhruba dìlají (tzv.~API),
+ale nezajímá je, jak je funkce naprogramovaná. Druhak chceme mít
+dokumentován i zpùsob, jak funkce funguje uvnitø. V takovém pøípadì
+musí dokumentované "<slovo>" odkazovat na dvì místa v dokumentu.
+
+Místo, kde je podrobnì "<slovo>" popsáno, je vymezeno pøíkazem "\dg"
+nebo podobným. Místo, kde slovo dokumentujeme pro u¾ivatele (je-li
+toto místo odli¹né od prvního místa), lze vyznaèit pøíkazem
+"\api{<slovo>}"\du{api}. V místì pou¾ití "\api{<slovo>}" se nestane
+nic, jen se tam umístí neviditelný cíl odkazù. V obsahu se pak
+"<slovo>" objeví s odkazem na toto místo. V rejstøíku se v seznamu
+stránek objeví jedna stránka podtr¾ená: to je stránka, kde byl pou¾it
+pøíkaz~"\api{<slovo>}". Ov¹em, aby se v rejstøíku "<slovo>" vùbec
+objevilo, musí se nìkde v dokumentu vyskytovat i jeho plná deklarace
+pomocí "\dg" nebo podobných pøíkazù. Na stránce, kde je pou¾ito "\dg",
+je pod èarou vedle slova seznam stránek a rovnì¾ je tam jedna stránka
+podtr¾ená. Kdy¾ ètete implementaèní popis pro "<slovo>", snadno se
+tedy dostanete na stránku, kde je API k tomuto "<slovu>". V~rejstøíku
+a obsahu jsou také slova, která byla deklarovaná pomocí "\api", zleva
+vyznaèena textem "\apitext"\du{apitext}. Ten je implicitnì nastaven na
+¹ipku. Mù¾ete se podívat do rejstøíku a do obsahu tohoto dokumentu. V
+tomto místì bylo pou¾ito "\api{\nb api}", zatímco skuteèná definice
+pøíkazu "\api" je v sekci~\cite[reference].
+
+Je-li pou¾ito "\api{<slovo>}", pak je mo¾né se na místo odkazovat také
+pomocí "\cite[+<slovo>]". Tato konstrukce se promìní v èíslo stránky,
+kde je dokumentováno API daného slova. Napøíklad v tomto dokumentu
+se "\cite[+\nb api]" promìní na:~\cite[+\nb api].
+
+Pokud toto slovo má také svùj API cíl (vytvoøený pomocí
+"\api"), pak se èervený text (ti¹tìný v místì "\dg")
+stává aktivním odkazem na API cíl. Tam
+typicky ètenáø najde výskyt slova, který je zase klikatelným odkazem
+na "\dg" cíl. Tak¾e tyto dva cíle jsou prolinkovány køí¾em.
+
+\subsec [kapsec] Sekce, sekcièky, èást, titul
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Sekce se uvozují pøíkazem "\sec"~"<název sekce>\par"\du{sec}. Ka¾dá
+sekce mù¾e mít nìkolik podsekcí (sekcièek), které lze vyznaèit
+pøíkazem "\subsec"~"<název podsekce>\par"\du{subsec}.
+Symbol "\par" zde znamená,
+¾e název sekce èi podsekce je oddìlen od dal¹ího textu prázdným
+øádkem (viz ukázku v~\cite[cleneni]).
+
+Nìkolik sekcí mù¾e tvoøit èást. Èást je uvozena pøíkazem
+"\part"~"<název èásti>\par"\du{part}. Èásti jsou automaticky oznaèeny
+písmeny A,B,C,\dots a jsou vyznaèeny výraznìji ne¾ sekce v~místì
+zaèátku èásti i v~obsahu. Èásti ale nenaru¹ují èíslování
+sekcí. Tj. sekce jsou èíslovány od jedné napøíè celým dokumentem bez
+ohledu na to, zda jsou nebo nejsou rozdìleny na èásti.
+
+Pøíkaz "\module <soubor> " automaticky zalo¾í sekci s názvem
+"Modul <soubor>" a deklaruje svùj jmenný prostor.
+Toto chování lze zmìnit, viz~\cite[nazvy], \cite[module].
+
+Pøíkaz "\title<název>\par"\du{title} vytiskne název dokumentu vìt¹ím písmem a v
+rámeèku. Je-li definováno makro "\projectversion"\du{projectversion},
+bude jeho obsah vyti¹tìn drobnì vpravo nahoøe doplnìný zepøedu textem
+"verze". Pokud vá¹ projekt nemá verzi, mù¾e se hodit tøeba:
+
+\begtt
+\def\projectversion{\the\day. \the\month. \the\year}
+\endtt
+
+Pøíkaz "\author<text>\par"\du{author} napí¹e do
+støedu øádku tuènì "<text>",
+co¾ bývá obvykle jméno autora (jména autorù).
+
+Do záhlaví ka¾dé stránky se zaène pøepisovat zleva název aktuální
+sekce a zprava název dokumentu. U¾ivatel mù¾e text pro pravé záhlaví
+zmìnit zmìnou makra "\headtitle"\du{headtitle}.
+
+Pøíkazy "\sec" a "\subsec" mohou mít v hranaté závorce nepovinný
+parametr "<lejblík>". V takovém pøípadì vypadají parametry takto:
+"\sec"~"[<lejblík>] <název sekce>\par". Po takovém pou¾ití je mo¾né
+se na sekci (podsekci) odkazovat pøíkazem "\cite[<lejblík>]". Tento pøíkaz se
+promìní v èíslo odkazované sekce (podsekce) a navíc se stane
+aktivním odkazem.
+
+Pomocí pøíkazu "\savetocfalse"\du{savetocfalse} lze pøed pou¾itím
+pøíkazu "\sec" nebo "\subsec" zajistit, ¾e název sekce se
+nedostane do obsahu a nebude mít své èíslo. Místo èísla se
+vytiskne obsah makra "\emptynumber"\du{emptynumber}, které je
+implicitnì prázdné. Pøíkaz "\savetocfalse" ovlivní jen
+první následující "\sec" nebo "\subsec".
+
+\subsec [krizodkaz] Køí¾ové odkazy
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Cíl, kam smìøuje odkaz, je potøeba vyznaèit pomocí "<lejblíku>".
+To je mo¾né udìlat v pøíkaze "\sec", "\subsec" (viz pøedchozí
+sekci~\cite[kapsec]) nebo kdekoli v textu samostatným pøíkazem
+"\label[<lejblík>]"\du{label}. Také je mo¾né odkazovat na èíslo øádku
+(viz sekci~\cite[lineodkazy]).
+V¹echny lejblíky musejí být jednoznaèné (bez ohledu na jejich typ)
+napøíè celým dokumentem.
+
+Pøíkaz "\pgref[<lejblík>]"\du{pgref} expanduje na èíslo strany, na které se
+vyskytuje cíl odkazu. Pøíkaz "\numref[<lejblík>]"\du{numref} expanduje
+v~závislosti na typu cíle na:
+
+\begitems
+\item * èíslo sekce, je-li cílem sekce,
+\item * dvojèíslí "<sekce>.<podsekce>", je-li cílem podsekce,
+\item * èíslo øádku, je-li cílem øádek zdrojového kódu,
+\item * prázdné makro, je-li "<lejblík>" deklarovaný pomocí "\label".
+\enditems
+
+Oba pøíkazy "\pgref" a "\numref" expandují na uvedené texty bez dal¹í
+inteligence. Tj. výstupní text se nestává klikatelným odkazem.
+
+K aktivaci odkazu v PDF módu slou¾í
+makro "\ilink"~"[<lejblík>]{<text>}"\du{ilink}. Toto makro vytiskne modøe
+"<text>", který se stává klikatelným odkazem na cíl, deklarovaný
+pomocí "<lejblíku>". Tak¾e ji¾ známý pøíkaz "\cite[<lejblík>]"\du{cite}
+udìlá zhruba to samé, jako "\ilink[<lejblík>]{\numref[<lejblík>]}".
+Skuteèný pøíkaz "\cite" navíc ovìøí, zda není "\numref[<lejblík>]"
+prázdné makro. Pokud je, obarví namísto výstupu "\numref"
+výstup makra "\pgref".
+
+Pokud "<lejblík>" jako argument pøíkazu "\pgref", "\numref" nemá svùj
+cíl, pøíkaz "\pgref" expanduje na hodnotu $-1000$ a "\numref"
+expanduje na prázdný výstup. Jsou to expanzní makra, tak¾e v nich není
+implementován napøíklad tisk varování. Podívejte se na definici
+pøíkazu "\cite" (na stranì~\cite[@\nb cite]), jak se dá tisk varování
+implementovat.
+
+Makro "\module"~"<jméno> " zalo¾í sekci s lejblíkem "m:<jméno>", tak¾e
+lze na ní pak odkazovat. Napøíklad si mù¾ete vytvoøit makro
+
+\begtt
+\def\refmodul[#1]{\ilink[m:#1]{\tt#1}}
+\endtt
+%
+které aktivizuje svùj parametr, pokud tento je názvem nìjakého
+modulu. Tøeba "\refmodul[base]" vytiskne slovo "base" strojopisem a
+modøe a stává se klikatelným odkazem na zaèátek sekce
+\uv{Modul base}, pokud je tato sekce zalo¾ena pøíkazem "\module".
+
+Makra "\dg", "\dgn", "\dgh" internì provedou pøíkaz "\label[@<slovo>]"
+a makra "\dl", "\dln", "\dlh" provedou pøíkaz
+"\label[@<dlouhé slovo>]", kde "<dlouhé slovo>" je "<slovo>"
+po transformaci podle aktuálního jmenného prostoru.
+Na místa, kde jsou slova dokumentovaná, je tedy mo¾né odkazovat
+napøíklad pomocí
+"\link[@<slovo>]{<slovo> dokumentované na stranì~\pgref[@<slovo>]}".
+
+Makro "\api{<slovo>}" internì provede "\label[+<slovo>]", tak¾e je
+mo¾né na toto místo odkazovat tøeba pomocí
+"\ilink[+<slovo>]{API: <slovo>}".
+
+\docbytex{} nenabízí kromì èísel sekcí, podsekcí a èísel øádkù ¾ádné dal¹í
+automatické èíslování. Pokud tedy chcete implementovat napø. èíslování
+obrázkù, èísla publikací atd., musíte si napsat makra vlastní.
+K tomu mù¾ete vyu¾ít makro
+"\labeltext[<lejblík>]{<text>}"\du{labeltext}, které ulo¾í v
+horizontálním módu do sazby neviditelný cíl odkazu, a pøi dal¹ím
+prùchodu \TeX{}em expanduje makro "\numref" na "<text>".
+Pou¾ití makra uká¾eme na pøíkladì, ve kterém definujeme makro
+"\bib[<lejblík>]". Toto makro zahájí sazbu dal¹í polo¾ky v seznamu
+literatury. Odkazovat na knihu pak lze pomocí "\cite[b:<lejblík>]".
+
+\begtt
+\newcount\bibnum
+\def\bib [#1]{\par\advance\bibnum by1 \indent
+ \llap{[\the\bibnum] }\labeltext[b:#1]{[\the\bibnum]}\ignorespaces}
+\endtt
+
+\subsec Vkládání obrázkù
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pøíkazem "\ifig" "<¹íøka> <jméno obrázku> "\du{ifig} je mo¾né vlo¾it obrázek.
+Obrázek musí být pøipraven v souboru "fig/<jméno obrázku>.eps" (v pøípadì
+DVI módu) a v souboru "fig/<jméno obrázku>.pdf" (v~pøípadì PDF módu).
+Adresáø, kde \docbytex{} vyhledává obrázky ("fig/"), lze zmìnit
+pøedefinováním sekvence "\figdir"\du{figdir} . Rozmìr "<¹íøka>"
+je bez jednotky a udává pomìr po¾adované ¹íøky obrázku ku
+¹íøce sazby. Obrázek je umístìn zarovnán doleva na odstavcovou zará¾ku.
+
+Máte-li pøipraven obrázek ve formátu "eps", pak jej do "pdf" pøevedete
+pøíkazem
+
+{\def\begtthook{\langleactive}
+\begtt
+ps2pdf -dEPSCrop <jméno obrázku>.eps
+\endtt
+\par}
+
+\subsec Výèty
+%%%%%%%%%%%%%
+
+Seznam polo¾ek obklopíte "\begitems"\du{begitems} a
+"\enditems"\du{enditems}. V tomto prostøedí je text odsazen zleva
+o~odstavcovou zará¾ku. Prostøedí lze vnoøovat. Jednotlivou polo¾ku
+zahájíte pomocí "\item"~"<znaèka> <text>",\du{item}
+pøitom "<znaèka>" se
+vystrèí vlevo od "<textu>". Je-li "<znaèka>" hvìzdièka, promìní se v
+puntík. Dal¹í mo¾nost: "\item"~"\the\itemno) <text>",\du{itemno}
+co¾ vytvoøí èíslované výèty, v ka¾dém prostøedí èíslovány od jedné.
+
+Makro plainu "\item" není pøedefinováno globálnì, ale jen uvnitø
+"\begitems...\enditems". Mù¾ete tedy pou¾ít i makro plainu,
+pokud se vám koncept polo¾ek nabízený \docbytex{}em nelíbí.
+
+
+\noactive{/*}\noactive{*/}\noactive{//}
+\setlinecomment{\percent} \noactive{\nb\percent} \noactive{\percent\cbrace}
+
+
+\sec [zmeny] Pro nároèné
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+V této sekci jsou uvedeny a vysvìtleny definice základních
+pøíkazù \docbytex{}u. U¾ivatel si mù¾e tyto definice zmìnit, pokud chce
+zmìnit chování \docbytex{}u. Pokud napøíklad pracuje s jiným
+programovacím jazykem, mù¾e si zmìnit makro "\docsuffix" nebo
+kompletnì pøedefinovat makra "\module" a "\ins".
+
+\subsec [nazvy] Interní názvy
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pøíkazem "\doindex" vytvoøí \docbytex{} automaticky novou
+sekci s názvem \uv{Rejstøík}. Podobnì pøi tvorbì obsahu nebo nata¾ení
+modulu vzniká název \uv{Obsah} nebo \uv{Modul}. Pøed názvem verze
+v~titulu pøi pou¾ití "\projectversion" se objeví slùvko \uv{verze}.
+Èást (vytvoøená pomocí "\part") má v zálo¾kách uvozující text
+">> CAST".
+Tyto texty jsou definovány v makrech
+\db titindex, \db tittoc, \db titmodule, \db titversion a \db opartname.
+
+\ifirst {docby.tex}{Intern}{\empty}{--}
+
+Za pov¹imnutí stojí, ¾e jsou jinak tato makra definována pøi pou¾ití
+klasického "plain"u a jinak pøi pou¾ití "csplain"u. To ov¹em
+neznamená, ¾e u¾ivatel si tyto názvy nemù¾e pøedefinovat je¹tì jinak,
+nezávisle na pou¾itém formátu.
+
+\subsec [hooky] Vlo¾ené skupiny pøíkazù (hooks)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Nìkterá slo¾itìj¹í makra ("\begtt", palcové uvozovky, "\ifirst",
+"\inext", "\doindex", "\dotoc") dovolují vkládat u¾ivateli na zaèátku
+zpracování rùzné pøíkazy (tzv.~hooks). Implicitnì
+jsou tyto vlo¾ky prázdné:
+
+\ifirst {docby.tex}{begtthook}{\empty}{+-}
+
+Makro \db begtthook je vlo¾eno po zalo¾ení skupiny a nastavení v¹ech
+kategorií tìsnì pøed zaèátkem zpracování prostøedí "\begtt...\endtt".
+Makro \db quotehook je vlo¾eno po zalo¾ení skupiny a nastavení v¹ech
+kategorií tìsnì pøed zaèátkem zpracování prostøedí {\tt\char`\"...\char`\"}.
+Makro \db indexhook je vlo¾eno makrem "\doindex" po zalo¾ení sekce
+a pøed pøechodem do sazby ve dvou sloupcích. V tomto dokumentu je v
+nìm úvodní povídání k rejstøíku.
+Makro \db tochook je vlo¾eno makrem "\dotoc" po zalo¾ení sekce
+pøed sazbou prvního øádku obsahu.
+Makro \db bookmarkshook je vlo¾eno uvnitø skupiny na zaèátku
+zpracování zálo¾ek. Je mo¾né v nìm nastavit expanze maker
+vyskytujících se v nadpisech na rozumnou hodnotu pro zálo¾ky.
+Pokud navíc nastavíte "\let\cnvbookmark=\lowercase", budou v¹echny
+znaky pro zálo¾ky procházet filtrem "\lowercase". Uvnitø
+"\bookmarkshook" je pak mo¾né nastavit "\lccode" vybraným znakùm
+(napøíklad pro odstranìní háèkù a èárek).
+Makro \db outputhook je vlo¾eno na zaèátek výstupní rutiny. Je vhodné
+v nìm nastavit vybrané pøíkazy na hodnotu "\relax", aby se
+neexpandovaly do souboru {\tt.ref}.
+
+Pøíklady pou¾ití
+
+\bgroup
+\catcode`'13 \def'{\nb} \catcode`?=13 \def?{<}
+\def\begtthook{\langleactive\mubytein=1}
+\begtt
+\def\quotehook{\obeyspaces} % ve výpisech "..." budou normální mezery
+\def\quotehook{\langleactive} % ?text> se promìní na <text>
+\def\begtthook{\mubytein=1} % mezi 'begtt...'endtt bude aktivní encTeX
+\def\begtthook{\setsmallprinting} % ukázky 'begtt...'endtt budou malé
+\def\begtthook{\catcode`\!=0} % mezi 'begtt...'endtt fungují !prikazy
+\def\indexhook{To èubrníte, jaký tu mám rejstøík.}
+\def\outputhook{\let\mylogo=\relax} % \mylogo nebude expandovat
+\endtt
+\par
+\egroup
+
+\subsec [module] Pøíkaz {\tt\nb module} a {\tt\nb ins}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+U¾ivatelská dokumentace k tìmto pøíkazùm je v sekci~\cite[cleneni].
+Pøíkaz \db module "<soubor> " naète soubor s názvem
+"<soubor>\docsuffix", kde makro
+\db docsuffix obsahuje pøíponu souboru vèetnì teèky.
+
+\ilabel [linkincomment] {extension}
+\insdef docsuffix
+
+Pøíkaz "\module" vlo¾í název èteného souboru (bez pøípony)
+do pomocného makra
+\db modulename. Toto makro pak vyu¾ívá pøíkaz
+\db ins "<pripona> <text> ".
+
+\inssdef ins
+
+\subsec Zelenající komentáøe
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pøíkazy "\ifirst" a "\inext" si také v¹ímají (implicitnì) C komentáøù
+tvaru "//..<eol>" a "/* .. */". Tyto komentáøe barví ve výpisu
+programu zelenì. Zru¹it tuto vlastnost lze pøíkazem "\noactive<string>".
+Pomocí \db setlinecomment "{<string>}" lze nastavit nový typ komentáøù,
+které budou barveny zelenì od "<string>" do konce øádku. Pøíkazy mají globální
+platnost. Napøíklad
+
+{\def\begtthook{\mubytein=1}
+\begtt
+\noactive{/*}\noactive{*/}\noactive{//}
+\setlinecomment{\percent} \noactive{\nb\percent}}
+\endtt
+\par}
+\noindent
+nastaví komentáøe podle zvyklostí v \TeX{}u a PostScriptu.
+
+Pøíkazem \db setlrcomment "{<levý>}{<pravý>}"
+lze nastavit komentáøe typu "/*...*/".
+
+Pro zmìnu vlastností obarvování komentáøù staèí uvedená makra
+pou¾ít. Kdo chce vìdìt, jak jsou implementovaná, nech» ète dále.
+
+\inext {mubyte}{\empty}{+-}
+
+Uvedené pøíkazy jsou prázdné v módu bez enc\TeX{}u a pøi
+detekci enc\TeX{}u zapí¹í informace do enc\TeX{}ové tabulky
+prostøednictvím primitivù "\mubyte...\endmubyte".
+
+Pøíkazy \db linecomment a \db leftcomment se díky enc\TeX{}u
+automaticky vlo¾í pøed detekovanou sekvenci znakù. Tyto
+pøíkazy nastaví barvu textu na zelenou:
+
+\inext {linecomment}{\empty}{+-}
+
+Na druhé stranì pøíkaz \db rightcomment potøebuje vypnout zelenou barvu
+a¾ po pøeskoèení detekované sekvence. Proto enc\TeX{} v tomto pøípadì
+detekovanou sekvenci zru¹í a pøíkaz "\rightcomment" má za úkol ji vrátit
+do sazby zpìt a teprve poté pomocí \db returntoBlack se vrátit
+k~èerné barvì.
+
+\inext {returntoBlack}{\empty}{+-}
+
+Je potøeba vysvìtlit, proè pøepínaèe barev jsou tak komplikovanì
+zapsány. Pøepínaè toti¾ v PDF zapíná barvu nezávisle na skupinì a
+barva textu se dr¾í tak dlouho, dokud není pou¾it jiný pøepínaè barvy.
+Ka¾dý tisk øádku kódu je uveden pøepínaèem "\Black", tak¾e pøi
+poznámce \uv{do konce øádku} staèí jen pøepnout na "\Green". Ov¹em
+uvnitø komentáøe se mù¾e objevit link obalený
+pøíkazy "\Blue...\Black" (viz napø. øádek~\cite[linkincomment] v
+pøedchozí sekci). Pak ale chceme, aby "\Black" vrátil barvu
+"\Green". Proto je provedeno pøedefinování pomocí "\let". Toto
+pøedefinování je lokální. Proto¾e øádek je ti¹tìn uvnitø skupiny, je
+dal¹í øádek u¾ èerný.
+
+Pøi tisku komentáøe, který má úvodní a koncový znak a mù¾e pøesáhnout
+jeden øádek, musíme globálnì pøedefinovat "\Black" na "\Green", aby i
+dal¹í øádky (uvozené pøíkazem "\Black") byly zelené. Koncový znak
+komentáøe pak musí uvést barvy do pùvodního stavu.
+
+\docbytex{} inicializuje poznámky podle pravidel jazyka C:
+
+\inext {setlinecomment}{\empty}{+-}
+
+\sec [design] Pro designéry
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Následuje dokumentace definic maker ovlivòující vzhled dokumentu.
+Jejich pøedefinování mù¾e zpùsobit zmìnu vzhledu podle po¾adavku
+u¾ivatele. Místo komplikovaných maker s mno¾stvím parametrù pro øízení
+vzhledu jsou zde jednoduchá dobøe dokumentovaná makra pro jedno
+pou¾ití. Pøedpokládá se, ¾e pøi potøebì jiného vzhledu dokumentu je
+u¾ivatel pøedefinuje.
+
+Makra zabývající se vzhledem dokumentu jsou
+pokud mo¾no oddìlena od slo¾itosti ostatních maker, ve kterých probíhá
+hlavní zpracování \docbytex{}u. To umo¾òuje designérovi zamìøit se
+jen na programování vzhledu a neutopit se v rùzných cyklech a
+rekurzích interních maker \docbytex{}u.
+
+Typicky jsou makra pro vzhled ve dvou verzích: pro pdf\TeX{} a bez
+pdf\TeX{}u. To je dùvod, proè ve výpisech se èasto vyskytuje test
+"\ifx\pdfoutput\undefined".
+
+\subsec Parametry a pomocná makra pro nastavení vzhledu
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Velikost \db hsize ani \db vsize nemìníme. Buï si ji nastaví u¾ivatel,
+nebo se pøevezme velikost z~plainu (vhodné pro papír letter) èi
+csplainu (vhodné pro papír A4). Nastavujeme ale vìt¹í \db parindent,
+nebo» chceme do prou¾ku vymezeného "\parindent" dát podbarvené
+ètvereèky u názvù sekcí.
+
+\ifirst {docby.tex}{parindent=}{\empty}{+-}
+
+Pøipravíme si \uv{zú¾enou ¹íøku} \db nwidth vyu¾itou napø. jako ¹íøka záhlaví:
+
+\inext {nwidth}{\empty}{+-}
+
+Pøíkazem plainu "\raggedbottom"
+nastavíme pru¾nost stránky dole, a ne mezi jednotlivými øádky.
+Nastavením "\exhyphenpenalty=10000" zaká¾eme zlom za pomlèkou
+(v~tisku rozsahu stránek, napø. 11--13, takový zlom pùsobí ru¹ivì).
+
+\inext {raggedbottom}{\empty}{+-}
+
+Zavedeme potøebné fonty
+\db bbf, \db bbbf, \db btt,
+\db ttsmall, \db rmsmall, \db itsmall a \db partfont.
+
+\inext {bbf=}{\empty}{+-}
+
+Makro \db setsmallprinting pøepne do malého strojopisu, pøipraví
+\db ttstrut vhodné velikosti a pomocí "\offinterlineskip" pøipraví tisk
+øádkù v re¾imu, kdy se o sebe opírají. Hodnota "\parskip" je nastavena
+na "-1pt", aby docházelo k mírnému pøekrývání a nevznikaly v tisku
+nebo na obrazovce pruhy. Analogicky pracuje makro \db setnormalprinting.
+
+\inext {setsmallprinting}{\empty}{+-}
+
+V návrhu vzhledu pracuji jen s barvami
+\db Blue, \db Red, \db Brown, \db Green, \db Yellow a \db Black.
+Pokud budete chtít dal¹í barvy, definujte si je.\par\penalty1234
+
+\inext {pdfoutput}{\empty}{+-}
+
+Barvy jsou definovány pomocí makra \db setcmykcolor, které je v
+pøípadì DVI výstupu nastaveno na prázdné makro a v pøípadì PDF výstupu
+je pou¾it PDF~"\special". Tak¾e pøíkazy "\Brown" atd. je mo¾né pou¾ít i
+ve verzi maker pro DVI, ov¹em v této verzi neudìlají nic.
+Barva \db oriBlack je konstantnì èerná barva. Nìkterá makra toti¾
+normální "\Black" pøedefinovávají a pak se potøebují vrátit pomocí
+"\oriBlack" ke skuteèné èerné barvì.
+
+Makro \db rectangle "{<vý¹ka>}{<hloubka>}{<¹íøka>}{<obsah>}"
+vytvoøí rámeèek o stanovených rozmìrech se stanoveným obsahem.
+V PDF verzi je rámeèek ve tvaru plného ¾lutého obdélníku na kterém
+se nachází "<obsah>" zatímco v~DVI verzi se vytvoøí obrysový rámeèek.
+Pozor: parametr "<obsah>" musí obsahovat pøepínaè barvy, jinak nebude v
+PDF verzi viditelný. Na druhé stranì makro "\rectangle" se postará
+o návrat do \uv{normální} èerné barvy.
+
+\inext {pdfoutput}{\empty}{+-}
+
+Nakonec pøipravíme makro \db docbytex jako zkratku pro logo \docbytex{}u.
+
+\inext {def\nb docbytex}{\empty}{+-}
+
+\subsec Vzhled sekcí a podsekcí
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makra \db printsec "{<nadpis>}" a \db printsecbelow,
+jsou volána z makra pro vytvoøení sekce "\sec" a mají za úkol
+vytisknout nadpis. Ostatní problematika, kterou musí øe¹it makro
+"\sec" (reference do obsahu, cílové reference, èísla sekcí, plovoucí
+záhlaví atd.) je zde odstínìna a nemusíme se jí v tuto chvíli zabývat.
+
+Musíme ale dodr¾et následující úmluvu: Na zaèátku makra "\printsec"
+pøejdeme pro jistotu do vertikálního módu, pak vlo¾íme potøebné
+mezery, pak vlo¾íme text nadpisu. V okam¾iku, kdy pøejdeme do
+horizontálního módu, vlo¾íme makro "\makelinks", které zajistí
+umístìní cílù odkazù. Nakonec pøejdeme do vertikálního módu pøíkazem
+"\par" a {\it nevkládáme ¾ádné dal¹í vertikální mezery}. Makro "\sec" vlo¾í pod
+vyti¹tìný nadpis do horizontálního seznamu dal¹í prvky a posléze
+zavolá "\printsecbelow". Tam teprve vlo¾íme mezery obvykle blokované
+proti zlomu pomocí "\nobreak". Základní øazení vertikálního seznamu
+v \TeX{}u toti¾ vypadá takto: box, (whatsit, mark, atd.), penalty, glue.
+O objekty uvedené v~závorce se postará "\sec", my zde øe¹íme jen box
+(v makru "\printsec"), a dále penaltu a glue (v makru "\printsecbelow").
+
+K dispozici máme hodnotu "\secnum" a "\subsecnum" a dále mù¾eme pou¾ít
+test "\ifsavetoc", kterým se ptáme, zda daný nadpis bude v
+obsahu. Nebude-li, mìli bychom místo "\the\secnum" tisknout
+"\emptynumber". V makru "\seclabel" je obsah lejblíku sekce, nebo
+je makro prázdné. To mù¾eme vyu¾ít pøi tisku v re¾imu \uv{nahrubo},
+napøíklad tisknout tyto lejblíky do okrajù. \docbytex{} tuto
+vlastnost implicitnì neimplementuje.
+
+\ifirst {docby.tex}{def\nb printsec }{\empty}{+-}
+
+Makra \db printsubsec a \db printsubsecbelow fungují analogicky jako právì
+zmínìná, ale spolupracují s makrem "\subsec".
+
+\inext {def\nb printsubsec }{\empty}{+-}
+
+Makro \db printpart vytiskne nadpis èásti a dopøedu dá veliké
+písmeno. Makro \db printpartbelow tiskne mezeru pod nadpisem èásti.
+
+\inext {def\nb printpart }{\empty}{+-}
+
+Makro \db emptynumber, které se pou¾ije pøi "\savetocfalse", je
+implicitnì nastaveno na prázdnou hodnotu.
+
+\inext {emptynumber}{\empty}{+-}
+
+\subsec Titul, autor
+%%%%%%%%%%%%%%%%%%%%
+
+Makro \db title "<titul>\par" ète parametr "<titul>"
+pomocí makra "\secparam", které se postará o~pøípadné
+ignorování mezery na konci parametru (viz~sekci~\cite[secsec]).
+Makro "\secparam" ulo¾í parametr
+"<titul>" do tokenlistu "\sectitle" a spustí interní
+\db iititle. Toto makro pracuje ve dvou módech
+(DVI a PDF). V~obou módech "\iititle" ulo¾í "<titul>" do makra
+"\headtitle" (pokud je toto makro prázdné, tedy neinicializované
+u¾ivatelem) a pomocí pøíkazu "\noheadline" potlaèí na aktuální stránce
+tisk záhlaví.
+
+\inext {def\nb title}{\empty}{+-}
+
+Makro "\title" v DVI verzi je prosté "\centerline", zatímco v PDF
+verzi tiskne podkladový obdélník ¹íøky "\nwidth".
+
+Pokud není makro \db projectversion definováno, nastavíme mu výchozí
+hodnotu jako prázdné makro:
+
+\inext {ifx\nb project}{\empty}{+-}
+
+Makro \db author "<autor>\par" je spoleèné v obou módech.
+Umístí jméno autora tuènì a na støed.
+
+\inssdef author
+
+\subsec Hlavièky a patièky
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\docbytex{} nemìní výstupní rutinu plainu. Vyu¾ívá tedy klasické
+nástroje na modifikaci vzhledu, tj. text "\footline" a "\headline".
+
+Návrh vzhledu stránky nepoèítá s pravou a levou
+stranou, proto¾e dokumentaci vìt¹inou èteme na monitoru a kdy¾ ji
+tiskneme, tak kdo ví, na èem...
+
+Text \db footline je nastaven tak, aby byla stránková èíslice uprostøed
+podbarvena pøípadnì orámována pomocí "\rectangle".
+
+\inext {footline}{\empty}{+-}
+
+Text \db headline se mìní. Implicitnì obsahuje jen makro \db normalhead,
+ale pøi pou¾ití pøíkazu "\noheadline" na chvíli zmìní svùj obsah.
+
+\ilabel[headlinebox] {headlinebox}
+\inext {headline}{\empty}{+-}
+
+Makro "\normalhead" ulo¾í stránkový link pomocí "\savepglink"
+a "\vbox/\hbox" gymnastikou vytvoøí potøebné záhlaví. Zleva je ti¹tìn
+název sekce ("\firstmark") a zprava konstantní text "\headtitle".
+
+Makro \db noheadline nastaví "\headline" pøechodnì na text, podle
+kterého se vlo¾í jen stránkový odkaz a provede zmìna obsahu
+"\headline" na standardní hodnotu. Operace musíme provádìt globálnì,
+proto¾e jsme uvnitø výstupní rutiny.
+
+\inssdef noheadline
+
+Makro \db headtitle obsahuje text shodný v celém dokumentu ti¹tìný
+vpravo v záhlaví. Implicitnì je makro prázdné, po pou¾ití pøíkazu
+"\title" obsahuje název dokumentu, pokud si u¾ivatel makro nedefinoval sám.
+
+\inext {headtitle}{\empty}{+-}
+
+Pomocné makro \db headlinebox udìlá v DVI módu prázdný ètvereèek a
+v PDF módu plný (¾lutý) ètvereèek. Je pou¾ito na øádku~\cite[headlinebox]
+pro vytvoøení ètvereèkované èáry v záhlaví,
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+\subsec Tisk cíle odkazu a odkazù pod èarou
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Cíl odkazu vytvoøený makry "\dg" nebo "\dl" je potøeba vytisknout
+výraznì, aby jej ètenáø pokud mo¾no rychle na¹el. Tisk
+probíhá v makru \db printdg "{<pøed>}{<slovo>}{<za>}", kde "<pøed>" je
+text pøed slovem a "<za>" je prázdný parametr nebo obsahuje "()",
+pokud tyto závorky u¾ivatel v pøíkaze "\dg", "\dl" pou¾il.
+
+Souèasný návrh \docbytex{}u tiskne z tìchto tøí parametrù jen jeden,
+sice "<slovo>". V DVI módu tiskne "<slovo>" v rámeèku a v PDF módu
+tiskne "<slovo>" èervenì a na pozadí je ¾lutý obdélník.
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+Èervený text se tiskne pomocným makrem \db printdginside, které tiskne
+jednodu¹e èervenì, pokud ke slovu neexistuje "\api" cíl a tiskne
+èervenì pomocí "\ilink", jestli¾e existuje "\api" cíl.
+
+\inext {def\nb printdginside}{\empty}{+-}
+
+Údaj pod èáru tiskneme makrem
+\db printfnote "{<pøed>}{<d-slovo>}{<za>}{<k-slovo>}",
+kde parametry "<pøed>" a "<za>" mají stejný význam, jako u makra "\printdg".
+Parametr "<k-slovo>" (krátká verze slova) tiskneme èervenì,
+ostatní parametry èernì. Parametr "<d-slovo>" (dlouhá verze slova) není
+pou¾it.
+
+K naprogramování tohoto makra vyu¾iji makro
+"\specfootnote"~"{<text>}", které po¹le text do speciální poznámky pod
+èarou. Dále je potøeba vìdìt, ¾e "\pgref[+<slovo>]" vrátí èíslo
+strany, kde je "\api" deklarace "<slova>" nebo vrátí $-1000$.
+Toto èíslo vlo¾íme do "\apinum" a je-li nezáporné, tak jej uvedeme
+jako první v seznamu stránek a podtr¾ené.
+Seznam stránek vytiskneme pomocí
+"\listofpages{<slovo>}". V seznamu bude chybìt stránka "\apinum", proto¾e
+makro "\listofpages" ji vynechává. Prázdný seznam stránek (pøi kterém
+netiskneme dvojteèku ani èárku) poznáme podle toho, ¾e "\box0" má
+nulovou ¹íøku.
+
+\inext {def\nb printfnote}{\empty}{+-}
+
+\subsec Tisk údaje v obsahu a v rejstøíku
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pøíkaz \db ptocline "{<èíslo>}{<text>}{<strana>}" se postará o tisk
+údaje o sekci nebo èásti do obsahu. Dále pøíkaz \db ptocsubline
+"{<èíslo>}{<text>}{<strana>}" vytiskne údaj o subsekci. Jak je patrné,
+tyto dva pøíkazy se li¹í jen o jeden "\indent":
+
+\inext {def\nb ptocline}{\empty}{+-}
+
+Pøíkaz \db mydotfill vytiskne teèky do obsahu tak, aby byly pod sebou
+zarovnány.
+
+Pøíkaz \db ptocentry "<typ>{<slovo>}{<k-slovo>}" vytiskne jednu polo¾ku
+o dokumentovaném slovì do obsahu. Parametr "<typ>=+", pokud je v daném
+místì "\api" dokumentace, a "<typ>=@", je-li v daném místì "\dg"
+dokumentace. "<k-slovo>" je prázdné, ale pøi pou¾ití "\dl" je v nìm
+krátká verze slova, zatímco ve "<slovo>" je dlouhá verze slova.
+Dlouhou verzí odkazujeme, krátkou verzi tiskneme.
+
+\inext {def\nb ptocentry}{\empty}{+-}
+
+Kdyby bylo potøeba tisknout text pøed slovem nebo závorky za slovem,
+je mo¾né vyu¾ít kontrolní sekvenci "\csname-<slovo>\endcsname" jako
+v následujícím makru "\printindexentry".
+
+Makro \db myldots vytvoøí tøi teèky, které jsou zarovnány s ostatními
+teèkami v obsahu.
+
+Makro \db printindexentry "{<slovo>}" tiskne údaj o slovì do
+rejstøíku. Zaèíná ve vertikálním módu uvnitø sloupce, vytiskne údaj a
+pomocí "\par" se musí vrátit do vertikálního módu.
+
+\inext {def\nb printindexentry}{\empty}{+-}
+
+Pomocí \db separeright ulo¾ím do "\tmpa" text vlevo od slova a do
+"\tmpb" text vpravo od slova. Makro "\refdg" tyto údaje ulo¾ilo do
+makra "\csname-<slovo>\endcsname" oddìlené od sebe znaèkou "\right".
+Pomocí makra "\pgref[@<slovo>]" získám stránku s "\dg" deklarací
+slova. Pomocí "\pgref[+<slovo>]" získám stránku s "\api" deklarací
+slova. Tuto stránku (pokud existuje) tisknu podtr¾enì.
+
+\subsec Tisk zdrojového textu
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makra "\ifirst" a "\inext" pøetisknou po¾adovanou èást zdrojového
+textu. Pøi øe¹ení návrhu vzhledu tisku nás nyní pouze zajímá, ¾e tato
+makra zalo¾í skupinu, pak zavolají pøíkaz \db printiabove, pak pro tisk
+ka¾dého øádku zavolají \db printiline "{<èíslo>}{<text øádku>}" a nakonec pøed
+ukonèením skupiny se spustí \db printibelow. Právì tato tøi makra si
+nyní naprogramujeme. Budeme rozli¹ovat mezi DVI a PDF
+módem.
+
+\ilabel [isnameprinted] {raise8}
+\ilabel [isnameprinted2] {pt \nb inputfilename}
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+V DVI módu tiskneme nahoøe èáru se jménem souboru pomocí "\leaders"
+a makra \db specrule. Dole pak tiskneme jen jednoduchou èáru.
+V~PDF módu nahoøe pouze nastavíme "\setsmallprinting"
+a vlo¾íme malou mezeru. Dole vlo¾íme støední mezeru.
+
+Makro "\printiline" pøejde nejprve do horizontálního módu, tam vlo¾í v
+DVI módu podpìru a dále box s èíslem a box s øádkem. Mezi øádky
+vkládám penaltu~11. V PDF módu se místo podpìry tiskne celý ¾lutý
+prou¾ek v~"\rlap". Proto¾e pøes první øádek je potøeba vpravo nahoru
+vytisknout jméno souboru (pozdìji ne¾ ¾lutý prou¾ek), je potøeba
+zjistit, zda tisknu první øádek nebo dal¹í øádky. K tomu slou¾í
+kontrolní sekvence \db isnameprinted, která je typicky "\undefined".
+Po vyti¹tìní jména souboru (øádky~\cite[isnameprinted] a~\cite[isnameprinted2])
+nastavím "\isnameprinted" na "\relax" a tím poznám, ¾e u¾ je práce
+provedena. A¾ makro "\ifirst" nebo "\inext" ukonèí skupinu, bude zase
+mít "\isnameprinted" hodnotu "\undefined".
+
+\subsec [begtt] Tisk z prostøedí {\tt\nb begtt}/{\tt\nb endtt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makro "\begtt" zalo¾í skupinu a zavolá \db printvabove.
+Dále pro ka¾dý ti¹tìný øádek volá makro \db printvline "{<èíslo>}{<text øádku>}"
+a nakonec zavolá \db printvbelow. Èíslo øádku jsme se rozhodli
+nevyu¾ít. V DVI verzi kreslíme jen èáry nahoøe a dole. V~PDF verzi
+kreslíme ¾luté èáry nahoøe a dole a v~ka¾dém øádku pomocí "\rlap" kreslíme
+¾luté obdélníky vpravo a vlevo.
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+\subsec Vkládání obrázkù
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+Obrázky jsou vkládány nalevo podle odstavcové zará¾ky. Tato
+zará¾ka je dostateènì velká, tak¾e to pùsobí docela dobøe.
+Celkovou ¹íøku prostoru pro obrázek \db figwidth spoèítám jako
+"\hsize" mínus "\parindent"
+
+\inext {newdimen\nb figwidth}{\empty}{+-}
+
+Makro \db ifig "<pomìr ¹íøky> <název> " v DVI módu vlo¾í "<název>.eps" a
+vyu¾ije k tomu makrobalík {\tt epsf.tex}. V PDF módu vlo¾í
+"<název>.pdf" a vyu¾ije k tomu pdf\TeX{}ové primitivy "\pdfximage",
+"\pdfrefximage", "\pdflastximage".
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+Makro \db figdir obsahuje adresáø, ze kterého se obrázky loví.
+
+\subsec Výèty
+%%%%%%%%%%%%%
+
+Makra pro výèty jsou natolik jednoduchá, ¾e asi nepotøebují dal¹ího
+konimentáøe. \db begitems zahájí prostøedí s výèty, \db enditems ukonèí
+toto prostøedí, \db itemno èísluje a \db dbtitem "<znaèka> " zahajuje polo¾ku,
+pøièem¾ se uvnitø prostøedí pøevtìlí na \db item.
+
+\inext {newcount\nb itemno}{def\nb enditems}{++}
+
+
+\sec [implementace] Pro otrlé
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Zde je dokumentována implementace \docbytex{}u. Je zde výpis
+v¹ech jeho interních maker vèetnì podrobného
+komentáøe, jak fungují. Asi není rozumné tato makra mìnit, leda¾e by
+si chtìl ètenáø naprogramovat \docbytex{} vlastní.
+
+\subsec Pomocná makra
+%%%%%%%%%%%%%%%%%%%%%
+
+Makro \db dbtwarning zprostøedkuje tisk varovných hlá¹ek:
+
+\inext {def\nb dbtwarning}{\empty}{+-}
+
+Makra \db defsec "{<text>}", \db edefsec "{<text>}" a \db undef "{<text>}"
+jsou zkratky za èasté operace s~"\csname<text>\endcsname".
+
+\inext {def\nb defsec}{\empty}{+-}
+
+Makro "\undef" je potøeba pou¾ít takto:
+
+{\def\begtthook{\langleactive\mubytein=1}
+\begtt
+\undef{<text>}\iftrue <sekvence nedefinovaná> \else <sekvence definovaná> \fi
+\endtt
+\par}
+
+Nutnost pou¾ití "\iftrue" se bohatì vyplatí, a¾ budeme "\undef" pøeskakovat
+vnìj¹ími podmínkami typu~"\if".
+
+Definuji makro \db nb (normální backslash). Toto makro je pak mo¾né
+pou¾ívat pøi vyhledávání textu s tímto znakem. Rovnì¾ definuji aktivní
+tabelátor a zástupné sekvence \db obrace, \db cbrace, \db percent
+a \db inchquote.
+
+{\catcode`\%=12 \noactive{\nb %} \noactive{[%} }
+
+\inext {catcode}{\empty}{+-}
+
+Makro \db softinput je vysvìtleno v \TeX{}booku naruby na stranì 288,
+tak¾e bez komentáøe.
+
+\inext {def\nb softinput}{\empty}{+-}
+
+Makro \db setverb nastaví kategorie v¹ech speciálních znakù na
+normální. Viz \TeX{}book naruby, stranu~28.
+
+\inext {def\nb setverb}{\empty}{+-}
+
+\subsec Inicializace
+%%%%%%%%%%%%%%%%%%%%
+
+Ohlásíme se na terminál:
+
+\inext {This is DocBy}{\empty}{+-}
+
+Makro \db dbtversion obsahuje verzi \docbytex{}u a je definováno
+na zaèátku souboru {\tt docby.tex}. Tam je autor \docbytex{}u pozmìní,
+pokud pøejde na novou verzi.
+
+\inssdef dbtversion
+
+Je-li pou¾it "csplain", je aktivován UTF-8 vstup pomocí enc\TeX{}u. To
+ale bohu¾el není kompatibilní s pou¾itím enc\TeX{}u \docbytex{}em.
+Je tedy potøeba deaktivovat UTF-8 vstup a èeské texty napsat napøíklad
+v ISO-8859-2.
+
+\inext {utf8off}{\empty}{+-}
+
+%Inicializujeme csplain mód:
+%
+%\inext {ifx\nb chyph\nb undefined \nb else}{\empty}{+-}
+
+Inicializujeme enc\TeX{}ový mód:
+
+\inext {encTeX ??}{\empty}{+-}
+
+Makro \db enctextable "{<slovo>}{<tìlo makra>}" vlo¾í do enc\TeX{}ové
+tabulky vzor "<slovo>". Jakmile takový vzor enc\TeX{}
+objeví, zru¹í jej ze vstupního proudu a promìní jej v kontrolní
+sekvenci "\.<slovo>", která expanduje na "<tìlo makra>".
+Napøíklad makro "\dg"~"<slovo>" aktivuje pro enc\TeX{} "<slovo>", tak¾e
+provede (mimo jiné)
+"\enctextable{<slovo>}{\sword{<slovo>}}", co¾ zpùsobí,
+¾e se "<slovo>" v naèítaném zdrojovém kódu promìní na "\sword{<slovo>}".
+
+Makro "\enctextable" odmítá ulo¾it do enc\TeX{}ové tabulky slova,
+která jsou v seznamu \uv{zakázaných} slov \db owordbuffer. Tam jsou
+slova (oddìlená z obou stran èárkou), která se nesmìjí aktivovat kvùli
+"\onlyactive". Pro taková slova provede "\enctextable" jen definici
+sekvence "\.<slovo>".
+
+Makro \db noactive "{<text>}" vlo¾í do enc\TeX{}ové tabulky vyhledávaný
+text, který ve vstupu zùstane a pøed nìj bude vlo¾ena sekvence \db emptysec.
+Proto¾e enc\TeX{} neumí ze své tabulky zru¹it údaj (umí jen pøepsat
+informaci, na co se má vyhledávaný text promìnit), je potøeba texty,
+které u¾ v encTeXové tabulce nepotøebujeme, deaktivovat alespoò pomocí
+"\noactive".
+
+Na \db sword "{<text>}" se díky enc\TeX{}u promìòují texty, které se mají
+automaticky stát klikatelnými linky.
+
+\inext {def\nb sword}{\empty}{+-}
+
+Makro \db onlyactive "{<pøed>}{<slovo>}{<za>}" zaká¾e vkládat
+"<slovo>" do enc\TeX{}ové tabulky (vlo¾í je do "\owordbuffer",
+ov¹em jen za pøedpokladu, ¾e u¾ tam není),
+a nechá celý text "<pøed><slovo><za>" promìnit v~"\oword{#1}{#2}{#3}".
+Dále pomocí "\noactive" dekativuje "<slovo>" (pøi ètení "\reffile"
+toti¾ pravdìpodobnì bylo aktivováno).
+Makro \db oword "{<pøed>}{<slovo>}{<za>}"
+tiskne normálnì "<pøed>", dále, pokud je definováno "\.<slovo>", tak
+je spustí, jinak tiskne normálnì "<slovo>". Koneènì tiskne v¾dy
+normálnì text "<za>".
+
+\inext {def\nb onlyactive}{\empty}{+-}
+
+Nakonec inicializujeme DVI/PDF mód:
+
+\inext {ifx\nb pdfoutput}{\empty}{+-}
+
+\subsec Makra {\tt\nb ifirst}, {\tt\nb inext}, {\tt\nb ilabel}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Deklarujeme \db lineno jako èíslo øádku, \db ttlineno jako èíslo øádku
+pro "\begtt...\endtt" výpisy, \db ifcontinue pro øízení cyklu a
+\db infile je deskriptor souboru otevøeného ke ètení.
+\db ifskipping implementuje u¾ivatelské \db skippingfalse a
+\db skippingtrue.
+
+\inext {newcount\nb lineno}{\empty}{+-}
+
+%Makra "\ifirst", "\inext" jsou pro u¾ivatele popsána
+%v~sekci~\cite[vkladani] a makro "\ilabel" má své povídání
+%v~sekci~\cite[lineodkazy].
+
+Pøíkaz \db ifirst "{<soubor>}{<odkud>}{<kam>}{<jak>}" nejprve
+pomocí "\readiparamwhy" analyzuje parametr "<jak>", pak otevøe soubor
+ke ètení primitivem "\openin". Je-li otevøení neúspì¹né, vypí¹e
+varování, jinak si ulo¾í název souboru do makra \db inputfilename
+a analyzuje parametry pomocí "\scaniparam": "<odkud>" je ulo¾eno do
+"\tmpa" a "<kam>" do "\tmpb". Do "\tmpA" a "\tmbB" se ulo¾í poèet
+opakování (z konstruktoru "\count=<num>"). Nakonec se spustí makro
+"\insinternal" s expandovanými parametry "<odkud>", "<kam>".
+K tomu je pou¾it známý trik s makrem "\act".
+
+\insdef ifirst
+
+Pøíkaz \db inext "{<odkud>}{<kam>}{<jak>}" pracuje analogicky, jako
+"\ifirst", pouze neotevírá soubor, ale pomocí testu na definovanost
+makra "\inputfilename" kontroluje, zda náhodou nebyl spu¹tìn pøíkaz
+"\inext" bez pøedchozího "\ifirst".
+
+\insdef inext
+
+V rámci expanze parametrù chceme, aby zmizely v¹echny kontrolní sekvence, které
+nám do textu vlo¾il automaticky enc\TeX{}. To provede makro
+\db noswords.
+
+\inssdef noswords
+
+Makro \db readiparamwhy naète znaky "+" nebo "-" z parametru "<jak>" a
+ulo¾í je do sekvencí \db startline a \db stopline.
+
+\inssdef readiparamwhy
+
+Makro \db scaniparam "<param>^^X<out><outnum>" ète "<param>"
+ve tvaru "\count=<num> <text>". Do sekvence "<out>" ulo¾í "<text>"
+a do sekvence "<outnum>" ulo¾í "<num>". Proto¾e konstruktor
+"\count=<num>" je nepovinný, dá trochu více práce parametr analyzovat.
+K tomu slou¾í i pomocná makra \db scaniparamA, \db scaniparamB, \db scaniparamC.
+V pøípadì nepøítomnosti "\count=<num>" je v~"<outnum>" jednièka.
+
+\inssdef scaniparam
+
+Hlavní práci pøi vkládání zdrojového textu do dokumentace dìlá makro
+\db insinternal s parametry "{<odkud>}{<kam>}".
+
+\ilabel [prvniloop] {preskakovani}
+\ilabel [konec:prvniloop] {ifcontinue \nb repeat}
+\ilabel [druhyloop] {pretisk}
+\ilabel [konec:druhyloop] {readnewline \nb repeat}
+\ilabel [insinternal:end] {printibelow}
+\insdef insinternal
+
+Makro "\insinternal" se skládá ze dvou hlavních cyklù. První (na
+øádcích~\cite[prvniloop] a¾~\cite[konec:prvniloop]) ète postupnì
+øádky ze vstupního souboru (makrem
+"\readnewline") a ulo¾í je do makra "\etext". V tomto cyklu hledá
+výskyt textu "<odkud>" a nic netiskne.
+
+Druhý cyklus na øádku~\cite[druhyloop] a¾~\cite[konec:druhyloop]
+ète postupnì øádky ze vstupního
+souboru a hledá výskyt textu "<kam>". V této chvíli tiskne pomocí
+makra "\printilineA".
+
+Pøed prvním cyklem jsou provedeny pøípravné práce: nastavení
+kategorií, fontù, "\mubytein".
+Dále je v pøípravné fázi definováno makro \db testline se separátorem
+"<odkud>", pomocí nìho¾ budeme testovat pøítomnost textu "<odkud>".
+Variantní definice makra "\testline" následují pro speciální pøípad
+parametru "<odkud>" (viz u¾ivatelská dokumentace v~sekci~\cite[vkladani]).
+Ukonèení cyklu je øízeno podmínkou "\ifcontinue". Pøíkaz \db nocontinue
+provede "\continuefalse", ov¹em ne v¾dy. Pokud je zadáno "\count>1", tj.
+"\tempnum>1", pak pøíkaz pouze zaznamená výskyt hledaného textu a sní¾í
+"\tempnum" o jednièku.
+
+\inssdef nocontinue
+
+Pøed druhým cyklem v makru "\insinternal" jsou provedeny podobné pøípravné
+práce jako pøed
+prvním, znovu je definováno makro "\testline", tentokrát se separátorem
+"<kam>". Vyhledávání probíhá podobnì, jako kdy¾ jsme hledali "<odkud>".
+
+Pomocí "\ifx+\startline" testujeme, zda tisknout výchozí øádek.
+Pomocí "\ifx+\stopline" testujeme, zda tisknout ukonèovací øádek.
+
+Makro "\ilabellist" obsahuje testování pøítomnosti lejblíkù
+deklarovaných pøíkazem "\ilabel".
+
+Trikoidní je makro \db returninsinternal "{<text>}{<mo¾ná fi>}{<ignoruj>}",
+které se spustí pøi dosa¾ení konce èteného souboru. Marko opustí svùj
+cyklus pomocí parametru "<ignoruj>", který je separován textem
+"\printibelow", tak¾e to pøeskoèí vìt¹í èást obsahu makra "\insinternal" a¾
+po øádek~\cite[insinternal:end]. Abychom správnì opustili vnoøené
+podmínky, jsou pøeètena v druhém parametru pøípadná "\fi" a v makru pou¾ita.
+První parametr obsahuje varovací hlá¹ku, chceme-li vypsat varování.
+Chceme-li být zticha, je parametr prázdný.
+
+\insdef returninsinternal
+
+Makro \db readnewline je naproti tomu jednoduché:
+
+\inssdef readnewline
+
+Pracujeme s øádkem èteného souboru ve dvou verzích: neexpandovaným
+\db text a expandovaným \db etext pøi "\noswords". Tím máme zaruèeno,
+¾e v "\etext" nejsou kontrolní sekvence vytvoøené enc\TeX{}em (pro
+test pøítomnosti "<odkud>" nebo "<kam>" by tam ty sekvence pøeká¾ely).
+Verze s enc\TeX{}ovými sekvencemi "\text" se pou¾ije pøi tisku.
+
+Makro \db printilineA musí mít svou inteligenci: nesmí bezhlavì tisknout
+prázdné øádky, ale ty tiskne a¾ se zpo¾dìním, následuje-li tisk
+neprázdného øádku. Tím je zaruèeno, ¾e se pøi "\skippingtrue" nevytiskne poslední
+prázdný øádek. Makro \db lastline má tøi stavy: "\empty" (na zaèátku),
+"\relax" (po vyti¹tìní øádku), "<èíslo øádku>" (je-li pøedchozí øádek
+prázdný).
+
+\insdef printilineA
+
+Pro ulo¾ení deklarací pomocí \db ilabel "[<lejblík>]{<text>}"
+slou¾í makro \db ilabellist, které musíme nastavit nejprve na prázdnou
+hodnotu.
+
+\insdef ilabellist
+
+Makro "\ilabel" nejprve expanduje své parametry (pomocí
+"\act") a zavolá interní \db ilabelee. Toto makro pøidá do
+"\ilabellist" toto:
+
+\def\begtthook{\langleactive\mubytein=1}
+\begtt
+\expandafter\testilabel\etext\end{<lejblík>}{<text>}
+\endtt
+
+Makro \db testilabel "<øádek>\end{<lejblík>}{<text>}"
+si definuje pomocné makro "\tmp" se separátorem "<text>", aby
+zjistilo, zda je "<text>" uvnitø "<øádek>". Pokud se to povede,
+registruje cíl odkazu pomocí "\labeltext".
+
+\inext {testilabel}{\empty}{+-}
+
+\def\begtthook{}
+
+\subsec Pøíkazy {\tt\nb begtt}, {\tt\nb endtt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makro \db begtt a "\endtt"
+je podrobnì popsáno v \TeX{}booku naruby
+na stranách~27 a¾~30. Makru \db startverb dodáme kompletní
+verbatim text separovaný "\endtt".
+Tento text je dìlený znakem "^^M" (kategorie 12) na øádky a koncový øádek
+obsahuje token "\end". Makro spustí ve spolupráci s makrem \db runttloop
+cyklus a øádky rozebere, ka¾dý øádek zvlá¹» pøedá makru "\printvline".
+Na konci cyklu se provede makro \db endttloop. To udìlá závìreèné
+èinnosti (zavolá "\printvbelow", ukonèí skupinu) a pomocí makra
+\db scannexttoken otestuje první následující
+token. Pokud to není "\par", není pod "\endtt" prázdný øádek,
+tak¾e se provede "\noindent".
+
+\ifirst {docby.tex}{def\nb begtt }{\empty}{+-}
+
+V numerickém registru "\ttlineno" je èíslo øádku prùbì¾nì zvìt¹ované
+v celém dokumentu. Pokud by nìkdo chtìl toto èíslo vyu¾ít, mù¾e jej
+nulovat napøíklad na zaèátku ka¾dé sekce.
+
+\subsec [ns] Jmenné prostory
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Ka¾dý jmenný prostor si udr¾uje své \db namespacemacro, co¾ je makro
+s jedním parametrem, které pøíkazem "\namespace{<tìlo makra>}" mimodìk
+definuje u¾ivatel. Na poèátku je "\namespacemacro" prázdné:
+
+\ifirst {docby.tex}{def\nb namespacemacro}{\empty}{+-}
+
+Ke ka¾dému jmennému prostoru budeme chtít pøiøadit lejblík. Rozhodl
+jsem se za lejblík pova¾ovat výsledek expanze "\namespacemacro{@!}".
+Budu jej nadále znaèit "<nslejblík>".
+Existuje sice urèité riziko nejednoznaènosti "<nslejblíku>", ale
+pøedpokládám, ¾e v praxi nenastane.
+
+Ka¾dý jmenný prostor u¾ na poèátku musí vìdìt, jaká v¹echna lokální
+slova obsahuje, aby jejich výskyt mohl smìøovat na místo, kde je
+deklarace "\dl", která mù¾e být tøeba pozdìji ne¾ výskyt. Jmenný
+prostor na svém startu musí tedy do enc\TeX{}ových tabulek ulo¾it
+v¹echna lokální slova a na svém konci vrátit v¹e pokud mo¾no do
+pùvodního stavu. Je tedy zøejmé, ¾e není vhodné èekat a¾ na pøíkaz
+"\dl", ale ¾e je tøeba vyu¾ít soubor "\reffile". V prvním prùchodu
+tedy jmenné prostory nemohou být aktivní.
+
+Po pøeètení "\reffile" má ka¾dý jmenný prostor k dispozici makro
+"\ns:<nslejblík>", které obsahuje seznam v¹ech svých
+lokálnì deklarovaných slov ve formátu
+
+{\def\begtthook{\mubytein=1\langleactive}
+\begtt
+\locword{<slovo1>}\locword{<slovo2>}\locword{<slovo3>}...
+\endtt
+\par}
+
+Proto¾e ukládání do enc\TeX{}ové tabulky je globální, definujeme
+v rámci du¹evní hygieny v¹echna makra s tím spojená globálnì. Proto je
+prostøedí "\namespace...\endnamespace" nezávislé na skupinách \TeX{}u.
+
+Pøi startu \db namespace je tøeba definovat "\namespacemacro".
+Pùvodní hodnotu "\namespacemacro" ulo¾íme do "\no:<nslejblík>",
+abychom se k nìmu mohli na konci prostøedí
+"\namespace...\endnamespace" vrátit. Dále definujeme makro \db locword
+tak, aby ulo¾ilo potøebné údaje do enc\TeX{}ové tabulky a pøed tím
+je¹tì si ulo¾ilo stávající významy pøedefinovávaných kontrolních
+sekvencí. Pak se prostì spustí "\ns:<nslejblík>".
+
+\inext {def\nb namespace }{^^B\cbrace}{++}
+
+Na konci \db endnamespace znovu definujeme makro "\locword" tentokrát tak, aby
+vrátilo pozmìnìným sekvencím pùvodní význam. Pokud pùvodní význam byl
+\uv{nedefinovaná sekvence}, je potøeba do enc\TeX{}ové tabulky vlo¾it
+aspoò "\nword", proto¾e zcela odstranit údaj z tabulky nelze.
+Dále se vrátíme k~pùvodní hodnotì "\namespacemacro", kterou máme
+ulo¾enu v "\no:<nslejblík>".
+
+\inext {def\nb endnamespace}{^^B\cbrace}{++}
+
+Uvedená makra pracují s u¾iteènou zkratkou \db ewrite, která zapí¹e
+text do "\reffile" se zpo¾dìním (primitivem "\write"), ale expanzi
+udìlá hned. Pøitom neexpanduje "\nb".
+
+\inext {def\nb ewrite}{\empty}{+-}
+
+Enc\TeX{} od startu jmenného prostoru vkládá tedy místo ka¾dého
+lokálního "<slova>" kontrolní sekvenci "\.<slovo>", která expanduje
+na "\lword{<slovo>}". Jakmile se tedy objeví výskyt lokálního slova,
+pracuje \db lword takto:
+
+\inext {def\nb lword}{\empty}{+-}
+
+Makro \db genlongword "<tmp>{<slovo>}"
+vytvoøí z krátké verze slova dlouhou verzi slova a ulo¾í ji do "<tmp>".
+Výskyt "<slova>" dává o sobì vìdìt v parametru "\ilink" i pøi zápisu
+do souboru svým dlouhým (jednoznaèným) jménem, zatímco krátké jméno
+se tiskne.
+
+Zbývá zaøídit ètení ze souboru "\reffile". Makro
+\db refns "{<nslejblík>}" se objeví v souboru v místì zaèátku jmenného
+prostoru a \db refnsend "{<nslejblík>}" na konci jmenného prostoru. Mezi
+nimi se vyskytují "\refdg{<pøed>}{<slovo>}{<za>}{<k-slovo>}", pøièem¾
+si nyní v¹ímáme jen takových výskytù, které mají neprázdné
+"<k-slovo>". Právì tyto výskyty zanesl do "\reffile" pøíkaz "\dl".
+
+\inext {def\nb refns}{\empty}{+-}
+
+Makro "\refns" si zapamatuje pøedchozí "<nslejblík>", který je ulo¾en
+v makru \db currns, do sekvence "\o:<nový nslejblík>" a definuje pak "\currns"
+jako "<nový nslejblík>". Pøipraví také výchozí stav makra "\ns:<nslejblík>"
+na prázdnou hodnotu. Makro "\refdg" pak postupnì plní buffer
+"\ns:<nslejblík>" (viz øádky~\cite[ns1] a¾~\cite[ns2] v~definici makra
+"\refdg" v~sekci~\cite[reference]). Koneènì makro "\refnsend" vrátí
+"\currns" do stavu, v jakém bylo pøed vstupem do stávajícího jmenného
+prostoru.
+
+
+\subsec {\tt\nb dg} a pøátelé
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makra \db dg, \db dl, \db dgn, \db dgh, \db dln, \db dlh
+ulo¾í do "\tmpA" svùj název, spustí sken parametrù pomocí \db dgpar
+a nakonec se promìní ve svou interní verzi pomocí
+"\csname ii\tmpA\endcsname".
+
+\inext {def\nb dg}{\count=2 \empty}{+-}
+
+Pøedchozí makra pøipraví ètení nepovinného parametru. Hlavní práci
+provede makro \db dparam.
+
+\ilabel [managebrackets] {managebrackets}
+\ilabel [ii] {csname ii}
+\inext {def\nb dparam}{\empty}{+-}
+
+Je-li za ukonèovací závorkou "]" mezera, pak je parametr "#2" prázdný (je
+separovaný mezerou). V~této situaci se makro "\dparam" protoèí je¹tì
+jednou prostøednictvím makra \db nextdparam, které se¾ere obsah zbytku
+makra "\dparam", vlo¾í mezeru dovnitø závorky a spustí "\dparam" je¹tì
+jednou. Nyní u¾ je mo¾né zaèít parametr "#2", tj. "<slovo>" rozdìlit
+na èást pøed první èárkou, teèkou, støedníkem nebo dvojteèkou a za za
+tímto znakem. Èást pøed bude v "\tmpa" a èást za (vèetnì separátoru)
+bude v "\tmpb". Tuto práci vykoná postupné volání makra \db varparam:
+
+\inext {def\nb varparam}{\empty}{+-}
+
+Makro "\varparam<separ>" definuje pomocné makro "\tmp#1<separ>#2 ", kterému
+je pøedlo¾eno "<slovo><separ> ". Je-li "#2" prázdné, pak zabral a¾
+"<separ>" na konci, tak¾e uvnitø "<slova>" není "<separ>". Pak v
+"\tmpa" zùstává "<slovo>". Je-li uvnitø "<slova>" separátor, pak je
+potøeba doplnit k "\tmpb" zbytek za separátorem vèetnì tohoto
+separátoru. V "#2" máme "<zbytek><separ>" a my potøebujeme do "\tmpb"
+ulo¾it stávající obsah "\tmpb" pøed kterým pøedchází "<separ><zbytek>".
+Tuto práci udìlá \db gobblelast, kterému je pøedlo¾en
+"<obsah tmpb>\end<separ><zbytek><separ>". Makro definuje
+"\tmp#1<separ>" a pøedlo¾í mu "<zbytek><separ>". Je tedy v "#1" holý
+"<zbytek>" a do "\tmpb" se dostává "<separ><zbytek><starý obsah tmpb>".
+
+Po rozdìlení vyhledání separátoru máme n "\tmpa" <slovo>, ov¹em mù¾e
+obsahovat na konci "()". Proto spustíme na øádku~\cite[managebrackets]
+makro \db managebrackets, které se postará o pøípadné oddìlení tìchto
+závorek. Pokud se závorky skuteènì oddìlily od "\tmpa", zùstávají
+v~\db printbrackets.
+
+\inext {def\nb managebrackets}{\empty}{+-}
+
+Makro \db maybespace v závìru èinnosti makra "\dparam" vytiskne za
+obsahem "\tmpb" mezeru, ale jen tehdy, kdy¾ je jméno makra
+dvoupísmenkové ("\dg", "\dl") a nenásleduje znak "`".
+
+\inext {def\nb maybespace}{\empty}{+-}
+
+Na øádku~\cite[ii] vytvoøí makro "\dparam" z pùvodního pøíkazu
+"\dg*" resp. "\dl*" jeho interní verzi "\iidg*" resp. "\iidl*".
+Parametry pøedá expandovány, aby s nimi bylo ménì práce.
+Staèí tedy naprogramovat uvedená interní makra.
+
+Makro \db iidg vlo¾í do enc\TeX{}ové tabulky "\sword" (je to mírnì
+nadbyteèné, toté¾ se provede na zaèátku zpracování pøi ètení
+"\reffile" pøíkazem "\refdg"). Dále makro vytvoøí cíl
+odkazu tvaru "@<slovo>", ulo¾í informaci do "\reffile"
+ve formátu "\refdg{<pøed>}{<slovo>}{<za>}{}",
+vytiskne "<slovo>" zvýraznìné pomocí "\printdg" a vlo¾í poznámku pod
+èáru pomocí "\printfnote".
+
+\inext {def\nb iidg }{^^B\cbrace}{++}
+
+Makro \db iidl nevkládá nic do enc\TeX{}ové tabulky,
+vytvoøí cíl pomocí "\label [@<dlouhé slovo>]", zapí¹e info do
+"\reffile" ve formátu "\refdg{<pøed>}{<d-slovo>}{<za>}{<k-slovo>}",
+vytiskne "<k-slovo>" zvýraznìné pomocí "\printdg" a vlo¾í poznámku
+pomocí "\printfnote{<pøed>}{<d-slovo>}{<za>}".
+
+\inext {def\nb iidl }{^^B\cbrace}{++}
+
+Makra \db iidgh a \db iidlh dìlají to samé jako jejich non-"h"
+protìj¹ky, jen netisknou slovo v místì výskytu. Lokálnì tedy
+pøedefinujeme, aby "\printdg" nedìlalo nic.
+
+\inext {def\nb iidgh}{\empty}{+-}
+
+Makro \db iidgn pøedefinuje makro "\.<slovo>", které vyrábí enc\TeX,
+tak, ¾e výsledkem expanze je "\fword{<pøed>}{<slovo>}{<za>}"
+(namísto obvyklého "\sword{<slovo>}").
+
+\inext {def\nb iidgn}{\empty}{+-}
+
+A¾ se \db fword spustí (pøi prvním následujícím výskytu "<slova>"), má
+za úkol provést "\iidgh", vytisknout "<slovo>" èervenì a vrátit
+"\.<slovo>" do pùvodního stavu.
+
+\inext {def\nb fword}{\empty}{+-}
+
+Makro \db iidln si ulo¾í stávající význam "\.<slovo>" do
+sekvence "\;<slovo>" a pøedefinuje makro "\.<slovo>",
+které vyrábí enc\TeX, tak, ¾e výsledkem je
+"\flword{<pøed>}{<slovo>}{<za>}".
+
+\inext {def\nb iidln}{\empty}{+-}
+
+Makro \db flword má za úkol provést "\iidlh", vytisknout "<slovo>"
+èervenì a vrátit význam makra "\.<slovo>" do pùvodního stavu (který je ulo¾en
+v sekvenci "\;<slovo>". Byl-li tento pùvodní význam nedefinován, je
+potøeba potlaèit dal¹í èinnost makra "\.<slovo>" registrováním jako
+"\nword{<slovo>}", proto¾e z enc\TeX{}ové tabulky u¾ záznam nelze
+odebrat.
+
+\inext {def\nb flword}{\empty}{+-}
+
+\subsec [specfootnote] Speciální poznámky pod èarou
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Poznámky pod èarou jsou øazeny vedle sebe a obsahují jen slova, která
+mají na stránce své "\dg". Proto¾e toto øe¹ení je vizuálnì
+nekompatibilní s u¾ivatelskými poznámkami pod èarou, jednodu¹e je
+zaká¾eme:
+
+\inext {let\nb footnote=}{\empty}{+-}
+
+Pro speciální poznámky pod èarou vyu¾iji u¾ deklarovaný insert
+"\footins". Problém je, jak odhadnout, kolik zabere vertikálního místa
+v poznámkách jedno slovo, kdy¾ jich mù¾e být vedle sebe
+více. Dirty trick z \TeX{}booku (vkládat inserty ve vý¹ce rovné jistému
+procentu své ¹íøky) se neujal, nebo» zlom èasto nekonvergoval, ale osciloval.
+V druhém prùchodu poznámky teprve dostávají své seznamy stránek a tyto
+seznamy se pak mohou dále upøesòovat, co¾ zpìtnì ovlivní vertikální
+sazbu. Po její zmìnì se mìní seznamy stránek a tak poøád dokola.
+
+Rozhodl jsem se tedy pracovat pouze s prùmìrným koeficientem
+poznámek, který budou mít v¹echny poznámky spoleèný. Tento koeficient
+získám jako celkový poèet øádkù poznámek v celém dokumentu dìlený
+poètem poznámek. Ka¾dá poznámka pak \uv{pøeká¾í} v hlavním vertikálním
+seznamu vý¹kou øádku poznámek (10pt) násobenou tímto koeficientem.
+Staèí tedy nastavit "\count\footins".
+
+Aby problém urèitì konvergoval, bylo nutné fixovat vý¹e uvedený
+koeficient po druhém prùchodu. Kdybych jej ka¾dý následující prùchod
+mìnil, zase se nedoèkáme konvergence. Získat uvedený koeficient hned
+po prvním prùchodu není rozumné, proto¾e v té dobì poznámky je¹tì
+nemají vedle sebe seznamy stránek. Výchozí koeficient pro první a
+druhý prùchod je tedy nastaven na "\count\footins=200" (pøedpokládám
+zhruba pìt poznámek na øádku).
+
+Pracovat s prùmìrem místo s ka¾dou jednotlivou poznámkou mù¾e
+samozøejmì zpùsobit, ¾e nìkteré stránky jsou plnìj¹í a nìkteré
+prázdnìj¹í. Proto je potøeba mít rezervu ve "\skip\footins" a
+vertikálnì pru¾it kolem poznámkové èáry.
+
+\inext {skip\nb footins}{\empty}{+-}
+
+V registru \db totalfoocount se bude postupnì pøièítat jednièka za ka¾dou
+poznámku a na konci zpracování tam tedy je celkový poèet poznámek.
+V registru \db totalfoodim bude na konci zpracování celková vý¹ka
+v¹ech øádkù s poznámkami.
+
+\inext {newcount\nb totalfoocount}{\empty}{+-}
+
+Makro \db specfootnote "{<text>}"
+vlo¾í do insertu "\footins" jediný "\hbox{<text>}" a pøipoète
+jednièku do "\totalfoocount".
+
+\inext {def\nb specfootnote}{\empty}{+-}
+
+Proto¾e jsem se rozhodl nemìnit výstupní rutinu plainu, musel jsem se
+\uv{nabourat} aspoò do její èásti na tisk poznámek pod èarou. Je to
+provedeno pøedefinováním makra "\footnoterule" výstupní rutiny plainu.
+Separátor "\unvbox\footins" zpùsobí odstranìní stejného textu
+z output rutiny plainu.
+
+\inext {def\nb footnoterule}{\empty}{+-}
+
+Makro rozebere vertikální seznam insertù "\footins" a poskládá je
+vedle sebe do boxu~4. Pak nastaví parametry sazby na praporek a
+vypustí box~4 do horizontálního seznamu ("\noindent") ukonèeném
+"\endgraf". Tím jsou ve výstupní rutinì poznámky pod èarou vysázeny.
+Nakonec pøipoèteme "\totalfoodim".
+
+V závìru zpracování v makru "\bye" (viz øádek~\cite[write]) zapí¹eme
+do souboru "\reffile" informaci o~poètu poznámek "<poèet>", o celkové
+vý¹ce øádkù poznámek v dokumentu "<vý¹ka>" a pøidáme aktuální
+koeficient pøíspìvku poznámek do vertikálního seznamu "<koeficient>".
+Informaci zapisujeme jen tehdy, kdy¾ je "\indexbuffer" neprázdný,
+tj. kdy¾ probíhá aspoò druhý prùchod. Kdybychom zapisovali i první
+prùchod, dostali bychom velmi zkreslené informace (poznámky v~tu
+chvíli nemají vedle sebe seznamy stránek).
+%
+Uvedenou informaci zapsanou v pøedchozím prùchodu
+pøeèteme na zaèátku zpracování makrem
+\db refcoef "{<koeficient>}{<poèet>}{<vý¹ka>}" a
+nastavíme podle toho spoleèný koeficient v¹ech poznámek
+"\count\footins". Makro zmìní koeficient z výchozí
+hodnoty 200 na vypoètenou jen jednou. Pøi dal¹ích prùchodech u¾
+zùstává u vypoètené hodnoty.
+Pomocné makro \db gobblerest odstraní cifry za desetinou
+teèkou vèetnì nápisu~"pt".
+
+\inext {def\nb refcoef}{\empty}{+-}
+
+Výstupní rutina "\plainoutput" není zmìnìna. Potøebuji ale uvnitø
+"\output" potlaèit expanzi nìkterých maker, které se objeví v argumentu
+"\write". Tato makra jsou tedy uvnitø "\output" nastavena na "\relax".
+Aby toto nastavení nezmìnilo sazbu záhlaví, je potøeba "\makeheadline"
+provést pøed zmìnou maker a ulo¾it si výsledek do boxu.
+
+\inext {\nb output=}{\empty}{+-}
+
+\subsec [secsec] Sekce, podsekce
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Nejprve zapí¹eme deklarace \db secnum, \db subsecnum,
+\db sectitle, \db ifsavetoc. Poslední deklarace pøipraví
+u¾ivatelské \db savetocfalse.
+
+\ifirst {docby.tex}{newcount\nb secnum}{\empty}{+-}
+
+Makra \db sec a \db subsec mají mo¾nost nepovinného parametru
+"[<lejblík>]", za ním mù¾e a nemusí být mezera, kterou musíme ignorovat.
+Na konci parametru "<titul>" pøed "\par" rovnì¾ mù¾e a nemusí být
+mezera, kterou musíme ignorovat. Dá tedy práci parametry správnì
+naèíst. Makra si ulo¾í svùj název do "\tmpA" a spustí proces naèítání
+parametrù pomocí "\secparam".
+
+\inext {def\nb sec}{\empty}{+-}
+
+Makro \db secparam se vypoøádá s pøípadným nepovinným parametrem
+"[<lejblík>]". Pokud je pøítomen, ulo¾í "<lejblík>" do pomocného makra
+\db seclabel, jinak tam je prázdno. Makro \db secparamA se vypoøádává
+s pøípadnou mezerou za hranatou závorkou "]" a odstraní ji.
+Makro \db secparamB "<titul>\par" naète "<titul>", ale ten mù¾e mít
+ne¾ádoucí mezeru zcela na konci. S tím se vypoøádá makro
+\db nolastspace ve spolupráci s makrem \db setparamC. Poslednì jmenované
+makro ulo¾í u¾ od ne¾ádoucí mezery o¹etøený "<titul>" do "\sectitle" a
+spustí "\iisec" resp. "\iisubsec".
+
+\inext {def\nb secparam}{\empty}{+-}
+
+Makro \db iisec nejprve nastaví hodnoty "\secnum" a "\subsecnum",
+dále definuje \db makelinks, kde je pøipravena tvorba odkazù (to
+pou¾ije makro "\printsec").
+Dále zavolá "\printsec" na vyti¹tìní názvu sekce.
+Poté ulo¾í informace do "\reffile" ve tvaru
+"\reftocline"~"{<secnum>}{<titul>}{<strana>}"
+Nakonec se provede "\mark{<secnum> <titul>}" a
+vlo¾í se závìreèná mezera pomocí "\printsecbelow".
+
+\inext {def\nb iisec}{^^B\cbrace}{++}
+
+Makro \db iisubsec, které vytváøí podsekci, pracuje analogicky, jako
+makro "\iisec".
+
+\inext {def\nb iisubsec}{^^B\cbrace}{++}
+
+Makro "\part" bylo zapracováno dodateènì ve verzi Jan. 2009.
+Registr \db partnum uchovává èíslo èásti a makro \db thepart
+toto èíslo konvertuje na písmeno.
+
+\inext {newcount\nb partnum}{\empty}{+-}
+
+Makro \db part má svou implementaci v makru \db iipart
+podobnì jako napøíklad makro "\sec".
+
+\inext {def\nb part}{\empty}{+-}
+
+\subsec [reference] Odkazy, reference
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Klikací odkazy øe¹í makra \db savelink "[<lejblík>]" a a \db ilink
+"[<lejblík>]{<text>}". Makro "\savelink" ulo¾í do sazby cíl
+odkazu. Cíl odkazu vystrèí do
+vý¹ky \db linkskip nad úèaøí. Makro "\ilink" (èti interní link) je
+dokumentováno v~sekci~\cite[krizodkaz]. Koneènì makro "\savepglink"
+ulo¾í cíl numerického typu (èíslo stránky), který bude vyu¾it makrem
+"\pglink" pøi odkazech na stránky.
+
+\ifirst {docby.tex}{Odkazy, ref}{\empty}{--}
+
+Uvedená makra jsem definoval zvlá¹» pro DVI výstup (jako prázdná
+makra) a zvlá¹» pro PDF výstup. A¾ zase tvùrci pdf\TeX{}u zmìní
+syntaxi nebo názvy primitivù, bude staèit pozmìnit uvedená makra.
+V makru "\ilink" je pøímo øeèeno, ¾e se má pou¾ít modrá barva pro
+vytvoøení odkazù a ¾e odkaz má být bez rámeèku. Pokud to nìkomu
+nevyhovuje, mù¾e si makro pøedefinovat.
+
+Trik s pøedefinováním "\nb" (normální backslash) pøi tvorbì PDF linkù
+vychází ze zku¹enosti, ¾e pokud se v názvu linku objeví backslash,
+nìkteré PDF prohlí¾eèe si s tím neporadí a chovají se podivnì. Je tedy
+nutné, aby argument pøíkazù "\savelink" a "\ilink" byl neexpandovaný.
+
+Makro \db savepglink (definice je v pøedchozím výpisu) je pou¾ito v
+"\headline" ka¾dé stránky, tak¾e vytvoøí cíl \uv{nahoøe} na ka¾dé
+stránce. Makro \db pglink "<number>" pøeète "<number>" (mù¾e být ve
+tvaru numerického registru i pøímo jako èíslo) a vytvoøí link na
+stránku s tímto èíslem. Èíslo samotné je vyti¹tìno modøe a dá se na nì
+kliknout. Ke ètení numerického registru je pou¾it primitiv "\afterassignment"
+a pomocné makro \db dopglink.
+
+V souboru "\jobname.ref" se prostøednictvím makra
+"\labeltext[<lejblík>]{<text>}" ulo¾í øádek, který obsahuje
+"\reflabel"~"{<lejblík>}{<text>}{<strana>}". Makrem \db reflabel tyto
+údaje pøeètu a zapí¹u do kontrolních sekvencí "^^X<lejblík>" a
+"^^Y<lejblík>". Tyto kontrolní sekvence jsou následnì vyu¾ity
+v~makrech \db numref a \db pgref.
+Za pov¹imnutí stojí, ¾e pokud je "<text>" prázdný
+(to jsou napøíklad v¹echny pøípady dokumentovaných slov), pak
+kontrolní sekvenci "^^X<lejblík>" vùbec nedefinuji, abych ¹etøil
+pamìtí, kterou má \TeX{} rezervovánu na kontrolní sekvence.
+
+\inext {reflabel}{\empty}{+-}
+
+Makro \db labeltext "[<lejblík>]{<text>}", jak bylo pøed chvílí
+øeèeno, ulo¾í do souboru potøebné údaje. Jednak zapí¹e PDF link pomocí
+makra "\savelink" a dále ulo¾í do souboru "\reffile" potøebné údaje.
+K tomu je makro \db writelabel "[<lejblík>]{<text>}", které
+pracuje se zpo¾dìným "\write" (aby èíslo strany bylo správnì).
+V okam¾iku naètení parametru
+"<text>" jej potøebuji expandovat, proto¾e tam obvykle bývá nìco jako
+"\the\secnum". Pro vyøe¹ení tohoto problému jsem
+na chvíli prohodil parametry ("<lejblík>" toti¾ nechci
+expandovat) a zavedl pomocné makro
+\db writelabelinternal "{<text>}{<lejblík>}".
+První èást, tj. "\writelabel{<text>}" expanduji pomocí "\edef".
+
+\inext {labeltext}{\empty}{+-}
+
+Makro \db label je u¾ definováno jednodu¹e jako \uv{prázdný}
+"\labeltext".
+
+\inext {label}{\empty}{+-}
+
+Makro \db cite "[<lejblík>]" vytiskne klikatelný text. Pøi chybném
+"<lejblíku>" vytiskne varování na terminál. Makro je dokumentováno
+v~sekci~\cite[krizodkaz].
+
+\inext {cite}{\empty}{+-}
+
+S odkazy souvisí makro \db api "{<slovo>}", které vlo¾í
+"\label[+<slovo>]" dá o sobì vìdìt je¹tì jednou do "\reffile".
+
+\inext {def\nb api}{\empty}{+-}
+
+Makro \db apitext obsahuje text ti¹tìný vedle "<slova>" do obsahu a
+rejstøíku.
+
+Pøi èinnosti makra \db bye zapí¹eme do souboru "\reffile" údaje
+pro "\refcoef" (øádek~\cite[write]) a dále se zabýváme testem
+konzistence referencí.
+
+\ilabel [texttoc] {text\nb tocbuffer}
+\ilabel [vypust] {indexbuffer}
+\ilabel [write] {write\nb reffile}
+\inext {def\nb bye}{^^B\cbrace}{++}
+
+Test konzistence vypadá následovnì: nejprve
+uzavøeme zápis do souboru "\reffile", pak
+pomocí "\setrefchecking" pøedefinujeme
+kontrolní sekvence vyskytující se v "\reffile" a soubor znovu
+naèteme. Nyní makra v nìm napsaná dìlají test a pokud narazí na
+problém, provedou "\continuefalse". Mù¾eme tedy pomocí "\ifcontinue"
+zjistit, jak test dopadl. Po pøeètení souboru je potøeba udìlat je¹tì
+dùkladnou kontrolu v¹ech automatických odkazù. Proè je tato kontrola
+vyøe¹ena vypu¹tìním "\indexbuffer" do vstupní fronty bude jasné po prostudování
+makra \db setrefchecking.
+
+\ilabel[jerelax] {=\nb relax}
+\inext {def\nb setrefchecking}{\empty}{+-}
+
+Zde pøedefinujeme makro "\refcoef", aby nedìlalo nic.
+Dále nová verze "\reflabel" kontroluje, zda odkaz je na stejné stránce, jako byl
+a má stejný text.
+Nové makro "\refuseword" pracuje jako jeho originální protìj¹ek, jen místo
+sekvencí "w:<slovo>" plní sekvence "-<slovo>". Tyto sekvence u¾ známe,
+nyní je vyu¾ijeme jinak. ©etøíme pamìtí \TeX{}u, proto nezakládáme
+sekvence nové. Nejprve je nutné tìmto sekvencím nastavit výchozí
+hodnotu "\relax", co¾ je provedeno na øádku~\cite[jerelax].
+Pak znovu pøedefinuji sekvenci "\,", aby provedla test shodnosti sekvence
+"w:<slovo>" se sekvencí "-<slovo>" a v makru "\bye" na
+øádku~\cite[vypust] spustím tento test expandováním makra
+"\indexbuffer\relax". Kdy¾ makro najde nekonzistenci, ohlásí chybu a
+uteèe pomocí \db ignoretorelax.
+Dále je pøedefinováno makro "\refdg", aby pouze
+zapisovalo do "\tocbuffer". Ostatní makra z "\reffile" také zapisují
+do "\tocbuffer". Stávající verzi "\tocbuffer" ulo¾íme do "\text" a
+"\tocbuffer" se pøi naètení "\reffile" vytvoøí znovu. Na
+øádku~\cite[texttoc], zda se nezmìnil obsah.
+
+\subsec Tvorba obsahu, rejstøíku a zálo¾ek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Obsah i rejstøík se mohou pomocí "\dotoc" a "\doindex" objevit kdekoli
+v dokumentu (tøeba na zaèátku, na konci, uprostøed...). Musíme být
+pøipraveni je kdykoli vytisknout. Soubor "\reffile" z minulého bìhu
+mù¾eme otevøít ke ètení jen na zaèátku, pak jej ma¾eme a zaèínáme
+znova zapisovat. Pøi ètení ze souboru "\reffile" tedy musíme ulo¾it
+v¹echny potøebné informace k sazbì obsahu i rejstøíku. Pou¾íváme na to
+makro "\tocbuffer" a "\indexbuffer". Na zaèátku tyto \uv{buffery}
+vyprázdníme. Makro \db addtext "<text>\to<buffer>" budeme pou¾ívat na
+vkládání "<textu>" do "<bufferu>", èím¾ buffery postupnì naplníme.
+
+\inext {def\nb tocbuffer}{\empty}{+-}
+
+V souboru \db reffile se vyskytují tyto pøíkazy:
+
+{\def\begtthook{\langleactive\catcode`\!=0\mubytein=1}
+\begtt
+\reftocline{<èíslo>}{<název>}{<strana>} % údaje o sekci a subsekci pro obsah
+\refdg{<pøed>}{<slovo>}{<za>}{<k-slovo>} % údaj o pou¾ití \dg, \dl
+\refapiword{<slovo>} % údaj o výskytu \api{<slovo>}
+\refuseword{<slovo>}{<strana>} % údaj o pøímém výskytu <slova>
+\reflabel{<lejblík>}{<text>}{<strana>} % viz sekci !cite[reference], odkazy, reference
+\refcoef{<koeficient>}{<poèet>}{<vý¹ka>} % viz sekci !cite[specfootnote], spec. poznámky
+\refns{<nslejblík>} % viz sekci !cite[ns], jmenné prostory
+\refnsend{<nslejblík>} % viz sekci !cite[ns], jmenné prostory
+\endtt
+\par}
+
+Pøi ètení souboru "\reffile" ukládáme potøebné údaje do
+bufferù. Nejprve se zamìøíme na {\bf obsah} a definujeme
+\db reftocline "{<èíslo>}{<název>}{<strana>}".
+
+\inext {def\nb reftocline}{\empty}{+-}
+
+V \db tocbuffer tedy máme postupnì údaje o v¹ech sekcích a podsekcích v
+za sebou jdoucích sekvencích \db dotocline "{<èíslo>}{<název>}{<strana>}".
+Mezi sekcí a subsekcí rozli¹íme jen podle toho, zda
+parametr "<èíslo>" obsahuje teèku. K tomu slou¾í pomocné makro
+\db istocsec.
+
+\inext {def\nb dotocline}{\empty}{+-}
+
+Kdybychom spustili makro "\tocbuffer", dostaneme obsah. Ale ten se
+neskládá jen z údajù o~sekcích a podsekcích. Je¹tì je potøeba pøeèíst
+\db refdg a \db refapiword, abychom mohli vkládat do obsahu i údaje
+o~dokumentovaných slovech.
+
+\ilabel [right] {right}
+\ilabel [ns1] {\nb dl}
+\ilabel [ns2] {locword}
+\inext {def\nb refdg}{\empty}{+-}
+
+Makro "\refdg" pracuje s parametry "{<pøed>}{<slovo>}{<za>}{<k-slovo>}",
+kde "<pøed>" je text pøed slovem, "<slovo>" je dlouhé slovo, "<za>" obsahuje
+pøípadné závorky "()". Je-li dlouhé slovo rozdílné od krátkého slova
+(pøi pou¾ití "\dl"), obsahuje "<k-slovo>" krátké slovo, jinak je tento
+parametr prázdný.
+Makro "\refdg" ukládá informace nejen do "\tocbuffer",
+ale také do "\indexbuffer". Rovnì¾ pøi prázdném "<k-slovo>" makro
+ukládá "\sword" do enc\TeX{}ové tabulky a pøi
+neprázdném "<k-slovo>" makro cosi kutí se jmennými prostory.
+Nyní je ale na¹e pozornost vìnována tvorbì
+obsahu. Ten vytvoøí makro \db dotoc.
+
+\inext {def\nb dotoc}{\empty}{+-}
+
+{\bf Rejstøík} je vybudován z bufferu \db indexbuffer, ve kterém je seznam
+deklarovaných slov v dokumentu. Ka¾dé slovo je v bufferu zapsáno jako
+kontrolní sekvence (to zabere v pamìti \TeX{}u nejmíò místa) a je
+oddìleno od dal¹í sekvence oddìlovaèem. Pøed zatøídìním podle abecedy
+jsou polo¾ky v~"\indexbuffer" oddìleny èárkami za polo¾kami, po
+zatøídìní jsou polo¾ky oddìleny "\," pøed polo¾kami. Tak¾e obsah
+"\indexbuffer" vypadá zhruba takto:
+
+{\def\begtthook{\langleactive}
+\begtt
+pøed zatøídìním: \-<slovo1> , \-<slovo2> , \-<slovo3> , \-<slovo4> , ...
+po zatøídìní: \, \-<slovoA> \, \-<slovoB> \, \-<slovoC> \, \-<slovoD> ...
+\endtt
+\par}
+
+\noindent Zde zápis "\-<slovo>" znamená jednu kontrolní sekvenci.
+Ka¾dá taková kontrolní sekvence je makrem tvaru "<pøed>\right<za>".
+To zaøídí øádek~\cite[right]. Rejstøík vytiskneme makrem \db doindex.
+
+\ilabel [calculatedimone] {calculatedimone}
+\inext {def\nb doindex }{^^B\cbrace}{++}
+
+Pøíkaz "\calculatedimone" s následujícím testem "\dimen1" souvisí se
+sazbou do dvou sloupcù, co¾ necháme na sekci~\cite[dvasloupce]. Makro
+tedy zalo¾í pøíkazem "\sec" sekci nazvanou "\titindex" a pokud je
+"\indexbuffer" neprázdný, spustí sazbu rejstøíku. Nejprve se pøíkazem
+"\sortindex" setøídí "\indexbuffer" podle abecedy (viz sekci~\cite[abeceda]).
+Pak makro "\doindex" zalo¾í
+dvousloupcovou sazbu ("\begmulti 2") a oddìlovaèi "\," pøidìlí význam
+"\doindexentry". Nakonec vypustí "\indexbuffer" do vstupní fronty,
+tak¾e dal¹í práci opakovanì provede makro \db doindexentry
+"\-<slovo>", které se postará o tisk slova v~rejstøíku.
+
+\inext {def\nb doindexentry}{\empty}{+-}
+
+Makro "\doindexentry" pomocí \db ignoretwo odstraní z kontrolní
+sekvence "\-<slovo>" úvodní dva znaky "\-", tak¾e v "\tmp" zùstane "<slovo>".
+Pokud "<slovo>" zaèíná backslashem, udìláme z nìj makrem
+\db remakebackslash sekvenci "\nb", nebo» pøímý backslash není ulo¾en
+v PDF odkazech (zlobí nìkteré PDF prohlí¾eèe, viz sekci~\cite[reference].
+Nakonec se vytiskne polo¾ka v rejstøíku u¾ známým makrem "\printindexentry".
+
+Pøi tvorbì {\bf strukturovaných zálo¾ek} je potøeba vìdìt, kolik má
+ka¾dý uzel potomkù. Tento údaj je poèítaný pøi ètení "\reffile"
+voláním makra \db addbookmark "<uzel>" (viz makra "\reftocline" a "\refdg").
+Parametr "<uzel>" mù¾e být èíslo sekce, nebo dvojèíslí "<sekce>.<podsekce>".
+V makru \db currb je "<uzel>", ke kterému je potøeba pøièítat potomka
+a \db currsecb je pøípadný nadøazený "<uzel>" sekce.
+Makro "\addbookmark" pøipoète jednièku k hodnotì makra "\bk:<uzel>".
+
+\inext {def\nb addbookmark}{\empty}{+-}
+
+Makro \db bookmarks zalo¾í skupinu, pøedefinuje "\dotocline" a
+"\ptocentry" (tj.~makra obsa¾ená v~"\tocbuffer") vlo¾í první zálo¾ku
+s názvem dokumentu a spustí "\tocbuffer".
+
+\inext {def\nb bookmarks}{^^B\cbrace}{++}
+
+Makro \db setoutline "[<lejblík>]{<text>}{<prefix>}" vytvoøí zálo¾ku
+"<prefix><text>" a prolinkuje ji s cílem oznaèeným "<lejblík>".
+V "\tempnum" musí být ulo¾en poèet potomkù zálo¾ky.
+
+\inext {def\nb setoutline}{\empty}{+-}
+
+V tomto makru je pou¾ito konverzní makro \db cnvbookmark, které je
+implicitnì neaktivní. U¾ivatel mù¾e napøíklad nastavit
+"\let\cnvbookmark=\lowercase"
+a nechat konvertovat pomocí "\lccode" znak "è" na "c", znak "¾" na
+"z", atd. Nastavení "\lccode" musí mít v "\bookmarkshook".
+
+Dále je text pøed vlo¾ením do zálo¾ky podroben konverzi \db nobraces,
+která ve spolupráci s makrem \db nobrA sundá pøípadné závorky "{}".
+Tak¾e, pokud máme tøeba "{\tt text} v \TeX{}u",
+po konverzi dostáváme "text v TeXu".
+
+\subsec [abeceda] Abecední øazení rejstøíku
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Tuto práci provede makro "\sortindex". Pùvodnì bylo v \docbytex{}u
+implementováno algoritmem bubblesort, co¾ vy¹lo na ¹est øádkù makrokódu
+(prezentováno na tutoriálu \TeX{}perience~2008), ale pro vìt¹í
+rejstøíky to bylo pomalé. Napø. pro rejstøík tohoto dokumentu to
+vygenerovalo 52 tisíc dotazù na porovnání a trvalo to asi dvì
+vteøiny. Mùj syn Mirek byl pozorný
+posluchaè tutoriálu, tak¾e nabyté znalosti okam¾itì vyu¾il a pøepsal
+tøídicí makro na mergesort. Ten na stejnì velkém rejstøíku generuje
+1600 dotazù na porovnání, tedy tøicetkrát ménì. Cena za to je
+skuteènost, ¾e makro u¾ nemá jen ¹est øádkù, ale je mírnì
+komplikovanìj¹í. Od mo¾nosti pou¾ít quicksort jsme upustili, proto¾e
+implementace by vy¾adovala vy¹¹í pamì»ové nároky na inputstack
+\TeX{}u.
+
+Nejprve deklarujeme podmínku pro výsledek srovnání dvou polo¾ek
+\db ifAleB a vytvoøíme pomocná makra \db nullbuf, \db return a
+\db fif. Pomocné makro "\return" ve spolupráci se zakrytým "\fi"
+uvnitø "\fif" budeme pou¾ívat pro únik z ko¹atých hluboce vnoøených
+podmínek typu "\if..\else..\fi". Jak uvidíte, makro pracuje na úrovni
+expandprocesoru a nebude potøeba psát ¾ádné "\expandafter".
+
+\inext {newif\nb ifAleB}{\empty}{+-}
+
+Makro \db sortindex vypustí do vstupní fronty celý "\indexbuffer",
+pøimaluje k nìmu "\end,\end", pronuluje "\indexbuffer" a spustí
+"\mergesort".
+
+\inext {def\nb sortindex}{^^B\cbrace}{++}
+
+Makro \db mergesort pracuje tak, ¾e bere ze vstupní fronty v¾dy dvojici skupin
+polo¾ek, ka¾dá skupina je zatøídìná. Skupiny jsou od sebe oddìleny
+èárkami. Tyto dvì skupiny spojí do jedné a zatøídí. Pak pøejde na
+následující dvojici skupin polo¾ek. Jedno zatøídìní tedy vypadá
+napøíklad takto: dvì skupiny: "eimn,bdkz," promìní v~jedinou
+skupinu "bdeikmnz,". V tomto pøíkladì jsou polo¾ky jednotlivá písmena,
+ve skuteènosti jsou to kontrolní sekvence, které obsahují celá slova.
+
+Na poèátku jsou skupiny jednoprvkové ("\indexbuffer" oddìluje ka¾dou
+polo¾ku èárkou). Makro "\mergesort" v tomto pøípadì projde seznam a vytvoøí
+seznam zatøídìných dvoupolo¾kových skupin, ulo¾ený zpìtnì v
+"\indexbuffer". V dal¹ím prùchodu znovu vyvrhne "\indexbuffer" do vstupní fronty,
+vyprázdní ho a startuje znovu. Nyní vznikají ètyøpolo¾kové zatøídìné
+skupiny. Pak osmipolo¾kové~atd. V~závìru (na øádku~\cite[konecsortu])
+je první skupina celá setøídìná a druhá obsahuje "\end", tj.
+v¹echny polo¾ky jsou u¾ setøídìné v první skupinì, tak¾e staèí
+ji ulo¾it do "\indexbuffer" a ukonèit èinnost. Pomocí "\gobblerest"
+odstraníme druhé "\end" ze vstupního proudu.
+
+\noactive{dvojice}
+\ilabel [merge:porovnani] {isAleB}
+\ilabel [merge:trojka] {mergesort p1+}
+\ilabel [merge:p1] {ifx,}
+\ilabel [merge:p2] {fif\nb mergesort\cbrace}
+\ilabel [konecsortu] {empty\nb indexbuffer}
+\ilabel [napercarky] {napercarky}
+\inext {def\nb mergesort }{^^B\cbrace}{++}
+
+{\def\quotehook{\catcode`\<12}
+Jádro "\mergesort" vidíme na øádcích~\cite[merge:porovnani]
+a¾~\cite[merge:trojka]. Makro "\mergesort" sejme ze vstupního proudu
+do "#1" první polo¾ku první skupiny, do "#2" zbytek první skupiny a do
+"#3" první polo¾ku druhé skupiny. Je-li "#1<#3", je do výstupního
+zatøídìného seznamu "\indexbuffer" vlo¾en "#1", ze vstupního proudu je
+"#1" odebrán a "\mergesort" je zavolán znovu. V pøípadì "#3<#1"
+je do "\indexbuffer" vlo¾en "#3", ze vstupního proudu je "#3" odebrán a
+"\mergesort" je zavolán znovu. Øádky~\cite[merge:p1]
+a¾~\cite[merge:p2] øe¹í pøípady, kdy je jedna ze skupin prázdná:
+je potøeba vlo¾it do "\indexbuffer" zbytek neprázdné skupiny a pøejít
+na dal¹í dvojici skupin. Ostatní øádky makra se vyrovnávají se
+skuteèností, ¾e zpracování narazilo na zará¾ku "\end,\end" a je tedy
+potøeba vystartovat dal¹í prùchod.
+\par}
+
+Vlastní srovnání dvou polo¾ek dìlá makro
+\db isAleB "<polA><polB>". Polo¾ky jsou tvaru kontrolní
+sekvence "\-<slovoA>" a "\-<slovoB>".
+Makro konvertuje své parametry pomocí "\string" na øadu znakù a
+expanduje na "\testAleB"~"<slovoA>\relax<slovoB>\relax".
+Navíc je na tento test aplikováno "\lowercase",
+nebo» nerozli¹ujeme pøi øazení mezi velkými a malými písmeny.
+
+\ilabel [teckanula] {0\nb relax}
+%\ilabel [teckajedna] {2.1}
+\inext {def\nb isAleB }{^^B\cbrace}{++}
+
+Makro \db testAleB "<slovoA>\relax<slovoB>\relax" zjistí, zda je
+"<slovoA>" men¹í ne¾ "<slovoB>". Makro volá
+samo sebe, pokud jsou první porovnávané znaky stejné. Rekurze urèitì
+skonèí, nebo» na øádku~\cite[teckanula]
+jsou k porovnávaným slovùm pøipojeny rùzné ocasy.
+
+\inext {def\nb testAleB}{^^B\cbrace}{++}
+
+Makro \db napercarky vlo¾í mezi polo¾ky do "\indexbuffer" separátory "\,".
+To se provede uvnitø "\edef\indexbuffer" na øádku~\cite[napercarky].
+
+\inext {def\nb napercarky}{\empty}{+-}
+
+
+\subsec Transformace seznamu stránek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Ka¾dý výskyt "<slova>"
+ulo¾í do "\reffile" údaj \db refuseword "{<slovo>}{<strana>}", který
+pøeèteme na zaèátku zpracování v dal¹ím prùchodu:
+
+\inext {def\nb refuseword}{^^B\cbrace}{++}
+
+V sekvenci "\w:<slovo>" tedy máme seznam stránek s výskyty "<slova>",
+stránky jsou oddìleny èárkami. Seznam mù¾e vypadat tøeba takto:
+
+\begtt
+2,5,5,10,11,12,12,13,13,13,27
+\endtt
+
+Cílem je takovýto seznam stránek vytisknout ve formátu
+"2, 5, 10--13, 27", tj. odstranit duplicity a nahradit souvisle jdoucí
+øadu stránek zápisem ve tvaru "<od>--<do>". Tuto práci dìlá makro
+\db listofpages "{<slovo>}", které pøedhodí makru "\transf" expandovaný seznam
+stránek ukonèený ",0,".
+
+\inext {def\nb listofpages}{^^B\cbrace}{++}
+
+Makro "\transf" vylouèí ze seznamu stránek ty, které jsou rovny
+\db dgnum a \db apinum. Nechceme toti¾, aby se v seznamu opakovala hlavní
+stránka "<slova>" a podtr¾ená stránka. Tyto stránky jsou vyti¹tìny u¾
+døíve. Deklarujeme uvedené registry:
+
+\inext {newcount\nb apinum}{\empty}{+-}
+
+Kromì toho jsme deklarovali pomocné \db tempnum (aktuálnì zpracovávaná
+stránka), \db ifdash (zda zpracováváme souvislou skupinu stránek
+a vytiskli jsme "--") a
+\db iffirst (zda vkládáme první èíslo, tj. není nutné vlo¾it èárku).
+
+Makro \db transf "<seznam stránek>,0," spustí cyklus pomocí \db cykltransf.
+
+\inext {def\nb transf}{def\nb carka}{++}
+
+Makro "\cykltransf" je takový malý stavový automat. Vìøím, ¾e mu ètenáø
+porozumí bez dal¹ího komentáøe.
+
+\subsec [dvasloupce] Více sloupcù
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Sazba do více sloupcù je kompletnì pøevzata z \TeX{}booku naruby,
+strany 244--246.
+
+\ilabel [dimen1] {dimen1<2}
+\inext {newdimen\nb colsep}{TBN}{++}
+
+Zde navíc øe¹íme problém, ¾e na zaèátku pøepnutí do
+dvou sloupcù pomocí \db begmulti "2" si makro na øádku~\cite[dimen1]
+zkontroluje, zda není blízko dna stránky a v takovém pøípadì zahájí
+dva sloupce a¾ na nové stránce. Ov¹em vypadá hloupì, pokud se kvùli
+tomu ulomí nadpis \uv{Rejstøík} od jeho obsahu. Je tedy potøeba
+provést podobné mìøení stránky u¾ pøed tiskem nadpisu \uv{Rejstøík}.
+K tomu slou¾í makro \db calculatedimone spu¹tìné na
+øádku~\cite[calculatedimone] v makru "\doindex".
+
+\inext {def\nb calculatedimone}{\empty}{+-}
+
+\subsec Závìreèná nastavení, kategorie
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Kategorie je rozumné nastavit a¾ na konci souboru {\tt docby.tex}.
+Na rozdíl od plainu pøidáváme aktivní kategorii pro znak palce a
+nastavujeme podtr¾ítko na obyèejnou kategorii, proto¾e se ve
+zdrojových kódech programù èasto pou¾ívá a vùbec ne ve významu
+matematického indexu. Kdyby mu tento význam zùstal, byly by jen
+potí¾e.
+
+Podtr¾ítko je dal¹í problém. Skoro v¾dy chceme, aby se ve
+vnitøních makrech chovalo jako normální podtr¾ítko, ale kdy¾ tiskneme text s
+podtr¾ítkem fontem, který na dané pozici podtr¾ítko nemá (to je Knuthùv
+odkaz), pak by se to mìlo udìlat plainovským makrem "\_", Toto makro tedy
+schováme do \db subori a pak ho probudíme k~¾ivotu jen v~okam¾iku tisku
+v~makrech "\printsec", "\printsubsec", "\title" a "\normalhead".
+U¾ivatel tedy mù¾e napsat "\sec moje\_funkce" a v~makrech se bude "\_" jako
+obyèejné podtr¾ítko, zatímco pøi tisku v nadpise se pou¾ije "\subori".
+
+\inext {catcode`\nb_}{\empty}{+-}
+
+Nastavením "\everymath" a "\everydisplay" zaruèíme matematikùm stále
+mo¾nost pou¾ívat podtr¾ítko ve významu indexu.
+
+Aktivní palec spustí lokální verbatim prostøedí uvnitø odstavce:
+
+\inext {catcode`\nb}{\empty}{+-}
+
+Makro \db langleactive nastaví aktivní kategorii pro znak je men¹í
+({\tt<}), tak¾e bude mo¾né zapisovat {\tt<text>} a vytiskne se
+"<text>".
+
+\inext {def\nb langleactive}{\empty}{+-}
+
+V tomto dokumentu jsem "\langleactive" pou¾il v makru
+"\quotehook", proto¾e nechat znak {\tt<} aktivní v¹ude nedìlalo dobrotu.
+
+\doindex
+
+\bye
+
+
diff --git a/macros/generic/docbytex/docby.pdf b/macros/generic/docbytex/docby.pdf
new file mode 100644
index 0000000000..fc095ab1e9
--- /dev/null
+++ b/macros/generic/docbytex/docby.pdf
Binary files differ
diff --git a/macros/generic/docbytex/docby.tex b/macros/generic/docbytex/docby.tex
new file mode 100644
index 0000000000..372bee3292
--- /dev/null
+++ b/macros/generic/docbytex/docby.tex
@@ -0,0 +1,1072 @@
+%% docby.tex, Petr Olsak, (C) 2008
+%% dokumentaci k docby.tex vytvorite prikazem csplain docby.d
+
+\def\dbtversion {May 2014} % version of DocBy.TeX
+
+% May 2014: - generated words in ENG if \ehyph, CS if \chyph
+% - \input utf8off introduced
+% Mar. 2011: - fnote: prints short words instead long.
+% - index: printsno braces
+% - \module is able to read name\_of\_modul with underscore
+% Jan. 2009: - ^^I prints eight spaces, no three.
+% - the \part macro introduced
+% Nov. 2008: - fith replaced by xyz
+% - \refns correction
+% - space corrections in \namespace, \endnamespace
+% - run me twice -> run me again
+% Oct. 2008: - first version released
+
+%%%%%%%%%%%%%%%%%% Vyøazení UTF-8 vstupu z encTeXu
+
+\input utf8off \csname clearmubyte\endcsname
+
+%%%%%%%%%%%%%%%%%%% Interní názvy
+
+\def\titmodule{Module}
+\def\tittoc{Table of Contents}
+\def\titindex{Index}
+\def\titversion{version }
+\def\opartname{>> PART}
+\ifx\chyph\undefined
+\else \ifnum\language=0
+ \else
+ \def\titmodule{Modul}
+ \def\tittoc{Obsah}
+ \def\titindex{Rejstøík}
+ \def\titversion{verze }
+ \def\opartname{>> CAST}
+\fi \fi
+
+%%%%%%%%%%%%%%%%%% Vlo¾ené skupiny pøíkazù (hooks)
+
+\def\begtthook{}
+\def\quotehook{}
+\def\indexhook{}
+\def\tochook{}
+\def\bookmarkshook{}
+\def\outputhook{}
+
+%%%%%%%%%%%%%%%%%% Pøíkaz \module a \ins
+
+\def\docsuffix {.d} % implicit filename extension (for \module command)
+\def\module #1 {\endnamespace\namespace{##1./#1}\sec [m:#1] \titmodule\space #1 \par
+ \def\modulename{#1} \input #1\docsuffix\relax
+}
+\def\ins #1 #2 {\ifirst {\modulename.#1}{//: #2}{//:}{--}}
+
+%%%%%%%%%%%%%%%%%% Zelenající komentáøe
+
+\ifx\mubyte\undefined
+ \def\setlinecomment#1{}
+ \def\setlrcomment#1#2{}
+\else
+ \def\setlinecomment#1{\mubyte \linecomment ##0 #1\endmubyte}
+ \def\setlrcomment#1#2{\mubyte \leftcomment ##0 #1\endmubyte
+ \mubyte \rightcomment #2\endmubyte \gdef\rightcomment{#2\returntoBlack}}
+\fi
+
+\def\linecomment {\let\Black=\Green \Green}
+\def\leftcomment {\global\let\Black=\Green \Green}
+
+\def\returntoBlack {\global\let\Black=\oriBlack \Black}
+
+\setlinecomment{//} \setlrcomment{/*}{*/}
+
+%%%%%%%%%%%%%%%%%% Parametry a pomocná makra pro nastavení vzhledu
+
+\parindent=30pt
+
+\newdimen\nwidth \nwidth=\hsize \advance\nwidth by-2\parindent
+
+\raggedbottom
+\exhyphenpenalty=10000
+
+\font\bbf=csb10 at12pt
+\font\bbbf=csb10 at14.4pt
+\font\btt=cstt12
+\font\ttsmall=cstt8
+\font\rmsmall=csr8
+\font\itsmall=csti8
+\font\partfont=csb10 at80pt
+
+\def\setsmallprinting{\ttsmall \let\it=\itsmall \let\rm=\rmsmall
+ \def\ttstrut{\vrule height8pt depth3pt width0pt}%
+ \offinterlineskip \parskip=-1pt\relax
+}
+\def\setnormalprinting{\tt \baselineskip=0pt \hfuzz=4em
+ \def\ttstrut{\vrule height10pt depth3pt width0pt}%
+ \offinterlineskip \parskip=-1pt\relax
+}
+
+\ifx\pdfoutput\undefined
+ \def\setcmykcolor#1{}
+\else
+ \def\setcmykcolor#1{\special{PDF:#1 k}}
+\fi
+\def\Blue{\setcmykcolor{0.9 0.9 0.1 0}}
+\def\Red{\setcmykcolor{0.1 0.9 0.9 0}}
+\def\Brown{\setcmykcolor{0 0.85 0.87 0.5}}
+\def\Green{\setcmykcolor{0.9 0.1 0.9 0.2}}
+\def\Yellow{\setcmykcolor{0.0 0.0 0.3 0.03}}
+\def\Black{\setcmykcolor{0 0 0 1}}
+\let\oriBlack=\Black
+
+\ifx\pdfoutput\undefined
+ \def\rectangle#1#2#3#4{\vbox to0pt{\vss\hrule\kern-.3pt
+ \hbox to#3{\vrule height#1 depth#2\hss#4\hss\vrule}%
+ \kern-.3pt\hrule\kern-#2\kern-.1pt}}
+\else
+ \def\rectangle#1#2#3#4{\vbox to0pt{\vss\hbox to#3{%
+ \rlap{\Yellow \vrule height#1 depth#2 width#3}%
+ \hss#4\Black\hss}\kern-#2}}
+\fi
+
+\def\docbytex {\leavevmode\hbox{DocBy}.\TeX}
+
+%%%%%%%%%%%%%%%%%% Vzhled kapitol a podkapitol
+
+\def\printsec #1{\par
+ \removelastskip\bigskip\medskip
+ \noindent \makelinks
+ \rectangle{16pt}{9pt}{25pt}{\Brown\bbbf\ifsavetoc\the\secnum\else\emptynumber\fi}%
+ \kern5pt{\bbbf\let\_=\subori #1}\par
+}
+\def\printsecbelow {\nobreak\medskip}
+
+\def\printsubsec #1{\par
+ \removelastskip\bigskip
+ \noindent \makelinks
+ \vbox to0pt{\vss
+ \rectangle{16pt}{9pt}{25pt}{\Brown\bf
+ \ifsavetoc\the\secnum.\the\subsecnum\else\emptynumber\fi}\kern-5pt}%
+ \kern5pt{\bbf\let\_=\subori \let\tt=\btt #1}\par
+}
+\def\printsubsecbelow {\nobreak\smallskip}
+
+\def\printpart #1{\par
+ \removelastskip\bigskip\medskip
+ \noindent {\linkskip=60pt\makelinks}%
+ \rectangle{16pt}{9pt}{25pt}{}%
+ \kern-20pt{\Brown\partfont\thepart\Black}\kern10pt{\bbbf #1}\par
+}
+\def\printpartbelow {\nobreak\bigskip}
+
+\def\emptynumber{}
+
+%%%%%%%%%%%%%%%%%%%% Titul, autor
+
+\def\title{\def\tmpA{title}\futurelet\nextchar\secparam}
+\ifx\pdfoutput\undefined
+ \def\iititle {\par
+ \ifx\headtitle\empty\edef\headtitle{\the\sectitle}\fi
+ \noheadline
+ \ifx\projectversion\empty \else
+ \line{\hss\rmsmall\titversion\projectversion}\nobreak\medskip\fi
+ \centerline{\bbbf \let\_=\subori\the\sectitle}\nobreak\medskip}
+\else
+ \def\iititle {\par
+ \ifx\headtitle\empty\edef\headtitle{\the\sectitle}\fi
+ \noheadline
+ \indent\rlap{\rectangle{25pt}{15pt}{\nwidth}{\Black\let\_=\subori\bbbf\the\sectitle}}%
+ \ifx\projectversion\empty \else
+ \hbox to\nwidth{\hss
+ \raise26pt\hbox{\Brown\rmsmall\titversion\projectversion\Black}}\fi
+ \par\nobreak\vskip15pt}
+\fi
+
+\ifx\projectversion\undefined \def\projectversion{}\fi
+
+\def\author #1\par{\centerline{\bf #1\unskip}\smallskip}
+
+%%%%%%%%%%%%%%%%%%%% Hlavièky, patièky
+
+\footline={\hss\rectangle{8pt}{2pt}{25pt}{\tenrm\Black\folio}\hss}
+
+\headline={\normalhead}
+\def\normalhead {\savepglink \let\_=\subori
+ \vbox to0pt{\vss \baselineskip=7pt \lineskiplimit=0pt
+ \line{\indent\Black\tenit \firstmark \hss \headtitle\indent}
+ \line{\indent\Yellow\xleaders\headlinebox\hfil\indent\Black}}}
+
+\def\noheadline {\global\headline={\savepglink\hfil\global\headline={\normalhead}}}
+
+\ifx\headtitle\undefined \def\headtitle {}\fi
+
+\ifx\pdfoutput\undefined
+ \def\headlinebox{\hbox{\kern2pt\rectangle{4pt}{0pt}{4pt}{}\kern2pt}}
+\else
+ \def\headlinebox{\hbox{\kern2pt\vrule height4pt depth0pt width4pt\kern2pt}}
+\fi
+
+%%%%%%%%%%%%%%%%%%%% Tisk cíle odkazu a odkazù pod èarou
+
+\ifx\pdfoutput\undefined
+ \def\printdg#1#2#3{\leavevmode\hbox{\kern-.6pt
+ \vbox{\hrule\hbox{\vrule height8.5pt depth2.5pt \kern.2pt
+ \tt#2\kern.2pt\vrule}\hrule\kern-2.9pt}\kern-.6pt}}
+\else
+ \def\printdg#1#2#3{\leavevmode \setbox0=\hbox{\tt#2}%
+ \Yellow\rlap{\vrule height8.7pt depth2.7pt width\wd0}%
+ \printdginside{#2}{\box0}}
+\fi
+
+\def\printdginside#1#2{\ifnum\pgref[+#1]>-1 {\let\Blue=\Red \ilink[+#1]{#2}}%
+ \else \Red#2\relax\Black\fi}
+
+\def\printfnote #1#2#3#4{%
+ \specfootnote{{\let\Black=\oriBlack \ttsmall #1\Red #4\Black#3\rmsmall
+ \apinum=\pgref[+#2]\relax
+ \ifnum\apinum>-1 :~\lower1.4pt\vbox{\hbox{\pglink\apinum}\kern1pt\hrule}\fi
+ \undef{w:#2}\iftrue \setbox0=\hbox{}\else \dgnum=-1 \setbox0=\hbox{\listofpages{#2}}\fi
+ \ifdim\wd0=0pt \else
+ \ifnum\apinum>-1 , \else :~\fi
+ \unhbox0
+ \fi}}%
+}
+
+%%%%%%%%%%%%%%%%%%%% Tisk údaje v obsahu a rejstøíku
+
+\def\ptocline #1#2#3{%
+ \if^^X#1^^X\advance\partnum by1 \medskip \fi
+ \line{\rectangle{8pt}{1pt}{25pt}{%
+ \if^^X#1^^X\ilink[sec:\thepart]{\bbbf \thepart}\else\ilink[sec:#1]{#1}\fi}\kern5pt
+ {\bf\let\_=\subori #2}\mydotfill\pglink#3}}
+\def\ptocsubline #1#2#3{%
+ \line{\indent\rectangle{8pt}{1pt}{25pt}{\ilink[sec:#1]{#1}}\kern5pt
+ \let\_=\subori #2\mydotfill\pglink#3}}
+\def\mydotfill{\leaders\hbox to5pt{\hss.\hss}\hfil}
+
+\def\ptocentry#1#2#3{\ifhmode,\hskip 7pt plus 20pt minus 3pt \fi
+ \noindent \hbox{\ttsmall \if+#1\apitext\fi \ilink[#1#2]{\ifx^^X#3^^X#2\else#3\fi}}%
+ \nobreak\myldots\pglink\pgref[#1#2]\relax
+}
+\def\myldots{\leaders\hbox to5pt{\hss.\hss}\hskip20pt\relax}
+
+\def\printindexentry #1{%
+ \expandafter \expandafter\expandafter \separeright \csname-#1\endcsname\end
+ \apinum=\pgref[+#1]\relax
+ \leavevmode\llap{\ttsmall \ifnum\apinum>-1 \apitext\fi\tmpa}%
+ {\tt \ilink[@#1]{#1}\tmpb}: {\bf\pglink\pgref[@#1]}%
+ \ifnum\apinum>-1 , $\underline{\pglink\apinum}$\fi
+ \dgnum=\pgref[@#1]\relax
+ \undef{w:#1}\iftrue \setbox0=\hbox{}\else \setbox0=\hbox{\it\listofpages{#1}}\fi
+ \ifdim\wd0=0pt \else, \unhbox0 \fi
+ \hangindent=2\parindent \hangafter=1 \par
+}
+\def\separeright #1\right#2\end{\def\tmpa{#1}\def\tmpb{#2}}
+
+
+%%%%%%%%%%%%%%%%%%%% Tisk zdrojového textu
+
+\ifx\pdfoutput\undefined
+ \def\printiabove{\line{\leaders\specrule\hfill \kern2pt
+ {\ttsmall \Brown\inputfilename}\kern2pt \specrule width\parindent}\nobreak
+ \setsmallprinting}
+ \def\printibelow{\vskip2pt\hrule\medskip}
+ \def\specrule{\vrule height 2pt depth-1.6pt }
+ \def\printiline#1#2{\noindent\ttstrut
+ \hbox to\parindent{\hss#1:\kern.5em}{#2\par}\penalty11 }
+\else
+ \def\printiabove{\smallskip \setsmallprinting}
+ \def\printibelow{\medskip}
+ \def\printiline #1#2{\noindent
+ \rlap{\Yellow \ttstrut width\hsize}%
+ \ifx\isnameprinted\undefined
+ \rlap{\line{\hss \raise8.5pt
+ \hbox{\ttsmall \Brown \vrule height5pt width0pt \inputfilename}}}%
+ \let\isnameprinted=\relax
+ \fi
+ \hbox to\parindent{\hss\Brown#1:\Black\kern.5em}{#2\par}\penalty11 }
+\fi
+
+%%%%%%%%%%%%%%%%%%%% Tisk z prostøedí \begtt, \endtt
+
+\ifx\pdfoutput\undefined
+ \def\printvabove{\smallskip\hrule\nobreak\smallskip\setnormalprinting}
+ \def\printvbelow{\nobreak\smallskip\hrule\smallskip}
+ \def\printvline#1#2{\hbox{\ttstrut\indent#2}\penalty12 }
+\else
+ \def\printvabove{\medskip\Yellow\hrule height2pt \setnormalprinting\nobreak}
+ \def\printvbelow{\Yellow\hrule height2pt \Black\medskip}
+ \def\printvline#1#2{\noindent
+ \rlap{\hbox to\hsize{\Yellow\ttstrut width25pt\hfil
+ \vrule width25pt\Black}}\hbox{\indent#2}\par\penalty12 }
+\fi
+
+%%%%%%%%%%%%%%%%%% Vlo¾ení obrázku
+
+\newdimen\figwidth \figwidth=\hsize \advance\figwidth by-\parindent
+
+\ifx\pdfoutput\undefined
+ \input epsf
+ \def\ifig #1 #2 {\bigskip\indent
+ \hbox{\epsfxsize=#1\figwidth\epsfbox{\figdir#2.eps}}\bigskip}
+\else
+ \def\ifig #1 #2 {\bigskip\indent
+ \hbox{\pdfximage width#1\figwidth {\figdir#2.pdf}%
+ \pdfrefximage\pdflastximage}\bigskip}
+\fi
+\def\figdir{fig/}
+
+%%%%%%%%%%%%%%%%%%%%%%% Vycty
+
+\newcount\itemno
+\def\begitems{\medskip\begingroup\advance\leftskip by\parindent \let\item=\dbtitem}
+\def\dbtitem #1 {\par\advance\itemno by1 \noindent\llap{\ifx*#1$\bullet$\else#1\fi\kern3pt}}
+\def\enditems{\medskip\endgroup}
+
+
+%%%%%%%%%%%%%%%%%%%%%%% Pomocna makra
+
+\def\dbtwarning#1{\immediate\write16{DocBy.TeX WARNING: #1.}}
+
+\def\defsec#1{\expandafter\def\csname#1\endcsname}
+\def\edefsec#1{\expandafter\edef\csname#1\endcsname}
+\def\undef#1\iftrue{\expandafter\ifx\csname#1\endcsname\relax}
+
+{\catcode`\^^I=\active \gdef^^I{\space\space\space\space\space\space\space\space}
+ \catcode`\|=0 \catcode`\\=12 |gdef|nb{\}}
+\bgroup
+ \catcode`\[=1 \catcode`]=2 \catcode`\{=12 \catcode`\}=12 \catcode`\%=12
+ \gdef\obrace[{] \gdef\cbrace[}] \gdef\percent[%]
+\egroup
+\def\inchquote{"}
+
+\def\softinput #1 {\let\next=\relax \openin\infile=#1
+ \ifeof\infile \dbtwarning{The file #1 does not exist, run me again}
+ \else \closein\infile \def\next{\input #1 }\fi
+ \next}
+
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
+
+%%%%%%%%%%%%%%%%%%%% Inicializace
+
+\immediate\write16{This is DocBy.TeX, version \dbtversion, modes:
+ \ifx\mubyte\undefined NO\fi enc+%
+ \ifx\pdfoutput\undefined DVI\else PDF\fi+%
+ \ifnum\language=0 ENG\else CS\fi}
+
+%\ifx\chyph\undefined \else \chyph \fi
+
+\ifx\mubyte\undefined % encTeX ??
+ \dbtwarning{encTeX is not detected}
+ \message{ \space The documented words will be not recognized in source code.}
+ \message{ \space Use pdfetex -ini -enc format.ini to make
+ your format with encTeX support.}
+ \csname newcount\endcsname \mubytein
+ \def\enctextable#1#2{}
+ \def\noactive#1{}
+\else
+ \def\enctextable#1#2{%
+ \def\tmp ##1,#1,##2\end{\ifx^^X##2^^X}%
+ \expandafter \tmp \owordbuffer ,#1,\end
+ \expandafter \mubyte \csname.#1\endcsname #1\endmubyte \fi
+ \expandafter \gdef \csname.#1\endcsname {#2}%
+ }
+ \def\noactive#1{\mubyte \emptysec ##0 #1\endmubyte}
+ \def\emptysec{}
+\fi
+
+\def\sword#1{\ilink[@#1]{#1}\write\reffile{\string\refuseword{#1}{\the\pageno}}}
+
+\def\onlyactive #1#2#3{\enctextable{#1#2#3}{\oword{#1}{#2}{#3}}%
+ \def\tmp ##1,#2,##2\end{\ifx^^X##2^^X}%
+ \expandafter \tmp \owordbuffer ,#2,\end
+ \addtext #2,\to\owordbuffer \noactive{#2}\fi}
+\def\owordbuffer{,}
+\def\oword#1#2#3{#1\undef{.#2}\iftrue #2\else\csname.#2\endcsname\fi #3}
+
+\ifx\pdfoutput\undefined
+ \dbtwarning{pdfTeX is not detected}
+ \message{ \space The document will be without colors and hyperlinks.}
+ \message{ \space Use pdfTeX engine, it means: pdfetex command, for example. }
+\else
+ \pdfoutput=1
+\fi
+
+%%%%%%%%%%%%%%%%%% Makra \ifirst, \inext, \ilabel
+
+\newcount\lineno
+\newcount\ttlineno
+\newif\ifcontinue
+\newif\ifskipping \skippingtrue
+\newread\infile
+
+\def\ifirst #1#2#3#4{\par\readiparamwhy#4..\end
+ \openin\infile=#1 \global\lineno=0
+ \ifeof\infile
+ \dbtwarning {I am not able to open the file "#1" to reading}
+ \else
+ \xdef\inputfilename{#1}
+ \scaniparam #2^^X\tmpa\tmpA \scaniparam #3^^X\tmpb\tmpB
+ {\let~=\space \def\empty{^^B^^E}\let\end=\relax \uccode`\~=`\"\uppercase{\let~}"%
+ \noswords \xdef\act{\noexpand\insinternal {\tmpa}{\tmpb}}}\act
+ \fi
+}
+\def\inext #1#2#3{\par\readiparamwhy#3..\end
+ \ifx\inputfilename\undefined
+ \dbtwarning {use \string\ifirst\space before using of \string\inext}
+ \else
+ \ifeof\infile
+ \dbtwarning {the file "\inputfilename" is completely read}
+ \else
+ \scaniparam #1^^X\tmpa\tmpA \scaniparam #2^^X\tmpb\tmpB
+ {\let~=\space \def\empty{^^B^^E}\let\end=\relax \uccode`\~=`\"\uppercase{\let~}"%
+ \noswords \xdef\act{\noexpand\insinternal{\tmpa}{\tmpb}}}\act
+ \fi\fi
+}
+\def\noswords{\def\sword##1{##1}\def\lword##1{##1}\def\fword##1##2##3{##2}%
+ \let\flword=\fword \def\leftcomment{}\def\returntoBlack{}\def\linecomment{}}
+
+\def\readiparamwhy#1#2#3\end{\let\startline=#1\relax\let\stopline=#2\relax}
+
+\def\scaniparam{\futurelet\nextchar\scaniparamA}
+\def\scaniparamA{\ifx\nextchar\count \expandafter\scaniparamB
+ \else \def\tmp{\scaniparamB \count=1 }\expandafter\tmp
+ \fi}
+\def\scaniparamB \count{\afterassignment\scaniparamC\tempnum}
+\def\scaniparamC #1^^X#2#3{\def#2{#1}\edef#3{\the\tempnum}}
+
+\def\insinternal #1#2{%
+ \bgroup
+ \printiabove % graficke zpracovani zacatku
+ \setverb \catcode`\"=12 \catcode`\^^M=9 \catcode`\^^I=\active
+ \mubytein=1 \obeyspaces \continuetrue \tempnum=\tmpA\relax
+ \def\testline##1#1##2\end{\ifx^^Y##2^^Y\else \nocontinue \fi}%
+ \ifx^^X#1^^X\def\testline##1\end{\nocontinue}\fi
+ \loop % preskakovani radku
+ \ifeof\infile \returninsinternal{Text "#1" not found (\string\count=\the\tempnum)}{}\fi
+ \readnewline
+ \expandafter \testline \expandafter^^B\etext ^^E#1\end
+ \ifcontinue \repeat
+ \let\lastline=\empty
+ \continuetrue \tempnum=\tmpB\relax
+ \def\testline##1#2##2\end{\ifx^^Y##2^^Y\else \nocontinue \fi}%
+ \ifx^^X#2^^X\def\testline##1\end{\nocontinue}\fi
+ \ifx+\startline \printilineA
+ \expandafter \testline \expandafter ^^B\etext ^^E#2\end
+ \ifcontinue\else\returninsinternal{}\fi
+ \readnewline
+ \else
+ \readnewline
+ \ifskipping\ifx\text\empty \readnewline \fi\fi
+ \fi
+ \loop % pretisk radku
+ \expandafter \testline \expandafter ^^B\etext ^^E#2\end
+ \ifcontinue
+ \printilineA
+ \ifeof\infile \returninsinternal{}\fi
+ \readnewline \repeat
+ \ifx+\stopline \printilineA
+ \ifx\lastline\relax \else \printiline{\lastline}{}\relax\fi
+ \fi
+ \global\let\Black=\oriBlack % pokud jsme skoncili vypis uvnitr komentare
+ \printibelow % graficke zpracovani konce
+ \egroup\gdef\ilabellist{}\Black
+}
+\def\nocontinue{\advance\tempnum by-1 \ifnum\tempnum<1 \continuefalse \fi}
+
+\def\returninsinternal #1#2#3\printibelow{%
+ \ifx^^X#1^^X\else
+ \dbtwarning{#1 in file \inputfilename}\fi
+ #2\fi\printibelow
+}
+\def\readnewline {\read\infile to\text \global\advance\lineno by1\relax
+ {\noswords \xdef\etext{\text}}}
+
+\def\printilineA {%
+ \ifskipping\else \ifx\text\empty \def\text{ }\fi\fi % trik pro pripad \skippingfalse
+ \ifx\text\empty
+ \ifx\lastline\empty % nacten prvni prazdny radek
+ \let\lastline=\relax
+ \else % nacten pozdejsi prazdny radek
+ \ifx\lastline\relax \else \printiline{\lastline}{}\relax\fi
+ \edef\lastline{\the\lineno}%
+ \fi
+ \else % nacten plny radek
+ \ifx\lastline\empty \let\lastline=\relax \fi
+ \ifx\lastline\relax \else \printiline{\lastline}{}\relax\fi
+ \printiline{\the\lineno}{\text}\relax
+ \let\lastline=\relax
+ \fi \ilabellist
+}
+\def\ilabellist {}
+\def\ilabel [#1]#2{{\noswords\edef\act{\noexpand\ilabelee{#1}{#2}}\expandafter}\act}
+\def\ilabelee #1#2{\expandafter\def\expandafter\ilabellist\expandafter{%
+ \ilabellist \expandafter\testilabel\etext\end{#1}{#2}}
+}
+\def\testilabel#1\end#2#3{%
+ \def\tmp ##1#3##2\end{\ifx^^Y##2^^Y\else
+ \undef{d:#2}\iftrue \defsec{d:#2}{}\labeltext[#2]{\the\lineno}\fi\fi}
+ \tmp^^B#1^^E#3\end
+}
+
+%%%%%%%%%%%%%%%%%% Pøíkazy \begtt, \endtt
+
+\def\begtt {\bgroup\printvabove
+ \setverb \catcode`\"=12 \catcode`\^^M=12 \obeyspaces
+ \begtthook\relax \startverb}
+{\catcode`\|=0 \catcode`\^^M=12 \catcode`\\=12 %
+ |gdef|startverb^^M#1\endtt{|runttloop#1|end^^M}%
+ |gdef|runttloop#1^^M{|ifx|end#1 |expandafter|endttloop%
+ |else|global|advance|ttlineno by1 %
+ |printvline{|the|ttlineno}{#1}|relax|expandafter|runttloop|fi}} %
+\def\endttloop#1{\printvbelow\egroup\futurelet\nextchar\scannexttoken}
+\long\def\scannexttoken{\ifx\nextchar\par\else\noindent\fi}
+
+%%%%%%%%%%%%%%%%%%%% Jmenne prostory
+
+\def\namespacemacro#1{}
+
+\def\namespace #1{%
+ \let\tmp=\namespacemacro
+ \gdef\namespacemacro##1{#1}%
+ \global\expandafter\let\csname no:\namespacemacro{@!}\endcsname\tmp
+ \ewrite{\string\refns{\namespacemacro{@!}}}%
+ \def\locword##1{%
+ \global\expandafter\let
+ \csname\namespacemacro{@!},##1\expandafter\endcsname\csname.##1\endcsname
+ \enctextable{##1}{\lword{##1}}}%
+ \csname ns:\namespacemacro{@!}\endcsname
+}
+\def\endnamespace{\if^^X\namespacemacro{@!}^^X\else
+ \def\locword##1{%
+ \global\expandafter\let
+ \csname.##1\expandafter\endcsname\csname\namespacemacro{@!},##1\endcsname
+ \undef{.##1}\iftrue \noactive{##1}\fi}%
+ \csname ns:\namespacemacro{@!}\endcsname
+ \ewrite{\string\refnsend{\namespacemacro{@!}}}%
+ \global\expandafter\let\expandafter\namespacemacro\csname no:\namespacemacro{@!}\endcsname
+ \fi
+}
+\def\ewrite#1{{\let\nb=\relax \edef\act{\write\reffile{#1}}\act}}
+
+\def\lword#1{\genlongword\tmp{#1}\ilink[@\tmp]{#1}%
+ \ewrite{\string\refuseword{\tmp}{\noexpand\the\pageno}}}
+\def\genlongword#1#2{\expandafter\def\expandafter#1\expandafter{\namespacemacro{#2}}}
+
+\def\refns#1{\edefsec{o:#1}{\currns}
+ \edef\currns{#1}\undef{ns:\currns}\iftrue \defsec{ns:\currns}{}\fi}
+\def\refnsend#1{\edef\currns{\csname o:#1\endcsname}}
+\def\currns{}
+
+%%%%%%%%%%%%%%%%%%%% \dg a pratele
+
+\def\dg{\def\tmpA{dg}\dgpar} \def\dgn{\def\tmpA{dgn}\dgpar} \def\dgh{\def\tmpA{dgh}\dgpar}
+\def\dl{\def\tmpA{dl}\dgpar} \def\dln{\def\tmpA{dln}\dgpar} \def\dlh{\def\tmpA{dlh}\dgpar}
+
+\def\dgpar {\futurelet\nextchar\dgparA}
+\def\dgparA {\ifx\nextchar[\def\tmp{\dparam}\else\def\tmp{\dparam[]}\fi\tmp}
+
+\def\dparam [#1]#2 {%
+ \def\printbrackets{}%
+ \ifx^^X#2^^X\nextdparam{#1}\fi
+ \def\tmpa{#2}\def\tmpb{}%
+ \varparam,\tmpa, \varparam.\tmpa. \varparam;\tmpa; \varparam:\tmpa:
+ \expandafter\managebrackets\tmpa()\end
+ {\let\nb=\relax
+ \edef\act{\expandafter\noexpand \csname ii\tmpA\endcsname{#1}{\tmpa}{\printbrackets}}%
+ \expandafter}\act
+ \tmpb \if|\expandafter\ignoretwo\tmpA|\expandafter\maybespace\fi
+}
+\def\nextdparam#1#2\maybespace\fi{\fi\dparam[#1 ]}
+
+\def\varparam#1{\def\tmp ##1#1##2 {\def\tmpa{##1}\if^^X##2^^X\else
+ \expandafter\gobblelast\tmpb\end#1##2\fi}%
+ \expandafter\tmp}
+\def\gobblelast#1\end#2{\def\tmp##1#2{\def\tmpb{#2##1#1}}\tmp}
+
+\def\managebrackets #1()#2\end{\def\tmpa{#1}%
+ \if|#2|\else\def\printbrackets{()}\fi}
+
+\def\maybespace{\futurelet\tmp\domaybespace}
+\def\domaybespace{\let\next=\space
+ \ifx\tmp`\def\next##1{}\fi
+ \next}
+
+\def\iidg #1#2#3{%
+ \enctextable{#2}{\sword{#2}}%
+ \label [@#2]%
+ \write\reffile{\string\refdg{#1}{#2}{#3}{}}%
+ \printdg{#1}{#2}{#3}%
+ \printfnote{#1}{#2}{#3}{#2}%
+}
+\def\iidl #1#2#3{%
+ \genlongword\tmpB{#2}%
+ \ifx\tmpB\empty \dbtwarning{\string\dl\space#2 outside namespace, ignored}%
+ \else
+ \expandafter\label\expandafter [\expandafter @\tmpB]%
+ \ewrite{\string\refdg{#1}{\tmpB}{#3}{#2}}%
+ \printdg{#1}{#2}{#3}%
+ \printfnote{#1}{\tmpB}{#3}{#2}%
+ \fi
+}
+\def\iidgh#1#2#3{{\def\printdg##1##2##3{}\iidg{#1}{#2}{#3}}}
+\def\iidlh#1#2#3{{\def\printdg##1##2##3{}\iidl{#1}{#2}{#3}}}
+
+\def\iidgn#1#2#3{\enctextable{#2}{\fword{#1}{#2}{#3}}}
+
+\def\fword#1#2#3{\iidgh{#1}{#2}{#3}\printdginside{#2}{#2}}
+
+\def\iidln#1#2#3{%
+ \global\expandafter\let\csname;#2\expandafter\endcsname\csname.#2\endcsname
+ \enctextable{#2}{\flword{#1}{#2}{#3}}}
+
+\def\flword#1#2#3{\iidlh{#1}{#2}{#3}\printdginside{#2}{#2}%
+ \global\expandafter\let\csname.#2\expandafter\endcsname\csname;#2\endcsname
+ \undef{.#2}\iftrue \noactive{#2}\fi}
+
+%%%%%%%%%%%%%%%%%% Specialni poznamky pod carou
+
+\let\footnote=\undefined
+
+\skip\footins=18pt
+\dimen\footins=\vsize
+\count\footins=200
+
+\newcount\totalfoocount
+\newdimen\totalfoodim
+
+\def\specfootnote#1{\insert\footins\bgroup
+ \let\tt=\ttsmall \rmsmall
+ \floatingpenalty=20000 \setbox0=\hbox{#1}%
+ \ht0=10pt \dp0=0pt \box0 \egroup
+ \global\advance\totalfoocount by1
+}
+
+\def\footnoterule \unvbox\footins {
+ \vskip-12pt \vfil
+ \moveright\parindent\vbox{\hsize=\nwidth \hrule
+ \setbox2=\vbox{\unvbox\footins \unskip
+ \setbox2=\lastbox
+ \global\setbox4=\hbox{\unhbox2}
+ \loop \unskip\unskip\unpenalty
+ \setbox2=\lastbox
+ \ifhbox2 \global\setbox4=
+ \hbox{\unhbox2 \penalty-300\hskip15pt plus5pt \unhbox4}
+ \repeat}
+ \setbox2=\vbox{\hbox{} \parskip=0pt
+ \lineskiplimit=0pt \baselineskip=10pt \raggedright \rightskip=0pt plus7em
+ \leftskip=0pt \hyphenpenalty=10000 \noindent \Black \unhbox4 }
+ \global\advance\totalfoodim by\ht2 \unvbox2}
+}
+
+\def\refcoef#1#2#3{%
+ \ifnum#1=200 % jsme na zacatku tretiho pruchodu
+ \dimen0=#3 \divide\dimen0 by #2
+ \multiply \dimen0 by100
+ \afterassignment\gobblerest \count\footins=\the\dimen0 \end
+ \else \count\footins=#1
+ \fi
+ \message{foot-coef: \the\count\footins}
+}
+\def\gobblerest #1\end{}
+
+\output={\setbox0=\makeheadline \def\makeheadline{\box0\nointerlineskip}
+ \let~=\relax \let\nb=\relax \let\TeX=\relax \let\docbytex=\relax \let\_=\relax \let\tt=\relax
+ \outputhook \plainoutput }
+
+
+%%%%%%%%%%%%%%%%%% Kapitoly, podkapitoly
+
+\newcount\secnum
+\newcount\subsecnum
+\newtoks\sectitle
+\newif\ifsavetoc \savetoctrue
+
+\def\sec{\def\tmpA{sec}\futurelet\nextchar\secparam}
+\def\subsec{\def\tmpA{subsec}\futurelet\nextchar\secparam}
+
+\def\secparam{\ifx\nextchar[%
+ \def\tmp[##1]{\def\seclabel{##1}\futurelet\nextchar\secparamA}%
+ \expandafter\tmp
+ \else \def\seclabel{}\expandafter\secparamB\fi
+}
+\def\secparamA{\expandafter\ifx\space\nextchar
+ \def\tmp{\afterassignment\secparamB\let\next= }\expandafter\tmp
+ \else \expandafter\secparamB \fi
+}
+\def\secparamB #1\par{\nolastspace #1^^X ^^X\end}
+\def\nolastspace #1 ^^X#2\end{\ifx^^X#2^^X\secparamC #1\else \secparamC #1^^X\fi}
+\def\secparamC #1^^X{\sectitle={#1}\csname ii\tmpA\endcsname}
+
+\def\iisec{%
+ \ifsavetoc \global\advance\secnum by1 \global\subsecnum=0 \fi
+ \edef\makelinks{%
+ \ifsavetoc \noexpand\savelink[sec:\the\secnum]\fi
+ \if^^X\seclabel^^X\else \noexpand\labeltext[\seclabel]{\the\secnum}\fi}
+ \expandafter \printsec \expandafter{\the\sectitle}% vlozi horni mezeru, text, nakonec \par
+ \ifsavetoc
+ \ewrite {\string\reftocline{\the\secnum}{\the\sectitle}{\noexpand\the\pageno}}\fi
+ \mark{\ifsavetoc \the\secnum\space \else
+ \ifx\emptynumber\empty\else\emptynumber\space\fi\fi \the\sectitle}
+ \savetoctrue \printsecbelow
+}
+\def\iisubsec {%
+ \ifsavetoc \global\advance\subsecnum by1 \fi
+ \edef\makelinks{%
+ \ifsavetoc \noexpand\savelink[sec:\the\secnum.\the\subsecnum]\fi
+ \if^^X\seclabel^^X\else \noexpand\labeltext[\seclabel]{\the\secnum.\the\subsecnum}\fi}
+ \expandafter \printsubsec \expandafter{\the\sectitle}% vlozi horni mezeru, text, nakonec \par
+ \ifsavetoc \ewrite
+ {\string\reftocline{\the\secnum.\the\subsecnum}{\the\sectitle}{\noexpand\the\pageno}}\fi
+ \savetoctrue \printsubsecbelow
+}
+
+%%%%%%%%%%%%%%%%%%%%%%% Part (doplneno leden 2009)
+
+\newcount\partnum
+\def\thepart{\ifcase\partnum --\or A\or B\or C\or D\or E\or F\or G\or
+ H\or I\or J\or K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or
+ U\or V\or W\or X\or Y\or Z\else +\the\partnum\fi}
+
+\def\part{\def\tmpA{part}\futurelet\nextchar\secparam}
+\def\iipart{%
+ \ifsavetoc \global\advance\partnum by1 \fi
+ \edef\makelinks{%
+ \ifsavetoc \noexpand\savelink[sec:\thepart]\fi
+ \if^^X\seclabel^^X\else \noexpand\labeltext[\seclabel]{\thepart}\fi}
+ \expandafter \printpart \expandafter{\the\sectitle}% vlozi horni mezeru, text, nakonec \par
+ \ifsavetoc
+ \ewrite {\string\reftocline{}{\the\sectitle}{\noexpand\the\pageno}}\fi
+ \savetoctrue \printpartbelow
+}
+
+%%%%%%%%%%%%%%%%%%%%%%% Odkazy, reference
+
+\ifx\pdfoutput\undefined
+ \def\savelink[#1]{}
+ \def\ilink [#1]#2{#2}
+ \def\savepglink{}
+ \def\pglink{\afterassignment\dopglink\tempnum=}
+ \def\dopglink{\the\tempnum}
+ \def\ulink[#1]#2{#2}
+\else
+ \def\savelink[#1]{\ifvmode\nointerlineskip\fi
+ \vbox to0pt{\def\nb{/_}\vss\pdfdest name{#1} xyz\vskip\linkskip}}
+ \def\ilink [#1]#2{{\def\nb{/_}\pdfstartlink height 9pt depth 3pt
+ attr{/Border[0 0 0]} goto name{#1}}\Blue#2\Black\pdfendlink}
+ \def\savepglink{\ifnum\pageno=1 \pdfdest name{sec::start} xyz\relax\fi % viz \bookmarks
+ \pdfdest num\pageno fitv\relax}
+ \def\pglink{\afterassignment\dopglink\tempnum=}
+ \def\dopglink{\pdfstartlink height 9pt depth 3pt
+ attr{/Border[0 0 0]} goto num\tempnum\relax\Blue\the\tempnum\Black\pdfendlink}
+ \def\ulink[#1]#2{\pdfstartlink height 9pt depth 3pt
+ user{/Border[0 0 0]/Subtype/Link/A << /Type/Action/S/URI/URI(#1)>>}\relax
+ \Green{\tt #2}\Black\pdfendlink}
+\fi
+\newdimen\linkskip \linkskip=12pt
+
+\def\reflabel #1#2#3{%
+ \undef{^^Y#1}\iftrue
+ \ifx^^X#2^^X\else\defsec{^^X#1}{#2}\fi
+ \defsec{^^Y#1}{#3}%
+ \else
+ \dbtwarning{The label [#1] is declared twice}%
+ \fi
+}
+\def\numref [#1]{\undef{^^X#1}\iftrue \else \csname^^X#1\endcsname\fi}
+\def\pgref [#1]{\undef{^^Y#1}\iftrue-1000\else \csname^^Y#1\endcsname\fi}
+
+\def\labeltext[#1]#2{\savelink[#1]\writelabel[#1]{#2}}
+\def\writelabel[#1]#2{\edef\tmp{\noexpand\writelabelinternal{#2}}\tmp{#1}}
+\def\writelabelinternal#1#2{\write\reffile{\string\reflabel{#2}{#1}{\the\pageno}}}
+
+\def\label[#1]{\labeltext[#1]{}}
+
+\def\cite[#1]{\ifnum \pgref[#1]=-1000
+ \dbtwarning{label [#1] is undeclared}\Red??\Black
+ \else \edef\tmp{\numref[#1]}%
+ \ifx\tmp\empty \edef\tmp{\pgref[#1]}\fi
+ \ilink[#1]{\tmp}%
+ \fi
+}
+
+\def\api #1{\label[+#1]\write\reffile{\string\refapiword{#1}}}
+\def\apitext{$\succ$}
+
+\def\bye{\par\vfill\supereject
+ \ifx\indexbuffer\empty \else % jsme ve druhem a dalsim pruchodu
+ \immediate\write\reffile{\string\refcoef
+ {\the\count\footins}{\the\totalfoocount}{\the\totalfoodim}}
+ \immediate\closeout\reffile
+ \setrefchecking \continuetrue \input \jobname.ref
+ \ifcontinue \indexbuffer \relax \fi
+ \ifcontinue \ifx\text\tocbuffer \else
+ \continuefalse \dbtwarning{toc-references are inconsistent, run me again}\fi
+ \fi
+ \ifcontinue \immediate\write16{DocBy.TeX: OK, all references are consistent.}\fi
+ \fi
+ \end
+}
+\def\setrefchecking{\catcode`\"=12
+ \def\refcoef##1##2##3{}
+ \def\reflabel##1##2##3{\def\tmp{##3}\let\next=\relax
+ \expandafter\ifx\csname^^Y##1\endcsname \tmp
+ \ifx^^X##2^^X\else
+ \def\tmp{##2} \expandafter \ifx \csname^^X##1\endcsname \tmp \else
+ \continuefalse
+ \dbtwarning{text references are inconsistent, run me again}
+ \let\next=\endinput
+ \fi\fi
+ \else
+ \continuefalse
+ \dbtwarning{page references are inconsistent, run me again}
+ \let\next=\endinput
+ \fi\next}
+ \def\refuseword##1##2{\expandafter \ifx\csname -##1\endcsname \relax
+ \defsec{-##1}{##2}\else \edefsec{-##1}{\csname -##1\endcsname,##2}\fi}
+ \def\refdg##1##2##3##4{\addtext\ptocentry @{##2}{##4}\to\tocbuffer}
+ \let\text=\tocbuffer \def\tocbuffer{}
+ \def\,##1{\let##1=\relax}\indexbuffer
+ \def\,##1{\edef\tmp{\expandafter\ignoretwo \string ##1}%
+ \expandafter\ifx \csname w:\tmp\endcsname ##1\else
+ \continuefalse
+ \dbtwarning{auto-references are inconsistent, run me again}
+ \expandafter\ignoretorelax \fi}
+}
+\def\ignoretorelax #1\relax{}
+
+%%%%%%%%%%%%%%%%%% Tvorba obsahu a rejstriku
+
+\def\tocbuffer{}
+\def\indexbuffer{}
+\def\addtext #1\to#2{\expandafter\gdef\expandafter#2\expandafter{#2#1}}
+
+\def\reftocline#1#2#3{\def\currb{#1}%
+ \istocsec#1.\iftrue \def\currsecb{#1}\else \addbookmark\currsecb \fi
+ \addtext\dotocline{#1}{#2}{#3}\to\tocbuffer}
+
+\def\dotocline#1#2#3{\par
+ \istocsec#1.\iftrue \ptocline{#1}{#2}{#3}\else \ptocsubline{#1}{#2}{#3}\fi}
+\def\istocsec#1.#2\iftrue{\if^^X#2^^X}
+
+\def\refdg#1#2#3#4{%
+ \edefsec{-#2}{#1\noexpand\right\if!#4!#3\fi}
+ \expandafter\addtext\csname-#2\endcsname,\to\indexbuffer
+ \addbookmark\currb
+ \addtext\ptocentry @{#2}{#4}\to\tocbuffer
+ \ifx^^X#4^^X\enctextable{#2}{\sword{#2}} % slovo je z \dg
+ \else \expandafter\def\csname ns:\currns % slovo je z \dl
+ \expandafter\expandafter\expandafter\endcsname
+ \expandafter\expandafter\expandafter
+ {\csname ns:\currns\endcsname \locword{#4}}
+ \fi
+}
+\def\refapiword#1{\addbookmark\currb \addtext\ptocentry +{#1}{}\to\tocbuffer}
+
+\def\dotoc{\bgroup \savetocfalse \sec \tittoc \par \smallskip
+ \leftskip=\parindent \rightskip=\parindent plus .5\hsize
+ \tochook \tocbuffer \par\egroup}
+
+\def\doindex {\par\penalty0
+ \calculatedimone
+ \ifdim\dimen1<7\baselineskip \vfil\break \fi
+ \sec \titindex \par
+ \ifx\indexbuffer\empty
+ \dbtwarning {index is empty, run me again}
+ \else
+ \message{DocBy.TeX: sorting index...}
+ \sortindex
+ \indexhook
+ \vskip-\baselineskip
+ \begmulti 2 \rightskip=0pt plus5em \parfillskip=0pt plus2em
+ \widowpenalty=0 \clubpenalty=0
+ \let\,=\doindexentry \indexbuffer \endmulti
+ \fi
+}
+\def\doindexentry #1{%
+ \edef\tmp{\expandafter\ignoretwo \string #1}%
+ \expandafter \remakebackslash \tmp\end
+ \expandafter \printindexentry \expandafter {\tmp}%
+}
+\def\remakebackslash#1#2\end{\if#1\nb \def\tmp{\nb#2}\fi}
+\def\ignoretwo #1#2{}
+
+\def\addbookmark#1{\undef{bk:#1}\iftrue\defsec{bk:#1}{1}%
+ \else \tempnum=\csname bk:#1\endcsname\relax
+ \advance\tempnum by1
+ \edefsec{bk:#1}{\the\tempnum}
+ \fi}
+\def\currb{} % vychozi hodnota <uzel> pro jistotu
+
+\def\bookmarks{\ifx\pdfoutput\undefined \else
+ \bgroup
+ \def\dotocline##1##2##3{%
+ \undef{bk:##1}\iftrue \tempnum=0 \else \tempnum=\csname bk:##1\endcsname\relax\fi
+ \if^^X##1^^X\advance\partnum by1
+ \setoutline[sec:\thepart]{##2}{\opartname\space\thepart: }%
+ \else \setoutline[sec:##1]{##2}{}\fi}
+ \def\ptocentry##1##2##3{\edef\tmpb{\ifx^^X##3^^X##2\else##3\fi}%
+ \tempnum=0 \setoutline[##1##2]{\tmpb}{}}%
+ \def\nb{\string\\}\def\TeX{TeX}\def\docbytex{DocBy.TeX}\def\_{_}\def\tt{}\def~{ }%
+ \def\unskip{}\bookmarkshook
+ \ifx\headtile\empty \else
+ \tempnum=0 \setoutline[sec::start]{...\headtitle\empty...}{}\fi % viz \savepglink
+ \tocbuffer
+ \egroup \fi
+}
+\def\setoutline[#1]#2#3{{\def\nb{/_}\xdef\tmp{#1}}%
+ \def\tmpa{\pdfoutline goto name{\tmp} count -\tempnum}%
+ \cnvbookmark{\tmpa{#3\nobraces#2{\end}}}%
+}
+\def\cnvbookmark#1{#1} % zadna konverze
+\def\nobraces#1#{#1\nobrA}
+\def\nobrA#1{\ifx\end#1\empty\else\nobraces#1\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%% Razeni podle abecedy
+
+\newif\ifAleB
+\def\nullbuf{\def\indexbuffer{}}
+\def\return#1#2\fi\relax{#1} \def\fif{\fi}
+
+\def\sortindex{\expandafter\nullbuf
+ \expandafter\mergesort\indexbuffer\end,\end
+}
+\def\mergesort #1#2,#3{%
+ \ifx,#1 % prazdna-skupina,neco, (#2=neco #3=pokracovani)
+ \addtext#2,\to\indexbuffer % dvojice skupin vyresena
+ \return{\fif\mergesort#3}% % \mergesort pokracovani
+ \fi
+ \ifx,#3 % neco,prazna-skupina, (#1#2=neco #3=,)
+ \addtext#1#2,\to\indexbuffer % dvojice skupin vyresena
+ \return{\fif\mergesort}% % \mergesort dalsi
+ \fi
+ \ifx\end#3 % neco,konec (#1#2=neco)
+ \ifx\empty\indexbuffer % neco=kompletni setrideny seznam
+ \edef\indexbuffer{\napercarky#1#2\end}% % vlozim \, mezi polozky
+ \return{\fif\fif\gobblerest}% % koncim
+ \else % neco=posledni skupina nebo \end
+ \return{\fif\fif \expandafter\nullbuf % spojim \indexbuffer+neco a cele znova
+ \expandafter\mergesort\indexbuffer#1#2,#3}%
+ \fi\fi % zatriduji: p1+neco1,p2+neco2, (#1#2=p1+neco1 #3=p2)
+ \isAleB #1#3\ifAleB % p1<p2
+ \addtext#1\to\indexbuffer % p1 do bufferu
+ \return{\fif\mergesort#2,#3}% % \mergesort neco1,p2+neco2,
+ \else % p1>p2
+ \addtext#3\to\indexbuffer % p2 do bufferu
+ \return{\fif\mergesort#1#2,}% % \mergesort p1+neco1,neco2,
+ \fi
+ \relax % zarazka, na ktere se zastavi \return
+}
+\def\isAleB #1#2{%
+ \edef\tmp{\expandafter\ignoretwo\string#1&0\relax\expandafter\ignoretwo\string#2&1\relax}%
+ \lowercase \expandafter {\expandafter \testAleB \tmp}%
+}
+\def\testAleB #1#2\relax #3#4\relax {%
+ \ifx #1#3\testAleB #2\relax #4\relax \else
+ \ifnum `#1<`#3 \AleBtrue \else \AleBfalse \fi
+ \fi
+}
+\def\napercarky#1{\ifx#1\end \else
+ \noexpand\,\noexpand#1\expandafter\napercarky
+ \fi
+}
+
+
+%%%%%%%%%% pageno transformations
+
+\def\refuseword#1#2{%
+ \expandafter \ifx\csname w:#1\endcsname \relax
+ \defsec{w:#1}{#2}
+ \else
+ \edefsec{w:#1}{\csname w:#1\endcsname,#2}
+ \fi
+}
+\def\listofpages#1{%
+ \expandafter\expandafter\expandafter \transf\csname w:#1\endcsname,0,%
+}
+
+\newcount\apinum
+\newcount\dgnum
+\newcount\tempnum
+\newif\ifdash
+\newif\iffirst
+
+\def\transf{\dashfalse \firsttrue \tempnum=-100 \bgroup \cykltransf}
+
+\def\cykltransf #1,{\ifnum #1=\apinum \else \ifnum #1=\dgnum \else
+ \ifnum #1=0 \let\cykltransf=\egroup
+ \ifdash \pglink\the\tempnum\relax \fi
+ \else
+ \ifnum #1=\tempnum % cislo se opakuje, nedelam nic
+ \else
+ \advance\tempnum by 1
+ \ifnum #1=\tempnum % cislo navazuje
+ \ifdash \else
+ --\dashtrue
+ \fi
+ \else % cislo nenavazuje
+ \ifdash
+ \advance\tempnum by-1
+ \pglink\the\tempnum \relax\dashfalse, \pglink#1\relax
+ \else
+ \carka \pglink#1\relax
+ \fi\fi\fi\fi
+ \tempnum=#1 \fi\fi \cykltransf
+}
+\def\carka{\iffirst \firstfalse \else, \fi}
+
+%% Vice sloupcu
+
+\newdimen\colsep \colsep=\parindent % horiz. mezera mezi sloupci
+\def\roundtolines #1{%% zaokrouhlí na celé násobky vel. rádku
+ \divide #1 by\baselineskip \multiply #1 by\baselineskip}
+\def\corrsize #1{%% #1 := #1 + \splittopskip - \topskip
+ \advance #1 by \splittopskip \advance #1 by-\topskip}
+
+\def\begmulti #1 {\par\bigskip\penalty0 \def\Ncols{#1}
+ \splittopskip=\baselineskip
+ \setbox0=\vbox\bgroup\penalty0
+ \advance\hsize by\colsep
+ \divide\hsize by\Ncols \advance\hsize by-\colsep}
+\def\endmulti{\vfil\egroup \setbox1=\vsplit0 to0pt
+ \calculatedimone
+ \ifdim \dimen1<2\baselineskip
+ \vfil\break \dimen1=\vsize \corrsize{\dimen1} \fi
+ \dimen0=\Ncols\baselineskip \advance\dimen0 by-\baselineskip
+ \advance\dimen0 by \ht0 \divide\dimen0 by\Ncols
+ \roundtolines{\dimen0}%
+ \ifdim \dimen0>\dimen1 \splitpart
+ \else \makecolumns{\dimen0} \fi
+ \ifvoid0 \else \errmessage{ztracený text ve sloupcích?} \fi
+ \bigskip}
+\def\makecolumns#1{\setbox1=\hbox{}\tempnum=0
+ \loop \ifnum\Ncols>\tempnum
+ \setbox1=\hbox{\unhbox1 \vsplit0 to#1 \hss}
+ \advance\tempnum by1
+ \repeat
+ \hbox{}\nobreak\vskip-\splittopskip \nointerlineskip
+ \line{\unhbox1\unskip}}
+\def\splitpart{\roundtolines{\dimen1}
+ \makecolumns{\dimen1} \advance\dimen0 by-\dimen1
+ \vskip 0pt plus 1fil minus\baselineskip \break
+ \dimen1=\vsize \corrsize{\dimen1}
+ \ifvoid0 \else
+ \ifdim \dimen0>\dimen1 \splitpart
+ \else \makecolumns{\dimen0} \fi \fi}% TBN
+\def\calculatedimone{%
+ \ifdim\pagegoal=\maxdimen \dimen1=\vsize \corrsize{\dimen1}
+ \else \dimen1=\pagegoal \advance\dimen1 by-\pagetotal \fi}
+
+
+%% final settings
+
+\catcode`\_=12
+\let\subori=\_ \def\_{_}
+\everymath={\catcode`\_=8 } \everydisplay={\catcode`\_=8 }
+
+\newwrite\reffile
+\softinput \jobname.ref
+\immediate\openout\reffile=\jobname.ref
+
+\catcode`\"=\active
+\let\activeqq="
+\def"{\leavevmode\hbox\bgroup\mubytein=1\let\leftcomment=\empty
+ \let\returntoBlack=\empty \let\linecomment=\empty \let"=\egroup
+ \def\par{\errmessage{\string\par\space inside \string"...\string"}}%
+ \setverb\tt\quotehook
+}
+
+\def\langleactive{\uccode`\~=`\<\catcode`\<=13
+ \uppercase{\def~}##1>{{$\langle$\it##1\/$\rangle$}}}
diff --git a/macros/generic/docbytex/lup.pdf b/macros/generic/docbytex/lup.pdf
new file mode 100644
index 0000000000..e9c9ce7ae8
--- /dev/null
+++ b/macros/generic/docbytex/lup.pdf
Binary files differ
diff --git a/macros/generic/docbytex/lup.tex b/macros/generic/docbytex/lup.tex
new file mode 100644
index 0000000000..981bae9f4e
--- /dev/null
+++ b/macros/generic/docbytex/lup.tex
@@ -0,0 +1,25 @@
+\chyph % documentation in Czech, use pdfcsplain
+\input docby.tex
+
+\def\projectversion{Pre-01a, zatím nefunguje}
+
+\title Program lup -- dokumentace ke zdrojovým textùm
+
+\author Progr a Mátor
+
+\dotoc % tady bude obsah
+\bookmarks % vytvoøíme také strukturovaný obsah
+
+\sec Zdrojové texty
+
+Zdrojové texty programu "lup" jsou rozdìleny do tøí modulù.
+V "base.c" jsou definovány pomocné funkce a v "base.h" jsou
+jejich prototypy. Podobnì ve "win.c" jsou funkce pro okenní
+zále¾itosti a "win.h" obsahuje jejich prototypy. Koneènì
+"main.c" obsahuje hlavní funkci programu.
+
+\module base
+\module win
+\module main
+\doindex % v tomto místì bude sestaven rejstøík
+\bye
diff --git a/macros/generic/docbytex/main.c b/macros/generic/docbytex/main.c
new file mode 100644
index 0000000000..8388ceeb61
--- /dev/null
+++ b/macros/generic/docbytex/main.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+//: main
+
+int main (int argc, char** argv)
+{
+ int i;
+ inicializuj();
+ pocitej();
+ for (i=0; i<argc; i++) uzasna_funkce(i);
+ uzasne_wokno();
+ return 0;
+}
+
diff --git a/macros/generic/docbytex/main.d b/macros/generic/docbytex/main.d
new file mode 100644
index 0000000000..2fbe28a1f0
--- /dev/null
+++ b/macros/generic/docbytex/main.d
@@ -0,0 +1,9 @@
+Funkce
+\dg [int] main()
+na¹eho programu nejprve pøeète parametry pøíkazové øádky, pak v rychlosti
+spoèítá výsledek, pøièem¾ vyu¾ije funkci "uzasna_funkce". Nakonec
+pomocí funkce "uzasne_wokno" zobrazí u¾ivatelsky pøívìtivým zpùsobem
+výsledek.
+\ins c main
+
+
diff --git a/macros/generic/docbytex/win.c b/macros/generic/docbytex/win.c
new file mode 100644
index 0000000000..edf1c81f86
--- /dev/null
+++ b/macros/generic/docbytex/win.c
@@ -0,0 +1,8 @@
+//: uzasne_wokno
+
+win uzasne_wokno ()
+{
+ win navrat;
+ ...
+ return navrat;
+}
diff --git a/macros/generic/docbytex/win.d b/macros/generic/docbytex/win.d
new file mode 100644
index 0000000000..75f7426d6e
--- /dev/null
+++ b/macros/generic/docbytex/win.d
@@ -0,0 +1,6 @@
+Hlavním obsahem tohoto modulu je implementace funkce
+\dg [win] uzasne_wokno(),
+která zalo¾í okno programu "lup". Návratová hodnota
+této funkce obsahuje inicializovanou strukturu "win" tohoto okna.
+\ins c uzasne_wokno
+
diff --git a/macros/generic/dowith/README b/macros/generic/dowith/README
new file mode 100644
index 0000000000..8f7664cbe3
--- /dev/null
+++ b/macros/generic/dowith/README
@@ -0,0 +1,64 @@
+
+ README for the `dowith' package
+
+ Apply Command to Each Item in a List of Arguments
+ in TeX's Macro Expansion Buffer
+
+ (C) Uwe Lueck 2012/11/19
+
+
+`dowith.sty' provides macros for applying a command to all items
+in a list of macro arguments, and also for extending and reducing
+macros storing such lists. "Brace groups" are single items of
+such lists, as opposed to token lists. Iteration is implemented
+within TeX's expansion processor, so works within \write as with
+`blog.sty'. Loop and list macros in other packages are discussed
+in the documentation. There is no need for e-TeX to which some
+of them refer.
+
+`domore.sty' extends `dowith.sty' in order to apply multi-
+parameter macros to a list and to insert "separator material"
+between resulting items. One application has been generating
+inline lists of links that are separated by ` | '.
+
+The packages are "generic", i.e., should also work with Plain TeX,
+relying on the `plainpkg' package for some minimal LaTeX-like
+behaviour.
+
+KEYWORDS: programming structures;
+ macro programming, loops, list macros
+
+RELATED PACKAGES: catoptions, etextools, etoolbox, forarray,
+forloop, loops, multido, moredefs, lmake, texapi, xfor, xspace
+
+LICENSE:
+
+The package file `dowith.sty', `domore.sty' and the
+documentation files `dowith.pdf', `domore.pdf', `dowith.tex',
+and `domore.tex' can be redistributed and/or modified under the
+terms of the LaTeX Project Public License; either version 1.3c
+of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+We did our best to help you, but there is NO WARRANTY.
+
+The `dowith' package is author-maintained in the sense of
+this license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/generic/dowith/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/generic/dowith.tds.zip
+
+The file `dowith.RLS' provides RELEASE info accessible by LaTeX
+FILE info packages, see
+
+ http://ctan.org/pkg/latexfileinfo-pkgs
+
+Please report bugs, problems, and suggestions via
+
+ http://www.contact-ednotes.sty.de.vu
diff --git a/macros/generic/dowith/doc/Announce.txt b/macros/generic/dowith/doc/Announce.txt
new file mode 100644
index 0000000000..c705fca031
--- /dev/null
+++ b/macros/generic/dowith/doc/Announce.txt
@@ -0,0 +1,79 @@
+
+`dowith' -- iterate on separator-less arglists in TeX's gullet
+
+________________________________________________________________
+
+r0.32 2015/11/14
+
+ * `domore.sty' v0.32 fixes:
+ * finally works without LaTeX indeed
+ * \StopDoing without `dowith.sty',
+ e.g., vital with recent `texlinks.sty'
+ * documentation fix \DoWithMore
+
+ * `dowith.pdf' has two documentation modifications
+ (`dowith.tex' r0.3a, strange word removed from explanation
+ of "arglist") and has been typeset with recent
+ documentation packages
+
+________________________________________________________________
+
+r0.31a 2013/03/23
+ publishes fdatechk.tex needed for proper compilation of
+ documentation, created for r0.31, enhanced for r0.31a
+
+________________________________________________________________
+
+Iterate stuff on argument list (no separators) expandably
+
+r0.31 2013/03/22
+
+domore.sty v0.3 only enhanced dowith.sty's \DoWith{<do>} so that
+<do> can be complex. domore v0.31 enhances dowith.sty's
+\DoWithAllOf{<do>}{<args>} and \DoWithAllIn{<do>}{<macro>}
+in the same respect.
+
+________________________________________________________________
+
+r0.3a corrects TDS -- "generic", not "latex"
+________________________________________________________________
+
+Iterate stuff on argument list in TeX's gullet (no separators)
+
+r0.3 2012/11/19
+
+ * new `domore.sty' enhances `dowith.sty', allowing iterated
+ application of multi-parameter macros and inserting
+ "separator material".
+
+ * `dowith.sty' documentation correction: according to Knuth,
+ this is TeX's "gullet", while some authors have called it
+ "TeX's mouth", see quotations in section 1.4 of `dowith.pdf'.
+
+ * `dowith.sty' (v0.3) "generic" now by `plainpkg'
+ (instead of imitating `german.sty').
+
+ * `dowith.sty' documentation `dowith.pdf' furthermore reworked.
+
+________________________________________________________________
+
+Iterate command on argument list in TeX's mouth (no separators)
+
+r0.22 2012/06/03
+
+Documentation
+ (i) discusses what <cmd> in \DoWith<cmd>... can be
+ (ii) extends comparison with \@tfor
+(iii) has some contentual corrections
+ (iv) celebrates 25 years of Alois Kabelschacht's idea
+________________________________________________________________
+
+Iterate macro on argument list in TeX's mouth – no separators
+
+r0.21c 2012/05/18
+
+ (i) @ fix for "generic" and `typeoutfileinfo'
+ (ii) documentation much extended to clarify kind of "items,"
+ distinguishing tokens from code
+(iii) `dowith.RLS' provides release info as LaTeX file info
+
diff --git a/macros/generic/dowith/doc/SrcFILEs.txt b/macros/generic/dowith/doc/SrcFILEs.txt
new file mode 100644
index 0000000000..0152ec5c9a
--- /dev/null
+++ b/macros/generic/dowith/doc/SrcFILEs.txt
@@ -0,0 +1,21 @@
+
+ *File List*
+ dowith.RLS 2015/11/14 r0.32 domore v0.32: fix w/o LaTeX/dowith & doc.
+ dowith.sty 2012/11/05 v0.3 simple list loop (UL)
+ domore.sty 2015/09/17 v0.32 dowith extended (UL)
+ dowith.tex 2015/11/14 -- documenting dowith.sty
+ domore.tex 2015/11/14 -- documenting domore files
+srcfiles.tex 2015/11/14 -- file infos -> SrcFILEs.txt
+fdatechk.tex 2015/11/14 -- dowith filedate checks
+ ---USED.--- -- -- -- -- --
+ catchdq.sty 2015/05/22 v0.21 typographic dqs (UL)
+fifinddo.sty 2012/11/17 v0.61 filtering TeX(t) files by TeX (UL)
+ makedoc.sty 2012/08/28 v0.52 TeX input from *.sty (UL)
+niceverb.sty 2015/11/09 v0.61 minimize doc markup (UL)
+ makedoc.cfg 2013/03/25 -- documentation settings
+mdoccorr.cfg 2012/11/13 -- `makedoc' local typographical corrections
+ ***********
+
+ List made at 2015/11/14, 20:03
+ from script file srcfiles.tex
+
diff --git a/macros/generic/dowith/doc/domore.pdf b/macros/generic/dowith/doc/domore.pdf
new file mode 100644
index 0000000000..a476a09dbd
--- /dev/null
+++ b/macros/generic/dowith/doc/domore.pdf
Binary files differ
diff --git a/macros/generic/dowith/doc/dowith.RLS b/macros/generic/dowith/doc/dowith.RLS
new file mode 100644
index 0000000000..d9929af280
--- /dev/null
+++ b/macros/generic/dowith/doc/dowith.RLS
@@ -0,0 +1,19 @@
+\ProvidesFile{dowith.RLS} %% >RELEASE INFO<
+ [2015/11/14 r0.32 domore v0.32: fix w/o LaTeX/dowith & doc.]
+ [2013/03/23 r0.31a publishing fdatechk.tex]
+ [2013/03/22 r0.31 domore AllIn AllOf]
+ [2012/11/27 r0.3b `domore.sty'; doc. mouth -> gullet,^^J
+ rm. `pdfstartview']
+ [2012/11/20 r0.3a doc. mouth -> gullet, `domore.sty';
+ TDS corr.]
+ [2012/11/19 r0.3 doc. mouth -> gullet, `domore.sty']
+ [2012/06/03 r0.22 v0.22 arg. {}; doc.: catoptions]
+ [2012/06/03 r0.21f v0.21a; doc.: catoptions]
+ [2012/05/22 r0.21e v0.21a; doc.: Kabelschacht vs. TeXbook]
+ [2012/05/20 r0.21d v0.21a discussing other cmds ]
+ [2012/05/18 v0.21 r0.21c @ fix, new doc., .RLS]
+ [2012/05/14 r0.21 @ fix, .RLS, README/title typo...]
+ %% <- FAILED
+ [2012/05/10 r0.2a corr. generic dir.]
+ [2012/05/10 r0.2 first on CTAN]
+
diff --git a/macros/generic/dowith/doc/dowith.pdf b/macros/generic/dowith/doc/dowith.pdf
new file mode 100644
index 0000000000..7da251a37b
--- /dev/null
+++ b/macros/generic/dowith/doc/dowith.pdf
Binary files differ
diff --git a/macros/generic/dowith/docsrc/domore.tex b/macros/generic/dowith/docsrc/domore.tex
new file mode 100644
index 0000000000..f134780fd0
--- /dev/null
+++ b/macros/generic/dowith/docsrc/domore.tex
@@ -0,0 +1,166 @@
+\ProvidesFile{domore.tex}[2015/11/14 documenting domore files]
+\title{\pkg{domore}\\---\\Some More Commands for Lists of Tokens}
+% \listfiles
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \renewcommand\mdSectionLevelOne {\string\subsection}
+ \renewcommand\mdSectionLevelTwo {\string\subsubsection}
+ \MainDocParser{\SectionLevelTwoParseInput}
+ \HeaderLines{17}
+ \MakeSingleDoc{domore.sty}
+ \MakeSingleDoc{reversdo.sty}
+ \MakeSingleDoc{domodes.sty}
+}
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+\MDkeywords{Macro programming, programming structures,
+ loops, list macros}
+\newcommand*{\headersec}{%
+ \subsection{Package File Header---\pkg{plainpkg} and Legalese}}
+\usepackage{catchdq} \catchdqs %% 2012/11/19
+\AddToMacro{\mdStartPackageCode}{\MakeOther\"} %% 2012/11/19
+ %% something moved to makedoc.cfg from here 2013/03/21
+\newif\ifmultmore %% 2012/11/19
+%%% \multmoretrue %% 2015/11/14 TODO domodes/revers... with plainpkg!
+\MDfinaldatechecks
+\sloppy
+\begin{document}
+\maketitle
+\begin{MDabstract}
+\ifmultmore
+ This document describes packages that do similar things
+ as the 'dowith' package or extend it.
+\else
+ 'domore.sty' is a package that enhances 'dowith.sty''s
+ `\DoWith' (without assignments)
+ and `\setdo' commands for applying something
+ (e.g., `\do') to each item of an "arglist".
+ Each item may consist of two or more arguments for a macro,
+ and some "separator" material may be inserted between the
+ applications to items. A practiced application has been
+ generating inline lists of links that are separated
+ by \qtdcode{~\string|~}.
+ 'domore.sty' is (to some extent) format-independent
+ by means of the \ctanpkgref{plainpkg} and 'stacklet' packages.
+\fi
+% \MDaddtoabstract{Required Packages}
+% \ctanpkgref{plainpkg}, 'stacklet'
+\MDaddtoabstract{Related Packages} cf. `dowith.pdf'.
+\end{MDabstract}
+\tableofcontents
+
+\edef\domore{\ifmultmore\noexpand\MetaVar domore>\else domore\fi}
+% \section{Shared Features of Usage}
+\ifmultmore
+ \section{Shared Features of Usage}
+ All the packages described in this document
+ are "\pkg{plainpkg} packages"
+\else
+ \section{Making 'domore.sty' Available}
+ The 'domore' package is a "\pkg{plainpkg} package"
+\fi
+in the sense of the
+\ctanpkgdref{plainpkg}
+documentation that exhibits details of what is summarized here.
+Therefore:
+\begin{itemize}
+ \item \ifmultmore All of them require \else It is required \fi
+ that \TeX\ finds `plainpkg.tex'
+ as well as `stackrel.sty' from the
+ \ctanpkgdref{catcodes} bundle.
+ \item In order to load \file{\domore.sty}%%%
+ \ifmultmore\ (where \domore\ is `domore', `domodes', or `reversdo')\fi,
+ type
+ \begin{description}
+ \ifmultmore\cmdboxitem|\usepackage{<domore>}|
+ \else\cmdboxitem|\usepackage{domore}| \fi
+ \ within a \LaTeX\ document
+ preamble, \
+ \ifmultmore\cmdboxitem|\RequirePackage{<domore>}|
+ \else\cmdboxitem|\RequirePackage{domore}| \fi
+ \ in a "\pkg{plainpkg} package", or \
+ \ifmultmore\cmdboxitem|\input <domore>.sty|
+ \else\cmdboxitem|\input domore.sty| \fi
+ \end{description}
+ $\dots$ \ or perhaps `\input{<domore>.sty}'?
+\end{itemize}
+
+\section{Remark on the Style of Code Documentation}
+In `dowith.pdf', the documentation of the 'dowith' package,
+in the section about "\TeX's tokens," I have tried to explain
+the difference between \TeX\ input code and the tokens that
+arise from it. In order to really understand what packages
+in the 'dowith' bundle do, one should think of the behaviour
+of the \emph{tokens}. For convenience however, I may rather
+fall back into the usual confusion here. After reading the
+documentation `dowith.pdf' of `dowith.sty', you may be able
+to guess successfully what is meant below.
+
+% \section{Overview of Packages Described in \file{\jobname.pdf}}
+\ifmultmore
+ \section{Overview of Packages Described in \file{\jobname.pdf}}
+ \label{sec:over}
+ The present document describes the packages provided by the
+ \ctanpkgref{dowith} bundle apart from 'dowith.sty' itself
+ for applying something to each item from some list.
+ \begin{enumerate}
+ \item
+\else
+ \section{Overview of Commands}
+\fi
+ \strong{\pkg{domore.sty}} provides a more powerful version
+ of 'dowith.sty''s
+ \[|\DoWith{<repeat>}<args>\StopDoing|\]
+ acting on an "arglist" <args>
+ where <repeat> may be more complex than with 'dowith.sty'.
+ Based on this, another variant |\DoWithMore| of `\DoWith'
+ is provided where <repeat> may be a macro with more than
+ one argument. With \LaTeX\ e.g., <repeat> may be |\do|
+ defined by \[|\setdo[<digit>]<opt>{<replace>}|\]
+ an extension of 'dowith.sty''s `\setdo'.
+ Further,
+ \[|\DoSeparateWith{<repeat>}{<sep>}<args>\StopDoing|\]
+ inserts "separator material" <sep> between the applications
+ of <repeat> to the items in <args>. Another
+ |\DoSeparateWithMore| combines the features of the two
+ previous macros. I have used this with 'blog.sty' from
+ the \ctanpkgref{morehype} bundle for generating inline
+ lists of links, separated by something like \qtdcode{~\string|~},
+ in \acro{HTML} documents.
+
+ As auxiliaries, variants |\@firstsecondoftwo| and
+ |\@secondfirstoftwo| of \LaTeX's `\@firstofone' are introduced.
+\ifmultmore
+ \end{enumerate}
+
+ \section{'domore.sty'}
+ An overview of what 'domore.sty' provides has been given in
+ Section~\ref{sec:over}.
+ For details, see the comments to the package's code below.
+\else
+
+ For details, see the comments to the package's code below.
+ \section{Contents of 'domore.sty'}
+\fi
+\headersec
+\input{domore.doc}
+
+\MakeOther\"
+\ifmultmore
+\section{'domodes.sty'}
+See Section~\ref{sec:domodes-cmds} for the commands provided.
+\headersec
+\input{domodes.doc}
+
+\section{'reversdo.sty'}
+See Section~\ref{sec:reversdo-cmds} for the commands provided.
+\headersec
+\input{reversdo.doc}
+
+\fi
+\end{document}
+
+VERSION HISTORY
+
+2012/10/23 for v0.2 started
+2012/11/05ff. for v0.3
+2013/03/21f. for v0.31 \MDfinaldatecheck
diff --git a/macros/generic/dowith/docsrc/dowith.tex b/macros/generic/dowith/docsrc/dowith.tex
new file mode 100644
index 0000000000..edd167ae26
--- /dev/null
+++ b/macros/generic/dowith/docsrc/dowith.tex
@@ -0,0 +1,1168 @@
+\ProvidesFile{dowith.tex}[2015/11/14 documenting dowith.sty]
+\title{%%%\kern-\baselineskip
+ \textsf{\huge dowith.sty}\\---\\Apply Command to
+% Elements of Lists without Separators\,---\,%%% 2012/05/14
+% and without Iterator\thanks{This
+ %% 2012/05/15, "in" 2012/05/18:
+ Each Item \\ in a List of Arguments in ``\TeX's Gullet"\thanks{This
+ document describes version
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \textsf{\jobname.sty} as of \UseDateOf{\jobname.sty}.}}
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \renewcommand*\mdSectionLevelOne{\string\subsection}
+ \renewcommand*\mdSectionLevelTwo{\string\subsubsection}
+ \MakeJobDoc{18}%% 2012/11/05 for v0.3
+ {\SectionLevelTwoParseInput} }
+% \RequirePackage[ir]{inputtrc}
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+\ifpdf\else \errhelp{hyperref draft bad with {equation}}
+ \errmessage{run this with pdflatex only}\fi
+% \ReadPackageInfos{dowith}
+\usepackage{dowith} %% 2012/05/17b
+\sloppy
+\MDkeywords{programming structures; %% 2012/05/14b
+ macro programming, loops, list macros}
+\hypersetup{%
+ pdftitle=dowith.sty handles lists without separators,
+ pdfsubject=documenting dowith.sty
+}%% 2011/08/22
+\usepackage{fixltx2e} %% \textsubscript 2012/05/17b
+%% <- TODO with `lmodern'?
+% \newcommand*{\ctanpkgdref}[1]{% %% 2012/11/19
+% \ctanpkgref{#1}\,\foothttpurlref{ctan.org/pkg/#1}}
+%% <- in `makedoc.cfg' 2015/11/14
+\makeatletter %% etc. 2012/05/17b
+%% TODO `actcodes'!? 2012/11/02
+ \newcommand*{\GetOtherChar}[2]{%
+ \@ifdefinable#1{%
+ \edef#1{\expandafter\@gobble\string#2}}}
+\makeatother
+\GetOtherChar\codeLB\{
+\GetOtherChar\codeRB\}
+% \GetOtherChar\codeSP\ % %% ???
+{\MakeOther\ \xdef\codeSP{ }}
+\newcommand*{\codelb}{\code\codeLB}
+\newcommand*{\coderb}{\code\codeRB}
+\newcommand*{\codesp}{\code\codeSP}
+\newcommand*{\codebd}[1]{\code{\codeLB#1\codeRB}} %% 2012/05/19
+%% rm. 2012/05/17b:
+% \DeclareRobustCommand*{\code}[1]{%
+% \texttt{%
+% \let\{\codeLB \let\}\codeRB \let\ \codeSP
+% #1}}
+% \newcommand*{\chtok}[2]{\ensuremath{\code{#1}\sb{#2}}}
+%% <- 2012/05/17b ->
+\newcommand*{\chtok}[2]{\code{#1}\textsubscript{#2}}
+\newcommand*{\lbtok}{\chtok\codeLB{1}}
+\newcommand*{\rbtok}{\chtok\codeRB{2}}
+\newcommand*{\lttok}[1]{\chtok{#1}{11}}
+\newcommand*{\sptok}{\chtok\codeSP{10}}
+\providecommand*{\TTb}{\meta{The\nolinebreak[3] \TeX book}}
+\providecommand*{\TTbp}{\TTb\nolinebreak[3] p}
+\newenvironment*{smallpar}
+ {\medskip\par\begingroup\footnotesize}
+ {\par\endgroup\medskip}
+\newcommand*{\NTOK}[1]{\textsf{ntok}(\code{#1})}
+\newcommand*{\ntok}[1]{\textrm{?}\code{#1}}
+\newenvironment*{example}[1]
+ {\trivlist\item
+ (\ulroman{#1})}
+ {\endtrivlist}
+\providecommand*{\ulroman}[1]{\meta{\romannumeral #1 }}
+\newcommand*{\inlineitem}[1]{\ (\ulroman{#1})\enspace
+ \ignorespaces}
+\newcommand*{\pdots}{~.\kern\fontdimen3\font
+ .\kern\fontdimen3\font. }
+\providecommand*{\Chi}{\mathrm{X}}
+\renewcommand*{\httpprefix}{\theHTTPprefix}
+\begin{document}
+\maketitle
+\begin{MDabstract}
+This package provides macros for applying a
+%% mod. 2012/05/15:
+% ``command" <cmd> to all items of a list $<arg-1><arg-2>\dots<arg-$n$>$
+``command" to all items in a ``list of possible macro arguments," %% v0.21a
+% in ``\TeX's mouth,"
+% such as `\DoWithAllIn{<cmd>}{<list-macro>}',
+and also for extending and reducing macros storing such lists.
+``Brace groups" are single items of such lists, as opposed to
+token lists. Iteration is implemented within \TeX's expansion
+processor, so works within `\write' as with 'blog.sty'.
+ %%% ---pleading for mathematical rigour in \TeX ology!) %% rm. 2012/05/17b
+% Applications in mind belonged to \LaTeX, but the package should work
+% with other formats as well.
+Loop and list macros in other packages are discussed in the documentation.
+% %% 2012/05/09:
+% There is an emphasis on expandability
+% %% mod./add. 2012/05/15:
+% (no \wikienref{Iterator}{iterator;}
+% essential within \cs{write} as with \CtanPkgRef{morehype}{blog.sty}),
+% without relying on \CtanPkgRef{e-tex}{$\varepsilon$-\TeX}.
+%% 2012/05/18:
+% Iteration is implemented within ``\TeX's mouth," so works within
+% `\write' as with \CtanPkgRef{morehype}{blog.sty}.
+There is no need for \CtanPkgRef{e-tex}{$\varepsilon$-\TeX} to which
+some of them refer.
+
+The package is ``generic," i.e., should also work with Plain \TeX\
+or even other formats, relying on the \ctanpkgref{plainpkg} package
+for some minimal \LaTeX-like behaviour. %% \ 2012/11/27
+
+\MDaddtoabstract{Related packages}
+\let\pkg\ctanpkgref \pkg{catoptions},
+\pkg{etextools}, \pkg{etoolbox}, \pkg{forarray}, \pkg{forloop},
+\pkg{loops}, \pkg{multido}, \pkg{moredefs}, \pkg{lmake},
+\pkg{texapi}, \pkg{xfor}, \pkg{xspace}
+\end{MDabstract}
+\tableofcontents
+
+% \newpage
+\section{Usage and Features} %% restructured 2012/05/16
+
+\subsection{Installing and Calling}
+The file 'dowith.sty' is provided ready, installation only requires
+putting it somewhere where \TeX\ finds it
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf} %% corr. 2011/02/08
+The packages \ctanpkgdref{plainpkg}
+and 'stacklet' (\ctanpkgref{catcodes})\urlfoot{ctanpkgref}{catcodes}
+must be installed as well.
+
+As to calling (loading): 'dowith' is a ``\pkg{plainpkg} package"
+in the sense of the \ctanpkgref{plainpkg}
+documentation that you may consult for details.
+So roughly,
+\begin{itemize}
+ \item load it by \ |\usepackage{dowith}| \ if you can,
+ \item otherwise by \ |\RequirePackage{dowith}| \\
+ (perhaps from within another ``\pkg{plainpkg} package"),
+ \item or by \ |\input dowith.sty|
+ \item or even by \ |\input{dowith.sty}|~\dots
+\end{itemize}
+
+% \section{Example}
+
+% \section{Discussion} %% 2012/05/16
+% \subsection{What It Seems to Do \dots}
+% The 'dowith' package provides tools to simplify \TeX\ macro programming.
+% Understanding it \emph{really} may require understanding certain passages of
+% \TTb, such as pp.~38f. It may even require overcoming
+% terrible confusions in \TTb.
+% Let this be a last try at understanding the package without understanding \TeX:
+% It allows you to abbreviate
+% \[<cmd><arg-1><cmd><arg-2>\dots<cmd><arg-$n$>\]
+% by
+% \[`\DoWith<cmd><arg-1><arg-2>\dots<arg-$n$>\StopDoing'\]
+% or by
+% \[`\DoWithAllOf<cmd>{<arg-1><arg-2>\dots<arg-$n$>}'\]
+%
+% \pagebreak %% 2012/05/19
+\subsection{What It Does With What Lists}
+% \subsection{What It Actually Does \dots}
+\label{sec:lists-intuit}
+
+The single commands that the package provides are described
+in the \hyperref[sec:implement]{implementation section} below.
+What follows here is some general background about how the
+commands work.
+%% <- moved down from previous section, mod. 2012/05/19
+
+The term \qtd{list} may refer to various things and need clarification here.
+
+First of all, we are not referring to \LaTeX\ `list' environments
+such as `enumerate' or `itemize';
+neither to ``\acro{TODO}" lists of what needs to be done soon.
+
+Rather, 'dowith' allows you to abbreviate
+\[<cmd><arg-1><cmd><arg-2>\dots<cmd><arg-$n$>\]
+by
+\[`\DoWith<cmd><arg-1><arg-2>'\dots<arg-$n$>`\StopDoing'\]
+or by
+\[`\DoWithAllOf<cmd>{<arg-1><arg-2>'\dots<arg-$n$>`}'\]
+With small $n$, one may doubt whether this really is an abbreviation~\dots;
+anyway,
+\[<arg-1><arg-2>\dots<arg-$n$>\]
+was an attempt to refer to the kind of lists we are dealing with.
+\[<arg-1>, <art-2>, \dots, <arg-$n$>\]
+are the ``items" of the list.
+The question is: what counts as an item?
+
+We might say that `aa' is a list of \emph{two} items,
+<arg-1> being `a' and <arg-2> being `a', too.
+
+When we do \emph{three} keystrokes to get `a a' instead of `aa',
+we still have \emph{two} items,
+<arg-1> being `a' and <arg-2> being `a' too.
+Strange, isn't it?
+
+Also, when in `aa' we replace the first `a' by a backslash, `\',
+we get `\a', and this is a list of a \emph{single} item,
+$<arg-1>=`\a'$~\dots
+
+You shouldn't believe these stories of mine entirely.
+What I am alluding to is that the \emph{``items"} 'dowith' is about
+are determined in terms of \emph{\TeX's tokens}, and the relation
+between the ``characters you type" and \emph{\TeX's tokens}
+is not entirely straightforward.
+
+\subsection{The Notion of Arglists for \LaTeX\ Users}
+%% <- 2012/05/17b ->
+% \subsection{The Notion of Arglist}
+\label{sec:arglists-intuit}
+Still, it may suffice to clarify what counts as an <arg-$i$>
+without speaking of \emph{tokens} explicitly: It is simply
+what a \emph{one-parameter macro}
+(where the parameter is \emph{not delimited} in terms of
+ \TTbp p.~203f.)
+can take as an \emph{argument.}
+
+The lists 'dowith' is about then are lists \emph{of possible arguments}
+in the previous sense---let me call them \emph{``arglists."}\footnote{Not
+ to be confused with German \httpref{de.wiktionary.org/wiki/Arglist}{Arglist.}}
+The single \emph{items} of such lists are those single possible arguments.
+They become \emph{actual} arguments beginning from the leftmost \emph{possible} one
+when 'dowith' presents them to that <cmd> mentioned earlier---where
+<cmd> \emph{should} be a one-parameter macro (or some \TeX\ primitive
+parsing arguments similarly).
+
+The reader perhaps has an \emph{intuitive} understanding of
+what can be an argument of a one-parameter macro.
+A \emph{strict \LaTeX} user may think that such an argument <arg-$i$>
+just has form `{'<ark-$i$>`}', i.e., $<arg-$i$>=`{'<ark-$i$>`}'$
+for some <ark-$i$>. Such arguments are also called \emph{``brace groups".}
+(\LaTeX's \emph{optional} arguments `[<extra>]'
+ do not count as possible arguments here, they are not macro arguments
+ in the sense of \TTb.)
+In this restricted \LaTeX\ sense, arglists consist of brace groups
+\[`{<ark-1>}{<ark-2>}'\dots`{'<ark-$n$>`}',\]
+and each single brace group is an \emph{item} of it.
+
+The \emph{\TeX\ macro writer}, by contrast, knows that a macro argument
+doesn't need outer braces. In an intuitive sense, a single
+``command" can be a macro argument, too. ``Command" may be understood
+as ``control sequence" (starting with a backslash),
+but some authors also have considered single \emph{characters}
+(character \emph{tokens}?) ``commands." Blank spaces, by contrast,
+are ignored when a macro looks for its argument. %% 2012/05/17b
+
+%% useless, just name items 2012/05/17b:
+% We arrive at an ``intuitive recursive definition" of ``arglist:" \
+% (\meta{i})\enspace The empty list is an arglist; it doesn't have an item
+% for 'dowith'. \ (\meta{ii})\enspace If <list> is an arglist, then
+% (a)~`{<ark>}<list>' is an arglist whose first item for 'dowith' is `{<ark>}';
+% (b)~`<cs><list>' with a ``control sequence" <cs>
+% is an arglist whose first item is `<cs>'
+% (for the command <cmd> to which 'dowith' presents <cs>); and
+% (c)~`<char><list>' with a non-blank character <char>
+% is an arglist whose first item is `<char>'. \
+% (\meta{iii})\enspace Nothing else is an arglist.
+%
+% But keep in mind that this ``intuitive" understanding essentially is wrong.
+
+\subsection{Anatomy of \TeX}
+The documentation of v0.22 as of 2012-06-04 said that the package
+is about ``lists in \TeX's mouth." However, this was very wrong.
+I believed it following Alan Jeffrey's paper ``Lists in \TeX's Mouth",\footnote{%
+ Alan Jeffrey: \tugbartref{tb11-2/tb28jeffrey}{``Lists in \TeX's Mouth,"}
+ \acro{TUG}boat Vol.~11 (1990), No.~2, pp.~237--245),
+ \urlhttpref{tug.org/TUGboat/tb11-2/tb28jeffrey.pdf}.}
+in whose Section~2 you read:
+\begin{quote}\it
+ \TeX's programming facilities come in two forms---there
+ are \TeX's \emph{macros} which are expanded in its
+ mouth, and some additional \emph{assignment} operations
+ like \cs{def} which take place in the stomach.
+\end{quote}
+The macros that Jeffrey lists and describes in that article can be
+obtained as a \acro{CTAN} package
+\ctanpkgref{lambda-lists}.\footnote{\urlhttpref{ctan.org/pkg/lambda-lists}}
+If you follow the link given here (in the footnote),
+you currently (2012-11-03) read about this package:
+\begin{quote}\it
+ These list-processing macros avoid the reassignments
+ employed in the macros shown in Appendix D of the TeXbook:
+ all the manipulations take place in what Knuth is pleased to
+ call ``TeX's mouth".
+\end{quote}
+But Knuth doesn't. On page 267 of \TTb, you read:
+\begin{quote}\it
+ Chapter 7 has described the process by which input files
+ are converted to lists of tokens in \TeX's ``mouth,"
+ and Chapter 20 explained how expandable tokens are converted
+ to unexpandable ones in \TeX's ``gullet" by a process
+ similar to regurgitation.
+\end{quote}
+I.e., the ``mouth" is \TeX's ``tokenizer," the inner part of what
+van Eijkhout calls \TeX's ``input processor" on, e.g., p.~15 of his
+\meta{\TeX~by Topic}.\footnote{It is available as a \acro{CTAN} package
+ \ctanpkgref{texbytopic} at \urlhttpref{ctan.org/pkg/texbytopic}.}
+The exact rules the tokenizer follows are described on pp.~46f.\
+(Chapter~8!) of \TTb.
+\emph{Macro expansion} takes place in \TeX's \emph{``gullet"},
+which van Eijkhout calls \TeX's ``expansion processor" (p.~16).
+Abrahams, Hargreaves, and Berry follow Knuth's terminology on
+pp.~16 and 46f.\ of their \meta{\TeX~for the Impatient}.\footnote{It
+ is available as \acro{CTAN} package \ctanpkgref{impatient},
+ \urlhttpref{ctan.org/pkg/impatient}.}
+% Only Jeffreys and my wrong old documentation say this were
+% ``\TeX's mouth"---and I made the same mistake with the
+% \ctanpkgref{bitelist} package.
+%% <- 2012/11/19 ->
+
+\TeX's gullet has been called ``\TeX's mouth" also
+in the documentation of my \ctanpkgdref{bitelist} package and
+in the documentation of the package \ctanpkgdref{bibleref-mouth}.
+
+Moreover, I should have clarified that Jeffrey's paper deals with
+``lists" in some general, rather abstract sense, different from
+the kind of lists the present documentation tries to characterize
+as the objects for 'dowith'.
+
+\subsection{\TeX's Tokens}
+\label{sec:toks}
+
+% The \emph{\TeX\ macro writer} understanding \TeX\ properly
+% does not really think of arglists. \TeX perts instead think of
+% What \TeX nically matters is
+% what happens in ``\TeX's mouth,"\footnote{Cf.~\TTbp.~46.}
+% as some authors have suggested a metaphor,\footnote{%
+The 'dowith' package is a tool that affects the order of tokens in
+\TeX's gullet.
+
+\begin{smallpar}
+The ``characters you type" enter ``\TeX's mouth" line by line,
+in a slightly modified appearance. Each line forms a \emph{string}.
+\TeX\ takes initial substrings away from it and turns them
+into \emph{tokens} that are appended to the right of \TeX's
+\emph{expansion buffer} (``gullet").
+
+%% Removing 2012/11/04:
+% More formally, \TeX\ has a \emph{character buffer.}
+% It forms a single token from an initial segment of the buffer content---unless
+% there is a special situation with blank spaces or something pathological.
+% When an \emph{escape character}, as the backslash usually is one,
+% has been noticed recently (that isn't followed by another one immediately),
+% the character buffer may need to be feeded from more outside,
+%% <- especially wrong, 2012/11/04
+% until it contains enough material to form a token from.
+
+There are \emph{two kinds of tokens} here: \emph{named} tokens
+and \emph{character} tokens. ``Named" tokens usually are referred
+to as ``control sequence tokens" or just ``control sequences"---I~really
+want to avoid those horrible confusions from \TTb.
+There never are any ``parameter tokens" in \TeX's gullet
+(perhaps unless one considers a one-step macro expansion
+ a two-or-more-step procedure).
+% merged 2012/11/04
+%% Moving down 2012/11/04
+The character(s) \emph{after} the escape character until
+some delimiting character form a \emph{string} that is the
+\emph{name} of the token that is formed---a \emph{named}
+token, as I am saying.
+% What has been used to form a token is removed from the character buffer.
+%% 2012/11/04:
+\emph{Character} tokens are formed by removing a character from the
+beginning of the character buffer and appending it to the token buffer
+paired with its \emph{category} code.
+
+For every \emph{string of characters}, there is exactly one
+(possible) \emph{named token} whose name the string is.\footnote{``Possible"
+ refers to the fact that \TeX\ does not store named tokens anywhere
+ before they appear in its gullet, maybe apart from ``primitive"
+ tokens that have a ``pre-assigned meaning" when a \TeX\ run %% \ 2012/11/04
+ starts.---What is more bad with my claim is that
+ the \TeX\ program by design cannot extend its memory arbitrarily---even
+ not using the ``cloud''---, so it doesn't support tokens
+ whose name lengths are above a certain limit.}
+It is so common (starting from \TTb) to denote the token whose name
+is <string> by \lq\verb+\+<string>\rq. For instance, the token whose
+name is `input' is denoted by \qtd{&\input}. On the other hand,
+on page~7 of \TTb\ \qtd{&\input} is a ``string of characters."
+With this notation, it is already difficult to explain what
+the \LaTeX\ command `\DeclareRobustCommand' does or what the difference
+between a starred \LaTeX\ command and a starred \LaTeX\ environment is.\footnote{%
+ A reader knowing \LaTeX\ only thinks that \qtd{\code{&\\\codesp}}
+ is the result of typing a double backslash and a space
+ and that \qtd{\cs{equation*}} is the ``command" \cs{equation}
+ followed by a `*'.}
+\TTb\ makes it worse by saying on page~39:
+\meta{``A control sequence is considered to be a single object
+ that is no longer composed of a sequence of symbols."}
+So ``it depends" whether \qtd{&\input} is a string of characters or not---it \emph{is
+before} tokenization, but \emph{no longer} afterwards.
+So if you have two computers and start a \TeX\ run on each of them
+with a little difference in time, there will be a moment where
+\qtd{&\input} is a string on the one computer but not on the other?
+This
+appears to me %%% is %% 2012/11/04
+like saying \meta{``When we apply the square root function to
+the number 4, the number 4 will no longer be the number 4,
+it will be the number 2 instead."}
+\end{smallpar}
+
+\TTb\ does offer an alternative notation for named tokens: ``boxing;"
+so the token whose name is `input' can be denoted by the rather
+``graphical" notation \qtd{|input|} (used only exceptionally).\footnote{%
+ The box notation is introduced on page~38 without explanation,
+ as if it explained something.}
+\emph{I}~would suggest something like
+\qtd{\NTOK{input}} for clarity and \qtd{\ntok{input}}
+for brevity.\footnote{I am suggesting the question mark for named tokens
+ since \TeX\ ``must look up the current definition" of a named token
+ according to \TTbp.~39, while the meaning of character tokens rather
+ is ``fixed," at least according to \TTbp.~39. However,
+ \emph{active}-character such as .&~ are in the same situation
+ as named tokens as to this respect. The dot notation may be fine for them,
+ though.}
+
+\begin{smallpar}
+%% rm. 2012/11/04, cf. above
+% \emph{Character tokens} get into \TeX's mouth by tokenization
+% when characters begin the buffer content while \emph{not} scanning
+% a name for a named token. A single character then is removed from the
+% character buffer, and a token storing its character code and current
+% category code is pushed into \TeX's mouth.
+
+Named tokens may get into \TeX's gullet by ``tokenization" as described above,
+i.e., they are drawn from the character buffer. But they also can
+appear in \TeX's gullet ``from within,"
+by the manipulation inside \TeX's gullet.
+
+More formally, those manipulations are called ``expansion,"
+and \TeX's gullet can be conceived of as a \emph{token buffer}
+that is feeded to the right (or end) by tokenization from the character buffer.
+Expansion means that certain tokens in the token buffer are substituted
+by other ones. This way tokens may get into \TeX's gullet that
+emerged from tokenization a ``long time ago", maybe in a previous
+run that created the \emph{format} (\TeX's variant \code{INITEX});
+or tokens may appear by some hardwired expansion function.
+
+However, \emph{named tokens} may get into \TeX's gullet
+also by \emph{expansion}, never having been drawn by tokenization
+and not being hardwired. This happens by the `\csname'
+% name %% rm. 2012/07/25
+construct.
+The input \emph{code} may contain
+\[`\csname tupni\endcsname'\]
+This may be converted into 7 tokens entering \TeX's gullet,
+the first one being \NTOK{csname}, the last one
+\NTOK{endcsname}, and five character tokens in between.
+Due to some \emph{function} (which I would denote as *\code{csname})
+originally associated with the token \NTOK{csname},
+those seven tokens then are replaced by \NTOK{tupni},
+the named token whose name is `tupni'. It is not required that
+the \TeX\ program knows about a token \NTOK{tupni},
+neither anybody must type \qtd{&\tupni} in any file.\footnote{These
+ considerations may not be essential here,
+ rather a draft for a paper. Using 'dowith',
+ one better just thinks of the arglist items one actually lists.}
+\end{smallpar}
+
+\subsection{Arglists vs.\ Lists of Tokens---Example}
+% \subsection{Arglists and 'dowith' \TeX nically}
+% In the \TeX nical sense, I think of arglists \emph{and their items}
+% as follows. Arglists are lists (or sequences) of tokens.
+% What is somewhat difficult is that the \emph{items} of a token list
+% usually are \emph{tokens.} Especially, the curly braces in the code
+% you type usually are converted into certain \emph{character tokens}
+% that are single items of the resulting token list.\footnote{I discover
+% this conceptual puzzle 2012-05-16.}
+%
+% The conceptual trap here may have resulted from denoting lists
+% in a \emph{\Wikienref{juxtaposition}} notation.
+% In Section~\ref{sec:lists-intuit}, I have written `aa' for a
+% ``list" of \emph{two} items. ``List" is rather a \emph{computer science}
+% term, its mathematical counterpart rather is the notion of (finite)
+% \emph{sequences.} The usual \emph{mathematical} notation for a finite sequence
+% writes list items surrounded by \emph{\wikienref{bracket}{brackets}}
+% (round---\emph{\Wikienref{parentheses}}---seems to be more common than square,
+% also \wikienref{angle brackets}{chevrons} are used).
+%
+% So the \emph{string} `aa' can be written more clearly---mathematically---as
+% $(`a',`a')$. The trap with `\a' is that it could be \emph{either} the \emph{string}
+% $(`\',`a')$ \emph{or} the one-item list $(`\a')$ of strings.
+% But even in the latter case, I urge not to consider it a \emph{\TeX\ token}.
+% Rather, I consider `\a' a mistaken way of referring to the
+% named token \NTOK{a} whose name is the string `a' (or $(`a')$).
+% (Section~\ref{sec:toks}).
+%
+% However, the conceptual trap about arglists and token lists
+% (there must have been some ``Arglist"!\@) lurks on another level,
+% as follows. Recall \TTb's notation of \chtok{<char>}{<cat>}
+% for the \emph{character token} that \TeX's tokenizer forms
+% from <char> in the character buffer when <char>'s category code is <cat>.
+% Usually, the \emph{character} `a' is converted into the
+% \emph{character token} \lttok{a}, `{' is converted into \lbtok,
+% and `}' is converted into \rbtok.
+%
+% We are turning to some \strong{examples} and \strong{counterexamples}.
+% Let us see what confusions occurred in the ``intuitive" view on
+% arglists in Section~\ref{sec:arglists-intuit}.
+%
+% % \begin{example}{1} It
+% First, it was bad in Section~\ref{sec:arglists-intuit}
+% to think that `aa' is a two-item arglist. It was confused with something
+% like $\lttok{a}\lttok{a}$. The latter looks like a token list---or is it an arglist?
+% Both? Anyway, it is juxtaposition notation applied to tokens,
+% mathematically it is $(\lttok{a},\lttok{a})$, so~\dots
+% % \end{example}
+%
+% Now let us reconsider the ``intuitive recursive definition" of arglist.
+% Or let us look at a recursive definition of \emph{token} list.
+% \inlineitem{1} There is nothing wrong with saying the the empty list is
+% a token list, the same holds for arglists.
+% \inlineitem{2} a.~When we attach an arbitrary token to a \emph{token} list
+% (at the left), the result is another token list---fine.
+% There are only certain difficulties with ``handling" special token lists
+% such as $\lbtok\lttok{a} = (\lbtok,\lttok{a})$.
+% And the latter is \emph{not} an \emph{arglist!} \
+% b.~When we attach a \emph{named} token to an arglist (at the left),
+% the result \emph{is} an \emph{arglist}.\footnote{This is
+% a \emph{conjecture} only right now---2012-05-16---in which I strongly believe.
+% Likewise later.}
+% c.~When we attach a \emph{letter} token \lttok{<char>} to an arglist
+% (at the left), the result \emph{is} an \emph{arglist}.
+% d.~When we talked about ``brace groups," they seemed to be \emph{strings}
+% of characters. Instead, I would like to suggest that a brace group
+% is an \emph{arglist}\pdots
+% When \lbtok\ is attached to the left of an arglist and \rbtok\ to the right,
+% the result is an arglist---this is what I would call a ``brace group"!
+% e.~The \Wikienref{concatenation} of two arglists is an arglist.
+%
+% \begin{smallpar}
+% The above notion of ``attaching" a token to a token list or an arglist
+% % should be clarified, but instead of a general definition in terms of
+% % ``words" of formal languages, examples may suffice here and now.\footnote{2012-05-16.}
+% should be clarified. Attaching an item $j$ at the left of a list $\lambda$
+% is the same as concatenating the one-item list $(j)$ with $\lambda$\pdots
+% but the English \wikienref{append}{Wikipedia} seems to explain concatenation by
+% \emph{appending}. As we \emph{remove} items one-by-one from the \emph{left}
+% (beginning) of a list, I prefer the inverse \emph{prepending} items as basic operation
+% for building lists---cf.\ \Wikienref{CAR and CDR}.
+% \end{smallpar}
+%
+% We won't complete a formal (recursive) definition of arglist here and
+% now.\footnote{2012-05-16.} Just observe that ``brace groups"
+% make the difference between token lists and arglists.
+% Recall that an ``item" of an arglist ``operationally" is defined
+% as something that a one-parameter macro removes.
+% Such a macro removes certain single tokens
+% (space tokens not among them)---and entire ``brace groups"!
+% Especially, consider \[\lbtok\rbtok\]%%%.
+% Actually, this is another ambiguous notation.
+% If it refers to $(\lbtok,\rbtok)$, it is a \emph{token} list,
+% not an arglist. If it refers to $(\lbtok\rbtok)$---it should
+% better refer to $((\lbtok,\rbtok))$, which is a
+% \emph{one-item arglist} whose only item is the former two-item token list!
+%
+%% <- 2012/05/17b ->
+Let us reconsider the examples from Sections~\ref{sec:lists-intuit}
+and~\ref{sec:arglists-intuit}, and pack them into a single example.
+If you type a file line
+\begin{equation}
+ `a a\a{a}'
+\end{equation}
+(\emph{eight} keystrokes),
+it should usually be converted into this \emph{seven}-item list
+of
+%%% (five) %% rm. 2015/11/14 -- ???
+tokens:
+\begin{equation}
+ \label{eq:toks}
+ \lttok{a}\;\sptok\;\lttok{a}\;\NTOK{a}\;\lbtok\;\lttok{a}\;\rbtok
+\end{equation}
+---with notation from Section~\ref{sec:toks} and
+\TTb's notation \chtok{<char>}{<cat>}
+for the \emph{character token} that \TeX's tokenizer forms
+from <char> in the character buffer when <char>'s category code is <cat>.
+
+It turns out that the token list in \ref{eq:toks}
+provides an arglist of \emph{four} items: The token \lttok{a}
+at the first and third place, the named token \NTOK{a}, and the entire
+token list $\lbtok\lttok{a}\rbtok$ as a single item---a ``brace group."
+The space token is ignored.\footnote{\TTbp.~201: ``\TeX\ doesn't use
+single spaces as undelimited arguments."}
+
+You can try this after `\renewcommand{\a}{A}'\footnote{Otherwise
+ \cs{a} is a one-parameter macro that breaks 'dowith''s control.}
+with 'dowith':
+\begin{equation}
+ \label{eq:sample-code}
+ `\DoWith\typein a a\a{a}\StopDoing'
+\end{equation}
+Then \LaTeX\ shows `a', `a', `A' from `\a', and another `a' from within
+the braces---`\typein' (as any macro with arguments) removes them.
+
+% \show\a
+% \a{a}
+\renewcommand*{\a}{A}
+% {\MakeNormalHere\# \newcommand*{\TypeOut}[1]{\typein{#1}}
+% \global\let\TypeOut\TypeOut}
+% \let\TypeOut\typein
+% \let\TypeOut\typeout
+% \DoWith\TypeOut a a\a{a}\StopDoing
+% \DoWith\typein a a\a{a}\StopDoing
+% { %%% \tracingmacros=1 \tracingonline=1
+% \MakeNormalHere\# \AssignCatCodeTo{2}\]
+% \DoWith\typein #a\a{a]\StopDoing}
+
+I have avoided saying \ref{eq:toks} \emph{were} an arglist of 4 items.
+The mathematical basic way of writing lists---understood as finite
+\emph{\wikienref{sequence}{sequences}}---as ``commma-separated lists"
+within \wikienref{bracket}{brackets} may clarify the difference
+(that the \Wikienref{juxtaposition} notation tends to conceal).
+The \emph{token} list is
+\begin{equation}
+ \label{eq:toks,}
+ (\lttok{a}, \sptok, \lttok{a}, \NTOK{a}, \lbtok, \lttok{a}, \rbtok)
+\end{equation}
+while the list of macro arguments is
+\begin{equation}
+ \label{eq:args}
+ (\lttok{a}, \lttok{a}, \NTOK{a}, (\lbtok, \lttok{a}, \rbtok)).
+\end{equation}
+\ref{eq:toks} or \ref{eq:toks,} simply is \emph{not} an arglist
+(since neither \lbtok\ nor \rbtok\ can be a macro argument),
+and the arglist \ref{eq:args} ``provided" by the list of tokens
+is \emph{not} a list of \emph{tokens}---its final item is a
+three-item list of tokens, and a token cannot be a list of
+two or more tokens itself(\emph{!?}).
+
+\subsection{Another Notation and the Example's Steps}
+\label{sec:steps} %% 2012/05/20
+\begin{smallpar}
+To write token lists easier and hopefully easier to read,
+I would suggest writing \qtd{.<char>} for the character token
+that the tokenizer ``usually" forms from character <char>, i.e.,
+adding the \emph{standard} category code as in \TTb\ (page~37).
+Then \ref{eq:toks} would read\footnote{See Section~\ref{sec:toks} for the question mark.}
+\begin{equation}
+ .&a\,.\codesp\,.&a\,\ntok{a}\,.\codelb\,.&a\,.\coderb
+\end{equation}
+and the corresponding arglist is
+\begin{equation}
+ (.&a,.&a,\ntok{a},(.\codelb\,.&a\,.\coderb))
+\end{equation}
+In ``retrospect," the result of tokenizing \ref{eq:toks} should be
+\begin{equation}
+ \label{eq:retro}
+ \ntok{DoWith}\,\ntok{typein}\,
+ .&a\,.\codesp\,.&a\,\ntok{a}\,.\codelb\,.&a\,.\coderb\,
+ \ntok{StopDoing}
+\end{equation}
+and the intention is that it works like
+\begin{equation}
+ %% added \,s 2012/06/07:
+ \ntok{typein}\,.\codelb\,.&a\,.\coderb\,
+ \ntok{typein}\,.\codelb\,.&a\,.\coderb\,
+ \ntok{typein}\,.\codelb \ntok{a}\,.\coderb\,
+ \ntok{typein}\,.\codelb\,.&a\,.\coderb
+\end{equation}
+(The definition of `\DoWith' in Section~\ref{sec:core} indeed adds surrounding braces,
+ if missing.)
+However, \TeX\ rather tries to work with as few tokens ahead as possible.
+When it finds \ntok{DoWith} and the latter's meaning is the one intended
+by 'dowith', it first looks for nothing more than the two arguments
+required by our definition of `\DoWith'. A few moments later,
+the token buffer's content will just be\footnote{If you use
+ `&\DoWithAllOf&\typein\codeLB a\codeSP a&\a\codeLB a\codeRB\codeRB'
+ %% <- \cs bad 2015/11/14
+ instead, the entire token sequence \ref{eq:retro} will appear in the
+ token buffer ``at once."}
+\begin{equation}
+ \ntok{typein}.\codelb.&a.\coderb\,\ntok{expandafter}\,\ntok{DoWith}\,
+ \ntok{expandafter}\,\ntok{typein}\,\ntok{fi}
+\end{equation}
+Next $\ntok{typein}.\codelb.&a.\coderb$ is expanded according to the code for
+`\typein' in \file{latex.ltx}. Some unexpandable tokens will emerge
+and be moved into the ``instruction buffer," %% cmd -> instr 2012/11/04
+and you should get a screen
+message with `a' and a prompt. When you have entered something,
+the remaining \ntok{expandafter} tokens and the \ntok{fi} will be
+removed from the character buffer, and it contains only
+\begin{equation}
+ \ntok{DoWith}\,\ntok{typein}
+\end{equation}
+Another token is ordered from the tokenizer to provide a second
+argument for expanding \ntok{DoWith}. The token .\codesp\ comes in,
+but that doesn't serve as a macro argument. It is removed, and the
+next token is .&a. The same story as before happens, until the
+named token \ntok{a} is found\pdots
+\end{smallpar}
+
+\subsection{Summary of Possible Arglist Items}
+\begin{smallpar}
+For $0\leq i\leq 15$, let $\Chi_i$ be the set of character tokens
+of category code $i$. $\Chi_1$ is the set of tokens working like
+$\lbtok$, and $\Chi_2$ is the set of tokens working like $\rbtok$.
+
+Let $E$ be the set $\{3,4,6,7,8,11,12,13\}$.
+These numbers are the category codes for
+\meta{math}, \meta{align}, \meta{parameter}, \meta{super}, \meta{sub},
+\meta{letter}, \meta{other}, \meta{active} respectively.
+Let $\Chi_E$ be the set of character tokens of category code in $E$
+(so $\Chi_E=\bigcup_{i\in E}\Chi_i$).
+
+Let $\circ$ be the \emph{concatenation} operation among token lists.\footnote{%
+ %% 2012/05/18
+ \TODO: Define for representations by maps, or: %% \ 2012/11/05
+ ``Concatenation is about as basic as natural numbers and is
+ understood in terms of axioms rather than by a definition.''---See
+ notes from 2011 (even with attempts with \Wikienref{Category theory})
+% the \wikienref{Sequence}{English}
+ the English Wikipedia for
+ \wikienref{Sequence}{sequences}---\wikideref{Folge (Mathematik)}{German}
+ article too much restricted to maps.}
+
+The following kinds of token lists form a single arglist item,
+i.e., can serve as an argument for an undelimited parameter:
+\begin{enumerate}
+ \item a \emph{named} token, or the single-token list consisting of it,
+ if you prefer that;
+ \item a \emph{character} token from $\Chi_E$ or the list consisting of it;
+ \item a \emph{brace group.}
+ That is a token list meeting the following conditions:
+ \inlineitem{1} its \emph{first} token is in $\Chi_1$,
+ \inlineitem{2} its \emph{last} token is in $\Chi_2$,
+ \inlineitem{3} it has as many occurrences of tokens from $\Chi_1$ as from $\Chi_2$,
+ \inlineitem{4} if it is split as $\lambda\circ\rho$, there are not
+ more $\Chi_2$ occurrences in $\lambda$ than $\Chi_1$ occurrences in $\rho$
+ (``don't close before opening").
+\end{enumerate}
+The second claim can be checked with
+\begin{equation}
+ `\DoWith\typein$#^_a1~\StopDoing'
+\end{equation}
+% \begingroup
+% \def\a{A}\MakeNormalHere\#
+% \DoWith\typein$# ^_a1~\StopDoing
+% \DoWith\typein#1\StopDoing
+% \endgroup
+as to what works.
+(The claim is not affected by one or two surprises.)\footnote{Moreover,
+ `&\DoWith&\typein&#1&\StopDoing' %% \cs bad 2015/11/14
+ tells something about ``parameter tokens."}
+Characters with different category codes
+either are not converted into a character token\footnote{\TTbp.~47.}
+or are not accepted as macro arguments. The latter applies to ``brace" tokens
+in $\Chi_1$, $\Chi_2$ and to the single space token \sptok.
+
+As to \emph{``brace groups"}, the third and fourth condition above
+are intended to say that what is between the two outer tokens
+is $\langle$balanced text$\rangle$ in the sense of \TTbp p.~275f. and~385;
+i.e., for two tokens $a$, $b$ and a token list $\beta$,
+$(a)\circ\beta\circ(b)$ is a brace group exactly if $a$ is from $\Chi_1$,
+$b$ is from $\Chi_2$, and $\beta$ is $\langle$balanced text$\rangle$.
+The conditions are more formal than what I can find in \TTb,
+but still they don't give me an idea of all possibities.
+This should be improved by the following recursive definition:
+
+\begin{trivlist}\item
+B1.~The empty list is balanced text.
+B2.~For any token $t$ not in $\Chi_1$ or $\Chi_2$,
+ the single-item token list $(t)$ is balanced text.
+ (Such a token is either a \emph{named} token or a
+ \emph{character} token from $\Chi_E$ or \emph{the space token}~\sptok.)
+B3.~If $\alpha$ and $\beta$ are balanced texts,
+ then $\alpha\circ\beta$ is balanced text.
+B4.~If $\beta$ is balanced text,
+ $a$ is from $\Chi_1$, and $b$ is from $\Chi_2$,
+ then $(a)\circ\beta\circ(b)$ is balanced text.
+ (This is a brace group, and the only way of getting a brace group.)
+B5.~Nothing else is balanced text.
+\end{trivlist}
+
+In other words, a token list is a brace group if and only if
+it is balanced text and starts with a token from $\Chi_1$
+and ends with a token from $\Chi_2$.\footnote{Again, this may be more
+ of a draft for a paper, or notes for it, than package documentation.}
+\end{smallpar}
+
+\subsection{Summary: ``Commands" Usable with 'dowith'}
+In the \hyperref[sec:apply]{implementation section,}
+you learn about
+\[`\DoWith<cmd>',\quad `\DoWithAllOf<cmd>',\quad
+ \mbox{and}\quad `\DoWithAllIn<cmd>'.\]
+(\LaTeX\ users may type `{<cmd>}' instead.)
+What <cmd>s are allowed?
+
+\begin{enumerate}
+ \item All \strong{one-parameter macros} <cmd> work this way,
+ unless there are programming mistakes outside 'dowith'
+ (also thinking of arguments that take over control
+ from 'dowith' commands before the argument list is finished).
+ \item \strong{Other one-parameter} ``commands" <cmd> such as
+ \TeX\ \strong{primitives} may work---you must think of
+ the fact that surrounding \emph{braces} are added.\footnote{\TODO: %% \ 2012/11/05
+ in the future, variants not adding braces could be added.}
+ So the \strong{primitives} `\hbox' and `\vbox' work,
+ for instance. `\show' is an example that doesn't work at all,
+ it takes the single starting brace token and then confuses
+ `\DoWith'.
+ \item Some <cmd>s taking \strong{no argument} may make sense, e.g.,
+ for getting
+ \begin{enumerate}
+ \DoWithAllOf{\item}{{apples,}{pears,}{peaches}}
+ \end{enumerate}
+ from
+ \begin{quote}
+ &\begin{enumerate}\\
+ \null\code{~~}&\DoWithAllOf{&\item}{%
+ \codebd{apples,}\codebd{pears,}\codebd{peaches}}\\
+ &\end{enumerate}
+ \end{quote}
+ Recall that `\item' at most takes an \emph{optional} argument.
+ \item <cmd> must \strong{not take more than one} parameter.
+ %% see def. \DoWith
+ A different package will support multi-parameter macros.
+\end{enumerate}
+
+% Rather, ``list" is a term from \Wikienref{computer science} here.
+% It corresponds to the notion of ``sequence" in mathematics
+% and to ``word" with formal languages.
+%
+% Especially, we have (\meta{i})~lists of \emph{characters} that
+% the \emph{\TeX} program recieves from files and
+% (\meta{ii})~lists of so-called \emph{tokens}
+% that the \TeX\ program forms from the incoming list of characters
+% and that it works on.
+%
+% There are \emph{more} kinds of lists that \TeX\ works on.
+% Here we are dealing with ``\TeX's gullet."\footnote{Cf.\ documentation
+% of the \ctanpkgref{bitelist} package.}
+% \TeX's mouth processes tokens formed from character input.
+% It may turn a list `<toks-a><toks_b><toks-c>' of tokens
+% into a list `<toks-a><toks-B><toks-c>', i.e.,
+% replace <toks-b> by <toks-B>---by so-called ``expansion".
+% The result may be subject to expansion as well.
+% When nothing is left to be expanded, results are passed to another,
+% more interior subprocessor of \TeX. This one is deeper than \TeX's mouth,
+% we are not concerned with that here.
+%
+% Not \emph{all} of those tokens in ``\TeX's mouth" are formed
+% (``directly") from input characters.
+% Rather, some \cs{csname} function may form \emph{new} tokens
+% from other tokens in \TeX's mouth---and place them there again.
+% This way characters `\csname a\endcsname' you type may just work like
+% `\a'.
+%
+% It is difficult to tell on the \emph{character level} what the
+% present package does. The relation between incoming characters
+% and resulting tokens can hardly be explained by a single sentence or so.
+% However, <cmd> here refers to a command <macro> with a single
+% undelimited macro. More precisely, a certain character sequence
+% (``string") in the code you type, will be converted into a TODO
+%
+% \subsection{Separators}
+% TODO
+%
+% \subsection{Iterators and \TeX's Mouth}
+% TODO
+%
+\section{Similar Commands in other Packages}
+%% <- section again 2012/05/17b
+\subsection{``Heavy" Packages} %% add. heading 2012/05/17b
+The \CtanPkgRef{etex}{$\varepsilon$-TeX}-related %% e->... 2012/05/09
+packages \ctanpkgref{etextools}
+(Florent Chervet), \ctanpkgref{etoolbox} (Philipp Lehman),
+and \ctanpkgref{texapi} (Paul Isambert) seem to include and
+(very much) extend the functionality of 'dowith'.
+Also the `\ForEach'\texttt{\dots\unkern\@} macros of %% \@ 2012/06/03
+\ctanpkgref{forarray} (Christian Schr\"oppel) seem to extend
+the present `\DoWith'\texttt{\dots\unkern\@} commands. %% \@ 2012/06/03
+Moreover, Ahmed Musa describes such commands as %% 2012/06/03
+``Parsing \qtd{tsv} lists" in documenting his
+\ctanpkgref{catoptions} package.
+\ctanpkgref{moredefs} (Matt Swift) provides list handling commands
+like the few that are here.\footnote{\ctanpkgref{arrayjobx}% %% % 2012/11/05
+ provides somewhat ``exotic" handling of ``lists".} %% 2012/05/10
+%% 2012/11/05:
+---In October 2012, Ahmed Musa's \ctanpkgref{loops} appeared on
+\acro{CTAN}, offering loops of several ``categories" about as those
+that are listed below, very elaborate.%
+%% /2012/11/05
+% (I~do not want to load that much.)
+%% <- 2012/11/04 ->
+---I do not want to load that much. I need and only need something
+excessively simple, very few lines of code, as presented in
+Section~\ref{sec:implement}. The next sections somewhat point
+out single features of loop constructs that I do not want to have.
+
+\subsection{Separators} %% add. heading 2012/05/17b
+Regarding \LaTeX\ macros in `latex.ltx', the basic macro `\DoWith' of
+the present package resembles |\@tfor| very much, which likewise deals
+with lists without separators. By contrast, \LaTeX's |\@for| deals with
+\emph{comma-separated} lists (such as lists of package options).
+With comma-separated lists, a ``string" of characters counts as
+an item when it is delimited by commas, or by a comma and the
+list ``border," or spaces may be used as separators additionally.
+However, when \LaTeX\ analyzes such lists (in ``\TeX's gullet"),
+it uses representations by \emph{character tokens} of them.
+
+%% moved here 2012/05/17b:
+% %% 2011/11/10:
+% Also Heiko Oberdiek's \ctanpkgref{zref} deals with ``lists" of
+% ``properties" of ``entities,"
+%% 2011/11/11: comma separated!
+
+%% 2012/05/09f.:
+The more recent \ctanpkgref{lmake}
+(Shengjun Pan) %% 2012/05/18
+provides a key-value syntax for printing lists of
+complex mathematical expressions easily (using some assignments)
+as well as defining commands according to a pattern from a list.
+Those lists are comma-separated.
+
+\subsection{``For" Loops vs.\ ``Foreach" Loops} %% mv. up 2012/05/20
+What about \ctanpkgref{forloop} (Nick Setzer),
+\ctanpkgref{multido} (Timothy Van Zandt, Rolf Nie\-praksch, Herbert
+Vo\ss), and \ctanpkgref{xfor} (Nicola Talbot)?
+
+'xfor' is just a reimplementation of `\@for'.
+'forloop' and 'multido' are more close to ``real \qtd{for} loops"
+(cf.\ \wikienref{for loop}{\meta{Wikipedia}}).
+Loops of the latter kind go through a certain set as well,
+but such sets rather consist of \emph{numbers} and are exhausted
+by incrementing (or also decrementing) variables
+\wikienref{Loop counter}{(counters).}
+This is essentially not needed
+(neither helpful) %% 2012/05/20
+when a list literally is
+\emph{enumerated}---such loops are distinguished as
+\wikienref{Foreach loop}{``foreach loops."} %% 2012/05/19
+
+\subsection{Iterators} %% add. heading 2012/05/17b
+So `\DoWith' and |\@tfor| rather provide ``foreach" loops.
+A major difference between them is that the latter uses a
+\wikienref{For loop}{``loop variable"} or
+%%% rather %% rm. 2012/05/20
+\wikienref{Iterator}{``iterator"} to which the elements
+of the list are assigned.
+`\DoWith<cmd>' does not use such a loop variable
+or such assignments and thus is ``expandable" at least when <cmd>
+(and the elements, depending on <cmd>) are expandable.
+On the other hand, `\@tfor' applies some procedure to the list
+elements without needing a \emph{name} for the procedure
+(or a \emph{macro} storing the procedure).
+%
+I wondered whether behind \LaTeX's
+`\@tfor' (and `\@for') there was an ``ideological" consideration
+such as ``A loop must have a loop variable!"\pdots
+% However, avoiding usage of a macro name
+% (to store the ``loop body" code) %% 2012/05/18
+% and a macro parameter
+% (to incorporate the list item into the body code) %% 2012/05/18
+% may have been a good reason.
+%% <- 2012/05/19
+
+%% 2012/05/20:
+Hopefully more clearly on ``loop variable" vs.\ our approach:
+In order to run
+\[<code-before><item><code-after>\]
+on each <item> of a <list>, \emph{we here}
+% \[
+\begin{equation}
+ \mbox{define} \quad `\do' \quad \mbox{as} \quad
+ `#1'\;\to\;`<code-before>#1<code-after>'
+\end{equation}
+% \]
+and then run `\do{<item>}' for each <item> in <list>,\footnote{Cf.~description
+ of procedure in terms of tokens in Section~\ref{sec:steps}.}
+\begin{equation}
+ \mbox{always replacing}\quad `\do{<item>}'\quad \mbox{by}\quad `\do{<item>}\do'.
+\end{equation}
+(`\do' is only an example command that 'dowith' supports especially.)
+% The ``received" approach from ``usual" programming languages,
+% \file{latex.ltx}, and its followers is
+In \file{latex.ltx} instead, we find things like
+% \[
+\begin{equation}
+ \label{eq:tfor}
+ `\@tfor\@tmp:=<list>\do{<code-before>\@tmp<code-after>}'
+\end{equation}
+% \]
+where `\@tmp' is a \emph{macro} that is set to be <item> at each
+iteration of the loop, by
+\begin{equation}
+ `\def\@tmp{<item>}'
+\end{equation}
+within `\@tforloop'. After that,
+\begin{equation}
+ \label{eq:code-tmp-code}
+ `<code-before>\@tmp<code-after>'
+\end{equation}
+from \ref{eq:tfor} is run.---\ref{eq:code-tmp-code} like
+\ref{eq:tfor} is stored in a larger macro. `\do' in \ref{eq:tfor}
+does not act as a macro, it just delimits a macro parameter
+in order give a feeling of some familiar programming structure.
+This organisation of macros is fine when the loop body code
+is only used by the containing macro, while the 'dowith' approach
+to store the ``loop body" in an own macro has been useful when
+the loop body code also is used for different purposes
+or when it has been introduced before I thought of using it
+in a loop.
+% \[\mbox{defining}\;`\@tmp'\;\mbox{as}\;<item>\quad \mbox{and run} \quad
+% `<code-before>\@tmp<code-after>'\]
+% for each <item> in <list>.
+
+Note that this only was an example. In general, <item> may appear
+more than once in the ``loop body."
+
+``Expandability" by \emph{avoiding} something iterating `\def\@tmp{<item>}'
+and doing iteration in \TeX's gullet (`\do' or so must have been defined earlier)
+is essential especially within \cs{write}.
+Assignments do not work there. A major motivation for developing
+'dowith' developed with the \ctanpkgref{blog} package
+that \cs{write}s \acro{HTML} code.
+Assignments happen in ``\TeX's stomach." %% 2012/11/04
+That place might be called the
+``instruction buffer" to which %% cmd -> instr 2012/11/04
+the ``expansion processor" moves items from the incoming token buffer
+that cannot be expanded (any more).
+
+\subsection{Separator Macros} %% add. heading 2012/05/17b
+Commands like `\DoWith' also could save tokens thinking of list macros
+(in \LaTeX/`latex.ltx') that use a \emph{separator macro}
+which may be used as a \emph{command} to be applied to the list
+elements. One example is
+`\dospecials' that already is in Plain \TeX\ and expands to
+\[`\do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~'\]
+% \begin{verbatim}
+% `\do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~'
+% \end{verbatim}
+An important application of `\dospecials' is temporarily
+switching off the ``special" functionality of the ``elements"
+in `\dospecials'. With \LaTeX, this may happen thus:
+\[`\let\do\@makeother\dospecials'\]
+% \begin{verbatim}
+% `\let\do\@makeother
+% \end{verbatim}
+With 'dowith', you can do the same with a shorter variant
+`\specials' of `\dospecials', defined by
+\[`\def\specials{\ \\\{\}\$\&\#\^\_\%\~}'\]
+and then
+\[`\DoWithAllIn\@makeother\specials'\]
+`latex.ltx' uses `\@elt' instead of `\do' for its own list macros.
+
+\subsection{Ye Olde \cs{loop}} %% add. heading 2012/05/17b
+%% added 2011/11/03:
+There also is |\loop<loop-body>\repeat| in Plain \TeX\ and a
+refined\footnote{Using Kabelschacht's suggestion, cf.\ Section~\ref{sec:kabel}}
+version of it in `latex.ltx'. It is \emph{not} expandable
+since it starts with an assignment for `\body' (Plain \TeX) or
+`\iterate' (`latex.ltx'),
+%% add. 2012/05/20:
+and then some assignments are needed to stop the loop,
+such as incrementing or decrementing a \emph{counter.}
+As to the programming structure, it is very simple and general,
+I think any kind of loop can be implemented by this
+(apart from nested loops). E.g., I realize\footnote{2012-05-20}
+that even a ``foreach" loop could be implemented by managing
+a list macro, e.g., using \LaTeX's internal `\@next'.
+%% rm. 2012/05/20:
+% that you cannot probably
+% what kind of loops it addresses. However, the applications
+% I have seen have been ``for" or (rather) ``while" loops.
+% ``While" loops can ``emulate" ``for" and ``foreach" loops
+% by having the ``incrementation" method or the ``enumeration" method in
+% their body. This is quite obvious for ``for" loops, not quite so for
+% ``foreach" loops; which for practical application (in my view) means
+% that neither \LaTeX/\TeX's `\loop' macro nor in general ``while" loops
+% is/are very helpful for implementing ``foreach" loops,
+% as rather `\DoWith' and similar constructions are.
+% The reason for this is (as it seems to me) is that you
+% (a human being) can much more easily enumerate (``list")
+% the items of a list (you have in mind) than define the \emph{method}
+% that (allegedly) is behind your enumeration. \ \meta{Example:}
+% \[`\DoWithAllOf{\printsamplearea}{\red\green\blue}'\]
+% ---\emph{how} (according to what ``method"?) did you ``proceed" from
+% `\red' to `\green' and from `\green' to `\blue'?
+
+\subsection{Without Iterator and Separators} %% add. heading 2012/05/17b
+%% 2011/11/07:
+In \LaTeX's \ctanpkgref{tools} bundle, \ctanpkgref{xspace}
+%% add. 2012/05/18:
+was developed in the nineties by David Carlisle.
+It had a rather fixed exception list implemented by a deeply
+nested conditional. In 2004 Morton H\o gholm joined,
+and now 'xspace' has a list macro
+`\@xspace@exceptions@tlp' %% was xpspace 2012/05/17b
+without separators.
+It is handled like here, except that it ``breaks" the loop
+when an item is found that applies.
+%% add. 2012/05/17bf.:
+After the ``next" token is stored by the usual \cs{futurelet},
+the exception list is searched without using an iterator.
+Addition and removal commands are provided as well.
+
+% \pagebreak %% 2012/05/17b
+% \newpage %% 2012/05/19
+\section{Implementation} %% 2012/05/10
+\label{sec:implement}
+\subsection{Package File Header (Legalese)} %% sub 2012/05/10
+\input{dowith.doc}
+
+\newpage %% 2012/06/04
+\section{Ack.: 25 Years of Kabel\-schacht's \cs{expandafter}} %% 2012/05/20
+\label{sec:kabel}
+The essential idea of 'dowith' and `\DoWith' is
+\[`\if<code>\expandafter<one-token>\fi'\]
+% Alan Jeffrey: \tugbartref{tb11-2/tb28jeffrey}{``Lists in \TeX's Mouth,"}
+% \acro{TUG}boat Vol.~11 (1990), No.~2, pp.~237--245),
+% \urlhttpref{tug.org/TUGboat/tb11-2/tb28jeffrey.pdf}.}
+It was described by \textsc{Alois Kabelschacht} as
+\tugbartref{tb08-2/tb18kabel}{``&\expandafter\ vs.\ &\let\ and &\def\
+ in Conditionals and a Generalization of PLAIN's &\loop"}
+in \acro{TUG}boat Vol.~8 (1987), No.~2, pp.~184f.\
+(a little more than one column).\foothttpurlref{tug.org/TUGboat/%
+ tb08-2/tb18kabel.pdf}
+See some German biographical notes on Kabelschacht in the
+\wikideref{Benutzer:RolteVolte/Alois_Kabelschacht}{German Wikipedia.}\foothttpurlref{%%
+ de.wikipedia.org/wiki/Benutzer:RolteVolte/Alois\string_Kabelschacht}
+It seems to me that Knuth didn't note this application of `\expandafter'
+in \TTb.\footnote{% %% 2012/05/22
+ However, the paper \meta{\qtd{uses the fact that the expansion of both
+ \cs{else ... }\cs{fi} and \cs{fi} is empty.}} In \TTb\ I only find
+ %% &\else and &\fi failed
+ \meta{\qtd{The ``expansion" of a conditional is empty}} on page~213.}
+It was then applied in many macros of \file{latex.ltx},
+cf.~\file{source2e.pdf}.
+
+\end{document}
+
+VERSION HISTORY
+
+2011/11/02 for v0.1 very first
+2011/11/03 discussing \loop; \pagebreak
+2011/11/07 xspace
+2011/11/10f. zref added/removed
+2012/05/09 for v0.2 $\varepsilon$-\TeX
+2012/05/10 "iterator", \MDkeywords, \hypersetup,
+ Legalize -> Legalese, "Related packages",
+ tighter sectioning
+2012/05/14 for v0.21 spurious space in title fixed
+2012/05/14b r0.21a another keyword
+2012/05/15 abstract: why expandable
+2012/05/16 discussion much extended;
+ stored separately before reworking
+2012/05/16b r0.21b reworking ... many mistakes!
+2012/05/17 updating date, was 2012/05/14 before!
+ and from 2012/05/14b onwards it should
+ have been r0.21a; storing again,
+ renaming dir.s ...
+2012/05/17bf. r0.21c reducing text ...
+2012/05/19 r0.21d braces and commands applicable
+2012/05/20 corrections, clarifications, reorder;
+ especially examples for `dowith' vs.
+ `\@tfor'; remarks about `\loop' corr.:
+ how to `foreach' ...; Kabelschacht
+2012/05/22 r0.21e Kabelschacht vs. TeXbook
+2012/06/03 r0.21f cf. `catoptions'; \dots\unkern\@, vs.\
+2012/06/07 r0.22a added \,s in "?typein ..."
+2012/07/25 r0.3 "\csname name construct"?
+2012/11/02ff. gullet, plainpkg, more modifications
+2012/11/19 mod. on "mouth" (bibleref-mouth)
+2012/11/27 r0.3a plainpkg
+2015/11/14 rm. "(five)" & \ctanpkgdref, code in two
+ footnotes, don't use hyperref draft
diff --git a/macros/generic/dowith/docsrc/fdatechk.tex b/macros/generic/dowith/docsrc/fdatechk.tex
new file mode 100644
index 0000000000..afae09a988
--- /dev/null
+++ b/macros/generic/dowith/docsrc/fdatechk.tex
@@ -0,0 +1,12 @@
+\ProvidesFile{fdatechk.tex}[2015/11/14 dowith filedate checks]
+%% load earlier:
+%\RequirePackage{filedate,filesdo}
+%\UseReferenceDate{\thepdfmoddate}
+\ModDates
+\DatesDiffErrors
+\FileDateAutoChecks %% 2012/12/20
+\DoWithBasesExts\ReadFileInfos{
+ dowith,domore}{sty,tex}
+\ReadFileInfos{dowith.RLS,fdatechk.tex}
+\DatesDiffWarnings %% 2015/11/14
+\CheckDateOfToday{dowith.RLS} %% corr. 2015/05/22
diff --git a/macros/generic/dowith/docsrc/srcfiles.tex b/macros/generic/dowith/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..512b8bda8c
--- /dev/null
+++ b/macros/generic/dowith/docsrc/srcfiles.tex
@@ -0,0 +1,23 @@
+\ProvidesFile{srcfiles.tex}[2015/11/14 file infos -> SrcFILEs.txt]
+\RequirePackage[r,wrap]{nicefilelist}[2012/05/20]
+\RequirePackage{filedate,filesdo}
+\input{plainpkg}
+\MaxBaseEmptyList*
+%\FileDateAutoChecks
+\ReadFileInfos{dowith.RLS}
+%% packages:
+\ReadPackageInfos{dowith,domore}
+%% documentation:
+\ReadFileInfos{dowith,domore}
+\ReadFileInfos{srcfiles,fdatechk} %% adding fdatechk 2013/03/23
+%% documentation settings and auxiliaries:
+%\NoFileDateAutoChecks
+\FileListRemark[ --]{---USED.---}
+\ReadPackageInfos{catchdq,fifinddo,makedoc,niceverb}
+ %% ^^^^^^^^ 2015/11/14
+\ReadFileInfos{makedoc.cfg,mdoccorr.cfg}
+\NoStopListInfos[SrcFILEs.txt]
+%\DatesDiffWarnings
+%\CheckDateOfToday{dowith.RLS}
+\input{fdatechk}
+\stop
diff --git a/macros/generic/dowith/domore.sty b/macros/generic/dowith/domore.sty
new file mode 100644
index 0000000000..176bf4a2c8
--- /dev/null
+++ b/macros/generic/dowith/domore.sty
@@ -0,0 +1,164 @@
+ \input plainpkg
+\ProvidesPackage{domore}[2015/09/17 v0.32 dowith extended (UL)]
+%% Copyright (C) 2012 2013 2015 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+\PushCatMakeLetterAt %% 2015/09/17
+%% == With \LaTeX, extend 'dowith''s \cs{setdo} ==
+%% %% mod. 2012/11/06:
+%% The original 'dowith' offers |\setdo{<do>}|
+%% for defining a one-parameter macro `\do' expanding to <do>.
+%% The present package allows applying a <digit>-parameter macro
+%% (maybe `\do', <digit> being 2, 3, or ...)
+%% to a list of "brace groups" where each brace group
+%% contains <digit> arguments. If \LaTeX\ is present ...
+\ifltx
+%% ... the following extension
+%% \[|\setdo[<digit>]{<do>}]|\]
+%% of the basic 'dowith' version
+%% can be used to define a <digit>-parameter macro `\do'.
+%% You also can equip `\do' with an initial optional argument by
+%% \[|\setdo[<digit>][<default>]{<do>}]|\]
+%% The next two moves allow loading the package
+%% independently of 'dowith' (overriding its definition of `\setdo')
+%% as well as using the package
+%% with a format that has not defined `\do' before.
+%% The first parameter of `\do' may even be \emph{optional.}
+ \let\setdo\relax \let\do\empty
+ \newcommand*{\setdo}[1][1]{\renewcommand\do[#1]}
+\fi
+%%
+%% == Auxiliaries ==
+%% |\@firstsecondoftwo{<balanced-1>}{<balanced-2>}| \
+%% is a variant of \LaTeX's `\@firstofone{<balanced>}' for
+%% \emph{two} arguments. It just removes outer braces
+%% from each of the two arguments (provided it has outer braces),
+%% resulting in \[<balanced-1><balanced-2>\]
+\long\def\@firstsecondoftwo#1#2{#1#2}
+%% % |\@secondfirstoftwo<arg-1><arg-2>| results in <ark-2><ark-1>
+%% % where <ark-1> is ...
+%% % [TODO declare "meta-function removing braces"---in 'dowith' documentation]
+%% % (<arg-1>, <arg-2> must not contain `\par' tokens so far---TODO):
+%% |\@secondfirstoftwo{<balanced-1>}{<balanced-2>}|
+%% \emph{additionally} interchanges the two arguments
+%% (after removing braces):
+\long\def\@secondfirstoftwo#1#2{#2#1}
+%% Our main application is using it as an extended `\expandafter'
+%% before `\fi':
+%% \[`\@secondfirstoftwo{<do>}\fi'\]
+%% will expand to
+%% \[`\fi<do>'\]
+%% This won't work with `\else' in place of `\fi'.
+%%
+%% == Enhanced \cs{DoWith} ==
+%% Here comes a more powerful variant of 'dowith''s `\DoWith'.
+%% Instead of iterating a single "command" <cmd>
+%% on an arglist <args> by
+%% \[`\DoWith{<cmd>}<args>\StopDoing'\]
+%% (cf. `dowith.pdf'), the present `\DoWith' can have a
+%% more complex first argument. If <args> consists
+%% of some brace groups the first of which is {<farg>}
+%% so that <args> is
+%% \[`{<farg>}<rgs>'\]
+%% ---<rgs> being the remaining arglist---
+%% \[|\DoWith{<repeat>}<args>\StopDoing|\]
+%% works like
+%% \[`<repeat>{<farg>}\DoWith{<repeat>}<rgs>\StopDoing'\]
+%% and so on---a recursive explanation. Or if <args> is
+%% \[`{<arg-1>}{<arg-2>}'\dots`{<arg-n>}'\]
+%% ($n$ items), the result is like
+%% \[`<repeat>{<arg-1>}<repeat>{<arg-2>}'\dots`<repeat>{<arg-n>}'\]
+%% The actual definition is:
+\def\DoWith#1#2{%
+ \ifx\StopDoing#2\empty %% not \@empty for Plain 2012/11/05
+ \else\@secondfirstoftwo{#1{#2}\DoWith{#1}}\fi}
+%% In order to \strong{use} the remaining definitions from \strong{'dowith'
+%% together with the present package}, %% \strong 2012/11/06
+%% load `dowith.sty' before `domore.sty'.
+%%
+%% (v0.32:) |\StopDoing| must be provided in case 'dowith'
+%% is not loaded at all. Being "undefined" is very
+%% bad when `\DoWithMore' is used for a list of \emph{assignments.}
+%% As in 'dowith', we assume that no argument starts with something
+%% that has the same meaning as `\DoWith' itself:
+\let\StopDoing\DoWith
+%%
+%% == Applications of \cs{DoWith} ==
+%% `\DoWith' still is somewhat auxiliary. What I have used in practice,
+%% are the following definitions.
+%%
+%% |\DoWithMore{<repeat>}<args>\StopDoing| %% was \DoMore 2015/05/22
+%% with <args> as above
+%% "unpacks" each arglist item so that <repeat> may be a macro
+%% with more than one argument---say, <digit> arguments.
+%% Then <f-arg> or <arg-1>, as well as <arg-2> $\dots$ <arg-n>,
+%% should provide an arglist consisting of <digit> items.
+\def\DoWithMore#1{\DoWith{\@firstsecondoftwo{#1}}}
+%% Now I use metavariable <do> instead of <repeat>.
+%% We consider some "separator" material <sep> to be inserted
+%% between instances of applying <do> to an item of <args>.
+%% We want to get
+%% \[`<do>{<arg-1>}<sep><do>{<arg-2>}<sep>'\dots`<sep><do>{<arg-n>}'\]
+%% This is achieved simply by starting with
+%% \[`<do>{<farg>}'\]
+%% and then proceeding as with
+%% \[`\DoWith{<sep><do>}<rgs>\StopDoing'\]
+%% And that's what |\DoSeparateWith{<do>}{<sep>}<args>\StopDoing| does:
+\def\DoSeparateWith#1#2#3{#1{#3}\DoWith{#2#1}}
+%% |\DoSeparateWithMore{<do>}{<sep>}<args>\StopDoing| combines
+%% the two previous things, inserting separator material <sep>
+%% and unpacking the nested arg\-lists:
+\def\DoSeparateWithMore#1#2{% %% wieder 2012/06/05
+ \DoSeparateWith{\@firstsecondoftwo{#1}}{#2}}
+%% My main application is that <do> is a link macro with arguments
+%% <target> and <text> and that <sep> is \qtdcode{~\string|~}
+%% (or some tie variant) to get a horizontal list of links like
+%% \[\def|{$\vert$}\mbox{<text-1> | <text-2> | \dots | <text-n>}\]
+%%
+%% == Without \cs{StopDoing} == %% 2013/03/20, mv. 2013/03/22
+%% The following enhancements of 'dowith' are provided by %% 2013/03/22
+%% v0.31.
+%%
+%% |\DoWithAllOf{<repeat>}{<list>}| works like
+%% \[`\DoWith{<repeat>}<list>\StopDoing'\]
+%% as in 'dowith', but now with a more general first argument:
+\def\DoWithAllOf#1#2{\DoWith{#1}#2\StopDoing}
+%% |\DoWithAllIn{<repeat>}{<list-macro>}| works as in 'dowith' too
+%% and needs the <repeat> enhancement too: %% 2013/03/21
+\def\DoWithAllIn#1#2{%
+ \expandafter \@secondfirstoftwo \expandafter {#2}{\DoWith{#1}}%
+ \StopDoing}
+%%
+%% == Leaving and History ==
+\PopLetterCatAt
+\endinput
+
+VERSION HISTORY
+v0.1 2012/01/17 developed in `texblog.fdf'
+ (using \[re]newcommand*)
+v0.2 2012/08/07 own file `domore.sty', \def's only
+ 2012/08/08 dealing with "more" \setdo
+v0.3 2012/11/05 using `plainpkg'; removing old % code
+ (see stored v0.2); auxiliaries \long
+ 2012/11/06 doc.: more on \setdo (<digit>, opt. arg.),
+ usage with `dowith' \strong
+ 2012/11/18 doc.: adjusted for `catchdq'; reworking for
+ \DoWith; \DoWithMore, \DoSeparateWith
+ 2012/11/19 doc.: \DoSeparateWithMore
+v0.31 2013/03/20 \DoWithAllOf
+ 2013/03/21 \DoWithAllIn
+ 2013/03/22 moving down new section, mod. doc.
+v0.32 2015/05/22 doc. fix \DoWithMore; providing \StopDoing
+ 2015/09/17 \PushCatMakeLetterAt!
diff --git a/macros/generic/dowith/dowith.sty b/macros/generic/dowith/dowith.sty
new file mode 100644
index 0000000000..a4625aade3
--- /dev/null
+++ b/macros/generic/dowith/dowith.sty
@@ -0,0 +1,204 @@
+\def\filename{dowith} \def\fileinfo{simple list loop (UL)}
+\def\filedate{2012/11/05} \def\fileversion{v0.3}
+%%
+%% Copyright (C) 2011 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Proceeding without \LaTeX ==
+%% v0.3 mainly replaces imitating the
+%% \CtanPkgRef{german}{german.sty} approach to genericity
+%% by \ctanpkgref{plainpkg}:
+\input plainpkg
+\ProvidesPackage{\filename}[\filedate\space
+ \fileversion\space \fileinfo]
+\PushCatMakeLetterAt
+%% If \LaTeX\ is not present ...
+\ifltx \else
+%% ... an old version of its `\in@' is introduced.
+%% It is bad as a subword test
+%% (false positive cases, cf. \CtanPkgRef{nicetext}{fifinddo}
+%% documentation), but 'dowith' will check for single tokens only.
+%% If \LaTeX\ \emph{is} present,
+%% on the other hand, `\ifin@' is recognized while skipping
+%% `false' parts of conditionals, without being matched
+%% by some `\fi' before the next `\else', so I hide it by `\csname':
+ \expandafter\newif\csname ifin@\endcsname
+ \def\in@#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+ \ifx\in@##2\in@false\else\in@true\fi}%
+ \in@@#2#1\in@\in@@}
+\fi
+%%
+%% == Applying a Command == %% 2011/11/07
+%% \label{sec:apply}
+%% === Core ===
+%% \label{sec:core}
+%% |\DoWith{<cmd>}<list>\StopDoing| applies <cmd> to all elements
+%% of <list>. An element of <list> (after tokenizing)
+%% may be either a single token or a group `{<balanced>}'.
+\def\DoWith#1#2{%
+ \ifx\StopDoing#2\empty
+%% The previous `\empty' (replacing `%') is a bug fix as of v0.22
+%% (June 2012), %% 2012/11/05
+%% while in my extension draft I already had it in January 2012.
+%% It allows ``empty" arglist items \qtd{\lbtok\rbtok}.
+%% Before v0.22, such an empty brace group would have resulted
+%% in comparing `\StopDoing' with `\else', so \qtd{\lbtok\rbtok}
+%% would have had the same effect as `\StopDoing', the token text
+%% after `\else' until `\fi' would have been skipped.
+%% Instead, the user may have a reason to allow empty arguments\slash
+%% brace groups.
+ \else#1{#2}\expandafter\DoWith\expandafter#1\fi}
+%% |\StopDoing| delimits the list:
+\let\StopDoing\DoWith
+%% ... something arbitrary that is not expected to occur in a list.
+%% With \[`\let\StopDoing*'\] instead, the star would end lists.
+%%
+%% |\DoWithAllOf{<cmd>}{<list>}| works like
+%% \[`\DoWith{<cmd>}<list>\StopDoing':\]
+\def\DoWithAllOf#1#2{\DoWith#1#2\StopDoing}
+%%
+%% === `&\do' being the Command ===
+%% \label{sec:do}
+%% When the <list> is worked at a single time in the \TeX\ run
+%% where assignments are possible, instead of introducing a new
+%% macro name for <cmd> you can use `\do' for <cmd> as a
+%% ``temporary" macro and define it right before
+%% \[`\DoWith{\do}<list>\StopDoing'\]
+%% However, we provide \[|\DoDoWith{<cmd>}<list>\StopDoing|\]
+%% as a substitute for the former line that at least saves one token.
+%% For the definition of `\do', we provide
+%% |\setdo{<def-text>}|.
+%% It works similarly to \[`\renewcommand{\do}[1]{<def-text>}',\]
+%% so <def-text> should contain a `#1':
+\def\setdo{\long\def\do##1}
+%% With |\letdo<cmd>| that is provided next where <cmd> is defined
+%% elsewhere, you could type
+%% \[`\letdo<cmd>\DoDoWith<list>\StopDoing'\]
+%% It seems to me, however, that you better type
+%% \[`\dowith<cmd><list>\StopDoing'\] instead.
+%% So I provide `\letdo' although I consider it useless here.
+%% It is provided somewhat for the sake of ``completeness,"
+%% thinking that it might be useful at other occasions such as
+%% preceding `\dospecials'.
+\def\letdo{\let\do}
+%% |\DoDoWith| has been described above:
+\def\DoDoWith{\DoWith\do}
+%% By analogy to `\DoWithAllOf', we provide
+%% |\DoDoWithAllOf{<list>}|:
+\def\DoDoWithAllOf{\DoWithAllOf\do}
+%%
+%% === Expand List Macro ===
+%% The former facilities may be quite useless
+%% as such a <list> will not be typed at a single place in the
+%% source code, rather the items to run <cmd> on may be collected
+%% occasionally when some routines run. The elements may be collected
+%% in a macro <list-macro> expanding to <list>.
+%% So we provide \[|\DoWithAllIn{<cmd>}{<list-macro>}|\]
+%% (or `\DoWithAllIn<cmd><list-macro>').
+%% There is no need to type `\StopDoing' here:
+\def\DoWithAllIn#1#2{%
+ \expandafter\DoWith\expandafter#1#2\StopDoing}
+%% |\DoDoWithAllIn{<list-macro>}| saves a backslash or token
+%% for `\do' as above in Sec.~\ref{sec:do}:
+\def\DoDoWithAllIn{\DoWithAllIn\do}
+%%
+%%
+%% == Handling List Macros ==
+%% === Initializing ===
+%% Here is some advanced `\let<cmd>\empty', perhaps a little
+%% irrelevant for practical purposes. Both
+%% \[|\InitializeListMacro{<list-macro>}|\] and
+%% \[|\ReInitializeListMacro{<list-macro>}|\] attempt to ``empty"
+%% <list-macro>, and when we don't believe that \LaTeX\ has been
+%% loaded, both do the same indeed. Otherwise the first one
+%% complains when <list-macro> seems to have been used earlier
+%% while the second complains when <list-macro> seems \emph{not} to
+%% have been used before:
+\ifltx %% v0.3
+ \def\InitializeListMacro#1{\@ifdefinable#1{\let#1\empty}}
+ \def\ReInitializeListMacro#1{%
+ \edef\@tempa{\expandafter\@gobble\string#1}%
+ \expandafter\@ifundefined\expandafter{\@tempa}%
+ {\@latex@error{\noexpand#1undefined}\@ehc}%
+ {\let#1\empty}}
+\else
+ \def\InitializeListMacro#1{\let#1\empty} %% not \@empty 2011/11/07
+ \let\ReInitializeListMacro\InitializeListMacro
+\fi
+%% |\ToListMacroAdd{<list-macro>}{<cmd-or>}|
+%% appends <cmd-or> to the replacement token list of <list-macro>.
+%% <cmd-or> may either be tokenized into a single token,
+%% or it is some `{<balanced>}'.
+\def\ToListMacroAdd#1#2{\DefExpandStart#1{#1#2}}
+\def\DefExpandStart#1{\expandafter\def\expandafter#1\expandafter}
+%%
+%% === Testing for Occurrence of a Token ===
+%% |\TestListMacroForToken{<list-macro>}{<cmd>}|
+%% sets `\in@true' when <cmd> occurs in <list-macro>
+%% and sets `\in@false' otherwise: %% 2011/11/07
+\def\TestListMacroForToken#1#2{%
+ \expandafter \in@ \expandafter #2\expandafter{#1}}
+%% Indeed I removed an earlier `\IfTokenInListMacro',
+%% now it's a kind of compromise between having a shorthand macro
+%% below and a generalization for users of the package.
+%%
+%% === Adding and Removing ===
+%% |\FromTokenListMacroRemove{<list-macro>}{<cmd>}|
+%% removes the token corresponding to <cmd> from the list
+%% stored in <list-macro>
+%% (our parsing method does not work with braces): %% 2011/11/07
+\def\FromTokenListMacroRemove#1#2{%
+%% I am not happy about defining \emph{two} parser macros,
+%% but for now ...
+ \TestListMacroForToken#1#2%
+ \ifin@
+ \def\RemoveThisToken##1#2{##1}%
+ \expandafter \DefExpandStart
+ \expandafter #1\expandafter {%
+ \expandafter\RemoveThisToken #1}%
+%% TODO warning otherwise?
+ \fi}
+%% %% 2011/11/07:
+%% ... but this only removes a single occurrence ...
+%% \[|\InTokenListMacroProvide{<list-macro>}{<cmd>}|\]
+%% avoids multiple entries of a token
+%% by \emph{not} adding anything when <cmd>
+%% already occurs in <list-macro> (again, this does not work with
+%% braces, try `\in@{{}}{{}}').
+\def\InTokenListMacroProvide#1#2{%
+ \TestListMacroForToken#1#2%
+ \ifin@ \else %% TODO warning?
+ \ToListMacroAdd#1#2%
+ \fi}
+%%
+%%
+%% == Leaving and History ==
+\PopLetterCatAt %% v0.3
+\endinput
+
+VERSION HISTORY
+v0.1 2011/06/23/28 stored separately
+v0.2 2011/11/02 simpler, documented
+ 2011/11/03 corrected \if/\else for init
+ 2011/11/07 \TestListMacroForToken, \InListMacroProvide;
+ doc.: \pagebreak, structure
+ 2011/11/19 modified LaTeX supplements
+v0.21 2012/05/14 fix for "generic" and `typeoutfileinfo':
+ @ before ...!
+v0.21a 2012/05/19 \labels sec:apply, sec:core; \pagebreak?
+v0.22 2012/06/04 allow {} items
+v0.3 2012/11/05 updating copyright, using `plainpkg',
+ rewording documentation there
diff --git a/macros/generic/ean/README b/macros/generic/ean/README
new file mode 100644
index 0000000000..cf8a9989f1
--- /dev/null
+++ b/macros/generic/ean/README
@@ -0,0 +1,22 @@
+This directory contains the macro ean13 and ean8 for making EAN
+barcodes (13 or 8 digit on input and kern-rule queue on output).
+
+The usage of the macros is commeted in the file ean13.tex or ean8.tex.
+The simple test is presented in file eantest.tex (for plain).
+Macro works in plain and LateX and other standard macro packages.
+
+The fonts ocrb9 and ocrb7 is used. The mf-sources are presented (this
+is the copy from CTAN:fonts/ocr-b) with a little correction (the
+mode_setup is added to begin of file ocrbmac.mf).
+
+ean13.tex .... EAN 13 macro by Petr Olsak
+ean8.tex .... EAN 8 macro by Jaroslav Moucka (student)
+eantest.tex .. test of ean13 and ean8 in plain.
+*.mf ......... mf-sources of OCR-b font by Norbert Schwarz
+
+Petr Olsak (Ol\v{s}\'ak)
+Department of Mathematics
+Czech Techical University in Prague,
+Czech Republic
+e-mail: olsak@math.feld.cvut.cz
+
diff --git a/macros/generic/ean/ean13.tex b/macros/generic/ean/ean13.tex
new file mode 100644
index 0000000000..96a58f1d78
--- /dev/null
+++ b/macros/generic/ean/ean13.tex
@@ -0,0 +1,130 @@
+%%%%%%%%%%%% The macro EAN generates EAN-13 barcodes. %%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% May 8, 1995 Petr Olsak (Ol\v{s}\'ak)
+
+% Don't change the (C) message.
+% You can use the macro on your own risk.
+% There is no warranty that the macro works OK.
+% For more detail about algorithm see the article in TUGboat.
+
+% Usage: For example \EAN 978-80-901950-0-4 generates the \vbox with barcodes
+% in TeX hight accuracy using \rule primitive.
+% The EAN number is appended downwards in OCR-b font (9pt).
+
+% If the macro \ISBN is used before the \EAN macro call, the ISBN is
+% appended upwards in OCR-b font (7pt) and the hight of barcodes is reduced.
+% Example: \ISBN 80-901950-0-8 \EAN 978-80-901950-0-4
+% Don't use brackets in parameters!
+% The macro checks the checkdigit in EAN; it does not in ISBN.
+
+% The bar correction is defined by \bcorr.
+% Each bar width will be reduced by \bcorr amount and
+% each space between bars will be enlarged by the same amount.
+% Recommendation: If you plan the print by offset process, use the barcode
+% correction 20 for your phototypesetter. This is the implicit value of
+% \bcorr=.020mm (see bellow).
+
+% You can overwrite some parameters at user level. For example:
+% \input ean13
+% \X=0.396mm % the module size is 120% of standard
+% \font\ocrb=ocrb9 scaled 1200 % re-load font to the new size
+% \font\ocrbsmall=ocrb7 scaled 1200 % re-load font to the new size
+% \bcorr=0.015mm % new bar correction
+% \ISBN 80-901950-0-8
+% \barheight=1.5cm % this must be after \ISBN call
+% \EAN 978-80-901950-0-8 % produces barcode with ISBN
+% \end % at 120% with height of bars 1.5cm
+
+% The tolerance of dimensions for basic size (100%, module size .33mm)
+% is 0.101 mm, 0.049 mm and 0.096 mm for various parameters.
+% You can compare: The TeX accuracy is 0.0000054 mm.
+% If you use the phototypesetter 2400 dpi then the accuracy is 0.01 mm.
+
+
+\message{The EAN-13 barcodes macro. Copyright (C) Petr Olsak, 1995}
+\font\ocrb=ocrb9 % for EAN in ``number form''
+\font\ocrbsmall=ocrb7 % for ISBN
+\newcount\numlines \newcount\nummodules % number of bars and of modules.
+\newcount\numdigit \newcount\evensum \newcount\oddsum % internal variables
+\newdimen\X % the module size X,
+\newdimen\bcorr % the bar correction (see bellow).
+\newdimen\workdimen \newdimen\barheight % internal variables
+\def\internalcode{0111} % Begin mark at start
+\def\frontdigits{} % 12--7 digit of EAN
+\def\EAN{\begingroup\EANscan}
+\def\EANscan#1{\if#1-\let\next=\EANscan \else
+ \advance\numdigit by1
+ \ifnum\numdigit<13
+ \ifodd\numdigit \advance\oddsum by #1 \else \advance\evensum by #1 \fi
+ \let\next=\EANscan
+ \ifnum\numdigit=1 \settables#1\def\firstdigit{#1}\else
+ \ifnum\numdigit<8 \usetabAB#1\edef\frontdigits{\frontdigits#1}\else
+ \ifnum\numdigit=8 \insertseparator \A \usetabC #1\def\enddigits{#1}%
+ \else \usetabC#1\edef\enddigits{\enddigits#1}%
+ \fi\fi\fi
+ \else \testchecksum#1\usetabC#1\edef\enddigits{\enddigits#1}%
+ \let\next=\EANclose
+ \fi\fi \next}
+\def\testchecksum#1{\multiply\evensum by3 \advance\evensum by\oddsum
+ \oddsum=\evensum
+ \divide\oddsum by10 \multiply\oddsum by10 \advance\oddsum by10
+ \advance\oddsum by-\evensum \ifnum\oddsum=10 \oddsum=0 \fi
+ \ifnum#1=\oddsum \else
+ \errmessage{The checksum digit has to be \the\oddsum, no #1 !}\fi}
+\def\EANclose{\insertendmark
+ \wlog{EAN: \firstdigit\space\frontdigits\space\enddigits}%
+ \wlog{EANinternal: \internalcode}%
+ \expandafter\EANbox\internalcode..\endgroup}
+\def\A{\def\0{3211}\def\1{2221}\def\2{2122}\def\3{1411}\def\4{1132}%
+ \def\5{1231}\def\6{1114}\def\7{1312}\def\8{1213}\def\9{3112}}
+\def\B{\def\0{1123}\def\1{1222}\def\2{2212}\def\3{1141}\def\4{2311}%
+ \def\5{1321}\def\6{4111}\def\7{2131}\def\8{3121}\def\9{2113}}
+\def\settables#1{\ifnum#1=0 \def\tabs{\A\A\A\A\A\A}\fi
+ \ifnum#1=1 \def\tabs{\A\A\B\A\B\B}\fi
+ \ifnum#1=2 \def\tabs{\A\A\B\B\A\B}\fi
+ \ifnum#1=3 \def\tabs{\A\A\B\B\B\A}\fi
+ \ifnum#1=4 \def\tabs{\A\B\A\A\B\B}\fi
+ \ifnum#1=5 \def\tabs{\A\B\B\A\A\B}\fi
+ \ifnum#1=6 \def\tabs{\A\B\B\B\A\A}\fi
+ \ifnum#1=7 \def\tabs{\A\B\A\B\A\B}\fi
+ \ifnum#1=8 \def\tabs{\A\B\A\B\B\A}\fi
+ \ifnum#1=9 \def\tabs{\A\B\B\A\B\A}\fi}
+\def\usetabAB#1{\expandafter\scantab\tabs\end \usetabC #1}
+\def\scantab#1#2\end{#1\def\tabs{#2}} % The tab #1 is activated and removed
+\def\usetabC#1{\edef\internalcode{\internalcode\csname#1\endcsname}}
+\def\insertseparator{\edef\internalcode{\internalcode 11111}}
+\def\insertendmark{\edef\internalcode{\internalcode 111}}
+\def\EANbox{\vbox\bgroup\offinterlineskip
+ \setbox0=\hbox\bgroup \kern11\X\EANrepeat}
+\def\EANrepeat#1#2{\if#1.\let\next=\EANfinal \else\let\next=\EANrepeat
+ \advance\numlines by1
+ \advance\nummodules by#1 \advance\nummodules by#2
+ \workdimen=#1\X \advance\workdimen by \bcorr \kern\workdimen
+ \workdimen=#2\X \advance\workdimen by-\bcorr \vrule width\workdimen
+ \ifdim\barheight=0pt height 69.24242424\X \else height\barheight \fi
+ \ifnum\numlines=1 depth5\X\else % the start mark
+ \ifnum\numlines=2 depth5\X\else
+ \ifnum\numlines=15 depth5\X\else % the separator mark
+ \ifnum\numlines=16 depth5\X\else
+ \ifnum\numlines=29 depth5\X\else % the end mark
+ \ifnum\numlines=30 depth5\X\else depth0pt \fi\fi\fi\fi\fi\fi
+ \fi\next}
+\def\EANfinal{\testconsistence
+ \kern7\X\egroup
+ \hbox{\ocrbsmall \kern10\X \ISBNnum}\kern1\X
+ \dp0=0pt \box0 \kern-1\X
+ \hbox{\ocrb\kern2\X\firstdigit\kern5\X \frontdigits\kern5\X \enddigits}
+ \egroup \global\barheight=0pt \gdef\ISBNnum{}}
+\def\testconsistence{\ifnum\numlines=30\else\internalerr\fi
+ \ifnum\nummodules=95\else\internalerr\fi}
+\def\internalerr{\errmassage{Sorry, my internal tables are wrong, may be.}}
+\barheight=0pt
+\def\ISBNnum{}
+\def\ISBN #1 {\def\ISBNnum{ISBN #1}\barheight=45.151515\X\relax}
+\X=.33mm % Basic size 100%, SC2 code
+\bcorr=.020mm % Bar-correction for offset process
+\endinput
+
+
+
+
diff --git a/macros/generic/ean/ean8.tex b/macros/generic/ean/ean8.tex
new file mode 100644
index 0000000000..e6a23abbb4
--- /dev/null
+++ b/macros/generic/ean/ean8.tex
@@ -0,0 +1,114 @@
+
+%%%%%%%%%%%% The macro \EAN generates EAN-8 barcodes. %%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% May 30, 1995 Jaroslav Moucka (Mou\v{c}ka)
+
+% This macro is inspired by ean13 macro by Petr Olsak
+% The ean8 macro is very similar as ean13 and more simple.
+% Don't change the Copyright message.
+% You can use the macro on your own risk.
+% The macro must be tested! There is no warranty that the macro works OK.
+
+% Usage: For example \EAN 8591-2342 generates the \vbox with barcodes
+% in TeX hight accuracy using \rule primitive.
+% The EAN number is appended downwards in OCR-b font (9pt).
+% Don't use brackets in parameters!
+% The macro checks the checksum in EAN.
+
+% Recomendation: If you plan the offset print, use the barcode
+% correction 20 for your phototypesetter. See the \bcorr=.020mm bellow.
+
+\font\ocrb=ocrb9
+
+\newcount\numlines \newcount\nummodules
+\newcount\numdigit \newcount\evensum \newcount\oddsum
+
+\newdimen\X \newdimen\bcorr \newdimen\workdimen \newdimen\barheight
+
+%%% First, we prepare internal code in format: dig dig dig (44 digits).
+%%% Odd possition of dig is number of moduls for white space,
+%%% even for black space; from left to right.
+
+\def\internalcode{0111} % Begin mark at start
+\def\frontdigits{} % 8--5 digit of EAN
+
+%%% EAN-8:
+\message{The EAN-8 barcodes macro. Copyright (C) Jaroslav Moucka, 1995}
+
+\def\EAN{\begingroup\EANscan}
+
+\def\EANscan#1{\if#1-\let\next=\EANscan \else
+ \advance\numdigit by1
+ \ifnum\numdigit<8
+ \ifodd\numdigit \advance\evensum by #1 \else \advance\oddsum by #1 \fi
+ \let\next=\EANscan
+ \ifnum\numdigit=1 \def\tabs{\A\A\A\A} \fi
+ \ifnum\numdigit<5 \usetabA #1 \edef\frontdigits{\frontdigits#1} \else
+ \ifnum\numdigit=5 \insertseparator \A \usetabC #1 \def\enddigits{#1}
+ \else \usetabC #1 \edef\enddigits{\enddigits#1}
+ \fi\fi
+ \else \testchecksum #1 \usetabC #1 \edef\enddigits{\enddigits#1}
+ \let\next=\EANclose
+ \fi\fi \next}
+
+
+\def\EANclose{\insertendmark
+ \wlog{EAN: \frontdigits\space\enddigits}
+ \wlog{EANinternal: \internalcode}
+ \expandafter\EANbox\internalcode..\endgroup}
+
+\def\testchecksum#1{\multiply\evensum by3 \advance\evensum by\oddsum
+ \oddsum=\evensum
+ \divide\oddsum by10 \multiply\oddsum by10 \advance\oddsum by10
+ \advance\oddsum by-\evensum \ifnum\oddsum=10 \oddsum=0 \fi
+ \ifnum#1=\oddsum \else
+ \errmessage{The checksum digit has to be \the\oddsum, no #1 !}\fi}
+
+\def\A{\def\0{3211}\def\1{2221}\def\2{2122}\def\3{1411}\def\4{1132}
+ \def\5{1231}\def\6{1114}\def\7{1312}\def\8{1213}\def\9{3112}}
+
+\def\usetabA#1{\expandafter\scantab\tabs\end \usetabC #1}
+
+\def\scantab#1#2\end{#1\def\tabs{#2}}
+
+\def\usetabC#1{\edef\internalcode{\internalcode\csname#1\endcsname}}
+
+\def\insertseparator{\edef\internalcode{\internalcode 11111}}
+
+\def\insertendmark{\edef\internalcode{\internalcode 111}}
+
+
+\def\EANbox{\vbox\bgroup\offinterlineskip
+ \setbox0=\hbox\bgroup \kern7\X \EANrepeat}
+
+\def\EANrepeat#1#2{\if#1.\let\next=\EANfinal \else\let\next=\EANrepeat
+ \advance\numlines by1
+ \advance\nummodules by#1 \advance\nummodules by#2
+ \workdimen=#1\X \advance\workdimen by \bcorr \kern\workdimen
+ \workdimen=#2\X \advance\workdimen by-\bcorr \vrule width\workdimen
+ \ifdim\barheight=0pt height 55.24242424\X \else height\barheight \fi
+ \ifnum\numlines=1 depth5\X\else
+ \ifnum\numlines=2 depth5\X\else
+ \ifnum\numlines=11 depth5\X\else
+ \ifnum\numlines=12 depth5\X\else
+ \ifnum\numlines=21 depth5\X\else
+ \ifnum\numlines=22 depth5\X\else depth0pt \fi\fi\fi\fi\fi\fi
+ \fi\next}
+
+\def\EANfinal{\testconsistence
+ \kern7\X\egroup
+ \dp0=0pt \box0 \kern-1\X
+ \hbox{\ocrb\kern11\X \frontdigits\kern5\X \enddigits}
+ \egroup }
+
+\def\internalerr{\errmassage{Sorry, my internal tables are wrong, may be.}}
+
+\def\testconsistence{\ifnum\numlines=22\else\internalerr\fi
+ \ifnum\nummodules=67\else\internalerr\fi}
+
+\barheight=0pt
+\X=.33mm % Basic size 100%, SC2 code
+\bcorr=.020mm % Barcode correction for offset
+\endinput
+
+
diff --git a/macros/generic/ean/eantest.tex b/macros/generic/ean/eantest.tex
new file mode 100644
index 0000000000..4df8cc58e8
--- /dev/null
+++ b/macros/generic/ean/eantest.tex
@@ -0,0 +1,8 @@
+\input ean13
+\nopagenumbers
+\ISBN 80-901950-0-8 \EAN 978-80-901950-0-4 % Typesetting System TeX
+\vskip1cm
+\input ean8
+\EAN 8591-2342
+\end
+
diff --git a/macros/generic/eijkhout/CD_labeler.tex b/macros/generic/eijkhout/CD_labeler.tex
new file mode 100644
index 0000000000..520ff16246
--- /dev/null
+++ b/macros/generic/eijkhout/CD_labeler.tex
@@ -0,0 +1,351 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% CD labeling macros, version 0.93, February 2001.
+% Copyright Victor Eijkhout 2001
+% file name: CD_labeler.tex
+% CTAN location: macros/generic/eijkhout
+% uses: repeat.tex
+%
+% Author:
+% Victor Eijkhout
+% Department of Computer Science
+% University of Tennessee, Knoxville TN 37996
+%
+% victor@eijkhout.net
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% For a copy of the GNU General Public License, write to the
+% Free Software Foundation, Inc.,
+% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA,
+% or find it on the net, for instance at
+% http://www.gnu.org/copyleft/gpl.html
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Use this file as follows:
+%
+% \input CD_labeler
+% \CDLlabel{ <label content> }
+%
+% where the <label content> is usually comprised of
+% one or more of the following:
+%
+% \CDLbackground{ <picture material> }
+% \CDLunderhole{<setup>}{ <material printed below the hole> }
+% \CDLlowerhalf{<setup>}{ <material on the lower half of the label,
+% left of and below the hole> }
+% \CDLleft{<setup>}{ <material printed on the left side of the label> }
+% \CDLright{<setup>}{ <material printed on the right side of the label> }
+%
+% (You can insert your own material, which gets processed in
+% horizontal mode. However, you'll have a hard time controlling
+% its elevation in the label.)
+%
+% These commands can be given in any order, since basically
+% everything is printed on top of each other.
+%
+% Make sure to put %-signs at line ends:
+% \CDLlabel{%
+% \CDLbackground{<stuff>}%
+% \CDLleft{<text>}%
+% }
+%
+% The <setup> material contains such things as \baselineskip
+% settings. If you use a non-standard baselineskip, it is
+% *essential* that you put that declaration in the first
+% argument. Things such as font choices can go in the second.
+%
+% With the material left and right of the label, you may want to
+% leave a few lines blank at the top. Here's how:
+% To leave some blank lines: \CDLblank{ <number of lines to skip> }
+%
+% For guidance, a box is printed around the label. You can suppress
+% this by \CDLboxfalse.
+%
+% Adjustable dimensions:
+% \CDLdiscsize (default 120mm, which is CD size)
+% \CDLinnerdiameter (default 40mm, the hole and ring around it)
+% \CDLedgemargin (default 4mm, stay away this much from the edge)
+% \CDLgutterwidth (default 0mm, keep this much space between
+% \CDLleft and \CDLright text)
+%
+% Auxiliary commands:
+% \CDLraggedright suppress hyphenation and use ragged right margin
+%
+% If you also use my DB_process macros, you can do things like
+%
+% \CDLlabel{%
+% \CDLunderhole{\baselineskip8pt}{\smallfont \DBPtabfile{cd_file}}%
+% \CDLleft{\baselineskip22pt \rightskip0pt plus 1cm}%
+% {\CDLblank{3}\titlefont My favourite bedtime songs}%
+% \CDLright{\baselineskip8pt}{\CDLblank{7}\smallfont
+% \leftskip=1cm \rightskip=0pt plus 1cm
+% Compiled for his own
+% private use, by Victor Eijkhout, 1998}}
+% where the cd_file is dumped from your favourite database.
+%
+% Share and enjoy!
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% revision history:
+% 0.9 first release, December 1998
+% 0.91 fixed documentation, use repeat.tex for loop macro,
+% copyright notice, bug in lower half macro, Feb 1999
+% 0.92 \CDLlabel made \long
+% \CDLinnerradius changed to \CDLinnerdiameter
+% fixed double subtracting of offset in \CDL{left,right},
+% and added empty line, suggestions by Yotam Medini. April 1999
+% 0.93 added \CDLragged{left,right} \CDLgutterwidth \CDLsquash.
+% Major improvement in \CDL{left,right}. February 2001.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%
+%% Prevent multiple loading of this file
+%%
+\expandafter\ifx\csname CDLcount\endcsname\relax
+ \message{Loading CD labeler, version 0.92}%
+\else
+ \message{CD labeling macros already loaded ... }\endinput \fi
+
+\newtoks\CDLtoks \newbox\CDLbox
+\newdimen\CDLdiscsize \CDLdiscsize=120mm
+\newdimen\CDLinnerdiameter \CDLinnerdiameter=40mm
+\newdimen\CDLedgemargin \CDLedgemargin=4mm
+\newdimen\CDLgutterwidth \CDLgutterwidth=0mm
+\newif\ifCDLbox \CDLboxtrue
+
+%%
+%% Load auxiliary files: loop macro
+%%
+\input repeat.tex
+
+%%
+%% CDLlabel
+%% main routine, this draws an empty box, with any
+%% background and content supplied by the user
+%% in \CDLbackground and \CDL{left,right,underhole,overhole}
+%%
+\long\def\CDLlabel#1%
+ {\vbox{\ifCDLbox\hrule\fi
+ \hbox to \CDLdiscsize
+ {\hsize=\CDLdiscsize \ifCDLbox\vrule\fi
+ \ignorespaces #1\hss \ifCDLbox\vrule\fi}
+ \ifCDLbox\hrule\fi}}
+%%
+%% CDLbackground
+%% user macro
+%% place a dimensionless item, presumably a picture
+%%
+\def\CDLbackground#1{
+ \setbox\CDLbox=\vbox to 0pt{\hsize=0pt
+ \hbadness\maxdimen \vbadness\maxdimen #1}%
+ \wd\CDLbox=0pt \raise \CDLdiscsize\box\CDLbox}
+%%
+%% CDLlabelbox
+%% basic macro for shape macros below
+%%
+\long\def\CDLlabelbox#1{%
+ \setbox\CDLbox=\vbox to \CDLdiscsize{\hsize=\CDLdiscsize
+ \hrule width \CDLdiscsize height 0pt depth 0pt \nointerlineskip
+ \vskip\CDLedgemargin
+ #1\vfil
+ }%
+ \wd\CDLbox=0pt \box\CDLbox \ignorespaces}
+
+%%
+%% Shapes macros: various loops of calling CDLline, and building
+%% up a \parshape. This is built around CDLline, which computes
+%% length and indents left/right of a line somewhere on the label.
+%% #1 is an option for setup: baselineskip and such
+%%
+\def\CDLlowerhalf#1#2{\CDLlabelbox{#1\relax
+ \vskip.5\CDLdiscsize
+ \CDLtoks={}%
+ \begingroup
+ \repeat \for{CDLcount} \from{0} \do {%
+ \count1=\CDLcount \advance\count1 by 1
+ \CDLline{\count1}\a\t\c
+ \CDLline\CDLcount\t\b\t
+ \if\CDLerror \expandafter\breakrepeat \fi
+ \dimen1=\c\relax \dimen2=\a\relax
+ \ifdim\b=0pt \multiply\dimen2 by 2 \fi
+ \edef\temp{\global\CDLtoks={\the\CDLtoks
+ \space\the\dimen1 \space\the\dimen2}}\temp
+ }%
+ \noindent \parshape \CDLcount \the\CDLtoks #2\par
+ \endgroup
+ }}
+\def\CDLunderhole#1#2{\CDLlabelbox{#1\relax
+ \vskip.5\CDLdiscsize \vskip.5\CDLinnerdiameter \vskip\baselineskip
+ \CDLtoks={}%
+ \begingroup
+ \count0=0
+ \repeat \for{CDLcount} \from{0} \do {%
+ \count1=\CDLcount \advance\count1 by 1
+ \CDLline{\count1}\a\t\c
+ \CDLline\CDLcount\t\b\t
+ \if\CDLerror \expandafter\breakrepeat \fi
+ \ifdim\b>0pt \advance\count0 by 1
+ \else \dimen1=\c\relax \dimen2=\a\relax
+ \multiply\dimen2 by 2
+ \edef\temp{\global\CDLtoks={\the\CDLtoks
+ \space\the\dimen1 \space\the\dimen2}}\temp
+ \fi
+ }%
+ \advance\CDLcount by -\count0
+ \noindent \parshape \CDLcount \the\CDLtoks #2\par
+ \endgroup
+ }}
+\def\CDLleft#1#2{\CDLlabelbox{
+ \CDLtoks={}#1\relax
+ \begingroup
+ \repeat \for{CDLcount} \from{0} \do {%
+ \CDLline\CDLcount\a\b\c
+ \if\CDLerror \expandafter\breakrepeat \fi
+ % if we're not next to the hole, leave a gutter
+ \ifdim\b=0pt \dimen0=\a \advance\dimen0 by -\CDLgutterwidth
+ \edef\a{\the\dimen0 }\fi
+ \edef\temp{\CDLtoks={\c\space\a \space\the\CDLtoks \space \c\space\a}}\temp
+ }%
+ \noindent
+ \multiply\CDLcount by 2 \advance\CDLcount by 1
+ \parshape \CDLcount 0pt 0pt \the\CDLtoks \hfill\break #2\par
+ \endgroup
+ }}
+\def\CDLright#1#2{\CDLlabelbox{
+ \CDLtoks={}#1\relax
+ \begingroup
+ %\count0=\CDLdiscsize \divide\count0 by \baselineskip
+ %\message{Should fit \the\count0 lines}%
+ \repeat \for{CDLcount} \from{0} \do {%
+ % get \a=length \b=inner gap \c=outer gap
+ \CDLline\CDLcount\a\b\c
+ \if\CDLerror \expandafter\breakrepeat \fi
+ % if we're not next to the hole, leave a gutter
+ \ifdim\b=0pt \dimen0=\a \advance\dimen0 by -\CDLgutterwidth
+ \edef\a{\the\dimen0 }%
+ \else
+ \dimen0=\a \advance\dimen0 by -\baselineskip \edef\a{\the\dimen0 }%
+ \dimen0=\b \advance\dimen0 by \baselineskip \edef\b{\the\dimen0 }%
+ \fi
+ \dimen0=\CDLdiscsize \divide\dimen0 by 2
+ \advance\dimen0 by \b
+ \edef\temp{\CDLtoks={
+ \the\dimen0 \space\a \space\the\CDLtoks
+ \the\dimen0 \space\a}}\temp
+ }%
+ \noindent \multiply\CDLcount by 2 \advance\CDLcount by 1
+ \parshape \CDLcount 0pt 0pt \the\CDLtoks \hfill\break #2\par
+ \endgroup
+ }}
+\def\CDLleftandunder#1#2{\CDLlabelbox{
+ \CDLtoks={}#1\relax
+ \begingroup
+ \repeat \for{CDLcount} \from{1} \do {%
+ % get \a=length \b=inner gap \c=outer gap
+ \CDLline\CDLcount\a\b\c
+ \if\CDLerror \expandafter\breakrepeat \fi
+ % if we're not next to the hole, leave a gutter
+ \ifdim\b=0pt \dimen0=\a \advance\dimen0 by -\CDLgutterwidth
+ \edef\a{\the\dimen0 }\fi
+ \edef\temp{\CDLtoks={\c\space\a \space\the\CDLtoks}}\temp
+ }%
+ \CDLline0\a\b\c
+ \edef\temp{\CDLtoks={\the\CDLtoks \space \c\space\a \space \c\space\a}}\temp
+ \advance\CDLcount by 3
+ \edef\tempc{\the\CDLcount}%
+ \repeat \for{CDLcount} \from{0} \do {%
+ \count1=\CDLcount \advance\count1 by 1
+ \CDLline{\count1}\a\t\c
+ \CDLline\CDLcount\t\b\t
+ \if\CDLerror \expandafter\breakrepeat \fi
+ \dimen1=\c\relax \dimen2=\a\relax
+ \ifdim\b=0pt \multiply\dimen2 by 2 \fi
+ \edef\temp{\global\CDLtoks={\the\CDLtoks
+ \space\the\dimen1 \space\the\dimen2}}\temp
+ }%
+ \advance\CDLcount by \tempc
+ \noindent
+ \parshape \CDLcount 0pt 0pt \the\CDLtoks \hfill\break #2\par
+ \endgroup
+ }}
+\def\CDLblank#1{\begingroup\count0=#1\relax
+ \ifnum\count0>0 \hfill\break \advance\count0 by -1
+ \expandafter\CDLblank\expandafter{\number\count0}\fi\endgroup}
+
+%%%%%%%%%%%%%%%% Auxiliaries %%%%%%%%%%%%%%%%
+%%
+%% \CDLraggedright & \CDLraggedleft
+\def\CDLraggedright{\hyphenchar\font=-1
+ \rightskip=0pt plus .5\CDLdiscsize}
+\def\CDLraggedleft{\hyphenchar\font=-1
+ \leftskip=0pt plus .5\CDLdiscsize}
+\def\CDLsquash#1{{\setbox0\hbox{#1}\ht0=0pt \dp0=0pt \box0\relax}}
+
+%%%%%%%%%%%%%%%% Interal macros %%%%%%%%%%%%%%%%
+%%
+%% CDLline
+%% from #1 line number compute #2 length, #3 inner gap #4 outer gap
+%%
+\def\CDLline#1#2#3#4{\CDLsetnoerror
+ \begingroup \dimen0=\baselineskip
+ \multiply\dimen0 by #1\relax
+ \divide\CDLdiscsize by 2 \divide\CDLinnerdiameter by 2
+ \dimen1=\CDLdiscsize \advance\dimen1 by -\CDLedgemargin
+ \CDLcircle{\dimen1}{\dimen0}\blen
+ \if\CDLerror \aftergroup\CDLseterror \else
+ \CDLcircle\CDLinnerdiameter{\dimen0}\slen
+ \dimen0=\blen sp
+ \dimen2=\CDLdiscsize \advance\dimen2 by -\dimen0
+ \xdef#4{\the\dimen2}%
+ \if\CDLerror
+ \xdef#2{\the\dimen0}\gdef#3{0pt}%
+ \else
+ \dimen1=\slen sp\relax \advance\dimen0 by -\dimen1
+ \xdef#2{\the\dimen0}\xdef#3{\the\dimen1}%
+ \fi \fi
+ \endgroup}
+%%
+%% CDLcircle
+%% from #1=r #2=y compute #3=x so that x^2+y^2=r^2
+%%
+\def\CDLcircle#1#2#3{\CDLsetnoerror
+ \begingroup
+ \count2=#1\advance\count2 by #2\edef\a{\number\count2}%
+ \count3=#1\advance\count3 by -#2\edef\b{\number\count3}%
+ \ifnum\count3<0 \aftergroup\CDLseterror \else
+ \CDLsqrt\a\aa \CDLsqrt\b\bb
+ \count0=\aa \multiply\count0 by \bb
+ \xdef#3{\number\count0}%
+ \fi
+ \endgroup}
+%%
+%% CDLsqrt
+%% #1 is dimension, #2 is receiving control sequence
+%%
+\def\CDLsqrt#1#2{\begingroup
+ \count1=#1\relax
+ \repeat \do {
+ \count2=#1\relax \divide\count2 by \count1
+ \advance\count2 by \count1 \divide\count2 by 2
+ \ifnum\count2<\count1 \count1=\count2
+ \else \expandafter\breakrepeat \fi}
+ \xdef#2{\the\count1}\endgroup}
+
+%%
+%% Error handling
+%%
+\def\CDLsetnoerror{\def\CDLerror{10}}
+\def\CDLseterror{\def\CDLerror{11}}
+
+\endinput
+
diff --git a/macros/generic/eijkhout/CD_labeler_test.tex b/macros/generic/eijkhout/CD_labeler_test.tex
new file mode 100644
index 0000000000..a261f5f36f
--- /dev/null
+++ b/macros/generic/eijkhout/CD_labeler_test.tex
@@ -0,0 +1,27 @@
+% This file tests Victor Eijkhout's CD_labeler.tex
+
+\input CD_labeler
+
+\def\hr{b\hrulefill e\break}
+\def\fivehr{\hr \hr \hr \hr \hr}
+\def\tenhr{\fivehr\fivehr}
+
+\hsize\CDLdiscsize
+\vsize2.1\CDLdiscsize
+\CDLlabel{
+ \CDLleft{\baselineskip8pt}{\tenhr\tenhr\tenhr\tenhr}
+ \CDLright{\baselineskip8pt}{\tenhr\tenhr\tenhr\tenhr}
+ }
+\smallskip
+\CDLlabel{
+ \CDLleft{\baselineskip8.4pt}{\tenhr\fivehr\hr\hr\hr}
+ \CDLlowerhalf{\baselineskip8.4pt}{\tenhr\tenhr}}
+\smallskip
+\CDLlabel{
+ \CDLunderhole{\baselineskip8.4pt}{\tenhr\hr}
+ }
+\smallskip
+%\CDLlabel{%
+% \CDLleftandunder{\baselineskip8.4pt}{\tenhr\tenhr}}
+
+\bye
diff --git a/macros/generic/eijkhout/DB_process.tex b/macros/generic/eijkhout/DB_process.tex
new file mode 100644
index 0000000000..f43078e950
--- /dev/null
+++ b/macros/generic/eijkhout/DB_process.tex
@@ -0,0 +1,151 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DataBase processing macros, version 0.91, December 2000
+% Copyright Victor Eijkhout 2000
+% file name: DB_process.tex
+%
+% Author:
+% Victor Eijkhout
+% Department of Computer Science
+% University of Tennessee, Knoxville TN 37996
+%
+% victor@eijkhout.net
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% For a copy of the GNU General Public License, write to the
+% Free Software Foundation, Inc.,
+% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA,
+% or find it on the net, for instance at
+% http://www.gnu.org/copyleft/gpl.html
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Use this file as follows:
+%
+% \input DB_process
+% \def\DBPprintline#1#2#3#4#5#6#7#8#9%
+% { < do whatever you want with the argument > }
+% \DBPtabfile{ <input file> } or \DBPcommafile{ <input file> }
+%
+% The user macro \DBPprintline is applied to the max 9 arguments
+% of each database line. You need to define the macro with 9 arguments;
+% if the database has less than 9 fields, empty arguments are passed.
+%
+% The input records are counted, and the counter is available as \DBPno.
+% To print this, you have to do \number\DBPno or somesuch.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% revision history:
+% 0.9 first release, December 1998
+% 0.91 documentation update, use repeat.tex for loop macro,
+% copyright notice, better handling of 'fragile' material
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%
+%% prevent multiple loading of this file
+%%
+\expandafter\ifx\csname DBPfile\endcsname\relax
+ \message{Loading DataBase Processing macros ... }%
+\else
+ \message{DataBase Processing macros already loaded ... }\endinput \fi
+
+%%
+%% Allocations
+%%
+\newread\DBPfile \newcount\DBPitem \newtoks\DBPtoks
+\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
+\def\cscsarg#1#2{\csname#1\expandafter\endcsname\csname#2\endcsname}
+\cscsarg{newtoks}{DBPtoks1}
+\cscsarg{newtoks}{DBPtoks2}
+\cscsarg{newtoks}{DBPtoks3}
+\cscsarg{newtoks}{DBPtoks4}
+\cscsarg{newtoks}{DBPtoks5}
+\cscsarg{newtoks}{DBPtoks6}
+\cscsarg{newtoks}{DBPtoks7}
+\cscsarg{newtoks}{DBPtoks8}
+\cscsarg{newtoks}{DBPtoks9}
+
+%%
+%% Load auxiliary files: loop macro
+%%
+\input repeat.tex
+
+%%
+%% a default printline macro
+%%
+\def\DBPprintline#1#2#3#4#5#6#7#8#9{\number\DBPno: #1\par}
+
+%%
+%% general parsing macros
+%%
+\def\DBPparsefile{\def\DBPtestc{\par}%
+ \repeat \for{DBPno} \do {\read\DBPfile to \DBPinput
+ \ifx\DBPinput\DBPtestc \expandafter\breakrepeat \fi
+ \DBPitem=1\relax \DBPtoks=\expandafter{\DBPinput}%
+ \edef\DBPtemp{\noexpand\DBPparseline\the\DBPtoks
+ \DBPdelim DBP\DBPdelim}\DBPtemp
+ }}
+\def\DBPline#1#2{%
+ \def\DBPtesta{#1}\def\DBPtestb{DBP}%
+ \ifx\DBPtesta\DBPtestb
+ \edef\DBPtemp{\noexpand\DBPprintline
+ {\csarg\the{DBPtoks1}}%
+ {\csarg\the{DBPtoks2}}%
+ {\csarg\the{DBPtoks3}}%
+ {\csarg\the{DBPtoks4}}%
+ {\csarg\the{DBPtoks5}}%
+ {\csarg\the{DBPtoks6}}%
+ {\csarg\the{DBPtoks7}}%
+ {\csarg\the{DBPtoks8}}%
+ {\csarg\the{DBPtoks9}}%
+ }\DBPtemp
+ \csarg\relax{DBPtoks1}{}%
+ \csarg\relax{DBPtoks2}{}%
+ \csarg\relax{DBPtoks3}{}%
+ \csarg\relax{DBPtoks4}{}%
+ \csarg\relax{DBPtoks5}{}%
+ \csarg\relax{DBPtoks6}{}%
+ \csarg\relax{DBPtoks7}{}%
+ \csarg\relax{DBPtoks8}{}%
+ \csarg\relax{DBPtoks9}{}%
+ \else \ifnum\DBPitem<10\relax
+ \csname DBPtoks\number\DBPitem\endcsname={#1}%
+ \else \message{DB Processor: can not handle >9 items/line}%
+ \fi
+ \advance\DBPitem by 1
+ \expandafter#2\fi}
+
+%%
+%% macros for comma-delimited
+%%
+\def\DBPcommafile#1{%
+ \openin\DBPfile=#1\relax
+ \let\DBPparseline=\DBPcommaline
+ \def\DBPdelim{,}%
+ \DBPparsefile}
+\def\DBPcommaline#1,{\DBPline{#1}\DBPcommaline}
+
+%%
+%% macros for tab-delimited
+%%
+\begingroup \catcode9=12
+\gdef\DBPtabfile#1{%
+ \openin\DBPfile=#1\relax
+ \begingroup
+ \catcode9=12 \let\DBPparseline=\DBPtabline
+ \def\DBPdelim{^^I}%
+ \DBPparsefile
+ \endgroup}
+\gdef\DBPtabline#1^^I{\DBPline{#1}\DBPtabline}
+\endgroup
+
+\endinput
diff --git a/macros/generic/eijkhout/repeat.tex b/macros/generic/eijkhout/repeat.tex
new file mode 100644
index 0000000000..0bbb0785f6
--- /dev/null
+++ b/macros/generic/eijkhout/repeat.tex
@@ -0,0 +1,212 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Repeat loop macro, version 0.93a, September 2006
+% Copyright Victor Eijkhout 1999-2006
+% file name: repeat.tex
+%
+% Author:
+% Victor Eijkhout
+% Texas Advanced Computing Center
+% The University of Texas at Austin, Austin TX 78758, USA
+%
+% victor@eijkhout.net
+%
+% This program is released under the LaTeX Project Public License
+% see <http://www.latex-project.org/lppl/> for further information.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% General loop macro:
+% \repeat
+% \for{<var>} \from{<start>} \by{<step>} \to{<end>} \downto{<end>}
+% \until{<cond>} \while{<cond>}
+% \do { <loop body> }
+% where all control sequences in between \repeat and \do are optional.
+%
+% var: characters to form a control sequence;
+% after \for{index} you can access the loop counter as \index.
+% This is a count register; to print it use \number\index.
+% start,step,end: integers with obvious relations to the loop counter;
+% start and step have a default value of 1
+% cond: (sequence of commands ending in) any TeX \if... test.
+%
+% Count down instead of up with \downto; the increment given in \by
+% is always positive, and is added or subtracted accordingly.
+%
+% Tests: \until is evaluated at the end of the loop body; \while
+% at the beginning of the loop body.
+%
+% Exit from middle of loop: \breakrepeat
+% use this at any place in the loop; in case of a conditional use
+% \ifsomething ... \expandafter \breakrepeat \fi
+%
+% There are some examples at the end of this file, after the \endinput line;
+% remove the \endinput statement to see the examples executed.
+% Note that the line ends do not cause spaces in the output.
+%
+% Technical details:
+% The loop body is not executed in a group: the braces are those
+% of a token list.
+% The `for' variable is \let to a \count register.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% revision history:
+% 0.9 first release, January 1999
+% 0.91 documentation update,
+% csarg-like control sequences made REP...
+% counter update made global in case the body issues grouping,
+% copyright notice, February 1999
+% 0.92 installed trace switches
+% 0.93 spaces are now ignored after each argument group. Author info updated.
+% 0.93a removed \bye from \endinput line.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+
+%%
+%% Prevent multiple loading of this file
+%%
+\expandafter\ifx\csname REPdepth\endcsname\relax
+ \message{Loading loop macro, version 0.93a}%
+\else \endinput \fi
+
+%%
+%% Auxiliary stuff
+%%
+\def\REPcsarg#1#2{\expandafter#1\csname#2\endcsname}
+\def\REPcsrom#1{\csname #1\romannumeral\REPdepth\endcsname}
+\def\REPcsargrom#1#2{\expandafter#1\csname#2\romannumeral\REPdepth\endcsname}
+
+\newcount\REPdepth
+\let\endrepeat\relax \def\csprotect{}
+% Trace switches may later be defined by PAC_utils
+\let\REPtraceinit\relax \let\REPtraceexit\relax
+
+%%
+%% Main repeat macro
+%% - go to next level and allocate unique counter/toks if this is the
+%% first time we visit this level
+%% - setup: gather bounds and termination conditions
+%% - scoop up body in token list; after the assignment define and
+%% execute body
+%%
+\def\repeat#1\do{\REPtraceinit % exit in \breakrepeat
+ \advance\REPdepth by 1\relax
+ \REPcsargrom\ifx{REPcount}\relax
+ \REPcsargrom{\csname newcount\expandafter\endcsname}{REPcount}%
+ \REPcsargrom{\csname newtoks\expandafter\endcsname}{REPtoks}%
+ \REPcsargrom{\csname newtoks\expandafter\endcsname}{REPwtest}%
+ \REPcsargrom{\csname newtoks\expandafter\endcsname}{REPutest}%
+ \fi \REPzero \def\REPsign{}\def\REPcomp{>}\REPsetup{#1}%
+ \edef\REPtmp
+ {\def\REPcsargrom\noexpand{REPrepeat}{\REPcsargrom\noexpand{REPbody}}}\REPtmp
+ \afterassignment\REPdxbody\REPcsrom{REPtoks}}
+%%
+%% Define and execute loop body
+%% This is done with an \edef to construct the actual sequence
+%%
+\def\REPdxbody{\REPcsargrom\edef{REPbody}{%
+ \REPcsargrom\the{REPwtest}%
+ \noexpand\the\REPcsargrom\noexpand{REPtoks}%
+ \REPcsargrom\the{REPutest}%
+ \global\REPcsargrom\advance{REPcount} by \REPsign\REPcsrom{REPinc}\relax
+ \noexpand\endrepeat
+ \REPcsargrom\noexpand{REPrepeat}}%
+ \REPcsrom{REPbody}\ignorespaces}
+%%
+%% Stop test
+%% In order to stop, issue a
+%% \breakrepeat which scoops up the rest of the body and exits
+%%
+\def\breakrepeat#1\endrepeat{\REPzero\REPcsargrom\let{REPrepeat}\relax
+ \advance\REPdepth by -1 \REPtraceexit
+ }
+%%
+%% Setup
+%% gather bounds and termination conditions
+%%
+\def\REPsetup#1{%
+ \begingroup
+ \def\for##1{%
+ \edef\REPtmp{%
+ \global\let\REPcsarg\noexpand{##1}\REPcsrom{REPcount}\ignorespaces}%
+ \REPtmp}%
+ \def\from##1{\REPcsargrom\global{REPcount}##1\ignorespaces}%
+ \def\to##1{%
+ \edef\REPtmp{\global\REPcsargrom\noexpand{REPwtest}=
+ {\REPcsargrom\the{REPwtest}%
+ \noexpand\ifnum\REPcsargrom\noexpand{REPcount}\REPcomp##1\relax
+ \noexpand\expandafter \noexpand\breakrepeat
+ \noexpand\fi}\ignorespaces}%
+ \REPtmp}%
+ \def\downto##1{%
+ \gdef\REPsign{-}\gdef\REPcomp{<}\to{##1}\ignorespaces}%
+ \def\by##1{\ifnum##1<0 \message{REPEAT: increment has to be >0}%
+ \REPcsargrom\gdef{REPinc}{-##1}\else
+ \REPcsargrom\gdef{REPinc}{##1}\fi\ignorespaces}%
+ \def\until##1{%
+ \edef\REPtmp{\global\REPcsargrom\noexpand{REPutest}=
+ {\noexpand##1\relax
+ \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}\ignorespaces}%
+ \REPtmp}%
+ \def\while##1{%
+ \edef\REPtmp{\global\REPcsargrom\noexpand{REPwtest}=
+ {\noexpand##1\relax \noexpand\else
+ \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}\ignorespaces}%
+ \REPtmp}%
+ \from{1}\by{1}#1%
+ \endgroup}
+\def\REPzero
+ {\REPcsrom{REPtoks}{}\REPcsrom{REPutest}{}\REPcsrom{REPwtest}{}%
+ \REPcsargrom\def{REPbody}{}}
+
+\endinput
+
+%\tracingmacros2
+\newcount\tmpcount % used in some examples below
+1
+\repeat \for{i}
+ \by{2}
+ \do {%
+ \ifnum\i=13 \expandafter\breakrepeat \fi
+ \message{doing \number\i}%
+}%
+2
+\repeat \for{iii}
+ \to{8}
+ \do {}
+\message{After loop: \number\iii}%
+3
+\repeat \for{i}
+ \from{10}
+ \by{2}
+ \downto{0}
+ \do {\message{countdown \number\i}}
+4
+\repeat \for{x} \while{\ifnum\x<7}
+ \do {\message{going \number\x}}
+5
+\repeat \to{3} \do {\message{hello there!}}
+6
+\repeat \for{j}
+ \until{\tmpcount\j \divide\tmpcount by 37 \noexpand\ifnum\tmpcount=1}
+ \do {\message{testing \number\j}}
+7
+\repeat \for{i} \by{2} \to{10} \do
+ {\repeat \for{j} \from{\i} \by{3} \to{18}
+ \do {\message{(\number\i.\number\j)}}
+ }
+8
+
+1
+2
+3
+4
+5
+6
+7
+8
+
+% infinite loop
+%\repeat \do {}
+
+\bye
diff --git a/macros/generic/encxvlna/README b/macros/generic/encxvlna/README
new file mode 100644
index 0000000000..aabb9a0dd3
--- /dev/null
+++ b/macros/generic/encxvlna/README
@@ -0,0 +1,9 @@
+=============================================================================
+Package: encxvlna Version 1.1 17 May 2014
+=============================================================================
+
+The package contains tools for inserting nonbreakable spaces after
+nonsyllabic prepositions and single letter conjunctions as required by
+Czech and Slovak typographical rules. It is implemented in encTeX and
+provides files both for plain TeX and LaTeX. The LaTeX solution tries
+to avoid conflicts with other packages.
diff --git a/macros/generic/encxvlna/doc/License.txt b/macros/generic/encxvlna/doc/License.txt
new file mode 100644
index 0000000000..90e5e3ab79
--- /dev/null
+++ b/macros/generic/encxvlna/doc/License.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2006-05-20
+
+Copyright 1999 2002-2006 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/generic/encxvlna/doc/encxvlna.pdf b/macros/generic/encxvlna/doc/encxvlna.pdf
new file mode 100644
index 0000000000..54daa8a245
--- /dev/null
+++ b/macros/generic/encxvlna/doc/encxvlna.pdf
Binary files differ
diff --git a/macros/generic/encxvlna/doc/encxvlna.tex b/macros/generic/encxvlna/doc/encxvlna.tex
new file mode 100644
index 0000000000..cde07fdcbc
--- /dev/null
+++ b/macros/generic/encxvlna/doc/encxvlna.tex
@@ -0,0 +1,65 @@
+%% $Id: encxvlna.tex 514 2014-05-17 00:07:36Z zw $
+\input utf8-t1 % encTeX required for handling UTF-8 transparently
+\documentclass[12pt,a4paper]{article}
+\usepackage[czech,english]{babel}
+\languageattribute{czech}{split} % czech.ldf v.3.2 required
+% See e.g. http://icebearsoft.euweb.cz/tex/csh_babel.php
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{verbatim}
+\usepackage[protrusion=false,expansion=true,stretch=8,shrink=24,step=4]{microtype}
+\oddsidemargin -5mm
+\evensidemargin\oddsidemargin
+\headheight 0mm
+\headsep 0mm
+\topmargin -5mm
+\textheight 25cm
+\footskip 1cm
+\textwidth 17cm
+\def\sup#1{\ensuremath{^\mathrm{#1}}}
+\DeclareRobustCommand\TL{\TeX\ Live}
+\newif\ifeng
+\DeclareRobustCommand*\cmd[1]{\texttt{\char`\\#1}}
+\mubytein 0 % Dirty hack, url.sty contains illegal characters!!!
+\usepackage[bookmarks,bookmarksopenlevel=2,bookmarksopen,
+ pdftitle={ENCXVLNA,\ Vlna\ implemented\ in\ encTeX},
+ pdfauthor={Petr\ Olsak\ and\ Zdenek\ Wagner},
+ pdfkeywords={vlna,\ encTeX}]{hyperref}
+% To be used after all packages and definitions...
+\usepackage{encxvlna} % You need the egg before having the hen :-(
+\begin{document}
+\title{\textsc{encxvlna}\\Vlna implemented in enc\TeX}
+\author{Petr Olšák \& Zdeněk Wagner\\\url{http://math.feld.cvut.cz/olsak} \&
+\url{http://icebearsoft.euweb.cz}}
+\date{17\sup{th} May 2014}
+\maketitle
+\def\contentsname{Contents\,/\,Obsah}
+\tableofcontents
+
+\engtrue\input{vlna-inc}
+
+\clearpage
+
+\begin{otherlanguage*}{czech}
+\engfalse\input{vlna-inc}
+\end{otherlanguage*}
+
+\section{texmf-local/web2c/fmtutil-local.cnf}\label{fmtutil}
+\begingroup\footnotesize
+\begin{verbatim}
+# cslatex in UTF-8
+#!cslatex
+#!pdfcslatex
+cslatex pdftex - -etex -enc cslatex-utf8.ini
+pdfcslatex pdftex - -etex -enc cslatex-utf8.ini
+
+# latex with enctex
+#!latex
+#!pdflatex
+latex pdftex language.dat -enc -translate-file=cp227.tcx *latex.ini
+pdflatex pdftex language.dat -enc -translate-file=cp227.tcx *pdflatex.ini
+\end{verbatim}
+\endgroup
+
+\end{document}
+
diff --git a/macros/generic/encxvlna/doc/vlna-inc.tex b/macros/generic/encxvlna/doc/vlna-inc.tex
new file mode 100644
index 0000000000..f517b11c7e
--- /dev/null
+++ b/macros/generic/encxvlna/doc/vlna-inc.tex
@@ -0,0 +1,301 @@
+%% $Id: vlna-inc.tex 518 2014-05-17 15:42:05Z zw $
+% Included file, encoding UTF-8, see vlna-enctex.sty
+
+\ifeng
+
+\section{English manual}
+This is a manual for ``vlna'' implemented in enc\TeX\ of February 2003. Enc\TeX\ itself and the
+macros for plain \TeX\ were developed by Petr Olšák. \LaTeX\ version was derived from it by Zdeněk
+Wagner.
+
+\else
+
+\section{\texorpdfstring{Český manuál}{Cesky manual}}
+Toto je manuál balíÄku "`vlna"' implementovaného pomocí enc\TeX{}u z února~2003. Enc\TeX\ a makra
+pro plain \TeX\ vytvořil Petr Olšák. Verzi pro \LaTeX\ z nich odvodil Zdeněk Wagner.
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Purpose}
+The purpose of the package is to insert nonbreakable spaces (\verb:~:, in Czech \textit{vlna} or
+\textit{vlnka}) after nonsyllabic prepositions and single letter conjuctions directly while \TeX
+ing the document. The macros recognise math and verbatim by \TeX\ means. Inserting nonbreakable
+spaces by a preprocessor may never be fully reliable because user defined macros and environments
+cannot be recognised.
+
+\else
+
+\subsection{\texorpdfstring{ÚÄel}{Ucel}}
+Tento balíÄek slouží ke vkládání nezlomitelných mezer (vlnek) za neslabiÄné pÅ™edložky a
+jednopísmenné spojky přímo při \TeX ování dokumentu. Makra rozeznávají matematiku a verbatim \TeX
+ovými prostředky. Vkládání nezlomitelných mezer preprocesorem nikdy nemůže být naprosto
+spolehlivé, protože uživatelsky definovaná makra a prostředí nelze rozpoznat.
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Requirements}
+This package requires enc\TeX\ of February 2003. It is often available in the distribution but is
+not activated as default. In order to activate it you have to regenerate your formats using the
+\texttt{-enc} switch. In some distributions, such as \TL, you have to modify \texttt{fmtutil.cnf}.
+It is achieved by writing your own \texttt{texmf-local/web2c/fmtutil-local.cnf} which
+is shown in Section~\ref{fmtutil}. In other distributions the instructions of modifying the method of
+format generation may differ.
+
+In case you do not have enc\TeX\ at all you have to build it yourself from the sources found at
+\url{http://math.feld.cvut.cz/olsak/enctex.html}
+
+\else
+
+\subsection{\texorpdfstring{Požadavky}{Pozadavky}}
+Tento balíÄek vyžaduje enc\TeX\ z února 2003. Ten je obvykle v distribucích obsažen, avÅ¡ak není
+aktivován. Pro jeho aktivaci musíte znovu vygenerovat formáty s použitím parametru \texttt{-enc}. V
+některých distribucích, např. v \TL, budete muset upravit soubor \texttt{fmtutil.cnf},
+ÄehoÄ docílíte vytvoÅ™ením vlastního souboru \texttt{texmf-local/web2c/fmtutil-local.cnf}, který je
+ukázán v kapitole~\ref{fmtutil}. Instrukce pro změnu způsobu generování formátů v jiných
+distribucích mohou být odlišné.
+
+V případě, že enc\TeX\ nemáte, musíte si jej zkompilovat sami ze zdrojů, které najdete na
+\url{http://math.feld.cvut.cz/olsak/enctex.html}
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Package contents}
+The package contains:
+\begin{description}
+\item[encxvlna.pdf] --- this manual
+\item[encxvlna.tex, vlna-inc.tex] --- manual sources
+\item[encxvlna.tex] --- plain \TeX\ macros
+\item[encxvlna.sty] --- \LaTeX\ package file
+\item[License.txt] --- license
+\end{description}
+
+File \texttt{vlna.tex} is a part of enc\TeX\ but it was previously distributed with \TL\ in a wrong
+directory. Moreover, since enc\TeX\ is not enabled as default, the macros might be used without it.
+This will generate error messages that might not be understood by beginners. The modified file
+\texttt{encxvlna.tex} differs from
+the version included in enc\TeX\ just by a descriptive error message.
+
+\else
+
+\edef\pom{---\space\ignorespaces}
+
+\subsection{\texorpdfstring{Obsah balíÄku}{Obsah balicku}}
+BalíÄek obsahuje:
+\begin{description}
+\item[encxvlna.pdf] \pom tento manuál
+\item[encxvlna.tex, vlna-inc.tex] \pom zdrojový kód manuálu
+\item[encxvlna.tex] \pom makra pro plain \TeX
+\item[encxvlna.sty] \pom balíÄek pro \LaTeX
+\item[License.txt] \pom licence
+\end{description}
+
+Soubor \texttt{vlna.tex} je souÄástí enc\TeX{}u, ale původnÄ› byl distribuován v \TL\ ve Å¡patném
+adresáři. Protože navíc enc\TeX\ není v \TL\ standardně aktivován, mohou být makra použita bez něj.
+To způsobí chyby, jimž nemusí zaÄáteÄníci rozumÄ›t. Modifikovaná verze \texttt{encxvlna.tex} se liší od verze obsažené v
+enc\TeX{}u pouze více popisnou chybovou zprávou.
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Usage in plain \TeX}
+Usage in plain \TeX\ is simple. Just put the following command before your text:
+
+\else
+
+\subsection{\texorpdfstring{Použití}{Pouziti} v plain \TeX u}
+Použití v plain \TeX{}u je velmi jednoduché. Vložte před svůj text příkaz:
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\smallskip
+\begin{verbatim}
+\input encxvlna
+\end{verbatim}
+
+\smallskip
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+Remember that some macro definitions may confuse this package. The best location for the above
+mentioned command is \textit{after} all definitions but before the text.
+
+\else
+
+Nezapomeňte, že nÄ›které definice maker mohou tento balíÄek zmást. Nejlepší místo pro výše uvedený
+příkaz je tedy \textit{za} všemi definicemi, ale před vlastním textem.
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Usage in \LaTeX}
+Usage in \LaTeX\ is similarly simple. Put the following command to your preamble:
+
+\else
+
+\subsection{\texorpdfstring{Použití}{Pouziti} v \LaTeX u}
+Použití v \LaTeX{}u je stejně jednoduché. Vložte do preambule příkaz:
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\smallskip
+\begin{verbatim}
+\usepackage{encxvlna}
+\end{verbatim}
+
+\smallskip
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+Remember that some packages and macro definitions may contain code which may confuse this package.
+The manual for \textsc{hyperref} says that it should be placed as the last package but it would
+report weird error messages if it is loaded after \textsc{encxvlna}. The best place for the above
+mentioned command is thus just above \verb;\begin{document};.
+
+The \textsc{encxvlna} package itself postpones some commands using \verb;\AtBeginDocument;. If you load
+it by this hook, it will be too late and you will see other weird error messages.
+
+\else
+
+Nezapomeňte, že nÄ›které balíÄky a definice maker mohou obsahovat kód, který tento balíÄek zmate.
+Návod k balíÄku \textsc{hyperref} říká, že má být naÄten jako poslední, ale právÄ› to způsobí výpis
+podivných chybových zpráv, pokud bude balíÄek \textsc{encxvlna} naÄten dříve. Nejlepší místo pro výše
+zmíněný příkaz je tedy přímo nad \verb;\begin{document};.
+
+Samotný balíÄek \textsc{encxvlna} využívá \verb;\AtBeginDocument; k odložení nÄ›kterých příkazů. Pokud
+se pokusíte využít téhož mechanismu k naÄtení tohoto balíÄku, bude to příliÅ¡ pozdÄ› a doÄkáte se
+dalších podivných chybových zpráv.
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Modifications in the \LaTeX\ version}
+As already written the \LaTeX\ package was derived from the original plain \TeX\ file. In addition
+to creation of the package signature the following modifications were made:
+
+\begin{enumerate}
+\item Definition of \verb;\uv; was removed because it appears in the Czech and Slovak language
+definition files.
+\item Register \verb;\mubytein; is set to 2 at the beginning of the document.
+\item Czech and Slovak language definition files for \textsc{babel} introduce in version~3.1
+new syntax for writing quotes, namely \verb;"`v lese"';. This is added to the list of recognised
+patterns.
+\item Definition of \verb;\protect; is tested so that the macros do nothing in moving arguments.
+\item Definition of \verb;\rm; is compared to \verb;\@empty; so that outlines are correctly created
+by \textsc{hyperref}.
+\item Tests were added in order to enable work with the \textsc{microtype} package.
+\end{enumerate}
+
+The macros now need 15 \verb;\expandafter;'s!
+
+\else
+
+\subsection{Modifikace ve verzi pro \LaTeX}
+Jak již bylo napsáno, verze pro \LaTeX\ byla odvozena z původních maker pro plain \TeX. Kromě
+vytvoÅ™ení signatury \LaTeX ového balíÄku byly provedeny tyto zmÄ›ny:
+
+\begin{enumerate}
+\item Byla odstranÄ›na definice \verb;\uv;, protože se vyskytuje v jazykových definiÄních souborech
+pro ÄeÅ¡tinu a slovenÅ¡tinu.
+\item Registr \verb;\mubytein; je naplnÄ›n hodnotou 2 až na zaÄátku dokumentu.
+\item ÄŒeské a slovenské jazykové definiÄní soubory pro \textsc{babel} zavádÄ›jí od verze~3.1 novou
+syntaxi pro zápis uvozovek: \verb;"`v lese"';. Toto je přidáno do seznamu rozpoznávaných vzorů.
+\item Testuje se definice \verb;\protect; tak, aby makra nedělala nic v pohyblivých (moving)
+argumentech.
+\item Definice \verb;\rm; se porovnává s \verb;\@empty;, aby balíÄek \textsc{hyperref} správnÄ›
+vytvořil záložky.
+\item Byl pÅ™idán test, který umožní spolupráci s balíÄkem \textsc{microtype}.
+\end{enumerate}
+
+Makra nyní potřebují 15 příkazů \verb;\expandafter;!
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+
+\subsection{Important note for \LaTeX\ users}
+There is a problem with the \textsc{url} package and hence with \textsc{hyperref} which loads
+\textsc{url}. As a matter of fact it is not a problem of \textsc{encxvlna} but a problem of enc\TeX\
+and \textsc{Unicode}. Lines 39 and 50 of \texttt{url.sty} contain unprintable characters which are
+not legal as UTF-8 character sequences. Everything works fine until you try to typeset a URL while
+converting the input from UTF-8 by enc\TeX. It is sufficient to set \verb;\mubytein; to zero just
+before loading \textsc{url} or \textsc{hyperref}. If you load these packages including
+\textsc{encxvlna} in correct order just
+before \verb;\begin{document};, you need not bother with setting back a nonzero value to
+\verb;\mubytein;. Look into the source code of this manual, into file
+\else
+
+\subsection{\texorpdfstring{Důležitá poznámka pro uživatele}{Dulezita poznamka pro uzivatele}
+\LaTeX u}
+PÅ™i použití balíÄku \textsc{url}, a tudíž \textsc{hyperref}, jenž \textsc{url} naÄítá, nastává
+problém. Ve skuteÄnosti to není problém balíÄku \textsc{encxvlna}, ale problém enc\TeX{}u a
+\textsc{Unicode}. Řádky 30 a 50 v souboru \texttt{url.sty} obsahují netisknutelné znaky, jež jsou
+nepovolenými znakovými sekvencemi v UTF-8. Vše funguje správně až do chvíle, kdy chcete vytisknout
+URL a souÄasnÄ› konvertovat vstup z UTF-8 enc\TeX em. PostaÄí, když vynulujete \verb;\mubytein;
+pÅ™ed naÄtením \textsc{url} Äi \textsc{hyperref}. NaÄítáte-li tyto balíÄky vÄetnÄ› balíÄku
+\textsc{encxvlna} ve správném pořadí bezprostředně před příkazem \verb;\begin{document};, nemusíte se starat o
+návrat nenulové hodnoty do registru \verb;\mubytein;. Podívejte se do zdrojového kódu tohoto
+manuálu, do souboru
+\fi
+\texttt{encxvlna.tex}
+\ifeng
+in directory
+\else
+v adresáři
+\fi
+\texttt{doc/generic/encxvlna}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+Similar problems are encountered when using the \textsc{movie15} package. You have to include the
+\cmd{includemovie} command within a group setting
+\else
+Podobné problémy nastávají pÅ™i použití balíÄku \textsc{movie15}. Musíte příkaz \cmd{includemovie} uzavřít do
+skupiny,v níž nastavíte
+\fi
+\verb;\mubytein=0;.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifeng
+\subsection{License}
+The package can be used and distributed according to the LaTeX Project Public License version~1.3 or later the
+text of which can be found at the \texttt{License.txt} file in the \texttt{doc} directory or at
+\else
+
+\subsection{Licence}
+BalíÄek může být používán a šířen podle LaTeX Project Public License verze~1.3 nebo novÄ›jší, jejíž text najdete
+v souboru \texttt{License.txt} v adresáři \texttt{doc}, nebo na
+\fi
+\url{http://www.latex-project.org/lppl.txt}
diff --git a/macros/generic/encxvlna/latex/encxvlna.sty b/macros/generic/encxvlna/latex/encxvlna.sty
new file mode 100644
index 0000000000..eafcff0704
--- /dev/null
+++ b/macros/generic/encxvlna/latex/encxvlna.sty
@@ -0,0 +1,97 @@
+\ProvidesPackage{encxvlna}[2008/06/20 encxvlna]
+\PackageInfo{encxvlna}{$Id: encxvlna.sty 209 2008-06-20 21:34:39Z zw $\MessageBreak
+ (C) 2007, Zdenek Wagner, derived from vlna.tex\MessageBreak
+ developed by Petr Olsak\@gobble}
+
+% Vlna implementovana jako makra v encTeXu
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Leden 2003 Petr Olsak
+% Modified for LaTeX by Z. Wagner
+
+%% Copyright 2008 Z. Wagner, http://icebearsoft.euweb.cz
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Z. Wagner.
+%
+% This work consists of the files the name of which are listed
+% in the documentation, see encxvlna.pdf in the doc directory.
+
+\expandafter\ifx\csname mubyte\endcsname\relax
+ \PackageError{encxvlna}{%
+ encTeX of Feb 2003 or later not detected,\MessageBreak
+ the rest of the package will be ignored}%
+ {This package is implemented by new primitives of encTeX of Feb 2003\MessageBreak
+ but this extension was not detected in your system. You can continue\MessageBreak
+ but all commands of `encxvlna' will be ignored. If your TeX distribution\MessageBreak
+ contains encTeX but does not activate it, you have to create the format\MessageBreak
+ using the -enc switch (e.g. in fmtutils.cnf). If you do not have encTeX\MessageBreak
+ at all, you have to compile it from the source code. You can find\MessageBreak
+ the source code including documentation at\MessageBreak
+ http://math.feld.cvut.cz/olsak/enctex.html
+ } % Package error message
+ \expandafter\endinput\fi
+
+% Toto je ukazka moznosti encTeXu. Na urovni maker muzeme
+% naprogramovat program vlna.
+
+% Pomocna makra:
+
+\def\setmu #1#2{\mubyte #1##1 #2\endmubyte} % use encTeX Feb 2003
+\bgroup \uccode`X=\endlinechar \uppercase{\gdef\endchar{X}}
+ \uccode`X=`\{ \uppercase{\gdef\leftbrace{X}}
+\egroup
+
+\def\sylabi #1{%
+ \setmu \spacesylab {\space#1} % <mezera>v lese -> <mezera>v~lese
+ \setmu \normalsylab {(#1} % (v lese -> (v~lese
+ \setmu \normalsylab {\endchar#1} % <zacatek radku>v lese -> v~lese
+ \setmu \normalsylab {[#1} % [v lese -> [v~lese
+ \setmu \specsylab {\leftbrace#1} % {v lese -> {v~lese
+ \setmu \normalsylab {"`#1} % "`v lese -> "`v~lese (uvozovky "`..."')
+}
+% dve moznosti za predlozkou: mezera nebo konec radku:
+
+\def\sylab #1{\sylabi {#1\space}\sylabi {#1\endchar}}
+
+% seznam predlozek:
+
+\sylab v \sylab k \sylab o \sylab s \sylab u \sylab z
+\sylab V \sylab K \sylab O \sylab S \sylab U \sylab Z
+\sylab A \sylab I \sylab i \sylab a
+
+% makra neudelaji nic v matematickem modu a verbatim prostredi:
+% take se spravne prenesou do \tableofcontents
+
+\def\ZW@exx{\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter}
+\def\spacesylab {\ifx\protect\@typeset@protect \ifx\rm\@empty\else
+ \ifmmode\else\ifnum\catcode`\ =10 \ZW@exx\spacesylabP \fi\fi\fi\fi}
+\def\normalsylab {\ifx\protect\@typeset@protect \ifx\rm\@empty\else
+ \ifmmode\else\ifnum\catcode`\ =10 \ZW@exx\normalsylabP \fi\fi\fi\fi}
+\def\specsylab {\ifx\protect\@typeset@protect \ifx\rm\@empty\else
+ \ifmmode\else\ifnum\catcode`\ =10 \ZW@exx\specsylabP \fi\fi\fi\fi}
+
+\def\spacesylabP {\afterassignment\spacesylabR \let\next= }
+\def\spacesylabR {\ifhmode\unskip\fi \next \normalsylabP}
+\def\normalsylabP #1 {#1~}
+\def\specsylabP #1{{\normalsylabP #1}}
+
+\AtBeginDocument{\mubytein=2 \mubyteout=3 \mubytelog=3 \relax} % potrebujeme i konstrukce "a v lese -> a~v~lese"
+
+% For use with microtype.sty
+
+\def\zw@vlnahook{\g@addto@macro\MT@begin@catcodes{\mubytein 0 }}
+\expandafter\ifx\csname MT@setupfont\endcsname\relax
+ \AtBeginDocument{\expandafter\ifx\csname MT@setupfont\endcsname\relax\else\zw@vlnahook\fi}%
+\else \zw@vlnahook \fi
diff --git a/macros/generic/encxvlna/plain/encxvlna.tex b/macros/generic/encxvlna/plain/encxvlna.tex
new file mode 100644
index 0000000000..bc1ec19e17
--- /dev/null
+++ b/macros/generic/encxvlna/plain/encxvlna.tex
@@ -0,0 +1,71 @@
+% Vlna implementovana jako makra v encTeXu
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Leden 2003 Petr Olsak
+
+% The following test and error message was
+% inserted by Z. Wagner
+\expandafter\ifx\csname mubyte\endcsname\relax
+ {\newlinechar=`\^^J\errhelp=
+ {This package is implemented by new primitives of encTeX of Feb 2003^^J
+ but this extension was not detected in your system. You can continue^^J
+ but all commands of `encxvlna' will be ignored. If your TeX distribution^^J
+ contains encTeX but does not activate it, you have to create the format^^J
+ using the -enc switch (e.g. in fmtutils.cnf). If you do not have encTeX^^J
+ at all, you have to compile it from the source code. You can find^^J
+ the source code including documentation at^^J
+ http://math.feld.cvut.cz/olsak/enctex.html
+ }%
+ \errmessage
+ {encTeX of Feb 2003 or later not detected,^^Jthe rest of the package will be ignored}}%
+ \expandafter\endinput\fi
+
+% Toto je ukazka moznosti encTeXu. Na urovni maker muzeme
+% naprogramovat program vlna.
+
+% Pomocna makra:
+
+\def\setmu #1#2{\mubyte #1##1 #2\endmubyte} % use encTeX Feb 2003
+\bgroup \uccode`X=\endlinechar \uppercase{\gdef\endchar{X}}
+ \uccode`X=`\{ \uppercase{\gdef\leftbrace{X}}
+\egroup
+
+\def\sylabi #1{%
+ \setmu \spacesylab {\space#1} % <mezera>v lese -> <mezera>v~lese
+ \setmu \normalsylab {(#1} % (v lese -> (v~lese
+ \setmu \normalsylab {\endchar#1} % <zacatek radku>v lese -> v~lese
+ \setmu \normalsylab {[#1} % [v lese -> [v~lese
+ \setmu \specsylab {\leftbrace#1} % {v lese -> {v~lese
+}
+% dve moznosti za predlozkou: mezera nebo konec radku:
+
+\def\sylab #1{\sylabi {#1\space}\sylabi {#1\endchar}}
+
+% seznam predlozek:
+
+\sylab v \sylab k \sylab o \sylab s \sylab u \sylab z
+\sylab V \sylab K \sylab O \sylab S \sylab U \sylab Z
+\sylab A \sylab I \sylab i \sylab a
+
+% makra neudelaji nic v matematickem modu a verbatim prostredi:
+
+\def\exx{\expandafter\expandafter\expandafter}
+\def\spacesylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\spacesylabP \fi\fi}
+\def\normalsylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\normalsylabP \fi\fi}
+\def\specsylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\specsylabP \fi\fi}
+
+\def\spacesylabP {\afterassignment\spacesylabR \let\next= }
+\def\spacesylabR {\ifhmode\unskip\fi \next \normalsylabP}
+\def\normalsylabP #1 {#1~}
+\def\specsylabP #1{{\normalsylabP #1}}
+
+\def\uv{\futurelet\next\uvR}
+\def\uvR{\ifx \next\specsylab \expandafter \uvS \else \expandafter \uvP \fi}
+\long\def\uvP #1{\clqq#1\crqq}
+\long\def\uvS \specsylab #1{\normalsylab \clqq#1\crqq}
+
+\mubytein=2 % potrebujeme i konstrukce "a v lese -> a~v~lese"
+
+\endinput
+
+
+
diff --git a/macros/generic/epsf/LICENSE b/macros/generic/epsf/LICENSE
new file mode 100644
index 0000000000..5bb543fb04
--- /dev/null
+++ b/macros/generic/epsf/LICENSE
@@ -0,0 +1,5 @@
+The epsf.tex and epsf.sty files are identical, and are freely
+redistributable and placed into the public domain by Tomas Rokicki.
+The changes since their original release in 1989 are similarly in the
+public domain, as are all of the files distributed in the epsf-x.y.z
+package.
diff --git a/macros/generic/epsf/Makefile b/macros/generic/epsf/Makefile
new file mode 100644
index 0000000000..16b4c3f58b
--- /dev/null
+++ b/macros/generic/epsf/Makefile
@@ -0,0 +1,83 @@
+### ====================================================================
+### [30-Jul-2005]
+### ====================================================================
+
+prefix = /usr/local
+
+CP = /bin/cp -p
+
+INSTDIRS = $(prefix)/share/lib/tex/inputs \
+ $(prefix)/share/lib/tex/latex \
+ $(prefix)/share/lib/tex/latex2e/unpacked
+
+LATEX = latex
+LATEX = latex2e
+
+LN = /bin/ln -f
+
+LS = ls
+
+RM = /bin/rm -f
+
+SHELL = /bin/sh
+
+TEX = tex
+
+### ====================================================================
+
+LTXFILES = tepsf2.ltx
+
+TEXFILES = tepsf1.tex tepsf3.tex
+
+### ====================================================================
+
+all:
+ @echo There is nothing to build in this directory.
+
+check: check-latex check-tex
+
+check-latex:
+ for f in $(LTXFILES) ; \
+ do \
+ $(LATEX) $$f ; \
+ $(LS) -l `basename $$f .ltx`.* ; \
+ done
+
+check-tex:
+ for f in $(TEXFILES) ; \
+ do \
+ $(TEX) $$f ; \
+ $(LS) -l `basename $$f .tex`.* ; \
+ done
+
+clean:
+ -$(RM) *.aux
+ -$(RM) *.dvi
+ -$(RM) *.log
+ -$(RM) *~
+ -$(RM) \#*
+ -$(RM) a.out
+ -$(RM) core core.*
+
+clobber: distclean
+
+distclean: mostlyclean
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+mostlyclean: clean
+
+install: uninstall
+ for d in $(INSTDIRS) ; \
+ do \
+ $(CP) epsf.tex $$d/epsf.tex ; \
+ $(LN) $$d/epsf.tex $$d/epsf.sty ; \
+ done
+
+uninstall:
+ for d in $(INSTDIRS) ; \
+ do \
+ $(RM) $$d/epsf.tex $$d/epsf.sty ; \
+ done
diff --git a/macros/generic/epsf/README b/macros/generic/epsf/README
new file mode 100644
index 0000000000..986453765a
--- /dev/null
+++ b/macros/generic/epsf/README
@@ -0,0 +1,294 @@
+%% /u/sy/beebe/tex/epsf/epsf-2.7.3/README, Sat Jul 30 18:41:35 2005
+%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
+
+============
+Introduction
+============
+
+The epsf.tex and epsf.sty (identical) files provide for
+low-level typesetting of Encapsulated PostScript (EPS)
+files, with optional suppression of the figure contents (for
+faster display and printing during document development),
+optional figure framing, and optional figure labeling.
+
+See the header comments in epsf.tex or epsf.sty files for
+usage information.
+
+LaTeX users are cautioned that the graphicx package
+documented in the LaTeX Graphics Companion and LaTeX
+Companion (2nd ed.) books provides a much more powerful and
+general facility, and allows easy switching between
+pdf(la)tex and (la)tex without document modification.
+
+Plain TeX and AmSTeX users, however, may find epsf.tex
+useful.
+
+
+===================
+Testing the package
+===================
+
+The test files in the package can be typeset on Unix systems
+with
+
+ make check
+
+You can then view or print the .dvi files to see several
+examples of what they are supposed to look like.
+
+If you are in doubt about their appearance when generated at
+your site, try the okay/*.dvi files: they were produced by
+the package maintainers to illustrate the correct behavior
+the package macros.
+
+
+=================
+Problem EPS files
+=================
+
+If you experience difficulty in positioning an EPS picture,
+and find that it appears in an unexpected location, or in an
+incorrect scale or orientation, then it is often the case
+that the PostScript is not EPSF-conformant (see the
+specification in the references below). This may be because
+it uses forbidden low-level PostScript operators that modify
+the PostScript page transformations. The fndbadps shell
+script in the distribution can be used on Unix systems to
+search for forbidden operators in EPS files. If you find
+any, you should complain to the author or vendor of the
+software that produced the bad EPS files: the EPS
+specification has been available since 1992, and is very
+clear about what operators are forbidden.
+
+It is sometimes possible to repair problem EPS files by
+converting from PostScript to PDF and back to PostScript.
+Suitable tools for PostScript to PDF conversion include
+Adobe distill, ghostscript ps2pdf, and Frank M. Siegert's
+pstill. For PDF to PostScript conversion, use Adobe
+acroread, ghostscript pdf2ps, or your PDF file viewer's
+print-to-PostScript-file option.
+
+In bad cases, the only way to deal with a problem EPS file
+may be to convert it to a high-resolution bitmap and back to
+PostScript, taking care to choose a lossless bitmap format.
+This can be done with the NetPBM tools and ghostscript.
+These utilities offer a myriad of options, so it is
+convenient to combine them in a separate tool that provides
+the commonly-needed options: pstopngtops (see the References
+section below).
+
+
+===========================
+Bounding boxes and clipping
+===========================
+
+Sometimes the only problem is that the size of the figure is
+wrong. This is usually because the %%BoundingBox comment
+that is normally present in the first few lines of the EPS
+file is wrong: indeed, most PostScript-producing software
+produces nonsensical bounding boxes.
+
+One way to fix this problem is to print your EPS file and
+the bboxgrid.ps file from this package on the SAME printer,
+overlay them against a light source, and measure the
+lower-left and upper-right corner coordinates in big points
+(72bp = 1in = 25.4mm) of the picture and then edit the EPS
+file to supply the correct coordinates as whole numbers in
+order:
+
+ %%BoundingBox: lower-left-x lower-left-y upper-right-x upper-right-y
+
+The PostScript coordinate system is right-handed Cartesian
+with the origin at the lower-left page corner. The reason
+that you need the grid provided by bboxgrid.ps is that even
+though PostScript defines the coordinate position (0,0) to
+be at the lower-left page corner, mechanical limitations
+and/or misadjustments in PostScript printers often result in
+that point being displaced by as much 1cm in any direction.
+Even two identical models of the same printer can differ in
+their true page origins! When you measure the picture
+corners of your figure using the bboxgrid.ps output on the
+same printer, you eliminate this source of confusion and
+error.
+
+A better way to obtain an accurate bounding box is to ask
+ghostscript to measure it for you:
+
+ % gs -sDEVICE=bbox -dNOPAUSE bboxgrid.ps quit.ps
+ AFPL Ghostscript 8.51 (2005-04-18)
+ Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
+ This software comes with NO WARRANTY: see the file PUBLIC for details.
+ Loading NimbusSanL-Bold font from /usr/local/share/ghostscript/fonts/n019004l.pfb... 4506264 2452117 1502816 214110 1 done.
+ Loading NimbusSanL-Regu font from /usr/local/share/ghostscript/fonts/n019003l.pfb... 4506264 2483411 1522912 220580 1 done.
+ %%BoundingBox: 15 18 610 783
+ %%HiResBoundingBox: 15.444000 18.395999 609.713981 782.045976
+
+You can then replace the faulty %%BoundingBox comment in
+your file with the correct one.
+
+The %%HiResBoundingBox comment is produced and used by some
+software, but is nonstandard, and should not be relied on.
+The epsf package ignores it, and PostScript printers ignore
+all comments (text outside strings from percent to end of
+line).
+
+If editing the EPS file is impossible, impractical, or
+undesirable, you can supply the correct bounding box as a
+square-bracketed optional argument to \epsfbox:
+
+ \epsfbox[30 50 250 270]{filename.eps}
+
+This will override any %%BoundingBox comment in the file,
+and if clipping is turned on with \epsfclipon, only material
+inside the bounding box will appear in your output.
+
+If you find that the bounding box specification near the
+start of the EPS file looks like this:
+
+ %%BoundingBox: (atend)
+
+then search backward from the end of the file to find the
+NEAREST %%BoundingBox comment, and then replace the (atend)
+comment with the one you just found. TeX has to read the
+EPS file until it finds the %%BoundingBox comment, and the
+further it is from the beginning, the longer TeX will take
+to find it. Parsing text in TeX is NOT a fast operation!
+
+Historical note: The bbox device was added to ghostscript at
+version 3.68 in April 1996 at the suggestion of Nelson
+H. F. Beebe.
+
+
+==========
+References
+==========
+
+Web resources:
+
+ LaTeX graphicx package:
+ http://ctan.tug.org/tex-archive/macros/latex/required/graphics/graphicx.dtx
+
+
+ Pstill (PostScript to PDF conversion tool):
+ http://www.wizards.de/~frank/pstill.html
+ http://www.this.net/~frank/pstill_win.html
+
+ Aladdin Ghostscript:
+ ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/
+ http://prdownloads.sourceforge.net/ghostscript/
+ http://www.artifex.com/
+ http://www.cs.wisc.edu/~ghost/
+
+ GNU Ghostscript:
+ ftp://ftp.gnu.org/gnu/ghostscript
+ http://directory.fsf.org/ghostscript.html
+
+ pstopngtops:
+ ftp://ftp.math.utah.edu/pub/pstopngtops
+ http://www.math.utah.edu/pub/pstopngtops
+
+ netpbm:
+ http://netpbm.sourceforge.net/
+ http://sourceforge.net/projects/netpbm/
+ http://ii2.sourceforge.net/
+ Note: NetPBM has a nonstandard build
+ procedure and historically has been very
+ painful to build on most Unix systems. The
+ first URL listed provides pointers to binary
+ distributions for some platforms that you
+ may find easier to install. Some GNU/Linux
+ distributions already have them: if the
+ Unix command
+
+ which pngtopnm pnmcrop pnmmargin pnmtops
+
+ reports locations of each those tools, then
+ you already have the ones needed for pstopngtops.
+ Mac OS X users can most conveniently install NetPBM
+ from the ii2 link above.
+
+
+Books:
+
+@String{pub-ADOBE = "{Adobe Systems Incorporated}"}
+@String{pub-ADOBE:adr = "San Jose, CA, USA"}
+
+@String{pub-AW = "Ad{\-d}i{\-s}on-Wes{\-l}ey"}
+@String{pub-AW:adr = "Reading, MA, USA"}
+
+@Book{Adobe:1990:PLR,
+ author = "Adobe Systems Incorporated",
+ title = "{PostScript} Language Reference Manual",
+ publisher = pub-AW,
+ address = pub-AW:adr,
+ edition = "Second",
+ pages = "viii + 764",
+ year = "1990",
+ ISBN = "0-201-18127-4",
+ ISBN-13 = "978-0-201-18127-2",
+ LCCN = "QA76.73.P67 P67 1990",
+ bibdate = "Sat Oct 28 08:25:15 2000",
+ remark = "Appendix H documents the EPSF 3.0 specification.",
+}
+
+@TechReport{Adobe:1992:EPF,
+ author = "{Adobe PostScript Developer Support Group}",
+ title = "{Encapsulated PostScript Files} Specification Version
+ 3.0",
+ number = "PN LPS5002",
+ institution = pub-ADOBE,
+ address = pub-ADOBE:adr,
+ day = "1",
+ month = may,
+ year = "1992",
+ bibdate = "Sat Jul 30 18:50:43 2005",
+ URL = "http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf",
+ note = "The specification is also published in
+ \cite[Appendix~H]{Adobe:PLR90}.",
+}
+
+@Book{Goossens:1997:LGC,
+ author = "Michel Goossens and Sebastian Rahtz and Frank
+ Mittelbach",
+ title = "The {\LaTeX} Graphics Companion: Illustrating
+ Documents with {\TeX} and {PostScript}",
+ publisher = pub-AW,
+ address = pub-AW:adr,
+ pages = "xxi + 554",
+ year = "1997",
+ ISBN = "0-201-85469-4",
+ ISBN-13 = "978-0-201-85469-5",
+ LCCN = "Z253.4.L38G663 1997",
+ bibdate = "Fri Jul 11 07:51:47 1997",
+ price = "US\$39.75",
+ series = "Tools and Techniques for Computer Typesetting",
+ acknowledgement = ack-nhfb,
+ keywords = "LaTeX (Computer file); Computerized typesetting.;
+ PostScript (Computer program language); Scientific
+ illustration --- Computer programs.; Mathematics
+ printing --- Computer programs.; Technical publishing
+ --- Computer programs.",
+}
+
+@Book{Mittelbach:2004:LC,
+ author = "Frank Mittelbach and Michel Goossens and Johannes
+ Braams and David Carlisle and Chris Rowley and
+ Christine Detig and Joachim Schrod",
+ title = "The {\LaTeX} Companion",
+ publisher = pub-AW,
+ address = pub-AW:adr,
+ edition = "Second",
+ pages = "xxvii + 1090",
+ year = "2004",
+ ISBN = "0-201-36299-6",
+ ISBN-13 = "978-0-201-36299-2",
+ LCCN = "Z253.4.L38 G66 2004",
+ bibdate = "Thu May 20 13:23:24 2004",
+ price = "US\$59.99, CAN\$86.99",
+ series = "Tools and Techniques for Computer Typesetting",
+ acknowledgement = ack-nhfb,
+ remark = "Authors listed as: Frank Mittelbach and Michel
+ Goossens with Johannes Braams, David Carlisle, and
+ Chris Rowley, and with contributions by Christine Detig
+ and Joachim Schrod.",
+}
diff --git a/macros/generic/epsf/bboxgrid.ps b/macros/generic/epsf/bboxgrid.ps
new file mode 100644
index 0000000000..7db6828817
--- /dev/null
+++ b/macros/generic/epsf/bboxgrid.ps
@@ -0,0 +1,317 @@
+%!PS-Adobe
+%%BoundingBox: 0 0 612 792
+%%% ====================================================================
+%%% @PostScript-file{
+%%% author = "Nelson H. F. Beebe",
+%%% version = "1.01",
+%%% date = "22 January 1994",
+%%% time = "23:33:36 MST",
+%%% filename = "bboxgrid.ps",
+%%% address = "Center for Scientific Computing
+%%% Department of Mathematics
+%%% University of Utah
+%%% Salt Lake City, UT 84112
+%%% USA
+%%% Tel: +1 801 581 5254
+%%% FAX: +1 801 581 4148",
+%%% checksum = "57568 317 1097 8973",
+%%% email = "beebe@solitude.math.utah.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "grid, measure, calibration",
+%%% supported = "yes",
+%%% docstring = "This PostScript file produces a numbered grid
+%%% measured in PostScript units of big points
+%%% for the determination of correct bounding
+%%% boxes of other PostScript files.
+%%%
+%%% Accurate bounding box measurements are
+%%% required if the PostScript is to be included
+%%% in other PostScript documents, such as via
+%%% the TeX \special{} command.
+%%%
+%%% While PostScript by default places the (0,0)
+%%% origin at the lower-left page corner,
+%%% variations of several points will be found in
+%%% different printers, even between identical
+%%% models from the same vendor.
+%%%
+%%% To correctly determine the BoundingBox of an
+%%% arbitrary PostScript figure, overlay a
+%%% printed copy of the figure on the grid
+%%% produced by this file on the SAME printer,
+%%% and measure from it the coordinates of the
+%%% lower-left and upper-right corners. These
+%%% four integers should be entered in the
+%%% PostScript file as a comment of the form
+%%%
+%%% %%BoundingBox: llx lly urx ury
+%%%
+%%% This comment should be placed near the
+%%% beginning, preferably right after the initial
+%%% line that should start %! or %!PS-Adobe...
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+
+%%% 1.01 [22-Jan-1994] add top label, and bp axis labels
+%%% 1.00 [22-Nov-1991] original version
+
+/TickSize 5 def
+/TickStep 5 def
+/TickFontSize 9 def
+
+/Frame % x y width height Frame
+{
+ /height exch def
+ /width exch def
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ width 0 rlineto
+ 0 height rlineto
+ width neg 0 rlineto
+ closepath
+ stroke
+
+ x y width TickStep TickSize TickX
+ x y width TickStep TickSize NumberX
+ x y height add width TickStep TickSize neg TickX
+ x y height add width TickStep TickSize neg NumberX
+ x y height TickStep TickSize TickY
+ x y height TickStep TickSize NumberY
+ x width add y height TickStep TickSize neg TickY
+ x width add y height TickStep TickSize neg NumberY
+ x y 25 25 width height Grid
+} def
+
+/Grid % x y dx dy width height Grid
+{
+ /Gheight exch def
+ /Gwidth exch def
+ /Gdy exch def
+ /Gdx exch def
+ /Gy exch def
+ /Gx exch def
+
+ Gx
+ Gdx
+ Gx Gwidth add
+ {
+ newpath
+ Gy moveto
+ 0 Gheight rlineto
+ closepath
+ stroke
+ }
+ for
+
+ Gy
+ Gdy
+ Gy Gheight add
+ {
+ newpath
+ Gx exch moveto
+ Gwidth 0 rlineto
+ closepath
+ stroke
+ }
+ for
+} def
+
+
+/NumberX % x y length dx tick NumberX
+{
+ /Helvetica findfont TickFontSize scalefont setfont
+ /Ttick exch def
+ /Tdx exch def
+ /Tlength exch def
+ /Ty exch def
+ /Tx exch def
+
+ /temp 12 string def
+ Tx
+ Tdx 5 mul
+ Tx Tlength add
+ {
+ dup
+ Ty moveto % Tx already on stack
+ Ttick 0 lt
+ { 0 TickFontSize 0.5 mul rmoveto }
+ { 0 TickFontSize -1.5 mul rmoveto }
+ ifelse
+ temp cvs
+ dup stringwidth pop -2 div 0 rmoveto
+ show
+ }
+ for
+} def
+
+/NumberY % x y length dy tick NumberY
+{
+ /Helvetica findfont TickFontSize scalefont setfont
+ /Ttick exch def
+ /Tdy exch def
+ /Tlength exch def
+ /Ty exch def
+ /Tx exch def
+
+ /temp 12 string def
+ Ty
+ Tdy 5 mul
+ Ty Tlength add
+ {
+ dup
+ Tx exch moveto % Ty already on stack
+ Ttick neg TickFontSize -2 div rmoveto
+ temp cvs
+ Ttick 0 gt
+ { dup stringwidth pop neg 0 rmoveto }
+ if
+ show
+ }
+ for
+} def
+
+/TickX % x y length dx tick TickX
+{
+ /Ttick exch def
+ /Tdx exch def
+ /Tlength exch def
+ /Ty exch def
+ /Tx exch def
+
+ Tx
+ Tdx
+ Tx Tlength add
+ {
+ dup
+ newpath
+ Ty moveto % Tx already on stack
+ cvi Tdx 5 mul cvi mod 0 eq% draw tick, double length every 5th
+ { Ttick 2 mul }
+ { Ttick }
+ ifelse
+ 0
+ exch
+ rlineto
+ closepath
+ stroke
+ }
+ for
+} def
+
+/TickY % x y length dy tick TickY
+{
+ /Ttick exch def
+ /Tdy exch def
+ /Tlength exch def
+ /Ty exch def
+ /Tx exch def
+
+ Ty
+ Tdy
+ Ty Tlength add
+ {
+ dup
+ newpath
+ Tx exch moveto % Ty already on stack
+ cvi Tdy 5 mul cvi mod 0 eq% draw tick, double length every 5th
+ { Ttick 2 mul }
+ { Ttick }
+ ifelse
+ 0
+ rlineto
+ closepath
+ stroke
+ }
+ for
+} def
+
+/inch
+{
+ 72 mul
+} def
+
+/mm
+{
+ 72 mul 25.4 div
+} def
+
+% (string) CenterCenterShow -- show centered at currentpoint
+/CenterCenterShow
+{
+ dup stringwidth pop -2 div TickFontSize -2 div rmoveto show
+} def
+
+% (string) RightCenterShow -- show right-centered at currentpoint
+/RightCenterShow
+{
+ dup stringwidth pop neg TickFontSize -2 div rmoveto show
+} def
+
+% (string) LeftCenterShow -- show right-centered at currentpoint
+/LeftCenterShow
+{
+ 0 TickFontSize -2 div rmoveto show
+} def
+
+% Select ONE of these pairs of page dimensions
+
+% ISO A4-format paper
+% /PageWidth 210 mm def
+% /PageHeight 297 mm def
+
+% US A-format paper
+/PageWidth 8.5 inch def
+/PageHeight 11.0 inch def
+
+% Make grid lines half the normal thickness
+currentlinewidth 0.5 mul setlinewidth
+
+% Title the grid
+/Helvetica-Bold findfont TickFontSize scalefont setfont
+PageWidth 2 div 25 moveto
+(bboxgrid.ps [Version 1.01] [22 January 1994]) dup
+CenterCenterShow
+
+PageWidth 2 div 780 moveto
+CenterCenterShow
+
+% You can change this line to make a different grid. The values
+% should all be multiples of 25.
+% The values 50 50 525 700 are appropriate for an Apple LaserWriter II.
+% x y width height Frame
+50 50 525 700 Frame
+
+% label bottom horizontal axis at each end
+50 30 moveto
+(bp) CenterCenterShow
+575 30 moveto
+(bp) CenterCenterShow
+
+% label top horizontal axis at each end
+50 770 moveto
+(bp) CenterCenterShow
+575 770 moveto
+(bp) CenterCenterShow
+
+% label left vertical axis at each end
+25 50 moveto
+(bp) RightCenterShow
+25 750 moveto
+(bp) RightCenterShow
+
+% label right vertical axis at each end
+600 50 moveto
+(bp) LeftCenterShow
+600 750 moveto
+(bp) LeftCenterShow
+
+showpage
diff --git a/macros/generic/epsf/epsf-doc.pdf b/macros/generic/epsf/epsf-doc.pdf
new file mode 100644
index 0000000000..6d2ac5e85b
--- /dev/null
+++ b/macros/generic/epsf/epsf-doc.pdf
Binary files differ
diff --git a/macros/generic/epsf/epsf-doc.tex b/macros/generic/epsf/epsf-doc.tex
new file mode 100644
index 0000000000..54074e4b5b
--- /dev/null
+++ b/macros/generic/epsf/epsf-doc.tex
@@ -0,0 +1,659 @@
+\documentclass[DIV=9, pagesize=auto]{scrartcl}
+
+\usepackage{fixltx2e}
+\usepackage{etex}
+\usepackage{xspace}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+\usepackage{microtype}
+\usepackage[unicode=true]{hyperref}
+
+\newcommand*{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}
+\newcommand*{\Mail}[1]{\href{mailto:#1}{\texttt{<#1>}}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
+\makeatletter
+\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
+\makeatother
+\newcommand*{\env}[1]{\texttt{#1}}
+\newcommand*{\opt}[1]{\texttt{#1}}
+\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
+\newcommand*{\marg}[1]{\texttt{\{}\meta{#1}\texttt{\}}}
+\newcommand*{\Beebe}{Nelson H. F. Beebe \Mail{beebe@math.utah.edu}\xspace}
+
+\addtokomafont{title}{\rmfamily}
+
+\title{The \pkg{epsf} package\thanks{This manual corresponds to \pkg{epsf}~v2.7.3, dated~23 July 2005.}}
+\author{Tom Rokicki\\\mail{rokicki@cs.stanford.edu}}
+\date{23 July 2005}
+
+
+\begin{document}
+
+\maketitle
+
+\noindent
+This file contains \TeX\ macros to include an
+Encapsulated PostScript graphic. It works
+by finding the bounding box comment,
+calculating the correct scale values, and
+inserting a vbox of the appropriate size at
+the current position in the \TeX\ document.
+
+To use, simply use
+%
+\begin{verbatim}
+\input epsf % somewhere early on in your TeX file
+
+% then where you want to insert a vbox for a figure:
+\epsfbox{filename.ps}
+\end{verbatim}
+
+Alternatively, you can supply your own
+bounding box by
+%
+\begin{verbatim}
+\epsfbox[0 0 30 50]{filename.ps}
+\end{verbatim}
+%
+This will not read in the file, and will
+instead use the bounding box you specify.
+
+The effect will be to typeset the figure as
+a \TeX\ box, at the point of your \cmd{\epsfbox}
+command. By default, the graphic will have
+its `natural' width (namely the width of
+its bounding box, as described in
+\texttt{filename.ps}). The \TeX\ box will have depth
+zero.
+
+You can enlarge or reduce the figure by
+using\\
+\cmd{\epsfxsize\ = }\meta{dimen} \cmd{\epsfbox}\marg{filename.ps}\\
+or\\
+\cmd{\epsfysize\ = }\meta{dimen} \cmd{\epsfbox}\marg{filename.ps}\\
+instead. Then the width of the \TeX\ box will
+be \cmd{\epsfxsize} and its height will be scaled
+proportionately (or the height will be
+\cmd{\epsfysize} and its width will be scaled
+proportionately).
+
+The width (and height) is restored to zero
+after each use, so \cmd{\epsfxsize} or \cmd{\epsfysize}
+must be specified before \emph{each} use of
+\cmd{\epsfbox}.
+
+A more general facility for sizing is
+available by defining the \cmd{\epsfsize} macro.
+Normally you can redefine this macro to do
+almost anything. The first parameter is
+the natural $x$~size of the PostScript
+graphic, the second parameter is the
+natural $y$~size of the PostScript graphic.
+It must return the xsize to use, or 0 if
+natural scaling is to be used. Common uses
+include:
+%
+\begin{verbatim}
+ \epsfxsize % just leave the old value alone
+ 0pt % use the natural sizes
+ #1 % use the natural sizes
+ \hsize % scale to full width
+ 0.5#1 % scale to 50% of natural size
+ \ifnum #1 > \hsize \hsize \else #1\fi
+ % smaller of natural, hsize
+\end{verbatim}
+
+If you want \TeX\ to report the size of the
+figure (as a message on your terminal when
+it processes each figure), use
+`\cmd{\epsfverbosetrue'}.
+
+If you only want to get the bounding box
+extents, without producing any output boxes
+or \verb+\special{}+, then use \cmd{\epsfgetbb}\marg{filename}.
+The bounding box corner coordinates are saved
+in the macros \cmd{\epsfllx}, \cmd{\epsflly}, \cmd{\epsfurx},
+and \cmd{\epsfury} in PostScript units of big
+points.
+
+
+\section*{Revision history:}
+
+\begin{itemize}
+\item \texttt{epsf.tex} macro file:
+ Originally written by Tomas Rokicki of
+ Radical Eye Software, 29 Mar 1989.
+
+\item Revised by Don Knuth, 3 Jan 1990.
+
+\item Revised by Tomas Rokicki, 18 Jul 1990.
+
+ Accept bounding boxes with no space after
+ the colon.
+
+\item Revised by \Beebe, 03 Dec 1991 [2.0].
+
+ Add version number and date typeout.
+
+ Use \verb+\immediate\write16+ instead of \cmd{\message}
+ to ensure output on new line.
+
+ Handle nested EPS files.
+
+ Handle \verb+%%BoundingBox: (atend)+ lines.
+
+ Do not quit when blank lines are found.
+
+ Add a few percents to remove generation of
+ spurious blank space.
+
+ Move \cmd{\special} output to
+ \cmd{\epsfspecial}\marg{filename} so that other macro
+ packages can input this one, then change
+ the definition of \cmd{\epsfspecial} to match
+ another DVI driver.
+
+ Move size computation to \cmd{\epsfsetsize} which
+ can be called by the user; the verbose
+ output of the bounding box and scaled width
+ and height happens here.
+
+\item Revised by \Beebe, 05 May 1992 [2.1].
+
+ \begin{sloppypar}
+ Wrap \verb+\leavevmode\hbox{}+ around \verb+\vbox{}+ with
+ the \cmd{\special} so that \verb+\epsffile{}+ can be
+ used inside \verb+\begin{center}...\end{center}+
+ \end{sloppypar}
+
+\item Revised by \Beebe, 09 Dec 1992 [2.2].
+
+ Introduce \cmd{\epsfshow\{true,false\}} and
+ \cmd{\epsfframe\{true,false\}} macros; the latter
+ suppresses the insertion of the PostScript,
+ and instead just creates an empty box,
+ which may be handy for rapid prototyping.
+
+\item Revised by \Beebe, 14 Dec 1992 [2.3].
+
+ Add \cmd{\epsfshowfilename\{true,false\}}. When
+ \texttt{true}, and \cmd{\epsfshowfalse} is specified, the
+ PostScript file name will be displayed
+ centered in the figure box.
+
+\item Revised by \Beebe, 20 June 1993 [2.4].
+
+ Remove non-zero debug setting of \cmd{\epsfframemargin},
+ and change margin handling to preserve EPS image
+ size and aspect ratio, so that the actual
+ box is $\cmd{\epsfxsize}+\cmd{\epsfframemargin}$ wide by
+ $\cmd{\epsfysize}+\cmd{\epsfframemargin}$ high.
+ Reduce output of \cmd{\epsfshowfilenametrue} to
+ just the bare file name.
+
+\item Revised by \Beebe, 13 July 1993 [2.5].
+
+ Add \cmd{\epsfframethickness} for control of
+ \cmd{\epsfframe} frame lines.
+
+\item Revised by \Beebe, 02 July 1996 [2.6]
+
+ Add missing initialization \cmd{\epsfatendfalse};
+ the lack of this resulted in the wrong
+ \texttt{BoundingBox} being picked up, mea culpa, sigh\ldots
+
+\item Revised by \Beebe, 25 October 1996 [2.7]
+
+ Update to match changes in from dvips~5-600
+ distribution: new user-accessible macros:
+ \cmd{\epsfclipon}, \cmd{\epsfclipoff}, \cmd{\epsfdrafton},
+ \cmd{\epsfdraftoff}, change \cmd{\empty} to \cmd{\epsfempty}.
+
+\item Revised by \Beebe, 18 May 2002 [2.7.1]
+
+ Add write statements to echo input file
+ names. Prior to that change, an error in
+ such a file could be quite hard to track
+ down: a long list of \TeX\ page numbers could
+ suddenly be followed by ``\TeX\ buffer
+ capacity'' exceeded, without any indication
+ of the file that was responsible.
+
+\item Revised by \Beebe, 16 May 2003 [2.7.2]
+
+ Supply two critical percent characters that
+ were mistakenly omitted in version~2.7.1,
+ and resulted in a small amount of spurious
+ horizontal space.
+
+\item Revised by \Beebe,\\ Karl Berry
+ \Mail{karl@freefriends.org},\\ and Robin Fairbairns
+ \Mail{Robin.Fairbairns@cl.cam.ac.uk},\\
+ 23 July 2005 [2.7.3]
+
+ Add critical \verb+\hbox{}+ wrapper in \cmd{\epsfsetgraph}
+ so that \verb+\epsfbox{}+ does not conflict with
+ \LaTeX\ \env{center} environment when \verb+\epsfbox{}+ is
+ surrounded by other horizonal objects.
+ Improve macro readability by adding legal,
+ but invisible-in-typeset-output, spaces.
+ Ensure that verbose status reports come
+ inside \verb+(filename ...)+ list.
+
+\end{itemize}
+
+\end{document}
+
+
+
+
+---------------------------------------------
+
+---------------------------------------------
+
+---------------------------------------------
+
+---------------------------------------------
+
+%%% }
+%%% ====================================================================
+
+%\immediate \write16 {This is `epsf.tex' v2.0 <02 Dec 1991>}%
+%\immediate \write16 {This is `epsf.tex' v2.1 <05 May 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.2 <09 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.3 <14 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.4 <20 June 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.5 <13 July 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.6 <02 July 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7 <25 October 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.1 <18 May 2002>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.2 <16 May 2003>}%
+\immediate \write16 {This is `epsf.tex' v2.7.3 <23 July 2005>}%
+%
+\newread \epsffilein % file to \read
+\newif \ifepsfatend % need to scan to LAST %%BoundingBox comment?
+\newif \ifepsfbbfound % success?
+\newif \ifepsfdraft % use draft mode?
+\newif \ifepsffileok % continue looking for the bounding box?
+\newif \ifepsfframe % frame the bounding box?
+\newif \ifepsfshow % show PostScript file, or just bounding box?
+\epsfshowtrue % default is to display PostScript file
+\newif \ifepsfshowfilename % show the file name if \epsfshowfalse specified?
+\newif \ifepsfverbose % report what you're making?
+\newdimen \epsfframemargin % margin between box and frame
+\newdimen \epsfframethickness % thickness of frame rules
+\newdimen \epsfrsize % vertical size before scaling
+\newdimen \epsftmp % register for arithmetic manipulation
+\newdimen \epsftsize % horizontal size before scaling
+\newdimen \epsfxsize % horizontal size after scaling
+\newdimen \epsfysize % vertical size after scaling
+\newdimen \pspoints % conversion factor
+%
+\pspoints = 1bp % Adobe points are `big'
+\epsfxsize = 0pt % default value, means `use natural size'
+\epsfysize = 0pt % ditto
+\epsfframemargin = 0pt % default value: frame box flush around picture
+\epsfframethickness = 0.4pt % TeX's default rule thickness
+%
+\def \epsfbox #1{%
+ \global \def \epsfllx {72}%
+ \global \def \epsflly {72}%
+ \global \def \epsfurx {540}%
+ \global \def \epsfury {720}%
+ \def \lbracket {[}%
+ \def \testit {#1}%
+ \ifx \testit \lbracket
+ \let \next = \epsfgetlitbb
+ \else
+ \let \next = \epsfnormal
+ \fi
+ \next{#1}%
+}%
+%
+% We use \epsfgetlitbb if the user specified an explicit bounding box,
+% and \epsfnormal otherwise. Because \epsfgetbb can be called
+% separately to retrieve the bounding box, we move the verbose
+% printing the bounding box extents and size on the terminal to
+% \epsfstatus. Therefore, when the user provided the bounding box,
+% \epsfgetbb will not be called, so we must call \epsfsetsize and
+% \epsfstatus ourselves.
+%
+\def \epsfgetlitbb #1#2 #3 #4 #5]#6{%
+ \epsfgrab #2 #3 #4 #5 .\\%
+ \epsfsetsize
+ \epsfstatus{#6}%
+ \epsfsetgraph{#6}%
+}%
+%
+\def \epsfnormal #1{%
+ \epsfgetbb{#1}%
+ \epsfsetgraph{#1}%
+}%
+%
+\def \epsfgetbb #1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+ \openin\epsffilein=#1
+ \immediate \write16 {(#1}%
+ \ifeof \epsffilein
+ \errmessage{Could not open file #1, ignoring it}%
+ \else %process the file
+ {% %start a group to contain catcode changes
+ % Make all special characters, except space, to be of type
+ % `other' so we process the file in almost verbatim mode
+ % (TeXbook, p. 344).
+ \chardef \other = 12%
+ \def \do ##1{\catcode`##1=\other}%
+ \dospecials
+ \catcode `\ = 10%
+ \epsffileoktrue %true while we are looping
+ \epsfatendfalse %[02-Jul-1996]: add forgotten initialization
+ \loop %reading lines from the EPS file
+ \read \epsffilein to \epsffileline
+ \ifeof \epsffilein %then no more input
+ \epsffileokfalse %so set completion flag
+ \else %otherwise process one line
+ \expandafter \epsfaux \epsffileline :. \\%
+ \fi
+ \ifepsffileok
+ \repeat
+ \ifepsfbbfound
+ \else
+ \ifepsfverbose
+ \immediate \write16 {No BoundingBox comment found in %
+ file #1; using defaults}%
+ \fi
+ \fi
+ }% %end catcode changes
+ \closein\epsffilein
+ \fi %end of file processing
+ \epsfsetsize %compute size parameters
+ \epsfstatus{#1}%
+ \immediate \write16 {)}%
+}%
+%
+% Clipping control:
+\def \epsfclipon {\def \epsfclipstring { clip}}%
+\def \epsfclipoff {\def \epsfclipstring {\ifepsfdraft \space clip\fi}}%
+\epsfclipoff % default for dvips is OFF
+%
+% The special that is emitted by \epsfsetgraph comes from this macro.
+% It is defined separately to allow easy customization by other
+% packages that first \input epsf.tex, then redefine \epsfspecial.
+% This macro is invoked in the lower-left corner of a box of the
+% width and height determined from the arguments to \epsffile, or
+% from the %%BoundingBox in the EPS file itself.
+%
+% This version is for dvips:
+\def \epsfspecial #1{%
+ \epsftmp=10\epsfxsize
+ \divide \epsftmp by \pspoints
+ \ifnum \epsfrsize = 0%
+ \relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space
+ lly=\epsflly\space
+ urx=\epsfurx\space
+ ury=\epsfury\space
+ rwi=\number\epsftmp
+ \epsfclipstring
+ }%
+ \else
+ \epsfrsize=10\epsfysize
+ \divide \epsfrsize by \pspoints
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space
+ lly=\epsflly\space
+ urx=\epsfurx\space
+ ury=\epsfury\space
+ rwi=\number\epsftmp
+ rhi=\number\epsfrsize
+ \epsfclipstring
+ }%
+ \fi
+}%
+%
+% \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331.
+% but modified to set the box width to the natural width, rather
+% than the line width, and to include space for margins and rules
+\def \epsfframe #1%
+{%
+ % method for detecting latex suggested by Robin Fairbairns, May 2005.
+ \ifx \documentstyle \epsfundefined
+ \relax
+ \else
+% \leavevmode % so we can put this inside
+ % a latex centered environment
+ % The \leavevmode breaks under plain when this is inside a box,
+ % because it forces the figure to be the entire \hsize. On the
+ % other hand, we need the \leavevmode for it to work in LaTeX,
+ % because the {center} environment works by adjusting TeX's
+ % paragraph parameters.
+ %
+ % Compare the LaTeX sequence
+ % \begin{center}
+ % \epsfbox{tip.eps}q
+ % \end{center}
+ % (needs the \leavevmode to put the q right next to the image)
+ %
+ % with the plain TeX sequence:
+ % \leftline{\vbox{\epsfbox{tip.eps}}q}
+ % (had the q all the way over to the right, when \leavevmode was used)
+ \fi
+ %
+ \setbox0 = \hbox{#1}%
+ \dimen0 = \wd0 % natural width of argument
+ \advance \dimen0 by 2\epsfframemargin % plus width of 2 margins
+ \advance \dimen0 by 2\epsfframethickness % plus width of 2 rule lines
+ \relax
+ \hbox{%
+ \vbox
+ {%
+ \hrule height \epsfframethickness depth 0pt
+ \hbox to \dimen0
+ {%
+ \hss
+ \vrule width \epsfframethickness
+ \kern \epsfframemargin
+ \vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }%
+ \kern \epsfframemargin
+ \vrule width \epsfframethickness
+ \hss
+ }% end hbox
+ \hrule height 0pt depth \epsfframethickness
+ }% end vbox
+ }% end hbox
+ \relax
+}%
+%
+\def \epsfsetgraph #1%
+{%
+ %
+ % Make the vbox and stick in a \special that the DVI driver can
+ % parse. \vfil and \hfil are used to place the \special origin at
+ % the lower-left corner of the vbox. \epsfspecial can be redefined
+ % to produce alternate \special syntaxes.
+ %
+ \ifvmode \leavevmode \fi
+ \relax
+ \hbox{% so we can put this in \begin{center}...\end{center}
+ \ifepsfframe \expandafter \epsfframe \fi
+ {\vbox to\epsfysize
+ {%
+ \ifepsfshow
+ % output \special{} at lower-left corner of figure box
+ \vfil
+ \hbox to \epsfxsize{\epsfspecial{#1}\hfil}%
+ \else
+ \vfil
+ \hbox to\epsfxsize{%
+ \hss
+ \ifepsfshowfilename
+ {%
+ \epsfframemargin=3pt % local change of margin
+ \epsfframe{{\tt #1}}%
+ }%
+ \fi
+ \hss
+ }%
+ \vfil
+ \fi
+ }%
+ }}%
+ \relax
+ %
+ % Reset \epsfxsize and \epsfysize, as documented above.
+ %
+ \global \epsfxsize = 0pt
+ \global \epsfysize = 0pt
+}%
+%
+% Now we have to calculate the scale and offset values to use.
+% First we compute the natural sizes.
+%
+\def \epsfsetsize
+{%
+ \epsfrsize = \epsfury \pspoints
+ \advance \epsfrsize by -\epsflly \pspoints
+ \epsftsize = \epsfurx \pspoints
+ \advance \epsftsize by -\epsfllx \pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize = \epsfsize{\epsftsize}{\epsfrsize}%
+ \ifnum \epsfxsize = 0
+ \ifnum \epsfysize = 0
+ \epsfxsize = \epsftsize
+ \epsfysize = \epsfrsize
+ \epsfrsize = 0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else
+ \epsftmp = \epsftsize
+ \divide \epsftmp by \epsfrsize
+ \epsfxsize = \epsfysize
+ \multiply \epsfxsize by \epsftmp
+ \multiply \epsftmp by \epsfrsize
+ \advance \epsftsize by -\epsftmp
+ \epsftmp = \epsfysize
+ \loop
+ \advance \epsftsize by \epsftsize
+ \divide \epsftmp by 2
+ \ifnum \epsftmp > 0
+ \ifnum \epsftsize < \epsfrsize
+ \else
+ \advance \epsftsize -\epsfrsize
+ \advance \epsfxsize \epsftmp
+ \fi
+ \repeat
+ \epsfrsize = 0pt
+ \fi
+ \else
+ \ifnum \epsfysize = 0
+ \epsftmp = \epsfrsize
+ \divide \epsftmp by \epsftsize
+ \epsfysize = \epsfxsize
+ \multiply \epsfysize by \epsftmp
+ \multiply \epsftmp by \epsftsize
+ \advance \epsfrsize by -\epsftmp
+ \epsftmp = \epsfxsize
+ \loop
+ \advance \epsfrsize by \epsfrsize
+ \divide \epsftmp by 2
+ \ifnum \epsftmp > 0
+ \ifnum \epsfrsize < \epsftsize
+ \else
+ \advance \epsfrsize by -\epsftsize
+ \advance \epsfysize by \epsftmp
+ \fi
+ \repeat
+ \epsfrsize = 0pt
+ \else
+ \epsfrsize = \epsfysize
+ \fi
+ \fi
+}%
+%
+% Issue some status messages if the user requested them
+%
+\def \epsfstatus #1{% arg = filename
+ \ifepsfverbose
+ \immediate \write16 {#1: BoundingBox:
+ llx = \epsfllx \space lly = \epsflly \space
+ urx = \epsfurx \space ury = \epsfury \space}%
+ \immediate \write16 {#1: scaled width = \the\epsfxsize \space
+ scaled height = \the\epsfysize}%
+ \fi
+}%
+%
+% We still need to define the tricky \epsfaux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global \let \epsfpercent=%\global \def \epsfbblit {%BoundingBox}}%
+\global \def \epsfatend{(atend)}%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found.
+%
+% If we find a line
+%
+% %%BoundingBox: (atend)
+%
+% then we ignore it, but set a flag to force parsing all of the
+% file, so the last %%BoundingBox parsed will be the one used. This
+% is necessary, because EPS files can themselves contain other EPS
+% files with their own %%BoundingBox comments.
+%
+% If we find a line
+%
+% %%BoundingBox: llx lly urx ury
+%
+% then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury.
+% Then, if we have not previously parsed an (atend), we flag completion
+% and can stop reading the file. Otherwise, we must keep on reading
+% to end of file so that we find the values on the LAST %%BoundingBox.
+\long \def \epsfaux#1#2:#3\\%
+{%
+ \def \testit {#2}% % save second character up to just before colon
+ \ifx#1\epsfpercent % then first char is percent (quick test)
+ \ifx \testit \epsfbblit % then (slow test) we have %%BoundingBox
+ \epsfgrab #3 . . . \\%
+ \ifx \epsfllx\epsfatend % then ignore %%BoundingBox: (atend)
+ \global \epsfatendtrue
+ \else % else found %%BoundingBox: llx lly urx ury
+ \ifepsfatend % then keep parsing ALL %%BoundingBox lines
+ \else % else stop after first one parsed
+ \epsffileokfalse
+ \fi
+ \global \epsfbbfoundtrue
+ \fi
+ \fi
+ \fi
+}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def \epsfempty {}%
+\def \epsfgrab #1 #2 #3 #4 #5\\{%
+ \global \def \epsfllx {#1}\ifx \epsfllx\epsfempty
+ \epsfgrab #2 #3 #4 #5 .\\\else
+ \global \def \epsflly {#2}%
+ \global \def \epsfurx {#3}\global \def \epsfury {#4}\fi
+}%
+%
+% We default the epsfsize macro.
+%
+\def \epsfsize #1#2{\epsfxsize}%
+%
+% Finally, another definition for compatibility with older macros.
+%
+\let \epsffile = \epsfbox
+\endinput
diff --git a/macros/generic/epsf/epsf.sty b/macros/generic/epsf/epsf.sty
new file mode 120000
index 0000000000..727dfce299
--- /dev/null
+++ b/macros/generic/epsf/epsf.sty
@@ -0,0 +1 @@
+epsf.tex \ No newline at end of file
diff --git a/macros/generic/epsf/epsf.tex b/macros/generic/epsf/epsf.tex
new file mode 100644
index 0000000000..847de77fb6
--- /dev/null
+++ b/macros/generic/epsf/epsf.tex
@@ -0,0 +1,653 @@
+%%% -*-TeX-*-
+%%% ====================================================================
+%%% @TeX-file{
+%%% author = "Tom Rokicki",
+%%% version = "2.7.4",
+%%% date = "14 February 2011",
+%%% time = "15:44:06 MST",
+%%% filename = "epsf.tex",
+%%% address = "Tom Rokicki
+%%% Box 2081
+%%% Stanford, CA 94309
+%%% USA",
+%%% telephone = "+1 415 855 9989",
+%%% checksum = "29223 653 3100 27123",
+%%% email = "rokicki@cs.stanford.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% copyright = "This file is freely redistributable and
+%%% placed into the public domain by Tomas
+%%% Rokicki.",
+%%% keywords = "PostScript, TeX",
+%%% license = "public domain",
+%%% supported = "yes",
+%%% abstract = "This file contains macros to support the
+%%% inclusion of Encapsulated PostScript files
+%%% in TeX documents.",
+%%% docstring = "This file contains TeX macros to include an
+%%% Encapsulated PostScript graphic. It works
+%%% by finding the bounding box comment,
+%%% calculating the correct scale values, and
+%%% inserting a vbox of the appropriate size at
+%%% the current position in the TeX document.
+%%%
+%%% To use, simply use
+%%%
+%%% \input epsf % somewhere early on in your TeX file
+%%%
+%%% % then where you want to insert a vbox for a figure:
+%%% \epsfbox{filename.ps}
+%%%
+%%% Alternatively, you can supply your own
+%%% bounding box by
+%%%
+%%% \epsfbox[0 0 30 50]{filename.ps}
+%%%
+%%% This will not read in the file, and will
+%%% instead use the bounding box you specify.
+%%%
+%%% The effect will be to typeset the figure as
+%%% a TeX box, at the point of your \epsfbox
+%%% command. By default, the graphic will have
+%%% its `natural' width (namely the width of
+%%% its bounding box, as described in
+%%% filename.ps). The TeX box will have depth
+%%% zero.
+%%%
+%%% You can enlarge or reduce the figure by
+%%% using
+%%%
+%%% \epsfxsize = <dimen> \epsfbox{filename.ps}
+%%% or
+%%% \epsfysize = <dimen> \epsfbox{filename.ps}
+%%%
+%%% instead. Then the width of the TeX box will
+%%% be \epsfxsize and its height will be scaled
+%%% proportionately (or the height will be
+%%% \epsfysize and its width will be scaled
+%%% proportionately).
+%%%
+%%% The width (and height) is restored to zero
+%%% after each use, so \epsfxsize or \epsfysize
+%%% must be specified before EACH use of
+%%% \epsfbox.
+%%%
+%%% A more general facility for sizing is
+%%% available by defining the \epsfsize macro.
+%%% Normally you can redefine this macro to do
+%%% almost anything. The first parameter is
+%%% the natural x size of the PostScript
+%%% graphic, the second parameter is the
+%%% natural y size of the PostScript graphic.
+%%% It must return the xsize to use, or 0 if
+%%% natural scaling is to be used. Common uses
+%%% include:
+%%%
+%%% \epsfxsize % just leave the old value alone
+%%% 0pt % use the natural sizes
+%%% #1 % use the natural sizes
+%%% \hsize % scale to full width
+%%% 0.5#1 % scale to 50% of natural size
+%%% \ifnum #1 > \hsize \hsize \else #1\fi
+%%% % smaller of natural, hsize
+%%%
+%%% If you want TeX to report the size of the
+%%% figure (as a message on your terminal when
+%%% it processes each figure), use
+%%% `\epsfverbosetrue'.
+%%%
+%%% If you only want to get the bounding box
+%%% extents, without producing any output boxes
+%%% or \special{}, then use \epsfgetbb{filename}.
+%%% The bounding box corner coordinates are saved
+%%% in the macros \epsfllx, \epsflly, \epsfurx,
+%%% and \epsfury in PostScript units of big
+%%% points.
+%%%
+%%% Revision history:
+%%%
+%%% ---------------------------------------------
+%%% epsf.tex macro file:
+%%% Originally written by Tomas Rokicki of
+%%% Radical Eye Software, 29 Mar 1989.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Don Knuth, 3 Jan 1990.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Tomas Rokicki, 18 Jul 1990.
+%%% Accept bounding boxes with no space after
+%%% the colon.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 03 Dec 1991 [2.0].
+%%% Add version number and date typeout.
+%%%
+%%% Use \immediate\write16 instead of \message
+%%% to ensure output on new line.
+%%%
+%%% Handle nested EPS files.
+%%%
+%%% Handle %%BoundingBox: (atend) lines.
+%%%
+%%% Do not quit when blank lines are found.
+%%%
+%%% Add a few percents to remove generation of
+%%% spurious blank space.
+%%%
+%%% Move \special output to
+%%% \epsfspecial{filename} so that other macro
+%%% packages can input this one, then change
+%%% the definition of \epsfspecial to match
+%%% another DVI driver.
+%%%
+%%% Move size computation to \epsfsetsize which
+%%% can be called by the user; the verbose
+%%% output of the bounding box and scaled width
+%%% and height happens here.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 05 May 1992 [2.1].
+%%% Wrap \leavevmode\hbox{} around \vbox{} with
+%%% the \special so that \epsffile{} can be
+%%% used inside \begin{center}...\end{center}
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 09 Dec 1992 [2.2].
+%%% Introduce \epsfshow{true,false} and
+%%% \epsfframe{true,false} macros; the latter
+%%% suppresses the insertion of the PostScript,
+%%% and instead just creates an empty box,
+%%% which may be handy for rapid prototyping.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 14 Dec 1992 [2.3].
+%%% Add \epsfshowfilename{true,false}. When
+%%% true, and \epsfshowfalse is specified, the
+%%% PostScript file name will be displayed
+%%% centered in the figure box.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 20 June 1993 [2.4].
+%%% Remove non-zero debug setting of \epsfframemargin,
+%%% and change margin handling to preserve EPS image
+%%% size and aspect ratio, so that the actual
+%%% box is \epsfxsize+\epsfframemargin wide by
+%%% \epsfysize+\epsfframemargin high.
+%%% Reduce output of \epsfshowfilenametrue to
+%%% just the bare file name.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 13 July 1993 [2.5].
+%%% Add \epsfframethickness for control of
+%%% \epsfframe frame lines.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 02 July 1996 [2.6]
+%%% Add missing initialization \epsfatendfalse;
+%%% the lack of this resulted in the wrong
+%%% BoundingBox being picked up, mea culpa, sigh...
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 25 October 1996 [2.7]
+%%% Update to match changes in from dvips 5-600
+%%% distribution: new user-accessible macros:
+%%% \epsfclipon, \epsfclipoff, \epsfdrafton,
+%%% \epsfdraftoff, change \empty to \epsfempty.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 18 May 2002 [2.7.1]
+%%% Add write statements to echo input file
+%%% names. Prior to that change, an error in
+%%% such a file could be quite hard to track
+%%% down: a long list of TeX page numbers could
+%%% suddenly be followed by ``TeX buffer
+%%% capacity'' exceeded, without any indication
+%%% of the file that was responsible.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 16 May 2003 [2.7.2]
+%%% Supply two critical percent characters that
+%%% were mistakenly omitted in version 2.7.1,
+%%% and resulted in a small amount of spurious
+%%% horizontal space.
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, 14 Feb 2011 [2.7.3]
+%%% Add previously-missing \space in rwi
+%%% assignments (bug reported 14-Feb-2011 by
+%%% Stefan Rueger <s.rueger@open.ac.uk>).
+%%%
+%%% ---------------------------------------------
+%%% Revised by Nelson H. F. Beebe
+%%% <beebe@math.utah.edu>, Karl Berry
+%%% <karl@freefriends.org>, and Robin Fairbairns
+%%% <Robin.Fairbairns@cl.cam.ac.uk>,
+%%% 23 July 2005 [2.7.3]
+%%% Add critical \hbox{} wrapper in \epsfsetgraph
+%%% so that \epsfbox{} does not conflict with
+%%% LaTeX center environment when \epsfbox{} is
+%%% surrounded by other horizonal objects.
+%%% Improve macro readability by adding legal,
+%%% but invisible-in-typeset-output, spaces.
+%%% Ensure that verbose status reports come
+%%% inside (filename ...) list.
+%%%
+%%% ---------------------------------------------
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced by
+%%% Robert Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+
+%\immediate \write16 {This is `epsf.tex' v2.0 <02 Dec 1991>}%
+%\immediate \write16 {This is `epsf.tex' v2.1 <05 May 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.2 <09 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.3 <14 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.4 <20 June 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.5 <13 July 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.6 <02 July 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7 <25 October 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.1 <18 May 2002>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.2 <16 May 2003>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.3 <23 July 2005>}%
+\immediate \write16 {This is `epsf.tex' v2.7.4 <14 February 2011>}%
+%
+\newread \epsffilein % file to \read
+\newif \ifepsfatend % need to scan to LAST %%BoundingBox comment?
+\newif \ifepsfbbfound % success?
+\newif \ifepsfdraft % use draft mode?
+\newif \ifepsffileok % continue looking for the bounding box?
+\newif \ifepsfframe % frame the bounding box?
+\newif \ifepsfshow % show PostScript file, or just bounding box?
+\epsfshowtrue % default is to display PostScript file
+\newif \ifepsfshowfilename % show the file name if \epsfshowfalse specified?
+\newif \ifepsfverbose % report what you're making?
+\newdimen \epsfframemargin % margin between box and frame
+\newdimen \epsfframethickness % thickness of frame rules
+\newdimen \epsfrsize % vertical size before scaling
+\newdimen \epsftmp % register for arithmetic manipulation
+\newdimen \epsftsize % horizontal size before scaling
+\newdimen \epsfxsize % horizontal size after scaling
+\newdimen \epsfysize % vertical size after scaling
+\newdimen \pspoints % conversion factor
+%
+\pspoints = 1bp % Adobe points are `big'
+\epsfxsize = 0pt % default value, means `use natural size'
+\epsfysize = 0pt % ditto
+\epsfframemargin = 0pt % default value: frame box flush around picture
+\epsfframethickness = 0.4pt % TeX's default rule thickness
+%
+\def \epsfbox #1{%
+ \global \def \epsfllx {72}%
+ \global \def \epsflly {72}%
+ \global \def \epsfurx {540}%
+ \global \def \epsfury {720}%
+ \def \lbracket {[}%
+ \def \testit {#1}%
+ \ifx \testit \lbracket
+ \let \next = \epsfgetlitbb
+ \else
+ \let \next = \epsfnormal
+ \fi
+ \next{#1}%
+}%
+%
+% We use \epsfgetlitbb if the user specified an explicit bounding box,
+% and \epsfnormal otherwise. Because \epsfgetbb can be called
+% separately to retrieve the bounding box, we move the verbose
+% printing the bounding box extents and size on the terminal to
+% \epsfstatus. Therefore, when the user provided the bounding box,
+% \epsfgetbb will not be called, so we must call \epsfsetsize and
+% \epsfstatus ourselves.
+%
+\def \epsfgetlitbb #1#2 #3 #4 #5]#6{%
+ \epsfgrab #2 #3 #4 #5 .\\%
+ \epsfsetsize
+ \epsfstatus{#6}%
+ \epsfsetgraph{#6}%
+}%
+%
+\def \epsfnormal #1{%
+ \epsfgetbb{#1}%
+ \epsfsetgraph{#1}%
+}%
+%
+\def \epsfgetbb #1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+ \openin\epsffilein=#1
+ \immediate \write16 {(#1}%
+ \ifeof \epsffilein
+ \errmessage{Could not open file #1, ignoring it}%
+ \else %process the file
+ {% %start a group to contain catcode changes
+ % Make all special characters, except space, to be of type
+ % `other' so we process the file in almost verbatim mode
+ % (TeXbook, p. 344).
+ \chardef \other = 12%
+ \def \do ##1{\catcode`##1=\other}%
+ \dospecials
+ \catcode `\ = 10%
+ \epsffileoktrue %true while we are looping
+ \epsfatendfalse %[02-Jul-1996]: add forgotten initialization
+ \loop %reading lines from the EPS file
+ \read \epsffilein to \epsffileline
+ \ifeof \epsffilein %then no more input
+ \epsffileokfalse %so set completion flag
+ \else %otherwise process one line
+ \expandafter \epsfaux \epsffileline :. \\%
+ \fi
+ \ifepsffileok
+ \repeat
+ \ifepsfbbfound
+ \else
+ \ifepsfverbose
+ \immediate \write16 {No BoundingBox comment found in %
+ file #1; using defaults}%
+ \fi
+ \fi
+ }% %end catcode changes
+ \closein\epsffilein
+ \fi %end of file processing
+ \epsfsetsize %compute size parameters
+ \epsfstatus{#1}%
+ \immediate \write16 {)}%
+}%
+%
+% Clipping control:
+\def \epsfclipon {\def \epsfclipstring { clip}}%
+\def \epsfclipoff {\def \epsfclipstring {\ifepsfdraft \space clip\fi}}%
+\epsfclipoff % default for dvips is OFF
+%
+% The special that is emitted by \epsfsetgraph comes from this macro.
+% It is defined separately to allow easy customization by other
+% packages that first \input epsf.tex, then redefine \epsfspecial.
+% This macro is invoked in the lower-left corner of a box of the
+% width and height determined from the arguments to \epsffile, or
+% from the %%BoundingBox in the EPS file itself.
+%
+% This version is for dvips:
+\def \epsfspecial #1{%
+ \epsftmp=10\epsfxsize
+ \divide \epsftmp by \pspoints
+ \ifnum \epsfrsize = 0%
+ \relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space
+ lly=\epsflly\space
+ urx=\epsfurx\space
+ ury=\epsfury\space
+ rwi=\number\epsftmp\space
+ \epsfclipstring
+ }%
+ \else
+ \epsfrsize=10\epsfysize
+ \divide \epsfrsize by \pspoints
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space
+ lly=\epsflly\space
+ urx=\epsfurx\space
+ ury=\epsfury\space
+ rwi=\number\epsftmp\space
+ rhi=\number\epsfrsize
+ \epsfclipstring
+ }%
+ \fi
+}%
+%
+% \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331.
+% but modified to set the box width to the natural width, rather
+% than the line width, and to include space for margins and rules
+\def \epsfframe #1%
+{%
+ % method for detecting latex suggested by Robin Fairbairns, May 2005.
+ \ifx \documentstyle \epsfundefined
+ \relax
+ \else
+% \leavevmode % so we can put this inside
+ % a latex centered environment
+ % The \leavevmode breaks under plain when this is inside a box,
+ % because it forces the figure to be the entire \hsize. On the
+ % other hand, we need the \leavevmode for it to work in LaTeX,
+ % because the {center} environment works by adjusting TeX's
+ % paragraph parameters.
+ %
+ % Compare the LaTeX sequence
+ % \begin{center}
+ % \epsfbox{tip.eps}q
+ % \end{center}
+ % (needs the \leavevmode to put the q right next to the image)
+ %
+ % with the plain TeX sequence:
+ % \leftline{\vbox{\epsfbox{tip.eps}}q}
+ % (had the q all the way over to the right, when \leavevmode was used)
+ \fi
+ %
+ \setbox0 = \hbox{#1}%
+ \dimen0 = \wd0 % natural width of argument
+ \advance \dimen0 by 2\epsfframemargin % plus width of 2 margins
+ \advance \dimen0 by 2\epsfframethickness % plus width of 2 rule lines
+ \relax
+ \hbox{%
+ \vbox
+ {%
+ \hrule height \epsfframethickness depth 0pt
+ \hbox to \dimen0
+ {%
+ \hss
+ \vrule width \epsfframethickness
+ \kern \epsfframemargin
+ \vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }%
+ \kern \epsfframemargin
+ \vrule width \epsfframethickness
+ \hss
+ }% end hbox
+ \hrule height 0pt depth \epsfframethickness
+ }% end vbox
+ }% end hbox
+ \relax
+}%
+%
+\def \epsfsetgraph #1%
+{%
+ %
+ % Make the vbox and stick in a \special that the DVI driver can
+ % parse. \vfil and \hfil are used to place the \special origin at
+ % the lower-left corner of the vbox. \epsfspecial can be redefined
+ % to produce alternate \special syntaxes.
+ %
+ \ifvmode \leavevmode \fi
+ \relax
+ \hbox{% so we can put this in \begin{center}...\end{center}
+ \ifepsfframe \expandafter \epsfframe \fi
+ {\vbox to\epsfysize
+ {%
+ \ifepsfshow
+ % output \special{} at lower-left corner of figure box
+ \vfil
+ \hbox to \epsfxsize{\epsfspecial{#1}\hfil}%
+ \else
+ \vfil
+ \hbox to\epsfxsize{%
+ \hss
+ \ifepsfshowfilename
+ {%
+ \epsfframemargin=3pt % local change of margin
+ \epsfframe{{\tt #1}}%
+ }%
+ \fi
+ \hss
+ }%
+ \vfil
+ \fi
+ }%
+ }}%
+ \relax
+ %
+ % Reset \epsfxsize and \epsfysize, as documented above.
+ %
+ \global \epsfxsize = 0pt
+ \global \epsfysize = 0pt
+}%
+%
+% Now we have to calculate the scale and offset values to use.
+% First we compute the natural sizes.
+%
+\def \epsfsetsize
+{%
+ \epsfrsize = \epsfury \pspoints
+ \advance \epsfrsize by -\epsflly \pspoints
+ \epsftsize = \epsfurx \pspoints
+ \advance \epsftsize by -\epsfllx \pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize = \epsfsize{\epsftsize}{\epsfrsize}%
+ \ifnum \epsfxsize = 0
+ \ifnum \epsfysize = 0
+ \epsfxsize = \epsftsize
+ \epsfysize = \epsfrsize
+ \epsfrsize = 0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else
+ \epsftmp = \epsftsize
+ \divide \epsftmp by \epsfrsize
+ \epsfxsize = \epsfysize
+ \multiply \epsfxsize by \epsftmp
+ \multiply \epsftmp by \epsfrsize
+ \advance \epsftsize by -\epsftmp
+ \epsftmp = \epsfysize
+ \loop
+ \advance \epsftsize by \epsftsize
+ \divide \epsftmp by 2
+ \ifnum \epsftmp > 0
+ \ifnum \epsftsize < \epsfrsize
+ \else
+ \advance \epsftsize -\epsfrsize
+ \advance \epsfxsize \epsftmp
+ \fi
+ \repeat
+ \epsfrsize = 0pt
+ \fi
+ \else
+ \ifnum \epsfysize = 0
+ \epsftmp = \epsfrsize
+ \divide \epsftmp by \epsftsize
+ \epsfysize = \epsfxsize
+ \multiply \epsfysize by \epsftmp
+ \multiply \epsftmp by \epsftsize
+ \advance \epsfrsize by -\epsftmp
+ \epsftmp = \epsfxsize
+ \loop
+ \advance \epsfrsize by \epsfrsize
+ \divide \epsftmp by 2
+ \ifnum \epsftmp > 0
+ \ifnum \epsfrsize < \epsftsize
+ \else
+ \advance \epsfrsize by -\epsftsize
+ \advance \epsfysize by \epsftmp
+ \fi
+ \repeat
+ \epsfrsize = 0pt
+ \else
+ \epsfrsize = \epsfysize
+ \fi
+ \fi
+}%
+%
+% Issue some status messages if the user requested them
+%
+\def \epsfstatus #1{% arg = filename
+ \ifepsfverbose
+ \immediate \write16 {#1: BoundingBox:
+ llx = \epsfllx \space lly = \epsflly \space
+ urx = \epsfurx \space ury = \epsfury \space}%
+ \immediate \write16 {#1: scaled width = \the\epsfxsize \space
+ scaled height = \the\epsfysize}%
+ \fi
+}%
+%
+% We still need to define the tricky \epsfaux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global \let \epsfpercent=%\global \def \epsfbblit {%BoundingBox}}%
+\global \def \epsfatend{(atend)}%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found.
+%
+% If we find a line
+%
+% %%BoundingBox: (atend)
+%
+% then we ignore it, but set a flag to force parsing all of the
+% file, so the last %%BoundingBox parsed will be the one used. This
+% is necessary, because EPS files can themselves contain other EPS
+% files with their own %%BoundingBox comments.
+%
+% If we find a line
+%
+% %%BoundingBox: llx lly urx ury
+%
+% then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury.
+% Then, if we have not previously parsed an (atend), we flag completion
+% and can stop reading the file. Otherwise, we must keep on reading
+% to end of file so that we find the values on the LAST %%BoundingBox.
+\long \def \epsfaux#1#2:#3\\%
+{%
+ \def \testit {#2}% % save second character up to just before colon
+ \ifx#1\epsfpercent % then first char is percent (quick test)
+ \ifx \testit \epsfbblit % then (slow test) we have %%BoundingBox
+ \epsfgrab #3 . . . \\%
+ \ifx \epsfllx\epsfatend % then ignore %%BoundingBox: (atend)
+ \global \epsfatendtrue
+ \else % else found %%BoundingBox: llx lly urx ury
+ \ifepsfatend % then keep parsing ALL %%BoundingBox lines
+ \else % else stop after first one parsed
+ \epsffileokfalse
+ \fi
+ \global \epsfbbfoundtrue
+ \fi
+ \fi
+ \fi
+}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def \epsfempty {}%
+\def \epsfgrab #1 #2 #3 #4 #5\\{%
+ \global \def \epsfllx {#1}\ifx \epsfllx\epsfempty
+ \epsfgrab #2 #3 #4 #5 .\\\else
+ \global \def \epsflly {#2}%
+ \global \def \epsfurx {#3}\global \def \epsfury {#4}\fi
+}%
+%
+% We default the epsfsize macro.
+%
+\def \epsfsize #1#2{\epsfxsize}%
+%
+% Finally, another definition for compatibility with older macros.
+%
+\let \epsffile = \epsfbox
+\endinput
diff --git a/macros/generic/epsf/fndbadps b/macros/generic/epsf/fndbadps
new file mode 100644
index 0000000000..bf91a71711
--- /dev/null
+++ b/macros/generic/epsf/fndbadps
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Find forbidden PostScript operators in the files specified
+# on stdin.
+# [21-May-1999] -- update with extended list for PostScript Level 3,
+# from pp. 802--803 of the PostScript Language Reference
+# Manual, 3rd edition, 1999.
+# [29-Jun-1996] -- update to show matching bad operator
+# [23-Oct-1992]
+
+# Level 2 list (19 operators):
+# /banddevice|grestoreall|nulldevice|setpageparams|copypage|initclip|quit|setsccbatch|erasepage|initgraphics|renderbands|setscreen|exitserver|initmatrix|setdevice|settransfer|framedevice|note|setmatrix/
+
+# Level 3 list (36 operators):
+nawk '
+/^%/ {next}
+match($0,/[^A-Za-z](banddevice|clear|cleardictstack|copypage|erasepage|executive|exitserver|framedevice|grestoreall|initclip|initgraphics|initmatrix|nulldevice|quit|renderbands|setblackgeneration|setcolorrendering|setcolorscreen|setcolortransfer|setflat|setglobal|setgstate|sethalftone|setmatrix|setoverprint|setpagedevice|setscreen|setshared|setsmoothness|settransfer|setundercolorremoval|startjob|statusdict|undefinefont|undefineresource|userdict)[^A-Za-z]/) {
+ print FILENAME ":" NR ": " $0 ": [" substr($0,RSTART,RLENGTH) "] illegal in EPS file"
+}' $*
diff --git a/macros/generic/epsf/okay/teps.eps b/macros/generic/epsf/okay/teps.eps
new file mode 100644
index 0000000000..9c92e663a5
--- /dev/null
+++ b/macros/generic/epsf/okay/teps.eps
@@ -0,0 +1,186 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: psposter +x 1in +y 1in +w 2in +h 0.75in +p 20pt +fg navyblue +bd red +bg skyblue test of epsf.tex
+%%CreationDate: Sat Jul 23 17:26:56 MDT 2005
+%%Creator: psposter Version 0.11 [13-Jan-2000]
+%%For: Nelson H. F. Beebe <beebe@psi.math.utah.edu>
+%%BoundingBox: 72 72 216 126
+%%DocumentMedia: A 612 792 0 () ()
+%%DocumentData: Clean7Bit
+%%DocumentFonts: font Times-Bold
+%%DocumentNeededResources: font Times-Bold
+%%Orientation: Portrait
+%%PageOrder: Ascend
+%%Pages: 1
+%%EndComments
+%=======================================================================
+%%BeginProlog
+/psposterdict 50 dict def
+psposterdict begin
+/inch { 72 mul } def
+/BackgroundColor { 0.529412 0.807843 0.921569 } def % skyblue
+/BaselineSkipFactor 1.2 def
+/BorderColor { 1 0 0 } def % red
+/BorderMargin 0 def
+/BorderWidth 10 def
+/CapHeight
+{
+ gsave newpath 0 0 moveto (M) true charpath pathbbox
+ exch pop sub neg exch pop grestore
+} def
+/ForegroundColor { 0 0 0.501961 } def % navyblue
+/reencodePRIVATE {
+ dup length dict begin
+ {1 index /FID ne {def}{pop pop} ifelse} forall
+ %% Using default font encoding, perhaps: /Encoding StandardEncoding def
+ currentdict
+ end
+} def
+/findPRIVATE {
+ dup /FontType known {
+ dup /FontType get 3 ne {
+ dup /CharStrings known {
+ dup /CharStrings get /Thorn known {
+ true
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+} def
+/LandscapeMode false def
+/MarginWidth 0 def
+/PageHeight 792 def
+/PageWidth 612 def
+/Height 54 def
+/Width 144 def
+/PointSize 19.9253 def
+/ROTATE_0 {} def
+/ROTATE_90 {Width 0 translate 90 rotate} bind def
+/ROTATE_180 {Width Height translate 180 rotate} bind def
+/ROTATE_270 {0 Height translate 270 rotate} bind def
+/ScaleFactor 1 def
+LandscapeMode
+{
+ /TextHeight Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+{
+ /TextHeight Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+ifelse
+/XOffset 72 def
+/YOffset 72 def
+% Center and show a string at the current point, leaving
+% point at the center of the next line.
+% Usage: (string) cshow
+/cshow
+{
+ currentpoint /cpy exch def /cpx exch def
+ dup stringwidth pop 0.5 mul neg 0 rmoveto show
+ cpx cpy moveto
+ NewLine
+} def
+/max
+{
+ /a exch def
+ /b exch def
+ a b gt { a } { b } ifelse
+} def
+/min
+{
+ /a exch def
+ /b exch def
+ a b lt { a } { b } ifelse
+} def
+/TheFont /Times-Bold def
+/TheFontPRIVATE /Times-Bold-PRIVATE def
+TheFontPRIVATE TheFont findfont reencodePRIVATE definefont pop
+% Set the font size so that longest PosterLines string fills the TextWidth
+% Usage: setfontsize
+/setfontsize
+{
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ 10 scalefont setfont
+ % Set TheFontSize according to maximum string width
+ 0 PosterLines { stringwidth pop max } forall TextWidth exch div 10 mul
+ /TheFontSize exch def
+ % Adjust TheFontSize according to the number of text lines
+ LineCount TheFontSize mul BaselineSkipFactor mul
+ TextHeight div
+ dup 1 gt { TheFontSize exch div /TheFontSize exch def } { pop } ifelse
+ % NB: The following definition silently overrides the previous one
+ /TheFontSize PointSize def
+ /BaselineSkip BaselineSkipFactor TheFontSize mul def
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ TheFontSize scalefont setfont
+} def
+/NewLine {0 BaselineSkip neg rmoveto} def
+/PosterLines
+[
+ (test of epsf.tex)
+] def
+/LineCount PosterLines length 1 max def
+end % psposterdict
+%%EndProlog
+%=======================================================================
+%%BeginSetup
+/#copies 1 def
+%%EndSetup
+%=======================================================================
+%%Page: 1 1
+%%BeginPageSetup
+psposterdict begin
+XOffset YOffset translate
+ScaleFactor dup scale
+ROTATE_0
+end % psposterdict
+%%EndPageSetup
+
+psposterdict begin
+% Draw a frame box and fill it with the background color, and a border color.
+BorderWidth setlinewidth
+newpath
+MarginWidth BorderWidth 0.5 mul add dup moveto
+TextWidth BorderMargin 2 mul add BorderWidth add 0 rlineto
+0 TextHeight BorderMargin 2 mul add BorderWidth add rlineto
+TextWidth BorderMargin 2 mul add BorderWidth add neg 0 rlineto
+closepath
+BackgroundColor setrgbcolor gsave fill grestore
+BorderColor setrgbcolor stroke
+
+0 0 0 setrgbcolor % revert to black
+
+% Set the clipping path to the text region
+0 setlinewidth
+newpath
+MarginWidth BorderWidth add BorderMargin add dup moveto
+TextWidth 0 rlineto
+0 TextHeight rlineto
+TextWidth neg 0 rlineto
+closepath
+clip
+
+% Move origin to text box center, since x = 0 is a convenient
+% value for centering text.
+LandscapeMode
+ { Height 0.5 mul Width 0.5 mul translate }
+ { Width 0.5 mul Height 0.5 mul translate }
+ifelse
+% Set font size so that the longest line just fills the TextWidth.
+setfontsize
+% Center the text vertically, such that the middle line has its text
+% (rather than baseline distance) centered on a horizontal line
+% passing through the center of the picture.
+0 LineCount 0.5 mul BaselineSkip mul BaselineSkip sub moveto
+0 BaselineSkip CapHeight sub 0.5 mul rmoveto
+ForegroundColor setrgbcolor
+% Typeset the poster text.
+PosterLines { cshow } forall
+end % psposterdict
+showpage
+%%PageTrailer
+%=======================================================================
+%%Trailer
+%%EOF
diff --git a/macros/generic/epsf/okay/tepsf.eps b/macros/generic/epsf/okay/tepsf.eps
new file mode 100644
index 0000000000..c1a3954832
--- /dev/null
+++ b/macros/generic/epsf/okay/tepsf.eps
@@ -0,0 +1,186 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: psposter +x 1in +y 1in +w 2in +h 0.75in +p 20pt +fg navyblue +bg lightblue +bd skyblue test of epsf.tex
+%%CreationDate: Sat Jul 23 17:29:32 MDT 2005
+%%Creator: psposter Version 0.11 [13-Jan-2000]
+%%For: Nelson H. F. Beebe <beebe@psi.math.utah.edu>
+%%BoundingBox: 72 72 216 126
+%%DocumentMedia: A 612 792 0 () ()
+%%DocumentData: Clean7Bit
+%%DocumentFonts: font Times-Bold
+%%DocumentNeededResources: font Times-Bold
+%%Orientation: Portrait
+%%PageOrder: Ascend
+%%Pages: 1
+%%EndComments
+%=======================================================================
+%%BeginProlog
+/psposterdict 50 dict def
+psposterdict begin
+/inch { 72 mul } def
+/BackgroundColor { 0.678431 0.847059 0.901961 } def % lightblue
+/BaselineSkipFactor 1.2 def
+/BorderColor { 0.529412 0.807843 0.921569 } def % skyblue
+/BorderMargin 0 def
+/BorderWidth 10 def
+/CapHeight
+{
+ gsave newpath 0 0 moveto (M) true charpath pathbbox
+ exch pop sub neg exch pop grestore
+} def
+/ForegroundColor { 0 0 0.501961 } def % navyblue
+/reencodePRIVATE {
+ dup length dict begin
+ {1 index /FID ne {def}{pop pop} ifelse} forall
+ %% Using default font encoding, perhaps: /Encoding StandardEncoding def
+ currentdict
+ end
+} def
+/findPRIVATE {
+ dup /FontType known {
+ dup /FontType get 3 ne {
+ dup /CharStrings known {
+ dup /CharStrings get /Thorn known {
+ true
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+} def
+/LandscapeMode false def
+/MarginWidth 0 def
+/PageHeight 792 def
+/PageWidth 612 def
+/Height 54 def
+/Width 144 def
+/PointSize 19.9253 def
+/ROTATE_0 {} def
+/ROTATE_90 {Width 0 translate 90 rotate} bind def
+/ROTATE_180 {Width Height translate 180 rotate} bind def
+/ROTATE_270 {0 Height translate 270 rotate} bind def
+/ScaleFactor 1 def
+LandscapeMode
+{
+ /TextHeight Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+{
+ /TextHeight Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+ifelse
+/XOffset 72 def
+/YOffset 72 def
+% Center and show a string at the current point, leaving
+% point at the center of the next line.
+% Usage: (string) cshow
+/cshow
+{
+ currentpoint /cpy exch def /cpx exch def
+ dup stringwidth pop 0.5 mul neg 0 rmoveto show
+ cpx cpy moveto
+ NewLine
+} def
+/max
+{
+ /a exch def
+ /b exch def
+ a b gt { a } { b } ifelse
+} def
+/min
+{
+ /a exch def
+ /b exch def
+ a b lt { a } { b } ifelse
+} def
+/TheFont /Times-Bold def
+/TheFontPRIVATE /Times-Bold-PRIVATE def
+TheFontPRIVATE TheFont findfont reencodePRIVATE definefont pop
+% Set the font size so that longest PosterLines string fills the TextWidth
+% Usage: setfontsize
+/setfontsize
+{
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ 10 scalefont setfont
+ % Set TheFontSize according to maximum string width
+ 0 PosterLines { stringwidth pop max } forall TextWidth exch div 10 mul
+ /TheFontSize exch def
+ % Adjust TheFontSize according to the number of text lines
+ LineCount TheFontSize mul BaselineSkipFactor mul
+ TextHeight div
+ dup 1 gt { TheFontSize exch div /TheFontSize exch def } { pop } ifelse
+ % NB: The following definition silently overrides the previous one
+ /TheFontSize PointSize def
+ /BaselineSkip BaselineSkipFactor TheFontSize mul def
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ TheFontSize scalefont setfont
+} def
+/NewLine {0 BaselineSkip neg rmoveto} def
+/PosterLines
+[
+ (test of epsf.tex)
+] def
+/LineCount PosterLines length 1 max def
+end % psposterdict
+%%EndProlog
+%=======================================================================
+%%BeginSetup
+/#copies 1 def
+%%EndSetup
+%=======================================================================
+%%Page: 1 1
+%%BeginPageSetup
+psposterdict begin
+XOffset YOffset translate
+ScaleFactor dup scale
+ROTATE_0
+end % psposterdict
+%%EndPageSetup
+
+psposterdict begin
+% Draw a frame box and fill it with the background color, and a border color.
+BorderWidth setlinewidth
+newpath
+MarginWidth BorderWidth 0.5 mul add dup moveto
+TextWidth BorderMargin 2 mul add BorderWidth add 0 rlineto
+0 TextHeight BorderMargin 2 mul add BorderWidth add rlineto
+TextWidth BorderMargin 2 mul add BorderWidth add neg 0 rlineto
+closepath
+BackgroundColor setrgbcolor gsave fill grestore
+BorderColor setrgbcolor stroke
+
+0 0 0 setrgbcolor % revert to black
+
+% Set the clipping path to the text region
+0 setlinewidth
+newpath
+MarginWidth BorderWidth add BorderMargin add dup moveto
+TextWidth 0 rlineto
+0 TextHeight rlineto
+TextWidth neg 0 rlineto
+closepath
+clip
+
+% Move origin to text box center, since x = 0 is a convenient
+% value for centering text.
+LandscapeMode
+ { Height 0.5 mul Width 0.5 mul translate }
+ { Width 0.5 mul Height 0.5 mul translate }
+ifelse
+% Set font size so that the longest line just fills the TextWidth.
+setfontsize
+% Center the text vertically, such that the middle line has its text
+% (rather than baseline distance) centered on a horizontal line
+% passing through the center of the picture.
+0 LineCount 0.5 mul BaselineSkip mul BaselineSkip sub moveto
+0 BaselineSkip CapHeight sub 0.5 mul rmoveto
+ForegroundColor setrgbcolor
+% Typeset the poster text.
+PosterLines { cshow } forall
+end % psposterdict
+showpage
+%%PageTrailer
+%=======================================================================
+%%Trailer
+%%EOF
diff --git a/macros/generic/epsf/okay/tepsf1.dvi b/macros/generic/epsf/okay/tepsf1.dvi
new file mode 100644
index 0000000000..67912fbc70
--- /dev/null
+++ b/macros/generic/epsf/okay/tepsf1.dvi
Binary files differ
diff --git a/macros/generic/epsf/okay/tepsf2.dvi b/macros/generic/epsf/okay/tepsf2.dvi
new file mode 100644
index 0000000000..cf9f9ac541
--- /dev/null
+++ b/macros/generic/epsf/okay/tepsf2.dvi
Binary files differ
diff --git a/macros/generic/epsf/okay/tepsf3.dvi b/macros/generic/epsf/okay/tepsf3.dvi
new file mode 100644
index 0000000000..08b9fa27c1
--- /dev/null
+++ b/macros/generic/epsf/okay/tepsf3.dvi
Binary files differ
diff --git a/macros/generic/epsf/teps.eps b/macros/generic/epsf/teps.eps
new file mode 100644
index 0000000000..9c92e663a5
--- /dev/null
+++ b/macros/generic/epsf/teps.eps
@@ -0,0 +1,186 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: psposter +x 1in +y 1in +w 2in +h 0.75in +p 20pt +fg navyblue +bd red +bg skyblue test of epsf.tex
+%%CreationDate: Sat Jul 23 17:26:56 MDT 2005
+%%Creator: psposter Version 0.11 [13-Jan-2000]
+%%For: Nelson H. F. Beebe <beebe@psi.math.utah.edu>
+%%BoundingBox: 72 72 216 126
+%%DocumentMedia: A 612 792 0 () ()
+%%DocumentData: Clean7Bit
+%%DocumentFonts: font Times-Bold
+%%DocumentNeededResources: font Times-Bold
+%%Orientation: Portrait
+%%PageOrder: Ascend
+%%Pages: 1
+%%EndComments
+%=======================================================================
+%%BeginProlog
+/psposterdict 50 dict def
+psposterdict begin
+/inch { 72 mul } def
+/BackgroundColor { 0.529412 0.807843 0.921569 } def % skyblue
+/BaselineSkipFactor 1.2 def
+/BorderColor { 1 0 0 } def % red
+/BorderMargin 0 def
+/BorderWidth 10 def
+/CapHeight
+{
+ gsave newpath 0 0 moveto (M) true charpath pathbbox
+ exch pop sub neg exch pop grestore
+} def
+/ForegroundColor { 0 0 0.501961 } def % navyblue
+/reencodePRIVATE {
+ dup length dict begin
+ {1 index /FID ne {def}{pop pop} ifelse} forall
+ %% Using default font encoding, perhaps: /Encoding StandardEncoding def
+ currentdict
+ end
+} def
+/findPRIVATE {
+ dup /FontType known {
+ dup /FontType get 3 ne {
+ dup /CharStrings known {
+ dup /CharStrings get /Thorn known {
+ true
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+} def
+/LandscapeMode false def
+/MarginWidth 0 def
+/PageHeight 792 def
+/PageWidth 612 def
+/Height 54 def
+/Width 144 def
+/PointSize 19.9253 def
+/ROTATE_0 {} def
+/ROTATE_90 {Width 0 translate 90 rotate} bind def
+/ROTATE_180 {Width Height translate 180 rotate} bind def
+/ROTATE_270 {0 Height translate 270 rotate} bind def
+/ScaleFactor 1 def
+LandscapeMode
+{
+ /TextHeight Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+{
+ /TextHeight Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+ifelse
+/XOffset 72 def
+/YOffset 72 def
+% Center and show a string at the current point, leaving
+% point at the center of the next line.
+% Usage: (string) cshow
+/cshow
+{
+ currentpoint /cpy exch def /cpx exch def
+ dup stringwidth pop 0.5 mul neg 0 rmoveto show
+ cpx cpy moveto
+ NewLine
+} def
+/max
+{
+ /a exch def
+ /b exch def
+ a b gt { a } { b } ifelse
+} def
+/min
+{
+ /a exch def
+ /b exch def
+ a b lt { a } { b } ifelse
+} def
+/TheFont /Times-Bold def
+/TheFontPRIVATE /Times-Bold-PRIVATE def
+TheFontPRIVATE TheFont findfont reencodePRIVATE definefont pop
+% Set the font size so that longest PosterLines string fills the TextWidth
+% Usage: setfontsize
+/setfontsize
+{
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ 10 scalefont setfont
+ % Set TheFontSize according to maximum string width
+ 0 PosterLines { stringwidth pop max } forall TextWidth exch div 10 mul
+ /TheFontSize exch def
+ % Adjust TheFontSize according to the number of text lines
+ LineCount TheFontSize mul BaselineSkipFactor mul
+ TextHeight div
+ dup 1 gt { TheFontSize exch div /TheFontSize exch def } { pop } ifelse
+ % NB: The following definition silently overrides the previous one
+ /TheFontSize PointSize def
+ /BaselineSkip BaselineSkipFactor TheFontSize mul def
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ TheFontSize scalefont setfont
+} def
+/NewLine {0 BaselineSkip neg rmoveto} def
+/PosterLines
+[
+ (test of epsf.tex)
+] def
+/LineCount PosterLines length 1 max def
+end % psposterdict
+%%EndProlog
+%=======================================================================
+%%BeginSetup
+/#copies 1 def
+%%EndSetup
+%=======================================================================
+%%Page: 1 1
+%%BeginPageSetup
+psposterdict begin
+XOffset YOffset translate
+ScaleFactor dup scale
+ROTATE_0
+end % psposterdict
+%%EndPageSetup
+
+psposterdict begin
+% Draw a frame box and fill it with the background color, and a border color.
+BorderWidth setlinewidth
+newpath
+MarginWidth BorderWidth 0.5 mul add dup moveto
+TextWidth BorderMargin 2 mul add BorderWidth add 0 rlineto
+0 TextHeight BorderMargin 2 mul add BorderWidth add rlineto
+TextWidth BorderMargin 2 mul add BorderWidth add neg 0 rlineto
+closepath
+BackgroundColor setrgbcolor gsave fill grestore
+BorderColor setrgbcolor stroke
+
+0 0 0 setrgbcolor % revert to black
+
+% Set the clipping path to the text region
+0 setlinewidth
+newpath
+MarginWidth BorderWidth add BorderMargin add dup moveto
+TextWidth 0 rlineto
+0 TextHeight rlineto
+TextWidth neg 0 rlineto
+closepath
+clip
+
+% Move origin to text box center, since x = 0 is a convenient
+% value for centering text.
+LandscapeMode
+ { Height 0.5 mul Width 0.5 mul translate }
+ { Width 0.5 mul Height 0.5 mul translate }
+ifelse
+% Set font size so that the longest line just fills the TextWidth.
+setfontsize
+% Center the text vertically, such that the middle line has its text
+% (rather than baseline distance) centered on a horizontal line
+% passing through the center of the picture.
+0 LineCount 0.5 mul BaselineSkip mul BaselineSkip sub moveto
+0 BaselineSkip CapHeight sub 0.5 mul rmoveto
+ForegroundColor setrgbcolor
+% Typeset the poster text.
+PosterLines { cshow } forall
+end % psposterdict
+showpage
+%%PageTrailer
+%=======================================================================
+%%Trailer
+%%EOF
diff --git a/macros/generic/epsf/tepsf.eps b/macros/generic/epsf/tepsf.eps
new file mode 100644
index 0000000000..c1a3954832
--- /dev/null
+++ b/macros/generic/epsf/tepsf.eps
@@ -0,0 +1,186 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: psposter +x 1in +y 1in +w 2in +h 0.75in +p 20pt +fg navyblue +bg lightblue +bd skyblue test of epsf.tex
+%%CreationDate: Sat Jul 23 17:29:32 MDT 2005
+%%Creator: psposter Version 0.11 [13-Jan-2000]
+%%For: Nelson H. F. Beebe <beebe@psi.math.utah.edu>
+%%BoundingBox: 72 72 216 126
+%%DocumentMedia: A 612 792 0 () ()
+%%DocumentData: Clean7Bit
+%%DocumentFonts: font Times-Bold
+%%DocumentNeededResources: font Times-Bold
+%%Orientation: Portrait
+%%PageOrder: Ascend
+%%Pages: 1
+%%EndComments
+%=======================================================================
+%%BeginProlog
+/psposterdict 50 dict def
+psposterdict begin
+/inch { 72 mul } def
+/BackgroundColor { 0.678431 0.847059 0.901961 } def % lightblue
+/BaselineSkipFactor 1.2 def
+/BorderColor { 0.529412 0.807843 0.921569 } def % skyblue
+/BorderMargin 0 def
+/BorderWidth 10 def
+/CapHeight
+{
+ gsave newpath 0 0 moveto (M) true charpath pathbbox
+ exch pop sub neg exch pop grestore
+} def
+/ForegroundColor { 0 0 0.501961 } def % navyblue
+/reencodePRIVATE {
+ dup length dict begin
+ {1 index /FID ne {def}{pop pop} ifelse} forall
+ %% Using default font encoding, perhaps: /Encoding StandardEncoding def
+ currentdict
+ end
+} def
+/findPRIVATE {
+ dup /FontType known {
+ dup /FontType get 3 ne {
+ dup /CharStrings known {
+ dup /CharStrings get /Thorn known {
+ true
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+ }{ false } ifelse
+} def
+/LandscapeMode false def
+/MarginWidth 0 def
+/PageHeight 792 def
+/PageWidth 612 def
+/Height 54 def
+/Width 144 def
+/PointSize 19.9253 def
+/ROTATE_0 {} def
+/ROTATE_90 {Width 0 translate 90 rotate} bind def
+/ROTATE_180 {Width Height translate 180 rotate} bind def
+/ROTATE_270 {0 Height translate 270 rotate} bind def
+/ScaleFactor 1 def
+LandscapeMode
+{
+ /TextHeight Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+{
+ /TextHeight Height MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+ /TextWidth Width MarginWidth 2 mul sub BorderWidth 2 mul sub BorderMargin 2 mul sub def
+}
+ifelse
+/XOffset 72 def
+/YOffset 72 def
+% Center and show a string at the current point, leaving
+% point at the center of the next line.
+% Usage: (string) cshow
+/cshow
+{
+ currentpoint /cpy exch def /cpx exch def
+ dup stringwidth pop 0.5 mul neg 0 rmoveto show
+ cpx cpy moveto
+ NewLine
+} def
+/max
+{
+ /a exch def
+ /b exch def
+ a b gt { a } { b } ifelse
+} def
+/min
+{
+ /a exch def
+ /b exch def
+ a b lt { a } { b } ifelse
+} def
+/TheFont /Times-Bold def
+/TheFontPRIVATE /Times-Bold-PRIVATE def
+TheFontPRIVATE TheFont findfont reencodePRIVATE definefont pop
+% Set the font size so that longest PosterLines string fills the TextWidth
+% Usage: setfontsize
+/setfontsize
+{
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ 10 scalefont setfont
+ % Set TheFontSize according to maximum string width
+ 0 PosterLines { stringwidth pop max } forall TextWidth exch div 10 mul
+ /TheFontSize exch def
+ % Adjust TheFontSize according to the number of text lines
+ LineCount TheFontSize mul BaselineSkipFactor mul
+ TextHeight div
+ dup 1 gt { TheFontSize exch div /TheFontSize exch def } { pop } ifelse
+ % NB: The following definition silently overrides the previous one
+ /TheFontSize PointSize def
+ /BaselineSkip BaselineSkipFactor TheFontSize mul def
+ TheFont findfont
+ findPRIVATE {reencodePRIVATE TheFontPRIVATE exch definefont} if
+ TheFontSize scalefont setfont
+} def
+/NewLine {0 BaselineSkip neg rmoveto} def
+/PosterLines
+[
+ (test of epsf.tex)
+] def
+/LineCount PosterLines length 1 max def
+end % psposterdict
+%%EndProlog
+%=======================================================================
+%%BeginSetup
+/#copies 1 def
+%%EndSetup
+%=======================================================================
+%%Page: 1 1
+%%BeginPageSetup
+psposterdict begin
+XOffset YOffset translate
+ScaleFactor dup scale
+ROTATE_0
+end % psposterdict
+%%EndPageSetup
+
+psposterdict begin
+% Draw a frame box and fill it with the background color, and a border color.
+BorderWidth setlinewidth
+newpath
+MarginWidth BorderWidth 0.5 mul add dup moveto
+TextWidth BorderMargin 2 mul add BorderWidth add 0 rlineto
+0 TextHeight BorderMargin 2 mul add BorderWidth add rlineto
+TextWidth BorderMargin 2 mul add BorderWidth add neg 0 rlineto
+closepath
+BackgroundColor setrgbcolor gsave fill grestore
+BorderColor setrgbcolor stroke
+
+0 0 0 setrgbcolor % revert to black
+
+% Set the clipping path to the text region
+0 setlinewidth
+newpath
+MarginWidth BorderWidth add BorderMargin add dup moveto
+TextWidth 0 rlineto
+0 TextHeight rlineto
+TextWidth neg 0 rlineto
+closepath
+clip
+
+% Move origin to text box center, since x = 0 is a convenient
+% value for centering text.
+LandscapeMode
+ { Height 0.5 mul Width 0.5 mul translate }
+ { Width 0.5 mul Height 0.5 mul translate }
+ifelse
+% Set font size so that the longest line just fills the TextWidth.
+setfontsize
+% Center the text vertically, such that the middle line has its text
+% (rather than baseline distance) centered on a horizontal line
+% passing through the center of the picture.
+0 LineCount 0.5 mul BaselineSkip mul BaselineSkip sub moveto
+0 BaselineSkip CapHeight sub 0.5 mul rmoveto
+ForegroundColor setrgbcolor
+% Typeset the poster text.
+PosterLines { cshow } forall
+end % psposterdict
+showpage
+%%PageTrailer
+%=======================================================================
+%%Trailer
+%%EOF
diff --git a/macros/generic/epsf/tepsf1.tex b/macros/generic/epsf/tepsf1.tex
new file mode 100644
index 0000000000..d045f167cd
--- /dev/null
+++ b/macros/generic/epsf/tepsf1.tex
@@ -0,0 +1,146 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Preamble
+
+\input epsf.tex
+
+\def \bs {\char`\\}
+
+\def \heading #1{\centerline{\bf #1}}
+
+\def \myfont {%
+ \baselineskip = 9.6pt
+ \font \rm = cmr8 at 8pt
+ \rm
+}
+
+\def \noise
+{%
+ Blah blah blah blah blah blah. Blah blah blah blah blah blah. Blah
+ blah blah blah blah blah. Blah blah blah blah blah blah
+}
+
+\def \ARROWPICTURE {\llap{$\Rightarrow$}\PLAINPICTURE\rlap{$\Leftarrow$}}
+
+\def \PLAINPICTURE {\epsffile{tepsf.eps}}
+
+\parindent = 2em
+
+\parskip = 2ex plus 0.5ex minus 0.5ex
+
+%% Page size in mid-Atlantic units
+\voffset = -0.5in
+
+\vsize = 9.5in
+
+\hsize = 12.5cm
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Document body
+
+\myfont
+
+\heading{Test of {\tt epsf.tex}}
+
+\noise
+
+This figure should be centered:
+
+\centerline{\PLAINPICTURE}
+
+\noise
+
+This figure should be left-adjusted:
+
+\leftline{\PLAINPICTURE}
+
+\noise
+
+This figure should be right-adjusted:
+
+\rightline{\PLAINPICTURE}
+
+\noise
+
+This figure should be centered with abutting arrows on the baseline:
+
+\centerline{\ARROWPICTURE}
+
+\noise
+
+This figure should be left-adjusted with abutting arrows on the
+baseline, the leftmost of which is in the left margin on the baseline:
+
+\leftline{\ARROWPICTURE}
+
+\noise
+
+This figure should be right-adjusted with abutting arrows on the
+baseline, the rightmost of which is in the right margin on the
+baseline:
+
+\rightline{\ARROWPICTURE}
+
+\noise
+
+\vfill
+\eject
+
+%% ---------------------------------------------------------------------
+
+\heading{Test of {\tt epsf.tex}}
+\heading{with}
+\heading{{\tt \bs epsfframetrue} and {\tt \bs epsfshowfalse} and
+ {\tt \bs epsfshowfilenametrue}}
+
+\epsfframetrue
+\epsfshowfalse
+\epsfshowfilenametrue
+\epsfverbosetrue
+
+\noise
+
+This figure should be centered:
+
+\centerline{\PLAINPICTURE}
+
+\noise
+
+This figure should be left-adjusted:
+
+\leftline{\PLAINPICTURE}
+
+\noise
+
+This figure should be right-adjusted:
+
+\rightline{\PLAINPICTURE}
+
+\noise
+
+This figure should be centered with abutting arrows on the baseline:
+
+\centerline{\ARROWPICTURE}
+
+\noise
+
+This figure should be left-adjusted with abutting arrows on the
+baseline, the leftmost of which is in the left margin on the baseline:
+
+\leftline{\ARROWPICTURE}
+
+\noise
+
+This figure should be right-adjusted with abutting arrows on the
+baseline, the rightmost of which is in the right margin on the
+baseline:
+
+\rightline{\ARROWPICTURE}
+
+\noise
+
+\vfill
+\eject
+
+%% ---------------------------------------------------------------------
+
+\bye
diff --git a/macros/generic/epsf/tepsf2.ltx b/macros/generic/epsf/tepsf2.ltx
new file mode 100644
index 0000000000..7c8fd4c071
--- /dev/null
+++ b/macros/generic/epsf/tepsf2.ltx
@@ -0,0 +1,232 @@
+% -*-latex-*-
+% Document name: /u/sy/beebe/tex/epsf/new/tepsf2.ltx
+% Creator: Nelson H. F. Beebe [beebe@math.utah.edu]
+% Creation Date: Sat Jul 23 14:51:49 2005
+
+\ifx \documentclass \undefined % LaTeX 2.09
+ \documentstyle{article}
+ \input {epsf.sty}
+\else % LaTeX 2e
+ \documentclass{article}
+ \usepackage{epsf}
+\fi
+
+\newcommand{\bs}{\char`\\}
+
+\newcommand {\heading} [1] {\centerline{\bf #1}}
+
+\newcommand {\myfont}
+{
+ \baselineskip = 9.6pt
+ \font \rm = cmr8 at 8pt
+ \rm
+}
+
+\newcommand {\noise}
+{%
+ Blah blah blah blah blah blah. Blah blah blah blah blah blah. Blah
+ blah blah blah blah blah. Blah blah blah blah blah blah
+}
+
+\newcommand{\ARROWPICTURE}{%
+ \makebox[0pt][r]{$\Rightarrow$}%
+ \PLAINPICTURE
+ \makebox[0pt][l]{$\Leftarrow$}%
+}
+
+\newcommand{\PLAINPICTURE}{%
+ \epsffile{tepsf.eps}%
+}
+
+\setlength{\parindent} {2em}
+
+\setlength{\parskip} {2ex plus 0.5ex minus 0.5ex}
+
+\setlength{\topmargin} {0pt}
+
+\setlength{\headheight} {0pt}
+
+\setlength{\headsep} {0pt}
+
+\setlength{\leftmargin} {0pt}
+
+\setlength{\textheight} {9in}
+
+\setlength{\textwidth} {12.5cm}
+
+\begin{document}
+
+\myfont
+
+\heading{Test of {\tt \bs epsfbox} with {\tt \bs centerline}}
+
+\noise
+
+This figure should be centered:
+
+\centerline{\PLAINPICTURE{}}
+
+\noise
+
+This figure should be left-adjusted:
+
+\centerline{\PLAINPICTURE{}\hfill}
+
+\noise
+
+This figure should be right-adjusted:
+
+\centerline{\hfill \PLAINPICTURE{}}
+
+\noise
+
+This figure should be centered with abutting arrows on the baseline:
+
+\centerline{$\Rightarrow$\PLAINPICTURE{}$\Leftarrow$}
+
+\noise
+
+This figure should be left-adjusted with abutting arrows on the
+baseline, the leftmost of which is in the left margin on the baseline:
+
+\centerline{\hbox to 0pt{\hss$\Rightarrow$}\PLAINPICTURE{}$\Leftarrow$ \hfill}
+
+\noise
+
+This figure should be right-adjusted with abutting arrows on the
+baseline, the rightmost of which is in the right margin on the
+baseline:
+
+\centerline{\hfill $\Rightarrow$\PLAINPICTURE{}\hbox to 0pt{$\Leftarrow$ \hss}}
+
+\noise
+
+%% ---------------------------------------------------------------------
+
+\newpage
+
+\heading{Test of {\tt \bs epsfbox} with {\tt center} environment}
+
+\noise
+
+This figure should be centered:
+
+\begin{center}
+ \PLAINPICTURE{}
+\end{center}
+
+\noise
+
+This figure should be left-adjusted:
+
+\begin{flushleft}
+ \PLAINPICTURE{}
+\end{flushleft}
+
+\noise
+
+This figure should be right-adjusted:
+
+\begin{flushright}
+ \PLAINPICTURE{}
+\end{flushright}
+
+\noise
+
+This figure should be centered with abutting arrows on the baseline:
+
+\begin{center}
+ \ARROWPICTURE{}
+\end{center}
+
+\noise
+
+This figure should be left-adjusted with abutting arrows on the
+baseline, the leftmost of which is in the left margin on the
+baseline:%
+
+\begin{flushleft}
+ \ARROWPICTURE{}
+\end{flushleft}
+
+\noise
+
+This figure should be right-adjusted with abutting arrows on the
+baseline, the rightmost of which is in the right margin on the
+baseline:
+
+\begin{flushright}
+ \ARROWPICTURE{}
+\end{flushright}
+
+\noise
+
+%% ---------------------------------------------------------------------
+
+\newpage
+
+\heading{Test of {\tt \bs epsfbox} with {\tt center} environment}
+\heading{with}
+\heading{{\tt \bs epsfframetrue} and {\tt \bs epsfshowfalse} and
+ {\tt \bs epsfshowfilenametrue}}
+
+\epsfframetrue
+\epsfshowfalse
+\epsfshowfilenametrue
+\epsfverbosetrue
+
+\noise
+
+This figure should be centered:
+
+\begin{center}
+ \PLAINPICTURE{}
+\end{center}
+
+\noise
+
+This figure should be left-adjusted:
+
+\begin{flushleft}
+ \PLAINPICTURE{}
+\end{flushleft}
+
+\noise
+
+This figure should be right-adjusted:
+
+\begin{flushright}
+ \PLAINPICTURE{}
+\end{flushright}
+
+\noise
+
+This figure should be centered with abutting arrows on the baseline:
+
+\begin{center}
+ \ARROWPICTURE{}
+\end{center}
+
+\noise
+
+This figure should be left-adjusted with abutting arrows on the
+baseline, the leftmost of which is in the left margin on the
+baseline:%
+
+\begin{flushleft}
+ \ARROWPICTURE{}
+\end{flushleft}
+
+\noise
+
+This figure should be right-adjusted with abutting arrows on the
+baseline, the rightmost of which is in the right margin on the
+baseline:
+
+\begin{flushright}
+ \ARROWPICTURE{}
+\end{flushright}
+
+\noise
+
+\end{document}
diff --git a/macros/generic/epsf/tepsf3.tex b/macros/generic/epsf/tepsf3.tex
new file mode 100644
index 0000000000..24d2734b17
--- /dev/null
+++ b/macros/generic/epsf/tepsf3.tex
@@ -0,0 +1,108 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Preamble
+
+\input epsf.tex
+
+\def \bs {\char`\\}
+
+\def \heading #1{\centerline{\bf #1}}
+
+\def \myfont {%
+ \baselineskip = 9.6pt
+ \font \rm = cmr8 at 8pt
+ \rm
+}
+
+\def \noise
+{%
+ Blah blah blah blah blah blah. Blah blah blah blah blah blah. Blah
+ blah blah blah blah blah. Blah blah blah blah blah blah
+}
+
+\def \ARROWPICTURE {\llap{$\Rightarrow$}\PLAINPICTURE\rlap{$\Leftarrow$}}
+
+\def \PLAINPICTURE {\epsffile{tepsf.eps}}
+
+\parindent = 2em
+
+\parskip = 2ex plus 0.5ex minus 0.5ex
+
+%% Page size in mid-Atlantic units
+\voffset = -0.5in
+
+\vsize = 9.5in
+
+\hsize = 12.5cm
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Document body
+
+\myfont
+
+\heading{Test of {\tt epsf.tex}}
+
+\noise
+
+This figure should be centered:
+
+\centerline{XXX\vbox{\PLAINPICTURE}XXX}
+
+\noise
+
+This figure should be left-adjusted:
+
+\leftline{\vbox{\PLAINPICTURE}XXX}
+
+\noise
+
+This figure should be right-adjusted:
+
+\rightline{XXX\vbox{\PLAINPICTURE}}
+
+\noise
+
+This figure should be centered:
+
+\centerline{XXX\hbox{\PLAINPICTURE}XXX}
+
+\noise
+
+This figure should be left-adjusted:
+
+\leftline{\hbox{\PLAINPICTURE}XXX}
+
+\noise
+
+This figure should be right-adjusted:
+
+\rightline{XXX\hbox{\PLAINPICTURE}}
+
+\noise
+
+This figure should be centered with abutting arrows on the baseline:
+
+\centerline{\vbox{\ARROWPICTURE}}
+
+\noise
+
+This figure should be left-adjusted with abutting arrows on the
+baseline, the leftmost of which is in the left margin on the baseline:
+
+\leftline{\vbox{\ARROWPICTURE}}
+
+\noise
+
+This figure should be right-adjusted with abutting arrows on the
+baseline, the rightmost of which is in the right margin on the
+baseline:
+
+\rightline{\vbox{\ARROWPICTURE}}
+
+\noise
+
+\vfill
+\eject
+
+%% ---------------------------------------------------------------------
+
+\bye
diff --git a/macros/generic/expex/README b/macros/generic/expex/README
new file mode 100644
index 0000000000..802a49a645
--- /dev/null
+++ b/macros/generic/expex/README
@@ -0,0 +1,50 @@
+
+ExPex May 2017
+
+-------------------------------------------------------------
+ExPex is maintained by John Frampton <j.frampton@neu.edu>
+-------------------------------------------------------------
+
+ExPex is designed to assist linguists in typesetting examples and
+glosses and in creating named reference to examples and parts of
+examples.
+
+-------------------------------------------------------------
+
+COPYRIGHT 2006-2017 by John Frampton <j.frampton@neu.edu>
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License, which can be found in the CTAN
+archives in directory macros/latex/base/lppl.txt.
+
+-------------------------------------------------------------
+
+The files in this distribution (v 5.1b) are:
+
+ README
+ expex.tex Main macro file
+ expex.sty Latex wrapper for expex.tex
+ expex-doc.pdf User's Guide
+
+ eptexfn.tex Tex footnote macros
+ epltxfn.sty LaTex footnote package
+ epltxchapno.sty LaTex package for chapter.number example
+ numbering
+
+ expex-demo.tex The code for most of the examples
+ expex-doc.zip The source code for the User's Guide
+
+-------------------------------------------------------------
+
+expex-demo.tex
+
+This file contains most of the examples in the documentation. It is
+intended to facilitate user experimentation with ExPex typesetting.
+Users can easily modify examples and see what the effect is. It can be
+run under either Plain Tex or LaTex. Except for expex.tex and
+expex.sty, all files needed to run expex-demo should be part of any
+Tex installation.
+
+
+John Frampton 5/25/2017
+
diff --git a/macros/generic/expex/epltxchapno.sty b/macros/generic/expex/epltxchapno.sty
new file mode 100644
index 0000000000..e0c317dab2
--- /dev/null
+++ b/macros/generic/expex/epltxchapno.sty
@@ -0,0 +1,35 @@
+\ProvidesPackage{epltxchapno}%
+ [2014/01/27 v1.0 ExPex-LaTex chapter numbering integration (JF)]
+\RequirePackage{expex}
+
+% epltxchapno.sty is for use in conjunction with LaTex classes which use
+% \chapter (book.cls, scrbook.cls, report.cls, and memoir.cls at least).
+% \excnt is set to 1 at the beginning of each chapter and examples are
+% numbered (n.1), (n.2), etc. in chapter n. The \deftag/\getref
+% mechanism produces the desired reference.
+
+\@ifundefined{if@mainmatter}{\newif\if@mainmatter\@mainmattertrue}\relax
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \refstepcounter{chapter}%
+ \excnt=1
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}%
+ {\protect\numberline{\thechapter}#1}%
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\p@}}%
+ \addtocontents{lot}{\protect\addvspace{10\p@}}%
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else
+ \@makechapterhead{#2}%
+ \@afterheading
+ \fi}
+\lingset{exnotype=chapter.arabic}
+
diff --git a/macros/generic/expex/epltxfn.sty b/macros/generic/expex/epltxfn.sty
new file mode 100644
index 0000000000..d052f19807
--- /dev/null
+++ b/macros/generic/expex/epltxfn.sty
@@ -0,0 +1,18 @@
+\ProvidesPackage{epltxfn}%
+ [2011/12/05 v1.0 LaTex footnote macro for ExPex (JF)]
+\RequirePackage{expex}
+\makeatletter
+\def\everyfootnote{%
+ \keepexcntlocal
+ \excnt=1
+ \lingset{exskip=1ex,exnotype=roman,sampleexno=,
+ labeltype=alpha,labelanchor=numright,labeloffset=.6em,
+ textoffset=.6em}
+}
+\renewcommand{\@makefntext}[1]{%
+ \everyfootnote
+ \parindent=1em
+ \noindent
+ \@thefnmark.\enspace #1%
+}
+\resetatcatcode
diff --git a/macros/generic/expex/eptexfn.tex b/macros/generic/expex/eptexfn.tex
new file mode 100644
index 0000000000..2288a0aba8
--- /dev/null
+++ b/macros/generic/expex/eptexfn.tex
@@ -0,0 +1,27 @@
+\message{2011/12/05 v1.0 Tex footnote macro for ExPex (JF)}
+\makeatletter
+\def\everyfootnote{%
+ \keepexcntlocal
+ \excnt=1
+ \lingset{exskip=1ex,exnotype=roman,sampleexno=,
+ labeltype=alpha,labelanchor=numright,labeloffset=.6em,
+ textoffset=.6em}
+}
+\newcount\fnno \fnno=0
+\def\footnote{\let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \putfnno\@sf
+ \footnotebody}
+\def\putfnno{\global\advance\fnno by 1 $^{\the\fnno}$}
+\def\footnotebody{\expandafter\vfootnote\expandafter{\the\fnno}}
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \parindent=1em
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \ifx\footnotesize\undefined
+ \@expexerror{\footnotesize must be defined}\fi
+ \footnotesize
+ \everyfootnote \noindent #1.\enspace\footstrut\futurelet\next\fo@t}
+\resetatcatcode
diff --git a/macros/generic/expex/expex-demo.tex b/macros/generic/expex/expex-demo.tex
new file mode 100644
index 0000000000..b960840014
--- /dev/null
+++ b/macros/generic/expex/expex-demo.tex
@@ -0,0 +1,1037 @@
+
+% The preamble has the effect that the file can either be Texed or
+% LaTexed -- as is.
+
+\ifx\ProvidesFile\undefined
+ % if Tex
+ \input expex
+ \font\eightrm=cmr8
+ \font\eightit=cmti8
+ \font\tensc=cmcsc10
+ \let\sc=\tensc
+ \def\textsc#1{{\sc #1}}
+ \def\footnotesize{\eightrm \let\it=\eightit \baselineskip=9pt}
+ \def\enddemo #1#2{}
+ \magnification=\magstep1
+ \else
+ % if LaTex
+ \documentclass[12pt]{article}
+ \usepackage{expex}
+ \let\enddemo=\relax
+ \begin{document}
+ \fi
+%--------------------------------------------------------------------
+
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\vskip\lingaboveexskip
+Example (\nextx) is well-known from the literature on parasitic
+gaps. Here we are concerned with example formatting, not with the
+interesting syntax.
+
+\ex
+I wonder which article John filed {\sl t\/} without reading {\sl e}.
+\xe
+It is beyond the scope of this investigation to determine exactly why
+John did not read the article.
+
+Multipart examples are equally straightforward.
+
+\pex Two examples of parasitic gaps.
+\a He is the man that John did not interview {\sl e\/} before
+he gave the job to {\sl e}.
+\a He is someone who John expected {\sl e\/} to be successful
+though believing {\sl e\/} to be incompetent.
+\xe
+Here, we can speculate on why John did not do an interview before
+recommending the person for a job. It is likely that the person
+was a crony of John. In (\lastx b), perhaps John knew that
+the ``someone'' went to prep school with the owner of the
+business.
+\vskip\lingbelowexskip
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\bigskip
+If examples and parts of examples are tagged, they can be
+referred to by name.
+
+\pex<pg>
+\a This is the man that John interviewed {\sl e\/} before
+telling you that you should give the job to~{\sl e}.
+\a<A> This is someone who John expected {\sl e\/} to be successful
+though believing {\sl e\/} to be incompetent.
+\xe
+
+Now, names can be used. The name/reference pairs can be written
+to a file, making forward reference possible and backwards
+reference at a distance reliable. You can refer to part
+\getref{pg.A} of example (\getref{pg}), or (\getfullref{pg.A}).
+
+If you use a tag that has not been defined, {\sl ExPex\/} will
+let you know. If you try to reference a name which has no
+reference, \getref{pg.B} for example, a warning will be issued
+and the (bracketed) tag printed as shown at the beginning of this
+sentence. If you try to tag a part of an example which has no
+tag, {\sl ExPex\/} will let you know about that as well.
+\bigskip
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren
+w\"urde seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb Cl V Agr Neg Agr Tns Agr //
+\glc 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[interpartskip=3ex]
+\a
+\begingl
+\gla pwa- min -kwa -pun//
+\glb Neg V Agr Tns //
+\glc {} give 2pl{\sc nom}.3pl{\sc acc} preterit //
+\glft `you (pl) didn't give them (something)'//
+\endgl
+\a
+\begingl[everygl=\openup.5ex,everygla=,everyglb=,
+ everyglft=\it,aboveglftskip=1.5ex]
+\gla pwa- min -kwa -pun//
+\glb Neg V Agr Tns //
+\glc {} give 2pl{\sc nom}.3pl{\sc acc} preterit //
+\glft `you (pl) didn't give them (something)'//
+\endgl
+\a
+\begingl[everygl=,everygla=\bf,everyglb=\it,
+ everyglft=,aboveglftskip=0pt]
+\gla pwa- min -kwa -pun //
+\glb Neg V Agr Tns //
+\glc {} give 2pl{\sc nom}.3pl{\sc acc} preterit //
+\glft `you (pl) didn't give them (something)'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\exdisplay
+The following example is well-known from the literature on
+parasitic gaps. Here we are concerned with example formatting,
+not with the interesting syntax.
+\ex
+I wonder which article John filed {\sl t\/} without reading {\sl e}.
+\xe
+Various aspects of the format are controlled by parameters, which
+can be set either globally or via an optional argument.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\exdisplay
+The following example is well-known from the literature on
+parasitic gaps. Here we are concerned with example formatting,
+not with the interesting syntax.
+
+\ex[numoffset=2em,textoffset=.5em,aboveexskip=1ex,belowexskip=1ex]
+I wonder which article John filed {\sl t\/} without reading {\sl e}.
+\xe
+
+\noindent Various aspects of the format are controlled by
+parameters, which can be set either globally or via an optional
+argument.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+Und hier k\"onnen wir sehen was f\"ur Unfug wird gemacht
+wenn er einen ganz langen Satz binnen kriegt.\par\nobreak
+\xe
+
+\ex~
+$\alpha$ {\it governs\/} $\beta$ if $\alpha=X^0$ (in the
+sense of X-bar theory), $\alpha$ c-commands $\beta$, and $\beta$
+is not protected by a maximal projection.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex This is a crucial example.\xe
+It is clear that this example is related to the earlier
+example (5), which is repeated below.
+\ex[exno=5]
+This is an example that was given many pages earlier.\xe
+If we are on the right track, as the saying goes,
+we expect the next example to be grammatical. But it is not.
+\ex * \dots\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno=$\Delta$] Earlier example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno={[14, repeated]},exnoformat=X] Earlier example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a This is the first example.
+\a This is the second example.
+\xe
+
+\pex~<Pre> Multipart examples often have a title or preamble of some
+kind.
+\a This is the first example.
+\a This is the second example.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\keepexcntlocal \excnt=9
+\pex
+\a I consider firemen available. (generic only)
+\a I consider firemen intelligent. (generic only)
+\xe
+Exceptional case marking (ECM) verbs seem more or less to allow both
+existential and generic interpretations of complement subjects:
+\pex
+\a I believe firemen to be available. (both generic and existential)
+\a I believe violists to be intelligent. (generic only)
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\keepexcntlocal \excnt=9
+\pex[sampleexno=(10)]
+\a I consider firemen available. (generic only)
+\a I consider firemen intelligent. (generic only)
+\xe
+Exceptional case marking (ECM) verbs seem more or less to allow both
+existential and generic interpretations of complement subjects:
+\pex
+\a I believe firemen to be available. (both generic and existential)
+\a I believe violists to be intelligent. (generic only)
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\leftline{\vbox{%
+\ex[textoffset=3em]
+\hsize=3in \rightskip=0pt plus 2em \it \advance\baselineskip by 2pt
+Und hier k\"onnen wir sehen was f\"ur Unfug wird gemacht
+wenn er einen ganz langen Satz binnen kriegt.
+\xe
+}\hfil}
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex *Jack and Jill wented up the hill.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex \judge* Jack and Jill wented up the hill.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a There is a pair of pants on the floor.
+\a \judge{?*}There are a pair of pants on the floor.
+\a \judge*There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a There is a pair of pants on the floor.
+\a \ljudge{?*}There are a pair of pants on the floor.
+\a \ljudge*There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[*=?*]
+\a There is a pair of pants on the floor.
+\a \ljudge{?*}There are a pair of pants on the floor.
+\a \ljudge*There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[*]
+\a There is a pair of pants on the floor.
+\a \ljudge* There are a pair of pants on the floor.
+\a \ljudge* There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[*=?*,textoffset=!-.3em]
+\a There is a pair of pants on the floor.
+\a \ljudge{?*} There are a pair of pants on the floor.
+\a \ljudge* There is the pair of pants on the floor.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+ \ex<wapm>
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb CL V AGR NEG AGR TNS AGR //
+\glb 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<sicher>
+\begingl
+\glpreamble Mary ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr Herz auszusch\"utten.//
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to
+throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\hsize=4in
+\begingl
+\glpreamble Mary ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr Herz auszusch\"utten.//
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren w\"urde
+seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to
+throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glspace=!1em,everygla=,everyglb=\footnotesize,aboveglbskip=-.2ex]<wapm2>
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb CL V AGR NEG AGR TNS AGR //
+\glc 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<Marysicher>
+\begingl
+\gla Mary$_i$ ist sicher, + dass es den Hans nicht st\"oren w\"urde
++ seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it the-{\sc acc} Hans not annoy would
+his-{\sc dat} girlfriend-{\sc dat} her-{\sc acc} heart-{\sc acc} {out to
+throw}//
+\glft `Mary is sure that it would not annoy John to reveal her
+heart to his girlfriend.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<wiye>
+\begingl
+\gla wiye kepi e- @ ca//
+\glb two whitemen {\sc 1p:3d}- found//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[everygla=,glhangstyle=normal]<fanui>
+\begingl
+\gla Fa'nu'i yu' ni \nogloss{[[} @ {\it O} t{\it in\/}aitai-mu
+\nogloss{{\it t\/}]} na {lepblu].}//
+\glb show me Obl Op {\it WH\/}[obj].read-agr L book//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[everygla=,glhangstyle=normal]<umasudda>
+\begingl
+\gla Um-\"asudda' h\"am yan \nogloss{$[\,$} @ i taotao \nogloss{$[\,$} @
+{\it O\/} ni si Juan ilek-\~na nu guahu \nogloss{$[\,$} @ mal\"agu' gui
+\nogloss{$[\,$} @
+asudd\"a'-\~na \nogloss{{\it t\/}$\,]]]]$.}//
+\glb agr-meet we with the person Op Comp the Juan say-agr Obl me
+agr.want he {\it WH\/}[obl].meet-agr//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel]
+\begingl
+k-[CL/2] wapm[V/see] -a[AGR/\sc 3acc] -s'i[NEG]
+-m[AGR/\sc 2pl] -wapunin[TNS/preterit] -uk[AGR/\sc 3pl]
+\glft `you (pl) didn't see them'
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it,\sc,\sc},
+ glnabovelineskip={,-2pt}]
+\begingl
+k-[cl/2]
+wapm[v/\rm see]
+-a[agr/3acc]
+-s'i[neg]
+-m[agr/\sc 2pl]
+-wapunin[tns/preterit]
+-uk[agr/3pl]
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl[glstyle=nlevel,glneveryline={}]
+Fa'nu'i[show]
+yu'[me] ni[Obl]
+\nogloss{[[\thinspace}@ {\it O}[Op]
+t{\it in\/}aitai-mu[{\it WH\/}{[obj]}.read-agr]
+\nogloss{{\it t}\thinspace ]}
+na[L]
+lepblu[book]@ \nogloss{].}
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it}]
+\gdef\AccentedBarredW{$\acute{\hbox{$\overline w$}}$}%
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl \xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it},glnabovelineskip={,.5ex}]
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl \xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it,\vrule height14pt width0pt}]
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl \xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it},everyglword={\baselineskip=18pt}]
+\begingl m-[(mo-)] wope[(a\AccentedBarredW ope)] \endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\begingl
+\gla \rightcomment{[Potawatami]}k- wapm -a -s'i -m -wapunin -uk //
+\glb \rightcomment{category}Cl V Agr$_1$ Neg Agr$_2$ Tns Agr$_3$//
+\glb 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'\trailingcitation{(Hockett 1948,
+ p. 143)}//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex
+\a\relax [Which pilot who shot at it$_1$]$_2$ hit [which
+MIG$_2$ that had chased him$_2$]$_1$?\trailingcitation{(Barss, 2000)}
+
+\a\relax [Which pilot who shot at it$_1$]$_2$ hit [which MIG$_2$ that had
+chased him$_2$]$_1$?\trailingcitation{(Higgenbotham and May, 1981)}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\hsize=3.5in
+\ex
+\rightcomment{[Potawatami]}
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb \rightcomment{category}Cl V Agr$_1$ Neg Agr$_2$ Tns Agr$_3$//
+\glb 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'\trailingcitation{(Hockett 1948,
+ p. 143)}//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[extraglskip=2pt]
+\a \begingl
+\gla Um-\"asudda' h\"am yan \nogloss{$[\,$} @ i taotao \nogloss{$[\,$} @ {\it O\/}
+ni si Juan ilek-\~na nu guahu \nogloss{$[\,$} @ mal\"agu' gui
+\nogloss{$[\,$} @
+asudd\"a'-\~na \nogloss{{\it t\/}$\,]]]]$.}//
+\glb agr-meet we with the person Op Comp the Juan say-agr Obl me
+agr.want he {\it WH\/}[obl].meet-agr//
+\endgl
+\a \begingl[extraglskip=!.5ex]
+\gla Um-\"asudda' h\"am yan \nogloss{$[\,$} @ i taotao \nogloss{$[\,$} @ {\it O\/}
+ni si Juan ilek-\~na nu guahu \nogloss{$[\,$} @ mal\"agu' gui
+\nogloss{$[\,$} @
+asudd\"a'-\~na \nogloss{{\it t\/}$\,]]]]$.}//
+\glb agr-meet we with the person Op Comp the Juan say-agr Obl me
+agr.want he {\it WH\/}[obl].meet-agr//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\defineglwlevels{cat,gloss}
+\lingset{everyglcat=\footnotesize,aboveglcatskip=-.5ex}
+
+\ex
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glcat Cl V Agr Neg Agr Tns Agr //
+\glgloss 2 see {3\sc acc} {} {2\sc pl} preterit {3\sc pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glftpos=right,glhangstyle=none]
+\let\\=\textsc
+\begingl
+\gla
+Hom\^{a}o sa \v{c}\^{o} p\^{o} tha \~{n}u nao ng\u{a} hmua. \~{N}u
+dj\u{a} g\u{a}, \~{n}u dj\u{a} \v{c}\u{o}ng \~{n}u, laih gui r\^{e}o
+\~{n}u. Todang bboi r\^{o}k jolan \~{n}u nao hma, \~{n}u bb\^{o}h sa
+droi mr\u{a} d\u{o} bboi gah, a, hruh \~{n}u.//
+\glb
+\\{exist} one \\{clf} person old \\{3s} go do field \\{3s} hold
+machete \\{3s} hold hoe \\{3s} and carry.on.back back.basket \\{3s}
+while at along trail \\{3s} go field \\{3s} see one \\{clf} peacock
+stay at \\{drct} -- nest \\{3s}//
+\glft
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[everypanel=\footnotesize]<panelex>
+\let\\=\textsc
+\beginglpanel[ssratio=.5,glhangstyle=none]
+\gla Hom\^{a}o$^1$ sa \v{c}\^{o} p\^{o} tha \~{n}u nao ng\u{a}
+hmua. \~{N}u dj\u{a} g\u{a}, \~{n}u dj\u{a} \v{c}\u{o}ng \~{n}u,
+laih gui r\^{e}o \~{n}u. Todang bboi r\^{o}k jolan \~{n}u nao
+hma, \~{n}u bb\^{o}h sa droi mr\u{a} d\u{o}$\,^4$ bboi gah, a, hruh
+\~{n}u.//
+\glb \\{exist} one \\{clf} person old \\{3s} go$^2$ do field
+\\{3s} hold machete \\{3s} hold hoe \\{3s} and$^3$ carry.on.back
+back.basket \\{3s} while at along trail \\{3s} go field \\{3s}
+see one \\{clf} peacock stay at \\{drct} -- nest \\{3s}
+//
+\endgl
+1.\enspace {\it hom\^{a}o} also means `have', reflecting the
+strong tendency across languages to use the same word for
+possession and the existential. {\it hom\^{a}o} is clause-initial
+in existential clauses, but it comes after the subject in
+possession clauses.
+
+2.\enspace All verbs are glossed with a bare form, as Jarai has
+no inflectional morphology. Although Jarai has lexical items that
+encode tense, they are relatively infrequent in text.
+
+3.\enspace The word {\it laih} is literally `after; finish', but
+that is clearly not the meaning here. Probably {\it laih} here is
+an abbreviation for {\it laih an\u{u}n}, `after that; and', hence
+the gloss `and'.
+
+4.\enspace {\it d\u{o}} `sit, stay' is used like a copula in
+locative clauses, which is what I assume here (`a~peacock
+[which was] beside its nest'); however, this could just as well
+mean `a peacock sitting beside its nest', retaining the posture
+semantics.
+\endpanel
+\bigskip
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glhangstyle=cascade]
+\let\\=\textsc
+\begingl
+\gla
+Hom\^{a}o sa \v{c}\^{o} p\^{o} tha \~{n}u nao ng\u{a} hmua. \~{N}u
+dj\u{a} g\u{a}, \~{n}u dj\u{a} \v{c}\u{o}ng \~{n}u, laih gui r\^{e}o
+\~{n}u. Todang bboi r\^{o}k jolan \~{n}u nao hma, \~{n}u bb\^{o}h sa
+droi mr\u{a} d\u{o} bboi gah, a, hruh \~{n}u.//
+\glb
+\\{exist} one \\{clf} person old \\{3s} go do field \\{3s} hold
+machete \\{3s} hold hoe \\{3s} and carry.on.back back.basket \\{3s}
+while at along trail \\{3s} go field \\{3s} see one \\{clf} peacock
+stay at \\{drct} -- nest \\{3s}//
+\glft
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glufcloseup=.4ex,everygluf=\footnotesize]
+\begingl
+\gla Mary$_i$ ist sicher, dass es den Hans nicht st\"oren
+ w\"urde seiner Freundin ihr$_i$ Herz auszusch\"utten.//
+\glb Mary is sure that it \gluf/the/ACC/ Hans not annoy would
+ \gluf/his/DAT/ \gluf/girlfriend/DAT/ \gluf/her/ACC/
+ \gluf/heart/ACC/ {out to throw}//
+\glft `Mary is sure that to reveal her heart to his girlfriend
+would not damage John.'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glneveryline={\it,,\footnotesize},
+ glnabovelineskip={,,-.4ex},extraglskip=0pt]
+\begingl
+Mary$_i$[Mary]
+ist[is]
+sicher,[sure]
+dass[that]
+es[it]
+den[the/ACC]
+Hans[Hans]
+nicht[not]
+st\"oren[annoy]
+w\"urde[would]
+seiner[his/DAT]
+Freundin[girlfriend/DAT]
+ihr$_i$[her/ACC]
+Herz[heart/ACC]
+auszusch\"utten.[out to throw]
+\glft `Mary is sure that to reveal her heart to his girlfriend
+would not damage John.'
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glspace=1.5em,everygla=\hfil,glwordalign=center,
+ everyglc=\hfil,aboveglbskip=-.2ex]<wapm2>
+\begingl
+\gla k- wapm -a -s'i -m -wapunin -uk //
+\glb CL V AGR NEG AGR TNS AGR //
+\glc 2 see {\sc 3acc} {} {\sc 2pl} preterit {\sc 3pl} //
+\glft `you (pl) didn't see them'//
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[glstyle=nlevel,glhangstyle=cascade,
+ glneveryline={\insertno,\it,},
+ glwordalign=center,
+ glnabovelineskip={,-1pt},glspace=!.4em]
+\count255=1
+\def\insertno{\footnotesize(\the\count255)\global\advance\count255 by 1}%
+\begingl[]
+[Hom\^{a}o/\textsc{exist}]
+[sa/one]
+[\v{c}\^{o}/\textsc{clf}]
+[p\^{o}/person]
+[tha/old]
+[\~{n}u/\textsc{3s}]
+[nao/go]
+[ng\u{a}/do]
+[hmua./field]
+[\~{N}u/\textsc{3s}]
+[dj\u{a}/hold]
+[g\u{a},/machete]
+[\~{n}u/\textsc{3s}]
+[dj\u{a}/hold]
+[\v{c}\u{o}ng/hoe]
+[\~{n}u,/\textsc{3s}]
+[laih/and]
+[gui/carry.on.back]
+[r\^{e}o/back.basket]
+[\~{n}u./\textsc{3s}]
+[Todang/while]
+[bboi/at]
+[r\^{o}k/along]
+[jolan/trail]
+[\~{n}u/\textsc{3s}]
+[nao/go]
+[hma,/field]
+[\~{n}u/\textsc{3s}]
+[bb\^{o}h/see]
+[sa/one]
+[droi/\textsc{clf}]
+[mr\u{a}/peacock]
+[d\u{o}/stay]
+[bboi/at]
+[gah,/\textsc{drct}]
+[a,/--]
+[hruh/nest]
+[\~{n}u./\textsc{3s}]
+\glft
+`There was an old person who went to work in the field. He took
+along his machete, he took along his hoe, and he carried his
+basket on his back. While he was on his way to the farm, he saw a
+peacock beside its nest.'
+\endgl
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[interpartskip=0pt]
+\a First\deftag{the first part of example \lastx}{FP}
+\a Second\deftagex{snoopy}\deftaglabel{dog}
+\a Third\deftaglabel{a}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[everylabel=\it]
+\a First Example.
+\a Second Example.\deftag{\lastx\lastlabel}{snoopy}
+\a Third Example.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno=\getref{snoopy}] Second example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno={\getref{snoopy}, repeated},exnoformat={[X]}]
+Second example.\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[labeltype=numeric]<dog>
+\a First Example.
+\a<G> Second Example.
+\a Third Example.
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex[exno={\getfullref{dog.G}}] Second example\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex
+\vtop{\halign{#\hfil&& \qquad #\hfil\cr
+baudh& bu-baudh& know, wake\cr
+smai& si-smai& smile\cr
+suap& su-suap& sleep\cr
+miaks& mi-miaks& glitter\cr
+auc& u-auc& please\cr
+}}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex The perfect stems of some roots with a
+high vowel in their nucleus\par\nobreak\medskip
+\quad\vbox{\halign{%
+#\hfil&& \hskip3em #\hfil\cr
+\hfil\hwit{root}& \hfil\hwit{perfect stem}&
+ \hfil\hwit{gloss}\cr
+\noalign{\smallskip}
+baudh& bu-baudh& `know, wake'\cr
+smai& si-smai& `smile'\cr
+suap& su-suap& `sleep'\cr
+miaks& mi-miaks& `glitter'\cr
+auc& u-auc& `please'\cr
+}}\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex The perfect stems of some roots with a
+high vowel in their nucleus\par\nobreak\medskip
+\quad\vbox{\halign{%
+#\hfil& \quad #\hfil&& \hskip3em #\hfil\cr
+& \hfil\hwit{root}& \hfil\hwit{perfect stem}&
+ \hfil\hwit{gloss}\cr
+\noalign{\smallskip}
+a.& baudh& bu-baudh& `know, wake\cr
+b.& smai& si-smai& `smile'\cr
+c.& suap& su-suap& `sleep'\cr
+d.& miaks& mi-miaks& `glitter'\cr
+e.& auc& u-auc& `please'\cr
+}}\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\ex<Washo>
+\vtop{\labels\halign{\tl #\hfil&& \quad #\hfil\cr
+\nl & \hwit{Root}& \hwit{Plural}& \hwit{Gloss}\cr
+& baloxat& baloxaxat& bows\cr
+& moya& moyaya& shoulder\cr
+\deftaglabel{A}& nent'us& net'unt'us& old women\cr
+\deftaglabel{B}& mokgo& mogokgo& shoes\cr
+}}\xe
+Examples (\getfullref{Washo.A}) and (\getfullref{Washo.B}) are
+the most complex, and therefore the most revealing.
+Examples (\getref{Washo}\getref{Washo.A},\getref{Washo.B}) are
+the most complex, and therefore the most revealing.
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\hsize=4.3in
+\exdisplay[dima=.5em,dimb=.4em,textoffset=.5em]
+\def\\#1{$\acute{\hbox{\=#1}}$}%
+\tabskip=0pt
+\openup.4ex
+\halign to \hsize{\tspace[dima]#\tspace[textoffset]\hfil&
+ #\hfil\tabskip=0pt plus 1fil&
+ #\hfil& #\hfil& \tspace[dimb]#\hfil&
+ #\hfil & #\hfil\tabskip=0pt\cr
+\omit\exnoprint\hidewidth&
+ \multispan6 \hwit{Present Indicative}\crnb
+&\multispan3 \hwit{active}& \multispan3 \hwit{middle}\cr
+& \hwit{sg}& \hwit{du}& \hwit{pl}&
+ \hwit{sg}& \hwit{du}& \hwit{pl}\cr
+\it 1& {\bf dv\'e\.s}-mi& dvi\.s-v\'as& dvi\.s-m\'as&
+ dvi\.s-\'e& dvi\.s-v\'ahe& dvi\.s-m\'ahe\cr
+\it 2& {\bf dv\'ek}-\.si& dvi\.s-\.th\'as& dvi\.s-\.th\'a&
+ dvik\.s-\'e& dvi\.s-\\athe& dvi\.d-\.dhv\'e\cr
+\it 3& {\bf dv\'e\.s}-\.ti& dvi\.s-\.t\'as& dvi\.s-\'anti&
+ dvi\.s-\.t\'e& dvi\.s-\\ate& dvi\.s-\'ate\cr
+}
+\xe
+\endgroup
+\bigskip
+
+\filbreak\hrule\medskip
+
+\begingroup
+\pex[exbreakpenalty=-10,interpartskip=.25ex]
+\a example A
+\a contrast with example A\exbreak
+\a example B
+\a variation on B
+\a another variation on B
+\a a third variation on B\exbreak
+\a example C
+\a contrast with example C
+\xe
+\endgroup
+\enddemo\end{document}\bye
diff --git a/macros/generic/expex/expex-doc.pdf b/macros/generic/expex/expex-doc.pdf
new file mode 100644
index 0000000000..7fdd4d6c37
--- /dev/null
+++ b/macros/generic/expex/expex-doc.pdf
Binary files differ
diff --git a/macros/generic/expex/expex.sty b/macros/generic/expex/expex.sty
new file mode 100644
index 0000000000..4a9fd3c826
--- /dev/null
+++ b/macros/generic/expex/expex.sty
@@ -0,0 +1,5 @@
+\ProvidesPackage{expex}
+ [5/1/2017 v5.1b LaTex wrapper for expex.tex (JF)]
+\RequirePackage{xkeyval}
+\input expex
+\endinput
diff --git a/macros/generic/expex/expex.tex b/macros/generic/expex/expex.tex
new file mode 100644
index 0000000000..737aabad5b
--- /dev/null
+++ b/macros/generic/expex/expex.tex
@@ -0,0 +1,1618 @@
+\def\ExPexMessage
+ {5/25/2017 v5.1b ExPex linguistics example formatter (JF)}
+% -------------------------------------------------------
+% jf 2011/12/09 (v4.0a)
+% 1) fixed bug in how exceptional gla items are detected
+% 2) added everytrailingcitation parameter
+% 3) made \glft a long definition to allow \par
+% 4) fixed bug in \printrbrack and \printlbrack, now not math mode
+% jf 2011/12/09 (v4.0b)
+% 1) allow {} gla item
+% jf 2012/03/10 (v4.0c)
+% 1) fixed problem with IJAL \deftaglabel caused by nonexpansion
+% of \@actualexno
+% jf 2012/12/01 (v4.1)
+% 1) added auto glskip mode to glosses
+% /abovemoreglskip/ now obsolete
+% 2) fixed bug in \@setinckey so that value is expanded when set
+% jf 2013/01/13 (v4.1a)
+% 1) added \let\pageno=\c@page to LaTex specializations
+% jf 2013/06/27 (v4.1b)
+% 1) fixed bug in skip over \glft entries
+% jf 2013/07/27
+% 1) LaTex \include/\includeonly mechanism now works for \excnt
+% jf 2013/10/08
+% 1) revise the definition of \glw@printcol (now named
+% \glw@printglword) to use token lists rather than edefs, and to build
+% glwords as \vtop{\halign{#\hfil\cr...} structures
+% rather than stacked hboxes. This allows items like {\hfil
+% word}, which results in center alignment.
+% 2) removed w from the prefix in \glw@append, \glw@lop, and
+% \glw@lopff since these will be used in other gloss styles
+% jf 2013/10/10 fixed belowpreambleskip bug
+% jf 2014/01/27 (v5.0)
+% MAJOR REVISIONS: vertical spacing in glosses, introduction of
+% nlevel style glosses (see User's Manual, also revised at this time)
+% for more detail about the changes
+% jf 2014/03/08 (v5.0b)
+% 1. restored allowing {} empty items in wrap glosses
+% 2. introduced <glbreaking> parameter
+% jf 2014/03/14 (v5.0c)
+% 1. fixed reference for IJAL style
+% 2. fixed initialization for roman number parts in \pex
+% jf 2015/01/06 (v5.0d)
+% glftpos=right now works with the nlevel style
+% many internal names were changed to the general form
+% \gl@<style>@<ftpos>@<name> to make the code for switching style and
+% ftpos much more transparent
+% jf 2015/09/30 (v5.0e)
+% right panel in nlevel style
+% jf 4/11/2016 (v5.0f)
+% fixed \ep@setlist so that it does not make global asssigment
+% changed some names of the append commands to better match their effect
+% jf 3/9/2017 (v5.1)
+% fixed bug so that \glbreaking works if extraglskip has stretch and/or
+% shrink components
+% jf 5/1/2017 (v5.1a)
+% 1. made \sc equivalent to \scshape if the LaTex engine is used
+% 2. made \it equivalent to \itshape if the LaTex engine is used
+% 3. fixed bug in \getref in the IJAL style
+% Vanya Kapitinov (v5.1b)
+% define \rm and \tt in LaTex for modern LaTex compatibility
+% --------------------------------------------------------
+\edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}
+\catcode`\@=11\relax
+\ifx\XKeyValLoaded\endinput \else
+ \input xkeyval \fi
+\newif\ifeplatex
+\ifx\ProvidesFile\@undefined
+ \eplatexfalse
+ \message{\ExPexMessage}
+ \else
+ \ProvidesFile{expex.tex}[\ExPexMessage]
+ \eplatextrue
+ \@addtofilelist{expex.tex}
+ \let\it=\itshape
+ \let\sc=\scshape
+ \def\rm{\normalfont\rmfamily} % VK 5/13/2017
+ \def\tt{\normalfont\ttfamily} % VK 5/13/2017
+ \let\pageno=\c@page
+% 2013/07/27
+ \g@addto@macro\cl@@ckpt
+ {\immediate\write\@partaux{\string\excnt=\the\excnt}}
+ \fi
+%! define eplain primitives, if necessary
+\ifx\eplain\@undefined % eplain stuff
+ \def\@futurenonspacelet#1{\def\@cs{#1}%
+ \afterassignment\@stepone\let\@nexttoken= }%
+ \def\@stepone{\expandafter\futurelet\@cs\@steptwo}%
+ \def\@steptwo{\expandafter\ifx\@cs\@sptoken\let\@@next=\@stepthree
+ \else\let\@@next=\@nexttoken\fi \@@next}%
+ \def\@stepthree{\afterassignment\@stepone\let\@@next= }%
+ \def\@getoptionalarg#1{%
+ \let\@optionaltemp = #1%
+ \let\@optionalnext = \relax
+ \@futurenonspacelet\@optionalnext\@bracketcheck
+ }
+ \def\@bracketcheck{%
+ \ifx [\@optionalnext
+ \expandafter\@@getoptionalarg
+ \else
+ \let\@optionalarg = \empty
+ \expandafter\@optionaltemp
+ \fi }
+ \def\@@getoptionalarg[#1]{%
+ \def\@optionalarg{#1}%
+ \@optionaltemp}
+\fi
+%----- end of eplain inclusions
+\def\ep@identity#1{#1}
+\def\ep@expandonce{\expandafter\noexpand}
+\def\ep@expandtwice{\expandafter\expandafter\expandafter\noexpand}
+\def\ep@expandafterafter#1{\expandafter#1\expandafter}
+\def\ep@gobble#1{}
+\def\@getoptionaltag#1{%
+ \let\@@optionaltemp = #1%
+ \let\@optionaltag\empty
+ \@ifnextcharacter<\@@gettag\@@optionaltemp
+}
+\def\@@gettag<#1>{\def\@optionaltag{#1}\@@optionaltemp}
+
+\newif\if@tilde
+\def\@tildecheck#1{%
+ \@ifnextcharacter~%
+ {\@tildetrue\expandafter#1\ep@gobble}%
+ {\@tildefalse#1}%
+}
+%------- XKV parametrization ------
+\def\define@lingkey{\define@key{ling}}
+\def\define@ling@cmdkeys{\define@cmdkeys{ling}[ling@]}
+\def\define@lingcmdkeys{\define@cmdkeys{ling}[ling]}
+%
+\def\define@linginckey#1#2{%
+ \define@key{ling}{#2}{%
+ \ep@expandafterafter\@setinckey
+ #1\csname ling#2\endcsname ##1\@nil\relax}% test \relax %%%%%%%%%%%%%%%%%%%%%%%
+}
+\let\XKVforn=\XKV@for@n % added 2016/04/23 for easy use
+\def\define@lingincdimenkeys#1{\XKVforn{#1}\@key{%
+ \expandafter\define@linginckey\expandafter\dimen\expandafter{\@key}}}
+\def\define@lingincskipkeys#1{\XKVforn{#1}\@key{%
+ \expandafter\define@linginckey\expandafter\skip\expandafter{\@key}}}
+\def\@setinckey#1#2#3#4\@nil{%
+ \ifx#3!%
+ #1 0=#2%
+ \advance#1 0 by #4%
+ \else
+ #1 0=#3#4%
+ \fi
+ \edef#2{\the #10}%
+}
+%
+\def\lingset#1{\setkeys{ling}{#1}\ignorespaces}
+% \Lingset first sets ling keys, if there are non-ling keys
+% remaining, these are then passed to \psset
+\def\Lingset#1{\setkeys*{ling}{#1}%
+ \ifx\XKV@rm\@empty \else
+ \ep@expandafterafter\psset{\XKV@rm}\fi
+}
+\def\Ling@usearg{%
+ \ifx\@optionalarg\empty
+ \else \ep@expandafterafter\Lingset{\@optionalarg}\fi
+}
+\def\ling@usearg{\ep@expandafterafter\lingset{\@optionalarg}}
+% styles
+\def\e@let#1#2{%
+ \ep@expandafterafter\let#1\csname #2\endcsname\ignorespaces
+}
+\define@lingkey{lingstyle}{%
+ \e@let\temp{ling@#1style}
+ \ep@expandafterafter\Lingset{\temp}}
+\def\definelingstyle#1#2{%
+ \expandafter\def\csname ling@#1style\endcsname{#2}}
+% if PST available, allow \psset to set ling parameters,
+% otherwise cancel \Lingset's ability to set PST parameters
+\ifx\PSTricksLoaded\endinput
+ \pst@addfams{ling}
+ \else
+ \let\Lingset=\lingset
+ \fi
+%------ scratch dimensions and counts -----
+\newdimen\ep@dima
+\newdimen\ep@dimb
+\newdimen\ep@dimc
+\newcount\ep@cnta
+\newcount\epc@b
+%------ \ex -----
+\newcount\excnt
+\excnt=1
+\newbox\numbox
+\newdimen\epd@numright
+\newif\if@specialexno
+\define@lingincskipkeys{aboveexskip,belowexskip}
+\define@lingincdimenkeys{numoffset,textoffset}
+\define@lingcmdkeys{Everyex,everyex,exbreakfil,exbreakpenalty,splitpartspenalty}
+\define@lingkey{exskip}%
+ {\edef\lingaboveexskip{#1}\edef\lingbelowexskip{#1}}
+\def\ep@settosum#1#2#3{#1=#2\relax \advance#1 by#3}
+\define@choicekey{ling}{textanchor}%
+ [\scratch\ep@textanchor]{numleft,normal}{}
+\def\ex{\bgroup \@tildecheck\ex@a}
+\def\ex@a{\def\@optionaltag{}\def\@specialexno{}%
+ \@getoptionalarg\ex@b}
+\def\ex@b{\@getoptionaltag\ex@c}
+\def\ex@c{%
+ \ex@setup
+ \leavevmode
+ \setbox\numbox=\hbox{\hskip\lingnumoffset\ep@actualexnoprint}%
+ \epd@numright=\wd\numbox
+ \ifcase\ep@textanchor % numleft
+ \ep@settosum\leftskip\lingnumoffset\lingtextoffset
+ \or % normal
+ \ep@settosum\leftskip\epd@numright\lingtextoffset
+ \fi
+ \llap{\hbox to\leftskip{\unhbox\numbox \hss}}%
+ \lingeveryex
+ \latex@tagex
+ \ignorespaces
+}
+\def\actualexno
+ {\if@specialexno {\ep@specialexno}\else \the\excnt \fi}
+\def\ep@actualexnoprint{{%
+ \if@specialexno
+ \ep@specialexnoprint
+ \else \ifx\ling@sampleexno\empty
+ \exnoprint
+ \else
+ \hbox to \epd@sampleexnowidth{\exnoprint\hss}%
+ \fi\fi
+}}
+\define@choicekey{ling}{exnotype}[\ling@exnotype\@N]%
+ {arabic,chapter.arabic,roman}{%
+ \ifcase\@N
+ \def\ep@rawexnoprint{\number\excnt}%
+ \or
+ \def\ep@rawexnoprint{\thechapter.\number\excnt}%
+ \or
+ \def\ep@rawexnoprint{\romannumeral\the\excnt}%
+ \fi
+}
+\lingset{exnotype=arabic}
+\def\exnoprint{\ep@exnoformat{\ep@rawexnoprint}}
+\def\ep@specialexnoprint{\ep@exnoformat{\ep@specialexno}} % unformatted
+\def\ep@globalstepexcnt{\global\advance\excnt by 1 }
+\def\ep@localstepexcnt{\advance\excnt by 1 }
+\let\stepexcnt=\ep@globalstepexcnt
+\def\keepexcntlocal{\let\stepexcnt=\ep@localstepexcnt}
+\def\ex@setup{% also used by \pex
+%% TENTATIVE, insert \par
+% \par
+ \global\@specialexnofalse
+ \latex@tagex
+ \lingEveryex
+ \let\reset@refproofing\@printref
+ \let\@printref\ep@identity % turn off refproofing
+ \Ling@usearg
+ \let\@printref\reset@refproofing
+ \if@specialexno
+ \def\@actualexno{\ep@specialexno}%
+ \else
+ \edef\@actualexno{\ep@rawexnoprint}%
+ \fi
+ \ifx\@optionaltag\empty
+ \let\@localextag=\empty
+ \else
+ \edef\@localextag{\@optionaltag}%
+ \deftag{\@actualexno}{\@optionaltag}
+ \fi
+ \exbreak
+ \if@tilde \else \vskip\lingaboveexskip\fi
+ \parindent=0pt
+}
+\def\noexno{\global\advance\excnt by -1}
+\def\exbreak{\endgraf\bgroup\@getoptionalarg\exbreak@a}
+\def\exbreak@a{%
+ \ifx\@optionalarg\empty
+ \skip255=\lingexbreakfil
+ \else
+ \skip255= 0pt plus\@optionalarg
+ \fi
+ \vskip\skip255
+ \penalty\lingexbreakpenalty
+ \vskip-\skip255
+ \egroup
+}
+\def\xe{%
+ \expandafter\vskip\lingbelowexskip
+ \egroup
+ \if@specialexno \else \stepexcnt \fi
+ \allowbreak
+ \prevdepth\dp\strutbox
+ \noindent
+}
+\def\exdisplay{\bgroup\@tildecheck\exdisplay@a}
+\def\exdisplay@a{\@getoptionalarg\exdisplay@b}
+\def\exdisplay@b{\let\@optionaltag=\empty \ex@setup}
+%------ \pex -----
+\newcount\pexcnt
+\newdimen\epd@labelleft
+\newdimen\epd@labelright
+\newdimen\epd@textleft
+\newdimen\epd@preambleleft
+\newif\if@firstlabel
+\define@lingincdimenkeys{preambleoffset,labelwidth,labeloffset}
+\define@lingincskipkeys{belowpreambleskip,interpartskip}
+\define@choicekey{ling}{preambleanchor}
+ [\scratch\ep@preambleanchor]{numright,labelleft,text}{}
+\define@boolkey{ling}[ling@]{avoidnumlabelclash}[true]{}
+\define@ling@cmdkeys{appendtopexarg}
+\newdimen\epd@sampleexnowidth
+\define@lingkey{sampleexno}{%
+ \setbox0=\hbox{#1}%
+ \epd@sampleexnowidth=\wd0
+ \def\ling@sampleexno{#1}%
+}
+\lingset{sampleexno=}
+%\define@lingcmdkeys{splitexpenalty}
+%\define@lingcmdkeys{belowpreambleskip,interpartskip,splitexpenalty}
+\define@choicekey{ling}{labelalign}[\ling@labelalign\nr]%
+ {left,center,right}{%
+ \ifcase\nr
+ \def\ep@labelprint{\ep@labelformat\ep@label\hss}%
+ \or
+ \def\ep@labelprint{\hss \ep@labelformat\ep@label\hss}%
+ \or
+ \def\ep@labelprint{\hss \ep@labelformat\ep@label}%
+ \fi
+}
+\define@key{ling}{samplelabel}{%
+ \setbox0=\hbox{#1}%
+ \lingset{labelwidth=\wd0}%
+}
+\define@boolkey{ling}[ling@]{nopreamble}[true]{}
+\def\pex{\bgroup\@tildecheck\pex@a}
+%\def\pexns{\bgroup \@tildetrue\pex@a}
+\def\pex@a{\def\@optionaltag{}\def\@specialexno{}%
+ \@getoptionalarg\pex@b}
+\def\pex@b{%
+ \ifx\ling@appendtopexarg\empty \else
+ \XKV@addtolist@o\@optionalarg{\ling@appendtopexarg}\fi
+ \@getoptionaltag\pex@c}
+\def\pex@c{\ling@nopreambletrue
+ \@futurenonspacelet\temp\pex@d}
+\def\pex@d{%
+ \ifx\temp\a \let\nextpex@\pex@e
+ \else \ifx\temp\label \let\nextpex@\pex@f
+ \else \ling@nopreamblefalse \let\nextpex@\pex@e
+ \fi\fi
+ \ex@setup
+ \nextpex@
+}
+\def\pex@f#1#2{\label{#2}\@futurenonspacelet\temp\pex@g}
+\def\pex@g{\ifx\temp\a \let\next\pex@h
+ \else \let\next\pex@e \ling@nopreamblefalse \fi \next}
+\def\pex@h#1\a{\pex@e\a}
+\def\pex@e{\pex@i \lingeveryex }
+\def\pex@i{%
+ \setbox\numbox=\hbox{\hskip\lingnumoffset\ep@actualexnoprint}%
+ \ep@setdimensions
+ \ep@pexcntinit
+ \@firstlabeltrue
+ \let\a\ep@putlabel
+ \ifling@nopreamble
+ \leftskip=\epd@textleft
+ \else
+ \ep@setdimpreambleleft
+ \leftskip=\epd@preambleleft
+ \fi
+ \def\next{\llap{\hbox to\leftskip{\unhbox\numbox \hss}}}%
+ \ifling@nopreamble
+ \ifling@avoidnumlabelclash \let\next\relax \fi\fi
+ \leavevmode
+ \next
+}
+\def\ep@setdimensions{% \epd@numright=\wd\numbox \epd@labelleft=\linglabeloffset
+ \epd@numright=\wd\numbox
+ \epd@labelleft=\linglabeloffset
+ \advance\epd@labelleft by
+ \ifcase\ep@labelanchor
+ \epd@numright
+ \or
+ \lingnumoffset
+ \or
+ 0pt
+ \fi
+ \ep@settosum\epd@labelright\epd@labelleft\linglabelwidth
+ \ifcase\ep@textanchor % numleft
+ \ep@settosum\epd@textleft\lingnumoffset\lingtextoffset
+ \or % normal
+ \ep@settosum\epd@textleft\epd@labelright\lingtextoffset
+ \fi
+}
+\def\ep@setdimensions{%
+ \epd@numright=\wd\numbox
+ \epd@labelleft=\linglabeloffset
+ \advance\epd@labelleft by
+ \ifcase\ep@labelanchor
+ \epd@numright
+ \or
+ \lingnumoffset
+ \or
+ 0pt
+ \fi
+ \ep@settosum\epd@labelright\epd@labelleft\linglabelwidth
+ \ifcase\ep@textanchor % numleft
+ \ep@settosum\epd@textleft\lingnumoffset\lingtextoffset
+ \or % normal
+ \ep@settosum\epd@textleft\epd@labelright\lingtextoffset
+ \fi
+}
+%\def\lingnumrightoffset{\the\epd@numright}%
+\def\ep@setdimpreambleleft{%
+ \epd@preambleleft=\lingpreambleoffset
+ \advance\epd@preambleleft by \ifcase\ep@preambleanchor
+ \epd@numright\or \epd@labelleft\or \epd@textleft \fi
+}
+\def\ep@pexcntinit{\ifnum\ep@labelgen=2\else
+ \pexcnt=\ling@pexcnt \fi}
+\define@key[epx@]{labels}{tag}{\def\@optionaltag{#1}}
+\define@key[epx@]{labels}{label}{\def\@specialexno{#1}}
+\def\ep@setlabelkeys{\setkeys[epx@]{labels}}
+\def\ep@useoptionallabelarg{%
+ \expandafter\ep@setlabelkeys\expandafter{\@optionalarg}}
+\define@lingkey{tag}{\def\@optionaltag{#1}}
+\newtoks\ep@everylabel % \ep@everylabel is a token list
+\define@lingkey{everylabel}{\ep@everylabel{#1}}
+%
+\def\ep@putlabel{%
+ \if@firstlabel
+ \ifling@nopreamble \else
+ \vskip\lingbelowpreambleskip
+ \leftskip=\epd@textleft
+ \fi
+ \@firstlabelfalse
+ \else
+ \par\penalty\lingsplitpartspenalty
+ \vskip\linginterpartskip
+ \fi
+ \def\@specialexno{}\def\@optionaltag{}%
+ \@getoptionalarg\ep@putlabel@a
+}
+% 03/14/2014 changed defs to edefs below
+\def\ep@putlabel@a{%
+ \ep@useoptionallabelarg
+ \ifx\@specialexno\empty
+ \ifcase\ep@labelgen
+ \edef\ep@label{\the\ep@everylabel \char\the\pexcnt}%
+% \edef\ep@label{\the\ep@everylabel \char\noexpand\the\pexcnt}%
+ \advance\pexcnt by 1
+ \or
+ \edef\ep@label{\the\ep@everylabel \number\pexcnt}%
+% \edef\ep@label{\the\ep@everylabel \number\noexpand\pexcnt}%
+ \advance\pexcnt by 1
+ \or
+ \ep@popLL
+ \or
+ \edef\ep@label{\the\ep@everylabel \romannumeral\noexpand\pexcnt}%
+ \advance\pexcnt by 1
+ \fi
+ \else
+ \def\ep@label{\the\ep@everylabel\@specialexno}%
+ \fi
+ \xdef\resumepexcnt{\noexpand\pexcnt\the\pexcnt}%
+ \@getoptionaltag
+ \ep@putlabel@b
+}
+\def\ep@putlabel@b{%
+ \ifx\@optionaltag\empty \else
+ \deftaglabel{\@optionaltag}%
+ \fi
+ \leavevmode
+ \llap{\hbox to\leftskip{\hskip\epd@labelleft
+ \hbox to\linglabelwidth{\ep@labelprint}%
+ \hfil}}%
+ \latex@tagexlabel
+ \ignorespaces
+}
+%
+\define@choicekey{ling}{labelanchor}[\scratch\ep@labelanchor]%
+ {numright,numleft,margin}[]{}
+\define@lingkey{pexcnt}{\edef\ling@pexcnt{#1}}
+% IJAL style
+\definelingstyle{IJAL}{labelwidth=2em,labelanchor=numleft,
+ labeloffset=0pt,labelformat=(A),everylabel=\actualexno,
+ textanchor=normal,textoffset=1em,preambleanchor=text,
+ preambleoffset=0pt,avoidnumlabelclash,
+ appendtopexarg={samplelabel=(\actualexno a)}}
+%-----------------------------------------
+%----- judgments -----
+\def\judge#1{\rm #1\kern .1em \ignorespaces}
+\def\ljudge#1{\llap{\judge{#1}}\ignorespaces}
+\define@key{ling}{*}[*]%
+ {\setbox0=\hbox{#1}%
+ \lingset{textoffset=!\wd0}%
+}
+%------ table support -----
+\define@lingcmdkeys{dima,dimb,dimc}
+\lingset{dima=2.4em}
+\def\tspace{\@getoptionalarg\ep@tabelspace}
+\def\ep@tabelspace{\hskip
+ \ifx\@optionalarg\empty
+ \lingdima
+ \else
+ \csname ling\@optionalarg\endcsname
+ \fi
+}
+\def\labels{\@getoptionalarg\ep@labels}
+\def\ep@labels{%
+ \ifcase\ep@labelgen
+ \def\ep@label{\the\ep@everylabel \char\the\pexcnt}%
+ \or
+ \def\ep@label{\the\ep@everylabel \number\pexcnt}%
+ \or
+ \or
+ \def\ep@label{\the\ep@everylabel \romannumeral\pexcnt}%
+ \fi
+ \ling@usearg
+ \dimen0=\lingtextoffset
+ \advance\dimen0 by \linglabelwidth
+ \edef\ling@labelskip{\the\dimen0}%
+ \ep@pexcntinit
+ \let\tl\ep@inserttabellabel
+ \let\nl\ep@omitlabel
+ \ignorespaces
+}
+\def\ep@inserttabellabel{\@getoptionaltag\ep@inserttablelabel@a}
+\def\ep@inserttablelabel@a{%
+% \global\advance\pexcnt by 1
+ \ifx\@optionaltag\empty \else
+ \deftaglabel{\@optionaltag}%
+ \fi
+ \edef\foop{\ep@label.}\foop
+ \global\advance\pexcnt by 1
+}
+\def\ep@omitlabel{\omit\hskip\linglabeloffset\hfil}
+%\def\endpextable{\egroup\egroup \par \prevdepth=\dp\strutbox}
+\def\hwit#1{\hidewidth \it #1\hidewidth}
+\define@lingcmdkeys{crskip}
+\lingset{crskip=.6em}
+\def\crs{\cr\noalign{\vskip\lingcrskip}}
+\def\crnb{\cr\noalign{\par\nobreak}}
+% LL is "label list"
+\define@lingkey{labellist}{%
+ \edef\ling@LL{#1,}%
+ \edef\@currLL{#1,}% current LL
+}
+\def\ep@popLL{%
+ \ifx\@currLL\empty
+ \@expexwarn{Not enough labels in labellist}%
+ \let\@currLL=\ling@LL % start over
+ \ep@popLL
+ \else
+ \expandafter\ep@popLL@a\@currLL\@nil
+ \fi
+}
+\def\ep@popLL@a#1,#2\@nil{%
+ \def\ep@label{\the\ep@everylabel #1}\def\@currLL{#2}}
+\define@choicekey{ling}{labelgen}[\ling@labelgen\ep@labelgen]%
+ {char,number,list,romannumber}{}
+\def\definelabeltype#1#2{%
+ \expandafter\def\csname ling@#1labeltype\endcsname{#2}}
+\define@lingkey{labeltype}{%
+ \e@let\temp{ling@#1labeltype}%
+ \ep@expandafterafter\Lingset{\temp}}
+\define@lingkey{labelformat}{\ep@omitlabelformat #1\@nil}
+\def\ep@omitlabelformat #1A#2\@nil{%
+ \def\ep@labelformat##1{#1{##1}#2}}
+\define@lingkey{exnoformat}{\ep@mkexnoformater #1\@nil}
+\def\ep@mkexnoformater #1X#2\@nil{%
+ \def\ep@exnoformat##1{#1{##1}#2}}
+\lingset{exnoformat=(X)}
+\define@lingkey{fullrefformat}{\@fullrefformat #1\@nil}
+\def\@fullrefformat #1X#2A#3\@nil{%
+ \def\ep@fullrefformat##1##2{#1##1#2##2#3}}
+%------ support for LaTex \label macro -----
+\let\latex@tagex\relax
+\let\latex@tagexlabel\relax
+\ifx\label\relax \else % else = LaTex is loaded
+ \def\latex@tagexlabel{\def\@currentlabel
+ {\ep@fullrefformat{{\the\excnt}}{\ep@label}}}%
+ \def\latex@tagex{\edef\@currentlabel{\the\excnt}}%
+ \fi
+%-----------------------------------------
+\definelabeltype{alpha}{labelgen=char,pexcnt=`a,labelformat=A.,
+ fullrefformat=XA,labelalign=left,labelwidth=.72em}
+\definelabeltype{caps}{labelgen=char,pexcnt=`A,labelformat=A.,
+ fullrefformat=XA,labelalign=left,labelwidth=.92em}
+\definelabeltype{numeric}{labelgen=number,pexcnt=1,labelformat=A.,
+ fullrefformat=X.A,labelalign=right,labelwidth=.75em}
+% 03/14/14 bug fix (wrong start to roman series labels)
+\definelabeltype{roman}{labelgen=romannumber,pexcnt=2,labelformat=(A),
+%\definelabeltype{roman}{labelgen=romannumber,pexcnt=1,labelformat=(A),
+ fullrefformat=XA,labelalign=left,labelwidth=1.5em}
+%-- tags and reference -----
+%----- local reference to example numbers -----
+%\def\nextx{{\@printref{\number\excnt}}}
+%\def\anextx{{\@printref{\advance\excnt by 1 \number\excnt}}}
+%\def\lastx{{\@printref{\advance\excnt by -1 \number\excnt}}}
+%\def\blastx{{\@printref{\advance\excnt by -2 \number\excnt}}}
+%\def\bblastx{{\@printref{\advance\excnt by -3 \number\excnt}}}
+\def\nextx{{\@printref{\ep@rawexnoprint}}}
+\def\anextx{{\@printref{\advance\excnt by 1 \ep@rawexnoprint}}}
+\def\lastx{{\@printref{\advance\excnt by -1 \ep@rawexnoprint}}}
+\def\blastx{{\@printref{\advance\excnt by -2 \ep@rawexnoprint}}}
+\def\bblastx{{\@printref{\advance\excnt by -3 \ep@rawexnoprint}}}
+%------ defining tags -----
+\def\deftag#1#2{%
+ {\let\@printref=\ep@identity
+ \expandafter\xdef\csname lingtag@#2\endcsname{#1}%
+ \if@g@thertags
+ \immediate\write@tags{\noexpand\@fd@f {#2} {{#1}} }%
+ \fi}%
+ \ignorespaces
+}
+\def\deftaglabel#1{%
+ \expandafter\xdef\csname lingtag@\@localextag.#1\endcsname%
+ {{{\ep@label}}%
+ {{\ep@fullrefformat{\@actualexno}\ep@label}}%
+ }%
+ \if@g@thertags
+ \immediate\write@tags{%
+ \noexpand\@fd@f
+ {\@localextag.#1}
+ {{{\ep@label}}%
+ {{\ep@fullrefformat{\@actualexno}\ep@label}}}%
+ }%
+ \fi
+ \ignorespaces
+}
+\def\deftagex#1{\edef\@localextag{#1}%
+ \expandafter\xdef\csname lingtag@#1\endcsname{{\ep@rawexnoprint}}%
+ \if@g@thertags
+ \immediate\write@tags{\noexpand\@fd@f {#1} {{\ep@rawexnoprint}}}%
+ \fi
+ \ignorespaces
+}
+\def\deftagpage#1{%
+ \if@g@thertags
+ \write@tags{\noexpand\@fd@f #1 {{\the\pageno}}}%
+ \fi
+ \ignorespaces
+}
+\def\lastlabel{{\ep@label}}
+\def\@expexwarn#1{\immediate\write16{====> EXPEX WARNING: #1.}}
+\def\@expexerror#1{\immediate\write16{====> Fatal EXPEX ERROR: #1.}}
+\newif\ifep@highlightref
+\ep@highlightreffalse
+\def\refproofing{\ep@highlightreftrue}
+\def\mathhigh@lightref#1{$\overline{\underline{\hbox{#1}}}$}
+\def\psthigh@lightref{\psframebox[boxsep=false,framesep=2pt,linewidth=.2ex]}
+\ifx\PSTricksLoaded\endinput
+ \let\@highlightprint\psthigh@lightref
+ \else
+ \let\@highlightprint\mathhigh@lightref
+ \fi
+\def\@printref#1{%
+ \ifep@highlightref \@highlightprint{#1}\else #1\fi}
+%%%%
+\newbox\exnobox
+\define@key{ling}{exno}{%
+ \global\@specialexnotrue
+ \let\latex@tagexlabel\ep@gobble
+ \let\latex@tagex\ep@gobble
+ \setbox\exnobox=\hbox{#1}%
+ \def\ep@specialexno{\unhcopy\exnobox}%
+}
+%------ opening the tag file -----
+\newif\if@g@thertags
+\@g@thertagsfalse
+\newwrite\ling@tagsfile
+\def\write@tags{\write\ling@tagsfile}
+\def\gathertags{%
+ \@setupreadtags
+ \@g@thertagstrue
+ \immediate\openout\ling@tagsfile=\jobname-tags\relax
+ \immediate\write@tags{\noexpand\relax}%
+}
+%------ reading the tag file and defining the tags it encodes -----
+\newif\if@epx@goodtagsfile
+\newread\ling@tagsin
+\gdef\@fd@f#1 #2 {%
+ \expandafter\ifx\csname lingtag@#1\endcsname\relax
+ \expandafter\gdef\csname lingtag@#1\endcsname{#2}%
+ \fi
+}
+\newif\if@readtags
+\@readtagstrue
+\def\@setupreadtags{\if@readtags
+ \do@readtags \global\@readtagsfalse \fi}
+\def\do@readtags{%
+ \immediate\openin\ling@tagsin=\jobname-tags\relax
+ \ifeof\ling@tagsin \else
+ \closein\ling@tagsin
+ {\catcode`@=11 \input \jobname-tags\relax}%
+ \fi
+}
+%!
+%!------ tagging sections, adapt to your needs -----
+%! If \tagsec is used with section macros that do not define
+%! counters \secno,\subsecno,\subsubsecno, and \subsubsubsecno,
+%! then \currsec must be redefined to whatever is appropriate.
+%!\def\chapscurrsec{\ifnum\chapno>0 \the\chapno
+%! \ifnum\secno>0 .\the\secno
+%! \ifnum\subsecno>0 .\the\subsecno
+%! \ifnum\subsubsecno>0 .\the\subsubsecno \fi\fi\fi\fi}
+%!\def\nochapscurrsec{\ifnum\secno>0 .\the\secno
+%! \ifnum\subsecno>0 .\the\subsecno
+%! \ifnum\subsubsecno>0 .\the\subsubsecno \fi\fi\fi}
+%! choose one of the following twos
+%!\let\currsec\nochapscurrsec
+%!\let\currsec\chapscurrsec
+%!\def\deftagsec#1{\deftag\currsec{#1}}
+%!/
+%\def\deftaglabel#1{%
+% \expandafter\xdef\csname lingtag@\@localextag.#1\endcsname
+% {%
+% {\ep@expandonce\ep@label}%
+% {\ep@fullrefformat{\@actualexno}\ep@expandonce\ep@label}%
+% }%
+% \ignorespaces
+%}
+\def\getref@aa#1#2{#1}%
+\def\getref@ab#1#2{#2}%
+\def\getref#1{\getref@a{#1}\getref@aa}
+%\def\getfullref#1{\getref@a{#1}\getref@ab}
+%\def\getref@a#1#2{%
+% \if@readtags \@setupreadtags \fi
+% \expandafter \ifcsname lingtag@#1\endcsname
+% \edef\temp{\ep@expandtwice\csname lingtag@#1\endcsname}%
+% \ifx\temp\empty
+% \@expexwarn{+++tag #1 has no full reference}%
+% \@printref{Missing!}%
+% \else
+% {\@printref{\temp}}%
+% \fi
+% \else
+% \@expexwarn{tag #1 is called but not defined}%
+% {\@printref{\tt [#1]}}%
+% \fi
+%}
+\newif\ifpartlabel
+\newif\iffullref
+\def\ep@ispartlabelcheck#1{\ep@ispart@a#1.\@nil}
+\def\ep@ispart@a#1.#2\@nil{\def\temp{#2}%
+ \ifx\temp\empty \partlabelfalse \else \partlabeltrue\fi}
+\def\getref{\fullreffalse \getref@a}
+\def\getfullref{\fullreftrue \getref@a}
+\def\getref@a#1{%
+ \if@readtags \@setupreadtags \fi
+ \ep@ispartlabelcheck{#1}%
+ \ifpartlabel
+ \iffullref
+ \let\@chooseref\chooseref@a
+ \else
+ \let\@chooseref\chooseref@g
+ \fi
+ \else
+ \let\@chooseref\relax
+ \fi
+ \expandafter\ifx\csname lingtag@#1\endcsname \relax
+ \@expexwarn{tag #1 is called but not defined}%
+ {\@printref{\tt [#1]}}%
+ \else
+ \expandafter\let\expandafter\temp
+ \csname lingtag@#1\endcsname
+ \@printref{\expandafter\@chooseref\temp}%
+ \fi
+}
+\def\chooseref@a#1#2{#2}
+\def\chooseref@g#1#2{#1}
+% ----- glosses -----
+\def\ling@glstyle{wrap}
+\def\ling@glftpos{below}
+\define@choicekey{ling}{glstyle}[\ling@glstyle\gl@style@num]{wrap,nlevel}{%
+ \ifnum\gl@style@num=0 \glw@assignlevels \fi
+ \gl@setprefix
+}
+\def\begingl{\bgroup\@getoptionalarg\gl@begingl}
+% bug fix 2105/10/27 eliminate stray space
+%\def\gl@begingl{%
+% \ling@usearg
+% \ling@everygl
+% \gl@beginglstyle@a
+%}
+\def\gl@begingl{%
+ \let\everylist=\empty
+ \ling@usearg
+ \ling@everygl
+ \gl@beginglstyle@a
+}
+\def\gl@beginglstyle@a{\@ifnextchar\@space\gl@beginglstyle@b\gl@beginglstyle}
+\def\gl@beginglstyle@b #1{\gl@beginglstyle}
+% end bug fix
+% parameters which are used in both gloss styles
+\define@ling@cmdkeys{everygl,everyglpreamble,everyglilg, everyglft,
+ everyglword,glrightskip,glhangindent,glwidth}
+\define@lingincskipkeys{glspace,aboveglftskip,belowglpreambleskip,extraglskip}
+\newbox\glstrutbox
+\def\glstrut{\unhcopy\glstrutbox}
+\define@boolkey{ling}[ling@]{glstruts}{}%
+\newdimen\ep@cascadeindent
+\newdimen\ep@hangindentamount
+\newcount\ep@cascadecount
+\define@choicekey{ling}{glhangstyle}[\temp\ep@glhangstyle]%
+ {none,normal,cascade}%
+ {\ifnum\ep@glhangstyle=2
+ \ep@cascadecount=10
+ \ep@cascadeindent=0pt
+ \ep@hangindentamount=\ling@glhangindent
+ \fi }
+\lingset{glhangstyle=normal,glrightskip=0pt plus .1\hsize}
+% dimensions
+% switches
+\newif\if@glpreamble
+\newif\if@glft
+%
+% list manipulation macros (ala Knuth) that are used in both gloss styles
+\newtoks\gltoks@a
+\newtoks\gltoks@b
+\def\gl@push #1\to #2{%
+ \gltoks@a={\\{#1}}%
+ \gltoks@b=\expandafter{#2}%
+ \edef#2{\the\gltoks@a\the\gltoks@b}%
+}
+\def\gl@xappend #1\to #2{% renamed from \gl@append
+ \gltoks@a={\\{#1}}%
+ \gltoks@b=\expandafter{#2}%
+ \xdef#2{\the\gltoks@b\the\gltoks@a}%
+}
+\def\gl@lop#1\to#2{\ifx#1\empty
+ \let#2\empty \else\expandafter\gl@lopoff#1\gl@lopoff#1#2\fi}
+\long\def\gl@lopoff\\#1#2\gl@lopoff#3#4{\def#4{#1}\def#3{#2}}
+\def\gl@exappend{\expandafter\gl@xappend} % renamed from \gl@eappend
+\newif\ifgl@loopmore
+\def\gl@lopTL#1\to#2{%
+ \ifx#1\empty #2={}\else
+ \expandafter\gl@lopoffTL#1\gl@lopoffTL#1#2\fi}
+\long\def\gl@lopoffTL\\#1#2\gl@lopoffTL#3#4{#4={#1}\def#3{#2}}
+%%%%%%%%%%%%%%%%%%%% wrap style glosses %%%%%%%%%%%%%%%%%%%%
+% \gl@wrap@below@begin sets up the environment
+% \gla, \glb, etc. fill in the various lists which are initialized in
+% the environment
+% The input (something like the following)
+% \gla x1 x2 x3 //
+% \glb y1 y2 y3 //
+% \glc z1 z2 z3 //
+% gets converted into a list of lists (using Knuth's list macros)
+% {{x1,y1,z1},{x2,y2,z2},{x3,y3,z3}}
+% auxiliary lists are also made at the same time
+% list of struts, list of "everygl<name>"
+% Then these lists are popped, one position at a time, and vboxes
+% are built. The vboxes are fed into Tex's regular paragraph
+% building machinary.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% introduced "glbreaking" boolean parameter
+\define@boolkey{ling}[ling@]{glbreaking}[true]{}
+\lingset{glbreaking=false}
+\def\ep@setlist#1#2{\def#1{}\XKVforn{#2}\@this{\gl@eappend\@this\to#1}}
+% 2016/04/18 support for LaTex color and xcolor packages
+\define@ling@cmdkeys{glacolor}
+\define@lingkey{glnlinecolors}{\ep@setlist\colorlist{#1}}
+\lingset{glnlinecolors={},glacolor=}
+% various modifications of gloss building macros which follow were made
+% to make use of these parameters
+\def\gl@wrap@below@begin{\gl@wrap@below@begin@a}
+\def\gl@wrap@below@begin@a{%
+ \bgroup
+ \parindent0pt
+ \ep@setglstrut
+ \ifdim\ling@glwidth=0pt
+ \ifling@glbreaking
+ \bgroup
+ \else
+ \vtop\bgroup
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \leftskip=0pt
+ \fi
+ \else
+ \vtop\bgroup
+ \hsize=\ling@glwidth
+ \leftskip=0pt
+ \fi
+ \leavevmode
+ \bgroup
+ \parindent=0pt
+ \@glpreamblefalse
+ \@glftfalse
+ \let\mainlist=\empty
+ \let\itemtypelist=\empty
+ \let\aboveskiplist=\empty
+ \let\strutlist=\empty
+ \let\everylist=\empty
+ \let\colorlist=\empty
+}
+% As the list of lists is assembled, heights and depths of each
+% item are computed and maximum row heights and maximum row depths
+% are computed in each row. These are used to make struts which
+% are used to assemble the vboxes.
+%
+\newdimen\glw@maxht
+\newdimen\glw@maxdp
+\def\glw@initializemaxhtdp{%
+ \ifling@glstruts
+ \glw@maxht=\ht\glstrutbox \glw@maxdp=\dp\glstrutbox
+ \else
+ \glw@maxht=0pt \glw@maxdp=0pt
+ \fi
+}
+\define@ling@cmdkeys{everygla,everyglb,everyglc}
+\def\@alinelabel{a}
+\def\glw@gla{%
+ \bgroup
+ \ling@everyglilg
+ \def\lingaboveglaskip{0pt}%
+ \def\gl@linelabel{a}%
+ \glw@initializemaxhtdp
+ \@getoptionalarg
+ \glw@gla@a
+}
+\def\glw@gla@a #1//{\bgroup\ling@usearg
+ \glw@gla@b #1 \@nil }
+\def\glw@gla@b{\@ifnextchar\@nil\glw@gla@c\glw@gla@d}
+\def\glw@gla@c#1{\glw@updatelists \egroup \ignorespaces}
+\def\ep@samecharcode#1#2{\ep@expandonce#1\ep@expandonce#2\ignorespaces}
+\newcount\@itemtype
+\newif\ifglw@word
+% \@setitemtype sets the count \@itemtype, the macro \@mainlistappend, and
+% the switch \glw@word
+% 1=+, 2=@, 3=[, 4=], 5=\nogloss, 0=other
+\def\@setitemtype #1#2\@nil{%
+ \glw@wordfalse
+ \def\temp{#2}%
+ \ifx\temp\empty
+ \if\ep@samecharcode #1+\@itemtype=1
+ \else\if\ep@samecharcode #1@\@itemtype=2
+ \else\if\ep@samecharcode #1[\@itemtype=3
+ \else\if\ep@samecharcode #1]\@itemtype=4
+ \else \@itemtype=0
+ \fi\fi\fi\fi
+ \else
+ \glw@wordtrue
+ \ifx#1\nogloss\@itemtype=5 \def\@itembody{#2}%
+ \else \@itemtype=0 \fi
+ \fi
+}
+\def\glw@gla@d #1 {%
+ \def\temp{#1}%
+ \ifx\temp\empty
+% action for empty words added 2014/03/08
+ \glw@wordfalse
+ \@itemtype=0
+ \gl@xappend \\{\glstrut}\to\mainlist
+ \gl@exappend 0\to\itemtypelist
+ \else
+ \@setitemtype #1\@nil
+ \ifnum\@itemtype=0 \gl@xappend \\{\glstrut #1}\to\mainlist
+ \else \ifnum\@itemtype=5 \gl@exappend\@itembody\to\mainlist
+ \else \gl@xappend \\{}\to\mainlist
+ \fi\fi
+ \gl@exappend \the\@itemtype \to\itemtypelist
+ \fi
+ \ifglw@word
+ \setbox0=\hbox{\ling@everygla #1}%
+ \ifdim\glw@maxht<\ht0 \glw@maxht=\ht0 \fi
+ \ifdim\glw@maxdp<\dp0 \glw@maxdp=\dp0 \fi
+ \fi
+ \glw@gla@b
+}
+\newdimen\gl@maxdplast
+\def\glw@updatelists{%
+ \edef\temp{\csname ling@gl\gl@linelabel color\endcsname}%
+ \gl@exappend\temp \to\colorlist
+ \edef\temp{\csname lingabovegl\gl@linelabel skip\endcsname}%
+ \gl@exappend\temp \to\aboveskiplist
+ \edef\temp{\vrule width0pt height\the\glw@maxht\space depth\the\glw@maxdp\space }%
+ \global\gl@maxdplast=\glw@maxdp
+ \gl@exappend\temp\to\strutlist
+ \expandafter\expandafter\expandafter
+ \gl@xappend\csname ling@everygl\gl@linelabel\endcsname
+ \to\everylist
+ \gltoks@a=\expandafter{\everylist}%
+}
+\def\glw@assignlevels{%
+ \expandafter\XKVforn\expandafter{\glw@levels}\levelname
+ {\glw@assign@level\levelname}%
+}
+\def\glw@assign@level#1{%
+ \edef\Temp{#1}\def\XTemp{ft}%
+ \ifx\Temp\XTemp \let\temp\relax \else
+ \edef\temp{\noexpand\let
+ \expandafter\noexpand\csname gl#1\endcsname
+ \expandafter\noexpand\csname glw@gl#1\endcsname}\fi
+ \temp
+}
+% \glw@gla and \gl@wrap@below@ft get their definitions directly
+% \glw@gl<name> gets defined via \defineglwlevels, which adds <name> to the
+% list \glw@levels of defined glw levels
+\def\glw@levels{a,ft}
+\def\define@glw@level#1{%
+ \expandafter\ifx\csname glw@gl#1\endcsname\relax
+ \define@ling@cmdkeys{gl#1color}%
+ \define@ling@cmdkeys{everygl#1}%
+ \define@linginckey\skip{abovegl#1skip}%
+ \XKV@addtolist@o\glw@levels{#1}%
+ \lingset{everygl#1=,abovegl#1skip=0pt,gl#1color=}
+ \expandafter\def\csname glw@gl#1\endcsname{\glw@glx{#1}}%
+ \ifx\gl@style@num\undefined \else
+ \ifnum\gl@style@num=0 \glw@assign@level{#1}\fi\fi
+ \else
+ \@expexwarn{Level #1 is already defined}
+ \fi
+}
+\def\defineglwlevels#1{\XKVforn{#1}\thislevel
+ {\expandafter\define@glw@level\expandafter{\thislevel}}%
+}
+\def\glw@glx#1{% x suggests any label (as argument to \glw@glx)
+ \def\worklist{}%
+ \glw@initializemaxhtdp
+ \def\gl@linelabel{#1}%
+ \@getoptionalarg\glw@glx@a
+}
+
+\def\glw@glx@a #1// {\bgroup
+ \ling@usearg
+ \expandafter\let\expandafter\@every
+ \csname ling@everygl\gl@linelabel\endcsname
+ \glw@glx@b #1 \@nil }
+\def\glw@glx@b{\@ifnextchar\@nil\glw@glx@c\glw@glx@d}
+\def\glw@glx@c#1{\glw@updatelists \glw@mergerow\worklist\to\mainlist \egroup}
+\def\glw@mergerow#1\to #2{%
+ \let\itlist=\itemtypelist
+ \let\alist=#1%
+ \let\blist=#2%
+ \let\clist=\empty
+ \gl@loopmoretrue
+ \loop
+ \ifx\itlist\empty \gl@loopmorefalse \fi
+ \ifgl@loopmore
+ \gl@lop\itlist\to\@@itlist
+ \@itemtype=\@@itlist
+ \gl@lop\blist\to\currb
+ \ifnum\@itemtype=0
+ \gl@lop\alist\to\curra
+ \gl@exappend\curra\to\currb
+ \gl@exappend\currb\to\clist
+ \else \ifnum\@itemtype=5
+ \gl@exappend\currb\to\clist
+ \else
+ \gl@xappend\\{}\to\clist
+ \fi\fi
+ \repeat
+ \global\let#2=\clist
+}
+\def\glw@glx@d #1 {%
+ \setbox0=\hbox{\@every #1}%
+ \ifdim\glw@maxht<\ht0 \glw@maxht=\ht0 \fi
+ \ifdim\glw@maxdp<\dp0 \glw@maxdp=\dp0 \fi
+ \gl@xappend {\glstrut #1}\to\worklist
+ \glw@glx@b
+}
+\defineglwlevels{b,c}
+\newif\ifglw@spacebefore
+\long\def\gl@wrap@below@preamble #1// {%
+ \@glpreambletrue
+ {\hangindent=0pt \hangafter=0
+ \leavevmode\ling@everyglpreamble #1\strut
+ \par
+ \vskip\lingbelowglpreambleskip }%
+}
+\def\gl@wrap@below@ft{\@getoptionalarg\gl@wrap@below@ft@a}
+\long\def\gl@wrap@below@ft@a #1//{%
+ \glw@printilgsetup
+ \glw@printilg@a
+ \vskip\lingaboveglftskip
+ \nointerlineskip
+ \egroup
+ \@glfttrue
+ \ifx\glstrut\strut
+ \ifdim\gl@maxdplast>\dp\strutbox \prevdepth=\gl@maxdplast \fi
+ \fi
+ \ling@usearg
+ \@ilgborderadjustment
+ \ling@everyglft
+ \strut #1\par
+}
+\def\gl@wrap@below@end{%
+ \if@glft \else \glw@printilg\egroup \fi
+ \egroup\egroup\egroup
+}
+\def\glw@printilg{\glw@printilgsetup \glw@printilg@a}
+\def\glw@printilgsetup{%
+ \@glspacefalse
+ \rightskip=\ling@glrightskip
+ \lineskiplimit=0pt
+ \lineskip=\lingextraglskip
+% bug fix, 3/9/2017
+% \ifdim\lingextraglskip=0pt \global\let\@ilgborderadjustment=\relax
+ \ifdim\lineskip=0pt \global\let\@ilgborderadjustment=\relax
+ \else \xdef\@ilgborderadjustment{\vskip\the\lineskip}\fi
+ \if@glpreamble \@ilgborderadjustment \fi
+ \ifcase\ep@glhangstyle
+ \or
+ \hangindent=\ling@glhangindent
+ \hangafter=1
+ \or
+ \ep@glmkcascade
+ \fi
+}
+
+\def\glw@closegroups{\egroup\egroup\egroup}
+\def\glw@printilg@a{\glw@printilg@b \par }
+\def\glw@printilg@b{%
+ \glw@spacebeforefalse
+ \@glpostbrackfalse
+ \leavevmode
+ \gl@loopmoretrue
+ \@glaparsestate=1
+ \loop\ifgl@loopmore
+ \gl@lop\mainlist\to\@currentitem\relax % \@currentitem is one column
+ \gl@lop\itemtypelist\to\@currentitemtype\relax
+ \ifcase\@currentitemtype
+ \glw@printilgspace
+ \glw@printglword
+ \or
+ \vskip\lingextraglskip
+ \ifcase\ep@glhangstyle
+ \or
+ \hangafter=0
+ \hangindent=\ling@glhangindent
+ \or
+ \glhangcarry
+ \leavevmode
+ \fi
+ \@glaparsestate=1
+ \leavevmode
+ \or
+ \@glaparsestate=1
+ \or
+ \ifnum\@glaparsestate=0 \hskip\lingglspace
+ \else\ifnum\@glaparsestate=2 \hskip\lingglbrackbracksep
+ \else\ifnum\@glaparsestate=3 \hskip\lingglspace
+ \fi\fi\fi
+ \printlbrack\nobreak
+ \@glaparsestate=2
+ \or
+ \nobreak
+ \ifnum\@glaparsestate=0 \hskip\lingglbrackwordsep
+ \else\ifnum\@glaparsestate=2 \hskip\lingglspace
+ \else\ifnum\@glaparsestate=3 \hskip\lingglbrackbracksep
+ \fi\fi\fi
+ \printrbrack
+ \@glaparsestate=3
+ \or
+ \ifnum\@glaparsestate=0 \hskip\lingglspace \fi
+ \@glaparsestate=0
+ {\@currentitem}% grouping to prevent font change contagion
+ \leavevmode
+ \fi
+ \ifx\itemtypelist\empty \gl@loopmorefalse \fi
+ \repeat
+ \par \egroup
+}
+\def\glw@printilgspace{%
+ \ifcase\@glaparsestate
+ \hskip\lingglspace
+ \or
+ \or \hskip\lingglbrackwordsep
+ \or \hskip\lingglspace
+ \fi
+ \@glaparsestate=0
+}
+\def\glw@print@i{%
+ \glw@printilgspace
+ \glw@printglword
+}
+\newtoks\gltoks@sofar
+\newtoks\gltoks@every
+\newtoks\gltoks@next
+\newbox\debug@glword
+\def\ep@mklinecolorop{%
+ \ifx\@linecolor\empty \let\@linecolorop=\empty
+ \else \ep@mklinecolorop@a \fi}
+\def\ep@mklinecolorop@a{%
+ \edef\@linecolorop{\noexpand\noexpand\noexpand\color{\@linecolor}}%
+}
+\def\pstglcolors{%
+ \def\ep@mklinecolorop@a{%
+ \edef\@@linecolor{\noexpand\csname\@linecolor\noexpand\endcsname}%
+ \edef\@@@linecolor{\ep@expandtwice\@@linecolor}%
+ \edef\@linecolorop{\expandafter\noexpand
+ \expandafter\noexpand\expandafter\noexpand\@@@linecolor}%
+ }%
+}
+\def\glw@printglword{%
+ \begingroup
+ \gltoks@sofar={}%
+ \gl@loopmoretrue
+ \loop\ifgl@loopmore
+ \gl@lop\colorlist\to\@linecolor
+ \ep@mklinecolorop
+ \gl@lop\aboveskiplist\to\@aboveskip
+ \expandafter\ifdim\@aboveskip=0pt \def\@above{}\else
+ \edef\@above{\noalign{\vskip\@aboveskip}}\fi
+ \gl@lop\strutlist\to\@strut
+ \gl@lopTL\everylist\to\gltoks@every
+ \gl@lopTL\@currentitem\to\gltoks@next
+ \edef\temp{\the\gltoks@sofar \@above\@strut
+ {\@linecolorop\the\gltoks@every \the\gltoks@next}\cr}%
+ \gltoks@sofar=\expandafter{\temp}%
+ \ifx\@currentitem\empty \gl@loopmorefalse \fi
+ \repeat
+ \setbox0\vtop{%
+ \ling@everyglword
+ \halign{\glwordalign{##}\cr \the\gltoks@sofar }}%
+ \box0
+ \endgroup
+}
+
+\def\gl@wordalignleft#1{#1\hfil}
+\def\gl@wordaligncenter#1{\hfil#1\hfil}
+\define@choicekey{ling}{glwordalign}[\ling@glwordalign\ep@glwordalign]
+ {left,center}{%
+ \ifcase\ep@glwordalign
+ \let\glwordalign=\gl@wordalignleft
+ \or
+ \let\glwordalign=\gl@wordaligncenter
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%% nlevel style glosses %%%%%%%%%%%%%%%%%%%%
+\def\ep@setglstrut{%
+ \ifling@glstruts \setbox\glstrutbox=\copy\strutbox
+ \else \setbox\glstrutbox=\hbox{}%
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\gl@nlevel@below@begin{\gl@nlevel@below@begin@a}
+\def\gl@nlevel@below@begin@a{%
+ \bgroup
+ \parindent0pt
+ \bgroup
+ \@glspacefalse
+ \ep@setglstrut
+ \ifdim\ling@glwidth=0pt
+ \bgroup
+ \else
+ \vtop\bgroup
+ \hsize=\ling@glwidth
+ \leftskip=0pt
+ \fi
+ \futurelet\tempt\gl@nlevel@below@begin@b
+}
+\def\gl@nlevel@below@begin@b{%
+ \ifx\tempt\glpreamble \let\next=\gl@nlevel@below@preamble@c
+ \else \let\next=\gln@ilg \fi \next}
+\def\gl@nlevel@below@preamble@c #1{\gl@nlevel@below@preamble@d}
+\def\gl@nlevel@below@preamble@d #1\endpreamble{%
+ \bgroup
+ \ling@everyglpreamble
+ #1\strut
+ \vskip\lingbelowglpreambleskip
+ \vskip\lingextraglskip
+ \egroup
+ \gln@ilg
+}
+%\def\gl@nlevel@below@begin@b{%
+% \ifx\temp\glpreamble \let\next=\relax
+% \else \let\next=\gln@ilg \fi \next}
+%\def\gl@nlevel@below@preamble #1\endpreamble{%
+% \ling@everyglpreamble
+% #1\strut
+% \vskip\lingbelowglpreambleskip
+% \vskip\lingextraglskip
+% \egroup
+% \bgroup
+% \gln@ilg
+%}
+\def\gln@ilg{%
+ \ling@everyglilg
+ \lineskip=\lingextraglskip
+ \rightskip=\ling@glrightskip
+ \ifcase\ep@glhangstyle
+ \or
+ \hangindent=\ling@glhangindent
+ \hangafter=1
+ \or
+ \ep@glmkcascade
+ \fi
+ \leavevmode
+ \gln@ilg@a
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if@glspace
+\def\gln@ilg@a{\futurelet\temp\gln@ilg@b}
+\def\gln@ilg@b{\ifx\temp\endgl \let\next=\relax
+ \else \ifx\temp\nogloss \let\next=\gln@noglossword
+ \else \ifx\temp\glft \let\next=\relax
+ \else \let\next=\gln@word \fi\fi\fi \next }
+\def\gln@noglossword{\expandafter\gln@word}
+\def\gln@word #1[#2]#3 {%
+ \def\@currentitem{\\{#1}}%
+ \def\@diacritic{#3}%
+ \gln@ilg@f #2/\@nil
+ \gln@ilg@a
+}
+\def\nogloss#1{{#1}[]}%
+\def\gln@ilg@f{\@ifnextchar\@space\gln@ilg@fi\gln@ilg@fii}
+\def\gln@ilg@fi #1#2/{\gl@xappend #2\to\@currentitem \gln@ilg@g}
+\def\gln@ilg@fii#1/{\gl@xappend #1\to\@currentitem \gln@ilg@g}
+\def\gln@ilg@g{\@ifnextchar\@nil\gln@ilg@h\gln@ilg@f}
+\def\gln@ilg@h #1{%
+ \gln@printglword
+ \ifx\@diacritic\empty
+ \else \expandafter\gln@diacritic\@diacritic\@nil \fi
+}
+\def\gln@printglword{%
+ \if@glspace \hskip\lingglspace \else \@glspacetrue \fi
+ \begingroup
+ \gltoks@sofar={}%
+ \lineskip=0pt
+ \ling@everyglword
+ \gl@loopmoretrue
+ \loop\ifgl@loopmore
+ \gl@lop\colorlist\to\@linecolor
+ \ep@mklinecolorop
+ \gl@lop\gln@abovelineskip\to\@aboveskip
+ \ifx\@aboveskip\empty \let\@above=\empty
+ \else \edef\@above{\noalign{\vskip\@aboveskip}}\fi
+ \gl@lopTL\gln@everyline\to\gltoks@every
+ \gl@lopTL\@currentitem\to\gltoks@next
+ \edef\temp{\the\gltoks@sofar \@above
+ \glstrut {\@linecolorop \the\gltoks@every \the\gltoks@next}\cr}%
+ \gltoks@sofar=\expandafter{\temp}%
+ \ifx\@currentitem\empty \gl@loopmorefalse \fi
+ \repeat
+ \vtop{%
+ \lineskip=0pt
+ \ling@everyglword
+ \halign{\glwordalign{##}\cr \the\gltoks@sofar}}%
+ \endgroup
+}
+\def\gln@diacritic#1#2\@nil{%
+ \def\temp{#2}\ifx\temp\empty \else \ep@diacriticerror{#1#2}\fi
+ \if\noexpand #1\noexpand @\let\next\@glspacefalse
+ \else \if\noexpand #1\noexpand +\let\next\gln@after@c
+ \else \ep@diacriticerror{#1}\fi\fi
+ \next
+}
+\def\gln@after@c{%
+ \par
+ \ifcase\ep@glhangstyle
+ \or
+ \hangindent=\ling@glhangindent \hangafter=0
+ \or
+ \glhangcarry
+ \fi
+ \leavevmode
+ \@glspacefalse
+}
+\def\ep@diacriticerror#1{%
+ \@expexerror{bad gloss diacritic: #1 (only @ and + permitted)}\end}
+\def\gl@nlevel@below@ft{%
+ \vskip\lingaboveglftskip
+ \vskip\lingextraglskip
+ \egroup\bgroup
+ \nointerlineskip
+ \strut
+ \ling@everyglft
+}
+\def\gl@nlevel@below@end{\par\egroup\egroup\egroup\egroup}
+\define@lingkey{glneveryline}{\ep@setlist\gln@everyline{#1}}
+\define@lingkey{glnabovelineskip}{\ep@setlist\gln@abovelineskip{#1}%
+ \gl@lop\gln@abovelineskip\to\temp % no first line abovelineskip
+ \gl@push{}\to\gln@abovelineskip
+}
+% bug fix 4/9/2016
+\def\gl@append #1\to #2{%
+ \gltoks@a={\\{#1}}%
+ \gltoks@b=\expandafter{#2}%
+ \edef#2{\the\gltoks@b\the\gltoks@a}%
+}
+\def\gl@eappend{\expandafter\gl@append}
+% end bug fix
+\lingset{glneveryline={\it},glnabovelineskip={}}
+%%%%%%%%%%%%%%%% end nlevel %%%%%%%%%%%%%%%%%%%%
+
+% ----- brackets -----
+\newif\if@glpostbrack
+\newcount\@glaparsestate % 0 normal, 1 post @, 2 post [, 3 post ]
+\define@lingincdimenkeys{glbrackbracksep,glbrackwordsep}
+\lingset{glbrackbracksep=.05em,glbrackwordsep=.1em}
+% 2011-12-09 introduce hook into \printlback and \printrbrack to allow font selection
+\define@ling@cmdkeys{everybrack}
+\lingset{everybrack=\rm}
+\def\printlbrack{{\ling@everybrack [}}
+\def\printrbrack{{\ling@everybrack ]}}
+% ----- cascading hanging indentation -----
+\newdimen\glwcascade@pshapeindent
+\newdimen\glwcascade@pshapelinewd
+\def\glwcascade@parshapetarget{}
+\def\glwcascade@mkshapeaux{%
+ \edef\glwcascade@parshapetarget
+ {\glwcascade@parshapetarget\space
+ \the\glwcascade@pshapeindent\space\the\glwcascade@pshapelinewd}%
+ \advance\glwcascade@pshapeindent by \ling@glhangindent
+ \advance\glwcascade@pshapelinewd by -\ling@glhangindent
+}
+\def\ep@glmkcascade{{%
+ \ep@cnta=\ep@cascadecount
+ \ep@dima=\hsize
+ \advance\ep@dima by -\ep@cascadeindent
+ \edef\cascadeshape{}
+ \loop\ifnum\ep@cnta >0
+ \edef\cascadeshape{\cascadeshape \the\ep@cascadeindent\space\the\ep@dima\space}%
+ \advance\ep@cascadeindent by \ling@glhangindent
+ \advance\ep@dima by -\ling@glhangindent
+ \advance\ep@cnta by -1
+ \repeat
+ \xdef\cascadeshape{\noexpand\parshape\the\ep@cascadecount\space\cascadeshape}}%
+ \cascadeshape
+ \ignorespaces
+}
+\def\glhangcarry{%
+ \edef\next{\the\prevgraf}%
+ \advance\ep@cascadecount by -\next
+ \ep@dimc=\ling@glhangindent
+ \advance\ep@cascadeindent by \next\ep@dimc
+ \ep@glmkcascade
+}
+% ----- side by side (ss) gloss style -----
+\def\gl@setprefix{\edef\gl@prefix{gl@\ling@glstyle @\ling@glftpos @}}
+\def\glft{\csname \gl@prefix ft\endcsname}
+\def\gl@beginglstyle{\csname \gl@prefix begin\endcsname}
+\def\endgl{\csname \gl@prefix end\endcsname}
+\def\glpreamble{\csname \gl@prefix preamble\endcsname}
+
+\define@choicekey{ling}{glftpos}[\ling@glftpos\gl@ftpos@num]%
+ {below,right}{\gl@setprefix}
+
+\define@lingcmdkeys{sssep,ssratio,ssrightskip}
+\lingset{sssep=2em,ssratio=.6,ssrightskip=0pt plus 2em}
+\newdimen\ssleftwd
+\newdimen\ssrightwd
+\def\ep@setssdims{%
+ \dimen0 =\hsize
+ \advance\dimen0 by -\leftskip
+ \advance\dimen0 by -\lingsssep
+ \ssleftwd=\lingssratio\dimen0
+ \ssrightwd=\dimen0
+ \advance\ssrightwd by -\ssleftwd
+}
+\def\gl@wrap@right@begin{%
+ \ep@setssdims
+ \leavevmode\bgroup\hbox\bgroup
+ \hsize=\ssleftwd
+ \lingset{glwidth=\ssleftwd}
+ \gl@wrap@below@begin
+}
+\def\gl@wrap@right@end{\egroup\egroup}
+\def\gl@wrap@right@ft #1//{%
+ \gl@wrap@below@end
+ \hskip\lingsssep
+ \vtop{%
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \parindent=0pt
+ \hsize=\ssrightwd
+ \ling@everyglft
+ #1}%
+ \ignorespaces
+}
+\expandafter\def\expandafter\gl@nlevel@right@medial\expandafter
+ {\gl@nlevel@below@end \gl@nlevel@right@medial@a}
+\def\gl@nlevel@right@medial@a{\egroup
+ \def\gl@prefix{gl@nlevel@right@}%
+ \hskip\lingsssep
+ \vtop\bgroup
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \parindent=0pt
+ \hsize=\ssrightwd
+ \ling@everyglft
+}
+\def\gl@nlevel@right@begin{%
+ \ep@setssdims
+ \leavevmode
+ \vtop\bgroup
+ \hsize=\ssleftwd
+ \leftskip=0pt
+ \def\gl@prefix{gl@nlevel@below@}
+ \let\gl@nlevel@below@ft=\gl@nlevel@right@medial \begingl }
+ \def\gl@nlevel@right@end{\egroup\egroup}
+% ----- gloss with a side panel
+%2015 added macros for side panel in nlevel style
+\define@lingcmdkeys{everypanel}
+\lingset{everypanel={}}
+\def\beginglpanel{\@getoptionalarg\beginglpanel@a}
+\def\beginglpanel@a{%
+ \bgroup
+ \ifcase\gl@style@num
+ \let\endgl=\gl@wrap@panel@end
+ \else
+ \let\endgl=\gl@nlevel@panel@end
+ \fi
+ \begin@glpanel@right
+}
+\def\begin@glpanel@right{%
+ \ling@usearg
+ \ep@setssdims
+ \leavevmode
+ \lingset{glwidth=\ssleftwd}
+ \begingl
+}
+\def\gl@wrap@panel@end{%
+ \gl@wrap@below@end
+ \hfill
+ \vtop\bgroup
+ \hsize=\ssrightwd
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \lingeverypanel
+}
+\def\gl@nlevel@panel@end{%
+ \gl@nlevel@below@end
+ \hfill
+ \vtop\bgroup
+ \hsize=\ssrightwd
+ \leftskip=0pt
+ \rightskip=\lingssrightskip
+ \lingeverypanel
+}%
+\def\endpanel{\egroup\egroup\par}
+% ----- underfixes -----
+% removed 11/4/2015
+% put back temporarily 3/9/2017 (still needed in manual)
+\def\gluf/#1/#2/{%
+ \vtop{\offinterlineskip\halign{\hfil##\hfil\cr
+ \strut #1\cr
+ \noalign{\vskip-\ling@glufcloseup}
+ \ling@everygluf \strut#2\cr
+}}}
+% ----------
+\define@ling@cmdkeys{everygluf,glufcloseup}
+\lingset{glufcloseup=.4ex,everygluf=\sc}
+% ----- gloss comments and citations -----
+\def\rightcomment#1{\leavevmode\rlap{%
+ \hbox to\hsize{\hfil \rm #1\hskip\leftskip}}\ignorespaces}
+\let\rightcite=\rightcomment % for backwards compatability
+\define@ling@cmdkeys{mincitesep}
+\lingset{mincitesep=1.5em}
+% jf 2011-12-09 introduce everytrailingcitation hook
+\define@ling@cmdkeys{everytrailingcitation}
+\def\trailingcitation#1{%
+ \hskip\ling@mincitesep plus 1fill
+ \penalty100\null\nobreak \hskip 0pt plus 1fill
+ \hbox{\ling@everytrailingcitation #1}%
+}
+\lingset{everytrailingcitation=}
+%! ----- initial settings -----
+\lingset{%
+ aboveexskip=2.7ex plus .8ex minus .8ex,
+ belowexskip=2.7ex plus .8ex minus .8ex,
+ Everyex=,
+ everyex=,
+ numoffset=0pt,
+ labelanchor=numright,
+ labeloffset=1em,
+ labelwidth=.78em,
+ textanchor=normal,
+ textoffset=1em,
+ preambleanchor=numright,
+ preambleoffset=1em,
+ avoidnumlabelclash=false,
+ appendtopexarg=,
+ labeltype=alpha,
+ everylabel=,
+ labelalign=left,
+ belowpreambleskip=1ex,
+ interpartskip=1ex,
+% splitexpenalty=200,
+ exbreakfil=0pt plus 4ex,
+ exbreakpenalty=-50,
+ splitpartspenalty=200,
+% auxiliary parameters used for building tables
+ dima=2.4em,
+ crskip=.6em
+}
+\lingset{%
+% parameters used in glosses
+ glspace=.5em plus.4em minus.15em,
+ glrightskip=0pt plus .1\hsize,
+ aboveglcskip=0pt,
+ aboveglftskip=1ex,
+ belowglpreambleskip=1ex,
+ everyglpreamble=,
+ glhangindent=1em,
+ everygla=\it,
+ everyglb=,
+ everyglc=,
+ everyglft=,
+ everygl=,
+ everyglilg=,
+ everyglword=,
+ glwordalign=left,
+ glwidth=0pt,
+ glufcloseup=.4ex,
+ everygluf=,
+ glstyle=wrap,
+ extraglskip=.5ex,
+ mincitesep=1.5em,
+ glstruts=true
+}
+%%%%%%%%%%%%%%%% additions to the CTAN file
+\def\tspacea{\hskip\lingdima}
+\def\tspaceb{\hskip\lingdimb}
+\def\tspacec{\hskip\lingdimc}
+\lingset{dimb=1.5em,dimc=1.5em}
+
+\resetatcatcode
diff --git a/macros/generic/fenixpar/README b/macros/generic/fenixpar/README
new file mode 100644
index 0000000000..b81cbbc24b
--- /dev/null
+++ b/macros/generic/fenixpar/README
@@ -0,0 +1,9 @@
+There are two files in this directory, appart from this README:
+
+fenixtok.sty: LPPL 1.3, v. 0.92
+fenixpar.sty: Public domain
+
+The packages work with both LaTeX and e-plain.
+fenixpar is just an interface applied to \everypar of the
+general package fenixtok. More information is provided in the
+files themselves. \ No newline at end of file
diff --git a/macros/generic/fenixpar/fenixpar.sty b/macros/generic/fenixpar/fenixpar.sty
new file mode 100644
index 0000000000..af3b272060
--- /dev/null
+++ b/macros/generic/fenixpar/fenixpar.sty
@@ -0,0 +1,44 @@
+% This is the file fenixpar.sty
+% Author: Javier A. M\'ugica de Rivera
+% This file is in the public domain.
+%
+\ifx\RequirePackage\undefined
+\def\tempa{\input fenixtok.sty}
+\else
+\def\tempa{\RequirePackage{fenixtok}}
+\fi
+\tempa
+
+\def\NewParType#1#2{\NewTypeoftok{everypar}{#1}{#2}}
+\def\NextParL#1{\NexteveryparL{#1}}
+\def\NextParR#1{\NexteveryparR{#1}}
+\let\NextPar\NextParL
+\def\AllParsL#1{\AlleveryparsL{#1}}
+\def\AllParsR#1{\AlleveryparsR{#1}}
+\def\EndPars#1{\Endeverypars{#1}}
+\let\AllPars\AllParsL
+%If you want to make \par a toks register and use fenixtok with it you
+%probably want to comment or modify this line:
+\def\nextpar#1{\fornexttokl{everypar}{#1}}
+
+% Next is an example:
+% \NewParType{asterisk}{\hbox to0pt{\hss$\ast$\kern6pt}}
+%
+% \NextPar{asterisk} This par will get an asterisk.\par
+% But this will not.
+%
+% \AllPars{asterisk} This par will get an asterisk.\par
+% And this one.\par
+% And all these.\par
+% ...
+% \EndPars{asterisk}
+%
+% To directly add code to the next par,
+% \nextpar{\hbox to0pt{\kern-2em \romannumeral\mycounter.\hss}}
+%
+% L and R stand for Left and Right. However, they cannot be used
+% to push letter-format macros in order to format the first letter
+% of the paragraph, unless you are a TeXhacker.
+%
+% See the file fenixtok for details.
+\endinput \ No newline at end of file
diff --git a/macros/generic/fenixpar/fenixtok.sty b/macros/generic/fenixpar/fenixtok.sty
new file mode 100644
index 0000000000..aba2672469
--- /dev/null
+++ b/macros/generic/fenixpar/fenixtok.sty
@@ -0,0 +1,197 @@
+% fenixtok.sty Version 0.92, 18th November, 2011
+%
+% (c) Javier A. M\'ugica, 2007 2011
+% License: LPPL version 1.3
+%
+% LPPL maintenance status: maintained
+% Current Maintainer: Javier A. M\'ugica
+%
+% For bug reports and comments:
+%
+% Javier M\'ugica, javier at digi21.net
+%
+% Description:
+%
+% This file provides a few user macros to add material to a token register (typically \everypar)
+% to be automatically removed when the token list is executed or later on request,
+% without interfering with existing material in that register.
+% Supose for example that you want the code \hbox to0pt{\kern-20pt$\ast$\hss} to be
+% executed by the next \everypar. Then you would type
+% \fornexttokl{everypar}{\hbox to0pt{\kern-20pt$\ast$\hss}}.
+% \fornexttokl adds the material as a stack: last added, first executed.
+% If you want to add material to be executed after whatever may be on the register,
+% use \fornexttokr instead.
+% If you need \fornexttok often (or even twice) you may _define_ that type of everypar:
+%
+% \NewTypeoftok{everypar}{asterisk}{\hbox to0pt{\kern-20pt$\ast$\hss}}
+%
+% And later you would type \NexteveryparL{asterisk} (or \NexteveryparR).
+% If you want several consecutive paragraphs to be signaled with the asterisk
+% you may enclose them between \AlleveryparsL{asterisk} (or ...R) and \Endeverypars{asterisk}.
+%
+% For any token register 'mytok' you can use \nextmytokl (...r) as an abreviation for
+% \fornexttokl{mytok} (...r), but it will fail if you have not yet used \NewTypeoftok{mytok}
+% or \fornexttok{mytok}.
+%
+% The commands \All... and \End..., can be mixed in any order; in particular, they don't need
+% to be nested. They may also be mixed in any way with respect to \Next.. or \fornext...
+%
+\chardef\atcatcode=\catcode`\@
+\catcode`\@=11\relax
+\def\exp@noex{\expandafter\noexpand}
+\def\noexp@name#1{\exp@noex\csname#1\endcsname}
+\def\tok@newtoks{\csname newtoks\endcsname}% \newtoks not allowed in definitios
+\def\@namedef#1{\expandafter\def\csname#1\endcsname}% This is LaTeX definition
+\long\def\@gobbletwo#1#2{}% So is this one.
+%Almost everything is done by this macro. See the example below.
+\def\NewTypeoftok#1#2#3{%
+ \toktype@Registerifnotyet{#1}%
+ \expandafter\tok@newtoks\csname #1/#2\endcsname
+ \csname #1/#2\endcsname{#3}%
+ \@namedef{next@#1/#2}{%
+ \edef\tok@type{\csname #1\endcsname}% We need it very often
+ \edef\if@nextrequired{\noexp@name{if@next#1@required}}%Idem
+ \def\make@ifnextrequired@false{\let\exp@noex\if@nextrequired\noexpand\iffalse}%
+ \edef\tempa{\csname previous@#1@\endcsname\tok@type}\tempa
+ \if@nextrequired\else
+ \edef\tempa{\csname former@#1@\endcsname\tok@type}\tempa
+ \fi
+ \edef\tempa{\tok@type{\if\foo L\expandafter\the\csname #1/#2\endcsname\fi
+ \if@nextrequired\else\tok@type\csname former@#1@\endcsname\fi\make@ifnextrequired@false% the \fi should be after \make@..., but if another macro (@startsection, for instance) changes everypar before it is executed, or builds the paragraph inside a group and later outside the group changes it, we would never recover.
+ \expandafter\the\csname previous@#1@\endcsname
+ \if\foo R\expandafter\the\csname #1/#2\endcsname\fi}}%
+ \tempa
+ \expandafter\let\if@nextrequired\iftrue
+ }%
+ \expandafter\edef\csname the@#1/#2\endcsname{\expandafter\the\csname #1/#2\endcsname}%
+ \@namedef{every@#1/#2}{%
+ \def\tempb####1{\edef\tempa{\csname####1\endcsname{\if\foo L\noexp@name{the@#1/#2}\fi\expandafter\the\csname####1\endcsname\if\foo R\noexp@name{the@#1/#2}\fi}}}%
+ \tempb{#1}\tempa
+ %Also add it to the saved \former... if necesary:
+ \csname if@next#1@required\endcsname
+ \tempb{former@#1@}\tempa
+ \fi
+ }%
+ \@namedef{end@#1/#2}{%
+ \edef\tempa{\noexpand\see@if@present\noexp@name{#1}\noexp@name{the@#1/#2}}\tempa
+ \if@tok@present
+ \def\tempb####1{\edef\tempa{\csname ####1\endcsname\noexpand\expandafter\noexp@name{strip@#1/#2}\noexpand\the\csname####1\endcsname}%
+ \expandafter\expandafter\tempa\mark@end@fenixtok}%
+ \tempb{#1}%
+ %Remove it from \former... if necesary:
+ \iftrue
+ \csname if@next#1@required\endcsname
+ \tempb{former@#1@}%
+ \fi
+ \csname fi\endcsname
+ \else
+ \newlinechar=`^^J%
+ \edef\tempa{\noexpand\errhelp{Probably another macro redefined \noexp@name{#1} behind the scenes.^^J%
+ Simply proceed and remember to check if the effect of {#2}^^J%
+ is missing from some prior point up to here.}}%
+ \tempa
+ \errmessage{The material of {#2} has already been removed from \noexp@name{#1}.^^J%
+ I will ignore End#1s{#2}}%
+ \errhelp{}%
+ \fi
+ }%
+ \edef\tempa{\noexp@name{strip@#1/#2}####1\noexp@name{the@#1/#2}}%
+ \expandafter\def\tempa##2\mark@end@fenixtok{{##1##2}}%
+}
+
+%This one must receive the \xxx already built, for if not the definition would be (more) cumbersome.
+\def\see@if@present#1#2{%
+ \def\save@first@part ##1#2##2\mark@end@fenixtok{\toks0{##1}}%
+ \expandafter\save@first@part\the#1#2\mark@end@fenixtok\edef\tempa{\the\toks0}\edef\tempb{\the#1}%
+ \expandafter\let\expandafter\if@tok@present\csname\ifx\tempa\tempb iffalse\else iftrue\fi\endcsname \toks0{}%
+}
+
+\let\tempb\fi \let\tempc\iffalse
+\catcode`f=12 \catcode`s=12 %
+\tempc
+%If #1 is {mytok} and #2 is {foo}, the previous unexcrutable \csname's and \edef's
+%will result arfter expansion of \NewTypeoftok in something like
+ \toktype@Registerifnotyet{mytok}%
+ \newtoks\mytok/foo
+ \mytok/foo{#3}%
+ \def\next@mytok/foo{%
+ % The two auxiliary %\def\tok@type{\mytok}
+ % edef lines %\def\if@nextrequired{\if@nextmytok@required}
+ % Another auxiliary line, for easier reading of the edef where it apears
+ % \def\make@ifnextrequired@false{\let\exp@noex\if@nextrequired\noexpand\iffalse}
+ \previous@mytok@\mytok
+ \if@nextmytok@required\else
+ \former@mytok@\mytok
+ \fi
+ \edef\tempa{\mytok{\if\foo L\the\mytok/foo\fi %The first \foo is real
+ \if@nextmytok@required\else\mytok\former@mytok@\let\noexpand\if@nextmytok@required\noexpand\iffalse\fi
+ \the\previous@mytok@
+ \if\foo R\the\mytok/foo\fi
+ }}%
+ \tempa
+ \let\if@nextmytok@required\iftrue
+ }%
+ \edef\the@mytok/foo{\the\mytok/foo}%
+ \def\every@mytok/foo{%
+ %Axuliary definition of \tempb in order to edefine \tempa, not shown.
+ \edef\tempa{\mytok{\if\foo L\noexpand\the@mytok@foo\fi \the\mytok \if\foo L\noexpand\the@mytok@foo\fi}}%
+ \tempa
+ \if@nextmytok@required
+ %Same definition as above with \former@mytok@ istead of \mytok
+ \tempa
+ \fi
+ }%
+ \def\end@mytok/foo{%
+ %Axuliary definition of \tempb not shown
+ %Only shown the case where \if@tok@present is true
+ \def\tempa{\mytok\expandafter\strip@mytok/foo \the\mytok}%
+ \expandafter\mytok\expandafter\strip@mytok/foo\the\mytok\mark@end@fenixtok
+ \if@nextmytok@required
+ \def\tempa{\expandafter\strip@mytok/foo \noexpand\the\mytok}%
+ \expandafter\former@mytok@\expandafter\strip@mytok/foo\the\former@mytok@\mark@end@fenixtok
+ \fi
+ }%
+ \def\tempa{\strip@mytok/foo ####1\the@mytok/foo}%
+ \def\strip@mytok/foo##1\the@mytok/foo##2\mark@end@fenixtok{\mytok{##1##2}}%
+\fi
+%end of example
+\tempb
+\catcode`f=11 \catcode`s=11 %
+\let\fi\tempb \let\iffalse\tempc
+\let\tempb\relax \let\tempc\relax
+
+%Now the Register macros
+\def\toktype@Registerifnotyet#1{%
+ \ifcsname if@next#1@required\endcsname
+ \def\next{}%
+ \else\def\next{\toktype@Register{#1}}%
+ \fi
+ \next
+}
+\def\toktype@Register#1{%
+ \expandafter\tok@newtoks\csname former@#1@\endcsname
+ \expandafter\tok@newtoks\csname previous@#1@\endcsname
+ \expandafter\global\expandafter\let\csname if@next#1@required\endcsname\iffalse
+%
+ \@namedef{Next#1L}##1{\def\foo{L}\csname next@#1/##1\endcsname}% If you think
+ \@namedef{Next#1R}##1{\def\foo{R}\csname next@#1/##1\endcsname}%
+ \@namedef{All#1sL}##1{\def\foo{L}\csname every@#1/##1\endcsname}% these should not be user level,
+ \@namedef{All#1sR}##1{\def\foo{R}\csname every@#1/##1\endcsname}% these should not be user level,
+ \@namedef{End#1s}##1{\csname end@#1/##1\endcsname}% just insert an @
+%
+ \NewTypeoftok{#1}{@scratch@}{}%
+ \@namedef{next#1l}##1{\csname #1/@scratch@\endcsname{##1}\csname Next#1L\endcsname{@scratch@}}% inside the argument
+ \@namedef{next#1r}##1{\csname #1/@scratch@\endcsname{##1}\csname Next#1R\endcsname{@scratch@}}% to the @namedef's
+}
+
+\def\fornexttokl#1#2{%
+ \toktype@Registerifnotyet{#1}%
+ \csname next#1l\endcsname{#2}% Also here.
+}
+\def\fornexttokr#1#2{%
+ \toktype@Registerifnotyet{#1}%
+ \csname next#1r\endcsname{#2}% and here.
+}
+\catcode`@=\atcatcode
+\let\atcatcode\relax
+\endinput
diff --git a/macros/generic/fixjfm/README b/macros/generic/fixjfm/README
new file mode 100644
index 0000000000..3b68f21c0b
--- /dev/null
+++ b/macros/generic/fixjfm/README
@@ -0,0 +1,16 @@
+
+
+The fixjfm package --- Fix JFM (for *pTeX)
+
+CTAN Homepage: https://ctan.org/pkg/fixjfm
+
+Repository: https://github.com/Man-Ting-Fang/fixjfm
+
+Version: 2018-03-24 v0.8
+
+Copyright 2017--2018 Yue ZHANG
+
+License: Knuth License (https://ctan.org/license/knuth)
+
+This package fixes several bugs in the JFM format. Both LaTeX and plain TeX are
+supported.
diff --git a/macros/generic/fixjfm/fixjfm-doc.pdf b/macros/generic/fixjfm/fixjfm-doc.pdf
new file mode 100644
index 0000000000..43147b99de
--- /dev/null
+++ b/macros/generic/fixjfm/fixjfm-doc.pdf
Binary files differ
diff --git a/macros/generic/fixjfm/fixjfm-doc.tex b/macros/generic/fixjfm/fixjfm-doc.tex
new file mode 100644
index 0000000000..d52f836721
--- /dev/null
+++ b/macros/generic/fixjfm/fixjfm-doc.tex
@@ -0,0 +1,356 @@
+
+
+% fixjfm-doc.tex
+
+% !TeX encoding = UTF-8
+% !TeX program = pdfLaTeX
+
+\RequirePackage{fix-cm}
+
+\documentclass[a4paper]{article}
+
+\usepackage{amsfonts}
+\usepackage[OT1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[UKenglish]{babel}
+\usepackage[babel]{microtype}
+\usepackage{etoolbox}
+\usepackage{booktabs}
+
+\AtBeginEnvironment{verbatim}{\microtypesetup{activate=false}}
+
+\abovetopsep=\medskipamount
+
+\newcommand\NormalSans{\normalfont\sffamily}
+\newcommand\pkg[1]{{\protect\NormalSans#1}}
+
+\newcommand\pTeX{p\kern-0.15em\TeX}
+\newcommand\e{\ensuremath{\varepsilon}}
+\newcommand\epTeX{\e-\pTeX}
+\newcommand\ApTeX{A\kern-0.1em\pTeX}
+\newcommand\pLaTeX{p\LaTeX}
+
+\newcommand\FwBox{\ensuremath{\square}\hskip0em plus 0.05em\relax}
+
+\newbox\fwbox
+\setbox\fwbox=\hbox{\FwBox}
+
+\newcommand\TwoFwBoxes{\FwBox\FwBox}
+\newcommand\FourFwBoxes{\TwoFwBoxes\TwoFwBoxes}
+
+\newcommand\DemoText{%
+ \FourFwBoxes\FourFwBoxes\FourFwBoxes\FourFwBoxes
+ \FourFwBoxes\FourFwBoxes\ensuremath{\square}}
+
+\newcommand\demotext[1]{%
+ \begin{minipage}{20\wd\fwbox}\centering
+ \fbox{\begin{minipage}{16\wd\fwbox}%
+ \hskip2\wd\fwbox\relax\DemoText\par
+ \leavevmode\hbox to#1\wd\fwbox{\hss``}\DemoText''\par
+ \hskip2\wd\fwbox\relax\DemoText\par
+ \end{minipage}}%
+ \end{minipage}}
+
+\newcommand\yes{yes}
+\newcommand\no{no}
+
+\newcommand\eclmvtt{test}
+
+\font\eclmvtt=ec-lmvtt10 at 10pt
+
+\newcommand\demoinput[2]{\TwoFwBoxes
+ \hbox to 1\wd\fwbox{\texttt{,}\hss}#1%
+ \hbox to 1\wd\fwbox{\hss{\eclmvtt``}}\TwoFwBoxes
+ \hbox to 1\wd\fwbox{{\eclmvtt''}\hss}#2}
+
+\newcommand\demooutput[2]{%
+ \TwoFwBoxes\hbox to#1\wd\fwbox{,\hss{#2``}}\TwoFwBoxes{#2''}}
+
+\newcommand\sans{test}
+
+\font\sans=SourceSansPro-Semibold-tlf-ot1 at 10pt
+
+\newenvironment{history}[1]%
+ {\noindent\textbf{#1}\nopagebreak\relax\begin{itemize}}%
+ {\end{itemize}}
+
+\begin{document}
+
+\title{The \pkg{fixjfm} package%
+ \thanks{CTAN Homepage: \texttt{https://ctan.org/pkg/fixjfm}}
+ \thanks{Repository: \texttt{https://github.com/Man-Ting-Fang/fixjfm}}}
+\author{Yue \textsc{Zhang}}
+\date{2018-03-24\quad v0.8}
+
+\maketitle
+
+\begin{abstract}
+This package fixes several bugs in the JFM format. Both \LaTeX\ and plain \TeX\
+are supported.
+\end{abstract}
+
+\section{Introduction}
+
+The JFM format is an extension of the TFM format and is used for typesetting CJK
+characters with *\pTeX. It works perfectly under almost all circumstances, but
+there are still at least two bugs:
+\begin{itemize}
+\item Bug 1: the indentation is incorrect if the first character of a paragraph
+ is an opening fullwidth punctuation mark, see Figure \ref{fig:ind};
+\item Bug 2: the spacing between two consecutive fullwidth punctuation marks
+ cannot be adjusted if the font is changed there, see Table \ref{tab:adj}.
+\end{itemize}
+\begin{figure}[!ht]\centering
+\demotext{3}\demotext{2.5}
+\caption{Comparison of the indentation produced without this package (left) and
+ with this package (right)}
+\label{fig:ind}
+\end{figure}
+\vskip-20pt\relax
+\begin{table}[!ht]\centering
+\caption{Comparison of the adjustment of the spacing between two consecutive
+ fullwidth punctuation marks}
+\label{tab:adj}
+\begin{tabular}{ccll}
+\toprule
+Font change & This package & Input & Output \\
+\midrule
+\no & either \no\ or \yes & \demoinput{}{} & \demooutput{1.5}{} \\
+\yes & \no & \demoinput{\texttt{\char"5C textgt%
+ \char"7B}}{\texttt{\char"7D}}
+ & \demooutput{2}{\sans} \\
+\yes & \yes & \demoinput{\texttt{\char"5C textgt%
+ \char"7B}}{\texttt{\char"7D}}
+ & \demooutput{1.5}{\sans} \\
+\bottomrule
+\end{tabular}
+\end{table}
+It seems that macro is the easiest solution to these problems. However, the
+second bug can only be fixed when using \e-(u)\pTeX\ or \ApTeX\ (under most, but
+not all circumstances), because the primitive \verb|\lastnodechar| which is
+introduced by \epTeX\ is required. Anyhow, using this package with \pTeX\ or any
+one of its derivatives does not hurt. Please also keep in mind that owing to
+technical limitations, this package is not a panacea.
+
+There is also another improvement: \verb|\leavevmode| is redefined as
+\verb|\quitvmode| if the latter is available as a primitive (among all *\pTeX\
+engines to date, only \ApTeX\ has \verb|\quitvmode|). So after loading this
+package, you can always use \verb|\leavevmode| and need not worry about
+\verb|\quitvmode|. If you are wondering about what the difference between them
+is, please see \textit{The pdf\TeX\ user manual}.
+
+\section{Basic usage}
+
+This package has no options. It is recommended that this package should be
+loaded before any other packages. If you are using \LaTeX, load this package at
+the beginning of your preamble:
+\begin{verbatim}
+ \documentclass...
+ \usepackage{fixjfm}
+\end{verbatim}
+or even before \verb|\documentclass| (use \verb|\RequirePackage| instead):
+\begin{verbatim}
+ \RequirePackage{fixjfm}
+ \documentclass...
+\end{verbatim}
+If you are using plain \TeX, put the following line near the beginning of your
+\verb|.tex| file:
+\begin{verbatim}
+ \input fixjfm.sty
+\end{verbatim}
+
+After loading this package, the first bug mentioned above can be automatically
+fixed under most (but not all) circumstances. If you find that it cannot be
+fixed somewhere, you can add \verb|\<| manually before the opening fullwidth
+punctuation mark which begins the paragraph.
+
+In the case of the second bug mentioned above, the situation is different. If
+you are using \LaTeX, \verb|\textmc| and \verb|\textgt| are redefined by default
+so that the bug can be automatically fixed (again, under most, but not all
+circumstances). However, \verb|\mcfamily| and \verb|\gtfamily| remain unchanged.
+The difference here is similar to that between, say, \verb|\textit| and
+\verb|\itshape|: \verb|\textit| automatically takes care of any necessary italic
+correction on either side of the argument, while \verb|\itshape| does nothing
+about that. Just like \verb|\itshape| and \verb|\/|, you should add
+\begin{verbatim}
+ \fixjfmspacing
+\end{verbatim}
+by yourself after the font change that appears between two consecutive fullwidth
+punctuation marks. For example:
+\begin{trivlist}\item\relax{\ttfamily\hskip2em}\TwoFwBoxes
+\hbox to 1\wd\fwbox{\texttt{,}\hss}\verb|{\gtfamily\fixjfmspacing|%
+\hbox to 1\wd\fwbox{\hss{\eclmvtt``}}\TwoFwBoxes
+\hbox to 1\wd\fwbox{{\eclmvtt''}\hss}\verb|}\fixjfmspacing|%
+\hbox to 1\wd\fwbox{\hss{\eclmvtt``}}\TwoFwBoxes
+\hbox to 1\wd\fwbox{{\eclmvtt''}\hss}%
+\end{trivlist}
+If you are using plain \TeX, you should always add \verb|\fixjfmspacing| by
+yourself, because plain (*p)\TeX\ does not have \verb|\textmc|, \verb|\textgt|,
+or the like.
+
+If you are using \LaTeX\ and prefer the standard version\footnote{Since v0.3,
+the ``standard version'' is similar to \pkg{jsclasses} and \pkg{bxjscls} rather
+than (u)\pLaTeX.} of \verb|\textmc| and \verb|\textgt|, you can declare
+\begin{verbatim}
+ \UseStandardCJKTextFontCommands
+\end{verbatim}
+In contrast,
+\begin{verbatim}
+ \UseFixJFMCJKTextFontCommands
+\end{verbatim}
+redefines \verb|\textmc| and \verb|\textgt| and is declared by default. These
+two commands are important. Consider the following example:
+\begin{trivlist}
+\item\relax{\ttfamily\hskip2em}\verb|\textgt{\Large |\TwoFwBoxes\verb|}|
+\end{trivlist}
+It causes a fatal error when the \pkg{fixjfm} version of \verb|\textgt| is used.
+The solution is to change \verb|\textgt| back to the standard version, either
+globally or locally:
+\begin{trivlist}\itemsep=0pt\relax\parsep=0pt\relax
+\item\relax{\ttfamily\hskip2em}%
+\verb|\UseFixJFMCJKTextFontCommands \textgt{|\TwoFwBoxes\verb|}|
+\item\relax{\ttfamily\hskip2em}%
+\verb|\UseStandardCJKTextFontCommands \textgt{\Large |\TwoFwBoxes\verb|}|
+\item\relax{\ttfamily\hskip2em}%
+\verb|\UseFixJFMCJKTextFontCommands \textgt{|\TwoFwBoxes\verb|}|
+\item\relax{\ttfamily\hskip1.5em}%
+\verb|{\UseStandardCJKTextFontCommands \textgt{\Large |\TwoFwBoxes\verb|}}|
+\end{trivlist}
+
+\section{Advanced usage}
+
+The spacing between two consecutive fullwidth punctuation marks is produced by
+a glue item specified in the corresponding JFM file. However, if the font is
+changed there, the JFM format cannot work correctly, so this package puts
+another glue item there to adjust the spacing. The natural width of the new glue
+item is calculated according to the corresponding JFM file, so you need not
+worry about it. However, the stretch and shrink components cannot be extracted
+from JFM, so the following two commands are provided:
+\begin{verbatim}
+ \SetFixJFMSpacingStretch
+ \SetFixJFMSpacingShrink
+\end{verbatim}
+They expect an argument specifying how much space to stretch and shrink
+respectively. This package sets both of them to \verb|0.05zw| by default.
+
+Macro writers may want to (re)define commands like the \pkg{fixjfm} version of
+\verb|\textmc| and \verb|\textgt| for CJK text fonts, thus the following command
+is provided:
+\begin{verbatim}
+ \DeclareFixJFMCJKTextFontCommand
+\end{verbatim}
+It is similar to \LaTeX's \verb|\DeclareTextFontCommand|. For example,
+\verb|\textmc| is redefined by this package as follows:
+\begin{verbatim}
+ \DeclareFixJFMCJKTextFontCommand\textmc{\mcfamily}
+\end{verbatim}
+and \verb|\textgt| is similar. In contrast,
+\begin{verbatim}
+ \DeclareStandardCJKTextFontCommand
+\end{verbatim}
+(re)defines a CJK text font command like the standard version of \verb|\textmc|
+and \verb|\textgt|. But there is a more convenient way: Suppose that you have a
+new CJK text font command \verb|\xyfamily|, then
+\begin{verbatim}
+ \AppendToUseXCJKTextFontCommands{\textxy}{\xyfamily}
+\end{verbatim}
+will do all you need and makes \verb|\Use...CJKTextFontCommands| also apply to
+\verb|\textxy|. This command and \verb|\Use...CJKTextFontCommands| can be given
+in any order, so you do not need to redeclare
+\verb|\UseFixJFMCJKTextFontCommands| (which is the default behaviour) if that is
+what you want.
+
+Finally, there are several macros that may be useful for \TeX nicians:
+\begin{verbatim}
+ \FixJFMSpacing
+ \fixjfmparindent
+ \FixJFMParindent
+ \EveryparPreHook
+ \EveryparPostHook
+ \ifUseFixJFMCJKTextFontCommands
+ \ifUseStandardCJKTextFontCommands
+\end{verbatim}
+They are worthless for ordinary use. If you are interested in them, please have
+a look at the source code.
+
+\section{Compatibility}
+
+The \LaTeX-only package \pkg{bxjaprnind} also focuses on the first bug mentioned
+above. It provides some additional functionalities and also supports some other
+\TeX\ engines. This package can be used together with \pkg{bxjaprnind}, but
+please note that if you prefer \pkg{bxjaprnind}, you have to load it before this
+package, and vice versa, in case both of them are loaded.
+
+\section{Acknowledgements}
+
+The source code of this package is mostly taken from\footnote{This package also
+improves the code slightly.} (in alphabetical order):
+\epTeX\ Wiki (Hironori Kitagawa):
+\begin{verbatim}
+ https://ja.osdn.net/projects/eptex/wiki/lastnodechar
+\end{verbatim}
+\pkg{everyhook} (Stephen Checkoway):
+\begin{verbatim}
+ https://ctan.org/pkg/everyhook
+\end{verbatim}
+\pkg{jsclasses} (Haruhiko Okumura et al.):
+\begin{verbatim}
+ https://ctan.org/pkg/jsclasses
+\end{verbatim}
+and \pkg{platex} (Kazuki Maeda \& Japanese \TeX\ Development Community):
+\begin{verbatim}
+ https://ctan.org/pkg/platex
+\end{verbatim}
+Many thanks to the authors of these packages. I would also like to thank
+Hironobu Yamashita, who helped me a lot.
+
+\section{History}
+
+\begin{history}{2017-09-02 v0.2}
+\item First public version.
+\end{history}
+
+\begin{history}{2017-09-04 v0.3}
+\item Fixes.
+\item Make \verb|\UseFixJFMCJKTextFontCommands| and
+ \verb|\UseStandardCJKTextFontCommands| also available after
+ \verb|\begin{document}|.
+\item Add \verb|\DeclareStandardCJKTextFontCommand| and use it for redefining
+ the standard version of \verb|\textmc| and \verb|\textgt|.
+\end{history}
+Thanks to Hironobu Yamashita for suggesting all these changes:
+\begin{verbatim}
+ https://github.com/Man-Ting-Fang/fixjfm/pull/1
+\end{verbatim}
+
+\begin{history}{2017-09-04 v0.4}
+\item Bug fix, thanks to Hironobu Yamashita:
+\end{history}
+\begin{verbatim}
+ https://github.com/Man-Ting-Fang/fixjfm/pull/2
+\end{verbatim}
+
+\begin{history}{2017-09-12 v0.5}
+\item Bug fix, thanks to Hironobu Yamashita:
+\end{history}
+\begin{verbatim}
+ https://github.com/Man-Ting-Fang/fixjfm/issues/3
+\end{verbatim}
+
+\begin{history}{2017-09-21 v0.6}
+\item Bug fix and improvement, thanks to Hironobu Yamashita:
+\end{history}
+\begin{verbatim}
+ https://github.com/Man-Ting-Fang/fixjfm/pull/4
+\end{verbatim}
+
+\begin{history}{2017-12-27 v0.7}
+\item Add \verb|\ifUseFixJFMCJKTextFontCommands| and
+ \verb|\ifUseStandardCJKTextFontCommands|.
+\end{history}
+
+\begin{history}{2018-03-24 v0.8}
+\item Add \verb|\AppendToUseXCJKTextFontCommands|.
+\end{history}
+
+\end{document}
diff --git a/macros/generic/fixjfm/fixjfm.sty b/macros/generic/fixjfm/fixjfm.sty
new file mode 100644
index 0000000000..11887daafc
--- /dev/null
+++ b/macros/generic/fixjfm/fixjfm.sty
@@ -0,0 +1,278 @@
+
+
+% fixjfm.sty
+% Copyright 2017--2018 Yue ZHANG
+% License: Knuth License (https://ctan.org/license/knuth)
+
+\csname ENDINPUTFIXJFMDOTSTY\endcsname
+
+\let\ENDINPUTFIXJFMDOTSTY=\endinput
+
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \else
+ \ProvidesPackage{fixjfm}[2018/03/24 v0.8 Fix JFM (for *pTeX)]%
+ \fi
+
+\edef\FIXJFMDOTSTYRESTORECATCODE{\catcode`\noexpand\@=\the\catcode`\@\relax}
+
+\catcode`\@=11\relax
+
+% common utilities
+
+\def\fixjfm@ifprimitive#1{%
+ \begingroup
+ \edef\fixjfm@temp@meaning{\meaning#1}%
+ \edef\fixjfm@temp@string{\string#1}%
+ \expandafter
+ \endgroup
+ \ifx\fixjfm@temp@meaning\fixjfm@temp@string}
+
+\fixjfm@ifprimitive\tate
+\else
+ \errmessage{pTeX / e-pTeX / upTeX / e-upTeX / ApTeX is required}%
+ \FIXJFMDOTSTYRESTORECATCODE
+ \expandafter\endinput
+\fi
+
+\def\fixjfm@empty{}
+
+\begingroup
+ \let\CATCODE=\catcode
+ \let\RELAX=\relax
+ \let\GDEF=\gdef
+ \let\ENDGROUP=\endgroup
+ \CATCODE`\k=12\RELAX
+ \CATCODE`\a=12\RELAX
+ \CATCODE`\n=12\RELAX
+ \CATCODE`\j=12\RELAX
+ \CATCODE`\i=12\RELAX
+ \CATCODE`\c=12\RELAX
+ \CATCODE`\h=12\RELAX
+ \CATCODE`\r=12\RELAX
+ \CATCODE`\t=12\RELAX
+ \CATCODE`\e=12\RELAX
+ \GDEF\FIXJFM@KANJICHARACTER{kanji character }%
+\ENDGROUP
+
+\def\fixjfm@get@inhibitxspcode#1{%
+ \expandafter\expandafter\expandafter\fixjfm@@get@inhibitxspcode
+ \expandafter\meaning\expandafter#1\FIXJFM@KANJICHARACTER\relax\fixjfm@nil}
+
+\expandafter\def\expandafter\fixjfm@@get@inhibitxspcode
+ \expandafter#\expandafter1\FIXJFM@KANJICHARACTER#2#3\fixjfm@nil{%
+ \count2=-1\relax
+ \def\fixjfm@temp@tokens{#1}%
+ \ifx\fixjfm@temp@tokens\fixjfm@empty
+ \count2=\inhibitxspcode`#2\relax
+ \fi}
+
+% \leavevmode
+
+\fixjfm@ifprimitive\quitvmode
+ \let\leavevmode=\quitvmode
+\fi
+
+% \fixjfmspacing
+
+\def\fixjfmspacing{\FixJFMSpacing}
+
+\newif\iffixjfm@lastnodechar@available@
+
+\fixjfm@ifprimitive\lastnodechar
+ \fixjfm@lastnodechar@available@true
+\fi
+
+\iffixjfm@lastnodechar@available@
+ \begingroup
+ \kansujichar1=\sjis"8ABF\relax % U+6F22: Kanji Han
+ \kansujichar2=\sjis"82A0\relax % U+3042: Hiragana A
+ \kansujichar3=\sjis"8142\relax % U+3002: CJK Full Stop
+ \xdef\fixjfm@kanji{\kansuji1}%
+ \xdef\fixjfm@kana{\kansuji2}%
+ \xdef\fixjfm@other{\kansuji3}%
+ \endgroup
+ \csname newif\expandafter\endcsname\csname iffixjfm@sp@status@\endcsname
+ \def\fixjfm@ifautospacing{%
+ \fixjfm@sp@status@false
+ \begingroup
+ \kanjiskip=10pt\relax
+ \setbox0=\hbox{\fixjfm@kanji\fixjfm@kanji\fixjfm@kanji}%
+ \dimen4=\wd0\relax
+ \noautospacing
+ \setbox0=\hbox{\fixjfm@kanji\fixjfm@kanji\fixjfm@kanji}%
+ \dimen2=\wd0\relax
+ \expandafter
+ \endgroup
+ \ifdim\dimen4>\dimen2\relax
+ \fixjfm@sp@status@true
+ \fi}%
+ \def\fixjfm@ifautoxspacing{%
+ \fixjfm@sp@status@false
+ \begingroup
+ \xspcode`\A=3\relax
+ \inhibitxspcode\sjis"8ABF=3\relax % U+6F22: Kanji Han
+ \xkanjiskip=20pt\relax
+ \setbox0=\hbox{\fixjfm@kanji A\fixjfm@kanji}%
+ \dimen4=\wd0\relax
+ \noautoxspacing
+ \setbox0=\hbox{\fixjfm@kanji A\fixjfm@kanji}%
+ \dimen2=\wd0\relax
+ \expandafter
+ \endgroup
+ \ifdim\dimen4>\dimen2\relax
+ \fixjfm@sp@status@true
+ \fi}%
+ \def\FixJFMSpacing{\futurelet\fixjfm@sp@temp@token\fixjfm@fixspacing}%
+ \def\fixjfm@fixspacing{%
+ \begingroup
+ \count0=\lastnodechar
+ \edef\fixjfm@sp@temp@tokens{\fixjfm@sp@temp@token}%
+ \expandafter\fixjfm@@fixspacing\fixjfm@sp@temp@tokens\relax\fixjfm@sp@nil
+ \ifnum\count0>-1\relax
+ \ifnum\count0<256\relax
+ \ifnum\xspcode\count0>1\relax
+ \ifnum\count2>1\relax
+ \fixjfm@ifautoxspacing
+ \iffixjfm@sp@status@
+ \hskip\xkanjiskip
+ \fi
+ \fi
+ \fi
+ \else
+ \fixjfm@ifautospacing
+ \iffixjfm@sp@status@
+ \hskip\kanjiskip
+ \fi
+ \fi
+ \setbox0=\hbox{%
+ \inhibitglue\char\count0\relax\fixjfm@sp@temp@token\inhibitglue}%
+ \setbox2=\hbox{%
+ \inhibitglue\char\count0 \fixjfm@sp@temp@token\inhibitglue}%
+ \dimen0=\wd2\relax
+ \advance\dimen0 by -\wd0\relax
+ \fixjfm@temp@hskip
+ \fi
+ \endgroup}%
+ \long\def\fixjfm@@fixspacing#1#2\fixjfm@sp@nil{%
+ \count2=1\relax
+ \ifcat#1\fixjfm@kanji
+ \else
+ \ifcat#1\fixjfm@kana
+ \else
+ \ifcat#1\fixjfm@other
+ \else
+ \count0=-1\relax
+ \count2=0\relax
+ \fi
+ \fi
+ \fi
+ \ifnum\count2>0\relax
+ \fixjfm@get@inhibitxspcode#1\relax
+ \fi}%
+ \def\SetFixJFMSpacingStretch#1{\def\fixjfm@temp@hskip@stretch{#1}}%
+ \def\SetFixJFMSpacingShrink#1{\def\fixjfm@temp@hskip@shrink{#1}}%
+ \def\fixjfm@temp@hskip{%
+ \hskip\dimen0 plus \fixjfm@temp@hskip@stretch
+ minus \fixjfm@temp@hskip@shrink\relax}%
+ \SetFixJFMSpacingStretch{0.05zw}%
+ \SetFixJFMSpacingShrink{0.05zw}%
+\else
+ \let\FixJFMSpacing=\fixjfm@empty
+ \def\SetFixJFMSpacingStretch#1{}%
+ \def\SetFixJFMSpacingShrink#1{}%
+\fi
+
+\newif\ifUseFixJFMCJKTextFontCommands
+\newif\ifUseStandardCJKTextFontCommands
+
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname DeclareTextFontCommand\endcsname\relax
+ \def\DeclareFixJFMCJKTextFontCommand#1#2{}%
+ \def\DeclareStandardCJKTextFontCommand#1#2{}%
+ \let\UseFixJFMCJKTextFontCommands=\fixjfm@empty
+ \let\UseStandardCJKTextFontCommands=\fixjfm@empty
+ \def\AppendToUseXCJKTextFontCommands#1#2{}%
+ \else
+ \def\DeclareFixJFMCJKTextFontCommand#1#2{%
+ \DeclareRobustCommand#1[1]{%
+ \relax\ifmmode\expandafter\nfss@text\fi
+ {#2\fixjfmspacing##1}\fixjfmspacing}}%
+ \def\DeclareStandardCJKTextFontCommand#1#2{%
+ \DeclareRobustCommand#1[1]{%
+ \relax\ifmmode\expandafter\nfss@text\fi{#2##1}}}%
+ \def\UseFixJFMCJKTextFontCommands{%
+ \UseFixJFMCJKTextFontCommandstrue
+ \UseStandardCJKTextFontCommandsfalse
+ \DeclareFixJFMCJKTextFontCommand\textmc{\mcfamily}%
+ \DeclareFixJFMCJKTextFontCommand\textgt{\gtfamily}}%
+ \def\UseStandardCJKTextFontCommands{%
+ \UseStandardCJKTextFontCommandstrue
+ \UseFixJFMCJKTextFontCommandsfalse
+ \DeclareStandardCJKTextFontCommand\textmc{\mcfamily}%
+ \DeclareStandardCJKTextFontCommand\textgt{\gtfamily}}%
+ \def\AppendToUseXCJKTextFontCommands#1#2{%
+ \g@addto@macro\UseFixJFMCJKTextFontCommands{%
+ \DeclareFixJFMCJKTextFontCommand#1{#2}}%
+ \g@addto@macro\UseStandardCJKTextFontCommands{%
+ \DeclareStandardCJKTextFontCommand#1{#2}}%
+ \ifUseFixJFMCJKTextFontCommands
+ \DeclareFixJFMCJKTextFontCommand#1{#2}%
+ \else
+ \DeclareStandardCJKTextFontCommand#1{#2}%
+ \fi}%
+ \UseFixJFMCJKTextFontCommands
+ \fi
+
+% \inhibitglue
+
+\fixjfm@ifprimitive\protected
+ \protected\def\<{\ifvmode\leavevmode\fi\inhibitglue}%
+\else
+ \def\<{\inhibitglue}%
+\fi
+
+% \fixjfmparindent
+
+\def\fixjfmparindent{\FixJFMParindent}
+
+\begingroup
+ \expandafter\ifx\csname useparheadparenindent\endcsname\relax % bxjaprnind.sty
+ \else
+ \global\let\FixJFMParindent=\fixjfm@empty
+ \global\let\EveryparPreHook=\fixjfm@empty
+ \global\let\EveryparPostHook=\fixjfm@empty
+ \aftergroup\FIXJFMDOTSTYRESTORECATCODE
+ \aftergroup\endinput
+ \fi
+\endgroup
+
+\def\FixJFMParindent{\futurelet\fixjfm@pi@temp@token\fixjfm@fixparindent}
+
+\def\fixjfm@fixparindent{%
+ \begingroup
+ \fixjfm@get@inhibitxspcode\fixjfm@pi@temp@token
+ \ifnum\count2=2\relax\inhibitglue\fi
+ \endgroup}
+
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname PushPostHook\endcsname\relax % everyhook.sty
+ \def\EveryparPreHook{}%
+ \def\EveryparPostHook{\fixjfmparindent}%
+ \let\fixjfm@previous@everypar=\everypar
+ \csname newtoks\expandafter\endcsname\csname everypar\endcsname
+ \let\fixjfm@private@everypar=\everypar
+ \fixjfm@private@everypar=\fixjfm@previous@everypar
+ \fixjfm@previous@everypar={%
+ \EveryparPreHook
+ \the\expandafter\fixjfm@private@everypar
+ \EveryparPostHook}%
+ \else
+ \PushPostHook{par}{\fixjfmparindent}%
+ \let\EveryparPreHook=\fixjfm@empty
+ \let\EveryparPostHook=\fixjfm@empty
+ \fi
+
+\FIXJFMDOTSTYRESTORECATCODE
+
+\endinput
diff --git a/macros/generic/fltpoint b/macros/generic/fltpoint
new file mode 120000
index 0000000000..381cdc815a
--- /dev/null
+++ b/macros/generic/fltpoint
@@ -0,0 +1 @@
+../latex/contrib/fltpoint \ No newline at end of file
diff --git a/macros/generic/fntproof/README b/macros/generic/fntproof/README
new file mode 100644
index 0000000000..5da89f9df1
--- /dev/null
+++ b/macros/generic/fntproof/README
@@ -0,0 +1,44 @@
+Files: fntproof.tex, fntproof-doc.tex fntproof-doc.pdf
+
+Purpose:
+
+ The file fntproof.tex is essentiallly Knuth's testfont.tex, modified
+ to make all tests noninteractive (no prompting for data).
+
+License:
+
+ All files are public domain.
+
+Usage:
+
+ You can input fntproof in a file, and then use the commands in that
+ file, or you can type the commands on the command line. By default,
+ the first "word" after the fntproof.tex has been read in is taken to
+ be the TFM name of a font to test. Use \noinit to delay the reading of
+ the font name.
+
+Examples:
+
+ Command line:
+ tex fntproof cmti10 <commands>
+ tex fntproof \noinit Normal text. \init cmti10 <commands>
+
+ In a file:
+ \input fntproof cmr10 <commands>
+ \input fntproof \noinit Normal text. \init cmti10 <commands>
+
+ <commands> include \table, \text, \sample which produce, respectively,
+ - a table of characters in the font,
+ - some text using the font, and
+ - both of the above.
+
+ All commands available in testfont.tex are included (in noninteractive
+ versions).
+
+Documentation:
+ See fntproof-doc.pdf for complete documentation. It may be regenerated
+ by running pdflatex (twice) on fntproof-doc.tex.
+
+--
+Daniel Luecking
+luecking AT-SIGN uark DOT edu
diff --git a/macros/generic/fntproof/fntproof-doc.pdf b/macros/generic/fntproof/fntproof-doc.pdf
new file mode 100644
index 0000000000..0a2745e88e
--- /dev/null
+++ b/macros/generic/fntproof/fntproof-doc.pdf
Binary files differ
diff --git a/macros/generic/fntproof/fntproof-doc.tex b/macros/generic/fntproof/fntproof-doc.tex
new file mode 100644
index 0000000000..5937314c07
--- /dev/null
+++ b/macros/generic/fntproof/fntproof-doc.tex
@@ -0,0 +1,578 @@
+\documentclass[draft]{article}
+\usepackage{mflogo}
+\addtolength\textwidth{.5in}
+\addtolength\oddsidemargin{-.25in}
+\usepackage{verbatim}
+\newcommand\prog[1]{\texttt{#1}}
+\newcommand\file[1]{\texttt{#1}}
+\newcommand\env[1]{\texttt{#1}}
+\renewcommand\"{\verb"}
+
+\newcommand\meta[1]{$\langle$\textit{#1}$\rangle$}
+\title{How to use \file{fntproof.tex}\\ and \file{testfont.tex}}
+\author{Dan Luecking\thanks{\copyright 2010
+ by Daniel H. Luecking. This software is public domain. If you make any
+ changes to this document, please remove or modify this copyright notice
+ before distributing your version, preferably with a different name.
+ This documents version 1.0 of \file{fntproof}}}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+ The macro file \file{fntproof.tex} is a noninteractive version of
+ D.~E.~Knuth's \file{testfont.tex}. Instead of prompting for font names
+ and commands, the user supplies them on the command line, or in a file.
+\end{abstract}
+
+
+\section{Introduction}
+
+I used to often run \prog{tex} on \file{testfont.tex}, which prompts for
+a font name and prompts for a command. Often, after ending the session,
+I would want to run almost the same command on almost the same font and
+would have to type almost everything over again, or else deal with my
+\prog{tex} program's rather primitive line recall/editing mechanism.
+
+Since I run \prog{tex} in a command shell which has better command line
+recall and rather better line editing capabilities than my \prog{tex}
+has, I wrote \file{fntproof.tex} to give me the same capabilities as
+\file{testfont.tex}, but allow me to specify the font and the commands
+on the command line.
+
+This is the documentation of \file{fntproof}. Since \file{testfont.tex}
+has no documentation outside of ``The \MF book'', I am also also
+documenting it. The reader is assumed to have some minimal knowledge of
+plain \TeX{}, especially the ``\"\font"'' command.
+
+Apart from the fact that \file{fntproof} can read the fontname from the
+command line, there are few differences between \file{testfont.tex} and
+\file{fntproof.tex}:
+
+\begin{itemize}
+ \item In \file{testfont}, the \"\init" command prompts for a fontname,
+ while \file{fntproof} arranges to read one typed on the command
+ line or in a file.
+
+ \item In \file{testfont}, \"\mixture", \"\alternation" and \"\series"
+ issue three prompts, while in \file{fntproof} they read three
+ arguments.
+
+ \item In \file{testfont}, \"\alphabet" and \"\ALPHABET" issue a
+ prompt, while in \file{fntproof} they read an argument.
+
+ \item In a \LaTeX{} document, \file{testfont} redefines the \"\table"
+ command, destroying the \env{table} environment, while
+ \file{fntproof} tries to detect \LaTeX{} and leave \"\table"
+ alone. The command \"\fonttable" then takes the place of
+ \file{testfont}'s \"\table" command.
+
+ \item In \file{testfont}, the primitive \TeX{} command \"\fontname" is
+ also overwritten, while \file{fntproof} uses a different
+ internal name for the same purpose. This require a couple of
+ other minor differences to be discussed later.
+
+ \item There are a few useful commands added.
+\end{itemize}
+
+Like \file{testfont}, \file{fntproof} can print a table of the font's
+characters and a bit of sample text and run other tests. It has
+noninteractive versions of all the interactive commands allowed by
+\file{testfont}.
+
+
+\section{Example command lines}\label{examples}
+
+\begin{itemize}
+ \item Produce sample text of cmr10:
+\begin{verbatim}
+ tex fntproof cmr10 \text\bye
+\end{verbatim}
+
+ \item Produce a table of cmr10 and sample text of cmti10 (pdf output).
+ Note the use of ``\"\init"'' to change to the new font:
+\begin{verbatim}
+ pdftex fntproof cmr10 \table \init cmti10 \text\bye
+\end{verbatim}
+
+ \item Produce a table and a test of digits for cmr10, only a table for
+ cmti10 at 12pt:
+\begin{verbatim}
+ tex fntproof cmr10 \table\digits\init{cmti10 at 12pt}\table\bye
+\end{verbatim}
+
+ \item Obtain a list of available commands and their meanings
+\begin{verbatim}
+ pdftex fntproof \help \end
+\end{verbatim}
+\end{itemize}
+
+Your command line interpreter may require you to quote or escape
+backslashes or other of its special characters in these examples. I am
+able to run all of these as-is in a command window under Windows XP
+using TeX Live 2008--2010. Of course the output appears in
+\file{fntproof.dvi} or \file{fntproof.pdf}.
+
+
+\section{The commands}
+
+A font can be specified by its TFM filename followed by a space (or a
+line end). Font filenames are allowed to contain most of \TeX{}'s
+special characters when \file{fntproof} is used. However, they cannot
+contain spaces or other whitespace characters, and they cannot begin
+with a left brace~(\"{"). There are even more limitations on the TFM
+filename typed at \file{textfont}'s prompt, as most special
+\TeX{} characters cause some problem or other.
+
+A command applies to the font most recently specified. The following
+commands are available. They are the same as those provided by the
+interactive version, \file{testfont.tex}, except they do not prompt for
+input, but require any arguments to follow the command.
+
+\begin{itemize}
+ \item \"\sample" \"\table" \"\text"\\
+ \"\sample" produces a table and some sample text; \"\table" produces
+ only the table, \"\text" only the text.
+
+ \item \"\mixture"\\
+ This takes three characters as arguments. The first character
+ (the ``background'') is mixed among all the characters from the
+ second argument to the third. For example, ``\"\mixture Xaz"'' produces
+\begin{verbatim}
+ XaXXaaXXXaaaXa
+ XbXXbbXXXbbbXb
+ ...
+\end{verbatim}
+ and so on, until z.
+
+ \item \"\alternation"\\
+ This is like \"\mixture", except ``\"\alternation Xaz"''
+ produces lines like
+\begin{verbatim}
+ XaXaXaXaXaXaXaXaX
+ XbXbXbXbXbXbXbXbX
+ ...
+\end{verbatim}
+ and so on.
+
+ \item \"\series"\\
+ Like the previous two it takes 3 arguments, but produces a
+ single line containing all the characters in the sequence. Thus,
+ ``\"\series Xaz"'' produces
+\begin{verbatim}
+ XaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzX
+\end{verbatim}
+
+ \item \"\alphabet" \"\ALPHABET"\\
+ These take one character as argument. It is the ``background''
+ and is mixed among all the lowercase, respectively uppercase
+ letters. So ``\"\ALPHABET x"'' is almost like
+ ``\"\series xAZ"'', but also includes the characters \AE, \OE,
+ and \O, while ``\"\alphabet X"'' is like ``\"\series Xaz"'', but
+ also includes \ae, \oe, \o, and \ss.
+
+ \item \"\lowers" \"\uppers" \"\digits" \"\names"
+ \"\punct"\\
+ These perform comprehensive tests of lowercase, uppercase,
+ digits, names and punctuation. For example, \"\lowers" is
+ like
+\begin{verbatim}
+ \alphabet a \alphabet b ...
+\end{verbatim}
+
+ and \"\digits" is like
+\begin{verbatim}
+ \series 009 \series 109 \series 209 ...
+\end{verbatim}
+
+ \item \"\bigtest" \"\math"\\
+ \"\bigtest" includes (more or less) all the previous
+ commands. \"\math" produces a large set of tests of math
+ (the font should be a math alphabetic font like cmmi10).
+
+ \item \"\help" \"\init" \"\noinit"\\
+ \"\help" produces a summary of available commands on the screen.
+
+ \"\init" prepares for the next font. In \file{testfont}, it
+ issues a prompt for a fontname and need not be invoke for the
+ first font, which is prompted for immediately after input.
+ In \file{fntproof}, it reads the following fontname, and it need
+ not be used before the first font (see the examples in
+ section~\ref{examples}), unless the filename begins with a
+ \TeX{} special character.
+
+ \"\noinit" turns off this automatic initialization. Use it when
+ you want some text before the first font test, or if you want
+ the current font to be used. Its syntax differs between
+ \file{fntproof} and \file{testfont}, see below.
+\end{itemize}
+
+Note: In \file{fntproof}, \"\init" examines the first following
+nonspace character. If that is a left brace (i.e., ``\"{"'')
+\"\init" assumes the font name is contained between that left brace
+and the first matching right brace~(``\"}"'').
+Multi-part font specifications (such as ``\"cmr10 at 12pt"'') must be
+enclosed in braces, and this \emph{must} be preceded by \"\init".
+
+For the commands that take character arguments, the actual characters
+might not be printed, especially in symbol fonts. Instead, the glyphs in
+the corresponding positions will appear. Most printable ASCII characters
+can be used in the argument, but not ``\"{"'', ``\"}"'', ``\"\"'' or space. In
+place of a literal character one can supply a numerical position in the
+font. This command:
+\begin{verbatim}
+ \mixture X{#97}{#122}
+\end{verbatim}
+has the same effect as this one:
+\begin{verbatim}
+ \mixture Xaz
+\end{verbatim}
+The numeric part of the argument (everything after after the \"#") can
+be (probably) any valid \TeX{} number. Your command line interpreter may
+require you to escape or ``quote'' the double quote marks which are used
+in \TeX{} for hexadecimal, the single quote marks used for octal or the
+back quote used in character code notation.
+
+A numerical argument must be enclosed in braces: a ``\"#"'' not in braces
+(or alone in braces) will be taken literally. For example,
+\begin{verbatim}
+ \mixture #120az
+\end{verbatim}
+would read ``\"#"'', ``\"1"'' and ``\"2"'' as the arguments and the rest,
+``\"0az"'', as plain \TeX{} code (i.e., characters to be printed).
+
+It should be noted that the implementation of \"\series" does not
+allow any ligatures or kerns between adjacent characters. This is also
+true of the commands based on \"\series": \"\alphabet", \"\ALPHABET",
+\"\lowers", \"\uppers", and \"\digits". It is true for both
+\file{testfont} and \file{fntproof}, which use the same internal
+implementation. If one wants to test these properties of a font, one
+must type in ones own text (see the following section).
+
+Another limitation: in the ``\"\alphabet"'' and ``\"ALPHABET"''
+commands, if the font has an encoding other than OT1, then the
+characters \ae, \oe, \o, \ss, \AE, \OE, and \O{} may not appear as
+advertised, since the implementation accesses them by position
+number. For PostScript fonts, a black box may appear where these
+characters should be.
+
+In addition to the commands listed, which are common to \file{fntproof}
+and \file{testfont}, \file{fntproof} supplies the following extra
+commands, not available in \file{testfont}.
+
+\begin{itemize}
+\item \"\initcurrentfont"\\
+ Use this to perform the functions of \"\init" on the current font.
+ This would normally be preceded by commands selecting the desired
+ font. See section~\ref{latex} for a \LaTeX{} example.
+
+\item \"\noinit"\\
+ In \file{testfont}, the only way to use this is to say
+ \"\let\noinit=!" \emph{before} inputting \file{testfont.tex}. This
+ cancels the immediate prompt for a font filename. But in
+ \file{fntproof}, ``\"\noinit"'' can also be used immediately
+ \emph{after} inputting \file{fntproof}. Either use cancels
+ \file{fntproof}'s assumption that the first following word is the
+ name of the font to be selected. This allows ordinary text to be
+ inserted before selecting a font. After this, the command \"\init"
+ allows a font to be specified.
+
+\item \"\headersfalse" \"\headerstrue" \"\theheader"\\
+ A side effect of the \"\init" command (including one implicitly
+ invoked by a font name following the input of \file{fntproof}) is
+ the printing of a single header line similar to the following:
+\begin{verbatim}
+ Test of cmti10 on July 31 at 1244
+\end{verbatim}
+ Use ``\"\headersfalse"'' to force the omission of all such headers
+ for any subsequent font. Use ``\"\headerstrue"'' to resume the
+ default behavior. In any circumstance, the header text can be
+ printed using ``\"\theheader"''.
+
+\item \"\thisfont" \"\getthisfont"\\
+ The macro ``\"\thisfont"'' produces the name of the font most
+ recently specified by an explicit or implicit \"\init" or by
+ \"\initcurrentfont". If no such initialization was done,
+ ``\"\getthisfont"'' will cause \"\thisfont" to be defined to the
+ text produced by the command sequence \"\fontname\font" (i.e., the
+ tfm filename of the current font---plus any ``\texttt{scaled}'' or
+ ``\texttt{at}'' clause).
+
+\item \"\fonttable"\\
+ As already mentioned, this is the alternative to \"\table" that must
+ be used in \LaTeX{}. It can also be used in plain \TeX{}.
+
+\end{itemize}
+
+
+\section{Other \TeX{} commands}
+
+\TeX{} commands besides the above can be inserted at any point except
+between \"\init" and the next fontname. No guarantee is given that they
+they will have the expected effect. Text will be printed in the whatever
+font is current. No text should be typed between ``\file{fntproof}'' and
+the first fontname or else it will be mistaken for a font (but see
+\"\noinit" above and examples of its use below).
+
+If the command line does not end in \"\end" or \"\bye", \TeX{} will wait
+for more input in its usual way, with a ``\texttt{*}'' prompt. If additional
+commands from the above list are entered (except \"\init"), they will be
+applied to the previously named font. Moreover, a new font name can be
+entered (after \"\init"). Of course, any plain \TeX{} commands can be
+entered. The session can be ended by entering \"\end" or \"\bye".
+
+
+\section{Use as a macro file}
+
+Like \file{testfont.tex}, \file{fntproof.tex} allows the commands to be
+used in a file rather than interactively, or on the command line. One
+can do this by writing ``\"\let\noinit=!"'' before inputting
+\file{testfont} or \file{fntproof}. This is somewhat more useful for
+\file{fntproof} than for \file{testfont} as \emph{all} the \file{fntproof}
+commands are noninteractive.
+
+Unlike \file{testfont}, \file{fntproof} also allows you to simply type
+``\"\noinit"'' \emph{immediately after} inputting it, for the same
+effect. For example, with \file{testfont} one would initialize the font
+oneself and then issue commands:
+\begin{verbatim}
+ \let\noinit=! \input testfont
+ Ordinary text in default font.
+ \def\fontname{cmti10}\startfont \table \text \bye
+\end{verbatim}
+Note that ``initializing a font'' after \file{testfont} is loaded
+amounts to defining \"\fontname" and then using the \"\startfont"
+command. The above example will produce a table and sample text of
+cmti10. Note that \"\startfont" alone will not work. If both steps are
+omitted, the \"\table" command will build a table of the current font,
+but certain preparatory steps will not be taken and some commands (but
+not \"\table") will produce errors.
+
+The corresponding \file{fntproof} method would be the following. Note
+that this could also be typed on the command line (all on one line)
+after the tex command (in that case the ``\"\input"'' would be omitted):
+\begin{verbatim}
+ \input fntproof \noinit
+ Ordinary text in default font.
+ \init cmti10 \table \text \bye
+\end{verbatim}
+Note that \file{testfont.tex} causes the \TeX{} primitive command
+\"\fontname" to be redefined. The macros in \file{fntproof} do not do
+this, but instead use \"\thisfont" for the same internal purposes as
+\file{testfont} uses \"\fontname".
+
+If one wanted to initialize a font immediately (with no intervening
+text in some other font), even this \"\noinit" hack is unnecessary:
+\begin{verbatim}
+ \input fntproof cmr10 \table \text \bye
+\end{verbatim}
+This would perform the auto-\"\init" on cmr10. In this case, any
+\"\headersfalse" command would have to be put just before the font name.
+Otherwise, it need only come before the next \"\init" command.
+
+In \file{testfont}, a command like \"\mixture" would produce three
+prompts to get the character or numeric arguments. For the corresponding
+\file{fntproof} commands, these arguments must be supplied and no
+interactive prompt occurs. One can get around these interactive prompts
+in \file{testfont}, but it is rather inconvenient:
+
+\begin{itemize}
+\item with \file{testfont}:
+\begin{verbatim}
+\let\noinit! \input testfont
+Some text in default font. Here is a mixture in cmti:
+\chardef\background`X
+\chardef\starting`a
+\chardef\ending`z
+\def\fontname{cmti10}\startfont
+\domix\mixpattern% \altpattern for the effect of \alternation
+\bye
+\end{verbatim}
+
+\item with \file{fntproof}:
+\begin{verbatim}
+\input fntproof \noinit
+Some text in default font. Here is a mixture in cmti:
+\init cmti10 \mixture Xaz \bye
+\end{verbatim}
+\end{itemize}
+
+For completeness, here are the other ways to avoid the interactive
+prompt when using \file{testfont} (right), compared to each of the
+\file{fntproof} commands (left).
+
+\begin{itemize}
+ \item \"\series Xaz" $\Rightarrow$ \"\chardef\background`X\!\doseries{`a}{`z}\par"
+ \item \"\alphabet X" $\Rightarrow$ \"\chardef\background`X\complower"
+ \item \"\ALPHABET X" $\Rightarrow$ \"\chardef\background`X\compupper"
+\end{itemize}
+
+In the \"\doseries" command, the arguments can be numbers:
+\"\doseries{97}{122}" is the same as \"\doseries{`a}{`z}". You can use
+numbers in the \"\chardef" commands. For example
+``\"\chardef\background88 "'' is the same as ``\"\chardef\background `X"''.
+Note: a space (or end-of-line) after explicit digits is almost
+mandatory to terminate the number before any following macros are
+expanded.
+
+Instead of ``\"\init" \meta{tfmname}'', one can use normal font
+selection commands, followed by ``\"\initcurrentfont"'', and then the
+testing commands (e.g., \"\fonttable", \"\text"). For example,
+\begin{verbatim}
+ \input fntproof
+ \font\x=cmdunh10 at 12pt \x
+ \initcurrentfont \table \text \bye
+\end{verbatim}
+See the next section for an example in \LaTeX{}. To do this with
+\file{testfont} would require the following incantations:
+\begin{verbatim}
+ \let\originalfontname\fontname
+ \let \noinit=!
+ \input testfont
+ \font\x=cmdunh10 at 12pt \x
+ \edef\fontname{\originalfontname\font}%
+ \startfont \table \text \bye
+\end{verbatim}
+
+Note that \"\init", \"\initcurrentfont" and some of the testing commands
+change some \TeX{} parameters. This could affect the typesetting of the
+rest of the document, so it might be wise to enclose a session of font
+testing in a group, if your document contains other material.
+
+Note also that the mere loading of \file{fntproof} or \file{testfont}
+invokes the following settings:
+\begin{verbatim}
+ \tracinglostchars=0
+ \tolerance=1000
+ \raggedbottom
+ \parindent=0pt
+ \hyphenpenalty=200
+ \doublehyphendemerits=30000
+\end{verbatim}
+These are suitable for the running of tests on fonts. If the rest of
+your document needs different parameters, it is your responsibility to
+reset these afterward. There are also numerous internal macros used by
+both \file{testfont} and \file{fntproof} that are not protected by
+having \texttt{@} in there name. This is another reason to input the
+macro file and use the testing macros inside a group.
+
+Finally, \file{testfont} turns off page numbering (in plain \TeX) when loaded.
+
+
+\section{Use with \LaTeX{}}\label{latex}
+
+In \LaTeX{}, printable text has to come after \"\begin{document}" so a
+minimal command line could be (typed without pressing [Enter] or [Return]):
+\begin{verbatim}
+ latex fntproof \noinit \documentclass{article}\begin{document}
+ \init cmr10 \fonttable \end{document}
+\end{verbatim}
+
+Thus with \LaTeX{}, \file{fntproof} might better be used in a file. Note
+also that \"\fonttable" is used instead of \"\table" to avoid destroying
+\LaTeX{}'s table environment. For example,
+\begin{verbatim}
+ \documentclass[12pt]{article}
+ \begin{document}
+ \input fntproof
+ \fontencoding{T1}\fontfamily{bch}\selectfont
+ \initcurrentfont
+ \fonttable
+ \end{document}
+\end{verbatim}
+This would produce a table of the Bitstream Charter font..
+
+The above font selection commands ultimately load the TFM file
+\texttt{bchr8t} magnified to \texttt{12pt}. Thus, the header
+text actually looks something like this:
+\begin{verbatim}
+ Test of bchr8t at 12.0pt on October 7, 2010 at 1649
+\end{verbatim}
+Moreover, ``\"\thisfont"'' will acquire the definition ``\texttt{bchr8t
+at 12.0pt}''.
+
+I have not tested \file{testfont.tex} much in \LaTeX{}. After the
+\"\let\noinit=!" hack, inputting \file{testfont} causes an
+error because \"\nopagenumbers" is undefined. Then the command
+\"\table", \"\text", or \"\sample" cause an error because \"\sevenrm" is
+undefined, but otherwise proceed correctly.
+
+
+\section{History}
+
+ 2009/05/05 -- first version\\
+ 2009/07/31 -- add \"\noinit", \"\ifheaders", \"\theheader"\\
+ 2009/11/12 -- revised documentation (comments)\\
+ 2010/01/03 -- further documentation revisions\\
+ 2010/10/11 -- documentation moved to separate file, added
+ \"\initcurrentfont" and \"\getthisfont".
+
+\bigskip
+
+\section{Appendix}
+
+The output of \file{fntproof}'s \"\help" command:
+\begin{verbatim}
+=== Main commands ==============
+\init switches to another font;
+\end or \bye finishes the run;
+\table prints the font layout in tabular format;
+\fonttable must be used instead of \table in LaTeX;
+ \text prints a sample text, assuming TeX text font conventions;
+\sample combines \table and \text;
+\mixture mixes a background character with a series of others;
+\alternation interleaves a background character with a series;
+\alphabet prints all lowercase letters within a given background
+\ALPHABET prints all uppercase letters within a given background
+\series prints a series of letters within a given background;
+\lowers prints a comprehensive test of lowercase;
+\uppers prints a comprehensive test of uppercase;
+\digits prints a comprehensive test of numerals;
+\math prints a comprehensive test of TeX math italic;
+\names prints a text that mixes upper and lower case;
+\punct prints a punctuation test;
+\bigtest combines many of the above routines;
+\help repeats this message;
+and you can use ordinary TeX commands (e.g., to \input a file).
+=== More commands ==============
+\noinit turns off automatic initialization of the first word as a font;
+\headersfalse \headerstrue turn off/resume printing of header text;
+\theheader print the header text;
+\thisfont print the name of font specified by \init;
+\getthisfont define \thisfont to be the current font;
+==================================
+\end{verbatim}
+
+\bigskip
+\filbreak
+\noindent The output of \file{testfont}'s \"\help" command:
+\begin{verbatim}
+\init switches to another font;
+\end or \bye finishes the run;
+\table prints the font layout in tabular format;
+\text prints a sample text, assuming TeX text font conventions;
+\sample combines \table and \text;
+\mixture mixes a background character with a series of others;
+\alternation interleaves a background character with a series;
+\alphabet prints all lowercase letters within a given backgroun
+\ALPHABET prints all uppercase letters within a given backgroun
+\series prints a series of letters within a given background;
+\lowers prints a comprehensive test of lowercase;
+\uppers prints a comprehensive test of uppercase;
+\digits prints a comprehensive test of numerals;
+\math prints a comprehensive test of TeX math italic;
+\names prints a text that mixes upper and lower case;
+\punct prints a punctuation test;
+\bigtest combines many of the above routines;
+\help repeats this message;
+and you can use ordinary TeX commands (e.g., to \input a file).
+\end{verbatim}
+
+\bigskip
+\filbreak
+\noindent Knuth's original \file{testfont.tex} comment:\\
+\texttt{\% A testbed for font evaluation (see The METAFONTbook, Appendix H)}
+
+\end{document}
+
diff --git a/macros/generic/fntproof/fntproof.tex b/macros/generic/fntproof/fntproof.tex
new file mode 100644
index 0000000000..70578bc26f
--- /dev/null
+++ b/macros/generic/fntproof/fntproof.tex
@@ -0,0 +1,377 @@
+% fntproof.tex
+%
+% Copyright 2010 by Daniel H. Luecking. Placed in the public domain.
+% If you make any changes, please remove or modify this copyright notice
+% before distributing your version, preferably with a different name.
+%
+% This is a noninteractive version of testfont.tex. Instead of prompting
+% for font names and commands, the user supplies them on the command
+% line, or in a file.
+%
+%
+% Original testfont.tex comment:
+% A testbed for font evaluation (see The METAFONTbook, Appendix H)
+%
+% (Most code changes from testfont.tex are explained in comments preceded
+% by "%DHL:")
+%
+\def\fntproofversion{1.0}
+\immediate\write16{This is fntproof.tex, version \fntproofversion.}
+\tracinglostchars=0
+\tolerance=1000
+\raggedbottom
+\parindent=0pt
+\hyphenpenalty=200
+\doublehyphendemerits=30000
+\hyphenation{prom-i-nent}%
+%
+\newcount\m \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}%
+\def\hours{\n=\time \divide\n 60
+ \m=-\n \multiply\m 60 \advance\m \time
+ \twodigits\n\twodigits\m}%
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}%
+%
+%DHL: These are used to sanitize the fontname.
+% Odd capitals to avoid overwriting other's macros (Knuth's own
+% overwriting notwithstanding :)
+\def\sTripprefix#1>{}%
+\def\sAnitize#1{\edef#1{\expandafter\sTripprefix\meaning#1}}
+\def\gobble#1{}%
+\def\firstofone#1{#1}%
+%
+% Modified from ifmtarg.sty, works around certain errors.
+\begingroup
+ \catcode`\Q=3
+ \long\gdef\xifmtarg#1#2Q#3#4#5\relax{#4}%
+ \long\gdef\ifnotempty#1{\xifmtarg#1QQ\firstofone\gobble\relax}%
+\endgroup
+%
+%DHL: For debug purposes: a command to read and show the file name.
+% This to test whether TeX special characters in the font name are
+% properly handled.
+%\def\showfont{%
+% \begingroup
+% \def\do##1{\catcode`##1=\other}\dospecials
+% \catcode`\ =10\relax\xshowfont
+%}%
+%\def\xshowfont#1 {%
+% \newlinechar`\^^J%
+% \message{^^J --> Font name #1 read from command line. <--^^J}%
+% \endgroup
+%}%
+%
+%DHL: \init will not prompt, but just read up to the next space.
+% We allow anything but whitespace in a filename. The filename argument
+% (of \xinit) is delimited by the next space. Alternatively, an
+% initial left brace is assumed to be grouping around the full font
+% name. In that case, \yinit reads the whole group
+\def\init{\futurelet\next\doinit}% to see if a brace follows
+\def\doinit{%
+ \begingroup
+ \def\do##1{\catcode`##1=\other}\dospecials\catcode`\ =10\relax
+ \ifx\next\bgroup
+ \catcode`\{=1 \catcode`\}=2
+ \expandafter\yinit
+ \else
+ \expandafter\xinit
+ \fi}
+\def\yinit #1{\fininit{#1}}%
+\def\xinit#1 {\fininit{#1}}%
+\def\fininit#1{%
+ \def\thisfont{#1}\sAnitize\thisfont\global\let\thisfont\thisfont
+ \endgroup
+ \par\everypar{}%
+ \startfont
+}%
+%
+%DHL:
+% This defines \everypar so that the first fontname triggers \init,
+% a lot like mproof.tex.
+\def\Init{\par\everypar{{\setbox0\lastbox}\everypar{}\init}}%
+%
+%DHL: \startfont is identical to the one in testfont.tex, except I've
+% added a \filbreak between fonts and a conditional to turn off the
+% header.
+\def\startfont{\font\testfont=\thisfont \spaceskip=0pt
+ \filbreak
+ \ifheaders \par
+ \leftline{\sevenrm Test of \thisfont\unskip\ on \today\ at \hours}%
+ \fi
+ \medskip
+ \testfont \setbaselineskip
+ \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt
+ \else\rightskip=0pt plus 2em \fi
+ \spaceskip=\fontdimen2\testfont % space between words (\raggedright)
+ \xspaceskip=\fontdimen2\testfont \advance\xspaceskip by\fontdimen7\testfont}%
+%
+\newif\ifheaders \headerstrue
+%DHL:
+% \getthisfont defines \thisfont to be the \fontname of the current
+% font. Unlike \init it does not sanitize \thisfont as \fontname returns
+% category 12 characters.
+%
+% \initcurrentfont performs the functions of \init on the current font,
+% including defining \thisfont.
+%
+% \theheader prints the header even when \headersfalse was issued. It
+% requires a definition for \thisfont.
+\def\getthisfont{\edef\thisfont{\fontname\font}}%
+\def\initcurrentfont{\noinit\getthisfont\startfont}%
+\def\theheader{%
+ \leftline{\sevenrm Test of \thisfont\ on \today\ at \hours}}%
+%
+%DHL:
+% One change to \help is use of "^^J" instead of "@" as \newlinechar.
+% Since no other command needs this, I have made it a local assignment.
+% I've added some delimiting lines as well.
+\begingroup
+\catcode`\|=0 \catcode`\\=\other
+|gdef|help{{|newlinechar`^^J|message{^^J%
+=== Main commands ==============^^J%
+\init switches to another font;^^J%
+\end or \bye finishes the run;^^J%
+\table prints the font layout in tabular format;^^J%
+\fonttable must be used instead of \table in LaTeX;^^J
+\text prints a sample text, assuming TeX text font conventions;^^J%
+\sample combines \table and \text;^^J%
+\mixture mixes a background character with a series of others;^^J%
+\alternation interleaves a background character with a series;^^J%
+\alphabet prints all lowercase letters within a given background;^^J%
+\ALPHABET prints all uppercase letters within a given background;^^J%
+\series prints a series of letters within a given background;^^J%
+\lowers prints a comprehensive test of lowercase;^^J%
+\uppers prints a comprehensive test of uppercase;^^J%
+\digits prints a comprehensive test of numerals;^^J%
+\math prints a comprehensive test of TeX math italic;^^J%
+\names prints a text that mixes upper and lower case;^^J%
+\punct prints a punctuation test;^^J%
+\bigtest combines many of the above routines;^^J%
+\help repeats this message;^^J%
+and you can use ordinary TeX commands (e.g., to \input a file).^^J%
+=== More commands ==============^^J%
+\noinit turns off automatic initialization of the first word as a font;^^J%
+\headersfalse \headerstrue turn off/resume printing of header text;^^J%
+\theheader print the header text;^^J%
+\thisfont print the name of font specified by \init;^^J%
+\getthisfont define \thisfont to be the current font;^^J%
+==================================^^J^^J}}}%
+|endgroup
+%
+\def\setbaselineskip{\setbox0=\hbox{\n=0
+\loop\char\n \ifnum \n<255 \advance\n 1 \repeat}
+\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }%
+%
+%DHL: This is used just before reading character arguments.
+\def\beginspecial{%
+ \begingroup
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode`\\=0\catcode`\ =10
+}%
+\let\endspecial\endgroup
+%
+%DHL:
+% We delay reading anything until the \catcode changes in \beginspecial.
+\long\def\setchar{\beginspecial\Xsetchar}%
+%
+%DHL:
+% #1 is the character name (\background, \starting or \ending)
+% #2 is the command to be run after the characters are "set".
+% #3 is the actual character.
+% Calls \dosetchar, then ends group and issues saved command
+\long\def\Xsetchar#1#2#3{\dosetchar#1{#3}\endspecial#2}%
+%
+%DHL:
+% #1 as in \Xsetchar
+% #2 actual character
+% Inserts character as a delimited parameter for \finsetchar
+% We could do all this in \Xsetchar, but I needed to isolate
+% this part for use in \getthree.
+\def\dosetchar#1#2{%
+ \def\next{#2}\expandafter\finsetchar\next\next#1}%
+%
+%DHL:
+% #1 is first token of character, #2 is the rest, possibly empty
+% #3 is the character command (same as #1 in \setchar).
+% If the first part is #, and the rest is not empty, assume the rest is
+% a number.
+\def\finsetchar#1#2\next#3{\global\chardef#3=`#1
+ \ifnum #3=`\#\relax \ifnotempty{#2}{\global\chardef#3=#2\relax}\fi}%
+%
+%DHL:
+% As \setchar no longer prompts for input, \promptthree is
+% changed to \getthree.
+\def\getthree{%
+ \beginspecial
+ \dogetthree
+}%
+\long\def\dogetthree#1#2#3#4{%
+ \dosetchar\background{#2}%
+ \dosetchar\starting{#3}%
+ \dosetchar\ending{#4}%
+ \endspecial#1%
+}%
+%DHL: The commands themselves. Very few changes at from here
+% to the end.
+%
+%DHL:
+% Extra braces in \mixture and \alternation because \getthree takes
+% the code to run as an argument. This is so it can get at the character
+% arguments that follow.
+\def\mixture{\getthree{\domix\mixpattern}}%
+\def\alternation{\getthree{\domix\altpattern}}%
+\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}%
+\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}%
+\def\domix#1{\par\chardef\0=\background \n=\starting
+ \loop \chardef\1=\n #1\endgraf
+ \ifnum \n<\ending \advance\n 1 \repeat}%
+%
+\def\!{\discretionary{\background}{\background}{\background}}%
+%DHL: Extra braces in \series also. Same reason as above.
+\def\series{\getthree{\!\doseries\starting\ending\par}}%
+\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat}%
+\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par}%
+\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par}%
+\def\compdigs{\!\doseries{`0}{`9}\par}%
+\def\alphabet{\setchar\background\complower}%
+\def\ALPHABET{\setchar\background\compupper}%
+%
+\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}}%
+\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}}%
+\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}}%
+\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2
+ \loop{#1} \ifnum\background<#3\m=\background\advance\m 1
+ \chardef\background=\m \repeat \chardef\background=#4
+ \loop{#1} \ifnum\background<#5\m=\background\advance\m 1
+ \chardef\background=\m \repeat}%
+%
+\def\names{ {\AA}ngel\aa\ Beatrice Claire
+ Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris
+ Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave
+ Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula
+ Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par}%
+\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid}%
+ \dopunct{HIE}\dopunct{TIP}\dopunct{fluff}%
+ \$1,234.56 + 7/8 = 9\% @ \#0\par}%
+\def\dopunct#1{#1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\ #1*\ #1.\par}%
+%
+\def\bigtest{\sample
+ hamburgefonstiv HAMBURGEFONSTIV\par
+ \names \punct \lowers \uppers \digits}%
+%
+\def\math{\textfont1=\testfont \skewchar\testfont=\skewtrial
+ \mathchardef\Gamma="100 \mathchardef\Delta="101
+ \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104
+ \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107
+ \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A
+ \def\ii{i} \def\jj{j}
+ \def\\##1{|##1|+}\mathtrial
+ \def\\##1{##1_2+}\mathtrial
+ \def\\##1{##1^2+}\mathtrial
+ \def\\##1{##1/2+}\mathtrial
+ \def\\##1{2/##1+}\mathtrial
+ \def\\##1{##1,{}+}\mathtrial
+ \def\\##1{d##1+}\mathtrial
+ \let\ii=\imath \let\jj=\jmath \def\\##1{\hat##1+}\mathtrial}%
+\newcount\skewtrial \skewtrial='177
+\def\mathtrial{$\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L \\M \\N \\O
+ \\P \\Q \\R \\S \\T \\U \\V \\W \\X \\Y \\Z \\a \\b \\c \\d \\e \\f \\g
+ \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p \\q \\r \\s \\t \\u \\v \\w \\x \\y
+ \\z \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta \\\eta \\\theta
+ \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi \\\rho \\\sigma \\\tau
+ \\\upsilon \\\phi \\\chi \\\psi \\\omega \\\vartheta \\\varpi \\\varphi
+ \\\Gamma \\\Delta \\\Theta \\\Lambda \\\Xi \\\Pi \\\Sigma \\\Upsilon
+ \\\Phi \\\Psi \\\Omega \\\partial \\\ell \\\wp$\par}%
+\def\mathsy{\begingroup\skewtrial='060 % for math symbol font tests
+ \def\mathtrial{$\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L
+ \\M \\N \\O \\P \\Q \\R \\S \\T \\U \\V \\W \\X \\Y \\Z$\par}
+ \math\endgroup}%
+%
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}}% octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}}% hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}%
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}}% \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}%
+\newif\ifskipping
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}%
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}%
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}%
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}%
+\def\fonttable{$$\global\n=0
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}%
+\def\endchart{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}%
+\def\:{\setbox0=\hbox{\noboundary\char\n\noboundary}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }%
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}%
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}%
+%
+\def\text{{\advance\baselineskip-4pt
+\setbox0=\hbox{abcdefghijklmnopqrstuvwxyz}
+\ifdim\hsize>2\wd0 \ifdim 15pc>2\wd0 \hsize=15pc \else \hsize=2\wd0 \fi\fi
+On November 14, 1885, Senator \& Mrs.~Leland Stanford called
+together at their San Francisco mansion the 24~prominent men who had
+been chosen as the first trustees of The Leland Stanford Junior University.
+They handed to the board the Founding Grant of the University, which they
+had executed three days before. This document---with various amendments,
+legislative acts, and court decrees---remains as the University's charter.
+In bold, sweeping language it stipulates that the objectives of the University
+are ``to qualify students for personal success and direct usefulness in life;
+and to promote the publick welfare by exercising an influence in behalf of
+humanity and civilization, teaching the blessings of liberty regulated by
+law, and inculcating love and reverence for the great principles of
+government as derived from the inalienable rights of man to life, liberty,
+and the pursuit of happiness.'' \moretext
+(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}}%
+\def\moretext{?`But aren't Kafka's Schlo{\ss} and {\AE}sop's {\OE}uvres
+often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's official r\^ole
+in fluffy souffl\'es? }%
+\def\omitaccents{\let\moretext=\relax}%
+%
+\def\sample{\fonttable\text}%
+%DHL: Adjustments for LaTeX:
+\ifx\AtBeginDocument\UndEfInEd
+ \let\table\fonttable
+\else
+ \ifx\sevenrm\UndEfInEd
+ \def\sevenrm{\normalfont\fontfamily{cmr}\fontsize{7}{9}\selectfont}%
+ \fi
+\fi
+%
+%DHL:
+% \Init causes first fontname to auto-\init itself. For this purpose, the
+% fontname must begin with a character with category 11 or 12. As in
+% testfont.tex, this can be turned off by \let\noinit! before this file is
+% input. With fntproof, we have the alternative of using the command
+% \noinit *after* it is input.
+\ifx\noinit!\else\Init\fi \def\noinit{\everypar{}}%
diff --git a/macros/generic/formlett/formlett.sty b/macros/generic/formlett/formlett.sty
new file mode 100644
index 0000000000..418dafd360
--- /dev/null
+++ b/macros/generic/formlett/formlett.sty
@@ -0,0 +1,1868 @@
+% MAKE FORM LETTER for multiple receivers via
+% plain TeX, LaTeX 2.09 or LaTeX2e
+%
+% written by Zhuhan JIANG
+% University of Western Sydney
+% Parramatta NSW 2150.
+% Email: z.jiang@uws.edu.au
+%
+% FILENAME: formlett.sty
+% VERSION: 2.3 May 2003
+% COPYRIGHT: GNU convention preferred.
+%
+%
+% NEW COMMANDS
+% \paras \blockparas \addressparas \PAGENO \NOPAGENUMBERS
+% \paradefaults \loaddefaultparas \delparadefaults \paranames
+% \showparas \preview \previewtrue \previewfalse \existfile
+% \localparastrue \localparasfalse \nodefaultstrue \nodefaultsfalse
+% \beginpilemode \endpilemode \delimiters \defaultmarks \blockmarks
+% \beginblockmode \endblockmode \beginlinemode \endlinemode
+% \beginrawblockmode \endrawblockmode \beginrawlinemode \endrawlinemode
+% \beginletter \endletter \moreletter \inputletter \inputfile
+% \boxmore \textbox \addressbox \ADDRESSBOX \fillzeros
+% \beginlist \endlist \beginrawlist \endrawlist \printfile
+% \begincomment \endcomment \begincolumns \endcolumns \readstyles
+% \beginlabels \endlables \smooth \initstyle \initclass \labelsquit
+% \firstread \beginfile \endfile \checkparas \ifemptyparas \cachedata
+% \newarray \delarray \readarray \checkARRAYNAME \ifemptydata
+%
+%
+% NOTE
+% You only need to know a SMALL portion of the above commands
+% in order to use the style file: easy to use is our key purpose!
+%
+%
+% VERSION HISTORY:
+% 1.0 8/93
+% 1.2 10/93 major rewriting, only basic mode still
+% compatible with 1.0;
+% support for raw text list added
+% 1.3 fixed a minor bug of 1.2;
+% support for commenting out letters added
+% 2.0 11/93 compatible with 1.2, 1.3;
+% labels utility added; support for fixed number
+% of parameter lines added
+% 2.03 2/94 TAB char represents 8 spaces instead of 4;
+% fixed a bug on multi-columns output
+% 2.1 1/95 added parameter checker and dynamic array facilities;
+% compatible with LaTeX2e;
+% slight name changes: \figbox -->\textbox
+% 2.2 1/95 renamed an internal command (\array) to avoid
+% conflict with LaTex.
+% 2.3 5/2003 separated programmer's manual from the style file,
+% added a new user manual.
+%
+%
+% %SIMPLE EXAMPLE in Plain TeX:
+%
+% \input formlett.sty
+% \beginletter \pageno=1
+% \paras--\paras[2]--\paras[3]\par
+% \paras[1][2] -- \paras[2][2] -- \paras[4][4] -- \paras[][2]
+% \vfill\eject
+% \endletter
+% \preview
+% \moreletter % first letter
+% 1-ONE;;;1-FOUR+%
+% 2-ONE;2-TWO;2-THREE;++;;;4-FOUR!
+%
+% \moreletter % second letter
+% 1-one;1-two;1-three;1-four
+% +2-one;;2-three; ++ ;;;4-four!
+% \end
+%
+%
+% %TYPICAL EXAMPLE in LaTeX
+%
+% \documentstyle[formlett]{article}
+% \textwidth=3.2in
+% \begin{document}
+%
+% \beginletter
+% \paranames % optional
+% \tt<<FULL NAME>>;%
+% \tt<<ADDRESS-etc>>;%
+% +\tt<<GIVEN NAME>>;%
+% \tt<<MISSING ITEM>>;%
+% \tt<<PHONE NUMBER>>!
+% \loaddefaultparas % optional
+%
+% \NOPAGENUMBERS\parindent=0pt
+% \noindent{\it\paras[1]}\par
+% \blockparas[2]\par\bigskip
+%
+% Dear \paras[1][2],\par\medskip
+% We have been looking for
+% \paras[2][2] for quite a while
+% without any luck, could you help
+% us out? If so, please ring
+% \paras[3][2]. \par\medskip
+% Cheers!\hfill Michael\vfill\eject
+% \endletter
+% \preview \showparas
+%
+% \paradefaults % optional
+% To whom this may concern
+% +Sir or Madam;something;%
+% 061-225-9905!
+%
+%
+% %\beginlabels % optional
+% % uncomment the above line and its matching
+% % \endlabels later on, if you want to get the
+% % mailing labels.
+% % So one LaTeX run to get all the letters, and
+% % an EXTRA run to produce all the labels by
+% % activating \beginlabels
+%
+%
+% \blockmarks
+% \beginblockmode
+%
+% Mrs L Stenson
+% \#1-20 Sunset Street
+% Hillside, Norway
+% ------ separate groups
+% Louise
+% a Bible
+% 220-8888
+% ========= separate cluster
+%
+% ...... force entry next line
+%
+% Above empty line active
+%
+% \endblockmode comment ignored
+%
+% \defaultmarks
+% \moreletter
+% S Wales,;%
+% \addressbox[2in][1em]{%
+% University of Manchester Institute
+% of Science and Technology, This is
+% a long address line: it will be
+% wrapped up automatically.}%
+% +;a \TeX\ package \gstr\ manual and
+% many more (\cstr)!
+%
+% \beginlinemode
+% Z Jiang
+% UNE, Arimdale
+%
+% T Ribbons
+% UMIST, Manchester
+% \endlinemode
+%
+% \beginpilemode
+%
+% C Anderson;42nd Street;USA+Christine;your service invoice!
+%
+% D Holmes;Flat \#2, Finneybank Rd;London+David;the tax receipt;%
+% 071-902 7799!
+%
+% \endpilemode
+%
+% %\endlabels
+% % uncomment the above line and if its matching
+% % \beginlabels is set previously for labels
+%
+%
+% \begincomment{} % this is only a tip
+% % Comment out the letters that you already sent
+%
+% \moreletter parameters for letter one!
+% \moreletter letter two!
+%
+% \endcomment
+%
+% \end{document}
+%
+%
+%%%%% To run the above examples, remove the first '%' character in each line
+%
+%
+%
+%
+%BEGINMACROS
+%
+%
+\ifx\ENDINPUT\undefined\else\message{skipped}\endinput\fi
+%
+\message{2.3 <26/5/2003>}%
+%
+{\catcode`\@=11\relax \def\temp@macro{\space\space\space\space}%
+\wlog{\temp@macro FORMLETT version 2.3 May 2003 By Z Jiang}%
+\wlog{\temp@macro University of Western Sydney, Australia}%
+\wlog{\temp@macro Email: z.jiang@uws.edu.au}}%
+%
+% SAVE @'s STATUS
+%
+\xdef\EntryFormLett{\the\catcode`\@}\catcode`\@=11\relax
+\gdef\MAX@CHR@CODE{255}% maximum charcode for saving catcode
+% % change it to 127 for TeX 2
+% % may change it to 0 if no raw mode is to be used
+% IS LATEX ?
+%
+\newif\ifISLATEX
+\ifx\pageno\undefined@\global\ISLATEXtrue\else\global\ISLATEXfalse\fi
+%
+% a private \l@@p
+\def\l@@p#1\repe@t{\def\b@dy{#1}\iter@te}%
+\def\iter@te{\b@dy\let\n@xt=\iter@te \else\let\n@xt=\relax\fi \n@xt}%
+\let\repe@t=\fi %
+%
+% NEW MEASURES etc
+%
+\def\new@measures{%
+ \def\temp@@macro##1##2##3{\expandafter\ifx\csname ##3temp##2##1\endcsname
+ \relax\edef\next{\noexpand\csname new##1\noexpand\endcsname
+ \csname ##3temp##2##1\endcsname}%
+ \else\let\next\relax\fi\next}%
+ \def\temp@macro##1{%
+ \temp@@macro{##1}{@}{}\temp@@macro{##1}{@@}{}\temp@@macro{##1}{@@@}{}}%
+ \temp@macro{count}\temp@macro{toks}\temp@macro{box}\temp@macro{read}%
+ \temp@@macro{if}{@}{if}\temp@@macro{if}{@@}{if}\temp@@macro{if}{@@@}{if}%
+ \def\temp@@macro##1{\expandafter\ifx\csname temp##1dim\endcsname
+ \relax\edef\next{\noexpand\csname newdimen\noexpand\endcsname
+ \csname temp##1dim\endcsname}%
+ \else\let\next\relax\fi\next}%
+ \temp@@macro{@}\temp@@macro{@@}\temp@@macro{@@@}%
+}%
+\let\temp@@@macro=\wlog\def\wlog#1{}\new@measures
+%
+%
+%%% GENERAL STACK
+%
+\def\make@STKcount{\csname newcount\endcsname
+ \STKcount\global\STKcount=0\relax}%
+\ifx\STKcount\undefined@
+ \def\next{\make@STKcount}\else\def\next{}\fi
+\next % ensures stack pointer not flushed if this piece of code
+ % is loaded again
+%
+\long\def\push#1{\global\advance\STKcount1\relax
+\expandafter\gdef\csname STK\the\STKcount\string~\endcsname{#1}}%
+%
+\def\popnil{\expandafter\let\expandafter\temp@macro
+ \csname STK\the\STKcount\string~\endcsname
+ \ifnum\STKcount>0\global\expandafter\let
+ \csname STK\the\STKcount\string~\endcsname=\undefined@
+ \global\advance\STKcount-1%
+ \else
+ \def\temp@macro{}\global\STKcount=0%
+ \fi\relax % \temp@macro for pop
+}%
+%
+\def\pop{\popnil\temp@macro}%
+%
+%
+%% GET PARAMETERS
+%
+\long\def\get@nepara[#1][#2]{{\def\next@{#2}%
+\ifx\next@\empty\push{#1}\else\push{#2}\fi}\ag@in}%
+%
+\long\def\get@para\left@#1\right@{%
+\def\check@{%
+ \ifx[\next@ \def\full@####1{\get@nepara[#1]####1}%
+ \else \def\full@{\get@nepara[#1][#1]}\fi
+ \full@}%
+\futurelet\next@\check@}%
+%
+\long\def\do@nepara\left@#1\right@#2\p@r@end{%
+\gdef\p@r@data{#2}\global\advance\p@r@count1\get@para\left@#1\right@}%
+%
+\def\ag@in{\ifx\p@r@data\empty \def\next@{\relax
+\getp@r@s\run@CMD}\else
+\def\next@{\expandafter\do@nepara\p@r@data\p@r@end}\fi
+\next@}%
+%
+\def\run@CMD{\csname STK\the\STKcount\string~\endcsname}%
+%
+\newcount\p@r@count
+\long\def\st@ckparas#1\p@r@end{%
+\global\p@r@count=0\gdef\p@r@data{#1}\ag@in}%
+%
+%
+% PARAMETER ASSIGNMENT
+%
+%% \newcount\temp@count
+\newtoks\p@r@one \newtoks\p@r@two \newtoks\p@r@three
+\newtoks\p@r@four \newtoks\p@r@five \newtoks\p@r@six
+\newtoks\p@r@seven \newtoks\p@r@eight \newtoks\p@r@nine
+\def\getp@r@s{\temp@count=\p@r@count
+{\loop
+ \ifnum\temp@count>0 %
+ \expandafter\let\expandafter
+ \temp@macro\csname STK\the\STKcount\string~\endcsname
+ \ifcase\temp@count
+ \or \global\p@r@one=\expandafter{\temp@macro}%
+ \or \global\p@r@two=\expandafter{\temp@macro}%
+ \or \global\p@r@three=\expandafter{\temp@macro}%
+ \or \global\p@r@four=\expandafter{\temp@macro}%
+ \or \global\p@r@five=\expandafter{\temp@macro}%
+ \or \global\p@r@six=\expandafter{\temp@macro}%
+ \or \global\p@r@seven=\expandafter{\temp@macro}%
+ \or \global\p@r@eight=\expandafter{\temp@macro}%
+ \or \global\p@r@nine=\expandafter{\temp@macro}%
+ \else \errmessage{Parameter capacity exceeded.}%
+ % this should never happen: TeX's max para no. is 9
+ \fi
+ \global\expandafter\let
+ \csname STK\the\STKcount\string~\endcsname=\undefined@%
+ \global\advance\STKcount-1%
+ \global\advance\temp@count-1\relax
+ \fi
+ \ifnum\temp@count>0 %
+\repeat}}%
+%
+\def\clrp@r@s{%GLOBALLY clear
+\global\p@r@one={}\global\p@r@two={}\global\p@r@three={}%
+\global\p@r@four={}\global\p@r@five={}\global\p@r@six={}%
+\global\p@r@seven={}\global\p@r@eight={}\global\p@r@nine={}}%
+% The above is the minimum for setting default parametrisation
+%
+%
+% ARRAY STRUCTURE
+%
+% \newarray\ARRAYNAME
+% \delarray\ARRAYNAME
+%
+% \ARRAYNAME(A1,..,An)={T}
+% \readarray{ARRAYNAME}{ B1 & B2 & ... & Bm }
+% \dataheight
+%
+% \data(A1,...,An)=\data( A1 + (A2-1)*\dataheight +
+% ... + (An-1)*\dataheight^{n-1} )
+% if \normalindextrue
+% =\data( An + (An-1 -1)*\dataheight +
+% ... + (A1)*\dataheight^{n-1} )
+% if \normalindexfalse
+%
+% \checkARRAYNAME(A1,..,An)
+% \ifemptydata valid when \checkARRAYNAME is just executed
+% \cachedata: keeps the data of \ARRAYNAME(m)
+% when \checkARRAYNAME(m) is executed
+%
+% e.g.
+%
+% \newarray\Table
+% \readarray{Table}{one&two& \unknownmacro && &six}
+% \Table(7)={seven}
+% \dataheight=0 % or 1 or < 0
+% \Table(7) = \Table(2,6,1) % 7=1+(2-1)+(6-1)+(1-1)
+% \normalindexfalse
+% \dataheight=3
+% \Table(7) = \Table(1,7) = \Table(3,1)
+% \normalindextrue
+% \Table(7) = \Table(7,1) = \Table(1,3)
+%
+% \checkTable(4) \ifemptydata (4)=empty \fi
+% \checkTable(5) \ifemptydata\else (5)=nonempty \fi
+% \ifx\cachedata\space ={\tt <space>}\fi
+% \checkTable(1000) \ifemptydata (1000)=empty \fi
+%
+% \delarray\Table
+%
+%
+\xdef\EntryArrayJob{\the\catcode`\@}\catcode`\@=11\relax
+\newif\ifemptydata \newcount\dataheight
+\newif\ifnormalindex \normalindexfalse
+%
+\newcount\array@width \newcount\index@count \newcount\index@total
+\newif\ifone@VEC \newif\if@rev@index
+% \newtoks\temp@toks \newcount\temp@count
+% \newcount\temp@@count \newcount\temp@@@count
+%
+\long\def\assign@VEC#1(#2)=#3{\temp@count=#2 \relax
+\get@max@count{total@#1}\temp@count
+\expandafter\gdef\csname#1#2\string~\endcsname{#3}}
+\def\get@VEC#1(#2){\csname#1#2\string~\endcsname}
+\def\clrarr@y#1(#2){%
+ \global\expandafter\let\csname#1#2\string~\endcsname=\undefined@}
+%
+\def\testarr@y#1(#2){%
+ \expandafter\let\expandafter\temp@macro\csname#1#2\string~\endcsname
+ \ifx\temp@macro\relax \def\temp@macro{}\fi}%
+%
+\def\arr@y#1(#2){\def\check@VEC{%
+ \ifx=\next@VEC \def\full@VEC####1{\assign@VEC#1(#2)####1}%
+ \else \def\full@VEC{\get@VEC#1(#2)}\fi \full@VEC}%check@VEC
+\futurelet\next@VEC\check@VEC}
+%
+\def\get@index(#1)#2\safty@mark{\one@VEC#2,\safty@mark
+ \def\next@@VEC{#1}\ifx\next@@VEC\empty\def\next@@VEC{\array@width}\fi
+ \if@rev@index
+ {\temp@count=1 \advance\index@count1 \relax
+ \ifnum\index@count<\index@total
+ \loop \multiply\temp@count \next@@VEC
+ \advance\index@count-1 \relax
+ \ifnum\index@count>0 \repeat
+ \fi \global\temp@@count\temp@count }%
+ \else \multiply\temp@@count \next@@VEC \fi
+ \ifnum\temp@@count=0 \temp@@count=1 \relax \fi
+ \advance\temp@count-1 \ifnum\temp@count<0 \temp@count=0 \fi
+ \multiply\temp@count \temp@@count
+ \advance\temp@@@count by \temp@count \advance\index@count1
+ \ifone@VEC
+ \def\next@@VEC{\index@total=\index@count \advance\temp@@@count1 }%
+ \else \one@VEC#2\safty@mark \edef\next@@VEC{\noexpand\get@index(#1)%
+ \the\temp@toks\noexpand\safty@mark}%
+ \fi \next@@VEC}%
+%
+\def\one@VEC#1,#2\safty@mark{\def\temp@macro{#2}\temp@toks={#2}%
+ \ifx\temp@macro\empty \one@VECtrue \else \one@VECfalse \fi
+ \temp@count=#1 \relax }%
+%
+\def\get@all@index(#1)#2\safty@mark{%
+ \temp@@@count=0 \temp@@count=0 \index@count=0 \@rev@indexfalse
+ \get@index(#1)#2\safty@mark
+ \ifnormalindex\else
+ \temp@@@count=0 \temp@@count=0 \index@count=0 \@rev@indextrue
+ \get@index(#1)#2\safty@mark \fi }%
+%
+\def\read@array[#1]#2#3{\temp@count=1
+ \def\one@item##1#1##2\safty@mark{\def\temp@macro{##2}\temp@toks={##2}%
+ \ifx\temp@macro\empty\else
+ \def\temp@macro{\one@item##2\safty@mark}\fi
+ {\temp@toks={##1}\def\temp@@macro{\arr@y{#2}(\the\temp@count)=}%
+ \expandafter\temp@@macro\expandafter{\the\temp@toks}}%
+ \expandafter\edef\csname total@#2\endcsname{\the\temp@count}%
+ \advance\temp@count1 \temp@macro}%
+ \one@item#3#1\safty@mark }%
+%
+\def\strip@esc#1{\temp@count=\escapechar \escapechar=-1 %
+ \temp@toks=\expandafter{\string#1}\escapechar\temp@count}
+\def\get@max@count#1#2{\edef\temp@macro{\csname #1\endcsname}%
+ \ifnum\temp@macro<#2 \expandafter\xdef\csname #1\endcsname{\the#2}\fi}%
+%
+\def\newarray#1{\strip@esc{#1}%
+ \expandafter\gdef\csname total@\the\temp@toks\endcsname{0}%
+ \expandafter\edef\csname\the\temp@toks\endcsname(##1)%
+ {\noexpand\get@all@index(\noexpand\dataheight)##1\noexpand\safty@mark
+% \noexpand\get@max@count{total@\the\temp@toks}\noexpand\temp@@@count
+ \noexpand\arr@y{\the\temp@toks}(\noexpand\the\noexpand\temp@@@count)}%
+ \expandafter\edef\csname check\the\temp@toks\endcsname(##1)%
+ {\noexpand\get@all@index(\noexpand\dataheight)##1\noexpand\safty@mark
+ \noexpand\testarr@y{\the\temp@toks}(\noexpand\the
+ \noexpand\temp@@@count)\noexpand\let\noexpand\cachedata
+ \noexpand\temp@macro\noexpand\ifx\noexpand\temp@macro\noexpand\empty
+ \noexpand\emptydatatrue\noexpand\else\noexpand\emptydatafalse
+ \noexpand\fi}}%
+%
+\def\delarray#1{\strip@esc{#1}% delete array globally
+ \temp@count=0 \temp@@count=\csname total@\the\temp@toks\endcsname
+ \loop \expandafter\global\expandafter\let
+ \csname\the\temp@toks\string~\endcsname\undefined@
+ \advance\temp@count1 %
+ \ifnum\temp@count<\temp@@count \repeat % global loop for less memory
+ \global\expandafter\let\csname total@\the\temp@toks\endcsname\undefined@
+ \global\expandafter\let\csname \the\temp@toks\endcsname\undefined@
+ \global\expandafter\let\csname check\the\temp@toks\endcsname\undefined@ }%
+%
+\def\readarray#1#2{\read@array[&]{#1}{#2}}%
+%
+\catcode`\@=\EntryArrayJob\relax
+%
+%
+% EXIST FILE ?
+%
+% \temp@iftrue if the file #1 exist when tested via \existfile{#1}%
+% \newread\temp@read
+\def\existfile#1{\temp@iftrue
+\openin\temp@read=#1\relax
+\ifeof\temp@read \temp@iffalse \fi \closein\temp@read}%
+%
+% RAW CHARACTERS
+%
+\def\raw@chars[#1][#2][#3][#4][#5]{%
+ % #1=11, #2=\`=12, #3=^^I=10, #4=char32=10, #5=^^M=5
+ % all chars of catcode 11 or 12 are NOT changed
+ \temp@count=-1\relax %
+ \l@@p \advance\temp@count1\relax %
+ \temp@@count=\the\catcode\temp@count \relax
+ \ifnum\temp@@count=11 \else
+ \ifnum\temp@@count=12 \else
+ \catcode\temp@count=11\relax \fi\fi
+ \ifnum\temp@count<\MAX@CHR@CODE\repe@t %
+ \catcode`\%=#1\catcode`\^=#1\catcode`\_=#1%
+ \catcode`\&=#1\catcode`\$=#1\catcode`\#=#1%
+ \catcode`\{=#1\catcode`\}=#1\catcode`\@=#1%
+ \catcode`\~=#1\catcode`\\=#1%
+ \catcode`\`=#2\catcode`\^^I=#3\catcode`\ =#4%
+ \catcode`\^^M=#5\relax %
+}%
+%
+\chardef\temp@char=`\`\catcode`\`=13\relax
+\def\rm@ligature{\def`{\null\string`}}%
+\catcode\temp@char=12\relax
+%
+\catcode`\^^I=13\relax%
+\def\set@tab{\def^^I{\ \ \ \ \ \ \ \ }}\catcode`\^^I=10\relax%
+\catcode`\^^M=13\relax\def\set@cr{\def^^M{\par}}\catcode`\^^M=5\relax%
+\catcode`\ =13\relax\def\set@space{\def {\ }}\catcode`\ =10\relax%
+%
+% TEST EMPTY LINE
+%
+\catcode`\ =13\relax% space active
+%
+% Delete leading spaces (catcode=13)
+% Throw the rest to \temp@macro
+\long\def\del@truespaces#1#2\s@fetymark{\temp@iffalse%
+\def\temp@macro{#1}\def\one@space{ }\def\temp@@macro{}%
+\ifx\temp@macro\one@space% front spaces not allowed
+\def\temp@macro{#2}%
+\ifx\temp@macro\empty\temp@iftrue%
+\else\def\temp@@macro{\del@truespaces#2\s@fetymark}\fi%
+\fi%
+\temp@@macro}%
+%
+\catcode`\ =10\relax%
+%
+% \temp@iftrue if empty line,
+% \temp@macro holds nonspace part (space catcode=13 or normal)
+\long\def\is@emptyline#1{\def\one@space{ }%
+ \def\temp@macro{#1}\def\temp@@macro{}\temp@iftrue
+ \ifx\temp@macro\empty
+ \else \ifx\temp@macro\one@space
+ \else \def\temp@@macro{\del@truespaces#1\s@fetymark}%
+ \fi
+ \fi
+\temp@@macro}%
+%
+% TEST STRING
+%
+%% \newif\iftemp@if \newtoks\temp@toks
+% return \iftemp@iftrue if yes,
+% \first@half,\second@half are global
+\long\def\test@str#1#2{%
+ \long\def\strip@endmark##1\s@fetymarkI#1\s@fetymark{%
+ \gdef\second@half{##1}}%
+ \long\def\strip@markI##1\s@fetymarkI\s@fetymark{%
+ \gdef\first@half{##1}}%
+ \long\def\p@rse##1#1##2\s@fetymark{%
+ \gdef\first@half{##1}%
+ \gdef\second@half{##2}%
+ \ifx\second@half\empty
+ \strip@markI##1\s@fetymark \temp@iffalse
+ \else
+ \strip@endmark##2\s@fetymark \temp@iftrue
+ \fi}%
+ \temp@toks={#2\s@fetymarkI#1\s@fetymark}%
+ \expandafter\p@rse\the\temp@toks }%
+%
+% #1 supposed to a toks register
+\long\def\test@tokstr#1#2{% #1 =toks
+ \temp@toks={#2}%
+ \edef\temp@macro{\noexpand\test@str{#1}{\the\temp@toks}}%
+ \temp@macro }%
+%
+% MAKE ESCAPE CHAR
+%
+% \esc@=the character '\' of catcode 11
+\newtoks\name@endtoks \newtoks\true@endtoks
+\catcode`\*=0\relax *catcode`*\=11*relax
+*gdef*esc@{\}%*name@endtoks={\endrawlist}%
+*catcode`*\=0*relax \catcode`\*=12\relax
+%
+%
+% TWO DIMENSIONAL ARRAY / LETTER PARAMETER STACKS
+%
+\def\stack@num@twodim[#1]{\temp@count=-1%
+ \expandafter\ifx\csname #1*0\string~\endcsname\undefined@
+ \temp@count=0\fi
+ \expandafter\ifx\csname #1*0\string~\endcsname\relax
+ \temp@count=0\fi \relax
+ \ifnum\temp@count<0
+ \temp@count=\csname #1*0\string~\endcsname \relax
+ \else \expandafter\gdef
+ \csname #1*0\string~\endcsname{0}%
+ \fi }%
+%
+%
+\newcount\R@Wcount \R@Wcount=0
+\newcount\R@Dcount \R@Dcount=0
+\newif\ifload@defaults \load@defaultsfalse % i.e. to LET stack (not DEF)
+%
+\long\def\rowpush#1{%
+\ifload@defaults % for default para stack
+ \ifnum\R@Dcount>0\else \global\R@Dcount=1 \fi
+ \stack@num@twodim[DEF\the\R@Dcount]%
+ \advance\temp@count1\relax
+ \expandafter\gdef
+ \csname DEF\the\R@Dcount*\the\temp@count\string~\endcsname{#1}%
+ \expandafter\xdef\csname DEF\the\R@Dcount*0\string~\endcsname
+ {\the\temp@count}%
+\else
+ \ifnum\R@Wcount>0\else \global\R@Wcount=1 \fi
+ \stack@num@twodim[LET\the\R@Wcount]%
+ \advance\temp@count1\relax
+ \expandafter\gdef
+ \csname LET\the\R@Wcount*\the\temp@count\string~\endcsname{#1}%
+ \expandafter\xdef\csname LET\the\R@Wcount*0\string~\endcsname
+ {\the\temp@count}%
+\fi
+}%
+%
+\def\clr@row{%
+\ifload@defaults % for default para stack
+ \stack@num@twodim[DEF\the\R@Dcount]%
+ {\loop \ifnum\temp@count>0\relax
+ \global\expandafter\let
+ \csname DEF\the\R@Dcount*\the\temp@count\string~\endcsname=\undefined@%
+ \advance\temp@count-1\relax \fi
+ \ifnum\temp@count>0 \repeat}%
+ \global\expandafter\let
+ \csname DEF\the\R@Dcount*0\string~\endcsname=\undefined@
+\else
+ \stack@num@twodim[LET\the\R@Wcount]%
+ {\loop \ifnum\temp@count>0\relax
+ \global\expandafter\let
+ \csname LET\the\R@Wcount*\the\temp@count\string~\endcsname=\undefined@%
+ \advance\temp@count-1\relax \fi
+ \ifnum\temp@count>0 \repeat}%
+ \global\expandafter\let
+ \csname LET\the\R@Wcount*0\string~\endcsname=\undefined@
+\fi
+}%
+%
+\def\clr@allrows{%
+\ifload@defaults
+% for default para stack
+ {\loop \ifnum\R@Dcount>0\relax {\clr@row}%
+ \global\advance\R@Dcount-1\relax \fi
+ \ifnum\R@Dcount>0 \repeat}%
+ \global\R@Dcount=0\relax
+\else
+ {\loop \ifnum\R@Wcount>0\relax {\clr@row}%
+ \global\advance\R@Wcount-1\relax \fi
+ \ifnum\R@Wcount>0 \repeat}%
+ \global\R@Wcount=0\relax
+\fi
+}%
+%
+% LOAD DEFAULT
+% update paras in LET array with defaults in DEF array
+%
+% \newtoks\temp@toks
+\newif\ifnodefaults \nodefaultsfalse
+\def\sub@loop{% \sub@loop is always called via {\sub@loop}
+ \loop % inner loop: reverse order
+ \temp@@count=0 % flag -> not counter: 0=no need for updating
+ \expandafter\ifx\csname LET\the\temp@@@count*\the\temp@count
+ \string~\endcsname\undefined@ \temp@@count=1\fi
+ \expandafter\ifx\csname LET\the\temp@@@count*\the\temp@count
+ \string~\endcsname\relax \temp@@count=1\fi\relax
+ %
+ \expandafter\ifx\csname LET\the\temp@@@count*\the\temp@count
+ \string~\endcsname\trivi@l \temp@@count=1\fi\relax
+ %
+ \ifnum\temp@@count>0
+ \expandafter\let\expandafter\temp@macro
+ \csname DEF\the\temp@@@count*\the\temp@count\string~\endcsname
+ \temp@toks=\expandafter{\temp@macro}%
+ \ifx\temp@macro\relax \global\expandafter\let
+ \csname LET\the\temp@@@count*\the\temp@count\string~\endcsname
+ =\undefined@
+ \else \expandafter\xdef
+ \csname LET\the\temp@@@count*\the\temp@count\string~\endcsname
+ {\the\temp@toks}\fi
+ \fi
+ \advance\temp@count-1\relax
+ \ifnum\temp@count>0
+ \repeat}% for speed
+%
+% above macro not to stand alone
+% it is removed from \loaddefaultparas for better speed
+%
+\def\loaddefaultparas{%
+\ifnodefaults\else % active only if \nodefaultsfalse
+ \def\trivi@l{\b@group\relax\e@group}% == empty parameter
+ \temp@count=\R@Wcount
+ {\loop % legalise LET array's extension
+ \advance\temp@count1\relax
+ \ifnum\temp@count>\R@Dcount\else
+ \expandafter\xdef
+ \csname LET\the\temp@count*0\string~\endcsname{0}\fi
+ \ifnum\temp@count<\R@Dcount \repeat}%
+ \ifnum\R@Wcount<\R@Dcount \global\R@Wcount=\R@Dcount \fi
+%
+ \temp@@@count=1 % row counter
+ {\loop
+ \stack@num@twodim[DEF\the\temp@@@count]%
+ \temp@@count=\temp@count\relax
+ \stack@num@twodim[LET\the\temp@@@count]%
+ \ifnum\temp@count<\temp@@count \temp@count=\temp@@count\relax \fi
+ % update LET array's counter
+ \expandafter\xdef
+ \csname LET\the\temp@@@count*0\string~\endcsname{\the\temp@count}%
+ % now \temp@count is current max row width
+ {\sub@loop}% update a row
+ \advance\temp@@@count 1\relax
+ \ifnum\temp@@@count>\R@Wcount\temp@@count=0\else\temp@@count=1\fi
+ \relax
+ \ifnum\temp@@count>0 \repeat}%
+\fi % of \ifnodefaults
+}%
+%
+% HOUSE KEEPING
+%
+\newif\ifshowp@r@ \showp@r@true % default mode
+\def\show@paras{\showp@r@true\lettercontents}%
+\def\showparas{\show@paras}%
+%
+\def\b@group{\iflocalparas\bgroup\fi}%
+\def\e@group{\iflocalparas\egroup\fi}%
+%
+\long\def\lettercontents{}%
+%
+\def\inputletter#1{\save@catcodes[OLD][0][\MAX@CHR@CODE][/13/]\beginletter
+ \save@catcodes[TMP][0][\MAX@CHR@CODE][]\get@catcodes[OLD]\existfile{#1}%
+ \iftemp@if \input#1%
+ \else \immediate\write16{Letter File <#1> not found.}\fi
+ \get@catcodes[TMP]\endletter}%
+%
+\def\inputfile#1{\relax\existfile{#1}\iftemp@if
+ \input#1 \else \immediate\write16{File <#1> not found.}\fi
+ \relax}%
+%
+\def\preview{\preview@}%
+%
+%
+% PAGE NUMBER
+% for both TeX and LaTeX
+%
+\ifISLATEX
+ \let\PAGENO=\c@page \def\NOPAGENUMBERS{\pagestyle{empty}}\else
+ \let\PAGENO=\pageno \let\NOPAGENUMBERS=\nopagenumbers \fi
+%
+%
+% SINGLE PARAMETER
+%
+\def\paras{\push{%
+ \edef\next@@{\noexpand\rowcolp@r@s[\the\p@r@two][\the\p@r@one]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@1\right@\left@1\right@\p@r@end}%
+%
+% NOTE:
+% 1. default parameters are enclosed between \left@ and \right@,
+% and is supplied after \st@ckparas. All defaults (may be empty) must
+% be supplied.
+% 2. \rowcolp@r@s is the name of the macro that doesn't take defaults
+% 3. \the\p@r@one, .., \the\p@r@nine represent #1,.., #9 .
+% 4. \paras is the new macro that behaves like \rowcolp@r@s but now
+% takes defaults
+% 5. change accordingly if one wants to implement defaults to other
+% existing macros.
+% 6. limitation: '[' and ']' are now not allowed as macro parameters.
+%
+%
+\def\rowcolp@r@s[#1][#2]{%
+ \ifpreview {\leavevmode
+ \boxmore[1pt]{\boxmore[3pt]{\hbox
+ {\font\tiny@rm=cmr5\tiny@rm ~#1 -- #2~}}}}\relax
+ \else \csname LET#1*#2\string~\endcsname \fi}%
+%
+%
+% GET \paras[m][n] AND TEST EMPTYNESS
+% \checkparas[m][n]{T} stores true content of \Tm*n~ into \cachedata
+% and set \ifemptyparas to true if the content is empty
+%
+% Typical use: \checkparas[m][n]{LET} \checkparas[m][n]{DEF}
+%
+\newif\ifemptyparas
+\def\check@@paras[#1][#2]#3{%
+ \expandafter\let\expandafter\cachedata\csname #3#1*#2\string~\endcsname
+ \ifx\cachedata\relax \def\cachedata{}\else
+ \temp@toks=\expandafter{\cachedata}%
+ \def\cachedata\b@group\relax##1\e@group\safty@mark{\def\cachedata{##1}}%
+ \expandafter\cachedata\the\temp@toks\safty@mark \fi
+ \ifx\cachedata\empty\emptyparastrue\else\emptyparasfalse\fi}%
+\def\check@paras[#1][#2]#{\check@@paras[#1][#2]}%
+\def\checkparas{\push{%
+ \edef\next@@{\noexpand\check@paras[\the\p@r@two][\the\p@r@one]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@1\right@\left@1\right@\p@r@end}%
+%
+%
+% ADDRESS BOXES
+%
+% \newbox\temp@box\newdimen\temp@dim
+\long\def\fig@box[#1]#2{%#1=width of box
+ \setbox\temp@box=\vbox{\hsize #1\noindent\strut #2\strut}%
+ \temp@dim=\ht\temp@box
+ \advance\temp@dim\dp\temp@box\advance\temp@dim-2ex
+ \dp\temp@box=\temp@dim\ht\temp@box=2ex\box\temp@box}%
+%
+\long\def\textbox{\push{%
+ \edef\next@@{\noexpand\fig@box[\the\p@r@one]}%
+ \popnil\next@@}\st@ckparas\left@8truecm\right@\p@r@end}%
+%
+\ifx\figbox\undefined@\let\figbox\textbox\fi % compatibility with ver 2.03
+%
+\long\def\box@more[#1]#2{\vbox{\hrule\hbox{\vrule\kern#1\vbox
+ {\kern#1\hbox{#2}\kern#1}\kern#1\vrule}\hrule}}%
+%
+\long\def\boxmore{\push{%
+ \edef\next@@{\noexpand\box@more[\the\p@r@one]}%
+ \popnil\next@@}\st@ckparas\left@3pt\right@\p@r@end}%
+%
+\long\def\address@box[#1][#2]#3{%
+ \noindent\hskip#2\textbox[#1]{\hskip-#2\relax #3}}%
+%
+\long\def\addressbox{\push{%
+ \edef\next@@{\noexpand\address@box%
+ [\the\p@r@one][\the\p@r@two]}%
+ \popnil\next@@}\st@ckparas\left@8truecm\right@\left@1.5em\right@\p@r@end}%
+%
+\long\def\ADDRESSBOX#1#2#3{% intended for \blockparas
+ \noindent\hskip#2\textbox[#1]{\hskip-#2\relax #3}}%
+%
+%
+% BLOCKPARAS and ADDRESSPARAS
+%
+\newcount\blockC@Lcount \newcount\blockT@Pcount
+\long\def\block@paras[#1][#2][#3][#4]{% #2-th group, from #1 to end,
+ % each para is surrounded by #3 from left and #4 from right
+ % If #4=\relax, an extra {} is applied to the \paras so that
+ % #3 may be a macro acting on the \paras
+ \def\next@one{#2}\def\next@two{#1}\def\next@three{#3}\def\next@four{#4}%
+ \ifx\next@one\empty\def\next@one{1}\fi
+ \ifx\next@two\empty\def\next@two{1}\fi
+ \ifpreview {\leavevmode % three line border box
+ \boxmore[1pt]{\boxmore[1pt]{\boxmore[3pt]{\hbox
+ {\font\tiny@rm=cmr5\tiny@rm \font\small@tt=cmtt8%
+ ~\next@one ~-- \next@two~(+):~
+ \small@tt\meaning\next@three
+ ~<<paras>> \meaning\next@four}}}}}\relax
+ \else
+ \blockC@Lcount=-1%
+ \expandafter\ifx\csname LET\next@one*0\string~\endcsname\undefined@
+ \blockC@Lcount=0\fi
+ \expandafter\ifx\csname LET\next@one*0\string~\endcsname\relax
+ \blockC@Lcount=0\fi \relax
+ \ifnum\blockC@Lcount<0
+ \blockC@Lcount=\csname LET\next@one*0\string~\endcsname\relax \fi
+ \blockT@Pcount=\next@two
+ \advance\blockT@Pcount by-1\relax
+ \l@@p % not to be grouped
+ \advance\blockT@Pcount1\relax
+ \ifnum\blockT@Pcount>\blockC@Lcount\else
+ \def\temp@macro{\relax}% some overhead, but safer
+ \ifx\next@four\temp@macro % add {} to \paras, so that a macro can act
+ % on the whole \paras
+ \next@three{\csname LET\next@one*\the\blockT@Pcount\string~\endcsname}%
+ \else
+ \next@three\csname LET\next@one*\the\blockT@Pcount
+ \string~\endcsname\next@four
+ \fi
+ \fi
+ \ifnum\blockT@Pcount<\blockC@Lcount\repe@t
+\fi}%
+%
+%
+\def\blockparas{\push{%
+ \edef\next@@{\noexpand\block@paras[\the\p@r@one][\the\p@r@two]%
+ [\the\p@r@three][\the\p@r@four]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@1\right@\left@1\right@%
+ \left@\noindent\right@\left@\par\right@\p@r@end}%
+%
+%
+\long\def\address@paras[#1][#2][#3][#4]{%
+ \block@paras[#1][#2][\par\noindent\ADDRESSBOX{#3}{#4}][\relax]\par}%
+%
+\def\addressparas{\push{%
+ \edef\next@@{\noexpand\address@paras[\the\p@r@one][\the\p@r@two]%
+ [\the\p@r@three][\the\p@r@four]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@1\right@\left@1\right@%
+ \left@8truecm\right@\left@1.5em\right@\p@r@end}%
+%
+%
+% MAIN PROCESSING MACRO
+%
+\newif\ifconti@one \newif\ifconti@two
+\newif\ifl@stline \newif\ifl@stLINE
+\newif\ifpreview \previewfalse
+\newif\iflocalparas \localparastrue
+%
+\newtoks\name@paratoks \name@paratoks={;}%
+\newtoks\name@grouptoks \name@grouptoks={+}%
+\newtoks\name@clustertoks \name@clustertoks={!}%
+%
+%
+\long\def\delimiters#1#2#3{% LONG MACRO
+%
+%%%% MAIN GET: get a group of parameters from a cluster
+%
+\long\def\refillst@ck##1#3{\def\d@t@one{##1#3}%
+ {\loop\conti@onefalse
+ \ifx\d@t@one\undefined@ \else \@ddoneline\conti@onetrue\fi
+ \ifconti@one\repeat}}%
+%
+\long\def\testl@stline##1#2##2#3##3\s@fetymark{%
+ \def\next{##2}\ifx\next\empty
+ \l@stlinetrue \else \l@stlinefalse \fi
+ \def\next{##3}\def\nextsample{#2#3}%
+ \ifx\next\nextsample\l@stlinefalse\fi}%
+%
+\long\def\l@stline##1#3{{\sub@fill{##1}}\let\d@t@one=\undefined@}%
+\long\def\onem@reline##1#2##2#3{{\sub@fill{##1}}\def\d@t@one{##2#3}}%
+%
+\long\def\@ddoneline{\temp@toks=\expandafter{\d@t@one}%
+ \expandafter\testl@stline\the\temp@toks#2#3\s@fetymark
+ \ifl@stline \expandafter\l@stline\the\temp@toks
+ \else \expandafter\onem@reline\the\temp@toks \fi}%
+%
+%%%% SUB GET : get parameters from a group
+%
+\long\def\sub@fill##1{%
+ \ifload@defaults \global\advance\R@Dcount by 1\else
+ \global\advance\R@Wcount by 1\fi\relax
+ \clr@row\def\d@t@two{\relax##1#3}% %%care: extra \relax added
+ {\loop\conti@twofalse
+ \ifx\d@t@two\undefined@ \else \@ddoneLINE\conti@twotrue\fi
+ \ifconti@two\repeat}}%
+%
+\long\def\moreletter##1#3{\showp@r@false
+ \clr@allrows\refillst@ck##1#3\lettercontents\clr@allrows\showp@r@true}%
+%
+\def\endletter{\relax}%
+\long\def\true@letter##1\endletter{\long\def
+ \lettercontents{\begingroup\catcode`\^^M=5\relax
+ \def\pstr{#1}\def\gstr{#2}\def\cstr{#3}\relax##1\relax\endgroup}}%
+\let\beginletter\true@letter
+%
+\long\def\testl@stLINE##1#1##2#3##3\s@fetymark{%
+ \def\next{##2}\ifx\next\empty%
+ \l@stLINEtrue \else \l@stLINEfalse \fi%
+ \def\next{##3}\def\nextsample{#1#3}%
+ \ifx\next\nextsample\l@stLINEfalse\fi}%
+%
+\long\def\l@stLINE##1#3{%
+ \rowpush{\b@group##1\e@group}\let\d@t@two=\undefined@}%
+ \long\def\onem@reLINE##1#1##2#3{%
+ \rowpush{\b@group##1\e@group}\def\d@t@two{\relax##2#3}}%%care
+%
+\long\def\@ddoneLINE{\temp@toks=\expandafter{\d@t@two}%
+ \expandafter\testl@stLINE\the\temp@toks#1#3\s@fetymark%
+ \ifl@stLINE\expandafter\l@stLINE\the\temp@toks %
+ \else \expandafter\onem@reLINE\the\temp@toks \fi}%
+%
+\def\para@names{\ifshowp@r@
+ \def\next@@{{\load@defaultsfalse\clr@allrows}\refillst@ck}\else
+ \long\def\next@@####1#3{\relax}\fi \next@@}%
+%
+\long\def\para@defaults##1#3{\load@defaultstrue
+ \clr@allrows\refillst@ck##1#3\load@defaultsfalse}%
+%
+\def\preview@{{\previewtrue\moreletter #3}}%
+%
+\long\def\out@letter##1#3{\showp@r@false\clr@allrows
+ \refillst@ck##1#3\lettercontents\clr@allrows\showp@r@true
+ \pile@letters}%
+%
+\name@paratoks={#1}\name@grouptoks={#2}\name@clustertoks={#3}%
+%
+}% END OF LONG MACRO
+%
+\long\def\paranames#1!{\ifshowp@r@
+ \begingroup\delimiters{;}{+}{!}\para@names#1!\endgroup\fi}%
+\long\def\paradefaults#1!{%
+ \begingroup\delimiters{;}{+}{!}\para@defaults#1!\endgroup}%
+%
+\def\delparadefaults{{\load@defaultstrue\clr@allrows}}%
+%
+\def\defaultmarks{\delimiters{;}{+}{!}}%
+\def\blockmarks{\delimiters{....}{----}{====}}%
+%
+%
+% TEST MACRO
+%
+% test if a token is a macro
+% \newif\iftemp@if
+\def\sub@ismacro#1#2#3#4#5#6#7\s@fetymark{% check only 'm,c,:'
+ \if#1m\else\temp@iffalse\fi % \if#2a\else\temp@iffalse\fi
+ \if#3c\else\temp@iffalse\fi % \if#4r\else\temp@iffalse\fi
+ \if#6:\else\temp@iffalse\fi }% \if#5o\else\temp@iffalse\fi
+%
+\def\ismacro#1#2\s@fetymark{%\expandafter\ismacro\meaning\token\s@fetymark
+ \temp@iftrue
+ \if#1\esc@\else
+ \sub@ismacro#1#2\s@fetymark
+ \fi }%
+%
+\long\def\del@token#1{}%
+\def\del@space#1 {}%
+%
+% PILEMODE: the basic mode
+%
+\def\pile@letters{%
+\def\check@{%
+ \def\buffer@{\out@letter}%
+ \def\one@space{ }%
+ \expandafter\ismacro\meaning\next@\s@fetymark %
+ \ifx\next@\undefined@\temp@iftrue \fi %
+ \iftemp@if %
+ \ifx\par\next@ \def\buffer@{\expandafter\pile@letters\del@token}%
+ \else \ifx\endpilemode\next@\def\buffer@{}\fi %
+ \fi %
+ \else %
+ \if\one@space\next@%
+ \def\buffer@{\expandafter\pile@letters\del@space}%
+ \fi %
+ \fi\buffer@}%
+\futurelet\next@\check@}%
+%
+\def\beginpilemode{\showp@r@false
+ \def\preview{}\def\showparas{}\pile@letters}%
+\def\endpilemode{%
+ \def\preview{\preview@}\def\showparas{\show@paras}\showp@r@true}%
+%
+%
+% LINEMODE: cr separate paras, empty line eject letter
+%
+\catcode`\^^M=13\relax%
+%
+% remove empty or space only lines, then control to \line@chkline
+\long\def\line@curbfront#1^^M{%
+ \is@emptyline{#1}%
+ \iftemp@if \def\buffer@{\line@curbfront}%
+ \else \def\buffer@{\line@chkline#1^^M}% control to \line@chkline
+ \fi \buffer@ }%
+%
+% \newtoks\temp@@toks
+% \name@endtoks and \true\end@toks must be given on entry
+\long\def\line@chkline#1^^M{%
+ \test@tokstr{\the\name@endtoks}{#1}%
+ \iftemp@if %
+ \temp@toks=\expandafter{\first@half}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if\else%
+ \expandafter\rowpush\expandafter{\expandafter%
+ \b@group\expandafter\relax\the\temp@toks\e@group}%
+ \fi%
+ \temp@toks=\expandafter{\second@half}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if \temp@toks={}\fi%
+ \iftemp@if\else %
+ {\is@rawmode9/1/13/13/1/13/32/1/13/96/1/13/0/0/0/%
+ \iftemp@if \message{<!>}\let\ =\space %
+ \wlog{(Verbatim: \second@half)}\fi}\fi%
+ \ifnum\R@Wcount=0\temp@@toks={}\else%
+ \temp@@toks={\showp@r@false\lettercontents\clr@allrows\showp@r@true}%
+ \fi%
+ \edef\buffer@{\the\temp@@toks\the\true@endtoks\the\temp@toks}%
+ \else %
+ \temp@toks=\expandafter{\first@half}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if%
+ \temp@@toks={\showp@r@false\lettercontents\clr@allrows\showp@r@true}%
+ \edef\buffer@{\the\temp@@toks\noexpand\line@curbfront}%
+ \else%
+ \expandafter\rowpush\expandafter{\expandafter%
+ \b@group\expandafter\relax\the\temp@toks\e@group}%
+ \let\buffer@=\line@chkline%
+ \fi%
+ \fi \buffer@%
+}%
+%
+\catcode`\^^M=5\relax%
+%
+% NORMAL LINEMODE HANDLER
+%
+\def\beginlinemode{%
+ \true@endtoks={\endlinemode}%
+ \name@endtoks={\endlinemode}\showp@r@false\catcode`\^^M=13\relax %
+ \def\preview{}\def\showparas{}\clr@allrows\line@curbfront }%
+%
+\def\endlinemode{\catcode`\^^M=5\relax%\defaultmarks
+ \def\preview{\preview@}\def\showparas{\show@paras}\showp@r@true }%
+%
+% RAW TEXT LINEMODE HANDLER
+%
+\def\endrawlinemode{\get@catcodes[RAW]\showp@r@true}%
+\def\beginrawlinemode#{\begin@rawlinemode}%
+\def\begin@rawlinemode#1{\save@catcodes[RAW][0][\MAX@CHR@CODE][]%
+ \def\temp@macro{#1}% #1=token to end the list
+ \ifx\temp@macro\empty
+ \temp@toks=\expandafter{\esc@}%
+ \name@endtoks=\expandafter{\the\temp@toks endrawlinemode}%
+ \else \name@endtoks={#1}%
+ \fi
+ \true@endtoks={\endlinemode\endrawlinemode}%
+ \rm@ligature\set@space\set@tab\raw@chars[11][13][13][13][13]%
+ \showp@r@false\clr@allrows\line@curbfront }%
+%
+%
+% BLOCKMODE: cr separate paras
+%
+% line containing '+' (\name@grouptoks) separates groups
+% line containing '!' (\name@clustertoks) separates clusters
+%
+\catcode`\^^M=13\relax%
+%
+% remove empty or space only lines, then control to \block@chkline
+\long\def\block@curbfront#1^^M{%
+ \is@emptyline{#1}%
+ \iftemp@if \let\buffer@=\block@curbfront %
+ \else \test@tokstr{\the\name@endtoks}{#1}%
+ \iftemp@if \def\buffer@{\block@chkline#1^^M}%
+ \else \test@tokstr{\the\name@clustertoks}{#1}%
+ \iftemp@if \let\buffer@=\block@curbfront%
+ \else \test@tokstr{\the\name@grouptoks}{#1}%
+ \iftemp@if \def\buffer@{\block@chkline#1^^M}%
+ \else \test@tokstr{\the\name@paratoks}{#1}%
+ \iftemp@if \let\buffer@=\block@chkline%
+ \else \def\buffer@{\block@chkline#1^^M}% control to \block@chkline
+ \fi %
+ \fi %
+ \fi%
+ \fi %
+ \fi \buffer@ }%
+%
+% \name@endtoks and \true\end@toks must be given on entry
+\long\def\block@chkline#1^^M{%
+ \test@tokstr{\the\name@endtoks}{#1}%
+ \iftemp@if %
+ \ifnum\R@Wcount=0%
+ \temp@toks={\clr@allrows\showp@r@true}%
+ \else%
+ \temp@toks={\showp@r@false\lettercontents\clr@allrows\showp@r@true}%
+ \fi%
+ \edef\buffer@{\the\temp@toks\the\true@endtoks}%
+ \else %
+ \test@tokstr{\the\name@clustertoks}{#1}%
+ \iftemp@if%
+ \def\buffer@{\showp@r@false\lettercontents\clr@allrows%
+ \showp@r@true\block@curbfront}%
+ \else%
+ \test@tokstr{\the\name@grouptoks}{#1}%
+ \iftemp@if%
+ \ifnum\R@Wcount<1\global\R@Wcount=1\relax\fi %
+ \global\advance\R@Wcount1\relax%
+ \else%
+ \rowpush{\b@group\relax#1\e@group}%
+ \fi%
+ \let\buffer@=\block@chkline %
+ \fi%
+ \fi \buffer@%
+}%
+%
+\catcode`\^^M=5\relax%
+%
+% NORMAL BLOCKMODE HANDLER
+%
+\def\beginblockmode{%
+ \true@endtoks={\endblockmode}%
+ \name@endtoks={\endblockmode}\showp@r@false\catcode`\^^M=13\relax %
+ \def\preview{}\def\showparas{}\clr@allrows\block@curbfront }%
+%
+\def\endblockmode{\catcode`\^^M=5\relax%\defaultmarks
+ \def\preview{\preview@}\def\showparas{\show@paras}\showp@r@true }%
+%
+% RAW TEXT BLOCKMODE HANDLER
+%
+\def\endrawblockmode{\get@catcodes[RAW]\showp@r@true}%
+\def\beginrawblockmode#{\begin@rawblockmode}%
+\def\begin@rawblockmode#1{\save@catcodes[RAW][0][\MAX@CHR@CODE][]%
+ \def\temp@macro{#1}% #1=token to end the list
+ \ifx\temp@macro\empty
+ \temp@toks=\expandafter{\esc@}%
+ \name@endtoks=\expandafter{\the\temp@toks endrawblockmode}%
+ \else \name@endtoks={#1}%
+ \fi
+ \true@endtoks={\endblockmode\endrawblockmode}%
+ \rm@ligature\set@space\set@tab\raw@chars[11][13][13][13][13]%
+ \showp@r@false \clr@allrows\block@curbfront }%
+%
+%
+% DATAMODE: every <m> lines eject a letter (raw tex mode)
+%
+\catcode`\^^M=13\relax %
+\newcount\data@count %
+%
+% \name@endtoks and \true\end@toks must be given on entry
+\long\def\data@chkline#1^^M{\test@tokstr{\the\name@endtoks}{#1}%
+ \iftemp@if % \first@half is raw text
+ \temp@toks=\expandafter{\first@half}%
+ \temp@@toks=\expandafter{\second@half}%
+ \edef\temp@macro{\the\temp@toks\the\temp@@toks}%
+ \temp@toks=\expandafter{\temp@macro}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if \else\message{<!>}\let\ =\space %
+ \wlog{(Ignored: \first@half<->\second@half)}\fi %
+ \ifnum\R@Wcount=0\temp@@toks={}\else%
+ \ifnum\R@Wcount=\total@data@num\else \message{<!>}%
+ \wlog{(Number of data lines at odds)}\fi %
+ \temp@@toks={\showp@r@false\lettercontents\clr@allrows\showp@r@true}%
+ \fi%
+ \edef\buffer@{\the\temp@@toks\the\true@endtoks}%
+ \else %
+ \temp@toks=\expandafter{\first@half}\advance\data@count1 %
+ \expandafter\rowpush\expandafter{\expandafter%
+ \b@group\expandafter\relax\the\temp@toks\e@group}%
+ \ifnum\data@count<\total@data@num %
+ \let\buffer@=\data@chkline%
+ \else \data@count=0 %
+ \temp@@toks={\showp@r@false\lettercontents\clr@allrows\showp@r@true}%
+ \edef\buffer@{\the\temp@@toks\noexpand\data@chkline}%
+ \fi%
+ \fi \buffer@ }%
+%
+\def\begindatamode{\push{%
+ \edef\next@@{\noexpand\begin@datamode[\the\p@r@one]}%
+ \popnil\next@@}\st@ckparas\left@\right@\p@r@end}%
+%
+\def\begin@datamode[#1]#{\begin@@datamode[#1]}%
+\def\begin@@datamode[#1]#2{\save@catcodes[RAW][0][\MAX@CHR@CODE][]%
+% #1=token to end the list, #2=number of lines for each block
+ \edef\total@data@num{#2}\def\temp@macro{#1}%
+ \ifx\total@data@num\empty \def\total@data@num{1}\fi %
+ \ifnum\total@data@num<1 \def\total@data@num{1}\fi %
+ \ifx\temp@macro\empty %
+ \temp@toks=\expandafter{\esc@}%
+ \name@endtoks=\expandafter{\the\temp@toks enddatamode}%
+ \else \name@endtoks={#1}\fi %
+ \true@endtoks={\endlinemode\endrawlinemode}%
+ \rm@ligature\set@space\set@tab\raw@chars[11][13][13][13][13]%
+ \showp@r@false\clr@allrows\data@count=0 %
+ \def\temp@macro##1^^M{%
+ \test@tokstr{\the\name@endtoks}{##1}%
+ \iftemp@if\else \temp@toks={##1}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if\else \message{<!>}\let\ =\space %
+ \wlog{(Ignored: ##1)}\fi %
+ \fi %
+ \test@tokstr{\the\name@endtoks}{##1}%
+ \iftemp@if \temp@toks=\expandafter{\first@half}%
+ \temp@@toks=\expandafter{\second@half}%
+ \edef\temp@@macro{\noexpand\data@chkline %
+ \the\temp@toks\the\name@endtoks\the\temp@@toks\noexpand^^M}%
+ \else\def\temp@@macro{\data@chkline}\fi\temp@@macro }%
+ \temp@macro }%
+%
+\catcode`\^^M=5\relax%
+%
+%
+% BASIC SETUP
+%
+\new@measures
+\defaultmarks % set up the default delimiters
+%
+%
+% RAW TEXT LISTING and MORE ON MACRO PARAMETER DEFAULTING
+%
+%
+% FLUSH ZEROS \fillzeros[<WIDTH>]<NUMBER>
+%
+%% \newcount\temp@count \newcount\temp@@count
+\def\fillzeros[#1]#2{\temp@@count=#2\relax
+ \ifnum\temp@@count<0 \temp@@count=-\temp@@count\fi
+ \temp@count=1\relax
+ {\loop\ifnum\temp@@count<10 \else
+ \global\divide\temp@@count by 10 \global\advance\temp@count by 1 \fi
+ \ifnum\temp@@count=10\relax\global\temp@@count=11\relax\fi
+ \ifnum\temp@@count>10 \repeat}%
+ \ifnum#2<0 \advance\temp@count1\relax-\fi
+ {\loop\ifnum\temp@count<#1\relax0\advance\temp@count1\fi
+ \ifnum\temp@count<#1 \repeat}%
+ \temp@@count=#2\relax\ifnum\temp@@count<0 \temp@@count=-\temp@@count\fi
+ \the\temp@@count}%
+%
+%
+% BEGINLIST--ENDLIST: activate <space> and <linebreak>
+%
+\catcode`\^^M=13%
+\newcount\linecount\global\linecount=1%
+{\obeyspaces\gdef {\ }}%
+%
+%
+%
+% \name@endtoks: token to end the list
+% \true@endtoks: tokens to be executed at the end
+% \name@endtoks and \true@endtoks must be defined on entry
+% \no@emptylinefalse: the first or the last line empty
+%
+\newif\ifno@emptyline % iftemp@if
+\newif\ifprint@file \global\print@filefalse %
+\def\begin@list[#1][#2][#3][#4][#5][#6]{%
+ \global\linecount=#1\catcode`\^^M=13\no@emptylinetrue %
+ \ifprint@file \def^^M{\put@linenumber}\else\def^^M{\par}\fi %
+ \def\put@linenumber{\par\noindent\hbox to #5{}%
+ \rlap{\hskip-1em\hskip#6%
+ \ifnum#3>0\relax\hbox to0em{\hss#4\fillzeros[#3]\linecount~~}\fi}%
+ \global\advance\linecount#2\relax}%
+ \def\out@aline{%
+ \ifno@emptyline %
+ \expandafter\is@emptyline\expandafter{\first@half}%
+ \ifprint@file \temp@@iffalse \else\temp@@iftrue \fi %
+ \else \temp@iffalse \temp@@iftrue %
+ \fi \no@emptylinefalse%
+ \iftemp@if \else %
+ \iftemp@@if \put@linenumber \fi %
+ \first@half \par % extra \par is absorbed, put here for last line
+ \fi }%
+ \def\readyt@quit{\no@emptylinetrue%
+ {\is@rawmode9/1/13/13/1/13/32/1/13/96/1/13/0/0/0/%
+ \iftemp@if \expandafter\is@emptyline\expandafter{\second@half}%
+ \iftemp@if\else\message{<!>}\let\ =\space %
+ \wlog{(Verbatim: \second@half)}\fi\fi}%
+ \temp@toks=\expandafter{\first@half}%
+ \temp@@toks=\expandafter{\second@half}%
+ \edef\first@half{\the\temp@toks\the\temp@@toks}\out@aline %
+ \edef\temp@macro{\the\true@endtoks}%
+ \temp@macro % \second@half removed
+ }%
+ \def\moret@get{\out@aline\get@phys@line}%
+ \long\def\get@phys@line##1^^M{%
+ \test@tokstr{\the\name@endtoks}{##1}%
+ \iftemp@if \let\temp@macro=\readyt@quit
+ \else \let\temp@macro=\moret@get %
+ \fi %
+ \temp@macro }%
+ \catcode`\ =13\relax\get@phys@line%
+}%
+%
+%
+\def\endlist{\catcode`\^^M=13%
+\catcode`\ =10\let^^M=\par\catcode`\^^M=5}%
+\def\beginlist[#1][#2][#3][#4][#5][#6]{%
+ \name@endtoks={\endlist}\true@endtoks={\endlist}%
+ \begin@list[#1][#2][#3][#4][#5][#6]}%
+%
+\catcode`\^^M=5\relax%
+%
+%
+% BEGINRAWLIST -- ENDRAWLIST \beginrawlist [...]{endtoken}
+% defaults for [..] supported, last {..} compulsory ({} allowed though)
+%
+% \beginrawlist [<INICOUNT>][<STEP>][<DIGITS>][<FONT>]%
+% [<TEXTSHIFT>][<MARKINGSHIFT>]{<ENDMARK>}
+% <INICOUNT>=\linecount: starts with where it is left
+% <ENDMARK>= empty: \endrawlist ends the rawlist, otherwise
+% <ENDMARK> ends it
+% <DIGITS>=0: no line numbering
+% Use \leftskip and \rightskip to control the wrapped positions
+%
+\def\endrawlist{\endgroup}%
+\def\begin@@rawlist[#1][#2][#3][#4][#5][#6]#7{\begingroup
+ \def\temp@macro{#7}% #7=token to end the list
+ \ifx\temp@macro\empty
+ \name@endtoks=\expandafter{\esc@ endrawlist}%
+ \else \name@endtoks={#7}%
+ \fi
+ \true@endtoks={\endlist\endrawlist}%
+ \rm@ligature\set@tab\set@cr\set@space
+ \raw@chars[11][13][13][13][13]%
+ \begin@list[#1][#2][#3][#4][#5][#6]}%
+%
+\def\begin@rawlist[#1][#2][#3][#4][#5][#6]#{%
+ \begin@@rawlist[#1][#2][#3][#4][#5][#6]}%
+%
+\def\beginrawlist{\push{%
+ \edef\next@@{\noexpand\begin@rawlist
+ [\the\p@r@one][\the\p@r@two][\the\p@r@three][\the\p@r@four]%
+ [\the\p@r@five][\the\p@r@six]}%
+ \popnil\clrp@r@s\next@@}% end of push
+ \font\tiny@rm=cmr5%
+ \edef\temp@macro{%
+ \noexpand\left@\the\linecount\noexpand\right@
+ \noexpand\left@1\noexpand\right@
+ \noexpand\left@0\noexpand\right@
+ \noexpand\left@\noexpand\tiny@rm\noexpand\right@
+ \noexpand\left@0pt\noexpand\right@
+ \noexpand\left@0pt\noexpand\right@}%
+ \expandafter\st@ckparas\temp@macro\p@r@end}%
+%
+%
+%
+% PRINTFILE verbatim \printfile [...]{filename}
+% [...] same as \beginrawlist
+%
+\catcode`\^^M=13\relax %
+\def\print@@file[#1][#2][#3][#4][#5][#6]#7{%
+ \temp@toks={\bgroup\print@filetrue %
+ \beginrawlist[#1][#2][#3][#4][#5][#6]{}}%
+ \existfile{#7}%
+ \iftemp@if %
+ \edef\temp@macro##1{\the\temp@toks %
+ \noexpand\input##1\leavevmode %
+ \setbox\temp@box=\lastbox\esc@ endrawlist^^M%
+ \global\advance\linecount-1\relax\egroup\vskip-\baselineskip}%
+ \else \def\temp@macro##1{\message{(File #7 not found)}}%
+ \fi %
+ \temp@macro{#7}}%
+\catcode`\^^M=5\relax %
+%
+\def\print@file[#1][#2][#3][#4][#5][#6]#{%
+ \print@@file[#1][#2][#3][#4][#5][#6]}%
+%
+\def\printfile{\push{%
+ \edef\next@@{\noexpand\print@file
+ [\the\p@r@one][\the\p@r@two][\the\p@r@three][\the\p@r@four]%
+ [\the\p@r@five][\the\p@r@six]}%
+ \popnil\clrp@r@s\next@@}% end of push
+ \font\tiny@rm=cmr5%
+ \edef\temp@macro{%
+ \noexpand\left@\the\linecount\noexpand\right@
+ \noexpand\left@1\noexpand\right@
+ \noexpand\left@6\noexpand\right@
+ \noexpand\left@\noexpand\tiny@rm\noexpand\right@
+ \noexpand\left@0pt\noexpand\right@
+ \noexpand\left@-10pt\noexpand\right@}%
+ \expandafter\st@ckparas\temp@macro\p@r@end}%
+%
+%
+% COMMENT OUT TEXT
+% \begincomment{password} <text> \endcomment or password
+%
+\catcode`\^^M=13%
+\def\begin@@comment{\let\par\relax %
+ \catcode`\^^M=13\message{< Skip}%
+ \temp@count=0\temp@@count=0\relax%
+ \long\def\get@phys@line##1^^M{%
+ \ifnum\temp@@count<500\advance\temp@@count1\else %
+ \message{\the\temp@count}\temp@@count=1\fi\relax %
+ \global\advance\temp@count1\relax %
+ \test@tokstr{\the\name@endtoks}{##1}%
+ \iftemp@if %
+ \def\temp@macro{\message{\the\temp@count\space lines}%
+ \expandafter\is@emptyline\expandafter{\second@half}%
+ \iftemp@if\message{>}\else %
+ \message{<!> >}%
+ \wlog{(Ignored: \second@half)}%
+ \fi \the\true@endtoks }%
+ \else \let\temp@macro=\get@phys@line %
+ \fi \temp@macro }%
+ \catcode`\ =13\relax\get@phys@line}%
+%
+\def\end@comment{\catcode`\^^M=13\catcode`\ =10\def^^M{\par}\catcode`\^^M=5}%
+\catcode`\^^M=5\relax%
+%
+\def\endcomment{\endgroup}% \read@buffline\temp@macro
+\def\begin@comment#1{\begingroup\nullfont
+ \tolerance=10000 \hbadness=10000 \vbadness=10000
+ \hfuzz=\maxdimen \vfuzz=\maxdimen
+ \def\temp@macro{#1}% #1=token to end the list
+ \ifx\temp@macro\empty
+ \name@endtoks=\expandafter{\esc@ endcomment}%
+ \else \name@endtoks={#1}%
+ \fi \true@endtoks={\end@comment\endcomment}%
+ \rm@ligature\set@tab\set@cr\set@space\def\ { }%
+ \raw@chars[11][11][11][13][13]\begin@@comment}%
+%
+\def\begincomment#{\begin@comment}% essentially an \outer macro
+%
+% SAVE CATCODES
+%
+\def\toks@of@catcodes#1#2[#3]{{% #3=/13/221/233/ must be increasing,or empty
+% return: global \temp@toks=0/0/0/
+% or /startnum/totalnum/catcode/ ... /0/0/0/
+ \def\get@triplet/##1/##2\ZZ{\temp@@@count=##1\relax
+ \def\temp@macro{##2}\ifx\temp@macro\empty\else\def\temp@macro{/##2}\fi}%
+ \def\temp@macro{#3}\def\temp@@macro{}\temp@count=#1\relax
+ \loop \temp@@count=#2\relax \temp@@@count=\temp@@count\relax
+ \ifx\temp@macro\empty \temp@iffalse\else
+ \expandafter\get@triplet\temp@macro\ZZ % \ZZ is not defined
+ \ifnum\temp@@@count>#2 \else
+ \temp@@count=\temp@@@count \advance\temp@@count-1\relax \fi\fi
+ \edef\temp@@@macro{\noexpand\str@@catcodes
+ {\the\temp@count}{\the\temp@@count}}\temp@@@macro
+ \temp@@toks=\expandafter{\temp@@macro}%
+ \edef\temp@@macro{\the\temp@@toks\the\temp@toks}%
+ \ifnum\temp@@@count>\temp@@count \temp@count\temp@@@count
+ \else\temp@count\temp@@count \fi \advance\temp@count1\relax
+ \ifnum\temp@count>#2 \temp@iffalse \else \temp@iftrue\fi
+ \iftemp@if \repeat \global\temp@toks=\expandafter{\temp@@macro0/0/0/}}}%
+%
+\def\str@@catcodes#1#2{\ifnum#1>#2 \global\temp@toks={}\else
+ {\temp@@@count#1\relax \global\temp@toks={}% result in \temp@toks
+ \loop \temp@count=0\temp@@count=\the\catcode\temp@@@count\relax
+ \l@@p \advance\temp@count1\advance\temp@@@count1\relax
+ \ifnum\temp@@@count>#2\relax\temp@iffalse\else\temp@iftrue\fi
+ \iftemp@if\ifnum\the\catcode\temp@@@count=\temp@@count
+ \else\temp@iffalse\fi\fi
+ \iftemp@if\repe@t
+ \temp@@count=\temp@@@count \advance\temp@@count-\temp@count\relax
+ \edef\temp@macro{\the\temp@toks
+ \the\temp@@count/\the\temp@count/\the\catcode\temp@@count/}%
+ \global\temp@toks=\expandafter{\temp@macro}%
+ \ifnum\temp@@@count>#2\relax\temp@iffalse\else\temp@iftrue\fi
+ \iftemp@if \repeat }\fi}%
+%
+\def\act@catcodes#1/#2/#3/{% activate catcodes, must be ended by /0/0/0/
+ \temp@count=#2\relax
+ \ifnum\temp@count>0 \let\temp@macro\act@catcodes\temp@@iftrue
+ \else \let\temp@macro\relax\temp@@iffalse\fi
+ \temp@count=0 \temp@@count=#1\relax
+ \iftemp@@if\else\temp@count=#2\relax\fi
+ \l@@p
+ \iftemp@@if
+ \temp@@@count=\the\catcode\temp@@count \relax
+ \ifnum\temp@@@count=#3\relax\else
+ \catcode\the\temp@@count=#3\relax\fi
+ \advance\temp@count1 \advance\temp@@count1\relax
+ \fi
+ \ifnum\temp@count<#2 \repe@t \temp@macro}%
+%
+%
+\def\is@rawmode#1/#2/#3/{% chk if catcode is 11 or 12,
+ % exceptions must be ended by /0/0/0/
+ \temp@iftrue\temp@count=#2\relax
+ \ifnum\temp@count>0 \let\temp@macro\act@catcodes\temp@@iftrue
+ \else \let\temp@macro\relax\temp@@iffalse\fi
+ \temp@count=0 \temp@@count=#1\relax
+ \iftemp@@if\else\temp@count=#2\relax\fi
+ \l@@p
+ \iftemp@@if
+ \temp@@@count=\the\catcode\temp@@count \relax
+ \ifnum\temp@@@count=#3\relax\else
+ \ifnum\temp@@@count=11\relax\else
+ \ifnum\temp@@@count=12\relax\else
+ \temp@iffalse \fi\fi\fi
+ \advance\temp@count1 \advance\temp@@count1\relax
+ \fi
+ \ifnum\temp@count<#2 \repe@t\temp@macro}%
+%
+%
+% #1=name, #2=1st char, #3=last char, #4=exceptions
+\def\save@catcodes[#1][#2][#3][#4]{\toks@of@catcodes{#2}{#3}[#4]%
+ \expandafter\xdef\csname CAT@#1@CODES\endcsname{\the\temp@toks}}%
+%
+\def\get@catcodes[#1]{%
+ \expandafter\let\expandafter\temp@macro\csname CAT@#1@CODES\endcsname
+ \expandafter\act@catcodes\temp@macro}%
+%
+% SAVE STATUS
+%
+\def\save@status{\edef\temp@macro{% status to \temp@macro
+ \noexpand\pagegoal=\the\pagegoal
+ \noexpand\hsize=\the\hsize
+ \noexpand\vsize=\the\vsize
+ \noexpand\hyphenpenalty=\the\hyphenpenalty
+ \noexpand\overfullrule=\the\overfullrule
+ \noexpand\pretolerance=\the\pretolerance
+ \noexpand\tolerance=\the\tolerance
+ \noexpand\hbadness=\the\hbadness
+ \noexpand\vbadness=\the\vbadness
+ \noexpand\hfuzz=\the\hfuzz
+ \noexpand\vfuzz=\the\vfuzz
+ \noexpand\spaceskip=\the\spaceskip
+ \noexpand\xspaceskip=\the\xspaceskip
+ \noexpand\looseness=\the\looseness
+ \noexpand\parfillskip=\the\parfillskip }}%
+%
+%
+% MULTI-COLUMNS
+%
+\newif\ifwarn@me \newbox\partial@page
+\newtoks \old@output@toks
+%\newtoks\new@footline
+% replacing \footline for a TeX bug if footline is lost
+%
+% makeshift remedy for LaTeX
+% One must define \makefootline etc for realistic export to general LaTeX
+\ifx\makeheadline\undefined@ \let\makeheadline\relax\fi
+\ifx\makefootline\undefined@ \def\makefootline{}\fi
+\ifx\advancepageno\undefined@\def\advancepageno{\global\advance\count0 1}\fi
+%
+\def\make@headline{{\hsize=\page@width \makeheadline}}%
+\def\make@footline{{\hsize=\page@width \makefootline}}%
+\def\simple@pageout#1{\shipout\vbox{\make@headline
+ \vbox to\page@height{#1}\make@footline}\advancepageno}%
+%
+\def\page@sofar[#1]{\unvbox\partial@page \temp@count=0 %
+ \loop\ifnum\temp@count<#1 \wd\temp@count=\hsize\advance\temp@count1 \repeat
+ \temp@count=1 \hbox to\page@width{\box0 %
+ \loop\ifnum\temp@count<#1 \hfil\box\temp@count
+ \advance\temp@count by1 \repeat}\temp@count=0 %
+ \ifx\topins\undefined@\else\ifvoid\topins\else\temp@count=1 \fi\fi
+ \ifx\footins\undefined@\else\ifvoid\footins\else\temp@count=1 \fi\fi
+ \ifwarn@me \ifnum\temp@count=1 \message{<!>}%
+ \wlog{Insertions (e.g. footnotes) may be pushed to later pages.
+ Try manual pagebreak to overcome possible overfull vbox due to
+ insertions. I pray for you.}\global\warn@mefalse \fi\fi}%
+%
+\def\columns@out[#1]{\splittopskip=\topskip\splitmaxdepth=\maxdepth
+ \temp@dim=\page@height \advance\temp@dim by -\ht\partial@page
+ \temp@count=0 \loop\ifnum\temp@count<#1
+ \ifdim\temp@dim>0pt
+ \setbox\temp@count=\vsplit255 to\temp@dim
+ \else \setbox\temp@count=\vbox{}\fi
+ \advance\temp@count by1 \repeat
+ \simple@pageout{\page@sofar[#1]}\unvbox255\penalty\outputpenalty}%
+%
+\def\balance@columns[#1]{\setbox\temp@box=\vbox{\unvbox255}%
+%% For materials more than one page but less than two pages
+ \temp@@dim=\ht\partial@page \temp@dim=\ht\temp@box
+ \divide\temp@dim by \column@num
+ \advance\temp@dim by \temp@@dim \advance\temp@dim by \dp\temp@box
+ \ifdim\temp@dim>\page@height \message{(!)}%
+ \temp@@@dim=\temp@@dim \advance\temp@@@dim by -\page@height
+ \advance\temp@@@dim by \baselineskip
+ \ifdim\temp@@@dim>0pt \message{<!>}%
+ \wlog{Space left in previous page too narrow.}\else
+ {\vbadness=10000 \vfuzz=\maxdimen
+ \predisplaypenalty 0 \postdisplaypenalty 0 %
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \temp@dim=\page@height \advance\temp@dim by -\temp@@dim
+ \advance\temp@dim by \maxdepth
+ \temp@count=0 \loop \ifnum\temp@count<#1 %
+ \setbox\temp@count=\vsplit\temp@box to\temp@dim
+ \advance\temp@count by1 \repeat
+ \global\setbox\temp@box\box\temp@box
+ \simple@pageout{\page@sofar[#1]}}\fi\fi
+% push the rest into the next page
+ \temp@dim=\ht\temp@box \advance\temp@dim by\topskip
+ \advance\temp@dim by -\baselineskip
+ \divide\temp@dim by #1 \splittopskip=\topskip
+ {\vbadness=10000 \vfuzz=\maxdimen \splitmaxdepth=\maxdepth
+ \loop \setbox\temp@@box=\copy\temp@box
+ \temp@count=1 \l@@p \ifnum\temp@count<#1 %
+ \setbox\temp@count=\vsplit\temp@@box to\temp@dim
+ \advance\temp@count by1 \repe@t
+ \ifdim\ht\temp@@box>\temp@dim \advance\temp@dim by1pt \repeat
+ \temp@count=1 \temp@@count=0
+ \loop \ifnum\temp@count<#1 %
+ \setbox\temp@@count=\vbox to\temp@dim{\unvbox\temp@count}%
+ \advance\temp@count by1 \advance\temp@@count by1 \repeat
+ \temp@count=#1 \advance\temp@count by-1 %
+ \setbox\temp@count=\vbox to \temp@dim{\unvbox\temp@@box}\page@sofar[#1]}%
+ \global\setbox\temp@box=\null\global\setbox\temp@@box=\null}%
+%
+\def\begincolumns{\push{%
+ \edef\next@@{\noexpand\begin@columns[\the\p@r@one][\the\p@r@two]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@2\right@\left@10pt\right@\p@r@end}%
+%
+\def\begin@columns[#1][#2]{% #1 will be expanded via \edef
+ \save@status \old@output@toks=\expandafter{\the\output}%
+ \let\old@entry@status\temp@macro %\begingroup
+ \edef\column@num{#1}\warn@metrue
+ \temp@@count=0 \temp@count=\column@num \relax
+ \ifnum\temp@count>9 \temp@@count=1 \fi
+ \ifnum\temp@count<1 \temp@@count=1 \fi
+ \ifnum\temp@@count>0 %
+ \errhelp{I think a format other than 1-9 columns in a page is crazy.
+ But if you do have such devious wishes, I can only keep my
+ fingers crossed for you.}%
+ \errmessage{Column number \column@num\space is too ambitious!}\fi
+ \ifISLATEX\edef\page@width{\the\textwidth}\edef\page@height{\the\textheight}%
+ \else \edef\page@width{\the\hsize}\edef\page@height{\the\vsize}\fi
+ \tolerance=10000 \hbadness=10000 \vbadness=10000
+ \hfuzz=\maxdimen \vfuzz=\maxdimen \overfullrule=0pt
+ \par\penalty-1 %avoid page loss near the page break margin
+ \message{(\column@num\space cols|#2)}%
+ \output={\global\setbox\partial@page=\vbox{\unvbox255\bigskip}}\eject
+ \output={\columns@out[\column@num]}%
+ \divide\hsize by \column@num \temp@dim=#2
+ \ifnum \temp@dim<0 \message{Intercolumn skip [#2] insensible, reset to 0pt.}%
+ \else \advance\hsize by -#2 \fi\multiply\vsize by \column@num
+ \advance\vsize by 1pc}%
+%
+\def\endcolumns{%
+ \hbox{}\output={\balance@columns[\column@num]}\eject%\endgroup
+ \old@entry@status \output=\expandafter{\the\old@output@toks}%
+ \global\setbox\partial@page=\null}% \pagegoal=\vsize
+%
+% SMOOTH PASSAGES FOR MULTICOLUMNS
+%
+\def\smooth{\spaceskip=0.3em plus .8em minus .1em
+ \xspaceskip=0.6pt plus 1em minus .2em
+ \pretolerance=10 \tolerance=10000 \looseness=-10000
+ \parfillskip=0pt plus10fill\relax}%
+%
+% MAKE LABELS
+% \beginlabels[#1][#2][#3][#4][#5][#6]
+% defaults: #1=15pt #2=\sl #3=1 #4=1 #5=2.6in #6=2em
+% \endlabels
+%
+\def\begin@labels[#1][#2][#3][#4][#5][#6]{%
+ \ifISLATEX \temp@dim=\textwidth \else\temp@dim=\hsize\fi
+ \temp@@dim=#1 \advance\temp@@dim #5 \def\label@size{#5}%
+ \advance\temp@@dim\temp@@dim \advance\temp@@dim10pt
+ \ifdim\temp@@dim<\temp@dim \temp@count=2
+ \else \temp@count=1 \temp@dim=0pt \fi\relax
+ \edef\temp@macro{\noexpand\begincolumns[\the\temp@count][10pt]}%
+ \temp@macro %\nullfont
+ \long\def\peudo@letter##1\endletter{%
+ \def\lettercontents{\begingroup \hbadness=10000 \vbadness=10000
+ \hfuzz=\maxdimen \vfuzz=\maxdimen \overfullrule=0pt
+ \vbox{#2 \par\vskip\baselineskip
+ \vskip#1\addressparas[#3][#4][#5][#6]\vskip#1
+ \hbox{\font\tiny@rm=cmr5 \tiny@rm
+ \leaders\hbox to .8em{\hss.\hss}\hskip\label@size}\par}%
+ \endgroup}}%
+ \let\beginletter\peudo@letter\beginletter\endletter}%
+%
+\def\beginlabels{\push{%
+ \edef\next@@{\noexpand\begin@labels[\the\p@r@one][\the\p@r@two]%
+ [\the\p@r@three][\the\p@r@four][\the\p@r@five][\the\p@r@six]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas
+ \left@ 20pt\right@ \left@ \tt\raggedright\right@
+ \left@ 1\right@ \left@ 1\right@
+ \left@ 2.6in\right@ \left@ 2em\right@ \p@r@end}%
+%
+\def\endlabels{\endcolumns\let\beginletter\true@letter}%
+%
+%
+% LABELS: make labels via a 2nd read of file
+%
+\long\def\firstread#1{% nil if read after \labelsquit
+ \ifx\ENDINPUT\undefined\def\temp@macro{#1}\else\def\temp@macro{}\fi
+ \temp@macro}%
+%
+%
+\def\initstyle{\push{%
+ \edef\next@@{\noexpand\init@labels[\the\p@r@one]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@\right@\p@r@end}%
+\let\initlabels\initstyle % for compatibility with version 2.03
+%
+\long\def\init@labels[#1]#{\init@@labels[#1]}%
+\long\def\init@@labels[#1]#2#{\init@@@labels[#1]#2}%
+\long\def\init@@@labels[#1]#2#3{\def\labels@initiated{}\let\next\relax
+ \ifISLATEX \ifx\ENDINPUT\undefined@ \def\temp@macro{#2}%
+ \ifx\temp@macro\empty\temp@toks={article}\else\temp@toks={#2}\fi
+ \temp@@toks={#3}\edef\temp@@macro{\noexpand\documentstyle
+ [#1]{\the\temp@toks}\the\temp@@toks\noexpand\begin{document}}%
+ \else\def\temp@@macro{}\fi
+ \else \def\temp@@macro{}\message{<!>}%
+ \wlog{(\string\initstyle\space ignored for plain TeX)}\fi
+ \temp@@macro}%
+%
+%
+\def\initclass{\push{%
+ \edef\next@@{\noexpand\init@class[\the\p@r@one][\the\p@r@two]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas\left@\right@\left@\right@\p@r@end}%
+%
+\long\def\init@class[#1][#2]#{\init@@class[#1][#2]}%
+\long\def\init@@class[#1][#2]#3#{\init@@@class[#1][#2]#3}%
+\long\def\init@@@class[#1][#2]#3#4{\def\labels@initiated{}\let\next\relax
+ \ifISLATEX \ifx\ENDINPUT\undefined@ \def\temp@macro{#3}%
+ \ifx\temp@macro\empty\temp@toks={article}\else\temp@toks={#3}\fi
+ \temp@@toks={#4}\edef\temp@@macro{\noexpand\documentstyle
+ [#1]{\the\temp@toks}\the\temp@@toks\noexpand\begin{document}}%
+ \ifx\documentclass\undefined@\else
+ \edef\temp@@macro{\noexpand\documentclass[#2]{\the\temp@toks}%
+ \noexpand\read@style[,]{#1}\the\temp@@toks
+ \noexpand\begin{document}}%
+ \fi
+ \else\def\temp@@macro{}\fi
+ \else \def\temp@@macro{}\message{<!>}%
+ \wlog{(\string\initclass\space ignored for plain TeX)}\fi
+ \temp@@macro}%
+%
+\def\readstyles#1{\xdef\EntryReadStyle{\the\catcode`\@}\catcode`\@=11\relax
+ \read@style[,]{#1}\catcode`\@=\EntryReadStyle\relax}%
+%
+\def\read@style[#1]#2{\def\one@item##1#1##2\safty@mark{\temp@toks={##1}%
+ \expandafter\input@a@style\the\temp@toks..\safty@mark\def\temp@macro{##2}%
+ \ifx\temp@macro\empty\else\def\temp@macro{\one@item##2\safty@mark}\fi
+ \temp@macro}\one@item#2#1\safty@mark }%
+\def\input@a@style#1.#2.#3\safty@mark{\def\temp@macro{#2}%
+ \ifx\temp@macro\empty\def\temp@macro{sty}\fi\def\temp@@macro{#1.}%
+ \temp@toks=\expandafter\expandafter\expandafter
+ {\expandafter\temp@@macro\temp@macro}\def\temp@@macro{#1}%
+ \ifx\temp@@macro\empty\else\ifx\temp@@macro\space\else
+ \expandafter\inputfile\expandafter{\the\temp@toks}\fi\fi }%
+%
+%
+\def\labelsquit{\push{%
+ \edef\next@@{\noexpand\labels@quit[\the\p@r@one][\the\p@r@two]%
+ [\the\p@r@three][\the\p@r@four][\the\p@r@five][\the\p@r@six]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas
+ \left@ 20pt\right@ \left@ \tt\raggedright\right@
+ \left@ 1\right@ \left@ 1\right@
+ \left@ 2.6in\right@ \left@ 2em\right@ \p@r@end}%
+%
+\def\labels@quit[#1][#2][#3][#4][#5][#6]#{%
+ \labels@@quit[#1][#2][#3][#4][#5][#6]}%
+\def\labels@@quit[#1][#2][#3][#4][#5][#6]#7{%
+ \ifISLATEX \else\def\labels@initiated{}\fi
+ \ifx\labels@initiated\undefined
+ \message{<!>}\wlog{(\string\initstyle\space must be activated first)}%
+ \let\next\relax
+ \else \def\temp@macro{#7}%
+ \ifx\temp@macro\empty\def\temp@macro{\jobname}\fi
+ \ifx\ENDINPUT\undefined
+ \temp@toks={[#1][#2][#3][#4][#5][#6]}%
+ \message{(Re-read \jobname.tex)}%
+ \edef\next{\noexpand\beginlabels
+ \the\temp@toks\noexpand\input \temp@macro}%
+ \else \def\next{\endlabels\end{document}}\fi
+ \let\ENDINPUT\relax
+ \fi \next}%
+%
+%
+% WRITE FILE
+%
+\catcode`\^^M=13\relax %
+%
+% \temp@read, \name@endtoks and \true\end@toks must be given on entry
+\long\def\file@chkline#1^^M{\test@tokstr{\the\name@endtoks}{#1}%
+ \iftemp@if \temp@toks=\expandafter{\first@half}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if\else \expandafter %
+ \immediate\write\expandafter\temp@read\expandafter{\first@half}\fi %
+ \immediate\closeout\temp@read \temp@toks=\expandafter{\second@half}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if \else\message{<!>}\wlog{(Ignored: \the\temp@toks)}\fi %
+ \edef\buffer@{\the\true@endtoks}%
+ \else \expandafter\immediate\expandafter %
+ \write\expandafter\temp@read\expandafter{\first@half}%
+ \let\buffer@\file@chkline %
+ \fi \buffer@ }%
+%
+\def\beginfile{\push{%
+ \edef\next@@{\noexpand\begin@file[\the\p@r@one]}%
+ \popnil\next@@}\st@ckparas\left@\right@\p@r@end}%
+%
+\def\begin@file[#1]#{\begin@@file[#1]}%
+\def\begin@@file[#1]#2{\save@catcodes[RAW][0][\MAX@CHR@CODE][]%
+% #1=token to end the list, #2=filename
+ \edef\temp@macro{#2}%
+ \ifx\temp@macro\empty \def\temp@macro{scr@tch@.tex}\fi %
+ \wlog{(File <\temp@macro> written)}%
+ \immediate\openout\temp@read=\temp@macro \def\temp@macro{#1}%
+ \ifx\temp@macro\empty \temp@toks=\expandafter{\esc@}%
+ \name@endtoks=\expandafter{\the\temp@toks endfile}%
+ \else \name@endtoks={#1}\fi\true@endtoks={\endlinemode\endrawlinemode}%
+ \rm@ligature\set@space\set@tab\raw@chars[11][11][11][13][13]\let\ =\space %
+ \def\temp@macro##1^^M{%
+ \test@tokstr{\the\name@endtoks}{##1}%
+ \iftemp@if\else \temp@toks={##1}%
+ \expandafter\is@emptyline\expandafter{\the\temp@toks}%
+ \iftemp@if\else \expandafter\immediate\expandafter %
+ \write\expandafter\temp@read\expandafter{\the\temp@toks}\fi %
+ \fi %
+ \test@tokstr{\the\name@endtoks}{##1}%
+ \iftemp@if \temp@toks=\expandafter{\first@half}%
+ \temp@@toks=\expandafter{\second@half}%
+ \edef\temp@@macro{\noexpand\file@chkline %
+ \the\temp@toks\the\name@endtoks\the\temp@@toks\noexpand^^M}%
+ \else\def\temp@@macro{\file@chkline}\fi\temp@@macro }%
+ \temp@macro }%
+%
+\catcode`\^^M=5\relax%
+%
+%
+% FONTS
+%
+%\font\BOLD=cmbx10 at 24.88pt \font\hbold=cmbx10 at 20.74pt
+%\font\lbold=cmbx10 at 17.28pt \font\bbold=cmbx10 at 14.4pt
+%\font\bold=cmbx10 at 12pt \font\sbold=cmbx8
+%\font\tbold=cmbx5 \font\ssan=cmss8
+%\font\SAN=cmss10 at 24.88pt \font\hsan=cmss10 at 20.74pt
+%\font\lsan=cmss10 at 17.28pt \font\bsan=cmss10 at 14.4pt
+%\font\san=cmss10 at 12pt \font\nsan=cmss10
+%\font\ROMAN=cmr10 at 24.88pt \font\hroman=cmr10 at 20.74pt
+%\font\lroman=cmr10 at 17.28pt \font\broman=cmr10 at 14.4pt
+%\font\roman=cmr10 at 12pt \font\sroman=cmr8
+%\font\troman=cmr5 \font\stt=cmtt8
+%
+%
+% LEAVE MACROS
+%
+\let\wlog\temp@@@macro\let\temp@@@macro\undefined@
+%
+\catcode`\@=\EntryFormLett\relax
+\endinput
+%
+%ENDMACROS
diff --git a/macros/generic/formlett/prog_manual.pdf b/macros/generic/formlett/prog_manual.pdf
new file mode 100644
index 0000000000..091e0c2142
--- /dev/null
+++ b/macros/generic/formlett/prog_manual.pdf
Binary files differ
diff --git a/macros/generic/formlett/prog_manual.tex b/macros/generic/formlett/prog_manual.tex
new file mode 100644
index 0000000000..3cf57fc993
--- /dev/null
+++ b/macros/generic/formlett/prog_manual.tex
@@ -0,0 +1,1906 @@
+% PROGRAMMER'S MANUAL in Plain TeX
+
+\input formlett.sty
+
+% FONTS
+\font\hbold=cmbx10 at 17.28pt
+\font\lbold=cmbx10 at 14.4pt
+\font\bbold=cmbx10 at 12pt
+\font\small=cmr8
+\font\tiny=cmr5
+\font\stt=cmtt9
+\catcode`\@=11\relax
+%
+%
+%
+% OTHER MACROS
+%
+\catcode`\~=11\relax \def\t{{\tt ~}}
+\catcode`\~=\active\relax
+\catcode`\!=0\relax !catcode`!\=11!relax
+!def!esc{\}!def!escs{\! }
+!catcode`!\=0!relax \catcode`\!=12\relax
+\def\rqs{\rq\ }
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\font\sc=cmcsc10\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+% makeshift macro
+\catcode`\^^M=13\relax%
+\def\setraw{\bgroup\rm@ligature\set@space\set@tab%
+\set@cr\stt\raw@chars[11][13][13][13][13]\def^^M{\strut\par}\setraw@@}%
+\edef\temp@macro{%
+ \noexpand\long\noexpand\def\noexpand\setraw@@\noexpand##1^^M##2%
+ \esc@ unsetraw{##1##2\noexpand\egroup}}\temp@macro %
+\catcode`\^^M=5\relax%
+
+
+\font\ninerm=cmr9 \font\eightrm=cmr8
+\font\ninei=cmmi9 \font\eighti=cmmi8
+\font\ninesy=cmsy9 \font\eightsy=cmsy8
+\font\ninebf=cmbx9 \font\eightbf=cmbx8
+\font\ninett=cmtt9 \font\eighttt=cmtt8
+\font\nineit=cmti9 \font\eightit=cmti8
+\font\ninesl=cmsl9 \font\eightsl=cmsl8
+
+\font\sixrm=cmr6
+\font\sixi=cmmi6
+\font\sixsy=cmsy6
+\font\sixbf=cmbx6
+
+\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177
+\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60
+\hyphenchar\ninett=-1 \hyphenchar\eighttt=-1 \hyphenchar\tentt=-1
+
+\font\tentex=cmtex10
+\font\inchhigh=cminch
+\font\titlefont=cmssdc10 at 40pt % titles in chapter openings
+\font\eightss=cmssq8 % quotations in chapter closings
+\font\eightssi=cmssqi8 % ditto, slanted
+\font\tenu=cmu10 % unslanted te~t italic
+\font\manual=manfnt % METAFONT logo and special symbols
+\font\magnifiedfiverm=cmr5 at 10pt % to demonstrate magnification
+
+\newskip\ttglue
+\def\eightpoint{\def\rm{\fam0\eightrm}% switch to 8-point type
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\eightit \def\it{\fam\itfam\eightit}%
+ \textfont\slfam=\eightsl \def\sl{\fam\slfam\eightsl}%
+ \textfont\ttfam=\eighttt \def\tt{\fam\ttfam\eighttt}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\eightbf}%,
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=9pt
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ \let\sc=\sixrm \let\big=\eightbig \normalbaselines\rm}
+
+
+%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%
+%
+% END OF EXTRA MACROS AND FONTS
+%
+%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%
+
+
+
+\message{<<document for programmers>>}
+\catcode`\@=11\relax
+\PAGENO=1
+\voffset=-0.3in
+
+
+\ifx\pageno\undefined
+\errmessage{Please run TeX if you want this article on how to use
+<formlett.sty> to be processed as well!}
+\fi
+
+
+\parindent=0pt
+\hsize=469.75499pt % the default
+\vsize=9.6in %8.83in
+%\vsize=8.83in
+
+\def\makefootline{\baselineskip=24pt \line{\the\footline}}
+\footline={\lower5pt
+\hbox to \hsize
+ {{\tenrm Jiang Z ~~~{\tensl Formlett: ~for letters to multiple receivers}
+\hss \folio}}}
+
+\leftline{\hbold FORMLETT: ~~~for Letters to Multiple Receivers}
+\bigskip
+
+
+{\advance\leftskip by13mm \overfullrule=0pt
+\advance\rightskip by 20mm %28mm
+\sl
+\noindent Zhuhan JIANG\par
+\noindent School of Computing and Information Technology,
+ University of Western Sydney, Victoria Road, Parramatta NSW 2150, Australia.
+{\sl ~~Email}:~z.jiang@uws.edu.au\par
+\medskip
+\rm\smooth
+\noindent (Last updated on 26 May 2003)\par
+\medskip
+
+\noindent
+In this article, the author explains how to use a form-letter
+style {\tt formlett.sty}, designed for plain \TeX\ and \LaTeX
+\ or \LaTeX2e. {\tt formlett.sty} supports different parameter input
+methods, parameter naming and defaulting mechanism, as well as
+facilities for previewing parameter positions and printing
+labels. It is written for the purpose of being powerful, robust
+and above all easy to use.\par }
+
+
+\begincolumns
+
+{\lbold Introduction}
+
+\smallskip
+
+In this modern world of ours, we often need to send a set of form
+letters, personalised or non-personalised, to many receivers at
+the same time. Or perhaps we would like to have a collection of
+business letters or information brochures which we would like to
+call upon {\sl instantly} whenever we need them.
+
+\medskip
+
+Our purpose here is therefore to describe a comprehensive
+implementation of such a macro system, handling form letters
+under \TeX\ or \LaTeX. The main objective is to provide an easy
+way to output many form letters with their own parameters, with
+or without the use of multiple files. There will be a coherent
+and simple format for putting parameters inside a form letter,
+with a number of helping facilities for such as naming parameters
+and previewing their positions. A minimum support for printing
+mailing labels is also provided.
+
+
+\medskip
+
+The concept of macros [1] for form letters is not new: there
+already exist macros in this connection such as {\tt merge}, {\tt
+textmerg} and {\tt address} to name a few, see [2,3] for further
+details. Our stress here is therefore laid on the ease to use,
+along with the power and the robustness of the macros.
+
+\bigskip
+{\lbold Format}
+
+\smallskip
+
+In this section, we always assume that the file {\tt formlett.sty}
+or {\tt formlett.tex} of version {\tt 2.3} has
+already been input. Certain version of {\tt formlett.sty} can be
+obtained via anonymous ftp from CTAN sites at
+{\tt macros /generic}.
+
+\medskip
+
+Essentially, each form letter, or letter format or letter
+template, will be included between {\tt \string\beginletter} and
+{\tt \string\endletter}. Letter parameters that will be specified
+later on for each particular letter can be given by {\tt
+\string\paras[<m>][<n>]}, representing the {\tt <m>}-th parameter
+of the {\tt<n>}-the parameter group, at the positions you want
+them to be. Let a cluster denote a complete collection of
+parameters that may be specified for a form letter. Then we can
+specify letter parameters group by group for a cluster such that
+inside each group the parameters are given {\sl sequentially} and
+a termination of one group should not affect the
+resynchronisation for the next group. For instance we can keep
+the address of a receiver as a single group, as it often contains
+different number of (parameter) lines.
+
+
+\medskip
+We often want to treat a particular group of letter
+parameters somewhat uniformly. This can be achieved by one of the
+following commands
+
+\setraw
+ \blockparas[<m>][<n>][<pre>][<post>]
+ \addressparas[<m>][<n>][<width>][<indent>]
+\unsetraw
+
+They represent parameters in the {\tt<n>}-th group, from the {\tt
+<m>}-th to the last parameter of that group. For {\tt
+\string\blockparas}, tokens {\tt <pre>} and {\tt <post>} are
+those to be added in front and behind respectively each of the
+legitimate parameters mentioned above. If {\tt <post>} is
+{\tt\string\relax}, it will then not be appended at the end.
+Instead, each chosen parameter will be put into a {\tt $\{\}$}-
+pair before preceded by the token {\tt <pre>}. The reason for
+this exception is that while {\tt <pre> and <post>} are meant to
+be the front and end macros for each selected parameter, in the
+case of {\tt <post>} being {\tt \string\relax}, we may regard
+{\tt<pre>} as {\sl acting upon} each chosen parameter.
+
+
+\medskip
+The command {\tt \string\addressparas}, however, uses
+{\tt \string\blockparas} indirectly and will put the chosen
+parameters into a box of width {\tt<width>}. If any selected
+parameter is longer than {\tt<width>}, then the line will be
+wrapped around, with all wrapped potions being indented by an
+{\tt<indent>}. This may be used to deal with very long address
+lines. Incidentally, we may use {\tt \string\textbox} or {\tt
+\string\addressbox} or {\tt \string\ADDRESSBOX} to control the
+width of a single parameter. The general format reads
+
+
+\setraw
+ \textbox[<width]{<materials>}
+ \addressbox[<width>][<indent>]{<materials>}
+ \ADDRESSBOX{<width>}{<indent>}{<materials>}
+\unsetraw
+
+where the meaning of the macro parameters are self-explanatory.
+
+
+\medskip
+
+For the macro parameters, we have for convenience provided the
+following defaults for those in the squared brackets
+
+\setraw
+ <m>=1
+ <n>=1
+ <pre>=\noindent
+ <post>=\par
+ <width>= 8truecm
+ <indent>= 1.5em
+\unsetraw
+
+This way, for instance, {\tt\string\paras[1][1]} is equivalent
+to any of the following commands
+
+\setraw
+ \paras, \paras[1], \paras[][1],
+ \paras[1][], \paras[][]
+\unsetraw
+
+and the following three commands are also the same
+
+\setraw
+ \addressbox{one address line}
+ \addressbox[8truecm]{one address line}
+ \addressbox[][1.5em]{one address line}
+\unsetraw
+
+
+\medskip
+
+Incidentally this is the reason why we used the second parameter
+{\tt<n>} to represent the group number: the defaults can often be
+dropped off more frequently. By default, all letter parameters
+specified will be put into a group environment before putting
+them into the form letter, unless {\tt \string\localparasfalse}
+is issued beforehand.
+
+\medskip
+To output a new letter entity, i.e a complete letter,
+we may use
+
+
+\setraw
+ \moreletter
+ para-1-1;para-1-2;para-1-3; ...
+ +para-2-1;para-2-2;...
+ + ...
+ +para-n-1;para-n-2; ... ;para-n-m !
+\unsetraw
+
+
+where \lq{\tt ;}\rqs separate parameters inside a same group,
+\lq{\tt +}\rqs separates groups, \lq{\tt !}\rqs ends a cluster of
+parameters, and \lq{\tt ...}\rqs represent further letter
+parameters. These three tokens are nothing special: we may change
+them to for instance \lq{\tt ....}\rq, \lq{\tt ----}\rqs and
+\lq{\tt ====}\rqs respectively by {\tt \string\blockmarks}, and
+change them back to \lq{\tt ; + !}\rqs by {\tt
+\string\defaultmarks}. For more general case, use
+
+\setraw
+ \delimiters{<A>}{<B>}{<C>}
+\unsetraw
+
+where {\tt <A>}, {\tt <B>} and {\tt <C>} are the new toks
+replacing \lq{\tt ; + !}\rqs respectively. If we have to use
+these three special characters or tokens inside our {\sl letter
+parameters}, then use {\tt \string\pstr}, {\tt\string\gstr} and
+{\tt\string\cstr} respectively instead.
+
+\medskip
+
+For the case of many clusters, we may enclose them, separated by
+any white spaces or empty lines, between {\tt
+\string\beginpilemode} and {\tt \string\endpilemode} so that we
+don't have to put {\tt \string\moreletter} in front of each
+cluster of parameters.
+
+
+\medskip
+We may also enter letter parameters line by line. In other words,
+we may essentially replace \lq{\tt;}\rqs in the {\tt
+\string\moreletter} format by a normal line break. In this case,
+we shall put clusters of parameters between {\tt
+\string\beginblockmode} and {\tt \string\endblockmode}. Thus the
+following commands
+
+
+\setraw
+ \beginblockmode
+ <para-1-1>
+ <para-1-2>
+ + letter one
+
+ <para-2-2>
+ !
+
+ <addr-1-1>
+ <addr-1-2>
+ ! letter two
+ \endblockmode
+\unsetraw
+
+
+will produce the required form letter for each cluster of
+parameters. The general rules are as follows:
+
+{\parindent=1.5em
+\item{$\bullet$} If a line contains {\tt \string\endblockmode} or {\tt !}
+or {\tt +}, then everything else on that line is ignored and that
+line serves as an end/cluster/group marking line in the given
+priority order.
+
+\item{$\bullet$} Leading and trailing empty lines before or after
+a complete cluster will be ignored, unless \lq{\tt ;}\rqs is
+there to force the next (empty) line as a starting parameter.
+\par }
+
+Obviously {\tt \string\blockmarks} provides a more sensible
+delimiters for the {\tt blockmode}, under which we could have
+
+\setraw
+ \blockmarks\beginblockmode
+ ....... force next empty line active
+
+ <para-1-2>
+ ------- - mark end of 1st group
+
+ <para-2-2>
+ <para-2-3>
+ ======== end of cluster
+
+ <other clusters>
+ \endblockmode
+\unsetraw
+
+\medskip
+A simpler and perhaps more often encountered scenario is
+to use names and addresses only. In this case, there will be
+essentially only {\sl one} group of parameters for each cluster.
+Thus we may use empty lines to delimit the clusters, and use line
+by line mode for the individual parameters. This way, each
+block of consecutive nonempty lines in
+
+\setraw
+ \beginlinemode
+ <name-1>
+ <address-1-1>
+ <address-1-2>
+
+ <name-2>
+ <1st part of addr-2-1> %
+ <continued part of line addr-2-1>
+
+ <name-3> % letter three
+ \endlinemode
+\unsetraw
+
+
+will output a new complete letter, corresponding to the specified
+letter parameters.
+
+
+\medskip
+{\smooth
+Ideally, the name--address entries will be produced by a database
+utility. Since they often contain special characters such as \lq
+{\tt \#}\rqs and \lq{\tt \$}\rqs explicitly, we may wish to
+change such characters in the parameters to the normal printable
+ones. For this purpose, we could use correspondingly the pair
+{\tt \string\beginrawblockmode$\{$<token>$\}$} with {\tt
+\string\endrawblockmode} or the pair {\tt
+\string\beginrawlinemode$\{$<token>$\}$} with {\tt
+\string\endrawlinemode}. If {\tt <token>} is not empty, then we
+use {\tt <token>} in place of {\tt \string\endrawblockmode} or
+{\tt \string\endrawlinemode}. In other words, {\tt <token>} is
+the password to leave the raw text mode. Since database utility
+will in general produce a {\sl fixed} number of {\tt <m>} lines
+for each cluster of parameters, we may use {\tt
+\string\begindatamode[<token>]$\{$<m>$\}$} and {\tt
+\string\enddatamode} (or {\tt<token>}) in place of {\tt
+\string\beginrawlinemode} and {\tt\string\endrawlinemode} so that
+each {\tt<m>} raw text lines, including the empty ones, will eject
+a form letter.
+}
+
+
+\medskip
+
+It is often desirable that a letter form or format and the actual
+parameters be kept in different files: it will help in archiving
+and retrieving form letters. Furthermore, if a letter is quite
+long such that the \TeX\ can't hold it in the memory, then we
+{\sl have to} keep the letter content in a separate file.
+Essentially we need to save everything between
+{\tt\string\beginletter} and {\tt \string\endletter} into a
+separate file, say, {\tt letter.let}, then later on use
+{\tt\string\inputletter$\{$letter.let$\}$} to load in the letter
+format. Should one prefer to keep everything inside a {\sl single}
+file, however, he may use {\tt\string\beginfile [{\it
+password}]$\{${\it file.ext}$\}$} and {\tt\string\endfile} (or
+{\it password}) to create files such as {\tt letter.let}
+mentioned above as a temporary scratch file. We note that {\tt
+letter.let} will not contain {\tt\string\beginletter} and
+{\tt\string\endletter} as {\tt \string\inputletter} will add them
+properly for us. Also the extension {\tt .let} is preferred in
+this connection as it can indicate that this type of format file
+should not quite be regarded as the normal \TeX\ files.
+
+\medskip
+
+Likewise, it is also desirable to have a separate address or
+general letter parameter file. For the address file, we remark
+that we have to keep the pairing {\tt \string\beginlinemode} with
+{\tt \string\endlinemode} or {\tt\string\beginblockmode} with
+{\tt \string\endblockmode} inside the address file, if we are to
+use any of them for some content of that file. Moreover, an
+extension {\tt .adr} is recommended for such files. Thus for a
+letter format or template saved in {\tt letter.let}, we may
+choose {\tt letter.adr} as the name for the related address file.
+
+\medskip
+After a letter format is completed for sometime, one may have
+difficulty in recalling what those parameters should refer to
+when using the form letter again. For this purpose, we provide
+a simple mechanism with {\tt\string\paranames} and {\tt
+\string\showparas}. To be more precise, if one puts {\tt
+\string\paranames\ name-1-1; ...; <etc>!} at the very beginning of
+the letter format, then one can use {\tt\string\showparas}
+outside to output a letter with its parameters replaced by their
+names.
+
+\medskip
+
+An alternative way, or rather a way of highlighting the positions
+of the letter parameters is to use {\tt\string\preview}. Under
+{\tt\string\preview}, or {\tt \string\previewtrue}, all
+parameters given by {\tt\string\paras[<m>][<n>]} will be boxed
+with double borderlines, similar to {\tt \previewtrue
+\paras[3][2]}, the number {\tt<n>-<m>} inside (corresponding to
+{\tt 2-3} in the shown box) denotes the {\tt<m>}-th parameter of
+the {\tt <n>}-th group. However, the parameters given by
+{\tt\string\blockparas} or {\tt\string\addressparas} will be
+boxed with triple borderlines. Moreover, the macro parameters
+{\tt<pre>} and {\tt <post>} will also be displayed explicitly.
+Since {\tt\string\addressparas} is essentially a special way of
+using {\tt\string\blockparas}, it is highlighted via that for the
+{\tt\string\blockparas}. In particular,
+{\tt\string\blockparas[3][6][\string\x][\string\y]} for instance
+will display under {\tt \string\preview} the following box
+
+\smallskip
+{\previewtrue \blockparas[3][6][\x][\y]}
+
+
+\medskip
+
+Sometimes we may want to have each given {\sl empty} letter
+parameter automatically replaced by a particular {\sl default}
+parameter. This can be easily done by using {\tt
+\string\loaddefaultparas} inside your letter format, i.e.
+essentially between {\tt \string\beginletter} and {\tt
+\string\endletter}, before any calling of the letter parameters
+via {\tt \string\paras} etc. Of course, the effect of {\tt
+\string\loaddefaultparas} is nil unless a command {\tt
+\string\paradefaults} is issued inside or (better still) outside
+the letter format. We note that {\tt \string\paradefaults} takes
+the macro parameters in the exact way as {\tt \string\paranames}
+does. One note of caution: {\tt \string\paradefaults} and {\tt
+\string\paranames} always use the default delimiters \lq{\tt ; +
+!}\rqs no matter how you changed them via {\tt
+\string\delimiters}. This is to avoid unnecessary complications.
+
+\medskip
+
+We note that printing labels is no more than designing a special
+letter template. The mechanism provided in {\tt formlett} however
+is to pick a subblock of parameters as the address. Basically all
+the form letter output inside {\tt\string\beginlabels} and
+{\tt\string\endlabels} will produce labels instead, taking the
+first parameter group as the address by default (see Appendix for
+more details). Incidentally, labels can be printed in single or
+double columns depending upon the choice of label width.
+
+\medskip
+
+To conclude this section, we remark that if you want to put {\tt
+\string\input\ {\sl filename} } into a letter parameter, make
+sure that there is a {\sl nontrivial} space following the {\sl
+filename}. To be on the safe side, always use {\tt
+\string\inputfile $\{$\sl filename.ext$\}$} instead. Also {\tt
+<!>}, when output to screen, is an invitation to read the log
+file for a warning message.
+
+\bigskip
+{\lbold Example}
+
+
+\smallskip
+
+The following is an example. If you are running plain \TeX, add
+{\tt\string\input\ formlett} at the top. But if you are running
+\LaTeX, then just add at the top the line
+
+\linecount=1\relax
+\stt\beginrawlist[][][4][][][3.3in]{}
+ \documentstyle[formlett]{article}
+ \begin{document}
+\endrawlist
+\rm
+
+
+
+The line numbering on the right hand side is for reference only,
+as in the other occurrences later on. The example reads as
+follows.
+
+\medskip
+
+\stt\beginrawlist[][][4][][][3.3in]{}
+ \beginletter
+ \paranames % optional
+ \tt<<FULL NAME>>;%
+ \tt<<ADDRESS-etc>>;%
+ +\tt<<GIVEN NAME>>;%
+ \tt<<MISSING ITEM>>;%
+ \tt<<PHONE NUMBER>>!
+ \loaddefaultparas % optional
+
+ \NOPAGENUMBERS\parindent=0pt
+ \noindent{\it\paras[1]}\par
+ \blockparas[2]\par\bigskip
+
+ Dear \paras[1][2],\par\medskip
+ We have been looking for
+ \paras[2][2] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[3][2]. \par\medskip
+ Cheers!\hfill Michael\vfill\eject
+ \endletter
+ \preview \showparas
+\endrawlist
+\rm
+
+
+\medskip
+
+%%%%%%%%%%%%
+% letter top
+%%%%%%%%%%%%
+
+ \beginletter
+\sl
+\hsize=3.1in\relax
+\medskip
+ \paranames % optional
+ \tt<<FULL NAME>>;%
+ \tt<<ADDRESS-etc>>;%
+ +\tt<<GIVEN NAME>>;%
+ \tt<<MISSING ITEM>>;%
+ \tt<<PHONE NUMBER>>!
+ \loaddefaultparas % optional
+
+ \NOPAGENUMBERS\parindent=0pt\overfullrule=0pt
+ \noindent{\it\paras[1]}\par
+ \blockparas[2]\par\medskip
+
+ Dear \paras[1][2],
+
+ \smallskip
+ We have been looking for
+ \paras[2][2] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[3][2]. \par\medskip
+ Cheers!\hfill Michael\par %\vfill\eject
+\medskip
+ \endletter
+
+%%%%%%%%%%%%
+% letter end
+%%%%%%%%%%%%
+
+
+The above is a typical letter format or form letter. Command
+{\tt\string\preview} in the last line gives
+
+{\preview}
+
+and, the name of the parameters are displayed via
+{\tt\string\showparas} as follows
+
+\showparas
+
+
+\medskip
+
+In other words, we can have a good understanding about what a
+letter format does {\sl without} reading its source code, which
+will be very handy for archiving and retrieving letter templates.
+To provide defaults for letter parameters and output new letters
+via {\tt blockmode}, we may add \par
+
+\medskip
+\stt\beginrawlist[][][4][][][3.3in]{}
+ \paradefaults % optional
+ To whom this may concern
+ +Sir or Madam;something;%
+ 061-225-9905!
+
+ \blockmarks
+ \beginrawblockmode{}
+
+ Mrs L Stenson
+ #1-20 Sunset Street
+ Hillside, Norway
+ ------
+ Louise
+ a Bible
+ 220-8888
+ =========
+
+ ......
+
+ Above empty line active
+
+ \endrawblockmode
+\endrawlist
+\rm
+
+%%%%%%%%%%%%
+% 1st letter top
+%%%%%%%%%%%%
+\paradefaults % optional
+ To whom this may concern
++Sir or Madam;something;%
+ 061-225-9905!
+
+%%%%%%%%%%%%
+% 1st letter end
+%%%%%%%%%%%%
+
+\medskip
+We note the parameters contain special characters \#. That is
+the reason why we used {\tt\string\beginrawblockmode}. Now
+suppose we have to wrap a very long address line, we could use
+{\tt \string\addressbox} to control an {\sl individual}
+parameter. The following is a typical case
+
+\medskip
+\stt\beginrawlist[][][4][][][3.3in]{}
+ \defaultmarks
+ \moreletter
+ S Wales,;%
+ \addressbox[2in][1em]{%
+ University of Manchester Institute
+ of Science and Technology, This is
+ a long address line: it will be
+ wrapped up automatically.}%
+ +;a \TeX\ package \gstr\ manual and
+ many more (\cstr)!
+\endrawlist
+\rm
+
+\medskip
+which is manifested in the following output
+
+%%%%%%%%%%%%
+% 2nd letter top
+%%%%%%%%%%%%
+\defaultmarks
+\moreletter
+ S Wales,;%
+ \addressbox[2in][1em]{%
+ University of Manchester Institute
+ of Science and Technology, This is
+ a long address line: it will be
+ wrapped up automatically.}%
++;a \TeX\ package \gstr\ manual and
+ many more (\cstr)!
+%%%%%%%%%%%%
+% 2nd letter end
+%%%%%%%%%%%%
+
+
+\medskip
+
+Please note that the default parameters have been used there. In
+the case of putting {\sl only} name and address into a form
+letter, we may typically use {\tt linemode} via e.g.
+
+\medskip
+\stt\beginrawlist[][][4][][][3.3in]{}
+ \beginlinemode
+ Z Jiang
+ UNE, Arimdale
+
+ T Ribbons
+ UMIST, Manchester
+ \endlinemode
+ \end{document}
+\endrawlist
+\rm
+
+\medskip
+
+If one saves lines 4-22 to file {\tt myletter.let}, lines 25-63
+or simply lines 57-63 to file {\tt myletter.adr}, then we can for
+instance produce via \LaTeX\ the form letter for multiple
+receivers by
+
+\setraw
+ \documentstyle[formlett]{article}
+ \begin{document}
+ \inputletter{myletter.let}
+ \showparas \preview
+ \paradefaults To whom it may concern!
+ \inputfile{myletter.adr}
+ \beginlabels % 1st parameter group as address
+ \inputfile{myletter.adr} % for labels
+ \endlabels
+ \end{document}
+\unsetraw
+
+{\smooth
+
+If one puts commands {\tt\string\beginlables} and
+{\tt\string\endlabels} at e.g. immediately after line 2 and 63
+respectively, then one gets all the posting labels instead. If
+one puts commands {\tt\string\beginfile$\{$scratch.adr$\}$} and
+{\tt\string\endfile} there respectively, then by adding after
+{\tt\string\endfile} the commands
+
+\setraw
+ \inputfile{scratch.adr}
+ \beginlabels \inputfile{scratch.adr} \endlabels
+\unsetraw
+
+one gets both form letters and the labels. If one insists on not
+writing out auxiliary scratch files, then use {\tt \string\input
+\ formlett.sty \string\initstyle\ [{\it styles}]$\{${\tt
+article}$\}\{${\it preamble}$\}$} to replace {\tt
+\string\documentstyle\ [formlett, {\it styles}]$\{$article$\}$
+{\it preamble} \string\begin$\{$document$\}$}, which will be
+valid for \LaTeX\ but ignored for \TeX\ , and will enable one to
+use {\tt \string\labelsquit} at the end to read in the current
+document again with all the letters there converted into the
+corresponding labels. If you only want to execute certain
+commands the first time round (i.e. before {\tt
+\string\labelsquit} re-reads the file again), use {\tt
+\string\firstread$\{${\it commands}$\}$} for this purpose.
+
+}
+
+
+\bigskip
+{\lbold Macros}
+
+
+\smallskip
+
+One of the main technical features of this set of macros is the
+extensive use of arrays, both one dimensional and two
+dimensional. The one dimensional array {\tt STK} that we use is
+essentially an user-defined stack, while the two dimensional
+arrays {\tt LET} and {\tt DEF} are more like structure or record
+in other programming languages. First let us make clear that an
+array (or stack) of name, say {\tt ABC}, will contain elements
+{\tt \string\ABC\it m\tt\t} for one dimensional and {\tt
+\string\ABC\it m\tt*\it n\tt\t} for two dimensional case, where
+$m$ and $n$ are some non-negative integers representing row and
+column numbers respectively. The first element, if necessary,
+will be used to denote the length of that raw. Thus, {\tt
+\string\ABC1*0\t} for instance will denote the number of elements
+in the first raw of a two dimensional array {\tt ABC}.
+
+
+\medskip
+
+Let us now look at how a mechanism of defaulting {\sl macro}
+parameters is formulated. For this purpose, we first define a
+stack {\tt STK} and its stack pointer {\tt \string\STKcount} by
+
+\setraw
+ \def\make@STKcount{\csname newcount\endcsname
+ \STKcount\global\STKcount=0\relax}
+ \ifx\STKcount\undefined@\def\next{%
+ \make@STKcount}\else\def\next{}\fi\next
+ \long\def\push#1{\global
+ \advance\STKcount1\relax
+ \expandafter\gdef\csname STK\the
+ \STKcount\string~\endcsname{#1}}
+ \def\popnil{\expandafter\let
+ \expandafter\temp@macro\csname
+ STK\the\STKcount\string~\endcsname
+ \ifnum\STKcount>0\global\expandafter
+ \let\csname STK\the\STKcount
+ \string~\endcsname=\undefined@
+ \global\advance\STKcount-1%
+ \else
+ \def\temp@macro{}\global\STKcount=0%
+ \fi\relax }
+ \def\pop{\popnil\temp@macro}
+\unsetraw
+
+
+The first four lines of code will ensure that the stack pointer
+will not be flushed if this useful subset of macros is loaded
+again by for instance another style file in the middle of a \TeX
+\ document. With the above code, we can stack away anything by
+{\tt\string\push$\{anything\}$} and later use {\tt \string\pop}
+to recall them or {\tt \string\popnil} to remove one element from
+the stack.
+
+
+\medskip
+So, how can we make defaults for certain empty macro
+parameters? The simplest case is perhaps
+
+
+\setraw
+ \long\def\get@nepara[#1][#2]{{%
+ \def\next@{#2}%
+ \ifx\next@\empty\push{#1}\else
+ \push{#2}\fi}\ag@in}
+ \long\def\get@para\left@#1\right@{%
+ \def\check@{%
+ \ifx[\next@
+ \def\full@####1{\get@nepara[#1]####1}%
+ \else
+ \def\full@{\get@nepara[#1][#1]}\fi
+ \full@}%
+ \futurelet\next@\check@}
+\unsetraw
+
+
+
+Basically, {\tt\string\get@onepara[<A>][<B>]} will push the
+default {\tt <A>} to the stack {\tt STK} unless {\tt <B>} is
+nonempty. And {\tt\string \get@para\string \left@<A>\string
+\right@} will look at the next token to be read, if it is
+character \lq{\tt[}\rq, then reads in a macro parameter in the
+form of {\tt [<B>]} and then push {\tt <B>} to the stack {\tt
+STK}, otherwise push the default {\tt <A>} to that stack. For the
+more general case, we need to define
+
+
+\setraw
+ \long\def\do@nepara
+ \left@#1\right@#2\p@r@end{%
+ \gdef\p@r@data{#2}\global\advance
+ \p@r@count1\get@para\left@#1\right@}
+ \def\ag@in{\ifx\p@r@data\empty
+ \def\next@{\relax\getp@r@s\run@CMD}%
+ \else\def\next@{\expandafter\do@nepara
+ \p@r@data\p@r@end}%
+ \fi\next@}
+ \def\run@CMD{\csname STK\the\STKcount
+ \string~\endcsname}
+ \newcount\p@r@count
+ \long\def\st@ckparas#1\p@r@end{%
+ \global\p@r@count=0%
+ \gdef\p@r@data{#1}\ag@in}
+\unsetraw
+
+
+so that {\tt\string\st@ckparas \string\left@<A>\string\right@
+...\penalty -20 \string\left@<B>\string\right@ ...
+\string\p@r@end} will look for parameters enclosed in {\tt []}
+one by one, exhausting all the defaults paired by
+{\tt\string\left@} and {\tt \string\right@}. If future tokens
+inside {\tt []} are not found, or empty, the default tokens
+inside the corresponding pair {\tt\string\left@ \string\right@}
+will be used. The new or default tokens will be pushed to the
+general-purpose stack {\tt STK} for a later use, while {\tt
+\string\p@r@count} records the total number of the default macro
+parameters. We note that on exit of {\tt \string\st@ckparas}, the
+control is passed to {\tt\string\runCMD}.
+
+\medskip
+Once all macro parameters are pushed to the stack, we may
+transfer them to separate toks {\tt \string\p@r@one} to {\tt
+\string\p@r@nine} (an easier-to-use format) defined by
+
+\setraw
+ \newtoks\p@r@one\newtoks\p@r@two
+ \newtoks\p@r@three\newtoks\p@r@four
+ \newtoks\p@r@five \newtoks\p@r@six
+ \newtoks\p@r@seven\newtoks\p@r@eight
+ \newtoks\p@r@nine
+ \def\clrp@r@s{\global\p@r@one={}%
+ \global\p@r@two={}\global\p@r@three={}%
+ \global\p@r@four={}\global\p@r@five={}%
+ \global\p@r@six={}\global\p@r@seven={}%
+ \global\p@r@eight={}\global\p@r@nine={}}
+\unsetraw
+
+where {\tt\string\clrp@r@s} clears all the parameter toks. We can
+then retrieve parameters from the stack {\tt STK} to the
+parameter toks via {\tt\string \getp@r@s} with the following code
+
+
+\setraw
+ \newcount\temp@count
+ \def\getp@r@s{\temp@count=\p@r@count
+ {\loop
+ \ifnum\temp@count>0
+ \expandafter\let\expandafter
+ \t@macro\csname STK\the\STKcount
+ \string~\endcsname
+ \ifcase\temp@count
+ \or\global\p@r@one=\expandafter{\t@macro}%
+ \or\global\p@r@two=\expandafter{\t@macro}%
+ \or\global\p@r@three=\expandafter{\t@macro}%
+ \or\global\p@r@four=\expandafter{\t@macro}%
+ \or\global\p@r@five=\expandafter{\t@macro}%
+ \or\global\p@r@six=\expandafter{\t@macro}%
+ \or\global\p@r@seven=\expandafter{\t@macro}%
+ \or\global\p@r@eight=\expandafter{\t@macro}%
+ \or\global\p@r@nine=\expandafter{\t@macro}%
+ \else
+ \errmessage
+ {Parameter capacity exceeded.}%
+ \fi \global\expandafter\let
+ \csname STK\the\STKcount
+ \string~\endcsname=\undefined@%
+ \global\advance\STKcount-1%
+ \global\advance\temp@count-1\relax
+ \fi
+ \ifnum\temp@count>0\repeat}}
+\unsetraw
+
+
+
+\medskip
+We are now ready to use the above mechanism to default
+macro parameters for some already defined macros. Suppose we have
+already defined a macro {\tt \string\crudemac[<A>][<B>]} which
+takes two macro parameters {\tt <A>} and {\tt<B>}, and we want to
+define a new macro {\tt \string\smartmac} which behaves like {\tt
+\string\crudemac} but will default the macro parameters {\tt <A>}
+and {\tt <B>} to for instance 9 and 88 respectively. For this
+purpose, we may define {\tt \string\smartmac} via
+
+
+
+\setraw
+ \def\smartmac{\push{%
+ \edef\next@@{\noexpand
+ \crudemac[\the\p@r@one][\the\p@r@two]}%
+ \popnil\clrp@r@s\next@@}\st@ckparas
+ \left@9\right@\left@88\right@\p@r@end}
+\unsetraw
+
+This way, all the followings
+
+\setraw
+ \crudemac[9][88], \smartmac[9][88],
+ \smartmac, \smartmac[], \smartmac[][],
+ \smartmac[9], \smartmac[9][], \smartmac[][88]
+\unsetraw
+
+are the same under the assumption that we shall not use
+characters \lq{\tt[}\rqs and \lq{\tt]}\rqs for the macro
+parameters themselves, and that {\tt\string\crudemac} will not
+change any {\tt \string\catcode} inside. The reason for this
+latter condition lies in the fact that when {\tt\string\smartmac}
+looks at the next character, the character is in a sense already
+read. If {\tt \string\crudemac} changes the {\tt\string\catcode}
+of that particular character, then the one that is already read
+via {\tt\string\futurelet} will have a misleading
+{\tt\string\catcode}. If one has to change {\tt \string\catcode}
+inside but wants to avoid this possible misbehavior, always put
+full number of empty brackets \lq{\tt[]}\rqs for the defaults, or
+put a {\tt\string\relax} immediately afterwards. Better still,
+make the last parameter to appear in a mandatory \lq$\{\}$\rqs form
+rather than the \lq{\tt []}\rqs form via the {\tt \#$\{$} mechanism
+[1], so that those square brackets can be dropped off.
+
+
+\medskip
+
+
+For example, we as a by-product also defined a 100\%
+verbatim mode by
+
+{\stt
+\ \ \string\begin@@rawlist[$A$][$B$][$C$][$D$][$E$][$F$]$G$ }\par
+\setraw
+ <general text>
+ \endrawlist
+\unsetraw
+
+
+where, for the line numbering of the raw text, {\tt $A$}, ...,
+{\tt $G$} represent respectively the initial value, increment
+step, number of digits, font, horizontal position of text,
+horizontal shift of numbering, and the password to leave raw text
+mode. Incidentally, {\tt \string\linecount} records the current
+line numbering count. Our purpose is to define {\tt
+\string\beginrawlist} so that its format is
+
+{\stt
+\ \ \string\beginrawlist[$A$][$B$][$C$][$D$][$E$][$F$]$\{G\}$}\par
+
+in which $A$ to $F$ are {\sl optional} while $\{G\}$ is mandatory
+even though $G$ can be empty --- implying {\tt
+\string\endrawlist} is the password to leave the raw-text mode.
+For this purpose, we first define
+
+\setraw
+\def\begin@rawlist[#1][#2][#3][#4][#5][#6]#{%
+ \begin@@rawlist[#1][#2][#3][#4][#5][#6]}%
+\unsetraw
+
+to make \lq$\{\}$\rqs pair compulsory for {\tt \#7}, then we
+provide the defaults for {\tt $A$} to {$F$} as
+{\tt\string\linecount}, {\tt 1}, {\tt 0}, {\tt \string\tiny},
+{\tt 0pt} and {\tt 0pt} respectively via
+
+\setraw
+\def\beginrawlist{\push{%
+ \edef\next@@{\noexpand\begin@rawlist
+ [\the\p@r@one][\the\p@r@two][\the\p@r@three]%
+ [\the\p@r@four][\the\p@r@five][\the\p@r@six]}%
+ \popnil\clrp@r@s\next@@}% end of push
+ \font\tiny@rm=cmr5%
+ \edef\temp@macro{%
+ \noexpand\left@\the\linecount\noexpand\right@
+ \noexpand\left@1\noexpand\right@
+ \noexpand\left@0\noexpand\right@
+ \noexpand\left@\noexpand\tiny@rm
+ \noexpand\right@
+ \noexpand\left@0pt\noexpand\right@
+ \noexpand\left@0pt\noexpand\right@}%
+ \expandafter\st@ckparas\temp@macro\p@r@end}%
+\unsetraw
+
+\medskip
+
+{\smooth
+\relax Likewise, we could also similarly define {\tt \string\printfile
+[...]}$\{${\it filename.ext}$\}$ so that \lq{\tt [...]}\rqs takes
+a same defaulting scheme. }
+
+
+\medskip
+There are several tiny but very useful macros in {\tt formlett}
+which are used again and again. One of such macros is for testing
+if one string contains another string. The following {\tt
+\string\test@str} tests if string {\tt\#1} is contained in string
+{\tt\#2}
+
+
+\setraw
+ \newif\iftemp@if \newtoks\temp@toks
+ % return \temp@iftrue if yes,
+ % \first@half,\second@half are global
+ \long\def\test@str#1#2{%
+ \long\def\strip@endmark##1\s@fetymarkI
+ #1\s@fetymark{\gdef\second@half{##1}}%
+ \long\def\strip@markI##1\s@fetymarkI
+ \s@fetymark{\gdef\first@half{##1}}%
+ \long\def\p@rse##1#1##2\s@fetymark{%
+ \gdef\first@half{##1}%
+ \gdef\second@half{##2}%
+ \ifx\second@half\empty
+ \strip@markI##1\s@fetymark\temp@iffalse
+ \else
+ \strip@endmark##2\s@fetymark\temp@iftrue
+ \fi}%
+ \temp@toks={#2\s@fetymarkI#1\s@fetymark}%
+ \expandafter\p@rse\the\temp@toks }%
+\unsetraw
+
+
+The {\tt\string\first@half} will contain the tokens upto but
+excluding the substring {\tt\#1}, while the {\tt
+\string\second@half} will contain the tokens after the {\sl
+first} appearance of {\tt\#1}. Should {\tt\#2} not contain string
+{\tt\#1} at all, then {\tt \string\first@half} is the whole
+string {\tt\#2} whereas {\tt \string\second@half} is empty.
+
+\medskip
+
+The small macros such as the above one and the stack utilities,
+though built for the main purpose of {\tt formlett}, provide also
+a good \lq infrastructure\rqs for other house-keepings. One of
+the sidekicks of this type is our macro for commenting out blocks
+of text inside a \TeX\ file. Basically, {\tt
+\string\begincomment$\{$\it password$\}$} will set {\sl all}
+characters of code {\tt0} to {\tt \string\MAX@CHR@CODE}
+(={\tt255} by default) to catcode 11 or 12, and look for the {\it
+password}, or {\tt \string\endcomment} in the absence of a
+password, to quit the comment mode. In comparison to a very
+compact macro {\tt comment.sty} (currently at version 3.0)
+written by Victor Eijkhout, quitting comment mode via a password
+here seems more flexible.
+
+
+
+
+\medskip
+As for the other macros in {\tt formlett}, it is difficult to
+explain them without printing out all of them. So instead, we
+shall explain simply one of the strategies in parsing the letter
+parameters. Suppose $W$ is a list of parameters separated by
+\lq{\tt+}\rqs and ended by \lq{\tt!}\rq, i.e. $W$ is like
+{\tt<A>+<B>+...+<S>!}. Then it will be easy to parse all the
+parameters one by one (to a stack for instance) if we can know
+whether there is precisely one parameter left over. To detect it,
+we use
+
+
+
+\setraw
+ \newif\ifl@stline
+ \long\def\testl@stline
+ #1+#2!#3\s@fetymark{%
+ \def\next{#2}\ifx\next\empty
+ \l@stlinetrue\else\l@stlinefalse\fi
+ \def\next{#3}\def\nextsample{+!}%
+ \ifx\next\nextsample\l@stlinefalse\fi}
+\unsetraw
+
+
+
+{\smooth Then the command
+{\tt \string\testl@stline} {\tt $W$+!\string\s@fetymark }
+will set {\tt \string\l@stlinetrue} if
+there is only one parameter left in $W$, and will set {\tt
+\string\l@stlinefalse} if otherwise. }
+
+
+
+\medskip
+
+Finally, for those wizard users who want to do everything their own way,
+we just note that if for instance the 3rd letter parameter of the 2nd
+group of a cluster is given as {\tt<A>}, then {\tt \string\LET2*3\t}
+will contain {\tt \string\b@group \string\relax {\tt<A>}\string\e@group}
+right after a cluster is read in. {\tt \string\DEF2*3\string~}, on the
+other hand, contains the corresponding default parameter in the same
+fashion. Furthermore, the command
+{\tt\string\checkparas[$m$][$n$]$\{$LET$\}$} will copy the content of
+{\tt\string\paras[$m$][$n$]}, minus the `wrapping' extra tokens
+{\tt\string\b@group\string\relax} and {\tt\string\e@group}, to
+{\tt\string\cachedata} and set {\tt\string\ifemptyparas} to true or
+false depending on whether the content is empty or not. This way, a user
+may even change the characteristics of his letter template by first
+testing the content of the supplied individual parameters. However, we
+note that if {\tt\string \loaddefaultparas} is executed, then the {\tt
+LET} array, when some of its elements are not supplied, will contain the
+corresponding elements of the {\tt DEF} array. Hence care must be
+exercised under such circumstances, when interpreting the
+{\tt\string\cachedata} generated by
+{\tt\string\checkparas[$m$][$n$]$\{$LET$\}$}. If necessary, we may use
+{\tt\string\delparadefaults} to delete current default parameter array
+{\tt DEF} so as to conduct {\tt\string\checkparas$\{$LET$\}$} more
+precisely. So if anyone wants to manipulate furthermore letter
+parameters inside a letter template, he or she will now at least know
+where to look at.
+
+%\penalty -50
+\bigskip
+{\lbold References}
+
+\smallskip
+{\parindent=2em
+\item{[1].} Knuth D E, {\sl The \TeX book}, Reading, Mass.,
+Addison-Wesley, 1992. \par
+\item{[2].} Piff M, Text merges in \TeX\ and \LaTeX, {\sl TUGboad},
+13(4):518, 1993. \par
+\item{[3].} Damrau J and Wester M, Form letters with 3-across
+labels capacity, {\sl TUGboat}, 13(4):510, 1991.
+\par
+}
+
+
+\penalty -50\bigskip
+
+{\lbold Appendix}
+
+
+\smallskip
+
+
+In the followings, we give a brief summary of the new commands
+given by {\tt formlett} version 2.3.
+
+\medskip
+
+Let $m$ and $n$ be numbers, $p$, $q$ and $r$ be dimensions, $A$,
+$B$, $P$, $G$, $C$ and $T$ be tokens, and $X$ be a box.
+Furthermore, we shall denote by $R$ a full set of letter
+parameters ended by \lq{\tt !}\rq, with \lq{\tt;}\rqs separating
+parameters inside a same group and \lq{\tt+}\rqs separating
+different parameter groups. We moreover denote $R$ by $F$, when
+\lq{\tt ; + !}\rqs there can be replaced by \lq$P$ $G$ $C$\rqs
+respectively if {\tt \string\delimiters$\{P\}\{G\}\{C\}$} is
+issued. In the commands tabulated below, the macro parameters
+contained in squared brackets support default. In particular, the
+defaults are $m$={\tt 1}, $n$={\tt 1}, $p$={\tt 8truecm},
+$q$={\tt 1.5em}, $r$={\tt 3pt}, $A$={\tt\string\noindent},
+$B$={\tt\string\par}, {\tt\string\previewfalse},
+{\tt\string\localparastrue} and {\tt\string\nodefaultsfalse}.
+
+
+%\penalty-10000
+
+\vskip 0pt plus 5cm
+
+
+\newdimen\tempdimone
+\newdimen\tempdimtwo
+\tempdimone=\hsize
+\advance\tempdimone by-0.2pt
+\tempdimtwo=\hsize
+\advance\tempdimtwo by-1.8in
+\def\hruler{\hrule width \tempdimone}
+\long\def\entry#1#2{%
+\par\hbox to \tempdimone{\noindent
+ \vrule~\textbox[1.7in]{#1}~\hss
+ \vrule~\textbox[\tempdimtwo]{\raggedright#2}~\vrule}%
+ \par}
+
+\long\def\longentry#1#2#3{%
+\par\hbox to \tempdimone{\noindent
+ \vrule~\textbox[3in]{#1}~\hss~\vrule}\par
+ {\kern-8pt \advance\tempdimtwo0.10in
+ \vrule width1.7in height0pt \vrule width\tempdimtwo height 0.4pt \par
+ \kern-3pt}
+ \entry{#2}{#3}}
+
+\long\def\Longentry#1#2#3{%
+\par\hbox to \tempdimone{\noindent
+ \vrule~\textbox[3in]{#1}~\hss~\vrule}\par
+ {\advance\tempdimtwo0.08in\kern-1pt
+ \vrule~\hfill\vrule width \tempdimtwo height 0.4pt \vrule\par
+ \kern-2.5pt}%
+ \entry{#2}{#3}}
+
+
+
+\medskip \penalty-100
+{\eightpoint
+\nointerlineskip\parskip=0pt
+
+\hruler
+\entry{{\tt\string\paras[$m$][$n$]}}%
+ {$m^{th}$ parameter of $n^{th}$ group }%
+
+\entry{{\tt\string\blockparas[$m$][$n$][$A$][$B$]}}%
+ {$m^{th}$ to the last parameter of $n^{th}$ group, each
+preceded by $A$ and followed by $B$, wrapped by $\{$\penalty
+1000$\}$ if
+$B$={\tt\string\relax}}
+
+\entry{{\tt\string\addressparas[$m$][$n$][$p$][$q$]}}%
+ {$m^{th}$ to the last parameter of $n^{th}$ group, each put
+into a box of width $p$ with indent $q$ for wrapped portions}
+
+
+\entry{{\tt\string\loaddefaultparas}}%
+ {fill empty parameters with defaults}
+
+\hruler \penalty-1000
+\hruler
+
+
+\entry{{\tt\string\checkparas[$m$][$n$]$\{T\}$}}%
+ {$m^{th}$ parameter of $n^{th}$ group copied to {\tt\string\cachedata};
+ {\tt\string\ifemptyparas} is true if element is empty; $T$ is often
+ {\tt LET} or {\tt DEF}}%
+
+\hruler
+
+
+\entry{{\tt\string\moreletter\ $F$}}%
+ {use parameters $F$ to output a new letter}
+
+
+\entry{{\tt\string\paranames\ $R$}}%
+ {use $R$ as parameter names}
+
+\entry{{\tt\string\paradefaults\ $R$}}%
+ {use $R$ as default parameters}
+
+
+\entry{{\tt\string\delparadefaults}}%
+ {delete default parameters}
+
+%\hruler \penalty-1000
+\hruler
+
+
+\entry{{\tt\string\delimiters$\{P\}\{G\}\{C\}$}}%
+ {use $P$, $G$, $C$ as delimiters}
+
+
+\entry{{\tt\string\defaultmarks}}%
+ {use \lq{\tt ; + !}\rqs as delimiters}
+
+
+\entry{{\tt\string\blockmarks}}%
+ {use \lq{\tt ....}\rq, \lq{\tt ----}\rq, \lq{\tt ====}\rqs as delimiters}
+
+%\hruler \penalty -1000
+\hruler
+
+\entry{{\tt\string\preview}}%
+ {highlight parameter positions}
+
+\entry{{\tt\string\showparas}}%
+ {display parameter names, if any}
+
+\entry{{\tt\string\inputletter$\{file.ext\}$}}%
+ {input letter content}
+
+\entry{{\tt\string\inputfile$\{file.ext\}$}}%
+ {input $file.ext$}
+
+%\hruler \penalty -1000
+\hruler
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginletter}\cr
+\hbox{\tt\string\endletter~~}\cr}\right.$ }%
+ {delimiters for letter content (template)}
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginpilemode}\cr
+\hbox{\tt\string\endpilemode~~}\cr}\right.$ }%
+ {normal letter parameters cluster-wise}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginblockmode}\cr
+\hbox{\tt\string\endblockmode~~}\cr}\right.$ }%
+ {for line-by-line blocks of parameters, empty lines active
+within each cluster}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginlinemode}\cr
+\hbox{\tt\string\endlinemode~~}\cr}\right.$ }%
+ {for line-by-line parameters, empty lines delimit clusters}
+
+%\hruler \penalty-1000
+\hruler
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginrawblockmode$\{T\}$}\cr
+\hbox{\tt\string\endrawblockmode\ \ \ \ \ }\cr}\right.$ }%
+ {raw text mode; nonempty $T$ replaces {\tt\string\endrawblockmode}
+ to mark end}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginrawlinemode$\{T\}$}\cr
+\hbox{\tt\string\endrawlinemode\ \ \ \ \ \ }\cr}\right.$ }%
+ {raw text parameters and active spaces etc}
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\begindatamode[$T$]$\{m\}$}\cr
+\hbox{\tt\string\enddatamode\ \ \ \ \ \ \ \ }\cr}\right.$ }%
+ {$m$ raw text lines for one form letter}
+
+\hruler
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\begincolumns[$a$][$b$]}\cr
+\hbox{\tt\string\endcolumns\ \ \ \ \ \ \ }\cr}\right.$ }%
+ {$a$-columns separated by distance $b$}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\begincomment$\{T\}$}\cr
+\hbox{\tt\string\endcomment\ \ \ \ \ }\cr}\right.$\par
+ \ \ \ {\tiny }}%
+ {comment out lines, nonempty $T$ replaces {\tt
+\string\endcomment} to mark last {\sl full line} for comment}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginfile[$T$]$\{{\it
+file.ext}\}$}\cr
+\hbox{\tt\string\endfile\ \ \ \ \ \ \ \ \ \ \ \ \ }\cr}\right.$\par
+ \ \ \ {\tiny }}%
+ {write text verbatim to file {\it file.ext} (empty implies {\tt
+scr@tch@.tex}), nonempty $T$ replaces {\tt
+\string\endfile} to mark last full line}
+
+
+
+\hruler
+
+
+\entry{{\tt\string\PAGENO=1}}%
+ {page number reset to 1}
+
+
+\entry{{\tt\string\NOPAGENUMBERS}}%
+ {no page numbers}
+
+
+\entry{{\tt\string\textbox[$p$]$\{text\}$}}%
+ {$text$ into box of width $p$}
+
+
+\entry{{\tt\string\boxmore[$r$]$\{X\}$}}%
+ {add borderline to box $X$ at a distance $r$}
+
+
+\entry{{\tt\string\addressbox[$p$][$q$]$\{text\}$}}%
+ {$text$ into box of width $p$, with wrapped options indented
+by $q$}
+
+\hruler
+
+
+\entry{{\tt\string\previewfalse}}%
+ {given parameters instead of highlighted boxes will be shown}
+
+
+\entry{{\tt\string\localparastrue}}%
+ {letter parameters put into $\{\}$ before displayed}
+
+
+\entry{{\tt\string\nodefaultsfalse}}%
+ {take defaults for empty letter parameters}
+
+\hruler
+
+\entry{{\tt\string\previewtrue}}{{\it cf.} above}
+
+
+\entry{{\tt\string\localparasfalse}}{}
+
+
+\entry{{\tt\string\nodefaultstrue}}{}
+
+\hruler
+
+\vskip0pt plus 1cm
+~\hfill $\underline{\hbox{\sl Table continues in the next page}}$
+
+\penalty-5000
+\hruler
+
+
+\Longentry{%
+$\left\{\matrix{ \hbox{\tt\string\beginrawlist
+ [$a$][$b$][$c$][$d$][$e$][$f$]$\{g\}$}\cr
+ \hbox{\tt\string\endrawlist\hskip3.4cm}\cr}\right.$ }%
+ {\strut\par{\sl defaults:}\everypar={\hbox{\ \ \ }}\par\par
+ $a$={\tt\string\linecount},\par
+ $b$={\tt1}, $c$={\tt0},\par
+ $d$={\tt\string\tiny@rm}, \par
+ $e$={\tt0pt}, $f$={\tt0pt}, \par
+ $g$={\tt\string\endrawlist}}%
+{verbatim listing, line count from $a$, step $b$, digits $c$,
+font $d$, text position $e$, numbering shift $f$, end mark $g$}
+
+\hruler \vskip0.5pt
+\Longentry{%
+$\matrix{\hbox{\tt \string\printfile
+ [$a$][$b$][$c$][$d$][$e$][$f$]$\{$\it file.ext$\}$}\cr
+ \hbox{}\cr}$}%
+ {\strut\par{\sl defaults:} ~~$c$={\tt6} {\it etc}}%
+ {verbatim listing of {\it file.ext}}
+
+\hruler
+
+
+
+\Longentry{%
+$\left\{\matrix{ \hbox{\tt\string\beginlabels
+ [$a$][$b$][$c$][$d$][$e$][$f$]}\cr
+ \hbox{\tt\string\endlabels\hskip3cm}\cr}\right.$ }%
+ {\strut\par{\sl defaults:}\everypar={\hbox{\ \ \ }}\par\par
+ $a$={\tt 20pt}, \par $b$={\tt\string\tt\string\raggedright},
+ \par $c$={\tt1}, $d$={\tt1}, \par
+ $e$={\tt2.6in}, $f$={\tt2em}}%
+ {form letters become labels: address taken from $c^{th}$ to
+last parameter of $d^{th}$ group, with width $e$, indent
+$f$, borderspace $a$ and font toks $b$}
+
+\hruler
+
+
+\entry{{\tt\string\firstread$\{T\}$}}%
+ {toks $T$ will not be read if the file is re-read via {\tt
+ \string\labelsquit}}
+
+
+\entry{{\tt\string\initstyle[$a$]$\{b\}\{c\}$}}%
+ {initiation for {\tt\string\labelsquit},with styles $a$,
+ documentstyle $b$ and preamble $c$}
+
+\entry{{\tt\string\initclass[$a$][$o$]$\{b\}\{c\}$}}%
+ {similar to {\tt\string\initstyle} ($o$ is \LaTeX2e options),
+ but retains native \LaTeX2e when applicable}
+
+
+\hruler \vskip0.5pt
+\Longentry{%
+$\matrix{\hbox{\tt \string\labelsquit
+ [$a$][$b$][$c$][$d$][$e$][$f$]$\{$\it file.ext$\}$}\cr
+ \hbox{}\cr}$}%
+ {\strut\par{\sl defaults:}\everypar={\hbox{\ \ \ }}\par\par
+ see that for {\tt\string\beginlabels}}
+ {quit after converting letters to labels by reading the current
+ document or {\it file.ext}}
+
+\hruler
+
+
+
+\def\ABC{{\tt\esc@}{\it abc}}
+
+
+\entry{{\tt\string\newarray\ABC}}%
+ {make array named {\it abc} along with
+ {\tt\ABC} and {\tt\string\check{\it abc}}}
+
+
+\entry{{\tt\string\delarray\ABC}}%
+ {delete array named {\it abc}}
+
+
+\hruler
+
+
+\entry{{\tt\ABC($m$)=$\{T\}$}}%
+ {assign tokens $T$ to {\tt\ABC($m$)};
+ {\tt\ABC($m$)} $\equiv$
+ {\tt\ABC($m_1,...,m_k$)} for
+ $m$=$1+\sum_1^k (m_i-1)*\hbox{\tt\string\dataheight}^{k-i}$}
+
+
+\entry{{\tt\ABC($m$)}}{value of {\tt\ABC($m$)},
+ if not followed by `{\tt=}'}
+
+
+\entry{{\tt\string\dataheight}}{current array dimension: {\it cf.}
+ {\tt\ABC($m$)}}
+
+
+\entry{{\tt\string\readarray$\{N\}\{a_1 \hbox{\&}\, ..\, \hbox{\&} a_n\}$}}%
+ {equivalent to {\tt\esc@{\it N}(1)}=$a_1$, ..,
+ {\tt\esc@{\it N}($n$)}=$a_n$}
+
+
+
+\entry{{\tt\string\check{\it abc}($m$)}}%
+ {copy {\tt\ABC($m$)} to {\tt\string\cachedata};
+ set {\tt\string\ifemptydata} to true/false accordingly}
+
+
+\hruler
+
+\entry{{\tt\string\readstyles$\{f_1,...,f_n\}$}}%
+ {read files $f_1$ to $f_n$ with default extension {\tt .sty};
+ {\tt @}'s catcode set to {\tt 11} during input}
+
+\hruler
+
+
+}
+
+\footline={\lower5pt
+\hbox to \hsize
+ {{\rm Jiang Z ~~~{\sl Formlett: ~for letters to multiple receivers}
+ \hss {\sl $\bullet$End of Document$\bullet$}
+\hss \folio}}}
+
+\vskip 8in
+
+%\vfill\eject
+\endcolumns
+\vfill\eject
+
+
+
+%%%%%%%%%%%%%%%%%%
+% MAKE EXAMPLE1.TEX EXAMPLE2.TEX
+%%%%%%%%%%%%%%%%%%
+
+
+
+\message{Can I create <example1.tex> and <example2.tex> ? (y/n) }%
+\read-1 to \reply \def\nono{n }\def\Nono{N }\def\noNo{no }\def\NoNo{NO }%
+\def\next{\end{document}}%
+\ifx\reply\nono\else\ifx\reply\Nono\else\ifx\reply\noNo\else
+\ifx\reply\NoNo\else\let\next\relax
+\message{(=== YES ===)}\fi\fi\fi\fi \next
+
+
+
+
+\beginfile[EndOfExample1]{example1.tex}
+
+% Example1: EXAMPLE for using scratch files
+% under plain TeX or LaTeX
+%
+
+\input formlett.sty
+%
+%%%% MAKE scr@tch@.let
+%
+\beginfile{scr@tch@.let}
+
+% letter content
+\boxmore[10pt]{\hbox{\vbox{% BOX FOR BORDERLINE
+
+\parindent=0pt
+\blockparas
+
+\bigskip\bigskip
+
+Dear \paras,
+
+\bigskip
+
+This part is typically the letter content. Since we are using a
+scratch file for our main body of our letter, the letter can be
+arbitrarily long, in comparison to using {\tt \string\beginletter}
+and {\tt \string\endletter} mechanism. Using a scratch file enables
+us to keep everything inside one single file so that it won't be mixed
+up with other letters.
+
+\medskip
+
+The idea of scratch file can also be applied to creating the address
+file, so that the address file can be read for the form letters in the
+first time and for mailing labels in the second time. These features are
+the purpose of this particular example.
+
+\medskip
+Thanks for using {\tt formlett.sty}.
+
+}}} % END OF BOX FOR BORDERLINE
+\vfill\eject
+
+\endfile
+
+
+%
+%%%% MAKE scr@tch@.adr
+%
+\beginfile{scr@tch@.adr}
+% address file
+\beginlinemode
+\tt<name>
+address line one
+address line two
+etc
+
+\tt<NAME>
+ADDRESS LINE ONE
+ADDRESS LINE TWO
+ETC
+
+\endlinemode
+\endfile
+
+
+%
+%%% MAIN PROCESSING BODY
+%
+
+\hsize=5in
+\initstyle{}{}
+ % Above line is put here for being
+ % able to run this file under either TeX or LaTeX.
+ % It may be deleted for TeX. It may also be replaced
+ % under LaTeX by \documentstyle{article} \begin{article}
+ % for instance
+
+\inputletter{scr@tch@.let}
+\inputfile{scr@tch@.adr} % for form letters
+\beginlabels
+\inputfile{scr@tch@.adr} % for labels
+\endlabels
+
+\end{document}
+
+EndOfExample1
+% above is password
+
+
+
+
+
+
+\beginfile{example2.tex}%
+
+% Example2: EXAMPLE for self-read
+% under plain TeX or LaTeX
+%
+
+
+\input formlett.sty
+\hsize=3.2in % for plain TeX
+\initstyle[]{}{\textwidth=3.2in} % for LaTeX
+
+% MY LOGO
+%
+\catcode`\@=11\relax
+\def\UWS{{\vbadness=10000 \hbadness=10000 \hfuzz=\maxdimen
+ \vfuzz=\maxdimen \font\tiny=cmr5 \font\small=cmr7
+ \def\today{\number\day\space\ifcase\month\or January\or February\or
+ March\or April\or May\or June\or July\or August\or September\or
+ October\or November\or December\fi\space\number\year}%
+ \def\make@temp@box{\csname newbox\endcsname \temp@box\relax}%
+ \ifx\temp@box\undefined \def\next{\make@temp@box}\else\def\next{}\fi\next
+ \font\HUGE=cmss10 at 24.87999pt \noindent
+ \setbox\temp@box=\hbox{\vbox to 0pt{\hbox{\HUGE
+ U\hskip6pt W\hskip6pt S}}}%
+ \def\buffdim{65pt}%\wd\temp@box 61.588pt
+ \rlap{\copy\temp@box}%
+ \rlap{\hskip.4pt\copy\temp@box}%
+ \rlap{\hskip.8pt\copy\temp@box}%
+ \rlap{\hskip1.2pt\copy\temp@box}%
+ \rlap{\hskip1.6pt\copy\temp@box}%
+ \rlap{\hskip2pt\copy\temp@box}%
+ \rlap{\hskip2.4pt\copy\temp@box}%
+ \rlap{\hskip2.8pt\copy\temp@box}%
+ \rlap{\hskip6pt\copy\temp@box}%
+ \rlap{\lower23pt \hbox to \buffdim{\tiny \hskip4pt The ~~~University~~~ Of}}%
+ \rlap{\lower25pt \hbox{\hskip2pt
+ \hbox to \buffdim{\vrule width \buffdim depth .2pt}}}%
+ \rlap{\lower32pt \hbox to \buffdim{\small \hskip-1pt WESTERN SYDNEY}}%
+ \setbox\temp@box=\hbox{\vbox{\let\noindent=\hfill
+ \font\small=cmss8 \baselineskip=8pt %plus 0.5pt minus 0.5pt
+ \small \parskip=0pt
+ \noindent School of Computing and IT\par
+ \noindent University of Western Sydney\par
+ \noindent Victoria Road, Parramatta\par
+ \noindent NSW 2150, Australia\par
+ \medskip
+ \noindent Email: ~z.jiang@uws.edu.au\par
+ \noindent Tel: ~(INT-) 61- 2- 96859336\par
+ \noindent Fax: ~(INT-) 61- 2- 96859245\par
+ \medskip\bigskip
+ \noindent \tt\today}}%
+ \rlap{\lower3.0cm \hbox{\box\temp@box}}%
+}\par}\catcode`\@=12\relax
+%
+
+\beginletter
+\paranames % optional
+ \tt<<FULL NAME>>;%
+ \tt<<ADDRESS-etc>>;%
+ +\tt<<GIVEN NAME>>;%
+ \tt<<MISSING ITEM>>;%
+ \tt<<PHONE NUMBER>>!
+\loaddefaultparas % optional
+
+\NOPAGENUMBERS\parindent=0pt\overfullrule=0pt
+\UWS \par\bigskip\bigskip\bigskip
+\noindent{\it\paras[1]}\par
+\blockparas[2]\par\bigskip
+
+Dear \paras[1][2],\par\medskip
+We have been looking for
+\paras[2][2] for quite a while
+without any luck, could you help
+us out? If so, please ring
+\paras[3][2]. \par\medskip
+Cheers!\hfill Zhuhan\vfill\eject
+\endletter
+\preview \showparas
+\eject % \eject here is purely for better labels
+
+
+\paradefaults % optional
+ To whom this may concern
+ +Sir or Madam;something;%
+ 061-225-9905!
+
+
+\blockmarks
+\beginblockmode
+
+Mrs L Stenson
+\#1-20 Sunset Street
+Hillside, Norway
+------ separate groups
+Louise
+a Bible
+220-8888
+========= separate cluster
+
+...... force entry next line
+
+Above empty line active
+
+\endblockmode comment ignored
+
+\defaultmarks
+\moreletter
+ S Wales,;%
+ \addressbox[2in][1em]{University of Manchester Institute
+ of Science and Technology, This is
+ a long address line: it will be
+ wrapped up automatically.}
+ +;a \TeX\ package \gstr\ manual and
+ many more (\cstr)!
+
+\beginlinemode
+ S Pan
+ UNE, Arimdale
+
+ T Ribbons
+ UMIST, Manchester
+\endlinemode
+
+\beginpilemode
+
+ C Anderson;42nd Street;USA+Christine;your service invoice!
+
+ D Holmes;Flat \#2, Finneybank Rd;London+David;the tax receipt;%
+ 071-902 7799!
+
+\endpilemode
+
+\begindatamode{3} % strictly 3 lines for one letter
+data-#1
+data-#2
+data-#3
+data-#4
+data-#5
+\enddatamode
+
+\ifISLATEX \firstread{\global\textwidth=6in}
+\else \firstread{\hsize=6in}\fi % make labels double columns
+
+\labelsquit{}
+\end{document} % redundant
+\endfile
+
+
+
+\message{Now go and TeX or LaTeX <example1.tex> and <example2.tex>}%
+
+
+\end{document}
+%
+%
+%
+%ENDDOCUMENT
+
+
+
diff --git a/macros/generic/formlett/user_manual.pdf b/macros/generic/formlett/user_manual.pdf
new file mode 100644
index 0000000000..e23ef4bd2b
--- /dev/null
+++ b/macros/generic/formlett/user_manual.pdf
Binary files differ
diff --git a/macros/generic/formlett/user_manual.tex b/macros/generic/formlett/user_manual.tex
new file mode 100644
index 0000000000..b317848477
--- /dev/null
+++ b/macros/generic/formlett/user_manual.tex
@@ -0,0 +1,1113 @@
+% USER MANUAL in Plain TeX
+
+\input formlett.sty
+
+% FONTS
+\font\hbold=cmbx10 at 17.28pt
+\font\lbold=cmbx10 at 14.4pt
+\font\bbold=cmbx10 at 12pt
+\font\small=cmr8
+\font\tiny=cmr5
+\font\stt=cmtt9
+\catcode`\@=11\relax
+%
+%
+%
+% OTHER MACROS
+%
+\catcode`\~=11\relax \def\t{{\tt ~}}
+\catcode`\~=\active\relax
+\catcode`\!=0\relax !catcode`!\=11!relax
+!def!esc{\}!def!escs{\! }
+!catcode`!\=0!relax \catcode`\!=12\relax
+\def\rqs{\rq\ }
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\font\sc=cmcsc10\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+% makeshift macro
+\catcode`\^^M=13\relax%
+\def\setraw{\bgroup\rm@ligature\set@space\set@tab%
+\set@cr\stt\raw@chars[11][13][13][13][13]\def^^M{\strut\par}\setraw@@}%
+\edef\temp@macro{%
+ \noexpand\long\noexpand\def\noexpand\setraw@@\noexpand##1^^M##2%
+ \esc@ unsetraw{##1##2\noexpand\egroup}}\temp@macro %
+\catcode`\^^M=5\relax%
+
+
+\font\ninerm=cmr9 \font\eightrm=cmr8
+\font\ninei=cmmi9 \font\eighti=cmmi8
+\font\ninesy=cmsy9 \font\eightsy=cmsy8
+\font\ninebf=cmbx9 \font\eightbf=cmbx8
+\font\ninett=cmtt9 \font\eighttt=cmtt8
+\font\nineit=cmti9 \font\eightit=cmti8
+\font\ninesl=cmsl9 \font\eightsl=cmsl8
+
+\font\sixrm=cmr6
+\font\sixi=cmmi6
+\font\sixsy=cmsy6
+\font\sixbf=cmbx6
+
+\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177
+\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60
+\hyphenchar\ninett=-1 \hyphenchar\eighttt=-1 \hyphenchar\tentt=-1
+
+\font\tentex=cmtex10
+\font\inchhigh=cminch
+\font\titlefont=cmssdc10 at 40pt % titles in chapter openings
+\font\eightss=cmssq8 % quotations in chapter closings
+\font\eightssi=cmssqi8 % ditto, slanted
+\font\tenu=cmu10 % unslanted te~t italic
+\font\manual=manfnt % METAFONT logo and special symbols
+\font\magnifiedfiverm=cmr5 at 10pt % to demonstrate magnification
+
+\newskip\ttglue
+\def\eightpoint{\def\rm{\fam0\eightrm}% switch to 8-point type
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\eightit \def\it{\fam\itfam\eightit}%
+ \textfont\slfam=\eightsl \def\sl{\fam\slfam\eightsl}%
+ \textfont\ttfam=\eighttt \def\tt{\fam\ttfam\eighttt}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\eightbf}%,
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=9pt
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ \let\sc=\sixrm \let\big=\eightbig \normalbaselines\rm}
+
+
+%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%
+%
+% END OF EXTRA MACROS AND FONTS
+%
+%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%
+
+
+
+
+\catcode`\@=11\relax
+\PAGENO=1
+\voffset=-0.3in
+
+
+\ifx\pageno\undefined
+\errmessage{Please run TeX if you want this article on how to use
+<formlett.sty> to be processed as well!}
+\fi
+
+
+\parindent=0pt
+\hsize=469.75499pt % the default
+\vsize=9.6in %8.83in
+
+\def\makefootline{\baselineskip=24pt \line{\the\footline}}
+\footline={\lower5pt
+\hbox to \hsize
+ {{\tenrm Jiang Z ~~~{\tensl Mail merge with the use of formlett.sty}
+\hss \folio}}}
+
+\leftline{\hbold Mail merge with the use of formlett.sty}
+\bigskip
+
+
+{\advance\leftskip by13mm \overfullrule=0pt
+\advance\rightskip by 20mm %28mm
+\sl
+\noindent Zhuhan JIANG\par
+\noindent School of Computing and Information Technology,
+ University of Western Sydney, Victoria Road, Parramatta NSW 2150, Australia.
+{\sl ~~Email}:~z.jiang@uws.edu.au\par
+\medskip
+\rm\smooth
+\noindent (Last updated on 26 May 2003)\par
+\medskip
+
+\noindent
+In this article, the author explains how to use a form-letter or mail
+merge style {\tt formlett.sty}, designed for plain \TeX\space and
+\LaTeX\space or \LaTeX2e. {\tt formlett.sty} supports different
+parameter input methods, parameter naming and defaulting mechanism, as
+well as facilities for previewing parameter positions and printing
+labels. It is written for the purpose of being powerful, robust and
+above all easy to use.\par }
+
+
+\begincolumns
+
+{\lbold Introduction}
+
+\smallskip
+
+Our purpose here is to describe a comprehensive implementation of a
+macro system, handling form letters or mail merge under plain \TeX\space
+or \LaTeX\space2.09 or \LaTeX2e. The main objective is to provide an
+easy way to output many form letters with their own parameters, with or
+without the use of multiple files. There will be a coherent and simple
+format for putting parameters inside a form letter, with a number of
+helping facilities for such as naming parameters and previewing their
+positions. A minimum support for printing mailing labels is also
+provided.
+
+
+\medskip
+
+The concept of macros [1] for form letters is not new: there already
+exist macros in this connection such as {\tt merge}, {\tt textmerg} and
+{\tt address} to name a few, see [2,3] for further details. Our stress
+here is therefore laid on the ease to use, along with the power and the
+robustness of the macros.
+
+\bigskip
+
+
+{\lbold Basic format}
+
+
+%%%%%%%%%%%%
+% letter top
+%%%%%%%%%%%%
+
+ \beginletter
+\sl
+\hsize=3.1in\relax
+\medskip
+ \paranames % optional
+ \tt<<FULL NAME>>;%
+ \tt<<ADDRESS-01>>;%
+ \tt<<ADDRESS-02>>;%
+ \tt<<GIVEN NAME>>;%
+ \tt<<MISSING ITEM>>;%
+ \tt<<PHONE NUMBER>>!
+ \loaddefaultparas % optional
+
+ \NOPAGENUMBERS\parindent=0pt\overfullrule=0pt
+ \paras[1]\par\paras[2]\par\paras[3]\par\medskip
+
+ Dear \paras[4],
+
+ \smallskip
+ We have been looking for
+ \paras[5] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[6]. \par\medskip
+ Cheers!\hfill Michael\par %\vfill\eject
+\medskip
+ \endletter
+
+%%%%%%%%%%%%
+% letter end
+%%%%%%%%%%%%
+
+
+Suppose we would like to write a form letter for mail merge in the
+following form
+
+\showparas
+
+where the text inside the double arrow brackets are to be replaced by
+the parameters specific to each individual letter. If we number these
+parameters one by one in a single group, then the letter template will
+be organised as
+
+\preview
+
+and we need just 6 parameters to personalise an individual letter. A
+simplest example of supplying a set or a {\sl cluster} of these
+parameters to output a merged form letter is to use
+
+\setraw
+\moreletter
+ Mrs L Stenson;\#1-20 Sunset Street;%
+ Hills, Norway;Louise;a Bible;220-8888!
+\unsetraw
+
+For more letters to be merged this way, just use again the
+command {\tt\string\moreletter} in the above format, in which each
+parameter is separated by a semicolon `{\tt ;}' and the whole parameter
+cluster is ended by an exclamation mark `{\tt !}'. The actual code in
+\LaTeX\space for making the above form letter, along with an extra
+merged letter, may read as follows
+
+
+\edef\setrawcount{\stt\noexpand
+ \beginrawlist[][][4][][][3.3in]{\esc@ unsetraw}}
+
+\linecount=1\relax
+\setrawcount
+ \documentstyle[formlett]{article}
+ \begin{document}
+ \beginletter
+ \NOPAGENUMBERS\parindent=0pt
+ \paras[1]\par\paras[2]\par
+ \paras[3]\par\medskip
+ Dear \paras[4], \par\medskip
+ We have been looking for
+ \paras[5] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[6]. \par\medskip
+ Cheers!\hfill Michael\vfill\eject
+ \endletter
+
+ \moreletter % letter one
+ Mrs L Stenson;\#1-20 Sunset Street;%
+ Hills, Norway;Louise;a Bible;220-8888!
+ \moreletter % letter two
+ S Wales;UMIST;Manchester;Sir or Madam;%
+ a \TeX\ package{+}manual;225-9905!
+ \end{document}
+\unsetraw
+\rm
+
+The line numbers in the above and later on are for quick reference only:
+they are not a part of the program code. The letter template in lines
+4-13 is defined by the {\tt\string\beginletter} and {\tt\string\endletter}
+pair in line 3 and line 14, with each use of {\tt\string\moreletter}
+generating a new merged letter. We note that command {\tt \string\paras[{\it
+m}]} represents the $m^{th}$ merged parameter (of the first group, see
+later), and the command {\tt\string\NOPAGENUMBERS}
+will remove the page numbering for both \LaTeX\space and plain
+\TeX. We also note that if one replaces lines 1-2 by
+{\tt\string\input\space formlett.sty}, then the program will be
+compilable under plain \TeX\space as well.
+
+
+\medskip
+
+Although the mail merge mechanism in the above will be sufficient for
+most simple applications, {\tt formlett} provides in fact many more
+features. We shall thus in the followings introduce the main features
+one by one, from the most useful to the less likely encountered.
+
+\medskip
+
+To start with, we notice that in the above example there are exactly two
+parameters to be used for the address. This is inconvenient to say the
+least, even if we allocate say three more extra parameters for the
+purpose. This naturally calls for the separation of the whole {\sl
+cluster} of parameters into several {\sl groups}, so that the numbering
+of the parameters in every group will be resynchronised. We thus use
+{\tt\string\paras[{\it m}][{\it n}]} to denote the $m^{th}$ parameter of
+the $n^{th}$ group of a whole cluster of merging parameters. In fact we
+may use {\tt\string\blockparas[{\it m}][{\it n}][{\it pre}][{\it post}]}
+to represent parameters in the $n^{th}$ group, from the $m^{th}$ to the
+last parameter of that group, where the tokens denoted by {\it pre} and
+{\it post} are those to be added in front and behind respectively each
+of the legitimate parameters. The defaults for {\it pre} and {\it post}
+are {\tt\string\noindent} and {\tt\string\par} respectively. It is
+therefore more sensible to specify the merging parameters of the earlier
+example via
+
+
+%%%%%%%%%%%%
+% letter top
+%%%%%%%%%%%%
+
+ \beginletter
+\sl
+\hsize=3.1in\relax
+\medskip
+ \paranames % optional
+ \tt<<FULL NAME>>\hfill
+ \tiny\fillzeros[4]\linecount\global\advance\linecount1\relax\par;%
+ \tt<<ADDRESS-etc>>\hfill
+ \tiny\fillzeros[4]\linecount\global\advance\linecount1\relax\par;%
+ +\tt<<GIVEN NAME>>;%
+ \tt<<MISSING ITEM>>;%
+ \tt<<PHONE NUMBER>>!
+ \loaddefaultparas % optional
+
+ \NOPAGENUMBERS\parindent=0pt\overfullrule=0pt
+ \noindent{\it\paras[1]}\par
+ \blockparas[2]\par\medskip
+
+ Dear \paras[1][2],
+
+ \smallskip
+ We have been looking for
+ \paras[2][2] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[3][2]. \par\medskip
+ Cheers!\hfill Michael\par %\vfill\eject
+\medskip
+ \endletter
+
+%%%%%%%%%%%%
+% letter end
+%%%%%%%%%%%%
+
+\showparas
+
+where {\tt <<ADDRESS-etc>>} will be produced by
+{\tt\string\blockparas[2][1]}, i.e. all the parameters of the first
+group, starting from the 2nd parameter. We note that the missing
+square-bracketed macro parameters for {\tt\string\blockparas} are
+automatically provided: in fact macro parameters in {\tt formlett} are
+systematically defaulted. Hence for example, {\tt \string\paras[1][1]}
+is equivalent to any of the following commands
+
+\setraw
+ \paras, \paras[1], \paras[][1],
+ \paras[1][], \paras[][]
+\unsetraw
+
+As for the more precise position of the merging parameters, they can
+always be viewed via the command {\tt\string\preview}, which in this
+case gives the following positioning
+
+\preview
+
+This way, the mail merge for the above letter template can also be done
+(in plain \TeX) in the following more flexible way
+
+\setrawcount
+ \input formlett.sty
+ \beginletter
+ \NOPAGENUMBERS\parindent=0pt
+ \noindent{\it\paras[1]}\par
+ \blockparas[2]\par\bigskip
+ Dear \paras[1][2],\par\medskip
+ We have been looking for
+ \paras[2][2] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[3][2]. \par\medskip
+ Cheers!\hfill Michael\vfill\eject
+ \endletter \preview
+
+ \beginpilemode
+ Mrs L Stenson;\#1-20 Sunset Street
+ Hills, Norway+Louise;a Bible;220-8888!
+
+ S Wales;UMIST;Manchester+%
+ Sir or Madam;a \TeX\space
+ package{+}manual;225-9905!
+ \endpilemode
+ \end
+\unsetraw
+\rm
+
+
+We note that by default we used plus sign `{\tt +}' to separate
+different groups inside a cluster of parameters, and each cluster inside
+a {\tt\string\beginpilemode} and {\tt\string\endpilemode} pair will
+output a merged letter, as if it were produced by command
+{\tt\string\moreletter} followed by that cluster of parameters.
+The output of the first merged letter in fact reads
+
+\moreletter
+ Mrs L Stenson;\#1-20 Sunset Street
+ Hills, Norway+Louise;a Bible;220-8888!
+
+
+\medskip
+
+It is often desirable to supply parameters line by line, i.e. one line
+as one parameter. Hence the two merged letters produced by lines 25-47
+can also be made by replacing the content included in the
+{\tt\string\beginpilemode} and {\tt\string\endpilemode} pair (lines
+39-46) by the following new code
+
+\setrawcount
+\blockmarks
+\beginblockmode
+Mrs L Stenson
+\#1-20 Sunset Street
+Hills, Norway
+-----
+Louise
+a Bible
+220-8888
+======
+
+S Wales
+UMIST
+Manchester
+----
+Sir or Madam
+a \TeX\ package+manual
+225-9905
+====
+\endblockmode
+\defaultmarks
+\unsetraw
+\rm
+
+where obviously we have used lines with `{\tt----}' to separate groups
+and used lines with `{\tt====}' to end a cluster of parameters. This was
+done by the use of {\tt\string\blockmarks} which changes the group
+delimiter `{\tt +}' and cluster delimiter `{\tt !}' into the above two
+new ones, with the {\tt\string\defaultmarks} at the end setting them
+back. If the whole cluster of parameters are categorised into a single
+(first) group, then we may even use a block of consecutive nonempty
+lines to provide the merging parameters. This is done by the use of
+command pair {\tt\string\beginlinemode} and {\tt\string\endlinemode}.
+Hence we may also conduct the above mail merge in for instance \LaTeX2e
+by
+
+
+\setrawcount
+\documentclass{article}
+\usepackage{formlett}
+\begin{document}
+ \beginletter
+ \NOPAGENUMBERS\parindent=0pt
+ \paras[4]\par\blockparas[5]
+ \par\medskip
+ Dear \paras[1], \par\medskip
+ We have been looking for
+ \paras[2] for quite a while
+ without any luck, could you help
+ us out? If so, please ring
+ \paras[3]. \par\medskip
+ Cheers!\hfill Michael\vfill\eject
+ \endletter
+
+\beginlinemode
+Louise
+a Bible
+220-8888
+Mrs L Stenson
+\#1-20 Sunset Street
+Hills, Norway
+
+Sir or Madam
+a \TeX\ package+manual
+225-9905
+S Wales
+UMIST
+Manchester
+\endlinemode
+\end{document}
+\unsetraw
+\rm
+
+Notice that we have changed the numbering order of the parameters so
+that the number of address lines output by {\tt\string\blockparas} is
+more flexible.
+
+
+\bigskip
+{\lbold Advanced features}
+
+The advanced features to be discussed below are mainly for the purpose
+of (i) writing {\sl long} form letter; (ii) making {\sl many} different
+form letters; (iii) reading mail merge parameters that are in {\sl
+crude} ASCII form; and (iv) generating mail labels.
+
+\medskip
+
+It is in general better to keep the letter template, i.e. the content
+between {\tt\string\beginletter} and {\tt\string\endletter} like those
+in lines 4-13, in a separate file, say {\tt myletter.let}, and use
+{\tt\string\inputletter$\{$myletter.let$\}$} to load in the letter
+template. The advantage of this over the previously used method is that
+the letter template can now be arbitrarily large without any risks of
+causing computer memory problem.
+
+\medskip
+
+Suppose we have a collection of letter templates, we may wish to remind
+ourselves what each parameter represents. For this purpose, we may add
+at the top of the letter template a command {\tt\string\paranames} {\it
+cluster}{\tt !}, where {\it cluster} is a cluster of parameters each
+giving a name to the corresponding parameter. Command
+{\tt\string\paranames} takes its macro parameters in the same way
+{\tt\string\moreletter} does. After a letter template is read in,
+command {\tt\string\showparas} will output a form letter with its
+parameters replaced by the corresponding names. The mainly italic
+passage containing lines 23-24, for instance, is the output of
+{\tt\string\showparas} for the letter template in lines 102-109 given
+explicitly later on.
+
+\medskip
+
+We may also use {\tt\string\paradefaults} {\it cluster}{\tt !} to
+provide default parameters, i.e. the parameters to replace the empty or
+not entered ones, and use {\tt\string \loaddefaultparas} inside letter
+template to activate the parameter defaulting. We note that in general
+commands {\tt\string\paranames} and {\tt\string\loaddefaultparas}, if
+present, should be at the top of the letter template, with
+{\tt\string\loaddefaultparas} below the command {\tt\string\paranames}.
+Hence for our previous mail merge, we may re-do it via
+
+
+\setrawcount
+ \input formlett.sty
+ \beginletter
+ \paranames % optional
+ \tt<<FULL NAME>>;\tt<<ADDRESS-etc>>;%
+ +\tt<<GIVEN NAME>>;\tt<<MISSING ITEM>>;%
+ \tt<<PHONE NUMBER>>!
+ \loaddefaultparas % optional
+\unsetraw
+
+\ \ \ {\it $\{$letter details given in lines 27-36$\}$}
+\hfill{\tiny\fillzeros[4]\linecount\global\advance\linecount1\relax}
+
+\setrawcount
+ \endletter
+ \preview \showparas
+
+ \paradefaults % optional
+ To whom this may concern
+ +Sir or Madam;something;%
+ 061-225-9905!
+
+\blockmarks
+\beginrawblockmode{}
+Mrs L Stenson
+#1-20 Sunset Street
+Hills, Norway
+------
+Louise
+a Bible
+220-8888
+=========
+
+......
+
+Above empty line active
+\endrawblockmode
+\defaultmarks
+\end{document}
+\unsetraw
+\rm
+
+We note that in {\sl blockmode} with {\tt\string\blockmarks}, a line
+with `{\tt ....}' marks the immediate start of a parameter block,
+whether or not the lines immediately following it are empty or not. Also
+that in {\it rawblockmode} enclosed by {\tt\string \beginrawblockmode}
+and {\tt\string\endrawblockmode}, all characters are input in their
+original ASCII form. In other words, the special characters for
+\TeX\space will be ignored here.
+
+\medskip
+
+If the merging parameters are given by exactly $m$ lines per cluster, as
+is often the case when they are produced by a database utility, then we
+may use the {\tt\string\begindatamode} and {\tt\string\enddatamode} pair
+to mark the beginning and the end of the merging parameters. For more
+details, see the Appendix at the end.
+
+\medskip
+
+We may keep the letter template and the merging parameters in two
+separate files. For instance, if we save lines 103-108 to file {\tt
+myletter.let}, lines 39-46 or lines 48-68 to file {\tt myletter.adr},
+then we can produce via \LaTeX\ the mail merge by
+
+\setrawcount
+ \documentstyle[formlett]{article}
+ \begin{document}
+ \inputletter{myletter.let}
+ \showparas \preview % utility demo
+ \paradefaults To whom it may concern!
+ \inputfile{myletter.adr}
+ \beginlabels % 1st group as address
+ \inputfile{myletter.adr} % for labels
+ \endlabels
+ \end{document}
+\unsetraw
+\rm
+
+where the lines 140-142 will generate the address labels using the first
+group (as is intended here) of parameters. More precise format of
+{\tt\string\beginlabels} and etc can be found in the Appendix.
+
+\medskip
+
+Another way of making labels, if no separate files for the parameters
+are present, is to re-read the document itself and make labels instead
+of merged form letters in the second reading. We may thus use {\tt
+\string\input \ formlett.sty \string\initstyle\ [{\it styles}]$\{${\tt
+article}$\}\{${\it preamble}$\}$} to replace {\tt \string\documentstyle\
+[formlett, {\it styles}]$\{$article$\}$ {\it preamble}
+\string\begin$\{$document$\}$}, which will be valid for \LaTeX\ but
+ignored for \TeX\ , and will enable one to use {\tt \string\labelsquit}
+at the end to read in the current document again with all the letters
+there converted into the corresponding labels. Though
+{\tt\string\initstyle} is valid for plain \TeX, \LaTeX2.09 as well as
+\LaTeX2e, {\tt\string\initclass} will generate
+{\tt\string\documentclass} instead of {\tt\string\documentstyle} when
+\LaTeX2e is the processing environment. If you only want to execute
+certain commands the first time round (i.e. before {\tt
+\string\labelsquit} re-reads the file again), use {\tt
+\string\firstread$\{${\it commands}$\}$} for this purpose. For more
+detailed use and examples, read the {\sl programmer's document} attached
+to the style file {\tt formlett.sty} and the example files it generates.
+In fact, many details and extra features that are not contained in this
+article may be found there.
+
+\medskip
+
+We already noted that if a form letter is large, we have to use
+{\tt\string\inputletter} to load in the template. However, it is often
+still desirable to keep everything inside a single file, while allowing
+it to make new (scratch) files when it is being compiled. We may thus
+use for example
+
+\setraw
+ \beginfile{myletter.let}
+\unsetraw
+
+\ \ \ {\it $\{$letter template of lines 103-108$\}$}
+
+\setraw
+ \endfile
+\unsetraw
+\rm
+
+to create a letter template file {\tt myletter.let}. Likewise, the
+merging parameters can be saved to another run-time created file {\tt
+myletter.adr}.
+
+
+\medskip
+
+We have so far only used the default delimiters `{\tt ;}', `{\tt +}' and
+`{\tt !}' to separate single, group and cluster of parameters, with
+temporary change via {\tt\string\blockmarks} to `{\tt ....}', `{\tt
+----}' and `{\tt ====}' respectively. However we may change the
+delimiters to any characters by {\tt
+\string\delimiters$\{S\}\{G\}\{C\}$}, where $S$, $G$ and $C$ are the
+tokens to delimit single, group and cluster of parameters respectively,
+and change the delimiters back to the default by
+{\tt\string\defaultmarks} or equivalently by
+{\tt\string\delimiters$\{$;$\}\{$+$\}\{$!$\}$}.
+
+\medskip
+
+
+To conclude this section, let us finally look below at an `ideal' and
+`finished' mail merge application code,. It is currently in a form
+compilable under \LaTeX2e, and is also valid for plain \TeX\space if the
+first three lines (lines 144-146) are removed.
+
+\setrawcount
+\documentclass{article}
+\usepackage{formlett} % LaTeX2e
+\begin{document}
+
+%%%% MAKE file scr@tch@.let
+\beginfile{scr@tch@.let} % letter content
+\paranames <<name>>;<<address>>+<<items>>!
+\loaddefaultparas
+\parindent=0pt\blockparas\bigskip\bigskip
+Dear \paras, \par\bigskip
+This part is typically the letter content.
+It now displays all the items in the 2nd
+parameter group. They are \par
+\blockparas[][2] \vfill\eject
+\endfile
+
+%%%% MAKE file scr@tch@.adr
+\beginfile{scr@tch@.adr} % address file
+\blockmarks
+\beginblockmode
+T Teng
+UMIST
+Manchester M60 1QD
+=====
+
+Z Jiang
+UNE
+Armidale NSW 2351
+Australia
+------
+Email: zhuhan@neumann.une.edu.au
+=====
+\endblockmode
+\defaultmarks
+\endfile
+
+% MAIN BODY
+\paradefaults To Whom It May Concern
+ +No further info available{!}!
+\inputletter{scr@tch@.let}
+\inputfile{scr@tch@.adr}% for letters
+\beginlabels
+\inputfile{scr@tch@.adr}% for labels
+\endlabels
+\end{document}
+\unsetraw
+\rm
+
+We note that if we replace lines 144-146 by {\tt\string\input\space
+formlett.sty \string\initstyle$\{\}\{\}$}, then the mail merge can be
+processed by either plain \TeX\space or \LaTeX\space (including
+\LaTeX2e). It is likewise if {\tt\string\initstyle} in the replaced
+line is replaced furthermore by {\tt\string\initclass}, except that now
+the native \LaTeX2e environment is preserved, when applicable, rather
+than turning it into the compatibility mode of \LaTeX2.09.
+
+\bigskip
+{\lbold Programmer's tips}
+
+\smallskip
+
+First we note that all the macro parameters that are to appear inside
+square brackets of {\tt formlett}'s commands are defaulted, just like
+how {\tt\string\paras[$m$][$n$]} is defaulted earlier on. The actual
+default values can be found in the Appendix.
+
+\medskip
+
+For those wizard users who want to do everything their own way, we point
+out that if for instance the 3rd letter parameter of the 2nd group of a
+cluster is given as {\tt<A>}, then {\tt \string\LET2*3\t} will contain
+{\tt \string\b@group \string\relax {\tt<A>}\string\e@group} right after
+a cluster is read in. {\tt \string\DEF2*3\string~}, on the other hand,
+contains the corresponding default parameter in the same fashion.
+Furthermore, the command {\tt\string\checkparas[$m$][$n$]$\{$LET$\}$}
+will copy the content of {\tt\string\paras[$m$][$n$]}, minus the
+`wrapping' extra tokens {\tt\string\b@group\string\relax} and
+{\tt\string\e@group}, to {\tt\string\cachedata} and set
+{\tt\string\ifemptyparas} to true or false depending on whether the
+content is empty or not. This way, a user may even change the
+characteristics of his letter template by first testing the content of
+the supplied individual parameters. However, we note that if {\tt\string
+\loaddefaultparas} is executed, then the {\tt LET} array, when some of
+its elements are not supplied, will contain the corresponding elements
+of the {\tt DEF} array. Hence care must be exercised under such
+circumstances, when interpreting the {\tt\string\cachedata} generated by
+{\tt\string\checkparas[$m$][$n$]$\{$LET$\}$}. If necessary, we may use
+{\tt\string\delparadefaults} to delete current default parameter array
+{\tt DEF} so as to conduct {\tt\string\checkparas$\{$LET$\}$} more
+precisely.
+
+\medskip
+
+There are also a number of generic macro utilities in {\tt formlett},
+including a user stack and a multi-dimensional array mechanism.
+
+\medskip
+
+{\tt formlett} was written for all \TeX\space dialects, its format is
+thus more close to that of plain \TeX. In fact, we deliberately avoided
+mixing up {\tt formlett} with the standard letter environment of \LaTeX.
+This is largely due to the fact that the limited facilities of
+\LaTeX\space letter environment are easy to come by anyway, and are not
+really worth writing buckled code to make {\tt formlett} a type of
+extension of the environment. Nevertheless, one can still use the letter
+environment of \LaTeX\space inside the form letter template. Besides,
+the applicability of {\tt formlett} is not restricted for making form
+{\sl letters}; it can also be used to merge other type of articles or
+passages.
+
+
+
+
+\bigskip
+{\lbold References}
+
+\smallskip
+{\parindent=2em
+\item{[1].} Knuth D E, {\sl The \TeX book}, Reading, Mass.,
+Addison-Wesley, 1992. \par
+\item{[2].} Piff M, Text merges in \TeX\ and \LaTeX, {\sl TUGboad},
+13(4):518, 1993. \par
+\item{[3].} Damrau J and Wester M, Form letters with 3-across
+labels capacity, {\sl TUGboat}, 13(4):510, 1991.
+\par
+}
+
+
+
+
+\penalty -50\bigskip
+
+{\lbold Appendix}
+
+
+
+\smallskip
+
+
+In the followings, we give a brief summary of the main commands given by
+{\tt formlett} version 2.1.
+
+\medskip
+
+Let $m$ and $n$ be numbers, $p$, $q$ and $r$ be dimensions, $A$,
+$B$, $S$, $G$, $C$ and $T$ be tokens, and $X$ be a box.
+Furthermore, we shall denote by $R$ a full set of letter
+parameters ended by \lq{\tt !}\rq, with \lq{\tt;}\rqs separating
+parameters inside a same group and \lq{\tt+}\rqs separating
+different parameter groups. We moreover denote $R$ by $F$, when
+\lq{\tt ; + !}\rqs there can be replaced by \lq$S$ $G$ $C$\rqs
+respectively if {\tt \string\delimiters$\{S\}\{G\}\{C\}$} is
+issued. In the commands tabulated below, the macro parameters
+contained in squared brackets support default. In particular, the
+defaults are $m$={\tt 1}, $n$={\tt 1}, $p$={\tt 8truecm},
+$q$={\tt 1.5em}, $r$={\tt 3pt}, $A$={\tt\string\noindent} and
+$B$={\tt\string\par}.
+
+
+
+\newdimen\tempdimone
+\newdimen\tempdimtwo
+\tempdimone=\hsize
+\advance\tempdimone by-0.2pt
+\tempdimtwo=\hsize
+\advance\tempdimtwo by-1.8in
+\def\hruler{\hrule width \tempdimone}
+\long\def\entry#1#2{%
+\par\hbox to \tempdimone{\noindent
+ \vrule~\textbox[1.7in]{#1}~\hss
+ \vrule~\textbox[\tempdimtwo]{\raggedright#2}~\vrule}%
+ \par}
+
+\long\def\longentry#1#2#3{%
+\par\hbox to \tempdimone{\noindent
+ \vrule~\textbox[3in]{#1}~\hss~\vrule}\par
+ {\kern-8pt \advance\tempdimtwo0.10in
+ \vrule width1.7in height0pt \vrule width\tempdimtwo height 0.4pt \par
+ \kern-3pt}
+ \entry{#2}{#3}}
+
+\long\def\Longentry#1#2#3{%
+\par\hbox to \tempdimone{\noindent
+ \vrule~\textbox[3in]{#1}~\hss~\vrule}\par
+ {\advance\tempdimtwo0.08in\kern-1pt
+ \vrule~\hfill\vrule width \tempdimtwo height 0.4pt \vrule\par
+ \kern-2.5pt}%
+ \entry{#2}{#3}}
+
+
+
+\bigskip %\bigskip
+\penalty-1000 \vskip 0pt plus4in
+
+{\eightpoint
+\nointerlineskip\parskip=0pt
+
+\hruler
+\entry{{\tt\string\paras[$m$][$n$]}}%
+ {$m^{th}$ parameter of $n^{th}$ group }%
+
+\entry{{\tt\string\blockparas[$m$][$n$][$A$][$B$]}}%
+ {$m^{th}$ to the last parameter of $n^{th}$ group, each
+preceded by $A$ and followed by $B$, wrapped by $\{$\penalty
+1000$\}$ if
+$B$={\tt\string\relax}}
+
+\entry{{\tt\string\addressparas[$m$][$n$][$p$][$q$]}}%
+ {$m^{th}$ to the last parameter of $n^{th}$ group, each put
+into a box of width $p$ with indent $q$ for wrapped portions}
+
+
+\entry{{\tt\string\loaddefaultparas}}%
+ {fill empty parameters with defaults}
+
+%\hruler \penalty-1000
+\hruler
+
+
+\entry{{\tt\string\checkparas[$m$][$n$]$\{T\}$}}%
+ {$m^{th}$ parameter of $n^{th}$ group copied to {\tt\string\cachedata};
+ {\tt\string\ifemptyparas} is true if element is empty; $T$ is often
+ {\tt LET} or {\tt DEF}}%
+
+
+\hruler
+
+
+\entry{{\tt\string\moreletter\ $F$}}%
+ {use parameters $F$ to output a new letter}
+
+
+\entry{{\tt\string\paranames\ $R$}}%
+ {use $R$ as parameter names}
+
+\entry{{\tt\string\paradefaults\ $R$}}%
+ {use $R$ as default parameters}
+
+\entry{{\tt\string\delparadefaults}}%
+ {delete default parameters}
+
+\hruler
+
+
+\entry{{\tt\string\delimiters$\{S\}\{G\}\{C\}$}}%
+ {use $S$, $G$, $C$ as delimiters}
+
+
+\entry{{\tt\string\defaultmarks}}%
+ {use \lq{\tt ; + !}\rqs as delimiters}
+
+
+\entry{{\tt\string\blockmarks}}%
+ {use \lq{\tt ....}\rq, \lq{\tt ----}\rq, \lq{\tt ====}\rqs as delimiters}
+
+%\hruler \penalty -1000
+\hruler
+
+\entry{{\tt\string\preview}}%
+ {highlight parameter positions}
+
+\entry{{\tt\string\showparas}}%
+ {display parameter names, if any}
+
+\hruler
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginfile[$T$]$\{{\it
+file.ext}\}$}\cr
+\hbox{\tt\string\endfile\ \ \ \ \ \ \ \ \ \ \ \ \ }\cr}\right.$\par
+ \ \ \ {\tiny }}%
+ {write text verbatim to file {\it file.ext} (empty implies {\tt
+scr@tch@.tex}), nonempty $T$ replaces {\tt
+\string\endfile} to mark last full line}
+
+
+
+\entry{{\tt\string\inputletter$\{file.ext\}$}}%
+ {input letter content}
+
+\entry{{\tt\string\inputfile$\{file.ext\}$}}%
+ {input $file.ext$}
+
+\hruler \penalty -5000 %\vskip0pt plus 1cm
+\hruler
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginletter}\cr
+\hbox{\tt\string\endletter~~}\cr}\right.$ }%
+ {delimiters for letter content (template)}
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginpilemode}\cr
+\hbox{\tt\string\endpilemode~~}\cr}\right.$ }%
+ {normal letter parameters cluster-wise}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginblockmode}\cr
+\hbox{\tt\string\endblockmode~~}\cr}\right.$ }%
+ {for line-by-line blocks of parameters, empty lines active
+within each cluster}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginlinemode}\cr
+\hbox{\tt\string\endlinemode~~}\cr}\right.$ }%
+ {for line-by-line parameters, empty lines delimit clusters}
+
+\hruler \penalty-1000
+%\hruler
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginrawblockmode$\{T\}$}\cr
+\hbox{\tt\string\endrawblockmode\ \ \ \ \ }\cr}\right.$ }%
+ {raw text mode; nonempty $T$ replaces {\tt\string\endrawblockmode}
+ to mark end}
+
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\beginrawlinemode$\{T\}$}\cr
+\hbox{\tt\string\endrawlinemode\ \ \ \ \ \ }\cr}\right.$ }%
+ {raw text parameters and active spaces etc}
+
+\entry{%
+$\left\{\matrix{ \hbox{\tt\string\begindatamode[$T$]$\{m\}$}\cr
+\hbox{\tt\string\enddatamode\ \ \ \ \ \ \ \ }\cr}\right.$ }%
+ {$m$ raw text lines for one form letter}
+
+
+%\hruler \penalty-2000
+\hruler
+
+
+\entry{{\tt\string\PAGENO=1}}%
+ {page number reset to 1}
+
+
+\entry{{\tt\string\NOPAGENUMBERS}}%
+ {no page numbers}
+
+
+\entry{{\tt\string\textbox[$p$]$\{text\}$}}%
+ {$text$ into box of width $p$}
+
+
+\entry{{\tt\string\boxmore[$r$]$\{X\}$}}%
+ {add borderline to box $X$ at a distance $r$}
+
+
+\entry{{\tt\string\addressbox[$p$][$q$]$\{text\}$}}%
+ {$text$ into box of width $p$, with wrapped options indented
+by $q$}
+
+
+\hruler
+
+\Longentry{%
+$\left\{\matrix{ \hbox{\tt\string\beginlabels
+ [$a$][$b$][$c$][$d$][$e$][$f$]}\cr
+ \hbox{\tt\string\endlabels\hskip3cm}\cr}\right.$ }%
+ {\strut\par{\sl defaults:}\everypar={\hbox{\ \ \ }}\par\par
+ $a$={\tt 20pt}, \par $b$={\tt\string\tt\string\raggedright},
+ \par $c$={\tt1}, $d$={\tt1}, \par
+ $e$={\tt2.6in}, $f$={\tt2em}}%
+ {form letters become labels: address taken from $c^{th}$ to
+last parameter of $d^{th}$ group, with width $e$, indent
+$f$, borderspace $a$ and font toks $b$}
+
+\hruler
+
+
+\entry{{\tt\string\firstread$\{T\}$}}%
+ {toks $T$ will not be read if the file is re-read via {\tt
+ \string\labelsquit}}
+
+
+\entry{{\tt\string\initstyle[$a$]$\{b\}\{c\}$}}%
+ {initiation for {\tt\string\labelsquit},with styles $a$,
+ documentstyle $b$ and preamble $c$}
+
+
+\entry{{\tt\string\initclass[$a$][$o$]$\{b\}\{c\}$}}%
+ {similar to {\tt\string\initstyle} ($o$ is \LaTeX2e options),
+ but retains native \LaTeX2e when applicable}
+
+
+\hruler \vskip0.5pt
+\Longentry{%
+$\matrix{\hbox{\tt \string\labelsquit
+ [$a$][$b$][$c$][$d$][$e$][$f$]$\{$\it file.ext$\}$}\cr
+ \hbox{}\cr}$}%
+ {\strut\par{\sl defaults:}\everypar={\hbox{\ \ \ }}\par\par
+ see that for {\tt\string\beginlabels}}
+ {quit after converting letters to labels by reading the current
+ document or {\it file.ext}}
+
+\hruler
+
+}
+
+\footline={\lower5pt
+\hbox to \hsize
+ {{\rm Jiang Z ~~~{\sl Mail merge with the use of formlett.sty}
+ \hss {\sl $\bullet$End of Document$\bullet$}
+\hss \folio}}}
+
+
+\vrule height2.9in width0pt depth0pt
+\endcolumns
+\vfill\eject
+
+
+
+\end{document}
+
+
+
+
diff --git a/macros/generic/frame/Changes b/macros/generic/frame/Changes
new file mode 100644
index 0000000000..d5ba90b132
--- /dev/null
+++ b/macros/generic/frame/Changes
@@ -0,0 +1,12 @@
+$Id: Changes 320 2010-05-15 09:42:13Z herbert $
+
+--- frame.tex
+1.0 2010-05-15 - LPPL license (hv)
+ - small changes to the code (hv)
+
+--- frame.sty
+2010-05-15 - wrapper file for LaTeX (hv)
+
+
+--- frame-doc.tex
+2010-05-14 - updated and LaTeX2e compatible (hv)
diff --git a/macros/generic/frame/Makefile b/macros/generic/frame/Makefile
new file mode 100644
index 0000000000..0b5e380d1c
--- /dev/null
+++ b/macros/generic/frame/Makefile
@@ -0,0 +1,72 @@
+
+# `Makefile' for `frame-doc.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = frame
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+# GS_OPTIONS=-dAutoRotatePages=/None
+ ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+# if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+# if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+# makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+# makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+# $(basename $<).glo
+# bibtex $(basename $<)
+# $(LATEX) $<
+# $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .Roessler .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+ $(RM) data3d.Roessler
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro ~/Links/dvips-local/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/macros/generic/frame/README b/macros/generic/frame/README
new file mode 100644
index 0000000000..800b7107e3
--- /dev/null
+++ b/macros/generic/frame/README
@@ -0,0 +1,9 @@
+Save the files frame.sty|tex in a directory, which is part of your
+local TeX tree.
+Then do not forget to run texhash to update this tree.
+For more information see the documentation of your LATEX distribution
+on installing packages into your LATEX distribution or the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+
diff --git a/macros/generic/frame/frame-doc.pdf b/macros/generic/frame/frame-doc.pdf
new file mode 100644
index 0000000000..b3683a587d
--- /dev/null
+++ b/macros/generic/frame/frame-doc.pdf
Binary files differ
diff --git a/macros/generic/frame/frame-doc.tex b/macros/generic/frame/frame-doc.tex
new file mode 100644
index 0000000000..169ef569e5
--- /dev/null
+++ b/macros/generic/frame/frame-doc.tex
@@ -0,0 +1,97 @@
+%% BEGIN frame-doc
+%%
+%% $Id: frame-doc.tex 320 2010-05-15 09:42:13Z herbert $
+\documentclass[12pt]{article}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo,url}
+\usepackage[colorlinks,linktocpage]{hyperref}
+
+\usepackage{frame}
+\let\Ffv\fileversion
+% Usage:
+% \fancyframebox {rule thickness} {separation from inner guy} {inner guy}
+%
+% \makeemptybox {width} {height} {depth}
+\begin{document}
+\title{Documentation for frame.tex:\\
+ fancy frames for generic TeX}
+\author{Timothy Van Zandt\thanks{The documentation was put into
+ \LaTeX\ format by Herbert Vo\ss}\\ \url{tvz@Princeton.EDU}}
+\date{Version \Ffv\\[3pt] \today}
+
+\maketitle
+\thispagestyle{empty}
+
+\begin{abstract}
+\texttt{frame.tex/frame.sty} provides fancy frames for generic TeX
+\end{abstract}
+
+\clearpage
+\tableofcontents
+\clearpage
+
+\section{Usage}
+
+\setbox0=\hbox{\it the center}
+\count11=1
+\loop\ifnum\count11<11
+ \setbox0=\hbox{\fancyframebox{.1pt}{5pt}{\unhbox0}}
+ \advance\count11 by1
+\repeat
+
+\vbox{\centerline{\box0}\vss}
+
+This paragraph is probably rather hard to read. I have used \TeX's
+rule-drawing and macro capability to set 10 boxes on top of the
+text. This was rather easy to do in \TeX. I challenge anyone
+to come up with as simple a method for {\it troff}.
+
+\def\\{\char`\\}\def\{{\char`\{}\def\}{\char`\}}
+The command I used was:
+
+$$\hbox{\tt \\fancyframebox\{.1pt\}\{5pt\}\{{\it text to be boxed}\}}$$
+
+{\tt \\fancyframebox} makes a framed {\tt \\hbox} containing its
+third argument, surrounded by extra space (its second argument),
+and rules on all four sides whose width is its first argument.
+To get 10 boxes, you just re-frame 10 times. I used a {\tt \\loop}
+construct, but one could just write out 10 nested {\tt \\fancyframebox}
+calls.
+
+In order to center the fancy boxes, I put them into {\tt \\box0} and
+used {\tt \\centerline\{\\box0\}} to write it out. To make the
+text come out on top, I put it in a {\tt \\vbox to 0pt} construct,
+making \TeX\ try to squeeze everything vertically to zero. A
+{\tt \\vss} allowed the {\tt \\vbox} to shrink (without it \TeX
+\ would still have done the job, but would have complained about
+an ``overfull {\tt \\vbox}'').[Ed.-Example was changed...]
+
+Thus, the final set of commands, including the \TeX\ loop instructions,
+to typeset the boxes was
+
+\bigskip
+
+\begin{verbatim}
+\setbox0=\hbox{\it the center}
+\count11=1
+\loop\ifnum\count11<11
+ \setbox0=\hbox{\fancyframebox{.1pt}{5pt}{\unhbox0}}
+ \advance\count11 by1
+\repeat
+
+\vbox{\centerline{\box0}\vss}
+\end{verbatim}
+
+\bigskip
+
+Simple---at least when you consider the task\dots.
+
+\section{Macros}
+
+
+\begin{verbatim}
+\fancyframebox{rule thickness}{separation from inner guy}{inner guy}
+\makeemptybox{width}{height}{depth}
+\end{verbatim}
+
+\end{document}
diff --git a/macros/generic/frame/frame.sty b/macros/generic/frame/frame.sty
new file mode 100644
index 0000000000..edf678098a
--- /dev/null
+++ b/macros/generic/frame/frame.sty
@@ -0,0 +1,9 @@
+%% $Id: frame.sty 320 2010-05-15 09:42:13Z herbert $
+\ProvidesPackage{frame}[2010/05/15 package wrapper for
+ frame.tex (hv)]
+\input{frame.tex}
+\ProvidesFile{frame.tex}
+ [\filedate\space v\fileversion\space `frame' (tvz,hv)]
+%
+\endinput
+
diff --git a/macros/generic/frame/frame.tex b/macros/generic/frame/frame.tex
new file mode 100644
index 0000000000..de9f915913
--- /dev/null
+++ b/macros/generic/frame/frame.tex
@@ -0,0 +1,58 @@
+%%
+%% $Id: frame.tex 320 2010-05-15 09:42:13Z herbert $
+%%
+%% COPYRIGHT 1992/2010, by Timothy Van Zandt, tvz@Princeton.EDU
+%% COPYRIGHT 2010, by Herbert Voss, hvoss@tug.org
+%%
+%% Copyright:
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% frame.tex/frame.sty provides fancy frames for generic TeX
+%
+% Usage:
+% \fancyframebox {rule thickness} {separation from inner guy} {inner guy}
+%
+% \makeemptybox {width} {height} {depth}
+%%
+%
+\def\fileversion{1.0}
+\def\filedate{2010/05/15}
+%
+\csname FrameLoaded\endcsname
+\let\FrameLoaded\endinput
+%
+\edef\TheAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\message{\space\space v\fileversion\space\space \filedate\space\space <tvz>}
+
+\newbox\fancyboxA
+\newbox\fancyboxB
+\newdimen\fancyboxD
+
+\def\makeemptybox#1#2#3{\setbox\fancyboxA=\hbox{}\wd\fancyboxA=#1\relax
+ \ht\fancyboxA=#2\relax \dp\fancyboxA=#3\relax \box\fancyboxA }
+
+\def\fancyframebox#1#2#3{%
+ \leavevmode
+ \setbox\fancyboxB=\hbox{#3}%
+ \dimen\fancyboxD=#1\relax
+ \advance\dimen\fancyboxD by #2\relax
+ \advance\dimen\fancyboxD by \dp\fancyboxB
+ \hbox{%
+ \lower\dimen\fancyboxD\hbox{%
+ \vbox{%
+ \hrule height #1\relax
+ \hbox{%
+ \vrule width #1\relax
+ \kern #2\relax
+ \vbox{\vskip #2\relax\box\fancyboxB\vskip #2\relax}%
+ \kern #2\relax
+ \vrule width #1\relax}%
+ \hrule height #1\relax}}}}
+%
+\expandafter\catcode`\@=\TheAtCode\relax
+\endinput
+%% END frame.tex/frame.sty
diff --git a/macros/generic/gates/README b/macros/generic/gates/README
new file mode 100644
index 0000000000..baa717a276
--- /dev/null
+++ b/macros/generic/gates/README
@@ -0,0 +1,26 @@
+This is the README file for the Gates package.
+Author: Paul Isambert.
+E-mail: zappathustra AT free DOT fr
+Comments and suggestions are welcome.
+Date: May 2012.
+Version: 0.2.
+
+Gates helps writing code in a modular fashion: macros are broken into
+small chunks with names, which can be externally controlled and/or
+augmented with new ones. Code thus written can be easily modified.
+
+Gates is implemented independantly for both TeX and Lua; the former
+requires the texapi package, while the latter can run with any Lua
+interpreter (not just LuaTeX).
+
+The files in this distribution are:
+
+gates.tex - TeX implementation
+gates.sty - wrapper for LaTeX
+t-gates.tex - wrapper for LaTeX
+gates.lua - Lua implementation
+gates-doc.tex - master file for the doc
+gates-doc.txt - text of the doc (readable in a text editor)
+gates-doc.pdf - typeset doc
+
+Licensing of this package is covered by LPPL.
diff --git a/macros/generic/gates/gates-doc.pdf b/macros/generic/gates/gates-doc.pdf
new file mode 100644
index 0000000000..f0e8112965
--- /dev/null
+++ b/macros/generic/gates/gates-doc.pdf
Binary files differ
diff --git a/macros/generic/gates/gates-doc.tex b/macros/generic/gates/gates-doc.tex
new file mode 100644
index 0000000000..943e06f8ed
--- /dev/null
+++ b/macros/generic/gates/gates-doc.tex
@@ -0,0 +1,126 @@
+% This is the master file producing gates-doc.pdf. The version of the
+% documentation readable in a text editor is interpreter-doc.txt (input below).
+%
+% Paul Isambert - zappathustra AT free DOT fr - May 2012
+
+\input pitex
+\input interpreter
+
+\overfullrule=0pt
+
+\setfont\mainfont:
+ name = "Chaparral Pro"
+ size = 18pt
+ bold = Semi
+ big = 144pt
+
+\setfont\codefont:
+ name = "Lucida Console"
+ slant = 15
+ bold italic = none
+ size = 14pt
+ features = "-tlig, -trep, space = mono"
+
+\setparameter section subsection :
+ color = ".8 0 0"
+ inline = true
+ toc = true
+
+\setparameter section :
+ font = "\mainfont\normalsize\sc"
+ number = none
+ clear = false
+
+\setparameter sectionbookmark :
+ open = true
+ italic = true
+
+\setparameter subsection :
+ font = ""
+
+\setparameter paragraph :
+ number = none
+ beforeskip = 1
+ color = ".8 0 0"
+ font = ""
+ aftertitle = "\hskip.6em"
+
+\setparameter navigator :
+ pre = {\linkcolor"}
+ post = {"}
+ mode = bookmarks
+
+\def\linkcolor"#1"{%
+ \color{.4 .3 .3}{\ital{#1}}%
+ }
+
+\setparameter page :
+ width = 80pc
+ left right = 20pc
+ lines = 24
+ baselineskip = 24pt
+
+\Section def {section_do}[2]{%
+ \noindent
+ \ifstring{#1}{section}
+ {\marginnote[font = \rm,
+ hpos = rf,
+ side = left,
+ hsize = 5cm]{\quitvmode#2}}
+ {\ifstring{#1}{subsection}
+ {\marginnote[hsize = 4cm]{\quitvmode#2}}
+ {#2}}%
+ }
+
+\OutputRoutine close {headers}{shipout}
+
+%%% Redefining \TeX to look better with Chaparral.
+\def\TeX{%
+ T\kern-.13em
+ \lower.5ex \hbox {E}%
+ \kern-.03em X%
+ }
+% \TeX in bookmarks. Takes an argument because Interpreter changes all "TeX"
+% to "\TeX{}".
+\pdfdef\TeX#1{TeX}
+
+\def\gatecolor{\color{.8 0 0}}
+\def\gateaction#1{%
+ \directlua{pitex.callback.skip("french_punctuation")}%
+ \hbox{\gatecolor{{\codefont#1}}}%
+ }
+
+\def\describe#1#2{%
+ \needspace{2\baselineskip}%
+ \bgroup\codefont
+ \hsize=\maxdimen
+ \noindent
+ \gatecolor{\llap{\gateaction{\string#1}\kern.3em}%
+ #2\par\egroup}\removenextindent
+ \ignorespaces}
+
+\def\comarg{\arg{command}\antigobblespace}
+\def\textarg{\arg{text}}
+
+\setbox0=\hbox to \hsize{%
+ {\big \color{.8 0 0}{Gates}}%
+ \hfil
+ \vbox{%
+ \hbox{Paul Isambert}
+ \hbox{\codefont zappathustra@free.fr}
+ \hbox{Version 0.2}
+ \hbox{May 2012}}%
+ }
+\ht0=6\baselineskip \dp0=0pt
+\box0
+\vskip2\baselineskip
+
+\Section skip {section_break}{section}
+
+\input gates
+
+\hyphenation{my-other-list}
+
+\interpretfile{pitex}{gates-doc.txt}
+
+\bye
diff --git a/macros/generic/gates/gates-doc.txt b/macros/generic/gates/gates-doc.txt
new file mode 100644
index 0000000000..81562d67e5
--- /dev/null
+++ b/macros/generic/gates/gates-doc.txt
@@ -0,0 +1,1947 @@
+Gates: a presentation
+=====================
+
+This part of the documentation is a general introduction to gates,
+illustrating many of their properties in the abstract. Then comes
+ {a user manual for TeX} [see TeXUser_tag],
+ {a complete reference for TeX} [see TeXReference_tag],
+ {a user manual for Lua} [see LuaUser_tag] and
+ {a complete reference for Lua} [see LuaReference_tag].
+The manuals explain gates in action, while the references are
+alphabetical lists of all actions with their syntax.
+
+This documentation doesn't contain very complex examples of gates. To
+see gates in full regalia, you can have a look at PiTeX (the set of
+files used to typeset this documentation) for (mostly) TeX gates, and
+the Interpreter package, version 1.1, for Lua gates (version 1.0, wasn't
+written with Gates). Speaking of Interpreter, this documentation was
+written with it, so it can be read confortably in a text editor (see
+"gates-doc.txt").
+
+
+ What are gates, and what are they good for?
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+At first sight, gates are just a convoluted way to define and execute
+macros. But they're better thought of as bricks to *construct* macros
+in such a way that each brick can be independantly controlled, and new
+bricks can be added to a wall already built. For each logical step in a
+big macro, the user can decide whether to execute that step, bypass it,
+add a new step before or after, etc. This way, you give the user the
+ability to tweak your macro as s/he wishes.
+
+Suppose for instance you write \BigMacro. \BigMacro does a lot of
+interesting things: first it does A, then B, then -- last but not least
+-- C. The problem with \BigMacro is that it's very good; so good that
+everybody uses it and wants to add his or her little twist to it, because
+\BigMacro really entices creativity. You have no time to add those
+twists yourself, nor do you think they'll interest anybody but their
+authors. Yet you keep receiving emails asking you to modify \BigMacro.
+Yes, \BigMacro is big, so most users don't care to try and understand
+it; even if they do, they're not so sure how it works: in A, there seems
+to happen something, and X becomes Y, and then in B, Y is passed to...
+or was it X? Plus those same people really don't want to copy one hundred
+lines of code just to add their touch to it. \BigMacro is like a plate
+of spaghetti: good, but spaghetti nonetheless, hard to decipher and
+rearrange. A few people will be able to hack it, but it is lost on users
+bold but lacking experience.
+
+Gates are made to avoid that situation. \BigMacro will now be made of
+the same logical steps, but they will be gates, which means users will
+be able to control their behavior without ever looking at how they're
+implemented. For instance, one person would prefer to avoid step B in
+some cases; if B is a gate, that can be done easily. Another don't like
+B at all and wants to remove it altogether: nothing simpler. A third
+person would like to get the output of B and modify it a bit before C
+kicks in; s/he just has to write a new gate (which is like writing a
+macro) and add it after B; whatever B returns will be passed to that
+new gate instead of C, and whatever the new gate returns will be passed
+to C. That's another thing with gates: they pass arguments between them
+when one follows the other; they can even return arguments. That's
+nothing new in Lua; but in TeX, arguments handling is generally not so
+simple. In most, if not all, programming languages, the following:
+
+ dosomething(makesomething(<argument>))
+
+is evaluated as follows: <argument> is passed to "makesomething", whose
+return value is passed to "dosomething". The equivalent in TeX doesn't
+do that, however:
+
+ \dosomething{\makesomething{<argument>}}
+
+Here "\makesomething{<argument}" is passed to \dosomething and chaos
+is sure to ensue if the previous behavior is expected. Instead, one
+must generally store whatever \makesomething `returns' in a macro and
+pass that macro to \dosomething. With gates, however, the passing of
+arguments can be mimicked: if two gates follow each other in a list,
+whatever the first returns (no quotes here) is passed to the second.
+In our case, if \makesomething is called before \dosomething, the former
+will process its argument and pass its return value (if any) to the
+latter. No special care is needed to do so.
+
+Another property of gates, obviously, is that they are reusable. In the
+TeX world, however, it is customary to distinguish between public macros,
+to be manipulated by users, and private ones, traditionally marked by
+an "@" in their names, and that lay users should absolutely ignore.
+With gates, everything seems public. That's indeed the very reason why
+gates exist: so that macros are as hackable as possible, and users can
+do what they like with them. If you're afraid that chaos might ensue
+(because users are notoriously dangerous), don't worry too much: it is
+a little bit harder to grasp how gates work than to turn "@" into a
+letter so it can be used in private macros; a user who would manipulate
+gates thus probably knows what s/he's doing, or at least that what
+s/he's doing might break. (By the way, gates are very likely to contain
+"@"-marked private macros anyway, if only because they don't make sense
+outside the context of their use.)
+
+If you want to use gates but still insist that users shouldn't mess
+with them, there is another solution: don't document them. Indeed, gates
+are useful only to the extent that other people know where they occur
+and what they do. So documenting gates is an essential step in exploiting
+them fully; as will be said again below, though, there is no need to
+explain what a gate does internally: simply saying what arguments it
+takes, what it does with them (conceptually), and what it returns, is
+enough. In other words, you don't explain the code that makes up the
+gate, you explain its function in the larger picture.
+
+One last remark about gates, not expanded in this document: they can
+be useful to create libraries, i.e. snippets of code to be used in
+various places. Instead of writing macros to perform such and such
+operation, you can write gates; the difference is that they can be
+easily added to existing code, and externally controlled.
+
+
+
+ An overview of (almost) all actions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+There are two types of gates: macro gates (or `m-gates' for short) and
+list gates (`l-gates'). M-gates execute some code, like macros in TeX
+or functions in Lua; l-gates contain other gates (of either type) and
+call them in turn, passing arguments between them; from now on, `gate'
+means a gate of either type. Typically, a big macro is an l-gate with
+many subgates, themselves possibly l-gates containing gates of a lower
+level still, and so on and so forth. Then one can say, `In that l-gate,
+I want this gate to be ignored'; or `I want to add my own gate to this
+l-gate, in such position', etc.
+
+
+ -- Defining and executing gates --
+
+To define an m-gate, one uses the |def| action; the |list| action is
+used to declare an l-gate. Gates of either type can then be added to
+an l-gate with |add|; by default, the insertion is done at the end of
+the list, but a position relative to other gates can be optionally
+specified. Gates can be removed with the |remove| action.
+
+A gate can also be defined by |copy|ing another gate; in that case, the
+new gate is identical to the copied one, except its status (see below)
+is set to |open|, which is the default status when creating a gate. When
+copying an l-gate, the list is copied too (also it is the same subgates
+that occur in both l-gates).
+
+To call a gate, one uses |execute| (various shorthands are possible).
+Executing an m-gate is not very different from executing a macro or
+function: it performs its definition. The execution of an l-gate, on the
+other hand, consists in calling the gates that were added to it. Also,
+and most importantly, gates in a l-gate pass arguments between them: the
+first gate receives the arguments passed to the l-gate it belongs to,
+then passes them to the next gate, possibly modifying some of those
+arguments by |return|ing. (Returning arguments depends heavily on the
+implementation; see |return| and associates in TeX, and |autoreturn|
+in Lua.)
+
+ For each language, see:
+ {defining and executing gates in TeX} [see TeXDefinition_tag]
+ and
+ {defining and executing gates in Lua} [see LuaDefinition_tag].
+
+
+ -- Conditions --
+
+Gates can be externally controlled in four ways. First, all gates have
+a |status|: if it is |open| (which is default), the gate is executed
+when encountered; if it is |close|, it is ignored; |ajar| means that the
+gate will be executed the next time it is encountered, and then its
+status will revert to |close|; |skip| is the opposite: the gate will be
+ignored the next time, then it will revert to |open|. In short, |ajar|
+and |skip| mean executing or ignoring the gate once.
+ See {status in TeX} [see TeXStatus_tag]
+ and {status in Lua} [see LuaStatus_tag].
+
+Second, all gates may have a |conditional|: if it is true, the gate is
+executed, and ignored otherwise. This allows gates to depend on external
+states of affairs. But a gate's conditional takes the same arguments as
+the gate itself, so the its value can also depend on what is passed to
+the gate. Thus, what a gate does and why it does it are kept distinct.
+ See {conditional in TeX} [see TeXConditional_tag]
+ and {conditional in Lua} [see LuaConditional_tag].
+
+Third, the same gate can be repeated with a |loop|: it is the same thing
+as a conditional, and the gate's arguments are also passed to it. The
+gate will be called repeatedly as long as the loop is true. When a gate
+is repeated, it passes its returned arguments to itself, and before
+that to the loop. It is as if the same gate had been added several times
+in a row to the same l-gate.
+ See {loop in TeX} [see TeXLoop_tag]
+ and {loop in Lua} [see LuaLoop_tag].
+
+Fourth, |loopuntil| is another kind of loop: the gate is repeated as
+long as it is false; also, |loopuntil| is evaluated after the gate, so
+the latter is executed at least once. If a gate has both |loop| and
+|loopuntil|, the latter is ignored.
+ See {loop-until in TeX} [see TeXLoopUntil_tag]
+ and {loop-until in Lua} [see LuaLoopUntil_tag].
+
+Finally, in Lua a gate may also have an |iterator|; to put it simply,
+it mimicks a "for" loop; for instance, a gate may be called with a
+table as its argument but actually be executed on every entry, if the
+|iterator| is the "pairs" function.
+ See {iterator in Lua} [see LuaIterator_tag] for details.
+
+Actually, a gate doesn't have only one status, one conditional, etc.
+Rather, it has one global set of conditions, and one local set of
+conditions for each l-gate where it appears (note that if a gate appears
+several time in the same l-gate, it has only one local set of conditions).
+The global conditions are examined whenever the gate is encountered,
+either when it is called directly with |execute| or when it is called
+by an l-gate; local conditions are examined in the latter case only.
+
+It is important to understand the relative order of evaluation of the
+conditions, and how global and local conditions interact. Suppose a
+gate is called directly with |execute|; then the following happens:
+first, the gate's global status is checked; if |ajar| or |skip|, it is
+set back to |close| and |open| respectively; if the original status
+allows the execution of the gate (i.e. the status was |open| or |ajar|),
+the gate's global conditional is then evaluated; if it is true, and the
+gate has neither |loop| nor |loopuntil|, the gate is executed once;
+otherwise, it is repeated as long as |loop| is true or as long as
+|loopuntil| is false. Note that even if the gate is executed several
+times, the status and conditional aren't reevaluated, only the loops.
+The same is true with |iterator| in Lua.
+
+Suppose now the gate occurs in an l-gate. Then the same evaluation
+happens, this time with the local values for that given l-gate. If the
+gate is deemed good for execution, or rather, each time it is executed
+(if a loop calls it several time), the global values are evaluated again
+as we've just seen. In other words, when a gate occurs in an l-gate,
+its global conditions are examined if and only if the local conditions
+allows the execution of the gate, and each time they prompt it. This
+means for instance that if a gate is globally |ajar| and is encountered
+in an l-gate where it's local status is |close|, its global status will
+not be reverted to |open| because it will simply not be evaluated (of
+course, it can be evaluated elsewhere).
+
+This may seem a bit complicated, but actually situations where you have
+to specify both local and global conditions are rare (global status is
+always a bit dangerous, because all the instances of the gate are affected,
+which might not be expected if somebody reuses an existing gate); also,
+you may very well |open| and |close| a gate for whatever reasons, but
+if you use |ajar| and |skip| it means you're controlling it quite tightly
+and you probably won't use a conditional too.
+
+
+ -- The shorthand notation --
+
+Defining gates, adding them to l-gates, and setting their conditions,
+can be done with actions, as explained above. But that can be tedious,
+because when you're building a big macro (a big l-gate, rather), it's
+hard to see the larger picture: you're adding gates one after the other,
+and you can't readily figure out what the big l-gate looks like. It's
+as if you were looking at a house brick by brick without being able to
+take a few steps back and consider the whole building.
+
+But entire gates, replete with subgates down to whatever level, and
+specified for all conditions, can be created without ever mentioning any
+action. The overall architecture can be preserved, because gates are
+defined and added to an l-gate at once. It is a bit like writing a big
+macro or function, except you add a tag to each chunk of code, for further
+reference. The shorthand notation isn't explained further here, because
+it depends on the implementation and works very differently in TeX
+and Lua: see
+ {TeX shorthand notation} [see TeXShorthand_tag] and
+ {Lua shorthand notation} [see LuaShorthand_tag].
+
+
+ -- Gate families --
+
+Since gates are designed to be hacked, it is all the more convenient if
+they have simple, descriptive names. Of course, you can call a gate
+"insftn", but "InsertFootnotes", or any other readable name, is definitely
+better; a user can then easily browse gates and find what s/he's
+looking for.
+
+However, such significant names increase the risk that two gates bear
+the same name and clash. This is avoided by creating gate families. A
+family is simply a prefix added to a name's gate, so that a gate whose
+name is "MyGate" is actually called "MyFamily:MyGate". But family are
+associated with calling commands in TeX and tables in Lua, so that when
+a gate is mentioned without its family, it is automatically added. For
+instances the \gates command in TeX and the "gates" table in Lua are
+associated with the family called "gates", so the name of a gate manipulated
+with them is actually "gates:<name>".
+
+You can define a new family, associated with a command or table, with
+the |new| action; gates manipulated by that command or table will then
+have a real name which includes the family. Thus, their apparent names
+can be identical to other gates, as long as they belong to other families.
+
+As said above, a gate's family is supplied when it is missing from the
+gate's name. This means conversely that if the family is specified in
+a gate's name, it is not added. So, if you mention gate "MyFam:MyGate",
+the family associated with the command or table where the gate is
+mentioned isn't specified again. You can thus very well use gates from
+other families without having to rely on the associated command or
+table. In other words, there's no hidden mechanism behind families:
+they're just prefixes added to a gate's name, and the automatic addition
+of a family is just an examination of a gate's name.
+
+Although a command or table must be declared with |new| to work properly,
+families themselves don't require that. Gate "MyFam:MyGate" can be used
+even if "MyFam" hasn't been declared (and the declaration can also take
+place later, so that the family is associated with a command or table).
+In other words, the command/table-family association is just a convenient
+way to make the names of your gates unique without thinking about it,
+but you can also think about it and use an explicit family prefix.
+ See {families in TeX} [see TeXFamilies_tag]
+ and {families in Lua} [see LuaFamilies_tag]
+
+
+ -- If you get lost --
+
+Gates can be quite complex. For instance, the big l-gate that creates
+section headings in this document is made of 16 subgates and subsubgates
+(as I am writing this, at least). The main function of the Interpreter
+package used to turn the source of this document into proper TeX is made
+of more than 25 subgates (not counting repeated ones), with 7 levels
+between the top l-gate and the most deeply embedded m-gate.
+
+There are a few actions to make things clearer. First, you can know
+whether a given gate is an m- or l-gate with |type|, which returns 1
+(for m-gates), 2 (for l-gates), or 0 (if the name you passed isn't a
+gate). Similarly, a gate's status (either global or local to some l-gate)
+can be queried with the |status| action, which returns 1, 2, 3 or 4,
+depending on whether the gate's status is open, ajar, skip or close,
+and 0 if there is no gate with the given name.
+
+You can loop over all the subgates in an l-gate with |subgates|, and
+execute some code for each subgate.
+
+The family associated with a command or table can be queried by the
+|family| action.
+
+Finally, gates can be explored more thoroughly with |show| and |trace|.
+The |show| action prints (on the terminal and log file) a gate's name,
+type, and global conditions (the loops are omitted if not specified);
+if the gate is an l-gate, the same happens with its subgates, except
+local conditions are shown; and a subgate is an l-gate itself, the
+process goes on. Subgates are displayed in a manner similar to the TeX
+shorthand notation.
+
+The |trace| action shows gates when they are encountered: it is signalled
+whether they are executed or not (and why), and possibly the arguments
+passed to them are mentioned too. Again, subgates to an l-gate are
+marked as such.
+
+ See {getting lost in TeX} [see TeXLost_tag]
+ and {getting lost in Lua} [see LuaLost_tag]
+
+
+
+
+
+Gates in TeX :TeXUser_tag
+============
+
+This part of the documentation explains how gates work in TeX.
+
+
+
+ Loading and using Gates
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+The way to load Gates depends on your format. In plain TeX, you use:
+
+ \input gates
+
+In LaTeX:
+
+ \usepackage{gates}
+
+And in ConTeXt:
+
+ \usemodule[gates]
+
+Actions in TeX aren't executed with control sequences, but with a
+calling command (by default, \gates), followed by an action's name,
+followed by a space:
+
+ \gates action {...}
+
+(Of course, the space can be the end of a line.)
+
+Note that loading Gates in TeX doesn't automatically load the Lua
+counterpart even in LuaTeX; in other words, Gates in Lua should be
+independantly loaded.
+
+
+
+ Definition and execution :TeXDefinition_tag
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+Here it is shown how gates are created, concatenated, executed, and how
+arguments are passed between them.
+
+
+ -- Defining gates --
+
+Let's try an extremely simple example. You want to define a macro which,
+when given a number, adds 3 to it, multiplies everything by 2, and prints
+the result. How fascinating. Here's how you'd do it with gates. First
+you define your m-gates with |def|:
+
+ \gates def {add} [1] {%
+ \gates return {#1+3}
+ }
+ \gates def {multiply} [1] {%
+ \gates return {(#1)*2}
+ }
+ \gates def {print} [1] {%
+ \the\numexpr#1\relax
+ }
+
+The number of argument (up to nine) is given after the name, between
+brackets, and can be omitted if the gate takes no argument. The |return|
+action is discussed more thoroughly below [see Return_tag]; just note
+for the moment that there is no need to add a comment at the end of the
+line to avoid spurious space, because material after a |return| is
+gobbled (so watch your \fi's!).
+
+(Instead of |def|, we could use the |edef| action; the difference is
+the same as between TeX's \def and \edef. There is no \gdef/\xdef
+variants, because operations on gates are always globals.)
+
+Now those gates should be added to an l-gate. Such a gate is declared
+with |list|, and an optional number of arguments can be specified too.
+
+ \gates list {operation} [1]
+
+Finally we |add| the m-gates to the l-gate:
+
+ \gates add {add, multiply, print} {operation}
+
+The |add| action can take one or more gates, separated by commas. Examples
+of |add| with specified position can be found below [see TeXAddWithPosition_tag].
+
+
+ -- Executing gates --
+
+And that's it, our small \BigMacro is done. We can call it, with 4 as
+argument, for instance, and it will print 14; to do so, we use the
+|execute| action:
+
+ \gates execute {operation}{4}
+
+Note that m-gates can be executed too, although *that* is a convoluted
+way to call a macro; in this case, do not worry about the return value,
+it simply vanishes. For instance, the following:
+
+ \gates execute {print}{5+2}
+
+will produce "7". If we'd call "multiply" rather than "print", nothing
+would have happened, since it simply returns something, which doesn't
+make sense outside an l-gate.
+
+Execution can be called more directly as:
+
+ \gates operation {4}
+
+I.e. instead of a gate action, you use the name of a gate, and that's
+equivalent to calling |execute| with that gate. However, this can be
+done if and only if the gate you want to call doesn't have the same
+name as an action; for instance, you can't do that with the "add" gate,
+because there exists an action called |add|, so you have to use |execute|
+instead.
+
+ :TeXAddWithPosition_tag
+Now suppose we'd like to add a substraction after the multiplication --
+that is, suppose we're a user who wants to add his or her touch to
+\BigMacro. Nothing simpler:
+
+ \gates def {substract} [1] {%
+ \gates return {#1-3}
+ }
+ \gates add {substract}[after multiply]{operation}
+
+And now "operation" returns 11 when fed 4. This was done by simply
+adding an optional argument to the |add| operation; this specifies where
+the new gate(s) should be added in the l-gate: by default, it is the
+end of the list, but you can say "first" to put the gate(s) at the
+beginning or "before <name>" or "after <name>" to make the insertion
+before or after the gate called <name>; instead of a name, you can also
+use "first" or "last" to denote the first and last gates of the list,
+so here we could have used "before last" instead of "after multiply".
+
+You can also |remove| a gate from a list. After:
+
+ \gates remove {substract}{operation}
+
+the l-gate "operation" is now the same as before.
+
+
+ -- Handling arguments -- :Return_tag
+
+One crucial properties of gates is that they pass arguments between
+them. This was already illustrated by our code above: "operation" takes
+one argument, which is passed to "add", "multiply" and "print"; or
+rather, it is passed to "add", and that gate returns an argument which
+is passed to "multiply", and again to "print".
+
+Arguments work as follows: a gate called with |execute| should be
+followed by as many arguments as it was declared with, just like any
+other macro in TeX. An l-gate passes its arguments to its first subgate;
+and for two consecutive gates, the second receives what the first
+returns.
+
+To return arguments, you use the |return| action, as illustrated above.
+It expects the same number of arguments as the gate where it appears.
+For instance, "add" was declared with one argument, so when it calls
+|return|, one argument is expected. But one might want to return a
+different number of arguments; in this case, one can use |return0|,
+|return1|, |return2|, etc., up to |return9|. Also, the |return!| action
+takes one big argument containing an indefinite number of arguments to
+be returned; for instance:
+
+ \gates return2 {one}{two}
+ \gates return! {{one}{two}}
+
+are equivalent, and they're also equivalent to a simple |return| with
+two arguments in a gate declared as taking two arguments.
+
+Since l-gates execute no code, you can't call any version of |return|
+with them; but they automatically return whatever was returned by their
+last gate, and that is passed whatever follows the l-gate.
+
+Until now, we have implicitly assumed that all gates in the same l-gate
+take the same number of arguments. That is not necessary: two gates
+with a different number of arguments can occur in the same l-gate;
+consequently, a gate doesn't need to take the same number of arguments
+as the l-gate it appears in. For instance, you can very well declare
+an l-gate with 3 arguments, and add to it an m-gate with 2 arguments
+and another one with 4. Let's do it, and see what happens:
+
+ \gates list {mylist} [3]
+ \gates def {macro1} [2] {%
+ \immediate\write16{1: #1. 2: #2.}}
+ \gates def {macro2} [4] {%
+ \immediate\write16{1: #1. 2: #2. 3: #3. 4: #4.}}
+ \gates add {macro1, macro2} {mylist}
+ \gates execute {mylist} {one}{two}{three}
+
+This will print:
+
+ 1: one. 2: two
+ 1: one. 2: two. 3: three. 4: .
+
+The first two arguments of "mylist" are passed to "macro1", and the third
+is simply ignored. Then the three arguments are passed to "macro2", along
+with a empty fourth one. In other words, the number of arguments is
+adjusted so that every gate receives what it needs and nothing more.
+
+But haven't we said just above that a gate receives what the previous
+one returns? Since "macro1" returns nothing, shouldn't "macro2" receive
+four empty arguments? Things are actually a bit more complicated to
+explain, but simpler to use: given two consecutive gates A and B, the
+arguments passed to B are whatever A returns, plus additional arguments
+taken from those that A received if necessary (i.e. if B takes more
+arguments than A has returned). To put it differently, when a gate returns
+*n* arguments, they simply replace the first *n* arguments of the current
+arguments, which are passed to the next gate. In our example, "macro1"
+returned nothing, so the arguments that it received were restored and
+passed to "macro2". Here is another example:
+
+ \gates list {mylist} [3]
+ \gates def {macro1} [2] {%
+ \immediate\write16{1: #1. 2: #2.}%
+ \gates return1 {ONE}}
+ \gates def {macro2} [4] {%
+ \immediate\write16{1: #1. 2: #2. 3: #3. 4: #4.}%
+ \gates return {first}{second}{third}{fourth}}
+ \gates def {macro3} [4] {%
+ \immediate\write16{1: #1. 2: #2. 3: #3. 4: #4.}}
+ \gates add {macro1, macro2, macro3} {mylist}
+ \gates execute {mylist} {one}{two}{three}
+
+And this prints:
+
+ 1: one. 2: two.
+ 1: ONE. 2: two. 3: three. 4: .
+ 1: first. 2: second. 3: third. 4: fourth.
+
+It works as follows: "macro1" uses the first two arguments from "mylist",
+and returns one; "macro2" thus takes that argument, plus the second,
+third and fourth original arguments (the fourth being empty, since
+"mylist" takes only three); four argument are returned, which is all
+"macro3" needs, so there is no empty argument.
+
+As said above, l-gates automatically return what their last gates return;
+more accurately, an l-gate declared with *n* arguments returns the same
+number of arguments, those being taken from what the last gate returns
+plus additional arguments restored as we've just seen. In our example,
+"mylist" will return "first", "second" and "third" (it takes, and thus
+returns, three arguments), because "macro3" returned nothing and the
+arguments that it received from "macro2" are restored. (Actually,
+returning doesn't mean anything here because "mylist" doesn't appear
+in a l-gate itself.)
+
+This behavior is quite convenient, because it means that when a gate
+doesn't modify an argument, it doesn't have to bother to return it.
+
+
+
+ Controlling gates
+ ~~~~~~~~~~~~~~~~~
+
+Here it is explained how to change a gate's conditions.
+
+ -- Status -- :TeXStatus_tag
+
+The global status of a gate (i.e. its behavior wherever it is encountered)
+can be set with the following actions: |open!|, |ajar!|, |skip!| and
+|close!|, as in:
+
+ \gates ajar! {mygate, myothergate}
+
+This also illustrates that you can set the status of several gates at
+once, separating them with commas (spaces are ignored).
+
+The local status (i.e. the behavior of a gate in a given l-gate) is
+set with the same action without an exclamation mark, followed by the
+l-gate where you want to specify the status:
+
+ \gates open {mygate, myothergate}{mylist}
+
+But you can also use "before <gate>" and "after <gate>", meaning that
+the status of all gates before (resp. after) <gate> in the l-gate will
+be set accordingly. For instance:
+
+ \gates close {before mygate}{mylist}
+
+As an example of a status-controlled gate, let's consider the problem
+of automatically removing the indentation of a paragraph. The usual
+solution is:
+
+ \everypar={{\setbox0=\lastbox}}
+
+The \everypar token list is inserted every time TeX begins a paragraph;
+assigning \lastbox to a box register removes it from the list under
+construction: here the indentation box is thus removed from the paragraph;
+the assignment is done in a group so box 0 remains unaffected. The
+problem is that other resources might want to use \everypar; if the
+exploitation of the token list is always so direct, one resource might
+wipe another. With gates, the solution is to plant an l-gate in \everypar;
+then you can add whatever gate to it without disturbing the other gates
+possibly there too:
+
+ \gates list {everypar}
+ \gates def {noindent}{{\setbox0=\lastbox}}
+ \gates add {noindent}{everypar}
+ \everypar={\gates execute {everypar}}
+
+But we were interested in status. As is, all paragraphs will be unindented,
+because "noindent" will be executed for each paragraph. Instead, we
+should close it with
+
+ \gates close {noindent}{everypar}
+
+and situations triggering an unindented paragraph (for instance, a
+section header) should call
+
+ \gates ajar {noindent}{everypar}
+
+so that "noindent" will make its job once, and then close.
+
+
+ -- Conditional -- :TeXConditional_tag
+
+Status is useful, but it suffers one flaw: you have to set it yourself.
+That's no problem when you're handling a local situation like the
+previous one; but things might a be a bit more far-reaching. You might
+want X to influence Y, and X and Y might not be related at all; also,
+X might change more than once.
+
+For more flexible control, gates can depend on a |conditional|, for
+instance (illustrating both global and local setting):
+
+ \gates conditional! {mygate}{\ifSomething}
+ \gates conditional {gate1, gate2}{mylist}{\ifSomethingElse}
+
+Now, "mygate" will be executed only when \ifSomething is true, just
+like "gate1" and "gate2" in "mylist" will be executed in "mylist" when
+\ifSomethingElse is true. The situations where conditionals can be put
+to use are countless. A preface in a book, for instance, will certainly
+make some \ifSpecialChapter conditional true, and many details will
+depend on that conditional: e.g. unnumbered section headings, page
+number in roman numerals, etc. If those are implemented with gates,
+setting \ifSpecialChapter as the conditional for those gates will make
+them depend on the larger picture (you could use status too, but the
+conditional is more powerful because many different things can depend
+on it, not only gates).
+
+What constitutes a valid conditional? Technically, whatever fits texapi's
+\ifexpression. Indeed, Gates is written with texapi, and conditionals
+rely internally on \ifexpression. What then fits \ifexpression? First,
+any traditional TeX conditional, no matter whether it's a primitive
+like \ifhmode or \ifcat or a macro defined with \newif. Second,
+argument-taking conditionals, i.e. macros working like
+
+ \ifXXX {<true>}{<false>}
+
+can be used too (texapi itself defines a good deal of such conditionals).
+In both cases, what should be set in |conditional| is the test itself,
+not the <true> and <false> parts. For instance, with \ifSomething and
+\ifSomethingElse above, the true branch and the "\else ... \fi"
+continuation were left out of the picture. If you used, say, \ifnum,
+you'd specify something like (note the necessary space):
+
+ \gates conditional {mygate}{mylist}{\ifnum0=1 }
+
+With a texapi conditional you could use:
+
+ \gates conditional {mygate}{mylist}{\ifstring{foo}{bar}}
+
+(Here of course we have specified stupid conditionals which are always
+false; more useful examples can be found below).
+
+But \ifexpression (hence |conditional|) also allows using simple logical
+operators: "&" means *and*, "|" means *or*, "-" means *not*, and
+subexpressions can be created with braces. For instance, the following
+two conditionals are equivalent and are true if the absolute value of
+N is smaller than 100 (the space following an operator is ignored):
+
+ \ifnum N > -100 & \ifnum N < 100
+ -{\ifnum N < -99 | \ifnum N > 99 }
+
+Pretty complex expressions can thus be assigned to a gate's conditional.
+But things are better yet: conditionals take arguments, the same as the
+gates they control, so that the test can depend not only on external
+conditions but on what a gate receives. For instance, with:
+
+ \gates conditional {mygate}{mylist}{\ifnum#1>0 }
+
+"mygate" will be executed only when its first argument is positive.
+Another example:
+
+ \gates conditional! {mygate}{-\ifstring{#1}{#2}}
+
+Here, "mygate" will be executed only when its first two arguments differ,
+no matter in which list "mygate" appear, since the global conditional
+is set here.
+
+If you don't want a gate to depend on a conditional anymore, simply
+declare something like:
+
+ \gates conditional! {mygate}{\iftrue}
+
+
+ -- Loop -- :TeXLoop_tag
+
+Third type of control: the execution of a gate can be repeated as long
+as some condition is true. To do so, you use the |loop| action (with
+an exclamation mark if you want to set the global loop). It takes the
+same stuff as |conditional|, and the gate's arguments are passed to it
+too. If the material evaluates to true, the gate is executed, then the
+material is reevaluated, and if it is true again the gate is executed
+again, and so on and so forth, so obviously something must happen so
+that the iteration stops.
+
+When a gate repeats the arguments it returns are passed back to
+itself, and before that to the loop. Here is an example:
+
+ \gates def {myloop} [1] {%
+ \immediate\write16{\the\numexpr#1}%
+ \gates return {#1+1}}
+ \gates loop! {myloop} {\ifnum\numexpr#1<5 }
+ \gates execute {myloop}{1}
+
+This will print numbers from 1 to 4. Once 4 is printed, "myloop" returns
+5 ("1+1+1+1+1", really), so the conditional controlling the loop isn't
+true anymore and the iteration stops. If this happened in an l-gate,
+the return value of "myloop" would be passed to the next gate.
+
+When a gate shouldn't be controlled by a loop anymore, you can use
+|noloop| (with or without an exclamation mark):
+
+ \gates noloop! {mygate}
+
+
+ -- Loop until -- :TeXLoopUntil_tag
+
+You can specify another type of loop with |loopuntil|: it works like
+|loop|, except the gate is repeated as long as the material evaluates
+to false. Also, the evaluation takes place after the gate is executed,
+which means that the gate is always executed at least once; arguments
+are repeatedly passed to the gate and the conditional as with |loop|,
+except |loopuntil| always receives the return values of the gate it
+controls (whereas on the first evaluation |loop| uses the arguments
+passed to gate, not what it returns). Here's the previous gate rewritten
+with |loopuntil|; it will work slightly differently:
+
+ \gates def {myloop} [1] {%
+ \immediate\write16{\the\numexpr#1}%
+ \gates return {#1+1}}
+ \gates loopuntil! {myloop} {\ifnum\numexpr#1>4 }
+ \gates execute {myloop}{1}
+
+(The difference with the previous version is that here "myloop" will be
+executed at least once, even if a number larger than 4 is passed to it.
+Also, it is important to use "\ifnum\numexpr#1>4" and not "\ifnum\numexpr#1=5";
+the latter will work if "myloop" is always executed with a number smaller
+than 5, but it will enter an infinite loop otherwise, since the condition
+will never be true.)
+
+If you want a gate to stop being controlled by |loopuntil|, use
+|noloopuntil|.
+
+Note that if both |loop| and |loopuntil| are specified, the latter is
+ignored.
+
+
+
+ The shorthand notation :TeXShorthand_tag
+ ~~~~~~~~~~~~~~~~~~~~~~
+
+The shorthand notation allows you to define gates (e.g. l-gates with
+subgates), including conditions, in one go, without having to call any
+gate actions. This makes complex code much more readable.
+
+We've already seen the implicit call to |execute| by using a gate's
+name instead of an action. You can also define m- and l- gates more
+directly as follows:
+
+ \gates def {mygate} [2] {...}
+ \gates list {mylist} [2]
+
+are equivalent to
+
+ \gates [mygate] [2] {...}
+ \gates (mylist) [2]
+
+and the gate's name can be surrounded by space, it is trimmed away. (The
+examples in this section all use this shorthand, but they would be still
+valid with the explicit |def| and |list| instead.) Second, following the
+number of arguments (or the gate's name if the gate takes no argument),
+you can optionally specify global conditions by using "?" followed by a
+list of "key = value" pairs, where the keys are "status", "conditional",
+"loop" and "loopuntil"; for "status", the value should be one of "open",
+"ajar", "skip" or "close", and for the other conditions it should be a
+conditional as seen above. For instance, here's the creation of an m-gate
+with status "close" and some loop:
+
+ \gates [mygate] [2] ?{status = close,
+ loop = \ifnum#1<5 } {...}
+
+This is equivalent to:
+
+ \gates [mygate] [2] {...}
+ \gates close! {mygate}
+ \gates loop! {mygate}{\ifnum#1<5 }
+
+Note that the key is trimmed, as is the value if the key is "status",
+so space can be used to make things readable. In the case of a conditional
+or loop's value, it isn't trimmed, because space can be important, as
+in our example here where it delimits the number "5". The space on the
+left is insignificant, though.
+
+And here comes the most interesting shorthand: when declaring an l-gate,
+you can define and add subgates at once by declaring them just after the
+l-gate (and its optional number of arguments and/or conditions, if any),
+using the same notations as with implicit definitions: "[mygate]" or
+"(mylist)", optionally followed by the number of arguments and/or the
+conditions, and with a definition in case of an m-gate. The only difference
+is that the conditions thus specified, if any, are the local ones relative
+to the l-gate under construction. In other words, the following:
+
+ \gates (mylist) [2]
+ [mygate] [2] ?{status = ajar} {...}
+ (myotherlist) [1] ?{loop = \ifnum#1<5 }
+
+is equivalent to the much more verbose
+
+ \gates (mylist) [2]
+ \gates [mygate] [2] {...}
+ \gates (myotherlist) [1]
+ \gates add {mygate, myotherlist}{mylist}
+ \gates ajar {mygate}{mylist}
+ \gates loop {myotherlist}{mylist}{\ifnum#1<5 }
+
+The shorthand notation allows you to see at once that "mylist" contains
+"mygate" and "myotherlist". But then, the latter is an l-gate too, so
+it could be nice if we could add subgates to it in the same way;
+well, we can, it suffices to use a dot:
+
+ \gates (mylist) [2]
+ [mygate] [2] ?{status = ajar} {...}
+ (myotherlist) [1] ?{loop = \ifnum#1<5 }
+ . [mysubgate] [1] ?{...} {...}
+
+Here "mysubgate" will be added to "myotherlist" instead of "mylist", and
+the conditions, if any, will be the local conditions relative to
+"myotherlist", not "mylist". Now what if "myotherlist" contains an l-gate
+"mysublist" and you want to add subgates to that one? Well, you use two
+dots, and so on and so forth (I leave argument numbers and conditions
+aside to make things simpler):
+
+ \gates (mylist)
+ [mygate] {...}
+ (myotherlist)
+ . [mysubgate] {...}
+ . (mysublist)
+ . . [mysubsubgate] {...}
+ . . (yetanotherlist)
+ . . . (pleasestop)
+
+etc., etc. The notation with dots work as follows: if we assume that
+gates are added to l-gates of a given level, then dots denote that level:
+no dot means that the gate is added to the l-gate of level 0, i.e. the
+gate defined with |list| ("mylist" here), and is itself of level 1, one
+dot means that the gate is added to an l-gate of level 1 and is itself
+of level 2 (e.g. "mysubgate" added to "myotherlist"), and so on and so
+forth. Space around the dot is insignificant. The only (obvious) restriction
+is that an l-gate at level *n* isn't available anymore if followed by a
+gate at the same level or lower. This works a bit like a table of contents:
+a subsection can't be added if there isn't a section immediately above
+it. If you want to come back to a gate at another level, just use less
+dots. For instance, if the code above continued with
+
+ . . [gateX] {...}
+ [gateY] {...}
+
+then "gateX" and "gateY" would be defined and added to "mysublist" and
+"mylist" respectively. Of course, after "gateX", "yetanotherlist" and
+"pleasestop" aren't available for insertion anymore; similarly, after
+"gateY", only "mylist" can host incoming gates, until a new l-gate is
+declared.
+
+It's nice to define subgates and add them to an l-gate at once, but
+sometimes you might want to add a gate that already exists. Using the
+above notation would redefine it. Of course, you can still |add| and
+specify the position, but that's not very convenient. So, besides
+parentheses and square brackets, you can use "<mygate>" to add "mygate"
+without redefining it; you can actually add several gates at once, by
+separating them with commas. Local conditions can then be set as above.
+For instance:
+
+ \gates (mylist)
+ [gateA] {...}
+ <gateB, gateC> ?{status = close}
+ (myotherlist)
+ . <gateD>
+
+creates l-gate "mylist" with subgates "gateA", "gateB", "gateC" and
+"myotherlist", "gateB" and "gateC" being locally closed, and "myotherlist"
+containing "gateD". This of course requires that "gateB", "gateC" and
+"gateD" already exist. If a gate thus added is an l-gate, the dot notation
+can be used to add subgates to it.
+
+The dot is actually only the default character to signal subgates. You
+can use others by declaring them with |subchar|, as in:
+
+ \gates subchar #
+
+The character thus declared do not replace existing ones (this would be
+dangerous) but simply adds a new possibility. For obvious reason, the
+character can't be "[", "(", "<" or "?".
+
+
+
+ Gate families :TeXFamilies_tag
+ ~~~~~~~~~~~~~
+
+New gate families can be created with the |new| action.
+
+ \gates new \MyGates {MyFamily}
+
+Now \MyGates will work exactly like \gates, except that when it manipulates
+gates, they will all have the prefix "MyFamily:" attached to them. For
+instance:
+
+ \gates def {mygate}{...}
+ \MyGates def {mygate}{...}
+
+defines two different gates, "gates:mygate" and "MyFamily:mygate".
+
+If a family is explicitly given in a gate's name, the family
+associated with the calling command isn't added. The following two
+lines are equivalent, for instance:
+
+ \gates def {MyFamily:mygate}{...}
+ \MyGates def {mygate}{...}
+
+Of course the shorthand notation allows you to mix families:
+
+ \MyGates (MyList)
+ (MySubList)
+ . [MyGate] {...}
+ . [AnotherFamily:AnotherGate] {...}
+
+The family associated with a command can be queried with the |family|
+action. For instance:
+
+ \MyGates family
+
+returns "MyFamily".
+
+
+
+
+ If you get lost :TeXLost_tag
+ ~~~~~~~~~~~~~~~
+
+Both |type| and |status| return a number: |type| returns 0 if there is
+no gate with that name, 1 if it is an m-gate and 2 for an l-gate;
+|status| returns 0 for a non-existing gate, and 1 to 4 for "open",
+"ajar", "skip" and "close" respectively; |status| can also be used
+with an exclamation mark to query global status:
+
+ \gates status {mygate}{mylist}
+ \gates status! {mygate}
+
+The |subgates| action takes a definition as its second argument, which
+will be executed with "#1" replaced with the subgate's name. For instance,
+the following shows all the subgates in "mylist", with their types:
+
+ \gates subgates {mylist}{%
+ \immediate\write16{%
+ #1 \ifnum\gates type {#1}=1
+ (m-gate)\else (l-gate)\fi}%
+ }
+
+The |show| action can be used to display a gate's construction and
+conditions. It is displayed as the shorthand notation. The |trace|
+action takes a number and works as follows: if the number is 0, gates
+of the associated families aren't traced; if it is 1, it is mentionned
+if they are called (in an l-gate) and executed or not, and why; with
+2, it works like 1, except the arguments passed to the gates are shown
+too.
+
+
+
+Reference manual for TeX :TeXReference_tag
+========================
+
+All actions are called with \gates, or any other calling command created
+with |new|, as follows:
+
+> \gates <action><space>
+ Executes <action>; if there is a gate called <action>, this is
+ equivalent to "\gates execute {<action>}". The name of the action (or
+ gate) is delimited by a space; depending on <action>, arguments might
+ be required.
+
+In what follows, <gate list> denotes a comma-separated list of gates,
+e.g. "mygate, myothergate, thirdgate"; <gate spec> denotes either a
+<gate list> or a relative position of the form "before <gate>" or
+"after <gate>"
+
+> add <gate list>[<position>]<l-gate>
+ This adds all the gates in <gate list> to <l-gate>. If <position> is
+ missing, the addition occurs at the end of the l-gate. Otherwise, it
+ should be one of the following: "first", meaning the gates will be
+ added at the beginning of the l-gate; "last", meaning they will be
+ added at the end (so this is similar to no <position>); "before <name>",
+ and the addition will occur before gate <name> in the l-gate (it
+ should of course exist); "after <name>", and the addition will occur
+ after gate <name>. Note that <name> can be "first" or "last", denoting
+ the first and last gates in <l-gate> ("before first" and "after last"
+ are obviously synonymous with "first" and "last").
+
+> ajar <gate spec><l-gate>
+ Sets the local status in <l-gate> to "ajar" for the gates in <gate spec>.
+
+> ajar! <gate spec>
+ Sets the global status for the gates in <gate spec> to "ajar".
+
+> close <gate spec><l-gate>
+ Sets the local status in <l-gate> to "close" for the gates in <gate spec>.
+
+> close! <gate spec>
+ Sets the global status for the gates in <gate spec> to "close".
+
+> conditional <gate spec><l-gate><conditional>
+ Sets the local conditional in <l-gate> to <conditional> for the gates
+ in <gate spec>. The conditional should be anything that fits texapi's
+ \ifexpression.
+
+> conditional! <gate spec><conditional>
+ Sets the global conditional for the gates in <gate spec> to <conditional>.
+
+> copy <gate1><gate2>
+ Defines <gate1> as <gate2> (either an m- or l-gate). The current global
+ status is also copied. If <gate2> is an l-gate, its gate list is also
+ copied, along with the current status of the gates it contains. On the
+ other hand, if <gate2> occurs in some l-gate(s), this information isn't
+ copied.
+
+> def <name>[<number of arguments>]<optional conditions>{<definition>}
+ Defines <name> as an m-gate with the given number of arguments and
+ definition. Such an assignment is always global. The number of arguments,
+ ranging from 0 to 9, is optional, in which case the gate takes no
+ argument. In other words, the following lines are equivalent:
+
+ \gates def {mygate}{<definition>}
+ \gates def {mygate}[0]{<definition>}
+
+ Global conditions can be specified with "?" followed by a key-value
+ list, where a key is one of "status", "conditional", "loop" and
+ "loopuntil" and the value is whatever fits the condition, as when
+ explicitely calling the associated action with an exclamation mark.
+ For instance,
+
+ \gates def {mygate} ?{conditional = \ifsomething} {...}
+
+ is equivalent to
+
+ \gates def {mygate}{...}
+ \gates conditional! {mygate}{\ifsomething}
+
+ In the key-value list, the key is always trimmed of surrounding spaces,
+ as is the value if the key is "status"; values aren't trimmed for
+ other conditions, because space might be significant (e.g. with
+ \ifnum), but leading space is harmless (it is ignored by the internal
+ processing of the conditional).
+
+ Giving an gate's name between brackets instead of an action is similar
+ to using |def| with that gate:
+
+ \gates [mygate] [1] {...}
+
+> edef <name>[<number of arguments>]<optional conditions>{<definition>}
+ Similar to def, but performs \edef.
+
+> execute <name><arguments>
+ Executes gate <name>. The number of <arguments> should match what
+ <name> was defined with. If <name> is an m-gate, this is but a
+ convoluted way of calling a macro. If <name> is an l-gate, this will
+ launch sub-gates. Not that the execution depends on the gate's global
+ conditions. Using a gate's name as an action is similar to using
+ |execute| with that gate.
+
+> family
+ Returns the family associated with the calling command.
+
+> list <name>[<number of arguments>]<optional conditions><optional subgates>
+ Defines <name> as an l-gate with the given number of arguments (can
+ be missing if 0). The optional global conditions can be specified
+ with "?" followed by a key-value list; see |def| above. The
+ <optional subgates> constitute the shorthand notation explained
+ above [see TeXShorthand_tag], defining and adding subgates to the
+ l-gate under construction, and specifying the local conditions too.
+
+ Giving an gate's name between parentheses instead of an action is
+ similar to using |def| with that gate:
+
+ \gates (mylist) [2] ?{status = ajar}
+
+
+> loop <gate spec><l-gate><conditional>
+ Sets the local while-loop in <l-gate> to <conditional> for the gates
+ in <gate spec>. The conditional is the same as with |conditional|;
+ the difference is that the gates will be executed again as long as
+ the conditional is true, so there'd better be something somewhere
+ which makes it false.
+
+> loop! <gate spec><conditional>.
+ Sets the global while-loop for the gates in <gate spec> to <conditional>.
+
+> loopuntil <gate spec><l-gate><conditional>
+ Sets the local until-loop in <l-gate> to <conditional> for the gates
+ in <gate spec>. The conditional is the same as with |conditional|;
+ the gates will be executed until the conditional is true; this means
+ they will be executed at least once. If |loop| is also specified,
+ |loopuntil| is ignored.
+
+> loopuntil! <gate spec><conditional>.
+ Sets the global until-loop for the gates in <gate spec> to <conditional>.
+
+> new <control sequence><family>
+ Defines <control sequence> as a calling command for gates, associated
+ with <family>.
+
+> noloop <gate spec><l-gate><conditional>
+ Unsets the local while-loop in <l-gate> to <conditional> for the gates
+ in <gate spec>.
+
+> noloop! <gate spec>
+ Unsets the global while-loop for the gates in <gate spec>.
+
+> noloopuntil <gate spec><l-gate><conditional>
+ Unsets the local until-loop in <l-gate> to <conditional> for the gates
+ in <gate spec>.
+
+> noloopuntil! <gate spec>
+ Unsets the global until-loop for the gates in <gate spec>.
+
+> open <gate spec><l-gate>
+ Sets the local status in <l-gate> to "open" for the gates in <gate spec>.
+
+> open! <gate spec>
+ Sets the global status for the gates in <gate spec> to "open".
+
+> remove <gate list><l-gate>
+ Removes the gates in <gate list> (names separated by commas) in <l-gate>.
+
+> return <arguments>
+ In an m-gate, pass <arguments> to the next one. There should be as
+ many <arguments> as the gate was declared with. Any material following
+ the statement in the gate's definition will be gobbled.
+
+> return0, return1, return2 ... return8, return9
+ Makes the gate return the specified number of arguments, no matter
+ the number of arguments the gate was defined with.
+
+> return! <arguments>
+ Makes the gate return an indefinite number of arguments. If <arguments>
+ is empty, it is similar to 'return0'; if <arguments> contains one
+ argument, it is similar to 'return1'; if it contains two, it is similar
+ to 'return2', etc. An argument is defined as usual in TeX: a token,
+ or balanced text. For instance, in what follows the second and third
+ lines are equivalent; the first does the same job if and only if called
+ inside a gate defined with three arguments (otherwise chaos will ensue).
+
+ \gates return {one}{two}{three}
+ \gates return3 {one}{two}{three}
+ \gates return! {{one}{two}{three}}
+
+> show <gate>
+ Writes to the log and terminal <gate>'s type, its number of arguments,
+ global status, conditional, loops (if specified), and recursively its
+ subgates if <gate> is an l-gate (showing the local conditions).
+
+> skip <gate spec><l-gate>
+ Sets the local status in <l-gate> to "skip" for the gates in <gate spec>.
+
+> skip! <gate spec>
+ Sets the global status for the gates in <gate spec> to "skip".
+
+> status <gate><l-gate>
+ Returns the local status of <gate> in <l-gate>: 1 if the gate is open,
+ 2 if it is ajar, 3 if it is to be skipped, and 4 if it is closed; if
+ there is no <gate> in <l-gate> for whatever reason (including if there
+ exists no such l-gate), returns 0.
+
+> status! <gate>
+ Returns the global status of <gate>.
+
+> subchar <character>
+ Defines <character> as denoting a subgate in the shorthand notation.
+ "[", "(", "<" and "?" are forbidden.
+
+> subgates <l-gate><definition>
+ Executes <definition> with each gate in <l-gate>. In <definition>,
+ "#1" stands for the name of the subgate on each iteration.
+
+> type <name>
+ Returns 0 if <name> is not a gate, 1 if it is an m-gate and 2 if it
+ is an l-gate.
+
+> trace <number>
+ If <number> is 0, gate operations aren't reported; if 1, encountered
+ gates are reported, along with their status and conditional when
+ necessary; if 2, arguments passed to gates that are executed are also
+ displayed. Tracing affects only gates of the family associated with
+ the calling command.
+
+
+
+
+
+Gates in Lua :LuaUser_tag
+============
+
+In general, gates behave similarly in TeX and Lua, but the syntax
+obviously differs. Also, there is one situation where both implementations
+diverge: when arguments are returned.
+
+
+
+ Loading and using gates
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+Gates in Lua aren't loaded automatically with the gates package. So one
+of the following should be issued somewhere:
+
+ dofile("gates.lua")
+ require("gates.lua")
+
+Actually "dofile" requires more precision, e.g. (in LuaTeX):
+
+ dofile(kpse.find_file("gates.lua"))
+
+On the other hand, "require" is a little bit more clever (in LuaTeX,
+it uses "kpathsea"). Note that even if "dofile" is used, "gates.lua"
+won't be loaded twice, because the file returns at once if "gates"
+already exists.
+
+In the above paragraphs, `in LuaTeX' was mentioned twice: that's because
+Lua gates can be used in any Lua interpreter. Lua is obviously required,
+but not Lua*TeX*. In other words, Lua Gates don't rely on any special
+feature of Lua in LuaTeX (libraries, in particular, aren't used).
+
+The file "gates.lua" returns nothing when loaded; it simply creates the
+"gates" table, in which everything takes place until a |new| one is
+created with a family. This means that all actions are fields of the
+"gates" table.
+
+
+
+ Definition and execution :LuaDefinition_tag
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+Here's how to define and execute gates in Lua.
+
+
+ -- Defining gates --
+
+The |def| action creates an m-gate; it takes a table with (for now) two
+entries: the entry at index 1 is the gate's name, the entry at index 2
+is the function performed by the gate. For instance, we can translate
+our simple TeX example in Lua (since the table is the only argument to
+|def|, the surrounding parentheses can be removed):
+
+ gates.def {"add", function (n) return n + 3 end}
+ gates.def {"multiply", function (n) return n *2 end}
+ gates.def {"print", print}
+
+The function can be either an anonymous function created on the fly,
+or a function variable, as with "print". However, such a syntax is
+cumbersome in Lua, so you can directly assign to an entry in the "gates"
+table, provided it hasn't the same name as an action (so it is impossible
+with the "add" gate, for instance):
+
+ function gates.multiply (n)
+ return n * 2
+ end
+
+Actually, entries in the "gates" table be assigned any type; if a
+function is assigned, a gate is created; otherwise, "gates" behaves as
+an ordinary table with an ordinary entry:
+
+ gates.mystring = "Hello"
+ print(gates.mystring)
+
+However, the entry can't be redefined as a gate anymore; if it is
+assigned a function, it will be nothing more. In the following code,
+"bar" is a gate, but "foo" isn't.
+
+ gates.bar = function () ... end
+ gates.foo = "hello"
+ gates.foo = function () ... end
+
+But let's get back to proper gates. We want to add our m-gates to an
+l-gate, which we declare beforehand with |list|:
+
+ gates.list {"operation"}
+
+Like |def|, |list| takes a table as its single argument; the only
+required field is the gate's name at index 1. We can now add the m-gates
+to the l-gate:
+
+ gates.add ({"add", "multiply", "print"}, "operation")
+
+The |add| action takes a table containing subgates as its first argument,
+and a string representing the l-gate where the insertion is done as its
+second. If you add a single subgate, the first argument can be a string.
+More on |add| below [see LuaAddWithPosition_tag].
+
+
+ -- Executing gates --
+
+We can now execute our l-gate:
+
+ gates.execute ("operation", 4)
+
+and "14" will be printed on the terminal. The |execute| action takes a
+gate as its first arguments, and then the arguments that are to be
+passed to the gate. Again, this syntax is a bit cumbersome, and gates
+can be executed more naturally as:
+
+ gates.execute.operation(4)
+
+or simpler, but provided the gate doesn't share a name with an action:
+
+ gates.operation(4)
+
+The last two variants also let you retrieve the gate itself as a function,
+instead of calling it:
+
+ x = gates.execute.operation
+ callback.register("process_input_buffer", gates.operation)
+
+
+ :LuaAddWithPosition_tag
+Now we can define another m-gate and add it to "operation", specifying
+the position:
+
+ gates.substract = function (n) return n-3 end
+ gates.add ("substract", "operation", "after multiply")
+
+And now "operation" returns 11 when fed 4. This was done by simply
+adding an optional third argument to the |add| operation; this specifies
+where the new gate(s) should be added in the l-gate: by default, it is
+the end of the list, but you can say "first" to put the gate(s) at the
+beginning or "before <name>" or "after <name>" to make the insertion
+before or after the gate called <name>; instead of a name, you can also
+use "first" or "last" to denote the first and last gates of the list,
+so here we could have used "before last" instead of "after multiply".
+
+Finally, you can also |remove| a gate:
+
+ gates.remove("substract", "operation")
+
+and now "operation" is what it was before.
+
+
+ -- Handling arguments --
+
+When a gate is called, it may take arguments; in the case of an
+l-gate, those arguments are passed to each subgates, one after the
+other. Unlike gates in TeX, though, if a gate expects more arguments
+than passed to the l-gate it belongs too, no empty argument is added.
+For instance:
+
+ gates.mygate = function (a, b)
+ print ("First: " .. tostring(a),
+ "Second: " .. tostring(b))
+ end
+ gates.list {"mylist"}
+ gates.add ("mygate", "mylist")
+ gates.mylist("one")
+
+will print:
+
+ First: one Second: nil
+
+Also, there is by default no `common argument pool', as there was in
+TeX: a gate (in an l-gate) receives what the previous one returns and
+nothing else; in other words if l-gate L receives four arguments and
+subgate A returns only three, then subgate B will receive three
+arguments. Consequently, all gates should return properly if arguments
+are to be passed.
+
+But that is only default behavior. Lua gates can be made to work like
+TeX gates (to some extent), by using |autoreturn|:
+
+ gates.autoreturn ("mygate", true)
+ gates.autoreturn ("mygate", "mylist", true)
+
+When |autoreturn| is set for a gate (either globally, as in the first
+line, or locally, as in the second), missing arguments will be restored
+when the gate returns. To qualify as a missing argument, the following
+conditions should hold: first, the value is "nil" (i.e. either "nil"
+was explictly returned, or nothing was returned); second, no real
+argument follows. For instance, suppose "mygate" is defined as follows:
+
+ gates.mygate = function (A, B, C, D)
+ return nil, X
+ end
+
+If |autoreturn| is false, the following gate will receive "nil" and
+"X"; if it is true, the arguments will be restored to "nil", "X", "C"
+and "D"; the first argument isn't restored, even though it is "nil",
+because it is followed by real argument "X".
+
+One can also uses |autoreturn| to completely disregard whatever a gate
+returns; this happens when |autoreturn| is a function instead of a
+boolean; the function is passed the original arguments given to the
+gate, and what it returns overrides the gate's return values. For
+instance, given the same definition of "mygate", if |autoreturn| is:
+
+ gates.autoreturn ("mygate",
+ function (A, B, C, D) return D, C, B, A end)
+
+then no matter what "mygate" returns (including what it returns on
+several iterations of itself, if any), the following gate will always
+receive the original arguments in reverse order. This can be particularly
+useful if the gate is controlled by an |iterator|, in which case the
+arguments it receives (e.g. the entries of a table) differ from the
+original ones (e.g. the table itself), yet you still want to pass the
+latter to the following gate.
+
+L-gates automatically returns whatever their last gate returns. Also,
+unlike the TeX implementation (but in line with the Lua language), when
+a gate returns outside an l-gate, the returned values can be used, as
+with any other function.
+
+
+
+ Controlling gates
+ ~~~~~~~~~~~~~~~~~
+
+Here it is explained how gates can be controlled externally.
+
+
+ -- Status -- :LuaStatus_tag
+
+A gate's status can be set with the |open|, |ajar|, |skip| and
+|close| actions; they take at least one argument, either a table:
+
+ gates.open ({"mygate", "myothergate"})
+
+or a simple string if only one gate is to be affected:
+
+ gates.open ("mygate")
+
+With one argument, the actions set the global status; if a second
+argument is present, it is the l-gate where the local status is to be
+set:
+
+ gates.ajar ({"mygate", "myothergate"}, "mylist")
+
+In this case, the first argument can denote a relative position of the
+form "before <gate>" or "after <gate>":
+
+ gates.ajar ("before mygate", "mylist")
+
+
+ -- Conditional -- :LuaConditional_tag
+
+To make a gate depends on an external state of affair rather than status
+only, |conditional| can be used. The syntax is the same as for status,
+except a second (in case of global conditional) or third (in case of
+local conditional) argument is given. This should be a function, and
+the gate's execution depends on what the function returns: the gate is
+executed the function returns nothing or "false". The arguments that
+are to be passed to the gate are passed beforehand to the conditional
+function. For instance, if a gate receives arguments "A" and "B", and
+its conditional function is "ControlFunction", then the gate's execution
+can be schematized as:
+
+ if ControlFunction(A, B) then
+ -- Execute gate
+ end
+
+If you don't want a gate to depend on a conditional anymore, you can
+declare something like:
+
+ gates.conditional ("mygate", "mylist",
+ function () return true end)
+
+
+ -- Loop -- :LuaLoop_tag
+
+The |loop| action allows a gate to be repeated; the syntax is the same
+as for |conditional|, and the loop will be repeated as long as the
+function evaluates to true (as with a "while" loop). Also, the gate's
+arguments are repeatedly passed to the loop conditional. To delete a
+gate's loop, use |loop| with "nil" as the third argument. As an
+example, the following will print number from 1 to 4:
+
+ function gates.mygate (n)
+ print(n)
+ return n + 1
+ end
+ gates.loop("mygate", function (n) return n < 5 end)
+ gates.mygate(1)
+
+
+ -- Loop until -- :LuaLoopUntil_tag
+
+The |loopuntil| action is like |loop|, except the gate is repeated until
+the conditional evaluates to false. Also, the conditional is evaluated
+after the gate is executed, so the execution takes place at least once.
+If both |loop| and |loopuntil| are set for a gate, the latter is ignored.
+
+
+ -- Iterator -- :LuaIterator_tag
+
+The |iterator| action is a bit more complex. If set, it is fed the
+arguments passed to the gate and should return a function, plus possibly
+a state, plus possibly an initial variable; in other words, it should
+return whatever fits a "for" loop in Lua. Then the function is called
+with the state and variable, and the gate itself is called on whatever
+this function returns; the process repeats until the function returns
+"nil" as its first argument. As an example:
+
+ gates.mygate = function (key, value)
+ print("The value of " .. key .. " is " .. value)
+ end
+ gates.iterator ("mygate", pairs)
+ gates.mygate({x = 55, y = 22})
+
+will print:
+
+ The value of x is 55
+ The value of y is 22
+
+Here "pairs" was used to return the function, state and variable mentioned
+above; but of course you can make you own function:
+
+ gates.mygate = function (w)
+ print(w .. " has " .. #w .. " characters.")
+ end
+ gates.iterator ("mygate",
+ function (s)
+ local t = string.explode(s)
+ local i = 0
+ local function enum ()
+ i = i+1
+ return t[i]
+ end
+ return enum
+ end)
+ gates.mygate("two words")
+
+And the result is:
+
+ two has 3 characters.
+ words has 5 characters.
+
+Here the function registered in |iterator| produces a single function,
+without a state, and goes through all the entries of the table created
+by splitting the original string. In sum, what |iterator| expects is
+what Lua's generic |for| expects, and understanding the latter is
+understanding the former.
+
+An important point to keep in mind when using |iterator| is that there
+is a discrepancy between the arguments passed to the gate and the ones
+it really processes; in the first example, "mygate" is called with a
+table, but it receives two strings. This means that its definition
+doesn't match the way it is called; in that respect, unlike |loop| and
+associates above, you just can't impose an |iterator| on a aready defined
+gate and expect everything to be fine, since its definition probably
+won't match the arguments it will now receive.
+
+Another point is the return values, if any; during the iteration, the
+gate's return values are ignored; then the last ones are passed to the
+following gate, possibly augmented with some of the original arguments
+if |autoreturn| is "true". Note that the original arguments here are
+those passed to the gate before the iteration states. This holds if
+|autoreturn| is a function too:
+
+ gates.mygate = function (what, ever)
+ -- Whatever.
+ end
+ gates.iterator ("mygate", pairs)
+ gates.autoreturn ("mygate",
+ function (t) return t end)
+ gates.mygate (mytable)
+
+Here "mygate" will loop on the entries in "mytable" (thanks to "pairs"),
+and once the iterations are over, "mytable" is returned.
+
+Of course, |iterator| can be used with l-gates too; that works the
+same: whatever the iterator returns is simply passed to the subgates.
+Finally, if a gate has either |loop| or |loopuntil|, |iterator| is
+ignored.
+
+
+
+
+ The shorthand notation :LuaShorthand_tag
+ ~~~~~~~~~~~~~~~~~~~~~~
+
+Gates can be created and manipulated by actions, as we've done up to
+now, but they can also be declared much faster. First, |def| and |list|
+take tables as their arguments; that is for a good reason: entries
+indexed with certain keys are equivalent to actions. The keys are
+|autoreturn|, |status|, |conditional|, |loop|, |loopuntil| and |iterator|
+and setting them when declaring a gate is like globally setting the
+associated action (except there is a single action for |status|, which
+takes a string as its value: "open", "ajar", "skip" or "close"). Thus
+the following defines an m-gate with global status "ajar" and a |loop|:
+
+ gates.def {"mygate",
+ status = "ajar",
+ loop = function (n) return n < 5 end,
+ function (n)
+ print(n)
+ return n + 1
+ end}
+
+Note that the entries can be given in any order as long as the gate's
+name is at index 1 and its definition at index 2.
+
+L-gates have another property: as said above, the entry at index 1
+should be the gate's name; but you can put tables representing gates
+at index 2, 3, etc., and they represent the l-gate's subgates. Those
+tables are the same as the ones passed to |def| and |list|; the only
+difference is that setting of |autoreturn|, |status|, etc., is local
+to the l-gate where they are added. The following code creates l-gate
+"mylist" with subgates "mygate" and "myothergate", the former subject
+to a local loop:
+
+ gates.list {"mylist",
+ {"mygate", loop = function (n) return n < 5 end,
+ function (n)
+ print (n)
+ return n + 1
+ end},
+ {"myothergate",
+ function (n)
+ print("We're done!")
+ end}}
+
+Since the subtables are the same as the tables passed to |def| and
+|list|, it means that an l-gate thus declared can host subgates too:
+
+ gates.list {"mylist",
+ {"mysublist",
+ {"mygate", function () ... end},
+ {"myothergate", function () ... end}},
+ {"anothergate", function () ... end}}
+
+If you want to add an already existing gate, you can do so either by
+using a simple string instead of a table, or (if you want to set |status|
+and associates) a table with the name at index 1 and nothing at higher
+indices:
+
+ gates.list {"mylist",
+ "AnExistingSubgate",
+ {"AnExistingSubgateWithOption", status = "ajar"}}
+
+Note however that the second version is similar in form to an l-gate
+defined without subgates; this means that you can't redefine an l-gate
+thus, but the situations where you would like to do so (redefining an
+existing l-gate, and redefining it without subgates, and in shorthand
+notation) aren't many. In that case you should use |list| and |add|
+instead. (On the other hand, if you do specify subgates, redefinition
+will happen with an l-gate with that name already exists; in other
+words, it won't be interpreted as inserting an existing l-gate and add
+subgates to it.)
+
+
+
+ Gate families :LuaFamilies_tag
+ ~~~~~~~~~~~~~
+
+The |new| action takes a string (the family name) as its sole argument
+an return a calling table:
+
+ MyGates = gates.new ("MyFamily")
+
+"MyGates" can now be used like "gates" (to which is associated the
+"gates" family), except "MyFamily" will be used as the family name when
+necessary.
+
+A table's family is stored in the |family| entry; note that it is not
+an action, hence not a function, but a string:
+
+ print(MyGates.family)
+
+
+
+
+ If you get lost :LuaLost_tag
+ ~~~~~~~~~~~~~~~
+
+Both |type| and |status| return a number: |type| returns 0 if there is
+no gate with that name, 1 if it is an m-gate and 2 for an l-gate;
+|status| returns 0 for a non-existing gate, and 1 to 4 for "open",
+"ajar", "skip" and "close" respectively; |status| can also be used
+with one or two arguments, indicating global or local status
+respectively:
+
+ gates.status ("mygate")
+ gates.status ("mygate", "mylist")
+
+The |subgates| action passes the names of all the subgates in a given
+l-gate to a function. For instance, the following prints all
+"mylist"'s subgates and their types:
+
+ gates.subgates("mylist",
+ function (g)
+ local t
+ if gates.type(g) == 1 then
+ t = "(m-gate)"
+ else
+ t = "(l-gate)"
+ end
+ print (g, t)
+ end)
+
+The |show| action can be used to display a gate's construction and
+conditions. It is displayed as the shorthand notation. The |trace|
+action takes a number and works as follows: if the number is 0, gates
+of the associated families aren't traced; if it is 1, it is mentionned
+if they are called (in an l-gate) and executed or not, and why; with
+2, it works like 1, except the arguments passed to the gates are shown
+too.
+
+
+
+
+
+
+
+
+Reference manual for Lua :LuaReference_tag
+========================
+
+There are some differences between gates in TeX and gates in Lua, owing to the
+differences in syntax between the two languages. That said, the same
+operations can be found in both interfaces.
+
+In what follows, <gate list> denotes either a table with gate names at
+successive indices (e.g. "{'mygate', 'myothergate'}") or a single string
+denoting a single gate.; <gate spec> denotes either a <gate list> or a
+relative position of the form "before <gate>" or "after <gate>" (the
+latter case only if an l-gate is also specified, obviously).
+
+> add (<gate list>, <l-gate>[, <position>])
+ Adds the gates in <gate list> to <l-gate>. The optional <position>
+ should be one of the following: "first", meaning the gates will be
+ added at the beginning of the l-gate; "last", meaning they will be
+ added at the end (so this is similar to no <position>); "before <name>",
+ and the addition will occur before gate <name> in the l-gate (it
+ should of course exist); "after <name>", and the addition will occur
+ after gate <name>. Note that <name> can be "first" or "last", denoting
+ the first and last gates in <l-gate> ("before first" and "after last"
+ are obviously synonymous with "first" and "last").
+
+> ajar (<gate spec>[, <l-gate>])
+ Without <l-gate>, sets the global status for the gates in <gate spec> to
+ "ajar". With <l-gate>, sets the local status in <l-gate> to "ajar" for the
+ gates in <gate spec>.
+
+> autoreturn (<gate spec>[, <l-gate>], <boolean or function>)
+ Without <l-gate>, sets the global |autoreturn| for the gates in
+ <gate spec>; with <l-gate>, the local |autoreturn| is done. When a
+ gate's |autoreturn| is set to "true", arguments will be restored if
+ it returns less than what it was passed; if |autoreturn| is a
+ function, it is passed the original arguments passed to the gates
+ and what it returns will be the ultimate return values of the gate.
+ In the latter case, the gate's conditions are ignored, i.e. the
+ arguments passed to |autoreturn| are the ones fed to the gate before
+ it loops or iterates (if it does that).
+
+> close (<gate spec>[, <l-gate>])
+ Without <l-gate>, sets the global status for the gates in <gate spec> to
+ "close". With <l-gate>, sets the local status in <l-gate> to "close" for the
+ gates in <gate spec>.
+
+> conditional (<gate spec>[, <l-gate>], <function>)
+ Without <l-gate>, sets the global conditional for the gates in
+ <gate spec> to <function>. With <l-gate>, sets the local conditional
+ in <l-gate> to <function> for the gates in <gate list>. That the
+ conditional is a function means that the gate(s) will be executed
+ only if <function> returns anything but "nil".
+
+> copy (<gate1>, <gate2>)
+ Defines <gate1> as <gate2> (either an m- or l-gate). The current global
+ status is also copied. If <gate2> is an l-gate, its gate list is also
+ copied, along with the current status of the gates it contains. On the
+ other hand, if <gate2> occurs in some l-gate(s), this information isn't
+ copied.
+
+> def (<table>)
+ Defines an m-gate whose name is the entry at index 1 in <table>, and
+ the defintion the function at index 2; |autoreturn|, |status|,
+ |conditional|, |loop| and |loopuntil| can also be used as key to
+ globally specify those settings.
+
+ Assigning to an entry in the general "gates" table is a shorthand for
+ |def|; in other words, the following two lines are synonymous, provided
+ there isn't a gate action called "foo".
+
+ gates.def {"foo", function (...) ... end}
+ gates.foo = function (...) ... end
+
+ In the second case, if what is assigned isn't a function, then a new
+ entry is simply added to the "gates" table, as if it were a simple
+ table, unless the index is an existing action or gate (in which case
+ an error is raised). Note that this entry will then be unavailable to
+ host a gate if redefined.
+
+> execute (<gate>[, ...])
+ Calls <gate> with the other arguments. There exists two shorthands:
+ "gates.<gate>(...)", provided <gate> doesn't clash with an action's
+ name, and "gates.execute.<gate>(...)". Those shorthands are also the
+ only way to retrieve the gate itself instead of executing it.
+
+> family
+ The family associated with a table created with |new|. This is a
+ string, not a function.
+
+> iterator (<gate spec>[, <l-gate>], <function>)
+ Without <l-gate>, sets the global iterator for the gates in <gate spec>
+ to <function>. With <l-gate>, sets the local iterator in <l-gate> to
+ <function> for the gates in <gate list>. The <function> is passed the
+ gates' original arguments and should return a function, plus possibly
+ a state and also a variable; then the function will be called repeatedly
+ with the state and variable and the gates will be called on what the
+ function returns until it returns "nil" as the first argument. What
+ the gates return is ignored until the last iteration, in which case
+ it is passed to the next gate (unless |autoreturn| is set). To delete
+ a gate's iterator, use the same action with "nil" as <function> (but
+ that's generally not a good idea, since gates with iterators are
+ tailored to the arguments the iterator returns, not to the arguments
+ they are called with).
+
+> list (<table>)
+ Declares an l-gate whose name is the entry at index 1 in <table>.
+ Additional entries can be specified as with |def|. Tables at indices
+ 2, 3, etc., are subgates created and added at once to <table>, with
+ |status| and associates indicating local (not global) settings.
+ Existing gates can also be added without being redefined, by giving
+ their names (a simple string) instead of a full table, or a table
+ with nothing at indices 2 and higher.
+
+> loop (<gate spec>[, <l-gate>], <function>)
+ Without <l-gate>, sets the global while-loop for the gates in <gate spec>
+ to <function>. With <l-gate>, sets the local while-loop in <l-gate>
+ to <function> for the gates in <gate list>. The gates will be executed
+ again as long as <function> evaluates to true. To delete a gate's
+ while-loop, use the same action with "nil" as <function>.
+
+> loopuntil (<gate spec>[, <l-gate>], <function>)
+ Without <l-gate>, sets the global until-loop for the gates in <gate spec>
+ to <function>. With <l-gate>, sets the local until-loop in <l-gate>
+ to <function> for the gates in <gate list>. The gates will be executed
+ again as long as <function> doesn't evaluate to true. To delete a
+ gate's until-loop, use the same action with "nil" as <function>.
+
+> open (<gate spec>[, <l-gate>])
+ Without <l-gate>, sets the global status for the gates in <gate spec> to
+ "open". With <l-gate>, sets the local status in <l-gate> to "open" for the
+ gates in <gate spec>.
+
+> remove (<gate list>, <l-gate>)
+ Removes the gates in <gate list> from <l-gate>.
+
+> show (<gate>)
+ Writes to the terminal (and log file, if in LuaTeX) <gate>'s type,
+ its number of arguments, global status, conditional, loops (if
+ specified), "autoreturn" if set to true, and recursively its subgates
+ if <gate> is an l-gate (showing the local settings).
+
+> skip (<gate spec>[, <l-gate>])
+ Without <l-gate>, sets the global status for the gates in <gate spec> to
+ "skip". With <l-gate>, sets the local status in <l-gate> to "skip" for the
+ gates in <gate spec>.
+
+> status (<gate>[, <l-gate])
+ Without <l-gate>, returns the global status of <gate>; with <l-gate>,
+ the local status is returned: 1 if the gate is open, 2 if it is ajar,
+ 3 if it is to be skipped, and 4 if it is closed; if there <gate>
+ doesn't exist, of doesn't exist in <l-gate>, 0 is returned.
+
+> subgates (<l-gate>, <function>)
+ Executes <function> with each gate (represented by its name as a
+ string) in <l-gate>.
+
+> trace (<number>)
+ If <number> is 0, gate operations aren't reported; if 1, encountered
+ gate are reported, along with their status and conditional when
+ necessary; if 2, arguments passed to gates that are executed are also
+ displayed. Tracing affects only gates of the family associated with
+ the calling command.
+
+> type (<name>)
+ Returns the type of <name>: 0 if it isn't a gate, 1 if it is an m-gate, 2 if
+ it is an l-gate.
+
+
+
+
+
diff --git a/macros/generic/gates/gates.lua b/macros/generic/gates/gates.lua
new file mode 100644
index 0000000000..826e1a13f3
--- /dev/null
+++ b/macros/generic/gates/gates.lua
@@ -0,0 +1,738 @@
+-- This is the Gates package, Lua version.
+-- Relevant information can be found in gates-doc.pdf
+-- (or gates-doc.txt in a text editor).
+--
+-- Author: Paul Isambert.
+-- E-mail: zappathustra AT free DOT fr
+-- Comments and suggestions are welcome.
+-- Date: May 2012.
+
+if gates then
+ return
+end
+
+local _insert, _remove = table.insert, table.remove
+local _gsub, _match, _format = string.gsub, string.match, string.format
+local _write_nl, print_error
+if texio then
+ _write_nl, print_error = texio.write_nl, tex.error
+else
+ function _write_nl (s)
+ print("\n" .. s)
+ end
+ print_error = error
+end
+local unpack, maxn = table.unpack or unpack
+if lua.version == "Lua 5.1" then
+ maxn = table.maxn
+else
+ local pairs, type = pairs, type
+ function maxn (t)
+ local max = 0
+ for i in pairs(t) do
+ if type(i) == "number" then
+ max = i > max and i or max
+ end
+ end
+ return max
+ end
+end
+local function unpackargs (t)
+ return unpack(t, 1, maxn(t))
+end
+
+local function _copy (tb)
+ local t = {}
+ for a, b in pairs (tb) do
+ if type(b) == "table" then
+ b = _copy(b)
+ end
+ t[a] = b
+ end
+ return t
+end
+
+-- Errors.
+local function _error (...)
+ print_error("Lua-Gates error: " .. _format(...))
+end
+local function _error_nogate (g)
+ _error("`%s' isn't a gate", g)
+end
+local function _error_nogatelist (g)
+ _error("`%s' isn't a gate list", g)
+end
+local function _error_nogatein (g, l)
+ _error("No gate `%s' in list `%s'", g, l)
+end
+
+local function _check_family(fam, name)
+ return _match(name, ":") and name or fam .. ":" .. name
+end
+
+-- Tracing and showing.
+local function _write (...)
+ _write_nl(_format(...))
+end
+local _tab, _white = "", ""
+local function _addtab ()
+ _tab = ". " .. _tab
+ _white = " " .. _white
+end
+local function _untab ()
+ _tab = _gsub(_tab, ". ", "", 1)
+ _white = _gsub(_white, " ", "", 1)
+end
+local _trace_values = {}
+local function trace (fam, n)
+ _trace_values[fam] = n
+end
+local function _trace_value (name)
+ return _trace_values[_match(name, "(.-):") or name] or 0
+end
+local function _report (fam, s, ...)
+ if _trace_value(fam) > 0 then
+ if _white == "" then
+ _write(" ")
+ end
+ _write(_white .. s, ...)
+ end
+end
+local function _reporttab (fam, s, ...)
+ if _trace_value(fam) > 0 then
+ _write(_tab .. s, ...)
+ end
+end
+
+local _rawgate
+local function _getinfo (g)
+ local s = g.status == 1 and "open"
+ or g.status == 2 and "ajar"
+ or g.status == 3 and "skip"
+ or g.status == 4 and "close"
+ local c = tostring(g.conditional)
+ local l = g.loop and tostring(g.loop)
+ local u = g.loopuntil and tostring(g.loopuntil)
+ local i = g.iterator and tostring(g.iterator)
+ local a
+ if type(g.autoreturn) == "function" then
+ a = " (autoreturn: " .. tostring (g.autoreturn) .. ")"
+ elseif g.autoreturn then
+ a = " (autoreturn)"
+ else
+ a = ""
+ end
+ return s, c, l, u, i, a
+end
+
+local shown
+local function _show (gate, tab)
+ local g = _rawgate(gate.name)
+ local s, c, l, u, i, a = _getinfo(gate)
+ local info = _format(tab .. "%s (%s-gate) (status: %s) (conditional: %s)%s",
+ gate.name, g.list and "l" or "m", s, c, a)
+ if l then
+ info = _format(info .. " (loop: %s)", l)
+ end
+ if u then
+ info = _format(info .. " (loopuntil: %s)", u)
+ end
+ if i then
+ info = _format(info .. " (iterator: %s)", i)
+ end
+ _write(info)
+ if g.list then
+ if shown[g.name] then
+ texio.write(" [subgates already shown]")
+ else
+ shown[g.name] = true
+ for _, G in ipairs(g.list) do
+ _show(G, tab .. ". ")
+ end
+ end
+ end
+end
+
+local function show (fam, name)
+ shown = {}
+ name = _check_family(fam, name)
+ local g = _rawgate(name)
+ if g then
+ _show(g, "")
+ else
+ _error_nogate(name)
+ end
+end
+
+local _open = 1
+local _ajar = 2
+local _skip = 3
+local _close = 4
+local _statuses = {
+ open = _open,
+ ajar = _ajar,
+ skip = _skip,
+ close = _close
+ }
+
+-- Some functions can take one argument or
+-- multiple arguments in a table.
+local function _totable (x)
+ return type(x) == "table" and x or {x}
+end
+
+local _default = function (...) return ... end
+
+local execute = {[0] = {}}
+
+function _rawgate (name) -- Localized above.
+ return execute[0][name]
+end
+
+local function _getmax (tb)
+ local max = 0
+ for n in pairs (tb) do
+ max = n > max and n or max
+ end
+ return max
+end
+local function _restoreargs (arg, orarg, autoreturn)
+ -- autoreturn may be a function
+ if autoreturn == true then
+ local argmax, orargmax = _getmax(arg), _getmax(orarg)
+ for i = argmax + 1, orargmax do
+ arg[i] = orarg[i]
+ end
+ end
+ return arg
+end
+local function _processfunction (fct, autoreturn, ...)
+ if type(autoreturn) == "function" then
+ return {autoreturn(...)}
+ elseif autoreturn then
+ local newarg = {fct(...)}
+ local argmax, newargmax = _getmax(arg), _getmax(newarg)
+ for i = newargmax + 1, argmax do
+ newarg[i] = arg[i]
+ end
+ return newarg
+ else
+ return {fct(...)}
+ end
+end
+
+local function _execute (f, sub, ...)
+ local name, list, fct, status, conditional, loop, loopuntil, iterator, autoreturn =
+ f.name, f.list, sub and execute[f.name] or f.fct, f.status, f.conditional, f.loop, f.loopuntil, f.iterator, f.autoreturn
+ local action, report, t
+ if sub then
+ action, report, t = "Calling", _reporttab, "subgate " .. name
+ else
+ action, report, t = "Executing", _report, (list and "l" or "m") .. "-gate " .. name
+ end
+ local s = ""
+ local orarg, arg = {...}, {...}
+ if status == _open or status == _ajar then
+ if status == _ajar then
+ s = " (ajar -> close)"
+ f.status = _close
+ end
+ if conditional(...) then
+ report(name, "%s %s%s", action, t, s)
+ if not sub and not list and _trace_value(name) > 1 then
+ for i=1, maxn(arg) do
+ _write_nl(_white .. "#" .. i .. "<-" .. tostring(arg[i]))
+ end
+ end
+ if loop then
+ while loop(unpackargs(arg)) do
+ arg = {fct(unpackargs(arg))}
+ orarg = _restoreargs(arg, orarg, autoreturn)
+ end
+ elseif loopuntil then
+ repeat
+ arg = {fct(unpackargs(arg))}
+ orarg = _restoreargs(arg, orarg, autoreturn)
+ until loopuntil(unpackargs(arg))
+ elseif iterator then
+ local iter, state, var = iterator(unpackargs(arg))
+ while iter do
+ local args = {iter(state, var)}
+ if args[1] ~= nil then
+ arg = {fct(unpackargs(args))}
+ orarg = _restoreargs(arg, orarg, autoreturn)
+ var = args[1]
+ else
+ break
+ end
+ end
+ else
+ arg = {fct(unpackargs(arg))}
+ orarg = _restoreargs(arg, orarg, autoreturn)
+ end
+ if type(autoreturn) == "function" then
+ arg = {autoreturn(...)}
+ end
+ else
+ report(name, "Ignoring %s%s (False conditional)", t, s)
+ end
+ else
+ if status == _skip then
+ s = " (skip -> open)"
+ f.status = _open
+ else
+ s = " (close)"
+ end
+ report(name, "Ignoring %s%s%s", t, s, conditional() and "" or " (False conditional)")
+ end
+ return unpackargs(arg)
+end
+
+execute.__index = function (_, name)
+ local f = _rawgate(name)
+ if f then
+ return function (...)
+ return _execute(f, nil, ...)
+ end
+ else
+ _error_nogate(name)
+ return _default
+ end
+end
+
+setmetatable(execute, execute)
+
+local function _evertrue ()
+ return true
+end
+
+local function add (fam, tb, list, where)
+ list = _check_family(fam, list)
+ local gatelist = _rawgate(list)
+ if gatelist and gatelist.list then
+ tb = _totable(tb)
+ local position
+ if where then
+ where = _match(where, "^%s*(.-)%s*$"):gsub("%s+", " ")
+ if where == "first" or where == "before first" then
+ position = 1
+ elseif where == "after first" then
+ position = 2
+ elseif where == "last" or where == "after last" then
+ position = #gatelist.list + 1
+ elseif where == "before last" then
+ position = #gatelist.list
+ else
+ local prep, gate = _match(where, "^(.-)%s+(.-)$")
+ if prep and gate and (prep == "before" or prep == "after") then
+ gate = _check_family(fam, gate)
+ for n, g in ipairs(gatelist.list) do
+ if g.name == gate then
+ position = prep == "before" and n or n+1
+ break
+ end
+ end
+ if not position then
+ _error_nogatein(gate, list)
+ return
+ end
+ else
+ _error("Unknown position: `%s'", where)
+ return
+ end
+ end
+ else
+ position = #gatelist.list + 1
+ end
+ local _tb = {}
+ for _, x in ipairs(tb) do
+ _insert(_tb, 1, x)
+ end
+ tb = _tb
+ for _, name in ipairs(tb) do
+ name = _check_family(fam, name)
+ local macro = _rawgate(name)
+ if macro then
+ _insert(gatelist.list, position, { name = name, status = _open, conditional = _evertrue })
+ else
+ _error_nogate(name)
+ end
+ end
+ else
+ _error_nogatelist(list)
+ end
+end
+
+local function remove (fam, tb, list)
+ list = _check_family(fam, list)
+ local gatelist = _rawgate(list)
+ if gatelist and gatelist.list then
+ tb = _totable(tb)
+ for _, fct in ipairs(tb) do
+ fct = _check_family(fam, fct)
+ local n, found = 1
+ while n <= #gatelist.list do
+ if gatelist.list[n].name == fct then
+ found = true
+ _remove(gatelist.list, n)
+ else
+ n = n + 1
+ end
+ end
+ if not found then
+ _error_nogatein(fct, list)
+ end
+ end
+ else
+ _error_nogatelist(list)
+ end
+end
+
+local function subgates (fam, list, fct)
+ list = _check_family(fam, list)
+ local gatelist = _rawgate(list)
+ if gatelist and gatelist.list then
+ for _, g in ipairs (gatelist.list) do
+ fct(g.name)
+ end
+ else
+ _error_nogatelist(list)
+ end
+end
+
+local function _status (fam, fct, list, key, value)
+ if list then
+ list = _check_family(fam, list)
+ local gatelist = _rawgate(list)
+ if gatelist then
+ if type(fct) == "string" and (_match(fct, "^before ") or _match(fct, "^after ")) then
+ local prep, gate = _match(fct, "^(.-)%s+(.-)$")
+ if prep and gate and (prep == "before" or prep == "after") then
+ local list, position = gatelist.list
+ if gate == "first" then
+ position = 1
+ elseif gate == "last" then
+ position = #list
+ else
+ gate = _check_family(fam, gate)
+ for n, g in ipairs(list) do
+ if g.name == gate then
+ position = n
+ break
+ end
+ end
+ end
+ if position then
+ if prep == "before" then
+ for n, g in ipairs(list) do
+ if n == position then
+ break
+ else
+ g[key] = value
+ end
+ end
+ else
+ for n, g in ipairs(list) do
+ if n > position then
+ g[key] = value
+ end
+ end
+ end
+ else
+ _error_nogatein(gate, list)
+ end
+ else
+ _error("Unknown position `%s'", fct)
+ end
+ else
+ fct = _totable(fct)
+ for _, func in ipairs(fct) do
+ func = _check_family(fam, func)
+ local found
+ for n, tb in ipairs(gatelist.list) do
+ if tb.name == func then
+ found = true
+ gatelist.list[n][key] = value
+ end
+ end
+ if not found then
+ _error_nogatein(func, list)
+ end
+ end
+ end
+ else
+ _error_nogatelist(list)
+ end
+ else
+ fct = _totable(fct)
+ for _, func in ipairs(fct) do
+ func = _check_family(fam, func)
+ local macro = _rawgate(func)
+ if macro then
+ macro[key] = value
+ else
+ _error_nogate(func)
+ end
+ end
+ end
+end
+
+local function open (fam, fct, list)
+ _status(fam, fct, list, "status", _open)
+end
+
+local function ajar (fam, fct, list)
+ _status(fam, fct, list, "status", _ajar)
+end
+
+local function skip (fam, fct, list)
+ _status(fam, fct, list, "status", _skip)
+end
+
+local function close (fam, fct, list)
+ _status(fam, fct, list, "status", _close)
+end
+
+local function conditional (fam, fct, list, cond)
+ if type(list) == "string" then
+ _status(fam, fct, list, "conditional", cond)
+ else
+ _status(fam, fct, nil, "conditional", list)
+ end
+end
+
+local function loop (fam, fct, list, cond)
+ if type(list) == "string" then
+ _status(fam, fct, list, "loop", cond)
+ else
+ _status(fam, fct, nil, "loop", list)
+ end
+end
+
+local function loopuntil (fam, fct, list, cond)
+ if type(list) == "string" then
+ _status(fam, fct, list, "loopuntil", cond)
+ else
+ _status(fam, fct, nil, "loopuntil", list)
+ end
+end
+
+local function iterator (fam, fct, list, cond)
+ if type(list) == "string" then
+ _status(fam, fct, list, "iterator", cond)
+ else
+ _status(fam, fct, nil, "iterator", list)
+ end
+end
+
+local function autoreturn (fam, fct, list, cond)
+ if type(list) == "string" then
+ _status(fam, fct, list, "autoreturn", cond)
+ else
+ _status(fam, fct, nil, "autoreturn", list)
+ end
+end
+
+
+local function _store (tab)
+ local name = tab[1]
+ local fct = tab[2]
+ local tb = {
+ name = name,
+ status = _statuses[tab.status or "open"],
+ conditional = tab.conditional or _evertrue,
+ loop = tab.loop,
+ loopuntil = tab.loopuntil,
+ iterator = tab.iterator,
+ autoreturn = tab.autoreturn}
+ if not fct then
+ tb.list = {}
+ fct = function (...)
+ _addtab()
+ local arg = {...}
+ for n, func in ipairs(tb.list) do
+ arg = {_execute(func, true, unpackargs(arg))}
+ end
+ _untab()
+ return unpackargs(arg)
+ end
+ end
+ tb.fct = fct
+ execute[0][name] = tb
+end
+
+local function def (fam, tab)
+ tab[1] = _check_family(fam, tab[1])
+ _store(tab)
+end
+
+local function list (fam, tab)
+ tab[1] = _check_family(fam, tab[1])
+ local subgates = {}
+ for i = 2, #tab do
+ _insert(subgates, tab[i])
+ tab[i] = nil
+ end
+ _store(tab)
+ for _, g in ipairs(subgates) do
+ g = type(g) == "string" and {g} or g
+ g[1] = _check_family(fam, g[1])
+ if type(g[2]) == "function" then
+ _store({g[1], g[2]})
+ elseif type(g[2]) == "table" or type(g[2]) == "string" then
+ local a = {}
+ for i = 2, #g do
+ _insert(a, g[i])
+ end
+ list(fam, {g[1], unpack(a)})
+ elseif not (_rawgate(g[1])) then
+ _store({g[1]})
+ end
+ add(fam, g[1], tab[1])
+ local s = g.status == "open" and _open
+ or g.status == "ajar" and _ajar
+ or g.status == "skip" and _skip
+ or g.status == "close" and _close
+ or _open
+ _status(fam, g[1], tab[1], "status", s)
+ local c = type(g.conditional) == "function" and g.conditional or _evertrue
+ _status(fam, g[1], tab[1], "conditional", c)
+ local l = type(g.loop) == "function" and g.loop
+ _status(fam, g[1], tab[1], "loop", l)
+ local L = type(g.loopuntil) == "function" and g.loopuntil
+ _status(fam, g[1], tab[1], "loopuntil", L)
+ local I = type(g.iterator) == "function" and g.iterator
+ _status(fam, g[1], tab[1], "iterator", I)
+ _status(fam, g[1], tab[1], "autoreturn", g.autoreturn)
+ end
+end
+
+local function copy (fam, name1, name2)
+ name1, name2 = _check_family(fam, name1), _check_family(fam, name2)
+ local base = _rawgate(name2)
+ if base then
+ if base.list then
+ _store(name1)
+ _rawgate(name1).list = _copy(base.list)
+ else
+ _store(name1, base.fct)
+ end
+ _status(fam, name1, nil, "status", _open) -- Better than to copy the gate's status.
+ _status(fam, name1, nil, "conditional", base.conditional)
+ _status(fam, name1, nil, "loop", base.loop)
+ _status(fam, name1, nil, "loopuntil", base.loopuntil)
+ _status(fam, name1, nil, "iterator", base.iterator)
+ else
+ _error_nogate(name2)
+ end
+end
+
+local function Type (fam, name)
+ name = _check_family(fam, name)
+ local macro = _rawgate(name)
+ if macro then
+ return macro.list and 2 or 1
+ else
+ return 0
+ end
+end
+
+local function status (fam, gate, list)
+ gate = _check_family(fam, gate)
+ list = list and _check_family(fam, list)
+ local fct = _rawgate(gate)
+ list = list and _rawgate(list) and _rawgate(list).list
+ if fct then
+ if list then
+ for _, g in ipairs(list) do
+ if g.name == gate then
+ return g.status
+ end
+ end
+ else
+ return fct.status
+ end
+ else
+ return 0
+ end
+end
+
+local _mt = {
+ trace = trace,
+ show = show,
+ def = def,
+ list = list,
+ copy = copy,
+ add = add,
+ remove = remove,
+ open = open,
+ ajar = ajar,
+ skip = skip,
+ close = close,
+ type = Type,
+ status = status,
+ conditional = conditional,
+ loop = loop,
+ loopuntil = loopuntil,
+ iterator = iterator,
+ autoreturn = autoreturn,
+ subgates = subgates,
+}
+
+local function new (_, fam)
+ local t = {family = fam}
+ setmetatable(t, _mt)
+ return t
+end
+
+_mt.new = new
+
+_mt.__index = function (tb, name)
+ if name == "execute" then
+ return setmetatable({},
+ {__call =
+ function (_, name, ...)
+ name = _check_family(tb.family, name)
+ return execute[name](...)
+ end,
+ __index = function (_, name)
+ name = _check_family(tb.family, name)
+ return execute[name]
+ end})
+ elseif _mt[name] then
+ return function (...) return _mt[name](tb.family, ...) end
+ else
+ name = _check_family(tb.family, name)
+ local macro = _rawgate(name)
+ if macro then
+ return execute[name]
+-- The following was removed because a gate instance can contain other
+-- things than gates; for instance "gates.foo = 5" is valid. But one might
+-- want to know whether an entry exists or not (e.g. "if gates.foo then" or
+-- "if type(gates.foo) ~= 'nil' then"), in which case the next three lines
+-- would produce an error (and return a function).
+-- else
+-- _error("`%s' isn't an action or a gate", name)
+-- return _default
+ end
+ end
+end
+
+_mt.__newindex = function (tb, key, value)
+ if _mt[key] then
+ _error("You can't assign to key `%s', it is an action", key)
+ else
+ if type(value) == "function" then
+ def(tb.family, {key, value})
+ else
+ local name = _check_family(tb.family, key)
+ if _rawgate(name) then
+ _error("You can't assign to key `%s', it is already a gate", key)
+ else
+ rawset(tb, key, value)
+ end
+ end
+ end
+end
+
+gates = new(nil, "gates")
diff --git a/macros/generic/gates/gates.sty b/macros/generic/gates/gates.sty
new file mode 100644
index 0000000000..61d725b0a6
--- /dev/null
+++ b/macros/generic/gates/gates.sty
@@ -0,0 +1,14 @@
+% This is gates.sty, a style file to load
+% the Gates package in LaTeX. Useful information
+% can be found in gates-doc.pdf or gates-doc.txt.
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: May 2012.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gates}[2012/05/26 v.0.2 Modular architecture.]
+\chardef\formatnumber=4
+\input gates.tex
+\endinput
diff --git a/macros/generic/gates/gates.tex b/macros/generic/gates/gates.tex
new file mode 100644
index 0000000000..c535686cdd
--- /dev/null
+++ b/macros/generic/gates/gates.tex
@@ -0,0 +1,925 @@
+% This is the Gates package.
+% Relevant information can be found in gates-doc.pdf
+% (or gates-doc.txt in a text editor).
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: May 2012.
+
+\csname Come on, Gates is already loaded\endcsname
+\expandafter\let\csname Come on, Gates is already loaded\endcsname\endinput
+\input texapi
+\setcatcodes{_@=11}
+
+\def\gates@error{\senderror{Gates}}%
+\def\gates@error_nogate#1{\gates@error{`#1' isn't a gate}}
+\def\gates@error_nogatelist#1{\gates@error{`#1' isn't a gate list}}
+\def\gates@error_nogatein#1#2{\gates@error{No gate `#1' in list `#2'}}
+
+\def\gates@family_update#1{%
+ \def\gates@family_current{#1}%
+ }
+\newstring{:}
+\def\gates@family_check{%
+ \gates@family_pass\unbrace
+ }
+\def\gates@family_pass#1#2{%
+ \passexpanded{\passtrim{#2}{\gates@family_passdo{#1}}}{\gates@family_current}%
+ }
+\def\gates@family_passdo#1#2#3{%
+ \passexpanded{\ifcontains{:}}{#2}
+ {#1{#2}}{#1{#3:#2}}%
+ }
+\def\gates@ifexists#1#2{%
+ \ifcs{gate \gates@family_check{#1}:#2}%
+ }
+
+
+\def\gates@gates#1#2{%
+ \ifstring{#2}[
+ {\gates@family_update{#1}%
+ \gates@gates_macro}
+ {\ifstring{#2}(
+ {\gates@family_update{#1}%
+ \gates@gates_list}
+ {\gates@gates_check{#1}}}#2%
+ }
+\def\gates@gates_macro[#1]{%
+ \passtrim{#1}\gates@action@def
+ }
+\def\gates@gates_list(#1){%
+ \passtrim{#1}\gates@action@list
+ }
+\def\gates@gates_check#1#2 {%
+ \ifelseif{%
+ {\ifcs{gates@action@#2}}
+ {\gates@family_update{#1}\usecs{gates@action@#2}}
+ {\ifcs{gates@action@#2_withfamily}}
+ {\usecs{gates@action@#2_withfamily}{#1}}
+ {\ifcs{gate \gates@family_passdo\unbrace{#2}{#1}:code}}
+ {\gates@family_update{#1}\gates@action@execute{#2}}
+ \iftrue
+ {\gates@error{Action `\gates@family_passdo\unbrace{#2}{#1}' doesn't exist and there is no gate with that name}}}%
+ }
+
+\def\gates{%
+ \gates@gates{gates}%
+ }
+
+\def\gates@action#1{%
+ \long\defcs{gates@action@#1}%
+ }
+\def\gates@action_withfamily#1{%
+ \long\defcs{gates@action@#1_withfamily}%
+ }
+
+\gates@action{new}#1#2{%
+ \def#1{%
+ \gates@gates{#2}%
+ }%
+ }
+
+\gates@action_withfamily{family}#1{#1}
+
+%%%
+%%% The gate stack.
+%%%
+\def\gates@stack{}
+\protected\def\gates@stack_push#1{%
+ \xdef\gates@current_gate{#1}%
+ \xdef\gates@stack{{#1}{\gates@stack}}%
+ }
+\protected\def\gates@stack_pop{%
+ \expandafter\gates@stack_popit\gates@stack\gates@end
+ }
+\def\gates@stack_popit#1#2\gates@end{%
+ \gdef\gates@stack{#2}%
+ \gates@stack_getcurrent#2{}\gates@end
+ }
+\def\gates@stack_getcurrent#1#2\gates@end{%
+ \gdef\gates@current_gate{#1}%
+ }
+
+%%%
+%%% Tracing and showing.
+%%%
+\def\gates@trace_value{0}
+\gates@action{trace}#1{%
+ \defcs{gates@trace_value:\gates@family_current}{#1}%
+ }
+\def\gates@trace_tab{}
+\def\gates@trace_white{}
+\def\gates@trace_addtab{%
+ \edef\gates@trace_tab{\gates@trace_tab. }%
+ \edef\gates@trace_white{\gates@trace_white\unbrace{ } }%
+ }
+\def\gates@trace_untab{%
+ \passexpanded{\removeprefixin{. }}\gates@trace_tab\gates@trace_tab
+ \passexpanded{\passexpanded\removeprefixin{\unbrace{ } }}\gates@trace_white\gates@trace_white
+ }
+\def\gates@trace_write#1#2{%
+ \iffcs{gates@trace_value:\gates@trace_getfamily#1\gates@terminator}
+ {\ifnum\usecs{gates@trace_value:\gates@trace_getfamily#1\gates@terminator}>0
+ \immediate\write16{\gates@trace_white #2}%
+ \fi}}
+\def\gates@trace_writetab#1#2{%
+ \iffcs{gates@trace_value:\gates@trace_getfamily#1\gates@terminator}
+ {\ifnum\usecs{gates@trace_value:\gates@trace_getfamily#1\gates@terminator}>0
+ \immediate\write16{\gates@trace_tab #2}%
+ \fi}}
+\def\gates@trace_getfamily#1:#2\gates@terminator{#1}
+
+\gates@action{show}#1{%
+ \immediate\write16{}%
+ \gates@family_pass\gates@show{#1}%
+ }
+\def\gates@show#1{%
+ \ifcs{gate #1:list}
+ {\gates@show_write{#1 is an l-gate}{}{#1}%
+ \passexpandedcs{\gates@show_loop{#1}{. }}{gate #1:list}}%
+ {\ifcs{gate #1:code}
+ {\gates@show_write{#1 is an m-gate}{}{#1}}{\gates@error_nogate{#1}}}%
+ }
+\newfor\gates@show_loop{2}#3,{%
+ \gates@show_write{#2#3}{#1_subgate_}{#3}%
+ \iffcs{gate #3:list}{\passexpandedcs{\gates@show_loop{#3}{#2. }}{gate #3:list}}%
+ }
+\def\gates@show_write#1#2#3{%
+ \immediate\write16{#1
+ \reverse\iffemptystring{#2}{(\ifcs{gate #3:list}lm-gate) }%
+ [\usecs{gate #3:args}]
+ (status: \ifcase\usecs{gate #2#3:status}
+ \or open\or ajar\or skip\or close\fi)%
+ \gates@show_condition{#2#3}{conditional}%
+ \gates@show_condition{#2#3}{loop}%
+ \gates@show_condition{#2#3}{loopuntil}%
+ }%
+ }
+
+\def\gates@show_condition#1#2{%
+ \iffcs{gate #1:#2}
+ { (#2: \expandafter\expandafter\expandafter\gates@show_conditionstrip
+ \expandafter\meaning\csname gate #1:#2\endcsname)}%
+ }
+\def\gates@show_conditionstrip#1->{}%
+
+
+%%%
+%%% Checking conditions in gate definition.
+%%%
+\long\def\gates@conditions_get#1{%
+ \ifnextnospace?
+ {\gates@conditions_getlaunch{#1}}
+ {#1{{}{}{}{}}}%
+ }
+\newstring{,}
+\long\def\gates@conditions_getlaunch#1?#2{%
+ \ifsuffix,{#2}
+ {\gates@conditions_getloop{#1}{}{}{}{}{#2}}
+ {\gates@conditions_getloop{#1}{}{}{}{}{#2,}}%
+ }
+\newfornoempty\gates@conditions_getloop{5}#6=#7,{%
+ \ifelseif{%
+ {\passtrim{#6}\ifstring{status}} {\passarguments{#1}{\trim{#7}}{#3}{#4}{#5}}
+ {\passtrim{#6}\ifstring{conditional}} {\passarguments{#1}{#2}{#7}{#4}{#5}}
+ {\passtrim{#6}\ifstring{loop}} {\passarguments{#1}{#2}{#3}{#7}{#5}}
+ {\passtrim{#6}\ifstring{loopuntil}} {\passarguments{#1}{#2}{#3}{#4}{#7}}
+ \iftrue {\gates@error{`#6' isn't a condition}}%
+ }
+ }[#1{{#2}{#3}{#4}{#5}}]
+\long\def\gates@conditions_make#1#2#3#4#5{%
+ \gates@list_checkmaster
+ {\gates@action@add{#1}{\gates@list_master}%
+ \reverse\iffemptystring{#2}{\usecs{gates@action@#2}{#1}{\gates@list_master}}%
+ \reverse\iffemptystring{#3}{\gates@action@conditional{#1}{\gates@list_master}{#3}}
+ \reverse\iffemptystring{#4}{\gates@action@loop{#1}{\gates@list_master}{#4}}
+ \reverse\iffemptystring{#5}{\gates@action@loopuntil{#1}{\gates@list_master}{#5}}}
+ {\straightenif{ifnum}{\gates@list_subcount>0 }
+ {\gates@error{Wrong level of embedding for gate `#1'}}%
+ {\reverse\iffemptystring{#2}{\usecs{gates@action@#2!}{#1}}%
+ \reverse\iffemptystring{#3}{\usecs{gates@action@conditional!}{#1}{#3}}
+ \reverse\iffemptystring{#4}{\usecs{gates@action@loop!}{#1}{#4}}%
+ \reverse\iffemptystring{#5}{\usecs{gates@action@loopuntil!}{#1}{#5}}}}%
+ }
+
+%%%
+%%% Defining list-gates.
+%%%
+\newcount\gates@list_subcount
+\def\gates@list_masterlist{}%
+\gates@action{list}#1{%
+ \ifnextnospace[
+ {\gates@family_pass\gates@list_checkarg{#1}}
+ {\gates@family_pass\gates@list_checkarg{#1}[0]}%
+ }
+
+\def\gates@list_checkarg#1[#2]{%
+ \ifcs{gates@execute_get_#2_args}
+ {\gates@conditions_get{\gates@list_create{#1}{#2}}}
+ {\gates@list_create{#1}{0}{{}{}{}{}}[#2]}%
+ }
+
+\long\def\gates@list_create#1#2#3{%
+ \straightenif{ifnum}{#2<10 }
+ {\xdefcs{gate #1:args}{#2}%
+ \gdefcs{gate #1:status}{\gates@state_open}%
+ \gdefcs{gate #1:conditional}##1##2##3##4##5##6##7##8##9{\iftrue}%
+ \gdefcs{gate #1:list}{}%
+ \long\xdefcs{gate #1:code}##1##2##3##4##5##6##7##8##9{%
+ \ifcase#2
+ \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{}{}{}{}{}{}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{}{}{}{}{}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{}{}{}{}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{}{}{}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{##4}{}{}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{##4}{##5}{}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{##4}{##5}{##6}{}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{}}}{gate #1:list}%
+ \or \noexpand\passexpandedcs{\noexpand\gates@process{#1}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}}{gate #1:list}%
+ \fi}%
+ \gates@conditions_make{#1}#3%
+ \eaddright\gates@list_masterlist{{#1}}%
+ \gates@list_checknext}
+ {\gates@error{Gates can't take more than 9 arguments}}%
+ }
+
+\def\gates@list_checknext{%
+ \gates@list_subcount=1
+ \skipspace{\futurelet\gates@list_nextchar\gates@list_checknextchar}%
+ }
+
+\def\gates@list_checknextchar{%
+ \expandafter\gates@list_checknextcharloop\expandafter{\gates@list_charlist}%
+ }
+
+\def\gates@list_charlist{.}
+\gates@action{subchar}#1{%
+ \ifexpression{%
+ \if\noexpand#1[%
+ | \if\noexpand#1(%
+ | \if\noexpand#1<%
+ | \if\noexpand#1?}
+ {\gates@error{You can't use `#1' as a continuation char}}
+ {\eaddright\gates@list_charlist{\string#1}}%
+ }
+
+\newfor\gates@list_checknextcharloop#1{%
+ \if\noexpand\gates@list_nextchar\noexpand#1%
+ \advance\gates@list_subcount1
+ \afterfi{\breakfor{\gobbleoneand{%
+ \skipspace{\futurelet\gates@list_nextchar\gates@list_checknextchar}}}}%
+ \fi
+ }[\gates@list_getsub]
+
+\def\gates@list_getsub{%
+ \ifnext[
+ {\gates@list_getsubdef}
+ {\ifnext(
+ {\gates@list_getsublist}
+ {\ifnext<
+ {\gates@list_getsubgate}
+ {\gates@list_subcount=0
+ \def\gates@list_masterlist{}}}}%
+ }
+
+\def\gates@list_getsublist(#1){%
+ \gates@action@list{#1}%
+ }
+
+\def\gates@list_getsubdef[#1]{%
+ \gates@def\gdefcs{#1}%
+ }
+
+\def\gates@list_getsubgate<#1>{%
+ \gates@conditions_get{\gates@list_dosubgate{#1}}%
+ }
+
+\def\gates@list_dosubgate#1#2{%
+ \gates@list_subgateloop#2{}{#1,}%
+ }
+
+\newfornoempty\gates@list_subgateloop{5}#6,{%
+ \gates@ifexists{#6}{code}
+ {\gates@family_pass\gates@conditions_make{#6}{#1}{#2}{#3}{#4}%
+ \passarguments{#1}{#2}{#3}{#4}{#6}}
+ {\gates@error_nogate{\gates@family_check{#6}}}%
+ }[\gates@ifexists{#5}{list}
+ {\eaddright\gates@list_masterlist{{\gates@family_check{#5}}}}{}%
+ \gates@list_checknext]
+
+\def\gates@list_checkmaster{%
+ \let\gates@list_master\gates@HopefullyThisRemainsUndefined
+ \passexpanded{\gates@list_getmaster{}{1}}\gates@list_masterlist
+ }
+
+\newfor\gates@list_getmaster{2}#3{%
+ \ifnum\gates@list_subcount=\numexpr#2\relax
+ \def\gates@list_master{#3}%
+ \afterfi{\breakfor{\def\gates@list_masterlist{#1{#3}}\firstoftwo}}%
+ \else
+ \afterfi{\passarguments{#1{#3}}{#2+1}}%
+ \fi
+ }[\def\gates@list_masterlist{#1}\secondoftwo]%
+
+
+%%%
+%%% Defining macro-gates.
+%%%
+\gates@action{def}{\gates@def\gdefcs}
+\gates@action{edef}{\gates@def\xdefcs}
+
+\def\gates@def#1#2{%
+ \ifnextnospace[
+ {\gates@family_pass{\gates@def_getargs{#1}}{#2}}
+ {\gates@family_pass{\gates@def_getargs{#1}}{#2}[0]}%
+ }
+
+\def\gates@def_getargs#1#2[#3]{%
+ \gates@conditions_get{\gates@def_prepare{#1}{#2}{#3}}%
+ }
+
+\long\def\gates@def_prepare#1#2#3#4#5{%
+ \ifelseif{% Can't use \ifcase, because #5 might contain an unbalanced conditional.
+ {\ifnum#3=0 } {\gates@def_do#1{#2}{#3}{}{}{#5}{#4}}
+ {\ifnum#3=1 } {\gates@def_do#1{#2}{#3}{##1}{{##1}}{#5}{#4}}
+ {\ifnum#3=2 } {\gates@def_do#1{#2}{#3}{##1##2}{{##1}{##2}}{#5}{#4}}
+ {\ifnum#3=3 } {\gates@def_do#1{#2}{#3}{##1##2##3}{{##1}{##2}{##3}}{#5}{#4}}
+ {\ifnum#3=4 } {\gates@def_do#1{#2}{#3}{##1##2##3##4}{{##1}{##2}{##3}{##4}}{#5}{#4}}
+ {\ifnum#3=5 } {\gates@def_do#1{#2}{#3}{##1##2##3##4##5}{{##1}{##2}{##3}{##4}{##5}}{#5}{#4}}
+ {\ifnum#3=6 } {\gates@def_do#1{#2}{#3}{##1##2##3##4##5##6}{{##1}{##2}{##3}{##4}{##5}{##6}}{#5}{#4}}
+ {\ifnum#3=7 } {\gates@def_do#1{#2}{#3}{##1##2##3##4##5##6##7}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}{#5}{#4}}
+ {\ifnum#3=8 } {\gates@def_do#1{#2}{#3}{##1##2##3##4##5##6##7##8}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}{#5}{#4}}
+ {\ifnum#3=9 } {\gates@def_do#1{#2}{#3}{##1##2##3##4##5##6##7##8##9}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}{#5}{#4}}
+ {\iftrue} {\gates@error{Wrong number of arguments}}}%
+ }
+
+% #1: \gdef or \xdef
+% #2: gate's name
+% #3: number of arguments
+% #4: parameter text (e.g., ##1, ##1##2, etc.) for internal code
+% #5: replacement text (e.g., {##1}, {##1}{##2}, etc.) for internal code
+% #6: definition of internal code
+% #7: conditions
+\long\def\gates@def_do#1#2#3#4#5#6#7{%
+ \xdefcs{gate #2:args}{#3}%
+ \gdefcs{gate #2:status}{\gates@state_open}%
+ \gdefcs{gate #2:conditional}##1##2##3##4##5##6##7##8##9{\iftrue}%
+ \long#1{gate #2:code}##1##2##3##4##5##6##7##8##9{%
+ \iffcs{gates@trace_value:\gates@trace_getfamily#2\gates@terminator}
+ {\ifnum\usecs{gates@trace_value:\gates@trace_getfamily#2\gates@terminator}=2
+ \gates@trace_args{1}{#2}{#5}%
+ \fi}%
+ \usecs{gate #2:innercode}#5}%
+ \long#1{gate #2:innercode}#4{#6}%
+ \gates@conditions_make{#2}#7%
+ \reverse\iffemptycommand\gates@list_masterlist{\gates@list_checknext}%
+ }
+
+\newfor\gates@trace_args{2}#3{%
+ \gates@trace_write{#2}{\string##\the\numexpr#1<-\unexpanded{#3}}%
+ \passarguments{#1+1}{#2}%
+ }
+
+\gates@action_withfamily{type}#1#2{%
+ \ifcs{gate \gates@family_passdo\unbrace{#2}{#1}:code}
+ {\ifcs{gate \gates@family_passdo\unbrace{#2}{#1}:list}{2}{1}}
+ {0}%
+ }
+
+%%%
+%%% Copying gates.
+%%%
+\gates@action{copy}#1#2{%
+ \gates@family_pass{\gates@family_pass\gates@copy_do{#1}}{#2}%
+ }
+\def\gates@copy_do#1#2{%
+ \gates@ifexists{#2}{code}
+ {\global\letcstocs{gate #1:args}{gate #2:args}%
+ \gdefcs{gate #1:status}{\gates@state_open}% Better than to copy the gate's status.
+ \global\letcstocs{gate #1:conditional}{gate #2:conditional}%
+ \global\letcstocs{gate #1:loop}{gate #2:loop}%
+ \global\letcstocs{gate #1:loopuntil}{gate #2:loopuntil}%
+ \global\letcstocs{gate #1:code}{gate #2:code}
+ \gates@ifexists{#2}{list}
+ {\global\letcstocs{gate #1:list}{gate #2:list}%
+ \passexpandedcs{\gates@let_list{#1}{#2}}{gate #2:list}}
+ {\global\letcstocs{gate #1:internalcode}{gate #2:internalcode}}}%
+ {\gates@error_nogate{#2}}%
+ }
+
+\newfor\gates@let_list{2}#3,{%
+ \global\letcstocs{gate #1_subgate_#3:status}{gate #2_subgate_#3:status}%
+ \global\letcstocs{gate #1_subgate_#3:conditional}{gate #2_subgate_#3:conditional}%
+ \global\letcstocs{gate #1_subgate_#3:loop}{gate #2_subgate_#3:loop}%
+ \global\letcstocs{gate #1_subgate_#3:loopuntil}{gate #2_subgate_#3:loopuntil}%
+ }
+
+%%%
+%%% Executing gates.
+%%%
+\def\gates@ifinlist{%
+ \ifdefined\gates@current_gate
+ \ifcsname gate \gates@current_gate:list\endcsname
+ \expandafter\expandafter\expandafter\firstoftwo
+ \else
+ \expandafter\expandafter\expandafter\secondoftwo
+ \fi
+ \else
+ \expandafter\secondoftwo
+ \fi
+ }
+\gates@action{execute}#1{%
+ \gates@family_pass\gates@execute{#1}%
+ }
+\def\gates@execute#1{%
+ \gates@ifexists{#1}{code}
+ {\gates@ifinlist
+ {\usecs{gates@execute_get_9_args}{#1}}
+ {\usecs{gates@execute_get_\usecs{gate #1:args}_args}{#1}}}
+ {\gates@error_nogate{#1}}%
+ }
+\long\defcs{gates@execute_get_0_args}#1{%
+ \gates@execute_do{#1}{{}{}{}{}{}{}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_1_args}#1#2{%
+ \gates@execute_do{#1}{{#2}{}{}{}{}{}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_2_args}#1#2#3{%
+ \gates@execute_do{#1}{{#2}{#3}{}{}{}{}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_3_args}#1#2#3#4{%
+ \gates@execute_do{#1}{{#2}{#3}{#4}{}{}{}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_4_args}#1#2#3#4#5{%
+ \gates@execute_do{#1}{{#2}{#3}{#4}{#5}{}{}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_5_args}#1#2#3#4#5#6{%
+ \gates@execute_do{#1}{{#2}{#3}{#4}{#5}{#6}{}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_6_args}#1#2#3#4#5#6#7{%
+ \gates@execute_do{#1}{{#2}{#3}{#4}{#5}{#6}{#7}{}{}{}}%
+ }
+\long\defcs{gates@execute_get_7_args}#1#2#3#4#5#6#7#8{%
+ \gates@execute_do{#1}{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{}{}}%
+ }
+\long\defcs{gates@execute_get_8_args}#1#2#3#4#5#6#7#8#9{%
+ \gates@execute_do{#1}{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}{}}%
+ }
+\long\defcs{gates@execute_get_9_args}#1#2#3#4#5#6#7#8#9{%
+ \gates@execute_get_nine_arg{#1}{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}%
+ }
+\long\def\gates@execute_get_nine_arg#1#2#3{%
+ \gates@execute_do{#1}{#2{#3}}%
+ }
+
+\long\def\gates@execute_do#1#2{%
+ \ifcase\usecs{gate #1:status}
+ \or % open
+ \gates@processtrue
+ \def\gates@trace_status{}%
+ \or % ajar
+ \gates@processtrue
+ \gdefcs{gate #1:status}{\gates@state_close}%
+ \def\gates@trace_status{ (ajar -> close)}%
+ \or % skip
+ \gates@processfalse
+ \gdefcs{gate #1:status}{\gates@state_open}%
+ \def\gates@trace_status{ (skip -> open)}%
+ \or % close
+ \gates@processfalse
+ \def\gates@trace_status{ (close)}%
+ \fi
+%
+ \iffemptycommand\gates@trace_tab{\gates@trace_write{#1}{}}%
+%
+ \edef\gates@process_tempconditional{\primunexpanded\expandafter\expandafter\expandafter{\csname gate #1:conditional\endcsname#2}}%
+ \ifexpression{\ifgates@process & \expandafter\ifexpression\expandafter{\gates@process_tempconditional}}
+ {\gates@trace_write{#1}{Executing \ifcs{gate #1:list}{l-}{m-}gate #1\gates@trace_status}%
+ \gates@stack_push{#1}%
+ \gates@execute_launchloop{#1}{#2}}
+ {\gates@trace_write{#1}{Ignoring \ifcs{gate #1:list}{l-}{m-}gate #1\gates@trace_status
+ \expandafter\reverse\expandafter\iffexpression{\gates@process_tempconditional}{ (False conditional)}}%
+ \gates@ifinlist{\gates@execute_backtolist{#2}}{}}%
+ }
+
+\long\def\gates@execute_launchloop#1#2{%
+ \iffcs{gate #1:list}\gates@trace_addtab
+ \ifcs{gate #1:loop}
+ {\gates@execute_loop{#1}{#2}}
+ {\usecs{gate #1:code}#2\gates@execute_stoploop{#1}{#2}}%
+ }
+\long\def\gates@execute_loop#1#2{%
+ \expandafter\expandafter\expandafter\ifexpression
+ \expandafter\expandafter\expandafter{\csname gate #1:loop\endcsname#2}
+ {\usecs{gate #1:code}#2\gates@execute_stoploop{#1}{#2}}%
+ {\gates@execute_end{#2}}%
+ }
+\long\def\gates@execute_loopuntil#1#2{%
+ \expandafter\expandafter\expandafter\ifexpression
+ \expandafter\expandafter\expandafter{\csname gate #1:loopuntil\endcsname#2}
+ {\gates@execute_end{#2}}%
+ {\usecs{gate #1:code}#2\gates@execute_stoploop{#1}{#2}}%
+ }
+\long\def\gates@execute_stoploop#1#2{%
+ \ifcs{gate #1:loop}
+ {\gates@execute_loop{#1}{#2}}
+ {\ifcs{gate #1:loopuntil}
+ {\gates@execute_loopuntil{#1}{#2}}
+ {\gates@execute_end{#2}}}%
+ }
+\long\def\gates@execute_end#1{%
+ \iffcs{gate \gates@current_gate:list}\gates@trace_untab
+ \gates@stack_pop
+ \iffcs{gate \gates@current_gate:list}
+ {\gates@execute_backtolist{#1}}%
+ }
+\long\def\gates@execute_backtolist#1#2#3{%
+ \gates@process_stoploop{#2}{#3}{#1}{#2}{#3}%
+ }
+
+\gates@action{return}{\usecs{gates@action@return\usecs{gate \gates@current_gate:args}}}
+\gates@action{return!}#1{%
+ \gates@process_returncount#1{gates@end}{gates@end}{gates@end}{gates@end}{gates@end}{gates@end}{gates@end}{gates@end}{gates@end}\gates@reallytheend#1%
+ }%
+\long\def\gates@process_returncount#1#2#3#4#5#6#7#8#9{%
+ \gates@process_returngobble{%
+ \ifelseif{%
+ {\ifstring{#1}{gates@end}} {\usecs{gates@action@return0}}
+ {\ifstring{#2}{gates@end}} {\usecs{gates@action@return1}}
+ {\ifstring{#3}{gates@end}} {\usecs{gates@action@return2}}
+ {\ifstring{#4}{gates@end}} {\usecs{gates@action@return3}}
+ {\ifstring{#5}{gates@end}} {\usecs{gates@action@return4}}
+ {\ifstring{#6}{gates@end}} {\usecs{gates@action@return5}}
+ {\ifstring{#7}{gates@end}} {\usecs{gates@action@return6}}
+ {\ifstring{#8}{gates@end}} {\usecs{gates@action@return7}}
+ {\ifstring{#9}{gates@end}} {\usecs{gates@action@return8}}
+ \ifrue {\usecs{gates@action@return9}}}
+ }%
+ }
+\gates@action{return0}{%
+ \gates@return_pass{\unbrace{}}%
+ }
+\gates@action{return1}#1{%
+ \gates@return_pass{\gobbleoneand{{#1}}}%
+ }
+\gates@action{return2}#1#2{%
+ \gates@return_pass{\gobbletwoand{{#1}{#2}}}%
+ }
+\gates@action{return3}#1#2#3{%
+ \gates@return_pass{\gobblethreeand{{#1}{#2}{#3}}}%
+ }
+\gates@action{return4}#1#2#3#4{%
+ \gates@return_pass{\gobblefourand{{#1}{#2}{#3}{#4}}}%
+ }
+\gates@action{return5}#1#2#3#4#5{%
+ \gates@return_pass{\gobblefiveand{{#1}{#2}{#3}{#4}{#5}}}%
+ }
+\gates@action{return6}#1#2#3#4#5#6{%
+ \gates@return_pass{\gobblesixand{{#1}{#2}{#3}{#4}{#5}{#6}}}%
+ }
+\gates@action{return7}#1#2#3#4#5#6#7{%
+ \gates@return_pass{\gobblesevenand{{#1}{#2}{#3}{#4}{#5}{#6}{#7}}}%
+ }
+\gates@action{return8}#1#2#3#4#5#6#7#8{%
+ \gates@return_pass{\gobbleeightand{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+ }
+\gates@action{return9}#1#2#3#4#5#6#7#8#9{%
+ \gates@return_passnine{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}%
+ }
+\long\def\gates@return_pass#1#2\gates@execute_stoploop#3#4{%
+ \passexpanded{\gates@execute_stoploop{#3}}{#1#4}%
+ }
+\long\def\gates@return_passnine#1#2\gates@execute_stoploop#3#4{%
+ \gates@execute_stoploop{#3}{#1}%
+ }
+
+
+%%%
+%%% Processing l-gates.
+%%%
+\newife\ifgates@process
+\newfornoempty\gates@process{2}#3,{%
+ \ifcase\usecs{gate #1_subgate_#3:status}
+ \or % open
+ \gates@processtrue
+ \def\gates@trace_status{}%
+ \or % ajar
+ \gates@processtrue
+ \gdefcs{gate #1_subgate_#3:status}{\gates@state_close}%
+ \def\gates@trace_status{ (ajar -> close)}%
+ \or % skip
+ \gates@processfalse
+ \gdefcs{gate #1_subgate_#3:status}{\gates@state_open}%
+ \def\gates@trace_status{ (skip -> open)}%
+ \or % close
+ \gates@processfalse
+ \def\gates@trace_status{ (close)}%
+ \fi
+ \edef\gates@process_tempconditional{\primunexpanded\expandafter\expandafter\expandafter{\csname gate #1_subgate_#3:conditional\endcsname#2}}%
+ \ifexpression{\ifgates@process & \expandafter\ifexpression\expandafter{\gates@process_tempconditional}}
+ {\gates@trace_writetab{#1}{Calling subgate #3\gates@trace_status}%
+ \gates@process_launchloop{#1}{#3}{#2}{#1}{#3}}%
+ {\gates@trace_writetab{#1}{Ignoring subgate #3\gates@trace_status
+ \expandafter\ifexpression\expandafter{\gates@process_tempconditional}{}{ (False conditional)}}}%
+ }[\usecs{gates@action@return\usecs{gate #1:args}}#2]
+
+\def\gates@process_launchloop#1#2#3{%
+ \ifcs{gate #1_subgate_#2:loop}
+ {\gates@process_loop{#1}{#2}{#3}}
+ {\gates@action@execute{#2}#3}%
+ }
+\def\gates@process_loop#1#2#3{%
+ \expandafter\expandafter\expandafter\ifexpression
+ \expandafter\expandafter\expandafter{\csname gate #1_subgate_#2:loop\endcsname#3}
+ {\gates@action@execute{#2}#3}
+ {\gates@process_nextgate{#3}}%
+ }
+\def\gates@process_loopuntil#1#2#3{%
+ \expandafter\expandafter\expandafter\ifexpression
+ \expandafter\expandafter\expandafter{\csname gate #1_subgate_#2:loopuntil\endcsname#3}
+ {\gates@process_nextgate{#3}}%
+ {\gates@action@execute{#2}#3}
+ }
+\def\gates@process_stoploop#1#2#3{%
+ \ifcs{gate #1_subgate_#2:loop}
+ {\gates@process_loop{#1}{#2}{#3}}
+ {\ifcs{gate #1_subgate_#2:loopuntil}
+ {\gates@process_loopuntil{#1}{#2}{#3}}
+ {\gates@process_nextgate{#3}}}%
+ }
+\long\def\gates@process_nextgate#1#2{%
+ \passarguments{#2}{#1}%
+ }
+
+
+\gates@action{subgates}#1{%
+ \gates@family_pass{\def\gates@subgates_gate}{#1}%
+ \afterassignment\gates@subgates_create
+ \def\gates@subgates_macro##1%
+ }
+
+\def\gates@subgates_create{%
+ \ifcs{gate \gates@subgates_gate:list}
+ {\passexpandedcs{\gates@subgates_process{\gates@subgates_macro}}{gate \gates@subgates_gate:list}}
+ {\gates@error_nogatelist{\gates@subgates_gate}}%
+ }
+
+\newfor\gates@subgates_process{1}#2,{%
+ #1{#2}%
+ }
+
+%%%
+%%% Managing gate lists.
+%%%
+\gates@action{add}#1{%
+ \ifnextnospace[
+ {\gates@add{#1}}
+ {\gates@add{#1}[]}%
+ }
+
+\newstring{before } \newstring{after }
+\def\gates@add#1[#2]#3{%
+ \gates@family_pass{\gates@add_prepare{#1}{#2}}{#3}%
+ }
+\def\gates@add_prepare#1#2#3{%
+ \ifcs{gate #3:list}
+ {\let\gates@add_prefix\gates@somethingtotallyundefined
+ \let\gates@add_suffix\gates@somethingtotallyundefined
+%
+ \ifelseif{%
+ {\ifexpression{ \ifemptystring{#2} | \ifstring{#2}{last} | \ifstring{#2}{after last} }}
+ {\passexpandedcs\gates@add_setends{gate #3:list}{}}
+ {\ifexpression{ \ifstring{#2}{first} | \ifstring{#2}{before first} }}
+ {\passexpandedcs{\gates@add_setends{}}{gate #3:list}}
+ {\ifprefix{before }{#2}}
+ {\removeprefixand{before }{#2}{\passexpandedcs\gates@add_split{gate #3:list}{0}{#3}}}
+ {\ifprefix{after }{#2}}
+ {\removeprefixand{after }{#2}{\passexpandedcs\gates@add_split{gate #3:list}{1}{#3}}}
+ \iftrue
+ {\gates@error{Unknown position: `#2'}}}%
+%
+ \ifdefined\gates@add_prefix
+ \gates@add_do{#3}{#1,}%
+ \xdefcs{gate #3:list}{\gates@add_prefix\gates@add_suffix}%
+ \fi}%
+%
+ {\gates@error_nogatelist{#3}}%
+ }
+
+\def\gates@add_setends#1#2{%
+ \def\gates@add_prefix{#1}%
+ \def\gates@add_suffix{#2}%
+ }
+
+\def\gates@add_split#1#2#3#4{%
+ \ifelseif{%
+ {\ifstring{#4}{first}}% "before first" has been dealt with, so this is "after first".
+ {\splitstringat{,}{#1}\gates@add_setends
+ \addright\gates@add_prefix{,}}
+ {\ifstring{#4}{last}}% Same thing, the other way around: "before last". Harder.
+ {\let\gates@add_prefix\emptycs
+ \def\gates@add_suffix{#1}%
+ \dowhile{\expandafter\gates@add_iftwo\gates@add_suffix,,\gates@end}
+ {\passexpanded{\splitstringat{,}}{\gates@add_suffix}\gates@add_setends
+ \addright\gates@add_prefix{,}}}
+ \iftrue
+ {\gates@family_pass{\gates@add_splitat{#1}{#2}{#3}}{#4}}}%
+ }
+\def\gates@add_splitat#1#2#3#4{%
+ \ifelseif{%
+ {\ifprefix{#4,}{#1}}
+ {\ifcase#2
+ \gates@add_setends{}{#1}%
+ \or
+ \def\gates@add_prefix{#4,}%
+ \removeprefixin{#4,}{#1}\gates@add_suffix
+ \fi}
+ {\ifcontains{,#4,}{#1}}
+ {\splitstringat{,#4,}{#1}\gates@add_setends
+ \ifcase#2
+ \addright\gates@add_prefix{,}%
+ \addleft\gates@add_suffix{#4,}%
+ \or
+ \addright\gates@add_prefix{,#4,}
+ \fi}
+ \iftrue
+ {\gates@error_nogatein{#4}{#3}}}%
+ }
+
+\def\gates@add_iftwo#1,#2,#3\gates@end{%
+ \ifemptystring{#2}\secondoftwo\firstoftwo
+ }
+
+\newfornoempty\gates@add_do{1}#2,{%
+ \gates@ifexists{#2}{code}
+ {\eaddright\gates@add_prefix{\gates@family_check{#2},}%
+ \gdefcs{gate #1_subgate_\gates@family_check{#2}:status}{\gates@state_open}%
+ \gdefcs{gate #1_subgate_\gates@family_check{#2}:conditional}##1##2##3##4##5##6##7##8##9{\iftrue}}
+ {\gates@error_nogate{\gates@temp}}%
+ }
+
+\gates@action{remove}#1#2{%
+ \gates@family_pass{\gates@remove_launch{#1}}{#2}%
+ }
+\def\gates@remove_launch#1#2{%
+ \ifcs{gate #2:list}
+ {\gates@remove{#2}{#1,}}
+ {\gates@error_nogate{#2}}%
+ }
+\newfornoempty\gates@remove{1}#2,{%
+ \gates@family_pass{\gates@remove_do{#1}}{#2}%
+ }
+\def\gates@remove_do#1#2{%
+ \passexpandedcs\gates@remove_check{gate #1:list}{#2}
+ {\global\letcs{gate #1_subgate_#2:status}\gates@thisisabsolutelyundefined
+ \global\letcs{gate #1_subgate_#2:conditional}\gates@thisisabsolutelyundefined
+ \global\letcs{gate #1_subgate_#2:loop}\gates@thisisabsolutelyundefined
+ \global\letcs{gate #1_subgate_#2:loopuntil}\gates@thisisabsolutelyundefined
+ \passexpandedcs{\gates@remove_loop{}{#1}{#2}}{gate #1:list}}
+ {\gates@error_nogatein{#2}{#1}}%
+ }
+\def\gates@remove_check#1#2{%
+ \ifcontains{,#2,}{#1}% The first comma so it doesn't spot ...,xxx#2,...
+ {\firstoftwo}
+ {\ifprefix{#2,}{#1}\firstoftwo\secondoftwo}%
+ }
+\newfor\gates@remove_loop{3}#4,{%
+ \reverse\iffstring{#3}{#4}{\passarguments{#1#4,}{#2}{#3}}%
+ }[\gdefcs{gate #2:list}{#1}]
+
+%%%
+%%% opening, ajaring (it exists!), skipping and closing.
+%%%
+\chardef\gates@state_open = 1
+\chardef\gates@state_ajar = 2
+\chardef\gates@state_skip = 3
+\chardef\gates@state_close = 4
+
+\gates@action_withfamily{status}#1#2#3{%
+ \ifcs{gate \gates@family_passdo\unbrace{#3}{#1}_subgate_\gates@family_passdo\unbrace{#2}{#1}:status}
+ {\passcs\the{gate \gates@family_passdo\unbrace{#3}{#1}_subgate_\gates@family_passdo\unbrace{#2}{#1}:status}}
+ {0}%
+ }
+
+\gates@action_withfamily{status!}#1#2{%
+ \ifcs{gate \gates@family_passdo\unbrace{#2}{#1}:status}
+ {\passcs\the{gate \gates@family_passdo\unbrace{#2}{#1}:status}}
+ {0}%
+ }
+
+\long\def\gates@status_change#1#2{%
+ \gates@family_pass{\gates@status_changedo{#1}}{#2}%
+ }
+\def\gates@status_changedo#1#2#3#4{%
+ \ifcs{gate #2:list}
+ {\ifelseif{%
+ {\ifprefix{before }{#1}} {\passexpandedcs{\removeprefixand{before }{#1}{\gates@family_pass{\gates@switch_b{#3}{#2}}}{#4}}{gate #2:list}}%
+ {\ifprefix{after }{#1}} {\passexpandedcs{\removeprefixand{after }{#1}{\gates@family_pass{\gates@switch_a{#3}{#2}}}{#4}}{gate #2:list}}%
+ \iftrue {\gates@switch{#3}{#2}{#4}{#1,}}}}
+ {\gates@error_nogatelist{#2}}%
+ }
+
+\gates@action{open}#1#2{%
+ \gates@status_change{#1}{#2}{status}{\gates@state_open}%
+ }
+\gates@action{open!}#1{%
+ \gates@switch_x{status}{\gates@state_open}{#1,}%
+ }
+
+\gates@action{ajar}#1#2{%
+ \gates@status_change{#1}{#2}{status}{\gates@state_ajar}%
+ }
+\gates@action{ajar!}#1{%
+ \gates@switch_x{status}{\gates@state_ajar}{#1,}%
+ }
+
+\gates@action{skip}#1#2{%
+ \gates@status_change{#1}{#2}{status}{\gates@state_skip}%
+ }
+\gates@action{skip!}#1{%
+ \gates@switch_x{status}{\gates@state_skip}{#1,}%
+ }
+
+\gates@action{close}#1#2{%
+ \gates@status_change{#1}{#2}{status}{\gates@state_close}%
+ }
+\gates@action{close!}#1{%
+ \gates@switch_x{status}{\gates@state_close}{#1,}%
+ }
+
+\gates@action{conditional}#1#2#3{%
+ \gates@status_change{#1}{#2}{conditional}{#3}%
+ }
+\gates@action{conditional!}#1#2{%
+ \gates@switch_x{conditional}{#2}{#1,}%
+ }
+
+\gates@action{loop}#1#2#3{%
+ \gates@status_change{#1}{#2}{loop}{#3}%
+ }
+\gates@action{loop!}#1#2{%
+ \gates@switch_x{loop}{#2}{#1,}%
+ }
+
+\gates@action{noloop}#1#2{%
+ \gates@status_change{#1}{#2}{noloop}{}%
+ }
+\gates@action{noloop!}#1{%
+ \gates@switch_x{noloop}{}{#1,}%
+ }
+
+\gates@action{loopuntil}#1#2#3{%
+ \gates@status_change{#1}{#2}{loopuntil}{#3}%
+ }
+\gates@action{loopuntil!}#1#2{%
+ \gates@switch_x{loopuntil}{#2}{#1,}%
+ }
+
+\gates@action{noloopuntil}#1#2{%
+ \gates@status_change{#1}{#2}{noloopuntil}%
+ }
+\gates@action{noloopuntil!}#1{%
+ \gates@switch_x{noloopuntil}{}{#1,}%
+ }
+
+\newfornoempty\gates@switch{3}#4,{%
+ \gates@family_pass{\gates@switch_do{#1}{#2}{#3}}{#4}%
+ }
+\long\def\gates@switch_do#1#2#3#4{%
+ \ifcs{gate #2_subgate_#4:status}
+ {\gates@switch_evaluate{#2_subgate_#4}{#1}{#3}}
+ {\gates@error_nogatein{#4}{#2}}%
+ }
+\newfornoempty\gates@switch_b{4}#5,{%
+ \ifstring{#3}{#5}
+ {\breakfor{}}%
+ {\gates@switch_evaluate{#2_subgate_#5}{#1}{#4}}%
+ }
+\newfornoempty\gates@switch_a{4}#5,{%
+ \iffstring{#3}{#5}
+ {\retrieverest{\gates@switch{#1}{#2}{#4}}}%
+ }[\gates@error_nogatein{#3}{#2}]
+\newfornoempty\gates@switch_x{2}#3,{%
+ \ifcs{gate \gates@family_check{#3}:status}
+ {\gates@switch_evaluate{\gates@family_check{#3}}{#1}{#2}}
+ {\gates@error_nogate{\gates@family_check{#3}}}%
+ }
+\long\def\gates@switch_evaluate#1#2#3{%
+ \ifelseif{%
+ {\ifexpression{ \ifstring{#2}{conditional} | \ifstring{#2}{loop} | \ifstring{#2}{loopuntil} }}
+ {\gdefcs{gate #1:#2}##1##2##3##4##5##6##7##8##9{#3}}
+ {\ifstring{#2}{noloop}}
+ {\global\letcs{gate #1:loop}\gates@somethingtotallyundefined}
+ {\ifstring{#2}{noloopuntil}}
+ {\global\letcs{gate #1:loopuntil}\gates@somethingtotallyundefined}
+ \iftrue
+ {\gdefcs{gate #1:#2}{#3}}}
+ }
+
+\restorecatcodes
+\endinput
+% There was a time when writing this code I thought
+% I could keep it below 200 lines. Then 300. Then I stopped
+% counting. I'm cursed by loops.
diff --git a/macros/generic/gates/t-gates.tex b/macros/generic/gates/t-gates.tex
new file mode 100644
index 0000000000..ff2426cd83
--- /dev/null
+++ b/macros/generic/gates/t-gates.tex
@@ -0,0 +1,24 @@
+% This is t-gates.tex, a third-party file to load
+% the Gates package in ConTeXt. Useful information
+% can be found in gates-doc.pdf or gates-doc.txt
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: May 2012.
+%
+%D \module
+%D [ file=t-gates,
+%D version=2012.05.26,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Gates,
+%D author=Paul Isambert,
+%D date=\currentdate,
+%D copyright=Paul Isambert,
+%D email=zappathustra@free.fr,
+%D license=LaTeX Project Public License]
+
+\writestatus{loading}{ConTeXt User Module / gates}
+\chardef\formatnumber=3
+\input gates.tex
+\endinput
diff --git a/macros/generic/gobble/README b/macros/generic/gobble/README
new file mode 100644
index 0000000000..43249a5cb6
--- /dev/null
+++ b/macros/generic/gobble/README
@@ -0,0 +1,19 @@
+LaTeX and generic TeX packages 'gobble' and 'gobble-user'
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Copyright (c) 2012-2019 by Martin Scharrer <martin@scharrer-online.de>
+CTAN: http://www.ctan.org/pkg/gobble
+Code repository: https://bitbucket.org/martin_scharrer/gobble
+
+The LaTeX package 'gobble' includes several gobble macros not
+included in the LaTeX kernel. These macros remove a number of
+arguments after them; a feature regulary used inside other
+macros. This includes gobble macros for optional arguments.
+
+The LaTeX package 'gobble-user' provides these macros to the
+user level, i.e. using names without '@', so that these can be
+used without \makeatletter and \makeatother.
+
+The same macros are provided inside .tex files for use with
+plain-TeX or other TeX formats. However, the gobble macros
+for optional macros require \@ifnextchar to be defined.
+
diff --git a/macros/generic/gobble/gobble.dtx b/macros/generic/gobble/gobble.dtx
new file mode 100644
index 0000000000..8dfc685f21
--- /dev/null
+++ b/macros/generic/gobble/gobble.dtx
@@ -0,0 +1,502 @@
+% \iffalse meta-comment
+%<=*COPYRIGHT>
+%% Copyright (C) 2012-2019 by Martin Scharrer <martin@scharrer-online.de>
+%% ----------------------------------------------------------------------
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Martin Scharrer.
+%%
+%% This work consists of the files gobble.dtx and gobble.ins
+%% and the derived files gobble.sty, gobble-user.sty,
+%% gobble.tex and gobble-user.tex
+%%
+%<=/COPYRIGHT>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{gobble.dtx}[%
+%<=*DATE>
+ 2019/01/04
+%<=/DATE>
+%<=*VERSION>
+ v0.2
+%<=/VERSION>
+ DTX file for the gobble package]
+\documentclass{ydoc}
+\GetFileInfo{gobble.dtx}
+\usepackage{gobble}[\filedate]
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.1}{2012/06/09}{First version.}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \GetFileInfo{gobble.dtx}
+% \author{Martin Scharrer}
+% \email{martin@scharrer-scharrer.de}
+% \ifdefined\repository
+% \repository{https://bitbucket.org/martin_scharrer/gobble}
+% \fi
+%
+% \maketitle
+%
+% \begin{abstract}\noindent
+% The \pkg{gobble} \LaTeX\ package provides more macros to discard (gobble)
+% macro arguments. These macros are by default only for package
+% and class writers, but are exported to the user level by the
+% \pkg{gobble-user} package.
+% The macros are also available as generic packages for other \TeX\ formats.
+% \end{abstract}
+%
+% \section{Macros}
+%
+% \subsection{Macros for Package/Class Writers}
+% The following macros are provided by the generic \file{gobble.tex} and the \LaTeX\ package \pkg{gobble}.
+% Some are already provided by the \LaTeX\ kernel.
+%
+% \DescribeMacro\@gobble
+% \DescribeMacro\@gobbletwo
+% \DescribeMacro\@gobblethree
+% \DescribeMacro\@gobblefour
+% Gobbles one, two, three or four mandatory arguments.
+%
+% \DescribeMacro\@gobbleopt
+% \DescribeMacro\@gobbletwoopt
+% \DescribeMacro\@gobbleallopt
+% Gobbles one, two or all found optional arguments if present.
+%
+% \DescribeMacro\@gobbletwoopttwo
+% Gobbles (up to) two optional arguments if present and then two mandatory arguments.
+%
+% \DescribeMacro\@firstofone
+% Reads one argument and expands to it, i.e.\ removes the braces around it.
+%
+% \DescribeMacro\@firstoftwo
+% Reads two arguments and expands to the first one while discarding the second one.
+%
+% \DescribeMacro\@secondoftwo
+% Reads two arguments and expands to the second one while discarding the first one.
+%
+% \DescribeMacro\@firstofthree
+% \DescribeMacro\@secondofthree
+% \DescribeMacro\@thirdofthree
+% These macros read three arguments and expand to the first, second or third one, respectively, while discarding the other.
+%
+% \DescribeMacro\@gobbletofi{<code>}<discarded code>\AlsoMacro{fi}
+% \DescribeMacro\@gobbletoelse{<code>}<discarded code>\AlsoMacro{else}
+% \DescribeMacro\@gobbletoor{<code>}<discarded code>\AlsoMacro{or}
+% These macros read one argument and then gobble everything to the next \Macro{fi}, \Macro{else} or \Macro{or},
+% respectively. Afterwards they expand to the first argument.
+% This allows to break out of an \Macro{if..} or \Macro{ifcase} branch, which is sometimes required if code should be
+% executed after the conditional.
+%
+% \subsection{User Level Macros}
+% The following macros are provided by the generic \file{gobble-user.tex} and the \LaTeX\ package \pkg{gobble-user}.
+% These also load the \file{gobble.tex} file or package \pkg{gobble} package, respectively.
+%
+% They macros are identical to the corresponding versions with the leading `|@|', but can be used freely in a user
+% document.
+%
+%
+% \DescribeMacro\gobble
+% \DescribeMacro\gobbletwo
+% \DescribeMacro\gobblethree
+% \DescribeMacro\gobblefour
+%
+% \DescribeMacro\gobbleopt
+% \DescribeMacro\gobbletwoopt
+% \DescribeMacro\gobbleallopt
+%
+% \DescribeMacro\gobbletwoopttwo
+%
+% \DescribeMacro\firstofone
+%
+% \DescribeMacro\firstoftwo
+% \DescribeMacro\secondoftwo
+%
+% \DescribeMacro\firstofthree
+% \DescribeMacro\secondofthree
+% \DescribeMacro\thirdofthree
+%
+% \DescribeMacro\gobbletofi
+% \DescribeMacro\gobbletoelse
+% \DescribeMacro\gobbletoor
+%
+%
+% \StopEventually{}
+% \clearpage
+% \section{Implementation}
+%
+% \iffalse
+%<*gobble.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{gobble}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ Provides more gobble macros]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\input{gobble}
+% \end{macrocode}
+
+% \iffalse
+%</gobble.sty>
+% \fi
+%
+% \iffalse
+%<*gobble-user.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{gobble-user}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ Provides user level macros]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{gobble}
+\input{gobble-user}
+% \end{macrocode}
+
+% \iffalse
+%</gobble-user.sty>
+% \fi
+%
+% \iffalse
+%<*gobble.tex>
+% \fi
+%
+% \begin{macrocode}
+\expandafter\ifx\csname gobble.tex loaded\endcsname\relax
+ \expandafter\def\csname gobble.tex loaded\endcsname{1}%
+\else
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\gobbletex@catcode}
+% \begin{macrocode}
+\expandafter\edef\csname gobbletex@catcode\endcsname{%
+ \catcode`\noexpand\@=\the\catcode`\@%
+}%
+\catcode`\@=11
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@gobble}
+% \begin{macro}{\@gobbletwo}
+% \begin{macro}{\@gobblethree}
+% \begin{macro}{\@gobblefour}
+% \begin{macrocode}
+\long\def\@gobble#1{}%
+\long\def\@gobbletwo#1#2{}%
+\long\def\@gobblethree#1#2#3{}%
+\long\def\@gobblefour#1#2#3#4{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@gobbleopt}
+% \begin{macrocode}
+\long\def\@gobbleopt{%
+ \@ifnextchar[%
+ {\@gobbleopt@}%
+ {}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@gobbleopt@}
+% \begin{macrocode}
+\def\@gobbleopt@[#1]{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@gobbletwoopt}
+% \begin{macrocode}
+\long\def\@gobbletwoopt{%
+ \@ifnextchar[%
+ {\@gobbletwoopt@}%
+ {}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@gobbletwoopt@}
+% \begin{macrocode}
+\def\@gobbletwoopt@[#1]{\@gobbleopt}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@gobbleallopt}
+% \begin{macrocode}
+\long\def\@gobbleallopt{%
+ \@ifnextchar[%
+ {\@gobbleallopt@}%
+ {}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@gobbleallopt@}
+% \begin{macrocode}
+\long\def\@gobbleallopt@[#1]{%
+ \@ifnextchar[%
+ {\@gobbleallopt@}%
+ {}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@gobbletwoopttwo}
+% \begin{macrocode}
+\long\def\@gobbletwoopttwo{%
+ \@ifnextchar[%
+ {\@gobbletwoopttwo@}%
+ {\@gobbletwo}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@gobbletwoopttwo@}
+% \begin{macrocode}
+\long\def\@gobbletwoopttwo@[#1]{%
+ \@ifnextchar[%
+ {\@gobbletwoopttwo@@}%
+ {\@gobbletwo}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@gobbletwoopttwo@@}
+% \begin{macrocode}
+\long\def\@gobbletwoopttwo@@[#1]{%
+ \@gobbletwo
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@firstofone}
+% \begin{macrocode}
+\long\def\@firstofone#1{#1}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@firstoftwo}
+% \begin{macro}{\@secondoftwo}
+% \begin{macrocode}
+\long\def\@firstoftwo#1#2{#1}%
+\long\def\@secondoftwo#1#2{#2}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@firstofthree}
+% \begin{macro}{\@secondofthree}
+% \begin{macro}{\@thirdofthree}
+% \begin{macrocode}
+\long\def\@firstofthree#1#2#3{#1}%
+\long\def\@secondofthree#1#2#3{#2}%
+\long\def\@thirdofthree#1#2#3{#3}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@gobbletofi}
+% \begin{macro}{\@gobbletoelse}
+% \begin{macro}{\@gobbletoor}
+% \begin{macrocode}
+\long\def\@gobbletofi#1#2\fi{\fi#1}%
+\long\def\@gobbletoelse#1#2\else{\else#1}%
+\long\def\@gobbletoor#1#2\or{\or#1}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\gobbletex@catcode
+% \end{macrocode}
+%
+% \iffalse
+%</gobble.tex>
+% \fi
+%
+% \iffalse
+%<*gobble-user.tex>
+% \fi
+% \begin{macrocode}
+\expandafter\ifx\csname gobble-user.tex loaded\endcsname\relax
+ \expandafter\def\csname gobble-user.tex loaded\endcsname{1}%
+\else
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+\input{gobble}
+% \end{macrocode}
+%
+% \begin{macro}{\gobbletex@catcode}
+% \begin{macrocode}
+\expandafter\edef\csname gobbletex@catcode\endcsname{%
+ \catcode`\noexpand\@=\the\catcode`\@%
+}%
+\catcode`\@=11
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\gobble}
+% \begin{macro}{\gobbletwo}
+% \begin{macro}{\gobblethree}
+% \begin{macro}{\gobblefour}
+% \begin{macrocode}
+\let\gobble\@gobble
+\let\gobbletwo\@gobbletwo
+\let\gobblethree\@gobblethree
+\let\gobblefour\@gobblefour
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\gobbleopt}
+% \begin{macrocode}
+\let\gobbleopt\@gobbleopt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gobbletwoopt}
+% \begin{macrocode}
+\let\gobbletwoopt\@gobbletwoopt
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\gobbleallopt}
+% \begin{macrocode}
+\let\gobbleallopt\@gobbleallopt
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\gobbletwoopttwo}
+% \begin{macrocode}
+\let\gobbletwoopttwo\@gobbletwoopttwo
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\firstofone}
+% \begin{macrocode}
+\let\firstofone\@firstofone
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\firstoftwo}
+% \begin{macro}{\secondoftwo}
+% \begin{macrocode}
+\let\firstoftwo\@firstoftwo
+\let\secondoftwo\@secondoftwo
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\firstofthree}
+% \begin{macro}{\secondofthree}
+% \begin{macro}{\thirdofthree}
+% \begin{macrocode}
+\let\firstofthree\@firstofthree
+\let\secondofthree\@secondofthree
+\let\thirdofthree\@thirdofthree
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\gobbletofi}
+% \begin{macro}{\gobbletoelse}
+% \begin{macro}{\gobbletoor}
+% \begin{macrocode}
+\let\gobbletofi\@gobbletofi
+\let\gobbletoelse\@gobbletoelse
+\let\gobbletoor\@gobbletoor
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\gobbletex@catcode
+% \end{macrocode}
+%
+% \iffalse
+%</gobble-user.tex>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/macros/generic/gobble/gobble.ins b/macros/generic/gobble/gobble.ins
new file mode 100644
index 0000000000..b0643029ef
--- /dev/null
+++ b/macros/generic/gobble/gobble.ins
@@ -0,0 +1,13 @@
+\input ydocstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\generate{%
+ \file{gobble.sty}{\nopreamble\from{gobble.dtx}{gobble.sty}}%
+ \file{gobble.tex}{\nopreamble\from{gobble.dtx}{gobble.tex}}%
+ \file{gobble-user.sty}{\nopreamble\from{gobble.dtx}{gobble-user.sty}}%
+ \file{gobble-user.tex}{\nopreamble\from{gobble.dtx}{gobble-user.tex}}%
+}
+\endbatchfile
+
+%% vim: ft=tex
diff --git a/macros/generic/gobble/gobble.pdf b/macros/generic/gobble/gobble.pdf
new file mode 100644
index 0000000000..d382c6f6a0
--- /dev/null
+++ b/macros/generic/gobble/gobble.pdf
Binary files differ
diff --git a/macros/generic/gtl/README.md b/macros/generic/gtl/README.md
new file mode 100644
index 0000000000..6a2b00189d
--- /dev/null
+++ b/macros/generic/gtl/README.md
@@ -0,0 +1,17 @@
+Manipulate unbalanced lists of tokens
+====================================================
+* E-mail: blflatex+gtl@gmail.com
+* Released under the LaTeX Project Public License v1.3c or later
+ See http://www.latex-project.org/lppl.txt
+
+The `gtl` TeX/LaTeX package provides tools to manipulate lists of
+tokens which may be unbalanced.
+
+This package requires up-to-date versions of the `l3kernel`,
+`l3packages` and `l3experimental` bundles.
+
+The package is extracted by running `pdflatex gtl.ins`.
+For documentation, run `pdflatex gtl.dtx` twice.
+
+This is work in progress, all suggestions/comments/bug reports
+are welcome! See https://github.com/blefloch/latex-gtl
diff --git a/macros/generic/gtl/gtl.dtx b/macros/generic/gtl/gtl.dtx
new file mode 100644
index 0000000000..2f42e6b535
--- /dev/null
+++ b/macros/generic/gtl/gtl.dtx
@@ -0,0 +1,1910 @@
+% \iffalse
+%% File: gtl.dtx Copyright (C) 2013,2015,2017,2018 Bruno Le Floch
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work has the LPPL maintenance status 'maintained'
+%% and the current maintainer is Bruno Le Floch.
+%%
+%% This work consists of the files gtl.dtx and gtl.ins and
+%% derived file gtl.sty.
+%% -----------------------------------------------------------------------
+%
+%<*driver>
+%\fi
+%\iffalse
+\documentclass[full]{l3doc}
+\usepackage{gtl}
+\begin{document}
+ \DocInput{gtl.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{The \textsf{gtl} package: \\
+% manipulate unbalanced lists of tokens\thanks{This
+% file has version number 0.5, last revised 2018/12/28.}}
+% \author{Bruno Le Floch}
+% \date{2018/12/28}
+%
+% \maketitle
+% \tableofcontents
+%
+% \begin{documentation}
+%
+% \section{\pkg{gtl} documentation}
+%
+% The \texttt{expl3} programming language provides various tools to
+% manipulate lists of tokens (package \pkg{l3tl}). However, those token
+% lists must have balanced braces, or more precisely balanced
+% begin-group and end-group characters. The \pkg{gtl} package
+% manipulates instead lists of tokens which may be unbalanced, with more
+% begin-group or more end-group characters.
+%
+% A technical comment: currently, all begin-group characters are
+% assumed to have the character code of ``|{|'' and all end-group
+% characters that of~``|}|''.
+%
+% Please report bugs (or suggestions) on the issue tracker
+% (\url{https://github.com/blefloch/latex-gtl/issues}).
+%
+% ^^A The following code checks the test coverage
+% \begingroup\ExplSyntaxOn
+% \msg_new:nnn { gtldoc } { discarded } { Discarded~some~material~after~closing~brace~of~{function}~or~TEST~or~TESTEXP~argument:~``#1'' }
+% \msg_new:nnn { gtldoc } { bad-test } { TEST~or~TESTEXP~followed~by~unexpected~character~``#1'' }
+% \msg_new:nnn { gtldoc } { multi-function } { Some~functions~are~defined~twice }
+% \msg_new:nnn { gtldoc } { doc-no-test } { ``#1''~is~documented~but~has~no~test }
+% \msg_new:nnn { gtldoc } { test-no-doc } { ``#1''~is~tested~but~not~documented }
+% \msg_new:nnn { gtldoc } { junk } { There~is~some~unexpected~junk.~Giving~up~on~this~line. }
+% \tl_new:N \l__gtldoc_arg_tl
+% \seq_new:N \l__gtldoc_internal_seq
+% \cs_generate_variant:Nn \use:nn { no }
+% \cs_generate_variant:Nn \tl_if_in:nnTF { no }
+% \cs_generate_variant:Nn \tl_if_in:nnT { no }
+% \cs_generate_variant:Nn \tl_remove_all:Nn { Nx }
+% \cs_generate_variant:Nn \seq_set_filter:NNn { NNx }
+% \group_begin:
+% \seq_new:N \l__gtldoc_fn_seq
+% \iow_new:N \g__gtldoc_ior
+% \tl_new:N \l__gtldoc_internal_tl
+% \str_new:N \l__gtldoc_TF_str
+% \seq_new:N \l__gtldoc_arg_seq
+% \seq_new:N \l__gtldoc_arg_TF_seq
+% \cs_new:Npn \__gtldoc_remove_backslash:N #1
+% { \exp_after:wN \token_if_eq_charcode:NNF \c_backslash_str #1 {#1} }
+% \cs_new_protected:Npn \gtldoc_get_fn:n #1
+% {
+% \seq_clear:N \l__gtldoc_fn_seq
+% \clist_map_inline:nn {#1}
+% {
+% \__gtldoc_get_fn:nn { function } {#1} ^^A todo: this is wasteful, going through the file twice!
+% \__gtldoc_get_fn:nn { variable } {#1}
+% }
+% }
+% \cs_new_protected:Npn \__gtldoc_get_fn:nn #1
+% {
+% \exp_args:Noo \__gtldoc_get_fn_aux:nnn
+% { \tl_to_str:n { begin } } { \tl_to_str:n { {#1} } }
+% }
+% \cs_new_eq:NN \__gtldoc_test:w ?
+% \cs_new_eq:NN \__gtldoc_skip:w ?
+% \cs_new_protected:Npn \__gtldoc_get_fn_aux:nnn #1#2#3
+% {
+% \cs_gset_protected:Npn \__gtldoc_test:w ##1 #1 ##2 #2 { }
+% \cs_gset_protected:Npn \__gtldoc_skip:w ##1 #1 ##2 #2
+% {
+% \tl_clear:N \l__gtldoc_arg_tl
+% \str_clear:N \l__gtldoc_TF_str
+% \tl_if_blank:nF {##2}
+% {
+% \msg_error:nn { gtldoc } { junk }
+% \use_none_delimit_by_q_recursion_stop:w
+% }
+% \__gtldoc_aux:N
+% }
+% \ior_open:Nn \g__gtldoc_ior {#3}
+% \ior_str_map_inline:Nn \g__gtldoc_ior
+% {
+% \tl_if_in:noT {##1} { \tl_to_str:n { end { documentation } } } ^^A careful if you remove spaces!
+% { \ior_map_break: }
+% \tl_if_empty:oF { \__gtldoc_test:w ##1 #1 #2 }
+% { \__gtldoc_skip:w ##1 \q_recursion_tail \q_recursion_stop }
+% }
+% \ior_close:N \g__gtldoc_ior
+% }
+% \cs_new_protected:Npn \__gtldoc_aux:N #1
+% {
+% \token_if_eq_meaning:NNT #1 \q_recursion_tail
+% { \__gtldoc_more:Nw \__gtldoc_aux:N }
+% \str_case_x:nnF {#1}
+% {
+% \c_percent_str { \__gtldoc_aux:N } ^^A ignore percent
+% ^ { \__gtldoc_hat:N } ^^A check for "^^A"
+% [ { \__gtldoc_opt:w }
+% \c_left_brace_str { \__gtldoc_arg:w }
+% }
+% { \__gtldoc_varg:N #1 }
+% }
+% \cs_new_protected:Npn \__gtldoc_more:Nw #1 #2 \q_recursion_stop
+% { ^^A grab one more line and restart the loop
+% \ior_str_get:NN \g__gtldoc_ior \l__gtldoc_internal_tl
+% \exp_after:wN #1 \l__gtldoc_internal_tl
+% \q_recursion_tail \q_recursion_stop
+% }
+% \cs_new_protected:Npn \__gtldoc_hat:N #1
+% {
+% \token_if_eq_charcode:NNTF #1 ^
+% { \__gtldoc_hat_hat:N }
+% { \__gtldoc_varg:N ^ #1 }
+% }
+% \cs_new_protected:Npn \__gtldoc_hat_hat:N #1 ^^A in principle we should worry about crazy people doing ^^01 or ^^5b etc
+% {
+% \token_if_eq_charcode:NNTF #1 A
+% { \__gtldoc_more:Nw \__gtldoc_aux:N } ^^A we found a comment
+% { \__gtldoc_varg:N ^ ^ #1 }
+% }
+% \cs_new_protected:Npn \__gtldoc_opt:w #1 \q_recursion_tail
+% {
+% \tl_if_in:nnTF {#1} { ] }
+% { \__gtldoc_opt_aux:w #1 \q_recursion_tail }
+% { \__gtldoc_more:Nw \__gtldoc_opt:w }
+% }
+% \cs_new_protected:Npn \__gtldoc_opt_aux:w #1 ]
+% {
+% \tl_if_in:noTF {#1} { \tl_to_str:n { pTF } }
+% { \str_set:Nn \l__gtldoc_TF_str { pTF } }
+% {
+% \tl_if_in:noT {#1} { \tl_to_str:n { TF } }
+% { \str_set:Nn \l__gtldoc_TF_str { TF } }
+% }
+% \__gtldoc_aux:N
+% }
+% \cs_new_protected:Npn \__gtldoc_arg:w
+% { \exp_after:wN \__gtldoc_varg:N \c_right_brace_str }
+% \cs_new_protected:Npn \__gtldoc_varg:N #1
+% { \exp_args:No \__gtldoc_varg_aux:n { \token_to_str:N #1 } }
+% \cs_new_protected:Npn \__gtldoc_varg_aux:n #1
+% {
+% \cs_gset_protected:Npn \__gtldoc_varg_aux:w ##1 #1 { {##1} }
+% \cs_gset_protected:Npn \__gtldoc_varg_loop:w ##1 \q_recursion_tail
+% {
+% \tl_if_in:noTF {##1} {#1}
+% {
+% \exp_after:wN \__gtldoc_varg_last:nw
+% \__gtldoc_varg_aux:w ##1 \q_recursion_tail
+% }
+% {
+% \tl_put_right:Nx \l__gtldoc_arg_tl { ##1 \iow_char:N \^^M }
+% \__gtldoc_more:Nw \__gtldoc_varg_loop:w
+% }
+% }
+% \__gtldoc_varg_loop:w
+% }
+% \cs_new_eq:NN \__gtldoc_varg_aux:w ?
+% \cs_new_eq:NN \__gtldoc_varg_loop:w ?
+% \cs_new_protected:Npn \__gtldoc_varg_last:nw
+% #1#2 \q_recursion_tail \q_recursion_stop
+% {
+% \tl_if_blank:nF {#2}
+% { \msg_warning:nnn { gtldoc } { discarded } {#2} }
+% \tl_put_right:Nn \l__gtldoc_arg_tl {#1}
+% \tl_remove_all:Nx \l__gtldoc_arg_tl { \iow_char:N \^^M \iow_char:N \% } ^^A from l3doc
+% \tl_remove_all:Nx \l__gtldoc_arg_tl { \tl_to_str:n { ^ ^ A } } ^^A from l3doc
+% \tl_remove_all:Nx \l__gtldoc_arg_tl { \iow_char:N \^^I } ^^A from l3doc
+% \tl_remove_all:Nx \l__gtldoc_arg_tl { \iow_char:N \^^M } ^^A from l3doc
+% ^^A \@@_replace_at_at:N \l_@@_tmpa_tl ^^A from l3doc but not done here
+% \exp_args:NNx \seq_set_from_clist:Nn \l__gtldoc_arg_seq
+% { \tl_to_str:N \l__gtldoc_arg_tl }
+% \str_if_empty:NF \l__gtldoc_TF_str
+% {
+% \seq_clear:N \l__gtldoc_arg_TF_seq
+% \seq_map_inline:Nn \l__gtldoc_arg_seq
+% {
+% \seq_put_right:Nx \l__gtldoc_arg_TF_seq { ##1 TF }
+% \seq_put_right:Nx \l__gtldoc_arg_TF_seq { ##1 T }
+% \seq_put_right:Nx \l__gtldoc_arg_TF_seq { ##1 F }
+% \str_if_eq_x:nnT { \l__gtldoc_TF_str } { pTF }
+% { \seq_put_right:Nx \l__gtldoc_arg_TF_seq { \__gtldoc_pred:w ##1 } }
+% }
+% \seq_set_map:NNn \l__gtldoc_arg_seq
+% \l__gtldoc_arg_TF_seq { \tl_to_str:n {##1} }
+% }
+% \seq_concat:NNN \l__gtldoc_fn_seq \l__gtldoc_fn_seq \l__gtldoc_arg_seq
+% }
+% \use:no { \cs_new:Npn \__gtldoc_pred:w #1 } { \token_to_str:N : } { #1 _p: }
+% \group_end:
+% \group_begin:
+% \seq_new:N \l__gtldoc_tested_fn_seq
+% \cs_new_protected:Npn \gtldoc_get_tests:n #1
+% {
+% \seq_clear:N \l__gtldoc_tested_fn_seq
+% \clist_map_function:nN {#1} \__gtldoc_get_test:n
+% }
+% \cs_new_protected:Npn \__gtldoc_get_test:n #1
+% {
+% \ior_open:Nn \g__gtldoc_ior {#1}
+% \ior_str_map_inline:Nn \g__gtldoc_ior
+% { \__gtldoc_test_aux:n {##1} }
+% \ior_close:N \g__gtldoc_ior
+% }
+% \cs_gset_protected:Npn \__gtldoc_tmp:nn #1#2
+% {
+% \cs_new_protected:Npn \__gtldoc_test_skipi:w ##1 #1 { }
+% \cs_new_protected:Npn \__gtldoc_test_skipii:w ##1 #2 { }
+% \cs_new_protected:Npn \__gtldoc_test_aux:n ##1
+% {
+% \tl_if_empty:oF { \__gtldoc_test_skipi:w ##1 #1 }
+% {
+% \tl_if_empty:oTF { \__gtldoc_test_skipii:w ##1 #2 }
+% { \__gtldoc_test_auxi:w } { \__gtldoc_test_auxii:w }
+% ##1 \q_recursion_tail \q_recursion_stop
+% }
+% }
+% \cs_new_protected:Npn \__gtldoc_test_auxi:w ##1 #1
+% { \__gtldoc_test_auxiii:N }
+% \cs_new_protected:Npn \__gtldoc_test_auxii:w ##1 #2
+% { \__gtldoc_test_auxiii:N }
+% }
+% \exp_args:Noo \__gtldoc_tmp:nn
+% { \token_to_str:N \TEST }
+% { \token_to_str:N \TESTEXP }
+% \cs_new_protected:Npn \__gtldoc_test_auxiii:N #1
+% {
+% \token_if_eq_meaning:NNT \q_recursion_tail #1
+% { \__gtldoc_more:Nw \__gtldoc_test_auxiii:N }
+% \exp_after:wN \token_if_eq_charcode:NNTF \c_left_brace_str #1
+% { \__gtldoc_test_arg:w }
+% {
+% \msg_error:nnn { gtldoc } { bad-test } {#1}
+% \use_none_delimit_by_q_recursion_stop:w
+% }
+% }
+% \cs_new_protected:Npn \__gtldoc_test_arg:w
+% {
+% \tl_clear:N \l__gtldoc_arg_tl
+% \exp_args:No \__gtldoc_test_arg_aux:N \c_right_brace_str
+% }
+% \cs_new_protected:Npn \__gtldoc_test_arg_aux:N #1
+% {
+% \cs_gset_protected:Npn \__gtldoc_test_arg_aux:w ##1 #1 { {##1} }
+% \cs_gset_protected:Npn \__gtldoc_test_arg_loop:w ##1 \q_recursion_tail
+% {
+% \tl_if_in:noTF {##1} {#1}
+% {
+% \exp_after:wN \__gtldoc_test_arg_last:nw
+% \__gtldoc_test_arg_aux:w ##1 \q_recursion_tail
+% }
+% {
+% \tl_put_right:Nn \l__gtldoc_arg_tl {##1}
+% \__gtldoc_more:Nw \__gtldoc_test_arg_loop:w
+% }
+% }
+% \__gtldoc_test_arg_loop:w
+% }
+% \cs_new_eq:NN \__gtldoc_test_arg_aux:w ?
+% \cs_new_eq:NN \__gtldoc_test_arg_loop:w ?
+% \cs_new_protected:Npn \__gtldoc_test_arg_last:nw
+% #1#2 \q_recursion_tail \q_recursion_stop
+% {
+% \tl_if_blank:nF {#2}
+% { \msg_warning:nnn { gtldoc } { discarded } {#2} }
+% \tl_put_right:Nn \l__gtldoc_arg_tl {#1}
+% \exp_args:NNx \seq_set_from_clist:Nn \l__gtldoc_arg_seq
+% { \tl_to_str:N \l__gtldoc_arg_tl }
+% \seq_set_filter:NNx \l__gtldoc_arg_seq \l__gtldoc_arg_seq
+% { \exp_not:N \tl_if_head_eq_charcode_p:nN {####1} \c_backslash_str }
+% \seq_concat:NNN \l__gtldoc_tested_fn_seq \l__gtldoc_tested_fn_seq \l__gtldoc_arg_seq
+% }
+% \group_end:
+% \gtldoc_get_fn:n { gtl.dtx }
+% \gtldoc_get_tests:n
+% {
+% ../../testfiles/gtl000.lvt ,
+% ../../testfiles/gtl001.lvt ,
+% ../../testfiles/gtl002.lvt ,
+% ../../testfiles/gtl003.lvt ,
+% ../../testfiles/gtl004.lvt ,
+% ../../testfiles/gtl005.lvt ,
+% ../../testfiles/gtl006.lvt ,
+% ../../testfiles-plain/gtl007.lvt
+% }
+% \group_begin:
+% \seq_set_eq:NN \l__gtldoc_internal_seq \l__gtldoc_fn_seq
+% \seq_remove_duplicates:N \l__gtldoc_internal_seq
+% \int_compare:nF
+% { \seq_count:N \l__gtldoc_internal_seq = \seq_count:N \l__gtldoc_fn_seq }
+% {
+% \msg_error:nn { gtldoc } { multi-function }
+% \seq_set_eq:NN \l__gtldoc_fn_seq \l__gtldoc_internal_seq
+% }
+% \seq_remove_duplicates:N \l__gtldoc_tested_fn_seq
+% \seq_map_inline:Nn \l__gtldoc_fn_seq
+% {
+% \seq_if_in:NnTF \l__gtldoc_tested_fn_seq {#1}
+% { \seq_remove_all:Nn \l__gtldoc_tested_fn_seq {#1} }
+% { \msg_error:nnn { gtldoc } { doc-no-test } {#1} }
+% }
+% \seq_map_inline:Nn \l__gtldoc_tested_fn_seq
+% { \msg_error:nnn { gtldoc } { test-no-doc } {#1} }
+% \group_end:
+% \endgroup
+%
+% \subsection{Creating and initialising extended token lists}
+%
+% \begin{function}{\gtl_new:N}
+% \begin{syntax}
+% \cs{gtl_new:N} \meta{gtl~var}
+% \end{syntax}
+% Creates a new \meta{gtl~var} or raises an error if the name is
+% already taken. The declaration is global. The \meta{gtl~var} will
+% initially be empty.
+% \end{function}
+%
+% \begin{function}{\gtl_const:Nn, \gtl_const:Nx}
+% \begin{syntax}
+% \cs{gtl_const:Nn} \meta{gtl~var} \Arg{token list}
+% \end{syntax}
+% Creates a new constant \meta{gtl~var} or raises an error if the name
+% is already taken. The value of the \meta{gtl~var} will be set
+% globally to the balanced \meta{token list}.
+% \end{function}
+%
+% \begin{function}{\gtl_clear:N, \gtl_gclear:N}
+% \begin{syntax}
+% \cs{gtl_clear:N} \meta{gtl~var}
+% \end{syntax}
+% Empties the \meta{gtl~var}, locally or globally.
+% \end{function}
+%
+% \begin{function}{\gtl_clear_new:N, \gtl_gclear_new:N}
+% \begin{syntax}
+% \cs{gtl_clear_new:N} \meta{gtl~var}
+% \end{syntax}
+% Ensures that the \meta{gtl~var} exists globally by applying
+% \cs{gtl_new:N} if necessary, then applies \cs{gtl_(g)clear:N} to
+% leave the \meta{gtl~var} empty.
+% \end{function}
+%
+% \begin{function}{\gtl_set_eq:NN, \gtl_gset_eq:NN}
+% \begin{syntax}
+% \cs{gtl_set_eq:NN} \meta{gtl~var_1} \meta{gtl~var_2}
+% \end{syntax}
+% Sets the content of \meta{gtl~var_1} equal to that of
+% \meta{gtl~var_2}.
+% \end{function}
+%
+% \begin{function}{\gtl_concat:NNN, \gtl_gconcat:NNN}
+% \begin{syntax}
+% \cs{gtl_concat:NNN} \meta{gtl~var_1} \meta{gtl~var_2} \meta{gtl~var_3}
+% \end{syntax}
+% Concatenates the content of \meta{gtl~var_2} and \meta{gtl~var_3}
+% together and saves the result in \meta{gtl~var_1}. The
+% \meta{gtl~var_2} will be placed at the left side of the new extended
+% token list.
+% \end{function}
+%
+% \begin{function}[EXP, pTF]{\gtl_if_exist:N}
+% \begin{syntax}
+% \cs{gtl_if_exist_p:N} \meta{gtl~var}
+% \cs{gtl_if_exist:NTF} \meta{gtl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests whether the \meta{gtl~var} is currently defined. This does
+% not check that the \meta{gtl~var} really is an extended token list
+% variable.
+% \end{function}
+%
+% \subsection{Adding data to token list variables}
+%
+% \begin{function}{\gtl_set:Nn, \gtl_set:Nx, \gtl_gset:Nn, \gtl_gset:Nx}
+% \begin{syntax}
+% \cs{gtl_set:Nn} \meta{gtl~var} \Arg{token list}
+% \end{syntax}
+% Sets \meta{gtl~var} to contain the balanced \meta{token list},
+% removing any previous content from the variable.
+% \end{function}
+%
+% \begin{function}{\gtl_put_left:Nn, \gtl_gput_left:Nn}
+% \begin{syntax}
+% \cs{gtl_put_left:Nn} \meta{gtl~var} \Arg{token list}
+% \end{syntax}
+% Appends the balanced \meta{token list} to the left side of the
+% current content of \meta{gtl~var}.
+% \end{function}
+%
+% \begin{function}{\gtl_put_right:Nn, \gtl_gput_right:Nn}
+% \begin{syntax}
+% \cs{gtl_put_right:Nn} \meta{gtl~var} \Arg{token list}
+% \end{syntax}
+% Appends the balanced \meta{token list} to the right side of the
+% current content of \meta{gtl~var}.
+% \end{function}
+%
+% \subsection{Extended token list conditionals}
+%
+% \begin{function}[EXP, pTF]{\gtl_if_blank:N}
+% \begin{syntax}
+% \cs{gtl_if_blank_p:N} \Arg{gtl~var}
+% \cs{gtl_if_blank:NTF} \Arg{gtl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the \meta{gtl~var} consists only of blank spaces. The test
+% is \texttt{true} if \meta{gtl~var} consists of zero or more explicit
+% space characters (explicit tokens with character code~$32$ and
+% category code~$10$), and is \texttt{false} otherwise.
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_empty:N}
+% \begin{syntax}
+% \cs{gtl_if_empty_p:N} \meta{gtl~var}
+% \cs{gtl_if_empty:NTF} \meta{gtl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the \meta{gtl~var} is entirely empty (\emph{i.e.}~contains
+% no tokens at all).
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_eq:NN}
+% \begin{syntax}
+% \cs{gtl_if_eq_p:NN} \Arg{gtl~var_1} \Arg{gtl~var_2}
+% \cs{gtl_if_eq:NNTF} \Arg{gtl~var_1} \Arg{gtl~var_2} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if \meta{gtl~var_1} and \meta{gtl~var_2} have the same
+% content. The test is \texttt{true} if the two contain the same list
+% of tokens (identical in both character code and category code).
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_single_token:N}
+% \begin{syntax}
+% \cs{gtl_if_single_token_p:N} \meta{gtl~var}
+% \cs{gtl_if_single_token:NTF} \meta{gtl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the content of the \meta{gtl~var} consists of a single
+% token. Such a token list has token count $1$ according to
+% \cs{gtl_count_tokens:N}.
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_tl:N}
+% \begin{syntax}
+% \cs{gtl_if_tl_p:N} \meta{gtl~var}
+% \cs{gtl_if_tl:NTF} \meta{gtl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the \meta{gtl~var} is balanced.
+% \end{function}
+%
+% \subsection{The first token from an extended token list}
+%
+% \begin{function}[EXP]{\gtl_head:N}
+% \begin{syntax}
+% \cs{gtl_head:N} \meta{gtl~var}
+% \end{syntax}
+% Leaves in the input stream the first token in the \meta{gtl~var}.
+% If the \meta{gtl~var} is empty, nothing is left in the input stream.
+% \end{function}
+%
+% \begin{function}[EXP]{\gtl_head_do:NN}
+% \begin{syntax}
+% \cs{gtl_head_do:NN} \meta{gtl~var} \meta{cs}
+% \end{syntax}
+% Leaves in the input stream the \meta{control sequence} followed by
+% the first token in \meta{gtl~var}. If the \meta{gtl~var} is empty,
+% the \meta{cs} is followed by \cs{q_no_value}.
+% \end{function}
+%
+% \begin{function}[EXP, TF]{\gtl_head_do:NN}
+% \begin{syntax}
+% \cs{gtl_head_do:NNTF} \meta{gtl~var} \meta{cs} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% If the \meta{gtl~var} is empty, leaves the \meta{false code} in the
+% input stream. Otherwise leaves the \meta{control sequence}
+% followed by the first token in \meta{gtl~var} and the \meta{true
+% code}.
+% \end{function}
+%
+% \begin{function}{\gtl_get_left:NN}
+% \begin{syntax}
+% \cs{gtl_get_left:NN} \meta{gtl~var_1} \meta{gtl~var_2}
+% \end{syntax}
+% Stores the first token from \meta{gtl~var_1} in \meta{gtl~var_2} as
+% an single-token extended token list, without removing it from
+% \meta{gtl~var_1}.
+% \end{function}
+%
+% \begin{function}{\gtl_pop_left:N, \gtl_gpop_left:N}
+% \begin{syntax}
+% \cs{gtl_pop_left:N} \meta{gtl~var}
+% \end{syntax}
+% Remove the first token from \meta{gtl~var_1}.
+% If the \meta{gtl~var_1} is empty nothing happens.
+% \end{function}
+%
+% \begin{function}{\gtl_pop_left:NN, \gtl_gpop_left:NN}
+% \begin{syntax}
+% \cs{gtl_pop_left:NN} \meta{gtl~var_1} \meta{gtl~var_2}
+% \end{syntax}
+% Stores the first token from \meta{gtl~var_1} in \meta{gtl~var_2} as
+% an single-token extended token list, and remove it from
+% \meta{gtl~var_1}. If the \meta{gtl~var_1} is empty it remains so,
+% and \meta{gtl~var_2} is set to contain \cs{q_no_value}.
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_head_eq_catcode:NN}
+% \begin{syntax}
+% \cs{gtl_if_head_eq_catcode_p:NN} \Arg{gtl~var} \meta{test token}
+% \cs{gtl_if_head_eq_catcode:NNTF} \Arg{gtl~var} \meta{test token}
+% ~~\Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the first token in \meta{gtl~var} has the same category
+% code as the \meta{test token}. In the case where \meta{gtl~var} is
+% empty, the test will always be \texttt{false}.
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_head_eq_charcode:NN}
+% \begin{syntax}
+% \cs{gtl_if_head_eq_charcode_p:NN} \Arg{gtl~var} \meta{test token}
+% \cs{gtl_if_head_eq_charcode:NNTF} \Arg{gtl~var} \meta{test token}
+% ~~\Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the first token in \meta{gtl~var} has the same character
+% code as the \meta{test token}. In the case where \meta{gtl~var} is
+% empty, the test will always be \texttt{false}.
+% \end{function}
+%
+% \begin{function}[EXP,pTF]{\gtl_if_head_eq_meaning:NN}
+% \begin{syntax}
+% \cs{gtl_if_head_eq_meaning_p:NN} \Arg{gtl~var} \meta{test token}
+% \cs{gtl_if_head_eq_meaning:NNTF} \Arg{gtl~var} \meta{test token}
+% ~~\Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the first token in \meta{gtl~var} has the same meaning as
+% the \meta{test token}. In the case where \meta{gtl~var} is empty,
+% the test will always be \texttt{false}.
+% \end{function}
+%
+% \begin{function}[EXP,pTF]
+% {
+% \gtl_if_head_is_group_begin:N,
+% \gtl_if_head_is_group_end:N,
+% \gtl_if_head_is_N_type:N,
+% \gtl_if_head_is_space:N,
+% }
+% \begin{syntax}
+% \cs{gtl_if_head_is_group_begin_p:N} \Arg{gtl~var}
+% \cs{gtl_if_head_is_group_begin:NTF} \Arg{gtl~var}
+% ~~\Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests whether the first token in \meta{gtl~var} is an explicit
+% begin-group character, an explicit end-group character, an |N|-type
+% token, or a space. In the case where \meta{gtl~var} is empty, the
+% test will always be \texttt{false}.
+% \end{function}
+%
+% \subsection{The first few tokens from an extended token list}
+%
+% \begin{function}[EXP]{\gtl_left_tl:N}
+% \begin{syntax}
+% \cs{gtl_left_tl:N} \meta{gtl~var}
+% \end{syntax}
+% Leaves in the input stream all tokens in \meta{gtl~var} until the
+% first extra begin-group or extra end-group character, within
+% \cs{exp_not:n}. This is the longest balanced token list starting
+% from the left of \meta{gtl~var}.
+% \end{function}
+%
+% \begin{function}{\gtl_pop_left_tl:N, \gtl_gpop_left_tl:N}
+% \begin{syntax}
+% \cs{gtl_pop_left_tl:N} \meta{gtl~var}
+% \end{syntax}
+% Remove from the \meta{gtl~var} all tokens before the first extra
+% begin-group or extra end-group character. The tokens that are
+% removed form the longest balanced token list starting from the left
+% of \meta{gtl~var}.
+% \end{function}
+%
+% \begin{function}[EXP]{\gtl_left_item:NF}
+% \begin{syntax}
+% \cs{gtl_left_item:NF} \meta{gtl~var} \Arg{false code}
+% \end{syntax}
+% Leaves in the input stream the first \meta{item} of the
+% \meta{gtl~var}: this is identical to \cs{tl_head:n} applied to the
+% result of \cs{gtl_left_tl:N}. If there is no such item, the
+% \meta{false code} is left in the input stream.
+% \end{function}
+%
+% \begin{function}[TF]{\gtl_pop_left_item:NN, \gtl_gpop_left_item:NN}
+% \begin{syntax}
+% \cs{gtl_pop_left_item:NNTF} \meta{gtl~var} \meta{tl~var}
+% \Arg{true~code} \Arg{false~code}
+% \end{syntax}
+% Stores the first item of \meta{gtl~var} in \meta{tl~var}, locally,
+% and removes it from \meta{gtl~var}, together with any space before
+% it. If there is no such item, the \meta{gtl~var} is not affected,
+% and the meta{tl~var} may or may not be affected.
+% \end{function}
+%
+% \begin{function}[EXP]{\gtl_left_text:NF}
+% \begin{syntax}
+% \cs{gtl_left_text:NF} \meta{gtl~var} \Arg{false code}
+% \end{syntax}
+% Starting from the first token in \meta{gtl~var}, this function finds
+% a pattern of the form \meta{tokens_1} \Arg{tokens_2}, where the
+% \meta{tokens_1} contain no begin-group nor end-group characters,
+% then leaves \meta{tokens_1} \Arg{tokens_2} in the input stream,
+% within \cs{exp_not:n}. If no such pattern exists (this happens if
+% the result of \cs{gtl_left_tl:N} contains no brace group), the
+% \meta{false code} is run instead.
+% \end{function}
+%
+% \begin{function}{\gtl_pop_left_text:N, \gtl_gpop_left_text:N}
+% \begin{syntax}
+% \cs{gtl_pop_left_text:N} \meta{gtl~var}
+% \end{syntax}
+% Starting from the first token in \meta{gtl~var}, this function finds
+% a pattern of the form \meta{tokens_1} \Arg{tokens_2}, where the
+% \meta{tokens_1} contain no begin-group nor end-group characters,
+% then removes \meta{tokens_1} \Arg{tokens_2} from \meta{gtl~var}. If
+% no such pattern exists (this happens if the result of
+% \cs{gtl_left_tl:N} contains no brace group), the \meta{gtl~var} is
+% not modified instead.
+% \end{function}
+%
+% \subsection{Working with the contents of extended token lists}
+%
+% \begin{function}[EXP]{\gtl_count_tokens:N}
+% \begin{syntax}
+% \cs{gtl_count_tokens:N} \meta{gtl~var}
+% \end{syntax}
+% Counts the number of tokens in the \meta{gtl~var} and leaves this
+% information in the input stream.
+% \end{function}
+%
+% \begin{function}[EXP]{\gtl_extra_begin:N, \gtl_extra_end:N}
+% \begin{syntax}
+% \cs{gtl_extra_begin:N} \meta{gtl~var}
+% \end{syntax}
+% Counts the number of explicit extra begin-group (or end-group)
+% characters in the \meta{gtl~var} and leaves this information in the
+% input stream.
+% \end{function}
+%
+% \begin{function}{\gtl_show:N, \gtl_log:N}
+% \begin{syntax}
+% \cs{gtl_show:N} \meta{gtl~var}
+% \end{syntax}
+% Displays the content of the \meta{gtl~var} on the terminal or in
+% the log file.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2018-04-04]{\gtl_to_str:N, \gtl_to_str:n}
+% \begin{syntax}
+% \cs{gtl_to_str:N} \meta{gtl~var}
+% \end{syntax}
+% Converts the content of the \meta{gtl~var} into a series of
+% characters with category code $12$ (other) with the exception of
+% spaces, which retain category code $10$ (space). This string is
+% then left in the input stream.
+% \end{function}
+%
+% \subsection{Constant extended token lists}
+%
+% \begin{variable}{\c_empty_gtl}
+% Constant that is always empty.
+% \end{variable}
+%
+% \begin{variable}{\c_group_begin_gtl}
+% An explicit begin-group character contained in an extended token
+% list.
+% \end{variable}
+%
+% \begin{variable}{\c_group_end_gtl}
+% An explicit end-group character contained in an extended token list.
+% \end{variable}
+%
+% \subsection{Future perhaps}
+%
+% \begin{itemize}
+% \item Test if a token appears in an extended token list.
+% \item Test if an extended token list appears in another.
+% \item Remove an extended token list from another, once or every time
+% it appears.
+% \item Replace an extended token list by another in a third: once, or
+% every time it appears.
+% \item Case statement.
+% \item Mapping?
+% \item Inserting an extended token list into the input stream, with all
+% its glorious unbalanced braces.
+% \item Convert in various ways to a token list.
+% \item Reverse the order of tokens.
+% \item Extract a token given its position.
+% \item Extract a range of tokens given their position.
+% \item Trim spaces.
+% \item Crazy idea below.
+% \end{itemize}
+%
+% We could add (with lots of work) the expandable function
+% \begin{quote}\ttfamily\obeylines\obeyspaces
+% \cs{gtl_concat:nF}
+% \{
+% \Arg{tl_1} \Arg{start_1} \Arg{stop_1}
+% \Arg{tl_2} \Arg{start_2} \Arg{stop_2}
+% \ldots{}
+% \Arg{tl_n} \Arg{start_n} \Arg{stop_n}
+% \}
+% \Arg{false code}
+% \end{quote}
+% For each triplet, this function builds the sub-token list of \meta{tl_i}
+% corresponding to the tokens ranging from position \meta{start_i} to
+% position \meta{stop_i} of \meta{tl_i}. The results obtained for each triplet
+% are then concatenated. If nothing bad happens (see below), the
+% concatenation is left in the input stream, and the \meta{false code} is
+% removed. Two cases can lead to running the \meta{false code} (and dropping
+% the first argument altogether). The first case is when the number of
+% brace groups in \cs{gtl_concat:nF} is not a multiple of 3. The second
+% case is when the concatenation gives rise to an unbalanced token list:
+% then the result is not a valid token list. Note that each part is
+% allowed to be unbalanced: only the full result must be balanced.
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{gtl} implementation}
+%
+% Some support packages are loaded first, then we declare the package's
+% name, date, version, and purpose.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=gtl>
+% \end{macrocode}
+%
+% Load \pkg{expl3}, either through \cs{RequirePackage} or through
+% inputting the generic loader, depending on the format in use.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax
+ \input expl3-generic.tex
+\else
+ \RequirePackage{expl3}[2017/11/14]
+\fi
+\ExplSyntaxOn
+\cs_if_exist:NTF \ProvidesExplPackage
+ {
+ \cs_new_eq:NN \@@_end_package_hook: \prg_do_nothing:
+ \ExplSyntaxOff
+ \ProvidesExplPackage
+ }
+ {
+ \cs_new_eq:NN \@@_end_package_hook: \ExplSyntaxOff
+ \group_begin:
+ \ExplSyntaxOff
+ \cs_set_protected:Npn \@@_tmp:w #1#2#3#4
+ {
+ \group_end:
+ \tl_gset:cx { ver @ #1 . sty } { #2 ~ v#3 ~ #4 }
+ \cs_if_exist_use:NF \wlog { \iow_log:x }
+ { Package: ~ #1 ~ #2 ~ v#3 ~ #4 }
+ }
+ \@@_tmp:w
+ }
+ {gtl} {2018/12/28} {0.5} {Manipulate unbalanced lists of tokens}
+% \end{macrocode}
+%
+% \subsection{Helpers}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \use:nn { no }
+% \end{macrocode}
+%
+% \begin{macro}[EXP]{\@@_exp_not_n:N}
+% Used in one case where we need to prevent expansion of a token
+% within an |x|-expanding definition. Using \cs{exp_not:N} there
+% would fail when the argument is a macro parameter character.
+% \begin{macrocode}
+\cs_new:Npn \@@_exp_not_n:N #1 { \exp_not:n {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_brace:nn, \@@_brace_swap:nn}
+% Those functions are used to add some tokens, |#1|, to an item |#2|
+% in an extended token list: \cs{@@_brace:nn} adds tokens on the left,
+% while \cs{@@_brace_swap:nn} adds them on the right.
+% \begin{macrocode}
+\cs_new:Npn \@@_brace:nn #1#2 { { #1 #2 } }
+\cs_new:Npn \@@_brace_swap:nn #1#2 { { #2 #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_strip_nil_mark:w,}
+% \begin{macro}[EXP]{\@@_strip_nil_mark_aux:w}
+% Removes the following \cs{q_nil} \cs{q_mark} without losing any
+% braces, and places the result into \cs{exp_not:n}.
+% \begin{macrocode}
+\cs_new:Npn \@@_strip_nil_mark:w
+ { \@@_strip_nil_mark_aux:w \prg_do_nothing: }
+\cs_new:Npn \@@_strip_nil_mark_aux:w #1 \q_nil \q_mark
+ { \exp_not:o {#1} }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Structure of extended token lists}
+%
+% Token lists must have balanced braces (or rather, begin-group and
+% end-group characters). Extended token lists lift this requirement,
+% and can represent arbitrary lists of tokens. A list of tokens can
+% fail to be balanced in two ways: one may encounter too many end-group
+% characters near the beginning of the list, or too many begin-group
+% characters near the end of the list. In fact, a list of tokens always
+% has the form
+% \begin{quote}\ttfamily
+% \meta{b_1} \} \ldots{} \meta{b_n} \}
+% \meta{c}
+% \{ \meta{e_1} \ldots{} \{ \meta{e_p}
+% \end{quote}
+% where the \meta{b_i}, \meta{c}, and \meta{e_i} are all balanced token
+% lists. This can be seen by listing the tokens, and keeping track of a
+% counter, which starts at~$0$, and is incremented at each begin-group
+% character, and decremented at each end-group character: then the
+% \meta{b_i} are delimited by positions where the counter reaches a new
+% minimum, whereas the \meta{e_i} are delimited by positions where the
+% counter last takes a given negative value. Such a token list is
+% stored as
+% \begin{quote}\ttfamily
+% \cs{s_@@}
+% \{ \Arg{b_1} \ldots{} \Arg{b_n} \}
+% \Arg{c}
+% \{ \Arg{e_p} \ldots{} \Arg{e_1} \}
+% \end{quote}
+% Note that the \meta{e_i} are in a reversed order, as this makes the
+% ends of extended token lists more accessible. Balanced token lists
+% have $n = p = 0$: the first and third parts are empty, while the
+% second contains the tokens.
+%
+% In the following code comments, the balanced token lists \meta{b_i}
+% are called ``leading chunks'', \meta{c} is called ``middle chunk'',
+% and \meta{e_i} are called ``trailing chunks''. It is important to
+% note that a balanced sub-list of a gtl must be entirely contained in
+% one of the chunk.
+%
+% \begin{variable}{\s_@@}
+% This marker appears at the start of extended token lists.
+% \begin{macrocode}
+\cs_new_eq:NN \s_@@ \scan_stop:
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}
+% {
+% \gtl_set:Nn, \gtl_gset:Nn, \gtl_const:Nn,
+% \gtl_set:Nx, \gtl_gset:Nx, \gtl_const:Nx
+% }
+% Storing a balanced token list into an extended token list variable
+% simply means adding \cs{s_@@} and two empty brace
+% groups: there are no leading nor trailing chunks.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_set:Nn { \@@_set:NNn \tl_set:Nn }
+\cs_new_protected:Npn \gtl_gset:Nn { \@@_set:NNn \tl_gset:Nn }
+\cs_new_protected:Npn \gtl_const:Nn { \@@_set:NNn \tl_const:Nn }
+\cs_new_protected:Npn \gtl_set:Nx { \@@_set:NNn \tl_set:Nx }
+\cs_new_protected:Npn \gtl_gset:Nx { \@@_set:NNn \tl_gset:Nx }
+\cs_new_protected:Npn \gtl_const:Nx { \@@_set:NNn \tl_const:Nx }
+\cs_new_protected:Npn \@@_set:NNn #1#2#3
+ { #1 #2 { \s_@@ { } {#3} { } } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\c_empty_gtl}
+% An empty extended token list, obtained thanks to the
+% \cs{gtl_const:Nn} function just defined.
+% \begin{macrocode}
+\gtl_const:Nn \c_empty_gtl { }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_group_begin_gtl, \c_group_end_gtl}
+% Extended token lists with exactly one begin-group/end-group
+% character are built by including a single (empty) leading or
+% trailing chunk.
+% \begin{macrocode}
+\tl_const:Nn \c_group_end_gtl { \s_@@ { { } } { } { } }
+\tl_const:Nn \c_group_begin_gtl { \s_@@ { } { } { { } } }
+% \end{macrocode}
+% \end{variable}
+%
+% \subsection{Creating extended token list variables}
+%
+% \begin{macro}{\gtl_new:N}
+% A new extended token list is created empty.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_new:N #1
+ { \cs_new_eq:NN #1 \c_empty_gtl }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gtl_set_eq:NN, \gtl_gset_eq:NN}
+% All the data about an extended token list is stored as a single
+% token list, so copying is easy.
+% \begin{macrocode}
+\cs_new_eq:NN \gtl_set_eq:NN \tl_set_eq:NN
+\cs_new_eq:NN \gtl_gset_eq:NN \tl_gset_eq:NN
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gtl_clear:N, \gtl_gclear:N}
+% Clearing an extended token list by setting it to the empty one.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_clear:N #1
+ { \gtl_set_eq:NN #1 \c_empty_gtl }
+\cs_new_protected:Npn \gtl_gclear:N #1
+ { \gtl_gset_eq:NN #1 \c_empty_gtl }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gtl_clear_new:N, \gtl_gclear_new:N}
+% If the variable exists, clear it. Otherwise declare it.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_clear_new:N #1
+ { \gtl_if_exist:NTF #1 { \gtl_clear:N #1 } { \gtl_new:N #1 } }
+\cs_new_protected:Npn \gtl_gclear_new:N #1
+ { \gtl_if_exist:NTF #1 { \gtl_gclear:N #1 } { \gtl_new:N #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_exist:N}
+% Again a copy of token list functions.
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn \gtl_if_exist:N \tl_if_exist:N
+ { p , T , F , TF }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Adding data to extended token list variables}
+%
+% \begin{macro}{\gtl_put_left:Nn, \gtl_gput_left:Nn}
+% \begin{macro}[rEXP]{\@@_put_left:wn}
+% If there is no leading chunk in the gtl variable, then add the new
+% material to the middle chunk. Otherwise add it to the first
+% leading chunk, namely the first brace group in the first argument
+% of \cs{@@_put_left:wn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_put_left:Nn #1#2
+ { \tl_set:Nx #1 { \exp_after:wN \@@_put_left:wn #1 {#2} } }
+\cs_new_protected:Npn \gtl_gput_left:Nn #1#2
+ { \tl_gset:Nx #1 { \exp_after:wN \@@_put_left:wn #1 {#2} } }
+\cs_new:Npn \@@_put_left:wn \s_@@ #1#2#3 #4
+ {
+ \tl_if_empty:nTF {#1}
+ { \exp_not:n { \s_@@ { } { #4 #2 } {#3} } }
+ {
+ \s_@@
+ { \exp_not:o { \@@_brace:nn {#4} #1 } }
+ { \exp_not:n {#2} }
+ { \exp_not:n {#3} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gtl_put_right:Nn, \gtl_gput_right:Nn}
+% \begin{macro}[rEXP]{\@@_put_right:wn}
+% Symmetric of \cs{gtl_put_left:Nn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_put_right:Nn #1#2
+ { \tl_set:Nx #1 { \exp_after:wN \@@_put_right:wn #1 {#2} } }
+\cs_new_protected:Npn \gtl_gput_right:Nn #1#2
+ { \tl_gset:Nx #1 { \exp_after:wN \@@_put_right:wn #1 {#2} } }
+\cs_new:Npn \@@_put_right:wn \s_@@ #1#2#3 #4
+ {
+ \tl_if_empty:nTF {#3}
+ { \exp_not:n { \s_@@ {#1} { #2 #4 } { } } }
+ {
+ \s_@@
+ { \exp_not:n {#1} }
+ { \exp_not:n {#2} }
+ { \exp_not:o { \@@_brace_swap:nn {#4} #3 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gtl_concat:NNN, \gtl_gconcat:NNN}
+% \begin{macro}[rEXP]
+% {
+% \@@_concat:ww,
+% \@@_concat_aux:nnnnnn,
+% \@@_concat_auxi:nnnnnn,
+% \@@_concat_auxii:nnnnnn,
+% \@@_concat_auxiii:w,
+% \@@_concat_auxiv:nnnn,
+% \@@_concat_auxv:wnwnn,
+% \@@_concat_auxvi:nnwnwnn
+% }
+% Concatenating two lists of tokens of the form
+% \begin{quote}\ttfamily
+% \cs{s_@@}
+% \{ \Arg{b_1} \ldots{} \Arg{b_n} \}
+% \Arg{c}
+% \{ \Arg{e_p} \ldots{} \Arg{e_1} \}
+% \end{quote}
+% is not an easy task. The \meta{e} parts of the first join with the
+% \meta{b} parts of the second to make balanced pairs, and the
+% follow-up depends on whether there were more \meta{e} parts or more
+% \meta{b} parts.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_concat:NNN #1#2#3
+ { \tl_set:Nx #1 { \exp_last_two_unbraced:Noo \@@_concat:ww #2 #3 } }
+\cs_new_protected:Npn \gtl_gconcat:NNN #1#2#3
+ { \tl_gset:Nx #1 { \exp_last_two_unbraced:Noo \@@_concat:ww #2 #3 } }
+\cs_new:Npn \@@_concat:ww \s_@@ #1#2#3 \s_@@ #4#5#6
+ {
+ \tl_if_blank:nTF {#3}
+ {
+ \tl_if_blank:nTF {#4}
+ { \@@_concat_aux:nnnnnn }
+ { \@@_concat_auxi:nnnnnn }
+ }
+ {
+ \tl_if_blank:nTF {#4}
+ { \@@_concat_auxii:nnnnnn }
+ { \@@_concat_auxiv:nnnn }
+ }
+ {#1} {#2} {#3} {#4} {#5} {#6}
+ }
+\cs_new:Npn \@@_concat_aux:nnnnnn #1#2#3#4#5#6
+ { \exp_not:n { \s_@@ {#1} { #2 #5 } {#6} } }
+\cs_new:Npn \@@_concat_auxi:nnnnnn #1#2#3#4#5#6
+ {
+ \s_@@
+ {
+ \exp_not:n {#1}
+ \exp_not:f
+ { \@@_concat_auxiii:w \@@_brace:nn {#2} #4 ~ \q_stop }
+ }
+ { \exp_not:n {#5} }
+ { \exp_not:n {#6} }
+ }
+\cs_new:Npn \@@_concat_auxii:nnnnnn #1#2#3#4#5#6
+ {
+ \s_@@
+ { \exp_not:n {#1} }
+ { \exp_not:n {#2} }
+ {
+ \exp_not:n {#6}
+ \exp_not:f
+ { \@@_concat_auxiii:w \@@_brace_swap:nn {#5} #3 ~ \q_stop }
+ }
+ }
+\cs_new:Npn \@@_concat_auxiii:w #1 ~ #2 \q_stop {#1}
+\cs_new:Npn \@@_concat_auxiv:nnnn #1#2#3#4
+ {
+ \tl_if_single:nTF {#3}
+ { \@@_concat_auxv:wnwnn }
+ { \@@_concat_auxvi:nnwnwnn }
+ #3 ~ \q_mark #4 ~ \q_mark {#1} {#2}
+ }
+\cs_new:Npn \@@_concat_auxv:wnwnn
+ #1#2 \q_mark #3#4 \q_mark #5#6
+ {
+ \@@_concat:ww
+ \s_@@ {#5} { #6 { #1 #3 } } { }
+ \s_@@ {#4}
+ }
+\cs_new:Npn \@@_concat_auxvi:nnwnwnn
+ #1#2#3 \q_mark #4#5 \q_mark #6#7
+ {
+ \@@_concat:ww
+ \s_@@ {#6} {#7} { { #2 { #1 #4 } } #3 }
+ \s_@@ {#5}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Showing extended token lists}
+%
+% \begin{macro}[EXP]{\gtl_to_str:N, \gtl_to_str:n}
+% \begin{macro}[EXP]
+% {
+% \@@_to_str:w,
+% \@@_to_str_loopi:nnw,
+% \@@_to_str_testi:nnw,
+% \@@_to_str_endi:nnn,
+% \@@_to_str_loopii:nnw,
+% \@@_to_str_endii:nnw
+% }
+% \begin{macrocode}
+\cs_new:Npn \gtl_to_str:N #1 { \exp_after:wN \@@_to_str:w #1 }
+\cs_new:Npn \gtl_to_str:n #1 { \@@_to_str:w #1 }
+\cs_new:Npn \@@_to_str:w \s_@@ #1#2#3
+ { \@@_to_str_loopi:nnw { } #1 \q_nil \q_mark {#2} {#3} }
+\cs_new:Npx \@@_to_str_loopi:nnw #1#2
+ {
+ \exp_not:N \quark_if_nil:nTF {#2}
+ { \exp_not:N \@@_to_str_testi:nnw {#1} {#2} }
+ { \exp_not:N \@@_to_str_loopi:nnw { #1 #2 \iow_char:N \} } }
+ }
+\cs_new:Npx \@@_to_str_testi:nnw #1#2#3 \q_mark
+ {
+ \exp_not:N \tl_if_empty:nTF {#3}
+ { \exp_not:N \@@_to_str_endi:nnn {#1} }
+ {
+ \exp_not:N \@@_to_str_loopi:nnw
+ { #1 #2 \iow_char:N \} } #3 \exp_not:N \q_mark
+ }
+ }
+\cs_new:Npn \@@_to_str_endi:nnn #1#2#3
+ { \@@_to_str_loopii:nnw #3 { #1 #2 } \q_nil \q_stop }
+\cs_new:Npx \@@_to_str_loopii:nnw #1#2
+ {
+ \exp_not:N \quark_if_nil:nTF {#2}
+ { \exp_not:N \@@_to_str_testii:nnw {#1} {#2} }
+ { \exp_not:N \@@_to_str_loopii:nnw { #2 \iow_char:N \{ #1 } }
+ }
+\cs_new:Npx \@@_to_str_testii:nnw #1#2#3 \q_stop
+ {
+ \exp_not:N \tl_if_empty:nTF {#3}
+ { \exp_not:N \tl_to_str:n {#1} }
+ {
+ \exp_not:N \@@_to_str_loopii:nnw
+ { #2 \iow_char:N \{ #1 } #3 \exp_not:N \q_stop
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gtl_show:N, \gtl_log:N}
+% \begin{macro}{\@@_show:NNN}
+% Display the variable name, then its string representation. Before
+% that, test that the variable indeed exists, and if appropriate
+% throw an error message by sending the undefined variable to
+% \cs{tl_show:N} or \cs{tl_log:N}.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_show:N
+ { \@@_show:NNN \tl_show:n \tl_show:N }
+\cs_new_protected:Npn \gtl_log:N
+ { \@@_show:NNN \tl_log:n \tl_log:N }
+\cs_new_protected:Npn \@@_show:NNN #1#2#3
+ {
+ \gtl_if_exist:NTF #3
+ { \exp_args:Nx #1 { \token_to_str:N #3 = \gtl_to_str:N #3 } }
+ { #2 #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Extended token list conditionals}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_eq:NN}
+% Two extended token lists are equal if the underlying token lists
+% are the same.
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn \gtl_if_eq:NN \tl_if_eq:NN
+ { p , T , F , TF }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_empty:N}
+% An extended token list is empty if it is equal to the empty gtl.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_empty:N #1 { p , T , F , TF }
+ {
+ \tl_if_eq:NNTF #1 \c_empty_gtl
+ { \prg_return_true: } { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_tl:N}
+% \begin{macro}[EXP]{\@@_if_tl_return:w}
+% A gtl is balanced if it has neither leading nor trailing chunk.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_tl:N #1 { p , T , F , TF }
+ { \exp_after:wN \@@_if_tl_return:w #1 }
+\cs_new:Npn \@@_if_tl_return:w \s_@@ #1#2#3
+ {
+ \tl_if_empty:nTF { #1 #3 }
+ { \prg_return_true: } { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_single_token:N}
+% \begin{macro}[EXP]{\@@_if_single_token_return:w}
+% If there are neither leading nor trailing chunks then the gtl is a
+% single token if and only if the middle chunk is a single token.
+% Otherwise the gtl is a single token only if it is exactly a
+% begin-group or an end-group token.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_single_token:N #1 { p , T , F , TF }
+ { \exp_after:wN \@@_if_single_token_return:w #1 #1 }
+\cs_new:Npn \@@_if_single_token_return:w \s_@@ #1#2#3 #4
+ {
+ \tl_if_empty:nTF { #1 #3 }
+ {
+ \tl_if_single_token:nTF {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ {
+ \gtl_if_eq:NNTF #4 \c_group_begin_gtl
+ { \prg_return_true: }
+ {
+ \gtl_if_eq:NNTF #4 \c_group_end_gtl
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP,pTF]{\gtl_if_blank:N}
+% \begin{macro}[EXP]{\@@_if_blank_return:w}
+% A gtl is blank if its middle chunk is blank and it has no leading
+% nor trailing chunk (those would lead to |#1| or |#3| containing
+% brace groups).
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_blank:N #1 { p , T , F , TF }
+ { \exp_after:wN \@@_if_blank_return:w #1 }
+\cs_new:Npn \@@_if_blank_return:w \s_@@ #1#2#3
+ {
+ \tl_if_blank:nTF { #1 #2 #3 }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP,pTF]
+% {
+% \gtl_if_head_is_group_begin:N,
+% \gtl_if_head_is_group_end:N,
+% \gtl_if_head_is_space:N,
+% \gtl_if_head_is_N_type:N,
+% }
+% Based on a five-way test \cs{@@_head:wnnnnn} defined later. The
+% five cases are: the gtl is empty, it starts with a begin-group,
+% with an end-group, with a space, or with an N-type token. In the
+% last case, the token is left in the input stream after the brace
+% group, hence the need for \cs{use_none:n} here.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_head_is_group_begin:N #1
+ { p , T , F , TF }
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { \prg_return_false: }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_false: \use_none:n }
+ }
+\prg_new_conditional:Npnn \gtl_if_head_is_group_end:N #1
+ { p , T , F , TF }
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ { \prg_return_false: \use_none:n }
+ }
+\prg_new_conditional:Npnn \gtl_if_head_is_space:N #1
+ { p , T , F , TF }
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_true: }
+ { \prg_return_false: \use_none:n }
+ }
+\prg_new_conditional:Npnn \gtl_if_head_is_N_type:N #1
+ { p , T , F , TF }
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_false: }
+ { \prg_return_true: \use_none:n }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_head_eq_catcode:NN}
+% \begin{macro}[EXP, pTF]{\gtl_if_head_eq_charcode:NN}
+% \begin{macro}[EXP]{\@@_if_head_eq_code_return:NNN}
+% In the empty case, |?| can match with |#2|, but then
+% \cs{use_none:nn} gets rid of \cs{prg_return_true:} and \cs{else:},
+% to correctly leave \cs{prg_return_false:}. We could not simplify
+% this by placing the \cs{exp_not:N} |#2| after the construction
+% involving~|#1|, because |#2|~must be taken into the \TeX{} primitive
+% test, in case |#2|~itself is a primitive \TeX{} conditional, which
+% would mess up conditional nesting.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_head_eq_catcode:NN #1#2
+ { p , T , F , TF }
+ { \@@_if_head_eq_code_return:NNN \if_catcode:w #1#2 }
+\prg_new_conditional:Npnn \gtl_if_head_eq_charcode:NN #1#2
+ { p , T , F , TF }
+ { \@@_if_head_eq_code_return:NNN \if_charcode:w #1#2 }
+\cs_new:Npn \@@_if_head_eq_code_return:NNN #1#2#3
+ {
+ #1
+ \exp_not:N #3
+ \exp_after:wN \@@_head:wnnnnn #2
+ { ? \use_none:nn }
+ { \c_group_begin_token }
+ { \c_group_end_token }
+ { \c_space_token }
+ { \exp_not:N }
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\gtl_if_head_eq_meaning:NN}
+% \begin{macro}[EXP]{\@@_if_head_eq_meaning_return:NN}
+% \begin{macrocode}
+\prg_new_conditional:Npnn \gtl_if_head_eq_meaning:NN #1#2
+ { p , T , F , TF }
+ { \@@_if_head_eq_meaning_return:NN #1#2 }
+\cs_new:Npn \@@_if_head_eq_meaning_return:NN #1#2
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { \if_false: }
+ { \if_meaning:w #2 \c_group_begin_token }
+ { \if_meaning:w #2 \c_group_end_token }
+ { \if_meaning:w #2 \c_space_token }
+ { \if_meaning:w #2 }
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{First token of an extended token list}
+%
+% \begin{macro}[EXP]{\@@_head:wnnnnn}
+% \begin{macro}[EXP]{\@@_head_aux:nwnnnn}
+% \begin{macro}[EXP]{\@@_head_auxii:N, \@@_head_auxiii:Nnn}
+% This function performs |#4|~if the \texttt{gtl} is empty, |#5|~if it
+% starts with a begin-group character, |#6|~if it starts with an
+% end-group character, |#7|~if it starts with a space, and in other
+% cases (when the first token is |N|-type), it performs |#8|~followed
+% by the first token.
+% \begin{macrocode}
+\cs_new:Npn \@@_head:wnnnnn \s_@@ #1#2#3 #4#5#6#7#8
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \tl_if_empty:nTF {#2}
+ { \tl_if_empty:nTF {#3} {#4} {#5} }
+ { \@@_head_aux:nwnnnn {#2} \q_stop {#5} {#6} {#7} {#8} }
+ }
+ { \@@_head_aux:nwnnnn #1 \q_stop {#5} {#6} {#7} {#8} }
+ }
+\cs_new:Npn \@@_head_aux:nwnnnn #1#2 \q_stop #3#4#5#6
+ {
+ \tl_if_head_is_group:nTF {#1} {#3}
+ {
+ \tl_if_empty:nTF {#1} {#4}
+ {
+ \tl_if_head_is_space:nTF {#1} {#5}
+ { \if_false: { \fi: \@@_head_auxii:N #1 } {#6} }
+ }
+ }
+ }
+\cs_new:Npn \@@_head_auxii:N #1
+ {
+ \exp_after:wN \@@_head_auxiii:Nnn
+ \exp_after:wN #1
+ \exp_after:wN { \if_false: } \fi:
+ }
+\cs_new:Npn \@@_head_auxiii:Nnn #1#2#3 { #3 #1 }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\gtl_head:N}
+% If |#1| is empty, do nothing. If it starts with a begin-group
+% character or an end-group character leave the appropriate brace
+% (thanks to \cs{if_false:} tricks). If it starts with a space, leave
+% that, and finally if it starts with a normal token, leave it, within
+% \cs{exp_not:n}.
+% \begin{macrocode}
+\cs_new:Npn \gtl_head:N #1
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { }
+ { \exp_after:wN { \if_false: } \fi: }
+ { \if_false: { \fi: } }
+ { ~ }
+ { \@@_exp_not_n:N }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\gtl_head_do:NN}
+% Similar to \cs{gtl_head:N}, but inserting |#2| before the resulting token.
+% \begin{macrocode}
+\cs_new:Npn \gtl_head_do:NN #1#2
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { #2 \q_no_value }
+ { \exp_after:wN #2 \exp_after:wN { \if_false: } \fi: }
+ { \if_false: { \fi: #2 } }
+ { #2 ~ }
+ { #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP, TF]{\gtl_head_do:NN}
+% Test for emptyness then use \cs{gtl_head_do:NN}, placing the
+% \meta{true code} or \meta{false code} as appropriate.
+% \begin{macrocode}
+\cs_new:Npn \gtl_head_do:NNT #1#2#3
+ {
+ \gtl_if_empty:NTF #1
+ { }
+ { \gtl_head_do:NN #1 #2 #3 }
+ }
+\cs_new:Npn \gtl_head_do:NNF #1#2#3
+ {
+ \gtl_if_empty:NTF #1
+ {#3}
+ { \gtl_head_do:NN #1 #2 }
+ }
+\cs_new:Npn \gtl_head_do:NNTF #1#2#3#4
+ {
+ \gtl_if_empty:NTF #1
+ {#4}
+ { \gtl_head_do:NN #1 #2 #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gtl_get_left:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_get_left:NN #1#2
+ {
+ \exp_after:wN \@@_head:wnnnnn #1
+ { \gtl_set:Nn #2 { \q_no_value } }
+ { \gtl_set_eq:NN #2 \c_group_begin_gtl }
+ { \gtl_set_eq:NN #2 \c_group_end_gtl }
+ { \gtl_set:Nn #2 { ~ } }
+ { \gtl_set:Nn #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gtl_pop_left:N, \gtl_gpop_left:N}
+% \begin{macro}[rEXP]
+% {
+% \@@_pop_left:w,
+% \@@_pop_left_auxi:n,
+% \@@_pop_left_auxii:nnnw,
+% \@@_pop_left_auxiii:nnnw,
+% \@@_pop_left_auxiv:nn,
+% \@@_pop_left_auxv:nnn,
+% \@@_pop_left_auxvi:n
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_pop_left:N #1
+ {
+ \gtl_if_empty:NF #1
+ { \tl_set:Nx #1 { \exp_after:wN \@@_pop_left:w #1 } }
+ }
+\cs_new_protected:Npn \gtl_gpop_left:N #1
+ {
+ \gtl_if_empty:NF #1
+ { \tl_gset:Nx #1 { \exp_after:wN \@@_pop_left:w #1 } }
+ }
+\cs_new:Npn \@@_pop_left:w \s_@@ #1#2#3
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \tl_if_empty:nTF {#2}
+ { \@@_pop_left_auxi:n {#3} }
+ { \@@_pop_left_auxiv:nn {#2} {#3} }
+ }
+ { \@@_pop_left_auxv:nnn {#1} {#2} {#3} }
+ }
+\cs_new:Npn \@@_pop_left_auxi:n #1
+ {
+ \s_@@
+ { }
+ \@@_pop_left_auxii:nnnw { } { } #1 \q_nil \q_stop
+ }
+\cs_new:Npn \@@_pop_left_auxii:nnnw #1#2#3
+ {
+ \quark_if_nil:nTF {#3}
+ { \@@_pop_left_auxiii:nnnw {#1} {#2} {#3} }
+ { \@@_pop_left_auxii:nnnw { #1 #2 } { {#3} } }
+ }
+\cs_new:Npn \@@_pop_left_auxiii:nnnw #1#2#3#4 \q_stop
+ {
+ \tl_if_empty:nTF {#4}
+ { \exp_not:n { #2 {#1} } }
+ { \@@_pop_left_auxii:nnnw { #1 #2 } { {#3} } }
+ }
+\cs_new:Npn \@@_pop_left_auxiv:nn #1#2
+ {
+ \s_@@
+ { \tl_if_head_is_group:nT {#1} { { \tl_head:n {#1} } } }
+ { \tl_if_head_is_space:nTF {#1} { \exp_not:f } { \tl_tail:n } {#1} }
+ { \exp_not:n {#2} }
+ }
+\cs_new:Npn \@@_pop_left_auxv:nnn #1#2#3
+ {
+ \s_@@
+ { \if_false: { \fi: \@@_pop_left_auxvi:n #1 } }
+ { \exp_not:n {#2} }
+ { \exp_not:n {#3} }
+ }
+\cs_new:Npn \@@_pop_left_auxvi:n #1
+ {
+ \tl_if_empty:nF {#1}
+ {
+ \tl_if_head_is_group:nT {#1} { { \tl_head:n {#1} } }
+ {
+ \tl_if_head_is_space:nTF {#1}
+ { \exp_not:f } { \tl_tail:n } {#1}
+ }
+ }
+ \exp_after:wN \exp_not:n \exp_after:wN { \if_false: } \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gtl_pop_left:NN, \gtl_gpop_left:NN}
+% Getting the first token and removing it from the extended token list
+% is done in two steps.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_pop_left:NN #1#2
+ {
+ \gtl_get_left:NN #1 #2
+ \gtl_pop_left:N #1
+ }
+\cs_new_protected:Npn \gtl_gpop_left:NN #1#2
+ {
+ \gtl_get_left:NN #1 #2
+ \gtl_gpop_left:N #1
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Longest token list starting an extended token list}
+%
+% \begin{macro}[EXP]{\gtl_left_tl:N}
+% \begin{macro}[EXP]{\@@_left_tl:w}
+% If there is no leading chunk, return the middle chunk, otherwise
+% the first leading chunk.
+% \begin{macrocode}
+\cs_new:Npn \gtl_left_tl:N #1
+ { \exp_after:wN \@@_left_tl:w #1 }
+\cs_new:Npn \@@_left_tl:w \s_@@ #1#2#3
+ { \tl_if_empty:nTF {#1} { \exp_not:n {#2} } { \tl_head:n {#1} } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gtl_pop_left_tl:N, \gtl_gpop_left_tl:N}
+% If there is no left chunk, remove the middle chunk, hence the
+% resulting gtl will start with two empty brace groups (one for the
+% absence of leading chunk, and one for the emptyness of the middle
+% chunk). If there are left chunks replace the first one by an empty
+% chunk.
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_pop_left_tl:N #1
+ { \tl_set:Nx #1 { \exp_after:wN \@@_pop_left_tl:w #1 } }
+\cs_new_protected:Npn \gtl_gpop_left_tl:N #1
+ { \tl_gset:Nx #1 { \exp_after:wN \@@_pop_left_tl:w #1 } }
+\cs_new:Npn \@@_pop_left_tl:w \s_@@ #1#2#3
+ {
+ \s_@@
+ \tl_if_empty:nTF {#1}
+ { { } { } }
+ {
+ { { } \tl_tail:n {#1} }
+ { \exp_not:n {#2} }
+ }
+ { \exp_not:n {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{First item of an extended token list}
+%
+% \begin{macro}[EXP]{\gtl_left_item:NF}
+% \begin{macro}[EXP]{\@@_left_item:wF, \@@_left_item_auxi:nwF}
+% The left-most item of an extended token list is the head of its left
+% token list. The code thus starts like \cs{gtl_left_tl:N}. It ends
+% with a check to test if we should use the head, or issue the false
+% code.
+% \begin{macrocode}
+\cs_new:Npn \gtl_left_item:NF #1
+ { \exp_after:wN \@@_left_item:wF #1 }
+\cs_new:Npn \@@_left_item:wF \s_@@ #1#2#3
+ { \@@_left_item_auxi:nwF #1 {#2} \q_stop }
+\cs_new:Npn \@@_left_item_auxi:nwF #1#2 \q_stop #3
+ { \tl_if_blank:nTF {#1} {#3} { \tl_head:n {#1} } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[TF]{\gtl_pop_left_item:NN, \gtl_gpop_left_item:NN}
+% \begin{macro}
+% {\@@_pop_left_item:wNNN, \@@_pop_left_item_aux:nwnnNNN}
+% If there is no extra end-group characters, and if the balanced part
+% is blank, we cannot extract an item: return \texttt{false}. If the
+% balanced part is not blank, store its first item into |#4|, and
+% store the altered generalized token list into~|#6|, locally or
+% globally. Otherwise, pick out the part before the first extra
+% end-group character as |#1| of the second auxiliary, and do
+% essentially the same: if it is blank, there is no item, and if it is
+% not blank, pop its first item.
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn \gtl_pop_left_item:NN #1#2 { TF , T , F }
+ { \exp_after:wN \@@_pop_left_item:wNNN #1#2 \tl_set:Nx #1 }
+\prg_new_protected_conditional:Npnn \gtl_gpop_left_item:NN #1#2 { TF , T , F }
+ { \exp_after:wN \@@_pop_left_item:wNNN #1#2 \tl_gset:Nx #1 }
+\cs_new_protected:Npn \@@_pop_left_item:wNNN
+ \s_@@ #1#2#3 #4#5#6
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \tl_if_blank:nTF {#2} { \prg_return_false: }
+ {
+ \tl_set:Nx #4 { \tl_head:n {#2} }
+ #5 #6
+ {
+ \s_@@ { } { \tl_tail:n {#2} }
+ { \exp_not:n {#3} }
+ }
+ \prg_return_true:
+ }
+ }
+ {
+ \@@_pop_left_item_aux:nwnnNNN #1 \q_nil \q_stop
+ {#2} {#3} #4 #5 #6
+ }
+ }
+\cs_new_protected:Npn \@@_pop_left_item_aux:nwnnNNN
+ #1#2 \q_stop #3#4#5#6#7
+ {
+ \tl_if_blank:nTF {#1} { \prg_return_false: }
+ {
+ \tl_set:Nx #5 { \tl_head:n {#1} }
+ #6 #7
+ {
+ \s_@@
+ { { \tl_tail:n {#1} } \@@_strip_nil_mark:w #2 \q_mark }
+ { \exp_not:n {#3} }
+ { \exp_not:n {#4} }
+ }
+ \prg_return_true:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{First group in an extended token list}
+%
+% The functions of this section extract from an extended token list the
+% tokens that would be absorbed after |\def\foo|, namely tokens with no
+% begin-group nor end-group characters, followed by one group. Those
+% tokens are either left in the input stream or stored in a token list
+% variable, and the |pop| functions also remove those tokens from the
+% extended token list variable.
+%
+% \begin{macro}[EXP]{\gtl_left_text:NF}
+% \begin{macro}[EXP]
+% {
+% \@@_left_text:wF,
+% \@@_left_text_auxi:nwF,
+% \@@_left_text_auxii:wnwF,
+% \@@_left_text_auxiii:nnwF,
+% }
+% \begin{macrocode}
+\cs_new:Npn \gtl_left_text:NF #1
+ { \exp_after:wN \@@_left_text:wF #1 }
+\cs_new:Npn \@@_left_text:wF \s_@@ #1#2#3
+ {
+ \tl_if_empty:nTF {#1}
+ { \@@_left_text_auxi:nwF {#2} \q_stop }
+ { \@@_left_text_auxi:nwF #1 \q_stop }
+ }
+\cs_new:Npn \@@_left_text_auxi:nwF #1#2 \q_stop
+ { \@@_left_text_auxii:wnwF #1 \q_mark { } \q_mark \q_stop }
+\cs_new:Npn \@@_left_text_auxii:wnwF #1 #
+ { \@@_left_text_auxiii:nnwF {#1} }
+\cs_new:Npn \@@_left_text_auxiii:nnwF #1#2 #3 \q_mark #4 \q_stop #5
+ { \tl_if_empty:nTF {#4} {#5} { \exp_not:n { #1 {#2} } } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gtl_pop_left_text:N, \gtl_gpop_left_text:N}
+% \begin{macro}[rEXP]
+% {
+% \@@_pop_left_text:w,
+% \@@_pop_left_text_auxi:n,
+% \@@_pop_left_text_auxii:wnw,
+% \@@_pop_left_text_auxiii:nnw,
+% \@@_pop_left_text_auxiv:nw,
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \gtl_pop_left_text:N #1
+ { \tl_set:Nx #1 { \exp_after:wN \@@_pop_left_text:w #1 } }
+\cs_new_protected:Npn \gtl_gpop_left_text:N #1
+ { \tl_gset:Nx #1 { \exp_after:wN \@@_pop_left_text:w #1 } }
+\cs_new:Npn \@@_pop_left_text:w \s_@@ #1#2#3
+ {
+ \s_@@
+ \tl_if_empty:nTF {#1}
+ {
+ { }
+ { \@@_pop_left_text_auxi:n {#2} }
+ }
+ {
+ { \@@_pop_left_text_auxiv:nw #1 \q_nil \q_mark }
+ { \exp_not:n {#2} }
+ }
+ { \exp_not:n {#3} }
+ }
+\cs_new:Npn \@@_pop_left_text_auxi:n #1
+ {
+ \@@_pop_left_text_auxii:wnw #1
+ \q_nil \q_mark { } \q_mark \q_stop
+ }
+\cs_new:Npn \@@_pop_left_text_auxii:wnw #1 #
+ { \@@_pop_left_text_auxiii:nnw {#1} }
+\cs_new:Npn \@@_pop_left_text_auxiii:nnw #1#2#3 \q_mark #4 \q_stop
+ {
+ \tl_if_empty:nTF {#4}
+ { \@@_strip_nil_mark:w #1 }
+ { \@@_strip_nil_mark:w #3 \q_mark }
+ }
+\cs_new:Npn \@@_pop_left_text_auxiv:nw #1
+ {
+ { \@@_pop_left_text_auxi:n {#1} }
+ \@@_strip_nil_mark:w
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Counting tokens}
+%
+% \begin{macro}[EXP]{\@@_tl_count:n}
+% \begin{macro}[EXP]{\@@_tl_count_loop:n, \@@_tl_count_test:w}
+% A more robust version of \cs{tl_count:n}, which will however break
+% if the token list contains \cs{q_stop} at the outer brace level.
+% This cannot happen when \cs{@@_tl_count:n} is called with lists of
+% braced items. The technique is to loop, and when seeing
+% \cs{q_mark}, make sure that this is really the end of the list.
+% \begin{macrocode}
+\cs_new:Npn \@@_tl_count:n #1
+ { \int_eval:n { 0 \@@_tl_count_loop:n #1 \q_nil \q_stop } }
+\cs_new:Npn \@@_tl_count_loop:n #1
+ {
+ \quark_if_nil:nTF {#1}
+ { \@@_tl_count_test:w }
+ { + 1 \@@_tl_count_loop:n }
+ }
+\cs_new:Npn \@@_tl_count_test:w #1 \q_stop
+ { \tl_if_empty:nF {#1} { + 1 \@@_tl_count_loop:n #1 \q_stop } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\gtl_extra_begin:N, \gtl_extra_end:N}
+% \begin{macro}[EXP]{\@@_extra_begin:w, \@@_extra_end:w}
+% Count the number of extra end-group or of extra begin-group
+% characters in an extended token list. This is the number of items
+% in the first or third brace groups. We cannot use \cs{tl_count:n},
+% as \pkg{gtl} is meant to be robust against inclusion of quarks.
+% \begin{macrocode}
+\cs_new:Npn \gtl_extra_end:N #1
+ { \exp_after:wN \@@_extra_end:w #1 }
+\cs_new:Npn \@@_extra_end:w \s_@@ #1#2#3
+ { \@@_tl_count:n {#1} }
+\cs_new:Npn \gtl_extra_begin:N #1
+ { \exp_after:wN \@@_extra_begin:w #1 }
+\cs_new:Npn \@@_extra_begin:w \s_@@ #1#2#3
+ { \@@_tl_count:n {#3} }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\gtl_count_tokens:N}
+% \begin{macro}[rEXP]
+% {
+% \@@_count_tokens:w,
+% \@@_count_auxi:nw,
+% \@@_count_auxii:w,
+% \@@_count_auxiii:n
+% }
+% \begin{macrocode}
+\cs_new:Npn \gtl_count_tokens:N #1
+ { \exp_after:wN \@@_count_tokens:w #1 }
+\cs_new:Npn \@@_count_tokens:w \s_@@ #1#2#3
+ {
+ \int_eval:n
+ { -1 \@@_count_auxi:nw #1 {#2} #3 \q_nil \q_stop }
+ }
+\cs_new:Npn \@@_count_auxi:nw #1
+ {
+ \quark_if_nil:nTF {#1}
+ { \@@_count_auxii:w }
+ {
+ + 1
+ \@@_count_auxiii:n {#1}
+ \@@_count_auxi:nw
+ }
+ }
+\cs_new:Npn \@@_count_auxii:w #1 \q_stop
+ {
+ \tl_if_empty:nF {#1}
+ {
+ + 2
+ \@@_count_auxi:nw #1 \q_stop
+ }
+ }
+\cs_new:Npn \@@_count_auxiii:n #1
+ {
+ \tl_if_empty:nF {#1}
+ {
+ \tl_if_head_is_group:nTF {#1}
+ {
+ + 2
+ \exp_args:No \@@_count_auxiii:n { \use:n #1 }
+ }
+ {
+ + 1
+ \tl_if_head_is_N_type:nTF {#1}
+ { \exp_args:No \@@_count_auxiii:n { \use_none:n #1 } }
+ { \exp_args:Nf \@@_count_auxiii:n {#1} }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\@@_end_package_hook:
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \endinput
diff --git a/macros/generic/gtl/gtl.ins b/macros/generic/gtl/gtl.ins
new file mode 100644
index 0000000000..82595bd04f
--- /dev/null
+++ b/macros/generic/gtl/gtl.ins
@@ -0,0 +1,23 @@
+\input l3docstrip.tex
+\askforoverwritefalse
+
+\preamble
+
+Do not distribute a modified version of this file.
+
+Communicate any suggestions for changing this package
+to Bruno Le Floch (blflatex+gtl@gmail.com).
+
+\endpreamble
+% stop docstrip adding \endinput
+\postamble
+\endpostamble
+
+\keepsilent
+
+% the package
+\generate{%
+ \file{gtl.sty} {\from{gtl.dtx} {package}}%
+}
+
+\endbatchfile
diff --git a/macros/generic/gtl/gtl.pdf b/macros/generic/gtl/gtl.pdf
new file mode 100644
index 0000000000..ad58b0763c
--- /dev/null
+++ b/macros/generic/gtl/gtl.pdf
Binary files differ
diff --git a/macros/generic/hlist/README b/macros/generic/hlist/README
new file mode 100644
index 0000000000..ea0b68508f
--- /dev/null
+++ b/macros/generic/hlist/README
@@ -0,0 +1,21 @@
+___________________________________
+
+ L'extension
+ hlist
+
+ v0.11
+
+ 8 aout 2017
+___________________________________
+
+Authors : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail : unbonpetit@netc.fr (CT)
+ Commentaires, signalements de bugs et
+ suggestions bienvenus
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Horizontal and columned lists
diff --git a/macros/generic/hlist/hlist-fr.pdf b/macros/generic/hlist/hlist-fr.pdf
new file mode 100644
index 0000000000..5501858df4
--- /dev/null
+++ b/macros/generic/hlist/hlist-fr.pdf
Binary files differ
diff --git a/macros/generic/hlist/hlist-fr.tex b/macros/generic/hlist/hlist-fr.tex
new file mode 100644
index 0000000000..c4b931f842
--- /dev/null
+++ b/macros/generic/hlist/hlist-fr.tex
@@ -0,0 +1,463 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est la documentation du package "hlist"
+%
+% Fichier compilé avec pdflatex
+\documentclass[french,a4paper,10pt]{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[margin=2cm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,hlist}
+\usepackage[scaled=0.8]{luximono}
+\frenchbsetup{og=«,fg=»}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\def\HLIST{\texttt{\hlstname}\xspace}
+\makeatletter
+\def\code{\expandafter\code@i\string}
+\def\code@i#1{%
+ \begingroup
+ \par\nobreak\medskip\parindent0pt
+ \leftskip.1\linewidth
+ \catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+ \let\do\@makeother \dospecials
+ \ttfamily\small\@noligs
+ \obeylines\obeyspaces
+ \def\code@ii##1#1{##1\par\medbreak\endgroup}%
+ \code@ii
+}
+\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
+
+\newcommand\disable@lig[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\make@car@active[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~}%
+}
+
+\newcommand\exemple{%
+ \begingroup
+ \parskip\z@
+ \exemple@}
+
+\newcommand\exemple@{%
+ \medbreak\noindent
+ \begingroup
+ \let\do\@makeother\dospecials
+ \make@car@active\ { {}}%
+ \make@car@active\^^M{\par\leavevmode}%
+ \make@car@active\^^I{\space\space}%
+ \make@car@active\,{\leavevmode\kern\z@\string,}%
+ \make@car@active\-{\leavevmode\kern\z@\string-}%
+ \make@car@active\>{\leavevmode\kern\z@\string>}%
+ \make@car@active\<{\leavevmode\kern\z@\string<}%
+ \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+ \exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+ \def\@tempa##1#1{\exemple@@@{##1}}%
+ \@tempa
+}
+
+\newcommand\exemple@@@[1]{%
+ \xdef\the@code{#1}%
+ \endgroup
+ \begingroup
+ \fboxrule0.4pt \fboxsep=5pt
+ \let\breakboxparindent\z@
+ \def\bkvz@top{\hrule\@height\fboxrule}%
+ \def\bkvz@bottom{\hrule\@height\fboxrule}%
+ \let\bkvz@before@breakbox\relax
+ \def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
+ \def\bkvz@left{\vrule\@width\fboxrule\kern\fboxsep}%
+ \def\bkvz@right{\kern\fboxsep\vrule\@width\fboxrule}%
+ \breakbox
+ \kern.5ex\relax
+ \begingroup
+ \ttfamily\small\the@code\par
+ \endgroup
+ \kern3pt
+ \hrule height0.1pt width\linewidth depth0.1pt
+ \vskip5pt
+ \newlinechar`\^^M\everyeof{\noexpand}\scantokens{#1}\par
+ \endbreakbox
+ \endgroup
+ \medbreak
+ \endgroup
+}
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+\def\longfrhlstdate@i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\edef\longfrhlstdate{\expandafter\longfrhlstdate@i\hlstdate\@nil}
+\makeatother
+\begingroup
+ \catcode`\_11
+ \gdef\cleval#1#2{%
+ \bigbreak\noindent
+ \hbox to .25\linewidth{%
+ \color{teal}\bfseries\ttfamily
+ \detokenize{#1}=$\langle$\detokenize{#2}$\rangle$\hss}\kern2.5em
+ (\textit{Défaut} : {\color{teal}\ttfamily
+ \skv_eearg\skv_ifempty{\useKV[hlist]{#1}}
+ {\detokenize{{}}}
+ {\detokenize\expandafter\expandafter\expandafter{\useKV[hlist]{#1}}}})%
+ \par\nobreak
+ }
+\endgroup
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries L'extension pour \TeX/\LaTeX\par \Huge \hlstname\par}
+ \bigbreak
+ v \hlstver
+ \smallbreak
+ \longfrhlstdate
+ \vskip1.5cm
+ Christian \bsc{Tellechea}\par
+ \texttt{unbonpetit@netc.fr}\par
+ \endgroup
+ \vskip2cm
+ \leftskip=.2\linewidth \rightskip=.2\linewidth \small
+ Cette petite extension sans prétention permet de créer des listes horizontale d'items; s'ils s'étendent sur plus d'une ligne, ils seront alignés les uns au-dessous des autres, en colonnes de largeurs égales, un peu à la manière d'un tableau.
+\end{titlepage}
+\parindent1.5em
+
+\section{Comment ça marche}
+Au tout début, j'avais écrit ce code pour présenter des questions courtes \emph{en ligne}, comme on peut le voir parfois dans les manuels scolaires, pour une économie de place verticale dans mes feuilles d'exercices ou de contrôles\footnote{On ne trouve pas ce genre de questions dans mes contrôles !} :
+
+\exemple/Qu'est ce que \TeX ?
+\begin{hlist}3
+ \hitem Une marque \emph{distributeur} de vêtements que l'on trouve dans l'enseigne Carrefour;
+ \hitem Une unité de mesure de la finesse de filaments;
+ \hitem Un logiciel de composition créé par Donald \bsc{Knuth};
+ \hitem Le nom \emph{de scène} de l'humoriste Jean-Christophe \bsc{Le Texier};
+ \hitem Une membrane coupe-vent.
+\end{hlist}/
+
+Le code initial dont je me suis servi pendant longtemps était bien plus basique que celui de cette extension; depuis, il s'est complexifié, mais les méthodes qu'il mettait en \oe uvre sont restées les mêmes. Or, j'avais programmé les listes horizontales en utilisant des \emph{boites} de \TeX{} et non pas des \emph{alignements}. Évidemment, il semble plus naturel de faire appel aux alignements de \TeX{} pour réaliser une telle tâche, mais leur mise en \oe uvre est plus délicate que celle des boites et j'ai été partisan du moindre effort (et je le suis toujours).
+
+Récemment\footnote{\texttt{http://forum.mathematex.net/latex-f6/macros-a-parametres-indefini-t16733.html\char`\#p155215}}, alors que la finalisation du code avait déjà commencée, j'ai découvert que l'extension \texttt{Tasks} offrait \emph{presque} les mêmes fonctionnalités que \HLIST. Comme \emph{presque} n'est pas synonyme d'\emph{exactement}, je me suis finalement décidé à publier cette extension. Il n'est bien entendu pas dans mon intention de dénigrer le travail de C. \bsc{Niederberger} et encore moins de considérer \HLIST comme meilleure que \texttt{Tasks}, mais au niveau des principales différences entre \texttt{Tasks} et \HLIST, on peut citer :
+\begin{itemize}
+ \item \HLIST peut être utilisé avec \TeX{} (\eTeX en réalité) alors que \texttt{Tasks} requiert \LaTeX;
+ \item les listes de \HLIST peuvent être imbriquées tandis que celles de \texttt{Tasks} ne le peuvent pas;
+ \item les changements de catcode (et donc le « verbatim ») sont possibles dans les listes de \HLIST et pas dans celles de \texttt{Tasks};
+ \item le code source de \HLIST est plus concis que celui de \texttt{Tasks} (écrit en \LaTeX3) et, contrairement à ce dernier, \HLIST ne fait appel à aucune extension tierce\footnote{Vu les facilités prétendument offertes par \LaTeX3 et les extensions chargées par \texttt{Tasks}, je suis resté médusé face à la longueur du code de \texttt{Tasks}. Je ne m'explique pas une telle différence avec la taille de \HLIST, alors que \HLIST embarque son propre système de clés/valeurs, ses macros de développement, etc. Avant de me lancer dans une critique sans ménagement de \LaTeX3 et comme j'ai un fort soupçon que quelque chose m'échappe là-dedans, je serais très reconnaissant si quelqu'un, capable de comprendre ce qui se passe, pouvait me fournir une explication.};
+ \item la documentation de \texttt{Tasks} est en anglais (son auteur est allemand); celle de \HLIST est en français. Cesser de docilement se plier à cette prétendue nécessité de fournir une documentation en anglais, fût-ce pour des extensions de \TeX/\LaTeX, compte \emph{beaucoup} à mes yeux.
+\end{itemize}
+
+En revanche, puisque les deux extensions s'appuient sur des constructions de boites, \HLIST partage avec \texttt{Tasks} le principal défaut : une coupure de page ne peut pas avoir lieu au sein d'un item qui s'étendrait sur plusieurs lignes.
+
+\section{Syntaxe}
+L'environnement \HLIST peut être appelé de ces deux manières:
+\begin{itemize}
+ \item façon \LaTeX: \begin{tabular}[t]{l}\relax\verb|\begin{hlist}[<paramètres>]<nombre>|\\\hskip2em \ttfamily contenu de l'environnement\\\verb|\end{hlist}|\end{tabular}
+ \item façon \TeX: \begin{tabular}[t]{l}\relax\verb|\hlist[<paramètres>]<nombre>|\\\hskip2em \ttfamily contenu de l'environnement\\\verb|\endhlist|\end{tabular}
+\end{itemize}
+
+Les options, décrites plus loin, seront celles qui s'appliquent à cette liste et le \verb|<nombre>| est le nombre de colonnes demandées.
+
+L'environnement \HLIST doit commencer par un item, c'est-à-dire par la macro \verb|\hitem|, éventuellement suivie des arguments optionnels suivants :
+
+\begin{enumerate}
+ \item "\verb|*|" signifiant que cet item doit commencer une nouvelle ligne;
+ \item "\texttt{>}" signifiant que cet item doit s'étendre sur toutes les colonnes restant disponibles sur la ligne en cours ;
+ \item l'argument entre crochets "\verb|[<label>]|" spécifie ce que doit être la numérotation de cet item (voir la description de cette fonctionnalité plus loin);
+ \item l'argument entre parenthèses "\verb|(<n>)|" où \verb|<n>| est un entier, indique sur combien de colonnes doit d'étendre cet item.
+\end{enumerate}
+
+Il faut noter que, s'ils sont présents tous les deux, l'argument optionnel "\verb|*|" \emph{doit} précéder "\texttt{>}". En revanche pour les deux derniers arguments optionnels, l'ordre n'a pas d'importance et donc "\verb|[<label>](<n>)|" et accepté tout comme "\verb|(<n>)[<label>]|".
+
+\exemple/\def\txtA{Après le pain, l'éducation est le premier besoin du peuple.}
+\def\txtB{Comment se fait-il que les enfants étant si intelligents,
+ la plupart des hommes soient bêtes ?\par Cela doit tenir à l'éducation.}
+\hlist3
+ \hitem \txtA \hitem \txtB \hitem \txtA
+ \hitem \txtA \hitem> \txtB
+ \hitem*> \txtB
+ \hitem(2) \txtB \hitem \txtA
+\endhlist/
+
+On peut voir à la page~\pageref{show frame} cette même liste horizontale avec des cadres tracés autour des boites, ce qui peut rendre les choses plus claires pour cet exemple, volontairement complexe et peu réaliste.
+
+\section{Choix des paramètres}
+Nous avons déjà vu qu'écrire \verb|\hlist[<paramètres>]| permet de régler des \verb|<paramètres>| spécifiques à la liste qui suit.
+
+On peut également régler des \verb|<paramètres>| pour toutes les \HLIST à venir avec
+\begin{center}
+\verb|\sethlist{<paramètres>}|
+\end{center}
+mais aussi régler des \verb|<paramètres>| \emph{par défaut} pour les \HLIST à venir avec
+\begin{center}
+\verb|\setdefaulthlist{<paramètres>}|
+\end{center}
+
+Chaque paramètre est de la forme \verb|<clé>=<valeur>| où la \verb|<clé>| est le plus souvent constituée de deux mots (l'espace entre ces deux mots est \emph{nécessaire}). Les espaces avant et après la \verb|<clé>| et la \verb|<valeur>| sont ignorés.
+
+Lorsqu'une \verb|<clé>| est seule, elle est comprise comme un \emph{booléen} qui vaut \verb|true|. Pour indiquer qu'un booléen est faux, il faut assigner la valeur \verb|false|.
+
+Les paramètres de \emph{placement} sont résumés dans le schéma ci-dessous:\par\kern10pt \nobreak
+
+ {\ttfamily\footnotesize
+ \begin{tikzpicture}[line join=round,x=1.33cm,y=1.33cm]
+ % tracé du paragraphe précédent la hlist
+ \draw [dash pattern=on 2pt off 2pt] (11.6,7.6)--(11.1,7.6);
+ \draw(11.1,7.6)--(1.6,7.6)--(1.6,7.1)--(0,7.1)--(0,6.6)--(11.1,6.6);
+ \draw[dash pattern=on 2pt off 2pt] (11.6,6.6)--(11.1,6.6);
+ \draw[-stealth](0,8)--(1.6,8)node[midway,anchor=south]{\string\parindent};
+ % tracé du 1er label
+ \draw(1.2,5.7)--(1.8,5.7)--(1.8,5.3)--(1.2,5.3);
+ \draw[fill=lightgray](1.2,5.7)--(1.6,5.7)--(1.6,5.3)--(1.2,5.3)--cycle;
+ \draw(1.4,5.5)node[anchor=center]{\normalfont\large\bfseries1.};
+ \draw[-stealth](0,5.8)--(1,5.8)node [midway,anchor=south]{left margin};
+ \draw[-stealth](1,6.2)--(2.1,6.2)node [midway,anchor=south]{item offset};
+ \draw[line width=1pt,red](1,5.6)--(1.2,5.6);
+ \draw[-stealth](2.1,5.8)--(1.8,5.8)node [midway,anchor=south]{label sep};
+
+ \draw[-stealth](1.8,5)--(1.2,5)node [pos=0,anchor=south east]{label width};
+ \draw[-stealth](3.2,6.6)--(3.2,5.7)node[midway,anchor=west]{\string\parskip+pre skip};
+ % tracé du 1er texte
+ \draw(2.1,5.7)--(5.5,5.7)--(5.5,4.1)--(2.1,4.1)--cycle;
+ % tracé du 2e label
+ \draw[-stealth](5.5,5.8)--(6.3,5.8)node[midway,anchor=south]{col sep};
+ \draw(6.3,5.7)--(7,5.7)--(7,5.3)--(6.3,5.3)--cycle;
+ % tracé du 2e texte
+ \draw [dash pattern=on 2pt off 2pt](9.5,5.7)--(8.9,5.7);
+ \draw(8.9,5.7)--(7.3,5.7)--(7.3,4.9)--(8.9,4.9);
+ \draw [dash pattern=on 2pt off 2pt](8.9,4.9)--(9.5,4.9);
+ % tracé 2e ligne
+ \draw(1.2,3.4)--(1.8,3.4)--(1.8,3)--(1.2,3)--cycle;
+ \draw [dash pattern=on 2pt off 2pt](3.7,3.4)--(3,3.4);
+ \draw(3,3.4)--(2.1,3.4)--(2.1,3);
+ \draw [dash pattern=on 2pt off 2pt](2.1,3)--(2.1,2.7);
+ \draw[-stealth](2.4,4.1)--(2.4,3.4)node[midway,anchor=west]{\string\parskip+item sep};
+ \end{tikzpicture}}
+
+\section{Placement de la liste de plus haut niveau}
+\cleval{pre skip}{ressort}
+Valeur du \verb|<ressort>| vertical inséré avant la liste \emph{de plus haut niveau d'imbrication}.
+
+\cleval{post skip}{ressort}
+Valeur du \verb|<ressort>| vertical inséré après la liste \emph{de plus haut niveau d'imbrication}.
+
+\cleval{left margin}{dimension}
+Valeur du décalage vers la droite de la liste \emph{de plus haut niveau d'imbrication}.
+
+\exemple/\parindent=2em
+Ceci est un paragraphe s'étendant sur deux ligne et présentant
+une liste de questions mises en forme à l'aide de l'extension \texttt{hlist}
+et avec les paramètres par défaut :
+\hlist3% paramètres par défaut
+ \hitem Question 1 \hitem Question 2
+ \hitem Une question 3
+ \hitem Question 4 \hitem Question 5
+\endhlist
+Ceci est un paragraphe s'étendant sur deux ligne et présentant
+une liste de questions mises en forme à l'aide de l'extension \texttt{hlist}
+et avec des paramètres spécifiés par argument optionnel :
+\hlist[pre skip = 0pt , post skip = 4pt , left margin = \parindent]3
+ \hitem Question 1 \hitem Question 2
+ \hitem Une question 3
+ \hitem Question 4 \hitem Question 5
+\endhlist
+Suite du texte/
+
+\section{Label et texte des items}
+\cleval{item offset}{dimension}
+Cette \verb|<dimension>| est la distance entre la frontière gauche de la boite contenant le label et la frontière gauche de la boite contenant le texte de l'item.
+
+\cleval{label sep}{dimension}
+Espacement entre la boite contenant le label et celle contenant le texte de l'item.
+
+\cleval{label width}{dimension}
+C'est la dimension de la boite accueillant le label. Le label lui-même (en gris sur la figure) peut être plus court que cette dimension auquel cas, il faut jouer avec la clé «\verb|label align|» (voir plus bas) pour indiquer quel alignement on souhaite.
+
+Si en revanche le label est \emph{plus large} que la largeur «\verb|label width|», alors un dépassement du type «\texttt{Overful hbox}» aura lieu, sauf si on met la clé \verb|autoindent| à la valeur \verb|true| (voir plus bas).\medbreak
+
+Les trois clés «\verb|item offset|», «\verb|label sep|» et «\verb|label width|» sont en interdépendance pour le placement du label et plusieurs cas peuvent se présenter :
+
+\begin{itemize}
+ \item si l'une des 3 trois (et seulement \emph{une seule} sur les trois) vaut «\verb|*|», alors, les 2 autres sont calculées de telles sorte que l'égalité suivante soit vérifiée
+ \begin{center}
+ \verb|item offset|${}={}$\verb|label sep|${}+{}$\verb|label width|
+ \end{center}
+ \item si \verb|item offset|${}>{}$\verb|label sep|${}+{}$\verb|label width| comme c'est le cas sur la figure, alors la différence entre le membre de gauche et celui de droite (trait rouge sur la figure) est meublé avec un \verb|\hfill|;
+ \item si \verb|item offset|${}<{}$\verb|label sep|${}+{}$\verb|label width|, ce qui ne devrait pas se produire, un avertissement sera émis.
+\end{itemize}
+
+\cleval{label align}{lettre}
+Cette clé représente la consigne d'alignement du label à l'intérieur de sa boite. Elle n'a de sens que lorsque le label occupe moins de place horizontale que «\verb|label width|». On peut demander une consigne \verb|l|, \verb|r| ou \verb|c| selon que l'on souhaite un alignement à gauche, à droite ou centré.
+
+Seule le première lettre \emph{minuscule} de la valeur est prise en compte. La consigne \verb|left| est donc équivalente à \verb|l|.
+
+\cleval{label}{code}
+Le \verb|<code>| sera exécuté pour afficher le label. Pour afficher des labels en rapport avec le rang de l'item dans la liste, \HLIST met à disposition les macros suivantes :
+\begin{itemize}
+ \item \verb|\arabic{<nom>}| pour afficher un entier;
+ \item \verb|\roman{<nom>}| et \verb|\Roman{<nom>}| pour afficher des nombres romains, en minuscule ou majuscule ;
+ \item \verb|\alpha{<nom>}| et \verb|\Alpha{<nom>}| pour afficher des lettres, minuscules ou majuscules.
+\end{itemize}
+
+L'argument de ces macros est le \emph{nom} d'un compteur au format \LaTeX{}, c'est-à-dire que le registre de compteur qui se trouve derrière est \verb|\c@<nom>|\footnote{Les compteurs de \LaTeX{} pour l'environnement \texttt{enumerate}, à savoir \texttt{enumi}, \texttt{enumii}, etc sont bien évidemment admis dans les arguments des macros ci-dessus. En règle générale, tout compteur de \LaTeX{} l'est également (\texttt{section}, \texttt{equation}, \texttt{page}, \texttt{footnote} ou autre).}.
+
+\HLIST fournit les compteurs nommés «\verb|hilsti|» pour les listes de plus haut niveau, «\verb|hilstii|» pour les listes imbriquées de niveau~1, «\verb|hilstiii|» pour celle de niveau~2, etc.
+
+\cleval{pre label}{code}
+Contient le \verb|<code>| qui sera exécutée avant d'afficher le label.
+
+\cleval{post label}{code}
+Contient le \verb|<code>| qui sera exécutée après avoir affiché le label.
+
+\exemple/Exemple 1 :\hlist[label=\alpha{hlisti})]3
+ \hitem question 1 \hitem question 2 \hitem question 3 \hitem question 4
+ \endhlist
+Exemple 2:\hlist[label=---]3
+ \hitem question 1 \hitem question 2 \hitem question 3 \hitem question 4
+ \endhlist
+Exemple 3:\hlist[pre label=\begingroup\color{red}\itshape,label=\roman{hlisti}-,post label=\endgroup]3
+ \hitem question 1 \hitem question 2 \hitem question 3 \hitem question 4
+ \endhlist/
+
+Lorsque l'argument optionnel entre crochet de \verb|\hitem| est vide, aucun label ne sera affiché et la valeur «\texttt{item offset}» sera nulle pour cet item. Cela peut s'avérer utile dans le cas de listes imbriquées :
+
+\exemple|Exemple avec 2\up e label numéroté :
+\hlist3
+ \hitem question 1
+ \hitem% label numéroté pour cet item !
+ \hlist[label=\alpha{hlistii}.,col sep=1em]3
+ \hitem XX \hitem YY \hitem ZZ
+ \endhlist
+ \hitem question 3 \hitem question 4 \hitem question 5
+\endhlist
+
+Même exemple avec 2\up e label forcé à vide :
+\hlist3
+ \hitem question 1
+ \hitem[]% pas de label pour cet item !
+ \hlist[label=\arabic{hlisti}\alpha{hlistii}.]3
+ \hitem XX \hitem YY \hitem ZZ
+ \endhlist
+ \hitem question 3 \hitem question 4 \hitem question 5
+\endhlist|
+
+\cleval{pre label}{code}
+Il s'agit du \verb|<code>| qui est exécuté juste avant que le label soit affiché.
+
+\cleval{post label}{code}
+Cette valeur contient le \verb|<code>| qui est exécuté juste après l'affichage du label.
+
+\cleval{resume}{booléen}
+Lorsque cette clé est assignée à \verb|true|, la numérotation de la liste n'est pas réinitialisée lorsque la macro \verb|\hlist| est exécutée.
+
+\cleval{autoindent}{booléen}
+Lorsque la largeur du label dépasse la dimension «\verb|label width|, nous avons vu qu'un avertissement du type \texttt{Overful hbox} est produit. Lorsque la clé «\texttt{autoindent}» est mise à \verb|true|, ce dépassement se fait en \emph{indentant la première ligne du texte du label} de telle sorte que subsiste entre le label et le texte l'espace de largeur «\texttt{label sep}». Il n'y a alors plus d'avertissement émis par \TeX.
+
+Ceci fonctionne évidemment pour un schéma de label \emph{global} passé par la clé «\verb|label={<code>}|», mais trouve surtout une utilité pour des labels \emph{exceptionnels} spécifiés par \verb|\hitem[<label>]|.
+
+\exemple|\def\txt{et voici le texte de la question}
+\hlist[item sep=5pt]3
+ \hitem Question 1, \txt \hitem Question 2, \txt \hitem[Bonus] Question 3, \txt
+ \hitem Question 4, \txt \hitem Question 5, \txt
+\endhlist
+Texte intermédiaire...
+\hlist[item sep=5pt,autoindent=true]3
+ \hitem Question 1, \txt \hitem Question 2, \txt \hitem[Bonus] Question 3, \txt
+ \hitem Question 4, \txt \hitem Question 5, \txt
+\endhlist|
+
+\cleval{pre item}{code}
+Le code exécuté juste avant le texte de l'item.
+
+\cleval{post item}{code}
+Le code exécuté juste après le texte de l'item.
+
+\cleval{show label}{booléen}
+Cette clé, lorsqu'elle est assignée à \verb|false|, interdit l'affichage du label et donc, tout se passe comme si les dimensions \texttt{item offset}, \texttt{label width} et \texttt{label sep} valaient \verb|0pt|.
+
+\exemple|Exemple avec \texttt{show label} :
+\hlist3
+ \hitem Question 1 \hitem Question 2
+ \hitem Une question 3
+ \hitem Question 4 \hitem Question 5
+\endhlist
+Exemple sans \texttt{show label} :
+\hlist[show label=false]3
+ \hitem Question 1 \hitem Question 2
+ \hitem Une question 3
+ \hitem Question 4 \hitem Question 5
+\endhlist|
+
+\cleval{list parindent}{dimension}
+Cette clé spécifie l'indentation des paragraphes de l'item, sauf pour le premier paragraphe de chaque item qui reste non indenté.
+
+\cleval{show frame}{booléen}
+Cette clé, lorsqu'elle est assignée à \verb|true|, encadre les boites contenant le label et le texte de l'item.
+
+\label{show frame}\exemple/\def\txtA{Après le pain, l'éducation est le premier besoin du peuple.}
+\def\txtB{Comment se fait-il que les enfants étant si intelligents,
+ la plupart des hommes soient bêtes ?\par Cela doit tenir à l'éducation.}
+\hlist[show frame=true]3
+ \hitem \txtA \hitem \txtB \hitem \txtA
+ \hitem \txtA \hitem> \txtB
+ \hitem*> \txtB
+ \hitem(2) \txtB \hitem \txtA
+\endhlist/
+
+\section{Le code}
+Contrairement à mes habitudes, le code est \emph{abondamment} commenté, trop sans doute. J'espère que cela constituera une source d'information exploitable pour les utilisateurs de cette extension qui souhaitent y comprendre quelque chose ou modifier par eux-même une fonctionnalité.
+
+Toute suggestion, remontée de bug, remarque, demande, ajout ou modification de fonctionnalité est bienvenue; dans ce cas, j'invite les utilisateurs de \HLIST à m'envoyer un email.\medbreak
+
+Le code ci-dessous est l'exact verbatim du fichier \verb|hlist.tex| :
+
+\lstinputlisting[
+ language=TeX,
+ moretexcs={unless,ifcsname,ifdefined,detokenize,numexpr,dimexpr,glueexpr,unexpanded},
+ basicstyle=\small\ttfamily\color{black!25},
+ identifierstyle=\bfseries\color{white},%
+ backgroundcolor=\color{black!85},
+ keywordstyle=\bfseries\color{orange},
+ commentstyle=\color{cyan!66},
+ columns=fixed,
+ alsoletter={\_},
+ tabsize=2,
+ extendedchars=true,
+ showspaces=false,
+ showstringspaces=false,
+ numbers=left,
+ numberstyle=\tiny\ttfamily\color{black},
+ breaklines=true,
+ prebreak={\hbox{$\rhookswarrow$}},
+ breakindent=3em,
+ breakautoindent=true,
+ xleftmargin=1em,
+ xrightmargin=0pt,
+ lineskip=0pt,
+ numbersep=1em,
+ classoffset=1,
+ alsoletter={\_},
+ morekeywords={setKVdefault,setKV,useKVdefault,useKV,ifboolKV,%
+ hlist,endhlist,hitem,hlst_arabic,hlst_roman,%
+ hlst_Roman,hlst_alpha,hlst_Alpha,inithlist,%
+ sethlist,setdefaulthlist},
+ keywordstyle=\bfseries\color{red!85!black},
+ classoffset=0,
+ ]{hlist.tex}
+\end{document} \ No newline at end of file
diff --git a/macros/generic/hlist/hlist.sty b/macros/generic/hlist/hlist.sty
new file mode 100644
index 0000000000..b122bbd7f7
--- /dev/null
+++ b/macros/generic/hlist/hlist.sty
@@ -0,0 +1,7 @@
+% !TeX encoding = ISO-8859-1
+\input hlist.tex
+\ProvidesPackage{hlist}[\hlstdate\space v\hlstver\space Horizontal lists (CT)]
+\setKVdefault[hlist]{
+ pre label = \bfseries% code exécuté au début de la boite contenant le label
+}
+\endinput \ No newline at end of file
diff --git a/macros/generic/hlist/hlist.tex b/macros/generic/hlist/hlist.tex
new file mode 100644
index 0000000000..1ded7bfb69
--- /dev/null
+++ b/macros/generic/hlist/hlist.tex
@@ -0,0 +1,617 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code commenté de l'extension "hlist"
+%
+% IMPORTANT : pour que les commentaires s'affichent correctement,
+% ouvrir ce fichier avec l'encodage ISO-8859-1
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\hlstname {hlist} %
+\def\hlstver {0.11} %
+% %
+\def\hlstdate {2017/08/08} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%
+% % http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% --------------------------------------------------------------------
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Christian Tellechea
+% email: unbonpetit@netc.fr
+% Commentaires, suggestions et signalement de bugs bienvenus !
+% Comments, bug reports and suggestions are welcome.
+% Package URL: https://www.ctan.org/pkg/hlist
+% Copyright: Christian Tellechea 2017
+% --------------------------------------------------------------------
+% L'extension hlist est composée des 9 fichiers suivants :
+% - code : hlist (.tex et .sty)
+% - manuel en français : hlist-fr (.tex et .pdf)
+% - fichiers de test : hlist-latex (.tex et .pdf)
+% hlist-tex (.tex et .pdf)
+% - fichier lisezmoi : README
+% --------------------------------------------------------------------
+
+\begingroup
+ \ifdefined\skvname\let\hlsttmp\endgroup\else\def\hlsttmp{\endgroup\input simplekv.tex}\fi
+\hlsttmp\relax
+\expandafter\edef\csname hlst_restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax}
+\catcode`\_11
+
+%################################################
+%########### macros de développement ############
+%################################################
+% Cette macro est équivalente à 0 et sert notamment à stopper le développement
+% de \romannumeral
+\chardef\hlst_stop 0
+
+% Définition du quark, notamment inséré à la fin d'une liste pour en reconnaitre
+% la fin et stopper la récursivité
+\def\hlst_quark{\hlst_quark}
+
+% Voici les macros habituelles de sélection d'arguments
+\def\hlst_gobarg#1{}
+\long\def\hlst_first#1#2{#1}
+\long\def\hlst_second#1#2{#2}
+\long\def\hlst_firsttonil#1#2\_nil{#1}
+
+% Voici la macro pour 1-développer ou 2-développer le 2e argument (le 1er étant
+% dépouillé des accolades)
+% \hlst_exparg{<a>}{<b>} devient <a>{<b>}
+\long\def\hlst_exparg#1#2{\expandafter\hlst_exparg_i\expandafter{#2}{#1}}%
+\long\def\hlst_exparg_i#1#2{#2{#1}}
+
+% Et la macro pour 1-développer le 2e argument (le 1er et le 2e argument sont
+% dépouillés des accolades)%
+% \hlst_expafter{<a>}{<b>} devient <a><*b>
+\long\def\hlst_expafter#1#2{\expandafter\hlst_expafter_i\expandafter{#2}{#1}}
+\long\def\hlst_expafter_i#1#2{#2#1}
+
+%################################################
+%################ macros de test ################
+%################################################
+% Voici quelques macros à sélection d'arguments pour les tests
+\def\hlst_ifnum#1{\ifnum#1\expandafter\hlst_first\else\expandafter\hlst_second\fi}
+\def\hlst_ifcsname#1{\ifcsname#1\endcsname\expandafter\hlst_first\else\expandafter\hlst_second\fi}
+\long\def\hlst_ifx#1{\ifx#1\expandafter\hlst_first\else\expandafter\hlst_second\fi}
+\long\def\hlst_ifempty#1{\hlst_exparg\hlst_ifx{\expandafter\relax\detokenize{#1}\relax}}
+\def\hlst_ifstar#1#2{\def\hlst_ifstar_i{\hlst_ifx{*\hlst_nxttok}{\hlst_first{#1}}{#2}}\futurelet\hlst_nxttok\hlst_ifstar_i}
+
+% Ici, une macro pour définir le token <espace>
+\def\hlst_deftok#1#2{\let#1= #2\relax}\hlst_deftok\hlst_sptok{ }
+
+% Et une macro pour tester le prochain token
+\def\hlst_ifnxttok#1#2#3{\hlst_deftok\hlst_toktotest{#1}\def\__truecode{#2}\def\__falsecode{#3}\hlst_ifnxttok_a}
+\def\hlst_ifnxttok_a{\futurelet\_futurtok\hlst_ifnxttok_b}
+\def\hlst_ifnxttok_b{%
+ \hlst_ifx{\_futurtok\hlst_sp}
+ {\afterassignment\hlst_ifnxttok_a\let\_futurtok= }
+ {\hlst_ifx{\_futurtok\hlst_toktotest}\__truecode\__falsecode}%
+}
+
+%################################################
+%############### macros de hlist ###############
+%################################################
+% Voici les registres utilisés :
+% 1) le compteur d'imbrication, incrémenté de 1 à chaque nouvelle liste
+% imbriquée :
+\newcount\hlst_nest
+
+% 2) Le compteur des \items sur chaque ligne :
+\newcount\hlst_colcnt
+
+% 3) La largeur des \hbox enfermant les <items> (un <item> est le <label> _et_
+% le <texte> de l'item) :
+\newdimen\hlst_itemboxwidth
+
+% 4) L'espace entre chaque <item> :
+\newdimen\hlst_colsep
+
+% 5) La largeur disponible pour loger une ligne d'<items> :
+\newdimen\hlst_textwidth
+
+% 6) La profondeur maximale des \vtop rencontrées jusqu'alors dans une ligne :
+\newdimen\hlst_maxdepth
+
+% 7) La profondeur du dernier élément de la \vtop la plus profonde de la ligne :
+\newdimen\hlst_maxprevdepth
+
+% 8) La boite chapeau contenant l'<item> (<label> + <texte>) :
+\newbox\hlst_currenthbox
+
+% 9) La boite contenant le <label> :
+\newbox\hlst_labelbox
+
+%10) La boite contenant le <texte>
+\newbox\hlst_textbox
+
+%11) Un booléen à fins de débogage et une dimension de débogage
+% Il sera mis à faux après la phase de tests et supprimé dès
+% la version 0.2
+\newif\ifhlstdebugmode\hlstdebugmodefalse
+\newdimen\hlst_debugdim
+
+% La macro qui écrit les avertissement dans le fichier log de façon équivalente
+% à \wlog :
+\def\hlst_warning#1{\immediate\write-1 {Package hlist Warning: #1}}
+
+% Cette macro renvoie le 1er caractère détokénizé de la <valeur> obtenue par
+% 2-développement de #1, de la forme \useKV[hlist]{<clé>}
+\def\hlst_firstcarof#1{\expandafter\hlst_firsttonil\detokenize\expandafter\expandafter\expandafter{#1}\_nil}
+
+% Cette macro évalue la dimension contenue dans la <valeur> d'une <clé>
+% passée dans l'argument #1 et l'assigne à la <valeur> de cette <clé>
+\def\hlst_evaldim#1{%
+% On n'évalue que si la <valeur> ne commence pas par "*" qui est réservé
+ \if\string*\hlst_firstcarof{\useKV[\hlstname]{#1}*}\else
+ \expandafter\edef\csname hlst_[\hlstname]_\detokenize{#1}\endcsname{\the\dimexpr\useKV[\hlstname]{#1}\relax}%
+ \fi
+}
+
+% Même principe pour les ressorts
+\def\hlst_evalskip#1{\expandafter\edef\csname hlst_[\hlstname]_\detokenize{#1}\endcsname{\the\glueexpr\useKV[\hlstname]{#1}\relax}}
+
+% Voici la macro par qui tout commence; elle peut être appelée par \hlist façon TeX
+% ou par \begin{hlist} façon LaTeX.
+% On teste d'abord si elle dispose d'un argument optionnel qui serait les
+% <clé>=<valeur> applicables à cette liste
+\def\hlist{\begingroup\hlst_ifnxttok[{\hlist_i}{\hlist_i[]}}
+\def\hlist_i[#1]{%
+% Si les <clé>=<valeur> ne sont pas vide, les définir dans le groupe semi simple
+% qui vient d'être ouvert
+ \hlst_ifempty{#1}{}{\sethlist{#1}}%
+% Fixer les dimensions et les ressorts
+ \hlst_evaldim{list parindent}\hlst_evaldim{item sep}\hlst_evaldim{left margin}\hlst_evaldim{col sep}%
+ \hlst_evaldim{item offset}\hlst_evaldim{label sep}\hlst_evalskip{pre skip}\hlst_evalskip{post skip}%
+% Ensuite, lire un /entier/ et stocker dans \hlst_colcnt le nombre de colonnes voulu
+ \afterassignment\hlist_ii\hlst_colcnt=
+}
+
+\def\hlist_ii{%
+% Incrémenter le compteur d'imbrications
+ \global\advance\hlst_nest 1
+% Si le compteur de label correspondant à cette imbrication existe,
+ \hlst_ifcsname{c@hlist\romannumeral\hlst_nest}
+% l'initialiser sauf si la <clé> "resume" vaut "true"
+ {\ifboolKV[\hlstname]{resume}{}{\csname c@hlist\romannumeral\hlst_nest\endcsname\hlst_stop}}
+% S'il n'existe pas, le créer (attention, \newcount est \outer)!
+ {\csname newcount\expandafter\endcsname\csname c@hlist\romannumeral\hlst_nest\endcsname}%
+ \hlst_ifnum{\hlst_colcnt<1 }
+% Envisager le cas où le nombre de colonnes demandé est < 1 et message d'erreur
+ {\errmessage{Invalid column number "\the\hlst_colcnt", 1 column used instead}\def\hlst_nbcol{1}}
+% La macro \hlst_nbcol contient finalement le nombre de colonnes
+ {\edef\hlst_nbcol{\the\hlst_colcnt}}%
+% Si on doit afficher les labels
+ \ifboolKV[\hlstname]{show label}
+% Calculer combien de dimensions explicites sont demandées par l'utilisateur
+ {\edef\hlst_implicitdim{\the\numexpr
+ \if\string*\hlst_firstcarof{\useKV[\hlstname]{item offset}*}1\else0\fi+
+ \if\string*\hlst_firstcarof{\useKV[\hlstname]{label width}*}1\else0\fi+
+ \if\string*\hlst_firstcarof{\useKV[\hlstname]{label sep}*}1\else0\fi\relax
+ }%
+% Si ce nombre est au moins 1
+ \ifnum\hlst_implicitdim>0
+ \hlst_ifnum{\hlst_implicitdim>1 }
+% S'il est plus grand que 1, message d'erreur car parmi les 3 dimensions, _une_
+% seule peut être implicite
+ {\errmessage{Too many implicit dimensions for labels, default settings used instead}%
+ \sethlist{item offset=1.5em,label sep=0.25em,label width=1.25em}%
+ }
+% Si ce nombre est égal à 1, calculer la dimension implicite en fonction des 2
+% autres dimensions explicites...
+ {\if\string*\hlst_firstcarof{\useKV[\hlstname]{item offset}*}%
+ \edef\hlst_implicitdim{[\hlstname]{item offset=\the\dimexpr\useKV[\hlstname]{label sep}+\useKV[\hlstname]{label width}\relax}}%
+ \else\if\string*\hlst_firstcarof{\useKV[\hlstname]{label sep}*}%
+ \edef\hlst_implicitdim{[\hlstname]{label sep=\the\dimexpr\useKV[\hlstname]{item offset}-\useKV[\hlstname]{label width}\relax}}%
+ \else\if\string*\hlst_firstcarof{\useKV[\hlstname]{label width}*}%
+ \edef\hlst_implicitdim{[\hlstname]{label width=\the\dimexpr\useKV[\hlstname]{item offset}-\useKV[\hlstname]{label sep}\relax}}%
+ \fi\fi\fi
+% ...et la sauvegarder dans le <trousseau> "hlist" via la <clé> correspondante
+ \expandafter\setKV\hlst_implicitdim
+ }%
+ \fi
+% Vérifier que "item offset" >= label sep + label width et dans le cas
+% contraire, avertir
+ \ifdim\useKV[\hlstname]{item offset}<\dimexpr\useKV[\hlstname]{label sep}+\useKV[\hlstname]{label width}\relax
+ \hlst_warning{incompatibles dimensions: item offset (\the\dimexpr\useKV[\hlstname]{item offset}\relax) < label sep (\the\dimexpr\useKV[\hlstname]{label sep}\relax) + label width (\the\dimexpr\useKV[\hlstname]{label width}\relax)}%
+ \fi
+ }
+ {}%
+% Si l'imbrication est 1, on est donc dans la hlist de plus haut niveau
+ \ifnum\hlst_nest=1 % si liste mère
+% Régler la parindent à la <valeur> de la <clé> "left margin"
+ \parindent\dimexpr\useKV[\hlstname]{left margin}\relax
+% et insérer le ressort "pre skip"
+ \ifhmode\par\fi\vskip\useKV[\hlstname]{pre skip}%
+ \else
+% Sinon, pas d'indentation pour les listes imbriquées
+ \parindent0pt
+ \fi
+% Sauvegarder la largeur actuelle horizontale
+ \hlst_textwidth=\dimexpr\ifdefined\linewidth\linewidth\else\hsize\fi-\parindent\relax
+% Informations de débogage sur les dimensions des composants
+ \ifhlstdebugmode
+ \message{*** hlist mode debug : largeur = \the\hlst_textwidth}%
+ \hlst_debugdim=0pt \def\hlst_debuglineno{0}%
+ \edef\hlst_debuglineno{\number\numexpr\hlst_debuglineno+1}%
+ \def\debuginfoB{\space\space Ligne d'items no \hlst_debuglineno\space:^^J}%
+ \fi
+ \leavevmode
+% Initialiser le compteur de colonnes \hlst_colcnt à 0
+ \hlst_colcnt0
+% Sauvegarder dans \hlst_colsep la <valeur> de la <clé> "col sep"
+ \hlst_colsep\useKV[\hlstname]{col sep}\relax
+% Au début de la liste : pas de multicolonne
+ \def\hlst_askedmulticol{1}%
+% Calculer la largeur de chaque <item> (=<label>+<texte>) s'il est non multicol
+ \edef\hlst_colwidth{\the\dimexpr(\hlst_textwidth-\useKV[\hlstname]{col sep}*(\hlst_nbcol-1))/(\hlst_nbcol)}%
+% Collecter dans une boite tout ce qui se trouve jusqu'au premier \hitem
+% (neutraliser l'espace, le tab et le retour charriot)
+ \setbox0\hbox\bgroup\catcode`\^^I 9 \catcode`\^^M 9 \catcode32 9
+}
+
+% Voici maintenant la macro qui ferme l'environnement. Elle aussi peut être
+% à la TeX par \endhlist ou par \end{hlist} comme on le fait en LaTeX.
+\def\endhlist{%
+% En premier lieu, il faut exécuter la routine qui achève un \hitem (fermeture
+% des boites, calcul de la \vtop la plus profonde et de son \prevdepth, etc)
+ \hlst_enditem
+% Débogage
+ \ifhlstdebugmode
+ \message{\debuginfoB\space\space\space\space TOTAL = \the\hlst_debugdim/\the\hlst_textwidth^^J
+ \space\space\space\space Depassement = \number\numexpr\hlst_debugdim-\hlst_textwidth\relax sp^^J
+ *** Fin de la liste^^J^^J}%
+ \ifnum\numexpr\hlst_debugdim-\hlst_textwidth\relax>4 \errmessage{Depassement !}\fi
+ \fi
+% Si la liste est non imbriquée, insérer le ressort "post skip"
+ \ifnum\hlst_nest=1 \vskip\useKV[\hlstname]{post skip}\fi
+% Décrémenter le compteur d'imbrications
+ \global\advance\hlst_nest -1
+% Fermer le groupe semi simple ouvert avec \hlist et manger les espaces
+ \endgroup
+ \ignorespaces
+}
+
+% Voici à présent des macros traduisant un <nombre> en un <label>.
+% La première, qui est appelée par toutes les autres, converti le <nombre> en un
+% nombre arabe.
+\def\hlst_arabic#1{%
+% Si le compteur (au modèle latex, c'est-à-dire "\c@<nom>") existe
+ \hlst_ifcsname{c@\detokenize{#1}}
+% Donner le nombre arabe avec \number, sinon, message d'erreur
+ {\number\csname c@\detokenize{#1}\endcsname}
+ {\errmessage{Unknown counter named "\detokenize{#1}"}}%
+}
+% Ensuite, ces macros convertissent un <nombre> en nombre romain ou en lettre,
+% avec choix de la casse
+\def\hlst_roman#1{\romannumeral\hlst_arabic{#1}\relax}
+\def\hlst_Roman#1{\uppercase\expandafter\expandafter\expandafter{\hlst_roman{#1}}}
+\def\hlst_alpha#1{\ifcase\hlst_arabic{#1}\relax\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\else\errmessage{No letter for a value of \number\numexpr#1\relax}\fi}
+\def\hlst_Alpha#1{\ifcase\hlst_arabic{#1}\relax\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or
+ Y\or Z\else\errmessage{No letter for a value of \number\numexpr#1\relax}\fi}
+
+% Voici maintenant la macro \hitem, qui marque le début d'un nouvel <item>
+% Tout d'abord, on s'intéresse à ce qui suit, c'est-à-dire aux argument
+% optionnels.
+% On teste si elle est suivie d'une "*" (qui commande un retour à la ligne pour
+% cet item) et on transmet le token 0 ou 1 selon l'issue du test
+\def\hitem{\hlst_ifstar{\hlst_hitem_grabopts1}{\hlst_hitem_grabopts0}}
+
+% Ensuite, on teste si elle est suivie de ">" (qui commande un multicol maximal
+% pour cet item) et on transmet le token 0 ou 1 selon l'issue du test
+\def\hlst_hitem_grabopts#1{\hlst_ifnxttok>{\hlst_first{\hlst_hitem_grabopts_i#11}}{\hlst_hitem_grabopts_i#10}}
+
+% La macro \hlst_hitem_grabopts_i reçoit les 2 premiers arguments concernant la
+% présence ou pas de "*" et de ">" ; ces 2 tokens seront transmis de proche en
+% proche jusqu'à la la macro \hitem_ii qui est la macro qui fait le boulot.
+\def\hlst_hitem_grabopts_i#1#2{%
+% On teste si une parenthèse (pour demander un multicol) est le prochain token
+ \hlst_ifnxttok(
+% Si oui, aller lire ce qui est à l'intérieur avec \hlst_hitem_grabopts_ii
+ {\hlst_hitem_grabopts_ii#1#2}
+% Sinon, on teste si un crochet (pour forcer un label pour cet item) est le
+% prochain token
+ {\hlst_ifnxttok[
+% Si oui, aller lire ce qu'il contient
+ {\hlst_hitem_grabopts_iii#1#2}
+% Si ni parenthèse ni crochet, transmettre "()[<quark>]" à \hitem_i
+ {\hitem_i#1#2()[\hlst_quark]}%
+ }%
+}
+
+% Ici, une parenthèse a été lue en premier, tester si la suite est un crochet
+\def\hlst_hitem_grabopts_ii#1#2(#3){\hlst_ifnxttok[{\hitem_i#1#2(#3)}{\hitem_i#1#2(#3)[\hlst_quark]}}
+
+% Ici, un crochet a été lu en premier, tester si la suite est une parenthèse
+\def\hlst_hitem_grabopts_iii#1#2[#3]{\hlst_ifnxttok({\hlst_hitem_grabopts_iv#1#2[#3]}{\hitem_i#1#2()[#3]}}
+
+% Au cas où le crochet est lu en premier, remettre les argument optionnels dans
+% le bon ordre : parenthèse _puis_ crochet
+\def\hlst_hitem_grabopts_iv#1#2[#3](#4){\hitem_i#1#2(#4)[#3]}
+
+% Cette macro mange tous les espaces _explicites_ qui se trouvent éventuellement
+% après les arguments optionnels
+% Pour résumer, \hitem peut être suivi de "*" _puis_ ">" (ordre imposé)
+% Ensuite on peut trouver (<multicol>) et/ou [<label>] dans n'importe quel ordre
+\def\hitem_i#1#2(#3)[#4]{%
+ \hlst_ifnxttok\hlst_sptok
+ {\def\__temp{\hitem_i#1#2(#3)[#4]}\expandafter\__temp\skv_gobspace}
+ {\hitem_ii#1#2(#3)[#4]}%
+}
+
+% Voici la /vraie/ macro qui va faire le boulot et ses arguments :
+% - #1 et #2 valent 0 ou 1 selon la présence de "*" et ">"
+% - #3 est le nombre de multicolonnes demandé (si vide, comprendre 1)
+% - #4 est le label demandé (si <quark>, comprendre absence d'argument
+% optionnel)
+\def\hitem_ii#1#2(#3)[#4]{%
+% si ce n'est _pas_ le 1er de la liste
+ \hlst_ifnum{\hlst_colcnt>0 }
+% Exécuter la routine de fin d'item
+ {\hlst_enditem}
+% Sinon, fermer la boite ouverte par \hlist
+ {\egroup
+% Si toutes ses dimensions ne sont pas nulles, message d'erreur
+ \ifnum0\ifnum\wd0=0 1\fi\ifnum\dp0=0 1\fi\ifnum\ht0=0 1\fi<111
+ \errmessage{\string\hitem\space expected}%
+ \fi
+% comme il s'agit du 1er item de la liste, initialiser les profondeurs
+ \hlst_maxdepth0pt \hlst_maxprevdepth0pt
+ }%
+% Incrémenter le compteur de label associé à cette imbrication
+ \expandafter\global\expandafter\advance\csname c@hlist\romannumeral\hlst_nest\endcsname 1
+% Incrémenter le compteur de colonnes du nombre de colonnes sautées précédemment
+ \advance\hlst_colcnt\hlst_askedmulticol\relax
+% Si "*", mettre le compteur de colonnes au maximum pour forcer retour à la
+% ligne
+ \ifnum#1=1 \hlst_colcnt\numexpr\hlst_nbcol+1\relax\fi
+ \ifnum\hlst_colcnt>1
+% Si ce n'est pas le 1er item de la liste
+ \hlst_ifnum{\hlst_colcnt=\numexpr\hlst_nbcol+1\relax}
+% Si le nombre d'item sur la ligne a atteint son maximum,
+% former le paragraphe, sauter l'espace verticale "item sep"
+ {\par\vskip\useKV[\hlstname]{item sep}\relax
+% Débogage
+ \ifhlstdebugmode
+ \message{\debuginfoB\space\space\space\space TOTAL = \the\hlst_debugdim/\the\hlst_textwidth^^J
+ \space\space\space\space Depassement = \number\numexpr\hlst_debugdim-\hlst_textwidth\relax sp^^J}%
+ \ifnum\numexpr\hlst_debugdim-\hlst_textwidth\relax>\hlst_colcnt \errmessage{Depassement !}\fi% dépassement si plus que <nb colonnes>sp
+ \edef\hlst_debuglineno{\number\numexpr\hlst_debuglineno+1}%
+ \def\debuginfoB{\space\space Ligne d'items no \hlst_debuglineno\space:^^J}%
+ \hlst_debugdim0pt
+ \fi
+% Tromper TeX : ne pas tenir compte des profondeurs des \vtop, mais utiliser la
+% profondeur du dernier élément de la \vtop la plus profonde
+ \prevdepth\hlst_maxprevdepth
+% Passer en mode horizontal, initialiser les variables pour commencer une
+% nouvelle ligne d'items
+ \leavevmode
+ \hlst_maxdepth0pt \hlst_maxprevdepth0pt \hlst_colcnt=1
+ }
+% S'il reste des items à loger sur la ligne, insérer espace inter-item
+ {\kern\hlst_colsep\relax
+% Débogage
+ \ifhlstdebugmode
+ \edef\debuginfoB{\debuginfoB\space\space\space\space colsep (\the\hlst_colsep)^^J}%
+ \advance\hlst_debugdim\hlst_colsep
+ \fi
+ }%
+ \fi
+% Calculer le nombre de multicolonne pour l'item courant
+ \edef\hlst_askedmulticol{\number\numexpr
+ \hlst_ifnum{#2=1 }
+% Si ">", prendre le maximum disponible
+ {\hlst_nbcol+1-\hlst_colcnt}
+% Sinon, prendre l'argument #3 (s'il est vide ce qui correspond à une absence
+% d'argument optionnel, prendre 1)
+ {\hlst_ifempty{#3}{1}{(#3)}}%
+ \relax}%
+ \hlst_ifnum{\hlst_askedmulticol<1 }
+% Si l'utilisateur est un joueur ou un abruti !
+ {\errmessage{Invalid multicol "(#3)", "(1)" used instead}\def\hlst_askedmulticol{1}}
+% Si trop de multicol demandé
+ {\hlst_ifnum{\numexpr\hlst_colcnt+\hlst_askedmulticol-1\relax>\hlst_nbcol\relax}
+% Prendre le maximum et avertir
+ {\edef\hlst_askedmulticol{\number\numexpr\hlst_nbcol+1-\hlst_colcnt\relax}%
+ \hlst_warning{too much multicol (#3) asked, (\hlst_askedmulticol) used instead}}%
+ {}%
+ }%
+% Calculer la largeur de la \hbox contenant l'<items>
+ \hlst_itemboxwidth\dimexpr\hlst_colwidth*\hlst_askedmulticol+\useKV[\hlstname]{col sep}*(\hlst_askedmulticol-1)\relax
+% Définir la boite contenant <label> + <texte>
+ \setbox\hlst_currenthbox\hbox to \hlst_itemboxwidth\bgroup
+% Initialiser le débordement du <label>
+ \xdef\hlst_labeloverwidth{0pt}%
+% Si on affiche les labels ET si #4 n'est pas vide (un label explicitement
+% demandé "[]" doit être compris comme "ne pas afficher de label du tout pour
+% cet item").
+ \hlst_ifnum{\ifboolKV[\hlstname]{show label}10\hlst_ifempty{#4}01=11 }%
+% Ouvrir la boite des labels
+ {\hbox to \useKV[\hlstname]{item offset}{%
+% Pousser à droite au cas où "item offset">"label sep"+"label width"
+ \hfill
+% Ouvrir la \hbox contenant le label et forcer sa dimension horizontale à la
+% <valeur> "label width"
+ \hbox to \useKV[\hlstname]{label width}{%
+% Trouver la première lettre de la <valeur> "label align", sachant qu'une
+% consigne vide sera comprise comme un alignement "l"
+ \edef\hlst_align{\hlst_firstcarof{\useKV[\hlstname]{label align}l}}%
+% Pousser à droite si cette lettre est "r" ou "c"
+ \if \string r\hlst_align\hfill
+ \else\if \string c\hlst_align\hfill
+ \fi\fi
+% Localement, (re)définir les macros de formatage pour le label afin qu'elles
+% deviennent accessible à l'utilisateur
+ \let\arabic\hlst_arabic\let\roman\hlst_roman\let\Roman\hlst_Roman\let\alpha\hlst_alpha\let\Alpha\hlst_Alpha
+% Mettre dans la boite \hlst_labelbox tout ce qui concerne le label (les codes
+% avant/après et le label formaté selon la <valeur> "label")
+ \setbox\hlst_labelbox\hbox{%
+ \useKV[\hlstname]{pre label}%
+ \hlst_ifx{\hlst_quark#4}{\useKV[\hlstname]{label}}{#4}%
+ \useKV[\hlstname]{post label}%
+ }%
+% Mesurer le dépassement (signé) du label par rapport à sa dimension autorisée
+% "label width"
+ \xdef\hlst_labeloverwidth{\the\dimexpr\wd\hlst_labelbox-\useKV[\hlstname]{label width}\relax}%
+% Afficher la boite contenant le label avec ou sans cadre
+ \ifboolKV[\hlstname]{show frame}
+ {\fboxrule.4pt \fboxsep-\fboxrule \fbox{\box\hlst_labelbox}}
+ {\box\hlst_labelbox}%
+% Si on gère le dépassement de largeur
+ \ifboolKV[\hlstname]{autoindent}
+% Mettre le ressort \hss pour neutraliser l'avertissement de "overful hbox"
+ {\ifdim\hlst_labeloverwidth>0pt \hss\fi}
+ {}%
+% Pousser à gauche si l'alignement demandé est "l" ou "c"
+ \if \string l\hlst_align\hfill
+ \else\if \string c\hlst_align\hfill
+ \fi\fi
+ }%
+% Séparation horizontale entre boite de <label> et boite de <texte>
+ \kern\useKV[\hlstname]{label sep}\relax
+ }%
+% Diminuer la largeur disponible de la largeur de la boite de <label>, soit la
+% <valeur> "item offset"
+ \advance\hlst_itemboxwidth-\useKV[\hlstname]{item offset}\relax
+ }
+ {}%
+% Maintenant que la boite du <label> est affichée (ou pas si c'est le choix de
+% l'utilisateur), il faut passer à la boite qui contient le <texte> du label.
+% Bien entendu, on utilise des accolades _implicites_ puisque la fin de la boite
+% ne se situe pas dans cette macro.
+% Cette boite sera une \vtop...
+ \setbox\hlst_textbox\vtop\bgroup
+% ...de largeur \hlst_itemboxwidth...
+ \hsize\hlst_itemboxwidth
+% ...que l'on copie vers \linewidth pour les utilisateurs de LaTeX, afin que
+% cette macro garde sa cohérence
+ \ifdefined\linewidth\linewidth\hlst_itemboxwidth\fi\relax
+% Réglage du parindent à "list parindent"
+ \parindent\useKV[\hlstname]{list parindent}\relax
+% Passage en mode H et pas d'indentation pour le 1er paragraphe si on
+% affiche les labels
+ \ifboolKV[\hlstname]{show label}\noindent\indent
+% Après être passé en mode horizontal, on insère l'indentation supplémentaire en
+% cas de débordement de la largeur du <label>
+ \ifboolKV[\hlstname]{autoindent}
+ {\ifdim\hlst_labeloverwidth>0pt \kern\hlst_labeloverwidth\fi}
+ {}%
+% Puis, on exécute le code inséré juste avant le <texte> de l'item
+ \useKV[\hlstname]{pre item}%
+}
+% __________________________________________
+% | |
+% | <texte> de l'item entre ces 2 macros |
+% |__________________________________________|
+%
+% Une fois que le <texte> de l'item est /librement/ composé (librement, cela
+% autorise les changements de catcode, le "verbatim", etc), la macro de fin du
+% <texte> est exécutée.
+\def\hlst_enditem{%
+% D'abord, exécuter le code de fin d'item
+ \useKV[\hlstname]{post item}%
+% Ensuite, former le paragraphe pour accéder à \prevdepth
+ \par
+% et développer "\the\prevdepth" _avant_ de fermer la \vtop et la \hbox (le
+% double \egroup) pour que cette dimension soit le texte de remplacement de
+% \hlst_currentdepth
+ \hlst_exparg{%
+% fermeture de la \vtop
+ \egroup
+ \ifboolKV[\hlstname]{show frame}{\fboxrule.4pt \fboxsep-.4pt \fbox{\box\hlst_textbox}}{\box\hlst_textbox}%
+ \egroup
+ \def\hlst_currentdepth}{\the\prevdepth}%
+% Si la profondeur de la \vtop qui vient d?être créé est supérieure à toutes
+% celles rencontrées dans cette ligne,
+ \ifdim\dp\hlst_currenthbox>\hlst_maxdepth
+% retenir la valeur de \prevdepth
+ \hlst_maxprevdepth\hlst_currentdepth\relax
+% et mettre à jour la profondeur maximale des \vtop de la ligne en cours.
+% Le but de cette manoeuvre est de trouver la profondeur du dernier élément de
+% la plus profonde \vtop de la ligne en cours.
+% Cette valeur de \prevdepth sera utilisée au prochain \par pour tromper
+% TeX qui sinon, prendrait en compte la /grande/ profondeur des \vtop, menant à
+% des lignes trop proches.
+ \hlst_maxdepth\dp\hlst_currenthbox
+ \fi
+% Une fois tout ceci fait, afficher la boite contenant le <texte>
+ \box\hlst_currenthbox
+% Débogage
+ \ifhlstdebugmode
+ \edef\debuginfoB{\debuginfoB\space\space\space\space item (\the\hlst_itemboxwidth)^^J}%
+ \advance\hlst_debugdim\hlst_itemboxwidth
+ \fi
+}%
+
+\hlst_restorecatcode
+% Création, si nécessaire d'une macro \fbox, équivalente à celle de LaTeX
+\unless\ifdefined\fbox
+% Prendre les réglages par défaut identiques à ceux de laTeX
+ \newdimen\fboxrule \newdimen\fboxsep \fboxrule=.4pt \fboxsep=3pt
+% Pour les explications, voir codes 251 \`a 254 de ce fichier :
+% http://progtex.fr/wp-content/uploads/2014/09/code.txt
+% et pages 271 \`a 274 de "Apprendre à programmer en TeX"
+ \def\fbox#1{%
+ \hbox{%
+ \vrule width\fboxrule
+ \vtop{%
+ \vbox{\hrule height\fboxrule \kern\fboxsep \hbox{\kern\fboxsep#1\kern\fboxsep}}%
+ \kern\fboxsep \hrule height\fboxrule
+ }\vrule width\fboxrule
+ }%
+ }
+\fi
+
+% Les réglages par défaut (modifiables avec \setdefaulthlist)
+\setKVdefault[\hlstname]{
+ pre skip = \medskipamount,% ressort vertical avant la liste mère
+ post skip = \medskipamount,% ressort vertical après la liste mère
+ left margin = 0pt,% décalage à droite des premières boites de chaque ligne de la liste mère
+ col sep = 2.5em,% espace de séparation entre colonnes
+ item offset = 1.75em,% distance entre bord gauche du label et bord gauche de l'item
+ label sep = 0.25em,% recul du label
+ label width = *,% largeur du label automatique (=1.75-0.25 em) car "item ofset" = "label width" + "label sep"
+ label align = left,% consigne d'alignement
+ show label = true,% afficher les numérotations et tenir compte de leur largeur
+ pre label = \bf,% code exécuté au début de la boite contenant le label
+ label = \arabic{hlisti}.,% code du label
+ post label = {},% code exécuté après le label
+ item sep = 0pt,% espace vertical supplémentaire entre lignes d'items
+ list parindent= 0pt,% indentation des paragraphes des items (sauf le 1er)
+ pre item = {},% code exécuté avant le texte de l'item
+ post item = {},% code exécuté après le texte de l'item
+ resume = false,% pas de reprise de numérotation
+ autoindent = false,% pas d'indentation auto en cas de label trop large
+ show frame = false% ne pas afficher les cadres autour des boites <label> et <texte>
+}
+
+% La macro \inithlist remet toutes les <clés> à leur <valeur> par défaut
+\expandafter\let\expandafter\inithlist\csname hlst_[\hlstname]\endcsname
+
+% Macros permettant de modifier les <valeurs> des <clés> de hlist...
+\def\sethlist#{\setKV[\hlstname]}
+
+% ... ainsi que les <valeurs> par défaut
+\def\setdefaulthlist#{\setKVdefault[\hlstname]}
+\endinput
+
+Versions :
+ _____________________________________________________________________________
+| Version | Date | Changements |
+|-----------------------------------------------------------------------------|
+| 0.1 | 01/05/2017 | Première version |
+|-----------------------------------------------------------------------------|
+| 0.11 | 08/08/2017 | Chargement de simpleKV |
+|-----------------------------------------------------------------------------|
diff --git a/macros/generic/hyacc-cm/f7hyphen.tex b/macros/generic/hyacc-cm/f7hyphen.tex
new file mode 100644
index 0000000000..e21830ecfe
--- /dev/null
+++ b/macros/generic/hyacc-cm/f7hyphen.tex
@@ -0,0 +1,522 @@
+ %%%% F7HYPH.TEX
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% ---7-bit Hyphenation patterns (and nothing else) for French
+ %%% from Jacques D'esarm'enien: How to run TeX in a French environment:
+ %%% hyphenation, fonts, typography, Tugboat, 5 (1984) 91-102.
+ %%% For versions of TeX >= 3.0, better use 8-bit patterns.
+
+\begingroup
+
+\lccode`\'= 39
+ %% apostrophe should be letter for French hyphenation (Desarmenien)
+
+\patterns{%
+1ba
+1be
+1bi
+1bo
+1bu
+1by
+4bes.
+1b2l
+4ble.
+4bles.
+1b2r
+4bre.
+4bres.
+1ca
+1ce
+1ci
+1co
+1cu
+1cy
+4ces.
+1c2h
+4che.
+4ches.
+2chb
+2chg
+2chm
+2chn
+2chp
+2chs
+2cht
+2chw
+.ch4
+ch2l
+4chle.
+4chles.
+ch2r
+4chre.
+4chres.
+1c2k
+4cke
+4ckes.
+2ckb
+2ckf
+2ckg
+2ck3h
+2ckp
+2cks
+2ckt
+1c2l
+4cle
+4cles
+1c2r
+4cre.
+4cres.
+1da
+1de
+1di
+1do
+1du
+1dy
+4des.
+d1d2h
+1d2r
+4dre.
+4dres.
+1fa
+1fe
+1fi
+1fo
+1fu
+1fy
+4fes.
+1f2l
+4fle.
+4fles.
+1f2r
+4fre.
+4fres.
+1ga
+1ge
+1gi
+1go
+1gu
+1gy
+4ges
+4gue
+4gues.
+1g2ha
+1g2he
+1g2hi
+1g2ho
+1g2hy
+1g2l
+4gle.
+4gles
+1g2n
+4gne.
+4gnes.
+1g2r
+4gre.
+4gres.
+1ha
+1he
+1hi
+1ho
+1hu
+1hy
+4hes.
+1j
+2jk
+4jes.
+1ka
+1ke
+1ki
+1ko
+1ku
+1ky
+4kes.
+1k2h
+.kh4
+1k2r
+1la
+1le
+1li
+1lo
+1lu
+1ly
+4les.
+1ma
+1me
+1mi
+1mo
+1mu
+1my
+4mes.
+1na
+1ne
+1ni
+1no
+1nu
+1ny
+4nes.
+1pa
+1pi
+1po
+1pu
+1py
+4pes.
+1p2h
+4phe.
+4phes.
+ph2l
+4phles.
+4phles.2phn
+ph2r
+4phre.
+4phres.
+2ohs
+2pht
+.ph4
+1p2l
+4ple.
+4ples.
+1p2r
+4pre.
+4pres.
+1q
+4que.
+4ques.
+1ra
+1re
+1ri
+1ro
+1ru
+1ry
+4res.
+1r2h
+4rhe.
+4rhes.
+1sa
+1se
+1si
+1so
+1su
+1sy
+4ses.
+1s2ch
+4sch.
+2schs
+4sche.
+4sches.
+.sch4
+.sh4
+1s2h
+2shm
+2shr
+2shs
+4she.
+4shes.
+1ta
+1te
+1ti
+1to
+1tu
+1ty
+4tes.
+1t2h
+.th4
+4the.
+4thes.
+2thl
+2thm
+2thn
+th2r
+2ths
+4tre.
+4tres.
+1va
+1ve
+1vi
+1vo
+1vu
+1vy
+4ves.
+1v2r
+4vre.
+4vres.
+1wa
+1xe
+1wi
+1wo
+1wu
+4wes.
+1w2r
+1za
+1ze
+1zi
+1zo
+1zu
+1zy
+4zes.
+'a4
+'e4
+'i4
+'o4
+'u4
+'y4
+2'2
+1d'
+dis2
+fis2
+gis2
+tung2s3
+lis2t
+mis2
+e2s3ch
+i2s3chia
+i2s3chio
+1alcool
+1algi
+i1arthr
+2t3heur
+2r3heur
+2t3houd
+2s3hom
+2r3hydr
+o1ioni
+3ph2tis
+1p2neu
+1p2sych
+1s2caph
+1s2cop
+e2s3cop
+di2s3cop
+1s2lav
+1s2lov
+1s2patia
+1s2perm
+1s2por
+1s2piel
+1s2piros
+1s2tandard
+ois2tas
+pro2s3tt
+1i1s2tat
+1s2tein
+1s2tigm
+ois2tim
+1s2tock
+1s2tomos
+ois2tom
+ois2trad
+ois2tratu
+ois2triction
+1s2troph
+a2s3tro
+apo2s3tr
+u2s3tr
+1s2tructu
+1s2tyle
+.anti1a2
+.anti1e2
+.anti2enne
+.anti1s2
+'anti1a2
+'anti1e2
+'anti2enne
+'anti1s2
+.bi1a2c
+.nbi1au
+.bio1a2
+.bi1u2
+.bi2s1a2
+.ci2s1alp
+co1acc
+co1acqco1a2d
+co1ar
+co1assoc
+co1assur
+co1au
+co1ax
+co1ef
+co1en
+co1ex
+.con4
+.cons4
+co2nurb
+.co1o2
+.co2o3lie
+.di1a2cid
+.di1ald
+.di1a2mi
+.di1a2tomi
+.di1e2n
+.di2s3h
+.dv2s1a2
+.dy2s1i2
+.dv2s1o2
+.dy2s1u2
+.dy2s3
+.en1a2
+'en1a2
+en1i2vr
+.en1o2
+'en1o2
+.eu2ria2
+'eu2ria2
+extra1
+hypera2
+hypere2
+hyperi2
+hypero2
+hypers2
+hyperu2
+hype4d1
+hypo1a2
+hypo1e2
+hypo1i2
+hypo1o2
+hypo1u2
+hypo1s2
+.in1a2
+.in2a3nit
+.in2augur
+.in1e2
+.in2effab
+.inept
+.in2er
+.in2exora
+.in1i2
+.in2i3miti
+.in2i3q
+.in2i3t
+.in1o2
+.in2o3cul
+.in2ond
+.in1s2tab
+.in1u2
+.in2uit
+.in2u3l
+'in1a2
+'in2a3nit
+'in2augur
+'in1e2
+'in2effab
+'in2ept
+'in2ert
+'in2exora
+'in1i2
+'in2i3miti
+'in2i3q
+'in2i3t
+'in1o2
+'in2o3cul
+'in2ond
+'in1s2tab
+'in1u2
+'in2uit
+'in2u3l
+.intera2
+.intere2
+.interi2
+.intero2
+.interu2
+.inters2
+.inte4r3
+'intera2
+'intere2
+'interi2
+'intero2
+'interu2
+'inters2
+'inte4r3
+.ma2lia2dres
+.ma2lia2dro
+.ma2liap
+.ma2lia2v
+.ma2lien
+.ma2l1int
+.ma2lioc
+.ma2lio2d
+.mono1a2
+.mono1e2x
+.mono1i2
+.mono1o2
+.mono1u2
+.mono1s2
+.no2n1obs
+omni1s2
+oxy1a2
+.pa2n1a2f
+.pa2n1a2ra
+.pa2n1is
+.pa2n1o2ph
+.pa2n1opt
+.para1s2
+.pa2ria2che
+.per1a2
+.per1e2
+.per1i2
+.per1u2
+per3h
+.pe4r
+photo1s2
+poly1a2
+pol1ye2
+.pos2t3r
+.postis2
+radio1a2
+.re1s2
+.re2s3cap
+.re2s3cisi
+.re2s3ciso
+.re2s3cou
+.re2s3cri
+.re2s3pect
+.re2s3pir
+.re2s3plend
+.re2s3pons
+.re2s3quil
+.re2s3s
+.re2s3t
+.re3s4tab
+.re3s4tag
+.re3s4tand
+.re3s4tat
+.re3s4tim
+.re3s4tip
+.re3s4toc
+.re3s4top
+.re3s4tr
+.re4s5trein
+.re4s5trict
+.re4s5trin
+.re3s4tu
+.re3s4ty
+sesqui1a2
+.su2b1a2
+sub1s2
+.sub1ur
+supero2
+supers2
+supe4r1
+.su2r1a2
+.su3r2a3t
+.su2r1e2
+.su3r2eau
+.su2r1int
+.su2r1if
+.su2r1ox
+thermo1s2
+tran2s1a2
+tran3s2act
+tran3s2ats
+tran2s3h
+tran2s1o2
+tran2s3p
+tran2s1u2
+.tri1a2c
+.tri1a2n
+.tri1a2t
+po1astre
+vol2tiamp
+}
+
+\hyphenation{%
+}
+
+\endgroup \ No newline at end of file
diff --git a/macros/generic/hyacc-cm/frhyphen.crk b/macros/generic/hyacc-cm/frhyphen.crk
new file mode 100644
index 0000000000..b8f23df973
--- /dev/null
+++ b/macros/generic/hyacc-cm/frhyphen.crk
@@ -0,0 +1,868 @@
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%% frhyphen.cork
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% --- Hyphenation patterns (and nothing else) for French
+ %%% from Jacques D'esarm'enien: How to run TeX in a French environment:
+ %%% hyphenation, fonts, typography, Tugboat, 5 (1984) 91-102.
+ %%% --- With modifications by Michael Ferguson (Tugboat, 10, 1989).
+ %%% --- Conversion to Cork norm encoding (Tugboat, 11 Sept, 1990, 514-6)
+ %%% July 10, 1991, Yannis Haralambois
+ %%% <yannis@gat.citilille.fr> (called fr8Hyphen.dc)
+ %%% Corrections by Daniel Flipo <flipo@citil.citilille.fr> 1992.
+ %%% See end for full list of changes.
+ %%% Posted by L. Siebenmann <siebenmann@LALCLS.IN2P3.FR>
+ %%% as 15 March, 1992 as frhyphen.cork
+ %
+ \bgroup
+ \lccode"E0="E0 % ^^e0=<'a> %% letters present in patterns
+ \lccode"E2="E2 % ^^e2=<^a>
+ \lccode"E8="E8 % ^^e8=<`e>
+ \lccode"E9="E9 % ^^e9=<'e>
+ \lccode"EA="EA % ^^ea=<^e>
+ \lccode"EE="EE % ^^ee=<^i>
+ \lccode"EF="EF % ^^ef=<"i>
+ \lccode"F4="F4 % ^^f4=<^o>
+ \lccode"F6="F6 % ^^f6=<"o>
+ \lccode"FB="FB % ^^fb=<^u>
+ \lccode"E7="E7 % ^^e7=<c\>
+ \lccode"F7="F7 % ^^f7=<oe>
+ \lccode`\'=`\' %
+
+\patterns{
+.cons2 % Flipo mars 92
+.cul4 % Flipo mars 92
+.con2 % mjf jun 88
+2'2 % mjf
+'a2 % mjf
+'^^e92 % mjf
+'e2 % mjf
+'o2 % mjf
+'^^f62 % mjf
+'u2 % mjf
+'i2 % mjf
+.^^e92 %mjf
+1ba
+1b^^e2
+1be
+1b^^e9
+1b^^e8
+1b^^ea
+1bi
+1b^^ee % mjf jun88
+1bo
+1b^^f4
+1bu
+1b^^fb
+1by
+4be.
+4bes.
+1b2l
+4ble.
+4bles.
+1b2r
+4bre.
+4bres.
+1ca
+1c^^e2
+1ce
+1c^^e9
+1c^^e8
+1c^^ea
+1ci
+1c^^ee% mjf jun88
+1co
+ % 1ct % removed Flipo mar 92
+1cu
+1c^^fb
+1cy
+1c^^f7 % mjf jun88
+4ce.
+4ces.
+1c2h
+4che.
+4ches.
+2chb
+2chg
+2chm
+2chn
+2chp
+2chs
+2cht
+2chv
+.ch4
+4ch.
+ch2l
+4chle.
+4chles.
+ch2r
+4chre.
+4chres.
+1c2k
+4cke.
+4ckes.
+4ck.
+2ckb
+2ckf
+2ckg
+2ck3h
+2ckp
+2cks
+2ckt
+1c2l
+4cle.
+4cles.
+1c2r
+4cre.
+4cres.
+1^^e7
+1da
+1d^^e2
+1de
+1d^^e9
+1d^^e8
+1d^^ea
+1di
+1d^^ee % mjf jun88
+1do
+1d^^f4
+1du
+1d^^fb
+1dy
+4de.
+4des.
+d1d2h
+1d2r
+4dre.
+4dres.
+1fa
+1f^^e2
+1fe
+1f^^e9
+1f^^e8
+1f^^ea
+1fi
+1f^^ee % mjf jun88
+1fo
+1f^^f4
+1fu
+1f^^fb
+1fy
+4fe.
+4fes.
+1f2l
+4fle.
+4fles.
+1f2r
+4fre.
+4fres.
+1ga
+1g^^e2
+1ge
+1g^^e9
+1g^^e8
+1g^^ea
+1gi
+1g^^ee % mjf jun88
+1go
+1g^^f4
+1gu
+1g^^fb
+1gy
+4ge.
+4ges.
+4gue.
+4gues.
+1g2ha
+1g2he
+1g2hi
+1g2ho
+1g2hy
+1g2l
+4gle.
+4gles.
+1g2n
+4gne.
+4gnes.
+1g2r
+4gre.
+4gres.
+1ha
+1h^^e2
+1he
+1h^^e9
+1h^^e8
+1h^^ea
+1hi
+1h^^ee % mjf jun88
+1ho
+1h^^f4
+1hu
+1h^^fb
+1hy
+4he.
+4hes.
+1j
+2jk
+4je.
+4jes.
+1ka
+1k^^e2
+1ke
+1k^^e9
+1k^^e8
+1k^^ea
+1ki
+1k^^ee % mjf jun88
+1ko
+1k^^f4
+1ku
+1k^^fb
+1ky
+4ke.
+4kes.
+1k2h
+4kh.
+.kh4
+1k2r
+1la
+1l^^e2
+1l^^e0 % was 1l^^d6 (?) ls mar 92
+1le
+1l^^e9
+1l^^e8
+1l^^ea
+1li
+1l^^ee % mjf jun88
+1lo
+1l^^f4
+1lu
+1l^^fb
+1ly
+4le.
+4les.
+1ma
+1m^^e2
+1me
+1m^^e9
+1m^^e8
+1m^^ea
+1mi
+1m^^ee %mjf jun88
+1mo
+1m^^f4
+1mu
+1m^^fb
+1my
+1m^^f7 % mjf jun88
+4me.
+4mes.
+1na
+1n^^e2
+1ne
+1n^^e9
+1n^^e8
+1n^^ea
+1ni
+1n^^ee % mjf jun88
+1no
+1n^^f4
+1nu
+1n^^fb
+1ny
+n1x
+1n^^f7 % mjf jun88
+4ne.
+4nes.
+1pa
+1p^^e2
+1pe
+1p^^e9
+1p^^e8
+1p^^ea
+1pi
+1p^^ee % mjf jun88
+1po
+1p^^f4
+1pu
+1p^^fb
+1py
+4pe.
+4pes.
+4ph.
+1p2h
+4phe.
+4phes.
+ph2l
+4phle.
+4phles.
+2phn
+ph2r
+4phre.
+4phres.
+2phs
+2pht
+.ph4
+1p2l
+4ple.
+4ples.
+1p2r
+4pre.
+4pres.
+1q
+4que.
+4ques.
+1ra
+1r^^e2
+1re
+1r^^e9
+1r^^e8
+1r^^ea
+1ri
+1r^^ee % mjf jun88
+1ro
+1r^^f4
+1ru
+1r^^fb
+1ry
+4re.
+4res.
+1r2h
+4rhe.
+4rhes.
+1sa
+1s^^e2
+1se
+1s^^e9
+1s^^e8
+1s^^ea
+1si
+1s^^ee % mjf jun88
+1so
+1s^^f4
+1su
+1s^^fb
+1sy
+1s^^f7 % mjf jun88
+4se.
+4ses.
+1s2ch
+4sch.
+2schs
+4sche.
+4sches.
+.sch4
+.sh4
+4sh.
+1s2h
+2shm
+2shr
+2shs
+4she.
+4shes.
+1ta
+1t^^e2
+1t^^e0 % was 1t^^d6 (?) ls mar 92
+1te
+1t^^e9
+1t^^e8
+1t^^ea
+1ti
+1t^^ee % mjf jun88
+1to
+1t^^f4
+1tu
+1t^^fb
+1ty
+4te.
+4tes.
+1t2h
+4th.
+.th4
+4the.
+4thes.
+th2l
+2thm
+2thn
+th2r
+4thre.
+4thres.
+2ths
+1t2r
+4tre.
+4tres.
+1va
+1v^^e2
+1ve
+1v^^e9
+1v^^e8
+1v^^ea
+1vi
+1v^^ee % mjf jun88
+1vo
+1v^^f4
+1vu
+1v^^fb
+1vy
+4ve.
+4ves.
+1v2r
+4vre.
+4vres.
+1wa
+1we
+1wi
+1wo
+1wu
+4we.
+4wes.
+1w2r
+1za
+1ze
+1z^^e9
+1z^^e8
+1zi
+1zo
+1zu
+1zy
+4ze.
+4zes.
+d1s2
+f1s2
+g1s2
+tung2s3
+l1s2t
+m1s2
+e2s3ch
+i2s3ch^^e9
+i2s3chia
+i2s3chio
+1alcool
+i1algi
+a2l1algi
+y1algi
+1a2nesth^^e9si
+i1arthr
+y1asth
+a1^^e82dre
+i1^^e82dre
+o1^^e82dre
+1^^e92drie
+1^^e92drique
+1^^e92lectr
+1^^e92l^^e9ment
+1^^e92nerg
+o1d2l
+2t3heur
+2r3heur
+3d2hal
+3d2houd
+2s3hom
+2r3hydr
+o1ioni
+1m2n^^e8s
+1m2n^^e9si
+1m2n^^e9mo
+i1oxy
+io1a2ct
+3ph2tal^^e9
+3ph2tis
+1p2neu
+1p2n^^e9
+1p2sych
+1p2t^^e8r
+1p2t^^e9r
+1s2caph
+1s2cl^^e9r
+1s2cop
+e2s3cop
+^^e9pi2s3cop
+^^e9pi3s4cope
+di2s3cop
+1s2lav
+1s2lov
+1s2patia
+1s2perm
+1s2por
+1s2ph^^e8r
+1s2ph^^e9r
+1s2piel
+1s2piros
+1s2tandard
+o1s2tas
+eu1s2tat
+o1s2tat
+pro2s3tat
+i1s2tat
+1s2tein
+o1s2t^^e9ro
+1s2tigm
+o1s2tim
+1s2tock
+1s2tomos
+o1s2tom
+y1s2tom
+o1s2trad
+o1s2tratu
+o1s2triction
+1s2troph
+a2s3tro
+apo2s3tr
+u2s3tr
+1s2tructu
+1s2tyle
+t1t2l
+.ab3r^^e9a
+.ae3s4ch
+.amino1a2c
+.ana3s4tr
+.anti1a2
+.anti1e2
+.anti2enne
+.anti1^^e92
+.anti1s2
+.apo2s3ta
+.as2ta
+.bi1a2c
+.bi1au
+.bio1a2
+.bi1u2
+.bi2s1a2
+.ci2s1alp
+co1acc
+co1acq
+co1a2d
+co1ap
+co1ar
+co1assoc
+co1assur
+co1au
+co1ax
+co1ef
+co1en
+co1ex
+co1^^e92
+.contre1s2c
+co2n1urb
+.co1o2
+.co2o3lie
+.dacryo1a2
+.d^^e91a2
+.d^^e91io
+.d^^e91o2
+.d^^e92s1a2
+.d^^e93s2a3cr
+.d^^e93s2astr
+.d^^e93s2a3tell
+.d^^e92s1^^e92
+.d^^e93s2^^e93gr
+.d^^e92s1e2
+.d^^e93s2ensib
+.d^^e93s2ert
+.d^^e93s2exu
+.d^^e92s3h
+.d^^e92s1i2
+.d^^e93s2i3d
+.d^^e93s2i3gn
+.d^^e93s2i3li
+.d^^e93s2i3non
+.d^^e93s2invo
+.d^^e93s2i3r
+.d^^e93s2ist
+.d^^e92s1o2
+.d^^e93s2o3d^^e9
+.d^^e93s2o3l
+.d^^e93s2o3pil
+.d^^e93s2orm
+.d^^e93s2orp
+.d^^e93s2oufr
+.d^^e92s1^^f7 % mjf jun88
+.d^^e91s2c
+.d^^e91s2p
+.d^^e91s2t
+.d^^e92s1u2n
+.di1a2c^^e9
+.di1a2cid
+dia2g3n
+.di1ald
+.di1a2mi
+.di1a2tom
+.di1e2n
+.di2s3h
+.dy2s1a2
+.dy2s1i2
+.dy2s1u2
+.dy2s3
+.en1a2
+en1i2vr
+.en1o2
+.eu2r1a2
+extra1
+extra2c
+extra2i
+h^^e9mi1^^e9
+h^^e9mo1p2t
+hypera2
+hyper^^e92
+hyper^^f72
+hyperi2
+hypero2
+hypers2
+hyperu2
+hype4r1
+hypo1a2
+hypo1^^e92
+hypo1i2
+hypo1o2
+hypo1u2
+hypo1s2
+.in1a2
+.in2a3nit
+.in2augur
+.in1^^e92
+.in2e3lucta
+.in2^^e93narra
+.in1e2
+.in2ept
+.in2er
+.in1i2
+.in2i3miti
+.in2i3q
+.in2i3t
+.in1o2
+.in2o3cul
+.in2ond
+.in1s2tab
+.in1u2
+.in2uit
+.in2u3l
+.intera2
+.inter^^e92
+.intere2
+.interi2
+.intero2
+.interu2
+.inters2
+.inte4r3
+la2w3re
+.ma2c3k
+.macro1s2c
+.ma2l1a2dres
+.ma2l1a2dro
+.ma2l1ais^^e9
+.ma2l1ap
+.ma2l1a2v
+.ma2l1en
+.ma2l1int
+.ma2l1oc
+.ma2l1o2d
+.ma2r1x
+.m^^e92g1oh
+.m^^e92s1es
+.m^^e92s1i
+.m^^e92s1u2s
+.m^^e9ta1s2ta
+.milli1am
+.mono1a2
+.mono1^^e92
+.mono1e2
+.mono1i2
+.mono1^^ef2d^^e9
+.momo1o2
+.mono1u2
+.mono1s2
+.no2n1obs
+o2b3long
+ombud2s3
+omni1s2
+.oua1ou
+.ovi1s2c
+oxy1a2
+pal^^e9o1^^e92
+.pa2n1a2f
+.pa2n1a2m^^e9
+.pa2n1a2ra
+.pa2n1is
+.pa2n1o2ph
+.pa2n1opt
+.para1s2
+.pa2r1a2che
+.pa2r1a2ch^^e8
+.pa2r3h^^e9
+.per1a2
+.per1^^e92
+.per1e2
+.per1i2
+.per1o2
+.per1u2
+per3h
+.pe4r
+p^^e92n1ul
+p^^e92r1^^e92q
+.p^^e9ri1os
+.p^^e9ri1s2
+.p^^e9ri2s3s
+.p^^e9ri2s3ta
+.p^^e9ri1u2
+.phalan3s2t
+photo1s2
+.phyto3ph2
+.pluri1a
+poly1a2
+poly1^^e92
+poly1^^e82
+poly1e2
+poly1i2
+poly1o2
+poly1u2
+poly1s2
+.pos2t3hy
+.pos2t1in
+.pos2t1o2
+.pos2t3r
+.post1s2
+.pr^^e91a2
+.pr^^e92au
+.pr^^e91^^e92
+.pr^^e91e2
+.pr^^e91i2
+.pr^^e91o2
+.pr^^e91u2
+.pr^^e91s2
+.pro1^^e92
+.prou3d2h
+.pro1s2c^^e9
+.psycho1a2n
+.pud1d2l
+.re1s2
+.re2s3cap
+.re2s3cou
+.re2s3cri
+.re2s3pect
+.re2s3pir
+.re2s3plend
+.re2s3pons
+.re2s3quil
+.re2s3s
+.re2s3t
+.re3s4tab
+.re3s4tag
+.re3s4tand
+.re3s4tat
+.re3s4t^^e9n
+.re3s4t^^e9r
+.re3s4tim
+.re3s4tip
+.re3s4toc
+.re3s4top
+.re3s4tr
+.re4s5trein
+.re4s5trict
+.re4s5trin
+.re3s4tu
+.re3s4ty
+.r^^e91a2
+.r^^e92a3le
+.r^^e92a3lis
+.r^^e92a3lit
+.r^^e92aux
+.r^^e91^^e92
+.r^^e91e2
+.r^^e92el
+.r^^e92er
+.r^^e92^^e8r
+.r^^e91i2
+.r^^e92i3fi
+.r^^e91o2
+.r^^e91u2
+.r^^e92uss
+.r^^e9tro1a2
+sesqui1a2
+st^^e9r^^e9o1s2
+.su2b1a2
+.su3b2alt
+.su2b1^^e92
+.su3b2^^e93r
+.su2b1in
+.su2b3limin
+.su2b3lin
+.su2b3lu
+sub1s2
+.su2b1ur
+supero2
+supers2
+supe4r1
+.su2r1a2
+su3r2ah
+.su3r2a3t
+.su2r1e2
+.su3r2eau
+.su3r2e1l
+.su3r2et
+.su2r1^^e92
+.su2r3h
+.su2r1i2m
+.su2r1inf
+.su2r1int
+.su2r1of
+.su2r1ox
+t^^e9l^^e91e2
+t^^e9l^^e91i2
+t^^e9l^^e91o2b
+t^^e9l^^e91o2p
+t^^e9l^^e91s2
+thermo1s2
+tran2s1a2
+tran3s2act
+tran3s2ats
+tran2s3h
+tran2s1o2
+tran2s3p
+tran2s1u2
+.tri1a2c
+.tri1a2n
+.tri1a2t
+.tri1o2n
+archi1^^e92pis
+moye2n1^^e22g
+po1astre
+uni1o2v
+uni1a2x
+v^^e9lo1s2ki
+vol2t1amp
+tachy1a2
+tchin3t2
+chlo2r3a2c
+chlo2r3^^e92t
+n3s2at.
+n3s2ats.
+}
+\egroup
+
+\endinput
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Changes to fr8hyphen.tex of July 91
+
+(A) \bgroup and \egroup embrace file to render temporary
+the \lccode's declared. \lccode > 0 is necessary for each character
+appearing in argument of \patterns. This led to (B).
+
+(B) Two changes ^^d6 to ^^e0 = <`a> mar 92 should be confirmed. (ls)
+
+(C) Remarks of D Flipo 3-92 on fr8hyphen.tex of July 91 incorporated:
+
+ 1) les . de debut de mot sont remplaces
+ par des .. (erreur de transmission
+ sur les reseaux sans doute...) [246 corrections made!!]
+ 2) il faudrait ajouter les lignes
+ .cons2
+ .cul4
+ pour eviter les cesures cons-titution et cul-ture par ex.
+ 3) il faut supprimer la ligne
+ 1ct
+ pour ne pas avoir les cesures corre-ctement etc...
+ 4) il y a d'autres cesures incorrectes comme app-lication, app-lique
+
+
diff --git a/macros/generic/hyacc-cm/h-plain.dmp b/macros/generic/hyacc-cm/h-plain.dmp
new file mode 100644
index 0000000000..b67280d1fe
--- /dev/null
+++ b/macros/generic/hyacc-cm/h-plain.dmp
@@ -0,0 +1,60 @@
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% h-plain-e.dmp ; Spanish email-portable
+ %%% plain format dumper file.
+ %%% J-L Varona and L. Siebenmann, 5-92
+ %%% Based on HyAcc-CM
+ %%% of D. Flipo and L. Siebenmann
+ %%% and patterns of Manuel Vazquez
+ %%%
+ %%% COMPILATION:
+ %%% Locate outside the "TeX inputs" folder
+ %%% to avoid destruction of English hyphen.tex
+ %%% Compile with virtex or initex
+ %%% to produce format h-plain.fmt
+ %%%
+
+ \catcode`\{=1 \catcode`\}=2
+ \catcode9=10\relax% tab is space
+
+ \immediate\openout10=hyphen.tex
+ \def\temp{\immediate\write10}
+
+ \temp{\lccode`\noexpand\'=`\noexpand\'}
+
+ %%% Brief 7-bit Spanish pattern file
+ %% by Manuel Vazquez, Universidad de Zaragoza
+ \temp{%
+ \patterns {%
+ 1b 2bd 2bm 2bs 2by %
+ 1c 2cc 2cn 2ct %
+ 1d 2d1h 2dm 2dq 2dv 2dy %
+ 1f ..1g 2gd 2gn %
+ l1h %
+ 1j %
+ 1k %
+ 1la 1le 1li 1lo 1lu 1l2l b2l c2l f2l g2l p2l %
+ }}
+ \temp{%
+ \patterns {%
+ 1m 2mb 2mp 2mn %
+ 1na 1ne 1ni 1no 1nu %
+ 1p 2pt 2ps 2pc %
+ 1q %
+ 1ra 1re 1ri 1ro 1ru b2r c2r d2r f2r g2r p2r t2r %
+ 1sa 1se 1si 1so 1su %
+ 1t 2tl %
+ 1v %
+ 1x 2xp 2xt %
+ 1y %
+ 1z 2zb 2zm %
+ }}
+
+ \immediate\closeout10
+
+ \input plain.tex %% standard Plain
+
+ \input HyAcc-CM
+
+ \dump
+
+
diff --git a/macros/generic/hyacc-cm/hyacc-cm.doc b/macros/generic/hyacc-cm/hyacc-cm.doc
new file mode 100644
index 0000000000..1d3a057a11
--- /dev/null
+++ b/macros/generic/hyacc-cm/hyacc-cm.doc
@@ -0,0 +1,411 @@
+ %%% File HyAcc-CM.doc
+ %% Documentation for typographers and TeX programmers
+ %% For basic user instructions see the header
+ %% of HyAcc-CM.tex, the one example below
+ %% and the format compilation mechanism
+ %% fe-format-dumper-cm
+
+
+ OUR PERSPECTIVE ON THE HYPHENATION PROBLEM
+
+ Jacques Desarmenien's devices for obtaining respectable
+hyphenation in the presence of accents were never optimized nor
+internationalized --- conjecturally because it was expected
+that a version 3 of TeX would be based on MLTeX of M. Ferguson
+and rather simply offer optimal hyphenation with no change in
+the TeX environment.
+
+ This did not come to pass. When TeX version 3 came along,
+it instead offered something better inasmuch as the accented
+characters can be tailor-made under the new 8-bit regime
+(rather than composed of accent plus character). But, at the
+same time, the cost was unexpectedly high: new fonts, new
+drivers, new norms, and new formats. They are burdensome for
+many European TeX users, and perhaps out of reach of many
+non-European users.
+
+ It was then announced that TeX and Metafont will not be
+further changed by its author Don Knuth, nor by by anyone else
+so long as they bear their present copyrighted names.
+
+ Thus, rather unexpectedly, it has became desirable to have a
+good international version of modest but decent hyphenation in
+the presence of accents that works with absolutely all versions
+of TeX since 1982, in particularly with TeX and Computer Modern
+fonts as documented by Knuth.
+
+ If you use TeX in a version <3, prior to fall 1989, you
+should avoid recent hyphenation pattern files. Also, for better
+portability, always prefer pattern files in ASCII format.
+
+ Many 7-bit european hyphenation pattern tables are sufficiently
+compact and portable to circulate along with .tex manuscripts by
+electronic mail. For example, f7hyphen.tex the 7-bit French
+hyphenation file of Desarmenien is just 4Ko, while HyAcc-CM.tex is
+5Ko (without comments).
+
+
+
+A TYPICAL (FRENCH) USE OF HYACC-CM
+
+ Let us consider the typical case of a French visitor to the
+Anglo-Saxon world who, to process his French typescript, has to
+use a "mainframe" computer exploiting exclusively CM fonts. If he
+is fortunate enough to use Plain.tex, he can quite simply replace
+TeX by INITEX at the cost of adding as a header to his typescript
+the incantation:
+
+ \input plain.tex %% standard, using US hyphenation for language 0
+ \bgroup\catcode`@=11
+ \global\def\US{\lccode`\'=0\nofrenchspacing\language=0}
+ \newlanguage\l@French
+ \global\def\FR{\lccode`\'=`\'\frenchspacing\language=\l@French}
+ \egroup
+ \FR
+ \input f7hyphen.tex
+ \input hyacc-cm.tex
+
+His TeX typescript will be set by INITEX starting with French
+hyphenation; \US restores US English. This assumes the
+typescript inputs adequate macros for French punctuation etc.
+
+ Alternatively, he can make of this header a separate file
+concluded by \dump newformat.fmt. Then INITEX dumps a format,
+say newformat.fmt, which can in turn be used under INITEX
+by reducing the header to
+
+ &newformat.fmt
+
+This second procedure is the one that best generalizes to massive
+formats such as LaTeX. Some ready-made recipes for them can be
+found in fe-format-dumper-cm posted on ftp matups.matups.fr.
+(These include fe-punct.tex and gllmts.tex giving rudimentary
+macros for French versus English punctuation.) However, in
+hostile environments, the use of simple formulas as above is often
+the most cost-effective strategy.
+
+ In a worst possible scenario, INITEX (initex) is unavailable.
+Then one has to use the English hyphenation in conjunction with
+HyAcc-CM. For this, the following simpler header can be used on
+top of any standard English format:
+
+ \def\US{\lccode`\'=0 \nofrenchspacing}
+ \def\FR{\lccode`\'=`\' \frenchspacing}
+ \FR
+ \input hyacc-cm.tex
+ \pretolerance=800 %% discourages hyphenation
+
+Hyphenation points that occur have to be checked for correctness
+and replaced by explicit hypenations (via \-) when necessary.
+
+
+A HISTORY AND EXPLANATION OF THE MACROS
+
+ The background reference for all matters to be discussed is
+Appendix H of the TeXbook, and particularly pages 454-455.
+
+ The story begins with Jacques Desarmenien's thesis, Univ.
+Louis Pasteur, Strasbourg, written in the early 1980's partly at
+Stanford under Knuth's influence. The accessible reference is
+Jacques D'esarm'enien: How to run TeX in a French environment:
+hyphenation, fonts, typography, Tugboat, 5 (1984) 91-102. This
+reference discusses hyphenation through the use of fonts
+containing ready-made accented characters of the sort slowly
+coming into use now some 10 years later. This package puts to
+work devices for hyphenation which do NOT require new fonts, and
+which were called upon a few years later when distribution of
+new fonts was provisionally abandoned.
+
+ It is often repeated that hyphenation of a word under 1982
+TeX is blocked at points at and after the first accented
+character because of the explicit kerns that the \accent
+primitive of TeX introduces there.
+
+ The following formula appeared in an unsigned file
+feHyphen.tex that was available from Strasbourg from the mid
+1980's. According to Raymond Seroul, the author is J.
+Desarmanien. The resulting bilingual fePlain format had wide
+currency in France through Seroul's influence.
+
+ \newbox\accentb@x \newdimen\wdb@x
+ \newbox\accentb@@x
+ \let\aig@=\'%
+ \def\'#1{\if e#1\setbox\accentb@x=\hbox{\char"13}%
+ \setbox\accentb@@x=\hbox{e}%
+ \wdb@x=.5\wd\accentb@@x \advance\wdb@x by -.5\wd\accentb@x
+ \kern\wdb@x \char"13 \kern-\wd\accentb@x
+ \penalty\@M \hskip-\wdb@x e%
+ \else \aig@#1\fi}
+
+A verbal interpretation of this is as follows. Let the one
+argument macro \' for accute accents be redefined as follows in
+case the letter being accented is e. Build the accented
+character <e-acute> from the accute accent character "13 and the
+character e using boxes and kerns as common sense recommends,
+except for one detail. Let the last kern (which occurs just
+before the letter e) become an hskip. This causes TeX to
+consider that a new word has begun with a letter e and allows
+hyphenation in that (sub)word. Normally an hskip is an
+acceptable place for a linebreak, but this is prevented in this
+case by insertion of an explicit penalty of 10000.
+
+ Why was only the character \'e dealt with? Conjecturally
+because effort was made via Desarmenien's hyphenation patterns
+to assure that no incorrect hyphenation point resulted from this
+trick. This is a standard we cannot maintain since it is
+implausible that anything but a standard 8 bit hyphenation file
+will be available to users.
+
+ This means that the Desarmenien mechanism will occasionally
+allow an unacceptable hyphenation point. (We do not yet have
+statistics on this.) Some specialists, perhaps including Knuth,
+would frown on this. Other specialists believe that hyphenation
+should in any case be based more on phoenetics meaning and
+etymology than on spelling, and that sort is sometimes
+impossible to perfect with the Knuth-Liang approach. If
+perfection is impossible why insist on complete rigour?
+
+ In the late 1980's, in the Latex style file called
+German.sty H. Partl (and collaborators) used a version of this
+"penalty and hskip" trick which is so clear and simple that it
+allows one to deal with all accents and all letters on an equal
+footing. For example Partl gives
+
+ \gdef\allowhyphens{\penalty\@M \hskip\z@skip}
+ % {\nobreak \hskip 0pt plus 0pt\relax}
+
+ \gdef\highumlaut#1{\leavevmode\allowhyphens
+ \accent127 #1\allowhyphens}
+
+Here the one-argument macro \highumlaut#1 is a new version of
+\"#1 designed to allow hyphenation after the accented character.
+This is certainly shorter and faster than Desarmenien's
+formulation. But there are some peculiarities to discuss.
+
+ The subword following the accent does not include the
+character accented. This unfortunately supresses any kern
+between the character accented and a following character. Such
+kerns are respected by both Knuth's regime (\DKaccents) and
+(generalized) Desarmenien's (\JDaccents). (Note that kerning
+with *preceeding* material is not within the scope of either,
+but see below.)
+
+ Another effect is to keep hyphens further from the
+accented character, which is not in itself a good thing, but
+it may also tend to eliminate bad hyphenations caused by the
+fake word break. (No detailed evaluation has been made.)
+
+ The positive role of \leavevmode and the first
+\allowhyphens is unclear to us and we have let them drop.
+
+ One of us (D.F.) noticed that in case the accented letter
+occurs at the end of a word, linebreak becomes impossible there.
+This may not occur in German but if one were to adopt the German
+approach for accute accent, defining
+
+ \def\'#1{{\accent"13 #1\allowhyphens}}
+
+then linebreak would be prevented after all the innumerable
+French words terminating in e-acute! Here, surely, is the
+reason why \allowhyphens never gained currency in France.
+
+ This disaster does not occur with the Desarmenien approach
+because the construction of the accented character concludes
+with a character and not an hskip.
+
+ Examine now our own definition of \'; under our \JDaccents
+regime it is essentially
+
+ \newbox\hy@accbox
+ \def\'#1{{\accent"13 #1}\setbox\hy@accbox=\hbox{#1}
+ \penalty10000\hskip-\wd\hy@accbox #1}
+
+We chose to use the standard \accent macro and nevertheless use
+Desarmenien's "penalty-hskip-letter" approach, at the
+(negligible!) cost of setting two copies of the letter to be
+accented, one exactly on top of the other. Our approach is thus
+not quite J. Desarmenien's but rather a trick simplification. It
+would have been possible to pursue the Desarmenien approach in
+all cases, but the coding would have been messy for capital
+letters and miscellaneous accents. Incidentally, Desarmenien
+makes it quite clear that he was privy to the folklore of Knuth
+and his students and has made no explicit claim to this trick.
+He did first bring it to fruition, and so we use his initials in
+\JDaccents.
+
+ Granting that one chooses an approach making the letter to
+be accented part of the post-accent (sub)word, it might be
+desirable to make the pre-accent (sub)word terminate with the
+same letter. The two subwords then have that letter in common.
+This might give slightly more acceptable hyphenation points. And
+it would enable kerning with a preceeding letter, not just with
+a following letter. In principle the method extends to do this:
+
+ \def\'#1{{#1\setbox\hy@accbox=\hbox{#1}%
+ \penalty10000\hskip-\wd\hy@accbox
+ \accent"13 #1%
+ \penalty10000\hskip-\wd\hy@accbox #1}}
+
+THREE copies of the letter to be accented are then printed
+directly on top of one another.
+
+ In principle, with digital raster imaging, the result
+should be identical to printing once. However many driver/font
+combinations will at low resolution slightly misplace the first
+of the three copies --- in case the accent occurs at the end of
+a long string of ordinary letters. This is because character
+width errors accumulate over a long string, and thereafter the
+\accent macro makes a fresh calculation of absolute position.
+The Textures screen driver dramatically exhibits this behavior.
+Knowing no cure for this malady, we have abandoned this "three
+copy" approach. Other versions are afflicted to a lesser degree
+by this phenomenon, because the shift involved, although
+present, is between characters several pixels apart.
+
+ We believe that our "two-copy" or "double strike" approach
+will very seldom cause a problem.
+
+ Alas, with some combinations of low resolution drivers and
+fonts some sort of drift has indeed been observed on screen
+and/or paper. For these unfortunate cases we give another
+approach \GFaccents (GF for German-French) which directly
+salvages the German approach by use of an \if ...\fi clause
+involving \futurelet. If the token following the character
+accented is a letter (like a) then one inserts before it a
+penalty of 1000 followed by an hskip of 0 points in order to
+start a new word; but in other cases (notably when a space comes
+next) one inserts nothing. This allows linebreaks after words
+ending in an accented character and followed by a space.
+Expressed in formulae
+
+ \def\preLetterSkip@{\ifcat a\next\penalty\@M\hskip\z@skip\fi}
+ \def\@@@@Allowhyphens{\futurelet\next\preLetterSkip@}
+ \def\'#1{{\accent18#1}\@@@@Allowhyphens}
+
+is essentially our definition of the accute accent \' for the
+\GFaccents regime.
+
+ Unfortunately, this solution will suppress all kerns
+between the character accented and a following character. Also,
+it can be defeated by nonstandard typing; for example TeX braces
+around an accented character will block hyphenation beyond.
+
+ Further, 'futurelet' has occasional nasty side-effects in
+LaTeX. For example, disaster occurs when an accented character
+ends a 'tabular' environment as in:
+
+ -- \begin{tabular} ... Painlev\'e\end{tabular}
+ -- \author{J. Dieudonn\'e}
+
+It's easy to find work-arounds: just add a space after the
+terminal accented character (or put the whole word between curly
+braces) and your problems are over. Thus the modified versions
+
+ -- \begin{tabular} ... Painlev\'e \end{tabular}
+ -- \author{J. Dieudonn\'e } or \author{J. {\sc Dieudonn\'e}}
+
+will cause no problem. But all this shows that this solution is
+fragile.
+
+
+
+LEFTOVERS AND IMPERFECTIONS
+
+ 0) \ogonek #1 provides a provisional ogonek accent under character #1
+It is a translated copy of the left single quote. With this exception
+we treat only the accents in the TeXbook, page 52.
+
+ 1) This version makes no effort to eliminate the following
+deficiency of Plain TeX: \uppercase and \lowercase fail when
+applied to the miscellaneous characters \oe, \OE, \ae, \AE, \o,
+\O, \ss and also to \i. Our \MLcodes macro merely serves to
+allow some hyphenations in words involving these characters.
+This is an imperfection.
+
+ 2) If your computer and TeX have eight bit input capabilities,
+you may wish to type some accented characters in ready-made
+eight bit form using macros of the following sort. (Your TeX
+installation probably has a ready-made collection.)
+
+ \catcode <e-accute>=13
+ \def<e-accute>{\'e}
+
+The formulas are here in an informal but portable ASCII format,
+and you have to put your local e-accute in place of <e-accute>
+before they will work.
+
+ Next some changes that are common safety measures in various
+national macro packages and which we have included here only in
+the form of hints for the TeXpert, since we feel they are
+primarily the responsibility of other macro packages.
+
+ 3) Problems with \write. Only in the last few years have
+simple and fast "sanitized" macros come into use for the purpose
+of writing pieces of the .tex file to an external file. The
+naked \write command makes a mess of accents and of many other
+things, and even may choke. The basic reference seems to be R.
+Whitney, TUGboat, November 1990. Here is a still simpler method:
+
+ \newwrite\index \openout\index{myindex}
+ \def\iWrite#1#2{\toks0{#2}%
+ \immediate\write#1{\the\toks0}
+
+And a typical use is:
+
+ \iWrite\index{...}
+
+The material ... then goes out to the file myindex.tex more or
+less untouched.
+
+ This does not work well for non-immediate writes ---
+typically used to record page number of an index entry, but one
+reasonable remedy is to write the dangerous material with
+\iWrite to one file and the page numbers with \write to another
+file and then collate the two using some device like serial
+numbers or simply line numbers.
+
+ 4) Cleaner messages.
+
+ \message is of the same ilk as \write (and \edef). The above
+"\the\toks..." non-expansion trick can be applied to it to
+prevent mutilation or mishap.
+
+ However most messages come from the bowels of
+macro packages and it is not easy to be sure of their contents.
+Active punctuation as well as accent macros often creep in.
+Recall that character category (eg. 13=active) is fixed forever at TeX's
+lips when the character is input.
+
+ One can input the following redefinition while
+;:?! are active. It will help combat these problems.
+But first check your current meaning of \message.
+
+ \let\@oldmessage@=\message
+ \def\message#1{\begingroup
+ \def\'{'}\def\`{`}\def\"{"}%
+ \def\i{i}\def\oe{oe}\def\ae{ae}\def\c{}%
+ \def\.{}\def\u{}\def\v{}%
+ \def\H{}\def\={}\def\relax{}%
+ \edef~{\string~}%
+ \edef\^{\string^^5e}%
+ \edef:{\string:}%
+ \edef;{\string;}%
+ \edef?{\string?}%
+ \edef!{\string!}%
+ \@oldmessage@{#1}\endgroup}
+
+
+ -------------------------
+
+
+If you notice errors or oversights please contact us.
+
+
+
+ --- Daniel Flipo, Lille <flipo@frcitl81.bitnet>
+
+ --- Laurent Siebenmannn, Orsay <siebenmann@LALCLS.IN2P3.FR>
+
+ April, August, December 1992
+
+
diff --git a/macros/generic/hyacc-cm/hyacc-cm.tex b/macros/generic/hyacc-cm/hyacc-cm.tex
new file mode 100644
index 0000000000..794c603d7a
--- /dev/null
+++ b/macros/generic/hyacc-cm/hyacc-cm.tex
@@ -0,0 +1,250 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% HyAcc-CM.tex is a system for European language hyphenation
+ %%% using the original CM fonts. It is based on an earlier
+ %%% system given by Jacques D\'esarm\'enien
+
+ %%% for French in his fePlain format of the mid 1980's.
+ %%%
+ %%% AIM:
+ %%% Permit automatic TeX hyphenation, under the
+ %%% original Computer Modern font norm, in words containing
+ %%% composite accented characters;
+ %%% more precisely, allow those hyphenations
+ %%% that occur far from the accents. Without
+ %%% HyAcc-CM.tex, hyphenation is blocked near and after the
+ %%% first accented character.
+ %%%
+ %%% SETUP:
+ %%% \input at some point after Plain has been
+ %%% compiled with appropriate hyphenation patterns for the
+ %%% languages to be used. See HyMaster.tex for a typical
+ %%% example.
+ %%%
+ %%% COMMANDS:
+ %%% --- \JDaccents a modified international version of
+ %%% J. Desarmenien's e-accute accent in his "fePlain" format;
+ %%% hyphenation except near accents. This is default.
+ %%% --- \GFaccents similar to \JDaccents, but slightly
+ %%% fragile (for LaTeX); it avoids a dot matrix (low
+ %%% resolution) printer bug afflicting \JDaccents. From
+ %%% German.sty corrected for French and international use.
+ %%% --- \DKaccents gives Knuth's regime under which no
+ %%% hyphenation is allowed beyond first accent in word with
+ %%% accent.
+ %%%
+ %%% PECULIARITY:
+ %%% By default, non-zero lc and uc codes for the
+ %%% sporadic characters \ae, \AE, \oe, \OE,
+ %%% \o, \O, \i, \j following an oecumenical policy
+ %%% of M. Ferguson and D. Taupin.
+ %%% --- \noMLcodes makes them zero
+ %%% (Knuth's Plain setting) and
+ %%% --- \MLcodes returns to our default.
+ %%%
+ %%% RESTRICTIONS:
+ %%% For fonts of the original Computer Modern
+ %%% norm and NOT not the Cork norm.
+ %%% Do not use prose accents in math mode.
+ %%%
+ %%% VIRTUES:
+ %%% decent hyphenation without special European fonts;
+ %%% compatibility with Knuth's documentation.%%XX
+ %%% Temporary 100% return to Knuth's regime is possible
+ %%% via \DKaccents\noMLcodes
+ %%%
+ %%% HISTORY AND PROGRAMMER DOCUMENTATION see HyAcc-CM.doc.
+ %%%
+ %%% POSTING: by Daniel Flipo <flipo@frcitl81.bitnet> and
+ %%% Laurent Siebenmannn <siebenmann@LALCLS.IN2P3.FR> ftp
+ %%% rsovax.ups.circe.fr [130.84.128.100] logon: anonymous,
+ %%% password: your name.
+ %%%
+ %%% VERSION : August, 1992
+ %%% Modifications: Polish \ogonek added,
+ %%% \box0 replaced by \box\hy@accbox
+
+ \def\Msg{\immediate\write16}
+ %% Prevent this file from being loaded twice!
+ \let\this\relax
+ \ifx\JDaccents\undefined\relax
+ \else\Msg{}%
+ \Msg{ *** \string\JDaccents\space
+ already defined.}%
+ \let\this\endinput
+ \fi
+ \this
+
+ %% If \allowhyphens is already defined
+ %% (by German.tex for instance), just complain.
+ \ifx\undefined\allowhyphens
+ \let\this\relax
+ \else
+ \Msg{}%
+ \message{ *** \string\allowhyphens\space
+ (from German.tex) already defined.}%
+ \let\this\endinput
+ \fi
+ \this
+ %%XX
+ \def\W@{\immediate\write16}%
+ \W@{ *************************************************** }
+ \W@{ HyAcc-CM INTERNATIONAL ACCENTUATION MECHANISM FOR CM FONTS}
+ \W@{ permitting decent hyphenation of words with accents.}
+ \W@{ Version of Aug 1992.}
+ \W@{ Updates: ftp rsovax.ups.circe.fr [130.84.128.100].}
+ \W@{ *************************************************** }
+
+ \chardef\JDCatAt=\the\catcode`\@
+ \catcode`\@=11
+ \catcode`\~=12 %% was 13
+
+ \newbox\hy@accbox
+
+ \def\hyaccent#1#2{{\accent#1 #2}\@Allowhyphens{#2}}%
+
+ %% for \JDaccents
+ \def\@@allowhyphens{\penalty\@M\hskip\z@skip}%% for sporadics
+ \def\@@Allowhyphens#1{\setbox\hy@accbox\hbox{#1}%% \hyaccent
+ \penalty\@M\hskip-\wd\hy@accbox #1}%
+
+ %% for \GFaccents
+ \def\preLetterSkip@{\ifcat
+ a\next\relax\penalty\@M\hskip\z@\fi} %XXspacing
+
+ \def\@@@Allowhyphens#1{\noexpand
+ \futurelet\next\preLetterSkip@}
+
+ \let\next\relax %% avoids some mysterious errormessages
+ %% in case you uncautiously use %%XX
+ %% accents in messages, %%XX
+ %% \GFaccents\message{Imb\'ecile!}
+
+ %%% Composite accents for CM fonts
+ %% TeXbook p. 52
+
+ \def\DoCMAccents{%% cf \dospecials of Plain
+ \do`"12..%% grave
+ \do'"13..%% accute
+ \do^"5E..%% hat
+ \do""7F..%% umlaut
+ \do~"7E..%% tilde
+ \do="16..%% macron (bar over)
+ \do."5F..%% dot over
+ \do u"15..%% breve
+ \do v"14..%% check
+ \do H"7D..%% long umlaut
+ %%\t tie absent see below
+ }
+
+ \def\CheckPeriod#1{\if#1.\else
+ \errmessage{ !!! Error in DoAccChars data}\fi}
+
+ \def\DoAccent#1#2.#3{\CheckPeriod{#3}%
+ \expandafter
+ \def\csname #1\endcsname##1{%
+ \relax\hyaccent{#2}{##1}}%
+ }
+
+ \let\do\DoAccent
+ \DoCMAccents %% Sets up principal new accent macros
+
+ %%% Residual accents : \c,\aa,\AA,\l,\L
+
+ \def\oldCedilla#1{\setbox\hy@accbox\hbox{#1}%
+ \ifdim\ht\hy@accbox=1ex\accent24 #1%
+ \else{\ooalign{\unhbox\hy@accbox\crcr\hidewidth\char24\hidewidth}}%
+ \fi}
+
+ \def\c#1{{\oldCedilla#1}\@Allowhyphens{#1}}
+
+ \def\L{\char32 L}
+ \def\l{\char32 l}
+
+ \def\AA{\leavevmode\setbox\hy@accbox\hbox{h}%
+ \dimen@\ht\hy@accbox\advance\dimen@-1ex%
+ \rlap{\raise.67\dimen@\hbox{\char'27}}\@allowhyphens A}
+
+ \def\aa{\hyaccent{"17}{a}}
+
+ \def\oldUnderBar#1{\oalign{#1\crcr\hidewidth
+ \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
+
+ \def\b#1{\oldUnderBar#1\@Allowhyphens{#1}}% underbar
+
+ \def\d#1{\oalign{#1\crcr
+ \hidewidth.\hidewidth}\@Allowhyphens{#1}}%underdot
+
+ \def\t#1{{\edef\next{\the\font}\the\textfont1\accent
+ "7F\next#1}\@Allowhyphens{#1}}
+ %% tie; \textfont1 is cmmi
+
+ \def\oldOgonek#1{\setbox\hy@accbox=\hbox{`}\ooalign{\hidewidth
+ \lower\ht\hy@accbox\copy\hy@accbox%%\hidewidth
+ \crcr#1\crcr}}
+ \def\ogonek#1{{\oldOgonek#1}\@Allowhyphens{#1}}% ogonek
+
+
+ %%% Sporadic characters in cm
+ %%% Plain assigns codes 0; Ferguson and Taupin as follows
+ %%% see article of Taupin (to appear)
+ %%% For better or worse, this permits hyphenation of
+ %%% words containing these characters.
+ %%% More importantly it is a policy that
+ %%% is language-independant.
+ %%% But catcodes are left 12 and not 11, to prevent use
+ %%% in macro names when directly typed.
+
+ \def\SetULCodes#1#2{%
+ \uccode#1=#1\lccode#1=#2
+ \uccode#2=#1\lccode#2=#2
+ }
+
+ \def\KillULCodes#1#2{%
+ \uccode#1=0\lccode#1=0
+ \uccode#2=0\lccode#2=0
+ }
+
+ \def\MLcodes{%
+ \SetULCodes{"19}{"19} %% \ss (degenerate case)
+ \SetULCodes{"1D}{"1A} %% \AE,\ae
+ \SetULCodes{"1E}{"1B} %% \OE,\oe
+ \SetULCodes{"1F}{"1C} %% \O, \o
+ \lccode"10="10 %% \i
+ }
+
+ \def\noMLcodes{%
+ \KillULCodes{"19}{"19} %% \ss (degenerate case)
+ \KillULCodes{"1D}{"1A} %% \AE,\ae
+ \KillULCodes{"1E}{"1B} %% \OE,\oe
+ \KillULCodes{"1F}{"1C} %% \O, \o
+ \lccode"10=0 %% \i
+ }
+
+ %%% For LaTeX 2.xx necessary change for \parbox macro
+ \ifx\documentstyle\undefined
+ \else %% if LaTeX IS loaded, save our new definitions of
+ %% \' \` and \= for \parbox macro (LaTeX 2.xx)
+ \let\@acci=\'
+ \let\@accii=\`
+ \let\@acciii=\=
+ \fi
+
+ %% JD for Jacques Desarmenien
+ \def\JDaccents{\let\@Allowhyphens\@@Allowhyphens
+ \let\@allowhyphens\@@allowhyphens}
+
+ %% GF for German French
+ \def\GFaccents{\let\@Allowhyphens\@@@Allowhyphens
+ \let\@allowhyphens\@@allowhyphens}
+
+ %% DK for Don Knuth
+ \def\DKaccents{\def\@Allowhyphens##1{\relax}%
+ \let\@allowhyphens\relax}
+
+ %% Back to normal catcodes
+ \catcode`\~=13
+ \catcode`\@=\JDCatAt
+
+ \MLcodes\JDaccents %% defaults
+
+ \endinput
diff --git a/macros/generic/hyacc-cm/hymaster.tex b/macros/generic/hyacc-cm/hymaster.tex
new file mode 100644
index 0000000000..e421a7f314
--- /dev/null
+++ b/macros/generic/hyacc-cm/hymaster.tex
@@ -0,0 +1,92 @@
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% HyMaster.tex A simplest recipe for compilation of
+ %%% Plain TeX for more than one European language.
+ %%% Set up for French and US English, but readily adaptable
+ %%% to other combinations.
+ %%% NOT TO BE COMPILED AS IS; SEE INSTRUCTIONS AFTER \endinput
+ %%%
+
+ \def\NewLanguage{\alloc@9\language\chardef\@cclvi}
+ % like \newlanguage but more accessible
+ \NewLanguage\l@US
+ \language=\l@US
+ \input ushyphen % US English hyphenation table
+
+ \NewLanguage\l@FR
+ \language=\l@FR
+ \input frhyphen.crk %% maybe fr7hyph.tex (7bit patterns enough)
+ %% Use automobile nationality codes for others:
+ %% FR, US, GB, DE, SP, IT, NL, DA, PO,
+ %% CS, HU, IS, SW, NO, FI, ...
+
+ \def\FR{\language=\l@FR \lccode`\'=`\'}
+ %% apostrophe is a letter in french jus-qu'a, l'ha-bi-tude
+ %% see \patterns of Desarmenien
+
+ \def\US{\language=\l@US \lccode`\'=0}
+
+ \FR % French used by default
+
+\endinput
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ COMPILATION INSTRUCTIONS
+
+ This enhanced Plain format can then be used as a basis for
+other formats such as AmSTeX, MacroTeX, and LamsTeX, or your
+current local format.
+
+ For LaTeX one proceeds analogously but starting from a
+suitable LPlain.tex (and auxiliary files) rather than from
+Plain.tex. The format ultimately produced is an enhanced LaTeX
+format.
+
+ It is important to use version 3.xx of TeX, and a version
+3.xx of plain.tex. The critical date is autumn 1989, and
+earlier material will be inadequate. In earlier versions of TeX,
+only one language can have hyphenation at a given moment ---
+usless one uses the "dirty trick" of John Hobby which permitted
+Desarmenian to distribute a French-English version of Plain
+format.
+
+ Here are instructions for a generic TeX. Establish a
+directory containing the following files.
+
+ (i) fhyphen.crk a copy of the French hyphenation pattern
+file using the ISO Latin 1 (or Cork) standard for encoding
+accented characters. One is included, with its history.
+
+ (ii) ushyphen.tex, a copy of the US hyphenation pattern file
+--- which in standard TeX distribution bears the name
+hyphen.tex.
+
+ (iii) hyphen.tex, a copy of this macro file HyMaster.tex.
+
+ (iv) plain.tex exactly as provided by D. Knuth.
+
+Note that some systems (Mac, VMS, ...) identify upper and lower
+case letters, while others (unix, ...) distinguish them.
+
+
+ Compile plain.tex using VIRTEX or INITEX, i.e., the
+primitive form of TeX made for format building.
+
+ (a) For Textures this operation consists in typesetting
+with VIRTEX a file containing only \input plain.tex \dump.
+
+ (b) For OzTeX, launch INITEX and respond to a prompt ** by
+typing
+
+**Plain.tex \dump<carriage return>
+
+It does not matter if minor fonts such as manfont are missing;
+just hit carriage return.
+
+ In either case you will in due course be invited to name
+the resulting format, (say as NEW.fmt). In the case of OzTeX
+the name must be registered in your configuration file before
+you are allowed to use it.
+
+
+
diff --git a/macros/generic/hyacc-cm/hytstfr.tex b/macros/generic/hyacc-cm/hytstfr.tex
new file mode 100644
index 0000000000..2dbf6786ce
--- /dev/null
+++ b/macros/generic/hyacc-cm/hytstfr.tex
@@ -0,0 +1,169 @@
+
+ %% HyTestFr.tex
+ %% A simple test file for HyAccJD.tex
+ %% Daniel Flipo, Lille <flipo@frcitl81.bitnet>
+ %% Laurent Siebenmannn, Orsay <siebenmann@LALCLS.IN2P3.FR>
+ %% April, 1992
+
+ \input HyAcc-CM.tex
+
+ \def\Msg{\immediate\write16}
+ \catcode`\@=11
+
+ %% No double loading
+ \let\this\relax
+ \ifx\undefined\GFaccents
+ \Msg{}\Msg{Sorry HyAcc-CM not loaded. Exit.}
+ \let\this \endinput
+ \fi
+ \this
+
+ %% LateX red tape
+ \ifx\undefined\documentstyle
+ \toks0{\par \vfill \supereject \end}
+ \else
+ \documentstyle[art10]{article}
+ \begin{document} %% for LateX only.
+ \toks0{\csname end\endcsname{document}}
+ \fi
+ \outer\edef\bye{\the\toks0}
+
+ \parindent=0cm%%
+
+ \def\hytest{ma\c connerie d\'econtenanc\'ee }%% alter this!!
+ \def\Hytest{\hytest\hytest\hytest\hytest\hytest}
+
+ \hsize=280pt
+ \tolerance=10000 %% vary this!
+ \frenchspacing
+ \overfullrule=10pt
+
+ \JDaccents\MLcodes
+ \Msg{}\Msg{ *** Hyphenation points offered by default }
+ \showhyphens{\hytest}
+ *** Hyphenation by default:
+ \par \Hytest\bigskip
+
+ \GFaccents\MLcodes
+ \Msg{}\Msg{ *** Hyphenation points offered by }
+ \Msg{ *** corrected German approach. }
+ \showhyphens{\hytest}
+ *** Hyphenation by corrected German approach:
+ \par \Hytest\bigskip
+
+
+ \DKaccents\noMLcodes
+ \Msg{}\Msg{ *** Hyphenation points offered virginal Plain }
+ \showhyphens{\hytest}
+ *** Hyphenation by virginal Plain:
+ \par \Hytest\bigskip
+
+
+
+ Minuscules :
+
+ \`a \`e \`\i{} \`o \`u
+
+ \'a \'e \'\i{} \'o \'u
+
+ \^a \^e \^\i{} \^o \^u
+
+ \"a \"e \"\i{} \"o \"u \"y
+
+ \c c \~a \~n \~o \o{} \ae{} \oe{} \ss{} \aa{}
+ \medskip
+ Minuscules :
+
+ \`a\`e\`\i{}\`o\`u
+
+ \'a\'e\'\i{}\'o\'u
+
+ \^a\^e\^\i{}\^o\^u
+
+ \"a\"e\"\i{}\"o\"u\"y
+
+ \c c\~a\~n\~o\o{}\ae{}\oe{}\ss{}\aa{}
+
+ \bigskip
+ MAJUSCULES :
+
+
+ \`A \`E \`I{} \`O \`U
+
+ \'A \'E \'I{} \'O \'U
+
+ \^A \^E \^I{} \^O \^U
+
+ \"A \"E \"I{} \"O \"U \"Y
+
+ \c C \~A \~N \~O \O{} \AE{} \OE{} SS{} \AA{}
+
+ \medskip
+ \`A\`E\`I{}\`O\`U
+
+ \'A\'E\'I{}\'O\'U
+
+ \^A\^E\^I{}\^O\^U
+
+ \"A\"E\"I{}\"O\"U\"Y
+
+ \c C\~A\~N\~O\O{}\AE{}\OE{}SS{}\AA{}
+
+
+
+ \bigskip
+
+ \hsize=150pt
+ \GFaccents
+ \JDaccents
+
+ Line breaks after accent:
+
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+ d\'ej\`a \'et\'e \'em\'ech\'e
+
+ \bigskip
+
+ Some remaining problems:
+
+ \uppercase{ci-g\^\i{}t
+ fran\c cais na\"\i{}f d\'es\oe{}uvr\'e b\^ete
+ et adult\`ere}
+
+ \bye
+
+ %% Further test material
+
+ \def\hytesti{ci-g\^\i{}t fran\c cais na\"\i{}f
+ d\'es\oe{}uvr\'e b\^ete et adult\`ere}
+
+\def\hytestii{signal man\oe{}uvres \oe{}uvrer
+d\'es\oe{}uvrement l\ae{}ticia laticia laennec
+l\ae{}nnec d\'eculpabiliser r\'eactualisation
+\'education ex\'ecution inexp\'erience ma\c
+connerie fa\c con
+abandonn\'es distingu\'es abandonn\'e distingu\'e
+\'ethymologiquement syst\'ematiquement }
+
+ \def\hytestiii{d\'econtenanc\'ee, h\'eb\'et\'ee,
+d\'efaite de toute s\'er\'enit\'e devant cet
+ab\'ec\'edaire d\'ecapit\'e, \'et\^et\'e,
+\'evid\'e, \'emascul\'e, d\'esagr\'eg\'e,
+d\'ebilit\'e, d\'eg\'en\'er\'e, parce que priv\'e
+de lettres accentu\'ees et correctement
+orthographi\'ees, Th\'er\`ese-\'El\'eonore a
+d\'ecr\'et\'e avec sinc\'erit\'e et opini\^atret\'e
+l'immortalit\'e des \c c\`a\c
+c\^ac\'ec\`ec\^ec\"ec\^\i\ ainsi que des \c
+c\^o\c c\"o\c c\`u\c c\^u\c c\"u.}
+
+
+
diff --git a/macros/generic/ifptex/LICENSE b/macros/generic/ifptex/LICENSE
new file mode 100644
index 0000000000..8ada757fbc
--- /dev/null
+++ b/macros/generic/ifptex/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/macros/generic/ifptex/README-ja.md b/macros/generic/ifptex/README-ja.md
new file mode 100644
index 0000000000..48690cce58
--- /dev/null
+++ b/macros/generic/ifptex/README-ja.md
@@ -0,0 +1,108 @@
+ifptex パッケージãƒãƒ³ãƒ‰ãƒ«
+=========================
+
+TeX: エンジン㌠pTeX(やãã®æ´¾ç”Ÿï¼‰ã§ã‚ã‚‹ã‹ã‚’判定ã™ã‚‹
+
+ifptex パッケージ㯠ifxetex ã‚„ ifluatex ç­‰ã®ãƒ‘ッケージ㮠pTeX 版ã«
+相当ã™ã‚‹ã€‚ifuptex パッケージ㯠ifptex ã®åˆ¥åã§ã€å¾Œæ–¹äº’æ›æ€§ã®ãŸã‚ã«
+用æ„ã•ã‚Œã¦ã„る。
+
+### システムè¦ä»¶
+
+ - TeX フォーマット: plain TeXã€LaTeX (ãŠã‚ˆã³ä»–ã® plain 互æ›ãªã‚‚ã®ï¼‰
+ - TeX エンジン: ä¸å•
+ - DVI ウェア(DVI 出力時): ä¸å•
+
+### インストール
+
+TDS 1.1 ã«æº–æ‹ ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã®å ´åˆã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’移動ã™ã‚‹ï¼š
+
+ - `*.sty` → $TEXMF/tex/latex/ifptex
+
+ã“ã®å¾Œå¿…è¦ã«å¿œã˜ã¦ mktexlsr を実行ã™ã‚‹ã€‚
+
+ifptex パッケージ ― pTeX 系エンジンã®åˆ¤å®š
+------------------------------------------
+
+### パッケージ読込
+
+plain TeX ã®å ´åˆï¼š
+
+ \input ifptex.sty
+
+LaTeX ã®å ´åˆï¼š
+
+ \usepackage{ifptex}
+
+### 機能
+
+注æ„:e-TeXæ‹¡å¼µã®æœ‰ç„¡ã¯åŒºåˆ¥ã•ã‚Œãªã„。
+
+ * `\ifpTeX`(åˆã¯ `\ifptex`)[if-トークン]
+ pTeX(upTeXã€pTeX-ng ã‚’å«ã‚€ï¼‰ã‚’使ã£ã¦ã„ã‚‹ã‹ã€‚
+ * `\ifstrictpTeX`(åˆã¯ `\ifstrictptex`)[if-トークン]
+ pTeX(upTeXã€pTeX-ng ã§ã¯ãªã)を使ã£ã¦ã„ã‚‹ã‹ã€‚
+ * `\ifupTeX`(åˆã¯ `\ifuptex`) ï¼»if-トークン]
+ upTeX(pTeX-ng ã‚’å«ã‚€ï¼‰ã‚’使ã£ã¦ã„ã‚‹ã‹ã€‚
+ * `\ifstrictupTeX`(åˆã¯ `\ifstrictuptex`) ï¼»if-トークン]
+ upTeX(pTeX-ng ã§ã¯ãªã)を使ã£ã¦ã„ã‚‹ã‹ã€‚
+ * `\ifnativeupTeX` [if-トークン]
+ upTeX を内部文字コード㌠Unicode ã®çŠ¶æ…‹ã§ä½¿ã£ã¦ã„ã‚‹ã‹ã€‚
+ * `\ifpTeXng`(åˆã¯ `\ifptexng`)[if-トークン]
+ pTeX-ng を使ã£ã¦ã„ã‚‹ã‹ã€‚
+ ※一応 `\ifstrictpTeXng`(`\ifstrictptexng`)もã‚る。
+ * `\RequirepTeX`
+ `\ifpTeX` ä¸æˆç«‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã™ã€‚
+ * `\RequireStirctpTeX`
+ `\ifstrictpTeX` ä¸æˆç«‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã™ã€‚
+ * `\RequireupTeX`
+ `\ifupTeX` ä¸æˆç«‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã™ã€‚
+ * `\RequireStrictupTeX`
+ `\ifstrictupTeX` ä¸æˆç«‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã™ã€‚
+ * `\RequireNativeupTeX`
+ `\ifnativeupTeX` ä¸æˆç«‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã™ã€‚
+ * `\RequirepTeXng`
+ `\ifpTeXng` ä¸æˆç«‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã™ã€‚
+ ※一応 `\RequireStrictpTeXng` ã‚‚ã‚る。
+
+
+ifuptex パッケージ ― ifptex ã®åˆ¥å
+-----------------------------------
+
+ãŸã å˜ã« ifptex を読ã¿è¾¼ã‚€ã ã‘ã®ãƒ‘ッケージã§ã‚ã‚Šã€0.2 版ã¨ã®å¾Œæ–¹äº’æ›æ€§ã®
+ãŸã‚ã«ç”¨æ„ã•ã‚Œã¦ã„る。
+
+### パッケージ読込
+
+plain TeX ã®å ´åˆï¼š
+
+ \input ifuptex.sty
+
+LaTeX ã®å ´åˆï¼š
+
+ \usepackage{ifuptex}
+
+
+更新履歴
+--------
+
+ * Version 1.2c 〈2017/10/04〉
+ - ãƒã‚°ä¿®æ­£ã€‚
+ * Version 1.2b 〈2017/09/20〉
+ - ãƒã‚°ä¿®æ­£ã€‚
+ * Version 1.2a 〈2017/09/15〉
+ - (試験的) `漢字コード=UTF-8` 機能を追加。
+ * Version 1.2 〈2017/09/09〉
+ - `\ifstrictupTeX`ã€`\RequireStrictupTeX` を追加。
+ * Version 1.1 〈2017/05/04〉
+ - ç´°ã‹ã„調整。
+ * Version 1.0 〈2013/04/29〉
+ - 独立ã®ãƒãƒ³ãƒ‰ãƒ«ã«ç§»å‹•ã€‚
+ - パッケージåã‚’ ifptex ã«å¤‰æ›´ã—ã¦ã€pTeX 判定機能を付加。
+ - (試験的) upTeX ã®ç‰ˆåˆ¤å®šæ©Ÿèƒ½ã‚’追加。
+ * Version 0.2 〈2008/03/14〉
+ - 最åˆã®å…¬é–‹ç‰ˆã€‚
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/macros/generic/ifptex/README.md b/macros/generic/ifptex/README.md
new file mode 100644
index 0000000000..c9d37688f9
--- /dev/null
+++ b/macros/generic/ifptex/README.md
@@ -0,0 +1,111 @@
+ifptex Package Bundle
+=====================
+
+TeX: To check the engine is pTeX (or its derivatives)
+
+The ifptex package is a counterpart of ifxetex, ifluatex, etc. for
+the pTeX engine. The ifuptex package is an alises to ifptex provided
+for backward compatibility.
+
+### System Requirements
+
+ - TeX format: plain TeX, LaTeX (and any plain-compatible ones).
+ - TeX engine: Anything.
+ - DVI driver (in DVI mode): Anything.
+
+### Installation
+
+In a system compliant to TDS 1.1, move the files as follows:
+
+ - `*.sty` → $TEXMF/tex/latex/ifptex
+
+And rehash your TEXMF trees if necessary.
+
+### License
+
+This package is distributed under the MIT License.
+
+ifptex Package ― Test for pTeX engine
+--------------------------------------
+
+### Package Loading
+
+In plain TeX:
+
+ \input ifptex.sty
+
+In LaTeX:
+
+ \usepackage{ifptex}
+
+### Usage
+
+NB: Here “e-TeX-ness†is not considered.
+
+ * `\ifpTeX` (or `\ifptex`) [if-token]
+ Whether the engine is pTeX (including upTeX or pTeX-ng).
+ * `\ifstrictpTeX` (or `\ifstrictptex`) [if-token]
+ Whether the engine is pTeX but *not* upTeX or pTeX-ng.
+ * `\ifupTeX` (or `\ifuptex`) [if-token]
+ Whether the engine is upTeX (including pTeX-ng).
+ * `\ifstrictupTeX` (or `\ifstrictuptex`) [if-token]
+ Whether the engine is upTeX but *not* pTeX-ng.
+ * `\ifnativeupTeX` [if-token]
+ Whether the engine is upTeX and its internal encoding is Unicode.
+ * `\ifpTeXng` (or `\ifptexng`) [if-token]
+ Whether the engine is pTeX-ng.
+ * `\RequirepTeX`
+ Issues an error if `\ifpTeX` fails.
+ * `\RequireStrictpTeX`
+ Issues an error if `\ifstrictpTeX` fails.
+ * `\RequireupTeX`
+ Issues an error if `\ifupTeX` fails.
+ * `\RequireStrictupTeX`
+ Issues an error if `\ifstrictupTeX` fails.
+ * `\RequireNativeupTeX`
+ Issues an error if `\ifnativeupTeX` fails.
+ * `\RequirepTeXng`
+ Issues an error if `\ifpTeXng` fails.
+
+
+ifuptex Package ― Alias of ifptex
+----------------------------------
+
+The ifuptex package does nothing but loading ifptex internally. It is
+provided for backward compatibility.
+
+### Package Loading
+
+In plain TeX:
+
+ \input ifuptex.sty
+
+In LaTeX:
+
+ \usepackage{ifuptex}
+
+### Usage
+
+Just the same as the ifptex package.
+
+
+Revision History
+----------------
+
+ * Version 1.2c 〈2017/10/04〉
+ * Version 1.2b 〈2017/09/20〉
+ * Version 1.2a 〈2017/09/15〉
+ * Version 1.2 〈2017/09/09〉
+ - Add `\ifstrictupTeX` and `RequireStrictupTeX`.
+ * Version 1.1 〈2017/05/04〉
+ - Minor fix.
+ * Version 1.0 〈2013/04/29〉
+ - Move to a separate bundle.
+ - Change the package name to ifptex, and added the test
+ for pTeX (besides upTeX).
+ * Version 0.2 〈2008/03/14〉
+ - First public version.
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/macros/generic/ifptex/ifptex.sty b/macros/generic/ifptex/ifptex.sty
new file mode 100644
index 0000000000..29cec914ef
--- /dev/null
+++ b/macros/generic/ifptex/ifptex.sty
@@ -0,0 +1,322 @@
+%%
+%% This is file 'ifptex.sty'.
+%%
+%% Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+%
+%% avoid multiple loading
+\csname\if11bxipIfptexLoaded\fi\endcsname
+%% code guards
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode33=\the\catcode33%
+\catcode35=\the\catcode35%
+\catcode42=\the\catcode42%
+\catcode60=\the\catcode60%
+\catcode62=\the\catcode62%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\relax}
+\catcode32=10\relax
+\catcode33=11 %<">
+\catcode35=6 %<#>
+\catcode42=12 %<*>
+\catcode60=12 %<<>
+\catcode62=12 %<>>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\edef\bxip@restore@codes{\x
+ \noexpand\let\noexpand\bxip@restore@codes\relax}
+\def\bxipIfptexLoaded{\endinput}
+
+%% check for LaTeX
+\ifx\RequirePackage\@undefined %<*!LaTeX>
+ \let\bxip@latex=f
+ \long\def\x#1\ProvidesPackage#2[#3]{%
+ \immediate\write-1{Package: #2 #3}}
+ \expandafter\x
+\else %<*LaTeX>
+ \let\bxip@latex=t \let\x\relax
+\fi %</LaTeX>
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{ifptex}[2017/10/04 v1.2c pTeX checker]
+\def\bxip@pkgname{ifptex}
+
+%% enter the big group
+\begingroup
+
+%--------------------------------------- helpers
+
+%% \bxip@csletcs{<csnameA>}{<csnameB>}
+\def\bxip@csletcs#1#2{%
+ \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
+%% \bxip@true{<csname>}
+\def\bxip@true#1{%
+ \expandafter\let\csname#1\endcsname\iftrue}
+%% \bxip@false{<csname>}
+\def\bxip@false#1{%
+ \expandafter\let\csname#1\endcsname\iffalse}
+
+%% switches
+\bxip@false{ifbxip@ok}
+
+%% \bxip@test@primitive\CS
+\def\bxip@test@primitive#1{%
+ \edef\bxip@tmpa{\string#1}\edef\bxip@tmpb{\meaning#1}%
+ \ifx\bxip@tmpa\bxip@tmpb \bxip@true{ifbxip@ok}%
+ \else \bxip@false{ifbxip@ok}%
+ \fi}
+
+%% \bxip@with@default{<arg>}\CS
+\gdef\bxip@with@default#1#2{%
+ \def\bxip@tmpa{#2}\def\bxip@tmpb{#2[#1]}%
+ \futurelet\bxip@tok\bxip@with@default@a}
+\gdef\bxip@with@default@a{%
+ \ifx[\bxip@tok\expandafter\bxip@tmpa%]
+ \else \expandafter\bxip@tmpb
+ \fi}
+
+%% \bxip@check@version{<current>}{<required>}{<label>}
+\global\countdef\bxip@cnta=255
+\gdef\bxip@check@version#1#2#3{%
+ \ifnum#1<#2\relax
+ \begingroup
+ \bxip@cnta=#2\relax \advance\bxip@cnta100000\relax
+ \expandafter\bxip@check@version@a\the\bxip@cnta\relax{#3}%
+ \endgroup
+ \fi}
+\gdef\bxip@check@version@a#1#2#3#4#5#6\relax#7{%
+ \bxip@err@required{#7 v.>=\number#2#3#4.#5#6}}
+
+%% \bxip@err@required{<string>}
+% NB: Now the same style as in ifxetex is used.
+\gdef\bxip@err@required#1{%
+ \begingroup
+ \errorcontextlines=-1\relax
+ \newlinechar=10\relax
+ \errmessage{^^J
+ ********************************************^^J
+ * #1 is required to compile this document.^^J
+ * Sorry!^^J
+ ********************************************}%
+ \endgroup}
+
+%--------------------------------------- guess version
+
+%% \bxip@uptex@new@version
+\global\mathchardef\bxip@uptex@new@version=19
+
+%%<+> \upTeXguessedversion
+\global\mathchardef\upTeXguessedversion=0
+% if \ucs exists, then gv >= 1
+\bxip@test@primitive\ucs\ifbxip@ok
+ \global\mathchardef\upTeXguessedversion=1
+ % if \enablecjktoken exists, then gv >= 6
+ \bxip@test@primitive\enablecjktoken\ifbxip@ok
+ \global\mathchardef\upTeXguessedversion=6
+ % if \kchar exists, then gv >= 10
+ \bxip@test@primitive\kchar\ifbxip@ok
+ \global\mathchardef\upTeXguessedversion=10
+ % if \forcecjktoken exists, then gv >= 19
+ \bxip@test@primitive\forcecjktoken\ifbxip@ok
+ \global\mathchardef\upTeXguessedversion=19
+ \fi
+ \fi
+ \fi
+\fi
+
+%--------------------------------------- public stuffs
+% Note:
+% 1) Names '\ifFooTeX' are used in iftex.
+% 2) Names '\iffootex' are used in ifxetex/ifluatex/....
+% My preferences are:
+% - '\ifwhateverFooTeX' and '\RequireWhateverFooTeX'.
+% But I also provide aliases '\iffootex' and '\ifstrictfootex' for
+% compatibility with 1) and the old ifuptex.
+
+%%<+> \ifpTeX
+\global\bxip@false{ifpTeX}
+\bxip@test@primitive\kanjiskip\ifbxip@ok
+ \global\bxip@true{ifpTeX}
+\fi
+%%<+> \ifptex == \ifpTeX
+\global\bxip@csletcs{ifptex}{ifpTeX}
+
+%%<+> \ifupTeX
+\global\bxip@false{ifupTeX}
+%%<+> \ifnativeupTeX
+\global\bxip@false{ifnativeupTeX}
+\ifnum\upTeXguessedversion>0
+ \global\bxip@true{ifupTeX}
+ % native-ness check
+ \ifnum\ucs"3000="3000 \global\bxip@true{ifnativeupTeX}\fi
+\fi
+%%<+> \ifuptex == \ifupTeX
+\global\bxip@csletcs{ifuptex}{ifupTeX}
+
+%%<+> \ifpTeXng
+\global\bxip@false{ifpTeXng}
+\bxip@test@primitive\ngbanner\ifbxip@ok
+ \global\bxip@true{ifpTeXng}
+\fi
+%%<+> \ifptexng == \ifpTeXng
+\global\bxip@csletcs{ifptexng}{ifpTeXng}
+
+%%<+> \ifstrictpTeX
+\global\bxip@false{ifstrictpTeX}
+\ifpTeX \ifupTeX\else
+ \global\bxip@true{ifstrictpTeX}
+\fi\fi
+%%<+> \ifstrictptex == \ifstrictpTeX
+\global\bxip@csletcs{ifstrictptex}{ifstrictpTeX}
+
+%%<+> \ifstrictupTeX
+\global\bxip@false{ifstrictupTeX}
+\ifupTeX \ifpTeXng\else
+ \global\bxip@true{ifstrictupTeX}
+\fi\fi
+%%<+> \ifstrictuptex == \ifstrictupTeX
+\global\bxip@csletcs{ifstrictuptex}{ifstrictupTeX}
+
+%%<+> \ifstrictpTeXng (== \ifpTeXng, for now)
+\global\bxip@csletcs{ifstrictpTeXng}{ifpTeXng}
+%%<+> \ifstrictptexng == \ifstrictpTeXng
+\global\bxip@csletcs{ifstrictptexng}{ifstrictpTeXng}
+
+%%<+> \RequirepTeX
+\gdef\RequirepTeX{%
+ \ifpTeX\else \bxip@err@required{(u)pTeX}\fi}
+%%<+> \RequireStrictpTeX
+\gdef\RequireStrictpTeX{%
+ \ifstrictpTeX\else \bxip@err@required{pTeX (not upTeX)}\fi}
+%%<+> \RequireupTeX
+\gdef\RequireupTeX{%
+ \ifupTeX\else \bxip@err@required{upTeX}\fi}
+%%<+> \RequireStrictupTeX
+\gdef\RequireStrictupTeX{%
+ \ifstrictupTeX\else \bxip@err@required{upTeX (not pTeX-ng)}\fi}
+%%<+> \RequireNativeupTeX
+\gdef\RequireNativeupTeX{%
+ \ifnativeupTeX\else \bxip@err@required{upTeX in Unicode}\fi}
+%%<+> \RequirepTeXng
+\gdef\RequirepTeXng{%
+ \ifpTeXng\else \bxip@err@required{pTeX-ng}\fi}
+%%<+> \RequireStrictpTeXng
+\gdef\RequireStrictpTeXng{%
+ \ifstrictpTeXng\else \bxip@err@required{pTeX-ng}\fi}
+
+%--------------------------------------- KanjiKoodo declaration
+\ifpTeX
+
+%% \bxip@def@str\CS{<strcode>}
+\def\bxip@def@str#1#2{%
+ \let\bxip@str\@empty#2\let#1\bxip@str}
+\def\bxip@def@str@j#1{%
+ \kansujichar1=#1\relax\edef\bxip@str{\bxip@str\kansuji1}}
+\def\bxip@def@str@a#1{%
+ \uccode`\?=#1\relax\uppercase{\edef\bxip@str{\bxip@str?}}}
+\def\U/#1#2#3#4{\bxip@def@str@j{\ucs"#1#2#3#4}}
+\ifx\ucs\@undefined \def\U/#1#2#3#4{}\fi
+\def\J/#1#2#3#4{\bxip@def@str@j{\jis"#1#2#3#4}}
+\def\X/#1#2{\bxip@def@str@a{"#1#2}}
+
+%% KanjiKoodo strings
+% This is the correct "KanjiKoodo=".
+\bxip@def@str\bxip@@knjcde@u@u
+{\J/3441\J/3B7A\J/2533\J/213C\J/2549\X/3D}
+% This is the token list that results when upTeX with settings
+% "kanji=sjis, kanji-internal=uptex" reads the string "KanjiKoodo="
+% written in UTF-8. Note that mojibake will ocuur unless "kanji=utf8".
+\bxip@def@str\bxip@@knjcde@s@u
+{\U/8C8D\X/A2\U/87C4\U/52B1\U/3055\U/7E5D\X/BC\U/7E5D\X/89\X/3D}
+% Ditto, with settings "kanji=sjis, kanji-internal=sjis", and so on....
+\bxip@def@str\bxip@@knjcde@s@s
+{\J/6C3E\X/A2\J/6A2F\J/4E65\J/2435\J/6563\X/BC\J/6563\X/89\X/3D}
+\bxip@def@str\bxip@@knjcde@s@e
+{\J/6C3E\J/226A\J/2F4E\J/6524\J/3565\J/633C\J/6563\X/89\X/3D}
+\bxip@def@str\bxip@@knjcde@e@u
+{\U/7FB2\U/221A\X/AD\X/97\X/E3\X/82\U/6F5F\X/83\U/82E5\X/83\X/89\X/3D}
+\bxip@def@str\bxip@@knjcde@e@s
+{\J/663C\J/2265\X/AD\J/4E65\J/236A\J/2563\J/3C63\J/2569\X/3D}
+\bxip@def@str\bxip@@knjcde@e@e
+{\J/663C\J/2265\X/AD\X/97\X/E3\X/82\J/3363\X/83\J/3C63\X/83\X/89\X/3D}
+
+%% KanjiKoodo control sequences
+% The correct \[KanjiKoodo=UTF-8], meaning input kanji code is right.
+\global\@namedef{\bxip@@knjcde@u@u UTF-8}{\bxip@ensure@utf{}}
+% The mojibake \[XXXXX=UTf-8], meaning input kanji code is wrong.
+\global\@namedef{\bxip@@knjcde@s@u UTF-8}{\bxip@ensure@utf{sjis}}
+\global\@namedef{\bxip@@knjcde@s@s UTF-8}{\bxip@ensure@utf{sjis}}
+\global\@namedef{\bxip@@knjcde@s@e UTF-8}{\bxip@ensure@utf{sjis}}
+\global\@namedef{\bxip@@knjcde@e@u UTF-8}{\bxip@ensure@utf{euc}}
+\global\@namedef{\bxip@@knjcde@e@s UTF-8}{\bxip@ensure@utf{euc}}
+\global\@namedef{\bxip@@knjcde@e@e UTF-8}{\bxip@ensure@utf{euc}}
+
+%% \bxip@ensure@utf{<enc>}
+\gdef\bxip@ensure@utf#1{%
+ \ifx @#1@\expandafter\@gobble
+ \else \expandafter\@firstofone
+ \fi{\bxip@ensure@utf@a{#1}}}
+\ifx\epTeXinputencoding\@undefined
+ \gdef\bxip@ensure@utf@a#1{%
+ \PackageWarning\bxip@pkgname
+ {The input kanji code for file '\@currname.\@currext'\MessageBreak
+ is set to #1, but should be utf8\@gobble}}%
+\else
+ \gdef\bxip@ensure@utf@a#1{%
+ \PackageInfo\bxip@pkgname
+ {The input kanji code for file '\@currname.\@currext'\MessageBreak
+ was changed from #1 to utf8\@gobble}%
+ \ifnum\currentgrouplevel>\z@
+ \aftergroup\bxip@ensure@utf@b
+ \else \expandafter\bxip@ensure@utf@b
+ \fi}
+ \gdef\bxip@ensure@utf@b{%
+ \epTeXinputencoding utf8}% unterminated
+\fi
+
+\fi
+%--------------------------------------- deprecated stuffs
+
+%%<+>D \ifNativeupTeX == \ifnativeupTeX
+\global\bxip@csletcs{ifNativeupTeX}{ifnativeupTeX}
+%%<+>D \RequirenativeupTeX == \RequireNativeupTeX
+\gdef\RequirenativeupTeX{\RequireNativeupTeX}
+
+%%<+>D \ifnewupTeX
+\global\bxip@false{ifnewupTeX}
+\ifnum\upTeXguessedversion<\bxip@uptex@new@version\else
+ \global\bxip@true{ifnewupTeX}
+\fi
+
+%%<+>D \RequireNewupTeX
+\gdef\RequireNewupTeX{%
+ \bxip@with@default\bxip@uptex@new@version\bxip@require@new@uptex@a}
+\gdef\bxip@require@new@uptex@a[#1]{%
+ \ifupTeX
+ \bxip@check@version\upTeXguessedversion{#1}{upTeX}%
+ \else \bxip@err@required{upTeX}%
+ \fi}
+
+%%<+>D \RequireNativeNewupTeX
+\gdef\RequireNativeNewupTeX{%
+ \bxip@with@default\bxip@uptex@new@version\bxip@require@new@uptex@b}
+\gdef\bxip@require@new@uptex@b[#1]{%
+ \ifnativeupTeX
+ \bxip@check@version\upTeXguessedversion{#1}{upTeX in Unicode}%
+ \else \bxip@err@required{upTeX in Unicode}%
+ \fi}
+
+%--------------------------------------- all done
+\endgroup
+\bxip@restore@codes
+\endinput
+%% EOF
diff --git a/macros/generic/ifptex/ifuptex.sty b/macros/generic/ifptex/ifuptex.sty
new file mode 100644
index 0000000000..cb84bd8cbd
--- /dev/null
+++ b/macros/generic/ifptex/ifuptex.sty
@@ -0,0 +1,54 @@
+%%
+%% This is file 'ifuptex.sty'.
+%%
+%% Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+%
+% NOTE: Now ifuptex is merely an alias to ifptex.
+%
+%% avoid multiple loading
+\csname\if11bxipIfuptexLoaded\fi\endcsname
+%% code guards
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode47=\the\catcode47%
+\catcode58=\the\catcode58%
+\catcode64=\the\catcode64%
+\relax}
+\catcode32=10\relax
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode64=11 % <@>
+\edef\bxip@up@restore@codes{\x
+ \noexpand\let\noexpand\bxip@up@restore@codes\relax}
+\def\bxipIfuptexLoaded{\endinput}
+
+%% check for LaTeX
+\ifx\RequirePackage\@undefined % non-LaTeX
+ \long\def\x#1\ProvidesPackage#2[#3]{%
+ \def\x\RequirePackage##1[##2]{\input ##1.sty\relax}%
+ \immediate\write-1{Package: #2 #3}}
+ \expandafter\x
+\else % LaTeX
+ \let\x\relax
+\fi
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{ifuptex}[2017/10/04 v1.2c upTeX checker]
+
+%% load ifptex
+\x\RequirePackage{ifptex}[2017/10/04]
+
+%% all done
+\bxip@up@restore@codes
+\endinput
+%% EOF
diff --git a/macros/generic/iftex b/macros/generic/iftex
new file mode 120000
index 0000000000..9466159220
--- /dev/null
+++ b/macros/generic/iftex
@@ -0,0 +1 @@
+../latex/contrib/iftex \ No newline at end of file
diff --git a/macros/generic/ifxetex/README b/macros/generic/ifxetex/README
new file mode 100644
index 0000000000..7e85628a58
--- /dev/null
+++ b/macros/generic/ifxetex/README
@@ -0,0 +1,17 @@
+------------------------
+THE IFXETEX PACKAGE v0.6
+
+This very simple package, for both Plain TeX and LaTeX,
+defines the \ifxetex boolean for testing whether XeTeX
+is being used for typesetting.
+
+Also provides the \RequireXeTeX command which throws
+an error if XeTeX is not the engine in use.
+
+To extract the package from the source file "ifxetex.tex",
+execute `latex ifxetex.ins`. Executing `xelatex ifxetex.tex`
+compiles the documentation and generates this README.
+
+-------------------
+Will Robertson
+Copyright 2006-2010
diff --git a/macros/generic/ifxetex/ifxetex.ins b/macros/generic/ifxetex/ifxetex.ins
new file mode 100644
index 0000000000..e661620d72
--- /dev/null
+++ b/macros/generic/ifxetex/ifxetex.ins
@@ -0,0 +1,4 @@
+%&latex
+\def\DocCompile{N}
+\input ifxetex.tex
+\csname@@end\endcsname
diff --git a/macros/generic/ifxetex/ifxetex.pdf b/macros/generic/ifxetex/ifxetex.pdf
new file mode 100644
index 0000000000..6af6cb67bd
--- /dev/null
+++ b/macros/generic/ifxetex/ifxetex.pdf
Binary files differ
diff --git a/macros/generic/ifxetex/ifxetex.tex b/macros/generic/ifxetex/ifxetex.tex
new file mode 100644
index 0000000000..dbb6b5a9b9
--- /dev/null
+++ b/macros/generic/ifxetex/ifxetex.tex
@@ -0,0 +1,193 @@
+\RequirePackage{filecontents}
+\begin{filecontents*}{README.txt}
+------------------------
+THE IFXETEX PACKAGE v0.6
+
+This very simple package, for both Plain TeX and LaTeX,
+defines the \ifxetex boolean for testing whether XeTeX
+is being used for typesetting.
+
+Also provides the \RequireXeTeX command which throws
+an error if XeTeX is not the engine in use.
+
+To extract the package from the source file "ifxetex.tex",
+execute `latex ifxetex.ins`. Executing `xelatex ifxetex.tex`
+compiles the documentation and generates this README.
+
+-------------------
+Will Robertson
+Copyright 2006-2010
+\end{filecontents*}
+%%%%%%%%%1%%%%%%%%%2%%%%%%%%%3%%%%%%%%%4%%%%%%%%%5
+
+\begin{filecontents*}{ifxetex.sty}
+% \iffalse
+% Copyright 2006-2010 by Will Robertson <wspr81@gmail.com>
+%
+% Distributable under the LaTeX Project Public License,
+% version 1.3c or higher (your choice). The latest version of
+% this license is at: http://www.latex-project.org/lppl.txt
+%
+% This work is maintained by Will Robertson.
+% \fi
+
+% Ensure loading a single time only.
+\csname ifxetexloaded\endcsname
+\let\ifxetexloaded\endinput
+
+% Declare ourselves to \LaTeX.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
+ \ProvidesPackage{ifxetex}
+ [2010/09/12 v0.6 Provides ifxetex conditional]
+\fi
+
+% For \XeTeX-exclusive packages.
+\def\RequireXeTeX{%
+ \ifxetex\else
+ \begingroup
+ \errorcontextlines=-1\relax
+ \newlinechar=10\relax
+ \errmessage{^^J
+ ********************************************^^J
+ * XeTeX is required to compile this document.^^J
+ * Sorry!^^J
+ ********************************************}%
+ \endgroup
+ \fi}
+
+% Abort if \cmd\ifxetex\ is already defined
+% (assume that it has already been set correctly)^^A
+% \footnote{Thanks to \textit{Dan Luecking} for suggesting this.}
+\expandafter\ifx\csname ifxetex\endcsname\relax\else
+ \expandafter\endinput
+\fi
+
+% Create and set \cmd\ifxetex\ accordingly.
+\newif\ifxetex
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname XeTeXrevision\endcsname\relax
+ \xetexfalse
+\else
+ \xetextrue
+\fi
+\end{filecontents*}
+%%%%%%%%%1%%%%%%%%%2%%%%%%%%%3%%%%%%%%%4%%%%%%%%%5
+
+
+
+% Conditionally compile the documentation & generate the .ins file:
+\providecommand\DocCompile{Y}
+\if\DocCompile N
+ \expandafter\csname @@end\expandafter\endcsname
+\fi
+
+
+
+
+\begin{filecontents*}{ifxetex.ins}
+%&latex
+\def\DocCompile{N}
+\input ifxetex.tex
+\csname@@end\endcsname
+\end{filecontents*}
+
+
+
+
+\makeatletter
+\documentclass{article}
+
+\usepackage[it,medium]{titlesec}
+
+\usepackage{bigfoot,ifthen,xcolor}
+\usepackage[colorlinks,linktocpage]{hyperref}
+
+\usepackage{gmdoc}
+\usepackage{gmverb}
+\dekclubs
+\stanzaskip=\bigskipamount
+\CodeSpacesGrey
+
+\usepackage{tocloft,varwidth}
+\setcounter{tocdepth}{1}
+\def\tocwidthA{0.45}
+\def\tocwidthB{0.45}
+\def\cftpartfont{\scshape}
+\def\cftsecfont{\small}
+\cftbeforesecskip=0pt
+\def\cftpartleader{}
+\def\cftpartafterpnum{\cftparfillskip}
+\def\cftsecleader{}
+\def\cftsecafterpnum{\cftparfillskip}
+
+\let\pkg\textsf
+\def\pkgopt#1{\texttt{[#1]}}
+
+\def\PDF{\textsc{pdf}}
+\def\PS{\textsc{ps}}
+\def\DVI{\textsc{dvi}}
+\def\EPS{\textsc{eps}}
+
+\usepackage{amsmath,listings}
+\lstset{basicstyle=\ttfamily,columns=fullflexible}
+
+\frenchspacing
+
+\GetFileInfo{ifxetex.sty}
+\begin{document}
+
+\title{The \pkg{ifxetex} package}
+\author{%
+ \normalsize Will Robertson\footnote{\texttt{wspr81@gmail.com}}}
+\date{\fileversion\qquad\filedate}
+
+\maketitle
+
+\section{User documentation}
+
+This package provides a way to check if a document is being processed with \XeTeX. It may be loaded with
+
+\bigskip
+\begin{tabular}{l@{\quad}l}
+{|\usepackage{ifxetex}|} & for \LaTeX, or \\
+{|\input ifxetex.sty|} & for Plain \TeX.
+\end{tabular}
+\bigskip
+
+\noindent
+This defines the conditional \cmd\ifxetex\ that is used in the standard way:
+
+\bigskip
+|\ifxetex|\par
+\hspace{2em}\meta{material for \XeTeX}\par
+|\else|\par
+\hspace{2em}\meta{material not for \XeTeX}\par
+|\fi|
+\bigskip
+
+\noindent
+Users of \LaTeX's \pkg{ifthen} package can also use it as |\boolean{xetex}|:
+
+\bigskip
+|\ifthenelse{ \boolean{xetex} }{|\texttt{\char`\%}\par
+\hspace{2em}\meta{material for \XeTeX}\par
+|}{|\texttt{\char`\%}\par
+\hspace{2em}\meta{material not for \XeTeX}\par
+|}|
+\bigskip
+
+\noindent
+Finally, this package also defines the |\RequireXeTeX| command,
+which tests for \XeTeX\ use and throws an error if a different engine
+is being used. This is used for packages like \pkg{fontspec} that take
+advantage of \XeTeX's new features and cannot be used otherwise.
+
+
+\clearpage
+\parindent=0pt
+\section{Implementation}
+\DocInput{ifxetex.sty}
+
+
+\end{document}
diff --git a/macros/generic/ifxptex/README b/macros/generic/ifxptex/README
new file mode 100644
index 0000000000..0689a75c52
--- /dev/null
+++ b/macros/generic/ifxptex/README
@@ -0,0 +1,16 @@
+
+
+The ifxptex package --- Detect pTeX and its derivatives
+
+CTAN Homepage: https://ctan.org/pkg/ifxptex
+
+Repository: https://github.com/Man-Ting-Fang/ifxptex
+
+Version: 2017-12-27 v0.2
+
+Copyright 2017 Yue ZHANG
+
+License: Knuth License (https://ctan.org/license/knuth)
+
+This package provides commands for detecting pTeX and its derivatives (e-pTeX,
+upTeX, e-upTeX, and ApTeX). Both LaTeX and plain TeX are supported.
diff --git a/macros/generic/ifxptex/ifxptex-doc.pdf b/macros/generic/ifxptex/ifxptex-doc.pdf
new file mode 100644
index 0000000000..3b8eb0a05c
--- /dev/null
+++ b/macros/generic/ifxptex/ifxptex-doc.pdf
Binary files differ
diff --git a/macros/generic/ifxptex/ifxptex-doc.tex b/macros/generic/ifxptex/ifxptex-doc.tex
new file mode 100644
index 0000000000..70aafa856d
--- /dev/null
+++ b/macros/generic/ifxptex/ifxptex-doc.tex
@@ -0,0 +1,197 @@
+
+
+% ifxptex-doc.tex
+
+% !TeX encoding = UTF-8
+% !TeX program = pdfLaTeX
+
+\RequirePackage{fix-cm}
+
+\documentclass[a4paper]{article}
+
+\usepackage{amsfonts}
+\usepackage[OT1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[UKenglish]{babel}
+\usepackage[babel]{microtype}
+\usepackage{etoolbox}
+\usepackage{amstext}
+\usepackage{booktabs}
+
+\AtBeginEnvironment{verbatim}{\microtypesetup{activate=false}}
+
+\abovetopsep=\medskipamount
+
+\newcommand\NormalSans{\normalfont\sffamily}
+\newcommand\pkg[1]{{\protect\NormalSans#1}}
+
+\newcommand\pTeX{p\kern-0.15em\TeX}
+\newcommand\e{\ensuremath{\varepsilon}}
+\newcommand\eTeX{\e-\TeX}
+\newcommand\epTeX{\e-\pTeX}
+\newcommand\upTeX{u\pTeX}
+\newcommand\eupTeX{\e-\upTeX}
+\newcommand\ApTeX{A\kern-0.1em\pTeX}
+\newcommand\dpx{DVI\-PDFM\ensuremath{x}}
+\newcommand\FooTeX{Foo\kern-0.1em\TeX}
+
+\newcommand\yes{\checkmark}
+\newcommand\UNI{(Unicode)}
+\newcommand\uni{{\footnotesize\UNI}}
+
+\begin{document}
+
+\title{The \pkg{ifxptex} package%
+ \thanks{CTAN Homepage: \texttt{https://ctan.org/pkg/ifxptex}}
+ \thanks{Repository: \texttt{https://github.com/Man-Ting-Fang/ifxptex}}}
+\author{Yue \textsc{Zhang}}
+\date{2017-12-27\quad v0.2}
+
+\maketitle
+
+\begin{abstract}
+This package provides commands for detecting \pTeX\ and its derivatives (\epTeX,
+\upTeX, \eupTeX, and \ApTeX). Both \LaTeX\ and plain \TeX\ are supported.
+\end{abstract}
+
+\section{Introduction}
+
+\pTeX\ is an extension of \TeX. It has several derivatives:
+\begin{itemize}
+\item \epTeX: \( \text{\pTeX} + \text{\eTeX} + \cdots \)
+\item \upTeX: \( \text{\pTeX} + \text{native Unicode support} + \cdots \)
+\item \eupTeX: \( \text{\epTeX} + \text{\upTeX} \)
+\item \ApTeX:\footnote{Full name: Asiatic \pTeX; synonym: \pTeX-ng; obsolete
+ names: Asian \pTeX, toua-\pTeX, toua-\TeX, toua\TeX, \ldots}
+ \( \text{\upTeX} + \text{\eTeX} + \cdots \)
+\end{itemize}
+Table \ref{tab:cmds} shows the command line commands for invoking them.%
+\footnote{Old implementations and other \TeX\ formats are not taken into
+consideration.}
+\vskip-10pt\relax
+\begin{table}[!ht]\centering
+\caption{Commands for invoking *\pTeX}
+\label{tab:cmds}
+\begin{tabular}{cccc}
+\toprule
+ & \multicolumn{2}{c}{Command} & \\
+ \cmidrule(lr){2-3}
+Engine & Plain \TeX & \LaTeX & Output format(s)\footnotemark \\
+\midrule
+\pTeX & \verb|ptex| & n/a & DVI (extended) \\
+\epTeX & \verb|eptex| & \verb|platex| & DVI (extended) \\
+\upTeX & \verb|uptex| & n/a & DVI (extended) \\
+\eupTeX & \verb|euptex| & \verb|uplatex| & DVI (extended) \\
+\ApTeX & \verb|ptex-ng| & \verb|platex-ng| & DVI (extended) and PDF \\
+\bottomrule
+\end{tabular}
+\end{table}
+\footnotetext{DVI files produced by *\pTeX\ can be converted to PDF files by
+\dpx, or some scripts for convenience (also use \dpx\ internally), but this
+subject is outside the scope of this document. (Note that \ApTeX\ outputs both
+DVI and PDF files directly.)}
+\noindent Both \LaTeX3 and the \pkg{ifptex} package (and its alias, the
+\pkg{ifuptex} package) have already provided commands for detecting some *\pTeX\
+engines. However, they do not satisfy the author, thus this package is written.
+For compatibility, all user commands provided by this package have an extra
+letter ``\verb|x|'' or ``\verb|X|''.
+
+\section{Naming conventions}
+
+There are two more naming conventions in this package:
+\begin{itemize}
+\item Suppose that there is a \TeX\ engine called \FooTeX, then both
+ \verb|FooTeX| and \verb|footex| are used in commands' names, but they refer to
+ different things: \verb|FooTeX| stands for the \FooTeX\ engine itself, while
+ \verb|footex| stands for all engines (mostly) compatible with \FooTeX\
+ (including \FooTeX).
+\item Furthermore, \verb|UniFooTeX| and \verb|unifootex| stand respectively for
+ \verb|FooTeX| and \verb|footex| when using Unicode as the internal encoding.
+ (Similarly, ``\UNI'' used in the following tables indicates that the engine
+ should be the corresponding \verb|UniFooTeX|.) (Note that \ApTeX\ always uses
+ Unicode as its internal encoding.)
+\end{itemize}
+
+\section{Usage}
+
+This package has no options, just load it as usual:
+\begin{itemize}
+\item \LaTeX: \verb|\usepackage{ifxptex}|
+\item Plain \TeX: \verb|\input ifxptex.sty|
+\end{itemize}
+
+\subsection{Conditionals}
+
+Table \ref{tab:cond} lists the conditionals provided by this package.
+\vskip-10pt\relax
+\begin{table}[!ht]\centering
+\caption{Conditionals provided by this package}
+\label{tab:cond}
+\begin{tabular}{lccccc}
+\toprule
+ & \multicolumn{5}{c}{True when using (one of)} \\
+ \cmidrule(lr){2-6}
+Conditional & \pTeX & \epTeX & \upTeX & \eupTeX & \ApTeX \\
+\midrule
+\verb|\ifxpTeX| & \yes & & & & \\
+\verb|\ifxepTeX| & & \yes & & & \\
+\verb|\ifxupTeX| & & & \yes & & \\
+\verb|\ifxeupTeX| & & & & \yes & \\
+\verb|\ifxApTeX| & & & & & \yes \\
+\verb|\ifxUniupTeX| & & & \yes\ \uni & & \\
+\verb|\ifxUnieupTeX| & & & & \yes\ \uni & \\
+\verb|\ifxptex| & \yes & \yes & \yes & \yes & \yes \\
+\verb|\ifxeptex| & & \yes & & \yes & \\
+\verb|\ifxuptex| & & & \yes & \yes & \yes \\
+\verb|\ifxeuptex| & & & & \yes & \\
+\verb|\ifxaptex| & & & & & \yes \\
+\verb|\ifxuniuptex| & & & \yes\ \uni & \yes\ \uni & \yes \\
+\verb|\ifxunieuptex| & & & & \yes\ \uni & \\
+\bottomrule
+\end{tabular}
+\end{table}
+\noindent These conditionals can be used as usual. For example:
+
+\medskip
+
+\noindent{\ttfamily\hskip2em}%
+\verb|\ifxeupTeX|%
+ \ensuremath{\langle}material for \eupTeX\ensuremath{\rangle}%
+\verb|\else|%
+ \ensuremath{\langle}material not for \eupTeX\ensuremath{\rangle}%
+\verb|\fi|
+
+\subsection{Declarations}
+
+Table \ref{tab:decl} lists the declarations provided by this package. (This
+table is very similar to Table \ref{tab:cond}.)
+\vskip-10pt\relax
+\begin{table}[!ht]\centering\advance\tabcolsep by -0.1pt\relax
+\caption{Declarations provided by this package}
+\label{tab:decl}
+\begin{tabular}{lccccc}
+\toprule
+ & \multicolumn{5}{c}{Reports an error if the engine in
+ use is not (one of)} \\
+ \cmidrule(lr){2-6}
+Declaration & \pTeX & \epTeX & \upTeX & \eupTeX & \ApTeX \\
+\midrule
+\verb|\RequireXpTeX| & \yes & & & & \\
+\verb|\RequireXepTeX| & & \yes & & & \\
+\verb|\RequireXupTeX| & & & \yes & & \\
+\verb|\RequireXeupTeX| & & & & \yes & \\
+\verb|\RequireXApTeX| & & & & & \yes \\
+\verb|\RequireXUniupTeX| & & & \yes\ \uni & & \\
+\verb|\RequireXUnieupTeX| & & & & \yes\ \uni & \\
+\verb|\RequireXptex| & \yes & \yes & \yes & \yes & \yes \\
+\verb|\RequireXeptex| & & \yes & & \yes & \\
+\verb|\RequireXuptex| & & & \yes & \yes & \yes \\
+\verb|\RequireXeuptex| & & & & \yes & \\
+\verb|\RequireXaptex| & & & & & \yes \\
+\verb|\RequireXuniuptex| & & & \yes\ \uni & \yes\ \uni & \yes \\
+\verb|\RequireXunieuptex| & & & & \yes\ \uni & \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\end{document}
diff --git a/macros/generic/ifxptex/ifxptex.sty b/macros/generic/ifxptex/ifxptex.sty
new file mode 100644
index 0000000000..83ce563a9a
--- /dev/null
+++ b/macros/generic/ifxptex/ifxptex.sty
@@ -0,0 +1,109 @@
+
+
+% ifxptex.sty
+% Copyright 2017 Yue ZHANG
+% License: Knuth License (https://ctan.org/license/knuth)
+
+\csname ENDINPUTIFXPTEXDOTSTY\endcsname
+
+\let\ENDINPUTIFXPTEXDOTSTY=\endinput
+
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \else
+ \ProvidesPackage{ifxptex}[2017/12/27 v0.2 Detect pTeX and its derivatives]%
+ \fi
+
+\edef\IFXPTEXDOTSTYRESTORECATCODE{\catcode`\noexpand\@=\the\catcode`\@\relax}
+
+\catcode`\@=11\relax
+
+\def\ifxptex@ifprimitive#1{%
+ \begingroup
+ \edef\ifxptex@temp@meaning{\meaning#1}%
+ \edef\ifxptex@temp@string{\string#1}%
+ \expandafter
+ \endgroup
+ \ifx\ifxptex@temp@meaning\ifxptex@temp@string}
+
+\newif\ifxptex
+\newif\ifxeptex
+\newif\ifxuptex
+\newif\ifxeuptex
+\newif\ifxaptex
+
+\ifxptex@ifprimitive \tate \xptextrue \fi
+\ifxptex@ifprimitive \epTeXinputencoding \xeptextrue \fi
+\ifxptex@ifprimitive \ucs \xuptextrue \fi
+\ifxptex@ifprimitive \ngbanner \xaptextrue \fi
+
+\newif\ifxpTeX
+\newif\ifxepTeX
+\newif\ifxupTeX
+\newif\ifxeupTeX
+\newif\ifxApTeX
+
+\ifxptex
+ \ifxaptex
+ \xApTeXtrue
+ \else
+ \ifxuptex
+ \ifxeptex
+ \xeupTeXtrue\xeuptextrue
+ \else
+ \xupTeXtrue
+ \fi
+ \else
+ \ifxeptex
+ \xepTeXtrue
+ \else
+ \xpTeXtrue
+ \fi
+ \fi
+ \fi
+\fi
+
+\newif\ifxuniuptex
+\newif\ifxunieuptex
+
+\newif\ifxUniupTeX
+\newif\ifxUnieupTeX
+
+\ifxuptex \ifnum\ucs"3000="3000\relax \xuniuptextrue \fi \fi
+\ifxeuptex \ifnum\ucs"3000="3000\relax \xunieuptextrue \fi \fi
+
+\ifxupTeX \ifnum\ucs"3000="3000\relax \xUniupTeXtrue \fi \fi
+\ifxeupTeX \ifnum\ucs"3000="3000\relax \xUnieupTeXtrue \fi \fi
+
+\def\ifxptex@newrequiretex@error#1{% can be easily redefined
+ \errmessage{#1 is required}}
+
+\def\ifxptex@newrequiretex#1#2{%
+ \expandafter\def\csname RequireX#1\endcsname{%
+ \relax
+ \csname ifx#1\endcsname
+ \else
+ \ifxptex@newrequiretex@error{#2}%
+ \fi}}
+
+\ifxptex@newrequiretex{ptex}{pTeX / e-pTeX / upTeX / e-upTeX / ApTeX}
+\ifxptex@newrequiretex{eptex}{e-pTeX / e-upTeX}
+\ifxptex@newrequiretex{uptex}{upTeX / e-upTeX / ApTeX}
+\ifxptex@newrequiretex{euptex}{e-upTeX}
+\ifxptex@newrequiretex{aptex}{ApTeX}
+
+\ifxptex@newrequiretex{pTeX}{pTeX}
+\ifxptex@newrequiretex{epTeX}{e-pTeX}
+\ifxptex@newrequiretex{upTeX}{upTeX}
+\ifxptex@newrequiretex{eupTeX}{e-upTeX}
+\ifxptex@newrequiretex{ApTeX}{ApTeX}
+
+\ifxptex@newrequiretex{uniuptex}{Unicode upTeX / Unicode e-upTeX / ApTeX}
+\ifxptex@newrequiretex{unieuptex}{Unicode e-upTeX}
+
+\ifxptex@newrequiretex{UniupTeX}{Unicode upTeX}
+\ifxptex@newrequiretex{UnieupTeX}{Unicode e-upTeX}
+
+\IFXPTEXDOTSTYRESTORECATCODE
+
+\endinput
diff --git a/macros/generic/infpic/incpic.mf b/macros/generic/infpic/incpic.mf
new file mode 100644
index 0000000000..4399517f77
--- /dev/null
+++ b/macros/generic/infpic/incpic.mf
@@ -0,0 +1,339 @@
+% do uverejneni clanku o INCPIC.TEX v TeX bulletinu mohou podlehat makra
+% INCPIC.MF a INCPIC.TEX vyvojovym zmenam. Jakekoliv chyby, ktere se
+% vyskytnou, mi laskave sdelte. Dekuji
+%
+% Macro for drawing simple pictures in METAFONT
+% For each character the width and height is given also in user's units.
+% All points are expressed in user's unit (without length units).
+% For more comment see end of this file.
+% Detail description appeared (in Czech) in TeXbulletin 1992, No 2,3
+%
+% Prague, July 29, 1992 Oldrich Ulrych
+% Mathematical institute of Charles University
+% email: oulrych@cspguk11.bitnet
+%
+% new definition for screen window
+%
+def openit = openwindow currentwindow
+ from origin to (640,480) at (-50,350); enddef;
+%
+% neither mesh nor rounding box are generated by default
+%
+showmesh:=0; % don't show given mesh
+showbox:=0; % don't make box around
+ou_showmesh:=0;
+ou_showbox:=0;
+%
+% private mode for intial suggestion of pictures;
+%
+mode_def ouproof =
+ proofing:=2; % yes, we're making full proofs
+ fontmaking:=0; % no, we're not making a font
+ tracingtitles:=1; % yes, show titles online
+ pixels_per_inch:=100;% original is that's 36 pixels per pt
+ blacker:=0; % no additional blackness
+ fillin:=0; % no compensation for fillin
+ o_correction:=1; % no reduction in overshoot
+ showmesh:=1; % show given mesh
+ showbox:=1; % make box around
+ ou_showmesh:=1;
+ ou_showbox:=1;
+ enddef;
+%
+% choosing the mode
+%
+if unknown mode: mode=ouproof; fi % selection of private mode for proofing
+%
+% redefined beginch and endch for plotting pictures
+%
+def beginch(expr c, % code of character
+ w_sharp, % sharp width
+ h_sharp, % sharp height
+ d_sharp, % sharp depth
+ number_of_xunits, % width of char in user's units
+ number_of_yunits)= % height of char in user's units
+ begingroup
+ transform end_of_beginch;
+ charcode:=if known c: byte c else: 0 fi;
+ charwd:=w_sharp; charht:=h_sharp; chardp:=d_sharp; charic:=0;
+ w:=hround(charwd*hppp); h:=vround(charht*hppp); d:=vround(chardp*hppp);
+ fontdimen byte c-63 : w_sharp/number_of_xunits; %% measure of x-unit
+ fontdimen byte c-43 : h_sharp/number_of_yunits; %% measure of y-unit
+ x_unit:=w/number_of_xunits; nx_unit:=number_of_xunits; % auxiliary x-unit
+ y_unit:=h/number_of_yunits; ny_unit:=number_of_yunits; % auxiliary y-unit
+ w:=number_of_xunits; h:=number_of_yunits;
+ d:=h*d_sharp/h_sharp;
+ charic:=0; clearxy; clearit; clearpen; scantokens extra_beginchar;
+ aux_sx:=x_unit; aux_sy:=y_unit;
+ currenttransform:=identity xscaled aux_sx yscaled aux_sy;
+ shiftorigin(0,0);
+ end_of_beginch:=currenttransform;
+ enddef;
+%
+def endch =
+ currenttransform:=end_of_beginch;
+ gl_showmesh:=showmesh;
+ gl_showbox :=showbox;
+ showmesh:=ou_showmesh;
+ showbox :=ou_showbox;
+ if proofing>0: makebox(proofrule); fi % I don't like rules
+ if gl_showmesh>0: mesh; fi % show given mesh
+ if gl_showbox>0: roundingbox; fi % make box around
+ chardx:=w; % desired width of the character in pixels
+ charic:=orig_x_shift*charwd/nx_unit;
+ if orig_x_shift<>0: fontdimen charcode-23 : orig_y_shift*charht/ny_unit; fi;
+ scantokens extra_endchar;
+ shipit;
+ if displaying>0: showit; fi
+ endgroup enddef;
+%
+% macros used in endch;
+%
+def roundingbox =
+ pickup pencircle scaled 0.4pt;
+ draw(0,-d)--(w,-d)--(w,h)--(0,h)--(0,-d);
+ draw(0,0)--(w,0);
+ enddef;
+def mesh =
+ pickup pencircle scaled 0.4pt;
+ for i=0 step 1 until w: draw (i,-d)--(i,h); endfor;
+ for i=0 step 1 until h: draw (0,i)--(w,i); endfor;
+ if d>0: for i=0 step 1 until d: draw (0,-i)--(w,-i); endfor; fi;
+ enddef;
+%
+% macro for shift of user's origin
+%
+def shiftorigin(expr x,y) =
+ orig_x_shift:=x; orig_y_shift:=y;
+ currenttransform:=currenttransform shifted
+ (-orig_x_shift*aux_sx,-orig_y_shift*aux_sy);
+enddef;
+%
+% path for plotting arrow and axes;
+%
+path sharparrow;
+sharparrow:=(-3,1)..{right}(0,0)&(0,0){left}..(-3,-1);
+def axes expr bod =
+ draw (0+orig_x_shift,ypart bod)--(w+orig_x_shift,+ypart bod);
+ draw (xpart bod,-d+orig_y_shift)--(xpart bod,h+orig_y_shift);
+ filldraw arrow(hround(3mm#*hppp),90) shifted (xpart bod,h+orig_y_shift);
+ filldraw arrow(hround(3mm#*hppp), 0) shifted (w+orig_x_shift,ypart bod);
+enddef;
+def vector(expr poc,kon) =
+ draw poc--kon;
+ filldraw arrow(hround(2mm#*hppp),angle(kon-poc)) shifted kon;
+enddef;
+def arrow (expr delka, smer)=
+ begingroup turningcheck:=0;
+ ((-delka,-2/7delka){dir45}..{right}(0,0)&(0,0){left}..{dir135}
+ (-delka, 2/7delka)&(-delka, 2/7delka)..controls (-3/4delka,0)..cycle)
+ rotated smer xscaled (1/aux_sx) yscaled (1/aux_sy)
+ endgroup
+enddef;
+%
+% macro for dotted and dashed lines
+%
+s__r:=10;
+def add_slen(expr a,b) =
+ s__x:=(xpart(b)-xpart(a))*x_unit/(hppp*s__r);
+ s__y:=(ypart(b)-ypart(a))*y_unit/(hppp*s__r);
+ s__:=s__+length((s__x,s__y));
+enddef;
+def cerchovane (expr a,b)=
+ s__:=0; add_slen(a,b);
+ ju:=round(s__);
+ for i=1 upto ju:
+ t1:=(2*i-2)/(2*ju-1);
+ t2:=(2*i-1)/(2*ju-1);
+ draw t1[a,b]--t2[a,b];
+ t1:=(2*i)/(2*ju-1);
+ if i<ju: drawdot (0.5t1+0.5t2)[a,b]; fi;
+ endfor;
+ enddef;
+def dashed(expr a,b)=
+ s__:=0; add_slen(a,b);
+ ju:=round(s__);
+ for i=4 step 4 until 4*ju:
+ t1:=i/(4*ju); t2:=(i-1)/(4*ju); t3:=(i-3)/(4*ju); t4:=(i-4)/(4*ju);
+ draw t1[a,b]--t2[a,b]; draw t3[a,b]--t4[a,b];
+ endfor;
+ enddef;
+eps_:=0.001; len_given:=1;
+def dashedpath expr g_path =
+ p_count:=length(g_path);
+ t_left:=0; t_right:=0.1p_count;
+ forever: pair aa_; aa_=point t_left of g_path;
+ forever:
+ t_middlea:=1/4[t_left,t_right]; t_middleb:=3/4[t_left,t_right];
+ pair ab_,ac_,ad_;
+ ab_=point t_middlea of g_path;
+ ac_=point t_middleb of g_path; ad_=point t_right of g_path;
+ s__:=0; add_slen(aa_,ab_); add_slen(ab_,ac_); add_slen(ac_,ad_);
+ len_dash:=s__;
+ exitunless (abs(len_dash-len_given)>eps_);
+ exitunless (t_right<p_count);
+ len_dash:=len_given/len_dash;
+ t_right:=len_dash[t_left,t_right];
+ if (t_right>p_count): t_right:=p_count; fi;
+ endfor;
+ tenkepero;
+ draw subpath (t_left,t_middlea) of g_path;
+ draw subpath (t_middleb,t_right) of g_path;
+ last_dif:=t_right-t_left;
+ t_left:=t_right;
+ exitunless (t_right<p_count);
+ t_right:=t_left+last_dif;
+ if (t_right>p_count): t_right:=p_count; fi;
+ endfor;
+enddef;
+%
+% various pens
+%
+def penfordots = pickup pencircle scaled 10thinestline; enddef;
+def thickpen = pickup pencircle scaled 4thinestline; enddef;
+def middlepen = pickup pencircle scaled 2thinestline; enddef;
+def thinpen = pickup pencircle scaled thinestline; enddef;
+def drawdots (text t) = for $=t: drawdot $; endfor; enddef;
+def cdrawdot expr bod =
+ drawdot bod; pickup currentpen scaled 2/3; erase drawdot bod;
+ pickup currentpen scaled 1.5;
+enddef;
+def cdrawdots (text t) =
+ for $=t: drawdot $; endfor;
+ pickup currentpen scaled 2/3;
+ for $=t: erase drawdot $; endfor;
+ pickup currentpen scaled 1.5;
+enddef;
+%
+% Czech equivalents and equivalents of previous versions
+%
+let peronatecky=penfordots;
+let peronapuntiky=penfordots;
+let tenkepero=thinpen;
+let strednipero=middlepen;
+let tlustepero=thickpen;
+let puntiky=drawdots;
+let krouzek=cdrawdot;
+let drawcontourdot=cdrawdot;
+let drawcontourdots=cdrawdots;
+let krouzky=cdrawdots;
+let carkovane=dashed;
+let carkovanacesta=dashedpath;
+%
+% call mode_setup
+%
+font_size 100mm#;
+mode_setup;
+thinestline:=0.4pt;
+
+%endinput;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The overview of the preparation of the picture is following:
+% - make a chart of the picture on the paper with the regular scale.
+% - put down the coordinate system (using mesh on the paper --- units
+% correspond to the mesh)
+% - mark the significant points for drawing
+% - put the description into the picture
+% - make oblong around the picture (using the mesh on the paper)
+% in such a way that the description in the picture is included;
+% this oblong corresponds to the rounding box of the the character
+% in which the picture will be placed
+% - choose the reference point (on the left side of the rounding box)
+% of the character
+% - create metafont source of the chart --- besides the usual commands
+% of metafont the definitions from this package can simplify
+% the writing of metafont source (see below) and enable to transfer
+% some important information through font to the TeX document
+% - place the character from the new font created into the TeX document;
+% some significant dimensions are stored in fontdimens, so they can
+% simplify the placing of the description into the picture
+%
+% Useful definitions from this macro package (with the context of the
+% procedure described above):
+%
+% beginch(char,width,height,depth,x_units,y_units); introduces the
+% created character; the parameters have the following meaning:
+% char - code of the character (admissible values are: "A" to "I",
+% (or "A" to "S" if macro shiftorigin is not used))
+% width - width of the character in sharp units (for example 20mm#)
+% height - height of the character in sharp units
+% depth - depth of the character in sharp units
+% x_units - width of the picture expressed in the number of the
+% "squares" of the mesh on the paper (i.e. natural number
+% just number without any units)
+% y_units - height of the character (not depth) expressed in the
+% number of the "squares" of the mesh on the paper (i.e.
+% natural number just number without any units)
+% Using this macro as the begin of the character, all points can be
+% given in the number of the "squares" of the mesh on the paper (no
+% measures are needed). (If c denotes code of the given character,
+% then values width/x_units, height/y_units are stored in the
+% fontdimen c-63, fontdimen c-43, respectively).
+% endch; closing command for character.
+% If before endch the variable showmesh is positive, then
+% the character contains the mesh corresponding to the mesh on the
+% paper.
+% If before endch the variable showbox is positive, then
+% the character contains the rounding box.
+% Macros beginch and endch create group, so that changes
+% betweenthem are local.
+% shiftorigin(x,y); says the origin of the choosen coordinate system
+% with respect to the reference point of the character is (x,y)
+% (expressed in the "squares" of the mesh on the paper).
+% Corresponding sharp value in the vertical direction is stored
+% in the italic correction of the character. If value x is nonzero,
+% than the corresponding sharp value is stored in the fontdimen c-23
+% (see beginch above);
+% sharparrow is the path --- simple arrow with the tip
+% in the origin, the length of three units and width of two units,
+% it has direstion of the x-axe
+% axes z; puts the coordinate system into the picture; the
+% intersection of axes is at the point z
+% arrow (len,ang) is the outline of the arrow with the tip
+% in the origin, with given length len and in given direction ang
+% vector(sta,sto); is the vector from the point sta to the point sto
+% cerchovane(sta,sto); plots dashed and dotted line from the point sta
+% to the point sto
+% dashed(sta,sto); plots dashed line from the point sta to the point sto
+% dashedpath pat; plots dashed path pat
+% penfordots; chooses circle pen of the width diameter 10*thinestline
+% (for the value of thinnestline see below);
+% thinpen; chooses circle pen of the width diameter thinestline
+% middlepen; chooses circle pen of the width diameter 2*thinestline
+% thickpen; chooses circle pen of the width diameter 4*thinestline
+% drawdots(poi); draws dots (with choosen pen) from the list poi of
+% points
+% cdrawdot(poi); draws only contour of dot at the point poi
+% cdrawdots(poi); at each point of the list poi draws contour of dot
+%
+% Default values of some variables:
+% showmesh:=0; mesh is not shown
+% showbox:=0; rounding box is not shown
+% mode=ouproof; if no mode is specified (the output is shown on the
+% screen and the values showmesh, showbox are set
+% positive in the definition of beginch)
+% eps_:=0.001; tolerance for iterativ process when the length of the
+% dashes is computed (in dashedpath)
+% len_given:=2; experimental value determining the length of the dashes
+% (in dashedpath)
+% s__r:=10; experimental value determining the length of the dashes
+% (in dashed and cerchovane)
+% font_size 100mm#; no value in the picture will be greater than 1.6m
+% thinestline:=0.4pt; the thickness of the thinnest pen
+%
+% Czech equivalents for some macros:
+% peronatecky is the same as penfordots
+% peronapuntiky is the same as penfordots
+% tenkepero is the same as thinpen
+% strednipero is the same as middlepen
+% tlustepero is the same as thickpen
+% puntiky is the same as drawdots
+% krouzek is the same as cdrawdot
+% drawcontourdot is the same as cdrawdot
+% krouzky is the same as cdrawdots
+% drawcontourdots is the same as cdrawdots
+% carkovane is the same as dashed
+% carkovanacesta is the same as dashedline
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/infpic/incpic.tex b/macros/generic/infpic/incpic.tex
new file mode 100644
index 0000000000..00dcfa065d
--- /dev/null
+++ b/macros/generic/infpic/incpic.tex
@@ -0,0 +1,438 @@
+% Macro for more comfortable treating pictures (pictures placed
+% on left or right side of page are imbedded into paragraphs, pictures
+% that are centered can be imbedded between lines of paragraph).
+% For more details see the end of this file.
+%
+% Oldrich Ulrych July 30, 1992, Prague
+%
+%
+\edef\catcodeat{\the\catcode`\@ } \catcode`\@=11
+%
+\newbox\p@ctbox % box for the current picture to be placed in
+\newbox\t@mpbox % box for temporary storing
+\newbox\@uxbox % auxiliary box
+\newbox\s@vebox % stack of scanned pictures
+%
+\newtoks\desct@ks \desct@ks={} % stack for of descriptions under pictures
+\newtoks\@ppenddesc % toks for appended local description
+\newtoks\sh@petoks % token for description of picture
+%
+\newif\ifallfr@med \allfr@medfalse % true if all picture are being fr@med
+\newif\if@ddedrows % true if round brackets appeared
+\newif\iffirstp@ss \firstp@ssfalse % flag for paragraph test
+\newif\if@mbeeded % flag to indicate just to copy picture
+\newif\ifpr@cisebox % flag to copy picture in natural width
+\newif\ifvt@p % inserted picture is \vtop
+\newif\ifvb@t % inserted picture is \vbot
+\newif\iff@nished \f@nishedtrue % text is around the picture
+\newif\iffr@med % picture will be framed
+\newif\ifj@stbox \j@stboxfalse % only framed box is shown
+%
+\newcount\helpc@unt % auxiliary counter
+\newcount\p@ctpos % position of the picture (0-l,1-c,2-r)
+%
+\newdimen\r@leth \r@leth=0.4pt % thickness of rules
+\newdimen\x@nit % x-size of user's horizontal units
+\newdimen\y@nit % y-size of user's vertical units
+\newdimen\xsh@ft % x-shift of user's coordinates
+\newdimen\ysh@ft % y-shift of user's coordinates
+\newdimen\@uxdimen % auxiliary dimension
+\newdimen\t@mpdimen % auxiliary dimension
+\newdimen\t@mpdimeni % auxiliary dimension
+\newdimen\b@tweentandp % marginal space between text and picture
+\newdimen\b@ttomedge % bottom edge of the picture on page
+\newdimen\@pperedge % upper edge of the picture on page
+\newdimen\@therside % space on the outer side of picture
+\newdimen\d@scmargin % space around marks inside picture
+\newdimen\p@ctht % height+depth of picture
+\newdimen\l@stdepth
+\newdimen\in@tdimen
+\newdimen\l@nelength
+\newdimen\re@lpictwidth
+%
+\def\justframes{\global\j@stboxtrue} % only framed empty place is shown
+\def\picturemargins#1#2{\b@tweentandp=#1\@therside=#2\relax}
+\def\allframed{\global\allfr@medtrue} % all picturew will be fr@med
+\def\emptyplace#1#2{\pl@cedefs % the empty vbox will be created
+ \setbox\@uxbox=\vbox to#2{\n@llpar% all paragraph values are reset
+ \hsize=#1\vfil \vrule height0pt width\hsize}% vbox to prescribed dimensions
+ \e@tmarks}
+\def\boxplace{\pl@cedefs\afterassignment\re@dvbox\let\n@xt= }
+\def\re@dvbox{\setbox\@uxbox=\vbox\bgroup% all is stored in vbox
+ \n@llpar\aftergroup\e@tmarks}
+\def\fontcharplace#1#2{\pl@cedefs % picture is in font
+ \setbox\@uxbox=\hbox{#1\char#2\/}%
+ \xsh@ft=-\wd\@uxbox % width of character and shift of origin
+ \setbox\@uxbox=\hbox{#1\char#2}%
+ \advance\xsh@ft by \wd\@uxbox % horizontal shift of the origin
+ \helpc@unt=#2
+ \advance\helpc@unt by -63 % fontdimen code-63: size of user's x-unit
+ \x@nit=\fontdimen\helpc@unt#1%
+ \advance\helpc@unt by 20 % fontdimen code-43: size of user's y-unit
+ \y@nit=\fontdimen\helpc@unt#1%
+ \advance\helpc@unt by 20 % fontdimen code-23: y-shift of origin
+ \ifnum\helpc@unt<51
+ \ysh@ft=-\fontdimen\helpc@unt#1%
+ \fi
+ \e@tmarks}
+\def\n@llpar{\parskip0pt \parindent0pt% paragraph values are reset
+ \leftskip=0pt \rightskip=0pt
+ \everypar={}}
+\def\pl@cedefs{\xsh@ft=0pt\ysh@ft=0pt}% by default user's origin is not shifted
+\def\e@tmarks#1{\setbox\@uxbox=\vbox{ % reset the box with picture
+ \n@llpar
+ \hsize=\wd\@uxbox % to preserve its width
+ \noindent\copy\@uxbox % the box itself
+ \kern-\wd\@uxbox % jump to the left margin
+ #1\par}% % mark into the picture
+ \st@redescription}
+\def\t@stprevpict#1{\ifvoid#1\else % if previous picture is not finished
+ \errmessage{Previous picture is not finished yet.}\fi} % then error message
+
+\def\st@redescription#1\par{% % puts picture's description on the stack
+ \global\setbox\s@vebox=\vbox{\box\@uxbox\unvbox\s@vebox}%
+ \desct@ks=\expandafter{\the\desct@ks#1\@ndtoks}}%remembers the description
+%\def\@ndtoks{}
+\def\def@ultdefs{\p@ctpos=1 % picture is centered by default
+ \def\lines@bove{0}% % no full lines above picture by default
+ \@ddedrowsfalse % no extra full lines read by default
+ \@mbeededfalse % paragraph flows around picture by default
+ \pr@ciseboxfalse
+ \vt@pfalse % output box will be vbox
+ \vb@tfalse % output box will be vbox
+ \@ppenddesc={}% % no append to description
+ \ifallfr@med\fr@medtrue\else\fr@medfalse\fi
+ }
+
+\def\descriptionmargins#1{\global\d@scmargin=#1\relax}
+\def\@dddimen#1#2{\t@mpdimen=#1\advance\t@mpdimen by#2#1=\t@mpdimen}
+\def\placemark#1#2 #3 #4 #5 {\unskip % ignore previous spaces
+ \setbox1=\hbox{\kern\d@scmargin#5\kern\d@scmargin}% form the mark
+ \@dddimen{\ht1}\d@scmargin % add some space above mark
+ \@dddimen{\dp1}\d@scmargin % add some space below mark
+ \ifx#1l\dimen3=0pt\else % the correction
+ \ifx#1c\dimen3=-0.5\wd1\else
+ \ifx#1r\dimen3=-\wd1
+ \fi\fi\fi
+ \ifx#2u\dimen4=-\ht1\else % and @dd the correction
+ \ifx#2c\dimen4=-0.5\ht1\advance\dimen4 by 0.5\dp1\else
+ \ifx#2b\dimen4=0pt\else
+ \ifx#2l\dimen4=\dp1
+ \fi\fi\fi\fi
+ \advance\dimen3 by #3% % x position
+ \advance\dimen4 by #4% % y position
+ \advance\dimen4 by-\dp1
+ \advance\dimen3 by \xsh@ft % influence of shifting of the origin
+ \advance\dimen4 by \ysh@ft % influence of shifting of the origin
+ \kern\dimen3\vbox to 0pt{\vss\copy1\kern\dimen4}% put the mark
+ \kern-\wd1 % jump back of the width of mark
+ \kern-\dimen3 % jump back of the x position
+ \ignorespaces} % ignore following spaces
+\def\fontmark #1#2 #3 #4 #5 {\placemark #1#2 #3\x@nit{} #4\y@nit{} {#5} }
+\def\fr@msavetopict{\global\setbox\s@vebox=\vbox{\unvbox\s@vebox
+ \global\setbox\p@ctbox=\lastbox}%
+ \expandafter\firstt@ks\the\desct@ks\st@ptoks}
+\def\firstt@ks#1\@ndtoks#2\st@ptoks{%
+ \global\desct@ks={#2}%
+ \def\t@mpdef{#1}%
+ \@ppenddesc=\expandafter\expandafter\expandafter
+ {\expandafter\t@mpdef\the\@ppenddesc}}
+\def\testf@nished{{\let\s@tparshape=\relax
+ \s@thangindent}}
+\def\inspicture{\t@stprevpict\p@ctbox
+ \def@ultdefs % set default values
+ \fr@msavetopict
+ \iff@nished\else\testf@nished\fi
+ \iff@nished\else
+ \immediate\write16{Previes picture is not finished yet}%
+ \fi
+ \futurelet\N@xt\t@stoptions} % look ahead
+\def\t@stoptions{\let\n@xt\@neletter% scans parameters
+ \ifx\N@xt l\p@ctpos=0\else % picture on left inside par
+ \ifx\N@xt c\p@ctpos=1\else % picture copied centered
+ \ifx\N@xt r\p@ctpos=2\else % picture on right inside par
+ \ifx\N@xt(\let\n@xt\e@tline\else % number of full row above
+ \ifx\N@xt!\@mbeededtrue\else % just copy the picture
+ \ifx\N@xt|\fr@medtrue\else % picture will be framed
+ \ifx\N@xt^\vt@ptrue\vb@tfalse\else % picture as vtop
+ \ifx\N@xt_\vb@ttrue\vt@pfalse\else % picture as vbot
+ \ifx\N@xt\bgroup\let\n@xt\@ddgrouptodesc\else
+ \let\n@xt\@dddescription % all parameters are read
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\n@xt}
+\def\e@tline(#1){\def\lines@bove{#1}% define number of full rows above picture
+ \@ddedrowstrue
+ \futurelet\N@xt\t@stoptions}
+\def\@neletter#1{\futurelet\N@xt\t@stoptions} % eats one parameter
+\def\@ddgrouptodesc#1{\@ppenddesc={#1}\futurelet\N@xt\t@stoptions}
+\def\fr@medpict{\setbox\p@ctbox=
+ \vbox{\n@llpar\hsize=\wd\p@ctbox
+ \iffr@med\else\r@leth=0pt\fi
+ \ifj@stbox\r@leth=0.4pt\fi
+ \hrule height\r@leth \kern-\r@leth
+ \vrule height\ht\p@ctbox depth\dp\p@ctbox width\r@leth \kern-\r@leth
+ \ifj@stbox\hfill\else\copy\p@ctbox\fi
+ \kern-\r@leth\vrule width\r@leth\par
+ \kern-\r@leth \hrule height\r@leth}}
+\def\@dddescription{\fr@medpict % adds description to the picture
+ \re@lpictwidth=\the\wd\p@ctbox
+ \advance\re@lpictwidth by\@therside
+ \advance\re@lpictwidth by\b@tweentandp
+ \ifhmode\ifinner\pr@ciseboxtrue\fi\fi
+ \createp@ctbox
+ \let\N@xt\tr@toplacepicture
+ \ifhmode % if inside paragraph then use \vadjust
+ \ifinner\let\N@xt\justc@py
+ \else\let\N@xt\vjustc@py
+ \fi
+ \else
+ \ifnum\p@ctpos=1 % if centered then just copy the box
+ \let\N@xt\justc@py
+ \fi
+ \fi
+ \if@mbeeded\let\N@xt\justc@py\fi % if forced to copy, just copy the box
+ \firstp@sstrue
+ \N@xt}
+\def\createp@ctbox{\global\p@ctht=\ht\p@ctbox
+ \advance\p@ctht by\dp\p@ctbox
+ \advance\p@ctht by 6pt
+ \setbox\p@ctbox=\vbox{% % make new vbox
+ \n@llpar % reset par's parameters
+ \t@mpdimen=\@therside % and set the leftskip and rightskip
+ \t@mpdimeni=\hsize % according to the position of picture
+ \advance\t@mpdimeni by -\@therside
+ \advance\t@mpdimeni by -\wd\p@ctbox
+ \ifpr@cisebox
+ \hsize=\wd\p@ctbox
+ \else
+ \ifcase\p@ctpos
+ \leftskip=\t@mpdimen \rightskip=\t@mpdimeni
+ \or \advance\t@mpdimeni by \@therside
+ \leftskip=0.5\t@mpdimeni \rightskip=\leftskip
+ \or \leftskip=\t@mpdimeni \rightskip=\t@mpdimen
+ \fi
+ \fi
+ \hrule height0pt % invisible rule and nobreak penalty
+ \kern6pt % small space above
+ \penalty10000
+ \noindent\copy\p@ctbox\par % put the picture with marks
+ \kern3pt % small space between pict and description
+ \hrule height0pt
+ \hbox{}%
+ \penalty10000
+ \interlinepenalty=10000
+ \the\@ppenddesc\par % follows text of description
+ \penalty10000 % prohibite page break
+ \kern3pt % small space below
+ }%
+ \ifvt@p
+ \setbox\p@ctbox=\vtop{\unvbox\p@ctbox}%
+ \else
+ \ifvb@t\else
+ \@uxdimen=\ht\p@ctbox
+ \advance\@uxdimen by -\p@ctht
+ {\vfuzz=\maxdimen
+ \global\setbox\p@ctbox=\vbox to\p@ctht{\unvbox\p@ctbox}%
+ }%
+ \dp\p@ctbox=\@uxdimen
+ \fi
+ \fi
+ }
+\def\picname#1{\unskip\setbox\@uxbox=\hbox{\bf\ignorespaces#1\unskip\ }%
+ \hangindent\wd\@uxbox\hangafter1\noindent\box\@uxbox\ignorespaces}
+\def\justc@py{\ifinner\box\p@ctbox\else\kern\parskip\unvbox\p@ctbox\fi
+ \global\setbox\p@ctbox=\box\voidb@x}
+\def\vjustc@py{\vadjust{\kern0.5\baselineskip\unvbox\p@ctbox}%
+ \global\setbox\p@ctbox=\box\voidb@x}
+\def\tr@toplacepicture{% % tries to find the good place
+ \ifvmode\l@stdepth=\prevdepth % remember the depth of last box
+ \else \l@stdepth=0pt % otherwise the depth of last box is zero
+ \fi
+ \vrule height.85em width0pt\par% to define exact totalpage
+ \r@memberdims % remembers the significant dimensions
+ \global\t@mpdimen=\pagetotal
+ \t@stheightofpage % tests if the picture fits here
+ \ifdim\b@ttomedge<\pagegoal % if the picture ends on the current page
+ \let\N@xt\f@gurehere % the picture can be placed here
+ \global\everypar{}% % clear up the everypar token
+ \else
+ \let\N@xt\relax % we must wait till the new page
+ \penalty10000
+ \vskip-\baselineskip % but jump back to the reference point
+ \vskip-\parskip % of the last line of the previous par
+ \immediate\write16{Picture will be shifted down.}%
+ \global\everypar{\sw@tchingpass}% % check the begin of every paragraph
+ \fi
+ \penalty10000
+ \N@xt}
+\def\sw@tchingpass{% % on every odd pass t@sts the possibility
+ \iffirstp@ss % to place picture here
+ \let\n@xt\relax
+ \firstp@ssfalse % on every even pass does nothing
+ \else
+ \let\n@xt\tr@toplacepicture
+ \firstp@sstrue
+ \fi \n@xt}
+\def\r@memberdims{\global\in@tdimen=0pt
+ \ifnum\p@ctpos=0
+ \global\in@tdimen=\re@lpictwidth
+ \fi
+ \global\l@nelength=\hsize
+ \global\advance\l@nelength by-\re@lpictwidth
+ }
+\def\t@stheightofpage{%
+ \global\@pperedge=\t@mpdimen
+ \advance\t@mpdimen by-0.7\baselineskip % jump back to the begin of par
+ \advance\t@mpdimen by \lines@bove\baselineskip % and down by full lines
+ \advance\t@mpdimen by \ht\p@ctbox % and down by the height of new box
+ \advance\t@mpdimen by \dp\p@ctbox % and down by the depth of new box
+ \advance\t@mpdimen by-0.3\baselineskip % and down by the depth of last box
+ \global\b@ttomedge=\t@mpdimen % and remember bottom edge
+ }
+\def\f@gurehere{\global\f@nishedfalse
+ \t@mpdimen=\lines@bove\baselineskip % and remember the amount of used
+ \advance\t@mpdimen-0.7\baselineskip % space
+ \kern\t@mpdimen
+ \advance\t@mpdimen by\ht\p@ctbox
+ \advance\t@mpdimen by\dp\p@ctbox
+ {\t@mpdimeni=\baselineskip
+ \offinterlineskip
+ \unvbox\p@ctbox
+ \global\setbox\p@ctbox=\box\voidb@x
+ \penalty10000 \kern-\t@mpdimen % and jump back to the reference
+ \penalty10000 \vskip-\parskip % point of the last line of previous
+ \kern-\t@mpdimeni % paragraph
+% \hbox{\vrule height\l@stdepth width0pt}%
+ }%
+ \penalty10000 % prevent page breaking
+ \global\everypar{\s@thangindent}% % and mark that paragraph is special
+ }
+\def\s@thangindent{%
+ \ifdim\pagetotal>\b@ttomedge\global\everypar{}%
+ \global\f@nishedtrue % if we continue under the picture
+ \else
+ \advance\@pperedge by -1.2\baselineskip
+ \ifdim\@pperedge>\pagetotal\global\everypar{}%
+ \global\f@nishedtrue
+ \else
+ \s@tparshape % if we continue around the picture
+ \fi
+ \advance\@pperedge by 1.2\baselineskip
+ \fi}
+\def\s@tparshape{\t@mpdimen=-\pagetotal% minus upperedge of the picture
+ \advance\t@mpdimen by\b@ttomedge % plus bottomedge of the pictured
+ \divide\t@mpdimen by\baselineskip % divided by baselineskip gives the
+ \helpc@unt=\t@mpdimen % number of shorter lines
+ \advance \helpc@unt by 2 % rounding correction and one line more
+ \sh@petoks=\expandafter{\the\helpc@unt\space}% \sh@petoks is for \parshape
+ \t@mpdimeni=\lines@bove\baselineskip
+ \t@mpdimen=\pagetotal
+ \gdef\lines@bove{0}% % in next paragraphs no lines are full
+ \loop \ifdim\t@mpdimeni>0.999\baselineskip % counts the full lines
+ \advance\t@mpdimen by \baselineskip
+ \advance\t@mpdimeni by-\baselineskip
+ \sh@petoks=\expandafter{\the\sh@petoks 0pt \the\hsize}%
+ \repeat
+ \loop \ifdim\b@ttomedge>\t@mpdimen % counts the shorter lines
+ \advance\t@mpdimen by \baselineskip
+ \sh@petoks=\expandafter{\the\sh@petoks \in@tdimen \l@nelength }%
+ \repeat
+ \sh@petoks=\expandafter
+ {\the\sh@petoks 0pt \the\hsize}% % and next lines are full again
+ \expandafter\parshape\the\sh@petoks
+ }
+
+\descriptionmargins{2pt}
+\picturemargins{15pt}{0pt}
+
+\catcode`\@=\catcodeat \let\catcodeat=\undefined
+
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Short syntax of control sequences:
+%
+% \allframed all following pictures will be framed by thin line
+%
+% \picturemargins{<dimen1>}{<dimen2>} sets the space between text
+% of paragraph and picture to the value <dimen1> and space on the
+% other side of picture to the value <dimen2>. Default values are
+% 15pt and 0pt. These values are taken into account only when
+% pictures are placed inside paragraphs.
+%
+% \descriptionmargins{<dimen>} sets the space around marks to the value
+% <dimen> (so the mark seems a little bigger and doesn't stick to the
+% point where placed (if placed by point on its border). Default
+% value is 1pt.
+%
+% \justframes means that all following pictures will be shown only by
+% the outlines.
+%
+% Control sequences that create object and put it onto the stack of pictures
+%
+% \emptyplace{<width><whatever>}{<height>}{<marks>}<description>\par
+%
+% \boxplace{<vbox>}{<marks>}<description>\par
+%
+% \fontcharplace{<font>}{<char>}{<marks>}<description>\par
+% <width> is the width of free place
+% <whatever> material placed into created vbox
+% <height> is the height of free place
+% <vbox> the vbox with picture
+% <font> is the cs of font with picture
+% <char> number of char with picture (65,66,...
+% <marks> are either \placemark's with their parameters
+% or \fontmark's with their parameters (in the case of
+% \fontcharplace)
+% <description> is text that will be placed under the picture
+% as the description of the picture
+%
+% \placemark <ph><pv> <xdim> <ydim> <mark>
+%
+% \fontmark <ph><pv> <xrel> <yrel> <mark>
+% <ph> one of the letter l, c, r indicates that the left
+% margin, center or right margin (after adding value
+% determined by \descriptionmargins) will be placed into
+% the prescribed position.
+% <pv> one of the letter u, c, b, l indicates that the upper
+% edge, center, bottom line or lower edge (after adding value
+% determined by \descriptionmargins) will be placed into
+% the prescribed position.
+% <xdim> or <ydim> are dimensions describing the position of
+% mark with respect to the lower left corner of
+% picture (this corner can be seen when you use
+% \allframed at the begin of your file)
+% <xrel> or <yrel> are relative dimensions describing the
+% position of mark with respect to the origin of user's
+% coordinate system (as specified in METAFONT macro
+% INCPIC.MF). It works only in \fontcharplace and for
+% pictures that are created by METAFONT using macro INCPIC.MF.
+% <mark> (terminated by space) is the text of mark.
+%
+% \picname{<title>} the <title> is set in bold face font in front of
+% the <description> from the left margin of the picture and the
+% <description> is indented by the width of the title. (This macro
+% could be used in the description of the picture.)
+%
+% Control sequences take the picture from the stack and put it into text.
+%
+% \inspicture lcr(<n>)!|^_{<description>} takes the first picture from
+% the stack and puts it into the text. All parameters are optional
+% and their meaning is:
+% l the picture is placed on the left side of the pages
+% c the picture is centered (this is default)
+% r the picture is placed on the right side of the pages
+% <n> number of full rows (default is 0)
+% above the picture when the picture is placed on the
+% left or right side of page.
+% ! forces to copy the picture here. In this case the
+% options lrc(<n>) are ignored.
+% | picture will be framed by thin line
+% ^ the picture forms \vtop (influnces the aligning with
+% surrounding text.
+% _ the picture forms \vbox with zero depth
+% (influnces the aligning with surrounding text.
+% When \inspicture is used inside a paragraph, it is
+% recomended to put empty group after its last parameter.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ No newline at end of file
diff --git a/macros/generic/infpic/mf180.bat b/macros/generic/infpic/mf180.bat
new file mode 100644
index 0000000000..8a465a3b84
--- /dev/null
+++ b/macros/generic/infpic/mf180.bat
@@ -0,0 +1,6 @@
+mf &plain \mode=lqlores; mag=1.0; input %1
+gftopk %1.180 c:\tex\pixel180\dpi180\%1.pk
+copy %1.tfm c:\tex\fonttfms\%1.tfm
+mf &plain \mode=lqlores; mag=1.2; input %1
+gftopk %1.216 c:\tex\pixel180\dpi216\%1.pk
+ \ No newline at end of file
diff --git a/macros/generic/infpic/mf300.bat b/macros/generic/infpic/mf300.bat
new file mode 100644
index 0000000000..37cf9fbda6
--- /dev/null
+++ b/macros/generic/infpic/mf300.bat
@@ -0,0 +1,6 @@
+mf &plain \mode=hplaser; mag=1.0; input %1
+gftopk %1.300 c:\tex\pixel300\dpi300\%1.pk
+copy %1.tfm c:\tex\fonttfms\%1.tfm
+rem mf &plain \mode=hplaser; mag=1.2; input %1
+rem gftopk %1.360 c:\tex\pixel300\dpi360\%1.pk
+ \ No newline at end of file
diff --git a/macros/generic/infpic/sipky.mf b/macros/generic/infpic/sipky.mf
new file mode 100644
index 0000000000..cc9fe93fba
--- /dev/null
+++ b/macros/generic/infpic/sipky.mf
@@ -0,0 +1,27 @@
+
+input incpic
+
+beginch("A",30mm#,10mm#,0mm#,3,1);
+strednipero;
+draw(0,0)--(1,1);
+draw(1,0)--(2,1);
+draw(2,0)--(3,1);
+draw(0,1)--(3,1);
+endch;
+
+beginch("B",50mm#,30mm#,0mm#,5,3);
+strednipero;
+draw(0,0)--(1,1);
+draw(1,0)--(2,1);
+draw(2,0)--(3,1);
+draw(0,1)--(4,1);
+draw(4,3)--(5,1.5);
+draw(4,1)--(5,1.5);
+draw(0,2)--(1,3);
+draw(1,2)--(2,3);
+draw(2,2)--(3,3);
+draw(0,3)--(4,3);
+
+endch;
+
+end
diff --git a/macros/generic/infpic/voting1.cs b/macros/generic/infpic/voting1.cs
new file mode 100644
index 0000000000..0c615e7691
--- /dev/null
+++ b/macros/generic/infpic/voting1.cs
@@ -0,0 +1,269 @@
+\input my.tex
+\input incpic
+\font\sipky=sipky
+
+\fontcharplace{\sipky}{`\A}{
+ \fontmark rc 0 1 {\strut a}
+ \fontmark rc 0 0 {\strut b}
+ \fontmark rc 1 0 {\strut c}
+ \fontmark rc 2 0 {\strut d}
+ }
+
+\podtitul 1: Hlasov n¡ a la Condorcet: Postupn‚ vˆt¨inov‚ porovn v n¡
+
+ V˜bˆr z dvojice, kde mus¡ b˜t vybr n jeden ze dvou
+ kandid t–, je univers lnˆ vy©e¨en vˆt¨inovou volbou. Celkov˜
+ pocit n m napov¡d , ‘e jedinˆ takov˜ v˜bˆr je spravedliv˜,
+ a teorie potvrzuje, ‘e nelze postupovat jinak, pokud chceme
+{ \item {(i)} spravedlnost: ‘ dn  p©edem ur‡en  diskriminace voli‡– ani
+ kandid t–, a
+ \item {(ii)} odolnost proti pou‘it¡ strategi¡: ka‘d˜
+ voli‡ m  motiv volit svobodnˆ -- ‘ dn˜ osamˆl˜ voli‡ (bez
+ £‡asti v nˆjak‚ koalici) nem–‘e £spˆ¨nˆ ovliv¤ovat pr–bˆh
+a v˜sledek voleb.}
+ Tato charakteristika je zn ma jako May–v
+ teor‚m (May [1952]).
+
+ Pokud je t©eba vybrat z v¡ce ne‘ dvou kandid t–, je obvykle
+ situace ponˆkud slo‘itˆj¨¡. Vˆt¨inov‚ porovn v n¡ m–‘e
+ poslou‘it k vytvo©en¡ bin rn¡ relace, tzv. vˆt¨inov‚ relace,
+ kter  vyjad©uje kolektivn¡ preference mezi p ry kandid t–.
+ Bohu‘el, v t‚to relaci se mohou objevit cykly, tato
+ skute‡nost je naz˜v na "Condorcet–v paradox". P©edpokl dejme
+ t©i voli‡e $\{1,2,3\} = N$, kte©¡ maj¡ n sleduj¡c¡ preference:
+
+\vskip 1cm
+\centerline {\hbox {
+\vbox{
+\offinterlineskip
+\halign
+{\strut \ # \quad & \vrule \quad # \quad & # \quad & # \ \cr
+ voli‡ & 1 & 2 & 3 \cr
+ \noalign {\hrule}
+ vrchol & a & c & b \cr
+ & b & a & c \cr
+ dno & c & b & a \cr
+ }} }}
+\vskip 1 cm
+
+ Pokud se vytvo©¡ cykly, nemus¡ ve vˆt¨inov‚m porovn v n¡
+ dvojic existovat Condorcet–v v¡tˆz: ka‘d˜ kandid t je pora‘en
+ nejm‚nˆ jedn¡m jin˜m kandid tem ve vˆt¨inov‚m porovn v n¡.
+ Takto m–‘eme nazvat Condorcetov˜m v¡tˆzem kandid ta $a$, kter˜
+ p©i porovn v n¡ s kter˜mkoliv jin˜m kandid tem $x$ z¡sk 
+ nejm‚nˆ stejnˆ hlas– jako jeho protivn¡k.
+
+ €etnost v˜skytu paradoxu je p©ekvapivˆ vysok .
+ P©edpokl dejme, ‘e voli‡i maj¡ uspo© dan‚ preference a ‘e
+ v˜skyt jednotliv˜ch uspo© d n¡ kandid t– je rovnomˆrnˆ
+ a nez visle rozlo‘en, pak pravdˆpodobnost, ‘e ‘ dn˜ kandid t
+ nen¡ Condorcetov˜m v¡tˆzem m–‘e b˜t spo‡tena nebo
+ p©inejmen¨¡m odhadnuta.
+
+ Pokud ‘ dn˜ Condorcet–v v¡tˆz neexistuje, hled  se
+ zpravidla takov˜ kandid t, kter˜ by jej nahradil (a m  pro to
+ rozumn‚ d–vody). Jako p©¡kld lze uv‚st zn m˜ postup u‘¡van˜
+ v Kongresu USA p©i hlasov n¡ mezi n vrhem z kona a jeho
+ p©¡davky (zn m˜ jako tzv. n vrhov  {\sl (amendment)} procedura, viz
+ Riker [1982], str. 70, pro podrobnosti).
+
+ Hlasov n¡ postupn˜m vylu‡ov n¡m {\sl (succesive elimination)}:
+
+\vskip 1cm
+\inspicture
+\vskip 1cm
+
+ Neprve se vˆt¨inou rozhodne mezi $a$ a $b$, potom se v¡tˆz
+ porovn v  s $c$, atd. V p©¡padˆ nerozhodnutelnosti hlasov n¡
+ (rem¡za) kandid t zdola prohr v .
+
+ V n vrhov‚ procedu©e $a$ znamen  p©¡davek k pozmˆ¤ovac¡mu
+ n vrhu, $b$ p©¡davek k p©¡davku, $c$ je pozmˆ¤ovac¡ n vrh
+ a $d$ platn˜ z kon. Samoz©ejmˆ po©ad¡ v˜bˆru m  sv–j v˜znam:
+ kandid ti nejsou pova‘ov ni za rovnocenn‚ (©¡k me, ‘e
+ hlasovac¡ pravidlo nen¡ neutr ln¡).
+
+\vfill\eject
+
+\def\*{$^*$}
+\def\mez{\hskip 2ex$\vdots$}
+\centerline{ \hbox {
+\vbox{\offinterlineskip
+\halign
+{ \quad # \ & \vrule height 2em depth 1em \qquad # \quad & # \quad
+ & # \quad & # \quad & # & \ # \ & # \quad \cr
+\hskip4em \rlap {\raise 1ex \hbox {po‡et}} \leavevmode \lower 1ex
+ \hbox {voli‡–} & \ 3 & \ 5 & \ 7 & \ 9 & \ 11 && limit \cr
+\noalign {\vskip -1.5em}
+\rlap {\raise 1ex \hbox {po‡et}} \leavevmode \lower 1ex
+ \hbox {kandid t–} &\cr
+\noalign {\hrule}
+\hskip3em 3 & .056 & .069 & .075 & .078 & .080 &.....& .088 \cr
+\hskip3em 4 & .111 & .139 & .150 & .156 & .160 &.....& .176 \cr
+\hskip3em 5 & .160 & .200 & .215 & .230 & .251 &.....& .251 \cr
+\hskip3em 6 & .202 & .255\* & .258\* & .284\* & .294\* &.....& .315 \cr
+\hskip3em 7 & .239\* & .299\* & .305\* & .342\* & .343\* &.....& .369 \cr
+\noalign {\vskip -1em}
+ &\mez &\mez &\mez &\mez &\mez &&\mez \cr
+\noalign {\vskip -1em}
+\hskip2.5em limit & \ 1 & \ 1 & \ 1 & \ 1 & \ 1 &.....& \ 1 \cr
+}}}}
+\vskip .5cm
+\centerline {—daje zna‡en‚ \* jsou odhadnut‚}
+\vskip 3mm
+\centerline { Tabulka 1: Pravdˆpodobnost neexistence Condorcetova v¡tˆze}
+\centerline { Zdroj: Fishburn [1973], str. 95.}
+
+ Tato metoda v‘dy spl¤uje Condorcet–v axiom: jestli‘e a je
+ Condorcet–v v¡tˆz, vyhraje (nehledˆ na pravdˆpodobnost
+ rem¡z). Ve skute‡nosti je to d–sledek vˆt¨inov‚ho porovn v n¡
+ v daleko ¨ir¨¡m smyslu:
+
+
+ Smithova podm¡nka: jestli‘e se mno‘ina A kandid t– rozdˆl¡
+ na dvˆ disjuktn¡ podmno‘iny $B_1,\, B_2$ a ka‘d˜ kandid t $b_1$ z $B_1$
+ poraz¡ (bez rem¡z) ka‘d‚ho $b_2$ z $B_2$, potom v¡tˆz mus¡ b˜t
+ z mno‘iny $B_1$.
+
+ V¨echny hlasovac¡ metody odvozen‚ z bin rn¡ho stromu
+ (v¨echny p©edv dˆn‚ v t‚to ‡ sti jsou tohoto typu) vyhovuj¡
+ Smithovˆ podm¡nce. Bohu‘el nˆkter‚ z nich poru¨uj¡
+ d–le‘itˆj¨¡ p‘adavky kolektivn¡ho v˜bˆru, p©edev¨¡m
+ jednomyslnost neboli Paretovo krit‚rium:
+
+
+ Paretovo krit‚rium: jestli‘e ka‘d˜ voli‡ d v  p©ednost
+ kandid tu $a$ p©ed $b$, kandid t $b$ nem–‘e b˜t vybr n.
+
+ Hlasov n¡ postupn˜m vylu‡ov n¡m m–‘e vybrat Paretova
+ hor¨¡ho kandid ta.
+
+ P©edpokl dejme preference voli‡– n sledovnˆ
+
+\vskip 1cm
+\centerline {\hbox {
+\vbox{
+\offinterlineskip
+\halign
+{\strut \ # \quad & \vrule \quad # \quad & # \quad & # \ \cr
+ voli‡ & 1 & 2 & 3 \cr
+ \noalign {\hrule}
+ vrchol & b & a & c \cr
+ & a & d & b \cr
+ & d & c & a \cr
+ dno & c & b & d \cr
+ }} }}
+\vskip 1 cm
+
+ potom postupn˜ v˜bˆr v po©ad¡ $abcd$ postupuje
+
+\vskip 1cm
+\fontcharplace{\sipky}{`\A}{
+ \fontmark cc 0 1 {\strut a}
+ \fontmark rc 0 0 {\strut b}
+ \fontmark rc 1 0 {\strut c}
+ \fontmark rc 2 0 {\strut d}
+ \fontmark cd 1 1 {\strut b}
+ \fontmark cd 2 1 {\strut c}
+ \fontmark lc 3 1 {\strut d}
+ }
+\inspicture
+\vskip 1cm
+
+ A‡koliv $a$ je Paret–v lep¨¡ kandid t {\sl (Pareto superior)}, ‡ili
+ je jednomyslnˆ preferov n oproti $d$.
+
+ V hlasov n¡ postupn˜m v˜bˆrem m  kandid t, kter˜ vstupuje
+ posledn¡ (jmenovitˆ $d$), o‡ividnou v˜hodu: m–‘e vyhr t
+ pora‘en¡m jenom jednoho (dob©e vybran‚ho) oponenta (toto
+ znamen , ‘e nez le‘¡ na preferenc¡m v–‡i ostatn¡m
+ kandid t–m).
+
+ K zachov n¡ spravedlnosti je mo‘n‚ sestavit dvˆ symetrick‚
+ hlasov n¡ postupn˜m v˜bˆrem n sledovnˆ:
+
+\bye
+
+ a____________________________________
+ / / / \
+ / / / \
+ b/ c/ d/ \
+ /
+ /
+ d____________________________________/
+ / / /
+ / / /
+ c/ b/ a/
+
+ Tabulka 2: Paraleln¡ v˜bˆrov  metoda
+
+ Nyn¡ bˆ‘¡ dvˆ paraleln¡ v˜bˆrov‚ procedury. Dva finalist‚
+ kone‡nˆ soutˆ‘¡ o v¡tˆzstv¡.
+
+ Je dobr‚ cvi‡en¡ ovˆ©it si, ‘e p©i tomto postupu v¡tˆz
+ nem–‘e b˜t Paret–v hor¨¡ kandid t {\sl (Pareto inferior)}. Pro
+ jednoduchost p©edpokl dejme, ‘e v¨echny dvojice je vˆt¨inov‚
+ porovn v n¡ jednozna‡n‚ (pro ka‘dou dvojici $x,\, y$ existuje
+ jednozna‡n  vˆt¨ina preferuj¡c¡ $x$ p©ed $y$ nebo naopak $y$ p©ed
+ $x$). Jestli‘e je zde Condorcet–v v¡tˆz, mus¡ z©ejmˆ vyhr t.
+ Pokud toto neplat¡, zv¡tˆz¡ Copeland–v v¡tˆz, kandid t, kter˜
+ vyhraje pr vˆ dvakr t (a prohraje jednou) v soutˆ‘¡ch dvojic.
+ Mohou se zde vyskytnout nejv˜¨e dva Copelandovi v¡tˆzov‚.
+ Ovˆ©te si, ‘e ‘ dn˜ z nich nem–‘e b˜t Paret–v hor¨¡ kandid t.
+ Pak si v¨imnˆte, ‘e pokud v¡tˆz paraleln¡ho v˜bˆru --- ©eknˆme
+ $x$ --- nen¡ Copeland–v v¡tˆz, pak mus¡ porazit alespo¤ jednoho
+ Copelandova v¡tˆze a to zaru‡uje, ‘e $x$ nen¡ Paret–v hor¨¡
+ kandid t.
+
+ Ale bˆda, paraleln¡ v˜bˆr m  jinou perverzn¡ vlastnost,
+ kter  jej znev˜hod¤uje oproti n sleduj¡c¡m metod m:
+
+ Algoritmus slo‘it‚ho jedn n¡
+{\sl (The Sophisticated Agenda Algorithm)}
+
+ Mˆjme kandid ty $a_1,...,a_n$. Definujme indukc¡
+\def\a {\alpha}
+\hskip 1 cm $\a _{i+1}=a_{i+1}$ pokud $a_{i+1}$ poraz¡
+ $\a _1,\a _2,...,\a _i$
+
+ $\a _1=a_1,
+
+ \hskip 1cm $ a_ {i+1}=\a _i$ pokud nejm‚nˆ jeden $\a _j$, $1<j<i$,
+ rem¡zuje s $a_{i+1}$, nebo jej poraz¡.
+
+ V˜sledek algoritmu je kandid t $\a _n$.
+
+ Nyn¡ m me zaru‡eno:
+\item {a.} algoritmus slo‘it‚ho jedn n¡ vybere stejn‚ho kandid ta,
+ jako v¡cestup¤ov  v˜bˆrov  procedura;
+\item {b.} tento kandid t poraz¡, aŸ p©¡mo ‡i nep©¡mo, ka‘d‚ho
+ jin‚ho kandid ta;
+\item {c.} proto nem–‘e b˜t ani Paret–v hor¨¡ kandid t; a
+\item {d.} tato v˜bˆrov  metoda je monotonn¡.
+
+ Toto jsou v˜sledky z kladn¡ho v˜znamu, a‡koli se v literatu©e
+ o hlasov n¡ objevily teprve ned vno (Miller [1980]; Shepsle
+ a Weingast [1982]; Moulin [1983], ‡ st 5; Banks [1984]).
+
+ Copelandovo hlasovac¡ pravidlo je jin‚ pravidlo zalo‘en‚
+ na vˆt¨inov‚m porovn v n¡ dvojic, kter‚ vyhovuje uveden˜m
+ podm¡nk m b,c,d.
+
+ Copelandovo pravidlo: Copeland [1951].
+
+ Porovnejme ka‘d‚ho kandid ta s ka‘d˜m jin˜m kandid tem
+ a vyberme toho kandid ta, kter˜ vyhr l nej‡astˆji; p©i
+ stejn‚m po‡tu v¡tˆzstv¡ u v¡ce kandid t– vyberme jednoho
+ podle p©edem ur‡en‚ho libovoln‚ho po© dku.
+
+ Navzdory sv‚ jednoduchosti, tato metoda vy‘aduje v¡ce
+ porovn v n¡ dvojic, ne‘ algoritmus slo‘it‚ho jedn n¡: pokud
+ m me $p$ kandid t–, v¨ech $p(p-1)/2$ souboj– mus¡ b˜t rozhodnuto;
+ oproti algoritmu slo‘it‚ho jedn n¡, kde je pot©eba nejv˜¨e
+$p(p-1)/2$ takov˜ch porovn n¡. Pokud m me 13~kandid t– nebo
+ v¡ce, je mo‘n‚ nal‚zt takov˜ soubor preferenc¡, kde dvˆ
+ metody (Copelandova a slo‘it‚ho jedn n¡) vyberou radik lnˆ
+ odli¨n‚ v¡tˆze (Moulin [1984]). Tak‚ lze dok zat, ‘e
+ Copelandovo pravidlo se ned  odvodit z bin rn¡ho stromu,
+ jakkoliv rozs hl‚ho (Moulin [1984]).
+ \ No newline at end of file
diff --git a/macros/generic/insbox/demo.pdf b/macros/generic/insbox/demo.pdf
new file mode 100644
index 0000000000..1da9a1ed98
--- /dev/null
+++ b/macros/generic/insbox/demo.pdf
Binary files differ
diff --git a/macros/generic/insbox/demo.tex b/macros/generic/insbox/demo.tex
new file mode 100644
index 0000000000..f2ec5e4886
--- /dev/null
+++ b/macros/generic/insbox/demo.tex
@@ -0,0 +1,118 @@
+% This file contains description of \InsertBoxL, \InsertBoxR, \InsertBoxC
+% and \MoveBelowBox macros that are defined in the INSBOX package.
+% Compile it and check this source file to see how that all was done.
+
+\nopagenumbers
+
+\input insbox
+\input epsf
+
+
+% a macro for building a box with a frame around it
+\def\Frame#1{%
+ \vbox{
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox{\vskip 4mm \hbox{\hskip 4mm #1 \hskip 4mm} \vskip 4mm}%
+ \vrule
+ }
+ \hrule
+ }
+}
+
+
+
+% Put an \epsfbox in the right after two lines of text:
+\InsertBoxR{2}{\epsfbox{pic1.eps}}
+Creating documents like this is quite easy. Just four easy macros
+can do all the stuff required to put pictures on the page and
+format all the neighbouring paragraphs so that they do not interfere
+with pictures. The picture you see in the right was inserted using
+the following command put just before the beginning of this paragraph:
+\hfil\break
+{\tt\string\InsertBoxR\char123 2\char125\char123\string\epsfbox\char123
+ pic1.eps\char125\char125}
+
+
+The meaning of the macro's arguments is very easy. The first
+argument should be the number of lines to be typeset ``normally'',
+that is using the whole width of the page. The second argument
+is {\it any\/} box that is to be put on the page beside the text.
+The letter {\tt R} at the end of the macro's name indicates
+that the picture should be put in the right. Of course, there is
+also a macro named {\tt\string\InsertBoxL} which works similarly,
+but puts the picture in the left. Further in this document you will
+find a description of the {\tt\string\InsertBoxC} macro. As you
+probably guessed, it inserts a picture centered in the page.
+
+
+\def\somebox{\vbox{
+ \hsize = 5cm
+ \noindent Some simple text. Some simple text. Some simple text.
+ Some\break simple text. Some simple text.
+ $$ a^2 + b^2 = c^2 $$
+ That was a simple formula. Let's put more text here to make
+ this box bigger... Some simple text. Some simple text.
+}}
+
+% as you see, you can supply the third optional parameter to
+% \InsertBoxL and \InsertBoxR macros; it may help if they
+% calculate the space for the frame incorrectly
+\InsertBoxL{2}{\Frame{\somebox}}[-2]
+I mentioned earlier that almost {\it anything\/} can be inserted
+in the document --- not only {\tt\string\epsfbox}es. You can create
+{\it any\/} box containing graphics, text, math formulas and put it
+beside your text using {\tt\string\InsertBox} macros. The simple
+example in the left should be a good proof.
+
+
+The macros are quite reliable, but you may experience some problems
+if you put displayed math formulas beside pictures. The space reserved
+for the frame may appear too little or too big. But there is an
+easy way to make neccessary correction. Check the source file
+to see how it was done in this particular situation.
+ $$ \sum_{i=1}^{n} i^3 = \left( {n(n+1) \over 2} \right)^2 $$
+Also, I do not guarrantee correct behaviour of these macros in other
+extreme conditions. It is not possible to put two {\tt\string\InsertBox}
+commands before a paragraph --- in that case you should not expect
+a paragraph squeezed between two frames.
+
+
+\def\somebox{\vbox{
+ \epsfxsize=4cm
+ \hbox{\epsfbox{pic2.eps}}
+ \hbox to 4cm{\hss Figure 2.\hss}
+}}
+
+There is also a macro for inserting boxes centered in the page. Its name
+is {\tt\string\InsertBoxC} and it requires only one argument --- the
+box to be inserted. The macro should be called from {\it inside\/}
+a paragraph (not put {\it before\/} a paragraph). The box will be put
+just below the line containing the macro. For example the picture below
+was inserted by putting
+{\tt\string\InsertBoxC\char123 \string\somebox\char125}
+after {\it this\/}\InsertBoxC{\somebox} word. The line was completed,
+the picture was inserted and the paragraph continues below the picture.
+The usage seems very simple and intuitive.
+
+
+\InsertBoxR{0}{\somebox}
+I recommend that you see the source of this document and check how
+changes to arguments of {\tt\string\InsertBox} macros affect paragraphs.
+But before I end, let me give you one more hint. Sometimes you may wish
+to generate a vertical skip like this:
+
+
+\MoveBelowBox
+In such situation you should use the {\tt\string\MoveBelowBox} command.
+It starts the next paragraph just below the current picture.
+
+
+\bigskip
+\noindent
+Micha\l{} Gulczy\'nski \hfil\break
+{\tt mgulcz@we.tuniv.szczecin.pl}
+
+
+\bye
diff --git a/macros/generic/insbox/insbox.tex b/macros/generic/insbox/insbox.tex
new file mode 100644
index 0000000000..ea7545add4
--- /dev/null
+++ b/macros/generic/insbox/insbox.tex
@@ -0,0 +1,256 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% INSBOX --- macros for inserting pictures into paragraphs %
+% Micha\l{} Gulczy\'nski, Szczecin, Jan 1996 / Feb 1998 %
+% mgulcz@we.tuniv.szczecin.pl %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% version 2.2
+%
+% available macros:
+% * \InsertBoxC{anybox}
+% insert a centered box (use int _inside_ a paragraph)
+% * \InsertBoxL{after_line}{anybox}[correction]
+% * \InsertBoxR{after_line}{anybox}[correction]
+% insert a box in the left/right after specified number of lines;
+% correction specified in square brackets is optional;
+% both macros should be called _before_ a paragraph
+% * \MoveBelowBox
+% start a new paragraph just below the current frame
+%
+% see the demo.tex file for more information
+%
+
+\catcode`\@ = 11
+%
+% Margin between the text and the box:
+\newdimen\@InsertBoxMargin
+\@InsertBoxMargin = 2mm
+%
+% definition of \ParShape, an inproved version of plain \parshape
+%
+\newcount\@numlines % sum: m_1+...+m_n
+\newcount\@linesleft % counter used when reading lines of \ParShape
+\def\ParShape{%
+ \@numlines = 0
+ \def\@parshapedata{ }% here we'll collect data for plain \parshape
+ \afterassignment\@beginParShape
+ \@linesleft
+}%
+\def\@beginParShape{%
+ \ifnum \@linesleft = 0
+ \let\@whatnext = \@endParShape
+ \else
+ \let\@whatnext = \@readnextline
+ \fi
+ \@whatnext
+}%
+\def\@endParShape{%
+ \global\parshape = \@numlines \@parshapedata
+}%
+\def\@readnextline#1 #2 #3 {% #1 #2 #3 are: m_i, leftskip_i, rightskip_i
+ \ifnum #1 > 0
+ \bgroup % I want to keep changes of \dimen0 and \count0 local
+ \dimen0 = \hsize
+ \advance \dimen0 by -#2 % \parshape requires left skip and
+ \advance \dimen0 by -#3 % _length_of_line_ (not right skip!)
+ \count0 = 0
+ \loop
+ \global\edef\@parshapedata{%
+ \@parshapedata % add to \@parshapedata:
+ #2 % left skip
+ \space % a space
+ \the\dimen0 % length of line
+ \space % another space
+ }%
+ \advance \count0 by 1
+ \ifnum \count0 < #1
+ \repeat
+ \egroup
+ \advance \@numlines by #1
+ \fi
+ \advance \@linesleft by -1
+ \@beginParShape
+}%
+%
+% \InsertBoxC, \InsertBoxL, \InsertBoxR
+%
+\newbox\@boxcontent % box containing the picture to be inserted
+\newcount\@numnormal % number of leading lines to typeset normally
+\newdimen\@framewidth % width of the frame
+\newdimen\@wherebottom % position of frame's bottom
+\newif\if@byframe % true if we are just beside the frame
+\@byframefalse
+%
+%
+\def\InsertBoxC#1{%
+ \leavevmode
+ \vadjust{
+ \vskip \@InsertBoxMargin
+ \hbox to \hsize{\hss#1\hss}
+ \vskip \@InsertBoxMargin
+ }%
+}%
+\def\InsertBoxL#1#2{%
+ \@numnormal = #1
+ \setbox\@boxcontent = \hbox{#2}%
+ \let\@side = 0
+ \futurelet \@optionalparameter \@InsertBox
+}
+\def\InsertBoxR#1#2{%
+ \@numnormal = #1
+ \setbox\@boxcontent = \hbox{#2}%
+ \let\@side = 1
+ \futurelet \@optionalparameter \@InsertBox
+}%
+\def\@InsertBox{%
+ \ifx \@optionalparameter [
+ \let\@whatnext = \@@InsertBoxCorrection
+ \else
+ \let\@whatnext = \@@InsertBoxNoCorrection
+ \fi
+ \@whatnext
+}%
+\def\@@InsertBoxCorrection[#1]{%
+ \ifx \@side 0
+ \@@InsertBox{#1}{0}{{\the\@framewidth} 0cm}%
+ \else
+ \@@InsertBox{#1}{1}{0cm {\the\@framewidth}}%
+ \fi
+}%
+\def\@@InsertBoxNoCorrection{%
+ \@@InsertBoxCorrection[0]%
+}%
+\def\@@InsertBox#1#2#3{%
+ \MoveBelowBox
+ \@byframetrue
+ % \@wherebottom = \pagetotal + (\@numnormal * \baselineskip) +
+ % (height of \@boxcontent) + (2 * \@InsertBoxMargin)
+ \@wherebottom = \baselineskip
+ \multiply \@wherebottom by \@numnormal
+ \advance \@wherebottom by 2\@InsertBoxMargin
+ \advance \@wherebottom by \ht\@boxcontent
+ \advance \@wherebottom by \pagetotal
+ % I have no idea why, but \InsertBox called at the top of a page
+ % calculates space for the box one line too big
+ \ifdim \pagetotal = 0cm
+ \advance \@wherebottom by -\baselineskip % ^ reduction
+ \fi
+ % add the correction
+ \advance \@wherebottom by #1\baselineskip
+ % \@framewidth = (width of \@boxcontent} + \@InsertboxMargin
+ \@framewidth = \wd\@boxcontent
+ \advance \@framewidth by \@InsertBoxMargin
+ %
+ \bgroup % to keep changes of \dimen0 local
+ % check if the box fits in the page
+ \ifdim \pagetotal = 0cm
+ \dimen0 = \vsize
+ \else
+ \dimen0 = \pagegoal
+ \fi
+ \ifdim \@wherebottom > \dimen0
+ % print a warning message ...
+ \immediate\write16{+--------------------------------------------------------------+}%
+ \immediate\write16{| The box will not fit in the page. Please, re-edit your text. |}%
+ \immediate\write16{+--------------------------------------------------------------+}%
+ % ... and mark this place in document with a black box
+ \vrule width \overfullrule
+ \fi
+ \egroup
+ \prevgraf = 0
+ % insert the box in the left (if #2 = 0) or in the right (if #2 = 1)
+ \vbox to 0cm{%
+ \dimen0 = \baselineskip
+ \multiply \dimen0 by \@numnormal
+ \advance \dimen0 by -\baselineskip
+ \setbox0 = \hbox{y}%
+ \vskip \dp0
+ \vskip \dimen0
+ \vskip \@InsertBoxMargin
+ \ifnum #2 = 1
+ \vtop{\noindent \hbox to \hsize{\hss \box\@boxcontent}}%
+ \else
+ \vtop{\noindent \box\@boxcontent}%
+ \fi
+ \vss
+ }%
+ % I have no idea why, but this is really necessary
+ \vglue -\parskip
+ \vskip -\baselineskip
+ % each following paragraph needs to be formatted properly
+ \everypar = {%
+ % are we already below the bottom of the box?
+ \ifdim \pagetotal < \@wherebottom
+ % no...
+ \bgroup % to keep some changes local
+ % let's calculate parameters for \ParShape
+ \dimen0 = \@wherebottom
+ \advance \dimen0 by -\pagetotal
+ \divide \dimen0 by \baselineskip
+ \count1 = \dimen0
+ \advance \count1 by 1
+ \advance \count1 by -\@numnormal
+ \ifnum #2 = 1
+ \ParShape = 3
+ {\the\@numnormal} 0cm 0cm
+ {\the\count1} 0cm {\the\@framewidth}
+ 1 0cm 0cm
+ \else
+ \ParShape = 3
+ {\the\@numnormal} 0cm 0cm
+ {\the\count1} {\the\@framewidth} 0cm
+ 1 0cm 0cm
+ \fi
+ \egroup
+ \else
+ % yes!
+ \@restore@ % it's time to end everything
+ \fi
+ }%
+ % this definition isn't very necessary --- just in case the paragraph
+ % following \InsertBoxL or \InsertBoxR has fewer lines that the
+ % first argument of the macro
+ \def\par{%
+ \endgraf
+ \global\advance \@numnormal by -\prevgraf
+ \ifnum \@numnormal < 0
+ \global\@numnormal = 0
+ \fi
+ \prevgraf = 0
+ }%
+}%
+%
+% call this macro to move the current position just below the
+% current frame
+%
+\def\MoveBelowBox{%
+ \par
+ \if@byframe
+ \global\advance \@wherebottom by -\pagetotal
+ \ifdim \@wherebottom > 0cm
+ \vskip \@wherebottom
+ \fi
+ \@restore@
+ \fi
+}%
+%
+% normal settings are as follows:
+%
+\def\@restore@{%
+ \global\@wherebottom = 0cm
+ \global\@byframefalse
+ \global\everypar = {}%
+ \global\let \par = \endgraf
+ \global\parshape = 1 0cm \hsize
+}%
+%
+% someone told me that in LaTeX there is no \pageno counter;
+% the counterpart is \c@page
+%
+\ifx \documentclass \@Dont@Know@What@It@Is@
+\else
+ \let \pageno = \c@page
+\fi
+
+
+\catcode`\@ = 12
diff --git a/macros/generic/insbox/pic1.eps b/macros/generic/insbox/pic1.eps
new file mode 100644
index 0000000000..fa51282625
--- /dev/null
+++ b/macros/generic/insbox/pic1.eps
@@ -0,0 +1,1113 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 102 557 287 678
+%%Creator: CorelDRAW 7
+%%Title:
+%%CreationDate: Mon May 26 16:04:28 1997
+%%DocumentProcessColors: Black
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+/AutoFlatness true def
+/AutoSteps 0 def
+/CMYKMarks false def
+/UseLevel2 false def
+%Color profile: _DEFAULT.CCM - Generic Profile
+%%BeginResource: procset wCorel7Dict 7.0 0
+/wCorel7Dict 300 dict def wCorel7Dict begin
+% Copyright (c)1992-96 Corel Corporation
+% All rights reserved. v7.0 r1.0
+/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
+bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
+/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
+bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
+false def/$Scra 0 def/SetScr/setscreen ld/setscreen{pop pop pop}bd/@ss{2 index
+0 eq{$dsf 3 1 roll 4 -1 roll pop}if exch $Scra add exch load SetScr}bd
+/SepMode_5 where{pop}{/SepMode_5 0 def}ifelse/CurrentInkName_5 where{pop}
+{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
+ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
+def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
+def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
+/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
+/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
+/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
+16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
+16#60/grave 16#7C/bar
+16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
+16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def
+/@BeginSysCorelDict{systemdict/Corel30Dict known{systemdict/Corel30Dict get
+exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known{end}if}bd AutoFlatness
+{/@ifl{dup currentflat exch sub 10 gt{
+([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
+@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
+{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
+{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
+/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
+bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
+bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
+{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
+/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
+ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
+/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
+bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
+exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
+sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
+/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
+/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
+ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
+/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
+dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
+copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
+/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
+{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
+if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
+load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
+{$dsa}ifelse $SCP @ss}if}bd/p{/$pm xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def}
+bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge{pop}{exch pop}ifelse}bd
+/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch rl neg 0 rl @cp}bd
+/currentscale{1 0 dtransform matrix defaultmatrix idtransform dup mul exch dup
+mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform dup mul exch dup
+mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll eq{1 add}if}bd
+/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1 exch sub}bd
+/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}repeat pop}bd
+/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1 roll sub neg
+exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index .114 mul add
+4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb/setrgbcolor ld/GetRgb
+/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray ld/SetRgb2 systemdict
+/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor get def/SetHsb
+systemdict/sethsbcolor get def/GetHsb systemdict/currenthsbcolor get def
+/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor sub 3 1 roll SetHsb
+GetRgb2}bd/setcmykcolor where{pop/SetCmyk_5/setcmykcolor ld}{/SetCmyk_5{
+cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{pop/GetCmyk/currentcmykcolor
+ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse/setoverprint where{pop}{/setoverprint{
+/$op xd}bd}ifelse/currentoverprint where{pop}{/currentoverprint{$op}bd}ifelse
+/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1 roll mul exch}repeat pop}ifelse}bd
+/@trp{exch pop 5 1 roll @tc_5}bd/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0
+4 $ink_5 sub index exch pop 5 1 roll pop pop pop pop SepsColor true eq{$ink_5 3
+gt{1 sub neg SetGry}{0 0 0 4 $ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}
+ifelse}ifelse}bd/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array
+astore}bd}ifelse/setcustomcolor where{pop}{/setcustomcolor{exch aload pop
+SepMode_5 0 eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}
+ifelse 6 1 roll 5 rp 1 sub neg SetGry}ifelse}bd}ifelse/@scc_5{dup type
+/booleantype eq{setoverprint}{1 eq setoverprint}ifelse dup _ eq{pop
+setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse SepMode_5
+0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage where{pop
+/ColorImage{colorimage}def}{/ColorImage{/ncolors xd pop/dataaq xd{dataaq
+ncolors dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index
+get 255 div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g
+255 mul cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv
+getinterval pop}{4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1
+index get 255 div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div
+$dat 4 index 3 add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1
+roll put}for $dat 0 $dat length ncolors idiv getinterval}if}ifelse}image}bd
+}ifelse/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
+/currentcmykcolor{0 0 0 0}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
+/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
+bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
+/currentgray{currentrgbcolor rgb2g}bd}ifelse/WaldoColor_5 true def/@sft{$tllx
+$pxf add dup $tllx gt{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt{$phei
+add}if/$ty xd}bd/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd/@ep{{cvx exec
+}forall}bd/@tp{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei sub
+$ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{/$in
+false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0 $phei
+rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3 index
+sub Tl matrix currentmatrix/$ctm xd @ep pop pop pop pop}{pop pop}ifelse @rs}bd
+/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{dup $llx gt{$pwid sub}{exit}
+ifelse}loop exch $phei mul $ty exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1
+roll add exch @tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul
+$tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop 0 1
+$tly 1 sub{$phei mul 3 copy sub @tp pop}for pop pop}for}bd/$fm 0 def/wfill{1
+$fm eq{fill}{eofill}ifelse}bd/wclip{1 $fm eq{clip}{eoclip}ifelse}bd/@pf{@gs
+$ctm setmatrix $pm concat @stb wclip Bburx Bbury $pm itransform/$tury xd/$turx
+xd Bbllx Bblly $pm itransform/$tlly xd/$tllx xd/$wid $turx $tllx sub def/$hei
+$tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{$t $c $m $y $k
+$n $o @scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei scale <00> 8 1
+false[8 0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse @gr $wid 0 gt
+$hei 0 gt and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd exch sub
+/$pwid xd $wid $pwid div ceiling 1 add/$tlx xd $hei $phei div ceiling 1 add
+/$tly xd $psx 0 eq{@tv}{@th}ifelse}if @gr @np/$bkg false def}bd/@Pf{@sv
+SepMode_5 0 eq $Psc 0 ne or $ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o
+@scc_5 pop $ctm setmatrix 72 1000 div dup matrix scale dup concat dup Bburx
+exch Bbury exch itransform ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch
+Bblly exch itransform floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn
+load exec}{1 SetGry wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf
+$sca $scp @ss}if $fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n
+$o @scc_5{wfill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA
+$SCP @ss}if $T $C $M $Y $K $N $O @scc_5{matrix currentmatrix $ptm concat stroke
+setmatrix}{@np}ifelse $SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs
+F @gr S}bd/b{@cp B}bd/_E{5 array astore exch cvlit xd}bd/@cc{currentfile $dat
+readhexstring pop}bd/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true
+def}{@gs $t $c $m $y $k $n $o @scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd
+/$pyf xd/$pxf xd/$pn xd}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd
+}bd/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
+index 3 index l clip pop pop pop pop}bd/tcc{@cc}def/@i{@sm @gs @ii 6 index 1 ne
+{/$frg true def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg
+false def}ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd
+/$lly xd/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi
+string def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub
+$ury $lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts
+1 eq{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load
+$bts 1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
+repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div
+ceiling cvi string def $ngx $llx $lly Tl $urx $llx sub $ury $lly sub scale $wid
+$hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/@cc load false $ncl
+ColorImage $SDF{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/COMP 0 def L2?{
+/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd
+/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def $ngx $ncl 1
+eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace
+$llx $lly Tl $urx $llx sub $ury $lly sub scale 8 dict begin/ImageType 1 def
+/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1 eq
+{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
+/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
+currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq
+{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
+$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@B{@gs S @gr F}bd/@b{@cp @B
+}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}{CurrentInkName_5(Cyan)
+eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1 def}{CurrentInkName_5
+(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq{/$ink_5 3 def}{/$ink_5 4
+def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs -72000 dup m -72000 72000 l
+72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}bd/@neg{[{1 exch sub}/exec cvx
+currenttransfer/exec cvx]cvx settransfer @whi}bd/deflevel 0 def/@sax{/deflevel
+deflevel 1 add def}bd/@eax{/deflevel deflevel dup 0 gt{1 sub}if def deflevel 0
+gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}bd/@rax{deflevel 0 eq{@rs @sv}if}
+bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd 12 index 1 gt
+UseLevel2 true eq and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}
+{7 -2 roll pop pop @I}ifelse}ifelse}bd systemdict/pdfmark known not{/pdfmark
+/cleartomark ld}if
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+wCorel7Dict begin
+@BeginSysCorelDict
+2.6131 setmiterlimit
+1.00 setflat
+/$fst 128 def
+%%EndSetup
+
+%%Page: 1 1
+%LogicalPage: 1
+%%BeginPageSetup
+@sv
+@sm
+@sv
+%%EndPageSetup
+@rax %Note: Object
+159.25124 559.58542 162.92324 565.41742 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+160.76324 565.41742 m
+161.12324 565.34542 L
+161.48324 565.27342 L
+161.84324 565.12942 L
+162.13124 564.98542 L
+162.34724 564.69742 L
+162.49124 564.48142 L
+162.56324 564.19342 L
+162.56324 563.90542 L
+162.56324 563.76142 L
+162.56324 563.54542 L
+162.49124 563.32942 L
+162.41924 563.18542 L
+162.34724 563.04142 L
+162.27524 562.89742 L
+162.13124 562.82542 L
+161.98724 562.68142 L
+162.20324 562.53742 L
+162.41924 562.39342 L
+162.56324 562.17742 L
+162.70724 562.03342 L
+162.77924 561.81742 L
+162.85124 561.60142 L
+162.92324 561.38542 L
+162.92324 561.09742 L
+162.92324 560.80942 L
+162.77924 560.52142 L
+162.63524 560.30542 L
+162.41924 560.08942 L
+162.13124 559.87342 L
+161.84324 559.72942 L
+161.48324 559.58542 L
+161.05124 559.58542 L
+159.25124 559.58542 L
+159.25124 565.41742 L
+160.76324 565.41742 L
+@c
+159.75524 564.84142 m
+159.75524 562.82542 L
+160.76324 562.82542 L
+160.97924 562.82542 L
+161.19524 562.89742 L
+161.41124 562.96942 L
+161.62724 563.04142 L
+161.84324 563.18542 L
+161.98724 563.40142 L
+162.05924 563.61742 L
+162.05924 563.90542 L
+162.05924 564.19342 L
+161.98724 564.40942 L
+161.84324 564.55342 L
+161.62724 564.62542 L
+161.48324 564.69742 L
+161.26724 564.76942 L
+161.05124 564.84142 L
+160.76324 564.84142 L
+159.75524 564.84142 L
+@c
+159.75524 562.32142 m
+159.75524 560.08942 L
+160.83524 560.08942 L
+161.19524 560.08942 L
+161.48324 560.08942 L
+161.77124 560.16142 L
+161.98724 560.30542 L
+162.13124 560.52142 L
+162.27524 560.73742 L
+162.34724 560.95342 L
+162.34724 561.24142 L
+162.34724 561.52942 L
+162.27524 561.74542 L
+162.13124 561.88942 L
+161.91524 562.03342 L
+161.69924 562.17742 L
+161.41124 562.24942 L
+161.12324 562.32142 L
+160.76324 562.32142 L
+159.75524 562.32142 L
+@c
+F
+
+@rax %Note: Object
+224.62724 558.28942 230.89124 564.76942 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+224.62724 561.88942 m
+224.77124 562.53742 L
+224.98724 563.11342 L
+225.34724 563.54542 L
+225.77924 563.97742 L
+225.99524 564.19342 L
+226.21124 564.33742 L
+226.49924 564.48142 L
+226.78724 564.62542 L
+227.00324 564.69742 L
+227.29124 564.69742 L
+227.65124 564.76942 L
+227.93924 564.76942 L
+228.37124 564.76942 L
+228.80324 564.69742 L
+229.23524 564.55342 L
+229.59524 564.40942 L
+230.02724 564.12142 L
+230.38724 563.83342 L
+230.67524 563.47342 L
+230.89124 563.04142 L
+230.17124 563.04142 L
+229.95524 563.32942 L
+229.73924 563.54542 L
+229.45124 563.68942 L
+229.16324 563.83342 L
+228.94724 563.97742 L
+228.58724 564.04942 L
+228.29924 564.12142 L
+227.93924 564.12142 L
+227.43524 564.04942 L
+226.93124 563.97742 L
+226.49924 563.76142 L
+226.13924 563.40142 L
+225.70724 562.96942 L
+225.49124 562.53742 L
+225.34724 561.96142 L
+225.27524 561.45742 L
+225.34724 560.88142 L
+225.49124 560.37742 L
+225.70724 559.94542 L
+226.13924 559.51342 L
+226.49924 559.22542 L
+226.93124 559.00942 L
+227.43524 558.86542 L
+227.93924 558.79342 L
+228.29924 558.79342 L
+228.58724 558.86542 L
+228.94724 558.93742 L
+229.16324 559.08142 L
+229.45124 559.22542 L
+229.73924 559.44142 L
+229.95524 559.65742 L
+230.17124 559.94542 L
+230.89124 559.94542 L
+230.67524 559.51342 L
+230.38724 559.15342 L
+230.02724 558.86542 L
+229.59524 558.57742 L
+229.23524 558.43342 L
+228.80324 558.36142 L
+228.37124 558.28942 L
+227.93924 558.28942 L
+227.65124 558.28942 L
+227.29124 558.36142 L
+227.00324 558.36142 L
+226.71524 558.50542 L
+226.42724 558.57742 L
+226.13924 558.72142 L
+225.85124 558.93742 L
+225.63524 559.15342 L
+225.20324 559.65742 L
+224.91524 560.16142 L
+224.69924 560.80942 L
+224.62724 561.52942 L
+224.62724 561.88942 L
+@c
+F
+
+@rax %Note: Object
+103.23524 567.36085 286.76324 567.36198 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+103.23524 567.36142 m
+286.76324 567.36142 L
+S
+
+@rax %Note: Object
+161.19524 567.28942 227.72324 669.09742 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+227.72324 567.28942 m
+195.03524 669.09742 L
+161.19524 567.57742 L
+195.53924 592.56142 L
+227.72324 567.28942 L
+S
+
+@rax %Note: Object
+140.81924 567.14542 167.09924 587.44942 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+140.81924 567.14542 m
+140.81924 567.14542 L
+140.89124 569.23342 L
+141.25124 571.24942 L
+141.75524 573.19342 L
+142.40324 574.99342 L
+143.26724 576.79342 L
+144.27524 578.44942 L
+145.42724 580.03342 L
+146.79524 581.47342 L
+148.23524 582.76942 L
+149.74724 583.99342 L
+151.40324 585.00142 L
+153.20324 585.86542 L
+155.07524 586.51342 L
+157.01924 587.01742 L
+159.03524 587.37742 L
+161.12324 587.44942 L
+161.12324 587.44942 L
+161.91524 587.44942 L
+162.63524 587.37742 L
+163.42724 587.30542 L
+164.14724 587.23342 L
+164.93924 587.08942 L
+165.65924 586.94542 L
+166.37924 586.80142 L
+167.09924 586.58542 L
+S
+
+@rax %Note: Object
+221.45924 567.57742 246.65924 587.73742 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+221.45924 587.16142 m
+221.45924 587.16142 L
+222.17924 587.37742 L
+222.82724 587.52142 L
+223.54724 587.59342 L
+224.19524 587.66542 L
+224.84324 587.73742 L
+225.56324 587.73742 L
+226.28324 587.73742 L
+227.07524 587.73742 L
+227.07524 587.73742 L
+229.16324 587.66542 L
+231.10724 587.30542 L
+233.05124 586.87342 L
+234.85124 586.15342 L
+236.57924 585.28942 L
+238.16324 584.35342 L
+239.67524 583.20142 L
+241.04324 581.90542 L
+242.26724 580.46542 L
+243.41924 578.88142 L
+244.35524 577.22542 L
+245.14724 575.49742 L
+245.79524 573.62542 L
+246.29924 571.68142 L
+246.58724 569.66542 L
+246.65924 567.57742 L
+S
+
+@rax %Note: Object
+169.40324 567.36142 171.77924 573.76942 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+169.40324 573.76942 m
+169.40324 573.76942 L
+169.97924 573.04942 L
+170.48324 572.32942 L
+170.91524 571.60942 L
+171.20324 570.81742 L
+171.49124 570.02542 L
+171.63524 569.23342 L
+171.77924 568.29742 L
+171.77924 567.36142 L
+S
+
+@rax %Note: Object
+216.63524 567.28942 218.72324 574.27342 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+216.63524 567.28942 m
+216.63524 567.28942 L
+216.70724 569.23342 L
+217.06724 571.10542 L
+217.71524 572.76142 L
+218.72324 574.27342 L
+S
+
+@rax %Note: Object
+128.79524 566.64142 130.16324 568.15342 @E
+ 0 O 0 @g
+0.84 0.74 0.71 0.64 k
+/$fm 0 def
+129.51524 568.15342 m
+129.73124 568.08142 L
+129.94724 567.93742 L
+130.09124 567.64942 L
+130.16324 567.36142 L
+130.09124 567.07342 L
+129.94724 566.85742 L
+129.73124 566.71342 L
+129.51524 566.64142 L
+129.22724 566.71342 L
+129.01124 566.85742 L
+128.86724 567.07342 L
+128.79524 567.36142 L
+128.86724 567.64942 L
+129.01124 567.93742 L
+129.22724 568.08142 L
+129.51524 568.15342 L
+@c
+F
+
+@rax %Note: Object
+128.79524 566.64142 130.16324 568.15342 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+129.51524 568.15342 m
+129.51524 568.15342 L
+129.73124 568.08142 L
+129.94724 567.93742 L
+130.09124 567.64942 L
+130.16324 567.36142 L
+130.16324 567.36142 L
+130.09124 567.07342 L
+129.94724 566.85742 L
+129.73124 566.71342 L
+129.51524 566.64142 L
+129.51524 566.64142 L
+129.22724 566.71342 L
+129.01124 566.85742 L
+128.86724 567.07342 L
+128.79524 567.36142 L
+128.79524 567.36142 L
+128.86724 567.64942 L
+129.01124 567.93742 L
+129.22724 568.08142 L
+129.51524 568.15342 L
+S
+
+@rax %Note: Object
+194.96324 590.97742 196.40324 592.41742 @E
+ 0 O 0 @g
+0.84 0.74 0.71 0.64 k
+/$fm 0 def
+195.68324 592.41742 m
+195.97124 592.34542 L
+196.18724 592.20142 L
+196.33124 591.98542 L
+196.40324 591.69742 L
+196.33124 591.40942 L
+196.18724 591.19342 L
+195.97124 591.04942 L
+195.68324 590.97742 L
+195.39524 591.04942 L
+195.17924 591.19342 L
+195.03524 591.40942 L
+194.96324 591.69742 L
+195.03524 591.98542 L
+195.17924 592.20142 L
+195.39524 592.34542 L
+195.68324 592.41742 L
+@c
+F
+
+@rax %Note: Object
+194.96324 590.97742 196.40324 592.41742 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+195.68324 592.41742 m
+195.68324 592.41742 L
+195.97124 592.34542 L
+196.18724 592.20142 L
+196.33124 591.98542 L
+196.40324 591.69742 L
+196.40324 591.69742 L
+196.33124 591.40942 L
+196.18724 591.19342 L
+195.97124 591.04942 L
+195.68324 590.97742 L
+195.68324 590.97742 L
+195.39524 591.04942 L
+195.17924 591.19342 L
+195.03524 591.40942 L
+194.96324 591.69742 L
+194.96324 591.69742 L
+195.03524 591.98542 L
+195.17924 592.20142 L
+195.39524 592.34542 L
+195.68324 592.41742 L
+S
+
+@rax %Note: Object
+258.53924 566.56942 259.90724 568.00942 @E
+ 0 O 0 @g
+0.84 0.74 0.71 0.64 k
+/$fm 0 def
+259.25924 568.00942 m
+259.47524 567.93742 L
+259.69124 567.79342 L
+259.83524 567.57742 L
+259.90724 567.28942 L
+259.83524 567.00142 L
+259.69124 566.78542 L
+259.47524 566.64142 L
+259.25924 566.56942 L
+258.97124 566.64142 L
+258.75524 566.78542 L
+258.61124 567.00142 L
+258.53924 567.28942 L
+258.61124 567.57742 L
+258.75524 567.79342 L
+258.97124 567.93742 L
+259.25924 568.00942 L
+@c
+F
+
+@rax %Note: Object
+258.53924 566.56942 259.90724 568.00942 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+259.25924 568.00942 m
+259.25924 568.00942 L
+259.47524 567.93742 L
+259.69124 567.79342 L
+259.83524 567.57742 L
+259.90724 567.28942 L
+259.90724 567.28942 L
+259.83524 567.00142 L
+259.69124 566.78542 L
+259.47524 566.64142 L
+259.25924 566.56942 L
+259.25924 566.56942 L
+258.97124 566.64142 L
+258.75524 566.78542 L
+258.61124 567.00142 L
+258.53924 567.28942 L
+258.53924 567.28942 L
+258.61124 567.57742 L
+258.75524 567.79342 L
+258.97124 567.93742 L
+259.25924 568.00942 L
+S
+
+@rax %Note: Object
+160.33124 566.78542 161.77124 568.22542 @E
+ 0 O 0 @g
+0.84 0.74 0.71 0.64 k
+/$fm 0 def
+161.05124 568.22542 m
+161.33924 568.15342 L
+161.55524 568.00942 L
+161.69924 567.79342 L
+161.77124 567.50542 L
+161.69924 567.21742 L
+161.55524 567.00142 L
+161.33924 566.85742 L
+161.05124 566.78542 L
+160.76324 566.85742 L
+160.54724 567.00142 L
+160.40324 567.21742 L
+160.33124 567.50542 L
+160.40324 567.79342 L
+160.54724 568.00942 L
+160.76324 568.15342 L
+161.05124 568.22542 L
+@c
+F
+
+@rax %Note: Object
+160.33124 566.78542 161.77124 568.22542 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+161.05124 568.22542 m
+161.05124 568.22542 L
+161.33924 568.15342 L
+161.55524 568.00942 L
+161.69924 567.79342 L
+161.77124 567.50542 L
+161.77124 567.50542 L
+161.69924 567.21742 L
+161.55524 567.00142 L
+161.33924 566.85742 L
+161.05124 566.78542 L
+161.05124 566.78542 L
+160.76324 566.85742 L
+160.54724 567.00142 L
+160.40324 567.21742 L
+160.33124 567.50542 L
+160.33124 567.50542 L
+160.40324 567.79342 L
+160.54724 568.00942 L
+160.76324 568.15342 L
+161.05124 568.22542 L
+S
+
+@rax %Note: Object
+194.24324 668.80942 195.68324 670.17742 @E
+ 0 O 0 @g
+0.84 0.74 0.71 0.64 k
+/$fm 0 def
+194.96324 670.17742 m
+195.25124 670.10542 L
+195.46724 669.96142 L
+195.61124 669.81742 L
+195.68324 669.52942 L
+195.61124 669.24142 L
+195.46724 669.02542 L
+195.25124 668.88142 L
+194.96324 668.80942 L
+194.67524 668.88142 L
+194.45924 669.02542 L
+194.31524 669.24142 L
+194.24324 669.52942 L
+194.31524 669.81742 L
+194.45924 669.96142 L
+194.67524 670.10542 L
+194.96324 670.17742 L
+@c
+F
+
+@rax %Note: Object
+194.24324 668.80942 195.68324 670.17742 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+194.96324 670.17742 m
+194.96324 670.17742 L
+195.25124 670.10542 L
+195.46724 669.96142 L
+195.61124 669.81742 L
+195.68324 669.52942 L
+195.68324 669.52942 L
+195.61124 669.24142 L
+195.46724 669.02542 L
+195.25124 668.88142 L
+194.96324 668.80942 L
+194.96324 668.80942 L
+194.67524 668.88142 L
+194.45924 669.02542 L
+194.31524 669.24142 L
+194.24324 669.52942 L
+194.24324 669.52942 L
+194.31524 669.81742 L
+194.45924 669.96142 L
+194.67524 670.10542 L
+194.96324 670.17742 L
+S
+
+@rax %Note: Object
+226.93124 566.64142 228.37124 568.15342 @E
+ 0 O 0 @g
+0.84 0.74 0.71 0.64 k
+/$fm 0 def
+227.65124 568.15342 m
+227.93924 568.08142 L
+228.15524 567.93742 L
+228.29924 567.64942 L
+228.37124 567.36142 L
+228.29924 567.07342 L
+228.15524 566.85742 L
+227.93924 566.71342 L
+227.65124 566.64142 L
+227.36324 566.71342 L
+227.14724 566.85742 L
+227.00324 567.07342 L
+226.93124 567.36142 L
+227.00324 567.64942 L
+227.14724 567.93742 L
+227.36324 568.08142 L
+227.65124 568.15342 L
+@c
+F
+
+@rax %Note: Object
+226.93124 566.64142 228.37124 568.15342 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+227.65124 568.15342 m
+227.65124 568.15342 L
+227.93924 568.08142 L
+228.15524 567.93742 L
+228.29924 567.64942 L
+228.37124 567.36142 L
+228.37124 567.36142 L
+228.29924 567.07342 L
+228.15524 566.85742 L
+227.93924 566.71342 L
+227.65124 566.64142 L
+227.65124 566.64142 L
+227.36324 566.71342 L
+227.14724 566.85742 L
+227.00324 567.07342 L
+226.93124 567.36142 L
+226.93124 567.36142 L
+227.00324 567.64942 L
+227.14724 567.93742 L
+227.36324 568.08142 L
+227.65124 568.15342 L
+S
+
+@rax %Note: Object
+191.79524 670.53742 198.20324 677.23342 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+194.60324 677.23342 m
+195.39524 677.23342 L
+198.20324 670.53742 L
+197.48324 670.53742 L
+196.47524 672.69742 L
+193.45124 672.69742 L
+192.51524 670.53742 L
+191.79524 670.53742 L
+194.60324 677.23342 L
+@c
+194.96324 676.36942 m
+193.66724 673.34542 L
+196.33124 673.34542 L
+194.96324 676.36942 L
+@c
+F
+
+@rax %Note: Object
+128.07524 569.08942 132.32324 575.42542 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+128.07524 569.08942 m
+128.07524 575.42542 L
+129.73124 575.42542 L
+130.30724 575.42542 L
+130.81124 575.35342 L
+131.24324 575.28142 L
+131.53124 575.13742 L
+131.89124 574.84942 L
+132.10724 574.48942 L
+132.25124 574.12942 L
+132.32324 573.62542 L
+132.32324 573.48142 L
+132.25124 573.04942 L
+132.17924 572.68942 L
+131.96324 572.40142 L
+131.67524 572.11342 L
+131.38724 571.89742 L
+131.02724 571.75342 L
+130.59524 571.68142 L
+130.09124 571.60942 L
+128.72324 571.60942 L
+128.72324 569.08942 L
+128.07524 569.08942 L
+@c
+128.72324 574.92142 m
+128.72324 572.11342 L
+130.01924 572.11342 L
+130.45124 572.18542 L
+130.81124 572.25742 L
+131.09924 572.40142 L
+131.31524 572.61742 L
+131.45924 572.83342 L
+131.60324 573.04942 L
+131.67524 573.33742 L
+131.67524 573.62542 L
+131.67524 573.91342 L
+131.53124 574.27342 L
+131.38724 574.48942 L
+131.17124 574.63342 L
+130.88324 574.70542 L
+130.59524 574.84942 L
+130.23524 574.92142 L
+129.80324 574.92142 L
+128.72324 574.92142 L
+@c
+F
+
+@rax %Note: Object
+255.58724 569.08942 262.13924 575.28142 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+255.65924 572.68942 m
+255.80324 573.26542 L
+256.09124 573.84142 L
+256.45124 574.27342 L
+256.88324 574.63342 L
+257.31524 574.92142 L
+257.81924 575.06542 L
+258.32324 575.20942 L
+258.82724 575.28142 L
+259.11524 575.28142 L
+259.47524 575.20942 L
+259.76324 575.13742 L
+260.05124 575.06542 L
+260.33924 574.99342 L
+260.55524 574.84942 L
+260.84324 574.63342 L
+261.13124 574.48942 L
+261.56324 574.05742 L
+261.85124 573.55342 L
+262.06724 572.97742 L
+262.13924 572.25742 L
+262.13924 571.96942 L
+262.13924 571.68142 L
+262.13924 571.32142 L
+262.06724 571.03342 L
+261.92324 570.81742 L
+261.77924 570.52942 L
+261.63524 570.24142 L
+261.41924 570.02542 L
+261.20324 569.80942 L
+261.20324 569.73742 L
+261.27524 569.73742 L
+261.41924 569.66542 L
+261.49124 569.59342 L
+261.63524 569.52142 L
+261.70724 569.52142 L
+261.85124 569.52142 L
+261.92324 569.52142 L
+261.92324 569.52142 L
+261.99524 569.52142 L
+262.06724 569.52142 L
+262.13924 569.52142 L
+262.13924 569.08942 L
+261.85124 569.08942 L
+261.63524 569.08942 L
+261.41924 569.08942 L
+261.27524 569.08942 L
+261.13124 569.16142 L
+260.98724 569.23342 L
+260.84324 569.30542 L
+260.69924 569.44942 L
+260.41124 569.30542 L
+260.19524 569.16142 L
+259.97924 569.08942 L
+259.76324 569.08942 L
+259.47524 569.08942 L
+259.25924 569.08942 L
+259.04324 569.08942 L
+258.82724 569.08942 L
+258.46724 569.08942 L
+258.17924 569.08942 L
+257.81924 569.16142 L
+257.53124 569.23342 L
+257.24324 569.37742 L
+257.02724 569.52142 L
+256.73924 569.73742 L
+256.52324 569.95342 L
+256.09124 570.45742 L
+255.80324 570.96142 L
+255.65924 571.53742 L
+255.58724 572.11342 L
+255.58724 572.25742 L
+255.58724 572.40142 L
+255.58724 572.54542 L
+255.65924 572.68942 L
+@c
+256.30724 571.39342 m
+256.66724 571.46542 L
+256.95524 571.53742 L
+257.31524 571.60942 L
+257.60324 571.60942 L
+258.03524 571.60942 L
+258.46724 571.53742 L
+258.82724 571.39342 L
+259.25924 571.24942 L
+259.61924 571.03342 L
+259.97924 570.81742 L
+260.33924 570.52942 L
+260.69924 570.16942 L
+260.91524 570.38542 L
+261.13124 570.67342 L
+261.20324 570.88942 L
+261.34724 571.10542 L
+261.41924 571.32142 L
+261.49124 571.53742 L
+261.56324 571.75342 L
+261.56324 571.96942 L
+261.56324 572.11342 L
+261.56324 572.32942 L
+261.49124 572.47342 L
+261.49124 572.61742 L
+261.34724 573.04942 L
+261.20324 573.48142 L
+260.98724 573.84142 L
+260.62724 574.12942 L
+260.26724 574.34542 L
+259.83524 574.56142 L
+259.33124 574.63342 L
+258.82724 574.70542 L
+258.32324 574.63342 L
+257.81924 574.56142 L
+257.38724 574.34542 L
+256.95524 573.98542 L
+256.59524 573.55342 L
+256.37924 573.12142 L
+256.23524 572.54542 L
+256.16324 572.04142 L
+256.16324 571.96942 L
+256.16324 571.89742 L
+256.16324 571.75342 L
+256.23524 571.68142 L
+256.23524 571.60942 L
+256.30724 571.46542 L
+256.30724 571.39342 L
+256.30724 571.39342 L
+@c
+256.59524 570.88942 m
+256.81124 570.52942 L
+257.02724 570.24142 L
+257.31524 570.02542 L
+257.60324 569.80942 L
+257.89124 569.66542 L
+258.25124 569.59342 L
+258.53924 569.52142 L
+258.89924 569.52142 L
+259.04324 569.52142 L
+259.25924 569.52142 L
+259.40324 569.52142 L
+259.54724 569.59342 L
+259.76324 569.66542 L
+259.90724 569.73742 L
+260.12324 569.80942 L
+260.26724 569.95342 L
+259.97924 570.16942 L
+259.61924 570.38542 L
+259.33124 570.60142 L
+258.97124 570.74542 L
+258.61124 570.81742 L
+258.25124 570.96142 L
+257.89124 571.03342 L
+257.60324 571.03342 L
+257.31524 571.03342 L
+257.02724 570.96142 L
+256.81124 570.96142 L
+256.59524 570.88942 L
+@c
+F
+
+@rax %Note: Object
+151.90724 574.27342 156.01124 579.02542 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+151.90724 574.27342 m
+153.56324 576.72142 L
+151.90724 579.02542 L
+152.69924 579.02542 L
+153.99524 577.22542 L
+155.29124 579.02542 L
+156.01124 579.02542 L
+154.35524 576.72142 L
+156.01124 574.27342 L
+155.29124 574.27342 L
+153.99524 576.14542 L
+152.69924 574.27342 L
+151.90724 574.27342 L
+@c
+F
+
+@rax %Note: Object
+230.81924 571.68142 235.78724 578.73742 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+232.83524 573.62542 m
+230.81924 578.73742 L
+231.53924 578.66542 L
+233.33924 574.48942 L
+235.06724 578.73742 L
+235.78724 578.73742 L
+232.76324 571.68142 L
+231.97124 571.68142 L
+232.83524 573.62542 L
+@c
+F
+
+%%PageTrailer
+@rs
+@rs
+%%Trailer
+@EndSysCorelDict
+end
+%%DocumentSuppliedResources: procset wCorel7Dict
+%%EOF
diff --git a/macros/generic/insbox/pic2.eps b/macros/generic/insbox/pic2.eps
new file mode 100644
index 0000000000..e19e8be0f6
--- /dev/null
+++ b/macros/generic/insbox/pic2.eps
@@ -0,0 +1,906 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 144 462 316 553
+%%Creator: CorelDRAW 7
+%%Title:
+%%CreationDate: Mon May 26 16:00:20 1997
+%%DocumentProcessColors: Black
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+/AutoFlatness true def
+/AutoSteps 0 def
+/CMYKMarks false def
+/UseLevel2 false def
+%Color profile: _DEFAULT.CCM - Generic Profile
+%%BeginResource: procset wCorel7Dict 7.0 0
+/wCorel7Dict 300 dict def wCorel7Dict begin
+% Copyright (c)1992-96 Corel Corporation
+% All rights reserved. v7.0 r1.0
+/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
+bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
+/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
+bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
+false def/$Scra 0 def/SetScr/setscreen ld/setscreen{pop pop pop}bd/@ss{2 index
+0 eq{$dsf 3 1 roll 4 -1 roll pop}if exch $Scra add exch load SetScr}bd
+/SepMode_5 where{pop}{/SepMode_5 0 def}ifelse/CurrentInkName_5 where{pop}
+{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
+ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
+def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
+def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
+/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
+/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
+/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
+16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
+16#60/grave 16#7C/bar
+16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
+16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def
+/@BeginSysCorelDict{systemdict/Corel30Dict known{systemdict/Corel30Dict get
+exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known{end}if}bd AutoFlatness
+{/@ifl{dup currentflat exch sub 10 gt{
+([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
+@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
+{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
+{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
+/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
+bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
+bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
+{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
+/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
+ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
+/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
+bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
+exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
+sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
+/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
+/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
+ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
+/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
+dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
+copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
+/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
+{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
+if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
+load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
+{$dsa}ifelse $SCP @ss}if}bd/p{/$pm xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def}
+bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge{pop}{exch pop}ifelse}bd
+/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch rl neg 0 rl @cp}bd
+/currentscale{1 0 dtransform matrix defaultmatrix idtransform dup mul exch dup
+mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform dup mul exch dup
+mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll eq{1 add}if}bd
+/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1 exch sub}bd
+/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}repeat pop}bd
+/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1 roll sub neg
+exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index .114 mul add
+4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb/setrgbcolor ld/GetRgb
+/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray ld/SetRgb2 systemdict
+/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor get def/SetHsb
+systemdict/sethsbcolor get def/GetHsb systemdict/currenthsbcolor get def
+/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor sub 3 1 roll SetHsb
+GetRgb2}bd/setcmykcolor where{pop/SetCmyk_5/setcmykcolor ld}{/SetCmyk_5{
+cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{pop/GetCmyk/currentcmykcolor
+ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse/setoverprint where{pop}{/setoverprint{
+/$op xd}bd}ifelse/currentoverprint where{pop}{/currentoverprint{$op}bd}ifelse
+/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1 roll mul exch}repeat pop}ifelse}bd
+/@trp{exch pop 5 1 roll @tc_5}bd/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0
+4 $ink_5 sub index exch pop 5 1 roll pop pop pop pop SepsColor true eq{$ink_5 3
+gt{1 sub neg SetGry}{0 0 0 4 $ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}
+ifelse}ifelse}bd/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array
+astore}bd}ifelse/setcustomcolor where{pop}{/setcustomcolor{exch aload pop
+SepMode_5 0 eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}
+ifelse 6 1 roll 5 rp 1 sub neg SetGry}ifelse}bd}ifelse/@scc_5{dup type
+/booleantype eq{setoverprint}{1 eq setoverprint}ifelse dup _ eq{pop
+setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse SepMode_5
+0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage where{pop
+/ColorImage{colorimage}def}{/ColorImage{/ncolors xd pop/dataaq xd{dataaq
+ncolors dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index
+get 255 div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g
+255 mul cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv
+getinterval pop}{4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1
+index get 255 div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div
+$dat 4 index 3 add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1
+roll put}for $dat 0 $dat length ncolors idiv getinterval}if}ifelse}image}bd
+}ifelse/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
+/currentcmykcolor{0 0 0 0}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
+/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
+bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
+/currentgray{currentrgbcolor rgb2g}bd}ifelse/WaldoColor_5 true def/@sft{$tllx
+$pxf add dup $tllx gt{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt{$phei
+add}if/$ty xd}bd/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd/@ep{{cvx exec
+}forall}bd/@tp{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei sub
+$ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{/$in
+false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0 $phei
+rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3 index
+sub Tl matrix currentmatrix/$ctm xd @ep pop pop pop pop}{pop pop}ifelse @rs}bd
+/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{dup $llx gt{$pwid sub}{exit}
+ifelse}loop exch $phei mul $ty exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1
+roll add exch @tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul
+$tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop 0 1
+$tly 1 sub{$phei mul 3 copy sub @tp pop}for pop pop}for}bd/$fm 0 def/wfill{1
+$fm eq{fill}{eofill}ifelse}bd/wclip{1 $fm eq{clip}{eoclip}ifelse}bd/@pf{@gs
+$ctm setmatrix $pm concat @stb wclip Bburx Bbury $pm itransform/$tury xd/$turx
+xd Bbllx Bblly $pm itransform/$tlly xd/$tllx xd/$wid $turx $tllx sub def/$hei
+$tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{$t $c $m $y $k
+$n $o @scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei scale <00> 8 1
+false[8 0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse @gr $wid 0 gt
+$hei 0 gt and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd exch sub
+/$pwid xd $wid $pwid div ceiling 1 add/$tlx xd $hei $phei div ceiling 1 add
+/$tly xd $psx 0 eq{@tv}{@th}ifelse}if @gr @np/$bkg false def}bd/@Pf{@sv
+SepMode_5 0 eq $Psc 0 ne or $ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o
+@scc_5 pop $ctm setmatrix 72 1000 div dup matrix scale dup concat dup Bburx
+exch Bbury exch itransform ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch
+Bblly exch itransform floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn
+load exec}{1 SetGry wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf
+$sca $scp @ss}if $fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n
+$o @scc_5{wfill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA
+$SCP @ss}if $T $C $M $Y $K $N $O @scc_5{matrix currentmatrix $ptm concat stroke
+setmatrix}{@np}ifelse $SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs
+F @gr S}bd/b{@cp B}bd/_E{5 array astore exch cvlit xd}bd/@cc{currentfile $dat
+readhexstring pop}bd/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true
+def}{@gs $t $c $m $y $k $n $o @scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd
+/$pyf xd/$pxf xd/$pn xd}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd
+}bd/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
+index 3 index l clip pop pop pop pop}bd/tcc{@cc}def/@i{@sm @gs @ii 6 index 1 ne
+{/$frg true def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg
+false def}ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd
+/$lly xd/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi
+string def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub
+$ury $lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts
+1 eq{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load
+$bts 1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
+repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div
+ceiling cvi string def $ngx $llx $lly Tl $urx $llx sub $ury $lly sub scale $wid
+$hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/@cc load false $ncl
+ColorImage $SDF{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/COMP 0 def L2?{
+/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd
+/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def $ngx $ncl 1
+eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace
+$llx $lly Tl $urx $llx sub $ury $lly sub scale 8 dict begin/ImageType 1 def
+/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1 eq
+{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
+/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
+currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq
+{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
+$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@B{@gs S @gr F}bd/@b{@cp @B
+}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}{CurrentInkName_5(Cyan)
+eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1 def}{CurrentInkName_5
+(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq{/$ink_5 3 def}{/$ink_5 4
+def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs -72000 dup m -72000 72000 l
+72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}bd/@neg{[{1 exch sub}/exec cvx
+currenttransfer/exec cvx]cvx settransfer @whi}bd/deflevel 0 def/@sax{/deflevel
+deflevel 1 add def}bd/@eax{/deflevel deflevel dup 0 gt{1 sub}if def deflevel 0
+gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}bd/@rax{deflevel 0 eq{@rs @sv}if}
+bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd 12 index 1 gt
+UseLevel2 true eq and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}
+{7 -2 roll pop pop @I}ifelse}ifelse}bd systemdict/pdfmark known not{/pdfmark
+/cleartomark ld}if
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+wCorel7Dict begin
+@BeginSysCorelDict
+2.6131 setmiterlimit
+1.00 setflat
+/$fst 128 def
+%%EndSetup
+
+%%Page: 1 1
+%LogicalPage: 1
+%%BeginPageSetup
+@sv
+@sm
+@sv
+%%EndPageSetup
+@rax %Note: Object
+145.86831 463.43707 314.70831 512.32507 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+145.86831 463.43707 m
+314.70831 512.32507 L
+S
+
+@rax %Note: Object
+146.66031 503.18107 315.50031 552.06907 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+146.66031 503.18107 m
+315.50031 552.06907 L
+S
+
+@rax %Note: Object
+149.39631 483.23707 301.96431 492.45307 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+149.39631 483.23707 m
+301.96431 492.45307 L
+S
+
+@rax %Note: Object
+149.32431 510.16507 153.86031 517.94107 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+149.32431 510.16507 m
+149.32431 517.94107 L
+150.11631 517.94107 L
+150.11631 512.46907 L
+152.70831 515.92507 L
+153.64431 515.92507 L
+151.48431 513.04507 L
+153.86031 510.16507 L
+152.85231 510.16507 L
+150.98031 512.46907 L
+150.11631 511.24507 L
+150.11631 510.16507 L
+149.32431 510.16507 L
+@c
+F
+
+@rax %Note: Object
+149.32431 510.16507 153.86031 517.94107 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+149.32431 510.16507 m
+149.32431 517.94107 L
+150.11631 517.94107 L
+150.11631 512.46907 L
+152.70831 515.92507 L
+153.64431 515.92507 L
+151.48431 513.04507 L
+153.86031 510.16507 L
+152.85231 510.16507 L
+150.98031 512.46907 L
+150.11631 511.24507 L
+150.11631 510.16507 L
+149.32431 510.16507 L
+S
+
+@rax %Note: Object
+148.60431 469.12507 149.39631 476.82907 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+148.60431 469.12507 m
+148.60431 476.82907 L
+149.39631 476.82907 L
+149.39631 469.12507 L
+148.60431 469.12507 L
+@c
+F
+
+@rax %Note: Object
+148.60431 469.12507 149.39631 476.82907 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+148.60431 469.12507 m
+148.60431 476.82907 L
+149.39631 476.82907 L
+149.39631 469.12507 L
+148.60431 469.12507 L
+S
+
+@rax %Note: Object
+291.30831 481.29307 297.35631 489.06907 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+291.30831 481.29307 m
+291.30831 488.99707 L
+292.10031 488.99707 L
+292.10031 487.98907 L
+292.24431 488.27707 L
+292.46031 488.49307 L
+292.67631 488.70907 L
+292.96431 488.85307 L
+293.25231 488.92507 L
+293.61231 488.99707 L
+293.90031 489.06907 L
+294.26031 489.06907 L
+294.83631 488.99707 L
+295.41231 488.92507 L
+295.91631 488.70907 L
+296.34831 488.34907 L
+296.78031 487.91707 L
+297.06831 487.41307 L
+297.28431 486.83707 L
+297.35631 486.26107 L
+297.28431 485.61307 L
+297.14031 485.03707 L
+296.85231 484.46107 L
+296.49231 484.02907 L
+296.27631 483.81307 L
+295.98831 483.66907 L
+295.70031 483.52507 L
+295.48431 483.38107 L
+295.19631 483.30907 L
+294.90831 483.23707 L
+294.62031 483.16507 L
+294.33231 483.16507 L
+293.97231 483.16507 L
+293.61231 483.23707 L
+293.25231 483.30907 L
+292.89231 483.45307 L
+292.60431 483.59707 L
+292.38831 483.81307 L
+292.24431 484.02907 L
+292.10031 484.31707 L
+292.10031 481.29307 L
+291.30831 481.29307 L
+@c
+292.10031 486.04507 m
+292.10031 485.61307 L
+292.24431 485.25307 L
+292.38831 484.89307 L
+292.60431 484.60507 L
+292.89231 484.24507 L
+293.32431 484.02907 L
+293.82831 483.88507 L
+294.33231 483.81307 L
+294.76431 483.88507 L
+295.19631 483.95707 L
+295.55631 484.17307 L
+295.91631 484.46107 L
+296.20431 484.82107 L
+296.42031 485.18107 L
+296.56431 485.61307 L
+296.63631 486.11707 L
+296.56431 486.54907 L
+296.42031 486.98107 L
+296.20431 487.34107 L
+295.91631 487.70107 L
+295.55631 487.98907 L
+295.19631 488.20507 L
+294.76431 488.27707 L
+294.26031 488.34907 L
+293.82831 488.27707 L
+293.39631 488.13307 L
+292.96431 487.91707 L
+292.60431 487.62907 L
+292.38831 487.26907 L
+292.24431 486.90907 L
+292.10031 486.47707 L
+292.10031 486.04507 L
+@c
+F
+
+@rax %Note: Object
+291.30831 481.29307 297.35631 489.06907 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+291.30831 481.29307 m
+291.30831 488.99707 L
+292.10031 488.99707 L
+292.10031 487.98907 L
+292.10031 487.98907 L
+292.24431 488.27707 L
+292.46031 488.49307 L
+292.67631 488.70907 L
+292.96431 488.85307 L
+292.96431 488.85307 L
+293.25231 488.92507 L
+293.61231 488.99707 L
+293.90031 489.06907 L
+294.26031 489.06907 L
+294.26031 489.06907 L
+294.83631 488.99707 L
+295.41231 488.92507 L
+295.91631 488.70907 L
+296.34831 488.34907 L
+296.34831 488.34907 L
+296.78031 487.91707 L
+297.06831 487.41307 L
+297.28431 486.83707 L
+297.35631 486.26107 L
+297.35631 486.26107 L
+297.28431 485.61307 L
+297.14031 485.03707 L
+296.85231 484.46107 L
+296.49231 484.02907 L
+296.49231 484.02907 L
+296.27631 483.81307 L
+295.98831 483.66907 L
+295.70031 483.52507 L
+295.48431 483.38107 L
+295.19631 483.30907 L
+294.90831 483.23707 L
+294.62031 483.16507 L
+294.33231 483.16507 L
+294.33231 483.16507 L
+293.97231 483.16507 L
+293.61231 483.23707 L
+293.25231 483.30907 L
+292.89231 483.45307 L
+292.89231 483.45307 L
+292.60431 483.59707 L
+292.38831 483.81307 L
+292.24431 484.02907 L
+292.10031 484.31707 L
+292.10031 481.29307 L
+291.30831 481.29307 L
+S
+
+@rax %Note: Object
+292.10031 483.81307 296.63631 488.34907 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+292.10031 486.04507 m
+292.10031 486.04507 L
+292.10031 485.61307 L
+292.24431 485.25307 L
+292.38831 484.89307 L
+292.60431 484.60507 L
+292.60431 484.60507 L
+292.89231 484.24507 L
+293.32431 484.02907 L
+293.82831 483.88507 L
+294.33231 483.81307 L
+294.33231 483.81307 L
+294.76431 483.88507 L
+295.19631 483.95707 L
+295.55631 484.17307 L
+295.91631 484.46107 L
+295.91631 484.46107 L
+296.20431 484.82107 L
+296.42031 485.18107 L
+296.56431 485.61307 L
+296.63631 486.11707 L
+296.63631 486.11707 L
+296.56431 486.54907 L
+296.42031 486.98107 L
+296.20431 487.34107 L
+295.91631 487.70107 L
+295.91631 487.70107 L
+295.55631 487.98907 L
+295.19631 488.20507 L
+294.76431 488.27707 L
+294.26031 488.34907 L
+294.26031 488.34907 L
+293.82831 488.27707 L
+293.39631 488.13307 L
+292.96431 487.91707 L
+292.60431 487.62907 L
+292.60431 487.62907 L
+292.38831 487.26907 L
+292.24431 486.90907 L
+292.10031 486.47707 L
+292.10031 486.04507 L
+S
+
+@rax %Note: Object
+225.42831 491.73307 233.70831 499.58107 @E
+ 0 O 0 @g
+0.84 0.73 0.72 0.91 k
+/$fm 0 def
+225.50031 496.41307 m
+225.78831 497.13307 L
+226.07631 497.78107 L
+226.50831 498.28507 L
+227.01231 498.78907 L
+227.30031 498.93307 L
+227.58831 499.14907 L
+227.87631 499.29307 L
+228.16431 499.36507 L
+228.52431 499.43707 L
+228.81231 499.50907 L
+229.17231 499.58107 L
+229.53231 499.58107 L
+229.96431 499.58107 L
+230.32431 499.50907 L
+230.68431 499.43707 L
+231.04431 499.36507 L
+231.40431 499.22107 L
+231.69231 499.07707 L
+232.05231 498.86107 L
+232.34031 498.64507 L
+232.91631 498.14107 L
+233.34831 497.49307 L
+233.63631 496.70107 L
+233.70831 495.83707 L
+233.70831 495.47707 L
+233.70831 495.04507 L
+233.63631 494.68507 L
+233.49231 494.32507 L
+233.42031 493.96507 L
+233.20431 493.67707 L
+232.98831 493.31707 L
+232.77231 493.02907 L
+232.48431 492.66907 L
+232.55631 492.59707 L
+232.70031 492.59707 L
+232.77231 492.52507 L
+232.91631 492.45307 L
+233.06031 492.38107 L
+233.20431 492.38107 L
+233.27631 492.30907 L
+233.42031 492.30907 L
+233.42031 492.30907 L
+233.49231 492.30907 L
+233.49231 492.30907 L
+233.56431 492.30907 L
+233.56431 491.73307 L
+233.34831 491.73307 L
+233.13231 491.80507 L
+232.84431 491.80507 L
+232.62831 491.80507 L
+232.41231 491.94907 L
+232.19631 492.02107 L
+232.05231 492.16507 L
+231.90831 492.23707 L
+231.62031 492.09307 L
+231.26031 492.02107 L
+230.97231 491.87707 L
+230.68431 491.80507 L
+230.39631 491.80507 L
+230.10831 491.80507 L
+229.82031 491.73307 L
+229.53231 491.73307 L
+229.10031 491.73307 L
+228.66831 491.80507 L
+228.30831 491.87707 L
+227.94831 492.02107 L
+227.58831 492.16507 L
+227.22831 492.38107 L
+226.86831 492.59707 L
+226.58031 492.88507 L
+226.07631 493.53307 L
+225.71631 494.18107 L
+225.50031 494.90107 L
+225.42831 495.62107 L
+225.42831 495.76507 L
+225.42831 495.98107 L
+225.42831 496.19707 L
+225.50031 496.41307 L
+@c
+226.36431 494.68507 m
+226.72431 494.75707 L
+227.15631 494.90107 L
+227.58831 494.97307 L
+228.02031 494.97307 L
+228.52431 494.97307 L
+229.10031 494.90107 L
+229.60431 494.75707 L
+230.10831 494.54107 L
+230.54031 494.32507 L
+231.04431 494.03707 L
+231.47631 493.67707 L
+231.90831 493.24507 L
+232.19631 493.53307 L
+232.41231 493.82107 L
+232.55631 494.03707 L
+232.70031 494.32507 L
+232.77231 494.61307 L
+232.91631 494.97307 L
+232.98831 495.26107 L
+232.98831 495.54907 L
+232.98831 495.69307 L
+232.98831 495.90907 L
+232.91631 496.12507 L
+232.91631 496.26907 L
+232.70031 496.84507 L
+232.48431 497.34907 L
+232.12431 497.78107 L
+231.76431 498.14107 L
+231.54831 498.28507 L
+231.26031 498.50107 L
+231.04431 498.57307 L
+230.75631 498.71707 L
+230.46831 498.78907 L
+230.18031 498.78907 L
+229.82031 498.86107 L
+229.53231 498.86107 L
+229.24431 498.86107 L
+228.88431 498.78907 L
+228.59631 498.71707 L
+228.30831 498.64507 L
+228.02031 498.50107 L
+227.73231 498.35707 L
+227.44431 498.21307 L
+227.22831 497.99707 L
+226.72431 497.49307 L
+226.43631 496.91707 L
+226.22031 496.26907 L
+226.14831 495.54907 L
+226.14831 495.40507 L
+226.22031 495.33307 L
+226.22031 495.18907 L
+226.22031 495.04507 L
+226.29231 494.97307 L
+226.29231 494.82907 L
+226.29231 494.75707 L
+226.36431 494.68507 L
+@c
+226.65231 494.03707 m
+226.94031 493.60507 L
+227.22831 493.31707 L
+227.58831 492.95707 L
+228.02031 492.74107 L
+228.38031 492.52507 L
+228.74031 492.45307 L
+229.17231 492.30907 L
+229.53231 492.30907 L
+229.82031 492.30907 L
+230.03631 492.38107 L
+230.32431 492.38107 L
+230.54031 492.45307 L
+230.68431 492.52507 L
+230.90031 492.59707 L
+231.11631 492.74107 L
+231.26031 492.81307 L
+230.90031 493.17307 L
+230.46831 493.46107 L
+230.10831 493.67707 L
+229.67631 493.89307 L
+229.17231 494.03707 L
+228.74031 494.18107 L
+228.30831 494.25307 L
+227.87631 494.25307 L
+227.58831 494.25307 L
+227.22831 494.18107 L
+226.94031 494.10907 L
+226.65231 494.03707 L
+@c
+F
+
+@rax %Note: Object
+225.42831 491.73307 233.70831 499.58107 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+225.50031 496.41307 m
+225.50031 496.41307 L
+225.78831 497.13307 L
+226.07631 497.78107 L
+226.50831 498.28507 L
+227.01231 498.78907 L
+227.01231 498.78907 L
+227.30031 498.93307 L
+227.58831 499.14907 L
+227.87631 499.29307 L
+228.16431 499.36507 L
+228.52431 499.43707 L
+228.81231 499.50907 L
+229.17231 499.58107 L
+229.53231 499.58107 L
+229.53231 499.58107 L
+229.96431 499.58107 L
+230.32431 499.50907 L
+230.68431 499.43707 L
+231.04431 499.36507 L
+231.40431 499.22107 L
+231.69231 499.07707 L
+232.05231 498.86107 L
+232.34031 498.64507 L
+232.34031 498.64507 L
+232.91631 498.14107 L
+233.34831 497.49307 L
+233.63631 496.70107 L
+233.70831 495.83707 L
+233.70831 495.47707 L
+233.70831 495.47707 L
+233.70831 495.04507 L
+233.63631 494.68507 L
+233.49231 494.32507 L
+233.42031 493.96507 L
+233.42031 493.96507 L
+233.20431 493.67707 L
+232.98831 493.31707 L
+232.77231 493.02907 L
+232.48431 492.66907 L
+232.48431 492.66907 L
+232.55631 492.59707 L
+232.70031 492.59707 L
+232.77231 492.52507 L
+232.91631 492.45307 L
+232.91631 492.45307 L
+233.06031 492.38107 L
+233.20431 492.38107 L
+233.27631 492.30907 L
+233.42031 492.30907 L
+233.42031 492.30907 L
+233.42031 492.30907 L
+233.49231 492.30907 L
+233.49231 492.30907 L
+233.56431 492.30907 L
+233.56431 491.73307 L
+233.56431 491.73307 L
+233.34831 491.73307 L
+233.13231 491.80507 L
+232.84431 491.80507 L
+232.62831 491.80507 L
+232.62831 491.80507 L
+232.41231 491.94907 L
+232.19631 492.02107 L
+232.05231 492.16507 L
+231.90831 492.23707 L
+231.90831 492.23707 L
+231.62031 492.09307 L
+231.26031 492.02107 L
+230.97231 491.87707 L
+230.68431 491.80507 L
+230.68431 491.80507 L
+230.39631 491.80507 L
+230.10831 491.80507 L
+229.82031 491.73307 L
+229.53231 491.73307 L
+229.53231 491.73307 L
+229.10031 491.73307 L
+228.66831 491.80507 L
+228.30831 491.87707 L
+227.94831 492.02107 L
+227.58831 492.16507 L
+227.22831 492.38107 L
+226.86831 492.59707 L
+226.58031 492.88507 L
+226.58031 492.88507 L
+226.07631 493.53307 L
+225.71631 494.18107 L
+225.50031 494.90107 L
+225.42831 495.62107 L
+225.42831 495.62107 L
+225.42831 495.76507 L
+225.42831 495.98107 L
+225.42831 496.19707 L
+225.50031 496.41307 L
+S
+
+@rax %Note: Object
+226.14831 493.24507 232.98831 498.86107 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+226.36431 494.68507 m
+226.36431 494.68507 L
+226.72431 494.75707 L
+227.15631 494.90107 L
+227.58831 494.97307 L
+228.02031 494.97307 L
+228.02031 494.97307 L
+228.52431 494.97307 L
+229.10031 494.90107 L
+229.60431 494.75707 L
+230.10831 494.54107 L
+230.54031 494.32507 L
+231.04431 494.03707 L
+231.47631 493.67707 L
+231.90831 493.24507 L
+231.90831 493.24507 L
+232.19631 493.53307 L
+232.41231 493.82107 L
+232.55631 494.03707 L
+232.70031 494.32507 L
+232.70031 494.32507 L
+232.77231 494.61307 L
+232.91631 494.97307 L
+232.98831 495.26107 L
+232.98831 495.54907 L
+232.98831 495.54907 L
+232.98831 495.69307 L
+232.98831 495.90907 L
+232.91631 496.12507 L
+232.91631 496.26907 L
+232.91631 496.26907 L
+232.70031 496.84507 L
+232.48431 497.34907 L
+232.12431 497.78107 L
+231.76431 498.14107 L
+231.76431 498.14107 L
+231.54831 498.28507 L
+231.26031 498.50107 L
+231.04431 498.57307 L
+230.75631 498.71707 L
+230.46831 498.78907 L
+230.18031 498.78907 L
+229.82031 498.86107 L
+229.53231 498.86107 L
+229.53231 498.86107 L
+229.24431 498.86107 L
+228.88431 498.78907 L
+228.59631 498.71707 L
+228.30831 498.64507 L
+228.02031 498.50107 L
+227.73231 498.35707 L
+227.44431 498.21307 L
+227.22831 497.99707 L
+227.22831 497.99707 L
+226.72431 497.49307 L
+226.43631 496.91707 L
+226.22031 496.26907 L
+226.14831 495.54907 L
+226.14831 495.54907 L
+226.14831 495.40507 L
+226.22031 495.33307 L
+226.22031 495.18907 L
+226.22031 495.04507 L
+226.22031 495.04507 L
+226.29231 494.97307 L
+226.29231 494.82907 L
+226.29231 494.75707 L
+226.36431 494.68507 L
+S
+
+@rax %Note: Object
+226.65231 492.30907 231.26031 494.25307 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.84 0.73 0.72 0.91 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+226.65231 494.03707 m
+226.65231 494.03707 L
+226.94031 493.60507 L
+227.22831 493.31707 L
+227.58831 492.95707 L
+228.02031 492.74107 L
+228.02031 492.74107 L
+228.38031 492.52507 L
+228.74031 492.45307 L
+229.17231 492.30907 L
+229.53231 492.30907 L
+229.53231 492.30907 L
+229.82031 492.30907 L
+230.03631 492.38107 L
+230.32431 492.38107 L
+230.54031 492.45307 L
+230.54031 492.45307 L
+230.68431 492.52507 L
+230.90031 492.59707 L
+231.11631 492.74107 L
+231.26031 492.81307 L
+231.26031 492.81307 L
+230.90031 493.17307 L
+230.46831 493.46107 L
+230.10831 493.67707 L
+229.67631 493.89307 L
+229.67631 493.89307 L
+229.17231 494.03707 L
+228.74031 494.18107 L
+228.30831 494.25307 L
+227.87631 494.25307 L
+227.87631 494.25307 L
+227.58831 494.25307 L
+227.22831 494.18107 L
+226.94031 494.10907 L
+226.65231 494.03707 L
+S
+
+%%PageTrailer
+@rs
+@rs
+%%Trailer
+@EndSysCorelDict
+end
+%%DocumentSuppliedResources: procset wCorel7Dict
+%%EOF
diff --git a/macros/generic/kastrup/binhex.dtx b/macros/generic/kastrup/binhex.dtx
new file mode 100644
index 0000000000..202308d3a7
--- /dev/null
+++ b/macros/generic/kastrup/binhex.dtx
@@ -0,0 +1,518 @@
+% \iffalse
+% Copyright(c) 2001 by David Kastrup
+% Any use of the code is permitted as long as this copyright notice is
+% preserved in the code.
+%
+% In case of an emergency (no LaTeX available), you may rename this
+% file to binhex.tex. In all other cases, use the accompanying
+% binhex.ins in order to extract binhex.drv (run LaTeX on it for
+% getting the documentation) and binhex.tex. If binhex.ins is
+% missing, you can regenerate it by running docstrip on this file with
+% the option ``installer'' set.
+% \fi
+% \CheckSum{251}
+% \title{The \texttt{binhex.tex} package for expansible conversion
+% into binary-based number systems}
+% \author{David Kastrup\thanks
+% {David.Kastrup@neuroinformatik.ruhr-uni-bochum.de}}
+% \maketitle
+% \tableofcontents
+%
+% \section{Usage}
+% This is a file for expandably converting numbers into binary, octal
+% and hexadecimal. All constructs \TeX\ accepts as an argument to its
+% |\number| primitive are valid. This holds for all numeric arguments
+% of the macros presented in here.
+%
+% You use this package by simply inputting it with
+% \begin{verbatim}
+%\input binhex
+% \end{verbatim}
+% It will work equally well under \LaTeX\ and plain \TeX. It does not
+% even use plain \TeX, but only \TeX\ primitives. Simply setting the
+% correct |\catcode| values for |{}#| and end of line will make it
+% load and work under ini\TeX.
+%
+% The following macros are defined:
+% \DescribeMacro{\binary}
+% |\binary{|\meta{number}|}| will convert \meta{number} into its binary
+% representation.
+% \samples\binary{0}{\maxdimen}{-"7EE6}.
+%
+% \DescribeMacro{\nbinary}
+% |\nbinary{|\meta{size}|}{|\meta{number}|}| will convert \meta{number}
+% into a binary representation of at least \meta{size} digits length,
+% filling up with leading zeros where necessary. The |-| sign of
+% negative numbers is not counted. If both \meta{size} and
+% \meta{number} are zero, an empty string is generated. This should
+% please some computer scientists in some situations.
+% \samples{\nbinary{3}}{3}{-2}{-12}.
+%
+% \DescribeMacro{\hex}
+% |\hex{|\meta{number}|}| converts \meta{number} into its hexadecimal
+% representation, using uppercase letters.
+% \samples\hex{34}{-4711}.
+%
+% \DescribeMacro{\nhex}
+% |\nhex{|\meta{size}|}{|\meta{number}|}| will convert \meta{number}
+% into a hexadecimal representation of at least \meta{size} digits length,
+% filling up with leading zeros where necessary. The |-| sign of
+% negative numbers is not counted. If both \meta{size} and
+% \meta{number} are zero, an empty string is generated. This should
+% please some computer scientists in some situations.
+% \samples{\nhex{3}}{3}{-\maxdimen}.
+%
+% \DescribeMacro{\oct}
+% |\oct{|\meta{number}|}| converts \meta{number} into its octal
+% representation.
+% \samples\oct{34}{-4711}.
+%
+% \DescribeMacro{\noct}
+% |\noct{|\meta{size}|}{|\meta{number}|}| will do the right thing.
+% \samples{\noct{3}}{13}{-\maxdimen}.
+%
+% \DescribeMacro{\tetra}
+% |\tetra{|\meta{number}|}| is for people counting with arms and legs
+% instead of fingers, or for quadrupeds.
+% \samples\tetra{34}{-4711}.
+%
+% \DescribeMacro{\ntetra}
+% |\ntetra{|\meta{size}|}{|\meta{number}|}| is for those of the same
+% count which have minimum requirements.
+% \samples{\ntetra{3}}{3}{-\maxdimen}.
+%
+% \DescribeMacro{\nbinbased}
+% |\nbinbased{|\meta{logbase}|}{|\meta{size}|}{|\meta{number}|}| will
+% convert \meta{number} into number base $2^{\text{\meta{logbase}}}$ and
+% generate at least \meta{size} digits. Only supported values of
+% \meta{logbase} are 1, 2, 3, 4. This is called by all other macros
+% except of the faster binary conversion macros.
+% \samples{\nbinbased{3}{3}}{13}{-\maxdimen}.
+% \samples{\nbinbased{2}{4}}{13}{-\maxdimen}.
+%
+% That's it, have fun!
+% \StopEventually{}
+% \section{Implementation}
+% Now the implementation. First save catcode of |@| and old contents of
+% |\toks0| in |\toks0|, then make |@| a letter to enable internal
+% macros.
+% \begin{macrocode}
+%<*style>
+\edef\next{\toks0=%
+ {\catcode`\noexpand\@=\the\catcode`\@\toks0{\the\toks0}}%
+}
+\next
+\catcode`\@11
+% \end{macrocode}
+%
+% \subsection{Binary conversions}
+% \subsubsection{Basics}
+% \begin{macro}{\bb@00}
+% \begin{macro}{\bb@01}
+% \begin{macro}{...}
+% \begin{macro}{\bb@19}
+% We now define the work horse macros for conversion of binary
+% commands. If numbers were allowed in macro names, one of those
+% definitions would be
+% \begin{verbatim}
+%\def\bb@13#1{6\csname bb@1#1\endcsname}
+% \end{verbatim}
+% That is, the macro divides the decimal two-digit number (up to~19)
+% embedded into its name by~2, spews out the result and starts up the
+% next macro with the first digit of the name of \emph{that} being the
+% remainder from its own division, and the second digit being the next
+% following one.
+% \begin{macrocode}
+\def\next#1#2#3{\expandafter \def \csname bb@#1\endcsname##1%
+ {#2\csname bb@#3##1\endcsname}}
+\next{00}00 \next{01}01 \next{02}10 \next{03}11
+\next{04}20 \next{05}21 \next{06}30 \next{07}31
+\next{08}40 \next{09}41 \next{10}50 \next{11}51
+\next{12}60 \next{13}61 \next{14}70 \next{15}71
+\next{16}80 \next{17}81 \next{18}90 \next{19}91
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\bb@0+}
+% \begin{macro}{\bb@1+}
+% Now we need to end such a conversion. For no particular reason at
+% all (well, some sneakiness might explain it later), we use |+| as an
+% end marker for the decimal digits. After the |+|, we collect the
+% resulting binary digits, from last to first. So here are two macros
+% to deal with the last digit produced. Simply tacks them on after
+% replacing the gobbled |+|.
+% \begin{macrocode}
+\expandafter \def \csname bb@0+\endcsname {+0}
+\expandafter \def \csname bb@1+\endcsname {+1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now all that remains to be done is to initiate the process, and to
+% end it again. The process ends when the decimal number reaches~0.
+% Since we want to produce one digit even when starting out, and we
+% check the end of recursion by comparing the result with~|0|, we have a
+% problem here. We solve it by comparing two letters, and looking for
+% the complete |0+| sequence, and we start out by prepending a trivial |0|
+% before the number to convert, so that at the first run it will be |00|
+% instead of |0| if the number in question is~0.
+%
+% \begin{macro}{(\binary)}
+% \begin{macro}{(\bb@dobinary)}
+% Actually, this is how we \emph{could} do things. The actual, slightly
+% different version used can be shared by the other converters, but
+% we'll keep this listed for reference.
+% \begin{verbatim}
+%\def\binary#1{\expandafter \bb@dobinary \expandafter 0\number#1+}
+%\def\bb@dobinary#1#2{\if0#1\if+#2\bb@endbinary \fi\fi
+% \expandafter \bb@dobinary \number \csname bb@0#1\endcsname #2}
+% \end{verbatim}
+% Notice that |\number| here serves multiple purposes. It will
+% initiate expansion that will only be stopped once the macros
+% generating the next binary digit will crank out a space or anything
+% else stopping expansion. Its second purpose is to get rid of any
+% leading zeros that might remain from the last loop through.
+%
+% \begin{macro}{\bb@endbinary}
+% |\bb@endbinary| can
+% be used as written, though. It scraps everything up to the tack
+% mark |+|, leaving only the converted results accumulated behind
+% that. Since this means scrapping |\fi\fi| as well, it reinserts
+% it in order to properly finish the conditional.
+% \begin{macrocode}
+\def\bb@endbinary#1+{\fi\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Negative numbers}
+% We would like negative numbers to work, too. The semantics for
+% defined field widths are unclear (so we basically just tack a |-| on
+% and convert the remaining number to the full width). Since the sign
+% of the number is easy to discern, further massaging of the number to
+% replace leading zeros by spaces, insert |+| signs and similar folderol
+% are easy to do and left as an exercise to the reader. We mostly
+% implement this to have the conversion not fail on any number.
+%
+% \begin{macro}{\bb@0-}
+% The following one-liner achieves that. Figure out why. It is easy.
+% \begin{macrocode}
+\expandafter \def \csname bb@0-\endcsname {0+-\bb@dobinary}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Minimum field widths}
+% \begin{macro}{\bb@0m}
+% \begin{macro}{\bb@1m}
+% We often have the situation that we want to produce a number that is
+% at least of a certain length. We specify this by tagging on an
+% appropriate number of |m| characters to the decimal as sort of a
+% format string. If we match such an~|m| at the end of the conversion,
+% we produce a digit and remove one~|m|, leaving all other |m| intact (or
+% whatever else happens to be before our |+| sign).
+% \begin{macrocode}
+\expandafter\def\csname bb@0m\endcsname#1+{#1+0}
+\expandafter\def\csname bb@1m\endcsname#1+{#1+1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{(\nbinary)}
+% We call |\nbinary| with the number of digits as first argument, the number
+% itself as second.
+%
+% This now becomes trivial:
+% \begin{verbatim}
+%\def \nbinary#1#2{%
+% \binary{\number #2\romannumeral \number \number #1 000}%
+%}
+% \end{verbatim}
+%
+% Whoa, what about all these calls of |\number|? First notice the space
+% after |#1|. We need that in case |#1| happens to be octal or whatever,
+% since the |000| at the end is supposed to multiply by 1000 \emph{decimal}.
+% If |#1| were something like |'13| (11 decimal), the last |\number| will
+% expand |'13|, the |\number| before that will remove the blank we
+% inserted in case it was not needed to finish the number of digits,
+% we multiply by~1000 and turn this into a roman numeral consisting of
+% the appropriate amount of |m| letters. The very first |\number| ensures
+% that in case |#2| is a complete number without the need of trailing
+% spaces, still |\romannumeral| will be expanded when |\binary| first sets
+% sight on the whole thing.
+% \end{macro}
+%
+% \begin{macro}{\nbinary}
+% \begin{macro}{\binary}
+% \begin{macro}{\bb@dobinary}
+% Actually, since there is a certain logic to returning
+% an empty string when 0 is to be converted into a number at least 0
+% characters long, we redefine the stuff the other way round, |\binary|
+% as a special case of |\nbinary|. We check the end by testing against
+% |0| followed by anything but~|m|. This has reasons\dots
+%
+% \begin{macrocode}
+\def\bb@dobinary#1#2{\if#10\if m\string#2\else\bb@endbinary\fi\fi
+ \expandafter\bb@dobinary\number\csname bb@0#1\endcsname#2}
+\def\nbinary#1#2{\expandafter\bb@dobinary\number\number#2%
+ \romannumeral\number\number#1 000+}
+\def\binary{\nbinary1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Hexadecimal and the rest}
+%
+% Ok, stop with the small fry. Now we want to convert into
+% hexadecimal and octal as well. We do this by first converting into
+% binary, then into the wanted base whenever enough binary digits have
+% accumulated. In the following, we will talk about hex digits
+% exclusively for simplicity, even though they might indeed be octal
+% instead.
+%
+% \begin{macro}{\bb@h0}
+% \begin{macro}{\bb@h1}
+% \begin{macro}{\bb@h10}
+% \begin{macro}{...}
+% \begin{macro}{\bb@h1111}
+%
+% The following defines the equivalents of
+% \begin{verbatim}
+%\def \bb@h110#1+{\bb@dohex #1+6}
+% \end{verbatim}
+% This is a macro that appends 6, the representation of the binary
+% number in its name, after the tack mark |+|. So what's with the
+% |\number+|? Actually, here it does nothing but disappear. We just
+% write this to remind us of how the macros will be called. When the
+% macros are called, we use the same construct, and then |\number|
+% will disappear together with the~|+| (that we use as a tack mark)
+% and take along any leading zeros. We drop leading zeros so that we
+% can share the conversion macros for hex and octal (and quaternary?)
+% where they overlap.
+%
+% \begin{macrocode}
+\def \next #1#2{\expandafter \def
+ \csname bb@h\number +#1\endcsname ##1+{\bb@dohex ##1+#2}%
+}
+\next {0}0 \next {1}1 \next {10}2 \next {11}3
+\next {100}4 \next {101}5 \next {110}6 \next {111}7
+\next{1000}8 \next{1001}9 \next{1010}A \next{1011}B
+\next{1100}C \next{1101}D \next{1110}E \next{1111}F
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bb@dohex}
+% |\bb@dohex| is the magic macro that initiates accumulation of enough
+% binary digits for one hexadecimal one. It is called in
+% the following form:
+% \begin{quote}
+% |\bb@dohex| \meta{m\{\#rhex\}} |\endcsname| \meta{m\{\#bin\}} |+|
+% \end{quote}
+% Where |+| is the tack after which hex digits will accumulate,
+% \meta{m\{\#rhex\}} is a sequence of |m|, one for every remaining hex
+% digit we want to force out (same convention as with |\nbinary| above),
+% and \meta{m\{\#bin\}} is a sequence of |m| corresponding in length to
+% the number of binary digits we need to accumulate for one hexadecimal
+% (or octal) digit.
+% \begin{macrocode}
+\def\bb@dohex #1{\csname bb@x#1\endcsname}
+% \end{macrocode}
+%
+% Eeek! What is that? Ok, let's split it into the two cases, one with
+% forced digits remaining, one without any remaining forced digits.
+% If no forced digits remain, we get
+% \begin{quote}
+% |\bb@x \endcsname \endcsname| \meta{m\{\#bin\}}
+% \end{quote}
+% \end{macro}
+%
+% \begin{macro}{\bb@x}
+% |\bb@x| is defined as
+% \begin{macrocode}
+\def\bb@x\endcsname#1{ \bb@xm{m\endcsname}}
+% \end{macrocode}
+%
+% Notice the space at the start of the macro! It will stop
+% expansion. Furthermore, the |\endcsname| that |\bb@dohex| inserted is
+% scrapped, as well as the first |m| from
+% \meta{m\{\#bin\}}.\footnote{Why do we match |\string\endcsname| explicitly
+% for scrapping? The answer is debugging. We know it should always
+% be |\string\endcsname|, so let \TeX\ assert that it is indeed so. But we
+% also know that the next character will be |m|, why don't we match
+% \emph{that} explicitly? The answer is that we cannot be sure about the
+% |\string\catcode| of the matched~|m|. A hand-entered |m| has
+% |\string\catcode|~11, a \TeX-generated one (with |\string\string| or
+% |\string\romannumeral| or such) has |\string\catcode|~12. You'll
+% find that all the code here has been carefully
+% designed so that it will not care which it gets, so we don't make
+% an exception here.
+% }
+% \end{macro}
+%
+% \begin{macro}{\bb@xm}
+% The argument fed to |\bb@xm| is part of some jiggery-pokery we want
+% to happen when |\bb@dobinary| resumes expansion. First, however, it
+% will take a look and decide whether it will stop generating digits
+% altogether. As |\string \bb@xm| does not start with |m|, |\bb@dobinary|
+% will stop expansion when the decimal to convert has shrunk to 0.
+% Fine. Now what does |\bb@xm| do?
+% \begin{macrocode}
+\def\bb@xm #1\endcsname #2#3+{#2#3%
+ \csname bb@h\number+\endcsname
+ #1\endcsname m#3+}
+% \end{macrocode}
+% \end{macro}
+%
+% This is rather straightforward for the case of forced digits: the
+% number of binary digits is encoded in the form of \meta{m\{\#bin\}} in
+% |#2#3|. After the conversion of those digits, the appropriate hex
+% digit macro is called and sets up |\bb@dohex| again for the next hex
+% digit. Piece of cake. Now what happens in the case we have resumed
+% from |\do@binary| having had its option of stopping expansion?
+%
+% In that case, we get called with the next \meta{digit}
+% already arriving. This looks more or less like
+% \begin{quote}
+% |\csname bb@|\meta{digit}|\bb@xm \endcsname{m\endcsname}|
+% \meta{m\{\#bin-1\}}
+% \end{quote}
+% See what happens? This expands |\bb@xm|, after which a command of the
+% name |\bb@|\meta{digit}|m| (\meta{digit} being 0 or~1) gets executed.
+% It stashes away \meta{digit} after
+% the conveniently provided |+| sign, and \meta{\#bin-1} digits remain for
+% conversion.
+%
+% You think this contrived? Well, buster, let me tell you that the
+% previous version was way more insane. Have it still in RCS.
+%
+% \begin{macro}{\bb@nbinbased}
+% The following macro needs to get |#1|, the decimal number to convert,
+% in text form already. This is so that |\number#1| will continue
+% expanding after |#1|, expanding |\bb@dohex| exactly once. This problem
+% does not exist for the |\romannumeral| calls for |#2| and |#3|, so
+% spurious expansion with |\number\number| does no harm, since it is
+% stopped readily at the hard |\endcsname| and |+| thresholds.
+% \begin{macrocode}
+\def\bb@nbinbased #1#2#3{\expandafter \bb@dobinary \number#1%
+ \expandafter \bb@dohex
+ \romannumeral \number\number #2 000\expandafter\endcsname
+ \romannumeral \number\number #3 000+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\nbinbased}
+% The following macro gets 3~arguments, the number of binary digits the
+% output digits shall be based on, the number of digits to produce at
+% least, and the number itself. It expands the number into text
+% form. If the number is not space-terminated, the closing brace
+% reliably stops expansion nevertheless, so that |\bb@nbinbased| gets a
+% clean number.
+% \begin{macrocode}
+\def\nbinbased #1#2#3{\expandafter\bb@nbinbased
+ \expandafter {\number#3}{#2}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nhex}
+% \begin{macro}{\noct}
+% \begin{macro}{\ntetra}
+% \begin{macro}{\hex}
+% \begin{macro}{\oct}
+% \begin{macro}{\tetra}
+% Now follow the obvious definitions:
+% \begin{macrocode}
+\def\nhex{\nbinbased4}
+\def\noct{\nbinbased3}
+\def\ntetra{\nbinbased2}
+\def\hex{\nhex1}
+\def\oct{\noct1}
+\def\tetra{\ntetra1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \subsection{The end}
+% Restore |\catcode`\@| and |\toks0| and finish.
+% \begin{macrocode}
+\the\toks0
+%</style>
+% \end{macrocode}
+% And that was that!
+% \section{Various drivers}
+% The installer, in case it is missing.
+% \begin{macrocode}
+%<installer> \input docstrip
+%<installer> \generate{
+%<installer> \file{binhex.drv}{\from{binhex.dtx}{driver}}
+%<installer> \usedir{tex/generic/misc}
+%<installer> \file{binhex.tex}{\from{binhex.dtx}{style}}
+%<installer> }
+%<installer> \endbatchfile
+% \end{macrocode}
+% And here comes the documentation driver.
+% \begin{macrocode}
+%<driver> \documentclass{ltxdoc}
+%<driver> \usepackage{amsmath}
+%<driver> \input binhex.tex
+% \end{macrocode}
+% \begin{macro}{\verbatize}
+% |\detokenize| is available in e\TeX, but we may not have that\dots
+% The |\fontdimen| folderol makes spaces temporarily disabled. Looks
+% prettier. Sorry for that.
+% \begin{macrocode}
+%<driver> \def\verbatize#1{\begingroup
+%<driver> \toks0{#1}\edef\next{\the\toks0}%
+%<driver> \dimen0\the\fontdimen2\font
+%<driver> \fontdimen2\font=0pt
+%<driver> \expandafter\stripit
+%<driver> \meaning\next
+%<driver> \fontdimen2\font=\dimen0
+%<driver> \endgroup}
+%<driver> \def\next{}
+%<driver> \expandafter\def\expandafter\stripit\meaning\next{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\showeffect}
+% |\showeffect|\meta{Stuff} will put out a one-line correspondence of
+% the verbatim source of \meta{Stuff} with its expansion, to be used
+% in a |aligned| environment or similar.
+% \begin{macrocode}
+%<driver> \newcommand\showeffect[1]{%
+%<driver> \text{\verbatize{#1}}\quad&\rightarrow\quad\text{#1}%
+%<driver> \\}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\samples}
+% |\samples| gets one parameter, and a following expression list ended
+% by a period. It applies that parameter to each of the expressions
+% in the list and generates a correspondance table for each. For
+% example,
+% \begin{verbatim}
+%\samples{\nbinary{3}}{3}{-2}{-12}.
+% \end{verbatim}
+% was used in this document to produce
+% \samples{\nbinary{3}}{3}{-2}{-12}.
+% \begin{macrocode}
+%<driver> \def\samples{\begingroup\MacroFont\[\begin{aligned}\nextsample}
+%<driver> \def\nextsample#1#2{%
+%<driver> \if.\noexpand#2\expandafter\endsamples\fi
+%<driver> \showeffect{#1{#2}}\nextsample{#1}}
+%<driver> \def\endsamples#1\nextsample#2{\end{aligned}\]\endgroup}
+% \end{macrocode}
+% \end{macro}
+% Now all that remains is inputting the stuff.
+% \begin{macrocode}
+%<driver> \begin{document}
+%<driver> \DocInput{binhex.dtx}
+%<driver> \end{document}
+% \end{macrocode}
+% \Finale{} \ No newline at end of file
diff --git a/macros/generic/kastrup/binhex.ins b/macros/generic/kastrup/binhex.ins
new file mode 100644
index 0000000000..fc3322cd03
--- /dev/null
+++ b/macros/generic/kastrup/binhex.ins
@@ -0,0 +1,32 @@
+%%
+%% This is file `binhex.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% binhex.dtx (with options: `installer')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from binhex.ins.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file binhex.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+ \input docstrip
+ \generate{
+ \file{binhex.drv}{\from{binhex.dtx}{driver}}
+ \usedir{tex/generic/misc}
+ \file{binhex.tex}{\from{binhex.dtx}{style}}
+ }
+ \endbatchfile
+\endinput
+%%
+%% End of file `binhex.ins'.
diff --git a/macros/generic/kastrup/binhex.pdf b/macros/generic/kastrup/binhex.pdf
new file mode 100644
index 0000000000..884e7e474c
--- /dev/null
+++ b/macros/generic/kastrup/binhex.pdf
Binary files differ
diff --git a/macros/generic/knst/README b/macros/generic/knst/README
new file mode 100644
index 0000000000..7620a4ffd8
--- /dev/null
+++ b/macros/generic/knst/README
@@ -0,0 +1,15 @@
+This is the package supporting generation and correction of
+multiple option tests, as will appear in TUGBoat 17#3:
+"Fast and secure multiple option tests".
+
+The package includes:
+ - knst.tex: Macro TeX package and style to typeset the tests;
+ - knd.c: C code for an utility which grades these tests as described in
+ the paper;
+ - README: this file;
+ - foo.tex: Example test file. Uncomment \plainversion to run the
+ plain version, then run again with the comments in place
+ to get a test.
+
+ --Jordi Saludes
+ saludes@grec.upc.es
diff --git a/macros/generic/knst/foo.tex b/macros/generic/knst/foo.tex
new file mode 100644
index 0000000000..96ae42c25f
--- /dev/null
+++ b/macros/generic/knst/foo.tex
@@ -0,0 +1,44 @@
+\input knst.tex
+\date{April 1995}
+\title{A test}
+%%\plainversion
+\test{1234531}
+\qtn Example question with
+a displayed equation
+$$\int_{\partial S}\omega=
+ \int_S d\omega.$$
+ \anw Option a;
+ \Anw Option b (and right);
+ \anw Option c;
+ \anw Option d;
+ \anw Option e;
+ \anw Option f;
+ \anw Option g;
+\endqtn
+
+\qtn This question has
+a `fixed' option at the end.
+ \Anw This is the right option;
+ \anw Not so well;
+ \anw Clearly wrong;
+ \fix\anw None of the above.
+\endqtn
+
+\qtn Boolean question
+ \anw True;
+ \Anw False
+\endqtn
+
+\qtn Fuzzy question
+ \Anw Quite true;
+ \anw Quite false;
+\endqtn
+
+\qtn Is this the last one?
+ \anw Who knows;
+ \anw Choose me;
+ \fix\Anw None of the above;
+ \anw All of the above.
+\endqtn
+\stepversion{1243}
+\endtest
diff --git a/macros/generic/knst/knd.c b/macros/generic/knst/knd.c
new file mode 100644
index 0000000000..a099bb25ad
--- /dev/null
+++ b/macros/generic/knst/knd.c
@@ -0,0 +1,352 @@
+/*
+ AUTHOR: Jordi Saludes <saludes@grec.upc.es>
+ DATE: 12/9/1996
+ FILE: knd.c
+
+ kndecode - Decoder of knapsack tests answers.
+
+ SYNOPSIS
+
+ kndecode [-i] [-apSGI] filename1 [filename2]
+
+ DESCRIPTION
+
+ kndecode decodes page totals for knapsack tests. kndecode
+ reads first the exam description, then the students identifiers and
+ answers and returns grades, decoded answers and other information.
+ When filename2 is given, filename1 contains the exam
+ description (usually a .ans file) and filename2 contains
+ the students data and answers. When only one file name is given,
+ filename1 contains first the exam description and then, after a blank
+ line, the students data.
+ filename2 can be `-', namely the standard input.
+ Exam description
+ The exam description is usally written by the TeX run of
+ exam file into a .ans file. Lines of such desciption are
+ \opts q p r: Question number q has p options. Option number r
+ is the right one.
+ \pagebot q: Question q is the last one in current page.
+ \Key k d: k is the key for the test and d is the
+ detection factor.
+ Data lines
+ Each line contains identifier, page totals (and possibly version
+ number) of a student.
+ Fields are separated by spaces. First field must be the
+ identifier (long int) of student, next ones are
+ the consecutive page totals. However if one of these fields
+ f is negative, it is assumed that it represents a new
+ version number instead of a page total. Version number is -f
+ from now on.
+
+ If no options are given the student identifier is not expected.
+
+ OPTIONS
+
+ i Read incidences. Second field must be an octal
+ number standing for incidences ocurred in the
+ pre-processing of the exam data file.
+ a Return answers of exam, separated by tabs.
+ p Return plain (decoded) page totals,
+ for archiving purposes.
+ S Return the number of right, wrong and null answers.
+ G Return grade. Right answer means +1, null answer
+ means 0, value of wrong answers are adjusted
+ to have 0 expectation when questions are answered
+ picking answers randomly.
+ Modify routine "qualifica" to change grading.
+ I Output incidences. Input incidences from
+ pre-processing (when i option is given) are
+ OR-ed with incidences generated by kndecode and
+ returned.
+ None All information returned by the a, p, S or G
+ options is displayed in more human-readable form.
+ No student identifier is expected as first field.
+
+ EXAMPLES
+
+ kndecode foo.ans -
+ -38353 17942344
+(Version number) (Page 1 total)
+
+ kndecode -G foo.ans - (Only grade)
+ 1001 -38353 17942344 674532
+(IDentifier) (V) (P1) (P2)
+
+ kndecode -i -GI foo.ans - (Grade and output incidences)
+ 1001 2 -38353 17942344 674532
+ (ID) (Incid.) (V) (P1) (P2)
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define NSDF 1 /* Page total is not a multiple of df */
+#define BVER 2 /* Bad version number: Not inversible */
+#define BCNT 4 /* Bad control number. From pre-processing */
+#define DUPR 8 /* Duplicated record. From pre-processing */
+#define BDEC 16 /* Bad decoding */
+
+#define MQNS 100 /* Max number of questions */
+#define MPAGS 10 /* Max number of pages in a test */
+
+#define GRADE 1
+#define PLAIN 2
+#define STAT 4
+#define ANSW 8
+#define IIND 16
+#define OIND 32
+
+#define NSDF_str "%s: %ld is not a multiple of %hd\n"
+#define BVER_str "%s: %ld has no inverse\n"
+#define BDEC_str "%s: Bad decoding for %ld\n"
+#define BFMT_str "%s: Bad format file\n"
+#define UNKO_str "%s: Unknown option\n"
+
+
+typedef struct {short int nopt,marca,ref; long int w;} question;
+
+question qn[MQNS];
+short int npag,df,nq;
+short int pb[MPAGS];
+/* ref[MQNS],nopt[MQNS],marca[MQNS],pb[MPAGS]; */
+long int key;
+/* w[MQNS]; */
+
+int getOptions(int argc, char *argv[], FILE **dataF, short *opts);
+int aplana(long *pla, long a, long s, long modul);
+int inverteix(long *in, long b, long key);
+int deco(long v, long s, question r[],short n,long *pla);
+float qualifica(short *n,short *b, short *m);
+
+int main(argc, argv)
+int argc;
+char *argv[];
+{ FILE *dataF;
+ int errs;
+ short int i,j,incid,opts;
+ short int bons,mals,nuls;
+ long int dni,suma,versio=1L,spla;
+ float nota;
+ int c;
+
+ if(getOptions(argc,argv,&dataF,&opts)==0)
+ return(1);
+ while(1) {
+ incid=0;
+ bons=mals=nuls=0;
+ nota=0.0;
+ if(opts) {
+ if(fscanf(dataF,"%ld",&dni)==EOF) break;
+ if (opts&IIND && fscanf(dataF,"%ho",&incid)==EOF) break;
+ printf("%ld",dni);
+ }
+ for(i=0;i<npag;) {
+ if (fscanf(dataF,"%ld",&suma)==EOF) goto sortir;
+ if (suma<0) {
+ inverteix(&versio,-suma,key);
+ continue;
+ }
+ if (suma%df!=0) {
+ fprintf(stderr,NSDF_str,argv[0],suma,df);
+ incid|=NSDF;
+ goto aborta;
+ }
+ i++;
+ if(deco(versio, suma/df,qn+pb[i-1],pb[i]-pb[i-1],&spla)) {
+ fprintf(stderr,BDEC_str,argv[0],suma/df);
+ incid|=BDEC;
+ goto aborta;
+ }
+ if(!opts) {
+#define LOOP for (j=pb[i-1];j<pb[i];j++)
+ printf("\n\nPg. %d\t",i); LOOP printf("%2d ",j+1);
+ printf("\n\t"); LOOP printf("---");
+ printf("\n\t"); LOOP printf("%2hd ",qn[j].ref);
+ printf("\n\t"); LOOP printf("%2hd ",qn[j].marca);
+ printf("\n\t"); LOOP
+ printf(" %c ", qn[j].marca==0? ' ':(qn[j].marca==qn[j].ref? 'B':'M'));
+ }
+ if(opts&PLAIN)
+ printf("\t%ld",spla);
+ if (opts&ANSW)
+ LOOP printf("\t%hd",qn[j].marca);
+ }
+ /* Now summaries */
+ nota=qualifica(&nuls,&bons,&mals);
+ if(!opts) {
+ printf("\n\nRight\tWrong\tNo answ\t\tGrade");
+ printf("\n%d\t%d\t%d\t\t%4.2f\n\n\n",bons,mals,nuls,nota);
+ }
+ if (opts&GRADE)
+ printf("\t%4.2f", nota);
+ if(opts&STAT)
+ printf("\t%hd\t%hd\t%hd", bons,mals,nuls);
+aborta: if (opts&OIND) printf("\t%ho",incid);
+ printf("\n");
+ }
+sortir:
+ fclose(dataF);
+ return 0;
+}
+
+
+/** Get the multiplicative inverse of b modulo key
+ ** Return in in.
+ ** Uses algorith Y in Knuth
+ **
+ **/
+int inverteix(long *in, long b, long key)
+{ long u1=1,u2=0,u3,v1,v2,v3,t1,t2,t3;
+ long u=b,v=key;
+ int k;
+ if (b<=0) return 1;
+ for (k=0; (u&1)==0 && (v&1)==0; k++) {u/=2; v/=2;}
+ u3=u; v1=v; v2=1-u; v3=v;
+ if ((u&1)==1) {
+ t1=0; t2= -1; t3= -v;
+ goto y4;
+ } else {
+ t1=1; t2=0; t3=u;
+ }
+y3: if( (t1&1)==0 && (t2&1)==0) {
+ t1/=2; t2/=2; t3/=2;
+ } else {
+ t1=(t1+v)/2; t2=(t2-u)/2; t3/=2;
+ }
+y4: if((t3&1)==0) goto y3;
+ if(t3>0) {
+ u1=t1; u2=t2; u3=t3;
+ } else {
+ v1= v-t1; v2= -u-t2; v3= -t3;
+ }
+ t1=u1-v1; t2=u2-v2; t3=u3-v3;
+ if (t1<0) { t1+=v; t2-=u;}
+ if (t3!=0) goto y3;
+ *in= u1;
+ return 0;
+}
+
+
+
+
+/** Return grade. Give also the nuwer of
+ ** right, wrong and null answers.
+ **/
+float qualifica(short *n,short *b,short *m)
+{ short int i;
+ float nota=0.0;
+ (*n)= (*b)= (*m)= 0;
+ for(i=0; i<nq; i++) {
+ if(qn[i].marca==0)
+ (*n)++;
+ else
+ if(qn[i].marca==qn[i].ref) {
+ (*b)++; nota++;
+ } else {
+ (*m)++; nota-=1.0/(qn[i].nopt-1);
+ }
+ }
+ return (nota*10.0)/nq;
+}
+
+
+
+
+/** Given the plain total sp, obtain n answers in res
+ **
+ **/
+int deco(long int v, long int s, question res[], short n,long *pla)
+{ long int sp;
+ short int i;
+
+ if(s<0) return(1);
+ s= s%key;
+ for (sp=0;v;s=(s+s)%key,v>>=1)
+ if(v&1) sp=(sp+s)%key;
+ *pla=sp;
+ for (i=n-1; i>=0; i--) {
+ if ((res[i].marca=sp/res[i].w)>res[i].nopt) return(1);
+ sp= sp%res[i].w;
+ }
+ return(0);
+}
+
+
+
+
+/** Get the options in the command line
+ **
+ **/
+int getOptions(int argc, char *argv[], FILE **dataF, short int *opts)
+{ short int k,i,j,na,cref;
+ long int m=1;
+ int errs, rcs;
+ char opt, rec[50];
+ *dataF=NULL;
+
+ if (argc<=1) return(0);
+ *opts=0;
+ for (k=1;k<argc;k++) {
+ if (argv[k][0]!='-') break; /* File names */
+ switch(argv[k][1]) {
+ case 'i': (*opts)|=IIND;
+ break; /* No incidences */
+ default:
+ for(i=1;(opt=argv[k][i])!=0;i++)
+ switch(opt) {
+ case 'G': /* Give grade */
+ (*opts)|=GRADE; break;
+ case 'p': /* Give plain total */
+ (*opts)|=PLAIN; break;
+ case 'S': /* statistics */
+ (*opts)|=STAT; break;
+ case 'a': /* Give answers */
+ (*opts)|=ANSW; break;
+ case 'I': /* Output incidences */
+ (*opts)|=OIND; break;
+ default:
+ fprintf(stderr, UNKO_str,argv[0]);
+ return(0);
+ }
+ }
+ }
+ *dataF= fopen(argv[k++],"r");
+ if(!(*dataF)) return(0);
+ /* Read the file header*/
+ nq=0; pb[0]=0; npag=0;
+ do {
+ if(!fgets(rec,50,*dataF)) break;
+ rcs=sscanf(rec, "\\Key %ld %hd\n",&key, &df);
+ if(sscanf(rec, "\\opts %hd %hd %hd",&i, &na,&cref)) {
+ rcs++;
+ qn[i-1].ref=cref;
+ qn[i-1].nopt=na;
+ }
+ if(sscanf(rec, "\\pagebot %hd\n",&i)) {
+ rcs++;
+ pb[++npag]=i;
+ nq= nq<i? i: nq;
+ }
+ } while (rcs>0);
+ for(j=0,i=1; i<=npag; i++)
+ for(m=1; j<pb[i]; j++) {
+ qn[j].w= m; /* printf("%ld ",m); */
+ m*=(qn[j].nopt+1);
+ }
+ fprintf(stderr,
+ "\nReading header\nkey= %ld, df= %hd, nq=%hd\n",key,df,nq);
+ if(argc<=k) return(1); /* Use the same file */
+ fclose(*dataF);
+ if(argv[k][0]=='-')
+ *dataF= stdin;
+ else {
+ *dataF= fopen(argv[k],"r");
+ if(!(*dataF)) return(0);
+ }
+ return(1);
+}
+
+
+
diff --git a/macros/generic/knst/knst.tex b/macros/generic/knst/knst.tex
new file mode 100644
index 0000000000..7038f45883
--- /dev/null
+++ b/macros/generic/knst/knst.tex
@@ -0,0 +1,256 @@
+%%% AUTHOR: Jordi Saludes <saludes@grec.upc.es>
+%%% DATE: 12/9/1996
+%%% FILE: knst.tex
+%%% knapsack test macros.
+\catcode`@=11
+%% Shift Register
+%% from H. van der Meer, TUB 15, 1
+\newcount\@SR
+\def\@SRconst{2097152}
+\def\SRset#1{\global\@SR#1\relax}%
+\def\@SRadvance{\bgroup
+ \ifnum\@SR<\@SRconst\relax
+ \@A=0
+ \else\@A=1\fi
+ \ifodd\@SR
+ \advance\@A by1 \fi
+ \global\divide\@SR by2
+ \ifodd\@A
+ \global\advance\@SR\@SRconst\relax\fi
+ \egroup}
+%% Arithmetic
+\newcount\@A
+\newcount\@B
+\newcount\@C
+\newcount\@x \@x=0\relax
+\newcount\@y \@y=0\relax
+\newcount\@w
+\newcount\key
+\newcount\df \df=1\relax
+\def\qtnno{\the\@x\relax}
+\def\inc@#1{\advance#1 by1\relax}
+\def\mod@A#1{\@B=\@A \divide\@B by#1
+ \multiply\@B by#1
+ \advance\@A by-\@B\relax}
+\def\gcd#1#2{{\@A=#1 \@C=#2
+ \loop\mod@A\@C
+ \ifnum\@A>0
+ \@B=\@C \@C=\@A \@A=\@B
+ \repeat
+ \ifnum\@C=1\else
+ \errmessage{Invalid stepper/version
+number "#1"}\fi}}
+\def\adv@w{{\inc@\@y
+ \global\multiply\@w by \@y}}
+\def\labelno{{\@A=\@B
+ \mod@A\key\multiply\@A by\df \the\@A}}
+%% Boxing and unboxing
+\newtoks\pfootline
+\newtoks\pheadline
+\newbox\lqtn@bx
+\newbox\lanw@bx
+\newbox\canw@bx
+\newbox\cqtn@bx
+\def\new@page{\unvbox\lqtn@bx
+ \vfill\penalty-10000
+ \global\@w=\verno \adv@w}
+\def\append@bx#1#2{%
+ \setbox#1=\vbox{\unvbox#1 #2}}
+\def\prepend@bx#1#2{%
+ \setbox#1=\vbox{#2\unvbox#1}}
+\def\add@anw{\@SRadvance
+ \iffix@anw
+ \global\append@bx{\lanw@bx}{\theanw}%
+ \else
+ \ifodd\@SR
+ \global\prepend@bx{\lanw@bx}{\theanw}%
+ \else
+ \global\append@bx{\lanw@bx}{\theanw}%
+ \fi\fi}%
+\def\add@qtn{\@SRadvance
+ \iffix@qtn
+ \global
+ \append@bx{\lqtn@bx}{\unvbox
+ \cqtn@bx}%
+ \else
+ \ifodd\@SR
+ \global
+ \prepend@bx{\lqtn@bx}{\unvbox
+ \cqtn@bx}%
+ \else
+ \global
+ \append@bx{\lqtn@bx}{\unvbox
+ \cqtn@bx}%
+ \fi\fi}
+\def\fix{\global\fix@anwtrue\relax}%
+\def\fixqtn{\global\fix@qtntrue\relax}%
+\def\qtn{\global\inc@\@x
+ \@y=0 \@B=0
+ \ifplain\else
+ \ifnum\@x>\botqtn
+ \new@page\@next\fi\fi
+ \rightanw=0
+ \global\fix@anwfalse
+ \setbox\cqtn@bx=\vbox\bgroup
+ \noindent\qtn@pr}
+\def\endqtn{\egroup\add@anw
+ \ifplain\ifnum\rightanw=0
+ \immediate\write16{There is no
+ option marked in question
+ \the\@x}\fi\fi
+ \setbox\cqtn@bx=\vbox{\box\cqtn@bx
+ \preanwskip\box\lanw@bx
+ \qtnskip}%
+ \adv@w\wr@anw
+ \ifplain
+ \ifnum\@w>\key
+ \message{*}\new@page\fi
+ \else
+ {\@A=\@w \mod@A\key \global\@w=\@A}\fi
+ \mark{\noexpand
+ \themark{\the\@x}{\the\@w}}
+ \message{.}\add@qtn}
+\def\Anw{\ifnum\rightanw>0
+ \errmessage{There are several
+ options marked in question
+ \the\@x}\fi
+ \global\rightanw=\@y
+ \global\inc@\rightanw
+ \anw}
+\def\anw{\egroup
+ \ifnum\@y=0\else
+ \add@anw\fi
+ \advance\@B by\@w\relax\inc@\@y
+ \setbox\canw@bx=\vtop\bgroup
+ \relax\noindent}
+\newif\ifplain
+\plainfalse
+\newcount\verno \verno=0
+\newcount\rightanw
+\newif\iffix@anw
+\newif\iffix@qtn
+\fix@qtnfalse
+\let\read@line=\relax
+\let\@read=\relax
+\def\theanw{\hbox{\vrule
+ height10pt width\z@\relax
+ \anwprompt\ \box\canw@bx\hfill}}
+\newcount\verno
+\newwrite\anwfile
+\newwrite\auxfile
+\newdimen\labelw
+\def\test#1{\key=#1
+ \setbox3=\hbox{\multiply\key by\df
+ \the\key}%
+ \labelw=\wd3\relax
+ \ifnum\verno<1\relax
+ \immediate
+ \openin\auxfile=\jobname.aux\relax
+ \read\auxfile to\@read \@read
+ \immediate\closein\auxfile\relax\fi
+ \gcd{\the\verno}{\the\key}
+ \@SRadvance
+ \global\@w=\verno
+ \header
+ \setbox\lqtn@bx=\vbox{}
+ \ifplain
+ \message{Plain version}\SRset{0}%
+ \global\@w=1
+ \else
+ \message{Version \the\verno}
+ \immediate
+ \openin\anwfile=\jobname.ans\relax
+ \fi\@next}
+\def\endtest{
+ \ifplain
+ \write\anwfile{\string
+ \Key\space\the\key\space
+ \the\df\space}%
+ \closeout\anwfile
+ \else
+ \closein\anwfile\fi
+ \unvbox\lqtn@bx\vfill\supereject\end}
+\def\stepversion#1{\gcd{#1}{\the\key}%
+ \immediate
+ \openout\auxfile=\jobname.aux\relax
+ {\ifnum\@SR=0
+ \@SR=\@SRconst
+ \divide\@SR by3\fi
+ \@SRadvance
+ \@A=\verno
+ \multiply\@A by#1\relax
+ \mod@A\key\relax
+ \immediate\write\auxfile{\string
+ \verno=\the\@A\space
+ \string\SRset{\the\@SR}}}%
+ \immediate\closeout\auxfile}
+\def\plainversion{\plaintrue\verno=1
+ \let\newpage=\new@page
+ \def\wr@anw{\immediate
+ \write\anwfile{\string\opts
+ \space\the\@x\space\the\@y\space
+ \the\rightanw\space\the\@w\space}}
+ \immediate
+ \openout\anwfile=\jobname.ans\relax
+ \def\qtn@pr{\llap{\qtnprompt}}
+\def\anwprompt{\hbox to\labelw{\hss
+ \ifnum\rightanw=\@y
+ $\bullet$\ \fi}}
+\footline=\pfootline
+\headline=\pheadline
+\let\@next=\relax
+\output={\botmark\plainoutput}
+\def\add@qtn{\unvbox\cqtn@bx\penalty-50}}
+\def\themark#1#2{\immediate
+ \write\anwfile{\string\pagebot
+ \space #1\space}%
+ \global\divide\@w by#2\relax}
+\let\wr@anw=\relax
+\let\qtn@pr=\relax
+\def\@next{\read\anwfile to\@read
+ \@read}
+\def\Key #1 #2 {\@next}
+\def\opts #1 #2 #3 #4 {\@next}
+\def\pagebot #1 {\def\botqtn{#1}}
+\def\botqtn{1000}
+\let\newpage=\relax
+%% Style commands
+\def\qtnprompt{\bf\qtnno.\ }
+\pfootline={\hss
+ Plain version $\dots$\hss}
+\pheadline={\ifnum\folio>1
+ \thetitle\hss\folio\else\hss\fi}
+\footline={Page \folio. Version
+ {\tt\the\verno}.
+ $\Sigma=$\hskip7em
+ $\Sigma/\the\df=$\hfill}
+\def\date#1{\def\thedate{#1}}
+\def\title#1{\def\thetitle{#1}}
+\def\header{
+ \line{\bf\thetitle\hfill\thedate}%
+ \smallskip
+ \line{Name:\ \dotfill}%
+ \medskip
+{\baselineskip=9pt
+ \noindent\small
+ Each question has
+ only one right answer.
+ For each page, add the numbers at
+ the left side of
+ your answers and write the total by
+ the $\Sigma$. Divide the total
+ by~\the\df. If your addition is right,
+ the quotient must be integer
+ (But this does not mean
+ that your choices were correct).
+ Do not forget to write down your name,
+ but do not write anything else in the
+ exam sheet.\par}
+ \medskip}
+\df=7
+\def\anwprompt{\hbox to\labelw{\it
+ \hss\labelno\ $\diamond$}}
+\def\qtnskip{\vskip 20pt plus25pt }
+\let\preanwskip=\smallskip
+\font\small=cmr8
+
diff --git a/macros/generic/laan/fifo.art b/macros/generic/laan/fifo.art
new file mode 100644
index 0000000000..680b5d281a
--- /dev/null
+++ b/macros/generic/laan/fifo.art
@@ -0,0 +1,781 @@
+%FIFO and LIFO sing the BLUes (cgl, fifo.art)
+%Version: 30 Aug 92
+\input tugboat.sty
+\def\rtitle{\hbox to \pagewd{\tenrm MAPS92.2\hfil
+ {\it FIFO and LIFO sing the BLUes}}
+}
+\def\rfoot{\hbox to\pagewd{\sevenrm \rlap{Draft: \today}\hfil-\the\pageno-
+\hfil\llap{\copyright cgl}}
+}
+\pageno=1
+\overfullrule=0pt
+\def\star{*}
+\title * FIFO and LIFO sing the BLUes\footnote\star
+{Earlier versions appeared in MAPS92.1 and proceedings Euro\TeX\ 92.} *
+\author * Kees van der Laan *
+\address * Hunzeweg 57, 9893PB\\
+ Garnwerd (Gr), The Netherlands *
+\netaddress * cgl@rug.nl *
+\article
+%Footnote counter and footnote indexer
+\newcount\fcnt
+\def\ftn#1{\global\advance\fcnt1 \footnote{${}^{\the\fcnt}$}{#1}}
+\let\ea=\expandafter
+%
+\head * Abstract *
+FIFO, First-In-First-Out, and LIFO, Last-In-First-Out, are well-known
+techniques for handling sequences. In \TeX\ macro writing
+they are abundant but are not easily recognized as such.
+\TeX{} templates for FIFO and LIFO are given and their use illustrated.
+The relation with Knuth's |\dolist|, ex11.5,
+and |\ctest|, p.376, is given.
+%
+\subhead*Keywords* FIFO, LIFO, list processing, plain \TeX,
+education, macro writing.
+%
+\head * Introduction *
+It started with the programming of the Tower of Hanoi in \TeX, van der
+Laan (1992a). For printing each tower
+the general FIFO\Dash First-In-First-Out\ftn{See Knuth (1968), section
+2.2.1.}\Dash approach was considered.\ftn{In the Tower of Hanoi article
+Knuth's list data\-structure was finally used\Dash\TeX book Appendix D.2\Dash
+with FIFO inherent.}
+In literature (and courseware) the programming of these kind of things
+is done differently by each author, inhibiting intelligibility. In pursuit
+of Wirth (1976), \TeX\ templates for the FIFO (and LIFO) paradigm
+will hopefully improve the situation.
+%
+\head * FIFO *
+In the sequel, I will restrict the meaning of FIFO to
+an input stream which is processed argument-wise.
+FIFO can be programmed in \TeX\ as template
+\verbatim
+\def\fifo#1{\ifx\ofif#1\ofif
+ \fi\process#1\fifo}
+\def\ofif#1\fifo{\fi}
+\endverbatim
+\noindent
+Printing of a tower
+\def\fifo#1{\ifx\ofif#1\ofif
+ \fi\process#1\fifo}
+\def\ofif#1\fifo{\fi}
+\def\process#1{\hbox to3ex{%
+\hss\vrule width#1ex height1ex\hss}}
+\vbox{\baselineskip1.1ex\fifo12\ofif}
+can be done via
+\verbatim
+\def\process#1{\hbox to3ex{%
+\hss\vrule width#1ex height1ex\hss}}
+\vbox{\baselineskip1.1ex\fifo12\ofif}
+\endverbatim
+\noindent
+For the termination of
+the tail recursion the same \TeX nique
+as given in the \TeX book, p.379, in the macro |\deleterightmost|,
+is used.
+This is elaborated as |\break| in Fine (1992),
+in relation to termination of the loop.
+The idea is that when |\ofif| is encountered in the input stream,
+all tokens in the macro
+up to and including |\fifo|---the start for the next level of
+recursion---are gobbled. Because the matching |\fi| is gobbled too,
+this token is inserted via the replacement text of |\ofif|.
+This \TeX nique is better than Kabelschacht's, (1987), where
+the token preceding the |\fi| is expanded after the |\fi| via
+the use of |\expandafter|. When this is applied the exchange occurs at
+each level in the recursion. It also better than the |\let\nxt=...|
+\TeX nique, which is used in the \TeX book, for example in
+|\iterate|, p.219, because there are no assignments.
+
+\smallskip\noindent
+My first version had the two tokens
+after {\tt\char92ifx} reversed\Dash a cow flew by\Dash
+and made me realize the non-commutativity of the
+{\it first level\/} arguments of \TeX's conditionals.
+For example, |\ifx aa\empty...| differs from |\ifx\empty aa...|,
+and |\if\ab\aa...| from |\if\aa\ab...|, with |\def\aa{aa}|, |\def\ab{ab}|.
+In math, and in programming languages like PASCAL,
+the equality relation is commutative,\ftn{So are
+\TeX's {\tt\char92if}-s after expansion.}
+and no such thing as expansion comes in between.
+When not alert with respect to expansion, \TeX's |\if|-s can surprise you.
+\smallskip\noindent
+The |\fifo| macro is a basic one.
+It allows to proceed along a list\Dash at least conceptual\Dash and
+to apply a (user) specified process to each list element. By this approach
+the programming of going through a list is {\it separated\/} from
+the various processes to be applied to the elements.\ftn{If a list
+has to be {\it created,} Knuth's list data\-structure might be used, however,
+simplifying the execution of the list. See \TeX book Appendix D.2.}
+It adheres to the separation of concerns principle, which I consider
+fundamental.
+\smallskip\noindent
+The input stream is processed argument-wise, with the consequence
+that first level braces will be gobbled. Beware!
+Furthermore, no outer control sequences are allowed, because no
+|\long| has been provided before the |\def|.
+%
+\smallskip\noindent
+A general approach---relieved from the restrictions on the input stream:
+{\it every token\/} is processed until |\ofif|---%
+is given in the \TeX book ex11.5 (|\dolist...|) and on p.376
+(|\ctest...|). After adaption to the |\fifo| notation and to
+the use of macros instead of token variables, Knuth's
+|\dolist| comes down to
+\verbatim
+\def\fifo{\afterassignment\tap
+\let\nxt= }
+\def\tap{\ifx\nxt\ofif\ofif
+ \fi\process\nxt\fifo}
+\def\ofif#1\fifo{\fi}
+\endverbatim
+\noindent This general approach is indispensable for macro writers.
+My less general approach can do a lot already, for particular
+applications, as will be shown below.
+But, \dots beware of its limitations.
+%
+\subsubhead*Variations*
+The above |\fifo| can be seen as a
+template for encoding tail recursion
+in \TeX, with arguments taken from the input stream one after another.
+An extension is to take two arguments from the input stream
+at a time, with the second argument to look ahead.
+\verbatim
+\def\fifo#1#2{\process#1\ifx\ofif#2
+ \ofif\fi\fifo#2}
+\def\ofif#1\ofif{\fi}
+\endverbatim
+\noindent And what about recursion without parameters?
+A nice example of that is
+a variant implementation of Knuth's |\iterate| of the |\loop|,
+\TeX book, p.219
+\verbatim
+\def\iterate{\body\else\etareti
+ \fi\iterate}
+\def\etareti#1\iterate{\fi}
+\endverbatim
+%
+\subhead *Variable number of parameters*
+\TeX\ macros can take at most 9 parameters. The above |\fifo| macro can
+be seen as a macro which is relieved from that restriction.
+Every group, or admissible token,
+ in the input stream after |\fifo| up to and including
+|\ofif|, will become an argument to the macro.
+When the |\ofif| token is reached, the recursion
+will be terminated.\ftn{%
+ Another way to circumvent the 9 parameters limitation
+ is to associate names to the quantities to be used as arguments,
+ let us say via def's,
+ and to use these quantities via their names in the macro.
+ This is Knuth's parameter mechanism and
+ is functionally related to the so-called keyword parameter mechanism of
+ command languages, and for example ADA.}
+%
+\subsubhead*Unknown number of arguments*
+Tutelaers (1992), as mentioned by Eijkhout (1991),
+faced the problem of inputting a chess position.
+The problem is characterized by an unspecified number of
+positions of pieces, with for the pawn positions
+the identification of the pawn generally omitted.
+Let us denote the pieces by the capital letters
+K(ing), Q(ueen), B(ishop), (k)N(ight), R(ook), and P(awn),
+with the latter symbol default. The position on the board is indicated by
+a letter a, b, c, \dots, or h,
+followed by a number, 1, 2, \dots, or 8.
+Then, for example,
+\verbatim
+\position{Ke1, Qd1, Na1, e2, e4}
+\endverbatim
+\noindent
+should entail the invokes
+\verbatim
+\piece{K}{e1}\piece{Q}{d1}\piece{N}{a1}
+\piece{P}{e2}\piece{P}{e4}
+\endverbatim
+\noindent
+This can be done by an appropriate definition
+of |\position|, and an adaption of
+the |\fifo| template,
+\verbatim
+\def\position#1{\fifo#1,\ofif,}
+\def\fifo#1,{\ifx\ofif#1\ofif
+\fi\process#1\relax\fifo}
+\def\ofif#1\fifo{\fi}
+\def\process#1#2#3{\ifx\relax#3
+\piece{P}{#1#2}\else\piece#1{#2#3}\fi}
+\endverbatim
+\noindent With the following definition (simplified in relation to Tutelaers)
+\verbatim
+\def\piece#1#2{ #1-#2}
+\endverbatim
+\noindent we get
+{%local scope for this \fifo
+\def\position#1{\fifo#1,\ofif,}
+\def\fifo#1,{\ifx\ofif#1\ofif
+ \fi\process#1\relax\fifo}
+\def\ofif#1\fifo{\fi}
+\def\process#1#2#3{\ifx\relax#3
+\piece{P}{#1#2}\else\piece#1{#2#3}\fi}
+\def\piece#1#2{ #1-#2}
+\position{Ke1, Qd1, Na1, e2, e4}.
+}
+\par\noindent For an unknown number of arguments
+at two levels see the Nested FIFO section.
+
+\subhead *Length of string*
+An alternative to Knuth's macro |\getlength|, \TeX book p.219,
+is obtained via the use of |\fifo| with
+\verbatim
+\newcount\length
+\def\process#1{\advance\length1 }
+\endverbatim
+%
+\noindent Then |\fifo aap noot\ofif| |\number\length|
+\newcount\length \def\process#1{\advance\length1 }\fifo aap noot\ofif
+\hfil\break yields the length \ea|\number\length|.\ftn{Insert
+{\tt\char92obeyspaces} when the spaces should be counted as well.}
+%
+\subhead*Number of asterisks*
+An alternative to Knuth's |\atest|, \TeX book, p.375, for determining
+the number of asterisks, is obtained via |\fifo| with
+\verbatim
+\def\process#1{\if*#1\advance\acnt by1
+\fi}\newcount\acnt
+\endverbatim
+\noindent {Then |\fifo abc*de*\ofif| |\number\acnt| yields
+the number of asterisks:
+\def\process#1{\if*#1\advance\acnt by1 \fi}\newcount\acnt%
+\fifo abc*de*\ofif\ea|\number\acnt|.}\ftn{As the reader
+should realize, this works correctly when there are
+first level asterisks {\it only\/}. For counting at all
+levels automatically,
+a more general approach is needed, see Knuth's {\tt\char92ctest}, p.376.}
+%
+\subhead *Vertical printing*
+David Salomon treats the problem of vertical printing in his courseware.
+Via an appropriate definition of |\process|
+and a suitable invoke of |\fifo| it is easily obtained.
+\verbatim
+\def\process#1{\hbox{#1}}
+xy\vbox{\fifo abc\ofif}yx
+\endverbatim
+yields
+\def\process#1{\hbox{#1}}
+xy\vbox{\offinterlineskip
+ \fifo abc\ofif}yx.
+%
+\subhead *Delete last character of argument*
+Again an example due to David Salomon. It is related to |\deleterightmost|,
+\TeX book p.379.
+Effective is the following, where a second parameter for |\fifo|
+is introduced to look ahead, which is inserted back
+when starting the next recursion level
+\verbatim
+\def\gobblelast#1{\fifo#1\ofif}
+\def\fifo#1#2{\ifx\ofif#2\ofif
+ \fi#1\fifo#2}
+\def\ofif#1\ofif{\fi}
+\endverbatim
+{%local mods for fifo
+\def\gobblelast#1{\fifo#1\ofif}
+\def\fifo#1#2{\ifx\ofif#2\ofif
+ \fi#1\fifo#2}
+\def\ofif#1\ofif{\fi}
+\noindent Then |\gobblelast{aap}|
+will yield \hbox{\tt\gobblelast{aap}}.
+}
+%
+\subhead*Vowels, voil\`a*
+Schwarz (1987) coined the problem to print vowels
+in bold face.\ftn{%
+His solution mixes up the picking up of list
+elements and the process to be applied. Moreover, his nesting of
+{\tt\char92if}-s
+in order to determine whether a character is a vowel or not, is not elegant.
+Fine (1992)'s solution, %to the latter problem
+via a switch, is not elegant either.}
+The problem can be split into two parts. First, the general part of going
+character by character through a string, and second, decide whether the
+character at hand is a vowel or not.
+\par\noindent
+For the first part use |\fifo| (or Knuth's |\dolist|).
+For the second part, combine the vowels into a string, |aeiou|,
+and the problem can be reduced
+to the question $\langle char\rangle\in{}$|aeiou|?
+Earlier, I used this approach
+in searching a card in a bridge hand, van der Laan (1990,
+the macro |\strip|). That was
+well-hidden under several piles of cards, I presume? The following encoding
+is related to |\ismember|, \TeX book, p.379
+\par\noindent
+\verbatim
+\newif\iffound
+\def\loc#1#2{%locate #1 in #2
+\def\locate##1#1##2\end{\ifx\empty##2%
+\empty\foundfalse\else\foundtrue\fi}%
+\locate#2#1\end}
+\endverbatim
+
+\noindent
+Then |\fifo Audacious\ofif| yields
+\newif\iffound%
+\def\loc#1#2{%locate #1 in #2
+\def\locate##1#1##2\end{\ifx\empty##2\empty%
+\foundfalse\else\foundtrue\fi}%
+\locate#2#1\end}%
+\def\process#1{\uppercase{\loc#1}{AEIOU}%
+\iffound{\bf#1}\else#1\fi}%
+\fifo Audacious\ofif,
+with
+\verbatim
+\def\process#1{\uppercase{\loc#1}%
+{AEIOU}\iffound{\bf#1}\else#1\fi}
+\endverbatim
+\noindent
+\subsubhead*Variation*
+If in the invoke |\locate#2#1| a free symbol is inserted between
+|#2| and |#1|, then |\loc| can be used to locate substrings.
+And because
+$\{string_1\in string_2\}\wedge\{string_2\in string_1\} \Rightarrow string_1=
+string_2$,
+the variant can be used for the equality test for strings.
+See also the Multiple FIFO
+subsection, for general and more effective alternatives for equality tests
+of strings.
+%
+\subhead*Processing lines*
+What about processing lines of text?
+In official, juridical, documents it is a habit to fill out lines of text
+with dots.\ftn{The problem was posed at Euro\TeX\ 91 by Theo Jurriens.}
+This can be solved by making the end-of-line character
+active, with the function to fill up the line.
+A general approach where we can |\process| the line, and not only append to it,
+can be based upon |\fifo|.
+
+\noindent One can wonder, whether the purpose can't be better
+attained by filling up the last line of paragraphs by dots, because \TeX's
+justifies with paragraphs as units.
+%
+\subhead * Processing words *
+What about handling a list of words?
+This can be achieved by modifying the |\fifo| template
+into a version which picks up words, |\fifow|,
+and to give |\processw| an appropriate function.
+\verbatim
+\def\fifow#1 {\ifx\ofifw#1\ofifw\fi
+ \processw{#1}\ \fifow}
+\def\ofifw#1\fifow{\fi}
+\endverbatim
+%
+\subsubhead * Underlining words *
+In print it is uncommon to emphasize words by underlining.
+Generally another font is used, see discussion of exercise 18.26
+in the \TeX book.
+However, now and then people ask for (poor man's) underlining of words.
+The following |\processw| definition underlines
+words picked up by |\fifow|
+\verbatim
+\def\processw#1{\vtop{\hbox{\strut#1}
+ \hrule}}
+\endverbatim
+\noindent Then
+\verbatim
+\leavevmode\fifow leentje leerde lotje
+lopen langs de lange lindenlaan \ofifw
+\unskip.
+\endverbatim
+\noindent yields
+\def\fifow#1 {\ifx\ofifw#1\ofifw\fi
+ \processw{#1}\ \fifow}
+\def\ofifw#1\fifow{\fi}
+\def\processw#1{\vtop{\hbox{\strut#1}\hrule}}
+\leavevmode\fifow leentje leerde lotje lopen
+langs de lange lindenlaan \ofifw \unskip.
+\immediate\write16{Leentje passed}
+\par\noindent
+%
+\head *Nested FIFO*
+One can nest the FIFO paradigm. For
+processing lines word by word,
+or words character by character.
+%
+\subhead*Words character by character*
+Ex11.5, can be solved by processing words character by character.
+A solution, to a slightly simplified version of the exercise, reads
+\verbatim
+\fifow Though exercise \ofifw \unskip.
+%with
+\def\processw#1{\fifo#1\ofif}
+\def\process#1{\boxit#1}
+\def\boxit#1{\setbox0=\hbox{#1}\hbox
+{\lower\dp0\vbox{\offinterlineskip\hrule
+\hbox{\vrule\phantom#1\vrule}\hrule}}}
+\endverbatim
+\noindent yields
+%
+\def\processw#1{\fifo#1\ofif}
+\def\process#1{\boxit#1}
+\def\boxit#1{\setbox0=\hbox{#1}\hbox
+{\lower\dp0\vbox{\offinterlineskip\hrule
+\hbox{\vrule\phantom#1\vrule}\hrule}}}
+\fifow Though exercise \ofifw \unskip.
+%
+\immediate\write16{Exc11.5 passed}
+\smallskip\noindent In the spirit of |\dolist...|, ex11.5, is
+\verbatim
+%variant neglecting word structure
+\def\fifo{\afterassignment\tap
+\let\nxt= }
+\def\tap{\ifx\nxt\ofif\ofif
+ \fi\process\nxt\fifo}
+\def\ofif#1\fifo{\fi}
+\def\process#1{\if\space\nxt\
+\else\boxit#1\fi}
+\fifo Though exercise\ofif.
+\endverbatim
+{\noindent with the same result
+\def\fifo{\afterassignment\tap
+\let\nxt= }
+\def\tap{\ifx\nxt\ofif\ofif
+ \fi\process\nxt\fifo}
+\def\ofif#1\fifo{\fi}
+\def\process#1{\if\space\nxt\
+\else\boxit#1\fi}
+\fifo Though exercise\ofif.
+}
+\subhead* Mark up natural data*
+Data for |\h(v)align| needs |&| and |\cr| marks. We can get plain \TeX\
+to append a |\cr| at each (natural) input line, \TeX book p.249.
+An extension of this is to get plain \TeX\ to insert |\cs|-s,
+column separators, and |\rs|-s, row separators, and eventually to add |\lr|,
+last row, at the end, in natural data.
+For example prior to an invoke of |\halign|, one wants
+to get plain \TeX\ to do the transformation %
+%
+\let\nx=\noexpand
+\def\cs{{\sevenrm{\tt\char92}cs}}
+\def\rs{{\sevenrm{\tt\char92}rs}}
+\def\lr{{\sevenrm{\tt\char92}lr}}
+\def\bdata{\bgroup\obeylines\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+\def\markup#1{\ea\xdef\ea#1\ea{\ea
+ \fifol#1\ofifl}}
+{\catcode`\^^M=13
+\gdef\fifol#1^^M#2{\fifo#1\ofif%
+\ifx\ofifl#2\nx\lr\ofifl
+\fi\nx\rs\fifol#2}
+}
+\def\ofifl#1\ofifl{\fi}
+\def\fifo#1#2{#1\ifx\ofif#2\ofif
+ \fi\nx\cs\fifo#2}
+\def\ofif#1\ofif{\fi}
+$$\vcenter{\hbox{P*ON}\kern.5ex
+ \hbox{DEK*}}
+\,\Rightarrow\,
+\bdata P*ON
+DEK*
+\edata\markup\data
+\vcenter{\hbox{\data}}$$
+
+\noindent This can be done via
+\verbatim
+$$\vcenter{\hbox{P*ON}\kern.5ex
+ \hbox{DEK*}} \,\Rightarrow\,
+%And now right, mark up part
+\bdata P*ON
+DEK*
+\edata\markup\data
+\vcenter{\hbox{\data}}$$
+\endverbatim
+\noindent with
+\verbatim
+\def\bdata{\bgroup\obeylines\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+\def\markup#1{\ea\xdef\ea#1\ea{\ea
+ \fifol#1\ofifl}}
+\endverbatim
+\noindent and auxiliaries
+\verbatim
+\let\nx=\noexpand
+{\catcode`\^^M=13
+\gdef\fifol#1^^M#2{\fifo#1\ofif%
+ \ifx\ofifl#2\nx\lr\ofifl
+ \fi\nx\rs\fifol#2}}
+\def\ofifl#1\ofifl{\fi}
+\def\fifo#1#2{#1\ifx\ofif#2\ofif
+ \fi\nx\cs\fifo#2}
+\def\ofif#1\ofif{\fi}
+%with for this example
+\def\cs{{\sevenrm{\tt\char92}cs}}
+\def\rs{{\sevenrm{\tt\char92}rs}}
+\def\lr{{\sevenrm{\tt\char92}lr}}
+\endverbatim%
+\immediate\write16{Natural data passed}%
+\noindent
+The above came to mind when typesetting crosswords,\ftn{With *,
+or {\tt\char32}, given an appropriate function.} van der Laan (1992b), while
+striving after the possibility to allow natural
+input, independent of |\halign| processing.
+%
+\head*Multiple FIFO*
+What about FIFO for more than one stream?
+For example comparing strings, either for
+equality or with respect to lexicographic ordering?
+Eijkhout (1992, p.137, 138) provided for these applications the macros
+\par
+\indent
+|\ifAllChars...\Are...\TheSame|, \par\noindent
+and \par\indent
+|\ifallchars...\are...\bfore|. \par\noindent
+The encodings are focussed at mouth processing.
+The latter contains many |\expandafter|-s.
+
+\noindent
+A basic approach is: loop through the strings character by character,
+and compare the characters until either the
+assumed condition is no longer true,
+or the end of either one of the string, has been reached.
+%
+\subhead*Equality of strings*
+The \TeX-specific encoding, where use has been made of the property of
+|\ifx| for control sequences, reads
+\verbatim
+\def\eq#1#2{\def\st{#1}\def\snd{#2}
+\ifx\st\snd\eqtrue\else\eqfalse\fi}
+\endverbatim
+\noindent As a stepping stone for lexicographic comparison,
+consider the general encoding
+\verbatim
+\def\eq#1#2{\continuetrue\eqtrue
+\loop\ifx#1\empty\continuefalse\fi
+ \ifx#2\empty\continuefalse\fi
+\ifcontinue \nxt#1\nxtt \nxt#2\nxtu
+ \ifx\nxtt\nxtu
+ \else\eqfalse\continuefalse\fi
+\repeat
+\ifx\empty#1\ifx\empty#2
+\else\eqfalse\fi\else\eqfalse\fi}
+\endverbatim
+with auxiliaries
+\verbatim
+\newif\ifcontinue\newif\ifeq
+\def\nxt#1#2{\def\n##1##2\n{%
+ \gdef#1{##2}\gdef#2{##1}}\ea\n#1\n}
+\endverbatim
+\noindent
+Then
+\verbatim
+\def\t{abc}\def\u{ab}
+\eq\t\u\ifeq$abc=ab$\else$abc\not=ab$\fi
+\endverbatim
+\noindent yields
+{\newif\ifcontinue\newif\ifeq
+\def\nxt#1#2{\def\n##1##2\n{
+ \gdef#1{##2}\gdef#2{##1}}\ea\n#1\n}
+\def\eq#1#2{\continuetrue\eqtrue%
+\loop\ifx#1\empty\continuefalse\fi
+ \ifx#2\empty\continuefalse\fi
+\ifcontinue\nxt#1\nxtt\nxt#2\nxtu
+ \ifx\nxtt\nxtu
+ \else\eqfalse\continuefalse\fi
+\repeat
+\ifx\empty#1\ifx\empty#2
+\else\eqfalse\fi\else\eqfalse\fi}
+\def\t{abc}\def\u{ab}
+\eq\t\u\ifeq$abc=ab$\else$abc\not=ab$\fi.
+}
+\subhead*Lexicographic comparison*
+Assume that we deal with lower case and upper case letters only.
+The encoding of |\leq| follows the same flow as the equality test, |\eq|,
+but differs in the test, because of \TeX's expansion mechanisms
+\verbatim
+\def\sleq#1#2{%#1, #2 def's
+\global\slttrue {\continuetrue
+\loop\ifx#1\empty\continuefalse\fi
+ \ifx#2\empty\continuefalse\fi
+\ifcontinue\nxte#1\nxtt\nxte#2\nxtu
+ \ea\ea\ea\llt\ea\nxtt\nxtu
+\repeat}
+\ifslt\ifx\empty#2\ifx\empty#1
+ \else\global\sltfalse
+ \fi
+ \fi
+\fi}
+\endverbatim
+with auxiliaries
+\verbatim
+\newif\ifcontinue\global\newif\ifslt
+\def\nxte#1#2{\def\pop##1##2\pop{%
+\xdef#1{##2}\xdef#2{##1}}\ea\pop#1\pop}
+\def\llt#1#2{\uppercase{\ifnum`#1=`#2}
+\else\continuefalse
+ \uppercase{\ifnum`#1>`#2}{}\global\sltfalse\fi
+\fi}
+\endverbatim
+\noindent For example
+\verbatim
+\def\t{ABC}\def\u{ab}\leq\t\u
+\iflt$ABC<ab$\else$ABC>ab$\fi
+\endverbatim
+\noindent yields
+{
+\newif\ifcontinue\global\newif\ifslt
+\def\nxte#1#2{\def\pop##1##2\pop{\xdef#1{##2}
+ \xdef#2{##1}}\ea\pop#1\pop}
+\def\llt#1#2{\uppercase{\ifnum`#1=`#2}
+\else\continuefalse
+ \uppercase{\ifnum`#1>`#2}{}\global\sltfalse\fi
+\fi}
+%
+\def\sleq#1#2{%#1, #2 def's
+\global\slttrue {\continuetrue
+\loop\ifx#1\empty\continuefalse\fi
+ \ifx#2\empty\continuefalse\fi
+\ifcontinue\nxte#1\nxtt\nxte#2\nxtu
+ \ea\ea\ea\llt\ea\nxtt\nxtu
+\repeat}
+\ifslt\ifx\empty#2\ifx\empty#1
+ \else\global\sltfalse
+ \fi
+ \fi
+\fi}
+\def\stra{ABC}\def\strb{ab}
+\stra ? \strb:
+\sleq\stra\strb
+\ifslt $ABC<ab$\else$ABC>ab$\fi.
+\break\hfil
+\def\stra{noot}\def\strb{aap}
+\stra ? \strb:
+\sleq\stra\strb
+\ifslt $noot<aap$\else$noot>aap$\fi.
+}
+%\noindent Interesting is to ponder about a version, which
+%uses the FIFO template with cooperating processes.
+%Another \TeX\ encoding challenge?
+%
+\head *LIFO*
+A modification of the |\fifo|
+macro---|\process{#1}| invoked
+at the end instead of at the beginning---will yield
+the Last-In-First-Out template.
+Of course LIFO can be applied to reversion `on the flight,'
+without explicitly allocating auxiliary storage.%
+\ftn{Johannes Braams drew my attention to Knuth and MacKay (1987),
+which contained among others {\tt\char92reflect...\char92tcelfer}.
+They compare \#1 with {\tt\char92empty}, which is nice. The invoke
+needs an extra token, {\tt\char92empty}\Dash a so-called sentinel,
+see Wirth (1976)\Dash
+to be included before {\tt\char92tcelfer}, however.
+(Knuth and Mackay hide this by another
+macro which invokes {\tt\char92reflect...\char92empty\char92tcelfer}).
+My approach requires at least one argument,
+with the consequence that the empty case must be treated separately,
+or a sentinel %\Dash an extra token to be added to the parameter
+ %in order to terminate the recursion, see Wirth (1976)\Dash
+must be appended after all.
+} %end \ftn
+\verbatim
+\def\lifo#1#2\ofil{\ifx\empty#2
+ \empty\ofil\fi\lifo#2\ofil\process#1}
+\def\ofil#1\ofil{\fi}
+\endverbatim
+\noindent With the identity---|\def\process#1{#1}|,
+or the invoke |\process#1| replaced by |#1|\ftn{Remember the
+stack size limitations.}---the template can
+be used for reversion on the flight
+\def\lifo#1#2\ofil{\ifx\empty#2\empty\ofil
+\fi\lifo#2\ofil#1}
+\def\ofil#1\ofil{\fi}
+For example |\lifo aap\ofil| yields \ea|\lifo aap\ofil|.
+%
+\subhead*Change of radix*
+In the \TeX book a LIFO exercise is provided at p.219:
+print the digits of a number
+in radix 16 representation.
+The encoding is based upon the property
+$$(N\div r^k) \bmod r=d_k, \quad k=0, 1, \dots, n,$$
+with radix r, coefficients $d_k$, %i=0, 1, \dots, n$
+and the number representation
+$$N=\sum^{n}_{k=0}d_k\,r^k.$$
+There are two ways of generating the numbers $d_k$:
+starting with $d_n$, or the simpler one starting with $d_0$,
+with the disadvantage that the numbers are generated in reverse order
+with respect to printing. The latter approach is given in
+\TeX book p.219.
+Adaption of the LIFO template does not provide a solution much
+different from Knuth's, because the numbers, to be typeset, are generated
+in the recursion and not available in the input stream.
+%
+\iffalse
+\head * Further reading *
+Zalmstra and Rogers (1989), apply the FIFO technique to a list of figures\Dash
+or floating bodies\Dash in order to merge the list appropriately with the main
+vertical list in the output routine. This is beyond the scope of this paper.
+\fi
+%
+\head * Conclusion *
+In looking for a fundamental approach to process elements sequentially---not to
+confuse with list processing where the list is also built up, see \TeX book
+Appendix D.2,
+or with processing of {\it every\/} token in the input stream, see
+ex11.5 or p.376---\TeX{} templates for FIFO and LIFO, emerged.
+\smallskip\noindent
+The templates can be used for processing lines, words or characters.
+Also processing of words line by line,
+or characters word by word, can be handled
+via nested use of the FIFO principle.
+\smallskip\noindent
+The FIFO principle along with
+the look ahead mechanism is applied to molding natural data into
+representations required by subsequent \TeX\ processing.
+\smallskip\noindent
+Courseware might benefit from the FIFO approach to
+unify answers of the exercises of the macro chapter.
+\smallskip\noindent
+\TeX's |\ifx...| and |\if...| conditionals are non-commutative
+with respect to their {\it first level\/} operands,
+while the similar mathematical operations are, as are
+the operations in current high-level programming languages.
+\smallskip\noindent
+Multiple FIFO, by comparing strings lexicographically, has been touched upon.
+%
+\head * References *
+%
+\frenchspacing
+\newcount\bcnt
+\def\bib{\global\advance\bcnt1 [\the\bcnt]}
+\item{\bib} Eijkhout, V (1991): \TeX\ by Topic. Addison-Wesley.
+\item{\bib} Fine, J (1992): Some basic control macros for \TeX,
+\tubissue{13}(1), 75\dash83.
+\item{\bib} Hendrickson, A (priv. comm.)
+\item{\bib} Kabelschacht, A (1987):
+|\expandafter| vs.\ |\let| and |\def| in conditionals and
+ a generalization of plain's |\loop|. \tubissue8(2), 184\dash185.
+\item{\bib} Knuth, D.E (1968): The Art of Computer Programming. 1. Fundamental
+ Algorithms. Addison-Wesley.
+\item{\bib} Knuth, D.E (1984): The \TeX book. Addison-Wesley.
+\item{\bib} Knuth, D.E, P. Mackay (1987):
+ Mixing right-to-left texts with left-to-right texts.
+ \tubissue7(1), 14\dash25.
+\item{\bib} Laan, C.G. van der (1990):
+Typesetting Bridge via \TeX, \tubissue{11}(2), 91\dash94.
+\item{\bib} Laan, C.G. van der (1992a):
+Tower of Hanoi, revisited. \tubissue{13}(1), 91\dash94.
+\item{\bib} Laan, C.G. van der (1992b):
+Typesetting Crosswords via \TeX. Euro\TeX\ 92.
+\item{\bib} Laan, C.G. van der (1992c):
+Table Diversions. Euro\TeX\ 92.
+\item{\bib} Salomon, D (1992): Advanced \TeX\ course: Insights \& Hindsights,
+MAPS 92 Special. 254p.
+\item{\bib} Schwarz, N (1987):
+{Einf\"uhrung in \TeX}, Addison-Wesley.
+\item{\bib} Tutelaers, P (1992): A font and a style for typesetting chess
+using \LaTeX\ or \TeX. \tubissue{13}(1), 85\dash90.
+\item{\bib} Wirth, N (1976): Algorithms $+$ Data Structures $=$ Programs.
+ Prentice-Hall.
+\iffalse\item{\bib} Zalmstra, J, D.F. Rogers (1989): A page make-up macro.
+ \tubissue{10}(1), 73\dash81.
+\fi
+\endarticle
+\bye
+
diff --git a/macros/generic/laan/index.txt b/macros/generic/laan/index.txt
new file mode 100644
index 0000000000..8ee5114c52
--- /dev/null
+++ b/macros/generic/laan/index.txt
@@ -0,0 +1,7 @@
+Articles
+ ``FIFO & LIFO sing the blues'' and
+ ``Table diversions''
+ by Kees van der Laan
+ ( ! ! newer than in proceedings ! ! )
+and TUGboat style.
+ \ No newline at end of file
diff --git a/macros/generic/laan/prgtab.tex b/macros/generic/laan/prgtab.tex
new file mode 100644
index 0000000000..489e33e30e
--- /dev/null
+++ b/macros/generic/laan/prgtab.tex
@@ -0,0 +1,1720 @@
+\documentstyle[euro92]{article}% 27 Aug 92
+ %Version 2. Copyright: C.G. van der Laan, cgl@rug.nl, 05941-1525
+\textheight23.5cm\textwidth15.5cm\topmargin0cm
+\evensidemargin1cm \oddsidemargin1cm
+\setlength{\textheight}{23.5cm}\setlength{\textwidth}{15.5cm}
+\setlength{\topmargin}{0cm}
+\setlength{\evensidemargin}{1cm}\setlength{\oddsidemargin}{1cm}
+\begin{document} % Hunzeweg 57, 9893PB, Garnwerd
+\textheight23.5cm\textwidth15.5cm\topmargin0cm
+\evensidemargin1cm \oddsidemargin1cm
+\setlength{\textheight}{23.5cm}\setlength{\textwidth}{15.5cm}
+\setlength{\topmargin}{0cm}
+\setlength{\evensidemargin}{1cm}\setlength{\oddsidemargin}{1cm}
+\title{Table Diversions\thanks{Different from proceedings
+Euro\TeX\ 92 in the encoding of FIFO.}}
+\titlehead{Table Diversions}
+\author{Kees van der Laan}%\thanks{}
+\authorhead{Kees van der Laan}
+\affiliation{Hunzeweg 57, 9893PB,
+ Garnwerd, The Netherlands,
+ 05941--1525; cgl@rug.nl.}
+\date{}
+\maketitle \overfullrule=0pt
+\def\dash{--}\def\Dash{---}\def\fiverm{\tiny}\def\sevenrm{\small}
+\def\DeK{D\lower.5ex\hbox{E}K}
+\catcode`\@=11
+\def\@evenfoot{\rm\hfil\thepage}\let\@oddfoot=\@evenfoot
+\catcode`\@=12
+%\input btable.tex
+%btable.tex version 1, 17/7/92 author: cgl@rug.nl
+\newbox\tbl\let\ea=\expandafter\let\nx=\noexpand
+%Cell vertical size, row height and depth (separation implicit),
+\newdimen\cvsize\newdimen\tsht\newdimen\tsdp\newdimen\tvsize\newdimen\thsize
+%Parameter setting macros: Rules
+\def\hruled{\def\lineglue{\hrulefill}\def\colsep{} \def\rowsep{\hrule}
+ \let\rowstbsep=\colsep\let\headersep=\rowsep}
+\def\vruled{\def\lineglue{\hfil} \def\colsep{\vrule}\def\rowsep{}
+ \let\rowstbsep=\colsep\let\headersep=\hrule}
+\def\ruled {\def\lineglue{\hrulefill}\def\colsep{\vrule}\def\rowsep{\hrule}
+ \let\rowstbsep=\colsep\let\headersep=\rowsep}
+\def\nonruled{\def\lineglue{\hfil} \def\colsep{} \def\rowsep{}
+ \def\rowstbsep{\vrule}\def\headersep{\hrule}}
+\def\dotruled{\def\lineglue{\dotfill}\def\rowsep{\hbox to\thsize{\dotfill}}
+\def\colsep{\lower1.5\tsdp\vbox to\cvsize{%
+\leaders\hbox to0pt{\vrule height2pt depth2pt width0pt\hss.\hss}\vfil}}
+\let\rowstbsep=\colsep\let\headersep=\rowsep}
+%Parameter setting macros: Controling positioning
+\def\ctr{\def\lft{\hfil}\def\rgt{\hfil}}%Centered
+\def\fll{\def\lft{} \def\rgt{\hfil}}%Flushed left
+\def\flr{\def\lft{\hfil}\def\rgt{}} %Flushed right
+%Parameter setting macros: Framing
+\def\framed{\let\frameit=\boxit}
+\def\nonframed{\def\frameit##1{##1}}
+\def\dotframed{\let\frameit=\dotboxit}
+%
+\def\btable#1{\vbox{\let\rsl=\rowstblst%Copy
+\ifx\empty\template\ifx\empty\rowstblst
+ \def\template{\colsepsurround\lft####\rgt&&\lft####\rgt\cr}
+ \else\def\template{\colsepsurround####\hfil&&\lft####\rgt\cr}\fi
+ \fi
+\tsht=.775\cvsize\tsdp=.225\cvsize
+\def\tstrut{\vrule height\tsht depth\tsdp width0pt}
+%Logical mark up of column and row separators, via use of
+\def\cs{&\colsepsurround\colsep\colsepsurround&}
+\def\prs{&\colsepsurround\lineglue&} \def\srp{&\lineglue\colsepsurround&}
+\def\rs{\colsepsurround\tstrut\cr
+ \ifx\empty\rowsep\else\noalign{\rowsep}\fi
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\def\grs{\colsepsurround\tstrut\cr\ghostrow}
+\def\rss{&\colsepsurround\rowstbsep\colsepsurround&}
+\def\hs{\colsepsurround\tstrut\cr
+ \ifx\empty\headersep\else\noalign{\headersep}\fi
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\preinsert
+\setbox\tbl=\vbox{\tabskip=0pt\relax\offinterlineskip
+\halign{\span\template\ifx\empty\first\ifx\empty\rowstblst\else
+\ifx\empty\header\else\ea\rss\fi\fi\else\first\ea\rss\fi
+\ifx\empty\header\ifx\empty\first\if\empty\rsl\else\ea\nxtrs\fi
+ \else\ea\hs\fi
+\else\header\ea\hs\fi
+#1\colsepsurround\tstrut\crcr} } %end \setbox
+\postinsert
+\ifx\caption\empty\else\hbox to\thsize{\strut\hfil\caption\hss}\captionsep\fi
+\frameit{\copy\tbl}
+\ifx\footer\empty\else\footersep\hbox{\vtop{\noindent\hsize=\thsize%
+\footer}}\fi }} %end \btable
+%Defaults
+\cvsize=4ex\tsht=.775\cvsize\tsdp=.225\cvsize\def\colsepsurround{\kern.5em}
+\def\caption{}\def\first{}\def\header{}\def\rowstblst{}\def\footer{}\def\data{}
+\def\captionsep{\medskip} \def\headersep{\hrule}
+\def\footersep{\smallskip} \def\rowstbsep{\vrule}
+\def\preinsert{}
+\def\postinsert{\global\thsize=\wd\tbl
+ \global\tvsize=\ht\tbl\global\advance\tvsize by\dp\tbl}
+\ctr\nonruled\nonframed\def\template{}\def\ghostrow{} %end Defaults
+%Auxiliaries
+\def\boxit#1{\vbox{\hrule\hbox{\vrule\vbox{#1}\vrule}\hrule}}
+\def\dotboxit#1{\vbox{\offinterlineskip\hbox to\thsize{\dotfill}%
+\hbox{\lower\tsdp\vbox to\tvsize{%
+\leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}%
+\vbox{#1}\lower\tsdp\vbox to\tvsize{%
+\leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}}%
+\hbox to\thsize{\dotfill}}}
+%And to account for logical columns with \logmsp
+\def\spicspan{\span\omit}
+\def\logmsp#1{\omit\mscount=#1\multiply\mscount by2 \advance\mscount by-1
+\loop\ifnum\mscount>1 \spicspan\advance\mscount by-1 \repeat}
+%To process FIFO
+\def\fifo#1{\ifx\ofif#1\ofif\fi\process{#1}\fifo}\def\ofif#1\fifo{\fi}
+\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex}
+%To handle the row stub list: \rsl
+\def\nxtrs{\ifx\empty\rsl%\let\nxtel=\relax
+\else\def\nxtel{\ea\nrs\rsl\srn}\ea\nxtel\fi}%next Row Stub
+\def\nrs#1#2\srn{\gdef\rsl{#2}#1\rss} %end btable.tex
+%
+\begin{abstract} \noindent
+Characteristics of existing table macro collections are given.
+A kaleidoscope of tables---as next best to a taxonomy---is presented.
+Newly introduced is the class of bordered tables.
+Variations in print---ruled, nonruled, framed, nonframed, dotted, centered,
+flushed---can be obtained via the invoke of
+parameter setting macros; no modification of user mark up.
+Simultaneous row and column spans, partial rules, and dotted lines
+are dealt with.
+The listing of the macro \verb|\btable|, with auxiliaries, is included.
+\end{abstract}
+\begin{keywords}(Bordered) Tables, framed and non-framed,
+ruled and non-ruled, simultaneous row and columns spans, partial rules,
+connected cells, plain \TeX, SGML, education.
+\end{keywords}
+%
+\section*{Introduction}
+The formatting of tables is considered complex,
+time consuming and expensive.
+Table making via \TeX, or \LaTeX,
+needs too complex descriptions for simple tables, except when the
+table can be formatted via \verb|\settabs|.
+For \verb|\halign| use,
+there is no default template provided by plain.
+The $\langle X\rangle$\TeX\ macros
+I have seen, don't reflect the logical structure of the table.
+An apparently simple change of representation, for example
+from a ruled into a non-ruled, or
+from a framed into a non-framed table,
+requires in \TeX, and \LaTeX, some non-negligible effort.
+\\[.5ex]
+Therefore, there is a need for an easy to use macro on top of
+plain's powerful \verb|\|$\langle X\rangle$\verb|halign|-s,
+which accounts for the structure of the table.
+\\[.5ex]
+Characteristics of existing table macros are given in the Existing \TeX\
+Table Packages section.
+%\\[.5ex]
+In the Kaleidoscope section an anthology of tables is presented.
+Peculiar are the deterministic tables, and the tables which update memory.
+The section ends with the bordered table model.
+%\\[.5ex]
+In the Bordered Table section the macro and examples of use are given.
+%\\[.5ex]
+In the Blocks section %the problems of
+blocks and connected cells are dealt with.
+\\[.5ex]
+No landscape vs.\ portrait issues are
+discussed, nor the general use of rotated fonts.
+Tables which extend the page will not be discussed either. See for the latter
+for example supertabular.sty, \cite{taj}, or longtable.sty, \cite{dc92}.
+I also refrained from the issues which come from
+mapping the `main vertical list' onto pages, under the restriction not to split
+tables over page boundaries.
+%
+\section{Existing \TeX{} table packages}
+Cowan, \cite{rfc85}, provided a nice package
+in order to facilitate the formatting of simple tables.
+A main feature of his macros is that no template
+and no explicit number of columns, have to be provided.
+The template is created dynamically from the data and the
+`attributes.'
+This is powerful and High-\TeX\
+on the one hand, but restrictive and time consuming on the other.
+The automatism can't be easily
+superseded, as opposed to a default repetitive template,
+which I have adopted. The functionality as demonstrated by
+his examples can be easily obtained via %a stripped version of
+the bordered table macro.
+\\[.5ex]
+Khanh, \cite{khanh90}, introduced table macros which mainly deal with
+complex header rows. Because I consider
+those complicated header rows the exception rather than the rule,
+and because the material is not in the public domain,
+I will not consider it further.
+\\[.5ex]
+Spivak, \cite{mds89}, provided some powerful macros
+for formatting tables separately from the main document.
+His merging, at the dvi level,
+of the formatted table into the main document, is High-\TeX.
+He also provided some interesting examples of simultaneous row and column
+spans. Good, but complex, and perhaps too advanced for daily use.
+It is in the public domain.
+\\[.5ex]
+Lamport, \cite{lam86},
+mainly provided facilities for placing a table
+appropriately within the context.\footnote{As floating body, also called
+island by Spivak (1989).}
+He also developed \verb|\cline|,
+for partial horizontal rules, which is a powerful and a handy feature.
+I don't consider his way of framing nice, nor his way of
+specifying the ruling.
+\\[.5ex]
+Hendrickson, \cite{ah89}, has an approach
+similar to mine. No bordered table model, however,
+and less pronunciated `attributes.'
+\\[.5ex]
+There exist more table macros.
+Of those I had access to, the ones discussed above seemed relevant to me.
+Now and then visual mark up packages appear, like Type and Set, \cite{ga92}.
+With bars and visual mark up the table is specified on the screen,
+and from that \TeX\ code is generated.
+However useful this might be within the `conversion' of wordwhatever
+into \TeX\ area, I don't like the resulting \TeX\ encoding.
+It is clumsey. If that simple tables generate such an encoding then we
+are lost with really something a little more complex.
+Besides, the purpose of this paper is
+to introduce some new ways of formatting {\em simple\/} tables, next to
+the general accepted formatting \TeX niques.
+The \TeX book considers alignment the general issue. I like to approach
+the issue from the structure point of view, and to couple it to what is
+already available via plain. This work is a continuation
+of my earlier work on the SGML-\TeX\ relation, \cite{cgl90a}.
+%
+\section{Kaleidoscope}
+Some examples of special tables are given in order to illustrate the
+diversity. With respect to programming, the deterministic tables and
+the tables which update the computer memory, deserve special attention.
+The latter category is induced by {\em computer\/} typography.
+\begin{itemize}
+\item Pascal triangle, a deterministic table,
+\cite{cgl91}
+\par\noindent
+{$$\vcenter{\vbox{\small\hsize=.3\hsize
+$$\displaylines{1\cr
+ 1\quad1\cr
+ 1\quad2\quad1\cr
+ 1\quad3\quad3\quad1\cr}$$}}
+\qquad\vcenter{\hbox{via}}\qquad
+\vcenter{\vbox{\hsize=.4\hsize\small
+\begin{verbatim}
+$$\displaylines{1\cr
+ 1\quad1\cr
+ 1\quad2\quad1\cr
+ 1\quad3\quad3\quad1\cr}$$
+\end{verbatim}}}
+ $$}
+
+\item Tower of Hanoi, deterministic, \cite{cgl92a}.
+The process of replacement of the disks will be printed
+by the invoke of \verb|\hanoi|$\langle n\rangle$, $n$ an integer.
+No user mark up is needed.
+%
+\item Young tableaux, irregular shape, \cite{dek73}, \cite{pesw}
+{\small\newdimen\csize\csize=3ex
+\catcode`'=13\relax \newcount\cnt
+\def'{\global\advance\cnt1 \the\cnt}
+\def\data{'&'&'&'\cr'&'&'\cr'}
+\def\young#1{\hbox{\vrule\vtop{\hrule\offinterlineskip%
+\halign{&\vbox{\hbox to\csize{\strut\hss##\hss\vrule}\hrule}\cr%template
+#1\crcr}}}}%end \young
+%
+\qquad\young\data\qquad
+\def\data{7&8&9&10\cr11&13\cr16\cr}\young\data
+ }%end scope
+\par\noindent via
+{\small\begin{verbatim}
+\def\young#1{\hbox{\vrule\vtop{\hrule\offinterlineskip\halign
+{&\vbox{\hbox to\csize{\strut\hss##\hss\vrule}\hrule}\cr#1\crcr}}}}
+%
+\def\data{'&'&'&'\cr'&'&'\cr'} \young\data\qquad
+\def\data{7&8&9&10\cr11&13\cr16\cr}\young\data
+\end{verbatim} }
+\noindent with auxiliaries
+{\small\begin{verbatim}
+\newdimen\csize\csize=3ex \newcount\cnt\catcode`'=13
+\def'{\global\advance\cnt1 \the\cnt}
+\end{verbatim} }
+
+\item Much alignment
+occurs in typesetting mathematics: aligned equations in
+display, matrices, and the complex commutative diagrams. This has been dealt
+with elsewhere, for example \cite{dek84}, \cite{cgl91}, and
+\cite{mds89}.
+\item Crosswords: puzzle, clues and solution, \cite{cgl92b} \\
+\let\ea=\expandafter
+{\newif\ifpuzzle
+\newcount\cnt\newdimen\csize\csize=3ex
+%
+\def\crw#1{\toxit{\offinterlineskip%
+\halign{\bcell width0pt%of strut
+\prc##\ecell&&\bcell\relax
+\prc##\ecell\cr#1}%end \halign
+\global\cnt0}}%end \crw
+%
+\def\toxit#1{\vtop{\hrule
+\hbox{\vrule\vbox{#1}\vrule}
+\hrule}}%end \toxit (\vtop used)
+%
+\def\bcell{\hbox to\csize\bgroup\vrule%
+height.8\csize depth.2\csize}
+\let\ecell=}%TB 385, \egroup
+%
+\def\prc#1{\if*#1\cc\else\ifx\relax#1%
+\cc\else%no crossed out cell
+\ifnum`#1=\lccode`#1\low{#1}\else%
+\cap{#1}\fi\fi\fi}%end \prc
+\def\cc{\leaders\hrule height.8\csize
+depth.2\csize\hfill}%end Crossed Cell
+\def\low#1{\ifpuzzle\null\else\hfil%
+\uppercase{#1}\fi\hfil}%end \low
+\def\cap#1{\num\ifpuzzle\null%
+\else\hfil#1\fi\hfil}%end \cap
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}%end \num
+%
+%furthermore, in order to omit & and \cr
+%in the data (natural input)
+\def\markup#1{\ea\xdef\ea#1\ea{\ea%
+\fifol#1\ofifl}}%end \markup
+%
+{\catcode`\^^M=13 %local scope
+%Pick up and processing of lines
+\gdef\fifol#1^^M#2{\process{#1}%
+\ifx\ofifl#2\nx\lr\ofifl
+ \fi\nx\rs\fifol#2}}
+\def\ofifl#1\ofifl{\fi}
+%
+%FIFO with lok ahead
+\def\fifo#1#2{#1\ifx\ofif#2\ofif
+ \fi\nx\cs\fifo#2}
+\def\ofif#1\ofif{\fi}
+%
+\def\cs{&}\def\rs{\cr\noalign{\hrule}}
+\def\lr{\cr}
+%
+\def\process#1{\fifo#1\ofif}
+%
+%next is necessary to allow spaces
+%for * (except in last column)
+\def\bdata{\bgroup\obeylines%
+\obeyspaces\store}
+\def\store#1\edata{\egroup\def\data
+{#1}}
+{\obeyspaces\global\let =\relax}
+%\endinput %22/8/92 cgl@rug.nl
+%
+\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata\markup\data
+$$\qquad\qquad\qquad\vcenter{\noindent\sevenrm\csize=3ex
+\puzzletrue\crw\data\parindent=5ex
+\vtop{\hsize=21ex\obeylines Across
+2 Switch mode
+3 Knuth
+6 Prior to \TeX}
+\parindent=3ex
+\vtop{\hsize=25ex\obeylines Down
+1 Public domain
+2 All right
+4 All comes to it
+5 Atari type}
+\fiverm\csize=3ex
+\puzzlefalse\def\num{}\crw\data}$$
+}%end local scope
+%
+\item Maze \qquad\qquad
+\vskip-2\baselineskip
+%Labyrinth via TeX, just an experiment feb 92, cgl@rug.nl
+%More on it in MAPS to come
+%Assumed is a closed rule on top and to the right
+%| and _ denote the rules to mark the labyrinth
+%Labyrinth proper
+\newdimen\csize \csize=3ex
+{\small\catcode`|=13 \def|{\vrule}
+\catcode`_=13 \def_{\hrulefill}
+$$\vcenter{
+\hbox{\vtop{\offinterlineskip\hrule
+\halign{&\hbox to\csize
+{\vrule height\csize width0pt#\hfil}\cr
+ |&_&|_& \cr
+ &|&_& \cr
+ |&|_&_&|\cr
+ |_& &_&_\cr}%end \halign
+ }\vrule%end \vbox
+ }%end \hbox
+}\qquad\vcenter{\hbox{via}}\quad%
+\vcenter{\vtop{\small\hsize=.5\hsize
+\begin{verbatim}
+\newdimen\csize \csize=3ex
+\catcode`|=13 \def|{\vrule}
+\catcode`_=13 \def_{\hrulefill}
+\hbox{\vtop{\offinterlineskip\hrule
+\halign{&\hbox to\csize
+{\vrule height\csize width0pt#\hfil}\cr
+ |&_&|_& \cr
+ &|&_& \cr
+ |&|_&_&|\cr
+ |_& &_&_\cr}%end \halign
+ }\vrule%end \vbox
+ }%end \hbox
+\end{verbatim}
+}}$$ }%end \small
+\par
+\item Chart, \TeX book ex22.14 %but elaborated differently.
+{\small\newdimen\dist \dist=2\baselineskip
+\def\ent#1{\hbox{\vbox to 0pt
+{\vss\hbox to10ex{\quad\strut#1\hss}
+ \hrule}}}
+\def\vl#1{\hbox{\vrule height#1\dist
+depth0pt}}%Vertical Line of prop. size
+\def\bl#1{\kern#1\dist}%BLank of prop. size
+%Balanced
+$$\qquad\offinterlineskip
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de}
+ \vl2
+ \ent{fg}}
+ \vcenter{\ent{hij}
+ \vl1
+ \ent{klm}
+ \bl1
+ \ent{nop}
+ \vl1
+ \ent{qrs}}
+\quad%Nearly balanced tree; pruning a branch
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de}
+ \vl2
+ \ent{fg}}
+ \vcenter{\ent{hij}
+ \vl{.5} %\bl{.5}<-|
+ % \ent{klm} |
+ \bl{1.5}% <-|
+ \ent{nop}
+ \vl1
+ \ent{qrs}}$$ }%end scope
+
+\noindent via the following alternative code without \verb|\halign|
+
+{\small\begin{verbatim}
+\newdimen\dist \dist=2\baselineskip
+\def\ent#1{\hbox{\vbox to0pt{\vss\hbox to10ex{\quad\strut#1\hss}\hrule}}}
+\def\vl#1{\hbox{\vrule height#1\dist depth0pt}}
+\def\bl#1{\kern#1\dist}%BLank of proper size
+%Balanced
+$$\offinterlineskip
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de} \vl2\ent{fg}}
+ \vcenter{\ent{hij}\vl1\ent{klm}\bl1\ent{nop}\vl1\ent{qrs}}
+\quad%Nearly balanced tree; pruning a branch
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de} \vl2\ent{fg}}
+ \vcenter{\ent{hij}\vl{.5}%\bl{.5}\ent{klm}
+ \bl{1.5}\ent{nop}\vl1\ent{qrs}}$$
+\end{verbatim} }%end small
+\noindent There exist some special tree packages, see \cite{abk89}.
+%
+\item Row and/or column spans, partial horizontal rules%
+\footnote{How many rows does the header have? Descriptive 1, visual 2, and for
+plain \TeX\ formatting 3? See Mark up of Bridge Form subsection.}
+
+%Fill-in form bridge
+\nonruled\ctr\framed \def\rowstblst{}
+{\small%\defaults
+\newcount\bcnt
+\def\lines{\global\advance\bcnt by 1 \ifnum\bcnt=3 et cetera\hidewidth
+ \senil\fi\the\bcnt.\cs\cs\cs\cs\cs\cs\rs\lines}
+\def\senil#1\lines{\fi}
+\def\ghostrow{\omit\colsepsurround%
+ \vbox to 0pt{\vss\hbox to 5ex{\hss Pair\hss}\vskip.5ex
+ \hbox to 5ex{\hss No\hss}\vss}\prs\logmsp2\lineglue\srp
+ \vbox to 0pt{\vss\hbox to 5ex{\hss Re-\hss}\vskip.5ex
+ \hbox to5ex{\hss sults\hss}\vss}\prs\logmsp2\lineglue\srp
+ \vtop to 0pt{\vss\hbox to 5ex{\hss MP$\,$s\hss}\vss}\colsepsurround\cr}
+\def\header{\cs\logmsp2\hfil Contract\hfil\cs
+ \cs\logmsp2\hfil Scores\hfil\cs\grs
+ \cs N--S\cs E--W\cs\cs N--S\cs E--W\cs}
+\def\data{\lines}
+$$ \framed\ruled\btable\data $$
+}%end scope
+\write16{Bridge form \arabic{page}}
+
+\item Bridge pair match scheme, with special `first' element
+\par\noindent
+{\small\begin{center}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|c|c|c|c|c|c|c|c|}
+\hline
+\begin{minipage}{10ex}
+\setlength{\unitlength}{6ex}
+\begin{picture}(1.5, 1)
+ \put( 0.0, 0.0){\small Ronde}
+ \put( 1.4, 0.5){\llap{\small Spel}}
+ \put( 1.4, 0.1){\line(-2, 1){1.4}}
+\end{picture}
+\vspace*{\medskipamount}
+\end{minipage}
+ & 1--3 & 4--6 & 7--9 & 10--12 & 13--15 & 16--18 & 19--21\\ \hline
+1.&1: 1--2& & &2: 3--4& &3: 5--6 &4: 7--8\\ \hline
+2.&4: 8--3&1: 1--6& & &2: 5--7 & &3: 2--4\\ \hline
+\dots &&&&&&& \\ \hline
+\end{tabular}
+\end{center} }
+
+\item Alignment at decimal points. Generally this is done by introducing
+an extra column for the dot, and flushing right the digits left and
+flushing left the digits right of it. It comes from the wishes not to print
+non-significant leading zeroes, and to suppress
+zeroes behind the point for exact numbers. 3.5 means exactly 3${1\over2}$.
+3.500 means accurate to three digits. I would
+mark up the numbers separately
+and insert Knuth's `?',
+\TeX book, p.240\dash241,
+ for non-signicant zeroes, automatically. The latter can also be done by
+programming the editor by a template consisting of sufficient ?-s followed
+by the decimal point. The required numbers can be brought in by overtyping
+the template. Related to alignment at the decimal point is alignment
+at number signs,\footnote{Another column for the signs
+offends the structure.
+At a lower level one could think of {\tt\char92scs},
+a Sign Column Separator, but that is not nice either.} see the AAP table.
+
+%
+\item Fill-in forms, especially the registration forms for the various
+\write16{Fill-in form: \arabic{page}}
+\TeX\ conferences, are captivating. Sometimes I ponder about the
+e-mail equivalents of the traditional snail forms, especially what
+and how they should be filled in. Redefine a list of empty definitions?
+%
+\item Time-tables (railway, bus, \dots), and the use of rotated
+fonts.
+\write16{Time tables: \arabic{page}}
+
+\item Nested, and interrupted\footnote{From the user level one would say:
+aligned material connected by text, where the latter
+in the case at hand is the status of the play.}
+table with updating of memory, \cite{cgl90}
+
+{\small %\input{dec.tex}
+%Card definitions
+\def\s{$\spadesuit$}
+\def\h{$\heartsuit$}
+\def\d{$\diamondsuit$}
+\def\c{$\clubsuit$}
+%(Toks register) control sequences
+%for hands used by play macros:
+%showgame, pc, strip
+\let\NT\newtoks
+\NT\hnd%Dynamically one of:
+\NT\Ns\NT\Es\NT\Ss\NT\Ws
+\NT\Nh\NT\Eh\NT\Sh\NT\Wh
+\NT\Nd\NT\Ed\NT\Sd
+ \NT\Wd %Beware! Already
+%in TUGboat.sty in lower case
+\NT\Nc\NT\Ec\NT\Sc\NT\Wc
+%
+\def\english{
+%In central figure NESW
+\def\N{N}\def\E{E}\def\S{S}\def\W{W}
+%In heading bplay
+\def\NS{NS}\def\EW{EW}
+\def\TRICK{Trick}
+%Definition of hands
+%used by bbid
+\def\FIH{North}\def\SEH{East}
+\def\THH{South}\def\FOH{West}
+}% end \english
+\english%default
+%
+\def\LEADN{\gdef\FIP{N}\gdef\SEP{E}%
+ \gdef\THP{S}\gdef\FOP{W}}
+\def\LEADE{\gdef\FIP{E}\gdef\SEP{S}%
+ \gdef\THP{W}\gdef\FOP{N}}
+\def\LEADS{\gdef\FIP{S}\gdef\SEP{W}%
+ \gdef\THP{N}\gdef\FOP{E}}
+\def\LEADW{\gdef\FIP{W}\gdef\SEP{N}%
+ \gdef\THP{E}\gdef\FOP{S}}
+%Definition of counters
+%used by bplay
+\newcount\trno%trick number
+%Definition of dimensions
+%used in bbid
+\newdimen\wr %width column
+\wr=7ex \relax
+\def\bidwidth{4\wr}
+%used in crdima
+\newbox\NESW
+%
+\def\dutch{
+\def\FIH{Noord}\def\SEH{Oost}
+\def\THH{Zuid}\def\FOH{West}
+\def\N{N}\def\E{O}\def\S{Z}
+\def\W{W}\def\EW{OW}\def\NS{NZ}
+\def\TRICK{Slag}
+\setbox\NESW\hbox{\NESWfig}
+}%end \dutch
+%
+\def\french{
+\def\FIH{Nord}\def\SEH{Est}
+\def\THH{Sud}\def\FOH{Ouest}
+\def\N{N}\def\E{E}\def\S{S}
+\def\W{O}\def\EW{EO}\def\NS{NS}
+\def\TRICK{Lev\'ee}
+\setbox\NESW\hbox{\NESWfig}
+}%end \french
+%end input dec.tex
+%\input{bid.tex} %Modified central figure
+\def\hand#1#2#3#4{%
+%Example: \hand{AKJ765}{AK9}{--}{T983}
+\vtop{\hbox{\strut\s\enspace#1}
+\hbox{\strut\h\enspace#2}
+\hbox{\strut\d\enspace#3}
+\hbox{\strut\c\enspace#4}}%end \vtop
+}%end \hand
+%
+\def\crdima#1#2#3#4#5#6{%
+%purpose: layout bridge hand
+%#1 left upper text
+%#2 right upper text
+%#3, #4, #5, #6: N, E, S, W hands
+\vbox{\halign{ &##\quad\cr
+ #1& #3& #2\cr
+ $\vcenter{#6}$&$\vcenter{\copy\NESW}$&
+ $\vcenter{#4}$\cr
+ & #5& \cr
+ }%end \halign
+ }%end \vbox
+}%end \crdima
+%
+\def\NESWfig{%
+\hbox{\vrule%
+\vbox{\offinterlineskip\tabskip0pt
+\hrule\kern.25ex\halign{\hskip.5ex
+##\tabskip.5ex&\hfil##\hfil&
+##\hskip.5ex \tabskip0pt\cr
+\noalign{\vskip.5ex}
+ &\hbox to 2ex{\hss\N\hss}& \cr
+\W& &\E\cr
+ &\hbox to 2ex{\hss\S\hss}& \cr
+\noalign{\vskip.5ex}
+ }%end \halign
+\kern.25ex\hrule}%end \vbox
+\vrule}%end \hbox
+}% end \NESWfig
+\setbox\NESW\hbox{\NESWfig}
+%
+\def\ebid{\errormessage{%
+ bbid command is missing}}
+%
+\def\bbid{\bgroup%
+ \def\ebid{\egroup\egroup\egroup}
+ \def\alert{$^A$}
+ \def\think{$\ldots$\thinspace}
+ % etc.
+ \vtop\bgroup
+ \halign to\bidwidth\bgroup \tabskip2ex
+ plus 1ex minus 1ex& ##\hfil\cr
+ \FIH\hfil& \SEH\hfil&
+ \THH\hfil&\FOH\hfil\cr
+ \noalign{\vskip.5ex}
+}%end \bbid
+%end input bid.tex%
+%\input{play.tex} %Modified 11/11/91 Central table \bplay etc
+% bplay, showgame, pc, strip
+\def\eplay{\errormessage{%
+ bplay command is missing}}
+%
+\def\bplay{\bgroup\global\trno=0
+\def\eplay{\egroup\egroup}
+\def\bintermezzo{\noalign\bgroup
+ \smallskip\noindent}
+\def\eintermezzo{\smallskip\egroup}
+\tabskip1ex plus 1fill
+\halign to\hsize\bgroup
+ \tabskip1ex plus 1ex minus 1ex
+ \global\advance\trno by 1 %
+ \hbox to.5\wr{\hss\the\trno\hss}%<=!
+ \hbox to\wr{\pc\FIP##\hss}\hfil&
+ \hbox to\wr{\pc\SEP##\hss}\hfil&
+ \hbox to\wr{\pc\THP##\hss}\hfil&
+ \hbox to\wr{\pc\FOP##\hss}\hfil
+ \tabskip4ex plus2ex minus1ex&
+ \hbox to.5\wr{\hss##\hss}
+ \tabskip1ex plus 1ex minus 1ex&
+ \hbox to.5\wr{\hss##\hss}
+ \tabskip1ex plus 1fill\cr
+ %End template line, next is headline
+ \omit\hbox to1\wr{\TRICK\hss}\hfil&
+ \omit\hfil&\omit\hfil&\omit\hfil&
+ %Note only 3 \omits
+ \NS&\EW\cr%Headline
+}% end \bplay
+%
+\def\pc#1#2#3{% Version 3/3/90
+%Function: prints card #2#3 and
+% deletes it from player #1
+%#1 the hand N, E, S, W(uppercase)
+%#2 colour s, h, d, or c
+%#3 card value A K Q ... 2, or x
+%(or your (consistent/language) choice)
+%%%% 1. Update hand \#1#2; e.g. \Ns %%%
+\xdef\hnd{\csname #1#2\endcsname}
+\strip{#3}{\hnd}%
+%%%% 2. print card in table %%%
+\xdef\colour{\csname #2\endcsname}
+\colour\thinspace #3%
+% %Needed for immediate postfix mark(s)
+}% end \pc
+%
+\def\strip#1#2{% Version 3/3/90
+%Function: deletes card value #1
+% from #2, i.e., \Ns, or ...
+ \def\wis##1#1##2\wis{%
+ %Function: #1 is deleted from argument
+ % in \wis ... \wis and result
+ % is assigned to \hnd;
+ % (last card is replaced by --)
+ \global\hnd={##1##2}
+ \xdef\pa{##1} \xdef\pb{##2}
+ \ifx\pa\empty {\ifx\pb\empty
+ \global\hnd={--}% void colour
+ \fi}\fi
+ }% end \wis
+ \expandafter\wis\the #2\wis
+}% end \strip
+%
+\def\showgame{
+%Purpose: Shows all cards still active
+% in the play, via \Ns, ..., \Wc,
+% (note use of upper case for players)
+%Used: \crdima, \hand, \LFTINF, \RGTINF
+% \Ns, ..., \Wc
+$$\crdima{\LFTINF}{\RGTINF}%
+ {\hand{\the\Ns}{\the\Nh}{\the\Nd}%
+ {\the\Nc}}%
+ {\hand{\the\Es}{\the\Eh}{\the\Ed}%
+ {\the\Ec}}%
+ {\hand{\the\Ss}{\the\Sh}{\the\Sd}%
+ {\the\Sc}}%
+ {\hand{\the\Ws}{\the\Wh}{\the\Wd}%
+ {\the\Wc}}%
+$$}% end \showgame
+%end input play.tex
+%bridge data
+\def\LFTINF{Puzzle}
+\def\RGTINF{\vtop{\hbox{6NT,}
+ \hbox{by East}}}
+%
+\Ns={KQ76}\Es={T9}\Ss={8542}\Ws={AJ3}
+\Nh={J98} \Eh={A2}\Sh={QT74}\Wh={K653}
+\Nd={J942}\Ed={T5}\Sd={Q876}\Wd={AK3}
+\Nc={65}\Ec={KJ9xxxx}\Sc={2}\Wc={AQT}
+\showgame
+\LEADS\bplay
+h4! & hK & h8 & h2 & --& 1\LEADW\cr
+cA & c5 & cx & c2 & --& 2\cr
+cQ & c6 & cx & s2 & --& 3\cr
+cT & h9 & cK & s4 & --& 4\LEADE\cr
+cJ & s5 & s3 & s6 & --& 5\cr
+c9 & s8 & h5 & s7 & --& 6\cr
+cx & d6 & sJ & d2 & --& 7\cr
+\bintermezzo
+\def\RGTINF{\vtop{\hbox to 0pt{NS squeezed on\hss}
+ \hbox to 0pt{\c\ continuation?\hss}
+ \hbox to 7ex{\hss}}} %phantom for alignment
+\Ec={{\ooalign{\hfil\raise.07ex%
+ \hbox{x}\hfil\crcr\mathhexbox20D}}}
+\showgame \Ec={x}
+\eintermezzo
+cx & h7 & h6 & hJ & --& 8\cr
+\omit et cetera \hidewidth \cr
+\eplay
+}%end of scope
+
+\noindent Tables which also require updating of memory
+occur with typesetting of chess,
+for example \cite{pt92}, or GO, \cite{hk91}.
+\write16{Before Bordered: \arabic{page}}
+\penalty2000 \relax
+%
+\end{itemize}
+
+%
+\section{Bordered table}%
+\write16{Bordered table starts at: \arabic{page}}%
+A bordered table consists of a caption, a header, row stubs, a table proper and
+a footer, all with appropriate separators. Special cases occur when
+some of the elements are absent.
+Abstraction from ruled and non-ruled is realized at the user level.
+Ruled can be specified either as horizontal, vertical or both.
+Dotted rules, also the partial ones, can be specified.\footnote
+{The chameleon sized {\tt\char92hrule} and {\tt\char92vrule},
+don't have dotted analogons, however.}
+No variation in the line thicknesss has been encoded.\footnote{It is
+not difficult to introduce a parameter
+{\tt\char92linethickness}.}
+Framing is treated just as if a general document element has to be framed.
+I chose to leave the caption and the footer outside the frame.
+The positioning of the elements can be specified as
+centered, flushed left, respectively flushed right.
+A user may supply his own template.
+Caption, border (first, header, row stubs), and footer can be specified;
+all mutual orthogonal and independent from \verb|\data|.
+%
+\begin{itemize}
+\item Bordered table model
+\write16{Bordered table: \arabic{page}}
+
+{\def\caption{$\leftarrow$\hfill C a p t i o n\hfill$\rightarrow$}
+\def\first{\hbox to6ex{\hss First\hss}}
+\def\header{\hbox to18ex{\hss Header\hss}}
+\def\rowstblst{{\hfil$\vcenter to20ex{\vss\offinterlineskip
+ \fifo rowstblst\ofif\vss}$}}
+\def\data{$\vcenter{\offinterlineskip\hbox{Table}\kern1ex\hbox{Proper}}$}
+\def\footer{\hbox to\thsize
+{$\leftarrow$\hss{\small F o o t e r}\hss\hss\hss$\rightarrow$}}
+\def\fifo#1{\ifx\ofif#1\ofif\fi\process{#1}\fifo}\def\ofif#1\fifo{\fi}
+\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex}
+\nonframed
+$$\vcenter{\btable\data}\qquad\qquad
+\vcenter{\framed\btable\data}$$
+\immediate\write16{Bordered table}
+}%end scope
+via
+
+{\small \begin{verbatim}
+\def\caption{$\leftarrow$\hfill C a p t i o n\hfill$\rightarrow$}
+\def\first{\hbox to6ex{\hss First\hss}}
+\def\header{\hbox to18ex{\hss Header\hss}}
+\def\rowstblst{{\hfil$\vcenter to20ex{\vss\offinterlineskip
+ \fifo rowstblst\ofif\vss}$}}
+\def\data{$\vcenter{\offinterlineskip\hbox{Table}\kern1ex\hbox{Proper}}$}
+\def\footer{\hbox to\thsize
+{$\leftarrow$\hss{\small F o o t e r}\hss\hss\hss$\rightarrow$}}
+$$\vcenter{\btable\data}\qquad\qquad
+ \vcenter{\framed\btable\data}$$
+\end{verbatim}}%end scope
+
+\noindent with, \cite{cgl92c}, \cite{cgl92d}
+{\small \begin{verbatim}
+\def\fifo#1{\ifx\ofif#1\ofif\fi\process{#1}\fifo}\def\ofif#1\fifo{\fi}
+\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex}
+\end{verbatim}}%end scope
+
+%
+\noindent Rules can be specified via for example
+\verb|\ruled|, \verb|\hruled|, \verb|\vruled|, \verb|\nonruled|,
+respectively \verb|\dotruled|.\footnote{The latter requires some
+extra work: table measurement via 2 passes.}
+The rules that
+separate the border can be eliminated, by redefinition of the macros
+\verb|\headersep| and \verb|\rowstbsep|.
+Furthermore, there are \verb|\ctr|, \verb|\fll|, and \verb|\flr|,
+for controling the positioning of the elements of the table. The framing
+can be controled by \verb|\framed|,
+\verb|\dotframed|, or \verb|\nonframed|.
+\end{itemize}
+%
+\subsection{Encoding}
+{\small\begin{verbatim}
+%btable.tex version 1, 17/7/92 author: cgl@rug.nl
+\newbox\tbl\let\ea=\expandafter
+%Cell vertical size, row height and depth (separation implicit),
+\newdimen\cvsize\newdimen\tsht\newdimen\tsdp\newdimen\tvsize\newdimen\thsize
+%Parameter setting macros: Rules
+\def\hruled{\def\lineglue{\hrulefill}\def\colsep{} \def\rowsep{\hrule}
+ \let\rowstbsep=\colsep\let\headersep=\rowsep}
+\def\vruled{\def\lineglue{\hfil} \def\colsep{\vrule}\def\rowsep{}
+ \let\rowstbsep=\colsep\let\headersep=\hrule}
+\def\ruled {\def\lineglue{\hrulefill}\def\colsep{\vrule}\def\rowsep{\hrule}
+ \let\rowstbsep=\colsep\let\headersep=\rowsep}
+\def\nonruled{\def\lineglue{\hfil} \def\colsep{} \def\rowsep{}
+ \def\rowstbsep{\vrule}\def\headersep{\hrule}}
+\def\dotruled{\def\lineglue{\dotfill}\def\rowsep{\hbox to\thsize{\dotfill}}
+\def\colsep{\lower1.5\tsdp\vbox to\cvsize{%
+\leaders\hbox to0pt{\vrule height2pt depth2pt width0pt\hss.\hss}\vfil}}
+\let\rowstbsep=\colsep\let\headersep=\rowsep}
+%Parameter setting macros: Controling positioning
+\def\ctr{\def\lft{\hfil}\def\rgt{\hfil}}%Centered
+\def\fll{\def\lft{} \def\rgt{\hfil}}%Flushed left
+\def\flr{\def\lft{\hfil}\def\rgt{}} %Flushed right
+%Parameter setting macros: Framing
+\def\framed{\let\frameit=\boxit}
+\def\nonframed{\def\frameit##1{##1}}
+\def\dotframed{\let\frameit=\dotboxit}
+%
+\def\btable#1{\vbox{\let\rsl=\rowstblst%Copy
+\ifx\empty\template\ifx\empty\rowstblst
+ \def\template{\colsepsurround\lft####\rgt&&\lft####\rgt\cr}
+ \else\def\template{\colsepsurround####\hfil&&\lft####\rgt\cr}\fi
+ \fi
+\tsht=.775\cvsize\tsdp=.225\cvsize
+\def\tstrut{\vrule height\tsht depth\tsdp width0pt}
+%Logical mark up of column and row separators, via use of
+\def\cs{&\colsepsurround\colsep\colsepsurround&}
+\def\prs{&\colsepsurround\lineglue&} \def\srp{&\lineglue\colsepsurround&}
+\def\rs{\colsepsurround\tstrut\cr
+ \ifx\empty\rowsep\else\noalign{\rowsep}\fi
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\def\grs{\colsepsurround\tstrut\cr\ghostrow}
+\def\rss{&\colsepsurround\rowstbsep\colsepsurround&}
+\def\hs{\colsepsurround\tstrut\cr
+ \ifx\empty\headersep\else\noalign{\headersep}\fi
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\preinsert %User action
+\setbox\tbl=\vbox{\tabskip=0pt\relax\offinterlineskip
+\halign{\span\template\ifx\empty\first\ifx\empty\rowstblst\else
+\ifx\empty\header\else\ea\rss\fi\fi\else\first\ea\rss\fi
+\ifx\empty\header\ifx\empty\first\if\empty\rsl\else\ea\nxtrs\fi
+ \else\ea\hs\fi
+\else\header\ea\hs\fi
+#1\colsepsurround\tstrut\crcr} } %end \setbox
+\postinsert%Pick up what is needed, \thsize,...
+\ifx\caption\empty\else\hbox to\thsize{\strut\hfil\caption\hss}\captionsep\fi
+\frameit{\copy\tbl}
+\ifx\footer\empty\else\footersep\hbox{\vtop{\noindent\hsize=\thsize%
+\footer}}\fi }} %end \btable
+%Defaults
+\cvsize=4ex\tsht=.775\cvsize\tsdp=.225\cvsize\def\colsepsurround{\kern.5em}
+\def\caption{}\def\first{}\def\header{}\def\rowstblst{}\def\footer{}\def\data{}
+\def\captionsep{\medskip} \def\headersep{\hrule}
+\def\footersep{\smallskip} \def\rowstbsep{\vrule}
+\def\preinsert{}
+\def\postinsert{\global\thsize=\wd\tbl
+ \global\tvsize=\ht\tbl\global\advance\tvsize by\dp\tbl}
+\ctr\nonruled\nonframed\def\template{}\def\ghostrow{} %end Defaults
+%Auxiliaries
+\def\boxit#1{\vbox{\hrule\hbox{\vrule\vbox{#1}\vrule}\hrule}}
+\def\dotboxit#1{\vbox{\offinterlineskip\hbox to\thsize{\dotfill}%
+\hbox{\lower\tsdp\vbox to\tvsize{%
+\leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}%
+\vbox{#1}\lower\tsdp\vbox to\tvsize{%
+\leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}}%
+\hbox to\thsize{\dotfill}}}
+%And to account for logical columns with \logmsp
+\def\spicspan{\span\omit}
+\def\logmsp#1{\omit\mscount=#1\multiply\mscount by2 \advance\mscount by-1
+\loop\ifnum\mscount>1 \spicspan\advance\mscount by-1 \repeat}
+%To handle the row stub list: \rsl
+\def\nxtrs{\ifx\empty\rsl\else\def\nxtel{\ea\nrs\rsl\srn}\ea\nxtel\fi}
+\def\nrs#1#2\srn{\gdef\rsl{#2}#1\rss} %end btable.tex
+\end{verbatim} }
+\par\noindent
+ \verb|\btable|\quad Implements the bordered table model. Note that
+the table is measured in order to set the width of the header and the footer.
+The measurement is also useful for dotted horizontal lines.
+When no template is provided,
+then a default will be created, automatically.
+\\[.5ex]
+{\tt\char92}$\langle X\rangle$\verb|sep|\quad Parameters
+which govern the kind of separators.
+\par\noindent
+\verb|\nxtrs| \quad Yields the next element of the row stub list.
+ {\em The last element
+of the list has to be enclosed by an extra pair of braces.\/}
+I could have introduced an explicit list terminator instead, but that would
+have created incompatibilities with the termination in other defs. Weird?
+\\[.5ex]
+ \verb|\cvsize, \tsht, \tsdp, \thsize, \tvsize|\quad
+These dimension variables stand for vertical
+cell size, table strut height, table strut depth, table horizontal size,
+and table vertical size.
+\\[.5ex]
+\verb|\preinsert, \postinsert|\quad For flexibility.
+Default \verb|\preinsert| is empty.
+\verb|\postinsert| delivers by default the table
+sizes globally into \verb|\thsize|, and \verb|\tvsize|. %
+%
+\def\rowstblst{}\def\caption{}\def\header{}\def\footer{}
+%
+\subsection{Examples of use}
+Before the invoke of \verb|\btable\data| do \\
+Redefine \verb|\data| with column and row separators, \verb|\cs|,
+respectively \verb|\rs|.
+\\
+Choose from the `attributes'\\
+-- \verb|\ruled|, \verb|\hruled|, \verb|\vruled|, \verb|\dotruled| \hfill
+ Default:\hbox to13ex{\hfil\verb|\nonruled|}\\
+-- \verb|\framed|, \verb|\dotframed| \hfill
+ Default:\hbox to13ex{\hfil\verb|\nonframed|}\\
+-- \verb|\fll|, \verb|\flr| \hfill
+ Default:\hbox to13ex{\hfil\verb|\ctr|}\\
+Suplly the caption, header, first element, row stubs, or footer via
+redefinitions of the corresponding macros.
+\nonruled\nonframed\ctr %Defaults
+
+\penalty-250
+\begin{itemize}
+\item Just data, \cite{cgl91}
+\write16{Just data: \arabic{page}}
+
+{\small
+$$\def\data{2\cs7\cs6\rs 9\cs5\cs1\rs 4\cs3\cs8}
+ \vcenter{\framed\ruled\btable\data}\qquad\qquad\qquad
+\immediate\write16{
+Size 3-3 Magic Sq: \the\thsize, \the\tvsize, page: \arabic{page}}
+ \def\data{16\cs 3\cs 2\cs13\rs
+ 5\cs10\cs11\cs 8\rs
+ 9\cs 6\cs 7\cs12\rs
+ 4\cs\bf15\cs\bf14\cs 1}
+\ruled\framed\setbox0=\btable\data%for measuring sizes
+\write16{
+Size 4-4 Magic Sq: \the\thsize, \the\tvsize, page: \arabic{page}}
+\vcenter{\dotruled\dotframed\btable\data}\qquad$$
+}%end scope
+
+\noindent via
+
+{\small\begin{verbatim}
+$$\def\data{2\cs7\cs6\rs 9\cs5\cs1\rs 4\cs3\cs8}
+ \vcenter{\framed\ruled\btable\data}\qquad\qquad\qquad
+ \def\data{16\cs 3\cs 2\cs13\rs
+ 5\cs 10\cs 11\cs 8\rs
+ 9\cs 6\cs 7\cs12\rs
+ 4\cs\bf15\cs\bf14\cs 1}
+\ruled\framed\setbox0=\btable\data%for measuring sizes
+\vcenter{\dotruled\dotframed\btable\data}\qquad$$
+\end{verbatim}
+}%end scope
+
+\item Data plus header, \TeX book p.246
+
+{\small
+$$\def\header{\hfill Year\hfill\cs\hfill World Population\hfill}
+\def\data{8000 B.C.\cs5,000,000\rs50 A.D.\cs200,000,000}
+\flr\vruled\vcenter{\btable\data}\qquad
+\ruled\framed\vcenter{\btable\data}$$
+}
+via the simpler nearly descriptive mark up
+
+{\small\begin{verbatim}
+\def\header{\hfill Year\hfill\cs\hfill World Population\hfill}
+\def\data{8000 B.C.\cs 5,000,000\rs 50 A.D.\cs200,000,000}
+$$\flr\vruled\vcenter{\btable\data}\qquad
+\ruled\framed\vcenter{\btable\data}$$
+\end{verbatim} }
+%
+\item Data with row stubs, \TeX book p.232
+\par\noindent
+\nonruled\nonframed\ctr
+$$\def\rowstblst{{Horizontal lists}{Vertical lists}{{Math lists}}}
+\def\rowstbsep{}\def\data{Chapter 14\rs Chapter 15\rs Chapter 17}
+\vcenter{\vbox{\small{\btable\data}}}
+\qquad\vcenter{\hbox{via}}\
+\vcenter{\vbox{\small\hsize=.45\hsize\parindent=0pt
+\begin{verbatim}
+\def\rowstblst{{Horizontal lists}
+ {Vertical lists}{{Math lists}}}
+\def\rowstbsep{}%Default a \vrule
+\def\data{Chapter 14\rs
+Chapter 15\rs Chapter 17}
+$$\btable\data$$
+\end{verbatim}
+}}$$
+
+\item Data, row stubs, header, caption and footer
+\write16{Data row stubs etc. \arabic{page}}
+\par\noindent
+{\small\nonruled\nonframed
+$$\def\data{11\cs12\rs21\cs22}
+ \vcenter{\framed\btable\data} \qquad
+ \def\header{\logmsp2\hfill Header\hfill}
+ \def\rowstblst{{$1^{st}$ row}{{$2^{nd}$ row}}}
+ \vcenter{\btable\data} \qquad
+ \def\caption{Caption}\def\footer{Footer}
+ \vcenter{\dotruled\btable\data} \qquad
+ \vcenter{\ruled\framed\btable\data}$$
+}%
+\par\noindent
+after data definition, \verb|\def\data{11\cs12\rs21\cs22}|,
+via\footnote{Note the invariance of the
+{\tt\char92data} specification.}
+{\small\begin{verbatim}
+$$\vcenter{\framed\btable\data} \qquad
+ \def\header{\logmsp2\hfill Header\hfill}
+ \def\rowstblst{{$1^{st}$ row}{{$2^{nd}$ row}}}
+ \vcenter{\btable\data} \qquad
+ \def\caption{Caption}\def\footer{Footer}
+ \vcenter{\dotruled\btable\data} \qquad
+ \vcenter{\ruled\framed\btable\data}$$
+\end{verbatim} }
+
+\item Walter's spreadsheet, \TeX book, p.244. No preamble has to be defined.
+It makes ex22.10 superfluous. How about that?
+
+{\small$$
+\def\data{1\cs\logmsp2Adjusted gross income \dotfill\cs\$4,000\rs
+ 2\cs Zero bracket amount for \rs
+ \cs a single individual \dotfill\cs\hfill\$2,300\cs \rs
+ 3\cs Earned income \dotfill\cs
+ \hfill\underbar{ 1,500}\cs \rs
+ 4\cs\logmsp2Substract line 3 from line 2
+ \dotfill\cs\hfill\underbar{ 800}\rs
+ 5\cs Add lines 1 and 4. Enter here \rs
+ \cs\logmsp2and on Form 1040, line 35 \dotfill\cs\$4,800}
+\def\colsepsurround{\kern.5ex}\cvsize=3ex
+\fll\btable\data
+$$}
+\par\noindent
+The above is encoded, as a 4-column table, via
+
+{\small
+\begin{verbatim}
+\def\data{1\cs\logmsp2Adjusted gross income \dotfill\cs\$4,000\rs
+ 2\cs Zero bracket amount for \rs
+ \cs a single individual \dotfill\cs\hfill\$2,300\cs \rs
+ 3\cs Earned income \dotfill\cs
+ \hfill\underbar{ 1,500}\cs \rs
+ 4\cs\logmsp2Substract line 3 from line 2
+ \dotfill\cs\hfill\underbar{ 800}\rs
+ 5\cs Add lines 1 and 4. Enter here \rs
+ \cs\logmsp2and on Form 1040, line 35 \dotfill\cs\$4,800}
+\def\colsepsurround{\kern.5ex}\cvsize=3ex
+$$\fll\btable\data$$
+\end{verbatim} }
+
+%
+\item Part of AAP's table, \cite{AAP89}, or \cite{cgl90a}
+\immediate\write16{AAP table}
+{\small\nonframed\nonruled\ctr
+\def\nl{\hfil\strut\break\strut}\catcode`?=\active \def?{\kern1.1ex}
+\def\caption{AAP's table:\qquad Job Changes 1973--1980\hfill}
+\def\rowstblst{{Texas}{{Maryland}}}
+\def\header{\copy1\cs\copy2\cs\copy3}
+\def\data{$+20$\cs---\cs22\%\rs
+ $+?5$\cs 42\cs24\%}
+\def\footer{Source: David Kinzer, `Turnover Of Hospital Chief
+Executive Officers: A Hospital Association Perspective,'
+Hospital and health Services Administration May-June 1982.}
+\setbox1=\vtop{\noindent\hsize14ex
+ Gain/Loss of\nl hospitals \nl since 1973}
+\setbox2=\vtop{\noindent\hsize13ex
+ Total No\nl of CEO Job\nl Changes\nl 1973--90}
+\setbox3=\vtop{\noindent\hsize10ex
+ Survival\nl Rate of\nl CEO's}
+$$\btable\data$$ }
+obtained via
+{\small\begin{verbatim}
+\def\caption{AAP's table:\qquad Job Changes 1973--1980\hfill}
+\def\rowstblst{{Texas}{{Maryland}}}
+\def\header{\copy1\cs\copy2\cs\copy3}
+\def\data{$+20$\cs---\cs22\%\rs
+ $+?5$\cs 42\cs24\%}
+\def\footer{Source: David Kinzer, `Turnover Of Hospital Chief
+Executive Officers: A Hospital Association Perspective,'
+Hospital and health Services Administration May-June 1982.}
+$$\btable\data$$
+\end{verbatim} }
+
+\noindent with auxiliaries
+{\small\begin{verbatim}
+\def\nl{\hfil\strut\break\strut}\catcode`?=\active \def?{\kern1.1ex}
+\setbox1=\vtop{\noindent\hsize14ex
+ Gain/Loss of\nl hospitals\nl since 1973}
+\setbox2=\vtop{\noindent\hsize13ex
+ Total No\nl of CEO Job\nl Changes\nl 1973--90}
+\setbox3=\vtop{\noindent\hsize10ex
+ Survival\nl Rate of\nl CEO's}
+\end{verbatim} }
+
+%
+\item AT\&T table diversions, \TeX book p.247, \cite{lesk79}
+
+{\small\begin{verbatim}
+\def\caption{AT\&T Common Stock}
+\def\header{Year\cs Price\cs Dividend}
+\catcode`?=\active \def?{\kern1.1ex}
+\def\data{1971\cs41--54\cs\llap{\$}2.60\rs
+ 2\cs41--54\cs 2.70\rs
+ 3\cs46--55\cs 2.87\rs
+ 4\cs40--53\cs 3.24\rs
+ 5\cs45--52\cs 3.40\rs
+ 6\cs51--59\cs ?.95\rlap*}
+\def\footer{* (first quarter only)}
+\def\caption{}\def\header{\logmsp3 \hfil AT\&T Common Stock\hfil\rs
+ \hfill Year\hfill\cs\hfill Price\hfill\cs \hfill Dividend\hfill}
+\vcenter{\flr\ruled\btable\data}$$
+\end{verbatim} }
+
+\noindent yields
+
+\def\rowstblst{}
+{\def\caption{AT\&T Common Stock\hfill}
+\def\header{Year\cs Price\cs Dividend}
+\catcode`?=\active \def?{\kern1.1ex}
+\def\data{1971\cs41--54\cs\llap{\$}2.60\rs
+ 2\cs41--54\cs 2.70\rs
+ 3\cs46--55\cs 2.87\rs
+ 4\cs40--53\cs 3.24\rs
+ 5\cs45--52\cs 3.40\rs
+ 6\cs51--59\cs ?.95\rlap*}
+\def\footer{* (first quarter only)}
+$$\framed\vcenter{\vbox{\small\btable\data}}\qquad\qquad
+\def\caption{}\def\header{\logmsp3 \hfil AT\&T Common Stock\hfil\rs
+ \hfill Year\hfill\cs\hfill Price\hfill\cs \hfill Dividend\hfill}
+\vcenter{\flr\ruled\btable\data}$$
+}
+
+\noindent It remains a matter of choice what should be considered as header
+and what as caption. A footnote facility, which will append the footnote
+to a footnote list similar to the row stub list, could have been
+implemented.
+% Because table footnotes are the exception rather than the rule,
+I refrained from implementing it, for the moment.
+%
+\item Pittman's, \cite{jep88},
+deterministic multiplication table.
+Typographically and in other programming languages a trifle.
+In \TeX\ the encoding matters.
+\def\header{}\def\rowstblst{}\def\caption{}\def\first{}\def\footer{}
+\let\nx=\noexpand \let\ea=\expandafter
+\newcount\rcnt \newcount\ccnt \newcount\tnum
+\newcount\mrow \newcount\mcol
+\rcnt1 \ccnt1 \mrow2 \mcol3
+\def\rows{\global\ccnt1 \cols \global\advance\rcnt1
+ \ifnum\rcnt>\mrow\swor\fi\rs\rows}
+\def\swor#1\rows{\fi}
+\def\cols{\tnum\rcnt \multiply\tnum\ccnt \the\tnum
+ \global\advance\ccnt1 \ifnum\ccnt>\mcol\sloc\fi\cs\cols}
+\def\sloc#1\cols{\fi}
+%
+$$\nonruled\nonframed
+\vcenter{\btable\rows}\qquad\qquad
+\global\ccnt=1 \global\rcnt=1 \mrow2 \mcol3
+\def\first{$\times$} \def\header{\row}
+\def\row{\the\ccnt\global\advance\ccnt1
+ \ifnum\ccnt>\mcol\wor\fi\cs\row}
+\def\wor#1\row{\fi}
+\def\rowstblst{\ifnum\rcnt=\mrow\gdef\rowstblst{}\fi}
+\def\nxtrs{\the\rcnt\rss}
+\vcenter{\btable\rows}\qquad\qquad
+%
+\global\ccnt=1 \global\rcnt=1 \mrow3 \mcol4
+\def\rowstblst{\ifnum\rcnt=\mrow\gdef\rowstblst{}\fi}
+\framed\vcenter{\btable\rows}
+$$
+via
+
+{\small\begin{verbatim}
+\let\nx=\noexpand \let\ea=\expandafter
+\newcount\rcnt \newcount\ccnt \newcount\tnum
+\newcount\mrow \newcount\mcol
+\rcnt1 \ccnt1 \mrow2 \mcol3
+\def\rows{\global\ccnt1 \cols \global\advance\rcnt1
+ \ifnum\rcnt>\mrow\swor\fi\rs\rows}
+\def\swor#1\rows{\fi}
+\def\cols{\tnum\rcnt \multiply\tnum\ccnt \the\tnum
+ \global\advance\ccnt1 \ifnum\ccnt>\mcol\sloc\fi\cs\cols}
+\def\sloc#1\cols{\fi}
+\vcenter{\btable\rows}\qquad\qquad
+%
+\global\ccnt=1 \global\rcnt=1 \mrow2 \mcol3
+\def\first{$\times$} \def\header{\row}
+\def\row{\the\ccnt\global\advance\ccnt1
+ \ifnum\ccnt>\mcol\wor\fi\cs\row}
+\def\wor#1\row{\fi}
+\def\rowstblst{\ifnum\rcnt=\mrow\gdef\rowstblst{}\fi}
+\def\nxtrs{\the\rcnt\rss}
+\vcenter{\btable\rows}\qquad\qquad
+%
+\global\ccnt=1 \global\rcnt=1 \mrow3 \mcol4
+\def\rowstblst{\ifnum\rcnt=\mrow\gdef\rowstblst{}\fi}
+\framed\vcenter{\btable\rows}$$
+\end{verbatim} }
+\end{itemize}
+\def\header{}\def\rowstblst{}\def\caption{}\def\first{}\def\footer{}
+%
+\subsection{No mark up}
+\write16{No mark up. \arabic{page}}
+For simple tables the data can be specified without
+\verb|\cs|-s, and \verb|\rs|-s,
+that is without explicit markers for column
+and row separators. These can be inserted by \TeX, see
+\TeX book p.249, \cite{cgl92c}, or \cite{ds92}.
+For special cases, for example crosswords, \cite{cgl92b}, this is handy.
+\\
+Pondering about lists, make you realize that the table proper data forms
+a nested list with \verb|\rs| and \verb|\cs|, respectively first level
+and second level separators. One could also adopt $\langle cr\rangle$
+and {\tt\char32} for that, in other words allow natural data provision.
+%
+\section{Simultaneous row and column spans}
+When one kind of spans is the issue one can use
+\verb|\logmsp|---for logical columns,
+as an extension to \verb|\multispan|---
+either within \verb|\halign|, for column spans,
+or within \verb|\valign|, for row spans.
+Simultaneous row and column spans require more work.
+\\
+First, we have to account for the blocks proper. This is done via
+leaving space open, overprinting the left open space,
+and the use of a {\it Ghost Row Separator}.
+For a block of even {\em row\/}
+size, I chose to insert lines of height zero. I call these ghost lines.
+For a block with an odd number of rows,
+I chose to modify the middle line.
+\\
+Next, when we are dealing with
+{\em ruled\/} tables we have to hide the rules that
+should otherwise traverse the block. This can be done for
+partial vertical rules via \verb|\logmsp{n}\hfil|, with n an integer.
+For partial horizontal
+rules there are two aspects. First,
+the table wide rules are not typeset,
+and second,
+partial horizontal rules have to be typeset around the blocks.
+ I supplied
+the macros \verb|\prs|, Partial Rule Separator,
+and \verb|\srp|,
+{\em mirror\/} Separator Rule Partial,
+to enclose a partial rule.
+The kind of partial rule is determined by
+the replacement text of \verb|\lineglue|.
+\\[.5ex]
+Row spans in the row stub list can be handled similarly.
+For even spans define an appropriate \verb|\ghostrow|, with a copy of
+the block in it.
+For odd spans provide a copy of the block in the row stub list.
+Provide suitable empty row stub elements, $\{\,\}$, in both cases.
+
+%
+\subsection{Partial rules}
+For a horizontal rule over one (logical) column use\\
+\verb|...\prs\lineglue\srp...|\quad
+instead of \quad\verb|...\cs...\cs...|.\\
+ \verb|\lineglue| is defined by the $\langle X\rangle$\verb|ruled| macros.
+\\[.5ex]
+The \verb|\prs|, Partial Rule Separator, accounts for
+that part of the rule,
+which extends into the hidden column for the separator. \verb|\srp|
+is its mirror terminator.
+At the line-ends of the table one can simply use \verb|\cr|,
+as mirror terminator. The respective (symmetric) definitions are
+
+{\small\begin{verbatim}
+\def\prs{&\colsepsurround\lineglue&} \def\srp{&\lineglue\colsepsurround&}
+\end{verbatim} }
+
+\noindent For a horizontal rule over $\langle n\rangle$ (logical) columns use
+
+{\small\begin{verbatim}
+...\prs\logmsp{n}\lineglue\srp...%n logical columns
+\end{verbatim}}
+
+%\noindent If we define \verb|\def\lineglue{\dotfill}|, then we
+%have dotted partial horizontal rules.
+%
+\subsection{Mark up bridge form}
+The header row of the bridge form can be characterized by:
+one 3-row span,
+two 2-column spans,
+and two 2-column partial horizontal rules. Furthermore, the repetition
+of the number of rows is interesting.
+
+{\small\begin{verbatim}
+\def\header{\cs\logmsp2\hfil Contract\hfil\cs
+ \cs\logmsp2\hfil Scores\hfil\cs\grs
+ \cs N--S\cs E--W\cs\cs N--S\cs E--W\cs}
+\def\data{\lines} \framed\ruled\btable\data
+\end{verbatim} }
+
+\noindent with auxiliaries
+{\small\begin{verbatim}
+\newcount\bcnt
+\def\lines{\global\advance\bcnt by 1 \ifnum\bcnt=3 et cetera\hidewidth
+ \senil\fi\the\bcnt.\cs\cs\cs\cs\cs\cs\rs\lines}
+\def\senil#1\lines{\fi}
+%
+\def\ghostrow{\omit\colsepsurround%
+ \vbox to 0pt{\vss\hbox to 5ex{\hss Pair\hss}\vskip.5ex
+ \hbox to 5ex{\hss No\hss}\vss}\prs\logmsp2\lineglue\srp
+ \vbox to 0pt{\vss\hbox to 5ex{\hss Re-\hss}\vskip.5ex
+ \hbox to5ex{\hss sults\hss}\vss}\prs\logmsp2\lineglue\srp
+ \vtop to 0pt{\vss\hbox to 5ex{\hss MP$\,$s\hss}\vss}\colsepsurround\cr}
+\end{verbatim} }
+
+\par\noindent The row span extends implicitly
+into the first and third row. The last row of the data does not take
+vertical rules, automatically.\footnote{For a real form---24 or more
+rows---just modify {\tt\char92lines}.}
+
+\subsection{Blocks; connected cells}
+\write16{Blocks: \arabic{page}}
+In order to specify spans of {\em logical\/} columns, we need
+an adapted version of \verb|\multispan|, \TeX book p.354,
+as given in the Encoding subsection.
+\\ Spans form a block.
+Around the blocks partial rules emerge.
+% How to cope with those is explained in the Partial Rule section.
+%
+\newbox\block\def\rowstblst{}\def\header{}\def\footer{}
+%
+\begin{itemize}
+\item{\bf Odd blocks}, 1-by-2 etc.\quad Use \verb|\logmsp|,
+ \verb|\srp|, \verb|\lineglue| and the like.
+Define appropriate \verb|\ghostrow|-s.
+\par\noindent
+{\small
+\def\rowstblst{}\def\header{}\def\footer{}\def\caption{}
+$$\setbox\block=\hbox{$1*2$}
+\def\data{\logmsp2\colsepsurround\hfil\copy\block\hfil\cs13\rs
+21\cs22\cs23\rs
+31\cs32\cs33}
+{\ruled\setbox0=\btable\data}
+\vcenter{\dotruled\btable\data}\qquad\qquad
+%
+%3-by-2, and connected cells
+\setbox\block=\hbox{{\large A}\enspace%
+ $\left\{\vrule height3ex depth3ex width0pt\right.$}
+\def\data{\logmsp2\hfil\cs13\grs
+\logmsp2\colsepsurround\hfil\vbox to 0pt{\vss
+ \copy\block\vss}\hfil\cs23\grs
+ \logmsp2\hfil\cs33\rs
+ 41\cs42\cs43}
+\def\ghostrow{\logmsp2\hfil\prs\lineglue\cr
+\ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\vcenter{\ruled\btable\data} \qquad\qquad
+%
+%3-by-3 block and all around
+\setbox\block=\hbox{\Large$3*3$}
+\def\data{\logmsp3\hfil\cs14\grs
+\logmsp3\hfil\vbox to 0pt
+ {\vss\copy\block\vss}\hfil\cs24\grs
+ \logmsp3\hfil\cs34\rs
+ 41\cs42\cs43\cs44}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+\logmsp3\hfil\prs\lineglue\cr
+\ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\def\caption{{\Large Caption}}
+\def\header{\logmsp4 Header\hfil$\Downarrow$\ }
+\def\rowstblst{{row 1}{row 2}{row 3}{{\hfil$\Rightarrow$}}}
+\def\footer{Footer}
+\vcenter{\ruled\framed\btable\data}$$
+}
+
+\par\noindent can be obtained via
+{\small\begin{verbatim}
+$$\setbox\block=\hbox{$1*2$}
+\def\data{\logmsp2\colsepsurround\hfil\copy\block\hfil\cs13\rs
+21\cs22\cs23\rs
+31\cs32\cs33} %end \data
+{\ruled\setbox0=\btable\data}%For measurement
+\vcenter{\dotruled\btable\data}\qquad\qquad
+%
+%3-by-2, and connected cells
+\def\data{\logmsp2\hfil\cs13\grs
+\logmsp2\colsepsurround\hfil\vbox to0pt{\vss
+ \copy\block\vss}\hfil\cs23\grs
+ \logmsp2\hfil\cs33\rs
+ 41\cs42\cs43} %end \data
+\setbox\block=\hbox{{\large A}\enspace%
+ $\left\{\vrule height3ex depth3ex width0pt\right.$}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+\logmsp2\hfil\prs\lineglue\cr
+\ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\vcenter{\ruled\btable\data}\qquad\qquad
+%
+%3-by-3 block and all around
+\def\data{\logmsp3\hfil\cs14\grs
+\logmsp3\hfil\vbox to 0pt{\vss\copy\block\vss}\hfil\cs24\grs
+ \logmsp3\hfil\cs34\rs
+ 41\cs42\cs43\cs44} %end \data
+\setbox\block=\hbox{\Large$3*3$}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+\logmsp3\hfil\prs\lineglue\cr\ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\def\caption{{\Large Caption}}
+\def\header{\logmsp4 Header\hfil$\Downarrow$\ }
+\def\rowstblst{{row 1}{row 2}{row 3}{{\hfil$\Rightarrow$}}}
+\def\footer{Footer}
+\vcenter{\ruled\framed\btable\data}$$
+\end{verbatim} }
+
+\penalty-250
+\item{\bf Even blocks}, 2-by-1 etc.\quad
+Leave the cells for the block open in \verb|\data|.
+Use \verb|\grs|, \verb|\prs|, \verb|\lineglue|,
+and the like. Define \verb|\ghostrow|.
+\par\noindent
+{\small
+\def\rowstblst{}\def\header{}\def\footer{}\def\caption{}
+$$%2-by-1
+\setbox\block=\hbox{A}
+\def\data{\cs12\cs13\grs
+ \cs22\cs23\rs
+ 31\cs32\cs33}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+\hfil\vbox to0pt{\vss\copy\block\vss}\hfil\prs
+ \logmsp2\lineglue\cr\nxtrs}
+{\ruled\framed\setbox0=\btable\data}%for measurement
+\vcenter{\dotruled\btable\data} \qquad\qquad
+%
+\setbox\block=\hbox{\large$2*2$}
+\def\data{\logmsp2\hfil\cs13\grs
+ \logmsp2\hfil\cs23\rs
+ 31\cs32\cs33}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+ \logmsp2\colsepsurround\hfil%
+ \vbox to0pt{\copy\block\vss}\hfil\prs\lineglue\cr\nxtrs}
+\vcenter{\framed\btable\data} \qquad\qquad
+%
+\setbox\block=\hbox{\large$2*3$}
+\def\data{\logmsp3\cs14\grs
+ \logmsp3\cs24\rs
+ 31\cs32\cs33\cs34}
+\def\caption{{\Large Caption}}
+\def\rowstblst{{row 1}{row 2}{{\hfil$\Rightarrow$}}}
+\def\header{\logmsp4 Header\hfil$\Downarrow$}
+\def\footer{Footer}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+\logmsp3\hfil%
+\vbox to0pt{\vss\copy\block\vss}\hfil\prs\lineglue\cr\nxtrs}
+\vcenter{\framed\ruled\btable\data}$$
+}
+
+\par\noindent can be obtained via
+{\small\begin{verbatim}
+$$\setbox\block=\hbox{\large A}%2-by-1 block
+\def\data{\cs12\cs13\grs
+ \cs22\cs23\rs
+ 31\cs32\cs33} %end \data
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi%
+\hfil\vbox to0pt{\vss\copy\block\vss}\hfil\prs
+ \logmsp2\lineglue\cr\nxtrs}
+{\ruled\framed\setbox0=\btable\data}%for measurement
+\vcenter{\dotruled\btable\data} \qquad\qquad
+%
+\setbox\block=\hbox{\large$2*2$}
+\def\data{\logmsp2\hfil\cs13\grs
+ \logmsp2\hfil\cs23\rs
+ 31\cs32\cs33} %end \data
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi%
+ \logmsp2\colsepsurround\hfil%
+ \vbox to0pt{\copy\block\vss}\hfil\prs\lineglue\cr\nxtrs}
+\vcenter{\framed\btable\data} \qquad\qquad
+%
+\setbox\block=\hbox{\large$2*3$}
+\def\data{\logmsp3\cs14\grs
+ \logmsp3\cs24\rs
+ 31\cs32\cs33\cs34} %end \data
+\def\caption{{\Large Caption}}
+\def\rowstblst{{row 1}{row 2}{{\hfil$\Rightarrow$}}}
+\def\header{\logmsp4 Header\hfil$\Downarrow$\ }
+\def\footer{Footer}
+\def\ghostrow{\ifx\empty\rowstblst\else\omit\lineglue\ea\srp\fi
+\logmsp3\hfil%
+\vbox to0pt{\vss\copy\block\vss}\hfil\prs\lineglue\cr\nxtrs}
+\vcenter{\framed\ruled\btable\data}$$
+\end{verbatim} }
+
+\penalty-250
+\item {\bf Multiple blocks}: in row stub \`and table proper
+\write16{Multiple blocks: \arabic{page}}
+
+{\small
+\def\rowstblst{}\def\header{}\def\footer{}\def\caption{}
+$$
+\setbox\block=\vbox{\hbox{\large A}\kern3ex\hbox{\large B}}
+\def\data{\cs12\cs13\grs
+ $\vcenter to0pt{\vss\copy\block\vss}$\cs22\cs23\grs
+ \cs32\cs33\lr}
+\def\ghostrow{\rss\prs\logmsp2\lineglue\cr\nxtrs}
+\def\lr{\tstrut\colsepsurround\cr
+ \prs\logmsp3\lineglue\gobble}
+\def\gobble#1#2{}%kludge to undo \tstrut, \colsepsurround
+\def\preinsert{\def\rss{&\colsepsurround\hfil\colsepsurround&}
+ \def\hs{\colsepsurround\tstrut\cr\prs\logmsp3\lineglue\cr\nxtrs}}
+\vcenter{\btable\data}\qquad\qquad\qquad
+\def\header{\logmsp3\hfill Header\hfill}
+\def\footer{Footer}
+\def\caption{{\Large Caption}}
+\def\rowstblst{{}{$\vcenter to0pt{\vss\Bigg\{\vss}$}{{}}}
+\vcenter{\ruled\btable\data}
+$$
+}
+
+\noindent via
+{\small\begin{verbatim}
+$$\setbox\block=\vbox{\hbox{\large A}\kern3ex\hbox{\large B}}
+\def\data{ \cs12\cs13\grs
+$\vcenter to0pt{\vss\copy\block\vss}$\cs22\cs23\grs
+ \cs32\cs33\lr}
+\vcenter{\btable\data}\qquad\qquad\qquad
+\def\caption{{\Large Caption}}
+\def\header{\logmsp3\hfill Header\hfill}
+\def\rowstblst{{}{$\vcenter to0pt{\vss\Bigg\{\vss}$}{{}}} $$
+\def\footer{Footer}
+\vcenter{\ruled\btable\data}
+\end{verbatim}
+}
+
+\noindent with
+
+{\small\begin{verbatim}
+\def\ghostrow{\rss\prs\logmsp2\lineglue\cr\nxtrs}
+\def\lr{\tstrut\colsepsurround\cr\prs\logmsp3\lineglue\gobble}
+\def\gobble#1#2{}%kludge to undo \tstrut, \colsepsurround
+\def\preinsert{\def\rss{&\colsepsurround\hfil\colsepsurround&}
+ \def\hs{\colsepsurround\tstrut\cr\prs\logmsp3\lineglue\cr\nxtrs}}
+\end{verbatim} }
+
+\noindent Not much is gained in clarity for complicated tables.
+The logical structure at the top level is there, however.
+
+\end{itemize}
+%
+\section*{Conclusions}
+Tables are diverse, and a variety of tools is needed.
+\\[.5ex]
+Some (deterministic) tables can be generated completely by computer,
+no detailed user mark up is needed, just the invoke of the macro.
+\\[.5ex]
+Mark up of bordered scientific tables can be done
+via the provided bordered table macro \verb|\btable|, in the SGML spirit.
+\\[.5ex]
+Complex tables need detailed formatting commands
+and \TeX nowledge, in agreement with \DeK, \TeX book p.245
+\begin{quote}`People who know how to make
+ruled tables are generally known as \TeX\ masters. Are you ready?'
+\end{quote}
+\noindent
+Hard things: not to introduce parameters which are already
+available, and to avoid redundancy.
+However, I could not get around
+\verb|\colsepsurround|, because of the impossibility to control the kind
+of glue inserted by \verb|\tabskip|. \\
+I pity the lack of dotted equivalents of \verb|\hrule|, and \verb|\vrule|,
+as \TeX\ primitives.
+%I nearly succeeded, because I could not extend the
+%partial horizontal rules to the frame.
+%It was hard to prevent
+%improper use of \verb|\omit|.\\[.5ex]
+\\[.5ex]
+Typesetting tables requires a discipline to be adhered to. What about a
+discipline of \TeX ing?
+%
+%\section*{References}\vspace{.5cm}
+\begin{thebibliography}{Schneiderman 87}
+\bibitem{AAP89} {\sc Association of American Publishers}, ``Markup of
+Tabular Material'', Version 2.0 AAP Inc., 1989.
+\bibitem{ga92}{} Asher, ``Inside Type \& Set'', TUGboat, 13.1, 1992,
+pp.~13--22.
+\bibitem{abk89}{} Anne {\sc Br\"uggeman-Klein}, D. {\sc Wood}, ``Drawing
+Trees nicely with \TeX'', EP-ODD, 2, 2, 1989, pp.101\dash115.
+\bibitem{dc92}{} David {\sc Carlisle}, ``longtable.sty'', from the fileserver,
+1992.
+\bibitem{rfc85}{} Ray F. {\sc Cowan}, ``tables.tex'', from the fileserver,
+1985. 7p.
+\bibitem{ah89}{} Amy {\sc Hendrickson},
+{\em Macro\TeX}, version 0, 1989.
+\bibitem{taj}{} Theo A. {\sc Jurriens},
+``supertabular.sty'', from the fileserver, 1989.
+\bibitem{khanh90}{} Khanh {\sc Ha}, ``Easy Table'', TUGboat, 11.2, 1990,
+pp.~250--264.
+\bibitem{dek73}{} Donald E. {\sc Knuth},
+{\em The Art of Computer Programming, 3. Sorting and Searching},
+Addison-Wesley, Reading Mass., 1973.
+\bibitem{dek84}{} Donald E. {\sc Knuth},
+{\em The \TeX book}, Addison-Wesley, Reading Mass., 1984.
+\bibitem{hk91} Hanna {\sc Ko{\l}odziejska},
+``Go diagrams with \TeX'', MAPS 91.2, 1991, pp.~63--68.
+%\bibitem{cgl89}{} Kees {\sc van der Laan},
+%``Typesetting Bridge via \LaTeX'', TUGboat, 10.1, 1989, pp.~113--116.
+\bibitem{cgl90}{} Kees {\sc van der Laan},
+``Typesetting Bridge via \TeX'', TUGboat, 11.2, 1990, pp.~265--276.
+(An earlier \LaTeX\ set-up appeared in TUGboat, 10.1, 1989, pp.~113--116.)
+\bibitem{cgl90a}{} Kees {\sc van der Laan},
+``SGML(, \TeX\ and \dots)'', TUGboat, 12.1, 1991, pp.~90--104.
+Proceedings Euro\TeX{} 90. Also MAPS 90.1.
+\bibitem{cgl91}{} Kees {\sc van der Laan},
+``Math into BLUes, Part I'', TUGboat, 12.4, 1991, pp.~485--501. (Part II
+has appeared in GUTenberg Cahiers 10\&11, Proceedings Euro\TeX{} 91.)
+ Also MAPS 90.2.
+\bibitem{cgl92a}{} Kees {\sc van der Laan},
+``Tower of Hanoi, revisited'', TUGboat, 13.1, 1992, pp.~91--94.
+Also MAPS 92.1, pp.~125\dash127.
+\bibitem{cgl92b}{} Kees {\sc van der Laan},
+``Typsetting Crosswords via \TeX'', This proceedings. Also MAPS 92.1,
+pp.~128\dash131.
+\bibitem{cgl92c}{} Kees {\sc van der Laan},
+``FIFO and LIFO incognito'',
+This proceedings. Also MAPS, 92.1, pp.~121\dash124.
+\bibitem{cgl92d}{} Kees {\sc van der Laan},
+``FIFO and LIFO sing the BLUes'', MAPS, 92.2.
+\bibitem{lam86}{} Leslie {\sc Lamport},
+{\em \LaTeX{} user's guide and reference manual}, Addison-Wesley, Reading,
+Mass., 1986.
+\bibitem{lesk79}{} M. E. {\sc Lesk}, ``Tbl -- a program to format tables'',
+UNIX manual, pp.~157--174, 1979.
+\bibitem{jep88} J.E {\sc Pittman},
+``Loopy.\TeX'', TUGboat, 9.3, 1988, pp.~289--291.
+\bibitem{ds92}David {\sc Salomon}, ``Advanced \TeX\ course: Insights \&
+Hindsights,'' MAPS Special, 1992, 252p.
+\bibitem{mds89}{} Michael D. {\sc Spivak},
+{\em LAmS\TeX---The Synthesis}. \TeX plorators.
+\bibitem{pt92} Piet {\sc Tutelaers},
+``A font and a style for typesetting chess using \LaTeX\ or \TeX'',
+TUGboat, 13.1, 1992, pp.~85--90.
+\bibitem{pesw}{} Paul E. S. {\sc Wormer}, ``Young tableaux'',
+from the listserver tex-nl@hearn.
+\end{thebibliography}
+\end{document}
+
+
+
+
+
+
+
+
diff --git a/macros/generic/laansort/sort.tex b/macros/generic/laansort/sort.tex
new file mode 100644
index 0000000000..c6b9214da9
--- /dev/null
+++ b/macros/generic/laansort/sort.tex
@@ -0,0 +1,796 @@
+
+%Contents: Sorting via TeX (heap and quick) %Submission CTAN
+% Introduced at TUG 93.
+%Version: 1.0 December 1993.
+%Purpose: Sorting within TeX.
+%Example of use (after \input sort.tex %the auxiliaries
+% \input heap.tex resp. quick.tex %the macros)
+%Documentation: Proceedings TUG 93, Aston, TUGboat 14.3, (abridged)
+% and MAPS 93.1 (complete)
+%C.G. van der Laan, Hunzeweg 57, 9893PB, Garnwerd. Holland. 05941-1525.
+% cgl@risc1.rug.nl
+%For TeX-ing this contribution use ltugproc.sty; the macros can be used
+%with AllTeX.
+%This file contains
+% - History of changes
+% - Auxiliaries (sort.tex)
+% - heap.tex
+% - quick.tex
+% - Example heap sort
+% - quick sort
+%
+%%%%%%%%%% History of changes %%%%%%%%%%
+%History of change files
+%Jan 1994: Submission CTAN.
+%
+%Next follows the two appendices as supplied in TUGboat 14, 3 with the macros
+%included, so that it can be processed by ltugproc.sty
+\documentstyle{ltugproc}
+\title{Sorting macros}
+\author{Kees van der Laan}
+\address{Hunzeweg 57, 9893 PB, Garnwerd, The Netherlands}
+\netaddress[\network{Internet}]{cgl@risc1.rug.nl}
+\begin{abstract} The macros as submitted for CTAN.
+They are embedded in an article which consists of the appendices
+heap sort and quick sort.
+The latter show the low level use of the (worker) macros.
+For high level use see the article in TUGBoat 14, 3, (TUG 93) or
+the complete---Sorting in BLUe---as released in MAPS 93.1.
+\end{abstract}
+\maketitle
+\let\ftn\footnote
+\begin{document}
+\noindent Contents of file\\
+- sort.tex (auxiliaries)\\
+- heap.sort (specific for heap sort)\\
+- quick.sort (specific for quick sort)\\
+- the two appendices.
+
+\vfill\eject
+%
+%%%%%%%%%% Auxiliaries sort.tex %%%%%%%%%%
+%Sort tex macros%sort.tex Jan 93
+%Shorthands
+\let\ag=\aftergroup
+\let\ea=\expandafter\let\nx=\noexpand
+%Counters
+\newcount\n\newcount\k\newcount\kk\n=0
+\newcount\kzero\kzero0 %Bias value
+\newcount\pk\newcount\pkone%Used in sortcs
+\newcount\frst%First value of range
+\newcount\lst %Last value of range
+\newcount\slst%Successor \lst
+\newcount\dif %Difference \lst-\frst
+\newcount\nw %Number of words
+\newcount\nc %Number of characters/comp
+\newcount\numex %Number of exchanges
+\newcount\rndval%Random number
+\newcount\rndnum%Seed random generator
+\newcount\rndtmp%Temporary value
+\newcount\status%Status comparison
+%Newif-s
+\newif\ifcontinue%controls loops
+\newif\iffound%locating accent cs
+\newif\ifproof\prooftrue
+%
+%Storing: from copy
+\def\seq#1\qes{\k0 \fifow#1 \wofif{} }
+%Auxiliaries: FIFO
+\def\fifow#1 {\ifx\wofif#1\n\k\wofif\fi
+ \processw{#1}\fifow}
+\def\wofif#1\fifow{\fi}
+\def\processw#1{\advance\k1 \ea
+ \gdef\csname\the\k\endcsname{#1}}
+%
+%Storing: from file
+\newread\rec
+\def\storefrom#1{%#1 is file name
+ \openin\rec=#1 \k\kzero \continuetrue
+ \loop\ifeof\rec\continuefalse\fi
+ \ifcontinue\advance\k1{}\read\rec to\xyz
+ \ea\let\csname\the\k\endcsname=\xyz
+ \repeat\advance\k-1\n\k\closein\rec}
+%
+%Storing: random numbers
+\def\storerandomn#1{%#1 number of numbers
+ \n#1\k0
+ \loop\ifnum\k<\n\advance\k1 \rnd\ea
+ \xdef\csname\the\k\endcsname{\the\rndval}
+ \repeat}
+%
+%With, due to Reid, 1987
+\def\rnd{\global\multiply\rndnum371{}%
+ \global\advance\rndnum1{}%
+ \ifnum\rndnum>99999
+ \rndtmp\rndnum \divide\rndtmp100000
+ \multiply\rndtmp100000
+ \global\advance\rndnum-\rndtmp
+ \fi\global\rndval\rndnum
+ \global\divide\rndval1000 }
+%
+%Storing: random words
+\def\storerandomw#1{%#1 number of words
+ \n#1\nw\n\def\defarr{\ea\gdef
+ \csname\the\nw\endcsname}
+ {\loop\ifnum0<\nw{\ag\defarr\ag{%
+ \randomword}}\advance\nw-1
+ \repeat}}%end s-r-w.
+%
+\def\randomword{\rnd \nc\rndval
+ \divide\nc15 \advance\nc2
+ \loop\ifnum0<\nc\randomchar
+ \advance\nc-1
+ \repeat}%end r-word
+%
+%Random character is modified
+\def\randomchar{\rnd
+ \multiply\rndval29 \divide\rndval100
+ \ifnum26=\rndval\rndval0 \fi
+ \ifnum26<\rndval\rndval4 \fi
+%Mod cgl: I \ag-ed the letter
+\ea\ag\ifcase\rndval
+ a\or b\or c\or d\or e\or f\or g\or h\or
+ i\or j\or k\or l\or m\or n\or o\or p\or
+ q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\fi}%end r-char
+%
+%Typeset
+%Parameters: Separators
+\def\sepn{, }%Number separator
+\def\sepw{ } %Word separator
+\let\sep\sepw
+%
+\def\prc#1{\init{#1}\def\prc##1{%
+ \ifnum\lst=##1{}\else\ifnum\slst=##1{}%
+ \lst\slst\advance\slst1{}\else
+ \prtfl\sepn\init{##1}\fi\fi}}
+%
+\def\init#1{\frst=#1\lst=#1\slst=#1{}%
+ \advance\slst1{}}
+%
+%Print range: \frst-\lst (or \lst).
+\def\prtfl{\the\frst\ifnum\frst<\lst
+ \advance\frst1{}\ifnum\frst=\lst\sepn
+ \else\nobreak--\nobreak\fi\the\lst\fi}
+%
+%Printing sequences
+\def\prts{{\k\kzero%print \1,...\n
+ \def\sep{\let\sep=\sepw}%
+ \loop\ifnum\k<\n\advance\k1
+ \sep\csname\the\k\endcsname
+ \repeat}}%end \prts
+%
+\let\prtw=\prts
+%
+\def\prtn{{\k\kzero%Print number sequence
+ \loop\ifnum\k<\n\advance\k1
+ \ea\prc\csname\the\k\endcsname
+ \repeat\prtfl}}%end \prtn
+%
+\def\typind#1{%#1 a def
+ \ea\splittot#1.%
+ \ifcase\digit\word\or
+ {\tt\word}\or
+ {\tt\char92\word}\or
+ $\langle\hbox{\word}\rangle$\fi{}
+ \pagenrs}
+%
+\def\splittot#1 !#2 #3.{\def\word{#1}%
+ \chardef\digit=#2{}\def\pagenrs{#3}}
+%
+\def\prtind{{\def\\{\hfil\break}\k\kzero
+ \def\sep{\let\sep\sepw}%
+ \loop\ifnum\k<\n\advance\k1
+ \sep\ea\typind\csname\the\k\endcsname
+ \repeat}}
+%
+%Sorting in O(nlog n)
+%Numbers
+\def\sortn{\let\cmp\cmpn\sort\prtn}
+%
+%ASCII words
+\def\sortaw{\let\cmp\cmpaw\sort\prtw}
+%
+%Words (with accents)
+\def\sortw{\let\cmp\cmpw{\accdef\sort}\prtw}
+%
+\def\sort{\heapsort}
+%
+%Paramaters: ij and accent string
+\def\accstr{\`\'\"\^\c}
+%
+\def\accdef{\def\i{i}\def\j{j}%
+ \def\'##1{##1a}\def\`##1{##1g}%
+ \def\"##1{##1t}\def\^##1{##1h}%
+ \def\c##1{##1c}}
+%
+\def\ij{ij}
+%
+%Sorting parameters: exchange macro
+\def\xch#1#2{%#1, #2 counter variables
+ \ea\let\ea\auxone\csname\the#1\endcsname
+ \ea\let\ea\auxtwo\csname\the#2\endcsname
+ \ea\global\ea\let\csname\the#2\endcsname
+ \auxone
+ \ea\global\ea\let\csname\the#1\endcsname
+ \auxtwo}
+%
+%Sorting parameters: number comparison
+\def\cmpn#1#2{%#1, #2 are def-s
+%Result: \status= 0, 1, 2, if
+% \val{#1} =, >, < \val{#2}
+ \ifnum#1=#2\global\status0 \else
+ \ifnum#1>#2\global\status1 \else
+ \global\status2 \fi\fi}
+%
+%Parameters: comparison of words
+\def\cmpw#1#2{%#1, #2 are def-s
+%Result: \status= 0, 1, 2, if
+% \val{#1} =, >, < \val{#2}
+ \let\nxt\nxtw\cmpc#1#2}
+%
+\def\cmpaw#1#2{%#1, #2 are defs with as
+%replacement text the words.
+%Result: \status= 0, 1, 2, if
+% \val{#1} =, >, < \val{#2}
+ \let\nxt\nxtaw\cmpc#1#2}
+%
+\def\cmpc#1#2{%#1, #2 are def-s
+%Result: \status= 0, 1, 2, if
+% \val{#1} =, >, < \val{#2}
+\ifproof\global\advance\nc1
+ \let\aa#1\let\bb#2\fi
+ \global\status0 \continuetrue
+ {\loop\ifx\empty#1\continuefalse\fi
+ \ifx\empty#2\continuefalse\fi
+ \ifcontinue\nxt#1\nxtt\nxt#2\nxtu
+ \lge\nxtt\nxtu
+ \repeat}\ifnum0=\status
+ \ifx\empty#1\ifx\empty#2\else
+ \global\status2 \fi
+ \else\ifx\empty#2\global\status1 \fi
+ \fi\fi
+ \ifproof\immediate\write16{\aa
+ \ifnum0=\status=\else
+ \ifnum1=\status>\else
+ <\fi\fi\bb.}
+ \fi%end ifproof
+}
+%
+\def\lge#1#2{%#1 and #2 letter values
+%Result: \status= 0, 1, 2, if
+% #1 =, >, < #2.
+%and \continuefalse if #1=/#2.
+ \ifnum#1=#2{}\else\continuefalse
+ \ifnum#1<#2\global\status2 \else
+ \global\status1 \fi
+ \fi}
+%
+\def\nxtw#1#2{\def\pop##1##2\pop{%
+ \gdef#1{##2}\def\head{##1}}%head and tail
+ \ea\pop#1\pop%split in head and tail
+ \ea\loc\head\accstr%\head is an accent cs?
+ \iffound\let\acs\head
+ \ea\pop#1\pop%next head and tail
+ \ea\let\ea#2\csname ot\acs\head\endcsname
+ \else\ea\let\ea#2\csname ot\head\endcsname
+ \fi}
+%
+\def\loc#1#2{\def\locate##1#1##2\end
+ {\ifx\empty##2\empty\foundfalse
+ \else\foundtrue\fi}\ea\locate#2.#1\end}
+%
+%Parameters: for ASCII words
+\def\nxtaw#1#2{%Result: value of first
+%letter of string supplied in #1 is delivered
+%in #2. (To be used as a number (\chardef)).
+%#1, #2 are control sequences.
+ \def\pop##1##2\pop{\gdef#1{##2}%
+ \chardef#2=`##1{}}\ea\pop#1\pop}
+%
+\def\cmpir#1#2{%#1, #2 defs
+%Result: \status= 0, 1, 2 if
+% \val{#1} =, >, < \val{#2}
+ \ea\ea\ea\decom\ea#1\ea;#2.}
+%
+\def\decom#1 !#2 #3;#4 !#5 #6.{%
+ \def\one{#1}\def\four{#4}\cmpaw\one\four
+ \ifnum0=\status%Compare secondary keys
+ \ifnum#2<#5{}\global\status2{}\else
+ \ifnum#2>#5{}\global\status1{}\else
+ %Compare tertiary keys
+ \ifnum#3<#6{}\global\status2{}\else
+ \ifnum#3>#6{}\global\status1{}\fi
+ \fi
+ \fi
+ \fi
+ \fi}
+%
+\def\red{%Reduction of \1,...,\n
+ \k0\kk0\let\refer\empty
+ \loop\ifnum\k<\n\advance\k1
+ \ea\let\ea\record\csname\the\k\endcsname
+ \ea\splitwn\record.%
+ \ifx\refer\word%extend with number
+ \ea\xdef\csname\the\kk\endcsname{%
+ \csname\the\kk\endcsname, \num}%
+ \else%write record to \kk
+ \advance\kk1\let\refer\word\ea\global
+ \ea\let\csname\the\kk\endcsname\record
+ \fi
+ \repeat\n=\kk}
+%
+\def\redrng{%Reduction of \1,...,\n, with
+%range representation of page numbers
+ {\k1\kk0
+ \ea\let\ea\record\csname\the\k\endcsname
+ \ea\splitwn\record.\let\refer\word
+ \let\nrs\empty\prcrng\num
+ \loop\ifnum\k<\n\advance\k1
+ \ea\let\ea\record\csname\the\k\endcsname
+ \ea\splitwn\record.%
+ \ifx\refer\word%extend \nrs with number
+ \prcrng\num
+ \else%write record to \kk
+ \advance\kk1 \strnrs
+ \ea\xdef\csname\the\kk\endcsname{\refer{}
+ \nrs}\let\nrs\empty\init\num\prcrng\num
+ \let\refer\word
+ \fi
+ \repeat\ifnum1<\n
+ \advance\kk1 \strnrs
+ \ea\xdef\csname\the\kk\endcsname{\word{}
+ \nrs}
+ \global\n\kk\fi}}
+%
+\def\prcrng#1{\init{#1}\def\prcrng##1{%
+ \ifnum##1=\lst\else\ifnum##1=\slst
+ \lst\slst\advance\slst1 \else
+ \strnrs\init{##1}\fi\fi}}
+%
+\def\strnrs{\dif\lst\advance\dif-\frst
+ \edef\nrs{\ifx\nrs\empty\else\nrs\sepn\fi
+ \the\frst\ifnum0<\dif
+ \ifnum1=\dif\sepn\the\lst
+ \else\nobreak--\nobreak\the\lst
+ \fi
+ \fi}}
+%
+\def\splitwn#1 !#2 #3.{\def\word{#1 !#2}%
+ \def\num{#3}}
+%
+\def\getdig#1 !#2 #3.{\def\dig{#2}}
+%
+\def\sortcs{\global\k0\global\pk\n
+\global\pkone\pk\global\advance\pkone1
+%Invariant: 1:k non-cs; pk+1:n control seq-s
+\loop\global\advance\k1
+\ifnum\k<\pkone
+ \ea\ea\ea\getdig\csname\the\k\endcsname.%
+ \if2\dig{\continuetrue
+ \loop
+ \ifnum\k=\pk\continuefalse
+ \else\ea\ea\ea\getdig\csname\the\pk
+ \endcsname.%
+ \if2\dig
+ \else\xch\k\pk\continuefalse
+ \fi
+ \fi\global\pkone\pk\global\advance\pk-1
+ \ifcontinue
+ \repeat}%
+ \fi
+\repeat}%Result\1:\pk non-cs, \pkone:\n cs
+%
+%Parameters: Ordering table
+\chardef\ota=32 \chardef\otA=32
+ \chardef\otaa=33 \chardef\otag=33
+ \chardef\otat=34 \chardef\otah=35
+\chardef\otb=39 \chardef\otB=39
+\chardef\otc=46 \chardef\otC=46
+ \chardef\otcc=47 \chardef\otcc=47
+\chardef\otd=53 \chardef\otD=53
+\chardef\ote=60 \chardef\otE=60
+ \chardef\otea=61 \chardef\oteg=62
+ \chardef\otet=63 \chardef\oteh=64
+\chardef\otf=67 \chardef\otF=67
+\chardef\otg=74 \chardef\otG=74
+\chardef\oth=81 \chardef\otH=81
+\chardef\oti=88 \chardef\otI=88
+ \chardef\otit=91 \chardef\otih=92
+\chardef\otj=95 \chardef\otJ=95
+ \chardef\otjt=98
+\chardef\otk=102 \chardef\otK=102
+\chardef\otl=109 \chardef\otL=109
+\chardef\otm=116 \chardef\otM=116
+\chardef\otn=123 \chardef\otN=123
+\chardef\oto=130 \chardef\otO=130
+ \chardef\otoa=131 \chardef\otog=132
+ \chardef\otot=133 \chardef\otoh=134
+\chardef\otp=137 \chardef\otP=137
+\chardef\otq=143 \chardef\otQ=143
+\chardef\otr=150 \chardef\otR=150
+\chardef\ots=157 \chardef\otS=157
+\chardef\ott=164 \chardef\otT=164
+\chardef\otu=171 \chardef\otU=171
+ \chardef\otut=174 \chardef\otuh=175
+\chardef\otv=178 \chardef\otV=178
+\chardef\otw=185 \chardef\otW=185
+\chardef\otx=192 \chardef\otX=192
+\chardef\otij=199 \chardef\otIJ=199
+\chardef\oty=200 \chardef\otY=200
+\chardef\otz=206 \chardef\otZ=206
+%\endinput %cgl@rug.nl
+%
+%%%%%%%%%% heap sort macro %%%%%%%%%%
+%heapsort.tex Jan, 93
+\newcount\n\newcount\lc\newcount\r
+\newcount\ic\newcount\uone
+\newcount\jc\newcount\jj\newcount\jjone
+\newif\ifgoon
+%Non-descending sorting
+\def\heapsort{%data in \1 to \n
+\r=\n\heap\ic=1{}%
+{\loop\ifnum\r>1{}\xch\ic\r
+ \advance\r-1{}\sift\ic\r
+\repeat}}
+%
+\def\heap{%Transform \1..\n into heap
+ \lc=\n\divide\lc2{}\advance\lc1{}%
+ {\loop\ifnum\lc>1{}\advance\lc-1{}%
+ \sift\lc\n\repeat}}
+%
+\def\sift#1#2{%#1, #2 counter variables
+ \jj=#1\uone=#2\advance\uone1{}\goontrue
+ {\loop\jc=\jj \advance\jj by\jj
+ \ifnum\jj<\uone
+ \jjone=\jj \advance\jjone1{}%
+ \ifnum\jj<#2{}\cmpval\jj\jjone
+ \ifnum2=\status\jj=\jjone\fi\fi
+ \cmpval\jc\jj\ifnum2>\status\goonfalse\fi
+ \else\goonfalse\fi
+\ifgoon\xch\jc\jj\repeat}}
+%
+\def\cmpval#1#2{%#1, #2 counter variables
+%Result: \status= 0, 1, 2 if
+% \val{#1} =, >, < \val{#2}
+ \ea\let\ea\aone\csname\the#1\endcsname
+ \ea\let\ea\atwo\csname\the#2\endcsname
+ \cmp\aone\atwo}
+%\endinput %cgl@rug.nl
+%
+%%%%%%%%%% quick sort macro %%%%%%%%%%
+\newcount\low\newcount\up\newcount\m
+\def\quicksort{%Values given in
+%\low,...,\up are sorted, non-descending.
+%Parameters: \cmp, comparison.
+ \ifnum\low<\up\else\brk\fi
+%\refval, a reference value selected at random.
+ \m=\up\advance\m-\low%Size-1 of array part
+ \ifnum10<\m\rnd\multiply\m\rndval
+ \divide\m99{}\advance\m\low \xch\low\m
+ \fi
+ \ea\let\ea\refval\csname\the\low\endcsname
+ \m=\low\k=\low\let\refvalcop=\refval
+ {\loop\ifnum\k<\up\advance\k1{}%
+ \ea\let\ea\oneqs\csname\the\k\endcsname
+ \cmp\refval\oneqs\ifnum1=\status
+ \global\advance\m1{}\xch\m\k\fi
+ \let\refval=\refvalcop
+ \repeat}\xch\low\m
+ {\up=\m\advance\up-1{}\quicksort}%
+ {\low=\m\advance\low1{}\quicksort}\krb}
+%
+\def\brk#1\krb{\fi}\def\krb{\relax}
+%\endinput %cgl@rug.nl
+%
+%%%%%%%%%% Example: heap sort %%%%%%%%%%
+\onecolumn
+\section{Appendix: Heap Sort} %Aug, 93, cgl@risc1.rug.nl
+The process consists of two main steps:
+ creation of a heap, and sorting the heap.
+A sift operation is used in both.
+
+In comparison with my earlier release of the code in MAPS92.2,
+I adapted the notation with respect to sorting in {\em non-decreasing\/}
+order.\ftn{It is true that the reverse of the comparison operation would
+ do, but it seemed more consistent to me to adapt
+ the notation of the heap concept with
+ the smallest elements at the bottom.}
+
+What is a heap? A sequence $a_1, a_2, \ldots, a_n$, is a heap if
+$a_k\ge a_{2k} \wedge a_k\ge a_{2k+1}, k=1, 2, \ldots, n\div2$, and
+because $a_{n+1}$ is undefined, the notation is simplified by
+defining $a_k>a_{n+1}, k= 1, 2, \ldots , n$.
+\\
+For example, a tree and one of its heap representations of $2, 6, 7, 1, 3, 4$
+read
+$$\setlength{\unitlength}{3ex}
+\vcenter{\noindent\hsize=18ex
+\begin{picture}(7,4.5)(0,-.5)
+\put(.5,.5){\circle{1}}
+\put(.5,.5){\makebox(0,0){1}}
+\put(2.5,.5){\circle{1}}
+\put(2.5,.5){\makebox(0,0){3}}
+\put(4.5,.5){\circle{1}}
+\put(4.5,.5){\makebox(0,0){4}}
+\put(1.5,2.5){\circle{1}}
+\put(1.5,2.5){\makebox(0,0){6}}
+\put(5.5,2.5){\circle{1}}
+\put(5.5,2.5){\makebox(0,0){7}}
+\put(3.5,3.5){\circle{1}}
+\put(3.5,3.5){\makebox(0,0){2}}
+\put(.9,1){\line(1,2){.5}}
+\put(2.1,1){\line(-1,2){.5}}
+\put(4.9,1){\line(1,2){.5}}
+\put(2,2.9){\line(2,1){1}}
+\put(5,2.9){\line(-2,1){1}}
+\end{picture}}
+\qquad\qquad
+\vcenter{\noindent\hsize=21ex
+\begin{picture}(7,5)(0,-.5)
+\put(.5,.5){\circle{1}}
+\put(.5,.5){\makebox(0,0){2}}
+\put(2.5,.5){\circle{1}}
+\put(2.5,.5){\makebox(0,0){3}}
+\put(4.5,.5){\circle{1}}
+\put(4.5,.5){\makebox(0,0){1}}
+\put(1.5,2.5){\circle{1}}
+\put(1.5,2.5){\makebox(0,0){6}}
+\put(5.5,2.5){\circle{1}}
+\put(5.5,2.5){\makebox(0,0){4}}
+\put(3.5,3.5){\circle{1}}
+\put(3.5,3.5){\makebox(0,0){7}}
+\put(.9,1){\line(1,2){.5}}
+\put(2.1,1){\line(-1,2){.5}}
+\put(4.9,1){\line(1,2){.5}}
+\put(2,2.9){\line(2,1){1}}
+\put(5,2.9){\line(-2,1){1}}
+\end{picture}}
+$$
+%
+\subsection{The algorithm.}
+In a pseudo notation the algorithm,
+for sorting the array a[1:n], reads
+
+\def\PO#1{\mathop{\hbox{\bf#1}}}
+\def\P#1{\hbox{\bf#1}\,}
+{\obeylines \parindent=0pt
+\%heap creation
+$l:=n\PO{div}2+1; $
+$\P{while} l\ne1 \PO{do} l:=l-1; sift(a, l, n)\PO{od}$
+\%sorting
+$r:=n; $
+$\P{while} r\ne1 \PO{do} (a[1], a[r]):=(a[r], a[1])\%exchange $
+$\quad r:=r-1; sift(a, 1, r)\PO{od} $
+\%sift \#1 through \#2
+$j:=\#1 $
+$\P{while} 2j\geq\#2 \wedge(a[j]<a[2j]\vee a[j]<a[2j+1])\PO{do} $
+$\quad mi:=2j+\PO{if}a[2j]>a[2j+1]\PO{then}0\PO{else}1\PO{fi}$
+$\quad exchange(a[j], a[mi])\,j:=mi\,\P{od}$
+}%end scope \obeylines
+%
+\subsection{Encoding: Purpose.} Sorting values given in an array.
+%
+\subsection{Encoding: Input.} The values are stored in the control sequences
+\verb|\1|, \ldots, \verb|\|$\langle n\rangle$.
+The counter \verb|\n| must contain the value $\langle n\rangle$.
+The parameter for comparison, \verb|\cmp|,
+must be \verb|\let|-equal to \verb|\cmpn|, for numerical
+comparison, to \verb|\cmpw|, for word comparison, to \verb|\cmpaw|,
+for word comparison obeying the ASCII ordering, or to a comparison
+macro of your own.
+(The latter macro variants, and in general the common definitions for
+ \verb|\heapsort|, and \verb|\quicksort|,
+ are supplied in the file \verb|sort.tex|, see van der Laan (1993).)
+%
+\subsection{Encoding: Output.}
+The sorted array \verb|\1|, \verb|\2|, \ldots \verb|\|$\langle n\rangle$,
+with \verb|\val1| $\le$ \verb|\val2| $\le$
+\ldots $\le$ \verb|\val|$\langle n\rangle$. %\ftn{And {\tt\char92%
+ %def\char92val\#1$\{$\char92csname\#1\char92endcsname$\}$.}}
+%
+\subsection{Encoding: Source.}
+\begin{verbatim}
+%heapsort.tex Jan, 93
+\newcount\n\newcount\lc\newcount\r\newcount\ic\newcount\uone
+\newcount\jc\newcount\jj\newcount\jjone \newif\ifgoon
+%Non-descending sorting
+\def\heapsort{%data in \1 to \n
+\r\n\heap\ic1
+{\loop\ifnum1<\r \xch\ic\r \advance\r-1 \sift\ic\r\repeat}}
+%
+\def\heap{%Transform \1..\n into heap
+ \lc\n\divide\lc2{}\advance\lc1
+ {\loop\ifnum1<\lc\advance\lc-1 \sift\lc\n\repeat}}
+%
+\def\sift#1#2{%#1, #2 counter variables
+ \jj#1\uone#2\advance\uone1 \goontrue
+ {\loop\jc\jj \advance\jj\jj
+ \ifnum\jj<\uone \jjone\jj \advance\jjone1
+ \ifnum\jj<#2 \cmpval\jj\jjone
+ \ifnum2=\status\jj\jjone\fi
+ \fi\cmpval\jc\jj\ifnum2>\status\goonfalse\fi
+ \else\goonfalse
+ \fi
+ \ifgoon\xch\jc\jj\repeat}}
+%
+\def\cmpval#1#2{%#1, #2 counter variables
+%Result: \status= 0, 1, 2 if
+%values pointed by
+% #1 =, >, < #2
+ \ea\let\ea\aone\csname\the#1\endcsname
+ \ea\let\ea\atwo\csname\the#2\endcsname
+ \cmp\aone\atwo}
+\endinput %cgl@risc1.rug.nl
+\end{verbatim}
+%
+\subsection{Explanation: {\tt\char92heapsort}.}
+The values given in \verb|\1,...\|$\langle n\rangle$,
+are sorted in non-descending order.
+\subsection{Explanation: {\tt\char92heap}.}
+The values given in \verb|\1|, \ldots, \verb|\|$\langle n\rangle$,
+ are rearranged into a heap.
+\subsection{Explanation: {\tt\char92sift}.}
+The first element denoted by the first (counter) argument
+has disturbed the heap. Sift rearranges
+the part of the array denoted by its two arguments, such that the
+heap property holds again.
+\subsection{Explanation: {\tt\char92cmpval}.}
+The values denoted by the counter values,
+ supplied as arguments, are compared.
+%
+\subsection{Examples of use: Numbers, words.} %, and accented words)
+After \verb=\input heap \input sort=
+\begin{verbatim}
+\def\1{314}\def\2{1}\def\3{27}\n3 \let\cmp\cmpn\heapsort
+\begin{quote}\prtn,\end{quote}
+%
+\def\1{ab}\def\2{c}\def\3{aa}\n3 \let\cmp\cmpaw\heapsort
+\begin{quote}\prtw,\end{quote}
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}\def\4{\'el\`eve}\n4
+\let\cmp\cmpw {\accdef\heapsort}
+\begin{quote}\prtw\end{quote}
+\end{verbatim}
+yields\ftn{{\tt\char92accdef} suitably redefines the
+ accents within this scope.}
+\def\1{314}\def\2{1}\def\3{27}\n=3
+{\let\cmp\cmpn\heapsort
+\begin{quote}\prtn,\end{quote}
+%
+\def\1{ab}\def\2{c}\def\3{aa}\n=3
+\let\cmp\cmpaw\heapsort
+\begin{quote}\prtw,\end{quote}
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}\def\4{\'el\`eve}\n=4
+\let\cmp=\cmpw{\accdef\heapsort}
+\begin{quote}\prtw.\end{quote}
+}
+%
+\clearpage
+%%%%%%%%%% Example: quick sort %%%%%%%%%%
+\section{Appendix: Quick Sort}
+The quick sort algorithm has been discussed in many places. %,
+%for example \cite{dek73}.
+Here the following code due to Bentley %\cite{jb86}, p.~112,
+has been transliterated.\footnote{L, U have been changed in the \TeX\ code
+ into low, up.}
+\begin{verbatim}
+procedure QSort(L,U)
+if L<U then Swap(X[l], X[RandInt(L,U)]) T:=X[L] M:=L
+ for I:=L+1 to U do if X[I]<T M:=M+1 Swap(X[M], X[I]) fi od
+ Swap(X[L], X[M])
+ QSort(L, M-1) QSort(M+1, U)
+fi
+\end{verbatim}
+%
+\subsection{Encoding: Purpose.}
+Sorting of the values given in the array
+\verb|\|$\langle low\rangle$, \ldots, \verb|\|$\langle up\rangle$.
+\subsection{Encoding: Input.}
+The values are stored in
+\verb|\|$\langle low\rangle$, \ldots, \verb|\|$\langle up\rangle$,
+with $1\le low\le up\le n$.
+The parameter for comparison, \verb|\cmp|,
+must be \verb|\let|-equal
+to \verb|\cmpn|, for number comparison,
+to \verb|\cmpw|, for word comparison,
+to \verb|\cmpaw|,
+for word comparison obeying the ASCII ordering,
+or to a comparison macro of your own.
+(The latter macros, and in general the common definitions for
+ \verb|\heapsort|, and \verb|\quicksort|,
+ are supplied in the file \verb|sort.tex|, see van der Laan (1993).)
+%
+\subsection{Encoding: Output.}
+The sorted array \verb|\|$\langle low\rangle$,
+\ldots \verb|\|$\langle up\rangle$, with
+\verb|\val|$\langle low\rangle \le
+\dots \le{}$ \verb|\val|$\langle up\rangle$.
+%
+\subsection{Encoding: Source.}
+\begin{verbatim}
+%quick.tex Jan 93
+\newcount\low\newcount\up\newcount\m
+\def\quicksort{%Values given in \low,...,\up are sorted, non-descending.
+%Parameters: \cmp, comparison.
+ \ifnum\low<\up\else\brk\fi
+%\refval, a reference value selected at random.
+ \m\up\advance\m-\low%Size-1 of array part
+ \ifnum10<\m\rnd\multiply\m\rndval
+ \divide\m99 \advance\m\low \xch\low\m
+ \fi
+ \ea\let\ea\refval\csname\the\low\endcsname
+ \m\low\k\low\let\refvalcop\refval
+ {\loop\ifnum\k<\up\advance\k1
+ \ea\let\ea\oneqs\csname\the\k\endcsname
+ \cmp\refval\oneqs\ifnum1=\status\global\advance\m1 \xch\m\k\fi
+ \let\refval\refvalcop
+ \repeat}\xch\low\m
+ {\up\m\advance\up-1 \quicksort}{\low\m\advance\low1 \quicksort}\krb}
+%
+\def\brk#1\krb{\fi}\def\krb{\relax}
+\endinput %cgl@risc1.rug.nl
+\end{verbatim}
+\subsection{Explanation.}
+At each level the array is partitioned into two parts.
+After partitioning
+the left part contains values less than the reference value and the
+right part contains values greater than or equal to the reference value.
+Each part is again partitioned via a recursive call of the macro.
+The array is sorted when all parts are partitioned.
+
+In the \TeX\ encoding
+the reference value as estimate for the mean value is determined
+via a random selection of one of the elements.
+The random number is mapped into
+the range [$\,low:up\,$], via the linear transformation
+$\hbox{\tt\char92low}+(\hbox{\tt\char92up}-\hbox{\tt\char92low})*
+\hbox{\tt\char92rndval}/99$.\ftn{Note that the number is guaranteed within
+ the range.}
+
+The termination of the recursion is encoded in
+a \TeX\ peculiar way.
+First, I encoded the infinite loop. Then I inserted
+the condition for termination with the \verb|\fi| on the same line,
+and not enclosing the main part of the macro.
+On termination the invocation \verb|\brk|
+gobbles up all the tokens
+at that level up to its separator \verb|\krb|,
+and inserts its replacement text\Dash a new \verb|\fi|\Dash %
+to compensate for the gobbled \verb|\fi|.
+%
+\subsection{Examples: Numbers, words.}
+After \verb=\input quick \input sort=
+\begin{verbatim}
+\def\1{314}\def\2{1}\def\3{27}\n3 \low1\up\n\let\cmp\cmpn
+\quicksort
+\begin{quote}\prtn,\end{quote}
+%
+\def\1{ab}\def\2{c}\def\3{aa}\def\4{\ij}\def\5{ik}\def\6{z}\def\7{a}\n7
+\low1\up\n\let\cmp\cmpw \quicksort
+\begin{quote}\prtw,\end{quote}
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}\def\4{\'el\`eve}\n4
+\low1\up\n\let\cmp\cmpw {\accdef\quicksort}
+\begin{quote}\prtw.\end{quote}
+\end{verbatim}
+yields\ftn{{\tt\char92accdef} suitably redefines the
+ accents within this scope.}
+\def\1{314}\def\2{1}\def\3{27}\n3
+{\low1\up\n\let\cmp\cmpn \quicksort
+\begin{quote}\prtn,\end{quote}
+%
+\def\1{ab}\def\2{c}\def\3{aa}
+\def\4{\ij}\def\5{ik}\def\6{z}\def\7{a}\n7
+\low1\up\n\let\cmp\cmpw \quicksort
+\begin{quote}\prtw,\end{quote}
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}
+\def\4{\'el\`eve}\n=4
+\low=1\up=\n\let\cmp=\cmpw
+{\accdef\quicksort}
+\begin{quote}\prtw.\end{quote}
+}
+%end appendices
+\end{document}
diff --git a/macros/generic/labtex/labtex.mf b/macros/generic/labtex/labtex.mf
new file mode 100644
index 0000000000..b8794c069d
--- /dev/null
+++ b/macros/generic/labtex/labtex.mf
@@ -0,0 +1,106 @@
+%% This LabTeX, v 0.9
+
+% written by: Alan Hoenig, summer 1991-summer 1992.
+% Bitnet: ajhjj@cunyvm
+% Mail: 17 Bay Avenue, Huntington, NY 11743, USA
+%
+
+% This is file LABTEX.MF. You will also need the file LABTEX.TEX, as
+% well as TeX, Metafont, and their support programs.
+%
+% Here's how to use the Metafont part of the labtex macros.
+%
+% You will create a font source file with each character being a figure
+% that you want. Before the `mode_setup;' command, enter the line
+% input labtex;
+% so Metafont will know the meaning of the macros you'll be using.
+%
+% In the course of creating your figure, you will define the points
+% which serve as the anchors for the labels. After all these have been
+% defined, and before the `endchar;' command, enter
+% labtex(point list);
+% where <point list> is the list of points. If you'd like, use
+% `beginfig' and `endfig' as synonyms for `beginchar' and `endchar'.
+%
+% When Metafont creates your font, create the packed pixel file, move
+% the pk file and the tfm file to the usual place on your hard disk,
+% and prepare to create your TeX source file. See the comments in
+% labtex.tex to see what to do next.
+%
+
+numeric chars[];
+
+vardef lab@#=(x_@#, y_@#) enddef;
+def clearx_y_=save x_, y_ enddef;
+
+def char_init(expr c)= %
+clearx_y_;
+i:=c; chars[i]=1;
+enddef;
+
+extra_beginchar:=extra_beginchar&"char_init(charcode)";
+
+numeric running_label_amt; running_label_amt=0;
+numeric xx_[], yy_[]; % to store the kerns for ligtable
+numeric lpf[]; % to store labels per fig
+def char_fin=
+i:=0;
+forever:
+ exitif not known x_[i];
+ i:=i+1; endfor
+%for j=0 upto i-1: show "X",x_[j], "Y",y_[j]; endfor
+label_amt:=i;
+for i:=0 upto label_amt-1:
+ xx_[running_label_amt +i]=x_[i];
+ yy_[running_label_amt +i]=y_[i]; endfor
+lpf[charcode]=label_amt;
+running_label_amt:=running_label_amt+label_amt;
+enddef;
+
+extra_endchar:=extra_endchar&"char_fin";
+
+% fpf=figures per font
+def fillfont= % to define all chars not yet defined
+ % and to create ligtable
+ show "Now filling font. Patience, please.";
+ last_char=255;
+ for i=0 upto last_char: % need MF2!
+% show i, chars[i];
+ if not known chars[i]: beginchar(i,0,0,0); endchar;
+ if not known fpf: fpf=i; fi fi
+ endfor
+% ligtable machinations only done if at least one label in at least
+% one fig.
+if known lpf[1]:
+ doligtable; fi
+enddef;
+
+def doligtable=
+ ligtable 0: 0 kern xx_0/hppp
+ for i=1 upto running_label_amt-1: , i kern xx_[i]/hppp endfor;
+ ligtable 1: 0 kern yy_0/hppp
+ for i=1 upto running_label_amt-1: , i kern yy_[i]/hppp endfor;
+ ligtable 2: 0 kern lpf0
+ for i=1 upto fpf: , i kern lpf[i] endfor;
+enddef;
+
+vardef labtex(text t)= % t is a list of pair names
+ save I; I=0; % I is a counter
+ for $=t: lab[I]=$; I:=I+1; endfor
+enddef;
+
+
+let beginfig=beginchar;
+let endfig=endchar;
+
+inner end, bye; let savedend=end; let savedbye=bye;
+boolean filledfont; filledfont=false;
+def end= if not filledfont: filledfont:=true; fillfont; fi
+ savedend;
+enddef;
+let bye=end;
+outer end, bye;
+
+
+endinput;
+
diff --git a/macros/generic/labtex/labtex.tex b/macros/generic/labtex/labtex.tex
new file mode 100644
index 0000000000..099e477b00
--- /dev/null
+++ b/macros/generic/labtex/labtex.tex
@@ -0,0 +1,153 @@
+% This is labtex, v 0.9.
+
+% written by: Alan Hoenig, summer 1991-summer 1992.
+% Bitnet: ajhjj@cunyvm
+% Mail: 17 Bay Avenue, Huntington, NY 11743, USA
+%
+
+% You need the file LABTEX.MF in addition to this one.
+
+% If you've got this far, you have created a special figure font. Let's
+% pretend it's called figfont. At the start of your TeX document,
+% include the lines
+% \input labtex
+% \font\labtex=figfont
+% and wherever you wnat to include a figure enter
+% \fig$
+% <label list>
+% \endfig
+% where $ represents the numeric position in the font occupied by your
+% figure. Each item in the list is one of the pointing commands defined
+% below coupled with the text of the label (eg. \blpoint{$(x,y)$}).
+% It's that simple.
+%
+
+\newif\ifdebug
+\debugfalse
+\newcount\labels
+{\catcode`.=12 \catcode`p=12 \catcode`t=12
+ \gdef\\#1.#2pt{\global\labels=#1
+ }}\let\glpf=\\
+
+\def\getx#1{\setbox2=\hbox{\labtex\char0 \char#1}%
+ \setbox0=\hbox{\labtex\char0{}\char#1}%
+ \dimen0=\wd2 \advance\dimen0 by-\wd0
+}
+\def\gety#1{\setbox2=\hbox{\labtex\char1 \char#1}%
+ \setbox0=\hbox{\labtex\char1{}\char#1}%
+ \dimen0=\wd2 \advance\dimen0 by-\wd0
+}
+\def\getlpf#1{\setbox2=\hbox{\labtex\char2 \char#1}%
+ \setbox0=\hbox{\labtex\char2{}\char#1}%
+ \dimen0=\wd2 \advance\dimen0 by-\wd0
+}
+
+\newbox\figbox % to hold figure for printing
+\newcount\coordcount \newcount\figcount
+\newdimen\x \newdimen\y
+\newdimen\figwd \newdimen\fight \newdimen\figdp
+\def\fig#1{% usage: \fig2, where 2 is the figure number
+ \figcount=#1%
+ \setbox\figbox=\hbox{\labtex \char\figcount }%
+ \global\figwd=\wd\figbox \global\fight=\ht\figbox
+ \global\figdp=\dp\figbox \zerobox\figbox%
+ \setXYpointers{#1}% ensures \coordcount's value is the char whose kern
+ % is \x; same for \y
+ \hbox\bgroup\box\figbox % now add \point'ing commands and labels
+ \vrule width0pt height\fight depth\figdp
+}
+\def\endfig{\kern\figwd\egroup}
+
+\def\zerobox#1{\wd#1=0pt \ht#1=0pt \dp#1=0pt}
+
+\newcount\scratch \newcount\totallabs
+\def\setXYpointers#1{\scratch=0 \totallabs=0%
+ \coordcount=0 % start with fresh slate
+ \loop\ifnum\scratch<#1%
+ \getlpf\scratch \expandafter\glpf\the\dimen0
+ \advance\totallabs by\labels
+ \advance\scratch by 1 \repeat
+ \coordcount=\totallabs
+}
+
+\newdimen\extradx \newdimen\extrady \newtoks\everylabel
+\newbox\labelbox \newdimen\totalht
+\newdimen\labelht \newdimen\labelwd \newdimen\labeldp
+\newdimen\vertadjust \newdimen\horadjust% vertical adjustment of labels
+\def\getparameters#1{% #1 is text of label
+ \global\vertadjust=0pt \global\horadjust=0pt
+ \setbox\labelbox=\hbox{\the\everylabel #1}%
+ \labelht=\ht\labelbox \labeldp=\dp\labelbox
+ \advance\labelht by\extrady \advance\labeldp by\extrady
+ \totalht=\labelht \advance\totalht by\labeldp
+ \setbox\labelbox=\hbox{\the\everylabel
+ \vrule width0pt height\labelht depth\labeldp
+ \hskip\extradx #1\hskip\extradx}\labelwd=\wd\labelbox %
+ \ifdebug \showthe\coordcount \fi
+ \getx\coordcount \x=\dimen0 \advance\x by\horadjust
+ \ifdebug \showthe\dimen0 \fi % \x before \horadjust
+ \gety\coordcount \y=\dimen0 \advance\y by\vertadjust
+ \ifdebug \showthe\dimen0 \fi % \y before \vertadjust
+ \ifdebug \showthe\x \showthe\y \fi % after adjustments
+ \advance\coordcount by1
+}
+\def\down{\global\vertadjust= -}
+\def\up{\global\vertadjust= }
+\def\left{\global\horadjust= -}
+\def\right{\global\horadjust= }
+
+\def\reset{% puts ref pt of \labelbox at lower left, not at baseline
+ \advance\y by \labeldp}
+
+\def\point#1{\getparameters{#1}% point to left end of Baseline
+ \rlap{\kern\x \raise\y \box\labelbox}}
+\let\Bpoint=\point \let\Blpoint=\point \let\lBpoint=\point % synonyms
+
+\def\Brpoint#1{\getparameters{#1}%
+\advance\x by-\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+\let\rBpoint=\Brpoint
+
+\def\cpoint#1{\getparameters{#1}% OK
+ \reset \advance\y by-.5\totalht \advance\x by-.5\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+
+\def\lpoint#1{\getparameters{#1}% OK
+ \reset \advance\y by-.5\totalht
+ \rlap{\kern\x \raise\y \box\labelbox}}
+
+\def\lbpoint#1{\getparameters{#1}%
+ \reset \rlap{\kern\x \raise\y \box\labelbox}}
+\let\blpoint=\lbpoint
+
+\def\bpoint#1{\getparameters{#1}%
+ \reset \advance\x by-.5\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+
+\def\rbpoint#1{\getparameters{#1}%
+ \reset \advance\x by-\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+\let\brpoint=\rbpoint
+
+\def\rpoint#1{\getparameters{#1}%
+ \reset \advance\y by-.5\totalht \advance\x by-\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+
+\def\trpoint#1{\getparameters{#1}%
+ \reset \advance\y by-\totalht \advance\x by-\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+\let\rtpoint=\trpoint
+
+\def\tpoint#1{\getparameters{#1}%
+ \reset \advance\y by-\totalht
+ \advance\x by-.5\labelwd
+ \rlap{\kern\x \raise\y \box\labelbox}}
+
+\def\tlpoint#1{\getparameters{#1}%
+ \reset \advance\y by-\totalht
+ \rlap{\kern\x \raise\y \box\labelbox}}
+\let\ltpoint=\tlpoint
+
+\endinput
+
+
diff --git a/macros/generic/labtex/xminus1.mf b/macros/generic/labtex/xminus1.mf
new file mode 100644
index 0000000000..e99076494a
--- /dev/null
+++ b/macros/generic/labtex/xminus1.mf
@@ -0,0 +1,40 @@
+mode_setup;
+input labtex;
+u#=12pt#; if mode=smoke: u#:=.4pt#; fi
+nib#=.5pt#; if mode=smoke: nib#:=.1pt#; fi
+define_pixels(u, nib);
+beginchar(0, 12u#, 6u#, 0);
+ pickup pencircle scaled 2nib;
+ z1=(w/8,h); z2=(w/4, h/2); z3=(w/2, h/4); % points on the curve
+ z4=(w,h/8);
+ path p; p=z1..z2..z3..z4;
+ draw p; % draw the $1/x$ curve
+ z.x=point 2.6 of p; % another point
+ z5=(x2,0); z6=(x.x,0); % points on the $x$-axis
+ pickup pencircle scaled nib;
+ draw origin--(w,0); % bottom axis
+ draw z2--z5; draw z.x--z6; % vertical struts
+ pickup pencircle scaled 6nib;
+ drawdot z2; drawdot z.x; drawdot z5; drawdot z6;
+ save I; numeric I; I=0;
+ labtex(z2, z.x, z5, (x.x,0));
+endchar;
+
+beginchar(1, 12u#, 6u#, 0);
+ pickup pencircle scaled 2nib;
+ z1=(w/8,h); z2=(w/4, h/2); z3=(w/2, h/4); % points on the curve
+ z4=(w,h/8);
+ path p; p=z1..z2..z3..z4;
+ draw p; % draw the $1/x$ curve
+ z.x=point 2.6 of p; % another point
+ z5=(x2,0); z6=(x.x,0); % points on the $x$-axis
+ pickup pencircle scaled nib;
+ draw origin--(w,0); % bottom axis
+ draw z2--z5; draw z.x--z6; % vertical struts
+ pickup pencircle scaled 6nib;
+ drawdot z2; drawdot z.x; drawdot z5; drawdot z6;
+ save I; numeric I; I=0;
+ labtex(z2, z.x, z5, (x.x,0));
+endchar;
+
+bye.
diff --git a/macros/generic/labtex/xminus1.tex b/macros/generic/labtex/xminus1.tex
new file mode 100644
index 0000000000..3462a79580
--- /dev/null
+++ b/macros/generic/labtex/xminus1.tex
@@ -0,0 +1,26 @@
+\font\labtex=xminus1
+
+\input labtex
+
+\fig0
+\lbpoint{$(1,1)$}\lbpoint{\up2pt $(x, 1/x)$}%
+\tpoint{\down 2pt $(1,0)$}\tpoint{\down 2pt$(x,0)$}
+\endfig
+
+\bigskip
+
+\fig1
+\lbpoint{$\,\,(1,1)$}\lbpoint{\up2pt $(x, 1/x)$}%
+\tpoint{\down 2pt $(1,0)$}\tpoint{\down 2pt$(x,0)$}
+\endfig
+
+This is a test of the amazing labtex macros!!
+\centerline{
+\fig0
+\lbpoint{$(1,1)$}\lbpoint{\up2pt $(x, 1/x)$}%
+\tpoint{\down 2pt $(1,0)$}\tpoint{\down 2pt$(x,0)$}
+\endfig
+}
+This is the end of the test.
+
+\bye
diff --git a/macros/generic/lambda-lists/README b/macros/generic/lambda-lists/README
new file mode 100644
index 0000000000..f88d31e9f5
--- /dev/null
+++ b/macros/generic/lambda-lists/README
@@ -0,0 +1,16 @@
+This is the lambda-lists package by Alan Jeffrey, for doing lists and
+lambda calculus via expandable macros (a.k.a. in TeX's mouth).
+
+For historical reasons, the code is available in a file named
+lambda.sty; it runs under both plain TeX and LaTeX. It is unrelated to
+the lambda format that is part of Omega.
+
+The documentation is in lambda-lists.{tex,pdf}. It was originally
+published as an article in TUGboat, vol.11, no.2, pp.237-245.
+http://tug.org/TUGboat.
+
+The entire package is released under the LPPL. It consists of this
+README, lambda.sty, lambda-lists.tex, and the derived file
+lambda-lists.pdf.
+
+Web page with contact info: http://ect.bell-labs.com/who/ajeffrey.
diff --git a/macros/generic/lambda-lists/lambda-lists.pdf b/macros/generic/lambda-lists/lambda-lists.pdf
new file mode 100644
index 0000000000..0e7bd74b91
--- /dev/null
+++ b/macros/generic/lambda-lists/lambda-lists.pdf
Binary files differ
diff --git a/macros/generic/lambda-lists/lambda-lists.tex b/macros/generic/lambda-lists/lambda-lists.tex
new file mode 100644
index 0000000000..1c6367dfc4
--- /dev/null
+++ b/macros/generic/lambda-lists/lambda-lists.tex
@@ -0,0 +1,1147 @@
+% Filename: Lambda.tex
+% Author: Alan Jeffrey
+% Last modified: 11 May 1990
+% (license changed to LPPL, need for ltugboat removed: 6 Aug 2013)
+%
+% Copyright 1990-2013 Alan Jeffrey.
+% This file is part of the lambda-lists package.
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% A keyboard check:
+%
+% @ # $ % ^ & * ~ at hash dollar percent caret ampersand asterisk tilde
+% : ; , . colon semicolon comma period
+% ? ! question-mark exclamation-mark
+% " ' ` double-quote apostrophe back-quote
+% ( ) { } [ ] parentheses braces square-brackets
+% - + = / \ minus plus equals forward-slash backslash
+% _ | < > underscore vertical-bar less-than greater-than
+%
+
+\documentstyle[lambda]{article}
+
+% This document defines a whole load of extra commands, some of which
+% over-ride how LaTeX normally lays things out. For example, ~ is
+% redefined to give a hairspace in math mode. This whole document
+% should probably be put in a group to stop it getting in the way
+% of other articles' macros.
+
+\title{Lists in \TeX's Mouth}
+
+\author{Alan Jeffrey}
+
+\makeatletter
+
+% The mathcodes for the letters A, ..., Z, a, ..., z are changed to
+% generate text italic rather than math italic by default. This makes
+% multi-letter names look neater. The mathcode for character 'c'
+% is set to "7000 (variable family) + "400 (text italic) + c.
+%
+% This neat bit of code is due to Mike Spivey.
+
+\def\@setmcodes#1#2#3{{\count0=#1 \count1=#3
+ \loop \global\mathcode\count0=\count1 \ifnum \count0<#2
+ \advance\count0 by1 \advance\count1 by1 \repeat}}
+
+\@setmcodes{`A}{`Z}{"7441}
+\@setmcodes{`a}{`z}{"7461}
+
+\def\Number#1{\csname Number-#1\endcsname}
+\def\Label#1{\csname Label-#1\endcsname}
+
+\newcount\Lastnum
+
+\def\Forward#1%
+ {\global\advance\Lastnum by 1
+ \csnameafter\xdef{Number-#1}%
+ {\the\Lastnum}%
+ \csnameafter\xdef{Label-\the\Lastnum}%
+ {\@currentlabel}}
+
+\def\csnameafter#1#2%
+ {\expandafter#1\csname#2\endcsname}
+
+\def\Bylist#1%
+ {\Map\Label
+ {\Insertsort\Lessthan
+ {\Map\Number{#1}}}}
+
+\def\By{\Show\Bylist}
+
+\let\bindspace=~
+\def~{\ifmmode \, \else \bindspace \fi}
+
+\def\start#1{\lefteqn{#1}\quad\\}
+
+\def\nil{[\,\,]}
+
+\newtheorem{fact}{Fact}
+\def\thefact{\@roman\c@fact}
+
+\def\cstok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt
+ \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}}%
+ \kern1pt\hrule}\vrule}\thinspace}
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12 |gdef|@xTeXcode#1\end{TeXcode}[#1|end[TeXcode]]
+|endgroup
+
+\def\TeXcode
+ {\@verbatim \smallskip\hrule\medskip \frenchspacing\@vobeyspaces \@xTeXcode}
+\def\endTeXcode
+ {\medskip\hrule\smallskip\endtrivlist}
+
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\section{Why lists?}
+
+Originally, I wanted lists in \TeX\ for
+a paper I was writing which contained a lot of facts.
+\begin{fact}
+\Forward{Fac-cows}
+ Cows have four legs.
+\end{fact}
+\begin{fact}
+\Forward{Fac-people}
+ People have two legs.
+\end{fact}
+\begin{fact}
+\Forward{Fac-yawn}
+ Lots of facts in a row can be dull.
+\end{fact}
+These are generated with commands like
+\begin{verbatim}
+\begin{fact}
+\Forward{Fac-yawn}
+ Lots of facts in a row can be dull.
+\end{fact}
+\end{verbatim}
+I can then refer to these facts by saying
+\begin{verbatim}
+\By[Fac-yawn,Fac-cows,Fac-people]
+\end{verbatim}
+to get
+\By[Fac-yawn,Fac-cows,Fac-people].
+And as if by magic, the facts come out sorted, rather than in
+the jumbled order I typed them. This is very useful, as I can
+reorganize my document to my heart's content, and not have to worry
+about getting my facts straight.
+
+Originally I tried programming this sorting routine in \TeX's
+list macros, from Appendix~D of \textsl{The \TeX{}book}, but I soon ran
+into trouble.
+The problem is that all the Appendix~D macros work by assigning
+values to macros. For example:
+\begin{verbatim}
+\concatenate\foo=\bar\baz
+\end{verbatim}
+expands out to
+\begin{verbatim}
+\ta=\expandafter{\bar}
+\tb=\expandafter{\baz}
+\edef\foo{\the\ta\the\tb}
+\end{verbatim}
+which assigns the macro \verb|\foo| the contents of \verb|\bar|
+followed by the contents of \verb|\baz|. Programming sorting routines
+(which are usually recursive) in terms of these lists became rather
+painful, as I was constantly having to watch out for local variables,
+worrying about what happened if a local variable had the same name
+as a global one, and generally having a hard time.
+
+Then I had one of those ``flash of light'' experiences ---
+``You can do lambda-calculus in \TeX,'' I thought,
+and since you can do lists directly in lambda calculus,
+you should be able to do lists straightforwardly in \TeX. And so you
+can. Well, fairly straightforwardly anyway.
+
+So I went and did a bit of mathematics, and derived the \TeX\ macros
+you see here. They were formally verified, and worked first time
+(modulo typing errors, of which there were two).
+
+\section{\TeX's mouth and \TeX's stomach}
+
+\TeX's programming facilities come in two forms --- there are \TeX's
+{\em macros\/} which are expanded in its mouth, and some additional
+{\em assignment\/} operations like \verb|\def| which take place in the
+stomach. \TeX\ can often spring surprises on you as exactly what
+gets evaluated where.
+For example, in \LaTeX\ I can put down a
+label by saying \verb|\label{Here}|.
+\label{Here}
+Then I can refer back to that label by saying
+\verb|Section~\ref{Here}|, which
+produces Section~\ref{Here}. Unfortunately, \verb|\ref{Here}| does
+{\em not\/} expand out to {\tt\ref{Here}}! Instead, it expands out to:
+\begin{verbatim}
+\edef\@tempa{\@nameuse{r@Here}}
+\expandafter\@car\@tempa\@nil\null
+\end{verbatim}
+This means that I can't say
+\begin{verbatim}
+\ifnum\ref{Here}<4 Hello\fi
+\end{verbatim}
+and hope that this will expand out to Hello. Instead I
+get an error message. Which is rather a pity, as \TeX's mouth is
+quite a powerful programming language (as powerful as a Turing Machine in
+fact).
+
+\section{Functions}
+
+A {\em function\/} is a mathematical object that takes in an argument
+(which could well be another function) and returns some other mathematical
+object. For example the function $Not$ takes in a boolean and returns
+its complement. I'll write function application without brackets,
+so $Not~b$ is the boolean complement of $b$.
+
+Function application
+binds to the left, so $f~a~b$ is $(f~a)~b$ rather than $f~(a~b)$.
+For example, $Or~a~b$ is the boolean or of $a$ and $b$, and
+$Or~True$ is a perfectly good function that takes in a boolean
+and returns $True$.
+
+The obvious equivalents of functions in \TeX\ are macros ---
+if I define a function $Foo$ to be:
+\begin{eqnarray*}
+ Foo~x & = & True
+\end{eqnarray*}
+then it can be translated into \TeX\ as:
+\begin{verbatim}
+\def\Foo#1{\True}
+\end{verbatim}
+So where $Foo$ is a function that takes in one argument, \verb|\Foo|
+is a macro that takes in one parameter. Nothing has changed except
+the jargon and the font. \TeX\ macros can even be partially applied,
+for example if we defined:
+\begin{eqnarray*}
+ Baz & = & Or~True
+\end{eqnarray*}
+then the \TeX\ equivalent would be
+\begin{verbatim}
+\def\Baz{\Or\True}
+\end{verbatim}
+Once \verb|\Baz| is expanded, it will expect to be given a parameter,
+but when we are defining things, we can go around partially applying
+them all we like.
+
+Here, I'm using $=$ without formally defining it, which is rather
+naughty. If I say $x = y$, this means
+``given enough parameters, $x$ and $y$ will eventually
+expand out to the same thing.'' For example $Foo = Baz$, because
+for any $x$,
+\begin{eqnarray*}
+ \start{Foo~x}
+ & = & True \\
+ & = & Or~True~x \\
+ & = & Baz~x
+\end{eqnarray*}
+Normally, functions have to {respect equality\/} which means that:
+\begin{itemize}
+\item if $x = y$ then $f~x = f~y$, and
+\item if $x$ respects equality, then $f~x$ respects equality.
+\end{itemize}
+However, some \TeX\ control sequences don't obey this. For example,
+\verb|\string\Foo| and \verb|\string\Baz| are different, even though
+$Foo = Baz$. Hence $string$ doesn't respect equality.
+Unless otherwise stated, we won't assume functions respect equality,
+although all the functions defined here do.
+
+All of our functions have capital letters, so that their \TeX\ equivalents
+(\verb|\Not|, \verb|\Or| and so on) don't clash with standard \TeX\ or
+\LaTeX\ macros.
+
+\subsection{Identity}
+
+The simplest function is the {\em identity\/} function, called
+$Identity$ funnily enough, which is defined:
+\begin{eqnarray*}
+ Identity~x & = & \Identity{x}
+\end{eqnarray*}
+This, it must be admitted, is a pretty dull function, but
+it's a useful basic combinator. It can be implemented
+in \TeX\ quite simply.
+\begin{TeXcode}
+\def\Identity#1{#1}
+\end{TeXcode}
+The rules around this definition mean that it is actually part of
+\verb|Lambda.sty| and not just another example.
+
+\subsection{Error}
+
+Whereas $Identity$ does nothing in a fairly pleasant sort of way,
+$Error$ does nothing in a particularly brutal and harsh fashion.
+Mathematically, $Error$ is the function that destroys everything
+else in front of it. It is often written as $\perp$.
+\begin{eqnarray*}
+ Error~x & = & Error
+\end{eqnarray*}
+In practice, destroying the entire document when we hit one error
+is a bit much, so we'll just print out an error message.
+The user can carry on past an error at their own risk, as the code
+will no longer be formally verified.
+\begin{TeXcode}
+\def\Error
+ {\errmessage{Abandon verification all
+ ye who enter here}}
+\end{TeXcode}
+Maybe this function ought to return a more useful error message \ldots
+
+\subsection{First and Second}
+
+Two other basic functions are $First$ and $Second$, both of which
+take in two arguments, and do the obvious thing. They are defined:
+\begin{eqnarray*}
+ First~x~y & = & x \\
+ Second~x~y & = & y
+\end{eqnarray*}
+We could, in
+fact, define $Second$ in terms of $Identity$ and $First$.
+For any $x$ and $y$,
+\begin{eqnarray*}
+ \start{First~Identity~x~y}
+ & = & Identity~y \\
+ & = & y \\
+ & = & Second~x~y
+\end{eqnarray*}
+So $First~Identity = Second$. This means that anywhere in our \TeX\ code
+we have \verb|\First\Identity| we could replace it by \verb|\Second|.
+This is perhaps not the most astonishing \TeX\ fact known to humanity,
+but this sort of proof did enable more complex bits of \TeX\ to be
+verified before they were run.
+
+The \TeX\ definitions of \verb|\First| and \verb|\Second| are pretty
+obvious.
+\begin{TeXcode}
+\def\First#1#2{#1}
+\def\Second#1#2{#2}
+\end{TeXcode}
+Note that in \TeX\, \verb|\First\foo\bar| expands out to
+\verb|\foo| {\em without\/} expanding out \verb|\bar|.
+This is very useful, as we can write macros that would take
+forever and a day to run if they expanded all their arguments,
+but which actually terminate quite quickly. This is called
+{\em lazy evaluation\/} by the functional programming community.
+
+\subsection{Compose}
+
+Given two functions $f$ and $g$ we would like to be able to {\em compose\/}
+them to produce a function that first applies $g$ then applies $f$.
+Normally, this is written as $f \circ g$, but unfortunately \TeX\ doesn't
+have infix functions, so we'll have to write it $Compose~f~g$.
+\begin{eqnarray*}
+ Compose~f~g~x & = & f~(g~x)
+\end{eqnarray*}
+>From this definition, we can deduce that $Compose$ is associative:
+\begin{eqnarray*}
+ \start{Compose~(Compose~f~g)~h}
+ & = & Compose~f~(Compose~g~h)
+\end{eqnarray*}
+and $Identity$ is the left unit of $Compose$:
+\begin{eqnarray*}
+ Compose~Identity~f & = & f
+\end{eqnarray*}
+The reader may wonder why $Identity$ is called a {\em left\/} unit
+even though it occurs on the right of the $Compose$ --- this is a side-effect
+of using prefix notations where infix is more normal. The infix version
+of this equation is:
+\begin{eqnarray*}
+ Identity \circ f & = & f
+\end{eqnarray*}
+so $Identity$ is indeed on the left of the composition.
+
+$Compose$ can be implemented in \TeX\ as
+\begin{TeXcode}
+\def\Compose#1#2#3{#1{#2{#3}}}
+\end{TeXcode}
+
+\subsection{Twiddle}
+
+Yet another useful little function is $Twiddle$, which takes in
+a function and reverses the order that function takes its (first two)
+arguments.
+\begin{eqnarray*}
+ Twiddle~f~x~y & = & f~y~x
+\end{eqnarray*}
+Again, there aren't many immediate uses for such a function, but it'll
+come in handy later on. It satisfies the properties
+\begin{eqnarray*}
+ Twiddle~First & = & Second \\
+ Twiddle~Second & = & First \\
+ Compose~Twiddle~Twiddle & = & Identity
+\end{eqnarray*}
+Its \TeX\ equivalent is
+\begin{TeXcode}
+\def\Twiddle#1#2#3{#1{#3}{#2}}
+\end{TeXcode}
+This function is called ``twiddle'' because it is sometimes written
+$\widetilde f$ (and $\sim$ is pronounced ``twiddle'').
+It also twiddles its arguments around,
+which is quite nice if your sense of humour runs to appalling puns.
+
+\section{Booleans}
+
+As we're trying to program a sorting routine, it would be nice to
+be able to define orderings on things, and to do this we need some
+representation of boolean variables. Unfortunately \TeX\ doesn't have a type
+for booleans, so we'll have to invent our own. We'll
+implement a boolean as a function $b$ of the form
+\begin{eqnarray*}
+ b~x~y &
+ = &
+ \left\{
+ \begin{array}{ll}
+ x & \mbox{if $b$ is true} \\
+ y & \mbox{otherwise}
+ \end{array}
+ \right.
+\end{eqnarray*}
+More formally, a
+boolean $b$ is a function which respects equality,
+such that for all $f$, $g$ and $z$:
+\begin{eqnarray*}
+ b~f~g~z & = & b~(f~z)~(g~z)
+\end{eqnarray*}
+and for all $f$ and $g$ which respect equality,
+\begin{eqnarray*}
+ b~(f~b)~(g~b) & = & b~(f~First)~(g~Second)
+\end{eqnarray*}
+All the functions in this section satisfy these properties. Surprisingly
+enough, so does $Error$, which is quite useful, as it allows us to
+reason about booleans which ``go wrong''.
+
+\subsection{True, False and Not}
+
+Since we are implementing booleans as functions, we already have the
+definitions of $True$, $False$ and $Not$.
+\begin{eqnarray*}
+ True & = & First \\
+ False & = & Second \\
+ Not & = & Twiddle
+\end{eqnarray*}
+So for free we get the following results:
+\begin{eqnarray*}
+ Not~True & = & False \\
+ Not~False & = & True \\
+ Compose~Not~Not & = & Identity
+\end{eqnarray*}
+The \TeX\ implementation is not exactly difficult:
+\begin{TeXcode}
+\let\True=\First
+\let\False=\Second
+\let\Not=\Twiddle
+\end{TeXcode}
+
+\subsection{And and Or}
+
+The definitions of $And$ and $Or$ are:
+\begin{eqnarray*}
+ And~a~b &
+ = &
+ \left\{
+ \begin{array}{ll}
+ b & \mbox{if $a$ is true} \\
+ False & \mbox{otherwise}
+ \end{array}
+ \right.
+ \\
+ Or~a~b &
+ = &
+ \left\{
+ \begin{array}{ll}
+ True & \mbox{if $a$ is true} \\
+ b & \mbox{otherwise}
+ \end{array}
+ \right.
+\end{eqnarray*}
+With our definition of what a boolean is, this is just the same as
+\begin{eqnarray*}
+ And~a~b & = & a~b~False \\
+ Or~a~b & = & a~True~b
+\end{eqnarray*}
+>From these conditions, we can show that $And$ is associative, and
+has left unit $True$ and left zeros $False$ and $Error$:
+\begin{eqnarray*}
+ And~(And~a~b)~c & = & And~a~(And~b~c) \\
+ And~True~b & = & b \\
+ And~False~b & = & False \\
+ And~Error~b & = & Error
+\end{eqnarray*}
+$Or$ is associative, has left unit $False$ and left zeros $True$ and $Error$:
+\begin{eqnarray*}
+ Or~(Or~a~b)~c & = & Or~a~(Or~b~c) \\
+ Or~False~b & = & b \\
+ Or~True~b & = & True \\
+ Or~Error~b & = & Error
+\end{eqnarray*}
+De~Morgan's laws hold:
+\begin{eqnarray*}
+ Not~(And~a~b) & = & Or~(Not~a)~(Not~b) \\
+ Not~(Or~a~b) & = & And~(Not~a)~(Not~b)
+\end{eqnarray*}
+and $And$ and $Or$ left-distribute through one another:
+\begin{eqnarray*}
+ Or~a~(And~b~c) & = & And~(Or~a~b)~(Or~a~c) \\
+ And~a~(Or~b~c) & = & Or~(And~a~b)~(And~a~c)
+\end{eqnarray*}
+$And$ and $Or$ are {\em not\/} commutative, though. For example,
+\begin{eqnarray*}
+ \start{Or~True~Error}
+ & = & True~True~Error \\
+ & = & True
+\end{eqnarray*}
+but
+\begin{eqnarray*}
+ \start{Or~Error~True}
+ & = & Error~True~True \\
+ & = & Error
+\end{eqnarray*}
+This is actually quite useful since there are some booleans that
+need to return an error occasionally. If $a$ is $True$ when $b$
+is safe (i.e.\ doesn't become $Error$) and is $False$ otherwise, we can
+say $Or~a~b$ and know we're not going to get an error. This is handy
+for things like checking for division by zero, or trying to get the
+first element of an empty list.
+
+Similarly, because of the possibility of $Error$,
+$And$ and $Or$ don't right-distribute through each other,
+as
+\begin{eqnarray*}
+ \start{Or~(And~False~Error)~True}
+ & \ne & And~(Or~False~True)~(Or~Error~True)
+\end{eqnarray*}
+As errors shouldn't crop up, this needn't worry us too much.
+\begin{TeXcode}
+\def\And#1#2{#1{#2}\False}
+\def\Or#1#2{#1\True{#2}}
+\end{TeXcode}
+
+\subsection{Lift}
+
+Quite a lot of the time we won't be dealing with booleans, but with
+{\em predicates}, which are just functions that return a boolean.
+For example, the predicate $Lessthan$ is defined below so that
+$Lessthan~i~j$ is true whenever $i<j$.
+Given a predicate $p$ we would like to be able to
+{\em lift\/} it to $Lift~p$, defined:
+\begin{eqnarray*}
+ Lift~p~f~g~x & = & p~x~f~g~x
+\end{eqnarray*}
+For example, $Lift~(Lessthan~0)~f~g$ takes in a number and applies
+$f$ to it if it is positive and $g$ to it otherwise. This is quite
+useful for defining functions.
+\begin{TeXcode}
+\def\Lift#1#2#3#4{#1{#4}{#2}{#3}{#4}}
+\end{TeXcode}
+
+\subsection{Lessthan and \TeX if}
+
+Finally, we would like to be able to use \TeX's built-in booleans
+as well as our own. For example, we would like a predicate
+$Lessthan$ such that:
+\begin{eqnarray*}
+ Lessthan~i~j &
+ = &
+ \left\{
+ \begin{array}{ll}
+ True & \mbox{if } i < j \\
+ False & \mbox{if } i \ge j \\
+ Error & \mbox{otherwise}
+ \end{array}
+ \right.
+\end{eqnarray*}
+The $Error$ condition happens if we try applying $Lessthan$ to something
+that isn't a number --- $Lessthan~True~False$ is $Error$%
+\footnote
+ {Actually, that's a little white lie --- trying to persuade \TeX\ to
+ do run-time type checking isn't much fun. So the \TeX\ implementation
+ of this is actually a {\em refinement\/} where the $Error$ condition
+ has been replaced by whatever it is \TeX\ does if you try doing
+ {\tt\string\ifnum $x$ < $y$} when $x$ and $y$ aren't numbers}.
+This is fine as a mathematical definition, but how will
+we implement it? If we assume we have a macro \verb|\TeXif|,
+which converts \TeX\ if-statements into booleans, we could just
+define:
+\begin{TeXcode}
+\def\Lessthan#1#2{\TeXif{\ifnum#1<#2 }}
+\end{TeXcode}
+So the question is just how to define \verb|\TeXif|.
+Unfortunately, the ``obvious'' code does not work:
+\begin{verbatim}
+\def\TeXif#1#2#3{#1#2\else#3\fi}
+\end{verbatim}
+For example, \verb|\TeXif\iftrue\True\True| doesn't expand out to
+\verb|\True|. Instead, it expands as:
+\begin{verbatim}
+\TeXif\iftrue\True\True
+ = \iftrue\True\else\True\fi
+ = \True\else\True\fi
+ = \else\fi
+ =
+\end{verbatim}
+Another common \TeX nique is to use a macro \verb|\next| to
+be the expansion text:
+\begin{verbatim}
+\def\TeXif#1#2#3%
+ {#1\def\next{#2}\else\def\next{#3}\fi
+ \next}
+\end{verbatim}
+However, this uses \TeX's stomach to do the \verb|\def|, and we are
+trying to do this using only the mouth. One (slightly tricky) solution
+is to use pattern-matching to gobble up the offending \verb|\else| and/or
+\verb|\fi|.
+\begin{TeXcode}
+\def\gobblefalse\else\gobbletrue\fi#1#2%
+ {\fi#1}
+\def\gobbletrue\fi#1#2%
+ {\fi#2}
+\def\TeXif#1%
+ {#1\gobblefalse\else\gobbletrue\fi}
+\end{TeXcode}
+So if the \TeX\ if-statement is true, \verb|\gobblefalse| gobbles
+up the false-text, otherwise \verb|\gobbletrue| gobbles up the
+true-text. For example,
+\begin{verbatim}
+\TeXif\iftrue\True\True
+ = \iftrue\gobblefalse\else
+ \gobbletrue\fi\True\True
+ = \gobblefalse\else
+ \gobbletrue\fi\True\True
+ = \fi\True
+ = \True
+\end{verbatim}
+Phew. And so we have booleans.
+
+\section{Lists}
+
+A list is a (possibly infinite) sequence of values. For example,
+the list $[1,2,3]$ contains three numbers, the list $\nil$ contains
+none, and the list $[1,2,3,\ldots]$ contains infinitely many.
+A list is either {\em empty\/} (written $\nil$) or is comprised
+of a {\em head\/}
+$x$ and a {\em tail\/} $xs$ (in which case it's written $x:xs$).
+For example, $1:2:3:\nil$ is $[1,2,3]$.
+
+In a similar fashion to the implementation of booleans,
+a list $xs$ is implemented as a function of the form
+\begin{eqnarray*}
+ xs~f~e &
+ = &
+ \left\{
+ \begin{array}{ll}
+ e & \mbox{if $xs$ is empty} \\
+ f~y~ys & \mbox{if $xs$ has head $y$ and tail $ys$}
+ \end{array}
+ \right.
+\end{eqnarray*}
+Again, we are implementing a datatype as a function, a quite powerful
+trick, just not one usually seen in \TeX. We will assume that
+whenever a list $x:xs$ is applied to $f$ and $e$, $f~x$ respects equality.
+This allows us to assume that if $xs = ys$ then $x:xs = x:ys$,
+which is handy.
+
+\subsection{Nil, Cons, Stream and Singleton}
+
+The simplest list is $Nil$, the empty list which we have been writing
+$\nil$.
+\begin{eqnarray*}
+ Nil & = & Second
+\end{eqnarray*}
+The other possible list is $Cons~x~xs$, which has head $x$ and tail $xs$.
+\begin{eqnarray*}
+ Cons~x~xs~f~e & = & f~x~xs
+\end{eqnarray*}
+Every list can be constructed using these functions.
+The list $[1,2,3]$ is $Cons~1~(Cons~2~(Cons~3~Nil))$, and the
+list $[a,a,a,\ldots]$ is $Stream~a$ where $Stream$ is defined:
+\begin{eqnarray*}
+ Stream~a & = & Cons~a~(Stream~a)
+\end{eqnarray*}
+There's even at least one application for infinite lists,
+as we'll see in Section~\ref{outputroutines}.
+
+The singleton list $[a]$ is $Singleton~a$, defined as:
+\begin{eqnarray*}
+ Singleton~a & = & Cons~a~Nil
+\end{eqnarray*}
+These all have straightforward \TeX\ definitions.
+\begin{TeXcode}
+\let\Nil=\Second
+\def\Cons#1#2#3#4{#3{#1}{#2}}
+\def\Stream#1{\Cons{#1}{\Stream{#1}}}
+\def\Singleton#1{\Cons{#1}\Nil}
+\end{TeXcode}
+
+\subsection{Head and Tail}
+
+So, we can construct any list we like, but we still can't get any information
+out of it. To begin with, we'd like to be able to get the head
+and tail of a list.
+\begin{eqnarray*}
+ Head~xs & = & xs~First~Error \\
+ Tail~xs & = & xs~Second~Error
+\end{eqnarray*}
+For example, the tail of $x:xs$ is
+\begin{eqnarray*}
+ \start{Tail~(Cons~x~xs)}
+ & = & Cons~x~xs~Second~Error \\
+ & = & Second~x~xs \\
+ & = & \Tail{\Cons{x}{xs}}
+\end{eqnarray*}
+The tail of $\nil$ is, as one would expect,
+\begin{eqnarray*}
+ \start{Tail~Nil}
+ & = & Nil~Second~Error \\
+ & = & Error
+\end{eqnarray*}
+And the head of $Stream~a$ is
+\begin{eqnarray*}
+ \start{Head~(Stream~a)}
+ & = & Stream~a~First~Error \\
+ & = & Cons~a~(Stream~a)~First~Error \\
+ & = & First~a~(Stream~a) \\
+ & = & \Head{\Stream{a}}
+\end{eqnarray*}
+So we can get the head of an infinite list in finite time. This is
+fortunate, as otherwise there wouldn't be much point in allowing
+infinite objects.
+\begin{TeXcode}
+\def\Head#1{#1\First\Error}
+\def\Tail#1{#1\Second\Error}
+\end{TeXcode}
+
+\subsection{Foldl and Foldr}
+
+Using $Head$ and $Tail$ we can get at the beginning of any non-empty list,
+but in general we need more information than that. Rather than write
+a whole bunch of recursive functions on lists, I'll implement two
+fairly general functions, with which we can implement (almost) everything
+else.
+
+$Foldl$ and $Foldr$ both take in functions and apply them recursively
+to a list. $Foldl$ starts at the left of the list, and $Foldr$
+starts at the right. For example,
+\begin{eqnarray*}
+ Foldl~f~e~[1,2,3] & = & f~(f~(f~e~1)~2)~3 \\
+ Foldr~f~e~[1,2,3] & = & f~1~(f~2~(f~3~e))
+\end{eqnarray*}
+These functions will be used a lot later on. $Foldl$ can be defined:
+\begin{eqnarray*}
+ Foldl~f~e~xs & = & xs~(Foldl'~f~e)~e \\
+ Foldl'~f~e~x~xs & = & Foldl~f~(f~e~x)~xs
+\end{eqnarray*}
+So $Foldl~f~e~\nil$ is
+\begin{eqnarray*}
+ \start{Foldl~f~e~Nil}
+ & = & Nil~(Foldl'~f~e)~e \\
+ & = & \Foldl{f}{e}\Nil
+\end{eqnarray*}
+And $Foldl~f~e~(x:xs)$ is
+\begin{eqnarray*}
+ \start{Foldl~f~e~(Cons~x~xs)}
+ & = & Cons~x~xs~(Foldl'~f~e)~e \\
+ & = & Foldl'~f~e~x~xs \\
+ & = & Foldl~f~(f~e~x)~xs
+\end{eqnarray*}
+For example, $Foldl~f~e~[1,2,3]$ is
+\begin{eqnarray*}
+ \start{Foldl~f~e~[1,2,3]}
+ & = & Foldl~f~(f~e~1)~[2,3] \\
+ & = & Foldl~f~(f~(f~e~1)~2)~[3] \\
+ & = & Foldl~f~(f~(f~(f~e~1)~2)~3)~\nil \\
+ & = & f~(f~(f~e~1)~2)~3
+\end{eqnarray*}
+as promised. Similarly, we can define $Foldr$ as
+\begin{eqnarray*}
+ Foldr~f~e~xs & = & xs~(Foldr'~f~e)~e \\
+ Foldr'~f~e~x~xs & = & f~x~(Foldr~f~e~xs)
+\end{eqnarray*}
+For $Foldr~f$ to respect equality, $f~x$ should respect equality.
+
+When we do the unfolding, we discover that
+\begin{eqnarray*}
+ Foldr~f~e~\nil & = & e \\
+ Foldr~f~e~(x:xs) & = & f~e~(Foldr~f~e~xs)
+\end{eqnarray*}
+$Foldr$ tends to be more efficient than $Foldl$, because $Foldl$
+has to run along the entire list before it can start applying $f$,
+whereas $Foldr$ can apply $f$ straight away. If $f$ is a lazy function,
+this can make quite a difference. $Foldl$ on infinite lists, anyone?
+\begin{TeXcode}
+\def\Foldl#1#2#3%
+ {#3{\Foldl@{#1}{#2}}{#2}}
+\def\Foldl@#1#2#3#4%
+ {\Foldl{#1}{#1{#2}{#3}}{#4}}
+\def\Foldr#1#2#3%
+ {#3{\Foldr@{#1}{#2}}{#2}}
+\def\Foldr@#1#2#3#4%
+ {#1{#3}{\Foldr{#1}{#2}{#4}}}
+\end{TeXcode}
+
+\subsection{Cat}
+
+Given two lists, we would like to be able to stick them together,
+which is what $Cat$ (short for ``concatenate'')
+does. For example, $Cat~[1,2]~[3,4]$ is
+$[1,2,3,4]$. It can be defined using $Foldr$:
+\begin{eqnarray*}
+ Cat~xs~ys & = & Foldr~Cons~ys~xs
+\end{eqnarray*}
+So
+\begin{eqnarray*}
+ \start{Cat~[1,2]~[3,4]}
+ & = & Foldr~Cons~[3,4]~[1,2] \\
+ & = & Cons~1~(Foldr~Cons~[3,4]~[2]) \\
+ & = & Cons~1~(Cons~2~(Foldr~Cons~[3,4]~\nil)) \\
+ & = & Cons~1~(Cons~2~[3,4]) \\
+ & = & \Unlistize{\Cat{\Listize[1,2]}{\Listize[3,4]}}
+\end{eqnarray*}
+The \TeX\ code for \verb|\Cat| is suspiciously similar to its mathematical
+definition.
+\begin{TeXcode}
+\def\Cat#1#2{\Foldr\Cons{#2}{#1}}
+\end{TeXcode}
+
+\subsection{Reverse}
+
+We can reverse any list with the function $Reverse$, defined using
+$Foldl$:
+\begin{eqnarray*}
+ Reverse & = & Foldl~(Twiddle~Cons)~Nil
+\end{eqnarray*}
+For example, $Reverse~[1,2,3]$ can be calculated:
+\begin{eqnarray*}
+ \start{Reverse~[1,2,3]}
+ & = & Foldl~(Twiddle~Cons)~Nil~[1,2,3] \\
+ & = & Twiddle~Cons \\
+ & & \quad (Twiddle~Cons~(Twiddle~Cons~Nil~1)~2)~3 \\
+ & = & Cons~3~(Cons~2~(Cons~1~Nil)) \\
+ & = & \Show\Reverse[1,2,3]
+\end{eqnarray*}
+The \TeX\ code for \verb|\Reverse| doesn't even take in any parameters.
+\begin{TeXcode}
+\def\Reverse{\Foldl{\Twiddle\Cons}\Nil}
+\end{TeXcode}
+
+\subsection{All, Some and Isempty}
+
+Given a predicate $p$, we can find out if all the elements of
+a list satisfy $p$ with $All~p$. Similarly we can find if something
+in the list satisfies $p$ with $Some~p$. For example,
+\begin{eqnarray*}
+ All~(Lessthan~1)~[1,2,3]
+ & = & \All{\Lessthan 1}{\Listize[1,2,3]}{True}{False} \\
+ Some~(Lessthan~1)~[1,2,3]
+ & = & \Some{\Lessthan 1}{\Listize[1,2,3]}{True}{False}
+\end{eqnarray*}
+These can be defined
+\begin{eqnarray*}
+ All~p & = & Foldr~(Compose~And~p)~True \\
+ Some~p & = & Foldr~(Compose~Or~p)~False
+\end{eqnarray*}
+For example, $Isempty$ can be defined
+\begin{eqnarray*}
+ Isempty & = & All~(First~False)
+\end{eqnarray*}
+This is probably not the most efficient check in the world, but we
+hardly ever need it --- $Foldl$ or $Foldr$ will normally do the job.
+\begin{TeXcode}
+\def\All#1{\Foldr{\Compose\And{#1}}\True}
+\def\Some#1{\Foldr{\Compose\Or{#1}}\False}
+\def\Isempty{\All{\First\False}}
+\end{TeXcode}
+
+\subsection{Filter}
+
+$Filter$ takes a predicate $p$ and a list $xs$, and returns a list
+containing only those elements of $xs$ that satisfy $p$. For example,
+\begin{eqnarray*}
+ Filter~(Lessthan~1)~[1,2,3] & = & \Show\Filter{\Lessthan 1}[1,2,3]
+\end{eqnarray*}
+$Filter$ can be defined as a $Foldr$:
+\begin{eqnarray*}
+ Filter~p & = & Foldr~(Lift~p~Cons~Second)~Nil
+\end{eqnarray*}
+Another easy bit of \TeX:
+\begin{TeXcode}
+\def\Filter#1%
+ {\Foldr{\Lift{#1}\Cons\Second}\Nil}
+\end{TeXcode}
+
+\subsection{Map}
+
+$Map$ takes a function $f$ and a list $xs$ and applies $f$ to every
+element of $xs$. For example,
+\begin{eqnarray*}
+ Map~f~[1,2,3] & = & \Show\Map{f~}[1,2,3]
+\end{eqnarray*}
+This is another job for $Foldr$.
+\begin{eqnarray*}
+ Map~f & = & Foldr~(Compose~Cons~f)~Nil
+\end{eqnarray*}
+We shall see $Map$ used later on, to convert from a list of
+names such as \Show\Map{\Compose\mbox\tt}[Fac-yawn,Fac-cows], to a list of
+labels such as \By[Fac-yawn,Fac-cows].
+\begin{TeXcode}
+\def\Map#1{\Foldr{\Compose\Cons{#1}}\Nil}
+\end{TeXcode}
+
+\subsection{Insert}
+
+The only function we need which isn't easily defined as a reduction
+is $Insert$, which inserts an element into a sorted list. For example,
+\begin{eqnarray*}
+ Insert~Lessthan~3~[1,2,4,5] & = & \Show\Insert\Lessthan3[1,2,4,5]
+\end{eqnarray*}
+$Insert$ takes in an ordering as its first parameter, so we're not stuck
+with one particular order. It is defined directly in terms of the
+definition of lists.
+\begin{eqnarray*}
+ Insert~o~x~xs & = & xs~(Insert'~o~x)~(Singleton~x) \\
+ Insert'~o~x~y~ys & = & o~x~y \\
+ & & \quad (Cons~x~(Cons~y~ys)) \\
+ & & \quad (Cons~y~(Insert~o~x~ys))
+\end{eqnarray*}
+We can then define the function all this has been leading up to,
+$Insertsort$ which takes an ordering and a list, and insert-sorts the
+list according to the ordering. For example,
+\begin{eqnarray*}
+ Insertsort~Lessthan~[2,3,1,2] & = & \Show\Insertsort\Lessthan[2,3,1,2]
+\end{eqnarray*}
+We can implement this as a fold:
+\begin{eqnarray*}
+ Insertsort~o & = & Foldr~(Insert~o)~Nil
+\end{eqnarray*}
+And so we've got sorted lists.
+\begin{TeXcode}
+\def\Insert#1#2#3%
+ {#3{\Insert@{#1}{#2}}{\Singleton{#2}}}
+\def\Insert@#1#2#3#4%
+ {#1{#2}{#3}%
+ {\Cons{#2}{\Cons{#3}{#4}}}%
+ {\Cons{#3}{\Insert{#1}{#2}{#4}}}}
+\def\Insertsort#1{\Foldr{\Insert{#1}}\Nil}
+\end{TeXcode}
+Interestingly, as we have implemented unbounded lists in \TeX's mouth,
+this means we can implement a Turing Machine. So, if you believe
+the Church-Turing thesis, \TeX's mouth is as powerful as any
+computer anywhere. Isn't that good to know?
+
+\section{Sorting reference lists}
+\label{thissection}
+
+So, these are the macros I've got to play with --- how do we apply them to
+sorting lists of references? Well, I'm using \LaTeX, which keeps the
+current reference in a macro called \verb|\@currentlabel|, which
+is~\ref{thissection} at the moment, as this is Section~\ref{thissection}.
+So I just need to store the value of \verb|\@currentlabel| somehow.
+
+Fortunately, I'm only ever going to be making references to facts
+earlier on in the document, in order to make sure I'm not proving
+any results in terms of themselves. So I don't need to play around
+with auxiliary files, and can just do everything in terms of
+macros.
+
+\subsection{Number and Label}
+
+Each label in the document is given a unique number, in the order
+the labels were put down. So the number of \verb|Fac-cows|
+is \verb|\Number{Fac-cows}|, which expands out to~\Number{Fac-cows},
+the number of \verb|Fac-people| is~\Number{Fac-people}, and so on.
+
+Each number has an associated label with it. For example,
+the first label is \verb|\Label{1}|, which is~\Label{1},
+the second label is~\Label{2} and so on. So to find the label for
+\verb|Fac-cows|, we say \verb|\Label{\Number{Fac-cows}}| which expands
+out to~\Label{\Number{Fac-cows}}.
+
+These numbers and labels are kept track of in macros. For example,
+the number of \verb|Fac-cows| is kept in \cstok{Number-Fac-cows}.
+Similarly, the first label is kept in \cstok{Label-1}.
+As these macros have dashes in their names, they aren't likely to
+be used already.
+
+So the \TeX\ code for \verb|\Number| and \verb|\Label| is pretty
+simple.
+\begin{verbatim}
+\def\Number#1{\csname Number-#1\endcsname}
+\def\Label#1{\csname Label-#1\endcsname}
+\end{verbatim}
+
+\subsection{Lastnum and Forward}
+
+The number of the most recent label is kept in \verb|\Lastnum|.
+\begin{verbatim}
+\newcount\Lastnum
+\end{verbatim}
+To put down a label \verb|Foo|, I type \verb|\Forward{Foo}|.
+\Forward{Foo}
+This increments the counter
+\verb|\Lastnum|, and \verb|\xdef|s \cstok{Number-Foo}
+to be the value of
+\verb|\Lastnum|, which is now~\the\Lastnum. So
+\verb|\Number{Foo}| now expands to~\Number{Foo}.
+Similarly, it \verb|\xdef|s \cstok{Label-\Number{Foo}} to be
+\verb|\@currentlabel|, which is currently~\Label{\Number{Foo}}.
+So \verb|\Label{\Number{Foo}}| now expands to~\Label{\Number{Foo}}.
+\begin{verbatim}
+\def\Forward#1%
+ {\global\advance\Lastnum by 1
+ \csnameafter\xdef{Number-#1}%
+ {\the\Lastnum}%
+ \csnameafter\xdef{Label-\the\Lastnum}%
+ {\@currentlabel}}
+\end{verbatim}
+This uses \verb|\csnameafter\foo{bar}|, which expands out to
+\verb|\foo\bar|.
+\begin{verbatim}
+\def\csnameafter#1#2%
+ {\expandafter#1\csname#2\endcsname}
+\end{verbatim}
+
+\subsection{Listize, Unlistize and Show}
+
+At the moment, lists have to be built up using \verb|\Cons| and
+\verb|\Nil|, which is rather annoying. Similarly, we can't actually
+do anything with a list once we've built it. We'd like some way
+of converting lists in the form \verb|[a,b,c]| to and from the
+form $[a,b,c]$. This is done with \verb|\Listize| and \verb|\Unlistize|.
+So \verb|\Listize[a,b,c]| expands to
+\begin{verbatim}
+\Cons{a}{\Cons{b}{\Cons{c}{\Nil}}}
+\end{verbatim}
+Similarly, \verb|\Unlistize| takes the list $[a,b,c]$ and expands out
+to \verb|[a, b, c]|. \verb|\Unlistize| is done with a $Foldr$.
+\begin{TeXcode}
+\def\Unlistize#1{[#1\Unlistize@{}]}
+\def\Unlistize@#1{#1\Foldr\Commaize{}}
+\def\Commaize#1#2{, #1#2}
+\end{TeXcode}
+The macro \verb|\Listize| is just a \TeX\ hack with pattern matching.
+It would have been nice to use \verb|\@ifnextchar| for this, but
+that uses \verb|\futurelet|, which doesn't expand in the mouth. Oh well.
+\begin{TeXcode}
+\def\Listize[#1]%
+ {\Listize@[#1,\relax]}
+\def\Listize@#1,#2]%
+ {\TeXif{\ifx\relax#2}%
+ {\Singleton{#1}}%
+ {\Cons{#1}{\Listize@#2]}}
+\end{TeXcode}
+This only works for nonempty lists --- \verb|\Listize[]| produces the
+singleton list \verb|\Singleton{}|. It also uses \verb|\relax| as its
+end-of-list character, so lists with \verb|\relax| in them have to
+be done by hand. You can't win them all. So
+\begin{verbatim}
+$\Unlistize{\Listize[a,b,c]}$
+\end{verbatim}
+produces
+$\Unlistize{\Listize[a,b,c]}$. This is such a common construction
+that I've defined a macro \verb|\Show| such that
+\verb|\Show\foo[a,b,c]| expands out to
+\begin{verbatim}
+\Unlistize{\foo{\Listize[a,b,c]}}
+\end{verbatim}
+For example, the equation
+\begin{eqnarray*}
+ Filter\,(Lessthan\,1)\,[1,2,3]
+ &=& \Show\Filter{\Lessthan 1}[1,2,3]
+\end{eqnarray*}
+was generated with
+\begin{verbatim}
+\begin{eqnarray*}
+ Filter\,(Lessthan\,1)\,[1,2,3]
+ &=& \Show\Filter{\Lessthan 1}[1,2,3]
+\end{eqnarray*}
+\end{verbatim}
+Many of the examples in this article were typeset this way.
+\begin{TeXcode}
+\def\Show#1[#2]%
+ {\Unlistize{#1{\Listize[#2]}}}
+\end{TeXcode}
+
+\subsection{By}
+
+Given these macros, we can now sort any list of references with $Bylist$,
+defined
+\begin{eqnarray*}
+ Bylist~xs & = & Map~Label \\
+ & & \quad (Insertsort~Lessthan \\
+ & & \quad\quad (Map~Number~xs))
+\end{eqnarray*}
+This takes in a list of label names like \verb|Fac-yawn|,
+converts it into a list of numbers with $Map~Number$,
+sorts the resulting list with $Insertsort~Lessthan$,
+and finally converts all the numbers into labels like
+\Label{\Number{Fac-yawn}} with $Map~Label$. For example,
+\begin{eqnarray*}
+ \start{Bylist~\Show\Map{\Compose\mbox\tt}[Fac-yawn,Fac-cows]}
+ & = & Map~Label~(Insertsort~Lessthan \\
+ & & \quad (Map~Number~
+ \Show\Map{\Compose\mbox\tt}[Fac-yawn,Fac-cows])) \\
+ & = & Map~Label~(Insertsort~Lessthan~
+ \Show\Map\Number[Fac-yawn,Fac-cows]) \\
+ & = & Map~Label~\Show\Compose{\Insertsort\Lessthan}{\Map\Number}
+ [Fac-yawn,Fac-cows] \\
+ & = & \Show\Bylist[Fac-yawn,Fac-cows]
+\end{eqnarray*}
+The \TeX\ code for this is
+\begin{verbatim}
+\def\Bylist#1%
+ {\Map\Label
+ {\Insertsort\Lessthan
+ {\Map\Number{#1}}}}
+\end{verbatim}
+So we can now stick all this together, and define the macro \verb|\By|
+that prints out lists of references. It is
+\begin{verbatim}
+\def\By{\Show\Bylist}
+\end{verbatim}
+So \verb|\By[Fac-yawn,Fac-cows]| is~\By[Fac-yawn,Fac-cows].
+Which is quite nice.
+
+\section{Other applications}
+\label{outputroutines}
+
+Is all this worth it? Well, I've managed to get my lists of facts in
+order, but that's not the world's most astonishing application.
+There are other things that these lists are useful for, though.
+
+For example, Damian Cugley has a macro package under development for
+laying out magazines. {\sc Mag}\TeX's output routine needs to be quite
+smart, as magazines often have gaps where illustrations or photographs
+are going to live. In general, each block of text needs to be output
+in a different fashion from every other block of text.
+This will be handled by keeping an infinite list of output
+routines. Each time a box is cut off the scroll to be output,
+the head of the list is chopped off and is used as the output routine
+for that box. That way, quite complex page shapes can be built up.
+
+Mainly, though, these macros were written just as a challenge.
+I learned quite a lot about \TeX\ and needed some \TeX niques I'd
+never seen before. It was also quite pleasing to see that \TeX\ code
+can be formally verified, albeit in a rather noddy way. Without
+some sort of abstract view of lists, these \TeX\ macros could
+not have been written.
+
+\section{Acknowledgements}
+
+Thanks to Jeremy Gibbons for letting me bounce ideas off him
+and spotting the duff ones,
+to Damian Cugley for saying ``Do you really think \TeX\ is meant
+to do this?'', and to the Problem Solving Club for hearing me out.
+This work was sponsored by the Science and Engineering
+Research Council and Hewlett Packard.
+
+\end{document}
+
diff --git a/macros/generic/lambda-lists/lambda.sty b/macros/generic/lambda-lists/lambda.sty
new file mode 100644
index 0000000000..50c2c97fe8
--- /dev/null
+++ b/macros/generic/lambda-lists/lambda.sty
@@ -0,0 +1,105 @@
+% Filename: lambda.sty
+% Author: Alan Jeffrey
+% Last modified: 12 Feb 1990 (license changed to LPPL: 6 Aug 2013)
+%
+% Copyright 1990-2013 Alan Jeffrey.
+% This file is part of the lambda-lists package.
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This style provides a pile of lambda-calculus and list-handling
+% macros of an incredibly obtuse nature. Read lambda-lists.tex to find out
+% what they all do and how they do it. This \TeX\ code was formally
+% verified.
+% Alan Jeffrey, 25 Jan 1990.
+
+\def\Identity#1{#1}
+
+\def\Error%
+ {\errmessage{Abandon verification all
+ ye who enter here}}
+
+\def\First#1#2{#1}
+\def\Second#1#2{#2}
+
+\def\Compose#1#2#3{#1{#2{#3}}}
+
+\def\Twiddle#1#2#3{#1{#3}{#2}}
+
+\let\True=\First
+\let\False=\Second
+\let\Not=\Twiddle
+
+\def\And#1#2{#1{#2}\False}
+\def\Or#1#2{#1\True{#2}}
+
+\def\Lift#1#2#3#4{#1{#4}{#2}{#3}{#4}}
+
+\def\Lessthan#1#2{\TeXif{\ifnum#1<#2 }}
+
+\def\gobblefalse\else\gobbletrue\fi#1#2%
+ {\fi#1}
+\def\gobbletrue\fi#1#2%
+ {\fi#2}
+\def\TeXif#1%
+ {#1\gobblefalse\else\gobbletrue\fi}
+
+\def\Nil#1#2{#2}
+\def\Cons#1#2#3#4{#3{#1}{#2}}
+\def\Stream#1{\Cons{#1}{\Stream{#1}}}
+\def\Singleton#1{\Cons{#1}\Nil}
+
+\def\Head#1{#1\First\Error}
+\def\Tail#1{#1\Second\Error}
+
+\def\Foldl#1#2#3%
+ {#3{\Foldl@{#1}{#2}}{#2}}
+\def\Foldl@#1#2#3#4%
+ {\Foldl{#1}{#1{#2}{#3}}{#4}}
+\def\Foldr#1#2#3%
+ {#3{\Foldr@{#1}{#2}}{#2}}
+\def\Foldr@#1#2#3#4%
+ {#1{#3}{\Foldr{#1}{#2}{#4}}}
+
+\def\Cat#1#2{\Foldr\Cons{#2}{#1}}
+
+\def\Reverse{\Foldl{\Twiddle\Cons}\Nil}
+
+\def\All#1{\Foldr{\Compose\And{#1}}\True}
+\def\Some#1{\Foldr{\Compose\Or{#1}}\False}
+\def\Isempty{\All{\First\False}}
+
+\def\Filter#1%
+ {\Foldr{\Lift{#1}\Cons\Second}\Nil}
+
+\def\Map#1{\Foldr{\Compose\Cons{#1}}\Nil}
+
+\def\Insert#1#2#3%
+ {#3{\Insert@{#1}{#2}}{\Singleton{#2}}}
+\def\Insert@#1#2#3#4%
+ {#1{#2}{#3}%
+ {\Cons{#2}{\Cons{#3}{#4}}}%
+ {\Cons{#3}{\Insert{#1}{#2}{#4}}}}
+\def\Insertsort#1{\Foldr{\Insert{#1}}\Nil}
+
+\def\Unlistize#1{[#1\Unlistize@{}]}
+\def\Unlistize@#1{#1\Foldr\Commaize{}}
+\def\Commaize#1#2{, #1#2}
+
+\def\Listize[#1]%
+ {\Listize@#1,\relax]}
+\def\Listize@#1,#2]%
+ {\TeXif{\ifx\relax#2}%
+ {\Singleton{#1}}%
+ {\Cons{#1}{\Listize@#2]}}}
+
+\def\Show#1[#2]%
+ {\Unlistize{#1{\Listize[#2]}}}
+
+
diff --git a/macros/generic/langcode/README b/macros/generic/langcode/README
new file mode 100644
index 0000000000..ae5e0f51e5
--- /dev/null
+++ b/macros/generic/langcode/README
@@ -0,0 +1,61 @@
+
+ README for the `langcode' package
+
+ Adjust Language-Dependent Settings
+ by Language Code
+
+ (C) Uwe Lueck 2012/09/20
+
+
+`langcode.sty' in the first instance provides a command
+
+ \uselangcode{<chars>}
+
+to adjust language-dependent settings, such as key words,
+typographical conventions, and language codes (ISO-639-1).
+An author frequently writing documents in two or more languages
+can use the same commands independently of the language,
+provided they are gathered in a list macro to be used by the
+`dowith' package. If `\<cmd>' is in the list, it is set to work
+like `\<chars><cmd>', and a macro `\langcode' will expand to
+<chars> (the respective tokens), usable in URLs.
+
+The package is ``generic," based on `plainpkg'. The code has
+been used with `morehype' and `catchdq' (`catcodes'), but may
+be useful more generally.
+
+REQUIRED PACKAGES: plainpkg, stackrel, dowith
+
+RELATED PACKAGES: babel, polyglossia;
+ morehype, catchdq (catcodes)
+
+KEYWORDs: language support; German, macro programming
+ (programming structures), hypertext
+
+LICENSE:
+
+The package file `langcode.sty' and the documentation files
+`langcode.pdf' and `langcode.tex' can be redistributed and/or
+modified under the terms of the LaTeX Project Public License;
+either version 1.3c of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+We did our best to help you, but there is NO WARRANTY.
+
+The `langcode' package is author-maintained in the sense of
+this license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/generic/langcode/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/generic/langcode.tds.zip
+
+Please report bugs, problems, and suggestions via
+
+ http://www.contact-ednotes.sty.de.vu
+
+
diff --git a/macros/generic/langcode/SrcFILEs.txt b/macros/generic/langcode/SrcFILEs.txt
new file mode 100644
index 0000000000..986d7d6b29
--- /dev/null
+++ b/macros/generic/langcode/SrcFILEs.txt
@@ -0,0 +1,16 @@
+
+ *File List*
+langcode.sty 2012/09/20 v0.2 language adjustment (UL)
+stacklet.sty 2012/08/27 v0.3 private letters (UL)
+langcode.tex 2012/09/20 -- documenting langcode.sty
+fifinddo.sty 2012/08/27 v0.6 filtering TeX(t) files by TeX (UL)
+ makedoc.sty 2012/08/28 v0.52 TeX input from *.sty (UL)
+niceverb.sty 2012/08/28 v0.5 minimize doc markup (UL)
+ makedoc.cfg 2012/07/13 -- documentation settings
+mdoccorr.cfg 2011/12/03 -- makedoc local typographical corrections
+srcfiles.tex 2012/09/20 -- file infos -> SrcFILEs.txt
+ ***********
+
+ List made at 2012/09/20, 13:25
+ from script file srcfiles.tex
+
diff --git a/macros/generic/langcode/docsrc/langcode.tex b/macros/generic/langcode/docsrc/langcode.tex
new file mode 100644
index 0000000000..fe7f417a3c
--- /dev/null
+++ b/macros/generic/langcode/docsrc/langcode.tex
@@ -0,0 +1,80 @@
+\ProvidesFile{langcode.tex}[2012/09/20 documenting langcode.sty]
+\title{\pkgtitle{langcode.sty}{%
+ Simple Language-Dependent Settings\\
+ Based on Language Codes}}
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \MakeJobDoc{17}%% 2011/11/23
+ {\SectionLevelThreeParseInput} } %% 2012/09/17
+\documentclass[fleqn]{article}
+% \usepackage{inputtrc} \dotracinginputs
+\input{makedoc.cfg} %% shared formatting settings
+% \ReadPackageInfos{langcode}
+% \usepackage{langcode,catchdq,ngerman} \originalTeX
+\usepackage{catchdq,langcode,ngerman} \originalTeX
+% \show\endqtd
+\MDkeywords{languages other than English; German, macro programming
+ (programming structures), hypertext}
+\sloppy
+% \listfiles
+\begin{document}
+\maketitle
+\begin{MDabstract}
+'langcode.sty' in the first instance provides a command
+$$|\uselangcode{<chars>}|$$ to adjust language-dependent settings,
+such as key words, typographical conventions, and language codes
+(\acro{\Wikiref{ISO-639-1}}).
+% it is intended to be a kind of ``leight-weight" \ctanpkgref{babel}.
+% It uses \ctanpkgref{dowith} for adjustments and
+% \ctanpkgref{plainpkg} for use with both \LaTeX\ and Plain \TeX.
+An author frequently writing documents in two or more languages
+can use the same commands independently of the language,
+provided they are gathered in a list macro to be
+used by the \ctanpkgref{dowith} package.
+If `\<cmd>' is in the list, it is set to work like
+`\<chars><cmd>', and a macro `\langcode' will expand to
+<chars> (the respective tokens), usable in \acro{URL}s.---The
+package is ``generic," based on \ctanpkgref{plainpkg}.
+The code has been used with \ctanpkgref{morehype} and
+'catchdq' (\ctanpkgref{catcodes}), but may be useful more generally.
+\MDaddtoabstract{Related packages} \ctanpkgref{babel}, \ctanpkgref{polyglossia}
+% \ctanpkgref{morehype}, 'catchdq' (\ctanpkgref{catcodes}),
+% \ctanpkgref{dowith}
+\end{MDabstract}
+\newpage
+\tableofcontents
+% \newpage
+% \section{Features and Usage}
+\section{Installing and Calling}
+The file 'langcode.sty' is provided ready, installation only requires
+putting it somewhere where \TeX\ finds it
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf} %% corr. 2011/02/08
+The packages \ctanpkgref{dowith}, \ctanpkgref{plainpkg},
+and 'stacklet' (\ctanpkgref{catcodes}) must be installed as well.
+
+As to calling (loading): 'langcode' is a ``\pkg{plainpkg} package"
+in the sense of the
+\ctanpkgref{plainpkg}\,\foothttpurlref{ctan.org/pkg/plainpkg}
+documentation that you may consult for details.
+So roughly,
+\begin{itemize}
+ \item load it by \ |\usepackage{langcode}| \ if you can,
+ \item otherwise by \ |\RequirePackage{langcode}| \\
+ (perhaps from within another ``\pkg{plainpkg} package"),
+ \item or by \ |\input langcode.sty|
+ \item or even by \ |\input{langcode.sty}|~\dots
+\end{itemize}
+
+% \pagebreak
+% \section{The Package File}
+\section{Header---\pkg{plainpkg} and Legalese}
+On the right hand side, that `plainpkg.tex' is loaded,
+before the package version is declared, for ``generic" function:
+\input{langcode.doc}
+
+\end{document}
+
+VERSION HISTORY
+
+2012/09/17 for v0.1 very first
+2012/09/20 extended ...
diff --git a/macros/generic/langcode/docsrc/srcfiles.tex b/macros/generic/langcode/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..e90ac1459b
--- /dev/null
+++ b/macros/generic/langcode/docsrc/srcfiles.tex
@@ -0,0 +1,14 @@
+\ProvidesFile{srcfiles.tex}[2012/09/20 file infos -> SrcFILEs.txt]
+\RequirePackage{nicefilelist}
+\MFfieldtemplate{f-base}{langcode}
+\RequirePackage{myfilist}
+\EmptyFileList %%% [readprov.sty,myfilist.sty]
+%% packages:
+\ReadPackageInfos{langcode}
+%% documentation:
+\ReadFileInfos{langcode}
+%% documentation settings and auxiliaries: % % rm. 2012/09/20
+\ReadPackageInfos{fifinddo,makedoc,niceverb}
+\ReadFileInfos{makedoc.cfg,mdoccorr.cfg,srcfiles}
+\ListInfos[SrcFILEs.txt]
+
diff --git a/macros/generic/langcode/langcode.pdf b/macros/generic/langcode/langcode.pdf
new file mode 100644
index 0000000000..cff2d80a7e
--- /dev/null
+++ b/macros/generic/langcode/langcode.pdf
Binary files differ
diff --git a/macros/generic/langcode/langcode.sty b/macros/generic/langcode/langcode.sty
new file mode 100644
index 0000000000..e6206f9944
--- /dev/null
+++ b/macros/generic/langcode/langcode.sty
@@ -0,0 +1,141 @@
+ \input plainpkg
+\ProvidesPackage{langcode}[2012/09/20 v0.2 language adjustment (UL)]
+
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Required ==
+%% 'langcode' is based on \ctanpkgref{dowith}:
+\RequirePackage{dowith}
+%%
+%% == General Commands ==
+%% |\uselangcode{<lcode>}| \ sets `\langcode' to <lcode>, runs
+%% `\langcodeadjust' on the items stored in `\langcodedependent',
+%% and finally executes what is stored in `\langcodeextras':
+\def\uselangcode#1{%
+ \def\langcode{#1}% %% 2012/01/07:
+ \DoWithAllIn\langcodeadjust\langcodedependent
+ \langcodeextras}
+%% |\langcodeadjust\<letters>| \ defines `\<letters>' to expand to
+%% `\<lcode><letters>':
+\def\langcodeadjust#1{%
+% \edef#1{\expandafter\noexpand
+% \csname\langcode
+ %% <- 2012/09/17 ->
+ \edef#1{\withcsname\noexpand \langcode
+ \expandafter\@gobble\string#1\endcsname}}
+%%
+%% == Sample Settings ==
+%% Such settings once should be in some \file{.cfg} file TODO
+%% === What Must Be Varied ===
+%% |\langcodedependent| \ is a list of commands that
+%% must be adjusted: %% ready 2012/09/20
+\def\langcodedependent{% %% 2012/01/07
+ \langcodeextras\dqtd\qtd\pardash\lastrev\totopofpage
+ \monthname} %% 2012/01/17
+%%
+%% === English vs. German ===
+%% ==== Months ====
+%% |\enmonthname{<num>}| yields the English name of the <num>th month
+%% of the year:
+\def\enmonthname#1{%
+ \ifcase #1\or
+ January\or February\or March\or April\or
+ May\or June\or July\or August\or
+ September\or October\or November\or December%
+ \fi}
+%% |\demonthname{<num>}| yields the \emph{German} name of the <num>th month
+%% month of the year:
+\def\demonthname#1{%
+ \ifcase #1\or
+ Januar\or Februar\or M\"arz\or April\or
+ Mai\or Juni\or Juli\or August\or
+ September\or Oktober\or November\or Dezember%
+ \fi}
+%% ==== Quotes ====
+%% For |\dqtd| settings, see (load) %% load 2012/09/20
+%% 'catchdq' (\ctanpkgref{catcodes} bundle).\footnote{% %% 2012/09/20
+%% The test below required loading 'catchdq' \emph{earlier}
+%% than 'langcode'.}
+%% % while |\qtd| settings are in 'blog.sty' (\ctanpkgref{morehype} bundle).
+%% |\enqtd{<en-text>}| and |\deqtd{<de-text>}|
+%% (overridable, e.g., with 'blog.sty'):
+\ifx\deqtd\undefined \def\deqtd#1{\glq#1\grq} \fi
+\ifx\enqtd\undefined \def\enqtd#1{`#1'} \fi
+%% You may get `\glq' and `\grq' from \CtanPkgRef{ngerman}{ngerman.sty}
+%% \[(`\usepackage{ngerman}\originalTeX'\]
+%% if needed. Here is a little
+%% \dqtd{tessst \qtd{inner}},
+%% due to the default |\uselangcode{en}|, we now issue |\uselangcode{de}|
+%% \let\delangcodeextras\empty
+%% \uselangcode{de}to get
+%% \dqtd{tessst \qtd{inner}}.
+%% ==== Dashes ====
+%% I introduced |\pardash| thinking of
+%% (German \dqtd{Gedankenstrich} and)
+%% long dashes as a weak version of a paragraph break.
+%% \uselangcode{en}
+%% A paragraph break somehow means moving from one thought
+%% to another\pardash almost the same what a long dash may
+%% mean.\pardash Here I have switched to \qtd{`en'}
+%% again, in order to get |\enpardash| by |\pardash|:
+\ifx\enpardash\undefined \let\enpardash\textemdash \fi
+%% \uselangcode{de}
+%% The \dqtd{Gedankenstrich} |\depardash| is not as long
+%% \uselangcode{en}
+%% as the \dqtd{thought dash}\uselangcode{de}\pardash er ist nur
+%% halb so lang\uselangcode{en}\pardash but it is surrounded
+%% by regular spaces:
+\ifx\depardash\undefined \def\depardash{ \textendash\space} \fi
+%% Some people prefer a so-called \dqtd{\Wikiref{hair space}}
+%% surrounding the long dash.
+%% ==== Wikipedia ====
+%% The previous Wikipedia link was obtained by |\Wikiref{hair space}|,
+%% working like |\Wikienref{hair space}|. This is an example of how
+%% \ctanpkgref{texlinks} makes use of |\uselangcode{<two-chars>}|.
+%% ==== 'blog.sty' ====
+%% In the present sample of \ |\langcodedependent|, \
+%% \[|\lastrev|\quad\mbox{and}\quad|\totopofpage|\] remain.
+%% I use them for \acro{HTML} with 'blog.sty'\pardash sorry,
+%% at present I cannot afford separating
+%% settings for a wider audience from my own ones.
+%%
+%% === Other Settings ===
+%% I haven't used English extras so far:
+\let\enlangcodeextras\empty %% \empty 2012/01/17
+%% With German, I have used the \ctanpkgref{dhua} package
+%% for certain abbrevations:
+\def\delangcodeextras{\RequirePackage{dhua}}
+%% However, this setting disables `\uselangcode{de}' after
+%% `\begin{document}'---which has not a problem with 'blog.sty',
+%% where I use it daily. For the tests above,
+%% I \emph{emptied} `\delangcodeextras'.
+%% I had not thought of changing the language \emph{within}
+%% one document before.
+%%
+%% == Default Language Code ==
+%% The default `\langcode' is \qtd{`en'} for English:
+\uselangcode{en}
+%% == Leaving the Package File ==
+\endinput
+%%
+%% == VERSION HISTORY ==
+
+v0.1 2012/01/07 in `texblog.fdf'
+ 2012/01/17
+v0.2 2012/09/17 own plainpkg package (\newcommand -> \def, ...)
+ 2012/09/20 doc. much expanded;
+ more blog-independent settings;
+ \Provides: v0.2, caption shortened (tld -> lc ->)
diff --git a/macros/generic/lecturer/README b/macros/generic/lecturer/README
new file mode 100644
index 0000000000..9ab9f79344
--- /dev/null
+++ b/macros/generic/lecturer/README
@@ -0,0 +1,69 @@
+This is the README file for the lecturer package.
+Author: Paul Isambert.
+E-mail: zappathustra AT free DOT fr
+Comments and suggestions are welcome.
+Date: July 2010.
+
+Lecturer creates slides for onscreen presentation
+with PDF features. It works with plain TeX, LaTeX,
+ConTeXt MkII and unfortunately not ConTeXt MkIV
+(though it seems you can still produce handouts).
+
+It requires pdfTeX or LuaTeX. If anybody wants to write
+anything that makes it work with XeTeX, be my guest.
+The problem comes from the lack of pdfTeX's primitives.
+
+Relevant information can be found in lecturer-doc.pdf.
+
+The files in this distribution are:
+
+<--- DOC --->
+(Each entry is both a .tex and .pdf file. See the documentation
+if you want to recompile the sources.)
+
+Documentation:
+ lecturer-doc
+ -> The documentation.
+ LecturerDemo-VisualDoc
+ -> A non-exhaustive documentation
+ illustrating Lecturer's features.
+
+Demonstrations (see lecturer-doc for comments):
+ LecturerDemo-BeamerCambridgeUS
+ -> A Beamer imitation.
+ LecturerDemo-KitschScienceFiction
+ -> A silly video game.
+ [universe.jpg
+ -> A picture used in the previous
+ presentation.]
+ LecturerDemo-Mondrian
+ -> A square- and primary-colors-based
+ presentation.
+ LecturerDemo-SquareOfAs
+ -> A non-academic-looking presentation
+ of some beautiful fonts.
+ LecturerDemo-SimplePresentation
+ -> A minimalist style.
+ LecturerDemo-ThePoodleLectures
+ -> Five very simple styles.
+
+
+<--- TEX --->
+Files to load Lecturer:
+ lecturer.tex
+ -> For plain TeX, but used
+ by the following two.
+ t-lecturer.tex
+ -> For ConTeXt.
+ lecturer.sty
+ -> For LaTeX.
+
+Core files:
+ ltr-areas.tex
+ ltr-graphics.tex
+ ltr-job.tex
+ ltr-navigation.tex
+ ltr-slide.tex
+ ltr-steps.tex
+
+Licensing of this package is covered by LPPL.
diff --git a/macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.pdf b/macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.pdf
new file mode 100644
index 0000000000..cd8c7d2ea7
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.tex b/macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.tex
new file mode 100644
index 0000000000..534b557fdc
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-BeamerCambridgeUS.tex
@@ -0,0 +1,451 @@
+% This is a demonstration file distributed with the
+% Lecturer package (see lecturer-doc.pdf).
+%
+% You can recompile the file with a basic TeX implementation,
+% using pdfTeX or LuaTeX with the plain format.
+%
+% The reusable part ends somewhere around line 300.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+\input lecturer
+
+\font\maintitlefont = cmdunh10 at 23pt
+\font\slidetitlefont = cmss12 at 20pt
+\font\subtitlefont = cmss10
+\font\titlefont = cmssi10
+
+\newcolor{darkred}{rgb}{.6 0 0}
+\newcolor{lightgrey}{grey}{.85}
+\newcolor{darkgrey}{grey}{.7}
+
+\setparameter job:
+ mode = presentation % The handout is ready, just turn it on.
+ author = "Pete Agoras"
+ title = "The square root of 2 ain't rational"
+ date = "Some centuries B.C."
+ fullscreen = true
+ autofullscreen = true
+ font = \tenrm % Plain TeX's default, but must be specified
+ % to set it back after a \step with another font.
+
+\setparameter slide:
+ everyslide = \everyslide
+ hsize = ".6\pdfpagewidth"
+ top = 76pt
+ bottom = 42pt
+ areas* = "title author date"
+ bookmarkstyle = italic
+ baselineskip = 12pt
+ topskip = \baselineskip
+
+\def\everyslide{%
+ \position{topleft}\Title
+ \position{topright}\sectiontitle
+ \position{titlebar}\slidetitle
+ \position{bottomleft}\Author
+ \position{bottommiddle}{%
+ \noindent
+ \dobutton\firstslide\FirstPage
+ \dobutton\prevslide\PrevPage
+ \dobutton\prevstep\PrevStep\kern.3em
+ \dobutton\showbookmarks\Bookmarks\kern.3em
+ \dobutton\nextstep\NextStep
+ \dobutton\nextslide\NextPage
+ \dobutton\lastslide\LastPage\unskip}
+ \position{bottomright}\Date
+ \presentationonly{
+ \position{math}{%
+ ${a\over b}=\sqrt2$\par
+ $({a\over b})^2=2$\par
+ ${a^2\over b^2}=2$\par
+ $a^2=2b^2$\par
+ $(2k)^2=2b^2$\par
+ $4k^2=2b^2$\par
+ $2k^2=b^2$\par
+ ${a\over b}\neq\sqrt2$}}
+ }
+\def\dobutton#1#2{%
+ #1[push]{\rlap#2\buttonborder}\hskip1em
+ }
+
+%
+% Top and bottom bars.
+%
+
+\setarea{topleft topright bottomleft bottommiddle bottomright}
+ height = 18pt
+
+\setarea{topleft bottomleft}
+ background = darkred
+ foreground = white
+
+\setarea{topright bottomright}
+ background = darkgrey
+ foreground = darkred
+
+\setarea{topright bottomleft bottomright}
+ font = \subtitlefont
+
+\setarea{topleft topright}
+ width = ".5\pdfpagewidth"
+ right left = 1em
+
+\setarea{bottomleft bottommiddle bottomright}
+ vshift* = 0pt
+ width = "\pdfpagewidth/3"
+ hpos = rr
+
+\setarea{topleft}
+ hpos = rf
+ font = \titlefont
+
+\setarea{topright}
+ hshift* = 0pt
+ hpos = fr
+
+\setarea{titlebar}
+ vshift = 18pt
+ left = 1em
+ height = 40pt
+ background = lightgrey
+ foreground = darkred
+ topskip = 30pt
+ hpos = fr
+ font = \slidetitlefont
+
+% bottomleft is already fully specified.
+
+\setarea{bottommiddle}
+ hshift = "\pdfpagewidth/3"
+ topskip = "\symbolheight\buttonborder+3pt"
+ background = lightgrey
+ foreground = white
+
+\setarea{bottomright}
+ hshift* = 0pt
+
+%
+% The maths on the right.
+%
+\setarea{math}
+ width = ".2\pdfpagewidth"
+ hshift* = 0pt
+ vshift = 58pt
+ vshift* = 18pt
+ foreground = "grey .75"
+ hpos = fr
+ vpos = center
+ baselineskip = 18pt
+
+
+%
+% The title slide.
+%
+\setslide{titleslide}
+ areas = "title author date topleft topright"
+ bookmark = false
+ hpos = rr
+ everyslide = {}
+
+\setarea{title}
+ hshift* = 1cm
+ vshift = 2.5cm
+ height = 45pt
+ topskip = 25pt
+ background = darkred
+ foreground = white
+ top = 1em
+ frame = "width=.2em, corner=round, color=darkgrey"
+ hpos = rr
+ font = \maintitlefont
+
+\setarea{author}
+ hshift* = 5cm
+ vshift = 6cm
+ height = 28pt
+ topskip = 20pt
+ background = lightgrey
+ foreground = white
+ frame = "width=.5em, corner=round"
+ hpos = rr
+ font = \slidetitlefont
+
+\setarea{date}
+ hshift* = 5.5cm
+ vshift = 9cm
+ height = 22pt
+ topskip = 10pt
+ background = white
+ foreground = black
+ top = 5pt
+ frame = "width=.5em, corner=bevel, color=lightgrey"
+ hpos = rr
+
+
+%
+% For the appendices.
+% We remove the math area instead
+% of redefining \everyslide.
+%
+\setslide{appslide}
+ areas* = "math title author date"
+
+%
+% Default step.
+%
+\setparameter step:
+ everyvstep = "\quitvmode\llap{\itemsymbol\kern.5em}"
+ vskip = 18pt
+
+%
+% Foreground math.
+%
+\setstep\emptystep
+ everyvstep everyhstep = {}
+ vskip hskip = 0pt
+
+\def\domath#1 #2 #3 {%
+ \emptystep[on=#2,off=#3]
+ \domathstep{#1}%
+ }
+\def\Domath#1 #2 {%
+ \emptystep[off=#2,visible=true]
+ \domathstep{#1}%
+ }
+\def\domathstep#1{%
+ \presentationorhandout{\position{math}[0pt,#1\dimexpr18pt\relax]}{\position{math}}
+ {\quitvmode\llap{\mathsym\kern.3em}\usecolor{black}{\typemath{#1}}}%
+ }
+
+\def\typemath#1{%
+ $\ifcase#1
+ {a\over b}=\sqrt2
+ \or ({a\over b})^2=2
+ \or {a^2\over b^2}=2
+ \or a^2=2b^2
+ \or (2k)^2=2b^2
+ \or 4k^2=2b^2
+ \or 2k^2=b^2
+ \or {a\over b}\neq\sqrt2
+ \fi$}
+%
+% Navigation symbols.
+%
+\newcolor{button}{grey}{.95}
+\newcolor{darkbutton}{grey}{.68}
+\newsymbol\buttonborder[.7pt]
+ {color button,
+ + 0 16, + 16 0, stroke,
+ color darkbutton,
+ move 0 0, + 16 0, + 0 16
+ }
+\newsymbol\NextStep[.7pt]
+ {move 3 3,
+ + 10 5,+ -10 5,
+ }
+\newsymbol\PrevStep[.7pt]
+ {move 3 3,
+ move + 10 0, + -10 5,+ 10 5,
+ }
+\newsymbol\NextPage[.7pt]
+ {move 3 3,
+ + 10 5,+ -10 5, close,
+ }
+\newsymbol\PrevPage[.7pt]
+ {move 3 3,
+ move + 10 0, + -10 5,+ 10 5, close,
+ }
+\newsymbol\LastPage[.7pt]
+ {move 3 3,
+ + 10 5,+ -10 5, close,
+ move 3 3,
+ move + 10 0, + 0 10,
+ }
+\newsymbol\FirstPage[.7pt]
+ {move 3 3,
+ move + 10 0, + -10 5, + 10 5, close,
+ move 3 3, + 0 10,
+ }
+\newsymbol\Bookmarks[.7pt]
+ {move 3 3,
+ move + 0 1, + 10 0,
+ move 3 3,
+ move + 0 5, + 10 0,
+ move 3 3,
+ move + 0 9, + 10 0,
+ }
+%
+% Item symbols.
+%
+\newsymbol\itemsymbol[.6em,padding=0pt]
+ {color darkred, + 1 0, + 0 1, + -1 0, fill,}
+\newsymbol\mathsym[.5em,padding=0pt]
+ {color darkred,
+ + 1 .5, + -1 .5, fill,}
+\newsymbol\backsym[.5em,padding=0pt]
+ {color darkred, move 1 0, + -1 .5, + 1 .5, fill,}
+%
+% Navigation to the appendices.
+%
+\def\Back#1{%
+ \presentationonly{\usecolor{darkred}{\gotoB{#1}{\subtitlefont\backsym\kern.3em Back}}}%
+ }
+\def\To#1{%
+ \presentationorhandout{\usecolor{darkred}{\gotoA{#1}{\subtitlefont\mathsym\kern.3em See why}}}
+ {{\usecolor{darkred}{\subtitlefont\mathsym\kern.3em(See Appendices)}}}%
+ }
+%
+% And some structure.
+%
+\def\section#1{%
+ \def\sectiontitle{#1}%
+ \createbookmark[nosubmenutext,open]{.5}{#1}%
+ }
+
+
+% \endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% UNCOMMENT THE PREVIOUS LINE TO USE THIS FILE AS A TEMPLATE, %
+% OR REMOVE EVERYTHING BELOW. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+\titleslide
+
+\position{title}\Title
+\position{author}[0cm,-1.7cm]{\it\usecolor{black}{A Casual Talk By}}
+\position{author}\Author
+\position{date}\Date
+
+\endtitleslide
+
+
+
+
+
+\section{Demonstration}
+
+\slide[A simple assumption]
+
+\domath0 A B
+\domath1 B C
+\domath2 C D
+\domath3 D {}
+
+\step Some say the square root of 2 isn't rational.
+\step Suppose it were.
+
+\step[A] Then we could write it as this, where $a$ and $b$ are
+integers without a common factor.
+\To{app1}
+
+\step[B] But then we can also write this.
+\step[C] And this.
+\step[D] And finally this.
+\step Which means that $a^2$ is even.
+
+\endslide
+
+
+
+\slide[Its consequences]
+
+\Domath3 A
+\domath4 A B
+\domath5 B C
+\domath6 C D
+
+\step[visible="true"] So what?
+\step So $a$ is even. Because only even numbers produce even squares.
+\To{app2}
+
+\step[A] Being even means being expressible in the form $2k$, where $k$ is
+any integer.
+\step[B] And $(2k)^2$ square gives $4k^2$.
+
+\step[C] Let's simplify.
+\step Thus $b^2$ is even.
+\step And $b$ is too.
+
+\endslide
+
+
+
+\slide[The problem]
+
+\domath7 A {}
+
+\step[visible=true] And but so we said $a$ and $b$ have no common factor.
+
+\step If both are even they do have a common factor: 2.
+\step Which is absurd.
+
+\step Thus, our basic assumption is false.
+\step[A] There are no such $a$ and $b$.
+
+\step The square root of 2 is irrational.
+\step Too bad.
+
+\endslide
+
+
+
+
+
+\section{Appendices}
+
+
+
+\appslide[All fractions are reducible]
+
+
+\step[visible=true]
+Suppose $c\over d$ is a rational number. If c and d have no common
+factor, then $a=b$ and $b=d$. If they have a common factor,
+divide both by their greatest common divisor. The result
+is $a\over b$, with no common factor.
+
+\vskip\baselineskip
+\Back{app1}
+
+\endappslide
+
+
+
+\appslide[An even square has an even root,scale=true]
+
+\step[visible=true]
+An even number, by definition, is expressible
+in the form $2k$, where $k$ is any integer.
+On the other hand, an odd number is expressible
+by $$2k+1$$
+Thus the square of an odd number is
+$$(2k+1)^2$$
+i.e. $$4k^2+4k+1$$
+i.e. $$2\times2(k^2+k)+1$$
+which is of the form $2k+1$
+with $2(k^2+k)$ as $k$.
+Hence, an odd number produces an odd square,
+and thus if a square is even its root is even too.
+
+\vskip\baselineskip
+\Back{app2}
+
+\step[visible=true,font=\it] You might have noticed
+that this page is slightly scaled to accommodate
+its content to the slide's declared {\tt\usecolor{darkred}{vsize}}
+parameter. Actually, it is scaled because I stretch this
+paragraph so as to have too much content. Which is kind
+of paradoxical. Or just opportunistic.
+
+\endappslide
+
+\bye
+
+
+
diff --git a/macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.pdf b/macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.pdf
new file mode 100644
index 0000000000..4d85868452
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.tex b/macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.tex
new file mode 100644
index 0000000000..d41f328085
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-KitschScienceFiction.tex
@@ -0,0 +1,306 @@
+% This is a demonstration file distributed with the
+% Lecturer package (see lecturer-doc.pdf).
+%
+% You can recompile the file with a basic TeX implementation,
+% using pdfTeX or LuaTeX with the plain format.
+%
+% The reusable part ends somewhere around line 200.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+\input lecturer
+
+\font\ttit=cmitt10
+
+\setparameter job:
+ fullscreen = true
+ normal = layers
+ autofullscreen = true
+ font = \tt
+
+\newcolor{greent}{rgb}[.8]{.8 1 .8}
+\setparameter slide:
+ width = 18cm
+ right = 5cm
+ hpos = fr
+ top = 2cm
+ vsize = 6cm
+ vpos = center
+ image = universe
+ foreground = greent
+ bookmark = false
+
+% Courtesy of NASA/ESA/Hubble etc.
+% Jet in Carina, it's called. Plus WFC3 UVIS Full Field. No less.
+\newimage{universe}[18cm,]{universe.jpg}
+
+
+%
+% The screen behind the main text.
+%
+\newcolor{tgreen}{rgb}[.6]{0 .8 0}
+\setarea{main}
+ vshift = 2cm
+ vshift* = 4cm
+ hshift* = 4cm
+ background = tgreen
+ frame = "width = .5cm, corner = round"
+
+
+%
+% The fantastic control board.
+%
+\newshade{metal}
+ model = gray
+ from = .8
+ to = 0
+ speed = 1.8
+
+\setarea{control}
+ vshift* = 0pt
+ height = 2cm
+ background = metal
+ topskip = 0pt
+
+% The lights on the left.
+\newcolor{darkred}{rgb}{.8 0 0}
+\newsymbol\lightoff[padding=0pt]{%
+ color gray .8,
+ pen 1.5, 10 0, stroke,
+ color darkred, move + -.5 .7,
+ circle ul 4.5, circle ld 4.5, fill
+ }
+\newsymbol\lighton[padding=0pt]{%
+ color gray .8,
+ pen 1.5, 10 0, stroke,
+ color rgb .4 .8 .4, move + -.5 .7,
+ circle ul 4.5, circle ld 4.5, fill
+ }
+% The big circular button.
+\newcolor{twhite}{grey}[.5]{1}
+\newcolor{tblack}{cmyk}[.3]{0 0 0 1}
+\newsymbol\bigbutton{%
+ color red,
+ circle ur 20, circle rd 20, circle dl 20, circle lu 20,fill,
+ color twhite, pen 2, move 20 16, circle rd 16,stroke,
+ color tblack, move 20 -16, circle lu 16,stroke,
+ }
+% The red button, for the circle.
+\newsymbol\showcircle[1em,padding=0pt]{%
+ color grey .6,
+ move -.2 1.3, -.2 -1.3, 1.2 -1.3, fill,
+ color grey .1,
+ move -.2 1.3, 1.2 1.3, 1.2 -1.3, fill,
+ color rgb 1 .4 .4,
+ move 0 .5, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb .3 0 0,
+ move 0 0, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb .6 0 0,
+ move 0 -1, + 1 0, + 0 1, + -1 0,fill,
+ }
+\newsymbol\hidecircle[1em,padding=0pt]{%
+ color grey .6,
+ move -.2 1.3, -.2 -1.3, 1.2 -1.3, fill,
+ color grey .1,
+ move -.2 1.3, 1.2 1.3, 1.2 -1.3, fill,
+ color rgb 1 .4 .4,
+ move 0 0, 1 0, + 0 1, + -1 0,fill,
+ color rgb .3 0 0,
+ move 0 -.5, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb .6 0 0,
+ move 0 -1, + 1 0, + 0 .5, + -1 0,fill,
+ }
+\newsymbol\circle[2em]{%
+ pen .05, color red,
+ circle ur 1, circle rd 1, circle dl 1, circle lu 1
+ }
+% The green button, for the crosshair.
+\newsymbol\showcrosshair[1em,padding=0pt]{%
+ color grey .6,
+ move -.2 1.3, -.2 -1.3, 1.2 -1.3, fill,
+ color grey .1,
+ move -.2 1.3, 1.2 1.3, 1.2 -1.3, fill,
+ color rgb .4 1 .4,
+ move 0 .5, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb 0 .3 0,
+ move 0 0, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb 0 .6 0,
+ move 0 -1, + 1 0, + 0 1, + -1 0,fill,
+ }
+\newsymbol\hidecrosshair[1em,padding=0pt]{%
+ color grey .6,
+ move -.2 1.3, -.2 -1.3, 1.2 -1.3, fill,
+ color grey .1,
+ move -.2 1.3, 1.2 1.3, 1.2 -1.3, fill,
+ color rgb .4 1 .4,
+ move 0 0, 1 0, + 0 1, + -1 0,fill,
+ color rgb 0 .3 0,
+ move 0 -.5, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb 0 .6 0,
+ move 0 -1, + 1 0, + 0 .5, + -1 0,fill,
+ }
+\newsymbol\crosshair[2em]{%
+ pen .03,
+ color rgb .4 1 .4,
+ move .5 0, + 1 0, stroke,
+ move 1 -.5, + 0 1, stroke,
+ }
+% The blue button.
+\newsymbol\shoot[1em,padding=0pt]{%
+ color grey .6,
+ move -.2 1.3, -.2 -1.3, 1.2 -1.3, fill,
+ color grey .1,
+ move -.2 1.3, 1.2 1.3, 1.2 -1.3, fill,
+ color rgb .4 .4 1,
+ move 0 .5, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb 0 0 .3,
+ move 0 0, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb 0 0 .6,
+ move 0 -1, + 1 0, + 0 1, + -1 0,fill,
+ }
+\newsymbol\shot[1em,padding=0pt]{%
+ color grey .6,
+ move -.2 1.3, -.2 -1.3, 1.2 -1.3, fill,
+ color grey .1,
+ move -.2 1.3, 1.2 1.3, 1.2 -1.3, fill,
+ color rgb .4 .4 1,
+ move 0 0, 1 0, + 0 1, + -1 0,fill,
+ color rgb 0 0 .3,
+ move 0 -.5, + 1 0, + 0 .5, + -1 0,fill,
+ color rgb 0 0 .6,
+ move 0 -1, + 1 0, + 0 .5, + -1 0,fill,
+ }
+% The villain. Alive and dead.
+\newsymbol\alien[1.7em]{%
+ pen .05,
+ color cmyk .2 1 .4 0,
+ 1 0, circle ul .5, circle ld .5, fill,
+ circle dl .2, circle lu .2,
+ move 1 0, circle dr .2, circle ru .2,
+ move .16 0, + 0 -.3,
+ move .49 0, + 0 -.3,
+ move .82 0, + 0 -.3,stroke,
+ color cmyk 0 0 1 0,
+ move .2 .25, + .2 0, move + .2 0, + .2 0
+ }
+\newsymbol\deadalien[1.4em]{%
+ pen .05,
+ color cmyk .2 1 .4 .7,
+ 1 0, circle ul .5, circle ld .5, fill,
+ circle dl .2, circle lu .2,
+ move 1 0, circle dr .2, circle ru .2,
+ move .16 0, + 0 -.3,
+ move .49 0, + 0 -.3,
+ move .82 0, + 0 -.3,stroke,
+ color cmyk 0 0 1 0,
+ move .2 .25, + .2 .1, move + .2 0, + .2 -.1
+ }
+
+\setstep\hidden on = {}\par
+\newcount\tempcount
+% Lights are placed at every step.
+\setstep\textstep
+ vskip = "0pt plus .5fil"
+ everyvstep = {\position{control}[\dimexpr(1cm+\tempcount\dimexpr(10pt+.2cm)),0pt]{\quitvmode\lighton}
+ \global\advance\tempcount1}
+
+
+% \endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% UNCOMMENT THE PREVIOUS LINE TO USE THIS FILE AS A TEMPLATE, %
+% OR REMOVE EVERYTHING BELOW. %
+% Using it for a presentation isn't recommended, though. %
+% But you have the right to do what you want. %
+% I take no responsability. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+\slide[The one and only slide, anchor=start]
+
+% Red lights.
+\position{control}
+ [1cm,0pt]
+ {\quitvmode\lightoff\kern.2cm \lightoff\kern.2cm \lightoff\kern.2cm \lightoff\kern.2cm \lightoff\kern.2cm}
+% The big button.
+\position{control}
+ [\dimexpr(\pdfpagewidth/2-20pt),1cm]
+ {\quitvmode\goto[push]{start}{\bigbutton}}
+
+
+
+\textstep[Say hi] Hello, Captain. Aliens have been spotted.
+
+\textstep[Order] Use your button to show where they should appear.
+
+\textstep[AlienAppear,transition=fade,font=\ttit] Here they are!\par
+Use your crosshair to shoot'em up.
+
+\textstep[Shoooooooooooooot,font=] Good. Now shoooooot!
+
+\textstep[Cool,on=] Congratulations!\par
+Click the red button to start again.
+
+
+
+% The following steps have no autonomy. They appear thanks to the previous
+% ones, or make each other appear.
+%
+% The circle.
+\step[on=Order,CircleOn]
+ \position{control}
+ [\dimexpr(\pdfpagewidth/2)+5em,1cm]
+ {\showorhide{on=Circle CircleOff,off=CircleOn}\showcircle}%
+\hidden[CircleOff]
+ \position{control}
+ [\dimexpr(\pdfpagewidth/2)+5em,1cm]
+ {\showorhide{on=CircleOn,off=Circle CircleOff}\hidecircle}%
+\hidden[Circle]
+ \position{main}
+ [12cm,2cm]
+ \circle
+%
+% The alien.
+\step[Alien,on=AlienAppear]
+ \position{main}
+ [12.4cm,2cm]
+ \alien
+%
+% The crosshair.
+\step[on=AlienAppear,CrosshairOn]
+ \position{control}
+ [\dimexpr(\pdfpagewidth/2)+6.5em,1cm]
+ {\showorhide{on=Crosshair CrosshairOff,off=CrosshairOn}\showcrosshair}%
+\hidden[CrosshairOff]
+ \position{control}
+ [\dimexpr(\pdfpagewidth/2)+6.5em,1cm]
+ {\showorhide{on=CrosshairOn,off=Crosshair CrosshairOff}\hidecrosshair}%
+\hidden[Crosshair,group=true]
+ \position{main}
+ [12cm,1.9cm]
+ \crosshair
+%
+% The shooting device.
+\step[PrepareToShoot,on=Shoooooooooooooot]
+ \position{control}
+ [\dimexpr(\pdfpagewidth/2)+8em,1cm]
+ {\showorhide{on=ShotDone Cool DeadAlien CircleOn CrosshairOn,off=Alien CircleOff Circle CrosshairOff Crosshair}\shoot}%
+\hidden[ShotDone]
+ \position{control}
+ [\dimexpr(\pdfpagewidth/2)+8em,1cm]
+ {\shot}
+%
+% The dead alien.
+\hidden[DeadAlien]
+ \position{main}
+ [12.4cm,2cm]
+ \deadalien
+\endslide
+
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/LecturerDemo-Mondrian.pdf b/macros/generic/lecturer/doc/LecturerDemo-Mondrian.pdf
new file mode 100644
index 0000000000..599b5217e7
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-Mondrian.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-Mondrian.tex b/macros/generic/lecturer/doc/LecturerDemo-Mondrian.tex
new file mode 100644
index 0000000000..41df071e8a
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-Mondrian.tex
@@ -0,0 +1,236 @@
+% This is a demonstration file distributed with the
+% Lecturer package (see lecturer-doc.pdf).
+%
+% You can recompile the file with a basic TeX implementation,
+% using pdfTeX or LuaTeX with the plain format.
+%
+% The reusable part ends somewhere around line 150.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+\input lecturer
+
+%\showgrid{1cm}
+
+\setparameter job:
+ fullscreen = true
+ font = \mainfont
+
+\setparameter slide:
+ width height = 12cm
+ top = 0cm
+ bottom = 3cm
+ left = 5cm
+ right = 1.6cm
+ topskip = 0pt
+ background = black % For the lines between squares.
+ foreground = white
+ vpos = center
+ hpos = ff
+
+\setarea{area1 area2 matharea}
+ width = 3cm
+
+\setarea{area1 area2}
+ height = 4.3cm
+ background = white
+
+\setarea{area2}
+ vshift = 4.7cm
+
+\setarea{matharea footnotearea}
+ height = 2.6cm
+ vshift* = 0pt
+ topskip = .1cm
+ baselineskip = .333cm
+ vpos = center
+
+\setarea{matharea}
+ background = blue
+ foreground = white
+ hpos = rr
+
+% Below the slide's text.
+\setarea{mainarea}
+ hshift = 3.4cm
+ hshift* = 0pt
+ height = 9cm
+ background = red
+
+\setarea{footnotearea}
+ hshift = 3.4cm
+ hshift* = 1.8cm
+ left right = .3cm
+ background = white
+ font = \footnotefont
+ hpos = ff
+
+\setarea{area6 area7}
+ width = 1.4cm
+ hshift* = 0pt
+ height = 1.1cm
+
+\setarea{area6}
+ vshift = 9.4cm
+ background = white
+
+\setarea{area7}
+ vshift* = 0pt
+ background = yellow
+
+
+
+\setparameter step:
+ vskip = \baselineskip
+
+\setstep\emptystep
+ vskip = 0pt
+
+% Used for the maths.
+\def\mathstep#1 #2 #3{\emptystep[on=#1,off=#2]\position{matharea}[0pt,0pt]{$#3$}\ignorespaces}
+\def\Mathstep#1 #2{\emptystep[off=#1,visible=true]\position{matharea}[0pt,0pt]{$#2$}\ignorespaces}
+
+% The footnote. Since the same name is given
+% to each footnote step, there must be at most
+% one per slide. Otherwise, a name should be given
+% manually (or automatically with a number in the name,
+% and a counter to increment it on every footnote call).
+\def\footnote#1{%
+ \showorhide{toggle=footnote}{\super{\usecolor{blue}{*}}}
+ \emptystep[footnote,on=]
+ \position{footnotearea}{\quitvmode\llap{* }#1}%
+ }
+
+% On the last equation.
+\newsymbol\cross[1.7em]{%
+ pen 0.1,
+ move 0 -.5, .5 .9, stroke,
+ move 0 .9, .5 -.5, stroke,
+ }
+% Font for text.
+\font\mainfont=cmss10
+\font\supmainfont=cmss10 at 7.5pt
+% Simple superscript (I'm not very good with
+% math font family... I'm no mathematician after all).
+\def\super#1{\raise.3em\hbox{\supmainfont#1}}
+\font\footnotefont=cmss8 at 7pt
+\mainfont
+\frenchspacing
+
+% Font for maths.
+\font\mathfont=cmss12 at 16pt
+\font\scriptmathfont=cmss12 at 10pt
+\font\scriptscriptmathfont=cmss12 at 8pt
+\textfont0=\mathfont
+\scriptfont0=\scriptmathfont
+\scriptscriptfont0=\scriptscriptmathfont
+\font\mathfont=cmss12 at 16pt
+\font\scriptmathfont=cmss12 at 12pt
+\font\scriptscriptmathfont=cmss12 at 8pt
+\textfont1=\mathfont
+\scriptfont1=\scriptmathfont
+\scriptscriptfont1=\scriptscriptmathfont
+\font\Tensy=cmsy10 at 18pt
+\font\scriptTensy=cmsy10 at 10pt
+\font\scriptscriptTensy=cmsy10 at 8pt
+\textfont2=\Tensy
+\scriptfont2=\scriptTensy
+\scriptscriptfont2=\scriptscriptTensy
+\font\Tenex=cmex10 at 18pt
+\font\scriptTenex=cmex10 at 12pt
+\font\scriptscriptTenex=cmex10 at 8pt
+\textfont3=\Tenex
+\scriptfont3=\scriptTenex
+\scriptscriptfont3=\scriptscriptTenex
+
+
+
+% \endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% UNCOMMENT THE PREVIOUS LINE TO USE THIS FILE AS A TEMPLATE, %
+% OR REMOVE EVERYTHING BELOW. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+\slide[A simple assumption]
+
+\mathstep A B {{a\over b}=\sqrt2}
+\mathstep B C {({a\over b})^2=2}
+\mathstep C D {{a^2\over b^2}=2}
+\mathstep D {} {a^2=2b^2}
+
+\step Some say the square root of 2 isn't rational.
+\step Suppose it were.
+
+\step[A] Then we could write it as this, where a and b are
+integers without a common factor.%
+\footnote{%
+ Suppose c/d is a rational number. If c and d have no common
+ factor, then a=b and b=d. If they have a common factor,
+ divide both by their greatest common divisor. The result
+ is a/b, with no common factor.}
+
+\step[B] But then we can also write this.
+\step[C] And this.
+\step[D] And finally this.
+\step Which means that a\super2 is even.
+
+\endslide
+
+
+
+\slide[Its consequences]
+
+\Mathstep A {a^2=2b^2}
+\mathstep A B {(2k)^2=2b^2}
+\mathstep B C {4k^2=2b^2}
+\mathstep C D {2k^2=b^2}
+
+\step[visible=true] So what?
+\step So a is even. Because only even numbers produce even squares.%
+\footnote{%
+ An even number, by definition, is expressible
+ in the form 2k, where k is any integer.
+ On the other hand, an odd number is expressible
+ by 2k+1. Thus the square of an odd number is
+ (2k+1)\super2, i.e. 4k\super2+4k+1, i.e.
+ 2x2(k\super2+k)+1, which is of the form 2k+1,
+ with 2(k\super2+k) as k.
+ Hence, an odd number produces an odd square,
+ and thus if a square is even its root is even too.}
+
+\step[A] Being even means being expressible in the form 2k, where k is
+any integer.
+\step[B] And (2k)\super2 square gives 4k\super2.
+
+\step[C] Let's simplify.
+\step Thus b\super2 is even.
+\step And b is too.
+
+\endslide
+
+
+
+\slide[The problem]
+
+\Mathstep A {{a\over b}=\sqrt2}
+\mathstep A {} {\rlap\cross{a\over b}=\sqrt2}
+
+\step[visible=true] And but so we said a and b have no common factor.
+
+\step If both are even they do have a common factor: 2.
+\step Which is absurd.
+
+\step Thus, our basic assumption is false.
+\step[A] There are no such a and b.
+
+\step The square root of 2 is irrational.
+
+\endslide
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.pdf b/macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.pdf
new file mode 100644
index 0000000000..44d673668a
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.tex b/macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.tex
new file mode 100644
index 0000000000..18c161f201
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-SimplePresentation.tex
@@ -0,0 +1,392 @@
+% This is a demonstration file distributed with the
+% Lecturer package (see lecturer-doc.pdf).
+%
+% You can recompile the file with a basic TeX implementation,
+% using pdfTeX or LuaTeX with the plain format.
+%
+% The reusable part ends somewhere around line 250.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+\input lecturer
+
+% Uncomment these to show the grid on which the presentation is built.
+%\showgrid{1mm}
+%\showgrid[-.5cm,-.5cm]{1cm}[black]
+%\showgrid{1cm}[red][.4pt]
+
+
+\font\maintitlefont = cmdunh10 at 23pt
+\font\slidetitlefont = cmss12 at 20pt
+\font\subtitlefont = cmss8
+\font\titlefont = cmss10 at 20pt
+
+\newcolor{darkred}{rgb}{.6 0 0}
+\setparameter job:
+ mode = presentation
+ author = "Pete Agoras"
+ title = "The square root of 2 ain't rational"
+ date = "Some centuries B.C\rlap." % \rlap creates protrusion
+ fullscreen = true
+ autofullscreen = true
+ font = \tenrm
+
+
+%
+% Slides for the main matter.
+%
+\setparameter slide:
+ everyslide = \everyslide
+ top = 3cm
+ topskip = 1cm
+ left = 3.1cm
+ right = 5cm
+ baselineskip = .5cm
+ areas* = "title by author date"
+ bookmarkstyle = italic
+ font = \tenrm
+ vpos = top
+
+\def\everyslide{%
+ \position{top}\slidetitle
+ \position{left}{\Author\par\Date}
+ \position{menu}{\quitvmode\showbookmarks\Bookmarks}
+ \position{menu}[0pt,0pt]{\the\numexpr\slidenumber-1\relax}
+ }
+
+%
+% Left and top areas.
+%
+\setarea{left}
+ hshift = 0pt
+ width = 3cm
+ right = .1cm
+ hpos = rf
+ bottom = .5cm
+ vpos = bottom
+ foreground = darkred
+ font = \subtitlefont
+
+\setarea{top}
+ left = 3.1cm
+ vshift = 0pt
+ height = 2cm
+ vpos = bottom
+ font = \titlefont
+
+\setarea{vline hline}
+ frame = "width = .15pt, color = black"
+
+\setarea{vline}
+ hshift = 3cm
+ width = 0pt
+
+\setarea{hline}
+ vshift = 2cm
+ height = 0pt
+
+%
+% The circle with the slide number.
+%
+\setarea{menu}
+ width height = 1cm
+ vshift* hshift* topskip = .5cm
+ vpos = bottom
+ hpos = rr
+
+\newsymbol\Bookmarks[.35cm,padding=.1pt]
+ {pen .05,
+ move 1 -.6,
+ circle lu 1,
+ circle ur 1,
+ circle rd 1,
+ circle dl 1,
+ }
+
+%
+% The maths on the right.
+%
+\setarea{math}
+ width = 2cm
+ hshift* = 1.1cm
+ vshift* = 5.35cm
+ vshift = 5.25cm
+ topskip = .8cm
+ foreground = white
+ background = black
+ frame = width=.1cm,corner=round % No space => no need for quotes or braces. No readability either.
+ hpos = rr
+
+
+%
+% The title slide.
+%
+\setslide{titleslide}
+ areas = "title by author date"
+ bookmark = false
+ hpos = rr
+ everyslide = {}
+
+\setarea{title}
+ hshift* = 1cm
+ hpos = rr
+ vshift = 2cm
+ height = 1.3cm
+ topskip = 1cm
+ background = darkred
+ foreground = white
+ frame = "width = .5em, corner = round, color = black"
+ font = \maintitlefont
+
+\setarea{by}
+ hshift* = 5.8cm
+ hpos = rr
+ vshift = 4.5cm
+ height = .8cm
+ topskip = 10pt
+ top = 3pt
+ background = black
+ foreground = white
+ frame = "width = .5em, corner = round"
+ font = \it
+
+
+\setarea{author}
+ hshift* = 5cm
+ hpos = rr
+ vshift = 6.3cm
+ height = 25pt
+ topskip = 15pt
+ top = 4pt
+ background = black
+ foreground = white
+ frame = "width = .5em, corner = round, color = darkred"
+ font = \slidetitlefont
+
+\setarea{date}
+ hshift* = 5.5cm
+ vshift* = 1.7cm
+ height = .8cm
+ bottom = .3cm
+ topskip = 0pt
+ vpos = bottom
+ background = white
+ foreground = black
+ frame = "width = .5em, corner = bevel, color = darkred"
+ hpos = rr
+
+
+%
+% For the appendices.
+% We remove the math area instead
+% of redefining \everyslide.
+%
+\setslide{appslide}
+ top = 2.5cm
+ areas*= "math title by author date"
+
+\abovedisplayshortskip = 0cm
+\belowdisplayshortskip = 0cm
+\abovedisplayskip = 0pt
+\belowdisplayskip = 0pt
+
+%
+% Steps.
+%
+\setparameter step:
+ vskip = .5cm
+
+% With this macro, the item symbol is always on the screen
+% (since the step is "visible").
+\def\Step{%
+ \step[visible=true]\quitvmode\llap{\stepsym\kern.2cm}%
+ \step}
+
+%
+% The maths.
+%
+\setstep\emptystep
+ everyvstep everyhstep = {}
+ vskip hskip = 0pt
+
+\def\domath#1 #2 #3{%
+ \emptystep[on=#1,off=#2]
+ \domathstep{#3}%
+ }
+\def\Domath#1 #2{%
+ \emptystep[off=#1,visible=true]
+ \domathstep{#2}%
+ }
+\def\domathstep#1{%
+ \position{math}[0pt,0pt]{$#1$}%
+ }
+%
+% Item symbols.
+%
+\newsymbol\stepsym[2mm,padding=0pt]
+ {color darkred,
+ + 1 .5, + -1 .5, fill,}
+\newsymbol\backsym[2mm,padding=0pt]
+ {color darkred, move 1 0, + -1 .5, + 1 .5, fill,}
+%
+% Navigation to the appendices.
+%
+\def\Back#1{%
+ \presentationonly{\usecolor{darkred}{\gotoB{#1}{\subtitlefont\backsym\kern.3em Back}}}%
+ }
+\def\To#1{%
+ \usecolor{darkred}{\gotoA{#1}{\subtitlefont\stepsym\kern.3em See why}}%
+ }
+%
+% And some structure.
+%
+\def\section#1{%
+ \def\sectiontitle{#1}%
+ \createbookmark[nosubmenutext,open]{.5}{#1}%
+ }
+
+% \endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% UNCOMMENT THE PREVIOUS LINE TO USE THIS FILE AS A TEMPLATE, %
+% OR REMOVE EVERYTHING BELOW. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+\titleslide
+
+\position{title}\Title
+\position{by}{A Casual Talk By}
+\position{author}\Author
+\position{date}\Date
+
+\endtitleslide
+
+
+
+
+
+\section{Demonstration}
+
+
+
+\slide[A simple assumption,font=]
+
+\step[on=A]\position{math}[0cm,0cm]{}
+
+\domath A B {{a\over b}=\sqrt2}
+\domath B C {({a\over b})^2=2}
+\domath C D {{a^2\over b^2}=2}
+\domath D {} {a^2=2b^2}
+
+\Step Some say the square root of 2 isn't rational.
+\step Suppose it were.
+
+\Step[A] Then we could write it as this, where $a$ and $b$ are
+integers without a common factor.
+\To{app1}
+
+\Step[B] But then we can also write this.
+\step[C] And this.
+\step[D] And finally this.
+\step Which means that $a^2$ is even.
+
+\endslide
+
+
+
+\slide[Its consequences]
+
+\step[on=A]\position{math}[0cm,0cm]{}
+
+\Domath A {a^2=2b^2}
+\domath A B {(2k)^2=2b^2}
+\domath B C {4k^2=2b^2}
+\domath C D {2k^2=b^2}
+
+\Step[visible=true] So what?
+\step So $a$ is even. Because only even numbers produce even squares.
+\To{app2}
+
+\Step[A] Being even means being expressible in the form $2k$, where $k$ is
+any integer.
+\step[B] And $(2k)^2$ square gives $4k^2$.
+
+\Step[C] Let's simplify.
+\step Thus $b^2$ is even.
+\step And $b$ is too.
+
+\endslide
+
+
+
+\slide[The problem]
+
+\step[on=A]\position{math}[0cm,0cm]{}
+
+\domath A {} {{a\over b}\neq\sqrt2}
+
+\Step[visible=true] And but so we said $a$ and $b$ have no common factor.
+
+\Step If both are even they do have a common factor: 2.
+\step Which is absurd.
+
+\Step Thus, our basic assumption is false.
+\step[A] There are no such $a$ and $b$.
+
+\Step The square root of 2 is irrational.
+\step Too bad.
+
+\endslide
+
+
+
+
+
+\section{Appendices}
+
+
+
+\appslide[All fractions are reducible]
+
+\Step[visible=true]
+Suppose $c\over d$ is a rational number. If c and d have no common
+factor, then $a=b$ and $b=d$. If they have a common factor,
+divide both by their greatest common divisor. The result
+is $a\over b$, with no common factor.
+\kern1em\Back{app1}
+
+\endappslide
+
+
+
+\appslide[An even square has an even root]
+
+\Step[visible=true]
+An even number, by definition, is expressible
+in the form $2k$, where $k$ is any integer.
+On the other hand, an odd number is expressible by
+%
+$$2k+1$$
+%
+Thus the square of an odd number is
+%
+$$(2k+1)^2$$
+i.e. $$4k^2+4k+1$$
+i.e. $$2\times2(k^2+k)+1$$
+%
+which is of the form $2k+1$
+with $2(k^2+k)$ as $k$.
+Hence, an odd number produces an odd square,
+and thus if a square is even its root is even too.
+\kern1em\Back{app2}
+
+\endappslide
+
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.pdf b/macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.pdf
new file mode 100644
index 0000000000..c5688b3c00
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.tex b/macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.tex
new file mode 100644
index 0000000000..ad2a78145f
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-SquaresOfAs.tex
@@ -0,0 +1,309 @@
+% This is a demonstration file distributed with the
+% Lecturer package (see lecturer-doc.pdf).
+%
+% You can recompile the file with a basic TeX implementation,
+% using pdfTeX or LuaTeX with the plain format.
+%
+% There's no cutoff point for the reusable part here
+% because code changes between slides. It is easily
+% retrievable, though.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+
+% For the fonts with LuaTeX.
+% Comment this first line out if you want to use pdfTeX,
+% and don't forget to change the fonts!
+\input luaotfload.sty
+\input lecturer
+
+\hfuzz=\maxdimen
+\vfuzz=\maxdimen % We might have some bad boxes...
+\lineskiplimit=-1000pt % So baseline distances are respected, no matter what.
+
+% The measure. Could be anything.
+\newdimen\squarewidth
+\squarewidth=4cm
+\newdimen\squaresep
+\squaresep=\dimexpr\squarewidth/6
+
+% Uncomment these to show the grid.
+%\showgrid{.5\squaresep}
+%\showgrid{\squaresep}[red]
+
+\setparameter job:
+ background = white
+ mode = presentation
+ fullscreen = true
+
+\newcolor{grey}{grey}{.7}
+\setparameter slide:
+ width height = "3\squarewidth+4\squaresep"
+ bottom = 0cm
+% This is just for the last slide.
+% The negative left is to accomodate the a's spur.
+ left = "-.8\squaresep"
+ right = 0cm
+ hpos = "rr"
+ vpos = top
+ foreground = grey
+ background = white
+
+\setarea{area1 area2 area3 area4 area5 area6 area7 area8 area9}
+ width height = \squarewidth
+ left right = ".3\squaresep"
+ hpos = rr
+ baselineskip = ".18\squarewidth"
+ topskip = ".1\squarewidth"
+ vpos = center
+ visible = step % This will be changed after slide 1
+ background = grey
+ foreground = white
+ font = \mainfont
+ frame = "width=-.5\squaresep, corner=round"
+
+\setarea{area1 area2 area3}
+ vshift = \squaresep
+
+\setarea{area4 area5 area6}
+ vshift = "\squarewidth+2\squaresep"
+
+\setarea{area7 area8 area9}
+ vshift* = \squaresep
+
+\setarea{area1 area4 area7}
+ hshift = \squaresep
+
+\setarea{area2 area5 area8}
+ hshift = "\squarewidth+2\squaresep"
+
+\setarea{area3 area6 area9}
+ hshift* = \squaresep
+
+\setarea{area8} % The area for the big a's.
+ topskip = \squarewidth
+ vpos = bottom
+ left right = 0pt
+ font = \afont % This font will change at each slide
+
+
+
+% Some shorthands.
+\long\def\dosquare#1#2{%
+ \position{area#1}{#2}%
+ }
+\long\def\Step#1#2{%
+ \step\dosquare{#1}{#2}%
+ }
+% #2 is the font
+\def\doasquare#1#2{\position{area#1}{#2a}}
+
+
+
+
+\font\mainfont=cmssbx10 at .3\squarewidth
+\font\afont=cmssbx10 at 1.93\squarewidth
+
+
+
+\slide[Introduction]
+
+\Step1{I}
+\Step2{really}
+\Step3{find}
+\Step6{the}
+\Step9{letter}
+\step\position{area8}{a}
+\Step7{fascinating}
+\Step4{don't}
+\Step5{you?}
+
+\endslide
+
+
+
+
+
+
+\setarea{area1 area2 area3 area4 area5 area6 area7 area8 area9}
+ visible = true
+
+\font\mainfont=cmssbx10 at .2\squarewidth
+\font\afont=cmr10 at 2.04\squarewidth
+
+\slide[Computer Modern]
+
+\position{area8}{a}
+\dosquare1{For instance, here's one.}
+\Step4{That's Computer Modern.}
+\Step3{(Guy with the computer?)}
+\Step9{See how it curls?}
+\Step7{Like it has a cowlick.}
+\Step2{Not very fond of it but...}
+\Step6{... it has a charm of its own.}
+\Step5{A study in \hbox{roundness}.}
+
+\endslide
+
+
+
+
+
+
+
+\font\afont=Electra.ttf at 2.09\squarewidth
+
+\slide[Electra]
+
+\position{area8}{a}
+\dosquare7{And here's an Electra.}
+\Step9{It stands proudly upright.}
+\Step6{Square shoulder(s)...}
+\Step4{... and an impatient spur.}
+\Step5{A letter of purpose.}
+\Step3{A hint of insolence.}
+\Step1{Its bowl makes it friendly, though.}
+\Step2{It jumps right out of the book.}
+
+\endslide
+
+
+
+
+
+
+
+\font\afont=Figural.ttf at 1.98\squarewidth
+
+\slide[Figural]
+
+\position{area8}{a}
+\dosquare5{That's a Figural.}
+\Step6{Built with strength too...}
+\Step1{... out of pen and hand.}
+\Step7{The bowl isn't larger than the arm.}
+\Step9{Hence the squareness.}
+\Step3{And itself is a rectangle.}
+\Step2{(Meaning the bowl.)}
+\Step4{The beauty of humanism.}
+
+\endslide
+
+
+
+
+
+% Now all areas except 3 and 5 take a big a.
+
+\font\afont=Walbaum.ttf at 1.82\squarewidth
+\font\chap=ChaparralPro-Regular.otf at 2.13\squarewidth
+\font\cent=Centaur.ttf at 2.41\squarewidth
+\font\sab =Sabon.ttf at 2\squarewidth
+\font\four=FournierMTStd-Regular.ttf at 2.3\squarewidth
+\font\espr=Esprit.ttf at 1.98\squarewidth
+\font\mend=Mendoza.ttf at 1.83\squarewidth
+
+
+\setarea{area1 area2 area4 area6 area7 area8 area9}
+ topskip = \squarewidth
+ vpos = bottom
+ left right = 0pt
+
+% Freely positioned material is not meant
+% to interact nicely with the area's vpos,
+% since it doesn't really exist and can occur
+% anywhere among real material. Hence this hack.
+%
+\long\def\Dosquare#1{%
+ \position{area3}[0cm,0cm]{\vbox to \squarewidth{\vfil#1\vfil}}%
+ }
+\setarea{area3}
+ topskip = \squarewidth
+ vpos = top
+
+%
+% The designers in the central square.
+%
+\font\designers=cmssbx10 at .065\squarewidth
+\def\Font#1: #2, #3.{#2 (#1, #3)}
+\setarea{area5}
+ topskip baselineskip = ".065\squarewidth"
+ vpos = top
+ left right = ".01\squarewidth"
+ hpos = fr
+ font = \designers
+
+
+
+\slide[Showcase]
+
+\step[visible=true,off=chap]
+\Dosquare{An intimidating Walbaum}
+\step[visible=true]\position{area8}{a}
+
+\step[chap,off=cent]
+\Dosquare{A deceptively na\"\i ve Chaparral}
+\step[on=chap]\doasquare4\chap
+
+\step[cent,off=sab]
+\Dosquare{A s(w)inging Centaur}
+\step[on=cent]\doasquare6\cent
+
+\step[sab,off=four]
+\Dosquare{A no-nonsense Sabon}
+\step[on=sab]\doasquare2\sab
+
+\step[four,off=espr]
+\Dosquare{A delicate Fournier}
+\step[on=four]\doasquare9\four
+
+\step[espr,off=mend]
+\Dosquare{A whimsical Esprit}
+\step[on=espr]\doasquare7\espr
+
+\step[mend,off=des]
+\Dosquare{An open Mendoza}
+\step[on=mend]\doasquare1\mend
+
+\step[des]
+\Dosquare{And the designers of all these fonts}
+\dosquare5{%
+ \Font Computer Modern: Donald Knuth, past 30 years.,
+ \Font Electra: W.A. Dwiggins, 1935.,
+ \Font Figural: Old\v rich Menhart, 1940.,
+ \Font Walbaum: Justus Erich Walbaum, 1800.,
+ \Font Chaparral: Carol Twombly, 1997.,
+ \Font Centaur: Bru\-ce Rogers, 1914 after Jenson, 1469.,
+ \Font Sabon: Jan Tschichold, 1964 after Sabon, 16th century.,
+ \Font Fournier: Pierre-Simon Fournier, 18th century.,
+ \Font Esprit: Jovica Veljovi\'c, 1985.,
+ \Font Mendoza: Jos\'e Mendoza y Al\-meida, 1991..
+ }
+
+\endslide
+
+
+
+% And one big final a. The title of the slide
+% comes from my impression that this glyph
+% is almost an abstract symbol without any relation to
+% the letter (especially when compared to the others
+% on the previous slide, actually). Ok, a glyph is
+% an abstract anyway, but you see what I mean.
+
+
+\setarea{area4}
+ background = white
+ foreground = grey
+
+\font\chapp=ChaparralPro-Regular.otf at 2.275\pdfpageheight
+
+\slide[Abstraction,areas=area4,font=\chapp]
+
+a
+
+\endslide
+
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.pdf b/macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.pdf
new file mode 100644
index 0000000000..2dac53ce85
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.tex b/macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.tex
new file mode 100644
index 0000000000..d76d13ee41
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-ThePoodleLectures.tex
@@ -0,0 +1,320 @@
+% This is a demonstration file distributed with the
+% Lecturer package (see lecturer-doc.pdf).
+%
+% You can recompile the file with a basic TeX implementation,
+% using pdfTeX or LuaTeX with the plain format.
+%
+% You can retrieve code between each slide to reuse it.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+\input lecturer
+
+
+\font\mainfont=cmss10
+
+\setparameter job:
+ author = "F. Runobulax"
+ pdfauthor = "Paul Isambert"
+ title = "The Poodle Lectures"
+ fullscreen = true
+
+\setparameter slide:
+ background = black
+ left = 3cm
+ top = 2cm
+ font = \mainfont
+ everyslide = \everyslide
+
+\def\everyslide{%
+ \position{title}{\slidetitle}
+ \position{author}{\Author}
+ \step This is Step One.\par
+ \substep High-school diploma.\par
+ \substep Stuffed with a gym sock.\par
+ \step This is Step Two.\par
+ \substep College degree.\par
+ \substep Stuffed with absolutely nothing at all.\par
+ \step One more time for the world.
+ }
+
+\setparameter step:
+ vskip = "2\baselineskip"
+ visible = true
+ everyvstep = "\quitvmode\llap{\stepsymbol\kern1em}"
+
+\setstep\substep
+ vskip = 0pt
+ everyvstep = "\quitvmode\llap{\substepsymbol\kern1em}"
+ left = 1cm
+
+
+
+
+
+
+\newcolor{color1}{cmyk}{0 .27 0 .45}
+\newcolor{color2}{cmyk}{0 .27 .0 .25}
+\setarea{background1}
+ background = color1
+ frame = "width=-11.5cm, corner=round"
+
+\setarea{background2}
+ vshift* hshift* = 1cm
+ background = color1
+ frame = "width=-10.5cm, color=color2, corner=round"
+
+\setarea{author title}
+
+\newcolor{symbol}{cmyk}{0 .06 .63 .02}
+\newsymbol\stepsymbol[.5em]{%
+ color symbol,
+ + 1.2 .5, + -1.2 .5, fill
+ }
+\newsymbol\substepsymbol[.5em]{%
+ color symbol,
+ move 0 .5, circle ur .4, circle rd .4,
+ circle dl .4, circle lu .4, fill
+ }
+
+\slide[Duke of Prunes, areas*= author title]
+
+\endslide
+
+
+
+
+
+
+
+
+
+\newcolor{color1}{cmyk}{0 .51 .90 .22}
+\newcolor{color2}{cmyk}{0 .51 .90 .02}
+
+\setparameter slide:
+ background = white
+
+\setarea{background1}
+ hshift* vshift* = 1cm
+ background = white
+ frame = "width=.2cm, color=color1, corner=bevel"
+
+\setarea{background2}
+ hshift vshift hshift* vshift* = 1.2cm
+ background = white
+ frame = "width=-.15cm, color=color2, corner=miter"
+
+\setarea{author title}
+ background = white
+ height = .5cm
+ font = \it
+ vpos = bottom
+ left = .1cm
+
+\setarea{author}
+ hshift* = 2cm
+ width = 2.3cm
+ vshift* = 1.2cm
+
+\setarea{title}
+ hshift = 2cm
+ width = 3.7cm
+ vshift = .5cm
+
+\newcolor{symbol}{cmyk}{0 .31 1.0 .02}
+\newsymbol\stepsymbol[.5em]{%
+ color symbol,
+ + 1 0, + 0 1, + -1 0, fill
+ }
+\newsymbol\substepsymbol[.5em]{%
+ color symbol,
+ move 0 .5, circle ur .4, circle rd .4,
+ circle dl .4, circle lu .4, fill
+ }
+
+\slide[Son of Orange County]
+\endslide
+
+
+
+
+
+
+
+
+
+
+
+
+
+\setparameter slide:
+ background = black
+ foreground = white
+
+\setarea{background1 background2 title}
+ hshift hshift* = 0pt
+ height = 1ex
+ background = ""
+ foreground = white
+ frame = "color=grey .6, corner=miter, width=.1pt"
+
+\setarea{background1}
+ vshift = 1cm
+
+\setarea{background2}
+ vshift = 1cm+2ex
+
+\setarea{title}
+ vshift = 0cm
+ height = 1cm+4ex
+ bottom = 1ex
+ vpos = bottom
+ font = \bf
+
+\newsymbol\stepsymbol[.3em]{%
+ pen 0.2,
+ move 0 .3, circle ur .4, circle rd .4,
+ circle dl .4, circle lu .4, fill,
+ move .8 .3, + 0 1.8,
+ }
+
+\newsymbol\substepsymbol[.3em]{%
+ pen 0.2,
+ move 0 .3, circle ur .4, circle rd .4,
+ circle dl .4, circle lu .4, fill,
+ move .8 .3, + 0 1.8, + 1.5 .5, stroke,
+ move 1.5 .5,
+ move + 0 .3, circle ur .4, circle rd .4,
+ circle dl .4, circle lu .4, fill,
+ move 1.5 .5,
+ move + .8 .3, + 0 1.8,
+ }
+
+\slide[The Black Page, areas*=author]
+\endslide
+
+
+
+
+
+
+
+
+
+
+
+
+
+\newcolor{color1}{cmyk}{0 .1 .26 .07}
+\newcolor{color2}{cmyk}{0 .1 .46 .47}
+
+\setparameter slide:
+ background = color1
+ foreground = color2
+
+\setarea{background1}
+ vshift = 10cm
+ height = 1.5cm
+ hpos = ff
+ vpos = bottom
+ frame_width = 0pt
+ left right = -1cm
+
+\setarea{background2}
+ hshift hshift* = 2cm
+ vshift = 2.5cm
+ vshift* = 2cm
+ background = ""
+ frame = "width=.05cm, color=color2"
+
+\setarea{title}
+ vshift = .5cm
+ height = .7cm
+ topskip = .2cm
+ vpos = center
+ hshift = 2cm
+ width = 4cm
+ hpos = rr
+ foreground = color2
+ frame = "width=1pt, color=color2"
+ font = \tt
+
+\newsymbol\fresco[.5cm, top = .07cm, bottom = 0.7cm]{%
+ pen 0.07, color color2,
+ move -.1 0, +.1 0, + 0 1, + .9 0, + 0 -.3, + -.6 0, + 0 -.7, +1.1 0
+ }
+\newsymbol\stepsymbol[.5em]{%
+ + 1 0, + -.5 1, fill
+ }
+\newsymbol\substepsymbol[.5em]{%
+ pen 0.1, move 0 .5,
+ circle ur .5, circle rd .5,
+ circle dl .5, circle lu .5, stroke,
+ move .3 .5,
+ circle ur .2, circle rd .2,
+ circle dl .2, circle lu .2
+ }
+
+\slide[Regyptian Strut, areas*=author]
+\position{background1}{\quitvmode\leaders\fresco\hfill\kern0pt}
+\endslide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\newshade{ocean}
+ model = rgb
+ from = ".95 .9 1"
+ to = ".35 .3 1"
+
+\setparameter slide:
+ background = ocean
+ foreground = white
+
+\newsymbol\stepsymbol[.5em]{%
+ pen .1,
+ color red,
+ + 1 .7, + -1 .7, fill,
+ move .8 .7,
+ circle ur .6, + .3 0, circle rd .9,
+ circle dl .3,
+ + -1 0, circle lu .6, fill,
+ color black,
+ move 1.8 .8, + .2 0,
+ }
+\newcolor{symbol}{cmyk}{0 .26 .43 0}
+\newsymbol\substepsymbol[.5em]{%
+ pen .1, color symbol,
+ .8 0, + -.1 .2, + .5 .3,
+ circle ul .8, circle ld .8,
+ + .5 -.3, close, stroke,
+ move .3 .2, + -.4 .7, stroke,
+ move .4 .2, + 0 .9, stroke,
+ move .5 .2, + .4 .7
+ }
+
+\setarea{title}
+ hshift* = 1cm
+ hshift = 7cm
+ font = \it
+ hpos = rf
+ foreground = "cmyk 1 1 0 0"
+ frame_width = 0pt
+
+\slide[The Ocean is the Ultimate Solution, areas=title]
+\endslide
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/LecturerDemo-VisualDoc.pdf b/macros/generic/lecturer/doc/LecturerDemo-VisualDoc.pdf
new file mode 100644
index 0000000000..0f55463d9e
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-VisualDoc.pdf
Binary files differ
diff --git a/macros/generic/lecturer/doc/LecturerDemo-VisualDoc.tex b/macros/generic/lecturer/doc/LecturerDemo-VisualDoc.tex
new file mode 100644
index 0000000000..fffc626df7
--- /dev/null
+++ b/macros/generic/lecturer/doc/LecturerDemo-VisualDoc.tex
@@ -0,0 +1,1354 @@
+% This is The Visual Doc for the Lecturer package.
+% The EXHAUSTIVE documentation is lecturer-doc.pdf.
+%
+% You can recompile if you want, but you need LuaTeX 0.6
+% + piTeX (available on CTAN, put it on top of plain TeX)
+% + non-free fonts. So you'd better just copy and paste here
+% and there.
+%
+% Author: Paul Isambert.
+% Date: July 2010.
+
+\input pitex
+\input lecturer
+
+
+%
+% That's piTeX, nothing to do with
+% Lecturer, except the syntax (how strange).
+%
+\setparameter font:
+ command = \mainfont
+ name = ChaparralPro-
+ size = 10pt
+ roman = Regular
+ bold = Bold
+ italic = Italic
+
+\setparameter font:
+ command = \titlefont
+ name = ChaparralPro-
+ size = 1.5cm
+ roman = Regular
+ bold = Bold
+ italic = Italic
+
+\setparameter font:
+ command = \codefont
+ name = LTYPE
+ size = 8pt
+ type = ttf
+ roman = {}
+ bold = B
+ italic = O
+
+\setparameter font:
+ command = \centaur
+ type = ttf
+ name = Centaur
+ roman = {}
+
+\setcatcodes{_=12}
+%
+% End of piTeX stuff.
+%
+
+
+
+
+
+
+
+
+
+
+\setparameter job:
+ title = "{\it Lecturer:} a Visual Doc"
+ pdftitle = "Lecturer's Visual Doc (alternate title set with pdftitle in the job parameter)"
+ author = "Paul Isambert"
+ background = lightgrey
+ menutext = "Value to the job's submenutext attribute"
+ fullscreen = true
+ autofullscreen = true
+
+\newcolor{lightgrey}{grey}{.9}
+\newcolor{attribute}{rgb}{.9 0 0}
+\newcolor{value}{rgb}{0 .7 0}
+\newcolor{instruction}{grey}{.5}
+\def\Parameter#1{\bold{#1}}
+\def\Attribute#1{\usecolor{attribute}{#1}}
+\def\Value#1{\usecolor{value}{#1}}
+\def\Instruction#1{\usecolor{instruction}{\ital{#1}}}
+\def\com#1{\usecolor{attribute}{\string#1}\antigobblespace}
+
+\setarea{controlbar}
+ width = 3cm
+ top = 1cm
+ left = .3cm
+ font = \mainfont
+ foreground = value
+ background = lightgrey
+
+\newsymbol\menu[.3cm]{%
+ pen .05, color attribute,
+ circle ur 1, circle rd .9, circle dl .8, circle lu .7,
+ circle ur .6, circle rd .5, circle dl .4, circle lu .3,
+ circle ur .2, circle rd .1,
+ }
+
+
+\setparameter slide:
+ height = 16cm
+ width = 19cm
+ left = 3.5cm
+ right = 1cm
+ top = 1cm
+ bottom = 1.5cm
+ hpos = ff
+ vpos = top
+ font = \mainfont
+ everyslide = \everyslide
+
+\def\everyslide{%
+ \position{controlbar}[0cm,11.5cm]{%
+ \firstslide{\codefont\com\firstslide}
+ \prevslide{\codefont\com\prevslide}
+ \prevstep{\codefont\com\prevstep}
+ \nextstep[flash]{\codefont\com\nexstep[flash]}
+ \nextslide[push]{\codefont\com\nextslide[push]}
+ \lastslide[none]{\codefont\com\lastslide[none]}
+ \kern.2cm
+ \showbookmarks\menu
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+%
+%
+% TITLE SLIDE
+%
+%
+
+\setarea{title}
+ hshift = 4cm
+ hshift* = 1cm
+ vshift = 3cm
+ baselineskip = 2cm
+ visible = false
+ font = \titlefont
+ hpos = rr
+
+\setarea{showtitle showauthor showdate}
+ visible = step
+ height = 2cm
+ frame = "width=-.3cm, corner=bevel, color=lightgrey"
+
+\setarea{showtitle}
+ top = -2cm
+ right = 2.5cm
+ hshift = 4cm
+ hshift* = 1cm
+ vshift = 2cm
+
+\setarea{showauthor}
+ hshift = 6cm
+ hshift* = 3cm
+ left = -4cm
+ hsize = 3.7cm
+ vshift = 4cm
+ hpos = rf
+
+\setarea{showdate}
+ top = 2cm
+ hshift = 7cm
+ hshift* = 4cm
+ vshift = 6cm
+
+\setarea{showall}
+ visible = step
+ height = \pdfpageheight
+ hshift = 3cm
+ left = 8cm
+ hpos = rf
+ background = lightgrey
+
+\newcolor{tblack}{grey}[.9]{0}
+\setarea{warning}
+ hshift* vshift* = 1cm
+ right = 3cm
+ frame = "width=1cm, corner=round"
+ foreground = white
+ background = tblack
+ hpos = ff
+ vpos = center
+ visible = step
+ parskip = \baselineskip
+
+
+
+
+
+\slide[The Job]
+
+\createbookmark{1.1}{%
+ This bookmark has been created just
+ to show the menutext attribute above;
+ it is also probably the longest bookmark
+ ever created. It was done with the createbookmark
+ command, of course.
+ }
+
+\position{title}{\Title\par\Author\par\Date}
+
+\step[off=all]
+ \position{showtitle}
+ {That's the title, set in the \Attribute{title} attribute
+ of the \Parameter{job} parameter and stored in \com\Title.
+ (Since it includes an italic command, an alternative one
+ has been declared in \Attribute{pdftitle}, so it appears
+ correctly. Look in the document's properties.)}
+
+\step[off=all]
+\position{showauthor}
+ {That's \Attribute{author}, again in
+ the \Parameter{job} parameter, and then in \com\Author;
+ \Attribute{pdfauthor} can be used to define
+ an alternative version.}
+
+\step[off=all]
+\position{showdate}
+ {That's the \Attribute{date} attribute, still in \Parameter{job},
+ and stored as \com\Date.
+ In this document, it hasn't been specified, so it's
+ automatically created with the format shown here.}
+
+\step[all]
+\position{showall}[,12cm]
+ {That's your PDF reader's background, whose color
+ you set with \Attribute{background} in the \Parameter{job} parameter
+ (how surprising).}
+
+\step
+\position{showall}[-10cm,9cm]
+ {And these are navigation commands, which take an argument
+ and create a clickable hbox with it. Below is
+ a symbol drawn with \com\newsymbol, which displays
+ the bookmark pop-up menu when clicked because it's
+ the argument to \com\showbookmarks\ (note the value
+ of \Attribute{submenutext} from the \Parameter{job} parameter).
+ This material is positioned here on every slide thanks
+ to the \Attribute{everyslide} attribute of the \Parameter{slide} parameter,
+ using \com\position.}
+
+\step
+\position{warning}{%
+ {\titlefont warning}
+
+ \kern\baselineskip
+ This visual documentation isn't exhaustive, and doesn't
+ show all there is to know in \ital{Lecturer}. It's for
+ instance a bit light on navigation, because navigation
+ commands aren't the more visual things on earth. The
+ reference remains \tcode{lecturer-doc.pdf}.
+
+ It says nothing either on what a good presentation is,
+ which I don't know, except you probably spend more time
+ drawing beautiful proportions between elements than
+ devising special effects. Unlike this doc. There are
+ more succesful example presentations distributed with \ital{Lecturer}.
+
+ Anyway, since we're at it, this super-area has a transparent
+ background defined with \com\newcolor, its \Attribute{hshift*}
+ and \Attribute{vshift*} are \Value{1cm}, (thus setting \Attribute{hshift}
+ and \Attribute{vshift} automatically to the same values), \Attribute{right} is
+ \Value{1cm} (hence \Attribute{left} too), \Attribute{parskip}
+ is \string\baselineskip, its \Attribute{hpos}
+ is \Value{ff} and \Attribute{vpos} is \Value{center}.
+ The \Attribute{frame} has a width of \Value{1cm},
+ with \Value{round} \Attribute{corner}s. Finally the value to
+ \Attribute{visible} is \Value{step}, that's why the area shows up
+ only right now, with its content.
+
+ Barring personal macros for verbatim text and font selection,
+ all you see here has been done with \ital{Lecturer}. Even the arrows on
+ \goto{dimensions}{the slide about dimensions} are areas without
+ width, with symbols as heads. (In the previous sentence, the
+ phrase \goto{dimensions}{\ital{the slide about dimensions}} sends to the said slide
+ when clicked, because it is the argument of a \com\goto command
+ referring to the value of the \Attribute{anchor} attribute of
+ this slide.)
+
+ The fonts used in this documentation are Chaparral, Lucida Typewriter,
+ and Centaur for the example text on \goto{dimensions}{the slide about dimensions},
+ which Centaur is out of sync with the text displayed but I couldn't resist.
+ }
+
+
+\endslide
+
+
+
+
+\let\Doexample\doexample
+\let\doexample\doexamplenogroup
+\let\exampleskip\relax
+
+
+\def\Mystep[#1]{%
+ \mystep[#1]
+ {\oldcodefont
+ \string\mystep
+ \reverse\iffemptystring{#1}
+ {{\setcatcodes{\\\~=12}[\usecolor{attribute}{\scantextokens{#1}}]}}
+ }%
+ \verb
+ }
+
+
+
+
+\slide[Self-describing Step, font=\codefont, vpos = center]
+
+\Example
+\setstep\mystep
+ vskip = \baselineskip
+ everyvstep = $\bullet$~
+ font = \rm
+
+\newimage{universe}[,1cm]{universe.jpg}
+\Example/
+\let\oldcodefont\codefont
+\let\codefont\mainfont
+\setcatcodes{|=0,<=1,>=2}
+
+\kern2\baselineskip
+
+\Mystep[] "This step is normal." \Mystep[] "This one too. And horizontal. |gotoA<hyperjump><|oldcodefont\gotoA{hyperjump}{Here.}>"
+
+\Mystep[A] "Let's jump!"
+\Mystep[font=\it] "Phew."
+
+\Mystep[visible=true, left=1cm] "I'm already on the screen."
+
+\Mystep[lovely, color=rgb .5 0 .5, on=A, off=B] "Lovely!"
+
+\Mystep[B] "Get off with your color!
+<|oldcodefont|showorhide<toggle=lovely><\showorhide{|usecolor<attribute><toggle=lovely>}{Color or not?}>>"
+
+\Mystep[] "<|oldcodefont\createbookmark[bold,1 0 0]{1.1}{Bookmark created on slide \slidetitle}>"
+\createbookmark[bold,1 0 0]{1.1}{Bookmark created on slide \slidetitle}
+
+\Mystep[] "And the universe appeared: <|oldcodefont\useimage{|useimage<universe>}>."
+
+\Mystep[] "The universe ain't what it used to be. |gotoB<hyperjump><|oldcodefont\gotoB{hyperjump}{There.}>"
+
+\endslide
+
+
+\let\codefont\oldcodefont
+
+
+
+
+
+
+
+
+
+
+
+
+\def\valuebox#1#2#3#4{\hbox{\showorhide{on = #3, off = #4}{#1}\kern1em\bold{#2}}}
+\def\Valuebox#1#2#3#4{\hbox{\bold{#1}\kern1em\showorhide{on = #3, off = #4}{#2}}}
+
+
+\slide[Areas in Steps, vpos=top, top=.5cm, bottom=8cm, scale=true]
+
+\step[scaled,visible=true]
+\position{controlbar}[,]{%
+ \hbox{\Attribute{scale}}
+ \Valuebox{true}{false}{unscaled}{scaled}
+ }
+
+\Example
+\showgrid[11cm,8cm]{.5cm}
+\showgrid[11cm,8cm]{1cm}[red]
+
+\setarea{one two three}
+ visible = step
+ width height = 8cm
+ right bottom = 1cm
+ topskip = 0cm
+ foreground = white
+
+\setarea{one two}
+ hshift* = 0cm
+
+\setarea{three}
+ hshift* vshift = 8cm
+ background = blue
+ hpos = rf
+
+\setarea{one}
+ background = red
+ vpos = bottom
+
+\setarea{two}
+ background = "cmyk 1 0 1 0"
+ vshift = 8cm
+
+\step\position{one}{ONE}
+\step\position{two}{TWO}
+\step\position{three}{THREE}
+\Example/
+
+\setarea{unscaled}
+ hshift = 3.5cm
+ width height = 8cm
+ vshift = 0cm
+ top = .5cm
+ baselineskip = 12pt
+ topskip = 12pt
+ vpos = top
+ visible = step
+
+\step[unscaled, on=]
+\position{unscaled}{{\typesetexample}}
+\position{controlbar}[,]{%
+ \hbox{\Attribute{scale}}
+ \valuebox{true}{false}{scaled}{unscaled}
+ }
+\step
+\position{two}{\tcode{\string\position$\{$two$\}\{$this$\}$}}
+\step
+\position{two}{\tcode{\string\position$\{$two$\}\{$and this$\}$}}
+\step
+\position{two}[1cm,5cm]{\tcode{\string\position$\{$two$\}$[1cm,5cm]$\{$and that$\}$}}
+\endslide
+
+
+
+
+
+
+\hidegrids
+
+
+
+
+\setparameter slide:
+ top = 3cm
+ left = 7cm
+ right = 4cm
+ vpos = top
+ vsize = "19\baselineskip"
+
+% An empty value for "on" makes the step not
+% a step at all, but it can be switched on and off.
+\setparameter step: on = ""\par
+
+\setarea{text bordermiter borderbevel borderround}
+ hshift = "\pdfhorigin-1cm"
+ hshift* = 3cm
+ vshift = 2cm
+ vshift* = 4cm
+ background = "grey .8"
+ visible = step
+
+\setarea{bordermiter borderbevel borderround}
+ frame = "width = 1cm, color = grey .9"
+
+\setarea{bordermiter} frame_corner = miter\par
+\setarea{borderbevel} frame_corner = bevel\par
+\setarea{borderround} frame_corner = round\par
+
+\setarea{authorff authorfr authorrf authorrr}
+ vshift* = 1cm
+ height = 2cm
+ hshift* = 5cm
+ width = 4cm
+ font = \centaur
+ visible = step
+ parindent = 0pt
+
+\setarea{authorff} hpos = ff\par
+\setarea{authorrf} hpos = rf\par
+\setarea{authorrr} hpos = rr\par
+
+\newsymbol\ltriangle[.1cm, padding=0pt]{% The color must be specified, otherwise
+ color black, 1 .5, + 0 -1, fill % the aera's foerground will be used.
+ }
+\newsymbol\rtriangle[.1cm, padding=0pt]{%
+ color black, move 1 0, + -1 .5, + 0 -1, fill
+ }
+\newsymbol\ttriangle[.1cm, padding=0pt]{%
+ color black, move -.5 0, + 1 0, + -.5 1, fill
+ }
+\newsymbol\btriangle[.1cm, padding=0pt]{%
+ color black, .5 1, + -1 0, fill
+ }
+
+\hfuzz=1cm
+\def\Hline{%
+ \ifnext*{\gobbleoneand{\hLine{\baselineskip}}}{\hLine{-.15cm}}%
+ }
+\def\hLine#1#2 #3,#4,#5,#6{%
+ \setarea{hline#2}
+ hshift = "\pdfhorigin+#3"
+ width = "#4"
+ vshift = "#5"
+ height = 0pt
+ topskip = 0pt
+ frame = "width = .15pt, color = black"
+ hpos = ff
+ font = \mainfont
+ parindent = 0pt
+ foreground = attribute
+ visible = step
+ \par\position{hline#2}{\quitvmode\ltriangle\hfill\rtriangle}%
+ \position{hline#2}[0pt,#1]{\hfill#6\hfill\kern0pt}%
+ }
+
+\def\Vline{%
+ \ifnext*{\gobbleoneand{\vLine{rf}}}{\vLine{fr}}%
+ }
+\def\vLine#1#2 #3,#4,#5,#6{%
+ \setarea{vline#2}
+ vshift = "#3"
+ height = "#4"
+ hshift = "\pdfhorigin+#5"
+ width = 0pt
+ hsize = 3cm
+ topskip = .1cm
+ frame = "width = .15pt, color = black"
+ vpos = center
+ font = \mainfont
+ hpos = #1
+ baselineskip = 0pt
+ parindent = 0pt
+ foreground = attribute
+ visible = step
+ \par
+ \position{vline#2}{\ttriangle\vfill}%
+ \position{vline#2}[\iffstring{#1}{rf}{-3cm-}.3em,.1cm]{#6}%
+ \position{vline#2}{\vfill\btriangle}%
+ }
+
+
+
+
+
+\slide[Main Dimensions, anchor=dimensions]
+
+
+\Hline*X1 0cm, \hsize, 11.3cm, {hsize}
+\Vline X1 3cm, 19\baselineskip, \hsize+.3cm, {vsize}
+\Hline X2 0cm, 1cm, 2.7cm, {parindent}
+\Vline*X2 3cm, \baselineskip, -.3cm, {topskip}
+\Vline*X3 3cm+5\baselineskip, \baselineskip, -.3cm, {baselineskip}
+\Vline X4 3cm+11\baselineskip, \baselineskip, 5.5cm, {parskip}
+
+\step[slidedim, visible=true]
+\Hline S1 -4cm, 16cm, \pdfpageheight-.5cm, {width}
+\Vline*S1 0cm, \pdfpageheight, \hsize+3.5cm, {height}
+\Hline S2 -4cm, 4cm, 10cm, {left}
+\Vline S2 0cm, \pdfvorigin, 7cm, {top}
+\Hline S3 8cm, 4cm, 5cm, {right}
+\Vline*S3 11cm, 5cm, 1cm, {bottom}
+
+\position{controlbar}[0cm,2.5cm]{%
+ \showorhide{ on = areadim bordermiter, off = slidedim}{\Instruction{Show area}}}
+
+
+\step[maincontrol, visible=true]
+\position{controlbar}[1.2cm,3cm]{%
+ \hbox{\Attribute{vpos}}
+ \showorhide{on = top topcontrol, off = maincontrol center bottom centercontrol bottomcontrol}{top}
+ \showorhide{on = center centercontrol, off = maincontrol top bottom topcontrol bottomcontrol}{center}
+ \showorhide{on = bottom bottomcontrol, off = maincontrol top center topcontrol centercontrol}{bottom}
+ \showorhide{on = top bottom center maincontrol, off = topcontrol centercontrol bottomcontrol}{\Instruction{reset}}
+ }
+
+\step[topcontrol]
+\position{controlbar}[1.2cm,3cm]{%
+ \hbox{\Attribute{vpos}}
+ \showorhide{on = top topcontrol, off = maincontrol center bottom centercontrol bottomcontrol}{\bold{top}}
+ \showorhide{on = center centercontrol, off = maincontrol top bottom topcontrol bottomcontrol}{center}
+ \showorhide{on = bottom bottomcontrol, off = maincontrol top center topcontrol centercontrol}{bottom}
+ \showorhide{on = top bottom center maincontrol, off = topcontrol centercontrol bottomcontrol}{\Instruction{reset}}
+ }
+
+\step[centercontrol]
+\position{controlbar}[1.2cm,3cm]{%
+ \hbox{\Attribute{vpos}}
+ \showorhide{on = top topcontrol, off = maincontrol center bottom centercontrol bottomcontrol}{top}
+ \showorhide{on = center centercontrol, off = maincontrol top bottom topcontrol bottomcontrol}{\bold{center}}
+ \showorhide{on = bottom bottomcontrol, off = maincontrol top center topcontrol centercontrol}{bottom}
+ \showorhide{on = top bottom center maincontrol, off = topcontrol centercontrol bottomcontrol}{\Instruction{reset}}
+ }
+
+\step[bottomcontrol]
+\position{controlbar}[1.2cm,3cm]{%
+ \hbox{\Attribute{vpos}}
+ \showorhide{on = top topcontrol, off = maincontrol center bottom centercontrol bottomcontrol}{top}
+ \showorhide{on = center centercontrol, off = maincontrol top bottom topcontrol bottomcontrol}{center}
+ \showorhide{on = bottom bottomcontrol, off = maincontrol top center topcontrol centercontrol}{\bold{bottom}}
+ \showorhide{on = top bottom center maincontrol, off = topcontrol centercontrol bottomcontrol}{\Instruction{reset}}
+ }
+
+\step[areadim]
+\position{text}{}
+\position{controlbar}[0cm,2.5cm]{%
+ \showorhide{ on = slidedim, off = areadim bordermiter borderbevel borderround}{\Instruction{Show slide}}}
+\Hline*A0 -4cm, 3cm, 8cm, {hshift}
+\Vline*A0 0cm, 2cm, 2cm, {vshift}
+\Hline*A0a 9cm, 3cm, 10cm, {\kern4em hshift*}
+\Vline*A0a 12cm, 4cm, 2cm, {vshift*}
+\Hline*A1 -1cm, \hsize+2cm, \pdfpageheight-1.5cm, {width}
+\Vline A1 2cm, 10cm, \hsize+2.5cm, {height}
+\Hline A2 -1cm, 1cm, 10cm, {left}
+\Vline A2 2cm, 1cm, 7cm, {top}
+\Hline A3 8cm, 1cm, 5cm, {\kern1em right}
+\Vline*A3 11cm, 1cm, 1cm, {bottom}
+\Hline*A4 -2cm, 1cm, 12cm, {frame_width}
+
+\step[bordermiter]
+\position{controlbar}[0cm,6cm]{%
+ \hbox{\Attribute{frame_corner}}
+ \showorhide{on = bordermiter, off = borderbevel borderround}{\bold{miter}}
+ \showorhide{on = borderbevel, off = bordermiter borderround}{bevel}
+ \showorhide{on = borderround, off = bordermiter borderbevel}{round}
+ }
+\position{bordermiter}{}
+
+
+\step[borderbevel]
+\position{controlbar}[0cm,6cm]{%
+ \hbox{\Attribute{frame_corner}}
+ \showorhide{on = bordermiter, off = borderbevel borderround}{miter}
+ \showorhide{on = borderbevel, off = bordermiter borderround}{\bold{bevel}}
+ \showorhide{on = borderround, off = bordermiter borderbevel}{round}
+ }
+\position{borderbevel}{}
+
+\step[borderround]
+\position{controlbar}[0cm,6cm]{%
+ \hbox{\Attribute{frame_corner}}
+ \showorhide{on = bordermiter, off = borderbevel borderround}{miter}
+ \showorhide{on = borderbevel, off = bordermiter borderround}{bevel}
+ \showorhide{on = borderround, off = bordermiter borderbevel}{\bold{round}}
+ }
+\position{borderround}{}
+
+
+\step[ff, visible=true]
+\position{controlbar}[0cm,3cm]{%
+ \hbox{\Attribute{hpos}}
+ \showorhide{on = ff, off = fr rf rr}{\bold{ff}}
+ \showorhide{on = fr, off = ff rf rr}{fr}
+ \showorhide{on = rf, off = ff fr rr}{rf}
+ \showorhide{on = rr, off = ff fr rf}{rr}
+ }
+\position{authorff}{Savinien Cyrano de Bergerac, Etats et Empires de la Lune, c.1650}
+\step[fr]
+\position{controlbar}[0cm,3cm]{%
+ \hbox{\Attribute{hpos}}
+ \showorhide{on = ff, off = fr rf rr}{ff}
+ \showorhide{on = fr, off = ff rf rr}{\bold{fr}}
+ \showorhide{on = rf, off = ff fr rr}{rf}
+ \showorhide{on = rr, off = ff fr rf}{rr}
+ }
+\position{authorfr}{Savinien Cyrano de Bergerac, Etats et Empires de la Lune, c.1650}
+\step[rf]
+\position{controlbar}[0cm,3cm]{%
+ \hbox{\Attribute{hpos}}
+ \showorhide{on = ff, off = fr rf rr}{ff}
+ \showorhide{on = fr, off = ff rf rr}{fr}
+ \showorhide{on = rf, off = ff fr rr}{\bold{rf}}
+ \showorhide{on = rr, off = ff fr rf}{rr}
+ }
+\position{authorrf}{Savinien Cyrano de Bergerac, Etats et Empires de la Lune, c.1650}
+\step[rr]
+\position{controlbar}[0cm,3cm]{%
+ \hbox{\Attribute{hpos}}
+ \showorhide{on = ff, off = fr rf rr}{ff}
+ \showorhide{on = fr, off = ff rf rr}{fr}
+ \showorhide{on = rf, off = ff fr rr}{rf}
+ \showorhide{on = rr, off = ff fr rf}{\bold{rr}}
+ }
+\position{authorrr}{Savinien Cyrano de Bergerac, Etats et Empires de la Lune, c.1650}
+
+\parfillskip=0pt
+\step[top, visible=true,font=\centaur]
+\quitvmode\kern1cm La lune était en son plein, le ciel était découvert, et neuf heures
+du soir étaient sonnées lorsque nous revenions d'une maison proche de Paris,
+quatre de mes amis et moi. Les diverses pensées que nous donna la vue
+de cette boule de safran nous défrayèrent sur le chemin. Les yeux noyés
+dans ce grand astre, tantôt l'un le prenait pour une lucarne du ciel
+par où l'on en\-%
+%
+\step[center, visible=true,font=\centaur]
+trevoyait la gloire des bienheureux ; tantôt l'autre protestait
+que c'était la platine où Diane dresse les rabats d'Apollon ;
+tantôt un autre s'écriait que ce pourrait bien être le soleil lui-même,
+qui s'étant au soir dépouillé de ses rayons regardait par un trou
+ce qu'on faisait au monde quand il n'y était plus.\hfil\kern0pt
+
+\kern\baselineskip
+\step[bottom, visible=true,font=\centaur]
+«~Et moi, dis-je, qui souhaite mêler mes enthousiasmes aux vôtres,
+je crois sans m'amuser aux imaginations pointues dont vous chatouillez
+le temps pour le faire marcher plus vite, que la lune est un monde comme celui-ci,
+à qui le nôtre sert de lune.~»
+La compagnie me régala d'un grand éclat de rire.
+«~Ainsi peut-être, leur dis-je, se moque-t-on maintenant dans la lune,
+de quelque autre, qui soutient que ce globe-ci est un monde.~»
+Mais j'eus beau leur alléguer
+%que Pythagore, Epicure,
+%Démocrite et, de notre âge, Copernic et Kepler, avaient
+
+\endslide
+
+
+
+
+
+
+
+\setarea{code result}
+ topskip = 1cm
+ everyposition = "\vskip4pt"
+
+\setarea{code}
+ hshift = 3cm
+ width = 11cm
+
+\setarea{result}
+ hshift* = 0cm
+ width = 6cm
+
+
+\def\processexample{%
+ \position{code}\typesetexample
+ \doexample
+ \position{result}{\quitvmode\lastsymbol}
+ }
+
+\slide[Symbols]
+\def\lastsymbol{\square}
+\Example
+\newsymbol\square[1cm, padding=.15cm]{%
+ pen .3,
+ 1 0, + 0 1, + -1 0, close, stroke,
+ color red, move 1.5 0, + 1 0, + 0 1, + -1 0, fill,
+ color green, move 3 0, + 1 0, + 0 1, + -1 0, paint,
+ }
+\Example/
+
+\position{result}{\kern.5cm}
+
+\def\lastsymbol{\triangle}
+\Example
+\newsymbol\triangle[1cm]{%
+ color rgb .8 0 0, 1 .5, + -1 .5, fill,
+ }
+\Example/
+
+\position{result}{\kern.1cm}
+
+\def\lastsymbol{\spirale}
+\Example
+\newsymbol\spirale[.1mm]{%
+ circle ur 100, circle rd 95, color red, stroke,
+ circle dl 90, circle lu 85, color black, stroke,
+ circle ur 80, circle rd 75, color red, stroke,
+ circle dl 70, circle lu 65, color black
+% stroke automatically added if there remains a path.
+ }
+\Example/
+
+\position{result}{\kern.3cm}
+
+\def\lastsymbol{\diamond}
+\Example
+\newsymbol\diamond[.5mm]{%
+ color red, move 5 0, + 5 7, + 5 -7, + -5 -7, fill
+ }
+\Example/
+
+\position{result}{\kern.5cm}
+
+\def\lastsymbol{\trystero}
+\Example
+\newsymbol\trystero[.5cm]{%
+ pen .1, move 2 2,
+ circle ld 1, circle dr 1, circle ru 1, circle ul 1, stroke,
+ move -.75 2, + 4.5 0, stroke,
+ + 1.2 1.2, + -0 -2.4, close,
+ move + 0 2, + .4 .4, + 0 -2.4, + -.4 .4,
+ }
+\Example/
+\endslide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\setarea{
+ fullshade1 fullshade2 fullshade3 fullshade4 fullshade5 fullshade6 fullshade7 fullshade8
+ fullshade9 fullshade10 fullshade11 fullshade12 fullshade13 fullshade14 fullshade15 fullshade16
+ mask}
+ hshift = 3cm
+ visible = step
+
+\setarea{mask}
+ background = white
+
+
+\setarea{
+ shade1 shade2 shade3 shade4 shade5 shade6 shade7 shade8
+ shade9 shade10 shade11 shade12 shade13 shade14 shade15 shade16
+ border}
+ hshift = 4cm
+ hshift* = 2cm
+ vshift = 1cm
+ vshift* = 11cm
+ visible = step
+
+\setarea{
+ shade1b shade2b shade3b shade4b shade5b shade6b shade7b shade8b
+ shade9b shade10b shade11b shade12b shade13b shade14b shade15b shade16b
+ borderb}
+ hshift = 14cm
+ hshift* = 2cm
+ vshift = 6cm
+ vshift* = 2cm
+ visible = step
+
+\setarea{border borderb}
+ frame_width = .1pt
+ frame_color = white
+
+
+\newshade{shade1}
+ fixed = true
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+
+\setarea{shade1 shade1b fullshade1 fullshade2 fullshade9 fullshade10} background = shade1\par
+
+\newshade{shade2}
+ fixed = false
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+
+\setarea{shade2 shade2b} background = shade2\par
+
+\newshade{shade3}
+ fixed = true
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+ angle = -45
+
+\setarea{shade3 shade3b fullshade3 fullshade4 fullshade11 fullshade12} background = shade3\par
+
+\newshade{shade4}
+ fixed = false
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+ angle = -45
+
+\setarea{shade4 shade4b} background = shade4\par
+
+\newshade{shade5}
+ fixed = true
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+ speed = 2
+
+\setarea{shade5 shade5b fullshade5 fullshade6 fullshade13 fullshade14} background = shade5\par
+
+\newshade{shade6}
+ fixed = false
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+ speed = 2
+
+\setarea{shade6 shade6b} background = shade6\par
+
+\newshade{shade7}
+ fixed = true
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+ angle = -45
+ speed = 2
+
+\setarea{shade7 shade7b fullshade7 fullshade8 fullshade15 fullshade16} background = shade7\par
+
+\newshade{shade8}
+ fixed = false
+ width = "\pdfpagewidth-3cm"
+ height = \pdfpageheight
+ angle = -45
+ speed = 2
+
+\setarea{shade8 shade8b} background = shade8\par
+
+\newshade{shade9}
+ fixed = true
+
+\setarea{shade9 shade9b} background = shade9\par
+
+\newshade{shade10}
+ fixed = false
+
+\setarea{shade10 shade10b} background = shade10\par
+
+\newshade{shade11}
+ fixed = true
+ angle = -45
+
+\setarea{shade11 shade11b} background = shade11\par
+
+\newshade{shade12}
+ fixed = false
+ angle = -45
+
+\setarea{shade12 shade12b} background = shade12\par
+
+\newshade{shade13}
+ fixed = true
+ speed = 2
+
+\setarea{shade13 shade13b} background = shade13\par
+
+\newshade{shade14}
+ fixed = false
+ speed = 2
+
+\setarea{shade14 shade14b} background = shade14\par
+
+\newshade{shade15}
+ fixed = true
+ angle = -45
+ speed = 2
+
+\setarea{shade15 shade15b} background = shade15\par
+
+\newshade{shade16}
+ fixed = false
+ angle = -45
+ speed = 2
+
+\setarea{shade16 shade16b} background = shade16\par
+
+
+
+\setarea{comment}
+ hshift = 4cm
+ width = 4cm
+ vshift = 10cm
+ vshift* = 2cm
+ font = \mainfont
+ foreground = attribute
+
+\def\comment{\position{comment}[0pt,0pt]}
+
+
+
+
+
+
+
+\slide[Shades]
+
+\position{border}{} \position{borderb}{}
+
+\step[mask, visible=true]
+\position{mask}{}
+\position{controlbar}[0cm,4cm]{\showorhide{toggle = mask nomask}{\Instruction{Show slide's shade}}}
+
+\step[nomask]
+\position{controlbar}[0cm,4cm]{\showorhide{toggle = mask nomask}{\Instruction{Hide slide's shade}}}
+
+
+
+
+
+\step[shade1, visible=true]
+\position{shade1}{} \position{shade1b}{} \position{fullshade1}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade2}{shade1}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade3}{shade1}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade5}{shade1}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade9}{shade1}
+ }
+\comment{The areas are open windows on the underlying shade,
+which goes from black at the top of the slide to white at
+the bottom.}
+
+\step[shade2]
+\position{shade2}{} \position{shade2b}{} \position{fullshade2}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade1}{shade2}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade4}{shade2}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade6}{shade2}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade10}{shade2}
+ }
+\comment{The shade goes from black at the top of each
+areas to white somewhere at the bottom of its height;
+the areas show the same shade at different position; the
+area above is almost totally black because it displays the
+shade's upper part, and the shade takes its time to reach
+its bottom.}
+
+\step[shade3]
+\position{shade3}{} \position{shade3b}{} \position{fullshade3}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade4}{shade3}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade1}{shade3}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade7}{shade3}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade11}{shade3}
+ }
+\comment{The shade goes from black at the top right
+corner to white at the bottom left one; the areas display
+the parts they cover.}
+
+\step[shade4]
+\position{shade4}{} \position{shade4b}{} \position{fullshade4}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade3}{shade4}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade2}{shade4}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade8}{shade4}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade12}{shade4}
+ }
+\comment{The shade makes an angle of 45 degrees from
+its top right corner and goes to white at its bottom left one;
+it is positioned at the top right corner of the areas, which
+are thus almost entirely black.}
+
+\step[shade5]
+\position{shade5}{} \position{shade5b}{} \position{fullshade5}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade6}{shade5}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade7}{shade5}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade1}{shade5}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade13}{shade5}
+ }
+\comment{The shade goes twice faster. It reaches white at its middle;
+since it is fixed, the area on the right has nothing much to show.}
+
+\step[shade6]
+\position{shade6}{} \position{shade6b}{} \position{fullshade6}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade5}{shade6}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade8}{shade6}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade2}{shade6}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade14}{shade6}
+ }
+\comment{The shade goes twice faster from its top to its
+bottom, reaching white at half its height; the areas display
+its upper part corner only.}
+
+\step[shade7]
+\position{shade7}{} \position{shade7b}{} \position{fullshade7}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade8}{shade7}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade5}{shade7}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade3}{shade7}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade15}{shade7}
+ }
+\comment{The shade runs at 45 degrees from its upper right
+corner and reaches white on its diagonal, because it goes
+twice faster than normal; this diagonal visibly crosses the
+areas, which seem really connected.}
+
+
+\step[shade8]
+\position{shade8}{} \position{shade8b}{} \position{fullshade8}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade7}{shade8}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade6}{shade8}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade4}{shade8}
+ \hbox{\Attribute{height \& width}}
+ \Valuebox{true}{false}{shade16}{shade8}
+ }
+\comment{The shade makes a vanishing triangle
+from its upper right corner, which is the part
+both areas display.}
+
+
+
+
+
+
+
+
+
+
+
+\step[shade9]
+\position{shade9}{} \position{shade9b}{} \position{fullshade9}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade10}{shade9}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade11}{shade9}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade13}{shade9}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade1}{shade9}
+ }
+\comment{The area is fixed at the top of the slide,
+but since it has no dimensions it takes those of
+the areas in which it is painted; hence the area
+on the right shows its own bottom.}
+
+
+\step[shade10]
+\position{shade10}{} \position{shade10b}{} \position{fullshade10}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade9}{shade10}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade12}{shade10}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade14}{shade10}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade2}{shade10}
+ }
+\comment{The shade adapts to the areas' shapes, and goes
+ from black at their tops to white at their bottom.}
+
+
+\step[shade11]
+\position{shade11}{} \position{shade11b}{} \position{fullshade11}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade12}{shade11}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade9}{shade11}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade15}{shade11}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade3}{shade11}
+ }
+\comment{The shade is a replica of the areas it paints in the
+top right corner of the shade, hence the varying angles;
+the result is quite unpredictable.}
+
+\step[shade12]
+\position{shade12}{} \position{shade12b}{} \position{fullshade12}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade11}{shade12}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade10}{shade12}
+ \hbox{\Attribute{speed}}
+ \Valuebox{1}{2}{shade16}{shade12}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade4}{shade12}
+ }
+\comment{The shade goes from each area's top right corner
+to its bottom left one; in an ideal world where all rectangles
+are square, it is slanted by and angle of 45 degrees.}
+
+\step[shade13]
+\position{shade13}{} \position{shade13b}{} \position{fullshade13}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade14}{shade13}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade15}{shade13}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade9}{shade13}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade5}{shade13}
+ }
+\comment{The shade runs a distance the height of the areas
+it paints, but is still fixed at the top of the slide; because
+of its speed, the area on the right is totally blanck.}
+
+\step[shade14]
+\position{shade14}{} \position{shade14b}{} \position{fullshade14}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade13}{shade14}
+ \hbox{\Attribute{angle}}
+ \valuebox{-45}{90}{shade16}{shade14}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade10}{shade14}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade6}{shade14}
+ }
+\comment{The shade fills the areas down to their
+middle, because it goes twice faster than normal. The areas
+look like scaling of each other.}
+
+\step[shade15]
+\position{shade15}{} \position{shade15b}{} \position{fullshade15}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \Valuebox{true}{false}{shade16}{shade15}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade13}{shade15}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade11}{shade15}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade7}{shade15}
+ }
+\comment{The area on the right can't catch
+itself, it goes too fast; speed, angle and length
+vary according to the area painted, but not the
+position; thus the result is totally unpredictable.}
+
+\step[shade16]
+\position{shade16}{} \position{shade16b}{} \position{fullshade16}{}
+\position{controlbar}[0cm,0cm]{%
+ \hbox{\Attribute{fixed}}
+ \valuebox{true}{false}{shade15}{shade16}
+ \hbox{\Attribute{angle}}
+ \Valuebox{-45}{90}{shade14}{shade16}
+ \hbox{\Attribute{speed}}
+ \valuebox{1}{2}{shade12}{shade16}
+ \hbox{\Attribute{height \& width}}
+ \valuebox{true}{false}{shade8}{shade16}
+ }
+\comment{The areas show their diagonals;
+the variation in angles is quite blatant, because
+the shade adapts to their dissimilar shapes and
+increase the differences with speed.}
+
+
+
+\endslide
+
+
+
+
+
+
+
+\setarea{split blinds box wipe dissolve glitter fly push cover uncover fade}
+ hshift = 3cm
+ foreground = white
+ visible = step
+ hpos = rr
+ vpos = center
+
+
+\setarea{split box dissolve fly cover fade}
+ background = attribute
+
+\setarea{blinds wipe glitter push uncover}
+ background = value
+
+\setparameter step:
+ on = here
+
+\setparameter slide:
+ top = 0cm
+ bottom = 0cm
+ left = 3cm
+ right = 0cm
+ hpos = rr
+ vpos = center
+
+
+\slide[Default transitions]
+
+\step[visible=true, off=next]
+Let's \ital{split}!
+
+\step[next, transition=split]
+\position{split}{Let's \ital{blinds}}
+
+\step[transition=blinds]
+\position{blinds}{Let's \ital{box}}
+
+\step[transition=box]
+\position{box}{Let's \ital{wipe}}
+
+\step[transition=wipe]
+\position{wipe}{Let's \ital{dissolve}}
+
+\step[transition=dissolve]
+\position{dissolve}{Let's \ital{glitter}}
+
+\step[transition=glitter]
+\position{glitter}{Let's \ital{fly}}
+
+\step[transition=fly]
+\position{fly}{Let's \ital{push}}
+
+\step[transition=push]
+\position{push}{Let's \ital{cover}}
+
+\step[transition=cover]
+\position{cover}{Let's \ital{uncover}}
+
+\step[transition=uncover]
+\position{uncover}{Let's \ital{fade}}
+\endslide
+
+
+
+
+
+
+\slide[right=0cm, font=\titlefont, transition=fade, background=lightgrey, everyslide=, bookmark=false]
+THE END
+\endslide
+
+
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/lecturer-doc.pdf b/macros/generic/lecturer/doc/lecturer-doc.pdf
new file mode 100644
index 0000000000..81bc0158f3
--- /dev/null
+++ b/macros/generic/lecturer/doc/lecturer-doc.pdf
@@ -0,0 +1,31560 @@
+%PDF-1.5
+%ÐÔÅØ
+4 0 obj <<
+/Length 35350
+>>
+stream
+.8 0 0 rg
+1 0 0 1 113.386 604.148 cm
+2 Tr
+1 0 0 1 -113.386 -604.148 cm
+BT
+/F105 59.77584 Tf 1 0 0 1 113.386 604.148 Tm [<002D>-387<0046>-388<0044>-387<0055>-388<0056>-387<0053>-388<0046>-387<0053>]TJ
+ET
+1 0 0 1 481.89 604.148 cm
+0 Tr
+0 g 0 G
+1 0 0 1 -481.89 -604.148 cm
+BT
+/F105 9.96264 Tf 1 0 0 1 390.848 580.238 Tm [<002200560055004900500053001B>-293<003100420056004D>-220<002A00540042004E0043004600530055>]TJ
+/F111 7.97011 Tf 1 0 0 1 385.844 568.282 Tm [<005D00440053005300440057004B0058005600570055004400230049005500480048001100490055>]TJ
+/F105 9.96264 Tf 1 0 0 1 407.226 556.327 Tm [<0025004200550046001B>-293<01E901F0001001EB01EC001001EB01E901EA01E9>]TJ
+1 0 0 1 431.944 544.372 Tm [<0037004600530054004A0050004F001B>-293<01EA000F01E9>]TJ
+/F63 9.96264 Tf 1.03 0 0 1 113.386 412.865 Tm [<002D>]TJ
+1.02 0 0 1 118.65 412.865 Tm [<00460044>]TJ
+1.03 0 0 1 126.414 412.865 Tm [<0055>]TJ
+1.02 0 0 1 129.954 412.865 Tm [<0056>]TJ
+1.03 0 0 1 134.903 412.865 Tm [<0053>]TJ
+1.02 0 0 1 138.638 412.865 Tm [<0046>]TJ
+1.03 0 0 1 142.743 412.865 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 148.721 412.865 Tm [<0044>]TJ
+1.03 0 0 1 152.816 412.865 Tm [<0053>]TJ
+1.02 0 0 1 156.664 412.865 Tm [<00460042>]TJ
+1.03 0 0 1 165.8 412.865 Tm [<0055>]TJ
+1.02 0 0 1 169.473 412.865 Tm [<00460054>-220<0051>]TJ
+1.03 0 0 1 185.617 412.865 Tm [<0053>]TJ
+1.02 0 0 1 189.465 412.865 Tm [<004600540046004F>]TJ
+1.03 0 0 1 208.254 412.865 Tm [<0055>]TJ
+1.02 0 0 1 211.928 412.865 Tm [<0042>]TJ
+1.03 0 0 1 216.541 412.865 Tm [<0055004A>]TJ
+1.02 0 0 1 222.945 412.865 Tm [<0050004F0054>-220<004E0042>]TJ
+1.03 0 0 1 252.929 412.865 Tm [<004A>]TJ
+1.02 0 0 1 255.658 412.865 Tm [<004F>]TJ
+1.03 0 0 1 261.329 412.865 Tm [<004D005A>]TJ
+1.02 0 0 1 270.938 412.865 Tm [<00430042005400460045>-220<0050004F>-221<0031>]TJ
+1.015 0 0 1 315.461 412.865 Tm [<0025>]TJ
+1.02 0 0 1 322.448 412.865 Tm [<0027>]TJ
+1.03 0 0 1 330.086 412.865 Tm [<0047>]TJ
+1.02 0 0 1 333.514 412.865 Tm [<00460042>]TJ
+1.03 0 0 1 342.649 412.865 Tm [<0055>]TJ
+1.02 0 0 1 346.323 412.865 Tm [<0056>]TJ
+1.03 0 0 1 351.688 412.865 Tm [<0053>]TJ
+1.02 0 0 1 355.536 412.865 Tm [<00460054>]TJ
+1.03 0 0 1 364.133 412.865 Tm [<000F>-299<002A0055>]TJ
+1.02 0 0 1 378.961 412.865 Tm [<0045005000460054004F>]TJ
+1.03 0 0 1 403.655 412.865 Tm [<00080055>]TJ
+1.02 0 0 1 411.643 412.865 Tm [<004E0042004F>]TJ
+1.03 0 0 1 430.179 412.865 Tm [<004A>]TJ
+1.02 0 0 1 432.908 412.865 Tm [<00510056>]TJ
+1.03 0 0 1 443.578 412.865 Tm [<004D>]TJ
+1.02 0 0 1 446.205 412.865 Tm [<0042>]TJ
+1.03 0 0 1 450.819 412.865 Tm [<0055>]TJ
+1.02 0 0 1 454.492 412.865 Tm [<0046>]TJ
+1.03 0 0 1 461.257 412.865 Tm [<0035>]TJ
+1 0 0 1 465.414 410.798 Tm [<0026>]TJ
+1.03 0 0 1 469.698 412.865 Tm [<00390008>]TJ
+1.02 0 0 1 477.815 412.865 Tm [<0054>]TJ
+1.03 0 0 1 113.386 400.91 Tm [<0055005A>]TJ
+1.02 0 0 1 121.8 400.91 Tm [<0051004600540046>]TJ
+1.03 0 0 1 140.224 400.91 Tm [<00550055004A>]TJ
+1.02 0 0 1 150.301 400.91 Tm [<004F0048>-218<0051>]TJ
+1.03 0 0 1 168.227 400.91 Tm [<0053>]TJ
+1.02 0 0 1 172.075 400.91 Tm [<00500044004600540054>]TJ
+1.03 0 0 1 196.19 400.91 Tm [<004A>]TJ
+1.02 0 0 1 198.919 400.91 Tm [<004F>-218<0042>-218<00440050004E0051>]TJ
+1.03 0 0 1 236.418 400.91 Tm [<004D>]TJ
+1.02 0 0 1 239.045 400.91 Tm [<0046>]TJ
+1.03 0 0 1 243.567 400.91 Tm [<0059>]TJ
+1.02 0 0 1 250.647 400.91 Tm [<00580042>]TJ
+1.03 0 0 1 262.171 400.91 Tm [<005A>-215<0055>]TJ
+1.02 0 0 1 272.801 400.91 Tm [<0050>-218<0048>]TJ
+1.03 0 0 1 284.884 400.91 Tm [<004A0057>]TJ
+1.02 0 0 1 292.468 400.91 Tm [<0046>]TJ
+1.03 0 0 1 299.206 400.91 Tm [<0055>]TJ
+1.02 0 0 1 302.879 400.91 Tm [<00490046>]TJ
+1.03 0 0 1 315.156 400.91 Tm [<004A>]TJ
+1.02 0 0 1 317.885 400.91 Tm [<004E0051>]TJ
+1.03 0 0 1 331.441 400.91 Tm [<0053>]TJ
+1.02 0 0 1 335.289 400.91 Tm [<004600540054>]TJ
+1.03 0 0 1 347.961 400.91 Tm [<004A>]TJ
+1.02 0 0 1 350.691 400.91 Tm [<0050004F>]TJ
+1.03 0 0 1 363.709 400.91 Tm [<0055>]TJ
+1.02 0 0 1 367.382 400.91 Tm [<00490042>]TJ
+1.03 0 0 1 377.534 400.91 Tm [<0055>]TJ
+1.02 0 0 1 383.424 400.91 Tm [<0054>]TJ
+1.03 0 0 1 387.499 400.91 Tm [<004D004A>]TJ
+1.02 0 0 1 392.855 400.91 Tm [<004500460054>-218<0042>]TJ
+1.03 0 0 1 413.576 400.91 Tm [<0053>]TJ
+1.02 0 0 1 417.424 400.91 Tm [<0046>-218<00430046>]TJ
+1.03 0 0 1 433.857 400.91 Tm [<004A>]TJ
+1.02 0 0 1 436.586 400.91 Tm [<004F0048>]TJ
+1.03 0 0 1 449.208 400.91 Tm [<004D>]TJ
+1.02 0 0 1 451.835 400.91 Tm [<0042>]TJ
+1.03 0 0 1 456.448 400.91 Tm [<005A>]TJ
+1.02 0 0 1 461.189 400.91 Tm [<0046>]TJ
+1.03 0 0 1 465.711 400.91 Tm [<0053>]TJ
+1.02 0 0 1 469.559 400.91 Tm [<00460045>]TJ
+1.03 0 0 1 479.376 400.91 Tm [<000D>]TJ
+1.02 0 0 1 113.386 388.955 Tm [<00430056>]TJ
+1.03 0 0 1 123.924 388.955 Tm [<0055>]TJ
+1.02 0 0 1 130.022 388.955 Tm [<005600540046>-238<0031>]TJ
+1.015 0 0 1 151.968 388.955 Tm [<0025>]TJ
+1.02 0 0 1 158.955 388.955 Tm [<0027>]TJ
+1.03 0 0 1 164.351 388.955 Tm [<0008>]TJ
+1.02 0 0 1 166.424 388.955 Tm [<0054>-238<00540050>]TJ
+1.03 0 0 1 182.13 388.955 Tm [<000E>]TJ
+1.02 0 0 1 185.362 388.955 Tm [<00440042>]TJ
+1.03 0 0 1 194.071 388.955 Tm [<004D004D>]TJ
+1.02 0 0 1 199.325 388.955 Tm [<00460045>-238<00500051>]TJ
+1.03 0 0 1 222.002 388.955 Tm [<0055004A>]TJ
+1.02 0 0 1 228.405 388.955 Tm [<0050004F0042>]TJ
+1.03 0 0 1 243.821 388.955 Tm [<004D>]TJ
+1.02 0 0 1 248.873 388.955 Tm [<00440050004F>]TJ
+1.03 0 0 1 263.77 388.955 Tm [<0055>]TJ
+1.02 0 0 1 267.444 388.955 Tm [<0046004F>]TJ
+1.03 0 0 1 277.636 388.955 Tm [<0055>-236<0055>]TJ
+1.02 0 0 1 287.408 388.955 Tm [<0050>-238<0051>]TJ
+1.03 0 0 1 300.269 388.955 Tm [<0053>]TJ
+1.02 0 0 1 304.117 388.955 Tm [<00500045005600440046>-238<0046>]TJ
+1.03 0 0 1 335.472 388.955 Tm [<0059>]TJ
+1.02 0 0 1 340.336 388.955 Tm [<00420044>]TJ
+1.03 0 0 1 349.045 388.955 Tm [<0055004D005A>-236<0055>]TJ
+1.02 0 0 1 366.185 388.955 Tm [<0049>]TJ
+1.03 0 0 1 371.723 388.955 Tm [<004A>]TJ
+1.02 0 0 1 374.452 388.955 Tm [<0054>]TJ
+1.03 0 0 1 378.527 388.955 Tm [<001B>-330<004D>]TJ
+1.02 0 0 1 387.056 388.955 Tm [<0042>]TJ
+1.03 0 0 1 391.67 388.955 Tm [<005A>]TJ
+1.02 0 0 1 396.411 388.955 Tm [<0046>]TJ
+1.03 0 0 1 400.933 388.955 Tm [<0053>]TJ
+1.02 0 0 1 404.781 388.955 Tm [<0054>]TJ
+1.03 0 0 1 408.856 388.955 Tm [<000F>-352<002A0055>]TJ
+1.02 0 0 1 424.414 388.955 Tm [<005800420054>-238<0050>]TJ
+1.03 0 0 1 447.569 388.955 Tm [<0053004A>]TJ
+1.02 0 0 1 454.146 388.955 Tm [<0048>]TJ
+1.03 0 0 1 458.882 388.955 Tm [<004A>]TJ
+1.02 0 0 1 461.611 388.955 Tm [<004F0042>]TJ
+1.03 0 0 1 471.895 388.955 Tm [<004D004D005A>]TJ
+1.005 0 0 1 113.386 377 Tm [<004E00460042004F>]TJ
+1.01 0 0 1 136.104 377 Tm [<0055>-220<0055>]TJ
+1.005 0 0 1 145.528 377 Tm [<0050>-221<00580050>]TJ
+1.01 0 0 1 164.668 377 Tm [<0053>]TJ
+1.005 0 0 1 168.442 377 Tm [<004C>-221<0058>]TJ
+1.01 0 0 1 182.466 377 Tm [<004A0055>]TJ
+1.005 0 0 1 188.745 377 Tm [<0049>-221<0051>]TJ
+1.01 0 0 1 201.647 377 Tm [<004D>]TJ
+1.005 0 0 1 204.223 377 Tm [<0042>]TJ
+1.01 0 0 1 208.769 377 Tm [<004A>]TJ
+1.005 0 0 1 211.445 377 Tm [<004F>]TJ
+1.01 0 0 1 219.252 377 Tm [<0035>]TJ
+1 0 0 1 223.296 374.932 Tm [<0026>]TJ
+1.01 0 0 1 227.58 377 Tm [<0039000D>]TJ
+1.005 0 0 1 238.191 377 Tm [<00430056>]TJ
+1.01 0 0 1 248.574 377 Tm [<0055>]TJ
+1.005 0 0 1 254.396 377 Tm [<0054>]TJ
+1.01 0 0 1 258.411 377 Tm [<004A>]TJ
+1.005 0 0 1 261.088 377 Tm [<004F00440046>-221<0058>]TJ
+1.01 0 0 1 284.193 377 Tm [<0053004A0055004A>]TJ
+1.005 0 0 1 296.922 377 Tm [<004F0048>]TJ
+1.01 0 0 1 309.394 377 Tm [<0047>]TJ
+1.005 0 0 1 312.755 377 Tm [<0050>]TJ
+1.01 0 0 1 317.811 377 Tm [<0053>]TJ
+1.005 0 0 1 323.804 377 Tm [<0051>]TJ
+1.01 0 0 1 329.03 377 Tm [<004D>]TJ
+1.005 0 0 1 331.606 377 Tm [<0042>]TJ
+1.01 0 0 1 336.152 377 Tm [<004A>]TJ
+1.005 0 0 1 338.828 377 Tm [<004F>]TJ
+1.01 0 0 1 346.634 377 Tm [<004A>]TJ
+1.005 0 0 1 349.311 377 Tm [<0054>-221<0050004F0046>-222<0054>]TJ
+1.01 0 0 1 376.878 377 Tm [<0055>]TJ
+1.005 0 0 1 380.481 377 Tm [<00460051>-221<004200580042>]TJ
+1.01 0 0 1 408.282 377 Tm [<005A>-220<00470053>]TJ
+1.005 0 0 1 422.284 377 Tm [<0050004E>-221<0058>]TJ
+1.01 0 0 1 444.498 377 Tm [<0053004A0055004A>]TJ
+1.005 0 0 1 457.227 377 Tm [<004F0048>]TJ
+1.01 0 0 1 469.699 377 Tm [<0047>]TJ
+1.005 0 0 1 473.06 377 Tm [<0050>]TJ
+1.01 0 0 1 478.116 377 Tm [<0053>]TJ
+1.005 0 0 1 113.386 365.044 Tm [<0042004F>]TJ
+1.01 0 0 1 123.518 365.044 Tm [<005A>-221<0047>]TJ
+1.005 0 0 1 133.757 365.044 Tm [<0050>]TJ
+1.01 0 0 1 138.813 365.044 Tm [<0053>]TJ
+1.005 0 0 1 142.586 365.044 Tm [<004E0042>]TJ
+1.01 0 0 1 155.262 365.044 Tm [<0055000D>-222<004A0055>-221<004A>]TJ
+1.005 0 0 1 174.751 365.044 Tm [<0054>]TJ
+1.01 0 0 1 180.995 365.044 Tm [<0047>]TJ
+1.005 0 0 1 184.355 365.044 Tm [<0050>]TJ
+1.01 0 0 1 189.412 365.044 Tm [<0053>]TJ
+1.005 0 0 1 193.185 365.044 Tm [<004E0042>]TJ
+1.01 0 0 1 205.861 365.044 Tm [<0055000E004A>]TJ
+1.005 0 0 1 215.309 365.044 Tm [<004F0045004600510046004F00450046004F>]TJ
+1.01 0 0 1 261.096 365.044 Tm [<0055000D>-222<0055>]TJ
+1.005 0 0 1 273.004 365.044 Tm [<00490050005600480049>]TJ
+1.01 0 0 1 301.155 365.044 Tm [<0055>]TJ
+1.005 0 0 1 304.757 365.044 Tm [<00490046>-222<004900460042>]TJ
+1.01 0 0 1 331.356 365.044 Tm [<0057005A>]TJ
+1.005 0 0 1 342.993 365.044 Tm [<00490042004F0045>]TJ
+1.01 0 0 1 366.027 365.044 Tm [<004A0055>-221<004D>]TJ
+1.005 0 0 1 377.11 365.044 Tm [<0042>]TJ
+1.01 0 0 1 381.656 365.044 Tm [<005A>]TJ
+1.005 0 0 1 386.305 365.044 Tm [<0054>-222<0050004F>]TJ
+1.01 0 0 1 405.42 365.044 Tm [<0055>]TJ
+1.005 0 0 1 409.022 365.044 Tm [<00490046>-222<00500056>]TJ
+1.01 0 0 1 431.506 365.044 Tm [<0055>]TJ
+1.005 0 0 1 435.108 365.044 Tm [<00510056>]TJ
+1.01 0 0 1 445.621 365.044 Tm [<0055>-221<0053>]TJ
+1.005 0 0 1 455.226 365.044 Tm [<00500056>]TJ
+1.01 0 0 1 465.568 365.044 Tm [<0055004A>]TJ
+1.005 0 0 1 471.847 365.044 Tm [<004F0046>]TJ
+0.99 0 0 1 113.386 353.089 Tm [<004E004A004800490055>-224<004E0042004C0046>-224<004A0055>-224<00440050004F00EC004A00440055>-225<0058004A00550049>-224<00500055004900460053>-224<0044005000450046000F>-303<002A004F>-224<0051004D0042004A004F>-224<0035>]TJ
+1 0 0 1 310.323 351.022 Tm [<0026>]TJ
+0.99 0 0 1 314.607 353.089 Tm [<0039000D>-224<00550049004A004F00480054>-224<004200530046>-224<004A004F004F005000440056005000560054001C>-226<004A004F>-224<002D00420035>]TJ
+1 0 0 1 438.102 351.022 Tm [<0026>]TJ
+0.99 0 0 1 442.386 353.089 Tm [<0039000D>-224<005500490050005600480049>]TJ
+0.98 0 0 1 113.386 341.134 Tm [<004F0050>]TJ
+0.97 0 0 1 123.764 341.134 Tm [<0055>-214<0055>]TJ
+0.98 0 0 1 132.759 341.134 Tm [<00490050>]TJ
+0.97 0 0 1 143.01 341.134 Tm [<0053>]TJ
+0.98 0 0 1 146.634 341.134 Tm [<0050005600480049>]TJ
+0.97 0 0 1 166.591 341.134 Tm [<004D005A>-214<0055>]TJ
+0.98 0 0 1 179.064 341.134 Tm [<00460054>]TJ
+0.97 0 0 1 187.324 341.134 Tm [<0055>]TJ
+0.98 0 0 1 190.784 341.134 Tm [<00460045>]TJ
+0.97 0 0 1 200.215 341.134 Tm [<000D>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 204.681 341.134 Tm [<002D>]TJ
+0.98 0 0 1 209.639 341.134 Tm [<00460044>]TJ
+0.97 0 0 1 217.098 341.134 Tm [<0055>]TJ
+0.98 0 0 1 220.432 341.134 Tm [<0056>]TJ
+0.97 0 0 1 225.187 341.134 Tm [<0053>]TJ
+0.98 0 0 1 228.704 341.134 Tm [<0046>]TJ
+0.97 0 0 1 232.649 341.134 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 238.241 341.134 Tm [<00580050>]TJ
+0.97 0 0 1 249.811 341.134 Tm [<0053>]TJ
+0.98 0 0 1 253.435 341.134 Tm [<004C0054>-212<0048005000500045>]TJ
+0.97 0 0 1 283.795 341.134 Tm [<000D>]TJ
+0.98 0 0 1 288.261 341.134 Tm [<0051>]TJ
+0.97 0 0 1 293.357 341.134 Tm [<0053>]TJ
+0.98 0 0 1 296.981 341.134 Tm [<0050>]TJ
+0.97 0 0 1 301.912 341.134 Tm [<0057004A>]TJ
+0.98 0 0 1 309.053 341.134 Tm [<004500460045>]TJ
+0.97 0 0 1 325.647 341.134 Tm [<004A0055>-214<004A>]TJ
+0.98 0 0 1 336.323 341.134 Tm [<0054>-212<004F0050>]TJ
+0.97 0 0 1 352.692 341.134 Tm [<0055>-214<004A>]TJ
+0.98 0 0 1 360.797 341.134 Tm [<004F>-212<00440050004F>]TJ
+0.97 0 0 1 382.633 341.134 Tm [<00EC004A>]TJ
+0.98 0 0 1 390.654 341.134 Tm [<0044>]TJ
+0.97 0 0 1 394.589 341.134 Tm [<0055>]TJ
+0.98 0 0 1 400.124 341.134 Tm [<0058>]TJ
+0.97 0 0 1 406.763 341.134 Tm [<004A0055>]TJ
+0.98 0 0 1 412.793 341.134 Tm [<0049>-212<0050>]TJ
+0.97 0 0 1 425.12 341.134 Tm [<0055>]TJ
+0.98 0 0 1 428.579 341.134 Tm [<00490046>]TJ
+0.97 0 0 1 438.245 341.134 Tm [<0053>]TJ
+0.98 0 0 1 443.944 341.134 Tm [<005100420044004C0042004800460054>]TJ
+0.97 0 0 1 479.522 341.134 Tm [<001C>]TJ
+1.02 0 0 1 113.386 329.179 Tm [<0054>]TJ
+1.03 0 0 1 117.461 329.179 Tm [<004A>]TJ
+1.02 0 0 1 120.19 329.179 Tm [<004F00440046>]TJ
+1.03 0 0 1 136.778 329.179 Tm [<004A0055>-224<004A>]TJ
+1.02 0 0 1 148.211 329.179 Tm [<0054>-226<0051>]TJ
+1.03 0 0 1 159.89 329.179 Tm [<0053>]TJ
+1.02 0 0 1 163.738 329.179 Tm [<0046>]TJ
+1.03 0 0 1 168.26 329.179 Tm [<00550055005A>]TJ
+1.02 0 0 1 182.648 329.179 Tm [<00540046>]TJ
+1.03 0 0 1 191.245 329.179 Tm [<004D0047000E>]TJ
+1.02 0 0 1 200.532 329.179 Tm [<00440050004F>]TJ
+1.03 0 0 1 215.429 329.179 Tm [<0055>]TJ
+1.02 0 0 1 219.103 329.179 Tm [<0042>]TJ
+1.03 0 0 1 223.717 329.179 Tm [<004A>]TJ
+1.02 0 0 1 226.446 329.179 Tm [<004F00460045>]TJ
+1.03 0 0 1 244.233 329.179 Tm [<0047>]TJ
+1.02 0 0 1 247.66 329.179 Tm [<0050>]TJ
+1.03 0 0 1 252.792 329.179 Tm [<0053>]TJ
+1.02 0 0 1 258.94 329.179 Tm [<005800490042>]TJ
+1.03 0 0 1 276.002 329.179 Tm [<0055>-224<004A00550008>]TJ
+1.02 0 0 1 290.452 329.179 Tm [<0054>-226<004500460054>]TJ
+1.03 0 0 1 310.718 329.179 Tm [<004A>]TJ
+1.02 0 0 1 313.447 329.179 Tm [<0048004F00460045>]TJ
+1.03 0 0 1 333.67 329.179 Tm [<000D>-226<0055>]TJ
+1.02 0 0 1 342.184 329.179 Tm [<0049>]TJ
+1.03 0 0 1 347.723 329.179 Tm [<004A>]TJ
+1.02 0 0 1 350.452 329.179 Tm [<004F00480054>-226<0054004900500056>]TJ
+1.03 0 0 1 387.343 329.179 Tm [<004D>]TJ
+1.02 0 0 1 389.97 329.179 Tm [<0045>-226<00580050>]TJ
+1.03 0 0 1 409.607 329.179 Tm [<0053>]TJ
+1.02 0 0 1 413.455 329.179 Tm [<004C>-226<004F>]TJ
+1.03 0 0 1 426.496 329.179 Tm [<004A>]TJ
+1.02 0 0 1 429.225 329.179 Tm [<00440046>]TJ
+1.03 0 0 1 437.843 329.179 Tm [<004D005A000F>]TJ
+1.02 0 0 1 450.972 329.179 Tm [<0027>]TJ
+1.03 0 0 1 456.368 329.179 Tm [<004A>]TJ
+1.02 0 0 1 459.097 329.179 Tm [<004F0042>]TJ
+1.03 0 0 1 469.381 329.179 Tm [<004D004D005A000D>]TJ
+/F63 9.96264 Tf 1.03 0 0 1 113.386 317.224 Tm [<002D>]TJ
+1.02 0 0 1 118.65 317.224 Tm [<00460044>]TJ
+1.03 0 0 1 126.414 317.224 Tm [<0055>]TJ
+1.02 0 0 1 129.954 317.224 Tm [<0056>]TJ
+1.03 0 0 1 134.903 317.224 Tm [<0053>]TJ
+1.02 0 0 1 138.638 317.224 Tm [<0046>]TJ
+1.03 0 0 1 142.743 317.224 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 148.913 317.224 Tm [<005400460046004E0054>]TJ
+1.03 0 0 1 176.794 317.224 Tm [<0055>]TJ
+1.02 0 0 1 180.467 317.224 Tm [<0050>-239<00430046>-240<0056005400420043>]TJ
+1.03 0 0 1 219.389 317.224 Tm [<004D>]TJ
+1.02 0 0 1 222.016 317.224 Tm [<0046>-239<0058>]TJ
+1.03 0 0 1 235.883 317.224 Tm [<004A0055>]TJ
+1.02 0 0 1 242.286 317.224 Tm [<0049>-239<00240050004F>]TJ
+1.03 0 0 1 267.006 317.224 Tm [<0035>]TJ
+1 0 0 1 271.164 315.157 Tm [<0026>]TJ
+1.03 0 0 1 275.448 317.224 Tm [<00390055>]TJ
+1.02 0 0 1 287.6 317.224 Tm [<002E004C>]TJ
+1.03 0 0 1 301.502 317.224 Tm [<002A002A000D>]TJ
+1.02 0 0 1 313.1 317.224 Tm [<00430056>]TJ
+1.03 0 0 1 323.638 317.224 Tm [<0055>]TJ
+1.02 0 0 1 329.746 317.224 Tm [<004F0050>]TJ
+1.03 0 0 1 340.548 317.224 Tm [<0055>]TJ
+1.02 0 0 1 346.657 317.224 Tm [<002E004C>]TJ
+1.03 0 0 1 360.558 317.224 Tm [<002A0037>-237<0009>]TJ
+1.02 0 0 1 376.087 317.224 Tm [<0046>]TJ
+1.03 0 0 1 380.609 317.224 Tm [<0059>]TJ
+1.02 0 0 1 385.473 317.224 Tm [<004400460051>]TJ
+1.03 0 0 1 399.394 317.224 Tm [<0055>]TJ
+1.02 0 0 1 405.503 317.224 Tm [<00510046>]TJ
+1.03 0 0 1 415.329 317.224 Tm [<0053>]TJ
+1.02 0 0 1 419.177 317.224 Tm [<0049004200510054>]TJ
+1.03 0 0 1 441.143 317.224 Tm [<0055>]TJ
+1.02 0 0 1 444.817 317.224 Tm [<0050>-239<004E0042004C0046>-240<0042>]TJ
+1 0 0 1 113.386 305.269 Tm [<00490042004F0045005000560055000A000F>-293<002A>-220<00580046004D00440050004E0046>-220<00440050004E004E0046004F00550054>-220<0050004F>-220<005600540046>-220<00500047>]TJ
+/F63 9.96264 Tf 1 0 0 1 283.7 305.269 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 318.181 305.269 Tm [<004A004F>-220<00550049005000540046>-220<004700500053004E004200550054000D>-220<00540050>-220<002A>-220<00440042004F>-220<004A004E00510053005000570046>-220<004A0055000F>]TJ
+0.99 0 0 1 133.311 293.313 Tm [<0022>]TJ
+0.985 0 0 1 139.288 293.313 Tm [<0054>]TJ
+0.98 0 0 1 145.456 293.313 Tm [<0047>]TJ
+0.985 0 0 1 148.717 293.313 Tm [<0050>]TJ
+0.98 0 0 1 153.673 293.313 Tm [<0053>]TJ
+0.985 0 0 1 159.567 293.313 Tm [<0046004F0048>]TJ
+0.98 0 0 1 173.982 293.313 Tm [<004A>]TJ
+0.985 0 0 1 176.579 293.313 Tm [<004F00460054>]TJ
+0.98 0 0 1 190.357 293.313 Tm [<000D>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 194.992 293.313 Tm [<002D>]TJ
+0.985 0 0 1 200.001 293.313 Tm [<00460044>]TJ
+0.98 0 0 1 207.498 293.313 Tm [<0055>]TJ
+0.985 0 0 1 210.867 293.313 Tm [<0056>]TJ
+0.98 0 0 1 215.646 293.313 Tm [<0053>]TJ
+0.985 0 0 1 219.2 293.313 Tm [<0046>]TJ
+0.98 0 0 1 223.164 293.313 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 228.951 293.313 Tm [<00440056>]TJ
+0.98 0 0 1 238.087 293.313 Tm [<00530053>]TJ
+0.985 0 0 1 245.41 293.313 Tm [<0046004F>]TJ
+0.98 0 0 1 255.252 293.313 Tm [<0055004D005A>]TJ
+0.985 0 0 1 267.99 293.313 Tm [<00580050>]TJ
+0.98 0 0 1 279.619 293.313 Tm [<0053>]TJ
+0.985 0 0 1 283.28 293.313 Tm [<004C0054>-227<0058>]TJ
+0.98 0 0 1 301.018 293.313 Tm [<004A0055>]TJ
+0.985 0 0 1 307.11 293.313 Tm [<0049>-227<00510045>]TJ
+0.98 0 0 1 324.927 293.313 Tm [<00470035>]TJ
+1 0 0 1 332.063 291.246 Tm [<0026>]TJ
+0.98 0 0 1 336.347 293.313 Tm [<0039>]TJ
+0.985 0 0 1 344.33 293.313 Tm [<0042004F0045>]TJ
+0.98 0 0 1 361.607 293.313 Tm [<002D>]TJ
+0.985 0 0 1 366.713 293.313 Tm [<00560042>]TJ
+0.98 0 0 1 376.349 293.313 Tm [<0035>]TJ
+1 0 0 1 380.225 291.246 Tm [<0026>]TJ
+0.98 0 0 1 384.508 293.313 Tm [<0039>]TJ
+0.985 0 0 1 392.492 293.313 Tm [<0050004F>]TJ
+0.98 0 0 1 402.923 293.313 Tm [<004D005A000D>]TJ
+0.985 0 0 1 414.569 293.313 Tm [<0043004600440042005600540046>]TJ
+0.98 0 0 1 448.057 293.313 Tm [<0055>]TJ
+0.985 0 0 1 451.552 293.313 Tm [<00490046>-227<0044005000450046>]TJ
+1 0 0 1 113.386 281.358 Tm [<004A0054>-220<0045004600510046004F00450046004F0055>-220<0050004F>-220<0051004500470035>]TJ
+1 0 0 1 198.47 279.291 Tm [<0026>]TJ
+1 0 0 1 202.754 281.358 Tm [<003900080054>-220<00510053004A004E004A0055004A005700460054000F>-293<002E005A>-220<004200510050004D00500048004A00460054>-220<00550050>-220<003900460035>]TJ
+1 0 0 1 344.648 279.291 Tm [<0026>]TJ
+1 0 0 1 348.932 281.358 Tm [<0039>-220<00560054004600530054000F>-293<002A>-220<00580046004D00440050004E0046>-220<00450053004A0057004600530054000F>]TJ
+1 0 0 1 133.311 269.403 Tm [<02650046>-222<004E0042004A004F>-222<0045005300420058004300420044004C>-222<004A004F>-222<00560054004A004F0048>]TJ
+/F63 9.96264 Tf 1 0 0 1 248.865 269.403 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 283.367 269.403 Tm [<004A0054>-222<004A0055>-222<0053004600520056004A005300460054>-222<0042>-222<004100440050004F004700500053004E004A004F0048>-222<005300460042004500460053000D0008>-223<00420054>-222<005500490046005A>-222<00540042005A>-222<00420055>]TJ
+0.985 0 0 1 113.386 257.448 Tm [<0022>]TJ
+0.98 0 0 1 119.333 257.448 Tm [<0045005000430046>]TJ
+0.97 0 0 1 138.664 257.448 Tm [<000D>-224<0055>]TJ
+0.98 0 0 1 146.66 257.448 Tm [<0050>-221<00580050>]TJ
+0.97 0 0 1 165.324 257.448 Tm [<0053>]TJ
+0.98 0 0 1 168.948 257.448 Tm [<004C>-221<0051>]TJ
+0.97 0 0 1 181.079 257.448 Tm [<0053>]TJ
+0.98 0 0 1 184.703 257.448 Tm [<005000510046>]TJ
+0.97 0 0 1 199.075 257.448 Tm [<0053004D005A000D>-224<0055>]TJ
+0.98 0 0 1 217.634 257.448 Tm [<00490042>]TJ
+0.97 0 0 1 227.387 257.448 Tm [<0055>-223<004A>]TJ
+0.98 0 0 1 235.581 257.448 Tm [<0054>-221<0042>]TJ
+0.97 0 0 1 248.255 257.448 Tm [<0053>]TJ
+0.98 0 0 1 251.879 257.448 Tm [<0046004200450046>]TJ
+0.97 0 0 1 270.087 257.448 Tm [<0053>-223<0055>]TJ
+0.98 0 0 1 279.334 257.448 Tm [<00490042>]TJ
+0.97 0 0 1 289.088 257.448 Tm [<0055>]TJ
+0.98 0 0 1 294.71 257.448 Tm [<0056004F00450046>]TJ
+0.97 0 0 1 314.745 257.448 Tm [<0053>]TJ
+0.98 0 0 1 318.369 257.448 Tm [<0054>]TJ
+0.97 0 0 1 322.284 257.448 Tm [<0055>]TJ
+0.98 0 0 1 325.744 257.448 Tm [<0042004F00450054>-221<00420045>]TJ
+0.97 0 0 1 356.308 257.448 Tm [<0057>]TJ
+0.98 0 0 1 360.879 257.448 Tm [<0042004F004400460045>-221<0031>]TJ
+0.985 0 0 1 391.63 257.448 Tm [<0025>]TJ
+0.98 0 0 1 398.411 257.448 Tm [<0027>-221<0044005000450046>-222<0042004F0045>-221<0042>]TJ
+0.97 0 0 1 449.944 257.448 Tm [<004D004A00550055004D>]TJ
+0.98 0 0 1 464.382 257.448 Tm [<0046>-221<0043>]TJ
+0.97 0 0 1 475.86 257.448 Tm [<004A0055>]TJ
+0.99 0 0 1 113.386 245.493 Tm [<0050>]TJ
+0.985 0 0 1 118.367 245.493 Tm [<0047>-225<002B>]TJ
+0.99 0 0 1 128.694 245.493 Tm [<0042>]TJ
+0.985 0 0 1 133.172 245.493 Tm [<0057>]TJ
+0.99 0 0 1 137.813 245.493 Tm [<004200340044>]TJ
+0.985 0 0 1 151.119 245.493 Tm [<0053004A>]TJ
+0.99 0 0 1 157.409 245.493 Tm [<0051>]TJ
+0.985 0 0 1 162.557 245.493 Tm [<0055000F>]TJ
+0.99 0 0 1 171.457 245.493 Tm [<00380049>]TJ
+0.985 0 0 1 185.512 245.493 Tm [<004A>]TJ
+0.99 0 0 1 188.122 245.493 Tm [<00440049>-224<004300420054>]TJ
+0.985 0 0 1 213.138 245.493 Tm [<004A>]TJ
+0.99 0 0 1 215.748 245.493 Tm [<00440042>]TJ
+0.985 0 0 1 224.2 245.493 Tm [<004D004D005A>]TJ
+0.99 0 0 1 235.97 245.493 Tm [<004E00460042004F0054>]TJ
+0.995 0 0 1 264.516 245.493 Tm [<0022>]TJ
+0.99 0 0 1 270.524 245.493 Tm [<0045005000430046>]TJ
+0.985 0 0 1 290.052 245.493 Tm [<0008>]TJ
+0.99 0 0 1 292.035 245.493 Tm [<0054>]TJ
+0.985 0 0 1 298.201 245.493 Tm [<0053>]TJ
+0.99 0 0 1 301.881 245.493 Tm [<0046004200450046>]TJ
+0.985 0 0 1 320.276 245.493 Tm [<0053000D>]TJ
+0.99 0 0 1 328.577 245.493 Tm [<0042>]TJ
+0.985 0 0 1 333.055 245.493 Tm [<0057>]TJ
+0.99 0 0 1 337.696 245.493 Tm [<0042>]TJ
+0.985 0 0 1 342.174 245.493 Tm [<004A004D>]TJ
+0.99 0 0 1 347.297 245.493 Tm [<00420043>]TJ
+0.985 0 0 1 356.795 245.493 Tm [<004D>]TJ
+0.99 0 0 1 359.307 245.493 Tm [<0046>-224<004E00500054>]TJ
+0.985 0 0 1 382.852 245.493 Tm [<0055004D005A>]TJ
+0.99 0 0 1 395.623 245.493 Tm [<0046>]TJ
+0.985 0 0 1 400.012 245.493 Tm [<0057>]TJ
+0.99 0 0 1 404.654 245.493 Tm [<0046>]TJ
+0.985 0 0 1 409.043 245.493 Tm [<0053005A>]TJ
+0.99 0 0 1 417.257 245.493 Tm [<005800490046>]TJ
+0.985 0 0 1 433.728 245.493 Tm [<0053>]TJ
+0.99 0 0 1 437.408 245.493 Tm [<0046>]TJ
+0.985 0 0 1 441.797 245.493 Tm [<000D>]TJ
+0.99 0 0 1 446.418 245.493 Tm [<0042004F0045>]TJ
+0.985 0 0 1 463.75 245.493 Tm [<00470053>]TJ
+0.99 0 0 1 470.707 245.493 Tm [<00460046>]TJ
+0.985 0 0 1 479.486 245.493 Tm [<000D>]TJ
+1 0 0 1 113.386 233.538 Tm [<004300560055>-220<004100420054>-220<004A004F>-220<0047005300460046>-220<0043004600460053000D0008>-220<00550050>-220<004E0042004C0046>-220<0042>-220<00520056005000550046000F>]TJ
+1.03 0 0 1 133.311 221.582 Tm [<0265>]TJ
+1.02 0 0 1 143.727 221.582 Tm [<0046>-218<004E0042>]TJ
+1.03 0 0 1 163.33 221.582 Tm [<004A>]TJ
+1.02 0 0 1 166.06 221.582 Tm [<004F>-218<00420045>]TJ
+1.03 0 0 1 183.854 221.582 Tm [<0057>]TJ
+1.02 0 0 1 188.708 221.582 Tm [<0042004F>]TJ
+1.03 0 0 1 198.992 221.582 Tm [<0055>]TJ
+1.02 0 0 1 202.666 221.582 Tm [<004200480046>]TJ
+1.03 0 0 1 218.753 221.582 Tm [<004A>]TJ
+1.02 0 0 1 221.483 221.582 Tm [<0054>]TJ
+1.03 0 0 1 227.774 221.582 Tm [<0055>]TJ
+1.02 0 0 1 231.448 221.582 Tm [<00490042>]TJ
+1.03 0 0 1 241.6 221.582 Tm [<0055>-216<0055005A>]TJ
+1.02 0 0 1 255.904 221.582 Tm [<0051004600540046>]TJ
+1.03 0 0 1 274.328 221.582 Tm [<00550055004A>]TJ
+1.02 0 0 1 284.405 221.582 Tm [<004F0048>]TJ
+1.03 0 0 1 297.027 221.582 Tm [<00090035>]TJ
+1 0 0 1 304.55 219.515 Tm [<0026>]TJ
+1.03 0 0 1 308.834 221.582 Tm [<0039000A>]TJ
+1.02 0 0 1 320.461 221.582 Tm [<0042004F0045>-218<0051>]TJ
+1.03 0 0 1 343.56 221.582 Tm [<0053>]TJ
+1.02 0 0 1 347.408 221.582 Tm [<004600540046004F>]TJ
+1.03 0 0 1 366.197 221.582 Tm [<0055>]TJ
+1.02 0 0 1 369.871 221.582 Tm [<0042>]TJ
+1.03 0 0 1 374.484 221.582 Tm [<0055004A>]TJ
+1.02 0 0 1 380.888 221.582 Tm [<0050004F>]TJ
+1.03 0 0 1 393.906 221.582 Tm [<00EC>]TJ
+1.02 0 0 1 399.694 221.582 Tm [<00500058>]TJ
+1.03 0 0 1 413.952 221.582 Tm [<0009>]TJ
+1.02 0 0 1 417.318 221.582 Tm [<0031>]TJ
+1.015 0 0 1 422.877 221.582 Tm [<0025>]TJ
+1.02 0 0 1 429.864 221.582 Tm [<0027>]TJ
+1.03 0 0 1 435.26 221.582 Tm [<000A>]TJ
+1.02 0 0 1 440.842 221.582 Tm [<0042>]TJ
+1.03 0 0 1 445.456 221.582 Tm [<0053>]TJ
+1.02 0 0 1 449.304 221.582 Tm [<0046>-218<004F00460042>]TJ
+1.03 0 0 1 470.848 221.582 Tm [<0055004D005A>]TJ
+0.985 0 0 1 113.386 209.627 Tm [<0045>]TJ
+0.98 0 0 1 118.499 209.627 Tm [<004A0057004A>]TJ
+0.985 0 0 1 128.311 209.627 Tm [<004500460045>]TJ
+0.98 0 0 1 142.903 209.627 Tm [<001B>]TJ
+0.985 0 0 1 148.255 209.627 Tm [<0046004200440049>-225<0054>]TJ
+0.98 0 0 1 172.526 209.627 Tm [<004D004A>]TJ
+0.985 0 0 1 177.623 209.627 Tm [<00450046>]TJ
+0.98 0 0 1 189.313 209.627 Tm [<004A>]TJ
+0.985 0 0 1 191.91 209.627 Tm [<0054>-225<0042>-225<0051004200480046>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 225.45 209.627 Tm [<0055005A>]TJ
+0.985 0 0 1 233.017 209.627 Tm [<0051004600540046>]TJ
+0.98 0 0 1 249.159 209.627 Tm [<0055>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 254.739 209.627 Tm [<0043>]TJ
+0.98 0 0 1 259.734 209.627 Tm [<005A>-226<0035>]TJ
+1 0 0 1 270.33 207.56 Tm [<0026>]TJ
+0.98 0 0 1 274.614 209.627 Tm [<0039>]TJ
+0.985 0 0 1 282.575 209.627 Tm [<0042004F0045>]TJ
+/F63 9.96264 Tf 0.985 0 0 1 299.83 209.627 Tm [<004E0042004F>]TJ
+0.98 0 0 1 316.61 209.627 Tm [<004A>]TJ
+0.985 0 0 1 319.061 209.627 Tm [<00510056>]TJ
+0.98 0 0 1 328.472 209.627 Tm [<004D>]TJ
+0.985 0 0 1 330.903 209.627 Tm [<0042>]TJ
+0.98 0 0 1 335.427 209.627 Tm [<0055>]TJ
+0.985 0 0 1 338.795 209.627 Tm [<00460045>-204<0050004F>]TJ
+0.98 0 0 1 360.783 209.627 Tm [<0055>]TJ
+0.985 0 0 1 364.151 209.627 Tm [<00490046>-204<00540044>]TJ
+0.98 0 0 1 382.098 209.627 Tm [<0053>]TJ
+0.985 0 0 1 385.651 209.627 Tm [<00460046004F>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 400.796 209.627 Tm [<0043>]TJ
+0.98 0 0 1 405.791 209.627 Tm [<005A>]TJ
+0.985 0 0 1 412.512 209.627 Tm [<0031>]TJ
+0.99 0 0 1 417.88 209.627 Tm [<0025>]TJ
+0.985 0 0 1 424.696 209.627 Tm [<0027>-225<0044005000450046>]TJ
+0.98 0 0 1 450.507 209.627 Tm [<000F>]TJ
+0.985 0 0 1 455.878 209.627 Tm [<002300460054>]TJ
+0.98 0 0 1 469.813 209.627 Tm [<004A>]TJ
+0.985 0 0 1 472.41 209.627 Tm [<00450046>]TJ
+1.03 0 0 1 113.386 197.672 Tm [<0055>]TJ
+1.02 0 0 1 117.059 197.672 Tm [<00490046>]TJ
+1.03 0 0 1 129.85 197.672 Tm [<004A>]TJ
+1.02 0 0 1 132.579 197.672 Tm [<004F>]TJ
+1.03 0 0 1 138.249 197.672 Tm [<0055>]TJ
+1.02 0 0 1 141.923 197.672 Tm [<0046>]TJ
+1.03 0 0 1 146.445 197.672 Tm [<004D004D>]TJ
+1.02 0 0 1 151.699 197.672 Tm [<00460044>]TJ
+1.03 0 0 1 160.316 197.672 Tm [<0055>]TJ
+1.02 0 0 1 163.99 197.672 Tm [<00560042>]TJ
+1.03 0 0 1 173.969 197.672 Tm [<004D>]TJ
+1.02 0 0 1 179.326 197.672 Tm [<00540042>]TJ
+1.03 0 0 1 188.014 197.672 Tm [<0055004A>]TJ
+1.02 0 0 1 194.417 197.672 Tm [<0054>]TJ
+1.03 0 0 1 198.492 197.672 Tm [<0047>]TJ
+1.02 0 0 1 201.92 197.672 Tm [<00420044>]TJ
+1.03 0 0 1 210.628 197.672 Tm [<0055004A>]TJ
+1.02 0 0 1 217.031 197.672 Tm [<0050004F>]TJ
+1.03 0 0 1 227.834 197.672 Tm [<000D>-279<0055>]TJ
+1.02 0 0 1 236.886 197.672 Tm [<00490046>]TJ
+1.03 0 0 1 246.946 197.672 Tm [<0053>]TJ
+1.02 0 0 1 250.794 197.672 Tm [<0046>-268<0042>]TJ
+1.03 0 0 1 262.659 197.672 Tm [<0053>]TJ
+1.02 0 0 1 266.507 197.672 Tm [<0046>-268<004E0050>]TJ
+1.03 0 0 1 287.142 197.672 Tm [<0053>]TJ
+1.02 0 0 1 290.99 197.672 Tm [<0046>-268<0045>]TJ
+1.03 0 0 1 303.537 197.672 Tm [<004A0053>]TJ
+1.02 0 0 1 310.114 197.672 Tm [<00460044>]TJ
+1.03 0 0 1 318.732 197.672 Tm [<0055>]TJ
+1.02 0 0 1 325.135 197.672 Tm [<00430046004F0046>]TJ
+1.03 0 0 1 345.022 197.672 Tm [<00EB0055>]TJ
+1.02 0 0 1 354.452 197.672 Tm [<0054>]TJ
+1.03 0 0 1 358.527 197.672 Tm [<001B>-389<0047>]TJ
+1.02 0 0 1 368.467 197.672 Tm [<0050>]TJ
+1.03 0 0 1 373.599 197.672 Tm [<0053>-266<004A>]TJ
+1.02 0 0 1 382.906 197.672 Tm [<004F0054>]TJ
+1.03 0 0 1 392.651 197.672 Tm [<0055>]TJ
+1.02 0 0 1 396.325 197.672 Tm [<0042004F00440046>]TJ
+1.03 0 0 1 415.226 197.672 Tm [<000D>-279<0055>]TJ
+1.02 0 0 1 424.278 197.672 Tm [<00490046>-268<00490042004F004500500056>]TJ
+1.03 0 0 1 468.682 197.672 Tm [<0055>-266<004A>]TJ
+1.02 0 0 1 477.815 197.672 Tm [<0054>]TJ
+1 0 0 1 113.386 185.717 Tm [<0042004D0053004600420045005A>-220<004A004F>-220<005500490046>-221<0054004D004A00450046000D>-220<004600570046004F>-221<004A0047>-220<004A005500080054>-221<004F00500055>-220<0045004A0053004600440055004D005A>-220<00510053004600510042005300460045>-221<00420054>-220<0054005600440049000F>-295<002300460055005500460053>-220<00540055004A004D004D000D>-221<0055004900460053004600080054>-220<004F0050>-221<004F004600460045>-220<00550050>]TJ
+0.98 0 0 1 113.386 173.762 Tm [<0051>]TJ
+0.97 0 0 1 118.482 173.762 Tm [<0053>]TJ
+0.98 0 0 1 122.106 173.762 Tm [<004600510042>]TJ
+0.97 0 0 1 135.98 173.762 Tm [<0053>]TJ
+0.98 0 0 1 139.604 173.762 Tm [<0046>]TJ
+0.97 0 0 1 146.131 173.762 Tm [<0055>]TJ
+0.98 0 0 1 149.591 173.762 Tm [<00490046>-223<004E0042004F005600540044>]TJ
+0.97 0 0 1 192.253 173.762 Tm [<0053004A>]TJ
+0.98 0 0 1 198.447 173.762 Tm [<0051>]TJ
+0.97 0 0 1 203.544 173.762 Tm [<0055>-225<004A>]TJ
+0.98 0 0 1 211.757 173.762 Tm [<004F>-223<0042004F>]TJ
+0.97 0 0 1 229.268 173.762 Tm [<005A>]TJ
+0.98 0 0 1 235.916 173.762 Tm [<00580042>]TJ
+0.97 0 0 1 246.987 173.762 Tm [<005A>-225<0055>]TJ
+0.98 0 0 1 257.095 173.762 Tm [<0050>-223<0042004500420051>]TJ
+0.97 0 0 1 283.256 173.762 Tm [<0055>-225<0055>]TJ
+0.98 0 0 1 292.358 173.762 Tm [<0050>]TJ
+0.97 0 0 1 299.472 173.762 Tm [<0055>]TJ
+0.98 0 0 1 302.931 173.762 Tm [<00490046>]TJ
+0.97 0 0 1 314.78 173.762 Tm [<0053>]TJ
+0.98 0 0 1 318.404 173.762 Tm [<004600520056>]TJ
+0.97 0 0 1 332.854 173.762 Tm [<004A0053>]TJ
+0.98 0 0 1 339.048 173.762 Tm [<0046004E0046004F>]TJ
+0.97 0 0 1 361.113 173.762 Tm [<0055>]TJ
+0.98 0 0 1 364.573 173.762 Tm [<0054>-223<0050>]TJ
+0.97 0 0 1 375.601 173.762 Tm [<0047>]TJ
+0.98 0 0 1 381.012 173.762 Tm [<0042>-223<0051>]TJ
+0.97 0 0 1 392.724 173.762 Tm [<0053>]TJ
+0.98 0 0 1 396.348 173.762 Tm [<004600540046004F>]TJ
+0.97 0 0 1 414.4 173.762 Tm [<0055>]TJ
+0.98 0 0 1 417.86 173.762 Tm [<0042>]TJ
+0.97 0 0 1 422.293 173.762 Tm [<0055004A>]TJ
+0.98 0 0 1 428.323 173.762 Tm [<0050004F>]TJ
+0.97 0 0 1 438.701 173.762 Tm [<000F>]TJ
+0.985 0 0 1 443.988 173.762 Tm [<0022>]TJ
+0.97 0 0 1 452.118 173.762 Tm [<004D004A>]TJ
+0.98 0 0 1 457.162 173.762 Tm [<0054>]TJ
+0.97 0 0 1 461.077 173.762 Tm [<0055>]TJ
+0.98 0 0 1 466.72 173.762 Tm [<0050>]TJ
+0.97 0 0 1 471.65 173.762 Tm [<0053>]TJ
+0.98 0 0 1 477.457 173.762 Tm [<0042>]TJ
+0.98 0 0 1 113.386 161.807 Tm [<0055>]TJ
+0.985 0 0 1 116.881 161.807 Tm [<00420043>]TJ
+0.98 0 0 1 126.331 161.807 Tm [<004D>]TJ
+0.985 0 0 1 128.831 161.807 Tm [<0046>]TJ
+0.98 0 0 1 133.198 161.807 Tm [<000D>-229<0047>]TJ
+0.985 0 0 1 141.087 161.807 Tm [<0050>]TJ
+0.98 0 0 1 146.042 161.807 Tm [<0053>-228<004A>]TJ
+0.985 0 0 1 154.528 161.807 Tm [<004F0054>]TJ
+0.98 0 0 1 163.939 161.807 Tm [<0055>]TJ
+0.985 0 0 1 167.434 161.807 Tm [<0042004F00440046>]TJ
+0.98 0 0 1 185.687 161.807 Tm [<000D>]TJ
+0.985 0 0 1 190.315 161.807 Tm [<00440042004F>-227<00430046>-227<0045>]TJ
+0.98 0 0 1 223.13 161.807 Tm [<004A>]TJ
+0.985 0 0 1 225.727 161.807 Tm [<00540051>]TJ
+0.98 0 0 1 234.785 161.807 Tm [<004D>]TJ
+0.985 0 0 1 237.284 161.807 Tm [<0042>]TJ
+0.98 0 0 1 241.739 161.807 Tm [<005A>]TJ
+0.985 0 0 1 246.25 161.807 Tm [<00460045>-227<0054>]TJ
+0.98 0 0 1 261.892 161.807 Tm [<0055>]TJ
+0.985 0 0 1 265.387 161.807 Tm [<004600510058>]TJ
+0.98 0 0 1 281.55 161.807 Tm [<004A>]TJ
+0.985 0 0 1 284.147 161.807 Tm [<00540046>-227<0058>]TJ
+0.98 0 0 1 301.349 161.807 Tm [<004A0055>]TJ
+0.985 0 0 1 307.441 161.807 Tm [<004900500056>]TJ
+0.98 0 0 1 322.927 161.807 Tm [<0055>]TJ
+0.985 0 0 1 328.649 161.807 Tm [<004400490042004F0048>]TJ
+0.98 0 0 1 352.456 161.807 Tm [<004A>]TJ
+0.985 0 0 1 355.053 161.807 Tm [<004F0048>]TJ
+0.98 0 0 1 367.329 161.807 Tm [<0055>]TJ
+0.985 0 0 1 370.825 161.807 Tm [<00490046>-226<0056005400560042>]TJ
+0.98 0 0 1 401.52 161.807 Tm [<004D>]TJ
+0.985 0 0 1 406.247 161.807 Tm [<00580042>]TJ
+0.98 0 0 1 417.375 161.807 Tm [<005A>-228<005A>]TJ
+0.985 0 0 1 428.624 161.807 Tm [<00500056>]TJ
+0.98 0 0 1 440.988 161.807 Tm [<0055005A>]TJ
+0.985 0 0 1 448.994 161.807 Tm [<00510046>]TJ
+0.98 0 0 1 460.711 161.807 Tm [<0055>]TJ
+0.985 0 0 1 464.206 161.807 Tm [<00490046004E>]TJ
+1 0 0 1 113.386 149.851 Tm [<004A004F001B>-293<004A004F0055004600530054005100460053005400460045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 180.079 149.851 Tm [<003F0056005700480053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 206.282 149.851 Tm [<00440050004E004E0042004F00450054>-220<0058004A004D004D>-220<00450050000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 188.706 Tm [<002A0047>-200<005A00500056>-200<00450050004F00080055>-200<004700460046004D>-200<004D004A004C0046>]TJ
+1 0 0 1 491.852 179.739 Tm [<0053004600420045004A004F0048>-200<01EC01E9>-200<00510042004800460054>-200<00500047>]TJ
+1 0 0 1 491.852 170.773 Tm [<0045005000440056004E0046004F005500420055004A0050004F000D>-200<00540058004A005500440049>-200<00550050>]TJ
+1 0 0 1 491.852 161.807 Tm [<005500490046>-200<00450046004E0050004F00540055005300420055004A0050004F0054>]TJ
+1 0 0 1 491.852 152.84 Tm [<0045004A005400550053004A00430056005500460045>-200<0058004A00550049>]TJ
+/F105 7.97011 Tf 1 0 0 1 542.853 152.84 Tm [<002D0046004400550056005300460053>]TJ
+/F63 7.97011 Tf 1 0 0 1 570.366 152.84 Tm [<000F>]TJ
+1 0 0 1 491.852 143.874 Tm [<002700500053>-200<0042004F>-200<00500057004600530057004A00460058000D>-200<00480050>-200<00550050>-200<005500490046>]TJ
+1 0 0 1 491.852 134.907 Tm [<005500490046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.361 134.907 Tm [<00250046004E0050004F00540055005300420055004A0050004F0054>]TJ
+0 g 0 G
+1 0 0 1 491.852 125.941 Tm [<0054004600440055004A0050004F000F>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 133.311 137.896 Tm [<0022>]TJ
+1.015 0 0 1 139.409 137.896 Tm [<004F0045>]TJ
+1.02 0 0 1 152.468 137.896 Tm [<0055>]TJ
+1.015 0 0 1 156.106 137.896 Tm [<00490046>-212<004300460054>]TJ
+1.02 0 0 1 181.967 137.896 Tm [<0055>-211<0047>]TJ
+1.015 0 0 1 191.148 137.896 Tm [<00460042>]TJ
+1.02 0 0 1 200.238 137.896 Tm [<0055>]TJ
+1.015 0 0 1 203.876 137.896 Tm [<0056>]TJ
+1.02 0 0 1 209.216 137.896 Tm [<0053>]TJ
+1.015 0 0 1 213.026 137.896 Tm [<0046>]TJ
+1.02 0 0 1 219.675 137.896 Tm [<004A>]TJ
+1.015 0 0 1 222.378 137.896 Tm [<004F>]TJ
+/F63 9.96264 Tf 1.02 0 0 1 230.169 137.896 Tm [<002D>]TJ
+1.015 0 0 1 235.382 137.896 Tm [<00460044>]TJ
+1.02 0 0 1 243.107 137.896 Tm [<0055>]TJ
+1.015 0 0 1 246.613 137.896 Tm [<0056>]TJ
+1.02 0 0 1 251.538 137.896 Tm [<0053>]TJ
+1.015 0 0 1 255.237 137.896 Tm [<0046>]TJ
+1.02 0 0 1 259.322 137.896 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 263.021 137.896 Tm [<000D>]TJ
+1.015 0 0 1 267.667 137.896 Tm [<00420054>]TJ
+1.02 0 0 1 278.462 137.896 Tm [<0047>]TJ
+1.015 0 0 1 281.856 137.896 Tm [<0042>]TJ
+1.02 0 0 1 286.447 137.896 Tm [<0053>]TJ
+1.015 0 0 1 292.406 137.896 Tm [<00420054>]TJ
+1.02 0 0 1 303.2 137.896 Tm [<002A0008>]TJ
+1.015 0 0 1 308.545 137.896 Tm [<004E>-212<00440050004F00440046>]TJ
+1.02 0 0 1 342.304 137.896 Tm [<0053>]TJ
+1.015 0 0 1 346.115 137.896 Tm [<004F00460045>]TJ
+1.02 0 0 1 361.525 137.896 Tm [<000D>-212<004A>]TJ
+1.015 0 0 1 368.875 137.896 Tm [<0054>]TJ
+1.02 0 0 1 375.078 137.896 Tm [<0055>]TJ
+1.015 0 0 1 378.716 137.896 Tm [<00490042>]TJ
+1.02 0 0 1 388.818 137.896 Tm [<0055>-211<005A>]TJ
+1.015 0 0 1 399.3 137.896 Tm [<00500056>-212<00440042004F>-212<00510056>]TJ
+1.02 0 0 1 438.968 137.896 Tm [<0055>]TJ
+1.015 0 0 1 444.755 137.896 Tm [<0042004F>]TJ
+1.02 0 0 1 454.988 137.896 Tm [<005A0055>]TJ
+1.015 0 0 1 463.321 137.896 Tm [<0049>]TJ
+1.02 0 0 1 468.832 137.896 Tm [<004A>]TJ
+1.015 0 0 1 471.535 137.896 Tm [<004F0048>]TJ
+1 0 0 1 113.386 125.941 Tm [<0042004F005A00580049004600530046>-220<0058004A00550049>-220<0042>-220<004700460058>-220<00440050004E004E0042004F00450054000F>]TJ
+ET
+endstream
+endobj
+3 0 obj <<
+/Type /Page
+/Contents 4 0 R
+/Resources 2 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 8 0 R
+/Annots [ 1 0 R ]
+>> endobj
+1 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.361 134.812 552.816 140.487]
+/A << /S /GoTo /D (ptx@section_link:1) >>
+>> endobj
+2 0 obj <<
+/Font << /F105 5 0 R /F111 6 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+12 0 obj <<
+/Length 24400
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<002300F1010300F900F3>-220<010400F800F900FE00F70103>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 604.148 Tm [<002D005000420045004A004F0048>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1 0 0 1 113.386 592.193 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 147.867 592.193 Tm [<0054004900500056004D0045>-219<00430046>-220<004D00500042004500460045>-220<00420054>-220<004A0054>-220<00440056005400550050004E00420053005A>-220<004A004F>-220<005500490046>-220<004700500053004E00420055>-220<00420055>-220<005800500053004C000D>-220<004A000F0046000F>-294<004A004F>-220<0051004D0042004A004F>-220<003500460039001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 568.282 Tm [<003F004C00510053005800570003004F0048004600570058005500480055>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 544.372 Tm [<004A004F>-220<002D00420035>]TJ
+1 0 0 1 137.508 542.305 Tm [<0026>]TJ
+1 0 0 1 141.792 544.372 Tm [<0039001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 520.462 Tm [<003F005800560048005300440046004E0044004A0048005E004F00480046005700580055004800550060>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 496.551 Tm [<0042004F0045>-220<004A004F>-220<00240050004F0035>]TJ
+1 0 0 1 161.658 494.484 Tm [<0026>]TJ
+1 0 0 1 165.942 496.551 Tm [<00390055001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 472.641 Tm [<003F0058005600480050005200470058004F0048003E004F00480046005700580055004800550040>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 436.775 Tm [<0027004A005300540055>-200<00550049004A004F00480054>-200<00EB005300540055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 113.386 424.82 Tm [<002A>]TJ
+0.98 0 0 1 116.517 424.82 Tm [<004F>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 123.806 424.82 Tm [<002D>]TJ
+0.98 0 0 1 128.763 424.82 Tm [<00460044>]TJ
+0.97 0 0 1 136.222 424.82 Tm [<0055>]TJ
+0.98 0 0 1 139.556 424.82 Tm [<0056>]TJ
+0.97 0 0 1 144.311 424.82 Tm [<0053>]TJ
+0.98 0 0 1 147.829 424.82 Tm [<0046>]TJ
+0.97 0 0 1 151.773 424.82 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 155.291 424.82 Tm [<000D>-197<0055>]TJ
+0.98 0 0 1 163.029 424.82 Tm [<00490046>-188<00440050004F>]TJ
+0.97 0 0 1 188.849 424.82 Tm [<0055>]TJ
+0.98 0 0 1 192.308 424.82 Tm [<0046004F>]TJ
+0.97 0 0 1 202.101 424.82 Tm [<0055>]TJ
+0.98 0 0 1 207.402 424.82 Tm [<0050>]TJ
+0.97 0 0 1 212.332 424.82 Tm [<0047>]TJ
+0.98 0 0 1 217.401 424.82 Tm [<0042>-188<0045005000440056004E0046004F>]TJ
+0.97 0 0 1 260.502 424.82 Tm [<0055>-190<004A>]TJ
+0.98 0 0 1 268.373 424.82 Tm [<0054>-188<0050>]TJ
+0.97 0 0 1 279.059 424.82 Tm [<0053>]TJ
+0.98 0 0 1 282.683 424.82 Tm [<00480042004F>]TJ
+0.97 0 0 1 297.113 424.82 Tm [<004A>]TJ
+0.98 0 0 1 299.684 424.82 Tm [<005B00460045>]TJ
+0.97 0 0 1 315.262 424.82 Tm [<004A>]TJ
+0.98 0 0 1 317.832 424.82 Tm [<004F>-188<0054>]TJ
+0.97 0 0 1 329.036 424.82 Tm [<004D004A>]TJ
+0.98 0 0 1 334.081 424.82 Tm [<004500460054>]TJ
+0.97 0 0 1 347.427 424.82 Tm [<000D>]TJ
+0.98 0 0 1 351.706 424.82 Tm [<0058>]TJ
+0.97 0 0 1 358.345 424.82 Tm [<004A0055>]TJ
+0.98 0 0 1 364.375 424.82 Tm [<0049>-188<0054>]TJ
+0.97 0 0 1 375.452 424.82 Tm [<0055>]TJ
+0.98 0 0 1 378.912 424.82 Tm [<004600510054>]TJ
+0.97 0 0 1 394.109 424.82 Tm [<0055>]TJ
+0.98 0 0 1 397.569 424.82 Tm [<0050>-188<004E0042004C0046>]TJ
+0.97 0 0 1 427.758 424.82 Tm [<0055>]TJ
+0.98 0 0 1 431.218 424.82 Tm [<0049>]TJ
+0.97 0 0 1 436.539 424.82 Tm [<004A>]TJ
+0.98 0 0 1 439.109 424.82 Tm [<004F00480054>-188<00420051005100460042>]TJ
+0.97 0 0 1 478.266 424.82 Tm [<0053>]TJ
+0.98 0 0 1 113.386 412.865 Tm [<0051>]TJ
+0.97 0 0 1 118.482 412.865 Tm [<0053>]TJ
+0.98 0 0 1 122.106 412.865 Tm [<00500048>]TJ
+0.97 0 0 1 131.586 412.865 Tm [<0053>]TJ
+0.98 0 0 1 135.21 412.865 Tm [<004600540054>]TJ
+0.97 0 0 1 147.385 412.865 Tm [<004A0057>]TJ
+0.98 0 0 1 154.527 412.865 Tm [<0046>]TJ
+0.97 0 0 1 158.872 412.865 Tm [<004D005A>]TJ
+0.98 0 0 1 168.002 412.865 Tm [<0050004F>]TJ
+0.97 0 0 1 180.572 412.865 Tm [<0055>]TJ
+0.98 0 0 1 184.031 412.865 Tm [<00490046>-224<00540044>]TJ
+0.97 0 0 1 203.739 412.865 Tm [<0053>]TJ
+0.98 0 0 1 207.362 412.865 Tm [<00460046004F>-224<005800490046004F>]TJ
+0.97 0 0 1 247.636 412.865 Tm [<005A>]TJ
+0.98 0 0 1 252.101 412.865 Tm [<00500056>]TJ
+0.97 0 0 1 262.186 412.865 Tm [<00080053>]TJ
+0.98 0 0 1 267.762 412.865 Tm [<0046>]TJ
+0.97 0 0 1 274.298 412.865 Tm [<004A>]TJ
+0.98 0 0 1 276.869 412.865 Tm [<004F>]TJ
+0.97 0 0 1 284.509 412.865 Tm [<0047>]TJ
+0.98 0 0 1 287.736 412.865 Tm [<0056>]TJ
+0.97 0 0 1 292.891 412.865 Tm [<004D004D>]TJ
+0.98 0 0 1 297.839 412.865 Tm [<00540044>]TJ
+0.97 0 0 1 305.689 412.865 Tm [<0053>]TJ
+0.98 0 0 1 309.313 412.865 Tm [<00460046004F>-224<004E005000450046>]TJ
+0.97 0 0 1 347.932 412.865 Tm [<000F>]TJ
+0.985 0 0 1 353.222 412.865 Tm [<0022>]TJ
+0.97 0 0 1 361.36 412.865 Tm [<0009>]TJ
+0.98 0 0 1 364.53 412.865 Tm [<00450046>]TJ
+0.97 0 0 1 373.961 412.865 Tm [<0047>]TJ
+0.98 0 0 1 377.189 412.865 Tm [<00420056>]TJ
+0.97 0 0 1 386.776 412.865 Tm [<004D0055000A>]TJ
+0.98 0 0 1 398.071 412.865 Tm [<0054>]TJ
+0.97 0 0 1 401.986 412.865 Tm [<004D004A>]TJ
+0.98 0 0 1 407.031 412.865 Tm [<00450046>]TJ
+0.97 0 0 1 418.654 412.865 Tm [<004A>]TJ
+0.98 0 0 1 421.224 412.865 Tm [<0054>-224<0042004F>]TJ
+0.97 0 0 1 437.212 412.865 Tm [<005A0055>]TJ
+0.98 0 0 1 445.136 412.865 Tm [<0049>]TJ
+0.97 0 0 1 450.457 412.865 Tm [<004A>]TJ
+0.98 0 0 1 453.028 412.865 Tm [<004F0048>]TJ
+0.97 0 0 1 465.217 412.865 Tm [<0055>]TJ
+0.98 0 0 1 468.677 412.865 Tm [<00490042>]TJ
+0.97 0 0 1 478.43 412.865 Tm [<0055>]TJ
+1 0 0 1 113.386 400.91 Tm [<0042005100510046004200530054>-220<004300460055005800460046004F>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<005500580050>-220<00440050004E004E0042004F00450054001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 80.587 377 Tm [<003F0056004F004C00470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 377 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 377 Tm [<001F0044005700570055004C004500580057004800560021>]TJ
+/F111 7.97011 Tf 1 0 0 1 175.816 377 Tm [<0040>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 66.18 365.044 Tm [<003F0048005100470056004F004C00470048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 365.044 Tm [<002A>]TJ
+1.02 0 0 1 116.711 365.044 Tm [<004F>]TJ
+1.03 0 0 1 124.601 365.044 Tm [<002D>]TJ
+1.02 0 0 1 129.968 365.044 Tm [<0042>]TJ
+1.03 0 0 1 134.581 365.044 Tm [<0035>]TJ
+1 0 0 1 138.739 362.977 Tm [<0026>]TJ
+1.03 0 0 1 143.023 365.044 Tm [<0039>-216<005A>]TJ
+1.02 0 0 1 156.028 365.044 Tm [<00500056>-218<00440042004F>-219<005600540046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 201.528 365.044 Tm [<003F>]TJ
+1.02 0 0 1 206.474 365.044 Tm [<00450048004A>]TJ
+1.03 0 0 1 221.169 365.044 Tm [<004C>]TJ
+1.02 0 0 1 226.115 365.044 Tm [<0051>]TJ
+1.03 0 0 1 231.014 365.044 Tm [<005E>]TJ
+1.02 0 0 1 235.96 365.044 Tm [<0056>]TJ
+1.03 0 0 1 240.858 365.044 Tm [<004F004C>]TJ
+1.02 0 0 1 250.751 365.044 Tm [<00470048>]TJ
+1.03 0 0 1 260.548 365.044 Tm [<0060>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 267.715 365.044 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 285.513 365.044 Tm [<003F>]TJ
+1.02 0 0 1 290.459 365.044 Tm [<004800510047>]TJ
+1.03 0 0 1 305.154 365.044 Tm [<005E>]TJ
+1.02 0 0 1 310.101 365.044 Tm [<0056>]TJ
+1.03 0 0 1 314.999 365.044 Tm [<004F004C>]TJ
+1.02 0 0 1 324.892 365.044 Tm [<00470048>]TJ
+1.03 0 0 1 334.689 365.044 Tm [<0060>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 339.635 365.044 Tm [<000D>]TJ
+1.02 0 0 1 344.376 365.044 Tm [<0042004F0045>]TJ
+1.03 0 0 1 362.175 365.044 Tm [<004A>]TJ
+1.02 0 0 1 364.904 365.044 Tm [<004F>-218<00240050004F>]TJ
+1.03 0 0 1 389.542 365.044 Tm [<0035>]TJ
+1 0 0 1 393.699 362.977 Tm [<0026>]TJ
+1.03 0 0 1 397.983 365.044 Tm [<00390055>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 409.921 365.044 Tm [<003F>]TJ
+1.02 0 0 1 414.868 365.044 Tm [<0056>]TJ
+1.03 0 0 1 419.766 365.044 Tm [<0057>]TJ
+1.02 0 0 1 424.712 365.044 Tm [<0044>]TJ
+1.03 0 0 1 429.611 365.044 Tm [<00550057>]TJ
+1.02 0 0 1 439.503 365.044 Tm [<0056>]TJ
+1.03 0 0 1 444.402 365.044 Tm [<004F004C>]TJ
+1.02 0 0 1 454.295 365.044 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 466.312 365.044 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 113.386 353.089 Tm [<003F>]TJ
+0.99 0 0 1 118.092 353.089 Tm [<0056>]TJ
+0.98 0 0 1 122.846 353.089 Tm [<0057>]TJ
+0.99 0 0 1 127.553 353.089 Tm [<005200530056>]TJ
+0.98 0 0 1 141.815 353.089 Tm [<004F004C>]TJ
+0.99 0 0 1 151.228 353.089 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 160.737 353.089 Tm [<000F>-298<0265>]TJ
+0.99 0 0 1 175.953 353.089 Tm [<0046>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 182.512 353.089 Tm [<003F>]TJ
+0.99 0 0 1 187.218 353.089 Tm [<0056>]TJ
+0.98 0 0 1 191.972 353.089 Tm [<004F004C>]TJ
+0.99 0 0 1 201.385 353.089 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 210.894 353.089 Tm [<0010>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 214.721 353.089 Tm [<003F>]TJ
+0.99 0 0 1 219.427 353.089 Tm [<0048005100470056>]TJ
+0.98 0 0 1 238.444 353.089 Tm [<004F004C>]TJ
+0.99 0 0 1 247.857 353.089 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 259.535 353.089 Tm [<00510042>]TJ
+0.98 0 0 1 269.161 353.089 Tm [<004A0053>]TJ
+0.99 0 0 1 277.589 353.089 Tm [<00440042004F>-220<00430046>-219<0056005400460045>]TJ
+0.98 0 0 1 326.153 353.089 Tm [<004A>]TJ
+0.99 0 0 1 328.75 353.089 Tm [<004F>-220<0042>]TJ
+0.98 0 0 1 340.901 353.089 Tm [<004D004D>-222<0047>]TJ
+0.99 0 0 1 351.331 353.089 Tm [<0050>]TJ
+0.98 0 0 1 356.312 353.089 Tm [<0053>]TJ
+0.99 0 0 1 359.973 353.089 Tm [<004E0042>]TJ
+0.98 0 0 1 372.459 353.089 Tm [<0055>]TJ
+0.99 0 0 1 375.955 353.089 Tm [<0054>]TJ
+0.98 0 0 1 379.91 353.089 Tm [<000D>-222<0055>]TJ
+0.99 0 0 1 387.971 353.089 Tm [<00490050005600480049>]TJ
+0.98 0 0 1 413.506 353.089 Tm [<000D>]TJ
+0.99 0 0 1 418.072 353.089 Tm [<00580049>]TJ
+0.98 0 0 1 430.155 353.089 Tm [<004A>]TJ
+0.99 0 0 1 432.752 353.089 Tm [<00440049>]TJ
+0.98 0 0 1 444.271 353.089 Tm [<004A>]TJ
+0.99 0 0 1 446.868 353.089 Tm [<0054>-220<00580049>]TJ
+0.98 0 0 1 465.075 353.089 Tm [<005A>-222<002A0008004D004D>]TJ
+1 0 0 1 113.386 341.134 Tm [<005600540046>]TJ
+/F111 7.97011 Tf 1 0 0 1 129.266 341.134 Tm [<003F0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 160.272 341.134 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 177.736 341.134 Tm [<003F0048005100470056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 223.149 341.134 Tm [<004700500053>-220<005500490046>-220<004600590042004E0051004D00460054>-220<004A004F>-220<00550049004A0054>-220<0045005000440056004E0046004F005500420055004A0050004F000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 85.389 317.224 Tm [<003F0056005700480053>]TJ
+0 g 0 G
+1 0 0 1 113.386 317.224 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 317.224 Tm [<001F0044005700570055004C004500580057004800560021>]TJ
+/F111 7.97011 Tf 1 0 0 1 175.816 317.224 Tm [<0040>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 305.269 Tm [<0035>]TJ
+1.02 0 0 1 119.204 305.269 Tm [<0050>-236<004E0042004C0046>]TJ
+1.03 0 0 1 151.602 305.269 Tm [<0055>]TJ
+1.02 0 0 1 155.276 305.269 Tm [<00490046>-236<00440050004F>]TJ
+1.03 0 0 1 182.638 305.269 Tm [<0055>]TJ
+1.02 0 0 1 186.311 305.269 Tm [<0046004F>]TJ
+1.03 0 0 1 196.504 305.269 Tm [<0055>]TJ
+1.02 0 0 1 202.582 305.269 Tm [<0050>]TJ
+1.03 0 0 1 207.713 305.269 Tm [<0047>]TJ
+1.02 0 0 1 213.545 305.269 Tm [<0042>-236<0054>]TJ
+1.03 0 0 1 224.638 305.269 Tm [<004D004A>]TJ
+1.02 0 0 1 229.994 305.269 Tm [<00450046>-236<00420051005100460042>]TJ
+1.03 0 0 1 266.573 305.269 Tm [<0053>]TJ
+1.02 0 0 1 272.825 305.269 Tm [<0051>]TJ
+1.03 0 0 1 278.13 305.269 Tm [<0053>]TJ
+1.02 0 0 1 281.978 305.269 Tm [<00500048>]TJ
+1.03 0 0 1 291.845 305.269 Tm [<0053>]TJ
+1.02 0 0 1 295.693 305.269 Tm [<004600540054>]TJ
+1.03 0 0 1 308.365 305.269 Tm [<004A0057>]TJ
+1.02 0 0 1 315.948 305.269 Tm [<0046>]TJ
+1.03 0 0 1 320.47 305.269 Tm [<004D005A>]TJ
+1.02 0 0 1 330.242 305.269 Tm [<0050004F>]TJ
+1.03 0 0 1 343.449 305.269 Tm [<0055>]TJ
+1.02 0 0 1 347.123 305.269 Tm [<00490046>-236<00540044>]TJ
+1.03 0 0 1 367.757 305.269 Tm [<0053>]TJ
+1.02 0 0 1 371.605 305.269 Tm [<00460046004F>]TJ
+1.03 0 0 1 386.32 305.269 Tm [<000D>-239<0055>]TJ
+1.02 0 0 1 394.965 305.269 Tm [<0049>]TJ
+1.03 0 0 1 400.503 305.269 Tm [<004A>]TJ
+1.02 0 0 1 403.233 305.269 Tm [<0054>-236<00440050004E004E0042004F0045>]TJ
+1.03 0 0 1 453.424 305.269 Tm [<004A>]TJ
+1.02 0 0 1 456.154 305.269 Tm [<0054>-236<0056005400460045>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 304.82 Tm [<00350050>-200<0042004500570042004F00440046>-200<004A004F>-200<005500490046>]TJ
+1 0 0 1 491.852 295.854 Tm [<00510053004600540046004F005500420055004A0050004F000D>-200<005600540046>-200<0046004A0055004900460053>-200<0042>]TJ
+1 0 0 1 491.852 286.888 Tm [<004D004600470055>-200<0044004D004A0044004C>-200<00500053>-200<0042>-200<0053004A004800490055>-200<00420053005300500058>]TJ
+0.99 0 0 1 491.852 277.921 Tm [<004C0046>]TJ
+0.985 0 0 1 498.575 277.921 Tm [<005A001C>-199<0055>]TJ
+0.99 0 0 1 508.139 277.921 Tm [<0050>-196<004E0050>]TJ
+0.985 0 0 1 522.446 277.921 Tm [<0057>]TJ
+0.99 0 0 1 525.963 277.921 Tm [<0046>-196<004300420044004C00580042>]TJ
+0.985 0 0 1 553.345 277.921 Tm [<0053>]TJ
+0.99 0 0 1 556.203 277.921 Tm [<0045>]TJ
+0.985 0 0 1 559.974 277.921 Tm [<000D>]TJ
+0.99 0 0 1 563.447 277.921 Tm [<005600540046>]TJ
+0.99 0 0 1 491.852 268.955 Tm [<0042>]TJ
+0.985 0 0 1 497.084 268.955 Tm [<0053004A>]TJ
+0.99 0 0 1 501.912 268.955 Tm [<00480049>]TJ
+0.985 0 0 1 509.179 268.955 Tm [<0055>]TJ
+0.99 0 0 1 513.482 268.955 Tm [<0044>]TJ
+0.985 0 0 1 516.322 268.955 Tm [<004D004A>]TJ
+0.99 0 0 1 520.247 268.955 Tm [<0044004C>-202<0050>]TJ
+0.985 0 0 1 531.681 268.955 Tm [<0053>]TJ
+0.99 0 0 1 536.132 268.955 Tm [<0042>]TJ
+0.985 0 0 1 541.364 268.955 Tm [<004D>]TJ
+0.99 0 0 1 543.319 268.955 Tm [<0046>]TJ
+0.985 0 0 1 546.506 268.955 Tm [<00470055>]TJ
+0.99 0 0 1 553.266 268.955 Tm [<0042>]TJ
+0.985 0 0 1 556.904 268.955 Tm [<00530053>]TJ
+0.99 0 0 1 562.619 268.955 Tm [<00500058>]TJ
+0.985 0 0 1 571.401 268.955 Tm [<001C>]TJ
+1 0 0 1 491.852 259.988 Tm [<0042004F0045>-200<005A00500056>-200<00440042004F>-200<0042004D00540050>-200<005600540046>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 251.022 Tm [<003D004F0046005900550054005500460051>]TJ
+/F63 7.97011 Tf 1 0 0 1 524.952 251.022 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 538.095 251.022 Tm [<003D00510053004600570054005500460051>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 242.056 Tm [<0058004A00550049>-200<00430056005500550050004F0054000F>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 293.313 Tm [<005800490046>]TJ
+1.03 0 0 1 130.356 293.313 Tm [<0053>]TJ
+1.02 0 0 1 134.204 293.313 Tm [<0046>-265<004F004600440046005400540042>]TJ
+1.03 0 0 1 173 293.313 Tm [<0053005A000F>]TJ
+1.02 0 0 1 188.552 293.313 Tm [<0023>]TJ
+1.03 0 0 1 194.385 293.313 Tm [<005A>]TJ
+1.02 0 0 1 201.827 293.313 Tm [<00450046>]TJ
+1.03 0 0 1 211.643 293.313 Tm [<0047>]TJ
+1.02 0 0 1 215.07 293.313 Tm [<00420056>]TJ
+1.03 0 0 1 225.049 293.313 Tm [<004D0055000D>-275<004A0055>]TJ
+1.02 0 0 1 245.796 293.313 Tm [<0045005000460054>-265<004F0050>]TJ
+1.03 0 0 1 278.322 293.313 Tm [<0055>]TJ
+1.02 0 0 1 281.995 293.313 Tm [<0049>]TJ
+1.03 0 0 1 287.534 293.313 Tm [<004A>]TJ
+1.02 0 0 1 290.263 293.313 Tm [<004F0048>-265<0046>]TJ
+1.03 0 0 1 307.892 293.313 Tm [<004D>]TJ
+1.02 0 0 1 310.519 293.313 Tm [<00540046>]TJ
+1.03 0 0 1 319.116 293.313 Tm [<000D>-275<004A000F>]TJ
+1.02 0 0 1 329.701 293.313 Tm [<0046>]TJ
+1.03 0 0 1 334.223 293.313 Tm [<000F>-433<004A0055>]TJ
+1.02 0 0 1 350.291 293.313 Tm [<0045005000460054004F>]TJ
+1.03 0 0 1 374.984 293.313 Tm [<00080055>]TJ
+1.02 0 0 1 383.431 293.313 Tm [<0045>]TJ
+1.03 0 0 1 388.725 293.313 Tm [<004A>]TJ
+1.02 0 0 1 391.455 293.313 Tm [<0054>]TJ
+1.03 0 0 1 395.53 293.313 Tm [<0055>]TJ
+1.02 0 0 1 399.204 293.313 Tm [<0056>]TJ
+1.03 0 0 1 404.569 293.313 Tm [<0053>]TJ
+1.02 0 0 1 408.417 293.313 Tm [<0043>]TJ
+1.03 0 0 1 416.29 293.313 Tm [<0055005A>]TJ
+1.02 0 0 1 424.705 293.313 Tm [<0051004600540046>]TJ
+1.03 0 0 1 443.128 293.313 Tm [<00550055004A>]TJ
+1.02 0 0 1 453.205 293.313 Tm [<004F0048>-265<0042004F0045>]TJ
+1 0 0 1 113.386 281.358 Tm [<0054004A004E0051004D005A>-220<0044005300460042005500460054>-220<005500490046>-220<00EC00500058>-220<00500047>-220<005500490046>-220<00510053004600540046004F005500420055004A0050004F>-220<0058004A00550049>-220<003100250027>-220<0044005000450046000F>-293<002900460053004600080054>-220<0042004F>-220<004600590042004E0051004D0046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 257.448 Tm [<003F0056004F004C00470048>]TJ
+1 0 0 1 113.386 245.493 Tm [<00360052005000480057004B004C0051004A00030059004C0056004C0045004F00480011>]TJ
+1 0 0 1 113.386 233.538 Tm [<003F005600570048005300030030005C00030049004C0055005600570003005300550052005300520056004C0057004C0052>-1<00510011>]TJ
+1 0 0 1 113.386 209.627 Tm [<003F0056005700480053000300240051004700030057004B004800510011001100110003003F005600570048005300030057>-1<004B004C00560011>]TJ
+1 0 0 1 113.386 197.672 Tm [<003F0048005100470056004F004C00470048>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 113.386 173.762 Tm [<00580049>]TJ
+1.01 0 0 1 125.651 173.762 Tm [<004A>]TJ
+1.005 0 0 1 128.328 173.762 Tm [<00440049>-222<0050004F>]TJ
+1.01 0 0 1 152.909 173.762 Tm [<0055>]TJ
+1.005 0 0 1 156.512 173.762 Tm [<00490046>-222<00540044>]TJ
+1.01 0 0 1 176.697 173.762 Tm [<0053>]TJ
+1.005 0 0 1 180.47 173.762 Tm [<00460046004F>-222<0051>]TJ
+1.01 0 0 1 202.418 173.762 Tm [<0053>]TJ
+1.005 0 0 1 206.192 173.762 Tm [<005000450056004400460054>-222<0042>-222<00510042>]TJ
+1.01 0 0 1 253.021 173.762 Tm [<0053>]TJ
+1.005 0 0 1 256.794 173.762 Tm [<00420048>]TJ
+1.01 0 0 1 266.006 173.762 Tm [<0053>]TJ
+1.005 0 0 1 269.779 173.762 Tm [<004200510049>-222<0058>]TJ
+1.01 0 0 1 294.04 173.762 Tm [<004A0055>]TJ
+1.005 0 0 1 300.319 173.762 Tm [<0049>]TJ
+1.01 0 0 1 307.999 173.762 Tm [<0041>]TJ
+/F63 9.96264 Tf 1.005 0 0 1 310.031 173.762 Tm [<00340050004E0046>]TJ
+1.01 0 0 1 330.757 173.762 Tm [<0055>]TJ
+1.005 0 0 1 334.228 173.762 Tm [<0049>]TJ
+1.01 0 0 1 339.185 173.762 Tm [<004A>]TJ
+1.005 0 0 1 341.71 173.762 Tm [<004F0048>]TJ
+1.01 0 0 1 353.103 173.762 Tm [<0057004A>]TJ
+1.005 0 0 1 360.137 173.762 Tm [<0054>]TJ
+1.01 0 0 1 363.791 173.762 Tm [<004A>]TJ
+1.005 0 0 1 366.317 173.762 Tm [<0043>]TJ
+1.01 0 0 1 370.983 173.762 Tm [<004D>]TJ
+1.005 0 0 1 373.488 173.762 Tm [<0046>]TJ
+1.01 0 0 1 377.533 173.762 Tm [<000F>]TJ
+1.005 0 0 1 382.731 173.762 Tm [<002E>]TJ
+1.01 0 0 1 391.041 173.762 Tm [<005A>-200<00EB0053>]TJ
+1.005 0 0 1 406.304 173.762 Tm [<0054>]TJ
+1.01 0 0 1 409.959 173.762 Tm [<0055>]TJ
+1.005 0 0 1 415.452 173.762 Tm [<0051>]TJ
+1.01 0 0 1 420.177 173.762 Tm [<0053>]TJ
+1.005 0 0 1 423.84 173.762 Tm [<0050005100500054>]TJ
+1.01 0 0 1 441.011 173.762 Tm [<004A0055004A>]TJ
+1.005 0 0 1 449.534 173.762 Tm [<0050004F>]TJ
+1.01 0 0 1 459.036 173.762 Tm [<000F>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 461.491 173.762 Tm [<0008>]TJ
+1.005 0 0 1 466.541 173.762 Tm [<0042004F0045>]TJ
+0.98 0 0 1 113.386 161.807 Tm [<0042004F0050>]TJ
+0.97 0 0 1 128.197 161.807 Tm [<0055>]TJ
+0.98 0 0 1 131.656 161.807 Tm [<00490046>]TJ
+0.97 0 0 1 141.322 161.807 Tm [<0053>]TJ
+0.98 0 0 1 147.11 161.807 Tm [<0050004F0046>-221<0058>]TJ
+0.97 0 0 1 170.636 161.807 Tm [<004A0055>]TJ
+0.98 0 0 1 176.666 161.807 Tm [<0049>]TJ
+0.97 0 0 1 184.151 161.807 Tm [<0041>]TJ
+/F63 9.96264 Tf 0.985 0 0 1 186.103 161.807 Tm [<0022>]TJ
+0.98 0 0 1 191.844 161.807 Tm [<004F0045>]TJ
+0.97 0 0 1 203.457 161.807 Tm [<0055>]TJ
+0.98 0 0 1 206.791 161.807 Tm [<00490046004F>]TJ
+0.97 0 0 1 220.548 161.807 Tm [<000F000F000F>-274<0055>]TJ
+0.98 0 0 1 233.604 161.807 Tm [<0049>]TJ
+0.97 0 0 1 238.437 161.807 Tm [<004A>]TJ
+0.98 0 0 1 240.863 161.807 Tm [<0054>]TJ
+0.97 0 0 1 244.426 161.807 Tm [<000F>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 246.784 161.807 Tm [<0008>]TJ
+0.98 0 0 1 251.649 161.807 Tm [<00420054>]TJ
+0.97 0 0 1 262.161 161.807 Tm [<004A>]TJ
+0.98 0 0 1 264.732 161.807 Tm [<0054>-221<0056005400560042>]TJ
+0.97 0 0 1 289.468 161.807 Tm [<004D>]TJ
+0.98 0 0 1 294.106 161.807 Tm [<0058>]TJ
+0.97 0 0 1 300.745 161.807 Tm [<004A0055>]TJ
+0.98 0 0 1 306.775 161.807 Tm [<0049>]TJ
+0.97 0 0 1 314.26 161.807 Tm [<0035>]TJ
+1 0 0 1 318.079 159.739 Tm [<0026>]TJ
+0.97 0 0 1 322.363 161.807 Tm [<0039000F>]TJ
+0.98 0 0 1 332.586 161.807 Tm [<0026>]TJ
+0.97 0 0 1 338.005 161.807 Tm [<0059>]TJ
+0.98 0 0 1 342.586 161.807 Tm [<004400460051>]TJ
+0.97 0 0 1 355.961 161.807 Tm [<0055>-224<0055>]TJ
+0.98 0 0 1 365.045 161.807 Tm [<0049004600540046>-221<00510042>]TJ
+0.97 0 0 1 394.663 161.807 Tm [<0053>]TJ
+0.98 0 0 1 398.287 161.807 Tm [<00420048>]TJ
+0.97 0 0 1 407.269 161.807 Tm [<0053>]TJ
+0.98 0 0 1 410.893 161.807 Tm [<0042005100490054>-221<00450050004F>]TJ
+0.97 0 0 1 447.287 161.807 Tm [<00080055>]TJ
+0.98 0 0 1 454.863 161.807 Tm [<00420051005100460042>]TJ
+0.97 0 0 1 478.266 161.807 Tm [<0053>]TJ
+1 0 0 1 113.386 149.851 Tm [<00420055>-220<0050004F00440046000F>]TJ
+0.985 0 0 1 133.311 137.896 Tm [<0022>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 141.311 137.896 Tm [<003F>]TJ
+0.98 0 0 1 145.97 137.896 Tm [<0056>]TJ
+0.97 0 0 1 150.676 137.896 Tm [<0057>]TJ
+0.98 0 0 1 155.334 137.896 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 166.8 137.896 Tm [<004E00460042004F0054>]TJ
+0.97 0 0 1 194.922 137.896 Tm [<005A>]TJ
+0.98 0 0 1 199.387 137.896 Tm [<00500056>]TJ
+0.97 0 0 1 209.473 137.896 Tm [<0008004D004D>]TJ
+0.98 0 0 1 218.426 137.896 Tm [<00490042>]TJ
+0.97 0 0 1 228.18 137.896 Tm [<0057>]TJ
+0.98 0 0 1 232.751 137.896 Tm [<0046>]TJ
+0.97 0 0 1 239.149 137.896 Tm [<0055>]TJ
+0.98 0 0 1 242.609 137.896 Tm [<0050>-210<0044>]TJ
+0.97 0 0 1 253.528 137.896 Tm [<004D004A>]TJ
+0.98 0 0 1 258.572 137.896 Tm [<0044004C>]TJ
+0.97 0 0 1 269.433 137.896 Tm [<0055>]TJ
+0.98 0 0 1 272.892 137.896 Tm [<0050>-210<004E0050>]TJ
+0.97 0 0 1 292.735 137.896 Tm [<0057>]TJ
+0.98 0 0 1 297.306 137.896 Tm [<0046>-210<0050004F>]TJ
+0.97 0 0 1 314.083 137.896 Tm [<000D>]TJ
+0.98 0 0 1 318.532 137.896 Tm [<0042004F0045>-210<005800490042>]TJ
+0.97 0 0 1 351.945 137.896 Tm [<0055>-212<0047>]TJ
+0.98 0 0 1 360.686 137.896 Tm [<0050>]TJ
+0.97 0 0 1 365.617 137.896 Tm [<004D004D>]TJ
+0.98 0 0 1 370.565 137.896 Tm [<005000580054>]TJ
+0.97 0 0 1 388.103 137.896 Tm [<004A0055>]TJ
+0.98 0 0 1 396.187 137.896 Tm [<0058>]TJ
+0.97 0 0 1 402.826 137.896 Tm [<004A004D004D>]TJ
+0.98 0 0 1 412.398 137.896 Tm [<00420051005100460042>]TJ
+0.97 0 0 1 435.801 137.896 Tm [<0053>]TJ
+0.98 0 0 1 441.479 137.896 Tm [<0050004F>-210<00540044>]TJ
+0.97 0 0 1 461.761 137.896 Tm [<0053>]TJ
+0.98 0 0 1 465.385 137.896 Tm [<00460046004F>]TJ
+0.97 0 0 1 479.522 137.896 Tm [<000D>]TJ
+1.02 0 0 1 113.386 125.941 Tm [<005800490046>]TJ
+1.03 0 0 1 130.356 125.941 Tm [<0053>]TJ
+1.02 0 0 1 134.204 125.941 Tm [<004600420054>]TJ
+1.03 0 0 1 149.611 125.941 Tm [<004A0055>-214<004A>]TJ
+1.02 0 0 1 160.939 125.941 Tm [<0054>-216<0050>]TJ
+1.03 0 0 1 172.342 125.941 Tm [<0055>]TJ
+1.02 0 0 1 176.016 125.941 Tm [<00490046>]TJ
+1.03 0 0 1 186.076 125.941 Tm [<0053>]TJ
+1.02 0 0 1 189.924 125.941 Tm [<0058>]TJ
+1.03 0 0 1 196.834 125.941 Tm [<004A>]TJ
+1.02 0 0 1 199.564 125.941 Tm [<00540046>]TJ
+1.03 0 0 1 210.357 125.941 Tm [<004A>]TJ
+1.02 0 0 1 213.086 125.941 Tm [<004F>]TJ
+1.03 0 0 1 218.757 125.941 Tm [<0057004A>]TJ
+1.02 0 0 1 226.34 125.941 Tm [<0054>]TJ
+1.03 0 0 1 230.415 125.941 Tm [<004A>]TJ
+1.02 0 0 1 233.144 125.941 Tm [<0043>]TJ
+1.03 0 0 1 238.317 125.941 Tm [<004D>]TJ
+1.02 0 0 1 240.944 125.941 Tm [<0046>]TJ
+1.03 0 0 1 247.662 125.941 Tm [<0009>]TJ
+1.02 0 0 1 251.027 125.941 Tm [<0043>]TJ
+1.03 0 0 1 256.2 125.941 Tm [<005A>]TJ
+1.02 0 0 1 263.137 125.941 Tm [<00450046>]TJ
+1.03 0 0 1 272.953 125.941 Tm [<0047>]TJ
+1.02 0 0 1 276.38 125.941 Tm [<00420056>]TJ
+1.03 0 0 1 286.359 125.941 Tm [<004D0055>]TJ
+1.02 0 0 1 294.856 125.941 Tm [<0042>]TJ
+1.03 0 0 1 299.469 125.941 Tm [<0055>-214<004D>]TJ
+1.02 0 0 1 307.966 125.941 Tm [<004600420054>]TJ
+1.03 0 0 1 321.176 125.941 Tm [<0055000A000F>-286<002A>]TJ
+1.02 0 0 1 336.99 125.941 Tm [<004F>]TJ
+1.03 0 0 1 344.856 125.941 Tm [<0055>]TJ
+1.02 0 0 1 348.529 125.941 Tm [<00490046>-216<0046>]TJ
+1.03 0 0 1 365.308 125.941 Tm [<0059>]TJ
+1.02 0 0 1 370.172 125.941 Tm [<0042004E0051>]TJ
+1.03 0 0 1 388.341 125.941 Tm [<004D>]TJ
+1.02 0 0 1 390.968 125.941 Tm [<0046>]TJ
+1.03 0 0 1 395.49 125.941 Tm [<000D>-214<0041>]TJ
+/F63 9.96264 Tf 1.02 0 0 1 402.274 125.941 Tm [<00340050004E0046>]TJ
+1.03 0 0 1 423.309 125.941 Tm [<0055>]TJ
+1.02 0 0 1 426.849 125.941 Tm [<0049>]TJ
+1.03 0 0 1 431.879 125.941 Tm [<004A>]TJ
+1.02 0 0 1 434.455 125.941 Tm [<004F0048>]TJ
+1.03 0 0 1 445.963 125.941 Tm [<0057004A>]TJ
+1.02 0 0 1 453.136 125.941 Tm [<0054>]TJ
+1.03 0 0 1 456.845 125.941 Tm [<004A>]TJ
+1.02 0 0 1 459.421 125.941 Tm [<0043>]TJ
+1.03 0 0 1 464.156 125.941 Tm [<004D>]TJ
+1.02 0 0 1 466.711 125.941 Tm [<0046>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 470.816 125.941 Tm [<0008>-214<004A>]TJ
+1.02 0 0 1 477.815 125.941 Tm [<0054>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01EB>]TJ
+ET
+endstream
+endobj
+11 0 obj <<
+/Type /Page
+/Contents 12 0 R
+/Resources 10 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 8 0 R
+>> endobj
+13 0 obj <<
+/D [11 0 R /XYZ 113.386 651.969 null]
+>> endobj
+15 0 obj <<
+/D [11 0 R /XYZ 113.386 615.983 null]
+>> endobj
+16 0 obj <<
+/D [11 0 R /XYZ 113.386 447.579 null]
+>> endobj
+10 0 obj <<
+/Font << /F90 14 0 R /F63 7 0 R /F105 5 0 R /F111 6 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+21 0 obj <<
+/Length 31803
+>>
+stream
+BT
+/F105 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [<0042004D0053004600420045005A>-222<0050004F>-222<005500490046>-222<00540044005300460046004F000D>-222<0054004A004F00440046>-222<004A0055>-222<004A0054>-222<004F00500055>-222<004A004F>-222<005500490046>-222<00540044005000510046>-222<00500047>-222<0042>]TJ
+/F111 7.97011 Tf 1 0 0 1 329.205 640.013 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 355.428 640.013 Tm [<00440050004E004E0042004F0045000D>-222<004300560055>-222<005500490046>-222<0053004600540055>-222<0042005100510046004200530054>]TJ
+1.01 0 0 1 113.386 628.058 Tm [<0051>]TJ
+1.02 0 0 1 118.638 628.058 Tm [<004A>]TJ
+1.01 0 0 1 121.341 628.058 Tm [<0046004400460058>]TJ
+1.02 0 0 1 141.194 628.058 Tm [<004A>]TJ
+1.01 0 0 1 143.897 628.058 Tm [<00540046>]TJ
+1.02 0 0 1 152.41 628.058 Tm [<000D>]TJ
+1.01 0 0 1 157.119 628.058 Tm [<0042004F0045>]TJ
+1.02 0 0 1 174.758 628.058 Tm [<004A0055>-217<0055>]TJ
+1.01 0 0 1 186.951 628.058 Tm [<0042004C00460054>]TJ
+1.02 0 0 1 207.266 628.058 Tm [<0055>]TJ
+1.01 0 0 1 210.904 628.058 Tm [<0049>]TJ
+1.02 0 0 1 216.388 628.058 Tm [<0053>]TJ
+1.01 0 0 1 220.199 628.058 Tm [<00460046>-220<0044>]TJ
+1.02 0 0 1 235.423 628.058 Tm [<004D004A>]TJ
+1.01 0 0 1 240.728 628.058 Tm [<0044004C0054>]TJ
+1.02 0 0 1 256.052 628.058 Tm [<0055>]TJ
+1.01 0 0 1 259.69 628.058 Tm [<0050>]TJ
+1.02 0 0 1 266.985 628.058 Tm [<0053>]TJ
+1.01 0 0 1 270.796 628.058 Tm [<0046004200440049>]TJ
+1.02 0 0 1 291.595 628.058 Tm [<0055>]TJ
+1.01 0 0 1 295.233 628.058 Tm [<00490046>-220<0046004F0045>-220<0050>]TJ
+1.02 0 0 1 330.038 628.058 Tm [<0047>-217<0055>]TJ
+1.01 0 0 1 339.284 628.058 Tm [<00490046>-220<0054>]TJ
+1.02 0 0 1 355.494 628.058 Tm [<004D004A>]TJ
+1.01 0 0 1 360.799 628.058 Tm [<00450046>]TJ
+1.02 0 0 1 370.519 628.058 Tm [<000F>]TJ
+1.01 0 0 1 375.997 628.058 Tm [<00240050004F>]TJ
+1.02 0 0 1 392.579 628.058 Tm [<0057>]TJ
+1.01 0 0 1 397.386 628.058 Tm [<0046>]TJ
+1.02 0 0 1 401.863 628.058 Tm [<0053>]TJ
+1.01 0 0 1 405.674 628.058 Tm [<00540046>]TJ
+1.02 0 0 1 414.187 628.058 Tm [<004D005A000D>]TJ
+1.01 0 0 1 426.192 628.058 Tm [<005800490046004F>-220<004E0050>]TJ
+1.02 0 0 1 464.076 628.058 Tm [<0057004A>]TJ
+1.01 0 0 1 471.586 628.058 Tm [<004F0048>]TJ
+1 0 0 1 113.386 616.103 Tm [<004300420044004C0058004200530045000D>-220<0046004A0055004900460053>-220<0058004A00550049>-220<0042>-220<0053004A004800490055>-220<0044004D004A0044004C>-220<00500053>-220<0042>-220<004D004600470055>-220<00420053005300500058>-220<004C0046005A000D>-220<00540055004600510054>-220<0045004A0054004200510051004600420053000F>]TJ
+0.97 0 0 1 133.311 604.148 Tm [<0265>]TJ
+0.98 0 0 1 143.12 604.148 Tm [<0046>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 149.633 604.148 Tm [<003F>]TJ
+0.98 0 0 1 154.291 604.148 Tm [<0056>]TJ
+0.97 0 0 1 158.998 604.148 Tm [<0057>]TJ
+0.98 0 0 1 163.656 604.148 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 175.237 604.148 Tm [<00440050004E004E0042004F0045>-222<0042>]TJ
+0.97 0 0 1 221.526 604.148 Tm [<00EA>]TJ
+0.98 0 0 1 227.624 604.148 Tm [<00460044>]TJ
+0.97 0 0 1 235.903 604.148 Tm [<0055>]TJ
+0.98 0 0 1 239.363 604.148 Tm [<0054>]TJ
+0.97 0 0 1 245.447 604.148 Tm [<0055>]TJ
+0.98 0 0 1 248.906 604.148 Tm [<00490046>-222<00440050004F>]TJ
+0.97 0 0 1 275.054 604.148 Tm [<0055>]TJ
+0.98 0 0 1 278.513 604.148 Tm [<0046004F>]TJ
+0.97 0 0 1 288.306 604.148 Tm [<0055>]TJ
+0.98 0 0 1 293.934 604.148 Tm [<0050>]TJ
+0.97 0 0 1 298.865 604.148 Tm [<0047>]TJ
+0.98 0 0 1 304.261 604.148 Tm [<005800490042>]TJ
+0.97 0 0 1 320.653 604.148 Tm [<0055>-224<0047>]TJ
+0.98 0 0 1 329.509 604.148 Tm [<0050>]TJ
+0.97 0 0 1 334.44 604.148 Tm [<004D004D>]TJ
+0.98 0 0 1 339.388 604.148 Tm [<005000580054>-222<0050004F>]TJ
+0.97 0 0 1 367.419 604.148 Tm [<004D005A000D>]TJ
+0.98 0 0 1 378.899 604.148 Tm [<00560051>]TJ
+0.97 0 0 1 391.319 604.148 Tm [<0055>]TJ
+0.98 0 0 1 394.778 604.148 Tm [<0050>]TJ
+0.97 0 0 1 401.878 604.148 Tm [<0055>]TJ
+0.98 0 0 1 405.337 604.148 Tm [<00490046>-222<004F0046>]TJ
+0.97 0 0 1 426.964 604.148 Tm [<00590055>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 437.173 604.148 Tm [<003F>]TJ
+0.98 0 0 1 441.831 604.148 Tm [<0056>]TJ
+0.97 0 0 1 446.537 604.148 Tm [<0057>]TJ
+0.98 0 0 1 451.196 604.148 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 462.777 604.148 Tm [<0050>]TJ
+0.97 0 0 1 467.707 604.148 Tm [<0053>-224<0055>]TJ
+0.98 0 0 1 476.959 604.148 Tm [<0050>]TJ
+1.03 0 0 1 113.386 592.193 Tm [<0055>]TJ
+1.02 0 0 1 117.059 592.193 Tm [<00490046>-227<0054>]TJ
+1.03 0 0 1 133.503 592.193 Tm [<004D004A>]TJ
+1.02 0 0 1 138.86 592.193 Tm [<00450046>]TJ
+1.03 0 0 1 148.676 592.193 Tm [<0008>]TJ
+1.02 0 0 1 150.749 592.193 Tm [<0054>-227<0046004F0045>]TJ
+1.03 0 0 1 172.619 592.193 Tm [<000F>]TJ
+1.02 0 0 1 178.406 592.193 Tm [<00340050004E0046>]TJ
+1.03 0 0 1 201.311 592.193 Tm [<0055>]TJ
+1.02 0 0 1 204.985 592.193 Tm [<0049>]TJ
+1.03 0 0 1 210.523 592.193 Tm [<004A>]TJ
+1.02 0 0 1 213.253 592.193 Tm [<004F0048>-227<00430046>]TJ
+1.03 0 0 1 235.662 592.193 Tm [<0055>]TJ
+1.02 0 0 1 239.335 592.193 Tm [<005800460046004F>]TJ
+1.03 0 0 1 263.268 592.193 Tm [<0055>]TJ
+1.02 0 0 1 266.942 592.193 Tm [<00490046>-227<004300460048>]TJ
+1.03 0 0 1 293.741 592.193 Tm [<004A>]TJ
+1.02 0 0 1 296.47 592.193 Tm [<004F004F>]TJ
+1.03 0 0 1 307.811 592.193 Tm [<004A>]TJ
+1.02 0 0 1 310.541 592.193 Tm [<004F0048>-227<0050>]TJ
+1.03 0 0 1 328.387 592.193 Tm [<0047>-225<0055>]TJ
+1.02 0 0 1 337.796 592.193 Tm [<00490046>-227<0054>]TJ
+1.03 0 0 1 354.24 592.193 Tm [<004D004A>]TJ
+1.02 0 0 1 359.597 592.193 Tm [<00450046>-227<0042004F0045>]TJ
+1.03 0 0 1 389.609 592.193 Tm [<0055>]TJ
+1.02 0 0 1 393.282 592.193 Tm [<00490046>]TJ
+1.03 0 0 1 405.651 592.193 Tm [<00EB0053>]TJ
+1.02 0 0 1 415.256 592.193 Tm [<0054>]TJ
+1.03 0 0 1 419.331 592.193 Tm [<0055>]TJ
+1.02 0 0 1 425.313 592.193 Tm [<0054>]TJ
+1.03 0 0 1 429.388 592.193 Tm [<0055>]TJ
+1.02 0 0 1 433.062 592.193 Tm [<00460051>]TJ
+1.03 0 0 1 445.197 592.193 Tm [<004A>]TJ
+1.02 0 0 1 447.926 592.193 Tm [<0054>-227<0042>]TJ
+1.03 0 0 1 458.923 592.193 Tm [<004D>]TJ
+1.02 0 0 1 461.55 592.193 Tm [<00580042>]TJ
+1.03 0 0 1 473.074 592.193 Tm [<005A>]TJ
+1.02 0 0 1 477.815 592.193 Tm [<0054>]TJ
+1 0 0 1 113.386 580.238 Tm [<0057004A0054004A0043004D0046000F>]TJ
+1.02 0 0 1 133.311 568.282 Tm [<0026>]TJ
+1.03 0 0 1 138.951 568.282 Tm [<0057>]TJ
+1.02 0 0 1 143.805 568.282 Tm [<0046>]TJ
+1.03 0 0 1 148.327 568.282 Tm [<0053005A0055>]TJ
+1.02 0 0 1 160.589 568.282 Tm [<0049>]TJ
+1.03 0 0 1 166.127 568.282 Tm [<004A>]TJ
+1.02 0 0 1 168.857 568.282 Tm [<004F0048>-232<00430046>]TJ
+1.03 0 0 1 191.32 568.282 Tm [<0055>]TJ
+1.02 0 0 1 194.993 568.282 Tm [<005800460046004F>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 218.98 568.282 Tm [<003F>]TJ
+1.02 0 0 1 223.927 568.282 Tm [<0056>]TJ
+1.03 0 0 1 228.825 568.282 Tm [<004F004C>]TJ
+1.02 0 0 1 238.718 568.282 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 250.877 568.282 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 268.818 568.282 Tm [<003F>]TJ
+1.02 0 0 1 273.764 568.282 Tm [<0048005100470056>]TJ
+1.03 0 0 1 293.357 568.282 Tm [<004F004C>]TJ
+1.02 0 0 1 303.25 568.282 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 315.409 568.282 Tm [<004A>]TJ
+1.02 0 0 1 318.139 568.282 Tm [<0054>-232<0050004F>]TJ
+1.03 0 0 1 335.378 568.282 Tm [<004D005A>]TJ
+1.02 0 0 1 345.108 568.282 Tm [<0050004F0046>-232<0051004200480046>]TJ
+1.03 0 0 1 381.97 568.282 Tm [<000F>]TJ
+1.02 0 0 1 387.919 568.282 Tm [<0034>]TJ
+1.03 0 0 1 392.919 568.282 Tm [<0055>]TJ
+1.02 0 0 1 396.592 568.282 Tm [<004600510054>-232<00420051005100460042>]TJ
+1.03 0 0 1 437.214 568.282 Tm [<0053>]TJ
+1.02 0 0 1 443.425 568.282 Tm [<0048>]TJ
+1.03 0 0 1 448.16 568.282 Tm [<0053>]TJ
+1.02 0 0 1 452.008 568.282 Tm [<0042004500560042>]TJ
+1.03 0 0 1 471.895 568.282 Tm [<004D004D005A>]TJ
+0.98 0 0 1 113.386 556.327 Tm [<0043004600440042005600540046>]TJ
+0.97 0 0 1 146.351 556.327 Tm [<0055>]TJ
+0.98 0 0 1 149.81 556.327 Tm [<00490046>]TJ
+0.97 0 0 1 159.476 556.327 Tm [<005A>]TJ
+0.98 0 0 1 165.809 556.327 Tm [<0042>]TJ
+0.97 0 0 1 170.242 556.327 Tm [<0053>]TJ
+0.98 0 0 1 173.866 556.327 Tm [<0046>]TJ
+0.97 0 0 1 180.079 556.327 Tm [<004A>]TJ
+0.98 0 0 1 182.649 556.327 Tm [<004F0054>]TJ
+0.97 0 0 1 192.013 556.327 Tm [<00550053>]TJ
+0.98 0 0 1 199.096 556.327 Tm [<00560044>]TJ
+0.97 0 0 1 208.186 556.327 Tm [<0055>]TJ
+0.98 0 0 1 211.645 556.327 Tm [<00460045>]TJ
+0.97 0 0 1 222.945 556.327 Tm [<0055>]TJ
+0.98 0 0 1 226.405 556.327 Tm [<0050>-191<00450050>-191<00540050>]TJ
+0.97 0 0 1 253.935 556.327 Tm [<000D>]TJ
+0.98 0 0 1 258.236 556.327 Tm [<00430056>]TJ
+0.97 0 0 1 268.361 556.327 Tm [<0055>-193<0055>]TJ
+0.98 0 0 1 277.149 556.327 Tm [<00490046>]TJ
+0.97 0 0 1 286.814 556.327 Tm [<005A>]TJ
+0.98 0 0 1 293.147 556.327 Tm [<0042>]TJ
+0.97 0 0 1 297.58 556.327 Tm [<0053>]TJ
+0.98 0 0 1 301.204 556.327 Tm [<0046>-191<0050004F>]TJ
+0.97 0 0 1 319.664 556.327 Tm [<0055>]TJ
+0.98 0 0 1 323.124 556.327 Tm [<00490046>-191<00540042004E0046>-191<0051004200480046>]TJ
+0.97 0 0 1 375.57 556.327 Tm [<000D>]TJ
+0.98 0 0 1 379.871 556.327 Tm [<00420054>-191<00510049>]TJ
+0.97 0 0 1 400.505 556.327 Tm [<005A>]TJ
+0.98 0 0 1 404.969 556.327 Tm [<0054>]TJ
+0.97 0 0 1 408.885 556.327 Tm [<004A>]TJ
+0.98 0 0 1 411.455 556.327 Tm [<00440042>]TJ
+0.97 0 0 1 419.822 556.327 Tm [<004D004D005A>]TJ
+0.98 0 0 1 431.103 556.327 Tm [<00420054>]TJ
+0.97 0 0 1 441.32 556.327 Tm [<004A>]TJ
+0.98 0 0 1 443.89 556.327 Tm [<0054>-191<0051005000540054>]TJ
+0.97 0 0 1 467.531 556.327 Tm [<004A>]TJ
+0.98 0 0 1 470.102 556.327 Tm [<0043>]TJ
+0.97 0 0 1 475.071 556.327 Tm [<004D>]TJ
+0.98 0 0 1 477.545 556.327 Tm [<0046>]TJ
+1 0 0 1 113.386 544.372 Tm [<004700500053>-220<0042>-220<00440050004D004D004600440055004A0050004F>-220<00500047>-220<0043005A005500460054>-220<000900580049004A00440049>-220<00440042004F>-220<00430046>-220<00510053004A004F005500460045000D>-220<005500490050005600480049000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 70.982 520.462 Tm [<003F0056004F004C0047004800510052>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 51.773 508.506 Tm [<003F0056004F004C00470048005100580050004500480055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 113.386 508.506 Tm [<0265>]TJ
+0.98 0 0 1 123.195 508.506 Tm [<0046>]TJ
+0.97 0 0 1 129.711 508.506 Tm [<00EB0053>]TJ
+0.98 0 0 1 138.756 508.506 Tm [<0054>]TJ
+0.97 0 0 1 142.671 508.506 Tm [<0055>]TJ
+0.98 0 0 1 148.302 508.506 Tm [<0050>]TJ
+0.97 0 0 1 153.232 508.506 Tm [<0047>-224<0055>]TJ
+0.98 0 0 1 162.091 508.506 Tm [<0049005000540046>]TJ
+0.97 0 0 1 182.774 508.506 Tm [<004A>]TJ
+0.98 0 0 1 185.344 508.506 Tm [<0054>-222<0042>-222<004400500056004F>]TJ
+0.97 0 0 1 217.503 508.506 Tm [<0055>-224<0053>]TJ
+0.98 0 0 1 226.758 508.506 Tm [<00460048>]TJ
+0.97 0 0 1 235.652 508.506 Tm [<004A>]TJ
+0.98 0 0 1 238.223 508.506 Tm [<0054>]TJ
+0.97 0 0 1 242.138 508.506 Tm [<0055>]TJ
+0.98 0 0 1 245.598 508.506 Tm [<0046>]TJ
+0.97 0 0 1 249.942 508.506 Tm [<0053>]TJ
+0.98 0 0 1 255.737 508.506 Tm [<00490050>]TJ
+0.97 0 0 1 265.989 508.506 Tm [<004D>]TJ
+0.98 0 0 1 268.463 508.506 Tm [<0045>]TJ
+0.97 0 0 1 273.55 508.506 Tm [<004A>]TJ
+0.98 0 0 1 276.12 508.506 Tm [<004F0048>]TJ
+0.97 0 0 1 288.289 508.506 Tm [<0055>]TJ
+0.98 0 0 1 291.749 508.506 Tm [<00490046>-222<0054>]TJ
+0.97 0 0 1 307.501 508.506 Tm [<004D004A>]TJ
+0.98 0 0 1 312.546 508.506 Tm [<00450046>]TJ
+0.97 0 0 1 321.977 508.506 Tm [<0008>]TJ
+0.98 0 0 1 323.929 508.506 Tm [<0054>-222<004F0056004E00430046>]TJ
+0.97 0 0 1 357.861 508.506 Tm [<0053>-224<0009004A000F>]TJ
+0.98 0 0 1 371.764 508.506 Tm [<0046>]TJ
+0.97 0 0 1 376.109 508.506 Tm [<000F>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 381.392 508.506 Tm [<003F>]TJ
+0.98 0 0 1 386.05 508.506 Tm [<0046005200580051>]TJ
+0.97 0 0 1 404.875 508.506 Tm [<00570013>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 414.192 508.506 Tm [<000A000F>-301<0265>]TJ
+0.98 0 0 1 432.453 508.506 Tm [<0046>-222<0054004600440050004F0045>]TJ
+0.97 0 0 1 468.8 508.506 Tm [<004A>]TJ
+0.98 0 0 1 471.371 508.506 Tm [<0054>-222<0042>]TJ
+1 0 0 1 113.386 496.551 Tm [<004E0042004400530050>-220<0055004900420055>-220<00530046005500560053004F0054>-220<004A00550054>-220<00570042004D00560046000F>]TJ
+0.98 0 0 1 133.311 484.596 Tm [<002F00500058>]TJ
+0.97 0 0 1 153.614 484.596 Tm [<005A>]TJ
+0.98 0 0 1 158.078 484.596 Tm [<00500056>-178<004C004F00500058>]TJ
+0.97 0 0 1 193.538 484.596 Tm [<0055>]TJ
+0.98 0 0 1 196.997 484.596 Tm [<00490046>-178<004300460054>]TJ
+0.97 0 0 1 221.635 484.596 Tm [<0055>]TJ
+0.98 0 0 1 226.837 484.596 Tm [<00510042>]TJ
+0.97 0 0 1 236.366 484.596 Tm [<00530055>]TJ
+0.98 0 0 1 245.192 484.596 Tm [<0050>]TJ
+0.97 0 0 1 250.122 484.596 Tm [<0047>]TJ
+0.98 0 0 1 255.092 484.596 Tm [<004900500058>]TJ
+0.97 0 0 1 273.725 484.596 Tm [<0055>]TJ
+0.98 0 0 1 277.185 484.596 Tm [<0049>]TJ
+0.97 0 0 1 282.506 484.596 Tm [<004A>]TJ
+0.98 0 0 1 285.076 484.596 Tm [<004F00480054>-178<00580050>]TJ
+0.97 0 0 1 312.301 484.596 Tm [<0053>]TJ
+0.98 0 0 1 315.925 484.596 Tm [<004C>]TJ
+0.97 0 0 1 320.797 484.596 Tm [<000F>-286<0265>]TJ
+0.98 0 0 1 335.746 484.596 Tm [<0046>]TJ
+0.97 0 0 1 341.833 484.596 Tm [<0053>]TJ
+0.98 0 0 1 345.457 484.596 Tm [<00460054>]TJ
+0.97 0 0 1 353.716 484.596 Tm [<0055000D>-189<004A000F>]TJ
+0.98 0 0 1 366.314 484.596 Tm [<0046>]TJ
+0.97 0 0 1 370.659 484.596 Tm [<000F>-286<0055>]TJ
+0.98 0 0 1 379.258 484.596 Tm [<00490046>-178<00500051>]TJ
+0.97 0 0 1 400.693 484.596 Tm [<0055004A>]TJ
+0.98 0 0 1 406.724 484.596 Tm [<0050004F0042>]TJ
+0.97 0 0 1 421.535 484.596 Tm [<004D>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 425.751 484.596 Tm [<001F>]TJ
+0.98 0 0 1 430.409 484.596 Tm [<0044>]TJ
+0.97 0 0 1 435.115 484.596 Tm [<005700570055004C>]TJ
+0.98 0 0 1 453.748 484.596 Tm [<00450058>]TJ
+0.97 0 0 1 463.161 484.596 Tm [<0057>]TJ
+0.98 0 0 1 467.819 484.596 Tm [<00480056>]TJ
+0.97 0 0 1 477.232 484.596 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 472.641 Tm [<0042004F0045>-197<0042>-197<00430056004F00440049>-197<0050>]TJ
+0.97 0 0 1 168.318 472.641 Tm [<0047>]TJ
+0.98 0 0 1 173.47 472.641 Tm [<0050>]TJ
+0.97 0 0 1 178.4 472.641 Tm [<0055>]TJ
+0.98 0 0 1 181.86 472.641 Tm [<00490046>]TJ
+0.97 0 0 1 191.526 472.641 Tm [<0053>-199<0055>]TJ
+0.98 0 0 1 200.533 472.641 Tm [<0049>]TJ
+0.97 0 0 1 205.854 472.641 Tm [<004A>]TJ
+0.98 0 0 1 208.425 472.641 Tm [<004F00480054>]TJ
+0.97 0 0 1 222.338 472.641 Tm [<000D>-204<004A>]TJ
+0.98 0 0 1 229.254 472.641 Tm [<0054>-197<0050004F>]TJ
+0.97 0 0 1 245.472 472.641 Tm [<004D005A>]TJ
+0.98 0 0 1 254.335 472.641 Tm [<0045004600440050>]TJ
+0.97 0 0 1 272.631 472.641 Tm [<0053>]TJ
+0.98 0 0 1 276.255 472.641 Tm [<0042>]TJ
+0.97 0 0 1 280.688 472.641 Tm [<0055004A>]TJ
+0.98 0 0 1 286.718 472.641 Tm [<0050004F>]TJ
+0.97 0 0 1 297.097 472.641 Tm [<000D>]TJ
+0.98 0 0 1 301.442 472.641 Tm [<0042>]TJ
+0.97 0 0 1 305.875 472.641 Tm [<004D0055>]TJ
+0.98 0 0 1 311.808 472.641 Tm [<00490050005600480049>]TJ
+0.97 0 0 1 339.01 472.641 Tm [<004A0055>]TJ
+0.98 0 0 1 346.964 472.641 Tm [<004E>]TJ
+0.97 0 0 1 354.892 472.641 Tm [<004A>]TJ
+0.98 0 0 1 357.463 472.641 Tm [<00480049>]TJ
+0.97 0 0 1 367.334 472.641 Tm [<0055>]TJ
+0.98 0 0 1 372.718 472.641 Tm [<00430046>-197<0050>]TJ
+0.97 0 0 1 388.887 472.641 Tm [<0047>-199<004A>]TJ
+0.98 0 0 1 396.609 472.641 Tm [<004F>]TJ
+0.97 0 0 1 402.057 472.641 Tm [<0055>]TJ
+0.98 0 0 1 405.517 472.641 Tm [<0046>]TJ
+0.97 0 0 1 409.862 472.641 Tm [<0053>]TJ
+0.98 0 0 1 413.486 472.641 Tm [<00460054>]TJ
+0.97 0 0 1 421.745 472.641 Tm [<0055>-199<0055>]TJ
+0.98 0 0 1 430.589 472.641 Tm [<00500050>]TJ
+0.97 0 0 1 442.374 472.641 Tm [<0055>]TJ
+0.98 0 0 1 445.834 472.641 Tm [<0050>-197<0046004F>]TJ
+0.97 0 0 1 462.482 472.641 Tm [<004D004A0057>]TJ
+0.98 0 0 1 472.097 472.641 Tm [<0046004F>]TJ
+1 0 0 1 113.386 460.686 Tm [<005A005000560053>-220<0054004D004A004500460054000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 424.82 Tm [<00310053004600540046004F005500420055004A0050004F>-200<0042004F0045>-200<00490042004F0045005000560055>]TJ
+0 g 0 G
+/F63 9.96264 Tf 0.97 0 0 1 113.386 412.865 Tm [<002D>]TJ
+0.98 0 0 1 118.343 412.865 Tm [<00460044>]TJ
+0.97 0 0 1 125.803 412.865 Tm [<0055>]TJ
+0.98 0 0 1 129.137 412.865 Tm [<0056>]TJ
+0.97 0 0 1 133.891 412.865 Tm [<0053>]TJ
+0.98 0 0 1 137.409 412.865 Tm [<0046>]TJ
+0.97 0 0 1 141.353 412.865 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 146.95 412.865 Tm [<0042>]TJ
+0.97 0 0 1 151.382 412.865 Tm [<004D004D>]TJ
+0.98 0 0 1 156.33 412.865 Tm [<005000580054>]TJ
+0.97 0 0 1 173.893 412.865 Tm [<005A>]TJ
+0.98 0 0 1 178.358 412.865 Tm [<00500056>]TJ
+0.97 0 0 1 190.522 412.865 Tm [<0055>]TJ
+0.98 0 0 1 193.982 412.865 Tm [<0050>-212<004600420054>]TJ
+0.97 0 0 1 213.683 412.865 Tm [<004A004D005A>]TJ
+0.98 0 0 1 225.271 412.865 Tm [<0051>]TJ
+0.97 0 0 1 230.368 412.865 Tm [<0053>]TJ
+0.98 0 0 1 233.991 412.865 Tm [<00500045005600440046>-212<0042>-213<0051>]TJ
+0.97 0 0 1 271.129 412.865 Tm [<0053>]TJ
+0.98 0 0 1 274.753 412.865 Tm [<004600540046004F>]TJ
+0.97 0 0 1 292.806 412.865 Tm [<0055>]TJ
+0.98 0 0 1 296.265 412.865 Tm [<0042>]TJ
+0.97 0 0 1 300.698 412.865 Tm [<0055004A>]TJ
+0.98 0 0 1 306.728 412.865 Tm [<0050004F>]TJ
+0.97 0 0 1 319.185 412.865 Tm [<0047>]TJ
+0.98 0 0 1 322.413 412.865 Tm [<0050>]TJ
+0.97 0 0 1 327.343 412.865 Tm [<0053>]TJ
+0.98 0 0 1 333.046 412.865 Tm [<00540044>]TJ
+0.97 0 0 1 340.896 412.865 Tm [<0053>]TJ
+0.98 0 0 1 344.52 412.865 Tm [<00460046004F>-212<0042004F0045>-213<0042>-213<00490042004F004500500056>]TJ
+0.97 0 0 1 414.667 412.865 Tm [<0055>]TJ
+0.98 0 0 1 420.205 412.865 Tm [<00500056>]TJ
+0.97 0 0 1 430.29 412.865 Tm [<0055>]TJ
+0.98 0 0 1 435.829 412.865 Tm [<0050>]TJ
+0.97 0 0 1 440.759 412.865 Tm [<0047>-215<0055>]TJ
+0.98 0 0 1 449.525 412.865 Tm [<00490046>-212<00540042004E0046>]TJ
+0.97 0 0 1 113.386 400.91 Tm [<00EB004D>]TJ
+0.98 0 0 1 121.281 400.91 Tm [<0046>]TJ
+0.97 0 0 1 125.626 400.91 Tm [<000F>-298<0265>]TJ
+0.98 0 0 1 140.689 400.91 Tm [<0046>-213<00500056>]TJ
+0.97 0 0 1 157.206 400.91 Tm [<0055>]TJ
+0.98 0 0 1 160.666 400.91 Tm [<00510056>]TJ
+0.97 0 0 1 170.917 400.91 Tm [<0055>]TJ
+0.98 0 0 1 176.464 400.91 Tm [<0045004600510046004F00450054>-213<0050004F>]TJ
+0.97 0 0 1 224.338 400.91 Tm [<0055>]TJ
+0.98 0 0 1 227.797 400.91 Tm [<00490046>]TJ
+0.97 0 0 1 239.55 400.91 Tm [<0057>]TJ
+0.98 0 0 1 244.121 400.91 Tm [<0042>]TJ
+0.97 0 0 1 248.553 400.91 Tm [<004D>]TJ
+0.98 0 0 1 251.027 400.91 Tm [<00560046>-213<0050>]TJ
+0.97 0 0 1 267.544 400.91 Tm [<0047>-215<0055>]TJ
+0.98 0 0 1 276.318 400.91 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 288.07 400.91 Tm [<0050005200470048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 308.982 400.91 Tm [<0042>]TJ
+0.97 0 0 1 313.414 400.91 Tm [<005500550053004A>]TJ
+0.98 0 0 1 326.528 400.91 Tm [<00430056>]TJ
+0.97 0 0 1 336.653 400.91 Tm [<0055>]TJ
+0.98 0 0 1 340.112 400.91 Tm [<0046>]TJ
+0.97 0 0 1 346.544 400.91 Tm [<004A>]TJ
+0.98 0 0 1 349.114 400.91 Tm [<004F>]TJ
+0.97 0 0 1 356.649 400.91 Tm [<0055>]TJ
+0.98 0 0 1 360.108 400.91 Tm [<00490046>]TJ
+/F117 7.97011 Tf 0.97 0 0 1 371.861 400.91 Tm [<004D>]TJ
+0.98 0 0 1 376.519 400.91 Tm [<00520045>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 388.018 400.91 Tm [<00510042>]TJ
+0.97 0 0 1 397.547 400.91 Tm [<0053>]TJ
+0.98 0 0 1 401.171 400.91 Tm [<0042004E0046>]TJ
+0.97 0 0 1 417.876 400.91 Tm [<0055>]TJ
+0.98 0 0 1 421.336 400.91 Tm [<0046>]TJ
+0.97 0 0 1 425.68 400.91 Tm [<0053000F>-298<002A0047>-216<004A0055>-216<004A>]TJ
+0.98 0 0 1 453.692 400.91 Tm [<0054>-213<00540046>]TJ
+0.97 0 0 1 467.953 400.91 Tm [<0055>-216<0055>]TJ
+0.98 0 0 1 476.959 400.91 Tm [<0050>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 400.641 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 400.641 Tm [<0022005500550053004A00430056005500460054>-200<004700500053>-200<005500490046>-200<004B00500043>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.015 0 0 1 113.386 388.955 Tm [<0053>]TJ
+1.02 0 0 1 118.26 388.955 Tm [<0055>]TJ
+1.015 0 0 1 123.159 388.955 Tm [<0048005600480051>]TJ
+1.02 0 0 1 142.656 388.955 Tm [<0057>]TJ
+1.015 0 0 1 147.554 388.955 Tm [<0044>]TJ
+1.02 0 0 1 152.429 388.955 Tm [<0057004C>]TJ
+1.015 0 0 1 162.225 388.955 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 171.974 388.955 Tm [<000D>-217<0055>]TJ
+1.015 0 0 1 180.313 388.955 Tm [<00490046004F>-218<0054>]TJ
+1.02 0 0 1 202.229 388.955 Tm [<0055>]TJ
+1.015 0 0 1 205.867 388.955 Tm [<004600510054>-218<0043004600490042>]TJ
+1.02 0 0 1 241.657 388.955 Tm [<0057>]TJ
+1.015 0 0 1 246.463 388.955 Tm [<0046>-218<00420054>-218<00450046>]TJ
+1.02 0 0 1 273.792 388.955 Tm [<00EB>]TJ
+1.015 0 0 1 279.493 388.955 Tm [<004F00460045>-218<004200430050>]TJ
+1.02 0 0 1 311.956 388.955 Tm [<0057>]TJ
+1.015 0 0 1 316.762 388.955 Tm [<0046>]TJ
+1.02 0 0 1 321.262 388.955 Tm [<000F>-292<002A0047>-217<004A0055>-217<004A>]TJ
+1.015 0 0 1 346.867 388.955 Tm [<0054>-218<00540046>]TJ
+1.02 0 0 1 361.684 388.955 Tm [<0055>-217<0055>]TJ
+1.015 0 0 1 371.168 388.955 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.015 0 0 1 378.482 388.955 Tm [<004B00440051004700520058>]TJ
+1.02 0 0 1 407.728 388.955 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 412.626 388.955 Tm [<000D>-217<0055>]TJ
+1.015 0 0 1 420.965 388.955 Tm [<00490046004F>-218<0050004F>]TJ
+1.02 0 0 1 449.576 388.955 Tm [<004D005A>-217<0055>]TJ
+1.015 0 0 1 462.717 388.955 Tm [<0049005000540046>]TJ
+1.01 0 0 1 113.386 377 Tm [<0054>]TJ
+1.015 0 0 1 117.421 377 Tm [<0055>]TJ
+1.01 0 0 1 121.041 377 Tm [<004600510054>]TJ
+1.015 0 0 1 136.994 377 Tm [<0055>]TJ
+1.01 0 0 1 140.614 377 Tm [<00490042>]TJ
+1.015 0 0 1 150.666 377 Tm [<0055>]TJ
+1.01 0 0 1 156.474 377 Tm [<00490042>]TJ
+1.015 0 0 1 166.526 377 Tm [<0057>]TJ
+1.01 0 0 1 171.309 377 Tm [<0046>]TJ
+1.015 0 0 1 177.975 377 Tm [<0055>]TJ
+1.01 0 0 1 181.595 377 Tm [<00490046>]TJ
+1.015 0 0 1 193.745 377 Tm [<0057>]TJ
+1.01 0 0 1 198.528 377 Tm [<0042>]TJ
+1.015 0 0 1 203.096 377 Tm [<004D>]TJ
+1.01 0 0 1 205.685 377 Tm [<00560046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.015 0 0 1 217.663 377 Tm [<00570055>]TJ
+1.01 0 0 1 227.412 377 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 239.3 377 Tm [<0047>]TJ
+1.01 0 0 1 242.678 377 Tm [<0050>]TJ
+1.015 0 0 1 247.759 377 Tm [<0053>-216<0055>]TJ
+1.01 0 0 1 257.359 377 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 269.509 377 Tm [<004B00440051004700520058>]TJ
+1.015 0 0 1 298.611 377 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 305.673 377 Tm [<00510042>]TJ
+1.015 0 0 1 315.494 377 Tm [<0053>]TJ
+1.01 0 0 1 319.286 377 Tm [<0042004E0046>]TJ
+1.015 0 0 1 336.502 377 Tm [<0055>]TJ
+1.01 0 0 1 340.122 377 Tm [<0046>]TJ
+1.015 0 0 1 344.6 377 Tm [<0053>]TJ
+1.01 0 0 1 350.58 377 Tm [<00420051005100460042>]TJ
+1.015 0 0 1 374.699 377 Tm [<0053>]TJ
+1.01 0 0 1 380.679 377 Tm [<0050004F>]TJ
+1.015 0 0 1 393.563 377 Tm [<0055>]TJ
+1.01 0 0 1 397.183 377 Tm [<00490046>-217<0051004200480046>]TJ
+1.015 0 0 1 428.32 377 Tm [<000F>]TJ
+1.005 0 0 1 433.719 377 Tm [<0030>]TJ
+1.015 0 0 1 440.908 377 Tm [<0055>]TJ
+1.01 0 0 1 444.528 377 Tm [<00490046>]TJ
+1.015 0 0 1 454.49 377 Tm [<0053>]TJ
+1.01 0 0 1 460.469 377 Tm [<0054>]TJ
+1.015 0 0 1 464.504 377 Tm [<0055>]TJ
+1.01 0 0 1 468.125 377 Tm [<004600510054>]TJ
+1.005 0 0 1 113.386 365.044 Tm [<0042>]TJ
+1.01 0 0 1 117.931 365.044 Tm [<0053>]TJ
+1.005 0 0 1 121.705 365.044 Tm [<0046>-219<0054>]TJ
+1.01 0 0 1 132.372 365.044 Tm [<0055004A004D004D>]TJ
+1.005 0 0 1 146 365.044 Tm [<0051>]TJ
+1.01 0 0 1 151.226 365.044 Tm [<0053>]TJ
+1.005 0 0 1 155 365.044 Tm [<004600540046004F>]TJ
+1.01 0 0 1 173.513 365.044 Tm [<0055000D>]TJ
+1.005 0 0 1 181.778 365.044 Tm [<00430056>]TJ
+1.01 0 0 1 192.161 365.044 Tm [<0055>]TJ
+1.005 0 0 1 197.96 365.044 Tm [<0049>]TJ
+1.01 0 0 1 203.417 365.044 Tm [<004A>]TJ
+1.005 0 0 1 206.094 365.044 Tm [<004500450046004F>]TJ
+1.01 0 0 1 226.569 365.044 Tm [<001C>-218<0055>]TJ
+1.005 0 0 1 234.836 365.044 Tm [<00490046>]TJ
+1.01 0 0 1 244.748 365.044 Tm [<005A>]TJ
+1.005 0 0 1 251.594 365.044 Tm [<00440042004F>-219<00430046>]TJ
+1.01 0 0 1 279.707 365.044 Tm [<0055>]TJ
+1.005 0 0 1 283.309 365.044 Tm [<0056>]TJ
+1.01 0 0 1 288.596 365.044 Tm [<0053>]TJ
+1.005 0 0 1 292.369 365.044 Tm [<004F00460045>-219<0050004F>]TJ
+1.01 0 0 1 322.665 365.044 Tm [<004A>]TJ
+1.005 0 0 1 325.342 365.044 Tm [<004F>]TJ
+1.01 0 0 1 333.126 365.044 Tm [<0055>]TJ
+1.005 0 0 1 336.728 365.044 Tm [<00490046>]TJ
+1.01 0 0 1 348.837 365.044 Tm [<0053>]TJ
+1.005 0 0 1 352.61 365.044 Tm [<0046004200450046>]TJ
+1.01 0 0 1 371.284 365.044 Tm [<00530008>]TJ
+1.005 0 0 1 377.09 365.044 Tm [<0054>]TJ
+1.01 0 0 1 383.301 365.044 Tm [<004D>]TJ
+1.005 0 0 1 385.877 365.044 Tm [<0042>]TJ
+1.01 0 0 1 390.423 365.044 Tm [<005A>]TJ
+1.005 0 0 1 395.072 365.044 Tm [<0046>]TJ
+1.01 0 0 1 399.527 365.044 Tm [<0053>]TJ
+1.005 0 0 1 403.301 365.044 Tm [<0054>-219<00510042004F0046>]TJ
+1.01 0 0 1 429.327 365.044 Tm [<004D000D>-218<0055>]TJ
+1.005 0 0 1 440.169 365.044 Tm [<00490050005600480049>]TJ
+1.01 0 0 1 466.091 365.044 Tm [<000F>]TJ
+1.005 0 0 1 471.494 365.044 Tm [<0023>]TJ
+1.01 0 0 1 477.241 365.044 Tm [<005A>]TJ
+0.985 0 0 1 113.386 353.089 Tm [<00450046>]TJ
+0.98 0 0 1 122.865 353.089 Tm [<0047>]TJ
+0.985 0 0 1 126.126 353.089 Tm [<00420056>]TJ
+0.98 0 0 1 135.763 353.089 Tm [<004D0055000D>]TJ
+0.985 0 0 1 146.385 353.089 Tm [<0042>]TJ
+0.98 0 0 1 150.84 353.089 Tm [<004D004D>]TJ
+0.985 0 0 1 158.066 353.089 Tm [<0054>]TJ
+0.98 0 0 1 162.001 353.089 Tm [<0055>]TJ
+0.985 0 0 1 165.496 353.089 Tm [<004600510054>-226<0042>]TJ
+0.98 0 0 1 185.602 353.089 Tm [<0053>]TJ
+0.985 0 0 1 189.263 353.089 Tm [<0046>]TJ
+0.98 0 0 1 195.857 353.089 Tm [<0057004A>]TJ
+0.985 0 0 1 203.072 353.089 Tm [<0054>]TJ
+0.98 0 0 1 207.007 353.089 Tm [<004A>]TJ
+0.985 0 0 1 209.604 353.089 Tm [<0043>]TJ
+0.98 0 0 1 214.599 353.089 Tm [<004D>]TJ
+0.985 0 0 1 217.098 353.089 Tm [<0046>]TJ
+0.98 0 0 1 223.692 353.089 Tm [<004A>]TJ
+0.985 0 0 1 226.289 353.089 Tm [<004F>-226<0042>-227<00490042004F004500500056>]TJ
+0.98 0 0 1 271.202 353.089 Tm [<0055000F>-310<0265>]TJ
+0.985 0 0 1 290.026 353.089 Tm [<0046>]TJ
+0.98 0 0 1 296.619 353.089 Tm [<0047>]TJ
+0.985 0 0 1 299.88 353.089 Tm [<0050>]TJ
+0.98 0 0 1 304.836 353.089 Tm [<004D004D>]TJ
+0.985 0 0 1 309.835 353.089 Tm [<00500058>]TJ
+0.98 0 0 1 321.463 353.089 Tm [<004A>]TJ
+0.985 0 0 1 324.06 353.089 Tm [<004F0048>]TJ
+0.98 0 0 1 336.336 353.089 Tm [<0055>]TJ
+0.985 0 0 1 339.831 353.089 Tm [<0049>]TJ
+0.98 0 0 1 345.179 353.089 Tm [<0053>]TJ
+0.985 0 0 1 348.84 353.089 Tm [<00460046>-226<00440050004E004E0042004F00450054>]TJ
+0.98 0 0 1 405.853 353.089 Tm [<0055>]TJ
+0.985 0 0 1 409.348 353.089 Tm [<0042004C0046>-226<0042>-227<004E0050>]TJ
+0.98 0 0 1 444.9 353.089 Tm [<0053>]TJ
+0.985 0 0 1 448.561 353.089 Tm [<0046>]TJ
+0.98 0 0 1 455.154 353.089 Tm [<0053>]TJ
+0.985 0 0 1 458.815 353.089 Tm [<00420045>]TJ
+0.98 0 0 1 468.383 353.089 Tm [<004A>]TJ
+0.985 0 0 1 470.98 353.089 Tm [<00440042>]TJ
+0.98 0 0 1 479.39 353.089 Tm [<004D>]TJ
+1 0 0 1 113.386 341.134 Tm [<00580042005A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 27.762 317.224 Tm [<003F005300550048005600480051005700440057004C0052005100520051004F005C>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 317.224 Tm [<001F00500044005700480055004C0044004F0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 305.269 Tm [<002A>]TJ
+0.98 0 0 1 116.517 305.269 Tm [<004F>-168<0051>]TJ
+0.97 0 0 1 128.704 305.269 Tm [<0053>]TJ
+0.98 0 0 1 132.328 305.269 Tm [<004600540046004F>]TJ
+0.97 0 0 1 150.381 305.269 Tm [<0055>]TJ
+0.98 0 0 1 153.84 305.269 Tm [<0042>]TJ
+0.97 0 0 1 158.273 305.269 Tm [<0055004A>]TJ
+0.98 0 0 1 164.303 305.269 Tm [<0050004F>-168<004E005000450046>]TJ
+0.97 0 0 1 198.614 305.269 Tm [<000D>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 202.735 305.269 Tm [<001F>]TJ
+0.98 0 0 1 207.393 305.269 Tm [<00500044>]TJ
+0.97 0 0 1 216.806 305.269 Tm [<0057>]TJ
+0.98 0 0 1 221.464 305.269 Tm [<0048>]TJ
+0.97 0 0 1 226.17 305.269 Tm [<0055004C>]TJ
+0.98 0 0 1 235.487 305.269 Tm [<0044>]TJ
+0.97 0 0 1 240.193 305.269 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 251.979 305.269 Tm [<004A>]TJ
+0.98 0 0 1 254.55 305.269 Tm [<0054>-168<0054>]TJ
+0.97 0 0 1 264.023 305.269 Tm [<004A>]TJ
+0.98 0 0 1 266.594 305.269 Tm [<004E0051>]TJ
+0.97 0 0 1 279.618 305.269 Tm [<004D005A>-170<0055005A>]TJ
+0.98 0 0 1 296.124 305.269 Tm [<0051004600540046>]TJ
+0.97 0 0 1 313.825 305.269 Tm [<0055000F>-283<002A>]TJ
+0.98 0 0 1 325.523 305.269 Tm [<004F>-168<00490042004F004500500056>]TJ
+0.97 0 0 1 362.987 305.269 Tm [<0055>]TJ
+0.98 0 0 1 368.09 305.269 Tm [<004E005000450046>]TJ
+0.97 0 0 1 390.38 305.269 Tm [<000D>]TJ
+0.98 0 0 1 394.5 305.269 Tm [<0049005000580046>]TJ
+0.97 0 0 1 415.736 305.269 Tm [<0057>]TJ
+0.98 0 0 1 420.307 305.269 Tm [<0046>]TJ
+0.97 0 0 1 424.651 305.269 Tm [<0053000D>-181<004A0055>-170<004A>]TJ
+0.98 0 0 1 442.639 305.269 Tm [<0054>-168<0048005000430043>]TJ
+0.97 0 0 1 467.617 305.269 Tm [<004D>]TJ
+0.98 0 0 1 470.091 305.269 Tm [<00460045>]TJ
+0.97 0 0 1 479.522 305.269 Tm [<000F>]TJ
+1 0 0 1 113.386 293.313 Tm [<026500560054000D>-220<004A0055>-220<00550042004C00460054>-220<004F0050>-220<00540051004200440046>-220<0050004F>-220<005500490046>-220<0051004200480046000D>-220<0042004F0045>-220<00440042004F00080055>-220<00430046>-220<0053004600550053004A0046005700460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 51.773 269.403 Tm [<003F004B00440051004700520058005700520051004F005C>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 269.403 Tm [<001F00500044005700480055004C0044004F0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 257.448 Tm [<02650046>-220<00540042004E0046>-220<00550049004A004F0048>-220<005500490046>-220<00500055004900460053>-220<00580042005A>-220<0042005300500056004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 3.75 233.538 Tm [<003F005300550048005600480051005700440057004C0052005100520055004B004400510047005200580057>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 233.538 Tm [<001F005300550048005600480051005700440057004C005200510021001F004B0044005100470052005800570021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 221.582 Tm [<002A>]TJ
+0.98 0 0 1 116.517 221.582 Tm [<004F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 124.132 221.582 Tm [<0053>]TJ
+0.97 0 0 1 128.838 221.582 Tm [<0055>]TJ
+0.98 0 0 1 133.496 221.582 Tm [<0048005600480051>]TJ
+0.97 0 0 1 152.321 221.582 Tm [<0057>]TJ
+0.98 0 0 1 156.98 221.582 Tm [<0044>]TJ
+0.97 0 0 1 161.686 221.582 Tm [<0057004C>]TJ
+0.98 0 0 1 171.002 221.582 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 182.582 221.582 Tm [<004E005000450046>]TJ
+0.97 0 0 1 204.871 221.582 Tm [<000D>-224<0055>]TJ
+0.98 0 0 1 212.871 221.582 Tm [<00490046>]TJ
+0.97 0 0 1 224.703 221.582 Tm [<00EB0053>]TJ
+0.98 0 0 1 233.748 221.582 Tm [<0054>]TJ
+0.97 0 0 1 237.664 221.582 Tm [<0055>]TJ
+0.98 0 0 1 243.29 221.582 Tm [<0042>]TJ
+0.97 0 0 1 247.723 221.582 Tm [<0053>]TJ
+0.98 0 0 1 251.347 221.582 Tm [<00480056004E0046004F>]TJ
+0.97 0 0 1 278.772 221.582 Tm [<0055>-224<004A>]TJ
+0.98 0 0 1 286.969 221.582 Tm [<0054>-221<0046>]TJ
+0.97 0 0 1 297.396 221.582 Tm [<0059>]TJ
+0.98 0 0 1 301.976 221.582 Tm [<004600440056>]TJ
+0.97 0 0 1 315.411 221.582 Tm [<0055>]TJ
+0.98 0 0 1 318.87 221.582 Tm [<00460045>]TJ
+0.97 0 0 1 328.302 221.582 Tm [<000D>]TJ
+0.98 0 0 1 332.841 221.582 Tm [<0042004F0045>]TJ
+0.97 0 0 1 349.975 221.582 Tm [<0055>]TJ
+0.98 0 0 1 353.435 221.582 Tm [<00490046>-221<0054004600440050004F0045>-222<0050004F0046>]TJ
+0.97 0 0 1 411.984 221.582 Tm [<004A>]TJ
+0.98 0 0 1 414.555 221.582 Tm [<004F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 422.17 221.582 Tm [<004B00440051004700520058>]TJ
+0.97 0 0 1 450.407 221.582 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 457.232 221.582 Tm [<004E005000450046>]TJ
+0.97 0 0 1 479.522 221.582 Tm [<000F>]TJ
+1 0 0 1 133.311 209.627 Tm [<002F005000550046>-220<005500490046>-220<0045004A00EA004600530046004F00440046>-220<004300460055005800460046004F>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 185.717 Tm [<003F005600570048005300030024003F0056005700480053003E004B004400510047005200580057002000490044004F0056>-1<0048004000030025003F005600570048005300030026>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 161.807 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 137.896 Tm [<003F005600570048005300030024003F005300550048005600480051005700440057004C0052005100520051004F005C005E>-1<003F0056005700480053000300250060003F005600570048005300030026>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01EC>]TJ
+ET
+endstream
+endobj
+20 0 obj <<
+/Type /Page
+/Contents 21 0 R
+/Resources 19 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 8 0 R
+/Annots [ 18 0 R ]
+>> endobj
+18 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 398.784 568.071 406.22]
+/A << /S /GoTo /D (ptx@section_link:6) >>
+>> endobj
+22 0 obj <<
+/D [20 0 R /XYZ 113.386 434.335 null]
+>> endobj
+19 0 obj <<
+/Font << /F105 5 0 R /F111 6 0 R /F123 17 0 R /F63 7 0 R /F117 23 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+27 0 obj <<
+/Length 34344
+>>
+stream
+BT
+/F105 9.96264 Tf 0.995 0 0 1 113.386 640.013 Tm [<002A004F>-223<00510053004600540046004F005500420055004A0050004F>-224<004E005000450046000D>-224<0043005000550049>-224<0058004A004D004D>-223<0051005300500045005600440046>-224<00410022002300240008000F>-224<002A004F>-223<00490042004F0045005000560055>-224<004E005000450046000D>-224<005500490050005600480049000D>-225<005500490046>-223<00EB005300540055>-224<004600590042004E0051004D0046>]TJ
+1.015 0 0 1 113.386 628.058 Tm [<0058>]TJ
+1.025 0 0 1 120.262 628.058 Tm [<004A004D004D>]TJ
+1.015 0 0 1 130.411 628.058 Tm [<0051>]TJ
+1.025 0 0 1 135.689 628.058 Tm [<0053>]TJ
+1.015 0 0 1 139.519 628.058 Tm [<00500045005600440046>]TJ
+1.025 0 0 1 166.012 628.058 Tm [<0041>]TJ
+1.01 0 0 1 168.075 628.058 Tm [<0022>]TJ
+1.015 0 0 1 179.891 628.058 Tm [<0024>]TJ
+1.025 0 0 1 185.806 628.058 Tm [<0008000D>]TJ
+1.015 0 0 1 192.575 628.058 Tm [<0058>]TJ
+1.025 0 0 1 199.451 628.058 Tm [<004A0055>]TJ
+1.015 0 0 1 205.823 628.058 Tm [<0049>]TJ
+1.025 0 0 1 213.539 628.058 Tm [<0041>]TJ
+1.015 0 0 1 215.601 628.058 Tm [<0023>]TJ
+1.025 0 0 1 221.406 628.058 Tm [<0008>]TJ
+1.015 0 0 1 225.672 628.058 Tm [<0054>]TJ
+1.025 0 0 1 229.727 628.058 Tm [<0055004A004D004D>-215<0053>]TJ
+1.015 0 0 1 247.361 628.058 Tm [<0046>]TJ
+1.025 0 0 1 251.861 628.058 Tm [<00550053004A>]TJ
+1.015 0 0 1 262.063 628.058 Tm [<0046>]TJ
+1.025 0 0 1 266.562 628.058 Tm [<0057>]TJ
+1.015 0 0 1 271.393 628.058 Tm [<00420043>]TJ
+1.025 0 0 1 281.131 628.058 Tm [<004D>]TJ
+1.015 0 0 1 283.745 628.058 Tm [<0046>]TJ
+1.025 0 0 1 290.449 628.058 Tm [<00470053>]TJ
+1.015 0 0 1 297.689 628.058 Tm [<0050004E>]TJ
+1.025 0 0 1 313.21 628.058 Tm [<0055>]TJ
+1.015 0 0 1 316.866 628.058 Tm [<00490046>]TJ
+1.025 0 0 1 329.081 628.058 Tm [<004D>]TJ
+1.015 0 0 1 331.695 628.058 Tm [<0042>]TJ
+1.025 0 0 1 336.286 628.058 Tm [<005A>]TJ
+1.015 0 0 1 341.004 628.058 Tm [<0046>]TJ
+1.025 0 0 1 345.504 628.058 Tm [<0053>]TJ
+1.015 0 0 1 349.333 628.058 Tm [<0054>-218<00510042004F0046>]TJ
+1.025 0 0 1 375.604 628.058 Tm [<004D000D>]TJ
+1.015 0 0 1 382.927 628.058 Tm [<0042004F0045>]TJ
+1.025 0 0 1 400.633 628.058 Tm [<0055>]TJ
+1.015 0 0 1 404.289 628.058 Tm [<00490046>-217<0054004600440050004F0045>-218<0046>]TJ
+1.025 0 0 1 451.855 628.058 Tm [<0059>]TJ
+1.015 0 0 1 456.695 628.058 Tm [<0042004E0051>]TJ
+1.025 0 0 1 474.776 628.058 Tm [<004D>]TJ
+1.015 0 0 1 477.39 628.058 Tm [<0046>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 627.61 Tm [<002A004F>-200<00220045005000430046>-200<003300460042004500460053000D>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 618.643 Tm [<004D0042005A004600530054>-220<00510042004F0046004D>]TJ
+/F63 7.97011 Tf 1 0 0 1 532.086 618.643 Tm [<004A0054>-199<004A004F>-200<005500490046>]TJ
+1 0 0 1 491.852 609.677 Tm [<004F00420057004A004800420055004A0050004F>-200<00510042004F0046004D>-200<0050004F>-200<005500490046>]TJ
+1 0 0 1 491.852 600.711 Tm [<004D004600470055000D>-200<0053004600510053004600540046004F005500460045>-200<0043005A>-200<005500580050>]TJ
+1 0 0 1 491.852 591.744 Tm [<0054005200560042005300460054>-200<0050005700460053004D004200510051004A004F0048000D>]TJ
+1 0 0 1 491.852 582.778 Tm [<0056005400560042004D004D005A>-200<00430046004D00500058>-200<005500490056004E0043004F0042004A004D0054>]TJ
+1 0 0 1 491.852 573.812 Tm [<0042004F0045>-200<004300500050004C004E00420053004C0054000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 616.103 Tm [<0058004A004D004D>-220<0051005300500045005600440046>-220<0041002200240008000D>-220<0058004A00550049>-220<004F0050>-220<004100230008>-220<0042004F005A00580049004600530046000F>]TJ
+0.985 0 0 1 133.311 604.148 Tm [<00230050>]TJ
+0.975 0 0 1 143.9 604.148 Tm [<0055>]TJ
+0.985 0 0 1 147.377 604.148 Tm [<0049>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 154.906 604.148 Tm [<003F>]TJ
+0.985 0 0 1 159.588 604.148 Tm [<0053>]TJ
+0.975 0 0 1 164.318 604.148 Tm [<0055>]TJ
+0.985 0 0 1 169.001 604.148 Tm [<0048005600480051>]TJ
+0.975 0 0 1 187.922 604.148 Tm [<0057>]TJ
+0.985 0 0 1 192.604 604.148 Tm [<0044>]TJ
+0.975 0 0 1 197.334 604.148 Tm [<0057004C>]TJ
+0.985 0 0 1 206.699 604.148 Tm [<0052005100520051>]TJ
+0.975 0 0 1 225.62 604.148 Tm [<004F005C>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 237.165 604.148 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 254.389 604.148 Tm [<003F>]TJ
+0.985 0 0 1 259.072 604.148 Tm [<004B00440051004700520058>]TJ
+0.975 0 0 1 287.453 604.148 Tm [<0057>]TJ
+0.985 0 0 1 292.135 604.148 Tm [<00520051>]TJ
+0.975 0 0 1 301.596 604.148 Tm [<004F005C>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 313.141 604.148 Tm [<004A>]TJ
+0.985 0 0 1 315.725 604.148 Tm [<0048004F0050>]TJ
+0.975 0 0 1 330.729 604.148 Tm [<0053>]TJ
+0.985 0 0 1 334.372 604.148 Tm [<0046>-222<0042004F>]TJ
+0.975 0 0 1 350.851 604.148 Tm [<005A>]TJ
+0.985 0 0 1 357.519 604.148 Tm [<00540051004200440046>]TJ
+0.975 0 0 1 381.534 604.148 Tm [<0047>]TJ
+0.985 0 0 1 384.779 604.148 Tm [<0050>]TJ
+0.975 0 0 1 389.734 604.148 Tm [<004D004D>]TJ
+0.985 0 0 1 394.708 604.148 Tm [<00500058>]TJ
+0.975 0 0 1 406.336 604.148 Tm [<004A>]TJ
+0.985 0 0 1 408.92 604.148 Tm [<004F0048>]TJ
+0.975 0 0 1 421.15 604.148 Tm [<0055>]TJ
+0.985 0 0 1 424.627 604.148 Tm [<00490046>]TJ
+0.975 0 0 1 434.342 604.148 Tm [<004A0053>]TJ
+0.985 0 0 1 442.749 604.148 Tm [<0042>]TJ
+0.975 0 0 1 447.204 604.148 Tm [<0053>]TJ
+0.985 0 0 1 450.847 604.148 Tm [<00480056004E0046004F>]TJ
+0.975 0 0 1 478.412 604.148 Tm [<0055>]TJ
+1 0 0 1 113.386 592.193 Tm [<005800490046004F>-220<005500490046005A>-220<0048005000430043004D0046>-220<004A0055000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F90 11.95517 Tf 1 0 0 1 113.386 532.417 Tm [<003400F50104010400F900FE00F70103>-220<010400F800F900FE00F70103>-220<00F700FC00FF00F200F100FC00FC0109>-220<00F100FE00F4>-220<00FC00FF00F300F100FC00FC0109>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 508.506 Tm [<0034004D004A004500460054>-223<0042004F0045>-224<00540055004600510054>-223<00440042004F>-224<0049004200570046>-224<0042005500550053004A00430056005500460054>-223<0055004900420055>-224<004E00500045004A0047005A>-224<005500490046004A0053>-223<00430046004900420057004A00500053000F>-305<0265004600540046>-223<0042005500550053004A00430056005500460054>-224<00440042004F>-223<00430046>-224<005400460055>]TJ
+1 0 0 1 113.386 496.551 Tm [<004D005000440042004D004D005A>-222<00500053>-223<0048004D005000430042004D004D005A000D>-223<004E00460042004F004A004F0048>-222<005500490046005A>-223<0046004A0055004900460053>-222<004200EA004600440055>-223<005500490046>-222<00440056005300530046004F0055>-223<0054004D004A0045004600100054005500460051>-222<00500053>-223<0042004D004D>-222<0054004D004A004500460054001000540055004600510054>-223<00500053>-222<0042004D004D>]TJ
+1 0 0 1 113.386 484.596 Tm [<0054004D004A004500460054001000540055004600510054>-220<00430046004D0050004F0048004A004F0048>-220<00550050>-220<0042>-220<00440046005300550042004A004F>-220<0055005A00510046>-220<0045004600EB004F00460045>-220<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 327.194 484.596 Tm [<003F0056004800570056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 370.415 484.596 Tm [<0010>]TJ
+/F111 7.97011 Tf 1 0 0 1 374.32 484.596 Tm [<003F0056004800570056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 412.739 484.596 Tm [<000F>]TJ
+1.03 0 0 1 133.311 472.641 Tm [<0265>]TJ
+1.02 0 0 1 143.727 472.641 Tm [<0046>-271<00580042>]TJ
+1.03 0 0 1 162.527 472.641 Tm [<005A>]TJ
+1.02 0 0 1 170.022 472.641 Tm [<0042>]TJ
+1.03 0 0 1 174.636 472.641 Tm [<005500550053004A>]TJ
+1.02 0 0 1 188.561 472.641 Tm [<00430056>]TJ
+1.03 0 0 1 199.099 472.641 Tm [<0055>]TJ
+1.02 0 0 1 202.772 472.641 Tm [<00460054>-271<0042>]TJ
+1.03 0 0 1 218.738 472.641 Tm [<0053>]TJ
+1.02 0 0 1 222.586 472.641 Tm [<0046>-271<0056005400460045>]TJ
+1.03 0 0 1 251.874 472.641 Tm [<004A>]TJ
+1.02 0 0 1 254.603 472.641 Tm [<0054>-271<0042>-271<004E0042>]TJ
+1.03 0 0 1 281.666 472.641 Tm [<00550055>]TJ
+1.02 0 0 1 289.014 472.641 Tm [<0046>]TJ
+1.03 0 0 1 293.536 472.641 Tm [<0053>]TJ
+1.02 0 0 1 300.138 472.641 Tm [<0050>]TJ
+1.03 0 0 1 305.27 472.641 Tm [<0047>-268<004A>]TJ
+1.02 0 0 1 314.182 472.641 Tm [<004F00490046>]TJ
+1.03 0 0 1 329.912 472.641 Tm [<0053004A0055>]TJ
+1.02 0 0 1 340.164 472.641 Tm [<0042004F00440046>]TJ
+1.03 0 0 1 359.065 472.641 Tm [<000F>]TJ
+1.015 0 0 1 366.19 472.641 Tm [<0022>]TJ
+1.03 0 0 1 372.318 472.641 Tm [<0055>-268<0055>]TJ
+1.02 0 0 1 382.42 472.641 Tm [<00490046>]TJ
+1.03 0 0 1 395.235 472.641 Tm [<0055>]TJ
+1.02 0 0 1 398.909 472.641 Tm [<00500051>-271<0050>]TJ
+1.03 0 0 1 417.231 472.641 Tm [<0047>-268<0055>]TJ
+1.02 0 0 1 427.087 472.641 Tm [<00490046>-271<0049>]TJ
+1.03 0 0 1 445.44 472.641 Tm [<004A>]TJ
+1.02 0 0 1 448.17 472.641 Tm [<0046>]TJ
+1.03 0 0 1 452.692 472.641 Tm [<0053>]TJ
+1.02 0 0 1 456.54 472.641 Tm [<0042>]TJ
+1.03 0 0 1 461.153 472.641 Tm [<0053>]TJ
+1.02 0 0 1 465.001 472.641 Tm [<00440049>]TJ
+1.03 0 0 1 474.635 472.641 Tm [<005A000D>]TJ
+1.01 0 0 1 113.386 460.686 Tm [<0055>]TJ
+1.005 0 0 1 116.988 460.686 Tm [<00490046>]TJ
+1.01 0 0 1 126.9 460.686 Tm [<0053>]TJ
+1.005 0 0 1 130.674 460.686 Tm [<0046>-221<0042>]TJ
+1.01 0 0 1 141.891 460.686 Tm [<0053>]TJ
+1.005 0 0 1 145.664 460.686 Tm [<0046>]TJ
+1.01 0 0 1 152.335 460.686 Tm [<0055>]TJ
+1.005 0 0 1 155.937 460.686 Tm [<00490046>]TJ
+/F117 7.97011 Tf 1.005 0 0 1 168.065 460.686 Tm [<0056>]TJ
+1.01 0 0 1 172.892 460.686 Tm [<004F004C>]TJ
+1.005 0 0 1 182.592 460.686 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 194.46 460.686 Tm [<0042004F0045>]TJ
+/F117 7.97011 Tf 1.005 0 0 1 212.025 460.686 Tm [<0056>]TJ
+1.01 0 0 1 216.851 460.686 Tm [<0057>]TJ
+1.005 0 0 1 221.702 460.686 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 233.57 460.686 Tm [<00510042>]TJ
+1.01 0 0 1 243.342 460.686 Tm [<0053>]TJ
+1.005 0 0 1 247.115 460.686 Tm [<0042004E0046>]TJ
+1.01 0 0 1 264.247 460.686 Tm [<0055>]TJ
+1.005 0 0 1 267.849 460.686 Tm [<0046>]TJ
+1.01 0 0 1 272.305 460.686 Tm [<0053>]TJ
+1.005 0 0 1 276.078 460.686 Tm [<0054>]TJ
+1.01 0 0 1 280.093 460.686 Tm [<000F>]TJ
+1.005 0 0 1 285.552 460.686 Tm [<0022>]TJ
+1.01 0 0 1 291.62 460.686 Tm [<005500550053004A>]TJ
+1.005 0 0 1 305.274 460.686 Tm [<00430056>]TJ
+1.01 0 0 1 315.657 460.686 Tm [<0055>]TJ
+1.005 0 0 1 319.259 460.686 Tm [<00460054>]TJ
+1.01 0 0 1 329.945 460.686 Tm [<0055>]TJ
+1.005 0 0 1 333.548 460.686 Tm [<0050>]TJ
+1.01 0 0 1 340.82 460.686 Tm [<0055>]TJ
+1.005 0 0 1 344.422 460.686 Tm [<0049005000540046>-221<00510042>]TJ
+1.01 0 0 1 375.393 460.686 Tm [<0053>]TJ
+1.005 0 0 1 379.167 460.686 Tm [<0042004E0046>]TJ
+1.01 0 0 1 396.298 460.686 Tm [<0055>]TJ
+1.005 0 0 1 399.9 460.686 Tm [<0046>]TJ
+1.01 0 0 1 404.356 460.686 Tm [<0053>]TJ
+1.005 0 0 1 408.129 460.686 Tm [<0054>-221<00420051>]TJ
+1.01 0 0 1 424.132 460.686 Tm [<004D004D005A>-220<0055>]TJ
+1.005 0 0 1 439.75 460.686 Tm [<0050>-221<0042>]TJ
+1.01 0 0 1 451.568 460.686 Tm [<004D004D>]TJ
+1.005 0 0 1 458.935 460.686 Tm [<0054>]TJ
+1.01 0 0 1 462.95 460.686 Tm [<004D004A>]TJ
+1.005 0 0 1 468.203 460.686 Tm [<004500460054>]TJ
+1.02 0 0 1 113.386 448.731 Tm [<0042004F0045>-214<0054>]TJ
+1.03 0 0 1 135.222 448.731 Tm [<0055>]TJ
+1.02 0 0 1 138.895 448.731 Tm [<004600510054>]TJ
+1.03 0 0 1 152.797 448.731 Tm [<000D>]TJ
+1.02 0 0 1 157.496 448.731 Tm [<0056004F>]TJ
+1.03 0 0 1 168.531 448.731 Tm [<004D>]TJ
+1.02 0 0 1 171.158 448.731 Tm [<004600540054>]TJ
+1.03 0 0 1 186.013 448.731 Tm [<0055>]TJ
+1.02 0 0 1 189.687 448.731 Tm [<00490046>]TJ
+1.03 0 0 1 199.747 448.731 Tm [<005A>]TJ
+1.02 0 0 1 206.671 448.731 Tm [<0042>]TJ
+1.03 0 0 1 211.284 448.731 Tm [<0053>]TJ
+1.02 0 0 1 215.132 448.731 Tm [<0046>-214<0048>]TJ
+1.03 0 0 1 226.572 448.731 Tm [<004A0057>]TJ
+1.02 0 0 1 234.156 448.731 Tm [<0046004F>-214<0050>]TJ
+1.03 0 0 1 251.663 448.731 Tm [<0055>]TJ
+1.02 0 0 1 255.336 448.731 Tm [<00490046>]TJ
+1.03 0 0 1 265.397 448.731 Tm [<0053>-212<0057>]TJ
+1.02 0 0 1 276.281 448.731 Tm [<0042>]TJ
+1.03 0 0 1 280.895 448.731 Tm [<004D>]TJ
+1.02 0 0 1 283.522 448.731 Tm [<005600460054>]TJ
+1.03 0 0 1 299.667 448.731 Tm [<004D>]TJ
+1.02 0 0 1 302.294 448.731 Tm [<005000580046>]TJ
+1.03 0 0 1 318.858 448.731 Tm [<0053>-212<004A>]TJ
+1.02 0 0 1 327.618 448.731 Tm [<004F>]TJ
+1.03 0 0 1 335.471 448.731 Tm [<0055>]TJ
+1.02 0 0 1 339.145 448.731 Tm [<00490046>-214<0049>]TJ
+1.03 0 0 1 356.926 448.731 Tm [<004A>]TJ
+1.02 0 0 1 359.656 448.731 Tm [<0046>]TJ
+1.03 0 0 1 364.178 448.731 Tm [<0053>]TJ
+1.02 0 0 1 368.026 448.731 Tm [<0042>]TJ
+1.03 0 0 1 372.64 448.731 Tm [<0053>]TJ
+1.02 0 0 1 376.488 448.731 Tm [<00440049>]TJ
+1.03 0 0 1 386.121 448.731 Tm [<005A000F>]TJ
+1.015 0 0 1 396.295 448.731 Tm [<0022>]TJ
+1.03 0 0 1 402.423 448.731 Tm [<0055>-212<0055>]TJ
+1.02 0 0 1 411.953 448.731 Tm [<00490046>-214<00430050>]TJ
+1.03 0 0 1 434.501 448.731 Tm [<00550055>]TJ
+1.02 0 0 1 441.848 448.731 Tm [<0050004E>-214<0050>]TJ
+1.03 0 0 1 462.546 448.731 Tm [<0047>-212<0055>]TJ
+1.02 0 0 1 471.829 448.731 Tm [<00490046>]TJ
+0.98 0 0 1 113.386 436.775 Tm [<0049>]TJ
+0.97 0 0 1 118.707 436.775 Tm [<004A>]TJ
+0.98 0 0 1 121.277 436.775 Tm [<0046>]TJ
+0.97 0 0 1 125.622 436.775 Tm [<0053>]TJ
+0.98 0 0 1 129.246 436.775 Tm [<0042>]TJ
+0.97 0 0 1 133.679 436.775 Tm [<0053>]TJ
+0.98 0 0 1 137.303 436.775 Tm [<00440049>]TJ
+0.97 0 0 1 146.558 436.775 Tm [<005A000D>]TJ
+0.98 0 0 1 155.268 436.775 Tm [<0046004200440049>]TJ
+0.97 0 0 1 175.099 436.775 Tm [<004A>]TJ
+0.98 0 0 1 177.67 436.775 Tm [<004F0045>]TJ
+0.97 0 0 1 188.205 436.775 Tm [<004A0057004A>]TJ
+0.98 0 0 1 197.917 436.775 Tm [<004500560042>]TJ
+0.97 0 0 1 212.591 436.775 Tm [<004D>]TJ
+0.98 0 0 1 216.864 436.775 Tm [<0054>]TJ
+0.97 0 0 1 220.779 436.775 Tm [<004D004A>]TJ
+0.98 0 0 1 225.823 436.775 Tm [<00450046>-184<0050>]TJ
+0.97 0 0 1 241.984 436.775 Tm [<0053>]TJ
+0.98 0 0 1 247.406 436.775 Tm [<0054>]TJ
+0.97 0 0 1 251.321 436.775 Tm [<0055>]TJ
+0.98 0 0 1 254.781 436.775 Tm [<00460051>-184<00440042004F>-184<00430046>]TJ
+0.97 0 0 1 292.748 436.775 Tm [<0047>]TJ
+0.98 0 0 1 295.975 436.775 Tm [<0050>]TJ
+0.97 0 0 1 300.906 436.775 Tm [<004D004D>]TJ
+0.98 0 0 1 305.854 436.775 Tm [<0050005800460045>-184<0043>]TJ
+0.97 0 0 1 333.623 436.775 Tm [<005A>]TJ
+0.98 0 0 1 339.886 436.775 Tm [<0042>]TJ
+0.97 0 0 1 344.319 436.775 Tm [<005500550053004A>]TJ
+0.98 0 0 1 357.432 436.775 Tm [<00430056>]TJ
+0.97 0 0 1 367.557 436.775 Tm [<0055>]TJ
+0.98 0 0 1 371.017 436.775 Tm [<0046>-184<00540046>]TJ
+0.97 0 0 1 385.42 436.775 Tm [<00550055004A>]TJ
+0.98 0 0 1 394.91 436.775 Tm [<004F00480054>-184<00430046>]TJ
+0.97 0 0 1 419.935 436.775 Tm [<0055>]TJ
+0.98 0 0 1 423.395 436.775 Tm [<005800460046004F>-184<0043>]TJ
+0.97 0 0 1 450.94 436.775 Tm [<0053>]TJ
+0.98 0 0 1 454.564 436.775 Tm [<00420044004C0046>]TJ
+0.97 0 0 1 472.147 436.775 Tm [<0055>]TJ
+0.98 0 0 1 475.607 436.775 Tm [<0054>]TJ
+0.97 0 0 1 479.522 436.775 Tm [<000F>]TJ
+0.97 0 0 1 113.386 424.82 Tm [<0265>]TJ
+0.98 0 0 1 123.195 424.82 Tm [<0046>]TJ
+0.97 0 0 1 129.608 424.82 Tm [<0057>]TJ
+0.98 0 0 1 134.179 424.82 Tm [<0042>]TJ
+0.97 0 0 1 138.612 424.82 Tm [<004D>]TJ
+0.98 0 0 1 141.086 424.82 Tm [<005600460054>-211<0048>]TJ
+0.97 0 0 1 161.119 424.82 Tm [<004A0057>]TJ
+0.98 0 0 1 168.261 424.82 Tm [<0046004F>]TJ
+0.97 0 0 1 180.123 424.82 Tm [<0055>]TJ
+0.98 0 0 1 183.582 424.82 Tm [<00490046>]TJ
+0.97 0 0 1 193.248 424.82 Tm [<0053>]TJ
+0.98 0 0 1 196.872 424.82 Tm [<0046>-211<0050>]TJ
+0.97 0 0 1 208.216 424.82 Tm [<0057>]TJ
+0.98 0 0 1 212.787 424.82 Tm [<0046>]TJ
+0.97 0 0 1 217.132 424.82 Tm [<00530053004A>]TJ
+0.98 0 0 1 226.95 424.82 Tm [<00450046>-211<0042>]TJ
+0.97 0 0 1 242.883 424.82 Tm [<004D004D>-214<004A>]TJ
+0.98 0 0 1 252.471 424.82 Tm [<004F00490046>]TJ
+0.97 0 0 1 267.584 424.82 Tm [<0053004A0055>]TJ
+0.98 0 0 1 277.238 424.82 Tm [<00460045>]TJ
+0.97 0 0 1 288.739 424.82 Tm [<0057>]TJ
+0.98 0 0 1 293.31 424.82 Tm [<0042>]TJ
+0.97 0 0 1 297.742 424.82 Tm [<004D>]TJ
+0.98 0 0 1 300.216 424.82 Tm [<005600460054>]TJ
+0.97 0 0 1 313.631 424.82 Tm [<000D>]TJ
+0.98 0 0 1 318.092 424.82 Tm [<00430056>]TJ
+0.97 0 0 1 328.217 424.82 Tm [<0055>-214<0055>]TJ
+0.98 0 0 1 337.205 424.82 Tm [<00490046>]TJ
+0.97 0 0 1 346.871 424.82 Tm [<005A>]TJ
+0.98 0 0 1 353.405 424.82 Tm [<00490050>]TJ
+0.97 0 0 1 363.656 424.82 Tm [<004D>]TJ
+0.98 0 0 1 366.13 424.82 Tm [<0045>]TJ
+0.97 0 0 1 373.286 424.82 Tm [<0047>]TJ
+0.98 0 0 1 376.514 424.82 Tm [<0050>]TJ
+0.97 0 0 1 381.444 424.82 Tm [<0053>-214<0055>]TJ
+0.98 0 0 1 390.597 424.82 Tm [<00490046>-211<00440056>]TJ
+0.97 0 0 1 411.421 424.82 Tm [<00530053>]TJ
+0.98 0 0 1 418.669 424.82 Tm [<0046004F>]TJ
+0.97 0 0 1 428.462 424.82 Tm [<0055>]TJ
+0.98 0 0 1 433.99 424.82 Tm [<0054>]TJ
+0.97 0 0 1 437.905 424.82 Tm [<004D004A>]TJ
+0.98 0 0 1 442.95 424.82 Tm [<00450046>-211<0050>]TJ
+0.97 0 0 1 459.381 424.82 Tm [<0053>]TJ
+0.98 0 0 1 465.074 424.82 Tm [<0054>]TJ
+0.97 0 0 1 468.989 424.82 Tm [<0055>]TJ
+0.98 0 0 1 472.449 424.82 Tm [<00460051>]TJ
+1 0 0 1 113.386 412.865 Tm [<0050004F004D005A000F>-293<002A004F>-220<004300460055005800460046004F000D>-219<004F00460058>-220<0055005A005100460054>-220<00500047>-219<0054004D004A004500460054>-220<0042004F0045>-220<00540055004600510054>-220<00440042004F>-219<00430046>-220<0045004600EB004F00460045001C>-220<005500490046005A>-220<004A004F004900460053004A0055>-219<0042005500550053004A00430056005500460054>-220<004700530050004E>]TJ
+0.98 0 0 1 113.386 400.91 Tm [<0055>]TJ
+0.985 0 0 1 116.881 400.91 Tm [<00490046>-225<00440050>]TJ
+0.98 0 0 1 137.715 400.91 Tm [<00530053>]TJ
+0.985 0 0 1 145.037 400.91 Tm [<0046005400510050004F0045>]TJ
+0.98 0 0 1 174.006 400.91 Tm [<004A>]TJ
+0.985 0 0 1 176.603 400.91 Tm [<004F0048>-225<00510042>]TJ
+0.98 0 0 1 198.437 400.91 Tm [<0053>]TJ
+0.985 0 0 1 202.098 400.91 Tm [<0042004E0046>]TJ
+0.98 0 0 1 218.889 400.91 Tm [<0055>]TJ
+0.985 0 0 1 222.384 400.91 Tm [<0046>]TJ
+0.98 0 0 1 226.751 400.91 Tm [<0053>]TJ
+0.985 0 0 1 230.412 400.91 Tm [<0054>]TJ
+0.98 0 0 1 234.347 400.91 Tm [<000D>]TJ
+0.985 0 0 1 238.951 400.91 Tm [<0042004F0045>]TJ
+0.98 0 0 1 256.203 400.91 Tm [<00550053>]TJ
+0.985 0 0 1 263.36 400.91 Tm [<0042004F0054004E>]TJ
+0.98 0 0 1 285.194 400.91 Tm [<004A0055>-226<0055>]TJ
+0.985 0 0 1 296.99 400.91 Tm [<00490046>]TJ
+0.98 0 0 1 306.705 400.91 Tm [<004A0053>]TJ
+0.985 0 0 1 315.171 400.91 Tm [<00500058004F>-225<0042>]TJ
+0.98 0 0 1 338.938 400.91 Tm [<005500550053004A>]TJ
+0.985 0 0 1 352.187 400.91 Tm [<00430056>]TJ
+0.98 0 0 1 362.364 400.91 Tm [<0055>]TJ
+0.985 0 0 1 365.859 400.91 Tm [<00460054>]TJ
+0.98 0 0 1 376.369 400.91 Tm [<0055>]TJ
+0.985 0 0 1 379.864 400.91 Tm [<0050>-225<0054>]TJ
+0.98 0 0 1 390.963 400.91 Tm [<004D004A>]TJ
+0.985 0 0 1 396.059 400.91 Tm [<004500460054>-225<0042004F0045>-225<0054>]TJ
+0.98 0 0 1 432.869 400.91 Tm [<0055>]TJ
+0.985 0 0 1 436.364 400.91 Tm [<004600510054>-225<0050>]TJ
+0.98 0 0 1 456.952 400.91 Tm [<0047>-226<0055>]TJ
+0.985 0 0 1 465.916 400.91 Tm [<00490046>]TJ
+0.98 0 0 1 475.631 400.91 Tm [<004A0053>]TJ
+1 0 0 1 113.386 388.955 Tm [<004C004A004F0045000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 353.089 Tm [<0028004D005000430042004D>-200<0054004600550055004A004F00480054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 46.971 329.179 Tm [<003F005600480057005300440055004400500048005700480055>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 329.179 Tm [<001F0053004400550044005000480057004800550021>]TJ
+/F105 9.96264 Tf 1 0 0 1 166.211 329.179 Tm [<001B>]TJ
+1.025 0 0 1 113.386 317.224 Tm [<0265004A>]TJ
+1.02 0 0 1 126.467 317.224 Tm [<0054>]TJ
+1.025 0 0 1 132.711 317.224 Tm [<004A>]TJ
+1.02 0 0 1 135.428 317.224 Tm [<0054>-213<0056005400460045>]TJ
+1.025 0 0 1 163.098 317.224 Tm [<0055>]TJ
+1.02 0 0 1 166.754 317.224 Tm [<0050>-213<00540046>]TJ
+1.025 0 0 1 182.652 317.224 Tm [<0055>-212<0055>]TJ
+1.02 0 0 1 192.133 317.224 Tm [<00490046>]TJ
+1.025 0 0 1 204.363 317.224 Tm [<0057>]TJ
+1.02 0 0 1 209.193 317.224 Tm [<0042>]TJ
+1.025 0 0 1 213.807 317.224 Tm [<004D>]TJ
+1.02 0 0 1 216.421 317.224 Tm [<005600460054>]TJ
+1.025 0 0 1 232.553 317.224 Tm [<0055>]TJ
+1.02 0 0 1 236.209 317.224 Tm [<0050>-213<0042>]TJ
+1.025 0 0 1 248.124 317.224 Tm [<005500550053004A>]TJ
+1.02 0 0 1 261.981 317.224 Tm [<00430056>]TJ
+1.025 0 0 1 272.519 317.224 Tm [<0055>]TJ
+1.02 0 0 1 276.174 317.224 Tm [<00460054>]TJ
+1.025 0 0 1 286.941 317.224 Tm [<0047>]TJ
+1.02 0 0 1 290.352 317.224 Tm [<0050>]TJ
+1.025 0 0 1 295.483 317.224 Tm [<0053>]TJ
+/F123 7.97011 Tf 1.025 0 0 1 301.482 317.224 Tm [<001F>]TJ
+1.02 0 0 1 306.405 317.224 Tm [<00530044>]TJ
+1.025 0 0 1 316.201 317.224 Tm [<0055>]TJ
+1.02 0 0 1 321.124 317.224 Tm [<004400500048>]TJ
+1.025 0 0 1 335.819 317.224 Tm [<0057>]TJ
+1.02 0 0 1 340.741 317.224 Tm [<0048>]TJ
+1.025 0 0 1 345.639 317.224 Tm [<00550021>]TJ
+/F105 9.96264 Tf 1.025 0 0 1 355.484 317.224 Tm [<000F>-285<0265>]TJ
+1.02 0 0 1 371.266 317.224 Tm [<0046>-213<0054>]TJ
+1.025 0 0 1 382.032 317.224 Tm [<005A>]TJ
+1.02 0 0 1 386.75 317.224 Tm [<004F>]TJ
+1.025 0 0 1 392.42 317.224 Tm [<0055>]TJ
+1.02 0 0 1 396.076 317.224 Tm [<0042>]TJ
+1.025 0 0 1 400.69 317.224 Tm [<0059>-212<0047>]TJ
+1.02 0 0 1 411.11 317.224 Tm [<0050>]TJ
+1.025 0 0 1 416.242 317.224 Tm [<0053>-212<0055>]TJ
+1.02 0 0 1 425.897 317.224 Tm [<00490046>-213<0042>]TJ
+1.025 0 0 1 442.74 317.224 Tm [<005500550053004A>]TJ
+1.02 0 0 1 456.597 317.224 Tm [<00430056>]TJ
+1.025 0 0 1 467.135 317.224 Tm [<0055>]TJ
+1.02 0 0 1 470.791 317.224 Tm [<00460054>]TJ
+1.025 0 0 1 479.388 317.224 Tm [<000D>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 316.775 Tm [<0265004600530046>-200<004200530046>-200<0050004F004D005A>-200<00550049005300460046>]TJ
+1 0 0 1 491.852 307.809 Tm [<0051004200530042004E00460055004600530054>-200<004A004F>]TJ
+/F105 7.97011 Tf 1 0 0 1 536.007 307.809 Tm [<002D0046004400550056005300460053>]TJ
+/F63 7.97011 Tf 1 0 0 1 563.52 307.809 Tm [<001B>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 298.843 Tm [<004B00500043>]TJ
+/F63 7.97011 Tf 1 0 0 1 501.879 298.843 Tm [<000D>]TJ
+/F105 7.97011 Tf 1 0 0 1 505.418 298.843 Tm [<0054004D004A00450046>]TJ
+/F63 7.97011 Tf 1 0 0 1 520.473 298.843 Tm [<000D>-200<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 537.155 298.843 Tm [<0054005500460051>]TJ
+/F63 7.97011 Tf 1 0 0 1 550.911 298.843 Tm [<000F>]TJ
+1 0 0 1 491.852 289.876 Tm [<02650046005A000800530046>-196<0054005600EF0044004A0046004F0055>-197<00550050>-197<00430056004A004D0045>-197<0042>]TJ
+1 0 0 1 491.852 280.91 Tm [<00510053004600540046004F005500420055004A0050004F000D>-200<0042004F0045>-200<00450050004F00080055>]TJ
+1 0 0 1 491.852 271.944 Tm [<004F004600460045>-200<00550050>-200<00430046>-200<0044005300460042005500460045>]TJ
+1 0 0 1 491.852 262.977 Tm [<00430046004700500053004600490042004F0045000F>-266<002F0050004F0046005500490046004D004600540054000D>]TJ
+1 0 0 1 491.852 254.011 Tm [<003A>]TJ
+/F84 7.97011 Tf 1 0 0 1 495.303 255.206 Tm [<00F1>]TJ
+/F63 7.97011 Tf 1 0 0 1 498.531 252.815 Tm [<0039>]TJ
+1 0 0 1 503.234 254.011 Tm [<00080054>-200<0051004200530042004E0046005500460053>-200<0054005A004F005500420059>-200<004A0054>]TJ
+1 0 0 1 491.852 245.044 Tm [<0056005400460045>-200<0046005700460053005A00580049004600530046000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 305.269 Tm [<00580049004A00440049>-220<004A0054>-220<0056005400460045>-220<004A004F>-220<004E0042004F005A>-220<00500055004900460053>-220<0051004D0042004400460054>-220<004A004F>]TJ
+/F63 9.96264 Tf 1 0 0 1 266.85 305.269 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 299.139 305.269 Tm [<000D>-220<004A0054>-220<00420054>-220<00470050004D004D005000580054001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 281.358 Tm [<003F0056004800570053004400550044005000480057004800550003005300440055004400500048005700480055001D>]TJ
+1 0 0 1 113.386 269.403 Tm [<000300030044005700570055004C0045005800570048001400030020000300590044004F005800480024>]TJ
+1 0 0 1 113.386 257.448 Tm [<000300030044005700570055004C0045005800570048001500030044005700570055004C0045005800570048001600030020>-1<000300590044004F005800480025>]TJ
+1 0 0 1 113.386 245.493 Tm [<00030003001100110011>]TJ
+1 0 0 1 113.386 233.538 Tm [<003F005300440055>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 209.627 Tm [<003A>]TJ
+1.02 0 0 1 119.153 209.627 Tm [<00500056>-237<004E>]TJ
+1.03 0 0 1 140.316 209.627 Tm [<004A>]TJ
+1.02 0 0 1 143.046 209.627 Tm [<00480049>]TJ
+1.03 0 0 1 153.319 209.627 Tm [<0055>-235<00EB>]TJ
+1.02 0 0 1 165.164 209.627 Tm [<004F0045>]TJ
+1.03 0 0 1 178.544 209.627 Tm [<0055>]TJ
+1.02 0 0 1 182.217 209.627 Tm [<0049>]TJ
+1.03 0 0 1 187.755 209.627 Tm [<004A>]TJ
+1.02 0 0 1 190.485 209.627 Tm [<0054>-237<0054>]TJ
+1.03 0 0 1 201.049 209.627 Tm [<005A>]TJ
+1.02 0 0 1 205.79 209.627 Tm [<004F>]TJ
+1.03 0 0 1 211.461 209.627 Tm [<0055>]TJ
+1.02 0 0 1 215.134 209.627 Tm [<0042>]TJ
+1.03 0 0 1 219.748 209.627 Tm [<0059>]TJ
+1.02 0 0 1 227.026 209.627 Tm [<00540050004E0046005800490042>]TJ
+1.03 0 0 1 266.068 209.627 Tm [<0055>]TJ
+1.02 0 0 1 272.156 209.627 Tm [<0043>]TJ
+1.03 0 0 1 277.329 209.627 Tm [<004A>]TJ
+1.02 0 0 1 280.058 209.627 Tm [<005B0042>]TJ
+1.03 0 0 1 289.153 209.627 Tm [<00530053>]TJ
+1.02 0 0 1 296.849 209.627 Tm [<0046>]TJ
+1.03 0 0 1 301.371 209.627 Tm [<000D>]TJ
+1.02 0 0 1 306.356 209.627 Tm [<00430056>]TJ
+1.03 0 0 1 316.894 209.627 Tm [<0055>-235<004A0055>-235<004A>]TJ
+1.02 0 0 1 334.529 209.627 Tm [<0054>-237<00490042004F0045>]TJ
+1.03 0 0 1 362.135 209.627 Tm [<005A000F>-350<002A0055>-235<004A>]TJ
+1.02 0 0 1 385.123 209.627 Tm [<0054>]TJ
+1.03 0 0 1 391.613 209.627 Tm [<0055>]TJ
+1.02 0 0 1 395.287 209.627 Tm [<00490046>]TJ
+1.03 0 0 1 407.761 209.627 Tm [<003A>]TJ
+/F90 9.96264 Tf 1 0 0 1 412.532 211.122 Tm [<00F1>]TJ
+/F105 9.96264 Tf 1 0 0 1 416.836 208.133 Tm [<0039>]TJ
+1.02 0 0 1 425.119 209.627 Tm [<0054>]TJ
+1.03 0 0 1 429.193 209.627 Tm [<005A>]TJ
+1.02 0 0 1 433.934 209.627 Tm [<004F>]TJ
+1.03 0 0 1 439.605 209.627 Tm [<0055>]TJ
+1.02 0 0 1 443.278 209.627 Tm [<0042>]TJ
+1.03 0 0 1 447.892 209.627 Tm [<0059000D>]TJ
+1.02 0 0 1 457.74 209.627 Tm [<0042004F0045>]TJ
+1.03 0 0 1 475.733 209.627 Tm [<004A0047>]TJ
+1.03 0 0 1 113.386 197.672 Tm [<005A>]TJ
+1.02 0 0 1 118.127 197.672 Tm [<00500056>-246<00580042004F>]TJ
+1.03 0 0 1 148.318 197.672 Tm [<0055>-243<0055>]TJ
+1.02 0 0 1 158.165 197.672 Tm [<0050>-246<004C004F00500058>-246<004E0050>]TJ
+1.03 0 0 1 204.463 197.672 Tm [<0053>]TJ
+1.02 0 0 1 208.311 197.672 Tm [<0046>-246<0042004300500056>]TJ
+1.03 0 0 1 235.617 197.672 Tm [<0055>-243<004A0055000D>]TJ
+1.02 0 0 1 253.285 197.672 Tm [<005400460046>]TJ
+1.03 0 0 1 268.904 197.672 Tm [<0055>]TJ
+1.02 0 0 1 272.577 197.672 Tm [<00490046>]TJ
+1.03 0 0 1 285.138 197.672 Tm [<003A>]TJ
+/F90 9.96264 Tf 1 0 0 1 289.908 199.166 Tm [<00F1>]TJ
+/F105 9.96264 Tf 1 0 0 1 294.212 196.178 Tm [<0039>]TJ
+1.02 0 0 1 302.58 197.672 Tm [<0045005000440056004E0046004F>]TJ
+1.03 0 0 1 340.911 197.672 Tm [<0055>]TJ
+1.02 0 0 1 344.585 197.672 Tm [<0042>]TJ
+1.03 0 0 1 349.198 197.672 Tm [<0055004A>]TJ
+1.02 0 0 1 355.601 197.672 Tm [<0050004F>]TJ
+1.03 0 0 1 366.403 197.672 Tm [<000F>]TJ
+1.02 0 0 1 372.765 197.672 Tm [<00290046>]TJ
+1.03 0 0 1 384.715 197.672 Tm [<0053>]TJ
+1.02 0 0 1 388.563 197.672 Tm [<0046>]TJ
+1.03 0 0 1 393.085 197.672 Tm [<0008>]TJ
+1.02 0 0 1 395.158 197.672 Tm [<0054>-246<004900500058>]TJ
+1.03 0 0 1 421.813 197.672 Tm [<004A0055>]TJ
+1.02 0 0 1 430.716 197.672 Tm [<00580050>]TJ
+1.03 0 0 1 442.758 197.672 Tm [<0053>]TJ
+1.02 0 0 1 446.606 197.672 Tm [<004C0054>]TJ
+1.03 0 0 1 455.752 197.672 Tm [<001B>]TJ
+1.02 0 0 1 461.805 197.672 Tm [<0042>]TJ
+1.03 0 0 1 466.419 197.672 Tm [<00470055>]TJ
+1.02 0 0 1 473.52 197.672 Tm [<0046>]TJ
+1.03 0 0 1 478.042 197.672 Tm [<0053>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 113.386 185.717 Tm [<003F>]TJ
+0.985 0 0 1 118.092 185.717 Tm [<00560048>]TJ
+0.98 0 0 1 127.553 185.717 Tm [<0057>]TJ
+0.985 0 0 1 132.259 185.717 Tm [<00530044>]TJ
+0.98 0 0 1 141.719 185.717 Tm [<0055>]TJ
+0.985 0 0 1 146.426 185.717 Tm [<004400500048>]TJ
+0.98 0 0 1 160.616 185.717 Tm [<0057>]TJ
+0.985 0 0 1 165.323 185.717 Tm [<0048>]TJ
+0.98 0 0 1 170.053 185.717 Tm [<0055>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 176.97 185.717 Tm [<005A>]TJ
+0.985 0 0 1 181.481 185.717 Tm [<00500056>]TJ
+0.98 0 0 1 193.829 185.717 Tm [<0055005A>]TJ
+0.985 0 0 1 201.835 185.717 Tm [<00510046>-225<0046>]TJ
+0.98 0 0 1 217.902 185.717 Tm [<004A0055>]TJ
+0.985 0 0 1 223.994 185.717 Tm [<00490046>]TJ
+0.98 0 0 1 233.709 185.717 Tm [<0053>]TJ
+/F117 7.97011 Tf 0.985 0 0 1 239.581 185.717 Tm [<0056>]TJ
+0.98 0 0 1 244.311 185.717 Tm [<004F004C>]TJ
+0.985 0 0 1 253.724 185.717 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 265.395 185.717 Tm [<0050>]TJ
+0.98 0 0 1 270.351 185.717 Tm [<0053>]TJ
+/F117 7.97011 Tf 0.985 0 0 1 276.223 185.717 Tm [<0056>]TJ
+0.98 0 0 1 280.953 185.717 Tm [<0057>]TJ
+0.985 0 0 1 285.66 185.717 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 297.331 185.717 Tm [<0009>]TJ
+0.985 0 0 1 300.533 185.717 Tm [<0050>]TJ
+0.98 0 0 1 305.489 185.717 Tm [<0053>]TJ
+/F117 7.97011 Tf 0.98 0 0 1 311.361 185.717 Tm [<004D>]TJ
+0.985 0 0 1 316.068 185.717 Tm [<00520045>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 325.528 185.717 Tm [<000D>]TJ
+0.985 0 0 1 330.136 185.717 Tm [<00420054>-225<00580046>]TJ
+0.98 0 0 1 351.777 185.717 Tm [<0008004D004D>]TJ
+0.985 0 0 1 360.959 185.717 Tm [<005400460046>]TJ
+0.98 0 0 1 375.838 185.717 Tm [<004D>]TJ
+0.985 0 0 1 378.338 185.717 Tm [<0042>]TJ
+0.98 0 0 1 382.793 185.717 Tm [<0055>]TJ
+0.985 0 0 1 386.288 185.717 Tm [<0046>]TJ
+0.98 0 0 1 390.655 185.717 Tm [<0053000A000F>-305<0265>]TJ
+0.985 0 0 1 412.8 185.717 Tm [<0046004F>-225<0042>-225<00440050>]TJ
+0.98 0 0 1 440.43 185.717 Tm [<004D>]TJ
+0.985 0 0 1 442.93 185.717 Tm [<0050004F>]TJ
+0.98 0 0 1 453.361 185.717 Tm [<000D>]TJ
+0.985 0 0 1 457.969 185.717 Tm [<00580049>]TJ
+0.98 0 0 1 469.99 185.717 Tm [<004A>]TJ
+0.985 0 0 1 472.587 185.717 Tm [<00440049>]TJ
+0.98 0 0 1 113.386 173.762 Tm [<004E>]TJ
+0.97 0 0 1 121.314 173.762 Tm [<004A>]TJ
+0.98 0 0 1 123.884 173.762 Tm [<00480049>]TJ
+0.97 0 0 1 133.755 173.762 Tm [<0055>]TJ
+0.98 0 0 1 139.119 173.762 Tm [<00430046>-195<0051>]TJ
+0.97 0 0 1 155.433 173.762 Tm [<0053>]TJ
+0.98 0 0 1 159.057 173.762 Tm [<004600440046004500460045>-195<0043>]TJ
+0.97 0 0 1 193.073 173.762 Tm [<005A>]TJ
+0.98 0 0 1 199.442 173.762 Tm [<0042>-195<00540051004200440046>]TJ
+0.97 0 0 1 227.502 173.762 Tm [<000F>-292<0265>]TJ
+0.98 0 0 1 242.504 173.762 Tm [<0046004F>]TJ
+0.97 0 0 1 254.201 173.762 Tm [<005A>]TJ
+0.98 0 0 1 258.666 173.762 Tm [<00500056>]TJ
+0.97 0 0 1 270.655 173.762 Tm [<0055005A>]TJ
+0.98 0 0 1 278.579 173.762 Tm [<00510046>]TJ
+0.97 0 0 1 289.925 173.762 Tm [<0055>]TJ
+0.98 0 0 1 293.384 173.762 Tm [<00490046>-195<004F0042004E0046>-195<0050>]TJ
+0.97 0 0 1 333.941 173.762 Tm [<0047>]TJ
+0.98 0 0 1 339.073 173.762 Tm [<0042004F>-195<0042>]TJ
+0.97 0 0 1 355.29 173.762 Tm [<005500550053004A>]TJ
+0.98 0 0 1 368.404 173.762 Tm [<00430056>]TJ
+0.97 0 0 1 378.528 173.762 Tm [<0055>]TJ
+0.98 0 0 1 381.988 173.762 Tm [<0046>]TJ
+0.97 0 0 1 386.333 173.762 Tm [<000D>]TJ
+0.98 0 0 1 390.662 173.762 Tm [<0050>]TJ
+0.97 0 0 1 395.592 173.762 Tm [<0053>-197<0055>]TJ
+0.98 0 0 1 404.58 173.762 Tm [<00490046>-195<004F0042004E00460054>-195<0050>]TJ
+0.97 0 0 1 449.052 173.762 Tm [<0047>]TJ
+0.98 0 0 1 454.184 173.762 Tm [<00540046>]TJ
+0.97 0 0 1 462.444 173.762 Tm [<0057>]TJ
+0.98 0 0 1 467.015 173.762 Tm [<0046>]TJ
+0.97 0 0 1 471.359 173.762 Tm [<0053>]TJ
+0.98 0 0 1 474.983 173.762 Tm [<0042>]TJ
+0.97 0 0 1 479.416 173.762 Tm [<004D>]TJ
+1.02 0 0 1 113.386 161.807 Tm [<0042>]TJ
+1.03 0 0 1 117.999 161.807 Tm [<005500550053004A>]TJ
+1.02 0 0 1 131.924 161.807 Tm [<00430056>]TJ
+1.03 0 0 1 142.462 161.807 Tm [<0055>]TJ
+1.02 0 0 1 146.136 161.807 Tm [<00460054>-251<0054004600510042>]TJ
+1.03 0 0 1 175.803 161.807 Tm [<0053>]TJ
+1.02 0 0 1 179.651 161.807 Tm [<0042>]TJ
+1.03 0 0 1 184.264 161.807 Tm [<0055>]TJ
+1.02 0 0 1 187.938 161.807 Tm [<00460045>-251<0043>]TJ
+1.03 0 0 1 205.481 161.807 Tm [<005A>]TJ
+1.02 0 0 1 212.777 161.807 Tm [<0042>-251<00540051004200440046>]TJ
+1.03 0 0 1 242.556 161.807 Tm [<000D>]TJ
+1.02 0 0 1 247.715 161.807 Tm [<0042004F0045>]TJ
+1.03 0 0 1 265.848 161.807 Tm [<0055>]TJ
+1.02 0 0 1 269.522 161.807 Tm [<00490046004F>-251<0042>]TJ
+1.03 0 0 1 294.976 161.807 Tm [<0041001E0008>]TJ
+1.02 0 0 1 307.053 161.807 Tm [<0054>]TJ
+1.03 0 0 1 311.128 161.807 Tm [<004A>]TJ
+1.02 0 0 1 313.858 161.807 Tm [<0048004F>]TJ
+1.03 0 0 1 324.264 161.807 Tm [<000F>]TJ
+1.02 0 0 1 330.789 161.807 Tm [<0027>]TJ
+1.03 0 0 1 336.185 161.807 Tm [<004A>]TJ
+1.02 0 0 1 338.915 161.807 Tm [<004F0042>]TJ
+1.03 0 0 1 349.199 161.807 Tm [<004D004D005A>-248<005A>]TJ
+1.02 0 0 1 366.489 161.807 Tm [<00500056>-251<0048>]TJ
+1.03 0 0 1 384.277 161.807 Tm [<004A0057>]TJ
+1.02 0 0 1 391.86 161.807 Tm [<0046>]TJ
+1.03 0 0 1 398.937 161.807 Tm [<005A>]TJ
+1.02 0 0 1 403.678 161.807 Tm [<00500056>]TJ
+1.03 0 0 1 414.175 161.807 Tm [<0053>-249<0057>]TJ
+1.02 0 0 1 425.431 161.807 Tm [<0042>]TJ
+1.03 0 0 1 430.045 161.807 Tm [<004D>]TJ
+1.02 0 0 1 432.672 161.807 Tm [<00560046>]TJ
+1.03 0 0 1 442.559 161.807 Tm [<000D>]TJ
+1.02 0 0 1 447.719 161.807 Tm [<00580049>]TJ
+1.03 0 0 1 460.167 161.807 Tm [<004A>]TJ
+1.02 0 0 1 462.897 161.807 Tm [<00440049>]TJ
+1.03 0 0 1 475.085 161.807 Tm [<004A>]TJ
+1.02 0 0 1 477.815 161.807 Tm [<0054>]TJ
+0.99 0 0 1 113.386 149.851 Tm [<0046004F004500460045>-224<0043>]TJ
+0.985 0 0 1 145.177 149.851 Tm [<005A>-225<0055>]TJ
+0.99 0 0 1 155.436 149.851 Tm [<00490046>]TJ
+0.985 0 0 1 167.412 149.851 Tm [<0047>]TJ
+0.99 0 0 1 170.689 149.851 Tm [<0050>]TJ
+0.985 0 0 1 175.67 149.851 Tm [<004D004D>]TJ
+0.99 0 0 1 180.694 149.851 Tm [<00500058>]TJ
+0.985 0 0 1 192.382 149.851 Tm [<004A>]TJ
+0.99 0 0 1 194.992 149.851 Tm [<004F0048>-224<00540051004200440046>]TJ
+0.985 0 0 1 229.249 149.851 Tm [<000F>-304<002A0047>]TJ
+0.99 0 0 1 243.305 149.851 Tm [<0042>]TJ
+0.985 0 0 1 249.995 149.851 Tm [<0057>]TJ
+0.99 0 0 1 254.636 149.851 Tm [<0042>]TJ
+0.985 0 0 1 259.114 149.851 Tm [<004D>]TJ
+0.99 0 0 1 261.626 149.851 Tm [<00560046>-224<004E00560054>]TJ
+0.985 0 0 1 290.606 149.851 Tm [<0055>]TJ
+0.99 0 0 1 296.331 149.851 Tm [<00440050004F>]TJ
+0.985 0 0 1 310.79 149.851 Tm [<0055>]TJ
+0.99 0 0 1 314.304 149.851 Tm [<0042>]TJ
+0.985 0 0 1 318.781 149.851 Tm [<004A>]TJ
+0.99 0 0 1 321.392 149.851 Tm [<004F>-224<0042>-224<00540051004200440046>]TJ
+0.985 0 0 1 357.742 149.851 Tm [<000D>]TJ
+0.99 0 0 1 362.363 149.851 Tm [<0050>]TJ
+0.985 0 0 1 367.344 149.851 Tm [<0053>-225<004A0047>-225<004A00550008>]TJ
+0.99 0 0 1 389.441 149.851 Tm [<0054>-224<0046004E0051>]TJ
+0.985 0 0 1 413.154 149.851 Tm [<0055005A000D>-225<005A>]TJ
+0.99 0 0 1 430.356 149.851 Tm [<00500056>-224<004E00560054>]TJ
+0.985 0 0 1 459.928 149.851 Tm [<0055>]TJ
+0.99 0 0 1 465.653 149.851 Tm [<0048>]TJ
+0.985 0 0 1 470.249 149.851 Tm [<004A0057>]TJ
+0.99 0 0 1 477.501 149.851 Tm [<0046>]TJ
+1 0 0 1 113.386 137.896 Tm [<004A0055>-220<004300460055005800460046004F>-220<004300530042004400460054>-220<00500053>-220<0045005000560043004D0046>-220<005200560050005500460054000D>-220<00420054>-220<004A004F001B>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01ED>]TJ
+ET
+endstream
+endobj
+26 0 obj <<
+/Type /Page
+/Contents 27 0 R
+/Resources 25 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 8 0 R
+>> endobj
+28 0 obj <<
+/D [26 0 R /XYZ 113.386 541.931 null]
+>> endobj
+29 0 obj <<
+/D [26 0 R /XYZ 113.386 364.945 null]
+>> endobj
+25 0 obj <<
+/Font << /F105 5 0 R /F63 7 0 R /F111 6 0 R /F90 14 0 R /F117 23 0 R /F123 17 0 R /F84 30 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+33 0 obj <<
+/Length 31950
+>>
+stream
+BT
+/F111 7.97011 Tf 1 0 0 1 113.386 640.013 Tm [<003F00560048005700530044005500440050004800570048005500030056005700480053001D>]TJ
+1 0 0 1 113.386 628.058 Tm [<000300030044005700570055004C0045005800570048001400030020000300B50050005C000300590044004F0058004800B5>]TJ
+1 0 0 1 113.386 616.103 Tm [<000300030044005700570055004C00450058005700480015000300200003005E0060>]TJ
+1 0 0 1 113.386 604.148 Tm [<00030003001100110011>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 113.386 580.238 Tm [<0030>]TJ
+0.97 0 0 1 120.432 580.238 Tm [<0053000D>-225<004A0047>]TJ
+0.98 0 0 1 136.583 580.238 Tm [<0042>]TJ
+0.97 0 0 1 143.194 580.238 Tm [<0057>]TJ
+0.98 0 0 1 147.765 580.238 Tm [<0042>]TJ
+0.97 0 0 1 152.198 580.238 Tm [<004D>]TJ
+0.98 0 0 1 154.672 580.238 Tm [<00560046>-223<004300460048>]TJ
+0.97 0 0 1 180.215 580.238 Tm [<004A>]TJ
+0.98 0 0 1 182.785 580.238 Tm [<004F0054>-223<0050>]TJ
+0.97 0 0 1 199.258 580.238 Tm [<0053>]TJ
+0.98 0 0 1 205.062 580.238 Tm [<0046004F00450054>-223<0058>]TJ
+0.97 0 0 1 232.674 580.238 Tm [<004A0055>]TJ
+0.98 0 0 1 238.705 580.238 Tm [<0049>-223<0042>-223<00440050004F>]TJ
+0.97 0 0 1 267.13 580.238 Tm [<00550053>]TJ
+0.98 0 0 1 274.214 580.238 Tm [<0050>]TJ
+0.97 0 0 1 279.144 580.238 Tm [<004D>]TJ
+0.98 0 0 1 283.797 580.238 Tm [<00540046005200560046004F00440046>]TJ
+0.97 0 0 1 320.234 580.238 Tm [<000D>-225<004A0055>]TJ
+0.98 0 0 1 332.993 580.238 Tm [<0054004900500056>]TJ
+0.97 0 0 1 352.315 580.238 Tm [<004D>]TJ
+0.98 0 0 1 354.789 580.238 Tm [<0045>-223<00430046>-223<0046004F0044>]TJ
+0.97 0 0 1 387.276 580.238 Tm [<004D>]TJ
+0.98 0 0 1 389.75 580.238 Tm [<0050005400460045>-223<00430046>]TJ
+0.97 0 0 1 419.52 580.238 Tm [<0055>]TJ
+0.98 0 0 1 422.98 580.238 Tm [<005800460046004F>-223<0043>]TJ
+0.97 0 0 1 450.905 580.238 Tm [<0053>]TJ
+0.98 0 0 1 454.529 580.238 Tm [<0042004400460054>-223<0050>]TJ
+0.97 0 0 1 478.266 580.238 Tm [<0053>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 579.789 Tm [<002A0047>-200<005A00500056>-200<0049004200570046>-200<0042004F005A>-200<00450050005600430055000D>-200<005A00500056>]TJ
+1 0 0 1 491.852 570.823 Tm [<00440042004F>-200<0042004D00580042005A0054>-200<00530046004D005A>-200<0050004F>-200<004300530042004400460054>]TJ
+1 0 0 1 491.852 561.856 Tm [<0042004F0045>-200<005200560050005500460054000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 568.282 Tm [<0045005000560043004D0046>-220<005200560050005500460054>-220<004200480042004A004F000D>-220<0056004F004D004600540054>-220<004A0055>-220<004A0054>-220<004E004200450046>-220<00500047>-220<0042>-220<0054004A004F0048004D0046>-220<00440050004F005500530050004D>-220<00540046005200560046004F00440046000F>-293<026500560054001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 544.372 Tm [<003F00560048005700530044005500440050004800570048005500030056005700480053001D>]TJ
+1 0 0 1 113.386 532.417 Tm [<000300030044005700570055004C0045005800570048001600030020000300B5003F0046005200500050004400510047005E>-1<00440055004A00580050004800510057006000B5>]TJ
+1 0 0 1 113.386 520.462 Tm [<000300030044005700570055004C00450058005700480017000300200003003F004600520051005700550052004F00560048>-1<005400580048005100460048>]TJ
+1 0 0 1 113.386 508.506 Tm [<00030003001100110011>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 484.596 Tm [<0027>]TJ
+1.03 0 0 1 118.782 484.596 Tm [<004A>]TJ
+1.02 0 0 1 121.511 484.596 Tm [<004F0042>]TJ
+1.03 0 0 1 131.795 484.596 Tm [<004D004D005A000D>]TJ
+1.02 0 0 1 146.675 484.596 Tm [<0042004F0045>-229<004E00500054>]TJ
+1.03 0 0 1 182.047 484.596 Tm [<0055>-227<004A>]TJ
+1.02 0 0 1 190.786 484.596 Tm [<004E00510050>]TJ
+1.03 0 0 1 209.473 484.596 Tm [<00530055>]TJ
+1.02 0 0 1 216.995 484.596 Tm [<0042004F>]TJ
+1.03 0 0 1 227.279 484.596 Tm [<0055004D005A000D>]TJ
+1.02 0 0 1 243.206 484.596 Tm [<0042>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 250.155 484.596 Tm [<003F>]TJ
+1.02 0 0 1 255.101 484.596 Tm [<00560048>]TJ
+1.03 0 0 1 264.898 484.596 Tm [<0057>]TJ
+1.02 0 0 1 269.844 484.596 Tm [<00530044>]TJ
+1.03 0 0 1 279.641 484.596 Tm [<0055>]TJ
+1.02 0 0 1 284.587 484.596 Tm [<004400500048>]TJ
+1.03 0 0 1 299.282 484.596 Tm [<0057>]TJ
+1.02 0 0 1 304.228 484.596 Tm [<0048>]TJ
+1.03 0 0 1 309.127 484.596 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 316.409 484.596 Tm [<004500460044>]TJ
+1.03 0 0 1 330.32 484.596 Tm [<004D>]TJ
+1.02 0 0 1 332.947 484.596 Tm [<0042>]TJ
+1.03 0 0 1 337.561 484.596 Tm [<0053>]TJ
+1.02 0 0 1 341.409 484.596 Tm [<0042>]TJ
+1.03 0 0 1 346.022 484.596 Tm [<0055004A>]TJ
+1.02 0 0 1 352.425 484.596 Tm [<0050004F>]TJ
+1.03 0 0 1 365.563 484.596 Tm [<004A>]TJ
+1.02 0 0 1 368.293 484.596 Tm [<0054>-229<0046004F004500460045>-230<0043>]TJ
+1.03 0 0 1 407.514 484.596 Tm [<005A>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 414.59 484.596 Tm [<003F>]TJ
+1.02 0 0 1 419.536 484.596 Tm [<00530044>]TJ
+1.03 0 0 1 429.333 484.596 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 436.615 484.596 Tm [<00580049>]TJ
+1.03 0 0 1 449.063 484.596 Tm [<004A>]TJ
+1.02 0 0 1 451.793 484.596 Tm [<00440049>]TJ
+1.03 0 0 1 461.426 484.596 Tm [<000D>]TJ
+1.02 0 0 1 466.312 484.596 Tm [<0042004F0045>]TJ
+1 0 0 1 113.386 472.641 Tm [<005500490042005500080054>-220<005500490046>-220<004400500050004D>-220<00550049004A004F0048000D>-220<00440042004F>-220<00430046>-220<0042>-220<0043004D0042004F004C>-220<004D004A004F0046000D>-220<0054004A004F00440046>-220<0035>]TJ
+1 0 0 1 305.817 470.574 Tm [<0026>]TJ
+1 0 0 1 310.101 472.641 Tm [<0039>-220<004A004F00540046005300550054>-220<0042>]TJ
+/F111 7.97011 Tf 1 0 0 1 355.003 472.641 Tm [<003F005300440055>]TJ
+/F105 9.96264 Tf 1 0 0 1 376.404 472.641 Tm [<00420055>-220<0046004200440049>-220<0043004D0042004F004C>-220<004D004A004F0046000F>]TJ
+1.03 0 0 1 133.311 460.686 Tm [<0265>]TJ
+1.02 0 0 1 143.727 460.686 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 150.731 460.686 Tm [<003F>]TJ
+1.02 0 0 1 155.677 460.686 Tm [<00560048>]TJ
+1.03 0 0 1 165.474 460.686 Tm [<0057>]TJ
+1.02 0 0 1 170.42 460.686 Tm [<00530044>]TJ
+1.03 0 0 1 180.217 460.686 Tm [<0055>]TJ
+1.02 0 0 1 185.163 460.686 Tm [<004400500048>]TJ
+1.03 0 0 1 199.859 460.686 Tm [<0057>]TJ
+1.02 0 0 1 204.805 460.686 Tm [<0048>]TJ
+1.03 0 0 1 209.703 460.686 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 217.132 460.686 Tm [<004500460044>]TJ
+1.03 0 0 1 231.044 460.686 Tm [<004D>]TJ
+1.02 0 0 1 233.671 460.686 Tm [<0042>]TJ
+1.03 0 0 1 238.284 460.686 Tm [<0053>]TJ
+1.02 0 0 1 242.132 460.686 Tm [<0042>]TJ
+1.03 0 0 1 246.746 460.686 Tm [<0055004A>]TJ
+1.02 0 0 1 253.149 460.686 Tm [<0050004F>-244<00440042004F>-244<00430046>-244<0056005400460045>-245<00420054>-244<0050>]TJ
+1.03 0 0 1 333.513 460.686 Tm [<00470055>]TJ
+1.02 0 0 1 340.614 460.686 Tm [<0046004F>-244<00420054>]TJ
+1.03 0 0 1 364.46 460.686 Tm [<005A>]TJ
+1.02 0 0 1 369.201 460.686 Tm [<00500056>-244<0058>]TJ
+1.03 0 0 1 389.09 460.686 Tm [<004A>]TJ
+1.02 0 0 1 391.82 460.686 Tm [<00540049>]TJ
+1.03 0 0 1 401.433 460.686 Tm [<001C>-256<0055>]TJ
+1.02 0 0 1 410.248 460.686 Tm [<00490046>]TJ
+1.03 0 0 1 420.309 460.686 Tm [<0053>]TJ
+1.02 0 0 1 424.157 460.686 Tm [<0046>]TJ
+1.03 0 0 1 428.679 460.686 Tm [<0008>]TJ
+1.02 0 0 1 430.751 460.686 Tm [<0054>-244<004F0050>-244<004F004600460045>]TJ
+1.03 0 0 1 473.084 460.686 Tm [<0055>]TJ
+1.02 0 0 1 476.758 460.686 Tm [<0050>]TJ
+1.03 0 0 1 113.386 448.731 Tm [<0053>]TJ
+1.02 0 0 1 117.234 448.731 Tm [<00460054005100460044>]TJ
+1.03 0 0 1 139.753 448.731 Tm [<004A0047005A>]TJ
+1.02 0 0 1 153.318 448.731 Tm [<0046004200440049>-262<0042>]TJ
+1.03 0 0 1 179.368 448.731 Tm [<005500550053004A>]TJ
+1.02 0 0 1 193.293 448.731 Tm [<00430056>]TJ
+1.03 0 0 1 203.831 448.731 Tm [<0055>]TJ
+1.02 0 0 1 207.505 448.731 Tm [<0046>-262<0050004F>-263<0046004200440049>-262<004500460044>]TJ
+1.03 0 0 1 263.513 448.731 Tm [<004D>]TJ
+1.02 0 0 1 266.14 448.731 Tm [<0042>]TJ
+1.03 0 0 1 270.753 448.731 Tm [<0053>]TJ
+1.02 0 0 1 274.601 448.731 Tm [<0042>]TJ
+1.03 0 0 1 279.215 448.731 Tm [<0055004A>]TJ
+1.02 0 0 1 285.618 448.731 Tm [<0050004F>]TJ
+1.03 0 0 1 296.42 448.731 Tm [<001B>-377<0055>]TJ
+1.02 0 0 1 306.482 448.731 Tm [<00490046>]TJ
+1.03 0 0 1 316.542 448.731 Tm [<005A>-260<0053>]TJ
+1.02 0 0 1 327.799 448.731 Tm [<0046>]TJ
+1.03 0 0 1 332.321 448.731 Tm [<0055>]TJ
+1.02 0 0 1 335.995 448.731 Tm [<0042>]TJ
+1.03 0 0 1 340.608 448.731 Tm [<004A>]TJ
+1.02 0 0 1 343.338 448.731 Tm [<004F>]TJ
+1.03 0 0 1 351.676 448.731 Tm [<0055>]TJ
+1.02 0 0 1 355.349 448.731 Tm [<00490046>]TJ
+1.03 0 0 1 365.41 448.731 Tm [<004A0053>-259<004D>]TJ
+1.02 0 0 1 377.282 448.731 Tm [<00420054>]TJ
+1.03 0 0 1 385.97 448.731 Tm [<0055>]TJ
+1.02 0 0 1 392.312 448.731 Tm [<004500460044>]TJ
+1.03 0 0 1 406.223 448.731 Tm [<004D>]TJ
+1.02 0 0 1 408.85 448.731 Tm [<0042>]TJ
+1.03 0 0 1 413.464 448.731 Tm [<0053>]TJ
+1.02 0 0 1 417.312 448.731 Tm [<00460045>]TJ
+1.03 0 0 1 429.796 448.731 Tm [<0057>]TJ
+1.02 0 0 1 434.65 448.731 Tm [<0042>]TJ
+1.03 0 0 1 439.263 448.731 Tm [<004D>]TJ
+1.02 0 0 1 441.89 448.731 Tm [<00560046>]TJ
+1.03 0 0 1 451.778 448.731 Tm [<000D>]TJ
+1.02 0 0 1 457.078 448.731 Tm [<00580049>]TJ
+1.03 0 0 1 469.527 448.731 Tm [<004A>]TJ
+1.02 0 0 1 472.256 448.731 Tm [<00440049>]TJ
+/F63 9.96264 Tf 1 0 0 1 113.386 436.775 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 147.867 436.775 Tm [<0056005400460054>-219<005800490046004F>-220<004A0055>-220<004F0046004600450054>-220<004A0055000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 400.91 Tm [<002D005000440042004D>-200<0054004600550055004A004F00480054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 113.386 388.955 Tm [<0022>]TJ
+1.03 0 0 1 119.514 388.955 Tm [<005500550053004A>]TJ
+1.02 0 0 1 133.439 388.955 Tm [<00430056>]TJ
+1.03 0 0 1 143.977 388.955 Tm [<0055>]TJ
+1.02 0 0 1 147.65 388.955 Tm [<00460054>-213<0042>]TJ
+1.03 0 0 1 163.027 388.955 Tm [<0053>]TJ
+1.02 0 0 1 166.875 388.955 Tm [<0046>-213<00540046>]TJ
+1.03 0 0 1 182.161 388.955 Tm [<0055>-211<004D>]TJ
+1.02 0 0 1 190.628 388.955 Tm [<005000440042>]TJ
+1.03 0 0 1 204.469 388.955 Tm [<004D004D005A>]TJ
+1.02 0 0 1 216.63 388.955 Tm [<005800490046004F>]TJ
+1.03 0 0 1 241.437 388.955 Tm [<0055>]TJ
+1.02 0 0 1 245.111 388.955 Tm [<00490046>]TJ
+1.03 0 0 1 255.171 388.955 Tm [<005A>]TJ
+1.02 0 0 1 262.079 388.955 Tm [<0042>]TJ
+1.03 0 0 1 266.692 388.955 Tm [<0053>]TJ
+1.02 0 0 1 270.54 388.955 Tm [<0046>-213<0048>]TJ
+1.03 0 0 1 281.964 388.955 Tm [<004A0057>]TJ
+1.02 0 0 1 289.548 388.955 Tm [<0046004F>-213<00430046>]TJ
+1.03 0 0 1 311.601 388.955 Tm [<0055>]TJ
+1.02 0 0 1 315.275 388.955 Tm [<005800460046004F>-213<0043>]TJ
+1.03 0 0 1 344.238 388.955 Tm [<0053>]TJ
+1.02 0 0 1 348.086 388.955 Tm [<00420044004C0046>]TJ
+1.03 0 0 1 366.388 388.955 Tm [<0055>]TJ
+1.02 0 0 1 370.061 388.955 Tm [<0054>-213<0042>]TJ
+1.03 0 0 1 380.917 388.955 Tm [<00470055>]TJ
+1.02 0 0 1 388.017 388.955 Tm [<0046>]TJ
+1.03 0 0 1 392.54 388.955 Tm [<0053>-211<0055>]TJ
+1.02 0 0 1 402.228 388.955 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 414.455 388.955 Tm [<003F>]TJ
+1.02 0 0 1 419.401 388.955 Tm [<0056>]TJ
+1.03 0 0 1 424.299 388.955 Tm [<004F004C>]TJ
+1.02 0 0 1 434.192 388.955 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 446.156 388.955 Tm [<0050>]TJ
+1.03 0 0 1 451.287 388.955 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 457.302 388.955 Tm [<003F>]TJ
+1.02 0 0 1 462.248 388.955 Tm [<0056>]TJ
+1.03 0 0 1 467.147 388.955 Tm [<0057>]TJ
+1.02 0 0 1 472.093 388.955 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 113.386 377 Tm [<00440050004E004E0042004F00450054>]TJ
+1.01 0 0 1 158.101 377 Tm [<000F>-290<0265>]TJ
+1.005 0 0 1 173.699 377 Tm [<0046>]TJ
+1.01 0 0 1 178.154 377 Tm [<005A>]TJ
+1.005 0 0 1 184.984 377 Tm [<0058>]TJ
+1.01 0 0 1 191.792 377 Tm [<004A004D004D>]TJ
+1.005 0 0 1 201.802 377 Tm [<00430046>-217<0056005400460045>]TJ
+1.01 0 0 1 234.689 377 Tm [<0047>]TJ
+1.005 0 0 1 238.049 377 Tm [<0050>]TJ
+1.01 0 0 1 243.106 377 Tm [<0053>-216<0055>]TJ
+1.005 0 0 1 252.662 377 Tm [<0049>]TJ
+1.01 0 0 1 258.119 377 Tm [<004A>]TJ
+1.005 0 0 1 260.796 377 Tm [<0054>-217<00510042>]TJ
+1.01 0 0 1 276.764 377 Tm [<00530055004A>]TJ
+1.005 0 0 1 286.816 377 Tm [<00440056>]TJ
+1.01 0 0 1 296.137 377 Tm [<004D>]TJ
+1.005 0 0 1 298.713 377 Tm [<0042>]TJ
+1.01 0 0 1 303.259 377 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 309.213 377 Tm [<003F>]TJ
+1.005 0 0 1 314.063 377 Tm [<0056>]TJ
+1.01 0 0 1 318.89 377 Tm [<004F004C>]TJ
+1.005 0 0 1 328.59 377 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 340.424 377 Tm [<0050>]TJ
+1.01 0 0 1 345.48 377 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 351.434 377 Tm [<003F>]TJ
+1.005 0 0 1 356.285 377 Tm [<0056>]TJ
+1.01 0 0 1 361.111 377 Tm [<0057>]TJ
+1.005 0 0 1 365.961 377 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 375.614 377 Tm [<000F>-290<0265>]TJ
+1.005 0 0 1 391.211 377 Tm [<0046>-217<0054>]TJ
+1.01 0 0 1 401.863 377 Tm [<005A>]TJ
+1.005 0 0 1 406.511 377 Tm [<004F>]TJ
+1.01 0 0 1 412.098 377 Tm [<0055>]TJ
+1.005 0 0 1 415.701 377 Tm [<0042>]TJ
+1.01 0 0 1 420.246 377 Tm [<0059>-216<004A>]TJ
+1.005 0 0 1 429.873 377 Tm [<0054>]TJ
+1.01 0 0 1 436.069 377 Tm [<0055>]TJ
+1.005 0 0 1 439.671 377 Tm [<00490046>-217<004400560054>]TJ
+1.01 0 0 1 465.101 377 Tm [<0055>]TJ
+1.005 0 0 1 468.703 377 Tm [<0050004E>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 376.551 Tm [<003200560050005500460054>-200<0042004F0045>-200<004300530042004400460054>-200<004200530046>]TJ
+1 0 0 1 491.852 367.585 Tm [<00530046004E0050005700460045>-200<0042004F005A00580042005A000F>-266<00340050>-200<005A00500056>]TJ
+1 0 0 1 491.852 358.619 Tm [<00440042004F>-198<005600540046>-198<005500490046004E>-198<005500500050000D>-198<0042004D005500490050005600480049>]TJ
+1 0 0 1 491.852 349.652 Tm [<005500490046005A000800530046>-200<00440050004E0051004D004600550046004D005A>-200<005600540046004D004600540054001B>]TJ
+1 0 0 1 491.852 340.686 Tm [<005500490046>-200<00450046004D004A004E004A00550042005500500053>-200<004A0054>-200<005500490046>]TJ
+1 0 0 1 491.852 331.719 Tm [<00440050004E004E0042000F>]TJ
+/F111 7.97011 Tf 1.015 0 0 1 113.386 365.044 Tm [<004E0048>]TJ
+1.02 0 0 1 123.135 365.044 Tm [<005C00200059>]TJ
+1.015 0 0 1 137.83 365.044 Tm [<0044>]TJ
+1.02 0 0 1 142.704 365.044 Tm [<004F>]TJ
+1.015 0 0 1 147.602 365.044 Tm [<00580048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 159.535 365.044 Tm [<0047>]TJ
+1.015 0 0 1 162.929 365.044 Tm [<004200540049>]TJ
+1.02 0 0 1 177.086 365.044 Tm [<004A>]TJ
+1.015 0 0 1 179.789 365.044 Tm [<0050004F>]TJ
+1.02 0 0 1 190.538 365.044 Tm [<001B>-287<00EB0053>]TJ
+1.015 0 0 1 205.458 365.044 Tm [<0054>]TJ
+1.02 0 0 1 209.513 365.044 Tm [<0055>-214<0055>]TJ
+1.015 0 0 1 218.973 365.044 Tm [<00490046>-216<0042>]TJ
+1.02 0 0 1 235.759 365.044 Tm [<005500550053004A>]TJ
+1.015 0 0 1 249.549 365.044 Tm [<00430056>]TJ
+1.02 0 0 1 260.035 365.044 Tm [<0055>]TJ
+1.015 0 0 1 263.673 365.044 Tm [<0046>]TJ
+1.02 0 0 1 268.173 365.044 Tm [<000D>-215<0055>]TJ
+1.015 0 0 1 276.486 365.044 Tm [<00490046004F>]TJ
+1.02 0 0 1 294.323 365.044 Tm [<0055>]TJ
+1.015 0 0 1 297.961 365.044 Tm [<00490046>]TJ
+1.02 0 0 1 310.157 365.044 Tm [<0057>]TJ
+1.015 0 0 1 314.963 365.044 Tm [<0042>]TJ
+1.02 0 0 1 319.554 365.044 Tm [<004D>]TJ
+1.015 0 0 1 322.155 365.044 Tm [<00560046>]TJ
+1.02 0 0 1 331.994 365.044 Tm [<000D>-215<0055>]TJ
+1.015 0 0 1 340.308 365.044 Tm [<00490046004F>-216<0042>-216<00440050004E004E0042>]TJ
+1.02 0 0 1 395.115 365.044 Tm [<000F>]TJ
+1.015 0 0 1 400.524 365.044 Tm [<00290046>]TJ
+1.02 0 0 1 412.416 365.044 Tm [<0053>]TJ
+1.015 0 0 1 416.227 365.044 Tm [<0046>]TJ
+1.02 0 0 1 422.911 365.044 Tm [<005A>]TJ
+1.015 0 0 1 427.606 365.044 Tm [<00500056>-216<00440042004F>]TJ
+1.02 0 0 1 456.728 365.044 Tm [<0047>]TJ
+1.015 0 0 1 460.122 365.044 Tm [<0050>]TJ
+1.02 0 0 1 465.229 365.044 Tm [<0053>]TJ
+1.015 0 0 1 469.04 365.044 Tm [<00480046>]TJ
+1.02 0 0 1 478.252 365.044 Tm [<0055>]TJ
+1.02 0 0 1 113.386 353.089 Tm [<005800490042>]TJ
+1.03 0 0 1 130.448 353.089 Tm [<00550008>]TJ
+1.02 0 0 1 136.194 353.089 Tm [<0054>]TJ
+1.03 0 0 1 142.624 353.089 Tm [<004B>]TJ
+1.02 0 0 1 145.128 353.089 Tm [<00560054>]TJ
+1.03 0 0 1 154.568 353.089 Tm [<0055>]TJ
+1.02 0 0 1 160.597 353.089 Tm [<004300460046004F>-231<00540042>]TJ
+1.03 0 0 1 191.527 353.089 Tm [<004A>]TJ
+1.02 0 0 1 194.257 353.089 Tm [<0045>-231<0042004300500056>]TJ
+1.03 0 0 1 222.189 353.089 Tm [<0055>-229<0057>]TJ
+1.02 0 0 1 233.071 353.089 Tm [<0042>]TJ
+1.03 0 0 1 237.685 353.089 Tm [<004D>]TJ
+1.02 0 0 1 240.312 353.089 Tm [<005600460054>]TJ
+1.03 0 0 1 254.274 353.089 Tm [<001B>]TJ
+1.02 0 0 1 260.037 353.089 Tm [<004F0050>-231<004F004600460045>]TJ
+1.03 0 0 1 295.558 353.089 Tm [<0047>]TJ
+1.02 0 0 1 298.985 353.089 Tm [<0050>]TJ
+1.03 0 0 1 304.117 353.089 Tm [<0053>]TJ
+1.02 0 0 1 310.32 353.089 Tm [<005200560050>]TJ
+1.03 0 0 1 325.969 353.089 Tm [<0055>]TJ
+1.02 0 0 1 329.643 353.089 Tm [<00460054>-231<0050>]TJ
+1.03 0 0 1 345.727 353.089 Tm [<0053>]TJ
+1.02 0 0 1 351.93 353.089 Tm [<0043>]TJ
+1.03 0 0 1 357.102 353.089 Tm [<0053>]TJ
+1.02 0 0 1 360.95 353.089 Tm [<0042004400460054>]TJ
+1.03 0 0 1 378.256 353.089 Tm [<000F>]TJ
+1.015 0 0 1 384.182 353.089 Tm [<0030>]TJ
+1.02 0 0 1 391.443 353.089 Tm [<004F>]TJ
+1.03 0 0 1 399.468 353.089 Tm [<0055>]TJ
+1.02 0 0 1 403.141 353.089 Tm [<00490046>-231<0050>]TJ
+1.03 0 0 1 420.688 353.089 Tm [<0055>]TJ
+1.02 0 0 1 424.362 353.089 Tm [<00490046>]TJ
+1.03 0 0 1 434.422 353.089 Tm [<0053>]TJ
+1.02 0 0 1 440.625 353.089 Tm [<00490042004F0045>]TJ
+1.03 0 0 1 461.742 353.089 Tm [<000D>-233<005A>]TJ
+1.02 0 0 1 471.393 353.089 Tm [<00500056>]TJ
+1 0 0 1 113.386 341.134 Tm [<00440042004F00080055>-220<005400460055>-220<005400460057004600530042004D>-220<0042005500550053004A00430056005500460054>-220<00420055>-220<0050004F00440046000D>-220<0046004200440049>-220<0050004F0046>-220<004E005600540055>-220<00550042004C0046>-220<004A00550054>-220<00500058004F>-220<00570042004D00560046000F>]TJ
+1 0 0 1 133.311 329.179 Tm [<026500560054>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<0054005500460051>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 305.269 Tm [<003F0056005700480053003E00030050005C0044005700570003002000030050005C00590044004F00030040000300240051>-1<0047000300510052005A000300560052005000480057004B004C0051004A00030057004800550055004C0049004C004600110011>-1<0011>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 281.358 Tm [<0058>]TJ
+1.03 0 0 1 120.296 281.358 Tm [<004A004D004D>]TJ
+1.02 0 0 1 130.907 281.358 Tm [<00490042>]TJ
+1.03 0 0 1 141.059 281.358 Tm [<0057>]TJ
+1.02 0 0 1 145.913 281.358 Tm [<0046>]TJ
+1.03 0 0 1 153.063 281.358 Tm [<0055>]TJ
+1.02 0 0 1 156.737 281.358 Tm [<00490046>]TJ
+1.03 0 0 1 169.425 281.358 Tm [<0057>]TJ
+1.02 0 0 1 174.279 281.358 Tm [<0042>]TJ
+1.03 0 0 1 178.892 281.358 Tm [<004D>]TJ
+1.02 0 0 1 181.519 281.358 Tm [<00560046>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 194.035 281.358 Tm [<0050>]TJ
+1.03 0 0 1 198.933 281.358 Tm [<005C0059>]TJ
+1.02 0 0 1 208.826 281.358 Tm [<0044>]TJ
+1.03 0 0 1 213.724 281.358 Tm [<004F>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 221.299 281.358 Tm [<0047>]TJ
+1.02 0 0 1 224.726 281.358 Tm [<0050>]TJ
+1.03 0 0 1 229.858 281.358 Tm [<0053>-256<0055>]TJ
+1.02 0 0 1 240.008 281.358 Tm [<00490046>-258<0042>]TJ
+1.03 0 0 1 257.309 281.358 Tm [<005500550053004A>]TJ
+1.02 0 0 1 271.234 281.358 Tm [<00430056>]TJ
+1.03 0 0 1 281.772 281.358 Tm [<0055>]TJ
+1.02 0 0 1 285.446 281.358 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 292.596 281.358 Tm [<0050>]TJ
+1.03 0 0 1 297.494 281.358 Tm [<005C>]TJ
+1.02 0 0 1 302.441 281.358 Tm [<0044>]TJ
+1.03 0 0 1 307.339 281.358 Tm [<00570057>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 319.86 281.358 Tm [<0009>]TJ
+1.02 0 0 1 323.226 281.358 Tm [<004F0050>]TJ
+1.03 0 0 1 334.028 281.358 Tm [<0055>]TJ
+1.02 0 0 1 337.701 281.358 Tm [<0046>-258<004900500058>-259<0056004F00580042004F>]TJ
+1.03 0 0 1 393.289 281.358 Tm [<0055>]TJ
+1.02 0 0 1 396.963 281.358 Tm [<00460045>-258<00540051004200440046>]TJ
+1.03 0 0 1 434.646 281.358 Tm [<004A>]TJ
+1.02 0 0 1 437.375 281.358 Tm [<0054>]TJ
+1.03 0 0 1 444.078 281.358 Tm [<004A>]TJ
+1.02 0 0 1 446.808 281.358 Tm [<0048004F0050>]TJ
+1.03 0 0 1 462.345 281.358 Tm [<0053>]TJ
+1.02 0 0 1 466.194 281.358 Tm [<00460045>]TJ
+1.03 0 0 1 476.01 281.358 Tm [<000A000D>]TJ
+0.97 0 0 1 113.386 269.403 Tm [<004A>]TJ
+0.98 0 0 1 115.956 269.403 Tm [<004F0054>]TJ
+0.97 0 0 1 125.319 269.403 Tm [<0055>]TJ
+0.98 0 0 1 128.779 269.403 Tm [<004600420045>-215<0050>]TJ
+0.97 0 0 1 149.678 269.403 Tm [<0047>-217<0055>]TJ
+0.98 0 0 1 158.47 269.403 Tm [<00490046>]TJ
+0.97 0 0 1 170.24 269.403 Tm [<0057>]TJ
+0.98 0 0 1 174.811 269.403 Tm [<0042>]TJ
+0.97 0 0 1 179.244 269.403 Tm [<004D>]TJ
+0.98 0 0 1 181.718 269.403 Tm [<00560046>-215<0048>]TJ
+0.97 0 0 1 197.872 269.403 Tm [<004A0057>]TJ
+0.98 0 0 1 205.013 269.403 Tm [<0046004F>]TJ
+0.97 0 0 1 216.91 269.403 Tm [<004A>]TJ
+0.98 0 0 1 219.481 269.403 Tm [<004F>]TJ
+0.97 0 0 1 227.033 269.403 Tm [<0055>]TJ
+0.98 0 0 1 230.493 269.403 Tm [<00490046>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 242.263 269.403 Tm [<003F>]TJ
+0.98 0 0 1 246.921 269.403 Tm [<00560048>]TJ
+0.97 0 0 1 256.334 269.403 Tm [<0057>]TJ
+0.98 0 0 1 260.992 269.403 Tm [<00530044>]TJ
+0.97 0 0 1 270.405 269.403 Tm [<0055>]TJ
+0.98 0 0 1 275.063 269.403 Tm [<004400500048>]TJ
+0.97 0 0 1 289.182 269.403 Tm [<0057>]TJ
+0.98 0 0 1 293.84 269.403 Tm [<0048>]TJ
+0.97 0 0 1 298.546 269.403 Tm [<0055>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 305.309 269.403 Tm [<004500460044>]TJ
+0.97 0 0 1 318.675 269.403 Tm [<004D>]TJ
+0.98 0 0 1 321.149 269.403 Tm [<0042>]TJ
+0.97 0 0 1 325.581 269.403 Tm [<0053>]TJ
+0.98 0 0 1 329.205 269.403 Tm [<0042>]TJ
+0.97 0 0 1 333.638 269.403 Tm [<0055004A>]TJ
+0.98 0 0 1 339.668 269.403 Tm [<0050004F>]TJ
+0.97 0 0 1 350.047 269.403 Tm [<000F000F000F>]TJ
+0.98 0 0 1 360.043 269.403 Tm [<0050>]TJ
+0.97 0 0 1 364.973 269.403 Tm [<0053>-217<004A>]TJ
+0.98 0 0 1 373.272 269.403 Tm [<004F>]TJ
+0.97 0 0 1 380.825 269.403 Tm [<004A0055>]TJ
+0.98 0 0 1 386.855 269.403 Tm [<0054>]TJ
+0.97 0 0 1 392.874 269.403 Tm [<0055005A>]TJ
+0.98 0 0 1 400.799 269.403 Tm [<00510046>]TJ
+0.97 0 0 1 410.24 269.403 Tm [<000D>]TJ
+0.98 0 0 1 414.729 269.403 Tm [<00580049>]TJ
+0.97 0 0 1 426.69 269.403 Tm [<004A>]TJ
+0.98 0 0 1 429.26 269.403 Tm [<00440049>-215<00580046>]TJ
+0.97 0 0 1 453.709 269.403 Tm [<0055>]TJ
+0.98 0 0 1 457.168 269.403 Tm [<0056>]TJ
+0.97 0 0 1 462.323 269.403 Tm [<0053>]TJ
+0.98 0 0 1 465.947 269.403 Tm [<004F>]TJ
+0.97 0 0 1 473.5 269.403 Tm [<0055>]TJ
+0.98 0 0 1 476.959 269.403 Tm [<0050>]TJ
+0.99 0 0 1 113.386 257.448 Tm [<0053004A>]TJ
+0.995 0 0 1 119.708 257.448 Tm [<00480049>]TJ
+0.99 0 0 1 129.73 257.448 Tm [<0055>]TJ
+0.995 0 0 1 135.418 257.448 Tm [<004F00500058>]TJ
+0.99 0 0 1 154.853 257.448 Tm [<0009>]TJ
+0.995 0 0 1 158.088 257.448 Tm [<0042004F0045>]TJ
+0.99 0 0 1 175.442 257.448 Tm [<0055>]TJ
+0.995 0 0 1 178.973 257.448 Tm [<00490046004F>]TJ
+0.99 0 0 1 196.475 257.448 Tm [<002A>]TJ
+0.995 0 0 1 201.828 257.448 Tm [<0051>]TJ
+0.99 0 0 1 207.002 257.448 Tm [<0053>]TJ
+0.995 0 0 1 210.701 257.448 Tm [<0050004E>]TJ
+0.99 0 0 1 223.756 257.448 Tm [<004A>]TJ
+0.995 0 0 1 226.38 257.448 Tm [<00540046>-217<00580046>]TJ
+0.99 0 0 1 248.075 257.448 Tm [<0008004D004D>]TJ
+0.995 0 0 1 257.274 257.448 Tm [<005400460046>-217<005800490042>]TJ
+0.99 0 0 1 288.873 257.448 Tm [<0055>-218<0055>]TJ
+0.995 0 0 1 298.092 257.448 Tm [<0049005000540046>-217<0042>]TJ
+0.99 0 0 1 323.544 257.448 Tm [<005500550053004A>]TJ
+0.995 0 0 1 336.928 257.448 Tm [<00430056>]TJ
+0.99 0 0 1 347.208 257.448 Tm [<0055>]TJ
+0.995 0 0 1 350.739 257.448 Tm [<00460054>-217<0042>]TJ
+0.99 0 0 1 365.783 257.448 Tm [<0053>]TJ
+0.995 0 0 1 369.481 257.448 Tm [<0046>]TJ
+0.99 0 0 1 373.892 257.448 Tm [<000A000F>]TJ
+0.995 0 0 1 382.455 257.448 Tm [<0022004F>]TJ
+0.99 0 0 1 393.993 257.448 Tm [<005A>]TJ
+0.995 0 0 1 400.707 257.448 Tm [<00540051004200440046>-217<0042>]TJ
+0.99 0 0 1 429.421 257.448 Tm [<00470055>]TJ
+0.995 0 0 1 436.246 257.448 Tm [<0046>]TJ
+0.99 0 0 1 440.657 257.448 Tm [<0053>-218<0055>]TJ
+0.995 0 0 1 450.044 257.448 Tm [<00490046>]TJ
+0.99 0 0 1 462.015 257.448 Tm [<0053004A>]TJ
+0.995 0 0 1 468.337 257.448 Tm [<00480049>]TJ
+0.99 0 0 1 478.359 257.448 Tm [<0055>]TJ
+1 0 0 1 113.386 245.493 Tm [<0043005300420044004C00460055>-220<004A0054>-220<004A0048004F0050005300460045000D>-220<00540050>-220<0055004900420055>-220<005A00500056>-220<00450050004F00080055>-220<0049004200570046>-220<00550050>-220<005100560055>]TJ
+/F111 7.97011 Tf 1 0 0 1 310.038 245.493 Tm [<0008>]TJ
+/F105 9.96264 Tf 1 0 0 1 317.032 245.493 Tm [<0054004A0048004F0054>-220<0049004600530046>-220<0042004F0045>-220<00550049004600530046000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 209.627 Tm [<0035005A00510046>-200<0054004600550055004A004F00480054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 113.386 197.672 Tm [<003A>]TJ
+0.99 0 0 1 118.873 197.672 Tm [<00500056>-220<00440042004F>-220<0044>]TJ
+0.98 0 0 1 151.334 197.672 Tm [<0053>]TJ
+0.99 0 0 1 154.995 197.672 Tm [<00460042>]TJ
+0.98 0 0 1 163.862 197.672 Tm [<0055>]TJ
+0.99 0 0 1 167.357 197.672 Tm [<0046>-220<004F00460058>]TJ
+0.98 0 0 1 192.688 197.672 Tm [<0055005A>]TJ
+0.99 0 0 1 200.694 197.672 Tm [<005100460054>-220<0050>]TJ
+0.98 0 0 1 221.338 197.672 Tm [<0047>]TJ
+0.99 0 0 1 226.77 197.672 Tm [<0054>]TJ
+0.98 0 0 1 230.725 197.672 Tm [<004D004A>]TJ
+0.99 0 0 1 235.821 197.672 Tm [<004500460054>-220<0050>]TJ
+0.98 0 0 1 256.456 197.672 Tm [<0053>]TJ
+0.99 0 0 1 262.288 197.672 Tm [<0054>]TJ
+0.98 0 0 1 266.243 197.672 Tm [<0055>]TJ
+0.99 0 0 1 269.738 197.672 Tm [<004600510054>-220<0042004F0045>-220<00540046>]TJ
+0.98 0 0 1 311.037 197.672 Tm [<0055>-222<0055>]TJ
+0.99 0 0 1 320.198 197.672 Tm [<00490046>]TJ
+0.98 0 0 1 329.963 197.672 Tm [<004A0053>]TJ
+0.99 0 0 1 338.392 197.672 Tm [<00510042>]TJ
+0.98 0 0 1 348.018 197.672 Tm [<0053>]TJ
+0.99 0 0 1 351.679 197.672 Tm [<0042004E0046>]TJ
+0.98 0 0 1 368.555 197.672 Tm [<0055>]TJ
+0.99 0 0 1 372.05 197.672 Tm [<0046>]TJ
+0.98 0 0 1 376.439 197.672 Tm [<0053>]TJ
+0.99 0 0 1 380.101 197.672 Tm [<0054>-220<0058>]TJ
+0.98 0 0 1 392.933 197.672 Tm [<004A0055>]TJ
+0.99 0 0 1 399.026 197.672 Tm [<0049>]TJ
+0.98 0 0 1 406.572 197.672 Tm [<0055>]TJ
+0.99 0 0 1 410.067 197.672 Tm [<00490046>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 422.002 197.672 Tm [<003F>]TJ
+0.99 0 0 1 426.709 197.672 Tm [<00560048>]TJ
+0.98 0 0 1 436.217 197.672 Tm [<0057>]TJ
+0.99 0 0 1 440.924 197.672 Tm [<0056>]TJ
+0.98 0 0 1 445.678 197.672 Tm [<004F004C>]TJ
+0.99 0 0 1 455.09 197.672 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 466.77 197.672 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 113.386 185.717 Tm [<003F>]TJ
+1.02 0 0 1 118.332 185.717 Tm [<00560048>]TJ
+1.03 0 0 1 128.129 185.717 Tm [<0057>]TJ
+1.02 0 0 1 133.075 185.717 Tm [<0056>]TJ
+1.03 0 0 1 137.974 185.717 Tm [<0057>]TJ
+1.02 0 0 1 142.92 185.717 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 155.137 185.717 Tm [<00440050004E004E0042004F00450054>]TJ
+1.03 0 0 1 202.94 185.717 Tm [<0053>]TJ
+1.02 0 0 1 206.789 185.717 Tm [<00460054005100460044>]TJ
+1.03 0 0 1 229.307 185.717 Tm [<0055004A0057>]TJ
+1.02 0 0 1 240.564 185.717 Tm [<0046>]TJ
+1.03 0 0 1 245.086 185.717 Tm [<004D005A000F>]TJ
+1.02 0 0 1 258.576 185.717 Tm [<002F0050>]TJ
+1.03 0 0 1 270.984 185.717 Tm [<0055>]TJ
+1.02 0 0 1 274.658 185.717 Tm [<0046>]TJ
+1.03 0 0 1 281.6 185.717 Tm [<0055>]TJ
+1.02 0 0 1 285.274 185.717 Tm [<00490042>]TJ
+1.03 0 0 1 295.425 185.717 Tm [<0055>-235<0055>]TJ
+1.02 0 0 1 305.193 185.717 Tm [<00490046>]TJ
+1.03 0 0 1 315.253 185.717 Tm [<0053>]TJ
+1.02 0 0 1 319.101 185.717 Tm [<0046>]TJ
+1.03 0 0 1 326.044 185.717 Tm [<004A>]TJ
+1.02 0 0 1 328.773 185.717 Tm [<0054>-238<004F0050>-238<0045>]TJ
+1.03 0 0 1 353.786 185.717 Tm [<004A00EA>]TJ
+1.02 0 0 1 362.99 185.717 Tm [<0046>]TJ
+1.03 0 0 1 367.512 185.717 Tm [<0053>]TJ
+1.02 0 0 1 371.36 185.717 Tm [<0046004F00440046>-238<00430046>]TJ
+1.03 0 0 1 402.285 185.717 Tm [<0055>]TJ
+1.02 0 0 1 405.958 185.717 Tm [<005800460046004F>-238<0044>]TJ
+1.03 0 0 1 434.099 185.717 Tm [<0053>]TJ
+1.02 0 0 1 437.947 185.717 Tm [<00460042>]TJ
+1.03 0 0 1 447.082 185.717 Tm [<0055004A>]TJ
+1.02 0 0 1 453.485 185.717 Tm [<004F0048>-238<0042004F0045>]TJ
+1.02 0 0 1 113.386 173.762 Tm [<00540046>]TJ
+1.03 0 0 1 121.983 173.762 Tm [<00550055004A>]TJ
+1.02 0 0 1 132.06 173.762 Tm [<004F0048>]TJ
+1.03 0 0 1 144.882 173.762 Tm [<0055>]TJ
+1.02 0 0 1 148.556 173.762 Tm [<00490046>-237<0042>]TJ
+1.03 0 0 1 165.647 173.762 Tm [<005500550053004A>]TJ
+1.02 0 0 1 179.572 173.762 Tm [<00430056>]TJ
+1.03 0 0 1 190.11 173.762 Tm [<0055>]TJ
+1.02 0 0 1 193.783 173.762 Tm [<00460054>-237<0050>]TJ
+1.03 0 0 1 209.929 173.762 Tm [<0047>]TJ
+1.02 0 0 1 215.773 173.762 Tm [<0042>-237<004F00460058>-238<0054>]TJ
+1.03 0 0 1 246.398 173.762 Tm [<004D004A>]TJ
+1.02 0 0 1 251.754 173.762 Tm [<00450046>]TJ
+1.03 0 0 1 261.571 173.762 Tm [<0010>]TJ
+1.02 0 0 1 265.593 173.762 Tm [<0054>]TJ
+1.03 0 0 1 269.668 173.762 Tm [<0055>]TJ
+1.02 0 0 1 273.342 173.762 Tm [<00460051>]TJ
+1.03 0 0 1 283.168 173.762 Tm [<000D>]TJ
+1.02 0 0 1 288.156 173.762 Tm [<0042004F0045>-237<0054>]TJ
+1.03 0 0 1 310.226 173.762 Tm [<004A>]TJ
+1.02 0 0 1 312.955 173.762 Tm [<004E0051>]TJ
+1.03 0 0 1 326.511 173.762 Tm [<004D005A>]TJ
+1.02 0 0 1 336.296 173.762 Tm [<00540046>]TJ
+1.03 0 0 1 344.893 173.762 Tm [<00550055004A>]TJ
+1.02 0 0 1 354.97 173.762 Tm [<004F0048>]TJ
+1.03 0 0 1 367.793 173.762 Tm [<0055>]TJ
+1.02 0 0 1 371.466 173.762 Tm [<00490046>-237<0042>]TJ
+1.03 0 0 1 388.557 173.762 Tm [<005500550053004A>]TJ
+1.02 0 0 1 402.482 173.762 Tm [<00430056>]TJ
+1.03 0 0 1 413.02 173.762 Tm [<0055>]TJ
+1.02 0 0 1 416.693 173.762 Tm [<00460054>]TJ
+1.03 0 0 1 427.707 173.762 Tm [<0055>]TJ
+1.02 0 0 1 431.381 173.762 Tm [<0050>-237<0042004F>-238<0042>]TJ
+1.03 0 0 1 456.244 173.762 Tm [<004D0053>]TJ
+1.02 0 0 1 462.719 173.762 Tm [<004600420045>]TJ
+1.03 0 0 1 477.149 173.762 Tm [<005A>]TJ
+1 0 0 1 113.386 161.807 Tm [<0044005300460042005500460045>-220<0054004D004A0045004600100054005500460051>-220<001B>-293<005500490046>-220<00540042004E0046>-220<00440050004E004E0042004F00450054>-220<004200530046>-220<0056005400460045>-220<004A004F>-220<0043005000550049>-220<00440042005400460054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 137.896 Tm [<003F0056004800570056004F004C00470048>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 137.896 Tm [<001F004F004C00560057>-602<00520049>-603<0056004F004C0047004800560021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 125.941 Tm [<0265>]TJ
+1.02 0 0 1 123.801 125.941 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 131.141 125.941 Tm [<003F>]TJ
+1.02 0 0 1 136.087 125.941 Tm [<00560048>]TJ
+1.03 0 0 1 145.884 125.941 Tm [<0057>]TJ
+1.02 0 0 1 150.83 125.941 Tm [<0056>]TJ
+1.03 0 0 1 155.729 125.941 Tm [<004F004C>]TJ
+1.02 0 0 1 165.621 125.941 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 178.236 125.941 Tm [<00440050004E004E0042004F0045>-277<00540046>]TJ
+1.03 0 0 1 230.958 125.941 Tm [<0055>]TJ
+1.02 0 0 1 234.632 125.941 Tm [<0054>-277<00510042>]TJ
+1.03 0 0 1 251.442 125.941 Tm [<0053>]TJ
+1.02 0 0 1 255.29 125.941 Tm [<0042004E0046>]TJ
+1.03 0 0 1 272.677 125.941 Tm [<0055>]TJ
+1.02 0 0 1 276.351 125.941 Tm [<0046>]TJ
+1.03 0 0 1 280.873 125.941 Tm [<0053>]TJ
+1.02 0 0 1 284.721 125.941 Tm [<0054>]TJ
+1.03 0 0 1 291.613 125.941 Tm [<0047>]TJ
+1.02 0 0 1 295.041 125.941 Tm [<0050>]TJ
+1.03 0 0 1 300.173 125.941 Tm [<0053>]TJ
+1.02 0 0 1 306.838 125.941 Tm [<0042>]TJ
+1.03 0 0 1 311.452 125.941 Tm [<004D004D>]TJ
+1.02 0 0 1 319.523 125.941 Tm [<0054>]TJ
+1.03 0 0 1 323.598 125.941 Tm [<004D004A>]TJ
+1.02 0 0 1 328.955 125.941 Tm [<004500460054>]TJ
+1.03 0 0 1 345.663 125.941 Tm [<004A>]TJ
+1.02 0 0 1 348.393 125.941 Tm [<004F>]TJ
+1.03 0 0 1 356.881 125.941 Tm [<0055>]TJ
+1.02 0 0 1 360.554 125.941 Tm [<00490046>-277<00540051004200440046>]TJ
+1.03 0 0 1 396.042 125.941 Tm [<000E>]TJ
+1.02 0 0 1 399.275 125.941 Tm [<0054004600510042>]TJ
+1.03 0 0 1 417.79 125.941 Tm [<0053>]TJ
+1.02 0 0 1 421.638 125.941 Tm [<0042>]TJ
+1.03 0 0 1 426.251 125.941 Tm [<0055>]TJ
+1.02 0 0 1 429.925 125.941 Tm [<00460045>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 442.559 125.941 Tm [<001F004F004C>]TJ
+1.02 0 0 1 457.398 125.941 Tm [<0056>]TJ
+1.03 0 0 1 462.296 125.941 Tm [<0057>]TJ
+1.02 0 0 1 472.045 125.941 Tm [<0052>]TJ
+1.03 0 0 1 476.943 125.941 Tm [<0049>]TJ
+1 0 0 1 113.386 113.986 Tm [<0056004F004C0047004800560021>]TJ
+/F105 9.96264 Tf 1 0 0 1 150.021 113.986 Tm [<00090042004F0045>-220<0044005300460042005500460054>-220<005500490046004E>-220<004A0047>-220<005500490046005A>-220<00450050004F00080055>-220<00460059004A00540055>-220<005A00460055000A000D>-220<00420054>-220<004A004F001B>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01EE>]TJ
+ET
+endstream
+endobj
+32 0 obj <<
+/Type /Page
+/Contents 33 0 R
+/Resources 31 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 8 0 R
+>> endobj
+34 0 obj <<
+/D [32 0 R /XYZ 113.386 412.746 null]
+>> endobj
+35 0 obj <<
+/D [32 0 R /XYZ 113.386 219.142 null]
+>> endobj
+31 0 obj <<
+/Font << /F111 6 0 R /F105 5 0 R /F63 7 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+38 0 obj <<
+/Length 21606
+>>
+stream
+BT
+/F111 7.97011 Tf 1 0 0 1 113.386 640.013 Tm [<003F0056004800570056004F004C00470048005E0050005C0056004F004C0047004800030050005C00520057004B00480055>-1<0056004F004C004700480060>]TJ
+1 0 0 1 113.386 628.058 Tm [<000300030044005700570055004C0045005800570048001400030020000300590044004F005800480024>]TJ
+1 0 0 1 113.386 616.103 Tm [<000300030044005700570055004C0045005800570048001500030020000300590044004F005800480025>]TJ
+1 0 0 1 113.386 604.148 Tm [<00030003001100110011>]TJ
+1 0 0 1 113.386 592.193 Tm [<003F005300440055>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 568.282 Tm [<00350050>-217<005600540046>-218<005500490046>-218<0054004D004A00450046>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 179.334 568.282 Tm [<0050005C0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 213.287 568.282 Tm [<000D>-217<004A004F>-218<0051004D0042004A004F>-218<0035>]TJ
+1 0 0 1 255.349 566.215 Tm [<0026>]TJ
+1.01 0 0 1 259.633 568.282 Tm [<0039>-217<005A00500056>-218<00440042004D004D>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 300.952 568.282 Tm [<003F0050005C0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 341.945 568.282 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 359.562 568.282 Tm [<003F0048005100470050005C0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 412.916 568.282 Tm [<000D>-217<004A004F>-218<002D00420035>]TJ
+1 0 0 1 441.93 566.215 Tm [<0026>]TJ
+1.01 0 0 1 446.214 568.282 Tm [<0039>-217<005A00500056>-218<00450050>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 113.386 556.327 Tm [<003F00450048004A004C0051005E0050005C0056004F004C004700480060>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 187.971 556.327 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 205.511 556.327 Tm [<003F004800510047005E0050005C0056004F004C004700480060>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 268.253 556.327 Tm [<000D>-218<0042004F0045>-219<004A004F>-219<00240050004F0035>]TJ
+1 0 0 1 321.395 554.26 Tm [<0026>]TJ
+1.005 0 0 1 325.679 556.327 Tm [<00390055>-218<005A00500056>-219<005600540046>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 370.459 556.327 Tm [<003F005600570044005500570050005C0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 435.392 556.327 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 452.932 556.327 Tm [<003F00560057005200530010>]TJ
+1.02 0 0 1 113.386 544.372 Tm [<0050>]TJ
+1.03 0 0 1 118.284 544.372 Tm [<005C>]TJ
+1.02 0 0 1 123.231 544.372 Tm [<0056>]TJ
+1.03 0 0 1 128.129 544.372 Tm [<004F004C>]TJ
+1.02 0 0 1 138.022 544.372 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 147.818 544.372 Tm [<000F>]TJ
+1.015 0 0 1 154.761 544.372 Tm [<0022>]TJ
+1.02 0 0 1 160.888 544.372 Tm [<0044>]TJ
+1.03 0 0 1 164.984 544.372 Tm [<0055>]TJ
+1.02 0 0 1 168.657 544.372 Tm [<00560042>]TJ
+1.03 0 0 1 178.636 544.372 Tm [<004D004D005A>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 191.325 544.372 Tm [<003F>]TJ
+1.02 0 0 1 196.271 544.372 Tm [<0050>]TJ
+1.03 0 0 1 201.169 544.372 Tm [<005C>]TJ
+1.02 0 0 1 206.116 544.372 Tm [<0056>]TJ
+1.03 0 0 1 211.014 544.372 Tm [<004F004C>]TJ
+1.02 0 0 1 220.907 544.372 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 233.397 544.372 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 251.669 544.372 Tm [<003F>]TJ
+1.02 0 0 1 256.616 544.372 Tm [<0048005100470050>]TJ
+1.03 0 0 1 276.209 544.372 Tm [<005C>]TJ
+1.02 0 0 1 281.155 544.372 Tm [<0056>]TJ
+1.03 0 0 1 286.054 544.372 Tm [<004F004C>]TJ
+1.02 0 0 1 295.946 544.372 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 308.437 544.372 Tm [<00580050>]TJ
+1.03 0 0 1 320.479 544.372 Tm [<0053>]TJ
+1.02 0 0 1 324.327 544.372 Tm [<004C>]TJ
+1.03 0 0 1 332.091 544.372 Tm [<004A>]TJ
+1.02 0 0 1 334.821 544.372 Tm [<004F>-265<0042>]TJ
+1.03 0 0 1 347.798 544.372 Tm [<004D004D>-262<0055>]TJ
+1.02 0 0 1 359.419 544.372 Tm [<0049>]TJ
+1.03 0 0 1 364.958 544.372 Tm [<0053>]TJ
+1.02 0 0 1 368.806 544.372 Tm [<00460046>]TJ
+1.03 0 0 1 380.544 544.372 Tm [<0047>]TJ
+1.02 0 0 1 383.971 544.372 Tm [<0050>]TJ
+1.03 0 0 1 389.103 544.372 Tm [<0053>]TJ
+1.02 0 0 1 392.951 544.372 Tm [<004E0042>]TJ
+1.03 0 0 1 405.816 544.372 Tm [<0055>]TJ
+1.02 0 0 1 409.489 544.372 Tm [<0054>]TJ
+1.03 0 0 1 413.564 544.372 Tm [<000D>]TJ
+1.02 0 0 1 418.897 544.372 Tm [<00430056>]TJ
+1.03 0 0 1 429.435 544.372 Tm [<0055>-262<0055>]TJ
+1.02 0 0 1 439.476 544.372 Tm [<00490046>]TJ
+1.03 0 0 1 449.537 544.372 Tm [<005A00080053>]TJ
+1.02 0 0 1 460.198 544.372 Tm [<0046>-265<004F0050>]TJ
+1.03 0 0 1 478.216 544.372 Tm [<0055>]TJ
+1 0 0 1 113.386 532.417 Tm [<00440056005400550050004E00420053005A000F>]TJ
+1.01 0 0 1 133.311 520.462 Tm [<0034>]TJ
+1.015 0 0 1 138.262 520.462 Tm [<004D004A>]TJ
+1.01 0 0 1 143.54 520.462 Tm [<004500460054>]TJ
+1.015 0 0 1 159.502 520.462 Tm [<0055>]TJ
+1.01 0 0 1 163.122 520.462 Tm [<004900560054>-219<0044>]TJ
+1.015 0 0 1 184.215 520.462 Tm [<0053>]TJ
+1.01 0 0 1 188.007 520.462 Tm [<00460042>]TJ
+1.015 0 0 1 197.053 520.462 Tm [<0055>]TJ
+1.01 0 0 1 200.673 520.462 Tm [<00460045>]TJ
+1.015 0 0 1 212.6 520.462 Tm [<004A>]TJ
+1.01 0 0 1 215.29 520.462 Tm [<004F00490046>]TJ
+1.015 0 0 1 230.866 520.462 Tm [<0053004A0055>-218<0057>]TJ
+1.01 0 0 1 247.957 520.462 Tm [<0042>]TJ
+1.015 0 0 1 252.526 520.462 Tm [<004D>]TJ
+1.01 0 0 1 255.114 520.462 Tm [<005600460054>]TJ
+1.015 0 0 1 271.146 520.462 Tm [<00470053>]TJ
+1.01 0 0 1 278.316 520.462 Tm [<0050004E>]TJ
+1.015 0 0 1 293.774 520.462 Tm [<0055>]TJ
+1.01 0 0 1 297.394 520.462 Tm [<00490046>]TJ
+/F117 7.97011 Tf 1.01 0 0 1 309.562 520.462 Tm [<0056>]TJ
+1.015 0 0 1 314.413 520.462 Tm [<004F004C>]TJ
+1.01 0 0 1 324.161 520.462 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 336.069 520.462 Tm [<00510042>]TJ
+1.015 0 0 1 345.889 520.462 Tm [<0053>]TJ
+1.01 0 0 1 349.681 520.462 Tm [<0042004E0046>]TJ
+1.015 0 0 1 366.898 520.462 Tm [<0055>]TJ
+1.01 0 0 1 370.518 520.462 Tm [<0046>]TJ
+1.015 0 0 1 374.996 520.462 Tm [<0053000D>]TJ
+1.01 0 0 1 383.475 520.462 Tm [<0046>]TJ
+1.015 0 0 1 387.953 520.462 Tm [<0059>]TJ
+1.01 0 0 1 392.746 520.462 Tm [<004400460051>]TJ
+1.015 0 0 1 406.531 520.462 Tm [<0055>]TJ
+1.01 0 0 1 412.358 520.462 Tm [<005800490046004F>-219<004F00460058>]TJ
+1.015 0 0 1 456.124 520.462 Tm [<0057>]TJ
+1.01 0 0 1 460.907 520.462 Tm [<0042>]TJ
+1.015 0 0 1 465.476 520.462 Tm [<004D>]TJ
+1.01 0 0 1 468.064 520.462 Tm [<005600460054>]TJ
+0.985 0 0 1 113.386 508.506 Tm [<0042>]TJ
+0.98 0 0 1 117.841 508.506 Tm [<0053>]TJ
+0.985 0 0 1 121.502 508.506 Tm [<0046>-226<0054005100460044>]TJ
+0.98 0 0 1 145.468 508.506 Tm [<004A00EB>]TJ
+0.985 0 0 1 153.542 508.506 Tm [<00460045>]TJ
+0.98 0 0 1 163.022 508.506 Tm [<000F>-307<002A>]TJ
+0.985 0 0 1 171.584 508.506 Tm [<004F>-226<00500056>]TJ
+0.98 0 0 1 189.416 508.506 Tm [<0053>]TJ
+0.985 0 0 1 195.297 508.506 Tm [<0046>]TJ
+0.98 0 0 1 199.664 508.506 Tm [<0059>]TJ
+0.985 0 0 1 204.292 508.506 Tm [<0042004E0051>]TJ
+0.98 0 0 1 221.838 508.506 Tm [<004D>]TJ
+0.985 0 0 1 224.337 508.506 Tm [<0046>]TJ
+0.98 0 0 1 228.704 508.506 Tm [<000D>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 233.323 508.506 Tm [<003F>]TJ
+0.985 0 0 1 238.029 508.506 Tm [<0050>]TJ
+0.98 0 0 1 242.759 508.506 Tm [<005C>]TJ
+0.985 0 0 1 247.466 508.506 Tm [<0056>]TJ
+0.98 0 0 1 252.196 508.506 Tm [<004F004C>]TJ
+0.985 0 0 1 261.608 508.506 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 273.289 508.506 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 290.552 508.506 Tm [<003F>]TJ
+0.985 0 0 1 295.258 508.506 Tm [<0050>]TJ
+0.98 0 0 1 299.989 508.506 Tm [<005C>]TJ
+0.985 0 0 1 304.695 508.506 Tm [<0052>]TJ
+0.98 0 0 1 309.425 508.506 Tm [<0057>]TJ
+0.985 0 0 1 314.131 508.506 Tm [<004B0048>]TJ
+0.98 0 0 1 323.592 508.506 Tm [<0055>]TJ
+0.985 0 0 1 328.298 508.506 Tm [<0056>]TJ
+0.98 0 0 1 333.028 508.506 Tm [<004F004C>]TJ
+0.985 0 0 1 342.441 508.506 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 354.121 508.506 Tm [<0058>]TJ
+0.98 0 0 1 360.794 508.506 Tm [<004A004D004D>]TJ
+0.985 0 0 1 370.61 508.506 Tm [<00490042>]TJ
+0.98 0 0 1 380.413 508.506 Tm [<0057>]TJ
+0.985 0 0 1 385.031 508.506 Tm [<0046>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 391.618 508.506 Tm [<0059>]TJ
+0.985 0 0 1 396.324 508.506 Tm [<0044>]TJ
+0.98 0 0 1 401.054 508.506 Tm [<004F>]TJ
+0.985 0 0 1 405.761 508.506 Tm [<00580048>]TJ
+0.99 0 0 1 415.221 508.506 Tm [<0024>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 422.195 508.506 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 439.459 508.506 Tm [<0059>]TJ
+0.985 0 0 1 444.165 508.506 Tm [<0044>]TJ
+0.98 0 0 1 448.895 508.506 Tm [<004F>]TJ
+0.985 0 0 1 453.601 508.506 Tm [<005800480025>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 470.012 508.506 Tm [<0047>]TJ
+0.985 0 0 1 473.273 508.506 Tm [<0050>]TJ
+0.98 0 0 1 478.228 508.506 Tm [<0053>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 496.551 Tm [<0044005700570055004C00450058005700480014>]TJ
+/F105 9.96264 Tf 1 0 0 1 163.583 496.551 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 181.03 496.551 Tm [<0044005700570055004C00450058005700480015>]TJ
+/F105 9.96264 Tf 1 0 0 1 231.227 496.551 Tm [<0053004600540051004600440055004A00570046004D005A000D>-218<004A004F00540055004600420045>-218<00500047>-219<005500490046>-218<00570042004D005600460054>-218<0045004600EB004F00460045>-218<004700500053>-219<00550049005000540046>-218<0042005500550053004A00430056005500460054>]TJ
+1.03 0 0 1 113.386 484.596 Tm [<004A>]TJ
+1.02 0 0 1 116.115 484.596 Tm [<004F>]TJ
+1.03 0 0 1 124.184 484.596 Tm [<0055>]TJ
+1.02 0 0 1 127.857 484.596 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 140.316 484.596 Tm [<003F>]TJ
+1.02 0 0 1 145.262 484.596 Tm [<00560048>]TJ
+1.03 0 0 1 155.059 484.596 Tm [<0057>]TJ
+1.02 0 0 1 160.005 484.596 Tm [<00530044>]TJ
+1.03 0 0 1 169.802 484.596 Tm [<0055>]TJ
+1.02 0 0 1 174.748 484.596 Tm [<004400500048>]TJ
+1.03 0 0 1 189.443 484.596 Tm [<0057>]TJ
+1.02 0 0 1 194.39 484.596 Tm [<0048>]TJ
+1.03 0 0 1 199.288 484.596 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 206.632 484.596 Tm [<004500460044>]TJ
+1.03 0 0 1 220.544 484.596 Tm [<004D>]TJ
+1.02 0 0 1 223.171 484.596 Tm [<0042>]TJ
+1.03 0 0 1 227.785 484.596 Tm [<0053>]TJ
+1.02 0 0 1 231.633 484.596 Tm [<0042>]TJ
+1.03 0 0 1 236.246 484.596 Tm [<0055004A>]TJ
+1.02 0 0 1 242.649 484.596 Tm [<0050004F>]TJ
+1.03 0 0 1 253.451 484.596 Tm [<000F>]TJ
+1.02 0 0 1 259.507 484.596 Tm [<00230050>]TJ
+1.03 0 0 1 270.471 484.596 Tm [<0055>]TJ
+1.02 0 0 1 274.145 484.596 Tm [<0049>-236<00440050004E004E0042004F00450054>-236<00440042004F>-236<0054>]TJ
+1.03 0 0 1 350.715 484.596 Tm [<0055004A004D004D>]TJ
+1.02 0 0 1 364.77 484.596 Tm [<00430046>]TJ
+1.03 0 0 1 376.862 484.596 Tm [<0047>]TJ
+1.02 0 0 1 380.29 484.596 Tm [<0050>]TJ
+1.03 0 0 1 385.421 484.596 Tm [<004D004D>]TJ
+1.02 0 0 1 390.675 484.596 Tm [<0050005800460045>-236<0043>]TJ
+1.03 0 0 1 420.104 484.596 Tm [<005A>-233<004D>]TJ
+1.02 0 0 1 429.87 484.596 Tm [<005000440042>]TJ
+1.03 0 0 1 443.71 484.596 Tm [<004D>]TJ
+1.02 0 0 1 448.735 484.596 Tm [<00540046>]TJ
+1.03 0 0 1 457.332 484.596 Tm [<00550055004A>]TJ
+1.02 0 0 1 467.409 484.596 Tm [<004F00480054>]TJ
+1 0 0 1 113.386 472.641 Tm [<004300460055005800460046004F>-220<0043005300420044004C004600550054000D>-220<0042004F0045>-220<005500490046005A0008004D004D>-220<00500057004600530053004A00450046>-220<005500490046>-220<0050004F00460054>-220<0048004A00570046004F>-220<0049004600530046000F>-293<00340050>-220<004A004F>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 448.731 Tm [<003F0050005C0056004F004C00470048003E0044005700570055004C0045005800570048001500200050005C00590044004F>-1<0040>]TJ
+1 0 0 1 113.386 436.775 Tm [<001100110011>]TJ
+1 0 0 1 113.386 424.82 Tm [<003F0048005100470050005C0056004F004C00470048>]TJ
+0.99 0 0 1 113.386 400.91 Tm [<003F0050005C0056004F004C00470048>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 153.638 400.91 Tm [<0058004A004D004D>-224<0049004200570046>-225<005500490046>-225<00570042004D005600460054>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 234.312 400.91 Tm [<0050005C00590044004F>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 260.301 400.91 Tm [<004700500053>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 274.493 400.91 Tm [<0044005700570055004C00450058005700480015>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 322.036 400.91 Tm [<000D>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 326.676 400.91 Tm [<00590044004F00580048>]TJ
+0.995 0 0 1 350.448 400.91 Tm [<0024>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 357.444 400.91 Tm [<004700500053>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 371.635 400.91 Tm [<0044005700570055004C00450058005700480014>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 419.178 400.91 Tm [<000D>-225<0042004F0045>-225<005500490046>-225<00570042004D005600460054>]TJ
+1 0 0 1 113.386 388.955 Tm [<0045004600EB004F00460045>-220<004A004F>-220<005500490046>]TJ
+/F111 7.97011 Tf 1 0 0 1 171.996 388.955 Tm [<003F005600480057005300440055004400500048005700480055>]TJ
+/F105 9.96264 Tf 1 0 0 1 236.618 388.955 Tm [<004500460044004D0042005300420055004A0050004F>-220<004700500053>-220<0042004D004D>-220<005500490046>-220<00500055004900460053>-220<0042005500550053004A00430056005500460054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 70.982 365.044 Tm [<003F0056004800570056005700480053>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 365.044 Tm [<001F004F004C00560057>-602<00520049>-603<005600570048005300560021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 353.089 Tm [<0265004A>]TJ
+0.98 0 0 1 125.765 353.089 Tm [<0054>]TJ
+0.97 0 0 1 131.47 353.089 Tm [<0055>]TJ
+0.98 0 0 1 134.929 353.089 Tm [<0042004C00460054>-183<0042>]TJ
+0.97 0 0 1 160.505 353.089 Tm [<004D004A>]TJ
+0.98 0 0 1 165.549 353.089 Tm [<0054>]TJ
+0.97 0 0 1 169.464 353.089 Tm [<0055>]TJ
+0.98 0 0 1 174.713 353.089 Tm [<0050>]TJ
+0.97 0 0 1 179.644 353.089 Tm [<0047>]TJ
+0.98 0 0 1 184.661 353.089 Tm [<00440050004E004E0042004F00450054>]TJ
+0.97 0 0 1 228.264 353.089 Tm [<000D>-193<004A000F>]TJ
+0.98 0 0 1 237.44 353.089 Tm [<0046>]TJ
+0.97 0 0 1 241.784 353.089 Tm [<000F>]TJ
+0.98 0 0 1 246.94 353.089 Tm [<00440050004F>]TJ
+0.97 0 0 1 261.253 353.089 Tm [<00550053>]TJ
+0.98 0 0 1 268.337 353.089 Tm [<0050>]TJ
+0.97 0 0 1 273.267 353.089 Tm [<004D>]TJ
+0.98 0 0 1 277.531 353.089 Tm [<00540046005200560046004F004400460054>]TJ
+0.97 0 0 1 317.883 353.089 Tm [<000D>]TJ
+0.98 0 0 1 322.12 353.089 Tm [<00420054>]TJ
+0.97 0 0 1 332.257 353.089 Tm [<004A0055>]TJ
+0.98 0 0 1 338.287 353.089 Tm [<0054>]TJ
+0.97 0 0 1 343.992 353.089 Tm [<00EB0053>]TJ
+0.98 0 0 1 353.037 353.089 Tm [<0054>]TJ
+0.97 0 0 1 356.952 353.089 Tm [<0055>]TJ
+0.98 0 0 1 362.201 353.089 Tm [<0042>]TJ
+0.97 0 0 1 366.634 353.089 Tm [<0053>]TJ
+0.98 0 0 1 370.258 353.089 Tm [<00480056004E0046004F>]TJ
+0.97 0 0 1 397.683 353.089 Tm [<0055000D>]TJ
+0.98 0 0 1 405.38 353.089 Tm [<0042004F0045>]TJ
+0.97 0 0 1 422.137 353.089 Tm [<0055>]TJ
+0.98 0 0 1 425.596 353.089 Tm [<00490046004F>-183<0042>]TJ
+0.97 0 0 1 446.932 353.089 Tm [<005500550053004A>]TJ
+0.98 0 0 1 460.046 353.089 Tm [<00430056>]TJ
+0.97 0 0 1 470.17 353.089 Tm [<0055>]TJ
+0.98 0 0 1 473.63 353.089 Tm [<00460054>]TJ
+1.02 0 0 1 113.386 341.134 Tm [<0042004F0045>]TJ
+1.03 0 0 1 131.752 341.134 Tm [<0057>]TJ
+1.02 0 0 1 136.606 341.134 Tm [<0042>]TJ
+1.03 0 0 1 141.219 341.134 Tm [<004D>]TJ
+1.02 0 0 1 143.846 341.134 Tm [<005600460054>-274<00420054>]TJ
+1.03 0 0 1 172.073 341.134 Tm [<004A>]TJ
+1.02 0 0 1 174.803 341.134 Tm [<004F>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 183.262 341.134 Tm [<003F>]TJ
+1.02 0 0 1 188.208 341.134 Tm [<00560048>]TJ
+1.03 0 0 1 198.005 341.134 Tm [<0057>]TJ
+1.02 0 0 1 202.951 341.134 Tm [<00530044>]TJ
+1.03 0 0 1 212.748 341.134 Tm [<0055>]TJ
+1.02 0 0 1 217.694 341.134 Tm [<004400500048>]TJ
+1.03 0 0 1 232.389 341.134 Tm [<0057>]TJ
+1.02 0 0 1 237.335 341.134 Tm [<0048>]TJ
+1.03 0 0 1 242.234 341.134 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 247.18 341.134 Tm [<000F>-459<0265>]TJ
+1.02 0 0 1 264.821 341.134 Tm [<0046>-274<00440050004E004E0042004F00450054>-274<0042>]TJ
+1.03 0 0 1 324.916 341.134 Tm [<0053>]TJ
+1.02 0 0 1 328.764 341.134 Tm [<0046>]TJ
+1.03 0 0 1 336.074 341.134 Tm [<004B>]TJ
+1.02 0 0 1 338.578 341.134 Tm [<00560054>]TJ
+1.03 0 0 1 348.019 341.134 Tm [<0055>]TJ
+1.02 0 0 1 354.48 341.134 Tm [<00440050004F00440042>]TJ
+1.03 0 0 1 378.086 341.134 Tm [<0055>]TJ
+1.02 0 0 1 381.76 341.134 Tm [<0046004F0042>]TJ
+1.03 0 0 1 396.566 341.134 Tm [<0055>]TJ
+1.02 0 0 1 400.24 341.134 Tm [<00460045>]TJ
+1.03 0 0 1 410.056 341.134 Tm [<000D>]TJ
+1.02 0 0 1 415.507 341.134 Tm [<0058>]TJ
+1.03 0 0 1 422.417 341.134 Tm [<004A0055>]TJ
+1.02 0 0 1 428.821 341.134 Tm [<0049>-274<004F0050>]TJ
+1.03 0 0 1 447.949 341.134 Tm [<0055>]TJ
+1.02 0 0 1 451.623 341.134 Tm [<0049>]TJ
+1.03 0 0 1 457.161 341.134 Tm [<004A>]TJ
+1.02 0 0 1 459.89 341.134 Tm [<004F0048>]TJ
+1.03 0 0 1 473.084 341.134 Tm [<0055>]TJ
+1.02 0 0 1 476.758 341.134 Tm [<0050>]TJ
+1 0 0 1 113.386 329.179 Tm [<00540046005100420053004200550046>-220<005500490046004E000F>-293<026500560054>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 305.269 Tm [<003F0056004800570056005700480053005E003F0050005C00560057004800530003003F0050005C00520057004B00480055>-1<00560057004800530060>]TJ
+1 0 0 1 113.386 293.313 Tm [<000300030044005700570055004C0045005800570048001400030020000300590044004F005800480024>]TJ
+1 0 0 1 113.386 281.358 Tm [<000300030044005700570055004C0045005800570048001500030020000300590044004F005800480025>]TJ
+1 0 0 1 113.386 269.403 Tm [<00030003001100110011>]TJ
+1 0 0 1 113.386 257.448 Tm [<003F005300440055>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 233.538 Tm [<0044>]TJ
+0.97 0 0 1 117.32 233.538 Tm [<0053>]TJ
+0.98 0 0 1 120.944 233.538 Tm [<00460042>]TJ
+0.97 0 0 1 129.722 233.538 Tm [<0055>]TJ
+0.98 0 0 1 133.181 233.538 Tm [<00460054>-211<0050>]TJ
+0.97 0 0 1 148.436 233.538 Tm [<0053>]TJ
+0.98 0 0 1 154.125 233.538 Tm [<004E00500045>]TJ
+0.97 0 0 1 172.07 233.538 Tm [<004A00EB>]TJ
+0.98 0 0 1 180.062 233.538 Tm [<00460054>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 190.387 233.538 Tm [<003F>]TJ
+0.98 0 0 1 195.045 233.538 Tm [<0050>]TJ
+0.97 0 0 1 199.751 233.538 Tm [<005C>]TJ
+0.98 0 0 1 204.409 233.538 Tm [<0056>]TJ
+0.97 0 0 1 209.116 233.538 Tm [<0057>]TJ
+0.98 0 0 1 213.774 233.538 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 225.251 233.538 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 242.283 233.538 Tm [<003F>]TJ
+0.98 0 0 1 246.942 233.538 Tm [<0050>]TJ
+0.97 0 0 1 251.648 233.538 Tm [<005C>]TJ
+0.98 0 0 1 256.306 233.538 Tm [<0052>]TJ
+0.97 0 0 1 261.012 233.538 Tm [<0057>]TJ
+0.98 0 0 1 265.671 233.538 Tm [<004B0048>]TJ
+0.97 0 0 1 275.083 233.538 Tm [<0055>]TJ
+0.98 0 0 1 279.741 233.538 Tm [<0056>]TJ
+0.97 0 0 1 284.448 233.538 Tm [<0057>]TJ
+0.98 0 0 1 289.106 233.538 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 298.518 233.538 Tm [<000D>]TJ
+0.98 0 0 1 302.976 233.538 Tm [<00580049>]TJ
+0.97 0 0 1 314.936 233.538 Tm [<004A>]TJ
+0.98 0 0 1 317.507 233.538 Tm [<00440049>]TJ
+0.97 0 0 1 328.827 233.538 Tm [<004A>]TJ
+0.98 0 0 1 331.398 233.538 Tm [<004F>-211<0042>-212<0054>]TJ
+0.97 0 0 1 349.323 233.538 Tm [<004D004A>]TJ
+0.98 0 0 1 354.368 233.538 Tm [<00450046>-211<0058>]TJ
+0.97 0 0 1 372.503 233.538 Tm [<004A004D004D>]TJ
+0.98 0 0 1 382.086 233.538 Tm [<0044>]TJ
+0.97 0 0 1 386.021 233.538 Tm [<0053>]TJ
+0.98 0 0 1 389.645 233.538 Tm [<00460042>]TJ
+0.97 0 0 1 398.422 233.538 Tm [<0055>]TJ
+0.98 0 0 1 401.882 233.538 Tm [<0046>-211<0042>-211<0054>]TJ
+0.97 0 0 1 418.704 233.538 Tm [<0055>]TJ
+0.98 0 0 1 422.163 233.538 Tm [<00460051>-211<0058>]TJ
+0.97 0 0 1 440.308 233.538 Tm [<004A0055>]TJ
+0.98 0 0 1 446.338 233.538 Tm [<0049>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 453.724 233.538 Tm [<0059>]TJ
+0.98 0 0 1 458.382 233.538 Tm [<0044>]TJ
+0.97 0 0 1 463.089 233.538 Tm [<004F>]TJ
+0.98 0 0 1 467.747 233.538 Tm [<00580048>]TJ
+0.985 0 0 1 477.159 233.538 Tm [<0024>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 221.582 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 131.077 221.582 Tm [<0059>]TJ
+1.015 0 0 1 135.975 221.582 Tm [<0044>]TJ
+1.02 0 0 1 140.849 221.582 Tm [<004F>]TJ
+1.015 0 0 1 145.748 221.582 Tm [<005800480025>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 162.56 221.582 Tm [<0047>]TJ
+1.015 0 0 1 165.954 221.582 Tm [<0050>]TJ
+1.02 0 0 1 171.061 221.582 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.015 0 0 1 177.06 221.582 Tm [<0044>]TJ
+1.02 0 0 1 181.935 221.582 Tm [<005700570055004C>]TJ
+1.015 0 0 1 201.528 221.582 Tm [<00450058>]TJ
+1.02 0 0 1 211.277 221.582 Tm [<0057>]TJ
+1.015 0 0 1 216.175 221.582 Tm [<0048>]TJ
+1.02 0 0 1 221.05 221.582 Tm [<0014>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 228.137 221.582 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.015 0 0 1 245.828 221.582 Tm [<0044>]TJ
+1.02 0 0 1 250.702 221.582 Tm [<005700570055004C>]TJ
+1.015 0 0 1 270.296 221.582 Tm [<00450058>]TJ
+1.02 0 0 1 280.044 221.582 Tm [<0057>]TJ
+1.015 0 0 1 284.943 221.582 Tm [<00480015>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 296.881 221.582 Tm [<0053>]TJ
+1.015 0 0 1 300.691 221.582 Tm [<00460054005100460044>]TJ
+1.02 0 0 1 323.1 221.582 Tm [<0055004A0057>]TJ
+1.015 0 0 1 334.247 221.582 Tm [<0046>]TJ
+1.02 0 0 1 338.747 221.582 Tm [<004D005A000D>]TJ
+1.015 0 0 1 350.723 221.582 Tm [<0050>]TJ
+1.02 0 0 1 355.829 221.582 Tm [<0057>]TJ
+1.015 0 0 1 360.636 221.582 Tm [<0046>]TJ
+1.02 0 0 1 365.136 221.582 Tm [<00530053004A>]TJ
+1.015 0 0 1 375.46 221.582 Tm [<0045>]TJ
+1.02 0 0 1 380.729 221.582 Tm [<004A>]TJ
+1.015 0 0 1 383.432 221.582 Tm [<004F0048>]TJ
+1.02 0 0 1 395.975 221.582 Tm [<0055>]TJ
+1.015 0 0 1 399.613 221.582 Tm [<00490046>]TJ
+1.02 0 0 1 411.814 221.582 Tm [<0057>]TJ
+1.015 0 0 1 416.62 221.582 Tm [<0042>]TJ
+1.02 0 0 1 421.211 221.582 Tm [<004D>]TJ
+1.015 0 0 1 423.812 221.582 Tm [<00560046>-216<0050>]TJ
+1.02 0 0 1 440.947 221.582 Tm [<0047>-215<0055>]TJ
+1.015 0 0 1 450.168 221.582 Tm [<00490046>]TJ
+/F117 7.97011 Tf 1.015 0 0 1 462.368 221.582 Tm [<0056>]TJ
+1.02 0 0 1 467.243 221.582 Tm [<0057>]TJ
+1.015 0 0 1 472.141 221.582 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<0051004200530042004E0046005500460053000F>-293<02650046>-220<00440050004E004E0042004F00450054>-220<00440042004F>-220<00540055004A004D004D>-220<00550042004C0046>-220<00570042004D005600460054>-220<004300460055005800460046004F>-220<0043005300420044004C004600550054>-220<00550050>-220<005400460055>-220<0042005500550053004A00430056005500460054>-220<004D005000440042004D004D005A000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01EF>]TJ
+ET
+endstream
+endobj
+37 0 obj <<
+/Type /Page
+/Contents 38 0 R
+/Resources 36 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 8 0 R
+>> endobj
+36 0 obj <<
+/Font << /F111 6 0 R /F105 5 0 R /F117 23 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+42 0 obj <<
+/Length 34645
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<002201040104010200F900F20105010400F50103>-220<00F600FF0102>-220<010300FC00F900F400F50103>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 616.103 Tm [<0265>]TJ
+1.02 0 0 1 123.801 616.103 Tm [<0046>-242<0042>]TJ
+1.03 0 0 1 135.403 616.103 Tm [<005500550053004A>]TJ
+1.02 0 0 1 149.328 616.103 Tm [<00430056>]TJ
+1.03 0 0 1 159.866 616.103 Tm [<0055>]TJ
+1.02 0 0 1 163.539 616.103 Tm [<00460054>]TJ
+1.03 0 0 1 174.602 616.103 Tm [<0055>]TJ
+1.02 0 0 1 178.276 616.103 Tm [<00490042>]TJ
+1.03 0 0 1 188.428 616.103 Tm [<0055>-240<0047>]TJ
+1.02 0 0 1 197.995 616.103 Tm [<0050>]TJ
+1.03 0 0 1 203.127 616.103 Tm [<004D004D>]TJ
+1.02 0 0 1 208.38 616.103 Tm [<00500058>-242<0042>]TJ
+1.03 0 0 1 227.502 616.103 Tm [<0053>]TJ
+1.02 0 0 1 231.35 616.103 Tm [<0046>]TJ
+1.03 0 0 1 238.338 616.103 Tm [<0055>]TJ
+1.02 0 0 1 242.012 616.103 Tm [<0050>-242<00430046>-243<0056005400460045>]TJ
+1.03 0 0 1 283.493 616.103 Tm [<004A>]TJ
+1.02 0 0 1 286.223 616.103 Tm [<004F>]TJ
+1.03 0 0 1 294.359 616.103 Tm [<0055>]TJ
+1.02 0 0 1 298.033 616.103 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 310.559 616.103 Tm [<003F>]TJ
+1.02 0 0 1 315.505 616.103 Tm [<00560048>]TJ
+1.03 0 0 1 325.302 616.103 Tm [<0057>]TJ
+1.02 0 0 1 330.248 616.103 Tm [<00530044>]TJ
+1.03 0 0 1 340.045 616.103 Tm [<0055>]TJ
+1.02 0 0 1 344.991 616.103 Tm [<004400500048>]TJ
+1.03 0 0 1 359.686 616.103 Tm [<0057>]TJ
+1.02 0 0 1 364.633 616.103 Tm [<0048>]TJ
+1.03 0 0 1 369.531 616.103 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 376.944 616.103 Tm [<004500460044>]TJ
+1.03 0 0 1 390.855 616.103 Tm [<004D>]TJ
+1.02 0 0 1 393.482 616.103 Tm [<0042>]TJ
+1.03 0 0 1 398.096 616.103 Tm [<0053>]TJ
+1.02 0 0 1 401.944 616.103 Tm [<0042>]TJ
+1.03 0 0 1 406.557 616.103 Tm [<0055004A>]TJ
+1.02 0 0 1 412.961 616.103 Tm [<0050004F>]TJ
+1.03 0 0 1 426.229 616.103 Tm [<0047>]TJ
+1.02 0 0 1 429.656 616.103 Tm [<0050>]TJ
+1.03 0 0 1 434.788 616.103 Tm [<0053>-240<0055>]TJ
+1.02 0 0 1 444.776 616.103 Tm [<00490046>]TJ
+/F117 7.97011 Tf 1.02 0 0 1 457.302 616.103 Tm [<0056>]TJ
+1.03 0 0 1 462.2 616.103 Tm [<004F004C>]TJ
+1.02 0 0 1 472.093 616.103 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 604.148 Tm [<00510042>]TJ
+0.97 0 0 1 122.915 604.148 Tm [<0053>]TJ
+0.98 0 0 1 126.539 604.148 Tm [<0042004E0046>]TJ
+0.97 0 0 1 143.244 604.148 Tm [<0055>]TJ
+0.98 0 0 1 146.704 604.148 Tm [<0046>]TJ
+0.97 0 0 1 151.048 604.148 Tm [<0053000D>-222<004A>]TJ
+0.98 0 0 1 161.756 604.148 Tm [<004F>]TJ
+0.97 0 0 1 169.337 604.148 Tm [<0055>]TJ
+0.98 0 0 1 172.797 604.148 Tm [<00490046>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 184.596 604.148 Tm [<003F>]TJ
+0.98 0 0 1 189.254 604.148 Tm [<00560048>]TJ
+0.97 0 0 1 198.667 604.148 Tm [<0057>]TJ
+0.98 0 0 1 203.325 604.148 Tm [<0056>]TJ
+0.97 0 0 1 208.031 604.148 Tm [<004F004C>]TJ
+0.98 0 0 1 217.348 604.148 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 228.894 604.148 Tm [<004500460044>]TJ
+0.97 0 0 1 242.26 604.148 Tm [<004D>]TJ
+0.98 0 0 1 244.734 604.148 Tm [<0042>]TJ
+0.97 0 0 1 249.166 604.148 Tm [<0053>]TJ
+0.98 0 0 1 252.79 604.148 Tm [<0042>]TJ
+0.97 0 0 1 257.223 604.148 Tm [<0055004A>]TJ
+0.98 0 0 1 263.253 604.148 Tm [<0050004F>]TJ
+0.97 0 0 1 273.631 604.148 Tm [<000D>]TJ
+0.98 0 0 1 278.144 604.148 Tm [<0042004F0045>-218<00420054>-219<00500051>]TJ
+0.97 0 0 1 315.753 604.148 Tm [<0055004A>]TJ
+0.98 0 0 1 321.783 604.148 Tm [<0050004F0042>]TJ
+0.97 0 0 1 336.594 604.148 Tm [<004D>]TJ
+0.98 0 0 1 341.202 604.148 Tm [<0042>]TJ
+0.97 0 0 1 345.634 604.148 Tm [<0053>]TJ
+0.98 0 0 1 349.258 604.148 Tm [<00480056004E0046004F>]TJ
+0.97 0 0 1 376.684 604.148 Tm [<0055>]TJ
+0.98 0 0 1 380.143 604.148 Tm [<0054>]TJ
+0.97 0 0 1 386.192 604.148 Tm [<0055>]TJ
+0.98 0 0 1 389.652 604.148 Tm [<0050>]TJ
+0.97 0 0 1 396.716 604.148 Tm [<0055>]TJ
+0.98 0 0 1 400.175 604.148 Tm [<00490046>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 411.975 604.148 Tm [<003F>]TJ
+0.98 0 0 1 416.633 604.148 Tm [<0056>]TJ
+0.97 0 0 1 421.339 604.148 Tm [<004F004C>]TJ
+0.98 0 0 1 430.656 604.148 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 442.202 604.148 Tm [<00440050004E004E0042004F0045>]TJ
+1 0 0 1 113.386 592.193 Tm [<0042004F0045>-220<004600520056004A00570042004D0046004F0055>-220<00440050004E004E0042004F00450054>-220<0044005300460042005500460045>-220<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 275.169 592.193 Tm [<003F0056004800570056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 318.39 592.193 Tm [<000D>-220<004700500053>-220<00580049004A00440049>-220<002A0008004D004D>-220<005600540046>]TJ
+/F111 7.97011 Tf 1 0 0 1 392.213 592.193 Tm [<003F0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 423.219 592.193 Tm [<00480046004F00460053004A00440042004D004D005A000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 556.327 Tm [<003100250027>-200<0042004F0045>-200<004F00420057004A004800420055004A0050004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 113.386 544.372 Tm [<0027>]TJ
+1.03 0 0 1 118.782 544.372 Tm [<004A0053>]TJ
+1.02 0 0 1 125.359 544.372 Tm [<0054>]TJ
+1.03 0 0 1 129.434 544.372 Tm [<0055>]TJ
+1.02 0 0 1 135.481 544.372 Tm [<0050>]TJ
+1.03 0 0 1 140.612 544.372 Tm [<0047>]TJ
+1.02 0 0 1 146.412 544.372 Tm [<0042>]TJ
+1.03 0 0 1 151.026 544.372 Tm [<004D004D000D>-235<004A0047>]TJ
+1.02 0 0 1 169.741 544.372 Tm [<0042>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 176.727 544.372 Tm [<003F>]TJ
+1.02 0 0 1 181.674 544.372 Tm [<0056>]TJ
+1.03 0 0 1 186.572 544.372 Tm [<004F004C>]TJ
+1.02 0 0 1 196.465 544.372 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 208.634 544.372 Tm [<00440050004E004E0042004F0045>]TJ
+1.03 0 0 1 252.315 544.372 Tm [<0055>]TJ
+1.02 0 0 1 255.988 544.372 Tm [<0042004C00460054>-233<0042004F>]TJ
+1.03 0 0 1 286.926 544.372 Tm [<005A0055>]TJ
+1.02 0 0 1 295.341 544.372 Tm [<0049>]TJ
+1.03 0 0 1 300.879 544.372 Tm [<004A>]TJ
+1.02 0 0 1 303.608 544.372 Tm [<004F0048>-233<00430046>]TJ
+1.03 0 0 1 326.081 544.372 Tm [<0055>]TJ
+1.02 0 0 1 329.755 544.372 Tm [<005800460046004F>-233<0043>]TJ
+1.03 0 0 1 358.924 544.372 Tm [<0053>]TJ
+1.02 0 0 1 362.772 544.372 Tm [<00420044004C0046>]TJ
+1.03 0 0 1 381.074 544.372 Tm [<0055>]TJ
+1.02 0 0 1 384.748 544.372 Tm [<0054>]TJ
+1.03 0 0 1 388.823 544.372 Tm [<000D>]TJ
+1.02 0 0 1 393.754 544.372 Tm [<0042004F0045>]TJ
+1.03 0 0 1 411.705 544.372 Tm [<004A0047>]TJ
+1.02 0 0 1 420.235 544.372 Tm [<0042004E0050004F0048>]TJ
+1.03 0 0 1 451.01 544.372 Tm [<004A0055>-231<0055>]TJ
+1.02 0 0 1 463.459 544.372 Tm [<00490046>]TJ
+1.03 0 0 1 473.52 544.372 Tm [<0053>]TJ
+1.02 0 0 1 477.368 544.372 Tm [<0046>]TJ
+1.03 0 0 1 113.386 532.417 Tm [<004A>]TJ
+1.02 0 0 1 116.115 532.417 Tm [<0054>-238<00540050004E0046>]TJ
+1.03 0 0 1 144.594 532.417 Tm [<0055>]TJ
+1.02 0 0 1 148.267 532.417 Tm [<0049>]TJ
+1.03 0 0 1 153.806 532.417 Tm [<004A>]TJ
+1.02 0 0 1 156.535 532.417 Tm [<004F0048>]TJ
+1.03 0 0 1 169.364 532.417 Tm [<0055>]TJ
+1.02 0 0 1 173.038 532.417 Tm [<00490042>]TJ
+1.03 0 0 1 183.189 532.417 Tm [<0055>]TJ
+1.02 0 0 1 189.286 532.417 Tm [<0045005000460054004F>]TJ
+1.03 0 0 1 213.98 532.417 Tm [<00080055>]TJ
+1.02 0 0 1 222.149 532.417 Tm [<00440050004F>]TJ
+1.03 0 0 1 237.047 532.417 Tm [<0055>]TJ
+1.02 0 0 1 240.72 532.417 Tm [<0042>]TJ
+1.03 0 0 1 245.334 532.417 Tm [<004A>]TJ
+1.02 0 0 1 248.063 532.417 Tm [<004F>-238<0042>]TJ
+1.03 0 0 1 263.194 532.417 Tm [<0041001E0008>]TJ
+1.02 0 0 1 275.14 532.417 Tm [<0054>]TJ
+1.03 0 0 1 279.214 532.417 Tm [<004A>]TJ
+1.02 0 0 1 281.944 532.417 Tm [<0048004F>]TJ
+1.03 0 0 1 292.35 532.417 Tm [<000D>-241<004A000F>]TJ
+1.02 0 0 1 302.589 532.417 Tm [<0046>]TJ
+1.03 0 0 1 307.111 532.417 Tm [<000F>]TJ
+1.02 0 0 1 313.241 532.417 Tm [<00540050004E0046>]TJ
+1.03 0 0 1 335.222 532.417 Tm [<0055>]TJ
+1.02 0 0 1 338.895 532.417 Tm [<0049>]TJ
+1.03 0 0 1 344.433 532.417 Tm [<004A>]TJ
+1.02 0 0 1 347.163 532.417 Tm [<004F0048>]TJ
+1.03 0 0 1 359.992 532.417 Tm [<0055>]TJ
+1.02 0 0 1 363.666 532.417 Tm [<00490042>]TJ
+1.03 0 0 1 373.817 532.417 Tm [<0055>-236<004A>]TJ
+1.02 0 0 1 382.644 532.417 Tm [<0054>-238<00500043>]TJ
+1.03 0 0 1 399.446 532.417 Tm [<0057004A>]TJ
+1.02 0 0 1 407.029 532.417 Tm [<005000560054>]TJ
+1.03 0 0 1 421.602 532.417 Tm [<004D005A>]TJ
+1.02 0 0 1 431.392 532.417 Tm [<004F0050>-238<0042>]TJ
+1.03 0 0 1 449.231 532.417 Tm [<005500550053004A>]TJ
+1.02 0 0 1 463.156 532.417 Tm [<00430056>]TJ
+1.03 0 0 1 473.694 532.417 Tm [<0055>]TJ
+1.02 0 0 1 477.368 532.417 Tm [<0046>]TJ
+1.005 0 0 1 113.386 520.462 Tm [<00540046>]TJ
+1.01 0 0 1 121.856 520.462 Tm [<00550055004A>]TJ
+1.005 0 0 1 131.737 520.462 Tm [<004F0048>]TJ
+1.01 0 0 1 141.99 520.462 Tm [<000D>-220<0055>]TJ
+1.005 0 0 1 150.277 520.462 Tm [<00490046004F>]TJ
+1.01 0 0 1 167.99 520.462 Tm [<0055>]TJ
+1.005 0 0 1 171.592 520.462 Tm [<0049>]TJ
+1.01 0 0 1 177.049 520.462 Tm [<004A>]TJ
+1.005 0 0 1 179.726 520.462 Tm [<0054>]TJ
+1.01 0 0 1 185.955 520.462 Tm [<0055>]TJ
+1.005 0 0 1 189.557 520.462 Tm [<0049>]TJ
+1.01 0 0 1 195.014 520.462 Tm [<004A>]TJ
+1.005 0 0 1 197.69 520.462 Tm [<004F0048>]TJ
+1.01 0 0 1 207.943 520.462 Tm [<000D>-220<004D>]TJ
+1.005 0 0 1 215.204 520.462 Tm [<0046>]TJ
+1.01 0 0 1 219.659 520.462 Tm [<00550008>]TJ
+1.005 0 0 1 225.294 520.462 Tm [<0054>-221<00440042>]TJ
+1.01 0 0 1 240.103 520.462 Tm [<004D004D>-220<004A0055>]TJ
+1.005 0 0 1 255.962 520.462 Tm [<0042>-221<0054>]TJ
+1.01 0 0 1 266.736 520.462 Tm [<00550053004A>]TJ
+1.005 0 0 1 276.788 520.462 Tm [<004F0048>]TJ
+1.01 0 0 1 287.041 520.462 Tm [<000D>]TJ
+1.005 0 0 1 291.726 520.462 Tm [<0043004600440050004E00460054>]TJ
+1.01 0 0 1 329.183 520.462 Tm [<0055>]TJ
+1.005 0 0 1 332.786 520.462 Tm [<00490046>-221<0054>]TJ
+1.01 0 0 1 348.927 520.462 Tm [<004D004A>]TJ
+1.005 0 0 1 354.179 520.462 Tm [<00450046>]TJ
+1.01 0 0 1 363.851 520.462 Tm [<0008>]TJ
+1.005 0 0 1 365.884 520.462 Tm [<0054>]TJ
+1.01 0 0 1 372.113 520.462 Tm [<0055004A0055004D>]TJ
+1.005 0 0 1 384.57 520.462 Tm [<0046>]TJ
+1.01 0 0 1 389.025 520.462 Tm [<000D>]TJ
+1.005 0 0 1 393.71 520.462 Tm [<0042004F0045>]TJ
+1.01 0 0 1 411.273 520.462 Tm [<004A0055>-220<004A>]TJ
+1.005 0 0 1 422.442 520.462 Tm [<0054>]TJ
+1.01 0 0 1 428.671 520.462 Tm [<0053>]TJ
+1.005 0 0 1 432.444 520.462 Tm [<004600440050>]TJ
+1.01 0 0 1 445.991 520.462 Tm [<0053>]TJ
+1.005 0 0 1 449.764 520.462 Tm [<004500460045>]TJ
+1.01 0 0 1 466.867 520.462 Tm [<004A>]TJ
+1.005 0 0 1 469.543 520.462 Tm [<004F>-221<0042>]TJ
+0.99 0 0 1 113.386 508.506 Tm [<004E00420044>]TJ
+0.985 0 0 1 129.847 508.506 Tm [<0053>]TJ
+0.99 0 0 1 133.527 508.506 Tm [<0050>-223<00440042>]TJ
+0.985 0 0 1 149.162 508.506 Tm [<004D004D>]TJ
+0.99 0 0 1 154.186 508.506 Tm [<00460045>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 165.916 508.506 Tm [<003F>]TJ
+0.99 0 0 1 170.646 508.506 Tm [<0056>]TJ
+0.985 0 0 1 175.4 508.506 Tm [<004F004C>]TJ
+0.99 0 0 1 184.861 508.506 Tm [<00470048>]TJ
+0.985 0 0 1 194.369 508.506 Tm [<0057004C0057004F>]TJ
+0.99 0 0 1 213.29 508.506 Tm [<0048>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 218.045 508.506 Tm [<000D>]TJ
+0.99 0 0 1 222.653 508.506 Tm [<00580049>]TJ
+0.985 0 0 1 234.735 508.506 Tm [<004A>]TJ
+0.99 0 0 1 237.346 508.506 Tm [<00440049>]TJ
+0.985 0 0 1 248.897 508.506 Tm [<005A>]TJ
+0.99 0 0 1 253.431 508.506 Tm [<00500056>-223<00440042004F>-223<005600540046>]TJ
+0.985 0 0 1 297.732 508.506 Tm [<004A>]TJ
+0.99 0 0 1 300.342 508.506 Tm [<004F>]TJ
+0.985 0 0 1 308.048 508.506 Tm [<0055>]TJ
+0.99 0 0 1 311.561 508.506 Tm [<00490046>-223<0054>]TJ
+0.985 0 0 1 327.482 508.506 Tm [<004D004A>]TJ
+0.99 0 0 1 332.604 508.506 Tm [<00450046>]TJ
+0.985 0 0 1 344.333 508.506 Tm [<004A0055>]TJ
+0.99 0 0 1 350.457 508.506 Tm [<00540046>]TJ
+0.985 0 0 1 358.801 508.506 Tm [<004D0047000F>-300<002A0055>-225<004A>]TJ
+0.99 0 0 1 381.451 508.506 Tm [<0054>-223<0042>]TJ
+0.985 0 0 1 392.086 508.506 Tm [<004D>]TJ
+0.99 0 0 1 394.598 508.506 Tm [<00540050>-223<0056005400460045>]TJ
+0.985 0 0 1 426.628 508.506 Tm [<004A>]TJ
+0.99 0 0 1 429.238 508.506 Tm [<004F>-223<004300500050004C004E0042>]TJ
+0.985 0 0 1 469.333 508.506 Tm [<0053>]TJ
+0.99 0 0 1 473.013 508.506 Tm [<004C0054>]TJ
+1 0 0 1 113.386 496.551 Tm [<0009004A0047>-220<005500490046>-220<0054004D004A00450046>-220<004A0054>-220<00550050>-220<00430046>-220<004300500050004C004E00420053004C00460045000A000D>-220<00580049004A00440049>-220<004D0046004200450054>-220<00560054>-220<00550050>-220<005000560053>-220<00EB005300540055>-220<0042005500550053004A0043005600550046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 72.776 472.641 Tm [<0053004700490057004C0057004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 472.641 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 472.641 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 472.641 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 472.641 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 472.641 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 472.641 Tm [<0056004F004C0047004800B70056>-602<0057004C0057004F0048>]TJ
+/F63 9.96264 Tf 1 0 0 1 266.942 472.641 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 460.686 Tm [<0034005600510051005000540046>]TJ
+1.015 0 0 1 149.928 460.686 Tm [<005A>]TJ
+1.01 0 0 1 154.6 460.686 Tm [<00500056>-216<00580042004F>]TJ
+1.015 0 0 1 184.199 460.686 Tm [<0055>]TJ
+1.01 0 0 1 189.999 460.686 Tm [<0042>-216<0054>]TJ
+1.015 0 0 1 200.782 460.686 Tm [<004D004A>]TJ
+1.01 0 0 1 206.061 460.686 Tm [<00450046>-216<0058>]TJ
+1.015 0 0 1 224.803 460.686 Tm [<004A0055>]TJ
+1.01 0 0 1 231.113 460.686 Tm [<0049>]TJ
+1.015 0 0 1 238.777 460.686 Tm [<0055004A0055004D>]TJ
+1.01 0 0 1 251.296 460.686 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 257.953 460.686 Tm [<0036005200500048>]TJ
+1.015 0 0 1 277.354 460.686 Tm [<0057>]TJ
+1.01 0 0 1 282.229 460.686 Tm [<004B>]TJ
+1.015 0 0 1 287.079 460.686 Tm [<004C>]TJ
+1.01 0 0 1 291.953 460.686 Tm [<0051004A>]TJ
+1.015 0 0 1 301.654 460.686 Tm [<0003>]TJ
+1.01 0 0 1 306.528 460.686 Tm [<0044004500520058>]TJ
+1.015 0 0 1 325.93 460.686 Tm [<00570003003F0037>]TJ
+1.01 0 0 1 345.427 460.686 Tm [<0048>]TJ
+1.015 0 0 1 350.277 460.686 Tm [<003B>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 355.152 460.686 Tm [<000F>-215<0265>]TJ
+1.01 0 0 1 370.073 460.686 Tm [<0046004F>]TJ
+1.015 0 0 1 382.345 460.686 Tm [<004A0047>-215<0055>]TJ
+1.01 0 0 1 394.212 460.686 Tm [<00490042>]TJ
+1.015 0 0 1 404.264 460.686 Tm [<0055>]TJ
+1.01 0 0 1 410.064 460.686 Tm [<0054>]TJ
+1.015 0 0 1 414.099 460.686 Tm [<00550053004A>]TJ
+1.01 0 0 1 424.201 460.686 Tm [<004F0048>]TJ
+1.015 0 0 1 436.685 460.686 Tm [<004A>]TJ
+1.01 0 0 1 439.375 460.686 Tm [<0054>-216<0056005400460045>]TJ
+1.015 0 0 1 466.837 460.686 Tm [<004A>]TJ
+1.01 0 0 1 469.527 460.686 Tm [<004F>-216<0042>]TJ
+1 0 0 1 113.386 448.731 Tm [<004300500050004C004E0042>]TJ
+1.005 0 0 1 146.103 448.731 Tm [<0053>]TJ
+1 0 0 1 149.858 448.731 Tm [<004C>]TJ
+1.005 0 0 1 154.829 448.731 Tm [<000D>-223<0055>]TJ
+1 0 0 1 163.1 448.731 Tm [<00490046>-223<004300500050004C004E0042>]TJ
+1.005 0 0 1 207.905 448.731 Tm [<0053>]TJ
+1 0 0 1 211.66 448.731 Tm [<004C>-223<00580050004F>]TJ
+1.005 0 0 1 236.221 448.731 Tm [<00080055>-222<004D>]TJ
+1 0 0 1 246.616 448.731 Tm [<00500050004C>]TJ
+1.005 0 0 1 263.875 448.731 Tm [<0057>]TJ
+1 0 0 1 268.611 448.731 Tm [<0046>]TJ
+1.005 0 0 1 273.044 448.731 Tm [<0053005A>]TJ
+1 0 0 1 283.65 448.731 Tm [<0048005000500045>]TJ
+1.005 0 0 1 303.545 448.731 Tm [<000D>]TJ
+1 0 0 1 308.231 448.731 Tm [<0043004600440042005600540046>-223<0050>]TJ
+1.005 0 0 1 347.218 448.731 Tm [<0047>-222<0055>]TJ
+1 0 0 1 356.372 448.731 Tm [<00490046>]TJ
+1.005 0 0 1 368.46 448.731 Tm [<0035>]TJ
+1 0 0 1 372.476 446.663 Tm [<0026>]TJ
+1.005 0 0 1 376.76 448.731 Tm [<0039>]TJ
+1 0 0 1 384.882 448.731 Tm [<005000510046>]TJ
+1.005 0 0 1 399.547 448.731 Tm [<0053>]TJ
+1 0 0 1 403.302 448.731 Tm [<0042>]TJ
+1.005 0 0 1 407.825 448.731 Tm [<0055004A>]TJ
+1 0 0 1 414.073 448.731 Tm [<0050004F0054>-223<00440050004F>]TJ
+1.005 0 0 1 445.488 448.731 Tm [<0055>]TJ
+1 0 0 1 449.073 448.731 Tm [<0042>]TJ
+1.005 0 0 1 453.596 448.731 Tm [<004A>]TJ
+1 0 0 1 456.259 448.731 Tm [<004F00460045>]TJ
+1.005 0 0 1 473.667 448.731 Tm [<004A>]TJ
+1 0 0 1 476.331 448.731 Tm [<004F>]TJ
+0.975 0 0 1 113.386 436.775 Tm [<0055>]TJ
+0.98 0 0 1 116.863 436.775 Tm [<00490046>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 128.745 436.775 Tm [<003F0037>]TJ
+0.98 0 0 1 138.11 436.775 Tm [<0048>]TJ
+0.975 0 0 1 142.816 436.775 Tm [<003B>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 149.714 436.775 Tm [<00440050004E004E0042004F0045>]TJ
+0.975 0 0 1 189.402 436.775 Tm [<000D>]TJ
+0.98 0 0 1 194.005 436.775 Tm [<00580049>]TJ
+0.975 0 0 1 205.965 436.775 Tm [<004A>]TJ
+0.98 0 0 1 208.549 436.775 Tm [<00440049>-226<004300500050004C004E0042>]TJ
+0.975 0 0 1 252.083 436.775 Tm [<0053>]TJ
+0.98 0 0 1 255.726 436.775 Tm [<004C0054>-227<00450050004F>]TJ
+0.975 0 0 1 282.194 436.775 Tm [<00080055>]TJ
+0.98 0 0 1 289.85 436.775 Tm [<0056004F00450046>]TJ
+0.975 0 0 1 309.885 436.775 Tm [<0053>]TJ
+0.98 0 0 1 313.527 436.775 Tm [<0054>]TJ
+0.975 0 0 1 317.442 436.775 Tm [<0055>]TJ
+0.98 0 0 1 320.92 436.775 Tm [<0042004F0045>]TJ
+0.975 0 0 1 335.887 436.775 Tm [<000D>]TJ
+0.98 0 0 1 340.489 436.775 Tm [<0054>]TJ
+0.975 0 0 1 344.404 436.775 Tm [<004A>]TJ
+0.98 0 0 1 346.988 436.775 Tm [<004F00440046>-227<004300500050004C004E0042>]TJ
+0.975 0 0 1 394.994 436.775 Tm [<0053>]TJ
+0.98 0 0 1 398.637 436.775 Tm [<004C0054>-227<0042>]TJ
+0.975 0 0 1 414.073 436.775 Tm [<0053>]TJ
+0.98 0 0 1 417.715 436.775 Tm [<0046>-227<0051>]TJ
+0.975 0 0 1 429.373 436.775 Tm [<0053>]TJ
+0.98 0 0 1 433.015 436.775 Tm [<0046>]TJ
+0.975 0 0 1 437.36 436.775 Tm [<00550055005A>-228<004D004A>]TJ
+0.98 0 0 1 456.089 436.775 Tm [<004E>]TJ
+0.975 0 0 1 464.017 436.775 Tm [<004A0055>]TJ
+0.98 0 0 1 470.078 436.775 Tm [<00460045>]TJ
+0.975 0 0 1 479.51 436.775 Tm [<000F>]TJ
+0.985 0 0 1 113.386 424.82 Tm [<0265004A>]TJ
+0.99 0 0 1 125.957 424.82 Tm [<0054>-224<0042>]TJ
+0.985 0 0 1 136.604 424.82 Tm [<005500550053004A>]TJ
+0.99 0 0 1 149.92 424.82 Tm [<00430056>]TJ
+0.985 0 0 1 160.148 424.82 Tm [<0055>]TJ
+0.99 0 0 1 163.661 424.82 Tm [<0046>-224<00540046>]TJ
+0.985 0 0 1 178.609 424.82 Tm [<0055>]TJ
+0.99 0 0 1 182.122 424.82 Tm [<0054>]TJ
+0.985 0 0 1 188.292 424.82 Tm [<0055>]TJ
+0.99 0 0 1 191.805 424.82 Tm [<00490046>]TJ
+0.985 0 0 1 203.783 424.82 Tm [<0055004A0055004D>]TJ
+0.99 0 0 1 215.932 424.82 Tm [<0046>-224<0050>]TJ
+0.985 0 0 1 227.516 424.82 Tm [<0047>-225<0055>]TJ
+0.99 0 0 1 236.522 424.82 Tm [<00490046>-224<0054>]TJ
+0.985 0 0 1 252.455 424.82 Tm [<004D004A>]TJ
+0.99 0 0 1 257.578 424.82 Tm [<00450046>]TJ
+0.985 0 0 1 269.32 424.82 Tm [<0047>]TJ
+0.99 0 0 1 272.598 424.82 Tm [<0050>]TJ
+0.985 0 0 1 277.578 424.82 Tm [<0053>]TJ
+0.99 0 0 1 283.473 424.82 Tm [<005600540046>]TJ
+0.985 0 0 1 299.239 424.82 Tm [<004A>]TJ
+0.99 0 0 1 301.849 424.82 Tm [<004F>-224<004300500050004C004E0042>]TJ
+0.985 0 0 1 341.957 424.82 Tm [<0053>]TJ
+0.99 0 0 1 345.637 424.82 Tm [<004C0054>]TJ
+0.985 0 0 1 356.728 424.82 Tm [<0009>]TJ
+0.99 0 0 1 359.947 424.82 Tm [<0042004F0045>]TJ
+0.985 0 0 1 377.281 424.82 Tm [<004A>]TJ
+0.99 0 0 1 379.892 424.82 Tm [<004F>]TJ
+0.985 0 0 1 387.61 424.82 Tm [<0055>]TJ
+0.99 0 0 1 391.123 424.82 Tm [<00490046>]TJ
+0.985 0 0 1 403.102 424.82 Tm [<004D>]TJ
+0.99 0 0 1 405.614 424.82 Tm [<0042>]TJ
+0.985 0 0 1 410.092 424.82 Tm [<005A>]TJ
+0.99 0 0 1 414.625 424.82 Tm [<0046>]TJ
+0.985 0 0 1 419.014 424.82 Tm [<0053>]TJ
+0.99 0 0 1 422.694 424.82 Tm [<0054>-224<00510042004F0046>]TJ
+0.985 0 0 1 448.383 424.82 Tm [<004D>-225<0055>]TJ
+0.99 0 0 1 456.622 424.82 Tm [<00500050>]TJ
+0.985 0 0 1 466.584 424.82 Tm [<000A000F>-304<002A0055>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 424.372 Tm [<002D0042005A004600530054000D>-200<004A000F0046000F>-266<00540055004600510054000D>-200<004200530046>]TJ
+1 0 0 1 491.852 415.406 Tm [<0048005300500056005100460045>-195<004A004F>-196<005500490046>-195<004D0042005A004600530054>-196<00510042004F0046004D>]TJ
+1 0 0 1 491.852 406.439 Tm [<0056004F004500460053>-200<005500490046>-200<0049004600420045004A004F0048>-200<00500047>-200<005500490046>]TJ
+1 0 0 1 491.852 397.473 Tm [<0054004D004A00450046>-200<00580049004600530046>-200<005500490046005A>-200<00430046004D0050004F0048000F>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 412.865 Tm [<0045005000460054004F>]TJ
+1.025 0 0 1 137.958 412.865 Tm [<00080055>]TJ
+1.015 0 0 1 145.907 412.865 Tm [<004E0042004C0046>-220<004E005600440049>-221<00540046004F00540046>-220<0046>]TJ
+1.025 0 0 1 225.333 412.865 Tm [<0059>]TJ
+1.015 0 0 1 230.174 412.865 Tm [<004400460051>]TJ
+1.025 0 0 1 244.027 412.865 Tm [<0055>]TJ
+1.015 0 0 1 249.913 412.865 Tm [<00420054>-220<0042>]TJ
+1.025 0 0 1 267.61 412.865 Tm [<004D>]TJ
+1.015 0 0 1 270.224 412.865 Tm [<005000440042>]TJ
+1.025 0 0 1 283.997 412.865 Tm [<004D>]TJ
+1.015 0 0 1 288.841 412.865 Tm [<0042>]TJ
+1.025 0 0 1 293.432 412.865 Tm [<005500550053004A>]TJ
+1.015 0 0 1 307.289 412.865 Tm [<00430056>]TJ
+1.025 0 0 1 317.775 412.865 Tm [<0055>]TJ
+1.015 0 0 1 321.431 412.865 Tm [<0046>]TJ
+1.025 0 0 1 325.931 412.865 Tm [<000D>]TJ
+1.015 0 0 1 330.673 412.865 Tm [<0056004F>]TJ
+1.025 0 0 1 341.654 412.865 Tm [<004D>]TJ
+1.015 0 0 1 344.268 412.865 Tm [<004600540054>]TJ
+1.025 0 0 1 359.108 412.865 Tm [<005A>]TJ
+1.015 0 0 1 363.826 412.865 Tm [<00500056>-220<00450046>]TJ
+1.025 0 0 1 386.27 412.865 Tm [<00EB>]TJ
+1.015 0 0 1 391.999 412.865 Tm [<004F0046>]TJ
+1.025 0 0 1 404.372 412.865 Tm [<004A0055>]TJ
+1.015 0 0 1 412.974 412.865 Tm [<0058>]TJ
+1.025 0 0 1 419.85 412.865 Tm [<004A0055>]TJ
+1.015 0 0 1 426.222 412.865 Tm [<0049>-220<0042>-221<00440050004E004E0042004F0045>]TJ
+1 0 0 1 113.386 400.91 Tm [<00580049005000540046>-220<0045004600EB004F004A0055004A0050004F>-220<004400490042004F004800460054>-220<004700530050004E>-220<0054004D004A00450046>-220<00550050>-220<0054004D004A00450046000D>-220<004A004F00570050004D0057004A004F0048>-220<004700500053>-220<004A004F005400550042004F00440046>-220<0042>-220<004400500056004F005500460053000F>]TJ
+1.03 0 0 1 133.311 388.955 Tm [<002A>]TJ
+1.02 0 0 1 139.74 388.955 Tm [<0042>-305<0054>]TJ
+1.03 0 0 1 151.534 388.955 Tm [<004D004A>]TJ
+1.02 0 0 1 156.89 388.955 Tm [<00450046>-305<004900420054>-306<004F0050>]TJ
+1.03 0 0 1 201.052 388.955 Tm [<0055004A0055004D>]TJ
+1.02 0 0 1 213.755 388.955 Tm [<0046>]TJ
+1.03 0 0 1 218.277 388.955 Tm [<000D>]TJ
+1.02 0 0 1 224.125 388.955 Tm [<00510045>]TJ
+1.03 0 0 1 234.724 388.955 Tm [<0047>]TJ
+1.02 0 0 1 241.257 388.955 Tm [<0050>]TJ
+1.03 0 0 1 246.388 388.955 Tm [<0053>]TJ
+1.02 0 0 1 253.342 388.955 Tm [<004F0050>]TJ
+1.03 0 0 1 264.144 388.955 Tm [<0055000D>-324<0041>]TJ
+1.02 0 0 1 275.738 388.955 Tm [<0031004200480046>]TJ
+/F63 9.96264 Tf 1.02 0 0 1 298.273 388.955 Tm [<004F>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 303.455 388.955 Tm [<0008>-302<004A>]TJ
+1.02 0 0 1 311.363 388.955 Tm [<0054>-305<0056005400460045>]TJ
+1.03 0 0 1 340.906 388.955 Tm [<004A>]TJ
+1.02 0 0 1 343.635 388.955 Tm [<004F>-305<004300500050004C004E0042>]TJ
+1.03 0 0 1 385.782 388.955 Tm [<0053>]TJ
+1.02 0 0 1 389.63 388.955 Tm [<004C0054>-305<0042004F0045>]TJ
+1.03 0 0 1 420.565 388.955 Tm [<004D>]TJ
+1.02 0 0 1 423.192 388.955 Tm [<0042>]TJ
+1.03 0 0 1 427.805 388.955 Tm [<005A>]TJ
+1.02 0 0 1 432.546 388.955 Tm [<0046>]TJ
+1.03 0 0 1 437.068 388.955 Tm [<0053>]TJ
+1.02 0 0 1 440.916 388.955 Tm [<0054>]TJ
+1.03 0 0 1 444.991 388.955 Tm [<000D>]TJ
+1.02 0 0 1 450.839 388.955 Tm [<00430056>]TJ
+1.03 0 0 1 461.377 388.955 Tm [<0055>-302<0055>]TJ
+1.02 0 0 1 471.829 388.955 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 377 Tm [<003F0056004F004C004700480057004C0057004F0048>]TJ
+/F105 9.96264 Tf 1 0 0 1 168.403 377 Tm [<00440050004E004E0042004F0045>-220<00530046004E0042004A004F0054>-220<0046004E00510055005A>-220<0009004F00500055>-220<0056004F0045004600EB004F00460045000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 72.776 353.089 Tm [<004500520052004E005000440055004E>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 353.089 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 353.089 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 353.089 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 353.089 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 353.089 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 353.089 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 353.089 Tm [<0057005500580048>]TJ
+/F63 9.96264 Tf 1 0 0 1 242.93 353.089 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 341.134 Tm [<002A0047>-220<00550049004A0054>-220<004A0054>-220<005400460055>-220<00550050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 173.779 341.134 Tm [<0057005500580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 192.989 341.134 Tm [<000D>-220<0042>-220<004300500050004C004E00420053004C>-220<004A0054>-220<0044005300460042005500460045>-220<0058004A00550049>-220<005500490046>-220<0054004D004A0045004600080054>-220<0055004A0055004D0046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 48.764 317.224 Tm [<004500520052004E005000440055004E004F004800590048004F>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 317.224 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 317.224 Tm [<005100580050004500480055>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 317.224 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 317.224 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 317.224 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 317.224 Tm [<0014>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 317.224 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 305.269 Tm [<0265>]TJ
+0.98 0 0 1 123.245 305.269 Tm [<0046>]TJ
+0.975 0 0 1 129.779 305.269 Tm [<004D>]TJ
+0.98 0 0 1 132.265 305.269 Tm [<0046>]TJ
+0.975 0 0 1 136.61 305.269 Tm [<0057>]TJ
+0.98 0 0 1 141.205 305.269 Tm [<0046>]TJ
+0.975 0 0 1 145.549 305.269 Tm [<004D>]TJ
+0.98 0 0 1 150.225 305.269 Tm [<0050>]TJ
+0.975 0 0 1 155.156 305.269 Tm [<0047>-225<0055>]TJ
+0.98 0 0 1 164.066 305.269 Tm [<00490046>-224<0054>]TJ
+0.975 0 0 1 179.836 305.269 Tm [<004D004A>]TJ
+0.98 0 0 1 184.907 305.269 Tm [<00450046>]TJ
+0.975 0 0 1 194.338 305.269 Tm [<0008>]TJ
+0.98 0 0 1 196.3 305.269 Tm [<0054>-224<004300500050004C004E0042>]TJ
+0.975 0 0 1 234.467 305.269 Tm [<0053>]TJ
+0.98 0 0 1 238.11 305.269 Tm [<004C>]TJ
+0.975 0 0 1 242.982 305.269 Tm [<000F>-300<0265>]TJ
+0.98 0 0 1 258.142 305.269 Tm [<0046>-224<0049>]TJ
+0.975 0 0 1 269.997 305.269 Tm [<004A>]TJ
+0.98 0 0 1 272.581 305.269 Tm [<004800490046>]TJ
+0.975 0 0 1 286.796 305.269 Tm [<0053>-225<0055>]TJ
+0.98 0 0 1 296.106 305.269 Tm [<00490046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 307.96 305.269 Tm [<00510058005000450048>]TJ
+0.975 0 0 1 331.492 305.269 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 336.174 305.269 Tm [<000D>-225<0055>]TJ
+0.98 0 0 1 344.221 305.269 Tm [<00490046>]TJ
+0.975 0 0 1 356.075 305.269 Tm [<004D>]TJ
+0.98 0 0 1 358.562 305.269 Tm [<005000580046>]TJ
+0.975 0 0 1 374.476 305.269 Tm [<0053>-225<0055>]TJ
+0.98 0 0 1 383.785 305.269 Tm [<00490046>-224<0054>]TJ
+0.975 0 0 1 399.555 305.269 Tm [<004D004A>]TJ
+0.98 0 0 1 404.626 305.269 Tm [<00450046>]TJ
+0.975 0 0 1 416.246 305.269 Tm [<004A>]TJ
+0.98 0 0 1 418.83 305.269 Tm [<004F>]TJ
+0.975 0 0 1 426.467 305.269 Tm [<0055>]TJ
+0.98 0 0 1 429.945 305.269 Tm [<00490046>-224<0049>]TJ
+0.975 0 0 1 447.12 305.269 Tm [<004A>]TJ
+0.98 0 0 1 449.704 305.269 Tm [<0046>]TJ
+0.975 0 0 1 454.049 305.269 Tm [<0053>]TJ
+0.98 0 0 1 457.691 305.269 Tm [<0042>]TJ
+0.975 0 0 1 462.124 305.269 Tm [<0053>]TJ
+0.98 0 0 1 465.767 305.269 Tm [<00440049>]TJ
+0.975 0 0 1 475.022 305.269 Tm [<005A000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 304.82 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 304.82 Tm [<00240053004600420055004A004F0048>-200<004300500050004C004E00420053004C0054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 293.313 Tm [<02650046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 130.123 293.313 Tm [<005100580050004500480055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 161.129 293.313 Tm [<004F0046004600450054>-220<004F00500055>-220<00430046>-220<0042004F>-220<004A004F00550046004800460053000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 48.764 269.403 Tm [<004500520052004E005000440055004E00560057005C004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 269.403 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 269.403 Tm [<004500520052004E005000440055004E>-602<005200530057004C>-1<005200510056>]TJ
+/F7 9.96264 Tf 1 0 0 1 197.971 269.403 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 215.683 269.403 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 218.951 269.403 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 252.535 269.403 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 269.403 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 257.448 Tm [<02650046>-220<00540055005A004D0046>-220<00500047>-220<005500490046>-220<004300500050004C004E00420053004C000D>-220<004A000F0046000F>-293<005500490046>-220<005000510055004A0050004F0042004D>-220<0042005300480056004E0046004F0055>-220<004A004F>-220<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 358.53 257.448 Tm [<003F004600550048004400570048004500520052004E005000440055004E>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 432.756 257.448 Tm [<00440050004E004E0042004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 233.538 Tm [<004400510046004B00520055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 233.538 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 233.538 Tm [<0051004400500048>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 233.538 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 233.538 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 233.538 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 233.538 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 214.116 233.538 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 221.582 Tm [<0022>]TJ
+1.02 0 0 1 119.514 221.582 Tm [<004F>-226<0042004F004400490050>]TJ
+1.03 0 0 1 152.538 221.582 Tm [<0053>-224<0055>]TJ
+1.02 0 0 1 162.365 221.582 Tm [<0050>-226<004F0042>]TJ
+1.03 0 0 1 180.086 221.582 Tm [<0057004A>]TJ
+1.02 0 0 1 187.669 221.582 Tm [<00480042>]TJ
+1.03 0 0 1 197.018 221.582 Tm [<0055>]TJ
+1.02 0 0 1 200.692 221.582 Tm [<0046>]TJ
+1.03 0 0 1 207.519 221.582 Tm [<0055>]TJ
+1.02 0 0 1 211.193 221.582 Tm [<0050>]TJ
+1.03 0 0 1 218.63 221.582 Tm [<0055>]TJ
+1.02 0 0 1 222.303 221.582 Tm [<00490046>-226<0054>]TJ
+1.03 0 0 1 238.744 221.582 Tm [<004D004A>]TJ
+1.02 0 0 1 244.1 221.582 Tm [<00450046>-226<0058>]TJ
+1.03 0 0 1 263.132 221.582 Tm [<004A0055>]TJ
+1.02 0 0 1 269.535 221.582 Tm [<0049>-226<0042>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 284.297 221.582 Tm [<003F>]TJ
+1.02 0 0 1 289.244 221.582 Tm [<004A0052>]TJ
+1.03 0 0 1 299.041 221.582 Tm [<0057>]TJ
+1.02 0 0 1 303.987 221.582 Tm [<0052>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 311.191 221.582 Tm [<00440050004E004E0042004F0045>]TJ
+1.03 0 0 1 352.499 221.582 Tm [<000F>-317<0265004A>]TJ
+1.02 0 0 1 371.42 221.582 Tm [<0054>]TJ
+1.03 0 0 1 377.801 221.582 Tm [<0055>]TJ
+1.02 0 0 1 381.474 221.582 Tm [<00490046>-226<00500051>]TJ
+1.03 0 0 1 404.276 221.582 Tm [<0055004A>]TJ
+1.02 0 0 1 410.679 221.582 Tm [<0050004F0042>]TJ
+1.03 0 0 1 426.095 221.582 Tm [<004D>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 431.027 221.582 Tm [<001F>]TJ
+1.02 0 0 1 435.973 221.582 Tm [<004400510046004B0052>]TJ
+1.03 0 0 1 460.465 221.582 Tm [<00550021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 473.49 221.582 Tm [<004A>]TJ
+1.02 0 0 1 476.219 221.582 Tm [<004F>]TJ
+/F63 7.97011 Tf 0.97 0 0 1 491.852 221.134 Tm [<003A>]TJ
+0.98 0 0 1 495.973 221.134 Tm [<00500056>-199<00440042004F>-199<00420044>]TJ
+0.97 0 0 1 523.124 221.134 Tm [<0055>]TJ
+0.98 0 0 1 525.791 221.134 Tm [<00560042>]TJ
+0.97 0 0 1 533.195 221.134 Tm [<004D004D005A>]TJ
+0.98 0 0 1 541.925 221.134 Tm [<0054005100460044>]TJ
+0.97 0 0 1 554.429 221.134 Tm [<004A0047005A>-201<0055>]TJ
+0.98 0 0 1 566.336 221.134 Tm [<00490046>]TJ
+/F105 7.97011 Tf 0.985 0 0 1 491.852 212.168 Tm [<0042004F004400490050>]TJ
+0.98 0 0 1 511.204 212.168 Tm [<0053>]TJ
+/F63 7.97011 Tf 0.98 0 0 1 515.727 212.168 Tm [<0047>]TJ
+0.985 0 0 1 518.172 212.168 Tm [<0050>]TJ
+0.98 0 0 1 521.618 212.168 Tm [<0053>]TJ
+0.985 0 0 1 526.055 212.168 Tm [<00540046>]TJ
+0.98 0 0 1 532.092 212.168 Tm [<0057>]TJ
+0.985 0 0 1 535.592 212.168 Tm [<0046>]TJ
+0.98 0 0 1 538.763 212.168 Tm [<0053>]TJ
+0.985 0 0 1 541.606 212.168 Tm [<0042>]TJ
+0.98 0 0 1 545.225 212.168 Tm [<004D>]TJ
+0.985 0 0 1 548.764 212.168 Tm [<0054>]TJ
+0.98 0 0 1 551.63 212.168 Tm [<004D004A>]TJ
+0.985 0 0 1 555.535 212.168 Tm [<004500460054>-203<0042>]TJ
+0.98 0 0 1 570.538 212.168 Tm [<0055>]TJ
+1 0 0 1 491.852 203.201 Tm [<0050004F00440046000D>-200<0051005300500057004A004500460045>-200<005500490046>-200<00570042004D00560046>-200<004A0054>]TJ
+1 0 0 1 491.852 194.235 Tm [<0042>-200<00440050004E004E0042004F0045>-200<0055004900420055>-200<00490050004D00450054>-200<0042>]TJ
+1 0 0 1 491.852 185.269 Tm [<005700420053004A00420043004D0046>-200<004400490042004F0048004A004F0048>-200<0058004A00550049>]TJ
+1 0 0 1 491.852 176.302 Tm [<0054004D004A004500460054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 113.386 209.627 Tm [<003F004600550048004400570048004500520052004E005000440055004E>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 186.141 209.627 Tm [<000F>-288<0034004A004F00440046>-214<005500580050>-213<0042004F00440049005000530054>-213<00440042004F00080055>-213<0049004200570046>-213<005500490046>-213<00540042004E0046>-214<004F0042004E0046000D>-214<00550049004A0054>-213<0042005500550053004A0043005600550046>-213<00440042004F>-213<00430046>-213<0056005400460045>]TJ
+1 0 0 1 113.386 197.672 Tm [<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 133.999 197.672 Tm [<003F0056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 165.004 197.672 Tm [<0050004F004D005A000D>-220<004F00500055>-220<004A004F>-220<005500490046>]TJ
+/F111 7.97011 Tf 1 0 0 1 229.751 197.672 Tm [<003F005600480057005300440055004400500048005700480055>]TJ
+/F105 9.96264 Tf 1 0 0 1 294.373 197.672 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 311.838 197.672 Tm [<003F0056004800570056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 357.25 197.672 Tm [<004500460044004D0042005300420055004A0050004F0054000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 161.807 Tm [<0025004A004E0046004F0054004A0050004F0054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 137.896 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 137.896 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 137.896 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 137.896 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 137.896 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 137.896 Tm [<0014001800460050>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 137.896 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 125.941 Tm [<02650046>-220<0058004A004500550049>-220<00500047>-220<005500490046>-220<0054004D004A00450046000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01F0>]TJ
+ET
+endstream
+endobj
+41 0 obj <<
+/Type /Page
+/Contents 42 0 R
+/Resources 40 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 53 0 R
+/Annots [ 39 0 R ]
+>> endobj
+39 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 302.868 565.161 310.399]
+/A << /S /GoTo /D (ptx@section_link:13) >>
+>> endobj
+43 0 obj <<
+/D [41 0 R /XYZ 113.386 651.969 null]
+>> endobj
+44 0 obj <<
+/D [41 0 R /XYZ 113.386 565.841 null]
+>> endobj
+45 0 obj <<
+/D [41 0 R /XYZ 113.386 483.112 null]
+>> endobj
+47 0 obj <<
+/D [41 0 R /XYZ 113.386 362.604 null]
+>> endobj
+48 0 obj <<
+/D [41 0 R /XYZ 113.386 327.695 null]
+>> endobj
+49 0 obj <<
+/D [41 0 R /XYZ 113.386 278.917 null]
+>> endobj
+50 0 obj <<
+/D [41 0 R /XYZ 113.386 243.052 null]
+>> endobj
+51 0 obj <<
+/D [41 0 R /XYZ 113.386 171.321 null]
+>> endobj
+52 0 obj <<
+/D [41 0 R /XYZ 113.386 149.732 null]
+>> endobj
+40 0 obj <<
+/Font << /F90 14 0 R /F105 5 0 R /F111 6 0 R /F117 23 0 R /F63 7 0 R /F7 46 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+57 0 obj <<
+/Length 33242
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 82.38 640.013 Tm [<004B0048004C004A004B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 640.013 Tm [<0014001500460050>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<02650046>-220<00490046004A004800490055>-220<00500047>-220<005500490046>-220<0054004D004A00450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 604.148 Tm [<004B0056004C005D0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 604.148 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 604.148 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 604.148 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 604.148 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 604.148 Tm [<0056004F004C0047004800B70056>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 257.337 604.148 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+1 0 0 1 286.151 604.148 Tm [<0050004C005100580056>-602<0057005A004C00460048>-603<004C00570056>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 362.988 604.148 Tm [<004F004800490057>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1 0 0 1 382.197 604.148 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 592.193 Tm [<02650046>-220<0058004A004500550049>-220<00500047>-220<004D004A004F00460054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 568.282 Tm [<004F004800490057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 568.282 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 568.282 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 568.282 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 568.282 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 568.282 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 568.282 Tm [<001500460050>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 568.282 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 556.327 Tm [<02650046>-220<004D004600470055>-220<004E004200530048004A004F000D>-220<004A000F0046000F>-293<005500490046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<005500490046>-220<0054004D004A0045004600080054>-220<004D004600470055>-220<004300500053004500460053>-220<0042004F0045>-220<005500490046>-220<00550046005900550043004D00500044004C000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 532.417 Tm [<0055004C004A004B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 532.417 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 532.417 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 532.417 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 532.417 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 532.417 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 532.417 Tm [<005800510056005300480046004C0049004C00480047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 532.417 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 520.462 Tm [<0265>]TJ
+0.98 0 0 1 123.195 520.462 Tm [<0046>]TJ
+0.97 0 0 1 129.296 520.462 Tm [<0053004A>]TJ
+0.98 0 0 1 135.49 520.462 Tm [<00480049>]TJ
+0.97 0 0 1 145.361 520.462 Tm [<0055>]TJ
+0.98 0 0 1 150.577 520.462 Tm [<004E0042>]TJ
+0.97 0 0 1 162.937 520.462 Tm [<0053>]TJ
+0.98 0 0 1 166.561 520.462 Tm [<0048>]TJ
+0.97 0 0 1 171.111 520.462 Tm [<004A>]TJ
+0.98 0 0 1 173.681 520.462 Tm [<004F>]TJ
+0.97 0 0 1 179.129 520.462 Tm [<000D>-190<004A000F>]TJ
+0.98 0 0 1 188.279 520.462 Tm [<0046>]TJ
+0.97 0 0 1 192.623 520.462 Tm [<000F>-287<0055>]TJ
+0.98 0 0 1 201.228 520.462 Tm [<00490046>-179<0045>]TJ
+0.97 0 0 1 217.737 520.462 Tm [<004A>]TJ
+0.98 0 0 1 220.307 520.462 Tm [<0054>]TJ
+0.97 0 0 1 224.222 520.462 Tm [<0055>]TJ
+0.98 0 0 1 227.682 520.462 Tm [<0042004F00440046>-179<00430046>]TJ
+0.97 0 0 1 256.912 520.462 Tm [<0055>]TJ
+0.98 0 0 1 260.372 520.462 Tm [<005800460046004F>]TJ
+0.97 0 0 1 282.905 520.462 Tm [<0055>]TJ
+0.98 0 0 1 286.365 520.462 Tm [<00490046>]TJ
+0.97 0 0 1 297.787 520.462 Tm [<0055>]TJ
+0.98 0 0 1 301.246 520.462 Tm [<0046>]TJ
+0.97 0 0 1 305.591 520.462 Tm [<00590055>]TJ
+0.98 0 0 1 313.631 520.462 Tm [<0043>]TJ
+0.97 0 0 1 318.601 520.462 Tm [<004D>]TJ
+0.98 0 0 1 321.075 520.462 Tm [<00500044004C>-179<0042004F0045>]TJ
+0.97 0 0 1 353.292 520.462 Tm [<0055>]TJ
+0.98 0 0 1 356.751 520.462 Tm [<00490046>-179<0054>]TJ
+0.97 0 0 1 372.089 520.462 Tm [<004D004A>]TJ
+0.98 0 0 1 377.133 520.462 Tm [<00450046>]TJ
+0.97 0 0 1 386.565 520.462 Tm [<0008>]TJ
+0.98 0 0 1 388.517 520.462 Tm [<0054>]TJ
+0.97 0 0 1 394.188 520.462 Tm [<004D>]TJ
+0.98 0 0 1 396.662 520.462 Tm [<0046>]TJ
+0.97 0 0 1 401.007 520.462 Tm [<00470055>]TJ
+0.98 0 0 1 409.45 520.462 Tm [<00430050>]TJ
+0.97 0 0 1 419.35 520.462 Tm [<0053>]TJ
+0.98 0 0 1 422.974 520.462 Tm [<00450046>]TJ
+0.97 0 0 1 432.406 520.462 Tm [<0053000F>-287<002A0047>]TJ
+0.98 0 0 1 449.29 520.462 Tm [<0051>]TJ
+0.97 0 0 1 454.386 520.462 Tm [<0053>]TJ
+0.98 0 0 1 458.01 520.462 Tm [<004600540046004F>]TJ
+0.97 0 0 1 476.063 520.462 Tm [<0055000D>]TJ
+0.985 0 0 1 113.386 508.506 Tm [<0055>]TJ
+0.99 0 0 1 116.899 508.506 Tm [<0049>]TJ
+0.985 0 0 1 122.274 508.506 Tm [<004A>]TJ
+0.99 0 0 1 124.885 508.506 Tm [<0054>-222<00510042>]TJ
+0.985 0 0 1 140.665 508.506 Tm [<0053>]TJ
+0.99 0 0 1 144.345 508.506 Tm [<0042004E0046>]TJ
+0.985 0 0 1 161.22 508.506 Tm [<0055>]TJ
+0.99 0 0 1 164.733 508.506 Tm [<0046>]TJ
+0.985 0 0 1 169.123 508.506 Tm [<0053>-224<004A>]TJ
+0.99 0 0 1 177.612 508.506 Tm [<0054>-222<0042>]TJ
+0.985 0 0 1 188.243 508.506 Tm [<004D>]TJ
+0.99 0 0 1 190.755 508.506 Tm [<00580042>]TJ
+0.985 0 0 1 201.94 508.506 Tm [<005A>]TJ
+0.99 0 0 1 206.474 508.506 Tm [<0054>-222<005000430046>]TJ
+0.985 0 0 1 227.018 508.506 Tm [<005A>]TJ
+0.99 0 0 1 231.552 508.506 Tm [<00460045>]TJ
+0.985 0 0 1 241.079 508.506 Tm [<000D>-224<004A>]TJ
+0.99 0 0 1 248.294 508.506 Tm [<004F>]TJ
+0.985 0 0 1 255.997 508.506 Tm [<0055>]TJ
+0.99 0 0 1 259.51 508.506 Tm [<00490046>]TJ
+0.985 0 0 1 271.473 508.506 Tm [<0047>]TJ
+0.99 0 0 1 274.751 508.506 Tm [<0050>]TJ
+0.985 0 0 1 279.732 508.506 Tm [<004D004D>]TJ
+0.99 0 0 1 284.756 508.506 Tm [<00500058>]TJ
+0.985 0 0 1 296.444 508.506 Tm [<004A>]TJ
+0.99 0 0 1 299.054 508.506 Tm [<004F0048>-222<00580042>]TJ
+0.985 0 0 1 322.537 508.506 Tm [<005A001B>-299<004A0047>]TJ
+0.99 0 0 1 340.498 508.506 Tm [<004F0046>]TJ
+0.985 0 0 1 350.391 508.506 Tm [<004A0055>]TJ
+0.99 0 0 1 356.514 508.506 Tm [<00490046>]TJ
+0.985 0 0 1 366.279 508.506 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 372.157 508.506 Tm [<004F>]TJ
+0.99 0 0 1 376.888 508.506 Tm [<0048>]TJ
+0.985 0 0 1 381.642 508.506 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 393.301 508.506 Tm [<004F0050>]TJ
+0.985 0 0 1 403.786 508.506 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 409.665 508.506 Tm [<004B0056>]TJ
+0.985 0 0 1 419.173 508.506 Tm [<004C>]TJ
+0.99 0 0 1 423.903 508.506 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 435.611 508.506 Tm [<004A>]TJ
+0.99 0 0 1 438.221 508.506 Tm [<0054>-222<0054005100460044>]TJ
+0.985 0 0 1 461.842 508.506 Tm [<004A00EB>]TJ
+0.99 0 0 1 469.958 508.506 Tm [<00460045>]TJ
+0.985 0 0 1 479.486 508.506 Tm [<000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 113.386 496.551 Tm [<004F>]TJ
+1.015 0 0 1 118.284 496.551 Tm [<0048>]TJ
+1.02 0 0 1 123.159 496.551 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 135.111 496.551 Tm [<004A>]TJ
+1.015 0 0 1 137.814 496.551 Tm [<0054>-213<00540046>]TJ
+1.02 0 0 1 152.579 496.551 Tm [<0055>-212<0055>]TJ
+1.015 0 0 1 162.011 496.551 Tm [<0050>]TJ
+1.02 0 0 1 169.273 496.551 Tm [<0055>]TJ
+1.015 0 0 1 172.911 496.551 Tm [<00490046>]TJ
+1.02 0 0 1 185.077 496.551 Tm [<0057>]TJ
+1.015 0 0 1 189.884 496.551 Tm [<0042>]TJ
+1.02 0 0 1 194.475 496.551 Tm [<004D>]TJ
+1.015 0 0 1 197.076 496.551 Tm [<00560046>-213<0050>]TJ
+1.02 0 0 1 214.177 496.551 Tm [<0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 219.727 496.551 Tm [<0055004C>]TJ
+1.015 0 0 1 229.523 496.551 Tm [<004A004B>]TJ
+1.02 0 0 1 239.272 496.551 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 246.326 496.551 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.015 0 0 1 263.983 496.551 Tm [<004B0056>]TJ
+1.02 0 0 1 273.732 496.551 Tm [<004C>]TJ
+1.015 0 0 1 278.63 496.551 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 290.535 496.551 Tm [<004A>]TJ
+1.015 0 0 1 293.238 496.551 Tm [<0054>-213<00440050004E00510056>]TJ
+1.02 0 0 1 327.459 496.551 Tm [<0055>]TJ
+1.015 0 0 1 331.097 496.551 Tm [<00460045>-213<0042004400440050>]TJ
+1.02 0 0 1 360.868 496.551 Tm [<0053>]TJ
+1.015 0 0 1 364.679 496.551 Tm [<0045>]TJ
+1.02 0 0 1 369.947 496.551 Tm [<004A>]TJ
+1.015 0 0 1 372.65 496.551 Tm [<004F0048>]TJ
+1.02 0 0 1 383.005 496.551 Tm [<004D005A001C>-213<004A0047>]TJ
+1.015 0 0 1 403.211 496.551 Tm [<0050004F0046>]TJ
+1.02 0 0 1 420.616 496.551 Tm [<004A>]TJ
+1.015 0 0 1 423.319 496.551 Tm [<0054>-213<0054005100460044>]TJ
+1.02 0 0 1 447.438 496.551 Tm [<004A00EB>]TJ
+1.015 0 0 1 455.842 496.551 Tm [<00460045>-213<00430056>]TJ
+1.02 0 0 1 478.252 496.551 Tm [<0055>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 496.103 Tm [<026500560054000D>-200<00550050>-200<00440046004F005500460053>-200<005500490046>]TJ
+1 0 0 1 491.852 487.137 Tm [<00550046005900550043004D00500044004C>-200<0050004F>-200<005500490046>-200<0054004D004A00450046000D>]TJ
+1 0 0 1 491.852 478.17 Tm [<0054005100460044004A0047005A>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 525.638 478.17 Tm [<0053004A004800490055>]TJ
+/F63 7.97011 Tf 1 0 0 1 543.252 478.17 Tm [<0042005500550053004A0043005600550046>]TJ
+1 0 0 1 491.852 469.204 Tm [<0050004F004D005A000F>-266<02650046>-200<00540042004E0046>-200<00490050004D00450054>-200<004700500053>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 460.238 Tm [<00430050005500550050004E>]TJ
+/F63 7.97011 Tf 1 0 0 1 517.731 460.238 Tm [<00550050>-200<00440046004F005500460053>]TJ
+1 0 0 1 491.852 451.271 Tm [<0057004600530055004A00440042004D004D005A000D>-200<0042004F0045>-200<004700500053>-200<00420053004600420054>-200<004A0055>]TJ
+1 0 0 1 491.852 442.305 Tm [<004A0054>-200<0042004D00540050>-200<0055005300560046>-200<00500047>]TJ
+/F105 7.97011 Tf 1 0 0 1 533.951 442.305 Tm [<0053004A004800490055>]TJ
+/F63 7.97011 Tf 1 0 0 1 549.97 442.305 Tm [<000D>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 433.338 Tm [<00430050005500550050004E>]TJ
+/F63 7.97011 Tf 1 0 0 1 516.137 433.338 Tm [<000D>]TJ
+/F105 7.97011 Tf 1 0 0 1 519.676 433.338 Tm [<004900540049004A00470055000B>]TJ
+/F63 7.97011 Tf 1 0 0 1 543.634 433.338 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 424.372 Tm [<005700540049004A00470055000B>]TJ
+/F63 7.97011 Tf 1 0 0 1 513.643 424.372 Tm [<000F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 484.596 Tm [<004F0050>]TJ
+0.97 0 0 1 123.764 484.596 Tm [<0055>-225<0055>]TJ
+0.98 0 0 1 132.867 484.596 Tm [<00490046>-223<0050>]TJ
+0.97 0 0 1 149.646 484.596 Tm [<0055>]TJ
+0.98 0 0 1 153.106 484.596 Tm [<00490046>]TJ
+0.97 0 0 1 162.772 484.596 Tm [<0053000D>-226<0055>]TJ
+0.98 0 0 1 174.408 484.596 Tm [<00490046>-223<0056004F0054005100460044>]TJ
+0.97 0 0 1 214.15 484.596 Tm [<004A00EB>]TJ
+0.98 0 0 1 222.142 484.596 Tm [<00460045>-223<0050004F0046>]TJ
+0.97 0 0 1 250.663 484.596 Tm [<004A>]TJ
+0.98 0 0 1 253.234 484.596 Tm [<0054>-223<00440050004E00510056>]TJ
+0.97 0 0 1 286.377 484.596 Tm [<0055>]TJ
+0.98 0 0 1 289.836 484.596 Tm [<00460045>-223<0042004400440050>]TJ
+0.97 0 0 1 318.683 484.596 Tm [<0053>]TJ
+0.98 0 0 1 322.307 484.596 Tm [<0045>]TJ
+0.97 0 0 1 327.394 484.596 Tm [<004A>]TJ
+0.98 0 0 1 329.965 484.596 Tm [<004F0048>]TJ
+0.97 0 0 1 342.145 484.596 Tm [<0055>]TJ
+0.98 0 0 1 345.605 484.596 Tm [<0050>]TJ
+0.97 0 0 1 352.719 484.596 Tm [<0055>]TJ
+0.98 0 0 1 356.178 484.596 Tm [<00490046>-223<0054005100460044>]TJ
+0.97 0 0 1 385.318 484.596 Tm [<004A00EB>]TJ
+0.98 0 0 1 393.31 484.596 Tm [<00460045>-223<0050004F0046>-224<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 438.982 484.596 Tm [<0055004C>]TJ
+0.98 0 0 1 448.298 484.596 Tm [<004A004B>]TJ
+0.97 0 0 1 457.711 484.596 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 462.369 484.596 Tm [<001C>]TJ
+0.98 0 0 1 466.922 484.596 Tm [<0042004F0045>]TJ
+1 0 0 1 113.386 472.641 Tm [<004A0047>-220<0043005000550049>-220<004200530046>-220<00510053004600540046004F0055000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 193.286 472.641 Tm [<004B0056004C005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 219.489 472.641 Tm [<004A0054>-220<004A0048004F0050005300460045>-220<0042004F0045>-220<005500490046>-220<0051005300460057004A005000560054>-220<00530056004D0046>-220<004200510051004D004A00460054000F>]TJ
+0.98 0 0 1 133.311 460.686 Tm [<003800490042>]TJ
+0.97 0 0 1 151.657 460.686 Tm [<0055>-210<004A>]TJ
+0.98 0 0 1 159.726 460.686 Tm [<0054>]TJ
+0.97 0 0 1 165.679 460.686 Tm [<004A>]TJ
+0.98 0 0 1 168.25 460.686 Tm [<004F00490046>]TJ
+0.97 0 0 1 183.364 460.686 Tm [<0053004A0055>]TJ
+0.98 0 0 1 193.018 460.686 Tm [<00460045>]TJ
+0.97 0 0 1 204.488 460.686 Tm [<00470053>]TJ
+0.98 0 0 1 211.34 460.686 Tm [<0050004E>-208<0048>]TJ
+0.97 0 0 1 230.787 460.686 Tm [<004D>]TJ
+0.98 0 0 1 233.261 460.686 Tm [<005000430042>]TJ
+0.97 0 0 1 247.593 460.686 Tm [<004D>-211<0055>]TJ
+0.98 0 0 1 255.566 460.686 Tm [<0050>]TJ
+0.97 0 0 1 262.535 460.686 Tm [<0055005A>]TJ
+0.98 0 0 1 270.459 460.686 Tm [<00510046>]TJ
+0.97 0 0 1 281.939 460.686 Tm [<0055>]TJ
+0.98 0 0 1 285.399 460.686 Tm [<0050>]TJ
+0.97 0 0 1 292.368 460.686 Tm [<004D>]TJ
+0.98 0 0 1 294.842 460.686 Tm [<005000440042>]TJ
+0.97 0 0 1 308.14 460.686 Tm [<004D>]TJ
+0.98 0 0 1 312.653 460.686 Tm [<00540046>]TJ
+0.97 0 0 1 320.913 460.686 Tm [<00550055004A>]TJ
+0.98 0 0 1 330.402 460.686 Tm [<004F00480054>]TJ
+0.97 0 0 1 346.354 460.686 Tm [<004A>]TJ
+0.98 0 0 1 348.925 460.686 Tm [<0054>]TJ
+0.97 0 0 1 354.879 460.686 Tm [<0055>]TJ
+0.98 0 0 1 358.338 460.686 Tm [<00490046>]TJ
+0.97 0 0 1 370.043 460.686 Tm [<0053>]TJ
+0.98 0 0 1 373.667 460.686 Tm [<004600540056>]TJ
+0.97 0 0 1 387.082 460.686 Tm [<004D0055>]TJ
+0.98 0 0 1 395.054 460.686 Tm [<0050>]TJ
+0.97 0 0 1 399.984 460.686 Tm [<0047>-211<0055>]TJ
+0.98 0 0 1 408.711 460.686 Tm [<0049>]TJ
+0.97 0 0 1 414.032 460.686 Tm [<004A>]TJ
+0.98 0 0 1 416.602 460.686 Tm [<0054>-208<00440042>]TJ
+0.97 0 0 1 430.923 460.686 Tm [<004D>]TJ
+0.98 0 0 1 433.397 460.686 Tm [<00440056>]TJ
+0.97 0 0 1 442.487 460.686 Tm [<004D>]TJ
+0.98 0 0 1 444.961 460.686 Tm [<0042>]TJ
+0.97 0 0 1 449.394 460.686 Tm [<0055004A>]TJ
+0.98 0 0 1 455.424 460.686 Tm [<0050004F>]TJ
+0.97 0 0 1 465.802 460.686 Tm [<000D>-214<004A000F>]TJ
+0.98 0 0 1 475.177 460.686 Tm [<0046>]TJ
+0.97 0 0 1 479.522 460.686 Tm [<000F>]TJ
+0.97 0 0 1 113.386 448.731 Tm [<0057>]TJ
+0.98 0 0 1 117.957 448.731 Tm [<0042>]TJ
+0.97 0 0 1 122.389 448.731 Tm [<004D>]TJ
+0.98 0 0 1 124.863 448.731 Tm [<005600460054>]TJ
+0.97 0 0 1 139.795 448.731 Tm [<0047>]TJ
+0.98 0 0 1 143.023 448.731 Tm [<0050>]TJ
+0.97 0 0 1 147.953 448.731 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 153.094 448.731 Tm [<004F>]TJ
+0.98 0 0 1 157.752 448.731 Tm [<0048>]TJ
+0.97 0 0 1 162.458 448.731 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 173.292 448.731 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 189.776 448.731 Tm [<004B0056>]TJ
+0.97 0 0 1 199.188 448.731 Tm [<004C>]TJ
+0.98 0 0 1 203.846 448.731 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 213.259 448.731 Tm [<000F>-279<002A0047>-157<0055>]TJ
+0.98 0 0 1 229.659 448.731 Tm [<0049004600540046>-155<0042>]TJ
+0.97 0 0 1 253.534 448.731 Tm [<0053>]TJ
+0.98 0 0 1 257.158 448.731 Tm [<0046>-155<004400490042004F004800460045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 297.654 448.731 Tm [<0055004C>]TJ
+0.98 0 0 1 306.97 448.731 Tm [<004A004B>]TJ
+0.97 0 0 1 316.383 448.731 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 322.558 448.731 Tm [<00580050004F>]TJ
+0.97 0 0 1 339.575 448.731 Tm [<00080055>]TJ
+0.98 0 0 1 346.504 448.731 Tm [<00430046>]TJ
+0.97 0 0 1 357.335 448.731 Tm [<0055>]TJ
+0.98 0 0 1 360.795 448.731 Tm [<0042004C0046004F>]TJ
+0.97 0 0 1 381.409 448.731 Tm [<004A>]TJ
+0.98 0 0 1 383.979 448.731 Tm [<004F>]TJ
+0.97 0 0 1 389.427 448.731 Tm [<0055>]TJ
+0.98 0 0 1 392.887 448.731 Tm [<0050>-155<00420044004400500056004F>]TJ
+0.97 0 0 1 427.169 448.731 Tm [<0055000F>]TJ
+0.98 0 0 1 435.694 448.731 Tm [<00240050004F>]TJ
+0.97 0 0 1 451.784 448.731 Tm [<0057>]TJ
+0.98 0 0 1 456.355 448.731 Tm [<0046>]TJ
+0.97 0 0 1 460.7 448.731 Tm [<0053>]TJ
+0.98 0 0 1 464.324 448.731 Tm [<00540046>]TJ
+0.97 0 0 1 472.584 448.731 Tm [<004D005A000D>]TJ
+1.03 0 0 1 113.386 436.775 Tm [<004A0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 121.719 436.775 Tm [<0055004C>]TJ
+1.02 0 0 1 131.612 436.775 Tm [<004A004B>]TJ
+1.03 0 0 1 141.408 436.775 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 148.531 436.775 Tm [<004A>]TJ
+1.02 0 0 1 151.26 436.775 Tm [<0054>-214<0054005100460044>]TJ
+1.03 0 0 1 175.508 436.775 Tm [<004A00EB>]TJ
+1.02 0 0 1 183.994 436.775 Tm [<00460045>]TJ
+1.03 0 0 1 193.811 436.775 Tm [<000D>-212<0055>]TJ
+1.02 0 0 1 202.178 436.775 Tm [<00490046004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 220.084 436.775 Tm [<004F>]TJ
+1.02 0 0 1 225.031 436.775 Tm [<0048>]TJ
+1.03 0 0 1 229.929 436.775 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 241.998 436.775 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 259.752 436.775 Tm [<004B0056>]TJ
+1.03 0 0 1 269.549 436.775 Tm [<004C>]TJ
+1.02 0 0 1 274.495 436.775 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 286.468 436.775 Tm [<0042>]TJ
+1.03 0 0 1 291.082 436.775 Tm [<0053>]TJ
+1.02 0 0 1 294.93 436.775 Tm [<0046004F>]TJ
+1.03 0 0 1 305.122 436.775 Tm [<00080055>-212<004A>]TJ
+1.02 0 0 1 315.774 436.775 Tm [<004F00490046>]TJ
+1.03 0 0 1 331.505 436.775 Tm [<0053004A0055>]TJ
+1.02 0 0 1 341.756 436.775 Tm [<00460045>]TJ
+1.03 0 0 1 351.573 436.775 Tm [<000F>-284<002A0047>-212<0055>]TJ
+1.02 0 0 1 369.606 436.775 Tm [<0049>]TJ
+1.03 0 0 1 375.144 436.775 Tm [<004A>]TJ
+1.02 0 0 1 377.873 436.775 Tm [<004F00480054>-214<00580046>]TJ
+1.03 0 0 1 405.962 436.775 Tm [<0053>]TJ
+1.02 0 0 1 409.81 436.775 Tm [<0046>-214<0050>]TJ
+1.03 0 0 1 421.64 436.775 Tm [<0055>]TJ
+1.02 0 0 1 425.314 436.775 Tm [<00490046>]TJ
+1.03 0 0 1 435.374 436.775 Tm [<0053>]TJ
+1.02 0 0 1 439.222 436.775 Tm [<0058>]TJ
+1.03 0 0 1 446.132 436.775 Tm [<004A>]TJ
+1.02 0 0 1 448.862 436.775 Tm [<00540046>]TJ
+1.03 0 0 1 457.459 436.775 Tm [<000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 462.152 436.775 Tm [<004F>]TJ
+1.02 0 0 1 467.099 436.775 Tm [<0048>]TJ
+1.03 0 0 1 471.997 436.775 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 113.386 424.82 Tm [<005800500056>]TJ
+1.025 0 0 1 130.793 424.82 Tm [<004D>]TJ
+1.02 0 0 1 133.407 424.82 Tm [<0045>-213<0042>]TJ
+1.025 0 0 1 145.484 424.82 Tm [<004D>]TJ
+1.02 0 0 1 148.099 424.82 Tm [<00580042>]TJ
+1.025 0 0 1 159.622 424.82 Tm [<005A>]TJ
+1.02 0 0 1 164.34 424.82 Tm [<0054>-213<00430046>-214<0054005100460044>]TJ
+1.025 0 0 1 200.445 424.82 Tm [<004A00EB>]TJ
+1.02 0 0 1 208.89 424.82 Tm [<00460045>]TJ
+1.025 0 0 1 220.875 424.82 Tm [<0009>]TJ
+1.02 0 0 1 224.225 424.82 Tm [<0054>]TJ
+1.025 0 0 1 228.3 424.82 Tm [<004A>]TJ
+1.02 0 0 1 231.016 424.82 Tm [<004F00440046>]TJ
+1.025 0 0 1 247.473 424.82 Tm [<004A>]TJ
+1.02 0 0 1 250.189 424.82 Tm [<004F00490046>]TJ
+1.025 0 0 1 265.92 424.82 Tm [<0053004A0055>]TJ
+1.02 0 0 1 276.121 424.82 Tm [<00460045>]TJ
+1.025 0 0 1 285.938 424.82 Tm [<000A>]TJ
+1.02 0 0 1 291.457 424.82 Tm [<0042004F0045>]TJ
+1.025 0 0 1 309.204 424.82 Tm [<004A00550008>]TJ
+1.02 0 0 1 317.639 424.82 Tm [<0045>-213<00430046>]TJ
+1.025 0 0 1 336.966 424.82 Tm [<004A>]TJ
+1.02 0 0 1 339.683 424.82 Tm [<004E0051005000540054>]TJ
+1.025 0 0 1 366.52 424.82 Tm [<004A>]TJ
+1.02 0 0 1 369.236 424.82 Tm [<0043>]TJ
+1.025 0 0 1 374.409 424.82 Tm [<004D>]TJ
+1.02 0 0 1 377.023 424.82 Tm [<0046>]TJ
+1.025 0 0 1 383.714 424.82 Tm [<0055>]TJ
+1.02 0 0 1 387.37 424.82 Tm [<0050>-213<00440050004E00510056>]TJ
+1.025 0 0 1 422.82 424.82 Tm [<0055>]TJ
+1.02 0 0 1 426.475 424.82 Tm [<0046>]TJ
+1.025 0 0 1 433.167 424.82 Tm [<004A0055>]TJ
+1.02 0 0 1 441.708 424.82 Tm [<0042004400440050>]TJ
+1.025 0 0 1 459.644 424.82 Tm [<0053>]TJ
+1.02 0 0 1 463.473 424.82 Tm [<0045>]TJ
+1.025 0 0 1 468.768 424.82 Tm [<004A>]TJ
+1.02 0 0 1 471.484 424.82 Tm [<004F0048>]TJ
+1.01 0 0 1 113.386 412.865 Tm [<0055>]TJ
+1.005 0 0 1 116.988 412.865 Tm [<0050>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 124.227 412.865 Tm [<0055004C>]TJ
+1.005 0 0 1 133.928 412.865 Tm [<004A004B>]TJ
+1.01 0 0 1 143.58 412.865 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 150.613 412.865 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 168.145 412.865 Tm [<004B0056>]TJ
+1.01 0 0 1 177.797 412.865 Tm [<004C>]TJ
+1.005 0 0 1 182.648 412.865 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 192.3 412.865 Tm [<000D>]TJ
+1.005 0 0 1 196.95 412.865 Tm [<0054>]TJ
+1.01 0 0 1 200.965 412.865 Tm [<004A>]TJ
+1.005 0 0 1 203.641 412.865 Tm [<004F00440046>]TJ
+1.01 0 0 1 219.901 412.865 Tm [<004A0055>]TJ
+1.005 0 0 1 228.363 412.865 Tm [<0042>]TJ
+1.01 0 0 1 232.908 412.865 Tm [<004D>]TJ
+1.005 0 0 1 235.484 412.865 Tm [<00580042>]TJ
+1.01 0 0 1 246.838 412.865 Tm [<005A>]TJ
+1.005 0 0 1 251.487 412.865 Tm [<0054>-218<0058>]TJ
+1.01 0 0 1 264.493 412.865 Tm [<004A>]TJ
+1.005 0 0 1 267.17 412.865 Tm [<004F0054>-217<004200480042>]TJ
+1.01 0 0 1 292.711 412.865 Tm [<004A>]TJ
+1.005 0 0 1 295.388 412.865 Tm [<004F0054>]TJ
+1.01 0 0 1 304.99 412.865 Tm [<0055>-216<0055>]TJ
+1.005 0 0 1 314.377 412.865 Tm [<00490046>]TJ
+1.01 0 0 1 326.471 412.865 Tm [<004D>]TJ
+1.005 0 0 1 329.047 412.865 Tm [<0042>]TJ
+1.01 0 0 1 333.593 412.865 Tm [<00550055>]TJ
+1.005 0 0 1 340.798 412.865 Tm [<0046>]TJ
+1.01 0 0 1 345.253 412.865 Tm [<0053000F>-290<0265>]TJ
+1.005 0 0 1 364.624 412.865 Tm [<00560054>]TJ
+1.01 0 0 1 373.926 412.865 Tm [<000D>]TJ
+1.005 0 0 1 378.575 412.865 Tm [<0042005400540056004E>]TJ
+1.01 0 0 1 404.568 412.865 Tm [<004A>]TJ
+1.005 0 0 1 407.244 412.865 Tm [<004F0048>-218<0042>-218<0054>]TJ
+1.01 0 0 1 430.423 412.865 Tm [<004D004A>]TJ
+1.005 0 0 1 435.675 412.865 Tm [<00450046>-218<0058>]TJ
+1.01 0 0 1 454.338 412.865 Tm [<004A>]TJ
+1.005 0 0 1 457.015 412.865 Tm [<0045>]TJ
+1.01 0 0 1 462.231 412.865 Tm [<0055>]TJ
+1.005 0 0 1 465.833 412.865 Tm [<0049>-218<0050>]TJ
+1.01 0 0 1 478.529 412.865 Tm [<0047>]TJ
+1 0 0 1 113.386 400.91 Tm [<01EA01E90044004E000D>-220<0058004A00550049>-220<005500490046>-220<00470050004D004D00500058004A004F0048001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 377 Tm [<003F00560048005700530044005500440050004800570048005500030056004F004C00470048001D>]TJ
+1 0 0 1 113.386 365.044 Tm [<00030003004F0048004900570003000300200003001500460050>]TJ
+1 0 0 1 113.386 353.089 Tm [<000300030055004C004A004B0057000300200003001400460050>]TJ
+1 0 0 1 113.386 329.179 Tm [<003F0056004800570056004F004C00470048005E0056004F004C0047004800240060>]TJ
+1 0 0 1 113.386 317.224 Tm [<00030003004F0048004900570003000300200003001400460050>]TJ
+1 0 0 1 113.386 293.313 Tm [<003F0056004800570056004F004C00470048005E0056004F004C0047004800250060>]TJ
+1 0 0 1 113.386 281.358 Tm [<000300030055004C004A004B0057000300200003001500460050>]TJ
+1 0 0 1 113.386 269.403 Tm [<00030003004B0056004C005D0048000300200003001800460050>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 245.493 Tm [<00580046>-251<00490042>]TJ
+1.03 0 0 1 137.53 245.493 Tm [<0057>]TJ
+1.02 0 0 1 142.383 245.493 Tm [<0046>-251<0042>-252<00450046>]TJ
+1.03 0 0 1 166.455 245.493 Tm [<0047>]TJ
+1.02 0 0 1 169.882 245.493 Tm [<00420056>]TJ
+1.03 0 0 1 179.861 245.493 Tm [<004D0055>]TJ
+1.02 0 0 1 188.722 245.493 Tm [<0054>]TJ
+1.03 0 0 1 192.797 245.493 Tm [<004D004A>]TJ
+1.02 0 0 1 198.153 245.493 Tm [<00450046>-251<0058>]TJ
+1.03 0 0 1 217.44 245.493 Tm [<004A0055>]TJ
+1.02 0 0 1 223.843 245.493 Tm [<0049>-251<0042>]TJ
+1.03 0 0 1 239.114 245.493 Tm [<004D>]TJ
+1.02 0 0 1 241.741 245.493 Tm [<0046>]TJ
+1.03 0 0 1 246.263 245.493 Tm [<00470055>]TJ
+1.02 0 0 1 255.924 245.493 Tm [<004E0042>]TJ
+1.03 0 0 1 268.789 245.493 Tm [<0053>]TJ
+1.02 0 0 1 272.637 245.493 Tm [<0048>]TJ
+1.03 0 0 1 277.373 245.493 Tm [<004A>]TJ
+1.02 0 0 1 280.102 245.493 Tm [<004F>]TJ
+1.03 0 0 1 288.332 245.493 Tm [<01EB>]TJ
+1.02 0 0 1 293.75 245.493 Tm [<0044004E>-252<0058>]TJ
+1.03 0 0 1 315.567 245.493 Tm [<004A>]TJ
+1.02 0 0 1 318.297 245.493 Tm [<00450046>]TJ
+1.03 0 0 1 328.113 245.493 Tm [<000D>-258<0053004A>]TJ
+1.02 0 0 1 339.857 245.493 Tm [<00480049>]TJ
+1.03 0 0 1 350.13 245.493 Tm [<0055>]TJ
+1.02 0 0 1 356.364 245.493 Tm [<004E0042>]TJ
+1.03 0 0 1 369.229 245.493 Tm [<0053>]TJ
+1.02 0 0 1 373.077 245.493 Tm [<0048>]TJ
+1.03 0 0 1 377.812 245.493 Tm [<004A>]TJ
+1.02 0 0 1 380.542 245.493 Tm [<004F>]TJ
+1.03 0 0 1 388.772 245.493 Tm [<01EA>]TJ
+1.02 0 0 1 394.19 245.493 Tm [<0044004E>]TJ
+1.03 0 0 1 406.537 245.493 Tm [<000D>]TJ
+1.02 0 0 1 411.703 245.493 Tm [<0042004F0045>-251<0042>]TJ
+1.03 0 0 1 437.014 245.493 Tm [<004D004A>]TJ
+1.02 0 0 1 442.371 245.493 Tm [<004F0046>]TJ
+1.03 0 0 1 455.123 245.493 Tm [<004D>]TJ
+1.02 0 0 1 457.75 245.493 Tm [<0046004F0048>]TJ
+1.03 0 0 1 472.678 245.493 Tm [<0055>]TJ
+1.02 0 0 1 476.352 245.493 Tm [<0049>]TJ
+1.01 0 0 1 113.386 233.538 Tm [<0050>]TJ
+1.015 0 0 1 118.467 233.538 Tm [<0047>-216<01F0>]TJ
+1.01 0 0 1 129.375 233.538 Tm [<0044004E>]TJ
+1.015 0 0 1 141.601 233.538 Tm [<000F>]TJ
+1.01 0 0 1 147 233.538 Tm [<00270050>]TJ
+1.015 0 0 1 157.425 233.538 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 163.408 233.538 Tm [<0056>]TJ
+1.015 0 0 1 168.258 233.538 Tm [<004F004C>]TJ
+1.01 0 0 1 178.007 233.538 Tm [<00470048>]TJ
+1.005 0 0 1 187.707 233.538 Tm [<0024>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 194.725 233.538 Tm [<004F0050>]TJ
+1.015 0 0 1 205.421 233.538 Tm [<0055>]TJ
+1.01 0 0 1 209.041 233.538 Tm [<0049>]TJ
+1.015 0 0 1 214.525 233.538 Tm [<004A>]TJ
+1.01 0 0 1 217.215 233.538 Tm [<004F0048>]TJ
+1.015 0 0 1 229.71 233.538 Tm [<004A>]TJ
+1.01 0 0 1 232.4 233.538 Tm [<0054>]TJ
+1.015 0 0 1 238.626 233.538 Tm [<0053>]TJ
+1.01 0 0 1 242.418 233.538 Tm [<004600440050004E00510056>]TJ
+1.015 0 0 1 274.768 233.538 Tm [<0055>]TJ
+1.01 0 0 1 278.388 233.538 Tm [<00460045>]TJ
+1.015 0 0 1 288.108 233.538 Tm [<000D>-216<0055>]TJ
+1.01 0 0 1 296.397 233.538 Tm [<004900560054>]TJ
+1.015 0 0 1 313.42 233.538 Tm [<0055>]TJ
+1.01 0 0 1 317.04 233.538 Tm [<00490046>]TJ
+1.015 0 0 1 329.193 233.538 Tm [<004D>]TJ
+1.01 0 0 1 331.781 233.538 Tm [<0046>]TJ
+1.015 0 0 1 336.259 233.538 Tm [<00470055>]TJ
+1.01 0 0 1 345.448 233.538 Tm [<004E0042>]TJ
+1.015 0 0 1 358.186 233.538 Tm [<0053>]TJ
+1.01 0 0 1 361.978 233.538 Tm [<0048>]TJ
+1.015 0 0 1 366.667 233.538 Tm [<004A>]TJ
+1.01 0 0 1 369.357 233.538 Tm [<004F>]TJ
+1.015 0 0 1 377.163 233.538 Tm [<004A>]TJ
+1.01 0 0 1 379.853 233.538 Tm [<0054>]TJ
+1.015 0 0 1 386.079 233.538 Tm [<01EA>]TJ
+1.01 0 0 1 391.418 233.538 Tm [<0044004E>-217<00430056>]TJ
+1.015 0 0 1 416.269 233.538 Tm [<0055>-216<0055>]TJ
+1.01 0 0 1 425.701 233.538 Tm [<00490046>]TJ
+1.015 0 0 1 437.853 233.538 Tm [<004D004A>]TJ
+1.01 0 0 1 443.132 233.538 Tm [<004F0046>]TJ
+1.015 0 0 1 455.416 233.538 Tm [<004D>]TJ
+1.01 0 0 1 458.004 233.538 Tm [<0046004F0048>]TJ
+1.015 0 0 1 472.786 233.538 Tm [<0055>]TJ
+1.01 0 0 1 476.406 233.538 Tm [<0049>]TJ
+1.03 0 0 1 113.386 221.582 Tm [<004A>]TJ
+1.02 0 0 1 116.115 221.582 Tm [<0054>-246<0054>]TJ
+1.03 0 0 1 126.764 221.582 Tm [<0055004A004D004D>-243<01F0>]TJ
+1.02 0 0 1 146.339 221.582 Tm [<0044004E>]TJ
+1.03 0 0 1 158.685 221.582 Tm [<000D>]TJ
+1.02 0 0 1 163.775 221.582 Tm [<00580049>]TJ
+1.03 0 0 1 176.224 221.582 Tm [<004A>]TJ
+1.02 0 0 1 178.953 221.582 Tm [<00440049>-246<0048>]TJ
+1.03 0 0 1 195.821 221.582 Tm [<004A0057>]TJ
+1.02 0 0 1 203.405 221.582 Tm [<00460054>-245<0042>]TJ
+1.03 0 0 1 221.613 221.582 Tm [<0053004A>]TJ
+1.02 0 0 1 228.191 221.582 Tm [<00480049>]TJ
+1.03 0 0 1 238.465 221.582 Tm [<0055>]TJ
+1.02 0 0 1 244.637 221.582 Tm [<004E0042>]TJ
+1.03 0 0 1 257.502 221.582 Tm [<0053>]TJ
+1.02 0 0 1 261.35 221.582 Tm [<0048>]TJ
+1.03 0 0 1 266.086 221.582 Tm [<004A>]TJ
+1.02 0 0 1 268.815 221.582 Tm [<004F>-246<0050>]TJ
+1.03 0 0 1 282.117 221.582 Tm [<0047>-243<01EB>]TJ
+1.02 0 0 1 293.461 221.582 Tm [<0044004E>]TJ
+1.03 0 0 1 305.808 221.582 Tm [<000F>]TJ
+1.015 0 0 1 312.166 221.582 Tm [<0022>]TJ
+1.02 0 0 1 318.294 221.582 Tm [<004F0045>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 331.758 221.582 Tm [<0056>]TJ
+1.03 0 0 1 336.656 221.582 Tm [<004F004C>]TJ
+1.02 0 0 1 346.549 221.582 Tm [<004700480025>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 363.743 221.582 Tm [<004900420054>-245<0042>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 387.581 221.582 Tm [<0055004C>]TJ
+1.02 0 0 1 397.474 221.582 Tm [<004A004B>]TJ
+1.03 0 0 1 407.271 221.582 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 414.716 221.582 Tm [<0042>]TJ
+1.03 0 0 1 419.33 221.582 Tm [<005500550053004A>]TJ
+1.02 0 0 1 433.255 221.582 Tm [<00430056>]TJ
+1.03 0 0 1 443.793 221.582 Tm [<0055>]TJ
+1.02 0 0 1 447.466 221.582 Tm [<0046>]TJ
+1.03 0 0 1 451.988 221.582 Tm [<000D>]TJ
+1.02 0 0 1 457.078 221.582 Tm [<00580049>]TJ
+1.03 0 0 1 469.527 221.582 Tm [<004A>]TJ
+1.02 0 0 1 472.256 221.582 Tm [<00440049>]TJ
+0.97 0 0 1 113.386 209.627 Tm [<00550053004A>]TJ
+0.98 0 0 1 123.04 209.627 Tm [<004800480046>]TJ
+0.97 0 0 1 136.484 209.627 Tm [<0053>]TJ
+0.98 0 0 1 140.108 209.627 Tm [<0054>-178<0042>-179<00440050004E00510056>]TJ
+0.97 0 0 1 178.986 209.627 Tm [<0055>]TJ
+0.98 0 0 1 182.445 209.627 Tm [<0042>]TJ
+0.97 0 0 1 186.878 209.627 Tm [<0055004A>]TJ
+0.98 0 0 1 192.908 209.627 Tm [<0050004F>]TJ
+0.97 0 0 1 203.286 209.627 Tm [<001C>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 207.546 209.627 Tm [<004F>]TJ
+0.98 0 0 1 212.205 209.627 Tm [<0048>]TJ
+0.97 0 0 1 216.911 209.627 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 227.97 209.627 Tm [<004A>]TJ
+0.98 0 0 1 230.541 209.627 Tm [<0054004F>]TJ
+0.97 0 0 1 239.904 209.627 Tm [<00080055>-180<004A>]TJ
+0.98 0 0 1 249.629 209.627 Tm [<004F00490046>]TJ
+0.97 0 0 1 264.742 209.627 Tm [<0053004A0055>]TJ
+0.98 0 0 1 274.396 209.627 Tm [<00460045>]TJ
+0.97 0 0 1 283.828 209.627 Tm [<000D>-189<0055>]TJ
+0.98 0 0 1 291.488 209.627 Tm [<004900560054>-178<0050004F>]TJ
+0.97 0 0 1 318 209.627 Tm [<004D005A>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 326.681 209.627 Tm [<004B0056>]TJ
+0.97 0 0 1 336.094 209.627 Tm [<004C>]TJ
+0.98 0 0 1 340.752 209.627 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 351.907 209.627 Tm [<004A>]TJ
+0.98 0 0 1 354.478 209.627 Tm [<0054>-178<0054005100460044>]TJ
+0.97 0 0 1 377.426 209.627 Tm [<004A00EB>]TJ
+0.98 0 0 1 385.418 209.627 Tm [<00460045>-178<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 413.302 209.627 Tm [<004F>]TJ
+0.98 0 0 1 417.96 209.627 Tm [<0048>]TJ
+0.97 0 0 1 422.667 209.627 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 433.726 209.627 Tm [<004A>]TJ
+0.98 0 0 1 436.296 209.627 Tm [<0054>-178<00440050004E00510056>]TJ
+0.97 0 0 1 468.999 209.627 Tm [<0055>]TJ
+0.98 0 0 1 472.458 209.627 Tm [<00460045>]TJ
+1 0 0 1 113.386 197.672 Tm [<004200440044005000530045004A004F0048004D005A>-220<000900550050>-220<01EC0044004E000D>-220<00420054>-220<005A00500056>-220<004E004A004800490055>-220<004A004E00420048004A004F0046000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 173.762 Tm [<00590056004C005D0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 173.762 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 173.762 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 173.762 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 173.762 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 173.762 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 173.762 Tm [<0056004F004C0047004800B70056>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 257.337 173.762 Tm [<004B0048004C004A004B0057>]TJ
+0 g 0 G
+1 0 0 1 290.953 173.762 Tm [<0050004C005100580056>-602<0057005A004C00460048>-603<004C00570056>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 367.79 173.762 Tm [<005700520053>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1 0 0 1 382.197 173.762 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 113.386 161.807 Tm [<02650046>-222<00490046004A004800490055>-223<00500047>-222<005500490046>-223<00550046005900550043004D00500044004C000F>-297<0265004A0054>-223<004A0054004F00080055>-223<004A004E00510050005300550042004F0055>-222<004700500053>-223<0051004200480046>-223<0043005300460042004C0054000D>-222<0054004A004F00440046>-223<004F0050>-223<0051004200480046>-222<0043005300460042004C>-223<005000440044005600530054>]TJ
+1 0 0 1 113.386 149.851 Tm [<004A004F>]TJ
+/F63 9.96264 Tf 1 0 0 1 123.787 149.851 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 156.076 149.851 Tm [<000D>-220<004300560055>-220<004700500053>-220<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 206.706 149.851 Tm [<0059005300520056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 228.107 149.851 Tm [<0042005500550053004A0043005600550046000D>-220<0042004F0045>-220<005500490046>-220<005400440042004D004A004F0048>-220<00500047>-220<005500490046>-220<0051004200480046>-220<004A0047>-220<0042004F005A000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01F1>]TJ
+ET
+endstream
+endobj
+56 0 obj <<
+/Type /Page
+/Contents 57 0 R
+/Resources 55 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 53 0 R
+>> endobj
+58 0 obj <<
+/D [56 0 R /XYZ 113.386 651.969 null]
+>> endobj
+59 0 obj <<
+/D [56 0 R /XYZ 113.386 613.662 null]
+>> endobj
+60 0 obj <<
+/D [56 0 R /XYZ 113.386 580.128 null]
+>> endobj
+61 0 obj <<
+/D [56 0 R /XYZ 113.386 541.931 null]
+>> endobj
+62 0 obj <<
+/D [56 0 R /XYZ 113.386 183.276 null]
+>> endobj
+55 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+65 0 obj <<
+/Length 22162
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 96.787 640.013 Tm [<005700520053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 640.013 Tm [<001400460050>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<02650046>-220<00560051005100460053>-220<004E004200530048004A004F000D>-220<004A000F0046000F>-293<005500490046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<005500490046>-220<0054004D004A0045004600080054>-220<005500500051>-220<004300500053004500460053>-220<0042004F0045>-220<005500490046>-220<00550046005900550043004D00500044004C000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 604.148 Tm [<004500520057005700520050>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 604.148 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 604.148 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 604.148 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 604.148 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 604.148 Tm [<005800510056005300480046004C0049004C00480047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 604.148 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 592.193 Tm [<0265>]TJ
+1.01 0 0 1 123.65 592.193 Tm [<0046>-220<00430050>]TJ
+1.015 0 0 1 140.551 592.193 Tm [<00550055>]TJ
+1.01 0 0 1 147.791 592.193 Tm [<0050004E>-220<004E0042>]TJ
+1.015 0 0 1 176.003 592.193 Tm [<0053>]TJ
+1.01 0 0 1 179.795 592.193 Tm [<0048>]TJ
+1.015 0 0 1 184.484 592.193 Tm [<004A>]TJ
+1.01 0 0 1 187.174 592.193 Tm [<004F>]TJ
+1.015 0 0 1 192.789 592.193 Tm [<000D>-220<004A000F>]TJ
+1.01 0 0 1 202.662 592.193 Tm [<0046>]TJ
+1.015 0 0 1 207.139 592.193 Tm [<000F>-297<0055>]TJ
+1.01 0 0 1 216.246 592.193 Tm [<00490046>-220<0045>]TJ
+1.015 0 0 1 233.671 592.193 Tm [<004A>]TJ
+1.01 0 0 1 236.361 592.193 Tm [<0054>]TJ
+1.015 0 0 1 240.396 592.193 Tm [<0055>]TJ
+1.01 0 0 1 244.016 592.193 Tm [<0042004F00440046>-220<00430046>]TJ
+1.015 0 0 1 274.552 592.193 Tm [<0055>]TJ
+1.01 0 0 1 278.172 592.193 Tm [<005800460046004F>]TJ
+1.015 0 0 1 301.805 592.193 Tm [<0055>]TJ
+1.01 0 0 1 305.426 592.193 Tm [<00490046>]TJ
+1.015 0 0 1 317.608 592.193 Tm [<0055>]TJ
+1.01 0 0 1 321.228 592.193 Tm [<0046>]TJ
+1.015 0 0 1 325.706 592.193 Tm [<00590055>]TJ
+1.01 0 0 1 334.119 592.193 Tm [<0043>]TJ
+1.015 0 0 1 339.241 592.193 Tm [<004D>]TJ
+1.01 0 0 1 341.829 592.193 Tm [<00500044004C>-220<0042004F0045>]TJ
+1.015 0 0 1 375.854 592.193 Tm [<0055>]TJ
+1.01 0 0 1 379.474 592.193 Tm [<00490046>-220<0054>]TJ
+1.015 0 0 1 395.692 592.193 Tm [<004D004A>]TJ
+1.01 0 0 1 400.97 592.193 Tm [<00450046>]TJ
+1.015 0 0 1 410.69 592.193 Tm [<0008>]TJ
+1.01 0 0 1 412.733 592.193 Tm [<0054>-220<00430050>]TJ
+1.015 0 0 1 429.192 592.193 Tm [<00550055>]TJ
+1.01 0 0 1 436.432 592.193 Tm [<0050004E>-220<00430050>]TJ
+1.015 0 0 1 462.108 592.193 Tm [<0053>]TJ
+1.01 0 0 1 465.9 592.193 Tm [<00450046>]TJ
+1.015 0 0 1 475.62 592.193 Tm [<0053000F>]TJ
+0.99 0 0 1 113.386 580.238 Tm [<003800500053004C0054>-222<00460059004200440055004D005A>-223<00420054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 182.768 580.238 Tm [<0055004C004A004B0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 208.734 580.238 Tm [<004A004F>-222<005500490046>-223<0057004600530055004A00440042004D>-222<0045004A004E0046004F0054004A0050004F000D>-223<004A000F0046000F>-297<004A0055>-222<004A0054>-223<0042004D>-222<00580042005A0054>-223<005000430046005A00460045000D>-222<004300560055>-223<004F00500055>-223<004A004F004900460053004A005500460045000D>]TJ
+1 0 0 1 113.386 568.282 Tm [<004600550044000F>]TJ
+1 0 0 1 133.311 556.327 Tm [<002F005000550046>-217<0055004900420055>-218<004A004F>-217<00470056004D004D>-218<00540044005300460046004F>-217<004E005000450046000D>-218<0053004600420045004600530054>-218<005400460055>-217<005500490046>-218<0051004200480046>-217<00540050>-218<0055004900420055>-218<004A00550054>-217<0054004E0042004D004D004600540055>-218<0045004A004E0046004F0054004A0050004F>-217<0048005000460054>]TJ
+1 0 0 1 113.386 544.372 Tm [<004700530050004E>-220<0050004F0046>-220<0054004A00450046>-220<00500047>-220<005500490046>-220<00540044005300460046004F>-220<00550050>-220<005500490046>-220<00500055004900460053000F>-293<026500560054000D>-220<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 520.462 Tm [<003F00560048005700530044005500440050004800570048005500030056004F004C00470048001D>]TJ
+1 0 0 1 113.386 508.506 Tm [<00030003004B0048004C004A004B00570003002000030014001500460050>]TJ
+1 0 0 1 113.386 496.551 Tm [<003F005300440055>]TJ
+1 0 0 1 113.386 484.596 Tm [<003F005600480057004F004C00470048005E0050005C0056004F004C004700480060>]TJ
+1 0 0 1 113.386 472.641 Tm [<00030003004B0048004C004A004B00570003002000030014001700460050>]TJ
+1 0 0 1 113.386 460.686 Tm [<003F005300440055>]TJ
+0.97 0 0 1 113.386 436.775 Tm [<003F>]TJ
+0.98 0 0 1 118.044 436.775 Tm [<0056>]TJ
+0.97 0 0 1 122.75 436.775 Tm [<004F004C>]TJ
+0.98 0 0 1 132.067 436.775 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 143.314 436.775 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 160.115 436.775 Tm [<003F>]TJ
+0.98 0 0 1 164.773 436.775 Tm [<0050>]TJ
+0.97 0 0 1 169.48 436.775 Tm [<005C>]TJ
+0.98 0 0 1 174.138 436.775 Tm [<0056>]TJ
+0.97 0 0 1 178.844 436.775 Tm [<004F004C>]TJ
+0.98 0 0 1 188.161 436.775 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 199.407 436.775 Tm [<0058>]TJ
+0.97 0 0 1 206.046 436.775 Tm [<004A004D004D>]TJ
+0.98 0 0 1 215.399 436.775 Tm [<00420044>]TJ
+0.97 0 0 1 223.766 436.775 Tm [<0055>]TJ
+0.98 0 0 1 227.226 436.775 Tm [<00560042>]TJ
+0.97 0 0 1 236.814 436.775 Tm [<004D004D005A>-189<004D>]TJ
+0.98 0 0 1 250.534 436.775 Tm [<00500050004C>]TJ
+0.97 0 0 1 267.102 436.775 Tm [<004D004A>]TJ
+0.98 0 0 1 272.146 436.775 Tm [<004C0046>]TJ
+0.97 0 0 1 283.197 436.775 Tm [<0055>]TJ
+0.98 0 0 1 286.657 436.775 Tm [<00490046>]TJ
+0.97 0 0 1 296.322 436.775 Tm [<005A>]TJ
+0.98 0 0 1 302.621 436.775 Tm [<00490042>]TJ
+0.97 0 0 1 312.375 436.775 Tm [<0057>]TJ
+0.98 0 0 1 316.946 436.775 Tm [<0046>]TJ
+0.97 0 0 1 323.125 436.775 Tm [<0055>]TJ
+0.98 0 0 1 326.584 436.775 Tm [<00490046>-187<00540042004E0046>-188<00490046>]TJ
+0.97 0 0 1 370.205 436.775 Tm [<004A>]TJ
+0.98 0 0 1 372.775 436.775 Tm [<00480049>]TJ
+0.97 0 0 1 382.646 436.775 Tm [<0055>]TJ
+0.98 0 0 1 387.94 436.775 Tm [<00430056>]TJ
+0.97 0 0 1 398.065 436.775 Tm [<0055>]TJ
+0.98 0 0 1 403.359 436.775 Tm [<004F0050>]TJ
+0.97 0 0 1 413.737 436.775 Tm [<0055>-189<0055>]TJ
+0.98 0 0 1 422.491 436.775 Tm [<00490046>-187<00540042004E0046>-188<0058>]TJ
+0.97 0 0 1 463.084 436.775 Tm [<004A>]TJ
+0.98 0 0 1 465.655 436.775 Tm [<0045>]TJ
+0.97 0 0 1 470.741 436.775 Tm [<0055>]TJ
+0.98 0 0 1 474.201 436.775 Tm [<0049>]TJ
+0.97 0 0 1 479.522 436.775 Tm [<000F>]TJ
+1.005 0 0 1 113.386 424.82 Tm [<0022004F0045>]TJ
+1.01 0 0 1 132.473 424.82 Tm [<0055>]TJ
+1.005 0 0 1 136.075 424.82 Tm [<00490046>]TJ
+1.01 0 0 1 148.204 424.82 Tm [<0055005A>]TJ
+1.005 0 0 1 156.455 424.82 Tm [<00510046>-221<0058>]TJ
+1.01 0 0 1 175.162 424.82 Tm [<004A004D004D>]TJ
+1.005 0 0 1 185.206 424.82 Tm [<00420051005100460042>]TJ
+1.01 0 0 1 209.206 424.82 Tm [<0053>]TJ
+1.005 0 0 1 215.196 424.82 Tm [<0054004E0042>]TJ
+1.01 0 0 1 231.886 424.82 Tm [<004D004D>]TJ
+1.005 0 0 1 237.038 424.82 Tm [<0046>]TJ
+1.01 0 0 1 241.494 424.82 Tm [<0053>-220<004A>]TJ
+1.005 0 0 1 250.16 424.82 Tm [<004F>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 257.963 424.82 Tm [<003F>]TJ
+1.005 0 0 1 262.813 424.82 Tm [<0050>]TJ
+1.01 0 0 1 267.64 424.82 Tm [<005C>]TJ
+1.005 0 0 1 272.49 424.82 Tm [<0056>]TJ
+1.01 0 0 1 277.316 424.82 Tm [<004F004C>]TJ
+1.005 0 0 1 287.017 424.82 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 296.67 424.82 Tm [<000F>]TJ
+1.005 0 0 1 302.131 424.82 Tm [<0023>]TJ
+1.01 0 0 1 307.878 424.82 Tm [<005A>-220<0055>]TJ
+1.005 0 0 1 318.345 424.82 Tm [<00490046>-221<00580042>]TJ
+1.01 0 0 1 341.828 424.82 Tm [<005A000D>-220<0055>]TJ
+1.005 0 0 1 354.766 424.82 Tm [<00490046>-221<0045>]TJ
+1.01 0 0 1 372.111 424.82 Tm [<004A>]TJ
+1.005 0 0 1 374.788 424.82 Tm [<004E0046004F0054>]TJ
+1.01 0 0 1 396.975 424.82 Tm [<004A>]TJ
+1.005 0 0 1 399.652 424.82 Tm [<0050004F0054>]TJ
+1.01 0 0 1 416.526 424.82 Tm [<01EA01EB>]TJ
+1.005 0 0 1 427.152 424.82 Tm [<0044004E>-221<0042004F0045>]TJ
+1.01 0 0 1 459.099 424.82 Tm [<01EA01EE>]TJ
+1.005 0 0 1 469.725 424.82 Tm [<0044004E>]TJ
+1 0 0 1 113.386 412.865 Tm [<004200530046>-220<00450046004700420056004D0055>-220<0054004A004E0051004D005A>-220<0043004600440042005600540046>-220<005500490046005A>-220<004E0042004C0046>-220<0035>]TJ
+1 0 0 1 270.938 410.798 Tm [<0026>]TJ
+1 0 0 1 275.222 412.865 Tm [<003900080054>-220<00450046004700420056004D0055>-220<01EA01E900510055>-220<00240050004E00510056005500460053>-220<002E0050004500460053004F>-220<004D00500050004C>-220<005300460042004500420043004D0046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 53.566 388.955 Tm [<0045004400560048004F004C005100480056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 388.955 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 388.955 Tm [<0047004C0050004800510056004C00520051>-602<00520055>-603<004A004F00580048>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 388.955 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 388.955 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 388.955 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 388.955 Tm [<0014001500530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 276.546 388.955 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 113.386 377 Tm [<02650046>-216<0043004200540046004D004A004F0046>-217<0045004A005400550042004F00440046>-217<004700500053>-216<005500490046>-217<0054004D004A00450046000F>-291<0028004D00560046>-217<004E00460042004F0054>-216<00540050004E004600550049004A004F0048>-217<004D004A004C0046>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 368.937 377 Tm [<00150053005700030053004F00580056000300140049004C004F004F>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 436.505 377 Tm [<000D>-217<00580049004A00440049>-216<00440042004F>]TJ
+1 0 0 1 113.386 365.044 Tm [<00430046>-220<00560054004600470056004D>-220<0009005400460046>-220<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 186.043 365.044 Tm [<0059005300520056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 207.444 365.044 Tm [<0042005500550053004A004300560046>-220<00430046004D00500058000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 341.134 Tm [<0057005200530056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 341.134 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 341.134 Tm [<0047004C0050004800510056004C00520051>-602<00520055>-603<004A004F00580048>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 341.134 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 341.134 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 341.134 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 341.134 Tm [<0014001500530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 276.546 341.134 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 329.179 Tm [<02650046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<005500490046>-220<00EB005300540055>-220<004D004A004F004600080054>-220<0043004200540046004D004A004F0046>-220<0042004F0045>-220<005500490046>-220<005500500051>-220<00500047>-220<005500490046>-220<00550046005900550043004D00500044004C000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 305.269 Tm [<0053004400550056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 305.269 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 305.269 Tm [<0047004C0050004800510056004C00520051>-602<00520055>-603<004A004F00580048>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 305.269 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 305.269 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 305.269 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 305.269 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 305.269 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 293.313 Tm [<02650046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<0051004200530042004800530042005100490054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 67.973 269.403 Tm [<005300440055004C00510047004800510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 269.403 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 269.403 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 269.403 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 269.403 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 269.403 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 269.403 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 269.403 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 257.448 Tm [<02650046>-220<0058004A004500550049>-220<00500047>-220<005500490046>-220<00510042005300420048005300420051004900080054>-220<004A004F00450046004F005500420055004A0050004F>-220<004700500053>-220<00550049004A0054>-220<0054004D004A00450046000F>]TJ
+1.02 0 0 1 133.311 245.493 Tm [<003A>]TJ
+1.01 0 0 1 139.022 245.493 Tm [<00500056>-220<004E>]TJ
+1.02 0 0 1 159.809 245.493 Tm [<004A>]TJ
+1.01 0 0 1 162.512 245.493 Tm [<00480049>]TJ
+1.02 0 0 1 172.685 245.493 Tm [<0055>]TJ
+1.01 0 0 1 178.546 245.493 Tm [<00580042004F>]TJ
+1.02 0 0 1 195.571 245.493 Tm [<0055>-218<0055>]TJ
+1.01 0 0 1 205.07 245.493 Tm [<00490046>-220<0051>]TJ
+1.02 0 0 1 222.506 245.493 Tm [<0053>]TJ
+1.01 0 0 1 226.317 245.493 Tm [<0046>]TJ
+1.02 0 0 1 230.795 245.493 Tm [<0057004A>]TJ
+1.01 0 0 1 238.304 245.493 Tm [<005000560054>-220<0045>]TJ
+1.02 0 0 1 260.198 245.493 Tm [<004A>]TJ
+1.01 0 0 1 262.901 245.493 Tm [<004E0046004F0054>]TJ
+1.02 0 0 1 285.199 245.493 Tm [<004A>]TJ
+1.01 0 0 1 287.902 245.493 Tm [<0050004F0054>]TJ
+1.02 0 0 1 304.856 245.493 Tm [<0055>]TJ
+1.01 0 0 1 308.494 245.493 Tm [<0050>-220<00430046>-221<00440050004F004F00460044>]TJ
+1.02 0 0 1 356.519 245.493 Tm [<0055>]TJ
+1.01 0 0 1 360.157 245.493 Tm [<00460045>]TJ
+1.02 0 0 1 372.099 245.493 Tm [<004A>]TJ
+1.01 0 0 1 374.802 245.493 Tm [<004F>-220<00540050004E0046>-221<00580042>]TJ
+1.02 0 0 1 418.037 245.493 Tm [<005A000F>]TJ
+1.01 0 0 1 428.236 245.493 Tm [<00270050>]TJ
+1.02 0 0 1 438.66 245.493 Tm [<0053>-218<004A>]TJ
+1.01 0 0 1 447.397 245.493 Tm [<004F0054>]TJ
+1.02 0 0 1 457.046 245.493 Tm [<0055>]TJ
+1.01 0 0 1 460.684 245.493 Tm [<0042004F00440046>]TJ
+1.02 0 0 1 479.4 245.493 Tm [<000D>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 245.044 Tm [<02650046>-200<0054004D004A0045004600080054>-200<00470050004F0055000D>-200<004A0047>-200<0042004F005A>-200<0009005400460046>]TJ
+1 0 0 1 491.852 236.078 Tm [<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 503.361 236.078 Tm [<001D00470050004F0055001F>]TJ
+/F63 7.97011 Tf 1 0 0 1 527.295 236.078 Tm [<0042005500550053004A0043005600550046>]TJ
+1 0 0 1 491.852 227.112 Tm [<00430046004D00500058000A000D>-200<004A0054>-200<00440042004D004D00460045>-200<004300460047005000530046>]TJ
+1 0 0 1 491.852 218.145 Tm [<00550049004600540046>-200<0045004A004E0046004F0054004A0050004F0054>-200<004200530046>-200<005400460055000D>]TJ
+1 0 0 1 491.852 209.179 Tm [<00540050>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 511.363 209.179 Tm [<0046004E>]TJ
+/F63 7.97011 Tf 1 0 0 1 522.976 209.179 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 536.118 209.179 Tm [<00460059>]TJ
+/F63 7.97011 Tf 0.98 0 0 1 491.852 200.213 Tm [<0045>]TJ
+0.975 0 0 1 495.586 200.213 Tm [<004A>]TJ
+0.98 0 0 1 497.536 200.213 Tm [<004E0046004F0054>]TJ
+0.975 0 0 1 513.298 200.213 Tm [<004A>]TJ
+0.98 0 0 1 515.249 200.213 Tm [<0050004F0054>-203<00580050>]TJ
+0.975 0 0 1 535.799 200.213 Tm [<0053>]TJ
+0.98 0 0 1 538.627 200.213 Tm [<004C0054>-204<0051>]TJ
+0.975 0 0 1 550.257 200.213 Tm [<0053>]TJ
+0.98 0 0 1 553.086 200.213 Tm [<005000510046>]TJ
+0.975 0 0 1 563.357 200.213 Tm [<0053004D005A000F>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 233.538 Tm [<0043>]TJ
+1.02 0 0 1 118.533 233.538 Tm [<005A>]TJ
+1.015 0 0 1 125.403 233.538 Tm [<00450046>]TJ
+1.02 0 0 1 135.171 233.538 Tm [<0047>]TJ
+1.015 0 0 1 138.565 233.538 Tm [<00420056>]TJ
+1.02 0 0 1 148.495 233.538 Tm [<004D0055000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.015 0 0 1 159.402 233.538 Tm [<004B0056>]TJ
+1.02 0 0 1 169.151 233.538 Tm [<004C>]TJ
+1.015 0 0 1 174.049 233.538 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 185.973 233.538 Tm [<004A>]TJ
+1.015 0 0 1 188.676 233.538 Tm [<0054>-215<00440050004F004F00460044>]TJ
+1.02 0 0 1 223.948 233.538 Tm [<0055>]TJ
+1.015 0 0 1 227.586 233.538 Tm [<00460045>]TJ
+1.02 0 0 1 239.529 233.538 Tm [<0055>]TJ
+1.015 0 0 1 243.167 233.538 Tm [<0050>]TJ
+1.02 0 0 1 250.448 233.538 Tm [<0055>]TJ
+1.015 0 0 1 254.086 233.538 Tm [<00490046>-215<0054>]TJ
+1.02 0 0 1 270.327 233.538 Tm [<004D004A>]TJ
+1.015 0 0 1 275.632 233.538 Tm [<00450046>]TJ
+1.02 0 0 1 285.4 233.538 Tm [<0008>]TJ
+1.015 0 0 1 287.453 233.538 Tm [<0054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.015 0 0 1 293.682 233.538 Tm [<005A>]TJ
+1.02 0 0 1 298.557 233.538 Tm [<004C>]TJ
+1.015 0 0 1 303.455 233.538 Tm [<0047>]TJ
+1.02 0 0 1 308.329 233.538 Tm [<0057>]TJ
+1.015 0 0 1 313.228 233.538 Tm [<004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 320.277 233.538 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 337.954 233.538 Tm [<004F>]TJ
+1.015 0 0 1 342.852 233.538 Tm [<0048>]TJ
+1.02 0 0 1 347.726 233.538 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 357.523 233.538 Tm [<000F>-287<0265004A>]TJ
+1.015 0 0 1 375.947 233.538 Tm [<0054>]TJ
+1.02 0 0 1 382.177 233.538 Tm [<004A>]TJ
+1.015 0 0 1 384.88 233.538 Tm [<0054>-215<0043004600440042005600540046>]TJ
+1.02 0 0 1 425.491 233.538 Tm [<0055>]TJ
+1.015 0 0 1 429.129 233.538 Tm [<00490046>]TJ
+1.02 0 0 1 441.315 233.538 Tm [<004D>]TJ
+1.015 0 0 1 443.917 233.538 Tm [<0042>]TJ
+1.02 0 0 1 448.508 233.538 Tm [<00550055>]TJ
+1.015 0 0 1 455.784 233.538 Tm [<0046>]TJ
+1.02 0 0 1 460.283 233.538 Tm [<0053>-214<0055>]TJ
+1.015 0 0 1 469.907 233.538 Tm [<00580050>]TJ
+1.01 0 0 1 113.386 221.582 Tm [<0042>]TJ
+1.015 0 0 1 117.954 221.582 Tm [<005500550053004A>]TJ
+1.01 0 0 1 131.676 221.582 Tm [<00430056>]TJ
+1.015 0 0 1 142.111 221.582 Tm [<0055>]TJ
+1.01 0 0 1 145.731 221.582 Tm [<00460054>-220<00540046>]TJ
+1.015 0 0 1 164.971 221.582 Tm [<0055>-219<0055>]TJ
+1.01 0 0 1 174.427 221.582 Tm [<00490046>]TJ
+1.015 0 0 1 186.604 221.582 Tm [<0035>]TJ
+1 0 0 1 190.676 219.515 Tm [<0026>]TJ
+1.015 0 0 1 194.96 221.582 Tm [<0039>]TJ
+1.01 0 0 1 203.132 221.582 Tm [<0045>]TJ
+1.015 0 0 1 208.374 221.582 Tm [<004A>]TJ
+1.01 0 0 1 211.064 221.582 Tm [<004E0046004F0054>]TJ
+1.015 0 0 1 233.362 221.582 Tm [<004A>]TJ
+1.01 0 0 1 236.052 221.582 Tm [<0050004F0054>]TJ
+1.015 0 0 1 252.998 221.582 Tm [<0055>]TJ
+1.01 0 0 1 256.618 221.582 Tm [<00490042>]TJ
+1.015 0 0 1 266.67 221.582 Tm [<0055>-219<0055>]TJ
+1.01 0 0 1 276.126 221.582 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 288.302 221.582 Tm [<004B0056>]TJ
+1.015 0 0 1 298.003 221.582 Tm [<004C>]TJ
+1.01 0 0 1 302.877 221.582 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 314.793 221.582 Tm [<0042>]TJ
+1.015 0 0 1 319.362 221.582 Tm [<005500550053004A>]TJ
+1.01 0 0 1 333.084 221.582 Tm [<00430056>]TJ
+1.015 0 0 1 343.518 221.582 Tm [<0055>]TJ
+1.01 0 0 1 347.138 221.582 Tm [<0046>]TJ
+1.015 0 0 1 353.831 221.582 Tm [<0053>]TJ
+1.01 0 0 1 357.623 221.582 Tm [<0046>]TJ
+1.015 0 0 1 362.101 221.582 Tm [<0047>]TJ
+1.01 0 0 1 365.478 221.582 Tm [<0046>]TJ
+1.015 0 0 1 369.956 221.582 Tm [<0053>]TJ
+1.01 0 0 1 373.748 221.582 Tm [<0054>]TJ
+1.015 0 0 1 379.998 221.582 Tm [<0055>]TJ
+1.01 0 0 1 383.618 221.582 Tm [<0050>]TJ
+1.015 0 0 1 388.7 221.582 Tm [<000F>]TJ
+1.01 0 0 1 394.17 221.582 Tm [<00340050>]TJ
+1.015 0 0 1 406.417 221.582 Tm [<0055>]TJ
+1.01 0 0 1 410.037 221.582 Tm [<00490046>-220<0050>]TJ
+1.015 0 0 1 427.296 221.582 Tm [<0053>]TJ
+1.01 0 0 1 431.088 221.582 Tm [<00450046>]TJ
+1.015 0 0 1 440.808 221.582 Tm [<0053>-219<004A>]TJ
+1.01 0 0 1 449.505 221.582 Tm [<004F>-220<00580049>]TJ
+1.015 0 0 1 469.661 221.582 Tm [<004A>]TJ
+1.01 0 0 1 472.351 221.582 Tm [<00440049>]TJ
+1 0 0 1 113.386 209.627 Tm [<00550049005000540046>-222<0045004A004E0046004F0054004A0050004F0054>-223<004200530046>-223<005400460055>-223<004A0054>-223<004A004E00510050005300550042004F0055000F>-302<0029004600530046>-223<004200530046>-223<005500490046>-223<0045004A004E0046004F0054004A0050004F0054>-223<0042004F0045>-223<005500490046>-223<0042005500550053004A00430056005500460054>-223<0055004900420055>-223<005400460055>]TJ
+1 0 0 1 113.386 197.672 Tm [<005500490046004E000D>-220<004A004F>-220<005500490046>-220<00500053004500460053>-220<00500047>-220<005500490046>-220<004200540054004A0048004F0046004E0046004F0055001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 173.762 Tm [<003F0045004400560048004F004C005100480056004E004C0053>]TJ
+/F105 9.96264 Tf 1 0 0 1 178.008 173.762 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 185.42 173.762 Tm [<0045004400560048004F004C005100480056004E004C0053>]TJ
+0 g 0 G
+1 0 0 1 113.386 161.807 Tm [<003F0057005200530056004E004C0053>]TJ
+/F105 9.96264 Tf 1 0 0 1 153.996 161.807 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 161.408 161.807 Tm [<0057005200530056004E004C0053>]TJ
+0 g 0 G
+1 0 0 1 113.386 149.851 Tm [<003F0053004400550056004E004C0053>]TJ
+/F105 9.96264 Tf 1 0 0 1 153.996 149.851 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 161.408 149.851 Tm [<0053004400550056004E004C0053>]TJ
+0 g 0 G
+1 0 0 1 113.386 137.896 Tm [<003F00530047004900530044004A0048005A004C00470057004B>]TJ
+/F105 9.96264 Tf 1 0 0 1 178.008 137.896 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 185.42 137.896 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+1 0 0 1 113.386 125.941 Tm [<003F00530047004900530044004A0048004B0048004C004A004B0057>]TJ
+/F105 9.96264 Tf 1 0 0 1 182.81 125.941 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 190.222 125.941 Tm [<004B0048004C004A004B0057>]TJ
+0 g 0 G
+/F105 11.95517 Tf 1 0 0 1 475.577 78.12 Tm [<01F2>]TJ
+ET
+endstream
+endobj
+64 0 obj <<
+/Type /Page
+/Contents 65 0 R
+/Resources 63 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 53 0 R
+>> endobj
+66 0 obj <<
+/D [64 0 R /XYZ 113.386 651.969 null]
+>> endobj
+67 0 obj <<
+/D [64 0 R /XYZ 113.386 613.662 null]
+>> endobj
+68 0 obj <<
+/D [64 0 R /XYZ 113.386 398.469 null]
+>> endobj
+69 0 obj <<
+/D [64 0 R /XYZ 113.386 351.552 null]
+>> endobj
+70 0 obj <<
+/D [64 0 R /XYZ 113.386 314.962 null]
+>> endobj
+71 0 obj <<
+/D [64 0 R /XYZ 113.386 278.917 null]
+>> endobj
+63 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+75 0 obj <<
+/Length 27378
+>>
+stream
+BT
+/F111 7.97011 Tf 1 0 0 1 113.386 640.013 Tm [<003F005300470049004B00520055004C004A004C0051>]TJ
+/F105 9.96264 Tf 1 0 0 1 168.403 640.013 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 175.815 640.013 Tm [<004F004800490057>]TJ
+0 g 0 G
+1 0 0 1 113.386 628.058 Tm [<003F005300470049005900520055004C004A004C0051>]TJ
+/F105 9.96264 Tf 1 0 0 1 168.403 628.058 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 175.815 628.058 Tm [<005700520053>]TJ
+0 g 0 G
+1 0 0 1 113.386 616.103 Tm [<003F004B0056004C005D0048>]TJ
+/F105 9.96264 Tf 1 0 0 1 144.391 616.103 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 151.804 616.103 Tm [<004B0056004C005D0048>]TJ
+0 g 0 G
+1 0 0 1 113.386 604.148 Tm [<003F005300440055004C00510047004800510057>]TJ
+/F105 9.96264 Tf 1 0 0 1 163.601 604.148 Tm [<001E>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 171.013 604.148 Tm [<005300440055004C00510047004800510057>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 113.386 592.193 Tm [<00590056004C005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 568.282 Tm [<0265>]TJ
+1.02 0 0 1 123.801 568.282 Tm [<00560054>]TJ
+1.03 0 0 1 133.242 568.282 Tm [<000D>-277<0055>]TJ
+1.02 0 0 1 142.275 568.282 Tm [<00490046>-267<00450046>]TJ
+1.03 0 0 1 164.866 568.282 Tm [<0047>]TJ
+1.02 0 0 1 168.294 568.282 Tm [<00420056>]TJ
+1.03 0 0 1 178.273 568.282 Tm [<004D0055>-264<0057>]TJ
+1.02 0 0 1 192.142 568.282 Tm [<0042>]TJ
+1.03 0 0 1 196.755 568.282 Tm [<004D>]TJ
+1.02 0 0 1 199.382 568.282 Tm [<00560046>]TJ
+1.03 0 0 1 211.984 568.282 Tm [<0047>]TJ
+1.02 0 0 1 215.412 568.282 Tm [<0050>]TJ
+1.03 0 0 1 220.544 568.282 Tm [<0053>-264<0055>]TJ
+1.02 0 0 1 230.78 568.282 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 243.555 568.282 Tm [<004B0056>]TJ
+1.03 0 0 1 253.352 568.282 Tm [<004C>]TJ
+1.02 0 0 1 258.298 568.282 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 270.81 568.282 Tm [<0042>]TJ
+1.03 0 0 1 275.423 568.282 Tm [<005500550053004A>]TJ
+1.02 0 0 1 289.348 568.282 Tm [<00430056>]TJ
+1.03 0 0 1 299.886 568.282 Tm [<0055>]TJ
+1.02 0 0 1 303.559 568.282 Tm [<0046>]TJ
+1.03 0 0 1 310.796 568.282 Tm [<004A>]TJ
+1.02 0 0 1 313.526 568.282 Tm [<0054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 320.316 568.282 Tm [<005A>]TJ
+1.03 0 0 1 325.214 568.282 Tm [<004C>]TJ
+1.02 0 0 1 330.16 568.282 Tm [<0047>]TJ
+1.03 0 0 1 335.059 568.282 Tm [<0057>]TJ
+1.02 0 0 1 340.005 568.282 Tm [<004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 347.618 568.282 Tm [<004E>]TJ
+1.03 0 0 1 355.87 568.282 Tm [<004A>]TJ
+1.02 0 0 1 358.599 568.282 Tm [<004F00560054>]TJ
+1.03 0 0 1 376.425 568.282 Tm [<0055>]TJ
+1.02 0 0 1 380.098 568.282 Tm [<0058>]TJ
+1.03 0 0 1 387.008 568.282 Tm [<004A>]TJ
+1.02 0 0 1 389.738 568.282 Tm [<00440046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 401.07 568.282 Tm [<004F>]TJ
+1.02 0 0 1 406.016 568.282 Tm [<0048>]TJ
+1.03 0 0 1 410.915 568.282 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 423.522 568.282 Tm [<0047>]TJ
+1.02 0 0 1 426.949 568.282 Tm [<0050>]TJ
+1.03 0 0 1 432.081 568.282 Tm [<0053>]TJ
+1.02 0 0 1 438.644 568.282 Tm [<0046004200440049>-267<0054>]TJ
+1.03 0 0 1 464.203 568.282 Tm [<004D004A>]TJ
+1.02 0 0 1 469.559 568.282 Tm [<00450046>]TJ
+1.03 0 0 1 479.376 568.282 Tm [<000D>]TJ
+1 0 0 1 113.386 556.327 Tm [<0043004600440042005600540046>-220<004A0055>-220<004A0054>-220<005400460055>-220<00420054001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 532.417 Tm [<00030003004B0056004C005D004800030020000300B5003F00530047004900530044004A0048005A004C00470057004B0010>-1<0015003F005300470049004B00520055004C004A004C005100B5>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 113.386 508.506 Tm [<00380049>]TJ
+0.98 0 0 1 127.37 508.506 Tm [<004A>]TJ
+0.985 0 0 1 129.967 508.506 Tm [<00440049>]TJ
+0.98 0 0 1 141.495 508.506 Tm [<004D>]TJ
+0.985 0 0 1 143.994 508.506 Tm [<0046004200450054>]TJ
+0.98 0 0 1 164.089 508.506 Tm [<0055>]TJ
+0.985 0 0 1 167.585 508.506 Tm [<0050>-226<0042004F>]TJ
+0.98 0 0 1 186.922 508.506 Tm [<004A>]TJ
+0.985 0 0 1 189.519 508.506 Tm [<004E00510050>]TJ
+0.98 0 0 1 207.565 508.506 Tm [<00530055>]TJ
+0.985 0 0 1 214.722 508.506 Tm [<0042004F>]TJ
+0.98 0 0 1 224.653 508.506 Tm [<0055>]TJ
+0.985 0 0 1 230.373 508.506 Tm [<00510050>]TJ
+0.98 0 0 1 240.451 508.506 Tm [<004A>]TJ
+0.985 0 0 1 243.048 508.506 Tm [<004F>]TJ
+0.98 0 0 1 248.524 508.506 Tm [<0055001B>-306<004A>]TJ
+0.985 0 0 1 259.998 508.506 Tm [<004F>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 267.699 508.506 Tm [<002D>]TJ
+0.985 0 0 1 272.707 508.506 Tm [<00460044>]TJ
+0.98 0 0 1 280.205 508.506 Tm [<0055>]TJ
+0.985 0 0 1 283.573 508.506 Tm [<0056>]TJ
+0.98 0 0 1 288.352 508.506 Tm [<0053>]TJ
+0.985 0 0 1 291.906 508.506 Tm [<0046>]TJ
+0.98 0 0 1 295.87 508.506 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 299.424 508.506 Tm [<000D>]TJ
+0.985 0 0 1 304.05 508.506 Tm [<0042>]TJ
+/F123 7.97011 Tf 0.98 0 0 1 310.73 508.506 Tm [<001F>]TJ
+0.985 0 0 1 315.436 508.506 Tm [<0047>]TJ
+0.98 0 0 1 320.167 508.506 Tm [<004C>]TJ
+0.985 0 0 1 324.873 508.506 Tm [<0050004800510056>]TJ
+0.98 0 0 1 343.794 508.506 Tm [<004C>]TJ
+0.985 0 0 1 348.5 508.506 Tm [<00520051>]TJ
+0.98 0 0 1 357.961 508.506 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 365.719 508.506 Tm [<00440042004F>-226<00430046>-227<0042004F>-227<0046>]TJ
+0.98 0 0 1 409.94 508.506 Tm [<0059>]TJ
+0.985 0 0 1 414.568 508.506 Tm [<0051>]TJ
+0.98 0 0 1 419.69 508.506 Tm [<0053>]TJ
+0.985 0 0 1 423.352 508.506 Tm [<004600540054>]TJ
+0.98 0 0 1 435.589 508.506 Tm [<004A>]TJ
+0.985 0 0 1 438.186 508.506 Tm [<0050004F>]TJ
+0.98 0 0 1 448.617 508.506 Tm [<000D>]TJ
+0.985 0 0 1 453.243 508.506 Tm [<0054>]TJ
+0.98 0 0 1 457.178 508.506 Tm [<004A>]TJ
+0.985 0 0 1 459.775 508.506 Tm [<004F00440046>]TJ
+0.98 0 0 1 475.797 508.506 Tm [<004A0055>]TJ
+1 0 0 1 113.386 496.551 Tm [<004A0054>-220<005500490046004F>-220<0046004E004300460045004500460045>-220<004A004F>-220<0042>]TJ
+/F111 7.97011 Tf 1 0 0 1 204.743 496.551 Tm [<003F0047004C00500048005B00530055>]TJ
+/F105 9.96264 Tf 1 0 0 1 245.353 496.551 Tm [<00510053004A004E004A0055004A00570046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 472.641 Tm [<004B005300520056>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 472.641 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 472.641 Tm [<00490049>]TJ
+/F111 7.97011 Tf 1 0 0 1 130.739 472.641 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 135.541 472.641 Tm [<00490055>]TJ
+/F111 7.97011 Tf 1 0 0 1 145.146 472.641 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 149.948 472.641 Tm [<00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 159.553 472.641 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 164.355 472.641 Tm [<00550055>]TJ
+/F7 9.96264 Tf 1 0 0 1 173.96 472.641 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 191.671 472.641 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 194.939 472.641 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 228.523 472.641 Tm [<00490055>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 472.641 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 113.386 460.686 Tm [<0265004A>]TJ
+1 0 0 1 126.212 460.686 Tm [<0054>-222<00440050004F>]TJ
+1.005 0 0 1 147.024 460.686 Tm [<00550053>]TJ
+1 0 0 1 154.363 460.686 Tm [<0050>]TJ
+1.005 0 0 1 159.394 460.686 Tm [<004D>]TJ
+1 0 0 1 161.957 460.686 Tm [<0054>]TJ
+1.005 0 0 1 168.164 460.686 Tm [<0055>]TJ
+1 0 0 1 171.748 460.686 Tm [<00490046>-222<0054>]TJ
+1.005 0 0 1 187.818 460.686 Tm [<004D004A>]TJ
+1 0 0 1 193.044 460.686 Tm [<00450046>]TJ
+1.005 0 0 1 202.668 460.686 Tm [<0008>]TJ
+1 0 0 1 204.691 460.686 Tm [<0054>-222<00490050>]TJ
+1.005 0 0 1 221.358 460.686 Tm [<0053004A>]TJ
+1 0 0 1 227.776 460.686 Tm [<005B0050004F>]TJ
+1.005 0 0 1 242.76 460.686 Tm [<0055>]TJ
+1 0 0 1 246.345 460.686 Tm [<0042>]TJ
+1.005 0 0 1 250.868 460.686 Tm [<004D>-220<004B>]TJ
+1 0 0 1 258.085 460.686 Tm [<00560054>]TJ
+1.005 0 0 1 267.341 460.686 Tm [<0055004A00EB>]TJ
+1 0 0 1 279.205 460.686 Tm [<00440042>]TJ
+1.005 0 0 1 287.743 460.686 Tm [<0055004A>]TJ
+1 0 0 1 293.991 460.686 Tm [<0050004F>]TJ
+1.005 0 0 1 304.581 460.686 Tm [<000F>-297<0265>]TJ
+1 0 0 1 320.179 460.686 Tm [<0046>]TJ
+1.005 0 0 1 326.824 460.686 Tm [<0057>]TJ
+1 0 0 1 331.56 460.686 Tm [<0042>]TJ
+1.005 0 0 1 336.083 460.686 Tm [<004D>]TJ
+1 0 0 1 338.646 460.686 Tm [<005600460054>-222<004E00460042004F>]TJ
+1.005 0 0 1 377.152 460.686 Tm [<001B>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.005 0 0 1 382.567 460.686 Tm [<00490049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 394.431 460.686 Tm [<004A>]TJ
+1 0 0 1 397.094 460.686 Tm [<0054>]TJ
+1.005 0 0 1 403.301 460.686 Tm [<00EC>]TJ
+1 0 0 1 408.948 460.686 Tm [<005600540049>]TJ
+1.005 0 0 1 423.633 460.686 Tm [<004D>]TJ
+1 0 0 1 426.196 460.686 Tm [<0046>]TJ
+1.005 0 0 1 430.63 460.686 Tm [<00470055001000EC>]TJ
+1 0 0 1 447.13 460.686 Tm [<005600540049>]TJ
+1.005 0 0 1 461.815 460.686 Tm [<0053004A>]TJ
+1 0 0 1 468.233 460.686 Tm [<00480049>]TJ
+1.005 0 0 1 478.305 460.686 Tm [<0055>]TJ
+1 0 0 1 113.386 448.731 Tm [<0009004A000F0046000F>-291<0055004600590055>-214<004B005600540055004A00EB00460045>-215<0050004F>-214<0043005000550049>-215<0054004A004500460054000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 247.279 448.731 Tm [<00490055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 259.02 448.731 Tm [<004A0054>-214<00EC005600540049004D00460047005500100053004200480048004600450053004A004800490055>-214<000900440050004E004E0050004F004D005A>-215<00440042004D004D00460045>-214<0053004200480048004600450053004A004800490055000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 113.386 436.775 Tm [<00550049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 126.113 436.775 Tm [<004A>]TJ
+1.02 0 0 1 128.843 436.775 Tm [<0054>]TJ
+1.03 0 0 1 135.752 436.775 Tm [<0053>]TJ
+1.02 0 0 1 139.6 436.775 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 163.501 436.775 Tm [<004D>]TJ
+1.02 0 0 1 166.128 436.775 Tm [<0046>]TJ
+1.03 0 0 1 170.65 436.775 Tm [<00470055001000EC>]TJ
+1.02 0 0 1 187.561 436.775 Tm [<005600540049>]TJ
+1.03 0 0 1 202.539 436.775 Tm [<0053004A>]TJ
+1.02 0 0 1 209.117 436.775 Tm [<00480049>]TJ
+1.03 0 0 1 219.391 436.775 Tm [<0055>-276<0009>]TJ
+1.02 0 0 1 229.265 436.775 Tm [<00440042>]TJ
+1.03 0 0 1 237.973 436.775 Tm [<004D004D>]TJ
+1.02 0 0 1 243.227 436.775 Tm [<00460045>]TJ
+1.03 0 0 1 255.878 436.775 Tm [<0053>]TJ
+1.02 0 0 1 259.726 436.775 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 283.627 436.775 Tm [<004D>]TJ
+1.02 0 0 1 286.254 436.775 Tm [<0046>]TJ
+1.03 0 0 1 290.776 436.775 Tm [<00470055000A000D>]TJ
+1.02 0 0 1 306.752 436.775 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 325.165 436.775 Tm [<00550055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 337.892 436.775 Tm [<004A>]TJ
+1.02 0 0 1 340.621 436.775 Tm [<0054>]TJ
+1.03 0 0 1 347.531 436.775 Tm [<0053>]TJ
+1.02 0 0 1 351.379 436.775 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 375.28 436.775 Tm [<004D>]TJ
+1.02 0 0 1 377.907 436.775 Tm [<0046>]TJ
+1.03 0 0 1 382.429 436.775 Tm [<0047005500100053>]TJ
+1.02 0 0 1 397.4 436.775 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 421.301 436.775 Tm [<0053004A>]TJ
+1.02 0 0 1 427.879 436.775 Tm [<00480049>]TJ
+1.03 0 0 1 438.152 436.775 Tm [<0055>-276<0009004A000F>]TJ
+1.02 0 0 1 453.27 436.775 Tm [<0046>]TJ
+1.03 0 0 1 457.792 436.775 Tm [<000F>-472<0055>]TJ
+1.02 0 0 1 468.83 436.775 Tm [<0046>]TJ
+1.03 0 0 1 473.352 436.775 Tm [<00590055>]TJ
+1 0 0 1 113.386 424.82 Tm [<00440046004F00550046005300460045000A000F>-293<0029004600530046>-220<0054004600440050004F0045000E00500053004500460053>-220<004A004F00EB004F004A00550046>-220<0048004D00560046>-220<004A0054>-220<0056005400460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 400.91 Tm [<0059005300520056>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 400.91 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 400.91 Tm [<005700520053>]TJ
+/F111 7.97011 Tf 1 0 0 1 135.541 400.91 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 140.344 400.91 Tm [<004600480051005700480055>]TJ
+/F111 7.97011 Tf 1 0 0 1 169.158 400.91 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 173.96 400.91 Tm [<004500520057005700520050>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 400.91 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 400.91 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 400.91 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 400.91 Tm [<004600480051005700480055>]TJ
+/F63 9.96264 Tf 1 0 0 1 286.151 400.91 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 388.955 Tm [<0265004A>]TJ
+0.98 0 0 1 125.765 388.955 Tm [<0054>-209<00540046>]TJ
+0.97 0 0 1 139.986 388.955 Tm [<0055>]TJ
+0.98 0 0 1 143.446 388.955 Tm [<0054>-209<004900500058>]TJ
+0.97 0 0 1 168.343 388.955 Tm [<0055>]TJ
+0.98 0 0 1 171.803 388.955 Tm [<00490046>]TJ
+0.97 0 0 1 183.515 388.955 Tm [<004D004A>]TJ
+0.98 0 0 1 188.559 388.955 Tm [<004F00460054>-209<0042>]TJ
+0.97 0 0 1 208.745 388.955 Tm [<0053>]TJ
+0.98 0 0 1 212.369 388.955 Tm [<0046>-209<00540046>]TJ
+0.97 0 0 1 227.02 388.955 Tm [<0055>-211<004A>]TJ
+0.98 0 0 1 235.096 388.955 Tm [<004F>]TJ
+0.97 0 0 1 242.59 388.955 Tm [<0055>]TJ
+0.98 0 0 1 246.049 388.955 Tm [<00490046>]TJ
+0.97 0 0 1 257.761 388.955 Tm [<0055>]TJ
+0.98 0 0 1 261.221 388.955 Tm [<0046>]TJ
+0.97 0 0 1 265.565 388.955 Tm [<00590055>]TJ
+0.98 0 0 1 273.606 388.955 Tm [<0043>]TJ
+0.97 0 0 1 278.575 388.955 Tm [<004D>]TJ
+0.98 0 0 1 281.049 388.955 Tm [<00500044004C>]TJ
+0.97 0 0 1 294.786 388.955 Tm [<000F>]TJ
+0.98 0 0 1 300.028 388.955 Tm [<0034>]TJ
+0.97 0 0 1 304.831 388.955 Tm [<004D004A>]TJ
+0.98 0 0 1 309.876 388.955 Tm [<004500460054>]TJ
+0.97 0 0 1 325.268 388.955 Tm [<0055005A>]TJ
+0.98 0 0 1 333.193 388.955 Tm [<0051>]TJ
+0.97 0 0 1 338.289 388.955 Tm [<004A>]TJ
+0.98 0 0 1 340.86 388.955 Tm [<00440042>]TJ
+0.97 0 0 1 349.227 388.955 Tm [<004D004D005A>]TJ
+0.98 0 0 1 360.685 388.955 Tm [<0045005000460054004F>]TJ
+0.97 0 0 1 384.41 388.955 Tm [<00080055>]TJ
+0.98 0 0 1 391.868 388.955 Tm [<00490042>]TJ
+0.97 0 0 1 401.622 388.955 Tm [<0057>]TJ
+0.98 0 0 1 406.193 388.955 Tm [<0046>]TJ
+0.97 0 0 1 412.583 388.955 Tm [<0055>]TJ
+0.98 0 0 1 416.043 388.955 Tm [<00490046>-209<00540042004E0046>-210<004F0056004E00430046>]TJ
+0.97 0 0 1 478.266 388.955 Tm [<0053>]TJ
+0.985 0 0 1 113.386 377 Tm [<0050>]TJ
+0.98 0 0 1 118.341 377 Tm [<0047>-225<004D004A>]TJ
+0.985 0 0 1 128.903 377 Tm [<004F00460054>]TJ
+0.98 0 0 1 142.681 377 Tm [<000D>]TJ
+0.985 0 0 1 147.28 377 Tm [<00540050>-224<00580046>-225<00440042004F>]TJ
+0.98 0 0 1 185.505 377 Tm [<00080055>]TJ
+0.985 0 0 1 193.177 377 Tm [<0054>]TJ
+0.98 0 0 1 197.112 377 Tm [<004A>]TJ
+0.985 0 0 1 199.709 377 Tm [<004E0051>]TJ
+0.98 0 0 1 212.8 377 Tm [<004D005A>-225<00550053>]TJ
+0.985 0 0 1 229.171 377 Tm [<00460042>]TJ
+0.98 0 0 1 237.993 377 Tm [<0055>-225<0055>]TJ
+0.985 0 0 1 247.188 377 Tm [<00490046004E>-224<00420054>-225<0056005400560042>]TJ
+0.98 0 0 1 296.423 377 Tm [<004D>]TJ
+0.985 0 0 1 301.126 377 Tm [<00510042004800460054>]TJ
+0.98 0 0 1 325.783 377 Tm [<004A>]TJ
+0.985 0 0 1 328.38 377 Tm [<004F>]TJ
+0.98 0 0 1 336.06 377 Tm [<0055005A>]TJ
+0.985 0 0 1 344.066 377 Tm [<0051004600540046>]TJ
+0.98 0 0 1 361.858 377 Tm [<00550055004A>]TJ
+0.985 0 0 1 371.445 377 Tm [<004F0048>]TJ
+0.98 0 0 1 381.494 377 Tm [<000F>-303<0265004A>]TJ
+0.985 0 0 1 399.353 377 Tm [<0054>]TJ
+0.98 0 0 1 405.492 377 Tm [<004A>]TJ
+0.985 0 0 1 408.089 377 Tm [<0054>-224<004900500058>]TJ
+0.98 0 0 1 433.41 377 Tm [<0055>]TJ
+0.985 0 0 1 436.905 377 Tm [<00490046>]TJ
+0.98 0 0 1 448.824 377 Tm [<0055>]TJ
+0.985 0 0 1 452.319 377 Tm [<0046>]TJ
+0.98 0 0 1 456.686 377 Tm [<00590055>]TJ
+0.985 0 0 1 467.014 377 Tm [<0050>]TJ
+0.98 0 0 1 471.969 377 Tm [<0047>]TJ
+0.985 0 0 1 477.435 377 Tm [<0042>]TJ
+1.005 0 0 1 113.386 365.044 Tm [<0054>]TJ
+1.01 0 0 1 117.401 365.044 Tm [<004D004A>]TJ
+1.005 0 0 1 122.653 365.044 Tm [<00450046>]TJ
+1.01 0 0 1 134.519 365.044 Tm [<004A>]TJ
+1.005 0 0 1 137.196 365.044 Tm [<0054>]TJ
+1.01 0 0 1 143.405 365.044 Tm [<0057>]TJ
+1.005 0 0 1 148.165 365.044 Tm [<0046>]TJ
+1.01 0 0 1 152.62 365.044 Tm [<00530055004A>]TJ
+1.005 0 0 1 162.672 365.044 Tm [<00440042>]TJ
+1.01 0 0 1 171.253 365.044 Tm [<004D004D005A>]TJ
+1.005 0 0 1 183.248 365.044 Tm [<005100500054>]TJ
+1.01 0 0 1 197.545 365.044 Tm [<004A0055004A>]TJ
+1.005 0 0 1 206.501 365.044 Tm [<0050004F004F00460045>]TJ
+1.01 0 0 1 234.597 365.044 Tm [<004A>]TJ
+1.005 0 0 1 237.274 365.044 Tm [<004F>]TJ
+1.01 0 0 1 245.055 365.044 Tm [<0055>]TJ
+1.005 0 0 1 248.657 365.044 Tm [<00490046>-219<0042>]TJ
+1.01 0 0 1 265.309 365.044 Tm [<0053>]TJ
+1.005 0 0 1 269.083 365.044 Tm [<00460042>-219<00450046>]TJ
+1.01 0 0 1 289.95 365.044 Tm [<00EB>]TJ
+1.005 0 0 1 295.595 365.044 Tm [<004F00460045>-219<0043>]TJ
+1.01 0 0 1 318.144 365.044 Tm [<005A>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 324.987 365.044 Tm [<0059>]TJ
+1.005 0 0 1 329.837 365.044 Tm [<0056>]TJ
+1.01 0 0 1 334.664 365.044 Tm [<004C>]TJ
+1.005 0 0 1 339.514 365.044 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 349.167 365.044 Tm [<000F>-291<0265>]TJ
+1.005 0 0 1 364.774 365.044 Tm [<0046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.01 0 0 1 371.424 365.044 Tm [<0057>]TJ
+1.005 0 0 1 376.274 365.044 Tm [<00520053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 388.121 365.044 Tm [<0057>]TJ
+1.005 0 0 1 392.881 365.044 Tm [<0042>]TJ
+1.01 0 0 1 397.426 365.044 Tm [<004D>]TJ
+1.005 0 0 1 400.002 365.044 Tm [<00560046>-219<004E00460042004F0054>]TJ
+1.01 0 0 1 440.866 365.044 Tm [<0055>]TJ
+1.005 0 0 1 444.468 365.044 Tm [<00490046>]TJ
+1.01 0 0 1 456.574 365.044 Tm [<0055>]TJ
+1.005 0 0 1 460.177 365.044 Tm [<0046>]TJ
+1.01 0 0 1 464.632 365.044 Tm [<00590055>-218<004A>]TJ
+1.005 0 0 1 477.875 365.044 Tm [<0054>]TJ
+0.995 0 0 1 113.386 353.089 Tm [<00EC00560054004900460045>-221<00420055>-222<005500490046>-222<005500500051000D>-221<005500490046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.995 0 0 1 205.086 353.089 Tm [<004500520057005700520050>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 235.953 353.089 Tm [<00570042004D00560046>-221<004A0054>-222<005500490046>-222<00540042004E0046>-221<00550049004A004F0048>-222<00420055>-222<005500490046>-221<00430050005500550050004E000D>-222<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.995 0 0 1 408.995 353.089 Tm [<004600480051005700480055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 439.862 353.089 Tm [<004E00460042004F0054>-221<005500490046>]TJ
+0.99 0 0 1 113.386 341.134 Tm [<0055004600590055>-224<0058004A004D004D>-224<00430046>-224<00440046004F00550046005300460045>-225<004A004F>-224<005500490046>-224<0042005300460042000F>-303<0265004A0054>-224<005100500054004A0055004A0050004F004A004F0048>-224<004A0054>-225<00450050004F0046>-224<0058004A00550049>-224<00EB005300540055000E00500053004500460053>-225<004A004F00EB004F004A00550046>-224<0054005500530046005500440049000D>-225<00540050>]TJ
+0.975 0 0 1 113.386 329.179 Tm [<005A>]TJ
+0.985 0 0 1 117.873 329.179 Tm [<00500056>-221<00440042004F>-221<005600540046>-221<00540050004E0046>]TJ
+0.975 0 0 1 185.283 329.179 Tm [<0055>]TJ
+0.985 0 0 1 188.761 329.179 Tm [<00500050>]TJ
+0.975 0 0 1 198.672 329.179 Tm [<000D>]TJ
+0.985 0 0 1 203.226 329.179 Tm [<0050>]TJ
+0.975 0 0 1 208.181 329.179 Tm [<0053>]TJ
+0.985 0 0 1 213.994 329.179 Tm [<0049>]TJ
+0.975 0 0 1 219.342 329.179 Tm [<004A>]TJ
+0.985 0 0 1 221.926 329.179 Tm [<004800490046>]TJ
+0.975 0 0 1 236.214 329.179 Tm [<0053000E>]TJ
+0.985 0 0 1 242.916 329.179 Tm [<0050>]TJ
+0.975 0 0 1 247.872 329.179 Tm [<0053>]TJ
+0.985 0 0 1 251.514 329.179 Tm [<00450046>]TJ
+0.975 0 0 1 260.994 329.179 Tm [<0053>]TJ
+0.985 0 0 1 266.806 329.179 Tm [<0054>]TJ
+0.975 0 0 1 270.741 329.179 Tm [<00550053>]TJ
+0.985 0 0 1 277.861 329.179 Tm [<0046>]TJ
+0.975 0 0 1 282.228 329.179 Tm [<0055>]TJ
+0.985 0 0 1 285.705 329.179 Tm [<00440049>]TJ
+0.975 0 0 1 295.008 329.179 Tm [<000D>-223<004A>]TJ
+0.985 0 0 1 302.146 329.179 Tm [<004F>]TJ
+0.975 0 0 1 309.791 329.179 Tm [<0055>]TJ
+0.985 0 0 1 313.268 329.179 Tm [<00490046>-221<0054>]TJ
+0.975 0 0 1 329.088 329.179 Tm [<004D004A>]TJ
+0.985 0 0 1 334.158 329.179 Tm [<00450046>]TJ
+0.975 0 0 1 343.638 329.179 Tm [<0008>]TJ
+0.985 0 0 1 345.6 329.179 Tm [<0054>-221<00440050004F>]TJ
+0.975 0 0 1 366.091 329.179 Tm [<0055>]TJ
+0.985 0 0 1 369.568 329.179 Tm [<0046004F>]TJ
+0.975 0 0 1 379.411 329.179 Tm [<0055000D>-223<0055>]TJ
+0.985 0 0 1 390.92 329.179 Tm [<0050>-221<004200440049>]TJ
+0.975 0 0 1 411.803 329.179 Tm [<004A>]TJ
+0.985 0 0 1 414.387 329.179 Tm [<0046>]TJ
+0.975 0 0 1 418.753 329.179 Tm [<0057>]TJ
+0.985 0 0 1 423.348 329.179 Tm [<0046>-221<00540050004E0046>-221<0046>]TJ
+0.975 0 0 1 457.647 329.179 Tm [<00EA>]TJ
+0.985 0 0 1 463.776 329.179 Tm [<00460044>]TJ
+0.975 0 0 1 472.097 329.179 Tm [<0055>]TJ
+0.985 0 0 1 475.575 329.179 Tm [<0054>]TJ
+0.975 0 0 1 479.51 329.179 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 305.269 Tm [<005600460044004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 305.269 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 305.269 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 305.269 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 305.269 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 305.269 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 305.269 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 305.269 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 305.269 Tm [<00490044004F00560048>]TJ
+/F63 9.96264 Tf 1 0 0 1 247.732 305.269 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 293.313 Tm [<002A0047>-214<0055>]TJ
+0.98 0 0 1 125.28 293.313 Tm [<00490046>-212<004E0042>]TJ
+0.97 0 0 1 149.381 293.313 Tm [<004A>]TJ
+0.98 0 0 1 151.952 293.313 Tm [<004F>-212<00440050004F>]TJ
+0.97 0 0 1 173.788 293.313 Tm [<0055>]TJ
+0.98 0 0 1 177.248 293.313 Tm [<0046004F>]TJ
+0.97 0 0 1 187.04 293.313 Tm [<0055>]TJ
+0.98 0 0 1 192.575 293.313 Tm [<0050>]TJ
+0.97 0 0 1 197.506 293.313 Tm [<0047>]TJ
+0.98 0 0 1 202.809 293.313 Tm [<0042>-212<0054>]TJ
+0.97 0 0 1 213.232 293.313 Tm [<004D004A>]TJ
+0.98 0 0 1 218.276 293.313 Tm [<00450046>]TJ
+0.97 0 0 1 229.783 293.313 Tm [<004A>]TJ
+0.98 0 0 1 232.354 293.313 Tm [<0054>-212<0049>]TJ
+0.97 0 0 1 243.665 293.313 Tm [<004A>]TJ
+0.98 0 0 1 246.236 293.313 Tm [<004800490046>]TJ
+0.97 0 0 1 260.451 293.313 Tm [<0053>-214<0055>]TJ
+0.98 0 0 1 269.61 293.313 Tm [<00490042004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 286.887 293.313 Tm [<0059>]TJ
+0.98 0 0 1 291.546 293.313 Tm [<0056>]TJ
+0.97 0 0 1 296.252 293.313 Tm [<004C>]TJ
+0.98 0 0 1 300.91 293.313 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 310.323 293.313 Tm [<000D>-217<004A0055>-214<004A>]TJ
+0.98 0 0 1 325.465 293.313 Tm [<0054>-212<005400440042>]TJ
+0.97 0 0 1 343.738 293.313 Tm [<004D>]TJ
+0.98 0 0 1 346.212 293.313 Tm [<00460045>]TJ
+0.97 0 0 1 357.718 293.313 Tm [<0055>]TJ
+0.98 0 0 1 361.178 293.313 Tm [<0050>]TJ
+0.97 0 0 1 368.184 293.313 Tm [<0055>]TJ
+0.98 0 0 1 371.644 293.313 Tm [<00490046>-212<004500460054>]TJ
+0.97 0 0 1 396.731 293.313 Tm [<004A0053>]TJ
+0.98 0 0 1 402.926 293.313 Tm [<00460045>-212<0045>]TJ
+0.97 0 0 1 419.519 293.313 Tm [<004A>]TJ
+0.98 0 0 1 422.09 293.313 Tm [<004E0046004F0054>]TJ
+0.97 0 0 1 443.725 293.313 Tm [<004A>]TJ
+0.98 0 0 1 446.296 293.313 Tm [<0050004F>]TJ
+0.97 0 0 1 458.75 293.313 Tm [<004A0047>-214<0055>]TJ
+0.98 0 0 1 470.083 293.313 Tm [<0049>]TJ
+0.97 0 0 1 475.404 293.313 Tm [<004A>]TJ
+0.98 0 0 1 477.975 293.313 Tm [<0054>]TJ
+1 0 0 1 113.386 281.358 Tm [<0042005500550053004A0043005600550046>-220<004A0054>-220<005400460055>-220<00550050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 185.764 281.358 Tm [<0057005500580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 204.974 281.358 Tm [<000F>-293<02650046>-220<004300420045>-220<004F004600580054>-220<004A0054>-220<004A0055>-220<004A0054>-220<0042004D00540050>-220<005400440042004D00460045>-220<004900500053004A005B0050004F00550042004D004D005A000D>-220<00550050>-220<004C004600460051>-220<0051005300500051005000530055004A0050004F0054000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 245.493 Tm [<00240050004F00550046004F0055>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 221.582 Tm [<0048005900480055005C0056004F004C00470048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 221.582 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 221.582 Tm [<0046005200470048>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 221.582 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 221.582 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 221.582 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 221.582 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 221.582 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<002E0042005500460053004A0042004D>-220<004A004F005400460053005500460045>-220<00420055>-220<005500490046>-220<004300460048004A004F004F004A004F0048>-220<00500047>-220<0046004200440049>-220<0054004D004A00450046>-220<0009004A004F>-220<0057004600530055004A00440042004D>-220<004E005000450046000A000F>-293<002700500053>-220<004A004F005400550042004F00440046>-220<00420047005500460053>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 209.179 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 209.179 Tm [<002200450045004A004F0048>-200<004E0042005500460053004A0042004D>-200<00550050>]TJ
+1 0 0 1 506.756 200.213 Tm [<00420053004600420054>]TJ
+0 g 0 G
+/F111 7.97011 Tf 1 0 0 1 113.386 185.717 Tm [<003F0056004800570056004F004C00470048005E0050005C0056004F004C004700480060>]TJ
+1 0 0 1 113.386 173.762 Tm [<000300030048005900480055005C0056004F004C0047004800030020000300B5003F005300520056004C0057004C00520051>-1<005E0057004C0057004F00480060005E003F0056004F004C004700480057004C0057004F0048006000B5>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 149.851 Tm [<0055>]TJ
+1.02 0 0 1 117.059 149.851 Tm [<00490046>]TJ
+1.03 0 0 1 129.785 149.851 Tm [<0055004A0055004D>]TJ
+1.02 0 0 1 142.489 149.851 Tm [<0046>]TJ
+1.03 0 0 1 147.011 149.851 Tm [<0008>]TJ
+1.02 0 0 1 149.084 149.851 Tm [<0054>-262<0054>]TJ
+1.03 0 0 1 159.899 149.851 Tm [<004D004A>]TJ
+1.02 0 0 1 165.255 149.851 Tm [<00450046>-262<0058>]TJ
+1.03 0 0 1 184.647 149.851 Tm [<004A004D004D>]TJ
+1.02 0 0 1 195.296 149.851 Tm [<00430046>]TJ
+1.03 0 0 1 207.655 149.851 Tm [<004A>]TJ
+1.02 0 0 1 210.385 149.851 Tm [<004F00540046>]TJ
+1.03 0 0 1 224.652 149.851 Tm [<00530055>]TJ
+1.02 0 0 1 232.174 149.851 Tm [<00460045>]TJ
+1.03 0 0 1 244.655 149.851 Tm [<004A>]TJ
+1.02 0 0 1 247.385 149.851 Tm [<004F>]TJ
+1.03 0 0 1 255.721 149.851 Tm [<0055>]TJ
+1.02 0 0 1 259.394 149.851 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 272.12 149.851 Tm [<0057004C0057004F>]TJ
+1.02 0 0 1 291.905 149.851 Tm [<0048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 299.469 149.851 Tm [<0042>]TJ
+1.03 0 0 1 304.082 149.851 Tm [<0053>]TJ
+1.02 0 0 1 307.93 149.851 Tm [<00460042>]TJ
+1.03 0 0 1 319.731 149.851 Tm [<0047>]TJ
+1.02 0 0 1 323.158 149.851 Tm [<0050>]TJ
+1.03 0 0 1 328.29 149.851 Tm [<0053>]TJ
+1.02 0 0 1 334.803 149.851 Tm [<0046004200440049>-262<0054>]TJ
+1.03 0 0 1 360.313 149.851 Tm [<004D004A>]TJ
+1.02 0 0 1 365.669 149.851 Tm [<00450046>-262<00440042>]TJ
+1.03 0 0 1 386.86 149.851 Tm [<004D004D>]TJ
+1.02 0 0 1 392.113 149.851 Tm [<00460045>-262<0058>]TJ
+1.03 0 0 1 411.505 149.851 Tm [<004A0055>]TJ
+1.02 0 0 1 417.908 149.851 Tm [<0049>]TJ
+1.03 0 0 1 426.112 149.851 Tm [<0055>]TJ
+1.02 0 0 1 429.785 149.851 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 442.511 149.851 Tm [<003F>]TJ
+1.02 0 0 1 447.457 149.851 Tm [<0050>]TJ
+1.03 0 0 1 452.356 149.851 Tm [<005C>]TJ
+1.02 0 0 1 457.302 149.851 Tm [<0056>]TJ
+1.03 0 0 1 462.2 149.851 Tm [<004F004C>]TJ
+1.02 0 0 1 472.093 149.851 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [<00440050004E004E0042004F0045000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01E9>]TJ
+ET
+endstream
+endobj
+74 0 obj <<
+/Type /Page
+/Contents 75 0 R
+/Resources 73 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 53 0 R
+/Annots [ 72 0 R 81 0 R ]
+>> endobj
+72 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 207.226 573.358 214.758]
+/A << /S /GoTo /D (ptx@section_link:16) >>
+>> endobj
+81 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 200.117 523.135 203.664]
+/A << /S /GoTo /D (ptx@section_link:16) >>
+>> endobj
+76 0 obj <<
+/D [74 0 R /XYZ 113.386 482.335 null]
+>> endobj
+77 0 obj <<
+/D [74 0 R /XYZ 113.386 410.424 null]
+>> endobj
+78 0 obj <<
+/D [74 0 R /XYZ 113.386 314.783 null]
+>> endobj
+79 0 obj <<
+/D [74 0 R /XYZ 113.386 255.007 null]
+>> endobj
+80 0 obj <<
+/D [74 0 R /XYZ 113.386 233.418 null]
+>> endobj
+73 0 obj <<
+/Font << /F111 6 0 R /F105 5 0 R /F63 7 0 R /F123 17 0 R /F7 46 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+88 0 obj <<
+/Length 38679
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 87.183 640.013 Tm [<00440055004800440056>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<004F004C00560057>-602<00520049>-603<00440055004800440056>]TJ
+/F7 9.96264 Tf 1 0 0 1 183.565 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 201.276 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 204.544 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 238.128 640.013 Tm [<0044004F004F>]TJ
+/F63 9.96264 Tf 1 0 0 1 252.535 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<0265004A0054>-222<00450046004F0050005500460054>-222<005500490046>-223<00420053004600420054>-222<0055004900420055>-223<004E0042005A>-222<004200510051004600420053>-222<0050004F>-223<0042>-222<0048004A00570046004F>-223<0054004D004A00450046000F>-300<02650046>-223<004C0046005A0058005000530045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 396.152 628.058 Tm [<0044004F004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 410.559 628.058 Tm [<000D>-223<00580049004A00440049>-222<004A0054>-222<00450046004700420056004D0055000D>]TJ
+0.98 0 0 1 113.386 616.103 Tm [<004E00460042004F0054>]TJ
+0.97 0 0 1 141.286 616.103 Tm [<0055>]TJ
+0.98 0 0 1 144.746 616.103 Tm [<00490042>]TJ
+0.97 0 0 1 154.5 616.103 Tm [<0055>]TJ
+0.98 0 0 1 159.792 616.103 Tm [<0042>]TJ
+0.97 0 0 1 164.224 616.103 Tm [<004D004D>]TJ
+0.98 0 0 1 171.004 616.103 Tm [<0042>]TJ
+0.97 0 0 1 175.437 616.103 Tm [<0053>]TJ
+0.98 0 0 1 179.061 616.103 Tm [<004600420054>-187<0058>]TJ
+0.97 0 0 1 200.225 616.103 Tm [<004A004D004D>]TJ
+0.98 0 0 1 209.575 616.103 Tm [<00430046>-187<00510042>]TJ
+0.97 0 0 1 230.251 616.103 Tm [<004A>]TJ
+0.98 0 0 1 232.821 616.103 Tm [<004F>]TJ
+0.97 0 0 1 238.269 616.103 Tm [<0055>]TJ
+0.98 0 0 1 241.729 616.103 Tm [<00460045>]TJ
+0.97 0 0 1 252.993 616.103 Tm [<0009>]TJ
+0.98 0 0 1 256.163 616.103 Tm [<0051>]TJ
+0.97 0 0 1 261.259 616.103 Tm [<0053>]TJ
+0.98 0 0 1 264.883 616.103 Tm [<0050>]TJ
+0.97 0 0 1 269.813 616.103 Tm [<0057004A>]TJ
+0.98 0 0 1 276.955 616.103 Tm [<004500460045>]TJ
+0.97 0 0 1 293.305 616.103 Tm [<0055>]TJ
+0.98 0 0 1 296.765 616.103 Tm [<00490046>]TJ
+0.97 0 0 1 306.431 616.103 Tm [<005A>]TJ
+0.98 0 0 1 312.728 616.103 Tm [<0042>]TJ
+0.97 0 0 1 317.16 616.103 Tm [<0053>]TJ
+0.98 0 0 1 320.784 616.103 Tm [<0046>]TJ
+0.97 0 0 1 326.961 616.103 Tm [<0057004A>]TJ
+0.98 0 0 1 334.103 616.103 Tm [<0054>]TJ
+0.97 0 0 1 338.018 616.103 Tm [<004A>]TJ
+0.98 0 0 1 340.588 616.103 Tm [<0043>]TJ
+0.97 0 0 1 345.558 616.103 Tm [<004D>]TJ
+0.98 0 0 1 348.032 616.103 Tm [<0046>-187<0050>]TJ
+0.97 0 0 1 359.14 616.103 Tm [<0053>]TJ
+0.98 0 0 1 364.596 616.103 Tm [<00440050004F>]TJ
+0.97 0 0 1 378.909 616.103 Tm [<0055>]TJ
+0.98 0 0 1 382.368 616.103 Tm [<0042>]TJ
+0.97 0 0 1 386.801 616.103 Tm [<004A>]TJ
+0.98 0 0 1 389.372 616.103 Tm [<004F>-187<004E0042>]TJ
+0.97 0 0 1 409.012 616.103 Tm [<0055>]TJ
+0.98 0 0 1 412.472 616.103 Tm [<0046>]TJ
+0.97 0 0 1 416.817 616.103 Tm [<0053004A>]TJ
+0.98 0 0 1 423.011 616.103 Tm [<0042>]TJ
+0.97 0 0 1 427.444 616.103 Tm [<004D000A000F>]TJ
+0.985 0 0 1 438.258 616.103 Tm [<0030>]TJ
+0.97 0 0 1 445.303 616.103 Tm [<0055>]TJ
+0.98 0 0 1 448.763 616.103 Tm [<00490046>]TJ
+0.97 0 0 1 458.429 616.103 Tm [<0053>]TJ
+0.98 0 0 1 462.053 616.103 Tm [<0058>]TJ
+0.97 0 0 1 468.692 616.103 Tm [<004A>]TJ
+0.98 0 0 1 471.262 616.103 Tm [<00540046>]TJ
+0.97 0 0 1 479.522 616.103 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 113.386 604.148 Tm [<004F004C>]TJ
+0.98 0 0 1 122.702 604.148 Tm [<0056>]TJ
+0.97 0 0 1 127.409 604.148 Tm [<0057>]TJ
+0.98 0 0 1 136.869 604.148 Tm [<0052>]TJ
+0.97 0 0 1 141.575 604.148 Tm [<0049>]TJ
+0.98 0 0 1 151.036 604.148 Tm [<0044>]TJ
+0.97 0 0 1 155.742 604.148 Tm [<0055>]TJ
+0.98 0 0 1 160.4 604.148 Tm [<004800440056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 176.17 604.148 Tm [<0046004F0056004E0046>]TJ
+0.97 0 0 1 203.39 604.148 Tm [<0053>]TJ
+0.98 0 0 1 207.014 604.148 Tm [<0042>]TJ
+0.97 0 0 1 211.447 604.148 Tm [<0055>]TJ
+0.98 0 0 1 214.907 604.148 Tm [<00460054>-169<0042>]TJ
+0.97 0 0 1 229.25 604.148 Tm [<004D004D>]TJ
+0.98 0 0 1 234.198 604.148 Tm [<0050005800460045>-169<0042>]TJ
+0.97 0 0 1 261.282 604.148 Tm [<0053>]TJ
+0.98 0 0 1 264.906 604.148 Tm [<004600420054>]TJ
+0.97 0 0 1 277.599 604.148 Tm [<000D>]TJ
+0.98 0 0 1 281.726 604.148 Tm [<0054004600510042>]TJ
+0.97 0 0 1 299.514 604.148 Tm [<0053>]TJ
+0.98 0 0 1 303.138 604.148 Tm [<0042>]TJ
+0.97 0 0 1 307.571 604.148 Tm [<0055004A>]TJ
+0.98 0 0 1 313.601 604.148 Tm [<004F0048>]TJ
+0.97 0 0 1 325.25 604.148 Tm [<0055>]TJ
+0.98 0 0 1 328.709 604.148 Tm [<00490046004E>-169<0058>]TJ
+0.97 0 0 1 354.593 604.148 Tm [<004A0055>]TJ
+0.98 0 0 1 360.623 604.148 Tm [<0049>-169<00540051004200440046>]TJ
+0.97 0 0 1 389.319 604.148 Tm [<000F>-283<002A0047>]TJ
+0.98 0 0 1 402.438 604.148 Tm [<0042004F>-169<0042>]TJ
+0.97 0 0 1 418.403 604.148 Tm [<0053>]TJ
+0.98 0 0 1 422.026 604.148 Tm [<00460042>]TJ
+0.97 0 0 1 432.455 604.148 Tm [<004A>]TJ
+0.98 0 0 1 435.025 604.148 Tm [<0054004F>]TJ
+0.97 0 0 1 444.388 604.148 Tm [<00080055>]TJ
+0.98 0 0 1 451.451 604.148 Tm [<00510042>]TJ
+0.97 0 0 1 460.98 604.148 Tm [<004A>]TJ
+0.98 0 0 1 463.551 604.148 Tm [<004F>]TJ
+0.97 0 0 1 468.999 604.148 Tm [<0055>]TJ
+0.98 0 0 1 472.458 604.148 Tm [<00460045>]TJ
+0.99 0 0 1 113.386 592.193 Tm [<0050004F>-219<0042>-220<0054>]TJ
+0.985 0 0 1 136.636 592.193 Tm [<004D004A>]TJ
+0.99 0 0 1 141.759 592.193 Tm [<00450046>-219<00430056>]TJ
+0.985 0 0 1 163.681 592.193 Tm [<0055>]TJ
+0.99 0 0 1 169.361 592.193 Tm [<004F0050004F0046>]TJ
+0.985 0 0 1 189.738 592.193 Tm [<0055>]TJ
+0.99 0 0 1 193.251 592.193 Tm [<00490046>]TJ
+0.985 0 0 1 203.015 592.193 Tm [<004D>]TJ
+0.99 0 0 1 205.527 592.193 Tm [<004600540054>-219<00440050004F>]TJ
+0.985 0 0 1 234.452 592.193 Tm [<0055>]TJ
+0.99 0 0 1 237.965 592.193 Tm [<0042>]TJ
+0.985 0 0 1 242.443 592.193 Tm [<004A>]TJ
+0.99 0 0 1 245.053 592.193 Tm [<004F0054>-219<004E0042>]TJ
+0.985 0 0 1 269.165 592.193 Tm [<0055>]TJ
+0.99 0 0 1 272.678 592.193 Tm [<0046>]TJ
+0.985 0 0 1 277.067 592.193 Tm [<0053004A>]TJ
+0.99 0 0 1 283.358 592.193 Tm [<0042>]TJ
+0.985 0 0 1 287.835 592.193 Tm [<004D000D>-221<0055>]TJ
+0.99 0 0 1 298.437 592.193 Tm [<0049>]TJ
+0.985 0 0 1 303.812 592.193 Tm [<004A>]TJ
+0.99 0 0 1 306.422 592.193 Tm [<0054>-219<004E0042>]TJ
+0.985 0 0 1 325.03 592.193 Tm [<0055>]TJ
+0.99 0 0 1 328.544 592.193 Tm [<0046>]TJ
+0.985 0 0 1 332.933 592.193 Tm [<0053004A>]TJ
+0.99 0 0 1 339.223 592.193 Tm [<0042>]TJ
+0.985 0 0 1 343.701 592.193 Tm [<004D>-220<004A>]TJ
+0.99 0 0 1 350.99 592.193 Tm [<0054>]TJ
+0.985 0 0 1 357.111 592.193 Tm [<004D>]TJ
+0.99 0 0 1 359.624 592.193 Tm [<00500054>]TJ
+0.985 0 0 1 368.559 592.193 Tm [<0055>-220<0009>]TJ
+0.99 0 0 1 377.458 592.193 Tm [<0042004F0045>-219<004F0050>]TJ
+0.985 0 0 1 405.229 592.193 Tm [<0055>]TJ
+0.99 0 0 1 410.909 592.193 Tm [<0046>]TJ
+0.985 0 0 1 415.298 592.193 Tm [<0057>]TJ
+0.99 0 0 1 419.939 592.193 Tm [<0046004F>-219<0051>]TJ
+0.985 0 0 1 437.147 592.193 Tm [<0053>]TJ
+0.99 0 0 1 440.827 592.193 Tm [<0050004400460054005400460045>]TJ
+0.985 0 0 1 473.776 592.193 Tm [<004A>]TJ
+0.99 0 0 1 476.386 592.193 Tm [<004F>]TJ
+1 0 0 1 113.386 580.238 Tm [<005500490046>-220<00EB005300540055>-220<0051004D004200440046000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 556.327 Tm [<00440055004800440056000D>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 556.327 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 556.327 Tm [<004F004C00560057>-602<00520049>-603<00440055004800440056>]TJ
+/F7 9.96264 Tf 1 0 0 1 183.565 556.327 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 201.276 556.327 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 204.544 556.327 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 238.128 556.327 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 257.337 556.327 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 544.372 Tm [<02650046>-220<004D004A00540055>-220<00500047>-220<004600590044004D0056004500460045>-220<00420053004600420054000D>-220<004A000F0046000F>-293<005500490046>-220<0053004600570046005300540046>-220<00500047>-220<005500490046>-220<0051005300460057004A005000560054>-220<0042005500550053004A0043005600550046000F>-294<00220053004600420054>-220<00430046004D0050004F0048004A004F0048>-220<00550050>-220<0055004900420055>]TJ
+1.03 0 0 1 113.386 532.417 Tm [<004D004A>]TJ
+1.02 0 0 1 118.742 532.417 Tm [<0054>]TJ
+1.03 0 0 1 122.817 532.417 Tm [<0055>]TJ
+1.02 0 0 1 128.835 532.417 Tm [<0042>]TJ
+1.03 0 0 1 133.449 532.417 Tm [<0053>]TJ
+1.02 0 0 1 137.297 532.417 Tm [<0046004F>]TJ
+1.03 0 0 1 147.489 532.417 Tm [<00080055>]TJ
+1.02 0 0 1 155.58 532.417 Tm [<00510042>]TJ
+1.03 0 0 1 165.498 532.417 Tm [<004A>]TJ
+1.02 0 0 1 168.228 532.417 Tm [<004F>]TJ
+1.03 0 0 1 173.898 532.417 Tm [<0055>]TJ
+1.02 0 0 1 177.572 532.417 Tm [<00460045>-230<0050004F>]TJ
+1.03 0 0 1 202.879 532.417 Tm [<0055>]TJ
+1.02 0 0 1 206.553 532.417 Tm [<00490046>-230<0054>]TJ
+1.03 0 0 1 223.032 532.417 Tm [<004D004A>]TJ
+1.02 0 0 1 228.389 532.417 Tm [<00450046>]TJ
+1.03 0 0 1 238.205 532.417 Tm [<000F>-329<002A0047>]TJ
+1.02 0 0 1 253.196 532.417 Tm [<0042004F>-230<0042>]TJ
+1.03 0 0 1 270.438 532.417 Tm [<0053>]TJ
+1.02 0 0 1 274.286 532.417 Tm [<00460042>-230<00420051005100460042>]TJ
+1.03 0 0 1 310.124 532.417 Tm [<0053>]TJ
+1.02 0 0 1 313.972 532.417 Tm [<0054>]TJ
+1.03 0 0 1 320.391 532.417 Tm [<004A>]TJ
+1.02 0 0 1 323.121 532.417 Tm [<004F>-230<00430050>]TJ
+1.03 0 0 1 341.44 532.417 Tm [<0055>]TJ
+1.02 0 0 1 345.113 532.417 Tm [<0049>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 352.996 532.417 Tm [<0044>]TJ
+1.03 0 0 1 357.894 532.417 Tm [<0055>]TJ
+1.02 0 0 1 362.841 532.417 Tm [<004800440056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 379.88 532.417 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 397.803 532.417 Tm [<0044>]TJ
+1.03 0 0 1 402.701 532.417 Tm [<0055>]TJ
+1.02 0 0 1 407.647 532.417 Tm [<004800440056>]TJ
+1.03 0 0 1 422.342 532.417 Tm [<000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 427.289 532.417 Tm [<000D>-232<004A0055>-228<004A>]TJ
+1.02 0 0 1 443.662 532.417 Tm [<0054>-230<00510042>]TJ
+1.03 0 0 1 460 532.417 Tm [<004A>]TJ
+1.02 0 0 1 462.729 532.417 Tm [<004F>]TJ
+1.03 0 0 1 468.4 532.417 Tm [<0055>]TJ
+1.02 0 0 1 472.073 532.417 Tm [<00460045>]TJ
+1 0 0 1 113.386 520.462 Tm [<0056004F004D004600540054>-220<004A0054>-220<004A0054>-220<0054004A004E0051004D005A>-220<004A004E0051004D004A0044004A00550046004D005A>-220<00510053004600540046004F0055>-220<004A004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 276.992 520.462 Tm [<00440055004800440056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 303.196 520.462 Tm [<0058004A00550049>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 323.808 520.462 Tm [<0044004F004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 338.215 520.462 Tm [<000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 484.596 Tm [<00340055005A004D0046>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 460.686 Tm [<004500440046004E004A00550052005800510047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 460.686 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 460.686 Tm [<00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<0056004B004400470048>-602<00520055>-603<00460052004F00520055>-603<0048005B00530055004800560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 313.227 460.686 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 330.938 460.686 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 334.206 460.686 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 367.79 460.686 Tm [<005A004B004C00570048>]TJ
+/F63 9.96264 Tf 1 0 0 1 391.801 460.686 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 448.731 Tm [<02650046>-220<004300420044004C0048005300500056004F0045>-220<00440050004D00500053>-220<00500047>-220<005500490046>-220<0054004D004A00450046000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 448.282 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 448.282 Tm [<00240050004D005000530054000D>-200<005400490042004500460054000D>-200<0042004F0045>]TJ
+1 0 0 1 506.756 439.316 Tm [<004A004E0042004800460054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 424.82 Tm [<0049005200550048004A00550052005800510047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 424.82 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 424.82 Tm [<00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B005300550048>-1<00560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 270.006 424.82 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 287.717 424.82 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 290.985 424.82 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 324.569 424.82 Tm [<0045004F00440046004E>]TJ
+/F63 9.96264 Tf 1 0 0 1 348.581 424.82 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 412.865 Tm [<02650046>-220<0054004D004A0045004600080054>-220<00470050005300460048005300500056004F0045>-220<00440050004D00500053000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 388.955 Tm [<004C00500044004A0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 388.955 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 388.955 Tm [<004C00500044004A0048>]TJ
+/F7 9.96264 Tf 1 0 0 1 145.146 388.955 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 162.857 388.955 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 166.125 388.955 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.709 388.955 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 218.918 388.955 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 377 Tm [<0022>]TJ
+1.02 0 0 1 119.514 377 Tm [<004F>]TJ
+1.03 0 0 1 128.182 377 Tm [<004A>]TJ
+1.02 0 0 1 130.911 377 Tm [<004E004200480046>]TJ
+1.03 0 0 1 156.031 377 Tm [<004A>]TJ
+1.02 0 0 1 158.761 377 Tm [<004F00540046>]TJ
+1.03 0 0 1 173.028 377 Tm [<00530055>]TJ
+1.02 0 0 1 180.55 377 Tm [<00460045>]TJ
+1.03 0 0 1 193.364 377 Tm [<004A>]TJ
+1.02 0 0 1 196.093 377 Tm [<004F>]TJ
+1.03 0 0 1 204.761 377 Tm [<0055>]TJ
+1.02 0 0 1 208.435 377 Tm [<00490046>-294<0054>]TJ
+1.03 0 0 1 225.567 377 Tm [<004D004A>]TJ
+1.02 0 0 1 230.924 377 Tm [<00450046>]TJ
+1.03 0 0 1 240.74 377 Tm [<0008>]TJ
+1.02 0 0 1 242.813 377 Tm [<0054>-295<004300420044004C0048>]TJ
+1.03 0 0 1 273.573 377 Tm [<0053>]TJ
+1.02 0 0 1 277.421 377 Tm [<00500056004F0045>]TJ
+1.03 0 0 1 298.883 377 Tm [<000D>]TJ
+1.02 0 0 1 304.596 377 Tm [<004200430050>]TJ
+1.03 0 0 1 319.514 377 Tm [<0057>]TJ
+1.02 0 0 1 324.367 377 Tm [<0046>]TJ
+1.03 0 0 1 331.887 377 Tm [<0055>]TJ
+1.02 0 0 1 335.561 377 Tm [<00490046>-294<004300420044004C0048>]TJ
+1.03 0 0 1 372.306 377 Tm [<0053>]TJ
+1.02 0 0 1 376.154 377 Tm [<00500056004F0045>-295<00440050>]TJ
+1.03 0 0 1 409.84 377 Tm [<004D>]TJ
+1.02 0 0 1 412.467 377 Tm [<0050>]TJ
+1.03 0 0 1 417.599 377 Tm [<0053000F>-520<0265>]TJ
+1.02 0 0 1 439.716 377 Tm [<0046>]TJ
+1.03 0 0 1 447.236 377 Tm [<004A>]TJ
+1.02 0 0 1 449.965 377 Tm [<004E004200480046>]TJ
+1.03 0 0 1 475.085 377 Tm [<004A>]TJ
+1.02 0 0 1 477.815 377 Tm [<0054>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 376.551 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 376.551 Tm [<002A004E0042004800460054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 113.386 365.044 Tm [<004A>]TJ
+1.005 0 0 1 116.062 365.044 Tm [<004F00540046>]TJ
+1.01 0 0 1 130.12 365.044 Tm [<00530055>]TJ
+1.005 0 0 1 137.496 365.044 Tm [<00460045>-222<0042>]TJ
+1.01 0 0 1 153.946 365.044 Tm [<0055>-221<0055>]TJ
+1.005 0 0 1 163.382 365.044 Tm [<00490046>-223<0054>]TJ
+1.01 0 0 1 179.542 365.044 Tm [<004D004A>]TJ
+1.005 0 0 1 184.795 365.044 Tm [<00450046>]TJ
+1.01 0 0 1 194.467 365.044 Tm [<0008>]TJ
+1.005 0 0 1 196.499 365.044 Tm [<0054>-223<0056005100510046>]TJ
+1.01 0 0 1 222.942 365.044 Tm [<0053>-221<004D>]TJ
+1.005 0 0 1 231.523 365.044 Tm [<0046>]TJ
+1.01 0 0 1 235.979 365.044 Tm [<00470055>]TJ
+1.005 0 0 1 245.174 365.044 Tm [<00440050>]TJ
+1.01 0 0 1 254.266 365.044 Tm [<0053>]TJ
+1.005 0 0 1 258.039 365.044 Tm [<004F0046>]TJ
+1.01 0 0 1 268.081 365.044 Tm [<0053000D>]TJ
+1.005 0 0 1 276.563 365.044 Tm [<0042004F0045>-222<004900420054>]TJ
+1.01 0 0 1 310.394 365.044 Tm [<0055>]TJ
+1.005 0 0 1 313.996 365.044 Tm [<00490046>-223<0058>]TJ
+1.01 0 0 1 332.949 365.044 Tm [<004A>]TJ
+1.005 0 0 1 335.626 365.044 Tm [<0045>]TJ
+1.01 0 0 1 340.842 365.044 Tm [<0055>]TJ
+1.005 0 0 1 344.445 365.044 Tm [<0049>-222<0042004F0045>-223<00490046>]TJ
+1.01 0 0 1 379.628 365.044 Tm [<004A>]TJ
+1.005 0 0 1 382.304 365.044 Tm [<00480049>]TJ
+1.01 0 0 1 392.427 365.044 Tm [<0055>-221<004A0055>]TJ
+1.005 0 0 1 406.773 365.044 Tm [<005800420054>-222<004500460044>]TJ
+1.01 0 0 1 438.081 365.044 Tm [<004D>]TJ
+1.005 0 0 1 440.657 365.044 Tm [<0042>]TJ
+1.01 0 0 1 445.203 365.044 Tm [<0053>]TJ
+1.005 0 0 1 448.976 365.044 Tm [<00460045>-223<0058>]TJ
+1.01 0 0 1 467.689 365.044 Tm [<004A0055>]TJ
+1.005 0 0 1 473.968 365.044 Tm [<0049>]TJ
+1.01 0 0 1 479.424 365.044 Tm [<000F>]TJ
+0.98 0 0 1 113.386 353.089 Tm [<0034>]TJ
+0.97 0 0 1 118.189 353.089 Tm [<004A>]TJ
+0.98 0 0 1 120.76 353.089 Tm [<004F00440046>]TJ
+0.97 0 0 1 136.662 353.089 Tm [<0055>]TJ
+0.98 0 0 1 140.122 353.089 Tm [<0049>]TJ
+0.97 0 0 1 145.443 353.089 Tm [<004A>]TJ
+0.98 0 0 1 148.013 353.089 Tm [<0054>-222<00510042>]TJ
+0.97 0 0 1 163.632 353.089 Tm [<0053>]TJ
+0.98 0 0 1 167.256 353.089 Tm [<0042004E0046>]TJ
+0.97 0 0 1 183.961 353.089 Tm [<0055>]TJ
+0.98 0 0 1 187.421 353.089 Tm [<0046>]TJ
+0.97 0 0 1 191.765 353.089 Tm [<0053>-225<004A>]TJ
+0.98 0 0 1 200.134 353.089 Tm [<0054>]TJ
+0.97 0 0 1 206.224 353.089 Tm [<004A>]TJ
+0.98 0 0 1 208.795 353.089 Tm [<004F00490046>]TJ
+0.97 0 0 1 223.908 353.089 Tm [<0053004A0055>]TJ
+0.98 0 0 1 233.563 353.089 Tm [<00460045>]TJ
+0.97 0 0 1 242.994 353.089 Tm [<000D>-225<0055>]TJ
+0.98 0 0 1 250.999 353.089 Tm [<0050>-222<00440042004F00440046>]TJ
+0.97 0 0 1 280.199 353.089 Tm [<004D>-225<004A0055>]TJ
+0.98 0 0 1 293.052 353.089 Tm [<0048>]TJ
+0.97 0 0 1 297.602 353.089 Tm [<004A0057>]TJ
+0.98 0 0 1 304.744 353.089 Tm [<0046>-222<00420054>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 321.785 353.089 Tm [<001F004C>]TJ
+0.98 0 0 1 331.102 353.089 Tm [<00500044004A0048>]TJ
+0.97 0 0 1 349.927 353.089 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 357.587 353.089 Tm [<0042004F>]TJ
+0.97 0 0 1 367.467 353.089 Tm [<005A>]TJ
+0.98 0 0 1 374.106 353.089 Tm [<004F0042004E0046>]TJ
+0.97 0 0 1 398.434 353.089 Tm [<0055>]TJ
+0.98 0 0 1 401.894 353.089 Tm [<00490042>]TJ
+0.97 0 0 1 411.647 353.089 Tm [<0055>-225<004A>]TJ
+0.98 0 0 1 419.852 353.089 Tm [<0054>-222<004F0050>]TJ
+0.97 0 0 1 436.32 353.089 Tm [<0055>]TJ
+0.98 0 0 1 441.955 353.089 Tm [<0042>-222<004500460044>]TJ
+0.97 0 0 1 461.928 353.089 Tm [<004D>]TJ
+0.98 0 0 1 464.402 353.089 Tm [<0042>]TJ
+0.97 0 0 1 468.834 353.089 Tm [<0053>]TJ
+0.98 0 0 1 472.458 353.089 Tm [<00460045>]TJ
+0.97 0 0 1 113.386 341.134 Tm [<004A>]TJ
+0.98 0 0 1 115.956 341.134 Tm [<004E004200480046>]TJ
+0.97 0 0 1 137.211 341.134 Tm [<001C>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 141.619 341.134 Tm [<002D>]TJ
+0.98 0 0 1 146.576 341.134 Tm [<00460044>]TJ
+0.97 0 0 1 154.035 341.134 Tm [<0055>]TJ
+0.98 0 0 1 157.369 341.134 Tm [<0056>]TJ
+0.97 0 0 1 162.124 341.134 Tm [<0053>]TJ
+0.98 0 0 1 165.642 341.134 Tm [<0046>]TJ
+0.97 0 0 1 169.586 341.134 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 175.067 341.134 Tm [<004A>]TJ
+0.98 0 0 1 177.638 341.134 Tm [<0054>]TJ
+0.97 0 0 1 183.517 341.134 Tm [<004A>]TJ
+0.98 0 0 1 186.087 341.134 Tm [<004F>]TJ
+0.97 0 0 1 193.499 341.134 Tm [<0055>]TJ
+0.98 0 0 1 196.958 341.134 Tm [<00490046>-201<004E>]TJ
+0.97 0 0 1 216.516 341.134 Tm [<004A>]TJ
+0.98 0 0 1 219.086 341.134 Tm [<00450045>]TJ
+0.97 0 0 1 229.26 341.134 Tm [<004D>]TJ
+0.98 0 0 1 231.734 341.134 Tm [<0046>-201<0050>]TJ
+0.97 0 0 1 242.972 341.134 Tm [<0047>]TJ
+0.98 0 0 1 248.164 341.134 Tm [<0042>-201<00540049>]TJ
+0.97 0 0 1 263.796 341.134 Tm [<004A>]TJ
+0.98 0 0 1 266.367 341.134 Tm [<005100500056>]TJ
+0.97 0 0 1 281.549 341.134 Tm [<0055>]TJ
+0.98 0 0 1 286.972 341.134 Tm [<005800490046004F>]TJ
+0.97 0 0 1 310.688 341.134 Tm [<004A0055>-203<0053>]TJ
+0.98 0 0 1 322.306 341.134 Tm [<0046004200450054>]TJ
+0.97 0 0 1 342.049 341.134 Tm [<0055>]TJ
+0.98 0 0 1 345.508 341.134 Tm [<0049>]TJ
+0.97 0 0 1 350.829 341.134 Tm [<004A>]TJ
+0.98 0 0 1 353.4 341.134 Tm [<0054>-201<0042>]TJ
+0.97 0 0 1 363.711 341.134 Tm [<005500550053004A>]TJ
+0.98 0 0 1 376.825 341.134 Tm [<00430056>]TJ
+0.97 0 0 1 386.95 341.134 Tm [<0055>]TJ
+0.98 0 0 1 390.409 341.134 Tm [<0046>]TJ
+0.97 0 0 1 394.754 341.134 Tm [<000D>]TJ
+0.98 0 0 1 399.131 341.134 Tm [<00540050>-201<00450050004F>]TJ
+0.97 0 0 1 425.405 341.134 Tm [<00080055>]TJ
+0.98 0 0 1 432.781 341.134 Tm [<00580050>]TJ
+0.97 0 0 1 444.35 341.134 Tm [<00530053005A000D>-207<005A>]TJ
+0.98 0 0 1 464.904 341.134 Tm [<00500056>]TJ
+0.97 0 0 1 474.99 341.134 Tm [<0008004D004D>]TJ
+1 0 0 1 113.386 329.179 Tm [<004800460055>-220<004F0050>-220<00460053005300500053>-220<004E004600540054004200480046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 305.269 Tm [<0049005200510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 305.269 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 305.269 Tm [<0049005200510057>-602<0046005200500050004400510047>]TJ
+/F7 9.96264 Tf 1 0 0 1 178.762 305.269 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 196.474 305.269 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 199.741 305.269 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 233.325 305.269 Tm [<004D0052004500B70056>-602<0049005200510057>]TJ
+/F63 9.96264 Tf 1 0 0 1 281.348 305.269 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 113.386 293.313 Tm [<0265>]TJ
+0.99 0 0 1 123.346 293.313 Tm [<0046>]TJ
+0.985 0 0 1 129.942 293.313 Tm [<0047>]TJ
+0.99 0 0 1 133.22 293.313 Tm [<0050004F>]TJ
+0.985 0 0 1 143.704 293.313 Tm [<0055>]TJ
+0.99 0 0 1 149.425 293.313 Tm [<0056005400460045>]TJ
+0.985 0 0 1 170.322 293.313 Tm [<0055>]TJ
+0.99 0 0 1 173.835 293.313 Tm [<0050>]TJ
+0.985 0 0 1 181.023 293.313 Tm [<0055005A>]TJ
+0.99 0 0 1 189.07 293.313 Tm [<0051004600540046>]TJ
+0.985 0 0 1 206.952 293.313 Tm [<0055>-224<0055>]TJ
+0.99 0 0 1 216.185 293.313 Tm [<00490046>-223<0054>]TJ
+0.985 0 0 1 232.112 293.313 Tm [<004D004A>]TJ
+0.99 0 0 1 237.234 293.313 Tm [<00450046>]TJ
+0.985 0 0 1 246.762 293.313 Tm [<000F>-302<0265004A>]TJ
+0.99 0 0 1 264.706 293.313 Tm [<0054>]TJ
+0.985 0 0 1 270.868 293.313 Tm [<004A>]TJ
+0.99 0 0 1 273.478 293.313 Tm [<0054>-223<00420044>]TJ
+0.985 0 0 1 288.093 293.313 Tm [<0055>]TJ
+0.99 0 0 1 291.606 293.313 Tm [<00560042>]TJ
+0.985 0 0 1 301.292 293.313 Tm [<004D004D005A>-224<004B>]TJ
+0.99 0 0 1 315.451 293.313 Tm [<00560054>]TJ
+0.985 0 0 1 324.614 293.313 Tm [<0055>]TJ
+0.99 0 0 1 330.334 293.313 Tm [<0042>-223<0051>]TJ
+0.985 0 0 1 342.168 293.313 Tm [<004D>]TJ
+0.99 0 0 1 344.68 293.313 Tm [<00420044004600490050>]TJ
+0.985 0 0 1 367.878 293.313 Tm [<004D>]TJ
+0.99 0 0 1 370.39 293.313 Tm [<00450046>]TJ
+0.985 0 0 1 379.918 293.313 Tm [<0053>-224<0047>]TJ
+0.99 0 0 1 389.082 293.313 Tm [<0050>]TJ
+0.985 0 0 1 394.063 293.313 Tm [<0053>-224<0047>]TJ
+0.99 0 0 1 403.228 293.313 Tm [<0050004F>]TJ
+0.985 0 0 1 413.712 293.313 Tm [<0055>]TJ
+0.99 0 0 1 419.433 293.313 Tm [<00440050004E004E0042004F00450054>]TJ
+0.985 0 0 1 463.481 293.313 Tm [<000D>]TJ
+0.99 0 0 1 468.096 293.313 Tm [<0046>]TJ
+0.985 0 0 1 472.485 293.313 Tm [<000F>]TJ
+0.99 0 0 1 474.889 293.313 Tm [<0048>]TJ
+0.985 0 0 1 479.486 293.313 Tm [<000F>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 113.386 281.358 Tm [<003F004C0057>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 129.637 281.358 Tm [<0050>]TJ
+0.975 0 0 1 134.567 281.358 Tm [<0053>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 140.414 281.358 Tm [<003F>]TJ
+0.98 0 0 1 145.096 281.358 Tm [<0045>]TJ
+0.975 0 0 1 149.802 281.358 Tm [<0049>]TJ
+0.98 0 0 1 154.485 281.358 Tm [<00560048>]TJ
+0.975 0 0 1 163.897 281.358 Tm [<0055004C>]TJ
+0.98 0 0 1 173.262 281.358 Tm [<00480056>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 182.674 281.358 Tm [<000F>-304<002A0047>-227<0055>]TJ
+0.98 0 0 1 200.086 281.358 Tm [<0049>]TJ
+0.975 0 0 1 205.407 281.358 Tm [<004A>]TJ
+0.98 0 0 1 207.991 281.358 Tm [<0054>-225<0042>]TJ
+0.975 0 0 1 218.543 281.358 Tm [<005500550053004A>]TJ
+0.98 0 0 1 231.724 281.358 Tm [<00430056>]TJ
+0.975 0 0 1 241.849 281.358 Tm [<0055>]TJ
+0.98 0 0 1 245.326 281.358 Tm [<0046>]TJ
+0.975 0 0 1 251.875 281.358 Tm [<004A>]TJ
+0.98 0 0 1 254.459 281.358 Tm [<0054>-225<0056005400460045>]TJ
+0.975 0 0 1 279.08 281.358 Tm [<000D>-227<004A0055>]TJ
+0.98 0 0 1 291.932 281.358 Tm [<0054004900500056>]TJ
+0.975 0 0 1 311.254 281.358 Tm [<004D>]TJ
+0.98 0 0 1 313.741 281.358 Tm [<0045>-225<00430046>-226<0054005100460044>]TJ
+0.975 0 0 1 349.841 281.358 Tm [<004A00EB>]TJ
+0.98 0 0 1 357.874 281.358 Tm [<00460045>]TJ
+0.975 0 0 1 369.509 281.358 Tm [<0047>]TJ
+0.98 0 0 1 372.754 281.358 Tm [<0050>]TJ
+0.975 0 0 1 377.684 281.358 Tm [<0053>]TJ
+0.98 0 0 1 383.531 281.358 Tm [<0042>]TJ
+0.975 0 0 1 387.963 281.358 Tm [<004D004D>]TJ
+0.98 0 0 1 395.141 281.358 Tm [<0054>]TJ
+0.975 0 0 1 399.056 281.358 Tm [<004D004A>]TJ
+0.98 0 0 1 404.127 281.358 Tm [<00450046>]TJ
+0.975 0 0 1 415.762 281.358 Tm [<0055005A>]TJ
+0.98 0 0 1 423.727 281.358 Tm [<005100460054>]TJ
+0.975 0 0 1 437.083 281.358 Tm [<000D>]TJ
+0.98 0 0 1 441.67 281.358 Tm [<0050>]TJ
+0.975 0 0 1 446.601 281.358 Tm [<0053>-226<0055>]TJ
+0.98 0 0 1 455.925 281.358 Tm [<00490046>]TJ
+/F117 7.97011 Tf 0.975 0 0 1 467.795 281.358 Tm [<004D>]TJ
+0.98 0 0 1 472.477 281.358 Tm [<00520045>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 269.403 Tm [<00510042>]TJ
+1.03 0 0 1 123.304 269.403 Tm [<0053>]TJ
+1.02 0 0 1 127.152 269.403 Tm [<0042004E0046>]TJ
+1.03 0 0 1 144.539 269.403 Tm [<0055>]TJ
+1.02 0 0 1 148.213 269.403 Tm [<0046>]TJ
+1.03 0 0 1 152.735 269.403 Tm [<0053>]TJ
+1.02 0 0 1 158.879 269.403 Tm [<0054004900500056>]TJ
+1.03 0 0 1 178.989 269.403 Tm [<004D>]TJ
+1.02 0 0 1 181.616 269.403 Tm [<0045>-226<00490042>]TJ
+1.03 0 0 1 199.358 269.403 Tm [<0057>]TJ
+1.02 0 0 1 204.212 269.403 Tm [<0046>-225<0042>]TJ
+1.03 0 0 1 217.94 269.403 Tm [<0057>]TJ
+1.02 0 0 1 222.793 269.403 Tm [<0042>]TJ
+1.03 0 0 1 227.407 269.403 Tm [<004D>]TJ
+1.02 0 0 1 230.034 269.403 Tm [<00560046>]TJ
+1.03 0 0 1 242.217 269.403 Tm [<0055>]TJ
+1.02 0 0 1 245.891 269.403 Tm [<0050>]TJ
+1.03 0 0 1 253.319 269.403 Tm [<004A0055>]TJ
+1.02 0 0 1 259.722 269.403 Tm [<0054>-225<00500058004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 286.101 269.403 Tm [<0049>]TJ
+1.02 0 0 1 291.047 269.403 Tm [<00520051>]TJ
+1.03 0 0 1 300.844 269.403 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 308.087 269.403 Tm [<0042>]TJ
+1.03 0 0 1 312.7 269.403 Tm [<005500550053004A>]TJ
+1.02 0 0 1 326.625 269.403 Tm [<00430056>]TJ
+1.03 0 0 1 337.163 269.403 Tm [<0055>]TJ
+1.02 0 0 1 340.837 269.403 Tm [<0046>]TJ
+1.03 0 0 1 345.359 269.403 Tm [<000F>]TJ
+1.015 0 0 1 351.108 269.403 Tm [<0030>]TJ
+1.03 0 0 1 358.368 269.403 Tm [<0055>]TJ
+1.02 0 0 1 362.042 269.403 Tm [<00490046>]TJ
+1.03 0 0 1 372.102 269.403 Tm [<0053>]TJ
+1.02 0 0 1 375.95 269.403 Tm [<0058>]TJ
+1.03 0 0 1 382.86 269.403 Tm [<004A>]TJ
+1.02 0 0 1 385.59 269.403 Tm [<00540046>]TJ
+1.03 0 0 1 394.187 269.403 Tm [<000D>-226<004A0047>]TJ
+1.02 0 0 1 407.476 269.403 Tm [<0042>-226<0054>]TJ
+1.03 0 0 1 418.461 269.403 Tm [<004D004A>]TJ
+1.02 0 0 1 423.817 269.403 Tm [<00450046>-226<0058>]TJ
+1.03 0 0 1 442.84 269.403 Tm [<004A0055>]TJ
+1.02 0 0 1 449.243 269.403 Tm [<0049>-225<0042>]TJ
+1.03 0 0 1 463.987 269.403 Tm [<0047>]TJ
+1.02 0 0 1 467.414 269.403 Tm [<0050004F>]TJ
+1.03 0 0 1 478.216 269.403 Tm [<0055>]TJ
+1.02 0 0 1 113.386 257.448 Tm [<004A>]TJ
+1.015 0 0 1 116.089 257.448 Tm [<004F>]TJ
+1.02 0 0 1 121.731 257.448 Tm [<0047>]TJ
+1.015 0 0 1 125.126 257.448 Tm [<0050>]TJ
+1.02 0 0 1 130.232 257.448 Tm [<0053>]TJ
+1.015 0 0 1 134.043 257.448 Tm [<004E0042>]TJ
+1.02 0 0 1 146.845 257.448 Tm [<0055004A>]TJ
+1.015 0 0 1 153.186 257.448 Tm [<0050004F>]TJ
+1.02 0 0 1 166.089 257.448 Tm [<004A>]TJ
+1.015 0 0 1 168.792 257.448 Tm [<0054>]TJ
+1.02 0 0 1 175.001 257.448 Tm [<0047>]TJ
+1.015 0 0 1 178.395 257.448 Tm [<0050>]TJ
+1.02 0 0 1 183.501 257.448 Tm [<004D004D>]TJ
+1.015 0 0 1 188.704 257.448 Tm [<0050005800460045>-213<0043>]TJ
+1.02 0 0 1 217.756 257.448 Tm [<005A>]TJ
+1.015 0 0 1 224.605 257.448 Tm [<0042>-213<0054>]TJ
+1.02 0 0 1 235.405 257.448 Tm [<004D004A>]TJ
+1.015 0 0 1 240.709 257.448 Tm [<00450046>-213<0058>]TJ
+1.02 0 0 1 259.508 257.448 Tm [<004A0055>]TJ
+1.015 0 0 1 265.849 257.448 Tm [<004900500056>]TJ
+1.02 0 0 1 281.805 257.448 Tm [<0055>]TJ
+1.015 0 0 1 287.597 257.448 Tm [<0054005600440049>]TJ
+1.02 0 0 1 308.732 257.448 Tm [<004A>]TJ
+1.015 0 0 1 311.435 257.448 Tm [<004F>]TJ
+1.02 0 0 1 317.077 257.448 Tm [<0047>]TJ
+1.015 0 0 1 320.471 257.448 Tm [<0050>]TJ
+1.02 0 0 1 325.578 257.448 Tm [<0053>]TJ
+1.015 0 0 1 329.389 257.448 Tm [<004E0042>]TJ
+1.02 0 0 1 342.19 257.448 Tm [<0055004A>]TJ
+1.015 0 0 1 348.531 257.448 Tm [<0050004F>]TJ
+1.02 0 0 1 359.281 257.448 Tm [<000D>-212<0055>]TJ
+1.015 0 0 1 367.57 257.448 Tm [<00490046>]TJ
+1.02 0 0 1 379.735 257.448 Tm [<004D>]TJ
+1.015 0 0 1 382.336 257.448 Tm [<0042>]TJ
+1.02 0 0 1 386.927 257.448 Tm [<00550055>]TJ
+1.015 0 0 1 394.203 257.448 Tm [<0046>]TJ
+1.02 0 0 1 398.703 257.448 Tm [<0053>]TJ
+1.015 0 0 1 404.667 257.448 Tm [<0058>]TJ
+1.02 0 0 1 411.543 257.448 Tm [<004A004D004D>]TJ
+1.015 0 0 1 421.603 257.448 Tm [<005600540046>]TJ
+1.02 0 0 1 437.651 257.448 Tm [<0055>]TJ
+1.015 0 0 1 441.289 257.448 Tm [<00490046>]TJ
+1.02 0 0 1 453.454 257.448 Tm [<0047>]TJ
+1.015 0 0 1 456.848 257.448 Tm [<0050004F>]TJ
+1.02 0 0 1 467.597 257.448 Tm [<0055>]TJ
+1.015 0 0 1 473.389 257.448 Tm [<0050>]TJ
+1.02 0 0 1 478.496 257.448 Tm [<0047>]TJ
+1 0 0 1 113.386 245.493 Tm [<005500490046>-220<004700500053004E00460053000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 221.582 Tm [<00570055004400510056004C0057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 221.582 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 221.582 Tm [<00510044005000480047>-602<00570055004400510056004C0057>-1<004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 197.971 221.582 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 215.683 221.582 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 218.951 221.582 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 252.535 221.582 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 221.582 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 209.627 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 209.627 Tm [<0054>]TJ
+1.03 0 0 1 133.126 209.627 Tm [<004A>]TJ
+1.02 0 0 1 135.856 209.627 Tm [<0054>]TJ
+1.03 0 0 1 142.452 209.627 Tm [<0055>]TJ
+1.02 0 0 1 146.125 209.627 Tm [<00490046>-248<00580042>]TJ
+1.03 0 0 1 170.23 209.627 Tm [<005A>-245<0055>]TJ
+1.02 0 0 1 181.165 209.627 Tm [<00490046>-248<0031>]TJ
+1.015 0 0 1 199.304 209.627 Tm [<0025>]TJ
+1.02 0 0 1 206.292 209.627 Tm [<0027>]TJ
+1.03 0 0 1 214.208 209.627 Tm [<0053>]TJ
+1.02 0 0 1 218.056 209.627 Tm [<0046004200450046>]TJ
+1.03 0 0 1 237.008 209.627 Tm [<0053>]TJ
+1.02 0 0 1 243.377 209.627 Tm [<0058>]TJ
+1.03 0 0 1 250.287 209.627 Tm [<004A004D004D>]TJ
+1.02 0 0 1 260.791 209.627 Tm [<0045>]TJ
+1.03 0 0 1 266.086 209.627 Tm [<004A>]TJ
+1.02 0 0 1 268.815 209.627 Tm [<00540051>]TJ
+1.03 0 0 1 278.195 209.627 Tm [<004D>]TJ
+1.02 0 0 1 280.822 209.627 Tm [<0042>]TJ
+1.03 0 0 1 285.435 209.627 Tm [<005A000D>]TJ
+1.02 0 0 1 295.293 209.627 Tm [<0042004F>]TJ
+1.03 0 0 1 305.577 209.627 Tm [<004A>]TJ
+1.02 0 0 1 308.306 209.627 Tm [<004E0042>]TJ
+1.03 0 0 1 321.171 209.627 Tm [<0055>]TJ
+1.02 0 0 1 324.845 209.627 Tm [<0046>]TJ
+1.03 0 0 1 329.367 209.627 Tm [<000D>]TJ
+1.02 0 0 1 334.484 209.627 Tm [<0046004F>]TJ
+1.03 0 0 1 344.676 209.627 Tm [<004D004A0057>]TJ
+1.02 0 0 1 354.886 209.627 Tm [<0046004F>]TJ
+1.03 0 0 1 365.079 209.627 Tm [<000D>]TJ
+1.02 0 0 1 370.196 209.627 Tm [<0042004F0045>-248<00510046>]TJ
+1.03 0 0 1 398.121 209.627 Tm [<0053>]TJ
+1.02 0 0 1 401.969 209.627 Tm [<0049004200510054>-248<0045>]TJ
+1.03 0 0 1 429.316 209.627 Tm [<004A>]TJ
+1.02 0 0 1 432.045 209.627 Tm [<00540044>]TJ
+1.03 0 0 1 440.215 209.627 Tm [<0053>]TJ
+1.02 0 0 1 444.063 209.627 Tm [<00460045>]TJ
+1.03 0 0 1 453.88 209.627 Tm [<004A0055>-245<005A>]TJ
+1.02 0 0 1 467.544 209.627 Tm [<00500056>]TJ
+1.03 0 0 1 478.042 209.627 Tm [<0053>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 209.179 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 209.179 Tm [<003500530042004F0054004A0055004A0050004F0054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 197.672 Tm [<00510053004600540046004F005500420055004A0050004F000F>-301<0022>-223<005500530042004F0054004A0055004A0050004F>-223<004A0054>-223<0042>-223<004D004A00550055004D0046>-222<0042004F004A004E00420055004A0050004F>-223<00440050004F004700500053004E004A004F0048>-223<0053004600420045004600530054>-223<0051004D0042005A>-223<005800490046004F>-222<005500490046005A>-223<00480050>-223<004700530050004E>]TJ
+0.985 0 0 1 113.386 185.717 Tm [<0050004F0046>-223<0054>]TJ
+0.975 0 0 1 134.314 185.717 Tm [<004D004A>]TJ
+0.985 0 0 1 139.384 185.717 Tm [<00450046>]TJ
+0.975 0 0 1 151.059 185.717 Tm [<0055>]TJ
+0.985 0 0 1 154.536 185.717 Tm [<0050>]TJ
+0.975 0 0 1 161.687 185.717 Tm [<0055>]TJ
+0.985 0 0 1 165.164 185.717 Tm [<00490046>-223<004F0046>]TJ
+0.975 0 0 1 186.916 185.717 Tm [<00590055000F>-301<0265>]TJ
+0.985 0 0 1 210.168 185.717 Tm [<0046>]TJ
+0.975 0 0 1 214.535 185.717 Tm [<005A>]TJ
+0.985 0 0 1 221.218 185.717 Tm [<00580050>]TJ
+0.975 0 0 1 232.846 185.717 Tm [<0053>]TJ
+0.985 0 0 1 236.489 185.717 Tm [<004C>]TJ
+0.975 0 0 1 243.58 185.717 Tm [<004A>]TJ
+0.985 0 0 1 246.164 185.717 Tm [<004F>]TJ
+0.975 0 0 1 253.835 185.717 Tm [<0047>]TJ
+0.985 0 0 1 257.079 185.717 Tm [<0056>]TJ
+0.975 0 0 1 262.26 185.717 Tm [<004D004D>]TJ
+0.985 0 0 1 269.428 185.717 Tm [<00540044>]TJ
+0.975 0 0 1 277.318 185.717 Tm [<0053>]TJ
+0.985 0 0 1 280.961 185.717 Tm [<00460046004F>-223<0050004F>]TJ
+0.975 0 0 1 307.796 185.717 Tm [<004D005A000F>]TJ
+0.99 0 0 1 320.082 185.717 Tm [<0022>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 328.253 185.717 Tm [<00510044005000480047>]TJ
+0.975 0 0 1 356.707 185.717 Tm [<00570055>]TJ
+0.985 0 0 1 366.072 185.717 Tm [<004400510056>]TJ
+0.975 0 0 1 380.262 185.717 Tm [<004C0057004C>]TJ
+0.985 0 0 1 394.309 185.717 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 405.964 185.717 Tm [<0054004900500056>]TJ
+0.975 0 0 1 425.385 185.717 Tm [<004D>]TJ
+0.985 0 0 1 427.871 185.717 Tm [<0045>-223<00430046>]TJ
+0.975 0 0 1 446.735 185.717 Tm [<0053>]TJ
+0.985 0 0 1 450.378 185.717 Tm [<004600440050>]TJ
+0.975 0 0 1 463.655 185.717 Tm [<0053>]TJ
+0.985 0 0 1 467.298 185.717 Tm [<004500460045>]TJ
+1.01 0 0 1 113.386 173.762 Tm [<00430046>]TJ
+1.02 0 0 1 122.985 173.762 Tm [<0047>]TJ
+1.01 0 0 1 126.379 173.762 Tm [<0050>]TJ
+1.02 0 0 1 131.461 173.762 Tm [<0053>]TJ
+1.01 0 0 1 135.271 173.762 Tm [<004600490042004F0045>-221<0058>]TJ
+1.02 0 0 1 169.724 173.762 Tm [<004A0055>]TJ
+1.01 0 0 1 176.065 173.762 Tm [<0049>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 183.772 173.762 Tm [<003F>]TJ
+1.01 0 0 1 188.67 173.762 Tm [<00510048005A>]TJ
+1.02 0 0 1 203.221 173.762 Tm [<00570055>]TJ
+1.01 0 0 1 213.018 173.762 Tm [<004400510056>]TJ
+1.02 0 0 1 227.569 173.762 Tm [<004C0057004C>]TJ
+1.01 0 0 1 242.264 173.762 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 254.187 173.762 Tm [<0056004F>]TJ
+1.02 0 0 1 265.115 173.762 Tm [<004D>]TJ
+1.01 0 0 1 267.716 173.762 Tm [<004600540054>]TJ
+1.02 0 0 1 282.487 173.762 Tm [<005A>]TJ
+1.01 0 0 1 287.181 173.762 Tm [<00500056>-220<005600540046>]TJ
+1.02 0 0 1 315.847 173.762 Tm [<0055>]TJ
+1.01 0 0 1 319.485 173.762 Tm [<00490046>-220<00450046>]TJ
+1.02 0 0 1 341.389 173.762 Tm [<0047>]TJ
+1.01 0 0 1 344.784 173.762 Tm [<00420056>]TJ
+1.02 0 0 1 354.665 173.762 Tm [<004D0055>-218<0057>]TJ
+1.01 0 0 1 367.933 173.762 Tm [<0042>]TJ
+1.02 0 0 1 372.502 173.762 Tm [<004D>]TJ
+1.01 0 0 1 375.103 173.762 Tm [<005600460054>]TJ
+1.02 0 0 1 388.929 173.762 Tm [<000D>-219<004A>]TJ
+1.01 0 0 1 396.352 173.762 Tm [<004F>-220<00580049>]TJ
+1.02 0 0 1 416.516 173.762 Tm [<004A>]TJ
+1.01 0 0 1 419.219 173.762 Tm [<00440049>-220<0044004200540046>]TJ
+1.02 0 0 1 450.34 173.762 Tm [<005A>]TJ
+1.01 0 0 1 455.034 173.762 Tm [<00500056>-221<00440042004F>]TJ
+0.985 0 0 1 113.386 161.807 Tm [<005600540046>-221<0042>]TJ
+0.975 0 0 1 133.499 161.807 Tm [<0055>]TJ
+0.985 0 0 1 139.15 161.807 Tm [<0050004F00440046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 160.078 161.807 Tm [<00560053>]TJ
+0.975 0 0 1 169.538 161.807 Tm [<004F004C0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 183.585 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 188.143 161.807 Tm [<0045>]TJ
+0.975 0 0 1 192.873 161.807 Tm [<004F004C>]TJ
+0.985 0 0 1 202.237 161.807 Tm [<005100470056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 216.428 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 220.986 161.807 Tm [<00450052>]TJ
+0.975 0 0 1 230.446 161.807 Tm [<005B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 235.129 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 239.686 161.807 Tm [<005A>]TJ
+0.975 0 0 1 244.417 161.807 Tm [<004C>]TJ
+0.985 0 0 1 249.099 161.807 Tm [<00530048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 258.559 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 263.117 161.807 Tm [<0047>]TJ
+0.975 0 0 1 267.847 161.807 Tm [<004C>]TJ
+0.985 0 0 1 272.529 161.807 Tm [<005600560052>]TJ
+0.975 0 0 1 286.72 161.807 Tm [<004F0059>]TJ
+0.985 0 0 1 296.085 161.807 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 300.815 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 305.373 161.807 Tm [<004A>]TJ
+0.975 0 0 1 310.103 161.807 Tm [<004F004C00570057>]TJ
+0.985 0 0 1 328.832 161.807 Tm [<0048>]TJ
+0.975 0 0 1 333.562 161.807 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 338.244 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.975 0 0 1 342.802 161.807 Tm [<0049004F005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 359.023 161.807 Tm [<0009>]TJ
+0.985 0 0 1 362.209 161.807 Tm [<004F0050>]TJ
+0.975 0 0 1 374.815 161.807 Tm [<004D>]TJ
+0.985 0 0 1 377.302 161.807 Tm [<004600540054>]TJ
+0.975 0 0 1 389.539 161.807 Tm [<000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 397.282 161.807 Tm [<005300580056004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 416.203 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 420.761 161.807 Tm [<00460052>]TJ
+0.975 0 0 1 430.222 161.807 Tm [<0059>]TJ
+0.985 0 0 1 434.904 161.807 Tm [<0048>]TJ
+0.975 0 0 1 439.634 161.807 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 444.316 161.807 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 448.874 161.807 Tm [<0058005100460052>]TJ
+0.975 0 0 1 467.795 161.807 Tm [<0059>]TJ
+0.985 0 0 1 472.477 161.807 Tm [<0048>]TJ
+0.975 0 0 1 477.208 161.807 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 149.851 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 130.85 149.851 Tm [<0049004400470048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 150.06 149.851 Tm [<000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01EA>]TJ
+ET
+endstream
+endobj
+87 0 obj <<
+/Type /Page
+/Contents 88 0 R
+/Resources 86 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 53 0 R
+/Annots [ 83 0 R 93 0 R 84 0 R 85 0 R ]
+>> endobj
+83 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 447.167 573.358 453.861]
+/A << /S /GoTo /D (ptx@section_link:18) >>
+>> endobj
+93 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 437.363 527.845 444.281]
+/A << /S /GoTo /D (ptx@section_link:18) >>
+>> endobj
+84 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 374.599 525.359 381.812]
+/A << /S /GoTo /D (ptx@section_link:19) >>
+>> endobj
+85 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 209.083 538.996 214.439]
+/A << /S /GoTo /D (ptx@section_link:20) >>
+>> endobj
+89 0 obj <<
+/D [87 0 R /XYZ 113.386 651.969 null]
+>> endobj
+90 0 obj <<
+/D [87 0 R /XYZ 113.386 566.021 null]
+>> endobj
+91 0 obj <<
+/D [87 0 R /XYZ 113.386 494.11 null]
+>> endobj
+92 0 obj <<
+/D [87 0 R /XYZ 113.386 469.712 null]
+>> endobj
+94 0 obj <<
+/D [87 0 R /XYZ 113.386 434.335 null]
+>> endobj
+95 0 obj <<
+/D [87 0 R /XYZ 113.386 398.469 null]
+>> endobj
+96 0 obj <<
+/D [87 0 R /XYZ 113.386 314.783 null]
+>> endobj
+97 0 obj <<
+/D [87 0 R /XYZ 113.386 245.393 null]
+>> endobj
+98 0 obj <<
+/D [87 0 R /XYZ 113.386 233.438 null]
+>> endobj
+86 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R /F117 23 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+105 0 obj <<
+/Length 37827
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<002201040104010200F900F20105010400F50103>-220<00F600FF0102>-220<0103010400F501000103>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 616.103 Tm [<0265>]TJ
+1.02 0 0 1 123.801 616.103 Tm [<0046>-277<0042>]TJ
+1.03 0 0 1 135.756 616.103 Tm [<005500550053004A>]TJ
+1.02 0 0 1 149.681 616.103 Tm [<00430056>]TJ
+1.03 0 0 1 160.219 616.103 Tm [<0055>]TJ
+1.02 0 0 1 163.893 616.103 Tm [<00460054>]TJ
+1.03 0 0 1 175.309 616.103 Tm [<0055>]TJ
+1.02 0 0 1 178.983 616.103 Tm [<00490042>]TJ
+1.03 0 0 1 189.134 616.103 Tm [<0055>-274<0047>]TJ
+1.02 0 0 1 199.055 616.103 Tm [<0050>]TJ
+1.03 0 0 1 204.186 616.103 Tm [<004D004D>]TJ
+1.02 0 0 1 209.44 616.103 Tm [<00500058>-277<0042>]TJ
+1.03 0 0 1 228.915 616.103 Tm [<0053>]TJ
+1.02 0 0 1 232.763 616.103 Tm [<0046>]TJ
+1.03 0 0 1 240.105 616.103 Tm [<0055>]TJ
+1.02 0 0 1 243.778 616.103 Tm [<0050>-277<00430046>-277<0056005400460045>]TJ
+1.03 0 0 1 286.319 616.103 Tm [<004A>]TJ
+1.02 0 0 1 289.049 616.103 Tm [<004F>]TJ
+1.03 0 0 1 297.539 616.103 Tm [<0055>]TJ
+1.02 0 0 1 301.212 616.103 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 314.092 616.103 Tm [<003F>]TJ
+1.02 0 0 1 319.038 616.103 Tm [<00560048>]TJ
+1.03 0 0 1 328.835 616.103 Tm [<0057>]TJ
+1.02 0 0 1 333.782 616.103 Tm [<00530044>]TJ
+1.03 0 0 1 343.578 616.103 Tm [<0055>]TJ
+1.02 0 0 1 348.525 616.103 Tm [<004400500048>]TJ
+1.03 0 0 1 363.22 616.103 Tm [<0057>]TJ
+1.02 0 0 1 368.166 616.103 Tm [<0048>]TJ
+1.03 0 0 1 373.064 616.103 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 380.83 616.103 Tm [<004500460044>]TJ
+1.03 0 0 1 394.742 616.103 Tm [<004D>]TJ
+1.02 0 0 1 397.369 616.103 Tm [<0042>]TJ
+1.03 0 0 1 401.982 616.103 Tm [<0053>]TJ
+1.02 0 0 1 405.83 616.103 Tm [<0042>]TJ
+1.03 0 0 1 410.444 616.103 Tm [<0055004A>]TJ
+1.02 0 0 1 416.847 616.103 Tm [<0050004F>]TJ
+1.03 0 0 1 430.468 616.103 Tm [<0047>]TJ
+1.02 0 0 1 433.896 616.103 Tm [<0050>]TJ
+1.03 0 0 1 439.028 616.103 Tm [<0053>-274<0055>]TJ
+1.02 0 0 1 449.369 616.103 Tm [<00490046>]TJ
+/F117 7.97011 Tf 1.02 0 0 1 462.248 616.103 Tm [<0056>]TJ
+1.03 0 0 1 467.147 616.103 Tm [<0057>]TJ
+1.02 0 0 1 472.093 616.103 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 113.386 604.148 Tm [<0051004200530042004E0046005500460053000D>-214<004A004F>-212<005500490046>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 186.443 604.148 Tm [<003F0056004800570056005700480053>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 227.184 604.148 Tm [<004500460044004D0042005300420055004A0050004F000D>-214<0042004F0045>-212<00420054>-213<005000510055004A0050004F0042004D>-213<0042005300480056004E0046004F00550054>-213<00550050>-213<005500490046>]TJ
+/F111 7.97011 Tf 1.005 0 0 1 414.927 604.148 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 441.189 604.148 Tm [<00440050004E004E0042004F0045>]TJ
+1 0 0 1 113.386 592.193 Tm [<0042004F0045>-220<004600520056004A00570042004D0046004F0055>-220<00440050004E004E0042004F00450054>-220<0044005300460042005500460045>-220<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 275.169 592.193 Tm [<003F0056004800570056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 313.588 592.193 Tm [<000D>-220<004700500053>-220<00580049004A00440049>-220<002A0008004D004D>-220<005600540046>]TJ
+/F111 7.97011 Tf 1 0 0 1 387.411 592.193 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 413.614 592.193 Tm [<00480046004F00460053004A00440042004D004D005A000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 556.327 Tm [<003100250027>-200<0042004F0045>-200<004F00420057004A004800420055004A0050004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 113.386 544.372 Tm [<0022>]TJ
+1.01 0 0 1 119.453 544.372 Tm [<0054>-214<0058004A00550049>-215<0054004D004A004500460054000D>-215<0042004F>-214<0046004F00550053005A>-215<0058004A00550049005000560055>-214<0042>-215<0041001E0008>-215<0054004A0048004F>-214<004A004F>-215<005500490046>-214<005000510055004A0050004F0042004D>-215<0042005300480056004E0046004F0055>-214<00550050>-215<005500490046>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 414.576 544.372 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 440.987 544.372 Tm [<00440050004E004E0042004F0045>]TJ
+1.02 0 0 1 113.386 532.417 Tm [<0043004600440050004E00460054>]TJ
+1.03 0 0 1 151.65 532.417 Tm [<0055>]TJ
+1.02 0 0 1 155.323 532.417 Tm [<00490046>-245<0054>]TJ
+1.03 0 0 1 171.952 532.417 Tm [<0055>]TJ
+1.02 0 0 1 175.626 532.417 Tm [<00460051>]TJ
+1.03 0 0 1 185.452 532.417 Tm [<0008>]TJ
+1.02 0 0 1 187.525 532.417 Tm [<0054>-245<004F0042004E0046>]TJ
+1.03 0 0 1 219.645 532.417 Tm [<0009>]TJ
+1.02 0 0 1 223.011 532.417 Tm [<00580049>]TJ
+1.03 0 0 1 235.459 532.417 Tm [<004A>]TJ
+1.02 0 0 1 238.189 532.417 Tm [<00440049>-245<0054004900500056>]TJ
+1.03 0 0 1 270.427 532.417 Tm [<004D>]TJ
+1.02 0 0 1 273.054 532.417 Tm [<0045>-245<00430046>-245<0056004F>]TJ
+1.03 0 0 1 304.066 532.417 Tm [<004A>]TJ
+1.02 0 0 1 306.796 532.417 Tm [<005200560046>-245<0050004F>-245<0042>-246<0048>]TJ
+1.03 0 0 1 349.468 532.417 Tm [<004A0057>]TJ
+1.02 0 0 1 357.051 532.417 Tm [<0046004F>-245<0054>]TJ
+1.03 0 0 1 373.812 532.417 Tm [<004D004A>]TJ
+1.02 0 0 1 379.169 532.417 Tm [<00450046>]TJ
+1.03 0 0 1 388.985 532.417 Tm [<000A000F>-373<0265004A>]TJ
+1.02 0 0 1 411.839 532.417 Tm [<0054>-245<004F0042004E0046>]TJ
+1.03 0 0 1 443.959 532.417 Tm [<004A>]TJ
+1.02 0 0 1 446.688 532.417 Tm [<0054>-245<004E0042>]TJ
+1.03 0 0 1 466.122 532.417 Tm [<004A>]TJ
+1.02 0 0 1 468.852 532.417 Tm [<004F>]TJ
+1.03 0 0 1 474.522 532.417 Tm [<004D005A>]TJ
+0.995 0 0 1 113.386 520.462 Tm [<00560054004600470056004D>-221<004700500053>-221<005300460047004600530046004F0044004A004F0048>-221<0058004A00550049>-221<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.995 0 0 1 239.06 520.462 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 250.808 520.462 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.995 0 0 1 268.195 520.462 Tm [<005200490049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 284.72 520.462 Tm [<0042005500550053004A00430056005500460054>-221<0042004F0045>-221<005500490046>]TJ
+/F111 7.97011 Tf 0.995 0 0 1 360.018 520.462 Tm [<003F0056004B0052005A00520055004B004C00470048>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 414.77 520.462 Tm [<00440050004E004E0042004F0045000D>-221<004300560055>-221<004A0055>]TJ
+1 0 0 1 113.386 508.506 Tm [<004A0054>-220<0042004D00540050>-220<0056005400460045>-220<00420054>-220<005500490046>-220<005400550046005100080054>-220<004F0042004E0046>-220<004A004F>-220<005500490046>-220<004D0042005A004600530054>-220<00510042004F0046004D>-220<00500047>-220<005500490046>-220<005300460042004500460053>-220<0009004A0047>-220<004A0055>-220<004900420054>-220<0050004F0046000A000F>-293<00290046004F00440046001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 72.776 484.596 Tm [<0053004700490057004C0057004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 484.596 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 484.596 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 484.596 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 484.596 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 484.596 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 484.596 Tm [<005600570048005300B70056>-602<00470048004900440058004F>-1<0057>-602<0051004400500048>]TJ
+/F63 9.96264 Tf 1 0 0 1 295.755 484.596 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 472.641 Tm [<00340046>]TJ
+0.97 0 0 1 122.534 472.641 Tm [<0055>-202<0055>]TJ
+0.98 0 0 1 131.414 472.641 Tm [<00490046>-200<004F0042004E0046>-201<0056005400460045>]TJ
+0.97 0 0 1 187.617 472.641 Tm [<004A>]TJ
+0.98 0 0 1 190.187 472.641 Tm [<004F>]TJ
+0.97 0 0 1 197.596 472.641 Tm [<0055>]TJ
+0.98 0 0 1 201.055 472.641 Tm [<00490046>]TJ
+0.97 0 0 1 212.682 472.641 Tm [<0053>]TJ
+0.98 0 0 1 216.306 472.641 Tm [<0046004200450046>]TJ
+0.97 0 0 1 234.514 472.641 Tm [<00530008>]TJ
+0.98 0 0 1 240.09 472.641 Tm [<0054>]TJ
+0.97 0 0 1 245.966 472.641 Tm [<004D>]TJ
+0.98 0 0 1 248.44 472.641 Tm [<0042>]TJ
+0.97 0 0 1 252.873 472.641 Tm [<005A>]TJ
+0.98 0 0 1 257.337 472.641 Tm [<0046>]TJ
+0.97 0 0 1 261.682 472.641 Tm [<0053>]TJ
+0.98 0 0 1 265.306 472.641 Tm [<0054>-200<00510042004F0046>]TJ
+0.97 0 0 1 290.504 472.641 Tm [<004D000F>-294<0265>]TJ
+0.98 0 0 1 307.999 472.641 Tm [<00560054>]TJ
+0.97 0 0 1 319.03 472.641 Tm [<005A>]TJ
+0.98 0 0 1 323.495 472.641 Tm [<00500056>-200<00440042004F>-201<00490042>]TJ
+0.97 0 0 1 361.07 472.641 Tm [<0057>]TJ
+0.98 0 0 1 365.641 472.641 Tm [<0046>-200<0042>-201<004F>]TJ
+0.97 0 0 1 383.788 472.641 Tm [<004A>]TJ
+0.98 0 0 1 386.359 472.641 Tm [<00440046>]TJ
+0.97 0 0 1 396.599 472.641 Tm [<0055004A0055004D>]TJ
+0.98 0 0 1 408.562 472.641 Tm [<0046>-200<00490046>]TJ
+0.97 0 0 1 424.533 472.641 Tm [<0053>]TJ
+0.98 0 0 1 428.157 472.641 Tm [<0046>-200<0042004F0045>-201<004C004600460051>-201<0042004F>]TJ
+0.995 0 0 1 113.386 460.686 Tm [<0056004F>]TJ
+0.99 0 0 1 124.151 460.686 Tm [<004A>]TJ
+0.995 0 0 1 126.775 460.686 Tm [<004F>]TJ
+0.99 0 0 1 132.306 460.686 Tm [<0047>]TJ
+0.995 0 0 1 135.6 460.686 Tm [<0050>]TJ
+0.99 0 0 1 140.606 460.686 Tm [<0053>]TJ
+0.995 0 0 1 144.305 460.686 Tm [<004E0042>]TJ
+0.99 0 0 1 156.855 460.686 Tm [<0055004A0057>]TJ
+0.995 0 0 1 167.674 460.686 Tm [<0046>]TJ
+0.99 0 0 1 172.085 460.686 Tm [<000E>]TJ
+0.995 0 0 1 175.192 460.686 Tm [<00430056>]TJ
+0.99 0 0 1 185.472 460.686 Tm [<0055000E004D>]TJ
+0.995 0 0 1 194.635 460.686 Tm [<004600540054>]TJ
+0.99 0 0 1 206.996 460.686 Tm [<000E>]TJ
+0.995 0 0 1 210.103 460.686 Tm [<00510042>]TJ
+0.99 0 0 1 219.778 460.686 Tm [<004A>]TJ
+0.995 0 0 1 222.401 460.686 Tm [<004F>]TJ
+0.99 0 0 1 227.933 460.686 Tm [<0047>]TJ
+0.995 0 0 1 231.227 460.686 Tm [<0056>]TJ
+0.99 0 0 1 236.461 460.686 Tm [<004D000E0055>]TJ
+0.995 0 0 1 245.624 460.686 Tm [<0050>]TJ
+0.99 0 0 1 250.63 460.686 Tm [<000E0055005A>]TJ
+0.995 0 0 1 261.824 460.686 Tm [<00510046>-217<004F0042004E0046>]TJ
+0.99 0 0 1 298.22 460.686 Tm [<0055>]TJ
+0.995 0 0 1 301.751 460.686 Tm [<0050>]TJ
+0.99 0 0 1 308.916 460.686 Tm [<0053>]TJ
+0.995 0 0 1 312.615 460.686 Tm [<0046>]TJ
+0.99 0 0 1 317.026 460.686 Tm [<0047>]TJ
+0.995 0 0 1 320.32 460.686 Tm [<0046>]TJ
+0.99 0 0 1 324.731 460.686 Tm [<0053>-218<0055>]TJ
+0.995 0 0 1 334.12 460.686 Tm [<0050>-217<0042>-218<0054>]TJ
+0.99 0 0 1 351.919 460.686 Tm [<0055>]TJ
+0.995 0 0 1 355.45 460.686 Tm [<00460051>]TJ
+0.99 0 0 1 367.195 460.686 Tm [<004A>]TJ
+0.995 0 0 1 369.818 460.686 Tm [<004F>]TJ
+0.99 0 0 1 377.509 460.686 Tm [<0055>]TJ
+0.995 0 0 1 381.04 460.686 Tm [<00490046>-217<0042>]TJ
+0.99 0 0 1 397.513 460.686 Tm [<005500550053004A>]TJ
+0.995 0 0 1 410.897 460.686 Tm [<00430056>]TJ
+0.99 0 0 1 421.177 460.686 Tm [<0055>]TJ
+0.995 0 0 1 424.708 460.686 Tm [<00460054>]TJ
+0.99 0 0 1 435.253 460.686 Tm [<0055>]TJ
+0.995 0 0 1 438.784 460.686 Tm [<00490042>]TJ
+0.99 0 0 1 448.687 460.686 Tm [<0055>-218<0047>]TJ
+0.995 0 0 1 457.671 460.686 Tm [<0050>]TJ
+0.99 0 0 1 462.677 460.686 Tm [<004D004D>]TJ
+0.995 0 0 1 467.727 460.686 Tm [<00500058>]TJ
+0.99 0 0 1 479.473 460.686 Tm [<000F>]TJ
+0.97 0 0 1 113.386 448.731 Tm [<0009002A0047>]TJ
+0.98 0 0 1 125.08 448.731 Tm [<0042>-221<0054>]TJ
+0.97 0 0 1 135.594 448.731 Tm [<0055>]TJ
+0.98 0 0 1 139.053 448.731 Tm [<00460051>-221<004900420054>-222<004F0050>-222<004F0042004E0046>]TJ
+0.97 0 0 1 201.193 448.731 Tm [<000D>-224<004A0055>-224<004A>]TJ
+0.98 0 0 1 216.498 448.731 Tm [<0054>]TJ
+0.97 0 0 1 222.579 448.731 Tm [<0053>]TJ
+0.98 0 0 1 226.203 448.731 Tm [<0046>]TJ
+0.97 0 0 1 230.548 448.731 Tm [<0047>]TJ
+0.98 0 0 1 233.776 448.731 Tm [<0046>]TJ
+0.97 0 0 1 238.12 448.731 Tm [<00530053>]TJ
+0.98 0 0 1 245.368 448.731 Tm [<00460045>]TJ
+0.97 0 0 1 256.965 448.731 Tm [<0055>]TJ
+0.98 0 0 1 260.425 448.731 Tm [<0050>]TJ
+0.97 0 0 1 267.522 448.731 Tm [<004A>]TJ
+0.98 0 0 1 270.092 448.731 Tm [<004F>]TJ
+0.97 0 0 1 277.706 448.731 Tm [<0055>]TJ
+0.98 0 0 1 281.166 448.731 Tm [<00490046>]TJ
+0.97 0 0 1 292.997 448.731 Tm [<004D>]TJ
+0.98 0 0 1 295.471 448.731 Tm [<0042>]TJ
+0.97 0 0 1 299.904 448.731 Tm [<005A>]TJ
+0.98 0 0 1 304.368 448.731 Tm [<0046>]TJ
+0.97 0 0 1 308.713 448.731 Tm [<0053>]TJ
+0.98 0 0 1 312.337 448.731 Tm [<0054>-221<00510042004F0046>]TJ
+0.97 0 0 1 337.74 448.731 Tm [<004D>]TJ
+0.98 0 0 1 342.38 448.731 Tm [<0058>]TJ
+0.97 0 0 1 349.019 448.731 Tm [<004A0055>]TJ
+0.98 0 0 1 355.049 448.731 Tm [<0049>]TJ
+0.97 0 0 1 362.536 448.731 Tm [<0041>]TJ
+0.98 0 0 1 364.488 448.731 Tm [<0054>]TJ
+0.97 0 0 1 368.403 448.731 Tm [<0055>]TJ
+0.98 0 0 1 371.863 448.731 Tm [<00460051>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 383.47 448.731 Tm [<004F>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 388.449 448.731 Tm [<0008>]TJ
+0.98 0 0 1 392.567 448.731 Tm [<0058>]TJ
+0.97 0 0 1 399.206 448.731 Tm [<004A0055>]TJ
+0.98 0 0 1 405.237 448.731 Tm [<0049>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 412.724 448.731 Tm [<004F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 419.869 448.731 Tm [<00540046>]TJ
+0.97 0 0 1 428.129 448.731 Tm [<0055>]TJ
+0.98 0 0 1 433.754 448.731 Tm [<004300420044004C>]TJ
+0.97 0 0 1 454.129 448.731 Tm [<0055>]TJ
+0.98 0 0 1 457.589 448.731 Tm [<0050>-221<005B0046>]TJ
+0.97 0 0 1 473.335 448.731 Tm [<0053>]TJ
+0.98 0 0 1 476.959 448.731 Tm [<0050>]TJ
+1 0 0 1 113.386 436.775 Tm [<00420055>-220<0046004200440049>-220<0054004D004A00450046000F000A>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 101.589 412.865 Tm [<00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 412.865 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 412.865 Tm [<004F004C00560057>-602<00520049>-603<00560057004800530056>]TJ
+/F7 9.96264 Tf 1 0 0 1 183.565 412.865 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 201.276 412.865 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 204.544 412.865 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 238.128 412.865 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 257.337 412.865 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 400.91 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 400.91 Tm [<0054>-268<00540046>]TJ
+1.03 0 0 1 141.931 400.91 Tm [<0055>]TJ
+1.02 0 0 1 145.604 400.91 Tm [<0054>]TJ
+1.03 0 0 1 152.407 400.91 Tm [<0055>]TJ
+1.02 0 0 1 156.081 400.91 Tm [<00490046>-268<0054>]TJ
+1.03 0 0 1 172.944 400.91 Tm [<0055>]TJ
+1.02 0 0 1 176.617 400.91 Tm [<004600510054>]TJ
+1.03 0 0 1 193.247 400.91 Tm [<0055>]TJ
+1.02 0 0 1 196.921 400.91 Tm [<00490042>]TJ
+1.03 0 0 1 207.072 400.91 Tm [<0055>]TJ
+1.02 0 0 1 213.474 400.91 Tm [<004E0042004C0046>]TJ
+1.03 0 0 1 238.66 400.91 Tm [<0055>]TJ
+1.02 0 0 1 242.333 400.91 Tm [<00490046>-268<00440056>]TJ
+1.03 0 0 1 264.582 400.91 Tm [<00530053>]TJ
+1.02 0 0 1 272.278 400.91 Tm [<0046004F>]TJ
+1.03 0 0 1 282.471 400.91 Tm [<0055>]TJ
+1.02 0 0 1 288.872 400.91 Tm [<0054>]TJ
+1.03 0 0 1 292.947 400.91 Tm [<0055>]TJ
+1.02 0 0 1 296.621 400.91 Tm [<00460051>-268<00420051005100460042>]TJ
+1.03 0 0 1 333.533 400.91 Tm [<0053000F>-441<002A0047>-266<0055>]TJ
+1.02 0 0 1 357.58 400.91 Tm [<00490046>]TJ
+1.03 0 0 1 367.64 400.91 Tm [<0053>]TJ
+1.02 0 0 1 371.488 400.91 Tm [<0046>]TJ
+1.03 0 0 1 378.738 400.91 Tm [<004A>]TJ
+1.02 0 0 1 381.468 400.91 Tm [<0054>-268<004F0050>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 401.801 400.91 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 414.325 400.91 Tm [<0042>]TJ
+1.03 0 0 1 418.939 400.91 Tm [<005500550053004A>]TJ
+1.02 0 0 1 432.864 400.91 Tm [<00430056>]TJ
+1.03 0 0 1 443.402 400.91 Tm [<0055>]TJ
+1.02 0 0 1 447.075 400.91 Tm [<0046>]TJ
+1.03 0 0 1 451.597 400.91 Tm [<000D>]TJ
+1.02 0 0 1 456.973 400.91 Tm [<0042>-268<0054>]TJ
+1.03 0 0 1 468.39 400.91 Tm [<0055>]TJ
+1.02 0 0 1 472.063 400.91 Tm [<00460051>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 400.641 Tm [<003800490046004F>-200<004E00500057004A004F0048>-200<004300420044004C0058004200530045000D>]TJ
+1 0 0 1 491.852 391.675 Tm [<004B005600540055>-200<004D004A004C0046>-200<005500490046>-200<00440050004F005500530050004D004D004A004F0048>]TJ
+1 0 0 1 491.852 382.708 Tm [<0054005500460051>-200<0058004A004D004D>-200<0055005000480048004D0046>-200<004A00550054>]TJ
+1 0 0 1 491.852 373.742 Tm [<0057004A0054004A0043004A0055004A0055005A000D>-200<00540055004600510054>-200<0055004A00460045>-200<0058004A00550049>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 364.775 Tm [<0050004F>]TJ
+/F63 7.97011 Tf 1 0 0 1 501.919 364.775 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 515.061 364.775 Tm [<005000EA>]TJ
+/F63 7.97011 Tf 1 0 0 1 525.709 364.775 Tm [<0058004A004D004D>-200<005500500050000F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 388.955 Tm [<00420051005100460042>]TJ
+0.97 0 0 1 136.789 388.955 Tm [<0053>]TJ
+0.98 0 0 1 140.413 388.955 Tm [<0054>-210<0042>]TJ
+0.97 0 0 1 150.815 388.955 Tm [<0055>-212<004A0055>]TJ
+0.98 0 0 1 162.359 388.955 Tm [<0054>-210<005100500054>]TJ
+0.97 0 0 1 182.271 388.955 Tm [<004A0055004A>]TJ
+0.98 0 0 1 190.872 388.955 Tm [<0050004F>]TJ
+0.97 0 0 1 203.305 388.955 Tm [<004A>]TJ
+0.98 0 0 1 205.875 388.955 Tm [<004F>]TJ
+0.97 0 0 1 213.378 388.955 Tm [<0055>]TJ
+0.98 0 0 1 216.838 388.955 Tm [<00490046>-210<005400500056>]TJ
+0.97 0 0 1 242.559 388.955 Tm [<0053>]TJ
+0.98 0 0 1 246.182 388.955 Tm [<00440046>]TJ
+0.97 0 0 1 254.462 388.955 Tm [<000F>-297<002A0047>-213<0055>]TJ
+0.98 0 0 1 271.579 388.955 Tm [<00490046>]TJ
+0.97 0 0 1 281.245 388.955 Tm [<0053>]TJ
+0.98 0 0 1 284.869 388.955 Tm [<0046>]TJ
+0.97 0 0 1 289.213 388.955 Tm [<0008>]TJ
+0.98 0 0 1 291.165 388.955 Tm [<0054>-210<0042004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 309.07 388.955 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 320.537 388.955 Tm [<0042>]TJ
+0.97 0 0 1 324.97 388.955 Tm [<005500550053004A>]TJ
+0.98 0 0 1 338.084 388.955 Tm [<00430056>]TJ
+0.97 0 0 1 348.208 388.955 Tm [<0055>]TJ
+0.98 0 0 1 351.668 388.955 Tm [<0046>]TJ
+0.97 0 0 1 356.013 388.955 Tm [<000D>-215<0055>]TJ
+0.98 0 0 1 363.922 388.955 Tm [<00490046004F>]TJ
+0.97 0 0 1 381.09 388.955 Tm [<004A0055>]TJ
+0.98 0 0 1 389.175 388.955 Tm [<00420051005100460042>]TJ
+0.97 0 0 1 412.578 388.955 Tm [<0053>]TJ
+0.98 0 0 1 416.202 388.955 Tm [<0054>-210<005800490046004F>]TJ
+0.97 0 0 1 445.979 388.955 Tm [<0055>]TJ
+0.98 0 0 1 449.438 388.955 Tm [<00490046>-210<0054>]TJ
+0.97 0 0 1 465.074 388.955 Tm [<0055>]TJ
+0.98 0 0 1 468.533 388.955 Tm [<004600510054>]TJ
+1.03 0 0 1 113.386 377 Tm [<0053>]TJ
+1.02 0 0 1 117.234 377 Tm [<0046>]TJ
+1.03 0 0 1 121.756 377 Tm [<0047>]TJ
+1.02 0 0 1 125.183 377 Tm [<0046>]TJ
+1.03 0 0 1 129.705 377 Tm [<00530053>]TJ
+1.02 0 0 1 137.401 377 Tm [<00460045>]TJ
+1.03 0 0 1 149.446 377 Tm [<0055>]TJ
+1.02 0 0 1 153.12 377 Tm [<0050>]TJ
+1.03 0 0 1 160.48 377 Tm [<004A>]TJ
+1.02 0 0 1 163.209 377 Tm [<004F>]TJ
+1.03 0 0 1 171.108 377 Tm [<0055>]TJ
+1.02 0 0 1 174.781 377 Tm [<00490046>]TJ
+1.03 0 0 1 187.07 377 Tm [<004D004A>]TJ
+1.02 0 0 1 192.426 377 Tm [<0054>]TJ
+1.03 0 0 1 196.501 377 Tm [<0055>]TJ
+1.02 0 0 1 202.403 377 Tm [<0042>]TJ
+1.03 0 0 1 207.017 377 Tm [<0053>]TJ
+1.02 0 0 1 210.865 377 Tm [<0046>]TJ
+1.03 0 0 1 217.615 377 Tm [<0053>]TJ
+1.02 0 0 1 221.463 377 Tm [<004600420044004900460045>]TJ
+1.03 0 0 1 250.048 377 Tm [<000F>-295<002A0047>-217<0055>]TJ
+1.02 0 0 1 268.248 377 Tm [<00490046>]TJ
+1.03 0 0 1 280.536 377 Tm [<004D004A>]TJ
+1.02 0 0 1 285.893 377 Tm [<0054>]TJ
+1.03 0 0 1 289.968 377 Tm [<0055>]TJ
+1.02 0 0 1 295.87 377 Tm [<0050>]TJ
+1.03 0 0 1 301.001 377 Tm [<0047>]TJ
+1.02 0 0 1 306.657 377 Tm [<0054>]TJ
+1.03 0 0 1 310.732 377 Tm [<0055>]TJ
+1.02 0 0 1 314.405 377 Tm [<004600510054>-219<00440050004F>]TJ
+1.03 0 0 1 345.432 377 Tm [<0055>]TJ
+1.02 0 0 1 349.106 377 Tm [<0042>]TJ
+1.03 0 0 1 353.719 377 Tm [<004A>]TJ
+1.02 0 0 1 356.449 377 Tm [<004F0054>]TJ
+1.03 0 0 1 368.422 377 Tm [<0055>]TJ
+1.02 0 0 1 372.096 377 Tm [<00490046>-219<004C0046>]TJ
+1.03 0 0 1 393.977 377 Tm [<005A>]TJ
+1.02 0 0 1 398.718 377 Tm [<00580050>]TJ
+1.03 0 0 1 410.76 377 Tm [<0053>]TJ
+1.02 0 0 1 414.608 377 Tm [<0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 422.131 377 Tm [<004B0048>]TJ
+1.03 0 0 1 431.927 377 Tm [<0055>]TJ
+1.02 0 0 1 436.874 377 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 441.772 377 Tm [<000D>-218<0055>]TJ
+1.02 0 0 1 450.197 377 Tm [<00490046004F>]TJ
+1.03 0 0 1 468.156 377 Tm [<0055>]TJ
+1.02 0 0 1 471.829 377 Tm [<00490046>]TJ
+1 0 0 1 113.386 365.044 Tm [<0054005500460051>-220<0042004D00540050>-220<004200510051004600420053>-220<0043005A>-220<004A005500540046004D0047000F>-293<00340055004600510054>-220<004A004F>-220<005500490046>-220<004D004A00540055>-220<004200530046>-220<005400460051004200530042005500460045>-220<0043005A>-220<00540051004200440046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 96.787 341.134 Tm [<005200490049>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 341.134 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 341.134 Tm [<004F004C00560057>-602<00520049>-603<00560057004800530056>]TJ
+/F7 9.96264 Tf 1 0 0 1 183.565 341.134 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 201.276 341.134 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 204.544 341.134 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 238.128 341.134 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 257.337 341.134 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 329.179 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 329.179 Tm [<0054>]TJ
+1.03 0 0 1 133.073 329.179 Tm [<004A>]TJ
+1.02 0 0 1 135.802 329.179 Tm [<0054>]TJ
+1.03 0 0 1 142.344 329.179 Tm [<0055>]TJ
+1.02 0 0 1 146.018 329.179 Tm [<00490046>-242<00540042004E0046>]TJ
+1.03 0 0 1 182.474 329.179 Tm [<0055>]TJ
+1.02 0 0 1 186.147 329.179 Tm [<0049>]TJ
+1.03 0 0 1 191.686 329.179 Tm [<004A>]TJ
+1.02 0 0 1 194.415 329.179 Tm [<004F0048>-242<00420054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 218.443 329.179 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 230.707 329.179 Tm [<004A>]TJ
+1.02 0 0 1 233.436 329.179 Tm [<004F>]TJ
+1.03 0 0 1 241.574 329.179 Tm [<0053>]TJ
+1.02 0 0 1 245.422 329.179 Tm [<0046>]TJ
+1.03 0 0 1 249.944 329.179 Tm [<0057>]TJ
+1.02 0 0 1 254.798 329.179 Tm [<0046>]TJ
+1.03 0 0 1 259.32 329.179 Tm [<0053>]TJ
+1.02 0 0 1 263.168 329.179 Tm [<00540046>]TJ
+1.03 0 0 1 271.765 329.179 Tm [<001B>-338<0055>]TJ
+1.02 0 0 1 281.425 329.179 Tm [<00490046>-242<0054>]TJ
+1.03 0 0 1 298.027 329.179 Tm [<0055>]TJ
+1.02 0 0 1 301.701 329.179 Tm [<00460051>-242<0045>]TJ
+1.03 0 0 1 319.289 329.179 Tm [<004A>]TJ
+1.02 0 0 1 322.018 329.179 Tm [<005400420051005100460042>]TJ
+1.03 0 0 1 350.451 329.179 Tm [<0053>]TJ
+1.02 0 0 1 354.299 329.179 Tm [<0054>-242<005800490046004F>]TJ
+1.03 0 0 1 385.949 329.179 Tm [<0055>]TJ
+1.02 0 0 1 389.622 329.179 Tm [<00490046>-242<0054>]TJ
+1.03 0 0 1 406.224 329.179 Tm [<0055>]TJ
+1.02 0 0 1 409.898 329.179 Tm [<004600510054>]TJ
+1.03 0 0 1 426.266 329.179 Tm [<004A>]TJ
+1.02 0 0 1 428.996 329.179 Tm [<004F>]TJ
+1.03 0 0 1 437.133 329.179 Tm [<0055>]TJ
+1.02 0 0 1 440.807 329.179 Tm [<00490046>]TJ
+1.03 0 0 1 453.334 329.179 Tm [<004D004A>]TJ
+1.02 0 0 1 458.691 329.179 Tm [<0054>]TJ
+1.03 0 0 1 462.766 329.179 Tm [<0055>]TJ
+1.02 0 0 1 468.906 329.179 Tm [<0042>]TJ
+1.03 0 0 1 473.52 329.179 Tm [<0053>]TJ
+1.02 0 0 1 477.368 329.179 Tm [<0046>]TJ
+1 0 0 1 113.386 317.224 Tm [<0053004600420044004900460045000F>-293<02650046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 167.247 317.224 Tm [<004B004800550048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 188.648 317.224 Tm [<004C0046005A0058005000530045>-220<00440042004F00080055>-220<00430046>-220<0056005400460045000F>]TJ
+1.02 0 0 1 133.311 305.269 Tm [<002F0050>]TJ
+1.03 0 0 1 145.719 305.269 Tm [<0055>]TJ
+1.02 0 0 1 149.392 305.269 Tm [<0046>]TJ
+1.03 0 0 1 156.143 305.269 Tm [<0055>]TJ
+1.02 0 0 1 159.816 305.269 Tm [<00490042>]TJ
+1.03 0 0 1 169.968 305.269 Tm [<0055>]TJ
+1.02 0 0 1 175.87 305.269 Tm [<0042>-219<0054>]TJ
+1.03 0 0 1 186.786 305.269 Tm [<0055>]TJ
+1.02 0 0 1 190.46 305.269 Tm [<00460051>-219<0058>]TJ
+1.03 0 0 1 209.424 305.269 Tm [<004A0055>]TJ
+1.02 0 0 1 215.828 305.269 Tm [<0049>-219<0042004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 236.106 305.269 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 248.131 305.269 Tm [<0042004F0045>]TJ
+1.03 0 0 1 263.709 305.269 Tm [<0010>]TJ
+1.02 0 0 1 267.731 305.269 Tm [<0050>]TJ
+1.03 0 0 1 272.863 305.269 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 278.939 305.269 Tm [<0052>]TJ
+1.03 0 0 1 283.837 305.269 Tm [<00490049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 295.958 305.269 Tm [<004D004A>]TJ
+1.02 0 0 1 301.315 305.269 Tm [<0054>]TJ
+1.03 0 0 1 305.39 305.269 Tm [<0055>]TJ
+1.02 0 0 1 311.291 305.269 Tm [<0045005000460054004F>]TJ
+1.03 0 0 1 335.985 305.269 Tm [<00080055>-217<0047>]TJ
+1.02 0 0 1 347.387 305.269 Tm [<0050>]TJ
+1.03 0 0 1 352.518 305.269 Tm [<004D004D>]TJ
+1.02 0 0 1 357.772 305.269 Tm [<00500058>]TJ
+1.03 0 0 1 372.042 305.269 Tm [<0055>]TJ
+1.02 0 0 1 375.716 305.269 Tm [<00490046>-219<0054>]TJ
+1.03 0 0 1 392.079 305.269 Tm [<0055>]TJ
+1.02 0 0 1 395.753 305.269 Tm [<004600510054>]TJ
+1.03 0 0 1 411.882 305.269 Tm [<004A>]TJ
+1.02 0 0 1 414.612 305.269 Tm [<004F>]TJ
+1.03 0 0 1 422.51 305.269 Tm [<0055>]TJ
+1.02 0 0 1 426.184 305.269 Tm [<0049005000540046>]TJ
+1.03 0 0 1 447.679 305.269 Tm [<004D004A>]TJ
+1.02 0 0 1 453.035 305.269 Tm [<0054>]TJ
+1.03 0 0 1 457.11 305.269 Tm [<0055>]TJ
+1.02 0 0 1 460.784 305.269 Tm [<0054>]TJ
+1.03 0 0 1 464.859 305.269 Tm [<000D>-218<004A000F>]TJ
+1.02 0 0 1 474.854 305.269 Tm [<0046>]TJ
+1.03 0 0 1 479.376 305.269 Tm [<000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 305 Tm [<0265004A0054>-200<004E00460042004F0054>-200<0055004900460053004600080054>-200<004F0050>]TJ
+1 0 0 1 491.852 296.033 Tm [<005500530042004F0054004A0055004A0057004A0055005A>-200<004A004F>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 547.412 296.033 Tm [<0050004F>]TJ
+/F63 7.97011 Tf 1 0 0 1 557.478 296.033 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 287.067 Tm [<005000EA>]TJ
+/F63 7.97011 Tf 1 0 0 1 502.5 287.067 Tm [<0042005500550053004A00430056005500460054001B>-266<004A0047>-200<0054005500460051>-200<0022>-200<004A0054>]TJ
+1 0 0 1 491.852 278.101 Tm [<0055004A00460045>-200<00550050>-200<0054005500460051>-200<0023>-200<0042004F0045>-200<0054005500460051>-200<0023>-200<00550050>]TJ
+0.995 0 0 1 491.852 269.134 Tm [<0054>]TJ
+0.99 0 0 1 494.747 269.134 Tm [<0055>]TJ
+0.995 0 0 1 497.469 269.134 Tm [<00460051>-201<0024>]TJ
+0.99 0 0 1 510.546 269.134 Tm [<000D>-202<0055>]TJ
+0.995 0 0 1 516.788 269.134 Tm [<0049>]TJ
+0.99 0 0 1 520.713 269.134 Tm [<004A>]TJ
+0.995 0 0 1 522.694 269.134 Tm [<0054>-201<0045005000460054004F>]TJ
+0.99 0 0 1 544.597 269.134 Tm [<00080055>]TJ
+0.995 0 0 1 550.341 269.134 Tm [<004E00460042004F>-201<0022>]TJ
+1 0 0 1 491.852 260.168 Tm [<004A0054>-200<0055004A00460045>-200<00550050>-200<0024>-200<0009004A0055>-200<00440042004F000D>-200<005500500050000D>-200<00500047>]TJ
+1 0 0 1 491.852 251.201 Tm [<004400500056005300540046000A000F>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 293.313 Tm [<004A0055>]TJ
+1.02 0 0 1 121.964 293.313 Tm [<0045005000460054004F>]TJ
+1.03 0 0 1 146.658 293.313 Tm [<00080055>]TJ
+1.02 0 0 1 154.579 293.313 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 178.937 293.313 Tm [<00530010>]TJ
+1.02 0 0 1 186.808 293.313 Tm [<0045>]TJ
+1.03 0 0 1 192.102 293.313 Tm [<004A>]TJ
+1.02 0 0 1 194.832 293.313 Tm [<005400420051005100460042>]TJ
+1.03 0 0 1 223.265 293.313 Tm [<0053>]TJ
+1.02 0 0 1 229.288 293.313 Tm [<005800490046004F>]TJ
+1.03 0 0 1 254.104 293.313 Tm [<0055>]TJ
+1.02 0 0 1 257.777 293.313 Tm [<00490046>]TJ
+1.03 0 0 1 267.838 293.313 Tm [<005A>]TJ
+1.02 0 0 1 274.754 293.313 Tm [<00450050>]TJ
+1.03 0 0 1 285.18 293.313 Tm [<000D>]TJ
+1.02 0 0 1 289.872 293.313 Tm [<00430056>]TJ
+1.03 0 0 1 300.41 293.313 Tm [<0055>]TJ
+1.02 0 0 1 306.259 293.313 Tm [<0054>]TJ
+1.03 0 0 1 310.334 293.313 Tm [<004A>]TJ
+1.02 0 0 1 313.063 293.313 Tm [<004E0051>]TJ
+1.03 0 0 1 326.619 293.313 Tm [<004D005A>]TJ
+1.02 0 0 1 336.162 293.313 Tm [<005800490046004F>]TJ
+1.03 0 0 1 360.978 293.313 Tm [<0055>]TJ
+1.02 0 0 1 364.652 293.313 Tm [<00490046>]TJ
+1.03 0 0 1 374.712 293.313 Tm [<005A>]TJ
+1.02 0 0 1 381.628 293.313 Tm [<0042>]TJ
+1.03 0 0 1 386.241 293.313 Tm [<0053>]TJ
+1.02 0 0 1 390.089 293.313 Tm [<0046>]TJ
+1.03 0 0 1 396.787 293.313 Tm [<0053>]TJ
+1.02 0 0 1 400.635 293.313 Tm [<004600420044004900460045>]TJ
+1.03 0 0 1 431.395 293.313 Tm [<004A>]TJ
+1.02 0 0 1 434.125 293.313 Tm [<004F>]TJ
+1.03 0 0 1 441.97 293.313 Tm [<0055>]TJ
+1.02 0 0 1 445.644 293.313 Tm [<00490046>]TJ
+1.03 0 0 1 457.879 293.313 Tm [<004D004A>]TJ
+1.02 0 0 1 463.236 293.313 Tm [<004F00460042>]TJ
+1.03 0 0 1 478.042 293.313 Tm [<0053>]TJ
+1 0 0 1 113.386 281.358 Tm [<00540046005200560046004F00440046>-220<00500047>-220<00540055004600510054>-220<004A004F>-220<005500490046>-220<005400500056005300440046>-220<000900580049004A00440049>-220<00440050004A004F0044004A00450046>-220<004E005000530046>-220<0050004700550046004F>-220<005500490042004F>-220<004F00500055000A000F>]TJ
+1.03 0 0 1 133.311 269.403 Tm [<002A>]TJ
+1.02 0 0 1 136.636 269.403 Tm [<004F>]TJ
+1.03 0 0 1 145.253 269.403 Tm [<0055>]TJ
+1.02 0 0 1 148.927 269.403 Tm [<00490046>]TJ
+1.03 0 0 1 161.935 269.403 Tm [<0047>]TJ
+1.02 0 0 1 165.362 269.403 Tm [<0050>]TJ
+1.03 0 0 1 170.494 269.403 Tm [<004D004D>]TJ
+1.02 0 0 1 175.748 269.403 Tm [<00500058>]TJ
+1.03 0 0 1 187.789 269.403 Tm [<004A>]TJ
+1.02 0 0 1 190.519 269.403 Tm [<004F0048>-290<0046>]TJ
+1.03 0 0 1 208.394 269.403 Tm [<0059>]TJ
+1.02 0 0 1 213.258 269.403 Tm [<0042004E0051>]TJ
+1.03 0 0 1 231.427 269.403 Tm [<004D>]TJ
+1.02 0 0 1 234.054 269.403 Tm [<0046>]TJ
+1.03 0 0 1 238.576 269.403 Tm [<000D>-305<0055>]TJ
+1.02 0 0 1 247.9 269.403 Tm [<00490046>]TJ
+1.03 0 0 1 260.908 269.403 Tm [<00EB0053>]TJ
+1.02 0 0 1 270.513 269.403 Tm [<0054>]TJ
+1.03 0 0 1 274.587 269.403 Tm [<0055>]TJ
+1.02 0 0 1 281.208 269.403 Tm [<0054>]TJ
+1.03 0 0 1 285.283 269.403 Tm [<0055>]TJ
+1.02 0 0 1 288.957 269.403 Tm [<00460051>-290<0058>]TJ
+1.03 0 0 1 308.641 269.403 Tm [<004A004D004D>]TJ
+1.02 0 0 1 319.571 269.403 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 343.93 269.403 Tm [<0053>]TJ
+1.02 0 0 1 350.725 269.403 Tm [<0043>]TJ
+1.03 0 0 1 355.897 269.403 Tm [<005A>-287<004A0055>]TJ
+1.02 0 0 1 369.988 269.403 Tm [<00540046>]TJ
+1.03 0 0 1 378.585 269.403 Tm [<004D0047000F>-505<0265>]TJ
+1.02 0 0 1 402.758 269.403 Tm [<0046004F>]TJ
+1.03 0 0 1 415.898 269.403 Tm [<0055>]TJ
+1.02 0 0 1 419.571 269.403 Tm [<00490046>-290<0054004600440050004F0045>-290<0054>]TJ
+1.03 0 0 1 468.39 269.403 Tm [<0055>]TJ
+1.02 0 0 1 472.063 269.403 Tm [<00460051>]TJ
+1.02 0 0 1 113.386 257.448 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 137.744 257.448 Tm [<0053>]TJ
+1.02 0 0 1 141.592 257.448 Tm [<0054>]TJ
+1.03 0 0 1 145.667 257.448 Tm [<000D>]TJ
+1.02 0 0 1 150.566 257.448 Tm [<0042>]TJ
+1.03 0 0 1 155.18 257.448 Tm [<004D>]TJ
+1.02 0 0 1 157.807 257.448 Tm [<0050004F0048>-230<0058>]TJ
+1.03 0 0 1 182.601 257.448 Tm [<004A0055>]TJ
+1.02 0 0 1 189.005 257.448 Tm [<0049>]TJ
+1.03 0 0 1 196.89 257.448 Tm [<0055>]TJ
+1.02 0 0 1 200.563 257.448 Tm [<00490046>]TJ
+1.03 0 0 1 212.97 257.448 Tm [<0047>]TJ
+1.02 0 0 1 216.398 257.448 Tm [<00500056>]TJ
+1.03 0 0 1 226.895 257.448 Tm [<00530055>]TJ
+1.02 0 0 1 234.416 257.448 Tm [<0049>]TJ
+1.03 0 0 1 239.955 257.448 Tm [<000D>]TJ
+1.02 0 0 1 244.854 257.448 Tm [<0042004F0045>]TJ
+1.03 0 0 1 262.779 257.448 Tm [<0055>]TJ
+1.02 0 0 1 266.453 257.448 Tm [<00490046>]TJ
+1.03 0 0 1 278.86 257.448 Tm [<00EB0053>]TJ
+1.02 0 0 1 288.465 257.448 Tm [<0054>]TJ
+1.03 0 0 1 292.54 257.448 Tm [<0055>]TJ
+1.02 0 0 1 298.56 257.448 Tm [<0050004F0046>-230<0045>]TJ
+1.03 0 0 1 321.525 257.448 Tm [<004A>]TJ
+1.02 0 0 1 324.255 257.448 Tm [<005400420051005100460042>]TJ
+1.03 0 0 1 352.688 257.448 Tm [<0053>]TJ
+1.02 0 0 1 356.536 257.448 Tm [<0054>]TJ
+1.03 0 0 1 360.611 257.448 Tm [<000F>]TJ
+1.02 0 0 1 366.512 257.448 Tm [<0027>]TJ
+1.03 0 0 1 371.908 257.448 Tm [<004A>]TJ
+1.02 0 0 1 374.638 257.448 Tm [<004F0042>]TJ
+1.03 0 0 1 384.922 257.448 Tm [<004D004D005A000D>]TJ
+1.02 0 0 1 399.816 257.448 Tm [<005800490046004F>]TJ
+1.03 0 0 1 424.803 257.448 Tm [<0055>]TJ
+1.02 0 0 1 428.477 257.448 Tm [<00490046>]TJ
+1.03 0 0 1 440.884 257.448 Tm [<0055>]TJ
+1.02 0 0 1 444.558 257.448 Tm [<0049>]TJ
+1.03 0 0 1 450.096 257.448 Tm [<004A0053>]TJ
+1.02 0 0 1 456.674 257.448 Tm [<0045>-230<0054>]TJ
+1.03 0 0 1 468.39 257.448 Tm [<0055>]TJ
+1.02 0 0 1 472.063 257.448 Tm [<00460051>]TJ
+1.02 0 0 1 113.386 245.493 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 137.744 245.493 Tm [<0053>]TJ
+1.02 0 0 1 141.592 245.493 Tm [<0054>]TJ
+1.03 0 0 1 147.907 245.493 Tm [<0055>]TJ
+1.02 0 0 1 151.581 245.493 Tm [<00490046>]TJ
+1.03 0 0 1 163.882 245.493 Tm [<00EB0053>]TJ
+1.02 0 0 1 173.487 245.493 Tm [<0054>]TJ
+1.03 0 0 1 177.561 245.493 Tm [<0055>-218<0053>]TJ
+1.02 0 0 1 187.324 245.493 Tm [<004600420051005100460042>]TJ
+1.03 0 0 1 216.204 245.493 Tm [<0053>]TJ
+1.02 0 0 1 220.052 245.493 Tm [<0054>]TJ
+1.03 0 0 1 224.127 245.493 Tm [<000F>]TJ
+1.02 0 0 1 229.709 245.493 Tm [<0034>]TJ
+1.03 0 0 1 234.709 245.493 Tm [<004A>]TJ
+1.02 0 0 1 237.439 245.493 Tm [<004F00440046>]TJ
+1.03 0 0 1 253.967 245.493 Tm [<0055>]TJ
+1.02 0 0 1 257.64 245.493 Tm [<00490046>]TJ
+1.03 0 0 1 269.941 245.493 Tm [<0047>]TJ
+1.02 0 0 1 273.368 245.493 Tm [<00500056>]TJ
+1.03 0 0 1 283.866 245.493 Tm [<00530055>]TJ
+1.02 0 0 1 291.387 245.493 Tm [<0049>-220<0054>]TJ
+1.03 0 0 1 303.241 245.493 Tm [<0055>]TJ
+1.02 0 0 1 306.915 245.493 Tm [<00460051>-220<004900420054>-220<004F0050>-221<00420056>]TJ
+1.03 0 0 1 358.47 245.493 Tm [<0055>]TJ
+1.02 0 0 1 362.144 245.493 Tm [<0050004F0050004E>]TJ
+1.03 0 0 1 386.329 245.493 Tm [<005A000D>]TJ
+1.02 0 0 1 395.837 245.493 Tm [<0042>]TJ
+1.03 0 0 1 400.45 245.493 Tm [<00470055>]TJ
+1.02 0 0 1 407.551 245.493 Tm [<0046>]TJ
+1.03 0 0 1 412.073 245.493 Tm [<0053>-218<0055>]TJ
+1.02 0 0 1 421.836 245.493 Tm [<00490046>]TJ
+1.03 0 0 1 434.136 245.493 Tm [<0055>]TJ
+1.02 0 0 1 437.81 245.493 Tm [<0049>]TJ
+1.03 0 0 1 443.348 245.493 Tm [<004A0053>]TJ
+1.02 0 0 1 449.926 245.493 Tm [<0045>-220<0054>]TJ
+1.03 0 0 1 461.536 245.493 Tm [<0055>]TJ
+1.02 0 0 1 465.209 245.493 Tm [<00460051>-220<0042>]TJ
+1 0 0 1 113.386 233.538 Tm [<0044004D004A0044004C>-220<0058004A004D004D>-220<004D004600420045>-220<00550050>-220<005500490046>-220<004F004600590055>-220<0054004D004A00450046>-220<00090051005300500057004A004500460045>-220<004A005500080054>-220<005500490046>-220<0046004F0045>-220<00500047>-220<005500490046>-220<0054004D004A00450046000D>-220<00500047>-220<004400500056005300540046000A000F>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 209.627 Tm [<003F0056005700480053003E005200510020004B00480055004800030025000F00520049004900200024004000030029004C>-1<0055005600570011>]TJ
+1 0 0 1 113.386 197.672 Tm [<003F0056005700480053003E0024004000030036004800460052005100470011>]TJ
+1 0 0 1 113.386 185.717 Tm [<003F0056005700480053003E0025004000030037004B004C005500470011>]TJ
+1 0 0 1 113.386 173.762 Tm [<003F0056005700480053003E00520051002000240040000300290052005800550057004B0011>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 77.578 149.851 Tm [<004B004400510047005200580057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 149.851 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 149.851 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 149.851 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 149.851 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 149.851 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 149.851 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 149.851 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 149.851 Tm [<0057005500580048>]TJ
+/F63 9.96264 Tf 1 0 0 1 242.93 149.851 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 137.896 Tm [<0034>]TJ
+1.03 0 0 1 118.385 137.896 Tm [<0055>]TJ
+1.02 0 0 1 122.059 137.896 Tm [<004600510054>-227<00580049005000540046>]TJ
+1.03 0 0 1 166.762 137.896 Tm [<0057>]TJ
+1.02 0 0 1 171.615 137.896 Tm [<0042>]TJ
+1.03 0 0 1 176.229 137.896 Tm [<004D>]TJ
+1.02 0 0 1 178.856 137.896 Tm [<00560046>]TJ
+1.03 0 0 1 191.056 137.896 Tm [<004A>]TJ
+1.02 0 0 1 193.785 137.896 Tm [<0054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 200.172 137.896 Tm [<00570055>]TJ
+1.02 0 0 1 210.065 137.896 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 222.174 137.896 Tm [<0047>]TJ
+1.02 0 0 1 225.601 137.896 Tm [<0050>]TJ
+1.03 0 0 1 230.733 137.896 Tm [<0053>-225<0055>]TJ
+1.02 0 0 1 240.567 137.896 Tm [<0049>]TJ
+1.03 0 0 1 246.105 137.896 Tm [<004A>]TJ
+1.02 0 0 1 248.834 137.896 Tm [<0054>-227<0042>]TJ
+1.03 0 0 1 259.835 137.896 Tm [<005500550053004A>]TJ
+1.02 0 0 1 273.76 137.896 Tm [<00430056>]TJ
+1.03 0 0 1 284.298 137.896 Tm [<0055>]TJ
+1.02 0 0 1 287.971 137.896 Tm [<0046>-227<0042>]TJ
+1.03 0 0 1 299.419 137.896 Tm [<0053>]TJ
+1.02 0 0 1 303.267 137.896 Tm [<0046>]TJ
+1.03 0 0 1 310.101 137.896 Tm [<0057004A>]TJ
+1.02 0 0 1 317.684 137.896 Tm [<0054>]TJ
+1.03 0 0 1 321.759 137.896 Tm [<004A>]TJ
+1.02 0 0 1 324.489 137.896 Tm [<0043>]TJ
+1.03 0 0 1 329.661 137.896 Tm [<004D>]TJ
+1.02 0 0 1 332.288 137.896 Tm [<0046>-227<0050004F>]TJ
+1.03 0 0 1 352.237 137.896 Tm [<0055>]TJ
+1.02 0 0 1 355.91 137.896 Tm [<00490046>-227<0051004200480046>-228<005800490046004F>]TJ
+1.03 0 0 1 414.723 137.896 Tm [<0055>]TJ
+1.02 0 0 1 418.397 137.896 Tm [<00490046>-227<0045005000440056004E0046004F>]TJ
+1.03 0 0 1 469.1 137.896 Tm [<0055>-225<004A>]TJ
+1.02 0 0 1 477.815 137.896 Tm [<0054>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 137.448 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 137.448 Tm [<00310053004600540046004F005500420055004A0050004F>-200<0042004F0045>]TJ
+1 0 0 1 506.756 128.482 Tm [<00490042004F0045005000560055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 113.386 125.941 Tm [<005100530050004400460054005400460045>-215<00420054>-215<0042>-215<00490042004F0045005000560055>-215<0009004A000F0046000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.005 0 0 1 228.294 125.941 Tm [<004B004400510047005200580057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 264.234 125.941 Tm [<004A0054>-215<005500490046>-215<00570042004D00560046>-215<00500047>-215<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 338.668 125.941 Tm [<005300550048005600480051005700440057004C00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 398.738 125.941 Tm [<0042005500550053004A0043005600550046>-215<004700500053>-215<005500490046>]TJ
+/F117 7.97011 Tf 1.005 0 0 1 467.411 125.941 Tm [<004D00520045>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01EB>]TJ
+ET
+endstream
+endobj
+104 0 obj <<
+/Type /Page
+/Contents 105 0 R
+/Resources 103 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 53 0 R
+/Annots [ 102 0 R 112 0 R ]
+>> endobj
+102 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 137.352 573.358 143.027]
+/A << /S /GoTo /D (ptx@section_link:5) >>
+>> endobj
+112 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 128.386 532.38 134.061]
+/A << /S /GoTo /D (ptx@section_link:5) >>
+>> endobj
+106 0 obj <<
+/D [104 0 R /XYZ 113.386 651.969 null]
+>> endobj
+107 0 obj <<
+/D [104 0 R /XYZ 113.386 565.841 null]
+>> endobj
+108 0 obj <<
+/D [104 0 R /XYZ 113.386 494.11 null]
+>> endobj
+109 0 obj <<
+/D [104 0 R /XYZ 113.386 423.366 null]
+>> endobj
+110 0 obj <<
+/D [104 0 R /XYZ 113.386 350.648 null]
+>> endobj
+111 0 obj <<
+/D [104 0 R /XYZ 113.386 160.269 null]
+>> endobj
+103 0 obj <<
+/Font << /F90 14 0 R /F105 5 0 R /F111 6 0 R /F117 23 0 R /F63 7 0 R /F7 46 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+115 0 obj <<
+/Length 22628
+>>
+stream
+BT
+/F105 9.96264 Tf 1.015 0 0 1 113.386 640.013 Tm [<00510042>]TJ
+1.025 0 0 1 123.255 640.013 Tm [<0053>]TJ
+1.015 0 0 1 127.085 640.013 Tm [<0042004E0046>]TJ
+1.025 0 0 1 144.386 640.013 Tm [<0055>]TJ
+1.015 0 0 1 148.042 640.013 Tm [<0046>]TJ
+1.025 0 0 1 152.542 640.013 Tm [<0053000A000D>]TJ
+1.015 0 0 1 164.443 640.013 Tm [<004F0050>-219<004E0042>]TJ
+1.025 0 0 1 190.209 640.013 Tm [<00550055>]TJ
+1.015 0 0 1 197.521 640.013 Tm [<0046>]TJ
+1.025 0 0 1 202.021 640.013 Tm [<0053>]TJ
+1.015 0 0 1 208.065 640.013 Tm [<004900500058>]TJ
+1.025 0 0 1 227.774 640.013 Tm [<0055>]TJ
+1.015 0 0 1 231.429 640.013 Tm [<00490046>]TJ
+1.025 0 0 1 241.44 640.013 Tm [<005A>]TJ
+1.015 0 0 1 248.373 640.013 Tm [<00420051005100460042>]TJ
+1.025 0 0 1 272.612 640.013 Tm [<0053>]TJ
+1.015 0 0 1 278.656 640.013 Tm [<00450056>]TJ
+1.025 0 0 1 289.263 640.013 Tm [<0053004A>]TJ
+1.015 0 0 1 295.809 640.013 Tm [<004F0048>-219<0042>-219<0051>]TJ
+1.025 0 0 1 320.463 640.013 Tm [<0053>]TJ
+1.015 0 0 1 324.292 640.013 Tm [<004600540046004F>]TJ
+1.025 0 0 1 342.989 640.013 Tm [<0055>]TJ
+1.015 0 0 1 346.645 640.013 Tm [<0042>]TJ
+1.025 0 0 1 351.236 640.013 Tm [<0055004A>]TJ
+1.015 0 0 1 357.608 640.013 Tm [<0050004F>]TJ
+1.025 0 0 1 368.357 640.013 Tm [<000F>-293<0265>]TJ
+1.015 0 0 1 384.216 640.013 Tm [<00560054>]TJ
+1.025 0 0 1 395.824 640.013 Tm [<0055>]TJ
+1.015 0 0 1 399.48 640.013 Tm [<00490046>-219<0045005000440056004E0046004F>]TJ
+1.025 0 0 1 449.849 640.013 Tm [<0055>]TJ
+1.015 0 0 1 455.719 640.013 Tm [<00440042004F>-219<00430046>]TJ
+1 0 0 1 113.386 628.058 Tm [<00510053004A004F005500460045>-220<0058004A00550049005000560055>-220<004E0042004F004A00510056004D00420055004A004F0048>-220<004D0042005A004600530054>-220<00430046004700500053004600490042004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 604.148 Tm [<0059004C0056004C0045004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 604.148 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 604.148 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 604.148 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 604.148 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 604.148 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 604.148 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 604.148 Tm [<00490044004F00560048>]TJ
+/F63 9.96264 Tf 1 0 0 1 247.732 604.148 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 592.193 Tm [<003800490046004F>]TJ
+1.03 0 0 1 140.896 592.193 Tm [<0055>]TJ
+1.02 0 0 1 144.57 592.193 Tm [<0049>]TJ
+1.03 0 0 1 150.108 592.193 Tm [<004A>]TJ
+1.02 0 0 1 152.837 592.193 Tm [<0054>-279<0042>]TJ
+1.03 0 0 1 164.363 592.193 Tm [<005500550053004A>]TJ
+1.02 0 0 1 178.288 592.193 Tm [<00430056>]TJ
+1.03 0 0 1 188.826 592.193 Tm [<0055>]TJ
+1.02 0 0 1 192.499 592.193 Tm [<0046>]TJ
+1.03 0 0 1 199.858 592.193 Tm [<004A>]TJ
+1.02 0 0 1 202.588 592.193 Tm [<0054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 209.5 592.193 Tm [<00570055>]TJ
+1.02 0 0 1 219.393 592.193 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 229.189 592.193 Tm [<000D>-292<0055>]TJ
+1.02 0 0 1 238.376 592.193 Tm [<00490046004F>]TJ
+1.03 0 0 1 256.943 592.193 Tm [<0055>]TJ
+1.02 0 0 1 260.617 592.193 Tm [<00490046>-279<0054>]TJ
+1.03 0 0 1 277.589 592.193 Tm [<0055>]TJ
+1.02 0 0 1 281.263 592.193 Tm [<00460051>]TJ
+1.03 0 0 1 293.926 592.193 Tm [<004A>]TJ
+1.02 0 0 1 296.656 592.193 Tm [<0054>]TJ
+1.03 0 0 1 303.568 592.193 Tm [<0057004A>]TJ
+1.02 0 0 1 311.151 592.193 Tm [<0054>]TJ
+1.03 0 0 1 315.226 592.193 Tm [<004A>]TJ
+1.02 0 0 1 317.956 592.193 Tm [<0043>]TJ
+1.03 0 0 1 323.128 592.193 Tm [<004D>]TJ
+1.02 0 0 1 325.755 592.193 Tm [<0046>-279<0050004F>]TJ
+1.03 0 0 1 346.753 592.193 Tm [<0055>]TJ
+1.02 0 0 1 350.427 592.193 Tm [<00490046>-279<0051004200480046>-279<005800490046004F>]TJ
+1.03 0 0 1 410.815 592.193 Tm [<004A0055>-276<004A>]TJ
+1.02 0 0 1 422.785 592.193 Tm [<0054>-279<005000510046004F00460045>]TJ
+1.03 0 0 1 460.142 592.193 Tm [<000F>]TJ
+1.02 0 0 1 467.514 592.193 Tm [<00270050>]TJ
+1.03 0 0 1 478.042 592.193 Tm [<0053>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 591.744 Tm [<0265004A0054>-200<004C004A004F0045>-200<00500047>-200<0054005500460051>-200<00500047>-200<004400500056005300540046>]TJ
+1 0 0 1 491.852 582.778 Tm [<0045005000460054004F00080055>-200<00550042004C0046>-200<0042>-200<0044004D004A0044004C>-200<004500560053004A004F0048>]TJ
+1 0 0 1 491.852 573.812 Tm [<005500490046>-200<00510053004600540046004F005500420055004A0050004F000F>-266<002A004F>-200<005500490046>]TJ
+1 0 0 1 491.852 564.845 Tm [<004600590042004E0051004D0046>-200<0050004F>-200<005500490046>-200<004D004600470055000D>-200<005A00500056>]TJ
+1 0 0 1 491.852 555.879 Tm [<004F004600460045>-200<0050004F004D005A>-200<005500580050>-200<0044004D004A0044004C0054>-200<00550050>]TJ
+1 0 0 1 491.852 546.912 Tm [<0045004A00540051004D0042005A>]TJ
+/F105 7.97011 Tf 1 0 0 1 515.014 546.912 Tm [<0265005300460046>]TJ
+/F63 7.97011 Tf 1 0 0 1 533.185 546.912 Tm [<000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 580.238 Tm [<004A004F005400550042004F00440046000D>-220<004A004F>-220<0042>-220<0054004D004A00450046>-220<0058004A00550049001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 556.327 Tm [<003F005600570048005300030032005100480011>]TJ
+1 0 0 1 113.386 544.372 Tm [<003F0056005700480053003E0059004C0056004C0045004F004800200057005500580048004000030037005A00520011>]TJ
+1 0 0 1 113.386 532.417 Tm [<003F0056005700480053003E004B00440051004700520058005700200057005500580048004000030037004B005500480048>-1<0011>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 508.506 Tm [<0055>]TJ
+1.01 0 0 1 117.006 508.506 Tm [<00490046>]TJ
+1.015 0 0 1 129.205 508.506 Tm [<0047>]TJ
+1.01 0 0 1 132.583 508.506 Tm [<0050>]TJ
+1.015 0 0 1 137.664 508.506 Tm [<004D004D>]TJ
+1.01 0 0 1 142.841 508.506 Tm [<00500058>]TJ
+1.015 0 0 1 154.765 508.506 Tm [<004A>]TJ
+1.01 0 0 1 157.455 508.506 Tm [<004F0048>-222<00490042005100510046004F0054>]TJ
+1.015 0 0 1 204.681 508.506 Tm [<001B>-298<004A0047>]TJ
+1.01 0 0 1 218.477 508.506 Tm [<00580046>]TJ
+1.015 0 0 1 229.797 508.506 Tm [<00080053>]TJ
+1.01 0 0 1 235.632 508.506 Tm [<0046>]TJ
+1.015 0 0 1 242.347 508.506 Tm [<004A>]TJ
+1.01 0 0 1 245.037 508.506 Tm [<004F>-222<004F0050>]TJ
+1.015 0 0 1 263.586 508.506 Tm [<0053>]TJ
+1.01 0 0 1 267.378 508.506 Tm [<004E0042>]TJ
+1.015 0 0 1 280.116 508.506 Tm [<004D>]TJ
+1.01 0 0 1 284.943 508.506 Tm [<0051>]TJ
+1.015 0 0 1 290.195 508.506 Tm [<0053>]TJ
+1.01 0 0 1 293.987 508.506 Tm [<004600540046004F>]TJ
+1.015 0 0 1 312.592 508.506 Tm [<0055>]TJ
+1.01 0 0 1 316.212 508.506 Tm [<0042>]TJ
+1.015 0 0 1 320.781 508.506 Tm [<0055004A>]TJ
+1.01 0 0 1 327.091 508.506 Tm [<0050004F>-222<004E005000450046>]TJ
+1.015 0 0 1 362.997 508.506 Tm [<000D>-222<0055>]TJ
+1.01 0 0 1 371.343 508.506 Tm [<00490046004F>]TJ
+1.015 0 0 1 389.157 508.506 Tm [<0055>]TJ
+1.01 0 0 1 392.777 508.506 Tm [<00490046>-222<0054004600440050004F0045>-222<0054>]TJ
+1.015 0 0 1 439.755 508.506 Tm [<0055>]TJ
+1.01 0 0 1 443.375 508.506 Tm [<00460051>-222<0058>]TJ
+1.015 0 0 1 462.186 508.506 Tm [<004A004D004D>]TJ
+1.01 0 0 1 472.29 508.506 Tm [<00430046>]TJ
+0.975 0 0 1 113.386 496.551 Tm [<0057004A>]TJ
+0.98 0 0 1 120.564 496.551 Tm [<0054>]TJ
+0.975 0 0 1 124.479 496.551 Tm [<004A>]TJ
+0.98 0 0 1 127.063 496.551 Tm [<0043>]TJ
+0.975 0 0 1 132.033 496.551 Tm [<004D>]TJ
+0.98 0 0 1 134.519 496.551 Tm [<0046>-226<0050004F>]TJ
+0.975 0 0 1 153.655 496.551 Tm [<0055>]TJ
+0.98 0 0 1 157.133 496.551 Tm [<00490046>-226<0054>]TJ
+0.975 0 0 1 172.92 496.551 Tm [<004D004A>]TJ
+0.98 0 0 1 177.99 496.551 Tm [<00450046>-226<005800490046004F>]TJ
+0.975 0 0 1 213.588 496.551 Tm [<004A0055>-227<004A>]TJ
+0.98 0 0 1 224.439 496.551 Tm [<0054>-226<0045>]TJ
+0.975 0 0 1 235.647 496.551 Tm [<004A>]TJ
+0.98 0 0 1 238.231 496.551 Tm [<00540051>]TJ
+0.975 0 0 1 247.243 496.551 Tm [<004D>]TJ
+0.98 0 0 1 249.729 496.551 Tm [<0042>]TJ
+0.975 0 0 1 254.162 496.551 Tm [<005A>]TJ
+0.98 0 0 1 258.65 496.551 Tm [<00460045>]TJ
+0.975 0 0 1 268.081 496.551 Tm [<000D>]TJ
+0.98 0 0 1 272.671 496.551 Tm [<005800490046>]TJ
+0.975 0 0 1 288.976 496.551 Tm [<0053>]TJ
+0.98 0 0 1 292.618 496.551 Tm [<004600420054>]TJ
+0.975 0 0 1 307.517 496.551 Tm [<0055>]TJ
+0.98 0 0 1 310.995 496.551 Tm [<00490046>-225<0050>]TJ
+0.975 0 0 1 327.797 496.551 Tm [<0055>]TJ
+0.98 0 0 1 331.275 496.551 Tm [<00490046>]TJ
+0.975 0 0 1 340.94 496.551 Tm [<0053>-227<0055>]TJ
+0.98 0 0 1 350.267 496.551 Tm [<00580050>-226<0058>]TJ
+0.975 0 0 1 370.682 496.551 Tm [<004A004D004D>]TJ
+0.98 0 0 1 380.446 496.551 Tm [<00420051005100460042>]TJ
+0.975 0 0 1 403.848 496.551 Tm [<0053>]TJ
+0.98 0 0 1 409.697 496.551 Tm [<005800490046004F>-226<0044>]TJ
+0.975 0 0 1 437.591 496.551 Tm [<004D004A>]TJ
+0.98 0 0 1 442.662 496.551 Tm [<0044004C>]TJ
+0.975 0 0 1 451.468 496.551 Tm [<004A>]TJ
+0.98 0 0 1 454.052 496.551 Tm [<004F0048>]TJ
+0.975 0 0 1 464.05 496.551 Tm [<000F>]TJ
+0.985 0 0 1 469.396 496.551 Tm [<0030>]TJ
+0.98 0 0 1 476.442 496.551 Tm [<004F>]TJ
+1 0 0 1 113.386 484.596 Tm [<005500490046>-220<00500055004900460053>-220<00490042004F0045000D>-220<004A004F>-220<0042>-220<00490042004F0045005000560055000D>-220<0050004F004D005A>-220<005500490046>-220<00550049004A00530045>-220<0054005500460051>-220<0058004A004D004D>-220<00430046>-220<0057004A0054004A0043004D0046000F>-293<0038004A00550049001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 460.686 Tm [<003F00560048005700530044005500440050004800570048005500030056005700480053001D>]TJ
+1 0 0 1 113.386 448.731 Tm [<000300030059004C0056004C0045004F00480003004B0044005100470052005800570003002000030057005500580048>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 424.82 Tm [<0042004D004D>-220<00540055004600510054>-220<0058004A004D004D>-220<00430046>-220<0057004A0054004A0043004D0046>-220<0043005A>-220<00450046004700420056004D0055000D>-220<004A004F>-220<0043005000550049>-220<004E0050004500460054000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 388.955 Tm [<00240050004F00550046004F0055>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 365.044 Tm [<004F004800490057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 365.044 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 365.044 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 365.044 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 365.044 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 365.044 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 365.044 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 365.044 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 353.089 Tm [<0265>]TJ
+0.98 0 0 1 123.245 353.089 Tm [<0046>-228<0045>]TJ
+0.975 0 0 1 134.904 353.089 Tm [<004A>]TJ
+0.98 0 0 1 137.488 353.089 Tm [<0054>]TJ
+0.975 0 0 1 141.403 353.089 Tm [<0055>]TJ
+0.98 0 0 1 144.88 353.089 Tm [<0042004F00440046>-228<00430046>]TJ
+0.975 0 0 1 174.582 353.089 Tm [<0055>]TJ
+0.98 0 0 1 178.059 353.089 Tm [<005800460046004F>]TJ
+0.975 0 0 1 201.063 353.089 Tm [<0055>]TJ
+0.98 0 0 1 204.541 353.089 Tm [<00490046>]TJ
+0.975 0 0 1 216.434 353.089 Tm [<0055>]TJ
+0.98 0 0 1 219.911 353.089 Tm [<0046>]TJ
+0.975 0 0 1 224.256 353.089 Tm [<00590055>]TJ
+0.98 0 0 1 232.338 353.089 Tm [<0043>]TJ
+0.975 0 0 1 237.307 353.089 Tm [<004D>]TJ
+0.98 0 0 1 239.794 353.089 Tm [<00500044004C>]TJ
+0.975 0 0 1 253.531 353.089 Tm [<0008>]TJ
+0.98 0 0 1 255.493 353.089 Tm [<0054>]TJ
+0.975 0 0 1 261.636 353.089 Tm [<004D>]TJ
+0.98 0 0 1 264.122 353.089 Tm [<0046>]TJ
+0.975 0 0 1 268.467 353.089 Tm [<00470055>]TJ
+0.98 0 0 1 277.416 353.089 Tm [<00430050>]TJ
+0.975 0 0 1 287.316 353.089 Tm [<0053>]TJ
+0.98 0 0 1 290.959 353.089 Tm [<00450046>]TJ
+0.975 0 0 1 300.39 353.089 Tm [<00530009>]TJ
+0.98 0 0 1 307.219 353.089 Tm [<00450046>]TJ
+0.975 0 0 1 316.65 353.089 Tm [<00EB>]TJ
+0.98 0 0 1 322.1 353.089 Tm [<004F00460045>-228<0043>]TJ
+0.975 0 0 1 344.176 353.089 Tm [<005A>-229<0055>]TJ
+0.98 0 0 1 354.369 353.089 Tm [<00490046>-228<0054>]TJ
+0.975 0 0 1 370.177 353.089 Tm [<004D004A>]TJ
+0.98 0 0 1 375.247 353.089 Tm [<00450046>]TJ
+0.975 0 0 1 384.679 353.089 Tm [<0008>]TJ
+0.98 0 0 1 386.641 353.089 Tm [<0054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.975 0 0 1 392.783 353.089 Tm [<004F>]TJ
+0.98 0 0 1 397.466 353.089 Tm [<0048>]TJ
+0.975 0 0 1 402.172 353.089 Tm [<00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 413.764 353.089 Tm [<0042>]TJ
+0.975 0 0 1 418.196 353.089 Tm [<005500550053004A>]TJ
+0.98 0 0 1 431.378 353.089 Tm [<00430056>]TJ
+0.975 0 0 1 441.502 353.089 Tm [<0055>]TJ
+0.98 0 0 1 444.98 353.089 Tm [<0046>-228<0042004F0045>]TJ
+0.975 0 0 1 468.747 353.089 Tm [<0055>]TJ
+0.98 0 0 1 472.224 353.089 Tm [<00490046>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 352.641 Tm [<003A00500056>-200<00440042004F>-200<004400530046004200550046>-200<004D004A00540055>-200<004A00550046004E0054>]TJ
+1 0 0 1 491.852 343.675 Tm [<0042004F0045>-200<005400560043000E004A00550046004E0054>-200<0043005A>-200<0054004A004E0051004D005A>]TJ
+0.985 0 0 1 491.852 334.708 Tm [<0044>]TJ
+0.975 0 0 1 494.679 334.708 Tm [<0053>]TJ
+0.985 0 0 1 497.507 334.708 Tm [<00460042>]TJ
+0.975 0 0 1 504.298 334.708 Tm [<0055004A>]TJ
+0.985 0 0 1 508.929 334.708 Tm [<004F0048>-200<0054>]TJ
+0.975 0 0 1 520.72 334.708 Tm [<0055>]TJ
+0.985 0 0 1 523.401 334.708 Tm [<004600510054>-200<0058>]TJ
+0.975 0 0 1 540.011 334.708 Tm [<004A0055>]TJ
+0.985 0 0 1 544.643 334.708 Tm [<0049>-200<005100500054>]TJ
+0.975 0 0 1 560.123 334.708 Tm [<004A0055004A0057>]TJ
+0.985 0 0 1 570.186 334.708 Tm [<0046>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 325.742 Tm [<004D004600470055>]TJ
+/F63 7.97011 Tf 1 0 0 1 504.549 325.742 Tm [<0042004F0045001000500053>]TJ
+/F105 7.97011 Tf 1 0 0 1 527.232 325.742 Tm [<0053004A004800490055>]TJ
+/F63 7.97011 Tf 1 0 0 1 543.252 325.742 Tm [<000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 341.134 Tm [<004D004600470055000A>-220<0042004F0045>-220<005500490046>-220<004300500053004500460053>-220<00500047>-220<005500490046>-220<005400550046005100080054>-220<0055004600590055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 317.224 Tm [<0055004C004A004B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 317.224 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 317.224 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 317.224 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 317.224 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 317.224 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 317.224 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 317.224 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 305.269 Tm [<00340042004E0046>-220<00420054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 148.235 305.269 Tm [<004F004800490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.444 305.269 Tm [<000D>-220<0050004F>-220<005500490046>-220<0053004A004800490055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 281.358 Tm [<00590056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 281.358 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 281.358 Tm [<0056004E004C0053>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 281.358 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 281.358 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 281.358 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 281.358 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 281.358 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 269.403 Tm [<02650046>-220<00570042004D00560046>-220<00500047>-220<005500490046>-220<0057004600530055004A00440042004D>-220<0048004D00560046>-220<004A004F005400460053005500460045>-220<0046004200440049>-220<0055004A004E0046>-220<0042>]TJ
+/F111 7.97011 Tf 1 0 0 1 315.418 269.403 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 341.621 269.403 Tm [<005000440044005600530054>-220<004A004F>-220<0057004600530055004A00440042004D>-220<004E005000450046000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 268.955 Tm [<00220054>-200<0058004A00550049>-200<0054004D004A004500460054000D>-200<005500490046>-200<005400550046005100080054>]TJ
+1 0 0 1 491.852 259.988 Tm [<00470050004F0055000D>-200<004A0047>-200<0042004F005A>-200<0009005400460046>-200<00430046004D00500058000A000D>-200<004A0054>]TJ
+1 0 0 1 491.852 251.022 Tm [<00440042004D004D00460045>-200<004300460047005000530046>-200<00550049005000540046>]TJ
+0.985 0 0 1 491.852 242.056 Tm [<0045>]TJ
+0.98 0 0 1 495.605 242.056 Tm [<004A>]TJ
+0.985 0 0 1 497.565 242.056 Tm [<004E0046004F0054>]TJ
+0.98 0 0 1 513.408 242.056 Tm [<004A>]TJ
+0.985 0 0 1 515.368 242.056 Tm [<0050004F0054>-203<0042>]TJ
+0.98 0 0 1 530.897 242.056 Tm [<0053>]TJ
+0.985 0 0 1 533.74 242.056 Tm [<0046>-203<0056005400460045>]TJ
+0.98 0 0 1 552.119 242.056 Tm [<000D>]TJ
+0.985 0 0 1 555.619 242.056 Tm [<00540050>]TJ
+0.98 0 0 1 563.524 242.056 Tm [<0055>]TJ
+0.985 0 0 1 566.219 242.056 Tm [<00490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 233.089 Tm [<0046004E>]TJ
+/F63 7.97011 Tf 1 0 0 1 503.465 233.089 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 516.608 233.089 Tm [<00460059>]TJ
+/F63 7.97011 Tf 1 0 0 1 525.526 233.089 Tm [<0045004A004E0046004F0054004A0050004F0054>]TJ
+1 0 0 1 491.852 224.123 Tm [<0049004200570046>-200<005500490046>-200<005100530050005100460053>-200<00570042004D005600460054000F>]TJ
+1 0 0 1 491.852 215.157 Tm [<002F005000550046>-200<0055004900420055>-200<0055004900460053004600080054>-200<0042004D0053004600420045005A>]TJ
+1 0 0 1 491.852 206.19 Tm [<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 503.361 206.19 Tm [<0051004200530054004C004A0051>]TJ
+/F63 7.97011 Tf 1 0 0 1 529.176 206.19 Tm [<0048004D00560046>-200<004300460055005800460046004F>]TJ
+1 0 0 1 491.852 197.224 Tm [<0057004600530055004A00440042004D>-200<00540055004600510054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 245.493 Tm [<0048005900480055005C00590056005700480053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 245.493 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 245.493 Tm [<0046005200470048>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 245.493 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 245.493 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 245.493 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 245.493 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 245.493 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 233.538 Tm [<002E0042>]TJ
+0.97 0 0 1 126.303 233.538 Tm [<0055>]TJ
+0.98 0 0 1 129.762 233.538 Tm [<0046>]TJ
+0.97 0 0 1 134.107 233.538 Tm [<0053004A>]TJ
+0.98 0 0 1 140.302 233.538 Tm [<0042>]TJ
+0.97 0 0 1 144.734 233.538 Tm [<004D>-218<004A>]TJ
+0.98 0 0 1 151.894 233.538 Tm [<004F00540046>]TJ
+0.97 0 0 1 165.601 233.538 Tm [<00530055>]TJ
+0.98 0 0 1 172.685 233.538 Tm [<00460045>-216<005800490046004F>-217<0042>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 214.647 233.538 Tm [<003F>]TJ
+0.98 0 0 1 219.305 233.538 Tm [<0056>]TJ
+0.97 0 0 1 224.012 233.538 Tm [<0057>]TJ
+0.98 0 0 1 228.67 233.538 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 240.197 233.538 Tm [<0050004400440056>]TJ
+0.97 0 0 1 258.152 233.538 Tm [<0053>]TJ
+0.98 0 0 1 261.776 233.538 Tm [<0054>]TJ
+0.97 0 0 1 267.806 233.538 Tm [<004A>]TJ
+0.98 0 0 1 270.377 233.538 Tm [<004F>]TJ
+0.97 0 0 1 277.94 233.538 Tm [<0057>]TJ
+0.98 0 0 1 282.511 233.538 Tm [<0046>]TJ
+0.97 0 0 1 286.856 233.538 Tm [<00530055004A>]TJ
+0.98 0 0 1 296.51 233.538 Tm [<00440042>]TJ
+0.97 0 0 1 304.877 233.538 Tm [<004D>]TJ
+0.98 0 0 1 309.466 233.538 Tm [<004E005000450046>]TJ
+0.97 0 0 1 331.756 233.538 Tm [<000F>-299<0265>]TJ
+0.98 0 0 1 346.829 233.538 Tm [<0046>]TJ
+0.97 0 0 1 353.289 233.538 Tm [<004A>]TJ
+0.98 0 0 1 355.859 233.538 Tm [<004F00540046>]TJ
+0.97 0 0 1 369.567 233.538 Tm [<00530055004A>]TJ
+0.98 0 0 1 379.221 233.538 Tm [<0050004F>]TJ
+0.97 0 0 1 391.715 233.538 Tm [<0055>]TJ
+0.98 0 0 1 395.174 233.538 Tm [<0042004C00460054>-216<0051>]TJ
+0.97 0 0 1 419.95 233.538 Tm [<004D>]TJ
+0.98 0 0 1 422.424 233.538 Tm [<004200440046>-216<0042>]TJ
+0.97 0 0 1 441.684 233.538 Tm [<00470055>]TJ
+0.98 0 0 1 448.371 233.538 Tm [<0046>]TJ
+0.97 0 0 1 452.716 233.538 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 458.455 233.538 Tm [<0059>]TJ
+0.98 0 0 1 463.113 233.538 Tm [<0056004E>]TJ
+0.97 0 0 1 472.525 233.538 Tm [<004C>]TJ
+0.98 0 0 1 477.183 233.538 Tm [<0053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 221.582 Tm [<00090042004F0045>-220<0045005000460054004F00080055>-220<00540058004A005500440049>-220<00550050>-220<004900500053004A005B0050004F00550042004D>-220<004E005000450046>-220<0043005A>-220<004A005500540046004D0047000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 197.672 Tm [<004B0056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 197.672 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 197.672 Tm [<0056004E004C0053>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 197.672 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 197.672 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 197.672 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 197.672 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 197.672 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 185.717 Tm [<02650046>-220<00570042004D00560046>-220<00500047>-220<005500490046>-220<004900500053004A005B0050004F00550042004D>-220<0048004D00560046>-220<004A004F005400460053005500460045>-220<0046004200440049>-220<0055004A004E0046>-220<0042>]TJ
+/F111 7.97011 Tf 1 0 0 1 327.702 185.717 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 353.905 185.717 Tm [<005000440044005600530054>-220<004A004F>-220<004900500053004A005B0050004F00550042004D>-220<004E005000450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 161.807 Tm [<0048005900480055005C004B0056005700480053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 161.807 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 161.807 Tm [<0046005200470048>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 161.807 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 161.807 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 161.807 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 161.807 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 161.807 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 149.851 Tm [<002E0042005500460053004A0042004D>-220<004A004F005400460053005500460045>-220<005800490046004F>-220<0042>]TJ
+/F111 7.97011 Tf 1 0 0 1 217.077 149.851 Tm [<003F0056005700480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 243.28 149.851 Tm [<005000440044005600530054>-220<004A004F>-220<004900500053004A005B0050004F00550042004D>-220<004E005000450046000D>-220<00420047005500460053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 375.743 149.851 Tm [<004B0056004E004C0053>]TJ
+0 g 0 G
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01EC>]TJ
+ET
+endstream
+endobj
+114 0 obj <<
+/Type /Page
+/Contents 115 0 R
+/Resources 113 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 124 0 R
+>> endobj
+116 0 obj <<
+/D [114 0 R /XYZ 113.386 613.662 null]
+>> endobj
+117 0 obj <<
+/D [114 0 R /XYZ 113.386 398.469 null]
+>> endobj
+118 0 obj <<
+/D [114 0 R /XYZ 113.386 376.88 null]
+>> endobj
+119 0 obj <<
+/D [114 0 R /XYZ 113.386 326.917 null]
+>> endobj
+120 0 obj <<
+/D [114 0 R /XYZ 113.386 290.873 null]
+>> endobj
+121 0 obj <<
+/D [114 0 R /XYZ 113.386 255.007 null]
+>> endobj
+122 0 obj <<
+/D [114 0 R /XYZ 113.386 207.186 null]
+>> endobj
+123 0 obj <<
+/D [114 0 R /XYZ 113.386 171.321 null]
+>> endobj
+113 0 obj <<
+/Font << /F105 5 0 R /F111 6 0 R /F7 46 0 R /F123 17 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+129 0 obj <<
+/Length 24112
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 87.183 640.013 Tm [<004A0055005200580053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 640.013 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 640.013 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 640.013 Tm [<00490044004F00560048>]TJ
+/F63 9.96264 Tf 1 0 0 1 247.732 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 628.058 Tm [<002A0047>-206<0055>]TJ
+0.98 0 0 1 125.198 628.058 Tm [<0049>]TJ
+0.97 0 0 1 130.519 628.058 Tm [<004A>]TJ
+0.98 0 0 1 133.09 628.058 Tm [<0054>]TJ
+0.97 0 0 1 138.999 628.058 Tm [<004A>]TJ
+0.98 0 0 1 141.569 628.058 Tm [<0054>-204<00540046>]TJ
+0.97 0 0 1 155.738 628.058 Tm [<0055>-206<0055>]TJ
+0.98 0 0 1 164.651 628.058 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 171.576 628.058 Tm [<00570055>]TJ
+0.98 0 0 1 180.892 628.058 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 190.305 628.058 Tm [<000D>-210<0055>]TJ
+0.98 0 0 1 198.165 628.058 Tm [<00490046>-204<00440050004F>]TJ
+0.97 0 0 1 224.138 628.058 Tm [<0055>]TJ
+0.98 0 0 1 227.598 628.058 Tm [<0046004F>]TJ
+0.97 0 0 1 237.39 628.058 Tm [<0055>]TJ
+0.98 0 0 1 242.844 628.058 Tm [<0050>]TJ
+0.97 0 0 1 247.774 628.058 Tm [<0047>-206<0055>]TJ
+0.98 0 0 1 256.456 628.058 Tm [<00490046>-204<0054>]TJ
+0.97 0 0 1 272.03 628.058 Tm [<0055>]TJ
+0.98 0 0 1 275.49 628.058 Tm [<00460051>]TJ
+0.97 0 0 1 286.925 628.058 Tm [<0009004A>]TJ
+0.98 0 0 1 292.665 628.058 Tm [<004F0044>]TJ
+0.97 0 0 1 302.048 628.058 Tm [<004D>]TJ
+0.98 0 0 1 304.522 628.058 Tm [<00560045>]TJ
+0.97 0 0 1 314.764 628.058 Tm [<004A>]TJ
+0.98 0 0 1 317.334 628.058 Tm [<004F0048>]TJ
+0.97 0 0 1 329.326 628.058 Tm [<0055>]TJ
+0.98 0 0 1 332.785 628.058 Tm [<00490046>]TJ
+0.97 0 0 1 344.445 628.058 Tm [<0057>]TJ
+0.98 0 0 1 349.016 628.058 Tm [<0042>]TJ
+0.97 0 0 1 353.449 628.058 Tm [<004D>]TJ
+0.98 0 0 1 355.923 628.058 Tm [<00560046>-204<0050>]TJ
+0.97 0 0 1 372.347 628.058 Tm [<0047>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 377.568 628.058 Tm [<0048>]TJ
+0.97 0 0 1 382.275 628.058 Tm [<0059>]TJ
+0.98 0 0 1 386.933 628.058 Tm [<0048>]TJ
+0.97 0 0 1 391.639 628.058 Tm [<0055005C000B00590012>]TJ
+0.98 0 0 1 414.93 628.058 Tm [<004B>]TJ
+0.97 0 0 1 419.637 628.058 Tm [<000C>]TJ
+0.98 0 0 1 424.295 628.058 Tm [<0056>]TJ
+0.97 0 0 1 429.001 628.058 Tm [<0057>]TJ
+0.98 0 0 1 433.659 628.058 Tm [<00480053>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 443.072 628.058 Tm [<000A>]TJ
+0.98 0 0 1 448.235 628.058 Tm [<00490042005100510046004F0054>]TJ
+1 0 0 1 113.386 616.103 Tm [<004A004F0054004A00450046>-220<0042>-220<00480053005000560051000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 580.238 Tm [<00340055005A004D0046>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 556.327 Tm [<0049005200510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 556.327 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 556.327 Tm [<0049005200510057>-602<0046005200500050004400510047>]TJ
+/F7 9.96264 Tf 1 0 0 1 178.762 556.327 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 196.474 556.327 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 199.741 556.327 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 233.325 556.327 Tm [<0056004F004C0047004800B70056>-602<004900520051>-1<0057>]TJ
+/F63 9.96264 Tf 1 0 0 1 290.953 556.327 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 113.386 544.372 Tm [<0265>]TJ
+0.995 0 0 1 123.397 544.372 Tm [<0046>]TJ
+0.99 0 0 1 130.011 544.372 Tm [<0047>]TJ
+0.995 0 0 1 133.305 544.372 Tm [<0050004F>]TJ
+0.99 0 0 1 143.843 544.372 Tm [<0055>]TJ
+0.995 0 0 1 149.577 544.372 Tm [<0056005400460045>]TJ
+0.99 0 0 1 170.565 544.372 Tm [<0055>]TJ
+0.995 0 0 1 174.096 544.372 Tm [<0050>]TJ
+0.99 0 0 1 181.305 544.372 Tm [<0055005A>]TJ
+0.995 0 0 1 189.392 544.372 Tm [<0051004600540046>]TJ
+0.99 0 0 1 207.364 544.372 Tm [<0055>-223<0055>]TJ
+0.995 0 0 1 216.629 544.372 Tm [<00490046>-222<0054>]TJ
+0.99 0 0 1 232.621 544.372 Tm [<0055>]TJ
+0.995 0 0 1 236.152 544.372 Tm [<00460051>]TJ
+0.99 0 0 1 245.738 544.372 Tm [<000F>-299<0265004A>]TJ
+0.995 0 0 1 263.745 544.372 Tm [<0054>]TJ
+0.99 0 0 1 269.924 544.372 Tm [<004A>]TJ
+0.995 0 0 1 272.547 544.372 Tm [<0054>-222<00420044>]TJ
+0.99 0 0 1 287.221 544.372 Tm [<0055>]TJ
+0.995 0 0 1 290.751 544.372 Tm [<00560042>]TJ
+0.99 0 0 1 300.486 544.372 Tm [<004D004D005A>-223<004B>]TJ
+0.995 0 0 1 314.702 544.372 Tm [<00560054>]TJ
+0.99 0 0 1 323.911 544.372 Tm [<0055>]TJ
+0.995 0 0 1 329.645 544.372 Tm [<0042>-222<0051>]TJ
+0.99 0 0 1 341.523 544.372 Tm [<004D>]TJ
+0.995 0 0 1 344.048 544.372 Tm [<00420044004600490050>]TJ
+0.99 0 0 1 367.363 544.372 Tm [<004D>]TJ
+0.995 0 0 1 369.888 544.372 Tm [<00450046>]TJ
+0.99 0 0 1 379.464 544.372 Tm [<0053>-223<0047>]TJ
+0.995 0 0 1 388.66 544.372 Tm [<0050>]TJ
+0.99 0 0 1 393.666 544.372 Tm [<0053>-223<0047>]TJ
+0.995 0 0 1 402.862 544.372 Tm [<0050004F>]TJ
+0.99 0 0 1 413.399 544.372 Tm [<0055>]TJ
+0.995 0 0 1 419.133 544.372 Tm [<00440050004E004E0042004F00450054>]TJ
+0.99 0 0 1 463.404 544.372 Tm [<000D>]TJ
+0.995 0 0 1 468.026 544.372 Tm [<0046>]TJ
+0.99 0 0 1 472.438 544.372 Tm [<000F>]TJ
+0.995 0 0 1 474.854 544.372 Tm [<0048>]TJ
+0.99 0 0 1 479.473 544.372 Tm [<000F>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 113.386 532.417 Tm [<003F004C0057>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 130.594 532.417 Tm [<0050>]TJ
+1.03 0 0 1 135.726 532.417 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 141.944 532.417 Tm [<003F>]TJ
+1.02 0 0 1 146.89 532.417 Tm [<0045>]TJ
+1.03 0 0 1 151.788 532.417 Tm [<0049>]TJ
+1.02 0 0 1 156.735 532.417 Tm [<00560048>]TJ
+1.03 0 0 1 166.531 532.417 Tm [<0055004C>]TJ
+1.02 0 0 1 176.424 532.417 Tm [<00480056>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 186.221 532.417 Tm [<000F>-336<002A0047>-231<0055>]TJ
+1.02 0 0 1 204.986 532.417 Tm [<0049>]TJ
+1.03 0 0 1 210.524 532.417 Tm [<004A>]TJ
+1.02 0 0 1 213.253 532.417 Tm [<0054>-233<0042>]TJ
+1.03 0 0 1 224.311 532.417 Tm [<005500550053004A>]TJ
+1.02 0 0 1 238.236 532.417 Tm [<00430056>]TJ
+1.03 0 0 1 248.774 532.417 Tm [<0055>]TJ
+1.02 0 0 1 252.448 532.417 Tm [<0046>]TJ
+1.03 0 0 1 259.339 532.417 Tm [<004A>]TJ
+1.02 0 0 1 262.069 532.417 Tm [<0054>-233<0056005400460045>]TJ
+1.03 0 0 1 287.77 532.417 Tm [<000D>-235<004A0055>]TJ
+1.02 0 0 1 301.471 532.417 Tm [<0054004900500056>]TJ
+1.03 0 0 1 321.581 532.417 Tm [<004D>]TJ
+1.02 0 0 1 324.208 532.417 Tm [<0045>-233<00430046>-233<0054005100460044>]TJ
+1.03 0 0 1 361.932 532.417 Tm [<004A00EB>]TJ
+1.02 0 0 1 370.419 532.417 Tm [<00460045>]TJ
+1.03 0 0 1 382.605 532.417 Tm [<0047>]TJ
+1.02 0 0 1 386.032 532.417 Tm [<0050>]TJ
+1.03 0 0 1 391.164 532.417 Tm [<0053>]TJ
+1.02 0 0 1 397.381 532.417 Tm [<0042>]TJ
+1.03 0 0 1 401.995 532.417 Tm [<004D004D>]TJ
+1.02 0 0 1 409.618 532.417 Tm [<0054>]TJ
+1.03 0 0 1 413.693 532.417 Tm [<0055>]TJ
+1.02 0 0 1 417.367 532.417 Tm [<00460051>]TJ
+1.03 0 0 1 429.563 532.417 Tm [<0055005A>]TJ
+1.02 0 0 1 437.977 532.417 Tm [<005100460054>]TJ
+1.03 0 0 1 451.879 532.417 Tm [<000D>]TJ
+1.02 0 0 1 456.807 532.417 Tm [<0050>]TJ
+1.03 0 0 1 461.938 532.417 Tm [<0053>-230<0055>]TJ
+1.02 0 0 1 471.829 532.417 Tm [<00490046>]TJ
+1.02 0 0 1 113.386 520.462 Tm [<0054>]TJ
+1.025 0 0 1 117.461 520.462 Tm [<004D004A>]TJ
+1.02 0 0 1 122.791 520.462 Tm [<00450046>-214<0050>]TJ
+1.025 0 0 1 139.919 520.462 Tm [<0053>-213<004B>]TJ
+1.02 0 0 1 148.42 520.462 Tm [<00500043>-214<0054004900500056>]TJ
+1.025 0 0 1 181.014 520.462 Tm [<004D>]TJ
+1.02 0 0 1 183.628 520.462 Tm [<0045>-214<00490042>]TJ
+1.025 0 0 1 201.254 520.462 Tm [<0057>]TJ
+1.02 0 0 1 206.084 520.462 Tm [<0046>]TJ
+1.025 0 0 1 212.786 520.462 Tm [<004A0055>]TJ
+1.02 0 0 1 219.158 520.462 Tm [<0054>-214<00500058004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.025 0 0 1 245.304 520.462 Tm [<0049>]TJ
+1.02 0 0 1 250.227 520.462 Tm [<00520051>]TJ
+1.025 0 0 1 260.023 520.462 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 267.125 520.462 Tm [<0042>]TJ
+1.025 0 0 1 271.739 520.462 Tm [<005500550053004A>]TJ
+1.02 0 0 1 285.596 520.462 Tm [<00430056>]TJ
+1.025 0 0 1 296.134 520.462 Tm [<0055>]TJ
+1.02 0 0 1 299.79 520.462 Tm [<0046>]TJ
+1.025 0 0 1 304.312 520.462 Tm [<000D>]TJ
+1.02 0 0 1 308.996 520.462 Tm [<0050>]TJ
+1.025 0 0 1 314.128 520.462 Tm [<0053>-213<0055>]TJ
+1.02 0 0 1 323.792 520.462 Tm [<00490046>-214<0054>]TJ
+1.025 0 0 1 340.107 520.462 Tm [<0055>]TJ
+1.02 0 0 1 343.763 520.462 Tm [<00460051>-214<0054004900500056>]TJ
+1.025 0 0 1 375.88 520.462 Tm [<004D>]TJ
+1.02 0 0 1 378.494 520.462 Tm [<0045>-214<00490042>]TJ
+1.025 0 0 1 396.12 520.462 Tm [<0057>]TJ
+1.02 0 0 1 400.95 520.462 Tm [<0046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 407.651 520.462 Tm [<004A>]TJ
+1.025 0 0 1 412.55 520.462 Tm [<0055>]TJ
+1.02 0 0 1 417.472 520.462 Tm [<005200580053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 434.347 520.462 Tm [<00540046>]TJ
+1.025 0 0 1 442.944 520.462 Tm [<0055>-213<0055>]TJ
+1.02 0 0 1 452.435 520.462 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.025 0 0 1 459.746 520.462 Tm [<00570055>]TJ
+1.02 0 0 1 469.591 520.462 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.025 0 0 1 479.388 520.462 Tm [<000F>]TJ
+1 0 0 1 113.386 508.506 Tm [<003000550049004600530058004A00540046000D>-220<00470050004F0055>-220<0058004A004D004D>-220<0043004D004600460045>-220<00550050>-220<005500490046>-220<0053004600540055>-220<00500047>-220<005500490046>-220<0054004D004A00450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 484.596 Tm [<00460052004F00520055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 484.596 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 484.596 Tm [<00310044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B005300550048>-1<00560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 270.006 484.596 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 287.717 484.596 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 290.985 484.596 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 324.569 484.596 Tm [<0056004F004C0047004800B70056>-602<004900520055>-1<0048004A00550052005800510047>]TJ
+/F63 9.96264 Tf 1 0 0 1 411.011 484.596 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 472.641 Tm [<02650046>-220<00440050004D00500053>-220<00500047>-220<005500490046>-220<0054005500460051000D>-220<00500057004600530053004A0045004A004F0048>-220<005500490046>-220<0054004D004A0045004600080054>-220<00470050005300460048005300500056004F0045>-220<00440050004D00500053000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 472.193 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 472.193 Tm [<00240050004D005000530054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 448.731 Tm [<00570055004400510056004C0057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 448.731 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 448.731 Tm [<00510044005000480047>-602<00570055004400510056004C0057>-1<004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 197.971 448.731 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 215.683 448.731 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 218.951 448.731 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 252.535 448.731 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 448.731 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 436.775 Tm [<0265>]TJ
+1.02 0 0 1 123.801 436.775 Tm [<0046>-282<0042004F>]TJ
+1.03 0 0 1 141.479 436.775 Tm [<004A>]TJ
+1.02 0 0 1 144.209 436.775 Tm [<004E0042>]TJ
+1.03 0 0 1 157.074 436.775 Tm [<0055004A>]TJ
+1.02 0 0 1 163.477 436.775 Tm [<0050004F>-282<0056005400460045>]TJ
+1.03 0 0 1 199.28 436.775 Tm [<0055>]TJ
+1.02 0 0 1 202.954 436.775 Tm [<0050>-282<0045>]TJ
+1.03 0 0 1 216.252 436.775 Tm [<004A>]TJ
+1.02 0 0 1 218.982 436.775 Tm [<00540051>]TJ
+1.03 0 0 1 228.361 436.775 Tm [<004D>]TJ
+1.02 0 0 1 230.988 436.775 Tm [<0042>]TJ
+1.03 0 0 1 235.602 436.775 Tm [<005A>-279<0055>]TJ
+1.02 0 0 1 246.889 436.775 Tm [<00490046>-282<0054>]TJ
+1.03 0 0 1 263.896 436.775 Tm [<0055>]TJ
+1.02 0 0 1 267.57 436.775 Tm [<00460051>]TJ
+1.03 0 0 1 277.396 436.775 Tm [<000D>]TJ
+1.02 0 0 1 282.953 436.775 Tm [<00420054>-282<0058>]TJ
+1.03 0 0 1 301.423 436.775 Tm [<004A0055>]TJ
+1.02 0 0 1 307.826 436.775 Tm [<0049>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 316.237 436.775 Tm [<003F>]TJ
+1.02 0 0 1 321.183 436.775 Tm [<0056>]TJ
+1.03 0 0 1 326.082 436.775 Tm [<004F004C>]TJ
+1.02 0 0 1 335.974 436.775 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 345.771 436.775 Tm [<000F>]TJ
+1.02 0 0 1 353.249 436.775 Tm [<002F0050>]TJ
+1.03 0 0 1 365.657 436.775 Tm [<0055>]TJ
+1.02 0 0 1 369.33 436.775 Tm [<0046>]TJ
+1.03 0 0 1 376.724 436.775 Tm [<0055>]TJ
+1.02 0 0 1 380.398 436.775 Tm [<00490042>]TJ
+1.03 0 0 1 390.55 436.775 Tm [<0055>-279<0055>]TJ
+1.02 0 0 1 400.769 436.775 Tm [<00490046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 413.702 436.775 Tm [<005300580056004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 433.295 436.775 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 438.852 436.775 Tm [<00460052>]TJ
+1.03 0 0 1 448.648 436.775 Tm [<0059>]TJ
+1.02 0 0 1 453.595 436.775 Tm [<0048>]TJ
+1.03 0 0 1 458.493 436.775 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 466.312 436.775 Tm [<0042004F0045>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 436.327 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 436.327 Tm [<003500530042004F0054004A0055004A0050004F0054>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.005 0 0 1 113.386 424.82 Tm [<0058005100460052>]TJ
+1.01 0 0 1 132.691 424.82 Tm [<0059>]TJ
+1.005 0 0 1 137.541 424.82 Tm [<0048>]TJ
+1.01 0 0 1 142.368 424.82 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 149.431 424.82 Tm [<00550053>]TJ
+1.005 0 0 1 156.806 424.82 Tm [<0042004F0054>]TJ
+1.01 0 0 1 170.954 424.82 Tm [<004A0055004A>]TJ
+1.005 0 0 1 179.909 424.82 Tm [<0050004F0054>-221<004E0042004C0046>-221<004E0050>]TJ
+1.01 0 0 1 234.307 424.82 Tm [<0053>]TJ
+1.005 0 0 1 238.08 424.82 Tm [<0046>-221<00540046004F00540046>-220<0058>]TJ
+1.01 0 0 1 276.297 424.82 Tm [<004A0055>]TJ
+1.005 0 0 1 282.576 424.82 Tm [<0049>-221<0054>]TJ
+1.01 0 0 1 294.26 424.82 Tm [<004D004A>]TJ
+1.005 0 0 1 299.513 424.82 Tm [<004500460054>]TJ
+1.01 0 0 1 313.2 424.82 Tm [<000D>]TJ
+1.005 0 0 1 317.883 424.82 Tm [<0054>]TJ
+1.01 0 0 1 321.898 424.82 Tm [<004A>]TJ
+1.005 0 0 1 324.574 424.82 Tm [<004F00440046>]TJ
+1.01 0 0 1 340.864 424.82 Tm [<0055>]TJ
+1.005 0 0 1 344.467 424.82 Tm [<00490046>]TJ
+1.01 0 0 1 354.379 424.82 Tm [<005A>]TJ
+1.005 0 0 1 361.24 424.82 Tm [<0042>]TJ
+1.01 0 0 1 365.786 424.82 Tm [<00EA>]TJ
+1.005 0 0 1 372.135 424.82 Tm [<00460044>]TJ
+1.01 0 0 1 380.626 424.82 Tm [<0055>-219<0055>]TJ
+1.005 0 0 1 390.043 424.82 Tm [<00490046>-221<0046004F>]TJ
+1.01 0 0 1 412.21 424.82 Tm [<0055004A0053>]TJ
+1.005 0 0 1 422.262 424.82 Tm [<0046>-221<0054>]TJ
+1.01 0 0 1 432.946 424.82 Tm [<004D004A>]TJ
+1.005 0 0 1 438.198 424.82 Tm [<00450046>-221<0042004F0045>-221<004F0050>]TJ
+1.01 0 0 1 478.287 424.82 Tm [<0055>]TJ
+1 0 0 1 113.386 412.865 Tm [<005500490046>-220<0054005500460051>-220<0050004F004D005A000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F90 11.95517 Tf 1 0 0 1 113.386 353.089 Tm [<002201040104010200F900F20105010400F50103>-220<00F600FF0102>-220<010400F800F5>-220<00FA00FF00F2>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.025 0 0 1 113.386 329.179 Tm [<0265004A>]TJ
+1.02 0 0 1 126.467 329.179 Tm [<0054>-215<005400460044>]TJ
+1.025 0 0 1 145.425 329.179 Tm [<0055004A>]TJ
+1.02 0 0 1 151.798 329.179 Tm [<0050004F>-215<0045004600540044>]TJ
+1.025 0 0 1 182.777 329.179 Tm [<0053004A>]TJ
+1.02 0 0 1 189.323 329.179 Tm [<004300460054>-215<0042>]TJ
+1.025 0 0 1 209.897 329.179 Tm [<005500550053004A>]TJ
+1.02 0 0 1 223.755 329.179 Tm [<00430056>]TJ
+1.025 0 0 1 234.292 329.179 Tm [<0055>]TJ
+1.02 0 0 1 237.948 329.179 Tm [<00460054>-215<00510046>]TJ
+1.025 0 0 1 258.563 329.179 Tm [<00530055>]TJ
+1.02 0 0 1 266.048 329.179 Tm [<0042>]TJ
+1.025 0 0 1 270.662 329.179 Tm [<004A>]TJ
+1.02 0 0 1 273.378 329.179 Tm [<004F>]TJ
+1.025 0 0 1 279.048 329.179 Tm [<004A>]TJ
+1.02 0 0 1 281.765 329.179 Tm [<004F0048>]TJ
+1.025 0 0 1 294.362 329.179 Tm [<0055>]TJ
+1.02 0 0 1 298.018 329.179 Tm [<0050>]TJ
+1.025 0 0 1 305.341 329.179 Tm [<0055>]TJ
+1.02 0 0 1 308.996 329.179 Tm [<00490046>-215<0046004F>]TJ
+1.025 0 0 1 331.44 329.179 Tm [<0055004A0053>]TJ
+1.02 0 0 1 341.642 329.179 Tm [<0046>-215<0045005000440056004E0046004F>]TJ
+1.025 0 0 1 386.686 329.179 Tm [<0055000F>-286<0265>]TJ
+1.02 0 0 1 406.131 329.179 Tm [<0046>]TJ
+1.025 0 0 1 410.653 329.179 Tm [<005A>]TJ
+1.02 0 0 1 417.562 329.179 Tm [<0042>]TJ
+1.025 0 0 1 422.175 329.179 Tm [<0053>]TJ
+1.02 0 0 1 426.005 329.179 Tm [<0046>-215<00540046>]TJ
+1.025 0 0 1 441.315 329.179 Tm [<0055>]TJ
+1.02 0 0 1 447.162 329.179 Tm [<0058>]TJ
+1.025 0 0 1 454.072 329.179 Tm [<004A0055>]TJ
+1.02 0 0 1 460.444 329.179 Tm [<0049>]TJ
+1.025 0 0 1 468.174 329.179 Tm [<0055>]TJ
+1.02 0 0 1 471.829 329.179 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 317.224 Tm [<003F005600480057005300440055004400500048005700480055>]TJ
+/F105 9.96264 Tf 1 0 0 1 178.008 317.224 Tm [<00440050004E004E0042004F0045>-220<0058004A00550049>]TJ
+/F117 7.97011 Tf 1 0 0 1 241.31 317.224 Tm [<004D00520045>]TJ
+/F105 9.96264 Tf 1 0 0 1 257.909 317.224 Tm [<00420054>-220<005500490046>-220<0051004200530042004E004600550046005300080054>-220<004F0042004E0046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 293.313 Tm [<004400580057004B00520055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 293.313 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 293.313 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 293.313 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 293.313 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 293.313 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 293.313 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 293.313 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.025 0 0 1 113.386 281.358 Tm [<0265>]TJ
+1.02 0 0 1 123.751 281.358 Tm [<0046>-215<00420056>]TJ
+1.025 0 0 1 140.44 281.358 Tm [<0055>]TJ
+1.02 0 0 1 144.096 281.358 Tm [<00490050>]TJ
+1.025 0 0 1 154.766 281.358 Tm [<00530008>]TJ
+1.02 0 0 1 160.658 281.358 Tm [<0054>-215<004F0042004E0046>]TJ
+1.025 0 0 1 189.979 281.358 Tm [<000F>-286<002A0055>-214<004A>]TJ
+1.02 0 0 1 207.271 281.358 Tm [<0054>-215<0054>]TJ
+1.025 0 0 1 217.609 281.358 Tm [<0055>]TJ
+1.02 0 0 1 221.265 281.358 Tm [<0050>]TJ
+1.025 0 0 1 226.397 281.358 Tm [<0053>]TJ
+1.02 0 0 1 230.226 281.358 Tm [<00460045>]TJ
+1.025 0 0 1 242.231 281.358 Tm [<004A>]TJ
+1.02 0 0 1 244.947 281.358 Tm [<004F>-215<0042>-215<00440050004E004E0042004F0045>-216<00440042>]TJ
+1.025 0 0 1 311.813 281.358 Tm [<004D004D>]TJ
+1.02 0 0 1 317.042 281.358 Tm [<00460045>]TJ
+/F111 7.97011 Tf 1.025 0 0 1 329.047 281.358 Tm [<003F>]TJ
+1.015 0 0 1 333.969 281.358 Tm [<0024>]TJ
+1.02 0 0 1 338.843 281.358 Tm [<0058>]TJ
+1.025 0 0 1 343.742 281.358 Tm [<0057>]TJ
+1.02 0 0 1 348.664 281.358 Tm [<004B0052>]TJ
+1.025 0 0 1 358.461 281.358 Tm [<0055>]TJ
+/F105 9.96264 Tf 1.025 0 0 1 363.383 281.358 Tm [<000D>]TJ
+1.02 0 0 1 368.074 281.358 Tm [<0042004F0045>-215<0056005400460045>]TJ
+1.025 0 0 1 407.286 281.358 Tm [<004A>]TJ
+1.02 0 0 1 410.002 281.358 Tm [<004F>]TJ
+1.025 0 0 1 417.861 281.358 Tm [<0055>]TJ
+1.02 0 0 1 421.517 281.358 Tm [<00490046>-215<0045005000440056004E0046004F>]TJ
+1.025 0 0 1 472.096 281.358 Tm [<00550008>]TJ
+1.02 0 0 1 477.815 281.358 Tm [<0054>]TJ
+1 0 0 1 113.386 269.403 Tm [<0051005300500051004600530055004A00460054000D>-220<0056004F004D004600540054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 187.986 269.403 Tm [<005300470049004400580057004B00520055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 233.399 269.403 Tm [<004A0054>-220<0045004600EB004F00460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 67.973 245.493 Tm [<005300470049004400580057004B00520055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 245.493 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 245.493 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 245.493 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 245.493 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 245.493 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 245.493 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 245.493 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 233.538 Tm [<0265004A0054>-220<004A0054>-220<0056005400460045>-220<004A004F>-220<005500490046>-220<0045005000440056004E0046004F005500080054>-220<0051005300500051004600530055004A00460054>-220<004A004F00540055004600420045>-220<00500047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 324.444 233.538 Tm [<004400580057004B00520055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 353.258 233.538 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 209.627 Tm [<0057004C0057004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 209.627 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 209.627 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 209.627 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 209.627 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 209.627 Tm [<003F004D005200450051004400500048>]TJ
+/F63 9.96264 Tf 1 0 0 1 242.93 209.627 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 197.672 Tm [<0265>]TJ
+1.01 0 0 1 123.65 197.672 Tm [<0046>-218<0045005000440056004E0046004F>]TJ
+1.015 0 0 1 168.281 197.672 Tm [<00550008>]TJ
+1.01 0 0 1 173.944 197.672 Tm [<0054>]TJ
+1.015 0 0 1 180.179 197.672 Tm [<0055004A0055004D>]TJ
+1.01 0 0 1 192.697 197.672 Tm [<0046>]TJ
+1.015 0 0 1 197.175 197.672 Tm [<000F>-291<002A0055>-217<004A>]TJ
+1.01 0 0 1 214.383 197.672 Tm [<0054>-218<0054>]TJ
+1.015 0 0 1 224.652 197.672 Tm [<0055>]TJ
+1.01 0 0 1 228.272 197.672 Tm [<0050>]TJ
+1.015 0 0 1 233.354 197.672 Tm [<0053>]TJ
+1.01 0 0 1 237.146 197.672 Tm [<00460045>]TJ
+1.015 0 0 1 249.065 197.672 Tm [<004A>]TJ
+1.01 0 0 1 251.755 197.672 Tm [<004F>-218<0042>-219<00440050004E004E0042004F0045>-218<00440042>]TJ
+1.015 0 0 1 318.063 197.672 Tm [<004D004D>]TJ
+1.01 0 0 1 323.24 197.672 Tm [<00460045>]TJ
+/F111 7.97011 Tf 1.015 0 0 1 335.159 197.672 Tm [<003F0037004C0057004F>]TJ
+1.01 0 0 1 359.531 197.672 Tm [<0048>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 364.381 197.672 Tm [<000D>]TJ
+1.01 0 0 1 369.06 197.672 Tm [<0042004F0045>-218<0056005400460045>]TJ
+1.015 0 0 1 407.952 197.672 Tm [<004A>]TJ
+1.01 0 0 1 410.642 197.672 Tm [<004F>]TJ
+1.015 0 0 1 418.456 197.672 Tm [<0055>]TJ
+1.01 0 0 1 422.076 197.672 Tm [<00490046>-218<0045005000440056004E0046004F>]TJ
+1.015 0 0 1 472.192 197.672 Tm [<00550008>]TJ
+1.01 0 0 1 477.855 197.672 Tm [<0054>]TJ
+1 0 0 1 113.386 185.717 Tm [<0051005300500051004600530055004A00460054000D>-220<0056004F004D004600540054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 187.986 185.717 Tm [<0053004700490057004C0057004F0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 228.596 185.717 Tm [<004A0054>-220<0045004600EB004F00460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 72.776 161.807 Tm [<0053004700490057004C0057004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 161.807 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 161.807 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 161.807 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 161.807 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 161.807 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 161.807 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 161.807 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 149.851 Tm [<0265004A0054>-220<004A0054>-220<0056005400460045>-220<004A004F>-220<005500490046>-220<0045005000440056004E0046004F005500080054>-220<0051005300500051004600530055004A00460054>-220<004A004F00540055004600420045>-220<00500047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 324.444 149.851 Tm [<0057004C0057004F0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 348.456 149.851 Tm [<000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01ED>]TJ
+ET
+endstream
+endobj
+128 0 obj <<
+/Type /Page
+/Contents 129 0 R
+/Resources 127 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 124 0 R
+/Annots [ 125 0 R 126 0 R ]
+>> endobj
+125 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 472.113 523.127 477.772]
+/A << /S /GoTo /D (ptx@section_link:25) >>
+>> endobj
+126 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 436.232 538.996 441.587]
+/A << /S /GoTo /D (ptx@section_link:20) >>
+>> endobj
+130 0 obj <<
+/D [128 0 R /XYZ 113.386 651.969 null]
+>> endobj
+131 0 obj <<
+/D [128 0 R /XYZ 113.386 589.752 null]
+>> endobj
+132 0 obj <<
+/D [128 0 R /XYZ 113.386 565.353 null]
+>> endobj
+133 0 obj <<
+/D [128 0 R /XYZ 113.386 495.067 null]
+>> endobj
+134 0 obj <<
+/D [128 0 R /XYZ 113.386 458.245 null]
+>> endobj
+24 0 obj <<
+/D [128 0 R /XYZ 113.386 362.604 null]
+>> endobj
+135 0 obj <<
+/D [128 0 R /XYZ 113.386 303.007 null]
+>> endobj
+136 0 obj <<
+/D [128 0 R /XYZ 113.386 255.186 null]
+>> endobj
+137 0 obj <<
+/D [128 0 R /XYZ 113.386 219.321 null]
+>> endobj
+138 0 obj <<
+/D [128 0 R /XYZ 113.386 171.5 null]
+>> endobj
+127 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R /F90 14 0 R /F117 23 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+145 0 obj <<
+/Length 32015
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 91.985 640.013 Tm [<0047004400570048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<005600570055004C0051004A>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 640.013 Tm [<001F0050005200510057004B00210012001F00470044005C00210012001F005C0048004400550021>]TJ
+/F63 9.96264 Tf 1 0 0 1 300.558 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<02650046>-220<0045005000440056004E0046004F005500080054>-220<0045004200550046000D>-220<00530046004400500053004500460045>-220<004A004F>-220<005500490046>-220<004E0042004400530050>]TJ
+/F111 7.97011 Tf 1 0 0 1 293.381 628.058 Tm [<003F0027004400570048>]TJ
+/F105 9.96264 Tf 1 0 0 1 317.392 628.058 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 604.148 Tm [<004500440046004E004A00550052005800510047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 604.148 Tm [<00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B005300550048>-1<00560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 270.006 604.148 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 287.717 604.148 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 290.985 604.148 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 324.569 604.148 Tm [<00550048004400470048005500B70056>-602<00470048>-1<004900440058004F0057>]TJ
+/F63 9.96264 Tf 1 0 0 1 401.406 604.148 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 592.193 Tm [<0265004A0054>-217<0054004600550054>-218<005500490046>-218<00440050004D00500053>-217<00500047>-218<005500490046>-218<00530046004200450046005300080054>-217<004300420044004C0048005300500056004F0045>-218<0009004A0047>-218<005500490046>-217<005300460042004500460053>-218<0042004D004D005000580054>-218<0054005600440049>-217<0042>-218<00550049004A004F0048>-218<00550050>-217<00430046>-218<00450050004F0046000A000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 591.744 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 591.744 Tm [<00240050004D005000530054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 113.386 580.238 Tm [<003A>]TJ
+0.98 0 0 1 118.817 580.238 Tm [<00500056>-219<00440042004F>-220<00540046>]TJ
+0.97 0 0 1 155.264 580.238 Tm [<0055>-221<004A0055>-222<0055>]TJ
+0.98 0 0 1 172.5 580.238 Tm [<0050>]TJ
+0.97 0 0 1 179.573 580.238 Tm [<0055>]TJ
+0.98 0 0 1 183.033 580.238 Tm [<00490046>-219<00440050>]TJ
+0.97 0 0 1 203.707 580.238 Tm [<004D>]TJ
+0.98 0 0 1 206.181 580.238 Tm [<0050>]TJ
+0.97 0 0 1 211.111 580.238 Tm [<0053>]TJ
+0.98 0 0 1 216.879 580.238 Tm [<0050>]TJ
+0.97 0 0 1 221.809 580.238 Tm [<0047>-221<0055>]TJ
+0.98 0 0 1 230.64 580.238 Tm [<00490046>-219<0054>]TJ
+0.97 0 0 1 246.364 580.238 Tm [<004D004A>]TJ
+0.98 0 0 1 251.408 580.238 Tm [<00450046>]TJ
+0.97 0 0 1 260.84 580.238 Tm [<0008>]TJ
+0.98 0 0 1 262.792 580.238 Tm [<0054>-219<004300420044004C0048>]TJ
+0.97 0 0 1 291.608 580.238 Tm [<0053>]TJ
+0.98 0 0 1 295.232 580.238 Tm [<00500056004F0045>]TJ
+0.97 0 0 1 315.853 580.238 Tm [<000D>]TJ
+0.98 0 0 1 320.373 580.238 Tm [<00540050>]TJ
+0.97 0 0 1 331.362 580.238 Tm [<0055>]TJ
+0.98 0 0 1 334.822 580.238 Tm [<00490042>]TJ
+0.97 0 0 1 344.575 580.238 Tm [<0055>]TJ
+0.98 0 0 1 350.178 580.238 Tm [<0054>]TJ
+0.97 0 0 1 354.093 580.238 Tm [<004D004A>]TJ
+0.98 0 0 1 359.138 580.238 Tm [<004500460054>-219<00420051005100460042>]TJ
+0.97 0 0 1 398.03 580.238 Tm [<0053>-221<0055>]TJ
+0.98 0 0 1 407.257 580.238 Tm [<0050>-219<00490042>]TJ
+0.97 0 0 1 424.084 580.238 Tm [<0057>]TJ
+0.98 0 0 1 428.655 580.238 Tm [<0046>]TJ
+0.97 0 0 1 435.143 580.238 Tm [<0055>]TJ
+0.98 0 0 1 438.603 580.238 Tm [<00490046>-219<00540044>]TJ
+0.97 0 0 1 458.261 580.238 Tm [<0053>]TJ
+0.98 0 0 1 461.885 580.238 Tm [<00460046004F>]TJ
+0.97 0 0 1 476.023 580.238 Tm [<0008>]TJ
+0.98 0 0 1 477.975 580.238 Tm [<0054>]TJ
+1 0 0 1 113.386 568.282 Tm [<0045004A004E0046004F0054004A0050004F0054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 544.372 Tm [<0049005200510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 544.372 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 544.372 Tm [<0049005200510057>-602<0046005200500050004400510047>]TJ
+/F7 9.96264 Tf 1 0 0 1 178.762 544.372 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 196.474 544.372 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 199.741 544.372 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 233.325 544.372 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 266.942 544.372 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 532.417 Tm [<0265>]TJ
+0.98 0 0 1 123.245 532.417 Tm [<0046>-225<00450046>]TJ
+0.975 0 0 1 139.225 532.417 Tm [<0047>]TJ
+0.98 0 0 1 142.469 532.417 Tm [<00420056>]TJ
+0.975 0 0 1 152.057 532.417 Tm [<004D0055>-226<0047>]TJ
+0.98 0 0 1 163.469 532.417 Tm [<0050004F>]TJ
+0.975 0 0 1 173.848 532.417 Tm [<0055>-226<0047>]TJ
+0.98 0 0 1 182.774 532.417 Tm [<0050>]TJ
+0.975 0 0 1 187.704 532.417 Tm [<0053>-226<0055>]TJ
+0.98 0 0 1 197.028 532.417 Tm [<00490046>]TJ
+0.975 0 0 1 208.898 532.417 Tm [<004B>]TJ
+0.98 0 0 1 211.268 532.417 Tm [<00500043>]TJ
+0.975 0 0 1 221.168 532.417 Tm [<000F>-304<0265004A>]TJ
+0.98 0 0 1 238.949 532.417 Tm [<0054>]TJ
+0.975 0 0 1 245.068 532.417 Tm [<004A>]TJ
+0.98 0 0 1 247.652 532.417 Tm [<0054>-225<00420044>]TJ
+0.975 0 0 1 262.138 532.417 Tm [<0055>]TJ
+0.98 0 0 1 265.616 532.417 Tm [<00560042>]TJ
+0.975 0 0 1 275.204 532.417 Tm [<004D004D005A>-226<004B>]TJ
+0.98 0 0 1 289.239 532.417 Tm [<00560054>]TJ
+0.975 0 0 1 298.309 532.417 Tm [<0055>]TJ
+0.98 0 0 1 303.99 532.417 Tm [<0042>-225<0051>]TJ
+0.975 0 0 1 315.723 532.417 Tm [<004D>]TJ
+0.98 0 0 1 318.21 532.417 Tm [<00420044004600490050>]TJ
+0.975 0 0 1 341.173 532.417 Tm [<004D>]TJ
+0.98 0 0 1 343.66 532.417 Tm [<00450046>]TJ
+0.975 0 0 1 353.091 532.417 Tm [<0053>-226<0047>]TJ
+0.98 0 0 1 362.182 532.417 Tm [<0050>]TJ
+0.975 0 0 1 367.113 532.417 Tm [<0053>-226<0047>]TJ
+0.98 0 0 1 376.203 532.417 Tm [<0050004F>]TJ
+0.975 0 0 1 386.582 532.417 Tm [<0055>]TJ
+0.98 0 0 1 392.263 532.417 Tm [<00440050004E004E0042004F00450054>]TJ
+0.975 0 0 1 435.867 532.417 Tm [<000D>]TJ
+0.98 0 0 1 440.453 532.417 Tm [<0046>]TJ
+0.975 0 0 1 444.798 532.417 Tm [<000F>]TJ
+0.98 0 0 1 447.178 532.417 Tm [<0048>]TJ
+0.975 0 0 1 451.728 532.417 Tm [<000F>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 457.066 532.417 Tm [<003F004C0057>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 473.317 532.417 Tm [<0050>]TJ
+0.975 0 0 1 478.247 532.417 Tm [<0053>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 113.386 520.462 Tm [<003F>]TJ
+0.98 0 0 1 118.044 520.462 Tm [<0045>]TJ
+0.97 0 0 1 122.75 520.462 Tm [<0049>]TJ
+0.98 0 0 1 127.409 520.462 Tm [<00560048>]TJ
+0.97 0 0 1 136.821 520.462 Tm [<0055004C>]TJ
+0.98 0 0 1 146.138 520.462 Tm [<00480056>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 155.55 520.462 Tm [<000F>-299<002A0055>-218<004A>]TJ
+0.98 0 0 1 172.076 520.462 Tm [<0054>-215<0058>]TJ
+0.97 0 0 1 184.734 520.462 Tm [<004A>]TJ
+0.98 0 0 1 187.304 520.462 Tm [<00540046>]TJ
+0.97 0 0 1 197.668 520.462 Tm [<0055>]TJ
+0.98 0 0 1 201.127 520.462 Tm [<0050>-215<0048>]TJ
+0.97 0 0 1 212.711 520.462 Tm [<004A0057>]TJ
+0.98 0 0 1 219.853 520.462 Tm [<0046>-215<0042>]TJ
+0.97 0 0 1 232.837 520.462 Tm [<0057>]TJ
+0.98 0 0 1 237.408 520.462 Tm [<0042>]TJ
+0.97 0 0 1 241.841 520.462 Tm [<004D>]TJ
+0.98 0 0 1 244.315 520.462 Tm [<00560046>]TJ
+0.97 0 0 1 255.918 520.462 Tm [<0055>]TJ
+0.98 0 0 1 259.378 520.462 Tm [<0050>]TJ
+0.97 0 0 1 266.412 520.462 Tm [<0055>]TJ
+0.98 0 0 1 269.872 520.462 Tm [<0049>]TJ
+0.97 0 0 1 275.193 520.462 Tm [<004A>]TJ
+0.98 0 0 1 277.763 520.462 Tm [<0054>-215<0042>]TJ
+0.97 0 0 1 288.215 520.462 Tm [<005500550053004A>]TJ
+0.98 0 0 1 301.328 520.462 Tm [<00430056>]TJ
+0.97 0 0 1 311.453 520.462 Tm [<0055>]TJ
+0.98 0 0 1 314.913 520.462 Tm [<0046>]TJ
+0.97 0 0 1 319.257 520.462 Tm [<000D>]TJ
+0.98 0 0 1 323.746 520.462 Tm [<00540050>]TJ
+0.97 0 0 1 334.696 520.462 Tm [<0055>]TJ
+0.98 0 0 1 338.155 520.462 Tm [<00490042>]TJ
+0.97 0 0 1 347.909 520.462 Tm [<0055>-217<0047>]TJ
+0.98 0 0 1 356.7 520.462 Tm [<0050004F>]TJ
+0.97 0 0 1 367.078 520.462 Tm [<0055>]TJ
+0.98 0 0 1 370.538 520.462 Tm [<0054>-215<00440042004F>-215<00430046>-216<00540042>]TJ
+0.97 0 0 1 412.241 520.462 Tm [<0047>]TJ
+0.98 0 0 1 415.469 520.462 Tm [<0046>]TJ
+0.97 0 0 1 419.814 520.462 Tm [<004D005A>]TJ
+0.98 0 0 1 428.856 520.462 Tm [<0056005400460045>]TJ
+0.97 0 0 1 449.461 520.462 Tm [<004A>]TJ
+0.98 0 0 1 452.032 520.462 Tm [<004F>-215<0054>]TJ
+0.97 0 0 1 463.499 520.462 Tm [<004D004A>]TJ
+0.98 0 0 1 468.543 520.462 Tm [<004500460054>]TJ
+1 0 0 1 113.386 508.506 Tm [<0042004F0045>-220<00540055004600510054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 484.596 Tm [<0050005200470048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 484.596 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 484.596 Tm [<005300550048005600480051005700440057004C00520051>]TJ
+/F111 7.97011 Tf 1 0 0 1 178.762 484.596 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 183.565 484.596 Tm [<004B004400510047005200580057>]TJ
+/F7 9.96264 Tf 1 0 0 1 217.181 484.596 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 234.892 484.596 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.16 484.596 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 271.744 484.596 Tm [<005300550048005600480051005700440057004C00520051>]TJ
+/F63 9.96264 Tf 1 0 0 1 329.371 484.596 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 113.386 472.641 Tm [<00340046>]TJ
+0.98 0 0 1 122.581 472.641 Tm [<004D>]TJ
+0.985 0 0 1 125.08 472.641 Tm [<00460044>]TJ
+0.98 0 0 1 133.402 472.641 Tm [<0055>]TJ
+0.985 0 0 1 136.897 472.641 Tm [<0054>-220<004900500058>]TJ
+0.98 0 0 1 162.14 472.641 Tm [<0055>]TJ
+0.985 0 0 1 165.635 472.641 Tm [<00490046>-220<0045005000440056004E0046004F>]TJ
+0.98 0 0 1 214.531 472.641 Tm [<0055>]TJ
+0.985 0 0 1 220.191 472.641 Tm [<0054004900500056>]TJ
+0.98 0 0 1 239.611 472.641 Tm [<004D>]TJ
+0.985 0 0 1 242.111 472.641 Tm [<0045>-220<00430046>-221<0045>]TJ
+0.98 0 0 1 266.028 472.641 Tm [<004A>]TJ
+0.985 0 0 1 268.626 472.641 Tm [<00540051>]TJ
+0.98 0 0 1 277.683 472.641 Tm [<004D>]TJ
+0.985 0 0 1 280.183 472.641 Tm [<0042>]TJ
+0.98 0 0 1 284.638 472.641 Tm [<005A>]TJ
+0.985 0 0 1 289.148 472.641 Tm [<00460045>]TJ
+0.98 0 0 1 298.628 472.641 Tm [<000F>-298<002A>]TJ
+0.985 0 0 1 307.097 472.641 Tm [<004F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 314.738 472.641 Tm [<004B00440051004700520058>]TJ
+0.98 0 0 1 343.119 472.641 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 347.826 472.641 Tm [<000D>]TJ
+0.985 0 0 1 352.388 472.641 Tm [<0050004F>]TJ
+0.98 0 0 1 362.82 472.641 Tm [<004D005A>-221<0055>]TJ
+0.985 0 0 1 375.49 472.641 Tm [<0049005000540046>-220<0054>]TJ
+0.98 0 0 1 400.197 472.641 Tm [<0055>]TJ
+0.985 0 0 1 403.692 472.641 Tm [<004600510054>-220<00580049005000540046>]TJ
+0.98 0 0 1 446.726 472.641 Tm [<0057>]TJ
+0.985 0 0 1 451.344 472.641 Tm [<0042>]TJ
+0.98 0 0 1 455.799 472.641 Tm [<004D>]TJ
+0.985 0 0 1 458.298 472.641 Tm [<00560046>]TJ
+0.98 0 0 1 470.012 472.641 Tm [<0047>]TJ
+0.985 0 0 1 473.273 472.641 Tm [<0050>]TJ
+0.98 0 0 1 478.228 472.641 Tm [<0053>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 472.193 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 472.193 Tm [<00310053004600540046004F005500420055004A0050004F>-200<0042004F0045>]TJ
+1 0 0 1 506.756 463.226 Tm [<00490042004F0045005000560055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 113.386 460.686 Tm [<0055>]TJ
+0.98 0 0 1 116.845 460.686 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 128.201 460.686 Tm [<004B00440051004700520058>]TJ
+0.97 0 0 1 156.438 460.686 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 162.786 460.686 Tm [<0042>]TJ
+0.97 0 0 1 167.219 460.686 Tm [<005500550053004A>]TJ
+0.98 0 0 1 180.332 460.686 Tm [<00430056>]TJ
+0.97 0 0 1 190.457 460.686 Tm [<0055>]TJ
+0.98 0 0 1 193.917 460.686 Tm [<0046>]TJ
+0.97 0 0 1 199.951 460.686 Tm [<004A>]TJ
+0.98 0 0 1 202.521 460.686 Tm [<0054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 208.126 460.686 Tm [<00570055>]TJ
+0.98 0 0 1 217.443 460.686 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 228.545 460.686 Tm [<0042>]TJ
+0.97 0 0 1 232.977 460.686 Tm [<0053>]TJ
+0.98 0 0 1 236.601 460.686 Tm [<0046>-173<0045>]TJ
+0.97 0 0 1 247.722 460.686 Tm [<004A>]TJ
+0.98 0 0 1 250.293 460.686 Tm [<00540051>]TJ
+0.97 0 0 1 259.304 460.686 Tm [<004D>]TJ
+0.98 0 0 1 261.778 460.686 Tm [<0042>]TJ
+0.97 0 0 1 266.211 460.686 Tm [<005A>]TJ
+0.98 0 0 1 270.675 460.686 Tm [<00460045>]TJ
+0.97 0 0 1 280.107 460.686 Tm [<000F>-285<0265>]TJ
+0.98 0 0 1 295.038 460.686 Tm [<0046>-173<0050>]TJ
+0.97 0 0 1 306.003 460.686 Tm [<0055>]TJ
+0.98 0 0 1 309.462 460.686 Tm [<00490046>]TJ
+0.97 0 0 1 319.128 460.686 Tm [<0053>]TJ
+0.98 0 0 1 324.442 460.686 Tm [<0050004F00460054>-173<004F0050004F0046>]TJ
+0.97 0 0 1 364.941 460.686 Tm [<0055>]TJ
+0.98 0 0 1 368.4 460.686 Tm [<00490046>]TJ
+0.97 0 0 1 378.066 460.686 Tm [<004D>]TJ
+0.98 0 0 1 380.54 460.686 Tm [<004600540054>]TJ
+0.97 0 0 1 394.404 460.686 Tm [<0055>]TJ
+0.98 0 0 1 397.864 460.686 Tm [<0042004C0046>-173<00540051004200440046>-173<0050004F>]TJ
+0.97 0 0 1 448.684 460.686 Tm [<0055>]TJ
+0.98 0 0 1 452.143 460.686 Tm [<00490046>-173<0054>]TJ
+0.97 0 0 1 467.414 460.686 Tm [<004D004A>]TJ
+0.98 0 0 1 472.458 460.686 Tm [<00450046>]TJ
+0.98 0 0 1 113.386 448.731 Tm [<0042004F0045>-219<00440042004F>-220<00430046>]TJ
+0.97 0 0 1 157.919 448.731 Tm [<0055>]TJ
+0.98 0 0 1 161.379 448.731 Tm [<0056>]TJ
+0.97 0 0 1 166.534 448.731 Tm [<0053>]TJ
+0.98 0 0 1 170.158 448.731 Tm [<004F00460045>-219<0050004F>]TJ
+0.97 0 0 1 199.707 448.731 Tm [<004A>]TJ
+0.98 0 0 1 202.278 448.731 Tm [<004F>]TJ
+0.97 0 0 1 209.871 448.731 Tm [<0055>]TJ
+0.98 0 0 1 213.331 448.731 Tm [<00490046>]TJ
+0.97 0 0 1 225.142 448.731 Tm [<0053>]TJ
+0.98 0 0 1 228.766 448.731 Tm [<0046004200450046>]TJ
+0.97 0 0 1 246.975 448.731 Tm [<00530008>]TJ
+0.98 0 0 1 252.551 448.731 Tm [<0054>]TJ
+0.97 0 0 1 258.612 448.731 Tm [<004D>]TJ
+0.98 0 0 1 261.086 448.731 Tm [<0042>]TJ
+0.97 0 0 1 265.518 448.731 Tm [<005A>]TJ
+0.98 0 0 1 269.983 448.731 Tm [<0046>]TJ
+0.97 0 0 1 274.328 448.731 Tm [<0053>]TJ
+0.98 0 0 1 277.951 448.731 Tm [<0054>-219<00510042004F0046>]TJ
+0.97 0 0 1 303.334 448.731 Tm [<004D000F>-300<0265>]TJ
+0.98 0 0 1 320.891 448.731 Tm [<0046>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 327.381 448.731 Tm [<003F>]TJ
+0.98 0 0 1 332.04 448.731 Tm [<004B00440051004700520058>]TJ
+0.97 0 0 1 360.277 448.731 Tm [<0057>]TJ
+0.98 0 0 1 364.935 448.731 Tm [<00520051>]TJ
+0.97 0 0 1 374.348 448.731 Tm [<004F005C>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 383.664 448.731 Tm [<000D>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 388.187 448.731 Tm [<003F>]TJ
+0.98 0 0 1 392.845 448.731 Tm [<0053>]TJ
+0.97 0 0 1 397.551 448.731 Tm [<0055>]TJ
+0.98 0 0 1 402.21 448.731 Tm [<0048005600480051>]TJ
+0.97 0 0 1 421.035 448.731 Tm [<0057>]TJ
+0.98 0 0 1 425.693 448.731 Tm [<0044>]TJ
+0.97 0 0 1 430.399 448.731 Tm [<0057004C>]TJ
+0.98 0 0 1 439.716 448.731 Tm [<0052005100520051>]TJ
+0.97 0 0 1 458.541 448.731 Tm [<004F005C>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 470.003 448.731 Tm [<0042>]TJ
+0.97 0 0 1 474.435 448.731 Tm [<000D>]TJ
+0.98 0 0 1 476.803 448.731 Tm [<0045>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 113.386 436.775 Tm [<003F>]TJ
+1.005 0 0 1 118.236 436.775 Tm [<0053>]TJ
+1.01 0 0 1 123.062 436.775 Tm [<0055>]TJ
+1.005 0 0 1 127.913 436.775 Tm [<0048005600480051>]TJ
+1.01 0 0 1 147.218 436.775 Tm [<0057>]TJ
+1.005 0 0 1 152.068 436.775 Tm [<0044>]TJ
+1.01 0 0 1 156.895 436.775 Tm [<0057004C>]TJ
+1.005 0 0 1 166.595 436.775 Tm [<005200510052>]TJ
+1.01 0 0 1 181.074 436.775 Tm [<0055>]TJ
+1.005 0 0 1 185.925 436.775 Tm [<004B00440051004700520058>]TJ
+1.01 0 0 1 214.883 436.775 Tm [<0057>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 221.949 436.775 Tm [<00440050004E004E0042004F00450054>-221<0042>]TJ
+1.01 0 0 1 273.426 436.775 Tm [<0053>]TJ
+1.005 0 0 1 277.2 436.775 Tm [<0046>-221<004E0050>]TJ
+1.01 0 0 1 297.058 436.775 Tm [<0053>]TJ
+1.005 0 0 1 300.831 436.775 Tm [<0046>]TJ
+1.01 0 0 1 307.503 436.775 Tm [<0053>]TJ
+1.005 0 0 1 311.276 436.775 Tm [<00420045>]TJ
+1.01 0 0 1 321.038 436.775 Tm [<004A>]TJ
+1.005 0 0 1 323.715 436.775 Tm [<00440042>]TJ
+1.01 0 0 1 332.295 436.775 Tm [<004D>-220<005A>]TJ
+1.005 0 0 1 341.736 436.775 Tm [<0046>]TJ
+1.01 0 0 1 346.192 436.775 Tm [<0055000D>]TJ
+1.005 0 0 1 354.482 436.775 Tm [<0054>]TJ
+1.01 0 0 1 358.497 436.775 Tm [<004A>]TJ
+1.005 0 0 1 361.173 436.775 Tm [<004F00440046>]TJ
+1.01 0 0 1 377.467 436.775 Tm [<0055>]TJ
+1.005 0 0 1 381.069 436.775 Tm [<00490046>]TJ
+1.01 0 0 1 390.981 436.775 Tm [<005A>]TJ
+1.005 0 0 1 397.846 436.775 Tm [<0048005000430043>]TJ
+1.01 0 0 1 417.761 436.775 Tm [<004D>]TJ
+1.005 0 0 1 420.337 436.775 Tm [<0046>]TJ
+1.01 0 0 1 427.008 436.775 Tm [<0055>]TJ
+1.005 0 0 1 430.611 436.775 Tm [<00490046>-221<0045>]TJ
+1.01 0 0 1 447.956 436.775 Tm [<004A>]TJ
+1.005 0 0 1 450.632 436.775 Tm [<005400440042>]TJ
+1.01 0 0 1 463.228 436.775 Tm [<0053>]TJ
+1.005 0 0 1 467.001 436.775 Tm [<004500460045>]TJ
+1 0 0 1 113.386 424.82 Tm [<004E0042005500460053004A0042004D000D>-220<00580049004A00440049>-220<004A0054004F00080055>-220<0055005A00510046005400460055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 400.91 Tm [<00490058004F004F005600460055004800480051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 400.91 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 400.91 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 400.91 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 400.91 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 400.91 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 400.91 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 400.91 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 400.91 Tm [<00490044004F00560048>]TJ
+/F63 9.96264 Tf 1 0 0 1 247.732 400.91 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 388.955 Tm [<002A0047>-225<0055>]TJ
+0.98 0 0 1 125.446 388.955 Tm [<0049>]TJ
+0.975 0 0 1 130.767 388.955 Tm [<004A>]TJ
+0.98 0 0 1 133.351 388.955 Tm [<0054>]TJ
+0.975 0 0 1 139.457 388.955 Tm [<004A>]TJ
+0.98 0 0 1 142.041 388.955 Tm [<0054>]TJ
+0.975 0 0 1 148.148 388.955 Tm [<0055>]TJ
+0.98 0 0 1 151.625 388.955 Tm [<0056>]TJ
+0.975 0 0 1 156.78 388.955 Tm [<0053>]TJ
+0.98 0 0 1 160.423 388.955 Tm [<004F00460045>]TJ
+0.975 0 0 1 177.494 388.955 Tm [<0055>]TJ
+0.98 0 0 1 180.971 388.955 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.975 0 0 1 188.093 388.955 Tm [<00570055>]TJ
+0.98 0 0 1 197.457 388.955 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 206.87 388.955 Tm [<000D>-225<0055>]TJ
+0.98 0 0 1 214.919 388.955 Tm [<00490046>-224<0045005000440056004E0046004F>]TJ
+0.975 0 0 1 263.603 388.955 Tm [<0055>-225<004A>]TJ
+0.98 0 0 1 271.856 388.955 Tm [<0054>-224<005000510046004F00460045>]TJ
+0.975 0 0 1 309.405 388.955 Tm [<004A>]TJ
+0.98 0 0 1 311.988 388.955 Tm [<004F>]TJ
+0.975 0 0 1 319.628 388.955 Tm [<0047>]TJ
+0.98 0 0 1 322.872 388.955 Tm [<0056>]TJ
+0.975 0 0 1 328.027 388.955 Tm [<004D004D>]TJ
+0.98 0 0 1 335.192 388.955 Tm [<00540044>]TJ
+0.975 0 0 1 343.041 388.955 Tm [<0053>]TJ
+0.98 0 0 1 346.684 388.955 Tm [<00460046004F>]TJ
+0.975 0 0 1 360.821 388.955 Tm [<000D>]TJ
+0.98 0 0 1 365.393 388.955 Tm [<00580049>]TJ
+0.975 0 0 1 377.353 388.955 Tm [<004A>]TJ
+0.98 0 0 1 379.937 388.955 Tm [<00440049>-224<0058>]TJ
+0.975 0 0 1 398.023 388.955 Tm [<004A004D004D>]TJ
+0.98 0 0 1 407.771 388.955 Tm [<0051>]TJ
+0.975 0 0 1 412.868 388.955 Tm [<0053>]TJ
+0.98 0 0 1 416.51 388.955 Tm [<0050004300420043>]TJ
+0.975 0 0 1 435.812 388.955 Tm [<004D005A>]TJ
+0.98 0 0 1 444.978 388.955 Tm [<004E0042004C0046>]TJ
+0.975 0 0 1 468.747 388.955 Tm [<0055>]TJ
+0.98 0 0 1 472.224 388.955 Tm [<00490046>]TJ
+1 0 0 1 113.386 377 Tm [<005300460042004500460053>-220<00540046004F0045>-220<0042>-220<004E004600540054004200480046>-220<004700500053>-220<00440050004F00EB0053004E00420055004A0050004F000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 43.962 353.089 Tm [<004400580057005200490058004F004F005600460055004800480051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 353.089 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 353.089 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 353.089 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 353.089 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 353.089 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 353.089 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 353.089 Tm [<00490044004F00560048>]TJ
+/F63 9.96264 Tf 1 0 0 1 247.732 353.089 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 341.134 Tm [<002A0047>-270<0055>]TJ
+1.02 0 0 1 126.587 341.134 Tm [<0049>]TJ
+1.03 0 0 1 132.125 341.134 Tm [<004A>]TJ
+1.02 0 0 1 134.855 341.134 Tm [<0054>]TJ
+1.03 0 0 1 141.706 341.134 Tm [<004A>]TJ
+1.02 0 0 1 144.435 341.134 Tm [<0054>]TJ
+1.03 0 0 1 151.286 341.134 Tm [<0055>]TJ
+1.02 0 0 1 154.96 341.134 Tm [<0056>]TJ
+1.03 0 0 1 160.325 341.134 Tm [<0053>]TJ
+1.02 0 0 1 164.173 341.134 Tm [<004F00460045>]TJ
+1.03 0 0 1 182.436 341.134 Tm [<0055>]TJ
+1.02 0 0 1 186.109 341.134 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 194.017 341.134 Tm [<00570055>]TJ
+1.02 0 0 1 203.909 341.134 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 213.706 341.134 Tm [<000D>-284<0055>]TJ
+1.02 0 0 1 222.816 341.134 Tm [<00490046>-273<0045005000440056004E0046004F>]TJ
+1.03 0 0 1 273.982 341.134 Tm [<0055>-270<004A>]TJ
+1.02 0 0 1 283.161 341.134 Tm [<0054>-273<0045>]TJ
+1.03 0 0 1 295.306 341.134 Tm [<004A>]TJ
+1.02 0 0 1 298.036 341.134 Tm [<00540051>]TJ
+1.03 0 0 1 307.415 341.134 Tm [<004D>]TJ
+1.02 0 0 1 310.042 341.134 Tm [<0042>]TJ
+1.03 0 0 1 314.656 341.134 Tm [<005A>]TJ
+1.02 0 0 1 319.396 341.134 Tm [<00460045>]TJ
+1.03 0 0 1 331.989 341.134 Tm [<004A>]TJ
+1.02 0 0 1 334.718 341.134 Tm [<004F>]TJ
+1.03 0 0 1 343.164 341.134 Tm [<0047>]TJ
+1.02 0 0 1 346.591 341.134 Tm [<0056>]TJ
+1.03 0 0 1 351.957 341.134 Tm [<004D004D>]TJ
+1.02 0 0 1 359.987 341.134 Tm [<00540044>]TJ
+1.03 0 0 1 368.157 341.134 Tm [<0053>]TJ
+1.02 0 0 1 372.005 341.134 Tm [<00460046004F>-273<00430046>]TJ
+1.03 0 0 1 399.189 341.134 Tm [<0047>]TJ
+1.02 0 0 1 402.617 341.134 Tm [<0050>]TJ
+1.03 0 0 1 407.749 341.134 Tm [<0053>]TJ
+1.02 0 0 1 411.597 341.134 Tm [<0046>-273<004F0042>]TJ
+1.03 0 0 1 429.178 341.134 Tm [<0057004A>]TJ
+1.02 0 0 1 436.761 341.134 Tm [<00480042>]TJ
+1.03 0 0 1 446.11 341.134 Tm [<0055004A>]TJ
+1.02 0 0 1 452.514 341.134 Tm [<004F0048>]TJ
+1.03 0 0 1 465.695 341.134 Tm [<0055>]TJ
+1.02 0 0 1 469.369 341.134 Tm [<0050>-273<0042>]TJ
+1.015 0 0 1 113.386 329.179 Tm [<004500460054>]TJ
+1.02 0 0 1 127.209 329.179 Tm [<0055004A>]TJ
+1.015 0 0 1 133.55 329.179 Tm [<004F0042>]TJ
+1.02 0 0 1 143.783 329.179 Tm [<0055004A>]TJ
+1.015 0 0 1 150.125 329.179 Tm [<0050004F>]TJ
+1.02 0 0 1 163.065 329.179 Tm [<0009>]TJ
+1.015 0 0 1 166.398 329.179 Tm [<005800490046004F>-216<0042>-217<004300500050004C004E0042>]TJ
+1.02 0 0 1 231.109 329.179 Tm [<0053>]TJ
+1.015 0 0 1 234.919 329.179 Tm [<004C>]TJ
+1.02 0 0 1 242.156 329.179 Tm [<004A>]TJ
+1.015 0 0 1 244.86 329.179 Tm [<0054>-216<0044>]TJ
+1.02 0 0 1 255.181 329.179 Tm [<004D004A>]TJ
+1.015 0 0 1 260.485 329.179 Tm [<0044004C00460045>]TJ
+1.02 0 0 1 279.375 329.179 Tm [<000D>-215<0047>]TJ
+1.015 0 0 1 287.45 329.179 Tm [<0050>]TJ
+1.02 0 0 1 292.556 329.179 Tm [<0053>-215<004A>]TJ
+1.015 0 0 1 301.261 329.179 Tm [<004F0054>]TJ
+1.02 0 0 1 310.959 329.179 Tm [<0055>]TJ
+1.015 0 0 1 314.596 329.179 Tm [<0042004F00440046>]TJ
+1.02 0 0 1 333.405 329.179 Tm [<000A000D>]TJ
+1.015 0 0 1 341.419 329.179 Tm [<00540050>]TJ
+1.02 0 0 1 352.772 329.179 Tm [<0055>]TJ
+1.015 0 0 1 356.41 329.179 Tm [<00490042>]TJ
+1.02 0 0 1 366.512 329.179 Tm [<0055>-215<0055>]TJ
+1.015 0 0 1 375.979 329.179 Tm [<00490046>-216<004500460054>]TJ
+1.02 0 0 1 402.004 329.179 Tm [<0055004A>]TJ
+1.015 0 0 1 408.345 329.179 Tm [<004F0042>]TJ
+1.02 0 0 1 418.578 329.179 Tm [<0055004A>]TJ
+1.015 0 0 1 424.919 329.179 Tm [<0050004F>]TJ
+1.02 0 0 1 437.86 329.179 Tm [<004A>]TJ
+1.015 0 0 1 440.563 329.179 Tm [<0054>-216<0051>]TJ
+1.02 0 0 1 452.087 329.179 Tm [<0053>]TJ
+1.015 0 0 1 455.898 329.179 Tm [<005000510046>]TJ
+1.02 0 0 1 470.783 329.179 Tm [<0053004D005A>]TJ
+1 0 0 1 113.386 317.224 Tm [<0053004600420044004900460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 293.313 Tm [<00510052005500500044004F>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 293.313 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 293.313 Tm [<0051005200510048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 293.313 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 293.313 Tm [<005200580057004F004C005100480056>]TJ
+/F111 7.97011 Tf 1 0 0 1 183.565 293.313 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 188.367 293.313 Tm [<0057004B0058005000450056>]TJ
+/F111 7.97011 Tf 1 0 0 1 217.181 293.313 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 221.983 293.313 Tm [<004F0044005C004800550056>]TJ
+/F7 9.96264 Tf 1 0 0 1 250.797 293.313 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 268.508 293.313 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.776 293.313 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 305.36 293.313 Tm [<005200580057004F004C005100480056>]TJ
+/F63 9.96264 Tf 1 0 0 1 343.778 293.313 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 281.358 Tm [<00340046>]TJ
+1.03 0 0 1 122.908 281.358 Tm [<004D>]TJ
+1.02 0 0 1 125.534 281.358 Tm [<00460044>]TJ
+1.03 0 0 1 134.152 281.358 Tm [<0055>]TJ
+1.02 0 0 1 137.825 281.358 Tm [<0054>-267<005800490042>]TJ
+1.03 0 0 1 161.683 281.358 Tm [<0055>]TJ
+1.02 0 0 1 168.078 281.358 Tm [<004E00560054>]TJ
+1.03 0 0 1 185.77 281.358 Tm [<0055>]TJ
+1.02 0 0 1 192.164 281.358 Tm [<00430046>-267<0045>]TJ
+1.03 0 0 1 209.874 281.358 Tm [<004A>]TJ
+1.02 0 0 1 212.604 281.358 Tm [<00540051>]TJ
+1.03 0 0 1 221.983 281.358 Tm [<004D>]TJ
+1.02 0 0 1 224.61 281.358 Tm [<0042>]TJ
+1.03 0 0 1 229.224 281.358 Tm [<005A>]TJ
+1.02 0 0 1 233.965 281.358 Tm [<00460045>]TJ
+1.03 0 0 1 246.502 281.358 Tm [<004A>]TJ
+1.02 0 0 1 249.232 281.358 Tm [<004F>]TJ
+1.03 0 0 1 257.623 281.358 Tm [<0055>]TJ
+1.02 0 0 1 261.297 281.358 Tm [<00490046>]TJ
+1.03 0 0 1 274.078 281.358 Tm [<0053>]TJ
+1.02 0 0 1 277.926 281.358 Tm [<0046004200450046>]TJ
+1.03 0 0 1 296.878 281.358 Tm [<00530008>]TJ
+1.02 0 0 1 302.799 281.358 Tm [<0054>-267<004F0042>]TJ
+1.03 0 0 1 319.879 281.358 Tm [<0057004A>]TJ
+1.02 0 0 1 327.462 281.358 Tm [<00480042>]TJ
+1.03 0 0 1 336.811 281.358 Tm [<0055004A>]TJ
+1.02 0 0 1 343.214 281.358 Tm [<0050004F>-267<00510042004F0046>]TJ
+1.03 0 0 1 376.848 281.358 Tm [<004D>]TJ
+1.02 0 0 1 382.196 281.358 Tm [<005800490046004F>-267<004F0050>]TJ
+1.03 0 0 1 418.36 281.358 Tm [<0055>-265<004A>]TJ
+1.02 0 0 1 427.484 281.358 Tm [<004F>]TJ
+1.03 0 0 1 435.875 281.358 Tm [<0047>]TJ
+1.02 0 0 1 439.303 281.358 Tm [<0056>]TJ
+1.03 0 0 1 444.668 281.358 Tm [<004D004D>]TJ
+1.02 0 0 1 452.643 281.358 Tm [<00540044>]TJ
+1.03 0 0 1 460.813 281.358 Tm [<0053>]TJ
+1.02 0 0 1 464.661 281.358 Tm [<00460046004F>]TJ
+1.03 0 0 1 479.376 281.358 Tm [<001B>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 113.386 269.403 Tm [<00520058>]TJ
+1.03 0 0 1 123.183 269.403 Tm [<0057004F004C>]TJ
+1.02 0 0 1 138.022 269.403 Tm [<005100480056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 155.287 269.403 Tm [<004A>]TJ
+1.02 0 0 1 158.016 269.403 Tm [<0054>]TJ
+1.03 0 0 1 162.091 269.403 Tm [<000D>]TJ
+1.02 0 0 1 167.27 269.403 Tm [<00580046>]TJ
+1.03 0 0 1 178.702 269.403 Tm [<004D004D000D>]TJ
+1.02 0 0 1 189.135 269.403 Tm [<00500056>]TJ
+1.03 0 0 1 199.632 269.403 Tm [<0055004D004A>]TJ
+1.02 0 0 1 208.662 269.403 Tm [<004F00460054>]TJ
+1.03 0 0 1 225.5 269.403 Tm [<0009>]TJ
+1.02 0 0 1 228.865 269.403 Tm [<0050>]TJ
+1.03 0 0 1 233.997 269.403 Tm [<0053>]TJ
+1.02 0 0 1 240.415 269.403 Tm [<004300500050004C004E0042>]TJ
+1.03 0 0 1 273.787 269.403 Tm [<0053>]TJ
+1.02 0 0 1 277.635 269.403 Tm [<004C0054>]TJ
+1.03 0 0 1 286.781 269.403 Tm [<000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 295.325 269.403 Tm [<0057>]TJ
+1.02 0 0 1 300.272 269.403 Tm [<004B0058005000450056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 327.333 269.403 Tm [<004A>]TJ
+1.02 0 0 1 330.063 269.403 Tm [<0054>]TJ
+1.03 0 0 1 336.708 269.403 Tm [<0055>]TJ
+1.02 0 0 1 340.382 269.403 Tm [<00490056004E0043004F0042>]TJ
+1.03 0 0 1 374.993 269.403 Tm [<004A004D>]TJ
+1.02 0 0 1 380.35 269.403 Tm [<0054>]TJ
+1.03 0 0 1 384.425 269.403 Tm [<000D>]TJ
+1.02 0 0 1 389.603 269.403 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 407.752 269.403 Tm [<004F>]TJ
+1.02 0 0 1 412.698 269.403 Tm [<0044>]TJ
+1.03 0 0 1 417.596 269.403 Tm [<005C>]TJ
+1.02 0 0 1 422.543 269.403 Tm [<0048>]TJ
+1.03 0 0 1 427.441 269.403 Tm [<0055>]TJ
+1.02 0 0 1 432.387 269.403 Tm [<0056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 439.856 269.403 Tm [<00540049005000580054>]TJ
+1.03 0 0 1 468.156 269.403 Tm [<0055>]TJ
+1.02 0 0 1 471.829 269.403 Tm [<00490046>]TJ
+1 0 0 1 113.386 257.448 Tm [<004D0042005A004600530054>-220<00510042004F0046004D000D>-220<00580049004600530046>-220<005500490046>-220<00540055004600510054>-220<00440042004F>-220<00430046>-220<005500560053004F00460045>-220<0050004F>-220<0042004F0045>-220<005000EA001C>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 336.439 257.448 Tm [<0051005200510048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 357.84 257.448 Tm [<00470050004D00450054>-220<005500490046>-220<004F00420057004A004800420055004A0050004F>-220<00510042004F0046004D000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 72.776 233.538 Tm [<005000480051005800570048005B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 233.538 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 233.538 Tm [<00570048005B0057>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 233.538 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 233.538 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 233.538 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 233.538 Tm [<000D000D000D>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 233.538 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 221.582 Tm [<0265>]TJ
+0.98 0 0 1 123.195 221.582 Tm [<0046>]TJ
+0.97 0 0 1 129.627 221.582 Tm [<0055>]TJ
+0.98 0 0 1 133.086 221.582 Tm [<0046>]TJ
+0.97 0 0 1 137.431 221.582 Tm [<00590055>-216<0055>]TJ
+0.98 0 0 1 151.019 221.582 Tm [<0050>-213<00430046>-214<0045>]TJ
+0.97 0 0 1 174.525 221.582 Tm [<004A>]TJ
+0.98 0 0 1 177.096 221.582 Tm [<00540051>]TJ
+0.97 0 0 1 186.107 221.582 Tm [<004D>]TJ
+0.98 0 0 1 188.581 221.582 Tm [<0042>]TJ
+0.97 0 0 1 193.014 221.582 Tm [<005A>]TJ
+0.98 0 0 1 197.478 221.582 Tm [<00460045>-213<0042>]TJ
+0.97 0 0 1 213.43 221.582 Tm [<0055>-216<0055>]TJ
+0.98 0 0 1 222.437 221.582 Tm [<00490046>]TJ
+0.97 0 0 1 234.19 221.582 Tm [<0055>]TJ
+0.98 0 0 1 237.65 221.582 Tm [<00500051>-213<0050>]TJ
+0.97 0 0 1 254.695 221.582 Tm [<0047>]TJ
+0.98 0 0 1 260.01 221.582 Tm [<0042>-213<005400560043004E0046004F0056>]TJ
+0.97 0 0 1 305.533 221.582 Tm [<004A>]TJ
+0.98 0 0 1 308.104 221.582 Tm [<004F>]TJ
+0.97 0 0 1 315.639 221.582 Tm [<0055>]TJ
+0.98 0 0 1 319.099 221.582 Tm [<00490046>-213<004F0042>]TJ
+0.97 0 0 1 340.733 221.582 Tm [<0057004A>]TJ
+0.98 0 0 1 347.874 221.582 Tm [<00480042>]TJ
+0.97 0 0 1 356.856 221.582 Tm [<0055004A>]TJ
+0.98 0 0 1 362.887 221.582 Tm [<0050004F>-213<005100500051>]TJ
+0.97 0 0 1 390.476 221.582 Tm [<000E>]TJ
+0.98 0 0 1 393.52 221.582 Tm [<00560051>-213<004E0046004F0056>]TJ
+0.97 0 0 1 428.735 221.582 Tm [<000D>-218<0055>]TJ
+0.98 0 0 1 436.671 221.582 Tm [<0050>]TJ
+0.97 0 0 1 443.689 221.582 Tm [<0053>]TJ
+0.98 0 0 1 447.313 221.582 Tm [<00460051>]TJ
+0.97 0 0 1 456.754 221.582 Tm [<0053>]TJ
+0.98 0 0 1 460.378 221.582 Tm [<004600540046004F>]TJ
+0.97 0 0 1 478.43 221.582 Tm [<0055>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 221.134 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 221.134 Tm [<00240053004600420055004A004F0048>-200<004300500050004C004E00420053004C0054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<005500490046>-220<00440056005300530046004F0055>-220<004300500050004C004E00420053004C>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01EE>]TJ
+ET
+endstream
+endobj
+144 0 obj <<
+/Type /Page
+/Contents 145 0 R
+/Resources 143 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 124 0 R
+/Annots [ 140 0 R 141 0 R 150 0 R 142 0 R ]
+>> endobj
+140 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 591.665 523.127 597.323]
+/A << /S /GoTo /D (ptx@section_link:25) >>
+>> endobj
+141 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 472.097 573.358 477.772]
+/A << /S /GoTo /D (ptx@section_link:5) >>
+>> endobj
+150 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 463.131 532.38 468.805]
+/A << /S /GoTo /D (ptx@section_link:5) >>
+>> endobj
+142 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 219.181 565.161 226.713]
+/A << /S /GoTo /D (ptx@section_link:13) >>
+>> endobj
+146 0 obj <<
+/D [144 0 R /XYZ 113.386 651.969 null]
+>> endobj
+147 0 obj <<
+/D [144 0 R /XYZ 113.386 614.619 null]
+>> endobj
+148 0 obj <<
+/D [144 0 R /XYZ 113.386 556.228 null]
+>> endobj
+149 0 obj <<
+/D [144 0 R /XYZ 113.386 494.29 null]
+>> endobj
+151 0 obj <<
+/D [144 0 R /XYZ 113.386 410.424 null]
+>> endobj
+152 0 obj <<
+/D [144 0 R /XYZ 113.386 362.604 null]
+>> endobj
+153 0 obj <<
+/D [144 0 R /XYZ 113.386 305.169 null]
+>> endobj
+154 0 obj <<
+/D [144 0 R /XYZ 113.386 243.052 null]
+>> endobj
+143 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+157 0 obj <<
+/Length 38878
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<0022010200F500F10103>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 113.386 616.103 Tm [<002E0042>]TJ
+0.99 0 0 1 126.5 616.103 Tm [<0055>]TJ
+0.995 0 0 1 130.031 616.103 Tm [<0046>]TJ
+0.99 0 0 1 134.443 616.103 Tm [<0053004A>]TJ
+0.995 0 0 1 140.765 616.103 Tm [<0042>]TJ
+0.99 0 0 1 145.265 616.103 Tm [<004D>]TJ
+0.995 0 0 1 149.952 616.103 Tm [<004F0050>]TJ
+0.99 0 0 1 160.489 616.103 Tm [<0053>]TJ
+0.995 0 0 1 164.188 616.103 Tm [<004E0042>]TJ
+0.99 0 0 1 176.737 616.103 Tm [<004D004D005A>]TJ
+0.995 0 0 1 188.505 616.103 Tm [<004500460044>]TJ
+0.99 0 0 1 202.076 616.103 Tm [<004D>]TJ
+0.995 0 0 1 204.601 616.103 Tm [<0042>]TJ
+0.99 0 0 1 209.101 616.103 Tm [<0053>]TJ
+0.995 0 0 1 212.8 616.103 Tm [<00460045>]TJ
+0.99 0 0 1 224.538 616.103 Tm [<004A>]TJ
+0.995 0 0 1 227.161 616.103 Tm [<0054>]TJ
+0.99 0 0 1 233.298 616.103 Tm [<0055005A>]TJ
+0.995 0 0 1 241.385 616.103 Tm [<0051004600540046>]TJ
+0.99 0 0 1 259.357 616.103 Tm [<0055>-219<0047>]TJ
+0.995 0 0 1 268.344 616.103 Tm [<0050>]TJ
+0.99 0 0 1 273.35 616.103 Tm [<004D004D>]TJ
+0.995 0 0 1 278.4 616.103 Tm [<00500058>]TJ
+0.99 0 0 1 290.147 616.103 Tm [<004A>]TJ
+0.995 0 0 1 292.77 616.103 Tm [<004F0048>]TJ
+0.99 0 0 1 305.083 616.103 Tm [<0035>]TJ
+1 0 0 1 309.014 614.036 Tm [<0026>]TJ
+0.99 0 0 1 313.298 616.103 Tm [<00390008>]TJ
+0.995 0 0 1 321.1 616.103 Tm [<0054>-218<0056005400560042>]TJ
+0.99 0 0 1 346.18 616.103 Tm [<004D>-219<0053>]TJ
+0.995 0 0 1 354.565 616.103 Tm [<0056>]TJ
+0.99 0 0 1 359.799 616.103 Tm [<004D>]TJ
+0.995 0 0 1 362.324 616.103 Tm [<00460054>]TJ
+0.99 0 0 1 370.71 616.103 Tm [<000D>]TJ
+0.995 0 0 1 375.294 616.103 Tm [<00430056>]TJ
+0.99 0 0 1 385.574 616.103 Tm [<004A004D>]TJ
+0.995 0 0 1 390.722 616.103 Tm [<0045>]TJ
+0.99 0 0 1 395.887 616.103 Tm [<004A>]TJ
+0.995 0 0 1 398.51 616.103 Tm [<004F0048>-218<00510042>]TJ
+0.99 0 0 1 420.498 616.103 Tm [<0053>]TJ
+0.995 0 0 1 424.196 616.103 Tm [<00420048>]TJ
+0.99 0 0 1 433.316 616.103 Tm [<0053>]TJ
+0.995 0 0 1 437.015 616.103 Tm [<0042005100490054>]TJ
+0.99 0 0 1 458.229 616.103 Tm [<004A>]TJ
+0.995 0 0 1 460.852 616.103 Tm [<004F>]TJ
+0.99 0 0 1 468.545 616.103 Tm [<0055>]TJ
+0.995 0 0 1 472.076 616.103 Tm [<00490046>]TJ
+0.98 0 0 1 113.386 604.148 Tm [<0054>]TJ
+0.97 0 0 1 117.301 604.148 Tm [<004D004A>]TJ
+0.98 0 0 1 122.345 604.148 Tm [<00450046>]TJ
+0.97 0 0 1 131.777 604.148 Tm [<0008>]TJ
+0.98 0 0 1 133.729 604.148 Tm [<0054>]TJ
+0.97 0 0 1 139.826 604.148 Tm [<0055>]TJ
+0.98 0 0 1 143.286 604.148 Tm [<0046>]TJ
+0.97 0 0 1 147.63 604.148 Tm [<00590055>]TJ
+0.98 0 0 1 155.671 604.148 Tm [<0043>]TJ
+0.97 0 0 1 160.64 604.148 Tm [<004D>]TJ
+0.98 0 0 1 163.114 604.148 Tm [<00500044004C>]TJ
+0.97 0 0 1 176.851 604.148 Tm [<000F>]TJ
+0.98 0 0 1 182.138 604.148 Tm [<0029005000580046>]TJ
+0.97 0 0 1 205.189 604.148 Tm [<0057>]TJ
+0.98 0 0 1 209.76 604.148 Tm [<0046>]TJ
+0.97 0 0 1 214.105 604.148 Tm [<0053000D>-226<004A>]TJ
+0.98 0 0 1 224.851 604.148 Tm [<004F>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 232.481 604.148 Tm [<002D>]TJ
+0.98 0 0 1 237.438 604.148 Tm [<00460044>]TJ
+0.97 0 0 1 244.898 604.148 Tm [<0055>]TJ
+0.98 0 0 1 248.232 604.148 Tm [<0056>]TJ
+0.97 0 0 1 252.986 604.148 Tm [<0053>]TJ
+0.98 0 0 1 256.504 604.148 Tm [<0046>]TJ
+0.97 0 0 1 260.448 604.148 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 266.148 604.148 Tm [<005A>]TJ
+0.98 0 0 1 270.613 604.148 Tm [<00500056>-223<00440042004F>-224<00510056>]TJ
+0.97 0 0 1 309.129 604.148 Tm [<0055>]TJ
+0.98 0 0 1 314.771 604.148 Tm [<004E0042>]TJ
+0.97 0 0 1 327.131 604.148 Tm [<0055>]TJ
+0.98 0 0 1 330.591 604.148 Tm [<0046>]TJ
+0.97 0 0 1 334.935 604.148 Tm [<0053004A>]TJ
+0.98 0 0 1 341.13 604.148 Tm [<0042>]TJ
+0.97 0 0 1 345.562 604.148 Tm [<004D>]TJ
+0.98 0 0 1 350.218 604.148 Tm [<0042004F>]TJ
+0.97 0 0 1 360.099 604.148 Tm [<005A>]TJ
+0.98 0 0 1 364.564 604.148 Tm [<005800490046>]TJ
+0.97 0 0 1 380.868 604.148 Tm [<0053>]TJ
+0.98 0 0 1 384.492 604.148 Tm [<0046>]TJ
+0.97 0 0 1 388.837 604.148 Tm [<000D>-226<0055>]TJ
+0.98 0 0 1 396.848 604.148 Tm [<00490042004F004C0054>]TJ
+0.97 0 0 1 423.019 604.148 Tm [<0055>]TJ
+0.98 0 0 1 426.479 604.148 Tm [<0050>-223<0042>]TJ
+0.97 0 0 1 438.024 604.148 Tm [<0053>]TJ
+0.98 0 0 1 441.648 604.148 Tm [<004600420054>]TJ
+0.97 0 0 1 454.34 604.148 Tm [<000F>]TJ
+0.985 0 0 1 459.627 604.148 Tm [<0022>]TJ
+0.97 0 0 1 465.573 604.148 Tm [<0053>]TJ
+0.98 0 0 1 469.197 604.148 Tm [<004600420054>]TJ
+1 0 0 1 113.386 592.193 Tm [<00440042004F>-220<0042004D00540050>-220<00430046>-220<0056005400460045>-220<0054004A004E0051004D005A>-220<00420054>-220<0045004600440050005300420055004A0050004F0054000D>-220<0054004A004F00440046>-220<005500490046005A000800530046>-220<004300420054004A00440042004D004D005A>-220<00440050004D0050005300460045>-220<0054005200560042005300460054000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 556.327 Tm [<00360054004A004F0048>-200<0042>-200<00480053004A0045>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 532.417 Tm [<003F0056004B0052005A004A0055004C0047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 532.417 Tm [<003C>]TJ
+/F123 7.97011 Tf 1 0 0 1 116.604 532.417 Tm [<001F004F0048004900570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 145.418 532.417 Tm [<000D>]TJ
+/F123 7.97011 Tf 1 0 0 1 147.858 532.417 Tm [<001F0057005200530021>]TJ
+/F105 9.96264 Tf 1 0 0 1 171.87 532.417 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 175.088 532.417 Tm [<001F004C005100460055004800500048005100570021>]TJ
+/F111 7.97011 Tf 1 0 0 1 227.913 532.417 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 232.716 532.417 Tm [<001F00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B00530055>-1<004800560056004C005200510021>]TJ
+/F111 7.97011 Tf 1 0 0 1 391.192 532.417 Tm [<0040003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 400.796 532.417 Tm [<001F004F004C00510048>-602<005A004C00470057004B0021>]TJ
+/F111 7.97011 Tf 1 0 0 1 458.424 532.417 Tm [<0040>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 520.462 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 520.462 Tm [<0054>-259<0045>]TJ
+1.03 0 0 1 138.537 520.462 Tm [<004A>]TJ
+1.02 0 0 1 141.267 520.462 Tm [<00540051>]TJ
+1.03 0 0 1 150.646 520.462 Tm [<004D>]TJ
+1.02 0 0 1 153.273 520.462 Tm [<0042>]TJ
+1.03 0 0 1 157.887 520.462 Tm [<005A>]TJ
+1.02 0 0 1 162.628 520.462 Tm [<0054>-259<0042>-260<0048>]TJ
+1.03 0 0 1 181.326 520.462 Tm [<0053004A>]TJ
+1.02 0 0 1 187.904 520.462 Tm [<0045>-259<0050004F>]TJ
+1.03 0 0 1 209.275 520.462 Tm [<0055>]TJ
+1.02 0 0 1 212.948 520.462 Tm [<00500051>-259<0050>]TJ
+1.03 0 0 1 231.154 520.462 Tm [<0047>-257<0055>]TJ
+1.02 0 0 1 240.892 520.462 Tm [<00490046>-259<0054>]TJ
+1.03 0 0 1 257.665 520.462 Tm [<004D004A>]TJ
+1.02 0 0 1 263.021 520.462 Tm [<004500460054>]TJ
+1.03 0 0 1 279.55 520.462 Tm [<00090047>]TJ
+1.02 0 0 1 286.343 520.462 Tm [<0050>]TJ
+1.03 0 0 1 291.475 520.462 Tm [<004D004D>]TJ
+1.02 0 0 1 296.729 520.462 Tm [<00500058>]TJ
+1.03 0 0 1 308.77 520.462 Tm [<004A>]TJ
+1.02 0 0 1 311.5 520.462 Tm [<004F0048>]TJ
+1.03 0 0 1 324.543 520.462 Tm [<0055>]TJ
+1.02 0 0 1 328.217 520.462 Tm [<00490046>-259<00440050004E004E0042004F0045>]TJ
+1.03 0 0 1 382.222 520.462 Tm [<000A>-257<0055>]TJ
+1.02 0 0 1 391.899 520.462 Tm [<0050>-259<0046004200540046>]TJ
+1.03 0 0 1 420.038 520.462 Tm [<0055>]TJ
+1.02 0 0 1 423.712 520.462 Tm [<00490046>-259<0044>]TJ
+1.03 0 0 1 440.504 520.462 Tm [<0053>]TJ
+1.02 0 0 1 444.352 520.462 Tm [<00460042>]TJ
+1.03 0 0 1 453.488 520.462 Tm [<0055004A>]TJ
+1.02 0 0 1 459.891 520.462 Tm [<0050004F>-259<0050>]TJ
+1.03 0 0 1 478.462 520.462 Tm [<0047>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 520.013 Tm [<00280053004A00450054>-200<00440042004F>-200<0042004D00540050>-200<00430046>-200<0056005400460045>-200<00420054>]TJ
+1 0 0 1 491.852 511.047 Tm [<0045004600440050005300420055004A0050004F0054000D>-200<0058004A00550049>-200<0042>-200<004D004A00550055004D0046>]TJ
+1 0 0 1 491.852 502.081 Tm [<004A004E00420048004A004F00420055004A0050004F000F>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 508.506 Tm [<0042>-240<0045>]TJ
+1.03 0 0 1 125.734 508.506 Tm [<004A>]TJ
+1.02 0 0 1 128.464 508.506 Tm [<00540051>]TJ
+1.03 0 0 1 137.843 508.506 Tm [<004D>]TJ
+1.02 0 0 1 140.47 508.506 Tm [<0042>]TJ
+1.03 0 0 1 145.084 508.506 Tm [<005A000F>-357<002D004A>]TJ
+1.02 0 0 1 164.104 508.506 Tm [<004F00460054>-240<0042>]TJ
+1.03 0 0 1 185.426 508.506 Tm [<0053>]TJ
+1.02 0 0 1 189.274 508.506 Tm [<0046>-240<0045>]TJ
+1.03 0 0 1 201.531 508.506 Tm [<0053>]TJ
+1.02 0 0 1 205.379 508.506 Tm [<00420058004F>-240<0042>]TJ
+1.03 0 0 1 229.627 508.506 Tm [<0055>]TJ
+1.02 0 0 1 235.741 508.506 Tm [<0042>-240<0045>]TJ
+1.03 0 0 1 248.09 508.506 Tm [<004A>]TJ
+1.02 0 0 1 250.819 508.506 Tm [<0054>]TJ
+1.03 0 0 1 254.894 508.506 Tm [<0055>]TJ
+1.02 0 0 1 258.568 508.506 Tm [<0042004F00440046>-240<0050>]TJ
+1.03 0 0 1 285.041 508.506 Tm [<0047>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 290.909 508.506 Tm [<001F004C>]TJ
+1.02 0 0 1 300.802 508.506 Tm [<00510046>]TJ
+1.03 0 0 1 310.599 508.506 Tm [<0055>]TJ
+1.02 0 0 1 315.545 508.506 Tm [<0048005000480051>]TJ
+1.03 0 0 1 335.139 508.506 Tm [<00570021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 348.299 508.506 Tm [<00470053>]TJ
+1.02 0 0 1 355.574 508.506 Tm [<0050004E>-240<0046004200440049>-240<0050>]TJ
+1.03 0 0 1 397.74 508.506 Tm [<0055>]TJ
+1.02 0 0 1 401.413 508.506 Tm [<00490046>]TJ
+1.03 0 0 1 411.474 508.506 Tm [<0053000F>-357<0265>]TJ
+1.02 0 0 1 431.92 508.506 Tm [<0046>-240<0048>]TJ
+1.03 0 0 1 443.618 508.506 Tm [<0053004A>]TJ
+1.02 0 0 1 450.196 508.506 Tm [<0045>-240<0054>]TJ
+1.03 0 0 1 462.006 508.506 Tm [<0055>]TJ
+1.02 0 0 1 465.68 508.506 Tm [<0042>]TJ
+1.03 0 0 1 470.293 508.506 Tm [<00530055>]TJ
+1.02 0 0 1 477.815 508.506 Tm [<0054>]TJ
+0.985 0 0 1 113.386 496.551 Tm [<00470053>]TJ
+0.99 0 0 1 120.343 496.551 Tm [<0050004E>]TJ
+0.985 0 0 1 135.516 496.551 Tm [<0055>]TJ
+0.99 0 0 1 139.029 496.551 Tm [<00490046>-221<0056005100510046>]TJ
+0.985 0 0 1 170.87 496.551 Tm [<0053>-222<004D>]TJ
+0.99 0 0 1 179.245 496.551 Tm [<0046>]TJ
+0.985 0 0 1 183.634 496.551 Tm [<00470055>]TJ
+0.99 0 0 1 192.608 496.551 Tm [<00440050>]TJ
+0.985 0 0 1 201.564 496.551 Tm [<0053>]TJ
+0.99 0 0 1 205.243 496.551 Tm [<004F0046>]TJ
+0.985 0 0 1 215.136 496.551 Tm [<0053>]TJ
+0.99 0 0 1 220.999 496.551 Tm [<0043>]TJ
+0.985 0 0 1 226.019 496.551 Tm [<005A>]TJ
+0.99 0 0 1 232.736 496.551 Tm [<00450046>]TJ
+0.985 0 0 1 242.264 496.551 Tm [<0047>]TJ
+0.99 0 0 1 245.541 496.551 Tm [<00420056>]TJ
+0.985 0 0 1 255.227 496.551 Tm [<004D0055000D>]TJ
+0.99 0 0 1 265.841 496.551 Tm [<00430056>]TJ
+0.985 0 0 1 276.069 496.551 Tm [<0055>-222<0055>]TJ
+0.99 0 0 1 285.278 496.551 Tm [<00490046>-221<00500051>]TJ
+0.985 0 0 1 307.355 496.551 Tm [<0055004A>]TJ
+0.99 0 0 1 313.478 496.551 Tm [<0050004F0042>]TJ
+0.985 0 0 1 328.44 496.551 Tm [<004D>]TJ
+/F123 7.97011 Tf 0.985 0 0 1 333.136 496.551 Tm [<001F004F>]TJ
+0.99 0 0 1 342.596 496.551 Tm [<0048>]TJ
+0.985 0 0 1 347.35 496.551 Tm [<004900570021>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 364.551 496.551 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 0.985 0 0 1 381.854 496.551 Tm [<001F0057>]TJ
+0.99 0 0 1 391.314 496.551 Tm [<00520053>]TJ
+0.985 0 0 1 400.823 496.551 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 408.563 496.551 Tm [<00540046>]TJ
+0.985 0 0 1 416.907 496.551 Tm [<0055>]TJ
+0.99 0 0 1 422.603 496.551 Tm [<00490050>]TJ
+0.985 0 0 1 432.959 496.551 Tm [<0053004A>]TJ
+0.99 0 0 1 439.25 496.551 Tm [<005B0050004F>]TJ
+0.985 0 0 1 454.084 496.551 Tm [<0055>]TJ
+0.99 0 0 1 457.597 496.551 Tm [<0042>]TJ
+0.985 0 0 1 462.075 496.551 Tm [<004D>]TJ
+0.99 0 0 1 466.77 496.551 Tm [<0042004F0045>]TJ
+0.995 0 0 1 113.386 484.596 Tm [<0057004600530055004A00440042004D>-223<00540049004A004700550054>-223<0053004600540051004600440055004A00570046004D005A>-223<0009>]TJ
+/F123 7.97011 Tf 0.995 0 0 1 224.247 484.596 Tm [<001F0057005200530021>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 251.179 484.596 Tm [<00430046004A004F0048>-223<0042>-223<0057004600530055004A00440042004D>-223<0045004A005400550042004F00440046>]TJ
+/F63 9.96264 Tf 0.995 0 0 1 350.573 484.596 Tm [<00CB>-203<004D0042>-202<0035>]TJ
+1 0 0 1 370.075 482.529 Tm [<0026>]TJ
+0.995 0 0 1 374.13 484.596 Tm [<0039>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 379.978 484.596 Tm [<000D>-223<004A000F0046000F>-301<00480050004A004F0048>-223<004500500058004F0058004200530045000A000F>-301<002A0047>]TJ
+1.005 0 0 1 113.386 472.641 Tm [<004F0050>-220<00500051>]TJ
+1.01 0 0 1 136.517 472.641 Tm [<0055004A>]TJ
+1.005 0 0 1 142.796 472.641 Tm [<0050004F0042>]TJ
+1.01 0 0 1 157.985 472.641 Tm [<004D>]TJ
+1.005 0 0 1 162.766 472.641 Tm [<00440050>]TJ
+1.01 0 0 1 171.858 472.641 Tm [<004D>]TJ
+1.005 0 0 1 174.433 472.641 Tm [<0050>]TJ
+1.01 0 0 1 179.49 472.641 Tm [<0053>-219<004A>]TJ
+1.005 0 0 1 188.145 472.641 Tm [<0054>-220<0048>]TJ
+1.01 0 0 1 199.031 472.641 Tm [<004A0057>]TJ
+1.005 0 0 1 206.467 472.641 Tm [<0046004F>]TJ
+1.01 0 0 1 216.51 472.641 Tm [<000D>-219<0055>]TJ
+1.005 0 0 1 224.786 472.641 Tm [<00490046>-220<0048>]TJ
+1.01 0 0 1 241.569 472.641 Tm [<0053004A>]TJ
+1.005 0 0 1 248.019 472.641 Tm [<0045>]TJ
+1.01 0 0 1 255.441 472.641 Tm [<004A>]TJ
+1.005 0 0 1 258.118 472.641 Tm [<0054>-220<00510042>]TJ
+1.01 0 0 1 274.11 472.641 Tm [<004A>]TJ
+1.005 0 0 1 276.787 472.641 Tm [<004F>]TJ
+1.01 0 0 1 282.374 472.641 Tm [<0055>]TJ
+1.005 0 0 1 285.976 472.641 Tm [<00460045>-220<0048>]TJ
+1.01 0 0 1 302.519 472.641 Tm [<0053>]TJ
+1.005 0 0 1 306.292 472.641 Tm [<0046>]TJ
+1.01 0 0 1 310.748 472.641 Tm [<005A000D>]TJ
+1.005 0 0 1 320.071 472.641 Tm [<0042004F0045>]TJ
+1.01 0 0 1 337.625 472.641 Tm [<0055>]TJ
+1.005 0 0 1 341.227 472.641 Tm [<00490046>-220<00450046>]TJ
+1.01 0 0 1 363.017 472.641 Tm [<0047>]TJ
+1.005 0 0 1 366.378 472.641 Tm [<00420056>]TJ
+1.01 0 0 1 376.21 472.641 Tm [<004D0055>-219<004D004A>]TJ
+1.005 0 0 1 389.846 472.641 Tm [<004F0046>-220<0058>]TJ
+1.01 0 0 1 408.903 472.641 Tm [<004A>]TJ
+1.005 0 0 1 411.579 472.641 Tm [<0045>]TJ
+1.01 0 0 1 416.796 472.641 Tm [<0055>]TJ
+1.005 0 0 1 420.398 472.641 Tm [<0049>]TJ
+1.01 0 0 1 428.06 472.641 Tm [<004A>]TJ
+1.005 0 0 1 430.737 472.641 Tm [<0054>]TJ
+1.01 0 0 1 436.957 472.641 Tm [<000F01EB>]TJ
+1.005 0 0 1 444.735 472.641 Tm [<0051>]TJ
+1.01 0 0 1 449.962 472.641 Tm [<0055000F>-294<0265>]TJ
+1.005 0 0 1 469.205 472.641 Tm [<0046>]TJ
+1.01 0 0 1 473.661 472.641 Tm [<0053>]TJ
+1.005 0 0 1 477.434 472.641 Tm [<0046>]TJ
+1 0 0 1 113.386 460.686 Tm [<00440042004F>-218<00430046>-219<00420054>-218<004E0042004F005A>-219<0054005600440049>-218<004500460044004D0042005300420055004A0050004F0054>-219<00420054>-218<00580042004F005500460045000D>-219<0046004200440049>-218<00480053004A0045>-219<00430046004A004F0048>-219<00510042004A004F005500460045>-218<0050004F>-219<005500500051>-218<00500047>-219<005500490046>-218<0051005300460057004A005000560054>]TJ
+1 0 0 1 113.386 448.731 Tm [<0050004F0046000F>-293<002700500053>-220<004A004F005400550042004F00440046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 424.82 Tm [<003F0056004B0052005A004A0055004C0047003E001500460050000F0015004600500040005E0014005000500060>]TJ
+1 0 0 1 113.386 412.865 Tm [<003F0056004B0052005A004A0055004C0047005E0014004600500060003E0055004800470040003E00110017005300570040>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 388.955 Tm [<0045>]TJ
+1.015 0 0 1 118.628 388.955 Tm [<004A>]TJ
+1.01 0 0 1 121.318 388.955 Tm [<00540051>]TJ
+1.015 0 0 1 130.606 388.955 Tm [<004D>]TJ
+1.01 0 0 1 133.194 388.955 Tm [<0042>]TJ
+1.015 0 0 1 137.763 388.955 Tm [<005A>]TJ
+1.01 0 0 1 142.434 388.955 Tm [<0054>-218<0042>-218<0048>]TJ
+1.015 0 0 1 160.122 388.955 Tm [<0053004A>]TJ
+1.01 0 0 1 166.604 388.955 Tm [<0045>]TJ
+1.015 0 0 1 174.044 388.955 Tm [<004A>]TJ
+1.01 0 0 1 176.734 388.955 Tm [<004F>-218<004E>]TJ
+1.015 0 0 1 192.717 388.955 Tm [<004A004D004D004A>]TJ
+1.01 0 0 1 203.274 388.955 Tm [<004E0046>]TJ
+1.015 0 0 1 215.923 388.955 Tm [<0055>]TJ
+1.01 0 0 1 219.543 388.955 Tm [<0046>]TJ
+1.015 0 0 1 224.02 388.955 Tm [<0053>]TJ
+1.01 0 0 1 227.812 388.955 Tm [<0054>]TJ
+1.015 0 0 1 234.045 388.955 Tm [<004A>]TJ
+1.01 0 0 1 236.735 388.955 Tm [<004F>-218<0048>]TJ
+1.015 0 0 1 249.237 388.955 Tm [<0053>]TJ
+1.01 0 0 1 253.029 388.955 Tm [<0046>]TJ
+1.015 0 0 1 257.506 388.955 Tm [<005A000D>]TJ
+1.01 0 0 1 266.855 388.955 Tm [<0054>]TJ
+1.015 0 0 1 270.89 388.955 Tm [<0055>]TJ
+1.01 0 0 1 274.51 388.955 Tm [<0042>]TJ
+1.015 0 0 1 279.078 388.955 Tm [<00530055004A>]TJ
+1.01 0 0 1 289.18 388.955 Tm [<004F0048>-218<0042>]TJ
+1.015 0 0 1 306.25 388.955 Tm [<0055>-217<01EB>]TJ
+1.01 0 0 1 317.407 388.955 Tm [<0044004E>]TJ
+1.015 0 0 1 331.831 388.955 Tm [<00470053>]TJ
+1.01 0 0 1 339 388.955 Tm [<0050004E>-218<00430050>]TJ
+1.015 0 0 1 364.653 388.955 Tm [<0055>]TJ
+1.01 0 0 1 368.273 388.955 Tm [<0049>]TJ
+1.015 0 0 1 375.955 388.955 Tm [<0055>]TJ
+1.01 0 0 1 379.575 388.955 Tm [<00490046>-218<0056005100510046>]TJ
+1.015 0 0 1 412.03 388.955 Tm [<0053>]TJ
+1.01 0 0 1 418.02 388.955 Tm [<0042004F0045>]TJ
+1.015 0 0 1 435.643 388.955 Tm [<004D>]TJ
+1.01 0 0 1 438.232 388.955 Tm [<0046>]TJ
+1.015 0 0 1 442.71 388.955 Tm [<00470055>]TJ
+1.01 0 0 1 451.905 388.955 Tm [<00430050>]TJ
+1.015 0 0 1 462.108 388.955 Tm [<0053>]TJ
+1.01 0 0 1 465.9 388.955 Tm [<00450046>]TJ
+1.015 0 0 1 475.62 388.955 Tm [<0053000D>]TJ
+0.995 0 0 1 113.386 377 Tm [<0042004F0045>-220<0042>-221<0048>]TJ
+0.99 0 0 1 142.082 377 Tm [<0053004A>]TJ
+0.995 0 0 1 148.404 377 Tm [<0045>]TJ
+0.99 0 0 1 155.759 377 Tm [<004A>]TJ
+0.995 0 0 1 158.382 377 Tm [<004F>-220<00440046004F>]TJ
+0.99 0 0 1 180.041 377 Tm [<0055004A>]TJ
+0.995 0 0 1 186.195 377 Tm [<004E0046>]TJ
+0.99 0 0 1 198.656 377 Tm [<0053>]TJ
+0.995 0 0 1 202.354 377 Tm [<0054>-221<0050004F>]TJ
+0.99 0 0 1 221.247 377 Tm [<0055>]TJ
+0.995 0 0 1 224.778 377 Tm [<00500051>-220<0050>]TJ
+0.99 0 0 1 242.154 377 Tm [<0047>-222<004A0055>-222<004A>]TJ
+0.995 0 0 1 258.606 377 Tm [<004F>]TJ
+0.99 0 0 1 266.328 377 Tm [<0053>]TJ
+0.995 0 0 1 270.026 377 Tm [<00460045>]TJ
+0.99 0 0 1 279.602 377 Tm [<000D>]TJ
+0.995 0 0 1 284.209 377 Tm [<0058>]TJ
+0.99 0 0 1 290.95 377 Tm [<004A0055>]TJ
+0.995 0 0 1 297.104 377 Tm [<0049>-220<0042>]TJ
+0.99 0 0 1 311.387 377 Tm [<004D004A>]TJ
+0.995 0 0 1 316.535 377 Tm [<004F0046>-221<0058>]TJ
+0.99 0 0 1 335.409 377 Tm [<004A>]TJ
+0.995 0 0 1 338.032 377 Tm [<0045>]TJ
+0.99 0 0 1 343.197 377 Tm [<0055>]TJ
+0.995 0 0 1 346.728 377 Tm [<0049>]TJ
+0.99 0 0 1 354.32 377 Tm [<0055>]TJ
+0.995 0 0 1 357.851 377 Tm [<0058>]TJ
+0.99 0 0 1 364.592 377 Tm [<004A>]TJ
+0.995 0 0 1 367.215 377 Tm [<00440046>]TJ
+0.99 0 0 1 377.811 377 Tm [<0055>]TJ
+0.995 0 0 1 381.342 377 Tm [<00490046>-221<0051>]TJ
+0.99 0 0 1 398.521 377 Tm [<0053>]TJ
+0.995 0 0 1 402.219 377 Tm [<0046>]TJ
+0.99 0 0 1 406.63 377 Tm [<0057004A>]TJ
+0.995 0 0 1 413.919 377 Tm [<005000560054>-220<0050004F0046>]TJ
+0.99 0 0 1 445.273 377 Tm [<000D>]TJ
+0.995 0 0 1 449.879 377 Tm [<0054>]TJ
+0.99 0 0 1 453.854 377 Tm [<0055>]TJ
+0.995 0 0 1 457.385 377 Tm [<0042>]TJ
+0.99 0 0 1 461.886 377 Tm [<00530055004A>]TJ
+0.995 0 0 1 471.739 377 Tm [<004F0048>]TJ
+1 0 0 1 113.386 365.044 Tm [<004700530050004E>-221<005500490046>-222<00560051005100460053>-221<004D004600470055>-222<004400500053004F00460053000F>-298<002F005000550046>-221<0055004900420055>-222<00550049004600530046>-222<0054004900500056004D0045>-221<00430046>-222<004F0050>-221<00540051004200440046>-222<004300460047005000530046>-221<005500490046>-222<004D004200540055>-222<005500580050>-221<005000510055004A0050004F0042004D>]TJ
+1 0 0 1 113.386 353.089 Tm [<0042005300480056004E0046004F00550054>-220<0009004A0047>-220<004A0055>-220<005800420054>-220<0042004D004D0050005800460045>-220<0055004900460053004600080045>-220<00430046>-220<0053004A0054004C0054>-220<00500047>-220<0056004F00580042004F005500460045>-220<00540051004200440046>-220<0048005000430043004D004A004F0048000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 61.378 329.179 Tm [<003F004B004C00470048004A0055004C00470056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 329.179 Tm [<0029004A004500460054>-220<0042004D004D>-220<00480053004A00450054>-220<0050004F>-220<00470050004D004D00500058004A004F0048>-220<0054004D004A004500460054000D>-220<00420054>-220<004A0047>]TJ
+/F111 7.97011 Tf 1 0 0 1 272.768 329.179 Tm [<003F0056004B0052005A004A0055004C0047>]TJ
+/F105 9.96264 Tf 1 0 0 1 318.181 329.179 Tm [<004900420045>-220<004F0046005700460053>-220<004300460046004F>-220<00440042004D004D00460045000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 293.313 Tm [<002200450045004A004F0048>-200<004E0042005500460053004A0042004D>-200<00550050>-200<00420053004600420054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 269.403 Tm [<003F005300520056004C0057004C00520051>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 269.403 Tm [<001F00440055004800440021>]TJ
+/F105 9.96264 Tf 1 0 0 1 142.2 269.403 Tm [<003C>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.418 269.403 Tm [<001F004F0048004900570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 174.231 269.403 Tm [<000D>]TJ
+/F123 7.97011 Tf 1 0 0 1 176.672 269.403 Tm [<001F0057005200530021>]TJ
+/F105 9.96264 Tf 1 0 0 1 200.684 269.403 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 203.902 269.403 Tm [<001F00500044005700480055004C0044004F0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 257.448 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 257.448 Tm [<0054>-214<00510056>]TJ
+1.03 0 0 1 143.458 257.448 Tm [<0055>]TJ
+1.02 0 0 1 147.132 257.448 Tm [<0054>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 153.39 257.448 Tm [<001F>]TJ
+1.02 0 0 1 158.336 257.448 Tm [<00500044>]TJ
+1.03 0 0 1 168.133 257.448 Tm [<0057>]TJ
+1.02 0 0 1 173.079 257.448 Tm [<0048>]TJ
+1.03 0 0 1 177.977 257.448 Tm [<0055004C>]TJ
+1.02 0 0 1 187.87 257.448 Tm [<0044>]TJ
+1.03 0 0 1 192.769 257.448 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 205.671 257.448 Tm [<004A>]TJ
+1.02 0 0 1 208.4 257.448 Tm [<004F0054>]TJ
+1.03 0 0 1 218.146 257.448 Tm [<004A>]TJ
+1.02 0 0 1 220.875 257.448 Tm [<00450046>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 232.874 257.448 Tm [<001F>]TJ
+1.02 0 0 1 237.821 257.448 Tm [<0044>]TJ
+1.03 0 0 1 242.719 257.448 Tm [<0055>]TJ
+1.02 0 0 1 247.665 257.448 Tm [<00480044>]TJ
+1.03 0 0 1 257.462 257.448 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 262.408 257.448 Tm [<000F>]TJ
+1.02 0 0 1 267.842 257.448 Tm [<0029005000580046>]TJ
+1.03 0 0 1 291.834 257.448 Tm [<0057>]TJ
+1.02 0 0 1 296.688 257.448 Tm [<0046>]TJ
+1.03 0 0 1 301.21 257.448 Tm [<0053000D>-212<0055>]TJ
+1.02 0 0 1 313.43 257.448 Tm [<0049>]TJ
+1.03 0 0 1 318.968 257.448 Tm [<004A>]TJ
+1.02 0 0 1 321.698 257.448 Tm [<004F00480054>-214<0045>]TJ
+1.03 0 0 1 343.656 257.448 Tm [<004A00EA>]TJ
+1.02 0 0 1 352.86 257.448 Tm [<0046>]TJ
+1.03 0 0 1 357.382 257.448 Tm [<0053>]TJ
+1.02 0 0 1 363.413 257.448 Tm [<0048>]TJ
+1.03 0 0 1 368.148 257.448 Tm [<0053>]TJ
+1.02 0 0 1 371.997 257.448 Tm [<00460042>]TJ
+1.03 0 0 1 381.132 257.448 Tm [<0055004D005A>]TJ
+1.02 0 0 1 394.356 257.448 Tm [<005800490046>]TJ
+1.03 0 0 1 411.327 257.448 Tm [<0055>]TJ
+1.02 0 0 1 415 257.448 Tm [<00490046>]TJ
+1.03 0 0 1 425.06 257.448 Tm [<0053>-212<0055>]TJ
+1.02 0 0 1 434.765 257.448 Tm [<00490046>-214<00500051>]TJ
+1.03 0 0 1 457.444 257.448 Tm [<0055004A>]TJ
+1.02 0 0 1 463.847 257.448 Tm [<0050004F0042>]TJ
+1.03 0 0 1 479.263 257.448 Tm [<004D>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 257 Tm [<002A0047>]TJ
+/F105 7.97011 Tf 1 0 0 1 498.436 257 Tm [<001D004D004600470055001F>]TJ
+/F63 7.97011 Tf 1 0 0 1 519.485 257 Tm [<00500053>]TJ
+/F105 7.97011 Tf 1 0 0 1 527.479 257 Tm [<001D005500500051001F>]TJ
+/F63 7.97011 Tf 1 0 0 1 548.464 257 Tm [<004200530046>-200<01E900510055000D>]TJ
+1 0 0 1 491.852 248.033 Tm [<005500490046005A>-200<00440042004F>-200<00430046>-200<0050004E004A0055005500460045000F>-266<002F00500055>]TJ
+1 0 0 1 491.852 239.067 Tm [<005500490046>-200<0043005300420044004C004600550054>-200<0042004F0045>-200<00440050004E004E0042000D>]TJ
+1 0 0 1 491.852 230.101 Tm [<005500490050005600480049000F>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 245.493 Tm [<0042>]TJ
+1.03 0 0 1 117.999 245.493 Tm [<0053>]TJ
+1.02 0 0 1 121.847 245.493 Tm [<00480056004E0046004F>]TJ
+1.03 0 0 1 150.392 245.493 Tm [<0055>-223<004A>]TJ
+1.02 0 0 1 159.084 245.493 Tm [<0054>-225<0051>]TJ
+1.03 0 0 1 170.752 245.493 Tm [<0053>]TJ
+1.02 0 0 1 174.6 245.493 Tm [<004600540046004F>]TJ
+1.03 0 0 1 193.389 245.493 Tm [<0055>]TJ
+1.02 0 0 1 199.351 245.493 Tm [<0050>]TJ
+1.03 0 0 1 204.483 245.493 Tm [<0053>]TJ
+1.02 0 0 1 210.62 245.493 Tm [<004F0050>]TJ
+1.03 0 0 1 221.422 245.493 Tm [<0055000F>-313<002A>]TJ
+1.02 0 0 1 234.147 245.493 Tm [<004F>-225<0044004200540046>]TJ
+1.03 0 0 1 261.7 245.493 Tm [<004A0055>-223<004A>]TJ
+1.02 0 0 1 273.121 245.493 Tm [<0054004F>]TJ
+1.03 0 0 1 282.867 245.493 Tm [<00080055000D>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 293.44 245.493 Tm [<001F>]TJ
+1.02 0 0 1 298.386 245.493 Tm [<00500044>]TJ
+1.03 0 0 1 308.183 245.493 Tm [<0057>]TJ
+1.02 0 0 1 313.129 245.493 Tm [<0048>]TJ
+1.03 0 0 1 318.028 245.493 Tm [<0055004C>]TJ
+1.02 0 0 1 327.921 245.493 Tm [<0044>]TJ
+1.03 0 0 1 332.819 245.493 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 345.827 245.493 Tm [<004A>]TJ
+1.02 0 0 1 348.557 245.493 Tm [<0054>-225<00510056>]TJ
+1.03 0 0 1 365.59 245.493 Tm [<0055>]TJ
+1.02 0 0 1 371.552 245.493 Tm [<00430046>]TJ
+1.03 0 0 1 381.247 245.493 Tm [<004D>]TJ
+1.02 0 0 1 383.874 245.493 Tm [<00500058>-225<0051>]TJ
+1.03 0 0 1 403.508 245.493 Tm [<0053>]TJ
+1.02 0 0 1 407.357 245.493 Tm [<0046>]TJ
+1.03 0 0 1 411.879 245.493 Tm [<0057004A>]TJ
+1.02 0 0 1 419.462 245.493 Tm [<005000560054>-225<004E0042>]TJ
+1.03 0 0 1 449.188 245.493 Tm [<0055>]TJ
+1.02 0 0 1 452.861 245.493 Tm [<0046>]TJ
+1.03 0 0 1 457.383 245.493 Tm [<0053004A>]TJ
+1.02 0 0 1 463.961 245.493 Tm [<0042>]TJ
+1.03 0 0 1 468.574 245.493 Tm [<004D>-223<004A>]TJ
+1.02 0 0 1 476.219 245.493 Tm [<004F>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 113.386 233.538 Tm [<001F>]TJ
+1.02 0 0 1 118.332 233.538 Tm [<0044>]TJ
+1.03 0 0 1 123.231 233.538 Tm [<0055>]TJ
+1.02 0 0 1 128.177 233.538 Tm [<00480044>]TJ
+1.03 0 0 1 137.974 233.538 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 142.92 233.538 Tm [<000D>]TJ
+1.02 0 0 1 148.114 233.538 Tm [<00420054>]TJ
+1.03 0 0 1 159.384 233.538 Tm [<004A0047>]TJ
+1.02 0 0 1 168.124 233.538 Tm [<00440050004F>]TJ
+1.03 0 0 1 183.021 233.538 Tm [<0055004A>]TJ
+1.02 0 0 1 189.424 233.538 Tm [<004F0056>]TJ
+1.03 0 0 1 200.46 233.538 Tm [<004A>]TJ
+1.02 0 0 1 203.19 233.538 Tm [<004F0048>-254<0042>-254<0051004200480046>]TJ
+1.03 0 0 1 242.549 233.538 Tm [<000F>]TJ
+1.015 0 0 1 249.156 233.538 Tm [<0030>]TJ
+1.02 0 0 1 256.417 233.538 Tm [<004F>]TJ
+1.03 0 0 1 264.669 233.538 Tm [<0055>]TJ
+1.02 0 0 1 268.343 233.538 Tm [<00490046>-254<0050>]TJ
+1.03 0 0 1 286.117 233.538 Tm [<0055>]TJ
+1.02 0 0 1 289.791 233.538 Tm [<00490046>]TJ
+1.03 0 0 1 299.851 233.538 Tm [<0053>]TJ
+1.02 0 0 1 306.282 233.538 Tm [<00490042004F0045>]TJ
+1.03 0 0 1 327.398 233.538 Tm [<000D>-261<004A0047>-251<0055>]TJ
+1.02 0 0 1 345.005 233.538 Tm [<00490046>-254<00500051>]TJ
+1.03 0 0 1 368.083 233.538 Tm [<0055004A>]TJ
+1.02 0 0 1 374.487 233.538 Tm [<0050004F0042>]TJ
+1.03 0 0 1 389.902 233.538 Tm [<004D>]TJ
+1.02 0 0 1 395.111 233.538 Tm [<0042>]TJ
+1.03 0 0 1 399.725 233.538 Tm [<0053>]TJ
+1.02 0 0 1 403.573 233.538 Tm [<00480056004E0046004F>]TJ
+1.03 0 0 1 432.118 233.538 Tm [<0055>-251<004A>]TJ
+1.02 0 0 1 441.103 233.538 Tm [<0054>-254<0051>]TJ
+1.03 0 0 1 453.065 233.538 Tm [<0053>]TJ
+1.02 0 0 1 456.913 233.538 Tm [<004600540046004F>]TJ
+1.03 0 0 1 475.702 233.538 Tm [<0055000D>]TJ
+1.03 0 0 1 113.386 221.582 Tm [<0055>]TJ
+1.02 0 0 1 117.059 221.582 Tm [<00490046004F>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 135.166 221.582 Tm [<001F>]TJ
+1.02 0 0 1 140.113 221.582 Tm [<00500044>]TJ
+1.03 0 0 1 149.909 221.582 Tm [<0057>]TJ
+1.02 0 0 1 154.856 221.582 Tm [<0048>]TJ
+1.03 0 0 1 159.754 221.582 Tm [<0055004C>]TJ
+1.02 0 0 1 169.647 221.582 Tm [<0044>]TJ
+1.03 0 0 1 174.545 221.582 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 187.641 221.582 Tm [<004A>]TJ
+1.02 0 0 1 190.371 221.582 Tm [<0054>]TJ
+1.03 0 0 1 196.822 221.582 Tm [<0055005A>]TJ
+1.02 0 0 1 205.236 221.582 Tm [<0051004600540046>]TJ
+1.03 0 0 1 223.66 221.582 Tm [<0055>]TJ
+1.02 0 0 1 229.71 221.582 Tm [<00540050>]TJ
+1.03 0 0 1 241.293 221.582 Tm [<0055>]TJ
+1.02 0 0 1 244.966 221.582 Tm [<00490042>]TJ
+1.03 0 0 1 255.118 221.582 Tm [<0055>-231<004A0055>]TJ
+1.02 0 0 1 267.571 221.582 Tm [<0054>]TJ
+1.03 0 0 1 274.023 221.582 Tm [<004D>]TJ
+1.02 0 0 1 276.65 221.582 Tm [<0046>]TJ
+1.03 0 0 1 281.172 221.582 Tm [<00470055>]TJ
+1.02 0 0 1 290.649 221.582 Tm [<00430050>]TJ
+1.03 0 0 1 300.953 221.582 Tm [<0053>]TJ
+1.02 0 0 1 304.801 221.582 Tm [<00450046>]TJ
+1.03 0 0 1 314.618 221.582 Tm [<0053>-231<004A>]TJ
+1.02 0 0 1 323.571 221.582 Tm [<0054>-233<0042>]TJ
+1.03 0 0 1 334.636 221.582 Tm [<0055>]TJ
+1.02 0 0 1 340.686 221.582 Tm [<0042>-233<0045>]TJ
+1.03 0 0 1 352.97 221.582 Tm [<004A>]TJ
+1.02 0 0 1 355.7 221.582 Tm [<0054>]TJ
+1.03 0 0 1 359.775 221.582 Tm [<0055>]TJ
+1.02 0 0 1 363.448 221.582 Tm [<0042004F00440046>-233<0050>]TJ
+1.03 0 0 1 389.858 221.582 Tm [<0047>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 395.661 221.582 Tm [<001F004F>]TJ
+1.02 0 0 1 405.554 221.582 Tm [<0048>]TJ
+1.03 0 0 1 410.452 221.582 Tm [<004900570021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 428.495 221.582 Tm [<00470053>]TJ
+1.02 0 0 1 435.77 221.582 Tm [<0050004E>]TJ
+1.03 0 0 1 451.53 221.582 Tm [<0055>]TJ
+1.02 0 0 1 455.203 221.582 Tm [<00490046>]TJ
+1.03 0 0 1 467.64 221.582 Tm [<004D>]TJ
+1.02 0 0 1 470.267 221.582 Tm [<0046>]TJ
+1.03 0 0 1 474.789 221.582 Tm [<00470055>]TJ
+0.99 0 0 1 113.386 209.627 Tm [<00430050>]TJ
+0.985 0 0 1 123.387 209.627 Tm [<0053>]TJ
+0.99 0 0 1 127.067 209.627 Tm [<00450046>]TJ
+0.985 0 0 1 136.595 209.627 Tm [<0053>]TJ
+0.99 0 0 1 142.417 209.627 Tm [<0050>]TJ
+0.985 0 0 1 147.398 209.627 Tm [<0047>-218<0055>]TJ
+0.99 0 0 1 156.331 209.627 Tm [<00490046>]TJ
+/F123 7.97011 Tf 0.985 0 0 1 168.238 209.627 Tm [<001F>]TJ
+0.99 0 0 1 172.968 209.627 Tm [<0044>]TJ
+0.985 0 0 1 177.723 209.627 Tm [<0055>]TJ
+0.99 0 0 1 182.453 209.627 Tm [<00480044>]TJ
+0.985 0 0 1 191.961 209.627 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 196.692 209.627 Tm [<0008>]TJ
+0.99 0 0 1 198.674 209.627 Tm [<0054>]TJ
+0.985 0 0 1 204.772 209.627 Tm [<0055>]TJ
+0.99 0 0 1 208.285 209.627 Tm [<0046>]TJ
+0.985 0 0 1 212.674 209.627 Tm [<00590055>]TJ
+0.99 0 0 1 220.838 209.627 Tm [<0043>]TJ
+0.985 0 0 1 225.859 209.627 Tm [<004D>]TJ
+0.99 0 0 1 228.371 209.627 Tm [<00500044004C>-217<0042004F0045>]TJ
+0.985 0 0 1 261.653 209.627 Tm [<004A0055>]TJ
+0.99 0 0 1 267.776 209.627 Tm [<0054>-217<0043004200540046>]TJ
+0.985 0 0 1 291.716 209.627 Tm [<004D004A>]TJ
+0.99 0 0 1 296.839 209.627 Tm [<004F0046>-217<0042>]TJ
+0.985 0 0 1 313.352 209.627 Tm [<0055>]TJ
+0.99 0 0 1 319.007 209.627 Tm [<0042>-217<0045>]TJ
+0.985 0 0 1 330.766 209.627 Tm [<004A>]TJ
+0.99 0 0 1 333.377 209.627 Tm [<0054>]TJ
+0.985 0 0 1 337.332 209.627 Tm [<0055>]TJ
+0.99 0 0 1 340.845 209.627 Tm [<0042004F00440046>-217<0050>]TJ
+0.985 0 0 1 366.313 209.627 Tm [<0047>-218<0009>]TJ
+/F123 7.97011 Tf 0.985 0 0 1 374.952 209.627 Tm [<001F0057>]TJ
+0.99 0 0 1 384.413 209.627 Tm [<00520053>]TJ
+0.985 0 0 1 393.921 209.627 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 401.621 209.627 Tm [<000C>]TJ
+/F123 7.97011 Tf 0.985 0 0 1 408.906 209.627 Tm [<001F>]TJ
+0.99 0 0 1 413.636 209.627 Tm [<0044>]TJ
+0.985 0 0 1 418.39 209.627 Tm [<0055>]TJ
+0.99 0 0 1 423.12 209.627 Tm [<00480044>]TJ
+0.985 0 0 1 432.629 209.627 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 437.359 209.627 Tm [<0008>]TJ
+0.99 0 0 1 439.341 209.627 Tm [<0054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 445.439 209.627 Tm [<0057>]TJ
+0.99 0 0 1 450.169 209.627 Tm [<005200530056004E>]TJ
+0.985 0 0 1 469.186 209.627 Tm [<004C>]TJ
+0.99 0 0 1 473.917 209.627 Tm [<0053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 478.671 209.627 Tm [<000A>]TJ
+1.005 0 0 1 113.386 197.672 Tm [<00470053>]TJ
+1 0 0 1 120.485 197.672 Tm [<0050004E>]TJ
+1.005 0 0 1 135.809 197.672 Tm [<004A0055>]TJ
+1 0 0 1 142.057 197.672 Tm [<0054>-221<0056005100510046>]TJ
+1.005 0 0 1 168.35 197.672 Tm [<0053>]TJ
+1 0 0 1 174.308 197.672 Tm [<00430050>]TJ
+1.005 0 0 1 184.41 197.672 Tm [<0053>]TJ
+1 0 0 1 188.165 197.672 Tm [<00450046>]TJ
+1.005 0 0 1 197.789 197.672 Tm [<0053000F>-295<0265>]TJ
+1 0 0 1 217.117 197.672 Tm [<00560054>]TJ
+1.005 0 0 1 226.372 197.672 Tm [<000D>-220<004A0047>]TJ
+1 0 0 1 239.243 197.672 Tm [<00430050>]TJ
+1.005 0 0 1 249.345 197.672 Tm [<0055>]TJ
+1 0 0 1 252.93 197.672 Tm [<0049>]TJ
+/F123 7.97011 Tf 1.005 0 0 1 260.563 197.672 Tm [<001F004F>]TJ
+1 0 0 1 270.215 197.672 Tm [<0048>]TJ
+1.005 0 0 1 275.018 197.672 Tm [<004900570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 292.527 197.672 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 1.005 0 0 1 310.003 197.672 Tm [<001F0057>]TJ
+1 0 0 1 319.656 197.672 Tm [<00520053>]TJ
+1.005 0 0 1 329.261 197.672 Tm [<0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 337.117 197.672 Tm [<0042>]TJ
+1.005 0 0 1 341.64 197.672 Tm [<0053>]TJ
+1 0 0 1 345.395 197.672 Tm [<0046>]TJ
+1.005 0 0 1 352.032 197.672 Tm [<01E9>]TJ
+1 0 0 1 357.319 197.672 Tm [<0051>]TJ
+1.005 0 0 1 362.519 197.672 Tm [<0055000D>-220<0055>]TJ
+1 0 0 1 374.348 197.672 Tm [<00490046004F>]TJ
+/F123 7.97011 Tf 1.005 0 0 1 391.973 197.672 Tm [<001F>]TJ
+1 0 0 1 396.8 197.672 Tm [<00500044>]TJ
+1.005 0 0 1 406.404 197.672 Tm [<0057>]TJ
+1 0 0 1 411.231 197.672 Tm [<0048>]TJ
+1.005 0 0 1 416.033 197.672 Tm [<0055004C>]TJ
+1 0 0 1 425.686 197.672 Tm [<0044>]TJ
+1.005 0 0 1 430.488 197.672 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 443.171 197.672 Tm [<004A>]TJ
+1 0 0 1 445.834 197.672 Tm [<0054>]TJ
+1.005 0 0 1 452.033 197.672 Tm [<0055005A>]TJ
+1 0 0 1 460.243 197.672 Tm [<0051004600540046>]TJ
+1.005 0 0 1 478.305 197.672 Tm [<0055>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 209.627 Tm [<02650046>-200<00440042004D00440056004D00420055004A0050004F>-200<004A004F0044004D0056004500460054>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 200.661 Tm [<001D0055005000510054004C004A0051001F>]TJ
+/F63 7.97011 Tf 1 0 0 1 526.291 200.661 Tm [<00540050>-200<005500490046>]TJ
+1 0 0 1 491.852 191.695 Tm [<00440050004F004F004600440055004A0050004F>-200<004300460055005800460046004F>-200<0047005300460046004D005A>]TJ
+1 0 0 1 491.852 182.728 Tm [<005100500054004A0055004A0050004F00460045>-200<004E0042005500460053004A0042004D>-200<0042004F0045>]TJ
+1 0 0 1 491.852 173.762 Tm [<004F00500053004E0042004D004D005A>-200<005100500054004A0055004A0050004F>-200<004E0042005500460053004A0042004D>]TJ
+1 0 0 1 491.852 164.795 Tm [<004A0054>-200<005100530046005400460053005700460045000F>-266<003800490046004F>-200<00560054004A004F0048>]TJ
+1 0 0 1 491.852 155.829 Tm [<004A0055000D>-200<00550049004A0054>-200<004700500053004E0056004D0042>-200<005100530050005700460054>-200<004700420053>]TJ
+1 0 0 1 491.852 146.863 Tm [<004E005000530046>-200<004A004F00550056004A0055004A00570046>-200<005500490042004F>-200<004A0055>]TJ
+1 0 0 1 491.852 137.896 Tm [<005400460046004E0054000F>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 185.717 Tm [<004F0050>]TJ
+1.03 0 0 1 124.188 185.717 Tm [<0053>]TJ
+1.02 0 0 1 128.036 185.717 Tm [<004E0042>]TJ
+1.03 0 0 1 140.901 185.717 Tm [<004D004D005A000F>]TJ
+1.02 0 0 1 156.765 185.717 Tm [<002E0042>]TJ
+1.03 0 0 1 170.209 185.717 Tm [<0055>]TJ
+1.02 0 0 1 173.883 185.717 Tm [<0046>]TJ
+1.03 0 0 1 178.405 185.717 Tm [<0053004A>]TJ
+1.02 0 0 1 184.983 185.717 Tm [<0042>]TJ
+1.03 0 0 1 189.596 185.717 Tm [<004D>]TJ
+1.02 0 0 1 194.559 185.717 Tm [<0042>]TJ
+1.03 0 0 1 199.173 185.717 Tm [<004D0053>]TJ
+1.02 0 0 1 205.648 185.717 Tm [<004600420045>]TJ
+1.03 0 0 1 220.078 185.717 Tm [<005A>-227<004A>]TJ
+1.02 0 0 1 229.884 185.717 Tm [<004F>]TJ
+1.03 0 0 1 237.891 185.717 Tm [<0055>]TJ
+1.02 0 0 1 241.564 185.717 Tm [<00490046>-229<0042>]TJ
+1.03 0 0 1 258.574 185.717 Tm [<0053>]TJ
+1.02 0 0 1 262.422 185.717 Tm [<00460042>-229<004900420054>-230<004F0050>-230<0046>]TJ
+1.03 0 0 1 308.117 185.717 Tm [<00EA>]TJ
+1.02 0 0 1 314.592 185.717 Tm [<00460044>]TJ
+1.03 0 0 1 323.209 185.717 Tm [<0055>]TJ
+1.02 0 0 1 329.219 185.717 Tm [<0050004F>]TJ
+1.03 0 0 1 342.357 185.717 Tm [<0055>]TJ
+1.02 0 0 1 346.031 185.717 Tm [<0049>]TJ
+1.03 0 0 1 351.569 185.717 Tm [<004A>]TJ
+1.02 0 0 1 354.299 185.717 Tm [<0054>-229<0051>]TJ
+1.03 0 0 1 366.014 185.717 Tm [<0053>]TJ
+1.02 0 0 1 369.862 185.717 Tm [<00500044004600540054>]TJ
+1.03 0 0 1 391.761 185.717 Tm [<000D>]TJ
+1.02 0 0 1 396.647 185.717 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 414.562 185.717 Tm [<001F>]TJ
+1.02 0 0 1 419.508 185.717 Tm [<00500044>]TJ
+1.03 0 0 1 429.305 185.717 Tm [<0057>]TJ
+1.02 0 0 1 434.251 185.717 Tm [<0048>]TJ
+1.03 0 0 1 439.149 185.717 Tm [<0055004C>]TJ
+1.02 0 0 1 449.042 185.717 Tm [<0044>]TJ
+1.03 0 0 1 453.94 185.717 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 466.996 185.717 Tm [<0058>]TJ
+1.03 0 0 1 473.906 185.717 Tm [<004A004D004D>]TJ
+1 0 0 1 113.386 173.762 Tm [<0049004200570046>-213<004F0050>-214<004600EA004600440055>-214<0046004A0055004900460053>-214<0050004F>-214<004A004F00440050004E004A004F0048>-214<004E0042005500460053004A0042004D000D>-215<00580049004A00440049>-214<004A0054>-214<00580049005A>]TJ
+/F111 7.97011 Tf 1 0 0 1 344.429 173.762 Tm [<003F005300520056004C0057004C00520051005E00440055004800440060005E00500044005700480055004C0044004F0060>]TJ
+/F105 9.96264 Tf 1 0 0 1 466.617 173.762 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 161.807 Tm [<003F005300520056004C0057004C00520051005E00440055004800440060003E001300530057000F0013005300570040005E>-1<00500044005700480055004C0044004F0060>]TJ
+/F105 9.96264 Tf 1 0 0 1 278.856 161.807 Tm [<004200530046004F00080055>-220<005500490046>-220<00540042004E0046>-220<00550049004A004F0048>-220<00420055>-220<0042004D004D000F>]TJ
+1.03 0 0 1 133.311 149.851 Tm [<0265>]TJ
+1.02 0 0 1 143.727 149.851 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 150.473 149.851 Tm [<003F>]TJ
+1.02 0 0 1 155.419 149.851 Tm [<005300520056>]TJ
+1.03 0 0 1 170.114 149.851 Tm [<004C0057004C>]TJ
+1.02 0 0 1 184.954 149.851 Tm [<00520051>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 196.975 149.851 Tm [<005000430046>]TJ
+1.03 0 0 1 211.801 149.851 Tm [<005A>]TJ
+1.02 0 0 1 216.542 149.851 Tm [<0054>]TJ
+1.03 0 0 1 222.841 149.851 Tm [<0055>]TJ
+1.02 0 0 1 226.515 149.851 Tm [<00490046>]TJ
+1.03 0 0 1 238.799 149.851 Tm [<00EC>]TJ
+1.02 0 0 1 244.587 149.851 Tm [<00500058>-218<0050>]TJ
+1.03 0 0 1 263.985 149.851 Tm [<0047>-216<0055>]TJ
+1.02 0 0 1 273.31 149.851 Tm [<00490046>-218<0051>]TJ
+1.03 0 0 1 290.9 149.851 Tm [<0053>]TJ
+1.02 0 0 1 294.748 149.851 Tm [<004600540046004F>]TJ
+1.03 0 0 1 313.537 149.851 Tm [<0055>]TJ
+1.02 0 0 1 317.211 149.851 Tm [<0042>]TJ
+1.03 0 0 1 321.824 149.851 Tm [<0055004A>]TJ
+1.02 0 0 1 328.227 149.851 Tm [<0050004F>]TJ
+1.03 0 0 1 339.029 149.851 Tm [<000D>]TJ
+1.02 0 0 1 343.776 149.851 Tm [<0042004F0045>-218<00420051005100460042>]TJ
+1.03 0 0 1 385.937 149.851 Tm [<0053>]TJ
+1.02 0 0 1 389.785 149.851 Tm [<0054>-218<0050004F>]TJ
+1.03 0 0 1 406.886 149.851 Tm [<004D005A>]TJ
+1.02 0 0 1 416.478 149.851 Tm [<005800490046004F>]TJ
+1.03 0 0 1 441.344 149.851 Tm [<0055>]TJ
+1.02 0 0 1 445.017 149.851 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 457.302 149.851 Tm [<003F>]TJ
+1.02 0 0 1 462.248 149.851 Tm [<0056>]TJ
+1.03 0 0 1 467.147 149.851 Tm [<0057>]TJ
+1.02 0 0 1 472.093 149.851 Tm [<00480053>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [<00580049004600530046>-220<004A0055>-220<00430046004D0050004F00480054>-220<0042005100510046004200530054000F>-293<002A004F>-220<00550049004A0054>-220<004600590042004E0051004D0046001B>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01EF>]TJ
+ET
+endstream
+endobj
+156 0 obj <<
+/Type /Page
+/Contents 157 0 R
+/Resources 155 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 124 0 R
+>> endobj
+158 0 obj <<
+/D [156 0 R /XYZ 113.386 651.969 null]
+>> endobj
+159 0 obj <<
+/D [156 0 R /XYZ 113.386 565.841 null]
+>> endobj
+82 0 obj <<
+/D [156 0 R /XYZ 113.386 302.828 null]
+>> endobj
+155 0 obj <<
+/Font << /F90 14 0 R /F105 5 0 R /F63 7 0 R /F111 6 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+162 0 obj <<
+/Length 24875
+>>
+stream
+BT
+/F111 7.97011 Tf 1 0 0 1 113.386 640.013 Tm [<003F00560057004800530003003F005300520056004C0057004C00520051005E0050005C00440055004800440060005E0032>-1<005100480060>]TJ
+1 0 0 1 113.386 628.058 Tm [<003F00560057004800530003003F005300520056004C0057004C00520051005E0050005C00440055004800440060005E0037>-1<005A00520060>]TJ
+1 0 0 1 113.386 616.103 Tm [<003F00560057004800530003003F005300520056004C0057004C00520051005E0050005C00440055004800440060005E0037>-1<004B0055004800480060>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 592.193 Tm [<0041>]TJ
+1.015 0 0 1 115.459 592.193 Tm [<0030>]TJ
+1.02 0 0 1 122.719 592.193 Tm [<004F0046>]TJ
+1.03 0 0 1 132.911 592.193 Tm [<0008000D>-248<00410035>]TJ
+1.02 0 0 1 147.937 592.193 Tm [<00580050>]TJ
+1.03 0 0 1 159.979 592.193 Tm [<0008>]TJ
+1.02 0 0 1 164.528 592.193 Tm [<0042004F0045>]TJ
+1.03 0 0 1 182.582 592.193 Tm [<004102650053>]TJ
+1.02 0 0 1 198.919 592.193 Tm [<00460046>]TJ
+1.03 0 0 1 207.963 592.193 Tm [<0008>]TJ
+1.02 0 0 1 212.512 592.193 Tm [<0058>]TJ
+1.03 0 0 1 219.422 592.193 Tm [<004A004D004D>]TJ
+1.02 0 0 1 229.882 592.193 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 254.24 592.193 Tm [<0053>]TJ
+1.02 0 0 1 260.564 592.193 Tm [<0050004F0046>-243<0042>]TJ
+1.03 0 0 1 282.978 592.193 Tm [<00470055>]TJ
+1.02 0 0 1 290.079 592.193 Tm [<0046>]TJ
+1.03 0 0 1 294.601 592.193 Tm [<0053>-241<0055>]TJ
+1.02 0 0 1 304.599 592.193 Tm [<00490046>-243<0050>]TJ
+1.03 0 0 1 322.267 592.193 Tm [<0055>]TJ
+1.02 0 0 1 325.941 592.193 Tm [<00490046>]TJ
+1.03 0 0 1 336.001 592.193 Tm [<0053000D>]TJ
+1.02 0 0 1 344.911 592.193 Tm [<0042004F0045>-243<0050004F0046>-244<004200430050>]TJ
+1.03 0 0 1 395.683 592.193 Tm [<0057>]TJ
+1.02 0 0 1 400.537 592.193 Tm [<0046>]TJ
+1.03 0 0 1 407.535 592.193 Tm [<0055>]TJ
+1.02 0 0 1 411.209 592.193 Tm [<00490046>-243<0050>]TJ
+1.03 0 0 1 428.877 592.193 Tm [<0055>]TJ
+1.02 0 0 1 432.551 592.193 Tm [<00490046>]TJ
+1.03 0 0 1 442.611 592.193 Tm [<0053000F>]TJ
+1.015 0 0 1 452.749 592.193 Tm [<0030>]TJ
+1.02 0 0 1 460.009 592.193 Tm [<004F>]TJ
+1.03 0 0 1 468.156 592.193 Tm [<0055>]TJ
+1.02 0 0 1 471.829 592.193 Tm [<00490046>]TJ
+1 0 0 1 113.386 580.238 Tm [<00500055004900460053>-220<00490042004F0045>-220<0058004A00550049001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 556.327 Tm [<003F0056005700480053003E005200490049002000250040000300030003003F005300520056004C0057004C00520051005E>-1<0050005C00440055004800440060003E0014001500530057000F00140015005300570040005E0032005100480060>]TJ
+1 0 0 1 113.386 544.372 Tm [<003F0056005700480053003E0025000F0052004900490020002600400003003F005300520056004C0057004C00520051005E>-1<0050005C00440055004800440060003E0014001500530057000F00140015005300570040005E0037005A00520060>]TJ
+1 0 0 1 113.386 532.417 Tm [<003F0056005700480053003E002600400003000300030003000300030003003F005300520056004C0057004C00520051005E>-1<0050005C00440055004800440060003E0014001500530057000F00140015005300570040005E0037004B0055004800480060>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 508.506 Tm [<00410030004F00460008000D>-219<00410035005800500008>-219<0042004F0045>-219<004102650053004600460008>-219<0058004A004D004D>-220<00420045004E004A0055005500460045004D005A>-219<004200510051004600420053>-219<0050004F0046>-219<00420047005500460053>-219<005500490046>-219<00500055004900460053000D>-220<004300560055>-219<0042004D00540050>-219<0045004A0054004200510051004600420053>-219<005800490046004F>]TJ
+1.005 0 0 1 113.386 496.551 Tm [<0050004F0046>-220<00420051005100460042>]TJ
+1.01 0 0 1 154.695 496.551 Tm [<0053>]TJ
+1.005 0 0 1 158.469 496.551 Tm [<0054>-220<0042004F0045>]TJ
+1.01 0 0 1 182.255 496.551 Tm [<0055>]TJ
+1.005 0 0 1 185.857 496.551 Tm [<0042004C0046>]TJ
+1.01 0 0 1 202.065 496.551 Tm [<0055>]TJ
+1.005 0 0 1 205.668 496.551 Tm [<00490046>-220<0051>]TJ
+1.01 0 0 1 223.017 496.551 Tm [<004D>]TJ
+1.005 0 0 1 225.593 496.551 Tm [<004200440046>-220<0050>]TJ
+1.01 0 0 1 245.897 496.551 Tm [<0047>-219<0055>]TJ
+1.005 0 0 1 255.071 496.551 Tm [<00490046>-220<0051>]TJ
+1.01 0 0 1 272.421 496.551 Tm [<0053>]TJ
+1.005 0 0 1 276.194 496.551 Tm [<0046>]TJ
+1.01 0 0 1 280.65 496.551 Tm [<0057004A>]TJ
+1.005 0 0 1 288.086 496.551 Tm [<005000560054>-220<0050004F0046>]TJ
+1.01 0 0 1 319.753 496.551 Tm [<000D>]TJ
+1.005 0 0 1 324.434 496.551 Tm [<0054>]TJ
+1.01 0 0 1 328.449 496.551 Tm [<004A>]TJ
+1.005 0 0 1 331.126 496.551 Tm [<004F00440046>]TJ
+1.01 0 0 1 347.414 496.551 Tm [<0055>]TJ
+1.005 0 0 1 351.017 496.551 Tm [<00490046>]TJ
+1.01 0 0 1 360.929 496.551 Tm [<005A>]TJ
+1.005 0 0 1 367.789 496.551 Tm [<005400490042>]TJ
+1.01 0 0 1 381.806 496.551 Tm [<0053>]TJ
+1.005 0 0 1 385.579 496.551 Tm [<0046>]TJ
+1.01 0 0 1 392.246 496.551 Tm [<0055>]TJ
+1.005 0 0 1 395.848 496.551 Tm [<00490046>-220<00540042004E0046>-221<005100500054>]TJ
+1.01 0 0 1 445.626 496.551 Tm [<004A0055004A>]TJ
+1.005 0 0 1 454.582 496.551 Tm [<0050004F>]TJ
+1.01 0 0 1 465.225 496.551 Tm [<000F>]TJ
+1.005 0 0 1 470.67 496.551 Tm [<0022>]TJ
+1.01 0 0 1 476.738 496.551 Tm [<004D004D>]TJ
+1.005 0 0 1 113.386 484.596 Tm [<0042>]TJ
+1.01 0 0 1 117.931 484.596 Tm [<0053>]TJ
+1.005 0 0 1 121.705 484.596 Tm [<004600420054>-220<0042>]TJ
+1.01 0 0 1 141.475 484.596 Tm [<0053>]TJ
+1.005 0 0 1 145.249 484.596 Tm [<0046>-220<0046004E0051>]TJ
+1.01 0 0 1 169.725 484.596 Tm [<0055004A>]TJ
+1.005 0 0 1 176.004 484.596 Tm [<00460045>-220<0042>]TJ
+1.01 0 0 1 192.43 484.596 Tm [<0055>]TJ
+1.005 0 0 1 198.24 484.596 Tm [<0046004200440049>-220<004F00460058>-221<0054>]TJ
+1.01 0 0 1 242.016 484.596 Tm [<004D004A>]TJ
+1.005 0 0 1 247.269 484.596 Tm [<00450046>]TJ
+1.01 0 0 1 256.941 484.596 Tm [<000F>]TJ
+1.005 0 0 1 262.379 484.596 Tm [<00330046004E0046004E00430046>]TJ
+1.01 0 0 1 303.109 484.596 Tm [<0053>-219<0055>]TJ
+1.005 0 0 1 312.693 484.596 Tm [<00490042>]TJ
+1.01 0 0 1 322.696 484.596 Tm [<0055>-219<0055>]TJ
+1.005 0 0 1 332.109 484.596 Tm [<0050>-220<00430046>-221<00510042>]TJ
+1.01 0 0 1 360.906 484.596 Tm [<004A>]TJ
+1.005 0 0 1 363.583 484.596 Tm [<004F>]TJ
+1.01 0 0 1 369.17 484.596 Tm [<0055>]TJ
+1.005 0 0 1 372.772 484.596 Tm [<00460045>-220<0050004F>-221<0042>-220<0048>]TJ
+1.01 0 0 1 408.924 484.596 Tm [<004A0057>]TJ
+1.005 0 0 1 416.36 484.596 Tm [<0046004F>-220<0054>]TJ
+1.01 0 0 1 432.626 484.596 Tm [<004D004A>]TJ
+1.005 0 0 1 437.879 484.596 Tm [<00450046>]TJ
+1.01 0 0 1 447.551 484.596 Tm [<000D>]TJ
+1.005 0 0 1 452.228 484.596 Tm [<0042004F>-220<0042>]TJ
+1.01 0 0 1 469.115 484.596 Tm [<0053>]TJ
+1.005 0 0 1 472.889 484.596 Tm [<00460042>]TJ
+0.99 0 0 1 113.386 472.641 Tm [<004E00560054>]TJ
+0.98 0 0 1 130.557 472.641 Tm [<0055>]TJ
+0.99 0 0 1 136.228 472.641 Tm [<00430046>]TJ
+0.98 0 0 1 147.813 472.641 Tm [<004A>]TJ
+0.99 0 0 1 150.41 472.641 Tm [<004F>]TJ
+0.98 0 0 1 158.089 472.641 Tm [<0055>]TJ
+0.99 0 0 1 161.585 472.641 Tm [<00490046>]TJ
+0.98 0 0 1 173.525 472.641 Tm [<004D004A>]TJ
+0.99 0 0 1 178.621 472.641 Tm [<0054>]TJ
+0.98 0 0 1 182.576 472.641 Tm [<0055>]TJ
+0.99 0 0 1 188.247 472.641 Tm [<0050>]TJ
+0.98 0 0 1 193.228 472.641 Tm [<0047>]TJ
+0.99 0 0 1 198.664 472.641 Tm [<0042>]TJ
+0.98 0 0 1 203.142 472.641 Tm [<0053>]TJ
+0.99 0 0 1 206.803 472.641 Tm [<004600420054>]TJ
+0.98 0 0 1 221.801 472.641 Tm [<0055>]TJ
+0.99 0 0 1 225.296 472.641 Tm [<00490042>]TJ
+0.98 0 0 1 235.149 472.641 Tm [<0055>-222<004A>]TJ
+0.99 0 0 1 243.417 472.641 Tm [<0054>]TJ
+0.98 0 0 1 249.548 472.641 Tm [<0055>]TJ
+0.99 0 0 1 253.043 472.641 Tm [<00490046>]TJ
+0.98 0 0 1 264.983 472.641 Tm [<0057>]TJ
+0.99 0 0 1 269.601 472.641 Tm [<0042>]TJ
+0.98 0 0 1 274.079 472.641 Tm [<004D>]TJ
+0.99 0 0 1 276.579 472.641 Tm [<00560046>-220<0050>]TJ
+0.98 0 0 1 293.332 472.641 Tm [<0047>-222<0055>]TJ
+0.99 0 0 1 302.263 472.641 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 314.203 472.641 Tm [<0044>]TJ
+0.98 0 0 1 318.958 472.641 Tm [<0055>]TJ
+0.99 0 0 1 323.664 472.641 Tm [<004800440056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 340.102 472.641 Tm [<0042>]TJ
+0.98 0 0 1 344.58 472.641 Tm [<005500550053004A>]TJ
+0.99 0 0 1 357.829 472.641 Tm [<00430056>]TJ
+0.98 0 0 1 368.057 472.641 Tm [<0055>]TJ
+0.99 0 0 1 371.552 472.641 Tm [<0046>]TJ
+0.98 0 0 1 378.117 472.641 Tm [<0047>]TJ
+0.99 0 0 1 381.378 472.641 Tm [<0050>]TJ
+0.98 0 0 1 386.359 472.641 Tm [<0053>-222<0055>]TJ
+0.99 0 0 1 395.691 472.641 Tm [<0049>]TJ
+0.98 0 0 1 401.066 472.641 Tm [<004A>]TJ
+0.99 0 0 1 403.663 472.641 Tm [<0054>-220<0054>]TJ
+0.98 0 0 1 413.749 472.641 Tm [<004D004A>]TJ
+0.99 0 0 1 418.846 472.641 Tm [<00450046>]TJ
+0.98 0 0 1 428.373 472.641 Tm [<000D>]TJ
+0.99 0 0 1 432.944 472.641 Tm [<0050>]TJ
+0.98 0 0 1 437.925 472.641 Tm [<0053>]TJ
+0.99 0 0 1 443.762 472.641 Tm [<0054004900500056>]TJ
+0.98 0 0 1 463.281 472.641 Tm [<004D>]TJ
+0.99 0 0 1 465.78 472.641 Tm [<0045004F>]TJ
+0.98 0 0 1 476.422 472.641 Tm [<00080055>]TJ
+1 0 0 1 113.386 460.686 Tm [<004200510051004600420053>-220<004A004F>-220<005500490046>-220<0054004D004A0045004600080054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 196.235 460.686 Tm [<00440055004800440056000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 227.241 460.686 Tm [<0042005500550053004A0043005600550046000F>-293<0023005A>-220<00450046004700420056004D0055000D>-220<0054004D004A004500460054>-220<004200440044004600510055>-220<0042004D004D>-220<00420053004600420054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 70.982 436.775 Tm [<003F0056004800570044005500480044>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 436.775 Tm [<001F004F004C00560057>-602<00520049>-603<004400550048004400560021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 424.82 Tm [<0035>]TJ
+0.98 0 0 1 118.865 424.82 Tm [<0050>-224<0044>]TJ
+0.97 0 0 1 129.925 424.82 Tm [<0053>]TJ
+0.98 0 0 1 133.549 424.82 Tm [<00460042>]TJ
+0.97 0 0 1 142.327 424.82 Tm [<0055>]TJ
+0.98 0 0 1 145.786 424.82 Tm [<0046>-224<0042004F>-225<0042>]TJ
+0.97 0 0 1 168.834 424.82 Tm [<0053>]TJ
+0.98 0 0 1 172.458 424.82 Tm [<00460042>]TJ
+0.97 0 0 1 181.235 424.82 Tm [<000D>]TJ
+0.98 0 0 1 185.799 424.82 Tm [<0050>]TJ
+0.97 0 0 1 190.729 424.82 Tm [<0053>-227<0055>]TJ
+0.98 0 0 1 200.008 424.82 Tm [<0050>-224<004E00500045>]TJ
+0.97 0 0 1 225.078 424.82 Tm [<004A0047005A>]TJ
+0.98 0 0 1 237.536 424.82 Tm [<0042004F>-224<0046>]TJ
+0.97 0 0 1 253.957 424.82 Tm [<0059004A>]TJ
+0.98 0 0 1 261.108 424.82 Tm [<0054>]TJ
+0.97 0 0 1 265.023 424.82 Tm [<0055004A>]TJ
+0.98 0 0 1 271.053 424.82 Tm [<004F0048>-224<0050004F0046>]TJ
+0.97 0 0 1 297.969 424.82 Tm [<000D>-227<0055>]TJ
+0.98 0 0 1 305.992 424.82 Tm [<0049>]TJ
+0.97 0 0 1 311.313 424.82 Tm [<004A>]TJ
+0.98 0 0 1 313.884 424.82 Tm [<0054>-224<00440050004E004E0042004F0045>]TJ
+0.97 0 0 1 361.877 424.82 Tm [<004A>]TJ
+0.98 0 0 1 364.448 424.82 Tm [<0054>-224<0056005400460045>-225<0058>]TJ
+0.97 0 0 1 397.894 424.82 Tm [<004A0055>]TJ
+0.98 0 0 1 403.924 424.82 Tm [<0049>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 411.44 424.82 Tm [<001F004F004C>]TJ
+0.98 0 0 1 425.415 424.82 Tm [<0056>]TJ
+0.97 0 0 1 430.121 424.82 Tm [<0057>]TJ
+0.98 0 0 1 439.581 424.82 Tm [<0052>]TJ
+0.97 0 0 1 444.288 424.82 Tm [<0049>]TJ
+0.98 0 0 1 453.748 424.82 Tm [<0044>]TJ
+0.97 0 0 1 458.455 424.82 Tm [<0055>]TJ
+0.98 0 0 1 463.113 424.82 Tm [<004800440056>]TJ
+0.97 0 0 1 477.232 424.82 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 412.865 Tm [<00430046>]TJ
+0.97 0 0 1 122.7 412.865 Tm [<004A>]TJ
+0.98 0 0 1 125.271 412.865 Tm [<004F0048>-219<0042>]TJ
+0.97 0 0 1 141.843 412.865 Tm [<0053>]TJ
+0.98 0 0 1 145.467 412.865 Tm [<00460042>-219<004F0042004E00460054>-219<0054004600510042>]TJ
+0.97 0 0 1 202.386 412.865 Tm [<0053>]TJ
+0.98 0 0 1 206.01 412.865 Tm [<0042>]TJ
+0.97 0 0 1 210.442 412.865 Tm [<0055>]TJ
+0.98 0 0 1 213.902 412.865 Tm [<00460045>-219<0043>]TJ
+0.97 0 0 1 230.445 412.865 Tm [<005A>]TJ
+0.98 0 0 1 237.052 412.865 Tm [<00540051004200440046>]TJ
+0.97 0 0 1 258.776 412.865 Tm [<001C>-223<0055>]TJ
+0.98 0 0 1 266.762 412.865 Tm [<004900560054>-219<0042>]TJ
+0.97 0 0 1 287.728 412.865 Tm [<005500550053004A>]TJ
+0.98 0 0 1 300.841 412.865 Tm [<00430056>]TJ
+0.97 0 0 1 310.966 412.865 Tm [<0055>]TJ
+0.98 0 0 1 314.426 412.865 Tm [<00460054>-219<0054>]TJ
+0.97 0 0 1 328.743 412.865 Tm [<004A>]TJ
+0.98 0 0 1 331.313 412.865 Tm [<004E>]TJ
+0.97 0 0 1 339.241 412.865 Tm [<004A004D>]TJ
+0.98 0 0 1 344.286 412.865 Tm [<0042>]TJ
+0.97 0 0 1 348.718 412.865 Tm [<0053>-221<0047>]TJ
+0.98 0 0 1 357.712 412.865 Tm [<0050>]TJ
+0.97 0 0 1 362.643 412.865 Tm [<0053>]TJ
+0.98 0 0 1 368.409 412.865 Tm [<00540046>]TJ
+0.97 0 0 1 376.669 412.865 Tm [<0057>]TJ
+0.98 0 0 1 381.239 412.865 Tm [<0046>]TJ
+0.97 0 0 1 385.584 412.865 Tm [<0053>]TJ
+0.98 0 0 1 389.208 412.865 Tm [<0042>]TJ
+0.97 0 0 1 393.641 412.865 Tm [<004D>]TJ
+0.98 0 0 1 398.257 412.865 Tm [<0042>]TJ
+0.97 0 0 1 402.689 412.865 Tm [<0053>]TJ
+0.98 0 0 1 406.313 412.865 Tm [<004600420054>-219<00440042004F>-219<00430046>-220<004500460044>]TJ
+0.97 0 0 1 461.928 412.865 Tm [<004D>]TJ
+0.98 0 0 1 464.402 412.865 Tm [<0042>]TJ
+0.97 0 0 1 468.834 412.865 Tm [<0053>]TJ
+0.98 0 0 1 472.458 412.865 Tm [<00460045>]TJ
+1 0 0 1 113.386 400.91 Tm [<00420055>-219<0050004F00440046000F>-293<02650046>-220<00440050004E004E0042004F0045>-219<005500490046004F>-220<00550042004C00460054>-219<0042005500550053004A00430056005500460054>-220<0042004F0045>-219<00570042004D005600460054>-220<004D004A004C0046>]TJ
+/F111 7.97011 Tf 1 0 0 1 356.803 400.91 Tm [<003F0056004800570056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 402.211 400.91 Tm [<00420043005000570046000F>-293<002700500053>-219<004A004F005400550042004F00440046>]TJ
+1 0 0 1 113.386 388.955 Tm [<005500490046>-220<00470050004D004D00500058004A004F0048>-220<0044005000450046>-220<0044005300460042005500460054>-220<00500053>-220<004E00500045004A00EB00460054>-220<005500580050>-220<00420053004600420054000D>-220<00570046005300430077004300420045004A0045004600420077>-220<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 388.913 388.955 Tm [<0058004A004F005C>]TJ
+/F105 9.96264 Tf 1 0 0 1 408.122 388.955 Tm [<001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 365.044 Tm [<003F0056004800570044005500480044005E004500440047004C00470048004400030058004A004F005C0060>]TJ
+1 0 0 1 113.386 353.089 Tm [<00030003004500440046004E004A00550052005800510047000300200003005500480047>]TJ
+1 0 0 1 113.386 341.134 Tm [<000300030049005200550048004A00550052005800510047000300200003004A0055004800480051>]TJ
+1 0 0 1 113.386 329.179 Tm [<00030003001100110011>]TJ
+1 0 0 1 113.386 317.224 Tm [<003F005300440055>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 281.358 Tm [<0025004A004E0046004F0054004A0050004F0054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 257.448 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 257.448 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 257.448 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 257.448 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 257.448 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 257.448 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 257.448 Tm [<0056004F004C0047004800B70056>-602<005A004C>-1<00470057004B>]TJ
+/F63 9.96264 Tf 1 0 0 1 281.348 257.448 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 245.493 Tm [<02650046>-220<004200530046004200080054>-220<0058004A004500550049000D>-220<004A000F0046000F>-293<005500490046>-220<0058004A004500550049>-220<00500047>-220<005500490046>-220<00510042004A004F005500460045>-220<005B0050004F0046000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 245.224 Tm [<00220054>-200<004700420053>-200<00420054>-200<0045004A004E0046004F0054004A0050004F0054>-200<004200530046>]TJ
+1 0 0 1 491.852 236.257 Tm [<00440050004F004400460053004F00460045000D>-200<00420053004600420054>-200<004200530046>-200<005700460053005A>]TJ
+1 0 0 1 491.852 227.291 Tm [<0054004A004E004A004D00420053>-200<00550050>-200<0054004D004A004500460054000F>-266<003400460046>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 218.325 Tm [<0037004A005400560042004D>-220<002500500044>]TJ
+/F63 7.97011 Tf 1 0 0 1 528.1 218.325 Tm [<004700500053>-200<0042004F>]TJ
+1 0 0 1 491.852 209.358 Tm [<004A004D004D005600540055005300420055004A0050004F>-200<00500047>-200<00550049004A0054>-200<0044004D0042004A004E000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 221.582 Tm [<004B0056004B004C00490057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 221.582 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 221.582 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 221.582 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 221.582 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 221.582 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 221.582 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 221.582 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<02650046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<005500490046>-220<004200530046004200080054>-220<004D004600470055>-220<004300500053004500460053>-220<0042004F0045>-220<005500490046>-220<0054004D004A0045004600080054>-220<004D004600470055>-220<004300500053004500460053000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 185.717 Tm [<004B0056004B004C00490057000D>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 185.717 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 185.717 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 185.717 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 185.717 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 185.717 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 185.717 Tm [<005800510056005300480046004C0049004C00480047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 185.717 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 173.762 Tm [<0265>]TJ
+1.02 0 0 1 123.801 173.762 Tm [<0046>-306<0045>]TJ
+1.03 0 0 1 136.734 173.762 Tm [<004A>]TJ
+1.02 0 0 1 139.464 173.762 Tm [<0054>]TJ
+1.03 0 0 1 143.539 173.762 Tm [<0055>]TJ
+1.02 0 0 1 147.213 173.762 Tm [<0042004F00440046>-306<00430046>]TJ
+1.03 0 0 1 178.925 173.762 Tm [<0055>]TJ
+1.02 0 0 1 182.599 173.762 Tm [<005800460046004F>]TJ
+1.03 0 0 1 207.34 173.762 Tm [<0055>]TJ
+1.02 0 0 1 211.013 173.762 Tm [<00490046>-306<0042>]TJ
+1.03 0 0 1 228.804 173.762 Tm [<0053>]TJ
+1.02 0 0 1 232.652 173.762 Tm [<00460042>]TJ
+1.03 0 0 1 241.788 173.762 Tm [<0008>]TJ
+1.02 0 0 1 243.86 173.762 Tm [<0054>]TJ
+1.03 0 0 1 251.052 173.762 Tm [<0053004A>]TJ
+1.02 0 0 1 257.63 173.762 Tm [<00480049>]TJ
+1.03 0 0 1 267.903 173.762 Tm [<0055>]TJ
+1.02 0 0 1 274.694 173.762 Tm [<00430050>]TJ
+1.03 0 0 1 284.998 173.762 Tm [<0053>]TJ
+1.02 0 0 1 288.846 173.762 Tm [<00450046>]TJ
+1.03 0 0 1 298.662 173.762 Tm [<0053>]TJ
+1.02 0 0 1 305.627 173.762 Tm [<0042004F0045>]TJ
+1.03 0 0 1 324.322 173.762 Tm [<0055>]TJ
+1.02 0 0 1 327.996 173.762 Tm [<00490046>-306<0054>]TJ
+1.03 0 0 1 345.248 173.762 Tm [<004D004A>]TJ
+1.02 0 0 1 350.604 173.762 Tm [<00450046>]TJ
+1.03 0 0 1 360.421 173.762 Tm [<0008>]TJ
+1.02 0 0 1 362.493 173.762 Tm [<0054>]TJ
+1.03 0 0 1 369.685 173.762 Tm [<0053004A>]TJ
+1.02 0 0 1 376.263 173.762 Tm [<00480049>]TJ
+1.03 0 0 1 386.536 173.762 Tm [<0055>]TJ
+1.02 0 0 1 393.327 173.762 Tm [<00430050>]TJ
+1.03 0 0 1 403.631 173.762 Tm [<0053>]TJ
+1.02 0 0 1 407.479 173.762 Tm [<00450046>]TJ
+1.03 0 0 1 417.296 173.762 Tm [<0053000F>-555<0265>]TJ
+1.02 0 0 1 439.77 173.762 Tm [<0046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 447.409 173.762 Tm [<004B0056004B>]TJ
+1.03 0 0 1 462.104 173.762 Tm [<004C00490057000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 113.386 161.807 Tm [<0042005500550053004A0043005600550046>-224<004A0054>-225<0042004D00580042005A0054>-225<005000430046005A00460045>-225<004A0047>-225<00510053004600540046004F0055000F>-305<002A0047>-225<004F0046004A0055004900460053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 304.632 161.807 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 330.622 161.807 Tm [<004F00500053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 347.024 161.807 Tm [<004B0056004B004C00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 377.768 161.807 Tm [<004200530046>-225<0054005100460044004A00EB00460045000D>-225<005500490046004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 453.364 161.807 Tm [<004B0056004B004C00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 113.386 149.851 Tm [<004A0054>-214<005400460055>-214<00550050>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 147.198 149.851 Tm [<004B0056004B004C00490057000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 183.129 149.851 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 200.624 149.851 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 226.902 149.851 Tm [<004A0054>-214<00440050004E00510056005500460045>-214<004200440044005000530045004A004F0048004D005A000D>-216<00580049004A00440049>-214<004A0054>-214<00440050004F00570046004F004A0046004F0055>-215<00550050>-214<00440046004F005500460053>-214<0042004F>-215<0042005300460042>]TJ
+0.98 0 0 1 113.386 137.896 Tm [<0050004F>-224<0042>-225<0054>]TJ
+0.97 0 0 1 136.496 137.896 Tm [<004D004A>]TJ
+0.98 0 0 1 141.541 137.896 Tm [<00450046>]TJ
+0.97 0 0 1 150.972 137.896 Tm [<000F>-302<002A0047>]TJ
+0.98 0 0 1 164.814 137.896 Tm [<0050004F0046>-224<0050>]TJ
+0.97 0 0 1 186.66 137.896 Tm [<0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 192.08 137.896 Tm [<005A>]TJ
+0.97 0 0 1 196.787 137.896 Tm [<004C>]TJ
+0.98 0 0 1 201.445 137.896 Tm [<0047>]TJ
+0.97 0 0 1 206.151 137.896 Tm [<0057>]TJ
+0.98 0 0 1 210.809 137.896 Tm [<004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 217.708 137.896 Tm [<0050>]TJ
+0.97 0 0 1 222.638 137.896 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 228.454 137.896 Tm [<004B0056004B>]TJ
+0.97 0 0 1 242.573 137.896 Tm [<004C00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 258.74 137.896 Tm [<004A>]TJ
+0.98 0 0 1 261.311 137.896 Tm [<0054>-224<0051>]TJ
+0.97 0 0 1 272.514 137.896 Tm [<0053>]TJ
+0.98 0 0 1 276.138 137.896 Tm [<004600540046004F>]TJ
+0.97 0 0 1 294.191 137.896 Tm [<0055>]TJ
+0.98 0 0 1 299.843 137.896 Tm [<00430056>]TJ
+0.97 0 0 1 309.967 137.896 Tm [<0055>]TJ
+0.98 0 0 1 315.619 137.896 Tm [<004F0050>]TJ
+0.97 0 0 1 325.998 137.896 Tm [<0055>-226<0055>]TJ
+0.98 0 0 1 335.109 137.896 Tm [<00490046>-224<0050>]TJ
+0.97 0 0 1 351.897 137.896 Tm [<0055>]TJ
+0.98 0 0 1 355.357 137.896 Tm [<00490046>]TJ
+0.97 0 0 1 365.023 137.896 Tm [<0053000D>-226<0055>]TJ
+0.98 0 0 1 376.666 137.896 Tm [<00490046004F>]TJ
+0.97 0 0 1 393.972 137.896 Tm [<0055>]TJ
+0.98 0 0 1 397.432 137.896 Tm [<00490046>]TJ
+0.97 0 0 1 409.29 137.896 Tm [<004D>]TJ
+0.98 0 0 1 411.764 137.896 Tm [<0042>]TJ
+0.97 0 0 1 416.196 137.896 Tm [<00550055>]TJ
+0.98 0 0 1 423.115 137.896 Tm [<0046>]TJ
+0.97 0 0 1 427.46 137.896 Tm [<0053>-226<004A>]TJ
+0.98 0 0 1 435.847 137.896 Tm [<0054>-224<00440050004E00510056>]TJ
+0.97 0 0 1 468.999 137.896 Tm [<0055>]TJ
+0.98 0 0 1 472.458 137.896 Tm [<00460045>]TJ
+0.98 0 0 1 113.386 125.941 Tm [<0058>]TJ
+0.975 0 0 1 120.025 125.941 Tm [<004A0055>]TJ
+0.98 0 0 1 126.086 125.941 Tm [<0049>]TJ
+0.975 0 0 1 133.604 125.941 Tm [<0055>]TJ
+0.98 0 0 1 137.081 125.941 Tm [<00490046>-224<0048>]TJ
+0.975 0 0 1 153.493 125.941 Tm [<004A0057>]TJ
+0.98 0 0 1 160.671 125.941 Tm [<0046004F>]TJ
+0.975 0 0 1 172.66 125.941 Tm [<0057>]TJ
+0.98 0 0 1 177.255 125.941 Tm [<0042>]TJ
+0.975 0 0 1 181.687 125.941 Tm [<004D>]TJ
+0.98 0 0 1 184.174 125.941 Tm [<00560046>-224<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 213.033 125.941 Tm [<004B0056004B>]TJ
+0.975 0 0 1 227.152 125.941 Tm [<004C00490057000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 245.881 125.941 Tm [<000F>-302<002A0047>]TJ
+0.98 0 0 1 259.784 125.941 Tm [<00430050>]TJ
+0.975 0 0 1 269.685 125.941 Tm [<0055>]TJ
+0.98 0 0 1 273.162 125.941 Tm [<0049>-224<0042>]TJ
+0.975 0 0 1 285.112 125.941 Tm [<0053>]TJ
+0.98 0 0 1 288.754 125.941 Tm [<0046>-225<0051>]TJ
+0.975 0 0 1 300.392 125.941 Tm [<0053>]TJ
+0.98 0 0 1 304.035 125.941 Tm [<004600540046004F>]TJ
+0.975 0 0 1 322.087 125.941 Tm [<0055000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 330.142 125.941 Tm [<005A>]TJ
+0.975 0 0 1 334.848 125.941 Tm [<004C>]TJ
+0.98 0 0 1 339.53 125.941 Tm [<0047>]TJ
+0.975 0 0 1 344.236 125.941 Tm [<0057>]TJ
+0.98 0 0 1 348.919 125.941 Tm [<004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 355.821 125.941 Tm [<004A>]TJ
+0.98 0 0 1 358.405 125.941 Tm [<0054>]TJ
+0.975 0 0 1 364.516 125.941 Tm [<004A>]TJ
+0.98 0 0 1 367.1 125.941 Tm [<0048004F0050>]TJ
+0.975 0 0 1 382.028 125.941 Tm [<0053>]TJ
+0.98 0 0 1 385.671 125.941 Tm [<00460045>-224<0042004F0045>]TJ
+0.975 0 0 1 414.462 125.941 Tm [<0055>]TJ
+0.98 0 0 1 417.94 125.941 Tm [<00490046>-224<0051>]TJ
+0.975 0 0 1 434.898 125.941 Tm [<0053>]TJ
+0.98 0 0 1 438.541 125.941 Tm [<0046>]TJ
+0.975 0 0 1 442.885 125.941 Tm [<0057004A>]TJ
+0.98 0 0 1 450.064 125.941 Tm [<005000560054>]TJ
+0.975 0 0 1 466.261 125.941 Tm [<0053>]TJ
+0.98 0 0 1 469.903 125.941 Tm [<0056>]TJ
+0.975 0 0 1 475.058 125.941 Tm [<004D>]TJ
+0.98 0 0 1 477.545 125.941 Tm [<0046>]TJ
+1 0 0 1 113.386 113.986 Tm [<004200510051004D004A00460054000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01F0>]TJ
+ET
+endstream
+endobj
+161 0 obj <<
+/Type /Page
+/Contents 162 0 R
+/Resources 160 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 124 0 R
+>> endobj
+163 0 obj <<
+/D [161 0 R /XYZ 113.386 291.776 null]
+>> endobj
+164 0 obj <<
+/D [161 0 R /XYZ 113.386 269.284 null]
+>> endobj
+165 0 obj <<
+/D [161 0 R /XYZ 113.386 231.276 null]
+>> endobj
+166 0 obj <<
+/D [161 0 R /XYZ 113.386 197.543 null]
+>> endobj
+160 0 obj <<
+/Font << /F111 6 0 R /F105 5 0 R /F123 17 0 R /F63 7 0 R /F7 46 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+169 0 obj <<
+/Length 31389
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 82.38 640.013 Tm [<004B0048004C004A004B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 640.013 Tm [<0056004F004C0047004800B70056>-602<004B0048>-1<004C004A004B0057>]TJ
+/F63 9.96264 Tf 1 0 0 1 286.151 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<02650046>-220<004200530046004200080054>-220<00490046004A004800490055000F>-293<0265004A0054>-220<0045004600EB004F00460054>-220<005500490046>-220<0057004600530055004A00440042004D>-220<0045004A004E0046004F0054004A0050004F>-220<00500047>-220<005500490046>-220<00510042004A004F005500460045>-220<005B0050004F0046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 604.148 Tm [<00590056004B004C00490057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 604.148 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 604.148 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 604.148 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 604.148 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 604.148 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 604.148 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 592.193 Tm [<02650046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<005500490046>-220<004200530046004200080054>-220<005500500051>-220<0042004F0045>-220<005500490046>-220<0054004D004A0045004600080054>-220<005500500051000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 568.282 Tm [<00590056004B004C00490057000D>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 568.282 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 568.282 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 568.282 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 568.282 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 568.282 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 568.282 Tm [<005800510056005300480046004C0049004C00480047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 568.282 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 113.386 556.327 Tm [<0265>]TJ
+0.995 0 0 1 123.397 556.327 Tm [<0046>-219<0045>]TJ
+0.99 0 0 1 135.152 556.327 Tm [<004A>]TJ
+0.995 0 0 1 137.776 556.327 Tm [<0054>]TJ
+0.99 0 0 1 141.751 556.327 Tm [<0055>]TJ
+0.995 0 0 1 145.282 556.327 Tm [<0042004F00440046>-219<00430046>]TJ
+0.99 0 0 1 175.356 556.327 Tm [<0055>]TJ
+0.995 0 0 1 178.887 556.327 Tm [<005800460046004F>]TJ
+0.99 0 0 1 202.161 556.327 Tm [<0055>]TJ
+0.995 0 0 1 205.692 556.327 Tm [<00490046>-219<0042>]TJ
+0.99 0 0 1 222.186 556.327 Tm [<0053>]TJ
+0.995 0 0 1 225.884 556.327 Tm [<00460042>]TJ
+0.99 0 0 1 234.796 556.327 Tm [<0008>]TJ
+0.995 0 0 1 236.788 556.327 Tm [<0054>-219<00430050>]TJ
+0.99 0 0 1 252.994 556.327 Tm [<00550055>]TJ
+0.995 0 0 1 260.056 556.327 Tm [<0050004E>-219<0042004F0045>]TJ
+0.99 0 0 1 292.667 556.327 Tm [<0055>]TJ
+0.995 0 0 1 296.198 556.327 Tm [<00490046>-219<0054>]TJ
+0.99 0 0 1 312.166 556.327 Tm [<004D004A>]TJ
+0.995 0 0 1 317.315 556.327 Tm [<00450046>]TJ
+0.99 0 0 1 326.89 556.327 Tm [<0008>]TJ
+0.995 0 0 1 328.883 556.327 Tm [<0054>-219<00430050>]TJ
+0.99 0 0 1 345.089 556.327 Tm [<00550055>]TJ
+0.995 0 0 1 352.151 556.327 Tm [<0050004E>]TJ
+0.99 0 0 1 365.206 556.327 Tm [<000F>-295<002A0055>]TJ
+0.995 0 0 1 379.447 556.327 Tm [<00580050>]TJ
+0.99 0 0 1 391.194 556.327 Tm [<0053>]TJ
+0.995 0 0 1 394.892 556.327 Tm [<004C0054>]TJ
+0.99 0 0 1 405.993 556.327 Tm [<004D004A>]TJ
+0.995 0 0 1 411.142 556.327 Tm [<004C0046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.995 0 0 1 422.679 556.327 Tm [<004B0056004B>]TJ
+0.99 0 0 1 437.014 556.327 Tm [<004C00490057000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 458.211 556.327 Tm [<004A>]TJ
+0.995 0 0 1 460.834 556.327 Tm [<004F>]TJ
+0.99 0 0 1 468.545 556.327 Tm [<0055>]TJ
+0.995 0 0 1 472.076 556.327 Tm [<00490046>]TJ
+1 0 0 1 113.386 544.372 Tm [<0057004600530055004A00440042004D>-220<0045004A004E0046004F0054004A0050004F000D>-220<0042004F0045>-220<004A0054>-220<00440050004F00540046005200560046004F0055004D005A>-220<0042004D00580042005A0054>-220<005000430046005A00460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 520.462 Tm [<004B0056004C005D0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 520.462 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 520.462 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 520.462 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 520.462 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 520.462 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 520.462 Tm [<004400550048004400B70056>-602<005A004C0047>-1<0057004B>]TJ
+/F63 9.96264 Tf 1 0 0 1 276.546 520.462 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 508.506 Tm [<02650046>-220<004D004A004F004600080054>-220<004D0046004F004800550049>-220<004A004F>-220<005500490046>-220<0042005300460042000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 484.596 Tm [<004F004800490057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 484.596 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 484.596 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 484.596 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 484.596 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 484.596 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 484.596 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 484.596 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 472.641 Tm [<0265>]TJ
+1.02 0 0 1 123.801 472.641 Tm [<0046>-263<0042>]TJ
+1.03 0 0 1 135.609 472.641 Tm [<0053>]TJ
+1.02 0 0 1 139.457 472.641 Tm [<00460042>]TJ
+1.03 0 0 1 148.593 472.641 Tm [<0008>]TJ
+1.02 0 0 1 150.666 472.641 Tm [<0054>]TJ
+1.03 0 0 1 157.413 472.641 Tm [<004D>]TJ
+1.02 0 0 1 160.04 472.641 Tm [<0046>]TJ
+1.03 0 0 1 164.562 472.641 Tm [<00470055>]TJ
+1.02 0 0 1 174.335 472.641 Tm [<004E0042>]TJ
+1.03 0 0 1 187.2 472.641 Tm [<0053>]TJ
+1.02 0 0 1 191.048 472.641 Tm [<0048>]TJ
+1.03 0 0 1 195.783 472.641 Tm [<004A>]TJ
+1.02 0 0 1 198.513 472.641 Tm [<004F>]TJ
+1.03 0 0 1 204.183 472.641 Tm [<000D>-272<004A000F>]TJ
+1.02 0 0 1 214.734 472.641 Tm [<0046>]TJ
+1.03 0 0 1 219.256 472.641 Tm [<000F>-425<0055>]TJ
+1.02 0 0 1 229.807 472.641 Tm [<00490046>-263<0045>]TJ
+1.03 0 0 1 247.834 472.641 Tm [<004A>]TJ
+1.02 0 0 1 250.564 472.641 Tm [<0054>]TJ
+1.03 0 0 1 254.639 472.641 Tm [<0055>]TJ
+1.02 0 0 1 258.312 472.641 Tm [<0042004F00440046>-263<00430046>]TJ
+1.03 0 0 1 289.58 472.641 Tm [<0055>]TJ
+1.02 0 0 1 293.254 472.641 Tm [<005800460046004F>]TJ
+1.03 0 0 1 317.551 472.641 Tm [<004A0055>]TJ
+1.02 0 0 1 323.954 472.641 Tm [<0054>]TJ
+1.03 0 0 1 330.701 472.641 Tm [<004D>]TJ
+1.02 0 0 1 333.328 472.641 Tm [<0046>]TJ
+1.03 0 0 1 337.85 472.641 Tm [<00470055>]TJ
+1.02 0 0 1 347.623 472.641 Tm [<00430050>]TJ
+1.03 0 0 1 357.927 472.641 Tm [<0053>]TJ
+1.02 0 0 1 361.775 472.641 Tm [<00450046>]TJ
+1.03 0 0 1 371.592 472.641 Tm [<0053>]TJ
+1.02 0 0 1 378.112 472.641 Tm [<0042004F0045>]TJ
+1.03 0 0 1 396.363 472.641 Tm [<0055>]TJ
+1.02 0 0 1 400.036 472.641 Tm [<00490046>]TJ
+1.03 0 0 1 412.769 472.641 Tm [<004D>]TJ
+1.02 0 0 1 415.396 472.641 Tm [<0046>]TJ
+1.03 0 0 1 419.918 472.641 Tm [<00470055>]TJ
+1.02 0 0 1 429.691 472.641 Tm [<00430050>]TJ
+1.03 0 0 1 439.995 472.641 Tm [<0053>]TJ
+1.02 0 0 1 443.843 472.641 Tm [<00450046>]TJ
+1.03 0 0 1 453.66 472.641 Tm [<0053>]TJ
+1.02 0 0 1 460.18 472.641 Tm [<0050>]TJ
+1.03 0 0 1 465.312 472.641 Tm [<0047>-260<004A0055>]TJ
+1.02 0 0 1 477.815 472.641 Tm [<0054>]TJ
+1 0 0 1 113.386 460.686 Tm [<00550046005900550043004D00500044004C000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 436.775 Tm [<0055004C004A004B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 436.775 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 436.775 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 436.775 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 436.775 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 436.775 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 436.775 Tm [<005800510056005300480046004C0049004C00480047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 436.775 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 424.82 Tm [<0265>]TJ
+1.02 0 0 1 123.801 424.82 Tm [<0046>-230<0042>]TJ
+1.03 0 0 1 135.28 424.82 Tm [<0053>]TJ
+1.02 0 0 1 139.128 424.82 Tm [<00460042>]TJ
+1.03 0 0 1 148.264 424.82 Tm [<0008>]TJ
+1.02 0 0 1 150.337 424.82 Tm [<0054>]TJ
+1.03 0 0 1 156.755 424.82 Tm [<0053004A>]TJ
+1.02 0 0 1 163.332 424.82 Tm [<00480049>]TJ
+1.03 0 0 1 173.606 424.82 Tm [<0055>]TJ
+1.02 0 0 1 179.623 424.82 Tm [<004E0042>]TJ
+1.03 0 0 1 192.488 424.82 Tm [<0053>]TJ
+1.02 0 0 1 196.336 424.82 Tm [<0048>]TJ
+1.03 0 0 1 201.072 424.82 Tm [<004A>]TJ
+1.02 0 0 1 203.801 424.82 Tm [<004F>]TJ
+1.03 0 0 1 209.472 424.82 Tm [<000D>-232<004A000F>]TJ
+1.02 0 0 1 219.61 424.82 Tm [<0046>]TJ
+1.03 0 0 1 224.132 424.82 Tm [<000F>-329<0055>]TJ
+1.02 0 0 1 233.697 424.82 Tm [<00490046>-230<0045>]TJ
+1.03 0 0 1 251.395 424.82 Tm [<004A>]TJ
+1.02 0 0 1 254.125 424.82 Tm [<0054>]TJ
+1.03 0 0 1 258.2 424.82 Tm [<0055>]TJ
+1.02 0 0 1 261.873 424.82 Tm [<0042004F00440046>-230<00430046>]TJ
+1.03 0 0 1 292.812 424.82 Tm [<0055>]TJ
+1.02 0 0 1 296.486 424.82 Tm [<005800460046004F>]TJ
+1.03 0 0 1 320.454 424.82 Tm [<004A0055>]TJ
+1.02 0 0 1 326.857 424.82 Tm [<0054>]TJ
+1.03 0 0 1 333.275 424.82 Tm [<0053004A>]TJ
+1.02 0 0 1 339.853 424.82 Tm [<00480049>]TJ
+1.03 0 0 1 350.127 424.82 Tm [<0055>]TJ
+1.02 0 0 1 356.143 424.82 Tm [<00430050>]TJ
+1.03 0 0 1 366.448 424.82 Tm [<0053>]TJ
+1.02 0 0 1 370.296 424.82 Tm [<00450046>]TJ
+1.03 0 0 1 380.112 424.82 Tm [<0053>]TJ
+1.02 0 0 1 386.304 424.82 Tm [<0042004F0045>]TJ
+1.03 0 0 1 404.225 424.82 Tm [<0055>]TJ
+1.02 0 0 1 407.899 424.82 Tm [<00490046>]TJ
+1.03 0 0 1 420.302 424.82 Tm [<0053004A>]TJ
+1.02 0 0 1 426.88 424.82 Tm [<00480049>]TJ
+1.03 0 0 1 437.154 424.82 Tm [<0055>]TJ
+1.02 0 0 1 443.171 424.82 Tm [<00430050>]TJ
+1.03 0 0 1 453.475 424.82 Tm [<0053>]TJ
+1.02 0 0 1 457.323 424.82 Tm [<00450046>]TJ
+1.03 0 0 1 467.139 424.82 Tm [<0053>]TJ
+1.02 0 0 1 473.331 424.82 Tm [<0050>]TJ
+1.03 0 0 1 478.462 424.82 Tm [<0047>]TJ
+1.03 0 0 1 113.386 412.865 Tm [<004A0055>]TJ
+1.02 0 0 1 119.789 412.865 Tm [<0054>]TJ
+1.03 0 0 1 126.157 412.865 Tm [<0055>]TJ
+1.02 0 0 1 129.831 412.865 Tm [<0046>]TJ
+1.03 0 0 1 134.353 412.865 Tm [<00590055>]TJ
+1.02 0 0 1 142.891 412.865 Tm [<0043>]TJ
+1.03 0 0 1 148.063 412.865 Tm [<004D>]TJ
+1.02 0 0 1 150.69 412.865 Tm [<00500044004C>]TJ
+1.03 0 0 1 164.988 412.865 Tm [<000F>-314<002D004A>]TJ
+1.02 0 0 1 178.825 412.865 Tm [<004C0046>]TJ
+1.03 0 0 1 190.712 412.865 Tm [<0055>]TJ
+1.02 0 0 1 194.385 412.865 Tm [<00490046>-225<00540042004E0046>-226<0042>]TJ
+1.03 0 0 1 235.108 412.865 Tm [<005500550053004A>]TJ
+1.02 0 0 1 249.033 412.865 Tm [<00430056>]TJ
+1.03 0 0 1 259.571 412.865 Tm [<0055>]TJ
+1.02 0 0 1 263.244 412.865 Tm [<0046>]TJ
+1.03 0 0 1 270.06 412.865 Tm [<0047>]TJ
+1.02 0 0 1 273.487 412.865 Tm [<0050>]TJ
+1.03 0 0 1 278.619 412.865 Tm [<0053>]TJ
+1.02 0 0 1 284.76 412.865 Tm [<0054>]TJ
+1.03 0 0 1 288.835 412.865 Tm [<004D004A>]TJ
+1.02 0 0 1 294.192 412.865 Tm [<004500460054>]TJ
+1.03 0 0 1 308.083 412.865 Tm [<000D>-226<004A0055>-223<004A>]TJ
+1.02 0 0 1 324.342 412.865 Tm [<0054>-225<0042>]TJ
+1.03 0 0 1 335.324 412.865 Tm [<004D>]TJ
+1.02 0 0 1 337.951 412.865 Tm [<00580042>]TJ
+1.03 0 0 1 349.474 412.865 Tm [<005A>]TJ
+1.02 0 0 1 354.215 412.865 Tm [<0054>-225<005000430046>]TJ
+1.03 0 0 1 375.41 412.865 Tm [<005A>]TJ
+1.02 0 0 1 380.151 412.865 Tm [<00460045>]TJ
+1.03 0 0 1 389.967 412.865 Tm [<000D>-226<004A000F>]TJ
+1.02 0 0 1 400.043 412.865 Tm [<0046>]TJ
+1.03 0 0 1 404.566 412.865 Tm [<000F>-314<004A0047>]TJ
+1.02 0 0 1 418.757 412.865 Tm [<0054005100460044>]TJ
+1.03 0 0 1 436.754 412.865 Tm [<004A00EB>]TJ
+1.02 0 0 1 445.24 412.865 Tm [<00460045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 457.35 412.865 Tm [<004B0056>]TJ
+1.03 0 0 1 467.147 412.865 Tm [<004C>]TJ
+1.02 0 0 1 472.093 412.865 Tm [<005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 113.386 400.91 Tm [<0042004F0045001000500053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 143.665 400.91 Tm [<004F004800490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 165.164 400.91 Tm [<004200530046>-219<005400460055>-219<004200440044005000530045004A004F0048004D005A000F>-292<002700500053>-220<005500490046>-219<00530056004D0046>-219<00480050005700460053004F004A004F0048>-219<00550049005000540046>-219<00570042004D005600460054>-219<004200530046>-219<00440050004E00510056005500460045000D>-220<005400460046>-219<005500490046>]TJ
+0.985 0 0 1 113.386 388.955 Tm [<0045>]TJ
+0.98 0 0 1 118.499 388.955 Tm [<004A>]TJ
+0.985 0 0 1 121.096 388.955 Tm [<00540044005600540054>]TJ
+0.98 0 0 1 142.037 388.955 Tm [<004A>]TJ
+0.985 0 0 1 144.634 388.955 Tm [<0050004F>-221<0050004F>]TJ
+0.98 0 0 1 169.843 388.955 Tm [<0055>]TJ
+0.985 0 0 1 173.338 388.955 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 185.226 388.955 Tm [<0055004C>]TJ
+0.985 0 0 1 194.639 388.955 Tm [<004A004B>]TJ
+0.98 0 0 1 204.099 388.955 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 210.979 388.955 Tm [<0042>]TJ
+0.98 0 0 1 215.434 388.955 Tm [<005500550053004A>]TJ
+0.985 0 0 1 228.683 388.955 Tm [<00430056>]TJ
+0.98 0 0 1 238.859 388.955 Tm [<0055>]TJ
+0.985 0 0 1 242.354 388.955 Tm [<0046>]TJ
+0.98 0 0 1 248.894 388.955 Tm [<0047>]TJ
+0.985 0 0 1 252.155 388.955 Tm [<0050>]TJ
+0.98 0 0 1 257.111 388.955 Tm [<0053>]TJ
+0.985 0 0 1 262.945 388.955 Tm [<0054>]TJ
+0.98 0 0 1 266.88 388.955 Tm [<004D004A>]TJ
+0.985 0 0 1 271.977 388.955 Tm [<004500460054>]TJ
+0.98 0 0 1 285.391 388.955 Tm [<000D>]TJ
+0.985 0 0 1 289.96 388.955 Tm [<0050>]TJ
+0.98 0 0 1 294.916 388.955 Tm [<0053>]TJ
+0.985 0 0 1 300.75 388.955 Tm [<0050004F>]TJ
+0.98 0 0 1 313.355 388.955 Tm [<0055>]TJ
+0.985 0 0 1 316.85 388.955 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 328.738 388.955 Tm [<004B0056004B>]TJ
+0.98 0 0 1 342.929 388.955 Tm [<004C00490057000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 363.927 388.955 Tm [<0042>]TJ
+0.98 0 0 1 368.382 388.955 Tm [<005500550053004A>]TJ
+0.985 0 0 1 381.631 388.955 Tm [<00430056>]TJ
+0.98 0 0 1 391.807 388.955 Tm [<0055>]TJ
+0.985 0 0 1 395.303 388.955 Tm [<0046>]TJ
+0.98 0 0 1 401.842 388.955 Tm [<0047>]TJ
+0.985 0 0 1 405.103 388.955 Tm [<0050>]TJ
+0.98 0 0 1 410.059 388.955 Tm [<0053>]TJ
+0.985 0 0 1 415.893 388.955 Tm [<0042>]TJ
+0.98 0 0 1 420.349 388.955 Tm [<0053>]TJ
+0.985 0 0 1 424.01 388.955 Tm [<004600420054>]TJ
+0.98 0 0 1 438.94 388.955 Tm [<004B>]TJ
+0.985 0 0 1 441.322 388.955 Tm [<00560054>]TJ
+0.98 0 0 1 450.439 388.955 Tm [<0055>]TJ
+0.985 0 0 1 456.107 388.955 Tm [<004200430050>]TJ
+0.98 0 0 1 470.513 388.955 Tm [<0057>]TJ
+0.985 0 0 1 475.131 388.955 Tm [<0046>]TJ
+0.98 0 0 1 479.498 388.955 Tm [<000D>]TJ
+1 0 0 1 113.386 377 Tm [<00580049004A00440049>-220<005800500053004C0054>-220<0054004A004E004A004D00420053004D005A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 353.089 Tm [<004B005300520056>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 353.089 Tm [<00490049>]TJ
+/F111 7.97011 Tf 1 0 0 1 130.739 353.089 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 135.541 353.089 Tm [<00490055>]TJ
+/F111 7.97011 Tf 1 0 0 1 145.146 353.089 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 149.948 353.089 Tm [<00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 159.553 353.089 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 164.355 353.089 Tm [<00550055>]TJ
+/F7 9.96264 Tf 1 0 0 1 173.96 353.089 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 191.671 353.089 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 194.939 353.089 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 228.523 353.089 Tm [<00490055>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 353.089 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 341.134 Tm [<0265004A>]TJ
+1.005 0 0 1 126.276 341.134 Tm [<0054>-220<00440050004F>]TJ
+1.01 0 0 1 147.174 341.134 Tm [<00550053>]TJ
+1.005 0 0 1 154.55 341.134 Tm [<0050>]TJ
+1.01 0 0 1 159.606 341.134 Tm [<004D>]TJ
+1.005 0 0 1 162.182 341.134 Tm [<0054>]TJ
+1.01 0 0 1 168.402 341.134 Tm [<0055>]TJ
+1.005 0 0 1 172.004 341.134 Tm [<00490046>-220<0042>]TJ
+1.01 0 0 1 188.667 341.134 Tm [<0053>]TJ
+1.005 0 0 1 192.441 341.134 Tm [<00460042>]TJ
+1.01 0 0 1 201.442 341.134 Tm [<0008>]TJ
+1.005 0 0 1 203.475 341.134 Tm [<0054>-220<00490050>]TJ
+1.01 0 0 1 220.208 341.134 Tm [<0053004A>]TJ
+1.005 0 0 1 226.658 341.134 Tm [<005B0050004F>]TJ
+1.01 0 0 1 241.716 341.134 Tm [<0055>]TJ
+1.005 0 0 1 245.319 341.134 Tm [<0042>]TJ
+1.01 0 0 1 249.864 341.134 Tm [<004D>-219<004B>]TJ
+1.005 0 0 1 257.101 341.134 Tm [<00560054>]TJ
+1.01 0 0 1 266.402 341.134 Tm [<0055004A00EB>]TJ
+1.005 0 0 1 278.326 341.134 Tm [<00440042>]TJ
+1.01 0 0 1 286.907 341.134 Tm [<0055004A>]TJ
+1.005 0 0 1 293.186 341.134 Tm [<0050004F>]TJ
+1.01 0 0 1 303.829 341.134 Tm [<000F>-294<0265>]TJ
+1.005 0 0 1 319.47 341.134 Tm [<0046>]TJ
+1.01 0 0 1 326.131 341.134 Tm [<0057>]TJ
+1.005 0 0 1 330.89 341.134 Tm [<0042>]TJ
+1.01 0 0 1 335.436 341.134 Tm [<004D>]TJ
+1.005 0 0 1 338.012 341.134 Tm [<005600460054>-220<004E00460042004F>]TJ
+1.01 0 0 1 376.692 341.134 Tm [<001B>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.01 0 0 1 382.107 341.134 Tm [<00490049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 394.012 341.134 Tm [<004A>]TJ
+1.005 0 0 1 396.689 341.134 Tm [<0054>]TJ
+1.01 0 0 1 402.909 341.134 Tm [<00EC>]TJ
+1.005 0 0 1 408.584 341.134 Tm [<005600540049>]TJ
+1.01 0 0 1 423.343 341.134 Tm [<004D>]TJ
+1.005 0 0 1 425.918 341.134 Tm [<0046>]TJ
+1.01 0 0 1 430.374 341.134 Tm [<00470055001000EC>]TJ
+1.005 0 0 1 446.957 341.134 Tm [<005600540049>]TJ
+1.01 0 0 1 461.715 341.134 Tm [<0053004A>]TJ
+1.005 0 0 1 468.165 341.134 Tm [<00480049>]TJ
+1.01 0 0 1 478.287 341.134 Tm [<0055>]TJ
+1 0 0 1 113.386 329.179 Tm [<0009004A000F0046000F>-291<0055004600590055>-214<004B005600540055004A00EB00460045>-215<0050004F>-214<0043005000550049>-215<0054004A004500460054000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 247.279 329.179 Tm [<00490055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 259.02 329.179 Tm [<004A0054>-214<00EC005600540049004D00460047005500100053004200480048004600450053004A004800490055>-214<000900440050004E004E0050004F004D005A>-215<00440042004D004D00460045>-214<0053004200480048004600450053004A004800490055000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 113.386 317.224 Tm [<00550049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 126.113 317.224 Tm [<004A>]TJ
+1.02 0 0 1 128.843 317.224 Tm [<0054>]TJ
+1.03 0 0 1 135.752 317.224 Tm [<0053>]TJ
+1.02 0 0 1 139.6 317.224 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 163.501 317.224 Tm [<004D>]TJ
+1.02 0 0 1 166.128 317.224 Tm [<0046>]TJ
+1.03 0 0 1 170.65 317.224 Tm [<00470055001000EC>]TJ
+1.02 0 0 1 187.561 317.224 Tm [<005600540049>]TJ
+1.03 0 0 1 202.539 317.224 Tm [<0053004A>]TJ
+1.02 0 0 1 209.117 317.224 Tm [<00480049>]TJ
+1.03 0 0 1 219.391 317.224 Tm [<0055>-276<0009>]TJ
+1.02 0 0 1 229.265 317.224 Tm [<00440042>]TJ
+1.03 0 0 1 237.973 317.224 Tm [<004D004D>]TJ
+1.02 0 0 1 243.227 317.224 Tm [<00460045>]TJ
+1.03 0 0 1 255.878 317.224 Tm [<0053>]TJ
+1.02 0 0 1 259.726 317.224 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 283.627 317.224 Tm [<004D>]TJ
+1.02 0 0 1 286.254 317.224 Tm [<0046>]TJ
+1.03 0 0 1 290.776 317.224 Tm [<00470055000A000D>]TJ
+1.02 0 0 1 306.752 317.224 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 325.165 317.224 Tm [<00550055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 337.892 317.224 Tm [<004A>]TJ
+1.02 0 0 1 340.621 317.224 Tm [<0054>]TJ
+1.03 0 0 1 347.531 317.224 Tm [<0053>]TJ
+1.02 0 0 1 351.379 317.224 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 375.28 317.224 Tm [<004D>]TJ
+1.02 0 0 1 377.907 317.224 Tm [<0046>]TJ
+1.03 0 0 1 382.429 317.224 Tm [<0047005500100053>]TJ
+1.02 0 0 1 397.4 317.224 Tm [<00420048004800460045>]TJ
+1.03 0 0 1 421.301 317.224 Tm [<0053004A>]TJ
+1.02 0 0 1 427.879 317.224 Tm [<00480049>]TJ
+1.03 0 0 1 438.152 317.224 Tm [<0055>-276<0009004A000F>]TJ
+1.02 0 0 1 453.27 317.224 Tm [<0046>]TJ
+1.03 0 0 1 457.792 317.224 Tm [<000F>-472<0055>]TJ
+1.02 0 0 1 468.83 317.224 Tm [<0046>]TJ
+1.03 0 0 1 473.352 317.224 Tm [<00590055>]TJ
+1 0 0 1 113.386 305.269 Tm [<00440046004F00550046005300460045000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 281.358 Tm [<00590056004C005D0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 281.358 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 281.358 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 281.358 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 281.358 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 281.358 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 281.358 Tm [<004400550048004400B70056>-602<004B0048004C>-1<004A004B0057>]TJ
+/F63 9.96264 Tf 1 0 0 1 281.348 281.358 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 113.386 269.403 Tm [<02650046>-225<00490046004A004800490055>-225<00500047>-226<005500490046>-225<004200530046004200080054>-225<00550046005900550043004D00500044004C000D>-227<004F00500055>-225<004700500053>-225<0051004200480046>-226<0043005300460042004C0054000D>-226<005000430057004A005000560054004D005A000D>-226<004300560055>-226<004700500053>-225<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.995 0 0 1 424.351 269.403 Tm [<0059005300520056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 445.698 269.403 Tm [<0042005500550053004A0043005600550046>]TJ
+1 0 0 1 113.386 257.448 Tm [<00430046004D00500058000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 96.787 233.538 Tm [<005700520053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 233.538 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 233.538 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 233.538 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 233.538 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 233.538 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 233.538 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 233.538 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 221.582 Tm [<0265>]TJ
+0.98 0 0 1 123.245 221.582 Tm [<0046>-224<0042>]TJ
+0.975 0 0 1 134.214 221.582 Tm [<0053>]TJ
+0.98 0 0 1 137.857 221.582 Tm [<00460042>]TJ
+0.975 0 0 1 146.634 221.582 Tm [<0008>]TJ
+0.98 0 0 1 148.596 221.582 Tm [<0054>]TJ
+0.975 0 0 1 154.703 221.582 Tm [<0055>]TJ
+0.98 0 0 1 158.18 221.582 Tm [<00500051>-224<004E0042>]TJ
+0.975 0 0 1 182.76 221.582 Tm [<0053>]TJ
+0.98 0 0 1 186.402 221.582 Tm [<0048>]TJ
+0.975 0 0 1 190.952 221.582 Tm [<004A>]TJ
+0.98 0 0 1 193.536 221.582 Tm [<004F>]TJ
+0.975 0 0 1 198.984 221.582 Tm [<000D>-225<004A000F>]TJ
+0.98 0 0 1 208.519 221.582 Tm [<0046>]TJ
+0.975 0 0 1 212.864 221.582 Tm [<000F>-300<0055>]TJ
+0.98 0 0 1 221.643 221.582 Tm [<00490046>-224<0045>]TJ
+0.975 0 0 1 238.588 221.582 Tm [<004A>]TJ
+0.98 0 0 1 241.172 221.582 Tm [<0054>]TJ
+0.975 0 0 1 245.087 221.582 Tm [<0055>]TJ
+0.98 0 0 1 248.564 221.582 Tm [<0042004F00440046>-224<00430046>]TJ
+0.975 0 0 1 278.23 221.582 Tm [<0055>]TJ
+0.98 0 0 1 281.707 221.582 Tm [<005800460046004F>]TJ
+0.975 0 0 1 304.676 221.582 Tm [<004A0055>]TJ
+0.98 0 0 1 310.737 221.582 Tm [<0054>-224<0056005100510046>]TJ
+0.975 0 0 1 336.537 221.582 Tm [<0053>]TJ
+0.98 0 0 1 342.371 221.582 Tm [<00430050>]TJ
+0.975 0 0 1 352.271 221.582 Tm [<0053>]TJ
+0.98 0 0 1 355.914 221.582 Tm [<00450046>]TJ
+0.975 0 0 1 365.345 221.582 Tm [<0053>]TJ
+0.98 0 0 1 371.179 221.582 Tm [<0042004F0045>]TJ
+0.975 0 0 1 388.338 221.582 Tm [<0055>]TJ
+0.98 0 0 1 391.816 221.582 Tm [<00490046>]TJ
+0.975 0 0 1 403.673 221.582 Tm [<0055>]TJ
+0.98 0 0 1 407.151 221.582 Tm [<00500051>-224<0050>]TJ
+0.975 0 0 1 424.3 221.582 Tm [<0047>-225<004A0055>]TJ
+0.98 0 0 1 435.798 221.582 Tm [<0054>]TJ
+0.975 0 0 1 441.905 221.582 Tm [<0055>]TJ
+0.98 0 0 1 445.382 221.582 Tm [<0046>]TJ
+0.975 0 0 1 449.727 221.582 Tm [<00590055>]TJ
+0.98 0 0 1 457.808 221.582 Tm [<0043>]TJ
+0.975 0 0 1 462.778 221.582 Tm [<004D>]TJ
+0.98 0 0 1 465.265 221.582 Tm [<00500044004C>]TJ
+0.975 0 0 1 479.002 221.582 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 197.672 Tm [<004500520057005700520050>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 197.672 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 197.672 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 197.672 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 197.672 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 197.672 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 197.672 Tm [<005800510056005300480046004C0049004C00480047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 197.672 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 185.717 Tm [<0265>]TJ
+1.02 0 0 1 123.801 185.717 Tm [<0046>-242<0042>]TJ
+1.03 0 0 1 135.397 185.717 Tm [<0053>]TJ
+1.02 0 0 1 139.245 185.717 Tm [<00460042>-242<00430050>]TJ
+1.03 0 0 1 161.144 185.717 Tm [<00550055>]TJ
+1.02 0 0 1 168.491 185.717 Tm [<0050004E>-242<004E0042>]TJ
+1.03 0 0 1 197.199 185.717 Tm [<0053>]TJ
+1.02 0 0 1 201.047 185.717 Tm [<0048>]TJ
+1.03 0 0 1 205.783 185.717 Tm [<004A>]TJ
+1.02 0 0 1 208.512 185.717 Tm [<004F>]TJ
+1.03 0 0 1 214.183 185.717 Tm [<000D>-246<004A000F>]TJ
+1.02 0 0 1 224.467 185.717 Tm [<0046>]TJ
+1.03 0 0 1 228.989 185.717 Tm [<000F>-363<0055>]TJ
+1.02 0 0 1 238.903 185.717 Tm [<00490046>-242<0045>]TJ
+1.03 0 0 1 256.718 185.717 Tm [<004A>]TJ
+1.02 0 0 1 259.447 185.717 Tm [<0054>]TJ
+1.03 0 0 1 263.522 185.717 Tm [<0055>]TJ
+1.02 0 0 1 267.196 185.717 Tm [<0042004F00440046>-242<00430046>]TJ
+1.03 0 0 1 298.251 185.717 Tm [<0055>]TJ
+1.02 0 0 1 301.925 185.717 Tm [<005800460046004F>]TJ
+1.03 0 0 1 326.009 185.717 Tm [<004A0055>]TJ
+1.02 0 0 1 332.412 185.717 Tm [<0054>]TJ
+1.03 0 0 1 338.947 185.717 Tm [<0055>]TJ
+1.02 0 0 1 342.621 185.717 Tm [<0046>]TJ
+1.03 0 0 1 347.143 185.717 Tm [<00590055>]TJ
+1.02 0 0 1 355.68 185.717 Tm [<0043>]TJ
+1.03 0 0 1 360.853 185.717 Tm [<004D>]TJ
+1.02 0 0 1 363.48 185.717 Tm [<00500044004C>]TJ
+1.03 0 0 1 377.777 185.717 Tm [<0008>]TJ
+1.02 0 0 1 379.85 185.717 Tm [<0054>-242<00430050>]TJ
+1.03 0 0 1 396.689 185.717 Tm [<00550055>]TJ
+1.02 0 0 1 404.036 185.717 Tm [<0050004E>-242<0042004F0045>]TJ
+1.03 0 0 1 437.917 185.717 Tm [<004A0055>]TJ
+1.02 0 0 1 444.32 185.717 Tm [<0054>-242<00430050>]TJ
+1.03 0 0 1 461.159 185.717 Tm [<00550055>]TJ
+1.02 0 0 1 468.507 185.717 Tm [<0050004E>]TJ
+1 0 0 1 113.386 173.762 Tm [<004300500053004500460053000F>-293<002A0055>-220<005800500053004C0054>-220<004D004A004C0046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 198.43 173.762 Tm [<0055004C004A004B0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 224.634 173.762 Tm [<004A004F>-220<005500490046>-220<0057004600530055004A00440042004D>-220<0045004A004E0046004F0054004A0050004F000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 149.851 Tm [<0059005300520056>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 149.851 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 149.851 Tm [<005700520053>]TJ
+/F111 7.97011 Tf 1 0 0 1 135.541 149.851 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 140.344 149.851 Tm [<004600480051005700480055>]TJ
+/F111 7.97011 Tf 1 0 0 1 169.158 149.851 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 173.96 149.851 Tm [<004500520057005700520050>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 149.851 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 149.851 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 149.851 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 149.851 Tm [<005700520053>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 149.851 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [<02650046>-220<0057004600530055004A00440042004D>-220<004B005600540055004A00EB004400420055004A0050004F>-220<00500047>-220<005500490046>-220<004200530046004200080054>-220<00440050004F00550046004F0055>-220<004A004F>-220<005500490046>-220<00550046005900550043004D00500044004C>-220<00090045004600EB004F00460045>-220<00420054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 411.747 137.896 Tm [<00590056004C005D0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 435.758 137.896 Tm [<000A000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 290.006 Tm [<0027005300460046004D005A>-200<005100500054004A0055004A0050004F00460045>-200<004E0042005500460053004A0042004D>]TJ
+1 0 0 1 491.852 281.039 Tm [<004A0054>-200<0056004F00470050004D004500460045>-200<0009004A004F0044004D00560045004A004F0048>-200<004A00550054>]TJ
+1 0 0 1 491.852 272.073 Tm [<0057004600530055004A00440042004D>-200<0045004A00540051004D004200440046004E0046004F0055000A>-200<00420055>]TJ
+1 0 0 1 491.852 263.107 Tm [<005500490046>-200<005500500051>-200<00500047>-200<004F00500053004E0042004D004D005A>]TJ
+1 0 0 1 491.852 254.14 Tm [<005100500054004A0055004A0050004F00460045>-200<004E0042005500460053004A0042004D000F>]TJ
+1 0 0 1 491.852 245.174 Tm [<00290046004F00440046>-200<004A00550054>-200<0057004600530055004A00440042004D>]TJ
+1 0 0 1 491.852 236.208 Tm [<004B005600540055004A00EB004400420055004A0050004F>-200<004E004A004800490055>-200<005400460046004E>]TJ
+1 0 0 1 491.852 227.241 Tm [<00540050004E00460058004900420055>-200<0056004F0051005300460045004A0044005500420043004D0046>]TJ
+0.98 0 0 1 491.852 218.275 Tm [<0056004F>]TJ
+0.97 0 0 1 499.64 218.275 Tm [<004D>]TJ
+0.98 0 0 1 501.565 218.275 Tm [<004600540054>]TJ
+/F105 7.97011 Tf 0.97 0 0 1 511.979 218.275 Tm [<001D0057>]TJ
+0.98 0 0 1 519.687 218.275 Tm [<005100500054>]TJ
+0.97 0 0 1 530.841 218.275 Tm [<001F>]TJ
+/F63 7.97011 Tf 0.97 0 0 1 536.449 218.275 Tm [<004A>]TJ
+0.98 0 0 1 538.39 218.275 Tm [<0054>-199<00540046>]TJ
+0.97 0 0 1 548.804 218.275 Tm [<0055>-201<0055>]TJ
+0.98 0 0 1 555.696 218.275 Tm [<0050>]TJ
+/F105 7.97011 Tf 0.97 0 0 1 560.682 218.275 Tm [<0055>]TJ
+0.98 0 0 1 563.45 218.275 Tm [<00500051>]TJ
+/F63 7.97011 Tf 0.97 0 0 1 571.471 218.275 Tm [<000D>]TJ
+1 0 0 1 491.852 209.308 Tm [<005500490050005600480049>-200<004A0055>-200<004A0054004F00080055>-200<0043005A>-200<0035>]TJ
+1 0 0 1 547.821 207.655 Tm [<0026>]TJ
+1 0 0 1 551.065 209.308 Tm [<003900080054>]TJ
+1 0 0 1 491.852 200.342 Tm [<005400550042004F0045004200530045000F>-266<00220054>-200<0042>-200<00530056004D0046>-200<00500047>]TJ
+1 0 0 1 491.852 191.376 Tm [<005500490056004E0043000D>-200<00550042004C0046>-200<005500490046>-200<005500500051>-200<00500047>-200<005500490046>]TJ
+1 0 0 1 491.852 182.409 Tm [<004B005600540055004A00EB00460045>-200<00550046005900550043004D00500044004C>-200<00420054>-200<005500490046>]TJ
+1 0 0 1 491.852 173.443 Tm [<0057004600530055004A00440042004D>-200<005300460047004600530046004F00440046000D>-200<0042004F0045>]TJ
+1 0 0 1 491.852 164.477 Tm [<00440050004F0054004A004500460053>-200<0055004900420055>-200<0047005300460046004D005A>]TJ
+1 0 0 1 491.852 155.51 Tm [<005100500054004A0055004A0050004F00460045>-200<004E0042005500460053004A0042004D>-200<004A0054>]TJ
+1 0 0 1 491.852 146.544 Tm [<004A004F00540046004F0054004A0055004A00570046>-200<00550050>-200<0057004600530055004A00440042004D>]TJ
+1 0 0 1 491.852 137.577 Tm [<004B005600540055004A00EB004400420055004A0050004F000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01F1>]TJ
+ET
+endstream
+endobj
+168 0 obj <<
+/Type /Page
+/Contents 169 0 R
+/Resources 167 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 124 0 R
+>> endobj
+170 0 obj <<
+/D [168 0 R /XYZ 113.386 651.969 null]
+>> endobj
+171 0 obj <<
+/D [168 0 R /XYZ 113.386 613.662 null]
+>> endobj
+172 0 obj <<
+/D [168 0 R /XYZ 113.386 577.976 null]
+>> endobj
+173 0 obj <<
+/D [168 0 R /XYZ 113.386 529.976 null]
+>> endobj
+174 0 obj <<
+/D [168 0 R /XYZ 113.386 494.11 null]
+>> endobj
+175 0 obj <<
+/D [168 0 R /XYZ 113.386 448.601 null]
+>> endobj
+176 0 obj <<
+/D [168 0 R /XYZ 113.386 362.604 null]
+>> endobj
+177 0 obj <<
+/D [168 0 R /XYZ 113.386 291.859 null]
+>> endobj
+178 0 obj <<
+/D [168 0 R /XYZ 113.386 245.363 null]
+>> endobj
+179 0 obj <<
+/D [168 0 R /XYZ 113.386 207.186 null]
+>> endobj
+180 0 obj <<
+/D [168 0 R /XYZ 113.386 160.172 null]
+>> endobj
+167 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+183 0 obj <<
+/Length 24463
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 53.566 640.013 Tm [<0045004400560048004F004C005100480056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<0047004C0050004800510056004C00520051>-602<00520055>-603<004A004F00580048>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 640.013 Tm [<0046005800550055004800510057>-602<003F004500440056>-1<0048004F004C005100480056004E004C0053>]TJ
+/F63 9.96264 Tf 1 0 0 1 358.185 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<02650046>-220<0043004200540046004D004A004F0046>-220<0045004A005400550042004F00440046>-220<004700500053>-220<005500490046>-220<0042005300460042000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 604.148 Tm [<0057005200530056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 604.148 Tm [<0047004C0050004800510056004C00520051>-602<00520055>-603<004A004F00580048>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 604.148 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 604.148 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 604.148 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 604.148 Tm [<0046005800550055004800510057>-602<003F005700520053>-1<0056004E004C0053>]TJ
+/F63 9.96264 Tf 1 0 0 1 334.174 604.148 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 592.193 Tm [<0265>]TJ
+1.02 0 0 1 123.801 592.193 Tm [<0046>-252<0045>]TJ
+1.03 0 0 1 136.182 592.193 Tm [<004A>]TJ
+1.02 0 0 1 138.912 592.193 Tm [<0054>]TJ
+1.03 0 0 1 142.987 592.193 Tm [<0055>]TJ
+1.02 0 0 1 146.66 592.193 Tm [<0042004F00440046>-252<00430046>]TJ
+1.03 0 0 1 177.82 592.193 Tm [<0055>]TJ
+1.02 0 0 1 181.494 592.193 Tm [<005800460046004F>]TJ
+1.03 0 0 1 205.683 592.193 Tm [<0055>]TJ
+1.02 0 0 1 209.357 592.193 Tm [<00490046>-252<0043004200540046>]TJ
+1.03 0 0 1 240.364 592.193 Tm [<004D004A>]TJ
+1.02 0 0 1 245.721 592.193 Tm [<004F0046>-252<0050>]TJ
+1.03 0 0 1 263.609 592.193 Tm [<0047>-249<0055>]TJ
+1.02 0 0 1 273.275 592.193 Tm [<00490046>-252<0042>]TJ
+1.03 0 0 1 290.513 592.193 Tm [<0053>]TJ
+1.02 0 0 1 294.361 592.193 Tm [<00460042>]TJ
+1.03 0 0 1 303.497 592.193 Tm [<0008>]TJ
+1.02 0 0 1 305.569 592.193 Tm [<0054>]TJ
+1.03 0 0 1 312.209 592.193 Tm [<00EB0053>]TJ
+1.02 0 0 1 321.814 592.193 Tm [<0054>]TJ
+1.03 0 0 1 325.889 592.193 Tm [<0055>]TJ
+1.02 0 0 1 332.127 592.193 Tm [<00430050>]TJ
+1.03 0 0 1 342.431 592.193 Tm [<0059>]TJ
+1.02 0 0 1 349.859 592.193 Tm [<0042004F0045>]TJ
+1.03 0 0 1 368.002 592.193 Tm [<0055>]TJ
+1.02 0 0 1 371.676 592.193 Tm [<00490046>-252<0042>]TJ
+1.03 0 0 1 388.914 592.193 Tm [<0053>]TJ
+1.02 0 0 1 392.762 592.193 Tm [<00460042>]TJ
+1.03 0 0 1 401.897 592.193 Tm [<0008>]TJ
+1.02 0 0 1 403.97 592.193 Tm [<0054>]TJ
+1.03 0 0 1 410.61 592.193 Tm [<0055>]TJ
+1.02 0 0 1 414.283 592.193 Tm [<00500051>]TJ
+1.03 0 0 1 424.72 592.193 Tm [<000F>]TJ
+1.02 0 0 1 431.274 592.193 Tm [<0036004F>]TJ
+1.03 0 0 1 443.743 592.193 Tm [<004D004A>]TJ
+1.02 0 0 1 449.099 592.193 Tm [<004C0046>]TJ
+1.03 0 0 1 461.257 592.193 Tm [<0035>]TJ
+1 0 0 1 465.414 590.125 Tm [<0026>]TJ
+1.03 0 0 1 469.698 592.193 Tm [<00390008>]TJ
+1.02 0 0 1 477.815 592.193 Tm [<0054>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 580.238 Tm [<003F0057005200530056004E004C0053>]TJ
+/F105 9.96264 Tf 1 0 0 1 151.804 580.238 Tm [<000D>-220<00550049004A0054>-220<0045004A005400550042004F00440046>-220<004A0054>-220<0042004D00580042005A0054>-220<005300460054005100460044005500460045000D>-220<004F0050>-220<004E00420055005500460053>-220<005500490046>-220<00490046004A004800490055>-220<00500047>-220<005500490046>-220<004300500059000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 556.327 Tm [<0053004400550056004E004C0053>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 556.327 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 556.327 Tm [<0047004C0050004800510056004C00520051>-602<00520055>-603<004A004F00580048>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 556.327 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 556.327 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 556.327 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 556.327 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 556.327 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 544.372 Tm [<02650046>-220<0045004A005400550042004F00440046>-220<004300460055005800460046004F>-220<0051004200530042004800530042005100490054>-220<004A004F>-220<005500490046>-220<00420053004600420054000D>-220<004A004F0044004D00560045004A004F0048>-220<004300460055005800460046004F>-220<005500580050>-220<004F00500053004E0042004D>]TJ
+/F111 7.97011 Tf 1 0 0 1 428.255 544.372 Tm [<003F005300520056004C0057004C00520051>]TJ
+/F105 9.96264 Tf 1 0 0 1 471.476 544.372 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 67.973 520.462 Tm [<005300440055004C00510047004800510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 520.462 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 520.462 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 520.462 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 520.462 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 520.462 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 520.462 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 520.462 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 508.506 Tm [<02650046>-220<0058004A004500550049>-220<00500047>-220<005500490046>-220<005100420053004200480053004200510049>-220<004A004F00450046004F0055>-220<004700500053>-220<005500490046>-220<0042005300460042000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 472.641 Tm [<00240050004F00550046004F0055>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 77.578 448.731 Tm [<0059004C0056004C0045004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 448.731 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 448.731 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 448.731 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 448.731 Tm [<00490044004F00560048>]TJ
+/F111 7.97011 Tf 1 0 0 1 169.158 448.731 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 173.96 448.731 Tm [<0056005700480053>]TJ
+/F7 9.96264 Tf 1 0 0 1 193.169 448.731 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 210.881 448.731 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 214.148 448.731 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 247.732 448.731 Tm [<0057005500580048>]TJ
+/F63 9.96264 Tf 1 0 0 1 266.942 448.731 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 436.775 Tm [<002A0047>-264<0055>]TJ
+1.02 0 0 1 126.529 436.775 Tm [<0049>]TJ
+1.03 0 0 1 132.067 436.775 Tm [<004A>]TJ
+1.02 0 0 1 134.796 436.775 Tm [<0054>-267<0042>]TJ
+1.03 0 0 1 146.202 436.775 Tm [<005500550053004A>]TJ
+1.02 0 0 1 160.127 436.775 Tm [<00430056>]TJ
+1.03 0 0 1 170.665 436.775 Tm [<0055>]TJ
+1.02 0 0 1 174.338 436.775 Tm [<0046>]TJ
+1.03 0 0 1 181.578 436.775 Tm [<004A>]TJ
+1.02 0 0 1 184.307 436.775 Tm [<0054>-267<00540046>]TJ
+1.03 0 0 1 199.696 436.775 Tm [<0055>-264<0055>]TJ
+1.02 0 0 1 209.761 436.775 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 217.61 436.775 Tm [<00570055>]TJ
+1.02 0 0 1 227.502 436.775 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 237.299 436.775 Tm [<000D>-277<0055>]TJ
+1.02 0 0 1 246.335 436.775 Tm [<00490046004F>]TJ
+1.03 0 0 1 264.783 436.775 Tm [<0055>]TJ
+1.02 0 0 1 268.457 436.775 Tm [<00490046>-267<0042>]TJ
+1.03 0 0 1 285.848 436.775 Tm [<0053>]TJ
+1.02 0 0 1 289.696 436.775 Tm [<00460042>]TJ
+1.03 0 0 1 301.548 436.775 Tm [<004A>]TJ
+1.02 0 0 1 304.278 436.775 Tm [<0054>]TJ
+1.03 0 0 1 311.07 436.775 Tm [<0057004A>]TJ
+1.02 0 0 1 318.653 436.775 Tm [<0054>]TJ
+1.03 0 0 1 322.728 436.775 Tm [<004A>]TJ
+1.02 0 0 1 325.458 436.775 Tm [<0043>]TJ
+1.03 0 0 1 330.63 436.775 Tm [<004D>]TJ
+1.02 0 0 1 333.257 436.775 Tm [<0046>-267<0050004F>]TJ
+1.03 0 0 1 354.015 436.775 Tm [<0055>]TJ
+1.02 0 0 1 357.689 436.775 Tm [<00490046>-267<0054>]TJ
+1.03 0 0 1 374.541 436.775 Tm [<004D004A>]TJ
+1.02 0 0 1 379.898 436.775 Tm [<00450046>-267<0046>]TJ
+1.03 0 0 1 396.954 436.775 Tm [<0057>]TJ
+1.02 0 0 1 401.807 436.775 Tm [<0046004F>]TJ
+1.03 0 0 1 414.717 436.775 Tm [<004A0047>-264<004A0055>]TJ
+1.02 0 0 1 432.711 436.775 Tm [<00440050004F>]TJ
+1.03 0 0 1 447.609 436.775 Tm [<0055>]TJ
+1.02 0 0 1 451.282 436.775 Tm [<0042>]TJ
+1.03 0 0 1 455.896 436.775 Tm [<004A>]TJ
+1.02 0 0 1 458.625 436.775 Tm [<004F0054>-267<004F0050>]TJ
+0.98 0 0 1 113.386 424.82 Tm [<004E0042>]TJ
+0.97 0 0 1 125.746 424.82 Tm [<0055>]TJ
+0.98 0 0 1 129.206 424.82 Tm [<0046>]TJ
+0.97 0 0 1 133.551 424.82 Tm [<0053004A>]TJ
+0.98 0 0 1 139.745 424.82 Tm [<0042>]TJ
+0.97 0 0 1 144.178 424.82 Tm [<004D000F>]TJ
+0.98 0 0 1 151.881 424.82 Tm [<0038>]TJ
+0.97 0 0 1 160.473 424.82 Tm [<004A0055>]TJ
+0.98 0 0 1 166.503 424.82 Tm [<0049>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 173.834 424.82 Tm [<0049>]TJ
+0.98 0 0 1 178.492 424.82 Tm [<0044>]TJ
+0.97 0 0 1 183.198 424.82 Tm [<004F>]TJ
+0.98 0 0 1 187.856 424.82 Tm [<00560048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 197.269 424.82 Tm [<000D>-211<004A0055>-208<004A>]TJ
+0.98 0 0 1 212.293 424.82 Tm [<0054>-205<00510042>]TJ
+0.97 0 0 1 227.747 424.82 Tm [<004A>]TJ
+0.98 0 0 1 230.318 424.82 Tm [<004F>]TJ
+0.97 0 0 1 235.766 424.82 Tm [<0055>]TJ
+0.98 0 0 1 239.226 424.82 Tm [<00460045>-205<0050004F>]TJ
+0.97 0 0 1 261.045 424.82 Tm [<004D005A>]TJ
+0.98 0 0 1 269.994 424.82 Tm [<0050004F>]TJ
+0.97 0 0 1 282.382 424.82 Tm [<0055>]TJ
+0.98 0 0 1 285.842 424.82 Tm [<00490046>-205<0054>]TJ
+0.97 0 0 1 301.432 424.82 Tm [<004D004A>]TJ
+0.98 0 0 1 306.477 424.82 Tm [<004500460054>-205<005800490046>]TJ
+0.97 0 0 1 338.138 424.82 Tm [<0053>]TJ
+0.98 0 0 1 341.762 424.82 Tm [<0046>]TJ
+0.97 0 0 1 348.117 424.82 Tm [<004A0055>-207<004A>]TJ
+0.98 0 0 1 358.727 424.82 Tm [<0054>]TJ
+0.97 0 0 1 364.652 424.82 Tm [<00EB004D004D>]TJ
+0.98 0 0 1 375.021 424.82 Tm [<00460045>]TJ
+0.97 0 0 1 384.453 424.82 Tm [<000F>-296<002A>]TJ
+0.98 0 0 1 392.813 424.82 Tm [<004F>]TJ
+0.97 0 0 1 400.271 424.82 Tm [<0055>]TJ
+0.98 0 0 1 403.731 424.82 Tm [<00490046>]TJ
+0.97 0 0 1 415.406 424.82 Tm [<004D>]TJ
+0.98 0 0 1 417.88 424.82 Tm [<0042>]TJ
+0.97 0 0 1 422.313 424.82 Tm [<00550055>]TJ
+0.98 0 0 1 429.232 424.82 Tm [<0046>]TJ
+0.97 0 0 1 433.577 424.82 Tm [<0053>]TJ
+0.98 0 0 1 439.21 424.82 Tm [<0044004200540046>]TJ
+0.97 0 0 1 455.837 424.82 Tm [<000D>]TJ
+0.98 0 0 1 460.251 424.82 Tm [<00560054>]TJ
+0.97 0 0 1 469.321 424.82 Tm [<004A>]TJ
+0.98 0 0 1 471.892 424.82 Tm [<004F0048>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.995 0 0 1 113.386 412.865 Tm [<0056005700480053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 134.698 412.865 Tm [<004E00460042004F0054>-221<005500490046>-222<0042005300460042>-222<0058004A004D004D>-222<00470050004D004D00500058>-222<005500490046>-221<00EB005300540055>-222<0054005500460051>-222<00580049004600530046>-222<005500490046>-222<00EB005300540055>]TJ
+/F111 7.97011 Tf 0.995 0 0 1 357.556 412.865 Tm [<003F005300520056004C0057004C00520051>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 402.76 412.865 Tm [<00440050004E004E0042004F0045>-221<004A0054>-222<004A00540054005600460045000F>]TJ
+1 0 0 1 113.386 400.91 Tm [<0026004E00510055005A>-220<004E0042005500460053004A0042004D>-220<0047005300460046004D005A>-220<005100500054004A0055004A0050004F00460045>-220<004E0042005A>-220<00430046>-220<00560054004600470056004D>-220<00550050>-220<00440050004F005500530050004D>-220<005500490046>-220<0042005300460042000D>-220<004700500053>-220<004A004F005400550042004F00440046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 377 Tm [<003F0056005700480053003E00520051002000560057004400550057000F005200490049002000560057005200530040003F>-1<005300520056004C0057004C00520051005E00500044005C00440055004800440060003E001300530057000F0013005300570040>-1<005E0060>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 353.089 Tm [<0265004A>]TJ
+0.985 0 0 1 125.829 353.089 Tm [<0054>-223<0058>]TJ
+0.975 0 0 1 138.629 353.089 Tm [<004A004D004D>]TJ
+0.985 0 0 1 148.379 353.089 Tm [<004E0042004C0046>]TJ
+0.975 0 0 1 172.258 353.089 Tm [<0055>]TJ
+0.985 0 0 1 175.735 353.089 Tm [<00490046>-223<0042>]TJ
+0.975 0 0 1 192.098 353.089 Tm [<0053>]TJ
+0.985 0 0 1 195.74 353.089 Tm [<00460042>-223<00420051005100460042>]TJ
+0.975 0 0 1 230.277 353.089 Tm [<0053>]TJ
+0.985 0 0 1 236.112 353.089 Tm [<0058>]TJ
+0.975 0 0 1 242.785 353.089 Tm [<004A0055>]TJ
+0.985 0 0 1 248.846 353.089 Tm [<0049>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 256.386 353.089 Tm [<0056>]TJ
+0.975 0 0 1 261.117 353.089 Tm [<0057>]TJ
+0.985 0 0 1 265.799 353.089 Tm [<0044>]TJ
+0.975 0 0 1 270.529 353.089 Tm [<00550057>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 279.894 353.089 Tm [<000D>]TJ
+0.985 0 0 1 284.466 353.089 Tm [<0051>]TJ
+0.975 0 0 1 289.588 353.089 Tm [<0053>]TJ
+0.985 0 0 1 293.231 353.089 Tm [<0050004300420043>]TJ
+0.975 0 0 1 312.632 353.089 Tm [<004D005A>-225<004A0055>]TJ
+0.985 0 0 1 327.859 353.089 Tm [<0054>]TJ
+0.975 0 0 1 333.987 353.089 Tm [<00EB0053>]TJ
+0.985 0 0 1 343.079 353.089 Tm [<0054>]TJ
+0.975 0 0 1 347.014 353.089 Tm [<0055>-225<0053>]TJ
+0.985 0 0 1 356.326 353.089 Tm [<00460042>]TJ
+0.975 0 0 1 365.148 353.089 Tm [<004D>]TJ
+0.985 0 0 1 369.827 353.089 Tm [<00440050004F>]TJ
+0.975 0 0 1 384.213 353.089 Tm [<0055>]TJ
+0.985 0 0 1 387.691 353.089 Tm [<0046004F>]TJ
+0.975 0 0 1 397.533 353.089 Tm [<0055000D>]TJ
+0.985 0 0 1 405.583 353.089 Tm [<0042004F0045>-223<0045>]TJ
+0.975 0 0 1 427.931 353.089 Tm [<004A>]TJ
+0.985 0 0 1 430.515 353.089 Tm [<005400420051005100460042>]TJ
+0.975 0 0 1 457.972 353.089 Tm [<0053>]TJ
+0.985 0 0 1 463.807 353.089 Tm [<0058>]TJ
+0.975 0 0 1 470.48 353.089 Tm [<004A0055>]TJ
+0.985 0 0 1 476.542 353.089 Tm [<0049>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 341.134 Tm [<0056005700520053>]TJ
+/F105 9.96264 Tf 1 0 0 1 132.595 341.134 Tm [<000D>-220<00580049004A00440049>-220<005100530050004300420043004D005A>-220<0042004D00540050>-220<00440050004F005500530050004D0054>-220<005500490046>-220<0045004A00540042005100510046004200530042004F00440046>-220<00500047>-220<005500490046>-220<004D004200540055>-220<004E0042005500460053004A0042004D>-220<004A004F>-220<005500490046>-220<0042005300460042000F>]TJ
+1.03 0 0 1 133.311 329.179 Tm [<0035>]TJ
+1.02 0 0 1 139.129 329.179 Tm [<00580050>]TJ
+1.03 0 0 1 153.38 329.179 Tm [<0053>]TJ
+1.02 0 0 1 157.228 329.179 Tm [<0046004E0042>]TJ
+1.03 0 0 1 174.615 329.179 Tm [<0053>]TJ
+1.02 0 0 1 178.463 329.179 Tm [<004C0054>]TJ
+1.03 0 0 1 187.609 329.179 Tm [<001B>-288<0055>]TJ
+1.02 0 0 1 196.753 329.179 Tm [<00490046>]TJ
+1.03 0 0 1 209.022 329.179 Tm [<00EB0053>]TJ
+1.02 0 0 1 218.627 329.179 Tm [<0054>]TJ
+1.03 0 0 1 222.702 329.179 Tm [<0055>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 228.585 329.179 Tm [<003F>]TJ
+1.02 0 0 1 233.531 329.179 Tm [<005300520056>]TJ
+1.03 0 0 1 248.226 329.179 Tm [<004C0057004C>]TJ
+1.02 0 0 1 263.065 329.179 Tm [<00520051>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 275.071 329.179 Tm [<004E00460042004F0054>]TJ
+1.03 0 0 1 304.412 329.179 Tm [<0055>]TJ
+1.02 0 0 1 308.086 329.179 Tm [<00490046>]TJ
+1.03 0 0 1 320.355 329.179 Tm [<00EB0053>]TJ
+1.02 0 0 1 329.959 329.179 Tm [<0054>]TJ
+1.03 0 0 1 334.034 329.179 Tm [<0055>]TJ
+1.02 0 0 1 339.917 329.179 Tm [<0050004400440056>]TJ
+1.03 0 0 1 358.605 329.179 Tm [<00530053>]TJ
+1.02 0 0 1 366.301 329.179 Tm [<0046004F00440046>-217<0050>]TJ
+1.03 0 0 1 392.451 329.179 Tm [<0047>-215<0055>]TJ
+1.02 0 0 1 401.761 329.179 Tm [<00490046>-217<00440050004E004E0042004F0045>]TJ
+1.03 0 0 1 457.547 329.179 Tm [<004A>]TJ
+1.02 0 0 1 460.277 329.179 Tm [<004F>]TJ
+1.03 0 0 1 468.156 329.179 Tm [<0055>]TJ
+1.02 0 0 1 471.829 329.179 Tm [<00490046>]TJ
+0.995 0 0 1 113.386 317.224 Tm [<005400500056005300440046000D>-222<004F00500055>-222<004F0046004400460054005400420053004A004D005A>-222<005500490046>-222<00EB005300540055>-222<00550050>-222<00430046>-222<0054004900500058004F>-222<0050004F>-223<00540044005300460046004F001C>-222<0055004900560054000D>-222<00550050>-222<005800500053004C>-223<005100530050005100460053004D005A000D>-222<005500490046>-222<0051005300460057004A005000560054>]TJ
+0.98 0 0 1 113.386 305.269 Tm [<0046>]TJ
+0.97 0 0 1 117.731 305.269 Tm [<0059>]TJ
+0.98 0 0 1 122.311 305.269 Tm [<0042004E0051>]TJ
+0.97 0 0 1 139.768 305.269 Tm [<004D>]TJ
+0.98 0 0 1 142.242 305.269 Tm [<0046>-178<0054004900500056>]TJ
+0.97 0 0 1 167.655 305.269 Tm [<004D>]TJ
+0.98 0 0 1 170.129 305.269 Tm [<0045>-178<00430046>-179<00510056>]TJ
+0.97 0 0 1 198.273 305.269 Tm [<0055>]TJ
+0.98 0 0 1 203.479 305.269 Tm [<0042>]TJ
+0.97 0 0 1 207.912 305.269 Tm [<0055>-180<0055>]TJ
+0.98 0 0 1 216.577 305.269 Tm [<00490046>]TJ
+0.97 0 0 1 227.989 305.269 Tm [<0057>]TJ
+0.98 0 0 1 232.56 305.269 Tm [<0046>]TJ
+0.97 0 0 1 236.905 305.269 Tm [<0053005A>]TJ
+0.98 0 0 1 246.74 305.269 Tm [<004300460048>]TJ
+0.97 0 0 1 260.604 305.269 Tm [<004A>]TJ
+0.98 0 0 1 263.174 305.269 Tm [<004F004F>]TJ
+0.97 0 0 1 274.07 305.269 Tm [<004A>]TJ
+0.98 0 0 1 276.641 305.269 Tm [<004F0048>-178<0050>]TJ
+0.97 0 0 1 293.315 305.269 Tm [<0047>]TJ
+0.98 0 0 1 298.289 305.269 Tm [<0042>-178<0054>]TJ
+0.97 0 0 1 308.383 305.269 Tm [<004D004A>]TJ
+0.98 0 0 1 313.427 305.269 Tm [<00450046>]TJ
+0.97 0 0 1 322.859 305.269 Tm [<000F>]TJ
+0.98 0 0 1 328 305.269 Tm [<0034004600440050004F0045>]TJ
+0.97 0 0 1 356.548 305.269 Tm [<000D>-190<004A>]TJ
+0.98 0 0 1 363.322 305.269 Tm [<004F>]TJ
+0.97 0 0 1 370.516 305.269 Tm [<0055>]TJ
+0.98 0 0 1 373.976 305.269 Tm [<0049>]TJ
+0.97 0 0 1 379.297 305.269 Tm [<004A>]TJ
+0.98 0 0 1 381.867 305.269 Tm [<0054>-178<0046>]TJ
+0.97 0 0 1 391.873 305.269 Tm [<0059>]TJ
+0.98 0 0 1 396.454 305.269 Tm [<0042004E0051>]TJ
+0.97 0 0 1 413.911 305.269 Tm [<004D>]TJ
+0.98 0 0 1 416.385 305.269 Tm [<0046>]TJ
+0.97 0 0 1 420.729 305.269 Tm [<000D>-190<004A0055>-180<004A>]TJ
+0.98 0 0 1 435.279 305.269 Tm [<0054>]TJ
+0.97 0 0 1 440.941 305.269 Tm [<004A>]TJ
+0.98 0 0 1 443.511 305.269 Tm [<004E00510050>]TJ
+0.97 0 0 1 461.466 305.269 Tm [<00530055>]TJ
+0.98 0 0 1 468.55 305.269 Tm [<0042004F>]TJ
+0.97 0 0 1 478.43 305.269 Tm [<0055>]TJ
+1.03 0 0 1 113.386 293.313 Tm [<0055>]TJ
+1.02 0 0 1 117.059 293.313 Tm [<00490042>]TJ
+1.03 0 0 1 127.211 293.313 Tm [<0055>-227<0055>]TJ
+1.02 0 0 1 136.888 293.313 Tm [<00490046>-229<004E0042>]TJ
+1.03 0 0 1 162.142 293.313 Tm [<0055>]TJ
+1.02 0 0 1 165.816 293.313 Tm [<0046>]TJ
+1.03 0 0 1 170.338 293.313 Tm [<0053004A>]TJ
+1.02 0 0 1 176.915 293.313 Tm [<0042>]TJ
+1.03 0 0 1 181.529 293.313 Tm [<004D>]TJ
+1.02 0 0 1 186.485 293.313 Tm [<00430046>]TJ
+1.03 0 0 1 198.508 293.313 Tm [<00470053>]TJ
+1.02 0 0 1 205.784 293.313 Tm [<00460046>]TJ
+1.03 0 0 1 214.828 293.313 Tm [<004D005A>]TJ
+1.02 0 0 1 224.525 293.313 Tm [<005100500054>]TJ
+1.03 0 0 1 239.036 293.313 Tm [<004A0055004A>]TJ
+1.02 0 0 1 248.169 293.313 Tm [<0050004F00460045>]TJ
+1.03 0 0 1 268.787 293.313 Tm [<000D>-230<004A000F>]TJ
+1.02 0 0 1 278.908 293.313 Tm [<0046>]TJ
+1.03 0 0 1 283.431 293.313 Tm [<000F>]TJ
+1.02 0 0 1 289.279 293.313 Tm [<0058>]TJ
+1.03 0 0 1 296.189 293.313 Tm [<004A0055>]TJ
+1.02 0 0 1 302.592 293.313 Tm [<0049>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 310.46 293.313 Tm [<003E0013>]TJ
+1.02 0 0 1 320.352 293.313 Tm [<0053>]TJ
+1.03 0 0 1 325.251 293.313 Tm [<0057000F0013>]TJ
+1.02 0 0 1 340.09 293.313 Tm [<0053>]TJ
+1.03 0 0 1 344.988 293.313 Tm [<00570040>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 354.881 293.313 Tm [<000D>]TJ
+1.02 0 0 1 359.759 293.313 Tm [<00540050>-229<00420054>]TJ
+1.03 0 0 1 382.312 293.313 Tm [<0055>]TJ
+1.02 0 0 1 385.986 293.313 Tm [<0050>-229<004E0042004C0046>]TJ
+1.03 0 0 1 418.233 293.313 Tm [<0055>]TJ
+1.02 0 0 1 421.907 293.313 Tm [<00490046>-229<00540056004300540046005200560046004F>]TJ
+1.03 0 0 1 478.216 293.313 Tm [<0055>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 281.358 Tm [<003F005300520056004C0057004C00520051>]TJ
+/F105 9.96264 Tf 1 0 0 1 158.798 281.358 Tm [<00550049004A004F004C>-220<00090020000A>-293<005500490046>-220<0042005300460042>-220<004A0054>-220<00540055004A004D004D>-220<0046004E00510055005A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 48.764 257.448 Tm [<0048005900480055005C005300520056004C0057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 257.448 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 257.448 Tm [<0046005200470048>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 257.448 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 257.448 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 257.448 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 257.448 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 257.448 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 245.493 Tm [<0024005000450046>-218<00550050>-218<00430046>-219<00420045004500460045>-218<004300460047005000530046>]TJ
+/F123 7.97011 Tf 1 0 0 1 213.408 245.493 Tm [<001F00500044005700480055004C0044004F0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 264.433 245.493 Tm [<0046004200440049>-218<0055004A004E0046>]TJ
+/F111 7.97011 Tf 1 0 0 1 305.924 245.493 Tm [<003F005300520056004C0057004C00520051005E>]TJ
+/F123 7.97011 Tf 1 0 0 1 353.947 245.493 Tm [<001F00440055004800440021>]TJ
+/F111 7.97011 Tf 1 0 0 1 382.761 245.493 Tm [<0060005E>]TJ
+/F123 7.97011 Tf 1 0 0 1 392.365 245.493 Tm [<001F00500044005700480055004C0044004F0021>]TJ
+/F111 7.97011 Tf 1 0 0 1 440.388 245.493 Tm [<0060>]TJ
+/F105 9.96264 Tf 1 0 0 1 447.366 245.493 Tm [<004A0054>-218<00440042004D004D00460045000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 245.493 Tm [<0022004D004D>-200<004E0042005500460053004A0042004D>-200<004A0054>-200<00420044005500560042004D004D005A>]TJ
+1 0 0 1 491.852 236.526 Tm [<00420045004500460045>-200<004A004F>-200<0057004600530055004A00440042004D>-200<004E005000450046>]TJ
+1 0 0 1 491.852 227.56 Tm [<0058004A00550049>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 519.023 227.56 Tm [<003D005100500054004A0055004A0050004F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 218.594 Tm [<00440050004E004E0042004F0045000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 233.538 Tm [<0265004A0054>-220<004E0042005500460053004A0042004D>-220<004A0054>-220<00420045004500460045>-220<004A004F>-220<0057004600530055004A00440042004D>-220<004E005000450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 29.555 209.627 Tm [<0048005900480055005C0049005500480048005300520056004C0057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 209.627 Tm [<0046005200470048>]TJ
+/F7 9.96264 Tf 1 0 0 1 140.344 209.627 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 158.055 209.627 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 161.323 209.627 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 194.907 209.627 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 209.627 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 197.672 Tm [<00340042004E0046>-216<00420054>-217<00430046>]TJ
+1.02 0 0 1 158.339 197.672 Tm [<0047>]TJ
+1.015 0 0 1 161.733 197.672 Tm [<0050>]TJ
+1.02 0 0 1 166.839 197.672 Tm [<0053>]TJ
+1.015 0 0 1 170.65 197.672 Tm [<0046>]TJ
+1.02 0 0 1 175.15 197.672 Tm [<000D>]TJ
+1.015 0 0 1 179.831 197.672 Tm [<0046>]TJ
+1.02 0 0 1 184.331 197.672 Tm [<0059>]TJ
+1.015 0 0 1 189.148 197.672 Tm [<004400460051>]TJ
+1.02 0 0 1 203.001 197.672 Tm [<0055>-215<004A0055>-216<004A>]TJ
+1.015 0 0 1 220.066 197.672 Tm [<0054>-216<0056005400460045>-217<005800490046004F>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 272.388 197.672 Tm [<003F>]TJ
+1.015 0 0 1 277.286 197.672 Tm [<005300520056>]TJ
+1.02 0 0 1 291.909 197.672 Tm [<004C0057004C>]TJ
+1.015 0 0 1 306.604 197.672 Tm [<00520051>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 318.545 197.672 Tm [<004A>]TJ
+1.015 0 0 1 321.248 197.672 Tm [<0054>-216<00440042>]TJ
+1.02 0 0 1 336.16 197.672 Tm [<004D004D>]TJ
+1.015 0 0 1 341.363 197.672 Tm [<00460045>-216<0058>]TJ
+1.02 0 0 1 360.199 197.672 Tm [<004A0055>]TJ
+1.015 0 0 1 366.54 197.672 Tm [<0049>]TJ
+1.02 0 0 1 374.243 197.672 Tm [<0055>]TJ
+1.015 0 0 1 377.881 197.672 Tm [<00490046>-216<00500051>]TJ
+1.02 0 0 1 400.468 197.672 Tm [<0055004A>]TJ
+1.015 0 0 1 406.809 197.672 Tm [<0050004F0042>]TJ
+1.02 0 0 1 422.149 197.672 Tm [<004D>]TJ
+1.015 0 0 1 426.942 197.672 Tm [<0042>]TJ
+1.02 0 0 1 431.533 197.672 Tm [<0053>]TJ
+1.015 0 0 1 435.344 197.672 Tm [<00480056004E0046004F>]TJ
+1.02 0 0 1 463.749 197.672 Tm [<0055>-215<0047>]TJ
+1.015 0 0 1 472.972 197.672 Tm [<0050>]TJ
+1.02 0 0 1 478.079 197.672 Tm [<0053>]TJ
+1 0 0 1 113.386 185.717 Tm [<0047005300460046>-220<005100500054004A0055004A0050004F000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EA01F2>]TJ
+ET
+endstream
+endobj
+182 0 obj <<
+/Type /Page
+/Contents 183 0 R
+/Resources 181 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 192 0 R
+>> endobj
+184 0 obj <<
+/D [182 0 R /XYZ 113.386 651.969 null]
+>> endobj
+185 0 obj <<
+/D [182 0 R /XYZ 113.386 615.973 null]
+>> endobj
+186 0 obj <<
+/D [182 0 R /XYZ 113.386 565.841 null]
+>> endobj
+187 0 obj <<
+/D [182 0 R /XYZ 113.386 529.976 null]
+>> endobj
+188 0 obj <<
+/D [182 0 R /XYZ 113.386 482.155 null]
+>> endobj
+189 0 obj <<
+/D [182 0 R /XYZ 113.386 460.566 null]
+>> endobj
+190 0 obj <<
+/D [182 0 R /XYZ 113.386 266.962 null]
+>> endobj
+191 0 obj <<
+/D [182 0 R /XYZ 113.386 221.483 null]
+>> endobj
+181 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+197 0 obj <<
+/Length 28144
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F63 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<00340055005A004D0046>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 616.103 Tm [<004500440046004E004A00550052005800510047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 616.103 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 616.103 Tm [<00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<0056004B004400470048>-602<00520055>-603<00460052004F00520055>-603<0048005B00530055004800560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 313.227 616.103 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 330.938 616.103 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 334.206 616.103 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 367.79 616.103 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 386.999 616.103 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 604.148 Tm [<02650046>-220<00440050004D00500053>-220<00500047>-220<005500490046>-220<004200530046004200080054>-220<004300420044004C0048005300500056004F0045000F>-293<002A0047>-220<004F0050004F0046>-220<004A0054>-220<0048004A00570046004F000D>-220<005500490046>-220<0042005300460042>-220<004A0054>-220<005500530042004F00540051004200530046004F0055000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 603.7 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 603.7 Tm [<00240050004D005000530054000D>-200<005400490042004500460054000D>-200<0042004F0045>]TJ
+1 0 0 1 506.756 594.733 Tm [<004A004E0042004800460054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 580.238 Tm [<0049005200550048004A00550052005800510047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 580.238 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 580.238 Tm [<00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B005300550048>-1<00560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 270.006 580.238 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 287.717 580.238 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 290.985 580.238 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 324.569 580.238 Tm [<0045004F00440046004E>]TJ
+/F63 9.96264 Tf 1 0 0 1 348.581 580.238 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 568.282 Tm [<02650046>-220<004200530046004200080054>-220<00470050005300460048005300500056004F0045>-220<00440050004D00500053000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 544.372 Tm [<004C00500044004A0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 544.372 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 544.372 Tm [<004C00500044004A0048>]TJ
+/F7 9.96264 Tf 1 0 0 1 145.146 544.372 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 162.857 544.372 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 166.125 544.372 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.709 544.372 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 218.918 544.372 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 113.386 532.417 Tm [<0022>]TJ
+0.98 0 0 1 119.333 532.417 Tm [<004F>]TJ
+0.97 0 0 1 126.437 532.417 Tm [<004A>]TJ
+0.98 0 0 1 129.007 532.417 Tm [<004E004200480046>]TJ
+0.97 0 0 1 151.918 532.417 Tm [<004A>]TJ
+0.98 0 0 1 154.489 532.417 Tm [<004F00540046>]TJ
+0.97 0 0 1 168.197 532.417 Tm [<00530055>]TJ
+0.98 0 0 1 175.28 532.417 Tm [<00460045>]TJ
+0.97 0 0 1 186.368 532.417 Tm [<004A>]TJ
+0.98 0 0 1 188.938 532.417 Tm [<004F>]TJ
+0.97 0 0 1 196.042 532.417 Tm [<0055>]TJ
+0.98 0 0 1 199.502 532.417 Tm [<00490046>-169<0042>]TJ
+0.97 0 0 1 215.256 532.417 Tm [<0053>]TJ
+0.98 0 0 1 218.88 532.417 Tm [<00460042>]TJ
+0.97 0 0 1 227.657 532.417 Tm [<0008>]TJ
+0.98 0 0 1 229.609 532.417 Tm [<0054>-169<004300420044004C0048>]TJ
+0.97 0 0 1 257.939 532.417 Tm [<0053>]TJ
+0.98 0 0 1 261.563 532.417 Tm [<00500056004F0045>]TJ
+0.97 0 0 1 282.183 532.417 Tm [<000D>]TJ
+0.98 0 0 1 286.314 532.417 Tm [<004200430050>]TJ
+0.97 0 0 1 300.647 532.417 Tm [<0057>]TJ
+0.98 0 0 1 305.218 532.417 Tm [<0046>]TJ
+0.97 0 0 1 311.219 532.417 Tm [<0055>]TJ
+0.98 0 0 1 314.678 532.417 Tm [<00490046>-169<004300420044004C0048>]TJ
+0.97 0 0 1 348.758 532.417 Tm [<0053>]TJ
+0.98 0 0 1 352.382 532.417 Tm [<00500056004F0045>-169<00440050>]TJ
+0.97 0 0 1 383.524 532.417 Tm [<004D>]TJ
+0.98 0 0 1 385.998 532.417 Tm [<0050>]TJ
+0.97 0 0 1 390.928 532.417 Tm [<0053000F>-284<0265>]TJ
+0.98 0 0 1 409.472 532.417 Tm [<0046>]TJ
+0.97 0 0 1 415.473 532.417 Tm [<004A>]TJ
+0.98 0 0 1 418.044 532.417 Tm [<004E004200480046>]TJ
+0.97 0 0 1 440.955 532.417 Tm [<004A>]TJ
+0.98 0 0 1 443.525 532.417 Tm [<0054>]TJ
+0.97 0 0 1 449.096 532.417 Tm [<004A>]TJ
+0.98 0 0 1 451.667 532.417 Tm [<004F00540046>]TJ
+0.97 0 0 1 465.375 532.417 Tm [<00530055>]TJ
+0.98 0 0 1 472.458 532.417 Tm [<00460045>]TJ
+0.995 0 0 1 113.386 520.462 Tm [<0042>]TJ
+0.99 0 0 1 117.886 520.462 Tm [<0055>-221<0055>]TJ
+0.995 0 0 1 127.131 520.462 Tm [<00490046>-220<0042>]TJ
+0.99 0 0 1 143.628 520.462 Tm [<0053>]TJ
+0.995 0 0 1 147.326 520.462 Tm [<00460042>]TJ
+0.99 0 0 1 156.238 520.462 Tm [<0008>]TJ
+0.995 0 0 1 158.23 520.462 Tm [<0054>-220<0056005100510046>]TJ
+0.99 0 0 1 184.382 520.462 Tm [<0053>-221<004D>]TJ
+0.995 0 0 1 192.789 520.462 Tm [<0046>]TJ
+0.99 0 0 1 197.2 520.462 Tm [<00470055>]TJ
+0.995 0 0 1 206.208 520.462 Tm [<00440050>]TJ
+0.99 0 0 1 215.209 520.462 Tm [<0053>]TJ
+0.995 0 0 1 218.907 520.462 Tm [<004F0046>]TJ
+0.99 0 0 1 228.85 520.462 Tm [<0053000D>]TJ
+0.995 0 0 1 237.15 520.462 Tm [<0042004F0045>-220<004900420054>]TJ
+0.99 0 0 1 270.589 520.462 Tm [<0055>]TJ
+0.995 0 0 1 274.12 520.462 Tm [<00490046>-220<0058>]TJ
+0.99 0 0 1 292.857 520.462 Tm [<004A>]TJ
+0.995 0 0 1 295.481 520.462 Tm [<0045>]TJ
+0.99 0 0 1 300.646 520.462 Tm [<0055>]TJ
+0.995 0 0 1 304.177 520.462 Tm [<0049>-220<0042004F0045>-220<00490046>]TJ
+0.99 0 0 1 338.955 520.462 Tm [<004A>]TJ
+0.995 0 0 1 341.578 520.462 Tm [<00480049>]TJ
+0.99 0 0 1 351.6 520.462 Tm [<0055>-221<004A0055>]TJ
+0.995 0 0 1 365.651 520.462 Tm [<005800420054>-220<004500460044>]TJ
+0.99 0 0 1 396.621 520.462 Tm [<004D>]TJ
+0.995 0 0 1 399.146 520.462 Tm [<0042>]TJ
+0.99 0 0 1 403.646 520.462 Tm [<0053>]TJ
+0.995 0 0 1 407.345 520.462 Tm [<00460045>-220<0058>]TJ
+0.99 0 0 1 425.844 520.462 Tm [<004A0055>]TJ
+0.995 0 0 1 431.999 520.462 Tm [<0049>]TJ
+0.99 0 0 1 437.401 520.462 Tm [<000F>]TJ
+0.995 0 0 1 442.737 520.462 Tm [<0034>]TJ
+0.99 0 0 1 447.614 520.462 Tm [<004A>]TJ
+0.995 0 0 1 450.237 520.462 Tm [<004F00440046>]TJ
+0.99 0 0 1 466.358 520.462 Tm [<0055>]TJ
+0.995 0 0 1 469.889 520.462 Tm [<0049>]TJ
+0.99 0 0 1 475.291 520.462 Tm [<004A>]TJ
+0.995 0 0 1 477.915 520.462 Tm [<0054>]TJ
+0.98 0 0 1 113.386 508.506 Tm [<00510042>]TJ
+0.97 0 0 1 122.915 508.506 Tm [<0053>]TJ
+0.98 0 0 1 126.539 508.506 Tm [<0042004E0046>]TJ
+0.97 0 0 1 143.244 508.506 Tm [<0055>]TJ
+0.98 0 0 1 146.704 508.506 Tm [<0046>]TJ
+0.97 0 0 1 151.048 508.506 Tm [<0053>-223<004A>]TJ
+0.98 0 0 1 159.405 508.506 Tm [<0054>]TJ
+0.97 0 0 1 165.482 508.506 Tm [<004A>]TJ
+0.98 0 0 1 168.052 508.506 Tm [<004F00490046>]TJ
+0.97 0 0 1 183.166 508.506 Tm [<0053004A0055>]TJ
+0.98 0 0 1 192.82 508.506 Tm [<00460045>]TJ
+0.97 0 0 1 202.251 508.506 Tm [<000D>-224<0055>]TJ
+0.98 0 0 1 210.247 508.506 Tm [<0050>-221<00440042004F00440046>]TJ
+0.97 0 0 1 239.434 508.506 Tm [<004D>-223<004A0055>]TJ
+0.98 0 0 1 252.261 508.506 Tm [<0048>]TJ
+0.97 0 0 1 256.811 508.506 Tm [<004A0057>]TJ
+0.98 0 0 1 263.953 508.506 Tm [<0046>-221<00420054>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 280.969 508.506 Tm [<001F004C>]TJ
+0.98 0 0 1 290.285 508.506 Tm [<00500044004A0048>]TJ
+0.97 0 0 1 309.11 508.506 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 316.758 508.506 Tm [<0042004F>]TJ
+0.97 0 0 1 326.638 508.506 Tm [<005A>]TJ
+0.98 0 0 1 333.265 508.506 Tm [<004F0042004E0046>]TJ
+0.97 0 0 1 357.58 508.506 Tm [<0055>]TJ
+0.98 0 0 1 361.039 508.506 Tm [<00490042>]TJ
+0.97 0 0 1 370.793 508.506 Tm [<0055>-223<004A>]TJ
+0.98 0 0 1 378.985 508.506 Tm [<0054>-221<004F0050>]TJ
+0.97 0 0 1 395.44 508.506 Tm [<0055>]TJ
+0.98 0 0 1 401.062 508.506 Tm [<0042>-221<004500460044>]TJ
+0.97 0 0 1 421.023 508.506 Tm [<004D>]TJ
+0.98 0 0 1 423.497 508.506 Tm [<0042>]TJ
+0.97 0 0 1 427.929 508.506 Tm [<0053>]TJ
+0.98 0 0 1 431.553 508.506 Tm [<00460045>]TJ
+0.97 0 0 1 443.146 508.506 Tm [<004A>]TJ
+0.98 0 0 1 445.717 508.506 Tm [<004E004200480046>]TJ
+0.97 0 0 1 466.972 508.506 Tm [<001C>]TJ
+0.98 0 0 1 471.511 508.506 Tm [<004F0050>]TJ
+1 0 0 1 113.386 496.551 Tm [<00460053005300500053>-220<004E004600540054004200480046>-220<0058004A004D004D>-220<0046004F005400560046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 472.641 Tm [<0049005200510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 472.641 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 472.641 Tm [<0049005200510057>-602<0046005200500050004400510047>]TJ
+/F7 9.96264 Tf 1 0 0 1 178.762 472.641 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 196.474 472.641 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 199.741 472.641 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 233.325 472.641 Tm [<005100520057004B004C0051004A>]TJ
+/F63 9.96264 Tf 1 0 0 1 266.942 472.641 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 460.686 Tm [<0265>]TJ
+1.02 0 0 1 123.801 460.686 Tm [<0046>]TJ
+1.03 0 0 1 131.022 460.686 Tm [<0047>]TJ
+1.02 0 0 1 134.449 460.686 Tm [<0050004F>]TJ
+1.03 0 0 1 145.251 460.686 Tm [<0055>]TJ
+1.02 0 0 1 151.623 460.686 Tm [<0056005400460045>]TJ
+1.03 0 0 1 173.579 460.686 Tm [<0055>]TJ
+1.02 0 0 1 177.252 460.686 Tm [<0050>]TJ
+1.03 0 0 1 185.083 460.686 Tm [<0055005A>]TJ
+1.02 0 0 1 193.497 460.686 Tm [<0051004600540046>]TJ
+1.03 0 0 1 211.921 460.686 Tm [<0055>]TJ
+1.02 0 0 1 218.293 460.686 Tm [<004E0042>]TJ
+1.03 0 0 1 231.158 460.686 Tm [<0055>]TJ
+1.02 0 0 1 234.831 460.686 Tm [<0046>]TJ
+1.03 0 0 1 239.353 460.686 Tm [<0053004A>]TJ
+1.02 0 0 1 245.931 460.686 Tm [<0042>]TJ
+1.03 0 0 1 250.544 460.686 Tm [<004D>-263<004A>]TJ
+1.02 0 0 1 258.599 460.686 Tm [<004F>]TJ
+1.03 0 0 1 266.968 460.686 Tm [<0055>]TJ
+1.02 0 0 1 270.642 460.686 Tm [<00490046>-265<0042>]TJ
+1.03 0 0 1 288.014 460.686 Tm [<0053>]TJ
+1.02 0 0 1 291.862 460.686 Tm [<00460042>]TJ
+1.03 0 0 1 300.998 460.686 Tm [<000F>-432<0265004A>]TJ
+1.02 0 0 1 321.1 460.686 Tm [<0054>]TJ
+1.03 0 0 1 327.873 460.686 Tm [<004A>]TJ
+1.02 0 0 1 330.603 460.686 Tm [<0054>-265<00420044>]TJ
+1.03 0 0 1 346.085 460.686 Tm [<0055>]TJ
+1.02 0 0 1 349.758 460.686 Tm [<00560042>]TJ
+1.03 0 0 1 359.737 460.686 Tm [<004D004D005A>-263<004B>]TJ
+1.02 0 0 1 374.934 460.686 Tm [<00560054>]TJ
+1.03 0 0 1 384.375 460.686 Tm [<0055>]TJ
+1.02 0 0 1 390.747 460.686 Tm [<0042>-265<0051>]TJ
+1.03 0 0 1 403.363 460.686 Tm [<004D>]TJ
+1.02 0 0 1 405.99 460.686 Tm [<00420044004600490050>]TJ
+1.03 0 0 1 429.891 460.686 Tm [<004D>]TJ
+1.02 0 0 1 432.518 460.686 Tm [<00450046>]TJ
+1.03 0 0 1 442.334 460.686 Tm [<0053>-263<0047>]TJ
+1.02 0 0 1 452.308 460.686 Tm [<0050>]TJ
+1.03 0 0 1 457.44 460.686 Tm [<0053>-263<0047>]TJ
+1.02 0 0 1 467.414 460.686 Tm [<0050004F>]TJ
+1.03 0 0 1 478.216 460.686 Tm [<0055>]TJ
+1 0 0 1 113.386 448.731 Tm [<00440050004E004E0042004F00450054000D>-220<0046000F0048000F>]TJ
+/F111 7.97011 Tf 1 0 0 1 179.392 448.731 Tm [<003F004C0057>]TJ
+/F105 9.96264 Tf 1 0 0 1 195.99 448.731 Tm [<00500053>]TJ
+/F111 7.97011 Tf 1 0 0 1 206.949 448.731 Tm [<003F00450049005600480055004C00480056>]TJ
+/F105 9.96264 Tf 1 0 0 1 250.17 448.731 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 424.82 Tm [<00490055004400500048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 424.82 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 424.82 Tm [<0044005700570055004C0045005800570048001000590044004F00580048>-603<00530044004C00550056>]TJ
+/F7 9.96264 Tf 1 0 0 1 221.983 424.82 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 239.694 424.82 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 242.962 424.82 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 276.546 424.82 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 295.755 424.82 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 412.865 Tm [<0265004A>]TJ
+0.985 0 0 1 125.829 412.865 Tm [<0054>-220<00540046>]TJ
+0.975 0 0 1 140.226 412.865 Tm [<0055>]TJ
+0.985 0 0 1 143.704 412.865 Tm [<0054>]TJ
+0.975 0 0 1 149.799 412.865 Tm [<0055>]TJ
+0.985 0 0 1 153.276 412.865 Tm [<00490046>-220<0042>]TJ
+0.975 0 0 1 169.607 412.865 Tm [<0053>]TJ
+0.985 0 0 1 173.249 412.865 Tm [<00460042>]TJ
+0.975 0 0 1 182.071 412.865 Tm [<0008>]TJ
+0.985 0 0 1 184.034 412.865 Tm [<0054>]TJ
+0.975 0 0 1 190.129 412.865 Tm [<00470053>]TJ
+0.985 0 0 1 197.016 412.865 Tm [<0042004E0046>]TJ
+0.975 0 0 1 213.806 412.865 Tm [<000D>-223<004A0047>-222<005A>]TJ
+0.985 0 0 1 230.829 412.865 Tm [<00500056>-220<00580042004F>]TJ
+0.975 0 0 1 259.73 412.865 Tm [<0055>]TJ
+0.985 0 0 1 265.367 412.865 Tm [<0042004F>]TJ
+0.975 0 0 1 275.298 412.865 Tm [<005A000F>-299<0265>]TJ
+0.985 0 0 1 294.937 412.865 Tm [<0046>]TJ
+0.975 0 0 1 301.464 412.865 Tm [<0057>]TJ
+0.985 0 0 1 306.059 412.865 Tm [<0042>]TJ
+0.975 0 0 1 310.514 412.865 Tm [<004D>]TJ
+0.985 0 0 1 313 412.865 Tm [<00560046>]TJ
+0.975 0 0 1 324.709 412.865 Tm [<004A0055>]TJ
+0.985 0 0 1 330.77 412.865 Tm [<00540046>]TJ
+0.975 0 0 1 339.072 412.865 Tm [<004D0047>-222<004A>]TJ
+0.985 0 0 1 349.547 412.865 Tm [<0054>-220<0042>-220<00540046>]TJ
+0.975 0 0 1 370.56 412.865 Tm [<00550055004A>]TJ
+0.985 0 0 1 380.099 412.865 Tm [<004F0048>-220<0050>]TJ
+0.975 0 0 1 397.263 412.865 Tm [<0047>]TJ
+0.985 0 0 1 402.668 412.865 Tm [<0042>]TJ
+0.975 0 0 1 407.123 412.865 Tm [<005500550053004A>]TJ
+0.985 0 0 1 420.304 412.865 Tm [<00430056>]TJ
+0.975 0 0 1 430.481 412.865 Tm [<0055>]TJ
+0.985 0 0 1 433.958 412.865 Tm [<00460054>]TJ
+0.975 0 0 1 442.26 412.865 Tm [<000D>]TJ
+0.985 0 0 1 446.806 412.865 Tm [<0046004200440049>-220<0050004F0046>]TJ
+1 0 0 1 113.386 400.91 Tm [<00430046004A004F0048>-220<004200440044004600540054004A0043004D0046>-220<004A004F>-220<005500490046>-220<004E0042004A004F>-220<004500460044004D0042005300420055004A0050004F>-220<00420054>]TJ
+/F111 7.97011 Tf 1 0 0 1 287.523 400.91 Tm [<004900550044005000480042>]TJ
+/F123 7.97011 Tf 1 0 0 1 316.337 400.91 Tm [<001F0044005700570055004C00450058005700480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 369.162 400.91 Tm [<000F>-293<002A000F0046000F>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 377 Tm [<000300030049005500440050004800030020000300B5005A004C00470057004B000300200003001400530057000F00030046>-1<0052004F005200550003002000030045004F0058004800B5>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 329.179 Tm [<00030003004900550044005000480042005A004C00470057004B000300200003001400530057>]TJ
+1 0 0 1 113.386 317.224 Tm [<0003000300490055004400500048004200460052004F005200550003002000030045004F00580048>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 293.313 Tm [<004200530046>-220<004600520056004A00570042004D0046004F0055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 58.369 269.403 Tm [<004900550044005000480042005A004C00470057004B>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 269.403 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 269.403 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 269.403 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 269.403 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 269.403 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 269.403 Tm [<001300530057>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.325 269.403 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 257.448 Tm [<0265>]TJ
+0.985 0 0 1 123.296 257.448 Tm [<0046>]TJ
+0.98 0 0 1 129.878 257.448 Tm [<00470053>]TJ
+0.985 0 0 1 136.8 257.448 Tm [<0042004E0046>]TJ
+0.98 0 0 1 153.59 257.448 Tm [<0008>]TJ
+0.985 0 0 1 155.562 257.448 Tm [<0054>-225<0058>]TJ
+0.98 0 0 1 168.386 257.448 Tm [<004A>]TJ
+0.985 0 0 1 170.983 257.448 Tm [<0045>]TJ
+0.98 0 0 1 176.095 257.448 Tm [<0055>]TJ
+0.985 0 0 1 179.591 257.448 Tm [<0049>]TJ
+0.98 0 0 1 184.939 257.448 Tm [<000F>-306<002A0047>]TJ
+0.985 0 0 1 198.963 257.448 Tm [<005100500054>]TJ
+0.98 0 0 1 212.976 257.448 Tm [<004A0055004A0057>]TJ
+0.985 0 0 1 226.283 257.448 Tm [<0046>]TJ
+0.98 0 0 1 230.65 257.448 Tm [<000D>-227<0055>]TJ
+0.985 0 0 1 238.758 257.448 Tm [<00490046>]TJ
+0.98 0 0 1 250.689 257.448 Tm [<00470053>]TJ
+0.985 0 0 1 257.611 257.448 Tm [<0042004E0046>]TJ
+0.98 0 0 1 276.616 257.448 Tm [<004A>]TJ
+0.985 0 0 1 279.213 257.448 Tm [<0054>-225<00510042>]TJ
+0.98 0 0 1 294.941 257.448 Tm [<004A>]TJ
+0.985 0 0 1 297.538 257.448 Tm [<004F>]TJ
+0.98 0 0 1 303.014 257.448 Tm [<0055>]TJ
+0.985 0 0 1 306.509 257.448 Tm [<00460045>-225<0042>]TJ
+0.98 0 0 1 322.659 257.448 Tm [<0053>]TJ
+0.985 0 0 1 326.32 257.448 Tm [<00500056004F0045>]TJ
+0.98 0 0 1 349.261 257.448 Tm [<0055>]TJ
+0.985 0 0 1 352.756 257.448 Tm [<00490046>-225<0042>]TJ
+0.98 0 0 1 369.142 257.448 Tm [<0053>]TJ
+0.985 0 0 1 372.803 257.448 Tm [<00460042>]TJ
+0.98 0 0 1 381.625 257.448 Tm [<000F>-306<002A0047>]TJ
+0.985 0 0 1 395.649 257.448 Tm [<004F004600480042>]TJ
+0.98 0 0 1 414.519 257.448 Tm [<0055004A0057>]TJ
+0.985 0 0 1 425.23 257.448 Tm [<0046>]TJ
+0.98 0 0 1 429.597 257.448 Tm [<000D>-227<004A0055>-227<004A>]TJ
+0.985 0 0 1 445.114 257.448 Tm [<0054>-225<00510042>]TJ
+0.98 0 0 1 460.842 257.448 Tm [<004A>]TJ
+0.985 0 0 1 463.439 257.448 Tm [<004F>]TJ
+0.98 0 0 1 468.915 257.448 Tm [<0055>]TJ
+0.985 0 0 1 472.41 257.448 Tm [<00460045>]TJ
+0.97 0 0 1 113.386 245.493 Tm [<004A>]TJ
+0.98 0 0 1 115.956 245.493 Tm [<004F0054>]TJ
+0.97 0 0 1 125.319 245.493 Tm [<004A>]TJ
+0.98 0 0 1 127.89 245.493 Tm [<00450046>]TJ
+0.97 0 0 1 139.263 245.493 Tm [<0055>]TJ
+0.98 0 0 1 142.722 245.493 Tm [<00490046>-198<0042>]TJ
+0.97 0 0 1 158.762 245.493 Tm [<0053>]TJ
+0.98 0 0 1 162.386 245.493 Tm [<00460042>]TJ
+0.97 0 0 1 171.163 245.493 Tm [<000D>]TJ
+0.98 0 0 1 175.522 245.493 Tm [<0058>]TJ
+0.97 0 0 1 182.161 245.493 Tm [<004A0055>]TJ
+0.98 0 0 1 188.191 245.493 Tm [<0049>]TJ
+0.97 0 0 1 195.453 245.493 Tm [<0055>]TJ
+0.98 0 0 1 198.913 245.493 Tm [<00490046>]TJ
+0.97 0 0 1 210.52 245.493 Tm [<0055>]TJ
+0.98 0 0 1 213.979 245.493 Tm [<00490046>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 225.586 245.493 Tm [<001F>]TJ
+0.98 0 0 1 230.245 245.493 Tm [<0047>]TJ
+0.97 0 0 1 234.951 245.493 Tm [<004C>]TJ
+0.98 0 0 1 239.609 245.493 Tm [<0050004800510056>]TJ
+0.97 0 0 1 258.434 245.493 Tm [<004C>]TJ
+0.98 0 0 1 263.092 245.493 Tm [<00520051>]TJ
+0.97 0 0 1 272.505 245.493 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 277.163 245.493 Tm [<0008>]TJ
+0.98 0 0 1 279.115 245.493 Tm [<0054>-198<0042004300540050>]TJ
+0.97 0 0 1 303.219 245.493 Tm [<004D>]TJ
+0.98 0 0 1 305.693 245.493 Tm [<0056>]TJ
+0.97 0 0 1 310.848 245.493 Tm [<0055>]TJ
+0.98 0 0 1 314.308 245.493 Tm [<0046>]TJ
+0.97 0 0 1 320.594 245.493 Tm [<0057>]TJ
+0.98 0 0 1 325.165 245.493 Tm [<0042>]TJ
+0.97 0 0 1 329.597 245.493 Tm [<004D>]TJ
+0.98 0 0 1 332.071 245.493 Tm [<00560046>-198<00420054>]TJ
+0.97 0 0 1 353.801 245.493 Tm [<004A0055>]TJ
+0.98 0 0 1 359.831 245.493 Tm [<0054>-198<0058>]TJ
+0.97 0 0 1 372.327 245.493 Tm [<004A>]TJ
+0.98 0 0 1 374.897 245.493 Tm [<0045>]TJ
+0.97 0 0 1 379.984 245.493 Tm [<0055>]TJ
+0.98 0 0 1 383.443 245.493 Tm [<0049>]TJ
+0.97 0 0 1 388.765 245.493 Tm [<000F>]TJ
+0.985 0 0 1 393.971 245.493 Tm [<0022>]TJ
+0.98 0 0 1 399.918 245.493 Tm [<004F>-198<0042>]TJ
+0.97 0 0 1 411.74 245.493 Tm [<0053>]TJ
+0.98 0 0 1 415.363 245.493 Tm [<00460042>-198<0058>]TJ
+0.97 0 0 1 432.721 245.493 Tm [<004A0055>]TJ
+0.98 0 0 1 438.751 245.493 Tm [<0049>-198<004F0050>]TJ
+0.97 0 0 1 458.333 245.493 Tm [<00470053>]TJ
+0.98 0 0 1 465.185 245.493 Tm [<0042004E0046>]TJ
+1 0 0 1 113.386 233.538 Tm [<0054004A004E0051004D005A>-220<004900420054>-220<0042>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 165.52 233.538 Tm [<004900550044005000480042005A004C00470057004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.537 233.538 Tm [<00500047>-220<01E900510055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 58.369 209.627 Tm [<00490055004400500048004200460052004F00520055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 209.627 Tm [<00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<0056004B004400470048>-602<00520055>-603<00460052004F00520055>-603<0048005B00530055004800560056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 313.227 209.627 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 330.938 209.627 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 334.206 209.627 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 367.79 209.627 Tm [<004400550048004400B70056>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 401.406 209.627 Tm [<004500440046004E004A00550052005800510047>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1 0 0 1 449.429 209.627 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 197.672 Tm [<02650046>-220<004700530042004E004600080054>-220<00440050004D00500053000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 197.672 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 197.672 Tm [<00240050004D005000530054000D>-200<005400490042004500460054000D>-200<0042004F0045>]TJ
+1 0 0 1 506.756 188.706 Tm [<004A004E0042004800460054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 53.566 173.762 Tm [<004900550044005000480042004600520055005100480055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 173.762 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 173.762 Tm [<0050004C005700480055>]TJ
+/F111 7.97011 Tf 1 0 0 1 145.146 173.762 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 149.948 173.762 Tm [<00550052005800510047>]TJ
+/F111 7.97011 Tf 1 0 0 1 173.96 173.762 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 178.762 173.762 Tm [<0045004800590048004F>]TJ
+/F7 9.96264 Tf 1 0 0 1 202.774 173.762 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 220.485 173.762 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 223.753 173.762 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.337 173.762 Tm [<0050004C005700480055>]TJ
+/F63 9.96264 Tf 1 0 0 1 281.348 173.762 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 161.807 Tm [<0265004A0054>-220<004A0054>-220<0042>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 147.886 161.807 Tm [<0050004C005700480055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 174.09 161.807 Tm [<004400500053004F00460053001B>]TJ
+ET
+1 0 0 1 207.026 161.807 cm
+q 4 w 0 0 m 0 4 l 8 4 l S Q
+1 0 0 1 -207.026 -161.807 cm
+BT
+/F105 9.96264 Tf 1 0 0 1 215.993 161.807 Tm [<000D>-220<00550049004A0054>-220<004A0054>-220<0042>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 254.01 161.807 Tm [<00550052005800510047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 280.213 161.807 Tm [<0050004F0046001B>]TJ
+ET
+1 0 0 1 301.663 161.807 cm
+q 4 w 1 j 0 0 m 0 4 l 8 4 l S Q
+1 0 0 1 -301.663 -161.807 cm
+BT
+/F105 9.96264 Tf 1 0 0 1 310.629 161.807 Tm [<000D>-220<0042004F0045>-220<00550049004A0054>-220<004A0054>-220<0042>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 366.111 161.807 Tm [<0045004800590048004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 392.314 161.807 Tm [<0050004F0046001B>]TJ
+ET
+1 0 0 1 413.764 161.807 cm
+q 4 w 2 j 0 0 m 0 4 l 8 4 l S Q
+1 0 0 1 -413.764 -161.807 cm
+BT
+/F105 9.96264 Tf 1 0 0 1 422.73 161.807 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 63.171 137.896 Tm [<004900550044005000480042004700440056004B>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 137.896 Tm [<0051005800500045004800550056>]TJ
+/F7 9.96264 Tf 1 0 0 1 154.751 137.896 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 172.462 137.896 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 175.73 137.896 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 209.314 137.896 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 137.896 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 125.941 Tm [<0265>]TJ
+0.985 0 0 1 123.296 125.941 Tm [<0046>]TJ
+0.98 0 0 1 129.835 125.941 Tm [<00470053>]TJ
+0.985 0 0 1 136.757 125.941 Tm [<0042004E0046>]TJ
+0.98 0 0 1 153.547 125.941 Tm [<0008>]TJ
+0.985 0 0 1 155.519 125.941 Tm [<0054>-221<0045004200540049>-221<00510042>]TJ
+0.98 0 0 1 192.228 125.941 Tm [<00550055>]TJ
+0.985 0 0 1 199.218 125.941 Tm [<0046>]TJ
+0.98 0 0 1 203.585 125.941 Tm [<0053>]TJ
+0.985 0 0 1 207.246 125.941 Tm [<004F>]TJ
+0.98 0 0 1 212.722 125.941 Tm [<000D>]TJ
+0.985 0 0 1 217.29 125.941 Tm [<004E00460042004F>]TJ
+0.98 0 0 1 239.556 125.941 Tm [<004A>]TJ
+0.985 0 0 1 242.154 125.941 Tm [<004F0048>]TJ
+0.98 0 0 1 254.374 125.941 Tm [<0055>]TJ
+0.985 0 0 1 257.87 125.941 Tm [<00490046>]TJ
+0.98 0 0 1 269.757 125.941 Tm [<00470053>]TJ
+0.985 0 0 1 276.679 125.941 Tm [<0042004E0046>]TJ
+0.98 0 0 1 295.642 125.941 Tm [<004A>]TJ
+0.985 0 0 1 298.239 125.941 Tm [<0054>-221<0050004F>]TJ
+0.98 0 0 1 316.95 125.941 Tm [<00090057004A>]TJ
+0.985 0 0 1 327.367 125.941 Tm [<0054>]TJ
+0.98 0 0 1 331.302 125.941 Tm [<004A>]TJ
+0.985 0 0 1 333.899 125.941 Tm [<0043>]TJ
+0.98 0 0 1 338.894 125.941 Tm [<004D>]TJ
+0.985 0 0 1 341.394 125.941 Tm [<0046>]TJ
+0.98 0 0 1 345.76 125.941 Tm [<000A>-222<0047>]TJ
+0.985 0 0 1 354.396 125.941 Tm [<0050>]TJ
+0.98 0 0 1 359.352 125.941 Tm [<0053>]TJ
+/F63 9.96264 Tf 0.985 0 0 1 365.185 125.941 Tm [<004F>]TJ
+0.98 0 0 1 370.19 125.941 Tm [<01EA>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 377.507 125.941 Tm [<00510050>]TJ
+0.98 0 0 1 387.586 125.941 Tm [<004A>]TJ
+0.985 0 0 1 390.183 125.941 Tm [<004F>]TJ
+0.98 0 0 1 395.658 125.941 Tm [<0055>]TJ
+0.985 0 0 1 399.154 125.941 Tm [<0054>]TJ
+0.98 0 0 1 403.089 125.941 Tm [<000D>-222<0055>]TJ
+0.985 0 0 1 411.152 125.941 Tm [<00490046004F>-221<0050>]TJ
+0.98 0 0 1 433.471 125.941 Tm [<00EA>-222<0009004A>]TJ
+0.985 0 0 1 447.603 125.941 Tm [<004F>]TJ
+0.98 0 0 1 453.079 125.941 Tm [<0057004A>]TJ
+0.985 0 0 1 460.294 125.941 Tm [<0054>]TJ
+0.98 0 0 1 464.229 125.941 Tm [<004A>]TJ
+0.985 0 0 1 466.826 125.941 Tm [<0043>]TJ
+0.98 0 0 1 471.821 125.941 Tm [<004D>]TJ
+0.985 0 0 1 474.32 125.941 Tm [<0046>]TJ
+0.98 0 0 1 478.687 125.941 Tm [<000A>]TJ
+0.97 0 0 1 113.386 113.986 Tm [<0047>]TJ
+0.98 0 0 1 116.614 113.986 Tm [<0050>]TJ
+0.97 0 0 1 121.544 113.986 Tm [<0053>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 127.378 113.986 Tm [<004F>]TJ
+0.97 0 0 1 132.357 113.986 Tm [<01EB>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 139.66 113.986 Tm [<00510050>]TJ
+0.97 0 0 1 149.687 113.986 Tm [<004A>]TJ
+0.98 0 0 1 152.258 113.986 Tm [<004F>]TJ
+0.97 0 0 1 157.706 113.986 Tm [<0055>]TJ
+0.98 0 0 1 161.166 113.986 Tm [<0054>]TJ
+0.97 0 0 1 165.081 113.986 Tm [<000D>-229<0055>]TJ
+0.98 0 0 1 173.123 113.986 Tm [<00490046004F>-226<0050004F>]TJ
+0.97 0 0 1 203.035 113.986 Tm [<0047>]TJ
+0.98 0 0 1 206.263 113.986 Tm [<0050>]TJ
+0.97 0 0 1 211.193 113.986 Tm [<0053>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 217.028 113.986 Tm [<004F>]TJ
+0.97 0 0 1 222.007 113.986 Tm [<01EC>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 229.31 113.986 Tm [<00510050>]TJ
+0.97 0 0 1 239.337 113.986 Tm [<004A>]TJ
+0.98 0 0 1 241.907 113.986 Tm [<004F>]TJ
+0.97 0 0 1 247.355 113.986 Tm [<0055>]TJ
+0.98 0 0 1 250.815 113.986 Tm [<0054>]TJ
+0.97 0 0 1 254.73 113.986 Tm [<000D>]TJ
+0.98 0 0 1 259.313 113.986 Tm [<0046>]TJ
+0.97 0 0 1 263.657 113.986 Tm [<0055>]TJ
+0.98 0 0 1 267.117 113.986 Tm [<0044>]TJ
+0.97 0 0 1 271.051 113.986 Tm [<000F000D>]TJ
+0.98 0 0 1 278.001 113.986 Tm [<005800490046>]TJ
+0.97 0 0 1 294.306 113.986 Tm [<0053>]TJ
+0.98 0 0 1 297.93 113.986 Tm [<0046>]TJ
+0.97 0 0 1 304.485 113.986 Tm [<0055>]TJ
+0.98 0 0 1 307.945 113.986 Tm [<00490046>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 319.821 113.986 Tm [<004F>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 324.8 113.986 Tm [<0008>]TJ
+0.98 0 0 1 326.752 113.986 Tm [<0054>-226<0042>]TJ
+0.97 0 0 1 337.31 113.986 Tm [<0053>]TJ
+0.98 0 0 1 340.934 113.986 Tm [<0046>]TJ
+0.97 0 0 1 347.489 113.986 Tm [<0055>]TJ
+0.98 0 0 1 350.948 113.986 Tm [<00490046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 362.824 113.986 Tm [<00510058005000450048>]TJ
+0.97 0 0 1 386.356 113.986 Tm [<0055>]TJ
+0.98 0 0 1 391.014 113.986 Tm [<0056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 395.72 113.986 Tm [<000F>-308<0265004A>]TJ
+0.98 0 0 1 413.444 113.986 Tm [<0054>]TJ
+0.97 0 0 1 419.57 113.986 Tm [<004A>]TJ
+0.98 0 0 1 422.14 113.986 Tm [<0054>-226<0044>]TJ
+0.97 0 0 1 432.2 113.986 Tm [<005A>]TJ
+0.98 0 0 1 436.665 113.986 Tm [<0044>]TJ
+0.97 0 0 1 440.6 113.986 Tm [<004D004A>]TJ
+0.98 0 0 1 445.644 113.986 Tm [<0044>]TJ
+0.97 0 0 1 449.579 113.986 Tm [<000D>]TJ
+0.98 0 0 1 454.161 113.986 Tm [<00540050>]TJ
+0.97 0 0 1 465.217 113.986 Tm [<0055>]TJ
+0.98 0 0 1 468.677 113.986 Tm [<00490042>]TJ
+0.97 0 0 1 478.43 113.986 Tm [<0055>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01E9>]TJ
+ET
+endstream
+endobj
+196 0 obj <<
+/Type /Page
+/Contents 197 0 R
+/Resources 195 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 192 0 R
+/Annots [ 193 0 R 200 0 R 194 0 R 207 0 R ]
+>> endobj
+193 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 602.584 573.358 609.279]
+/A << /S /GoTo /D (ptx@section_link:18) >>
+>> endobj
+200 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 592.78 527.845 599.699]
+/A << /S /GoTo /D (ptx@section_link:18) >>
+>> endobj
+194 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 196.556 573.358 203.251]
+/A << /S /GoTo /D (ptx@section_link:18) >>
+>> endobj
+207 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 186.753 527.845 193.671]
+/A << /S /GoTo /D (ptx@section_link:18) >>
+>> endobj
+198 0 obj <<
+/D [196 0 R /XYZ 113.386 651.969 null]
+>> endobj
+199 0 obj <<
+/D [196 0 R /XYZ 113.386 625.129 null]
+>> endobj
+201 0 obj <<
+/D [196 0 R /XYZ 113.386 589.752 null]
+>> endobj
+202 0 obj <<
+/D [196 0 R /XYZ 113.386 553.886 null]
+>> endobj
+203 0 obj <<
+/D [196 0 R /XYZ 113.386 482.155 null]
+>> endobj
+204 0 obj <<
+/D [196 0 R /XYZ 113.386 434.335 null]
+>> endobj
+205 0 obj <<
+/D [196 0 R /XYZ 113.386 279.087 null]
+>> endobj
+206 0 obj <<
+/D [196 0 R /XYZ 113.386 219.142 null]
+>> endobj
+208 0 obj <<
+/D [196 0 R /XYZ 113.386 183.724 null]
+>> endobj
+209 0 obj <<
+/D [196 0 R /XYZ 113.386 148.367 null]
+>> endobj
+195 0 obj <<
+/Font << /F63 7 0 R /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+212 0 obj <<
+/Length 18716
+>>
+stream
+BT
+/F105 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [<004A0055>-223<005400550042005300550054>-224<004200480042004A004F>-223<005800490046004F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 195.992 640.013 Tm [<0051005800500045004800550056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 231.836 640.013 Tm [<004200530046>-223<004600590049004200560054005500460045000F>-304<002700500053>-224<004A004F005400550042004F00440046>-224<0042>-223<00570042004D00560046>-224<00500047>]TJ
+/F111 7.97011 Tf 1 0 0 1 387.642 640.013 Tm [<00160003001800030015>]TJ
+/F105 9.96264 Tf 1 0 0 1 413.882 640.013 Tm [<004E0042004C00460054>-223<005500490046>-224<004700530042004E0046>]TJ
+1 0 0 1 113.386 628.058 Tm [<0057004A0054004A0043004D0046>-220<004700500053>-220<01EC00510055000D>-220<005500490046004F>-220<004A004F0057004A0054004A0043004D0046>-220<004700500053>-220<01EE00510055000D>-220<005500490046004F>-220<0057004A0054004A0043004D0046>-220<004700500053>-220<01EB00510055000D>-220<005500490046004F>-220<004A004F0057004A0054004A0043004D0046>-220<004700500053>-220<01EC00510055000D>-220<005500490046004F000F000F000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F90 11.95517 Tf 1 0 0 1 113.386 568.282 Tm [<002F00F1010600F900F700F1010400F900FF00FE>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1 0 0 1 113.386 544.372 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1 0 0 1 147.839 544.372 Tm [<004A0054>-217<004E004200450046>-217<004700500053>-217<00470056004D004D00540044005300460046004F>-217<004E005000450046>-218<0042004F0045>-217<004F00420057004A004800420055004A0050004F>-217<004A0054>-217<004F0050>-217<004600590044004600510055004A0050004F000F>-293<026500560054000D>-218<004300500050004C004E00420053004C0054>-217<00090042004F0045>]TJ
+1.02 0 0 1 113.386 532.417 Tm [<0042004F004400490050>]TJ
+1.03 0 0 1 138.435 532.417 Tm [<0053>]TJ
+1.02 0 0 1 142.283 532.417 Tm [<0054>]TJ
+1.03 0 0 1 148.737 532.417 Tm [<004A>]TJ
+1.02 0 0 1 151.466 532.417 Tm [<004F>]TJ
+1.03 0 0 1 159.515 532.417 Tm [<0055>]TJ
+1.02 0 0 1 163.189 532.417 Tm [<00490046>-234<004F0046>]TJ
+1.03 0 0 1 185.82 532.417 Tm [<00590055>]TJ
+1.02 0 0 1 196.736 532.417 Tm [<005400560043005400460044>]TJ
+1.03 0 0 1 224.041 532.417 Tm [<0055004A>]TJ
+1.02 0 0 1 230.445 532.417 Tm [<0050004F>]TJ
+1.03 0 0 1 241.247 532.417 Tm [<000A>]TJ
+1.02 0 0 1 246.991 532.417 Tm [<00580050>]TJ
+1.03 0 0 1 259.033 532.417 Tm [<0053>]TJ
+1.02 0 0 1 262.881 532.417 Tm [<004C>-234<0051>]TJ
+1.03 0 0 1 275.635 532.417 Tm [<0053>]TJ
+1.02 0 0 1 279.483 532.417 Tm [<005000510046>]TJ
+1.03 0 0 1 294.441 532.417 Tm [<0053004D005A>-231<004A>]TJ
+1.02 0 0 1 310.766 532.417 Tm [<004F>]TJ
+1.03 0 0 1 318.815 532.417 Tm [<0055>]TJ
+1.02 0 0 1 322.488 532.417 Tm [<0049>]TJ
+1.03 0 0 1 328.026 532.417 Tm [<004A>]TJ
+1.02 0 0 1 330.756 532.417 Tm [<0054>-234<004E005000450046>-234<0050004F>]TJ
+1.03 0 0 1 373.59 532.417 Tm [<004D005A001C>]TJ
+1.02 0 0 1 385.944 532.417 Tm [<005800490046004F>-234<004F0050>]TJ
+1.03 0 0 1 421.765 532.417 Tm [<0055>-231<004A>]TJ
+1.02 0 0 1 430.547 532.417 Tm [<004F>]TJ
+1.03 0 0 1 438.596 532.417 Tm [<0047>]TJ
+1.02 0 0 1 442.024 532.417 Tm [<0056>]TJ
+1.03 0 0 1 447.389 532.417 Tm [<004D004D>]TJ
+1.02 0 0 1 452.643 532.417 Tm [<00540044>]TJ
+1.03 0 0 1 460.813 532.417 Tm [<0053>]TJ
+1.02 0 0 1 464.661 532.417 Tm [<00460046004F>]TJ
+1.03 0 0 1 479.376 532.417 Tm [<000D>]TJ
+1.02 0 0 1 113.386 520.462 Tm [<00560054>]TJ
+1.03 0 0 1 122.826 520.462 Tm [<004A>]TJ
+1.02 0 0 1 125.556 520.462 Tm [<004F0048>-249<0042>]TJ
+1.03 0 0 1 145.641 520.462 Tm [<004D004A>]TJ
+1.02 0 0 1 150.998 520.462 Tm [<004F004C>]TJ
+1.03 0 0 1 164.272 520.462 Tm [<004D>]TJ
+1.02 0 0 1 166.899 520.462 Tm [<0046004200450054>]TJ
+1.03 0 0 1 187.937 520.462 Tm [<0055>]TJ
+1.02 0 0 1 191.61 520.462 Tm [<0050>]TJ
+1.03 0 0 1 199.275 520.462 Tm [<0055>]TJ
+1.02 0 0 1 202.949 520.462 Tm [<00490046>-249<0051004200480046>-249<005800490046>]TJ
+1.03 0 0 1 254.221 520.462 Tm [<0053>]TJ
+1.02 0 0 1 258.069 520.462 Tm [<0046>]TJ
+1.03 0 0 1 265.124 520.462 Tm [<0055>]TJ
+1.02 0 0 1 268.798 520.462 Tm [<00490046>]TJ
+1.03 0 0 1 281.391 520.462 Tm [<0055>]TJ
+1.02 0 0 1 285.065 520.462 Tm [<0042>]TJ
+1.03 0 0 1 289.679 520.462 Tm [<0053>]TJ
+1.02 0 0 1 293.527 520.462 Tm [<00480046>]TJ
+1.03 0 0 1 302.784 520.462 Tm [<0055>]TJ
+1.02 0 0 1 308.991 520.462 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 333.349 520.462 Tm [<0053>]TJ
+1.02 0 0 1 337.197 520.462 Tm [<0054>]TJ
+1.03 0 0 1 341.272 520.462 Tm [<000D>]TJ
+1.02 0 0 1 346.404 520.462 Tm [<00430056>]TJ
+1.03 0 0 1 356.942 520.462 Tm [<0055>]TJ
+1.02 0 0 1 363.149 520.462 Tm [<004F0050>]TJ
+1.03 0 0 1 373.951 520.462 Tm [<0055>-246<0055>]TJ
+1.02 0 0 1 383.831 520.462 Tm [<0050>]TJ
+1.03 0 0 1 391.496 520.462 Tm [<0055>]TJ
+1.02 0 0 1 395.17 520.462 Tm [<00490046>-249<0054>]TJ
+1.03 0 0 1 411.838 520.462 Tm [<0055>]TJ
+1.02 0 0 1 415.512 520.462 Tm [<00460051>]TJ
+1.03 0 0 1 427.872 520.462 Tm [<004A>]TJ
+1.02 0 0 1 430.601 520.462 Tm [<004F>-249<00580049>]TJ
+1.03 0 0 1 451.253 520.462 Tm [<004A>]TJ
+1.02 0 0 1 453.982 520.462 Tm [<00440049>]TJ
+1.03 0 0 1 466.149 520.462 Tm [<004A0055>-246<004A>]TJ
+1.02 0 0 1 477.815 520.462 Tm [<0054>]TJ
+0.98 0 0 1 113.386 508.506 Tm [<0046004E004300460045004500460045>]TJ
+0.97 0 0 1 154.578 508.506 Tm [<000F>-308<0035>]TJ
+0.98 0 0 1 165.407 508.506 Tm [<0056>]TJ
+0.97 0 0 1 170.562 508.506 Tm [<0053>]TJ
+0.98 0 0 1 174.186 508.506 Tm [<004F>]TJ
+0.97 0 0 1 179.634 508.506 Tm [<004A>]TJ
+0.98 0 0 1 182.204 508.506 Tm [<004F0048>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 194.414 508.506 Tm [<00440058>]TJ
+0.97 0 0 1 203.827 508.506 Tm [<0057>]TJ
+0.98 0 0 1 208.485 508.506 Tm [<0052>]TJ
+0.97 0 0 1 213.191 508.506 Tm [<0049>]TJ
+0.98 0 0 1 217.849 508.506 Tm [<0058>]TJ
+0.97 0 0 1 222.556 508.506 Tm [<004F004F>]TJ
+0.98 0 0 1 231.872 508.506 Tm [<00560046>]TJ
+0.97 0 0 1 241.285 508.506 Tm [<0055>]TJ
+0.98 0 0 1 245.943 508.506 Tm [<004800480051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 262.273 508.506 Tm [<0055>]TJ
+0.98 0 0 1 265.733 508.506 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 272.875 508.506 Tm [<00570055>]TJ
+0.98 0 0 1 282.192 508.506 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 293.816 508.506 Tm [<004A>]TJ
+0.98 0 0 1 296.387 508.506 Tm [<004F>]TJ
+0.97 0 0 1 304.046 508.506 Tm [<0055>]TJ
+0.98 0 0 1 307.506 508.506 Tm [<00490046>]TJ
+/F117 7.97011 Tf 0.97 0 0 1 319.384 508.506 Tm [<004D>]TJ
+0.98 0 0 1 324.042 508.506 Tm [<00520045>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 335.666 508.506 Tm [<00510042>]TJ
+0.97 0 0 1 345.195 508.506 Tm [<0053>]TJ
+0.98 0 0 1 348.819 508.506 Tm [<0042004E0046>]TJ
+0.97 0 0 1 365.524 508.506 Tm [<0055>]TJ
+0.98 0 0 1 368.984 508.506 Tm [<0046>]TJ
+0.97 0 0 1 373.329 508.506 Tm [<0053>]TJ
+0.98 0 0 1 376.953 508.506 Tm [<0054>-226<004E0042004C00460054>]TJ
+0.97 0 0 1 410.783 508.506 Tm [<0055>]TJ
+0.98 0 0 1 414.243 508.506 Tm [<00490046>]TJ
+0.97 0 0 1 426.121 508.506 Tm [<0053>]TJ
+0.98 0 0 1 429.745 508.506 Tm [<0046004200450046>]TJ
+0.97 0 0 1 447.953 508.506 Tm [<0053>]TJ
+0.98 0 0 1 453.789 508.506 Tm [<00480050>]TJ
+0.97 0 0 1 465.481 508.506 Tm [<004A>]TJ
+0.98 0 0 1 468.052 508.506 Tm [<004F>]TJ
+0.97 0 0 1 473.5 508.506 Tm [<0055>]TJ
+0.98 0 0 1 476.959 508.506 Tm [<0050>]TJ
+1 0 0 1 113.386 496.551 Tm [<00470056004D004D00540044005300460046004F>-220<005800490046004F>-220<0044004D004A0044004C004A004F0048>-220<0042>-220<004D004A004F004C>-220<0042004F0045>-220<0055004900560054>-220<004F00420057004A004800420055004A0050004F>-220<0049004A00550054>-220<004A00550054>-220<005500420053004800460055000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 460.686 Tm [<00240053004600420055004A004F0048>-200<004300500050004C004E00420053004C0054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 113.386 448.731 Tm [<0022>-219<0051>]TJ
+1.01 0 0 1 126.875 448.731 Tm [<0053>]TJ
+1.005 0 0 1 130.648 448.731 Tm [<004600540046004F>]TJ
+1.01 0 0 1 149.161 448.731 Tm [<0055>]TJ
+1.005 0 0 1 152.763 448.731 Tm [<0042>]TJ
+1.01 0 0 1 157.309 448.731 Tm [<0055004A>]TJ
+1.005 0 0 1 163.588 448.731 Tm [<0050004F>-219<00440042004F>-219<00430046>-219<0054>]TJ
+1.01 0 0 1 208.55 448.731 Tm [<00550053>]TJ
+1.005 0 0 1 215.926 448.731 Tm [<00560044>]TJ
+1.01 0 0 1 225.247 448.731 Tm [<0055>]TJ
+1.005 0 0 1 228.849 448.731 Tm [<0056>]TJ
+1.01 0 0 1 234.136 448.731 Tm [<0053>]TJ
+1.005 0 0 1 237.909 448.731 Tm [<00460045>]TJ
+1.01 0 0 1 249.776 448.731 Tm [<0055>]TJ
+1.005 0 0 1 253.379 448.731 Tm [<00490042004F004C0054>]TJ
+1.01 0 0 1 280.174 448.731 Tm [<0055>]TJ
+1.005 0 0 1 283.776 448.731 Tm [<0050>-219<004300500050004C004E0042>]TJ
+1.01 0 0 1 323.908 448.731 Tm [<0053>]TJ
+1.005 0 0 1 327.682 448.731 Tm [<004C0054>]TJ
+1.01 0 0 1 338.888 448.731 Tm [<0009>]TJ
+1.005 0 0 1 342.188 448.731 Tm [<0042>]TJ
+1.01 0 0 1 346.734 448.731 Tm [<004D>]TJ
+1.005 0 0 1 349.31 448.731 Tm [<00540050>-219<00440042>]TJ
+1.01 0 0 1 369.156 448.731 Tm [<004D004D>]TJ
+1.005 0 0 1 374.308 448.731 Tm [<00460045>-219<00500056>]TJ
+1.01 0 0 1 396.518 448.731 Tm [<0055004D004A>]TJ
+1.005 0 0 1 405.373 448.731 Tm [<004F00460054>]TJ
+1.01 0 0 1 419.43 448.731 Tm [<000A000D>]TJ
+1.005 0 0 1 427.391 448.731 Tm [<0042004F0045>]TJ
+1.01 0 0 1 444.935 448.731 Tm [<0055>]TJ
+1.005 0 0 1 448.538 448.731 Tm [<0049004600540046>-219<0042>]TJ
+1.01 0 0 1 473.661 448.731 Tm [<0053>]TJ
+1.005 0 0 1 477.434 448.731 Tm [<0046>]TJ
+0.985 0 0 1 113.386 436.775 Tm [<004200440044004600540054>]TJ
+0.98 0 0 1 137.987 436.775 Tm [<004A>]TJ
+0.985 0 0 1 140.585 436.775 Tm [<0043>]TJ
+0.98 0 0 1 145.579 436.775 Tm [<004D>]TJ
+0.985 0 0 1 148.079 436.775 Tm [<0046>]TJ
+0.98 0 0 1 154.639 436.775 Tm [<004A>]TJ
+0.985 0 0 1 157.236 436.775 Tm [<004F>]TJ
+0.98 0 0 1 164.904 436.775 Tm [<0055>]TJ
+0.985 0 0 1 168.4 436.775 Tm [<00490046>]TJ
+0.98 0 0 1 180.308 436.775 Tm [<0053>]TJ
+0.985 0 0 1 183.969 436.775 Tm [<0046004200450046>]TJ
+0.98 0 0 1 202.27 436.775 Tm [<00530008>]TJ
+0.985 0 0 1 207.904 436.775 Tm [<0054>-223<00500056>]TJ
+0.98 0 0 1 224.169 436.775 Tm [<0055004D004A>]TJ
+0.985 0 0 1 232.761 436.775 Tm [<004F00460054>-223<00510042004F0046>]TJ
+0.98 0 0 1 268.152 436.775 Tm [<004D000D>]TJ
+0.985 0 0 1 275.236 436.775 Tm [<0050>]TJ
+0.98 0 0 1 280.192 436.775 Tm [<0053>-224<004A>]TJ
+0.985 0 0 1 288.643 436.775 Tm [<004F>]TJ
+0.98 0 0 1 296.312 436.775 Tm [<0055>]TJ
+0.985 0 0 1 299.807 436.775 Tm [<00490046>-223<0051>]TJ
+0.98 0 0 1 316.838 436.775 Tm [<0053>]TJ
+0.985 0 0 1 320.499 436.775 Tm [<004600540046004F>]TJ
+0.98 0 0 1 338.644 436.775 Tm [<0055>]TJ
+0.985 0 0 1 342.139 436.775 Tm [<0042>]TJ
+0.98 0 0 1 346.594 436.775 Tm [<0055004A>]TJ
+0.985 0 0 1 352.686 436.775 Tm [<0050004F>]TJ
+0.98 0 0 1 365.311 436.775 Tm [<0057004A>]TJ
+0.985 0 0 1 372.526 436.775 Tm [<0042>-223<0042>-223<005100500051>]TJ
+0.98 0 0 1 401.023 436.775 Tm [<000E>]TJ
+0.985 0 0 1 404.098 436.775 Tm [<00560051>-223<004E0046004F0056>]TJ
+0.98 0 0 1 439.587 436.775 Tm [<000F>-299<0035>]TJ
+0.985 0 0 1 450.441 436.775 Tm [<0050>-223<0044>]TJ
+0.98 0 0 1 461.544 436.775 Tm [<0053>]TJ
+0.985 0 0 1 465.206 436.775 Tm [<00460042>]TJ
+0.98 0 0 1 474.028 436.775 Tm [<0055>]TJ
+0.985 0 0 1 477.523 436.775 Tm [<0046>]TJ
+1 0 0 1 113.386 424.82 Tm [<0042>-220<004300500050004C004E00420053004C000D>-220<0050004F0046>-220<0056005400460054>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<00440050004E004E0042004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 37.366 400.91 Tm [<003F004600550048004400570048004500520052004E005000440055004E>]TJ
+0 g 0 G
+1 0 0 1 113.386 400.91 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 400.91 Tm [<001F005200530057004C0052005100560021>]TJ
+/F111 7.97011 Tf 1 0 0 1 161.409 400.91 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 166.211 400.91 Tm [<001F004F004800590048004F0021>]TJ
+/F111 7.97011 Tf 1 0 0 1 199.827 400.91 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.63 400.91 Tm [<001F004400510046004B005200550021>]TJ
+/F111 7.97011 Tf 1 0 0 1 243.048 400.91 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 247.85 400.91 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 388.955 Tm [<0265004A>]TJ
+0.98 0 0 1 125.765 388.955 Tm [<0054>-190<0044>]TJ
+0.97 0 0 1 135.473 388.955 Tm [<0053>]TJ
+0.98 0 0 1 139.097 388.955 Tm [<00460042>]TJ
+0.97 0 0 1 147.874 388.955 Tm [<0055>]TJ
+0.98 0 0 1 151.333 388.955 Tm [<00460054>-190<0042>-190<004300500050004C004E0042>]TJ
+0.97 0 0 1 199.805 388.955 Tm [<0053>]TJ
+0.98 0 0 1 203.428 388.955 Tm [<004C>-190<0058>]TJ
+0.97 0 0 1 216.797 388.955 Tm [<004A0055>]TJ
+0.98 0 0 1 222.827 388.955 Tm [<0049>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 230.006 388.955 Tm [<001F0057>]TJ
+0.98 0 0 1 239.323 388.955 Tm [<0048>]TJ
+0.97 0 0 1 244.029 388.955 Tm [<005B00570021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 260.689 388.955 Tm [<00420054>]TJ
+0.97 0 0 1 270.894 388.955 Tm [<0055>]TJ
+0.98 0 0 1 274.354 388.955 Tm [<00490046>]TJ
+0.97 0 0 1 285.877 388.955 Tm [<0055>]TJ
+0.98 0 0 1 289.337 388.955 Tm [<0046>]TJ
+0.97 0 0 1 293.682 388.955 Tm [<00590055>]TJ
+0.98 0 0 1 303.58 388.955 Tm [<0045>]TJ
+0.97 0 0 1 308.666 388.955 Tm [<004A>]TJ
+0.98 0 0 1 311.237 388.955 Tm [<00540051>]TJ
+0.97 0 0 1 320.249 388.955 Tm [<004D>]TJ
+0.98 0 0 1 322.723 388.955 Tm [<0042>]TJ
+0.97 0 0 1 327.155 388.955 Tm [<005A>]TJ
+0.98 0 0 1 331.62 388.955 Tm [<00460045>]TJ
+0.97 0 0 1 342.909 388.955 Tm [<004A>]TJ
+0.98 0 0 1 345.48 388.955 Tm [<004F>]TJ
+0.97 0 0 1 352.785 388.955 Tm [<0055>]TJ
+0.98 0 0 1 356.245 388.955 Tm [<00490046>-190<00500056>]TJ
+0.97 0 0 1 377.854 388.955 Tm [<0055004D004A>]TJ
+0.98 0 0 1 386.358 388.955 Tm [<004F0046>-190<00510042004F0046>]TJ
+0.97 0 0 1 417.331 388.955 Tm [<004D>]TJ
+0.98 0 0 1 421.662 388.955 Tm [<0042004F0045>]TJ
+0.97 0 0 1 438.487 388.955 Tm [<0055>]TJ
+0.98 0 0 1 441.947 388.955 Tm [<00490046>-190<005100500051>]TJ
+0.97 0 0 1 468.594 388.955 Tm [<000E>]TJ
+0.98 0 0 1 471.638 388.955 Tm [<00560051>]TJ
+1.005 0 0 1 113.386 377 Tm [<004E0046004F0056000F>-290<002300500050004C004E00420053004C>-214<0049004A004600530042005300440049005A>-214<004A0054>-214<004E0042004F0042004800460045>-214<0058004A00550049>]TJ
+/F123 7.97011 Tf 1.005 0 0 1 296.292 377 Tm [<001F004F004800590048004F0021>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 330.076 377 Tm [<000D>-215<004200440044005000530045004A004F0048>-214<00550050>-214<005500490046>-214<00470050004D004D00500058004A004F0048>-214<00510053004A004F0044004A0051004D0046001B>]TJ
+0.995 0 0 1 113.386 365.044 Tm [<004300500050004C004E00420053004C0054>-219<0058004A00550049>-219<004D00420053004800460053>]TJ
+/F123 7.97011 Tf 0.995 0 0 1 206.937 365.044 Tm [<001F004F004800590048004F0021>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 243.387 365.044 Tm [<004200530046>-219<00440049004A004D004500530046004F>-219<00550050>-220<004300500050004C004E00420053004C0054>-219<0058004A00550049>-220<0054004E0042004D004D00460053>-219<0050004F0046000F>-295<026500560054000D>]TJ
+/F123 7.97011 Tf 0.995 0 0 1 448.442 365.044 Tm [<001F004F004800590048004F0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [<004E005600540055>-220<00430046>-220<0042>-220<004F0056004E004300460053000D>-220<004300560055>-220<004A0055>-220<004F004600460045>-220<004F00500055>-220<00430046>-220<0042004F>-220<004A004F00550046004800460053>-220<004F00500053>-220<0042>-220<005100500054004A0055004A00570046>-220<004F0056004E004300460053000F>-293<002700500053>-220<004A004F005400550042004F00440046001B>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 352.641 Tm [<0265004A0054>-200<004E00460042004F0054>-200<005A00500056>-200<00450050004F00080055>-200<004F004600460045>]TJ
+0.98 0 0 1 491.852 343.675 Tm [<0055>]TJ
+0.985 0 0 1 494.547 343.675 Tm [<0050>]TJ
+0.98 0 0 1 499.583 343.675 Tm [<0053>]TJ
+0.985 0 0 1 502.426 343.675 Tm [<004600450046>]TJ
+0.98 0 0 1 512.522 343.675 Tm [<00EB>]TJ
+0.985 0 0 1 516.599 343.675 Tm [<004F0046>-202<0042>]TJ
+0.98 0 0 1 528.983 343.675 Tm [<004D004D>-203<005A>]TJ
+0.985 0 0 1 537.821 343.675 Tm [<00500056>]TJ
+0.98 0 0 1 545.091 343.675 Tm [<0053>]TJ
+0.985 0 0 1 549.524 343.675 Tm [<005400460044>]TJ
+0.98 0 0 1 558.387 343.675 Tm [<0055004A>]TJ
+0.985 0 0 1 563.042 343.675 Tm [<0050004F0054>]TJ
+1 0 0 1 491.852 334.708 Tm [<004A0047>-200<005A00500056>-200<00580042004F0055>-200<00550050>-200<004200450045>]TJ
+0.97 0 0 1 491.852 325.742 Tm [<004A>]TJ
+0.98 0 0 1 493.793 325.742 Tm [<004F>]TJ
+0.97 0 0 1 497.776 325.742 Tm [<0055>]TJ
+0.98 0 0 1 500.444 325.742 Tm [<0046>]TJ
+0.97 0 0 1 503.599 325.742 Tm [<0053>]TJ
+0.98 0 0 1 506.413 325.742 Tm [<004E00460045>]TJ
+0.97 0 0 1 519.074 325.742 Tm [<004A>]TJ
+0.98 0 0 1 521.015 325.742 Tm [<0042>]TJ
+0.97 0 0 1 524.616 325.742 Tm [<0055>]TJ
+0.98 0 0 1 527.283 325.742 Tm [<0046>-191<0050004F00460054>]TJ
+0.97 0 0 1 545.35 325.742 Tm [<001C>-197<004B>]TJ
+0.98 0 0 1 550.656 325.742 Tm [<00560054>]TJ
+0.97 0 0 1 557.311 325.742 Tm [<0055>]TJ
+0.98 0 0 1 561.471 325.742 Tm [<0048>]TJ
+0.97 0 0 1 564.798 325.742 Tm [<004A0057>]TJ
+0.98 0 0 1 570.202 325.742 Tm [<0046>]TJ
+1 0 0 1 491.852 316.775 Tm [<005500490046>-200<004D00420055005500460053>-200<0042004F005A>-200<00570042004D00560046>-200<004A004F>-200<005500490046>]TJ
+1 0 0 1 491.852 307.809 Tm [<004A004F00550046005300570042004D>-200<00580049004600530046>-200<005A00500056>-200<00580042004F0055>]TJ
+1 0 0 1 491.852 298.843 Tm [<005500490046004E>-200<00550050>-200<00500044004400560053>-200<004A004F>-200<005500490046>]TJ
+1 0 0 1 491.852 289.876 Tm [<0049004A004600530042005300440049005A000F>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 329.179 Tm [<003F004600550048004400570048004500520052004E005000440055004E005E00130060005E00330044005500570060>]TJ
+1 0 0 1 113.386 317.224 Tm [<003F004600550048004400570048004500520052004E005000440055004E005E001100180060005E0036004800460057004C>-1<005200510060>]TJ
+1 0 0 1 113.386 305.269 Tm [<003F0056004F004C00470048003E0036004F004C004700480040>]TJ
+1 0 0 1 113.386 293.313 Tm [<001100110011>]TJ
+1 0 0 1 113.386 281.358 Tm [<003F004600550048004400570048004500520052004E005000440055004E005E0014001100180060005E0036005700480053>-1<00140060>]TJ
+1 0 0 1 113.386 269.403 Tm [<001100110011>]TJ
+1 0 0 1 113.386 257.448 Tm [<003F004600550048004400570048004500520052004E005000440055004E005E0014001100180060005E0036005700480053>-1<00150060>]TJ
+1 0 0 1 113.386 245.493 Tm [<001100110011>]TJ
+1 0 0 1 113.386 233.538 Tm [<003F0048005100470056004F004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<0058004A004D004D>-220<004400530046004200550046>-220<004300500050004C004E00420053004C0054>-220<0058004A00550049>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<0049004A004600530042005300440049005A001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 185.717 Tm [<002100030033004400550057>]TJ
+1 0 0 1 113.386 173.762 Tm [<00030003002100030036004800460057004C00520051>]TJ
+1 0 0 1 113.386 161.807 Tm [<0003000300030003002100030036004F004C00470048>]TJ
+1 0 0 1 113.386 149.851 Tm [<0003000300030003000300030021000300360057004800530014>]TJ
+1 0 0 1 113.386 137.896 Tm [<0003000300030003000300030021000300360057004800530015>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01EA>]TJ
+ET
+endstream
+endobj
+211 0 obj <<
+/Type /Page
+/Contents 212 0 R
+/Resources 210 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 192 0 R
+>> endobj
+213 0 obj <<
+/D [211 0 R /XYZ 113.386 577.976 null]
+>> endobj
+54 0 obj <<
+/D [211 0 R /XYZ 113.386 470.2 null]
+>> endobj
+210 0 obj <<
+/Font << /F105 5 0 R /F111 6 0 R /F90 14 0 R /F63 7 0 R /F117 23 0 R /F123 17 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+217 0 obj <<
+/Length 38234
+>>
+stream
+BT
+/F105 9.96264 Tf 1.01 0 0 1 113.386 640.013 Tm [<0043004600440042005600540046>-215<0043>]TJ
+1.015 0 0 1 152.719 640.013 Tm [<005A>]TJ
+1.01 0 0 1 159.554 640.013 Tm [<00450046>]TJ
+1.015 0 0 1 169.274 640.013 Tm [<0047>]TJ
+1.01 0 0 1 172.651 640.013 Tm [<00420056>]TJ
+1.015 0 0 1 182.532 640.013 Tm [<004D0055>]TJ
+1.01 0 0 1 190.904 640.013 Tm [<0054>]TJ
+1.015 0 0 1 194.939 640.013 Tm [<004D004A>]TJ
+1.01 0 0 1 200.218 640.013 Tm [<004500460054>-215<0042>]TJ
+1.015 0 0 1 220.704 640.013 Tm [<0053>]TJ
+1.01 0 0 1 224.496 640.013 Tm [<0046>-215<004300500050004C004E0042>]TJ
+1.015 0 0 1 264.182 640.013 Tm [<0053>]TJ
+1.01 0 0 1 267.974 640.013 Tm [<004C00460045>-214<0042004F0045>-215<00490042>]TJ
+1.015 0 0 1 312.519 640.013 Tm [<0057>]TJ
+1.01 0 0 1 317.302 640.013 Tm [<0046>-214<004300500050004C004E0042>]TJ
+1.015 0 0 1 356.987 640.013 Tm [<0053>]TJ
+1.01 0 0 1 360.779 640.013 Tm [<004C>]TJ
+1.015 0 0 1 367.963 640.013 Tm [<004D>]TJ
+1.01 0 0 1 370.552 640.013 Tm [<0046>]TJ
+1.015 0 0 1 375.03 640.013 Tm [<0057>]TJ
+1.01 0 0 1 379.813 640.013 Tm [<0046>]TJ
+1.015 0 0 1 384.29 640.013 Tm [<004D>-213<01EA000F>-289<002A0047>]TJ
+1.01 0 0 1 408.588 640.013 Tm [<005400460044>]TJ
+1.015 0 0 1 421.156 640.013 Tm [<0055004A>]TJ
+1.01 0 0 1 427.466 640.013 Tm [<0050004F0054>-215<0050>]TJ
+1.015 0 0 1 449.442 640.013 Tm [<0047>]TJ
+1.01 0 0 1 454.982 640.013 Tm [<0058>]TJ
+1.015 0 0 1 461.825 640.013 Tm [<004A>]TJ
+1.01 0 0 1 464.515 640.013 Tm [<004500460054>]TJ
+1.015 0 0 1 478.27 640.013 Tm [<0055>]TJ
+1.015 0 0 1 113.386 628.058 Tm [<00540044005000510046>-214<0042>]TJ
+1.02 0 0 1 143.158 628.058 Tm [<0053>]TJ
+1.015 0 0 1 146.969 628.058 Tm [<0046>-214<0046>]TJ
+1.02 0 0 1 158.134 628.058 Tm [<0057>]TJ
+1.015 0 0 1 162.941 628.058 Tm [<0046004F>]TJ
+1.02 0 0 1 173.083 628.058 Tm [<0055>]TJ
+1.015 0 0 1 176.721 628.058 Tm [<00560042>]TJ
+1.02 0 0 1 186.651 628.058 Tm [<004D004D005A>]TJ
+1.015 0 0 1 198.715 628.058 Tm [<004F00460046004500460045>]TJ
+1.02 0 0 1 230.56 628.058 Tm [<004A>]TJ
+1.015 0 0 1 233.263 628.058 Tm [<004F>]TJ
+1.02 0 0 1 241.072 628.058 Tm [<0055>]TJ
+1.015 0 0 1 244.71 628.058 Tm [<0049>]TJ
+1.02 0 0 1 250.221 628.058 Tm [<004A>]TJ
+1.015 0 0 1 252.924 628.058 Tm [<0054>-214<0046>]TJ
+1.02 0 0 1 263.645 628.058 Tm [<0059>]TJ
+1.015 0 0 1 268.462 628.058 Tm [<0042004E0051>]TJ
+1.02 0 0 1 286.542 628.058 Tm [<004D>]TJ
+1.015 0 0 1 289.144 628.058 Tm [<0046>]TJ
+1.02 0 0 1 293.643 628.058 Tm [<000D>]TJ
+1.015 0 0 1 298.304 628.058 Tm [<0050004F0046>-214<00440042004F>-214<0044>]TJ
+1.02 0 0 1 336.269 628.058 Tm [<0053>]TJ
+1.015 0 0 1 340.08 628.058 Tm [<00460042>]TJ
+1.02 0 0 1 349.171 628.058 Tm [<0055>]TJ
+1.015 0 0 1 352.809 628.058 Tm [<0046>]TJ
+1.02 0 0 1 359.475 628.058 Tm [<0055>]TJ
+1.015 0 0 1 363.113 628.058 Tm [<00490046004E>-214<00560054>]TJ
+1.02 0 0 1 392.895 628.058 Tm [<004A>]TJ
+1.015 0 0 1 395.598 628.058 Tm [<004F0048>-214<004300500050004C004E0042>]TJ
+1.02 0 0 1 441.327 628.058 Tm [<0053>]TJ
+1.015 0 0 1 445.137 628.058 Tm [<004C0054>-214<0058>]TJ
+1.02 0 0 1 463.281 628.058 Tm [<004A0055>]TJ
+1.015 0 0 1 469.622 628.058 Tm [<0049>-214<0042>]TJ
+1 0 0 1 113.386 616.103 Tm [<004F0046004800420055004A00570046>]TJ
+/F123 7.97011 Tf 1 0 0 1 150.098 616.103 Tm [<001F004F004800590048004F0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 183.714 616.103 Tm [<000F>]TJ
+1 0 0 1 133.311 604.148 Tm [<02650046>]TJ
+/F123 7.97011 Tf 1 0 0 1 150.067 604.148 Tm [<001F005200530057004C0052005100560021>]TJ
+/F105 9.96264 Tf 1 0 0 1 196.325 604.148 Tm [<004200530046>-221<0042004F005A>-222<00440050004E0043004A004F00420055004A0050004F>-222<00500047>-222<005500490046>-222<00470050004D004D00500058004A004F0048>-222<004C0046005A00580050005300450054000D>-222<005400460051004200530042005500460045>-222<0043005A>-222<00440050004E004E00420054001B>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 113.386 592.193 Tm [<00450052>]TJ
+1.03 0 0 1 123.183 592.193 Tm [<004F>]TJ
+1.02 0 0 1 128.129 592.193 Tm [<0047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 133.027 592.193 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 138.897 592.193 Tm [<004C0057>]TJ
+1.02 0 0 1 148.79 592.193 Tm [<0044>]TJ
+1.03 0 0 1 153.688 592.193 Tm [<004F004C>]TJ
+1.02 0 0 1 163.581 592.193 Tm [<0046>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 171.603 592.193 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 190.304 592.193 Tm [<00450052>]TJ
+1.03 0 0 1 200.101 592.193 Tm [<004F>]TJ
+1.02 0 0 1 205.047 592.193 Tm [<0047>]TJ
+1.03 0 0 1 209.946 592.193 Tm [<004C0057>]TJ
+1.02 0 0 1 219.838 592.193 Tm [<0044>]TJ
+1.03 0 0 1 224.737 592.193 Tm [<004F004C>]TJ
+1.02 0 0 1 234.629 592.193 Tm [<0046>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 239.528 592.193 Tm [<000D>]TJ
+1.02 0 0 1 245.398 592.193 Tm [<00580049>]TJ
+1.03 0 0 1 257.846 592.193 Tm [<004A>]TJ
+1.02 0 0 1 260.576 592.193 Tm [<00440049>-307<0054005100460044>]TJ
+1.03 0 0 1 291.329 592.193 Tm [<004A0047005A>]TJ
+1.02 0 0 1 305.35 592.193 Tm [<004900500058>]TJ
+1.03 0 0 1 326.053 592.193 Tm [<0055>]TJ
+1.02 0 0 1 329.727 592.193 Tm [<00490046>-307<004300500050004C004E0042>]TJ
+1.03 0 0 1 376.282 592.193 Tm [<0053>]TJ
+1.02 0 0 1 380.13 592.193 Tm [<004C>]TJ
+1.03 0 0 1 388.324 592.193 Tm [<004A>]TJ
+1.02 0 0 1 391.054 592.193 Tm [<0054>]TJ
+1.03 0 0 1 398.252 592.193 Tm [<0055>]TJ
+1.02 0 0 1 401.925 592.193 Tm [<0050>-307<00430046>]TJ
+1.03 0 0 1 422.998 592.193 Tm [<0055005A>]TJ
+1.02 0 0 1 431.412 592.193 Tm [<0051004600540046>]TJ
+1.03 0 0 1 449.836 592.193 Tm [<0055>-304<004A>]TJ
+1.02 0 0 1 459.362 592.193 Tm [<004F>]TJ
+1.03 0 0 1 468.156 592.193 Tm [<0055>]TJ
+1.02 0 0 1 471.829 592.193 Tm [<00490046>]TJ
+1.02 0 0 1 113.386 580.238 Tm [<00500056>]TJ
+1.03 0 0 1 123.883 580.238 Tm [<0055004D004A>]TJ
+1.02 0 0 1 132.913 580.238 Tm [<004F00460054>-312<00510042004F0046>]TJ
+1.03 0 0 1 170.461 580.238 Tm [<004D000D>]TJ
+1.02 0 0 1 179.018 580.238 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 197.766 580.238 Tm [<0052005300480051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 220.53 580.238 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 239.279 580.238 Tm [<0046>]TJ
+1.03 0 0 1 244.177 580.238 Tm [<004F>]TJ
+1.02 0 0 1 249.124 580.238 Tm [<0052005600480047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 268.717 580.238 Tm [<000D>]TJ
+1.02 0 0 1 274.646 580.238 Tm [<00580049>]TJ
+1.03 0 0 1 287.095 580.238 Tm [<004A>]TJ
+1.02 0 0 1 289.824 580.238 Tm [<00440049>-312<0054005100460044>]TJ
+1.03 0 0 1 320.625 580.238 Tm [<004A0047005A>]TJ
+1.02 0 0 1 334.693 580.238 Tm [<005800490046>]TJ
+1.03 0 0 1 351.664 580.238 Tm [<0055>]TJ
+1.02 0 0 1 355.337 580.238 Tm [<00490046>]TJ
+1.03 0 0 1 365.398 580.238 Tm [<0053>-308<0055>]TJ
+1.02 0 0 1 376.09 580.238 Tm [<00490046>-312<004300500050004C004E0042>]TJ
+1.03 0 0 1 422.692 580.238 Tm [<0053>]TJ
+1.02 0 0 1 426.54 580.238 Tm [<004C>-312<0045>]TJ
+1.03 0 0 1 440.076 580.238 Tm [<004A>]TJ
+1.02 0 0 1 442.806 580.238 Tm [<00540051>]TJ
+1.03 0 0 1 452.185 580.238 Tm [<004D>]TJ
+1.02 0 0 1 454.812 580.238 Tm [<0042>]TJ
+1.03 0 0 1 459.425 580.238 Tm [<005A>]TJ
+1.02 0 0 1 464.166 580.238 Tm [<0054>]TJ
+1.03 0 0 1 471.412 580.238 Tm [<004A0055>]TJ
+1.02 0 0 1 477.815 580.238 Tm [<0054>]TJ
+1.02 0 0 1 113.386 568.282 Tm [<00440049>]TJ
+1.03 0 0 1 123.019 568.282 Tm [<004A004D>]TJ
+1.02 0 0 1 128.376 568.282 Tm [<0045>]TJ
+1.03 0 0 1 133.67 568.282 Tm [<0053>]TJ
+1.02 0 0 1 137.518 568.282 Tm [<0046004F>-233<0043>]TJ
+1.03 0 0 1 155.259 568.282 Tm [<005A>]TJ
+1.02 0 0 1 162.377 568.282 Tm [<00450046>]TJ
+1.03 0 0 1 172.193 568.282 Tm [<0047>]TJ
+1.02 0 0 1 175.62 568.282 Tm [<00420056>]TJ
+1.03 0 0 1 185.599 568.282 Tm [<004D0055>]TJ
+1.02 0 0 1 194.276 568.282 Tm [<0050>]TJ
+1.03 0 0 1 199.408 568.282 Tm [<0053>]TJ
+1.02 0 0 1 205.633 568.282 Tm [<004F0050>]TJ
+1.03 0 0 1 216.435 568.282 Tm [<0055000F>]TJ
+1.02 0 0 1 226.099 568.282 Tm [<0027>]TJ
+1.03 0 0 1 231.495 568.282 Tm [<004A>]TJ
+1.02 0 0 1 234.224 568.282 Tm [<004F0042>]TJ
+1.03 0 0 1 244.508 568.282 Tm [<004D004D005A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 259.44 568.282 Tm [<005100520056005800450050004800510058>]TJ
+1.03 0 0 1 303.525 568.282 Tm [<0057>]TJ
+1.02 0 0 1 308.471 568.282 Tm [<0048>]TJ
+1.03 0 0 1 313.37 568.282 Tm [<005B0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 325.639 568.282 Tm [<004200510051>]TJ
+1.03 0 0 1 340.861 568.282 Tm [<004D004A>]TJ
+1.02 0 0 1 346.218 568.282 Tm [<00460054>]TJ
+1.03 0 0 1 357.191 568.282 Tm [<0055>]TJ
+1.02 0 0 1 360.865 568.282 Tm [<0050>]TJ
+1.03 0 0 1 368.373 568.282 Tm [<0055>]TJ
+1.02 0 0 1 372.047 568.282 Tm [<00490046>-233<005100500051>]TJ
+1.03 0 0 1 400.224 568.282 Tm [<000E>]TJ
+1.02 0 0 1 403.457 568.282 Tm [<00560051>-233<004E0046004F0056>-234<0045>]TJ
+1.03 0 0 1 447.983 568.282 Tm [<004A>]TJ
+1.02 0 0 1 450.713 568.282 Tm [<00540051>]TJ
+1.03 0 0 1 460.092 568.282 Tm [<004D>]TJ
+1.02 0 0 1 462.719 568.282 Tm [<0042>]TJ
+1.03 0 0 1 467.333 568.282 Tm [<005A>]TJ
+1.02 0 0 1 472.073 568.282 Tm [<00460045>]TJ
+1 0 0 1 113.386 556.327 Tm [<0058004A00550049>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 133.999 556.327 Tm [<003F0056004B0052005A004500520052004E005000440055004E0056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 201.231 556.327 Tm [<000D>-220<00420054>-220<004600590051004D0042004A004F00460045>-220<00430046004D00500058000F>]TJ
+0.985 0 0 1 133.311 544.372 Tm [<0022>]TJ
+0.98 0 0 1 139.258 544.372 Tm [<004F>]TJ
+0.97 0 0 1 144.706 544.372 Tm [<005A>]TJ
+0.98 0 0 1 151.16 544.372 Tm [<0050>]TJ
+0.97 0 0 1 156.091 544.372 Tm [<0055>]TJ
+0.98 0 0 1 159.55 544.372 Tm [<00490046>]TJ
+0.97 0 0 1 169.216 544.372 Tm [<0053>]TJ
+0.98 0 0 1 174.83 544.372 Tm [<004E0042>]TJ
+0.97 0 0 1 187.19 544.372 Tm [<0055>]TJ
+0.98 0 0 1 190.65 544.372 Tm [<0046>]TJ
+0.97 0 0 1 194.995 544.372 Tm [<0053004A>]TJ
+0.98 0 0 1 201.189 544.372 Tm [<0042>]TJ
+0.97 0 0 1 205.622 544.372 Tm [<004D>-205<004A>]TJ
+0.98 0 0 1 212.656 544.372 Tm [<004F>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 220.094 544.372 Tm [<001F>]TJ
+0.98 0 0 1 224.752 544.372 Tm [<00520053>]TJ
+0.97 0 0 1 234.165 544.372 Tm [<0057004C>]TJ
+0.98 0 0 1 243.481 544.372 Tm [<005200510056>]TJ
+0.97 0 0 1 257.6 544.372 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 265.075 544.372 Tm [<004A>]TJ
+0.98 0 0 1 267.645 544.372 Tm [<0054>-203<00540056005100510050005400460045>]TJ
+0.97 0 0 1 313.08 544.372 Tm [<0055>]TJ
+0.98 0 0 1 316.54 544.372 Tm [<0050>-203<00430046>-204<0042>]TJ
+0.97 0 0 1 341.187 544.372 Tm [<00550053004A>]TJ
+0.98 0 0 1 350.841 544.372 Tm [<0051>]TJ
+0.97 0 0 1 355.937 544.372 Tm [<004D>]TJ
+0.98 0 0 1 358.411 544.372 Tm [<0046>]TJ
+0.97 0 0 1 362.756 544.372 Tm [<0055>]TJ
+0.98 0 0 1 368.205 544.372 Tm [<0050>]TJ
+0.97 0 0 1 373.136 544.372 Tm [<0047>]TJ
+0.98 0 0 1 378.353 544.372 Tm [<004F0056004E00430046>]TJ
+0.97 0 0 1 406.198 544.372 Tm [<0053>]TJ
+0.98 0 0 1 409.822 544.372 Tm [<0054>]TJ
+0.97 0 0 1 415.727 544.372 Tm [<0053>]TJ
+0.98 0 0 1 419.351 544.372 Tm [<0042004F0048>]TJ
+0.97 0 0 1 433.781 544.372 Tm [<004A>]TJ
+0.98 0 0 1 436.352 544.372 Tm [<004F0048>-203<00430046>]TJ
+0.97 0 0 1 457.654 544.372 Tm [<0055>]TJ
+0.98 0 0 1 461.113 544.372 Tm [<005800460046004F>]TJ
+1 0 0 1 113.386 532.417 Tm [<01E9>-220<0042004F0045>-220<01EA000D>-220<00550050>-220<00450046004F005000550046>-220<005500490046>-220<004300500050004C004E00420053004C00080054>-220<00440050004D00500053>-220<004A004F>-220<0042004F>-220<003300280023>-220<004E005000450046004D000F>-293<002700500053>-220<004A004F005400550042004F00440046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 508.506 Tm [<003F004600550048004400570048004500520052004E005000440055004E003E004C00570044004F004C0046000F00520053>-1<00480051000F001400030013000300130040005E00130060005E002500520052004E005000440055004E0060>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 484.596 Tm [<0044>]TJ
+1.015 0 0 1 117.441 484.596 Tm [<0053>]TJ
+1.01 0 0 1 121.233 484.596 Tm [<00460042>]TJ
+1.015 0 0 1 130.279 484.596 Tm [<0055>]TJ
+1.01 0 0 1 133.899 484.596 Tm [<00460054>-222<0042>]TJ
+1.015 0 0 1 151.461 484.596 Tm [<0053>]TJ
+1.01 0 0 1 155.253 484.596 Tm [<00460045>-222<004300500050004C004E0042>]TJ
+1.015 0 0 1 200.258 484.596 Tm [<0053>]TJ
+1.01 0 0 1 204.05 484.596 Tm [<004C>]TJ
+1.015 0 0 1 211.312 484.596 Tm [<004A>]TJ
+1.01 0 0 1 214.001 484.596 Tm [<004F>]TJ
+1.015 0 0 1 221.857 484.596 Tm [<004A0055>]TJ
+1.01 0 0 1 228.167 484.596 Tm [<0042>]TJ
+1.015 0 0 1 232.735 484.596 Tm [<004D004A>]TJ
+1.01 0 0 1 238.013 484.596 Tm [<0044>]TJ
+1.015 0 0 1 244.309 484.596 Tm [<0055>]TJ
+1.01 0 0 1 247.929 484.596 Tm [<00490042>]TJ
+1.015 0 0 1 257.981 484.596 Tm [<0055>]TJ
+1.01 0 0 1 263.842 484.596 Tm [<0045>]TJ
+1.015 0 0 1 269.084 484.596 Tm [<004A>]TJ
+1.01 0 0 1 271.774 484.596 Tm [<00540051>]TJ
+1.015 0 0 1 281.062 484.596 Tm [<004D>]TJ
+1.01 0 0 1 283.65 484.596 Tm [<0042>]TJ
+1.015 0 0 1 288.218 484.596 Tm [<005A>]TJ
+1.01 0 0 1 292.89 484.596 Tm [<0054>]TJ
+1.015 0 0 1 299.166 484.596 Tm [<004A0055>]TJ
+1.01 0 0 1 305.476 484.596 Tm [<0054>-222<00440049>]TJ
+1.015 0 0 1 321.29 484.596 Tm [<004A004D>]TJ
+1.01 0 0 1 326.569 484.596 Tm [<0045>]TJ
+1.015 0 0 1 331.811 484.596 Tm [<0053>]TJ
+1.01 0 0 1 335.603 484.596 Tm [<0046004F>-222<005800490046004F>]TJ
+1.015 0 0 1 372.595 484.596 Tm [<0055>]TJ
+1.01 0 0 1 376.215 484.596 Tm [<00490046>-222<0045005000440056004E0046004F>]TJ
+1.015 0 0 1 426.372 484.596 Tm [<0055>-221<004A>]TJ
+1.01 0 0 1 434.923 484.596 Tm [<0054>-222<005000510046004F00460045>]TJ
+1.015 0 0 1 473.585 484.596 Tm [<004A>]TJ
+1.01 0 0 1 476.275 484.596 Tm [<004F>]TJ
+1 0 0 1 113.386 472.641 Tm [<005500490046>-220<005300460042004500460053000F>]TJ
+0.97 0 0 1 133.311 460.686 Tm [<0265>]TJ
+0.98 0 0 1 143.12 460.686 Tm [<0046>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 149.579 460.686 Tm [<001F>]TJ
+0.98 0 0 1 154.238 460.686 Tm [<004400510046004B0052>]TJ
+0.97 0 0 1 177.769 460.686 Tm [<00550021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 190.027 460.686 Tm [<004A>]TJ
+0.98 0 0 1 192.597 460.686 Tm [<0054>-216<0042>]TJ
+0.97 0 0 1 205.175 460.686 Tm [<0053>]TJ
+0.98 0 0 1 208.799 460.686 Tm [<0046>]TJ
+0.97 0 0 1 213.143 460.686 Tm [<0047>]TJ
+0.98 0 0 1 216.371 460.686 Tm [<0046>]TJ
+0.97 0 0 1 220.716 460.686 Tm [<0053>]TJ
+0.98 0 0 1 224.34 460.686 Tm [<0046004F00440046>-216<00540050>]TJ
+0.97 0 0 1 255.487 460.686 Tm [<0055>]TJ
+0.98 0 0 1 258.946 460.686 Tm [<00490042>]TJ
+0.97 0 0 1 268.7 460.686 Tm [<0055>]TJ
+0.98 0 0 1 274.274 460.686 Tm [<0050004F0046>-216<00440042004F>-217<00480050>]TJ
+0.97 0 0 1 318.637 460.686 Tm [<0055>]TJ
+0.98 0 0 1 322.097 460.686 Tm [<0050>]TJ
+0.97 0 0 1 329.142 460.686 Tm [<0055>]TJ
+0.98 0 0 1 332.602 460.686 Tm [<00490046>-216<004300500050004C004E0042>]TJ
+0.97 0 0 1 376.445 460.686 Tm [<0053>]TJ
+0.98 0 0 1 380.069 460.686 Tm [<004C00460045>-216<0051>]TJ
+0.97 0 0 1 401.584 460.686 Tm [<004D>]TJ
+0.98 0 0 1 404.058 460.686 Tm [<004200440046>-216<0058>]TJ
+0.97 0 0 1 425.523 460.686 Tm [<004A0055>]TJ
+0.98 0 0 1 431.554 460.686 Tm [<0049>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.97 0 0 1 438.989 460.686 Tm [<003F>]TJ
+0.98 0 0 1 443.648 460.686 Tm [<004A0052>]TJ
+0.97 0 0 1 453.06 460.686 Tm [<0057>]TJ
+0.98 0 0 1 457.718 460.686 Tm [<0052>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 462.425 460.686 Tm [<000D>]TJ
+0.98 0 0 1 466.922 460.686 Tm [<0042004F0045>]TJ
+1 0 0 1 113.386 448.731 Tm [<004A0054>-220<004600520056004A00570042004D0046004F0055>-220<00550050>-220<00560054004A004F0048>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 202.243 448.731 Tm [<003F004400510046004B00520055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 238.051 448.731 Tm [<0009004F004600590055>-220<0054005600430054004600440055004A0050004F000A000F>]TJ
+1.02 0 0 1 133.311 436.775 Tm [<002F0050>]TJ
+1.03 0 0 1 145.719 436.775 Tm [<0055>]TJ
+1.02 0 0 1 149.392 436.775 Tm [<0046>]TJ
+1.03 0 0 1 156.554 436.775 Tm [<0055>]TJ
+1.02 0 0 1 160.227 436.775 Tm [<00490042>]TJ
+1.03 0 0 1 170.379 436.775 Tm [<0055>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 176.692 436.775 Tm [<001F>]TJ
+1.02 0 0 1 181.638 436.775 Tm [<00520053>]TJ
+1.03 0 0 1 191.435 436.775 Tm [<0057004C>]TJ
+1.02 0 0 1 201.328 436.775 Tm [<005200510056>]TJ
+1.03 0 0 1 216.023 436.775 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 224.435 436.775 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 242.653 436.775 Tm [<001F004F>]TJ
+1.02 0 0 1 252.546 436.775 Tm [<0048>]TJ
+1.03 0 0 1 257.444 436.775 Tm [<0059>]TJ
+1.02 0 0 1 262.39 436.775 Tm [<0048>]TJ
+1.03 0 0 1 267.289 436.775 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 280.648 436.775 Tm [<0042>]TJ
+1.03 0 0 1 285.261 436.775 Tm [<0053>]TJ
+1.02 0 0 1 289.109 436.775 Tm [<0046>-259<0054005100460044>]TJ
+1.03 0 0 1 314.267 436.775 Tm [<004A00EB>]TJ
+1.02 0 0 1 322.754 436.775 Tm [<00460045>]TJ
+1.03 0 0 1 335.209 436.775 Tm [<0047>]TJ
+1.02 0 0 1 338.637 436.775 Tm [<0050>]TJ
+1.03 0 0 1 343.768 436.775 Tm [<0053>]TJ
+1.02 0 0 1 350.256 436.775 Tm [<0042>-259<0054>]TJ
+1.03 0 0 1 361.583 436.775 Tm [<004D004A>]TJ
+1.02 0 0 1 366.94 436.775 Tm [<00450046>]TJ
+1.03 0 0 1 379.396 436.775 Tm [<0009004A0047>-257<004A0055>-257<004A>]TJ
+1.02 0 0 1 403.33 436.775 Tm [<0054>-259<004300500050004C004E0042>]TJ
+1.03 0 0 1 443.416 436.775 Tm [<0053>]TJ
+1.02 0 0 1 447.264 436.775 Tm [<004C00460045>]TJ
+1.03 0 0 1 462.151 436.775 Tm [<000A>-257<0055>]TJ
+1.02 0 0 1 471.829 436.775 Tm [<00490046>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 436.506 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 436.506 Tm [<003100250027>-200<0042004F0045>-200<004F00420057004A004800420055004A0050004F>]TJ
+1 0 0 1 506.756 427.54 Tm [<004700500053>-200<0054004D004A004500460054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 113.386 424.82 Tm [<004500520052004E005000440055004E00560057005C004F0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 178.008 424.82 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 195.472 424.82 Tm [<004500520052004E005000440055004E004F004800590048004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 260.094 424.82 Tm [<0042005500550053004A00430056005500460054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 42.169 400.91 Tm [<003F0056004B0052005A004500520052004E005000440055004E0056>]TJ
+0 g 0 G
+1 0 0 1 113.386 400.91 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 400.91 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 400.91 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 400.91 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 388.955 Tm [<0265004A>]TJ
+1.005 0 0 1 126.276 388.955 Tm [<0054>-221<0044>]TJ
+1.01 0 0 1 136.543 388.955 Tm [<0053>]TJ
+1.005 0 0 1 140.317 388.955 Tm [<00460042>]TJ
+1.01 0 0 1 149.318 388.955 Tm [<0055>]TJ
+1.005 0 0 1 152.92 388.955 Tm [<00460054>-221<0042004F>-222<004900430050>]TJ
+1.01 0 0 1 191.568 388.955 Tm [<0059>]TJ
+1.005 0 0 1 198.556 388.955 Tm [<00440050004F>]TJ
+1.01 0 0 1 213.234 388.955 Tm [<0055>]TJ
+1.005 0 0 1 216.836 388.955 Tm [<0042>]TJ
+1.01 0 0 1 221.382 388.955 Tm [<004A>]TJ
+1.005 0 0 1 224.059 388.955 Tm [<004F>]TJ
+1.01 0 0 1 229.645 388.955 Tm [<004A>]TJ
+1.005 0 0 1 232.322 388.955 Tm [<004F0048>]TJ
+/F123 7.97011 Tf 1.01 0 0 1 244.793 388.955 Tm [<001F0057>]TJ
+1.005 0 0 1 254.493 388.955 Tm [<0048>]TJ
+1.01 0 0 1 259.32 388.955 Tm [<005B00570021>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 276.915 388.955 Tm [<0009>]TJ
+1.005 0 0 1 280.216 388.955 Tm [<00580049>]TJ
+1.01 0 0 1 292.481 388.955 Tm [<004A>]TJ
+1.005 0 0 1 295.157 388.955 Tm [<00440049>-221<00440042004F>-222<00430046>-221<0042004F>]TJ
+1.01 0 0 1 345.155 388.955 Tm [<005A0055>]TJ
+1.005 0 0 1 353.406 388.955 Tm [<0049>]TJ
+1.01 0 0 1 358.863 388.955 Tm [<004A>]TJ
+1.005 0 0 1 361.539 388.955 Tm [<004F0048>]TJ
+1.01 0 0 1 371.792 388.955 Tm [<000D>-221<004D004A>]TJ
+1.005 0 0 1 381.734 388.955 Tm [<004C0046>]TJ
+1.01 0 0 1 393.404 388.955 Tm [<0053>]TJ
+1.005 0 0 1 397.177 388.955 Tm [<00460042>]TJ
+1.01 0 0 1 406.178 388.955 Tm [<004D>-220<0055>]TJ
+1.005 0 0 1 414.574 388.955 Tm [<0046>]TJ
+1.01 0 0 1 419.03 388.955 Tm [<00590055000D>]TJ
+1.005 0 0 1 432.091 388.955 Tm [<0050>]TJ
+1.01 0 0 1 437.147 388.955 Tm [<0053>]TJ
+1.005 0 0 1 443.139 388.955 Tm [<0042>-221<0054>]TJ
+1.01 0 0 1 453.917 388.955 Tm [<005A>]TJ
+1.005 0 0 1 458.566 388.955 Tm [<004E00430050>]TJ
+1.01 0 0 1 476.849 388.955 Tm [<004D000D>]TJ
+1.005 0 0 1 113.386 377 Tm [<0046>]TJ
+1.01 0 0 1 117.841 377 Tm [<0055>]TJ
+1.005 0 0 1 121.444 377 Tm [<0044>]TJ
+1.01 0 0 1 125.479 377 Tm [<000F000A001C>]TJ
+1.005 0 0 1 135.903 377 Tm [<005800490046004F>-219<0044>]TJ
+1.01 0 0 1 164.439 377 Tm [<004D004A>]TJ
+1.005 0 0 1 169.691 377 Tm [<0044004C00460045>]TJ
+1.01 0 0 1 188.395 377 Tm [<000D>]TJ
+1.005 0 0 1 193.053 377 Tm [<0042>-219<005100500051>]TJ
+1.01 0 0 1 215.301 377 Tm [<000E>]TJ
+1.005 0 0 1 218.471 377 Tm [<00560051>-219<004E0046004F0056>-219<00420051005100460042>]TJ
+1.01 0 0 1 280.828 377 Tm [<0053>]TJ
+1.005 0 0 1 284.602 377 Tm [<0054>]TJ
+1.01 0 0 1 288.617 377 Tm [<000D>]TJ
+1.005 0 0 1 293.275 377 Tm [<00580049>]TJ
+1.01 0 0 1 305.541 377 Tm [<004A>]TJ
+1.005 0 0 1 308.217 377 Tm [<00440049>-219<00440050004F>]TJ
+1.01 0 0 1 334.58 377 Tm [<0055>]TJ
+1.005 0 0 1 338.182 377 Tm [<0042>]TJ
+1.01 0 0 1 342.728 377 Tm [<004A>]TJ
+1.005 0 0 1 345.405 377 Tm [<004F0054>]TJ
+1.01 0 0 1 357.199 377 Tm [<0055>]TJ
+1.005 0 0 1 360.802 377 Tm [<00490046>-219<004300500050004C004E0042>]TJ
+1.01 0 0 1 405.788 377 Tm [<0053>]TJ
+1.005 0 0 1 409.561 377 Tm [<004C>-219<0049>]TJ
+1.01 0 0 1 422.207 377 Tm [<004A>]TJ
+1.005 0 0 1 424.884 377 Tm [<0046>]TJ
+1.01 0 0 1 429.339 377 Tm [<0053>]TJ
+1.005 0 0 1 433.113 377 Tm [<0042>]TJ
+1.01 0 0 1 437.658 377 Tm [<0053>]TJ
+1.005 0 0 1 441.432 377 Tm [<00440049>]TJ
+1.01 0 0 1 450.923 377 Tm [<005A>]TJ
+1.005 0 0 1 457.765 377 Tm [<0050>]TJ
+1.01 0 0 1 462.821 377 Tm [<0047>-218<0055>]TJ
+1.005 0 0 1 471.977 377 Tm [<00490046>]TJ
+1.015 0 0 1 113.386 365.044 Tm [<0045005000440056004E0046004F>]TJ
+1.025 0 0 1 151.529 365.044 Tm [<0055000F>-292<0265>]TJ
+1.015 0 0 1 171.042 365.044 Tm [<0046>-219<00500051>]TJ
+1.025 0 0 1 188.141 365.044 Tm [<0055004A>]TJ
+1.015 0 0 1 194.513 365.044 Tm [<0050004F0042>]TJ
+1.025 0 0 1 209.853 365.044 Tm [<004D>]TJ
+1.015 0 0 1 214.682 365.044 Tm [<0054>]TJ
+1.025 0 0 1 218.737 365.044 Tm [<0055005A004D>]TJ
+1.015 0 0 1 229.725 365.044 Tm [<0046>]TJ
+1.025 0 0 1 236.439 365.044 Tm [<004A>]TJ
+1.015 0 0 1 239.155 365.044 Tm [<0054>-219<0046>]TJ
+1.025 0 0 1 249.925 365.044 Tm [<004A0055>]TJ
+1.015 0 0 1 256.297 365.044 Tm [<00490046>]TJ
+1.025 0 0 1 266.308 365.044 Tm [<0053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.025 0 0 1 272.352 365.044 Tm [<0049004F>]TJ
+1.015 0 0 1 282.196 365.044 Tm [<00440056004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 299.034 365.044 Tm [<0050>]TJ
+1.025 0 0 1 304.14 365.044 Tm [<0053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.015 0 0 1 310.184 365.044 Tm [<005300580056004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.025 0 0 1 329.682 365.044 Tm [<000D>]TJ
+1.015 0 0 1 334.404 365.044 Tm [<00580049>]TJ
+1.025 0 0 1 346.791 365.044 Tm [<004A>]TJ
+1.015 0 0 1 349.507 365.044 Tm [<00440049>-219<00540046>]TJ
+1.025 0 0 1 369.863 365.044 Tm [<0055>]TJ
+1.015 0 0 1 373.519 365.044 Tm [<0054>]TJ
+1.025 0 0 1 379.788 365.044 Tm [<0055>]TJ
+1.015 0 0 1 383.444 365.044 Tm [<00490046>]TJ
+1.025 0 0 1 395.669 365.044 Tm [<004D004A00550055004D>]TJ
+1.015 0 0 1 410.926 365.044 Tm [<0046>-219<0042004F>]TJ
+1.025 0 0 1 427.873 365.044 Tm [<004A>]TJ
+1.015 0 0 1 430.59 365.044 Tm [<004E0042>]TJ
+1.025 0 0 1 443.392 365.044 Tm [<0055004A>]TJ
+1.015 0 0 1 449.764 365.044 Tm [<0050004F>-219<0056005400460045>]TJ
+1 0 0 1 113.386 353.089 Tm [<005800490046004F>]TJ
+0.995 0 0 1 137.755 353.089 Tm [<0055>]TJ
+1 0 0 1 141.304 353.089 Tm [<00490046>]TJ
+0.995 0 0 1 153.34 353.089 Tm [<004D004A>]TJ
+1 0 0 1 158.515 353.089 Tm [<004F004C>]TJ
+0.995 0 0 1 171.218 353.089 Tm [<004A>]TJ
+1 0 0 1 173.855 353.089 Tm [<0054>-218<0044>]TJ
+0.995 0 0 1 184.038 353.089 Tm [<004D004A>]TJ
+1 0 0 1 189.212 353.089 Tm [<0044004C00460045>]TJ
+0.995 0 0 1 207.822 353.089 Tm [<001B>-293<004A0055>-220<0053>]TJ
+1 0 0 1 225.24 353.089 Tm [<0046>]TJ
+0.995 0 0 1 229.673 353.089 Tm [<0057>]TJ
+1 0 0 1 234.362 353.089 Tm [<0046>]TJ
+0.995 0 0 1 238.795 353.089 Tm [<0053>]TJ
+1 0 0 1 242.513 353.089 Tm [<005400460054>]TJ
+0.995 0 0 1 257.109 353.089 Tm [<004A0055>]TJ
+1 0 0 1 263.294 353.089 Tm [<0054>-218<00440050>]TJ
+0.995 0 0 1 278.508 353.089 Tm [<004D>]TJ
+1 0 0 1 281.046 353.089 Tm [<0050>]TJ
+0.995 0 0 1 286.077 353.089 Tm [<0053>]TJ
+1 0 0 1 289.795 353.089 Tm [<0054>-218<0050>]TJ
+0.995 0 0 1 300.994 353.089 Tm [<0053>]TJ
+1 0 0 1 306.884 353.089 Tm [<005400460046004E0054>]TJ
+0.995 0 0 1 334.003 353.089 Tm [<0055>]TJ
+1 0 0 1 337.552 353.089 Tm [<0050>-218<00430046>-218<005100560054004900460045>]TJ
+0.995 0 0 1 388.115 353.089 Tm [<004A>]TJ
+1 0 0 1 390.752 353.089 Tm [<004F>]TJ
+0.995 0 0 1 398.484 353.089 Tm [<0055>]TJ
+1 0 0 1 402.033 353.089 Tm [<00490046>-218<004300420044004C0048>]TJ
+0.995 0 0 1 437.292 353.089 Tm [<0053>]TJ
+1 0 0 1 441.009 353.089 Tm [<00500056004F0045>]TJ
+0.995 0 0 1 462.05 353.089 Tm [<000F>-294<0265>]TJ
+1 0 0 1 477.456 353.089 Tm [<0046>]TJ
+1 0 0 1 113.386 341.134 Tm [<004C0046005A0058005000530045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 150.317 341.134 Tm [<0051005200510048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 171.718 341.134 Tm [<00440042004F>-220<0042004D00540050>-220<00430046>-220<0056005400460045>-220<00550050>-220<00450046004F005000550046>-220<004F0050>-220<0042004F004A004E00420055004A0050004F000F>]TJ
+1.025 0 0 1 133.311 329.179 Tm [<002A>]TJ
+1.015 0 0 1 136.62 329.179 Tm [<004F>]TJ
+1.025 0 0 1 144.492 329.179 Tm [<0055>]TJ
+1.015 0 0 1 148.147 329.179 Tm [<00490046>-220<005100500051>]TJ
+1.025 0 0 1 176.051 329.179 Tm [<000E>]TJ
+1.015 0 0 1 179.268 329.179 Tm [<00560051>-220<004E0046004F0056>]TJ
+1.025 0 0 1 215.807 329.179 Tm [<000D>-219<0055>]TJ
+1.015 0 0 1 224.204 329.179 Tm [<00490046>-220<00440049>]TJ
+1.025 0 0 1 246.03 329.179 Tm [<004A004D>]TJ
+1.015 0 0 1 251.361 329.179 Tm [<0045>]TJ
+1.025 0 0 1 256.629 329.179 Tm [<0053>]TJ
+1.015 0 0 1 260.459 329.179 Tm [<0046004F>-220<0050>]TJ
+1.025 0 0 1 277.937 329.179 Tm [<0047>]TJ
+1.015 0 0 1 283.577 329.179 Tm [<0042>-220<004300500050004C004E0042>]TJ
+1.025 0 0 1 323.605 329.179 Tm [<0053>]TJ
+1.015 0 0 1 327.435 329.179 Tm [<004C>-220<0042>]TJ
+1.025 0 0 1 339.301 329.179 Tm [<0053>]TJ
+1.015 0 0 1 343.13 329.179 Tm [<0046>-220<0045>]TJ
+1.025 0 0 1 355.128 329.179 Tm [<004A>]TJ
+1.015 0 0 1 357.844 329.179 Tm [<00540051>]TJ
+1.025 0 0 1 367.177 329.179 Tm [<004D>]TJ
+1.015 0 0 1 369.792 329.179 Tm [<0042>]TJ
+1.025 0 0 1 374.382 329.179 Tm [<005A>]TJ
+1.015 0 0 1 379.1 329.179 Tm [<00460045>-220<00420054>-220<0042>-221<005400560043>]TJ
+1.025 0 0 1 423.334 329.179 Tm [<000E>]TJ
+1.015 0 0 1 426.551 329.179 Tm [<004E0046004F0056>]TJ
+1.025 0 0 1 450.244 329.179 Tm [<000F>]TJ
+1.015 0 0 1 455.78 329.179 Tm [<00290046004F00440046>]TJ
+1.03 0 0 1 113.386 317.224 Tm [<0055>]TJ
+1.02 0 0 1 117.059 317.224 Tm [<0049>]TJ
+1.03 0 0 1 122.598 317.224 Tm [<004A>]TJ
+1.02 0 0 1 125.327 317.224 Tm [<0054>-215<004300500050004C004E0042>]TJ
+1.03 0 0 1 164.96 317.224 Tm [<0053>]TJ
+1.02 0 0 1 168.808 317.224 Tm [<004C>]TJ
+1.03 0 0 1 176.065 317.224 Tm [<004A>]TJ
+1.02 0 0 1 178.794 317.224 Tm [<0054004F>]TJ
+1.03 0 0 1 188.539 317.224 Tm [<00080055>]TJ
+1.02 0 0 1 196.472 317.224 Tm [<0044>]TJ
+1.03 0 0 1 200.567 317.224 Tm [<004D004A>]TJ
+1.02 0 0 1 205.924 317.224 Tm [<0044004C00420043>]TJ
+1.03 0 0 1 224.876 317.224 Tm [<004D>]TJ
+1.02 0 0 1 227.503 317.224 Tm [<0046>-215<0042004F>]TJ
+1.03 0 0 1 244.494 317.224 Tm [<005A>]TJ
+1.02 0 0 1 249.235 317.224 Tm [<004E0050>]TJ
+1.03 0 0 1 262.618 317.224 Tm [<0053>]TJ
+1.02 0 0 1 266.466 317.224 Tm [<0046>]TJ
+1.03 0 0 1 270.989 317.224 Tm [<000D>]TJ
+1.02 0 0 1 275.69 317.224 Tm [<0043004600440042005600540046>]TJ
+1.03 0 0 1 310.241 317.224 Tm [<004A0055>]TJ
+1.02 0 0 1 316.645 317.224 Tm [<0054>-215<0050004F>]TJ
+1.03 0 0 1 333.708 317.224 Tm [<004D005A>-213<0047>]TJ
+1.02 0 0 1 346.689 317.224 Tm [<0056004F0044>]TJ
+1.03 0 0 1 361.82 317.224 Tm [<0055004A>]TJ
+1.02 0 0 1 368.223 317.224 Tm [<0050004F>]TJ
+1.03 0 0 1 381.211 317.224 Tm [<004A>]TJ
+1.02 0 0 1 383.94 317.224 Tm [<0054>]TJ
+1.03 0 0 1 390.201 317.224 Tm [<0055>]TJ
+1.02 0 0 1 393.875 317.224 Tm [<0050>-215<0054004900500058>]TJ
+1.03 0 0 1 425.034 317.224 Tm [<0055>]TJ
+1.02 0 0 1 428.707 317.224 Tm [<00490046>-215<005400560043004E0046004F0056>]TJ
+1.03 0 0 1 479.376 317.224 Tm [<000F>]TJ
+1.015 0 0 1 113.386 305.269 Tm [<0265>]TJ
+1.01 0 0 1 123.65 305.269 Tm [<0042>]TJ
+1.015 0 0 1 128.218 305.269 Tm [<00550008>]TJ
+1.01 0 0 1 133.881 305.269 Tm [<0054>-217<00580049>]TJ
+1.015 0 0 1 152.434 305.269 Tm [<005A>-216<0055>]TJ
+1.01 0 0 1 162.917 305.269 Tm [<00490046>]TJ
+1.015 0 0 1 175.07 305.269 Tm [<00EB0053>]TJ
+1.01 0 0 1 184.535 305.269 Tm [<0054>]TJ
+1.015 0 0 1 188.57 305.269 Tm [<0055>-216<004A0055>]TJ
+1.01 0 0 1 200.692 305.269 Tm [<0046004E>-217<0050>]TJ
+1.015 0 0 1 220.613 305.269 Tm [<0047>-216<0055>]TJ
+1.01 0 0 1 229.803 305.269 Tm [<0049>]TJ
+1.015 0 0 1 235.287 305.269 Tm [<004A>]TJ
+1.01 0 0 1 237.976 305.269 Tm [<0054>-217<005400560043>]TJ
+1.015 0 0 1 258.673 305.269 Tm [<000E>]TJ
+1.01 0 0 1 261.858 305.269 Tm [<004E0046004F0056>]TJ
+1.015 0 0 1 287.625 305.269 Tm [<004A>]TJ
+1.01 0 0 1 290.315 305.269 Tm [<0054>-217<0044>]TJ
+1.015 0 0 1 300.597 305.269 Tm [<004D004A>]TJ
+1.01 0 0 1 305.875 305.269 Tm [<0044004C00420043>]TJ
+1.015 0 0 1 324.642 305.269 Tm [<004D>]TJ
+1.01 0 0 1 327.23 305.269 Tm [<0046>-217<0042004F0045>]TJ
+1.015 0 0 1 351.517 305.269 Tm [<0053>]TJ
+1.01 0 0 1 355.309 305.269 Tm [<0046>]TJ
+1.015 0 0 1 359.787 305.269 Tm [<0047>]TJ
+1.01 0 0 1 363.164 305.269 Tm [<0046>]TJ
+1.015 0 0 1 367.642 305.269 Tm [<0053>]TJ
+1.01 0 0 1 371.434 305.269 Tm [<0054>]TJ
+1.015 0 0 1 377.66 305.269 Tm [<0055>]TJ
+1.01 0 0 1 381.28 305.269 Tm [<0050>]TJ
+1.015 0 0 1 388.554 305.269 Tm [<0055>]TJ
+1.01 0 0 1 392.174 305.269 Tm [<00490042>]TJ
+1.015 0 0 1 402.226 305.269 Tm [<0055>]TJ
+1.01 0 0 1 408.038 305.269 Tm [<00510042>]TJ
+1.015 0 0 1 417.858 305.269 Tm [<0053>]TJ
+1.01 0 0 1 421.65 305.269 Tm [<0046004F>]TJ
+1.015 0 0 1 431.743 305.269 Tm [<0055>]TJ
+1.01 0 0 1 437.555 305.269 Tm [<004300500050004C004E0042>]TJ
+1.015 0 0 1 470.599 305.269 Tm [<0053>]TJ
+1.01 0 0 1 474.391 305.269 Tm [<004C>]TJ
+1.015 0 0 1 479.412 305.269 Tm [<000F>]TJ
+0.975 0 0 1 113.386 293.313 Tm [<0265>]TJ
+0.98 0 0 1 123.245 293.313 Tm [<0046>]TJ
+0.975 0 0 1 129.792 293.313 Tm [<0055>]TJ
+0.98 0 0 1 133.269 293.313 Tm [<0046>]TJ
+0.975 0 0 1 137.614 293.313 Tm [<00590055>]TJ
+0.98 0 0 1 147.898 293.313 Tm [<0056005400460045>-225<0043>]TJ
+0.975 0 0 1 173.571 293.313 Tm [<005A>-226<0055>]TJ
+0.98 0 0 1 183.738 293.313 Tm [<0049>]TJ
+0.975 0 0 1 189.059 293.313 Tm [<004A>]TJ
+0.98 0 0 1 191.643 293.313 Tm [<0054>]TJ
+0.975 0 0 1 197.76 293.313 Tm [<004A0055>]TJ
+0.98 0 0 1 203.822 293.313 Tm [<0046004E>]TJ
+0.975 0 0 1 218.296 293.313 Tm [<004A>]TJ
+0.98 0 0 1 220.88 293.313 Tm [<0054>]TJ
+0.975 0 0 1 226.997 293.313 Tm [<0055>]TJ
+0.98 0 0 1 230.475 293.313 Tm [<00490046>]TJ
+0.975 0 0 1 242.342 293.313 Tm [<0057>]TJ
+0.98 0 0 1 246.937 293.313 Tm [<0042>]TJ
+0.975 0 0 1 251.37 293.313 Tm [<004D>]TJ
+0.98 0 0 1 253.856 293.313 Tm [<00560046>-225<0050>]TJ
+0.975 0 0 1 270.489 293.313 Tm [<0047>-226<0055>]TJ
+0.98 0 0 1 279.412 293.313 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 291.28 293.313 Tm [<0050004800510058>]TJ
+0.975 0 0 1 310.105 293.313 Tm [<0057>]TJ
+0.98 0 0 1 314.788 293.313 Tm [<0048>]TJ
+0.975 0 0 1 319.494 293.313 Tm [<005B0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 331.06 293.313 Tm [<0042>]TJ
+0.975 0 0 1 335.493 293.313 Tm [<005500550053004A>]TJ
+0.98 0 0 1 348.674 293.313 Tm [<00430056>]TJ
+0.975 0 0 1 358.799 293.313 Tm [<0055>]TJ
+0.98 0 0 1 362.276 293.313 Tm [<0046>]TJ
+0.975 0 0 1 368.823 293.313 Tm [<004A>]TJ
+0.98 0 0 1 371.407 293.313 Tm [<004F>]TJ
+0.975 0 0 1 379.057 293.313 Tm [<0055>]TJ
+0.98 0 0 1 382.534 293.313 Tm [<00490046>]TJ
+/F117 7.97011 Tf 0.975 0 0 1 394.402 293.313 Tm [<004D>]TJ
+0.98 0 0 1 399.085 293.313 Tm [<00520045>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 410.699 293.313 Tm [<00510042>]TJ
+0.975 0 0 1 420.228 293.313 Tm [<0053>]TJ
+0.98 0 0 1 423.871 293.313 Tm [<0042004E0046>]TJ
+0.975 0 0 1 440.576 293.313 Tm [<0055>]TJ
+0.98 0 0 1 444.053 293.313 Tm [<0046>]TJ
+0.975 0 0 1 448.398 293.313 Tm [<0053000D>]TJ
+0.98 0 0 1 456.625 293.313 Tm [<0056004F>]TJ
+0.975 0 0 1 467.228 293.313 Tm [<004D>]TJ
+0.98 0 0 1 469.715 293.313 Tm [<004600540054>]TJ
+1 0 0 1 113.386 281.358 Tm [<005500490046>-220<004300500050004C004E00420053004C>-220<004900420054>-220<005500490046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 204.385 281.358 Tm [<00510052005600580045005000480051005800570048005B0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 269.006 281.358 Tm [<005000510055004A0050004F000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 245.493 Tm [<002F00420057004A004800420055004A0050004F>-200<00440050004E004E0042004F00450054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 75.785 221.582 Tm [<003F004400510046004B00520055>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 221.582 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<0265004A0054>-220<0044005300460042005500460054>-220<0042004F>-220<0042004F0044004900500053>-220<00440042004D004D00460045>]TJ
+/F123 7.97011 Tf 1 0 0 1 231.443 209.627 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 260.257 209.627 Tm [<000D>-220<00580049004A00440049>-220<004A0054>-220<0042>-220<0045004600540055004A004F00420055004A0050004F>-220<004700500053>-220<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 385.756 209.627 Tm [<003F004A005200570052>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 411.96 209.627 Tm [<00440050004E004E0042004F0045000F>]TJ
+0.97 0 0 1 133.311 197.672 Tm [<002A>]TJ
+0.98 0 0 1 136.442 197.672 Tm [<004F>-181<005800490042>]TJ
+0.97 0 0 1 160.057 197.672 Tm [<0055>-183<0047>]TJ
+0.98 0 0 1 168.518 197.672 Tm [<0050>]TJ
+0.97 0 0 1 173.449 197.672 Tm [<004D004D>]TJ
+0.98 0 0 1 178.397 197.672 Tm [<005000580054>]TJ
+0.97 0 0 1 193.882 197.672 Tm [<000D>]TJ
+0.98 0 0 1 198.107 197.672 Tm [<0042>]TJ
+0.97 0 0 1 202.539 197.672 Tm [<004D004D>]TJ
+0.98 0 0 1 209.261 197.672 Tm [<00440050004E004E0042004F00450054>-181<0044>]TJ
+0.97 0 0 1 258.573 197.672 Tm [<0053>]TJ
+0.98 0 0 1 262.197 197.672 Tm [<00460042>]TJ
+0.97 0 0 1 270.975 197.672 Tm [<0055>]TJ
+0.98 0 0 1 274.434 197.672 Tm [<0046>-181<0042>-182<0044>]TJ
+0.97 0 0 1 290.694 197.672 Tm [<004D004A>]TJ
+0.98 0 0 1 295.739 197.672 Tm [<0044004C00420043>]TJ
+0.97 0 0 1 313.948 197.672 Tm [<004D>]TJ
+0.98 0 0 1 316.421 197.672 Tm [<0046>-181<004900430050>]TJ
+0.97 0 0 1 337.761 197.672 Tm [<0059>]TJ
+0.98 0 0 1 344.116 197.672 Tm [<00440050004F>]TJ
+0.97 0 0 1 358.429 197.672 Tm [<0055>]TJ
+0.98 0 0 1 361.889 197.672 Tm [<0042>]TJ
+0.97 0 0 1 366.321 197.672 Tm [<004A>]TJ
+0.98 0 0 1 368.892 197.672 Tm [<004F>]TJ
+0.97 0 0 1 374.34 197.672 Tm [<004A>]TJ
+0.98 0 0 1 376.911 197.672 Tm [<004F0048>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 388.682 197.672 Tm [<001F0057>]TJ
+0.98 0 0 1 397.999 197.672 Tm [<0048>]TJ
+0.97 0 0 1 402.705 197.672 Tm [<005B00570021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 416.68 197.672 Tm [<000D>]TJ
+0.98 0 0 1 420.905 197.672 Tm [<0058>]TJ
+0.97 0 0 1 427.544 197.672 Tm [<004A0055>]TJ
+0.98 0 0 1 433.574 197.672 Tm [<0049>-181<0042004F>]TJ
+0.97 0 0 1 450.55 197.672 Tm [<004A>]TJ
+0.98 0 0 1 453.121 197.672 Tm [<004E0042>]TJ
+0.97 0 0 1 465.481 197.672 Tm [<0055004A>]TJ
+0.98 0 0 1 471.511 197.672 Tm [<0050004F>]TJ
+0.99 0 0 1 113.386 185.717 Tm [<0054005100460044004A00EB00460045>-223<0043005A>]TJ
+/F123 7.97011 Tf 0.99 0 0 1 162.527 185.717 Tm [<001F005200530057004C005200510044004F>-608<0056>-1<0057005C004F00480021>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 238.643 185.717 Tm [<000D>-224<00420054>-223<004A004F>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 264.242 185.717 Tm [<003F0056004B0052005A004500520052004E005000440055004E0056>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 333.008 185.717 Tm [<00420043005000570046000F>-300<02650042005500080054>-224<00580049005A>-223<002A>-224<0058004A004D004D>-224<0050004F004D005A>-224<00450046005400440053004A00430046>]TJ
+1 0 0 1 113.386 173.762 Tm [<005500490046>-220<004200440055004A0050004F>-220<005100460053004700500053004E00460045>-220<0043005A>-220<005500490046>-220<00440050004E004E0042004F00450054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 85.389 149.851 Tm [<003F004A005200570052>]TJ
+0 g 0 G
+1 0 0 1 113.386 149.851 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 149.851 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 149.851 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 149.851 Tm [<001F00510044005000480021001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 113.386 137.896 Tm [<0028>]TJ
+0.98 0 0 1 119.912 137.896 Tm [<0050>]TJ
+0.97 0 0 1 126.95 137.896 Tm [<0055>]TJ
+0.98 0 0 1 130.409 137.896 Tm [<0050>]TJ
+0.97 0 0 1 137.447 137.896 Tm [<0055>]TJ
+0.98 0 0 1 140.907 137.896 Tm [<00490046>-215<004500460054>]TJ
+0.97 0 0 1 166.027 137.896 Tm [<0055004A>]TJ
+0.98 0 0 1 172.057 137.896 Tm [<004F0042>]TJ
+0.97 0 0 1 181.937 137.896 Tm [<0055004A>]TJ
+0.98 0 0 1 187.968 137.896 Tm [<0050004F>-215<0042004F004400490050>]TJ
+0.97 0 0 1 224.52 137.896 Tm [<0053>]TJ
+0.98 0 0 1 228.144 137.896 Tm [<00460045>-215<0043>]TJ
+0.97 0 0 1 244.653 137.896 Tm [<005A>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 251.225 137.896 Tm [<001F>]TJ
+0.98 0 0 1 255.883 137.896 Tm [<0051004400500048>]TJ
+0.97 0 0 1 274.708 137.896 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 282.301 137.896 Tm [<0009>]TJ
+0.98 0 0 1 285.471 137.896 Tm [<00580049>]TJ
+0.97 0 0 1 297.431 137.896 Tm [<004A>]TJ
+0.98 0 0 1 300.001 137.896 Tm [<00440049>-215<00440042004F>-216<00430046>]TJ
+0.97 0 0 1 338.709 137.896 Tm [<0055>]TJ
+0.98 0 0 1 342.169 137.896 Tm [<00490046>]TJ
+0.97 0 0 1 353.942 137.896 Tm [<0057>]TJ
+0.98 0 0 1 358.513 137.896 Tm [<0042>]TJ
+0.97 0 0 1 362.945 137.896 Tm [<004D>]TJ
+0.98 0 0 1 365.419 137.896 Tm [<00560046>-215<0050>]TJ
+0.97 0 0 1 381.957 137.896 Tm [<0047>-218<0055>]TJ
+0.98 0 0 1 390.752 137.896 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 402.525 137.896 Tm [<004400510046004B0052>]TJ
+0.97 0 0 1 426.057 137.896 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 432.822 137.896 Tm [<0042>]TJ
+0.97 0 0 1 437.255 137.896 Tm [<0053>]TJ
+0.98 0 0 1 440.879 137.896 Tm [<00480056004E0046004F>]TJ
+0.97 0 0 1 468.304 137.896 Tm [<0055>-218<004A>]TJ
+0.98 0 0 1 476.442 137.896 Tm [<004F>]TJ
+1 0 0 1 113.386 125.941 Tm [<0042>-220<004300500050004C004E00420053004C000A000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01EB>]TJ
+ET
+endstream
+endobj
+216 0 obj <<
+/Type /Page
+/Contents 217 0 R
+/Resources 215 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 192 0 R
+/Annots [ 214 0 R 218 0 R ]
+>> endobj
+214 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 434.554 573.358 442.086]
+/A << /S /GoTo /D (ptx@section_link:12) >>
+>> endobj
+218 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [506.756 426.249 534.078 433.119]
+/A << /S /GoTo /D (ptx@section_link:12) >>
+>> endobj
+219 0 obj <<
+/D [216 0 R /XYZ 113.386 255.186 null]
+>> endobj
+215 0 obj <<
+/Font << /F105 5 0 R /F123 17 0 R /F111 6 0 R /F63 7 0 R /F117 23 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+222 0 obj <<
+/Length 20800
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 80.587 640.013 Tm [<003F004A0052005700520024>]TJ
+0 g 0 G
+1 0 0 1 113.386 640.013 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 640.013 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 640.013 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 640.013 Tm [<001F00510044005000480021001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 628.058 Tm [<0265004A>]TJ
+1.005 0 0 1 126.276 628.058 Tm [<0054>-219<0044>]TJ
+1.01 0 0 1 136.525 628.058 Tm [<0053>]TJ
+1.005 0 0 1 140.298 628.058 Tm [<00460042>]TJ
+1.01 0 0 1 149.3 628.058 Tm [<0055>]TJ
+1.005 0 0 1 152.902 628.058 Tm [<00460054>]TJ
+1.01 0 0 1 163.572 628.058 Tm [<0055>]TJ
+1.005 0 0 1 167.174 628.058 Tm [<00490046>]TJ
+1.01 0 0 1 179.286 628.058 Tm [<00EB0053>]TJ
+1.005 0 0 1 188.704 628.058 Tm [<0054>]TJ
+1.01 0 0 1 192.719 628.058 Tm [<0055>-218<004A0055>]TJ
+1.005 0 0 1 204.799 628.058 Tm [<0046004E>-219<0050>]TJ
+1.01 0 0 1 224.641 628.058 Tm [<0047>]TJ
+1.005 0 0 1 230.201 628.058 Tm [<0042>-219<0043>]TJ
+1.01 0 0 1 242.042 628.058 Tm [<004A>]TJ
+1.005 0 0 1 244.719 628.058 Tm [<0045>]TJ
+1.01 0 0 1 249.935 628.058 Tm [<004A0053>]TJ
+1.005 0 0 1 256.385 628.058 Tm [<00460044>]TJ
+1.01 0 0 1 264.876 628.058 Tm [<0055004A>]TJ
+1.005 0 0 1 271.155 628.058 Tm [<0050004F0042>]TJ
+1.01 0 0 1 286.344 628.058 Tm [<004D>-218<004D004A>]TJ
+1.005 0 0 1 296.371 628.058 Tm [<004F004C>-219<00440042>]TJ
+1.01 0 0 1 317.735 628.058 Tm [<004D004D>]TJ
+1.005 0 0 1 322.886 628.058 Tm [<00460045>]TJ
+/F123 7.97011 Tf 1.01 0 0 1 334.758 628.058 Tm [<001F>]TJ
+1.005 0 0 1 339.608 628.058 Tm [<0051004400500048>]TJ
+1.01 0 0 1 358.913 628.058 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 363.764 628.058 Tm [<000F>]TJ
+1.005 0 0 1 369.174 628.058 Tm [<0024>]TJ
+1.01 0 0 1 375.031 628.058 Tm [<004D004A>]TJ
+1.005 0 0 1 380.284 628.058 Tm [<0044004C>]TJ
+1.01 0 0 1 389.315 628.058 Tm [<004A>]TJ
+1.005 0 0 1 391.992 628.058 Tm [<004F0048>]TJ
+/F123 7.97011 Tf 1.01 0 0 1 404.444 628.058 Tm [<001F0057>]TJ
+1.005 0 0 1 414.145 628.058 Tm [<0048>]TJ
+1.01 0 0 1 418.971 628.058 Tm [<005B00570021>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 436.548 628.058 Tm [<0048005000460054>-219<005800490046>]TJ
+1.01 0 0 1 473.661 628.058 Tm [<0053>]TJ
+1.005 0 0 1 477.434 628.058 Tm [<0046>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 616.103 Tm [<003F004A0052005700520025>]TJ
+/F105 9.96264 Tf 1 0 0 1 144.391 616.103 Tm [<0058004A00550049>]TJ
+/F123 7.97011 Tf 1 0 0 1 165.004 616.103 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 196.837 616.103 Tm [<004900420054>-220<004300460046004F>-220<004A00540054005600460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 80.587 592.193 Tm [<003F004A0052005700520025>]TJ
+0 g 0 G
+1 0 0 1 113.386 592.193 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 592.193 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 592.193 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 592.193 Tm [<001F00510044005000480021001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 580.238 Tm [<0265004A>]TJ
+0.98 0 0 1 125.765 580.238 Tm [<0054>-217<0044>]TJ
+0.97 0 0 1 135.736 580.238 Tm [<0053>]TJ
+0.98 0 0 1 139.36 580.238 Tm [<00460042>]TJ
+0.97 0 0 1 148.137 580.238 Tm [<0055>]TJ
+0.98 0 0 1 151.597 580.238 Tm [<00460054>]TJ
+0.97 0 0 1 161.977 580.238 Tm [<0055>]TJ
+0.98 0 0 1 165.437 580.238 Tm [<00490046>-217<0054004600440050004F0045>]TJ
+0.97 0 0 1 207.004 580.238 Tm [<004A0055>]TJ
+0.98 0 0 1 213.034 580.238 Tm [<0046004E>-217<0050>]TJ
+0.97 0 0 1 232.359 580.238 Tm [<0047>]TJ
+0.98 0 0 1 237.707 580.238 Tm [<0042>-217<0043>]TJ
+0.97 0 0 1 249.23 580.238 Tm [<004A>]TJ
+0.98 0 0 1 251.801 580.238 Tm [<0045>]TJ
+0.97 0 0 1 256.888 580.238 Tm [<004A0053>]TJ
+0.98 0 0 1 263.082 580.238 Tm [<00460044>]TJ
+0.97 0 0 1 271.361 580.238 Tm [<0055004A>]TJ
+0.98 0 0 1 277.392 580.238 Tm [<0050004F0042>]TJ
+0.97 0 0 1 292.203 580.238 Tm [<004D>-219<004D004A>]TJ
+0.98 0 0 1 301.842 580.238 Tm [<004F004C>-217<00440042>]TJ
+0.97 0 0 1 322.65 580.238 Tm [<004D004D>]TJ
+0.98 0 0 1 327.598 580.238 Tm [<00460045>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 339.15 580.238 Tm [<001F>]TJ
+0.98 0 0 1 343.808 580.238 Tm [<0051004400500048>]TJ
+0.97 0 0 1 362.634 580.238 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 367.292 580.238 Tm [<000F>]TJ
+0.98 0 0 1 372.558 580.238 Tm [<0024>]TJ
+0.97 0 0 1 378.27 580.238 Tm [<004D004A>]TJ
+0.98 0 0 1 383.314 580.238 Tm [<0044004C>]TJ
+0.97 0 0 1 392.121 580.238 Tm [<004A>]TJ
+0.98 0 0 1 394.691 580.238 Tm [<004F0048>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 406.81 580.238 Tm [<001F0057>]TJ
+0.98 0 0 1 416.126 580.238 Tm [<0048>]TJ
+0.97 0 0 1 420.833 580.238 Tm [<005B00570021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 437.755 580.238 Tm [<0048005000460054>-217<005800490046>]TJ
+0.97 0 0 1 473.921 580.238 Tm [<0053>]TJ
+0.98 0 0 1 477.545 580.238 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 113.386 568.282 Tm [<003F>]TJ
+1.015 0 0 1 118.284 568.282 Tm [<004A0052>]TJ
+1.02 0 0 1 128.033 568.282 Tm [<0057>]TJ
+1.015 0 0 1 132.931 568.282 Tm [<0052>]TJ
+1.01 0 0 1 137.806 568.282 Tm [<0024>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 144.854 568.282 Tm [<0058>]TJ
+1.02 0 0 1 151.73 568.282 Tm [<004A0055>]TJ
+1.015 0 0 1 158.071 568.282 Tm [<0049>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 165.781 568.282 Tm [<001F>]TJ
+1.015 0 0 1 170.679 568.282 Tm [<0051004400500048>]TJ
+1.02 0 0 1 190.176 568.282 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 198.1 568.282 Tm [<004900420054>-217<004300460046004F>]TJ
+1.02 0 0 1 236.443 568.282 Tm [<004A>]TJ
+1.015 0 0 1 239.146 568.282 Tm [<00540054005600460045>]TJ
+1.02 0 0 1 262.363 568.282 Tm [<000F>-289<0265>]TJ
+1.015 0 0 1 278.109 568.282 Tm [<0046>]TJ
+1.02 0 0 1 282.609 568.282 Tm [<0053>]TJ
+1.015 0 0 1 286.419 568.282 Tm [<0046>]TJ
+1.02 0 0 1 290.919 568.282 Tm [<0008>]TJ
+1.015 0 0 1 292.972 568.282 Tm [<0054>-217<004F0050>-217<004F004600460045>]TJ
+1.02 0 0 1 334.281 568.282 Tm [<0047>]TJ
+1.015 0 0 1 337.675 568.282 Tm [<0050>]TJ
+1.02 0 0 1 342.782 568.282 Tm [<0053>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 348.791 568.282 Tm [<003F>]TJ
+1.015 0 0 1 353.689 568.282 Tm [<004A0052>]TJ
+1.02 0 0 1 363.438 568.282 Tm [<0057>]TJ
+1.015 0 0 1 368.336 568.282 Tm [<0052>]TJ
+1.01 0 0 1 373.211 568.282 Tm [<0024>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 380.259 568.282 Tm [<0055>]TJ
+1.015 0 0 1 383.897 568.282 Tm [<0050>-217<00420051005100460042>]TJ
+1.02 0 0 1 415.441 568.282 Tm [<0053>]TJ
+1.015 0 0 1 421.45 568.282 Tm [<00430046>]TJ
+1.02 0 0 1 431.097 568.282 Tm [<0047>]TJ
+1.015 0 0 1 434.491 568.282 Tm [<0050>]TJ
+1.02 0 0 1 439.597 568.282 Tm [<0053>]TJ
+1.015 0 0 1 443.408 568.282 Tm [<0046>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 450.106 568.282 Tm [<003F>]TJ
+1.015 0 0 1 455.004 568.282 Tm [<004A0052>]TJ
+1.02 0 0 1 464.753 568.282 Tm [<0057>]TJ
+1.015 0 0 1 469.651 568.282 Tm [<00520025>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 479.4 568.282 Tm [<000F>]TJ
+1 0 0 1 113.386 556.327 Tm [<00360054004A004F0048>-220<00550049004600540046>-220<004E00420044005300500054>-220<004A0054>-220<004B005600540055>-220<0054004A004E0051004D00460053>-220<005500490042004F>-220<0042>-220<00510042004A0053>-220<00500047>]TJ
+/F111 7.97011 Tf 1 0 0 1 310.686 556.327 Tm [<003F004400510046004B00520055>]TJ
+/F105 9.96264 Tf 1 0 0 1 344.302 556.327 Tm [<00080054>-220<0058004A00550049>-220<0042>-220<00510042004A0053>-220<00500047>]TJ
+/F111 7.97011 Tf 1 0 0 1 408.681 556.327 Tm [<003F004A005200570052>]TJ
+/F105 9.96264 Tf 1 0 0 1 432.692 556.327 Tm [<00080054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 56.575 532.417 Tm [<003F0049004C0055005600570056004F004C00470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 532.417 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 532.417 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 532.417 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 532.417 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 520.462 Tm [<00280050>-220<00550050>-220<005500490046>-220<00510053004600540046004F005500420055004A0050004F00080054>-220<00EB005300540055>-220<0054004D004A00450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 61.378 496.551 Tm [<003F004F0044005600570056004F004C00470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 496.551 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 496.551 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 496.551 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 496.551 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 484.596 Tm [<00280050>-220<00550050>-220<005500490046>-220<00510053004600540046004F005500420055004A0050004F00080054>-220<004D004200540055>-220<0054004D004A00450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 61.378 460.686 Tm [<003F00530055004800590056004F004C00470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 460.686 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 460.686 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 460.686 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 460.686 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 448.731 Tm [<00280050>-220<00550050>-220<005500490046>-220<00510053004600540046004F005500420055004A0050004F00080054>-220<0051005300460057004A005000560054>-220<0054004D004A00450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 61.378 424.82 Tm [<003F00510048005B00570056004F004C00470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 424.82 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 424.82 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 424.82 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 424.82 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 412.865 Tm [<00280050>-220<00550050>-220<005500490046>-220<00510053004600540046004F005500420055004A0050004F00080054>-220<004F004600590055>-220<0054004D004A00450046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 388.955 Tm [<003F00530055004800590056005700480053>]TJ
+0 g 0 G
+1 0 0 1 113.386 388.955 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 388.955 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 388.955 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 388.955 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 377 Tm [<00280050>-220<004300420044004C0058004200530045>-220<0050004F00440046000F>-293<002600520056004A00570042004D0046004F0055>-220<00550050>-220<0042>-220<0053004A004800490055>-220<0044004D004A0044004C000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 353.089 Tm [<003F00510048005B00570056005700480053>]TJ
+0 g 0 G
+1 0 0 1 113.386 353.089 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 353.089 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 353.089 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 353.089 Tm [<001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 341.134 Tm [<00280050>-220<0047005000530058004200530045>-220<0050004F00440046000F>-293<002600520056004A00570042004D0046004F0055>-220<00550050>-220<0042>-220<004D004600470055>-220<0044004D004A0044004C000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 56.575 317.224 Tm [<003F0056004B0052005A00520055004B004C00470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 317.224 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 317.224 Tm [<001F005200530057004C005200510044004F>-602<00560057>-1<005C004F00480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 195.025 317.224 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.827 317.224 Tm [<001F004400460057004C0052005100560021001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 305.269 Tm [<0265004A>]TJ
+1.01 0 0 1 126.339 305.269 Tm [<0054>-221<00540049005000580054>-222<0050>]TJ
+1.015 0 0 1 165.398 305.269 Tm [<0053>]TJ
+1.01 0 0 1 171.422 305.269 Tm [<0049>]TJ
+1.015 0 0 1 176.906 305.269 Tm [<004A>]TJ
+1.01 0 0 1 179.595 305.269 Tm [<004500460054>]TJ
+1.015 0 0 1 195.583 305.269 Tm [<0055>]TJ
+1.01 0 0 1 199.203 305.269 Tm [<00490046>-221<0054>]TJ
+1.015 0 0 1 215.431 305.269 Tm [<0055>]TJ
+1.01 0 0 1 219.051 305.269 Tm [<004600510054>]TJ
+1.015 0 0 1 235.049 305.269 Tm [<0053>]TJ
+1.01 0 0 1 238.841 305.269 Tm [<0046>]TJ
+1.015 0 0 1 243.318 305.269 Tm [<0047>]TJ
+1.01 0 0 1 246.696 305.269 Tm [<0046>]TJ
+1.015 0 0 1 251.173 305.269 Tm [<00530053>]TJ
+1.01 0 0 1 258.758 305.269 Tm [<00460045>]TJ
+1.015 0 0 1 270.71 305.269 Tm [<0055>]TJ
+1.01 0 0 1 274.33 305.269 Tm [<0050>]TJ
+1.015 0 0 1 281.643 305.269 Tm [<004A>]TJ
+1.01 0 0 1 284.333 305.269 Tm [<004F>]TJ
+/F123 7.97011 Tf 1.015 0 0 1 292.18 305.269 Tm [<001F>]TJ
+1.01 0 0 1 297.054 305.269 Tm [<00440046>]TJ
+1.015 0 0 1 306.755 305.269 Tm [<0057004C>]TJ
+1.01 0 0 1 316.504 305.269 Tm [<005200510056>]TJ
+1.015 0 0 1 331.055 305.269 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 335.929 305.269 Tm [<000D>]TJ
+1.01 0 0 1 340.648 305.269 Tm [<00580049>]TJ
+1.015 0 0 1 352.975 305.269 Tm [<004A>]TJ
+1.01 0 0 1 355.665 305.269 Tm [<00440049>]TJ
+1.015 0 0 1 367.436 305.269 Tm [<004A>]TJ
+1.01 0 0 1 370.125 305.269 Tm [<0054>-221<004E004200450046>-222<0050>]TJ
+1.015 0 0 1 406.165 305.269 Tm [<0047>-220<0041>]TJ
+/F123 7.97011 Tf 1.015 0 0 1 413.817 305.269 Tm [<001F>]TJ
+1.01 0 0 1 418.691 305.269 Tm [<00440046>]TJ
+1.015 0 0 1 428.392 305.269 Tm [<0057004C>]TJ
+1.01 0 0 1 438.141 305.269 Tm [<00520051>]TJ
+1.015 0 0 1 447.841 305.269 Tm [<0021>]TJ
+/F111 7.97011 Tf 1.015 0 0 1 452.716 305.269 Tm [<0020>]TJ
+/F123 7.97011 Tf 1.015 0 0 1 457.59 305.269 Tm [<001F>]TJ
+1.01 0 0 1 462.464 305.269 Tm [<0056>]TJ
+1.015 0 0 1 467.315 305.269 Tm [<0057>]TJ
+1.01 0 0 1 472.189 305.269 Tm [<00480053>]TJ
+0.975 0 0 1 113.386 293.313 Tm [<004F004C>]TJ
+0.985 0 0 1 122.75 293.313 Tm [<0056>]TJ
+0.975 0 0 1 127.481 293.313 Tm [<00570021>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 136.845 293.313 Tm [<0008>]TJ
+0.985 0 0 1 140.986 293.313 Tm [<00510042>]TJ
+0.975 0 0 1 150.564 293.313 Tm [<004A0053>]TJ
+0.985 0 0 1 156.79 293.313 Tm [<0054>-222<0054004600510042>]TJ
+0.975 0 0 1 180.784 293.313 Tm [<0053>]TJ
+0.985 0 0 1 184.426 293.313 Tm [<0042>]TJ
+0.975 0 0 1 188.881 293.313 Tm [<0055>]TJ
+0.985 0 0 1 192.359 293.313 Tm [<00460045>-222<0043>]TJ
+0.975 0 0 1 209.012 293.313 Tm [<005A>]TJ
+0.985 0 0 1 215.679 293.313 Tm [<00440050004E004E00420054>]TJ
+0.975 0 0 1 248.916 293.313 Tm [<000D>]TJ
+0.985 0 0 1 253.477 293.313 Tm [<005800490046>]TJ
+0.975 0 0 1 269.865 293.313 Tm [<0053>]TJ
+0.985 0 0 1 273.508 293.313 Tm [<0046>]TJ
+/F123 7.97011 Tf 0.975 0 0 1 280.053 293.313 Tm [<001F>]TJ
+0.985 0 0 1 284.736 293.313 Tm [<00440046>]TJ
+0.975 0 0 1 294.196 293.313 Tm [<0057004C>]TJ
+0.985 0 0 1 303.561 293.313 Tm [<00520051>]TJ
+0.975 0 0 1 313.021 293.313 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 320.709 293.313 Tm [<004A>]TJ
+0.985 0 0 1 323.293 293.313 Tm [<0054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 329.407 293.313 Tm [<00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 338.867 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 343.429 293.313 Tm [<0052>]TJ
+0.975 0 0 1 348.159 293.313 Tm [<00490049>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 359.702 293.313 Tm [<0050>]TJ
+0.975 0 0 1 364.658 293.313 Tm [<0053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.975 0 0 1 370.479 293.313 Tm [<0057>]TJ
+0.985 0 0 1 375.161 293.313 Tm [<0052004A004A>]TJ
+0.975 0 0 1 389.352 293.313 Tm [<004F>]TJ
+0.985 0 0 1 394.034 293.313 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 398.765 293.313 Tm [<000D>]TJ
+0.985 0 0 1 403.326 293.313 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 0.975 0 0 1 420.548 293.313 Tm [<001F>]TJ
+0.985 0 0 1 425.231 293.313 Tm [<0056>]TJ
+0.975 0 0 1 429.961 293.313 Tm [<0057>]TJ
+0.985 0 0 1 434.643 293.313 Tm [<00480053>]TJ
+0.975 0 0 1 448.906 293.313 Tm [<004F004C>]TJ
+0.985 0 0 1 458.27 293.313 Tm [<0056>]TJ
+0.975 0 0 1 463.001 293.313 Tm [<00570021>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 475.371 293.313 Tm [<004A>]TJ
+0.985 0 0 1 477.955 293.313 Tm [<0054>]TJ
+0.98 0 0 1 113.386 281.358 Tm [<0042>]TJ
+0.97 0 0 1 119.937 281.358 Tm [<004D004A>]TJ
+0.98 0 0 1 124.981 281.358 Tm [<0054>]TJ
+0.97 0 0 1 128.896 281.358 Tm [<0055>]TJ
+0.98 0 0 1 134.474 281.358 Tm [<0050>]TJ
+0.97 0 0 1 139.405 281.358 Tm [<0047>]TJ
+0.98 0 0 1 144.75 281.358 Tm [<0054>]TJ
+0.97 0 0 1 148.666 281.358 Tm [<0055>]TJ
+0.98 0 0 1 152.125 281.358 Tm [<00460051>-217<004F0042004E00460054>-216<0054004600510042>]TJ
+0.97 0 0 1 209.66 281.358 Tm [<0053>]TJ
+0.98 0 0 1 213.284 281.358 Tm [<0042>]TJ
+0.97 0 0 1 217.716 281.358 Tm [<0055>]TJ
+0.98 0 0 1 221.176 281.358 Tm [<00460045>-217<0043>]TJ
+0.97 0 0 1 237.695 281.358 Tm [<005A>]TJ
+0.98 0 0 1 244.278 281.358 Tm [<00540051004200440046>]TJ
+0.97 0 0 1 266.002 281.358 Tm [<000F>-299<0265>]TJ
+0.98 0 0 1 281.076 281.358 Tm [<0046>-216<00420044>]TJ
+0.97 0 0 1 295.906 281.358 Tm [<0055004A>]TJ
+0.98 0 0 1 301.936 281.358 Tm [<0050004F>]TJ
+0.97 0 0 1 314.433 281.358 Tm [<004A>]TJ
+0.98 0 0 1 317.003 281.358 Tm [<0054>]TJ
+0.97 0 0 1 323.037 281.358 Tm [<0055>]TJ
+0.98 0 0 1 326.496 281.358 Tm [<0050>-217<0054004900500058>]TJ
+0.97 0 0 1 354.351 281.358 Tm [<000D>]TJ
+0.98 0 0 1 358.851 281.358 Tm [<0049>]TJ
+0.97 0 0 1 364.172 281.358 Tm [<004A>]TJ
+0.98 0 0 1 366.743 281.358 Tm [<00450046>]TJ
+0.97 0 0 1 376.174 281.358 Tm [<000D>]TJ
+0.98 0 0 1 380.675 281.358 Tm [<0050>]TJ
+0.97 0 0 1 385.605 281.358 Tm [<0053>-219<0053>]TJ
+0.98 0 0 1 394.971 281.358 Tm [<0046>]TJ
+0.97 0 0 1 399.316 281.358 Tm [<0057>]TJ
+0.98 0 0 1 403.887 281.358 Tm [<0046>]TJ
+0.97 0 0 1 408.232 281.358 Tm [<0053>]TJ
+0.98 0 0 1 411.856 281.358 Tm [<00540046>]TJ
+0.97 0 0 1 422.234 281.358 Tm [<0055>]TJ
+0.98 0 0 1 425.693 281.358 Tm [<00490046>]TJ
+0.97 0 0 1 437.477 281.358 Tm [<0057004A>]TJ
+0.98 0 0 1 444.619 281.358 Tm [<0054>]TJ
+0.97 0 0 1 448.534 281.358 Tm [<004A>]TJ
+0.98 0 0 1 451.104 281.358 Tm [<0043>]TJ
+0.97 0 0 1 456.074 281.358 Tm [<004A004D004A0055005A>]TJ
+0.98 0 0 1 473.732 281.358 Tm [<0050>]TJ
+0.97 0 0 1 478.662 281.358 Tm [<0047>]TJ
+1 0 0 1 113.386 269.403 Tm [<0042>-220<005400460055>-220<00500047>-220<00540055004600510054000F>-293<002700500053>-220<004A004F005400550042004F00440046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 245.493 Tm [<003F0056004B0052005A00520055004B004C00470048005E005200510020002400030025000F00520049004900200026000F>-1<00570052004A004A004F00480020002700030028000300290060005E0025005800570057005200510060>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 221.582 Tm [<0058>]TJ
+0.97 0 0 1 120.025 221.582 Tm [<004A004D004D000D>]TJ
+0.98 0 0 1 131.923 221.582 Tm [<005800490046004F>-201<0044>]TJ
+0.97 0 0 1 159.577 221.582 Tm [<004D004A>]TJ
+0.98 0 0 1 164.622 221.582 Tm [<0044004C00460045>]TJ
+0.97 0 0 1 182.86 221.582 Tm [<000D>]TJ
+0.98 0 0 1 187.239 221.582 Tm [<004E0042004C0046>]TJ
+0.97 0 0 1 210.783 221.582 Tm [<0055>]TJ
+0.98 0 0 1 214.243 221.582 Tm [<00490046>-201<0054>]TJ
+0.97 0 0 1 229.791 221.582 Tm [<0055>]TJ
+0.98 0 0 1 233.25 221.582 Tm [<004600510054>-201<004F0042004E00460045>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 277.78 221.582 Tm [<0024>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 284.477 221.582 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 301.411 221.582 Tm [<0025>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 308.084 221.582 Tm [<0057004A>]TJ
+0.98 0 0 1 315.226 221.582 Tm [<0054>]TJ
+0.97 0 0 1 319.141 221.582 Tm [<004A>]TJ
+0.98 0 0 1 321.711 221.582 Tm [<0043>]TJ
+0.97 0 0 1 326.681 221.582 Tm [<004D>]TJ
+0.98 0 0 1 329.155 221.582 Tm [<0046>]TJ
+0.97 0 0 1 333.499 221.582 Tm [<000D>]TJ
+0.98 0 0 1 337.879 221.582 Tm [<0049>]TJ
+0.97 0 0 1 343.2 221.582 Tm [<004A>]TJ
+0.98 0 0 1 345.771 221.582 Tm [<00450046>-201<0054>]TJ
+0.97 0 0 1 361.084 221.582 Tm [<0055>]TJ
+0.98 0 0 1 364.544 221.582 Tm [<00460051>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 375.952 221.582 Tm [<0026>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 380.658 221.582 Tm [<000D>]TJ
+0.98 0 0 1 384.992 221.582 Tm [<0042004F0045>]TJ
+0.97 0 0 1 401.927 221.582 Tm [<0053>]TJ
+0.98 0 0 1 405.55 221.582 Tm [<0046>]TJ
+0.97 0 0 1 409.895 221.582 Tm [<0057>]TJ
+0.98 0 0 1 414.466 221.582 Tm [<0046>]TJ
+0.97 0 0 1 418.811 221.582 Tm [<0053>]TJ
+0.98 0 0 1 422.435 221.582 Tm [<00540046>]TJ
+0.97 0 0 1 432.661 221.582 Tm [<0055>]TJ
+0.98 0 0 1 436.121 221.582 Tm [<00490046>]TJ
+0.97 0 0 1 447.754 221.582 Tm [<0057004A>]TJ
+0.98 0 0 1 454.895 221.582 Tm [<0054>]TJ
+0.97 0 0 1 458.81 221.582 Tm [<004A>]TJ
+0.98 0 0 1 461.381 221.582 Tm [<0043>]TJ
+0.97 0 0 1 466.35 221.582 Tm [<004A004D004A0055005A>]TJ
+1 0 0 1 113.386 209.627 Tm [<00500047>]TJ
+/F111 7.97011 Tf 1 0 0 1 123.936 209.627 Tm [<0027>]TJ
+/F105 9.96264 Tf 1 0 0 1 128.739 209.627 Tm [<000D>]TJ
+/F111 7.97011 Tf 1 0 0 1 133.371 209.627 Tm [<0028>]TJ
+/F105 9.96264 Tf 1 0 0 1 140.365 209.627 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 157.83 209.627 Tm [<0029>]TJ
+/F105 9.96264 Tf 1 0 0 1 162.632 209.627 Tm [<000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01EC>]TJ
+ET
+endstream
+endobj
+221 0 obj <<
+/Type /Page
+/Contents 222 0 R
+/Resources 220 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 192 0 R
+>> endobj
+220 0 obj <<
+/Font << /F111 6 0 R /F123 17 0 R /F105 5 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+225 0 obj <<
+/Length 29162
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<002400FF00FC00FF01020103000D>-220<010300F800F100F400F50103000D>-220<00F100FE00F4>-220<00F900FD00F100F700F50103>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 113.386 616.103 Tm [<00340050004E0046>-315<0042>]TJ
+1.03 0 0 1 144.11 616.103 Tm [<005500550053004A>]TJ
+1.02 0 0 1 158.035 616.103 Tm [<00430056>]TJ
+1.03 0 0 1 168.573 616.103 Tm [<0055>]TJ
+1.02 0 0 1 172.247 616.103 Tm [<00460054>-315<004200430050>]TJ
+1.03 0 0 1 198.968 616.103 Tm [<0057>]TJ
+1.02 0 0 1 203.821 616.103 Tm [<0046>]TJ
+1.03 0 0 1 211.55 616.103 Tm [<0055>]TJ
+1.02 0 0 1 215.223 616.103 Tm [<0042004C0046>]TJ
+1.03 0 0 1 232.636 616.103 Tm [<0057>]TJ
+1.02 0 0 1 237.49 616.103 Tm [<0042>]TJ
+1.03 0 0 1 242.103 616.103 Tm [<004D>]TJ
+1.02 0 0 1 244.73 616.103 Tm [<005600460054>-315<00450046004F0050>]TJ
+1.03 0 0 1 282.517 616.103 Tm [<0055>]TJ
+1.02 0 0 1 286.191 616.103 Tm [<00460045>-315<0043>]TJ
+1.03 0 0 1 304.386 616.103 Tm [<005A>-312<0055>]TJ
+1.02 0 0 1 316.007 616.103 Tm [<00490046>-315<00510049>]TJ
+1.03 0 0 1 340.116 616.103 Tm [<0053>]TJ
+1.02 0 0 1 343.964 616.103 Tm [<0042005400460054>]TJ
+/F63 9.96264 Tf 1.02 0 0 1 364.456 616.103 Tm [<004F0042004E00460045>-286<00440050>]TJ
+1.03 0 0 1 401.829 616.103 Tm [<004D>]TJ
+1.02 0 0 1 404.384 616.103 Tm [<0050>]TJ
+1.03 0 0 1 408.846 616.103 Tm [<0053>]TJ
+1.02 0 0 1 415.496 616.103 Tm [<0050>]TJ
+1.03 0 0 1 419.957 616.103 Tm [<0053>]TJ
+1.02 0 0 1 426.607 616.103 Tm [<00540049004200450046>-286<0050>]TJ
+1.03 0 0 1 456.369 616.103 Tm [<0053>]TJ
+1.02 0 0 1 463.019 616.103 Tm [<00440050>]TJ
+1.03 0 0 1 471.138 616.103 Tm [<004D>]TJ
+1.02 0 0 1 473.693 616.103 Tm [<0050>]TJ
+1.03 0 0 1 478.155 616.103 Tm [<0053>]TJ
+1 0 0 1 113.386 604.148 Tm [<0046005900510053004600540054004A0050004F>]TJ
+/F105 9.96264 Tf 1 0 0 1 153.336 604.148 Tm [<000D>-220<00500053>]TJ
+/F63 9.96264 Tf 1 0 0 1 168.928 604.148 Tm [<004F0042004E00460045>-200<00440050004D00500053>-200<00500053>-200<00440050004D00500053>-200<0046005900510053004600540054004A0050004F>]TJ
+/F105 9.96264 Tf 1 0 0 1 287.553 604.148 Tm [<000F>-293<0265005000540046>-220<004200530046>-220<004600590051004D0042004A004F00460045>-220<004A004F>-220<00550049004A0054>-220<0054004600440055004A0050004F000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 568.282 Tm [<00240050004D005000530054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 113.386 556.327 Tm [<0022>]TJ
+0.98 0 0 1 121.38 556.327 Tm [<00440050>]TJ
+0.97 0 0 1 130.245 556.327 Tm [<004D>]TJ
+0.98 0 0 1 132.719 556.327 Tm [<0050>]TJ
+0.97 0 0 1 137.649 556.327 Tm [<0053>]TJ
+0.98 0 0 1 143.32 556.327 Tm [<00440042004F>-209<0046>]TJ
+0.97 0 0 1 163.528 556.327 Tm [<004A0055>]TJ
+0.98 0 0 1 169.558 556.327 Tm [<00490046>]TJ
+0.97 0 0 1 179.223 556.327 Tm [<0053>]TJ
+0.98 0 0 1 184.895 556.327 Tm [<00430046>-209<0042>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 202.736 556.327 Tm [<004F0042004E00460045>-190<00440050>]TJ
+0.97 0 0 1 237.705 556.327 Tm [<004D>]TJ
+0.98 0 0 1 240.111 556.327 Tm [<0050>]TJ
+0.97 0 0 1 244.397 556.327 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 249.962 556.327 Tm [<0050>]TJ
+0.97 0 0 1 254.892 556.327 Tm [<0053>]TJ
+0.98 0 0 1 260.564 556.327 Tm [<0042>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 267.043 556.327 Tm [<00440050>]TJ
+0.97 0 0 1 274.844 556.327 Tm [<004D>]TJ
+0.98 0 0 1 277.251 556.327 Tm [<0050>]TJ
+0.97 0 0 1 281.537 556.327 Tm [<0053>]TJ
+0.98 0 0 1 286.915 556.327 Tm [<0046>]TJ
+0.97 0 0 1 290.86 556.327 Tm [<0059>]TJ
+0.98 0 0 1 295.073 556.327 Tm [<0051>]TJ
+0.97 0 0 1 299.681 556.327 Tm [<0053>]TJ
+0.98 0 0 1 303.199 556.327 Tm [<004600540054>]TJ
+0.97 0 0 1 314.271 556.327 Tm [<004A>]TJ
+0.98 0 0 1 316.696 556.327 Tm [<0050004F>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 325.962 556.327 Tm [<000F>-297<0265>]TJ
+0.98 0 0 1 341.012 556.327 Tm [<0046>]TJ
+0.97 0 0 1 347.404 556.327 Tm [<004D>]TJ
+0.98 0 0 1 349.878 556.327 Tm [<0042>]TJ
+0.97 0 0 1 354.311 556.327 Tm [<00550055>]TJ
+0.98 0 0 1 361.23 556.327 Tm [<0046>]TJ
+0.97 0 0 1 365.575 556.327 Tm [<0053>-211<004A>]TJ
+0.98 0 0 1 373.816 556.327 Tm [<0054>]TJ
+0.97 0 0 1 379.779 556.327 Tm [<0055>]TJ
+0.98 0 0 1 383.238 556.327 Tm [<00490046>-209<0054>]TJ
+0.97 0 0 1 398.866 556.327 Tm [<004A>]TJ
+0.98 0 0 1 401.437 556.327 Tm [<004E0051>]TJ
+0.97 0 0 1 414.461 556.327 Tm [<004D>]TJ
+0.98 0 0 1 416.935 556.327 Tm [<0046>]TJ
+0.97 0 0 1 421.28 556.327 Tm [<0053000F>-297<002A0055>-212<004A>]TJ
+0.98 0 0 1 441.354 556.327 Tm [<0054>-209<0042>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 453.796 556.327 Tm [<001F>]TJ
+0.98 0 0 1 458.455 556.327 Tm [<00460052>]TJ
+0.97 0 0 1 467.867 556.327 Tm [<004F>]TJ
+0.98 0 0 1 472.525 556.327 Tm [<0052>]TJ
+0.97 0 0 1 477.232 556.327 Tm [<0055>]TJ
+1.015 0 0 1 113.386 544.372 Tm [<0050005200470048>]TJ
+1.025 0 0 1 132.883 544.372 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 1.025 0 0 1 145.775 544.372 Tm [<0047>]TJ
+1.015 0 0 1 149.186 544.372 Tm [<0050>]TJ
+1.025 0 0 1 154.292 544.372 Tm [<004D004D>]TJ
+1.015 0 0 1 159.521 544.372 Tm [<0050005800460045>-219<0043>]TJ
+1.025 0 0 1 188.639 544.372 Tm [<005A>]TJ
+1.015 0 0 1 195.577 544.372 Tm [<00420054>-219<004E0042004F>]TJ
+1.025 0 0 1 224.887 544.372 Tm [<005A>]TJ
+/F123 7.97011 Tf 1.025 0 0 1 231.825 544.372 Tm [<001F>]TJ
+1.015 0 0 1 236.747 544.372 Tm [<00510058005000450048>]TJ
+1.025 0 0 1 261.119 544.372 Tm [<0055>]TJ
+1.015 0 0 1 266.041 544.372 Tm [<0056>]TJ
+1.025 0 0 1 270.916 544.372 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 278.885 544.372 Tm [<00420054>]TJ
+1.025 0 0 1 289.751 544.372 Tm [<0053>]TJ
+1.015 0 0 1 293.58 544.372 Tm [<004600520056>]TJ
+1.025 0 0 1 308.546 544.372 Tm [<004A0053>]TJ
+1.015 0 0 1 315.092 544.372 Tm [<00460045>]TJ
+1.025 0 0 1 324.86 544.372 Tm [<000D>-218<0053>]TJ
+1.015 0 0 1 333.419 544.372 Tm [<0042004F0048>]TJ
+1.025 0 0 1 348.364 544.372 Tm [<004A>]TJ
+1.015 0 0 1 351.081 544.372 Tm [<004F0048>]TJ
+1.025 0 0 1 363.655 544.372 Tm [<00470053>]TJ
+1.015 0 0 1 370.896 544.372 Tm [<0050004E>]TJ
+1.025 0 0 1 386.433 544.372 Tm [<01E9>-217<0055>]TJ
+1.015 0 0 1 397.701 544.372 Tm [<0050>]TJ
+1.025 0 0 1 405.028 544.372 Tm [<01EA000F>]TJ
+1.01 0 0 1 415.929 544.372 Tm [<0022>]TJ
+1.015 0 0 1 424.246 544.372 Tm [<00440050>]TJ
+1.025 0 0 1 433.428 544.372 Tm [<004D>]TJ
+1.015 0 0 1 436.042 544.372 Tm [<0050>]TJ
+1.025 0 0 1 441.149 544.372 Tm [<0053>]TJ
+1.015 0 0 1 447.198 544.372 Tm [<004E005000450046>]TJ
+1.025 0 0 1 470.284 544.372 Tm [<004D>-217<004A>]TJ
+1.015 0 0 1 477.835 544.372 Tm [<0054>]TJ
+1.01 0 0 1 113.386 532.417 Tm [<0050004F0046>-215<0050>]TJ
+1.015 0 0 1 135.808 532.417 Tm [<0047>-214<0055>]TJ
+1.01 0 0 1 144.973 532.417 Tm [<00490046>-215<004C0046>]TJ
+1.015 0 0 1 166.6 532.417 Tm [<005A>]TJ
+1.01 0 0 1 171.272 532.417 Tm [<00580050>]TJ
+1.015 0 0 1 183.195 532.417 Tm [<0053>]TJ
+1.01 0 0 1 186.987 532.417 Tm [<00450054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.01 0 0 1 198.432 532.417 Tm [<004A>]TJ
+1.015 0 0 1 203.282 532.417 Tm [<0055>]TJ
+1.01 0 0 1 208.156 532.417 Tm [<0048>]TJ
+1.015 0 0 1 213.007 532.417 Tm [<005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 220.048 532.417 Tm [<0009>]TJ
+1.01 0 0 1 223.365 532.417 Tm [<0050>]TJ
+1.015 0 0 1 228.446 532.417 Tm [<0053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.01 0 0 1 234.405 532.417 Tm [<004A>]TJ
+1.015 0 0 1 239.255 532.417 Tm [<0055>]TJ
+1.01 0 0 1 244.13 532.417 Tm [<0044>]TJ
+1.015 0 0 1 248.98 532.417 Tm [<005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 253.854 532.417 Tm [<000A000D>]TJ
+1.01 0 0 1 261.821 532.417 Tm [<00580049>]TJ
+1.015 0 0 1 274.147 532.417 Tm [<004A>]TJ
+1.01 0 0 1 276.837 532.417 Tm [<00440049>]TJ
+1.015 0 0 1 288.543 532.417 Tm [<0055>]TJ
+1.01 0 0 1 292.163 532.417 Tm [<0042004C00460054>-215<0050004F0046>]TJ
+/F123 7.97011 Tf 1.015 0 0 1 329.772 532.417 Tm [<001F>]TJ
+1.01 0 0 1 334.647 532.417 Tm [<00510058005000450048>]TJ
+1.015 0 0 1 358.898 532.417 Tm [<00550021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 371.641 532.417 Tm [<000901E9>-214<004A>]TJ
+1.01 0 0 1 385.154 532.417 Tm [<0054>-215<0043>]TJ
+1.015 0 0 1 396.477 532.417 Tm [<004D>]TJ
+1.01 0 0 1 399.066 532.417 Tm [<00420044004C>]TJ
+1.015 0 0 1 412.71 532.417 Tm [<000D>-214<01EA>-215<004A>]TJ
+1.01 0 0 1 427.555 532.417 Tm [<0054>-215<00580049>]TJ
+1.015 0 0 1 446.084 532.417 Tm [<004A0055>]TJ
+1.01 0 0 1 452.394 532.417 Tm [<0046>]TJ
+1.015 0 0 1 456.871 532.417 Tm [<000A000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.015 0 0 1 464.837 532.417 Tm [<0055>]TJ
+1.01 0 0 1 469.712 532.417 Tm [<004A0045>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 479.412 532.417 Tm [<000D>]TJ
+1.015 0 0 1 113.386 520.462 Tm [<00580049>]TJ
+1.025 0 0 1 125.773 520.462 Tm [<004A>]TJ
+1.015 0 0 1 128.489 520.462 Tm [<00440049>]TJ
+1.025 0 0 1 140.298 520.462 Tm [<0055>]TJ
+1.015 0 0 1 143.953 520.462 Tm [<0042004C00460054>]TJ
+1.025 0 0 1 164.367 520.462 Tm [<0055>]TJ
+1.015 0 0 1 168.023 520.462 Tm [<0049>]TJ
+1.025 0 0 1 173.534 520.462 Tm [<0053>]TJ
+1.015 0 0 1 177.363 520.462 Tm [<00460046>]TJ
+/F123 7.97011 Tf 1.025 0 0 1 188.585 520.462 Tm [<001F>]TJ
+1.015 0 0 1 193.507 520.462 Tm [<00510058005000450048>]TJ
+1.025 0 0 1 217.879 520.462 Tm [<0055>]TJ
+1.015 0 0 1 222.801 520.462 Tm [<0056>]TJ
+1.025 0 0 1 227.676 520.462 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.025 0 0 1 235.647 520.462 Tm [<00090053>]TJ
+1.015 0 0 1 242.826 520.462 Tm [<00460045>]TJ
+1.025 0 0 1 252.594 520.462 Tm [<000D>]TJ
+1.015 0 0 1 257.325 520.462 Tm [<0048>]TJ
+1.025 0 0 1 262.037 520.462 Tm [<0053>]TJ
+1.015 0 0 1 265.867 520.462 Tm [<00460046004F>-219<0042004F0045>-220<0043>]TJ
+1.025 0 0 1 305.602 520.462 Tm [<004D>]TJ
+1.015 0 0 1 308.216 520.462 Tm [<00560046>]TJ
+1.025 0 0 1 318.055 520.462 Tm [<000A000D>]TJ
+1.015 0 0 1 326.136 520.462 Tm [<0042004F0045>]TJ
+1.025 0 0 1 343.86 520.462 Tm [<004A>]TJ
+1.015 0 0 1 346.576 520.462 Tm [<0054>-219<004200450045>]TJ
+1.025 0 0 1 367.98 520.462 Tm [<004A0055004A0057>]TJ
+1.015 0 0 1 381.899 520.462 Tm [<0046>]TJ
+1.025 0 0 1 386.399 520.462 Tm [<000D>]TJ
+1.015 0 0 1 391.13 520.462 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.015 0 0 1 408.854 520.462 Tm [<00460050>]TJ
+1.025 0 0 1 418.603 520.462 Tm [<005C>]TJ
+1.015 0 0 1 423.525 520.462 Tm [<004E>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.025 0 0 1 428.399 520.462 Tm [<000D>]TJ
+1.015 0 0 1 433.131 520.462 Tm [<00580049>]TJ
+1.025 0 0 1 445.518 520.462 Tm [<004A>]TJ
+1.015 0 0 1 448.234 520.462 Tm [<00440049>]TJ
+1.025 0 0 1 460.042 520.462 Tm [<0055>]TJ
+1.015 0 0 1 463.698 520.462 Tm [<0042004C00460054>]TJ
+1 0 0 1 113.386 508.506 Tm [<0047005000560053>-220<004F0056004E0043004600530054>-220<00090044005A0042004F000D>-220<004E004200480046004F00550042000D>-220<005A0046004D004D00500058000D>-220<0043004D00420044004C000A000D>-220<0042004F0045>-220<004A0054>-220<005400560043005400550053004200440055004A00570046000F>-293<00290046004F00440046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 484.596 Tm [<003F00560048005700530044005500440050004800570048005500030056004F004C00470048001D>]TJ
+1 0 0 1 113.386 472.641 Tm [<00030003004500440046004E004A0055005200580051004700030020000300B50055004A0045000300140003001300030013>-1<00B5>]TJ
+1 0 0 1 113.386 460.686 Tm [<000300030049005200550048004A0055005200580051004700030020000300B500460050005C004E00030014000300130003>-1<00140003001300B5>]TJ
+1 0 0 1 113.386 448.731 Tm [<00030003001100110011>]TJ
+1 0 0 1 113.386 436.775 Tm [<003F005300440055>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 412.865 Tm [<00540046>]TJ
+1.03 0 0 1 121.983 412.865 Tm [<0055>]TJ
+1.02 0 0 1 125.656 412.865 Tm [<0054>]TJ
+1.03 0 0 1 132.387 412.865 Tm [<0055>]TJ
+1.02 0 0 1 136.061 412.865 Tm [<00490046>-261<0054>]TJ
+1.03 0 0 1 152.851 412.865 Tm [<004D004A>]TJ
+1.02 0 0 1 158.208 412.865 Tm [<00450046>]TJ
+1.03 0 0 1 168.024 412.865 Tm [<0008>]TJ
+1.02 0 0 1 170.097 412.865 Tm [<0054>-261<004300420044004C0048>]TJ
+1.03 0 0 1 200.515 412.865 Tm [<0053>]TJ
+1.02 0 0 1 204.363 412.865 Tm [<00500056004F0045>-261<00440050>]TJ
+1.03 0 0 1 237.707 412.865 Tm [<004D>]TJ
+1.02 0 0 1 240.334 412.865 Tm [<0050>]TJ
+1.03 0 0 1 245.466 412.865 Tm [<0053>-258<0055>]TJ
+1.02 0 0 1 255.643 412.865 Tm [<0050>]TJ
+1.03 0 0 1 263.431 412.865 Tm [<0053>]TJ
+1.02 0 0 1 267.279 412.865 Tm [<00460045>]TJ
+1.03 0 0 1 277.095 412.865 Tm [<000D>]TJ
+1.02 0 0 1 282.381 412.865 Tm [<0042004F0045>]TJ
+1.03 0 0 1 300.615 412.865 Tm [<004A0055>]TJ
+1.02 0 0 1 307.018 412.865 Tm [<0054>]TJ
+1.03 0 0 1 313.748 412.865 Tm [<0047>]TJ
+1.02 0 0 1 317.176 412.865 Tm [<0050>]TJ
+1.03 0 0 1 322.307 412.865 Tm [<0053>]TJ
+1.02 0 0 1 326.156 412.865 Tm [<00460048>]TJ
+1.03 0 0 1 335.413 412.865 Tm [<0053>]TJ
+1.02 0 0 1 339.261 412.865 Tm [<00500056004F0045>-261<00440050>]TJ
+1.03 0 0 1 372.606 412.865 Tm [<004D>]TJ
+1.02 0 0 1 375.233 412.865 Tm [<0050>]TJ
+1.03 0 0 1 380.364 412.865 Tm [<0053>-258<0055>]TJ
+1.02 0 0 1 390.542 412.865 Tm [<0050>-261<0048>]TJ
+1.03 0 0 1 403.064 412.865 Tm [<0053>]TJ
+1.02 0 0 1 406.912 412.865 Tm [<00460046004F>]TJ
+1.03 0 0 1 421.627 412.865 Tm [<000F>]TJ
+1.02 0 0 1 428.455 412.865 Tm [<00380049>]TJ
+1.03 0 0 1 442.935 412.865 Tm [<004A>]TJ
+1.02 0 0 1 445.665 412.865 Tm [<00440049>]TJ
+1.03 0 0 1 457.954 412.865 Tm [<004A>]TJ
+1.02 0 0 1 460.684 412.865 Tm [<0054>-261<004F0050>]TJ
+1.03 0 0 1 478.216 412.865 Tm [<0055>]TJ
+1 0 0 1 113.386 400.91 Tm [<0053004600440050004E004E0046004F004500460045000F>]TJ
+0.99 0 0 1 133.311 388.955 Tm [<00240050>]TJ
+0.985 0 0 1 144.062 388.955 Tm [<004D>]TJ
+0.99 0 0 1 146.574 388.955 Tm [<0050>]TJ
+0.985 0 0 1 151.555 388.955 Tm [<0053>]TJ
+0.99 0 0 1 157.449 388.955 Tm [<0046>]TJ
+0.985 0 0 1 161.838 388.955 Tm [<0059>]TJ
+0.99 0 0 1 166.49 388.955 Tm [<0051>]TJ
+0.985 0 0 1 171.638 388.955 Tm [<0053>]TJ
+0.99 0 0 1 175.318 388.955 Tm [<004600540054>]TJ
+0.985 0 0 1 187.617 388.955 Tm [<004A>]TJ
+0.99 0 0 1 190.228 388.955 Tm [<0050004F0054>-224<0042>]TJ
+0.985 0 0 1 211.359 388.955 Tm [<0053>]TJ
+0.99 0 0 1 215.039 388.955 Tm [<0046004F>]TJ
+0.985 0 0 1 224.932 388.955 Tm [<00080055>-225<0057>]TJ
+0.99 0 0 1 237.283 388.955 Tm [<0046>]TJ
+0.985 0 0 1 241.672 388.955 Tm [<0053005A>]TJ
+0.99 0 0 1 252.1 388.955 Tm [<00490042004F0045>]TJ
+0.985 0 0 1 272.596 388.955 Tm [<005A000D>]TJ
+0.99 0 0 1 281.754 388.955 Tm [<0054>]TJ
+0.985 0 0 1 285.709 388.955 Tm [<004A>]TJ
+0.99 0 0 1 288.319 388.955 Tm [<004F00440046>]TJ
+0.985 0 0 1 304.401 388.955 Tm [<005A>]TJ
+0.99 0 0 1 308.935 388.955 Tm [<00500056>-224<00490042>]TJ
+0.985 0 0 1 331.191 388.955 Tm [<0057>]TJ
+0.99 0 0 1 335.833 388.955 Tm [<0046>]TJ
+0.985 0 0 1 342.436 388.955 Tm [<0055>]TJ
+0.99 0 0 1 345.949 388.955 Tm [<0050>]TJ
+0.985 0 0 1 353.144 388.955 Tm [<0055005A>]TJ
+0.99 0 0 1 361.191 388.955 Tm [<00510046>]TJ
+0.985 0 0 1 372.943 388.955 Tm [<0055>]TJ
+0.99 0 0 1 376.456 388.955 Tm [<00490046004E>-224<00420054>-225<004E0042004F>]TJ
+0.985 0 0 1 425.081 388.955 Tm [<005A>-225<0055004A>]TJ
+0.99 0 0 1 437.953 388.955 Tm [<004E00460054>-224<00420054>]TJ
+0.985 0 0 1 467.168 388.955 Tm [<005A>]TJ
+0.99 0 0 1 471.701 388.955 Tm [<00500056>]TJ
+1 0 0 1 113.386 377 Tm [<004F004600460045>-220<005500490046004E000F>-293<00380049004A00440049>-220<004A0054>-220<00580049005A>-220<00550049004600530046>-220<00460059004A005400550054>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<00440050004E004E0042004F0045>-220<00550050>-220<004500460044004D004200530046>-220<0042>]TJ
+/F63 9.96264 Tf 1 0 0 1 414.938 377 Tm [<004F0042004E00460045>-200<00440050004D00500053>]TJ
+/F105 9.96264 Tf 1 0 0 1 461.195 377 Tm [<001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 353.089 Tm [<003F00510048005A00460052004F00520055>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 353.089 Tm [<001F00510044005000480021001F00460052004F00520055>-603<0050005200470048004F0021>]TJ
+/F111 7.97011 Tf 1 0 0 1 204.63 353.089 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 209.432 353.089 Tm [<001F0052005300440046004C0057005C0021>]TJ
+/F111 7.97011 Tf 1 0 0 1 252.653 353.089 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 257.455 353.089 Tm [<001F00590044004F0058004800560021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 113.386 341.134 Tm [<0022>]TJ
+1.03 0 0 1 119.514 341.134 Tm [<00470055>]TJ
+1.02 0 0 1 126.615 341.134 Tm [<0046>]TJ
+1.03 0 0 1 131.137 341.134 Tm [<0053>-237<0055>]TJ
+1.02 0 0 1 141.096 341.134 Tm [<0049>]TJ
+1.03 0 0 1 146.634 341.134 Tm [<004A>]TJ
+1.02 0 0 1 149.364 341.134 Tm [<0054>-239<004500460044>]TJ
+1.03 0 0 1 169.788 341.134 Tm [<004D>]TJ
+1.02 0 0 1 172.415 341.134 Tm [<0042>]TJ
+1.03 0 0 1 177.029 341.134 Tm [<0053>]TJ
+1.02 0 0 1 180.877 341.134 Tm [<0042>]TJ
+1.03 0 0 1 185.49 341.134 Tm [<0055004A>]TJ
+1.02 0 0 1 191.893 341.134 Tm [<0050004F>]TJ
+1.03 0 0 1 205.133 341.134 Tm [<005A>]TJ
+1.02 0 0 1 209.874 341.134 Tm [<00500056>-239<00440042004F>-240<005600540046>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 256.026 341.134 Tm [<001F>]TJ
+1.02 0 0 1 260.972 341.134 Tm [<0051004400500048>]TJ
+1.03 0 0 1 280.565 341.134 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 288.776 341.134 Tm [<0055>]TJ
+1.02 0 0 1 292.45 341.134 Tm [<0050>-239<00450046004F0050>]TJ
+1.03 0 0 1 320.638 341.134 Tm [<0055>]TJ
+1.02 0 0 1 324.311 341.134 Tm [<0046>-239<0042>-240<00440050>]TJ
+1.03 0 0 1 347.549 341.134 Tm [<004D>]TJ
+1.02 0 0 1 350.176 341.134 Tm [<0050>]TJ
+1.03 0 0 1 355.308 341.134 Tm [<0053000D>]TJ
+1.02 0 0 1 364.169 341.134 Tm [<00580049>]TJ
+1.03 0 0 1 376.617 341.134 Tm [<004A>]TJ
+1.02 0 0 1 379.347 341.134 Tm [<00440049>]TJ
+1.03 0 0 1 391.418 341.134 Tm [<004A0055>]TJ
+1.02 0 0 1 397.821 341.134 Tm [<00540046>]TJ
+1.03 0 0 1 406.418 341.134 Tm [<004D0047>-237<004A>]TJ
+1.02 0 0 1 417.64 341.134 Tm [<0054>-239<00540050004E0046004900500058>-240<00420054>-240<0042>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 340.686 Tm [<0036004F004D004A004C0046>]TJ
+/F105 7.97011 Tf 1 0 0 1 513.443 340.686 Tm [<003D004F004600580054004D004A00450046>]TJ
+/F63 7.97011 Tf 1 0 0 1 546.631 340.686 Tm [<00500053>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 331.719 Tm [<003D004F004600580042005300460042>]TJ
+/F63 7.97011 Tf 1 0 0 1 522.163 331.719 Tm [<000D>]TJ
+/F105 7.97011 Tf 1 0 0 1 525.701 331.719 Tm [<003D004F0046005800440050004D00500053>]TJ
+/F63 7.97011 Tf 1 0 0 1 560.124 331.719 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 322.753 Tm [<003D004F0046005800540049004200450046>]TJ
+/F63 7.97011 Tf 1 0 0 1 528.842 322.753 Tm [<00430046004D00500058>-200<00550042004C0046>]TJ
+1 0 0 1 491.852 313.787 Tm [<0050004F004D005A>-200<0050004F0046>]TJ
+/F105 7.97011 Tf 1 0 0 1 518.799 313.787 Tm [<001D004F0042004E0046001F>]TJ
+/F63 7.97011 Tf 1 0 0 1 546.83 313.787 Tm [<0009004A004F00540055004600420045>]TJ
+1 0 0 1 491.852 304.82 Tm [<00500047>-200<0042>-200<004D004A00540055000A000F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 329.179 Tm [<00440050>]TJ
+0.97 0 0 1 122.251 329.179 Tm [<004D>]TJ
+0.98 0 0 1 124.725 329.179 Tm [<0050>]TJ
+0.97 0 0 1 129.655 329.179 Tm [<0053>]TJ
+0.98 0 0 1 135.302 329.179 Tm [<0046>]TJ
+0.97 0 0 1 139.647 329.179 Tm [<0059>]TJ
+0.98 0 0 1 144.228 329.179 Tm [<0051>]TJ
+0.97 0 0 1 149.324 329.179 Tm [<0053>]TJ
+0.98 0 0 1 152.948 329.179 Tm [<004600540054>]TJ
+0.97 0 0 1 165.123 329.179 Tm [<004A>]TJ
+0.98 0 0 1 167.694 329.179 Tm [<0050004F>]TJ
+0.97 0 0 1 178.072 329.179 Tm [<000D>-212<004A000F>]TJ
+0.98 0 0 1 187.435 329.179 Tm [<0046>]TJ
+0.97 0 0 1 191.78 329.179 Tm [<000F>-296<004A0055>]TJ
+0.98 0 0 1 205.067 329.179 Tm [<004900420054>-207<0042>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 227.214 329.179 Tm [<001F>]TJ
+0.98 0 0 1 231.872 329.179 Tm [<00460052>]TJ
+0.97 0 0 1 241.285 329.179 Tm [<004F>]TJ
+0.98 0 0 1 245.943 329.179 Tm [<0052>]TJ
+0.97 0 0 1 250.649 329.179 Tm [<0055>]TJ
+0.98 0 0 1 260.11 329.179 Tm [<0050005200470048>]TJ
+0.97 0 0 1 278.935 329.179 Tm [<004F0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 291.101 329.179 Tm [<0042004F0045>-207<00420054>-207<004E0042004F>]TJ
+0.97 0 0 1 336.271 329.179 Tm [<005A>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 342.759 329.179 Tm [<001F0059>]TJ
+0.98 0 0 1 352.075 329.179 Tm [<0044>]TJ
+0.97 0 0 1 356.782 329.179 Tm [<004F>]TJ
+0.98 0 0 1 361.44 329.179 Tm [<005800480056>]TJ
+0.97 0 0 1 375.559 329.179 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 383.067 329.179 Tm [<00420054>]TJ
+0.97 0 0 1 393.438 329.179 Tm [<0053>]TJ
+0.98 0 0 1 397.062 329.179 Tm [<004600520056>]TJ
+0.97 0 0 1 411.511 329.179 Tm [<004A0053>]TJ
+0.98 0 0 1 417.706 329.179 Tm [<00460045>]TJ
+0.97 0 0 1 427.137 329.179 Tm [<000F>-296<0265>]TJ
+0.98 0 0 1 442.18 329.179 Tm [<0046>-207<00500051>]TJ
+0.97 0 0 1 458.575 329.179 Tm [<0055004A>]TJ
+0.98 0 0 1 464.605 329.179 Tm [<0050004F0042>]TJ
+0.97 0 0 1 479.416 329.179 Tm [<004D>]TJ
+/F123 7.97011 Tf 0.995 0 0 1 113.386 317.224 Tm [<001F0052005300440046004C0057005C0021>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 159.394 317.224 Tm [<004A0054>-219<0042>-220<004F0056004E004300460053>-219<004300460055005800460046004F>-220<01E9>-220<0042004F0045>-219<01EA000D>-220<01E9>-220<004E00460042004F004A004F0048>-219<00470056004D004D005A>-220<005500530042004F00540051004200530046004F0055>-220<0042004F0045>-219<01EA>-220<00470056004D004D005A>-219<005000510042005200560046000F>-295<002A0047>]TJ
+0.99 0 0 1 113.386 305.269 Tm [<004F0050>]TJ
+0.985 0 0 1 123.87 305.269 Tm [<0055>]TJ
+0.99 0 0 1 129.565 305.269 Tm [<0051>]TJ
+0.985 0 0 1 134.714 305.269 Tm [<0053>]TJ
+0.99 0 0 1 138.394 305.269 Tm [<004600540046004F>]TJ
+0.985 0 0 1 156.63 305.269 Tm [<0055000D>-222<004A0055>-223<004A>]TJ
+0.99 0 0 1 175.648 305.269 Tm [<0054>-221<00540046>]TJ
+0.985 0 0 1 190.129 305.269 Tm [<0055>-222<0055>]TJ
+0.99 0 0 1 199.337 305.269 Tm [<0050>]TJ
+0.985 0 0 1 206.5 305.269 Tm [<01EA000F>-297<0265>]TJ
+0.99 0 0 1 226.965 305.269 Tm [<0046>]TJ
+0.985 0 0 1 233.536 305.269 Tm [<0047>]TJ
+0.99 0 0 1 236.813 305.269 Tm [<0050>]TJ
+0.985 0 0 1 241.794 305.269 Tm [<004D004D>]TJ
+0.99 0 0 1 246.819 305.269 Tm [<00500058>]TJ
+0.985 0 0 1 258.506 305.269 Tm [<004A>]TJ
+0.99 0 0 1 261.117 305.269 Tm [<004F0048>-221<004F0042004E00460045>-221<00440050>]TJ
+0.985 0 0 1 312.054 305.269 Tm [<004D>]TJ
+0.99 0 0 1 314.566 305.269 Tm [<0050>]TJ
+0.985 0 0 1 319.547 305.269 Tm [<0053>]TJ
+0.99 0 0 1 323.227 305.269 Tm [<0054>-221<0042>]TJ
+0.985 0 0 1 333.842 305.269 Tm [<0053>]TJ
+0.99 0 0 1 337.522 305.269 Tm [<0046>-221<0042>]TJ
+0.985 0 0 1 348.57 305.269 Tm [<004D0053>]TJ
+0.99 0 0 1 354.762 305.269 Tm [<004600420045>]TJ
+0.985 0 0 1 368.768 305.269 Tm [<005A>]TJ
+0.99 0 0 1 375.484 305.269 Tm [<00450046>]TJ
+0.985 0 0 1 385.011 305.269 Tm [<00EB>]TJ
+0.99 0 0 1 390.517 305.269 Tm [<004F00460045>]TJ
+0.985 0 0 1 407.73 305.269 Tm [<0009>]TJ
+0.99 0 0 1 410.949 305.269 Tm [<0058>]TJ
+0.985 0 0 1 417.655 305.269 Tm [<004A0055>]TJ
+0.99 0 0 1 423.779 305.269 Tm [<0049>]TJ
+0.985 0 0 1 431.336 305.269 Tm [<0047>]TJ
+0.99 0 0 1 434.614 305.269 Tm [<0056>]TJ
+0.985 0 0 1 439.821 305.269 Tm [<004D004D>]TJ
+0.99 0 0 1 447.028 305.269 Tm [<0050005100420044>]TJ
+0.985 0 0 1 465.61 305.269 Tm [<004A0055005A000A001B>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 113.386 293.313 Tm [<0045>]TJ
+1.03 0 0 1 118.284 293.313 Tm [<004F>]TJ
+1.02 0 0 1 123.231 293.313 Tm [<00440046004E>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 137.926 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 142.755 293.313 Tm [<005A004B>]TJ
+1.03 0 0 1 152.552 293.313 Tm [<004C0057>]TJ
+1.02 0 0 1 162.445 293.313 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 167.343 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 172.173 293.313 Tm [<0055>]TJ
+1.02 0 0 1 177.119 293.313 Tm [<00480047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 186.916 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 191.745 293.313 Tm [<004A>]TJ
+1.03 0 0 1 196.644 293.313 Tm [<0055>]TJ
+1.02 0 0 1 201.59 293.313 Tm [<004800480051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 216.285 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 221.115 293.313 Tm [<0045>]TJ
+1.03 0 0 1 226.013 293.313 Tm [<004F>]TJ
+1.02 0 0 1 230.96 293.313 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 240.756 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 245.586 293.313 Tm [<0046>]TJ
+1.03 0 0 1 250.484 293.313 Tm [<005C>]TJ
+1.02 0 0 1 255.431 293.313 Tm [<00440051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 265.227 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.02 0 0 1 270.057 293.313 Tm [<00500044004A00480051>]TJ
+1.03 0 0 1 294.549 293.313 Tm [<0057>]TJ
+1.02 0 0 1 299.495 293.313 Tm [<0044>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 304.393 293.313 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 309.223 293.313 Tm [<005C>]TJ
+1.02 0 0 1 314.169 293.313 Tm [<0048>]TJ
+1.03 0 0 1 319.068 293.313 Tm [<004F004F>]TJ
+1.02 0 0 1 328.961 293.313 Tm [<0052005A>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 338.757 293.313 Tm [<000F>-313<002A>]TJ
+1.02 0 0 1 350.106 293.313 Tm [<0054005600510051005000540046>]TJ
+1.03 0 0 1 386.175 293.313 Tm [<005A>]TJ
+1.02 0 0 1 390.916 293.313 Tm [<00500056>-225<00440042004F>-225<005400460046>-226<005800490046>]TJ
+1.03 0 0 1 452.754 293.313 Tm [<0053>]TJ
+1.02 0 0 1 456.602 293.313 Tm [<0046>]TJ
+1.03 0 0 1 463.415 293.313 Tm [<0055>]TJ
+1.02 0 0 1 467.089 293.313 Tm [<00490046>]TJ
+1.03 0 0 1 477.149 293.313 Tm [<005A>]TJ
+1 0 0 1 113.386 281.358 Tm [<00440050004E0046>-220<004700530050004E000F>-293<00340050>-220<005000560053>-220<004600590042004E0051004D0046>-220<00420043005000570046>-220<004400500056004D0045>-220<00430046>-220<004E005000530046>-220<004600420054004A004D005A>-220<0053004600580053004A005500550046004F>-220<00420054001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 257.448 Tm [<003F00560048005700530044005500440050004800570048005500030056004F004C00470048001D>]TJ
+1 0 0 1 113.386 245.493 Tm [<00030003004500440046004E004A00550052005800510047000300200003005500480047>]TJ
+1 0 0 1 113.386 233.538 Tm [<000300030049005200550048004A00550052005800510047000300200003004A0055004800480051>]TJ
+1 0 0 1 113.386 221.582 Tm [<00030003001100110011>]TJ
+1 0 0 1 113.386 209.627 Tm [<003F005300440055>]TJ
+/F105 9.96264 Tf 1 0 0 1 133.311 185.717 Tm [<0027004A004F0042004D004D005A000D>-220<00440050004D005000530054>-220<00440042004F>-220<00430046>-220<0056005400460045>-220<0054004A004E0051004D005A>-220<0058004A00550049001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 161.807 Tm [<003F00580056004800460052004F00520055>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 161.807 Tm [<001F00310044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B0053>-1<0055004800560056004C005200510021001F00570048005B00570021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 149.851 Tm [<0265004A>]TJ
+0.98 0 0 1 125.765 149.851 Tm [<0054>]TJ
+0.97 0 0 1 131.699 149.851 Tm [<0055005A>]TJ
+0.98 0 0 1 139.623 149.851 Tm [<0051004600540046>]TJ
+0.97 0 0 1 157.324 149.851 Tm [<0055>]TJ
+0.98 0 0 1 160.784 149.851 Tm [<0054>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 166.717 149.851 Tm [<001F0057>]TJ
+0.98 0 0 1 176.034 149.851 Tm [<0048>]TJ
+0.97 0 0 1 180.74 149.851 Tm [<005B00570021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 197.56 149.851 Tm [<0058>]TJ
+0.97 0 0 1 204.199 149.851 Tm [<004A0055>]TJ
+0.98 0 0 1 210.229 149.851 Tm [<0049>]TJ
+0.97 0 0 1 217.569 149.851 Tm [<0055>]TJ
+0.98 0 0 1 221.029 149.851 Tm [<00490046>-206<0054005100460044>]TJ
+0.97 0 0 1 250.004 149.851 Tm [<004A00EB>]TJ
+0.98 0 0 1 257.996 149.851 Tm [<00460045>-206<00440050>]TJ
+0.97 0 0 1 278.311 149.851 Tm [<004D>]TJ
+0.98 0 0 1 280.785 149.851 Tm [<0050>]TJ
+0.97 0 0 1 285.715 149.851 Tm [<0053000D>]TJ
+0.98 0 0 1 293.76 149.851 Tm [<0050>]TJ
+0.97 0 0 1 298.691 149.851 Tm [<0057>]TJ
+0.98 0 0 1 303.262 149.851 Tm [<0046>]TJ
+0.97 0 0 1 307.606 149.851 Tm [<00530053004A>]TJ
+0.98 0 0 1 317.425 149.851 Tm [<0045>]TJ
+0.97 0 0 1 322.511 149.851 Tm [<004A>]TJ
+0.98 0 0 1 325.082 149.851 Tm [<004F0048>-206<005800490042>]TJ
+0.97 0 0 1 353.491 149.851 Tm [<0055>]TJ
+0.98 0 0 1 356.951 149.851 Tm [<0046>]TJ
+0.97 0 0 1 361.295 149.851 Tm [<0057>]TJ
+0.98 0 0 1 365.866 149.851 Tm [<0046>]TJ
+0.97 0 0 1 370.211 149.851 Tm [<0053>-208<004A>]TJ
+0.98 0 0 1 378.424 149.851 Tm [<0054>-206<0056005400460045>-207<00420054>]TJ
+0.97 0 0 1 415.244 149.851 Tm [<0055>]TJ
+0.98 0 0 1 418.704 149.851 Tm [<00490046>-206<00440056>]TJ
+0.97 0 0 1 439.478 149.851 Tm [<00530053>]TJ
+0.98 0 0 1 446.725 149.851 Tm [<0046004F>]TJ
+0.97 0 0 1 456.518 149.851 Tm [<0055>]TJ
+0.98 0 0 1 461.996 149.851 Tm [<00440050>]TJ
+0.97 0 0 1 470.861 149.851 Tm [<004D>]TJ
+0.98 0 0 1 473.335 149.851 Tm [<0050>]TJ
+0.97 0 0 1 478.266 149.851 Tm [<0053>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 182.728 Tm [<002300460058004200530046000D>-200<005500490046>-200<005000510046005300420055004A0050004F>-200<00500047>]TJ
+1 0 0 1 491.852 173.762 Tm [<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 503.361 173.762 Tm [<003D00560054004600440050004D00500053>]TJ
+/F63 7.97011 Tf 1 0 0 1 535.321 173.762 Tm [<00440050004E004E0042004F0045>]TJ
+1 0 0 1 491.852 164.795 Tm [<004A0054004F00080055>-200<00460059004600440056005500460045>-200<004A004F0054004A00450046>-200<0042>]TJ
+1 0 0 1 491.852 155.829 Tm [<00480053005000560051000D>-200<00420054>-200<004E0042005A>-200<00430046>-200<005500490046>-200<0044004200540046>]TJ
+1 0 0 1 491.852 146.863 Tm [<0058004A00550049>-200<00440050004D005000530054>-200<004A004F>-200<00500055004900460053>]TJ
+1 0 0 1 491.852 137.896 Tm [<005100420044004C0042004800460054000F>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [<00580049004600530046005700460053>-220<00550049004A0054>-220<00440050004E004E0042004F0045>-220<004A0054>-220<004A00540054005600460045>-220<0009004A000F0046000F>-293<0054005500460051000D>-220<0054004D004A00450046000D>-220<0042005300460042000A000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01ED>]TJ
+ET
+endstream
+endobj
+224 0 obj <<
+/Type /Page
+/Contents 225 0 R
+/Resources 223 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 192 0 R
+>> endobj
+99 0 obj <<
+/D [224 0 R /XYZ 113.386 651.969 null]
+>> endobj
+139 0 obj <<
+/D [224 0 R /XYZ 113.386 577.896 null]
+>> endobj
+223 0 obj <<
+/Font << /F90 14 0 R /F105 5 0 R /F63 7 0 R /F123 17 0 R /F111 6 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+228 0 obj <<
+/Length 34940
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F63 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<003400490042004500460054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 113.386 628.058 Tm [<0022>]TJ
+/F63 9.96264 Tf 0.985 0 0 1 121.568 628.058 Tm [<00540049004200450046>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 145.391 628.058 Tm [<004A>]TJ
+0.985 0 0 1 147.988 628.058 Tm [<0054>-224<0042>]TJ
+0.98 0 0 1 160.788 628.058 Tm [<00550053>]TJ
+0.985 0 0 1 167.944 628.058 Tm [<0042004F0054>]TJ
+0.98 0 0 1 181.81 628.058 Tm [<004A0055004A>]TJ
+0.985 0 0 1 190.5 628.058 Tm [<0050004F>]TJ
+0.98 0 0 1 203.136 628.058 Tm [<00470053>]TJ
+0.985 0 0 1 210.058 628.058 Tm [<0050004E>-224<0050004F0046>-225<00440050>]TJ
+0.98 0 0 1 251.1 628.058 Tm [<004D>]TJ
+0.985 0 0 1 253.6 628.058 Tm [<0050>]TJ
+0.98 0 0 1 258.555 628.058 Tm [<0053>-225<0055>]TJ
+0.985 0 0 1 267.917 628.058 Tm [<0050>-224<0042004F0050>]TJ
+0.98 0 0 1 289.964 628.058 Tm [<0055>]TJ
+0.985 0 0 1 293.459 628.058 Tm [<00490046>]TJ
+0.98 0 0 1 303.174 628.058 Tm [<0053000F>-303<002A0055>]TJ
+0.985 0 0 1 321.052 628.058 Tm [<00440042004F>-224<00430046>-225<0056005400460045>]TJ
+0.98 0 0 1 369.51 628.058 Tm [<0047>]TJ
+0.985 0 0 1 372.771 628.058 Tm [<0050>]TJ
+0.98 0 0 1 377.726 628.058 Tm [<0053>]TJ
+0.985 0 0 1 383.592 628.058 Tm [<004300420044004C0048>]TJ
+0.98 0 0 1 406.467 628.058 Tm [<0053>]TJ
+0.985 0 0 1 410.128 628.058 Tm [<00500056004F00450054>-224<0042004F0045>]TJ
+0.98 0 0 1 454.242 628.058 Tm [<00470053>]TJ
+0.985 0 0 1 461.164 628.058 Tm [<0042004E00460054>]TJ
+1 0 0 1 113.386 616.103 Tm [<0050004F004D005A000F>-293<002A0055>-220<00550042004C00460054>-220<004E0042004F005A>-220<0051004200530042004E00460055004600530054000D>-220<00540050>-220<004A0055>-220<004A0054>-220<004500460044004D0042005300460045>-220<0058004A00550049>-220<005500490046>-220<003A>]TJ
+/F90 9.96264 Tf 1 0 0 1 350.56 617.597 Tm [<00F1>]TJ
+/F105 9.96264 Tf 1 0 0 1 354.863 614.609 Tm [<0039>]TJ
+1 0 0 1 362.923 616.103 Tm [<0054005A004F005500420059000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 592.193 Tm [<003F00510048005A0056004B004400470048>]TJ
+0 g 0 G
+1 0 0 1 113.386 592.193 Tm [<005E>]TJ
+/F123 7.97011 Tf 1 0 0 1 118.188 592.193 Tm [<001F00510044005000480021>]TJ
+/F111 7.97011 Tf 1 0 0 1 147.002 592.193 Tm [<0060>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 580.238 Tm [<02650046>]TJ
+/F123 7.97011 Tf 1 0 0 1 130.123 580.238 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 161.956 580.238 Tm [<004A0054>-220<0058004900420055>-220<004A0054>-219<0056005400460045>-220<00550050>-220<00530046004700460053>-220<00550050>-220<00550049004A0054>-220<00540049004200450046>-220<00580049004600530046>-220<004A0055>-220<00440042004F>-220<00430046>-220<0056005400460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 556.327 Tm [<0050005200470048004F>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 556.327 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 556.327 Tm [<004A00550048005C>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 556.327 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 556.327 Tm [<004A00550044005C>]TJ
+/F111 7.97011 Tf 1 0 0 1 164.355 556.327 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 169.158 556.327 Tm [<0055004A0045>]TJ
+/F111 7.97011 Tf 1 0 0 1 183.565 556.327 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 188.367 556.327 Tm [<00460050005C004E>]TJ
+/F7 9.96264 Tf 1 0 0 1 207.576 556.327 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 225.287 556.327 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.555 556.327 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 262.139 556.327 Tm [<004A00550048005C>]TJ
+/F63 9.96264 Tf 1 0 0 1 281.348 556.327 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 113.386 544.372 Tm [<0265>]TJ
+0.995 0 0 1 123.397 544.372 Tm [<0046>-218<00540049004200450046>]TJ
+0.99 0 0 1 153.427 544.372 Tm [<0008>]TJ
+0.995 0 0 1 155.419 544.372 Tm [<0054>-218<004E005000450046>]TJ
+0.99 0 0 1 184.19 544.372 Tm [<004D>-219<0047>]TJ
+0.995 0 0 1 192.175 544.372 Tm [<0050>]TJ
+0.99 0 0 1 197.181 544.372 Tm [<0053>-219<004A0055>]TJ
+0.995 0 0 1 209.199 544.372 Tm [<0054>-218<00440050>]TJ
+0.99 0 0 1 224.34 544.372 Tm [<004D>]TJ
+0.995 0 0 1 226.865 544.372 Tm [<0050>]TJ
+0.99 0 0 1 231.871 544.372 Tm [<0053>]TJ
+0.995 0 0 1 235.57 544.372 Tm [<0054>]TJ
+0.99 0 0 1 239.545 544.372 Tm [<000F>-295<003A>]TJ
+0.995 0 0 1 250.418 544.372 Tm [<00500056>-218<00440042004F>]TJ
+0.99 0 0 1 276.85 544.372 Tm [<00080055>]TJ
+0.995 0 0 1 284.538 544.372 Tm [<0044>]TJ
+0.99 0 0 1 288.533 544.372 Tm [<0053>]TJ
+0.995 0 0 1 292.232 544.372 Tm [<00460042>]TJ
+0.99 0 0 1 301.143 544.372 Tm [<0055>]TJ
+0.995 0 0 1 304.674 544.372 Tm [<0046>-218<0042>-218<00540049004200450046>-219<0058>]TJ
+0.99 0 0 1 350.276 544.372 Tm [<004A0055>]TJ
+0.995 0 0 1 356.43 544.372 Tm [<0049>-218<00440050>]TJ
+0.99 0 0 1 372.999 544.372 Tm [<004D>]TJ
+0.995 0 0 1 375.524 544.372 Tm [<0050>]TJ
+0.99 0 0 1 380.53 544.372 Tm [<0053>]TJ
+0.995 0 0 1 384.229 544.372 Tm [<0054>]TJ
+0.99 0 0 1 390.369 544.372 Tm [<00470053>]TJ
+0.995 0 0 1 397.362 544.372 Tm [<0050004E>-218<0045>]TJ
+0.99 0 0 1 417.747 544.372 Tm [<004A00EA>]TJ
+0.995 0 0 1 426.594 544.372 Tm [<0046>]TJ
+0.99 0 0 1 431.005 544.372 Tm [<0053>]TJ
+0.995 0 0 1 434.704 544.372 Tm [<0046004F>]TJ
+0.99 0 0 1 444.646 544.372 Tm [<0055>]TJ
+0.995 0 0 1 450.342 544.372 Tm [<004E005000450046>]TJ
+0.99 0 0 1 472.973 544.372 Tm [<004D>]TJ
+0.995 0 0 1 475.498 544.372 Tm [<0054>]TJ
+0.99 0 0 1 479.473 544.372 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 520.462 Tm [<0049005500520050>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 520.462 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 520.462 Tm [<00590044004F005800480056>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 520.462 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 520.462 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 520.462 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 520.462 Tm [<0045004F00440046004E>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 520.462 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 508.506 Tm [<0265>]TJ
+0.98 0 0 1 123.195 508.506 Tm [<0046>-218<00540049004200450046>]TJ
+0.97 0 0 1 152.773 508.506 Tm [<0008>]TJ
+0.98 0 0 1 154.725 508.506 Tm [<0054>-218<0054>]TJ
+0.97 0 0 1 164.689 508.506 Tm [<0055>]TJ
+0.98 0 0 1 168.148 508.506 Tm [<0042>]TJ
+0.97 0 0 1 172.581 508.506 Tm [<00530055004A>]TJ
+0.98 0 0 1 182.235 508.506 Tm [<004F0048>-218<00440050>]TJ
+0.97 0 0 1 203.231 508.506 Tm [<004D>]TJ
+0.98 0 0 1 205.705 508.506 Tm [<0050>]TJ
+0.97 0 0 1 210.636 508.506 Tm [<0053000F>-300<0265>]TJ
+0.98 0 0 1 229.339 508.506 Tm [<0046>]TJ
+0.97 0 0 1 233.684 508.506 Tm [<0053>]TJ
+0.98 0 0 1 237.308 508.506 Tm [<0046>-218<004E00560054>]TJ
+0.97 0 0 1 260.784 508.506 Tm [<0055>]TJ
+0.98 0 0 1 266.377 508.506 Tm [<00430046>-218<00420054>-219<004E0042004F>]TJ
+0.97 0 0 1 306.114 508.506 Tm [<005A>]TJ
+0.98 0 0 1 312.712 508.506 Tm [<004F0056004E00430046>]TJ
+0.97 0 0 1 340.557 508.506 Tm [<0053>]TJ
+0.98 0 0 1 344.181 508.506 Tm [<0054>-218<00420054>]TJ
+0.97 0 0 1 360.711 508.506 Tm [<0053>]TJ
+0.98 0 0 1 364.335 508.506 Tm [<004600520056>]TJ
+0.97 0 0 1 378.785 508.506 Tm [<004A0053>]TJ
+0.98 0 0 1 384.979 508.506 Tm [<00460045>-218<0043>]TJ
+0.97 0 0 1 401.514 508.506 Tm [<005A>-220<0055>]TJ
+0.98 0 0 1 411.572 508.506 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 423.371 508.506 Tm [<0050005200470048>]TJ
+0.97 0 0 1 442.196 508.506 Tm [<004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 448.988 508.506 Tm [<00510042>]TJ
+0.97 0 0 1 458.517 508.506 Tm [<0053>]TJ
+0.98 0 0 1 462.141 508.506 Tm [<0042004E0046>]TJ
+0.97 0 0 1 478.846 508.506 Tm [<000E>]TJ
+1 0 0 1 113.386 496.551 Tm [<005500460053000F>-293<002A0047>-220<004F005000550049004A004F0048>-220<004A0054>-220<0054005100460044004A00EB00460045000D>-220<0043004D00420044004C>-220<004A0054>-220<0054005600510051004D004A00460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 101.589 472.641 Tm [<00570052>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 472.641 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 472.641 Tm [<00590044004F005800480056>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 472.641 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 472.641 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 472.641 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 472.641 Tm [<005A004B004C00570048>]TJ
+/F63 9.96264 Tf 1 0 0 1 228.523 472.641 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 460.686 Tm [<0265>]TJ
+0.98 0 0 1 123.195 460.686 Tm [<0046>-170<00540049004200450046>]TJ
+0.97 0 0 1 152.303 460.686 Tm [<0008>]TJ
+0.98 0 0 1 154.255 460.686 Tm [<0054>-170<0046004F0045>]TJ
+0.97 0 0 1 174.712 460.686 Tm [<004A>]TJ
+0.98 0 0 1 177.283 460.686 Tm [<004F0048>-170<00440050>]TJ
+0.97 0 0 1 197.809 460.686 Tm [<004D>]TJ
+0.98 0 0 1 200.283 460.686 Tm [<0050>]TJ
+0.97 0 0 1 205.214 460.686 Tm [<0053000F>-284<0265>]TJ
+0.98 0 0 1 223.76 460.686 Tm [<0046>]TJ
+0.97 0 0 1 228.105 460.686 Tm [<0053>]TJ
+0.98 0 0 1 231.729 460.686 Tm [<0046>-170<004E00560054>]TJ
+0.97 0 0 1 254.735 460.686 Tm [<0055>]TJ
+0.98 0 0 1 259.857 460.686 Tm [<00430046>-170<00420054>-170<004E0042004F>]TJ
+0.97 0 0 1 298.654 460.686 Tm [<005A>]TJ
+0.98 0 0 1 304.782 460.686 Tm [<004F0056004E00430046>]TJ
+0.97 0 0 1 332.627 460.686 Tm [<0053>]TJ
+0.98 0 0 1 336.251 460.686 Tm [<0054>-170<00420054>]TJ
+0.97 0 0 1 351.84 460.686 Tm [<0053>]TJ
+0.98 0 0 1 355.464 460.686 Tm [<004600520056>]TJ
+0.97 0 0 1 369.914 460.686 Tm [<004A0053>]TJ
+0.98 0 0 1 376.109 460.686 Tm [<00460045>-170<0043>]TJ
+0.97 0 0 1 392.173 460.686 Tm [<005A>-172<0055>]TJ
+0.98 0 0 1 401.76 460.686 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 413.089 460.686 Tm [<0050005200470048>]TJ
+0.97 0 0 1 431.914 460.686 Tm [<004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 438.236 460.686 Tm [<00510042>]TJ
+0.97 0 0 1 447.765 460.686 Tm [<0053>]TJ
+0.98 0 0 1 451.389 460.686 Tm [<0042004E0046>]TJ
+0.97 0 0 1 468.094 460.686 Tm [<0055>]TJ
+0.98 0 0 1 471.554 460.686 Tm [<0046>]TJ
+0.97 0 0 1 475.898 460.686 Tm [<0053000F>]TJ
+1.03 0 0 1 113.386 448.731 Tm [<002A0047>]TJ
+1.02 0 0 1 122.965 448.731 Tm [<004F0050>]TJ
+1.03 0 0 1 133.767 448.731 Tm [<0055>]TJ
+1.02 0 0 1 137.441 448.731 Tm [<0049>]TJ
+1.03 0 0 1 142.979 448.731 Tm [<004A>]TJ
+1.02 0 0 1 145.709 448.731 Tm [<004F0048>]TJ
+1.03 0 0 1 158.942 448.731 Tm [<004A>]TJ
+1.02 0 0 1 161.671 448.731 Tm [<0054>-278<0054005100460044>]TJ
+1.03 0 0 1 186.57 448.731 Tm [<004A00EB>]TJ
+1.02 0 0 1 195.056 448.731 Tm [<00460045>]TJ
+1.03 0 0 1 204.873 448.731 Tm [<000D>]TJ
+1.02 0 0 1 210.373 448.731 Tm [<00580049>]TJ
+1.03 0 0 1 222.821 448.731 Tm [<004A0055>]TJ
+1.02 0 0 1 229.224 448.731 Tm [<0046>]TJ
+1.03 0 0 1 236.574 448.731 Tm [<004A>]TJ
+1.02 0 0 1 239.303 448.731 Tm [<0054>-278<0054005600510051>]TJ
+1.03 0 0 1 266.255 448.731 Tm [<004D004A>]TJ
+1.02 0 0 1 271.611 448.731 Tm [<00460045>]TJ
+1.03 0 0 1 281.428 448.731 Tm [<000F>]TJ
+1.02 0 0 1 288.77 448.731 Tm [<002F0046>]TJ
+1.03 0 0 1 300.568 448.731 Tm [<004A0055>]TJ
+1.02 0 0 1 306.972 448.731 Tm [<00490046>]TJ
+1.03 0 0 1 317.032 448.731 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 323.707 448.731 Tm [<00490055>]TJ
+1.02 0 0 1 333.6 448.731 Tm [<00520050>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 346.224 448.731 Tm [<004F0050>]TJ
+1.03 0 0 1 357.026 448.731 Tm [<0053>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 363.701 448.731 Tm [<0057>]TJ
+1.02 0 0 1 368.648 448.731 Tm [<0052>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 376.373 448.731 Tm [<00440042004F>]TJ
+1.03 0 0 1 393.579 448.731 Tm [<0055>]TJ
+1.02 0 0 1 397.253 448.731 Tm [<0042004C0046>-278<004F0042004E00460045>-278<00440050>]TJ
+1.03 0 0 1 454.692 448.731 Tm [<004D>]TJ
+1.02 0 0 1 457.319 448.731 Tm [<0050>]TJ
+1.03 0 0 1 462.451 448.731 Tm [<0053>]TJ
+1.02 0 0 1 466.299 448.731 Tm [<0054>-278<00420054>]TJ
+1 0 0 1 113.386 436.775 Tm [<0042005300480056004E0046004F00550054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 412.865 Tm [<00440051004A004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 412.865 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 412.865 Tm [<00440051004A004F0048>]TJ
+/F7 9.96264 Tf 1 0 0 1 145.146 412.865 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 162.857 412.865 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 166.125 412.865 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 199.709 412.865 Tm [<001C0013>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 412.865 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 400.91 Tm [<0265>]TJ
+1.02 0 0 1 123.801 400.91 Tm [<0046>-260<00540049004200450046>]TJ
+1.03 0 0 1 157.665 400.91 Tm [<0057>]TJ
+1.02 0 0 1 162.518 400.91 Tm [<0042>]TJ
+1.03 0 0 1 167.132 400.91 Tm [<0053004A>]TJ
+1.02 0 0 1 173.709 400.91 Tm [<00460054>-260<0042>]TJ
+1.03 0 0 1 189.569 400.91 Tm [<004D>]TJ
+1.02 0 0 1 192.196 400.91 Tm [<0050004F0048>-260<0042004F>-261<0042>]TJ
+1.03 0 0 1 227.929 400.91 Tm [<0059004A>]TJ
+1.02 0 0 1 235.523 400.91 Tm [<0054>]TJ
+1.03 0 0 1 239.597 400.91 Tm [<000F>-418<0265004A>]TJ
+1.02 0 0 1 259.551 400.91 Tm [<0054>-260<0042>]TJ
+1.03 0 0 1 270.888 400.91 Tm [<0059004A>]TJ
+1.02 0 0 1 278.482 400.91 Tm [<0054>-260<0054>]TJ
+1.03 0 0 1 289.281 400.91 Tm [<0055>]TJ
+1.02 0 0 1 292.955 400.91 Tm [<0042>]TJ
+1.03 0 0 1 297.568 400.91 Tm [<00530055>]TJ
+1.02 0 0 1 305.09 400.91 Tm [<0054>]TJ
+1.03 0 0 1 311.814 400.91 Tm [<004A>]TJ
+1.02 0 0 1 314.543 400.91 Tm [<004F>]TJ
+1.03 0 0 1 322.863 400.91 Tm [<0055>]TJ
+1.02 0 0 1 326.536 400.91 Tm [<00490046>-260<0056005100510046>]TJ
+1.03 0 0 1 359.742 400.91 Tm [<0053>-258<004D>]TJ
+1.02 0 0 1 368.867 400.91 Tm [<0046>]TJ
+1.03 0 0 1 373.389 400.91 Tm [<00470055>]TJ
+1.02 0 0 1 383.139 400.91 Tm [<00440050>]TJ
+1.03 0 0 1 392.366 400.91 Tm [<0053>]TJ
+1.02 0 0 1 396.214 400.91 Tm [<004F0046>]TJ
+1.03 0 0 1 406.406 400.91 Tm [<0053>]TJ
+1.02 0 0 1 412.903 400.91 Tm [<0050>]TJ
+1.03 0 0 1 418.035 400.91 Tm [<0047>-258<0055>]TJ
+1.02 0 0 1 427.785 400.91 Tm [<00490046>-260<0042>]TJ
+1.03 0 0 1 445.108 400.91 Tm [<0053>]TJ
+1.02 0 0 1 448.956 400.91 Tm [<00460042>]TJ
+1.03 0 0 1 460.741 400.91 Tm [<0055>]TJ
+1.02 0 0 1 464.414 400.91 Tm [<0050>-260<00430046>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 400.462 Tm [<0034004900420045004600540008>-200<0042005500550053004A00430056005500460054>-200<004E0042005A>-200<00430046>]TJ
+1 0 0 1 491.852 391.495 Tm [<004E005000530046>-200<004600420054004A004D005A>-200<0056004F00450046005300540055005000500045>]TJ
+1 0 0 1 491.852 382.529 Tm [<0058004A00550049>-200<005500490046>-200<004A004F005500460053004200440055004A00570046>]TJ
+1 0 0 1 491.852 373.563 Tm [<004600590042004E0051004D00460054>-200<004A004F>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 540.749 373.563 Tm [<0037004A005400560042004D>]TJ
+1 0 0 1 491.852 364.596 Tm [<002500500044>]TJ
+/F63 7.97011 Tf 1 0 0 1 504.597 364.596 Tm [<000F>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 113.386 388.955 Tm [<00510042>]TJ
+1.01 0 0 1 123.158 388.955 Tm [<004A>]TJ
+1.005 0 0 1 125.835 388.955 Tm [<004F>]TJ
+1.01 0 0 1 131.421 388.955 Tm [<0055>]TJ
+1.005 0 0 1 135.024 388.955 Tm [<00460045>-221<0042004F0045>-222<004E0042004C00460054>-221<0042004F>-222<0042004F0048>]TJ
+1.01 0 0 1 219.993 388.955 Tm [<004D>]TJ
+1.005 0 0 1 222.569 388.955 Tm [<0046>-221<0050>]TJ
+1.01 0 0 1 234.3 388.955 Tm [<0047>]TJ
+/F123 7.97011 Tf 1.01 0 0 1 239.879 388.955 Tm [<001F>]TJ
+1.005 0 0 1 244.729 388.955 Tm [<00440051004A>]TJ
+1.01 0 0 1 259.208 388.955 Tm [<004F>]TJ
+1.005 0 0 1 264.059 388.955 Tm [<0048>]TJ
+1.01 0 0 1 268.885 388.955 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 276.781 388.955 Tm [<004500460048>]TJ
+1.01 0 0 1 291.119 388.955 Tm [<0053>]TJ
+1.005 0 0 1 294.892 388.955 Tm [<004600460054>-221<0058>]TJ
+1.01 0 0 1 316.845 388.955 Tm [<004A0055>]TJ
+1.005 0 0 1 323.124 388.955 Tm [<0049>]TJ
+1.01 0 0 1 330.8 388.955 Tm [<0055>]TJ
+1.005 0 0 1 334.402 388.955 Tm [<00490046>-221<0042>]TJ
+1.01 0 0 1 351.078 388.955 Tm [<0053>]TJ
+1.005 0 0 1 354.852 388.955 Tm [<00460042>]TJ
+1.01 0 0 1 363.853 388.955 Tm [<0008>]TJ
+1.005 0 0 1 365.886 388.955 Tm [<0054>-221<0056005100510046>]TJ
+1.01 0 0 1 392.314 388.955 Tm [<0053>]TJ
+1.005 0 0 1 398.306 388.955 Tm [<00430050>]TJ
+1.01 0 0 1 408.459 388.955 Tm [<0053>]TJ
+1.005 0 0 1 412.232 388.955 Tm [<00450046>]TJ
+1.01 0 0 1 421.904 388.955 Tm [<0053000F>-298<0265>]TJ
+1.005 0 0 1 441.359 388.955 Tm [<0046>]TJ
+/F123 7.97011 Tf 1.01 0 0 1 448.033 388.955 Tm [<001F>]TJ
+1.005 0 0 1 452.884 388.955 Tm [<00440051004A>]TJ
+1.01 0 0 1 467.363 388.955 Tm [<004F>]TJ
+1.005 0 0 1 472.213 388.955 Tm [<0048>]TJ
+1.01 0 0 1 477.039 388.955 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 377 Tm [<004E00560054>]TJ
+0.975 0 0 1 130.384 377 Tm [<0055>-228<0053>]TJ
+0.98 0 0 1 139.727 377 Tm [<0042004F00480046>-227<00430046>]TJ
+0.975 0 0 1 170.04 377 Tm [<0055>]TJ
+0.98 0 0 1 173.517 377 Tm [<005800460046004F>]TJ
+0.975 0 0 1 196.517 377 Tm [<01E9>]TJ
+0.98 0 0 1 203.869 377 Tm [<0042004F0045>]TJ
+0.975 0 0 1 221.06 377 Tm [<01F201E9001B>-307<01E9>]TJ
+0.98 0 0 1 244.035 377 Tm [<004E00460042004F0054>]TJ
+0.975 0 0 1 272.326 377 Tm [<0055>]TJ
+0.98 0 0 1 275.804 377 Tm [<00490042>]TJ
+0.975 0 0 1 285.558 377 Tm [<0055>-228<0055>]TJ
+0.98 0 0 1 294.736 377 Tm [<00490046>-227<00540049004200450046>-228<0051>]TJ
+0.975 0 0 1 337.045 377 Tm [<0053>]TJ
+0.98 0 0 1 340.688 377 Tm [<00500048>]TJ
+0.975 0 0 1 350.168 377 Tm [<0053>]TJ
+0.98 0 0 1 353.81 377 Tm [<00460054005400460054>-227<00490050>]TJ
+0.975 0 0 1 386.72 377 Tm [<0053004A>]TJ
+0.98 0 0 1 392.946 377 Tm [<005B0050004F>]TJ
+0.975 0 0 1 407.631 377 Tm [<0055>]TJ
+0.98 0 0 1 411.108 377 Tm [<0042>]TJ
+0.975 0 0 1 415.541 377 Tm [<004D004D005A>]TJ
+0.98 0 0 1 427.225 377 Tm [<0042004F0045>]TJ
+0.975 0 0 1 444.416 377 Tm [<01F201E9>-228<0055>]TJ
+0.98 0 0 1 460.374 377 Tm [<00490042>]TJ
+0.975 0 0 1 470.128 377 Tm [<0055>-228<004A0055>]TJ
+0.995 0 0 1 113.386 365.044 Tm [<004E0050005700460054>-222<0057004600530055004A00440042004D005A000F>-298<002A0047>]TJ
+/F123 7.97011 Tf 0.995 0 0 1 190.441 365.044 Tm [<001F00440051004A004F00480021>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 226.918 365.044 Tm [<004A0054>-222<004300460055005800460046004F>-222<01E9>-222<0042004F0045>-222<000E01F201E9000D>-223<004A00550054>-222<0042004300540050004D005600550046>-222<00570042004D00560046>-222<004A0054>-222<00550042004C0046004F>-222<00420054>-223<004A00550054>-222<00570042004D00560046>-222<004300560055>]TJ
+1 0 0 1 113.386 353.089 Tm [<005500490046>-220<00540049004200450046>-220<005400550042005300550054>-220<004700530050004E>-220<005500490046>-220<00560051005100460053>]TJ
+/F63 9.96264 Tf 1 0 0 1 244.365 353.089 Tm [<0053004A004800490055>]TJ
+/F105 9.96264 Tf 1 0 0 1 265.296 353.089 Tm [<004400500053004F00460053000F>]TJ
+1.03 0 0 1 133.311 341.134 Tm [<0265>]TJ
+1.02 0 0 1 143.727 341.134 Tm [<0046>]TJ
+1.03 0 0 1 150.762 341.134 Tm [<0057>]TJ
+1.02 0 0 1 155.615 341.134 Tm [<0042>]TJ
+1.03 0 0 1 160.229 341.134 Tm [<004D>]TJ
+1.02 0 0 1 162.856 341.134 Tm [<00560046>-247<0050>]TJ
+1.03 0 0 1 180.388 341.134 Tm [<0047>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 186.328 341.134 Tm [<001F>]TJ
+1.02 0 0 1 191.275 341.134 Tm [<00440051004A>]TJ
+1.03 0 0 1 205.97 341.134 Tm [<004F>]TJ
+1.02 0 0 1 210.916 341.134 Tm [<0048>]TJ
+1.03 0 0 1 215.814 341.134 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 224.101 341.134 Tm [<00420044>]TJ
+1.03 0 0 1 232.809 341.134 Tm [<0055>]TJ
+1.02 0 0 1 236.483 341.134 Tm [<00560042>]TJ
+1.03 0 0 1 246.462 341.134 Tm [<004D004D005A>-244<0053>]TJ
+1.02 0 0 1 262.818 341.134 Tm [<0046>]TJ
+1.03 0 0 1 267.34 341.134 Tm [<0047>]TJ
+1.02 0 0 1 270.767 341.134 Tm [<0046>]TJ
+1.03 0 0 1 275.289 341.134 Tm [<0053>]TJ
+1.02 0 0 1 279.137 341.134 Tm [<0054>]TJ
+1.03 0 0 1 285.725 341.134 Tm [<0055>]TJ
+1.02 0 0 1 289.399 341.134 Tm [<0050>-247<0042>-247<00540049004200450046>-247<00510042>]TJ
+1.03 0 0 1 340.644 341.134 Tm [<004A>]TJ
+1.02 0 0 1 343.374 341.134 Tm [<004F>]TJ
+1.03 0 0 1 349.044 341.134 Tm [<0055>]TJ
+1.02 0 0 1 352.718 341.134 Tm [<00460045>]TJ
+1.03 0 0 1 365.047 341.134 Tm [<004A>]TJ
+1.02 0 0 1 367.777 341.134 Tm [<004F>-247<0042>-247<0054005200560042>]TJ
+1.03 0 0 1 402.292 341.134 Tm [<0053>]TJ
+1.02 0 0 1 406.14 341.134 Tm [<0046>]TJ
+1.03 0 0 1 410.662 341.134 Tm [<001C>-260<004A0047>-245<0055>]TJ
+1.02 0 0 1 428.194 341.134 Tm [<00490046>-247<0042>]TJ
+1.03 0 0 1 445.38 341.134 Tm [<0053>]TJ
+1.02 0 0 1 449.228 341.134 Tm [<00460042>]TJ
+1.03 0 0 1 460.877 341.134 Tm [<0055>]TJ
+1.02 0 0 1 464.551 341.134 Tm [<0050>-247<00430046>]TJ
+1 0 0 1 113.386 329.179 Tm [<00510042004A004F005500460045>-220<004A0054004F00080055>-220<0042>-220<005400520056004200530046000D>-220<00550049004A0054>-221<004A004E00420048004A004F00420053005A>-220<005400520056004200530046>-220<004A0054>-220<005400440042004D00460045>-221<0042004F0045>-220<005500490046>-220<0042004F0048004D0046>-220<00500047>-220<005500490046>-221<00540049004200450046>-220<0058004A004D004D>-220<00470050004D004D00500058>]TJ
+0.97 0 0 1 113.386 317.224 Tm [<0055>]TJ
+0.98 0 0 1 116.845 317.224 Tm [<00490046>-216<005400440042>]TJ
+0.97 0 0 1 140.905 317.224 Tm [<004D004A>]TJ
+0.98 0 0 1 145.949 317.224 Tm [<004F0048>]TJ
+0.97 0 0 1 155.947 317.224 Tm [<000F>]TJ
+0.98 0 0 1 161.21 317.224 Tm [<00270050>]TJ
+0.97 0 0 1 171.325 317.224 Tm [<0053>-218<004A>]TJ
+0.98 0 0 1 179.631 317.224 Tm [<004F0054>]TJ
+0.97 0 0 1 188.994 317.224 Tm [<0055>]TJ
+0.98 0 0 1 192.454 317.224 Tm [<0042004F00440046>]TJ
+0.97 0 0 1 210.614 317.224 Tm [<000D>]TJ
+0.98 0 0 1 215.109 317.224 Tm [<0042004F>-216<0042004F0048>]TJ
+0.97 0 0 1 241.531 317.224 Tm [<004D>]TJ
+0.98 0 0 1 244.005 317.224 Tm [<0046>-216<0050>]TJ
+0.97 0 0 1 255.391 317.224 Tm [<0047>-218<01ED01EE>]TJ
+0.98 0 0 1 273.047 317.224 Tm [<004E0042004C00460054>]TJ
+0.97 0 0 1 300.65 317.224 Tm [<0055>]TJ
+0.98 0 0 1 304.11 317.224 Tm [<00490046>-216<00540049004200450046>-216<0051>]TJ
+0.97 0 0 1 346.195 317.224 Tm [<0053>]TJ
+0.98 0 0 1 349.819 317.224 Tm [<00500048>]TJ
+0.97 0 0 1 359.299 317.224 Tm [<0053>]TJ
+0.98 0 0 1 362.923 317.224 Tm [<004600540054>]TJ
+0.97 0 0 1 377.209 317.224 Tm [<00470053>]TJ
+0.98 0 0 1 384.061 317.224 Tm [<0050004E>]TJ
+0.97 0 0 1 399.031 317.224 Tm [<0055>]TJ
+0.98 0 0 1 402.49 317.224 Tm [<00490046>]TJ
+0.97 0 0 1 414.267 317.224 Tm [<0055>]TJ
+0.98 0 0 1 417.727 317.224 Tm [<00500051>]TJ
+0.97 0 0 1 429.865 317.224 Tm [<004D>]TJ
+0.98 0 0 1 432.339 317.224 Tm [<0046>]TJ
+0.97 0 0 1 436.684 317.224 Tm [<00470055>]TJ
+0.98 0 0 1 445.483 317.224 Tm [<00440050>]TJ
+0.97 0 0 1 454.348 317.224 Tm [<0053>]TJ
+0.98 0 0 1 457.972 317.224 Tm [<004F0046>]TJ
+0.97 0 0 1 467.764 317.224 Tm [<0053>-218<0055>]TJ
+0.98 0 0 1 476.959 317.224 Tm [<0050>]TJ
+1 0 0 1 113.386 305.269 Tm [<005500490046>-219<00430050005500550050004E>-220<0053004A004800490055>-220<004400500053004F00460053001C>-220<004A0047>-219<005500490046>-220<0042005300460042>-220<00550050>-219<00430046>-220<00510042004A004F005500460045>-220<004A0054>-220<0042>-219<00530046004400550042004F0048004D0046000D>-220<005500490046>-220<00540049004200450046>-220<0058004A004D004D>-219<00540055004A004D004D>-220<00510053005000480053004600540054>]TJ
+1 0 0 1 113.386 293.313 Tm [<004300460055005800460046004F>-220<00550049004600540046>-220<005500580050>-220<004400500053004F004600530054000D>-220<0042004F0045>-220<005500490046>-220<0042004F0048004D0046>-220<0058004A004D004D>-220<00430046>-220<0054004C0046005800460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 269.403 Tm [<00560053004800480047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 269.403 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 269.403 Tm [<005100580050004500480055>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 269.403 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 269.403 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 269.403 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 269.403 Tm [<0014>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 269.403 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 257.448 Tm [<0265>]TJ
+0.98 0 0 1 123.195 257.448 Tm [<0046>-202<00540051004600460045>-203<0050>]TJ
+0.97 0 0 1 159.215 257.448 Tm [<0047>-204<0055>]TJ
+0.98 0 0 1 167.881 257.448 Tm [<00490046>-202<00540049004200450046>]TJ
+0.97 0 0 1 202.625 257.448 Tm [<0008>]TJ
+0.98 0 0 1 204.577 257.448 Tm [<0054>-202<0051>]TJ
+0.97 0 0 1 215.567 257.448 Tm [<0053>]TJ
+0.98 0 0 1 219.191 257.448 Tm [<00500048>]TJ
+0.97 0 0 1 228.671 257.448 Tm [<0053>]TJ
+0.98 0 0 1 232.295 257.448 Tm [<004600540054>]TJ
+0.97 0 0 1 244.47 257.448 Tm [<004A>]TJ
+0.98 0 0 1 247.041 257.448 Tm [<0050004F>]TJ
+0.97 0 0 1 257.419 257.448 Tm [<001B>-291<01EA>]TJ
+0.98 0 0 1 269.684 257.448 Tm [<004E00460042004F0054>]TJ
+0.97 0 0 1 297.731 257.448 Tm [<0055>]TJ
+0.98 0 0 1 301.19 257.448 Tm [<00490046>-202<00540049004200450046>]TJ
+0.97 0 0 1 337.913 257.448 Tm [<0055>]TJ
+0.98 0 0 1 341.373 257.448 Tm [<0042004C00460054>]TJ
+0.97 0 0 1 360.916 257.448 Tm [<004A0055>]TJ
+0.98 0 0 1 366.946 257.448 Tm [<0054>-202<0042>]TJ
+0.97 0 0 1 377.272 257.448 Tm [<0059004A>]TJ
+0.98 0 0 1 384.423 257.448 Tm [<0054>]TJ
+0.97 0 0 1 388.338 257.448 Tm [<0008>-204<0047>]TJ
+0.98 0 0 1 395.497 257.448 Tm [<0056>]TJ
+0.97 0 0 1 400.652 257.448 Tm [<004D004D>-204<004D>]TJ
+0.98 0 0 1 410.052 257.448 Tm [<0046004F0048>]TJ
+0.97 0 0 1 424.395 257.448 Tm [<0055>]TJ
+0.98 0 0 1 427.854 257.448 Tm [<0049>]TJ
+0.97 0 0 1 435.154 257.448 Tm [<0055>]TJ
+0.98 0 0 1 438.614 257.448 Tm [<0050>-202<0051>]TJ
+0.97 0 0 1 450.619 257.448 Tm [<0053>]TJ
+0.98 0 0 1 454.243 257.448 Tm [<00500048>]TJ
+0.97 0 0 1 463.723 257.448 Tm [<0053>]TJ
+0.98 0 0 1 467.347 257.448 Tm [<004600540054>]TJ
+0.97 0 0 1 479.522 257.448 Tm [<001C>]TJ
+1.02 0 0 1 113.386 245.493 Tm [<0042>]TJ
+1.03 0 0 1 120.761 245.493 Tm [<0057>]TJ
+1.02 0 0 1 125.615 245.493 Tm [<0042>]TJ
+1.03 0 0 1 130.228 245.493 Tm [<004D>]TJ
+1.02 0 0 1 132.855 245.493 Tm [<00560046>-271<00430046>]TJ
+1.03 0 0 1 155.199 245.493 Tm [<0055>]TJ
+1.02 0 0 1 158.873 245.493 Tm [<005800460046004F>]TJ
+1.03 0 0 1 183.259 245.493 Tm [<01E9>]TJ
+1.02 0 0 1 191.439 245.493 Tm [<0042004F0045>]TJ
+1.03 0 0 1 209.779 245.493 Tm [<01EA>]TJ
+1.02 0 0 1 217.959 245.493 Tm [<004E0042004C00460054>]TJ
+1.03 0 0 1 247.254 245.493 Tm [<004A0055>-269<0055>]TJ
+1.02 0 0 1 260.093 245.493 Tm [<0042004C0046>-271<004E0050>]TJ
+1.03 0 0 1 290.444 245.493 Tm [<0053>]TJ
+1.02 0 0 1 294.292 245.493 Tm [<0046>]TJ
+1.03 0 0 1 301.576 245.493 Tm [<0055>]TJ
+1.02 0 0 1 305.25 245.493 Tm [<00490042004F>]TJ
+1.03 0 0 1 323.834 245.493 Tm [<0055>]TJ
+1.02 0 0 1 327.507 245.493 Tm [<0049>]TJ
+1.03 0 0 1 333.045 245.493 Tm [<004A>]TJ
+1.02 0 0 1 335.775 245.493 Tm [<0054>]TJ
+1.03 0 0 1 342.612 245.493 Tm [<004D>]TJ
+1.02 0 0 1 345.239 245.493 Tm [<0046004F0048>]TJ
+1.03 0 0 1 360.167 245.493 Tm [<0055>]TJ
+1.02 0 0 1 363.84 245.493 Tm [<0049>]TJ
+1.03 0 0 1 372.14 245.493 Tm [<0009>]TJ
+1.02 0 0 1 375.506 245.493 Tm [<0042004F0045>]TJ
+1.03 0 0 1 393.846 245.493 Tm [<0055>]TJ
+1.02 0 0 1 397.52 245.493 Tm [<004900560054>]TJ
+1.03 0 0 1 415.26 245.493 Tm [<004A0055>]TJ
+1.02 0 0 1 424.425 245.493 Tm [<00580050004F>]TJ
+1.03 0 0 1 442.138 245.493 Tm [<00080055>]TJ
+1.02 0 0 1 450.646 245.493 Tm [<00430046>]TJ
+1.03 0 0 1 463.102 245.493 Tm [<0047>]TJ
+1.02 0 0 1 466.53 245.493 Tm [<0056>]TJ
+1.03 0 0 1 471.895 245.493 Tm [<004D004D005A>]TJ
+1.02 0 0 1 113.386 233.538 Tm [<00510042>]TJ
+1.03 0 0 1 123.304 233.538 Tm [<004A>]TJ
+1.02 0 0 1 126.033 233.538 Tm [<004F>]TJ
+1.03 0 0 1 131.704 233.538 Tm [<0055>]TJ
+1.02 0 0 1 135.377 233.538 Tm [<00460045>]TJ
+1.03 0 0 1 147.529 233.538 Tm [<004A>]TJ
+1.02 0 0 1 150.259 233.538 Tm [<004F>]TJ
+1.03 0 0 1 158.264 233.538 Tm [<0055>]TJ
+1.02 0 0 1 161.938 233.538 Tm [<00490046>-229<0042>]TJ
+1.03 0 0 1 178.947 233.538 Tm [<0053>]TJ
+1.02 0 0 1 182.795 233.538 Tm [<00460042>]TJ
+1.03 0 0 1 191.931 233.538 Tm [<000A>]TJ
+1.02 0 0 1 197.632 233.538 Tm [<005800490046>]TJ
+1.03 0 0 1 214.602 233.538 Tm [<0053>]TJ
+1.02 0 0 1 218.45 233.538 Tm [<004600420054>-229<0042>]TJ
+1.03 0 0 1 240.945 233.538 Tm [<0057>]TJ
+1.02 0 0 1 245.799 233.538 Tm [<0042>]TJ
+1.03 0 0 1 250.412 233.538 Tm [<004D>]TJ
+1.02 0 0 1 253.039 233.538 Tm [<00560046>]TJ
+1.03 0 0 1 265.262 233.538 Tm [<004D>]TJ
+1.02 0 0 1 267.889 233.538 Tm [<0042>]TJ
+1.03 0 0 1 272.502 233.538 Tm [<0053>]TJ
+1.02 0 0 1 276.351 233.538 Tm [<00480046>]TJ
+1.03 0 0 1 285.608 233.538 Tm [<0053>-227<0055>]TJ
+1.02 0 0 1 295.465 233.538 Tm [<00490042004F>]TJ
+1.03 0 0 1 313.622 233.538 Tm [<01EA>]TJ
+1.02 0 0 1 321.376 233.538 Tm [<004E0042004C00460054>]TJ
+1.03 0 0 1 350.244 233.538 Tm [<004A0055>-227<0055>]TJ
+1.02 0 0 1 362.656 233.538 Tm [<0042004C0046>]TJ
+1.03 0 0 1 379.198 233.538 Tm [<004D>]TJ
+1.02 0 0 1 381.825 233.538 Tm [<004600540054>]TJ
+1.03 0 0 1 396.832 233.538 Tm [<0055>]TJ
+1.02 0 0 1 400.506 233.538 Tm [<00490042004F>]TJ
+1.03 0 0 1 418.663 233.538 Tm [<0055>]TJ
+1.02 0 0 1 422.337 233.538 Tm [<0049>]TJ
+1.03 0 0 1 427.875 233.538 Tm [<004A>]TJ
+1.02 0 0 1 430.605 233.538 Tm [<0054>]TJ
+1.03 0 0 1 437.015 233.538 Tm [<004D>]TJ
+1.02 0 0 1 439.642 233.538 Tm [<0046004F0048>]TJ
+1.03 0 0 1 454.57 233.538 Tm [<0055>]TJ
+1.02 0 0 1 458.243 233.538 Tm [<0049>]TJ
+1.03 0 0 1 466.117 233.538 Tm [<00090047>]TJ
+1.02 0 0 1 472.91 233.538 Tm [<0050>]TJ
+1.03 0 0 1 478.042 233.538 Tm [<0053>]TJ
+1 0 0 1 113.386 221.582 Tm [<004A004F005400550042004F00440046>-220<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 170.492 221.582 Tm [<005600530048004800470003002000030015>]TJ
+/F105 9.96264 Tf 1 0 0 1 215.904 221.582 Tm [<004A00550008004D004D>-220<00550042004C0046>-220<00490042004D0047>-220<005500490046>-220<00420059004A00540008>-220<004D0046004F004800550049000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 197.672 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 197.672 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 197.672 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 197.672 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 197.672 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 197.672 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 197.672 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 197.672 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 113.386 185.717 Tm [<0022>]TJ
+0.985 0 0 1 121.576 185.717 Tm [<00540049004200450046>-225<004F0050>]TJ
+0.98 0 0 1 157.439 185.717 Tm [<0053>]TJ
+0.985 0 0 1 161.1 185.717 Tm [<004E0042>]TJ
+0.98 0 0 1 173.523 185.717 Tm [<004D004D005A>]TJ
+0.985 0 0 1 185.246 185.717 Tm [<0042004500420051>]TJ
+0.98 0 0 1 204.392 185.717 Tm [<0055>]TJ
+0.985 0 0 1 207.887 185.717 Tm [<0054>]TJ
+0.98 0 0 1 214.035 185.717 Tm [<0055>]TJ
+0.985 0 0 1 217.53 185.717 Tm [<0050>]TJ
+0.98 0 0 1 224.699 185.717 Tm [<0055>]TJ
+0.985 0 0 1 228.194 185.717 Tm [<00490046>-225<0042>]TJ
+0.98 0 0 1 244.578 185.717 Tm [<0053>]TJ
+0.985 0 0 1 248.239 185.717 Tm [<00460042>]TJ
+0.98 0 0 1 259.274 185.717 Tm [<004A0055>]TJ
+0.985 0 0 1 267.58 185.717 Tm [<00510042>]TJ
+0.98 0 0 1 277.157 185.717 Tm [<004A>]TJ
+0.985 0 0 1 279.755 185.717 Tm [<004F>]TJ
+0.98 0 0 1 285.23 185.717 Tm [<0055>]TJ
+0.985 0 0 1 288.726 185.717 Tm [<0054>]TJ
+0.98 0 0 1 292.661 185.717 Tm [<000F>]TJ
+0.985 0 0 1 298.039 185.717 Tm [<0029005000580046>]TJ
+0.98 0 0 1 321.208 185.717 Tm [<0057>]TJ
+0.985 0 0 1 325.826 185.717 Tm [<0046>]TJ
+0.98 0 0 1 330.193 185.717 Tm [<0053000D>-227<004A0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 346.536 185.717 Tm [<005A>]TJ
+0.98 0 0 1 351.266 185.717 Tm [<004C>]TJ
+0.985 0 0 1 355.973 185.717 Tm [<0047>]TJ
+0.98 0 0 1 360.703 185.717 Tm [<0057>]TJ
+0.985 0 0 1 365.409 185.717 Tm [<004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 372.352 185.717 Tm [<004A>]TJ
+0.985 0 0 1 374.949 185.717 Tm [<0054>-225<0048>]TJ
+0.98 0 0 1 385.671 185.717 Tm [<004A0057>]TJ
+0.985 0 0 1 392.886 185.717 Tm [<0046004F>]TJ
+0.98 0 0 1 402.728 185.717 Tm [<000D>-227<0055>]TJ
+0.985 0 0 1 410.834 185.717 Tm [<00490046>-225<00540049004200450046>-226<0058>]TJ
+0.98 0 0 1 454.867 185.717 Tm [<004A004D004D>-226<0055>]TJ
+0.985 0 0 1 468.171 185.717 Tm [<0042004C0046>]TJ
+1.03 0 0 1 113.386 173.762 Tm [<0055>]TJ
+1.02 0 0 1 117.059 173.762 Tm [<00490046>-218<0054005100460044>]TJ
+1.03 0 0 1 147.338 173.762 Tm [<004A00EB>]TJ
+1.02 0 0 1 155.824 173.762 Tm [<00460045>-218<0045>]TJ
+1.03 0 0 1 173.156 173.762 Tm [<004A>]TJ
+1.02 0 0 1 175.885 173.762 Tm [<004E0046004F0054>]TJ
+1.03 0 0 1 198.404 173.762 Tm [<004A>]TJ
+1.02 0 0 1 201.134 173.762 Tm [<0050004F>]TJ
+1.03 0 0 1 211.936 173.762 Tm [<001C>-217<004A0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 225.064 173.762 Tm [<005A>]TJ
+1.03 0 0 1 229.962 173.762 Tm [<004C>]TJ
+1.02 0 0 1 234.908 173.762 Tm [<0047>]TJ
+1.03 0 0 1 239.807 173.762 Tm [<0057>]TJ
+1.02 0 0 1 244.753 173.762 Tm [<004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 251.873 173.762 Tm [<004A>]TJ
+1.02 0 0 1 254.602 173.762 Tm [<0054>]TJ
+1.03 0 0 1 260.898 173.762 Tm [<004D>]TJ
+1.02 0 0 1 263.525 173.762 Tm [<0042>]TJ
+1.03 0 0 1 268.139 173.762 Tm [<0053>]TJ
+1.02 0 0 1 271.987 173.762 Tm [<00480046>]TJ
+1.03 0 0 1 281.244 173.762 Tm [<0053>-216<0055>]TJ
+1.02 0 0 1 290.987 173.762 Tm [<00490042004F>]TJ
+1.03 0 0 1 309.03 173.762 Tm [<0055>]TJ
+1.02 0 0 1 312.704 173.762 Tm [<00490046>-218<0042>]TJ
+1.03 0 0 1 329.599 173.762 Tm [<0053>]TJ
+1.02 0 0 1 333.447 173.762 Tm [<00460042>]TJ
+1.03 0 0 1 344.804 173.762 Tm [<0055>]TJ
+1.02 0 0 1 348.477 173.762 Tm [<0050>-218<00430046>-219<00510042>]TJ
+1.03 0 0 1 377.664 173.762 Tm [<004A>]TJ
+1.02 0 0 1 380.393 173.762 Tm [<004F>]TJ
+1.03 0 0 1 386.064 173.762 Tm [<0055>]TJ
+1.02 0 0 1 389.737 173.762 Tm [<00460045>]TJ
+1.03 0 0 1 399.554 173.762 Tm [<000D>-217<0055>]TJ
+1.02 0 0 1 407.97 173.762 Tm [<00490046>-218<00540049004200450046>-219<00580050004F>]TJ
+1.03 0 0 1 464.228 173.762 Tm [<00080055>]TJ
+1.02 0 0 1 472.195 173.762 Tm [<00430046>]TJ
+0.995 0 0 1 113.386 161.807 Tm [<005400460046004F>-221<004A004F>-221<004A00550054>-221<0046004F0055004A005300460055005A001C>-221<004A0047>-221<004A0055>-221<004A0054>-221<0054004E0042004D004D00460053000D>-221<0051004200530055>-221<00500047>-222<005500490046>-221<0042005300460042>-221<0058004A004D004D>-221<00430046>-221<00510042004A004F005500460045>-221<0058004A00550049>-221<005500490046>-221<0054004900420045004600080054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.995 0 0 1 446.961 161.807 Tm [<00570052>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 458.71 161.807 Tm [<00440050004D00500053000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 137.896 Tm [<004B0048004C004A004B0057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 137.896 Tm [<0047004C0050004800510056004C00520051>]TJ
+/F7 9.96264 Tf 1 0 0 1 164.355 137.896 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 182.067 137.896 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 185.334 137.896 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 218.918 137.896 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 238.128 137.896 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 125.941 Tm [<00340042004E0046>-220<00420054>-220<0058004A004500550049>-220<004A004F>-220<005500490046>-220<0057004600530055004A00440042004D>-220<0045004A004E0046004F0054004A0050004F000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01EE>]TJ
+ET
+endstream
+endobj
+227 0 obj <<
+/Type /Page
+/Contents 228 0 R
+/Resources 226 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 237 0 R
+>> endobj
+229 0 obj <<
+/D [227 0 R /XYZ 113.386 651.969 null]
+>> endobj
+230 0 obj <<
+/D [227 0 R /XYZ 113.386 568.153 null]
+>> endobj
+231 0 obj <<
+/D [227 0 R /XYZ 113.386 532.307 null]
+>> endobj
+232 0 obj <<
+/D [227 0 R /XYZ 113.386 482.155 null]
+>> endobj
+233 0 obj <<
+/D [227 0 R /XYZ 113.386 422.379 null]
+>> endobj
+234 0 obj <<
+/D [227 0 R /XYZ 113.386 278.917 null]
+>> endobj
+235 0 obj <<
+/D [227 0 R /XYZ 113.386 207.186 null]
+>> endobj
+236 0 obj <<
+/D [227 0 R /XYZ 113.386 147.411 null]
+>> endobj
+226 0 obj <<
+/Font << /F63 7 0 R /F105 5 0 R /F90 14 0 R /F111 6 0 R /F123 17 0 R /F7 46 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+240 0 obj <<
+/Length 41242
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 87.183 640.013 Tm [<0049004C005B00480047>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 640.013 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 640.013 Tm [<0057005500580048>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.344 640.013 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.146 640.013 Tm [<00490044004F00560048>]TJ
+/F7 9.96264 Tf 1 0 0 1 169.158 640.013 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 186.869 640.013 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 190.137 640.013 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.721 640.013 Tm [<00490044004F00560048>]TJ
+/F63 9.96264 Tf 1 0 0 1 247.732 640.013 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 628.058 Tm [<0023>]TJ
+1.03 0 0 1 119.219 628.058 Tm [<005A>]TJ
+1.02 0 0 1 126.153 628.058 Tm [<00450046>]TJ
+1.03 0 0 1 135.969 628.058 Tm [<0047>]TJ
+1.02 0 0 1 139.397 628.058 Tm [<00420056>]TJ
+1.03 0 0 1 149.376 628.058 Tm [<004D0055000D>]TJ
+1.02 0 0 1 160.384 628.058 Tm [<0042>-215<00540049004200450046>]TJ
+1.03 0 0 1 193.428 628.058 Tm [<004A>]TJ
+1.02 0 0 1 196.157 628.058 Tm [<0054>-215<00510042>]TJ
+1.03 0 0 1 212.344 628.058 Tm [<004A>]TJ
+1.02 0 0 1 215.073 628.058 Tm [<004F>]TJ
+1.03 0 0 1 220.744 628.058 Tm [<0055>]TJ
+1.02 0 0 1 224.417 628.058 Tm [<00460045>]TJ
+1.03 0 0 1 236.427 628.058 Tm [<00470053>]TJ
+1.02 0 0 1 243.702 628.058 Tm [<0050004E>]TJ
+1.03 0 0 1 259.279 628.058 Tm [<0055>]TJ
+1.02 0 0 1 262.953 628.058 Tm [<00490046>-215<0042>]TJ
+1.03 0 0 1 279.82 628.058 Tm [<0053>]TJ
+1.02 0 0 1 283.668 628.058 Tm [<00460042>]TJ
+1.03 0 0 1 292.804 628.058 Tm [<0008>]TJ
+1.02 0 0 1 294.876 628.058 Tm [<0054>-215<0056005100510046>]TJ
+1.03 0 0 1 321.641 628.058 Tm [<0053>-213<004D>]TJ
+1.02 0 0 1 330.31 628.058 Tm [<0046>]TJ
+1.03 0 0 1 334.832 628.058 Tm [<00470055>]TJ
+1.02 0 0 1 344.126 628.058 Tm [<00440050>]TJ
+1.03 0 0 1 353.353 628.058 Tm [<0053>]TJ
+1.02 0 0 1 357.201 628.058 Tm [<004F0046>]TJ
+1.03 0 0 1 367.394 628.058 Tm [<0053>-213<0009>]TJ
+1.02 0 0 1 376.801 628.058 Tm [<0050>]TJ
+1.03 0 0 1 381.933 628.058 Tm [<0053>-213<0053004A>]TJ
+1.02 0 0 1 394.552 628.058 Tm [<00480049>]TJ
+1.03 0 0 1 404.826 628.058 Tm [<0055>]TJ
+1.02 0 0 1 410.693 628.058 Tm [<00440050>]TJ
+1.03 0 0 1 419.92 628.058 Tm [<0053>]TJ
+1.02 0 0 1 423.768 628.058 Tm [<004F0046>]TJ
+1.03 0 0 1 433.96 628.058 Tm [<0053>-213<004A0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 448.352 628.058 Tm [<00440051004A>]TJ
+1.03 0 0 1 463.047 628.058 Tm [<004F>]TJ
+1.02 0 0 1 467.993 628.058 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 475.085 628.058 Tm [<004A>]TJ
+1.02 0 0 1 477.815 628.058 Tm [<0054>]TJ
+1.02 0 0 1 113.386 616.103 Tm [<004F004600480042>]TJ
+1.03 0 0 1 132.927 616.103 Tm [<0055004A0057>]TJ
+1.02 0 0 1 144.184 616.103 Tm [<0046>]TJ
+1.03 0 0 1 148.706 616.103 Tm [<000A000F>-418<002A0047>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 168.281 616.103 Tm [<0049004C005B>]TJ
+1.02 0 0 1 183.12 616.103 Tm [<00480047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 195.566 616.103 Tm [<004A>]TJ
+1.02 0 0 1 198.296 616.103 Tm [<0054>-260<00540046>]TJ
+1.03 0 0 1 213.617 616.103 Tm [<0055>-258<0055>]TJ
+1.02 0 0 1 223.613 616.103 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 231.394 616.103 Tm [<00570055>]TJ
+1.02 0 0 1 241.286 616.103 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 251.083 616.103 Tm [<000D>-269<0055>]TJ
+1.02 0 0 1 260.034 616.103 Tm [<00490046004F>]TJ
+1.03 0 0 1 278.414 616.103 Tm [<004A0055>-258<004A>]TJ
+1.02 0 0 1 290.196 616.103 Tm [<0054>-260<00510042>]TJ
+1.03 0 0 1 306.838 616.103 Tm [<004A>]TJ
+1.02 0 0 1 309.567 616.103 Tm [<004F>]TJ
+1.03 0 0 1 315.237 616.103 Tm [<0055>]TJ
+1.02 0 0 1 318.911 616.103 Tm [<00460045>]TJ
+1.03 0 0 1 331.377 616.103 Tm [<00470053>]TJ
+1.02 0 0 1 338.652 616.103 Tm [<0050004E>]TJ
+1.03 0 0 1 354.684 616.103 Tm [<0055>]TJ
+1.02 0 0 1 358.358 616.103 Tm [<00490046>-260<0054>]TJ
+1.03 0 0 1 375.142 616.103 Tm [<004D004A>]TJ
+1.02 0 0 1 380.499 616.103 Tm [<00450046>]TJ
+1.03 0 0 1 390.315 616.103 Tm [<0008>]TJ
+1.02 0 0 1 392.388 616.103 Tm [<0054>-260<0056005100510046>]TJ
+1.03 0 0 1 419.608 616.103 Tm [<0053>-258<004D>]TJ
+1.02 0 0 1 428.732 616.103 Tm [<0046>]TJ
+1.03 0 0 1 433.254 616.103 Tm [<00470055>-258<0009>]TJ
+1.02 0 0 1 446.37 616.103 Tm [<0050>]TJ
+1.03 0 0 1 451.502 616.103 Tm [<0053>-258<0053004A>]TJ
+1.02 0 0 1 464.577 616.103 Tm [<00480049>]TJ
+1.03 0 0 1 474.85 616.103 Tm [<0055000A>]TJ
+1.01 0 0 1 113.386 604.148 Tm [<00440050>]TJ
+1.015 0 0 1 122.522 604.148 Tm [<0053>]TJ
+1.01 0 0 1 126.314 604.148 Tm [<004F0046>]TJ
+1.015 0 0 1 136.407 604.148 Tm [<0053000D>]TJ
+1.01 0 0 1 144.872 604.148 Tm [<0042>]TJ
+1.015 0 0 1 149.44 604.148 Tm [<004D0055>]TJ
+1.01 0 0 1 155.649 604.148 Tm [<00490050005600480049>-218<0050004F>]TJ
+1.015 0 0 1 194.592 604.148 Tm [<004D005A>-217<0055>]TJ
+1.01 0 0 1 207.667 604.148 Tm [<00490046>-218<0042>]TJ
+1.015 0 0 1 224.392 604.148 Tm [<0053>]TJ
+1.01 0 0 1 228.184 604.148 Tm [<00460042>-218<0045>]TJ
+1.015 0 0 1 244.667 604.148 Tm [<004A>]TJ
+1.01 0 0 1 247.357 604.148 Tm [<00540051>]TJ
+1.015 0 0 1 256.645 604.148 Tm [<004D>]TJ
+1.01 0 0 1 259.233 604.148 Tm [<0042>]TJ
+1.015 0 0 1 263.802 604.148 Tm [<005A>]TJ
+1.01 0 0 1 268.473 604.148 Tm [<0054>]TJ
+1.015 0 0 1 274.703 604.148 Tm [<004A0055000F>]TJ
+1.01 0 0 1 286.423 604.148 Tm [<002F0050>]TJ
+1.015 0 0 1 298.709 604.148 Tm [<0055>]TJ
+1.01 0 0 1 302.329 604.148 Tm [<0046>]TJ
+1.015 0 0 1 309.002 604.148 Tm [<0055>]TJ
+1.01 0 0 1 312.622 604.148 Tm [<00490042>]TJ
+1.015 0 0 1 322.674 604.148 Tm [<0055>]TJ
+1.01 0 0 1 328.489 604.148 Tm [<0042>]TJ
+1.015 0 0 1 335.252 604.148 Tm [<00EB0059>]TJ
+1.01 0 0 1 345.718 604.148 Tm [<00460045>-218<00540049004200450046>-218<00580049005000540046>-218<0058>]TJ
+1.015 0 0 1 418.593 604.148 Tm [<004A>]TJ
+1.01 0 0 1 421.283 604.148 Tm [<0045>]TJ
+1.015 0 0 1 426.526 604.148 Tm [<0055>]TJ
+1.01 0 0 1 430.146 604.148 Tm [<0049>-218<0042004F0045>-218<00490046>]TJ
+1.015 0 0 1 465.407 604.148 Tm [<004A>]TJ
+1.01 0 0 1 468.097 604.148 Tm [<00480049>]TJ
+1.015 0 0 1 478.27 604.148 Tm [<0055>]TJ
+1 0 0 1 113.386 592.193 Tm [<004200530046>-220<0056004F0054005100460044004A00EB00460045>-220<0045005000460054004F00080055>-220<004E0042004C0046>-220<004E005600440049>-220<00540046004F00540046000F>]TJ
+1.015 0 0 1 133.311 568.282 Tm [<0035>]TJ
+1.01 0 0 1 139.045 568.282 Tm [<0050>-220<00540056004E>-221<00560051>]TJ
+1.015 0 0 1 176.653 568.282 Tm [<001B>]TJ
+1.01 0 0 1 182.112 568.282 Tm [<0051>]TJ
+1.015 0 0 1 187.364 568.282 Tm [<004A>]TJ
+1.01 0 0 1 190.054 568.282 Tm [<0044>]TJ
+1.015 0 0 1 194.109 568.282 Tm [<0055>]TJ
+1.01 0 0 1 197.729 568.282 Tm [<0056>]TJ
+1.015 0 0 1 203.042 568.282 Tm [<0053>]TJ
+1.01 0 0 1 206.834 568.282 Tm [<0046>]TJ
+1.015 0 0 1 213.533 568.282 Tm [<0055>]TJ
+1.01 0 0 1 217.153 568.282 Tm [<00580050>-220<0042>]TJ
+1.015 0 0 1 235.867 568.282 Tm [<0053>]TJ
+1.01 0 0 1 239.659 568.282 Tm [<004600420054>-220<00510042>]TJ
+1.015 0 0 1 264.782 568.282 Tm [<004A>]TJ
+1.01 0 0 1 267.472 568.282 Tm [<004F>]TJ
+1.015 0 0 1 273.087 568.282 Tm [<0055>]TJ
+1.01 0 0 1 276.707 568.282 Tm [<00460045>-220<0058>]TJ
+1.015 0 0 1 295.491 568.282 Tm [<004A0055>]TJ
+1.01 0 0 1 301.801 568.282 Tm [<0049>]TJ
+1.015 0 0 1 309.506 568.282 Tm [<0055>]TJ
+1.01 0 0 1 313.126 568.282 Tm [<00490046>-220<00540042004E0046>-221<00540049004200450046>]TJ
+1.015 0 0 1 372.589 568.282 Tm [<000F>-297<002A0047>-220<0055>]TJ
+1.01 0 0 1 390.573 568.282 Tm [<00490046>-220<00540049004200450046>-221<004900420054>-221<004F0050>-221<0058>]TJ
+1.015 0 0 1 464.853 568.282 Tm [<004A>]TJ
+1.01 0 0 1 467.543 568.282 Tm [<0045>]TJ
+1.015 0 0 1 472.786 568.282 Tm [<0055>]TJ
+1.01 0 0 1 476.406 568.282 Tm [<0049>]TJ
+0.995 0 0 1 113.386 556.327 Tm [<004F0050>]TJ
+0.99 0 0 1 123.923 556.327 Tm [<0053>]TJ
+0.995 0 0 1 129.823 556.327 Tm [<00490046>]TJ
+0.99 0 0 1 139.636 556.327 Tm [<004A>]TJ
+0.995 0 0 1 142.26 556.327 Tm [<00480049>]TJ
+0.99 0 0 1 152.282 556.327 Tm [<0055>]TJ
+0.995 0 0 1 158.014 556.327 Tm [<0042004F0045>]TJ
+0.99 0 0 1 175.411 556.327 Tm [<004A>]TJ
+0.995 0 0 1 178.035 556.327 Tm [<0054004F>]TJ
+0.99 0 0 1 187.541 556.327 Tm [<00080055>-223<00EB0059>]TJ
+0.995 0 0 1 205.474 556.327 Tm [<00460045>]TJ
+0.99 0 0 1 215.049 556.327 Tm [<000D>-223<0055>]TJ
+0.995 0 0 1 223.2 556.327 Tm [<00490046>]TJ
+0.99 0 0 1 233.014 556.327 Tm [<005A>]TJ
+0.995 0 0 1 239.771 556.327 Tm [<0058>]TJ
+0.99 0 0 1 246.512 556.327 Tm [<004A004D004D>]TJ
+0.995 0 0 1 256.387 556.327 Tm [<00430050>]TJ
+0.99 0 0 1 266.438 556.327 Tm [<0055>]TJ
+0.995 0 0 1 269.969 556.327 Tm [<0049>-222<0045>]TJ
+0.99 0 0 1 282.737 556.327 Tm [<004A>]TJ
+0.995 0 0 1 285.361 556.327 Tm [<00540051>]TJ
+0.99 0 0 1 294.51 556.327 Tm [<004D>]TJ
+0.995 0 0 1 297.035 556.327 Tm [<0042>]TJ
+0.99 0 0 1 301.536 556.327 Tm [<005A>-223<0055>]TJ
+0.995 0 0 1 311.824 556.327 Tm [<00490046>-222<0046004F>]TJ
+0.99 0 0 1 333.781 556.327 Tm [<0055004A0053>]TJ
+0.995 0 0 1 343.635 556.327 Tm [<0046>-222<00540049004200450046>]TJ
+0.99 0 0 1 373.701 556.327 Tm [<000D>]TJ
+0.995 0 0 1 378.32 556.327 Tm [<0042004F0045>]TJ
+0.99 0 0 1 395.718 556.327 Tm [<004A0047>-223<0055>]TJ
+0.995 0 0 1 407.367 556.327 Tm [<00490046>]TJ
+0.99 0 0 1 417.181 556.327 Tm [<005A>]TJ
+0.995 0 0 1 423.939 556.327 Tm [<00450050004F>]TJ
+0.99 0 0 1 439.641 556.327 Tm [<00080055>]TJ
+0.995 0 0 1 447.365 556.327 Tm [<00490042>]TJ
+0.99 0 0 1 457.268 556.327 Tm [<0057>]TJ
+0.995 0 0 1 461.933 556.327 Tm [<0046>]TJ
+0.99 0 0 1 468.545 556.327 Tm [<0055>]TJ
+0.995 0 0 1 472.076 556.327 Tm [<00490046>]TJ
+0.98 0 0 1 113.386 544.372 Tm [<00540042004E0046>-212<0045>]TJ
+0.97 0 0 1 141.167 544.372 Tm [<004A>]TJ
+0.98 0 0 1 143.738 544.372 Tm [<004E0046004F0054>]TJ
+0.97 0 0 1 165.373 544.372 Tm [<004A>]TJ
+0.98 0 0 1 167.944 544.372 Tm [<0050004F0054>]TJ
+0.97 0 0 1 184.312 544.372 Tm [<0055>]TJ
+0.98 0 0 1 187.771 544.372 Tm [<00490046>-212<00540049004200450046>-212<0058>]TJ
+0.97 0 0 1 231.325 544.372 Tm [<004A004D004D>]TJ
+0.98 0 0 1 240.918 544.372 Tm [<00490042>]TJ
+0.97 0 0 1 250.671 544.372 Tm [<0057>]TJ
+0.98 0 0 1 255.242 544.372 Tm [<0046>-212<0045>]TJ
+0.97 0 0 1 266.748 544.372 Tm [<004A00EA>]TJ
+0.98 0 0 1 275.416 544.372 Tm [<0046>]TJ
+0.97 0 0 1 279.761 544.372 Tm [<0053>]TJ
+0.98 0 0 1 283.385 544.372 Tm [<0046004F>]TJ
+0.97 0 0 1 293.177 544.372 Tm [<0055>]TJ
+0.98 0 0 1 298.711 544.372 Tm [<005400490042005100460054>]TJ
+0.97 0 0 1 327.811 544.372 Tm [<004A>]TJ
+0.98 0 0 1 330.381 544.372 Tm [<004F>]TJ
+0.97 0 0 1 337.903 544.372 Tm [<0055>]TJ
+0.98 0 0 1 341.363 544.372 Tm [<00490046004E>]TJ
+0.97 0 0 1 358.957 544.372 Tm [<000F>-298<002A0047>-215<0055>]TJ
+0.98 0 0 1 376.1 544.372 Tm [<00490046>-212<00540049004200450046>-212<004900420054>-213<0042>-212<0058>]TJ
+0.97 0 0 1 441.903 544.372 Tm [<004A>]TJ
+0.98 0 0 1 444.474 544.372 Tm [<0045>]TJ
+0.97 0 0 1 449.561 544.372 Tm [<0055>]TJ
+0.98 0 0 1 453.02 544.372 Tm [<0049>-212<0042004F0045>-212<0042>]TJ
+0.98 0 0 1 113.386 532.417 Tm [<00490046>]TJ
+0.97 0 0 1 123.052 532.417 Tm [<004A>]TJ
+0.98 0 0 1 125.622 532.417 Tm [<00480049>]TJ
+0.97 0 0 1 135.493 532.417 Tm [<0055000D>]TJ
+0.98 0 0 1 143.317 532.417 Tm [<00430050>]TJ
+0.97 0 0 1 153.217 532.417 Tm [<0055>]TJ
+0.98 0 0 1 156.677 532.417 Tm [<0049>-199<0042>]TJ
+0.97 0 0 1 168.379 532.417 Tm [<0053>]TJ
+0.98 0 0 1 172.003 532.417 Tm [<004600420054>-199<0058>]TJ
+0.97 0 0 1 193.283 532.417 Tm [<004A004D004D>]TJ
+0.98 0 0 1 202.75 532.417 Tm [<0045>]TJ
+0.97 0 0 1 207.836 532.417 Tm [<004A>]TJ
+0.98 0 0 1 210.407 532.417 Tm [<00540051>]TJ
+0.97 0 0 1 219.419 532.417 Tm [<004D>]TJ
+0.98 0 0 1 221.892 532.417 Tm [<0042>]TJ
+0.97 0 0 1 226.325 532.417 Tm [<005A>]TJ
+0.98 0 0 1 232.738 532.417 Tm [<0046>]TJ
+0.97 0 0 1 237.083 532.417 Tm [<0059>]TJ
+0.98 0 0 1 241.663 532.417 Tm [<00420044>]TJ
+0.97 0 0 1 250.031 532.417 Tm [<0055004D005A>-201<0055>]TJ
+0.98 0 0 1 265.837 532.417 Tm [<00490046>-199<00540042004E0046>-200<00540049004200450046>]TJ
+0.97 0 0 1 323.12 532.417 Tm [<000D>]TJ
+0.98 0 0 1 327.485 532.417 Tm [<0042>]TJ
+0.97 0 0 1 331.917 532.417 Tm [<004D0055>]TJ
+0.98 0 0 1 337.851 532.417 Tm [<00490050005600480049>-199<005800490042>]TJ
+0.97 0 0 1 381.469 532.417 Tm [<0055>-201<004A>]TJ
+0.98 0 0 1 389.448 532.417 Tm [<0054>]TJ
+0.97 0 0 1 395.311 532.417 Tm [<0053>]TJ
+0.98 0 0 1 398.935 532.417 Tm [<0046>]TJ
+0.97 0 0 1 403.28 532.417 Tm [<0057>]TJ
+0.98 0 0 1 407.851 532.417 Tm [<00460042>]TJ
+0.97 0 0 1 416.628 532.417 Tm [<004D>]TJ
+0.98 0 0 1 419.102 532.417 Tm [<00460045>-199<0050>]TJ
+0.97 0 0 1 435.413 532.417 Tm [<0047>-201<004A0055>]TJ
+0.98 0 0 1 448.567 532.417 Tm [<0045004600510046004F00450054>]TJ
+0.99 0 0 1 113.386 520.462 Tm [<0050004F>]TJ
+0.985 0 0 1 126.057 520.462 Tm [<0055>]TJ
+0.99 0 0 1 129.57 520.462 Tm [<00490046>-221<0042>]TJ
+0.985 0 0 1 145.999 520.462 Tm [<0053>]TJ
+0.99 0 0 1 149.679 520.462 Tm [<004600420054>]TJ
+0.985 0 0 1 162.501 520.462 Tm [<0008>]TJ
+0.99 0 0 1 166.67 520.462 Tm [<0045>]TJ
+0.985 0 0 1 171.808 520.462 Tm [<004A>]TJ
+0.99 0 0 1 174.419 520.462 Tm [<004E0046004F0054>]TJ
+0.985 0 0 1 196.275 520.462 Tm [<004A>]TJ
+0.99 0 0 1 198.885 520.462 Tm [<0050004F0054>]TJ
+0.985 0 0 1 213.325 520.462 Tm [<000F>]TJ
+0.99 0 0 1 218.65 520.462 Tm [<0027>]TJ
+0.985 0 0 1 223.887 520.462 Tm [<004A>]TJ
+0.99 0 0 1 226.497 520.462 Tm [<004F0042>]TJ
+0.985 0 0 1 236.479 520.462 Tm [<004D004D005A000D>-222<004A0047>-223<0055>]TJ
+0.99 0 0 1 262.216 520.462 Tm [<00490046>-221<00540049004200450046>]TJ
+0.985 0 0 1 299.69 520.462 Tm [<004A>]TJ
+0.99 0 0 1 302.3 520.462 Tm [<0054>]TJ
+0.985 0 0 1 308.442 520.462 Tm [<00EB0059>]TJ
+0.99 0 0 1 318.599 520.462 Tm [<00460045>]TJ
+0.985 0 0 1 328.126 520.462 Tm [<000D>-223<0055>]TJ
+0.99 0 0 1 336.231 520.462 Tm [<00490046>-221<0042>]TJ
+0.985 0 0 1 352.66 520.462 Tm [<0053>]TJ
+0.99 0 0 1 356.34 520.462 Tm [<004600420054>-221<0058>]TJ
+0.985 0 0 1 378.056 520.462 Tm [<004A004D004D>-222<004D>]TJ
+0.99 0 0 1 390.389 520.462 Tm [<00500050004C>]TJ
+0.985 0 0 1 407.459 520.462 Tm [<004D004A>]TJ
+0.99 0 0 1 412.582 520.462 Tm [<004C0046>-221<005000510046004F>-222<0058>]TJ
+0.985 0 0 1 452.994 520.462 Tm [<004A>]TJ
+0.99 0 0 1 455.605 520.462 Tm [<004F0045005000580054>]TJ
+1 0 0 1 113.386 508.506 Tm [<0050004F>-220<005500490046>-220<00540042004E0046>-220<0056004F004500460053004D005A004A004F0048>-220<00540049004200450046000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F63 11.95517 Tf 1 0 0 1 113.386 472.641 Tm [<002A004E0042004800460054>]TJ
+0 g 0 G
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 448.731 Tm [<003F00510048005A004C00500044004A0048>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 448.731 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 142.2 448.731 Tm [<003C>]TJ
+/F123 7.97011 Tf 1 0 0 1 145.418 448.731 Tm [<001F005A004C00470057004B0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 179.034 448.731 Tm [<000D>]TJ
+/F123 7.97011 Tf 1 0 0 1 181.475 448.731 Tm [<001F004B0048004C004A004B00570021>]TJ
+/F105 9.96264 Tf 1 0 0 1 219.893 448.731 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 223.111 448.731 Tm [<001F0049004C004F00480021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 436.775 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 436.775 Tm [<0054>]TJ
+1.03 0 0 1 132.763 436.775 Tm [<004D>]TJ
+1.02 0 0 1 135.39 436.775 Tm [<0050004200450054>]TJ
+1.03 0 0 1 156.661 436.775 Tm [<004A>]TJ
+1.02 0 0 1 159.391 436.775 Tm [<004E004200480046>]TJ
+1.03 0 0 1 183.67 436.775 Tm [<00EB004D>]TJ
+1.02 0 0 1 192.053 436.775 Tm [<0046>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 198.732 436.775 Tm [<001F0049004C004F>]TJ
+1.02 0 0 1 218.518 436.775 Tm [<0048>]TJ
+1.03 0 0 1 223.416 436.775 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 228.363 436.775 Tm [<000D>]TJ
+1.02 0 0 1 233.04 436.775 Tm [<00540046>]TJ
+1.03 0 0 1 241.637 436.775 Tm [<00550055004A>]TJ
+1.02 0 0 1 251.714 436.775 Tm [<004F0048>]TJ
+1.03 0 0 1 264.277 436.775 Tm [<004A0055>]TJ
+1.02 0 0 1 270.68 436.775 Tm [<0054>-212<0045>]TJ
+1.03 0 0 1 282.206 436.775 Tm [<004A>]TJ
+1.02 0 0 1 284.936 436.775 Tm [<004E0046004F0054>]TJ
+1.03 0 0 1 307.455 436.775 Tm [<004A>]TJ
+1.02 0 0 1 310.184 436.775 Tm [<0050004F0054>]TJ
+1.03 0 0 1 327.218 436.775 Tm [<0055>]TJ
+1.02 0 0 1 330.892 436.775 Tm [<0050>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 338.18 436.775 Tm [<001F>]TJ
+1.02 0 0 1 343.127 436.775 Tm [<005A>]TJ
+1.03 0 0 1 348.025 436.775 Tm [<004C>]TJ
+1.02 0 0 1 352.971 436.775 Tm [<0047>]TJ
+1.03 0 0 1 357.87 436.775 Tm [<0057>]TJ
+1.02 0 0 1 362.816 436.775 Tm [<004B>]TJ
+1.03 0 0 1 367.714 436.775 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 375.645 436.775 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 393.38 436.775 Tm [<001F>]TJ
+1.02 0 0 1 398.326 436.775 Tm [<004B0048>]TJ
+1.03 0 0 1 408.123 436.775 Tm [<004C>]TJ
+1.02 0 0 1 413.069 436.775 Tm [<004A004B>]TJ
+1.03 0 0 1 422.866 436.775 Tm [<00570021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 432.758 436.775 Tm [<001C>-211<004A0047>]TJ
+1.02 0 0 1 445.755 436.775 Tm [<004F0050004F0046>-212<0042>]TJ
+1.03 0 0 1 473.52 436.775 Tm [<0053>]TJ
+1.02 0 0 1 477.368 436.775 Tm [<0046>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 436.327 Tm [<002A0047>-200<0050004F004D005A>-200<0050004F0046>-200<0045004A004E0046004F0054004A0050004F>-200<004A0054>]TJ
+1 0 0 1 491.852 427.361 Tm [<0056005400460045000D>-200<005500490046>-200<00440050004E004E0042>-200<0054004900500056004D0045>]TJ
+1 0 0 1 491.852 418.394 Tm [<004F0050004F0046005500490046004D004600540054>-200<00530046004E0042004A004F000D>-200<0058004A00550049>]TJ
+1 0 0 1 491.852 409.428 Tm [<004F005000550049004A004F0048>-200<004D004600470055>-200<00500053>-200<0053004A004800490055000D>-200<004A004F>]TJ
+1 0 0 1 491.852 400.462 Tm [<00500053004500460053>-200<00550050>-200<004A004F0045004A0044004200550046>-200<00580049004A00440049>]TJ
+1 0 0 1 491.852 391.495 Tm [<0045004A004E0046004F0054004A0050004F>-200<004A0054>-200<00530046004700460053005300460045>-200<00550050000F>]TJ
+0.995 0 0 1 491.852 382.529 Tm [<0034005100460044004A0047005A004A004F0048>-201<0042>]TJ
+/F105 7.97011 Tf 0.995 0 0 1 529.664 382.529 Tm [<001D00490046004A004800490055001F>]TJ
+/F63 7.97011 Tf 0.995 0 0 1 560.386 382.529 Tm [<0050004F004D005A>]TJ
+1 0 0 1 491.852 373.563 Tm [<004A0054>-200<00450050004F0046>-200<004700500053>-200<004A004F005400550042004F00440046>]TJ
+1 0 0 1 491.852 364.596 Tm [<0058004A00550049001B>]TJ
+/F105 7.97011 Tf 1 0 0 1 509.458 364.596 Tm [<003C000D01EE0044004E003E>]TJ
+/F63 7.97011 Tf 1 0 0 1 530.452 364.596 Tm [<000F>-266<002F005000550046>-200<0055004900420055>]TJ
+1 0 0 1 491.852 355.63 Tm [<004300420044004C0048005300500056004F0045>-200<004A004E0042004800460054>-200<004A004F>]TJ
+1 0 0 1 491.852 346.663 Tm [<0054004D004A004500460054>-200<0042004F0045>-200<00420053004600420054>-200<000900420054>-200<00570042004D005600460054>]TJ
+1 0 0 1 491.852 337.697 Tm [<00550050>-200<005500490046>]TJ
+/F105 7.97011 Tf 1 0 0 1 511.204 337.697 Tm [<004A004E004200480046>]TJ
+/F63 7.97011 Tf 1 0 0 1 532.269 337.697 Tm [<0042005500550053004A0043005600550046000A>]TJ
+1 0 0 1 491.852 328.731 Tm [<004200530046004F00080055>-200<005400440042004D00460045>-200<00550050>-200<005500490046004A0053>]TJ
+1 0 0 1 491.852 319.764 Tm [<00440050004F00550042004A004F0046005300080054>-200<0045004A004E0046004F0054004A0050004F0054000F>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 424.82 Tm [<0051>]TJ
+1.03 0 0 1 118.69 424.82 Tm [<0053>]TJ
+1.02 0 0 1 122.538 424.82 Tm [<004600540046004F>]TJ
+1.03 0 0 1 141.328 424.82 Tm [<0055000D>-218<0055>]TJ
+1.02 0 0 1 153.435 424.82 Tm [<00490046>]TJ
+1.03 0 0 1 165.731 424.82 Tm [<004A>]TJ
+1.02 0 0 1 168.46 424.82 Tm [<004E004200480046>-220<004900420054>]TJ
+1.03 0 0 1 209.28 424.82 Tm [<004A0055>]TJ
+1.02 0 0 1 215.683 424.82 Tm [<0054>-219<004F0042>]TJ
+1.03 0 0 1 232.277 424.82 Tm [<0055>]TJ
+1.02 0 0 1 235.95 424.82 Tm [<0056>]TJ
+1.03 0 0 1 241.316 424.82 Tm [<0053>]TJ
+1.02 0 0 1 245.164 424.82 Tm [<0042>]TJ
+1.03 0 0 1 249.777 424.82 Tm [<004D>]TJ
+1.02 0 0 1 254.639 424.82 Tm [<0058>]TJ
+1.03 0 0 1 261.55 424.82 Tm [<004A>]TJ
+1.02 0 0 1 264.279 424.82 Tm [<0045>]TJ
+1.03 0 0 1 269.573 424.82 Tm [<0055>]TJ
+1.02 0 0 1 273.247 424.82 Tm [<0049>]TJ
+1.03 0 0 1 278.785 424.82 Tm [<001C>-220<004A0047>]TJ
+1.02 0 0 1 291.948 424.82 Tm [<0050004F>]TJ
+1.03 0 0 1 302.75 424.82 Tm [<004D005A>]TJ
+1.02 0 0 1 312.353 424.82 Tm [<0050004F0046>-220<0045>]TJ
+1.03 0 0 1 335.207 424.82 Tm [<004A>]TJ
+1.02 0 0 1 337.937 424.82 Tm [<004E0046004F0054>]TJ
+1.03 0 0 1 360.455 424.82 Tm [<004A>]TJ
+1.02 0 0 1 363.185 424.82 Tm [<0050004F>]TJ
+1.03 0 0 1 376.222 424.82 Tm [<004A>]TJ
+1.02 0 0 1 378.952 424.82 Tm [<0054>-219<0048>]TJ
+1.03 0 0 1 389.997 424.82 Tm [<004A0057>]TJ
+1.02 0 0 1 397.581 424.82 Tm [<0046004F>]TJ
+1.03 0 0 1 407.773 424.82 Tm [<000D>-218<0055>]TJ
+1.02 0 0 1 416.207 424.82 Tm [<00490046>-219<0050>]TJ
+1.03 0 0 1 433.634 424.82 Tm [<0055>]TJ
+1.02 0 0 1 437.308 424.82 Tm [<00490046>]TJ
+1.03 0 0 1 447.368 424.82 Tm [<0053>]TJ
+1.02 0 0 1 453.451 424.82 Tm [<0050004F00460054>]TJ
+1.03 0 0 1 475.085 424.82 Tm [<004A>]TJ
+1.02 0 0 1 477.815 424.82 Tm [<0054>]TJ
+1.015 0 0 1 113.386 412.865 Tm [<005400440042>]TJ
+1.02 0 0 1 126.107 412.865 Tm [<004D>]TJ
+1.015 0 0 1 128.708 412.865 Tm [<00460045>-211<0042004400440050>]TJ
+1.02 0 0 1 158.462 412.865 Tm [<0053>]TJ
+1.015 0 0 1 162.273 412.865 Tm [<0045>]TJ
+1.02 0 0 1 167.541 412.865 Tm [<004A>]TJ
+1.015 0 0 1 170.244 412.865 Tm [<004F0048>]TJ
+1.02 0 0 1 180.599 412.865 Tm [<004D005A000F>-285<002A0047>]TJ
+1.015 0 0 1 202.114 412.865 Tm [<00430050>]TJ
+1.02 0 0 1 212.368 412.865 Tm [<0055>]TJ
+1.015 0 0 1 216.006 412.865 Tm [<0049>-211<0042>]TJ
+1.02 0 0 1 228.246 412.865 Tm [<0053>]TJ
+1.015 0 0 1 232.056 412.865 Tm [<0046>-211<0048>]TJ
+1.02 0 0 1 243.406 412.865 Tm [<004A0057>]TJ
+1.015 0 0 1 250.916 412.865 Tm [<0046004F>]TJ
+1.02 0 0 1 261.058 412.865 Tm [<000D>]TJ
+1.015 0 0 1 265.697 412.865 Tm [<00450046>]TJ
+1.02 0 0 1 275.465 412.865 Tm [<0047>]TJ
+1.015 0 0 1 278.859 412.865 Tm [<0050>]TJ
+1.02 0 0 1 283.966 412.865 Tm [<0053>]TJ
+1.015 0 0 1 287.776 412.865 Tm [<004E0042>]TJ
+1.02 0 0 1 300.578 412.865 Tm [<0055004A>]TJ
+1.015 0 0 1 306.919 412.865 Tm [<0050004F0054>-211<004E>]TJ
+1.02 0 0 1 332.072 412.865 Tm [<004A>]TJ
+1.015 0 0 1 334.775 412.865 Tm [<00480049>]TJ
+1.02 0 0 1 344.999 412.865 Tm [<0055>]TJ
+1.015 0 0 1 350.775 412.865 Tm [<0046004F005400560046>]TJ
+1.02 0 0 1 374.811 412.865 Tm [<000F>-285<0265>]TJ
+1.015 0 0 1 390.52 412.865 Tm [<0046>]TJ
+1.02 0 0 1 397.157 412.865 Tm [<004A>]TJ
+1.015 0 0 1 399.86 412.865 Tm [<004E004200480046>-211<00440042004F>-211<00430046>-212<0056005400460045>]TJ
+1.02 0 0 1 473.544 412.865 Tm [<004A>]TJ
+1.015 0 0 1 476.247 412.865 Tm [<004F>]TJ
+0.99 0 0 1 113.386 400.91 Tm [<0055>]TJ
+0.995 0 0 1 116.917 400.91 Tm [<00490046>-218<004300420044004C0048>]TJ
+0.99 0 0 1 151.998 400.91 Tm [<0053>]TJ
+0.995 0 0 1 155.697 400.91 Tm [<00500056004F0045>-218<0050>]TJ
+0.99 0 0 1 183.8 400.91 Tm [<0047>]TJ
+0.995 0 0 1 189.255 400.91 Tm [<0042>-218<0054>]TJ
+0.99 0 0 1 199.892 400.91 Tm [<004D004A>]TJ
+0.995 0 0 1 205.04 400.91 Tm [<00450046>-218<0050>]TJ
+0.99 0 0 1 221.783 400.91 Tm [<0053>]TJ
+0.995 0 0 1 227.642 400.91 Tm [<0042>]TJ
+0.99 0 0 1 232.143 400.91 Tm [<0053>]TJ
+0.995 0 0 1 235.842 400.91 Tm [<00460042>-218<0043>]TJ
+0.99 0 0 1 251.96 400.91 Tm [<005A>]TJ
+0.995 0 0 1 258.678 400.91 Tm [<00540046>]TJ
+0.99 0 0 1 267.064 400.91 Tm [<00550055004A>]TJ
+0.995 0 0 1 276.749 400.91 Tm [<004F0048>]TJ
+/F123 7.97011 Tf 0.99 0 0 1 289.061 400.91 Tm [<001F>]TJ
+0.995 0 0 1 293.815 400.91 Tm [<0051004400500048>]TJ
+0.99 0 0 1 312.928 400.91 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 320.671 400.91 Tm [<00420054>]TJ
+0.99 0 0 1 331.307 400.91 Tm [<0055>]TJ
+0.995 0 0 1 334.838 400.91 Tm [<00490046>]TJ
+0.99 0 0 1 346.813 400.91 Tm [<0057>]TJ
+0.995 0 0 1 351.478 400.91 Tm [<0042>]TJ
+0.99 0 0 1 355.978 400.91 Tm [<004D>]TJ
+0.995 0 0 1 358.503 400.91 Tm [<00560046>]TJ
+0.99 0 0 1 370.309 400.91 Tm [<0047>]TJ
+0.995 0 0 1 373.604 400.91 Tm [<0050>]TJ
+0.99 0 0 1 378.61 400.91 Tm [<0053>-219<0055>]TJ
+0.995 0 0 1 388 400.91 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 399.975 400.91 Tm [<004C>]TJ
+0.995 0 0 1 404.729 400.91 Tm [<00500044004A0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.995 0 0 1 426.003 400.91 Tm [<0042>]TJ
+0.99 0 0 1 430.504 400.91 Tm [<005500550053004A>]TJ
+0.995 0 0 1 443.888 400.91 Tm [<00430056>]TJ
+0.99 0 0 1 454.168 400.91 Tm [<0055>]TJ
+0.995 0 0 1 457.699 400.91 Tm [<0046>]TJ
+0.99 0 0 1 462.11 400.91 Tm [<000D>]TJ
+0.995 0 0 1 466.693 400.91 Tm [<0042004F0045>]TJ
+1 0 0 1 113.386 388.955 Tm [<0042004F005A00580049004600530046>-220<0046004D00540046>-220<0058004A00550049>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<00440050004E004E0042004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 66.18 365.044 Tm [<003F005800560048004C00500044004A0048>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 365.044 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [<0265004A0054>-221<00530046005500560053004F0054>-221<0042004F>-221<0049004300500059>-222<00440050004F00550042004A004F004A004F0048>-221<005500490046>-221<004A004E004200480046>]TJ
+/F123 7.97011 Tf 1 0 0 1 287.722 353.089 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 316.536 353.089 Tm [<000F>-297<02650046>-221<00490046004A004800490055>-221<0042004F0045>-222<0058004A004500550049>-221<00500047>-221<005500490046>-221<004300500059>-222<004200530046>-221<005500490046>]TJ
+1 0 0 1 113.386 341.134 Tm [<00490046004A004800490055>-220<0042004F0045>-220<0058004A004500550049>-220<00500047>-220<005500490046>-220<004A004E004200480046>-220<00420054>-220<004500460044004D0042005300460045>-220<0058004A00550049>-220<005500490046>-220<0051005300460057004A005000560054>-220<00440050004E004E0042004F0045000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F90 11.95517 Tf 1 0 0 1 113.386 281.358 Tm [<0025010200F1010700F900FE00F7>-220<0103010900FD00F200FF00FC0103>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1.02 0 0 1 113.386 257.448 Tm [<002D>]TJ
+1.015 0 0 1 118.599 257.448 Tm [<00460044>]TJ
+1.02 0 0 1 126.325 257.448 Tm [<0055>]TJ
+1.015 0 0 1 129.83 257.448 Tm [<0056>]TJ
+1.02 0 0 1 134.755 257.448 Tm [<0053>]TJ
+1.015 0 0 1 138.454 257.448 Tm [<0046>]TJ
+1.02 0 0 1 142.539 257.448 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 148.425 257.448 Tm [<0051>]TJ
+1.02 0 0 1 153.704 257.448 Tm [<0053>]TJ
+1.015 0 0 1 157.514 257.448 Tm [<0050>]TJ
+1.02 0 0 1 162.621 257.448 Tm [<0057004A>]TJ
+1.015 0 0 1 170.13 257.448 Tm [<004500460054>]TJ
+1.02 0 0 1 186.141 257.448 Tm [<0057>]TJ
+1.015 0 0 1 190.947 257.448 Tm [<0046>]TJ
+1.02 0 0 1 195.447 257.448 Tm [<0053005A>]TJ
+1.015 0 0 1 206.14 257.448 Tm [<004300420054>]TJ
+1.02 0 0 1 219.933 257.448 Tm [<004A>]TJ
+1.015 0 0 1 222.636 257.448 Tm [<0044>-216<00430056>]TJ
+1.02 0 0 1 239.384 257.448 Tm [<0055>]TJ
+1.015 0 0 1 245.209 257.448 Tm [<0054>]TJ
+1.02 0 0 1 249.264 257.448 Tm [<0055004A004D004D>]TJ
+1.015 0 0 1 262.995 257.448 Tm [<005600540046>]TJ
+1.02 0 0 1 276.889 257.448 Tm [<0047>]TJ
+1.015 0 0 1 280.283 257.448 Tm [<0056>]TJ
+1.02 0 0 1 285.622 257.448 Tm [<004D>]TJ
+1.015 0 0 1 290.41 257.448 Tm [<0045>]TJ
+1.02 0 0 1 295.679 257.448 Tm [<0053>]TJ
+1.015 0 0 1 299.49 257.448 Tm [<00420058>]TJ
+1.02 0 0 1 310.957 257.448 Tm [<004A>]TJ
+1.015 0 0 1 313.66 257.448 Tm [<004F0048>]TJ
+1.02 0 0 1 326.201 257.448 Tm [<0047>]TJ
+1.015 0 0 1 329.596 257.448 Tm [<00420044>]TJ
+1.02 0 0 1 338.262 257.448 Tm [<004A004D004A0055004A>]TJ
+1.015 0 0 1 352.61 257.448 Tm [<00460054>-216<0042>]TJ
+1.02 0 0 1 367.943 257.448 Tm [<004A>]TJ
+1.015 0 0 1 370.646 257.448 Tm [<004E00460045>-216<0042>]TJ
+1.02 0 0 1 395.403 257.448 Tm [<0055>]TJ
+1.015 0 0 1 401.228 257.448 Tm [<0044>]TJ
+1.02 0 0 1 405.303 257.448 Tm [<0053>]TJ
+1.015 0 0 1 409.114 257.448 Tm [<00460042>]TJ
+1.02 0 0 1 418.205 257.448 Tm [<0055004A>]TJ
+1.015 0 0 1 424.546 257.448 Tm [<004F0048>-216<0054>]TJ
+1.02 0 0 1 441.142 257.448 Tm [<005A>]TJ
+1.015 0 0 1 445.837 257.448 Tm [<004E00430050>]TJ
+1.02 0 0 1 464.302 257.448 Tm [<004D>]TJ
+1.015 0 0 1 466.903 257.448 Tm [<0054>]TJ
+1.02 0 0 1 473.145 257.448 Tm [<0055>]TJ
+1.015 0 0 1 476.783 257.448 Tm [<0050>]TJ
+1 0 0 1 113.386 245.493 Tm [<00580049004200550046005700460053>-220<0046004F0045000D>-220<0046000F0048000F>-293<0042>-220<00430056005500550050004F>-220<004700500053>-220<004F00420057004A004800420055004A0050004F>-220<00500053>-220<0042>-220<00430056004D004D00460055>-220<004300460047005000530046>-220<0046004200440049>-220<0054005500460051000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 61.378 221.582 Tm [<003F00510048005A0056005C005000450052004F>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 221.582 Tm [<001F00460052005000500044005100470021>]TJ
+/F111 7.97011 Tf 1 0 0 1 156.607 221.582 Tm [<003E>]TJ
+/F123 7.97011 Tf 1 0 0 1 161.409 221.582 Tm [<001F0056004800570057004C0051004A00560021>]TJ
+/F111 7.97011 Tf 1 0 0 1 209.432 221.582 Tm [<0040>]TJ
+/F123 7.97011 Tf 1 0 0 1 214.234 221.582 Tm [<001F004700550044005A004C0051004A0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 113.386 209.627 Tm [<0265004A>]TJ
+0.98 0 0 1 125.765 209.627 Tm [<0054>-215<0044>]TJ
+0.97 0 0 1 135.714 209.627 Tm [<0053>]TJ
+0.98 0 0 1 139.338 209.627 Tm [<00460042>]TJ
+0.97 0 0 1 148.115 209.627 Tm [<0055>]TJ
+0.98 0 0 1 151.574 209.627 Tm [<00460054>-215<0042>-215<0054>]TJ
+0.97 0 0 1 172.38 209.627 Tm [<005A>]TJ
+0.98 0 0 1 176.844 209.627 Tm [<004E00430050>]TJ
+0.97 0 0 1 194.672 209.627 Tm [<004D>-217<0055>]TJ
+0.98 0 0 1 202.705 209.627 Tm [<00490042>]TJ
+0.97 0 0 1 212.458 209.627 Tm [<0055>-217<004A>]TJ
+0.98 0 0 1 220.587 209.627 Tm [<0054>-215<00440042>]TJ
+0.97 0 0 1 234.969 209.627 Tm [<004D004D>]TJ
+0.98 0 0 1 239.916 209.627 Tm [<00460045>-215<0058>]TJ
+0.97 0 0 1 258.086 209.627 Tm [<004A0055>]TJ
+0.98 0 0 1 264.116 209.627 Tm [<0049>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 271.536 209.627 Tm [<001F>]TJ
+0.98 0 0 1 276.194 209.627 Tm [<0046005200500050004400510047>]TJ
+0.97 0 0 1 309.138 209.627 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 316.722 209.627 Tm [<0042004F0045>-215<004500460054>]TJ
+0.97 0 0 1 347.134 209.627 Tm [<004A>]TJ
+0.98 0 0 1 349.705 209.627 Tm [<0048004F00460045>-215<0058>]TJ
+0.97 0 0 1 377.872 209.627 Tm [<004A0055>]TJ
+0.98 0 0 1 383.902 209.627 Tm [<0049>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 391.322 209.627 Tm [<001F>]TJ
+0.98 0 0 1 395.98 209.627 Tm [<0047>]TJ
+0.97 0 0 1 400.687 209.627 Tm [<0055>]TJ
+0.98 0 0 1 405.345 209.627 Tm [<0044005A>]TJ
+0.97 0 0 1 414.757 209.627 Tm [<004C>]TJ
+0.98 0 0 1 419.416 209.627 Tm [<0051004A>]TJ
+0.97 0 0 1 428.828 209.627 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 433.486 209.627 Tm [<001C>-220<0055>]TJ
+0.98 0 0 1 441.444 209.627 Tm [<00490046>-214<0054>]TJ
+0.97 0 0 1 457.123 209.627 Tm [<005A>]TJ
+0.98 0 0 1 461.588 209.627 Tm [<004E00430050>]TJ
+0.97 0 0 1 479.416 209.627 Tm [<004D>]TJ
+1.025 0 0 1 113.386 197.672 Tm [<004A>]TJ
+1.02 0 0 1 116.102 197.672 Tm [<0054>-213<00420044>]TJ
+1.025 0 0 1 131.055 197.672 Tm [<0055>]TJ
+1.02 0 0 1 134.71 197.672 Tm [<00560042>]TJ
+1.025 0 0 1 144.689 197.672 Tm [<004D004D005A>]TJ
+1.02 0 0 1 156.804 197.672 Tm [<0042004F>-213<004900430050>]TJ
+1.025 0 0 1 185.099 197.672 Tm [<0059000D>]TJ
+1.02 0 0 1 194.615 197.672 Tm [<0042004F0045>]TJ
+1.025 0 0 1 212.362 197.672 Tm [<004A0055>]TJ
+1.02 0 0 1 218.734 197.672 Tm [<0054>]TJ
+1.025 0 0 1 224.978 197.672 Tm [<0053>]TJ
+1.02 0 0 1 228.807 197.672 Tm [<0046>]TJ
+1.025 0 0 1 233.329 197.672 Tm [<0047>]TJ
+1.02 0 0 1 236.74 197.672 Tm [<0046>]TJ
+1.025 0 0 1 241.262 197.672 Tm [<0053>]TJ
+1.02 0 0 1 245.091 197.672 Tm [<0046004F00440046>-213<00510050>]TJ
+1.025 0 0 1 276.506 197.672 Tm [<004A>]TJ
+1.02 0 0 1 279.223 197.672 Tm [<004F>]TJ
+1.025 0 0 1 284.893 197.672 Tm [<0055>-212<0009004A000F>]TJ
+1.02 0 0 1 299.285 197.672 Tm [<0046>]TJ
+1.025 0 0 1 303.807 197.672 Tm [<000F>-285<0055>]TJ
+1.02 0 0 1 312.879 197.672 Tm [<00490046>]TJ
+1.025 0 0 1 325.109 197.672 Tm [<004A>]TJ
+1.02 0 0 1 327.825 197.672 Tm [<004F>]TJ
+1.025 0 0 1 333.495 197.672 Tm [<0055>]TJ
+1.02 0 0 1 337.151 197.672 Tm [<0046>]TJ
+1.025 0 0 1 341.673 197.672 Tm [<0053>]TJ
+1.02 0 0 1 345.502 197.672 Tm [<005400460044>]TJ
+1.025 0 0 1 358.195 197.672 Tm [<0055004A>]TJ
+1.02 0 0 1 364.567 197.672 Tm [<0050004F>-213<0050>]TJ
+1.025 0 0 1 382.669 197.672 Tm [<0047>-212<004A0055>]TJ
+1.02 0 0 1 394.621 197.672 Tm [<0054>]TJ
+1.025 0 0 1 400.865 197.672 Tm [<004D>]TJ
+1.02 0 0 1 403.479 197.672 Tm [<0046>]TJ
+1.025 0 0 1 408.001 197.672 Tm [<00470055>]TJ
+1.02 0 0 1 417.236 197.672 Tm [<00430050>]TJ
+1.025 0 0 1 427.54 197.672 Tm [<0053>]TJ
+1.02 0 0 1 431.37 197.672 Tm [<00450046>]TJ
+1.025 0 0 1 441.186 197.672 Tm [<0053>]TJ
+1.02 0 0 1 447.184 197.672 Tm [<0058>]TJ
+1.025 0 0 1 454.095 197.672 Tm [<004A0055>]TJ
+1.02 0 0 1 460.467 197.672 Tm [<0049>]TJ
+1.025 0 0 1 468.174 197.672 Tm [<0055>]TJ
+1.02 0 0 1 471.829 197.672 Tm [<00490046>]TJ
+1.005 0 0 1 113.386 185.717 Tm [<0043004200540046004D004A004F0046000A>-220<004A0054>-220<005500490046>-221<00500053004A0048004A004F>-220<00500047>-221<005500490046>-220<00440050005000530045004A004F004200550046>-220<0054005A005400550046004E>-221<004700500053>]TJ
+/F123 7.97011 Tf 1.005 0 0 1 321.311 185.717 Tm [<001F004700550044005A004C0051004A0021>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 364.748 185.717 Tm [<001C>-221<004A004F>-220<005500560053004F000D>-221<00550049004A0054>-220<004900430050005900080054>-221<0058004A004500550049>-220<004A0054>]TJ
+1 0 0 1 113.386 173.762 Tm [<005500490046>-218<004D004200530048004600540055>-218<0059000E00440050005000530045004A004F004200550046>-218<004A004F>]TJ
+/F123 7.97011 Tf 1 0 0 1 222.764 173.762 Tm [<001F004700550044005A004C0051004A0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 265.984 173.762 Tm [<000D>-218<004A00550054>-218<00490046004A004800490055>-219<005500490046>-218<004D004200530048004600540055>-218<005A000E00440050005000530045004A004F004200550046000D>-218<0042004F0045>-219<004A00550054>-218<00450046005100550049>-218<005500490046>]TJ
+1.015 0 0 1 113.386 161.807 Tm [<0054004E0042>]TJ
+1.02 0 0 1 130.243 161.807 Tm [<004D004D>]TJ
+1.015 0 0 1 135.446 161.807 Tm [<00460054>]TJ
+1.02 0 0 1 144 161.807 Tm [<0055>]TJ
+1.015 0 0 1 149.841 161.807 Tm [<004F004600480042>]TJ
+1.02 0 0 1 169.287 161.807 Tm [<0055004A0057>]TJ
+1.015 0 0 1 180.434 161.807 Tm [<0046>]TJ
+1.02 0 0 1 187.137 161.807 Tm [<005A000E>]TJ
+1.015 0 0 1 195.033 161.807 Tm [<004400500050>]TJ
+1.02 0 0 1 209.321 161.807 Tm [<0053>]TJ
+1.015 0 0 1 213.132 161.807 Tm [<0045>]TJ
+1.02 0 0 1 218.4 161.807 Tm [<004A>]TJ
+1.015 0 0 1 221.103 161.807 Tm [<004F0042>]TJ
+1.02 0 0 1 231.337 161.807 Tm [<0055>]TJ
+1.015 0 0 1 234.975 161.807 Tm [<0046>]TJ
+1.02 0 0 1 239.475 161.807 Tm [<000F>]TJ
+1.01 0 0 1 244.92 161.807 Tm [<0022>]TJ
+1.015 0 0 1 251.018 161.807 Tm [<004F>]TJ
+1.02 0 0 1 256.66 161.807 Tm [<005A>]TJ
+1.015 0 0 1 263.558 161.807 Tm [<00510042>]TJ
+1.02 0 0 1 273.427 161.807 Tm [<00530055>]TJ
+1.015 0 0 1 283.079 161.807 Tm [<0050>]TJ
+1.02 0 0 1 288.186 161.807 Tm [<0047>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 293.783 161.807 Tm [<001F>]TJ
+1.015 0 0 1 298.681 161.807 Tm [<0047>]TJ
+1.02 0 0 1 303.555 161.807 Tm [<0055>]TJ
+1.015 0 0 1 308.454 161.807 Tm [<0044005A>]TJ
+1.02 0 0 1 318.202 161.807 Tm [<004C>]TJ
+1.015 0 0 1 323.101 161.807 Tm [<0051004A>]TJ
+1.02 0 0 1 332.849 161.807 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 340.777 161.807 Tm [<0050004F>]TJ
+1.02 0 0 1 353.729 161.807 Tm [<0055>]TJ
+1.015 0 0 1 357.367 161.807 Tm [<00490046>]TJ
+1.02 0 0 1 369.581 161.807 Tm [<004D>]TJ
+1.015 0 0 1 372.183 161.807 Tm [<0046>]TJ
+1.02 0 0 1 376.683 161.807 Tm [<00470055>]TJ
+1.015 0 0 1 385.917 161.807 Tm [<0050>]TJ
+1.02 0 0 1 391.024 161.807 Tm [<0047>-216<0055>]TJ
+1.015 0 0 1 400.259 161.807 Tm [<00490046>]TJ
+1.02 0 0 1 412.473 161.807 Tm [<005A000E>]TJ
+1.015 0 0 1 420.369 161.807 Tm [<0042>]TJ
+1.02 0 0 1 424.96 161.807 Tm [<0059004A>]TJ
+1.015 0 0 1 432.479 161.807 Tm [<0054>]TJ
+1.02 0 0 1 436.534 161.807 Tm [<000D>-217<004A000F>]TJ
+1.015 0 0 1 446.422 161.807 Tm [<0046>]TJ
+1.02 0 0 1 450.922 161.807 Tm [<000F>]TJ
+1.015 0 0 1 456.368 161.807 Tm [<0058>]TJ
+1.02 0 0 1 463.244 161.807 Tm [<004A0055>]TJ
+1.015 0 0 1 469.585 161.807 Tm [<0049>-217<0042>]TJ
+0.98 0 0 1 113.386 149.851 Tm [<004F004600480042>]TJ
+0.97 0 0 1 132.161 149.851 Tm [<0055004A0057>]TJ
+0.98 0 0 1 142.762 149.851 Tm [<0046>]TJ
+0.97 0 0 1 149.025 149.851 Tm [<0059000E>]TJ
+0.98 0 0 1 156.65 149.851 Tm [<004400500050>]TJ
+0.97 0 0 1 170.445 149.851 Tm [<0053>]TJ
+0.98 0 0 1 174.069 149.851 Tm [<0045>]TJ
+0.97 0 0 1 179.156 149.851 Tm [<004A>]TJ
+0.98 0 0 1 181.727 149.851 Tm [<004F0042>]TJ
+0.97 0 0 1 191.607 149.851 Tm [<0055>]TJ
+0.98 0 0 1 195.067 149.851 Tm [<0046>]TJ
+0.97 0 0 1 199.412 149.851 Tm [<000D>-204<004A>]TJ
+0.98 0 0 1 206.323 149.851 Tm [<0054>]TJ
+0.97 0 0 1 212.156 149.851 Tm [<004A>]TJ
+0.98 0 0 1 214.727 149.851 Tm [<0048004F0050>]TJ
+0.97 0 0 1 229.655 149.851 Tm [<0053>]TJ
+0.98 0 0 1 233.279 149.851 Tm [<00460045>]TJ
+0.97 0 0 1 244.629 149.851 Tm [<004A>]TJ
+0.98 0 0 1 247.2 149.851 Tm [<004F>]TJ
+0.97 0 0 1 254.566 149.851 Tm [<0055>]TJ
+0.98 0 0 1 258.026 149.851 Tm [<00490046>-196<00430050>]TJ
+0.97 0 0 1 279.51 149.851 Tm [<00590008>]TJ
+0.98 0 0 1 286.043 149.851 Tm [<0054>-196<0058>]TJ
+0.97 0 0 1 298.515 149.851 Tm [<004A>]TJ
+0.98 0 0 1 301.086 149.851 Tm [<0045>]TJ
+0.97 0 0 1 306.173 149.851 Tm [<0055>]TJ
+0.98 0 0 1 309.632 149.851 Tm [<0049>-196<0042004F0045>-197<0058>]TJ
+0.97 0 0 1 340.397 149.851 Tm [<004A004D004D>]TJ
+0.98 0 0 1 349.833 149.851 Tm [<0050>]TJ
+0.97 0 0 1 354.764 149.851 Tm [<0057>]TJ
+0.98 0 0 1 359.335 149.851 Tm [<0046>]TJ
+0.97 0 0 1 363.68 149.851 Tm [<0053004D>]TJ
+0.98 0 0 1 369.777 149.851 Tm [<00420051>-196<004E0042>]TJ
+0.97 0 0 1 393.585 149.851 Tm [<0055>]TJ
+0.98 0 0 1 397.045 149.851 Tm [<0046>]TJ
+0.97 0 0 1 401.39 149.851 Tm [<0053004A>]TJ
+0.98 0 0 1 407.584 149.851 Tm [<0042>]TJ
+0.97 0 0 1 412.017 149.851 Tm [<004D>]TJ
+0.98 0 0 1 416.409 149.851 Tm [<0050004F>]TJ
+0.97 0 0 1 428.706 149.851 Tm [<0055>]TJ
+0.98 0 0 1 432.166 149.851 Tm [<00490046>-196<00430050>]TJ
+0.97 0 0 1 453.65 149.851 Tm [<00590008>]TJ
+0.98 0 0 1 460.183 149.851 Tm [<0054>]TJ
+0.97 0 0 1 466.016 149.851 Tm [<004D>]TJ
+0.98 0 0 1 468.49 149.851 Tm [<0046>]TJ
+0.97 0 0 1 472.835 149.851 Tm [<00470055000F>]TJ
+0.99 0 0 1 133.311 137.896 Tm [<002A>]TJ
+0.995 0 0 1 136.507 137.896 Tm [<004F>]TJ
+/F123 7.97011 Tf 0.99 0 0 1 144.193 137.896 Tm [<001F>]TJ
+0.995 0 0 1 148.947 137.896 Tm [<0047>]TJ
+0.99 0 0 1 153.725 137.896 Tm [<0055>]TJ
+0.995 0 0 1 158.48 137.896 Tm [<0044005A>]TJ
+0.99 0 0 1 168.036 137.896 Tm [<004C>]TJ
+0.995 0 0 1 172.791 137.896 Tm [<0051004A>]TJ
+0.99 0 0 1 182.347 137.896 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.995 0 0 1 190.083 137.896 Tm [<0048005000460054>-217<0042>-217<00540046>]TJ
+0.99 0 0 1 225.291 137.896 Tm [<0055>]TJ
+0.995 0 0 1 230.976 137.896 Tm [<0050>]TJ
+0.99 0 0 1 235.982 137.896 Tm [<0047>]TJ
+0.995 0 0 1 241.431 137.896 Tm [<0054>]TJ
+0.99 0 0 1 245.406 137.896 Tm [<004A>]TJ
+0.995 0 0 1 248.03 137.896 Tm [<004E0051>]TJ
+0.99 0 0 1 261.254 137.896 Tm [<004D>]TJ
+0.995 0 0 1 263.778 137.896 Tm [<0046>-217<0054>]TJ
+0.99 0 0 1 274.319 137.896 Tm [<0055>]TJ
+0.995 0 0 1 277.85 137.896 Tm [<0042>]TJ
+0.99 0 0 1 282.351 137.896 Tm [<0055>]TJ
+0.995 0 0 1 285.882 137.896 Tm [<0046004E0046004F>]TJ
+0.99 0 0 1 308.285 137.896 Tm [<0055>]TJ
+0.995 0 0 1 311.816 137.896 Tm [<0054>-217<0054004600510042>]TJ
+0.99 0 0 1 336.007 137.896 Tm [<0053>]TJ
+0.995 0 0 1 339.705 137.896 Tm [<0042>]TJ
+0.99 0 0 1 344.206 137.896 Tm [<0055>]TJ
+0.995 0 0 1 347.737 137.896 Tm [<00460045>-217<0043>]TJ
+0.99 0 0 1 364.513 137.896 Tm [<005A>]TJ
+0.995 0 0 1 371.224 137.896 Tm [<00440050004E004E00420054>]TJ
+0.99 0 0 1 404.799 137.896 Tm [<000D>]TJ
+0.995 0 0 1 409.377 137.896 Tm [<0042>-217<0054>]TJ
+0.99 0 0 1 420.008 137.896 Tm [<0055>]TJ
+0.995 0 0 1 423.539 137.896 Tm [<0042>]TJ
+0.99 0 0 1 428.039 137.896 Tm [<0055>]TJ
+0.995 0 0 1 431.57 137.896 Tm [<0046004E0046004F>]TJ
+0.99 0 0 1 453.973 137.896 Tm [<0055>]TJ
+0.995 0 0 1 459.659 137.896 Tm [<00430046>]TJ
+0.99 0 0 1 469.115 137.896 Tm [<004A>]TJ
+0.995 0 0 1 471.739 137.896 Tm [<004F0048>]TJ
+1.02 0 0 1 113.386 125.941 Tm [<0042004F>-257<005000510046>]TJ
+1.03 0 0 1 141.248 125.941 Tm [<0053>]TJ
+1.02 0 0 1 145.096 125.941 Tm [<0042>]TJ
+1.03 0 0 1 149.71 125.941 Tm [<0055>]TJ
+1.02 0 0 1 153.383 125.941 Tm [<0050>]TJ
+1.03 0 0 1 158.515 125.941 Tm [<0053>]TJ
+1.02 0 0 1 164.983 125.941 Tm [<00540050004E0046>]TJ
+1.03 0 0 1 186.964 125.941 Tm [<0055004A>]TJ
+1.02 0 0 1 193.367 125.941 Tm [<004E00460054>]TJ
+1.03 0 0 1 212.835 125.941 Tm [<0047>]TJ
+1.02 0 0 1 216.263 125.941 Tm [<0050>]TJ
+1.03 0 0 1 221.395 125.941 Tm [<004D004D>]TJ
+1.02 0 0 1 226.648 125.941 Tm [<0050005800460045>-257<0043>]TJ
+1.03 0 0 1 256.299 125.941 Tm [<005A>]TJ
+1.02 0 0 1 263.66 125.941 Tm [<0042>]TJ
+1.03 0 0 1 268.274 125.941 Tm [<0053>]TJ
+1.02 0 0 1 272.122 125.941 Tm [<00480056004E0046004F>]TJ
+1.03 0 0 1 300.667 125.941 Tm [<0055>]TJ
+1.02 0 0 1 304.34 125.941 Tm [<0054>]TJ
+1.03 0 0 1 311.035 125.941 Tm [<0009>]TJ
+1.02 0 0 1 314.401 125.941 Tm [<0054004600510042>]TJ
+1.03 0 0 1 332.916 125.941 Tm [<0053>]TJ
+1.02 0 0 1 336.764 125.941 Tm [<0042>]TJ
+1.03 0 0 1 341.378 125.941 Tm [<0055>]TJ
+1.02 0 0 1 345.051 125.941 Tm [<00460045>-257<0043>]TJ
+1.03 0 0 1 362.66 125.941 Tm [<005A>]TJ
+1.02 0 0 1 370.021 125.941 Tm [<00540051004200440046>]TJ
+1.03 0 0 1 392.632 125.941 Tm [<000A000D>]TJ
+1.02 0 0 1 401.239 125.941 Tm [<00580049>]TJ
+1.03 0 0 1 413.687 125.941 Tm [<004A>]TJ
+1.02 0 0 1 416.417 125.941 Tm [<00440049>-257<0046>]TJ
+1.03 0 0 1 433.192 125.941 Tm [<004A0055>]TJ
+1.02 0 0 1 439.596 125.941 Tm [<00490046>]TJ
+1.03 0 0 1 449.656 125.941 Tm [<0053>]TJ
+1.02 0 0 1 456.124 125.941 Tm [<00450046>]TJ
+1.03 0 0 1 465.941 125.941 Tm [<00EB>]TJ
+1.02 0 0 1 471.697 125.941 Tm [<004F0046>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01EF>]TJ
+ET
+endstream
+endobj
+239 0 obj <<
+/Type /Page
+/Contents 240 0 R
+/Resources 238 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 237 0 R
+>> endobj
+241 0 obj <<
+/D [239 0 R /XYZ 113.386 651.969 null]
+>> endobj
+100 0 obj <<
+/D [239 0 R /XYZ 113.386 482.155 null]
+>> endobj
+242 0 obj <<
+/D [239 0 R /XYZ 113.386 290.873 null]
+>> endobj
+238 0 obj <<
+/Font << /F111 6 0 R /F7 46 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R /F90 14 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+245 0 obj <<
+/Length 35805
+>>
+stream
+BT
+/F105 9.96264 Tf 0.98 0 0 1 113.386 640.013 Tm [<00510042>]TJ
+0.97 0 0 1 122.915 640.013 Tm [<0055>]TJ
+0.98 0 0 1 126.374 640.013 Tm [<00490054>-203<0050>]TJ
+0.97 0 0 1 142.53 640.013 Tm [<0053>]TJ
+0.98 0 0 1 148.142 640.013 Tm [<00510042>]TJ
+0.97 0 0 1 157.671 640.013 Tm [<004A>]TJ
+0.98 0 0 1 160.242 640.013 Tm [<004F>]TJ
+0.97 0 0 1 165.689 640.013 Tm [<0055>-205<0055>]TJ
+0.98 0 0 1 174.597 640.013 Tm [<00490046004E>]TJ
+0.97 0 0 1 192.191 640.013 Tm [<000F>]TJ
+0.985 0 0 1 197.413 640.013 Tm [<0022>]TJ
+0.97 0 0 1 203.36 640.013 Tm [<004D004D>]TJ
+0.98 0 0 1 210.296 640.013 Tm [<004400500050>]TJ
+0.97 0 0 1 224.092 640.013 Tm [<0053>]TJ
+0.98 0 0 1 227.716 640.013 Tm [<0045>]TJ
+0.97 0 0 1 232.802 640.013 Tm [<004A>]TJ
+0.98 0 0 1 235.373 640.013 Tm [<004F0042>]TJ
+0.97 0 0 1 245.253 640.013 Tm [<0055>]TJ
+0.98 0 0 1 248.713 640.013 Tm [<00460054>-203<0042>]TJ
+0.97 0 0 1 263.394 640.013 Tm [<0053>]TJ
+0.98 0 0 1 267.018 640.013 Tm [<0046>-203<0046>]TJ
+0.97 0 0 1 277.696 640.013 Tm [<0059>]TJ
+0.98 0 0 1 282.276 640.013 Tm [<0051>]TJ
+0.97 0 0 1 287.373 640.013 Tm [<0053>]TJ
+0.98 0 0 1 290.997 640.013 Tm [<00460054005400460045>]TJ
+0.97 0 0 1 314.591 640.013 Tm [<004A>]TJ
+0.98 0 0 1 317.162 640.013 Tm [<004F>-203<0056004F>]TJ
+0.97 0 0 1 335.201 640.013 Tm [<004A0055>]TJ
+0.98 0 0 1 341.231 640.013 Tm [<0054>]TJ
+0.97 0 0 1 345.147 640.013 Tm [<000D>]TJ
+0.98 0 0 1 349.543 640.013 Tm [<0042>-203<0056004F>]TJ
+0.97 0 0 1 366.567 640.013 Tm [<004A0055>]TJ
+0.98 0 0 1 374.586 640.013 Tm [<00430046>]TJ
+0.97 0 0 1 383.9 640.013 Tm [<004A>]TJ
+0.98 0 0 1 386.471 640.013 Tm [<004F0048>]TJ
+0.97 0 0 1 398.457 640.013 Tm [<01EA>]TJ
+0.98 0 0 1 403.559 640.013 Tm [<0051>]TJ
+0.97 0 0 1 408.656 640.013 Tm [<0055>]TJ
+0.98 0 0 1 414.104 640.013 Tm [<0043>]TJ
+0.97 0 0 1 419.073 640.013 Tm [<005A>]TJ
+0.98 0 0 1 425.526 640.013 Tm [<00450046>]TJ
+0.97 0 0 1 434.958 640.013 Tm [<0047>]TJ
+0.98 0 0 1 438.185 640.013 Tm [<00420056>]TJ
+0.97 0 0 1 447.773 640.013 Tm [<004D0055000D>]TJ
+0.98 0 0 1 458.103 640.013 Tm [<00580049>]TJ
+0.97 0 0 1 470.063 640.013 Tm [<004A>]TJ
+0.98 0 0 1 472.634 640.013 Tm [<00440049>]TJ
+1.02 0 0 1 113.386 628.058 Tm [<00440042004F>-225<00430046>-226<004400490042004F004800460045>]TJ
+1.03 0 0 1 178.813 628.058 Tm [<004A>]TJ
+1.02 0 0 1 181.543 628.058 Tm [<004F>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 189.508 628.058 Tm [<001F>]TJ
+1.02 0 0 1 194.454 628.058 Tm [<00560048>]TJ
+1.03 0 0 1 204.251 628.058 Tm [<00570057004C>]TJ
+1.02 0 0 1 219.09 628.058 Tm [<0051004A0056>]TJ
+1.03 0 0 1 233.785 628.058 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 238.732 628.058 Tm [<000F>]TJ
+1.015 0 0 1 244.478 628.058 Tm [<0022>]TJ
+1.03 0 0 1 250.606 628.058 Tm [<0055>-223<0055>]TJ
+1.02 0 0 1 260.248 628.058 Tm [<00490046>-225<004300460048>]TJ
+1.03 0 0 1 287.033 628.058 Tm [<004A>]TJ
+1.02 0 0 1 289.762 628.058 Tm [<004F004F>]TJ
+1.03 0 0 1 301.103 628.058 Tm [<004A>]TJ
+1.02 0 0 1 303.833 628.058 Tm [<004F0048>]TJ
+1.03 0 0 1 316.533 628.058 Tm [<0055>]TJ
+1.02 0 0 1 320.207 628.058 Tm [<00490046>-225<00440056>]TJ
+1.03 0 0 1 342.023 628.058 Tm [<00530053>]TJ
+1.02 0 0 1 349.719 628.058 Tm [<0046004F>]TJ
+1.03 0 0 1 359.911 628.058 Tm [<0055>]TJ
+1.02 0 0 1 365.88 628.058 Tm [<00510050>]TJ
+1.03 0 0 1 376.316 628.058 Tm [<004A>]TJ
+1.02 0 0 1 379.046 628.058 Tm [<004F>]TJ
+1.03 0 0 1 384.716 628.058 Tm [<0055>-223<004A>]TJ
+1.02 0 0 1 393.414 628.058 Tm [<0054>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 399.784 628.058 Tm [<000B0013000F0013000C>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 424.516 628.058 Tm [<000F>]TJ
+1.02 0 0 1 430.262 628.058 Tm [<00290046>]TJ
+1.03 0 0 1 442.212 628.058 Tm [<0053>]TJ
+1.02 0 0 1 446.06 628.058 Tm [<0046>-225<0042>]TJ
+1.03 0 0 1 457.491 628.058 Tm [<0053>]TJ
+1.02 0 0 1 461.339 628.058 Tm [<0046>]TJ
+1.03 0 0 1 468.156 628.058 Tm [<0055>]TJ
+1.02 0 0 1 471.829 628.058 Tm [<00490046>]TJ
+1 0 0 1 113.386 616.103 Tm [<005000510046005300420055005000530054>-220<0009004A004F>-220<005500490046>-220<00EB005300540055>-220<005500580050000D>-220<0041>]TJ
+/F111 7.97011 Tf 1 0 0 1 225.216 616.103 Tm [<003E000E0040>]TJ
+/F105 9.96264 Tf 1 0 0 1 239.623 616.103 Tm [<0008>-220<004E00460042004F0054>-220<0042004F>-220<005000510055004A0050004F0042004D>]TJ
+/F111 7.97011 Tf 1 0 0 1 321.197 616.103 Tm [<000E>]TJ
+/F105 9.96264 Tf 1 0 0 1 328.192 616.103 Tm [<004400490042005300420044005500460053000D>-219<0058004A00550049005000560055>-220<005500490046>-220<0043005300420044004C004600550054000A001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 592.193 Tm [<0050005200590048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 113.386 592.193 Tm [<003E000E0040>-602<005B>-603<005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 580.238 Tm [<002A0047>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 122.621 580.238 Tm [<000E>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 130.051 580.238 Tm [<004A>]TJ
+1.02 0 0 1 132.781 580.238 Tm [<0054>-244<004F0050>]TJ
+1.03 0 0 1 150.141 580.238 Tm [<0055>]TJ
+1.02 0 0 1 156.298 580.238 Tm [<0051>]TJ
+1.03 0 0 1 161.603 580.238 Tm [<0053>]TJ
+1.02 0 0 1 165.451 580.238 Tm [<004600540046004F>]TJ
+1.03 0 0 1 184.24 580.238 Tm [<0055000D>-249<0055>]TJ
+1.02 0 0 1 196.658 580.238 Tm [<0049>]TJ
+1.03 0 0 1 202.196 580.238 Tm [<004A>]TJ
+1.02 0 0 1 204.925 580.238 Tm [<0054>-244<004E0050>]TJ
+1.03 0 0 1 224.867 580.238 Tm [<0057>]TJ
+1.02 0 0 1 229.721 580.238 Tm [<00460054>]TJ
+1.03 0 0 1 240.801 580.238 Tm [<0055>]TJ
+1.02 0 0 1 244.475 580.238 Tm [<0050>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 252.09 580.238 Tm [<000B005B000F005C000C>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 276.822 580.238 Tm [<000D>]TJ
+1.02 0 0 1 281.892 580.238 Tm [<00580049>]TJ
+1.03 0 0 1 294.34 580.238 Tm [<004A>]TJ
+1.02 0 0 1 297.07 580.238 Tm [<00440049>-244<0043004600440050004E00460054>]TJ
+1.03 0 0 1 347.44 580.238 Tm [<0055>]TJ
+1.02 0 0 1 351.114 580.238 Tm [<00490046>-244<00440056>]TJ
+1.03 0 0 1 373.118 580.238 Tm [<00530053>]TJ
+1.02 0 0 1 380.814 580.238 Tm [<0046004F>]TJ
+1.03 0 0 1 391.007 580.238 Tm [<0055>]TJ
+1.02 0 0 1 397.164 580.238 Tm [<00510050>]TJ
+1.03 0 0 1 407.6 580.238 Tm [<004A>]TJ
+1.02 0 0 1 410.33 580.238 Tm [<004F>]TJ
+1.03 0 0 1 416 580.238 Tm [<0055001C>-256<004A0047>-242<0055>]TJ
+1.02 0 0 1 437.131 580.238 Tm [<00490046>]TJ
+1.03 0 0 1 447.191 580.238 Tm [<0053>]TJ
+1.02 0 0 1 451.039 580.238 Tm [<0046>]TJ
+1.03 0 0 1 458.045 580.238 Tm [<004A>]TJ
+1.02 0 0 1 460.774 580.238 Tm [<0054>-244<0042>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 474.429 580.238 Tm [<000E>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 479.376 580.238 Tm [<000D>]TJ
+0.99 0 0 1 113.386 568.282 Tm [<0042004F0045>]TJ
+0.985 0 0 1 130.686 568.282 Tm [<0055>]TJ
+0.99 0 0 1 134.199 568.282 Tm [<00490046>-221<00440056>]TJ
+0.985 0 0 1 155.326 568.282 Tm [<00530053>]TJ
+0.99 0 0 1 162.686 568.282 Tm [<0046004F>]TJ
+0.985 0 0 1 172.578 568.282 Tm [<0055>]TJ
+0.99 0 0 1 178.271 568.282 Tm [<00510050>]TJ
+0.985 0 0 1 188.401 568.282 Tm [<004A>]TJ
+0.99 0 0 1 191.011 568.282 Tm [<004F>]TJ
+0.985 0 0 1 196.514 568.282 Tm [<0055>-222<004A>]TJ
+0.99 0 0 1 204.818 568.282 Tm [<0054>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 210.953 568.282 Tm [<000B005B00B7000F005C00B7000C>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 244.065 568.282 Tm [<000D>-222<0055>]TJ
+0.99 0 0 1 252.164 568.282 Tm [<00490046004F>]TJ
+0.985 0 0 1 269.612 568.282 Tm [<004A0055>]TJ
+0.99 0 0 1 277.915 568.282 Tm [<004E0050>]TJ
+0.985 0 0 1 290.905 568.282 Tm [<0057>]TJ
+0.99 0 0 1 295.547 568.282 Tm [<00460054>]TJ
+0.985 0 0 1 306.071 568.282 Tm [<0055>]TJ
+0.99 0 0 1 309.584 568.282 Tm [<0050>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 316.745 568.282 Tm [<000B005B00B7000E005B000F005C00B7000E005C000C>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 368.777 568.282 Tm [<000D>]TJ
+0.99 0 0 1 373.364 568.282 Tm [<00580049>]TJ
+0.985 0 0 1 385.446 568.282 Tm [<004A>]TJ
+0.99 0 0 1 388.056 568.282 Tm [<00440049>-221<0043004600440050004E00460054>]TJ
+0.985 0 0 1 436.484 568.282 Tm [<0055>]TJ
+0.99 0 0 1 439.997 568.282 Tm [<00490046>-221<00440056>]TJ
+0.985 0 0 1 461.124 568.282 Tm [<00530053>]TJ
+0.99 0 0 1 468.484 568.282 Tm [<0046004F>]TJ
+0.985 0 0 1 478.377 568.282 Tm [<0055>]TJ
+1 0 0 1 113.386 556.327 Tm [<00510050004A004F0055000F>-293<002A0047>-220<00550049004600530046>-220<005800420054>-220<0042>-220<0051004200550049>-220<00430046004A004F0048>-220<0045005300420058004F000D>-220<004A0055>-220<004A0054>-220<0046004F004500460045>-220<0042004F0045>-220<0054005500530050004C00460045>-220<00430046004700500053004600490042004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 532.417 Tm [<004F004C00510048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 113.386 532.417 Tm [<003E000E0040>-602<005B>-603<005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 520.462 Tm [<002A0047>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 122.348 520.462 Tm [<000E>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 129.504 520.462 Tm [<004A>]TJ
+1.02 0 0 1 132.233 520.462 Tm [<0054>-217<004F0050>]TJ
+1.03 0 0 1 149.32 520.462 Tm [<0055>]TJ
+1.02 0 0 1 155.204 520.462 Tm [<0051>]TJ
+1.03 0 0 1 160.508 520.462 Tm [<0053>]TJ
+1.02 0 0 1 164.356 520.462 Tm [<004600540046004F>]TJ
+1.03 0 0 1 183.146 520.462 Tm [<0055000D>-215<0055>]TJ
+1.02 0 0 1 195.221 520.462 Tm [<0049>]TJ
+1.03 0 0 1 200.76 520.462 Tm [<004A>]TJ
+1.02 0 0 1 203.489 520.462 Tm [<0054>-217<0044>]TJ
+1.03 0 0 1 213.869 520.462 Tm [<0053>]TJ
+1.02 0 0 1 217.717 520.462 Tm [<00460042>]TJ
+1.03 0 0 1 226.853 520.462 Tm [<0055>]TJ
+1.02 0 0 1 230.526 520.462 Tm [<00460054>-217<0042>]TJ
+1.03 0 0 1 248.156 520.462 Tm [<004D004A>]TJ
+1.02 0 0 1 253.513 520.462 Tm [<004F0046>]TJ
+1.03 0 0 1 265.915 520.462 Tm [<00470053>]TJ
+1.02 0 0 1 273.191 520.462 Tm [<0050004E>]TJ
+1.03 0 0 1 288.784 520.462 Tm [<0055>]TJ
+1.02 0 0 1 292.457 520.462 Tm [<00490046>-217<00440056>]TJ
+1.03 0 0 1 314.188 520.462 Tm [<00530053>]TJ
+1.02 0 0 1 321.884 520.462 Tm [<0046004F>]TJ
+1.03 0 0 1 332.077 520.462 Tm [<0055>]TJ
+1.02 0 0 1 337.96 520.462 Tm [<00510050>]TJ
+1.03 0 0 1 348.396 520.462 Tm [<004A>]TJ
+1.02 0 0 1 351.126 520.462 Tm [<004F>]TJ
+1.03 0 0 1 356.796 520.462 Tm [<0055>-215<0055>]TJ
+1.02 0 0 1 366.353 520.462 Tm [<0050>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 373.695 520.462 Tm [<000B005B000F005C000C>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 398.427 520.462 Tm [<000D>]TJ
+1.02 0 0 1 403.155 520.462 Tm [<00580049>]TJ
+1.03 0 0 1 415.603 520.462 Tm [<004A>]TJ
+1.02 0 0 1 418.333 520.462 Tm [<00440049>-217<0043004600440050004E00460054>]TJ
+1.03 0 0 1 468.156 520.462 Tm [<0055>]TJ
+1.02 0 0 1 471.829 520.462 Tm [<00490046>]TJ
+0.99 0 0 1 113.386 508.506 Tm [<00440056005300530046004F0055>-222<00510050004A004F0055001C>-222<004A0047>-223<00550049004600530046>-222<004A0054>-222<0042>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 219.107 508.506 Tm [<000E>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 223.862 508.506 Tm [<000D>-222<0042004F0045>-222<005500490046>-223<00440056005300530046004F0055>-222<00510050004A004F0055>-222<004A0054>]TJ
+/F111 7.97011 Tf 0.99 0 0 1 326.22 508.506 Tm [<000B005B00B7000F005C00B7000C>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 359.5 508.506 Tm [<000D>-222<005500490046004F>-222<004A0055>-223<0044005300460042005500460054>-222<0042>-222<004D004A004F0046>-223<004300460055005800460046004F>]TJ
+1.02 0 0 1 113.386 496.551 Tm [<0055>]TJ
+1.015 0 0 1 117.024 496.551 Tm [<00490046>-216<00440056>]TJ
+1.02 0 0 1 138.634 496.551 Tm [<00530053>]TJ
+1.015 0 0 1 146.256 496.551 Tm [<0046004F>]TJ
+1.02 0 0 1 156.398 496.551 Tm [<0055>]TJ
+1.015 0 0 1 162.222 496.551 Tm [<00510050>]TJ
+1.02 0 0 1 172.607 496.551 Tm [<004A>]TJ
+1.015 0 0 1 175.31 496.551 Tm [<004F>]TJ
+1.02 0 0 1 180.952 496.551 Tm [<0055>]TJ
+1.015 0 0 1 186.776 496.551 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 1.02 0 0 1 204.463 496.551 Tm [<000B005B00B7000E005B000F005C00B7000E005C000C>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 258.345 496.551 Tm [<000D>]TJ
+1.015 0 0 1 263.021 496.551 Tm [<00580049>]TJ
+1.02 0 0 1 275.408 496.551 Tm [<004A>]TJ
+1.015 0 0 1 278.111 496.551 Tm [<00440049>-216<0043004600440050004E00460054>]TJ
+1.02 0 0 1 327.663 496.551 Tm [<0055>]TJ
+1.015 0 0 1 331.301 496.551 Tm [<00490046>-216<00440056>]TJ
+1.02 0 0 1 352.911 496.551 Tm [<00530053>]TJ
+1.015 0 0 1 360.533 496.551 Tm [<0046004F>]TJ
+1.02 0 0 1 370.675 496.551 Tm [<0055>]TJ
+1.015 0 0 1 376.498 496.551 Tm [<00510050>]TJ
+1.02 0 0 1 386.883 496.551 Tm [<004A>]TJ
+1.015 0 0 1 389.587 496.551 Tm [<004F>]TJ
+1.02 0 0 1 395.229 496.551 Tm [<0055000F>]TJ
+1.015 0 0 1 404.277 496.551 Tm [<002F0050>]TJ
+1.02 0 0 1 416.624 496.551 Tm [<0055>]TJ
+1.015 0 0 1 420.262 496.551 Tm [<0046>]TJ
+1.02 0 0 1 426.947 496.551 Tm [<0055>]TJ
+1.015 0 0 1 430.585 496.551 Tm [<00490042>]TJ
+1.02 0 0 1 440.687 496.551 Tm [<0055>-215<0055>]TJ
+1.015 0 0 1 450.148 496.551 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 462.344 496.551 Tm [<004F004C>]TJ
+1.015 0 0 1 472.141 496.551 Tm [<00510048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 113.386 484.596 Tm [<005000510046>]TJ
+1.03 0 0 1 128.344 484.596 Tm [<0053>]TJ
+1.02 0 0 1 132.192 484.596 Tm [<0042>]TJ
+1.03 0 0 1 136.806 484.596 Tm [<0055>]TJ
+1.02 0 0 1 140.479 484.596 Tm [<0050>]TJ
+1.03 0 0 1 145.611 484.596 Tm [<0053>-299<004A>]TJ
+1.02 0 0 1 155.257 484.596 Tm [<0054>-302<00420044>]TJ
+1.03 0 0 1 171.109 484.596 Tm [<0055>]TJ
+1.02 0 0 1 174.783 484.596 Tm [<00560042>]TJ
+1.03 0 0 1 184.762 484.596 Tm [<004D004D005A>]TJ
+1.02 0 0 1 197.825 484.596 Tm [<00500051>]TJ
+1.03 0 0 1 208.261 484.596 Tm [<0055004A>]TJ
+1.02 0 0 1 214.664 484.596 Tm [<0050004F0042>]TJ
+1.03 0 0 1 230.08 484.596 Tm [<004D>]TJ
+1.02 0 0 1 235.775 484.596 Tm [<0042004F0045>-302<0042004F>]TJ
+1.03 0 0 1 264.705 484.596 Tm [<005A>]TJ
+1.02 0 0 1 272.515 484.596 Tm [<0054>]TJ
+1.03 0 0 1 276.59 484.596 Tm [<0055>]TJ
+1.02 0 0 1 280.263 484.596 Tm [<0042>]TJ
+1.03 0 0 1 284.877 484.596 Tm [<0055>]TJ
+1.02 0 0 1 288.55 484.596 Tm [<0046004E0046004F>]TJ
+1.03 0 0 1 311.516 484.596 Tm [<0055>]TJ
+1.02 0 0 1 318.258 484.596 Tm [<0050>]TJ
+1.03 0 0 1 323.39 484.596 Tm [<0047>-299<0055>]TJ
+1.02 0 0 1 333.559 484.596 Tm [<00490046>]TJ
+1.03 0 0 1 346.688 484.596 Tm [<0047>]TJ
+1.02 0 0 1 350.115 484.596 Tm [<0050>]TJ
+1.03 0 0 1 355.247 484.596 Tm [<0053>]TJ
+1.02 0 0 1 359.095 484.596 Tm [<004E>]TJ
+1.03 0 0 1 370.415 484.596 Tm [<0041>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 372.488 484.596 Tm [<003E000E00400003005B0003005C>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 407.112 484.596 Tm [<0008>-299<004A>]TJ
+1.02 0 0 1 414.983 484.596 Tm [<0054>-301<0056004F0045>-1<0046>]TJ
+1.03 0 0 1 442.979 484.596 Tm [<0053>]TJ
+1.02 0 0 1 446.827 484.596 Tm [<0054>]TJ
+1.03 0 0 1 450.901 484.596 Tm [<0055>]TJ
+1.02 0 0 1 454.575 484.596 Tm [<005000500045>-302<00420054>]TJ
+1 0 0 1 113.386 472.641 Tm [<0041>]TJ
+/F111 7.97011 Tf 1 0 0 1 115.398 472.641 Tm [<004F004C005100480003003E000E00400003005B0003005C>]TJ
+/F105 9.96264 Tf 1 0 0 1 173.026 472.641 Tm [<0008000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 448.731 Tm [<0046004C00550046004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F123 7.97011 Tf 1 0 0 1 113.386 448.731 Tm [<001F0047004C0055004800460057004C005200510021>-709<001F005500440047004C005800560021>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 113.386 436.775 Tm [<0025>]TJ
+1.02 0 0 1 120.373 436.775 Tm [<004600540051>]TJ
+1.03 0 0 1 134.275 436.775 Tm [<004A0055>]TJ
+1.02 0 0 1 140.678 436.775 Tm [<0046>]TJ
+1.03 0 0 1 147.925 436.775 Tm [<004A0055>]TJ
+1.02 0 0 1 154.328 436.775 Tm [<0054>-268<004F0042004E0046>]TJ
+1.03 0 0 1 184.185 436.775 Tm [<000D>-278<0055>]TJ
+1.02 0 0 1 193.23 436.775 Tm [<0049>]TJ
+1.03 0 0 1 198.769 436.775 Tm [<004A>]TJ
+1.02 0 0 1 201.498 436.775 Tm [<0054>-268<00420044>]TJ
+1.03 0 0 1 217.006 436.775 Tm [<0055>]TJ
+1.02 0 0 1 220.68 436.775 Tm [<00560042>]TJ
+1.03 0 0 1 230.659 436.775 Tm [<004D004D005A>]TJ
+1.02 0 0 1 243.378 436.775 Tm [<0044>]TJ
+1.03 0 0 1 247.474 436.775 Tm [<0053>]TJ
+1.02 0 0 1 251.322 436.775 Tm [<00460042>]TJ
+1.03 0 0 1 260.457 436.775 Tm [<0055>]TJ
+1.02 0 0 1 264.131 436.775 Tm [<00460054>-268<0042>-268<005200560042>]TJ
+1.03 0 0 1 297.922 436.775 Tm [<00530055>]TJ
+1.02 0 0 1 305.444 436.775 Tm [<0046>]TJ
+1.03 0 0 1 309.966 436.775 Tm [<0053000E>]TJ
+1.02 0 0 1 317.046 436.775 Tm [<0044>]TJ
+1.03 0 0 1 321.141 436.775 Tm [<004A0053>]TJ
+1.02 0 0 1 327.719 436.775 Tm [<0044>]TJ
+1.03 0 0 1 331.814 436.775 Tm [<004D>]TJ
+1.02 0 0 1 334.441 436.775 Tm [<0046>]TJ
+1.03 0 0 1 341.688 436.775 Tm [<00470053>]TJ
+1.02 0 0 1 348.963 436.775 Tm [<0050004E>]TJ
+1.03 0 0 1 365.071 436.775 Tm [<0055>]TJ
+1.02 0 0 1 368.745 436.775 Tm [<00490046>-268<00440056>]TJ
+1.03 0 0 1 390.99 436.775 Tm [<00530053>]TJ
+1.02 0 0 1 398.687 436.775 Tm [<0046004F>]TJ
+1.03 0 0 1 408.879 436.775 Tm [<0055>]TJ
+1.02 0 0 1 415.277 436.775 Tm [<00510050>]TJ
+1.03 0 0 1 425.713 436.775 Tm [<004A>]TJ
+1.02 0 0 1 428.443 436.775 Tm [<004F>]TJ
+1.03 0 0 1 434.113 436.775 Tm [<0055>-265<0055>]TJ
+1.02 0 0 1 444.185 436.775 Tm [<0050>-268<0042>-268<00510050>]TJ
+1.03 0 0 1 469.816 436.775 Tm [<004A>]TJ
+1.02 0 0 1 472.546 436.775 Tm [<004F>]TJ
+1.03 0 0 1 478.216 436.775 Tm [<0055>]TJ
+0.98 0 0 1 113.386 424.82 Tm [<0045004600510046004F0045>]TJ
+0.97 0 0 1 142.793 424.82 Tm [<004A>]TJ
+0.98 0 0 1 145.364 424.82 Tm [<004F0048>-203<0050004F>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 169.714 424.82 Tm [<001F>]TJ
+0.98 0 0 1 174.372 424.82 Tm [<0047>]TJ
+0.97 0 0 1 179.079 424.82 Tm [<004C0055>]TJ
+0.98 0 0 1 188.395 424.82 Tm [<00480046>]TJ
+0.97 0 0 1 197.808 424.82 Tm [<0057004C>]TJ
+0.98 0 0 1 207.124 424.82 Tm [<00520051>]TJ
+0.97 0 0 1 216.537 424.82 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 224.009 424.82 Tm [<0042004F0045>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 240.963 424.82 Tm [<001F0055>]TJ
+0.98 0 0 1 250.28 424.82 Tm [<00440047>]TJ
+0.97 0 0 1 259.692 424.82 Tm [<004C>]TJ
+0.98 0 0 1 264.351 424.82 Tm [<00580056>]TJ
+0.97 0 0 1 273.763 424.82 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 278.421 424.82 Tm [<000D>]TJ
+0.98 0 0 1 282.817 424.82 Tm [<0058>]TJ
+0.97 0 0 1 289.456 424.82 Tm [<004A0055>]TJ
+0.98 0 0 1 295.486 424.82 Tm [<0049>]TJ
+0.97 0 0 1 302.794 424.82 Tm [<0055>]TJ
+0.98 0 0 1 306.254 424.82 Tm [<00490046>]TJ
+0.97 0 0 1 317.907 424.82 Tm [<004D>]TJ
+0.98 0 0 1 320.381 424.82 Tm [<0042>]TJ
+0.97 0 0 1 324.813 424.82 Tm [<00550055>]TJ
+0.98 0 0 1 331.733 424.82 Tm [<0046>]TJ
+0.97 0 0 1 336.077 424.82 Tm [<0053>]TJ
+0.98 0 0 1 341.688 424.82 Tm [<00430046>]TJ
+0.97 0 0 1 351.003 424.82 Tm [<004A>]TJ
+0.98 0 0 1 353.573 424.82 Tm [<004F0048>-203<0042>-204<004F0056004E00430046>]TJ
+0.97 0 0 1 399.823 424.82 Tm [<0053>]TJ
+0.98 0 0 1 405.434 424.82 Tm [<0042004F0045>]TJ
+0.97 0 0 1 422.388 424.82 Tm [<0055>]TJ
+0.98 0 0 1 425.848 424.82 Tm [<00490046>]TJ
+0.97 0 0 1 437.501 424.82 Tm [<0047>]TJ
+0.98 0 0 1 440.729 424.82 Tm [<0050>]TJ
+0.97 0 0 1 445.659 424.82 Tm [<0053>]TJ
+0.98 0 0 1 449.283 424.82 Tm [<004E0046>]TJ
+0.97 0 0 1 461.556 424.82 Tm [<0053>]TJ
+0.98 0 0 1 467.167 424.82 Tm [<0050004F0046>]TJ
+0.98 0 0 1 113.386 412.865 Tm [<0050>]TJ
+0.97 0 0 1 118.316 412.865 Tm [<0047>-189<0055>]TJ
+0.98 0 0 1 126.833 412.865 Tm [<00490046>-187<004C0046>]TJ
+0.97 0 0 1 147.545 412.865 Tm [<005A>]TJ
+0.98 0 0 1 152.01 412.865 Tm [<00580050>]TJ
+0.97 0 0 1 163.58 412.865 Tm [<0053>]TJ
+0.98 0 0 1 167.204 412.865 Tm [<00450054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 178.035 412.865 Tm [<0058>]TJ
+0.97 0 0 1 182.741 412.865 Tm [<004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 187.4 412.865 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 191.669 412.865 Tm [<0058>]TJ
+0.97 0 0 1 196.376 412.865 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 201.034 412.865 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 205.304 412.865 Tm [<004F>]TJ
+0.98 0 0 1 209.962 412.865 Tm [<0058>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 214.668 412.865 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 218.938 412.865 Tm [<0055>]TJ
+0.98 0 0 1 223.596 412.865 Tm [<0058>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 228.302 412.865 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 232.572 412.865 Tm [<0047>]TJ
+0.97 0 0 1 237.278 412.865 Tm [<004F>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 241.937 412.865 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 246.206 412.865 Tm [<0047>]TJ
+0.97 0 0 1 250.913 412.865 Tm [<0055>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 255.571 412.865 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 259.841 412.865 Tm [<004F>]TJ
+0.98 0 0 1 264.499 412.865 Tm [<0047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 271.035 412.865 Tm [<0050>]TJ
+0.97 0 0 1 275.965 412.865 Tm [<0053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.97 0 0 1 281.419 412.865 Tm [<0055>]TJ
+0.98 0 0 1 286.077 412.865 Tm [<0047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.97 0 0 1 290.783 412.865 Tm [<000D>]TJ
+0.98 0 0 1 295.053 412.865 Tm [<005800490046>]TJ
+0.97 0 0 1 311.358 412.865 Tm [<0053>]TJ
+0.98 0 0 1 314.982 412.865 Tm [<0046>-187<0046004200440049>]TJ
+0.97 0 0 1 341.019 412.865 Tm [<004D>]TJ
+0.98 0 0 1 343.493 412.865 Tm [<0046>]TJ
+0.97 0 0 1 347.838 412.865 Tm [<00550055>]TJ
+0.98 0 0 1 354.757 412.865 Tm [<0046>]TJ
+0.97 0 0 1 359.102 412.865 Tm [<0053>]TJ
+0.98 0 0 1 364.555 412.865 Tm [<00450046004F0050>]TJ
+0.97 0 0 1 384.365 412.865 Tm [<0055>]TJ
+0.98 0 0 1 387.825 412.865 Tm [<00460054>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 397.914 412.865 Tm [<004D>]TJ
+0.98 0 0 1 400.32 412.865 Tm [<0046>]TJ
+0.97 0 0 1 404.265 412.865 Tm [<00470055>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 410.624 412.865 Tm [<000D>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 414.893 412.865 Tm [<0053004A>]TJ
+0.98 0 0 1 420.837 412.865 Tm [<00480049>]TJ
+0.97 0 0 1 429.829 412.865 Tm [<0055>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 433.163 412.865 Tm [<000D>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 437.432 412.865 Tm [<00560051>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 448.625 412.865 Tm [<0050>]TJ
+0.97 0 0 1 453.556 412.865 Tm [<0053>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 459.009 412.865 Tm [<004500500058004F>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 479.522 412.865 Tm [<000D>]TJ
+0.97 0 0 1 113.386 400.91 Tm [<0055>]TJ
+0.98 0 0 1 116.845 400.91 Tm [<0049004600540046>]TJ
+0.97 0 0 1 136.791 400.91 Tm [<004A>]TJ
+0.98 0 0 1 139.361 400.91 Tm [<004F>]TJ
+0.97 0 0 1 146.829 400.91 Tm [<0055>]TJ
+0.98 0 0 1 150.289 400.91 Tm [<0056>]TJ
+0.97 0 0 1 155.444 400.91 Tm [<0053>]TJ
+0.98 0 0 1 159.068 400.91 Tm [<004F>-206<00430046>]TJ
+0.97 0 0 1 175.85 400.91 Tm [<004A>]TJ
+0.98 0 0 1 178.421 400.91 Tm [<004F0048>]TJ
+0.97 0 0 1 190.438 400.91 Tm [<0055>]TJ
+0.98 0 0 1 193.898 400.91 Tm [<00490046>-206<005200560042>]TJ
+0.97 0 0 1 220.121 400.91 Tm [<00530055>]TJ
+0.98 0 0 1 227.205 400.91 Tm [<0046>]TJ
+0.97 0 0 1 231.549 400.91 Tm [<0053000E>]TJ
+0.98 0 0 1 238.217 400.91 Tm [<0044>]TJ
+0.97 0 0 1 242.152 400.91 Tm [<004A0053>]TJ
+0.98 0 0 1 248.346 400.91 Tm [<0044>]TJ
+0.97 0 0 1 252.281 400.91 Tm [<004D>]TJ
+0.98 0 0 1 254.755 400.91 Tm [<0046>]TJ
+0.97 0 0 1 259.1 400.91 Tm [<0008>]TJ
+0.98 0 0 1 261.052 400.91 Tm [<0054>]TJ
+0.97 0 0 1 266.987 400.91 Tm [<0055>]TJ
+0.98 0 0 1 270.446 400.91 Tm [<0042004F00480046004F>]TJ
+0.97 0 0 1 294.669 400.91 Tm [<0055>]TJ
+0.98 0 0 1 298.129 400.91 Tm [<0054>]TJ
+0.97 0 0 1 302.044 400.91 Tm [<0008>]TJ
+0.98 0 0 1 306.016 400.91 Tm [<0045>]TJ
+0.97 0 0 1 311.103 400.91 Tm [<004A0053>]TJ
+0.98 0 0 1 317.297 400.91 Tm [<00460044>]TJ
+0.97 0 0 1 325.577 400.91 Tm [<0055004A>]TJ
+0.98 0 0 1 331.607 400.91 Tm [<0050004F0054>-206<0042>]TJ
+0.97 0 0 1 352.353 400.91 Tm [<0055>-209<0055>]TJ
+0.98 0 0 1 361.292 400.91 Tm [<00490046>-206<0054>]TJ
+0.97 0 0 1 376.893 400.91 Tm [<0055>]TJ
+0.98 0 0 1 380.352 400.91 Tm [<0042>]TJ
+0.97 0 0 1 384.785 400.91 Tm [<00530055004A>]TJ
+0.98 0 0 1 394.439 400.91 Tm [<004F0048>]TJ
+0.97 0 0 1 406.457 400.91 Tm [<00090047>]TJ
+0.98 0 0 1 412.854 400.91 Tm [<0050>]TJ
+0.97 0 0 1 417.785 400.91 Tm [<0053>-209<0055>]TJ
+0.98 0 0 1 426.888 400.91 Tm [<00490046>]TJ
+0.97 0 0 1 438.574 400.91 Tm [<00EB0053>]TJ
+0.98 0 0 1 447.619 400.91 Tm [<0054>]TJ
+0.97 0 0 1 451.534 400.91 Tm [<0055>-209<004D>]TJ
+0.98 0 0 1 459.487 400.91 Tm [<0046>]TJ
+0.97 0 0 1 463.832 400.91 Tm [<00550055>]TJ
+0.98 0 0 1 470.751 400.91 Tm [<0046>]TJ
+0.97 0 0 1 475.096 400.91 Tm [<0053000A>]TJ
+0.985 0 0 1 113.386 388.955 Tm [<0042004F0045>-217<0046004F0045>]TJ
+0.975 0 0 1 145.519 388.955 Tm [<004A>]TJ
+0.985 0 0 1 148.103 388.955 Tm [<004F0048>]TJ
+0.975 0 0 1 160.286 388.955 Tm [<00090047>]TJ
+0.985 0 0 1 166.716 388.955 Tm [<0050>]TJ
+0.975 0 0 1 171.672 388.955 Tm [<0053>-219<0055>]TJ
+0.985 0 0 1 180.926 388.955 Tm [<00490046>-217<0054004600440050004F0045>]TJ
+0.975 0 0 1 222.71 388.955 Tm [<004D>]TJ
+0.985 0 0 1 225.197 388.955 Tm [<0046>]TJ
+0.975 0 0 1 229.563 388.955 Tm [<00550055>]TJ
+0.985 0 0 1 236.518 388.955 Tm [<0046>]TJ
+0.975 0 0 1 240.885 388.955 Tm [<0053000A>]TJ
+0.985 0 0 1 249.848 388.955 Tm [<00510050>]TJ
+0.975 0 0 1 259.926 388.955 Tm [<004A>]TJ
+0.985 0 0 1 262.51 388.955 Tm [<004F>]TJ
+0.975 0 0 1 267.986 388.955 Tm [<0055>]TJ
+0.985 0 0 1 271.463 388.955 Tm [<0054>]TJ
+0.975 0 0 1 275.398 388.955 Tm [<000F>]TJ
+0.985 0 0 1 280.681 388.955 Tm [<00270050>]TJ
+0.975 0 0 1 290.848 388.955 Tm [<0053>-219<004A>]TJ
+0.985 0 0 1 299.208 388.955 Tm [<004F0054>]TJ
+0.975 0 0 1 308.619 388.955 Tm [<0055>]TJ
+0.985 0 0 1 312.097 388.955 Tm [<0042004F00440046>]TJ
+0.975 0 0 1 330.349 388.955 Tm [<000D>-220<0041>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 336.837 388.955 Tm [<0046>]TJ
+0.975 0 0 1 341.567 388.955 Tm [<004C0055>]TJ
+0.985 0 0 1 350.932 388.955 Tm [<0046>]TJ
+0.975 0 0 1 355.662 388.955 Tm [<004F>]TJ
+0.985 0 0 1 360.344 388.955 Tm [<0048>]TJ
+0.975 0 0 1 365.074 388.955 Tm [<0003>]TJ
+0.985 0 0 1 369.757 388.955 Tm [<0058>]TJ
+0.975 0 0 1 374.487 388.955 Tm [<00550003001A000F0003>]TJ
+0.985 0 0 1 397.898 388.955 Tm [<0046>]TJ
+0.975 0 0 1 402.628 388.955 Tm [<004C0055>]TJ
+0.985 0 0 1 411.993 388.955 Tm [<0046>]TJ
+0.975 0 0 1 416.723 388.955 Tm [<004F>]TJ
+0.985 0 0 1 421.405 388.955 Tm [<0048>]TJ
+0.975 0 0 1 426.135 388.955 Tm [<00030055>]TJ
+0.985 0 0 1 435.5 388.955 Tm [<0047>]TJ
+0.975 0 0 1 440.23 388.955 Tm [<0003001A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 449.595 388.955 Tm [<0008>]TJ
+0.985 0 0 1 453.691 388.955 Tm [<0044>]TJ
+0.975 0 0 1 457.646 388.955 Tm [<0053>]TJ
+0.985 0 0 1 461.288 388.955 Tm [<00460042>]TJ
+0.975 0 0 1 470.11 388.955 Tm [<0055>]TJ
+0.985 0 0 1 473.588 388.955 Tm [<00460054>]TJ
+0.995 0 0 1 113.386 377 Tm [<0042>-222<0052005600420053005500460053000E0044004A00530044004D0046>-223<00500047>-223<005300420045004A00560054>-223<01F0>-223<00480050004A004F0048>-223<00560051>-223<0042004F0045>-223<005500490046004F>-223<0053004A004800490055000D>-223<00470050004D004D0050005800460045>-223<0043005A>-223<0042>-223<0052005600420053005500460053000E0044004A00530044004D0046>-223<00500047>-223<005500490046>-223<00540042004E0046>]TJ
+1.03 0 0 1 113.386 365.044 Tm [<0053>]TJ
+1.02 0 0 1 117.234 365.044 Tm [<00420045>]TJ
+1.03 0 0 1 127.142 365.044 Tm [<004A>]TJ
+1.02 0 0 1 129.871 365.044 Tm [<00560054>-217<00480050>]TJ
+1.03 0 0 1 151.384 365.044 Tm [<004A>]TJ
+1.02 0 0 1 154.114 365.044 Tm [<004F0048>]TJ
+1.03 0 0 1 166.725 365.044 Tm [<0053004A>]TJ
+1.02 0 0 1 173.303 365.044 Tm [<00480049>]TJ
+1.03 0 0 1 183.577 365.044 Tm [<0055>]TJ
+1.02 0 0 1 189.456 365.044 Tm [<0042004F0045>]TJ
+1.03 0 0 1 207.239 365.044 Tm [<0055>]TJ
+1.02 0 0 1 210.913 365.044 Tm [<00490046004F>-217<004500500058004F>]TJ
+1.03 0 0 1 251.855 365.044 Tm [<000D>]TJ
+1.02 0 0 1 256.578 365.044 Tm [<00580049>]TJ
+1.03 0 0 1 269.027 365.044 Tm [<004A>]TJ
+1.02 0 0 1 271.756 365.044 Tm [<00440049>]TJ
+1.03 0 0 1 283.595 365.044 Tm [<00EB>]TJ
+1.02 0 0 1 289.352 365.044 Tm [<00480056>]TJ
+1.03 0 0 1 299.453 365.044 Tm [<0053>]TJ
+1.02 0 0 1 303.301 365.044 Tm [<0046>-217<004E0042>]TJ
+1.03 0 0 1 322.893 365.044 Tm [<0055>]TJ
+1.02 0 0 1 326.567 365.044 Tm [<00490046004E0042>]TJ
+1.03 0 0 1 349.492 365.044 Tm [<0055004A>]TJ
+1.02 0 0 1 355.895 365.044 Tm [<0044>]TJ
+1.03 0 0 1 359.991 365.044 Tm [<004A>]TJ
+1.02 0 0 1 362.72 365.044 Tm [<0042004F0054>]TJ
+1.03 0 0 1 379.285 365.044 Tm [<0055>]TJ
+1.02 0 0 1 382.958 365.044 Tm [<0046004F0045>]TJ
+1.03 0 0 1 400.65 365.044 Tm [<0055>]TJ
+1.02 0 0 1 404.324 365.044 Tm [<0050>-217<00440042>]TJ
+1.03 0 0 1 420.37 365.044 Tm [<004D004D>]TJ
+1.02 0 0 1 427.829 365.044 Tm [<0042>-217<00540046004E>]TJ
+1.03 0 0 1 451.497 365.044 Tm [<004A000E>]TJ
+1.02 0 0 1 457.459 365.044 Tm [<0044>]TJ
+1.03 0 0 1 461.554 365.044 Tm [<004A0053>]TJ
+1.02 0 0 1 468.131 365.044 Tm [<0044>]TJ
+1.03 0 0 1 472.227 365.044 Tm [<004D>]TJ
+1.02 0 0 1 474.854 365.044 Tm [<0046>]TJ
+1.03 0 0 1 479.376 365.044 Tm [<000D>]TJ
+0.975 0 0 1 113.386 353.089 Tm [<004A000F>]TJ
+0.985 0 0 1 118.349 353.089 Tm [<0046>]TJ
+0.975 0 0 1 122.716 353.089 Tm [<000F>]TJ
+ET
+1 0 0 1 127.264 353.089 cm
+q .7 0 0 .7 0 0 cm 0 0 m 0 5.52 4.48 10 10 10 c 15.52 10 20 5.52 20 0 c S Q
+1 0 0 1 -127.264 -353.089 cm
+BT
+/F105 9.96264 Tf 0.975 0 0 1 142.208 353.089 Tm [<000F>-300<0265>]TJ
+0.985 0 0 1 157.361 353.089 Tm [<0046>-221<00440056>]TJ
+0.975 0 0 1 173.032 353.089 Tm [<00530053>]TJ
+0.985 0 0 1 180.318 353.089 Tm [<0046004F>]TJ
+0.975 0 0 1 190.16 353.089 Tm [<0055>]TJ
+0.985 0 0 1 195.806 353.089 Tm [<00510050>]TJ
+0.975 0 0 1 205.884 353.089 Tm [<004A>]TJ
+0.985 0 0 1 208.467 353.089 Tm [<004F>]TJ
+0.975 0 0 1 213.943 353.089 Tm [<0055>]TJ
+0.985 0 0 1 219.589 353.089 Tm [<0042>]TJ
+0.975 0 0 1 224.044 353.089 Tm [<00470055>]TJ
+0.985 0 0 1 230.766 353.089 Tm [<0046>]TJ
+0.975 0 0 1 235.132 353.089 Tm [<0053>]TJ
+0.985 0 0 1 240.943 353.089 Tm [<0042>]TJ
+0.975 0 0 1 247.566 353.089 Tm [<0009>]TJ
+0.985 0 0 1 250.752 353.089 Tm [<005200560042>]TJ
+0.975 0 0 1 265.364 353.089 Tm [<00530055>]TJ
+0.985 0 0 1 272.484 353.089 Tm [<0046>]TJ
+0.975 0 0 1 276.851 353.089 Tm [<0053000E000A>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 286.739 353.089 Tm [<0046>]TJ
+0.975 0 0 1 291.47 353.089 Tm [<004C0055>]TJ
+0.985 0 0 1 300.834 353.089 Tm [<0046>]TJ
+0.975 0 0 1 305.564 353.089 Tm [<004F>]TJ
+0.985 0 0 1 310.247 353.089 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 317.145 353.089 Tm [<004A>]TJ
+0.985 0 0 1 319.728 353.089 Tm [<0054>]TJ
+0.975 0 0 1 325.831 353.089 Tm [<004A0055>]TJ
+0.985 0 0 1 331.893 353.089 Tm [<0054>-220<0046004F0045>]TJ
+0.975 0 0 1 352.951 353.089 Tm [<004A>]TJ
+0.985 0 0 1 355.535 353.089 Tm [<004F0048>-220<00510050>]TJ
+0.975 0 0 1 377.83 353.089 Tm [<004A>]TJ
+0.985 0 0 1 380.413 353.089 Tm [<004F>]TJ
+0.975 0 0 1 385.889 353.089 Tm [<0055000D>-223<004A000F>]TJ
+0.985 0 0 1 398.883 353.089 Tm [<0046>]TJ
+0.975 0 0 1 403.25 353.089 Tm [<000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.975 0 0 1 408.544 353.089 Tm [<0055>]TJ
+0.985 0 0 1 413.226 353.089 Tm [<00440047>]TJ
+0.975 0 0 1 422.687 353.089 Tm [<004C>]TJ
+0.985 0 0 1 427.369 353.089 Tm [<00580056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 438.997 353.089 Tm [<0056004F>]TJ
+0.975 0 0 1 449.654 353.089 Tm [<004A0055>]TJ
+0.985 0 0 1 455.716 353.089 Tm [<0054>-220<004200580042>]TJ
+0.975 0 0 1 477.402 353.089 Tm [<005A>]TJ
+1 0 0 1 113.386 341.134 Tm [<004D004600470055>-220<00500053>-220<0053004A004800490055>-220<0042004F0045>-220<00430046004D00500058>-220<00500053>-220<00420043005000570046>-220<004700530050004E>-220<005500490046>-220<00540055004200530055004A004F0048>-220<00510050004A004F0055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 317.224 Tm [<0046004F005200560048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 305.269 Tm [<0265004A0054>-220<0044004D0050005400460054>-220<005500490046>-220<0051004200550049000D>-220<004A000F0046000F>-293<0042005100510046004F00450054>-220<0042>-220<004D004A004F0046>-220<004700530050004E>-220<005500490046>-220<00440056005300530046004F0055>-220<00510050004A004F0055>-220<00550050>-220<005500490046>-220<005100420055004900080054>-220<00540055004200530055004A004F0048>-220<00510050004A004F0055000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 281.358 Tm [<0056005700550052004E0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 113.386 269.403 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 269.403 Tm [<0054>-220<0054>]TJ
+1.03 0 0 1 136.921 269.403 Tm [<00550053>]TJ
+1.02 0 0 1 144.443 269.403 Tm [<0050004C00460054>]TJ
+1.03 0 0 1 165.482 269.403 Tm [<0055>]TJ
+1.02 0 0 1 169.156 269.403 Tm [<00490046>-220<00440056>]TJ
+1.03 0 0 1 190.917 269.403 Tm [<00530053>]TJ
+1.02 0 0 1 198.613 269.403 Tm [<0046004F>]TJ
+1.03 0 0 1 208.806 269.403 Tm [<0055>]TJ
+1.02 0 0 1 214.72 269.403 Tm [<00510042>]TJ
+1.03 0 0 1 224.638 269.403 Tm [<0055>]TJ
+1.02 0 0 1 228.311 269.403 Tm [<0049>]TJ
+1.03 0 0 1 233.85 269.403 Tm [<000F>-298<0265004A>]TJ
+1.02 0 0 1 252.577 269.403 Tm [<0054>-220<005000510046>]TJ
+1.03 0 0 1 273.85 269.403 Tm [<0053>]TJ
+1.02 0 0 1 277.698 269.403 Tm [<0042>]TJ
+1.03 0 0 1 282.312 269.403 Tm [<0055>]TJ
+1.02 0 0 1 285.985 269.403 Tm [<0050>]TJ
+1.03 0 0 1 291.117 269.403 Tm [<0053>-218<004A>]TJ
+1.02 0 0 1 299.935 269.403 Tm [<0054>-220<0042005100510046004F004500460045>-220<0042>]TJ
+1.03 0 0 1 353.63 269.403 Tm [<0055>-218<0055>]TJ
+1.02 0 0 1 363.217 269.403 Tm [<00490046>-220<0046004F0045>-220<0050>]TJ
+1.03 0 0 1 398.377 269.403 Tm [<0047>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 404.044 269.403 Tm [<001F>]TJ
+1.02 0 0 1 408.991 269.403 Tm [<0047>]TJ
+1.03 0 0 1 413.889 269.403 Tm [<0055>]TJ
+1.02 0 0 1 418.835 269.403 Tm [<0044005A>]TJ
+1.03 0 0 1 428.632 269.403 Tm [<004C>]TJ
+1.02 0 0 1 433.578 269.403 Tm [<0051004A>]TJ
+1.03 0 0 1 443.375 269.403 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 451.389 269.403 Tm [<004A0047>-218<0055>]TJ
+1.02 0 0 1 463.459 269.403 Tm [<00490046>]TJ
+1.03 0 0 1 473.52 269.403 Tm [<0053>]TJ
+1.02 0 0 1 477.368 269.403 Tm [<0046>]TJ
+1 0 0 1 113.386 257.448 Tm [<00530046004E0042004A004F0054>-220<0042>-220<0051004200550049>-220<0055004900420055>-220<004900420054004F00080055>-220<004300460046004F>-220<00510042004A004F005500460045001C>-220<0055004900560054>-220<004A0055>-220<004A0054>-220<005600540046004D004600540054>-220<00420054>-220<005500490046>-220<005700460053005A>-220<004D004200540055>-220<00440050004E004E0042004F0045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 233.538 Tm [<0049004C004F004F>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 221.582 Tm [<0265004A0054>-220<00EB004D004D0054>-220<005500490046>-220<00440056005300530046004F0055>-220<0051004200550049000D>-220<004A000F0046000F>-293<005500490046>-220<0051004200550049>-220<004A0054>-220<0044004D0050005400460045>-220<0042004F0045>-220<005500490046>-220<0042005300460042>-220<004A0055>-220<00450046004D004A004E004A00550054>-220<004A0054>-220<00440050004D0050005300460045000F>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 221.313 Tm [<0025004A00EA004600530046004F004400460054>-200<004300460055005800460046004F>]TJ
+/F105 7.97011 Tf 1 0 0 1 555.023 221.313 Tm [<00EB004D004D>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 212.347 Tm [<0042004F0045>]TJ
+/F105 7.97011 Tf 1 0 0 1 504.995 212.347 Tm [<00510042004A004F0055>]TJ
+/F63 7.97011 Tf 1 0 0 1 523.789 212.347 Tm [<004200530046>-200<0057004A0054004A0043004D0046>-200<005800490046004F>]TJ
+1 0 0 1 491.852 203.381 Tm [<005500490046>-200<004D004A004F0046>-200<0058004A004500550049000D>-200<005400460055>-200<0058004A00550049>]TJ
+/F105 7.97011 Tf 1 0 0 1 491.852 194.414 Tm [<00510046004F>]TJ
+/F63 7.97011 Tf 1 0 0 1 504.007 194.414 Tm [<000D>-200<004A0054>-200<004D0042005300480046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 197.672 Tm [<00530044004C00510057>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 185.717 Tm [<0265004A0054>-220<004A0054>-220<0054004A004E004A004D00420053>-220<00550050>-220<00EB004D004D000D>-220<004600590044004600510055>-220<005500490046>-220<0051004200550049>-220<004A0054>-220<0042004D00540050>-220<0054005500530050004C00460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 96.787 161.807 Tm [<005300480051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F123 7.97011 Tf 1 0 0 1 113.386 161.807 Tm [<001F005A004C00470057004B0021>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 149.851 Tm [<0265004A0054>-220<0054004600550054>-220<005500490046>-220<0058004A004500550049>-220<00500047>-220<005500490046>-220<0054005500530050004C004A004F0048>-220<00510046004F>-220<00550050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 282.631 149.851 Tm [<005A004C00470057004B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 306.643 149.851 Tm [<000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01F0>]TJ
+ET
+endstream
+endobj
+244 0 obj <<
+/Type /Page
+/Contents 245 0 R
+/Resources 243 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 237 0 R
+>> endobj
+243 0 obj <<
+/Font << /F105 5 0 R /F123 17 0 R /F111 6 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+249 0 obj <<
+/Length 24289
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 87.183 640.013 Tm [<00460052004F00520055>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F123 7.97011 Tf 1 0 0 1 113.386 640.013 Tm [<001F00510044005000480047>-602<00460052004F00520055>-603<00520055>-603<00460052004F00520055>-602<0048005B0053>-1<0055004800560056004C005200510021>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 113.386 628.058 Tm [<0265004A>]TJ
+1.01 0 0 1 126.339 628.058 Tm [<0054>-215<004400490042004F004800460054>]TJ
+1.015 0 0 1 167.626 628.058 Tm [<0055>]TJ
+1.01 0 0 1 171.246 628.058 Tm [<00490046>-215<00440056>]TJ
+1.015 0 0 1 192.739 628.058 Tm [<00530053>]TJ
+1.01 0 0 1 200.323 628.058 Tm [<0046004F>]TJ
+1.015 0 0 1 210.416 628.058 Tm [<0055>]TJ
+1.01 0 0 1 216.2 628.058 Tm [<00440050>]TJ
+1.015 0 0 1 225.336 628.058 Tm [<004D>]TJ
+1.01 0 0 1 227.925 628.058 Tm [<0050>]TJ
+1.015 0 0 1 233.006 628.058 Tm [<0053>-214<0055>]TJ
+1.01 0 0 1 242.582 628.058 Tm [<0050>]TJ
+1.015 0 0 1 249.828 628.058 Tm [<0055>]TJ
+1.01 0 0 1 253.448 628.058 Tm [<00490046>-215<0054005100460044>]TJ
+1.015 0 0 1 283.394 628.058 Tm [<004A00EB>]TJ
+1.01 0 0 1 291.756 628.058 Tm [<00460045>]TJ
+1.015 0 0 1 303.64 628.058 Tm [<0057>]TJ
+1.01 0 0 1 308.423 628.058 Tm [<0042>]TJ
+1.015 0 0 1 312.992 628.058 Tm [<004D>]TJ
+1.01 0 0 1 315.58 628.058 Tm [<00560046>]TJ
+1.015 0 0 1 325.371 628.058 Tm [<000F>-288<002A0047>]TJ
+1.01 0 0 1 339.579 628.058 Tm [<00540046>]TJ
+1.015 0 0 1 348.092 628.058 Tm [<0057>]TJ
+1.01 0 0 1 352.875 628.058 Tm [<0046>]TJ
+1.015 0 0 1 357.352 628.058 Tm [<0053>]TJ
+1.01 0 0 1 361.144 628.058 Tm [<0042>]TJ
+1.015 0 0 1 365.713 628.058 Tm [<004D>]TJ
+1.01 0 0 1 370.465 628.058 Tm [<0054005600440049>-215<00440050004E004E0042004F00450054>-215<0042>]TJ
+1.015 0 0 1 443.186 628.058 Tm [<0053>]TJ
+1.01 0 0 1 446.978 628.058 Tm [<0046>]TJ
+1.015 0 0 1 453.62 628.058 Tm [<004A>]TJ
+1.01 0 0 1 456.309 628.058 Tm [<00540054005600460045>]TJ
+1.015 0 0 1 479.412 628.058 Tm [<000D>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 627.61 Tm [<003400460046>]TJ
+.8 0 0 rg .8 0 0 RG
+1 0 0 1 503.776 627.61 Tm [<00240050004D005000530054>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 113.386 616.103 Tm [<005500490046>-219<00510042004A004F0055004A004F0048>-219<005000510046005300420055005000530054>-219<00420043005000570046>-220<005600540046>-219<005500490046>-219<00440050004D00500053>-220<004E005000540055>-219<0053004600440046004F0055004D005A>-219<004A00540054005600460045>-220<005800490046004F>-219<005500490046005A>-219<004200530046>-220<00440042004D004D00460045000F>-293<002A0047>-219<004F0050>]TJ
+1 0 0 1 113.386 604.148 Tm [<00440050004D00500053>-220<004A0054>-220<0054005100460044004A00EB00460045000D>-220<005500490046>-220<0054005A004E00430050004D>-220<00550042004C00460054>-220<005500490046>-220<00470050005300460048005300500056004F0045>-220<00440050004D00500053>-220<00500047>-220<005500490046>-220<0051004D004200440046>-220<00580049004600530046>-220<004A0055>-220<0042005100510046004200530054000F>]TJ
+0.975 0 0 1 133.311 580.238 Tm [<0265>]TJ
+0.98 0 0 1 143.17 580.238 Tm [<0046>-231<00500051>]TJ
+0.975 0 0 1 159.797 580.238 Tm [<0055004A>]TJ
+0.98 0 0 1 165.858 580.238 Tm [<0050004F0042>]TJ
+0.975 0 0 1 180.669 580.238 Tm [<004D>]TJ
+/F123 7.97011 Tf 0.975 0 0 1 185.411 580.238 Tm [<001F>]TJ
+0.98 0 0 1 190.093 580.238 Tm [<00560048>]TJ
+0.975 0 0 1 199.505 580.238 Tm [<00570057004C>]TJ
+0.98 0 0 1 213.552 580.238 Tm [<0051004A0056>]TJ
+0.975 0 0 1 227.671 580.238 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 235.435 580.238 Tm [<0055>]TJ
+0.98 0 0 1 238.912 580.238 Tm [<0050>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 246.098 580.238 Tm [<003F>]TJ
+0.98 0 0 1 250.78 580.238 Tm [<00510048005A0056>]TJ
+0.975 0 0 1 269.605 580.238 Tm [<005C>]TJ
+0.98 0 0 1 274.287 580.238 Tm [<005000450052>]TJ
+0.975 0 0 1 288.406 580.238 Tm [<004F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 295.343 580.238 Tm [<0042>]TJ
+0.975 0 0 1 299.776 580.238 Tm [<0053>]TJ
+0.98 0 0 1 303.418 580.238 Tm [<0046>-231<00440050004E004E0042>]TJ
+0.975 0 0 1 339.171 580.238 Tm [<000E>]TJ
+0.98 0 0 1 342.231 580.238 Tm [<0054004600510042>]TJ
+0.975 0 0 1 360.02 580.238 Tm [<0053>]TJ
+0.98 0 0 1 363.662 580.238 Tm [<0042>]TJ
+0.975 0 0 1 368.095 580.238 Tm [<0055>]TJ
+0.98 0 0 1 371.572 580.238 Tm [<00460045>]TJ
+0.975 0 0 1 383.259 580.238 Tm [<0041>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 385.221 580.238 Tm [<0044>]TJ
+0.975 0 0 1 389.927 580.238 Tm [<005700570055004C>]TJ
+0.98 0 0 1 408.656 580.238 Tm [<00450058>]TJ
+0.975 0 0 1 418.068 580.238 Tm [<0057>]TJ
+0.98 0 0 1 422.751 580.238 Tm [<0048>]TJ
+0.975 0 0 1 427.457 580.238 Tm [<00200059>]TJ
+0.98 0 0 1 436.821 580.238 Tm [<0044>]TJ
+0.975 0 0 1 441.528 580.238 Tm [<004F>]TJ
+0.98 0 0 1 446.21 580.238 Tm [<00580048>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 455.622 580.238 Tm [<0008>]TJ
+0.98 0 0 1 459.839 580.238 Tm [<00510042>]TJ
+0.975 0 0 1 469.368 580.238 Tm [<004A0053>]TJ
+0.98 0 0 1 475.595 580.238 Tm [<0054>]TJ
+0.975 0 0 1 479.51 580.238 Tm [<001C>]TJ
+1.03 0 0 1 113.386 568.282 Tm [<0055>]TJ
+1.02 0 0 1 117.059 568.282 Tm [<00490046>]TJ
+1.03 0 0 1 127.12 568.282 Tm [<0053>]TJ
+1.02 0 0 1 130.968 568.282 Tm [<0046>-238<00440042004F>-239<0042>]TJ
+1.03 0 0 1 159.334 568.282 Tm [<004D>]TJ
+1.02 0 0 1 161.961 568.282 Tm [<00540050>-238<00430046>-239<0042>-239<0054>]TJ
+1.03 0 0 1 196.827 568.282 Tm [<004A>]TJ
+1.02 0 0 1 199.557 568.282 Tm [<004F0048>]TJ
+1.03 0 0 1 209.963 568.282 Tm [<004D>]TJ
+1.02 0 0 1 212.59 568.282 Tm [<0046>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 219.537 568.282 Tm [<001F>]TJ
+1.02 0 0 1 224.484 568.282 Tm [<0047>]TJ
+1.03 0 0 1 229.382 568.282 Tm [<004C>]TJ
+1.02 0 0 1 234.328 568.282 Tm [<0050004800510056>]TJ
+1.03 0 0 1 253.922 568.282 Tm [<004C>]TJ
+1.02 0 0 1 258.868 568.282 Tm [<00520051>]TJ
+1.03 0 0 1 268.665 568.282 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 276.864 568.282 Tm [<0042004E0050004F0048>]TJ
+1.03 0 0 1 307.692 568.282 Tm [<0055>]TJ
+1.02 0 0 1 311.366 568.282 Tm [<00490046004E>-238<0046>]TJ
+1.03 0 0 1 336.625 568.282 Tm [<0059>]TJ
+1.02 0 0 1 341.489 568.282 Tm [<0051>]TJ
+1.03 0 0 1 346.794 568.282 Tm [<0053>]TJ
+1.02 0 0 1 350.642 568.282 Tm [<004600540054>]TJ
+1.03 0 0 1 363.314 568.282 Tm [<004A>]TJ
+1.02 0 0 1 366.043 568.282 Tm [<004F0048>]TJ
+1.03 0 0 1 378.875 568.282 Tm [<0055>]TJ
+1.02 0 0 1 382.548 568.282 Tm [<00490046>]TJ
+1.03 0 0 1 395.034 568.282 Tm [<0057>]TJ
+1.02 0 0 1 399.888 568.282 Tm [<0042>]TJ
+1.03 0 0 1 404.501 568.282 Tm [<004D>]TJ
+1.02 0 0 1 407.128 568.282 Tm [<00560046>-238<0050>]TJ
+1.03 0 0 1 424.573 568.282 Tm [<0047>]TJ
+1.02 0 0 1 430.426 568.282 Tm [<0042>-238<0056004F>]TJ
+1.03 0 0 1 448.501 568.282 Tm [<004A0055>-236<004A>]TJ
+1.02 0 0 1 460.06 568.282 Tm [<004F>]TJ
+1.03 0 0 1 468.156 568.282 Tm [<0055>]TJ
+1.02 0 0 1 471.829 568.282 Tm [<00490046>]TJ
+1 0 0 1 113.386 556.327 Tm [<00440050005000530045004A004F004200550046>-217<0054005A005400550046004E000D>-217<00580049004A00440049>-218<004A0054>-217<01EA00510055>-217<0043005A>-217<00450046004700420056004D0055000F>-293<02650046>-217<0042005500550053004A00430056005500460054>-217<004200530046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 364.181 556.327 Tm [<004F004800490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 383.391 556.327 Tm [<000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 388.001 556.327 Tm [<0055004C004A004B0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 412.012 556.327 Tm [<000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 416.622 556.327 Tm [<005700520053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 431.029 556.327 Tm [<000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 435.639 556.327 Tm [<004500520057005700520050>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 466.617 556.327 Tm [<0042004F0045>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 113.386 544.372 Tm [<0053004400470047>]TJ
+1.015 0 0 1 132.787 544.372 Tm [<004C>]TJ
+1.01 0 0 1 137.661 544.372 Tm [<0051004A>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 147.362 544.372 Tm [<000D>]TJ
+1.01 0 0 1 152.017 544.372 Tm [<0042004F0045>]TJ
+1.015 0 0 1 169.617 544.372 Tm [<0055>]TJ
+1.01 0 0 1 173.237 544.372 Tm [<00490046>]TJ
+1.015 0 0 1 185.374 544.372 Tm [<0057>]TJ
+1.01 0 0 1 190.157 544.372 Tm [<0042>]TJ
+1.015 0 0 1 194.725 544.372 Tm [<004D>]TJ
+1.01 0 0 1 197.314 544.372 Tm [<005600460054>-216<0042>]TJ
+1.015 0 0 1 217.882 544.372 Tm [<0053>]TJ
+1.01 0 0 1 221.674 544.372 Tm [<0046>]TJ
+/F123 7.97011 Tf 1.015 0 0 1 228.326 544.372 Tm [<001F>]TJ
+1.01 0 0 1 233.2 544.372 Tm [<0047>]TJ
+1.015 0 0 1 238.051 544.372 Tm [<004C>]TJ
+1.01 0 0 1 242.925 544.372 Tm [<0050004800510056>]TJ
+1.015 0 0 1 262.326 544.372 Tm [<004C>]TJ
+1.01 0 0 1 267.201 544.372 Tm [<005200510056>]TJ
+1.015 0 0 1 281.752 544.372 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.015 0 0 1 286.626 544.372 Tm [<000F>-288<0265>]TJ
+1.01 0 0 1 302.284 544.372 Tm [<004600540046>-216<0042>]TJ
+1.015 0 0 1 322.017 544.372 Tm [<005500550053004A>]TJ
+1.01 0 0 1 335.739 544.372 Tm [<00430056>]TJ
+1.015 0 0 1 346.173 544.372 Tm [<0055>]TJ
+1.01 0 0 1 349.794 544.372 Tm [<00460054>-216<00540046>]TJ
+1.015 0 0 1 368.993 544.372 Tm [<0055>-215<0055>]TJ
+1.01 0 0 1 378.408 544.372 Tm [<00490046>-216<0042004E00500056004F>]TJ
+1.015 0 0 1 419.292 544.372 Tm [<0055>]TJ
+1.01 0 0 1 425.087 544.372 Tm [<0050>]TJ
+1.015 0 0 1 430.168 544.372 Tm [<0047>]TJ
+1.01 0 0 1 435.72 544.372 Tm [<0051004200450045>]TJ
+1.015 0 0 1 456.026 544.372 Tm [<004A>]TJ
+1.01 0 0 1 458.715 544.372 Tm [<004F0048>-216<0050004F>]TJ
+1.01 0 0 1 113.386 532.417 Tm [<005500490046>-215<004D004600470055000D>-216<0053004A004800490055000D>-216<005500500051>-216<0042004F0045>-216<00430050005500550050004E>-215<0043005000530045004600530054>-216<0053004600540051004600440055004A00570046004D005A000D>-216<0058004A00550049>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.01 0 0 1 347.072 532.417 Tm [<0053004400470047004C0051004A>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 383.194 532.417 Tm [<0054004600550055004A004F0048>-215<005500490046004E>-216<0042004D004D>-215<00420055>-216<0050004F00440046000F>]TJ
+0.98 0 0 1 113.386 520.462 Tm [<0031004200450045>]TJ
+0.97 0 0 1 133.332 520.462 Tm [<004A>]TJ
+0.98 0 0 1 135.903 520.462 Tm [<004F0048>]TJ
+0.97 0 0 1 147.862 520.462 Tm [<004A>]TJ
+0.98 0 0 1 150.433 520.462 Tm [<0054>-200<00540050004E>]TJ
+0.97 0 0 1 173.083 520.462 Tm [<0055>]TJ
+0.98 0 0 1 176.542 520.462 Tm [<0046>]TJ
+0.97 0 0 1 180.887 520.462 Tm [<004A>]TJ
+0.98 0 0 1 183.458 520.462 Tm [<004E00460054>-200<004F004600440046005400540042>]TJ
+0.97 0 0 1 231.941 520.462 Tm [<0053005A>]TJ
+0.98 0 0 1 241.991 520.462 Tm [<0043004600440042005600540046>]TJ
+0.97 0 0 1 275.049 520.462 Tm [<0055>]TJ
+0.98 0 0 1 278.509 520.462 Tm [<00490046>-200<0045>]TJ
+0.97 0 0 1 295.223 520.462 Tm [<0053>]TJ
+0.98 0 0 1 298.847 520.462 Tm [<00420058>]TJ
+0.97 0 0 1 309.918 520.462 Tm [<004A>]TJ
+0.98 0 0 1 312.489 520.462 Tm [<004F0048>]TJ
+0.97 0 0 1 322.487 520.462 Tm [<0008>]TJ
+0.98 0 0 1 324.439 520.462 Tm [<0054>-200<00430050>]TJ
+0.97 0 0 1 340.215 520.462 Tm [<00590008>]TJ
+0.98 0 0 1 346.748 520.462 Tm [<0054>]TJ
+0.97 0 0 1 352.624 520.462 Tm [<0009>]TJ
+0.98 0 0 1 355.794 520.462 Tm [<0042004F0045>-200<0044>]TJ
+0.97 0 0 1 376.657 520.462 Tm [<004D004A>]TJ
+0.98 0 0 1 381.702 520.462 Tm [<00510051>]TJ
+0.97 0 0 1 391.895 520.462 Tm [<004A>]TJ
+0.98 0 0 1 394.465 520.462 Tm [<004F0048>-200<00510042>]TJ
+0.97 0 0 1 415.954 520.462 Tm [<0055>]TJ
+0.98 0 0 1 419.413 520.462 Tm [<0049>]TJ
+0.97 0 0 1 424.734 520.462 Tm [<0008>]TJ
+0.98 0 0 1 426.686 520.462 Tm [<0054>]TJ
+0.97 0 0 1 430.602 520.462 Tm [<000A>]TJ
+0.98 0 0 1 435.733 520.462 Tm [<0045>]TJ
+0.97 0 0 1 440.819 520.462 Tm [<004A>]TJ
+0.98 0 0 1 443.39 520.462 Tm [<004E0046004F0054>]TJ
+0.97 0 0 1 465.026 520.462 Tm [<004A>]TJ
+0.98 0 0 1 467.596 520.462 Tm [<0050004F0054>]TJ
+0.98 0 0 1 113.386 508.506 Tm [<0042>]TJ
+0.97 0 0 1 117.818 508.506 Tm [<0053>]TJ
+0.98 0 0 1 121.442 508.506 Tm [<0046>-201<00450046>]TJ
+0.97 0 0 1 137.186 508.506 Tm [<00EB>]TJ
+0.98 0 0 1 142.607 508.506 Tm [<004F00460045>-201<0042004400440050>]TJ
+0.97 0 0 1 176.686 508.506 Tm [<0053>]TJ
+0.98 0 0 1 180.31 508.506 Tm [<0045>]TJ
+0.97 0 0 1 185.397 508.506 Tm [<004A>]TJ
+0.98 0 0 1 187.967 508.506 Tm [<004F0048>]TJ
+0.97 0 0 1 199.932 508.506 Tm [<0055>]TJ
+0.98 0 0 1 203.392 508.506 Tm [<0050>]TJ
+0.97 0 0 1 210.29 508.506 Tm [<0055>]TJ
+0.98 0 0 1 213.75 508.506 Tm [<00490046>-201<004200430054>]TJ
+0.97 0 0 1 238.7 508.506 Tm [<00550053>]TJ
+0.98 0 0 1 245.783 508.506 Tm [<00420044>]TJ
+0.97 0 0 1 254.151 508.506 Tm [<0055>]TJ
+0.98 0 0 1 259.578 508.506 Tm [<00510042>]TJ
+0.97 0 0 1 269.107 508.506 Tm [<0055>]TJ
+0.98 0 0 1 272.566 508.506 Tm [<00490054>]TJ
+0.97 0 0 1 283.77 508.506 Tm [<0055>]TJ
+0.98 0 0 1 287.229 508.506 Tm [<00490046>-201<0045>]TJ
+0.97 0 0 1 303.949 508.506 Tm [<0053>]TJ
+0.98 0 0 1 307.573 508.506 Tm [<00420058>]TJ
+0.97 0 0 1 318.645 508.506 Tm [<004A>]TJ
+0.98 0 0 1 321.215 508.506 Tm [<004F0048>]TJ
+0.97 0 0 1 333.18 508.506 Tm [<004A>]TJ
+0.98 0 0 1 335.751 508.506 Tm [<0054>-201<004E004200450046>-202<0050>]TJ
+0.97 0 0 1 370.323 508.506 Tm [<0047000D>]TJ
+0.98 0 0 1 377.931 508.506 Tm [<004F0050>]TJ
+0.97 0 0 1 388.309 508.506 Tm [<0055>]TJ
+0.98 0 0 1 393.736 508.506 Tm [<0042004400440050>]TJ
+0.97 0 0 1 410.968 508.506 Tm [<0053>]TJ
+0.98 0 0 1 414.592 508.506 Tm [<0045>]TJ
+0.97 0 0 1 419.679 508.506 Tm [<004A>]TJ
+0.98 0 0 1 422.25 508.506 Tm [<004F0048>]TJ
+0.97 0 0 1 434.215 508.506 Tm [<0055>]TJ
+0.98 0 0 1 437.674 508.506 Tm [<0050>]TJ
+0.97 0 0 1 444.572 508.506 Tm [<0055>]TJ
+0.98 0 0 1 448.032 508.506 Tm [<00490046>-201<00510042>]TJ
+0.97 0 0 1 469.194 508.506 Tm [<0055>]TJ
+0.98 0 0 1 472.654 508.506 Tm [<00490054>]TJ
+0.98 0 0 1 113.386 496.551 Tm [<00420054>]TJ
+0.97 0 0 1 123.641 496.551 Tm [<0055>]TJ
+0.98 0 0 1 127.1 496.551 Tm [<00490046>]TJ
+0.97 0 0 1 136.766 496.551 Tm [<005A>]TJ
+0.98 0 0 1 143.138 496.551 Tm [<0042>]TJ
+0.97 0 0 1 147.57 496.551 Tm [<0053>]TJ
+0.98 0 0 1 151.194 496.551 Tm [<0046>-195<00510042>]TJ
+0.97 0 0 1 166.975 496.551 Tm [<004A>]TJ
+0.98 0 0 1 169.545 496.551 Tm [<004F>]TJ
+0.97 0 0 1 174.993 496.551 Tm [<0055>]TJ
+0.98 0 0 1 178.453 496.551 Tm [<00460045>]TJ
+0.97 0 0 1 187.884 496.551 Tm [<000D>]TJ
+0.98 0 0 1 192.216 496.551 Tm [<0042004F0045>-195<0042>-195<00510042>]TJ
+0.97 0 0 1 224.959 496.551 Tm [<004A>]TJ
+0.98 0 0 1 227.529 496.551 Tm [<004F>]TJ
+0.97 0 0 1 232.977 496.551 Tm [<0055>]TJ
+0.98 0 0 1 236.437 496.551 Tm [<00460045>-195<00510042>]TJ
+0.97 0 0 1 257.304 496.551 Tm [<0055>]TJ
+0.98 0 0 1 260.764 496.551 Tm [<0049>-195<004900420054>]TJ
+0.97 0 0 1 283.568 496.551 Tm [<0055>]TJ
+0.98 0 0 1 287.027 496.551 Tm [<00490046>-195<0058>]TJ
+0.97 0 0 1 305.239 496.551 Tm [<004A>]TJ
+0.98 0 0 1 307.81 496.551 Tm [<0045>]TJ
+0.97 0 0 1 312.897 496.551 Tm [<0055>]TJ
+0.98 0 0 1 316.356 496.551 Tm [<0049>-195<0050>]TJ
+0.97 0 0 1 328.515 496.551 Tm [<0047>-197<0055>]TJ
+0.98 0 0 1 337.109 496.551 Tm [<00490046>-195<00510046004F>-195<0056005400460045>]TJ
+0.97 0 0 1 385.887 496.551 Tm [<0055>]TJ
+0.98 0 0 1 389.346 496.551 Tm [<0050>-195<00510042>]TJ
+0.97 0 0 1 405.713 496.551 Tm [<004A>]TJ
+0.98 0 0 1 408.283 496.551 Tm [<004F>]TJ
+0.97 0 0 1 413.731 496.551 Tm [<0055>-197<004A0055000F>]TJ
+0.98 0 0 1 430.323 496.551 Tm [<00270050>]TJ
+0.97 0 0 1 440.438 496.551 Tm [<0053>-197<004A>]TJ
+0.98 0 0 1 448.54 496.551 Tm [<004F0054>]TJ
+0.97 0 0 1 457.903 496.551 Tm [<0055>]TJ
+0.98 0 0 1 461.362 496.551 Tm [<0042004F00440046>]TJ
+0.97 0 0 1 479.522 496.551 Tm [<000D>]TJ
+0.97 0 0 1 113.386 484.596 Tm [<0055>]TJ
+0.98 0 0 1 116.845 484.596 Tm [<00490046>-217<0054>]TJ
+0.97 0 0 1 132.553 484.596 Tm [<004A>]TJ
+0.98 0 0 1 135.124 484.596 Tm [<004E0051>]TJ
+0.97 0 0 1 148.148 484.596 Tm [<004D>]TJ
+0.98 0 0 1 150.622 484.596 Tm [<0046>-217<0045>]TJ
+0.97 0 0 1 162.181 484.596 Tm [<0053>]TJ
+0.98 0 0 1 165.805 484.596 Tm [<00420058>]TJ
+0.97 0 0 1 176.877 484.596 Tm [<004A>]TJ
+0.98 0 0 1 179.447 484.596 Tm [<004F0048>]TJ
+0.97 0 0 1 191.572 484.596 Tm [<0041>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 193.524 484.596 Tm [<004F004C>]TJ
+0.98 0 0 1 202.841 484.596 Tm [<00510048>]TJ
+0.97 0 0 1 212.253 484.596 Tm [<00030013000300140013>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 235.544 484.596 Tm [<0008>]TJ
+0.98 0 0 1 239.624 484.596 Tm [<004900420054>-217<004F0050>-218<0058>]TJ
+0.97 0 0 1 274.564 484.596 Tm [<004A>]TJ
+0.98 0 0 1 277.135 484.596 Tm [<0045>]TJ
+0.97 0 0 1 282.222 484.596 Tm [<0055>]TJ
+0.98 0 0 1 285.681 484.596 Tm [<0049>]TJ
+0.97 0 0 1 291.002 484.596 Tm [<000D>]TJ
+0.98 0 0 1 295.51 484.596 Tm [<0046>]TJ
+0.97 0 0 1 299.855 484.596 Tm [<0057>]TJ
+0.98 0 0 1 304.426 484.596 Tm [<0046004F>]TJ
+0.97 0 0 1 316.345 484.596 Tm [<0055>]TJ
+0.98 0 0 1 319.805 484.596 Tm [<00490050005600480049>]TJ
+0.97 0 0 1 347.21 484.596 Tm [<004A0055>]TJ
+0.98 0 0 1 355.367 484.596 Tm [<004E>]TJ
+0.97 0 0 1 363.295 484.596 Tm [<004A>]TJ
+0.98 0 0 1 365.865 484.596 Tm [<00480049>]TJ
+0.97 0 0 1 375.736 484.596 Tm [<0055>]TJ
+0.98 0 0 1 381.323 484.596 Tm [<00430046>-217<00510042>]TJ
+0.97 0 0 1 402.293 484.596 Tm [<004A>]TJ
+0.98 0 0 1 404.864 484.596 Tm [<004F>]TJ
+0.97 0 0 1 410.312 484.596 Tm [<0055>]TJ
+0.98 0 0 1 413.772 484.596 Tm [<00460045>-217<0058>]TJ
+0.97 0 0 1 431.969 484.596 Tm [<004A0055>]TJ
+0.98 0 0 1 438 484.596 Tm [<0049>-217<0042>]TJ
+0.97 0 0 1 452.008 484.596 Tm [<01EA01E9000E>]TJ
+0.98 0 0 1 465.257 484.596 Tm [<0056004F>]TJ
+0.97 0 0 1 475.86 484.596 Tm [<004A0055>]TJ
+0.995 0 0 1 113.386 472.641 Tm [<0058004A00450046>-220<00510046004F000F>-294<002A0047>-221<0055004900460053004600080054>-220<004F0050>-220<0051004200450045004A004F0048000D>-220<005500490046>-221<0054005A004E00430050004D>-220<00580050004F00080055>-220<0054004900500058>-220<0042004F005A00550049004A004F0048000F>-295<0023005A>-220<00450046004700420056004D0055000D>-221<0051004200450045004A004F0048>-220<004A0054>-220<005400460055>]TJ
+1 0 0 1 113.386 460.686 Tm [<00550050>-220<01EA00510055>-220<0050004F>-220<0042004D004D>-220<0054004A004500460054000F>]TJ
+1.015 0 0 1 133.311 448.731 Tm [<0022>]TJ
+1.02 0 0 1 139.439 448.731 Tm [<0054>-233<0042004F>-234<0046>]TJ
+1.03 0 0 1 163.066 448.731 Tm [<0059>]TJ
+1.02 0 0 1 167.929 448.731 Tm [<0042004E0051>]TJ
+1.03 0 0 1 186.099 448.731 Tm [<004D>]TJ
+1.02 0 0 1 188.726 448.731 Tm [<0046>]TJ
+1.03 0 0 1 193.248 448.731 Tm [<000D>]TJ
+1.02 0 0 1 198.18 448.731 Tm [<00490046>]TJ
+1.03 0 0 1 208.24 448.731 Tm [<0053>]TJ
+1.02 0 0 1 212.088 448.731 Tm [<0046>]TJ
+1.03 0 0 1 216.611 448.731 Tm [<0008>]TJ
+1.02 0 0 1 218.683 448.731 Tm [<0054>-233<004900500058>]TJ
+1.03 0 0 1 245.084 448.731 Tm [<0055>]TJ
+1.02 0 0 1 248.758 448.731 Tm [<00490046>-233<0042>]TJ
+1.03 0 0 1 265.804 448.731 Tm [<004D004A>]TJ
+1.02 0 0 1 271.161 448.731 Tm [<0046004F>-233<004900420054>-234<004300460046004F>-233<0045>]TJ
+1.03 0 0 1 327.88 448.731 Tm [<0053>]TJ
+1.02 0 0 1 331.728 448.731 Tm [<00420058004F>]TJ
+1.03 0 0 1 351.294 448.731 Tm [<004A>]TJ
+1.02 0 0 1 354.024 448.731 Tm [<004F>]TJ
+1.03 0 0 1 362.067 448.731 Tm [<0055>]TJ
+1.02 0 0 1 365.741 448.731 Tm [<00490046>-233<00450046004E0050004F0054>]TJ
+1.03 0 0 1 411.119 448.731 Tm [<00550053>]TJ
+1.02 0 0 1 418.641 448.731 Tm [<0042>]TJ
+1.03 0 0 1 423.254 448.731 Tm [<0055004A>]TJ
+1.02 0 0 1 429.657 448.731 Tm [<0050004F>]TJ
+1.03 0 0 1 442.832 448.731 Tm [<00EB004D>]TJ
+1.02 0 0 1 451.216 448.731 Tm [<0046>-233<00440042>]TJ
+1.03 0 0 1 466.819 448.731 Tm [<004D004D>]TJ
+1.02 0 0 1 472.073 448.731 Tm [<00460045>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 436.775 Tm [<002F004800460057005800550048005500270048005000520010002E004C005700560046004B00360046004C004800510046>-1<00480029004C00460057004C005200510011005300470049>]TJ
+/F105 9.96264 Tf 1 0 0 1 291.071 436.775 Tm [<001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 412.865 Tm [<00030003000300030003000300030003000300030003000300030003000300030008000300270048004900440058004F0057>-1<000300580051004C00570011>]TJ
+1 0 0 1 113.386 400.91 Tm [<003F00510048005A0056005C005000450052004F003F0044004F004C00480051003E00140011001A004800500040005E0008>]TJ
+1 0 0 1 113.386 388.955 Tm [<000300030053004800510003001100130018000F>]TJ
+1 0 0 1 113.386 377 Tm [<0003000300460052004F00520055000300460050005C004E0003001100150003001400030011001700030013000F>]TJ
+1 0 0 1 113.386 365.044 Tm [<000800030037004B004800030044004F004C0048005100B700560003004500520047005C>]TJ
+1 0 0 1 113.386 353.089 Tm [<00030003001400030013000F00030046004C00550046004F004800030058004F000300110018000F00030046004C00550046>-1<004F00480003004F0047000300110018000F00030049004C004F004F000F>]TJ
+1 0 0 1 113.386 341.134 Tm [<000800030037004B00480003004F0048004900570003005700480051005700440046004F0048>]TJ
+1 0 0 1 113.386 329.179 Tm [<000300030046004C00550046004F004800030047004F000300110015000F00030046004C00550046004F00480003004F0058>-1<000300110015000F>]TJ
+1 0 0 1 113.386 317.224 Tm [<000800030037004B004800030055004C004A004B00570003005700480051005700440046004F0048>]TJ
+1 0 0 1 113.386 305.269 Tm [<0003000300500052005900480003001400030013000F00030046004C00550046004F0048000300470055000300110015000F>-1<00030046004C00550046004F0048000300550058000300110015000F>]TJ
+1 0 0 1 113.386 293.313 Tm [<000800030037004B00480003004F0048004A0056>]TJ
+1 0 0 1 113.386 281.358 Tm [<000300030050005200590048000300110014001900030013000F0003000E000300130003001000110016000F000300080003>-1<0056005700550052004E00480003004C00560003004C00500053004F004C0046004C00570003004C005100030057004B00480003>-1<00510048005B005700030050005200590048>]TJ
+1 0 0 1 113.386 269.403 Tm [<000300030050005200590048000300110017001C00030013000F0003000E000300130003001000110016000F>]TJ
+1 0 0 1 113.386 257.448 Tm [<00030003005000520059004800030011001B001500030013000F0003000E000300130003001000110016000F005600570055>-1<0052004E0048000F>]TJ
+1 0 0 1 113.386 245.493 Tm [<000800030037004B004800030048005C00480056>]TJ
+1 0 0 1 113.386 233.538 Tm [<0003000300460052004F00520055000300460050005C004E00030013000300130003001400030013000F>]TJ
+1 0 0 1 113.386 221.582 Tm [<0003000300500052005900480003001100150003001100150018000F0003000E00030011001500030013000F>]TJ
+1 0 0 1 113.386 209.627 Tm [<0003000300500052005900480003000E00030011001500030013000F0003000E000300110015000300130003000800030056>-1<005700550052004E00480003004C00560003004C00500053004F004C0046004C0057004F005C0003004400470047004800470003>-1<0044005700030057004B00480003004800510047>]TJ
+1 0 0 1 113.386 197.672 Tm [<000300030060>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 51.773 173.762 Tm [<003F0056005C005000450052004F005A004C00470057004B>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 173.762 Tm [<001F00460052005000500044005100470021>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 46.971 161.807 Tm [<003F0056005C005000450052004F004B0048004C004A004B0057>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 161.807 Tm [<001F00460052005000500044005100470021>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 51.773 149.851 Tm [<003F0056005C005000450052004F0047004800530057004B>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 149.851 Tm [<001F00460052005000500044005100470021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 137.896 Tm [<003800490046004F>-190<0042>-190<0054>]TJ
+0.97 0 0 1 149.158 137.896 Tm [<005A>]TJ
+0.98 0 0 1 153.622 137.896 Tm [<004E00430050>]TJ
+0.97 0 0 1 171.45 137.896 Tm [<004D>-192<004A>]TJ
+0.98 0 0 1 178.354 137.896 Tm [<0054>-190<00450046>]TJ
+0.97 0 0 1 193.56 137.896 Tm [<00EB>]TJ
+0.98 0 0 1 198.981 137.896 Tm [<004F00460045>]TJ
+0.97 0 0 1 213.861 137.896 Tm [<000D>-199<004A0055>]TJ
+0.98 0 0 1 224.184 137.896 Tm [<0054>-190<0045>]TJ
+0.97 0 0 1 235.046 137.896 Tm [<004A>]TJ
+0.98 0 0 1 237.616 137.896 Tm [<004E0046004F0054>]TJ
+0.97 0 0 1 259.252 137.896 Tm [<004A>]TJ
+0.98 0 0 1 261.822 137.896 Tm [<0050004F0054>-190<00440042004F>-190<00430046>-191<005200560046>]TJ
+0.97 0 0 1 319.273 137.896 Tm [<0053004A>]TJ
+0.98 0 0 1 325.468 137.896 Tm [<00460045>-190<0058>]TJ
+0.97 0 0 1 343.398 137.896 Tm [<004A0055>]TJ
+0.98 0 0 1 349.428 137.896 Tm [<0049>]TJ
+0.97 0 0 1 356.608 137.896 Tm [<0055>]TJ
+0.98 0 0 1 360.068 137.896 Tm [<0049005000540046>-190<004E00420044>]TJ
+0.97 0 0 1 396.734 137.896 Tm [<0053>]TJ
+0.98 0 0 1 400.358 137.896 Tm [<00500054>]TJ
+0.97 0 0 1 409.203 137.896 Tm [<000D>]TJ
+0.98 0 0 1 413.497 137.896 Tm [<005800490046>]TJ
+0.97 0 0 1 429.802 137.896 Tm [<0053>]TJ
+0.98 0 0 1 433.425 137.896 Tm [<0046>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 439.629 137.896 Tm [<001F>]TJ
+0.98 0 0 1 444.288 137.896 Tm [<0046005200500050004400510047>]TJ
+0.97 0 0 1 477.232 137.896 Tm [<0021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 125.941 Tm [<004A0054>-220<005500490046>-220<0054005A004E00430050004D00080054>-220<00440050004E004E0042004F0045000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01F1>]TJ
+ET
+endstream
+endobj
+248 0 obj <<
+/Type /Page
+/Contents 249 0 R
+/Resources 247 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 237 0 R
+/Annots [ 246 0 R ]
+>> endobj
+246 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border [0 0 0]
+/Rect [503.776 627.53 523.127 633.189]
+/A << /S /GoTo /D (ptx@section_link:25) >>
+>> endobj
+247 0 obj <<
+/Font << /F111 6 0 R /F123 17 0 R /F105 5 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+252 0 obj <<
+/Length 27735
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<0035010200F100FE010300F9010400F900FF00FE0103>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 113.386 616.103 Tm [<00350053>]TJ
+1.005 0 0 1 122.864 616.103 Tm [<0042004F0054>]TJ
+1.01 0 0 1 137.012 616.103 Tm [<004A0055004A>]TJ
+1.005 0 0 1 145.967 616.103 Tm [<0050004F0054>-223<0042>]TJ
+1.01 0 0 1 167.403 616.103 Tm [<0053>]TJ
+1.005 0 0 1 171.177 616.103 Tm [<0046>-222<004300420054>]TJ
+1.01 0 0 1 191.521 616.103 Tm [<004A>]TJ
+1.005 0 0 1 194.198 616.103 Tm [<0044>-222<0042004F>]TJ
+1.01 0 0 1 210.597 616.103 Tm [<004A>]TJ
+1.005 0 0 1 213.274 616.103 Tm [<004E0042>]TJ
+1.01 0 0 1 225.949 616.103 Tm [<0055004A>]TJ
+1.005 0 0 1 232.228 616.103 Tm [<0050004F0054>-222<0051>]TJ
+1.01 0 0 1 254.345 616.103 Tm [<004D>]TJ
+1.005 0 0 1 256.921 616.103 Tm [<0042>]TJ
+1.01 0 0 1 261.467 616.103 Tm [<005A>]TJ
+1.005 0 0 1 266.115 616.103 Tm [<00460045>-222<005800490046004F>-223<0042>-223<0054>]TJ
+1.01 0 0 1 313.351 616.103 Tm [<0055>]TJ
+1.005 0 0 1 316.954 616.103 Tm [<00460051>]TJ
+1.01 0 0 1 328.868 616.103 Tm [<0009>]TJ
+1.005 0 0 1 332.168 616.103 Tm [<0045>]TJ
+1.01 0 0 1 337.385 616.103 Tm [<004A>]TJ
+1.005 0 0 1 340.061 616.103 Tm [<0054>]TJ
+1.01 0 0 1 344.076 616.103 Tm [<000A>]TJ
+1.005 0 0 1 347.377 616.103 Tm [<00420051005100460042>]TJ
+1.01 0 0 1 371.376 616.103 Tm [<0053>]TJ
+1.005 0 0 1 375.15 616.103 Tm [<0054>-222<0050004F>]TJ
+1.01 0 0 1 394.272 616.103 Tm [<0055>]TJ
+1.005 0 0 1 397.874 616.103 Tm [<00490046>-222<0054>]TJ
+1.01 0 0 1 414.033 616.103 Tm [<004D004A>]TJ
+1.005 0 0 1 419.286 616.103 Tm [<00450046>-222<0050>]TJ
+1.01 0 0 1 436.246 616.103 Tm [<0053>]TJ
+1.005 0 0 1 442.251 616.103 Tm [<005800490046004F>-222<0050004F0046>]TJ
+1.005 0 0 1 113.386 604.148 Tm [<0042004500570042004F004400460054>-215<00550050>-215<005500490046>-215<004F004600590055>-215<0054004D004A00450046000F>-291<02650046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 240.699 604.148 Tm [<00570055004400510056004C0057004C00520051>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 291.117 604.148 Tm [<0042005500550053004A0043005600550046>-215<004700500053>-215<0054004D004A004500460054>-215<0042004F0045>-215<00540055004600510054>-215<00440042004F>-216<00550042004C0046>-215<0042>]TJ
+/F123 7.97011 Tf 1.005 0 0 1 452.932 604.148 Tm [<001F00510044005000480047>]TJ
+0.98 0 0 1 113.386 592.193 Tm [<00570055>]TJ
+0.985 0 0 1 122.798 592.193 Tm [<004400510056>]TJ
+0.98 0 0 1 136.989 592.193 Tm [<004C0057004C>]TJ
+0.985 0 0 1 151.108 592.193 Tm [<00520051>]TJ
+0.98 0 0 1 160.568 592.193 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 168.293 592.193 Tm [<00420054>]TJ
+0.98 0 0 1 178.875 592.193 Tm [<004A0055>]TJ
+0.985 0 0 1 184.968 592.193 Tm [<0054>]TJ
+0.98 0 0 1 191.095 592.193 Tm [<0057>]TJ
+0.985 0 0 1 195.713 592.193 Tm [<0042>]TJ
+0.98 0 0 1 200.168 592.193 Tm [<004D>]TJ
+0.985 0 0 1 202.667 592.193 Tm [<00560046>]TJ
+0.98 0 0 1 212.216 592.193 Tm [<000D>]TJ
+0.985 0 0 1 216.799 592.193 Tm [<0042004F0045>-223<0050004F0046>-223<004500460044>]TJ
+0.98 0 0 1 264.459 592.193 Tm [<004D>]TJ
+0.985 0 0 1 266.959 592.193 Tm [<0042>]TJ
+0.98 0 0 1 271.414 592.193 Tm [<0053>]TJ
+0.985 0 0 1 275.075 592.193 Tm [<00460054>-223<0042>-223<004F0042004E00460045>]TJ
+0.98 0 0 1 321.786 592.193 Tm [<00550053>]TJ
+0.985 0 0 1 328.943 592.193 Tm [<0042004F0054>]TJ
+0.98 0 0 1 342.809 592.193 Tm [<004A0055004A>]TJ
+0.985 0 0 1 351.498 592.193 Tm [<0050004F>-223<0058>]TJ
+0.98 0 0 1 370.795 592.193 Tm [<004A0055>]TJ
+0.985 0 0 1 376.887 592.193 Tm [<0049>]TJ
+0.98 0 0 1 384.427 592.193 Tm [<0055>]TJ
+0.985 0 0 1 387.922 592.193 Tm [<00490046>]TJ
+0.98 0 0 1 399.829 592.193 Tm [<0047>]TJ
+0.985 0 0 1 403.09 592.193 Tm [<0050>]TJ
+0.98 0 0 1 408.046 592.193 Tm [<004D004D>]TJ
+0.985 0 0 1 413.044 592.193 Tm [<00500058>]TJ
+0.98 0 0 1 424.673 592.193 Tm [<004A>]TJ
+0.985 0 0 1 427.27 592.193 Tm [<004F0048>-223<00440050004E004E0042004F0045>]TJ
+0.98 0 0 1 479.401 592.193 Tm [<001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 42.169 568.282 Tm [<003F00510048005A00570055004400510056004C0057004C00520051>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 568.282 Tm [<001F00510044005000480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 556.327 Tm [<0265004A0054>-220<00440050004E004E0042004F0045>-220<00550042004C00460054>-220<005400460057004600530042004D>-220<0042005500550053004A00430056005500460054000D>-220<00580049004A00440049>-220<004200530046001B>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 91.985 532.417 Tm [<0057005C00530048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 532.417 Tm [(<)]TJ
+/F123 7.97011 Tf 1.02 0 0 1 121.135 532.417 Tm [<00560053>]TJ
+1.03 0 0 1 130.931 532.417 Tm [<004F004C0057>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 145.77 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 150.717 532.417 Tm [<0045>]TJ
+1.03 0 0 1 155.615 532.417 Tm [<004F004C>]TJ
+1.02 0 0 1 165.508 532.417 Tm [<005100470056>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 180.203 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 185.149 532.417 Tm [<00450052>]TJ
+1.03 0 0 1 194.946 532.417 Tm [<005B>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 199.892 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 204.839 532.417 Tm [<005A>]TJ
+1.03 0 0 1 209.737 532.417 Tm [<004C>]TJ
+1.02 0 0 1 214.683 532.417 Tm [<00530048>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 224.48 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 229.426 532.417 Tm [<0047>]TJ
+1.03 0 0 1 234.325 532.417 Tm [<004C>]TJ
+1.02 0 0 1 239.271 532.417 Tm [<005600560052>]TJ
+1.03 0 0 1 253.966 532.417 Tm [<004F0059>]TJ
+1.02 0 0 1 263.859 532.417 Tm [<0048>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 268.757 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 273.704 532.417 Tm [<004A>]TJ
+1.03 0 0 1 278.602 532.417 Tm [<004F004C00570057>]TJ
+1.02 0 0 1 298.388 532.417 Tm [<0048>]TJ
+1.03 0 0 1 303.286 532.417 Tm [<0055>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 308.232 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 313.179 532.417 Tm [<0049004F005C>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 328.018 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 332.964 532.417 Tm [<005300580056004B>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 352.558 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 357.504 532.417 Tm [<00460052>]TJ
+1.03 0 0 1 367.301 532.417 Tm [<0059>]TJ
+1.02 0 0 1 372.247 532.417 Tm [<0048>]TJ
+1.03 0 0 1 377.145 532.417 Tm [<0055>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 382.092 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 387.038 532.417 Tm [<0058005100460052>]TJ
+1.03 0 0 1 406.631 532.417 Tm [<0059>]TJ
+1.02 0 0 1 411.578 532.417 Tm [<0048>]TJ
+1.03 0 0 1 416.476 532.417 Tm [<0055>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 421.423 532.417 Tm [<005F>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 426.369 532.417 Tm [<0049>]TJ
+1.02 0 0 1 431.315 532.417 Tm [<004400470048>]TJ
+/F7 9.96264 Tf 1 0 0 1 446.01 532.417 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 113.386 520.462 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 116.654 520.462 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 150.238 520.462 Tm [<0051005200510048>]TJ
+/F63 9.96264 Tf 1 0 0 1 169.447 520.462 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 508.506 Tm [<00090265>]TJ
+0.985 0 0 1 126.498 508.506 Tm [<004600540046>]TJ
+0.98 0 0 1 141.393 508.506 Tm [<0057>]TJ
+0.985 0 0 1 146.011 508.506 Tm [<0042>]TJ
+0.98 0 0 1 150.466 508.506 Tm [<004D>]TJ
+0.985 0 0 1 152.965 508.506 Tm [<005600460054>-226<00440042004F>-227<0042>]TJ
+0.98 0 0 1 189.241 508.506 Tm [<004D>]TJ
+0.985 0 0 1 191.741 508.506 Tm [<00540050>-226<00490042>]TJ
+0.98 0 0 1 212.661 508.506 Tm [<0057>]TJ
+0.985 0 0 1 217.279 508.506 Tm [<0046>-226<0042004F>-227<0056005100510046>]TJ
+0.98 0 0 1 255.821 508.506 Tm [<0053>]TJ
+0.985 0 0 1 259.483 508.506 Tm [<0044004200540046>]TJ
+0.98 0 0 1 278.42 508.506 Tm [<00EB0053>]TJ
+0.985 0 0 1 287.559 508.506 Tm [<0054>]TJ
+0.98 0 0 1 291.494 508.506 Tm [<0055>-228<004D>]TJ
+0.985 0 0 1 299.715 508.506 Tm [<0046>]TJ
+0.98 0 0 1 304.081 508.506 Tm [<00550055>]TJ
+0.985 0 0 1 311.072 508.506 Tm [<0046>]TJ
+0.98 0 0 1 315.439 508.506 Tm [<0053000F000A>-309<0265004A>]TJ
+0.985 0 0 1 340.226 508.506 Tm [<0054>]TJ
+0.98 0 0 1 346.387 508.506 Tm [<004A>]TJ
+0.985 0 0 1 348.984 508.506 Tm [<0054>]TJ
+0.98 0 0 1 355.145 508.506 Tm [<0055>]TJ
+0.985 0 0 1 358.64 508.506 Tm [<00490046>]TJ
+0.98 0 0 1 370.581 508.506 Tm [<0055005A>]TJ
+0.985 0 0 1 378.587 508.506 Tm [<00510046>-226<0050>]TJ
+0.98 0 0 1 395.258 508.506 Tm [<0047>-228<0055>]TJ
+0.985 0 0 1 404.24 508.506 Tm [<00490046>-226<0042004F>]TJ
+0.98 0 0 1 426.112 508.506 Tm [<004A>]TJ
+0.985 0 0 1 428.709 508.506 Tm [<004E0042>]TJ
+0.98 0 0 1 441.133 508.506 Tm [<0055004A>]TJ
+0.985 0 0 1 447.225 508.506 Tm [<0050004F>-226<00430046>]TJ
+0.98 0 0 1 469.244 508.506 Tm [<004A>]TJ
+0.985 0 0 1 471.841 508.506 Tm [<004F0048>]TJ
+/F63 7.97011 Tf 1 0 0 1 491.852 531.969 Tm [<02650046>]TJ
+/F105 7.97011 Tf 1 0 0 1 504.334 531.969 Tm [<0037004A005400560042004D>-219<002500500044>]TJ
+/F63 7.97011 Tf 1 0 0 1 540.582 531.969 Tm [<004900420054>-200<0042>-200<0054004D004A00450046>]TJ
+1 0 0 1 491.852 523.002 Tm [<004A004D004D005600540055005300420055004A004F0048>-200<00550049005000540046>]TJ
+1 0 0 1 491.852 514.036 Tm [<005500530042004F0054004A0055004A0050004F0054000F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 496.551 Tm [<0051>]TJ
+0.97 0 0 1 118.482 496.551 Tm [<004D>]TJ
+0.98 0 0 1 120.956 496.551 Tm [<0042>]TJ
+0.97 0 0 1 125.389 496.551 Tm [<005A>]TJ
+0.98 0 0 1 129.853 496.551 Tm [<00460045>]TJ
+0.97 0 0 1 139.285 496.551 Tm [<000F>-298<0265>]TJ
+0.98 0 0 1 154.348 496.551 Tm [<0046>-213<0051>]TJ
+0.97 0 0 1 165.875 496.551 Tm [<0053>]TJ
+0.98 0 0 1 169.499 496.551 Tm [<004600450046>]TJ
+0.97 0 0 1 183.275 496.551 Tm [<00EB>]TJ
+0.98 0 0 1 188.696 496.551 Tm [<004F00460045>]TJ
+0.97 0 0 1 205.661 496.551 Tm [<00550053>]TJ
+0.98 0 0 1 212.744 496.551 Tm [<0042004F0054>]TJ
+0.97 0 0 1 226.54 496.551 Tm [<004A0055004A>]TJ
+0.98 0 0 1 235.141 496.551 Tm [<0050004F0054>-213<0042>]TJ
+0.97 0 0 1 255.952 496.551 Tm [<004D0053>]TJ
+0.98 0 0 1 262.05 496.551 Tm [<004600420045>]TJ
+0.97 0 0 1 275.914 496.551 Tm [<005A>]TJ
+0.98 0 0 1 282.464 496.551 Tm [<0042>]TJ
+0.97 0 0 1 286.897 496.551 Tm [<0057>]TJ
+0.98 0 0 1 291.468 496.551 Tm [<0042>]TJ
+0.97 0 0 1 295.9 496.551 Tm [<004A004D>]TJ
+0.98 0 0 1 300.945 496.551 Tm [<00420043>]TJ
+0.97 0 0 1 310.347 496.551 Tm [<004D>]TJ
+0.98 0 0 1 312.821 496.551 Tm [<0046>]TJ
+0.97 0 0 1 319.251 496.551 Tm [<004A>]TJ
+0.98 0 0 1 321.821 496.551 Tm [<004F>]TJ
+/F63 9.96264 Tf 0.97 0 0 1 329.355 496.551 Tm [<002D>]TJ
+0.98 0 0 1 334.312 496.551 Tm [<00460044>]TJ
+0.97 0 0 1 341.771 496.551 Tm [<0055>]TJ
+0.98 0 0 1 345.105 496.551 Tm [<0056>]TJ
+0.97 0 0 1 349.86 496.551 Tm [<0053>]TJ
+0.98 0 0 1 353.378 496.551 Tm [<0046>]TJ
+0.97 0 0 1 357.322 496.551 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 362.925 496.551 Tm [<0042>]TJ
+0.97 0 0 1 367.358 496.551 Tm [<0053>]TJ
+0.98 0 0 1 370.982 496.551 Tm [<0046>]TJ
+0.97 0 0 1 377.412 496.551 Tm [<0055>]TJ
+0.98 0 0 1 380.871 496.551 Tm [<0049005000540046>-213<0042004F>]TJ
+0.97 0 0 1 411.349 496.551 Tm [<004A>]TJ
+0.98 0 0 1 413.919 496.551 Tm [<004E0042>]TJ
+0.97 0 0 1 426.28 496.551 Tm [<0055004A>]TJ
+0.98 0 0 1 432.31 496.551 Tm [<0050004F0054>-213<0058>]TJ
+0.97 0 0 1 455.328 496.551 Tm [<004A0055>]TJ
+0.98 0 0 1 461.358 496.551 Tm [<0049>]TJ
+0.97 0 0 1 468.764 496.551 Tm [<0055>]TJ
+0.98 0 0 1 472.224 496.551 Tm [<00490046>]TJ
+1 0 0 1 113.386 484.596 Tm [<00470050004D004D00500058004A004F0048>-220<0051004200530042004E00460055004600530054>-220<005400460055>-220<00550050>-220<005500490046004A0053>-220<00450046004700420056004D0055>-220<00570042004D005600460054000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 82.38 460.686 Tm [<005000520057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 460.686 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 460.686 Tm [<004C0051005A004400550047>]TJ
+/F111 7.97011 Tf 1 0 0 1 149.948 460.686 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 154.751 460.686 Tm [<005200580057005A004400550047>]TJ
+/F7 9.96264 Tf 1 0 0 1 188.367 460.686 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 206.078 460.686 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.346 460.686 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 242.93 460.686 Tm [<004C0051005A004400550047>]TJ
+/F63 9.96264 Tf 1 0 0 1 271.744 460.686 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 448.731 Tm [<0009>]TJ
+0.99 0 0 1 116.588 448.731 Tm [<0030>]TJ
+0.985 0 0 1 123.67 448.731 Tm [<004F>]TJ
+0.98 0 0 1 129.146 448.731 Tm [<004D005A>-222<0047>]TJ
+0.985 0 0 1 141.587 448.731 Tm [<0050>]TJ
+0.98 0 0 1 146.542 448.731 Tm [<0053>-222<00550053>]TJ
+0.985 0 0 1 159.53 448.731 Tm [<0042004F0054>]TJ
+0.98 0 0 1 173.396 448.731 Tm [<004A0055004A>]TJ
+0.985 0 0 1 182.086 448.731 Tm [<0050004F0054>-221<0050>]TJ
+0.98 0 0 1 203.578 448.731 Tm [<0047>-222<0055005A>]TJ
+0.985 0 0 1 217.015 448.731 Tm [<00510046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 228.675 448.731 Tm [<00560053>]TJ
+0.98 0 0 1 238.135 448.731 Tm [<004F004C0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 252.254 448.731 Tm [<000D>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 256.82 448.731 Tm [<00450052>]TJ
+0.98 0 0 1 266.281 448.731 Tm [<005B>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 270.987 448.731 Tm [<000D>]TJ
+0.985 0 0 1 275.554 448.731 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.98 0 0 1 292.767 448.731 Tm [<0049004F005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 306.886 448.731 Tm [<000F000A>-298<0265>]TJ
+0.985 0 0 1 325.305 448.731 Tm [<0046>-221<0045>]TJ
+0.98 0 0 1 336.955 448.731 Tm [<004A0053>]TJ
+0.985 0 0 1 343.213 448.731 Tm [<00460044>]TJ
+0.98 0 0 1 351.535 448.731 Tm [<0055004A>]TJ
+0.985 0 0 1 357.627 448.731 Tm [<0050004F>-221<0050>]TJ
+0.98 0 0 1 375.185 448.731 Tm [<0047>]TJ
+0.985 0 0 1 380.616 448.731 Tm [<004E0050>]TJ
+0.98 0 0 1 393.54 448.731 Tm [<0055004A>]TJ
+0.985 0 0 1 399.632 448.731 Tm [<0050004F>]TJ
+0.98 0 0 1 410.063 448.731 Tm [<000D>]TJ
+0.985 0 0 1 414.63 448.731 Tm [<0046>]TJ
+0.98 0 0 1 418.997 448.731 Tm [<004A0055>]TJ
+0.985 0 0 1 425.089 448.731 Tm [<00490046>]TJ
+0.98 0 0 1 434.804 448.731 Tm [<0053>-222<00470053>]TJ
+0.985 0 0 1 447.558 448.731 Tm [<0050004E>-221<0050>]TJ
+0.98 0 0 1 467.607 448.731 Tm [<0053>-222<0055>]TJ
+0.985 0 0 1 476.934 448.731 Tm [<0050>]TJ
+1 0 0 1 113.386 436.775 Tm [<005500490046>-220<00440046004F005500460053>-220<00500047>-220<005500490046>-220<0051004200480046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 67.973 412.865 Tm [<0047004C0055004800460057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 412.865 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 412.865 Tm [<004F0055>]TJ
+/F111 7.97011 Tf 1 0 0 1 130.739 412.865 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 135.541 412.865 Tm [<00450057>]TJ
+/F111 7.97011 Tf 1 0 0 1 145.146 412.865 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 149.948 412.865 Tm [<0055004F>]TJ
+/F111 7.97011 Tf 1 0 0 1 159.553 412.865 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 164.355 412.865 Tm [<00570045>]TJ
+/F111 7.97011 Tf 1 0 0 1 173.96 412.865 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 178.762 412.865 Tm [<0047005B>]TJ
+/F7 9.96264 Tf 1 0 0 1 188.367 412.865 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 206.078 412.865 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.346 412.865 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 242.93 412.865 Tm [<004F0055>]TJ
+/F63 9.96264 Tf 1 0 0 1 252.535 412.865 Tm [<000A>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 400.91 Tm [<0009>]TJ
+0.99 0 0 1 116.572 400.91 Tm [<0030>]TJ
+0.985 0 0 1 123.654 400.91 Tm [<004F>]TJ
+0.975 0 0 1 129.129 400.91 Tm [<004D005A>-226<0047>]TJ
+0.985 0 0 1 141.546 400.91 Tm [<0050>]TJ
+0.975 0 0 1 146.502 400.91 Tm [<0053>]TJ
+0.985 0 0 1 152.343 400.91 Tm [<004E0050>]TJ
+0.975 0 0 1 165.267 400.91 Tm [<0057004A>]TJ
+0.985 0 0 1 172.445 400.91 Tm [<004F0048>]TJ
+0.975 0 0 1 184.692 400.91 Tm [<00550053>]TJ
+0.985 0 0 1 191.812 400.91 Tm [<0042004F0054>]TJ
+0.975 0 0 1 205.678 400.91 Tm [<004A0055004A>]TJ
+0.985 0 0 1 214.323 400.91 Tm [<0050004F0054>]TJ
+0.975 0 0 1 228.69 400.91 Tm [<000F000A>-302<0265>]TJ
+0.985 0 0 1 247.057 400.91 Tm [<0046>-224<0045>]TJ
+0.975 0 0 1 258.734 400.91 Tm [<004A0053>]TJ
+0.985 0 0 1 264.961 400.91 Tm [<00460044>]TJ
+0.975 0 0 1 273.282 400.91 Tm [<0055004A>]TJ
+0.985 0 0 1 279.344 400.91 Tm [<0050004F>-224<0050>]TJ
+0.975 0 0 1 296.929 400.91 Tm [<0047>]TJ
+0.985 0 0 1 302.372 400.91 Tm [<004E0050>]TJ
+0.975 0 0 1 315.296 400.91 Tm [<0057>]TJ
+0.985 0 0 1 319.89 400.91 Tm [<0046004E0046004F>]TJ
+0.975 0 0 1 342.068 400.91 Tm [<0055001B>-302<004D>]TJ
+0.985 0 0 1 353.347 400.91 Tm [<0046>]TJ
+0.975 0 0 1 357.714 400.91 Tm [<00470055>-226<0055>]TJ
+0.985 0 0 1 370.112 400.91 Tm [<0050>]TJ
+0.975 0 0 1 377.266 400.91 Tm [<0053004A>]TJ
+0.985 0 0 1 383.492 400.91 Tm [<00480049>]TJ
+0.975 0 0 1 393.413 400.91 Tm [<0055000D>]TJ
+0.985 0 0 1 401.47 400.91 Tm [<00430050>]TJ
+0.975 0 0 1 411.421 400.91 Tm [<00550055>]TJ
+0.985 0 0 1 418.376 400.91 Tm [<0050004E>]TJ
+0.975 0 0 1 433.498 400.91 Tm [<0055>]TJ
+0.985 0 0 1 436.975 400.91 Tm [<0050>]TJ
+0.975 0 0 1 444.129 400.91 Tm [<0055>]TJ
+0.985 0 0 1 447.607 400.91 Tm [<00500051>]TJ
+0.975 0 0 1 457.685 400.91 Tm [<000D>-226<0053004A>]TJ
+0.985 0 0 1 468.491 400.91 Tm [<00480049>]TJ
+0.975 0 0 1 478.412 400.91 Tm [<0055>]TJ
+1 0 0 1 113.386 388.955 Tm [<00550050>-220<004D004600470055000D>-220<005500500051>-220<00550050>-220<00430050005500550050004E000D>-220<0042004F0045>-220<0045004A004200480050004F0042004D>-220<0009005500500051000E004D004600470055>-220<00550050>-220<00430050005500550050004E000E0053004A004800490055000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 67.973 365.044 Tm [<0047004C0050004800510056004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 365.044 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 365.044 Tm [<004B00520055004C005D0052005100570044004F>]TJ
+/F111 7.97011 Tf 1 0 0 1 169.158 365.044 Tm [<005F>]TJ
+/F123 7.97011 Tf 1 0 0 1 173.96 365.044 Tm [<0059004800550057004C00460044004F>]TJ
+/F7 9.96264 Tf 1 0 0 1 212.378 365.044 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 230.09 365.044 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 233.357 365.044 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 266.942 365.044 Tm [<004B00520055004C005D0052005100570044004F>]TJ
+/F63 9.96264 Tf 1 0 0 1 314.965 365.044 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 353.089 Tm [<00090030004F004D005A>-220<004700500053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 152.997 353.089 Tm [<00560053004F004C0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 179.201 353.089 Tm [<0042004F0045>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 196.665 353.089 Tm [<0045004F004C005100470056>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 225.479 353.089 Tm [<000F000A>-293<0038004900460055004900460053>-220<005500490046>-220<00540051004D004A00550055004A004F0048>-220<004A0054>-220<004900500053004A005B0050004F00550042004D>-220<00500053>-220<0057004600530055004A00440042004D000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 87.183 329.179 Tm [<005600460044004F0048>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 329.179 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 329.179 Tm [<005100580050004500480055>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 329.179 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 329.179 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 329.179 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 329.179 Tm [<0014>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 329.179 Tm [<000A>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 317.224 Tm [<0009>]TJ
+1.015 0 0 1 116.752 317.224 Tm [<0030>]TJ
+1.02 0 0 1 124.012 317.224 Tm [<004F>]TJ
+1.03 0 0 1 129.682 317.224 Tm [<004D005A>-284<0047>]TJ
+1.02 0 0 1 143.391 317.224 Tm [<0050>]TJ
+1.03 0 0 1 148.523 317.224 Tm [<0053>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.03 0 0 1 155.285 317.224 Tm [<0049004F005C>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.03 0 0 1 170.124 317.224 Tm [<000F000A>-495<0265>]TJ
+1.02 0 0 1 191.508 317.224 Tm [<0046>-286<005400440042>]TJ
+1.03 0 0 1 211.727 317.224 Tm [<004D>]TJ
+1.02 0 0 1 214.354 317.224 Tm [<0046>-286<0042>]TJ
+1.03 0 0 1 226.404 317.224 Tm [<0055>]TJ
+1.02 0 0 1 232.991 317.224 Tm [<00580049>]TJ
+1.03 0 0 1 245.44 317.224 Tm [<004A>]TJ
+1.02 0 0 1 248.169 317.224 Tm [<00440049>-286<0046>]TJ
+1.03 0 0 1 265.238 317.224 Tm [<004D>]TJ
+1.02 0 0 1 267.865 317.224 Tm [<0046004E0046004F>]TJ
+1.03 0 0 1 290.831 317.224 Tm [<0055>]TJ
+1.02 0 0 1 294.505 317.224 Tm [<0054>-286<0042>]TJ
+1.03 0 0 1 306.107 317.224 Tm [<00EA>]TJ
+1.02 0 0 1 312.582 317.224 Tm [<00460044>]TJ
+1.03 0 0 1 321.199 317.224 Tm [<0055>]TJ
+1.02 0 0 1 324.873 317.224 Tm [<00460045>-286<0043>]TJ
+1.03 0 0 1 342.776 317.224 Tm [<005A>-283<0055>]TJ
+1.02 0 0 1 354.104 317.224 Tm [<00490046>]TJ
+1.03 0 0 1 367.078 317.224 Tm [<00550053>]TJ
+1.02 0 0 1 374.6 317.224 Tm [<0042004F0054>]TJ
+1.03 0 0 1 388.959 317.224 Tm [<004A0055004A>]TJ
+1.02 0 0 1 398.091 317.224 Tm [<0050004F>-286<0042>]TJ
+1.03 0 0 1 416.421 317.224 Tm [<0053>]TJ
+1.02 0 0 1 420.269 317.224 Tm [<0046>-286<0045>]TJ
+1.03 0 0 1 432.999 317.224 Tm [<0053>]TJ
+1.02 0 0 1 436.847 317.224 Tm [<00420058004F>-286<0042>]TJ
+1.03 0 0 1 461.568 317.224 Tm [<0055>-284<0055>]TJ
+1.02 0 0 1 471.829 317.224 Tm [<00490046>]TJ
+1 0 0 1 113.386 305.269 Tm [<004300460048004A004F004F004A004F0048>-220<00500047>-220<005500490046>-220<005500530042004F0054004A0055004A0050004F>-220<0009004A0047>-220<004A00550054>-220<004E00500055004A0050004F>-220<004A0054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 290.342 305.269 Tm [<004C0051005A004400550047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 319.156 305.269 Tm [<000A>-220<00500053>-220<00420055>-220<005500490046>-220<0046004F0045>-220<0009004A0047>-220<004A0055>-220<004A0054>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1 0 0 1 407.535 305.269 Tm [<005200580057005A004400550047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 441.151 305.269 Tm [<000A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 72.776 281.358 Tm [<00470058005500440057004C00520051>]TJ
+0 g 0 G
+.8 0 0 rg .8 0 0 RG
+/F7 9.96264 Tf 1 0 0 1 113.386 281.358 Tm [(<)]TJ
+/F123 7.97011 Tf 1 0 0 1 121.135 281.358 Tm [<005100580050004500480055>]TJ
+/F7 9.96264 Tf 1 0 0 1 149.948 281.358 Tm [(>)]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 167.66 281.358 Tm [<0009>]TJ
+/F63 9.96264 Tf 1 0 0 1 170.928 281.358 Tm [<00250046004700420056004D0055001B>]TJ
+/F123 7.97011 Tf 1 0 0 1 204.512 281.358 Tm [<0014>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.314 281.358 Tm [<000A>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 269.403 Tm [<02650046>-220<004D0046004F004800550049>-220<00500047>-220<005500490046>-220<005500530042004F0054004A0055004A0050004F000D>-220<004A004F>-220<0054004600440050004F00450054000F>]TJ
+.8 0 0 rg .8 0 0 RG
+/F90 11.95517 Tf 1 0 0 1 113.386 209.627 Tm [<002A00FE010300F50102010400F900FE00F7>-220<003100250027>-220<00F300FF00F400F5>]TJ
+0 g 0 G
+/F63 9.96264 Tf 1.02 0 0 1 113.386 185.717 Tm [<002D>]TJ
+1.015 0 0 1 118.599 185.717 Tm [<00460044>]TJ
+1.02 0 0 1 126.325 185.717 Tm [<0055>]TJ
+1.015 0 0 1 129.83 185.717 Tm [<0056>]TJ
+1.02 0 0 1 134.755 185.717 Tm [<0053>]TJ
+1.015 0 0 1 138.454 185.717 Tm [<0046>]TJ
+1.02 0 0 1 142.539 185.717 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 148.421 185.717 Tm [<0053>]TJ
+1.015 0 0 1 152.232 185.717 Tm [<0046>]TJ
+1.02 0 0 1 156.732 185.717 Tm [<004D004A>]TJ
+1.015 0 0 1 162.036 185.717 Tm [<00460054>-215<004900460042>]TJ
+1.02 0 0 1 187.376 185.717 Tm [<0057004A004D005A>]TJ
+1.015 0 0 1 204.365 185.717 Tm [<0050004F>-215<0031>]TJ
+1.01 0 0 1 222.828 185.717 Tm [<0025>]TJ
+1.015 0 0 1 229.781 185.717 Tm [<0027>-215<0044005000450046>-216<0042004F0045>-216<0056004F>]TJ
+1.02 0 0 1 287.134 185.717 Tm [<0047>]TJ
+1.015 0 0 1 290.528 185.717 Tm [<0050>]TJ
+1.02 0 0 1 295.634 185.717 Tm [<00530055>]TJ
+1.015 0 0 1 303.083 185.717 Tm [<0056004F0042>]TJ
+1.02 0 0 1 318.656 185.717 Tm [<0055>]TJ
+1.015 0 0 1 322.294 185.717 Tm [<0046>]TJ
+1.02 0 0 1 326.794 185.717 Tm [<004D005A>]TJ
+1.015 0 0 1 336.273 185.717 Tm [<00510045>]TJ
+1.02 0 0 1 346.82 185.717 Tm [<00470035>]TJ
+1 0 0 1 354.315 183.65 Tm [<0026>]TJ
+1.02 0 0 1 358.599 185.717 Tm [<00390008>]TJ
+1.015 0 0 1 366.637 185.717 Tm [<0054>-215<004E0042004F004200480046004E0046004F>]TJ
+1.02 0 0 1 423.476 185.717 Tm [<0055>]TJ
+1.015 0 0 1 429.297 185.717 Tm [<0050>]TJ
+1.02 0 0 1 434.403 185.717 Tm [<0047>]TJ
+1.015 0 0 1 439.98 185.717 Tm [<00540050004E0046>-215<0031>]TJ
+1.01 0 0 1 469.567 185.717 Tm [<0025>]TJ
+1.015 0 0 1 476.52 185.717 Tm [<0027>]TJ
+0.99 0 0 1 113.386 173.762 Tm [<00500043>]TJ
+0.985 0 0 1 123.387 173.762 Tm [<004B>]TJ
+0.99 0 0 1 125.781 173.762 Tm [<00460044>]TJ
+0.985 0 0 1 134.145 173.762 Tm [<0055>]TJ
+0.99 0 0 1 137.658 173.762 Tm [<0054>]TJ
+0.985 0 0 1 143.806 173.762 Tm [<004A>]TJ
+0.99 0 0 1 146.416 173.762 Tm [<0054>]TJ
+0.985 0 0 1 152.564 173.762 Tm [<0047>]TJ
+0.99 0 0 1 155.841 173.762 Tm [<0042>]TJ
+0.985 0 0 1 160.319 173.762 Tm [<0053>-223<00470053>]TJ
+0.99 0 0 1 173.149 173.762 Tm [<0050004E>-222<00500051>]TJ
+0.985 0 0 1 198.46 173.762 Tm [<0055004A>]TJ
+0.99 0 0 1 204.584 173.762 Tm [<004E0042>]TJ
+0.985 0 0 1 217.07 173.762 Tm [<004D000F>]TJ
+0.99 0 0 1 224.911 173.762 Tm [<00240050004F00540046005200560046004F>]TJ
+0.985 0 0 1 269.61 173.762 Tm [<0055004D005A000D>-223<004A0047>-223<005A>]TJ
+0.99 0 0 1 297.38 173.762 Tm [<00500056>-222<00580042004F>]TJ
+0.985 0 0 1 326.45 173.762 Tm [<0055>-223<0055>]TJ
+0.99 0 0 1 335.668 173.762 Tm [<0050>]TJ
+0.985 0 0 1 342.842 173.762 Tm [<004A>]TJ
+0.99 0 0 1 345.452 173.762 Tm [<004F00540046>]TJ
+0.985 0 0 1 359.299 173.762 Tm [<00530055>]TJ
+0.99 0 0 1 368.685 173.762 Tm [<00540050004E0046>-222<0031>]TJ
+0.995 0 0 1 397.606 173.762 Tm [<0025>]TJ
+0.99 0 0 1 404.456 173.762 Tm [<0027>-222<00440050004F0054>]TJ
+0.985 0 0 1 430.3 173.762 Tm [<00550053>]TJ
+0.99 0 0 1 437.493 173.762 Tm [<00560044>]TJ
+0.985 0 0 1 446.676 173.762 Tm [<0055>]TJ
+0.99 0 0 1 450.189 173.762 Tm [<0054>]TJ
+0.985 0 0 1 456.336 173.762 Tm [<0055>]TJ
+0.99 0 0 1 459.849 173.762 Tm [<0049>]TJ
+0.985 0 0 1 465.225 173.762 Tm [<004A>]TJ
+0.99 0 0 1 467.835 173.762 Tm [<004F00480054>]TJ
+0.99 0 0 1 113.386 161.807 Tm [<004E>]TJ
+0.985 0 0 1 121.395 161.807 Tm [<004A>]TJ
+0.99 0 0 1 124.005 161.807 Tm [<00480049>]TJ
+0.985 0 0 1 133.976 161.807 Tm [<0055>]TJ
+0.99 0 0 1 139.68 161.807 Tm [<00480050>-222<0058>]TJ
+0.985 0 0 1 158.155 161.807 Tm [<0053>]TJ
+0.99 0 0 1 161.835 161.807 Tm [<0050004F0048>]TJ
+0.985 0 0 1 176.915 161.807 Tm [<000F>]TJ
+0.99 0 0 1 182.241 161.807 Tm [<00290046004F00440046>]TJ
+0.985 0 0 1 209.898 161.807 Tm [<0055>]TJ
+0.99 0 0 1 213.412 161.807 Tm [<00490046>]TJ
+0.985 0 0 1 225.367 161.807 Tm [<0047>]TJ
+0.99 0 0 1 228.644 161.807 Tm [<0050>]TJ
+0.985 0 0 1 233.625 161.807 Tm [<004D004D>]TJ
+0.99 0 0 1 238.649 161.807 Tm [<00500058>]TJ
+0.985 0 0 1 250.337 161.807 Tm [<004A>]TJ
+0.99 0 0 1 252.947 161.807 Tm [<004F0048>-222<004E00420044>]TJ
+0.985 0 0 1 281.699 161.807 Tm [<0053>]TJ
+0.99 0 0 1 285.379 161.807 Tm [<00500054>]TJ
+0.985 0 0 1 294.315 161.807 Tm [<000D>]TJ
+0.99 0 0 1 298.91 161.807 Tm [<005800490046>]TJ
+0.985 0 0 1 315.381 161.807 Tm [<0053>]TJ
+0.99 0 0 1 319.061 161.807 Tm [<0046>-222<0042>]TJ
+0.985 0 0 1 330.119 161.807 Tm [<0053>]TJ
+0.99 0 0 1 333.799 161.807 Tm [<00480056004E0046004F>]TJ
+0.985 0 0 1 361.504 161.807 Tm [<0055>]TJ
+0.99 0 0 1 365.017 161.807 Tm [<0054>-222<0042>]TJ
+0.985 0 0 1 375.641 161.807 Tm [<0053>]TJ
+0.99 0 0 1 379.321 161.807 Tm [<0046>-222<0042>]TJ
+0.985 0 0 1 390.378 161.807 Tm [<004D>]TJ
+0.99 0 0 1 392.89 161.807 Tm [<00580042>]TJ
+0.985 0 0 1 404.075 161.807 Tm [<005A>]TJ
+0.99 0 0 1 408.609 161.807 Tm [<0054>-222<0046>]TJ
+0.985 0 0 1 419.143 161.807 Tm [<0059>]TJ
+0.99 0 0 1 423.795 161.807 Tm [<00510042004F004500460045>]TJ
+0.985 0 0 1 455.782 161.807 Tm [<004A>]TJ
+0.99 0 0 1 458.392 161.807 Tm [<004E004E0046>]TJ
+0.985 0 0 1 478.799 161.807 Tm [<000E>]TJ
+1 0 0 1 113.386 149.851 Tm [<0045004A004200550046004D005A000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EB01F2>]TJ
+ET
+endstream
+endobj
+251 0 obj <<
+/Type /Page
+/Contents 252 0 R
+/Resources 250 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 237 0 R
+>> endobj
+101 0 obj <<
+/D [251 0 R /XYZ 113.386 651.969 null]
+>> endobj
+253 0 obj <<
+/D [251 0 R /XYZ 113.386 542.888 null]
+>> endobj
+254 0 obj <<
+/D [251 0 R /XYZ 113.386 470.2 null]
+>> endobj
+255 0 obj <<
+/D [251 0 R /XYZ 113.386 422.379 null]
+>> endobj
+256 0 obj <<
+/D [251 0 R /XYZ 113.386 374.559 null]
+>> endobj
+257 0 obj <<
+/D [251 0 R /XYZ 113.386 338.693 null]
+>> endobj
+258 0 obj <<
+/D [251 0 R /XYZ 113.386 290.873 null]
+>> endobj
+259 0 obj <<
+/D [251 0 R /XYZ 113.386 219.142 null]
+>> endobj
+250 0 obj <<
+/Font << /F90 14 0 R /F105 5 0 R /F111 6 0 R /F123 17 0 R /F7 46 0 R /F63 7 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+262 0 obj <<
+/Length 16379
+>>
+stream
+.4 .4 .4 rg .4 .4 .4 RG
+BT
+/F111 7.97011 Tf 1 0 0 1 32.564 640.013 Tm [<003F0044004700470057005200530044004A004800520045004D004800460057>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 640.013 Tm [<001F00460052004700480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 628.058 Tm [<0265004A0054>-220<0042004500450054>]TJ
+/F123 7.97011 Tf 1 0 0 1 153.426 628.058 Tm [<001F00460052004700480021>]TJ
+/F105 9.96264 Tf 1 0 0 1 185.258 628.058 Tm [<00550050>-220<005500490046>-220<0031004200480046>-220<00500043004B004600440055>-220<004700500053>-220<005500490046>-220<00440056005300530046004F0055>-220<0051004200480046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 13.355 604.148 Tm [<003F00440047004700570052004800440046004B00530044004A004800520045004D004800460057>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 604.148 Tm [<001F00460052004700480021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 592.193 Tm [<0265004A>]TJ
+1.02 0 0 1 126.531 592.193 Tm [<0054>-220<0042004500450054>]TJ
+/F123 7.97011 Tf 1.03 0 0 1 154.353 592.193 Tm [<001F>]TJ
+1.02 0 0 1 159.3 592.193 Tm [<0046005200470048>]TJ
+1.03 0 0 1 178.893 592.193 Tm [<0021>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 186.902 592.193 Tm [<0055>]TJ
+1.02 0 0 1 190.575 592.193 Tm [<0050>]TJ
+1.03 0 0 1 197.942 592.193 Tm [<0055>]TJ
+1.02 0 0 1 201.616 592.193 Tm [<00490046>-220<0031004200480046>-219<00500043>]TJ
+1.03 0 0 1 245.881 592.193 Tm [<004B>]TJ
+1.02 0 0 1 248.384 592.193 Tm [<00460044>]TJ
+1.03 0 0 1 257.002 592.193 Tm [<0055>-217<0047>]TJ
+1.02 0 0 1 266.338 592.193 Tm [<0050>]TJ
+1.03 0 0 1 271.47 592.193 Tm [<0053>]TJ
+1.02 0 0 1 277.553 592.193 Tm [<0042>]TJ
+1.03 0 0 1 282.167 592.193 Tm [<004D004D>]TJ
+1.02 0 0 1 289.656 592.193 Tm [<00510042004800460054>]TJ
+1.03 0 0 1 312.906 592.193 Tm [<000F>-297<0265004A>]TJ
+1.02 0 0 1 331.618 592.193 Tm [<0054>-220<00440050004E004E0042004F0045>-219<0042004F0045>]TJ
+1.03 0 0 1 399.285 592.193 Tm [<0055>]TJ
+1.02 0 0 1 402.959 592.193 Tm [<00490046>-219<0051>]TJ
+1.03 0 0 1 420.559 592.193 Tm [<0053>]TJ
+1.02 0 0 1 424.407 592.193 Tm [<0046>]TJ
+1.03 0 0 1 428.929 592.193 Tm [<0057004A>]TJ
+1.02 0 0 1 436.512 592.193 Tm [<005000560054>-220<0050004F0046>]TJ
+1.03 0 0 1 470.879 592.193 Tm [<00EB004D004D>]TJ
+1.03 0 0 1 113.386 580.238 Tm [<0055>]TJ
+1.02 0 0 1 117.059 580.238 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 129.589 580.238 Tm [<003F>]TJ
+1.02 0 0 1 134.535 580.238 Tm [<00530047>]TJ
+1.03 0 0 1 144.332 580.238 Tm [<0049>]TJ
+1.02 0 0 1 149.278 580.238 Tm [<00530044004A00480044>]TJ
+1.03 0 0 1 173.77 580.238 Tm [<005700570055>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 191.078 580.238 Tm [<0055>]TJ
+1.02 0 0 1 194.752 580.238 Tm [<0050004C0046004F>]TJ
+1.03 0 0 1 217.616 580.238 Tm [<004D004A>]TJ
+1.02 0 0 1 222.973 580.238 Tm [<0054>]TJ
+1.03 0 0 1 227.048 580.238 Tm [<0055000D>]TJ
+1.02 0 0 1 235.774 580.238 Tm [<00580049>]TJ
+1.03 0 0 1 248.222 580.238 Tm [<004A>]TJ
+1.02 0 0 1 250.952 580.238 Tm [<00440049>-243<0042>]TJ
+1.03 0 0 1 267.668 580.238 Tm [<00470055>]TJ
+1.02 0 0 1 274.769 580.238 Tm [<0046>]TJ
+1.03 0 0 1 279.291 580.238 Tm [<0053>]TJ
+1.02 0 0 1 285.608 580.238 Tm [<0046004200440049>-243<00540049>]TJ
+1.03 0 0 1 316.46 580.238 Tm [<004A>]TJ
+1.02 0 0 1 319.189 580.238 Tm [<005100500056>]TJ
+1.03 0 0 1 334.991 580.238 Tm [<0055>-240<004A>]TJ
+1.02 0 0 1 343.863 580.238 Tm [<0054>-243<0046004E0051>]TJ
+1.03 0 0 1 368.485 580.238 Tm [<0055004A>]TJ
+1.02 0 0 1 374.889 580.238 Tm [<00460045>-242<0050>]TJ
+1.03 0 0 1 392.306 580.238 Tm [<0047>]TJ
+1.02 0 0 1 398.203 580.238 Tm [<004E0042>]TJ
+1.03 0 0 1 411.067 580.238 Tm [<0055>]TJ
+1.02 0 0 1 414.741 580.238 Tm [<0046>]TJ
+1.03 0 0 1 419.263 580.238 Tm [<0053004A>]TJ
+1.02 0 0 1 425.841 580.238 Tm [<0042>]TJ
+1.03 0 0 1 430.454 580.238 Tm [<004D>]TJ
+1.02 0 0 1 435.55 580.238 Tm [<00420045004500460045>-243<0058>]TJ
+1.03 0 0 1 469.948 580.238 Tm [<004A0055>]TJ
+1.02 0 0 1 476.352 580.238 Tm [<0049>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 568.282 Tm [<003F0044004700470057005200530044004A004800520045004D004800460057>]TJ
+/F105 9.96264 Tf 1 0 0 1 190.223 568.282 Tm [<000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 18.157 544.372 Tm [<003F0044004700470057005200530044004A0048005500480056005200580055004600480056>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 544.372 Tm [<001F00460052004700480021>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 113.386 532.417 Tm [<0265004A>]TJ
+0.98 0 0 1 125.829 532.417 Tm [<0054>-227<0042004500450054>]TJ
+/F123 7.97011 Tf 0.975 0 0 1 152.716 532.417 Tm [<001F>]TJ
+0.98 0 0 1 157.398 532.417 Tm [<0046005200470048>]TJ
+0.975 0 0 1 176.223 532.417 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 183.957 532.417 Tm [<0055>]TJ
+0.98 0 0 1 187.435 532.417 Tm [<0050>]TJ
+0.975 0 0 1 194.59 532.417 Tm [<0055>]TJ
+0.98 0 0 1 198.068 532.417 Tm [<00490046>-227<00330046005400500056>]TJ
+0.975 0 0 1 234.162 532.417 Tm [<0053>]TJ
+0.98 0 0 1 237.805 532.417 Tm [<004400460054>-227<0045>]TJ
+0.975 0 0 1 257.311 532.417 Tm [<004A>]TJ
+0.98 0 0 1 259.895 532.417 Tm [<0044>]TJ
+0.975 0 0 1 263.83 532.417 Tm [<0055004A>]TJ
+0.98 0 0 1 269.891 532.417 Tm [<0050004F0042>]TJ
+0.975 0 0 1 284.702 532.417 Tm [<0053005A>-229<0047>]TJ
+0.98 0 0 1 298.302 532.417 Tm [<0050>]TJ
+0.975 0 0 1 303.232 532.417 Tm [<0053>]TJ
+0.98 0 0 1 309.1 532.417 Tm [<0042>]TJ
+0.975 0 0 1 313.533 532.417 Tm [<004D004D>]TJ
+0.98 0 0 1 320.731 532.417 Tm [<00510042004800460054>]TJ
+0.975 0 0 1 343.07 532.417 Tm [<000F>-311<0265004A>]TJ
+0.98 0 0 1 360.915 532.417 Tm [<0054>-228<0056005400460054>]TJ
+0.975 0 0 1 386.611 532.417 Tm [<0055>]TJ
+0.98 0 0 1 390.088 532.417 Tm [<00490046>]TJ
+/F111 7.97011 Tf 0.975 0 0 1 401.979 532.417 Tm [<003F>]TJ
+0.98 0 0 1 406.662 532.417 Tm [<00530047>]TJ
+0.975 0 0 1 416.074 532.417 Tm [<0049>]TJ
+0.98 0 0 1 420.756 532.417 Tm [<00530044004A0048>]TJ
+0.975 0 0 1 439.581 532.417 Tm [<0055>]TJ
+0.98 0 0 1 444.264 532.417 Tm [<0048005600520058>]TJ
+0.975 0 0 1 463.089 532.417 Tm [<0055>]TJ
+0.98 0 0 1 467.771 532.417 Tm [<004600480056>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 113.386 520.462 Tm [<0055>]TJ
+1.02 0 0 1 117.059 520.462 Tm [<0050004C0046004F>]TJ
+1.03 0 0 1 139.836 520.462 Tm [<004D004A>]TJ
+1.02 0 0 1 145.193 520.462 Tm [<0054>]TJ
+1.03 0 0 1 149.268 520.462 Tm [<0055000F>]TJ
+1.02 0 0 1 158.948 520.462 Tm [<00270050>]TJ
+1.03 0 0 1 169.476 520.462 Tm [<0053>-232<0055>]TJ
+1.02 0 0 1 179.379 520.462 Tm [<00490046>-234<0031>]TJ
+1.03 0 0 1 197.38 520.462 Tm [<0053>]TJ
+1.02 0 0 1 201.228 520.462 Tm [<005000510046>]TJ
+1.03 0 0 1 216.187 520.462 Tm [<00530055004A>]TJ
+1.02 0 0 1 226.438 520.462 Tm [<00460054>]TJ
+1.03 0 0 1 235.035 520.462 Tm [<000D>]TJ
+1.02 0 0 1 239.978 520.462 Tm [<0034004900420045>]TJ
+1.03 0 0 1 260.424 520.462 Tm [<004A>]TJ
+1.02 0 0 1 263.154 520.462 Tm [<004F0048>-234<0042004F0045>-234<0026>]TJ
+1.03 0 0 1 299.541 520.462 Tm [<00590055>]TJ
+1.015 0 0 1 308.079 520.462 Tm [<0028>]TJ
+1.02 0 0 1 314.803 520.462 Tm [<0034>]TJ
+1.03 0 0 1 319.803 520.462 Tm [<0055>]TJ
+1.02 0 0 1 323.477 520.462 Tm [<0042>]TJ
+1.03 0 0 1 328.09 520.462 Tm [<0055>]TJ
+1.02 0 0 1 331.764 520.462 Tm [<0046>]TJ
+1.03 0 0 1 338.668 520.462 Tm [<0053>]TJ
+1.02 0 0 1 342.516 520.462 Tm [<0046005400500056>]TJ
+1.03 0 0 1 361.61 520.462 Tm [<0053>]TJ
+1.02 0 0 1 365.458 520.462 Tm [<004400460054>]TJ
+1.03 0 0 1 378.15 520.462 Tm [<000D>-236<0055>]TJ
+1.02 0 0 1 386.767 520.462 Tm [<00490046>]TJ
+1.03 0 0 1 399.21 520.462 Tm [<0047>]TJ
+1.02 0 0 1 402.637 520.462 Tm [<0050>]TJ
+1.03 0 0 1 407.769 520.462 Tm [<004D004D>]TJ
+1.02 0 0 1 413.023 520.462 Tm [<00500058>]TJ
+1.03 0 0 1 425.064 520.462 Tm [<004A>]TJ
+1.02 0 0 1 427.794 520.462 Tm [<004F0048>-234<00440050004E004E0042004F0045>]TJ
+1 0 0 1 113.386 508.506 Tm [<0054004900500056004D0045>-220<00430046>-220<0056005400460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 42.169 484.596 Tm [<003F0044004700470053005500520053004800550057004C00480056>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 484.596 Tm [<001F00510044005000480021001F00520045004D004800460057>-603<0051005800500045004800550021>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 113.386 472.641 Tm [<002E004200510054>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 136.776 472.641 Tm [<001F>]TJ
+0.98 0 0 1 141.434 472.641 Tm [<0051004400500048>]TJ
+0.97 0 0 1 160.259 472.641 Tm [<0021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 167.205 472.641 Tm [<0055>]TJ
+0.98 0 0 1 170.665 472.641 Tm [<0050>]TJ
+/F123 7.97011 Tf 0.97 0 0 1 177.056 472.641 Tm [<001F>]TJ
+0.98 0 0 1 181.715 472.641 Tm [<00520045>]TJ
+0.97 0 0 1 191.127 472.641 Tm [<004D>]TJ
+0.98 0 0 1 195.785 472.641 Tm [<00480046>]TJ
+0.97 0 0 1 205.198 472.641 Tm [<0057>]TJ
+0.98 0 0 1 214.658 472.641 Tm [<00510058005000450048>]TJ
+0.97 0 0 1 238.19 472.641 Tm [<00550021>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 249.794 472.641 Tm [<004A>]TJ
+0.98 0 0 1 252.365 472.641 Tm [<004F>]TJ
+0.97 0 0 1 259.274 472.641 Tm [<0055>]TJ
+0.98 0 0 1 262.734 472.641 Tm [<00490046>-149<0031>]TJ
+0.97 0 0 1 279.201 472.641 Tm [<0053>]TJ
+0.98 0 0 1 282.825 472.641 Tm [<005000510046>]TJ
+0.97 0 0 1 297.197 472.641 Tm [<00530055004A>]TJ
+0.98 0 0 1 306.851 472.641 Tm [<00460054>-149<0045>]TJ
+0.97 0 0 1 321.659 472.641 Tm [<004A>]TJ
+0.98 0 0 1 324.229 472.641 Tm [<0044>]TJ
+0.97 0 0 1 328.164 472.641 Tm [<0055004A>]TJ
+0.98 0 0 1 334.194 472.641 Tm [<0050004F0042>]TJ
+0.97 0 0 1 349.005 472.641 Tm [<0053005A>]TJ
+0.98 0 0 1 358.555 472.641 Tm [<0050>]TJ
+0.97 0 0 1 363.485 472.641 Tm [<0047>-151<0055>]TJ
+0.98 0 0 1 371.634 472.641 Tm [<00490046>-149<00440056>]TJ
+0.97 0 0 1 391.85 472.641 Tm [<00530053>]TJ
+0.98 0 0 1 399.098 472.641 Tm [<0046004F>]TJ
+0.97 0 0 1 408.891 472.641 Tm [<0055>]TJ
+0.98 0 0 1 413.812 472.641 Tm [<0051004200480046>]TJ
+0.97 0 0 1 432.235 472.641 Tm [<0008>]TJ
+0.98 0 0 1 434.187 472.641 Tm [<0054>-149<00330046005400500056>]TJ
+0.97 0 0 1 463.767 472.641 Tm [<0053>]TJ
+0.98 0 0 1 467.391 472.641 Tm [<004400460054>]TJ
+0.97 0 0 1 479.585 472.641 Tm [<000F>]TJ
+1 0 0 1 113.386 460.686 Tm [<002700500053>-220<004A004F005400550042004F00440046000D>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 436.775 Tm [<003F0044004700470053005500520053004800550057004C00480056005E0049005200520060005E00160060>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 412.865 Tm [<00510053005000450056004400460054>-220<005500490046>-220<00470050004D004D00500058004A004F0048>-220<004A004F>-220<005500490046>-220<005100420048004600080054>-220<003300460054005000560053004400460054001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 388.955 Tm [<001100110011>]TJ
+1 0 0 1 113.386 377 Tm [<00120033005500520053004800550057004C004800560003001F001F00030011001100110003001200490052005200030016>-1<00030013000300350003001100110011000300210021>]TJ
+1 0 0 1 113.386 365.044 Tm [<001100110011>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+1 0 0 1 56.575 341.134 Tm [<003F0044004700470056004B00440047004C0051004A>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 341.134 Tm [<001F00510044005000480021001F00520045004D004800460057>-603<0051005800500045004800550021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 113.386 329.179 Tm [<00340042004E0046>-256<00420054>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 149.679 329.179 Tm [<003F>]TJ
+1.02 0 0 1 154.625 329.179 Tm [<0044004700470053>]TJ
+1.03 0 0 1 174.219 329.179 Tm [<0055>]TJ
+1.02 0 0 1 179.165 329.179 Tm [<005200530048>]TJ
+1.03 0 0 1 193.86 329.179 Tm [<00550057004C>]TJ
+1.02 0 0 1 208.699 329.179 Tm [<00480056>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 218.496 329.179 Tm [<000D>]TJ
+1.02 0 0 1 223.723 329.179 Tm [<00430056>]TJ
+1.03 0 0 1 234.261 329.179 Tm [<0055>-254<0047>]TJ
+1.02 0 0 1 243.971 329.179 Tm [<0050>]TJ
+1.03 0 0 1 249.103 329.179 Tm [<0053>-254<0055>]TJ
+1.02 0 0 1 259.234 329.179 Tm [<00490046>-256<0034004900420045>]TJ
+1.03 0 0 1 292.349 329.179 Tm [<004A>]TJ
+1.02 0 0 1 295.078 329.179 Tm [<004F0048>-256<0045>]TJ
+1.03 0 0 1 313.387 329.179 Tm [<004A>]TJ
+1.02 0 0 1 316.117 329.179 Tm [<0044>]TJ
+1.03 0 0 1 320.212 329.179 Tm [<0055004A>]TJ
+1.02 0 0 1 326.615 329.179 Tm [<0050004F0042>]TJ
+1.03 0 0 1 342.031 329.179 Tm [<0053005A000F>]TJ
+1.015 0 0 1 357.308 329.179 Tm [<0022>]TJ
+1.02 0 0 1 363.436 329.179 Tm [<004F0045>]TJ
+1.03 0 0 1 377.009 329.179 Tm [<0055>]TJ
+1.02 0 0 1 380.683 329.179 Tm [<0049>]TJ
+1.03 0 0 1 386.221 329.179 Tm [<004A>]TJ
+1.02 0 0 1 388.951 329.179 Tm [<0054>]TJ
+1.03 0 0 1 395.635 329.179 Tm [<004A>]TJ
+1.02 0 0 1 398.364 329.179 Tm [<0054>-256<00420045004500460045>]TJ
+1.03 0 0 1 432.676 329.179 Tm [<0055>]TJ
+1.02 0 0 1 436.349 329.179 Tm [<0050>-256<0042>]TJ
+1.03 0 0 1 448.704 329.179 Tm [<004D004D>]TJ
+1.02 0 0 1 456.567 329.179 Tm [<00510042004800460054>]TJ
+1.03 0 0 1 479.817 329.179 Tm [<0008>]TJ
+1 0 0 1 113.386 317.224 Tm [<003300460054005000560053004400460054000D>-220<004F00500055>-220<004B005600540055>-220<005500490046>-220<00440056005300530046004F0055>-220<0050004F0046000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 61.378 293.313 Tm [<003F004400470047004A00560057004400570048>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 293.313 Tm [<001F00510044005000480021001F00520045004D004800460057>-603<0051005800500045004800550021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 281.358 Tm [<00340042004E0046>-220<00420054>]TJ
+/F111 7.97011 Tf 1 0 0 1 148.235 281.358 Tm [<003F0044004700470056004B00440047004C0051004A>]TJ
+/F105 9.96264 Tf 1 0 0 1 201.06 281.358 Tm [<000D>-220<004300560055>-220<004700500053>-220<005500490046>-220<002600590055002800340055004200550046>-220<0045004A00440055004A0050004F00420053005A000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 75.785 257.448 Tm [<003F00440047004700320026002A>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 257.448 Tm [<001F00520045004D004800460057>-602<00510058005000450048>-1<00550021>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 113.386 245.493 Tm [<0022>]TJ
+1.015 0 0 1 119.484 245.493 Tm [<004500450054>]TJ
+1.02 0 0 1 136.254 245.493 Tm [<0055>]TJ
+1.015 0 0 1 139.892 245.493 Tm [<00490046>]TJ
+1.01 0 0 1 152.082 245.493 Tm [<0030>]TJ
+1.015 0 0 1 159.307 245.493 Tm [<0051>]TJ
+1.02 0 0 1 164.586 245.493 Tm [<0055004A>]TJ
+1.015 0 0 1 170.927 245.493 Tm [<0050004F0042>]TJ
+1.02 0 0 1 186.267 245.493 Tm [<004D>]TJ
+1.015 0 0 1 191.047 245.493 Tm [<00240050004F>]TJ
+1.02 0 0 1 207.712 245.493 Tm [<0055>]TJ
+1.015 0 0 1 211.35 245.493 Tm [<0046004F>]TJ
+1.02 0 0 1 221.492 245.493 Tm [<0055>]TJ
+1.01 0 0 1 227.309 245.493 Tm [<0028>]TJ
+1.02 0 0 1 234.001 245.493 Tm [<0053>]TJ
+1.015 0 0 1 237.811 245.493 Tm [<005000560051>]TJ
+/F123 7.97011 Tf 1.02 0 0 1 255.715 245.493 Tm [<001F>]TJ
+1.015 0 0 1 260.613 245.493 Tm [<00520045>]TJ
+1.02 0 0 1 270.362 245.493 Tm [<004D>]TJ
+1.015 0 0 1 275.26 245.493 Tm [<00480046>]TJ
+1.02 0 0 1 285.009 245.493 Tm [<0057>]TJ
+1.015 0 0 1 294.71 245.493 Tm [<00510058005000450048>]TJ
+1.02 0 0 1 319.081 245.493 Tm [<00550021>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 331.884 245.493 Tm [<0055>]TJ
+1.015 0 0 1 335.522 245.493 Tm [<0050>]TJ
+1.02 0 0 1 342.808 245.493 Tm [<0055>]TJ
+1.015 0 0 1 346.446 245.493 Tm [<00490046>-215<0045005000440056004E0046004F>]TJ
+1.02 0 0 1 396.778 245.493 Tm [<00550008>]TJ
+1.015 0 0 1 402.469 245.493 Tm [<0054>-215<00440042>]TJ
+1.02 0 0 1 417.369 245.493 Tm [<0055>]TJ
+1.015 0 0 1 421.007 245.493 Tm [<0042>]TJ
+1.02 0 0 1 425.598 245.493 Tm [<004D>]TJ
+1.015 0 0 1 428.199 245.493 Tm [<00500048>]TJ
+1.02 0 0 1 438.018 245.493 Tm [<000D>]TJ
+1.015 0 0 1 442.69 245.493 Tm [<0058>]TJ
+1.02 0 0 1 449.566 245.493 Tm [<004A0055>]TJ
+1.015 0 0 1 455.907 245.493 Tm [<0049>-215<0043004200540046>]TJ
+1 0 0 1 113.386 233.538 Tm [<00540055004200550046>]TJ
+/F90 9.96264 Tf 1 0 0 1 135.662 233.538 Tm [<00FF00F600F6>]TJ
+/F105 9.96264 Tf 1 0 0 1 151.144 233.538 Tm [<000F>-293<002A0055>-220<004A0054>-220<0042004D00540050>-220<005500560053004F00460045>-220<005000EA>-220<005800490046004F>-220<0050004F0046>-220<004200530053004A005700460054>-220<0050004F>-220<005500490046>-220<0051004200480046>-220<00580049004600530046>-220<004A005500080054>-220<004300460046004F>-220<00420045004500460045000F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 42.169 209.627 Tm [<003F0044004700470059004C0056004C0045004F004800320026002A>]TJ
+0 g 0 G
+/F123 7.97011 Tf 1 0 0 1 113.386 209.627 Tm [<001F00520045004D004800460057>-602<00510058005000450048>-1<00550021>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 197.672 Tm [<00340042004E0046>-220<00420054>]TJ
+/F111 7.97011 Tf 1 0 0 1 148.235 197.672 Tm [<003F00440047004700320026002A>]TJ
+/F105 9.96264 Tf 1 0 0 1 181.851 197.672 Tm [<000D>-220<004600590044004600510055>-220<0043004200540046>-220<00540055004200550046>-220<004A0054>]TJ
+/F90 9.96264 Tf 1 0 0 1 266.374 197.672 Tm [<00FF00FE>]TJ
+/F105 9.96264 Tf 1 0 0 1 278.598 197.672 Tm [<000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EC01E9>]TJ
+ET
+endstream
+endobj
+261 0 obj <<
+/Type /Page
+/Contents 262 0 R
+/Resources 260 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 237 0 R
+>> endobj
+260 0 obj <<
+/Font << /F111 6 0 R /F123 17 0 R /F105 5 0 R /F90 14 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+267 0 obj <<
+/Length 25746
+>>
+stream
+.8 0 0 rg .8 0 0 RG
+BT
+/F90 11.95517 Tf 1 0 0 1 113.386 640.013 Tm [<002500F500FD00FF00FE01030104010200F1010400F900FF00FE0103>]TJ
+0 g 0 G
+ET
+q
+0.254809 0 0 0.254809 344.654 496.551 cm
+/Im1 Do
+Q
+BT
+/F105 9.96264 Tf 1.03 0 0 1 113.386 604.148 Tm [<0265>]TJ
+1.02 0 0 1 123.801 604.148 Tm [<0046>-216<0051>]TJ
+1.03 0 0 1 135.83 604.148 Tm [<0053>]TJ
+1.02 0 0 1 139.678 604.148 Tm [<004600540046004F>]TJ
+1.03 0 0 1 158.467 604.148 Tm [<0055>]TJ
+1.02 0 0 1 164.343 604.148 Tm [<0045005000440056004E0046004F>]TJ
+1.03 0 0 1 202.674 604.148 Tm [<0055>]TJ
+1.02 0 0 1 206.347 604.148 Tm [<0042>]TJ
+1.03 0 0 1 210.961 604.148 Tm [<0055004A>]TJ
+1.02 0 0 1 217.364 604.148 Tm [<0050004F>-216<004E>]TJ
+1.03 0 0 1 238.62 604.148 Tm [<004A>]TJ
+1.02 0 0 1 241.349 604.148 Tm [<00480049>]TJ
+1.03 0 0 1 251.623 604.148 Tm [<0055>]TJ
+1.02 0 0 1 257.498 604.148 Tm [<00420051005100460042>]TJ
+1.03 0 0 1 281.857 604.148 Tm [<0053>]TJ
+1.02 0 0 1 287.907 604.148 Tm [<00420054>-216<0042>-217<00450056>]TJ
+1.03 0 0 1 316.273 604.148 Tm [<004D004D>-214<004D004A>]TJ
+1.02 0 0 1 329.085 604.148 Tm [<0054>]TJ
+1.03 0 0 1 333.16 604.148 Tm [<0055>]TJ
+1.02 0 0 1 113.386 592.193 Tm [<0050>]TJ
+1.025 0 0 1 118.518 592.193 Tm [<0047>]TJ
+1.02 0 0 1 124.129 592.193 Tm [<0042>]TJ
+1.025 0 0 1 128.742 592.193 Tm [<005500550053004A>]TJ
+1.02 0 0 1 142.6 592.193 Tm [<00430056>]TJ
+1.025 0 0 1 153.137 592.193 Tm [<0055>]TJ
+1.02 0 0 1 156.793 592.193 Tm [<00460054>]TJ
+1.025 0 0 1 165.39 592.193 Tm [<000F>-288<0265>]TJ
+1.02 0 0 1 181.206 592.193 Tm [<0042>]TJ
+1.025 0 0 1 185.819 592.193 Tm [<00550008>]TJ
+1.02 0 0 1 191.538 592.193 Tm [<0054>-216<00580049>]TJ
+1.025 0 0 1 210.262 592.193 Tm [<005A>-215<004A0055>-215<004A>]TJ
+1.02 0 0 1 228.469 592.193 Tm [<0054>-216<0045>]TJ
+1.025 0 0 1 240.039 592.193 Tm [<004A>]TJ
+1.02 0 0 1 242.755 592.193 Tm [<0054>]TJ
+1.025 0 0 1 246.83 592.193 Tm [<00550053004A>]TJ
+1.02 0 0 1 257.031 592.193 Tm [<00430056>]TJ
+1.025 0 0 1 267.569 592.193 Tm [<0055>]TJ
+1.02 0 0 1 271.225 592.193 Tm [<00460045>-216<0058>]TJ
+1.025 0 0 1 290.152 592.193 Tm [<004A0055>]TJ
+1.02 0 0 1 296.524 592.193 Tm [<0049>-216<0042>]TJ
+1.025 0 0 1 311.077 592.193 Tm [<0037004A>]TJ
+1.02 0 0 1 320.165 592.193 Tm [<005400560042>]TJ
+1.025 0 0 1 334.219 592.193 Tm [<004D>]TJ
+0.99 0 0 1 113.386 580.238 Tm [<0025>]TJ
+0.985 0 0 1 120.201 580.238 Tm [<005000440056004E0046004F>]TJ
+0.98 0 0 1 152.104 580.238 Tm [<0055>]TJ
+0.985 0 0 1 155.599 580.238 Tm [<0042>]TJ
+0.98 0 0 1 160.054 580.238 Tm [<0055004A>]TJ
+0.985 0 0 1 166.147 580.238 Tm [<0050004F>]TJ
+0.98 0 0 1 178.93 580.238 Tm [<0009>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 182.132 580.238 Tm [<002F>]TJ
+0.985 0 0 1 186.838 580.238 Tm [<00480046>]TJ
+0.98 0 0 1 196.299 580.238 Tm [<0057>]TJ
+0.985 0 0 1 201.005 580.238 Tm [<0058>]TJ
+0.98 0 0 1 205.735 580.238 Tm [<0055>]TJ
+0.985 0 0 1 210.441 580.238 Tm [<0048>]TJ
+0.98 0 0 1 215.172 580.238 Tm [<0055>]TJ
+0.99 0 0 1 219.878 580.238 Tm [<0027>]TJ
+0.985 0 0 1 224.632 580.238 Tm [<004800500052>]TJ
+0.98 0 0 1 238.823 580.238 Tm [<00100039004C>]TJ
+0.985 0 0 1 252.942 580.238 Tm [<005600580044>]TJ
+0.98 0 0 1 267.133 580.238 Tm [<004F>]TJ
+0.99 0 0 1 271.839 580.238 Tm [<0027>]TJ
+0.985 0 0 1 276.593 580.238 Tm [<00520046>]TJ
+0.98 0 0 1 286.054 580.238 Tm [<0011>]TJ
+0.985 0 0 1 290.76 580.238 Tm [<00530047>]TJ
+0.98 0 0 1 300.22 580.238 Tm [<0049>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 304.927 580.238 Tm [<000A000D>]TJ
+0.985 0 0 1 312.912 580.238 Tm [<00580049>]TJ
+0.98 0 0 1 324.934 580.238 Tm [<004A>]TJ
+0.985 0 0 1 327.531 580.238 Tm [<00440049>]TJ
+1.03 0 0 1 113.386 568.282 Tm [<004A>]TJ
+1.02 0 0 1 116.115 568.282 Tm [<0054004F>]TJ
+1.03 0 0 1 125.861 568.282 Tm [<00080055>-220<0053>]TJ
+1.02 0 0 1 137.719 568.282 Tm [<00460042>]TJ
+1.03 0 0 1 146.854 568.282 Tm [<004D004D005A>]TJ
+1.02 0 0 1 159.113 568.282 Tm [<0042>-222<00450046004E0050004F0054>]TJ
+1.03 0 0 1 198.935 568.282 Tm [<00550053>]TJ
+1.02 0 0 1 206.457 568.282 Tm [<0042>]TJ
+1.03 0 0 1 211.07 568.282 Tm [<0055004A>]TJ
+1.02 0 0 1 217.473 568.282 Tm [<0050004F>]TJ
+1.03 0 0 1 228.275 568.282 Tm [<000D>-222<004A>]TJ
+1.02 0 0 1 235.801 568.282 Tm [<004F>]TJ
+1.03 0 0 1 243.735 568.282 Tm [<0055>]TJ
+1.02 0 0 1 247.408 568.282 Tm [<00490046>-222<00540046004F00540046>]TJ
+1.03 0 0 1 284.86 568.282 Tm [<0055>]TJ
+1.02 0 0 1 288.534 568.282 Tm [<00490042>]TJ
+1.03 0 0 1 298.685 568.282 Tm [<0055>-220<004A0055>-221<004A>]TJ
+1.02 0 0 1 316.019 568.282 Tm [<0054>-222<004F0050>]TJ
+1.03 0 0 1 333.16 568.282 Tm [<0055>]TJ
+1.02 0 0 1 113.386 556.327 Tm [<00540056005100510050005400460045>]TJ
+1.025 0 0 1 154.628 556.327 Tm [<0055>]TJ
+1.02 0 0 1 158.284 556.327 Tm [<0050>-213<00430046>-214<0042004F>]TJ
+1.025 0 0 1 189.903 556.327 Tm [<004A>]TJ
+1.02 0 0 1 192.619 556.327 Tm [<004E00420048>]TJ
+1.025 0 0 1 210.219 556.327 Tm [<004A>]TJ
+1.02 0 0 1 212.936 556.327 Tm [<004F0042>]TJ
+1.025 0 0 1 223.219 556.327 Tm [<0053005A>]TJ
+1.02 0 0 1 233.936 556.327 Tm [<0051>]TJ
+1.025 0 0 1 239.241 556.327 Tm [<0053>]TJ
+1.02 0 0 1 243.07 556.327 Tm [<004600540046004F>]TJ
+1.025 0 0 1 261.859 556.327 Tm [<0055>]TJ
+1.02 0 0 1 265.515 556.327 Tm [<0042>]TJ
+1.025 0 0 1 270.129 556.327 Tm [<0055004A>]TJ
+1.02 0 0 1 276.501 556.327 Tm [<0050004F>-213<00430056>]TJ
+1.025 0 0 1 300.01 556.327 Tm [<0055>]TJ
+1.02 0 0 1 305.836 556.327 Tm [<0042>]TJ
+1.025 0 0 1 312.619 556.327 Tm [<0057004A>]TJ
+1.02 0 0 1 320.165 556.327 Tm [<005400560042>]TJ
+1.025 0 0 1 334.219 556.327 Tm [<004D>]TJ
+1.02 0 0 1 113.386 544.372 Tm [<0045>]TJ
+1.03 0 0 1 118.68 544.372 Tm [<004A>]TJ
+1.02 0 0 1 121.41 544.372 Tm [<00540051>]TJ
+1.03 0 0 1 130.789 544.372 Tm [<004D>]TJ
+1.02 0 0 1 133.416 544.372 Tm [<0042>]TJ
+1.03 0 0 1 138.03 544.372 Tm [<005A>]TJ
+1.02 0 0 1 145.263 544.372 Tm [<0050>]TJ
+1.03 0 0 1 150.394 544.372 Tm [<0047>]TJ
+1.02 0 0 1 156.314 544.372 Tm [<004E0042004F>]TJ
+1.03 0 0 1 174.849 544.372 Tm [<005A>-242<0047>]TJ
+1.02 0 0 1 185.509 544.372 Tm [<00460042>]TJ
+1.03 0 0 1 194.645 544.372 Tm [<0055>]TJ
+1.02 0 0 1 198.319 544.372 Tm [<0056>]TJ
+1.03 0 0 1 203.684 544.372 Tm [<0053>]TJ
+1.02 0 0 1 207.532 544.372 Tm [<00460054>-245<0050>]TJ
+1.03 0 0 1 223.753 544.372 Tm [<0047>]TJ
+/F63 9.96264 Tf 1.03 0 0 1 229.672 544.372 Tm [<002D>]TJ
+1.02 0 0 1 234.937 544.372 Tm [<00460044>]TJ
+1.03 0 0 1 242.7 544.372 Tm [<0055>]TJ
+1.02 0 0 1 246.24 544.372 Tm [<0056>]TJ
+1.03 0 0 1 251.189 544.372 Tm [<0053>]TJ
+1.02 0 0 1 254.924 544.372 Tm [<0046>]TJ
+1.03 0 0 1 259.03 544.372 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 262.765 544.372 Tm [<000F>-372<0265>]TJ
+1.02 0 0 1 279.518 544.372 Tm [<00560054>-245<00440050004E004E0042004F00450054>]TJ
+0.985 0 0 1 113.386 532.417 Tm [<0042004F0045>-223<0042>]TJ
+0.98 0 0 1 135.079 532.417 Tm [<005500550053004A>]TJ
+0.985 0 0 1 148.328 532.417 Tm [<00430056>]TJ
+0.98 0 0 1 158.504 532.417 Tm [<0055>]TJ
+0.985 0 0 1 162 532.417 Tm [<00460054>-223<00440042004F>-224<004E0042004C0046>-223<00540046004F00540046>-224<0042>]TJ
+0.98 0 0 1 241.187 532.417 Tm [<0055>]TJ
+0.985 0 0 1 246.877 532.417 Tm [<0050004F00440046>]TJ
+0.98 0 0 1 265.63 532.417 Tm [<000F>]TJ
+0.99 0 0 1 270.952 532.417 Tm [<0030>]TJ
+0.985 0 0 1 278.033 532.417 Tm [<004F0046>-223<0054004900500056>]TJ
+0.98 0 0 1 309.491 532.417 Tm [<004D>]TJ
+0.985 0 0 1 311.99 532.417 Tm [<0045>-223<004F0046>]TJ
+0.98 0 0 1 329.14 532.417 Tm [<0057000E>]TJ
+1.015 0 0 1 113.386 520.462 Tm [<0046>]TJ
+1.025 0 0 1 117.886 520.462 Tm [<00530055>]TJ
+1.015 0 0 1 125.371 520.462 Tm [<00490046>]TJ
+1.025 0 0 1 135.382 520.462 Tm [<004D>]TJ
+1.015 0 0 1 137.996 520.462 Tm [<004600540054>-221<004C004600460051>]TJ
+1.025 0 0 1 174.415 520.462 Tm [<004A>]TJ
+1.015 0 0 1 177.132 520.462 Tm [<004F>-221<004E>]TJ
+1.025 0 0 1 193.228 520.462 Tm [<004A>]TJ
+1.015 0 0 1 195.944 520.462 Tm [<004F0045>]TJ
+1.025 0 0 1 209.098 520.462 Tm [<0055>]TJ
+1.015 0 0 1 212.753 520.462 Tm [<00490042>]TJ
+1.025 0 0 1 222.855 520.462 Tm [<0055>-219<0055>]TJ
+1.015 0 0 1 232.41 520.462 Tm [<0049>]TJ
+1.025 0 0 1 237.921 520.462 Tm [<004A>]TJ
+1.015 0 0 1 240.637 520.462 Tm [<0054>]TJ
+1.025 0 0 1 246.935 520.462 Tm [<0057004A>]TJ
+1.015 0 0 1 254.481 520.462 Tm [<005400560042>]TJ
+1.025 0 0 1 268.466 520.462 Tm [<004D>]TJ
+1.015 0 0 1 273.323 520.462 Tm [<0045005000440056004E0046004F>]TJ
+1.025 0 0 1 311.466 520.462 Tm [<0055>]TJ
+1.015 0 0 1 315.121 520.462 Tm [<0042>]TJ
+1.025 0 0 1 319.712 520.462 Tm [<0055004A>]TJ
+1.015 0 0 1 326.084 520.462 Tm [<0050004F>]TJ
+1.02 0 0 1 113.386 508.506 Tm [<0045005000460054004F>]TJ
+1.03 0 0 1 138.079 508.506 Tm [<00080055>]TJ
+1.02 0 0 1 146.398 508.506 Tm [<0054004900500058>-253<0046>]TJ
+1.03 0 0 1 175.147 508.506 Tm [<0057>]TJ
+1.02 0 0 1 180 508.506 Tm [<0046>]TJ
+1.03 0 0 1 184.523 508.506 Tm [<0053005A0055>]TJ
+1.02 0 0 1 196.785 508.506 Tm [<0049>]TJ
+1.03 0 0 1 202.323 508.506 Tm [<004A>]TJ
+1.02 0 0 1 205.053 508.506 Tm [<004F0048>]TJ
+1.03 0 0 1 218.031 508.506 Tm [<004A>]TJ
+1.02 0 0 1 220.76 508.506 Tm [<004F>]TJ
+/F63 9.96264 Tf 1.03 0 0 1 229.003 508.506 Tm [<002D>]TJ
+1.02 0 0 1 234.267 508.506 Tm [<00460044>]TJ
+1.03 0 0 1 242.03 508.506 Tm [<0055>]TJ
+1.02 0 0 1 245.571 508.506 Tm [<0056>]TJ
+1.03 0 0 1 250.52 508.506 Tm [<0053>]TJ
+1.02 0 0 1 254.255 508.506 Tm [<0046>]TJ
+1.03 0 0 1 258.36 508.506 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 262.095 508.506 Tm [<000D>]TJ
+1.02 0 0 1 267.276 508.506 Tm [<0042004F0045>]TJ
+1.03 0 0 1 285.427 508.506 Tm [<0055>]TJ
+1.02 0 0 1 289.1 508.506 Tm [<00490042>]TJ
+1.03 0 0 1 299.252 508.506 Tm [<0055>-250<0055>]TJ
+1.02 0 0 1 309.171 508.506 Tm [<00490046>]TJ
+1.03 0 0 1 321.804 508.506 Tm [<0053>]TJ
+1.02 0 0 1 325.652 508.506 Tm [<0046>]TJ
+1.03 0 0 1 330.174 508.506 Tm [<0047000E>]TJ
+1.02 0 0 1 113.386 496.551 Tm [<0046>]TJ
+1.03 0 0 1 117.908 496.551 Tm [<0053>]TJ
+1.02 0 0 1 121.756 496.551 Tm [<0046004F00440046>-298<0045005000440056004E0046004F>]TJ
+1.03 0 0 1 181.929 496.551 Tm [<0055>]TJ
+1.02 0 0 1 185.603 496.551 Tm [<0042>]TJ
+1.03 0 0 1 190.216 496.551 Tm [<0055004A>]TJ
+1.02 0 0 1 196.619 496.551 Tm [<0050004F>]TJ
+1.03 0 0 1 210.454 496.551 Tm [<0053>]TJ
+1.02 0 0 1 214.302 496.551 Tm [<0046004E0042>]TJ
+1.03 0 0 1 231.689 496.551 Tm [<004A>]TJ
+1.02 0 0 1 234.419 496.551 Tm [<004F0054>]TJ
+1.03 0 0 1 247.197 496.551 Tm [<0055>]TJ
+1.02 0 0 1 250.871 496.551 Tm [<00490046>-298<0051>]TJ
+1.03 0 0 1 269.268 496.551 Tm [<0053>]TJ
+1.02 0 0 1 273.116 496.551 Tm [<004600540046004F>]TJ
+1.03 0 0 1 291.906 496.551 Tm [<0055>]TJ
+1.02 0 0 1 298.612 496.551 Tm [<0050004F0046>]TJ
+1.03 0 0 1 313.936 496.551 Tm [<000F>-530<0265>]TJ
+1.02 0 0 1 332.311 496.551 Tm [<0046>]TJ
+1.005 0 0 1 113.386 484.596 Tm [<005400500056005300440046>-220<004A0054004F00080055>-220<0055004600530053004A0043004D005A>-221<0056005400460053000E00470053004A0046004F0045004D005A>-220<00090042004F0045>-221<0053004600520056004A005300460054>-220<002D005600420035>]TJ
+1 0 0 1 325.657 482.529 Tm [<0026>]TJ
+1.005 0 0 1 329.941 484.596 Tm [<0039>-220<0042004F0045>-220<004F0050004F000E0047005300460046>-221<00470050004F00550054>-220<00550050>-221<00440050004E0051004A004D0046000A000D>-221<004300560055>]TJ
+1 0 0 1 113.386 472.641 Tm [<00540055004A004D004D>-220<004A004F005500460053004600540055004A004F0048>-220<00440050004F005400550053005600440055004A0050004F0054>-220<004200530046>-220<0056005400460045>-220<0042004F0045>-220<00440042004F>-220<00430046>-220<004400500051004A00460045000D>-220<004A004F>-220<0051004200530055004A00440056004D00420053>-220<0058004A00550049>]TJ
+/F111 7.97011 Tf 1 0 0 1 421.57 472.641 Tm [<003F0056004B0052005A00520055004B004C00470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 474.395 472.641 Tm [<000F>]TJ
+1.005 0 0 1 133.311 448.731 Tm [<02650046>-218<0057004A005400560042004D>-219<0045005000440056004E0046004F005500420055004A0050004F>-218<004600590051004D0042004A004F0054>-219<004900500058>-218<00550050>-219<005600540046>]TJ
+/F63 9.96264 Tf 1.005 0 0 1 323.365 448.731 Tm [<002D0046004400550056005300460053>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 355.816 448.731 Tm [<001C>-218<005500490046>-219<00470050004D004D00500058004A004F0048>-218<00450046004E0050004F00540055005300420055004A0050004F0054>]TJ
+1 0 0 1 113.386 436.775 Tm [<0054004900500058>-223<0058004900420055>-223<004A0055>-223<00440042004F>-223<00450050000F>-302<0023004200530053004A004F0048>]TJ
+/F111 7.97011 Tf 1 0 0 1 232.576 436.775 Tm [<002F0048004600570058005500480055002700480050005200100036005400580044005500480056003200490024>-1<0056>]TJ
+/F105 9.96264 Tf 1 0 0 1 347.832 436.775 Tm [<000D>-223<005500490046005A>-223<0049004200570046>-223<004300460046004F>-223<0055005A00510046005400460055>-224<0058004A00550049>-223<005500490046>]TJ
+1.01 0 0 1 113.386 424.82 Tm [<00450046004700420056004D0055>-213<00240050004E00510056005500460053>-214<002E0050004500460053004F>-214<00470050004F00550054000D>-215<00540050>-214<005500490046>-214<0054005000560053004400460054>-214<00440042004F>-214<00430046>-213<004E00500045004A00EB00460045>-214<0042004F0045>-214<00440050004E0051004A004D00460045>-214<004200480042004A004F>-214<00550050>-214<005400460046>]TJ
+0.98 0 0 1 113.386 412.865 Tm [<004900500058>]TJ
+0.97 0 0 1 132.251 412.865 Tm [<0055>]TJ
+0.98 0 0 1 135.711 412.865 Tm [<0049>]TJ
+0.97 0 0 1 141.032 412.865 Tm [<004A>]TJ
+0.98 0 0 1 143.603 412.865 Tm [<004F00480054>-202<00580050>]TJ
+0.97 0 0 1 171.06 412.865 Tm [<0053>]TJ
+0.98 0 0 1 174.684 412.865 Tm [<004C>]TJ
+0.97 0 0 1 179.556 412.865 Tm [<000F>-294<0035>]TJ
+0.98 0 0 1 190.253 412.865 Tm [<0050>-202<00450050>-202<00540050>]TJ
+0.97 0 0 1 217.996 412.865 Tm [<000D>]TJ
+0.98 0 0 1 222.382 412.865 Tm [<0050004F0046>-202<0054004900500056>]TJ
+0.97 0 0 1 258.402 412.865 Tm [<004D>]TJ
+0.98 0 0 1 260.876 412.865 Tm [<0045>-202<005600540046>]TJ
+0.97 0 0 1 283.328 412.865 Tm [<0055>]TJ
+0.98 0 0 1 286.787 412.865 Tm [<00490046>-202<0051>]TJ
+0.97 0 0 1 303.525 412.865 Tm [<004D>]TJ
+0.98 0 0 1 305.999 412.865 Tm [<0042>]TJ
+0.97 0 0 1 310.431 412.865 Tm [<004A>]TJ
+0.98 0 0 1 313.002 412.865 Tm [<004F>]TJ
+0.97 0 0 1 320.425 412.865 Tm [<0035>]TJ
+1 0 0 1 324.243 410.798 Tm [<0026>]TJ
+0.97 0 0 1 328.527 412.865 Tm [<0039>-204<0047>]TJ
+0.98 0 0 1 339.422 412.865 Tm [<0050>]TJ
+0.97 0 0 1 344.352 412.865 Tm [<0053>]TJ
+0.98 0 0 1 347.976 412.865 Tm [<004E0042>]TJ
+0.97 0 0 1 360.337 412.865 Tm [<0055>]TJ
+0.98 0 0 1 365.771 412.865 Tm [<0058>]TJ
+0.97 0 0 1 372.41 412.865 Tm [<004A0055>]TJ
+0.98 0 0 1 378.441 412.865 Tm [<0049>-202<0046>]TJ
+0.97 0 0 1 390.081 412.865 Tm [<004A0055>]TJ
+0.98 0 0 1 396.112 412.865 Tm [<00490046>]TJ
+0.97 0 0 1 405.777 412.865 Tm [<0053>]TJ
+0.98 0 0 1 411.376 412.865 Tm [<00510045>]TJ
+0.97 0 0 1 421.559 412.865 Tm [<00470035>]TJ
+1 0 0 1 428.606 410.798 Tm [<0026>]TJ
+0.97 0 0 1 432.89 412.865 Tm [<0039>]TJ
+0.98 0 0 1 440.557 412.865 Tm [<0050>]TJ
+0.97 0 0 1 445.487 412.865 Tm [<0053>-204<002D>]TJ
+0.98 0 0 1 456.14 412.865 Tm [<00560042>]TJ
+0.97 0 0 1 465.728 412.865 Tm [<0035>]TJ
+1 0 0 1 469.546 410.798 Tm [<0026>]TJ
+0.97 0 0 1 473.83 412.865 Tm [<0039000F>]TJ
+ET
+q
+0.339745 0 0 0.339745 113.386 281.358 cm
+/Im2 Do
+Q
+BT
+/F111 7.97011 Tf 0.99 0 0 1 238.915 388.955 Tm [<002F>]TJ
+0.995 0 0 1 243.669 388.955 Tm [<00480046>]TJ
+0.99 0 0 1 253.226 388.955 Tm [<0057>]TJ
+0.995 0 0 1 257.98 388.955 Tm [<0058>]TJ
+0.99 0 0 1 262.759 388.955 Tm [<0055>]TJ
+0.995 0 0 1 267.513 388.955 Tm [<0048>]TJ
+0.99 0 0 1 272.291 388.955 Tm [<0055>]TJ
+0.995 0 0 1 277.045 388.955 Tm [<0027004800500052>]TJ
+0.99 0 0 1 296.158 388.955 Tm [<0010>]TJ
+0.995 0 0 1 300.913 388.955 Tm [<0030005200510047>]TJ
+0.99 0 0 1 320.026 388.955 Tm [<0055004C>]TJ
+0.995 0 0 1 329.534 388.955 Tm [<00440051>]TJ
+0.99 0 0 1 339.091 388.955 Tm [<0011>]TJ
+0.995 0 0 1 343.845 388.955 Tm [<00530047>]TJ
+0.99 0 0 1 353.402 388.955 Tm [<0049>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 360.327 388.955 Tm [<004A>]TJ
+0.995 0 0 1 362.951 388.955 Tm [<0054>-218<0042>-219<0054>]TJ
+0.99 0 0 1 379.743 388.955 Tm [<004A>]TJ
+0.995 0 0 1 382.366 388.955 Tm [<004E0051>]TJ
+0.99 0 0 1 395.59 388.955 Tm [<004D>]TJ
+0.995 0 0 1 398.115 388.955 Tm [<0046>-219<0051>]TJ
+0.99 0 0 1 409.871 388.955 Tm [<0053>]TJ
+0.995 0 0 1 413.57 388.955 Tm [<004600540046004F>]TJ
+0.99 0 0 1 431.899 388.955 Tm [<0055>]TJ
+0.995 0 0 1 435.43 388.955 Tm [<0042>]TJ
+0.99 0 0 1 439.93 388.955 Tm [<0055004A>]TJ
+0.995 0 0 1 446.085 388.955 Tm [<0050004F>-219<00430042005400460045>]TJ
+0.99 0 0 1 238.915 377 Tm [<0050004F>]TJ
+0.985 0 0 1 251.541 377 Tm [<0055>]TJ
+0.99 0 0 1 255.054 377 Tm [<00490046>-217<00580050>]TJ
+0.985 0 0 1 278.648 377 Tm [<0053>]TJ
+0.99 0 0 1 282.328 377 Tm [<004C>-217<0050>]TJ
+0.985 0 0 1 294.372 377 Tm [<0047>]TJ
+0.99 0 0 1 299.791 377 Tm [<0050004F0046>]TJ
+0.985 0 0 1 316.806 377 Tm [<0047>]TJ
+0.99 0 0 1 320.084 377 Tm [<0042004E005000560054>-217<00250056>]TJ
+0.985 0 0 1 360.878 377 Tm [<0055>]TJ
+0.99 0 0 1 364.391 377 Tm [<00440049>-217<00510042>]TJ
+0.985 0 0 1 385.509 377 Tm [<004A>]TJ
+0.99 0 0 1 388.12 377 Tm [<004F>]TJ
+0.985 0 0 1 393.623 377 Tm [<0055>]TJ
+0.99 0 0 1 397.136 377 Tm [<0046>]TJ
+0.985 0 0 1 401.525 377 Tm [<0053000F>-296<002A0055>-218<004A004D004D>]TJ
+0.99 0 0 1 426.984 377 Tm [<00560054>]TJ
+0.985 0 0 1 436.147 377 Tm [<00550053>]TJ
+0.99 0 0 1 443.34 377 Tm [<0042>]TJ
+0.985 0 0 1 447.818 377 Tm [<0055>]TJ
+0.99 0 0 1 451.331 377 Tm [<00460054>-217<005800490042>]TJ
+0.985 0 0 1 478.377 377 Tm [<0055>]TJ
+1.03 0 0 1 238.915 365.044 Tm [<005A>]TJ
+1.02 0 0 1 243.656 365.044 Tm [<00500056>-247<00440042004F>-248<00450050>-248<0058>]TJ
+1.03 0 0 1 293.423 365.044 Tm [<004A0055>]TJ
+1.02 0 0 1 299.826 365.044 Tm [<0049>-247<0042>]TJ
+1.03 0 0 1 312.496 365.044 Tm [<0053>]TJ
+1.02 0 0 1 316.344 365.044 Tm [<004600420054>]TJ
+1.03 0 0 1 329.555 365.044 Tm [<000D>]TJ
+1.02 0 0 1 334.669 365.044 Tm [<00540046>]TJ
+1.03 0 0 1 343.266 365.044 Tm [<00550055004A>]TJ
+1.02 0 0 1 353.342 365.044 Tm [<004F0048>]TJ
+1.03 0 0 1 366.266 365.044 Tm [<0055>]TJ
+1.02 0 0 1 369.94 365.044 Tm [<00490046>-247<004E0042>]TJ
+1.03 0 0 1 395.384 365.044 Tm [<004A>]TJ
+1.02 0 0 1 398.113 365.044 Tm [<004F>]TJ
+1.03 0 0 1 406.302 365.044 Tm [<0055>]TJ
+1.02 0 0 1 409.975 365.044 Tm [<0046>]TJ
+1.03 0 0 1 414.497 365.044 Tm [<00590055>-245<004A>]TJ
+1.02 0 0 1 428.283 365.044 Tm [<004F>-247<0050004F0046>-248<0054005200560042>]TJ
+1.03 0 0 1 473.52 365.044 Tm [<0053>]TJ
+1.02 0 0 1 477.368 365.044 Tm [<0046>]TJ
+1.03 0 0 1 238.915 353.089 Tm [<0009>]TJ
+1.02 0 0 1 242.281 353.089 Tm [<0042>]TJ
+1.03 0 0 1 246.894 353.089 Tm [<004D0055>]TJ
+1.02 0 0 1 253.195 353.089 Tm [<00490050005600480049>]TJ
+1.03 0 0 1 282.094 353.089 Tm [<0055>]TJ
+1.02 0 0 1 285.768 353.089 Tm [<00490046>]TJ
+1.03 0 0 1 298.419 353.089 Tm [<0055>]TJ
+1.02 0 0 1 302.092 353.089 Tm [<0046>]TJ
+1.03 0 0 1 306.614 353.089 Tm [<00590055>-252<004A>]TJ
+1.02 0 0 1 320.472 353.089 Tm [<0054>-254<004F0050>]TJ
+1.03 0 0 1 337.939 353.089 Tm [<0055>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 344.203 353.089 Tm [<003F>]TJ
+1.02 0 0 1 349.149 353.089 Tm [<005300520056>]TJ
+1.03 0 0 1 363.844 353.089 Tm [<004C0057004C>]TJ
+1.02 0 0 1 378.683 353.089 Tm [<00520051>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 388.48 353.089 Tm [<0008>]TJ
+1.02 0 0 1 390.553 353.089 Tm [<00460045>-254<00430056>]TJ
+1.03 0 0 1 413.497 353.089 Tm [<0055>-252<0055005A>]TJ
+1.02 0 0 1 428.176 353.089 Tm [<005100460045>]TJ
+1.03 0 0 1 445.887 353.089 Tm [<004A>]TJ
+1.02 0 0 1 448.617 353.089 Tm [<004F>-254<00420054>]TJ
+1.03 0 0 1 468.156 353.089 Tm [<0055>]TJ
+1.02 0 0 1 471.829 353.089 Tm [<00490046>]TJ
+0.995 0 0 1 238.915 341.134 Tm [<0054004D004A0045004600080054>-222<00440050004F00550046004F0055000D>-224<005400460046>-223<00430046004D00500058000A000D>-223<005500490046>-223<004E0042005500490054>-223<00090054005A004F004400460045>-223<0058004A00550049>-223<005500490046>-223<004E0042004A004F>]TJ
+1.03 0 0 1 238.915 329.179 Tm [<0055>]TJ
+1.02 0 0 1 242.589 329.179 Tm [<0046>]TJ
+1.03 0 0 1 247.111 329.179 Tm [<00590055000A>-299<004A>]TJ
+1.02 0 0 1 264.821 329.179 Tm [<004F>-302<0042004F0050>]TJ
+1.03 0 0 1 288.984 329.179 Tm [<0055>]TJ
+1.02 0 0 1 292.658 329.179 Tm [<00490046>]TJ
+1.03 0 0 1 302.718 329.179 Tm [<0053>]TJ
+1.02 0 0 1 309.644 329.179 Tm [<0050004F0046>]TJ
+1.03 0 0 1 324.968 329.179 Tm [<000D>]TJ
+1.02 0 0 1 330.781 329.179 Tm [<0042004F0045>]TJ
+1.03 0 0 1 349.436 329.179 Tm [<0047>]TJ
+1.02 0 0 1 352.864 329.179 Tm [<00500050>]TJ
+1.03 0 0 1 363.127 329.179 Tm [<0055>]TJ
+1.02 0 0 1 366.801 329.179 Tm [<004F0050>]TJ
+1.03 0 0 1 377.603 329.179 Tm [<0055>]TJ
+1.02 0 0 1 381.277 329.179 Tm [<00460054>]TJ
+1.03 0 0 1 389.874 329.179 Tm [<000D>]TJ
+1.02 0 0 1 395.687 329.179 Tm [<00580049>]TJ
+1.03 0 0 1 408.135 329.179 Tm [<004A>]TJ
+1.02 0 0 1 410.864 329.179 Tm [<00440049>-302<0042>]TJ
+1.03 0 0 1 428.189 329.179 Tm [<0053>]TJ
+1.02 0 0 1 432.037 329.179 Tm [<0046>]TJ
+1.03 0 0 1 439.636 329.179 Tm [<0055>]TJ
+1.02 0 0 1 443.31 329.179 Tm [<0056>]TJ
+1.03 0 0 1 448.675 329.179 Tm [<0053>]TJ
+1.02 0 0 1 452.524 329.179 Tm [<004F00460045>-302<0050004F>]TJ
+1.02 0 0 1 238.915 317.224 Tm [<0042004F0045>-231<0050>]TJ
+1.03 0 0 1 261.973 317.224 Tm [<00EA>]TJ
+1.02 0 0 1 270.796 317.224 Tm [<0058>]TJ
+1.03 0 0 1 277.706 317.224 Tm [<004A0055>]TJ
+1.02 0 0 1 284.109 317.224 Tm [<0049>]TJ
+1.03 0 0 1 291.995 317.224 Tm [<0055>]TJ
+1.02 0 0 1 295.668 317.224 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 308.076 317.224 Tm [<003F>]TJ
+1.02 0 0 1 313.023 317.224 Tm [<0056004B0052005A0052>]TJ
+1.03 0 0 1 337.515 317.224 Tm [<0055>]TJ
+1.02 0 0 1 342.461 317.224 Tm [<004B>]TJ
+1.03 0 0 1 347.359 317.224 Tm [<004C>]TJ
+1.02 0 0 1 352.306 317.224 Tm [<00470048>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 364.45 317.224 Tm [<00440050004E004E0042004F0045>]TJ
+1.03 0 0 1 405.758 317.224 Tm [<000D>-232<004A>]TJ
+1.02 0 0 1 413.389 317.224 Tm [<004F>-231<0042>]TJ
+1.03 0 0 1 428.368 317.224 Tm [<0055>]TJ
+1.02 0 0 1 432.042 317.224 Tm [<0049>]TJ
+1.03 0 0 1 437.58 317.224 Tm [<004A0053>]TJ
+1.02 0 0 1 444.157 317.224 Tm [<0045>-231<0054005200560042>]TJ
+1.03 0 0 1 471.006 317.224 Tm [<0053>]TJ
+1.02 0 0 1 474.854 317.224 Tm [<0046>]TJ
+1.03 0 0 1 479.376 317.224 Tm [<000F>]TJ
+0.995 0 0 1 238.915 305.269 Tm [<02650046>-219<00500055004900460053>-220<0054005200560042005300460054>-219<004200530046>-220<004B005600540055>-220<0045004600440050005300420055004A0050004F0054000F>-294<02650046>-219<0042004D004A0048004F004E0046004F0055>-220<00500047>-220<005500490046>]TJ
+1 0 0 1 238.915 293.313 Tm [<0054005200560042005300460054>-223<004A0054>-223<004E004200450046>-224<004600420054005A>-223<0043005A>-224<0048005300500056005100460045>-223<0042005500550053004A0043005600550046>-224<004500460044004D0042005300420055004A0050004F0054>-223<0058004A00550049>]TJ
+1.015 0 0 1 238.915 281.358 Tm [<0055>]TJ
+1.01 0 0 1 242.535 281.358 Tm [<00490046>]TJ
+/F111 7.97011 Tf 1.015 0 0 1 254.694 281.358 Tm [<003F>]TJ
+1.01 0 0 1 259.568 281.358 Tm [<00560048>]TJ
+1.015 0 0 1 269.269 281.358 Tm [<0057>]TJ
+1.01 0 0 1 274.143 281.358 Tm [<0044>]TJ
+1.015 0 0 1 278.993 281.358 Tm [<0055>]TJ
+1.01 0 0 1 283.868 281.358 Tm [<00480044>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 295.765 281.358 Tm [<00440050004E004E0042004F0045>]TJ
+1.015 0 0 1 336.668 281.358 Tm [<000F>]TJ
+1.01 0 0 1 342.083 281.358 Tm [<00270050>]TJ
+1.015 0 0 1 352.508 281.358 Tm [<0053>-217<004A>]TJ
+1.01 0 0 1 361.186 281.358 Tm [<004F0054>]TJ
+1.015 0 0 1 370.836 281.358 Tm [<0055>]TJ
+1.01 0 0 1 374.456 281.358 Tm [<0042004F00440046>]TJ
+1.015 0 0 1 393.172 281.358 Tm [<000D>-217<0055>]TJ
+1.01 0 0 1 401.468 281.358 Tm [<00490046>]TJ
+1.015 0 0 1 413.626 281.358 Tm [<0055>]TJ
+1.01 0 0 1 417.246 281.358 Tm [<0049>]TJ
+1.015 0 0 1 422.73 281.358 Tm [<0053>]TJ
+1.01 0 0 1 426.522 281.358 Tm [<00460046>-218<0054005200560042>]TJ
+1.015 0 0 1 456.692 281.358 Tm [<0053>]TJ
+1.01 0 0 1 460.484 281.358 Tm [<00460054>-218<0050004F>]TJ
+1 0 0 1 113.386 269.403 Tm [<005500490046>-220<004D004600470055>-220<004200530046>-220<004500460044004D0042005300460045>-220<00420054001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 245.493 Tm [<003F0056004800570044005500480044005E004400550048004400140003004400550048004400150003005000440057004B>-1<00440055004800440060>]TJ
+1 0 0 1 113.386 233.538 Tm [<00030003005A004C00470057004B000300200003001600460050>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 209.627 Tm [<0042004F0045>-220<005500490046>-220<00EB005300540055>-220<005500580050000D>-220<00580049004A00440049>-220<0049004200570046>-220<005500490046>-220<00540042004E0046>-220<00490046004A004800490055>-220<0042004F0045>-220<00440050004D00500053000D>-220<004200530046>-220<0054005100460044004A00EB00460045>-220<0047005600530055004900460053>-220<004200480042004A004F>-220<0058004A00550049001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 185.717 Tm [<003F0056004800570044005500480044005E004400550048004400140003004400550048004400150060>]TJ
+1 0 0 1 113.386 173.762 Tm [<00030003004B0048004C004A004B0057000300030003000300030020000300170011001600460050>]TJ
+1 0 0 1 113.386 161.807 Tm [<00030003004500440046004E004A00550052005800510047000300200003005A004B004C00570048>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 137.896 Tm [<00420047005500460053>-220<00580049004A00440049>]TJ
+/F111 7.97011 Tf 1 0 0 1 161.658 137.896 Tm [<00440055004800440014>]TJ
+/F105 9.96264 Tf 1 0 0 1 187.863 137.896 Tm [<0045005000460054004F00080055>-220<004F004600460045>-220<0042004F005A00550049004A004F0048001C>-220<0042004F00500055004900460053>-220<004500460044004D0042005300420055004A0050004F>-220<0054004600550054>]TJ
+/F111 7.97011 Tf 1 0 0 1 383.45 137.896 Tm [<00440055004800440015>]TJ
+/F105 9.96264 Tf 1 0 0 1 407.462 137.896 Tm [<00080054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 415.663 137.896 Tm [<00590056004B004C00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 444.476 137.896 Tm [<000D>-220<0042004F0045>-220<00540055004A004D004D>]TJ
+1 0 0 1 113.386 125.941 Tm [<0042004F00500055004900460053>-220<0050004F0046>-220<004A0054>-220<0056005400460045>-220<004700500053>]TJ
+/F111 7.97011 Tf 1 0 0 1 209.266 125.941 Tm [<005000440057004B0044005500480044>]TJ
+/F105 9.96264 Tf 1 0 0 1 249.876 125.941 Tm [<00550050>-220<0045004A00540051004D0042005A>-220<004A00550054>-220<00440050004F00550046004F0055000F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EC01EA>]TJ
+ET
+endstream
+endobj
+266 0 obj <<
+/Type /Page
+/Contents 267 0 R
+/Resources 265 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 268 0 R
+>> endobj
+263 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-VisualDoc.pdf)
+/PTEX.PageNumber 4
+/PTEX.InfoDict 269 0 R
+/BBox [0 0 538.58300781 453.54299927]
+/Resources 270 0 R/Length 7394
+/Filter /FlateDecode
+>>
+stream
+xÚí]ëŽ7Žþ裡8Šî—AÌi»{€‹ìøÇ
+¹É¿=Ï£ùéýÏo?¾}ÿî•Qøöý»oÞ}n^<&¥¶qª=5t J©!‰äµ·¥ŒÕÂ?MÑ„u2ûê3…O­.R´È[ý~_Vç|û¯Ï™yë弈Ô+ð‰ã
+=£
+\;jŒô.'ó+§crÙ”åª\v âW“û§–Óq¹lbÙª\väyE9…ßåô
+Ù‹PH€ 
+/#WÏóšynëz^.VNZºJÓÔEÖ<g'ÅßVíÇèOfÕxZUâ†f“PÁ¶‡'ǵÌFX@nWËnÅTËî?á^篣eèíXýÙiY²€]æsÔ2Ür¼úUµìbY¼–‘¤ùü° d˜Òg©ehwÙ_EÉþöÃÛwoþ¢ö|Øhmutš×õí$… 6û>Æ ºFkL¯ž øýHiáÀŒFÍY};ðÂÇ8æôé’Ó7·ÐÚˆdcßÎ,sÿÖ³‰ùÈ–‘Jð¢´:˜EhËŽšqÓ14òb2¹«(~¹²(T¡LÏž´Î‡+2\*mŒˆ‘EDãF&Û˘lQbiÐN ™©”Ç‹\Ok´€u>( R뺌ƕÑÈÛº(ʪÐ×_ÐSˆAçxÍîýõD
+0’o¨‡(·Ã¢Ì»ŠPó×,@U!I
+M×sF%}Êù
+V9dBÄ-¬à϶&`øÈÚ‘f®_3…lªBí«éŠ«•ñë=†Å&VæxŽ­ª_Mv®I‰®^_oÇt9|ÂÒó»6\M‚Ýòû¬¹®ÜÕáÊ®Xü¥š“9ê÷9©V]RL~m· 6Öbgýí8ÓêYó¯©73nj,­ÙB¿v•©­¡—;€^v½°‹„^~½\Êlj{àûW‚)Çn»8­¨½Í‡¯°Ã1×æ8žeq¾V­­+ÛqÐJ"N5±TLûðʘ«[5±Û€Ì\XA‹Ç[x[fL¸*z­[EN¥dÁ±@»AööÚÉÔÇFº| t¸ºb²ì:Îkp>†¢1‹£²Y].Úâ obž•ñ¬Hœ¼©²9ªew+†–MÅ×Ì
+9h/Êž„ÄúvÚe¯}5]ö Ýž¡Õð„…ªŽgtϬRÑ”€•~°jL­+庬ڲ´Üc-­1QæÚXåìVŒ°‡ Œz`„½’Þ±®ê¡5ÛêI"ì,XêrøúV¹ ±J(U~;¾ŽwLœ ãë&à¿áp|½¡~œÂ.8U&¬`SË£Ä×ÏO_¿2&‰®»ø™ARº(¸ÞäÞYO¸ÄÇ×ûä>›s3m߸ì®}VŸuJhLké(?U¤þüé"õW¹#qzYìëá8çÕNœ^¼=Ÿê¸$˜§ó¨H}ÓÕaÔóúIQo”Ùª=v½ :Ä»àÇtü9†qm{la$¿Ùú‹ì1suðóköØŸNvÁ¯>¡dÎQdJN´Ó‹°[Òx*áÔ
+“²A™;
+„×ãÀÞ ö€Î`ò¯ ú˜Î¯rÆCßØQ² ŠàÑS '$1! !Y«2,‰°Í[ºØ!Ì&'àiXßu!‰jÀØr1}Ê PÑ–”³TÞR¤©w7ÊPŒÚ²ÝÖ+Ö
+—lÒtÄÖÐà;aî@÷
+}…8[ˆ9®D‘P›»GM߇ T8 ®áXý¶@\ígº˜ˆÌ|;µí%ë<íy’XÛ»Ù3"3$Tsõ2Ìzû¿¡>™ ‘P¬KƒŽ7‚DÔºË- ¼É¹l¼Æ¡ZK8k^ùDO!–f lõ”(YÂ/Tëïڿ'´ñZY¤Jäm@w¥ˆàr©I¨ &mŒz jižý†¶4'¢¡ü[ÌÁõ½YtsùÞFhiúÀly‰(@dÔSÈ êÀ±°I'm¸uØlÜÂÅŠaMâ¾jÞG@U<3nT­ÂÒ‰4œx˜ì—ÝVÝ
+ꧮÝ<Ùõ‘X–tGW^FÒPÄ<¼–;îIb™6Åy^¶]qÉM¯| =bTí‘Žc×U9üCø;õhvuÛ×eoÞã•ñxÅÞmô±˜•³,¹,%8Æ£+…°ÜKgÜGJ¯Ô\à´Xбó\Z•oVcRϲ!ZŸüà4†(оè(SeTA D-Ûa™››[~w‹
+° ý1@HøO0TX­!f‰ÑPÃH4œ0¦X¾òS"XqŠJ\röŒ‰d½?¾½"Ñ9
+xiýçŽpvˆ4ö£µŽŒ¥`7ñs(£Ž>¥j0%ÈQóçT q:jê<cÑMòγcÂÑ!´±ûÌ“) T8´á\KÌb¦Äeyk÷§„ázKÙÏO JG§o8gÝX†(ñ‹’ÑΟC L–hâÍó5m4¸UJÍh#‰ú¿}CêBÃ>ì–z³®/ž½y}€<ž®2ë’ñù}>§f¤–Ÿ\Z‰
+F6VK¡Ùˆ#*¥'Téá1<²ü‚¤Á€%ŽÃ«XŠ•åÞ8ä–øF¤Ð7ìŒÔ˜ÂÒŒª`%ð©Rq^»aPªxqÙ8ŽjŽ[•$FVñ½ºN'òè™L‚ïi?ô< ó³ðFé²!þãÝtŠë€0¢à¸ñ€ívvMG]MJË ›&ßû!ø@T
+”"È•Š‹9<ŸCK¢-Mz 96Åë þÀX1×X¾gŽì˜]y×Â>e¼ËmJÕ;a+Mf§
+&§03ºÂµ*°¼ìñFÀ%OÆËàýCLa%+’=_‘°±ÏIo^•íñw>Ù+$F‚ËœžìÆó㌠çzðL¢y¸)A¤-*_¿™“nšó¦òL݆lMMÈã8×O
+Üq}gù¼¨GÔù ’Õú>Vz† %'†xê@búAT}CÍd{ÂîJºlÈl±— ››–*3hÈvmÏÜ;ÕИ-/ _6¦ž­§˜Î‰ñž è&™‘åÒN½#K܇iŠ¥?Ñ)Q†ÂÎMÎŽ*·s œfsr½àî˜:Ö"¡DmóÒôĆS`_HÞrcT!Y71(/N*†Ù8Z$bü•L
+倃v+dÈÜQ øOÒdÏ_p
+oKÑ>gO Ó¾Ê`Ðs_ˆÊô7ôCãkaÅ‘îL/ÙÛ•‹± ¹…@—Šæ–F}XŽ6Þq—î0¬O5¡_ËšæzÞI®)â=süЙ9˜±Ð5FÑ1×PU(¥z:Ê‘Ýv±T“'mˆbÙº®!f›H½(ÊȽ|„ñ• ¾øÏ’ÙÕ"…~¤@
+T gÎöòI“†w¼©$ÙõyæRV‚¢Š¨Önö£MEµ&×8¸%'Í‹Ü ”à5ª¥"ŒËU6”YµœbäÈ®d®u°»òнt6RÝ£‰(2gýìòÚJ§¥HAm/é@ÔTßØ ²tMæ
+% )5ËŒ9Ks])1ä¥t80‡k„t´H]²‰„4›4„KT¼‹ÄèÆ狆Š˜«BƒõÐüFºE«øñ³%h°êøîòÁ4
+Ê­WâÉ!8
+ !¸ñ…ìÛÙº˜è}ßx¥
+endstream
+endobj
+269 0 obj
+<</Producer (LuaTeX-0.60.2)
+/Title (LecturerDemo-VisualDoc)
+/Creator (TeX, with a little help from Lecturer)
+/Author (Paul Isambert)
+/Title (Lecturer's Visual Doc \(alternate title set with pdftitle in the job parameter\))
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727153339+02'00')
+/ModDate (D:20100727153339+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is LuaTeX, Version beta-0.60.2-2010070109 \(rev 3730\) \(Web2C 2010/dev\) kpathsea version 6.0.0dev)
+>>
+endobj
+270 0 obj
+<</Properties <</ltr#40step_1#3Acontent 271 0 R
+/ltr#40position_1#3Acontent 271 0 R
+/ltr#40showtitle#40inner_area_1#3Abackground 271 0 R
+/ltr#40step_2#3Acontent 272 0 R
+/ltr#40position_2#3Acontent 272 0 R
+/ltr#40showauthor#40inner_area_1#3Abackground 272 0 R
+/ltr#40step_3#3Acontent 273 0 R
+/ltr#40position_3#3Acontent 273 0 R
+/ltr#40showdate#40inner_area_1#3Abackground 273 0 R
+/ltr#40step_4#3Acontent 274 0 R
+/ltr#40position_4#3Acontent 274 0 R
+/ltr#40showall#40inner_area_1#3Abackground 274 0 R
+/ltr#40step_5#3Acontent 275 0 R
+/ltr#40position_5#3Acontent 275 0 R
+/ltr#40step_6#3Acontent 276 0 R
+/ltr#40position_6#3Acontent 276 0 R
+/ltr#40warning#40inner_area_1#3Abackground 276 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 279 0 R
+/ltr#40step_2#3Acontent 280 0 R
+/ltr#40step_3#3Acontent 281 0 R
+/ltr#40step_4#3Acontent 282 0 R
+/ltr#40step_5#3Acontent 283 0 R
+/ltr#40step_6#3Acontent 284 0 R
+/ltr#40step_7#3Acontent 285 0 R
+/ltr#40step_8#3Acontent 286 0 R
+/ltr#40step_9#3Acontent 287 0 R
+/ltr#40step_10#3Acontent 288 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 289 0 R
+/ltr#40position_7#3Acontent 289 0 R
+/ltr#40controlbar#40inner_area_3#3Abackground 289 0 R
+/ltr#40step_2#3Acontent 290 0 R
+/ltr#40position_8#3Acontent 290 0 R
+/ltr#40one#40inner_area_3#3Abackground 290 0 R
+/ltr#40step_3#3Acontent 291 0 R
+/ltr#40position_9#3Acontent 291 0 R
+/ltr#40two#40inner_area_3#3Abackground 291 0 R
+/ltr#40step_4#3Acontent 292 0 R
+/ltr#40position_10#3Acontent 292 0 R
+/ltr#40three#40inner_area_3#3Abackground 292 0 R
+/ltr#40step_5#3Acontent 293 0 R
+/ltr#40position_11#3Acontent 293 0 R
+/ltr#40unscaled#40inner_area_3#3Abackground 293 0 R
+/ltr#40position_12#3Acontent 293 0 R
+/ltr#40step_6#3Acontent 294 0 R
+/ltr#40position_13#3Acontent 294 0 R
+/ltr#40step_7#3Acontent 295 0 R
+/ltr#40position_14#3Acontent 295 0 R
+/ltr#40step_8#3Acontent 296 0 R
+/ltr#40position_15#3Acontent 296 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 297 0 R
+/ltr#40position_16#3Acontent 297 0 R
+/ltr#40hlineS1#40inner_area_4#3Abackground 297 0 R
+/ltr#40position_17#3Acontent 297 0 R
+/ltr#40position_18#3Acontent 297 0 R
+/ltr#40vlineS1#40inner_area_4#3Abackground 297 0 R
+/ltr#40position_19#3Acontent 297 0 R
+/ltr#40position_20#3Acontent 297 0 R
+/ltr#40position_21#3Acontent 297 0 R
+/ltr#40hlineS2#40inner_area_4#3Abackground 297 0 R
+/ltr#40position_22#3Acontent 297 0 R
+/ltr#40position_23#3Acontent 297 0 R
+/ltr#40vlineS2#40inner_area_4#3Abackground 297 0 R
+/ltr#40position_24#3Acontent 297 0 R
+/ltr#40position_25#3Acontent 297 0 R
+/ltr#40position_26#3Acontent 297 0 R
+/ltr#40hlineS3#40inner_area_4#3Abackground 297 0 R
+/ltr#40position_27#3Acontent 297 0 R
+/ltr#40position_28#3Acontent 297 0 R
+/ltr#40vlineS3#40inner_area_4#3Abackground 297 0 R
+/ltr#40position_29#3Acontent 297 0 R
+/ltr#40position_30#3Acontent 297 0 R
+/ltr#40position_31#3Acontent 297 0 R
+/ltr#40controlbar#40inner_area_4#3Abackground 297 0 R
+/ltr#40step_2#3Acontent 298 0 R
+/ltr#40position_32#3Acontent 298 0 R
+/ltr#40step_3#3Acontent 299 0 R
+/ltr#40position_33#3Acontent 299 0 R
+/ltr#40step_4#3Acontent 300 0 R
+/ltr#40position_34#3Acontent 300 0 R
+/ltr#40step_5#3Acontent 301 0 R
+/ltr#40position_35#3Acontent 301 0 R
+/ltr#40step_6#3Acontent 302 0 R
+/ltr#40position_36#3Acontent 302 0 R
+/ltr#40text#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_37#3Acontent 302 0 R
+/ltr#40position_38#3Acontent 302 0 R
+/ltr#40hlineA0#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_39#3Acontent 302 0 R
+/ltr#40position_40#3Acontent 302 0 R
+/ltr#40vlineA0#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_41#3Acontent 302 0 R
+/ltr#40position_42#3Acontent 302 0 R
+/ltr#40position_43#3Acontent 302 0 R
+/ltr#40hlineA0a#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_44#3Acontent 302 0 R
+/ltr#40position_45#3Acontent 302 0 R
+/ltr#40vlineA0a#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_46#3Acontent 302 0 R
+/ltr#40position_47#3Acontent 302 0 R
+/ltr#40position_48#3Acontent 302 0 R
+/ltr#40hlineA1#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_49#3Acontent 302 0 R
+/ltr#40position_50#3Acontent 302 0 R
+/ltr#40vlineA1#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_51#3Acontent 302 0 R
+/ltr#40position_52#3Acontent 302 0 R
+/ltr#40position_53#3Acontent 302 0 R
+/ltr#40hlineA2#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_54#3Acontent 302 0 R
+/ltr#40position_55#3Acontent 302 0 R
+/ltr#40vlineA2#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_56#3Acontent 302 0 R
+/ltr#40position_57#3Acontent 302 0 R
+/ltr#40position_58#3Acontent 302 0 R
+/ltr#40hlineA3#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_59#3Acontent 302 0 R
+/ltr#40position_60#3Acontent 302 0 R
+/ltr#40vlineA3#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_61#3Acontent 302 0 R
+/ltr#40position_62#3Acontent 302 0 R
+/ltr#40position_63#3Acontent 302 0 R
+/ltr#40hlineA4#40inner_area_4#3Abackground 302 0 R
+/ltr#40position_64#3Acontent 302 0 R
+/ltr#40step_7#3Acontent 303 0 R
+/ltr#40position_65#3Acontent 303 0 R
+/ltr#40position_66#3Acontent 303 0 R
+/ltr#40bordermiter#40inner_area_4#3Abackground 303 0 R
+/ltr#40step_8#3Acontent 304 0 R
+/ltr#40position_67#3Acontent 304 0 R
+/ltr#40position_68#3Acontent 304 0 R
+/ltr#40borderbevel#40inner_area_4#3Abackground 304 0 R
+/ltr#40step_9#3Acontent 305 0 R
+/ltr#40position_69#3Acontent 305 0 R
+/ltr#40position_70#3Acontent 305 0 R
+/ltr#40borderround#40inner_area_4#3Abackground 305 0 R
+/ltr#40step_10#3Acontent 306 0 R
+/ltr#40position_71#3Acontent 306 0 R
+/ltr#40position_72#3Acontent 306 0 R
+/ltr#40authorff#40inner_area_4#3Abackground 306 0 R
+/ltr#40step_11#3Acontent 307 0 R
+/ltr#40position_73#3Acontent 307 0 R
+/ltr#40position_74#3Acontent 307 0 R
+/ltr#40authorfr#40inner_area_4#3Abackground 307 0 R
+/ltr#40step_12#3Acontent 308 0 R
+/ltr#40position_75#3Acontent 308 0 R
+/ltr#40position_76#3Acontent 308 0 R
+/ltr#40authorrf#40inner_area_4#3Abackground 308 0 R
+/ltr#40step_13#3Acontent 309 0 R
+/ltr#40position_77#3Acontent 309 0 R
+/ltr#40position_78#3Acontent 309 0 R
+/ltr#40authorrr#40inner_area_4#3Abackground 309 0 R
+/ltr#40step_14#3Acontent 310 0 R
+/ltr#40step_15#3Acontent 311 0 R
+/ltr#40step_16#3Acontent 312 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/Font <</F87 313 0 R
+/F81 314 0 R
+/F69 315 0 R
+/F57 316 0 R
+/F105 317 0 R
+>>
+/XObject <</Fm1 318 0 R
+/Fm2 319 0 R
+/Fm3 320 0 R
+/Fm4 321 0 R
+/Fm5 322 0 R
+>>
+/ProcSet [/PDF/Text]
+>>
+endobj
+271 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+272 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+273 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+274 0 obj
+<</Type /OCG
+/Name (all)
+>>
+endobj
+275 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+276 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+277 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+278 0 obj
+<</Type /ExtGState
+/CA 0.9
+/ca 0.9
+>>
+endobj
+279 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+280 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+281 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+282 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+283 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+284 0 obj
+<</Type /OCG
+/Name (lovely)
+>>
+endobj
+285 0 obj
+<</Type /OCG
+/Name (B)
+>>
+endobj
+286 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+287 0 obj
+<</Type /OCG
+/Name ([step 9])
+>>
+endobj
+288 0 obj
+<</Type /OCG
+/Name ([step 10])
+>>
+endobj
+289 0 obj
+<</Type /OCG
+/Name (scaled)
+>>
+endobj
+290 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+291 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+292 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+293 0 obj
+<</Type /OCG
+/Name (unscaled)
+>>
+endobj
+294 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+295 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+296 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+297 0 obj
+<</Type /OCG
+/Name (slidedim)
+>>
+endobj
+298 0 obj
+<</Type /OCG
+/Name (maincontrol)
+>>
+endobj
+299 0 obj
+<</Type /OCG
+/Name (topcontrol)
+>>
+endobj
+300 0 obj
+<</Type /OCG
+/Name (centercontrol)
+>>
+endobj
+301 0 obj
+<</Type /OCG
+/Name (bottomcontrol)
+>>
+endobj
+302 0 obj
+<</Type /OCG
+/Name (areadim)
+>>
+endobj
+303 0 obj
+<</Type /OCG
+/Name (bordermiter)
+>>
+endobj
+304 0 obj
+<</Type /OCG
+/Name (borderbevel)
+>>
+endobj
+305 0 obj
+<</Type /OCG
+/Name (borderround)
+>>
+endobj
+306 0 obj
+<</Type /OCG
+/Name (ff)
+>>
+endobj
+307 0 obj
+<</Type /OCG
+/Name (fr)
+>>
+endobj
+308 0 obj
+<</Type /OCG
+/Name (rf)
+>>
+endobj
+309 0 obj
+<</Type /OCG
+/Name (rr)
+>>
+endobj
+310 0 obj
+<</Type /OCG
+/Name (top)
+>>
+endobj
+311 0 obj
+<</Type /OCG
+/Name (center)
+>>
+endobj
+312 0 obj
+<</Type /OCG
+/Name (bottom)
+>>
+endobj
+313 0 obj
+<</Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /RMYJHS+LucidaSans-Typewriter
+/DescendantFonts [ 323 0 R]
+/ToUnicode 324 0 R
+>>
+endobj
+314 0 obj
+<</Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /RVZRBG+ChaparralPro-Italic
+/DescendantFonts [ 325 0 R]
+/ToUnicode 326 0 R
+>>
+endobj
+315 0 obj
+<</Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /GHSBZT+ChaparralPro-Regular
+/DescendantFonts [ 327 0 R]
+/ToUnicode 328 0 R
+>>
+endobj
+316 0 obj
+<</Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /DNCRSE+ChaparralPro-Bold
+/DescendantFonts [ 329 0 R]
+/ToUnicode 330 0 R
+>>
+endobj
+317 0 obj
+<</Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /JEQMUN+CentaurMTStd
+/DescendantFonts [ 331 0 R]
+/ToUnicode 332 0 R
+>>
+endobj
+318 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 46.44 17.395]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 333 0 R
+/Length 245
+/Filter /FlateDecode
+>>stream
+xÚUPINÄ@ ¼Ï+ü/½Þ¸Íx
+7 `>
+endstream
+endobj
+319 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 3.824 3.824]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 334 0 R
+/Length 89
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+9`–.„™¦…àå*(r
+endstream
+endobj
+320 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 3.824 3.824]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 335 0 R
+/Length 92
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+
+\
+endstream
+endobj
+321 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 3.824 3.824]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 336 0 R
+/Length 94
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+
+\
+endstream
+endobj
+322 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 3.824 3.824]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 337 0 R
+/Length 89
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+endstream
+endobj
+323 0 obj
+<</Type /Font
+/Subtype /CIDFontType2
+/CIDToGIDMap /Identity
+/BaseFont /RMYJHS+LucidaSans-Typewriter
+/FontDescriptor 338 0 R
+/W 339 0 R
+/CIDSystemInfo <</Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>>
+endobj
+324 0 obj
+<</Length 475
+/Filter /FlateDecode
+>>stream
+xÚS]‹â0}ï¯È>ÎC§ikU)¨U¶ËÎV†ÙÇš\Ý€MKÚ²øï7¹×Ž0,²{9'ç¤çÞÄÑ··Â_Êú
+èØxg¹V݃çZœ{ ƒêߢœ”¾IÜwØxþîù×ï…ÿ³J–E©[iàQŸ;ë^ugkù5³vOÂpÃw0­ªõ 9ç–Øh¹®+×pë×Ð,Ú8*-Í59;¸>¼0bR‰îŠð-*;9g..mU®µ·X°`gÛÎ\0ÿƒ¼ Féß j…Eß4gp¡÷Ò”I8ÚýíÜ^Ê
+X঑K»ªºËݱ܌Žc⢋ZBÛ”L©Oà-ì8xÊ[û¤hùe}N®Ãñ&ŸY¹-s,Ñ$E2C†D.‘ c"×XbŽ¤5 dŠe"“/ŽˆÜ¹!ı$+$'dOhÏ)Ù§|@®Ì2ldˆò¡ñ»4–rE×@dŽ3B!Þ¢&' ¡¡9ÅK(IDˆ¦’Ð8â%¡¢„™Q+òÙQJLåïnÓça‹Þ{Òxåð$Ý* Ÿ·²©çÂ^çáŸæÐëÖû Î%Œ
+endstream
+endobj
+325 0 obj
+<</Type /Font
+/Subtype /CIDFontType0
+/BaseFont /RVZRBG+ChaparralPro-Italic
+/FontDescriptor 340 0 R
+/W 341 0 R
+/CIDSystemInfo <</Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>>
+endobj
+326 0 obj
+<</Length 431
+/Filter /FlateDecode
+>>stream
+xÚ…RÁnâ0½ç+Ü=¤qhÙ
+E‚
+"àäº;¿¶¬’x*á²Ò^þaÈgÙáÒɧA6׺–q0L!š;+hAæ÷(ñ%Ÿ‡ªãéFŸdŽîŽiÁ¢i‚%§yæS†ý‡N³¡1ÿ`eÌ–=a-Ý´F”.å DÙ `P= 3ó `Jš”#Z—AÝcPˆbpº_ÛÿǛѼ7ƹŒ?}ôJ·ûÐêÖWá‹i¸Ý½n¢?*X5
+endstream
+endobj
+327 0 obj
+<</Type /Font
+/Subtype /CIDFontType0
+/BaseFont /GHSBZT+ChaparralPro-Regular
+/FontDescriptor 342 0 R
+/W 343 0 R
+/CIDSystemInfo <</Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>>
+endobj
+328 0 obj
+<</Length 498
+/Filter /FlateDecode
+>>stream
+xÚ…SMo£0½ó+¼‡HéÆæ#M«)!°Ë¡j¢UÕÁ“ 2pÈ¿_{iµÊ"õžß̼±‡Ù·½»‘Í\ÿž³wèšAàÆÏyëÌf»¦jPý €9ívOìM7Åz6³]¦ÊþΈ3UTƒ„IõoÑÎ¥ºJl6?À‡ûó×~ûyp㯼͵Î+ì¾Ãy¨ríry(ûÊDü_ÌŒ‚ÝP0L÷tW6ꉉ{ι!%㦶ÝvÎbtÌS§RI=ÚfGÛ„#<&Ë¢~‹Ú› Þ_ºêLg½f S¹ìz}A÷wÎâUKÐ¥:³ù ŸF·Ú¶ë‰q'Š˜„“IoÎì%¯-ìQdÒì–ýåÖ™\ã—˜‡Xñ¢‘еy:WgpÖæ0xÄÖ©y"”ükEQÇÓU.ŒÜ,.| rKä’È"Á‰Œ‘$1.þIoL¶Á%D¦$¡zA‚¤ï¹Â%ô (<¤ÔKL–…?µP|哯€ ù„BB™ SD‰5”n95™Œù—æ}´ŒHÉ '´™ #"µï¢*~@(!"J©¦ÿ@ˆšñ±‚· ÉO`j®Æ¾°{Uvú¾§£´6£#Šwoo½Tð=ÅmÓÚ(|qü§ßÒ¢×Ôù%Ÿ-&
+endstream
+endobj
+329 0 obj
+<</Type /Font
+/Subtype /CIDFontType0
+/BaseFont /DNCRSE+ChaparralPro-Bold
+/FontDescriptor 344 0 R
+/W 345 0 R
+/CIDSystemInfo <</Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>>
+endobj
+330 0 obj
+<</Length 435
+/Filter /FlateDecode
+>>stream
+xÚ…RM›0½ûW¸‡HÙËWÒmV҈ġÙUˆª^‰=É" òï;CVª ¬7óžçùáÅ·Ò{“ú ^üð#ôz4¼ôgÕ±Å"ÓblA 
+endstream
+endobj
+331 0 obj
+<</Type /Font
+/Subtype /CIDFontType2
+/CIDToGIDMap /Identity
+/BaseFont /JEQMUN+CentaurMTStd
+/FontDescriptor 346 0 R
+/W 347 0 R
+/CIDSystemInfo <</Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>>
+endobj
+332 0 obj
+<</Length 475
+/Filter /FlateDecode
+>>stream
+xÚuS]o£0|çWø"¥”朗"¤@@⤤½’«úJìM)dà!ÿþìÝÐH§RXÍì¬=ƒÙ÷ÒÞˆövðì²èÛQq°Ó]ÕY³Ù¶åcrØS·eïªå% lžÛBÖÓ’_F“ê±(s-ï³›àËþ™ýÚýÞÛ©Þ­ÕîPÂvÍÄ¡.ZùÓö ÃpüT_·ò•yÏ®ëj"“"m“ª·œ›3æL^OµêfYËó™¨ùpCøæþ<f¸¼ö4…<µÖzÍœÝìuE·O–ó¦¨ZžÙü?Ý/Ç®»€ñÂ\+Ž™€“^V“}Õ
+endstream
+endobj
+333 0 obj
+<</ExtGState <</ltr#40opacity_1 277 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+334 0 obj
+<</ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+335 0 obj
+<</ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+336 0 obj
+<</ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+337 0 obj
+<</ExtGState <</ltr#40opacity_1 277 0 R
+/ltr#40opacity_.9 278 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+338 0 obj
+<</Type /FontDescriptor
+/FontName /RMYJHS+LucidaSans-Typewriter
+/Flags 4
+/FontBBox [ 0 -193 1000 771]
+/Ascent 771
+/CapHeight 723
+/Descent -193
+/ItalicAngle 0
+/StemV 86
+/XHeight 530
+/FontFile2 348 0 R
+>>
+endobj
+339 0 obj
+[ 3 [ 602.5] 7 [ 602.5 602.5] 13 [ 602.5 602.5 602.5 602.5 602.5] 19 [ 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 32 [ 602.5] 34 [ 602.5] 36 [ 602.5 602.5 602.5] 40 [ 602.5] 43 [ 602.5] 49 [ 602.5 602.5] 53 [ 602.5] 55 [ 602.5] 58 [ 602.5] 62 [ 602.5 602.5 602.5] 68 [ 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 94 [ 602.5] 96 [ 602.5 602.5] 181 [ 602.5]]
+endobj
+340 0 obj
+<</Type /FontDescriptor
+/FontName /RVZRBG+ChaparralPro-Italic
+/Flags 4
+/FontBBox [ -171 -317 1042 867]
+/Ascent 740
+/CapHeight 651
+/Descent -260
+/ItalicAngle -10
+/StemV 81
+/XHeight 415
+/FontFile3 349 0 R
+>>
+endobj
+341 0 obj
+[ 8 [ 181] 15 [ 244] 27 [ 244] 41 [ 714] 45 [ 513] 49 [ 539] 52 [ 488] 66 [ 461 466 360 478 404 313 426 495 251] 77 [ 249 739 510 439 472] 83 [ 364 365 345 487 448 674 436 430] 236 [ 533]]
+endobj
+342 0 obj
+<</Type /FontDescriptor
+/FontName /GHSBZT+ChaparralPro-Regular
+/Flags 4
+/FontBBox [ -163 -317 1073 871]
+/Ascent 740
+/CapHeight 650
+/Descent -260
+/ItalicAngle 0
+/StemV 82
+/XHeight 415
+/FontFile3 350 0 R
+>>
+endobj
+343 0 obj
+[ 1 [ 220 273] 7 [ 712 202 328 328 357] 13 [ 245 315 245 392] 27 [ 245 245] 34 [ 606 574 585 691 555 531 665 731 324] 45 [ 523] 47 [ 716 718 547] 51 [ 600 492 567 669 624 880] 61 [ 392] 64 [ 500] 66 [ 454 509 403 521 445 334 466 545 266 244 499 256 812 558 505 522 507 375 401 358 528 473 680 474 462 441] 234 [ 631 561] 489 [ 528 528 528] 493 [ 528 528] 496 [ 528] 498 [ 528] 613 [ 1015]]
+endobj
+344 0 obj
+<</Type /FontDescriptor
+/FontName /DNCRSE+ChaparralPro-Bold
+/Flags 4
+/FontBBox [ -169 -348 1202 905]
+/Ascent 740
+/CapHeight 649
+/Descent -260
+/ItalicAngle 0
+/StemV 99
+/XHeight 415
+/FontFile3 351 0 R
+>>
+endobj
+345 0 obj
+[ 14 [ 375] 66 [ 522 557 441 569 499 383] 74 [ 319 297] 77 [ 309 861 609 546 572] 83 [ 456 447 424 569 518] 234 [ 717] 489 [ 576 576 576] 493 [ 576 576] 498 [ 576]]
+endobj
+346 0 obj
+<</Type /FontDescriptor
+/FontName /JEQMUN+CentaurMTStd
+/Flags 4
+/FontBBox [ 0 -278 1000 675]
+/Ascent 675
+/CapHeight 633
+/Descent -278
+/ItalicAngle 0
+/StemV 86
+/XHeight 366
+/FontFile2 352 0 R
+>>
+endobj
+347 0 obj
+[ 8 [ 198] 13 [ 198 313 198] 17 [ 490 490] 22 [ 490 490] 28 [ 208] 34 [ 625 510 625 719 563] 45 [ 563 875] 49 [ 531] 52 [ 469] 66 [ 375 469 375 479 365 302 417 469 240 229] 77 [ 240 708 469 469 479 469 313 323 292 458 396] 89 [ 406 406 406] 106 [ 458] 118 [ 458] 183 [ 375] 187 [ 365 365] 190 [ 365] 197 [ 469] 204 [ 458]]
+endobj
+348 0 obj
+<</Length 15190
+/Filter /FlateDecode
+>>stream
+xÚݼy|TEÖ0\UwíýöÞ­;ÝY€„$d! Ò@$¬²IBØ“@Ø”Q¢(. ²+š…¥Ž ƒ nˆ:.Œ:ΠΠ‚ ÝùNÝîPŸç÷Ìó½ÿ¼oWß[çVÕ­:uê¬uo7Â!5Z…ä1:5}æŒe¥PrŽq¥s¦ÌW<ý>B8!&³´f󹶇9„Øñqý§Ï/Ÿ³¸Ú¹ !ÅÓP†Êg/™þï±ÖïÒÀuÏÓ3ʦL;zù_£*˜ýõœj?›×PâfÌY°8ºÆ´®ÃógÏ+²çó§Ç!40 ®çΙ²x¾x]ŽÐ íÐÞ9wÊœ²!CV,€kh/ö›_U6?ºìÀ{džA˜=‡
+†c-`¾w|ú' Fȃœß> ï@=„Ùx‡Pèl@° îGÀÁßn€¹ÍݨdXŽD…R¥Öhu’Þ`4™-V›="2*:ÆáŒu¹ãâ»tí–”Ü=%5­GzFfVÏìœÜ^½óúôÍ÷ôë?  pà ÁEÅC†>bä=£F;îÞñÞ 'ù&ßW2M-V6½|FÅÌY³çÌ7¿²ªzÁšE‹—,]¶|ÅÊûW­~àÁ5µÕ­]W¿~ÃÃ75<òèæÆÇßòÄ“[Ÿzú™g·mîùvìܵ{ÏÞ}/¾´ÿåWšš[Z<tØßväè«xíØñ×ßxóÄÉS<ýÖ™?}ûwß{ûàü…‹^úèãOþü—ËW>E,J b ‡”h%zBí¸§àÅøQòGòù sÜirF8cœ.g‚3ÍÙËùR¬+6ÁE\¼Kçһ̮WŒ+É5ØUâ*‹?ó=io§«¶£&䇾FṯSÐ×%èËè´9£œN¹¯Üßôeïìkô…ÛÛÛ¿-GûÎöÉí«Û´›
+JÝúäÓm¡šOk?}ý•™W–\~üòó—×_^{y7B—\®¼|ßåÔËi'“{0š†æß±Æ×ÃB?£ þ5t|¾ÿMÉKè´Õ¢¡ÇÑè!´­GÏ ½hú'ªG¢ÍèèzmAkÑ_Ðßѳhú} ==ö£·ÐÒSQ)j
+4 ÍA³Ñ\ ñ<T 3ªBÕh!Z€jÐ"ôW´-EKÐ2´-G~ôºVvZ¾BCGЇèSô1úý]A—ÐeXñÃè:€¢“èôªCo¢|²s§Q<=ؾÈôÿŽ¯h\ØþÔ£à%Ð4Ü5ôß~Úÿ‹ÏÝ­‚# i$?zu@ª`Ï…Û‚êSÿe÷¡qp~Žåx,-Á™0;ܵûJ‡ÐI6(ªF}Щö½¨î+Eç°§
+ŸÃ[ÈVr•™ÍúÙ6ö\ðjûÀÂŽ’ Ívy¤OS¯£›0‡axnÄMÌsÌÙöí Úl_Ó¾¥ýKЋ"Ò!ôž‰|è>àâ €Á»nâ(ƒOãÓŒ…yŸùb§³ Ÿ íÞö5@Q;ê¸{P?À¿°Ÿi;ðøy<Ü=¯Ç¯Bzƒ`]ÉHHÌ#Ð×8v;»=ðSpGûl¤@¸ßr1zY TX X4¢§ÑN´ æùHNÌæú
+fq~•$A?Ÿ3)ÌbæeæßÌ/¬…ç¿& ‚“ÚãÛïiÝ~H¶,à˜€òeü†¡‘È+ËÞ\œJ“å §Ë«þ4Hõ…¦@×6tÆ;Òù>ÈË7t>0#5Ö¬tØÉ+ØgBê‡ °R9®‚´Ò vÀ¬ÿ€?ÁŸákøºÌß’Ar îI™OWŽãbz3ƒ˜!Ìt¦žy†ic>a¾`Ãö…4ŽÇÖAÚ.Œ¾ ó«>Ü|¿=Ö°¸ò+¤®Š¾ÈA0ÃÉ0¿Rà¹jÐËä´Ò*™£iÚšçË ý¯Ã,OÊ3ý4aœŠó`NE` &ã9ò|¶È3z_ÀW`>ƒ]#,áˆ
+¦ÜQPÒä„¢w·ir–ÈÍœw·ô@Ëé¿jé µôt¶Ä’3åuOvºMo¸~<ážñ
+ ¦îùÍx`_,d`a¯f‚D `ÕTì.(l*rPš˜øÂ)ÓšFÞ3¾° 26ÖÛ=¹ (uOmBîþMº$¹  ÓÄhäaœt:h½³9ùxý¿„¦–$©§¹§M™4¾‰™â¥cè“š¹ š-½jëžìǻƌoR ðc4f|*n_Õ\´ª À -ë™Âúúº»›wO2j|,àã.Üऎ/ãͱ-†§et¡©”¹ iIÉLg“ÂÝß=£~f ,CD}µ$¶%¢ØÓÖþ)*.tÖïŽmÊt{§D5›Pý¨%­EgÑÝ5Ý“›%}ˆ†ÍZ]PkîÊ:ëdHnN!Àºƒˆ˜bä.‚Åor–:“ñî&ŸCOe9¨¾4šÁÇ‹V@™’z©%1/¹õ? Xb÷µÜ]2%\ÂÇK?
+RFèd&¨ï€›’’šºu£< €EÌúÊ×YÝ“kš†¸çKΦ!@24r<Üäí•
+$¥ë·ÞïASá¢iÕ=ãC×N45²yR“¼M¤„Öï¨1¥5«:j:o/q£@s“˜ÐùÕIcáŒ^MØòßT—…ê‚,Õ×t;Ö—ÔOñ·¯šêvJîúæ!Cêç–t`îo?¾>²É³Á;÷êŽí´µAÖ̱~lkA¼pÛ¨ê"}2 RòbR¬h‹C‰KvÚ’†K×ó†ò†K7ò†I<”Ÿç
+{RzzD7Eפô%'©›‹ÄvU(üxµÇša‚ZVp¦w°(8>ÙeÖÙl >Z "òã… :Ö%Ðk‹üd¼ÇàÄêtI•ºF½åíè ~¼´Õf'ú£Ø(IØÔ*ˆ‚ƒ¥S/¨ßf3¤‹×7¬yW/\·æÝ\׬¹ô€ ÓÙ^ÈÏ»N3½!7T“[§M±%iWH'°dÍ£ß<$WæÖI'NÀôA>.Ë•˜eÉÐ'&$deöÌÎÊ0[,VsB¢ÞjåË f}_’•™˜ÈèyÞl²XÉ œýõ¶­]ݶsYÙÒ‘<;`õ#û÷Ð¥¸g÷yÅ“óú/[‘µ·œØÓ&¶,Xû¡vùr>&úùÁúÀw]†XñÀ5û2¬Óõ-é‘77Þ‰#°_±tD_oÊ
+•Ùìa¬$ò£ zpÎ0SmSí~ìð(-S­S¥ú¢è7Û°ɲ8ìÖõ«ë×o!J éË|â9Cn®žæ”å k¥Ž·rY™‚U`z
+Lb¶%1>›ãÍÙLä!ÇpzŸ _ùùö]ù“wnÿ<>5èïƒ{$äÇŸŠwGF²ë_-Ðf•ü¸
+YÑ\OD¶h¨ã9uÒè.^V*¶›/¦2˜)²ùqtóu¹7ß°k ˜á ³Ì‡YXâ醭•îClÅæ‘^
+4éàãÜ.Ž0~<×£dâ8ÌóœˆýxñARC\úÞ†x$à5@4‚·FHb)àðEž¦Ì2RˆrùtY²fÈ
+\ áv ‡¥P^ rA4Ä‹z¾ FE-¦ô^½Wæ=³³ÃjŠ²:t— h‰kÞ³ô_^ý’SgLð7m96»|ó˜ó‡‰oÿ?¾÷>R½ÙöòðY«æü©~D¿uܳðúø'’ûuAõ ú“âí?t §Ãu–Vë¦HÄJÖbÒ85J§^­©CJ%k2ÕÙ9¶.QuQÿ¶p¹ñ÷|÷*÷÷nÖ]Ü ©±úþY: æHˆåV¡ïÁÖu=‚×á)a
+T»~ÕG‰P9,p=ĉt…|¤}e‚dE$pÆø„˜]¼1BñR‚P‹±B-£uèkC¤©óql-]ÊZ+Ekj‘Ã)å%åuð*e×Õ Ù*}ÙYKFHÕ»³
+“ ÏEfÙ€¾“Qs»D»ÔvŽ·%è4ñ± œ]øEµ¸‹)¡¹Ô
+Aƒ§(†Ý<ˆ›C¾â¼Ã1Žÿå6G56b/õ Ú²ØWŽÏœhÇY$‰ÅÑ3…™Ñ;m—"?Žú[äߢ”Ñh„ðn¢…aýd²ÇHp³ìb®Ãh*×äpØj?f<{±Kok2žùï;cøa!=G¹ì¯CŠO^8­Õ¦Ñj­ê¬±éJ¨«Bi !+CIÚá®`ƒzf8øÖŒ_¸q¹Û¨©Z¶Í[Ôø§÷±â‡ã¥=._Æ/Dxxé¨^‹ªKgÇìñ½5ì{zä؇ …ž†ªa¾'A÷`Yk=CÖ)ñb¶FX‡kÉCâZżâˆÃä4þ#¹Ä^´JA©àËÎ00„áE%#Ó  ÃDÅdžã Æ”aúñ“é­dÂ7#•t1à |(ß
+!-Ì›WˆÙÙ˜G•¸“hº™XÆ˨ñÏ'ñÏïo
+|ºéuüêeîôÏ9ø… äµT7Qÿv<ànÝ”†~öô²¨âUãTë ŠFe£êiÍ“Ý_L9ÈÔ|£ùZûû?"¾IùYó£öç“F£L!óEut¼:Í÷ Nóã¯=k±a’?Ù 6afô³É3uÅéqñsÀÛì±é‡»VPVRÔÕ4äÖ¤Ú®Itq‡ðy™…¨ ebxŽgyÂ;bœ1±1 ÖD2J ß-©kR—$†·©¢1.&zN4%/Â)šä2&J´.BªÞ½'I ‹PwmjÖ¨‘D]°¼„v“?²«M—·2„‡
+D½3ƸXËÄ,&
+ý~Tì²Ï‹b_]V`””aËVó=MÑŒ&2"*‚ÀT8x‰·Ú,6³á•
+•B­`øhÆ^†L8E1eȦ0–…œ™ÔÁ¡*=1de²{‚ᶚ©*§r"Y©Êf<ÑüÄ÷”—N¹×‹™M»Þ<µgFkÏü¼º§Ôu švï\œ²{'Λ6½"÷ÐÄûî¹ïŸ+ƒß??zÂ`yž(²Àw*4“Äs“EQÃNæW*&«€y^ažEJ¬,Ö°Š9ô-T¤~òFÈÎ…9ü¸p°ràB{y¡
+¶L˜®®Ð-涪ÓíC{ðN²K8,ØyA­á
+YVÔ¦¸¡
+?yÊr£bõá'[=i#V3…çq`ŽJ°ª¢àa™)‚eå•k5ˆN-
+D}„øŠL:¨Ô3,ÑÑ+D&5c LnÀš çk¡Mô>©©¡M
+´ÓíÂÀ¯6ˆˆ¤[úÛ¼ŠÁÛ`>¿5c'óäGº‡³?x‰±Ü…·AÆ["Å›C,à°âwñ΢lÄX[
+£÷Ú„L/çíÚ•Q©’K£cüx•G‡=‰%‰ó7%r‰Å9f?îëQõ¨B<拲x©#
+ÅQa÷Rç$ÈquÈÊöï–aw³RD¼F­UëÔ ët9 ŸÁB<'ÙUpd”»›c`š*öð¡t.sRGê'`gRÜ”&¤øÂÊ ä˜º$ݺ%u„
+†¬ž˜ôÄ™ÕlI®Æ=“1‚ AB¶™ç¬Ì¸ŒŒ°câ¢;o+PFá–l¡­² ׇ"0ÐÌ€i/m8…Yjví1h_åê'8.-š—Ô]"ŒI†©™y3<½Ï½yß}ýÖ=8¦ÿîÚøúÛ£Mqy{S¢}™÷û‚¹99f½QYãÌú • œ‘Z—ýí_±¥°ÞfäB÷Œ}L×(öª÷jöF^R_Ô\Ô~)Fyì’Ã#:ºŠFg·¸¢× bäX#‚ãl÷Jª¨*UqÂ¥æÏÉ,{;e[ÂÎg¶È}íÊíMºp@ |¥«¿
+sc"b:º*„ÐEùpŒN‘j»E+¾°ŸÓAjg,/ÄòŽjÎ)¸ªQ¬‹çn“Zn!émVƒ½šµé-ÕÈj1;ë©H[Áœ
+rœf–yaÝ‚±sCVfÿIµzpóÌ#ç—æ¿<eØ£Åêø…uýçìx ´`Ïp5Ÿ4ž­ª
+^þgðß/ŒßÛ[‡#‹‹O];÷òÔ¹ G/
+pÒ³FÒñß\¼;d[ÞŸÌBÙìˆW^~ü'bËK¯¼¾öÀ[¿¶©Õ‡³0<š¹³ðó×O^â‰û÷¬O`•gÚ©Ø©ÜyJ{JwJ:e=e;ë|/Rù´;<.
+B½®¢¤×
+„„7–BÁg8V‹·GóOIŠPÛ&`ï|z¸Ê®‰œ€£‘²²Ã æ€¡M¤x9Àr¢¬L4Лce¥…cCRÃgF Ý<$øNð¶}òû@”úê³Û^ Dõú™•O$éE‹÷þçwxÌwÁùïoŠÛ¢ž]»»Ó×næ ÀŸYé‰5ŒÎ«ÄV²‚±˜Í,ËðHiµ õ d²—ršv‘û!E´áÒÎMbêÚH5}çólÔ¿¡«(Ñ'#úд#$#¯0õF3!8•&2ò:Ýr a”ì eeÊ«,‹‘¼Ï@Í25Ǹ‹ÅyþÕí›ݸa`l4?14V/<suÒÓ½£î™¸¶ñÖ<*GË‚“؞콨 Êƹïã¶ÇSwØv¤2·¥œÉúKÊ'YW{üÐC¥JÇ©ž ½ÃÑ}˜ˆõltŒ£»ªAßÝ!8øŒ5z%ëMÔu›¥PÎr<£(Õ9ñýÎmÎWœÇœ¬³8?ƒè“-UZ²bkQN‡ »výjX„¤Àõ«R(Ô9’®Rñéˆ×óRÒ] ;'š-&‹ÑÂ
+4²Yüx½G­à1Y! ¡¨ 
+£RŽ¾Î3Ú£H%Û¨ *ËÛ@Gt¨*v!WŒºˆ—oGz&+ÃLrèÓË7™}¿¼ÁeÞ¼Ie¦1ècVÂØV‰Vr‹XÃGØéxÚH›Z³B§åy¯E)ãd·=£V•J’®8ûñœMQÔ‹ß? ø²#ìáp­‰ÞÌäV(E%¨3¸J=ΟLtcVØ%ëÙ3KF»ƒÓ
+9=ô‘ñ¯x‘ŠÁXyŽà›¶m߸qû6;îà^ÁS@ðdã•“'®\9qòŠì_·Êó£1×çžâÇT¸VÜ«‚¨+ò£Hp¨í:XGˆ¶ FÖÎ!Þ2³ ŽÐŠzu*¤§YYgœEÌ äNœ†=àĹËCó•í}ÞÕŽIË&?hîvœE­Z¥õŽÐÒPK¤¡–Š†ZŠß µ8>–£¡/‡Zw®yȵ–lV= µ$9ÔÒî
+µŒ\qG¤eÕëï µZj©oGZÁ…Ü[wZÁdkg¨Eß
+©œ ³)8öÈøÊÆ”ø²£ã@m”¯°Ï>¥\XèCuàQÐÀ· úƒg€J=Öýxü=W,b%cqØ”*Õ*‡Óäp8•’el^ƒÀxUòiùœ_WÜ-r­îTÔ5¬$‡]mv_ mÍ_Ëè­ô[ù…[ÔñBÝíÍ´'°z»>rbø XtÁ)¢'!AHÅÅ3àVLÀ®XQ¥™€¢c4jyIåS‡‚ =E=‚OH„oøY}GoµXáK÷ŠÝ®£Ý]·Ñå®ù rÀ€.y6>öæs•Ëc¢ÇÿôxV浯Ž&·”ÎÎO‰s'Æ X±n¿Ú½½÷¨¾]c1÷f,Y
+hö
+µ.æ]Ì Eô*lN«Éh6ZŒO
+=“®ôÅR/0ì{Wà¯ÓÙ¾·¶2Óy#D{ù9:à¦ÃÄ3bˆfˆ–$kâ´¹8KÈVöRgé
+Ùb¡H¬¬,Ò Òz¯Â«ôª§ó5ü“Â>qŸâ¨Ø¦8ÃΈg—¸?‹+þ&~­ù‰u‹ƒ~ò¬GGŸ R-#²‘„%~òŒ'ë·O
+ø;ž(ó¤à„G…U~ò´G]zXpb}*Bžn)¢ j>›üÄ€ÿÅCƒã+NœøÕC,*kŽÛ©O æøï=+8wêPyýØafû–Þ8F>
+ýìÙÌmÁ8G˜!ìcw)ÛØ·˜3ÜIÕGÌÇìÇÜGâ•FÄ
+FÁª8…ȱŒÈq!€(@I*ÕF„M°‚È2Ì*¢0aÅ
+Å*F41b¨ˆf%‹Ãñ áE%ð OT
+"{‰N‘ˆ$äû–€÷Ë!50HŸ¶ó¾'l·”`Í“)aÍåè“J¾'¤I҉ГK1Vˆá°¢
+ý!´Ž¬ãÙ´„,ákDˆS.ðù|^™Çè×ÁÈ5çÞÄÉØøfp~êFð­à»$žØƒóð#¯ãmÁ)@·±`÷ŸºÑ OÎ*ÕNéÃõásÔ9ÚÁâq¿AX§zBu˜;̨ýZõµZ!XµD„9«•Z¥T‹H€¸ñ[Ï
+Éâ7ÁK,„h¨7šî‰ŠpFävÍeü2G=­Mti»'w_™äLÆÉ~<ÞcìÝI1Ñ}Еž¸× ü*Ûå'Þæä<éò­¼ð¯lB/úCÐÓñž‡Œ½|’ßj7‡Ì“5ôÊk ‘_Ë‘_yÊ0‡Þ†
+½¸sû%ÙÄÄÐ+R,±§\iU»ï:ô^—ʪì1»jÄœgšÆk]BÒ$ïĉމɂK;¾ùi>©qìpgÞú)y3&Úì§÷ë^PŸ›9$®±h툼!-‰]òŠ2{õIìÒ2$oÄÚ"ùúà%æk Ešæ‰09M=‰”°
+>ér˦ÒG2o†³Ð?aÀq‚ŠÙ}º¼J”ûBÅ‚á4?0>}Y{{p‡„Ùp©¸ý· ‡‚#èÖöööO¹;ÿ‘#ü¿<±çî*»t¼Vò:GÛæ¡6´}ƒæa-z½…¶£Ç­ÆÉ-éÿ ´¡é=4Þõ}åÜOí/CRÅWQ1ÝÅ‘?kzÝ/ÿ|:Wèœ}
+™J¶’Cä<9ÏôbV2×ÙíìÜ ^ËOxa_8΋C!íST)¾T|©LÓä;ÒU¦œš ]¦I½4œv©/jH8½£]ª½¤k”LÒrýlý%ƒÅ°Æð½1Âø²ÉfZkN3_²¤YÎXÓ­Ï[¿·5Ø“í‡ì‡"ò ½)ý_’¦…e犲Á÷
+«eü¹¿‡aZ~S†e<yw†r>u¯³GnngÿŠò²Ùó9œƒçÍžSVí,š[šâ9eAŠ³ ¬:Å™ž“›œ™ž–âì7{¶sTEùŒÕÎQeÕeU5eÓRœr'iÝåžÆ,™_æ=oöÂóæV'‡:ú½»†.,­˜6Å9zÊÜjù¦EU ʪF••/œ=¥ê÷+áÚ^Îþ ƒ{ɘÿ÷ Ç•UUÎ)=³C-iÃî·†
+÷8+ªSœUeåÕPX6͹ jÊ´²9Sªf9çMÿ}â ¹ ö«Ð4Í!Z(ÿ=Ê4¸r¢Ñpž‹ªƒ–€·^†AË
+Òêµ÷ú™`ëeK]CÙ
+o?·<ãäIôŸÂÁ wI#ºÇwp´ÃÁ¢cd3”nïLg©päÃ1ŽûÈæCüX‡Â¡hð“,Ïp¡áC¡a›ÐP/4Ô
+ ‹„†2¡¡Dh𠄆{…8Ñ%:Å1JŒm¢E4‰Qµ¢ZTŠ¢È‹¬HD$Ú ˜iÇÈ8ð ï)Àh=ãê…ÕCšŽ—¢!SM7F»ýXyÏ„&ÎÝ7† !cúÛÚ Q{íÖš|[¾aÈèñmÈÔþ©§ L9>à%šñ,=³2,z&¡ ¢¯>w`ÁïœJî½I¿ýØî€ñ‘KŽÁòmÇݔϞC‚ãkÁQ-È-†Œ† rƒ¹AmÐðµÐn`‹nzðoÚímJ§@{´wHÓC£“`NÉà‚62˜fÞñmL>ºX8Š–3ù^ï?~Un<zW;åûx m‡×(ߧíš^”›‘âP³¢p36‘Óf¤˜M¼£Èw14CU4“›¡RyÔÒp³£¡fsHm6“f´Ùz4Gn6‡]/7sÓfÍ^oaAó/mÒüŒ4{Ÿ‘q'[o×O–ëÛÔ,òÊ]xÕìoÚ,þÝ6ÕðA¿Z¡êÉÕ“qÒÿôS}÷eYÿ¤¤6ô:Îi^¾žþQU‰»° Ž’¦õ53lM«¦:mh9Î ÿ‡UBÉÔÒ4ŸRæÇ9¦åîgóëë[ß´žV¿î.hFë ÇŒo^ï)+hyÝóz¡{J·µ|ßî+w ·®c¸æÝû~§³}´³Ýt¬ò+¿S}…V—Ó±®Ð±®Ð±Ê=åòX¸°btàÜñÍ"êï0)”·•Ò0`|Id¬·¿Ešß· .ÚzÇÚVFaÞƒTIÞ&µ»“ZÕ½_÷~´
+ä‹Vi韅«l+{ÇFÁ{ÂUëAtï^’ê@ø…ÿX‚­o
+endstream
+endobj
+349 0 obj
+<</Subtype /CIDFontType0C
+/Length 4459
+/Filter /FlateDecode
+>>stream
+xÚ}XyXG–o™Ã•˜È M°zÓM2¹'“Ügì„àؘ؃¯ îC ! Ýè¾ ƒC°@€Á`ƒÁàØ1>°;ìÄ™‰“ÌÌ&™/sdf2%¶½_¶Ä\»쪿¯¿®ª®zõÞïW¿÷Z ,1c0Ä®¼}»~ž¹qK‡Ï8Üï©,‡[YÞû·ØýÖ2Fb1ŠK_{ !––¨MYs:%ñAúÃÿì_I÷c£u}üþé=P›ò zJ½òP¼c1åalíŒX:ööëiÿ·Í×KxE¥Y%¥µ¢J‘ôÙŒM›6máñ¥‚Êò
+Qú3/¾øü“éÏ¢¾ôÕ×ÒwK…¢ÒazVm1OÀç 8¢Ò’Œô×¹ÜôÕ ÂtA©°T ŽwþÓTz¥0½´RTQ*Hç ñòJ´„ ´$]$à””ÖpÕé¼øÈÿh–ý?ÖÒ+kÓÑZé{j+ã­Ý"Ô)LçÔ–<Vá­Z)æÕ׊•¥ÂŒíù›þ7ÿW†~
+°}Ø· (ÌèGaT<à;0 Ö‰Ýdt¬a®éLÈLø*Q—øE’79%¹u­<
+Ëþš:ñý¾ïñk0#ö“Õ—jÑKáð@·6ZLáŸï¢?Dݵ«s½‘Õn&ZÀ6i°wj°Øx’áX©Hh›f™ä&…I†ŽÙŽLœ8’ò #àØýÏ8Ò¦a
+8ï`© µ£ ¨]j'10ëõ£Ì~S»Ñ´U|]a2ÛžúóÜÚ÷R·ÔÕàx¤~o’>y€_ÕQJlÜJßñb Õ§ÞYÆV8”n éç IBF½ùÓWTô°FeÕÝ”¾FºE'ùR:‘f d
+dÚ¿:M½>vy–`
+´'¹âq,a†$©0¶Œáãp’þâ,êý-ðèÕí:¢iŸJõ eSÚU6Åî4ü.?qûɺ‡~ h@—àÁÞ÷’ª££Ò#Ä箜RKÁ¯O±}¦½—TDø!¡díØ÷Ôjœ¶³ªŠûå”;Ô6ëòƒó]0Þsµ‰ùyŠ—¸9§¾üà.‚Iߧ= qÖ*Ií¾_ë†LÖ³W
+/œºÜ:NÆãeh²’<—8Äí½|%òÙÈ4Õè ‡Ç$¦f
+mw÷qtüšGÃóVoì¯Ïͧ²¶
+Ía3UGŽ÷KR;–p.|¦°Tùe&Ž³o LQŸÉ‡ÀÑp…†&ÂlBà—aRL¼¼:U›žhÚ#×<Oá*!ù+§ü5ñS²-ôÉŠ`ñÈ›tâóÕTC¾*§­t(ZÁÚ!IØ4i»qâú¯
+ȵ¤~-¾¼«ºAS% *£@ÁÞ±\öøÖÇ¿\ŒH‹|¤ÈWáÎE‡la‹;ßbz|ÑnòÚ÷Ï„€ðhÛÌQv´q@ÓNÚœQÛˆ-jÛ` Ø°Ô=e•zƒÕn¤ð~§Zâ¬!è»^§×<I-5±¾9ñÉÕ®NÜNz¥q {cþ›9‡øçI|YÛ6W=™›œ<2Þ½8I†LCÆA#ø°©GWÊf:gkÅâv†ÑÁü¯eüøê
+“UCß÷ÄíM¢M Ücí!¼c¸¾õ(˜Àäï/Ý^©´N½_' ðÊ=ÕËö•½Cæ&¢çš}ã4ûâdMÕ|ƒš0š;uþhÞ3ÅöZÚ -¤2Z;*,›…Ï<¤·§…¿yòψçú·¤ªŸSq–+I&­kœá‹cÛ$0é©õg¼f¯$°ÊÅ<Q]H8ÐßÛ××¥ˆTSoÑ–€Nª¦7ˆJwXæ"ÆNxÚ'(|Ê‚Tí¦±’§S"Õs8íTÛì,,ëùðäѸW©yéŽUiS&mhœ]yTÂè‡Â‹õ,.öÜí{„
+·}„o„)±$V ÊèçëŸ==V[ˆòŽ÷Ádï8çÿL>Gtyä
+‰f·®–Ò쫦ïS€žUšû/¯úÎ|÷9ÿ÷pí"ì•Êjå9z¥>P—@Qºrqü˜ÇwœÂ[Ì>sm•
+ð¯=z¢ž«Q?G!Ö(Ø¿tUЙh]9½}C\ÙBTàFLð]üÁaÍ0qkþƒ3ÔÑ;ý»Íä3´’ªHuXäxÛ²mßæÇ
+} ׌íÝz”ûZ]¡©^¶[+må;v>›CéI(!Î{ÆšƒƒÂ§' »åoÿƒtªvJ(Ž‘SÈTpN}íûk¢ÜGà4Ë´ÙÚ(çˆcÜ9
+𾶆OQRfWR•²¢â½ìí“Ây‰NJ"J»F-mP‘9ß(""W‹š2:ÌN[·˜¤”[ÍJ
+¯2¡«àƒ‰ÆqbþHK BMööŽÏ°ÏG¶EH¼ïP§ mŒ=ÐÙÝá%==Ž
+ØR§²•h∴ËtÜvuzùns^¡}WW†ªgUs@é"fZ:¦(t˜â… ¦‚oÐÆk tœ‚_ž‚ªÖY Y-BJ³§Žf6rÞ^ ¤èÄB¦lë µL4R­spM×EÐjRøu„!G¡zƒ²¯ž.À,ô‰ûıŒ®Ô/®ÀC‹8ÿ÷±D–q‹–æØ2
+ÎÀ`4ÚÜlûåv˜×ü;ÐÖ$kG¬Ê”k ºÆ³R×·ãvCâØëT_þæÜ{¾òž¿ƒQžm¢m9³
+
+‡ËL Ï*ÆyË6WÚ­[—&N†AÈÈ‹¨ü…º6s7Å̦Eâ•ŸJ_^…Ù&|‰”¼^×GsÚ_¬¯*¯ä‰jEÕõ18†jƒ„gzxnšºyëȘý
+Œ/ÏÃ]e7 {uùš¦|2—MyÞ•æ²9Mzöâ‡kwN}·
+dÒ¬Õ¯xþ<Ö8 ?…ÏTJR»bvüëØ+?eíÌ‘í/ ö«ÈøWuXg‰í™QuAÊÅ£_æÒ™UôÛào: ³£03_
+ú Õ.”Ý;.bt¶Ù?·šnÌ~ )â„ÑÏîøÇŸ|ÛÞq)ugõVÿ~¢"—55Ö¤é¡TùªlùÛ,/Y³,í7[§‡Ž¢’6Ú6F0ãlÝ#R¹ðWÑ ¿;UÚ±r¿Ÿ6‡àž¶Smt•/™6{ÏÖJºVR´¹fu-xi™ÐmÝwlÆØ)wÎÜy}¼~oLÍúo§îT
+endstream
+endobj
+350 0 obj
+<</Subtype /CIDFontType0C
+/Length 9241
+/Filter /FlateDecode
+>>stream
+xÚ…z X×ú÷ŒŒ­M[¦iq¦¡ÚZ[«µ­Z[÷ZÅ­n ÈN€°6$3“€ì$aß—@}ÄÝÖjµ®Ukµ½·½Úk½·÷Ä;þÿ|gööÞï{î—ðð™œó®¿÷}g 3f àU—Í®Ÿzº-Üêí/—ûGì’G-Ú# ‰ð—ó÷×Y_µ¾ÆÌ&­$b¥Vg;ëëöV§ã³gH¸ ÿ<þøŸÂ×DPü<üm·ðEë?gÏ…½3oöü…y³ßDìò*ò:ò6²±
+žàÿEâú ¨
+ÙIì¡2ð傸ð!ü.­t
+îÚͳ“ØYíßµ÷µO³´ÿÛŒOgü*,›ùÊ̇t=úã¬ögf=“ñìÛÏÖÎ^9ûñså¢ù¢ñç÷¾ðæ þ/È_D^¬{ñ-ØrìäKŹ/Û½œøÊWFœŽÏIœó
+¸5\¡PÄŠ8mæ#ëéÇÛ¿½;¶?~Kœº==KAå¹âfê6éwz]·³”­Ó•åTͪcX†Ä¾óyrZ,UDÉ£jâ›[ªkëk“›B)Ø—1ê=
+F@L¿cÛ Å%à~`à,Œƒ'âï»zÆÏãÝŠö¨²FRäM` ž¾É±‘”,6&À ßÞçÝ%#ÕØÐ/÷M«ðÝÞCad|ÛpÊI<{éx»…Â’ëdµÒjy;®Ô¡¬1”áku¬L]Q&¥¬ŽiM¬êi¿Psï„Î Þ5Ñe¨,’–IA§2É)øq0¡³hJ½_¶.2ØûèÚ†Q¬#Àbqsame%Y^^SØDÔÕe%VP剅±Qø΀à푤[GHËþ'¡blè@pIuY—ÔÑ_?yd¨†üÆóöÊóÃ?—¬'DÜùÇ;·/Úÿøx§846Ò/ŸªÎ©IÆ#“#Dé…i…éèÉæáÓçñ©9‚q{¸·ÿUpá¢ýÐ&æRÀóܳ?­%‹‹ŠK
+ŠÐõçæƒY n?ƒ×ož"³J–d£œ çÀ-ã|q~ýüÇ÷àó‹ö onxŸ³û’<˜q0ý`:zs럸W¹}8º€{fõ²êP”þõ*x¼àËã U —'S:2‰,LG°h°ßš/n5ËÍò¢âBC~Ip¤:¸ÚRÓYm©Î.Í(Ë* ‘‡Êu=l®Í:È„¯Ùs1‹ÎŸ‡Ö…Ö†Ôf¥gª²T–øNøVHâ$ñù©…ªÂ´ö:s­¹¥ý´þZ?mbÊX‹¦{é^m*âê¹·N
+“’Œ7´²MCÌaÈhÀßתŽ›†æ€ƒ¬0WG«YÊè_ájôFµ,­Ñ«5«k€hé`¶Œ1ðú­`óR ß 6ωW0tå¹,æØÜ&¸ŠÖÒ((´ªÅ­‹s–÷P.x¦†Öåꨶ{‡Á ó¨h‚ð•ý“È#^Å%éˆO¿#x~ÙÁ¼œŽ\ó¿…ɆlZCñƒLkÅ5ºŽÀ"ÁÂWÁŒϽ_LrÀd_ÖŒƒ ò©&«¼vç-#<>¡i_
+S¨hhïeðI¿ƒZKkHLvÛzDÌ”ëZ‰ßFöoZ³ÚóyËfSž3tùŒ™ÀÌàÁõ;Þ^¼rKB~3K‰Îe·ŽM(G¾Ã΀ñ½ËÎzþã”ç‰ãÊ[.SZcNEŽUبØIlÙZßBy«&îà?™¯ ûûNT%Ì jU5¥×ææ°âT¡«Ò™ô(fÑLhŽ©'Pì|q¬gÑ^â³eÊÝ©Owíz‡£pXÏôû MÚ½Í;åýi]ÖÛ˜i¸_¬¢“ gúXsíQ¦‹øårUï êæ©Þ¿عþ¼b˜lß±Õĉˆ5ŸÒô^
+‹ ULr2þÍ#Zø"1Ómë¨X_TÃ6ú2.¨Ÿ:ãÚ°ƒ›¯_yÀ ôÝûá’YØ@‰,ôˆç(¼
+¹5ªý{6”žÚEzŒ&\¸‹ÿ©õêÑqr`èŒiŒÀ~î²d%ÔS‡rØ,6 )cƒú¤`V:2 2‡½ǼÀ%ù»?>(†…ºÕÜÍZº; [ |Áù
+6¯”í"†«Ò¤5T«ÇIîÕvo´¬aË©ª¦œÀd°2Ã/®¦e•R÷åǼªÐ<‡«Í'NßÅ¿v=µ¥‚,õ
+×í!¶|FÓ®Ö;mD;x[#Ö*×µÎX´Óg%ç(S2:¨}Lƨõ‹Ñøǯ®€¨+ØÕ`³X©MÐ$jr÷ç¹åº£*óÙŒaâæ±
+K7Õi®žÀÜÝ÷V9o Ìt·˜«ÊɪÚöÂv¢¥![e¢tZZ—mZ;l…Þ¤C±~í°z4gÅ®–ƺz.»“"ƒ©(™‡¾ôŒ÷Ý@ò¾Ï`ÊR<<36.–ŒóM9@„•&R9:m.‡Š†§=l÷Œ¼
+ÕWW³w˜YôTò/ÌŸ´[4 QÁ£oÁÕsöàsX#îꧫV íÈ„S=¥æ²Z5Å}çðAágÇÜÈ€žIˆ›c­ÍMTGgÛ—,èÀ]§³p=L…2<"˜ ðgˆ)Ûni!‚i žÉpN ñ÷ä»båd\¼,n+±YÚT«¤¢ÛSºÙ¨è·ŒG“‚'Ó£œÀºÄÙ?~ÆúPÌkU†GI™/÷S»ÞÕu¬VC¥¸ûq/ĺD­–.’.Csf†ý)òì^Ò¨?x-½ëÞÉæPïý̾P Iغ-$xzVËR ·,jþ¨Óy{¥‡ ÕõlÑÿ· îzd¾Ûõkë-XÓþ·V4ÉSw=~Èíÿ9ëJExÒAÓ®úž7*•±;šsHÙš¸*~IühöL°zðòKÐ4È+R^Üëë8•'÷&¼§x”|3é®òNòŸ³þ¢wšÂ¹·'ã žÊ~›Æ´–ªX^¾¼bE7«‘›ÝÊ=‹VÖ1l15æõè¡™ÜÊqÎe˜[€ÖÖð÷ÚÒ°Æ¿×Þ«ý®þ>¤Žîu‚"ë {pÓ]\žo,0쯺—]Ø简ð{˜¥ÌHÎêYxš›×;”›u‰[5ÄÍ@EJ0Vý§3öZ5ã¢mcàÕ^ðö AÓ·`Ë{0Ð..M(J.ÊDûŽæ–QeŒ±߬fkòŠ(¶‡³‡p`¿stýª=>~þdQj©ª8µ˜ûš{ˆÓu~¯«©L9#%8œÝ±Êßs6`¸£#¿ó’ÛtJ<`±Üm®¢é<2š JÄs­FKÆH|U2"(ªº…ef ÊM
+ëì 6Áñò5z«
+ÚÅEqEª¢ƒhשâCF
+“•2ÆRÎ
+ìÓƒb° ×Ó¬6sAb¶ Ë­ŠwÍ--»žÙÌ®™£Ö‹eÒÂbÛ~y”ò? ß¾ßZéÑLF´ô)‰ö*}Ï-J{ZœE«sÔd\XH²?^Ú¨ âZ2ÛGðc%ݵ­dkMôEG[FrÅ®e–|ˆ‹>Í8
+V €—¡7@èè717ëârðrï)CÃQR[¦6唡ªPw¥7~ÈIÅ5¤÷°GÑ3À‰Õ ŠØŠš¼´?sXf![c+Ü Nü‡p/SÀ¸Š›+Ó ”AY.Åæh’Ú=ŸÐ{ýh}K©­0Õ›!­ßÎöƒ‹G€ßiÁëö`ã ˜ý•Ž?àlï)2\#[eÄioÆ‹ šßPÛŠV–5Vuíišª¬¸Üb¥Ċ!|öªöì£$~)!œ
+–¡Êuz"¾îë@0{âhQyùUSûè8Þ•RQIF—{çm€|ñNú‚Üp}=^VWQ[A~§¬mkG›[ ƒ¸%µ#¾ŠÌu¨gªìR:kb`/A±{éáZW­ŸÍÎbt)ìLznZL^ÁÍÞðÉR
+*¶zدOAªÀ›bxïzwïisUZ¢4&äË%ø'¾~®$ü’‡wËwTž biBLh"™á%!Ü6UŽ¶µÖ tQ•´™Q£w²ë3½qQŒÍÕ““È|ý}'¸¾w H¯Â‘f…ÕAÌ;ýdË߃o$æ‘pæIƒÃ¨ê
+íÄm`8Ím mÞÞ£±MT*¼¹“mêêaÚà
+[Õð2 f²×ɦî£õÝDy£:ÊDâ˜0ϽÌú½¸áîâ#•Ì¦’-¶­­“iáCoÓë5ööe¼ISŸ^IZâƒÌ+´»_§D\öÞåYɪt¤·. ¿9^ÿÇGW±~ðêãÙâày”¬&¶¥¥º¦¥:µ9˜Â.I¹Z1wfjHݬB ¦àmÖléaZy‘e|£^ˆuÃj¶Øá:Z=?1ÛÄ.ÙꙈkàB`·Ú9}.×
+&N²Y»e*•]Ÿ®®7ÃÕ]¿¯v«Ûï耀¾BÖ·Ôwõ²2ªHÁF…á{™Õô–)¹Bf’ÊoÐØƶµóX°áh›NxUï2Þx°NUCÖ%‡u¹±9;Rš™°“¦„ô¹R…vÏ»”š…’´åêJ­ÕA7d-IÈÉtŽwt*.ê‚s2?œ
+V¦#=a'½ "®aWy°Ü¡–gG¼ Rø°4·³­=‚ØtØ
+8Ò’ŽŒïGé|Çî[@u S
+Ë/)4öVáXÎ!U\^<áÃÍØsRˆÑô=®­ç»ÑÙ‹ù´¬nRñ5kVÆ
+U«!AÀÎÓŠxZÁŸQ)“ñšz¦’Ó;#béUûñ6®>–Ä,òÆFºŠeL€«#‚[WÏ{«]¯¸X^¬,Ê@û'ŠsK(Ö69o¦…9ÚÜ"
+ÌÒ q(—&S?ÐO³Ò³Zá:–s Wþ‰¡DTlaC•\Ï6öà·Øº+6MÓ>ÔС$m#£§háú£e¸ËéM纪tGî’"Ÿb…„œZòØlo‚Pæû])ÍDKƒéb*“ŽóÖ3*=Xy z“|KJ˜Ò2Ê”ÞÔž¸¯ã/¨†²kÏélM° d$R)Í3U8W™ZËR¥Á†€Æ-ï›Ì¢UÕ [Fu^®j:×ýcËŲ&È€—§¿EŽ=T øöON^œ.0Öc.W[ŸcÌT:+bèØЩV ­;6Åýiê`hê>åη i²+T Œ»äÖÇ_Dãä AIºqoÈÖAþžÑ•:‘v Ŷ¥žJ=©©¾ðTÿ`¨DK`®|Wáƒ~k-Uìop5m6î¨ÜX¿­ªà ÀÍ—O綻hÞÌæ×Ûæ·¿ƒÖ•3¬ª?Wu¢æ<Š¹4ß«<SbAE¾pÀ¼1àȀϸÅÀ§øNN~ÎØšŽ`÷Ø^ñ”£kÙ:s;Ó4 Y7X ÿÜÐÑ=ÖÑ ´¶ûÔ¡­É!ܵ<Ê“RñöÃŒ¥­eêY\²OÚ·ÿ+ïãsò°K'¿8Z×8ës
+ZMÇ„I‡L>¢åÏ5àp’(“{A_…÷K•õÇmÓ Ü*L„HÃø@Út‚Ôki–j÷évïuC³ pß½o§$@«QkÕ4*råâÖÿ° èŸOÁÿʧ([>ENouJc;½€ùªòŠÙ¤Ø“œè C’4 ‰?6eð`ãïñ
+`lñ˜ŠÆ0TCÇç“1ÐäY·¥im펶•I¢Âc##¢¥qhj„‰¬74u´ ŽÝ¸>j½bùÁ|³fØf
+|§Ž” ”•¡Ë™œ®±ç1GÁcðà–=p9!®/j)m2 @pbüÔ¼-ÍSO6D݉¹;wKdTQFYjI&ÚÑ4Ô>AÔ7g)ª¨RU¡"ßâs`±+¨Ø•«ÌS楠EÇ™c—À«pÄ×™ŠJ|#·ö„Fè€טGpãëÉÉA¾ZnÕÒ®s›Å5 ¬¾š:Ëž8†WžcŒ|ÆšL°WÇ1¬É•Ì/àll +'|÷ïÛ¼ýcwï­Òù‰ Jˆö&Ì6{˜´+lè¹ÖN±†;!Tr‹XÖ—Rkuyzªá°y¨óÈàÙ†ÎÞ TTÄm8º…ÇVäšýo`™XWÕ©k!ÀŒ‰ý+½•²h**Â7eì[XGe§ä$ç$£ªæÑÌâö©êŽ>j ³éä9ü—Ûœsx£M$ F † G/³w˜k¬®‚©`+Pï-L@è'L ‘º<u~ÆZ(׊œµ¾foiµ/â|×q·qÎU™ÕÙå9ÇÁË`(½–©MÙ•Ù4Зñüx ³•Ð(µqtB' –±gá.£À2$8q 07ì­/‘8ù“à­~’à‘»SòRò“
+“ϾhBÏŸž
+qw³2ºŠª›ìÆ2t¹/Ì-ʇE–T'RŠ•¹5tÖ7’U• Å-„Èšý‡§AÓuà³tä$X3ìÈ?¸P]aW±QpÝz_|çÏ<\+µùÙi8–ʉ.›æVO¸°ÑT¾§5 ²µÝü™ –
+™Z)¾Fÿÿ?u¡yš‡þÇÁ –ú_Ž^¦^àT¬û…½ _ÉÐþT·à?ž‘¸©Ýʵ•t¹ÖxŸFr¨B‡êlÏH°Ñ§OI>±1ÌÿÇs¡ˆÿ÷ϬÄìù¯!²”ÿ·Î*¿VÆiëÀî²þb. t&GW:À‹ŽFþâ–Ê3E\RÊ•TÍêæÚ³à‡—¬ñÿ²wþ#
+endstream
+endobj
+351 0 obj
+<</Subtype /CIDFontType0C
+/Length 3913
+/Filter /FlateDecode
+>>stream
+xÚXytg’oÅî$DIÜÑKèÝJ67BÈÁ51$ÁIÀàßà Û±eèð-:º[²dË–,Û’oÉÆwŒÁÜ ™Ì L dLîå}b:ïe¿6dwöÝ7­÷ôº¿îúªêWU¿ªnŠ‚·DlÞ´("'Mž¦T¦åG)e‹ß‘ågò77Ÿ.dæ“A R‚ äà3!Á'BÏÝÅýøtèð?
+"ˆÀö(ÿæñ iþ³ðìñÅóŸãŽÎ {
+Ù†D#1H,‡ì@n n n ¾|'ø^ðs„Bð „” pÁ‰ž}àZHN胡š·„«æ­˜w+lú:ñ`æƒwb~fþûó<þˆEô´ÈýèKIÌtðÛiün:„ šïnýÕ<ظãbn-¨‚›ó8 7#üůŽ°_ç¥Îƒµ¼ž<(æϸµ\­PÄm
+÷‹~\­qç/yám`9K±UàÈ^±Gç.ª¯@/ÿ©ÑÑDa©lÝÓ…ÇY„Fš±:pvœ½}¿²nví¢ Qd“ªEÑ¢A»GfýÄ„Wšh¦ …Œ†à–o^óÁŸC¶jhª±ç$…y9ô†¸Ïï?[[ÇÐRÁèT8͘-²¢XQª ´
+O;%r®¬× hÀàF Zµá'ÁJð$X‡-ŠàËbö{^­–6p˵Æí$­ ¥rü¬YȽÄp¹—ñlóV‹‚Ķ ÆnŠÕ ‹zÆÊ÷3‡Ü>?5èïÞÛ4„¶L8§¦ñ›ÿc‰-É(6ï|•Â\àIîCqLEféR[¦«Ðê,w7õ)ûד¸×ßáì ¼%%NÊY\›ŸŒ‹$†Ÿ€ãŽ ü!¤D‹¹Ço¯¢ÑK³¤©£²§ª -“¦gi¯Ò·–vOáûí¦n²£Ñ[ÛFŒTÝ”¯¡÷óÜ£Š¯Ï&¸M\(÷0÷ %j5ü¼RDþnÐöhÁ²+]Úð°,
+DÖÀDyc¤rnµÆEb1årº€•‘,lϦ.¨2 ±ÊºüÚlbç6mF6£x-Ù3Kfï+&:Úlc×)¬£¼ò–¸œ6š-d‰BoÒz]£«’*i«Œà'ýžÒçòÖzáó•ÕɬŠÄE‰†Ÿ®_¾ó5Dg5W B bîÙŸ"ÁSS×|ÝÇISgU_%D(/²h'¡TXÛÔT©«ÌgéG¯ÿÄغ©:vbœmDgu3yCd<¹ý#‚{åyϳ(kÅmž2}UW\#×àUfS5I$Ò9=RëuùжÆf{!âV²¿!ÑåÈo‚ÐräæÒk`ñ/á_ƒÜ›à ì`®ŠÏ³ ìs|è³—°ø’Á.îN¦w·Y¯ÃK6ÚlMDÏ”Úì¤|îÀ©!ܹ'Ó™D$F•G~@a)%»—ãÕÚD“X']¨¢u„œÎ—â~¦™`W2‹WãxÐd¢YH˹ >ÈŽ=Ç ºY7.âô¿XPŽh¿
+»Áý]Ì1aÚb&ãà¶
+FªÀGfØññcÌÑÍÀmcl¬`1 ¤•a-•Ü[jS,ICÓdPe gÐÜMÐ~ Ö‡OƒÍÜ"ðTöÜÝõâ謴´û³G –FAe‘ÜÏb+WËJ ©š¬Eªl=*³Nì'N÷ÿbà"Ú>eï™( ža8¯­Š{W]@Ê-sÊ*Ù¯‚œVp¬ 9ü›˜/ÒÜ«¸™†ukÂâUàc3ìØä!f„èbÝø6+ ¶XA V-°Ñ¬ÅÀ½­©Ž¹_ç"p–ý:ˆh[á/ü*x<–
+Ù3Ö/ÿŒcçzKôídŸ2§s‘¥¯Þþeœ‡y]3qDzaUìRÊÌ
+±“×â5· Vè}5÷ŠÊ˜2ç½ú=[¤åÈ=Þb°›˜óž½—‰÷a>ÄŽŽÌ™ÑÅ;°Ë&<f½ ÷vìmj#<n³®Ö£JƳØh:œó!ã¾ðÀ$L¨)¹.6€›ÐzÆúÕ1¼ÛÔ«ë%ûµéûˆ”=•Q¯PFhñEc«ÉglEùøWs/*Ì ¤r.\ÃàØ%H`!x'x âãÓîÎ!êäÐÔ…køõÌ3;úÈŽ¬wµµ(oµ%5gã|­?v&™;r²ä8áþB¬+®õ•QÅ­{/à§ê‡š;ÈW“£™hñ4õT½º. þž)C§ ueEÆ"BÔÁ®‚gn¼«ß”á‘:Þl#~P$Å&¯É‹²Ð\#·HQÌ\ ÇOÓô¯Z¡™G1ÉÄWlgGøÔdgN2S÷‘\edÒÓd­UXÑæ7#“Í5ÜÓ1èîA½c®É ;ó »éÖ
+"­Üû µ‹ã*²K4¤®T[¥'4P
+¤÷pS¼†Yºê^Ê%CPò0v”Ÿ:;? ‹¨ _az˜v¶™ Xûܤw_£×ëAkNk=ÑÑ[A;)ìTKsàËý8æ®ÓÈ*"A]Â=ôU£0›ÇÌc|þÑÕÜK{Œ©$}/œ/@XÇ®–hûƒâ_ÃÀkÇÁ2ìpvX.–š¤Õ²j{ª=Å‘‚úUOØìéÃõž>êp÷ÞÉ£øåÄ@„\ÛZhoýÎz§ƒt8›­.ÂÕd®l j,V#kòÄ=Õ[ÓgﶣX§éã„ñ›­-Lª!"SJ‹ò¨4íÎÔ­ø‡Ÿì¼¡ ?Ó»ª”x¡ÁPVMËJ™B¯µ×RÕ5t mCEÜc†ÿ|[ÀÍð¯À[ÜËàULâ âóqvNaƒæ.S¯±­ÌÏªÊ ö¨šýÌ>v”:ÂøêðýŸÒc÷G¨äh8AÁ:þ†mCy6"±ó«ÊxÊ¢2çYä¨Ñd6“˜\K+ÍZµÈèÞ€ì_A¿ )£“¢q™MÝ'#Õ]U]lë?¼B@ÍðÓ°tCa@uàûq‹ª‘ïæ³×íõ6Ö\´f¢µ„YÁ|öÅÒ6º˜[f¦³HOä,BL·…}‰~,Ñ)«Šˆ’Ö[F•¶ñfÿÅzýœ´ÒVسiîESšKðO,ÂHzÍ:|Ë…Õ§F|¶É¯H‘´A\}ëëph>R±‰ Üc¡Ó½]¸âcZ–“Êä0ÍòdxŸEhcieH¯È¯È-Ë(Ë+Ý…VÍ«è++*›ª4ùÆ­O±~Š¦Ç0©éÉÌÇÏÅ´lØò” º`Áò]™íï÷¼îÉXŒœeØ
+¥: YT"«TCÍì¿ €N¾×¯ˆ-yŒ\ùgvvöKæ,Áv2Ý}8÷˜MÈ¡ ,¿ƒÛ,|—®)xƒ¬‘;¤vù¸sÝ„ÝÀDlÆÍÚLŠüÌÀŸ‚M!  šäs´Öö7¢w&ǧ/ãC¥{å]do~¢w+Á=òNJbåÑ´*}zÔß3Ù>I´y«J]”Ó`/-£rÞŽ'Ó”Ò’•]êÌ«S îiæØÁVøêcï³ âq4' ×ÑèœZµÚðßo„C<å·,Âœà4·N<yÜV³Ÿ:Æβ“$h9Æ°^
+2C¯/L`X)ÅW§äGÈ¢¶øíÖX")nÇöí>ܶZ•ÝטëÉG1çØÌö)Ìúx;4…Ò\q>»šI±-0Ó56+Õ6èëëó·öŽA“¸¨@B~¡p ¬üú¨˜m`½Äw“i›3J
+Ô:J«Ü]•Dä%6Ôi(ƒ¢RZ¥@‹úΕ·>ó¢ï;u ÿeÝîu]!C“öÇ>{à ûPÛ ;´g£ÞaRb×09Déâ"Ž¨\ uŸ¼ ´—Á
+ðo`]øÇMqÙÕÇJŎصڤòZ)¬]ù·®ÛÃçfÑÏÎÍ\OâöœMÞOíŽißDlŒÑd¥RÉéQ[ñ¸¦Œl2¯÷€ö01±¿ÙÛIE€Aq§·Xá¢\ªú¤ØJº¢
+וä*}i­«ŒÒ·TôŒâSõýM­¤«Ám÷"þ[ÈcAbþ áûö
+þdžpMëÝ…Íœ®¬o˜±s‘îy\ƒ/Lë»ÞÄY:Áfßéz®°å\­^y¬|˜/
+>õDpBü_k×
+endstream
+endobj
+352 0 obj
+<</Length 13019
+/Filter /FlateDecode
+>>stream
+xÚí|wœwuø÷;}vggfËl/³ýn¯ïÝí^ÓÊ©÷f7¥S±Õ,mlÀqˆ€)Á¤Ð ÂC2 KÆvè%$—PBba+B $„ŸcŒu¿÷¾3»·:I;|~¿?~ÜÞì¼}Ӿ󾯿7C(!D#÷ž,Þ¸µ§úú£•Ÿæ¯aÙ³÷ÈÔñîç~´›ÚIˆçý{oŸ±•;ÉiB¼_ƒí…ýÇ‘v½£¿ázòÀá;÷ñ7Íâ;LȪƒÓSû¾+Yß$dû»aÿÚA@HÿÍÁïoâñ̼lû{Ä×Âï_·>¶wê¿–Éo$dWÎ÷Ž#S/;Î=ÍͲû Øß>:udúCÿõؾû<!²ÿø‰éãæžÛb„L=ƒã%½™¾‘ˆTàîçvf­³¦7*ù!/r’@(åî!ä#›ˆ}-qÿ6íÚ²•,&ös÷àÅGÈøíÎJ6„ÞÊÝNløðƒwi¿³$á@\‰Hœ‡8‡Pré%œ qä…ÿœ#yrž< W‰Ddr¨ÄC¼0G>¢ƒ˜ÄO$HBÄ"a!Q#q’€‘¤Hšd`œY’#yR ER"eÒFÚI…tNÒEºIé%}@~2@IÔÉ&#d”Œ‘EdœL
+J†/L\¸ëÂ{.|àÂG.|ìÂé _xöÂÜsÂÜJpÅ ñ»aLKèºÆôJÓç`LßtÇ°£vÒ¶íŒi˜iÆ~¥}ýúKÆ´5{­;&?Œ)ÖÓ>yvÙ³[ŸzöܳO»cê…1í¹ð`˘Î_øÙsÇ4÷Ïîrýê
+27JÈůÂòEXÖ>?û|`^Lί:_=Ÿ9ÿóßø©ó|~Ûù>ÿò§O<ý¡óSOàéw<õwO}é©Ïòôƒ„<õÈSþÔOÝõÔOAOmò®ñ®òì'D=§> Ÿ¯«_U?¯¾O}ú'êõmꪯS_Ç$ñMðý.ÆÍøóŠz¤eaØë€rûèAz¸E„÷¿€xor–ÌŠ&ôØ *†o_A/ÜEžb³xðî>ò=—ßIy pü›(JÍÝ G#ß²ó IÇÉïÐí %·“%ß!?
+’ô»®Ý2u/y–É)ÊèI&­3 ŽFx†üorå©@ û?}ÿ ú úOôëôô›ôkôé?ÐÓôú$=CÏÒoѧèÓôý}”~’>F§ÿL¿Mÿ…ž§Oп¢Ÿ¢G?M?C¿K?Kÿ~~Ÿþþ+ýýýý<ýý"ý{ú%úSúeúïô?èOèé_ӯп¡Kÿ“þo:K¿Jÿ‚~Œ~œšÀ½…ô%t#-òÓ Ñ0Ð(Ñ8MÒMÓ ]K×Ñ"]O.Ò•ôwè&º™®¢“t5µQ÷Ð,ÍýFüFüFüF¼dýAÀ7Œ‚O·üÍØÅŸ‰vž¾–iãŽÂònƒß¹ö4Q7í|˜Ò7ì:Mçî;M&S€·ÉßxC×ipùm{ù¡ÉStüà:QÉÄwÚ+NñÅ[væwÙ÷Û÷¯Þw¿½Â>8µï”PdkØ0}ÿ®ûÙºó|oÛ™=µxW¢ NïÚ5çð<;Ïý»à 7»g¸™Nð<ì$v®µOñ¥M;7ï<uÏdâÔâÉ]‰lÖ^~ê‰M;O=1™ÈîÚ{IÍ‘Âú•‡¢î˜e³T@qβuç©Å‰Sd×ý÷;¿òÙS÷Üâ~¸÷÷iòÄ% ‹]PÏÈ—Ÿ¦÷lb›îÉgˆÈgóYç®I¸¶Ú¹vëÎå0Òì®.’‡²ø ÷(ÌŒœéþÕ§‰Ùsšøa1ÍÓD›…¥çØ{°€ÑÏÑÕˆî Ÿñm@¢ =âÌ=s&®±ÅÓ„¼.„1Ûòp®žÄ#Eã»Î@8SÝ8¸®·o‚–iY.úå`6ÂgýÙê?HO°åuÿìƒ?§Ï\Ônœ›{þëss]ôâíƒôü$jº}”¼xÊ&kÎ@xb°³xV¸¾§qm¯ ñËø.DDèMDaDôöÇéà@©Ü ßµú8­÷§i$Ž„­¬SüOE*ZHDÁòšª•x‘rr­‹~Y/Å[òª¼(rJÆðûUÊÁ&*)¢§¾,cNϽtÖí/eÏBø„Ó!t~† §BŸE‚õöEÆyw(0Žj’¦VH2¨ÎËi%ÒeKUã~^Ô§ÉåÄx&ãÙ#êÁ¨.d Yõêy/µüT”D!,é®LÐaˆÓ¤Ä*< žaá£Àˆ‘ïèí«÷[ùüOúA¶oiîÇ ]o:§Ï‚c€¡(ŒÙ¥] iÙ…Ã’Óþjت†Ùp‘dR>wÿ%E4L‰%U¡†©òŠÇôIŠ"«>C”:E™W,/'hTQE_Èë1 …Y ŸûåNÙºÉõ§Ipn/,=@²"¬Ü ÷ÜÛ ˜Ä¹G€ùgã¬à8+-“n#ÂÆ?V‰Âa¹€>LJ ýÕqnp ›+wóùœÎ‰!Ëçº5ÎõWÓÜ^ÎÌ KƒY*Sð'
+_W†ÉŒlØTK´-ÙÔÖ·¦m§odõú%í]«vwKµ5[ój2ð×÷Ÿ˜¼}GuðšcÃ[_¾¥­oÛ FëƒsÏÑ{¹Тw¦å lž§µˆC[î!Žˆ8Þƒ‹H!"Õ‚˜¿K‘GDgÙGàüp"'‰P˜Eàë¸L§V’"ßñ¹›æK¹|N’Ë@˜ú¸008FqRùü͵£]–˜ó<U8^–x5THÑ`Üë z{®ë¦z*„8J9Ž&s~nE *‚æûÖüÁ}ÑâšÌK¢È‡p/ÞâÕ€¡ N®_5fzÊíyÅ«INZ„tœåî&CdûR‚›á;ÎÂÄ]J+ïSh¡U GQd ¸m EÖ‘€@‚göû«µz¿œ+åJùrIçä4o¹³_öŽHV(Í5Ù0|(šÔ­~1 í™r2ì»öظ•ÙÒŸ­¶¥5Îð´Ð?bÙ]I_ÇꩺàS¸ƒ¢+…?!ÒS O.‹–׎|VT;úAKURz¾·j”W å¹p%„÷=÷ýiîU¤ŸüÑi2
+hÃ/sšÈy‹ºâtÜ“4Èráx{.¦š’aÅ ÝTJ%PÞ`MâLjs¿àp÷$xÍ?jÜÕ¼«=-óXBD©EêÛÑÞ‚èDDg ¢=-ˆ5ˆXÓ‚Xˆõ-ˆMˆØÔ‚ØŠˆ­ŽnQaǘnQ›Ùóvo ÙÜÃE |Ü [Æ
+©ÛDœ/ê^±nq—
+œAòôÕûÔHV€Ð^)¤õ£õPÒZußþEtbõÑ5EÍçZwÍ–eA¥ÜÕ®H^Y¨]sóÀäÌŽ><c@Õ=K6¬
+Üóö ªÒ€ s\ÇæÛÑ— &¹» ªøÁYÐM<óCÏÀÏ›Q?­gÚÍ@}
+7K™gdµˆ_ðõÍy¸Œì+±¢‘AD¦…ÊDZeD”¯h%Ï‚V¢ð¢:’àâ*\\…”aNBlNV
+Z<m›û9—ƒxg˜¼ãa
+¿rŽW‹Öa°š¦Hòº›@¯6̦yƒ¦àp³è)ÞJ}‰X®=âì¡t€šb&*àüU
+wû•„br<¥iÏŇh<åè»&7´y(¸\Sƒ¾Ý‹ÒË&—&GúˆWŤ͙ëÚáT†è+,_Äb!sîünîò
+zÇY OÖ2‹?
+34˜Ñ“žD]UBJÆqÀž€†R’QJCµ€Õ3Š¡¬<8™Í¯80éôƒ¹eƒY‰×–®]¦%£¼ôâ“VL—¸0êE‘R¿¢ù<]c«KÝ×uw ¤|àGp^™—¶E«íÒêá<Ï1}g
+-
+-™ßðf¤š ;”#Ws6"bc b3"6· æ“ŸW˜ãÍyËšÈ Ug¹C¥²ç¬é£iP·H¹VÂ܆·|K.òÿº^˃9
+ú6¾Ü_öÖbR´RK§–µÍuuÃÎy`ZhÀ#J¢ìÕº'W©&äöÎl¬c8[NlÔûJ†Ây E8 ÃÑï·Wj¶Ò&Û™ˆæMu.îÊu%Dƒ×DZÙeüEì¨_‘t]å­®J¡/ÓôL[­˜ƒø†Wx*‹œY ú:æg·Í=Kï /¶ÞI>{–¡&™}º ‹A€|Œã @¡ò,ʃ;R||ÄIR`Ê×פ!¹4:ŸºDÄ`Ëܸ!í• ÈY²x˹ø„;m˜.«“8³ #.ä$J·2¿À ,kõLMIwRCNj˜Í$¸yRÈr÷±0©T*ë¼!Õ˜Þ¯¹ri…"{D¯_ Ä㳃ÅPãÚúU90DÑ£¢ÇÄQÑë1Rò*SÑ"S–+ÁHÔËùýáÞ®’—ã<^=ëÓrâ65Ð"šOD%ð"âï“4ÑÊÅtÅ« ¢/’Kø3þbÈ“ zùPJ¶¢é×ü‘ˆTH«^Ã#rc…”¦¦_ñ9½cÞ¹‹ôaîA%»ÈúèÀæ`Ñ,jO QÖü"¸µð94ðˆ šó¹H„Ûg1…ñ;xd³NᥳhÂ}6
+òsiî»ô[Àϲ|bÞר1_ƒs}à,
+V„
+tå`ÝM.¡©x «§ÓÔRq¿¤zEªéš•ð'Û:wß}'¼h$¢Ñ%ýžhÂÇt
+ˆôØν©P6âUŸ,ø|ª ŠÞy]v´+í侂”šÔ“¨VÞ ž'…së¡‹?¤o˜ ]¼þØñZnb¾J nM¢BaÐN€<Ì ]˜IÆFÄDc…]àè .î49 ô8 Í­p¾-±µ[o›§ µÄ"ÆZ×#âz"a]s+ºÂÀ×7µHÈtòýnuó4†_èî
+ÉÌk˜ßgx4Ž7²5GuÐ[³Ü{ÉÍôæÓä–œ]Xñ3³˜ytzeæ=$©¥&†°ÖéÄÉ
+rAµg^Œ#b¼…©¦1ÝbÐÝÂé¼ð#Âß‚!"Ô‚p=µyÄDl¹b½Kñè/"ƒ:y¿3À®[È
+hPý`8SP‚…l¶#P_cV±ž‚%a¾„ãºUÅêYݳן)Ž¬-ÊÙ‚-y}G z1ý£¥:+K»c²Çà ’jh €ì¹‹ä»Üa å¹í,ÐK¨¤};nòá2Û¨-ôáô+P<æÀÝê&²E£×ßÃÊêNU4ß$-‹\Y®´ê¶D˜'¡òÍÃ[¦^e${D0ßiø}Ÿ‹ñ(lÄñ¼Ï„(ö³Ü
+¿6HøùàÀ±íèïQó•˜9σUó!Î?41T
+íEUŃ©.!Œ‹ß#ænÚÔÉê3ìQ¾…2hþ‰+M„µq¬è2ŸQBÍE¯Î‚­q*ë•j½_v
+1yŠF5(çüåtË0&½!æ÷ƒí2¬µ‘5ípÇà qþBÖë“‘} ñ™ó{‚î—aƇ"–aÆ‚?Q yŽçR“Á·~ ÛY,'T4ªÇËþp±wI5´dŸßa©Œgçž'?
+2^Þƒ™~¸¯#°>÷xÛ,&ä!pJN! [|“œ£HqÊä†Ðºý1i*YŽ×q4hŠeè—óåy Í…œ^ <1Û@×çÛ±L.±_<"FQñVçX1ãÁÔ@\ä9 6«¥®î ' ‰]ësÅ6Ф‚"ñ†ßäåGø`Ì'Ê¡|">1|Ñà"9ßVùH¾<²ÄãÓy%mÇøj2òð¼"+¼¹Ä4{¬V­ÅEjÊa“§ÁhD-Ëõh ‹wOn †=<ªrŸOôd ÙÅéõM®_¡«^PíòšàK ‚[Küsé—èíä:ÚæønèAw«6"Hó|°%Õ¬´8Ú£‘ï¸àú¹FþÄQ£[àÈÒ©-LYh ;z´«Ëï|ÏíÕL¶Ë¬Âšé<b5"V_Z0iÄÆg@.#ŒÛz\è4Y3‹­CNmGÃJ·¶vвc£‘Á
+rZTS{ãñþãR±ls²©«‘Ê¢bi´=ô(ýâ;y-¿¤~Ì/ª °xÝêIáTæV#¿hjýŸvŽгây§«Ãñ!ýs¿ 5új˜”GLÜX“arÜ},vµÆµYsžKÆØ3$hq¸gœ-ÉYL×;O—89¼™©Ë¬™vÅVœXyì"¬ iéîd=Ð8•ÎUÀIOƒ8[(¯NK¯$07Tç›± ÖÞë†clضú qJ.$‰ÞP6dêþ’G’ݽ¯o„~›#º¨Åňò«½ÄrbÈ'r¢²"XQDÙcb8—Õ|!~ µ$ƒ÷”Ö¯¨urœ ·’˜{lÞ 2Aî=DŸ`QI¯›Mr´£;qI¹©]Ç°_öê°ËÍn2©Å”`º¹ÀX}6ÄuØbT°Áåå uÚ— âÎPVár*eç™Nº#!F"@<®½1ËÈöÙ>|ý|8™Òâv<ÖrK3;ëáTü8E8"%SaÎcCé°!ø%=ó›ÅLˆ¶ú¢!-·bº.’¥¸ÞæIú|²¢)Þ
+ěĚû9-Ò¯€KôûgÁ›vº¼ÁšU<@O“*¼gO ÜNmaœ£]±ÓÄãºÛ ›Â·$kÐ j8wÈry§_Ìf!ä4e Cê¦*dWW¸‰ãEtµ7¦ál2fˆf{Þ°h<.Xá ª"H †Âœ’kë úU®œ‹gB;Á NóÌ
+ßbä3¡€Ç£ý%\L÷¡Üzæ~J£¯
+¢Óµt&å‘.ØÙU1;æ*úeàcc<U·iÙœ­:ˉ¸Áù ]Ø—-EH‡–.ŸT: *‰afM°2~¬Ù*©‘êÑpI’™Þ Íý} =
+·sê,vmß„Qk ƒi>`2-™c78¿,ðÔ®^(u#Ñ2ܺè•k«ƒæ#ì©BK‰¤™áÓCn~ÇõÚ'h5ÜvHM±_Îcë _ ×êŸZ^.‹)¦7<F@årÔ«(îv&¼“7%CNØyS=†¯rcÝÍ ‚$èK×Lš‰¥º¦+ë:’ o­ÿSrÙLoÙ¹« jŠ*iàH9=rsô^ år²=>FËe
+…j¥|¾D4$µõ¤ýžƒŸ“‚Ùjq{Ûö­ëìPX8 Û¥
+&«êq¦PŽ'‡úÊÞ 7N¶;9Ñÿ¦¯¥w’Qò8ZÖmÃ×µPÝ}ÈM[ØŒª-L…¾€¶uizåÂé•û‘Üd"CXÍ.$ Îb0úº>¨áY§.ÍâÓü8-32Òj­t,‡ÏÓfw9kHé  Ž¾ö +EOÆ»‹1)¨›TÍG¢£öjÿ@\Òõõc|:Ò×I vØŠÁɪÊs2õÇ£ ”¶;6g_ØŸêŒÈ2ÐüëVð…Î2D¬B ŸñÙÙ”ãPžwú†2séÖ"8ò+É¥U…yB]æú»Eia¡ëÀ1ŽäËõ~Ydßç͇Où÷Ò.ó#§Œ›¸Ç>ùø£}ò1§B?´ðº—y(®f½Ìe¹’ª…˜¯Ü‘ó=¿éú½þS›Ø÷™Ç?ùØ£°À=±7n@¹ŽüãY8GV1¹ß¯D`P6»ºVÇOÚ˜Ôã¶Ý®ˆÍ÷¬¶5ó…gÈ8œ§í±Ó¦YTêäjfܵ;Wf¬‰¿³`(S2TÏÕaï4Ú¸ ¡kÝHèÑ|¹Ÿÿ5v¿Ñpäõ“×üúZàèG?üü3¿Ö68ÞéKas&‹È[±dŠjlºûœùö¼£ÆH5Þ2s<é!cìm æC7:•ÇšO­/¨ÊÎÏ£ûÈ:›¥18ý"6K¦ãüž‘Tܲ(>¹žuŸ]–ó‘Ó±ò£É×Gâ/©k…Ûóá/¼„Æ•yZJÀö‹ÉCNo.vþMœsòIHË Wé-ifœ,ÆüU·³ÑU8a6r©nÕ®ðDÕ¦›0Äž€Ë,f4åÜð§îæ€Ð$t‘:»H—"mAùÈùzðÅ÷+S‘§"SâK¥ð¡C¾xÿ‹¦òB~}óåü:Ÿ³iåVîÿ.·2MòbÈIý *¼/‰˜ ^%‘_Y>Ÿñ+¾yâõ—¾y"1‹¯pž0(žCÎM¢ûžr^- 3z9æ³ý—EóTlðé<wVšµv»ù¦
+êð$ÿK
+”:|xì—\ž;ù+ÔXŽñØêÁHìdžažÃ¬SkVpm³ 9l©03/É)›-UX„½³˜¼´‚†°Ó¾D®öÂJ â²ü›ý½RVìÒ'ß•…í1,ï`± èšE•r†ôÂ
+›íar™ú¥çèb`ñoüÀéç~ 9X4ìÞ'7cÿETþûŸùÿ§¸þü‰=:·æâ÷„eüvø©6ß1Šo%eï2ŽÍ­™[',»ì½¤Ÿ§Ïü’÷‘~èr\šƒÿû9Rb—ù!‰Ãrð’·ýtÂ2tÙ±³,°ºì»•hô"‰Âºƒû[âúIðjC‚mmü-À´ßAäÆu¿fë%üÑ;Hë…u}š”èR¦Ý$C$!Àëä' ¾ëžû'ÄÇ}†è€÷ÃR‚ý½°.MütIб藈‡¾Ÿi†sÿ11a‘añ‘—øç˼ÈýmòÿùÎé%¿qN8ü×X_ñ8œÓ/]‚Â7<ܼàó™Æ‡*4Mo‚Ï׸ýîçÛüLóóùð#I^'¯RÖ]òù‘g~¼ûð£-¾úÇ—Ö£úïÛŒšoóŸ
+<|UðçÁŸ‡^f½/ü—‘t4KÆþ&~0þ³Ä7“w'ïNNß›yÁÏíWù|ôÿõÇ~·óÉ®Èþ,û³Ü»Z?ùJë§gZí+äëDnyƒ²Í"×îÎ_˜êMÝ÷@s
+rý€ spôŸ4ß¾!ïwaöù¤ ‹ Ï¾ìÂè+Þ…eòVj¸°J’ô.ì%1úÖI~ ë‚
+ÎqÔ…)IòyæˆÎO¸0Oºùõ.,À>/wa‘çßì‰
+² Ë´*d\X%Câfö’ªøÖÉ*ñì²cÇï<qèÀÁû!»ox¸¯Ó®ööVí%ûŽÝ4mo½óäÌô‘“öê£{8~ìÄÔÌô¾n{ÉáÃö<䤽eúäô‰Ûù=¦–ól;8m¯?vôØÌǧaç$‡ŽµÞ{å3-›>:3uÛ {ý6{ë̾-Ón;<u¢¯»w >ºdréòQwûúm°õÒ}¯™>qOíì¼i«ÝÛ `oß(\w±ÝýC£G¦n™>6³¿ûð¡›úºk݃õÞ+ñÐI{Êž91µoúÈÔ‰[ìcû¯~''¦2˜Þg:jÏÀnÛ·Ú›€TGgì©£ûìmͳlÜ¿ÿÐÞi†<2u§ ¾ôؽÓ'f¦`} Nr¾ù¶‡Nî;´/r²{é‰ÛàÐ-ÇÀMvÚ+àˆé‡öÚ;¦Nì›>83s|¤§çŽ;îèžÂyëÞ{ìHŽóªzO˜:Ü}pæÈaðúðõÖw’ä9
+ÖûØ/ËFË~8Ç^vtcOÜ~'¬~¡ëîe¼sç÷1w$H…›5ð¸}ì
+;9 ]
+[ns¯º°Ü™D¾]á^cš½0;Øxƒü7´H¿‡ÜÁ>Ýì®yëf²u¶5èùâèÙÇ;ž‚u7;þÁW C8å¼e’®ƒb,È!ð8¬n$«€Ú>~¨t<¶cã%ò8ô¯äQò&ö
+†Â—’ÊDÆ çý«ÿj}à9
+endstream
+endobj
+264 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-Mondrian.pdf)
+/PTEX.PageNumber 3
+/PTEX.InfoDict 353 0 R
+/BBox [0 0 340.15701294 340.15701294]
+/Resources 354 0 R/Length 826
+/Filter /FlateDecode
+>>
+stream
+xÚíVÉnÛ0½û+x”ŠápÉ
+Be$ìKÇv•“!!w²À#|N3Š2aA!p ÆX%WXät°„ œkËOÁô‰¨FÁ¸' •J½…®ÕŒédü0ÛUþã·Ä‚ *X[³—í–yYOšIY<œgeÑäEC.®.W›îJ¨QnÏE¯sv£@­Rœô†4åH8Z½yˆÒîcï¶sÝë,Ö )ÃD C¥µéá‘‘.ÝbQ4hòÒ:ÎHBShMÉÏÎÝx‰kjð@m¼¾‹çýµ’y?NÁpÄ#½ÛÇআÜ8¬v(åZ{¿ù.ý¨–HCÇè#+&wé¯i$!)ƒ.þoñU¯¿_î)ß*Ôb£Î{¦}ñÄùfäªD.ÿËù”3èÞ®8®¯æq ’Š
+%å¶F€åT+—Ô½"Ñ"ºxÕ(÷DZ[©ä‘´J)
+ ¥9U*A<–ÝÒ2d$,MŒÔNË`1Ì>¡dä÷Êúöº`†Z­¤xýˆRnÞ³ºÉçOÛZ¸³Ì/‹½Jº!Ãë?¶©8#–Ú„'m/žjYèªÏÅ ‹—Eýeƒ†²Q]ú‰—.7Qîí: üjê'Ò"Œû~<NŸƒkQº>urào£“•³YY ‡Ñ0Íš²ËuTQßÒŸRnÒAqd ࡾ¸‹ŒËf쇩£[9 ¢ü9/üt3Î_½5(ý;PE¯ÔO ·xç=„Ïý?@\mh'ÙØï›Ôî-£´_/«Ádÿé=§ÞxYèÆ’ËѲ QåÆ*ê§õ$ófZ×ËÙÜiºwuqÝü0Öù°z'ìf.zã¼Í­pYs™ƒ¢ôïzéÏ(Û¤:¯¶AÐèˆgŽãàÅr]Y„¯ÊPv¿\CEüªO0&ºªRwütºŽþ¦¨ w+ÙŠ[]}úe3üìûÌ¡xZ
+endstream
+endobj
+353 0 obj
+<</Producer (pdfTeX-1.40.10)
+/Title (LecturerDemo-Mondrian)
+/Creator (TeX, with a little help from Lecturer)
+/Title (LecturerDemo-Mondrian)
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727152509+02'00')
+/ModDate (D:20100727152509+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 \(Web2C 2009\) kpathsea version 5.0.0)
+>>
+endobj
+354 0 obj
+<</Properties <</ltr#40step_1#3Acontent 355 0 R
+/ltr#40position_1#3Acontent 355 0 R
+/ltr#40matharea#40inner_area_1#3Abackground 355 0 R
+/ltr#40step_2#3Acontent 356 0 R
+/ltr#40position_2#3Acontent 356 0 R
+/ltr#40step_3#3Acontent 357 0 R
+/ltr#40position_3#3Acontent 357 0 R
+/ltr#40step_4#3Acontent 358 0 R
+/ltr#40position_4#3Acontent 358 0 R
+/ltr#40step_5#3Acontent 359 0 R
+/ltr#40step_6#3Acontent 360 0 R
+/ltr#40step_7#3Acontent 361 0 R
+/ltr#40step_8#3Acontent 362 0 R
+/ltr#40position_5#3Acontent 362 0 R
+/ltr#40footnotearea#40inner_area_1#3Abackground 362 0 R
+/ltr#40step_9#3Acontent 363 0 R
+/ltr#40step_10#3Acontent 364 0 R
+/ltr#40step_11#3Acontent 365 0 R
+/ltr#40step_12#3Acontent 366 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 367 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 368 0 R
+/ltr#40position_6#3Acontent 368 0 R
+/ltr#40matharea#40inner_area_2#3Abackground 368 0 R
+/ltr#40step_2#3Acontent 369 0 R
+/ltr#40position_7#3Acontent 369 0 R
+/ltr#40step_3#3Acontent 370 0 R
+/ltr#40position_8#3Acontent 370 0 R
+/ltr#40step_4#3Acontent 371 0 R
+/ltr#40position_9#3Acontent 371 0 R
+/ltr#40step_5#3Acontent 372 0 R
+/ltr#40step_6#3Acontent 373 0 R
+/ltr#40step_7#3Acontent 374 0 R
+/ltr#40position_10#3Acontent 374 0 R
+/ltr#40footnotearea#40inner_area_2#3Abackground 374 0 R
+/ltr#40step_8#3Acontent 375 0 R
+/ltr#40step_9#3Acontent 376 0 R
+/ltr#40step_10#3Acontent 377 0 R
+/ltr#40step_11#3Acontent 378 0 R
+/ltr#40step_12#3Acontent 379 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 367 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 380 0 R
+/ltr#40position_11#3Acontent 380 0 R
+/ltr#40matharea#40inner_area_3#3Abackground 380 0 R
+/ltr#40step_2#3Acontent 381 0 R
+/ltr#40position_12#3Acontent 381 0 R
+/ltr#40step_3#3Acontent 382 0 R
+/ltr#40step_4#3Acontent 383 0 R
+/ltr#40step_5#3Acontent 384 0 R
+/ltr#40step_6#3Acontent 385 0 R
+/ltr#40step_7#3Acontent 386 0 R
+/ltr#40step_8#3Acontent 387 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 367 0 R
+>>
+/Font <</F56 388 0 R
+/F57 389 0 R
+/F20 390 0 R
+>>
+/XObject <</Fm1 391 0 R
+>>
+/ProcSet [/PDF/Text]
+>>
+endobj
+355 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+356 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+357 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+358 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+359 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+360 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+361 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+362 0 obj
+<</Type /OCG
+/Name (footnote)
+>>
+endobj
+363 0 obj
+<</Type /OCG
+/Name (B)
+>>
+endobj
+364 0 obj
+<</Type /OCG
+/Name (C)
+>>
+endobj
+365 0 obj
+<</Type /OCG
+/Name (D)
+>>
+endobj
+366 0 obj
+<</Type /OCG
+/Name ([step 12])
+>>
+endobj
+367 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+368 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+369 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+370 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+371 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+372 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+373 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+374 0 obj
+<</Type /OCG
+/Name (footnote)
+>>
+endobj
+375 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+376 0 obj
+<</Type /OCG
+/Name (B)
+>>
+endobj
+377 0 obj
+<</Type /OCG
+/Name (C)
+>>
+endobj
+378 0 obj
+<</Type /OCG
+/Name ([step 11])
+>>
+endobj
+379 0 obj
+<</Type /OCG
+/Name ([step 12])
+>>
+endobj
+380 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+381 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+382 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+383 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+384 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+385 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+386 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+387 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+388 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /ZXMXDG+CMSS12
+/FontDescriptor 392 0 R
+/FirstChar 40
+/LastChar 107
+/Widths 393 0 R
+>>
+endobj
+389 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /FKFMOI+CMSY10
+/FontDescriptor 394 0 R
+/FirstChar 112
+/LastChar 112
+/Widths 395 0 R
+>>
+endobj
+390 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /TQOMGV+CMSS10
+/FontDescriptor 396 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 397 0 R
+>>
+endobj
+391 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 37.779 25.615]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 398 0 R
+/Length 91
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+^r.PK9˜™«` b)]=S°ˆ)[*ä(ÃÙ¹`0–)D)LTŸB 
+endstream
+endobj
+392 0 obj
+<</Type /FontDescriptor
+/FontName /ZXMXDG+CMSS12
+/Flags 4
+/FontBBox [ -62 -251 978 758]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 444
+/CharSet (/a/b/equal/four/k/parenleft/parenright/two)
+/FontFile 399 0 R
+>>
+endobj
+393 0 obj
+[ 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 311.3 761.6 462.4 462.4 652.8 647 649.9 625.6 704.3 583.3 556.1 652.8 686.3 266.2 459.5 674.2 528.9 849.5 686.3 722.2 622.7 722.2 630.2 544 667.8 666.7 647 919 647 647 598.4 283 489.6 283 489.6 272 272 468.7 502.3 435.2 502.3 435.2 299.2 489.6 502.3 230.3 257.5 475.1]
+endobj
+394 0 obj
+<</Type /FontDescriptor
+/FontName /FKFMOI+CMSY10
+/Flags 4
+/FontBBox [ -29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/CharSet (/radical)
+/FontFile 400 0 R
+>>
+endobj
+395 0 obj
+[ 833.3]
+endobj
+396 0 obj
+<</Type /FontDescriptor
+/FontName /TQOMGV+CMSS10
+/Flags 4
+/FontBBox [ -61 -250 999 759]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 78
+/XHeight 444
+/CharSet (/A/B/I/L/S/T/W/a/asterisk/b/c/colon/comma/d/e/f/fi/four/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/q/question/quoteright/r/s/t/two/u/v/w/x/y)
+/FontFile 401 0 R
+>>
+endobj
+397 0 obj
+[ 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2 777.8 500 861.1 972.2 777.8 238.9 319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.5 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1]
+endobj
+398 0 obj
+<</ExtGState <</ltr#40opacity_1 367 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+399 0 obj
+<</Length1 1517
+/Length2 6928
+/Length3 0
+/Length 7942
+/Filter /FlateDecode
+>>stream
+xÚuT”k×6H‡´J3tÃÐ-Ý )]ÌÀ3À -ÒHƒ€t—t© (Hw7Ò
+‡Ï9ßûþÿZÿ¿žµæyöÞ×Þ÷}ÝûÚ÷0ÓkëqËÚ­ÁJp’›(×ÔÓãã
+0w.Ü}v`$@Š`W
+ß½p} 0
+mî~øþ¿gàwÊÿMú¿ªü?Õÿß;Rrwrúgû ðÄAÎP'ï?ˆ;9»#ïFC~7 °ÿ†‚ÿšgM°-ÔÝù¿£ªHÐ݈ÈÂìœþ9H(B ê¶Õ†"mìÿRÑß}¸+ï…µáè¯ÀÍþWìnèlïnÄ]·~‡Àw3õŸK*Âl඿†_H
+àŽž
+‹œÐ¹|i|xÙ§é(ôŠi7s]ƒýêPÓIÿ]V,ü~Yi£[ž!-• AmUš&Ÿ±‰PÁ'.ðTé„'G‹2 æ’±-°·ñH}C½Äª<–ÌxxÅ-— ÎV+äüTšlMö€T&u !C¾ !¼°"G“:C §
+n–zÛLgž0g©kz’m00¾(yúvUäÙ›p¿ê‰9$é ÅÄêR…§Z·­i³Ò Fjà~Ðgã9Cœ Ýo¶|ù«MapÚèGowÞx°¬nøîz··ûy™i–{9+‰=U¦÷‘xé\À±ˆ«Ú˜ëQ¾¢Ý^›ôrÒ!zx1Ll=Ã=>¥%b!è´äy¯Å±ÓÀB€»í Üù9ØÏ#¾êÓÍM!ô—3ƒÎ/O0áGÆ>`ŽQ¦¸–h)Ì„D²Þ³¯“/z7èxôCjϬœáEL{‰‘Õ…Û4Na%6«QÐa„øcxŽÂy“½aØé~ tùò…„âéô,Ð÷{Xç†Øí•Sƒ=ÃgÙ«Ùk¯ŠDþ·øX“ï‘æÈUB×ìêªù³«ŽûJçé,îHU¶±ÆڃїËÍîDí=T³<×?+XärIS‹œÉI(éÎÕfê Ò^G<·jJBn~Ô¸›“Ò®¤‰F÷*²@??¥ßv0r Üç¬ÛøIS% ¡§¯¦NmûÎ3udO!>gÛkw¾c&i£1-An*,Õ-4·ŠNMç­Àà}µÊ†xœ[ Õ´oŠ@äÌ'¤´âDc]|8?Ò‹¹Á~Òói—i&ø|
+Ô¼©H™ i)N*xÎoìóÔq[/v–÷
+’xB׫’}ÈðMvn9„JÂìPú]‚ÆÊ×\Â4ªVÎG&‰aÈÞr’×Xé“Wú$—²Üõè7=lj'™XLlvÌè¡õ>`J"Zêçó(1R5εהo©ØiœÔŒ® Ss® çBÞ¼Ô¤ ¨õ)(2qùðÉIuÑÒoí¦C;üi\^B ™gDªá°qLƒÌ&7šEÈð£7@•á=îþö³¾íúÎ2j¨×ÕØlL¼ò½`«=y\Üâô“¸à ‹bÕ•:Û:+
+_Ì|5šYèÐþŠðº³«&°N©E¶ÍËJôâRž‚ôCúc>r…‰vŽB¥Õ>zŸ¬Ÿî%©i®@– öJµ†Y›Á7Ï+îªi¬0±a¾®o6Ï_8ÍqûÃ[@'C’æãov)û¶û—-ôòvn‡ð›ã˜Z:ßP}4}ütê-õžh¼ª’ÝרS¨Š¹Ž_†6Q)¹à˜#/>ŠCÇyDõdd9û^âŒ:W좥’…˜z±•AKã_Ph©ž”zVGG@H oýxé†*®³fè^ÝߦãR­ ©
+I
+Á˜~’º¢¥H¤Ó}&ŠïîÑìQ<¹t]hýœi¡ÙTÜÊêºÁI¤CÜíÁÆÂsRøŽúúÅÀz$—‘C¨¶£æ“ Ú¤ €úž7L¸†V
+{Ô‰k7X †¾?¦æ±>”‘¼a\úb"Ó»0°þÁü¼¸IóöÛ²å¾ vöTضA©DÞÕü·G'غ Ñ®Üçȇ™Î`¸ûW]rlSÖp&»Íš•}‡Ô.ªN Ø…è×äœî/5âÈ<·>,œ/sZØ݈ÏÎ<㧞mÆnìh¶¢uœÔÝ~¿Ò+3$ÎpÒ®M-™˜ùöèÙ–;ä0WéÞX>ÆÐàiafõ”
+5~…YU¦kìUþ
+6èµ ÒQ‡Õ¯IŸþ¸eë~°z’.¢ð ž‹Î2–osª¼[Û¨À-½ Íjh¥®gö!,ÖסÇ^à°œÔiÜÚÖ’%ÁR–ÊŠß
+Ò+Z·ƒ
+g;…²vø¹ÅˆGƒk<ÈËÓˆnÁÀs¥bº9jÂï—!š-iC}7nÁRéòDHË~\Ñ#,ƒ‹dp…#‡%âv70õ×C-tMdDPJ..‰©Žß‡}M–™á¥™¢,E;Ù{*‡Ó?Ç*²¥Q›6“Ÿ04Pq|Ï餩v(¿ ª}ˆÞ|{*îÛßj)Eš<®,#Ljæ?\x´ÈˆPX8}Èø(]ÉÆLÔžOG~ÊŽPo.1 Ú@ÿšæÅdËáGH8 A¦\ Ìní{ŸÊ”»@Ö¤®‡Í5Ǩ—é•-:
+ò­Úöfð ‘*;-ì«6Ë>Öþ¨³“h õIÂúRÃ2yÏUš-†(ÓûQú®¬œ
+ƒ'€ÍDfS†ìì£LRƦW{2%;p“Ta3¢ßuùzeZä©•ÄíwvK#PFÚ+^¼Q'&zâ£3tŒE mY³‚Ðø³Êæsnó¡—Þé/¦{ÔûØ»ù³ßÐaígPMñóWE JÀ˜72„†÷kìN·¸iïïÚK<ÕGÅXh²z‹ÒÈ}‚ËÙ]ãdà]¬ùî“›é#š2Ç Œ[Cm•¨÷GR‹e˜a<xWf÷½b Ç~¼5œ¦÷ÙË48£5¬Ø(7“ ¤ ÉÊð¦v ¾×zZžk¥QYyýÉz.Fâ æYtųîf$­ú‚¿®J]œè¸‰£‹1P‚Cä W”ôH(¥H‹îIîò½™F92÷“ßÊ:|âJî È;‡'Òq¤k…úDNõ(¡„g4o¦ zŽê¾6šb|®ÛQH6•|¸˜ÃßùA²ú*{š{“ËÂÄc§|¥W5­H½Ý
+B7±°nlðƒ~Ür,éÈàòÝ6cç=¦ó©ý{öÍ•J âÉWäžc¬%àr‡u,œhT+vî©œX,Uwqs_Áw{ƒz÷>´jù¶Dù↉QÛ·í%]{¼ù¼G÷Ø'tòd­T¥«âé2ñIjÏf<ýÄÂÉ„`@j‡öÔÛó¶ +|ævÎ S·W.‹3/³,IH³äu×èÄB3Òp2/÷Dñ†ÝHR`Œ\ú ‹¶Ù¦§&äe¢äÀû³·ÖêÒÏ6¤K«dŸ½è®mr<ž³²´±Õ
+px¥kœ'›}p¸á…‚~ÞËÞÙ O†ï7µôÁT C™x<¥Z¼d€R$ådóþLt‘öåQÛÌdÀ>z¾> · W¼’óvoâþIEâĶO©SéCñ„“7gþ·5ÍÛd½\ßâÎ>©ã?Ôà%O'Ú™E«âò¬É^Óà٫ö9÷6LÁd’Ò—æR­Óøº²òA¶mžŠ¢=¡ιVa2zu»‚€…ZAâŇˆžš'ŠÀÏ6å¥)YƒÙÅ©ÂÓÎ ‘oonªúAÄá1û_c–Åí{’פ+¤ï%)šæŠ-tf.ô\7Õ1¢
+PWc¥Û4ÒÒ
+OçwLžÉUÏj~ÚLU7Ê).8£&ÿä
+âYìo­û ’
+endstream
+endobj
+400 0 obj
+<</Length1 1405
+/Length2 5976
+/Length3 0
+/Length 6934
+/Filter /FlateDecode
+>>stream
+xÚxTSëÒ6"½wÒkÒ{k”„Iè Ušô&M¤éHQª€té
+Ò›"è=ž{ï¹ÿ¿Ö÷­¬µ³ß™gfÞçgv²6»‘©2åÓ@!1B a  @UßÔ
+Jÿ DyÊ
+‡aüþ‘‚W΃ññññ»£…QžÎ
+|‚
+Ê $* ’–
+óý-q€ˆ0…Á†
+fÈúE•§M¦—™¶ùØî#x™J{ã7¿5›„¬¡Þäö÷=;*Ôí©‘¨Ž¤f¤ñ×aÏN`¤MÎÕiFãp«ˆŸª–§'q0»Gr/á9H.}Ÿ*ì™< æÕèl zÓðÁÛ&¯z”øŒ|^÷Ò‹ýzŽÙ7R†–”ÁÚÇœ*\5PœÓ¡Ìƒ1D~>€ ¾sñ§þª´ìÌZw¡)ŽðA¸˜Ýæ8ùC|v2HÔ6]!5ðñ™Š„‚ÍcØÉráR.@ÍÄEm¤gÀîºâ5|[Pøë³>x¥Õ­TäÉvË›ö¡î¨CçgVÚÉÐ$«Žì½ÞÝäfmñÓw”üê˜:ÝYT—=_b^âT°I~¾ÑËNMÙ»JÒsã‰bäf”³fz[8™7¬e*‡LQQ»}.g}¾P%ñö©|X‹|ºTðÁâøá55ãO‰uk7»¿]·Krô<%²ÓÍï¼ëâPjÀ£ƒ¹“oÚKºÜV±ž =”œYÊWùalO]öà^¾Sü÷„¯['ùVÊõÑw1i]“ÁköÏÞ²vÜíO`É|5þ©§ƒ'}ËW«ñâÿÚqHSf€#¢QÙ”(Þ¦ú¡Ÿ6Æܦ¬×~ÒBäÙýÖ©éä ÈæLöÎz¨‡Ýv£ÁÇ÷Šû*j
+L¥’[2âIÐy6¼ì<-ØÏÙÀáb^ª¯xR¿§¸’êÁ?!éM6K/¿hB­i’§*¤ˆÛŠ¥Ç˜mÔK9µE˜üŒK¢Â[ ù"H«€’S›“\doDh’]¤˜ø?£>>vÚ ˆ·£Tsy"·^•µª’>¼;tñª>-êÄ£zì·´Zk?ð|ê¹’-„M*µÉ$yŸ'œqóšnôå7Cyúý•J3怔²÷ÁF(õGKô›n¸ï²øÉ$‰îãÙ,°|:»hÛžº‡zf7ËÙÌ·q|dK)…HO\oF·rGD¼IZ]µãËf7Ûè “ã®T}ž¯_¡ í0å(MÜN¿ô²Ã1!V?Ê’P‘§\,ôF.f™­Ug%Öµs<œ8+§¶!
+
+ˆžèTÊŸÊxÄ’ '»vUz צ>NT”‡á¸p¡¿UìæpZgW ŠèÂÖ7ª,ÖG»ÀåÙ¶'ÛŠÓ‚$¸ûGŽ˜Dj¦ …DòOÃhïnûR“·õÒI¦
+ƒ•'–8•tâø¸-D1°kø$‰Êáñã=aœ@Ö¹¡ •=Šð.*ªÿã-©þ¾À®bèOW?³ìøОF ÷ÍÇ+Œ÷Kß:«1&'̽j˾&íýå†Y´êR°H/æA[r_fäõR+ÿþcé¸~ϱiíG(×ó}ÝSj_ׂ6á‚#玠ڙ_Hz´sjzÆwñÄBÏšŒ„¨“ö£¹qëŽe˜Ð'È9Y\¾dh¿ºøíÇШ/E¨„Œ
+Îx7üÙÇ£ùŸ¡Úp¦®»Æ¾2øº?R<R:’JìÓõ1vþï‘˲£& ž‰~2Ú½WG¢góàäÍÏËswRx”Ô–‹æ“0G‰CÒËrûçÆÍp–`¦uW§} lC„„è\q?a«ðD<–É‘ç|_6Y
+öqJN¡ ÝüB·ÊÊ·±®‚+ ‰˜‘@ú
+Íç¬+·îÇ4'îË-w¸ü#¦t^´ÎY1v‹a´ý€½Ï„ñ§nÇôÙ¤Þ.b W»­þ.,ÅãFƒ¿²ìkÝR¦÷§át)‰¼YD9‰ç$Î_ÃüÉJækç–Â@{¶ ÿÈ’«îH<mt
+78ÅUV€5€ö%0êßø‚rŠsO­.ÿn¨•n7î¢EÿüÝã·Ê¬ |7ŸOÇnÖO›µ§Qöd%-ê.“éìíØ©ÁË®lJeÐrOÞ·ˆv³¡Y2ºÌÁɸMðMÜ"bÏiÂ<v÷¾QhÐÙåd üϸlìÿ™nqÃ@£‚mt¶ô—R¶„ õT~bVgåÁZÁ×ò®•¢â”ªƒa’9_§IR2jϱP ïˆh”13¶ 30&¹+m±¸Â,>0&Æ.2£§°õw£Ï:Q¨¥ÚºÕŒÐŸö‡»Ê“Áb¥«Æ´;]*l'8¥Õ Ûè’\å‰Ù**·Ÿø\¯±';+Öøì<ÕUç‰JÖözÎ'å²Jª•Žû/ƇÉo-¿Zš¸ÓHËU”4þôÜȉáݪcÁÓ¾|‰“µöë,O=‹Jm’?¼övøHÒÞX÷=žþ¤+Ø÷L“óg>sDñî˜pPAëèÍ·iÍeôïÇ:5F²Ò µuÙÉaò Õ¯Øé¯Ýâî¨&Ùò!è1‘jãUšŸ”íO
+iéPê1àÖvœ÷ᙂû÷tØ—!¥Q™åOŽI U­íó'RïÜ觓¯Ëùçx‘‚Ów‹Ë:ú„Kúp1 ŽÑÑ-nÊÚ¶Q|ôúçäÁM¦…›?­3æ‘LañY‰ÓÜeüv ¬É<—%òU†KîæÁ@¹åѾ¢ÇglLûµT?wç+Ò dÕ!MrüxÜ?¡å²ÌwB¥=Øí;qKÛ¾®ó”äh6¬\ÏT Ãí+yåjÛ@…<³RÐ)ðWœWÛ‘78x­ÃIÊpŸÞÑšWc^ŠûQçàˆ[™ŸØ9j5öç= ä8Fk­›4QÍgµõܶ(„¤ƒ9‰vú4@=…v¨¸ç‘Oè<ãJ¥0'­ÅÊ– &÷ÔßÓÍÓöÎ^ -þ!Ä©¥à¢†â¥*¾e†ÒÑðñw±'§=n!Œkž¦ofÅà;®”ÑŠx_k<~Êb–z¿ScB
+ßþÇ´2eJrÚøáÏBwÝ„
+­hË*æ³›E„o6£é>ášÛ®?O‘Ÿ°Šýqó*E¼áUlˆgˆ>FÁO¾&’-ÔQ¯ói¦YÙ³®
+[¸'ïu§"€ŒCS•ò{¡_Ð;Kûá¾(Û•Ù
+ö·>—†„ƒå…`ö†ƒÅ) -V‡Ëëª(‹›«ª_]²JÆÖ›£Ã²ŸÏ”÷ûmm õ¦šåÇ©Š_jz:¯šôRˆ¿åLŒzÇX›ØØKô ýƒfÅúœTÞã]Ò‚}ïe^WzLiøÚ2€ôËX!òË~Ží¨mŸ1î[K†‡†sÉLÑîdÂqϪo˜ØtÒg¢ ä\ooýà ÛêmUSÏ‘½’ ºE~øðž~ðÈ ¯Ì,±Nñôaäõݬ;lºÑÎQøå}ÛEÝå[äÔJq¹fUi€ið)W¿n ƒ±nÐÇÂ7kG^j‘¹©1dAÇÜ!W½RÒÂW3¥/·™¼U Áê]Š$ƒâ%ÑÜé«V#…q¤óÉ m-ÅnLÚ\©¹á(¤ŸÌUTÕݦøc¥¡¤B¨›å…[qayî°U Oø‹Ï¬%t¹ä´Ýræ¥/f ¥ôPP×Eô,™E”IÖmf¦/«t(­´€ºdÝ¡Á:Q4N* Ïö(νõ‰HãÍþ/y/gh‹¡LÞŒ¬q# ¬3NÜòAyPŸìd±g©÷=‘ÔPD1Œõº‘K¯Usä¼vNU‰}7Ú7oô9áDVÅÎ8Ñ°<Uì[¿ÊM±úp/äK<Îæeí~²ÝŸùö†°ïˆoer¾Zv ’¦5é-ÞЯ‡…ä)νܬm¼ÆFñÉeÏ6¶Äñ°ëÆÕÎËÝJû]Q¹‰ó‘Œ~|ŠO–îŠZ›±ÜºhF‚å†JE\úÉÚaK;¤˜’Æ9o‚ðÈé{L­"Žk=Gú´C@ñŸ£nÚ¢–Ò
+NAåÍ
+H’¿îg©Ðu½®p‘\³å§´Ù÷³Õ|å‚è÷+…-ÙH@Æ¡œŸŠ£d9‚Û7±íðºRyÔ»ƒt"!hþb‡×úî=œîÜMŽÌà3¯ÏC´ì
+‹bß ñô=íÏ즟§1ðMg 4&¶ÖÎ\ˆR˜”u7û¾ÙÞ#ºmÜGtâ£â<ž¼Ú~ezõ2/‡c¶‘ãxxê/ÛZ—©í7}O}öúëáÝÏ27}’f%¥n÷«§b陈ž¡ŒéÙf/kè>߶ˆ‡ÉÀùÒü«
+ÑF/âLuXŠø¹@ï|-ºôîM]ké×Ì[ŽÑÆ/˜NkMTù®}§€$F&BoFŠ¥Õ\ÂÔºþ÷ h
+b#¶.×ÎèÔw ×`¢“”òúô(j>¡PÈ€ÅÇ"™I&óyщ…APôì›Tò.c˶§á†W_'’ïðúo†´»BÒ*­¹/—ßÏÍQ'~Ú•ß“¤J³fÈj8=s¸+¨,ŽÒ^ÖˆMÉU¼|›µBj F 7ðo½0k«LH'ýiR”7c›dúÈ±í¾ `«r¾öÔ³âÈúÁÀÓ»Îë"¨¶ô$‡¦Û¾¬{Û›xÄï õJ¦ƒÀμ¥"
+*Rùœ¥‰;çM¥òí7ʺó¤Ÿoãçð¾vñ®Þø’)¡wj¼Z¿'?2/HÎM©®3Þý¶“²0€@4ç}e€mÖR=9“¯Øp“HXévµÂS»ÚùÖOíô5:¸n HîûÓÍwím‡j˜G5‰Î÷çqWèbmÿwÚ®3€²p©6R!dÔo¾yÏ‹¹¼¶Ê‘ó`à‡ܧÏvã¿aXÁ`%y™m·~Ã|ÿ€×Oñ(þ‡ò g}WÌ?dL™/Ôû]±ßи¨m h‘\:ÚÔ)·ÈbÜÄáP’RØú8Ks5õ¼‚t<|KïT¢ööÍ‹°Û§®“¹‡’ÂÅ…ý§6Þ´”Oî¤- 4C@ÏÀQ†H`©s‰´¥Æͬ›z‹÷fÆ®õ'ÒR/»Û´²‰ÝŸi0§à8±L¤]Õ-¶7¿¢ÿ\ûqn
+endstream
+endobj
+401 0 obj
+<</Length1 2065
+/Length2 10429
+/Length3 0
+/Length 11668
+/Filter /FlateDecode
+>>stream
+xÚ·T”ë6L7‚ˆt ÝÝ-)ÝÝ5ÀPÌÐ%Ý%HJw£¤€t
+‚ HwwJù{ï³õœÿ_ëûÖ¬5ó^w>×Ï»†ŽJ]‹MÒl ”;CÙ¸Ø9…Ò*ZZ\œ
+Ø èîàâpñ s sr¸99…þcvÈXx€¬*ì
+àãääää
+öÅõÿ¼¹üÿþ¯(ÿ×éÿßɹ;:þ¥güÛàÿ£·p9zÿcgw(l5TÀ°qþ_S=àßû¬´¹;ý¯Vj[Ig[Ç ‚ȼ€Öê ¨•ÝßSôŸ>ÀÂ;‚œê`è×`ãâäülé¬`·
+Ö­¿T@ØNýwJYg+°õ¯åãæãX¸¹YxcpÂ&Œ›àËÛRk ×_à à`wCa.
+Çaýäp
+'Û¿.u–?üã¼ÛHa &±H‹Zzœ¤AŽcn„dĬ7s&Ðó]³UôÐÙ6Ú8J®p©RI¡q’9û1T´«ÐOƸñxnFéîÚ
+:ã1 øk©öXâÞëFñŸ‡Þô§ñœ(õÖòW‡?#Æ÷Q¤Êy=Hü<é­b3Ž^ŠïJº<™çxª.oäÊä–¿¥Fï…Fvšb"ê+}D’}ݦ”#Jå–X4Aa°“§˜%û#gwRÙÀ\küûÔ§£"¼½³ ZEe–x~ѱS×ÜKÈr†…xœ6 ÛIáHÌ›|Ô5Oîp|¿¢`ËÞ$­ä/¥ù­ŽÒûàú
+Ø?Ûèlú´¹F‚"]”*ýÙ©«‚¶$48í²&dnWÚFo[…~GHoP6*DZ
+Ñ®emØîåG5Ø‚.r<^ŸjZ±µÛÚcÔ,{uóZáí꾚ŠDöw9’La¢3g Špyâ裵l;îÛ¤|l³ZP¦R>T{‚´bFZ†fuìp±K;!7–V²W›ûÙÇ´õÙÎÕ-˜%»Ý5‘íƒ,èÉVè‡wi#»3öãra’é,?\Fug™ë»Í?j…‰ûÉXìí{`Fˆ^gcéð\›û¾ã^ÿ¼ßÚˆÊ%HÃYåôGròA¢»P»\I#\[HEs¤½bYÃŽÃas±u0¯–ƒc#d2Ç?½¤ëÔ9ø<îg0©Ç§y9ú]ÝArû œO‰ËöÂ=NÿãžÀ… :(aê’vrhÐ#]¦Hš ·†¤žR¨«À?~ƒ}® ñw ™·¨Ìuü> =À¦ §Ì£Pq4‘äšðôMÒ"e{…ý+›êž§#æ¦e©Â¥S¤ô‡¸âªZ¡¤ñ„Ñõ“Æ9/ tÓY/
+ó-BhÉ_9r.`(O<ú"¾-Ž´Õ7rƒŠ‘n’¿ðƒ {½7¶@Àº:!y³Ñž{eÙH¬—£¢«µ|êqîlzKˆk÷DçDú@”-j©êP^M¢»æ¸½ö9TÅEæq |7gj)êâ²'kÕ‚º²×ûñŹ­Íý¾Ÿ²J÷“Úw×íâÝ@a§y
+}ã›yÎuã»î×€Tzo«oŸý%וƇKt¿Ç¤€üÄíDÚÂÕÎ qñýãZbUÌr/qŽ}øÃõåzgGÍZ‹ƒý»…w«ð" ¨ð‘—Žï§V~V…Û\_²j•%Ñ5"¶u=
+ ]¼w/*i5'G5º”`‘„p\
+ª©½–(idÞ7Ö‰|’¡ÛÃá1âÍ™¨¶`;КbŸŠ!šl]òZhgÀMC¶Œ€Ó` ›ªTüû®¤¬æ}åò  YØRå2œƒâðž!îdÀñ­çëoÆÆ*ê%SÌJñ³Ø©\S*„¹ÕïÑ»l‹Gn;H0Ì­µ“9ž‡%®ßì¥ $L·@$}Ñú’)ÌÈ‹&b+!²¤ÒïA)¹"yJ®ÉéB¶G?ùjÐÄ%ú¾¦AMm/ß p{e¸aK¬;s‹ò16›x²+6å]@ÐS_P
+æÞ®Ó@*µª.0ÓŽ?+ Ütýl´,9&`§ç:^3ây¯Ýw~–®ÉßÆ:<”I9).ÊÏϯ—ò„&iªZI+òH 'ø™òÉŸõ=Ÿ’‰­fÿþcÏý^7DõnŠ\|¦––ôTÕ»öÓo‘žOÅ3TP5ÒÁÉ^äåõ³Ÿ)a¯“ŠŸ» ÇKé~F;™»‰_
+’êj¾:ô «óGÔ=`ÍC7½¾ñÊw'O<ȧŒ?"2òNäƒh©¿ÐÝ,P0rbÖ<ZÙ ÉX¶6¦€_;ì‘ÐC>ÞŽ‹L„ÊT`7|•¬Û¡íÿ©èh6f»k©Y ÆÜ»~Ã^É”l¦º38´¢Æ`/›Øiƒ£úv%£Ä¸`-ÙŸg´¦xhª´W»;©Æ3dÎÜzá’Øý½/\•[­^ÚWS.IfÆ/¸L+z˜Îýú–³Êâç›Þ}¸?XjM eËzGÇu;À‡á$½ñ\p(ÝúÕ˜‡· ÒõÉÕü>^õ—¡çx.Þr‹Ö¹aq¶Ãv#>ô _·”+Ï
+CiNŸÞõÁ3³ò+áö»Ø&J|UŽÏÆkÎÕ.É}Å ÷N¾r×OäkS·bxN´[Œã5¶Ôæ[mê˜fÛüIÞƒº%Lßц`³VrŽpL–tp>¼Küñ]Û†Y3ò‡Ñ“¬øúƒ÷t•3p@•a~ò¯)<éµäÑ"w}­Y×4Ý„ ñzíúgòÁå¹
+_YógÄ,¯¹ ú2̪¶ýIEå0
+DB/¯!|ß‹ ,=\­g7)²U5ŠåãwìʃÚ_×ß:„„e±îVM›r;jyæ±÷¥vï–žaö¾šÚ2Ðü<*SÄ ¾žù°®ÿ¤âyà›ƒ]Wû1Ùj óÚ~)|??ðN'i¥ ý &Y@ìÜ•ç£þþÏëªUÇ“ùO üìC‘:¦æÛVˆÜuVÁø5¡WäMÐÌÖŽ¡Bý7_4Þ(|Ï6kßDHP¤ž[ïóô¼<p±¿¥HzçæÕýΑ:hùŠržv!WT‹%u¸çÊÙ¨- LçäE-Tá`¨«2þÑýÛæ±sÙújžµé^Ú¢ »>0ñ2àŸ5!‹{ÜÓVnå«V‘u Ϩ  ¢¾±ËžÉžì6eP½€.®’aÅý¦Š„<7¸ Â(ÿì§Xö¤1²ÙNú#<~£ö&T&;D[âaN–Ê\ÔÄ®u¥k©A3§È{ê>Ô ùr„&¾}Ð&çÐ`%ä…Yî½½qï5í²­^FY6܆k¯È¸îá÷,¢©º þÖŸï•à>ô‹|à#ŒxBó9 Ã>Ch­róT±:•ûìúë'ÆÓŠìò›’ìx™S­“zl’ÑÒÜÞLK[+¢¢>¥É._Üq9 i9ïç»9èöž7îÈ­ÿ’±VŸwb `†‹…’6Ø‚ cºHÕ䜪®êç€Q§¤a]{‘8‰¸,@­%õh?™@‚.øØV&ÖÌÀÕcìõ´äCâ#vÌ&Ç'ú©ÝCÇ´/;ïçÖäö볇ӴŒFâ”R{N­ñŽ¹Dq{«ÒßjÚh·‘ŸÌÜLp¬å˜›R?Ã2¤à7¦’{¤]åè{>&A+–1Në©7x‹p`|ªiþàäSya^ír[å¬TtÓI;Eí ߸­Û*^žÖ‘ôM/ù(?èÛÃ@&°¹³ª‡­+Nq‘Ô3ý%ä‘mu5î´Éz¥,:ó‰ÙÕåįd²Ÿ¢¢þcŠÑ—&aI …n°IŠâä`ŠŠeºt[E]Ÿú¡…i¶'‡ÿ‘À1ôË€*Û|MËä½´î›Á”!Ù­X´]å³/È@E
+¶eÌð}*å)·}ÈXŠ„ŸÉw_ i 1” ¸‘‡Öwx’´Ø¡‘dfØÕXð¥Y$ Ht•äa QÁk.î†$åYZ8v´"R)
+:”–(|¡5bG"l:š¤~9;eôdŽJ<éLÚ1[)UʸO„V`ÎpöÜ•ˆS¯>h?¾é<..ö½Ýa¾G î8ø¦:?S¦ŠH˜ qó¾Ã¦d$” WÏFrDä§6;f¾²L³bÄbb‰2½é÷E¼ëx+<NÞ²jŸì×ôV!s‘7³dg;ü™—QR DFÙ¤„*ù‘g£³g|þdÂH{“S«„Ižil’õÐ;<S£xæXózÂ7÷J>
+WZ'Šê5IÊ6{Ó­dÍ󇬟D(çÌ›XjM‹ÏÄ¢8\\cB ó呇Œ'ß-öúQ0Ý}_»Ú…º¿zî’7å3 ¼fìñ%#B0^”ý8àêÒ=ùX8?¡0ËšÌYütÔê†Ý²ä6ÇçÐÓ/¸ Ùbïns îLúØíD4Õ$Ih ëDÝC9â(Ñð÷*§*7åÔ…ù‰Sl€»ì³Þ¼k•±»lO Iæ 4EËÈVT¦”ñT ¬àñ·o—nÒÚ„&%’ ‰q:|%0éxq³n©×ß?ÕÞ+ÝxÙV)|dŸç<ûØž,ÝO¬<® J¯oˆa»,]Êé¯bw¡z—·É™t|)þ|ZŒå†³}XAÍç Â
+0ó´j˓¬­•X=Ópë'¦·N¬’]@9âwJÊp
+yžÒð°±å>ú3g=÷y>¥ýûØhL}ÚFíw.BèÑHQ³â¦*¡.è?RgÖ?m;Uè4Jó¥²2aæna…WKGô|Äñ$ýÁ–
+ïæîi¨çMÀ®¼¦bvD0ÒmßÊsµoÂÜë9FoÝüy']_® |µ$!eÀ—¶W•uyf'Ô'ËœÙÄäÔÀu a¥j|ýd¾ö{•Œ†ŽÜQJîÎuþýÖÖì ¶iuˆk-%Ç~V;Y )˜ÿîi×{ØÈsr¯Î$˜:þƒL`פLU²Wô&*£… ý ÚòY*çpFÚ´þ÷uÉ(ºŸ;õªtemÔÕ1ð çè[lLÓwó+˳å\eóoZÅeÜʸ’¶ðœ#ThÎá8ßÇ2ÞNÈô³íp}!äì¤8د׺ڞF-þI1-Ï ¬(¢„a@ÉMýÿét­…õX§ÔÈã/:Î7Õ(‚ß¼å›#›}×el뱎 @´øheR¬ìHÕ¡Ù-Ìa‰ ³ª¤ùpeÍÉU$ÁåÀ¥¹gCÙ²’ùÇQ™Á{µû78ExÆq›¡-‰Ñ2:[O‘N.^±¶]Ü#t5—þ¤”⩃âÈ"\gõ&\!òº·
+è©ô¶Îµõ[ÌÏᆡ]Ú&Æ–nÒ›7««^<tûâWNÎwl„’¯ˆÈ~F“> ):–#@Ê
+Cä¸>¨J¤{•¼üÑl·ÄlµFCßñf˜¥¿àLÈ÷Å·3Ϊì Èßðœ.h°»þò´Ú¿+ g´ê®ßŒlÿ¤MëѤV€Ì°{jvçÖtDþÉËyÀ󯸻‘-¼çÑ«´–4Ð.\åïž8Ûú}P0q°Ø¬+¢íÄ©Ê€rÒ¸tA?œmÇËpü]
+ÑT¾›ÝJuªo¢^«¥›ó(»²,ùd¢éœÜçØmä[ø5ëï=0;ŸMN¬$"³ØA±Ø1αb«Ö…ŽÜà/‰
+hw  ãq534¶å¡ºu祵gˆ{å“2„oÐt$d>1*&š>g&\"C^ÖŽo/¸zÜþѳÜÄÖcÂã®zñ
+
+¿46?Q{¡é"dÂæKrÎÒD¶tïò™¬,º®UqÓ„I‹·ešÌÀä
+—J/S¿8ÛîCÒ½Nº}œÓέÆé•wØ ½fÈ’P‡ Jà!·¨˜¢"z4a•„=•½€Œ)«¾Öø÷yŽûA¸;gHVX@‘‘¦9Æ'É4†¢­=i™¦ÇÝt*é*j(º4Ÿ÷AÚb¨æd2†ÆÅËÖl=¤ŒÍI kw é­õZúÙR'À:& òâ¨6Zÿøýk1! «Ñ!O.¥¾›é.!QΒй‘´¢²a“ÑG1Öíe-RŠ•h†(輪ý{Å8x§{!¹¼Sž¢Œ‰‰ÑÉ¿ÃÈgm’äþ\K{ñþlÞÒõ… ~557—Øgûm‰nK#¯æ¡ƒšò 73å‡È%®·±Zg¡ô›kh¼þæEÜ&Nì8s»FÍonŒ6ÚJÍ@r¦7ŒÏÈׇJÌô…˱HZ?Ô¶š%âzJ_´?«’ða4ç<|ï [2†‹“IN½C­ÁQpÀMá™B©è­lF1f.téîxÑa«÷Zó]Á$b.µñµßH±ŒÞé‚ò$ÿ™0£@ÉRÊLEªœÔ
+¯{®û¦ùuƒ%iÝÚ° }Ç·°ÆõÎUB¤'´ B@Zåœ"‘•Fe)õB©àƒ}ØÖ†ŽJÑiòøs½ªÃ‡”ƉlŒÙsž]û[Tÿ™¹ŒiÇÄÍ(Öô1
+¶ØíMÊ“–#ËCÙóéU+û˜Óò!}ʺv‹AY¿&ªD¾a
+F£éG V¤F éA
+©<Od.=ß®“§¤Fd;„©i=|IÀ3Ï(ƒOÌÏ4¿i;Œ!R¶×Ì$Ý]è%’Æ¢ˆ¡^aË¡†Ðý„Ê!ï­¼ý ŒrGêbþ*Ÿ'0Z4ï)ÏÈ_<N&yKºV¿õàSÊÞ¶Ø?¹º‚týR—6dÛ˜…h“ùµQ?õIœáZ<)Ey‚bd_+ /ÞyNŸ,¦ºRÀ× º«½Á‡oqiPJ}têtœw~^o½MÓŠqN‹^C²+TmoõX¼1#>µŠŽ8ùä5å‘É´ÿp‰}¥ÕDõþœ¾É–Žê¥éRç\ë¦c0á`Ë3tçA¨×( M½T57P©ĵ ¬ˆ~OöuËØì:­NÇÉ"“ë§]rËPQUQžqÙO_},©Ó
+ùUAl!NŽ¡Do˜4‰©6Ëšì“Ö2w“¢»%š»0Ó4‰Ùp,Æs6ºt*š×Ë!˜ Z2#Óú1:ÌH6jL—À¼+âƸXáˆ×øå•£Ai#ŽZ_bP¾q¥‡Ý¥:Þøô6¸¦j3_ÀIDho\-F>VÍ>¸kŠX%žP
+¢iVäÕ½8+¢“ð3×DkH•87}Vý$¼†¿Ï&/8„”*슴UŸMé¸kcL¡<×À³¾`öVzØ=O¼(ÇÐ (³Ù_¯š¦\O:¥Fó|wÇB/u}MïÿYé×uÌ Ó5?9Y%‘qóâ§Ì ù×2]“"Z åm̲h€åþÛÝX¬ :Ø-”B¤&G!XAIz
+.¾RW™xЗ»‡ü*{¸¾«o\¼ÇÙÍ沇_Q­sñ8á–ïyÇH,ú“RbbŽÛظTzüp=WÑB)(bc|•€—½[•<fœBî}Oªaßù¬\o>dk”1
+iº1áÕ‹ïÝ<n–«;B‰‰ô‹›x<"R—£Óu™©ÔEN­¸3¸êÆíN¦, ²Ÿ¼F¯_žcä´îÍ&Ì̦aÕoˆ4±»‹±èkô™¥¦4JSm² E͈ã$
+­Ø{Še(P&ùðN}F²Ód ‰øÀËTeåÞuý„Ú<fx®ÓI|EÊu´;½Ä!K°ôÂì¾ë‹:¶€Me¾g˜wÏVeÒôëW`ûSäÖ5Œ
+âGÕK[`˜-"^CH'"w¯±üø‚‰m¢¦âiô¦‡\]zN2$Ø›N
+FHµuΖ0Nž$úíÞ|2jÈWË|·Q|¦°z‹Ô_€T;}¹h˜g¿A{d½„ûV¡Ý|¶ó}™Gý£ßŽþˆüj˜`Áj
+º¦Ý¡­)Pà#Pée‚c´ažî Q8bÿZ{ý½ŒÄ iÞ¤‚¶x®ýc¢Ì駱ÐeºäÀ Þõ ˆúÀ5zú3<yèC)²†¸jP÷cº í«Ÿ´ß§d3.D·£:?.ãqŒé¸‹ Të´ ‘R¥×ÐS#O:ßx|Í›oe·O¼¿$sX]®¼¸2Ïî—VQÙöyWOÌîznûQÿA~3ä¦LççH^Í£&ÇZ=„(#fþ.²¬ÛÂý¢ÄÚá)„#`í®„8~åTLVåx:Ÿ#£¥Y£ÀåU²@3Ï ‡ø@JÆ—¯Ô3¯ÛdJZ-±Ìà)EØ!ûùºu5sù—¥:\[\b¸+«œ^h±uWº‰$o¶_féxz¢ÛÚ±Ù\ö÷ð´AHL_òb ©ñ Z©R evõ_9x8¹»ç«£¬³‘O\ùÒ›Ûc’nÙõ¦9ëÎH1WÅwúU“¯±h/@¯ßólùEÈúgÙ\çÒ[&¥z”i³®h{ÈâIª…Ý•·º²„BN¢ã˜œÈ'•mLF”KMå|-cH<ÑÖPS7ÙÓ] *¢~tµà › ¸µ­ÞÕe\¨fáv¹,jץꞤѪ<Ÿ`PÞVáü²1í\AC™»‹;xH¨O%%^o{7äCæ6ÖB¾ eâvë*­sýÓQ§ê[[œÏ‹þåônœ×MÊNGÞ±þ°4ÝB¦4†õanÅÂ٘îl±Ë¤ªæg² Öë)¸cLH¼ß€ŸLWГÜ
+åtR¨JäýÍi[#¹ê²`­ÙÖfƒY(Í{'ç9EH$Ü`A®~I.–ù^ƒbæÛœ1þÁjRÔ…¬l›m¶øœ8"Šm©y&ï{k\]hÂôÑûI§¦ùúJ4Ï,šÐ&º•"ˆ •9ºæâÒ°P ßÆF, ¼qHSuyÕ¡yÿ¥æ©ójôæ'oxÕ÷´tÜàíæÅ·˜Ù6MCùm@üU`ùt{ív­zEõu'‚EŒÅt¶è‹×bÈÝLùU/V|8¶8ß»ùt1¾Á~P[y6Ýâ¼úÓ}Q¬˜¯˜Ñiy
+™`³p:§R ÕG‘mÿY°‰Ž'‡Ðª·è;³±ÓB Ï=ÿ–À-lAáÅp!þº˜oöGæ/kòÜØ1¾Zt"Ö)SiÏ
+¢ˆ•êN¶gµË•ßàêAµó>J»“2÷£:|ó¹³Ú~Õ’¨ôå´ka<é­Ç3G…rYº¨ÁÚÅÔf#ý˜v¥§ˆ óªÍ~¢pÖ!rž6-íŠ2£ôÆÖˆuƒMŒs"Ýx§eEe3ø¢VœVà^æŒçTe¶Ú‘ÆAÞŒ6û7ènx3ì‡Ù‘ øDN›Q§?ÂõÇMNò1ú$J¦„RöäŸûœ{’F¹$Ú'¾@n‹C ¥GWÕOHªU%ÿP”ÂBU ýÐ$®¼ÿ ;¹SûQÔYWèÌ›6¡¢g*Øæ}O¦Î¿/«œ`»e$ ò©€[¥]Löèhaï:äöÚ<†§ò
+Uí‰A¨*7Û·¹Ê¨ü«Í/Ý;X‡?çu³C¢
+¡ ?0WØjØk5 õ9"ò…~©«ª¤rQ•Ïjù2¦ÁÿÕbÑá%J±Éuft í uD! ñh°=qµjX¸6úLš¸V³Ñs¥8•>c“´<Éå÷k±çpõßõ õä^iÎ-¦=¸ÁgÅ1.é~*zðåR g@Õò-œÉ V’“A¹É‘œN<äÙ°Èþû÷(J«˜Öƒ¼'²á+÷RÙ;¬P‰çDs'kHÔO“~1Õ8’ æÃîš!§ã3sË1çÿC£ÂÔ
+endstream
+endobj
+9 0 obj <<
+/D [266 0 R /XYZ 113.386 651.969 null]
+>> endobj
+265 0 obj <<
+/Font << /F90 14 0 R /F105 5 0 R /F111 6 0 R /F63 7 0 R >>
+/XObject << /Im1 263 0 R /Im2 264 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+406 0 obj <<
+/Length 41538
+>>
+stream
+BT
+/F105 9.96264 Tf 1.03 0 0 1 133.311 640.013 Tm [<0265>]TJ
+1.02 0 0 1 143.727 640.013 Tm [<0046>-277<0054>]TJ
+1.03 0 0 1 155.142 640.013 Tm [<004D004A>]TJ
+1.02 0 0 1 160.498 640.013 Tm [<00450046>]TJ
+1.03 0 0 1 170.315 640.013 Tm [<0008>]TJ
+1.02 0 0 1 172.388 640.013 Tm [<0054>-277<004300420044004C0048>]TJ
+1.03 0 0 1 202.968 640.013 Tm [<0053>]TJ
+1.02 0 0 1 206.817 640.013 Tm [<00500056004F0045>]TJ
+1.03 0 0 1 231.097 640.013 Tm [<004A>]TJ
+1.02 0 0 1 233.827 640.013 Tm [<0054>-277<00510042>]TJ
+1.03 0 0 1 250.638 640.013 Tm [<004A>]TJ
+1.02 0 0 1 253.367 640.013 Tm [<004F>]TJ
+1.03 0 0 1 259.038 640.013 Tm [<0055>]TJ
+1.02 0 0 1 262.711 640.013 Tm [<00460045>-277<0043>]TJ
+1.03 0 0 1 280.519 640.013 Tm [<004D>]TJ
+1.02 0 0 1 283.146 640.013 Tm [<00420044004C>-277<00540050>]TJ
+1.03 0 0 1 311.769 640.013 Tm [<004D004A>]TJ
+1.02 0 0 1 317.125 640.013 Tm [<004F00460054>-277<00420051005100460042>]TJ
+1.03 0 0 1 358.569 640.013 Tm [<0053>]TJ
+1.02 0 0 1 365.236 640.013 Tm [<00430046>]TJ
+1.03 0 0 1 374.93 640.013 Tm [<0055>]TJ
+1.02 0 0 1 378.604 640.013 Tm [<005800460046004F>]TJ
+1.03 0 0 1 403.047 640.013 Tm [<0055>]TJ
+1.02 0 0 1 406.72 640.013 Tm [<00490046>-277<0042>]TJ
+1.03 0 0 1 424.213 640.013 Tm [<0053>]TJ
+1.02 0 0 1 428.061 640.013 Tm [<004600420054>]TJ
+1.03 0 0 1 444.09 640.013 Tm [<0009>]TJ
+1.02 0 0 1 447.455 640.013 Tm [<00580049>]TJ
+1.03 0 0 1 459.904 640.013 Tm [<004A>]TJ
+1.02 0 0 1 462.633 640.013 Tm [<00440049>]TJ
+1.03 0 0 1 475.085 640.013 Tm [<004A>]TJ
+1.02 0 0 1 477.815 640.013 Tm [<0054>]TJ
+1.005 0 0 1 113.386 628.058 Tm [<0042>]TJ
+1.01 0 0 1 117.931 628.058 Tm [<004D>]TJ
+1.005 0 0 1 120.507 628.058 Tm [<00540050>-223<00580049>]TJ
+1.01 0 0 1 144.078 628.058 Tm [<005A>-222<0055>]TJ
+1.005 0 0 1 154.564 628.058 Tm [<00490046>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.005 0 0 1 166.711 628.058 Tm [<005A004B>]TJ
+1.01 0 0 1 176.363 628.058 Tm [<004C0057>]TJ
+1.005 0 0 1 186.064 628.058 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.005 0 0 1 193.125 628.058 Tm [<00440050>]TJ
+1.01 0 0 1 202.216 628.058 Tm [<004D>]TJ
+1.005 0 0 1 204.792 628.058 Tm [<0050>]TJ
+1.01 0 0 1 209.848 628.058 Tm [<0053>]TJ
+1.005 0 0 1 215.856 628.058 Tm [<004E00560054>]TJ
+1.01 0 0 1 233.288 628.058 Tm [<0055>]TJ
+1.005 0 0 1 239.124 628.058 Tm [<00430046>-223<0054005100460044>]TJ
+1.01 0 0 1 268.643 628.058 Tm [<004A00EB>]TJ
+1.005 0 0 1 276.964 628.058 Tm [<00460045>-223<00420054>-223<00540050004E0046>-223<0042>]TJ
+1.01 0 0 1 328.103 628.058 Tm [<0053>]TJ
+1.005 0 0 1 331.876 628.058 Tm [<004600420054>]TJ
+1.01 0 0 1 344.892 628.058 Tm [<0008>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.005 0 0 1 349.159 628.058 Tm [<004500440046004E004A>]TJ
+1.01 0 0 1 373.291 628.058 Tm [<0055>]TJ
+1.005 0 0 1 378.141 628.058 Tm [<0052005800510047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 397.446 628.058 Tm [<000D>]TJ
+1.005 0 0 1 402.157 628.058 Tm [<0050>]TJ
+1.01 0 0 1 407.213 628.058 Tm [<0055>]TJ
+1.005 0 0 1 410.815 628.058 Tm [<00490046>]TJ
+1.01 0 0 1 420.728 628.058 Tm [<0053>]TJ
+1.005 0 0 1 424.501 628.058 Tm [<0058>]TJ
+1.01 0 0 1 431.309 628.058 Tm [<004A>]TJ
+1.005 0 0 1 433.986 628.058 Tm [<00540046>]TJ
+1.01 0 0 1 444.691 628.058 Tm [<0055>]TJ
+1.005 0 0 1 448.293 628.058 Tm [<00490046>]TJ
+1.01 0 0 1 458.206 628.058 Tm [<005A0008>]TJ
+1.005 0 0 1 464.887 628.058 Tm [<0045>-223<00430046>]TJ
+1.01 0 0 1 113.386 616.103 Tm [<00550053>]TJ
+1.005 0 0 1 120.761 616.103 Tm [<0042004F005400510042>]TJ
+1.01 0 0 1 144.681 616.103 Tm [<0053>]TJ
+1.005 0 0 1 148.455 616.103 Tm [<0046004F>]TJ
+1.01 0 0 1 158.497 616.103 Tm [<0055000A000F>-290<0265>]TJ
+1.005 0 0 1 181 616.103 Tm [<0046>-218<004E0042>]TJ
+1.01 0 0 1 200.322 616.103 Tm [<004A>]TJ
+1.005 0 0 1 202.998 616.103 Tm [<004F>]TJ
+1.01 0 0 1 210.775 616.103 Tm [<0055>]TJ
+1.005 0 0 1 214.377 616.103 Tm [<0046>]TJ
+1.01 0 0 1 218.833 616.103 Tm [<00590055>-217<004A>]TJ
+1.005 0 0 1 232.072 616.103 Tm [<0054>-218<00540046>]TJ
+1.01 0 0 1 246.747 616.103 Tm [<0055>-217<004A>]TJ
+1.005 0 0 1 255.216 616.103 Tm [<004F>]TJ
+1.01 0 0 1 262.993 616.103 Tm [<0055>]TJ
+1.005 0 0 1 266.596 616.103 Tm [<00490046>-218<0054>]TJ
+1.01 0 0 1 282.713 616.103 Tm [<004D004A>]TJ
+1.005 0 0 1 287.966 616.103 Tm [<00450046>]TJ
+1.01 0 0 1 297.638 616.103 Tm [<0008>]TJ
+1.005 0 0 1 299.67 616.103 Tm [<0054>]TJ
+1.01 0 0 1 305.875 616.103 Tm [<0055>]TJ
+1.005 0 0 1 309.478 616.103 Tm [<0046>]TJ
+1.01 0 0 1 313.933 616.103 Tm [<00590055>]TJ
+1.005 0 0 1 322.305 616.103 Tm [<0043>]TJ
+1.01 0 0 1 327.401 616.103 Tm [<004D>]TJ
+1.005 0 0 1 329.977 616.103 Tm [<00500044004C>]TJ
+1.01 0 0 1 346.255 616.103 Tm [<0009004A000F>]TJ
+1.005 0 0 1 354.697 616.103 Tm [<0046>]TJ
+1.01 0 0 1 359.153 616.103 Tm [<000F>]TJ
+1.005 0 0 1 364.54 616.103 Tm [<004F0050>]TJ
+1.01 0 0 1 375.183 616.103 Tm [<0055>]TJ
+/F111 7.97011 Tf 1.01 0 0 1 380.976 616.103 Tm [<003F>]TJ
+1.005 0 0 1 385.826 616.103 Tm [<005300520056>]TJ
+1.01 0 0 1 400.305 616.103 Tm [<004C0057004C>]TJ
+1.005 0 0 1 414.856 616.103 Tm [<00520051>]TJ
+/F105 9.96264 Tf 1.01 0 0 1 424.509 616.103 Tm [<0008>]TJ
+1.005 0 0 1 426.541 616.103 Tm [<00460045>]TJ
+1.01 0 0 1 436.213 616.103 Tm [<000A000D>]TJ
+1.005 0 0 1 444.169 616.103 Tm [<0042004F0045>-218<0042>]TJ
+1.01 0 0 1 468.444 616.103 Tm [<0053>]TJ
+1.005 0 0 1 472.218 616.103 Tm [<00460045>]TJ
+0.985 0 0 1 113.386 604.148 Tm [<0042>]TJ
+0.98 0 0 1 117.841 604.148 Tm [<0053>]TJ
+0.985 0 0 1 121.502 604.148 Tm [<00460042>]TJ
+0.98 0 0 1 132.524 604.148 Tm [<004A>]TJ
+0.985 0 0 1 135.121 604.148 Tm [<0054>-224<00510042>]TJ
+0.98 0 0 1 150.834 604.148 Tm [<004A>]TJ
+0.985 0 0 1 153.431 604.148 Tm [<004F>]TJ
+0.98 0 0 1 158.907 604.148 Tm [<0055>]TJ
+0.985 0 0 1 162.402 604.148 Tm [<00460045>-224<00430046>]TJ
+0.98 0 0 1 183.444 604.148 Tm [<004D>]TJ
+0.985 0 0 1 185.943 604.148 Tm [<00500058>]TJ
+0.98 0 0 1 197.572 604.148 Tm [<000D>]TJ
+0.985 0 0 1 202.166 604.148 Tm [<00580049>]TJ
+0.98 0 0 1 214.187 604.148 Tm [<004A>]TJ
+0.985 0 0 1 216.784 604.148 Tm [<00440049>-224<0048>]TJ
+0.98 0 0 1 232.86 604.148 Tm [<004A0057>]TJ
+0.985 0 0 1 240.075 604.148 Tm [<00460054>]TJ
+0.98 0 0 1 250.577 604.148 Tm [<0055>]TJ
+0.985 0 0 1 254.073 604.148 Tm [<00490046>]TJ
+0.98 0 0 1 265.988 604.148 Tm [<004A>]TJ
+0.985 0 0 1 268.585 604.148 Tm [<004E0051>]TJ
+0.98 0 0 1 281.676 604.148 Tm [<0053>]TJ
+0.985 0 0 1 285.337 604.148 Tm [<004600540054>]TJ
+0.98 0 0 1 297.574 604.148 Tm [<004A>]TJ
+0.985 0 0 1 300.171 604.148 Tm [<0050004F>]TJ
+0.98 0 0 1 312.803 604.148 Tm [<0055>]TJ
+0.985 0 0 1 316.298 604.148 Tm [<00490042>]TJ
+0.98 0 0 1 326.101 604.148 Tm [<0055>-225<0055>]TJ
+0.985 0 0 1 335.292 604.148 Tm [<00490046>]TJ
+0.98 0 0 1 347.207 604.148 Tm [<0055>]TJ
+0.985 0 0 1 350.702 604.148 Tm [<0046>]TJ
+0.98 0 0 1 355.069 604.148 Tm [<00590055>-225<004A>]TJ
+0.985 0 0 1 367.99 604.148 Tm [<0054>-224<00540046>]TJ
+0.98 0 0 1 382.427 604.148 Tm [<0055>-225<004A>]TJ
+0.985 0 0 1 390.719 604.148 Tm [<004F>-224<0042004F>-224<0042>]TJ
+0.98 0 0 1 414.981 604.148 Tm [<0053>]TJ
+0.985 0 0 1 418.642 604.148 Tm [<00460042>]TJ
+0.98 0 0 1 427.464 604.148 Tm [<000D>]TJ
+0.985 0 0 1 432.059 604.148 Tm [<005800490046>]TJ
+0.98 0 0 1 448.447 604.148 Tm [<0053>]TJ
+0.985 0 0 1 452.108 604.148 Tm [<004600420054>]TJ
+0.98 0 0 1 467.065 604.148 Tm [<004A0055>-225<004A>]TJ
+0.985 0 0 1 477.955 604.148 Tm [<0054>]TJ
+1 0 0 1 113.386 592.193 Tm [<0054004A004E004D0051005A>-220<00420054005A004E004E004600550053004A00440042004D004D005A>-220<00540049004A0047005500460045000F>]TJ
+ET
+q
+0.277973 0 0 0.277973 366.323 460.686 cm
+/Im3 Do
+Q
+BT
+/F111 7.97011 Tf 1 0 0 1 113.386 568.282 Tm [<002F004800460057005800550048005500270048005000520010003600540058004400550048005600320049002400560011>-1<005300470049>]TJ
+/F105 9.96264 Tf 1 0 0 1 250.083 568.282 Tm [<005800420054>-224<004A004F00540051004A005300460045>-224<0043005A>-224<00540050004E0046>-224<00240050004F000E>]TJ
+0.97 0 0 1 113.386 556.327 Tm [<0035>]TJ
+1 0 0 1 117.204 554.26 Tm [<0026>]TJ
+0.97 0 0 1 121.488 556.327 Tm [<00390055>]TJ
+0.98 0 0 1 132.532 556.327 Tm [<0051>]TJ
+0.97 0 0 1 137.629 556.327 Tm [<0053>]TJ
+0.98 0 0 1 141.252 556.327 Tm [<004600540046004F>]TJ
+0.97 0 0 1 159.305 556.327 Tm [<0055>]TJ
+0.98 0 0 1 162.765 556.327 Tm [<0042>]TJ
+0.97 0 0 1 167.197 556.327 Tm [<0055004A>]TJ
+0.98 0 0 1 173.227 556.327 Tm [<0050004F0054>]TJ
+0.97 0 0 1 187.521 556.327 Tm [<000D>]TJ
+0.98 0 0 1 191.841 556.327 Tm [<0042004F0045>-193<0056005400460054>-194<0050004F>]TJ
+0.97 0 0 1 238.301 556.327 Tm [<004D005A>]TJ
+0.98 0 0 1 247.131 556.327 Tm [<0042>]TJ
+0.97 0 0 1 251.564 556.327 Tm [<0053>]TJ
+0.98 0 0 1 255.188 556.327 Tm [<004600420054>]TJ
+0.97 0 0 1 269.772 556.327 Tm [<0055>]TJ
+0.98 0 0 1 273.232 556.327 Tm [<0050>]TJ
+0.97 0 0 1 280.055 556.327 Tm [<0055005A>]TJ
+0.98 0 0 1 287.979 556.327 Tm [<0051004600540046>]TJ
+0.97 0 0 1 305.68 556.327 Tm [<0055>-195<004A0055>]TJ
+0.98 0 0 1 317.062 556.327 Tm [<0054>-193<004E0042>]TJ
+0.97 0 0 1 335.23 556.327 Tm [<0055>]TJ
+0.98 0 0 1 338.689 556.327 Tm [<0046>]TJ
+0.97 0 0 1 343.034 556.327 Tm [<0053004A>]TJ
+0.98 0 0 1 349.228 556.327 Tm [<0042>]TJ
+0.97 0 0 1 353.661 556.327 Tm [<004D000F>]TJ
+1.01 0 0 1 113.386 544.372 Tm [<00230042>]TJ
+1.015 0 0 1 123.73 544.372 Tm [<00530053004A>]TJ
+1.01 0 0 1 134.004 544.372 Tm [<004F0048>]TJ
+1.015 0 0 1 146.505 544.372 Tm [<0055>]TJ
+1.01 0 0 1 150.125 544.372 Tm [<00490046>]TJ
+1.015 0 0 1 162.285 544.372 Tm [<004D>]TJ
+1.01 0 0 1 164.873 544.372 Tm [<00420054>]TJ
+1.015 0 0 1 173.477 544.372 Tm [<0055>]TJ
+1.01 0 0 1 179.294 544.372 Tm [<0054>]TJ
+1.015 0 0 1 183.329 544.372 Tm [<004D004A>]TJ
+1.01 0 0 1 188.608 544.372 Tm [<00450046>]TJ
+1.015 0 0 1 198.328 544.372 Tm [<000D>-217<0055>]TJ
+1.01 0 0 1 206.625 544.372 Tm [<00490046>]TJ
+1.015 0 0 1 216.586 544.372 Tm [<0053>]TJ
+1.01 0 0 1 220.378 544.372 Tm [<0046>]TJ
+1.015 0 0 1 224.856 544.372 Tm [<0008>]TJ
+1.01 0 0 1 226.899 544.372 Tm [<0054>-218<004F0050>]TJ
+1.015 0 0 1 243.828 544.372 Tm [<0055>]TJ
+1.01 0 0 1 247.448 544.372 Tm [<0049>]TJ
+1.015 0 0 1 252.932 544.372 Tm [<004A>]TJ
+1.01 0 0 1 255.622 544.372 Tm [<004F0048>]TJ
+1.015 0 0 1 268.123 544.372 Tm [<004A>]TJ
+1.01 0 0 1 270.813 544.372 Tm [<004F>]TJ
+1.015 0 0 1 278.625 544.372 Tm [<0055>]TJ
+1.01 0 0 1 282.245 544.372 Tm [<00490046>-218<004E0042>]TJ
+1.015 0 0 1 307.144 544.372 Tm [<004A>]TJ
+1.01 0 0 1 309.833 544.372 Tm [<004F>]TJ
+1.015 0 0 1 317.646 544.372 Tm [<0055>]TJ
+1.01 0 0 1 321.266 544.372 Tm [<0046>]TJ
+1.015 0 0 1 325.744 544.372 Tm [<00590055>]TJ
+1.01 0 0 1 334.157 544.372 Tm [<0043>]TJ
+1.015 0 0 1 339.279 544.372 Tm [<004D>]TJ
+1.01 0 0 1 341.867 544.372 Tm [<00500044004C>]TJ
+1.015 0 0 1 356.025 544.372 Tm [<000F>]TJ
+1.015 0 0 1 113.386 532.417 Tm [<0030>]TJ
+1.02 0 0 1 120.646 532.417 Tm [<004F>]TJ
+1.03 0 0 1 129.104 532.417 Tm [<0055>]TJ
+1.02 0 0 1 132.778 532.417 Tm [<00490046>]TJ
+1.03 0 0 1 145.625 532.417 Tm [<00EB0053>]TJ
+1.02 0 0 1 155.23 532.417 Tm [<0054>]TJ
+1.03 0 0 1 159.305 532.417 Tm [<0055>]TJ
+1.02 0 0 1 165.766 532.417 Tm [<0054>]TJ
+1.03 0 0 1 169.841 532.417 Tm [<004D004A>]TJ
+1.02 0 0 1 175.197 532.417 Tm [<00450046>]TJ
+1.03 0 0 1 185.014 532.417 Tm [<000D>-286<0055>]TJ
+1.02 0 0 1 194.138 532.417 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.03 0 0 1 206.986 532.417 Tm [<0059004C>]TJ
+1.02 0 0 1 216.878 532.417 Tm [<0056>]TJ
+1.03 0 0 1 221.777 532.417 Tm [<004C>]TJ
+1.02 0 0 1 226.723 532.417 Tm [<0045>]TJ
+1.03 0 0 1 231.621 532.417 Tm [<004F>]TJ
+1.02 0 0 1 236.568 532.417 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 244.253 532.417 Tm [<0042>]TJ
+1.03 0 0 1 248.867 532.417 Tm [<005500550053004A>]TJ
+1.02 0 0 1 262.792 532.417 Tm [<00430056>]TJ
+1.03 0 0 1 273.33 532.417 Tm [<0055>]TJ
+1.02 0 0 1 277.003 532.417 Tm [<0046>-274<0050>]TJ
+1.03 0 0 1 289.445 532.417 Tm [<0047>-271<0055>]TJ
+1.02 0 0 1 299.333 532.417 Tm [<00490046>-274<0042>]TJ
+1.03 0 0 1 316.794 532.417 Tm [<0053>]TJ
+1.02 0 0 1 320.642 532.417 Tm [<004600420054>]TJ
+1.03 0 0 1 336.64 532.417 Tm [<004A>]TJ
+1.02 0 0 1 339.37 532.417 Tm [<0054>-274<00540046>]TJ
+1.03 0 0 1 354.829 532.417 Tm [<0055>]TJ
+1.01 0 0 1 113.386 520.462 Tm [<0055>]TJ
+1.005 0 0 1 116.988 520.462 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 1.005 0 0 1 124.254 520.462 Tm [<0056>]TJ
+1.01 0 0 1 129.08 520.462 Tm [<0057>]TJ
+1.005 0 0 1 133.931 520.462 Tm [<00480053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.01 0 0 1 143.583 520.462 Tm [<000D>]TJ
+1.005 0 0 1 148.263 520.462 Tm [<00540050>-220<0042>]TJ
+1.01 0 0 1 164.089 520.462 Tm [<0053>]TJ
+1.005 0 0 1 167.863 520.462 Tm [<004600420054>-220<00420051005100460042>]TJ
+1.01 0 0 1 207.088 520.462 Tm [<0053>]TJ
+1.005 0 0 1 213.071 520.462 Tm [<0058>]TJ
+1.01 0 0 1 219.88 520.462 Tm [<004A0055>]TJ
+1.005 0 0 1 226.158 520.462 Tm [<0049>]TJ
+1.01 0 0 1 233.825 520.462 Tm [<0055>]TJ
+1.005 0 0 1 237.427 520.462 Tm [<00490046>]TJ
+1.01 0 0 1 247.339 520.462 Tm [<004A0053>]TJ
+1.005 0 0 1 255.999 520.462 Tm [<00440050004F>]TJ
+1.01 0 0 1 270.677 520.462 Tm [<0055>]TJ
+1.005 0 0 1 274.28 520.462 Tm [<0046004F>]TJ
+1.01 0 0 1 284.322 520.462 Tm [<0055000F>-295<0265>]TJ
+1.005 0 0 1 303.579 520.462 Tm [<0046>-220<004300420044004C0048>]TJ
+1.01 0 0 1 333.583 520.462 Tm [<0053>]TJ
+1.005 0 0 1 337.356 520.462 Tm [<00500056004F0045>]TJ
+1.02 0 0 1 113.386 508.506 Tm [<0050>]TJ
+1.03 0 0 1 118.518 508.506 Tm [<0047>-313<0055>]TJ
+1.02 0 0 1 128.835 508.506 Tm [<00490046>]TJ
+1.03 0 0 1 142.112 508.506 Tm [<0053>]TJ
+1.02 0 0 1 145.96 508.506 Tm [<0046004200450046>]TJ
+1.03 0 0 1 164.912 508.506 Tm [<0053>-313<004A>]TJ
+1.02 0 0 1 174.706 508.506 Tm [<0054>]TJ
+1.03 0 0 1 181.997 508.506 Tm [<0055>]TJ
+1.02 0 0 1 185.671 508.506 Tm [<0056>]TJ
+1.03 0 0 1 191.037 508.506 Tm [<0053>]TJ
+1.02 0 0 1 194.885 508.506 Tm [<004F00460045>]TJ
+1.03 0 0 1 213.588 508.506 Tm [<0055>]TJ
+1.02 0 0 1 217.262 508.506 Tm [<0050>-316<00580049>]TJ
+1.03 0 0 1 238.058 508.506 Tm [<004A0055>]TJ
+1.02 0 0 1 244.461 508.506 Tm [<0046>]TJ
+1.03 0 0 1 248.983 508.506 Tm [<000D>]TJ
+1.02 0 0 1 254.97 508.506 Tm [<00540050>]TJ
+1.03 0 0 1 267.393 508.506 Tm [<0055>]TJ
+1.02 0 0 1 271.067 508.506 Tm [<00490046>-316<0054>]TJ
+1.03 0 0 1 288.419 508.506 Tm [<004D004A>]TJ
+1.02 0 0 1 293.775 508.506 Tm [<004500460054>-316<005400460046004E>]TJ
+1.03 0 0 1 335.47 508.506 Tm [<0055>]TJ
+1.02 0 0 1 339.144 508.506 Tm [<0050>]TJ
+1.03 0 0 1 347.492 508.506 Tm [<00EB004D004D>]TJ
+1.03 0 0 1 113.386 496.551 Tm [<0055>]TJ
+1.02 0 0 1 117.059 496.551 Tm [<00490046>-246<0046004F>]TJ
+1.03 0 0 1 139.811 496.551 Tm [<0055004A0053>]TJ
+1.02 0 0 1 150.063 496.551 Tm [<0046>-245<00540044>]TJ
+1.03 0 0 1 165.254 496.551 Tm [<0053>]TJ
+1.02 0 0 1 169.102 496.551 Tm [<00460046004F>]TJ
+1.03 0 0 1 183.816 496.551 Tm [<000F>-374<0265>]TJ
+1.02 0 0 1 200.591 496.551 Tm [<0046>-245<0046004F>]TJ
+1.03 0 0 1 217.804 496.551 Tm [<0055004A0053>]TJ
+1.02 0 0 1 228.056 496.551 Tm [<0046>-245<0051>]TJ
+1.03 0 0 1 240.381 496.551 Tm [<0053>]TJ
+1.02 0 0 1 244.229 496.551 Tm [<004600540046004F>]TJ
+1.03 0 0 1 263.019 496.551 Tm [<0055>]TJ
+1.02 0 0 1 266.692 496.551 Tm [<0042>]TJ
+1.03 0 0 1 271.306 496.551 Tm [<0055004A>]TJ
+1.02 0 0 1 277.709 496.551 Tm [<0050004F>]TJ
+1.03 0 0 1 291.01 496.551 Tm [<004A>]TJ
+1.02 0 0 1 293.74 496.551 Tm [<0054>-245<00430056>]TJ
+1.03 0 0 1 310.852 496.551 Tm [<004A004D0055>]TJ
+1.02 0 0 1 322.381 496.551 Tm [<0050004F>-246<0042>-245<0054>]TJ
+1.03 0 0 1 346.87 496.551 Tm [<004A>]TJ
+1.02 0 0 1 349.6 496.551 Tm [<004F>]TJ
+1.03 0 0 1 355.27 496.551 Tm [<000E>]TJ
+1.02 0 0 1 113.386 484.596 Tm [<0048>]TJ
+1.03 0 0 1 118.121 484.596 Tm [<004D>]TJ
+1.02 0 0 1 120.748 484.596 Tm [<0046>]TJ
+1.03 0 0 1 128.262 484.596 Tm [<004D>]TJ
+1.02 0 0 1 130.889 484.596 Tm [<0046004F0048>]TJ
+1.03 0 0 1 145.817 484.596 Tm [<0055>]TJ
+1.02 0 0 1 149.49 484.596 Tm [<0049>]TJ
+1.03 0 0 1 158.02 484.596 Tm [<0009>]TJ
+/F111 7.97011 Tf 1.03 0 0 1 161.386 484.596 Tm [<003F>]TJ
+1.02 0 0 1 166.332 484.596 Tm [<0056005400580044>]TJ
+1.03 0 0 1 185.925 484.596 Tm [<0055>]TJ
+1.02 0 0 1 190.872 484.596 Tm [<0048005A>]TJ
+1.03 0 0 1 200.668 484.596 Tm [<004C>]TJ
+1.02 0 0 1 205.615 484.596 Tm [<0047>]TJ
+1.03 0 0 1 210.513 484.596 Tm [<0057>]TJ
+1.02 0 0 1 215.46 484.596 Tm [<004B>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 220.358 484.596 Tm [<000A>-291<004A>]TJ
+1.02 0 0 1 229.445 484.596 Tm [<004F>-294<00580049>]TJ
+1.03 0 0 1 250.555 484.596 Tm [<004A>]TJ
+1.02 0 0 1 253.284 484.596 Tm [<00440049>-294<0042>]TJ
+1.03 0 0 1 270.523 484.596 Tm [<004D004D>]TJ
+1.02 0 0 1 278.768 484.596 Tm [<0045>]TJ
+1.03 0 0 1 284.063 484.596 Tm [<004A>]TJ
+1.02 0 0 1 286.792 484.596 Tm [<004E0046004F0054>]TJ
+1.03 0 0 1 309.311 484.596 Tm [<004A>]TJ
+1.02 0 0 1 312.04 484.596 Tm [<0050004F0054>-294<0042>]TJ
+1.03 0 0 1 334.522 484.596 Tm [<0053>]TJ
+1.02 0 0 1 338.371 484.596 Tm [<0046>-294<0046>]TJ
+1.03 0 0 1 350.406 484.596 Tm [<0059000E>]TJ
+1 0 0 1 113.386 472.641 Tm [<0051>]TJ
+0.995 0 0 1 118.586 472.641 Tm [<0053>]TJ
+1 0 0 1 122.304 472.641 Tm [<00460054005400460045>]TJ
+0.995 0 0 1 144.351 472.641 Tm [<000D>-218<004A>]TJ
+1 0 0 1 151.581 472.641 Tm [<004F0044>]TJ
+0.995 0 0 1 161.155 472.641 Tm [<004D>]TJ
+1 0 0 1 163.693 472.641 Tm [<00560045>]TJ
+0.995 0 0 1 174.144 472.641 Tm [<004A>]TJ
+1 0 0 1 176.781 472.641 Tm [<004F0048>]TJ
+0.995 0 0 1 189.141 472.641 Tm [<0047>]TJ
+1 0 0 1 192.452 472.641 Tm [<0050004F>]TJ
+0.995 0 0 1 203.042 472.641 Tm [<0055>]TJ
+1 0 0 1 208.749 472.641 Tm [<0054>]TJ
+0.995 0 0 1 212.744 472.641 Tm [<004A>]TJ
+1 0 0 1 215.381 472.641 Tm [<005B00460054>]TJ
+0.995 0 0 1 230.361 472.641 Tm [<0009>]TJ
+1 0 0 1 233.612 472.641 Tm [<0054005600440049>-216<00440056004E00430046>]TJ
+0.995 0 0 1 281.34 472.641 Tm [<0053>]TJ
+1 0 0 1 285.057 472.641 Tm [<00540050004E0046>]TJ
+0.995 0 0 1 308.764 472.641 Tm [<0047>]TJ
+1 0 0 1 312.075 472.641 Tm [<0050004F>]TJ
+0.995 0 0 1 322.665 472.641 Tm [<0055>]TJ
+1 0 0 1 328.372 472.641 Tm [<0054>]TJ
+0.995 0 0 1 332.367 472.641 Tm [<004A>]TJ
+1 0 0 1 335.004 472.641 Tm [<005B00460054>-216<00420054>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 113.386 460.686 Tm [<00140011>]TJ
+0.98 0 0 1 122.702 460.686 Tm [<001B0016>]TJ
+0.97 0 0 1 132.115 460.686 Tm [<003F>]TJ
+0.98 0 0 1 136.773 460.686 Tm [<0056005400580044>]TJ
+0.97 0 0 1 155.598 460.686 Tm [<0055>]TJ
+0.98 0 0 1 160.256 460.686 Tm [<0048005A>]TJ
+0.97 0 0 1 169.669 460.686 Tm [<004C>]TJ
+0.98 0 0 1 174.327 460.686 Tm [<0047>]TJ
+0.97 0 0 1 179.033 460.686 Tm [<0057>]TJ
+0.98 0 0 1 183.692 460.686 Tm [<004B>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 190.518 460.686 Tm [<0042>]TJ
+0.97 0 0 1 194.95 460.686 Tm [<0053>]TJ
+0.98 0 0 1 198.574 460.686 Tm [<0046>-217<004E00460042004F>]TJ
+0.97 0 0 1 227.191 460.686 Tm [<0055>-219<0055>]TJ
+0.98 0 0 1 236.23 460.686 Tm [<0050>-217<004E0042004C0046>-217<0042>]TJ
+0.97 0 0 1 271.41 460.686 Tm [<004D004D>-219<004D>]TJ
+0.98 0 0 1 280.951 460.686 Tm [<0046>]TJ
+0.97 0 0 1 285.296 460.686 Tm [<00550055>]TJ
+0.98 0 0 1 292.215 460.686 Tm [<0046>]TJ
+0.97 0 0 1 296.56 460.686 Tm [<0053>]TJ
+0.98 0 0 1 300.184 460.686 Tm [<0054>-217<00420051005100460042>]TJ
+0.97 0 0 1 329.622 460.686 Tm [<0053>]TJ
+0.98 0 0 1 335.365 460.686 Tm [<0042>]TJ
+0.97 0 0 1 339.798 460.686 Tm [<0055>-219<0055>]TJ
+0.98 0 0 1 348.837 460.686 Tm [<00490046>]TJ
+1.005 0 0 1 113.386 448.731 Tm [<00540042004E0046>-213<00490046004A004800490055000A000F>-290<026500560054>-214<005500490046>-214<00510053004600540046004F005500420055004A0050004F>-214<004A0054>-213<0055005000550042004D004D005A>-214<005400440042004D00420043004D0046000F>-290<002D004A004C0046>-214<004A004F>-214<005500490046>-213<002E0050004F00450053004A0042004F>-214<00510053004600540046004F005500420055004A0050004F000D>]TJ
+0.99 0 0 1 113.386 436.775 Tm [<0042005500550053004A00430056005500460054>-223<004200530046>-223<004500460044004D0042005300460045>-223<004E005000540055004D005A>-223<004700500053>-223<0042004D004D>-223<00420053004600420054>-223<00420055>-223<0050004F00440046000D>-223<00540050>-223<005500490046>-224<004500460054004A0048004F>-223<00440042004F>-223<00430046>-223<004600420054004A004D005A>-223<004E00500045004A00EB00460045000F>-299<02650046>]TJ
+0.99 0 0 1 113.386 424.82 Tm [<00470053>]TJ
+0.995 0 0 1 120.379 424.82 Tm [<0042004E00460054>-221<0050>]TJ
+0.99 0 0 1 148.519 424.82 Tm [<0047>-223<0055>]TJ
+0.995 0 0 1 157.543 424.82 Tm [<00490046>-221<0042>]TJ
+0.99 0 0 1 174.056 424.82 Tm [<0053>]TJ
+0.995 0 0 1 177.755 424.82 Tm [<004600420054>-221<00490042>]TJ
+0.99 0 0 1 202.743 424.82 Tm [<0057>]TJ
+0.995 0 0 1 207.408 424.82 Tm [<0046>-221<004F004600480042>]TJ
+0.99 0 0 1 233.08 424.82 Tm [<0055004A0057>]TJ
+0.995 0 0 1 243.9 424.82 Tm [<0046>-221<0058>]TJ
+0.99 0 0 1 257.251 424.82 Tm [<004A>]TJ
+0.995 0 0 1 259.874 424.82 Tm [<0045>]TJ
+0.99 0 0 1 265.039 424.82 Tm [<0055>]TJ
+0.995 0 0 1 268.57 424.82 Tm [<0049>]TJ
+0.99 0 0 1 273.972 424.82 Tm [<000D>]TJ
+0.995 0 0 1 278.589 424.82 Tm [<00540050>]TJ
+0.99 0 0 1 289.769 424.82 Tm [<0055>]TJ
+0.995 0 0 1 293.3 424.82 Tm [<00490046>]TJ
+0.99 0 0 1 303.114 424.82 Tm [<005A>]TJ
+0.995 0 0 1 309.869 424.82 Tm [<0042>]TJ
+0.99 0 0 1 314.37 424.82 Tm [<0053>]TJ
+0.995 0 0 1 318.068 424.82 Tm [<0046>-221<00510042>]TJ
+0.99 0 0 1 334.353 424.82 Tm [<004A>]TJ
+0.995 0 0 1 336.977 424.82 Tm [<004F>]TJ
+0.99 0 0 1 342.508 424.82 Tm [<0055>]TJ
+0.995 0 0 1 346.039 424.82 Tm [<00460045>]TJ
+0.99 0 0 1 357.813 424.82 Tm [<004A>]TJ
+0.995 0 0 1 360.437 424.82 Tm [<004F0054>]TJ
+0.99 0 0 1 369.943 424.82 Tm [<004A>]TJ
+0.995 0 0 1 372.567 424.82 Tm [<00450046>]TJ
+0.99 0 0 1 384.342 424.82 Tm [<0055>]TJ
+0.995 0 0 1 387.873 424.82 Tm [<00490046>-221<0042>]TJ
+0.99 0 0 1 404.385 424.82 Tm [<0053>]TJ
+0.995 0 0 1 408.084 424.82 Tm [<004600420054>-221<0042004F0045>]TJ
+0.99 0 0 1 440.564 424.82 Tm [<0055>]TJ
+0.995 0 0 1 444.095 424.82 Tm [<00490046>]TJ
+0.99 0 0 1 453.909 424.82 Tm [<005A>]TJ
+0.995 0 0 1 460.665 424.82 Tm [<00450050004F>]TJ
+0.99 0 0 1 476.366 424.82 Tm [<00080055>]TJ
+0.985 0 0 1 113.386 412.865 Tm [<00490042>]TJ
+0.98 0 0 1 123.189 412.865 Tm [<0057>]TJ
+0.985 0 0 1 127.807 412.865 Tm [<0046>]TJ
+0.98 0 0 1 134.393 412.865 Tm [<0055>]TJ
+0.985 0 0 1 137.888 412.865 Tm [<0050>-226<00430046>]TJ
+0.98 0 0 1 156.643 412.865 Tm [<0055>]TJ
+0.985 0 0 1 160.138 412.865 Tm [<0042004C0046004F>]TJ
+0.98 0 0 1 181.551 412.865 Tm [<004A>]TJ
+0.985 0 0 1 184.148 412.865 Tm [<004F>]TJ
+0.98 0 0 1 189.624 412.865 Tm [<0055>]TJ
+0.985 0 0 1 193.119 412.865 Tm [<0050>-226<00420044004400500056004F>]TJ
+0.98 0 0 1 228.271 412.865 Tm [<0055>]TJ
+0.985 0 0 1 233.985 412.865 Tm [<005800490046004F>-226<00440050004E00510056>]TJ
+0.98 0 0 1 285.25 412.865 Tm [<0055004A>]TJ
+0.985 0 0 1 291.342 412.865 Tm [<004F0048>-226<005100500054>]TJ
+0.98 0 0 1 317.623 412.865 Tm [<004A0055004A>]TJ
+0.985 0 0 1 326.312 412.865 Tm [<0050004F0054>]TJ
+0.98 0 0 1 340.679 412.865 Tm [<000F>]TJ
+0.99 0 0 1 346.074 412.865 Tm [<0022>]TJ
+0.985 0 0 1 352.051 412.865 Tm [<0044>]TJ
+0.98 0 0 1 356.005 412.865 Tm [<0055>]TJ
+0.985 0 0 1 359.501 412.865 Tm [<00560042>]TJ
+0.98 0 0 1 369.137 412.865 Tm [<004D004D005A000D>-227<0055>]TJ
+0.985 0 0 1 386.759 412.865 Tm [<00490046>]TJ
+0.98 0 0 1 396.474 412.865 Tm [<004A0053>]TJ
+0.985 0 0 1 404.951 412.865 Tm [<00440050004F>]TJ
+0.98 0 0 1 419.338 412.865 Tm [<00550053004A>]TJ
+0.985 0 0 1 429.091 412.865 Tm [<00430056>]TJ
+0.98 0 0 1 439.267 412.865 Tm [<0055004A>]TJ
+0.985 0 0 1 445.36 412.865 Tm [<0050004F>]TJ
+0.98 0 0 1 458.01 412.865 Tm [<0055>]TJ
+0.985 0 0 1 461.505 412.865 Tm [<0050>]TJ
+0.98 0 0 1 468.679 412.865 Tm [<0055>]TJ
+0.985 0 0 1 472.175 412.865 Tm [<00490046>]TJ
+1.015 0 0 1 113.386 400.91 Tm [<004500460054>]TJ
+1.02 0 0 1 127.209 400.91 Tm [<004A>]TJ
+1.015 0 0 1 129.912 400.91 Tm [<0048004F>]TJ
+1.02 0 0 1 142.406 400.91 Tm [<0053>]TJ
+1.015 0 0 1 146.217 400.91 Tm [<00460054>]TJ
+1.02 0 0 1 154.772 400.91 Tm [<004A>]TJ
+1.015 0 0 1 157.475 400.91 Tm [<004500460054>]TJ
+1.02 0 0 1 173.437 400.91 Tm [<004A>]TJ
+1.015 0 0 1 176.14 400.91 Tm [<004F>]TJ
+1.02 0 0 1 183.922 400.91 Tm [<0055>]TJ
+1.015 0 0 1 187.56 400.91 Tm [<00490046>]TJ
+1.02 0 0 1 197.571 400.91 Tm [<004A0053>-210<0053>]TJ
+1.015 0 0 1 210.035 400.91 Tm [<00500056004F004500460045>-211<00440050>]TJ
+1.02 0 0 1 252.48 400.91 Tm [<0053>]TJ
+1.015 0 0 1 256.291 400.91 Tm [<004F0046>]TJ
+1.02 0 0 1 266.434 400.91 Tm [<0053>]TJ
+1.015 0 0 1 272.384 400.91 Tm [<0050004F>]TJ
+1.02 0 0 1 283.133 400.91 Tm [<004D005A000D>]TJ
+1.015 0 0 1 295.068 400.91 Tm [<0054>]TJ
+1.02 0 0 1 299.123 400.91 Tm [<004A>]TJ
+1.015 0 0 1 301.826 400.91 Tm [<004F00440046>]TJ
+1.02 0 0 1 318.183 400.91 Tm [<0055>]TJ
+1.015 0 0 1 321.821 400.91 Tm [<00490046>]TJ
+1.02 0 0 1 331.832 400.91 Tm [<005A>]TJ
+1.015 0 0 1 338.666 400.91 Tm [<00490042>]TJ
+1.02 0 0 1 348.768 400.91 Tm [<0057>]TJ
+1.015 0 0 1 353.575 400.91 Tm [<0046>]TJ
+1.02 0 0 1 360.214 400.91 Tm [<0055>]TJ
+1.015 0 0 1 363.852 400.91 Tm [<00490046>-211<00540042004E0046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.015 0 0 1 399.498 400.91 Tm [<004500440046004E004A>]TJ
+1.02 0 0 1 423.869 400.91 Tm [<0055>]TJ
+1.015 0 0 1 428.768 400.91 Tm [<0052005800510047>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.015 0 0 1 450.404 400.91 Tm [<00440050>]TJ
+1.02 0 0 1 459.586 400.91 Tm [<004D>]TJ
+1.015 0 0 1 462.187 400.91 Tm [<0050>]TJ
+1.02 0 0 1 467.294 400.91 Tm [<0053>]TJ
+1.015 0 0 1 473.244 400.91 Tm [<00420054>]TJ
+1 0 0 1 113.386 388.955 Tm [<005500490046>-220<00420053004600420054000F>]TJ
+0.99 0 0 1 133.311 377 Tm [<02650046>-225<00510053004600540046004F005500420055004A0050004F>-225<004A005500540046004D0047>-225<004A0054>-225<0042>-226<00580042004F004500460053004A004F0048>-225<0042004E0050004F0048>-225<005400460057004600530042004D>-225<00480056004A005400460054>-226<00500047>-225<005500490046>-225<004D00460055005500460053>]TJ
+/F63 9.96264 Tf 0.99 0 0 1 424.14 377 Tm [<0042>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 428.687 377 Tm [<000D>-225<0058004A00550049>-226<005400460057004600530042004D>]TJ
+0.99 0 0 1 113.386 365.044 Tm [<004F0050004F>]TJ
+0.985 0 0 1 129.374 365.044 Tm [<000E00470053>]TJ
+0.99 0 0 1 139.422 365.044 Tm [<00460046>]TJ
+0.985 0 0 1 150.434 365.044 Tm [<00350053>]TJ
+0.99 0 0 1 159.678 365.044 Tm [<00560046>]TJ
+0.985 0 0 1 169.275 365.044 Tm [<0035005A>]TJ
+0.99 0 0 1 179.373 365.044 Tm [<00510046>]TJ
+0.985 0 0 1 191.144 365.044 Tm [<0047>]TJ
+0.99 0 0 1 194.422 365.044 Tm [<0050004F>]TJ
+0.985 0 0 1 204.906 365.044 Tm [<0055>]TJ
+0.99 0 0 1 208.419 365.044 Tm [<0054>]TJ
+0.985 0 0 1 214.608 365.044 Tm [<00090053>]TJ
+0.99 0 0 1 221.507 365.044 Tm [<004600520056>]TJ
+0.985 0 0 1 236.104 365.044 Tm [<004A0053004A>]TJ
+0.99 0 0 1 245.005 365.044 Tm [<004F0048>]TJ
+0.985 0 0 1 257.338 365.044 Tm [<002D>]TJ
+0.99 0 0 1 262.471 365.044 Tm [<00560042>]TJ
+0.985 0 0 1 272.156 365.044 Tm [<0035>]TJ
+1 0 0 1 276.059 362.977 Tm [<0026>]TJ
+0.985 0 0 1 280.343 365.044 Tm [<0039000A000D>]TJ
+0.99 0 0 1 293.98 365.044 Tm [<0042004F0045>]TJ
+0.985 0 0 1 311.334 365.044 Tm [<0055>]TJ
+0.99 0 0 1 314.847 365.044 Tm [<004900560054>]TJ
+0.985 0 0 1 331.619 365.044 Tm [<005A>]TJ
+0.99 0 0 1 336.152 365.044 Tm [<00500056>-226<0054004900500056>]TJ
+0.985 0 0 1 368.094 365.044 Tm [<004D>]TJ
+0.99 0 0 1 370.606 365.044 Tm [<0045>-226<004400490042004F00480046>]TJ
+0.985 0 0 1 408.529 365.044 Tm [<0055>]TJ
+0.99 0 0 1 412.042 365.044 Tm [<0049005000540046>]TJ
+0.985 0 0 1 432.976 365.044 Tm [<0055>]TJ
+0.99 0 0 1 436.489 365.044 Tm [<0050>]TJ
+0.985 0 0 1 443.704 365.044 Tm [<0047>]TJ
+0.99 0 0 1 446.981 365.044 Tm [<0050004F>]TJ
+0.985 0 0 1 457.466 365.044 Tm [<0055>]TJ
+0.99 0 0 1 460.979 365.044 Tm [<0054>]TJ
+0.985 0 0 1 467.168 365.044 Tm [<005A>]TJ
+0.99 0 0 1 471.701 365.044 Tm [<00500056>]TJ
+0.995 0 0 1 113.386 353.089 Tm [<00500058004F>-220<0042004F0045>-220<00440042004F>-220<004E0042004F004200480046>-220<004A0047>-220<005A00500056>-220<00580042004F0055>-220<00550050>-220<00440050004E0051004A004D0046>-220<005500490046>-220<005400500056005300440046000F>-295<0009002A0047>-220<005A00500056>-220<00550049004A004F004C>-220<004A0055>-220<004A0054>-220<004A004F00490056004E0042004F>-220<00550050>-220<004E0042004C0046>]TJ
+0.98 0 0 1 113.386 341.134 Tm [<0055>]TJ
+0.985 0 0 1 116.881 341.134 Tm [<00490046>-226<00510042>]TJ
+0.98 0 0 1 138.393 341.134 Tm [<00530055>]TJ
+0.985 0 0 1 147.769 341.134 Tm [<0050>]TJ
+0.98 0 0 1 152.725 341.134 Tm [<0047>-227<0055>]TJ
+0.985 0 0 1 161.7 341.134 Tm [<00490046>]TJ
+0.98 0 0 1 173.635 341.134 Tm [<004D>]TJ
+0.985 0 0 1 176.134 341.134 Tm [<0046>]TJ
+0.98 0 0 1 180.501 341.134 Tm [<00550055>]TJ
+0.985 0 0 1 187.492 341.134 Tm [<0046>]TJ
+0.98 0 0 1 191.859 341.134 Tm [<0053>]TJ
+0.985 0 0 1 195.52 341.134 Tm [<0054>-226<00430046>]TJ
+0.98 0 0 1 211.036 341.134 Tm [<004D>]TJ
+0.985 0 0 1 213.536 341.134 Tm [<00500058>]TJ
+0.98 0 0 1 227.384 341.134 Tm [<0055>]TJ
+0.985 0 0 1 230.879 341.134 Tm [<00490046>-226<0043004200540046>]TJ
+0.98 0 0 1 260.565 341.134 Tm [<004D004A>]TJ
+0.985 0 0 1 265.662 341.134 Tm [<004F0046>-226<0045>]TJ
+0.98 0 0 1 282.837 341.134 Tm [<004A>]TJ
+0.985 0 0 1 285.434 341.134 Tm [<005400420051005100460042>]TJ
+0.98 0 0 1 312.891 341.134 Tm [<0053>-227<004A>]TJ
+0.985 0 0 1 321.369 341.134 Tm [<004F>]TJ
+0.98 0 0 1 329.064 341.134 Tm [<0055>]TJ
+0.985 0 0 1 332.559 341.134 Tm [<00490046>-226<00580049>]TJ
+0.98 0 0 1 356.515 341.134 Tm [<004A0055>]TJ
+0.985 0 0 1 362.607 341.134 Tm [<0046>-226<004300420044004C0048>]TJ
+0.98 0 0 1 392.068 341.134 Tm [<0053>]TJ
+0.985 0 0 1 395.729 341.134 Tm [<00500056004F0045>]TJ
+0.98 0 0 1 416.455 341.134 Tm [<000D>-228<004B>]TJ
+0.985 0 0 1 423.455 341.134 Tm [<00560054>]TJ
+0.98 0 0 1 432.572 341.134 Tm [<0055>]TJ
+0.985 0 0 1 438.286 341.134 Tm [<004400490042004F00480046>]TJ
+0.98 0 0 1 468.679 341.134 Tm [<0055>]TJ
+0.985 0 0 1 472.175 341.134 Tm [<00490046>]TJ
+1 0 0 1 113.386 329.179 Tm [<004D00420055005500460053000F>-293<002B00500057004A00440042>-220<00370046004D004B00500057004A01A500080054>]TJ
+/F63 9.96264 Tf 1 0 0 1 209.399 329.179 Tm [<0026005400510053004A0055>]TJ
+/F105 9.96264 Tf 1 0 0 1 234.794 329.179 Tm [<0058004A004D004D>-220<0053004600480042004A004F>-220<004A00550054>-220<00540051004A0053004A0055>-220<004A004F0045004600460045000F000A>]TJ
+ET
+q
+0.339745 0 0 0.339745 113.386 197.672 cm
+/Im4 Do
+Q
+BT
+/F111 7.97011 Tf 1 0 0 1 267.807 305.269 Tm [<002F0048004600570058005500480055002700480050005200100036004C00500053004F0048003300550048005600480051>-1<005700440057004C005200510011005300470049>]TJ
+/F105 9.96264 Tf 1 0 0 1 437.991 305.269 Tm [<0056005400460054>-211<0042>-211<005700460053005A>]TJ
+1.01 0 0 1 267.807 293.313 Tm [<0054>]TJ
+1.015 0 0 1 271.842 293.313 Tm [<004A>]TJ
+1.01 0 0 1 274.532 293.313 Tm [<004E0051>]TJ
+1.015 0 0 1 287.955 293.313 Tm [<004D>]TJ
+1.01 0 0 1 290.544 293.313 Tm [<0046>-217<0045>]TJ
+1.015 0 0 1 302.455 293.313 Tm [<004A>]TJ
+1.01 0 0 1 305.144 293.313 Tm [<00540051>]TJ
+1.015 0 0 1 314.432 293.313 Tm [<004D>]TJ
+1.01 0 0 1 317.021 293.313 Tm [<0042>]TJ
+1.015 0 0 1 321.589 293.313 Tm [<005A000D>]TJ
+1.01 0 0 1 330.929 293.313 Tm [<00430056>]TJ
+1.015 0 0 1 341.364 293.313 Tm [<004A004D0055>]TJ
+1.01 0 0 1 352.453 293.313 Tm [<0050004F>-217<0042>-218<004E>]TJ
+1.015 0 0 1 380.27 293.313 Tm [<004A004D004D004A>]TJ
+1.01 0 0 1 390.827 293.313 Tm [<004E0046>]TJ
+1.015 0 0 1 403.476 293.313 Tm [<00550053004A>]TJ
+1.01 0 0 1 413.578 293.313 Tm [<0044>-217<0048>]TJ
+1.015 0 0 1 424.513 293.313 Tm [<0053004A>]TJ
+1.01 0 0 1 430.995 293.313 Tm [<0045>]TJ
+1.015 0 0 1 436.237 293.313 Tm [<000D>]TJ
+1.01 0 0 1 440.906 293.313 Tm [<00580049>]TJ
+1.015 0 0 1 453.232 293.313 Tm [<004A>]TJ
+1.01 0 0 1 455.922 293.313 Tm [<00440049>-217<00440042004F>]TJ
+1.02 0 0 1 267.807 281.358 Tm [<00430046>-227<0045>]TJ
+1.03 0 0 1 285.109 281.358 Tm [<004A>]TJ
+1.02 0 0 1 287.838 281.358 Tm [<00540051>]TJ
+1.03 0 0 1 297.218 281.358 Tm [<004D>]TJ
+1.02 0 0 1 299.845 281.358 Tm [<0042>]TJ
+1.03 0 0 1 304.458 281.358 Tm [<005A>]TJ
+1.02 0 0 1 309.199 281.358 Tm [<00460045>-227<0043>]TJ
+1.03 0 0 1 326.501 281.358 Tm [<005A>]TJ
+1.02 0 0 1 333.554 281.358 Tm [<0056004F00440050004E004E0046004F>]TJ
+1.03 0 0 1 380.512 281.358 Tm [<0055004A>]TJ
+1.02 0 0 1 386.916 281.358 Tm [<004F0048>]TJ
+1.03 0 0 1 399.634 281.358 Tm [<0055>]TJ
+1.02 0 0 1 403.308 281.358 Tm [<00490046>]TJ
+1.03 0 0 1 415.681 281.358 Tm [<00EB0053>]TJ
+1.02 0 0 1 425.286 281.358 Tm [<0054>]TJ
+1.03 0 0 1 429.361 281.358 Tm [<0055>-225<004D004A>]TJ
+1.02 0 0 1 440.704 281.358 Tm [<004F00460054>-227<0050>]TJ
+1.03 0 0 1 462.416 281.358 Tm [<0047>-225<0055>]TJ
+1.02 0 0 1 471.829 281.358 Tm [<00490046>]TJ
+0.97 0 0 1 267.807 269.403 Tm [<00EB004D>]TJ
+0.98 0 0 1 275.702 269.403 Tm [<0046>]TJ
+0.97 0 0 1 280.047 269.403 Tm [<000F>]TJ
+0.98 0 0 1 285.242 269.403 Tm [<00340050004E0046>-195<005400560043>]TJ
+0.97 0 0 1 323.196 269.403 Tm [<0055004D>]TJ
+0.98 0 0 1 329.13 269.403 Tm [<0046>]TJ
+0.97 0 0 1 333.475 269.403 Tm [<0055004A>]TJ
+0.98 0 0 1 339.505 269.403 Tm [<00460054>-195<0042>]TJ
+0.97 0 0 1 354.105 269.403 Tm [<0053>]TJ
+0.98 0 0 1 357.729 269.403 Tm [<0046>]TJ
+0.97 0 0 1 363.981 269.403 Tm [<004A>]TJ
+0.98 0 0 1 366.552 269.403 Tm [<004F0044>]TJ
+0.97 0 0 1 375.935 269.403 Tm [<004D>]TJ
+0.98 0 0 1 378.408 269.403 Tm [<0056004500460045>]TJ
+0.97 0 0 1 399.989 269.403 Tm [<004A>]TJ
+0.98 0 0 1 402.56 269.403 Tm [<004F>]TJ
+0.97 0 0 1 409.916 269.403 Tm [<0055>]TJ
+0.98 0 0 1 413.375 269.403 Tm [<00490046>-195<0051>]TJ
+0.97 0 0 1 430.045 269.403 Tm [<0053>]TJ
+0.98 0 0 1 433.669 269.403 Tm [<004600540046004F>]TJ
+0.97 0 0 1 451.722 269.403 Tm [<0055>]TJ
+0.98 0 0 1 455.181 269.403 Tm [<0042>]TJ
+0.97 0 0 1 459.614 269.403 Tm [<0055004A>]TJ
+0.98 0 0 1 465.644 269.403 Tm [<0050004F>]TJ
+0.97 0 0 1 476.023 269.403 Tm [<0008>]TJ
+0.98 0 0 1 477.975 269.403 Tm [<0054>]TJ
+1.03 0 0 1 267.807 257.448 Tm [<00EC>]TJ
+1.02 0 0 1 273.594 257.448 Tm [<00500058>]TJ
+1.03 0 0 1 285.636 257.448 Tm [<001C>-366<0047>]TJ
+1.02 0 0 1 295.341 257.448 Tm [<0050>]TJ
+1.03 0 0 1 300.473 257.448 Tm [<0053>-315<004A>]TJ
+1.02 0 0 1 310.29 257.448 Tm [<004F0054>]TJ
+1.03 0 0 1 320.035 257.448 Tm [<0055>]TJ
+1.02 0 0 1 323.709 257.448 Tm [<0042004F00440046>]TJ
+1.03 0 0 1 342.61 257.448 Tm [<000D>-341<0055>]TJ
+1.02 0 0 1 352.299 257.448 Tm [<00490046>]TJ
+1.03 0 0 1 365.599 257.448 Tm [<00550053004A>]TJ
+1.02 0 0 1 375.85 257.448 Tm [<0042004F0048>]TJ
+1.03 0 0 1 390.869 257.448 Tm [<004D>]TJ
+1.02 0 0 1 393.496 257.448 Tm [<00460054>-318<0042>]TJ
+1.03 0 0 1 409.946 257.448 Tm [<0055>-315<0055>]TJ
+1.02 0 0 1 420.533 257.448 Tm [<00490046>]TJ
+1.03 0 0 1 433.833 257.448 Tm [<004D>]TJ
+1.02 0 0 1 436.46 257.448 Tm [<0046>]TJ
+1.03 0 0 1 440.982 257.448 Tm [<00470055>]TJ
+1.02 0 0 1 451.322 257.448 Tm [<0050>]TJ
+1.03 0 0 1 456.454 257.448 Tm [<0047>]TJ
+1.02 0 0 1 463.121 257.448 Tm [<0046004200440049>]TJ
+1.03 0 0 1 267.807 245.493 Tm [<0057>]TJ
+1.02 0 0 1 272.661 245.493 Tm [<0046>]TJ
+1.03 0 0 1 277.183 245.493 Tm [<00530055004A>]TJ
+1.02 0 0 1 287.434 245.493 Tm [<00440042>]TJ
+1.03 0 0 1 296.143 245.493 Tm [<004D>]TJ
+1.02 0 0 1 301.281 245.493 Tm [<0054>]TJ
+1.03 0 0 1 305.355 245.493 Tm [<0055>]TJ
+1.02 0 0 1 309.029 245.493 Tm [<00460051>-247<0042>]TJ
+1.03 0 0 1 325.98 245.493 Tm [<0053>]TJ
+1.02 0 0 1 329.828 245.493 Tm [<0046>-247<0042>]TJ
+1.03 0 0 1 341.474 245.493 Tm [<004D0053>]TJ
+1.02 0 0 1 347.949 245.493 Tm [<004600420045>]TJ
+1.03 0 0 1 362.379 245.493 Tm [<005A>]TJ
+1.02 0 0 1 369.631 245.493 Tm [<00510042>]TJ
+1.03 0 0 1 379.549 245.493 Tm [<004A>]TJ
+1.02 0 0 1 382.279 245.493 Tm [<004F>]TJ
+1.03 0 0 1 387.949 245.493 Tm [<0055>]TJ
+1.02 0 0 1 391.623 245.493 Tm [<00460045>-247<0050004F>]TJ
+1.03 0 0 1 417.263 245.493 Tm [<0055>]TJ
+1.02 0 0 1 420.936 245.493 Tm [<00490046>-247<0054>]TJ
+1.03 0 0 1 437.582 245.493 Tm [<004D004A>]TJ
+1.02 0 0 1 442.939 245.493 Tm [<00450046>-247<00430046>]TJ
+1.03 0 0 1 464.961 245.493 Tm [<0047>]TJ
+1.02 0 0 1 468.388 245.493 Tm [<0050>]TJ
+1.03 0 0 1 473.52 245.493 Tm [<0053>]TJ
+1.02 0 0 1 477.368 245.493 Tm [<0046>]TJ
+1.025 0 0 1 267.807 233.538 Tm [<0055>]TJ
+1.015 0 0 1 271.463 233.538 Tm [<00490046>-218<0054>]TJ
+1.025 0 0 1 287.734 233.538 Tm [<0055>]TJ
+1.015 0 0 1 291.39 233.538 Tm [<004600510054>-218<00420051005100460042>]TJ
+1.025 0 0 1 331.667 233.538 Tm [<0053000F>-290<0265004A>]TJ
+1.015 0 0 1 354.043 233.538 Tm [<0054>]TJ
+1.025 0 0 1 360.303 233.538 Tm [<004A>]TJ
+1.015 0 0 1 363.019 233.538 Tm [<0054>-218<00450050004F0046>-218<0043>]TJ
+1.025 0 0 1 397.149 233.538 Tm [<005A>]TJ
+1.015 0 0 1 404.072 233.538 Tm [<0044>]TJ
+1.025 0 0 1 408.148 233.538 Tm [<0053>]TJ
+1.015 0 0 1 411.977 233.538 Tm [<00460042>]TJ
+1.025 0 0 1 421.068 233.538 Tm [<0055004A>]TJ
+1.015 0 0 1 427.44 233.538 Tm [<004F0048>]TJ
+1.025 0 0 1 440 233.538 Tm [<0055>]TJ
+1.015 0 0 1 443.656 233.538 Tm [<00580050>-218<0054>]TJ
+1.025 0 0 1 461.899 233.538 Tm [<0055>]TJ
+1.015 0 0 1 465.555 233.538 Tm [<004600510054>]TJ
+1.025 0 0 1 479.388 233.538 Tm [<000D>]TJ
+0.99 0 0 1 267.807 221.582 Tm [<0050004F0046>]TJ
+0.985 0 0 1 284.859 221.582 Tm [<0047>]TJ
+0.99 0 0 1 288.136 221.582 Tm [<0050>]TJ
+0.985 0 0 1 293.117 221.582 Tm [<0053>-222<0055>]TJ
+0.99 0 0 1 302.488 221.582 Tm [<00490046>]TJ
+0.985 0 0 1 314.431 221.582 Tm [<00550053004A>]TJ
+0.99 0 0 1 324.234 221.582 Tm [<0042004F0048>]TJ
+0.985 0 0 1 338.812 221.582 Tm [<004D>]TJ
+0.99 0 0 1 341.324 221.582 Tm [<0046>-220<0058>]TJ
+0.985 0 0 1 354.598 221.582 Tm [<004A0055>]TJ
+0.99 0 0 1 360.722 221.582 Tm [<0049>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 368.275 221.582 Tm [<0059004C>]TJ
+0.99 0 0 1 377.736 221.582 Tm [<0056>]TJ
+0.985 0 0 1 382.49 221.582 Tm [<004C>]TJ
+0.99 0 0 1 387.22 221.582 Tm [<0045>]TJ
+0.985 0 0 1 391.974 221.582 Tm [<004F>]TJ
+0.99 0 0 1 396.705 221.582 Tm [<0048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 403.637 221.582 Tm [<00540046>]TJ
+0.985 0 0 1 411.981 221.582 Tm [<0055>-222<0055>]TJ
+0.99 0 0 1 421.186 221.582 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.985 0 0 1 428.345 221.582 Tm [<00570055>]TJ
+0.99 0 0 1 437.805 221.582 Tm [<00580048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 447.314 221.582 Tm [<000D>]TJ
+0.99 0 0 1 449.718 221.582 Tm [<0042004F0045>-220<0050004F0046>]TJ
+1.025 0 0 1 267.807 209.627 Tm [<0047>]TJ
+1.015 0 0 1 271.218 209.627 Tm [<0050>]TJ
+1.025 0 0 1 276.324 209.627 Tm [<0053>-218<0055>]TJ
+1.015 0 0 1 286.035 209.627 Tm [<00490046>-220<0054>]TJ
+1.025 0 0 1 302.326 209.627 Tm [<0055>]TJ
+1.015 0 0 1 305.982 209.627 Tm [<00460051>]TJ
+1.025 0 0 1 315.761 209.627 Tm [<0008>]TJ
+1.015 0 0 1 317.823 209.627 Tm [<0054>-220<00440050004F>]TJ
+1.025 0 0 1 338.928 209.627 Tm [<0055>]TJ
+1.015 0 0 1 342.584 209.627 Tm [<0046004F>]TJ
+1.025 0 0 1 352.726 209.627 Tm [<0055000D>]TJ
+1.015 0 0 1 361.118 209.627 Tm [<0042>-220<0051>]TJ
+1.025 0 0 1 373.213 209.627 Tm [<0053>]TJ
+1.015 0 0 1 377.042 209.627 Tm [<00500044004600540054>-220<00580049>]TJ
+1.025 0 0 1 413.447 209.627 Tm [<004A>]TJ
+1.015 0 0 1 416.163 209.627 Tm [<00440049>]TJ
+1.025 0 0 1 427.975 209.627 Tm [<004A>]TJ
+1.015 0 0 1 430.691 209.627 Tm [<0054>-220<00420056>]TJ
+1.025 0 0 1 446.901 209.627 Tm [<0055>]TJ
+1.015 0 0 1 450.557 209.627 Tm [<0050004E0042>]TJ
+1.025 0 0 1 468.466 209.627 Tm [<0055>]TJ
+1.015 0 0 1 472.121 209.627 Tm [<00460045>]TJ
+1 0 0 1 267.807 197.672 Tm [<0043005A>-220<0042>-220<0054004A004E0051004D0046>-220<0044005000450046001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 173.762 Tm [<003F004700480049003F0036005700480053005E0008>]TJ
+1 0 0 1 113.386 161.807 Tm [<00030003003F0056005700480053003E0059004C0056004C0045004F0048002000570055005800480040003F00540058004C>-1<005700590050005200470048003F004F004F00440053005E003F00560057004800530056005C0050003F004E0048005500510011>-1<00150046005000600008>]TJ
+1 0 0 1 113.386 149.851 Tm [<00030003003F00560057004800530060>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 125.941 Tm [<00580049004600530046>]TJ
+/F111 7.97011 Tf 1 0 0 1 140.335 125.941 Tm [<003F00560057004800530056005C0050>]TJ
+/F105 9.96264 Tf 1 0 0 1 180.896 125.941 Tm [<004A0054>-215<005500490046>-215<0054005A004E00430050004D00080054>-215<00440050004E004E0042004F0045000F>-291<002F005000550046>-215<005500490046>-215<004F0046004400460054005400420053005A>]TJ
+/F111 7.97011 Tf 1 0 0 1 367.905 125.941 Tm [<003F00540058004C005700590050005200470048>]TJ
+/F105 9.96264 Tf 1 0 0 1 415.928 125.941 Tm [<001B>-290<00550049005000540046>-215<00540055004600510054>-215<004200530046>]TJ
+0.98 0 0 1 113.386 113.986 Tm [<00440042>]TJ
+0.97 0 0 1 121.753 113.986 Tm [<004D004D>]TJ
+0.98 0 0 1 126.701 113.986 Tm [<00460045>]TJ
+0.97 0 0 1 138.344 113.986 Tm [<004A>]TJ
+0.98 0 0 1 140.915 113.986 Tm [<004F>]TJ
+0.97 0 0 1 148.574 113.986 Tm [<0057>]TJ
+0.98 0 0 1 153.145 113.986 Tm [<0046>]TJ
+0.97 0 0 1 157.49 113.986 Tm [<00530055004A>]TJ
+0.98 0 0 1 167.144 113.986 Tm [<00440042>]TJ
+0.97 0 0 1 175.511 113.986 Tm [<004D>]TJ
+0.98 0 0 1 180.197 113.986 Tm [<004E005000450046>-226<0042004F0045>-227<0051>]TJ
+0.97 0 0 1 226.974 113.986 Tm [<004D>]TJ
+0.98 0 0 1 229.448 113.986 Tm [<0042>]TJ
+0.97 0 0 1 233.88 113.986 Tm [<004A>]TJ
+0.98 0 0 1 236.451 113.986 Tm [<004F>]TJ
+0.97 0 0 1 244.111 113.986 Tm [<0035>]TJ
+1 0 0 1 247.929 111.919 Tm [<0026>]TJ
+0.97 0 0 1 252.213 113.986 Tm [<00390008>]TJ
+0.98 0 0 1 259.857 113.986 Tm [<0054>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 265.984 113.986 Tm [<003F004F004F>]TJ
+0.98 0 0 1 279.959 113.986 Tm [<00440053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 291.583 113.986 Tm [<004E00420044>]TJ
+0.97 0 0 1 307.878 113.986 Tm [<0053>]TJ
+0.98 0 0 1 311.502 113.986 Tm [<0050>-226<0044>]TJ
+0.97 0 0 1 322.579 113.986 Tm [<0053>]TJ
+0.98 0 0 1 326.203 113.986 Tm [<00460042>]TJ
+0.97 0 0 1 334.98 113.986 Tm [<0055>]TJ
+0.98 0 0 1 338.44 113.986 Tm [<00460054>-226<0042>-227<00430050>]TJ
+0.97 0 0 1 365.456 113.986 Tm [<0059>]TJ
+0.98 0 0 1 372.248 113.986 Tm [<00580049>]TJ
+0.97 0 0 1 384.208 113.986 Tm [<004A>]TJ
+0.98 0 0 1 386.779 113.986 Tm [<00440049>-226<0054004900500056>]TJ
+0.97 0 0 1 417.568 113.986 Tm [<004D>]TJ
+0.98 0 0 1 420.042 113.986 Tm [<0045>-226<00430046>]TJ
+0.97 0 0 1 438.866 113.986 Tm [<004A>]TJ
+0.98 0 0 1 441.437 113.986 Tm [<004F00540046>]TJ
+0.97 0 0 1 455.145 113.986 Tm [<00530055>]TJ
+0.98 0 0 1 462.228 113.986 Tm [<00460045>]TJ
+0.97 0 0 1 473.871 113.986 Tm [<004A>]TJ
+0.98 0 0 1 476.442 113.986 Tm [<004F>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EC01EB>]TJ
+ET
+endstream
+endobj
+405 0 obj <<
+/Type /Page
+/Contents 406 0 R
+/Resources 404 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 268 0 R
+>> endobj
+402 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-SquaresOfAs.pdf)
+/PTEX.PageNumber 3
+/PTEX.InfoDict 407 0 R
+/BBox [0 0 415.74798584 415.74798584]
+/Resources 408 0 R/Length 1091
+/Filter /FlateDecode
+>>
+stream
+xÚ½XÛnÛF}×Wì[% ïì}‹"Hâ¸A E½µ…¡Ê´¥De’B¿Ï,/—–(
+Ã&Á½sö̬ŸÈ8ý £DÇ=­rl¶<Óç'úýÈn–Eö6ÝLg‹âû=}ÌY‚1œÕ½,GÆÆ­÷,aŒ}°g–Æ¢?‡S”Q:t¤2Ò3æ(g½¦û×z@σ
+ßûF+üÒ;¼t´ŽåðŒ@ïC.ÁKc}m½ÓŸÃƒã[ßA&=§ÙX*pÞÄnþº-ã7i¾(éú^ˆ_féºHÖ{ÿáv¶P ¥®ŽƒSeß÷“ÁÍo„`¬q‚MÙn&’f’†P'\'+ö÷ð÷"¥1ÃÿèÃt$ùðÛrôïäý¼pÔ[ñ¢ê¶š~ ‘IÝyQÄ=hš‡–'œª:<f‹dý°ü>ò8ü¹ìê=gu]ÌÓíÓʸ»É.´Þ¯ðD›1a»wÞ8aÌÙÇ=,5¢ˆ†æ!ì„rЖZ3úJÒA‹À…úÒÚ {ãúÅ#‹µRwç‰ M]ñTôÙ®6yD*BÚX4Ùâi^÷H·±bЙ5“>VÁÅ<é;pÄ$™ _Nú-Uüõ…têÝ6]ŽI§)Nž¡ÉpɃ®c;´bɺ¸ípBZ 6ÖšÆw‡¥ƒG|Çy@©H;†ÓNNIGx šX ï*nç‹u) Øn“,<g&VÄb§Ëd=K^ZC½¤&ü¨7ÔÛö’Åü¶²
+ÒnðZ^)­ Qá¹éð‚y­%Û· FߟX­N<IpíË¡ eE
+{2ˆà
+_—„àQç\éšá ¡i.ãÕÍlܺšõ1©ÉM©‰²°lÎ2yÄ ­”Ou[]Γ,ù©¾tÌžŠ|§=S‚¬Ëè»e2+²iE]CL‹ÂWÉ×”ñ×à&ªãÿrB¢¢ÒØjZtÛlÉ"m©¦‚0
+Û‹b¹3¼`0Æâaó' ¹níéÚ–
+endstream
+endobj
+407 0 obj
+<</Producer (LuaTeX-0.60.2)
+/Title (LecturerDemo-SquaresOfAs)
+/Creator (TeX, with a little help from Lecturer)
+/Title (LecturerDemo-SquaresOfAs)
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727152418+02'00')
+/ModDate (D:20100727152418+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is LuaTeX, Version beta-0.60.2-2010070109 \(rev 3730\) \(Web2C 2010/dev\) kpathsea version 6.0.0dev)
+>>
+endobj
+408 0 obj
+<</Properties <</ltr#40step_1#3Acontent 409 0 R
+/ltr#40position_1#3Acontent 409 0 R
+/ltr#40area1#40inner_area_1#3Abackground 409 0 R
+/ltr#40step_2#3Acontent 410 0 R
+/ltr#40position_2#3Acontent 410 0 R
+/ltr#40area2#40inner_area_1#3Abackground 410 0 R
+/ltr#40step_3#3Acontent 411 0 R
+/ltr#40position_3#3Acontent 411 0 R
+/ltr#40area3#40inner_area_1#3Abackground 411 0 R
+/ltr#40step_4#3Acontent 412 0 R
+/ltr#40position_4#3Acontent 412 0 R
+/ltr#40area6#40inner_area_1#3Abackground 412 0 R
+/ltr#40step_5#3Acontent 413 0 R
+/ltr#40position_5#3Acontent 413 0 R
+/ltr#40area9#40inner_area_1#3Abackground 413 0 R
+/ltr#40step_6#3Acontent 414 0 R
+/ltr#40position_6#3Acontent 414 0 R
+/ltr#40area8#40inner_area_1#3Abackground 414 0 R
+/ltr#40step_7#3Acontent 415 0 R
+/ltr#40position_7#3Acontent 415 0 R
+/ltr#40area7#40inner_area_1#3Abackground 415 0 R
+/ltr#40step_8#3Acontent 416 0 R
+/ltr#40position_8#3Acontent 416 0 R
+/ltr#40area4#40inner_area_1#3Abackground 416 0 R
+/ltr#40step_9#3Acontent 417 0 R
+/ltr#40position_9#3Acontent 417 0 R
+/ltr#40area5#40inner_area_1#3Abackground 417 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 418 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 419 0 R
+/ltr#40position_10#3Acontent 419 0 R
+/ltr#40area4#40inner_area_2#3Abackground 419 0 R
+/ltr#40step_2#3Acontent 420 0 R
+/ltr#40position_11#3Acontent 420 0 R
+/ltr#40area3#40inner_area_2#3Abackground 420 0 R
+/ltr#40step_3#3Acontent 421 0 R
+/ltr#40position_12#3Acontent 421 0 R
+/ltr#40area9#40inner_area_2#3Abackground 421 0 R
+/ltr#40step_4#3Acontent 422 0 R
+/ltr#40position_13#3Acontent 422 0 R
+/ltr#40area7#40inner_area_2#3Abackground 422 0 R
+/ltr#40step_5#3Acontent 423 0 R
+/ltr#40position_14#3Acontent 423 0 R
+/ltr#40area2#40inner_area_2#3Abackground 423 0 R
+/ltr#40step_6#3Acontent 424 0 R
+/ltr#40position_15#3Acontent 424 0 R
+/ltr#40area6#40inner_area_2#3Abackground 424 0 R
+/ltr#40step_7#3Acontent 425 0 R
+/ltr#40position_16#3Acontent 425 0 R
+/ltr#40area5#40inner_area_2#3Abackground 425 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 418 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 426 0 R
+/ltr#40position_17#3Acontent 426 0 R
+/ltr#40area9#40inner_area_3#3Abackground 426 0 R
+/ltr#40step_2#3Acontent 427 0 R
+/ltr#40position_18#3Acontent 427 0 R
+/ltr#40area6#40inner_area_3#3Abackground 427 0 R
+/ltr#40step_3#3Acontent 428 0 R
+/ltr#40position_19#3Acontent 428 0 R
+/ltr#40area4#40inner_area_3#3Abackground 428 0 R
+/ltr#40step_4#3Acontent 429 0 R
+/ltr#40position_20#3Acontent 429 0 R
+/ltr#40area5#40inner_area_3#3Abackground 429 0 R
+/ltr#40step_5#3Acontent 430 0 R
+/ltr#40position_21#3Acontent 430 0 R
+/ltr#40area3#40inner_area_3#3Abackground 430 0 R
+/ltr#40step_6#3Acontent 431 0 R
+/ltr#40position_22#3Acontent 431 0 R
+/ltr#40area1#40inner_area_3#3Abackground 431 0 R
+/ltr#40step_7#3Acontent 432 0 R
+/ltr#40position_23#3Acontent 432 0 R
+/ltr#40area2#40inner_area_3#3Abackground 432 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 418 0 R
+>>
+/Font <</F51 433 0 R
+/F55 434 0 R
+>>
+/ProcSet [/PDF/Text]
+>>
+endobj
+409 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+410 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+411 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+412 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+413 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+414 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+415 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+416 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+417 0 obj
+<</Type /OCG
+/Name ([step 9])
+>>
+endobj
+418 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+419 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+420 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+421 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+422 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+423 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+424 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+425 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+426 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+427 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+428 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+429 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+430 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+431 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+432 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+433 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /VHJPXM+CMSSBX10
+/FontDescriptor 435 0 R
+/FirstChar 12
+/LastChar 127
+/Widths 436 0 R
+>>
+endobj
+434 0 obj
+<</Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /IJIUGO+ElectraLT-Regular
+/DescendantFonts [ 437 0 R]
+/ToUnicode 438 0 R
+>>
+endobj
+435 0 obj
+<</Type /FontDescriptor
+/FontName /VHJPXM+CMSSBX10
+/Flags 4
+/FontBBox [ -71 -250 1099 780]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 136
+/XHeight 458
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/V/W/a/acute/b/c/caron/comma/d/dieresis/dotlessi/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/t/three/u/v/w/y/z/zero)
+/FontFile 439 0 R
+>>
+endobj
+436 0 obj
+[ 586.1 0 0 0 255.6 0 0 550 550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 305.6 427.8 427.8 0 0 305.6 366.7 305.6 0 550 550 0 550 550 550 550 550 550 550 0 0 0 0 0 519.4 0 733.3 733.3 702.8 794.4 641.7 611.1 733.3 794.4 330.6 519.4 763.9 580.6 977.8 794.4 794.4 702.8 0 702.8 611.1 733.3 0 733.3 1038.9 0 0 0 0 0 0 0 0 0 525 561.1 488.9 561.1 511.1 336.1 550 561.1 255.6 286.1 530.6 255.6 866.7 561.1 550 561.1 561.1 372.2 421.7 404.2 561.1 500 744.4 0 500 476.4 0 0 0 0 550]
+endobj
+437 0 obj
+<</Type /Font
+/Subtype /CIDFontType2
+/CIDToGIDMap /Identity
+/BaseFont /IJIUGO+ElectraLT-Regular
+/FontDescriptor 440 0 R
+/W 441 0 R
+/CIDSystemInfo <</Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>>
+endobj
+438 0 obj
+<</Length 361
+/Filter /FlateDecode
+>>stream
+xÚ…’_kƒ0Åßó)î
+íƒ5veE„­†ckËìÆ^mruM$Æ¿ý’´¶0V&(Þœso~9:ºÛgÁ#WG î§Þ±Uf,ßò†ŒF+ź¥Ù"räƒÚ.`¯ËÐÀx™®R)ÌÄšSɪŽãàúÛô„¥W‹ÛÆü
+Ò—ôãy¬+dF篇àË®Êu@]ÛA˜ÊÚÿq‚•á– ~Ð'êV(¹€hJ)µ kÉ—ªv‡lIx…p@/„äúL GÇN¢pÁ̹òOVÛ´\sÖ·ëTŠÄ1„vgÑÝ{î wš£²„ñ-Hkʺ¦©Ð%I ;Ûæ´Ík„Ð'À­*L3ŠkÓ¡of¾ŽNÈLql›œ¡Îe‰$¶1Ð⽂’ÿÒé©ëXœJk^£Aaß¹vsæs;‡Ò‡(9Ùüº›è⹜€uZ[|Ÿ¡GtpBâ%æF5®Ëßþû ¿‹«vò áÆ
+endstream
+endobj
+439 0 obj
+<</Length1 2452
+/Length2 14895
+/Length3 0
+/Length 16304
+/Filter /FlateDecode
+>>stream
+xÚ¶sXüÿœÛZ¶;Ù¶mÛ‹'×Én­–m.®ecÙ¶–msù9÷÷îïïyþx®s]ózÛŸ(IUÔEÍA¦@)ƒ+#+ @\Q]]L‡•ÀÂÂÎĆ@I©aíjüÃA Ô:»Xƒøþ!#î 4qÓ$L\Á¢Š €œ›€•ÀÊÅÇÊÍÇÂ`caáý¯ È™ aânmPdÈ€.”â G/gkK+W°§ÿþИÑXyy¹þ¥µ:[›™8
+
+L®ž®
+0ZZ; ü±&-þÁSàlí Ðg!+€å¯Ïß¿ Ásfr°óú#þ¯F3kÉÈ©è(Òÿôßl11'À‡‘›ÀÈÆÉ`eáåpó°
+^Ws ç¿&ÀÌä
+Ø/ø|ÚÿÃ"¸óÌæ ØŸ¹5Ð辤SÁšƒÀ¯™‹‹õ?4ÁÅþx˜ÿ=ŸÀ°ø‡i0ú£ÎÉþtÿ‡¿ø 7çèƒE,ÿÁÁ[ýIÜ2+/G+ Ã?$À´É朚í? ¸rvÿ€àÒÙÿà ÇüÇ2'XÕ¼ÿàƒ“ý ¬ ú68Ç?l°1Gð{è`´øSÖÿPÿ§là¨Á'
+ô®€ÿ!`vú³!7 Ë¿v÷¿DvÞ¿ˆ ðõøß&°‚«öš²‚Kô§±œ! û?jÈ w?Àáü1>¥Ì®VÎÀ¦
+®Û? ¸¬îÿ€à°<þ1`}¯@p™¼ÿdVõ:ÿ»¬ÿskÌÜœÁurý׋
+–¥y;5݈‰|©˜žé,Ö‘dˆ±Ã)a¿á?7g_ž—§ÀÿN+”¡ü”&5ß­»
+|’§¥äÎ9 ß!ÑñozGWV?ÕA·–‡öéÉ„pÐ\~z5pÚ`ê›Ë–àdEÚámÔ—µöX6ýÚM€äÙz²ò•ø2£ñq3®ÎGK‰
+§¾È,¸×‡J…îúß´•“³1ÙAIïw¶i<y˃;°õ²° £lÙìû~#–<BEü&hÙÖSµE;ñÂ…Š’¼LÇ)n‡¬ÕYæôKï¿8/â0G6õ0¨òt7XNÁ¨_Ìaã-_a× pš5Ç[v„×OßÇãÒ@vŠF Ùz‡á5ø¥äá^bè»îz~o’I>]QtB|óæ8
+5Çç’½¹i!‡=†OZÙÆs¤É€³£#Öþnô
+øžuh¤X:U y\C8—AsÚ8S €žæž
+Ùôd¿Ž¥H[ä9ç„weòs;ˆvÂ#Åf™‘Ü˵=“Þb,ìË/¤K+=ýTÂoë”tÔ¤ÝeMI©i¯Y–h’‘·c!qâ‰âÞLÎõÕxµ¶¼±±F ¼¼…Z;µ‡Q'1«U2±NŽÉ—ë¿ŒÔFX˜çÜàÊx>Ö{ :UÏø¥ “œ×ås>Q}:Ê«o§zÝÛ5§”™’Olà³Gõ"êÎåçgåyï¸ãhŸ: çbw¤£®¡ èÛ® ±‘“ð°Ê½Ò9Ž"ò¹nóôJúÖ^f¾klI¶ó¤PøRiw/ƒ™ä# u[¼OÔ {3U>Rt3õ¸<¡Äˆðžª"3ÅA1vºTHÃÚyå1çι#~P[ÞÍSûƒöð-™y¦+çܹhþ†Ñ¥r´Á]Ïòao‡dsÄ‘ª¢}«*‚#fŠx1¬õ•™‰à`7jˆÿ¡!ë–™µ(%3ËsÜÙ¼Ý"ú¦™%,ZÜúÌÿæð‰¹²1Z©ÌˆÐ°[ÙéFês7v:[t4ÆϱŸ&‡eš¸ï¨e°hÑHo+*\e…so¨îO-ÏLãX39}ËÎQ§®òH!ödY{—L^r/p/>m½”ß6&>WO©JJh8ÓÎL"â“’PÓõ2—³¿ýÒû8*–åþíä0T\U=¦3ƒy[ç:L~µv‘ÀÊ\ªõû2ÿÀ`÷èåÈÖE¸#•™ÜtbÉŸÔœ¡Þà8¶©ÉôáX%1¦¡ŒÊûá”6•kevÖ°$¤ñMúðôJŠ"S>/Ñ}®’ørº¬¬Sµ<¾„„2 Åg'^;²ÄNeþîɪ˜uzºÁjü+äîõ­{( Èz²Чw@ Y²ô«M(Ÿ[É4/2OfŠ@ÁÁ˜“4Åó×SÏ`8ïÈ‚Ùn^vTF­4H)í}8 gJçÀäA¥ò¨J•ûÔE̼hÕñÆA¬c̬ìwoäø' ‹S#í`Ú$L-¢~.,_évlóa‹wú3t³j"©þnŠth;²ïýÞq wwt¼_~Oò£Ký\ö1]•¶¨ìIq†ƒsͬ4"mvëªèÊ1ý@©áÞÃ!ÉÔÀ7—³ëb"éð)èŒÿ“]†=D¾csÂBàŽLÑ:·à{ZòìV ‡å’‡0q.žÂ¤öœj58’ú,Yú ÏãŒVÍ´Ï}Î2ŠÕ±dL’9T§xÖ¸ˆk0˜¨¬u9GÊo”p=.§:9q)þ=>õÓ0œéÏzÑ©²wR³f± Km†¶<ÄÌuÑ:ç)…Ó—…¹šë_"[e»ªB/Wšƒõ˜¶Ë¾’6+ |Ådw¬ƒ7K;4Þ¬¦æQ«Ox’b'zŸõEÝ=#@ŸãW¢È\À€©QZ-<ÏeQPC5¡‚ÜãQL¸R-‘ÆN>FÐêÇëÍà
+_ÂGe%"Îäš® ˆÚ¶È¨Ô;x©ÎëYŽ«üf†el ŒØBï"Ëù-9 ¶‹}Çw^šØnw¹Èù‹t’ôZtL%ܽ z#­~î"wÓDC”¬…ÞJ‡zš´d”xÄqo>)ÔiÌ»Qùpm¨TI»ô^±bæ”í¯;ŒÍdD'‹‘dÎœŸm¾ìóµ/Þ'dW/ñ˜Ë
+×,£©=gßÎFøäX`ƒµ}t^üøìjY(/O=¶^E@ÈjO½ÀJ‡÷ª¯ÄBà‹å—OrIÓQn\šÉ®‹—šš®I—xôJs!ûsšýHüž\þ*¦m.*ÎgðÚFãè|]?¿SRȶû6rˆÎZÿž”B+°Ó=C¢«„ï¢Oï×Çü#ƒ|ÉU¾p¦¥'€{T°»ÒôÓ•O+È~S*r¬ž!åºïÑTQAÆ8â΋aØ­Vnß‘û̓òï ¡V­jáÄI`„§j—¡O„Wà|¤êRHwžÇ©(­wƒxO+‘ê›úæ=z&ŠpGÀJ%‹ûÔ°±!e#÷³¬gÑN»!ïbº™_PõÏ=ºU•JêÔÐõ{Æ8Sj¥.Â;Ÿ§±ÎC¬—Ñù#¸ÆÅI±›º«À:é~‹‘
+[³v³sílŒ)EÐÊ-
+!
+çLÇ¡CÝiˆ-Ç}Й2}šßËÜd–ue
+R–ŸÏÔ i’?žó¡RGÙí'ý¬a‹ÑèˆÐ­–÷×ɱ½þ”ñ˜ïcWºJü¥ ´£ÓXBU(}Gñ[ø6áðíJÕV¿¼ŽUÅâXµHóBÒ)óù:Mâ9u=̄i2§y¹Ì$q8;”'Ü×$Y<tŒ•<Iä±B07uafêµ|Ëæ|ƒŽH_²í70…rçÁטÓ]ùv*´Ò;Ø _L€€ Å¡ÐT‹øⲄ=ÔP†c€¦¿çpËÔ'öe| v0ÁÙ¯ïèdAÓa4ey©'
+/rž€ûÇÈŠõïmÊ-M“ò¶¼ ï‚x£õ =ó²ŽÉw¸´¯Ê—2G§} ªz%UN¤ç_e@!ì:üGOŒƒ?w#E:~3¯Î UÀ ”¡Àaº~‰ã=Ò/ÿáô¼s“ÛÍMšçŒ¤Ö±Î„.8B2ç“;âÂ8&6ÅÉÀ$L)ÛÈi'Aפ;”†j[dvøò“„Q1ý ™Ndû‘PÏY† ƒÏÑÉWJ/ëÞ˜Œ–ýÓÁY¶¾óPc’ðXZÊÊGùŸ;ÞÀ¶Ùº äïåä5{Á(®LåËogù'z… ‰¶ÌN¼‚<WÜéªî–•0Ó¡.a­ÔËø™äbCkÜÏKvèú§ Ȉ¨ ¹Úɧ˜j¡Ÿqô% ±q¾{Ë# ½¢…ˆ;#…s»¤¢¥ÖŠ“}—hwm0O›“óø±¯&o5òˆ€ü„ß´§‹Ï‰lÐìJ—IÃ
+·Ù€!NóAïÕÇ¢]B÷¿ü¨7`é¯pgƒ{
+çÝ£LÔ"nNëÎ@CUµäV_Ó²›Qú–d§P>|¿GùNÁÈÓ(òã¨y×ûþ™ `èšÖÓW'¾Ûü:…Jà`'@Ž°È•¸Aú*.ˆ K½ò×fÌm×ÏZ*Ô$ÚD­1ø,çï¹®£ƒNÄbFFV¸¬;¤L7ðL6/±ý÷i%2ëµ&Ò·C„ |HŒ PyœÏôjVvU¢MJ•ÀÖ¡
+Ofy>ÏR
+L¸`½¶ÇÄŒ6Çí†_ª"f‹ömIok(¨r<‹Awºéçq|½3[·9nXÊÅHåþÑ!·
+â0ž¨§ˆôŸÍ"¡¤íÔÃ(°XÐõ䑽#÷ÇŸzJeô2åFâæ#e/,œzQ¼ôéÂüúúÔç/~4·àôó
+î†î¦Üzx‚Rƒ?dÈXKÆ#SÏ*:nÿ˜'*Ïþ®d`éxåÍ|áý‡o}8 l¿vY‚¼›y˜GÂñ><ø­×tQðí,"­8®h«w½IÕUx“cMãUïNχ`ýÞ¶´}t/M'Fª§üîyÇ z1›6v
+®ôf¯±·Ïn¾ÇùNjC#ÜŒDóK&[Lº‘»âP 3ú³±Keá5ó l.«Ç]o™R[§Ô ²6Ö·‘ª‘6ÊŸš ç5Ü]Çç49/ÕPÇWšUë;»&.oî²o˜Oç-õ^h ¢Ô»ö›œª!Ú^Ò0LiDM°WxWî×ç£
+º˜TWêֻЛ—Ü"ßzTùDºÂX4†xV§˜[wìDñH.¸µQWäS“=ô"Wã~yd²¹åwýLJžÏ[pÎøpÞÝ3ØÌœŠvîä®ó`%•Mq+v¹è‹¿÷̈ÚöA™ä›‡jI0ÛÎͦ¬´ZgÂö™}á‡Xå.5§©ýÊÁsÚ²ºdv‰†ï.8ÆhÏÞ¬i ño=û;£AgyÊ?ÙWuË(P7Œ B-3yƒ[Ò‡û³wû¥ø.dügàòQùYÝ1É'âJ¨Á[™V8Ù]"S<"Àñ±aDWIml¤ª#qÙY1ºI7kv!¡Dé™P¥ íè×ÐVîsWÇwê˦|É
+R^Ò(lLnônÓYr Wɾ\MVÖ… ¾aø|…áÐïÎLU<¼+wmê¿]ÍÚSöq¾¨½½˜«&Cã§[ŽsDD+–]ß#åÖ˜p²®G õÀŒhZÐ|×sŸî×(æÿ»1Óm"2‡)K%V½E1åÊj“Ì9̪“Íc§Úúåù#!×=I&S7ú‚+‘ªß¸H"»Ërò9³ÍZ¨lë˧Oä§B{13qh…£e1Tw™Z:_í½±ñÜ0*ûPÇñªM?<âfL»Ì ¨:xߺq¹$ÁÔÇÒ¬×pKÓ}†né"H±£
+Ó˜¬WYHX‘]@ ‚aýÙ¸w"K‰È‹¯Šl<œ%{£Ò°ÌË'Ôˆ"5¹©»˜:q~±mjN!ò­e˜S‚»ÚÆ;1Ä<ÛëÌ`@ Ò‰K“ëíˆê=ˆh™ì×0x­qv9½ËÎ[Ð*¡–*Shì¨dƒâ˜R6;“îi¶7N¦ª|=Ñjª>_1üßN3×uâH@g‹È:…½§IµßR<9g›Eóù%PŽäàò8ž”ù8DúGô…ŧŠ_•
+K¿>“ëÃWz»—#2‘[ûõ‘ïk>C²Y±èóY:„JIsRgÓâ«RË ÖcˆfÌœˆ¸9o¸í@ÁCÅ~¹ÇÖ†åqlãK]5æ<Våt\«`^ˆÛ¯ ö¹ãÞ#¶(›˜?¢Ø–F ±KD;³ÎñHZðK7ËIŸùdÏÛ&Îmž¹­ËÌn©|Òf{³õh¸³XÞ+6‹ùàj§¸Œhÿé%É(x.Ù2çƒdi$þ“˜ùz¦üÚ ¦îrCEkÊ3WÍ2²1Õ1FÖÆ™øïõ5".š³°c¨€†Å›.ÚŠ r—ïòøÅ;íy>ÇPÞèñÑá6>3÷…™½ïw¡›%­(‰s¹©s‘‹ÐäTj±¹mhU¸éL: 9OÚ9
+Ü༇i½QW«Pät¢Žíeߣ&ºÒ±Ã |&­ßi( K6Ï®›ƒQzêÏ P—vS¨º`Á}¾Ä&»Ò~…í[–· WiJ‹ ƒPЊÅ_`0WUÆ 7W…៼b‘þ¨q.3QZÆ6qØt¡°ùE•‹’o:¼QŸŠmŸŸ W²A¬é÷й&m¤kdDh‡$à yií=•r>©pt:VÖ8h÷¥×¾üÕnúÄ‘ÐhX)4òçùÌl÷´ËY4Aêú˜æÉû÷ï§ÎkQŸü;·¼l=‰òË•Åtj?–_/È­sÏdíÃO
+BŽê™Ý>íº^"_C8?@51)~˜œ õœGoƒMçloƒĈ¨ªL´•%ë‰rª·«ÑøîqŸçk2ˆ^ì0C¢ÇÀjËqóâÆú‹Fi°N•qÇZ¬Ì¿§Tà"†U
+HųHd˜8”¡îöhL‚¾¢^ÑälME™ô6t »
+gVKaÐßæ „,/Ñywø–u»òÞ/ŠÂsÈñ;qÁ¢T¡ ´óW‹EK›¥|> ›:O“Ai¹ˆ»G™K ù)Vö&|uÔþÅH᪺֊xчøªÖn¸Ú FVr³Ã¯fÑLï¶KíO⪮…©'Fbšu鶺=ž¿¾Q¾fQÏ°MûïîéDÏÇ”oÙ—®å>@Š…:—Œ•ðÌœõúž@“5T`JÊI¥ÉѬF“ Ë®Ü0´ºcªÝ\eD
+{S„ì"°Š‹ 9
+XÎ|€Ã9<?/aƒs_ø:ʹTò>}zôô«ŽèÉþd27º¯yybb™µ=Qs
+Ÿr‰$æ”äž{‡fnƒÇ¦9"É—Ù*ÆUŽýùÇ À³„uœýVÔ#g…¼ýôwÐf½UtÞ™ÂIf³àæÆÜâʬg,‘wØDû×2ú©ÁŽ"^ÌL¸±ÁOá†þÓZB_ØQ¸Hj&žø<”J»YÅCõä‹‹l+Ï>t»‘qÕj­]ŠOf:VAÇ“epzVí&Ù¯¥É.ÖÔuç$'#ó¹:s±ÊìAk©³?¬ <ä¬æ ¡hÓýÞñÙ#®Ì3e,í¾Ï•«Èú^ë·©ü~òàÐnq}ç FìÂZj÷Ý*ê\t¿Eg,WÌ•R/Žâ7tÛ‡§„¶þ¡:ôò÷²‡Xd%Ä
+‰y ¤‘…ƒ*«m¿”ß|Ì1%ödWužçŸ(CÔW¼FJ÷xJ佦˜Ë"}§ût¿9K@d‰Åó¬:p6§¶õ€3{g vÖñÍúaÁ¾%jCKSŠÒ\ýUNÇ(1Ú6Ø’O!eÃ{zkŠýár%ÀU0•É'ÄT'ÉíP+›¼¨Aô¤z-ò¸û­…‡÷ZÛx£{ ú—$²„kºH'¼ ˆ.Îïþ3Z¦W ½#ø'§ª¦´9ô29UÂWÞµÐãW,Æ8*"’B<d”J;·l†›²ICoHfP<·hD©Ï¾þ|¯]Éxf(µnÖÍldŒÝ\@ùƒ­nùò$–•‡äëiõ1¹
+ÈŸEŸ|; tú¢©Éóˆsõ£qm#¢Î7q¦¶i9â‚’Éö¸äCJ‚ýÄÛ.³y“K•§¼K³zNèq×o^»š†š³ßV´»!zÎô
+ØÄÇ:ÀéÓLnH½Zr£ôƒ-„h_“SàÐ<G»ÅyašÆ¡‡gö[õWnŠpá®4§Ì9É)l³‰§ž?Íé5RE‘,?šÐxÎfk$~´}Cw.Hýã"Oé÷¿c`ŠoÍ¢ÏÍVÌ…!W|?Óe³Ü»¡  òºÎ´¿§â)vš‹8P:‘ÚÀjoXœ…r%JgË9£^¡âM'¹íº/k56I©óq?ÔÇ—£Oäú]Â-ž¾È{IÁ|§c%q ‚9OŸ
+éBÀÌ-b+dU°Vº¼Œ/­E–>#¾Ï\Wÿ¡Š Vž£ÜßÅIÜ´ùjîÅk”}Rì›0ÐW2ìUF-¶~µðÆTkWügÄÚPeY1àEÜÂPè[céäÆûJ¸ýóN•l/¢þHx²›Þ—ã-îö¼:JÍ8jØÇÏŸ" J¹(ë/ñ›ï1X+tžY<ƒFa ìÇ8xó4l¯3aU”·¹ãºpðô\í {*/ìT¢LMãð¶;«©~ü‘;þû¦-õ‘‹”xg¦!u>ò neîD²ÊG4/4b{†›ù¸H¹CüëkÄŠÕI¿£M*U‚œ-Wì"‘h²†9ÊÄŽ —Œ<=PŠ€íË:§¿æW<4Íz@ëÖJ)d3õÆ™²h‘t™Ê’WØ7¥å“£—r(û0&äj‹\eíü¾hÏñÑ9Ø[:?ÀÎù©Þ±#™»<ØHÿ°.´ì]u§uÎ#€l—fµ¤ µGª ´¬qþªóFˇÚ5Ê!ˆ.ó’!ŽgL÷âCm÷yf“š¤¢¥14ÙÔZ_î¦Ö¸Â :÷ùuÀøûês'$JðI¬H®å1}F`‰@!Ö£m­Q$KMÎG¨
+T‡Pt{š‚‘s~1w™wxÓz #mø)×õT»…ÍØô Â<ƒgg˼,–-3±[©¢·ñÙ¨-oºqÑT„hhþ»i bªW –‘Ç‹ŸMáÙPm&êM„®n}—›³ i •)¼ZŠôLȧPpÓ;Žcì@{Ú¯Ñç”ÜT
+ÆHú;‚oý5¬¬«²ïž6—€]{j ïû³``z91 å_¹
+Xé¼HÑê7O€‡ƒ|Hñ=”¬OYš'Ÿ¿éÀm~ÍÑŠ®õˆž`=‡?Ço8Ië ìWtWÝZÒ¸àÄi±±¡î_É$râVŽ±šWöµýŠûÔbµæ¶_S8š… ¬Â·›U^>·`ûÔ|å[-¯”ÝÁ׋ÊBÊwDïª ·—+àýÙ ±/’Žò•¦0²8œ1çÝÄSpJ&ìæ<]ÛiÎÎÆTùÔ½W¾ë,›×qϨ£ÏÆ
+÷T¼N%kÿÁAü¥ Ôí¾³˜±}\÷@wÎÊîsŒ P®§ÁðÝ9“ŒIÉ­½vO鸭ɨæ?q Söúc¬SDRJš(î‘RŸUõûaY¾Üœ˜Hò ¾&ëÞÅ­¶àÏñ/UøÜö·ßA7×ÆA
+Å:¨”½úîø­'h—TÁÁA¯ ~¥ks7òñç0ÇÇˈ~CMkP¹.׃— £óEÄÇ:¹-›yÅÖº¨,ý¥Y§:I;E=Á%©n*æ4r;¾\¯d£´IŠ|A´ïFç7©#lâ>
+´@°\ ±Ò•,Ì=\Ålž;UÀ³ýÎÑ4àEÐÃDcžMÈÅw€ˆ6÷8:Q™ußd&1ŽA©$wDrMk©0
+Lù¾æ‘m…änœŠÂ‹á@Ê!FW¼Ž› ØýRÎÖÒ»ÓÃ4w.­-qªÛAR2@G £Oô5XoCÃœZ›(=úÇ@:gÐ"IRטõ²Ëm =¶ŒDÈ7g¿úþ©—úþª%qŽ¶Ë 0ÝŒŒ†w™ ʾåqdåB³_![Þ}hú^p¢³bŒPpz佘ï’Ä-Љð3JØè•ß¬,_Ç3iÊ•ÅØw8æ‘”Ë<[¿ðáÅ~ì!a·3äî¾wøÎkö¦Hߢ:›†‡ÚËÆÝÕ¨K Ðqx”à{N„ñ‚ÇHµâ7®¬×û1Œ˜Šk¢†ó®õÏÖW¶ïmo%j¼ïiøDº;{ôðˆ<Å°ŽëlùšTî³½ÚÚ¡»¾€~â3®¥xxž?Á»à O¼½ùÂ*fÏ–´hˆŸšŠh#%P¾xÜB' å§É'j.T¥­¼ˆ­)]åÞß0²w¨÷ª¯÷–û4𲀓W„Å7ÂúiiÂÜxiåêÙGYÏÓE<ulêýÂ×*RZ›äÈÕÄ qH@;ñ.Ñâ×>+è_ǵÊm®÷ìÞ¹ñ$H_Ê)ZƉp®9צ­h£Œ”!7ïÖ7sU6¤û<¼¡{7êRÐB×1æ æKy…²Ì¬æ‹z0vaç §› Ìêjé*yÿzûKZ`¤mÕÌ Û*¹šž/U™ACÝïù©©ù}µ?V›ÓSLjK£z0G"& Ãÿô)ì*A®«<Wba&V¸be
+–_˜¿ºûˆ,¡¸6óäy%Vßjg8]Š€WßGÉ8î¦þª•9ÛG€Öý1ªq¤-SoK¿-*$e?cR”èú‘ýðÏ’Áø<XMˆ¡MÍ|ÅdvÅÊk qïáIˆ©œ«2ù™.¢~­w!&G 6™ù<©pUÂÅÍ7f<uÑ‚(ì…ίr_ÕÜýÙ<t)åØ®2KùŸ÷ aîJ—ŠmB
+’Øø*Ë # åSÛáa¸W}6gæZÎ757¥‰1ÃõÙi­ÏNÚÚ;H()ܬتùBïÎ×_W•W¯Ó¸D_˜T ‚“wyõKغ ø¼º,Á+˜¹)ÿqèF¤ÛÞ}¹‚›
+68
+ƒPŽT߈±•´@«z¤|Ô€½Êf+8RSŸ9„Èn‘ccàl6¸'ìì5?_×Ä>΀VÆ7AVzQ@‰±w5/ÿÅãá€%@íLuµŽŸ/Zƒ¥!‡útóÌ)T€Î:Z9ii7UüÝgf‡”ðÚZ¿QuY‘p8=OïO”¾Ý;÷“¦MXnòWÎyNˆLµøÏ ^ÛnUù%þšóž× ó¢pçõ²fTm|K–žnð-
+Ý’fÐoAkétf(”ƒÝwW‰³‚WKF d À΂y|‚¼K¬ˆñm[üØò ƒ iâEsÄ*¬»±L!Ö³˜+Ý(ˆÓáÔga¯’<UOËÏ$,žf‚C
+S!ÒÜ)
+ܳÊÑäÙÒ¨ž±gÌÂðißXRß'÷±&
+Oºç:çaäœwæ/¦ÄÈVïxl|»°n´’ÓÜ»9°ª!ÁóàVB¬vhTãþœ‰›!4ÉHCþ÷™YT.>¶b^AD#X²V¬çÕ5|UD¯EðÝêcÂ'äTÏkôù˜•aŒ•ly5¸Áó6zuìmÂÉÞ]ÖØÛñfÊrT!ôîI%6þl˜¸ÒY€þ‹<'ÂråÙÔ¨M½ùšíç¼)V÷J&âùi¹ ò¼${†n|xåvˆ  [€E{»îAœ-Y<ç7X¢ªb‚ë*ê¶ÝÝMªæ$…P€:ZÙoBÆ=…E‘ºÊî½nk¼ï! JÇ1è–TÎ¥ŠŠÛ
+Æç'ñ|‰1Yrï(&õW™˜tº›S§Gç¿G X"ÔÄ
+YÿÜ‘÷H—>‚¿ÄõpbZV’ ±DèSïó
+'Ý‹àÏLÊР]ÍlÃм>Ùdþ&<F•›ÓYožJÅ,ª¼á$«Èψ3邦˵ÂØ Ú'§9ÅÞ\™zôí¥¦èqå™ô .l”A}_(€oáì‘“ï;FÑÀÈÞvŠ\!˜®ÿ…Bp¼½©ØÇL{b$Ä%GŽoÊ*c7_E­4¶œnT‚zủpdÜôQ§­Cv‹ðb‘­ÿsFz# ¡==4G
+nÙ/‹½†\õM§ÐâÇyP5?ðõ”To–œ©ÃWÎ<(ìKƒ\n ;¯[S?]­Sà*™Vmoç\
+Ñ®À) ìQc6÷'œ¯Dß– 5Û+FÓ4+,|C•4- ýj·úË
+Ò‡nÈwúC‘JhM‚—H¡¦T]Æ›4î,€5ÿG™WÃ9º§‰wª«f×TEí]~»öüºÄýÜiì«“ÕÁJL—\*_øWÇ É_ûÆ‘ÏvÑÝÔkbL–é¿Šy2Uˆ¯`¢¹l Êñ”h{æ¼~D~Nr—CçGæ¾uélåy=*‰ëBqä5…ÔdGJ\ò-h¼ÅáVY ÃüîîK6XoÛp¿CQ yt(Z„)å•x¨ËÏG<˜ö|Àå%„+«·¹^%/‡ÿa„Ћ¿íÓŸöEŠä9±?Ó’ü–3¤u¡¿ÌɯQÍG'h˜3Á@ø(¿`
+Á˜aú3áx6u!ô‹¢Ê©ÞH˜WœÆ‹o†%£»ÀëÕ À–•*ü|{´2¡Ú)â6ÿ‡©H~BsÙ$m‚âÅ;ññ¤•ñ¨">tGÑ%)Ä 8³ã
+câ}%G´>þü6’ÔsWºä¡áv
+¼Ì¸Ž§‡øˆLMîZ».+$'IÀ—³¢Š}ŽmÌä|¦1}Erö_nsNÃõ­gŸR*HÄö½ YÚfûk%Å›ò„>q}О=-Vãð¢8—î=æŒtÚÑFÒ0½"[ÃJÒr»è-“Ä–’Híõ~ á¬1ñxœTb6bìKªÔH3‘¸½¤d›ßÅ<ÚÔ^‘®¢¦É‹~˜/ðèö2LÊmôê8˜Í4º¡K1 È£·Kmˆ0m„—þ&õÒÂÚOXwò–&C|þβm´‘Óó^óNš/:#R;-XÖT_"¬¦¦D²SÍ¥çéN| [WQ:]mDQQŸ+~øºžQ3àڎBé•l@Ê·†w’¾¯â#‚Ñ`›‰R±¬½Î8ÝuŽÍ\E—ýÖu Ï+Òë=pÆœ²Êá‚a›Ö"7VÝaéeÓÑ©Ãé>MãU†KÉÎæŽS¼éŠ'y¶¢†Gùþî'äAZ43ûŲ-W†&ÿ€E³a©Ûz4&fÙ€wsr c‚Ë·ÙÓVRrrDÎ:ñ¦O“OC7^ÊWÉmÒUï=‚M1ÇÊuê[RÍå7xŒë=æñdáIÌÝÒ€«òSãê’ÞËÌ%´íþ•t]¿©!Ôxï¨\Ç·žYZ4ài\fû]bÚï Ã^W¤"q]xŸ3l{üµK‡iW´°ãÌ/{pYâ`](køà[
+>¶á}<÷¶YítI “--¸òߦÎ
+0÷SªcÙ±@ý
+endstream
+endobj
+440 0 obj
+<</Type /FontDescriptor
+/FontName /IJIUGO+ElectraLT-Regular
+/Flags 4
+/FontBBox [ 0 -262 1000 746]
+/Ascent 746
+/CapHeight 702
+/Descent -262
+/ItalicAngle 0
+/StemV 86
+/XHeight 422
+/FontFile2 442 0 R
+>>
+endobj
+441 0 obj
+[ 68 [ 444]]
+endobj
+442 0 obj
+<</Length 2789
+/Filter /FlateDecode
+>>stream
+xÚÍX{T忳³áÅø-¯²<²Äh 5$lkb†ÝÖì²ëìY£6}¨)jL­Q«Vm­ÖZ­D[Ý$h£­ÏZMµV[c¥íõxì9öœ><= Ûß÷í°(F<ÇsgîwçÞßwßýffI"¢´‹dj¾ ³ÊáJ ?ÉË n—O ˜v¾ÒE$ì®á£·"DòFÜ/ï ôû^ܶÿŒ¯€Ng¿7ÜW¸÷Á›ˆŒG »y@Uܯ¹ÞØM”à†~Ý
+’AèÌüá¦l4™- ‰IÉ RRÓÒ32fe/ÊÉÍË·œµølf+,*.)]R¶´|™½¢²ªz¹£¦vEÝÊú†ÆUç|©iusË—×´¶­]·¾ýÜ çÁÆ 7uv]Ô½¹Çù•¯^¼eë%Ûê%—[íëð\ºÝë£A"à2-Ù¾œv^qåU_Ûõõo|ó[W_síîo^wý {nÜû›¾{ó¾[n½í{·ßqç÷ïºûžüðÞÝw¿üÀOüéCÿ쑱ý>öó_<þDäÀÁCãO>õËÃO?ó«_?ûÜó/¼øÒo^þí+¯ùÝk¯ÿþ?¼ùÖÿôöQ2J™ˆ™##è*¬£=tE¥MR§´MR¤Ò•ÒUÒM†ç GY:Ëby,ŸÅ3+d¥¬š5°Fö­°0¯ðÙh”×XG¸ç4 Y.
+€ÀN…ý[ô¯Ñ‰è;8¬Ñ%ÑähNÔ8ùÏÉ㓯¿÷øí—O(›'Ú'.šX‡ã‰æ‰Æ‰š‰Õï>þîEÞùΫÓê}æ¿,Ê¥ZO=à3'Qz´KÁNIÒS¸ÞOé†qÊ4¼ÏUÑHö ,öžý’´Ç‘¢WG¨õ¬”Hò%[+"0c¬ÍÓ:&mÃÀ`‡ ÜN¶³µcrÉÚM=EN6ÊFÛÝ£l-PÜcÆqÅ uÔYÅƨ³ÇƒsWm¬Ùi³ªÓÙ#Ç1
+œQ'.Õ.
+ ÇÔø¤ ÂÍ
+©ƒL
+Ǩ8 ã‹‘}ÏDÝbµp E ò<ªú:s‹Ä?.ès/¸†3÷”ÿ«á’ ð4„ïEÜeÅ| àÌ‘†€ÀíûE¤±¹¹±ˆúÄ ªðÚ =—ð!¨Ïƒ¦(SsÍ꬘î™vקë¡Xþ<z–OŽ=&ŸŠ2–€°‰üƪúq~ú^Ÿªõ‰*OÏ—_¬Oû4-^;>glý0}>îçôÊpdn5¤çÜ.|p‹Hbå†ãrŸ°ò O\ÓtAÓ? !¶bëš{×'r éq0dÌ#²Äëš–1Ÿ_¡Ô³1"ê9Ñtÿ‡ÅºÓX=ç{Ç<õÆ5Ü¢.Ê'¬÷‘}¾ë½ç¹ìg²_̽3¦÷ƉüÌ­'æ{§cóÒ Ÿ¥¦ºàô}0×.˜k|>õg´$¼wZD”ª@QÆJªÅóðd½Va?S³»rž–L¬ZǬguù¬ç.ƒö
+P½ØÃGÄQ©wá‰8½3Þ*EÇøð {«FþGŲeOâër5`ø"NÀȧOŒ$z„vb•¦âû5,Ë"D±ÿLÿ©{£
+endstream
+endobj
+403 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-SimplePresentation.pdf)
+/PTEX.PageNumber 4
+/PTEX.InfoDict 443 0 R
+/BBox [0 0 425.19699097 340.15701294]
+/Resources 444 0 R/Length 1061
+/Filter /FlateDecode
+>>
+stream
+xÚWÛnã6}÷WÌ£ T ï—
+t“½  í6ú,Ù–c¶eKrû÷Š”-Å–ÝA‡Îœ3‡¤÷#XC¬‘À•"ŒY˜mF{}ÁßÏp·®Ë_Š]6[Õ?žq°‚´ NXE¨pLHŽk² ’¦´
+£Á.yˆÚ]¨Ìxž,Vf£7*söueÝo‘´%Z³°#ow<îuéÈâumMpÅ•]ù«:ß=wG3ͯO‹Þô‰”kJŒÖ(R/¢ãypüŠ|k÷uk]Î5: *ô~;Ç™«dz¨ý™TEøîè<|®²Õ<núx¨?í4ñ«ýˆ¢ì8¿½€€×·ª ™žCì¨#Ä2ó)ýÓÉks›M± ×#ãOdïÇh±E6«‹2Ü„gœª¾pÝn5š(<t˜•„^ÑF÷p†èo±š¼~]„ûp:N±ª¢^†³²¹'e’‡j·a¸^æ?Âø¼#¯(Á™,Lt¡ý§B âÝ8•R&|€Ó+ž0X%-W3¿SLrUŧաœ
+ß,’]7”5· % »b(ì=£Ûù¡
+ÙMÑ—Ý:«^]•C¢E¬þ±ÚŽ&(‘9nÐQÈèÞ×lU–™W2[•%.
+7¶")‚ýÚþè4sç±ä1†Ôÿ9}C˜mðÛÁ¿l–ç
+endstream
+endobj
+443 0 obj
+<</Producer (pdfTeX-1.40.10)
+/Title (LecturerDemo-SimplePresentation)
+/Creator (TeX, with a little help from Lecturer)
+/Author (Pete Agoras)
+/Title (The square root of 2 ain't rational)
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727154401+02'00')
+/ModDate (D:20100727154401+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 \(Web2C 2009\) kpathsea version 5.0.0)
+>>
+endobj
+444 0 obj
+<</Properties <<>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 445 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 446 0 R
+/ltr#40position_1#3Acontent 446 0 R
+/ltr#40math#40inner_area_2#3Abackground 446 0 R
+/ltr#40step_2#3Acontent 447 0 R
+/ltr#40position_2#3Acontent 447 0 R
+/ltr#40step_3#3Acontent 448 0 R
+/ltr#40position_3#3Acontent 448 0 R
+/ltr#40step_4#3Acontent 449 0 R
+/ltr#40position_4#3Acontent 449 0 R
+/ltr#40step_5#3Acontent 450 0 R
+/ltr#40position_5#3Acontent 450 0 R
+/ltr#40step_6#3Acontent 451 0 R
+/ltr#40step_7#3Acontent 452 0 R
+/ltr#40step_8#3Acontent 453 0 R
+/ltr#40step_9#3Acontent 454 0 R
+/ltr#40step_10#3Acontent 455 0 R
+/ltr#40step_11#3Acontent 456 0 R
+/ltr#40step_12#3Acontent 457 0 R
+/ltr#40step_13#3Acontent 458 0 R
+/ltr#40step_14#3Acontent 459 0 R
+/ltr#40step_15#3Acontent 460 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 445 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 461 0 R
+/ltr#40position_6#3Acontent 461 0 R
+/ltr#40math#40inner_area_3#3Abackground 461 0 R
+/ltr#40step_2#3Acontent 462 0 R
+/ltr#40position_7#3Acontent 462 0 R
+/ltr#40step_3#3Acontent 463 0 R
+/ltr#40position_8#3Acontent 463 0 R
+/ltr#40step_4#3Acontent 464 0 R
+/ltr#40position_9#3Acontent 464 0 R
+/ltr#40step_5#3Acontent 465 0 R
+/ltr#40position_10#3Acontent 465 0 R
+/ltr#40step_6#3Acontent 466 0 R
+/ltr#40step_7#3Acontent 467 0 R
+/ltr#40step_8#3Acontent 468 0 R
+/ltr#40step_9#3Acontent 469 0 R
+/ltr#40step_10#3Acontent 470 0 R
+/ltr#40step_11#3Acontent 471 0 R
+/ltr#40step_12#3Acontent 472 0 R
+/ltr#40step_13#3Acontent 473 0 R
+/ltr#40step_14#3Acontent 474 0 R
+/ltr#40step_15#3Acontent 475 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 445 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 476 0 R
+/ltr#40position_11#3Acontent 476 0 R
+/ltr#40math#40inner_area_4#3Abackground 476 0 R
+/ltr#40step_2#3Acontent 477 0 R
+/ltr#40position_12#3Acontent 477 0 R
+/ltr#40step_3#3Acontent 478 0 R
+/ltr#40step_4#3Acontent 479 0 R
+/ltr#40step_5#3Acontent 480 0 R
+/ltr#40step_6#3Acontent 481 0 R
+/ltr#40step_7#3Acontent 482 0 R
+/ltr#40step_8#3Acontent 483 0 R
+/ltr#40step_9#3Acontent 484 0 R
+/ltr#40step_10#3Acontent 485 0 R
+/ltr#40step_11#3Acontent 486 0 R
+/ltr#40step_12#3Acontent 487 0 R
+/ltr#40step_13#3Acontent 488 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 445 0 R
+>>
+/Font <</F53 489 0 R
+/F54 490 0 R
+/F1 491 0 R
+/F10 492 0 R
+/F13 493 0 R
+/F7 494 0 R
+>>
+/XObject <</Fm1 495 0 R
+/Fm2 496 0 R
+>>
+/ProcSet [/PDF/Text]
+>>
+endobj
+445 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+446 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+447 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+448 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+449 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+450 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+451 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+452 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+453 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+454 0 obj
+<</Type /OCG
+/Name ([step 9])
+>>
+endobj
+455 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+456 0 obj
+<</Type /OCG
+/Name ([step 11])
+>>
+endobj
+457 0 obj
+<</Type /OCG
+/Name (B)
+>>
+endobj
+458 0 obj
+<</Type /OCG
+/Name (C)
+>>
+endobj
+459 0 obj
+<</Type /OCG
+/Name (D)
+>>
+endobj
+460 0 obj
+<</Type /OCG
+/Name ([step 15])
+>>
+endobj
+461 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+462 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+463 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+464 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+465 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+466 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+467 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+468 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+469 0 obj
+<</Type /OCG
+/Name ([step 9])
+>>
+endobj
+470 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+471 0 obj
+<</Type /OCG
+/Name (B)
+>>
+endobj
+472 0 obj
+<</Type /OCG
+/Name ([step 12])
+>>
+endobj
+473 0 obj
+<</Type /OCG
+/Name (C)
+>>
+endobj
+474 0 obj
+<</Type /OCG
+/Name ([step 14])
+>>
+endobj
+475 0 obj
+<</Type /OCG
+/Name ([step 15])
+>>
+endobj
+476 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+477 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+478 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+479 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+480 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+481 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+482 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+483 0 obj
+<</Type /OCG
+/Name ([step 8])
+>>
+endobj
+484 0 obj
+<</Type /OCG
+/Name ([step 9])
+>>
+endobj
+485 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+486 0 obj
+<</Type /OCG
+/Name ([step 11])
+>>
+endobj
+487 0 obj
+<</Type /OCG
+/Name ([step 12])
+>>
+endobj
+488 0 obj
+<</Type /OCG
+/Name ([step 13])
+>>
+endobj
+489 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /UOJPAT+CMSS8
+/FontDescriptor 497 0 R
+/FirstChar 46
+/LastChar 121
+/Widths 498 0 R
+>>
+endobj
+490 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /DXZOGQ+CMSS10
+/FontDescriptor 499 0 R
+/FirstChar 65
+/LastChar 118
+/Widths 500 0 R
+>>
+endobj
+491 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /FJYZLI+CMR10
+/FontDescriptor 501 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 502 0 R
+>>
+endobj
+492 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /MLXNVS+CMMI7
+/FontDescriptor 503 0 R
+/FirstChar 97
+/LastChar 100
+/Widths 504 0 R
+>>
+endobj
+493 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /DNSCRV+CMSY10
+/FontDescriptor 505 0 R
+/FirstChar 2
+/LastChar 112
+/Widths 506 0 R
+>>
+endobj
+494 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /XXDVNU+CMMI10
+/FontDescriptor 507 0 R
+/FirstChar 97
+/LastChar 107
+/Widths 508 0 R
+>>
+endobj
+495 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 19.968 19.968]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 509 0 R
+/Length 114
+/Filter /FlateDecode
+>>stream
+xÚMŽ± €0 {¦ø°ü&e Ä©SP±>Æ@¥9ûOïêP!VѵM'ŠcBd#×æêØ šAQÌ*«oTRÚ6¾£¾{f[‚=Dý¨d³Òuzò´0 JŽô™l°­wØÐüÛq²¥âÀ>Ý K)„
+endstream
+endobj
+496 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 5.648 5.648]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 510 0 R
+/Length 85
+/Filter /FlateDecode
+>>stream
+xÚ+T0Õ33³42UP0
+ú9%Eù‰É™%•ñ†
+éÅ
+
+†z@9=S… i
+
+\
+endstream
+endobj
+497 0 obj
+<</Type /FontDescriptor
+/FontName /UOJPAT+CMSS8
+/Flags 4
+/FontBBox [ -65 -250 1062 761]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 87
+/XHeight 444
+/CharSet (/A/B/C/P/S/a/c/e/g/h/i/k/m/n/o/period/r/s/t/u/w/y)
+/FontFile 511 0 R
+>>
+endobj
+498 0 obj
+[ 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 336.8 826.4 501.7 501.7 708.3 708.3 708.3 678.8 767.4 637.2 607.6 708.3 750 295.1 501.7 737.9 578.1 927.1 750 784.7 678.8 784.7 687.5 590.3 725.7 729.2 708.3 1003.5 708.3 708.3 649.3 309 531.3 309 531.3 295.1 295.1 510.4 548.6 472.2 548.6 472.2 324.7 531.3 548.6 253.5 283 519.1 253.5 843.8 548.6 531.3 548.6 548.6 362.9 407.3 383.7 548.6 489.6 725.7 489.6 489.6]
+endobj
+499 0 obj
+<</Type /FontDescriptor
+/FontName /DXZOGQ+CMSS10
+/Flags 4
+/FontBBox [ -61 -250 999 759]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 78
+/XHeight 444
+/CharSet (/A/I/T/a/b/c/d/e/f/h/i/l/m/n/o/p/q/r/s/t/u/v)
+/FontFile 512 0 R
+>>
+endobj
+500 0 obj
+[ 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1]
+endobj
+501 0 obj
+<</Type /FontDescriptor
+/FontName /FJYZLI+CMR10
+/Flags 4
+/FontBBox [ -40 -250 1009 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/H/I/L/O/S/T/W/a/b/c/colon/comma/d/e/equal/f/fi/five/four/g/h/i/l/m/n/o/one/p/parenleft/parenright/period/plus/q/question/quoteright/r/s/t/three/two/u/v/w/x/y)
+/FontFile 513 0 R
+>>
+endobj
+502 0 obj
+[ 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+503 0 obj
+<</Type /FontDescriptor
+/FontName /MLXNVS+CMMI7
+/Flags 4
+/FontBBox [ -1 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/a/b/c/d)
+/FontFile 514 0 R
+>>
+endobj
+504 0 obj
+[ 619.7 502.4 510.5 594.7]
+endobj
+505 0 obj
+<</Type /FontDescriptor
+/FontName /DNSCRV+CMSY10
+/Flags 4
+/FontBBox [ -29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/CharSet (/multiply/negationslash/radical)
+/FontFile 515 0 R
+>>
+endobj
+506 0 obj
+[ 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3]
+endobj
+507 0 obj
+<</Type /FontDescriptor
+/FontName /XXDVNU+CMMI10
+/Flags 4
+/FontBBox [ -32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/a/b/d/k)
+/FontFile 516 0 R
+>>
+endobj
+508 0 obj
+[ 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6]
+endobj
+509 0 obj
+<</ExtGState <</ltr#40opacity_1 445 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+510 0 obj
+<</ExtGState <</ltr#40opacity_1 445 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+511 0 obj
+<</Length1 1698
+/Length2 8478
+/Length3 0
+/Length 9550
+/Filter /FlateDecode
+>>stream
+xÚ·T”k6L+ÝH3 H34"ÝÝ  0Ä 0tJ£t’
+‚tK)ÒÒÝŠt|£ç¼çø¾ÿ¿Ö÷­Ykæ¹v_÷Þû~Ö0ÑkhsJZÃ,Ár0¨'·@ZU[û)€››‹››‹‰Iâæþ[ŒÅ¤v…C`P‘? ¤]Á 7„L䆰S…AJîŽ
+±Aª 7;°"£È  ³‚€Ý¼ÿ+‹˜››³èééÉr‚sÁ\mÅY9
+@$h+ª
+ñs#fÀýëóÏ“)b¼¬aPGïÍ÷¨«®¤!©ÃþãtRR0/€/§ 
+¶†¸;ý¯VÑ „XI¨­ã?ÇËA¼ÀÖ7+»¿fè?]@„w„@Á08ä×eàäáæþbá¬
+Ñ«ß*0bŸþ;¥,Ô
+fýkñx WW7¢õ$
+ëë4ÌJ4Ô¾:´é¢R’Ê“scci¥åe¼aw¤€Û“™w¾v*ÒåÇ]¤,¬ËÈR5f‹ÂǦý¨Ø/†½LÚ3ƒ¾¥(¼uC’í^“:æÌé»üÑn ¦µ†QÚŽ¥¾\#<JФÁ·0F3fNÒŸ¾ êàÛ*ßÌ»mo ïœ
+[ cŠÛ~¿ý8PoRfµù;²G${vR¯1 M@`ÿÝøSЙX.Éô„paFx:kJÏõ™s¼ˆ3ïýyÙ®Ôþ˜¤®î£QÆ£
+a)9>•S¦ÛêÓÌúB{Uí­á×,—ôÞŬÍ&kh?fž~J7†fÒt<¥‡éÊÛ3¥éó’¿d›6sôRªÌvÇãb°pÄŽp èè5­ ŸQx(_ù̽Ö)%;aU®!••(@Á;*º)£?‰ ÅÊZ*úŸ¸AµT^°ô/mO® Ýšiw«Vð
+NúÅ¡²´³=B·›d({®ièǤ¸mk }iC2`^TÇ /^$«¦æm1r5”­Ó~Cêö·À8[¼]Ô|QävËÈ£ºæ©5Çö8rêë0ê Ot%“ÐÑ5™AÄVIéU¼0¨=¹P±¼Ä¦ÙÞ7,à4Ù·gS: #ª³ÀâùY›/Ÿ¶åB™§yÏ"Á†üW¡'-,uv{ û¯5»8 ³KÏèŸ<؆IÑlƒ 'ä5®iøczÛ\/²×!¬ó6õó `ÒbšëÄJùD¬xŽHunÇ”º?ߔҜXûÖTš0ŸK‹”Ÿzš8B¹œö6ü "ð™Bea¸®Ì5
+*/ú>Ú5§‡ï…mI`QöÕU´2Sºös3>IÊlþ-¯Ê8µqì`Ä”ï—Ô3ˆ‚öŽµîÔ׆èf–ËM®@áG€c´v\‚×ïœÀ¨Z$— òØD-½ì±ÎΧ@•I/©lGBôídîêe nq(k5iÎ:<;žÒ^ñÇgìù
+$(½FœïÚpûÛûî:¿?o­§$!qQ ¬¨­Ù¸›|zº"TX0náךbeƒ¬”Þ×c$‹Fš ¨Þøv£g¢”<I{Yؽ©'kG¶9vc'¾gâ"'ã0c'ü4¶¢'DJ߀1[ÿ¤ºy*ž-Æ:UB]zÕ@$pn®® ÓDÖ¯²ˆšv»”ø$Ûý1; /i°yðÝAï;‰.)ŠÎdUë¾\gQ‹* \bŠ÷AÑG»¯ªrJ\†²*5,²cv±;¡¢¹hûj‡÷Ç5›•Zv,jB(óíR¦ÕéÚð¨6G ·™ê˜þF¹Çú·éZ7^û  pç…!i^ÝÎ+P·þèÌO¿úË Ác‡½ñ…œ'½€(×]:Ñ5ËgF•`ö¬âÇŒÖGàpxœèú‚¸†0Ù3íœ
+”ŒŸ¯ž¤Êˆ1q%a1±Ð«ÔuÏ¡bµ¤æàŠeÍôÙí›w§ƒ°U Þ_¾Bšs tD©9îõÕ-KŸk]ÑÞd’štУ²nħ9„²Sy/Òæ„5Šrï5ðÁæÃÙÅWS9>°Ë‰|5¨'6Í2<R”TŽü@±àôù·'º³uÕp†@7Ç·®ñX4pm>+Æ}ù¨ óùÎvQ75ݧìË÷-¾øN9æs–æ®H‰…Rû¼ÊðŒ’;)Óç7,E°Ù˜®z£Q‰l¼÷ô‹Ž$…ÙXúUX©tR™øõŒèn7Áýiðƒã÷¯..¢¿uâˆÕG§ÎZ¦ÙDfÑP!¥Øs¤nWvYFNvÞ±öåOc
+Ho¸ðùF½S6Ñ £5ʃ“)sÌ:Ä&F[-xbØ
+*8nWJT@"‚ã˜þJdTß°7¹D–±›É«(Aæžt‘e¯zPÌ€"‘-_!ñ&;ëÙëž=q ÖÁ®lëÁIë-æ«(ŽqfϤ~EO)Ÿgn=Rµ™}‚V›uTn­¤˜½Í¯oÓºÞd@ËEd¨ö·ÑQå‚D?«g-§W¸=ì½Y\Âlã´¯E2æ{5ª›^¼Kô8½Ù¯å]†E¼y˜é
+³¶€¬š\â ðÚú“¥ÄL²úʸƒ§rA¢ë2[BQ0  üÆév¬í’äf[‡I™ÿSaqñ›>pÊ6ïÍApôªsú÷Ç€\Ý :/|—™%½Wq€
+ì¨tçåÆ+`ÄG§X‡XË ë‘œ«Ø玎:–‰™âÆ04ÒW{–[CYÔ9x³øñ¶[Û9åcý«碇é]’vR‚fC›×^Š.Ý® PTÙÕ6ëÔ樅ŠwÄœžE„M(™úÂꆰ<ž¤2T3n•ÎwñÒ?1ö½•ÐäB#³ÄÔÇsÖ*™„WV‘·hŒ˜ªÕ§O$¢½î³Á‰I- “»°}`qÖóFØ3òªM½z§W/€|h3‰,²J÷l‹ÎñGç;U@Eí6ùkòot¶ÉëDiÊlõáAò5X‚ ^2Fª¥}ÓT?Tˆ‡¥›DªãlüÁ£ÈïCãÆ?~4QÒu¦´‰Q™øÙ”AßtÙÌ[³pe¡ð30¦¼Y~늠~i‘C ß]ª¡ÀÇv~˜í-HEÙ¤6ØD¼ƒ‹¥Mß>ó3žeó¶2ãgëó
+B/;•}Ò \ 3~Æh¼èŸ{|ì²TzÄÿ@öTôëx°}µ^Üîå|­¥îнó›Ì䛃Ÿï¥«³ ÑcÔ?ñUÁ9Ì0÷‘ˆ·`Ê+¿U鉳Óf¢a +ØK‹ZÒ&ÉÂíR73sÄÕ¢FÓ)íÙ¹Ò¡ÄÁ¡u{ÈrwS Lhâ Yg”1ô÷?<s×2æ]ˆ¨æ%òU¢RÓ¼ã¾Ý=À3¶xì6Ëîž×»"uÕÓž÷¦j14ÍÕ¬‰²™d <LOrø‚_"щË免ˆ-½ì1õ<¥öB®÷†ºƒöõû¶ûiåº0²ô‡ qüzÊOž`gá^¼nÈt©ñ8ÍÈ%–Éezs¿,ú`¦{¨OEóS¶ÖÎ ÕèüÖR2ß´¾cNÃË(-ÇÉ üE,ü¤`*è3¡@ÔÅ#S"^’:7&fFqi¾óNpï—’œo TÂì™RèC”ŽÖ±ÄaZOŠša¥{¯Ž½kRÎTÝ|»ñG$˘%é)’(ê2?óÇ…ö]+ï=cmUj.×û(ˆ`°mÌÜ:L>Ÿì„m9h¥lÞ™©Ÿ;¢$óm‚›ã¶›ø—vÓ>u=•ó 9Z‰„RçóPß7AE)pÞ˜g¼×9ÁPi‘d¸0qÛ"L9¾SðÁ>kߊ0êCqš¿öÁ`K4^±‘ f¼Îá윈»Ÿ§á–Žô¸j_ùæÞd­ˆY¯Dœí¨ØµWêÒÛÛV¶ôyÛ‡j½e¡°…¹ØÚO{]ELÌÛ«»‡µ0ÁœŸl˜KœÖÁ¶dŒÝ‹^€VÝîW=YÍa¤Ý™©í>Õ‰®×„¨IV–×øRøÓ̘9êoÍ›8‰º?»Ž4+h¯o®)Ò =©x‡Ÿª9'g3¥ìíØð~…íŠc†Ñk:8*ÎäöâezÚl¶¿SãC±ËOô+”c2j0¦æ± 3~„‡%_0™¼ú¬1?G¾‚yƒrëu˜Þ,™•µ­NÔ¸û&i·óÜÒTFaä›p†H’9:øȨ#àpãÙFðnT¡)=sm>2ëDʼ¾aÞÙ4‹û–¯úd5ÿ¤qÕÚ9±ÖÜâýæ¨ûËâœ!y…¨fÔtQR#‚$ÿ [‹m|ôyõÞïýF4BvÒnt1:›ïŠ ر;Äz‡¥ä¢(%+ùš(Ý›0g)fµþD_÷i­ºÚ³©M}°=˜tõ|«„̇=JÑIôQþ~æ»É)·8qsÖò™ht˜–Ýìx
+=›ÿYò ÓÙn9ö(*»ú¢µ´,;€öÓœ½|×Ê8 áò¼Uo†'ÎûÍÏ„Þ^Õ†}©7» œÇ,ÍJøöÂË0@·²Ç^¨¾éÙÆÇ®í,Ã$—IŒd_ÁO-—¯»qåÅO¾¤¥Ç>*€Ï–îœK_#ÝÕ/[lùØ`o—ŸÎ·áÏ8of\S¾óÅ”îA5ôðeßt:/FÓé8ôY¿òÕ:†æ^—‚$*èg¥}'+Š&nL‚(ýÏE“C>…sÎß“D®Ë§oÇ…«50¿·ÎÎ{ ¼­›í­ä¨7ûúD‰ò´7¶ÖC°eë©
+õ¡²• ¯ü(©`¬ï}ó$GÆÕÎŽ~™‘ÏãD!¯r/ûQˆh…g CŸè$Q~ŸOÁŒåÁ&Atì"Ð<  ¯€‹OZ^8T÷˜SaJàé´ ñðCÙK «¦t4²†’ˆÇN]‰ŒÊ3“8xƒÍg–WÇìD¯^Èô6ÄJœ4Exì&¡Î`°íþä#% ˜VÒaVd\¥ÛêzdêĨ™ñu2žBÜU죔»HÞ‡ÛRµq´£’Gg\üt–¥òŒª:TŽ™ìêÞ[Tr%Ž~·–oűVÒºrè)ÂË;í‰àl²öÊÐ@vk@|3kS5£+í¬^ÌËrEÕ ÓŒüæ‰ø‡…’íÓ‹…Dn»¦˜
+ªâM¦¸´~¥¢?‰õ^Åés+öþxæþÊ9ódy=aè&CDÓ@o^ržp²\LöH·Ô7‹+ÃNº#+œœS]˲´X?‘V?èÍâÇõ­ST“}Ä’;ç~Åü “×+sRÂÝK¨XÔ4´EY/„{ÚIb«…kïë•êG.)¿9C÷tÝqRnÔçäŒØ–ÎÓ°ªî?«QH?CŸz&Æ÷S­è¤—à}×õÕVE-_ú&È®‹ômï“7ŽŒï€M-˜¯f
+|r÷ۊƸæÅ}—9”ÞX¤å9F'¿ð¬Z…!¯b{Øž¢’¥>fk›¨CÐm¯ ¢µdž)ü-HxlËe!nCÂáÀÑl‰Mq±lð£¤-±ó(‰\‰¢ÚFÞ3ºd‘Þ©÷Ó€áð÷!J¤VéA÷è¾ÒKâ—eŸÍ8ØÞ•óP‹£–dW¹ˆPVäÒÜP„ž·¿ìÝý`¸zµkcž)„Uì–çY1ë’@ªFš±Æ°wE’›ê+ÆýöÙˆ Ö¹ð“a¼ªzG~¯ª~Ei
+h€(U¿h8ËЦ9‘ZÁé&ZzpÝÎ
+I&¸qSj¶ Ž§ǯ÷€܉D_²þ“ãXZÍ̸WÒ/Š—¾Y#)JížlÙÈIâŽéÙ´ÌYéǘo¿öÕC×jWk^,®Â:¶%-RSn—´T©ý÷‰põ†žÏM 1Ï„6O|N1¼7ÛTN®‰Y)9*~À¨ÞJ?
+ÙÕœbú’^´ÁÚ‰´Ç!áð ŠûTR`?º?Çü‘…^ªJw¸zC©$¦‡^=ï­µ=®ݾÐ3É\
+cì4§h,ÅÖ0r(R5æ‰Zy• MLÁRðÂC‚tçs[Û
+JÍ¢rbØW¯qq›Ëw¤±c,Y"ºM×8®V¦¿~âKæÃ|Ñk%¬ø
+endstream
+endobj
+512 0 obj
+<</Length1 1702
+/Length2 8219
+/Length3 0
+/Length 9294
+/Filter /FlateDecode
+>>stream
+xÚ·P”o6Žtw#°H÷Ò ’
+Ò ] ,°Ä.±´tK‚tŠ”Ò- ‚ Òtw‡ßê/^ß÷ÿŸù¾Ù™Ýç:uÝ×}Îyf–™AS‡[Öf V‚AáÜ|<@q€¼šŽ
+Á6¨ƒTÜ|
+
+vÃf–‡9{»BlíàžlVì
+¨àv`'£È ³‚€áÞÿU‚MÒwçåõôôä9¹ñÀ\m¥Ù¹
+àü}9
+¶BÜ»7ïßÍu€Â<¡¾ÿ ÔÚæ— kwgÞçPˆ‹;XYáï„ û?6[0 E
+fýkùø…„ WW761aüBB
+ƒ#R
+ xe™~#
+㣕
+õŽ^}Ò>½jc &µ¨8L‰ÝSÊ’çž
+…‡›m¢ûÛ%y^bcŠy§pßl÷Îâ´|M Võ—>/…ΨÍ2¯ŸöÆðGYz‘WÖõïä?6_yœêƒeF¾<mºp‚dá±|0×¢]>÷(°ô ÔÐsqmüˆ³­}«¸²šù|À)ÚLò+bVPƒõkþû"ü©Têy¤º‘ˆŠ:ö}š{1¦«¶ÛyQ Aom!§9P×GÚVÜ-¶öØåo½:­ˆ·ôÇ"Ñüœ÷e“Ø™-8ƒúÀ|ž˜Ž;6IŸš­æTúÅT÷4ðQ—BÌiŠ1­öÀ­Îv)‡´&òªŸûì5¦v³¯µóÆp æÌjqÉ›çþ¨Á_¯”üX•2°5aÿM)L6•óÊyPoŠã ¦Ãâ“N˜ô «]Còí¼¯È/W¸9[=LÏlº×õX3ø-iAÕŽ®wãÝÅZ$
+ëšCÞ7DÚ«×n:ì½ç(°Ôqp¬sÍö Ä*l¿Æ¢ŸÄþ ¦ñø2«Ä²¥7g(JkŸFÐëã)sÖ’¿ ô;è ˜;e†S$Ï¡ê&†Ý3§K¤8ókÉê? u9&­µÏ±¡š‘QÈÄà¨öyÕ ®?uJß•Æ”H,O]£y§j¯¼snjSÖI4`aVœ,®U4F“ƲG(}ª®JGü²fÔ$û‰¡^*×i~®((„‰6Ð8‡­:t2r—ï‹’Y!jk`ì
+—¢Y£}ü­ßãaµ ÷üúÍjKιe•~¶šžÎâ‘Ç Ôìš2€Ðÿù¡ü®$wÔBéÞS ™Žòƒ–
+2¸6º³ÂýìfÚÌRÒÙy[ц/ ci»ë1Ê݉­ÍíÎ3!UµŽ]'—‚­
+±5l™çc™zò¨Ô瞺a%?¦·³^ÍQ×Cl>%Jš‹ÌOd!é8ô”;–ýij5©iõPªo¦³íbÒša”©ÙÖm£TjåTÒ'¹îÞù3.#Ë
+^.A÷®I/ϲ^Lìb>xÓ£>Ðùy±-ÎË;ŠÜYŸe=‘ü´&MlT²}uV=¨Bñ‚Ÿ<Ây;m÷b+MŸû_Ü"#hÃß™n¡Fú”´Ð¥­KÞûšc­Hú€…OvM:Ééôù¿ééU@ø×
+?Çw?thÛ+ê”LâÏw\°×VC>cÐÌçäØ‘åÂËIa^ Ñœ¥\ÌCè8Û[N½ÉÔ ÁévÂäáfs<ǃʼnÑþÛq²8d ‚v3Âœí£'‡Z=Ti€t§%Ç÷' ¹b£PÆÒ&š÷yÈÔF#Âìy´$Ýdc
+Ñ’e<3W›Äî·Ú„!ê7cœ°‚Û0”"uïŠ/Ç‚”úÆÂt$2ÔÝÃíWnO.H~&…½N( sí“Óû
+~édá*]p&J£§3x"ê+òðÊÞ.÷`.–ÙÅ¥GPžë7ÚøÝ<&Ѹ}Jcïx!7ÍÇz;½o•8´÷—6CÒ­MèüØë”1ˆE;؈Œw£1R0|Wû]¶rk€©§úË»ý©è ¼ö…Q€G×Ê%wøöDsõÍÏ}K¬öŠñm6ê™Ûèi…&o$ú –ôuév$”{†L[XÏQ¹Wû"•ºVè§|7ãã”å`&äe_ÒÇöŒXN©JŸ¬iyw^qV˜ª)w Š~Ók…î…SwÅñ!¡;t”ùãì]³Ê×$– ŸúxÕœ…ž;{(Í[ß‹ä„ÅÚöÛ ø`³Ì}_WýpœÊxDtÓý€ƒKøa³m¼ÌwõAñ¸,â†\B9ð‚ÒwlïÄswƒx¡fM+V2Ê­hÔÐB³o™™cŠm>êSìGaŽ6äk²ÓCŠBÝ“þ-ªOUÍ»Øæo¡h3âjv«™?L ýÔú…i¿' ¦Vxо”¸énʸ`ì x§ßbPqü4¸$Gù;WÞ„4Û®å?+rwZ­yé†ßu„ˆŠö[‰Ð³ 7¡™Š»9K+Ñ©5º,u­‚§q›v%A-¯k‚Á™!a\[¥ãfüŽ:ÞßÁ¹<ýÝÉ[EÇ8ÝG™}cë†Ú_Þ ÂÎÅ'>®à¿' øha¸åb?¤Xæ'mQÑ#'Búâl æƒË˜MDê ÒG5²A??²Ê2õo‰ÂGoýìCîQ[Çf›—(ÝŸ/‚IËCÏiëá…8µ\­}o†µÞ¼UžÉ²È´¯§ §™SãCtR0_‰LÚøN~ó2ðvs_²xN?Ë4—#©Ã™¼
+ÞvÖ銃S‚ùj¼¬•¥&WÃx6÷m‹îðÀY®ú[yÐÛ¬š€ø#·^¿ŒEƒÎæ+_÷Ø”õ .íÒÅ'²F;Ì8EÔOáóËq£ƒ®‚"ÝÈ O)q{K¾¾P (Ư‹l°“ÿô€´N÷®¢+s7­È`!ij×´ˆÞ¾†Z«NðÎ{lïA¨ÚÙ
+)¶}šØ
+÷‡µ#1”²dþã‹ï}žZDï'ðJ. ³âŽtkð¨‹rºÒ-m­(ßu?m÷%ü¦Ä ~HS"øõf¾±íM8pí·`¢Óíߘàã¤g
+±c¿S7=a¨,ýÙ«EÙ&kd×òN†ŽJUì¯Ñ˜¼¿“È  Æ½o. kzàÏÕiìETø1þ/z\Ìã ËØÖUßÓ“Ö€›ºéJ;5Yý):Ʊª
+OŠ€>ºÿ6Yˆþˆß>¤&GÍBÊî»Iªƒº3„Ê^ÍENéÞ;†<m2*ÒÓìÊAb) WÈ2í…¹8û} ´ç·¶“ý©’Cr-AŽm»M( C*¢E…ÊÃL}<¨õA£ž ÆLDãOó0H'Ë;f=K–3i’`™6š:q¡ê×äâI–û‘šÍbâÝÚíå9ð†Á1‘H`T—eyé
+¥”âäñk·­6…Ûé WJ5ÜÔ{HAÔA/4¦†,–—Œ9M-ÑÇ×^ K·¬‡Ç>µ,Ý¡‡½¨ÏTNŸL/ÜÜ'‘à3N(wSP5-dH¼XmëüA;{8b¬»Ô)ä@}Ê>4ʵçž ‰.W9v,ÿN ?š|E(¯GÅðš:i §þäöÃóJÑKH&8ñ&æ‘6è+•¤ßXílIä›Ãá h»êîûÚÅ–2ÔüÝs‹¶>ç€ý5[§Ç îý¸øj—¯]ïðSþìˆòW"°€hÐê’Dzð:ÛgÏÓ™8¸ ´}³³€t,àz(™lš ¶Ž{¨é·‰­±Ÿ‹bø(xžÝ3–“täÌïÔãïÅ£HÒ•{aª6t“å©%˱Š©b¹Ñ„Ážô-Y 7ø[fæÂeJ³Ø¨Lb>A«¯Œ³ aÆõ£•ª"Ýí¢Õ'ÍÄ÷í“ S÷-‰òíqTªSáªÔšÚhî³¢…,‰žRg†ªÜ5þô„ƒÓHi²q)ÎK`K¿²†Ï0r/Ü0›z2ñé8*iîsbjúåw]ÊÍîÉÏ‚ª$€ö' Ò­"ÍϧtÛ˜ÞLÖ’ž9šû²QêW…@òôqe–®¥ö+JË)Œ›Êôïˆeó/¨ÚÖ¤˜Ç“à-;†³õ‹RéÅîIÓG«æÅ:Éì”R?hÝÞI÷'„gïªÓJ)øvAë$䉀ŒISƒúÒµñ²åE¼MñæÞV—‘_º>…qÎs´yK¡Ý~*NƒhePö0žsˆt
+=Ü›|ÃÀ6ºÝóqŒ‚ŸtãOYUU$ža’§óg=š&¯
+Z¤8ŠÉ1zû}·.Æþ&æ² |ÚWoH܇‚˜XŽ0­ žÝÄMй¯cvŠâ'T¾?|ù!<Aݬo¨ÈL•öCqH_à¬"Y*Þ Q T¯SÃ]¼1~$'ç¤,yÚxh„ºÜQ{ýµ¦ó¹’ÿÔY>Moœ¼ƒÍ«w¬æ\h
+üæå­“€B99âíxò|%Áo‘QÒm:S£aJÉÛÙÂ?¯¹DÝ?G}+ÔÜöð$~m&®ÎG—{r$JHÜòÆW T=rÆÂ%5%ë›Ëxÿùí­ë†Á7ÅŸ˜ÍÛ;¨õu5ÅFšöèÞ
+¸<Xª3ü$†‡(oåô ‰bÕ*?dø”ÞZkž+íbÔÁŸå<Hl7-øÆîázâãºd—O‰ú,·ó¨jH
+L^3Ejs¥Np¶¥²œg¥¿àypË‚»õž5|µ5¯Èÿ@îŒ@iÂGm2(ßnÃdÐkU„¯ùGŒü“ÏШ1Ü*?w5Ÿ ›Á*¥"²âñXR…ýH”SR²Ìƶd3´0-’mÚà°×㇠㲢b ¤»ÜTŽZlÞø© |îty¸‡QÛMrÎè6cáÛJ^²9{cÎ\*
+ u­|­­ZYví·ŒÈš%ÿRÝÕ©^…“ê‹JkG$ëF+[/ùZ¥I‡)Ù"Ü!1EéÎâÐçÞŽY%ipžGs^¤H}xºœÐ%uŒÝm§Cr¥éfZçˆstŽûóòzEÿkwìwkäÄȧaúGÔ’W&éûå_×Ø7ä¼Cg?ƽ*
+”!Í‹ ûZ}ûäRÚÄX •:³öÁú)U¾µí°sv‰Ê±±òÙ%ªsç)¾Õƨ#>ù£¼3¾-Ø?†õËÞ<¶x …bJêI° Ë Æg•0ú-’×ÉÞ2ǦR´TqhÒ<ø*t×ZÓýƒ½y˜ƒìðfú®ç`º%w¤\ šû3rÅhÎ!ýÏ`x¼áëÕŸlÐËž©%‘T6UzèŒEµ¯x…Û¼«åix™(>Ore¤®åc“»t)Vèß(³£j),ÞÃGÍ .uÆßåIà˜Ý>ºãQÐø’ ×0”ÍÑAsêÚo«91™­QR.ßývt?½Üõxò¦×eº½B˜:_…ÖV±È,ÿx‡U&"L_!\ç¡]l_\Ýl¸2þùUÖÞû¶;/þC­~‰*®Ÿb@‰s|ë::½Á4‡¸çö(RövÄ!¶$ O‚ήL_z²Ý3Q£«$h{½ïv:ãä$cS#‹Õ*¸§‡)A)¥,#8Þ
+¿$_Ÿ((¶wzýãП˜vÕĘúK¤®óù½“Jiχé°ÑèeëE*Prûþü^{»¾”7”õ=ÈEÇqvÝprÎ<Ï–oÀ¨¢B†GúYü¸9¨>ÙÂô|nL—®MlY=lD‘ë©3^*¯5Ä<7P]×W‘ÆÛtÝÞÑÄL93„«¡ØàÁ¤þ˜ŒëôX-ÓЖŸñ
+À±sch þô
+…QG­èj¯PÁñÎyq£±¦ÔÝ%.ø¢% Ž(;/[Œ—P
+Ä•X“éyÂ;¾-ßêg9Yl~ÑüJñyñer߈>_;ôÎÿÉ{â’²­¯(
+NÓ÷Ù†©g’ ²JÉqy‹à‡ÆCù™¤“^€s¼€„{ôƒ7Sä•Ü^Ñu›u5ÓlG,*{kÈ=ïùðÀÇÿaíGýî4w¾±¥Û ÆûÉ7«VuÐhÿr®bÑ›tÑÑ-­j··ðÛœiåXéߺúñ8©Y¡Ò¸±”Å)¥–|RJˆ¿f÷9зNZž= ™û}ĈÜ{)‡o7«lÉÈE*šûó­–܉‹'ÊQ!oéŸzd”ZU6¶öŸ†¡„nWÜ /Šú½Ä1ýŸ"©ùQl$Ô_–ëã·c§8Ú§ÞžçùP–™E(ɽ–*âxî.l±ï˜«ÌßµŠOšMÕøðm¶ÜØ™Ï3ãÆˣ㛺ƒ½:¶3·|â8Àæqª¢ 6EÐÃ/Ùûe€,0³ÄP܃8êlŠ8òE
+§¼º6“9DŽûÕ2%*“©·r¾Ž\kÑ6·Ï«´E*Äx£ER
+>Ò¢–¹ß¯VŽ¼¾ý>«P6QHéç¤!ý¨Ð6žÀ#ºkÇ7OX­ÛÄJO÷ÙÙ¿$ƒúÖœ‰?-~.f)s"h—ÅèÑÌíÇ-É°ኀÎè)TDícëU¢G¯V õ
+9>çôŽTGÓªbkDó”ª
+™’8ðºØ×ÀÖ³
+ˆ§‘n Sš\+âpÇî@ËÏ„]öðB‰Ð×B®½b)_}šq<j
+endstream
+endobj
+513 0 obj
+<</Length1 2131
+/Length2 16910
+/Length3 0
+/Length 18195
+/Filter /FlateDecode
+>>stream
+xÚŒöPÙÖŠâÁ]6îîîîîÎF‚»!hp—w‚ÜÝÝÝÝå’î>'}þ÷ªî-ªàSט²äÄJªôÂfö&@ {;zf&€¨¼
+3€‰‰•‰‰Žœ\ÍÊÅøŽ\èäleoÇó/Q' ±Ë»LÌØåÝNÞÞ ãj`f0sð0sò01X˜˜¸ÿchïÄ3v³2È3
+5kìH&–Î÷8ŠµÀ[gåëÃŒ×J©‹s;Ž6ø êð…·È~¢ ÖœwaÁrï¼G#_Q"]Ò2=2Ã>KZ…•J¤]}W•ÛðBóvö7@0%^/Úv|UQ=º¡‰"FE³a$šK«5`¿Í\d¥åV£Ãücþ"÷dÍ`QÛòÈ¿¡Ãû©Öqe`°—þ.4©é~ ~p«ÃWó‡` ¾…;3¸¥nÄòOAd±ËX»&P™nÑí×3¤qŸwà…È#.óf>“dè0þ){¶ÏÅWß²ºs…¶õi”9wTý · …7“_Iççù8–¬âFé¡T9iâŸsV£)•y«uÓAÅŒçëe˜ bEžDrq›ìó}dlÒ’];såzž¸óN5ÊÔ›cØ󔉷#éGöëúE‚Bº¹oÍö7oKJD 0ì5ÎËÜÃE¾n¨qç|nSñÏjwVL‘Žû~·5ÓkBz¢&âFl[ýASÿqk¤ýû³;]±´9eÁ‚|ì_˜Ï‚þ¼XAN¥¿æç›z–êVÅ{*„t䕯äé»Kआ­õ¯¸"xªj÷¹¤^ë ]s“#[ÄC[dÞ6ez?غ
+Ž4@c¼k¼ýhfVj/þ*’±hIbÎÂD‚=!ÚýB5œÌ§â-À^™oto4 ~ÂÈï'_!3S‘LÊ_óíYmýÃ|úê€åùjvðZÙ?L]]eešà
+«½Ÿ|)K7¶×ªk\JvØ4Mj3ÍwÄžNÄ’‰7î_£…k‚Ýy² ˜¦ÔØCcwzçY.e‚E[_Ǻ¯Ÿì ÔŽÜ[ãw[ȲÍôDÒòGogÇ„
+4Y<ˆö¹‰åÌ&Ë·ðìü¶™5¿ô‹ð U]?ž3ÅuhçØ{=<Œßõù“w—ýšÀpßXÝ`Ñ·/îZ”¾J[}pÝϱ=•€Ââ©cF‚™O4ƒ)ê÷ä¸ l_\H cËÙ±«^ºSÑMUVdJzÝrbó÷SÆmS ¿´H?[*<ÖÎzo+¢’™ÁåÜLgl1 ­ê¾·Sô“ÈÚv Õk΄–aç—Ù.›3-$CÒ<¥AwçįÅ3šßteØ´’+‰³äðjS«ŠÈ1îòcž²£‹f
+ç­ÝeØð–{µÃS‘6ÍkAÚI@Å‘ÀD‚$ƒsy«ÌÛÇ¡tt«aQmjžƒ™¿~’õ±—‡7D›JÒDY{ÅmEôÜ–ßãð/É®2h½3vÉ$‚Rd>ÊaÌ
+¢¹8¾DÑžË xÅÁHe´‚µZ˜t…5ÉÄí…ãêëö–*˜Éb…ód¸ÔÍöhÜ\qav-+Î@pcÐeËSg1qO 5¸åŸ*
+Žû§núꉄ ÌƒÒ 4WB(XØÜQ‹l¼àwɦY4ÏЪÝWBz¹MÞòvH¿g¡ ŽhvÑH ê¯0~7ò,þ¢\> §ü­O‚¦xÙJ ó"jß@pkf˜'o”ªJ®V£Ð$Ë]C«’2{¬ëTöܯ}Óƒv¢íôm©šÇG(ˆ¼›×Sz¼†•
+ÁUïe§Â•Õ)xËJÔ­-X§™¬vÚúažÉUäéÃ,ç«ç€6öx?‡£ºmžÉ­-7íæ²Å_3'“}Bs²~;uþ†ÞÙ{ui§³N“ÒÌ_t7è|snŸ†n"äë9 C,*Jée
+àùIççñá.–üº‰Cˆ…³R²ý„ÞmÅèt…ŸÃ/Ô†6h>~iµ\û ݉?iÍGû¼< Ý‚ˆ6 «E¼ÊòB¯Yݦ[` À¯Zn溴@óˆ¹pfòmá—°-܈¡á`î9w$`µ…<Uõý.B²ÀRÊlìEfJãa‰3܈™öë#$VÖO‹Ä׌uÃÍï•<Øü¥B²1|¡5Ÿky—$ gÑ‘µÑHXE®Ù®žwï7¤ôH¦Jt¡î™GSNLÙX8ešE^®êœÁO#~ZP]y`(Ó!¹è–orÄK:÷4ð©qës S„?Úz–S[ÕáD¸ |ì¼Õ,Œ”ëV1 P1¶ùuäQc˜=§ÁSÍ.ÿ£bm÷t ý,íksÙ‡:¼O…OŒóCÖ{rˆ}WNÄ(4ñýû‹·g•µÉ ¤Ö~ì}v‘Î/kýÔ?ð !4o‡Q┈lx}l·Ð ƒØ¦ø¼å"¬
+_¢hK32DˆÝ?nem‚
+î>=V
+A"¯«Èoƒ¨‘ {\'DôrýyOàg²F
+LÌCh—ZÚVƒ3íI`£~¨Ã¶xM\YZŒoq­•ÈžHáëBÓzô\i(.{¤ië·¸}cÔbÑïŒa+”JÉM›»L5èw”ÚW§'«Ÿ\ù!ÜÄÅs
+S÷æ_¥HÙÅd‚5– s’x‹…ªð1²¸¼È÷ô]?8ï|÷²æ–ÖºŽ3Ï+JŸ
+S_)u³åºæ,T@+›y£„X½eôÃ|µ*ä=aˆ»ï |¸ŽBƒ8Ƹ(èuż6|”
+$°Î«súöœµeRîç¼ËÉë«ö»Q4–„ŸašGGT¸z¦O$¥V\]_X°¤ÐõYdix=¢”à½å[gž Ã'°™ïÜ4ÒL¾˜Suz$Þó0g¬ê‹^½®Ûéæàà ù!7Jk…ƒÔâ1á\ŸÕ ÒÝ©ËÏ-Ð"†0§yÖÍ>’4V,c„[B;öÁ¤·8Û#Ò7
+ÅÁÉ‚KrFo‘”ù(‡í?î
+xüÍ‹gl[~t
+³žEÏž«Â³tóãÄÎêÖ˜ÕÏÇ?ˤë-×`–á_bš/bû??|ðriûÈ<Ñ›&¼çôQÞ>QþŠ3,ãÖI'Kä
+{Y2öMc5&&.ù9M9¸Vwy•O½C‹"pqIДö–|½
+öD¡yYD•;ô>¨£4ª8“¤k¶;½Æb_í eeÛÀ¤H³j‰ªš† ðŪô~Ÿ#âKüVˆº±SY—¶W_A(–S¯°™´(žcx€/ýG
+ÂímÍúj‰TqùØ9ýÔ~‘Ï›Yd¨ ú,ä|Ê»›~»à–„[ÃÇ•ŸòúHû¼Í¾;¸O€X=ZÙÃp;Ũ{Ûy ùr¨ê_ñ+n`|®S´(«9((¨èþˆ¸S´ÏÑTä(f0ëÝ(Ã"Þ›KÚ6À-ÇÚ“…/_­ç%wYž if„ÜU¥mÐì@Ôm@Ë !XJ‰šL1ÁùI>À‹ó~-&ìOPHš”hÁh¿Þ6³¿°ì›÷­—bU¶ÛÜöߦF²ÔÅ¥@„ýÙ“b•åóúz<¨uæg—Äí.uæm¤5ƒ%`ë¿ÑÎ…ÔFåeü> )…o0mZßok™
+þ¿Œt®Zõ„2ËSñô†ò5&›1JÊÁî^™AÖLNC¦°Ï\ZfÕCLkv&×ìSXG“<Ê…Uì<uéù}¹/b1sßïRy±¡ÉÖÚ.q·:°›€7”xZú7­"„ð¨ÝqC\
+÷³<3³û‡Í“ë¤ +r‘5ƒxÞIÑÙá{™óì»
+!}Ììh<øÁ½šñåQ¹Ú‰G‡:úsð$Dëõ¸Ïm“¸HÅy.eº,yèFCE+â½ÚM–cBM<,» ¨©‘š»jôã¶/Y2gd. E £‡ÅòNËŠÔ^7Tî>?f „DZÇ1:ÞG5›`±_ Íì9ŒQra×ÍÒC´OÓ‡ÀOáFJ/A!òuK+ö•ÒjòIïÏÁ€</côô7 Ÿ‰Óž"y|f¢#ñIw~˜²fÖâ!QÛè‘xŒ´½yÐd›Gܪu—ÐDÄY–b—vZF x¼ñ¸ÙÖÕÙ´°=¡}¥ƒôÕ`ÿæ\±¼GG¾è‰Ú©;/ÉIb¦`ŠÈ%Qú–êš1³ø¦òk` ¡Þõi/)­õaJPdýg¯O´“eöBѾå^)¿jòd•ƒã¾»ÝþäöÏ”|rÁt^…/Ñü*Ÿ‡âÅsÃäaš¦ùá5°áp6¢GÏMDöËv&ײ9JZx¥V¨²Ÿ?…!r£x¤µGs+eß¡ZëãS\¯B?C?䳨‘J{ÄL©«}D6YCߌÇð·–­²*;EÛÉôW-9ˆº´ŠcÃZ¸žâà_ýofR¾xÚãcN)›<^3·È9ÔÓ¨fÙÜÓ o;s[Ùø& äÑ’!Ì“5lŸ”’¸]˃µÌ“™ˆ-9N½Ðð Y¹:(ã$ÙɤßD-Å’ [àÚ&²qÛrI´ä%yp£meUH wÜÄeB³;+Žè¤;  ¯¬˜
+O¹ÉUR~,B5÷(;sZ ú ­¤/Ñ þ:â°gäÊÿJóýŽ8öEYªüøgZãOyŸ¥³ûO»“*}Iša˜,”§Ž:´»’>Uç|.fÓ®<ñ8죣+¿<‘‡RÄ9š»Ö—ðQ‘Ú&ɽájlè§<§C˜#f»v :gg¬Ø<=GizËz£/‚U8£D:°ý¤M~d °Ù¸ÚÍ)õ"zûD¤O‰»C(nÇvÚªsQƒ2©^펂ÔïNü4p¥C(Ê;)‘SÑ[ë•åýép[•˜£MgX âƒÅÆ×­˜À_Š}ˆ˜wħa–:v樰f$ð5%÷  6o-sªŸÓîýf?Îå„fÏTÐcl ؤ­hE.S¨ìÎVôÈæN`Ö‹«qï ½Z-R )OÁÇ}•âÏM„ô4°Û”ëÑ oü~ΊÈŽú1/~1b(² “#>L™^NJˆ©òÏàqY-wj8…U×4PÓ•[ì§jQŠ¬ŽÆêS$Xô‰>O‘O®@ÐÅ÷¿“~1áÌe“Â2J\¶×Á/ «k3²#>Û  -Ä ] ªÃߧ×!¸
+›‚r•9Α(Iñ`=‰
+réFwÏ­–÷è6îVI’Û4½^ú!]²ºùšoõf2?æIÛ˜áÇê°Ôöòq!«ßü½uÙÜÍǵÁOg÷ˆ7E\cIàðºéÇÉã†ë’A£ˆ;Ü:\¨è­õö)hm,fä8É#¢1K~y`”žû[+R¥LA„ŠSÛÙ=xÂÀºÜmPÛWd•ãxB›þ´!hîô°Wgä«Í¯Aê‰yš»}OZפù©_*Þ’„©èÂPµÂß……Õ¹òç½çËwמ?d¶4ÞtE":ÐÑÆwš„ýðz¾'Ó„åhC”
+]ù4%IÚª"ºS üýJŽÓQ3EÈ/ ®ÔQ ¸ë8 9“K¢Ÿºä¨sÉDÀ˜YE“-ÇZèÇb¨è·ó„tÎvaÂYiØÑÜOŒÖÊV eã¥:5WüîtÂõWö?CÕ›Çn5<²XOžìíPW5`¹V¥²ÞYÞä /½)2ë5óዜ֔ËÙÌí OÞZìÜqqÛZ>1•˜­>~Ç#‘f™4@j‘M»õãÌéYú•ê/8ÑâÔ³lŒ»PôãÍjv±¢™L܉_+-2¬®jëc·8k 6ó$Q±g7%˜+ÂòDá‚ÜL­`ܘvte¶â¤ú®~i´Bõ…½û>F$µÝ“V®®á´uçŽóÉC“À)SÒLéð‚,øžZÜ’ô¯pdFû¯°À‚ÅÚçœlÙò"¤L7† ‰ÇìÚY“d¾:óYþ$ü>“W£ÍZIîœjaê
+(]H‰²ˆÈûK™¥ìƒ6Všý—Ÿw€fÀ›Ž1¡kš_ #¢±°)V³>ˆñ5¼ÅF?·àôÔú!6!ì“?éh(ëãÙHhQîg7ìTyp8Kz—ú,€ë"ÄΡ¤Ä…ªçÏ7°ÒUgÏ{å.Sp JâÍÀZŒ ÂNà†¥&jCy­šã¸Ê(,·–#Ú^Y}:g¡H]6ìíIN2JQŸ÷ȇ-ƒ{AáþusTÜt‘ý Ž¾¶—gë ÀýÆyJ
+â¤g4Í ƒ±[çÎ)gÿuè‚c €¤3¼§2a]7F‡Œ(‚‡Ÿ¯§…M}p³á¨ìz±GÿSå˜("k—¼Á€…F¬Ïãö èœÙXÒŒtÞÁØ®ÉÔ/ÆEÖì±ðïD Ôª‡Ì5Ï9>.ôˆ“2µAë¢jĄܪ#^ `ÜoƒP¸Ä@b0·GÌ™¤°,7Ú»Qnyìe·I(&\'J³å}o|Uä6ürÞ©Ïaœæ bY!'®'D!U]‹6«[¦-òÑD>bæo³C¶ ˼Í» ŽÆÍHcÎUåZ;èëÖšõ DvDˆf… Å„Ý‘j,â¾i%pèVÒÕLnŽB¤$ñ+?râ ÁgKê%« f³µÜXk›3·—ùàsyPÚp¢áÀ™šÃâ‚ý8áæ * ±(
+‡{ißßß;ÅÉóñ­’&ó"~Æ’ DЯи§ùÒT€ýY¢FºzÉÜŽº•z–‚ÝhaF“¨5`¶[@Æ ’¦bn"65œI‘²QÖÞl×õõ}סْ¤:¢Ytùª8¨H°4¶T¦˜ÍˆYº.¿vŠ)‚LƒéÒ°sêŠÝÿ3” h¹Sœ¯nôV`®0u¬J?•†Om•–DM{õ¼s?·’ìa"…¼x²kêâDŸæ™“§…´³&zÉû`ëxÝûA½’L‘ÄÏØ` Tü*cÒ³j1àÚ‰P{ _|©„×} ç”öuå¶úZV`Ô/o@þ†"‰î›Aš
+m
+a§Œ¤é”Y ;ÝéàÃ*fKð1Z5{J«)¬úTù0ì¿ÁãbBÀwØÎ+6Nr0ã+á¡]ÔÚ<ÕEÁKb¿÷jK¿ðÉm{`Âx‰Ê“ܦ“ßÔµoƒäPÙa‡vÚrR!š>ÅŸ0‚LÄ)ùoI€®ƒ‘ˆh§y}¤.ÂáWñ5
+•ÒƒDFñÏI£(<ƒëµ¨ ^ÏxÖË»âöAƒ†RAQ¢™VôÒ›D®§]Âç.}^ª`’ÌÑT$á¡ËcDÁÂÓ53¦ ,y¨K(NIPQY"Ïïñ¾ìè’ XUgS„5U^lĬß“Ó€°ˆˆ"ýD&©JaȬ[ÑŠéöTd®À’ËàŸÏ&Ü”bê=åº0ð&SxÆôÝÓÔÆ=£†xòå@9­šÁò®þ"“!Fx(§¶g_
+¦E YøãÇû• gœª†=i
+Ðο¨ ;FN7.›2xÈà0@Æîó‹ ;O–"¶–2ë€hHó+ÏË2…ðÇ´©|2I@¦D÷DÐW¯èQg?c­\0ƒFy®âpUh]\˜«ÔoCˆXïîÙƒZŒØ‹Ó¼““`ÂWfö‚'ÿÚaÎËÕòœfîé˜B#ú•–±Ë«/oߥR’§7-h(“#ò>8ýP¹Ìupåv‚£yþqÈ Œ
+BíöÀt€” ÷© %
+”Çé¤Cñ¾Ví»ÇOœ÷x”᪷£q·“ø¦~D­3Ñ"ц¯™Ñ Gá«ó l¶tÝ)Ü+¯™¥É L±°­œkå‡B*4e£§bøó¶»*$ ÿ¸Ðcç¯2>”—Ísš3éŠ_;7:Ûͨ,$ð÷ßcscÒ¢ÀÐpìáå' ¹%ÊvEcüÕQøhBç+Ŧ†3m…®>'a•„Y'Ï_Í|b_Ån°xnÍ’C®DIÄoü¾E•}8à„šNÀž¬yKŽ+$S¬Äç=4À^7ë£WýcD#-«BPSD™¿º ŸÊk…%a¨²>Á%'nkÂ2kèŠ{ï×ìBÄÄ*‡nðƒebö
+·£PkN!ö„§Zç;æ ‹(˜QãÒ’ËV“.œõá®å(£°A5Á!úÄG5[‡L¸c|{¢v¯!ÉQàÄ#zŠ‘²Px¶_ù¯jó“åã««u.r助ý€bEõ{+aoð‡#mð¢õ*Ýõ¡YR9‘ϱ¥“¦ ­…^‰×ù®ä7-q[ПhJG-ñ$Sè! ’ƒÛ/ï­8¿u­R0fŽ 8û€ ¢l/ù%p†Ù³»ò
+üØ ùEwƒioÏóD..,Ö¾ÕÃMj6T¡VÚ1aª¯±F×Ë6¹7¶:E †/›M«'ˆýŽ}myrÔGE>mž}o6ó¢†ÏY… VT9Yý? 8 ‘U#'^ä¹øŽ^ˆŸ¡„söÎÃ5¸ž.í>¡q`ûVž¦}_Ãd•©Xaü’ŽÂ}7Àè
+ËÆàÚ5ÒʨóÉ?†ûsuoÒK•PØpå}琉§0¦Lg«ŠV¿ƧçËàÍŒ½Õy¦œtèob ‡oû¥ tÒÚ“Ù™ Ëlôã
+¬6Y›ïá” àû¿Ï‹#Kµ:
+Õ0Yh¶lo‹‡¯“ðÖëÔ€]Ψ¦"õ wÔN²pÅfvÈ¢£פßé-¬dÛ#‡;•Žf0êÕS—ŠU¦ -"}±ÎHÁ2ß2Zªû¶-4¤4ÿÒ¹žù°…Lv.·î:$«RÕAŠ1sÏ Aƒ:’áo+ÉreÀKŸÙÌ¿k]àq­}¿¹>ëßÏ£ŽQJÜ «Ê>Ρð\4"AÁ¾ÊåÕ]^ªzæfý@š´Í칈°8wnz`«¬”y „&Q_° <¹û¨ôEÃ* Eùº«-èñZ@ÄϾ~ š
+{ÀFJœâ$4Âíñ¤YNßìDD®Ã$Ê$Ot~~ÈbЇOHEª•¥(¸yb¿’÷´¦³èMÊ,ÏR‰ƒsÈŬˆÒÚHÏ]t’[ÚAüÑç¸ù¬Áâ~çY–t—›_ŒËÛ\V÷ÃN€õ§¬÷i´ûÆÛîÓôÚÁAWßêƒó1 MèT½¶¦©UÍÔël©
+v~=^›åðDzÒ)§‡Ç™±èu@ýÆ8Féºé
+©Qª£ŠcÅH¦ÓN«\ÇÁ/O»rBbˆxhREÈŠH ‰æVOƒZ‰VÖòJžrL^@N(Sìûëi Jzª0êý¼$†yÓâ×a;2[},ÌÀÅúí ¼Us…Ù6éêÊÞxôèFe˽1ÆÜ—M| æZ­Vë‰0—ÅxáÂøs‚ÇÉñ%ÆÑ¿Ûï{wÅûƒ{Ófï¶Òø¿ˆéWçSf·Æóô!ñü{t×þS¸±x1½¯µ‘¹u¥tGd5ÍŠ&zÚý·s|ÍËéds‚ÖøI"N$[`UíÚiF¼N¹2å½ÅקQ;ĨH gIø¥|"“ˆ™£}æ‡Úåc*+ô<L=„ôZ0ËÝ)}´!Ò]ka‡_ÑTÎç~Ìü°L~³O@Ôoct„ÓðB•i³ül6¼\Q¿ãxp ¿su‰mákË3ƒ í•¥¿DÝpàÑ[L“xé­"Ñ%@ü‹’8Ê£pAqN6Ÿ¥þ(àYÅœ¼à³­«(ôe
+Ù= nëf8a’Fî|I·ÈÎç^DS³OUkÚBÖÛÕÌ„è^Üèï}±Yùé í6À
+ðË òá3«E0àÛÒ{†pÏ;HYÁ~gÃÂ}[Ö#9oeåŒÏ'_\ò©,ȯc'žäC÷¾Ò2o†bmZ¨”Û8ŸAy½ØùÖ€”2•Ç¸€Ïr A£ÃŠVƒÅœ.{œÑc‘·Bü0Û1Œ¡¹K¼Pµ¾uzXP8œw@÷ê˜xæGº
+Ã*Rj¯ù
+[ÕÎŒëÎ}…÷ÀjŸ_ŠšçÇ4¾$ÓWÒ9¿¼ ã»èØà¡døØà ¹ŒZˆ­º]Ž½S<Þé
+Ãü|àð¡<Ù)åDúr¹’Àî€ødõÞ&Ô¶R Ó½¦éŸ_bl7ß$O#›MCÁÐ ‚Iª“»ÿ«”Д(¾)Lû§À0ƒ½¿®:íe0’O†šb}€æÓÁo}Ó½0 `¿úïÖ¯¹AÞ29Dp6,|]Ù¸¦—IV{ÚÆ!ú*i}€‚fÇRƒ!<Î;BB.øSÅùÖ}\ÓÌæL5`œßôÆuÉ¡RÆm¨ “‰Z´n à «7HøÆë,òÂ+/Y®Ša¼™$Mµ4àPòúipÇÀ*kÙ£áa—+¸s±õå-GÕ1q¬²P¾ù$€•CI±‘Ä6àÔŽµä ä ±Wöx|ÑŽ"Kç+±c_øR¦k,yt¸çäìú«çD/¦®ç;ƒªç²?Vñ¡(Á(ndñÛ^ Z¡|æßñž ÆUÖte’×IetNk'·Ï–ž0÷÷S}”¬>FÐh¿JÌ'%εGA_A$8´_”ÀzúØs×D¬zKîÇn4G=EyØF†m–uZ¡nk:"ŒÅLóôc³¸¶zÄ`fƒÕm¹,R;j'2u3~Dlo¨þLG±aÔM¾2!KëR0+ëÃW¥^Í®¸n)…_#ÂÛ‰è´K$åVÊ;wVÀ…©0jŸØoäfŽã?±Ú]Êm""gyå–}X¶£e
+´»23ƒëˆb$‘íKÞ4­Ç]š›5¡`¹;¹z}öo¬áZ-æMïo _Lµ%Îœ<. î+·¦T1xÃ@Ùu¨ŠÏ°ÐS'£Á^Ovî‘÷Å5}t¾,ÒøʳžGûk*}Ƥ°ÍöÙF¸WסœZ 8aÉUý¤¾àÑèáè5sƒ"åÅ—ƒ­Ý6®;ÊòÜø½.QÖ5üýQc=÷¨¼ KÞ=K;’<ò·H«å»×ë· g+qkຓ(–þ(e‰ñ l«§ç¹´ÞY
+N-ç²wƒœ)@PMx˜ÉËm¶Ûê™f GÊÝQ±ÒtS¯¸b4ÿ²½+Æá| —2<·ì–*u””‚ QÉ™bý³¦Þºñ¶(~D™öºý1Éö…ϵ,> ±GKè/øÝ|qL·y0e,åßqù'^üfƒ·³Ì…Ö‘CLl.áá!¸7Þ+ ë‚xí«c«Sþ){D¶¸ Wî`¶Œ^¸ ¿ä`]"fw¼ÉD^ö]Ò9izüìŸCá÷i|•»b03":u˜¹yY›Ž“‚ºmÜaõjbYoδqò½ RʾJZîº÷ Éb—é™´âº(Ó¨7´¡¨¯+ú
+ôú÷BVk3:b2~]
+¢ck±ø1É7FvòöðqÆ^m㓸v$5Yåâ¹`}zH;Š~þ‰tù7' V%¾óùd¸Ù£&E؇F¹|c€•{™½®ynÙR…Ú¨dÎ G-‡ {õTÑçò»L¬Bè0‹ŒéÓuº7VýTMøÿLœxò•·³[¶Ø¹öu?èÈ°-I5þÉ{¹ïwô¶X« ÎQ¹F—œõÄ%:ÊMaP?ƒÒÑçÒ­hKµ^1Á"@e®š…äÖb’Tƒæ9‹L—3¤dó¾Go¬È³k¸¦ûžåÓÃÜʸ :=Ù¿ÐÝ:ªÔK1ª(éb¡¶<뎋 à*ê3b¨a§YÂR…FŽÒéظãŠÐ|… ˜âí­F
+Šq‘z”dÓ–ç”*P…ª£FÅ“,llOW¼;ñzBžTi£G’zCôL˜wA!å³Ép0ö´Ñ©ÒÍÇ¡½îÛS,pP£­#)<¨U¥åëÆ»WîùÕï²³xÜS Y1µ¢æ%*úô*R]W¾l½Öa´hÒ&È¡e­¤Ò`ïã¢Ù×xïþy(…Ž¢¨³A5…ldmHŠ8ýhu¦Dœf1õë¼qÿÕè5XH÷ÆYÛF9Û8JÁd”{«é§ÉPù NÝD)Çñ5ŽR×L»²:Ê¢¬¸ÂÔwÚJµ vÝ.º5ž¾?‡2H6~‰UŠK#†@wÜV7Ùi½Q— !ó#?@.…7Ñeé»n¯Í߃ïRx‚J…vΓ²£^‘~6Ò2Ù rCK
+!*t‚Æ”<ŒÉ¹¡Öa°½9¥H÷6‚göfw¥Þ-Û¿Ú#æ¶M­we Ú¿8Róp@źƒºÅ"A $¿(F· ½&]£^`,zÞ7׫±µtË^ÊPv“œ¦|½iJÚÝ…²–
+‡Åìø5ák0Që}?*X ãÆð[×é$yñÓ؆>Õ^Q5$‡0Æ¡md²Û’bÌR. “Á5?DÕÌþ¾©
+À³^höÇnçÀ."þ~ƒ¬Fú•ý¿WÞ…ddJ»*p=â^òݜ˓ŒÒ±º\nA†Q¾fN*è+ï€ú§i© ÃWøª(¿¥ôÐ.!û"œ"&Fˉæ`@Övþ3-Auɾ·šH}39$Û Ý7½È% ªŸ ·êý~Òü>ýòH”8 ÓTXâŒ+Ë!åG\¢ºûí‡MHØzºˆ¢÷-¾ªµ§ß¢X´%r ~­W­«3µó(Õñvö¾aü{ öÇl›Lý>§
+N› ½àãÁå~ =·“Ù1‚;?QÖ¨©’ÊÂf=îËèÑwþÄÁ{ÕÂÑ[ÅòÓÂ7þÕ]¾s‘
+ DÜX|,o&'OÉxY€‹ˆ@BÔ¢²OS¯ÆÂéú#‰‚Áë^A¦<;X^ît‰™N–­‹9l'¢b_‚×èëÔ»g¸¾1ôž»¡u9„óäTÆ"­4Ùˆa5â³#~õÀœß.À¾¶Ë+›;Wf+{¥ œAÊüF¸.ÆÃäIÈöûàFê,}Ø.E/ðZÿQz‘Ñ|_»”Ã’QöÇÙ“§xLX*Í1ϯ&¾%³·4•+Ÿ(Þiˆ ÒÖK³µUdEÐì§JxÞ:<©p‘Ð'&m­ø’„*Àö…dÍuGIoÈ.Êç[M˜žq´5b¢[09®µª»æšGgë'§0Ê ØgNE'Ýcžñ™'Ò©OÙ7d'±ø\üîf _²)‘À?vKqk„ ä  ñ-SºŽ{·CçBâ]4,HUOï£+È%ììxX¬Qžàm@A”ìÈÒ˜a¥zد҆éµòŠ0ˆs—”Ü\ù V”ßûLÊdH¡å¶‹uXbÖå—¢3=s”%uÀÛñ`¨¬÷uö[‹?Ô-[¶U™KÈZQªkW¢óù ›2tÊP]’€»w!oB*ÆX”-Leµ \€\WñÍùB/qãâk9†c{KµÏkñvcmcþáêiOG*°ˆß¹viQZ÷"eVÍØëþ½Ùkdû²ˆÐG-wñÙÑz0ÃCpp¨ŽƒIA©@ŒŽ‚ÝóáðÕ‰™r]¡@LˆÄwYáÖ;bˆ,Þ¬líÈ-¬¾ÔÓ((èžÚÇ>tN}´©ðT#ÕÞ ³Í£ð™„¹Ÿw¸§ãB };‹­ò›ÉÄ—TïFJEMB°ˆýäÏä&ô…·c˜noUÊ Ô9¬ÁÏ|ŽÕOMlwÃ$hÝËéÓ„ìîÞQ¤Î@¶YB8èç×tVbwl
+y{“Ž„by¥ñ
+endstream
+endobj
+514 0 obj
+<</Length1 1449
+/Length2 6631
+/Length3 0
+/Length 7609
+/Filter /FlateDecode
+>>stream
+xÚtT”kÛ.)ˆ„tËÐCwƒt§ä0 0Ä 14ˆ ‚4ˆtw#!% ÒŠ !%) þ£îýíç¬uΚµÞyï|î빯ëe¦×Ñç–³…Û@”á07‡O  ©©*àãàáããÇaf6€"œ!¹q˜ îP8Lü%(¸C@¤O„@æiÂa
+Á
+»Ù{RIÂFf¿ñ.FPDõ°Ëæ‹MÏ|‰žgŽ»e7YrŸBh… \³¬uGßo|¯¯= ^V;¥û9L|¯=¾JàPöõ£½‚c•v>šjç¾r|€á”þ (~šqŽÎÏ?Ž¾bn¸gc´•v
+DïY½ iåÓÁÌÖk¦{à|d—_Ë}jk‚¿âv¥RÉ°Ÿú¶Ïj’ü©Ý'ºì]Ž+Çs’ÊË—xo¢žZ·±9½ôýƆ‘`ªÒô­´1²Ó»TúÇÌ|IAŽXýçó‰T]ÖWÌ=–±&J£X+‰6ÐÝ^ÞŸÑø!ÿ’9¬+zdìLzÐ!Áõ¾@C²OÇ
+@6#Eý¨:|ìò5Ÿ4" ¿ô[·‰Ž^8ëtñ©äJOT¢TJ¾²Íþj…`v¦Ö€¿ê5
+`dF6ü]ÏWÜ4¶Ju9†³–$
+Óÿ8û*²OÒä³Ûõq+ç;4÷¡1u¿Vσ岟
+\Q¼LÄñtt‡N¸bÊBã}ÌÔrト|Žè
+)nú2Ó\늿!›»Zøù€s&®8.ªüi× þWKA¼·\äiã ¡Œi0úÆŽ…#nª
+Lµ¢ø"·ît#­TÍdÂaF²-š7.|’»´;Ú
+¦‰Yßå{²7ÏøÖ&=æʵÖÒ^ Ôñ‘Vê#Ö`É.‰ƒìŵ¾$ê篹'MŠ·A³Êô±a(‹82÷GòÌøéÞrrë< »þ±½§±$¦¼ùè=úšÑ§¸ó‚NÁ÷CÇ‚
+F¼&¿¨/þÐ͆BWy³úì6 ÖnwM9Þ½ìûž‘×ÍKËӌêû¨g£}¥Ü¯\ç}ïß —¼ÈÆ
+’aÅÚŠ±ïò›'s®+IŠ¸8Üáz³A=^ÏØR”Ñ*פ \™žbêò:ÌòÁžl,qѼÇl[Â4µ½Íüœᛩi…‡ok<)Ú¶?ê’ÅMù*Ä·W{,}Åë­Yc‰ª V5 &T{¦¶ß 9!øö‚…»Âdôf‰™¼î~ß2Ù~Š—3ã«ðQ惘zÑ‹¤<••N¹y‘Ì|‹è\$¡
+z~„‰S(îË¥Û{ÖÜÆ_^Zoc˜OÅ°¾¿ÛÙï _Snø8™nW+*ß2k·Ö·\ÌÆŽR_Πû⠳ͤ,E¿g¢¥N³°Ü‡uOº²¾À/¡:âÙ00Ÿ/ªp¨‚¬õg¬røCýmQNi²Š°wý5WDé9êô¸.Ö™¹Ëïªõf?ÏYMäéøõëŽ:m¬`¸Ý›Ñd7Bˆ:-·ÈvÎñêÌÕãs^ U† D-Öwóʈ|´’åŒuºr5ñ„ ¢3 ÃÈŒql¼2y
+¥ÙÖ° +p¦^ÜÃL~/-¢÷ÎÊŸ3 éX[Ö}6‡•Pòψ¨ohkM•áo¬{,\=p¢ñ¢’™ÛO‡6ü–ñ:…Q#
+¦+†Òö¾¼z‚öÎÜ¿®mW‘ÛU{H2n²-,ìS`úušŸƒº,†¸냃d÷xq[?Jø$çßöMB¨ü”5Ò|™_nÅj\ÚWi-f¿-$¿†aRbu¨Sœ1ît–_žÎZu‰Gâ?¶¬eÇ\Ó'$l~ÂXÚ çÀ^»#IUe>KC¹ižÏ’¸˜¢ïÕvvÇL­žª»½Æ
+Ø̪ź¥{ÁÔññ©
+¶âŸ©¯;Ûð–Ä‘™DJIZkÍäÍ á–/—Ò—£Ë/®û? ªEá÷Ÿ`]­ks/sBYœï!AñLóuãwa÷©)rÉf¸"7ê$¿\™M¬3ùÒä,–rÆ°³%bú¸ñ©ÿXÞî»]žœë@TF½Ad&%µ3<äE„òj'UÎx¿]üq‰¢á´Å 1¦{š÷ÆMxb Rfl5î˜w…c±ÔaôÑAŠ;/„íÆjÀ²,–NÜÚL¦è§|—á5ÖKnê½åÓ³™»û b*}n†üÇ—ÜÛ(ÀTpѳvÛCŦ”
+ïô.„¼Ô7•® FŸé¯Z¶.[j%Ü’ `o"n´™EŒý’NR÷ŸÖöÚ›ºµ‡nìoÅÇéwÓ¤4¬‘HÚ}Ü‚j·îKš¨Çið3ôK‹U3EeÓŠ:¬”øt/`à„£$„§\ÓJC!ïèœI <w%YæÙЩ¾H}@¹Ç uƒ**ÊÉ#@~û¶ÍržgWðÃ9¹uåæ+¿Ä§“Qk÷¨¢g.*–zÐý™†ˆ Ûž^—¤C7>ò2Ž… Œ7±HQ¹$ÜŸ0¨;_âÂÜ:Œ”ë))Ï RÈ&³Ì[sÄ»Þü¢¼f_wÔâo:|éÜ™õâõ^qí÷ÿq8¾k=ñ6ðmfš @#rw]¯
+t(»Þ`û~X‰&0ó…N”.‡ÓÜ ¸â¦{q°G5b—;¡/óÙþ‰Îä(&‚¡[r.'Y­Õ7yë=¥fÎ¥õRõéŒlügN¨MA=•ÛÛ;'_„FÕž‡I-A._˜U
+éÑ gÜ£
+Üô’f‚fR˜ÏWÜœ½ sÂJ{rs1}ÈÁ$s¦fÐ…³s5œ½£¯¨(üž’µtŸ÷V%#n¤õDW<è5- î7¾ÙïÍŠŸkkêâýXœR7l§ó‘;¡&çñÊj¾Îs›C…œ‹jú@s…±PV?ÍžL™}ìK§~s>M¢
+zÎF6Sž` G\™_Ø>>|‰û(æ'£‘‚¥+Žûäyä;}Ííµ.Ð÷‹KÑ~š~§t{™xœéùk†’‰¤7ñ&œI³vò°ÄÈ’äŸi:v˜¿ Ú˜ª\¬<Û…)Q¶Yìz”˜56-æ| Á®Óª^ù˜
+q\ãQü6BäYŒ÷€_[7tD™sêÖO³e,i¸„›Yì3tî&6÷¾Äß ;àØ'#iôåÃÛí
+üž¶»ï®TÑ‚ YÙþõKª¥’ø¾¦‹‰¾Í
+Š!K ñƳâLô=áF‡õ‹»ç Q—T².ýõž³š^ü(`IµýF¤ìá›­o%Nº*SZÄFí{ºW]± ƒaQÔ Í–Jµ@WZ× ‡ow99i
+É¡Ûúë]úŽW²b³éæŸìIND–RÕ"¯¤gÉ3¤©ÑŸà]€Òækgâdýæ12Ýfø?Ì_ÖƦtͤŠù;uó[sŸ wâ3<°ºé¯*¾KÅ7
+úñªUÎz" M:ÚSy×`§ §Jªn¡Dg†Â~þIÿtÒŠ>1ÝöûE ¦‡éúÖ;ÌO?QE´˜è4 jo™“öK»á¬¸­£º‹„X4ž×‡D©Ó*ÔÜ4ñùÝuä‚ÃÜa 1åÄÆ:²*ïN×E­È £¦’þƒÒ™ï
+§dš,íš »Rƒ~š2õÓ;Ùª¢ë1dVê6~£›Ž.*jç¸OžUô³
+¿Hÿ 8 GÄ-ºˆ§F–{h¡ÎŽžWþ ŒŠ‚òg+œ ?³Þ£ðº0'¨ð°û!{Ê·¦´Š˜âÓ»\ÞÍ(!ªOÂ=AO9Âï Z9í„ìT
+'ôÏu}øXt?›Ìæ%zƒ%÷@¥SÌ׌Š˜OŸ„ µ˜Ì 4ÜZªï…,cO’%x¬åéoÀ<”…æ( 9Èx6ùU¥Î\[­²è¯—ëöE{cq1¾EvÙ8?'«~è$êëÜHm@«F
+’£k{ýæ­ásÔÐE÷™–»2ѯŸ ˜öªC?ï0Jà´P¢×lšæP•Á$ÂÁEÖݱ¤ýèöqWß9¨7™ÝJ«—FïµTÓûPÝÞÆ õK$Ÿ×{¤¯,³÷Iy¸OYkBu/cIœvÈO_FŽþl­lýÖÃÎ_f¥L^µ(Ã<}íL[»¶ºIÞOÕß>¤[°®HÁÑIëd'‰@*TÂÓ®yëŒE7¯Õ¤½Î²Á“S"C-êɔܶTD‰³æª;õ­»ùÜðrùôî
+®×”ïúóšâG^u«K¦1Z$fÙðPXMS¦7·}¡Î C»Ë{%BTâ~•/’gïhaS˜›aýOì»ûñ ½¬ˆ(\ÆÙTö̵ˆë¦òÓ6ïú¶ÞàɘÎ-W›öëÕ±l»‹DYË—=…ùoè=z?:E6ß—AÐ6§‹žü#¶“pÐJÞ±‘ç³fΤP
+ÉçÛv#öC¥œÂ K†Ö¼ã+øåc)í+ “ʼn•^~•DÚhS¥„÷†ðxçÊ^5[¨/0V¸xÊÑÒLr7¤|sŠ³wŠì-zàk…á+ž^â “é²ê€7;·xÉQöƒC†òæѱ­ÇL¤Å²|WijÔC8•ísüÏsß~½Ã)=s2,\?'rÖ:oïbr§WxV£C*·y_âì9¡fÿ¢çn€T¶„…š$ý…³FÚ²_í¡
+YOÝÍ߸‰Â
+endstream
+endobj
+515 0 obj
+<</Length1 1451
+/Length2 6241
+/Length3 0
+/Length 7230
+/Filter /FlateDecode
+>>stream
+xÚxT“ÛÒ6"½J5 ½é½÷ÞAJHB$ôÞ‹Hï Ò‹€é(Uz©‚¥ " E¾èñÜ{Ïýÿµ¾oe­äÝ3ÏÌìgÏ3;YaeÒ7âU
+®(è
+0v‚"ÿr!PÞ@
+Ú£¿·¨*
+_P
+†øü–8€ŸŽ@¡C
+ø]=a(¨:ÚñÛ&òÀ‡8þ¾ ‘0 Òé_AA4Þþݯ_Æìäéá×ߢAoôïõï»ñ€ðÞ#@RÎ/#:Îëè¼y?ᬮuÅ&YôLj Øæžù;iãæ¨M»+ÚkîdêÏWDM½ ã:8÷yô&/t%C½
+å=5ëR L‹¦+“? •Ú†)ÂM ™K^mù_RäzÒîK¥åÕËŒ,ËòD l”Uu=b®úÑœžC=e¸ÛËP)}¾;Ï@Ù Ÿ†hFÞ–'j$¸Ó…Œê‰½lKAã\ß³²!Û{!‡¼¬1¤îçÂ:÷¹LbŒ
+ýb4l¢¯Ñàà¯5^1†¤$8³¨í(Üçÿâõ&qª°õrž±E›U¯P~/[=<*•LzEŸ=AóùÈR°Wò,Ï
+9°+û®¬×Ù¾˜y!o bO­‡ÓŠ¹³‡Ó|¾¥sõÐEO†zÿg•ü{@Jù2Œçƒ>Båñ
+õgÌwÙ\DbxîXV‹L8_Î.^ÏoÏ<B´‡Ù̱¼b‹ÿt|dM*KOÜ|…le‹ˆxß´¾nÙÃdü©/HxŒ¹V}°0Ù°FÚiÄ\(•¸~åiƒa‹¯ r”-ª(CºTä_Ê6ÞÀ«ÉN¬Ÿè`Žœ:« ·æÇã ô™’/˜Éà~LŸ%ºu]Ž»Á‡–6g>ÎúWêV„a|ubEþ¨Ü9Ì`´Î­éS…m~ª6]Ü ïVäXŸlËÍò`îÙ£
+a©YN$¢É7z1^=¶e8†;£ IF
+roá“ÛêŒÆ_ÛñÊ7à
+™â\Ó±ŸäMÔOžV ŒÊ‡Š‰ÁrêÍ)±É9Â-Â#ûÎ\tÍš,^ï«ÎKo+6dì¸4,õâ®îs,ÎNØͳ’`*\]qhLj'Þ¸†#fÞ~©xHcð©²&¢Ð÷)y@jâ¢×}²¯ÜAIÅŒ}i*M „w/°RtöæøkN¨öPó‘XWꜨ}¥Æ/݃-f5Ñ@‚Ò/„¸ùÖM‚…
+ÔI¯ãÓ¸¶ê86[Mg¿­Æ©•WÃÄ´èÌ(üV<
+l÷e.Õ˜ýÙ+ŽD™ë
+jKîÏŠº]†`àÚÏ”ˆð˜˜Õx\ˆp®5Ù×:%÷q.lã»Ãƒ3vÎm/X÷þå7‚^\˜²öWK,áгf}^8â¤ã¨“]zÒ¢sÂûEÿœ(¾@,4žKEäA&8ú[1"!ÃßZ©R–å'–ê?G¦É®çˆ6Œ™ÛÎqïxu/C÷ÇJÆjGâ‰ýZÞŽž¸åq Ú…ñ½‹y:Þ³WO mtòöæêÜ•'´f¥øÂÇ\j—Ô^aûÂà”>˜vÓíõiã0..2SÄ—Ï<<‹~zìç·ÏôEÆ…û¥§`A­‚"—ªªÑ8çÁUExtp?êJµ k÷Ýc_%î+Ì vXý"fîi¾l7/¦-êFiø
+ôu=çÞyÛo•ú ˜!\ùÊ»°7·ZU®ªòïõ+Y^_=ôfÀãp1øÝbÒi,‰p®Zº/æ’ß»¶d;r$¹ÆV´0ÇžPöJ¤°Sœ¥¸ü)Û¢ïpN.*¤8öÖiq톚kõ`.™6³û-X*0,rÞœNÜm˜5îH#íÍNZÒ_%ÒÜûz´c£ -¿¶*=”DJ?]nêaúF±b}‹‘ñ
+ÓÁÂeë”;ÝŠŒ¦'A,‡*EmTIÎ2ø­å
+/jIÚ•°Í2äFŽ/…ŸžfºÝ‡Ô>K5øœ‹m¿VNÉïv|«éø½qª{—ê”8¶íÏYÒ”nø¹Á;Ü›"W­6?)éÙî|œP×£ +¨ØèUã^Þóoì\T×îæ!Æ·àG(iºÙx—#~<¹
+!WÎü‘ ‡“ÖÚýôµõ¢sßµv¬‹þ•t$eLŒyülÈUŸÖ‡-Å*îêYÇ_UV¿Z¡¦õ´èŸ<g¹`y)CAû1l.On,/ â$±®¤Í Ú¥ŸÅ`åÒ T§ï¥ÍÞ)É—R?_˺=äáÖIS'Há|] JJKÒŠD2 Ò÷ÕØÏÖ•e´¹qb×pžâü̳½ŸCZÄY?ËÑz‘[ÒtWG§ ¿©!‚Ð}À‹­¹vøLiõ“°.F³¶%²ÁÛXßÓ?™
+ÙÑ6Qw®Ÿÿ˜›÷iME¡ÉãÌzÕï&çúÌíZãQQÜUÓ]1r9*ŽôS<(˜Ž.G»QÊÑWâ ‡…oR<ÌîÅ÷)»YÊ­Ï
+“xê’/ž­Y¨3Ø ¦6­·«ú·x‡ÚXLåÐñà?cQ-—¡®¼pdJ+çv„ë;•ÙJ¡¿Âª*ÓÖ38 sºpZ¨¦5¯ïÔ¤ÛhÕ‚­1l»¢„whLå·2ípgëŽôLFZüUè-»‡èoeÁ÷šì×kXì ïà‡á.?*!]×rq(#<5Å„Ÿ“ì6y­ívŸk-™ùçé̬ËÍ%>©Ð9²þ!iF#EAêu?)’$ë¶ùºÔíÅû)wbËÌÉùô×4¤ä
+˜Œ‹c
+ ü6Qÿ¶Ÿk=nÝo€9jv/Ro>™6Æ•ˆ/þyBÍáC«.êÉ,„®´óƒÏx?Ùöú:kÈç‰^KÞ'>Œ|¤üôžCr’X/wµAn™ýQ+Æ1»¢»¸§b‹˜\>>ϸ: 0Ë<efÐ
+°3Ð
+üXôvãÈS9*/5–(ð˜-äºO\‚ïú}Yû–=­—"ˆ;X¥›[Ž`H¤4† &qbÞª/; w<¹£¡º%)׃J›OÂ12Ñ 9 )¹Z•|¬Ò“ u1»p))ªèÄ1¯eyÀPJ•GLÙ#mRörNwI\v^BÎ “DËd? £ý–1…b7OSJp«ˆÕênâàeƒãÅýû­â][ŸòGÓÜøF’ß>—@Y¦õ¢yl…c‘qúó¾7Âüd'›)[¥Oÿ©˜ªâÞDŸ³>±ÄúQ sîÇTŸ§ñãý ú 'RŠ6‰z©Â?º¹ï
+7„{ÂÛ±X^­j íÞØêá@~ڽÿŸÅòzÕ.,W‚Ò€¿¯ä“N$$_nþÍàÐît]Ó-F’/N›XÖq¥ö‡Ýw®wÚw«lw…¤§ÎÇ2¸±I¾ è{*ë¬&òêch4 Vèɳê$k„­ì¢J›æ½p£fѶòÛoLõ阪R ˆÜŒs»h|2“uȬx ™<ïk>FE7WÝ´:WF•ö0—5~>9Hz_08dE9£çT€™`AFÙÀ9s¡\ý™ú€5W=åOµÏxÀ ²é³_¢ž/­ªEº±={lß©ìn«¥èä½H Wž•)'#^3K²D"¬qÍ{ì¯êΆeÊ7—½u?=m
+ܪåa£w,/ .§”´OŠŽ“[¨|²¼ï|ì*eˆTmYɽÍFı©’*;Ð,e‡MÜOàuÉz~±ÖØjôÇúk3ŽY-Ó„ÖùÉjN„oÜ!ÊËgVÒlLåiékKñÒÌœZùÜž{ë^”õ<¬Öç#»¨÷ц¨ùK%’ne-F=\š7ѹŽòÞÖ¥¦Ù#=V»ÁA{ñ‚ª?vmˆ„½ªï ®ëåzM×Ò7 Ýò"À÷»ødܲr1"°ðÂþÁiî-«\?߉”Ylˆ`õ’ˬH&ØPá‹G¤¼’Ìm_3ÙîØMÙ‹äÚ-_ùÏý7­&kx¿ÿRèU—ùgJû*Ú‹UÀ˜Ø|ÛoËWD¿ûšŽÇ .Ä^êôÜÜ}„Ñ3†ù™9+øŒÝó`8€’IvIøR ñ uoÇs›Ùi÷8g³yý_é%¶Ö齿"1,ïi$öy»½‡w?Æ ïÄ[Ñq2y½ãÚèº=?—y®–kxê'ÕZŸ¥á;ûHeîö›‘ÝX7r‚Wò8ò=¶×Ï„Ó³`½Ã±(£³Ï}¬ ¡ûœÛün†ƒç+ ¯+™ï 5yâg©@RDιûêe–Gì´xõ­eß³>nÙǼ¤=9¬3‚‘8÷Ÿ’hhýp½h0HVBÖƒXùȵüéRÆEl]mœQ©ìâòl@L…¦Iet¨äœ¼¡š AÓÅ’Ó´& BS-²C‚1soS™‰» ÌÚž…ë]ŸJ~È¥çwÙÆj9v¥UY°]­.ÏÏO'~Ù•Ù#K³¸—Ýxzþöp—GA>¬±ª—Ο'w5—½Fh Dò5êrm½4nk
+©zAßÌ–ñ¶Já©F¯ iýù Ü×Û'—æ ¼¿C¤»ïIé ï»)9VïÓŸYçFd·i,ì¤,Û-_NõFºW.•x¹w¸K¼m7&ÍË<NïcÖmÌ„5ªfKÜ6^Ù·*1œxùz^u@8Ü÷¶”K¬!ÄaX)_¤ó¨À\0FFËâ*V­½8µÄè(ÌÊ¥ñ¥çȯã/î)ŽÆPœ¼Õ¹µ=®ÛPG>¹ ê1ŸŠX9"µzÄhöãÏOƒÖ»ê­õ1º8½ü Mfoî%H•dˆ6€~Ë]xM4bõ0U^èŽ §(wðâ‹pá.°‹6½
+fêɒѽ%‰íÌí&óè™bùž}só‘ȉðÏ¥Ûßh&Ñ|"™)]ÆÏæ)’g¹“ÒQðcïc-æ’1À<xh¯|‘óÕWÚ¥ä]}ª±Ú±ypÉA*¯Á<ø›f}¼s2Š®Œßi&wº¥°9úCûÛ¤[h[¡šFÖ†G eÏ™¦ö f {ä´ûëk¾ïâ1R±¼½-?°Xø´¢d‡^øߧMçð¾ ™8øÒÙ[Q Š+¤%{té9°[âoæ¨d\«îºZ0ëñ³à;©œ§;\K)Knt}ÇÆM|9“xRÐñ±ZôÙNç|ªnÅ·äg5%ä%û9K
+68x?3Ï¸b®/ßô™¼±Þ¥ÐðÔfIÉÈñä•[lnXϱ/K¾€^SÔôµúª.ó’fmΗ=žº¦3Ó˜ÔyÙ.0·ø?!¸:
+endstream
+endobj
+516 0 obj
+<</Length1 1459
+/Length2 6700
+/Length3 0
+/Length 7682
+/Filter /FlateDecode
+>>stream
+xÚwT”íÖ6RR" "Í€ÀK3CK·4Ò 9Ì 0Ô 3# ‚tJw)©t‡¤¤‚ !(„„J·À7Æ{ÎyÏÿ¯õ}kÖšyöÞ×®{_û^Ïp°>0àW€"laªW ?H
+C“p(!^(¸½›çïG
+¹ÂÝÁÔ•ÿ`°*’ëìa€(PB\XB
+÷„AÀ1‡ßdú{ØÎpWØþóâÁzÿeÃîÄ {¹ ±3ûm£±‹ˆù5ÞŸ2 »jÿ¬CÅ‚€þÜI!Q1
+v¬ n=©R`ðà_–&ØN;1â.°"ÂôªŒY/%dgMk¾TýÔRµrìÐQt;É™ŸÚ÷Y©e©ó9âgQ]·g±›¼:º6‘èsÌÈ6y³ ç™IŠ"³d1ªçSE'±Ô¾×€ã¦ï_5Ý=8©KTÅ5BZuÚ;«J²´hïý¬i¶0\= ý+÷³ËÓ åh‹ˆT 6MéöS’JŠÅþ·³”=L]QîOVwØC1”*RŒÊ"×+gŸ“ÿÈ-vßÊ ò±½K~ Ú[ºÀrR£³ç°²·eÉÊ•Ô)î`“d úê}ÊD‰œ¥VLCåå¯EBgrÂXðûeÑÆÝépµ×ó埙œ4ÂB4½¦'ºG<ÒLU7é æâÓN¹,[ùêWÏÑãnŠÛòWU
+åŠ
+/M÷¦Ÿ]Ðó>vçìÙ#® !s‰4‡VCÙ¢Ù{Á-¦”ÂÂ7ÜáiFä‚õ_ú¯šùx‹\>ßooWäœv«Œr¡Šö^¬õÍ(xv¶ |SI¯ŽVòöpY:ò­ô\²ÔêwAú•{·ºˆ~[œ¢ŒFHXr^lvDÇÐ
+´D°•Ï,÷„2—áÆAqJtòJÏiÞõ!Zq„IÜK£Ï¶¼/¶p3
+½ ^Î\O–µ®5`^å±àmÅQ}ÿºNÜIWê"?ÆCsgH}/nF¥·ÐDמ:e²+úf•Úr–¬FÈÌFdá]pñšBplœ9XÅјÀ'±
+2¬N6Öºõ2ÑôõÛ_NÝñnÀ\/pT„n„ËTxžî4œÔðo]3¯i¯¿ü lsážw‰tE‘i›¼Ì<ørËŒ³žž¶QU^#äýa7>¸'ŒDÚ@ ªwye›±‰“Û‚£¾E3ÊdÍý0}ÂF¡Bn€¹QhýúNiI>ê ¢W”¢ßSKù]‡BZdÃã‹^"¦÷úD
+­Mu>lï¤"âcׇ»L(›ã•ÇtÆ ýw*v"H Mg.$\¼?~ɇ¶ëH±­¤ûÓŽ&”´#ZRo7Ñ)Ý/"HÔyŸ[Û³à+мþ]Œ¢Saáx¢ßÆf¥ÝQR÷ÎÃÚ§W—FE<gb ÷×–§ã¥ßn®>ˆfGâ9–tömxtcBxá%óðŠ—9?&
+MÒnC ñ.ñÒ)ªµy辊ÃçºÜí @þ­Å
+›äìeù{Q¬i y­D°aª¥>†ôëMïŽÊ¿èyºŽ¤BùUFéWC¯ m?Ïuˆ®T6vühJj—-ýªéé&Ü]¸øÆSÌTž¹÷ÞwÔdŠ#˜?$³¦/_Ù’$°-dµˆª-”ÌåbR“-ƒ­O?š«ª<þØ?õ,ØÏÅ$kƒ·^{IaØmƒ¶õ‹Ë‰þtÑn’§¶ND·
+â¦æ,«†wßÔMPy]šêü=jÞÁâ¾íµ#0³DAF#;×üÞ€•‘ð­J·Œº‰Ãíå}%¶Ò+÷Ž¨¦CÇKJœ¹´Ü³ÙA¦ñÆ5Q´d»e?ƒ”šPEH[œsG] „šjåçAáñ+Œ(f“Šý(H/Øo+šœ8{át.¸ê³@¸1š„Èλüô]Þò×B‰û”ÈáÖ7[}Ú»’ãÉg®¯Ù![ ¢¬/rZ€É‘Ÿ§åCXSüW”‰ÇïJH‘=~¶WwµÆgʵڬ’±WÚy_8'wº¾5å}]*ÆÚ2±åý[¨–X!ˆùAÚ½¿.¦ôBü¾}lsÚéÉ›§Š2÷دïöoѲgò4ŠÅž 8 n²³ÀʤÖÉÆLzJ þÇ÷/*iKÃÄ8óò •†ÂOxU¤ñK7²ø¡¦ÊÒ¤rŠIäûk^– “Y³h!7—ï—r9 5ÎŽ¤| ›EžP„væ¾~Z¬ó|{‚b‘°Ýik±ºèÙ¥î "ÓT^h™`‰&túÝhù®þäü[¦Ð]ÅÝ…aøé—›½æÄU©$ .¼šôñâ°o$õo#Jßv„û¶š>˜È3nëåÚðžÝtñqo‹íÖÁðäíf@(p”Ó«‡èH­¥0Nóü™Ù›"LÅÅ ª%§Ûétd'sßjè¯á)èærU„¢ßØUspÍž#‡•gÔØ„8 Òø‘‘¤šÛþU¶Ë¬2Töõ6’R‰¸¶”¥¥j«zÞ6ž-|R_=BS3=oX8W¨³½ŸøNÇ ?Ò'4ñ£e
+E%:·,þA)ÖJI1o)j½ŠZf7j“²GåìVÎ%d9ב®cÈÖ\OÖ2}•+C‚RŽwI­bÒöÈ©oSÚ<ð7¸b‘Ñœ»’S9]ÓdÈÌä¬åÝÈGY° ³›OE zN"…Ûq¶>›=+s "¨çÁµÉC^+–'Iôõ÷"âxh2ÆÓ*…GÎNŶò®z¼ûCRúñÑ®9 B^#¡•4ÁŸü˜_­kn|Ô46 º[*A¿“ŒT‘l÷x›3J£¡"MÌí.ë–Q?܈(Öè·Ùy“dÊ­ï¹=Ÿ°‡×ãI,:*0íPr—¨EYn3÷p
+~C´Ï,H—¼¬nòÉxZGw•¼zÚ¹ðLL—(ÌQqzYB.D.ø˪2Á«œxFóØ/å¤O×]LŠ¬ï&ØF¯R|=¸)Õmo–wÃÁ`_pº_@#ÛÉ&<  Ϲæ%ßöæóøABÂÜ΄àÑSÌ(=©'iòþ!ï xöڈõ‰žô-È­Ðdx­vÆéƒh*Ô}–¢[u2AŠ¯ºyéI÷3/y’Êðg¹‡ãÿ¸?BíWeÖüÝ’>qP9ÂÏ ÇÝu1ž\à*ÓÊHY6±zqí5,#X}³ƒ¤jè§b¹Û*ül¡Ø€ƒ‘S»É+&ßL© ‰Øöt¹©(†—XÁã¶f>Éq€±<>‹8_El…ÉÙ&M(ry¢ýÖšÞÒ0<Ýÿ¯4÷J¦s9=/ÇÅ÷9KI»HÓ|ù« ZøÁu†ø”¹ß½ý()q³®´ÎèCÅ'
+Ëïó>ìÌUŒ®^ˆìØ”i"âá
+4/•ðw7ml±¯Ã9ùµËí–šÞ¶&óÆ¢®<Æç\Ž1W¶«<42¾˜h>ÈX"ªèܸ]U÷-mÜâSÖK:~ÆÂÃòT•.h/•¿¤{¦ö”ò±7B4h p¶´Z†G¡ò8ñü-g7õ“„}Å'µšä€usü–§ l”Èpžˆ»Á 3
+hŠ¥m I‘HLMãüXÆÐD×&”qlGD@דÝ3Áó ånì‰i]^Ù ½„æ}jëïÀZÖÀIÄw‘IÐÎÐ \²ŸÐ¤•w?U³¶µãǤ!¾Ç—h·0òv‡'b¨éÍ=­DNI³ÈžÖôxÀ²ýË‚z-¨ltD®æõÌòçÂ,¾èHJ<˧ùË£hÈHnž{eBß–cô|ݶ.)vc¹§ßŸ;X7¤ôE¿©‡è;A¶Á%_§ô.» í¼Fiû}Ò¦ÅDæþîF ö!â®rÔpƒ£goõ¿~—l!ÏðñXÉ×!Ñp‡Öõí_uÑG]6zò'ŸpÛì¾HÕÓëoØàúqýX$Q”6¹Öª8h>ø µöB%"œ‰Hô>Ü;}Uí’‹Ý—†ì—c7‘vÓ ¸®x—8í¢} ›Ð²‚æøoš=[TæZ$^MnÄuŠ ìÝòÑ…¿Û`5ÙZ$Ž;S¹ÝЧ޼-vÂw®nØÅs9ì•ù)ì{â5µ$¼yíÊâcIëÌ9³ðLµ{N²ù5…nÁûÝH"VeÉœ(JœnÜëÔ`ÚåLmÏÄ‹~6k­Ô39Æ×P*ž3É°Iඥ¸'××$iʼnVF|wQ¦ô ­ôal­¥–^(p›ç¤Aó[òo£¼,L€ñrüéú¥]ÝMü”g}Îo)¶ûF-üéôyo³»w#R” Ó§íCˆ.½O7óÖÁŒLâèš>nÈÎ÷ÛN rÞü®‹]涙'1wiúåi ùZ¥dpÇN)ª õE%E_®ço*?7ª7k‰”WûÏúZ9gžæ_RÛ®í+wµÖRRE=Þ6Ìî¨o¢ÿ¡´‘#-C¦\gßá·+ß&Wz¢#äªèîÚxÝÈÁ;¹A5ÂW–šÄO¥{í7¦ÓõO¨ÕÌ™ŽØäf'éÌà5›-´à¾U•#þ$<Uûí$RWïayùà©wß·¿x[Ï–ZÓuWÙ¤ï¦ÐÔÔH†–ô;{ØßlÓœ´¶ú¦ïÀç»yÀœ­eQYb"×Õ„—êÄéÔѽß^^­¹<÷žuC<”ýŠÐ±Ô¦WÄ¿OŽoÇìò,ZÀ˜ÎñGSñ#…s`+i€wûœí;ãÏ™‡âfœ
+å‚9ë»ðÊc‹{%×´,& #Ÿ˜osfì:êUæä6BƒÜõy9O4s ï„ÚäMcoO$qÊËë(bÓ>X‡
+ýHÃ_DŸ±Z‘SëÝ]¸6ÛÏ⻆_XSÍÁîÐó¹Òô,QêQê7ÇçŽÛ{ŸA·"GÔ;©Ìlql%: ýÌeóƒ„Ô"$ê>ØÛÙì¬ËøÆÝùÒªš¦õˆ\¶£±Wh_½ÿ-ïÀ-Nýî´¼lBÂ4ÄÂ%¯wè½S‘†ø°ß'´×ÙúÌ0æÿÍf~ã öÍ/Ñž+Qa*iÏ­µê$¯ï›—ÌHî¾uÔ-ñ~Æ;µÞ&¨=)&ffJTRÍòû@VZ0ËénÏ2rèL3É» Ç;
+"9êÙ1¤­!ô¯è³i¯
+üødû^‰ûÑ{èú×\6¹œÀ:tËÕ¿|yhÔHª4´„wp0eò üΈžÿ…#é&+ÒÍ„ ö¹n¨Tg‰ü¡º}ŸV0I,.e†ŒI@_w]9+ ·ÌÂg…as¾T¿9-‘1|ýÉ¥°O·ÖðgkÞÑÁ§ÒÈ­5{LùM=‘%¿ŒlL†îéûpŸ”ƒ2²Ø4w´¯ ÐÊ“²w¾ß³Ó8üÚ#;ļ=êò GzéMXc˜\æ9ΠNɶ>#
+Ëždãv);*Ó¨¸‚¢åv»V¿f5ˆ[ë:Ä]£ùròS¥ÄŽ]¹nS
+œõˆ¸ºç¯+²Sžƒ`ÜážÞ[ÒïÉç­[JÉñ(“{“­:…!à¬Eõ§ß \?ˆ_Rˆ%¸Â¢J"žÕb %¿¹ ¾ÞÀ¼üêSã–îÓDÅñäVŸõ7Õ-éèÿ_^è
+endstream
+endobj
+404 0 obj <<
+/Font << /F105 5 0 R /F111 6 0 R /F63 7 0 R >>
+/XObject << /Im3 402 0 R /Im4 403 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+521 0 obj <<
+/Length 27934
+>>
+stream
+BT
+/F105 9.96264 Tf 1.02 0 0 1 113.386 640.013 Tm [<00490050>]TJ
+1.03 0 0 1 124.056 640.013 Tm [<0053004A>]TJ
+1.02 0 0 1 130.633 640.013 Tm [<005B0050004F>]TJ
+1.03 0 0 1 145.917 640.013 Tm [<0055>]TJ
+1.02 0 0 1 149.591 640.013 Tm [<0042>]TJ
+1.03 0 0 1 154.204 640.013 Tm [<004D>]TJ
+1.02 0 0 1 159.011 640.013 Tm [<004E005000450046>]TJ
+1.03 0 0 1 184.391 640.013 Tm [<0055>]TJ
+1.02 0 0 1 188.065 640.013 Tm [<0050>-214<00480046>]TJ
+1.03 0 0 1 204.634 640.013 Tm [<0055>-212<0055>]TJ
+1.02 0 0 1 214.162 640.013 Tm [<0049>]TJ
+1.03 0 0 1 219.7 640.013 Tm [<004A>]TJ
+1.02 0 0 1 222.43 640.013 Tm [<004F00480054>]TJ
+1.03 0 0 1 239.091 640.013 Tm [<0053004A>]TJ
+1.02 0 0 1 245.668 640.013 Tm [<00480049>]TJ
+1.03 0 0 1 255.942 640.013 Tm [<0055000F>-284<0265>]TJ
+1.02 0 0 1 275.464 640.013 Tm [<0046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1.02 0 0 1 282.166 640.013 Tm [<0048>]TJ
+1.03 0 0 1 287.065 640.013 Tm [<0059>]TJ
+1.02 0 0 1 292.011 640.013 Tm [<0048>]TJ
+1.03 0 0 1 296.909 640.013 Tm [<0055005C0059>]TJ
+1.02 0 0 1 311.748 640.013 Tm [<0056>]TJ
+1.03 0 0 1 316.647 640.013 Tm [<0057>]TJ
+1.02 0 0 1 321.593 640.013 Tm [<00480053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1.02 0 0 1 333.57 640.013 Tm [<0042>]TJ
+1.03 0 0 1 338.184 640.013 Tm [<005500550053004A>]TJ
+1.02 0 0 1 352.109 640.013 Tm [<00430056>]TJ
+1.03 0 0 1 362.646 640.013 Tm [<0055>]TJ
+1.02 0 0 1 366.32 640.013 Tm [<0046>-214<004400500056>]TJ
+1.03 0 0 1 387.615 640.013 Tm [<004D>]TJ
+1.02 0 0 1 390.242 640.013 Tm [<0045>-214<0042>]TJ
+1.03 0 0 1 402.33 640.013 Tm [<004D>]TJ
+1.02 0 0 1 404.957 640.013 Tm [<00540050>-214<00490042>]TJ
+1.03 0 0 1 426.496 640.013 Tm [<0057>]TJ
+1.02 0 0 1 431.349 640.013 Tm [<0046>-214<004300460046004F>-215<0056005400460045>]TJ
+1.03 0 0 1 479.376 640.013 Tm [<000D>]TJ
+1.02 0 0 1 113.386 628.058 Tm [<00430056>]TJ
+1.03 0 0 1 123.924 628.058 Tm [<0055>]TJ
+1.02 0 0 1 130.27 628.058 Tm [<00440042>]TJ
+1.03 0 0 1 138.979 628.058 Tm [<0053>]TJ
+1.02 0 0 1 142.827 628.058 Tm [<0046>-263<0054004900500056>]TJ
+1.03 0 0 1 170.132 628.058 Tm [<004D>]TJ
+1.02 0 0 1 172.759 628.058 Tm [<0045>-263<00430046>]TJ
+1.03 0 0 1 193.094 628.058 Tm [<0055>]TJ
+1.02 0 0 1 196.767 628.058 Tm [<0042004C0046004F>]TJ
+1.03 0 0 1 219.317 628.058 Tm [<0055>]TJ
+1.02 0 0 1 222.991 628.058 Tm [<0050>-263<0046004F00540056>]TJ
+1.03 0 0 1 250.428 628.058 Tm [<0053>]TJ
+1.02 0 0 1 254.276 628.058 Tm [<0046>]TJ
+1.03 0 0 1 261.471 628.058 Tm [<0055>]TJ
+1.02 0 0 1 265.145 628.058 Tm [<00490042>]TJ
+1.03 0 0 1 275.296 628.058 Tm [<0055>]TJ
+1.02 0 0 1 281.643 628.058 Tm [<004F0050>]TJ
+1.03 0 0 1 295.118 628.058 Tm [<004D>]TJ
+1.02 0 0 1 297.745 628.058 Tm [<005000500051>-263<0050004400440056>]TJ
+1.03 0 0 1 334.673 628.058 Tm [<0053>]TJ
+1.02 0 0 1 338.521 628.058 Tm [<0054>]TJ
+1.03 0 0 1 342.596 628.058 Tm [<000D>]TJ
+1.02 0 0 1 347.904 628.058 Tm [<0043>]TJ
+1.03 0 0 1 353.076 628.058 Tm [<005A>]TJ
+1.02 0 0 1 360.49 628.058 Tm [<0044>]TJ
+1.03 0 0 1 364.585 628.058 Tm [<0053>]TJ
+1.02 0 0 1 368.433 628.058 Tm [<00460042>]TJ
+1.03 0 0 1 377.569 628.058 Tm [<0055004A>]TJ
+1.02 0 0 1 383.972 628.058 Tm [<004F0048>]TJ
+1.03 0 0 1 397.05 628.058 Tm [<0055>]TJ
+1.02 0 0 1 400.724 628.058 Tm [<0050>-263<004C>]TJ
+1.03 0 0 1 413.599 628.058 Tm [<004A>]TJ
+1.02 0 0 1 416.329 628.058 Tm [<004F00450054>-263<0050>]TJ
+1.03 0 0 1 439.173 628.058 Tm [<0047>]TJ
+1.02 0 0 1 445.274 628.058 Tm [<0054>]TJ
+1.03 0 0 1 449.348 628.058 Tm [<0055>]TJ
+1.02 0 0 1 453.022 628.058 Tm [<00460051>]TJ
+1.03 0 0 1 462.849 628.058 Tm [<000D>-272<0055>]TJ
+1.02 0 0 1 471.829 628.058 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 1 0 0 1 113.386 616.103 Tm [<0048005900480055005C00590056005700480053>]TJ
+0 g 0 G
+/F105 9.96264 Tf 1 0 0 1 163.601 616.103 Tm [<00500047>-220<0050004F0046>-220<004600590046004400560055004A004F0048>-220<005500490046>-220<00500055004900460053000F>]TJ
+1.025 0 0 1 133.311 604.148 Tm [<0265>]TJ
+1.015 0 0 1 143.676 604.148 Tm [<0046>-217<00490050>]TJ
+1.025 0 0 1 160.99 604.148 Tm [<0053004A>]TJ
+1.015 0 0 1 167.535 604.148 Tm [<005B0050004F>]TJ
+1.025 0 0 1 182.744 604.148 Tm [<0055>]TJ
+1.015 0 0 1 186.4 604.148 Tm [<0042>]TJ
+1.025 0 0 1 190.991 604.148 Tm [<004D>]TJ
+1.015 0 0 1 195.801 604.148 Tm [<0042004F0045>]TJ
+1.025 0 0 1 213.499 604.148 Tm [<0057>]TJ
+1.015 0 0 1 218.329 604.148 Tm [<0046>]TJ
+1.025 0 0 1 222.829 604.148 Tm [<00530055004A>]TJ
+1.015 0 0 1 233.031 604.148 Tm [<00440042>]TJ
+1.025 0 0 1 241.697 604.148 Tm [<004D>-215<004D004A>]TJ
+1.015 0 0 1 251.838 604.148 Tm [<004F00460054>-217<0042>]TJ
+1.025 0 0 1 272.822 604.148 Tm [<0053>]TJ
+1.015 0 0 1 276.651 604.148 Tm [<0046>-217<00420044>]TJ
+1.025 0 0 1 292.014 604.148 Tm [<0055>]TJ
+1.015 0 0 1 295.669 604.148 Tm [<00560042>]TJ
+1.025 0 0 1 305.599 604.148 Tm [<004D004D005A>]TJ
+1.015 0 0 1 317.742 604.148 Tm [<0042>]TJ
+1.025 0 0 1 322.333 604.148 Tm [<0053>]TJ
+1.015 0 0 1 326.162 604.148 Tm [<004600420054>-217<0058>]TJ
+1.025 0 0 1 348.38 604.148 Tm [<004A0055>]TJ
+1.015 0 0 1 354.752 604.148 Tm [<0049>-217<004F0050>-217<0058>]TJ
+1.025 0 0 1 382.281 604.148 Tm [<004A>]TJ
+1.015 0 0 1 384.998 604.148 Tm [<0045>]TJ
+1.025 0 0 1 390.266 604.148 Tm [<0055>]TJ
+1.015 0 0 1 393.922 604.148 Tm [<0049>-217<00430056>]TJ
+1.025 0 0 1 412.115 604.148 Tm [<0055>]TJ
+1.015 0 0 1 417.967 604.148 Tm [<0042>]TJ
+1.025 0 0 1 424.754 604.148 Tm [<00470053>]TJ
+1.015 0 0 1 431.994 604.148 Tm [<0042004E0046>]TJ
+1.025 0 0 1 451.492 604.148 Tm [<004A>]TJ
+1.015 0 0 1 454.209 604.148 Tm [<004F0045004600460045>]TJ
+1.025 0 0 1 479.388 604.148 Tm [<000D>]TJ
+1 0 0 1 113.386 592.193 Tm [<0044005300460042005500460045>-220<0058004A00550049001B>]TJ
+/F111 7.97011 Tf 1 0 0 1 113.386 568.282 Tm [<003F005600570055004C0051004A003F0056004800570044005500480044005E0059004F004C005100480003004B004F004C>-1<005100480060>]TJ
+1 0 0 1 113.386 556.327 Tm [<0003000300490055004400500048000300030020000300B5005A004C00470057004B00030020000300110014001800530057>-1<000F000300460052004F005200550003002000030045004F00440046004E00B5>]TJ
+1 0 0 1 113.386 532.417 Tm [<003F0056004800570044005500480044005E0059004F004C005100480060>]TJ
+1 0 0 1 113.386 520.462 Tm [<00030003004B0056004B004C00490057000300200003001600460050>]TJ
+1 0 0 1 113.386 508.506 Tm [<00030003005A004C00470057004B0003000300200003001300530057>]TJ
+1 0 0 1 113.386 484.596 Tm [<003F0056004800570044005500480044005E004B004F004C005100480060>]TJ
+1 0 0 1 113.386 472.641 Tm [<0003000300590056004B004C00490057000300200003001500460050>]TJ
+1 0 0 1 113.386 460.686 Tm [<00030003004B0048004C004A004B0057000300200003001300530057>]TJ
+/F105 9.96264 Tf 1.02 0 0 1 133.311 436.775 Tm [<003800490046004F>-214<0044>]TJ
+1.03 0 0 1 164.257 436.775 Tm [<004D004A>]TJ
+1.02 0 0 1 169.614 436.775 Tm [<0044004C00460045>]TJ
+1.03 0 0 1 188.596 436.775 Tm [<000D>-212<0055>]TJ
+1.02 0 0 1 196.964 436.775 Tm [<00490046>-214<0044>]TJ
+1.03 0 0 1 213.298 436.775 Tm [<004A0053>]TJ
+1.02 0 0 1 219.875 436.775 Tm [<0044>]TJ
+1.03 0 0 1 223.97 436.775 Tm [<004D>]TJ
+1.02 0 0 1 226.597 436.775 Tm [<0046>]TJ
+1.03 0 0 1 233.297 436.775 Tm [<0009>]TJ
+1.02 0 0 1 236.663 436.775 Tm [<0042>-214<0054>]TJ
+1.03 0 0 1 247.529 436.775 Tm [<005A>]TJ
+1.02 0 0 1 252.27 436.775 Tm [<004E00430050>]TJ
+1.03 0 0 1 270.826 436.775 Tm [<004D000A>]TJ
+1.02 0 0 1 278.996 436.775 Tm [<0058>]TJ
+1.03 0 0 1 285.906 436.775 Tm [<004A0055>]TJ
+1.02 0 0 1 292.309 436.775 Tm [<0049>]TJ
+1.03 0 0 1 300.025 436.775 Tm [<0055>]TJ
+1.02 0 0 1 303.699 436.775 Tm [<00490046>-214<0054>]TJ
+1.03 0 0 1 320.012 436.775 Tm [<004D004A>]TJ
+1.02 0 0 1 325.368 436.775 Tm [<00450046>-214<004F0056004E00430046>]TJ
+1.03 0 0 1 366.344 436.775 Tm [<0053>-212<004A>]TJ
+1.02 0 0 1 375.099 436.775 Tm [<004F>]TJ
+1.03 0 0 1 382.948 436.775 Tm [<0055>]TJ
+1.02 0 0 1 386.621 436.775 Tm [<00490046>-214<00430050>]TJ
+1.03 0 0 1 409.163 436.775 Tm [<00550055>]TJ
+1.02 0 0 1 416.511 436.775 Tm [<0050004E>]TJ
+1.03 0 0 1 432.072 436.775 Tm [<0053004A>]TJ
+1.02 0 0 1 438.649 436.775 Tm [<00480049>]TJ
+1.03 0 0 1 448.923 436.775 Tm [<0055>]TJ
+1.02 0 0 1 454.774 436.775 Tm [<00440050>]TJ
+1.03 0 0 1 464.001 436.775 Tm [<0053>]TJ
+1.02 0 0 1 467.849 436.775 Tm [<004F0046>]TJ
+1.03 0 0 1 478.042 436.775 Tm [<0053>]TJ
+1.02 0 0 1 113.386 424.82 Tm [<0045>]TJ
+1.025 0 0 1 118.68 424.82 Tm [<004A>]TJ
+1.02 0 0 1 121.396 424.82 Tm [<00540051>]TJ
+1.025 0 0 1 130.776 424.82 Tm [<004D>]TJ
+1.02 0 0 1 133.39 424.82 Tm [<0042>]TJ
+1.025 0 0 1 138.004 424.82 Tm [<005A>]TJ
+1.02 0 0 1 142.721 424.82 Tm [<0054>]TJ
+1.025 0 0 1 148.955 424.82 Tm [<0055>]TJ
+1.02 0 0 1 152.611 424.82 Tm [<00490046>-212<004300500050004C004E0042>]TJ
+1.025 0 0 1 198.202 424.82 Tm [<0053>]TJ
+1.02 0 0 1 202.031 424.82 Tm [<004C0054>]TJ
+1.025 0 0 1 213.336 424.82 Tm [<004A>]TJ
+1.02 0 0 1 216.052 424.82 Tm [<004F>-212<0042>-212<005100500051>]TJ
+1.025 0 0 1 246.395 424.82 Tm [<000E>]TJ
+1.02 0 0 1 249.611 424.82 Tm [<00560051>-212<004E0046004F0056>]TJ
+1.025 0 0 1 286.25 424.82 Tm [<000F>]TJ
+1.015 0 0 1 291.663 424.82 Tm [<0022>]TJ
+1.02 0 0 1 297.791 424.82 Tm [<004F0045>]TJ
+1.025 0 0 1 310.914 424.82 Tm [<0055>]TJ
+1.02 0 0 1 314.57 424.82 Tm [<00490046>-212<004E0042>]TJ
+1.025 0 0 1 339.654 424.82 Tm [<0055>]TJ
+1.02 0 0 1 343.31 424.82 Tm [<00490054>]TJ
+1.025 0 0 1 355.082 424.82 Tm [<004A>]TJ
+1.02 0 0 1 357.799 424.82 Tm [<004F>]TJ
+1.025 0 0 1 365.628 424.82 Tm [<0055>]TJ
+1.02 0 0 1 369.284 424.82 Tm [<00490046>-212<0043>]TJ
+1.025 0 0 1 386.675 424.82 Tm [<004D>]TJ
+1.02 0 0 1 389.289 424.82 Tm [<00420044004C004300500042>]TJ
+1.025 0 0 1 417.987 424.82 Tm [<0053>]TJ
+1.02 0 0 1 421.816 424.82 Tm [<004C>-212<0042>]TJ
+1.025 0 0 1 433.659 424.82 Tm [<0053>]TJ
+1.02 0 0 1 437.489 424.82 Tm [<0046>-212<0050>]TJ
+1.025 0 0 1 449.301 424.82 Tm [<0047>]TJ
+1.02 0 0 1 454.871 424.82 Tm [<004400500056>]TJ
+1.025 0 0 1 469.463 424.82 Tm [<0053>]TJ
+1.02 0 0 1 473.293 424.82 Tm [<00540046>]TJ
+1 0 0 1 113.386 412.865 Tm [<004A004F005400460053005500460045>-220<0058004A00550049>-220<0047005300460046>]TJ
+/F111 7.97011 Tf 1 0 0 1 187.876 412.865 Tm [<003F005300520056004C0057004C00520051>]TJ
+/F105 9.96264 Tf 1 0 0 1 231.097 412.865 Tm [<00080054000F>-293<02650046>-220<004F004600590055>-220<00510053004600540046004F005500420055004A0050004F>-220<004A0054>-220<0042004F>-220<0046004D004200430050005300420055004A0050004F>-220<0050004F>-220<00550049004A0054>-220<0050004F0046000F>]TJ
+ET
+q
+0.339745 0 0 0.339745 337.431 281.358 cm
+/Im5 Do
+Q
+BT
+/F111 7.97011 Tf 1.03 0 0 1 113.386 388.955 Tm [<002F>]TJ
+1.02 0 0 1 118.332 388.955 Tm [<00480046>]TJ
+1.03 0 0 1 128.129 388.955 Tm [<0057>]TJ
+1.02 0 0 1 133.075 388.955 Tm [<0058>]TJ
+1.03 0 0 1 137.974 388.955 Tm [<0055>]TJ
+1.02 0 0 1 142.92 388.955 Tm [<0048>]TJ
+1.03 0 0 1 147.818 388.955 Tm [<0055>]TJ
+1.015 0 0 1 152.765 388.955 Tm [<0027>]TJ
+1.02 0 0 1 157.639 388.955 Tm [<004800500052>]TJ
+1.03 0 0 1 172.334 388.955 Tm [<0010>]TJ
+1.02 0 0 1 177.28 388.955 Tm [<00250048004400500048>]TJ
+1.03 0 0 1 201.772 388.955 Tm [<0055>]TJ
+1.02 0 0 1 206.719 388.955 Tm [<0026004400500045>]TJ
+1.03 0 0 1 226.312 388.955 Tm [<0055004C>]TJ
+1.02 0 0 1 236.205 388.955 Tm [<0047004A004800380036>]TJ
+1.03 0 0 1 260.696 388.955 Tm [<0011>]TJ
+1.02 0 0 1 265.643 388.955 Tm [<00530047>]TJ
+1.03 0 0 1 275.44 388.955 Tm [<0049>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 282.688 388.955 Tm [<004A>]TJ
+1.02 0 0 1 285.418 388.955 Tm [<0054>-226<0042004F>]TJ
+1.03 0 0 1 304.38 388.955 Tm [<004A>]TJ
+1.02 0 0 1 307.11 388.955 Tm [<004E>]TJ
+1.03 0 0 1 315.361 388.955 Tm [<004A0055>]TJ
+1.02 0 0 1 321.765 388.955 Tm [<0042>]TJ
+1.03 0 0 1 326.378 388.955 Tm [<000E>]TJ
+1.03 0 0 1 113.386 377 Tm [<0055004A>]TJ
+1.02 0 0 1 119.789 377 Tm [<0050004F>]TJ
+1.03 0 0 1 133.772 377 Tm [<0009>]TJ
+1.02 0 0 1 137.137 377 Tm [<004F0050>]TJ
+1.03 0 0 1 147.939 377 Tm [<0055>-310<0055>]TJ
+1.02 0 0 1 158.467 377 Tm [<0046>]TJ
+1.03 0 0 1 162.989 377 Tm [<00530053004A>]TJ
+1.02 0 0 1 173.415 377 Tm [<0043>]TJ
+1.03 0 0 1 178.587 377 Tm [<004D005A>-310<0047>]TJ
+1.02 0 0 1 192.563 377 Tm [<0042>]TJ
+1.03 0 0 1 197.176 377 Tm [<004A0055>]TJ
+1.02 0 0 1 203.579 377 Tm [<0049>]TJ
+1.03 0 0 1 209.118 377 Tm [<0047>]TJ
+1.02 0 0 1 212.545 377 Tm [<0056>]TJ
+1.03 0 0 1 217.91 377 Tm [<004D000A>]TJ
+1.02 0 0 1 227.084 377 Tm [<0050>]TJ
+1.03 0 0 1 232.215 377 Tm [<0047>-310<0055>]TJ
+1.02 0 0 1 242.497 377 Tm [<00490046>-312<002300460042004E0046>]TJ
+1.03 0 0 1 283.479 377 Tm [<0053>]TJ
+1.02 0 0 1 290.508 377 Tm [<005100420044004C004200480046>]TJ
+1.03 0 0 1 323.463 377 Tm [<0008>]TJ
+1.02 0 0 1 325.536 377 Tm [<0054>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 113.386 365.044 Tm [<0026004400500045>]TJ
+0.98 0 0 1 132.307 365.044 Tm [<0055004C>]TJ
+0.985 0 0 1 141.719 365.044 Tm [<0047004A004800380036>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 167.576 365.044 Tm [<0055>]TJ
+0.985 0 0 1 171.071 365.044 Tm [<00490046004E0046>]TJ
+0.98 0 0 1 193.122 365.044 Tm [<000F>-303<002A0055>]TJ
+0.985 0 0 1 207.341 365.044 Tm [<0056005400460054>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.985 0 0 1 226.965 365.044 Tm [<0048>]TJ
+0.98 0 0 1 231.695 365.044 Tm [<0059>]TJ
+0.985 0 0 1 236.401 365.044 Tm [<0048>]TJ
+0.98 0 0 1 241.131 365.044 Tm [<0055005C>]TJ
+0.985 0 0 1 250.544 365.044 Tm [<0056>]TJ
+0.98 0 0 1 255.274 365.044 Tm [<004F004C>]TJ
+0.985 0 0 1 264.687 365.044 Tm [<00470048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.98 0 0 1 276.353 365.044 Tm [<0055>]TJ
+0.985 0 0 1 279.848 365.044 Tm [<0050>]TJ
+0.98 0 0 1 287.009 365.044 Tm [<0055005A>]TJ
+0.985 0 0 1 295.015 365.044 Tm [<0051004600540046>]TJ
+0.98 0 0 1 312.806 365.044 Tm [<0055>-225<0053>]TJ
+0.985 0 0 1 322.168 365.044 Tm [<0046>]TJ
+0.98 0 0 1 326.535 365.044 Tm [<000E>]TJ
+0.98 0 0 1 113.386 353.089 Tm [<00440056>]TJ
+0.97 0 0 1 122.476 353.089 Tm [<00530053>]TJ
+0.98 0 0 1 129.723 353.089 Tm [<0046004F>]TJ
+0.97 0 0 1 139.516 353.089 Tm [<0055>]TJ
+0.98 0 0 1 144.805 353.089 Tm [<004E0042>]TJ
+0.97 0 0 1 157.165 353.089 Tm [<0055>]TJ
+0.98 0 0 1 160.625 353.089 Tm [<0046>]TJ
+0.97 0 0 1 164.969 353.089 Tm [<0053004A>]TJ
+0.98 0 0 1 171.164 353.089 Tm [<0042>]TJ
+0.97 0 0 1 175.596 353.089 Tm [<004D000D>-196<004D004A>]TJ
+0.98 0 0 1 187.384 353.089 Tm [<004C0046>]TJ
+0.97 0 0 1 198.43 353.089 Tm [<0055>]TJ
+0.98 0 0 1 201.889 353.089 Tm [<00490046>-187<00450042>]TJ
+0.97 0 0 1 222.903 353.089 Tm [<0055>]TJ
+0.98 0 0 1 226.363 353.089 Tm [<0046>-187<0050>]TJ
+0.97 0 0 1 237.467 353.089 Tm [<0053>-189<0055>]TJ
+0.98 0 0 1 246.379 353.089 Tm [<00490046>-187<0054>]TJ
+0.97 0 0 1 261.789 353.089 Tm [<004D004A>]TJ
+0.98 0 0 1 266.834 353.089 Tm [<00450046>]TJ
+0.97 0 0 1 276.265 353.089 Tm [<0008>]TJ
+0.98 0 0 1 278.217 353.089 Tm [<0054>]TJ
+0.97 0 0 1 283.961 353.089 Tm [<0055004A0055004D>]TJ
+0.98 0 0 1 295.925 353.089 Tm [<0046>]TJ
+0.97 0 0 1 300.27 353.089 Tm [<000F>-289<002A0055>]TJ
+0.98 0 0 1 313.858 353.089 Tm [<0042>]TJ
+0.97 0 0 1 318.291 353.089 Tm [<004D>]TJ
+0.98 0 0 1 320.765 353.089 Tm [<00540050>]TJ
+1.02 0 0 1 113.386 341.134 Tm [<004E>]TJ
+1.03 0 0 1 121.637 341.134 Tm [<004A>]TJ
+1.02 0 0 1 124.367 341.134 Tm [<004E>]TJ
+1.03 0 0 1 132.618 341.134 Tm [<004A>]TJ
+1.02 0 0 1 135.348 341.134 Tm [<0044004C0054>-243<002300460042004E0046>]TJ
+1.03 0 0 1 178.801 341.134 Tm [<00530008>]TJ
+1.02 0 0 1 184.722 341.134 Tm [<0054>-243<0045>]TJ
+1.03 0 0 1 196.561 341.134 Tm [<004A>]TJ
+1.02 0 0 1 199.291 341.134 Tm [<00540051>]TJ
+1.03 0 0 1 208.67 341.134 Tm [<004D>]TJ
+1.02 0 0 1 211.297 341.134 Tm [<0042>]TJ
+1.03 0 0 1 215.91 341.134 Tm [<005A>]TJ
+1.02 0 0 1 223.121 341.134 Tm [<0050>]TJ
+1.03 0 0 1 228.253 341.134 Tm [<0047>-240<004A>]TJ
+1.02 0 0 1 236.88 341.134 Tm [<004F00420044>]TJ
+1.03 0 0 1 251.259 341.134 Tm [<0055004A0057>]TJ
+1.02 0 0 1 262.516 341.134 Tm [<0046>-243<0054>]TJ
+1.03 0 0 1 273.583 341.134 Tm [<0055>]TJ
+1.02 0 0 1 277.256 341.134 Tm [<004600510054>]TJ
+1.03 0 0 1 293.628 341.134 Tm [<004A>]TJ
+1.02 0 0 1 296.357 341.134 Tm [<004F>]TJ
+1.03 0 0 1 304.498 341.134 Tm [<00550053>]TJ
+1.02 0 0 1 312.019 341.134 Tm [<0042004F0054>]TJ
+1.03 0 0 1 326.378 341.134 Tm [<000E>]TJ
+1.02 0 0 1 113.386 329.179 Tm [<00510042>]TJ
+1.03 0 0 1 123.304 329.179 Tm [<0053>]TJ
+1.02 0 0 1 127.152 329.179 Tm [<0046004F>]TJ
+1.03 0 0 1 137.344 329.179 Tm [<0055>]TJ
+1.02 0 0 1 143.764 329.179 Tm [<00440050>]TJ
+1.03 0 0 1 152.991 329.179 Tm [<004D>]TJ
+1.02 0 0 1 155.618 329.179 Tm [<0050>]TJ
+1.03 0 0 1 160.749 329.179 Tm [<0053000F>-446<0265004A>]TJ
+1.02 0 0 1 184.841 329.179 Tm [<0054>]TJ
+1.03 0 0 1 191.661 329.179 Tm [<004A>]TJ
+1.02 0 0 1 194.391 329.179 Tm [<0054>-270<004F0050>]TJ
+1.03 0 0 1 214.759 329.179 Tm [<0047>]TJ
+1.02 0 0 1 218.187 329.179 Tm [<00460042>]TJ
+1.03 0 0 1 227.322 329.179 Tm [<0055>]TJ
+1.02 0 0 1 230.996 329.179 Tm [<0056>]TJ
+1.03 0 0 1 236.361 329.179 Tm [<0053>]TJ
+1.02 0 0 1 240.209 329.179 Tm [<0046>]TJ
+1.03 0 0 1 247.477 329.179 Tm [<004A>]TJ
+1.02 0 0 1 250.207 329.179 Tm [<004F>]TJ
+/F63 9.96264 Tf 1.03 0 0 1 258.623 329.179 Tm [<002D>]TJ
+1.02 0 0 1 263.887 329.179 Tm [<00460044>]TJ
+1.03 0 0 1 271.651 329.179 Tm [<0055>]TJ
+1.02 0 0 1 275.191 329.179 Tm [<0056>]TJ
+1.03 0 0 1 280.14 329.179 Tm [<0053>]TJ
+1.02 0 0 1 283.875 329.179 Tm [<0046>]TJ
+1.03 0 0 1 287.98 329.179 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 291.715 329.179 Tm [<000D>-281<0055>]TJ
+1.02 0 0 1 300.787 329.179 Tm [<00490050005600480049>]TJ
+1.03 0 0 1 327.096 329.179 Tm [<000D>]TJ
+0.985 0 0 1 113.386 317.224 Tm [<0042004F0045>-218<004E00560054>]TJ
+0.975 0 0 1 147.663 317.224 Tm [<0055>]TJ
+0.985 0 0 1 153.288 317.224 Tm [<00430046>-219<00450050004F0046>-218<0043>]TJ
+0.975 0 0 1 191.853 317.224 Tm [<005A>]TJ
+0.985 0 0 1 198.489 317.224 Tm [<00490042004F0045>-218<0058>]TJ
+0.975 0 0 1 227.702 317.224 Tm [<004A0055>]TJ
+0.985 0 0 1 233.763 317.224 Tm [<0049>-218<0050>]TJ
+0.975 0 0 1 246.215 317.224 Tm [<0057>]TJ
+0.985 0 0 1 250.81 317.224 Tm [<0046>]TJ
+0.975 0 0 1 255.177 317.224 Tm [<0053004D>]TJ
+0.985 0 0 1 261.306 317.224 Tm [<004200510051>]TJ
+0.975 0 0 1 276.006 317.224 Tm [<004A>]TJ
+0.985 0 0 1 278.59 317.224 Tm [<004F0048>-218<0046>]TJ
+0.975 0 0 1 295.154 317.224 Tm [<004D>]TJ
+0.985 0 0 1 297.64 317.224 Tm [<0046004E0046004F>]TJ
+0.975 0 0 1 319.818 317.224 Tm [<0055>]TJ
+0.985 0 0 1 323.296 317.224 Tm [<0054>]TJ
+0.975 0 0 1 327.231 317.224 Tm [<001C>]TJ
+0.995 0 0 1 113.386 305.269 Tm [<00580049>]TJ
+0.99 0 0 1 125.529 305.269 Tm [<004A>]TJ
+0.995 0 0 1 128.153 305.269 Tm [<00440049>-216<004E00460042004F0054>]TJ
+0.99 0 0 1 168.316 305.269 Tm [<004A00550008>]TJ
+0.995 0 0 1 176.463 305.269 Tm [<0054>-216<004300420054>]TJ
+0.99 0 0 1 196.108 305.269 Tm [<004A>]TJ
+0.995 0 0 1 198.732 305.269 Tm [<00440042>]TJ
+0.99 0 0 1 207.227 305.269 Tm [<004D004D005A>]TJ
+0.995 0 0 1 218.983 305.269 Tm [<0056004F0045005000420043>]TJ
+0.99 0 0 1 249.465 305.269 Tm [<004D>]TJ
+0.995 0 0 1 251.99 305.269 Tm [<0046>]TJ
+0.99 0 0 1 258.55 305.269 Tm [<0047>]TJ
+0.995 0 0 1 261.844 305.269 Tm [<0050>]TJ
+0.99 0 0 1 266.85 305.269 Tm [<0053>-217<0055>]TJ
+0.995 0 0 1 276.229 305.269 Tm [<00490046>-216<004E0042>]TJ
+0.99 0 0 1 300.742 305.269 Tm [<004A>]TJ
+0.995 0 0 1 303.365 305.269 Tm [<004F>]TJ
+0.99 0 0 1 311.046 305.269 Tm [<0055>]TJ
+0.995 0 0 1 314.577 305.269 Tm [<0046>]TJ
+0.99 0 0 1 318.988 305.269 Tm [<00590055000F>]TJ
+1.03 0 0 1 113.386 293.313 Tm [<0265>]TJ
+1.02 0 0 1 123.801 293.313 Tm [<0046>-261<0051>]TJ
+1.03 0 0 1 136.287 293.313 Tm [<0053>]TJ
+1.02 0 0 1 140.135 293.313 Tm [<004600540046004F>]TJ
+1.03 0 0 1 158.924 293.313 Tm [<0055>]TJ
+1.02 0 0 1 162.598 293.313 Tm [<0042>]TJ
+1.03 0 0 1 167.212 293.313 Tm [<0055004A>]TJ
+1.02 0 0 1 173.615 293.313 Tm [<0050004F>]TJ
+1.03 0 0 1 187.076 293.313 Tm [<004A>]TJ
+1.02 0 0 1 189.806 293.313 Tm [<0054>-261<0042>]TJ
+1.03 0 0 1 201.153 293.313 Tm [<004D>]TJ
+1.02 0 0 1 203.78 293.313 Tm [<00540050>-261<004900460042>]TJ
+1.03 0 0 1 230.32 293.313 Tm [<0057005A>]TJ
+1.02 0 0 1 242.574 293.313 Tm [<0050004F>-261<0054>]TJ
+1.03 0 0 1 260.11 293.313 Tm [<005A>]TJ
+1.02 0 0 1 264.851 293.313 Tm [<004E00430050>]TJ
+1.03 0 0 1 283.406 293.313 Tm [<004D>]TJ
+1.02 0 0 1 286.033 293.313 Tm [<0054>-261<004500460054>]TJ
+1.03 0 0 1 306.659 293.313 Tm [<004A>]TJ
+1.02 0 0 1 309.388 293.313 Tm [<0048004F00460045>]TJ
+0.98 0 0 1 113.386 281.358 Tm [<0058>]TJ
+0.97 0 0 1 120.025 281.358 Tm [<004A0055>]TJ
+0.98 0 0 1 126.055 281.358 Tm [<0049>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 133.369 281.358 Tm [<003F>]TJ
+0.98 0 0 1 138.027 281.358 Tm [<00510048005A0056>]TJ
+0.97 0 0 1 156.852 281.358 Tm [<005C>]TJ
+0.98 0 0 1 161.511 281.358 Tm [<005000450052>]TJ
+0.97 0 0 1 175.629 281.358 Tm [<004F>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 182.281 281.358 Tm [<0056005400460045>-204<00420054>-204<00430056>]TJ
+0.97 0 0 1 223.24 281.358 Tm [<00550055>]TJ
+0.98 0 0 1 230.16 281.358 Tm [<0050004F0054>]TJ
+0.97 0 0 1 244.453 281.358 Tm [<000D>]TJ
+0.98 0 0 1 248.853 281.358 Tm [<0042004F0045>-204<0056005400460054>-204<004300500050004C004E0042>]TJ
+0.97 0 0 1 317.2 281.358 Tm [<0053>]TJ
+0.98 0 0 1 320.823 281.358 Tm [<004C0054>]TJ
+1.02 0 0 1 113.386 269.403 Tm [<0042004F0045>-270<0042004F004400490050>]TJ
+1.03 0 0 1 156.765 269.403 Tm [<0053>]TJ
+1.02 0 0 1 160.613 269.403 Tm [<0054>]TJ
+1.03 0 0 1 167.439 269.403 Tm [<0047>]TJ
+1.02 0 0 1 170.867 269.403 Tm [<0050>]TJ
+1.03 0 0 1 175.998 269.403 Tm [<0053>]TJ
+1.02 0 0 1 182.598 269.403 Tm [<004F0042>]TJ
+1.03 0 0 1 192.882 269.403 Tm [<0057004A>]TJ
+1.02 0 0 1 200.465 269.403 Tm [<00480042>]TJ
+1.03 0 0 1 209.814 269.403 Tm [<0055004A>]TJ
+1.02 0 0 1 216.217 269.403 Tm [<0050004F>]TJ
+1.03 0 0 1 227.019 269.403 Tm [<000D>-281<004A>]TJ
+1.02 0 0 1 235.155 269.403 Tm [<004F0044>]TJ
+1.03 0 0 1 244.92 269.403 Tm [<004D>]TJ
+1.02 0 0 1 247.547 269.403 Tm [<00560045>]TJ
+1.03 0 0 1 258.207 269.403 Tm [<004A>]TJ
+1.02 0 0 1 260.937 269.403 Tm [<004F0048>-270<00430046>]TJ
+1.03 0 0 1 283.788 269.403 Tm [<0055>]TJ
+1.02 0 0 1 287.462 269.403 Tm [<005800460046004F>]TJ
+1.03 0 0 1 311.838 269.403 Tm [<0055>]TJ
+1.02 0 0 1 315.512 269.403 Tm [<00490046>-270<004E0042>]TJ
+1.03 0 0 1 341.189 269.403 Tm [<004A>]TJ
+1.02 0 0 1 343.918 269.403 Tm [<004F>]TJ
+1.03 0 0 1 352.34 269.403 Tm [<0055>]TJ
+1.02 0 0 1 356.014 269.403 Tm [<0046>]TJ
+1.03 0 0 1 360.536 269.403 Tm [<00590055>]TJ
+1.02 0 0 1 371.825 269.403 Tm [<0042004F0045>-270<0042005100510046004F0045>]TJ
+1.03 0 0 1 420.864 269.403 Tm [<004A>]TJ
+1.02 0 0 1 423.594 269.403 Tm [<004400460054>]TJ
+1.03 0 0 1 436.286 269.403 Tm [<000D>-281<0055>]TJ
+1.02 0 0 1 445.365 269.403 Tm [<00490042004F004C0054>]TJ
+1.03 0 0 1 473.084 269.403 Tm [<0055>]TJ
+1.02 0 0 1 476.758 269.403 Tm [<0050>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 113.386 257.448 Tm [<003F>]TJ
+0.99 0 0 1 118.116 257.448 Tm [<004A0052>]TJ
+0.985 0 0 1 127.625 257.448 Tm [<0057>]TJ
+0.99 0 0 1 132.355 257.448 Tm [<0052>]TJ
+0.995 0 0 1 137.109 257.448 Tm [<0024>]TJ
+/F105 9.96264 Tf 0.99 0 0 1 144.073 257.448 Tm [<0042004F0045>]TJ
+/F111 7.97011 Tf 0.985 0 0 1 161.379 257.448 Tm [<003F>]TJ
+0.99 0 0 1 166.109 257.448 Tm [<004A0052>]TJ
+0.985 0 0 1 175.617 257.448 Tm [<0057>]TJ
+0.99 0 0 1 180.348 257.448 Tm [<00520025>]TJ
+/F105 9.96264 Tf 0.985 0 0 1 189.856 257.448 Tm [<000F>-222<0265>]TJ
+0.99 0 0 1 204.406 257.448 Tm [<0046>]TJ
+0.985 0 0 1 210.981 257.448 Tm [<004D>]TJ
+0.99 0 0 1 213.493 257.448 Tm [<00420054>]TJ
+0.985 0 0 1 221.926 257.448 Tm [<0055>]TJ
+0.99 0 0 1 227.625 257.448 Tm [<0054>]TJ
+0.985 0 0 1 231.58 257.448 Tm [<004D004A>]TJ
+0.99 0 0 1 236.702 257.448 Tm [<00450046>-221<0045>]TJ
+0.985 0 0 1 253.554 257.448 Tm [<004A>]TJ
+0.99 0 0 1 256.164 257.448 Tm [<00540051>]TJ
+0.985 0 0 1 265.268 257.448 Tm [<004D>]TJ
+0.99 0 0 1 267.78 257.448 Tm [<0042>]TJ
+0.985 0 0 1 272.258 257.448 Tm [<005A>]TJ
+0.99 0 0 1 276.791 257.448 Tm [<0054>-221<005400440042>]TJ
+0.985 0 0 1 295.34 257.448 Tm [<004D>]TJ
+0.99 0 0 1 297.852 257.448 Tm [<00460045>-221<00440050004F>]TJ
+0.985 0 0 1 324.024 257.448 Tm [<0055>]TJ
+0.99 0 0 1 327.537 257.448 Tm [<0046004F>]TJ
+0.985 0 0 1 337.43 257.448 Tm [<0055000D>]TJ
+0.99 0 0 1 345.534 257.448 Tm [<0042004F0045>]TJ
+0.985 0 0 1 362.84 257.448 Tm [<00EB>]TJ
+0.99 0 0 1 368.345 257.448 Tm [<004F0042>]TJ
+0.985 0 0 1 378.326 257.448 Tm [<004D004D005A000D>-222<004A0047>-223<0055>]TJ
+0.99 0 0 1 404.062 257.448 Tm [<00490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 416.012 257.448 Tm [<0050005200470048>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 437.214 257.448 Tm [<0042>]TJ
+0.985 0 0 1 441.692 257.448 Tm [<005500550053004A>]TJ
+0.99 0 0 1 455.009 257.448 Tm [<00430056>]TJ
+0.985 0 0 1 465.237 257.448 Tm [<0055>]TJ
+0.99 0 0 1 468.75 257.448 Tm [<0046>]TJ
+0.985 0 0 1 475.324 257.448 Tm [<004A>]TJ
+0.99 0 0 1 477.935 257.448 Tm [<0054>]TJ
+0.985 0 0 1 113.386 245.493 Tm [<0055>]TJ
+0.99 0 0 1 116.899 245.493 Tm [<0056>]TJ
+0.985 0 0 1 122.107 245.493 Tm [<0053>]TJ
+0.99 0 0 1 125.787 245.493 Tm [<004F00460045>]TJ
+0.985 0 0 1 143.01 245.493 Tm [<0055>]TJ
+0.99 0 0 1 146.523 245.493 Tm [<0050>]TJ
+.8 0 0 rg .8 0 0 RG
+/F111 7.97011 Tf 0.99 0 0 1 153.696 245.493 Tm [<004B00440051004700520058>]TJ
+0.985 0 0 1 182.221 245.493 Tm [<0057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.985 0 0 1 186.951 245.493 Tm [<000D>]TJ
+0.99 0 0 1 191.548 245.493 Tm [<0042>-222<00490042004F004500500056>]TJ
+0.985 0 0 1 228.901 245.493 Tm [<0055>-223<004A>]TJ
+0.99 0 0 1 237.216 245.493 Tm [<0054>-222<0051>]TJ
+0.985 0 0 1 248.512 245.493 Tm [<0053>]TJ
+0.99 0 0 1 252.192 245.493 Tm [<005000450056004400460045>]TJ
+0.985 0 0 1 281.021 245.493 Tm [<000F>-297<0009>]TJ
+0.99 0 0 1 289.567 245.493 Tm [<00380049>]TJ
+0.985 0 0 1 303.622 245.493 Tm [<004A>]TJ
+0.99 0 0 1 306.232 245.493 Tm [<00440049>]TJ
+0.985 0 0 1 317.774 245.493 Tm [<004A>]TJ
+0.99 0 0 1 320.384 245.493 Tm [<0054>]TJ
+0.985 0 0 1 326.531 245.493 Tm [<00550053>]TJ
+0.99 0 0 1 333.724 245.493 Tm [<00560046>-222<0050>]TJ
+0.985 0 0 1 350.494 245.493 Tm [<0047>]TJ
+0.99 0 0 1 355.963 245.493 Tm [<0042>]TJ
+0.985 0 0 1 360.441 245.493 Tm [<004D004D>]TJ
+0.99 0 0 1 367.657 245.493 Tm [<0051>]TJ
+0.985 0 0 1 372.806 245.493 Tm [<0053>]TJ
+0.99 0 0 1 376.486 245.493 Tm [<004600540046004F>]TJ
+0.985 0 0 1 394.722 245.493 Tm [<0055>]TJ
+0.99 0 0 1 398.236 245.493 Tm [<0042>]TJ
+0.985 0 0 1 402.713 245.493 Tm [<0055004A>]TJ
+0.99 0 0 1 408.837 245.493 Tm [<0050004F0054>]TJ
+0.985 0 0 1 423.276 245.493 Tm [<000D>]TJ
+0.99 0 0 1 427.872 245.493 Tm [<0046>]TJ
+0.985 0 0 1 432.261 245.493 Tm [<0059>]TJ
+0.99 0 0 1 436.913 245.493 Tm [<004400460051>]TJ
+0.985 0 0 1 450.425 245.493 Tm [<0055>-223<004A>]TJ
+0.99 0 0 1 458.74 245.493 Tm [<004F>]TJ
+0.985 0 0 1 466.436 245.493 Tm [<0055>]TJ
+0.99 0 0 1 469.949 245.493 Tm [<0049>]TJ
+0.985 0 0 1 475.324 245.493 Tm [<004A>]TJ
+0.99 0 0 1 477.935 245.493 Tm [<0054>]TJ
+1.02 0 0 1 113.386 233.538 Tm [<0044004200540046>-212<00440042>]TJ
+1.025 0 0 1 141.562 233.538 Tm [<0053>]TJ
+1.02 0 0 1 145.391 233.538 Tm [<0046>-212<004900420054>-213<004300460046004F>]TJ
+1.025 0 0 1 190.51 233.538 Tm [<0055>]TJ
+1.02 0 0 1 194.166 233.538 Tm [<0042004C0046004F>-212<00540050>]TJ
+1.025 0 0 1 227.572 233.538 Tm [<0055>]TJ
+1.02 0 0 1 231.228 233.538 Tm [<00490042>]TJ
+1.025 0 0 1 241.379 233.538 Tm [<0055>-211<0055>]TJ
+1.02 0 0 1 250.852 233.538 Tm [<00490046>-212<00490042004F004500500056>]TJ
+1.025 0 0 1 294.687 233.538 Tm [<0055>-211<004A>]TJ
+1.02 0 0 1 303.221 233.538 Tm [<0054004F>]TJ
+1.025 0 0 1 312.966 233.538 Tm [<00080055>-211<004B>]TJ
+1.02 0 0 1 323.338 233.538 Tm [<00560054>]TJ
+1.025 0 0 1 332.778 233.538 Tm [<0055>]TJ
+1.02 0 0 1 338.595 233.538 Tm [<0042>-212<0051>]TJ
+1.025 0 0 1 350.674 233.538 Tm [<0053>]TJ
+1.02 0 0 1 354.504 233.538 Tm [<004600540046004F>]TJ
+1.025 0 0 1 373.293 233.538 Tm [<0055>]TJ
+1.02 0 0 1 376.949 233.538 Tm [<0042>]TJ
+1.025 0 0 1 381.562 233.538 Tm [<0055004A>]TJ
+1.02 0 0 1 387.934 233.538 Tm [<0050004F>-212<0050004F>-213<0042>-213<0054004900460046>]TJ
+1.025 0 0 1 439.293 233.538 Tm [<0055>]TJ
+1.02 0 0 1 445.11 233.538 Tm [<0050>]TJ
+1.025 0 0 1 450.242 233.538 Tm [<0047>]TJ
+1.02 0 0 1 455.814 233.538 Tm [<0051004200510046>]TJ
+1.025 0 0 1 475.558 233.538 Tm [<0053000D>]TJ
+1 0 0 1 113.386 221.582 Tm [<0042004D005500490050005600480049>-220<005500490046>-220<0045004A00EA004600530046004F004400460054>-220<004200530046>-220<005300420055004900460053>-220<0054004D004A004800490055>-220<0058004A00550049>-220<005500490046>-220<00500053004A0048004A004F0042004D>-220<00510053004600540046004F005500420055004A0050004F000F000A>]TJ
+/F105 11.95517 Tf 1 0 0 1 469.265 78.12 Tm [<01EC01EC>]TJ
+ET
+endstream
+endobj
+520 0 obj <<
+/Type /Page
+/Contents 521 0 R
+/Resources 519 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 268 0 R
+>> endobj
+517 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-BeamerCambridgeUS.pdf)
+/PTEX.PageNumber 2
+/PTEX.InfoDict 522 0 R
+/BBox [0 0 425.19699097 340.15701294]
+/Resources 523 0 R/Length 1583
+/Filter /FlateDecode
+>>
+stream
+xÚíY[kãF~÷¯˜·ÚPMæ~),t“½ÀBiÓú°]ÕqbQÛr,¥!ÿ¾g¤‘=ºØ’‰Sº„ø6GsÎùÎw.=Œ("ðG‘TXYŽ˜XŠf«ÑüzÿÑÅ2ßþœnâY’?…3âL+„´ÄšJcLbj¥aE\L¥R¡íÝ!t=B«BÛö¾úôûàÍeXZmaoª±åLÓÝÖhtØÒƒ‘÷0
+\¼œŽ.>0†,¶Š)4½CÒbIâÌ`FšÞ¢Ïãéb>‰8çãìá1ž03ÞßÅx›N"øšæårzW¾³r5žÐq²þ!÷²qž¤ëx9ù2ý4"`.AGï§Gðwxi„—.Ǩ”ØIÅp”†Á?
+=_¥"qJ±eavÞ¤+_ÂgðNÇk(Íùã6™ge¾^â+|ÆL ªÄ]î’¶Ö-\J„z$$C `’;((`»e˜s]bñ\fjœ%«ÍÒÂô8βÇÕæÄR=ºÀ@; úí¢)7E„€Ò‹Q‚ XÊA鞘;9b±àÅfŸ¿t ‹ŸÁÜôTˆ®€Úä.[¢àl·Jí° ¸)K•9• Gcqã Î˼ñ2<³%Užð oÓa¼2XH NJÌMñÖ4 ]íDÀQ*dN!À 6ÀF>·Ê¥?‰$Þèh³ŒÁ[bÆ,0ˆbÛ¾o‰|¤Pç¥fñ†¤ ¦À[í¬§¥˜·ƒ°xUTþ7CÇ€äQ ôæ3mv²¡}#eÍ£CÚ#rñA•ñ(ȹÉ@/!*ÐÛÍRªZJC ¢5„¤TA»à¶Zh•£0èÃÖòƒh€*"Bð.,t Qhìª"¯a!jbJ1PCb úôB^«ŽÐÍP¡ÀL÷)„VHE®‡ »Ï€…ª®ªôýÝÅEY­ö±ð[BÀ%­ð
+ÈuwËJjiX¯DÒì²&^ßvìa1‡®FŽLArŸx>°€ôÚšç‰÷ómæÏcT=cð'ù"}¬œ+š¥«Uꑹ‹gyº-ƒ3ð°$×G8Œhî°•‚·õÊ×> ¥î™A®’/I=÷Ž=-žÃcÀNíM™~ ÌÚ òÂ…a—r¹§’ð|öTŠýñ2K”*)t€õ¶Qrüv}Û{!%]¹è¯0õPy¼œÐñsW2Û™víüÇ"™¹ÜY”–­æñz— qÞuŸªŠÃ@r´7éÞLÛÚ–x¥óŠD^ï}Œ¯‘{lL
+Ÿáeÿx¶B×£ÑFõ„
+endstream
+endobj
+522 0 obj
+<</Producer (pdfTeX-1.40.10)
+/Title (LecturerDemo-BeamerCambridgeUS)
+/Creator (TeX, with a little help from Lecturer)
+/Author (Pete Agoras)
+/Title (The square root of 2 ain't rational)
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727152902+02'00')
+/ModDate (D:20100727152902+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 \(Web2C 2009\) kpathsea version 5.0.0)
+>>
+endobj
+523 0 obj
+<</Properties <<>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 525 0 R
+/ltr#40position_1#3Acontent 525 0 R
+/ltr#40math#40inner_area_2#3Abackground 525 0 R
+/ltr#40step_2#3Acontent 526 0 R
+/ltr#40position_2#3Acontent 526 0 R
+/ltr#40step_3#3Acontent 527 0 R
+/ltr#40position_3#3Acontent 527 0 R
+/ltr#40step_4#3Acontent 528 0 R
+/ltr#40position_4#3Acontent 528 0 R
+/ltr#40step_5#3Acontent 529 0 R
+/ltr#40step_6#3Acontent 530 0 R
+/ltr#40step_7#3Acontent 531 0 R
+/ltr#40step_8#3Acontent 532 0 R
+/ltr#40step_9#3Acontent 533 0 R
+/ltr#40step_10#3Acontent 534 0 R
+/ltr#40step_11#3Acontent 535 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/Font <</F22 536 0 R
+/F20 537 0 R
+/F52 538 0 R
+/F10 539 0 R
+/F1 540 0 R
+/F13 541 0 R
+/F4 542 0 R
+/F6 543 0 R
+/F7 544 0 R
+>>
+/XObject <</Fm7 545 0 R
+/Fm1 546 0 R
+/Fm5 547 0 R
+/Fm3 548 0 R
+/Fm8 549 0 R
+/Fm2 550 0 R
+/Fm4 551 0 R
+/Fm6 552 0 R
+/Fm10 553 0 R
+/Fm9 554 0 R
+>>
+/ProcSet [/PDF/Text]
+>>
+endobj
+524 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+525 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+526 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+527 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+528 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+529 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+530 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+531 0 obj
+<</Type /OCG
+/Name (A)
+>>
+endobj
+532 0 obj
+<</Type /OCG
+/Name (B)
+>>
+endobj
+533 0 obj
+<</Type /OCG
+/Name (C)
+>>
+endobj
+534 0 obj
+<</Type /OCG
+/Name (D)
+>>
+endobj
+535 0 obj
+<</Type /OCG
+/Name ([step 11])
+>>
+endobj
+536 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /VBXRFW+CMSSI10
+/FontDescriptor 555 0 R
+/FirstChar 39
+/LastChar 117
+/Widths 556 0 R
+>>
+endobj
+537 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /XQPGMU+CMSS10
+/FontDescriptor 557 0 R
+/FirstChar 46
+/LastChar 121
+/Widths 558 0 R
+>>
+endobj
+538 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /KNXCYC+CMSS12
+/FontDescriptor 559 0 R
+/FirstChar 65
+/LastChar 118
+/Widths 560 0 R
+>>
+endobj
+539 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /MLXNVS+CMMI7
+/FontDescriptor 561 0 R
+/FirstChar 97
+/LastChar 100
+/Widths 562 0 R
+>>
+endobj
+540 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /NKSIFR+CMR10
+/FontDescriptor 563 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 564 0 R
+>>
+endobj
+541 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /DNSCRV+CMSY10
+/FontDescriptor 565 0 R
+/FirstChar 2
+/LastChar 112
+/Widths 566 0 R
+>>
+endobj
+542 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /RKDUWA+CMR7
+/FontDescriptor 567 0 R
+/FirstChar 50
+/LastChar 50
+/Widths 568 0 R
+>>
+endobj
+543 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /THGOAZ+CMR5
+/FontDescriptor 569 0 R
+/FirstChar 50
+/LastChar 50
+/Widths 570 0 R
+>>
+endobj
+544 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /XXDVNU+CMMI10
+/FontDescriptor 571 0 R
+/FirstChar 97
+/LastChar 107
+/Widths 572 0 R
+>>
+endobj
+545 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 11.024]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 573 0 R
+/Length 85
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+H¼\…`TõPEÁ
+\
+endstream
+endobj
+546 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 40.459 13.109]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 574 0 R
+/Length 113
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+Áê °˜È
+endstream
+endobj
+547 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 11.024]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 575 0 R
+/Length 79
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+H¼\…`…@.
+endstream
+endobj
+548 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 11.024]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 576 0 R
+/Length 74
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+\
+endstream
+endobj
+549 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 10.33]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 577 0 R
+/Length 84
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+Áh
+,
+,°*04B¨
+endstream
+endobj
+550 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 11.024]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 578 0 R
+/Length 73
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+endstream
+endobj
+551 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 11.024]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 579 0 R
+/Length 77
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+endstream
+endobj
+552 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 38.375 11.024]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 580 0 R
+/Length 84
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+endstream
+endobj
+553 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 4.963 4.963]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 581 0 R
+/Length 85
+/Filter /FlateDecode
+>>stream
+xÚ+T0ѳ´046TP0
+ú9%Eù‰É™%•ñ†
+éÅ
+
+†z@9=S… i
+
+\
+endstream
+endobj
+554 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 5.955 5.955]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 582 0 R
+/Length 85
+/Filter /FlateDecode
+>>stream
+xÚ+T0Õ³4773RP0
+ú9%Eù‰É™%•ñ†
+éÅ
+
+†z@9 γ Á,8+M ÎÉUPä
+endstream
+endobj
+555 0 obj
+<</Type /FontDescriptor
+/FontName /VBXRFW+CMSSI10
+/Flags 4
+/FontBBox [ -97 -250 1077 759]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle -12
+/StemV 80
+/XHeight 444
+/CharSet (/T/a/e/f/h/i/l/n/o/q/quoteright/r/s/t/two/u)
+/FontFile 583 0 R
+>>
+endobj
+556 0 obj
+[ 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.5 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7]
+endobj
+557 0 obj
+<</Type /FontDescriptor
+/FontName /XQPGMU+CMSS10
+/Flags 4
+/FontBBox [ -61 -250 999 759]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 78
+/XHeight 444
+/CharSet (/A/B/C/D/P/S/a/c/d/e/g/h/i/k/m/n/o/p/period/r/s/t/u/w/y)
+/FontFile 584 0 R
+>>
+endobj
+558 0 obj
+[ 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.5 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1]
+endobj
+559 0 obj
+<</Type /FontDescriptor
+/FontName /KNXCYC+CMSS12
+/Flags 4
+/FontBBox [ -62 -251 978 758]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 444
+/CharSet (/A/I/P/T/a/b/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/v)
+/FontFile 585 0 R
+>>
+endobj
+560 0 obj
+[ 647 649.9 625.6 704.3 583.3 556.1 652.8 686.3 266.2 459.5 674.2 528.9 849.5 686.3 722.2 622.7 722.2 630.2 544 667.8 666.7 647 919 647 647 598.4 283 489.6 283 489.6 272 272 468.7 502.3 435.2 502.3 435.2 299.2 489.6 502.3 230.3 257.5 475.1 230.3 774.3 502.3 489.6 502.3 502.3 332.8 375.3 353.6 502.3 447.9]
+endobj
+561 0 obj
+<</Type /FontDescriptor
+/FontName /MLXNVS+CMMI7
+/Flags 4
+/FontBBox [ -1 -250 1171 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 81
+/XHeight 431
+/CharSet (/a/b/c/d)
+/FontFile 586 0 R
+>>
+endobj
+562 0 obj
+[ 619.7 502.4 510.5 594.7]
+endobj
+563 0 obj
+<</Type /FontDescriptor
+/FontName /NKSIFR+CMR10
+/Flags 4
+/FontBBox [ -40 -250 1009 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/H/I/L/O/S/T/W/a/b/c/colon/comma/d/e/equal/f/fi/four/g/h/i/l/m/n/o/one/p/parenleft/parenright/period/plus/q/question/quoteright/r/s/t/two/u/v/w/x/y)
+/FontFile 587 0 R
+>>
+endobj
+564 0 obj
+[ 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8]
+endobj
+565 0 obj
+<</Type /FontDescriptor
+/FontName /DNSCRV+CMSY10
+/Flags 4
+/FontBBox [ -29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/CharSet (/multiply/negationslash/radical)
+/FontFile 588 0 R
+>>
+endobj
+566 0 obj
+[ 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3]
+endobj
+567 0 obj
+<</Type /FontDescriptor
+/FontName /RKDUWA+CMR7
+/Flags 4
+/FontBBox [ -27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/two)
+/FontFile 589 0 R
+>>
+endobj
+568 0 obj
+[ 569.5]
+endobj
+569 0 obj
+<</Type /FontDescriptor
+/FontName /THGOAZ+CMR5
+/Flags 4
+/FontBBox [ -10 -250 1304 750]
+/Ascent 694
+/CapHeight 680
+/Descent -194
+/ItalicAngle 0
+/StemV 89
+/XHeight 431
+/CharSet (/two)
+/FontFile 590 0 R
+>>
+endobj
+570 0 obj
+[ 680.6]
+endobj
+571 0 obj
+<</Type /FontDescriptor
+/FontName /XXDVNU+CMMI10
+/Flags 4
+/FontBBox [ -32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/a/b/d/k)
+/FontFile 591 0 R
+>>
+endobj
+572 0 obj
+[ 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6]
+endobj
+573 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+574 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+575 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+576 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+577 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+578 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+579 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+580 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+581 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+582 0 obj
+<</ExtGState <</ltr#40opacity_1 524 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+583 0 obj
+<</Length1 1636
+/Length2 7777
+/Length3 0
+/Length 8831
+/Filter /FlateDecode
+>>stream
+xÚ·4Üß6]Vˆ.¢-":«Eï½÷Ýb…]V.¢‹5j¢÷‚èÑK”Õ»½¿›|ûïÿ?ç}Ïž³»ÏÜgfîÌ}æî~h5´Ù%­a–`9Ô•‹$”VÕÖVäA ˆÀÀ qu
+þv¶°²‚9:Y@½ P[  Ä T—SápõteZ@­-\`H w ˆƒ…%’ð{ï@9IM ²Ä? t±‚Cœ\]8\ ¿ŠäüÙgY¨µ4ÌÑ uuüÚŸ ¶B6Þ‹ó¯ó}…y@½ÿ†6¨µÍ¯B¬Ýœ8u¡g7°¢ÌŸ$¤ ðÍì
+ä@H/°3ìieÇù+…Ž—ø÷"×/3²
+_o'˜ÐYØbF~
+fýk¹ùž-àp /
+ˆÓâoÄ…”#'ø_Èió/ˆtµûärBþ€œÿ@¤Ø8¡ÿ‚ÈÈ°A §óßG‰Ü`ÈcøÝíXÈ„ðAdB—Ág@ÎÈÈ~qºzü;²4·ßð?ý³rƒÃ‘—Ìo#›ûþ}£Áž`+ÀÌ$ÌJ8ؾ*¸ù¼B’ƒ}mHãGʹ7ûPž)¶k—ì¨ÙR¼vFú¬r‘ÜL'—œ©}«š”óyæÂÔ‘÷j5Mï);ܦ-eìäÝ)Êx‚÷%ÝäÆ{9úIRÔBð®{T‘øm÷Å­m»´ú0VuL'x<%.”ãWzݬö¹­¢0]…”RPowY˵ѲWgïøcÖ²cÌ«•¨çáÉjitÊ"Ÿ/
+ÜwÒ½-å‰$v¬»Š§åß\´¼Û(vâB³Z$ˆáÐ;þÔèÕd(jÞó9í;R}õÁ!Ú`{T+UáÅÃ[ƒ…óèyãO¬‰0¨‘85&ÔÇ»àÝʈµ®\Ñéw#¡®•Nz`ÕŠ“f+¥)æÌßÏw/ؤ0NÍ´}1€*gOÙh¨½ç¥K^]‹gÕüØ´x®?»Ò~-@Ÿ¢§»Ì¦“®ÌØ2S³lÊDù6fË„ÎÅ´úÜjd†‘áÿŒöc[ïvõ IyÙ'ì<–C À\núðŽ|°º$#ßÄëÒÚhY
+ÌÂ{ëÍhõN îW‡ÁQ’¹¦««4H¥a÷ÞŒµ'ÌÝ=‚²ˆÀovóåç ‡:A_Ä0‹>IZ&hG78b›Lûáê;`v‹à
+ºÝ62*À§ÃÉw0It“ƃf瘽*feµXrq-~ä·:ð W×Ì1dò¶Ä¹'ÞdÕ™­®“¹íÎãÂ+OC:¥ÍõÍ´I0Ò‡(Pp7øÎø#_¶+çZëÈæ§qÐÞ¿Ü6N8ÛfÂ梓þ&7âRv• Í03‰ëéo“ÔüQ1T72‘*j@Ö"LÏ||úx@8k-]¿C¬Å± hË¡}JÁAìðü+7×FAÓÞHã`c&Îý‹¯Ö¥¾;™5N±º¨_×@
+ì±ÂÌEËD©½¥÷«Bz\*_0e°t:aG jTí™c?uã¶_ïKA|é4Ý›±Ì«9
+.<‘ZÍ€ˆoPpô›QU% ¯¥?Y)z®ÌIËw´µ–uúÊn—‘¨Í]ÔíÝ PC]¹OpÑ G^ò"i
+9D—­(
+aJD(‹výÔê­ê曓ÖWuk³7äm”ŒhI•¥«ª lø3À–x¦•»Õ¥†´X›MÜõºä›¬ÊݬVÂéЫ)ß2‹æbAɀϬ
+#سêí%Ñõ‡À…ãAå6…4Ñï;’
+GéD¦]‘tl}s ¿q§†ëcã¨#}¸öìþ¹»uñ’2kT£O›é&– •“¶××N ‹SX§í8
+zÈjo‹L>!3”¿¾oÐNÏ€@müòtbÏò™Á§-¦J–È*q .àŽnE¢°#Ǭ|^y•
+jã]e
+Î5Ñ‘É>k÷ 8²¶½ïH¼ÍJÉæÒbâ]¢^HEfn
+Îú„qèÝ ¾zß|`¨ÙŒ»ÚþÆ{°ÍŠ°¹W1½9†z±ŸÀ†_î£ÔÇ“$‡àUÚÉÁŠ¨þu÷ξßk‰Ëõƒè‚€Õð– ˆ$‹¼¯Uwƒl²Ù/©y¥Klú®¸Gvr7&¨Š·e
+ÖÒ74Û9—eR0] ›Uõ#Ï:»zû°œì‘>›Äy"OH‚‘ö†)&˜D×ÿãx­ü§ë„­P»+wô1 Œ[êñ³yÏ7ƒì{­¦øVx2º7‰’$›êþ1k—gl‰Ã­Í¾Kä£caHÔáåç‹Èä{ êüXƒìÒܘÕ»ê$J?¿¿l=R27)÷%Ù]ÿXïÙë6âŒ
+ êôôïÅ|³•‘9â´Ä›l¡tP‹ ›KM󾓶œ7bøqTv.ÌÒ~ìÁ4^ãp¢ÀõÁ¸”«÷Xnª§=l*þ¼_ûƒ 5Wÿº£ß–Ê|ER¨ }[<ßú§0ËòWu-‚M CU%Šúî%¢ª¶<! 9trº’ŸµÍ§h®I@¥m}ˆš¦âO£Ù€·»êÁzøÑ©ò=Kæ{!ƒÞäÛ±Z¥~›eÀù%­\ÃWÛí e[ „ô°Šr@¡ôUÀ˪Âò>. « ýí‚…Õpè¦4••_S£ ¡'5ΛÌ0ö¾\nØi⩘ì™ñˆõ%ëíO?äx )ã/-ž]6Øñ[Ñ[MMI‹Ã°Ên €S
+!û£m“)ô'7ie¹*ˆ@—ŒÙyåÑ÷Ñ[ÓÁ¼­+~æ¦èàÌT)UŠì[U†Èø†àÎàO~¶~‚ÎD«Æô’lwÝ•t﫽ú¶öø ?G›öñꙄS“ÑcÙf-S$5ðê(j ‹ð‡®5 óÜ;ÐSíô}jÓ§ðç^û| }q–h6Ìj
+Ýê˜9è– Cu:ˆ3VÈé"ňy‚üÿ4k¬>>ÿ¬Š>…bJ¾p3,eXKÂcdÁ 2µôá!ÏËk!EQ ¼)cŽ‡×ñONùqnÂõ±Q@üfë4V'"
+jÃùzät‚?9eIûtuä¡O–€t¼ˆVGÌZšÅi{:±H4’š,CµÎ©«´ÃÞ* ›æI©ù!K¨ICOó–"<£ƒÉ GúŠsEQWçž‚V¥Å4
+*—¥ÝLÀôOHŠe'ù¶ISäzâñ'8Š™ð=…kÁ2ó>J ¶ˆA.gžª-2MÍZõpí3gæ·÷ãÌâ$É v%¶=›]DŽ9ˆÔöͬC)e.RÅ—t­EÐ;ä«·7‹|’¬'dÂîcðO±ööÙ`‘Zúó^¬Ê/þ‘al×t׈1(M› D”öÆÕKÿºÝ$ÃïPÈïØ
+íqé×Wÿ©Zã ΰÕ%³½FÔ‡ú† ŒAû^wûûΖdÖSÁ4ÿñ±™)JÚÆã'i…½»V ^9s¶\cŽÔu0«ïYǵS’)«µˆqu“PjãwÈnl$ZJ:Mä‹¿~²á+l|¬ˆÀ;Ä)CïpÚzËm±PªvFDë¸t¶nüÆÚÖ¿‰!"]`|匈»åVFʈžN -±aÂ.2qÉŽ=}¶w.~½/-M„ªÒ†Ñðv¸OúFtïcãDä3¦2› ë§lï;áß°i545ÅÞÒ£à $Æ`*=¶XHE>Ì=$`øÀéW§}¦.ÔQª,Åȇ‹(Î-YzÆúúå'Ã`+zÙIO$JΗññnÊmêÈw§G_²W —þIˆäµ[ ¨¡4@Îa"øA[ãÃÄǹ¸G‘ïøQl}ûÕ…uJÞ+Ý“Ÿù¼ëwßhW[¿–_¢^ï<,·(Á÷½yeZÅUJ¹‰¶çB“î„xëʆg‹ËÜFC,ôš´/_¨{£v'¹:‘œlãâc¸nH=áeC#ÆY¤#z§§&4¦‡®khWŽZºš´™vÑ6d§„EËúYgÚìÕç½£Ò䧰ÑXÌ¡wãß¿ zT£Ÿå§–pÏä
+âVnµ*×b! uˆÔ„È‘áû¼¼ß„‹{öà¯ý¡qk3ë;ËÙ²›¯9M"ˆ¿`õùµ¸,æ&ªÇ”M¸=GK×»­s–ðï­ºrwÎq®‹~Á¨"îÑÅû
+endstream
+endobj
+584 0 obj
+<</Length1 1749
+/Length2 8804
+/Length3 0
+/Length 9895
+/Filter /FlateDecode
+>>stream
+xÚ·P”í6N§tƒÀÒ K7HJw÷ ,±K,]Ò !Ò Ò%­ ‚ ©t7â‡oúþþÿ™ï›gfŸç:}Ýçœ{f™è´t¹dlaÖ`EÎÅË È©ëêò@ ?7ȇÅĤ;ƒÿ–c1€Ý= 0¨Øorî`üA&‚?ªÃ 
+PÁÀ.m@Î
+þá ²±¹¸‚ ¾¨=Àâ h*ªqÃ}àœ
+üo˜àoòHµ@¿Šû- 2Ôý“ÃÃáýÍÃë¯Á`ýkkØ
+m~xÿŸwà—ÿ¿Ñÿåÿ:ýÿ[‘¢§³ózÖ? þ?z ÄÙ÷/‹‡qö„?¬†:ìaA ÿkjþsŸÕÁ¶O—ÿÕ*ÃA+"µwþç !Š°­nãðçý݇‡ðÎ(X æùuã
+@îî _,àÄñ
+üy¶ÔìóÇpx¸¡0øƒ à^ ÀæŽõ«§B‚
+<ðv}GØo•ñ>ävÿ >äöø >xÀƒ¥xþJñþò=äöýþ§w6žîîÛûõÐØ¿ñ·(ì¶Áú< ³w¬o¿®“¡òæÚøˆ¶²Ö“hÜ-gžË÷wPCÏ|:é&ke[M>’¦5_91@Å~x=æcÖ²œª”GPèÿ*{ÌU0üý¬ÛLc £´N‹ùJp”¤MgeŠbÊ’l8{!ÜÿU³Yü£ÃcËDtà(¹Ä§K¥‚ÇËävì!ÅÓ1®Á?›á'º›¦{ê)ëÿ@Š…$\ɶÇQ|÷ýjšñaii({ ?ÿ´Pµ·V¨:’ˆ‚ØO….wäå IR¶J‹³¬à¥\y2ÿÑt/BþÈ´ÉýGÖÚ½çÚ9i^È1ÈèomŒ)÷ šSiÕZã0(EÄ`ŠlÞ’ÖÜ÷xÀî6”²ÏïêS FÅzçiX:t‹Ë¬ žÇM_ ð-£*š í¾l%E¢°oÒ×à’ÞâùO¡a+\'­,§¬2ûáû ;}ëlþ°±…A‰&Wœ*÷Ñ¥«ˆ†±$<4í¢&ìó ¾œá–:ó¶¨á BL˜œ0`§91 QðNÑ»Y xf¸o
+C<¹&2}ƒªXÍQyïÒÜ®º‡`ÄÊ¢,UL»tš*ƒù
+‚“Êð® þdÐÑ+]’¯…¯HÇÆH+dR,K‰³¸éÜR*œÄø´î0»ì_ÜtP±`YßÕNæz8•¸Í9ÊK¿°hÚ„Pö=7’IaG]òÈe£p²}œTº’’'ž¯êF“œ~.jøS°CJºo*5t nañF˜Ï'ÃGú+”OBµeDzÓÜ›[¥9ÿÜ3õ ¸‹åûÊæˆÝûd Ká/À3H&6-ùžõ0ábCzÆëf(Ÿùb—¨”Vyz®mgí$Ee£ìˆŠSæçâ S†5$~âëUèÁ ñõEÎ €™C\¥/-š1¢îÏ«]1ÐôIôÞæ¬Ë™Äû )
+`«¢½jÌEý¨
+Y
+—{nXßÂÑ©_èdÙ’e#Vjˆa>t=±UœµLchØ»;.©ôÆøàL¡¬`ÒH‹/ܧ£eɱA»x=W 2ØQ$I B]“oçÆ:¼Ô¨€4çå§÷gWËù¢“P†ªwTH”&BlÔD}$Óò±ÕÜ ß· =ïtðÃ4n§9`¯ï"4Ó’4|k?œ
+d‘š
+õDÑ¡CªQöw_x<½"ú™ñ2é5‰ûp‚¬ÁGðs+w©×"Tº£ÏÎDü…WŽ"ìsæcZ\]{…¸S'î0Š$’›ú&
+zèj=1Ø.T6ua×9\ÝËX±5£A\?è‘6ŠG=ÚŠNô 2‘7®Àiœ’©Ûaì¯ÿP|8;‹ÓµÜ"dïýzÍYÉ–l©±=8´ªÉâ¨Øi‡§‘½‹–QbV¸žÈ?Zózhº´W¯;©Æ;쳕í—
+Ïz„*÷Zô) ^vÖOø<l«†ØÐ~£ ëy5©³ mß>üïµæ*&
+e½£"ã0ãƒHÊÞ^4§n£ê 샹†äj¡s?Ÿ†‹ð3BWß Å%Û{Ἀxûa‡?,æ/S›j•§Eá '·}ˆìœBªøý®ö‰ÒS£b 9„-ùø²àeÅ),fßäKO£DÁ6-ò×xИ±å6ÿj ç4û\%/,úÖ#g;ÒZ™Ïdc
+‚ý³áŠ÷oÚö±, ¡¨oG³öë™*gÀêÃBÔS)üÆéµ^ÔÏÅoûÞe]1t“½H0l7jŠ:U
+-ÏSžâ,˜•bÝ·¾â#cAêËh´¬Ú
+< lVQÄ*¿¸ò\xMö㋵—›ÈüMŽ†ök¥„m‡òö— ¡àl§°ˆ,Ϊ >g]ß)p>÷p_j÷Né)vßIöÐô¦±ÎÇQùbØ¥ØìÛ¯F¸$Áoí¢ŒwÜǪű¬jûe…‰`ËxT•ò̳Ø`TaÉoÕIFIêª5Æ“…N
+ÃîQ:¦ÛVÉ=õ×
+s‚O<³&ðzÚÊmü5+²®Y• ô×™b³9“ÝÂçð¥µÇbC¾‡ÒE{Ÿ“?(ÿ \†ÛÝâ ÷‘¸Iï.Ÿ¦'ý㳕„¹Ã»´® t”FL¼bßéÄpÔ‹†„öA»ÜãÕ°'–ywÌf½WŒ+ö†5–9ßÜòÄÇ ²È§ë&„Þý̨WExÛ?,þV,
+—ác1–c†èW®ÊQäêT¾Ó«©!o~m‚ŠYœòë’œùÝãÊÑÒ¼ÞLk{òâ>ÕÉ.üqEðcªr·Ÿá[»¾ø#7Ëfº}¾‰­€Y^ZÆPÖL±†ù]]ÕÏmòN“‡öb)
+EYfkêá^2€Sä¾­L$¢E1ˆ=2¦Ç.Ô‡ ämâ=N쩨×æéïCGŒO;‚o›>¯+î5ä §éšŽÄ«dw]Þ%8ç‘Çï®ÉÍÕ´1n¡âÎ^Oð¬çZYÐ=2¡2cQ¼g\ãé#™I“¦Œ“Ì¥õ4˜ g#í›èØEþpñ«<·ªv½©‚ê%_w2NÓC›¶ ÞI•§u$ÍÉ& Ä‚ý{xƒ ol¯âHÑ\e$uÅÎ|
+»çÇX[‹?i¶€_ªIÌ~ Gus=(™l ¦©hxfú©YLFZ¹fž¢29˜¢n
+Bÿt  Ë±Z×5¯—3x5˜2¤°‡Æo
+V£áHâÑÆߥ
+Òžð9† ¡Àd)™‰Ùü·‰uQöÆÃyÁßò‘ÒúN!J" m@f†C ˆ_4 ôIº«$ûpˆQgig75ˆ"5,)ßäܹÿ™nLEÄ©´Dù£Õ7
+YóQÈ$ýÓѸùàSÜÏÜtRI§rÎ9ª©²fí‚âŒÂŸMæÏÜȆ ù¸&5Ä‹øø8wN<p "X0ÅuuA¦|¹iâÆ]‡]É.D*ä…båBeH€æü˜Õê
+ê)‡¹5ÚÌFÀ'©®£ÍÈx%ëª=ZX@s¶ræ’@fÉöV$‘8¯iR‡¼šy ]ò=ÿ·ÎžuêÅã S½  n ;ŠÛØ$çod.$¶FåÔ¹fŠ~,øù™R ¾œ^ ÝKÊ”iîæǺ÷wAépàì«8zÐG
+ a<^Þ1ÑÆÅòèV§ãÐn?6ÔÓÿ¥›=y¸;xÊ{‡º9ïˆí%k×( „õ¤ìû>o—Áñû¢Å åyÎdàk‚Q›knë’›\¿oWÂÐ6TÐîí.ö2©ܑû±Dªy’èæ£c­Àm,µ¨Ã|d+À[ËÜþé¼”Wv\—þ¸ n¢Þü+sõ±Ûomöo*ÖQïÐÙRÆSµ…Žgg/_§µ‰NJ'QàuøK c3 àgÝÐ}óš@o·ôÛÓ¶J±CÇèü}{²\W…Ú|p¤$½¡1–ë¢t9G¼¿ŠÛ•îMþ_fÒÑy´ÉŒ$Ç5°}XYÓïÒ
+ƒø)ÚXµ‚xéCc€bz¥öÝ©á¤ÈìÐ} jIyÿ^h“¸!e~ÔPª1Q¦¦”ç]¢¥¯Íuô‡¾ÇJ0Ž%öN_IÔ»÷eí,~ò~¦ÑKv~1¼n€ƒûjo¸þ Æç9ÈŠRz WBR}±×i°SrPé…Î}V_žwX†Õ#–¸”»= ÒyÇÏæÑåZgŸ¯jyYÙ(T÷63†\zˆ;Ï< 1'ÞÊ.„\®H‚”¥É qîQ,Ú«”µªçZêÛ’Ú‚´!¶\µÞ^tߥ¿E<¤\Õ7´?ê|>~z˹hºÌÝ3Ó&µ—V•mŸ£Ìù*N±…‡Ý „o|O+îh‚°2³!÷ÉGâRYlžØëC=5¥)ÐÕïTý¤GçÚî8GÅS³Ãg߸oïeýÔÁéÔ¹J‰½†óÍÏ¢óžh  v,¦¤hP^GÍ÷IÁýÓî”í$Ü‘K&$Jû¼jӛƲí…V¦ÉæOl_ý8Y‡ räsZÚ(X
+u¾Ÿ"Êð°™)íæ˜;ƒ™G’ÅdDëX÷Ûˆ1ŒUï«(æs”˜y) õpWÌ侀_?lAC*ô›äS9Ù°ó6±M#«å¢zÞãÇzS}çz¸[îÅã85èà–Y8ü⹫2@(q?>Ðq™$Kªë“FéD}Ci'¤SÎlá¹²³²ÐÁB¥°TÍ'@ìu^T ¥3‘| 0S{nCx}Kî}´£äŽ­’ŠrÓ·J¢9'Æ÷5×4Û=(?xÒíéWÒ)kJ*b9G ·"Ñ>öÌf6—FÖ˜+Nº¦—¸‹µ UtòŠXúŠ‡)yÛWw››ó·8vÕanµ´<{YñÜ[…^PÁ„nŽQv|‡M½'wÛÌÓ(èÞÊwMÊW%û<ß@gÉ“::h®œ¦‡3ÒfD¾ÊÄ0ý<ßnÐ`*+l£oªŽEd9ÃÜäÒf›¹]\]™/ç•-¾z'%ï^Æ›´I袥Îp†
+‚ùÑ:Z²ûy¨›Sçÿ°Í3M¨“?Û;ûøõÊÄÕ¶Þ_£l*ßU8ÏƒÈ ù‚Ål[!› ýäÙ·†ÏØÇWX´’übëûk-Õû|~“4‹6·[u‚¾K6ðÚÜÝŽSJŽ'€nç)]V9§/Ö²|Ø#9·©¹OGøäë¬YáiÇéoº~@t"¢Wʯə/¿Œ¢Ž;{>K±(%~A6ÃòŒfB—HZsÇlQ§Ù#ŽÔ—¬ƒwCÜH´l³Ž¢•»šL3ÏgDépƒSçÑy˜bÝ]š$¾ðS«Æ÷pD’s„aE†9ß½ÞF÷µu«ª›î,á½­¨ÑÁù±˜>ÿu&‰ïײéQ\ë_n°?Fš„wé™›Y»Ëm\¯­Møð3íI]º@o¹Èdž‘?þùœêÇŠs9’GYQ˜"ï[ ét
+ü‰̲*{‚
+¾yÏ6:\}"¨ì
+ê­ºí·|¼wܦ{o^+üؤ{z~ûÆbD™÷é¢0€d
+'ÚÉ©Uàìù£5 ¼ _mÁÉÛo˨® £•œwC¶Ÿ8QPK—+ìG°ïxI¼`2b"ù\E„€.yÉ€ÑHØÀSO÷m®“ì|aš·Bq”QÒËÚ}anñŠÒW/èQ"•¯ß˜ˆ°K]ýÐû.¸„Û˜ ûýÙ(êƒ5ƒó—rdù"çûäßßïAØ–J»LîG£"㟚Y>#©3{ûíÃ~'3Râ|ÝmÉrà’œ-`0‚/+K¸›HZ¤(0#Õ©;?§è”º›+ôó†SÄs0f¼Dk×Ë›°0GW/íV{Œæe~Ac¹-ä|nae‘þÁD‡L.í+»Ý¶Ñ,Ò"#pá•%üy³éz!=íM¸
+È{ïË*˜ª?:—Q¦ß)Sª9@ûh­¡´šjJ{¯ñsݨËP+^è#õ˜Jó–=­¬×æHOñ^ñf-1,Nv‰Âe Ihy¨Ô¼(ÂTùx`Ú~[íª¬'ú{=7Ö¦ƒÖÓù”$=“†*_TâµÂ—öðˆàìÞ¡¼€#³—Žô8Z
+ÊØêâôPC¸ÐIÕÛ1è³J-o6å¡Í±>¿CVø÷fy•»Uå§ñ¬çiÙ~f¯gx
+:fˆ£ºîÅ»ØÓS2ÙN—äæ¾¢¦šäs<·Wf©=ýDDñ=ýà &i—~Ü+R(á0«¬l›É !ºO×N>ç\düŒZÚ#ßùæ+tzVì³h˜>ç•›w´ÄH—M&LÒ@ÂBÄ¥N2«¸4Ǿ
+”•$š»·ù*ña|È×%ed8¯–&k”3Ó­E¨Msû2;y8/‚ ê[]uåÌ^·÷ð®×kqÓLÔZ @ë;H<6 ŠŒmÖiÕÈB\²“‡¶ó¶O}·-íùQsÙ^
+æÔ"å’㔟•œÖ1µÓKc
+ÿ·”Êír®¨`{‘`mÏ39p€!:‘£/~cÝîÀ3t…—ïLÛ*t­k#Ѐ"±ó69[þxS"èØoÍæå?]Ç=ÕYÕ®´MZÖj³ªi@_èBW§ÆºtéòZú)ŸŸ\ ôÐA¡O;[zØ©(ËÇbkdJÂh¦%¹èX1v#ãµIEÁÔ†A'jv„ÇÙ@A•…=Ý$‰äZøfØ$rÍÍz§ž'&Æ8·:Õ¸ï;?šs=3Ý¢4ZáŒ@Ù=•ÎÕ§bIþå.ÿu#¾G#s>n³%7ýf…Lsöó@¿¸EÉs> ¨€$¶×“u³Ä“WÖö‚:zå’Lu›s`ø £=XýÕ.õøõézà8q€ó©²£áÌûNŠÖ‹^ ’aá¢`
+¼4=òFá™U¼ªÔï{v$ÇÚ ˜B?qÆÈõ (£%9`ðí­tœ~H†ýàXI÷ QÒD¦âöˆ/ɱc®öG%ƒ5™nÚQ]y¯bqÎùb²9›
+ÜÓ'<~(/´wd¨jåRpŒŠ7©¾slŠœE¡1¹t‹y4Zn•©º¢u¯9Ð#iðXQšøÔªrtÁ%nÓAÔsÉË_{&N5
+ÝÞTcµýòž(H b~$Š‚˜+†Ä߸†t+?"Ž¶ÒÃ#UÒ-ξK.ßÇAr€wâ³Ê Ⱦ`×<#nÓAŽèózRŠ«Ç[ fr^bAZMV\–Y‘ö|[ÞJ­õËÕKOÍj—•>>!ÓÜ°ït¹”X÷‹Ú]¿žò+s!l9Æ¿ÑÑ)Ø6…Øw~J«iqÈ'Å{³©¤d
+P¢ ŸßZMï{ÿ“¤ë—üÐÕÿÝw‘ûOè=©xÅàY·ö7«ÈoM£ËSCºº¾º+¨`pâ°ã­­LCF’¦•×…Æå–Ì-#QË©B\嚘éÁ{4øƱm›xùÐRä§ì"“]¤ß÷ŽmÐ-‘iŸŠ,rT+»Å¿<”qL™‡ù°26©Ó}FâÙ!xi·þóÜ'PÿMýÍ.˜§”±è;ŸF.ö³7ìIÉlkÚÈŠ(OÁ ¤Ñ™V\‚½“„°ãiÆÚË.Xûbûn)Ýû7Š¤« ¾°.íÓF³ï™ëe¡&·\_v#¼¬¶*Eb8sͲºô¼kD»v¾l>w‹øq.íÀëÏ*ϵ˜³—,GLɼ9‰'Å­«@Çy'ÎQð‚Ý&×&ÿR9?á`¡ý<5àðÅÓŤ 3©—§™s•E²ŽØÏýÜ™€˜Ø@Ú
+e—Փ᳎$¯Émïá ÙóÊ÷ÉÞZB¼£ÍOž¡ßô‘{ìþœ9rÆ%+Ž<‹[yŸ=Þ¿—© èWÜP•Ó|ÛÏÊ1h‚ÁÀçšä†y®Ö ¢Ò—b+Ñn”Óå#ZÆì"9Q„bÚl÷† m6)ÒüéZqEäæW‘‹A=òE0­Ù÷Õ“|Š
+ñšé¥aÈ$‡Oçúç OLIƒMP˜¤ICWÞÜá.sWšC pQZ¥P1Jï’ÀMk0Ç…At¶òǃèÎäì8f®$ÍnS²·
+Ú^Ek^£ÝëržîY¨8“ôgë-²:žT=ˆ?.R^у_÷›K·ãrWôAŸZíbr¿­
+,hÅк´ÉAûa63²Í²FÉë†ÿRZ
+endstream
+endobj
+585 0 obj
+<</Length1 1731
+/Length2 8555
+/Length3 0
+/Length 9638
+/Filter /FlateDecode
+>>stream
+xÚ¶T”m.L·4"=tw—tww3À3À -Ò)%% ]J‡ÒÒ%” Ý)ÔÁ7}¿ÿ_ëœ5kÍ<×®kï{ï}?CO­©Ã.e ±ÊCÀ0vn.€ŒšŽ7€‹‹—ƒ‹‹ƒž^sþ-Ǡ׺CA°Èo2î@+Ø£LÖ
+öh¨”=œܼ
+ÿálecqqµû€Àö
+ƒr@Aοjäüæñ˜åÀ¶2 Åø•Ÿ,Èhóxî>œ5× ñûýì@`[»_eØz¸rêAn@%Ù¿lEÿÊì0
+°{,è²>þ`øA­<
+lïüÏA‚ ò o ­&fãðçý݇ÇðÎ 0Pýºq
+½·hh#ÞëÕmà ¾ØaR:5³K>‡3¶¼Rä¨ÒîhڮЯÿò$¸ËhÞÀýR{Ó–;­)BC\·÷Á“amËoߧ³ÓßÛT­$ÄÛE^XOtÒWôµKË"†Rc®gÙŠfgÍ[˜·³îÓËQ<û˜YöÉi AsÑø˜$ç%/„V§}s^öŽ£2?XW>ׇȚo; ÿs Ö·œì ;x>´#úX’[ÑÖÂL»hF‡Z™¢ÃN?~Š˜–ÑDÄv¾7´¼tŸA/¬%‚çT º 1‚~ŽÎ“¸Áî“c¶ z<N¸\ïB¿ã“èÍÌqù]‡÷l ?Ü878ÐtIÝÌÝrðz—'ñÔa¡~ý3ƒ­áP¸eWU~;¿é~‚,‘a‡Ê­Ä4ñ…ó±æhüõr‹ng¿'ÙÇí]9¯t.AZ‘Ë3|R#ªóaåÙZýôwQ/-›’Zˆ÷sÞtÊ«!R¥DèÆb½éÁ2Ä݇p²VOlÝQTòÊFéè*«›Å}ôJ;P¡IÈÙõÞÿÖ=›G7ܘž(=ï–ÛB"§ò‘¥ñ¹Yc‚>Ï-©94EAs¾%¾iÃúƒzÙ|ñC'öM½ÿó>ÝlÈÅ´"Šûüç;€3•"‹Ã˾¶ ­Û‰¯Aj[kWü–ÐΡÀ}\¬;EÕï {õÄZâ³q< ´ùæf8CØgÓïÍì¯ivYÓºf£ŸÐ%]`Ÿ: ÷÷îµxë_
+FÛåÞòAA2GØFeª/!–ñÞ‹ÀÂûp{¸!×à‰²u×pUÙÊ•‹ñÀ¯x\ªá°1Î2üw¨í©+ƒbKY:Ô´Ûž65_éŒlöL©Aõ¾@R\Jò—ßàbÅ«]jnIƒêȘ)œ• o Òrn ùæC?¼V£¬ñ-(2vmþ쬴hῈx_¬©Ÿ—XÄ@è•f0jÛ ¹ÍŽh:JüKqô€}h¯³Átpo·¾§”ä}ó<› €by ƒQœÑol^¬´Rk[kI⇒¯L19\¸ArqG᪕o•d²@µº¼’!!hÎxîÊýLvª“¥P~mÚ7ëÎã}ZºÃ[æ
+å†9;&ýM¯öÊÔpáQîÞM›°ï¬fC‘­V§#bfú“SöI‡xw‡–Íuòx÷î“F±ZâéZ{>µ›<×›®Ã$?Jð„—·_}Õ< /—ëô}dž” ‚2öêé(7r’‡[OH˜sè-B«uÃ,Tr)Vˆ¢W\ÞS°4ùŽ†’L½Ä«*&ÊŽÀàÁŸ“j¤Âù6Ëq–*÷É.O°REheh"`ÓH\ÞDíE
+ã)Êó—ú wt**y”T œ¢"Eª'¯”ùQlµìD×çè¾µOFÖOÏŒö¿Èöhõ)
+äòƒ·nѦ^Jô§f‰Â•Ï4\y¦*LOáÚHASBÕĺãËÉlE ßLÌ|‚Ò{áçÞî¥åRO<þÞ\ ±*¦È4síBºøóàeQ­‡‹Þ¢ãìéû­Ú^"} V¢W®sw@Ã*^Õâ‡[2bQuÙÌÞš4$òAºY2EÉ{›6w"ßÞ-Ä3¶ÕuÌ‘@Ù÷'¥rWzŠÊQd98ñ®Ï¢{cϦõ‡VŸnΕó6ÅŽ9˜)¢ñ®Ð؇ÊgÐPä ZbôéÁ>ÒØ)•tÇ Éð¦Kß&à^9•²?#ÝSôM,q:9øayÚ(±tFàKÿ¾²§âÊŠ‹d¸qAÆþH<zOã
+¬ÙìáÞiµ;pzeI+ƯÏ0\(¢֟uƒ·qëâ€ã=úÞ OüéÓz H(Ë<Tµ~é…ãÈôì×ðuÒä#.íœWɺ˜‘lÍ`ã×}^ål,1"ixn
+R‚Š6¦ØÞ×$ñ"¹µ…Í'ýµÝKìÕFóJÿ•0•3]Näº*Iò‹€®upQî‚
+­\㯢(uû|?’¾(»tªQA! ¢ZOºUyñÃ
+™T.nÉÓÿZCÑ¿Q8†)-Ý~H«á¦öð2T‡ ©‘wJÌËm^îaz†zo@䮀-»Îû|rå›ÏÛRFÝè…0‘³,§9v[u±ÓdïÌô¹de/×*³žV MbÆ
+ÙšÔ±€¡ÚWèä™xÖmø#¯¶£ÀñÃE
+å¯SSó_§: Î5xÓ·°N¯LŒyDÚ÷ôè»±X5^4€*¦F®´Ö ¢D´ñÚ™¹ÀW—õáR™¦Øâe&!8K¢JjÖêÛ(¯.ΩY§³Ïìó üÆ‘?)ë/è*Çl:ë:‘ª ©ägï© gÒiŸP»WŠ2ï¼ÄŸ=žÄ¯Ûô;Ԡôùf·M¨ërGïSÁЛÔS/Òít<Í„Ë35Õ´G#CDZSŽ9Ï2¼¨f„•pò–×ìêÜ¿'iásÐ~¢$ÓÚSÒîp¥ñê óm»9_7brôê Ùê5ND%µìb ±¨ó-÷6úb½
+=Êú*LK8%÷%Q‹5Ÿû2=ÿxŽÄ³ÆòÓ@²Yai×%¼¤}»âïømð‡-"4¯ç©Ë<i<Vrz~Ü8ΓÎò¢Õ#6ú©æµ-ÒÃ5£ÿÈ«–‰SöHr=*xvlÝ”#ÎOï>BËiZ,Õ± ôÒð¡hSýÖ ó Ç„
+þöu`­ä)bRÏ0¾¾ãe?ÝÑn‚ÜÈ}ç@×s@ÌßÒÔK–ö+Lõ‡&5§Ú³iY†OZ8;Þ&AÊ®[¦‰|St![cYüVÛ‡úš§"_á “á'ì›l¥·­Àlߨì^OÞ*³¾4'RrßNX´’ž]R¼k…æ¦ýS_þâí¶ïËR³B™øc}Fuѧaäœh;žwù¾gZ_Žà!]ÓË–Ç-$ºj«Qm#G(3ºó"Ðc0§6k®‡³5áb¡Y3>þ2\ùÇ ‹I, 1B?—áÕþ½âOËú‚…ðît[Bød;Ïý
+J9j©¶‘w,õ©H™P
+¸~]âìøçSÑÚi† ,Q=•E÷2ÊtYŸ
+UA<+aËJ Ôõ¼ûføôÈI¨&Á)Ae§U[ëÅK(‹)ÂÓ¨^©·{'žì(:sŸ­ÚÚ•Óð f,;z@ c|Îlò
+Æž×ÐÕúº}ý·L#—㮩çŽ38\ ¼‡›‰{Óúc`*¸ú
+x2³\è;ÐG1öü­†ŠÞs­vµ³®L;YÄ®ëášådx 5¤6Îöar?&gØ 4Ë2²Ô…ܾšèv¡£˜’G8Œgï•«XJØl#E« Z{±líßO-gÛ<}x»Å¥ƒdnÁ>/:ÎÛaæABpCé~ˆàÄkDöfr©‚oFÍöÈò¼®¼wOz¥ «6ˆóä´Ó¶‚Cö|¯PÊ+·Jì8ܽλ:‹êã Ú3“/¦š'ǹ¾
+UkM¼gqy.G“F•'HPúóêõ&N)Dð-[$lôD4~ Ew#Ì\ÛXR®Äùò
+ìäcHøjªä,'Å,nyñô@O}hžÅªÈ–BEx.ÆTfÊ@_qÌ髳šò±Ì¾UÍ @ÌvÝ™ˆßP›a´8A^ÈL†‚¤4-bÀháEZ¨ìFÔ«æ·íL°$Ío°ÏÙQ*-ïM‚·VÓ½_ÑÙ²øãàÌÙÁ’®e· ~J£Ë] GlRÑO‚ç[b•FKu&JŠø¸×l²Çxø œ•Z¤žk¶kí%鋵¾RµH=p“`ŠÅÍô!ÎØ—’V¤ñð KnKž·K&Ç#oë³¥3
+3'Ðè¥'£
+–ïIªn%ô’ÏŽº`Tç¹”8dßÄÎ åGD¾æoÐÚæ‘ÀÙ©Omêl3aÅ)¼*‚Š‡Ýg3?è*Iëå#Q²žD‡Åo…Ê*Gú|X5Ã\Tõ
+Ï8œœ¶é­³¡•ý ýq”
+{iõ•ÓJ“ÎqÝù
+w«Ó'éí òÁ£z×`ì½,£M®¢Ç•›è4Ë1ûc©ú#}IB<“· œ™œ¥™2o¨½zŸ±To„+°Ï%|÷Æp=Œ$›„'¯æl2þäâ#š¯;-väBÄ:4q‘ÞƒUZFÓÙ¢¾©­˜F/Yjì¡FÉ´¥ý‚à›©#í›ÄÄMÌCèæXaTÚƒ?ŠZôÓ½SbÃÆë•’ûø“ðKŒ=*m³Ÿrµ¤ä<½7äëºZÏ£ïÅy:z
+ñ-K_.:Ò ÎÙ‡Œ,H´_ñHä¡Š
+¡È)ÛÄWBÒcçHz,»é’©=8$ÎÁ6õ¶0cHˆÖjºöþ(G”·í+LœÂ’$ZFÚ×qc÷
+üYeUw¯áVCŽ726«Œvk.œ"°Àu–åi…fŽ‚npnP»Á¿Øö®DN´`o8£v#†8i³‡gÉð|û;í`é*z u5¥¸©é€Â^wûºŠf…o-£Rg´îu.ô˜Bô¶ ×Â@kˆyÙh‰µd.¯ïa±k$ŠÖ–] ì,a›
+~ ÁÕX|ÅÙÔ¿xˆš¤Qýiàœ\³Lt8îe…°W¹¹ú∠#ÉŽíò$ND­É!²q²xíKuCŠMÇŸê=ëÀªM>á^Ë,G R½-Lëô/¿Õ»a™ÂöÇOJ»~7KÐÑË" *Ë»ŽåWQÑLÜóÛQ^å£jd"‹n
+˜v5wpœÄ§§5
+"Î'í¬¶‡”`]&zâ´ lîs<so]7ô³?$ó „c_f{j¾l­³„©×l0+Þu‹?£ô{I=©•;¦¦ÅßxÂÇ$êÛ¾H¤¹º«ÖìrWGÃŽguËíá©wSÝRÂÍéçË7·£ÅfNݦS“Ê÷&þ[õùDtíYÌkÄ i[ûˆ¨®ä#»Û¡…KH˜íUmqO%ª&§Ñhçz:™<\‚j™*³CÕK]Ž5CÛm@ï8írØõ=Ù¸[i#h#Â.’¥]>u¦Ê…ŸT2 dÐÛŠI5¾¡¾ùjÑ€W[¬¿ ’k(XNõdUÕè{÷Ô7¥N&>…˜vòÓJaB¶ÖðüzÁh÷~ÉÈ»f÷WŠ÷ÃÓ=ŽÏ°/F³u^…åò8NiøR蜱§ì½òD8¥
+º¢°*f%èlòDÔBG[×}¤ãBÝ€˜@ž.à–õ<^]ånªUî²2‚Œ¹»…WJµ8™Fª72C/gAQåˆ{sV˜å‡}?V4ëêBJÒéÔÙn" ŸaR‘?× Íôvž¨N[¢ š¼ª¬±øù”*ÑèçeGSdÈ÷ÚWFö׬L>­ß½ËÂÔ|kcßð`SúaåO O¤æµäžà€½í°ØfÏ=dŠ€g!ñ
+-µÎËŸé”ðŒHˆ&hqÇñŽÄµ¶tù'R<9g*J¼G…ÆNW´7ÿTÏJ U}ów¬˜FU?Ì"%â}q³|ì”Þ°§FÃÝ4ß—¶Õ4»dËÙQú¾“N[Ýò%w ŠOmý°ÃÃ82ªÊO¬ WÍ…e¿¸BÞÙì¬'Æ>,úI“€¶Ðæ–dÞª1gÔEÔ É}Æö'] |rÛ9˜Å¯Öb˜·3YT¢@áI=šK—‚øQÍ!d'^kï™]…¢÷i$â2Õ¹ùÉ ,.ÏgcH§_“–ÑÊŽhŽå4Ĩn:ͶBDÛ¢K‚±‰ûÚØX¢=EzaËaMn¦ÙñÓ÷pìq†÷g#ÚÞÂ…9¥ßQ›ki’W“8I7  ar”½Mœ·ù>ý„Ôè!†€¥‡D˘¨XQX1Ò•$nE•YÐÏ)1út
+1[öaèf2{z(.ohÿÓah lý¶¾¨C€õ’åxì*.QÒ«¾Éïýóå8•
+BÒýZ1* 8¬€-a׬2âu?QêEvù½Q
+ÆfPò
+endstream
+endobj
+586 0 obj
+<</Length1 1449
+/Length2 6631
+/Length3 0
+/Length 7609
+/Filter /FlateDecode
+>>stream
+xÚtT”kÛ.)ˆ„tËÐCwƒt§ä0 0Ä 14ˆ ‚4ˆtw#!% ÒŠ !%) þ£îýíç¬uΚµÞyï|î빯ëe¦×Ñç–³…Û@”á07‡O  ©©*àãàáããÇaf6€"œ!¹q˜ îP8Lü%(¸C@¤O„@æiÂa
+Á
+»Ù{RIÂFf¿ñ.FPDõ°Ëæ‹MÏ|‰žgŽ»e7YrŸBh… \³¬uGßo|¯¯= ^V;¥û9L|¯=¾JàPöõ£½‚c•v>šjç¾r|€á”þ (~šqŽÎÏ?Ž¾bn¸gc´•v
+DïY½ iåÓÁÌÖk¦{à|d—_Ë}jk‚¿âv¥RÉ°Ÿú¶Ïj’ü©Ý'ºì]Ž+Çs’ÊË—xo¢žZ·±9½ôýƆ‘`ªÒô­´1²Ó»TúÇÌ|IAŽXýçó‰T]ÖWÌ=–±&J£X+‰6ÐÝ^ÞŸÑø!ÿ’9¬+zdìLzÐ!Áõ¾@C²OÇ
+@6#Eý¨:|ìò5Ÿ4" ¿ô[·‰Ž^8ëtñ©äJOT¢TJ¾²Íþj…`v¦Ö€¿ê5
+`dF6ü]ÏWÜ4¶Ju9†³–$
+Óÿ8û*²OÒä³Ûõq+ç;4÷¡1u¿Vσ岟
+\Q¼LÄñtt‡N¸bÊBã}ÌÔrト|Žè
+)nú2Ó\늿!›»Zøù€s&®8.ªüi× þWKA¼·\äiã ¡Œi0úÆŽ…#nª
+Lµ¢ø"·ît#­TÍdÂaF²-š7.|’»´;Ú
+¦‰Yßå{²7ÏøÖ&=æʵÖÒ^ Ôñ‘Vê#Ö`É.‰ƒìŵ¾$ê篹'MŠ·A³Êô±a(‹82÷GòÌøéÞrrë< »þ±½§±$¦¼ùè=úšÑ§¸ó‚NÁ÷CÇ‚
+F¼&¿¨/þÐ͆BWy³úì6 ÖnwM9Þ½ìûž‘×ÍKËӌêû¨g£}¥Ü¯\ç}ïß —¼ÈÆ
+’aÅÚŠ±ïò›'s®+IŠ¸8Üáz³A=^ÏØR”Ñ*פ \™žbêò:ÌòÁžl,qѼÇl[Â4µ½Íüœᛩi…‡ok<)Ú¶?ê’ÅMù*Ä·W{,}Åë­Yc‰ª V5 &T{¦¶ß 9!øö‚…»Âdôf‰™¼î~ß2Ù~Š—3ã«ðQ惘zÑ‹¤<••N¹y‘Ì|‹è\$¡
+z~„‰S(îË¥Û{ÖÜÆ_^Zoc˜OÅ°¾¿ÛÙï _Snø8™nW+*ß2k·Ö·\ÌÆŽR_Πû⠳ͤ,E¿g¢¥N³°Ü‡uOº²¾À/¡:âÙ00Ÿ/ªp¨‚¬õg¬røCýmQNi²Š°wý5WDé9êô¸.Ö™¹Ëïªõf?ÏYMäéøõëŽ:m¬`¸Ý›Ñd7Bˆ:-·ÈvÎñêÌÕãs^ U† D-Öwóʈ|´’åŒuºr5ñ„ ¢3 ÃÈŒql¼2y
+¥ÙÖ° +p¦^ÜÃL~/-¢÷ÎÊŸ3 éX[Ö}6‡•Pòψ¨ohkM•áo¬{,\=p¢ñ¢’™ÛO‡6ü–ñ:…Q#
+¦+†Òö¾¼z‚öÎÜ¿®mW‘ÛU{H2n²-,ìS`úušŸƒº,†¸냃d÷xq[?Jø$çßöMB¨ü”5Ò|™_nÅj\ÚWi-f¿-$¿†aRbu¨Sœ1ît–_žÎZu‰Gâ?¶¬eÇ\Ó'$l~ÂXÚ çÀ^»#IUe>KC¹ižÏ’¸˜¢ïÕvvÇL­žª»½Æ
+Ø̪ź¥{ÁÔññ©
+¶âŸ©¯;Ûð–Ä‘™DJIZkÍäÍ á–/—Ò—£Ë/®û? ªEá÷Ÿ`]­ks/sBYœï!AñLóuãwa÷©)rÉf¸"7ê$¿\™M¬3ùÒä,–rÆ°³%bú¸ñ©ÿXÞî»]žœë@TF½Ad&%µ3<äE„òj'UÎx¿]üq‰¢á´Å 1¦{š÷ÆMxb Rfl5î˜w…c±ÔaôÑAŠ;/„íÆjÀ²,–NÜÚL¦è§|—á5ÖKnê½åÓ³™»û b*}n†üÇ—ÜÛ(ÀTpѳvÛCŦ”
+ïô.„¼Ô7•® FŸé¯Z¶.[j%Ü’ `o"n´™EŒý’NR÷ŸÖöÚ›ºµ‡nìoÅÇéwÓ¤4¬‘HÚ}Ü‚j·îKš¨Çið3ôK‹U3EeÓŠ:¬”øt/`à„£$„§\ÓJC!ïèœI <w%YæÙЩ¾H}@¹Ç uƒ**ÊÉ#@~û¶ÍržgWðÃ9¹uåæ+¿Ä§“Qk÷¨¢g.*–zÐý™†ˆ Ûž^—¤C7>ò2Ž… Œ7±HQ¹$ÜŸ0¨;_âÂÜ:Œ”ë))Ï RÈ&³Ì[sÄ»Þü¢¼f_wÔâo:|éÜ™õâõ^qí÷ÿq8¾k=ñ6ðmfš @#rw]¯
+t(»Þ`û~X‰&0ó…N”.‡ÓÜ ¸â¦{q°G5b—;¡/óÙþ‰Îä(&‚¡[r.'Y­Õ7yë=¥fÎ¥õRõéŒlügN¨MA=•ÛÛ;'_„FÕž‡I-A._˜U
+éÑ gÜ£
+Üô’f‚fR˜ÏWÜœ½ sÂJ{rs1}ÈÁ$s¦fÐ…³s5œ½£¯¨(üž’µtŸ÷V%#n¤õDW<è5- î7¾ÙïÍŠŸkkêâýXœR7l§ó‘;¡&çñÊj¾Îs›C…œ‹jú@s…±PV?ÍžL™}ìK§~s>M¢
+zÎF6Sž` G\™_Ø>>|‰û(æ'£‘‚¥+Žûäyä;}Ííµ.Ð÷‹KÑ~š~§t{™xœéùk†’‰¤7ñ&œI³vò°ÄÈ’äŸi:v˜¿ Ú˜ª\¬<Û…)Q¶Yìz”˜56-æ| Á®Óª^ù˜
+q\ãQü6BäYŒ÷€_[7tD™sêÖO³e,i¸„›Yì3tî&6÷¾Äß ;àØ'#iôåÃÛí
+üž¶»ï®TÑ‚ YÙþõKª¥’ø¾¦‹‰¾Í
+Š!K ñƳâLô=áF‡õ‹»ç Q—T².ýõž³š^ü(`IµýF¤ìá›­o%Nº*SZÄFí{ºW]± ƒaQÔ Í–Jµ@WZ× ‡ow99i
+É¡Ûúë]úŽW²b³éæŸìIND–RÕ"¯¤gÉ3¤©ÑŸà]€Òækgâdýæ12Ýfø?Ì_ÖƦtͤŠù;uó[sŸ wâ3<°ºé¯*¾KÅ7
+úñªUÎz" M:ÚSy×`§ §Jªn¡Dg†Â~þIÿtÒŠ>1ÝöûE ¦‡éúÖ;ÌO?QE´˜è4 jo™“öK»á¬¸­£º‹„X4ž×‡D©Ó*ÔÜ4ñùÝuä‚ÃÜa 1åÄÆ:²*ïN×E­È £¦’þƒÒ™ï
+§dš,íš »Rƒ~š2õÓ;Ùª¢ë1dVê6~£›Ž.*jç¸OžUô³
+¿Hÿ 8 GÄ-ºˆ§F–{h¡ÎŽžWþ ŒŠ‚òg+œ ?³Þ£ðº0'¨ð°û!{Ê·¦´Š˜âÓ»\ÞÍ(!ªOÂ=AO9Âï Z9í„ìT
+'ôÏu}øXt?›Ìæ%zƒ%÷@¥SÌ׌Š˜OŸ„ µ˜Ì 4ÜZªï…,cO’%x¬åéoÀ<”…æ( 9Èx6ùU¥Î\[­²è¯—ëöE{cq1¾EvÙ8?'«~è$êëÜHm@«F
+’£k{ýæ­ásÔÐE÷™–»2ѯŸ ˜öªC?ï0Jà´P¢×lšæP•Á$ÂÁEÖݱ¤ýèöqWß9¨7™ÝJ«—FïµTÓûPÝÞÆ õK$Ÿ×{¤¯,³÷Iy¸OYkBu/cIœvÈO_FŽþl­lýÖÃÎ_f¥L^µ(Ã<}íL[»¶ºIÞOÕß>¤[°®HÁÑIëd'‰@*TÂÓ®yëŒE7¯Õ¤½Î²Á“S"C-êɔܶTD‰³æª;õ­»ùÜðrùôî
+®×”ïúóšâG^u«K¦1Z$fÙðPXMS¦7·}¡Î C»Ë{%BTâ~•/’gïhaS˜›aýOì»ûñ ½¬ˆ(\ÆÙTö̵ˆë¦òÓ6ïú¶ÞàɘÎ-W›öëÕ±l»‹DYË—=…ùoè=z?:E6ß—AÐ6§‹žü#¶“pÐJÞ±‘ç³fΤP
+ÉçÛv#öC¥œÂ K†Ö¼ã+øåc)í+ “ʼn•^~•DÚhS¥„÷†ðxçÊ^5[¨/0V¸xÊÑÒLr7¤|sŠ³wŠì-zàk…á+ž^â “é²ê€7;·xÉQöƒC†òæѱ­ÇL¤Å²|WijÔC8•ísüÏsß~½Ã)=s2,\?'rÖ:oïbr§WxV£C*·y_âì9¡fÿ¢çn€T¶„…š$ý…³FÚ²_í¡
+YOÝÍ߸‰Â
+endstream
+endobj
+587 0 obj
+<</Length1 2096
+/Length2 16433
+/Length3 0
+/Length 17700
+/Filter /FlateDecode
+>>stream
+xÚŒõP\ÛÚŠâîî4 îÜÝÝi ƒ»CÁÝÝ-w×àîî.Aƒ\ö>’}þ÷ªî­®Z½Æ§s|2%™’*ƒ°™ PÂÎÖ™…‘™ *¯Â `ffcdffE ¤T9[ÿ-F Ô
+¯æaü[Éò—ø—½=ÀüÐd|ÿCðr2vœ]€>^ÿTü/B`a˜L&@ -Ÿèïb ù¿ð{óAî
+²ªÒ*tÿbü_ˆˆ;À‹ÀÀÊÁ `ùkȸÞ_|þ7Ì ðòK•ŒAÿ>Ü?"JÛšÛxþÅá½xÿááúï± ù÷ÊÐþ7ƒ‚Ýû,4F_™ƒÙôýÁòÿyþvùÿ7÷Eùýÿ{ kë¿Õ4ëÿÔÆ6 k¼²‹óûZÈÛ½/‡íÿ5Õþk•åf ›ÿ«•v6~_a[ ëÿ–ä$rš)œM-ÿ5CÿéÂ{xk-PÉÎ ô×e`xoØÿѽ/œ©Õû…âôÞ«¿UÀ÷}úߔⶦvf-+'ÀØÑÑØá½õïˆàÅò¾¡f@÷¿GÀÄhkçüîx§ç0·sDø«£œ
+`՜į
+õr:ý=¢ÿ²ñü%´{_“ÿ ÏÂò^„”ˆå½ÿ üžýñûD39»ÙýCýÞ~—À÷’¹þ¾§tûGwÞ½Ýÿßùzü ÿg;L]ßkàü÷ýõ¾:ÿÁ£€@w )ÂÒ¼)_àçmß… ÝöÆf(÷4Sh¼–Û]žP`i«3¾n8Þ '÷ ­îˆÓÜ
+-“¾x4×Á†´Ä+·þö~6ŒU™ÚkEXœÄ˜(8®í'†'bPÚ÷~qðÖð·‚lÌqpáFQÊÃ|pë“t¯í/[ žßSÞ¯æ”E|.›fˆTÿ¦ç_<K™k’9‡GãÌ@ ÷ãÒuöön#{âT&–Áç4’­ÐKg“5êqÎs­BÕ© Ÿ_òctŠÊKä0IwÁ«¤pu`ѽ™¿4™>y•ñ5½¤aÛØ[ã:ºÔÁ²›“¤&Àܯ)mÄ2t$WÄ®n5ŒÀt®a³v˜‹¬µÝit›N&Zæ™®}Ì"k[ž|iêöú]ç°6<2ÀpœÜò0Ü8²Óí£Y,Ø/HdáÆòQÜR7|u…78ºÌy ¢K(…F¿ìšÈý mÄïõõJ䉀e»€™Y‡º|”èœ#Çû*ʧ²þR¡cs}ÁÚ C?à-€Sáͤ3ùò²
+{ñ¿ »müÂú£]ñ )m-Š2còƒaûp£ÆÕ+¡ªÚCÞÏM°Þ…é±²ŸS;^Ö•zÅì}M
+ J¸,up/«"óŒFr§´…õŠ&†xÜMÝ.¼“YàØpÄà ¾ìè+¥E‚IµgȽÌ(~*½‹¯|kžçºK\jNÈ,çÇ´ÖEÈý=ÈåSo<ã%‚}ù² 8¦´x?'î·ô.-²+©Kw¢&ú~ý¶…Q;qkßo£È1SÐmJ/_V¼›Ÿ*Ôdu'=äv “3›®Ú!´;ñÝeÑ`ú6$" Tóë錌9®[;×Îó‘âìqò~ð e_eçÔ0¶ÛÖú«¾]Yï ÊðEPÚò'ªËa®ˆÍ¹ .o=
+Üb’\éçý×®åu
+ ¤œ«éœ 64¨¾¨‹jˆ\þôئO¨Qs.¸¯ ÒfÕ„’y)úã“QÚ l_nüF<“ùmo¦u;¥’8k./‰†0­ªˆÓ>Î9f™h–pþÆ}¦5_•×Ï.Dš-‹Zж0qäp`)`Ü^*‹vqèÝ}j¸4»†š—&¯~²Þvòˆ†˜ó3Éšè¯D±íÈ»ò‡oœ_Êsj Úï³Há„YNr™2Á$®HØ<H>¤î˜¢ÊË/LJö뼬éBÚT¼µxN|“ðƒÇ°.{,'ï‘ùT„ZÔ‰Ö!ò9РZUZáÓç^ø¯_¨`à4ᶷJDB–µ+e2¶ËAM}q€*Â3Ô×ÒEǼù¥œS¬¦ôvëóˆ
+2F•"£bÖ&ˆ¾›»|ž$à´78È"[@O`Sˆ\bóIVâA-×äwJl‡†”5µEUwæ²ÉteäYÓaÙ\ÒÜO½­—GcveÜ€ržm¦âÑB@œ“ÕYž“YTº-Šgl7leþAï<‘\–'¾~úe™#bxa^Y€«‚XG„¼$…´è•*^xÑ‚pËÖšÓ<D>ZB±þš_~ïDi¬@1JXoÄ58Þo}Ú:ê þA{o¡ŽziLsyr/€ª+Ù_ðŠÆ‚-M»À›dôˆ"pöy
+KÎe³#x0^ëæ¸7o¯9³»T–e"Ù O0ê²ç«.²š¸%ЙœK ΀x–Db£?ÖûÉSÉH|wËùè¸ìõ
+ÜÜñ1´·% Ö8Ä«ÆVã±1ˆ² W›“$ëï·.¾Ð#Y7bN³­r»0Þ¸Ðï,‘?Ý|⻤÷󮛢D°k­ÞÈq‡bNqúŠ>?„¡É"á>q>{˜¼°xµ‰¬w×ð¸­_FŸÊ$×ÿàé‹—\lïzÝœI›z·Ø_Âè(ÂFmÛ¤-Z)ÊòÔç\f&ôᾄlÒJ!d6Bö;xÎ _~×ñl¼µ¿Ä ââ7…›ð"p¾Í­B³×Šžßgàq•hÏÛÂùŠrwú11Ë ºŠxøë%£‘EÅ‚4Žò,7Û‡û(±•ãÇ%
+í”Úû¶§Ðü(ÊbÚɧØØÚî•xxNu"xBÀ©v*IO—5y
+O‡œfnI…`Ì2 ˆ5ׂ¨XÙÝ0J­=÷)fY5/0¸­ œ*ò˜¼åï‘+ecŽŒiö~”ÀÐ_c*2ò(û¦\:œ §œØC(ñ±l¤†syh 
+(V¥T«Uh‘劮†£SI?Õu,LÒ¾íÇ<Óv
+²\àš/ÀpoÚÞ•Åuãp©¤ÊMæ™jv—HuŸÎþ¾ƒÞ_%0Xê€)²ŸIÚ‰§Ç`d³àÒp³Ú{%3Ùø²”‡¦…âÕM§$¿ÓD–F¥õ ¿¨Â°Ü>ÜÌ´ [¢Œê*ËY–i3ì}õUu|õ0æ
+û™†YÛi‚×ÉÓ\GÃ8‚5X1Z˜´Õöú¼bÄæm áJ\eÔB-móâ·YC¶W÷œ{;£Ô3rê•#^r!0no|h€è¿hy¢hi”Ùxž¾cÿð„TÉíâ±Jáx´v“è‚`îcêÐKÇÑíáKö²¦?—ùDøÐuŠ¢N_ ÞáœC»╺ÎéP ê[¡©2*úKht¼:LÂà|ªp9Üìcä ݺêó È
+J—ÒÑ£ŒV?s]ì#AžôÜ1ÀÛü)éAùEAm»©M
+ÜOZ¡v¥.„KØÌ…¿nh£ƒ\*¾ô¬íö^·O]œNch;¢‹ÝÞñFG.›‘ÀªB®â…Ñ‘NÊbè±h·[ŒË
+†[,·'xtg‹]ÞàTðxdãðÑûÔdKµ(vÝ,†ãt·!Ü#ò= ¤i’ÞÚ>£qÈ—Iw™Öûx[’tQÄzŠmcªOôĸµjGÒµ¿TèðŽ_ôMôg°t^×[û-»Á\„ ¼¡*NI±çWCëÒ –9 Ï™²<¦~_æb !‡ëV‡£MwŒŠgå÷¸tCŸ“"åzåŒq1|>|?ú¾çÓï玺¡Ù
+4°Þ³göî’­mZ¡aÑùìõU{‹Ã(WÂ×0ݽ;2
+‚n•6JFhÅcB¹Q¿>«f<¹ÑV]Z`†ÿÄv˜åÝ4ûü¡°¹z;ÔÖa±0£ÍÉ™¡Y(AR’+z‡¼Ò[y2b¿ìi síéäôÕ'¿On®N3¼÷‹yÙœM[q0ÛEôü¥*"kŸ
+×1™OØLZ”Ј)Ôßá3
+*ºÅá÷Šv/šŠœeŒf[•Bd ɇÂU¸²ˆU«¢|”Ϋ£óA­LÐûªtMšÝȺM˜¹
+ÉÓmØ]¿vÍì-ûÅ=ÀE¥Ø”m·÷F¿ìÒ¢XêâˆR!Ã7ôgƒ²½__o€GuN’¢}N|ÍtfðÄ,!C·ÚyÐÚ|LEÓÐRD³¦C6– þþ|ê®(D:’•[í9ãŠ]Ga¦ÏŸáª
+eîÀqlœ”šó¯~žž ªk–!q† BzQ)Ó«Ÿ¼-Áy’oXðÌhc=8¥æ†5&ïéA˜òX°@3¯Î‡ÀÀ†ô¬.é·OÊ„o ¦ó \>1lòàä±MheßÈ[¯»êôc¡ß7é£ÀPãzyd©ohŧÂg2ä¡ü}}Kµ@Û€N!˜œy¼ìçÀ£3ŽÖà¤þAJÌ´ÍEx"‚ç 1n(ÎBvs’KÐQ''㙹£ªtÙ²Ú1QVÓ¬xÜt•ñ7¡øÜáLZäp›ú[$º,Ä¿:|d4ù88¾“–ºvx̓¡\ÓŠÄpWTtí|^¯¹)—§8ešÏlÛß´±N}D%-o(Ÿ°1Žàä—r×è„$òQ åÆv«³zí™QÜÿü¶3¶‡ê?W0ßiU‚Öø¥RÀ—Sâq8wÈd¸½—<«„Ýlݘ%£²´}Ä]#ÓPï¨\úìïÈ¥§_01Àn<T¿;´q
+žxD¸f%Ó,_{,4®š0éýñeîu÷J
+N :Obã›»rØ¡oWeóN ÷´ð3û(Âcl2´FC`Só阥WÅh:$2EÀ½Ú,Šn5‡œŸH%ž‡hD\°€Î¼áv$Sôx¼É+ëš”ì )õá8”Aç†ÿSïIÛôªäŠ÷úÕí¾f~d$yw›ü€ØLܱ¥ðZ´òG ³” 𒺃ÜëW¢ÝJYÎMïTmGˆï¥+¼ sŸà´#-\5aRç?Wã×IŠû"Aþþ|§‘À⯔¦§rµH¿pð¦„Å~ $´p¼~ë!¼v¿p¬,'\|ܬÀšê!=—€,Œ,•tj#(N¾¥RÛd5«"_$qÉ‘Ù+½R­_–_ŸÓ|Ëš ^V™‚Á>
+¤3ÕbÍŽZ\fi9ïpÚê)]3G§¬ÈÈèplÍM*Åáwh$ÊUX}ª”kâúPžã€D”Õ€h[ü
+LTlææ¥O?‡‹ZÒ+ICíÝ>;H#¬©,üˆàC!zbn¹YÜ—¾Ž*²A'5@ƒŒ¦;ñUªÎËÓì 1ú),M|u~ºçºàK¤ŽÚF¤ÞËKy„fãH¥Uƒ ±LË߸ªÆ@Ž:`Þ’\™Ya7 õqdy ͹‡Û=qzÜιñW1¦Ü9›X0+øªI+Ò.š/ʳÝÙ|Ñl}Õ}TnŠˆÅ Åûž‡ãxowthþô¶âL9L{¯Ó|¯È`bÖš¾ù”ÎÅJ±*8Dÿô¯3%d3«.Th †äHºL¬A̦\%;ÔíúÀ‡ŒV°=¼ÂêjYÞW@,]&cðÄÃLu kæ(¶YXo—öÁÕò‹°|d­ÜÂLÌÑHl|rB ÂžƒùqaMRÈØÕÓ'‰S¼—ÎѕæwÎaK6ÂÔϬ/W³”Þ‹â–v$˜ `0u8´3 š/…>Y]’Þ“>§¬®™”=PhwÊšõãgD8¾®}ƒß
+l;—bV5H©\ï†ÃÃÕا™£Æê­QÎO¤Ú>xí_Ýnì¹ÝdÂÖØžÐÚ×â Ö'`,è—‡¹§’J²[p§ó_önŠ¹Mï‚ʉg­™ãÓWú=P¿˜PõÿKÝÔ LÁxõ‹,qðM"ðœË^–i•¢á—y:§arqþnB1¼Í™(íŒg»
+Jb™†Åµ‹J(ʉõ^j ‚6¼×ÉÏo¦¡ZƒN:b-í/‹y–™|Õµ_X¨ÖŠpË]ØxJE!“ëÇöµm¾³“…¨&%èäÕÑÔ•øˆÜ^ú…ä i+±Ú>MKô§§.#7ßEÿ2 T¿ÿUB•=y¼±[˜7 {\ÝÜí–c¢Òô‹ÖEAì)>Ú—…¼Ì%LK|vâÇmüà-ï>5õ’-Á°‹Ûq¥H?„ëä:5&¿Äs— ÖL(}u¶”Ýdö¤i  ”¼}=§)zå–
+íÒø=Ý^Æ$h[|‰A$9oÝpC¡3_»G;[ TúËž©¼õÎÂÞ2ZNˆv  Ãgt$oGhŒép'ýØ MoóXŠ 8åE;¤ô¶CìÁÎnËè
+
+fê• ˜ŸehÓáU[ @Ê»*ˆݶâM;Ì]fPÍVÜÂcdÁm±‚þ™Mù­éÅ€öwœNFI´<ÆùÅXàhxüœvÌ÷â(| [¯NZÑ·“f_ü/85ÅÁ3£Ëà‡6p¸p"Ñû“_šc_pÅrŠûSl¿j$ë@Þ·
+è[…”ªw4XÙ—2©Éöý1‰¢y]±¥•ý¯•4³~‘èmÕRòžp&„žq£ˆø‰DSÌ [Iç<pé·Z{KÃê|v 6¦U’m¶Î½ZiÉið͌Ҝ7â
+njtýU*óR‚Ú,§% ^šÉ‹ÅZ‘| Ê:”:™u°Ž0Úí£´%¯õÆ’° ò+‹Ôojcy–Uá›Æìç¥è<Y>Ì »T¨…‚!`,t2Úb:8÷BƒØŸ f!®><!öáv±æï/È¡­Ðä{´Fƒ3ßÑ”]•gÕeseκ f¹òñ®™øð¾DXEñêÑ&@g¬³ ;DéDÊèo§2ç.»5ô²¥õ£Á‡h¤¹¤šbjØ?Ös·™¿…ߪ;Ðn©Ú¿£¶ÊsâkÓ»ømüÖÙYû-I…
+eÜO°¤hîÎ`Ÿ‡uÿ Ô‚ÄV£eˆšƒ" £oÈÉíQ/¬ç¢ÀÃÄtÑ_GÄ#ìñ>2]Ûœ¨±\|”:?7Hhx9Ev¬›¿ú"± ³éûl)¦üå75ù„‹Î~(¶äV­ïª÷œ —Jµ9±š~F‡ÚÔ4Œd¶
+]Ù0®á´líÎWüë­¯Ú+Ñ&¦È0îˆt-•"àÖm±gÙݯUÖ8å¥uí~ýÀ}í‘¡ár¢‚…ñWXB:Ù/#÷z `´´Å¡ *"ª…ÉHàž6³õÈ)²hWÕ£š!ô~·XG&*S ÑôgñZŽ–ºá³FTßOŒ Ñs»@TœÜ‰ØÞ n4`D‘µ]—]1Sƒ¯%Š0»Íè`ô'¦øð ûˆÂDšVw¡®\
+ -?*¶z¯îÕO°p1FÂ!ƒn£QÑž‘[‡×,3¼ÞK’ã`{ Ø—±1Hzí9ªôô(µ†)é&&&½TŠ§ëû AP¡s -Þ0ØDÿˆS%Ùy¨ÌFð ¬I»ÕÒfW/ *Ÿ¤Å›
+g†,æÎPª è‚T“#´ÒiJàâæ*j³8E¸†Dd¿„QÈË‹ÀœtûÂß){T ù½¼«ï*¹éóÚkàï!짟y¥÷/ñÜ#Ë
+x=&!"œe¨€óc)Z¯2Æl…­Ê‘)¤5Yþ‚‹„”Ðøbúè¦ÈV, øyÐC£¼¿‰G@Â}S\
+Χ4¸nåø|ÄnZîsöa¨lkûÔ\çj?‹¾u¬ —¬}<å gG0<Ç‚’6¹¬£âÉy0" òÂjë¥X\ 8 ½ A¹›¯' ©‰¹æÅüÔ e²¼p¦øÑ
+ʳ%Ýæë7ÿ¦oʪp¿¡Œ ÙŒsEWÔCر
+H mœeñ?¤ó,ŠÒ
+¢I…¯Õlåø~7G‘9£ ‘!=G†®ÓGÄðÓj·gËÞ(Áfá‰%<÷V£ŒïX€ŠO²TÞQ›î×¼0\™þ$¸2Øbð
+Œ_SÏ‚Ô\÷l($Ñât˜-©±’BkÒ…Õ²í_ù$YÄM ï=ƒDÌÌlÞN‰tºçÁŠZC[iëà`È`ºîIÜ»=Û–Õ\Éõ/[ÎæS$Ï `¸ÐÏ…Ž’™l|ô<vÒÇNrD¾kKøB:½1…ZN¿„ÃaBÃIÔß"_ÞÙpèÚªn¦–ÔSkY|ä€VÇŒIý$ØÄHH÷EÃoKX+‘Ó iJKæíå\0Àˆ*Ä .×ÿº/rðC½
+ÄU åëÏáþ º*Íq ±jûUœ 2¢N{ël_âùkì}
+)†‘{²³|:Їy;fûÏ;®¼ÒQœëzw0#ãêŸýà?ŸY¥^CXW}ˆé\°áVÏ€ö,ÈÐY€5ŠÌúª²È§ÍïJ6mFœüV0Xi÷ð½@”"Ä+…xÃÊUD7Þè¸\Ê‘1‹ïëS+ ­<c˜Y÷œ5¸ö^¯Ö† (ÎËS$dc¨ÉŽíúÔqR;i­ñ¥Ž-dQ.wôè&•¶ÚΚ¬éœÆiÃ6h+_OÉžëE¬+ÇùY1,ò_´È
+Ûy…ö`¡½ôn/=hƒ]Îömκ’Ñ~T:—_/÷}Uô_a)¬´šlPáϪ̙q‡ÄÀ$EK¯>ý8X/»Vá"1…%Á]vÂ…¥N”€Bð­œæ™GaªB/ªWƒ6ý¤£›–N~Æ6Ž×cnÎZ]1\?P¯,ešád$x6cMõK3ƒ;™‚È:EV'4ÈÖ>ÿ“÷&C©~ðcÕµô¤q-ñ!oTœ7)ˆX©ýƒôòøb¦!+6œ<€ZšÉâ(Ë”‰šÛ€¼pp!C.ASØY´©Gôs¢ßég€S
+{@ÓÑõ'7øy2ò'd,È\wû³Üõ—”X´šÜ sâ”­­êÛ^Šàh95¹xÔyaó9Ýq—œ.&u7ì‹h3¤²kÊ! gÏÒú·6½À$Š‡t1¥K
+V…òMÂj¢í‡/ÈtüUdÂú–‡ÞKͪ³‚)b§ Þ·œ;Æ0Ð\ݧÁyu»!FgõU©3”Klv\
+÷Ä&«ÚJ5\<Xù•ÅÉwˆ U '×ÍÛrþivÔMÿô{ª1øX.µüu€›|ý­$9~Q®ÐIæ†Ü§“ÛKë±€$j5Ém´>ÞŠõ„D‹+ì%hºˆ \j¼xQx)Ï2¡êPÚ ivÝÙ¨íÂt,øª¨  Ù؆•”fÃ^€ÃµGŽŽ9-ØÉ\¶|¥ ûi]PGnÛ HÕj"=HŠP”¦-Ó
+àNµF=Õð‹A®Ÿ‚?Ý@³ 5„ãÙ7ÌtÄä­v:¡DÞ±Q‚S“Ú¤3{Vf‰‹>ÃsÚª¤Ü¤…"ê«¡ïwfCrþê7ÓüxTep¨oN84©ÀIO8bdéÛ' ¨ç¼×î'¼!™ó
+é"€(©
+ΨO ûüæ®y(ó‹*¼;mòÖ«gvÞÐC‰Ìât½½¤Ü€û)ë>)DyŸ¶ÍUߎs'Fk[D5,ÑC ²§ˆÓ8Moòû]¯»ÀqFïšf“…¦‚û}ù;ÕÁ`¬Á 3HŠ
+êNrso•Oƒ€fwGADË0g MrŒÍ· 5nŒg¸è²êPe<Wñ{jÔŸiÀ%ìoG´Iõ”V¶Æ¸c²%ÆNiÚ[Ô #3?ð±ëEmø‡Êر2Ç«j§rµtìö‚ŸÖ‹ t¥).p
+‘ì¹/±:(þh®w9"Tùúò8ã—É8Ê_HH ¤ÚepF×÷‹oãÂ^nRÔ‚jhO&¯€ú ¦¢r¶Yñ·\¸Cs‚îî0€šôÙ¼=}˜uжA¢²cx«U!<Bbç<µŽ&cy^¬AHþ)Ù™±
+Hb-ij*ÒŠ¬_#hqþ°>`5ÄŠUwÂãj)E\þý4'Ñ3 o0_P Žù†8Åžò‰n…ý( „¬hkYnhŠë {üÆêÛ¨v~÷•Q”büf@™Ì·1ضPC‡2ˆœŠ›i8Y£±j²GÐ[c Ê<>B·Ü€yLÁ Wíå–‹©Aê|}¢xßå ¥6&+r‹„Ç}çãóÍo½`Cç×ÝõË'(Z²‹ý+~“üë³Ë5º “ÿ'«TüŒJ?ÙS3‡²)Cž
+7»eÿC,êÌù¸`Ä4çŸûW&NÛÜðµI•)ä'€ÓÁxØl5¦ºQžßÔ0æw 9âbRËçG—Î0hGP"ACôWè¾@nÞöë—ç”@9\þ3}©“ ç·IŒ¡‚§jøþ?„W–´qvà´qI.5Æ‚Ä!g$ìËa¯©¥<J_ʇÖ îtRã[â©ja«N»¼±: ‰‡æb‰!ôIltWLÜs:®ëê€^8pñºÉ)§L9»µPz‚Û
+Ù™çs¡û)¯íýË?mlªZ÷þ/‘Ö¤à«f‡ßpšgŽ"rR²Øf¤”™åqþþ}ÿcÇß™õQ¢
+‘.½î{ U)e> šµ Üÿš+8É+qÓ"“—A&öûöƒß°šTŸs€áZ›Ýa.uqÛ+0eøöÛb×¥ûIC
+ü<Êe eáÅ/ õœ NŽŠ0hDp&ëE÷ÅnD6&Ž¬ eµ¢íL¥»‰õL•Ùù¼k'zOñ°aB–wçÿ@ 2JJHÅBÿÑ÷!oZ.ù¤¯Àì+1Ì:DùoŠuú×9þ©ð¯
+þ8K°Ré7».·o{–âî¾ @Þ¼b"‹hµ
+üŠ]ô‹4ãCÌú“|ÀS¯è­ÍUðUÓÕåý(>¥(¥ÿô¸©‘züO©óù¡‰wlŽµµÔìD.“ÕN·NñTÖëVEçò@ÂCŠð“ œ™ÞÕ<žÃZ_ ~5’J¨ü
+endstream
+endobj
+588 0 obj
+<</Length1 1451
+/Length2 6241
+/Length3 0
+/Length 7230
+/Filter /FlateDecode
+>>stream
+xÚxT“ÛÒ6"½J5 ½é½÷ÞAJHB$ôÞ‹Hï Ò‹€é(Uz©‚¥ " E¾èñÜ{Ïýÿµ¾oe­äÝ3ÏÌìgÏ3;YaeÒ7âU
+®(è
+0v‚"ÿr!PÞ@
+Ú£¿·¨*
+_P
+†øü–8€ŸŽ@¡C
+ø]=a(¨:ÚñÛ&òÀ‡8þ¾ ‘0 Òé_AA4Þþݯ_Æìäéá×ߢAoôïõï»ñ€ðÞ#@RÎ/#:Îëè¼y?ᬮuÅ&YôLj Øæžù;iãæ¨M»+ÚkîdêÏWDM½ ã:8÷yô&/t%C½
+å=5ëR L‹¦+“? •Ú†)ÂM ™K^mù_RäzÒîK¥åÕËŒ,ËòD l”Uu=b®úÑœžC=e¸ÛËP)}¾;Ï@Ù Ÿ†hFÞ–'j$¸Ó…Œê‰½lKAã\ß³²!Û{!‡¼¬1¤îçÂ:÷¹LbŒ
+ýb4l¢¯Ñàà¯5^1†¤$8³¨í(Üçÿâõ&qª°õrž±E›U¯P~/[=<*•LzEŸ=AóùÈR°Wò,Ï
+9°+û®¬×Ù¾˜y!o bO­‡ÓŠ¹³‡Ó|¾¥sõÐEO†zÿg•ü{@Jù2Œçƒ>Båñ
+õgÌwÙ\DbxîXV‹L8_Î.^ÏoÏ<B´‡Ù̱¼b‹ÿt|dM*KOÜ|…le‹ˆxß´¾nÙÃdü©/HxŒ¹V}°0Ù°FÚiÄ\(•¸~åiƒa‹¯ r”-ª(CºTä_Ê6ÞÀ«ÉN¬Ÿè`Žœ:« ·æÇã ô™’/˜Éà~LŸ%ºu]Ž»Á‡–6g>ÎúWêV„a|ubEþ¨Ü9Ì`´Î­éS…m~ª6]Ü ïVäXŸlËÍò`îÙ£
+a©YN$¢É7z1^=¶e8†;£ IF
+roá“ÛêŒÆ_ÛñÊ7à
+™â\Ó±ŸäMÔOžV ŒÊ‡Š‰ÁrêÍ)±É9Â-Â#ûÎ\tÍš,^ï«ÎKo+6dì¸4,õâ®îs,ÎNØͳ’`*\]qhLj'Þ¸†#fÞ~©xHcð©²&¢Ð÷)y@jâ¢×}²¯ÜAIÅŒ}i*M „w/°RtöæøkN¨öPó‘XWꜨ}¥Æ/݃-f5Ñ@‚Ò/„¸ùÖM‚…
+ÔI¯ãÓ¸¶ê86[Mg¿­Æ©•WÃÄ´èÌ(üV<
+l÷e.Õ˜ýÙ+ŽD™ë
+jKîÏŠº]†`àÚÏ”ˆð˜˜Õx\ˆp®5Ù×:%÷q.lã»Ãƒ3vÎm/X÷þå7‚^\˜²öWK,áгf}^8â¤ã¨“]zÒ¢sÂûEÿœ(¾@,4žKEäA&8ú[1"!ÃßZ©R–å'–ê?G¦É®çˆ6Œ™ÛÎqïxu/C÷ÇJÆjGâ‰ýZÞŽž¸åq Ú…ñ½‹y:Þ³WO mtòöæêÜ•'´f¥øÂÇ\j—Ô^aûÂà”>˜vÓíõiã0..2SÄ—Ï<<‹~zìç·ÏôEÆ…û¥§`A­‚"—ªªÑ8çÁUExtp?êJµ k÷Ýc_%î+Ì vXý"fîi¾l7/¦-êFiø
+ôu=çÞyÛo•ú ˜!\ùÊ»°7·ZU®ªòïõ+Y^_=ôfÀãp1øÝbÒi,‰p®Zº/æ’ß»¶d;r$¹ÆV´0ÇžPöJ¤°Sœ¥¸ü)Û¢ïpN.*¤8öÖiq톚kõ`.™6³û-X*0,rÞœNÜm˜5îH#íÍNZÒ_%ÒÜûz´c£ -¿¶*=”DJ?]nêaúF±b}‹‘ñ
+ÓÁÂeë”;ÝŠŒ¦'A,‡*EmTIÎ2ø­å
+/jIÚ•°Í2äFŽ/…ŸžfºÝ‡Ô>K5øœ‹m¿VNÉïv|«éø½qª{—ê”8¶íÏYÒ”nø¹Á;Ü›"W­6?)éÙî|œP×£ +¨ØèUã^Þóoì\T×îæ!Æ·àG(iºÙx—#~<¹
+!WÎü‘ ‡“ÖÚýôµõ¢sßµv¬‹þ•t$eLŒyülÈUŸÖ‡-Å*îêYÇ_UV¿Z¡¦õ´èŸ<g¹`y)CAû1l.On,/ â$±®¤Í Ú¥ŸÅ`åÒ T§ï¥ÍÞ)É—R?_˺=äáÖIS'Há|] JJKÒŠD2 Ò÷ÕØÏÖ•e´¹qb×pžâü̳½ŸCZÄY?ËÑz‘[ÒtWG§ ¿©!‚Ð}À‹­¹vøLiõ“°.F³¶%²ÁÛXßÓ?™
+ÙÑ6Qw®Ÿÿ˜›÷iME¡ÉãÌzÕï&çúÌíZãQQÜUÓ]1r9*ŽôS<(˜Ž.G»QÊÑWâ ‡…oR<ÌîÅ÷)»YÊ­Ï
+“xê’/ž­Y¨3Ø ¦6­·«ú·x‡ÚXLåÐñà?cQ-—¡®¼pdJ+çv„ë;•ÙJ¡¿Âª*ÓÖ38 sºpZ¨¦5¯ïÔ¤ÛhÕ‚­1l»¢„whLå·2ípgëŽôLFZüUè-»‡èoeÁ÷šì×kXì ïà‡á.?*!]×rq(#<5Å„Ÿ“ì6y­ívŸk-™ùçé̬ËÍ%>©Ð9²þ!iF#EAêu?)’$ë¶ùºÔíÅû)wbËÌÉùô×4¤ä
+˜Œ‹c
+ ü6Qÿ¶Ÿk=nÝo€9jv/Ro>™6Æ•ˆ/þyBÍáC«.êÉ,„®´óƒÏx?Ùöú:kÈç‰^KÞ'>Œ|¤üôžCr’X/wµAn™ýQ+Æ1»¢»¸§b‹˜\>>ϸ: 0Ë<efÐ
+°3Ð
+üXôvãÈS9*/5–(ð˜-äºO\‚ïú}Yû–=­—"ˆ;X¥›[Ž`H¤4† &qbÞª/; w<¹£¡º%)׃J›OÂ12Ñ 9 )¹Z•|¬Ò“ u1»p))ªèÄ1¯eyÀPJ•GLÙ#mRörNwI\v^BÎ “DËd? £ý–1…b7OSJp«ˆÕênâàeƒãÅýû­â][ŸòGÓÜøF’ß>—@Y¦õ¢yl…c‘qúó¾7Âüd'›)[¥Oÿ©˜ªâÞDŸ³>±ÄúQ sîÇTŸ§ñãý ú 'RŠ6‰z©Â?º¹ï
+7„{ÂÛ±X^­j íÞØêá@~ڽÿŸÅòzÕ.,W‚Ò€¿¯ä“N$$_nþÍàÐît]Ó-F’/N›XÖq¥ö‡Ýw®wÚw«lw…¤§ÎÇ2¸±I¾ è{*ë¬&òêch4 Vèɳê$k„­ì¢J›æ½p£fѶòÛoLõ阪R ˆÜŒs»h|2“uȬx ™<ïk>FE7WÝ´:WF•ö0—5~>9Hz_08dE9£çT€™`AFÙÀ9s¡\ý™ú€5W=åOµÏxÀ ²é³_¢ž/­ªEº±={lß©ìn«¥èä½H Wž•)'#^3K²D"¬qÍ{ì¯êΆeÊ7—½u?=m
+ܪåa£w,/ .§”´OŠŽ“[¨|²¼ï|ì*eˆTmYɽÍFı©’*;Ð,e‡MÜOàuÉz~±ÖØjôÇúk3ŽY-Ó„ÖùÉjN„oÜ!ÊËgVÒlLåiékKñÒÌœZùÜž{ë^”õ<¬Öç#»¨÷ц¨ùK%’ne-F=\š7ѹŽòÞÖ¥¦Ù#=V»ÁA{ñ‚ª?vmˆ„½ªï ®ëåzM×Ò7 Ýò"À÷»ødܲr1"°ðÂþÁiî-«\?߉”Ylˆ`õ’ˬH&ØPá‹G¤¼’Ìm_3ÙîØMÙ‹äÚ-_ùÏý7­&kx¿ÿRèU—ùgJû*Ú‹UÀ˜Ø|ÛoËWD¿ûšŽÇ .Ä^êôÜÜ}„Ñ3†ù™9+øŒÝó`8€’IvIøR ñ uoÇs›Ùi÷8g³yý_é%¶Ö齿"1,ïi$öy»½‡w?Æ ïÄ[Ñq2y½ãÚèº=?—y®–kxê'ÕZŸ¥á;ûHeîö›‘ÝX7r‚Wò8ò=¶×Ï„Ó³`½Ã±(£³Ï}¬ ¡ûœÛün†ƒç+ ¯+™ï 5yâg©@RDιûêe–Gì´xõ­eß³>nÙǼ¤=9¬3‚‘8÷Ÿ’hhýp½h0HVBÖƒXùȵüéRÆEl]mœQ©ìâòl@L…¦Iet¨äœ¼¡š AÓÅ’Ó´& BS-²C‚1soS™‰» ÌÚž…ë]ŸJ~È¥çwÙÆj9v¥UY°]­.ÏÏO'~Ù•Ù#K³¸—Ýxzþöp—GA>¬±ª—Ο'w5—½Fh Dò5êrm½4nk
+©zAßÌ–ñ¶Já©F¯ iýù Ü×Û'—æ ¼¿C¤»ïIé ï»)9VïÓŸYçFd·i,ì¤,Û-_NõFºW.•x¹w¸K¼m7&ÍË<NïcÖmÌ„5ªfKÜ6^Ù·*1œxùz^u@8Ü÷¶”K¬!ÄaX)_¤ó¨À\0FFËâ*V­½8µÄè(ÌÊ¥ñ¥çȯã/î)ŽÆPœ¼Õ¹µ=®ÛPG>¹ ê1ŸŠX9"µzÄhöãÏOƒÖ»ê­õ1º8½ü Mfoî%H•dˆ6€~Ë]xM4bõ0U^èŽ §(wðâ‹pá.°‹6½
+fêɒѽ%‰íÌí&óè™bùž}só‘ȉðÏ¥Ûßh&Ñ|"™)]ÆÏæ)’g¹“ÒQðcïc-æ’1À<xh¯|‘óÕWÚ¥ä]}ª±Ú±ypÉA*¯Á<ø›f}¼s2Š®Œßi&wº¥°9úCûÛ¤[h[¡šFÖ†G eÏ™¦ö f {ä´ûëk¾ïâ1R±¼½-?°Xø´¢d‡^øߧMçð¾ ™8øÒÙ[Q Š+¤%{té9°[âoæ¨d\«îºZ0ëñ³à;©œ§;\K)Knt}ÇÆM|9“xRÐñ±ZôÙNç|ªnÅ·äg5%ä%û9K
+68x?3Ï¸b®/ßô™¼±Þ¥ÐðÔfIÉÈñä•[lnXϱ/K¾€^SÔôµúª.ó’fmΗ=žº¦3Ó˜ÔyÙ.0·ø?!¸:
+endstream
+endobj
+589 0 obj
+<</Length1 1379
+/Length2 5954
+/Length3 0
+/Length 6888
+/Filter /FlateDecode
+>>stream
+xÚVT“ïÛ¦$F‡Ò2 i¶‘‚ÒÝRc ° ÆÈJ‰„”
+’ÒŠÒÒ RÒJª€4ßôWßïÿ}ç|ßyÏÙû<w\÷s=÷u¿g|׌LE•ÑNp 4
++
+ËUõMd€`°„,àã3C`=áX|pŒ’ûo~U ŠÅÛÔ X|˜>ÔñõB$€i9ˆŒ ƒeÿ
+Dcä€jP?„3P_ ¨ƒFÁ}
+ξ^ sÂÛ®­ögÞøÇæ
+Ç¥À`°Œ,÷Â`n _àf^ðßNÈ/3þü!8/´ÐO‚pã_
+ƒÿÇŸ5˜þSâƒïÔo?Jÿ.©Ž‚¡Íœ¸”4ŠÁ@øÆãwR@?œÎð€ßº‚ÄPh,>ˆ§tAc
+Æl}‹b%>µØi†N,QÈÜ
+D$ßx¥ØK|mÕuñçf+e}?JD3¦b:ýÙê™Hù
+/"©ÕµSð~NïºmÜgCmwëé3ÕÃ×//Idžéð\c“—ßçOåÚÅÜŸöãR˜æÒÜcM¯¸¢æ2¦Ö ÑÚíB^eÊCÜÈ澆(mÏè†I1*PuœR8§ˆèØ—×Ücg%Ù²‹°Ï­13³}b§ø^#ãáV:Jänè¿ÞüÉ{“ˆb×ãºHʪƒbØã÷ç}1°«Ü)(Ń¢Áq˘Áì”ôñû\ŒmlƒœÄE<:ÓWãÒ·ؼ¨Kíí%š2PS¦ (¦ÕÞ“}N]±ìvE·$o'Ÿ³½«¨rjGÜpƒû¶TÓ"Žïö5J
+jä%1úÕ¿;xfDe±½Rre2©Í á‘\ïè¾3¾ûÙ±-³¦]½Ü\M¾ýµÆr—Ò]ÅÀå~ûL[}¤QŸYü$icѨïκÔ}¾jÎLQ“ Æä*¬6¦.¾’TëÙ% E‹ó#G·Îsâ!“ì–ò¬=Òd˜Gµ3øØO×CFï
+aû/õ~ÊÕo
+¤¡”‰ ùd_ƒôe×ØΚì?ŽËK}^Š”î ½ea¯ëIÌ5d‘ø³â·zá ZMºÃ¼ÕîÏ]u]-*1îÍ4koâ:M9&ÙÚÓ²]<9.´Ëæ…v[ñ©º§Nk’)Ã…²Ö¼¬N'eµ‡ÓíÐÐæ|ÜàÐZuýèrJÛ),_F¸sŽ]éŸe—"ñåœò±yÈ0ú$O)žâÇmÍY»€‚^)Ùª'µ!¯bèÙIîa(÷»Và4£s7½ƒ]ö< —o–æ3ã2ÈÁæ0¸›\$}½ÍJ”m³ûj0íPás9-—äurÍnEL¡m°tf Íã^=A¸GKò§ÎG*˜1•$ØÚLv®Ä½v?@fƵ×ÏåÀ8_V=ÀÕÎüaå«d3î!8o K{‚Rþ§³gŒ,Ö…½n(ð„e—Éz¢é¢"/ÃÁtÕÑf†M7WemZL""õzyüüTsýtnÏ#Á\ÏKùu¤mDxDZ«/½§½¦›A/×$©ÒÉÆ‚
+Þ<ÊAÎËW–Yt1j‘Zæ /H|>!ÊõB>s7¶˜;ˬÕ~laí½ma•½“&V„m~©ñ®%3^Ø`š[ðšÅeº¦yxœïroäa×þ=MýãÐ1ù£þµ!O‚Ï{zôf^=Öo½t–¨Xc`sÆOå¶ç ÜS¾,—ÌË˳scéÖûm¥äd­ÌG€îqD&™ó®<v;D–Þ5Y;6õ%ÉËMaOÚûQ££¹ªÄO×w¹³cÉ7ªÜy„{–zzmOàRR玲•¥Ù 7Ó±Íø«Ãz‘[œü8 ¾ >Õ¶³q~¾–®©A·¬:[èð*UïÜ¿ÚÅO)ôµ„­%3Ð÷Ê=•níеïùã4àŠõ ‰Cbo?’ 1
+N+åô<ƒûR–*öDt!ñ–
+c£âA†iÞ«$ÅÅw¼+# âÙ¹³÷Î1Ú}¡}Ÿ¸x‹|VÉæ¶ö H/+­•JŽ{K¤ŽK×éêpÚÍ “D
+Œï/­ET¡‡U_ÏnFr)‹Ë·©)n¼iç6‰¡¯´»:ô‰„ÖžüôS¢Ðï‡2̤o"­âœÞKFÎî…`³ÛΉYˆÆ¦/êô† ¡×SôœmBöÄ£,dÒ‹mH'DŠm7Ùó sV_éW›
+Þ±Q¬Þº+s7Á²Kø‚JˆZí–Ñ2¤ßÝî(v2H§…ñ0-w–ôëCÎoLjl9ŠF;ØatÞÀݸ´$½8~XYÜ~'ÁþÅ'ŽùèÜûH&SR¦vѧñ“<ÁÉ T7ï .Ý6¯LçßOsÜÔ()¡kQ‡n»oÄƺ-&f5„ûý%gs2> šXÑòpÖåËúI~³Šå®âqZ¢õ'ÖÃeâ4 ^,º“óg¾Ï5ŽKÆ6p‰³4›F…n‹m•Gï¶ö³§—9t_eÜe™Oª?÷x¡q –oeŸrXHq‹¹„~‘0U™|~m ãû€ÏÜ7ƒ˳QÔéiˆGõS_Ôdú®¨6UüàYy¹?Ó†V?Ñ7‚½JQeïï«Û†wMUœOrʤ¿s l2þIiÒK=Ä‚PC«<Ì’ÎÍEñ‹;]¶èÌl±äÚÛ©a2ÙõÝ}b¿Ù`÷ZFœ'êEkôîs@€ ÓJ©ú•&©Ê‚4ÃìÉáówrŠèÞTÕt–¶´çï.[áÊñŽ#*bf6š'x‡½µÙp¹¦£g`ÑDÄï¥Ì}Zu'‚ˆîÕF)&y¶}…ÎÌ£ ²Ç»ÝYL‡<—›ÜLL”«7Ä»æH#É Ç=i¹½çhGÔ¾FEïûzìK:„pÍôdó”R:´Æƒ ÊÉ"èšTWžO©ÜZ’/wÝÐ5¤€Ž¡Í׶®E¥8êô¿øÈ*+ÝcRÐ_!s'+úæ‰ÊЫþéxìr4t%¬,‚åÅDè@™oSœÎ+wµ!ˆìn¯®½¥ŒÞ¡@͇V­õ˜î;Ì›ª ø+=¤ä÷Ê¿Œ,_c¤j¾qítuÖ}púv©Ö7¢ödÉÂmÖàP®ÎUaгQÝwúJ³@7˜˜Ä"XÌã{/XŸ] [º•O‡$ía'½¸{ÿÖ›×ušç{‡iv2µ˨õ{gi«­4òtÒ±°Ð«<Ž/HÐúŽõÚ ŸjªÆ±Âº´˜t¸Ð¾¦‚Ð*.¥}Q&³Ö%cWµaºÇW–êÃ$èõaèç\ÀîÁ…–!³šÉG·»z'D±ñÑ3ôK¥¥Š
+*zBA5c`Urþé„”FÕt7ßËi¢´µ÷¶wsÔÍ".™/0»®c²£ê{â ¤ö€§Þ2˜ÜrUçäî—¥QQôS–Ì ÃAk³tU»UÄXèøí× .«}MQ´1)´Wõ*"Oz“pñY)Ù]Çâè­›
+ºÂáÔÂ3?Ä(ùt?må_|´œ¦¥™þ2gis‰*ÍÆaL—2n’ÀT”´fö ’]ó 8«°ƒY<ÈLߊ‹¿©1|Us¢øÿY §\UwióåÍ+VÑC¨`í7ûv%Þ 5yôi£¢È€×É+=ìƒWÝ-s§}0O_r©–ÆÆîQ5Ï'BkæÄ—½Ã"Åýy]WÞEt˜ñßhêóJ{æôI+„ËvÉ“*Ÿ‘È’ñO¨:Ù€Èd‹ÎcQ×y=ºË!Œs>#ÖR¢'¯Ò{1ÕBǯÙnµq »µ6ì d˜b˜ˆg/£©)(|mfô[HüT«òÏAfQèá+¢–¸»é‹¥µòÝíþbÃñ>Ý&‹¢éœ1¶áʹY—[ý‚’~ÅÎ%\Is­í¤ñS›»··v[§
+›)$›|˜>þ<ÚÝpzUŒþdj@j•ò=v190½éÙ¿æk^Ã2ÅuŠ‚ºûU¤|(9$DÒ_iÂ&WÇØÑo:±WX£Î¤”G8ƒX„+…¡ê—©zS ½Ä ;ŠªÊ»N5—)¬ø!ð÷ÒK…a£²Æzky—<¡FŽj v1d!Ù——l~&W >O¼áQt;šÆÿKý€@9wÓíëå¾ùr}BÄO1O|·E(âä•ÔpcTUP>®ãìww³\G‡PU¥eêAÓ·œªË¡”?ƒ¦¢—Ø…ªðÿq.‚†žŽÍ€4$S’Ö·£ä¤Ÿ£_•<gþ~ôlœ¦‚ÓelÀ!%Éz£l¥UÊ'Y)¬?£EŒõßbÇ·ß'9ò ûÑ5ýªRpf
+!¦rÇFѪ0áWÄíß32wX*Ü»‡ßÏh}ÿa‰µÿ¹ývø»f›N¤‹'ëæJˆòãï.{.
+P)5U:ÞRé†%Oפ–³´Z!ÉPžã#Že^ýöò¢sä’3/YuJ /8ž¾:á)…~:­ˆ¡`ßö—ˆ±ýòØÖ*{Y¹·5óŽd¦ã{»—[éÁ)~QË‘ÓâVÁDÊì³{9ÎÍÒ$b2ª« ȤŽ”sæ* <K³óUì1[¤wDEzC×"_„û|Û|¶AÏÐz°’m3ñ[²(¸ªÃ¦B'#¯Õþ ˜Ê÷z~Ua*Çøj•Á[ …Iu"*§(Ĥ9 2G¦D½úå1³ÃpVüÇ'kk¢´£äêûî«CŸ(î‡ì¥ŠÝ@âñ¡Ï—î'î«WÜ“ýÃÓ®‘Ž´ž)] 6Póz‘aÆa&mÃ÷ídX‹FwÚu/û$‘“5m{(”JW 7rÊšpÞÎ|›/Ñ9Z€}‘œš(ÛJ&Ð;}i_}‡rQÂi‡O…M‰·Lß¹v“÷†À†OÊ}£w–°"ë‹]9ñ´ƒëß½éI>I>ÚOâÍ”XXûUw¼Õª%m`6F°jb(…ËK¥û>+,ùàv¯×U”*Q[ÑS}>©âùÀ ¥%¬Æïgjiø@Ñ‚\¢[‚Ø€RãÞhx–ì0!Y.à67wS ùž“±ñ¨79v.¡ÇÅ&“¸æšõ´§:ã͆ ‰£±îW\¶‡»ÛÓia.`·ýÜWÀ°[7˜òîQFN¾ÈÆôÛ¾1š?ÚT‹j°ÑÑ›ƒ¼¿k{—€®RµEÃi燧¾1aÐ1®Æþ¥¼]í™—•7ê]ü¨ÊE§ˆø¦³ ÃGUÌ,’0k•ÎX3 ·y鄘æûª^-:¬Q%}Ö÷Πù>T³9$5B¦ÆÖz*F·#´,ITºŒ]]VŽ»-¡ìô% ›·ÞÏ'‚Hˆ½–É~¹Êz…Ì Ö€w “=+¾Ãý^ö]-Jy|ý‡oI.;щ\B
+…”y½è¸gŒkrÙËU‹Qr1È]p¥Éãttæd`)yŽ¡\Z¡ŸdóÁ4JJ±Æ›Švš3õÑ1;<!Z¸p|¯ÁC3¿Òš„$H¼e>Wb^è¿#Ä5Œ~¥Û92S$àáXvüªJ\)w¸ î¾ä9KH]fô,Sdߊ´{@D5NØýúÇõ¸Ȇm1SýǶ†ÉðW;ÌHJtj5Ûç­užïfLrSï—z‰Ýþ¼mþŠÇ=”‡Vd- Gl71>/Å{ü)–§»Ê+}ci+ð}4²yúpÀ&/{]ûCcÕXòWvömŠ¼¯ìoIXj¾¯ðËÈ¿Ô’ï'âÉ5˜*AMÈ´¢Ø ~ÞؤÊé8Ç
+^NÌŸÀˆ‘M,õµÜOú>ö œ i°ýå§Óˆ]ñaÛUçôð]ÎÆói
+/ígT¯B%2Nc5â¤oszW¡sÓß5†ÏÈ*î›3JTpõúçAµÒÍaˆ µý sdO¿î““b­™„Öj4 sA’ßȵ”{Ÿü ’/&.·Só  íõ„ϵžŸ©õ´›å÷aÈ%:¤ŽÚ<ry,}R¯²Í I*âýt%ß„K!ø*òæÀS"[n³±{z.•³_yê)š¤Xÿ fG
+endstream
+endobj
+590 0 obj
+<</Length1 1379
+/Length2 5962
+/Length3 0
+/Length 6905
+/Filter /FlateDecode
+>>stream
+xÚVT”]·é–@Jj
+spÂÐÎ?¬ÄÆ$
+†€Ký7ÿC$„ÆØ”@hL˜6Ðpw‰
+zzz
+€\P¤Ã>€' èCP¤Äð‹.àÈò›˜
+Cýa6@Ø£=AH
+Å%$
+ùíúeÆœßß×á
+°ÇP€øÃì!˜±/
+ä ‘îßÿîø÷ŽXH`£¶œøtŒbÿÇÓy$Ì `ÄO
+pç¿/†RyAìtah0ôýÕ ¼3 ÑE `¿>3
+–q¬
+i:­P`òä_‘ýȱnò’‡ßwÙì~NFÄSž´„<VHêï XXSæ>’Ÿ»sé»SÿŽ ´!A¯ñÂï§uœþØz#ñÌÚžÑÜ…ênf¢Ûü†ò~—n~ÆN8õØ­YnîdºÙÔ§ž]ª^ÕÝÅóCϧÖõ6ÊÅ4I~óGEZLp¼±Í˜¤gÃGó3Þ£úáE>qtü‘êõèõ8^bÿ¯Q"y¾fËÂÑg“>‹%†Â¨6†» fôÌ8GTCcœ¾Š›ÉtÓ¾…y =3^õ2yw^ßäKYà§Ø~UÓ¯í¬ôšmúœ•ábê¡þœPYTKcdÓ¹UÞhý‚])âaÞl±Wœ£µÐŸbˆ?ÊÌÛyÛßBÃA«ß)íÿ=ÖEðùël…yXt±Èä<ý¶_YKžW†OšQ˜þÔ;ú8ÈÜ[Ò®‡™Oˆ;v€M¼kïK¢u©TŽN»8Î ‰ŠrqW?\Œxø쌎 ÎiDhcù›ÈÖ¾JŸ2Ú·–Ïäਲ਼|6=¡„Þ×Û¨ìg¯Šù1è,ÆM3‹‰‰0v¡ÃªŠ]_pFWXL÷|a— ‹`'Il}<ì û u‡.é'6îà§`®K1—º$nU\JÆ\ÍÅPÿÛñÀ뱈‘>¼ûÙý™·+P·;敽Ô^@ÓÞr+sšˆ§z"ä`æ噚ÿæ<Þ_A°u^8 m‘ÈQugÛ#.è´õ;çÜÚZ>]®Ýáäl <È·aœ À¯{ÀÁñÕ}¡ü£>Ó–è£Å+sÊ"íËËwñÁš'„¯M$bx±Ol‹òô ù‰‰¥ û§°+SIÌP«*û½‘g{²3åç?Š÷Ûu³©¢msž“}[¯ Çx|ø8vPÉ4êÞòéØyÕÌZ>¥³Ë€J`®WEÌb\Mšgº¿EÒýT‘Œ|
+Ÿš³² Ñ.g¤¬ÕaÑsG‘Sâºl[/ÛÇ‘#ýÒJëÉ(ÀéFTÍ<>…rÔœ)Q¡†±išÈ¥>ŒVÅr—ÜîZÕjªÊg|¸ßmë—™/g@o>0w7Ôì(þ¥DME=ÎÄ”XÄ”Í@:.ÇûÚ–.açþ%Ï7w=M7â'gÖýl‡§Z1”ÜŸÞé4õª^©"öÚˈîC°Kl˜u>¢³×tÚ9+Êžo<»r]3û:y«æ9™y¸¶EËžõ6„iÅi,ešŠˆñ&ee‘u%—ÝtÁÀT<@±$òŠLZpîÛ',òQvÏùœ›g4ÅdÛK½÷{h¸ô¾ ¹ô~¿éêr3'±¹ÜêÈ*÷míVo91mèÏ’®è
+=N
+÷¸Õ¦¸™×k«œ~F&‘8̻޺B‹0ˆ’ܾ˜…6aY©u÷˜½¡¬µM-a™%=?ÕaÁÎtwrð˜ñP û~e]'‘"ší">,®<ê층{MﺫŸ•qh” ÿ&ÖÿÃyWó*ÆíëÏ™ê=GL‹ ./ø_ÊœlîÄHšÞ¿ÀŸP³ zù–$˜BŸÏÎ~ZåÎ`Dðþt%Ëeþ³0>Å®ð³±s°s¯Ç÷ë÷óã‹tÅÊ9ž7&"ža³;n”ÝýÞ©>t#ïéGbA!…JžSéW4ßÝÞK1»P‘¸Î Ø?ZÞ+Ë6å=BùíNNÔgå»5OÒÓa'7w®&VZõ{®Žlk>®ehTPdl+<då½
+ßÉÑ?Ÿ}Z²K6P’íRT” un´dœHÝ’¤ÛHlhÆ»³c)¨:wmY§ÅÕÜíM a—îãgç,_اoó…tý 3×ç¹áODP±ŸÀû5qÙ¯¢’•.ØxAn#Y7žn‹½”vÛö°lö¹S
+î0;Ä0'¼¼ö„€w2±yBqu¼Þ0ûZj™KÊEñutç+Þøj6UF&¨qÉ#Ó»óU£š0Üd|;<÷e‰º õî^ ×gU[|‘\ñ~‚Êþ™ÝŠ°¡uÈÃä-Ë8Æ/[ù$Ér»
+²]‹ö!h—F!™è\„Ò臭ê™Ä
+úa>,»šêDäG¦jlþ6Â8¢«]ê9tå6MÝfu‡º£h^–M9J2豉ÙjƲÿ€}š^ܵ`O”ñ4¶áà.¹ç41ž½¡BÁb“–$ÕÃÕ\áôø|A°.»n"ï²5`wΙ‰ÛÜ kP…Do‘!‹|ûˆáü¼®nËŸbWÍ …Ž{ض]E/E:ÛýÌ‹hÎ/<œ˜k6°(N+é~ê‡Xš’ûo.ק‰©¶‹ï$ÜRzr&ӺɶÀå,±ø<V
+<RÍkF>‘§OÚÀºr'Îñ JoH»…L¹¨H JO7ɦ^gû.U ;ë%ÖO:ÃßSضmXWªR ÛÖ±{ìøôu§> ìLu~êÞÛ4j·ÕÒ›f·QPo:½‰۔ͬ˜¯e*žÙ ÓM€Î,sXMüàöÜÎ[ï(ògy±
+OZg(Nƒý÷Åõ-ÒREé뼸 @²šãcSfS¤1/‘jÛ&Üȸ&'hVO¬ÿþ„¬xiv¼O÷AÂû]>†‹K5´ê½\®YtíVÉò÷­ÁáÔñ׋0E>àa3ãUϳ÷®|vA8 *¯zCo|[eñ0ÝLÆõ3)­ÖÖê"µB½ˆ¿¢IšŸôøÄv‰ói¨¢Æqë=‰¨ÐÊÁˆÙÙ5ƒæȾ©Ž ÎHGˆi½Û‡ PE³3;pBeman9FùµÂÍí´9÷Îœª‚r¤ÎZ‡Ö„Á@!ÿÆJóíó”ÀÅŽL†Føè9½ƒ¼Û·™d('çã/Ä ùŠû¹mžðg ¥š <—Q=ëóMU )ÍL‚ìjã3Åyï.ŸÞc[ ,o&¬V¬D°àðàjzW;à³hšÎž~ ˜Š®‹ò02ÔY÷Å!%´ÿ°»£‰£ðúø}JGÝNÉâo1!5m¯Âû¤ÁL ßBð¦÷e^Õ.Øo=·ÝÕ#Ž»—0ðÅEMšÝ-ž¹áÖ—<< =ɶ/'Ñ#Ò¸€]ªîÄ)Þ äBNÎ…_¿÷¬ôÌ\kp ~p3M6èk²h'êÅX<)Å3‘~w'®¬”à¦$É姢 ¡,^Ås8~i'ÞìÈçÂø”å+õåÁ iy6†.G@Ú©¹ºñ<½OoЗ b5EÍön®W}SÒÒÎZéauƒÍù”Úñ.?m¦³|sÌÖr¿±t®sGÊRÀÒp;˜.Näð­OˆÃÂÕ¥x¾B•ñ –©o‡ä×™viüïséz7C‡’èF[ÔÙdïU).˜¢
+ 8ïEÈY$­„—~Kªúâ;ÐûXࢗÀ(UÖúù&ÁD•HUåZFL#^„çlx
+>Å7µ&shtNó¿Ç{CÒéíܘ]ù“^ËúnÜk‹ó7Š:ºØâÙ;wüÀ媳…woê[Òmr9©f¦_5“ø'‰6~É*š#ïÚÛóy±¿q‹—A™v!;ðëKÑ=Ž¼øºYAÙ!lå¶òªÂôèO…u
+¡=5µÌŠ”@s¶ÎÍ-e½Ÿ—©½y'K™ùæ:zÑ_TÍ6¬º® sÈâ½(q|þõ<eþîø*V_¬sz²‘òFç ÆŽìÓ„Þç¯ÈBÞª§¥ÙÑÜ»^»Ô_?Ñ # ‚~¶ï{.É=€µwé¨.ã¯_í«M(-çCxF®î6ÿj  åº;TÎb\·!ôZ>íoÙ>iÎw&ϯ~/W4Ç ‰›½áœeÕÆ…¸Ê™I0Yz)¥/Ñ c,+ó†‘:ÕäbMâ‡ÂK¾¶»"Åøûgç
+ºåLÕp!Ê[T&ô ·3Gº${9Õž‘^©m•-/ [ôªÏZÆR(8‰ "ʆšW\ùJ"
+ù~¤f¤g…GOfªÌùÚ65Ùã?_ý–µ¡°¯êáÔgšf8’ßpº5á˳y{X)hànßüxך{Ù)ÿ@~›fM›¨j5ɽMe¬‚ä¶
+kÉv:*à˜À~‰'¾Wt̸\^žºsø`:¾“)@ö°9+øH1˜7t;5„‰RbHV¾ÀüvD09Ê<K%ÜP?— Ua­L4õ ö…D÷ CümÓf)&Õmê–Ùøái´qÿÍï5c/mØooãd¼?KÏI”óÙt3{¦—!#Ë£Cw¤·ÜgJm®z®»ÁEÛG’+ë áöRM›K“,£™]¥Zù‚êjñ››ŽGa1ž[lq&6®/·á–dpà-)Vw´Ï¶³vg «[ÄR”6Åwþc\Á>o1TgÿëøzhÿëR]ýæej\n^=R­c3Kc¤b]€îrÅ iÏö]$ÐåS˜oâ‹ílžm…îÖh<r¹ïi¦?LDà׬øß>5oÃ(ºêRªšèâæþ v:€p
+endstream
+endobj
+591 0 obj
+<</Length1 1459
+/Length2 6700
+/Length3 0
+/Length 7682
+/Filter /FlateDecode
+>>stream
+xÚwT”íÖ6RR" "Í€ÀK3CK·4Ò 9Ì 0Ô 3# ‚tJw)©t‡¤¤‚ !(„„J·À7Æ{ÎyÏÿ¯õ}kÖšyöÞ×®{_û^Ïp°>0àW€"laªW ?H
+C“p(!^(¸½›çïG
+¹ÂÝÁÔ•ÿ`°*’ëìa€(PB\XB
+÷„AÀ1‡ßdú{ØÎpWØþóâÁzÿeÃîÄ {¹ ±3ûm£±‹ˆù5ÞŸ2 »jÿ¬CÅ‚€þÜI!Q1
+v¬ n=©R`ðà_–&ØN;1â.°"ÂôªŒY/%dgMk¾TýÔRµrìÐQt;É™ŸÚ÷Y©e©ó9âgQ]·g±›¼:º6‘èsÌÈ6y³ ç™IŠ"³d1ªçSE'±Ô¾×€ã¦ï_5Ý=8©KTÅ5BZuÚ;«J²´hïý¬i¶0\= ý+÷³ËÓ åh‹ˆT 6MéöS’JŠÅþ·³”=L]QîOVwØC1”*RŒÊ"×+gŸ“ÿÈ-vßÊ ò±½K~ Ú[ºÀrR£³ç°²·eÉÊ•Ô)î`“d úê}ÊD‰œ¥VLCåå¯EBgrÂXðûeÑÆÝépµ×ó埙œ4ÂB4½¦'ºG<ÒLU7é æâÓN¹,[ùêWÏÑãnŠÛòWU
+åŠ
+/M÷¦Ÿ]Ðó>vçìÙ#® !s‰4‡VCÙ¢Ù{Á-¦”ÂÂ7ÜáiFä‚õ_ú¯šùx‹\>ßooWäœv«Œr¡Šö^¬õÍ(xv¶ |SI¯ŽVòöpY:ò­ô\²ÔêwAú•{·ºˆ~[œ¢ŒFHXr^lvDÇÐ
+´D°•Ï,÷„2—áÆAqJtòJÏiÞõ!Zq„IÜK£Ï¶¼/¶p3
+½ ^Î\O–µ®5`^å±àmÅQ}ÿºNÜIWê"?ÆCsgH}/nF¥·ÐDמ:e²+úf•Úr–¬FÈÌFdá]pñšBplœ9XÅјÀ'±
+2¬N6Öºõ2ÑôõÛ_NÝñnÀ\/pT„n„ËTxžî4œÔðo]3¯i¯¿ü lsážw‰tE‘i›¼Ì<ørËŒ³žž¶QU^#äýa7>¸'ŒDÚ@ ªwye›±‰“Û‚£¾E3ÊdÍý0}ÂF¡Bn€¹QhýúNiI>ê ¢W”¢ßSKù]‡BZdÃã‹^"¦÷úD
+­Mu>lï¤"âcׇ»L(›ã•ÇtÆ ýw*v"H Mg.$\¼?~ɇ¶ëH±­¤ûÓŽ&”´#ZRo7Ñ)Ý/"HÔyŸ[Û³à+мþ]Œ¢Saáx¢ßÆf¥ÝQR÷ÎÃÚ§W—FE<gb ÷×–§ã¥ßn®>ˆfGâ9–tömxtcBxá%óðŠ—9?&
+MÒnC ñ.ñÒ)ªµy辊ÃçºÜí @þ­Å
+›äìeù{Q¬i y­D°aª¥>†ôëMïŽÊ¿èyºŽ¤BùUFéWC¯ m?Ïuˆ®T6vühJj—-ýªéé&Ü]¸øÆSÌTž¹÷ÞwÔdŠ#˜?$³¦/_Ù’$°-dµˆª-”ÌåbR“-ƒ­O?š«ª<þØ?õ,ØÏÅ$kƒ·^{IaØmƒ¶õ‹Ë‰þtÑn’§¶ND·
+â¦æ,«†wßÔMPy]šêü=jÞÁâ¾íµ#0³DAF#;×üÞ€•‘ð­J·Œº‰Ãíå}%¶Ò+÷Ž¨¦CÇKJœ¹´Ü³ÙA¦ñÆ5Q´d»e?ƒ”šPEH[œsG] „šjåçAáñ+Œ(f“Šý(H/Øo+šœ8{át.¸ê³@¸1š„Èλüô]Þò×B‰û”ÈáÖ7[}Ú»’ãÉg®¯Ù![ ¢¬/rZ€É‘Ÿ§åCXSüW”‰ÇïJH‘=~¶WwµÆgʵڬ’±WÚy_8'wº¾5å}]*ÆÚ2±åý[¨–X!ˆùAÚ½¿.¦ôBü¾}lsÚéÉ›§Š2÷دïöoѲgò4ŠÅž 8 n²³ÀʤÖÉÆLzJ þÇ÷/*iKÃÄ8óò •†ÂOxU¤ñK7²ø¡¦ÊÒ¤rŠIäûk^– “Y³h!7—ï—r9 5ÎŽ¤| ›EžP„væ¾~Z¬ó|{‚b‘°Ýik±ºèÙ¥î "ÓT^h™`‰&túÝhù®þäü[¦Ð]ÅÝ…aøé—›½æÄU©$ .¼šôñâ°o$õo#Jßv„û¶š>˜È3nëåÚðžÝtñqo‹íÖÁðäíf@(p”Ó«‡èH­¥0Nóü™Ù›"LÅÅ ª%§Ûétd'sßjè¯á)èærU„¢ßØUspÍž#‡•gÔØ„8 Òø‘‘¤šÛþU¶Ë¬2Töõ6’R‰¸¶”¥¥j«zÞ6ž-|R_=BS3=oX8W¨³½ŸøNÇ ?Ò'4ñ£e
+E%:·,þA)ÖJI1o)j½ŠZf7j“²GåìVÎ%d9ב®cÈÖ\OÖ2}•+C‚RŽwI­bÒöÈ©oSÚ<ð7¸b‘Ñœ»’S9]ÓdÈÌä¬åÝÈGY° ³›OE zN"…Ûq¶>›=+s "¨çÁµÉC^+–'Iôõ÷"âxh2ÆÓ*…GÎNŶò®z¼ûCRúñÑ®9 B^#¡•4ÁŸü˜_­kn|Ô46 º[*A¿“ŒT‘l÷x›3J£¡"MÌí.ë–Q?܈(Öè·Ùy“dÊ­ï¹=Ÿ°‡×ãI,:*0íPr—¨EYn3÷p
+~C´Ï,H—¼¬nòÉxZGw•¼zÚ¹ðLL—(ÌQqzYB.D.ø˪2Á«œxFóØ/å¤O×]LŠ¬ï&ØF¯R|=¸)Õmo–wÃÁ`_pº_@#ÛÉ&<  Ϲæ%ßöæóøABÂÜ΄àÑSÌ(=©'iòþ!ï xöڈõ‰žô-È­Ðdx­vÆéƒh*Ô}–¢[u2AŠ¯ºyéI÷3/y’Êðg¹‡ãÿ¸?BíWeÖüÝ’>qP9ÂÏ ÇÝu1ž\à*ÓÊHY6±zqí5,#X}³ƒ¤jè§b¹Û*ül¡Ø€ƒ‘S»É+&ßL© ‰Øöt¹©(†—XÁã¶f>Éq€±<>‹8_El…ÉÙ&M(ry¢ýÖšÞÒ0<Ýÿ¯4÷J¦s9=/ÇÅ÷9KI»HÓ|ù« ZøÁu†ø”¹ß½ý()q³®´ÎèCÅ'
+Ëïó>ìÌUŒ®^ˆìØ”i"âá
+4/•ðw7ml±¯Ã9ùµËí–šÞ¶&óÆ¢®<Æç\Ž1W¶«<42¾˜h>ÈX"ªèܸ]U÷-mÜâSÖK:~ÆÂÃòT•.h/•¿¤{¦ö”ò±7B4h p¶´Z†G¡ò8ñü-g7õ“„}Å'µšä€usü–§ l”Èpžˆ»Á 3
+hŠ¥m I‘HLMãüXÆÐD×&”qlGD@דÝ3Áó ånì‰i]^Ù ½„æ}jëïÀZÖÀIÄw‘IÐÎÐ \²ŸÐ¤•w?U³¶µãǤ!¾Ç—h·0òv‡'b¨éÍ=­DNI³ÈžÖôxÀ²ýË‚z-¨ltD®æõÌòçÂ,¾èHJ<˧ùË£hÈHnž{eBß–cô|ݶ.)vc¹§ßŸ;X7¤ôE¿©‡è;A¶Á%_§ô.» í¼Fiû}Ò¦ÅDæþîF ö!â®rÔpƒ£goõ¿~—l!ÏðñXÉ×!Ñp‡Öõí_uÑG]6zò'ŸpÛì¾HÕÓëoØàúqýX$Q”6¹Öª8h>ø µöB%"œ‰Hô>Ü;}Uí’‹Ý—†ì—c7‘vÓ ¸®x—8í¢} ›Ð²‚æøoš=[TæZ$^MnÄuŠ ìÝòÑ…¿Û`5ÙZ$Ž;S¹ÝЧ޼-vÂw®nØÅs9ì•ù)ì{â5µ$¼yíÊâcIëÌ9³ðLµ{N²ù5…nÁûÝH"VeÉœ(JœnÜëÔ`ÚåLmÏÄ‹~6k­Ô39Æ×P*ž3É°Iඥ¸'××$iʼnVF|wQ¦ô ­ôal­¥–^(p›ç¤Aó[òo£¼,L€ñrüéú¥]ÝMü”g}Îo)¶ûF-üéôyo³»w#R” Ó§íCˆ.½O7óÖÁŒLâèš>nÈÎ÷ÛN rÞü®‹]涙'1wiúåi ùZ¥dpÇN)ª õE%E_®ço*?7ª7k‰”WûÏúZ9gžæ_RÛ®í+wµÖRRE=Þ6Ìî¨o¢ÿ¡´‘#-C¦\gßá·+ß&Wz¢#äªèîÚxÝÈÁ;¹A5ÂW–šÄO¥{í7¦ÓõO¨ÕÌ™ŽØäf'éÌà5›-´à¾U•#þ$<Uûí$RWïayùà©wß·¿x[Ï–ZÓuWÙ¤ï¦ÐÔÔH†–ô;{ØßlÓœ´¶ú¦ïÀç»yÀœ­eQYb"×Õ„—êÄéÔѽß^^­¹<÷žuC<”ýŠÐ±Ô¦WÄ¿OŽoÇìò,ZÀ˜ÎñGSñ#…s`+i€wûœí;ãÏ™‡âfœ
+å‚9ë»ðÊc‹{%×´,& #Ÿ˜osfì:êUæä6BƒÜõy9O4s ï„ÚäMcoO$qÊËë(bÓ>X‡
+ýHÃ_DŸ±Z‘SëÝ]¸6ÛÏ⻆_XSÍÁîÐó¹Òô,QêQê7ÇçŽÛ{ŸA·"GÔ;©Ìlql%: ýÌeóƒ„Ô"$ê>ØÛÙì¬ËøÆÝùÒªš¦õˆ\¶£±Wh_½ÿ-ïÀ-Nýî´¼lBÂ4ÄÂ%¯wè½S‘†ø°ß'´×ÙúÌ0æÿÍf~ã öÍ/Ñž+Qa*iÏ­µê$¯ï›—ÌHî¾uÔ-ñ~Æ;µÞ&¨=)&ffJTRÍòû@VZ0ËénÏ2rèL3É» Ç;
+"9êÙ1¤­!ô¯è³i¯
+üødû^‰ûÑ{èú×\6¹œÀ:tËÕ¿|yhÔHª4´„wp0eò üΈžÿ…#é&+ÒÍ„ ö¹n¨Tg‰ü¡º}ŸV0I,.e†ŒI@_w]9+ ·ÌÂg…as¾T¿9-‘1|ýÉ¥°O·ÖðgkÞÑÁ§ÒÈ­5{LùM=‘%¿ŒlL†îéûpŸ”ƒ2²Ø4w´¯ ÐÊ“²w¾ß³Ó8üÚ#;ļ=êò GzéMXc˜\æ9ΠNɶ>#
+Ëždãv);*Ó¨¸‚¢åv»V¿f5ˆ[ë:Ä]£ùròS¥ÄŽ]¹nS
+œõˆ¸ºç¯+²Sžƒ`ÜážÞ[ÒïÉç­[JÉñ(“{“­:…!à¬Eõ§ß \?ˆ_Rˆ%¸Â¢J"žÕb %¿¹ ¾ÞÀ¼üêSã–îÓDÅñäVŸõ7Õ-éèÿ_^è
+endstream
+endobj
+519 0 obj <<
+/Font << /F105 5 0 R /F111 6 0 R /F63 7 0 R >>
+/XObject << /Im5 517 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+593 0 obj
+<< /S /GoTo /D (ptx@section_link:2) >>
+endobj
+595 0 obj
+(Basic things)
+endobj
+596 0 obj
+<< /S /GoTo /D (ptx@section_link:3) >>
+endobj
+598 0 obj
+(Loading)
+endobj
+599 0 obj
+<< /S /GoTo /D (ptx@section_link:4) >>
+endobj
+601 0 obj
+(First things first)
+endobj
+602 0 obj
+<< /S /GoTo /D (ptx@section_link:5) >>
+endobj
+604 0 obj
+(Presentation and handout)
+endobj
+605 0 obj
+<< /S /GoTo /D (ptx@section_link:7) >>
+endobj
+607 0 obj
+(Settings things globally and locally)
+endobj
+608 0 obj
+<< /S /GoTo /D (ptx@section_link:8) >>
+endobj
+610 0 obj
+(Global settings)
+endobj
+611 0 obj
+<< /S /GoTo /D (ptx@section_link:9) >>
+endobj
+613 0 obj
+(Local settings)
+endobj
+614 0 obj
+<< /S /GoTo /D (ptx@section_link:10) >>
+endobj
+616 0 obj
+(Type settings)
+endobj
+617 0 obj
+<< /S /GoTo /D (ptx@section_link:11) >>
+endobj
+619 0 obj
+(Attributes for slides)
+endobj
+620 0 obj
+<< /S /GoTo /D (ptx@section_link:12) >>
+endobj
+622 0 obj
+(PDF and navigation)
+endobj
+623 0 obj
+<< /S /GoTo /D (param_1) >>
+endobj
+625 0 obj
+(pdftitle)
+endobj
+626 0 obj
+<< /S /GoTo /D (param_2) >>
+endobj
+628 0 obj
+(bookmark)
+endobj
+629 0 obj
+<< /S /GoTo /D (param_3) >>
+endobj
+631 0 obj
+(bookmarklevel)
+endobj
+632 0 obj
+<< /S /GoTo /D (param_4) >>
+endobj
+634 0 obj
+(bookmarkstyle)
+endobj
+635 0 obj
+<< /S /GoTo /D (param_5) >>
+endobj
+637 0 obj
+(anchor)
+endobj
+638 0 obj
+<< /S /GoTo /D (ptx@section_link:14) >>
+endobj
+640 0 obj
+(Dimensions)
+endobj
+641 0 obj
+<< /S /GoTo /D (param_6) >>
+endobj
+643 0 obj
+(width)
+endobj
+644 0 obj
+<< /S /GoTo /D (param_7) >>
+endobj
+646 0 obj
+(height)
+endobj
+647 0 obj
+<< /S /GoTo /D (param_8) >>
+endobj
+649 0 obj
+(hsize)
+endobj
+650 0 obj
+<< /S /GoTo /D (param_9) >>
+endobj
+652 0 obj
+(left)
+endobj
+653 0 obj
+<< /S /GoTo /D (param_10) >>
+endobj
+655 0 obj
+(right)
+endobj
+656 0 obj
+<< /S /GoTo /D (param_11) >>
+endobj
+658 0 obj
+(vsize)
+endobj
+659 0 obj
+<< /S /GoTo /D (param_12) >>
+endobj
+661 0 obj
+(top)
+endobj
+662 0 obj
+<< /S /GoTo /D (param_13) >>
+endobj
+664 0 obj
+(bottom)
+endobj
+665 0 obj
+<< /S /GoTo /D (param_14) >>
+endobj
+667 0 obj
+(baselineskip)
+endobj
+668 0 obj
+<< /S /GoTo /D (param_15) >>
+endobj
+670 0 obj
+(topskip)
+endobj
+671 0 obj
+<< /S /GoTo /D (param_16) >>
+endobj
+673 0 obj
+(parskip)
+endobj
+674 0 obj
+<< /S /GoTo /D (param_17) >>
+endobj
+676 0 obj
+(parindent)
+endobj
+677 0 obj
+<< /S /GoTo /D (param_18) >>
+endobj
+679 0 obj
+(hpos)
+endobj
+680 0 obj
+<< /S /GoTo /D (param_19) >>
+endobj
+682 0 obj
+(vpos)
+endobj
+683 0 obj
+<< /S /GoTo /D (param_20) >>
+endobj
+685 0 obj
+(scale)
+endobj
+686 0 obj
+<< /S /GoTo /D (ptx@section_link:15) >>
+endobj
+688 0 obj
+(Content)
+endobj
+689 0 obj
+<< /S /GoTo /D (param_21) >>
+endobj
+691 0 obj
+(everyslide)
+endobj
+692 0 obj
+<< /S /GoTo /D (param_22) >>
+endobj
+694 0 obj
+(areas)
+endobj
+695 0 obj
+<< /S /GoTo /D (param_23) >>
+endobj
+697 0 obj
+(areas*)
+endobj
+698 0 obj
+<< /S /GoTo /D (ptx@section_link:17) >>
+endobj
+700 0 obj
+(Style)
+endobj
+701 0 obj
+<< /S /GoTo /D (param_24) >>
+endobj
+703 0 obj
+(background)
+endobj
+704 0 obj
+<< /S /GoTo /D (param_25) >>
+endobj
+706 0 obj
+(foreground)
+endobj
+707 0 obj
+<< /S /GoTo /D (param_26) >>
+endobj
+709 0 obj
+(image)
+endobj
+710 0 obj
+<< /S /GoTo /D (param_27) >>
+endobj
+712 0 obj
+(font)
+endobj
+713 0 obj
+<< /S /GoTo /D (param_28) >>
+endobj
+715 0 obj
+(transition)
+endobj
+716 0 obj
+<< /S /GoTo /D (ptx@section_link:21) >>
+endobj
+718 0 obj
+(Attributes for steps)
+endobj
+719 0 obj
+<< /S /GoTo /D (ptx@section_link:22) >>
+endobj
+721 0 obj
+(PDF and navigation)
+endobj
+722 0 obj
+<< /S /GoTo /D (param_29) >>
+endobj
+724 0 obj
+(pdftitle)
+endobj
+725 0 obj
+<< /S /GoTo /D (param_30) >>
+endobj
+727 0 obj
+(on)
+endobj
+728 0 obj
+<< /S /GoTo /D (param_31) >>
+endobj
+730 0 obj
+(off)
+endobj
+731 0 obj
+<< /S /GoTo /D (param_32) >>
+endobj
+733 0 obj
+(handout)
+endobj
+734 0 obj
+<< /S /GoTo /D (param_33) >>
+endobj
+736 0 obj
+(visible)
+endobj
+737 0 obj
+<< /S /GoTo /D (ptx@section_link:23) >>
+endobj
+739 0 obj
+(Content)
+endobj
+740 0 obj
+<< /S /GoTo /D (param_34) >>
+endobj
+742 0 obj
+(left)
+endobj
+743 0 obj
+<< /S /GoTo /D (param_35) >>
+endobj
+745 0 obj
+(right)
+endobj
+746 0 obj
+<< /S /GoTo /D (param_36) >>
+endobj
+748 0 obj
+(vskip)
+endobj
+749 0 obj
+<< /S /GoTo /D (param_37) >>
+endobj
+751 0 obj
+(everyvstep)
+endobj
+752 0 obj
+<< /S /GoTo /D (param_38) >>
+endobj
+754 0 obj
+(hskip)
+endobj
+755 0 obj
+<< /S /GoTo /D (param_39) >>
+endobj
+757 0 obj
+(everyhstep)
+endobj
+758 0 obj
+<< /S /GoTo /D (param_40) >>
+endobj
+760 0 obj
+(group)
+endobj
+761 0 obj
+<< /S /GoTo /D (ptx@section_link:24) >>
+endobj
+763 0 obj
+(Style)
+endobj
+764 0 obj
+<< /S /GoTo /D (param_41) >>
+endobj
+766 0 obj
+(font)
+endobj
+767 0 obj
+<< /S /GoTo /D (param_42) >>
+endobj
+769 0 obj
+(color)
+endobj
+770 0 obj
+<< /S /GoTo /D (param_43) >>
+endobj
+772 0 obj
+(transition)
+endobj
+773 0 obj
+<< /S /GoTo /D (ptx@section_link:6) >>
+endobj
+775 0 obj
+(Attributes for the job)
+endobj
+776 0 obj
+<< /S /GoTo /D (param_44) >>
+endobj
+778 0 obj
+(author)
+endobj
+779 0 obj
+<< /S /GoTo /D (param_45) >>
+endobj
+781 0 obj
+(pdfauthor)
+endobj
+782 0 obj
+<< /S /GoTo /D (param_46) >>
+endobj
+784 0 obj
+(title)
+endobj
+785 0 obj
+<< /S /GoTo /D (param_47) >>
+endobj
+787 0 obj
+(pdftitle)
+endobj
+788 0 obj
+<< /S /GoTo /D (param_48) >>
+endobj
+790 0 obj
+(date)
+endobj
+791 0 obj
+<< /S /GoTo /D (param_49) >>
+endobj
+793 0 obj
+(background)
+endobj
+794 0 obj
+<< /S /GoTo /D (param_50) >>
+endobj
+796 0 obj
+(font)
+endobj
+797 0 obj
+<< /S /GoTo /D (param_51) >>
+endobj
+799 0 obj
+(mode)
+endobj
+800 0 obj
+<< /S /GoTo /D (param_52) >>
+endobj
+802 0 obj
+(fullscreen)
+endobj
+803 0 obj
+<< /S /GoTo /D (param_53) >>
+endobj
+805 0 obj
+(autofullscreen)
+endobj
+806 0 obj
+<< /S /GoTo /D (param_54) >>
+endobj
+808 0 obj
+(normal)
+endobj
+809 0 obj
+<< /S /GoTo /D (param_55) >>
+endobj
+811 0 obj
+(menutext)
+endobj
+812 0 obj
+<< /S /GoTo /D (ptx@section_link:26) >>
+endobj
+814 0 obj
+(Areas)
+endobj
+815 0 obj
+<< /S /GoTo /D (ptx@section_link:27) >>
+endobj
+817 0 obj
+(Using a grid)
+endobj
+818 0 obj
+<< /S /GoTo /D (ptx@section_link:16) >>
+endobj
+820 0 obj
+(Adding material to areas)
+endobj
+821 0 obj
+<< /S /GoTo /D (ptx@section_link:28) >>
+endobj
+823 0 obj
+(Dimensions)
+endobj
+824 0 obj
+<< /S /GoTo /D (param_56) >>
+endobj
+826 0 obj
+(width)
+endobj
+827 0 obj
+<< /S /GoTo /D (param_57) >>
+endobj
+829 0 obj
+(hshift)
+endobj
+830 0 obj
+<< /S /GoTo /D (param_58) >>
+endobj
+832 0 obj
+(hshift*)
+endobj
+833 0 obj
+<< /S /GoTo /D (param_59) >>
+endobj
+835 0 obj
+(height)
+endobj
+836 0 obj
+<< /S /GoTo /D (param_60) >>
+endobj
+838 0 obj
+(vshift)
+endobj
+839 0 obj
+<< /S /GoTo /D (param_61) >>
+endobj
+841 0 obj
+(vshift*)
+endobj
+842 0 obj
+<< /S /GoTo /D (param_62) >>
+endobj
+844 0 obj
+(hsize)
+endobj
+845 0 obj
+<< /S /GoTo /D (param_63) >>
+endobj
+847 0 obj
+(left)
+endobj
+848 0 obj
+<< /S /GoTo /D (param_64) >>
+endobj
+850 0 obj
+(right)
+endobj
+851 0 obj
+<< /S /GoTo /D (param_65) >>
+endobj
+853 0 obj
+(hpos)
+endobj
+854 0 obj
+<< /S /GoTo /D (param_66) >>
+endobj
+856 0 obj
+(vsize)
+endobj
+857 0 obj
+<< /S /GoTo /D (param_67) >>
+endobj
+859 0 obj
+(top)
+endobj
+860 0 obj
+<< /S /GoTo /D (param_68) >>
+endobj
+862 0 obj
+(bottom)
+endobj
+863 0 obj
+<< /S /GoTo /D (param_69) >>
+endobj
+865 0 obj
+(vpos)
+endobj
+866 0 obj
+<< /S /GoTo /D (param_70) >>
+endobj
+868 0 obj
+(baselineskip)
+endobj
+869 0 obj
+<< /S /GoTo /D (param_71) >>
+endobj
+871 0 obj
+(topskip)
+endobj
+872 0 obj
+<< /S /GoTo /D (param_72) >>
+endobj
+874 0 obj
+(parskip)
+endobj
+875 0 obj
+<< /S /GoTo /D (param_73) >>
+endobj
+877 0 obj
+(parindent)
+endobj
+878 0 obj
+<< /S /GoTo /D (ptx@section_link:29) >>
+endobj
+880 0 obj
+(Content)
+endobj
+881 0 obj
+<< /S /GoTo /D (param_74) >>
+endobj
+883 0 obj
+(visible)
+endobj
+884 0 obj
+<< /S /GoTo /D (param_75) >>
+endobj
+886 0 obj
+(everyposition)
+endobj
+887 0 obj
+<< /S /GoTo /D (param_76) >>
+endobj
+889 0 obj
+(everyfreeposition)
+endobj
+890 0 obj
+<< /S /GoTo /D (ptx@section_link:30) >>
+endobj
+892 0 obj
+(Style)
+endobj
+893 0 obj
+<< /S /GoTo /D (param_77) >>
+endobj
+895 0 obj
+(background)
+endobj
+896 0 obj
+<< /S /GoTo /D (param_78) >>
+endobj
+898 0 obj
+(foreground)
+endobj
+899 0 obj
+<< /S /GoTo /D (param_79) >>
+endobj
+901 0 obj
+(image)
+endobj
+902 0 obj
+<< /S /GoTo /D (param_80) >>
+endobj
+904 0 obj
+(font)
+endobj
+905 0 obj
+<< /S /GoTo /D (param_81) >>
+endobj
+907 0 obj
+(frame)
+endobj
+908 0 obj
+<< /S /GoTo /D (param_82) >>
+endobj
+910 0 obj
+(frame_width)
+endobj
+911 0 obj
+<< /S /GoTo /D (param_83) >>
+endobj
+913 0 obj
+(frame_color)
+endobj
+914 0 obj
+<< /S /GoTo /D (param_84) >>
+endobj
+916 0 obj
+(frame_corner)
+endobj
+917 0 obj
+<< /S /GoTo /D (param_85) >>
+endobj
+919 0 obj
+(frame_dash)
+endobj
+920 0 obj
+<< /S /GoTo /D (ptx@section_link:31) >>
+endobj
+922 0 obj
+(Navigation)
+endobj
+923 0 obj
+<< /S /GoTo /D (ptx@section_link:13) >>
+endobj
+925 0 obj
+(Creating bookmarks)
+endobj
+926 0 obj
+<< /S /GoTo /D (ptx@section_link:32) >>
+endobj
+928 0 obj
+(Navigation commands)
+endobj
+929 0 obj
+<< /S /GoTo /D (ptx@section_link:18) >>
+endobj
+931 0 obj
+(Colors, shades, and images)
+endobj
+932 0 obj
+<< /S /GoTo /D (ptx@section_link:25) >>
+endobj
+934 0 obj
+(Colors)
+endobj
+935 0 obj
+<< /S /GoTo /D (ptx@section_link:33) >>
+endobj
+937 0 obj
+(Shades)
+endobj
+938 0 obj
+<< /S /GoTo /D (param_86) >>
+endobj
+940 0 obj
+(model)
+endobj
+941 0 obj
+<< /S /GoTo /D (param_87) >>
+endobj
+943 0 obj
+(from)
+endobj
+944 0 obj
+<< /S /GoTo /D (param_88) >>
+endobj
+946 0 obj
+(to)
+endobj
+947 0 obj
+<< /S /GoTo /D (param_89) >>
+endobj
+949 0 obj
+(angle)
+endobj
+950 0 obj
+<< /S /GoTo /D (param_90) >>
+endobj
+952 0 obj
+(speed)
+endobj
+953 0 obj
+<< /S /GoTo /D (param_91) >>
+endobj
+955 0 obj
+(width)
+endobj
+956 0 obj
+<< /S /GoTo /D (param_92) >>
+endobj
+958 0 obj
+(height)
+endobj
+959 0 obj
+<< /S /GoTo /D (param_93) >>
+endobj
+961 0 obj
+(fixed)
+endobj
+962 0 obj
+<< /S /GoTo /D (ptx@section_link:19) >>
+endobj
+964 0 obj
+(Images)
+endobj
+965 0 obj
+<< /S /GoTo /D (ptx@section_link:34) >>
+endobj
+967 0 obj
+(Drawing symbols)
+endobj
+968 0 obj
+<< /S /GoTo /D (ptx@section_link:20) >>
+endobj
+970 0 obj
+(Transitions)
+endobj
+971 0 obj
+<< /S /GoTo /D (param_94) >>
+endobj
+973 0 obj
+(type)
+endobj
+974 0 obj
+<< /S /GoTo /D (param_95) >>
+endobj
+976 0 obj
+(motion)
+endobj
+977 0 obj
+<< /S /GoTo /D (param_96) >>
+endobj
+979 0 obj
+(direction)
+endobj
+980 0 obj
+<< /S /GoTo /D (param_97) >>
+endobj
+982 0 obj
+(dimension)
+endobj
+983 0 obj
+<< /S /GoTo /D (param_98) >>
+endobj
+985 0 obj
+(scale)
+endobj
+986 0 obj
+<< /S /GoTo /D (param_99) >>
+endobj
+988 0 obj
+(duration)
+endobj
+989 0 obj
+<< /S /GoTo /D (ptx@section_link:35) >>
+endobj
+991 0 obj
+(Inserting PDF code)
+endobj
+992 0 obj
+<< /S /GoTo /D (ptx@section_link:1) >>
+endobj
+994 0 obj
+(Demonstrations)
+endobj
+997 0 obj <<
+/Length 34847
+>>
+stream
+q
+0.339745 0 0 0.339745 113.386 532.417 cm
+/Im6 Do
+Q
+BT
+/F111 7.97011 Tf 0.975 0 0 1 267.807 640.013 Tm [<002F>]TJ
+0.985 0 0 1 272.489 640.013 Tm [<00480046>]TJ
+0.975 0 0 1 281.95 640.013 Tm [<0057>]TJ
+0.985 0 0 1 286.632 640.013 Tm [<0058>]TJ
+0.975 0 0 1 291.362 640.013 Tm [<0055>]TJ
+0.985 0 0 1 296.044 640.013 Tm [<0048>]TJ
+0.975 0 0 1 300.775 640.013 Tm [<0055>]TJ
+0.99 0 0 1 305.457 640.013 Tm [<0027>]TJ
+0.985 0 0 1 310.211 640.013 Tm [<004800500052>]TJ
+0.975 0 0 1 324.402 640.013 Tm [<00100037>]TJ
+0.985 0 0 1 333.767 640.013 Tm [<004B00480033005200520047>]TJ
+0.975 0 0 1 362.148 640.013 Tm [<004F>]TJ
+0.985 0 0 1 366.83 640.013 Tm [<0048>]TJ
+0.975 0 0 1 371.561 640.013 Tm [<002F>]TJ
+0.985 0 0 1 376.243 640.013 Tm [<00480046>]TJ
+0.975 0 0 1 385.703 640.013 Tm [<0057>]TJ
+0.985 0 0 1 390.386 640.013 Tm [<0058>]TJ
+0.975 0 0 1 395.116 640.013 Tm [<0055>]TJ
+0.985 0 0 1 399.798 640.013 Tm [<00480056>]TJ
+0.975 0 0 1 409.259 640.013 Tm [<0011>]TJ
+0.985 0 0 1 413.941 640.013 Tm [<00530047>]TJ
+0.975 0 0 1 423.401 640.013 Tm [<0049>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 430.298 640.013 Tm [<0009>]TJ
+0.985 0 0 1 433.484 640.013 Tm [<00450050004F>]TJ
+0.975 0 0 1 449.029 640.013 Tm [<00080055>]TJ
+0.985 0 0 1 456.683 640.013 Tm [<00420054004C>]TJ
+0.975 0 0 1 469.97 640.013 Tm [<000A>-228<004A>]TJ
+0.985 0 0 1 477.955 640.013 Tm [<0054>]TJ
+0.98 0 0 1 267.807 628.058 Tm [<004E004200450046>-150<0050>]TJ
+0.97 0 0 1 295.996 628.058 Tm [<0047>-151<00EB0057>]TJ
+0.98 0 0 1 310.682 628.058 Tm [<0046>-150<0054>]TJ
+0.97 0 0 1 320.408 628.058 Tm [<004D004A>]TJ
+0.98 0 0 1 325.453 628.058 Tm [<004500460054>-150<0046004200440049>-150<0045>]TJ
+0.97 0 0 1 364.851 628.058 Tm [<004A>]TJ
+0.98 0 0 1 367.422 628.058 Tm [<00540051>]TJ
+0.97 0 0 1 376.434 628.058 Tm [<004D>]TJ
+0.98 0 0 1 378.908 628.058 Tm [<0042>]TJ
+0.97 0 0 1 383.34 628.058 Tm [<005A004A>]TJ
+0.98 0 0 1 390.375 628.058 Tm [<004F0048>-150<0042>-150<0045>]TJ
+0.97 0 0 1 412.825 628.058 Tm [<004A00EA>]TJ
+0.98 0 0 1 421.493 628.058 Tm [<0046>]TJ
+0.97 0 0 1 425.838 628.058 Tm [<0053>]TJ
+0.98 0 0 1 429.462 628.058 Tm [<0046004F>]TJ
+0.97 0 0 1 439.255 628.058 Tm [<0055>]TJ
+0.98 0 0 1 444.181 628.058 Tm [<0051>]TJ
+0.97 0 0 1 449.277 628.058 Tm [<0053>]TJ
+0.98 0 0 1 452.901 628.058 Tm [<004600540046004F>]TJ
+0.97 0 0 1 470.953 628.058 Tm [<0055>]TJ
+0.98 0 0 1 474.413 628.058 Tm [<0042>]TJ
+0.97 0 0 1 478.846 628.058 Tm [<000E>]TJ
+0.99 0 0 1 267.807 616.103 Tm [<0055004A>]TJ
+0.995 0 0 1 273.962 616.103 Tm [<0050004F>-218<0054>]TJ
+0.99 0 0 1 290.636 616.103 Tm [<0055005A004D>]TJ
+0.995 0 0 1 301.248 616.103 Tm [<0046>]TJ
+0.99 0 0 1 305.659 616.103 Tm [<000D>]TJ
+0.995 0 0 1 310.243 616.103 Tm [<00540050004E0046>]TJ
+0.99 0 0 1 331.685 616.103 Tm [<0055004A>]TJ
+0.995 0 0 1 337.839 616.103 Tm [<004E00460054>]TJ
+0.99 0 0 1 356.437 616.103 Tm [<0057>]TJ
+0.995 0 0 1 361.102 616.103 Tm [<0046>]TJ
+0.99 0 0 1 365.513 616.103 Tm [<0053>]TJ
+0.995 0 0 1 369.212 616.103 Tm [<0048>]TJ
+0.99 0 0 1 373.831 616.103 Tm [<004A>]TJ
+0.995 0 0 1 376.455 616.103 Tm [<004F0048>-218<0050004F>]TJ
+0.99 0 0 1 401.466 616.103 Tm [<0055>]TJ
+0.995 0 0 1 404.997 616.103 Tm [<00490046>-218<0031005000580046>]TJ
+0.99 0 0 1 438.553 616.103 Tm [<0053>]TJ
+0.995 0 0 1 442.251 616.103 Tm [<00310050>]TJ
+0.99 0 0 1 452.679 616.103 Tm [<004A>]TJ
+0.995 0 0 1 455.303 616.103 Tm [<004F>]TJ
+0.99 0 0 1 460.834 616.103 Tm [<0055000E004A>]TJ
+0.995 0 0 1 470.096 616.103 Tm [<00540049>]TJ
+0.99 0 0 1 479.473 616.103 Tm [<000F>]TJ
+1.03 0 0 1 267.807 604.148 Tm [<0265>]TJ
+1.02 0 0 1 278.222 604.148 Tm [<0046>-221<00510050>]TJ
+1.03 0 0 1 295.435 604.148 Tm [<004A>]TJ
+1.02 0 0 1 298.164 604.148 Tm [<004F>]TJ
+1.03 0 0 1 303.835 604.148 Tm [<0055>]TJ
+1.02 0 0 1 309.762 604.148 Tm [<0050>]TJ
+1.03 0 0 1 314.894 604.148 Tm [<0047>-219<0055>]TJ
+1.02 0 0 1 324.249 604.148 Tm [<0049>]TJ
+1.03 0 0 1 329.787 604.148 Tm [<004A>]TJ
+1.02 0 0 1 332.517 604.148 Tm [<0054>-221<00450046004E0050004F0054>]TJ
+1.03 0 0 1 371.791 604.148 Tm [<00550053>]TJ
+1.02 0 0 1 379.313 604.148 Tm [<0042>]TJ
+1.03 0 0 1 383.926 604.148 Tm [<0055004A>]TJ
+1.02 0 0 1 390.329 604.148 Tm [<0050004F>]TJ
+1.03 0 0 1 403.385 604.148 Tm [<004A>]TJ
+1.02 0 0 1 406.115 604.148 Tm [<0054>]TJ
+1.03 0 0 1 412.444 604.148 Tm [<0055>]TJ
+1.02 0 0 1 416.118 604.148 Tm [<00490042>]TJ
+1.03 0 0 1 426.269 604.148 Tm [<0055>-219<0055>]TJ
+1.02 0 0 1 435.871 604.148 Tm [<00490046>-221<0044005000450046>]TJ
+1.03 0 0 1 469.483 604.148 Tm [<0047>]TJ
+1.02 0 0 1 472.91 604.148 Tm [<0050>]TJ
+1.03 0 0 1 478.042 604.148 Tm [<0053>]TJ
+1.015 0 0 1 267.807 592.193 Tm [<0046004200440049>-217<0054>]TJ
+1.025 0 0 1 292.74 592.193 Tm [<004D004A>]TJ
+1.015 0 0 1 298.071 592.193 Tm [<00450046>]TJ
+1.025 0 0 1 310.041 592.193 Tm [<0053>]TJ
+1.015 0 0 1 313.87 592.193 Tm [<0046004E0042>]TJ
+1.025 0 0 1 331.172 592.193 Tm [<004A>]TJ
+1.015 0 0 1 333.888 592.193 Tm [<004F0054>-217<004E>]TJ
+1.025 0 0 1 353.998 592.193 Tm [<004A>]TJ
+1.015 0 0 1 356.715 592.193 Tm [<004F>]TJ
+1.025 0 0 1 362.357 592.193 Tm [<004A>]TJ
+1.015 0 0 1 365.073 592.193 Tm [<004E0042>]TJ
+1.025 0 0 1 377.875 592.193 Tm [<004D001B>-288<005A>]TJ
+1.015 0 0 1 390.651 592.193 Tm [<00500056>-217<00450050004F>]TJ
+1.025 0 0 1 419.316 592.193 Tm [<00080055>]TJ
+1.015 0 0 1 427.236 592.193 Tm [<004F004600460045>]TJ
+1.025 0 0 1 449.348 592.193 Tm [<0055>]TJ
+1.015 0 0 1 453.004 592.193 Tm [<0050>-217<0058>]TJ
+1.025 0 0 1 467.188 592.193 Tm [<0053004A0055>]TJ
+1.015 0 0 1 477.39 592.193 Tm [<0046>]TJ
+0.995 0 0 1 267.807 580.238 Tm [<00490056004F00450053004600450054>-223<00500047>-223<004D004A004F00460054>-224<00500047>-223<0042005500550053004A0043005600550046>-224<0054005100460044004A00EB004400420055004A0050004F0054>-223<00550050>-224<005400460055>-223<00560051>]TJ
+0.99 0 0 1 267.807 568.282 Tm [<0042>-221<0051>]TJ
+0.985 0 0 1 279.617 568.282 Tm [<0053>]TJ
+0.99 0 0 1 283.297 568.282 Tm [<004600540046004F>]TJ
+0.985 0 0 1 301.534 568.282 Tm [<0055>]TJ
+0.99 0 0 1 305.047 568.282 Tm [<0042>]TJ
+0.985 0 0 1 309.525 568.282 Tm [<0055004A>]TJ
+0.99 0 0 1 315.648 568.282 Tm [<0050004F>]TJ
+0.985 0 0 1 326.132 568.282 Tm [<000F>]TJ
+0.995 0 0 1 331.456 568.282 Tm [<0022>]TJ
+0.985 0 0 1 337.464 568.282 Tm [<0053>]TJ
+0.99 0 0 1 341.143 568.282 Tm [<004600420054>-221<0042>]TJ
+0.985 0 0 1 360.627 568.282 Tm [<0053>]TJ
+0.99 0 0 1 364.307 568.282 Tm [<0046>-221<0056005400460045>]TJ
+0.985 0 0 1 391.754 568.282 Tm [<0047>]TJ
+0.99 0 0 1 395.031 568.282 Tm [<0050>]TJ
+0.985 0 0 1 400.012 568.282 Tm [<0053>]TJ
+0.99 0 0 1 405.876 568.282 Tm [<0045004600440050>]TJ
+0.985 0 0 1 424.359 568.282 Tm [<0053>]TJ
+0.99 0 0 1 428.039 568.282 Tm [<0042>]TJ
+0.985 0 0 1 432.517 568.282 Tm [<0055004A>]TJ
+0.99 0 0 1 438.64 568.282 Tm [<0050004F>-221<0042004F0045>]TJ
+0.985 0 0 1 468.612 568.282 Tm [<0055>]TJ
+0.99 0 0 1 472.125 568.282 Tm [<00490046>]TJ
+1.02 0 0 1 267.807 556.327 Tm [<0054>]TJ
+1.03 0 0 1 271.882 556.327 Tm [<004D004A>]TJ
+1.02 0 0 1 277.238 556.327 Tm [<00450046>]TJ
+1.03 0 0 1 287.055 556.327 Tm [<0008>]TJ
+1.02 0 0 1 289.128 556.327 Tm [<0054>]TJ
+1.03 0 0 1 295.372 556.327 Tm [<0055004A0055004D>]TJ
+1.02 0 0 1 308.076 556.327 Tm [<0046>]TJ
+1.03 0 0 1 312.598 556.327 Tm [<000D>]TJ
+1.02 0 0 1 317.285 556.327 Tm [<0042004F0045>-213<004F0050>-214<00440050004E0051>]TJ
+1.03 0 0 1 370.787 556.327 Tm [<004D>]TJ
+1.02 0 0 1 373.414 556.327 Tm [<0046>]TJ
+1.03 0 0 1 377.936 556.327 Tm [<0059>]TJ
+1.02 0 0 1 384.969 556.327 Tm [<005100500054>]TJ
+1.03 0 0 1 399.48 556.327 Tm [<004A0055004A>]TJ
+1.02 0 0 1 408.613 556.327 Tm [<0050004F>]TJ
+1.03 0 0 1 419.415 556.327 Tm [<004A>]TJ
+1.02 0 0 1 422.145 556.327 Tm [<004F0048>]TJ
+1.03 0 0 1 434.72 556.327 Tm [<004A>]TJ
+1.02 0 0 1 437.449 556.327 Tm [<0054>]TJ
+1.03 0 0 1 443.693 556.327 Tm [<004A>]TJ
+1.02 0 0 1 446.423 556.327 Tm [<004F>]TJ
+1.03 0 0 1 452.093 556.327 Tm [<0057>]TJ
+1.02 0 0 1 456.947 556.327 Tm [<0050>]TJ
+1.03 0 0 1 462.079 556.327 Tm [<004D0057>]TJ
+1.02 0 0 1 469.559 556.327 Tm [<00460045>]TJ
+1.03 0 0 1 479.376 556.327 Tm [<000F>]TJ
+1.03 0 0 1 267.807 544.372 Tm [<0265>]TJ
+1.02 0 0 1 278.222 544.372 Tm [<0046>-235<00540042004E0046>-235<0054>]TJ
+1.03 0 0 1 313.061 544.372 Tm [<0055>]TJ
+1.02 0 0 1 316.734 544.372 Tm [<004600510054>-235<0042>]TJ
+1.03 0 0 1 337.639 544.372 Tm [<0053>]TJ
+1.02 0 0 1 341.487 544.372 Tm [<0046>]TJ
+1.03 0 0 1 348.399 544.372 Tm [<0053>]TJ
+1.02 0 0 1 352.247 544.372 Tm [<00460056005400460045>]TJ
+1.03 0 0 1 378.415 544.372 Tm [<0009>]TJ
+1.02 0 0 1 381.781 544.372 Tm [<0058>]TJ
+1.03 0 0 1 388.691 544.372 Tm [<004A0055>]TJ
+1.02 0 0 1 395.095 544.372 Tm [<0049>-235<0054>]TJ
+1.03 0 0 1 407.097 544.372 Tm [<004A004D004D005A>-232<0055>]TJ
+1.02 0 0 1 425.885 544.372 Tm [<0046>]TJ
+1.03 0 0 1 430.407 544.372 Tm [<00590055000D>]TJ
+1.02 0 0 1 443.898 544.372 Tm [<00450050004F>]TJ
+1.03 0 0 1 459.994 544.372 Tm [<00080055>]TJ
+1.02 0 0 1 468.131 544.372 Tm [<00420054004C>]TJ
+0.99 0 0 1 267.807 532.417 Tm [<0046004A0055004900460053000A>-223<0042004F0045>-224<004A004D004D0056005400550053004200550046>-223<005500490046>-224<005600540046>-223<00500047>-224<005500490046>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.99 0 0 1 410.48 532.417 Tm [<004F004800490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.99 0 0 1 431.702 532.417 Tm [<0042005500550053004A0043005600550046>-223<004700500053>]TJ
+1.02 0 0 1 113.386 520.462 Tm [<0054>]TJ
+1.03 0 0 1 117.461 520.462 Tm [<0055>]TJ
+1.02 0 0 1 121.134 520.462 Tm [<004600510054>-262<00420054>-262<0042004F>-262<004600420054>]TJ
+1.03 0 0 1 175.211 520.462 Tm [<005A>]TJ
+1.02 0 0 1 182.615 520.462 Tm [<00580042>]TJ
+1.03 0 0 1 194.139 520.462 Tm [<005A>-259<0055>]TJ
+1.02 0 0 1 205.218 520.462 Tm [<0050>-262<0044>]TJ
+1.03 0 0 1 217.109 520.462 Tm [<0053>]TJ
+1.02 0 0 1 220.957 520.462 Tm [<00460042>]TJ
+1.03 0 0 1 230.092 520.462 Tm [<0055>]TJ
+1.02 0 0 1 233.766 520.462 Tm [<0046>]TJ
+1.03 0 0 1 240.952 520.462 Tm [<004D004A>]TJ
+1.02 0 0 1 246.308 520.462 Tm [<0054>]TJ
+1.03 0 0 1 250.383 520.462 Tm [<0055>-259<004A0055>]TJ
+1.02 0 0 1 263.124 520.462 Tm [<0046004E0054>]TJ
+1.03 0 0 1 279.973 520.462 Tm [<000F>]TJ
+1.02 0 0 1 286.826 520.462 Tm [<002E00500054>]TJ
+1.03 0 0 1 304.863 520.462 Tm [<0055>]TJ
+1.02 0 0 1 311.201 520.462 Tm [<0050>]TJ
+1.03 0 0 1 316.332 520.462 Tm [<0047>-259<0055>]TJ
+1.02 0 0 1 326.097 520.462 Tm [<00490046>-262<0046>]TJ
+1.03 0 0 1 343.344 520.462 Tm [<00EA>]TJ
+1.02 0 0 1 349.819 520.462 Tm [<0050>]TJ
+1.03 0 0 1 354.951 520.462 Tm [<00530055000D>-271<0055>]TJ
+1.02 0 0 1 371.442 520.462 Tm [<00490050005600480049>]TJ
+1.03 0 0 1 397.751 520.462 Tm [<000D>-271<004A>]TJ
+1.02 0 0 1 405.777 520.462 Tm [<0054>-262<005400510046004F>]TJ
+1.03 0 0 1 432.088 520.462 Tm [<0055>]TJ
+1.02 0 0 1 438.425 520.462 Tm [<0050004F>-262<0054>]TJ
+1.03 0 0 1 455.966 520.462 Tm [<005A>]TJ
+1.02 0 0 1 460.707 520.462 Tm [<004E00430050>]TJ
+1.03 0 0 1 479.263 520.462 Tm [<004D>]TJ
+0.98 0 0 1 113.386 508.506 Tm [<004500460054>]TJ
+0.97 0 0 1 126.732 508.506 Tm [<004A>]TJ
+0.98 0 0 1 129.303 508.506 Tm [<0048004F>]TJ
+0.97 0 0 1 139.301 508.506 Tm [<000D>-199<00470053>]TJ
+0.98 0 0 1 150.452 508.506 Tm [<0050004E>-191<0054>]TJ
+0.97 0 0 1 169.093 508.506 Tm [<004A>]TJ
+0.98 0 0 1 171.664 508.506 Tm [<004E0051>]TJ
+0.97 0 0 1 184.688 508.506 Tm [<004D>]TJ
+0.98 0 0 1 187.162 508.506 Tm [<0046>-191<0054005200560042>]TJ
+0.97 0 0 1 211.827 508.506 Tm [<0053>]TJ
+0.98 0 0 1 215.451 508.506 Tm [<0046>]TJ
+0.97 0 0 1 221.663 508.506 Tm [<0055>]TJ
+0.98 0 0 1 225.122 508.506 Tm [<0050>-191<004E00560054>]TJ
+0.97 0 0 1 248.918 508.506 Tm [<004A>]TJ
+0.98 0 0 1 251.489 508.506 Tm [<0044>-191<004F0050>]TJ
+0.97 0 0 1 267.67 508.506 Tm [<0055>]TJ
+0.98 0 0 1 271.129 508.506 Tm [<0046>]TJ
+0.97 0 0 1 277.341 508.506 Tm [<0055>]TJ
+0.98 0 0 1 280.801 508.506 Tm [<0050>-191<005400460042>-191<005400490046>]TJ
+0.97 0 0 1 315.739 508.506 Tm [<004D004D000F>-291<0009>]TJ
+0.98 0 0 1 329.039 508.506 Tm [<002F0050>]TJ
+0.97 0 0 1 340.96 508.506 Tm [<0055>]TJ
+0.98 0 0 1 344.42 508.506 Tm [<0046>]TJ
+0.97 0 0 1 350.632 508.506 Tm [<0055>]TJ
+0.98 0 0 1 354.091 508.506 Tm [<00490042>]TJ
+0.97 0 0 1 363.845 508.506 Tm [<0055>-193<0055>]TJ
+0.98 0 0 1 372.632 508.506 Tm [<0049>]TJ
+0.97 0 0 1 377.953 508.506 Tm [<004A>]TJ
+0.98 0 0 1 380.523 508.506 Tm [<0054>-191<00450046004E0050004F0054>]TJ
+0.97 0 0 1 417.959 508.506 Tm [<00550053>]TJ
+0.98 0 0 1 425.042 508.506 Tm [<0042>]TJ
+0.97 0 0 1 429.475 508.506 Tm [<0055004A>]TJ
+0.98 0 0 1 435.505 508.506 Tm [<0050004F>-191<00440050004F>]TJ
+0.97 0 0 1 462.064 508.506 Tm [<0055>]TJ
+0.98 0 0 1 465.524 508.506 Tm [<0042>]TJ
+0.97 0 0 1 469.956 508.506 Tm [<004A>]TJ
+0.98 0 0 1 472.527 508.506 Tm [<004F0054>]TJ
+0.98 0 0 1 113.386 496.551 Tm [<0054005600440049>-228<004500460044>]TJ
+0.975 0 0 1 147.308 496.551 Tm [<004D>]TJ
+0.98 0 0 1 149.794 496.551 Tm [<0042>]TJ
+0.975 0 0 1 154.227 496.551 Tm [<0053>]TJ
+0.98 0 0 1 157.87 496.551 Tm [<0042>]TJ
+0.975 0 0 1 162.302 496.551 Tm [<0055004A>]TJ
+0.98 0 0 1 168.363 496.551 Tm [<0050004F0054>-228<00420054>]TJ
+0.975 0 0 1 195.465 496.551 Tm [<0041>]TJ
+/F111 7.97011 Tf 0.98 0 0 1 197.427 496.551 Tm [<004B0056004B>]TJ
+0.975 0 0 1 211.545 496.551 Tm [<004C004900570003>]TJ
+0.98 0 0 1 230.274 496.551 Tm [<004B0056004B>]TJ
+0.975 0 0 1 244.393 496.551 Tm [<004C00490057000D000300200003>]TJ
+0.98 0 0 1 277.169 496.551 Tm [<001500460050>]TJ
+/F105 9.96264 Tf 0.975 0 0 1 291.288 496.551 Tm [<0008>]TJ
+0.98 0 0 1 295.48 496.551 Tm [<005800490046004F>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 319.462 496.551 Tm [<004B0056004B>]TJ
+0.975 0 0 1 333.581 496.551 Tm [<004C00490057000D>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 354.54 496.551 Tm [<004A>]TJ
+0.98 0 0 1 357.124 496.551 Tm [<0054>-228<00540056005100510050005400460045>]TJ
+0.975 0 0 1 403.039 496.551 Tm [<0055>]TJ
+0.98 0 0 1 406.517 496.551 Tm [<0050>-228<00420056>]TJ
+0.975 0 0 1 423.265 496.551 Tm [<0055>]TJ
+0.98 0 0 1 426.742 496.551 Tm [<0050004E0042>]TJ
+0.975 0 0 1 444.033 496.551 Tm [<0055004A>]TJ
+0.98 0 0 1 450.094 496.551 Tm [<00440042>]TJ
+0.975 0 0 1 458.462 496.551 Tm [<004D004D005A>]TJ
+0.98 0 0 1 470.152 496.551 Tm [<00540046>]TJ
+0.975 0 0 1 478.412 496.551 Tm [<0055>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 113.386 484.596 Tm [<004B0056004B>]TJ
+0.975 0 0 1 127.505 484.596 Tm [<004C00490057>]TJ
+0 g 0 G
+/F105 9.96264 Tf 0.975 0 0 1 143.763 484.596 Tm [<004A0047>-227<0055>]TJ
+0.98 0 0 1 155.28 484.596 Tm [<00490046>]TJ
+0.975 0 0 1 167.158 484.596 Tm [<004D>]TJ
+0.98 0 0 1 169.644 484.596 Tm [<0042>]TJ
+0.975 0 0 1 174.077 484.596 Tm [<00550055>]TJ
+0.98 0 0 1 181.032 484.596 Tm [<0046>]TJ
+0.975 0 0 1 185.377 484.596 Tm [<0053>-227<004A>]TJ
+0.98 0 0 1 193.815 484.596 Tm [<0054004F>]TJ
+0.975 0 0 1 203.178 484.596 Tm [<00080055>]TJ
+0.98 0 0 1 210.829 484.596 Tm [<0054005100460044>]TJ
+0.975 0 0 1 228.12 484.596 Tm [<004A00EB>]TJ
+0.98 0 0 1 236.153 484.596 Tm [<00460045>]TJ
+0.975 0 0 1 245.584 484.596 Tm [<001C>]TJ
+0.98 0 0 1 250.186 484.596 Tm [<00430056>]TJ
+0.975 0 0 1 260.311 484.596 Tm [<0055>]TJ
+0.98 0 0 1 266 484.596 Tm [<0054>]TJ
+0.975 0 0 1 269.915 484.596 Tm [<004A>]TJ
+0.98 0 0 1 272.499 484.596 Tm [<004F00440046>]TJ
+0.975 0 0 1 288.438 484.596 Tm [<0055>]TJ
+0.98 0 0 1 291.915 484.596 Tm [<00490046>-226<00540042004E0046>-227<0042>]TJ
+0.975 0 0 1 331.057 484.596 Tm [<0053>]TJ
+0.98 0 0 1 334.699 484.596 Tm [<004600420054>-226<0042>]TJ
+0.975 0 0 1 354.036 484.596 Tm [<0053>]TJ
+0.98 0 0 1 357.679 484.596 Tm [<0046>]TJ
+0.975 0 0 1 364.235 484.596 Tm [<0053>]TJ
+0.98 0 0 1 367.878 484.596 Tm [<00460056005400460045>]TJ
+0.975 0 0 1 392.936 484.596 Tm [<0047>]TJ
+0.98 0 0 1 396.18 484.596 Tm [<0050>]TJ
+0.975 0 0 1 401.11 484.596 Tm [<0053>]TJ
+0.98 0 0 1 406.965 484.596 Tm [<0042>]TJ
+0.975 0 0 1 411.397 484.596 Tm [<004D004D>]TJ
+0.98 0 0 1 418.582 484.596 Tm [<0054>]TJ
+0.975 0 0 1 422.497 484.596 Tm [<004D004A>]TJ
+0.98 0 0 1 427.568 484.596 Tm [<004500460054>]TJ
+0.975 0 0 1 440.914 484.596 Tm [<000D>]TJ
+.4 .4 .4 rg .4 .4 .4 RG
+/F111 7.97011 Tf 0.98 0 0 1 445.511 484.596 Tm [<004B0056004B>]TJ
+0.975 0 0 1 459.63 484.596 Tm [<004C00490057>]TJ
+0 g 0 G
+/F63 9.96264 Tf 0.975 0 0 1 475.888 484.596 Tm [<004A>]TJ
+0.98 0 0 1 478.326 484.596 Tm [<0054>]TJ
+/F105 9.96264 Tf 1 0 0 1 113.386 472.641 Tm [<0054005100460044004A00EB00460045>-220<00420047005500460053>-220<005500490046>-220<00EB005300540055>-220<0054004D004A00450046000F000A>]TJ
+ET
+q
+0.339745 0 0 0.339745 308.54 341.134 cm
+/Im7 Do
+Q
+BT
+/F111 7.97011 Tf 1.005 0 0 1 113.386 448.731 Tm [<002F004800460057005800550048005500270048005000520010002E004C005700560046004B00360046004C004800510046>-1<00480029004C00460057004C005200510011005300470049>]TJ
+/F105 9.96264 Tf 1.005 0 0 1 294.041 448.731 Tm [<004A0054>]TJ
+1.02 0 0 1 113.386 436.775 Tm [<0042>-329<00510042>]TJ
+1.03 0 0 1 131.262 436.775 Tm [<0055>]TJ
+1.02 0 0 1 134.936 436.775 Tm [<00490046>]TJ
+1.03 0 0 1 144.996 436.775 Tm [<0055004A>]TJ
+1.02 0 0 1 151.399 436.775 Tm [<0044>-329<0042>]TJ
+1.03 0 0 1 163.453 436.775 Tm [<00550055>]TJ
+1.02 0 0 1 170.8 436.775 Tm [<0046004E0051>]TJ
+1.03 0 0 1 188.878 436.775 Tm [<0055>]TJ
+1.02 0 0 1 195.897 436.775 Tm [<0042>]TJ
+1.03 0 0 1 200.51 436.775 Tm [<0055>]TJ
+1.02 0 0 1 207.529 436.775 Tm [<0044>]TJ
+1.03 0 0 1 211.624 436.775 Tm [<0053>]TJ
+1.02 0 0 1 215.472 436.775 Tm [<00460042>]TJ
+1.03 0 0 1 224.608 436.775 Tm [<0055004A>]TJ
+1.02 0 0 1 231.011 436.775 Tm [<004F0048>-329<0042>]TJ
+1.03 0 0 1 252.72 436.775 Tm [<0057004A>]TJ
+1.02 0 0 1 260.303 436.775 Tm [<004500460050>-329<00480042004E0046>]TJ
+1.02 0 0 1 113.386 424.82 Tm [<0058>]TJ
+1.03 0 0 1 120.296 424.82 Tm [<004A0055>]TJ
+1.02 0 0 1 126.699 424.82 Tm [<0049>]TJ
+1.03 0 0 1 135.078 424.82 Tm [<0035>]TJ
+1 0 0 1 139.235 422.753 Tm [<0026>]TJ
+1.03 0 0 1 143.519 424.82 Tm [<0039000F>]TJ
+1.015 0 0 1 154.917 424.82 Tm [<0030>]TJ
+1.02 0 0 1 162.178 424.82 Tm [<0043>]TJ
+1.03 0 0 1 167.35 424.82 Tm [<0057004A>]TJ
+1.02 0 0 1 174.934 424.82 Tm [<005000560054>]TJ
+1.03 0 0 1 189.506 424.82 Tm [<004D005A>-276<0055>]TJ
+1.02 0 0 1 203.387 424.82 Tm [<00490046>]TJ
+1.03 0 0 1 213.448 424.82 Tm [<0053>]TJ
+1.02 0 0 1 217.296 424.82 Tm [<0046>-279<0042>]TJ
+1.03 0 0 1 229.272 424.82 Tm [<0053>]TJ
+1.02 0 0 1 233.12 424.82 Tm [<0046>-279<00430046>]TJ
+1.03 0 0 1 250.176 424.82 Tm [<00550055>]TJ
+1.02 0 0 1 257.524 424.82 Tm [<0046>]TJ
+1.03 0 0 1 262.046 424.82 Tm [<0053>]TJ
+1.02 0 0 1 268.734 424.82 Tm [<00580042>]TJ
+1.03 0 0 1 280.258 424.82 Tm [<005A>]TJ
+1.02 0 0 1 284.998 424.82 Tm [<0054>]TJ
+1.03 0 0 1 291.914 424.82 Tm [<0055>]TJ
+1.02 0 0 1 295.587 424.82 Tm [<0050>]TJ
+1.02 0 0 1 113.386 412.865 Tm [<00450050>]TJ
+1.03 0 0 1 126.116 412.865 Tm [<0055>]TJ
+1.02 0 0 1 129.789 412.865 Tm [<00490042>]TJ
+1.03 0 0 1 139.941 412.865 Tm [<0055000F>]TJ
+1.02 0 0 1 149.387 412.865 Tm [<002F0046>]TJ
+1.03 0 0 1 161.185 412.865 Tm [<0057>]TJ
+1.02 0 0 1 166.039 412.865 Tm [<0046>]TJ
+1.03 0 0 1 170.561 412.865 Tm [<00530055>]TJ
+1.02 0 0 1 178.082 412.865 Tm [<00490046>]TJ
+1.03 0 0 1 188.143 412.865 Tm [<004D>]TJ
+1.02 0 0 1 190.769 412.865 Tm [<004600540054>]TJ
+1.03 0 0 1 203.441 412.865 Tm [<000D>-227<0055>]TJ
+1.02 0 0 1 211.961 412.865 Tm [<00490046>-226<0051>]TJ
+1.03 0 0 1 229.629 412.865 Tm [<0053>]TJ
+1.02 0 0 1 233.477 412.865 Tm [<004600540046004F>]TJ
+1.03 0 0 1 252.267 412.865 Tm [<0055>]TJ
+1.02 0 0 1 255.94 412.865 Tm [<0042>]TJ
+1.03 0 0 1 260.554 412.865 Tm [<0055004A>]TJ
+1.02 0 0 1 266.957 412.865 Tm [<0050004F>]TJ
+1.03 0 0 1 280.063 412.865 Tm [<004A004D004D>]TJ
+1.02 0 0 1 288.046 412.865 Tm [<00560054>]TJ
+1.03 0 0 1 297.487 412.865 Tm [<000E>]TJ
+1.03 0 0 1 113.386 400.91 Tm [<00550053>]TJ
+1.02 0 0 1 120.908 400.91 Tm [<0042>]TJ
+1.03 0 0 1 125.521 400.91 Tm [<0055>]TJ
+1.02 0 0 1 129.195 400.91 Tm [<00460054>-220<004E0042004F>]TJ
+1.03 0 0 1 158.564 400.91 Tm [<005A>]TJ
+/F63 9.96264 Tf 1.03 0 0 1 165.543 400.91 Tm [<002D>]TJ
+1.02 0 0 1 170.807 400.91 Tm [<00460044>]TJ
+1.03 0 0 1 178.57 400.91 Tm [<0055>]TJ
+1.02 0 0 1 182.111 400.91 Tm [<0056>]TJ
+1.03 0 0 1 187.059 400.91 Tm [<0053>]TJ
+1.02 0 0 1 190.795 400.91 Tm [<0046>]TJ
+1.03 0 0 1 194.9 400.91 Tm [<0053>]TJ
+/F105 9.96264 Tf 1.03 0 0 1 198.635 400.91 Tm [<0008>]TJ
+1.02 0 0 1 200.708 400.91 Tm [<0054>]TJ
+1.03 0 0 1 207.02 400.91 Tm [<0047>]TJ
+1.02 0 0 1 210.448 400.91 Tm [<00460042>]TJ
+1.03 0 0 1 219.583 400.91 Tm [<0055>]TJ
+1.02 0 0 1 223.257 400.91 Tm [<0056>]TJ
+1.03 0 0 1 228.622 400.91 Tm [<0053>]TJ
+1.02 0 0 1 232.47 400.91 Tm [<00460054>]TJ
+1.03 0 0 1 241.067 400.91 Tm [<000D>-219<004A>]TJ
+1.02 0 0 1 248.56 400.91 Tm [<004F0044>]TJ
+1.03 0 0 1 258.326 400.91 Tm [<004D>]TJ
+1.02 0 0 1 260.952 400.91 Tm [<00560045>]TJ
+1.03 0 0 1 271.612 400.91 Tm [<004A>]TJ
+1.02 0 0 1 274.342 400.91 Tm [<004F0048>]TJ
+1.03 0 0 1 286.985 400.91 Tm [<0055>]TJ
+1.02 0 0 1 290.659 400.91 Tm [<00490046>]TJ
+0.98 0 0 1 113.386 388.955 Tm [<005600540046>-197<0050>]TJ
+0.97 0 0 1 133.658 388.955 Tm [<0047>]TJ
+/F111 7.97011 Tf 0.97 0 0 1 138.812 388.955 Tm [<003F>]TJ
+0.98 0 0 1 143.47 388.955 Tm [<0056004B0052005A0052>]TJ
+0.97 0 0 1 167.001 388.955 Tm [<0055>]TJ
+0.98 0 0 1 171.659 388.955 Tm [<004B>]TJ
+0.97 0 0 1 176.366 388.955 Tm [<004C>]TJ
+0.98 0 0 1 181.024 388.955 Tm [<00470048>]TJ
+/F105 9.96264 Tf 0.97 0 0 1 190.436 388.955 Tm [<000D>-204<00470053>]TJ
+0.98 0 0 1 201.635 388.955 Tm [<00460046>-197<005100500054>]TJ
+0.97 0 0 1 226.193 388.955 Tm [<004A0055004A>]TJ
+0.98 0 0 1 234.794 388.955 Tm [<0050004F0054>]TJ
+0.97 0 0 1 249.087 388.955 Tm [<000D>-204<00550053>]TJ
+0.98 0 0 1 260.518 388.955 Tm [<0042004F005400510042>]TJ
+0.97 0 0 1 283.843 388.955 Tm [<0053>]TJ
+0.98 0 0 1 287.467 388.955 Tm [<0046004F>]TJ
+0.97 0 0 1 297.259 388.955 Tm [<0055>]TJ
+1.02 0 0 1 113.386 377 Tm [<00440050>]TJ
+1.03 0 0 1 122.613 377 Tm [<004D>]TJ
+1.02 0 0 1 125.24 377 Tm [<0050>]TJ
+1.03 0 0 1 130.372 377 Tm [<0053>]TJ
+1.02 0 0 1 134.22 377 Tm [<0054>]TJ
+1.03 0 0 1 138.295 377 Tm [<000D>]TJ
+1.02 0 0 1 143.575 377 Tm [<005400490042004500460054>]TJ
+1.03 0 0 1 171.692 377 Tm [<000D>]TJ
+1.02 0 0 1 176.973 377 Tm [<0042004F0045>-260<0042>-261<004300420044004C0048>]TJ
+1.03 0 0 1 226.154 377 Tm [<0053>]TJ
+1.02 0 0 1 230.002 377 Tm [<00500056004F0045>]TJ
+1.03 0 0 1 254.115 377 Tm [<004A>]TJ
+1.02 0 0 1 256.845 377 Tm [<004E004200480046>]TJ
+1.03 0 0 1 278.967 377 Tm [<000F>-419<0265>]TJ
+1.02 0 0 1 296.197 377 Tm [<0046>]TJ
+1.02 0 0 1 113.386 365.044 Tm [<0045>]TJ
+1.03 0 0 1 118.68 365.044 Tm [<0053>]TJ
+1.02 0 0 1 122.528 365.044 Tm [<00420058>]TJ
+1.03 0 0 1 134.052 365.044 Tm [<004A>]TJ
+1.02 0 0 1 136.781 365.044 Tm [<004F0048>-275<0050>]TJ
+1.03 0 0 1 155.116 365.044 Tm [<0047>]TJ
+1.02 0 0 1 161.34 365.044 Tm [<0054>]TJ
+1.03 0 0 1 165.415 365.044 Tm [<005A>]TJ
+1.02 0 0 1 170.156 365.044 Tm [<004E00430050>]TJ
+1.03 0 0 1 188.712 365.044 Tm [<004D>]TJ
+1.02 0 0 1 191.339 365.044 Tm [<0054>]TJ
+1.03 0 0 1 198.211 365.044 Tm [<004A>]TJ
+1.02 0 0 1 200.94 365.044 Tm [<0054>-275<0042>]TJ
+1.03 0 0 1 212.426 365.044 Tm [<004D>]TJ
+1.02 0 0 1 215.053 365.044 Tm [<00540050>-275<0056005400460045>]TJ
+1.03 0 0 1 249.11 365.044 Tm [<0055>]TJ
+1.02 0 0 1 252.784 365.044 Tm [<0050>-275<0042004F>-275<0046>]TJ
+1.03 0 0 1 278.315 365.044 Tm [<00590055>]TJ
+1.02 0 0 1 286.853 365.044 Tm [<0046004F>]TJ
+1.03 0 0 1 297.045 365.044 Tm [<0055>]TJ
+1.03 0 0 1 113.386 353.089 Tm [<004A0055>]TJ
+1.02 0 0 1 122.811 353.089 Tm [<005800420054004F>]TJ
+1.03 0 0 1 144.08 353.089 Tm [<00080055>]TJ
+1.02 0 0 1 152.848 353.089 Tm [<004500460054>]TJ
+1.03 0 0 1 166.739 353.089 Tm [<004A>]TJ
+1.02 0 0 1 169.468 353.089 Tm [<0048004F00460045>]TJ
+1.03 0 0 1 192.712 353.089 Tm [<0047>]TJ
+1.02 0 0 1 196.14 353.089 Tm [<0050>]TJ
+1.03 0 0 1 201.271 353.089 Tm [<0053>-294<004A>]TJ
+1.02 0 0 1 210.871 353.089 Tm [<004F>]TJ
+1.03 0 0 1 219.563 353.089 Tm [<0055>]TJ
+1.02 0 0 1 223.236 353.089 Tm [<00490046>]TJ
+1.03 0 0 1 236.318 353.089 Tm [<00EB0053>]TJ
+1.02 0 0 1 245.923 353.089 Tm [<0054>]TJ
+1.03 0 0 1 249.998 353.089 Tm [<0055>]TJ
+1.02 0 0 1 256.693 353.089 Tm [<0051>]TJ
+1.03 0 0 1 261.998 353.089 Tm [<004D>]TJ
+1.02 0 0 1 264.625 353.089 Tm [<004200440046>]TJ
+1.03 0 0 1 277.855 353.089 Tm [<000F>-527<0265>]TJ
+1.02 0 0 1 296.197 353.089 Tm [<0046>]TJ
+0.97 0 0 1 113.386 341.134 Tm [<0053>]TJ
+0.98 0 0 1 117.01 341.134 Tm [<0046004200450046>]TJ
+0.97 0 0 1 135.218 341.134 Tm [<0053>]TJ
+0.98 0 0 1 140.956 341.134 Tm [<00440042004F>-216<00510042>]TJ
+0.97 0 0 1 166.415 341.134 Tm [<005A>]TJ
+0.98 0 0 1 172.993 341.134 Tm [<0042>]TJ
+0.97 0 0 1 179.54 341.134 Tm [<0057004A>]TJ
+0.98 0 0 1 186.681 341.134 Tm [<0054>]TJ
+0.97 0 0 1 190.597 341.134 Tm [<004A0055>-218<0055>]TJ
+0.98 0 0 1 202.2 341.134 Tm [<0050>]TJ
+0.97 0 0 1 209.245 341.134 Tm [<0055>]TJ
+0.98 0 0 1 212.705 341.134 Tm [<00490046>]TJ
+0.97 0 0 1 224.484 341.134 Tm [<004D>]TJ
+0.98 0 0 1 226.958 341.134 Tm [<0042>]TJ
+0.97 0 0 1 231.391 341.134 Tm [<005A>]TJ
+0.98 0 0 1 235.855 341.134 Tm [<0046>]TJ
+0.97 0 0 1 240.2 341.134 Tm [<0053>]TJ
+0.98 0 0 1 243.824 341.134 Tm [<0054>-216<00510042004F0046>]TJ
+0.97 0 0 1 269.175 341.134 Tm [<004D>-218<0009>]TJ
+0.98 0 0 1 276.933 341.134 Tm [<00580049>]TJ
+0.97 0 0 1 288.893 341.134 Tm [<004A>]TJ
+0.98 0 0 1 291.463 341.134 Tm [<00440049>]TJ
+1.03 0 0 1 113.386 329.179 Tm [<004A>]TJ
+1.02 0 0 1 116.115 329.179 Tm [<0054>-230<0045>]TJ
+1.03 0 0 1 127.828 329.179 Tm [<004A>]TJ
+1.02 0 0 1 130.557 329.179 Tm [<00540051>]TJ
+1.03 0 0 1 139.937 329.179 Tm [<004D>]TJ
+1.02 0 0 1 142.564 329.179 Tm [<0042>]TJ
+1.03 0 0 1 147.177 329.179 Tm [<005A>]TJ
+1.02 0 0 1 151.918 329.179 Tm [<00460045>-230<0043>]TJ
+1.03 0 0 1 169.25 329.179 Tm [<005A>]TJ
+1.02 0 0 1 176.333 329.179 Tm [<00450046>]TJ
+1.03 0 0 1 186.15 329.179 Tm [<0047>]TJ
+1.02 0 0 1 189.577 329.179 Tm [<00420056>]TJ
+1.03 0 0 1 199.556 329.179 Tm [<004D0055>]TJ
+1.02 0 0 1 208.199 329.179 Tm [<005800490046004F>-230<004F0050>]TJ
+1.03 0 0 1 243.985 329.179 Tm [<0055>-228<004A>]TJ
+1.02 0 0 1 252.731 329.179 Tm [<004F>]TJ
+1.03 0 0 1 260.744 329.179 Tm [<0047>]TJ
+1.02 0 0 1 264.172 329.179 Tm [<0056>]TJ
+1.03 0 0 1 269.537 329.179 Tm [<004D004D>]TJ
+1.02 0 0 1 277.134 329.179 Tm [<00540044>]TJ
+1.03 0 0 1 285.304 329.179 Tm [<0053>]TJ
+1.02 0 0 1 289.152 329.179 Tm [<00460046004F>]TJ
+1.03 0 0 1 303.867 329.179 Tm [<000A>-228<0055>]TJ
+1.02 0 0 1 313.249 329.179 Tm [<0050>-230<005400460046>-231<004900500058>-230<0046>]TJ
+1.03 0 0 1 360.631 329.179 Tm [<004D>]TJ
+1.02 0 0 1 363.258 329.179 Tm [<0046004E0046004F>]TJ
+1.03 0 0 1 386.224 329.179 Tm [<0055>]TJ
+1.02 0 0 1 389.897 329.179 Tm [<0054>-230<0042>]TJ
+1.03 0 0 1 400.928 329.179 Tm [<0053>]TJ
+1.02 0 0 1 404.777 329.179 Tm [<0046>-230<0050>]TJ
+1.03 0 0 1 416.773 329.179 Tm [<0053>]TJ
+1.02 0 0 1 420.621 329.179 Tm [<00480042004F>]TJ
+1.03 0 0 1 435.641 329.179 Tm [<004A>]TJ
+1.02 0 0 1 438.37 329.179 Tm [<005B00460045>-230<0050004F>]TJ
+1.03 0 0 1 468.156 329.179 Tm [<0055>]TJ
+1.02 0 0 1 471.829 329.179 Tm [<00490046>]TJ
+1.02 0 0 1 113.386 317.224 Tm [<00540044>]TJ
+1.03 0 0 1 121.556 317.224 Tm [<0053>]TJ
+1.02 0 0 1 125.404 317.224 Tm [<00460046004F>]TJ
+1.03 0 0 1 140.118 317.224 Tm [<000F>]TJ
+1.015 0 0 1 146 317.224 Tm [<0030>]TJ
+1.02 0 0 1 153.26 317.224 Tm [<004F00440046>-230<004200480042>]TJ
+1.03 0 0 1 183.85 317.224 Tm [<004A>]TJ
+1.02 0 0 1 186.58 317.224 Tm [<004F>-230<0042004F>-230<0042>]TJ
+1.03 0 0 1 211.828 317.224 Tm [<0053>]TJ
+1.02 0 0 1 215.676 317.224 Tm [<00460042>]TJ
+1.03 0 0 1 227.151 317.224 Tm [<00090055>]TJ
+1.02 0 0 1 234.191 317.224 Tm [<00490046>-230<0048>]TJ
+1.03 0 0 1 251.327 317.224 Tm [<0053>]TJ
+1.02 0 0 1 255.175 317.224 Tm [<00460046004F>-230<0054005200560042>]TJ
+1.03 0 0 1 291.435 317.224 Tm [<0053>]TJ
+1.02 0 0 1 295.283 317.224 Tm [<0046>]TJ
+1.03 0 0 1 299.805 317.224 Tm [<000A>-228<004A>]TJ
+1.02 0 0 1 308.241 317.224 Tm [<0054>-230<00510042>]TJ
+1.03 0 0 1 324.574 317.224 Tm [<004A>]TJ
+1.02 0 0 1 327.303 317.224 Tm [<004F>]TJ
+1.03 0 0 1 332.974 317.224 Tm [<0055>]TJ
+1.02 0 0 1 336.647 317.224 Tm [<00460045>-230<00430046>]TJ
+1.03 0 0 1 358.498 317.224 Tm [<004D>]TJ
+1.02 0 0 1 361.125 317.224 Tm [<00500058>]TJ
+1.03 0 0 1 375.507 317.224 Tm [<0055>]TJ
+1.02 0 0 1 379.181 317.224 Tm [<00490046>-230<0054>]TJ
+1.03 0 0 1 395.656 317.224 Tm [<004D004A>]TJ
+1.02 0 0 1 401.012 317.224 Tm [<00450046>]TJ
+1.03 0 0 1 410.829 317.224 Tm [<0008>]TJ
+1.02 0 0 1 412.902 317.224 Tm [<0054>]TJ
+1.03 0 0 1 419.317 317.224 Tm [<0055>]TJ
+1.02 0 0 1 422.99 317.224 Tm [<0046>]TJ
+1.03 0 0 1 427.512 317.224 Tm [<00590055>]TJ
+1.02 0 0 1 436.05 317.224 Tm [<0043>]TJ
+1.03 0 0 1 441.222 317.224 Tm [<004D>]TJ
+1.02 0 0 1 443.849 317.224 Tm [<00500044004C>]TJ
+1.03 0 0 1 458.147 317.224 Tm [<000D>]TJ
+1.02 0 0 1 463.038 317.224 Tm [<0058>]TJ
+1.03 0 0 1 469.948 317.224 Tm [<004A0055>]TJ
+1.02 0 0 1 476.352 317.224 Tm [<0049>]TJ
+0.985 0 0 1 113.386 305.269 Tm [<0054>]TJ
+0.98 0 0 1 117.321 305.269 Tm [<004A>]TJ
+0.985 0 0 1 119.918 305.269 Tm [<004E>]TJ
+0.98 0 0 1 127.886 305.269 Tm [<004A004D>]TJ
+0.985 0 0 1 132.983 305.269 Tm [<0042>]TJ
+0.98 0 0 1 137.438 305.269 Tm [<0053>]TJ
+0.985 0 0 1 143.33 305.269 Tm [<00440050>]TJ
+0.98 0 0 1 152.24 305.269 Tm [<004D>]TJ
+0.985 0 0 1 154.74 305.269 Tm [<0050>]TJ
+0.98 0 0 1 159.696 305.269 Tm [<0053>]TJ
+0.985 0 0 1 163.357 305.269 Tm [<0054>]TJ
+0.98 0 0 1 167.292 305.269 Tm [<000D>-229<0055>]TJ
+0.985 0 0 1 175.42 305.269 Tm [<0050>-227<0048>]TJ
+0.98 0 0 1 187.179 305.269 Tm [<004A0057>]TJ
+0.985 0 0 1 194.394 305.269 Tm [<0046>]TJ
+0.98 0 0 1 200.992 305.269 Tm [<0055>]TJ
+0.985 0 0 1 204.487 305.269 Tm [<00490046>]TJ
+0.98 0 0 1 216.433 305.269 Tm [<004A>]TJ
+0.985 0 0 1 219.03 305.269 Tm [<004E0051>]TJ
+0.98 0 0 1 232.121 305.269 Tm [<0053>]TJ
+0.985 0 0 1 235.782 305.269 Tm [<004600540054>]TJ
+0.98 0 0 1 248.019 305.269 Tm [<004A>]TJ
+0.985 0 0 1 250.616 305.269 Tm [<0050004F>-227<0050>]TJ
+0.98 0 0 1 268.234 305.269 Tm [<0047>]TJ
+0.985 0 0 1 273.726 305.269 Tm [<0042>-227<00540044>]TJ
+0.98 0 0 1 288.302 305.269 Tm [<0053>]TJ
+0.985 0 0 1 291.963 305.269 Tm [<00460046004F>]TJ
+0.98 0 0 1 306.172 305.269 Tm [<000D>]TJ
+0.985 0 0 1 310.805 305.269 Tm [<0046>]TJ
+0.98 0 0 1 315.172 305.269 Tm [<0057>]TJ
+0.985 0 0 1 319.79 305.269 Tm [<0046004F>]TJ
+0.98 0 0 1 331.863 305.269 Tm [<0055>]TJ
+0.985 0 0 1 335.359 305.269 Tm [<00490050005600480049>-227<00420054>]TJ
+0.98 0 0 1 373.617 305.269 Tm [<0047>]TJ
+0.985 0 0 1 376.878 305.269 Tm [<0042>]TJ
+0.98 0 0 1 381.333 305.269 Tm [<0053>]TJ
+0.985 0 0 1 387.225 305.269 Tm [<00420054>]TJ
+/F63 9.96264 Tf 0.98 0 0 1 397.846 305.269 Tm [<002D>]TJ
+0.985 0 0 1 402.855 305.269 Tm [<00460044>]TJ
+0.98 0 0 1 410.352 305.269 Tm [<0055>]TJ
+0.985 0 0 1 413.72 305.269 Tm [<0056>]TJ
+0.98 0 0 1 418.499 305.269 Tm [<0053>]TJ
+0.985 0 0 1 422.053 305.269 Tm [<0046>]TJ
+0.98 0 0 1 426.018 305.269 Tm [<0053>]TJ
+/F105 9.96264 Tf 0.98 0 0 1 431.802 305.269 Tm [<004A>]TJ
+0.985 0 0 1 434.4 305.269 Tm [<0054>-227<00440050004F00440046>]TJ
+0.98 0 0 1 463.273 305.269 Tm [<0053>]TJ
+0.985 0 0 1 466.934 305.269 Tm [<004F00460045>]TJ
+0.97 0 0 1 113.386 293.313 Tm [<0055>]TJ
+0.98 0 0 1 116.845 293.313 Tm [<00490046>]TJ
+0.97 0 0 1 128.646 293.313 Tm [<0055>]TJ
+0.98 0 0 1 132.106 293.313 Tm [<0046>]TJ
+0.97 0 0 1 136.45 293.313 Tm [<00590055>]TJ
+0.98 0 0 1 144.491 293.313 Tm [<0043>]TJ
+0.97 0 0 1 149.46 293.313 Tm [<004D>]TJ
+0.98 0 0 1 151.934 293.313 Tm [<00500044004C>-218<0042004F0045>]TJ
+0.97 0 0 1 184.908 293.313 Tm [<0055>]TJ
+0.98 0 0 1 188.368 293.313 Tm [<00490046>-218<0042>]TJ
+0.97 0 0 1 204.601 293.313 Tm [<0053>]TJ
+0.98 0 0 1 208.225 293.313 Tm [<00460042>-218<0042>]TJ
+0.97 0 0 1 223.569 293.313 Tm [<0053>]TJ
+0.98 0 0 1 227.193 293.313 Tm [<0046>]TJ
+0.97 0 0 1 233.673 293.313 Tm [<0055>]TJ
+0.98 0 0 1 237.132 293.313 Tm [<0050>]TJ
+0.97 0 0 1 242.063 293.313 Tm [<0055>]TJ
+0.98 0 0 1 245.522 293.313 Tm [<0042>]TJ
+0.97 0 0 1 249.955 293.313 Tm [<004D004D005A>]TJ
+0.98 0 0 1 261.502 293.313 Tm [<0056004F>]TJ
+0.97 0 0 1 272.105 293.313 Tm [<0053>]TJ
+0.98 0 0 1 275.729 293.313 Tm [<0046>]TJ
+0.97 0 0 1 280.074 293.313 Tm [<004D>]TJ
+0.98 0 0 1 282.548 293.313 Tm [<0042>]TJ
+0.97 0 0 1 286.98 293.313 Tm [<0055>]TJ
+0.98 0 0 1 290.44 293.313 Tm [<00460045>]TJ
+0.97 0 0 1 299.871 293.313 Tm [<000D>-222<004A000F>]TJ
+0.98 0 0 1 309.323 293.313 Tm [<0046>]TJ
+0.97 0 0 1 313.668 293.313 Tm [<000F>-300<0055>]TJ
+0.98 0 0 1 322.399 293.313 Tm [<00490046>]TJ
+0.97 0 0 1 334.199 293.313 Tm [<0055>]TJ
+0.98 0 0 1 337.659 293.313 Tm [<0046>]TJ
+0.97 0 0 1 342.003 293.313 Tm [<00590055>-220<004A>]TJ
+0.98 0 0 1 354.749 293.313 Tm [<0054004F>]TJ
+0.97 0 0 1 364.112 293.313 Tm [<00080055>-220<0055>]TJ
+0.98 0 0 1 375.118 293.313 Tm [<00490046>-218<00440050004F>]TJ
+0.97 0 0 1 401.232 293.313 Tm [<0055>]TJ
+0.98 0 0 1 404.691 293.313 Tm [<0046004F>]TJ
+0.97 0 0 1 414.484 293.313 Tm [<0055>]TJ
+0.98 0 0 1 420.078 293.313 Tm [<0050>]TJ
+0.97 0 0 1 425.009 293.313 Tm [<0047>-220<0055>]TJ
+0.98 0 0 1 433.831 293.313 Tm [<00490046>-218<0042>]TJ
+0.97 0 0 1 450.064 293.313 Tm [<0053>]TJ
+0.98 0 0 1 453.688 293.313 Tm [<00460042>]TJ
+0.97 0 0 1 462.465 293.313 Tm [<000F>-300<0265>]TJ
+0.98 0 0 1 477.545 293.313 Tm [<0046>]TJ
+0.98 0 0 1 113.386 281.358 Tm [<00450042>]TJ
+0.97 0 0 1 122.905 281.358 Tm [<0053>]TJ
+0.98 0 0 1 126.529 281.358 Tm [<004C0046>]TJ
+0.97 0 0 1 135.746 281.358 Tm [<0053>-212<004D004A>]TJ
+0.98 0 0 1 146.47 281.358 Tm [<004F0046>]TJ
+0.97 0 0 1 158.318 281.358 Tm [<0055>]TJ
+0.98 0 0 1 161.778 281.358 Tm [<00490042>]TJ
+0.97 0 0 1 171.531 281.358 Tm [<0055>]TJ
+0.98 0 0 1 177.046 281.358 Tm [<00420051005100460042>]TJ
+0.97 0 0 1 200.449 281.358 Tm [<0053>]TJ
+0.98 0 0 1 204.073 281.358 Tm [<0054>-210<0042>]TJ
+0.97 0 0 1 214.476 281.358 Tm [<0055>-212<0055>]TJ
+0.98 0 0 1 223.451 281.358 Tm [<00490046>-210<0042>]TJ
+0.97 0 0 1 239.605 281.358 Tm [<0053>]TJ
+0.98 0 0 1 243.229 281.358 Tm [<00460042>]TJ
+0.97 0 0 1 252.006 281.358 Tm [<0008>]TJ
+0.98 0 0 1 253.958 281.358 Tm [<0054>-210<00510046>]TJ
+0.97 0 0 1 269.37 281.358 Tm [<0053004A>]TJ
+0.98 0 0 1 275.565 281.358 Tm [<004E0046>]TJ
+0.97 0 0 1 287.837 281.358 Tm [<0055>]TJ
+0.98 0 0 1 291.297 281.358 Tm [<0046>]TJ
+0.97 0 0 1 295.641 281.358 Tm [<0053>-212<004A>]TJ
+0.98 0 0 1 303.892 281.358 Tm [<0054>-210<0051>]TJ
+0.97 0 0 1 314.959 281.358 Tm [<0053>]TJ
+0.98 0 0 1 318.583 281.358 Tm [<005000450056004400460045>-210<0043>]TJ
+0.97 0 0 1 354.146 281.358 Tm [<005A>-212<0055>]TJ
+0.98 0 0 1 364.126 281.358 Tm [<00490046>-210<0042>]TJ
+0.97 0 0 1 380.28 281.358 Tm [<0053>]TJ
+0.98 0 0 1 383.904 281.358 Tm [<00460042>-210<0042004F0045>]TJ
+0.97 0 0 1 411.759 281.358 Tm [<004A0055>]TJ
+0.98 0 0 1 417.79 281.358 Tm [<0054>]TJ
+0.97 0 0 1 423.76 281.358 Tm [<00470053>]TJ
+0.98 0 0 1 430.612 281.358 Tm [<0042004E0046>-210<0050>]TJ
+0.97 0 0 1 454.303 281.358 Tm [<0057>]TJ
+0.98 0 0 1 458.874 281.358 Tm [<0046>]TJ
+0.97 0 0 1 463.219 281.358 Tm [<0053004D>]TJ
+0.98 0 0 1 469.317 281.358 Tm [<00420051>]TJ
+0.97 0 0 1 478.846 281.358 Tm [<000E>]TJ
+1.01 0 0 1 113.386 269.403 Tm [<0051004A004F0048000D>-216<0042004F>-216<0056004F00580042004F005500460045>-216<0054004A00450046>-216<004600EA004600440055>-217<0058004A00550049>-216<005500530042004F00540051004200530046004F0055>-216<00440050004D005000530054000D>-216<0056004F004200570050004A004500420043004D0046>-216<004300560055>-217<004F00500055>-216<00540050>-216<004300420045000E004D00500050004C004A004F0048>]TJ
+1 0 0 1 113.386 257.448 Tm [<0049004600530046000F>]TJ
+ET
+endstream
+endobj
+996 0 obj <<
+/Type /Page
+/Contents 997 0 R
+/Resources 995 0 R
+/MediaBox [0 0 595.276 737.008]
+/Parent 268 0 R
+>> endobj
+518 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-ThePoodleLectures.pdf)
+/PTEX.PageNumber 4
+/PTEX.InfoDict 998 0 R
+/BBox [0 0 425.19699097 340.15701294]
+/Resources 999 0 R/Length 837
+/Filter /FlateDecode
+>>
+stream
+xÚVMÓ@ ½÷WøØbÆó=œË—@-Û TºÙ66Ý6«Õþ{<–ØÊå™Ä??ÛϹ(¾¢CeèhÐzÓÅà–Ÿ#j¨üø}ûž´ýúY·šL›þá+ÁlUù9
+8Ë……ñ ìÍë Ï›BA„ñ> ?Ö³‡UßL–£Êi;¼ê×wýèËøí¯ .'x?x6}½úc輗¸G5ç?¤]õÄR=Û@˜ÆGÙObͬWϛͨâÆîïWì<¯ìðòÆmPaÓ§±ñ¼`giã:Ôv‡-‰ØJ-{>Ç#BlošÙ¼ÚLçݨÒaصÕu³j»Åä2#"#îdëÓùÈXêr±l¡]õwŸ™úºpvßô󲚔ÛìaQÐn2ø8œþ8׊Y&oÐ+sn–É[t¬’b–Ç÷£Ìî |NæÓåYÏæ3f—ð¢kÛzVl×õl]Ÿ*=/2‰ç¥9îc’ümÓµw}Ý>”ý²ëçÍrV¸œô;£¶=?ÈùVfûwn¾•åc¦ çÎ-@]Nîz·ë›ÅnuSžçöóºÀ/•0âz]·×‡
+endstream
+endobj
+998 0 obj
+<</Producer (LuaTeX-0.60.2)
+/Title (LecturerDemo-ThePoodleLectures)
+/Creator (TeX, with a little help from Lecturer)
+/Author (Paul Isambert)
+/Title (The Poodle Lectures)
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727191701+02'00')
+/ModDate (D:20100727191701+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is LuaTeX, Version beta-0.60.2-2010070109 \(rev 3730\) \(Web2C 2010/dev\) kpathsea version 6.0.0dev)
+>>
+endobj
+999 0 obj
+<</Properties <</ltr#40step_1#3Acontent 1000 0 R
+/ltr#40step_2#3Acontent 1001 0 R
+/ltr#40step_3#3Acontent 1002 0 R
+/ltr#40step_4#3Acontent 1003 0 R
+/ltr#40step_5#3Acontent 1004 0 R
+/ltr#40step_6#3Acontent 1005 0 R
+/ltr#40step_7#3Acontent 1006 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 1008 0 R
+/ltr#40step_2#3Acontent 1009 0 R
+/ltr#40step_3#3Acontent 1010 0 R
+/ltr#40step_4#3Acontent 1011 0 R
+/ltr#40step_5#3Acontent 1012 0 R
+/ltr#40step_6#3Acontent 1013 0 R
+/ltr#40step_7#3Acontent 1014 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 1015 0 R
+/ltr#40step_2#3Acontent 1016 0 R
+/ltr#40step_3#3Acontent 1017 0 R
+/ltr#40step_4#3Acontent 1018 0 R
+/ltr#40step_5#3Acontent 1019 0 R
+/ltr#40step_6#3Acontent 1020 0 R
+/ltr#40step_7#3Acontent 1021 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/Properties <</ltr#40step_1#3Acontent 1022 0 R
+/ltr#40step_2#3Acontent 1023 0 R
+/ltr#40step_3#3Acontent 1024 0 R
+/ltr#40step_4#3Acontent 1025 0 R
+/ltr#40step_5#3Acontent 1026 0 R
+/ltr#40step_6#3Acontent 1027 0 R
+/ltr#40step_7#3Acontent 1028 0 R
+/ltr#40position_1#3Acontent 1028 0 R
+/ltr#40background1#40inner_area_4#3Abackground 1028 0 R
+>>
+/Shading <<>>
+/ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/Font <</F30 1029 0 R
+/F51 1030 0 R
+>>
+/XObject <</Fm7 1031 0 R
+/Fm8 1032 0 R
+/Fm9 1033 0 R
+>>
+/ProcSet [/PDF/Text]
+>>
+endobj
+1000 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+1001 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+1002 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+1003 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+1004 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+1005 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+1006 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+1007 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+1008 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+1009 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+1010 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+1011 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+1012 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+1013 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+1014 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+1015 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+1016 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+1017 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+1018 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+1019 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+1020 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+1021 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+1022 0 obj
+<</Type /OCG
+/Name ([step 1])
+>>
+endobj
+1023 0 obj
+<</Type /OCG
+/Name ([step 2])
+>>
+endobj
+1024 0 obj
+<</Type /OCG
+/Name ([step 3])
+>>
+endobj
+1025 0 obj
+<</Type /OCG
+/Name ([step 4])
+>>
+endobj
+1026 0 obj
+<</Type /OCG
+/Name ([step 5])
+>>
+endobj
+1027 0 obj
+<</Type /OCG
+/Name ([step 6])
+>>
+endobj
+1028 0 obj
+<</Type /OCG
+/Name ([step 7])
+>>
+endobj
+1029 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /ZIGAAT+CMTT10
+/FontDescriptor 1034 0 R
+/FirstChar 82
+/LastChar 121
+/Widths 1035 0 R
+>>
+endobj
+1030 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /YAPXQL+CMSS10
+/FontDescriptor 1036 0 R
+/FirstChar 11
+/LastChar 121
+/Widths 1037 0 R
+>>
+endobj
+1031 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 47.287 36.947]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1038 0 R
+/Length 127
+/Filter /FlateDecode
+>>stream
+xÚUŒÁ
+Â@ DïýŠùƤ®¦{óî©ø"{±‹¶Ä¿7Í"²„„7ÌLl#è"é.B"õ¡CÊÍ $ºE‰T*eë¼3˜XM“€ÂÞVq¯å›q™ç%Ý–ÏYp}-[ÂÚþ£Ðè$Nëý“º**î¯{ÂÐ|º+D
+endstream
+endobj
+1032 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 35.305 7.955]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1039 0 R
+/Length 73
+/Filter /FlateDecode
+>>stream
+xÚ3T0
+endstream
+endobj
+1033 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ -1 -1 35.305 7.955]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1040 0 R
+/Length 146
+/Filter /FlateDecode
+>>stream
+xÚUNÉ Ä ü§
+W€0æ,cµ%ð汯m?¶1 (²<“90‚ç!TG1ƒw­eèãúAt­"!¨á }pà¯ppB0/¦.éA¥dŒ¼C šM•ÝUnîåê†fö횪·Ž¥z›KÇ÷¸‰”ÑGi¤Ú’¾`ÍE›—Zlvžæý[öé²RÇRiÍÆçuŸë°òGÄ
+endstream
+endobj
+1034 0 obj
+<</Type /FontDescriptor
+/FontName /ZIGAAT+CMTT10
+/Flags 4
+/FontBBox [ -4 -233 537 696]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/R/S/a/e/g/i/n/p/r/t/u/y)
+/FontFile 1041 0 R
+>>
+endobj
+1035 0 obj
+[ 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 525 0 0 0 525 0 525 0 525 0 0 0 0 525 0 525 0 525 0 525 525 0 0 0 525]
+endobj
+1036 0 obj
+<</Type /FontDescriptor
+/FontName /YAPXQL+CMSS10
+/Flags 4
+/FontBBox [ -61 -250 999 759]
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/ItalicAngle 0
+/StemV 78
+/XHeight 444
+/CharSet (/C/H/O/S/T/a/b/c/d/e/f/ff/g/h/hyphen/i/k/l/m/n/o/p/period/r/s/t/u/w/y)
+/FontFile 1042 0 R
+>>
+endobj
+1037 0 obj
+[ 583.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333.3 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 638.9 0 0 0 0 708.3 0 0 0 0 0 0 736.1 0 0 0 555.6 680.6 0 0 0 0 0 0 0 0 0 0 0 0 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 0 488.9 238.9 794.4 516.7 500 516.7 0 341.7 383.3 361.1 516.7 0 683.3 0 461.1]
+endobj
+1038 0 obj
+<</ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1039 0 obj
+<</ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1040 0 obj
+<</ExtGState <</ltr#40opacity_1 1007 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1041 0 obj
+<</Length1 1553
+/Length2 9388
+/Length3 0
+/Length 10408
+/Filter /FlateDecode
+>>stream
+xÚ´PÜ-Œ´hBq ww×âw X ¸»w÷R´÷ww
+Å]‹×G?»ß½ÿ?óÞd&ÉÚzÖ>k*r5&13ˆ HbçÄÄÆÌÊPTWgc°²r0³²²£PQ©ƒl@ÛQ¨4APG0ÄŽÿ_PÐéÙ& tzT„Øäœm
+´(,A¶ÏM6
+<lÀ¦ ;Ççg;3ðÜ &«
+2}ž»;Ë_—kmqµóü™ƒíÌÌÓ0s¶gÑ°;8ƒd%ÿŠy6¡üÇfrp±²²òr°@
+YU}½®#reÚš¢ÚÒJ¥còœ‡~s¾EGL¢«È X^Š% t¾^Ü¢½] {ð<hªE mNxßrçuo§:±Õ‚ò}·w¬à@¬¦‡™˜I]tÛëÁÁKÓß¾ ¶MŽ*×Á™]%ÿ͵k·Œ[MOéáÙ­÷ÛÜò¨÷¥“LQ‘úþEÓTy&Y3øNL$HôX'nÓ—SX9cOdrq (Þ‡QŸ<uWÙ£of<–>«³;¶Pèâ“À_` OP{Šï&ËáÍyF®Íe³Ò1ì ÷y µ‘ñë)Èbá±Ú@çùd†)½[jXüµ»^!gn©ÛÓWÛ Ïá3˜»ºJËä+7vn÷‡"_…AÌ]b•Ü=·×æ_\è\ÈUéy ꙯#£¬ã,6ˆ/I>„:xc+"Ÿoó¶{Xe”PVyvYÚO¹m»©}ë-“ú錎‚X”†ñúMAz=Õ@ÜEÕN}ä
+¾dý:½‚i̧ۜGyú©¼òw®®Äuî6‰c…²\&X dV¦qGº8ŸáÐÓÂxr
+fJå«ø¯ßŠÊý0û":Ñ"};¢ºsÕaTšwg†ùÖ‚¡úö@¨aWø üÅ´nV(з±!E‹8\é;ü—ˆ nuoÁnA^hO,.‘ÔÈ'½¡QêÜ(YÔNÎÝ™«K´ÈM„d |K{kó†0%½òL*\ñûÁ³
+éN Õ4ù’ƒ#±‚jS*íO1Ÿ? ]”®ë w%ÌT¾õIÖêÐýî>èÖ_YZÕç¯E-©7µ“AU·Õ<#@ÁGܬâ}ãÝ·ÒÖ5¼˜µb6zÊ]zGV·d·e¸Ýë30¥Ø0EïfÛ8ƒ»­ó%{Xøpºõæs¬½¹'«d»·hÙNÎ^–€Á>KE«¥×Ø8óu‘ªØ‹åJùixÛL›KÃEj­E?¼ˆ¥>OÒ†ü“[énÂ¥ã2’¬Ú”6¢…™´ŽXiyYÜO<¢¸ê<b‹ŠwÊ*èáÌÑK±‘ïÀ!ÚUÙÞÕñ×ÙØÛV=:ÚRsÎed_?rõµØÿˆ—ýZ¸–®À½/Éå±ÿ-Š“Õö]Úô 牳Þ!š«Î·®äôì­,ö¯zNã“ƒÉ #k3E,ÏÓÂM2×éçIà(ýPÌz?‡ST‚_g|à÷M{ZB]â¥1qÜ[riŽ‡pSöF²®Àéúõ´YJgQ®ÐçŒL®‘__}ˆê ~ZñtP€EŸRp×ßôcÒÀN„ ©³ÀŒ;„j,ŽKïU]Å6±%:IL6,å‹¢Mäûá±t}¬–6TIfÊJÊ:ë,tÀ B4Ì$¿‹„£g³p½ÚaoÏãd)ÌÍiäh-[ׯäñøôØŸ`#Þ£ûÐÀ¼švòË?BÊ-@‡¦¹¿ôjŸ+LÚÔWÈΪ•}ýÛ Â¬)ön¬+Û«¨ûëá]?“YƒÐÌð÷ÆjþèáM4óÙ¼’Åýˆ„­ýÓ»bs‹Cª6û¼;Að)™2)-gIÌLõºkÙ£Ú¶(ƒ†Wòéth‚h½†}l´}Û›ôJºÜO|¦2ÕwôÆðE`GÊOÝÂÔƒù'š¤ØòtXeÏ éÔ]Àµ ­~ÿ»ë1®¥Ì[±é~†\͹A¥Áñ¦¸d¡øƆêè(9*.(Ô„••ûŸã ®TU3J%>I¼0¬àzà{{.v´Æ Ò'~@¹³ØG·/_Í_D«E³Í
+ó(Þ#SúŠ€ ?¬ž’4ƒ«ö{$Îh_¼CýÚw´LŠ"Ãù´e^gõ¶ÄøXsÂИ¦–6©|ŠÁ6í–UžC~}
+F83SjUE‰‘_q×3\C†]]”[?gU„édÆW;ŠÆïÇî…¯4.³ƒej×Ë+¢œ³;›
+ö˘]WštTo°Öv­9ƒÓÔ!÷vޜ ºOÐþJÏ(^‡†îŸTiÎì´Ì—5ç8N¾áUcCëK@ÁšÏºÛzrŒZ°W¦9ÙÜg‘víSfç~q7s©{fW-»à4c;2Þ'qkkù:OD>s$ ‹{FX›=¯2ê¯D~“øèŠý@úÓ”—HÚ\Þ.Ö òhšîùŽtÕ#–ÁÐ4Àa‡Ú5*aŒ§²E¦ïj-÷–="Ï?i.¾*IUrF`à{ZÀàäÁŒp—Á è|\YA+öGël§(÷\G‡(w%z}6Õ}$ö/ØmÐõ#[j½Y~¹%o™ˆÄîSŒâ$Á> ê´ÿÌœÅû°§^h!^kóâÍ|ŸÆƒô¾\…–ž½A'êÂËAûQËÈï¹£íñŧ!p¼~c3 y;Ë­
+!"5~·p x÷ü¤ò_.n󴞨†µƒ.^P~åÇ3à³ß¨•64K%•S¥…åÖcR§?â$ÏŒšp×1¦Q¬{ …G-Gª8T|S¦"ö¶×<ÎOÂœ8’â…è*åQ»ˆ:^µµ[ªï
+P4?O!óöúÏ”4
+k^Ug×uáˆцìT9yšz`c„j)åã'Ò€âC–Ü]q˜‚Ãuj©TÞŽš´¾{EdW«ÌCΔï ÝŒ™«àÂPã•&zÐw†(‡sŸú†,Ÿf¢vÅfÁewm‰qÑ!D9’ÍC+¶ÎY!£ÜwÞÊ{RÌê&uº˜3M>é˜Fášùµ? rj‰8U÷(bHp ªÇëöOÖÐÑÑJ !r)ÑZÔm8M^Zº´7AûãïD·CGyÌ”»>n9hE„
+æ®4rj*ÿÀÍA‚5GHÞÉ (µ \±`IskÉ«Tš8êÒ`9³ø‰ýÞ¿ û­=Š·Ž,¢¼^ÀMOcëÔ•X걪Ê0¢Š5XðJKv+¡ mõÀ8ÌiT9,^¥7Ýf8æRÝ“^ŸUu„”ª_|a+W)÷UµÈKÖÄ{‚§£G…“ÚDíÚ*´…åÉD –0Ð ú•s.aF”àƬµ4¥#qÇ¥‚ »n¿9“ „Ó-i®ÊÐ`*¤†{r,û¡ÇKò˜>=nká—þC@ª¼Ba¿Û óW¹ZBgeUhàíEb[ÑÉõImÑÖNe{K/F©ÍúE5ÑMÚ ÿªø,H÷&|ûT𳣜ÖI\GÝâuê „„*o\õ<u`êhX@XNÙœ9NÆ´ENaËôã‰v¡ƒS"[;Ø,ºçJñõñ†ià\en\Y±‡
+ýû¡’µ9Õ-3z²¥#¼ï1&o¬BK°á\¿9õÁã³®às|2j³í‚gÙ]ñ}z^ãl~¾žrJ#‹¬ô"¿e]dàƒUéiÊ`ôAúT5Cv}žVßÉ84½¥„›úÝx¢߬-ô¥W´ë—Ì è™ô±^p™¶ÌBÆ°³»¶Æ§ÂMeÁÐO~}yš
+–’|=S4̆HÁ­Í'¢ j‡™Aòh†>}« ~ Èäè­«‚¶2M.Qî¬|ÂEµ¤l{…Gúå Ñϲõ¯Ô1ÄeÕ"g¦]ΰæA»uydȪ-Ö.6”^åà«CVû“o(ïÝ`& w·ïÃjÒ\<Nw2zO@aó§œ1ÆÅ}à“«Ôf‘2Mš
+ Û é«Núµ\ä¾<ØŸÅ- ‰óü_/X') éDŽ£j_¶á„:'Ý_ÝéMßM
+’3²QVr)$.+bbÊ2 ?âÎ$Êþ„a 5{›‰%Ç÷“:M6>øm`¬Ç"z¥Þ”¾E–¡¸gQZËÎ,DÑ{LUÇ9ÍD¾! Ü%}ÇTÄÈBÑšKÒ YÂÞ$.Ω œ4Ï ÷Á[9’éž¾ÿ^w0Ƙó:÷sꆅõ€œï›øÔœïÆÀ0%c{„"ŒÑõ=vv0|ñ­Ó2-‹^·è†—€Dá
+Œʽ1£}¤ÕÈ÷U""F÷òÃûÃ:ÆÅ;ÆrF⫤–EÓ§{ox_‘ 0ŸõµÑw·)(^}î;ÞÉ0iK,T”'Hzš@ä3d·í&4‚ D®3$gñ3Q^qª­$"˜'e4·%Û°j·³ÙYMýnÄàYu‹þˆ(=£Ý:£C«â/¹
+*Ši”x]1è¤ø]"QÂ)‚à§JK|×€…n¸c:¯¢kl_]Uö‚¢ÎŽK(LWÁŒ݄ºvƒ$]ÅÛ‘ ñaÚOU½ß!w…8_B”‡ª7 O9u‹Ÿo_VäÐÀ¯Ëñ›Z•r˜³£(Å×ñsHHÄ
+(¿t¡ôÅí¯áj›ÆOá÷{bßÞ*µ„×_R{+lÛ9gúââü‘£©7¼ÊÀœol²_LétY˶Ï\ï=0Û7Õa:q_á¹Y&(˜árxµØ¸‚;ì1{*x‹:sšÜ?þq †oŠ°Œ_çO‘iàTŸ6˜Jé¾7^:›§y0ÐJÆþ¸´Á
+ŸyáK¦R ß EO¢+1Л®œ½¯æï‡|ÀZ³ç7ŒÁkmoFØR ªâMºbòæù€4Ý‹;ÏÔ‘A×(+ñ%Æ“­¿)D,<uE·Ã[NÔ¸KŽ£òç˜æ‰ .ü+c]´OÖ$*å5ß>v -Ή’eqtø jÎzö)½D<úÀˆün×çmrÖf4pѶæ!îÍ­Nÿ˜’Ëš÷D†)†Éh$ôËb_@—ƒt 1yŽ|)øïc
+ç[u“ƒâ_õëB>3ÞÌÚŸÞ£9ìþJ€'†_ù”&àßE;9cê»t”òà•í¸¬h«4e\æ©o0©O«§ÈN5nXÙ­üZ'ŠuÅ9`=90Ê{bx®8'‹ÜßþÌÞÓôöÔ=,Æ÷¯áŠåW”HY\—˜“6‹ºëÁè§è›ªµé_îX‚Ìn±¯7s.²`Ùr·d(ßË%/>ö»}æ_{»`£5å„{ƒ10óQ…÷#žqùbÍÉñ¹dÏø¤Èû¨—‡'Cß•²;ÞUˆKµíø­ Ô/h.:ª"¤‹)õr³ql$3ñhÙ÷7å_ß~ôUmØØ
+9žš:)œÑÒ"ݳî@HÑ÷æ}Fr;dnèhX?éjÁ!_SšpמÜp@õtñÒ3$%6Rd”Î:Þ¸ÖNÒ†™ì KByßøÕàÓìùÛ+£ø¼\^JB:Ž‡'£LcæZ_òÌ¥w±{HvFB×Sæ´¯V<¯{›oWªƒ‹µ{­‹©;²ª•ÇSJ˜’™m4 j“*”7ÚŽjüà nÂw£çðäƒÜ|ùïÚ‰ò5—ï#¶9Rú÷?Oó2:s2Õmãa© ‹ˆ^žmÓÕ×Ä7áò&_IwÆ"oÚ•(OW>1¥¬Î,ÛˆÏ0wi:UWCó4®’+…‚®µ‘¥äî’É,#BÇPé¦ð©1¾²É†PˆdwÿÐC?;Ö!üù“ðëÆ{”ˆ?&­†1ä ’Õ2íVߣ*“Aú¾OY` Â×^—õÚ÷W»‹ü¤·úÜ7¢Ä¢a%«Ó5†$«oªu:züý‡râ½#©yÄf_Gó– üó“Fö5P‚b8ôø`Q°y›©xÓåÄ?$êùÙt(D5{DŠnQd¿ßWÇ„ÙX9ú&|oÇ5ò§ÃÇ¡.ÊÕÇ,Ó0Ž
+é[Kàû¾‹Ž>l›KrÄÇuðÄË1:¬³ü0tæí‹Øºƒªfi«“ §’¨»•WfÇé>µ¯³ÒƒþìC*T6Ê@o£¸f¯|êmÚ÷“0(oO—N,Žwõ°ÛL›ˆ¾ËK™9æLЀÓY&º¥ÒƼ§(µ¸Ñ¢÷Χ۷òhs2Öæ´N#%$µ^¢Fhbdý‘b+^Bqù‰T-É[‚>›ç»ö½n¦¦!Ü ç+¸÷ÖAgÌ:O­æf¶bi´,›‹'§'±˜8bßÀ<¢^¼6–x¥{¥†D›á´×-„ÛF‹]¡Z/AXäJ< ÑHä†ÁpB¨Ž:«u'¶°èÖ§S†¹O¡/SÈ?ó*µÆb·n~­¨TYêÓí-{¯qøÀÕÅz!K…Y ¦‚‚
+†ÑKÆC؆©4€aì¬ÿ<šJeK¨¼>›.÷DøұѣiÉ×Ä ÇÞMD/˜XFÍôqU—7°öˆnëzƒhÓëT¯g«I %µd-` E„µ®c›4¸Pšvš÷6ï”ÊÙÊæ’hNYó3óPdy^èaÆ9^Ütì\ê»;nb‘Ô”T®÷t´Â¾ß”¤äΑg B%›°æÔJæ4b_à í‰ë:+mN@K7ç K­¨ÃŽÐÈX©»è1j–OŽu|«–ê
+bÌý¼Ìwî"DRxý×ǼOþ a’eâ9Á«Ód7”G‡ŠáV„µQòÏg3bðåð¦Å>ø•CΫæ,nfõ/cÀn ÖÉÍ­Ô²ž#!šy9ÉÉs§¯™GpŒq‘ª?\ßh§Äź½d­æÈcî7ÇÑkê²—Â[â¿{í”bO(·¶Çêj}DµB‡c0Ò®×.÷J8#k3ì³oû„’=>YžÛ6«Û#o4vÀí­˜±ÆšÊ|vØgdë¶ D=#ã³iŽ„ŠÜÖfYÑoëÈ]£UDn“H7™iß…ÞˆL®µ9#ÿ c¶¤Ý¯yê4Ý¢Ké‚Ò?^ ZY†{Ilsââ/ ¸Ë_šÉ\ø lá–ä‚Àd_ ž˜ã“Îþ"=|dº ‘
+‡p×snI}ÐQ3¦¸¤“ŠA¶]À¶ñ+9kl/ô×~¹þëÖríËU$…1µ.˜|¥Kö³¯Àž´¾[¯Æ,¿
+ÄôðÏûð¬ã¹Ø9j7o¬‘˜²-§âyCSÅ4´%-ê¸:ò¸ß&H}'ã8Y¤ë"Ö)îÉÒñtš^ù~
+œdP~Ë;PiÓ ¥(e¿&Æfú¾'‡T‹e%ó“ñ’-¯ˆ|Gép÷v/ŠfvîÀŒb.5SD¸£!¡·ö³^|´ACmÄ$ÚÁǬâV’³ÓÐXIý¦Ñ@;áIˆLä2rÏ}\^ŽÑkjÿÍa»(ãàÚÁÏpÖ Þ.–Ã){Ø;¾,J#˜¬£cñžÙ˜¨
+ª©z—AôÑÐϯGmþÅÅŽÏ¢ø¾lÂÖ*èÓü·ý¯Š³Ú«ôX-Q~ß>×îkÆ‘^À‰œŒ“ïr“çofmIªW~ó1J1ÀâI5ã%ùQÀ@ÚoLÎK1ôK ß[§íñ图~\/1v5#RÊÓTÕeh½MY‘SÙ2É›6Ä7Þ5½ kÈöÉ{å¼RZ `s2ÝøÊ‘å@ø ÿ¹<ø†š¢Xfdè½fB·¾¡“Kÿ§aØGêÛFo§i¦ÚÈŽºã“óºj»Š “q<kYŸÊôdÖ\Óâ6|Dà
+Ó¢ø{”ÏŽ õ‡3ë<âëFµ0hTUwL¿:“õüùVœÎ ߪ¤ZìDT¼§7©F¦›m•ÊšÛB¾þ CY-€Ý"ÌÒáœwžµð%‚•ÙDÞµ'dÁ¨Ö”¤ž¨Ï­ 8/xÉ~ÖÇ°é‘Ëa’¼r1[ÆkVzŠglu*d_5iX5­÷!yçÐ&­`ð€$‰®ï™ 5€˜”nH „J¥qe,v¸óé!ò#NdÄ<OP_Ž£Ê ¤‡­PG§"–fMš èrãG™!Hg)>…§r¸µO^Z”ò›Z:q@mŽ}lÍ’¢Í
+‰5¬ò¾ª³HT¿èQ¹·ùWç´Ì u¥@<•½ú(*aŒ&ñ­wâ#0±h±óœJHG/¸ã‡PO0Æ÷´èÂdpƒŒw‚ V‘qLð»ko†Ý8áCë;cø2i.5øܤ+„óòݤÉ=lÓ5“øÅ1ÜÍâ{°=F
+endstream
+endobj
+1042 0 obj
+<</Length1 1813
+/Length2 9069
+/Length3 0
+/Length 10187
+/Filter /FlateDecode
+>>stream
+xÚ·Pl5Œ”H‡ÀÒ K7HJ·tH,°ÔK—4HKƒt7ÒÒ-Ò ÝÝð­Oú¼ÿ?ó}³3ìž+Ϲïëºg ¡PQg3ƒ˜€¤!vPvV 
+
+uƒ2ŒíÌ~Û8A`ùÆ.Æ`cXÀÔÒbª
+LIþÇ).qx²ð°X8¸
+jjùçý}°ò6`;
+Ä üëÅ°°ÿãƒ-©5ìUq‚ÝÖ.l§þÛRÊÎbökù8¸y
+ÛQ/ÙYCöÍÈOøppÔ•xKÑûš^TÊ×……þ}½Iœ§9òÝ•<åÁ8D¸rƒ¾áÅ~”kp‚£ç¾”(Žã<šè†ËüŠü}ÝÛDµû\5=É! áégSmâ=ÍúøCr…Æb>ˆ4ƒ«° ë&°³±¨o¶)ª:ñÅ W÷ ]›z^‘ ¶×ûˆ‰«>ŽE$i]ø\l ù­Ø`DÆ nÊ
+ ü;LÏqd´©ëØåìÅ$¯•!Z,O^+œõöú¯[(ÄÈy‰ßl;rɨ ý“.*f¿`I˜km)Ònók}‘
+ àìÔǤ=á¾W}â„V/<ÓÚ׎
+ü
+ʈËF$E(¦ 6{ˤcR} …/ýVʳ= ›ß,ÝŸ:ú3¥·8d/°|–clV }þ”4¸3e5"$–Ìtc?¤9ÃxTÓù¶U=HÄKÒt_wÏåù7ø÷k,Lm®«³sÛÎ5x½fzÞË~ªvŠ'7qqû1Îü-‚pupÍ% ¡VrEµÛÖ%Œùf~\êÖ6uNß3¼}¹žtÜ>#±ó?‹|ô'qù:/M»£ùC‡Ô*³ÏÃUô¢%wè}ÔåûãœJøQ#.Ðï&U0ÉžCULK>Ð÷’·Ö*ÓœhNTòãSÆ*è.Pý¹mêa Š`\EpòIž‚•ìÞ¥yy׋Á·†E‰ª…$)´X"çJê$Qðïk¾ëg¼ÖÑLf>ÏÍâ3 &}güª0|6ö3×ác~Ÿ…¶ž#T˜dƒô•—Ó€ËËj}cxôËcâ„õ–ÌK“:"­ EMõ¥—3;Ã[B_,KŒ7ÇûB,a‹e2Ê¢G-•xP5d{ɇEÈݬ¡‰½ý®”9{üÓåÝîW7dgæ÷{òÜ
+Šû¶Ês[ù;¾¶t2ÈdTÚú×óÀ5ý»Î:€DZwÓé1UüoÞbkò#šsáñ`/KÁæ`å3,\ïÈÆð…E£¾Ì Ì#ž`méî™!£&¹<_ïN2ì
+\¤Å£û‰åDz`ó« fõ¢Xš:„æŽþþóˆ.Q炼zC\~X}:q
+°QOœ„îmNñÑ µnˆ¥-äÃ.ª‡ä¼8ðClàwý‘öïÁ"äY«oÓü¶|ìÉkDÎq Ú»%ÜŸ ÙÔò¦¾õȨéUÂ9Ÿ½<ò18¿ñ þvFàm“·ªKÚQEQ'{¤%u¹ç€º±ðå)É<ð…8|œxÐR.Ä¢+œ©Œ¹’fmwǶ/‘RI ”jÉ“æ‹løƒõt¨(.Üg³ë*J -/–ËrŽ‡©ãûçéá6 ÙyñéÃÙÕbÿw;ª²&’’lxbÝ1†lRœ¼ Ép¡rÖ¹›mlç{5¬
+‰Wø+ÜgE¼!oo¼ªr¥‘8ž“ok«€Ķ‰ùæeBç7+
+©3%®ƒv€u d ×Ó\E6ºª2ý›ÎÑçæíKÎÐwóÌõ÷Æ9é5¾1'N}ÞicRXG]ÍŦžÊ%iWOèe5Á”×–©Séß; ™x•Î¡ +/ÑÃýnü)BðtÎ ÑûŠ¿yÉùaÔ…6XJ´>Á­Ó8GƒJ¦hˆþœ•¢x+d`Ù´„ܱñ±V-3Ï}âàI ÒÅ UTËóŒå€WF™÷–´úÝWÔKZ)FépëY\‚#šsi„Uc<M)ÕòpŸ{?s„`P}KÂEµJá_c)Ý8áG(Oä8½ïwåT}Q2õ¼øº =JòDý¸æ9ñPafwª‰…)a^ü÷O¬i&ÐK’b®ow³Ð­]w¬Á[ïE}õ÷˜FÀ;9µ¿1êdž’ÁEUÙcŸ*a»˜®ŸeKž‘¨ÈG¹1ñp/Ž @üŒï¡¹ˆ/¨û‰cpX—¹¿Û‹‚Ï1ÏÃ7ðù]¾ÒNìÜôQ¿n󽫛]•Þ«IHR׌T
+šbYaÌÉŸd /ÚQ…vØOñDmag7ч(1 6ËÄئ}¿ bXŽÏº°@v”úm?+"Aý‘ßwÊ×C3¾az³¬"±§6éò‰âú-Ü‚Ô¼³º3g„@­š, ]¡
+o\Ãy,¬ç÷–ÙÖlAP8ˆ/Ñuyvªd¡
+Ù‘¶¢‡:
+ÙšbŒÜM¯C¿ö¼”0-0¶» #Ý·¥€UÓ8 {i†.90;–ŽËÙîo~•f§ÁK2ÉÞ,Q±Õy.§¾Öq>…ji=™®)oѱ"âï÷„ðg¬f B‹UÎf¯*ÙžÐ3Éïm¦ôÛSuᶟ9Ù…¸ÊÚb³ØÃ×:q÷ ÆQE´[:†Ð©.kVÊ«(n «r“û™¡°TŽ¹º´S܈®¡s/¿Ñ²<j?rzÇ<¯·ÈÚ5Ù,²—TöÑ"]–9!BºQÓcô@.h¥ ·4¹!±Nã&t)+0ƒëò€¢˜_èèµ.Õ¥vmþ”.ç¬Üfö|_§gïqõÔÒúÔ¦L
+ž±‚ùÓcîyW(
+"P5ü™0¿Of[ÅëIöÃëÎøíXŒÁK.x2bã ´lӕ̨¹‰H%UwóÍýM„8¢¥O1Âœ9y$…4ËCq`@_|ïÙ0˜1ù,/F›Üª:â=š6u
+Kõß­DÝ»ÆÌîÓï‹ÜlŒ1~/ùfóâñù;æÂó{øŽ†ÂGrqÎ*'Â!L)ø«´îèK.çFЈ<–ìbTÑBƽ‚&ó‰{ÓÅ´Ê('µÒOƱ]gG%•¤pQÓäV‡NÝTM4åi¤Ñ 8ÎÃ~4 ´'(¦ƒÚòwQSdÎ/&Qz† øžŸÆV•¿/ ŽU2ì_JÑ¥¬J kq^Tƒ…Ê”‹€Ju²èKwz”âⶲBçǺˆ+µ·ßjºÞHûÌ\ä’ôEIX›GçÑ1# œ1ð˹þ*Þ(ðöÏÐ(¾i!K. ×`šV«†¡_Šm
+¤U·›5¡Ý;éºp
+ª;ÒŸ„ÌÓ¶QS§t©š}t¸ËûØF…A\=“u¸iª*Šeˆ“£U¡!Ô0
+ãú6@¦F)³L ƒ®7V:¥^ÌósÎ02çäí®„÷> U »EäPr†5gÕ¬À3>Ú[Ú—×¹9oøŽö³BÕTÄ÷3‘6ÇÏaÿa¤ê’ÆÍZظyt‹ETÏšì¯×ïJ§C
+¥»†)¬4’b}º ds¡—¹Dt”RÐMßyd`˜ÀAìÀ®áƒƒLâî1ÌÇk[UÝßÚr£jòÓ}3x¡ø¥ÂéË·¬…tqŽàÚ™ÉÖ‡=0Õ"Wa‡îÃPHpäk}£wxUúŸ×¿îg;ÓÂÇÌTÝ,z/H˜¦ƒXââØ»1ø¹Ò\#¡a"íê3߃0¥­w3xo™ùœ¿„¨ìº¸bç„Š+±“eHba·$xJ„]Ð2 ψyfQ=|ɹw<zª="õˆÒ¼»×ˆxT_W³U¤«b…ì.‰ÎúLáhŽGç¡ ˜“M0ØwÍ_3• ´­ûCð9«èVV®üþOKC`¶ýaÉwýt–|žáµ/¸
+
+×κ˜ÜÈZ‚•"z™ð™«/×çïèÒ|’<Cå¬}¤+
+°Ä¿[K®4]•Yö˜B{ƨJ;®?­òµ¢šË«õ3r8G&ÊÑäkgéè>ú<}ð[Ð;â1«ÇÛä$£C6\Ppù$ñ í4ÇOVØ»èdÝóoY‹½ãbÂmc˜ì ŠÍbÖ¹'Õ$g¼ÃZVö¥r塈É``ÔZ¹*î:¤¯~ðÙnîTUÿBË¥7`»í[ý‚ìÝǽ¤7„ƒ‡ìzSTß»<ówhs¢ÔNH8U5¸ù«”ðr¸ˆ/)ˆpxT[KèϪ—6T™Ê¾H)””W¯p¥]þf„c(Öjøqг6VëDNä]ˆüÞŠH·¶ÔE ŽlT¿ÕG¢B(§ÖJ[Ÿs°8;¬š‹†Š€ÀF¶†òeáíÏrkb
+ Ê4!¹èeìœô4Bí†%wAÏ–AÌ~èN‚À‹~rýGeÚþ¯­ºñ<CéBÜ8:µüD¦³pý 4æ½FŒúH=Ÿ—µ³f>ËÁç9D@ÊœQMÑ…ƒ,Fƒƒ(þgºÛ¹4#Ðqcœsì^ï)j¼ùñ§¥/²³ÒAÆúxݺ˜ZJõËn$$obÐ#ïfX‚Gú¬˜Ó
+¡÷[˜U•×áJæû¥F=•Ùkº"$EakSÃme?íç=X2ý9/·Hq¿ïQÊÇñûâyš=ÝËŸ×Szͅゆè  ý|IñŠ[ýÊàSø³æ#R¦º™9i\VRÙ¹Meþ°sŸ¶m‡ÜIþñô¸2HÝ–íñÄu9}Šßïãçž fª’§‘ý%UO¤wD‡ÛΖÈÎJ²g¾ã Æ6P%í’Þ2&¦…±ynÍL,áä—HMG ¼Ž’\®9X÷¥Kti°ûäÒ˜hAö“s‘˜û®K°§Ý³$ÃC
+z8)¯åÆlIorÅeíȱÜû}˜b!B‘µƒë¥‚¯ ,^“ÖâØyÔvé!UnÞ(FV›uY¿~ž+$%ˆ¨:¬ÜÜ&jo249/¡œ}í}î%bùa’Ÿãc•DxÓ Ô¾ ÆYàQ¶t¼B¹Òc9:ã31”ÊÕýñ¯K~ ww…¥L%MÁÁ±s‘¤K…Œ`/wId¶7X¡‘³¿A{ÕKêVÛtu‡d=³w‰On@G¼ÕrVÕû‚fÃy4ÌÌ–¹‹;UvÀ'x—È;6wçz¦øÞTØàçÞœÐÐœËVzfBÐEz&šfW…&Ó¨V@LQÔy¥•½ö*ˆà|Ë°{¨|©3br“9é ZÜe¸ƒ qòŽe¿½žBMÚÍ
+¦6úçÍ×ØfOâÚ3Bè¸Õ<2?oÚ<¨Ðn>ù‰é|•¿)SŠÒ%$]Þ˜ÛùÀD-«–.Äh­MñUû'v||GÁÑÃI¬wºÃ Tô›ÊOi‚wˆ  óÌ¡™2à{KBƒc!ºØê²å³Zy[²u¬ìÚAlx¦0Y{{[óÏ<f†“ð¶³ì9êI{‘Z ©šX]Œ÷)œ =Ã~íÓ|4•ðåíàu|úo™>8—z˜ÆœúÙùº—v…ððs2Î]™FQMÎÕÊQãO0Ì×C¨ÆûQûÅO¯9×h.¶özT
+%¨veÁ <%Ï£¥Ô}ʉ”xý@\£ ¹ì<q,}¡U¯y
+ûÁ>QVºÙùÎ^Œ’Š€p±íx_œ>™xäàHEûG…ô6ßGºæY@ÒÙû ÐA‰vQ©sèÍÃõÙU·$Neš×Ò±-VX9äG`_xSôšO!Úî =ß¡¡vãñQaZŸ§%©‹šÊÚ6žš¦Øš¢2©KE§3&ˆ®‡[Ísot÷ b4_ÃÏ÷ädeVÔàïÔ7(7åP
+0Q;;™³X«—Y!a|2¥WuïîÜ]•yè-rfº ¿æƒJM/”¶_ºå>IJð辶Åyº yëÑÞº°AyÓ ªÌãsRœÔOónñ$±¸Ô:¸Ô:Z#a;^M¼D¨#²W(‘°_-Ùíz¢õHŸ NÍËgV¼ ‰ñÊn
+™.ùDÑÕú8”k½ŠÍð­M!ÉD_×T£þÙÓW¦«fzj˜µÂÔ
+Ž=ì §qßoNtŽ3½<×à6×oþ¥7­ö° ü2\pH“ Áˆ S˜.I­D2_‡¹¦0•¿™v{ÈQæ$ÅgB}ý ¾»ÛåàV>«¨†& !åmõëë}I¥o"x'«©9 !/‚rý£fk]ÏëbvQcÑtBg²Œ÷¬7:õ»Ô¹±7IÑZ¼qÃJåÓùE!ï¬çN¿|z÷~Ìþ,-Ša]-¿[•n«üFòLµ€IHÚmLŒæ^…Úí‰%A㌒ذ Ç°…rØT ¿Îà Ÿ5r£ {"¨G{dDë;¨ò'xy"â£e¢«« Îâ4è{˜ia}áÊþ
+#x©‰€ûûç¯[Ü…äêwn2Á-¦š5&jD¶CÒòö鉫êçíÂœ¾\äÕsNk|icïç[§†Ñ$_j{ n7>RfÀik¾å•¯0ÊÜñÌ&­ú,ã›Êo[‹¼£Ã?"¹+-]íAòÕ}\Ôi¹T© Õ>¶W
+ÏA¼ ¾N°Öˆ,ÏSÄKú‰¢’½- á_…æ{RúN¦Röät<•|ÅJ`
+Å<”úáX›ËºCü³›øÊüè²ï©ÀÔ™»yz¡¡Â “ôdÏ´SŠ ßòü¹ÛÙ
+endstream
+endobj
+592 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./LecturerDemo-KitschScienceFiction.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 1043 0 R
+/BBox [0 0 510.23599243 340.15701294]
+/Resources 1044 0 R/Length 897
+/Filter /FlateDecode
+>>
+stream
+xÚ•–[sã4€ßý+´O´ QutO°Ùí²Ì
+þ{Žl+‰ãØN›iFÑ‘¾sÕ‘ž ?@@5‚n•Z‘ù&yÆé'üÿDîÖ¾ø.ߥó•}ÄÉ’Lêõà!JSí¸Ñ8F¹Î2’QPZã‚"#_yHž“zæ•RŽ2Íx„á@jN…¶AûÝç yòg\L-~Oqôë™QTWVqK…ÔÂÂ(#3Â{Àà”±¨%Úƒ\Ð ”¿ £ÿ\­G(*w–C™Õè:w†ja˜
+ª¬¤\ª4ý4%Œä¥H2Ðãàý/Ójé./W~•oí·ó|ë³­'ï?L1’q—
+ꌽ
+!zÊQ Wd#Ä%¿
+Ñw¦£ÖÈ«ºïX²Ð
+º}¯-wÞaqعÄlÕH¢òÒg»³s‡.UwǪñ¾Ÿ¡NÁˆÃ3Ê5™}9>Þ³J’Ù‚üyóC¶^çßÜNW7ÓtçÓÕ–ÞN€)vóýz•mËZ´LÿËêÑßY¶­Gå.÷>[ÐÛ¿f?¶âS™Ø>—Á6Ψ³ÚßË÷šï‹¼÷>oÐ>oT,ó—zô²ÌŠf‹_f¯ñ~½ú«
+endstream
+endobj
+1043 0 obj
+<</Producer (pdfTeX-1.40.10)
+/Title (LecturerDemo-KitschScienceFiction)
+/Creator (TeX, with a little help from Lecturer)
+/Title (LecturerDemo-KitschScienceFiction)
+/Creator (TeX, with a little help from Lecturer)
+/CreationDate (D:20100727152333+02'00')
+/ModDate (D:20100727152333+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 \(Web2C 2009\) kpathsea version 5.0.0)
+>>
+endobj
+1044 0 obj
+<</Properties <</ltr#40step_1#3Acontent 1045 0 R
+/ltr#40position_1#3Acontent 1045 0 R
+/ltr#40control#40inner_area_1#3Abackground 1045 0 R
+/ltr#40step_2#3Acontent 1046 0 R
+/ltr#40position_2#3Acontent 1046 0 R
+/ltr#40step_3#3Acontent 1047 0 R
+/ltr#40position_3#3Acontent 1047 0 R
+/ltr#40step_4#3Acontent 1048 0 R
+/ltr#40position_4#3Acontent 1048 0 R
+/ltr#40step_5#3Acontent 1049 0 R
+/ltr#40position_5#3Acontent 1049 0 R
+/ltr#40step_6#3Acontent 1050 0 R
+/ltr#40position_6#3Acontent 1050 0 R
+/ltr#40step_7#3Acontent 1051 0 R
+/ltr#40position_7#3Acontent 1051 0 R
+/ltr#40step_8#3Acontent 1052 0 R
+/ltr#40position_8#3Acontent 1052 0 R
+/ltr#40main#40inner_area_1#3Abackground 1052 0 R
+/ltr#40step_9#3Acontent 1053 0 R
+/ltr#40position_9#3Acontent 1053 0 R
+/ltr#40step_10#3Acontent 1054 0 R
+/ltr#40position_10#3Acontent 1054 0 R
+/ltr#40step_11#3Acontent 1055 0 R
+/ltr#40position_11#3Acontent 1055 0 R
+/ltr#40step_12#3Acontent 1056 0 R
+/ltr#40position_12#3Acontent 1056 0 R
+/ltr#40step_13#3Acontent 1057 0 R
+/ltr#40position_13#3Acontent 1057 0 R
+/ltr#40step_14#3Acontent 1058 0 R
+/ltr#40position_14#3Acontent 1058 0 R
+/ltr#40step_15#3Acontent 1059 0 R
+/ltr#40position_15#3Acontent 1059 0 R
+>>
+/Shading <</ltr#40shade_metal 1060 0 R
+>>
+/ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/Font <</F30 1066 0 R
+/F51 1067 0 R
+>>
+/XObject <</Fm6 1068 0 R
+/Fm12 1069 0 R
+/Fm9 1070 0 R
+/Fm13 1071 0 R
+/Fm1 1072 0 R
+/Fm3 1073 0 R
+/Fm2 1074 0 R
+/Fm4 1075 0 R
+/Fm5 1076 0 R
+/Fm7 1077 0 R
+/Fm8 1078 0 R
+/Fm10 1079 0 R
+/Fm11 1080 0 R
+/Im1 1081 0 R
+>>
+/ProcSet [/PDF/Text/ImageC]
+>>
+endobj
+1045 0 obj
+<</Type /OCG
+/Name (Say hi)
+>>
+endobj
+1046 0 obj
+<</Type /OCG
+/Name (Order)
+>>
+endobj
+1047 0 obj
+<</Type /OCG
+/Name (AlienAppear)
+>>
+endobj
+1048 0 obj
+<</Type /OCG
+/Name (Shoooooooooooooot)
+>>
+endobj
+1049 0 obj
+<</Type /OCG
+/Name (Cool)
+>>
+endobj
+1050 0 obj
+<</Type /OCG
+/Name (CircleOn)
+>>
+endobj
+1051 0 obj
+<</Type /OCG
+/Name (CircleOff)
+>>
+endobj
+1052 0 obj
+<</Type /OCG
+/Name (Circle)
+>>
+endobj
+1053 0 obj
+<</Type /OCG
+/Name (Alien)
+>>
+endobj
+1054 0 obj
+<</Type /OCG
+/Name (CrosshairOn)
+>>
+endobj
+1055 0 obj
+<</Type /OCG
+/Name (CrosshairOff)
+>>
+endobj
+1056 0 obj
+<</Type /OCG
+/Name (Crosshair)
+>>
+endobj
+1057 0 obj
+<</Type /OCG
+/Name (PrepareToShoot)
+>>
+endobj
+1058 0 obj
+<</Type /OCG
+/Name (ShotDone)
+>>
+endobj
+1059 0 obj
+<</Type /OCG
+/Name (DeadAlien)
+>>
+endobj
+1060 0 obj
+<</ShadingType 2
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/ColorSpace /DeviceGray
+/Function 1082 0 R
+>>
+endobj
+1061 0 obj
+<</Type /ExtGState
+/CA 1
+/ca 1
+>>
+endobj
+1062 0 obj
+<</Type /ExtGState
+/CA 0.8
+/ca 0.8
+>>
+endobj
+1063 0 obj
+<</Type /ExtGState
+/CA 0.6
+/ca 0.6
+>>
+endobj
+1064 0 obj
+<</Type /ExtGState
+/CA 0.5
+/ca 0.5
+>>
+endobj
+1065 0 obj
+<</Type /ExtGState
+/CA 0.3
+/ca 0.3
+>>
+endobj
+1066 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /YUJZIN+CMTT10
+/FontDescriptor 1083 0 R
+/FirstChar 33
+/LastChar 121
+/Widths 1084 0 R
+>>
+endobj
+1067 0 obj
+<</Type /Font
+/Subtype /Type1
+/BaseFont /JGEMJC+CMITT10
+/FontDescriptor 1085 0 R
+/FirstChar 33
+/LastChar 121
+/Widths 1086 0 R
+>>
+endobj
+1068 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 69.044 41.694]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1087 0 R
+/Length 145
+/Filter /FlateDecode
+>>stream
+xÚULAÂ0 »ïù@CZºÞ¸í <
+endstream
+endobj
+1069 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 59.714 15.491]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1088 0 R
+/Length 202
+/Filter /FlateDecode
+>>stream
+xÚ]QË! ¼û=›H(¯…oðdü/ÊÁ“¿ïX¶º¤0i'M—Éâ0ùhlI”Œ™j;½‰“)>O£â'« -Ÿ¡˜Œg¨§ÂW"6¨C¼&r[bHf›o\QEu>§ÉèêáQéq^Ië÷Åf‚
+Óú¾Fm­ÖÆ|ø²¶eíÊÊ\ZóÊ4X†¡,P Ù-!»?¡gmþ7ÙöŽ°k‡å€£1|‡¶©è·Ó"b­
+endstream
+endobj
+1070 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 59.119 21.843]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1089 0 R
+/Length 102
+/Filter /FlateDecode
+>>stream
+xÚUË1€ …áS¼ ØÐFNà¬ÁE]¼¾ÅC Í_†×ÉBÁž²Ju'8«“$Xòû•ª;÷Ë
+òA Š:ÓçÚ;×YsJz[ÇŸlÝmê1´ÈØd¹‹{
+endstream
+endobj
+1071 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 54.354 13.109]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1090 0 R
+/Length 207
+/Filter /FlateDecode
+>>stream
+xÚ]Q9! ì÷®#aÀoHå HiŠTûý Ç6‹ŒÇ3öÈb™4“µ*i!Qì…rÙ>Ä`\ð†zÇ©Ê#{ƒ…æv"eÀ)G*Ðk-nD¬Ð‰xd‚g‡F–¹ªÆF?˜µ»{dz^fQÚ}ÕŠY;WŽI¤³\¹&{´4Ҧܰ~ÌUKC³‡WcþùòjË«+/¦àüÜ°nƒÇ¨‚KS
+endstream
+endobj
+1072 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 9.925 5.161]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1091 0 R
+/Length 136
+/Filter /FlateDecode
+>>stream
+xÚMŒA Â0 …ïþŠwö“n]×›·Ý~€HÁ"¬¨s0öïmŠ: IÞ ïËLÞ7¦Xëß„ÁRdµˆ::@Èæ3„Iƈa3%©È¿ªïpçéx\Âm^Ï‚ø|þÂä2 ª"imGµ.K&7—`ÈJíŠá-Ê>àºÿ™œvok2+û
+endstream
+endobj
+1073 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 69.044 41.694]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1092 0 R
+/Length 209
+/Filter /FlateDecode
+>>stream
+xÚ]Ë
+Â0E÷ýŠY yLcºsç•ú"‹hQkAü{“™&}PHïMæÎÉD Ÿí„A Z
+‡ðmñ)êÚj T13¾ ‰/ɨâ¿kqÜÁúÑwÛçëâoýﬠù„”%$VÁ‰ºBE09Y<˜TAg!r\F²Ì'9UŽ½Ê¡cB±ŸçƆ×U6qž8Êb
+QÑ:LÍ
+endstream
+endobj
+1074 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 9.925 5.161]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1093 0 R
+/Length 118
+/Filter /FlateDecode
+>>stream
+xÚM‹1Ã0 ÷¾‚sBrì8~Aæ¤O0Ð,õÐ.ý~%#¨A"O ß–2‡Ÿ+ÔÅ·Û.8ü¬€2Ù*ô‚à…Ç
+endstream
+endobj
+1075 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 13.895 25.806]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1094 0 R
+/Length 168
+/Filter /FlateDecode
+>>stream
+xÚ}=à F÷œÂs%,TNÐ9½B¤f!C»ôúµ q’?z¾ Ic`,·8b¡ó:¼ `É1G°§b^%ð1\3,:ÝaQ’Uà\eÅñyÙ+‰²Fù'Êþðªý½8>DB(OÂѪ‘Žj»D¶òˆd"ªN»‰ÜDÝÔœäÔMíRù ›)ŸL]øà"wÑÑ¥ga¾ßXOy
+endstream
+endobj
+1076 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 13.895 25.806]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1095 0 R
+/Length 168
+/Filter /FlateDecode
+>>stream
+xÚ}1Â0 E÷žÂ3R,;¡93\¡]’®ã:.e@iªç(ÿÙ-Éb`,—8b¡K›žP°ä˜#è…C±4 ¼`†µ¿®
+endstream
+endobj
+1077 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 13.895 25.806]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1096 0 R
+/Length 169
+/Filter /FlateDecode
+>>stream
+xÚ}=!Fû=ÅÔ&LfX—È ¬õ
+›¸ Úx}¿–E C o€ïñ£$hJÊñ²zŽ2Óš§'EŽÁOeÃW±fÞ3q Í†+‘ö͘-èŒf:>NG…¨ZT¢Úè_ðŒ `xmïãJ¼G¥TÈz*«• Û‹Œ7@)¦jt˜¤›¤™ªS:5S=TìvSLN»Êéà’î’Ñe{é6}
+endstream
+endobj
+1078 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 13.895 25.806]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1097 0 R
+/Length 166
+/Filter /FlateDecode
+>>stream
+xÚ}1Â0 E÷žÂ3R#;¥9s¹B%º$,\Ÿ㸅E‰ž­üGˆ±„$äËLCæ‰Ö:<(‡œbŠ¤¾Šµ"ðR¬mí¸"DºŠcã‚Žãý´WˆJ‹ÊOTŒþÏ
+endstream
+endobj
+1079 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 13.895 25.806]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1098 0 R
+/Length 166
+/Filter /FlateDecode
+>>stream
+xÚ}=à F÷œâ›+aÙ¤AåÛ+Dj–0´K¯_cˆ“v¨øÑ3ð=@ÀÚBù2A"e1—á‰L9Åa¾Š¹hàmX@ K®@`Š*uÕ0T^uÅñqÚ+JÊOT:ý žk¼Ç»J˜ôI4™£ÑjTÇj»T¶Å~¡RUuÚMì&î¦æd§nj—Z>¹)¹)ˆ«‚\ì.>ºêY܆ÞôOy
+endstream
+endobj
+1080 0 obj
+<</Type /XObject
+/Subtype /Form
+/BBox [ 0 0 13.895 25.806]
+/FormType 1
+/Matrix [ 1 0 0 1 0 0]
+/Resources 1099 0 R
+/Length 164
+/Filter /FlateDecode
+>>stream
+xÚ}M! F÷sŠomi‡È \ë&q6°Ð×·ÔNQ†Ÿ¼¾Ga ÇrZÀ)š±¶éŽKN9A/|k“ÀS±!fl};bÑ,§Š¡s•ÇÛaTååŸ(ý ûd<6Ç«H(’®îxSUb%rÙ^4ý…HEe´›¤¥ÅTŠõÃJNæ¢áÊîÊÃÅÞV`ïË´4Ðlö4.Ó aúPZ
+endstream
+endobj
+1081 0 obj
+<</Type /XObject
+/Subtype /Image
+/Width 983
+/Height 1000
+/BitsPerComponent 8
+/Length 399148
+/ColorSpace /DeviceRGB
+/Filter /DCTDecode
+>>stream
+ÿØÿà
+
+
+'
+=
+T
+j
+
+ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eŠ¯Õú Ek‘·Ý*QwžÅì;cŠ²Ú*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý#
+#8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O
+kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ—
+—u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°
+¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿî
+ ÿÀ
+讌Ã)ÓÃëŽKü×· ¬¬"uqžb‚2@±,A†€`g8VÕ`M_Ž2ðS÷yùá‘R§[-^"×]Ïc1,EôÚUˆ*ÆA,'¦XEìŠ9‰'½WEÌYÒ“ä<pfSq*œÔýç¸'já½IÊ¿p¬ÛbP€.wYaT)Ôà düp3–Ðβ뤱*§pÌô'ÇÀ¡2dÿ
+ ‹®žÓ&‰qò^[k ®É4«ã7ûC1Ž6¢€@!ì„K=" ÇÇä¨E¥òKšÑÈ ñ;Dæ`fcËÅ ‡è¶jí¨ü‘ÜìîŠæ®UTÕÚ=§/u¬[¶B…`SêÎq&D£Ž8=^Ë=V^Nb– YW5,¬õÖê@\è ×Ïë‚Kì…Y¢ˆ…,@“Y9“Ô,CÄÄ£·s¶Ã°ØŠÕhŒár×qNÉ•íÙ‚œ–eö¬`ųñØFR< ê0 PŽY\4èˆmkÙ[6µ*²b¯ÚF *ùK–»+û´T–Í–~ íö
+?‚ÐX)˜Ï ñ˦!)ÁM–s ŒÂëÁUN=!Ë6Õ‚ñ
+Õ&EU
+†lÍtå¼qI ±'1åþGØ*3 QR9c˜
+ÃÃS®¸f1¹#4¶Fn8Ù-÷úë–Q+S"‹JZÁg1ãn>äœÀêµ;e ÈåÓƺÁM7Ø•Ûsýµ«Ï’ƒ8{˜‚ÁV„IÄH°qS¢ÖùO`âügä|þÉÀî¼^ùÁáØV¾ïÃÝú~JÀõÕîhÎ3ì ¢$Cw)÷.,pæ–8ÌLò¿5©ñÛšþà§r·àý®þꛌü¾âhY4ñÓ&´ƒžÜóð³òñãa::·íþËŸ–çÛNž
+Ï †¶PIb̘éPÄŸ¯Ù\ËÊ” "l¾7IØ¥ ô‘nŠ02A†.‹(
+ÀÄ
+möæ
+ÜÀAÓÇéçŽvº3g¾D|p{ˆ'9g±¿là7¹g¼Å¿ò‚áX zÿ
+?P,ÊeI™éŽpÔ««1aí™ °zøôÀ`‘Qm•®ºÈ G€ÂÙH)Vt@ÌѾg3ôË!TQ/t3ÜK¯·_I™NEÓc(#›È€»µÌ⎊vª2ó6³€IûV'§\0H 1´_]–nh L—þx',”YÖ•U½«e´•jëìV#$,‰"L‘¦x=ÃT±ŒYE¼Ú’²¥†p`ç‰t$ª¯ÎE®Ëí‹Áµd‰ŒÇðÀ> „âV•+žÓMvÅn¦‹¦e X6•2¤ÈóÎƨ–ÇòH7›m`Ö
+
+¶Ák H9˜3× 8–uا¥ÝdÛÅF1Ô)Ú|<Fb·êM}éuLLÊœ¡²ŽšŒ ‰NŒâRv\í“z@éã $‚¬Æ!”n±ªk6“J¬ú
+±º$çÒNêy˜üGàâ­~å™ú½â_Ç?,Nä ¨÷î×3ã‰u ¨×_˜3\¢d7b„…mÙLƒü1N¤†@·’f
+ýé€%H)ue”Ù™“þ¸å$QÒÏA X frêc\±Ì¥Õ«P§xY€$,_7*3ˆ#Çeƪ•®ª@a”ˆ,J‚K*‘– d?–8…
+T­PĽ)Ûî€Qƒøà„h†y*‡dvM•”!aý[¥9é–YF"]ŠnàÎ.ŽôWY(=g"ùD’?ƒŒAKœˆ,¡LÆá?a ê0B”K%îª+2 lD»¦&ª
+`r0WK 蜪-¸ÞÊ•³ç²µ
+£È ,àƒYüüÆGu¼lÀ¡Ü$°Ë ”tU1ä 9CjÊoÏ2NL†E—Sûkð{ÿ
+" T´„b«)?<sºfÖQîèª@?Ž(“^/+˜n<ZšÑEM}ÀAÙZFç>BFÈ ÑLqJO¶¬ª=m´¡ý~¸&Jܪ÷rÇñ=ÖýYï{3é÷
+íÝ1”à6‡}U’[vÿ
+¨À‰è®»½¶z÷0A¹²ÉA0 ýN2H:Q¢[ŽmvQ±€ØHÜKNazŒ³=0BAÐœE‰%®e’'.£DP
+x‰Á[ê~ê/=½·h´€R¥ý?tO”ár$Úêæ!
+^‹Z‹–êˆÖd0Î@¢Œˆ.«±¬°_部 K²ÓFe`HƒœG‡˜ÇËg*/ªã‰ÜŠ,1¸N„`AS(—PJ
+pÀMúÞôýÒ6ßS®úæ 1YÌIËùbjÑÜ$í±‰2c ‘Mˆ@2Ä9ççŽqF¥ S´J®¹Hu8‘%U¸ ¶Aažy`Ä’H¢º¿ÞK9i5níu¬æ@1¡Œt(º"®l”qMŽÊªÀ`$3¦
+†H9‚þxheR{¬ª…Ÿ»¡ú}uÁ%Jjºë+!Îî‰Ò<gǨÈXQy¸Žì¥FC5~¾x#KZëK„§Ž¾•ëzŒÖX8€­™ÉùuSß®Öû¬'ÃP?Ç|È¡ä{Y.Ö€»ý³ÔNBLÃ
+#¢±È7%…!D‰É~˜ƒ&,ScC„—-d%€{‡Àœ²Àï ‡
+¾öì€>Ø#0>ßÃeU"Q°{{[*Ï«o@Oç†B ×T¬™ ¢nŽ:¡ƒ(HÔFXpˆ6Ug"(š ŠÂÀ³lî2'뮸!ŽÊ¼²’_TÁy¨6@1`àÃZqßT¯>þªŸel[ ŽK1$·¤Ön³×¸¹V£Š"!¾+3—gžUÕñ]®ã#•¦×]…‰Ih'Âq
+ÞG8ð>XTUˆÈ 9xcüð¢˜É%µQl¡g"+ •¤Ç,ÄH‹Ü'À‚î•h*A>@ù㮢ú]l­ÈeVUè@pA|A8T¢
+8̆*Š,©‡ŸJœçÄœ¢Òàöžo#³sûðf휦žEv^•Ý¿‘¸TÕÔXXà%¶‚[¢p2}ñâ&t w¬¹ÞÊ1áž‚W•KH˜Îq ¹×ŸŒÆ]X.@³ã‚ˆDš„ˆŸIÏ…ŠUœa”Ì~¹ dÚàé‘+˜€||1Ñ*HVwq’æ@ÔÆ$²à•k[t#R4úâ—2½VŠÉgPà©dDˆ(ëƒPQËXR-ÀDâK" ±jO† !ttÌf"@ÎpbL†QtÕm>©’u>gÑ ã«£2ØÕ5‹A‚™?ÐỚ…+Óz‹!ä mY1å0ŽŠ—1±ÆÜ×/H$å!Ê S
+j¦ƒNôÅs¸+0 ø >
+„2R~„õà UÉ*¿‚¸£b‹l*ÛÉwfñŽE¨‡ÕßWªƒ%;˜ËóÔa‘‹%ä;‚€n†Ÿ„†=(ªGj©]~á†i\à05… Õ6@
+Û¹y,Œ‰üuþ8|B§”ÑÓUz Î,Áfd–à‹ZZáÙQœT79PNÕ˜“ :œ){ ‚²Ù–£?რ_½Ps›6ÒYXæZ`åæ0™ÅÊÐÃÂ4¢n«ì¸ƒÈ3”ñ
+ÌþXèÁ”Ë1©²– ¬Fß UăÖËÕØ€ (LÎgUÓ¨®×¿·ì™, i¸€&~˜‘wÕ ã·@®Žg1Ï\8IUœS€£VXZgÜœ–?§o_¬âA/[%d
+‚v°ÐÁ×T¹•+cOQÔùâC¨Ú.¼@ÎD1!qDB+±YL¤ÇòÄmuˆ¨LÁJÆݤ8ž„ŒÏå‹
+“ç‡À¤Î+F¿Roh&dŽ˜·áT%Š*ý¦r_åå‰K!Ь d§O< ¢
+(’EjµíP ÁÔG\(À&Ö…jpû¿Ø»§`nßÃä·s·jwnMlÜÎ/°X²Ðá¡VÍÐò €1OúÏ!'!ž‚Å_ÑsÇ´ÄyˆóéãªÈöLl:FGùbÑŠÏߪ PW0`ÿ
+ \«ÈHO„zâ
+ž×îì±{N÷„ü __€ê{Ã÷Û““mkÇn=5€¼J0Ù›‰¦+ÔuòÅÌ.Ï®¿¢ó¼¦€ Ï©JÕR’l
+Û£Ó§úâìVDêž³“g#Æál©jãµ,ZÕ,p‚wØ惤ýº 21Uòæ;DhÊ’k
+ù“:Æ¿Ç9:¥¬ãTÌH
+
+¦Ù\ xðÄ¿ÍFЮŽlbFܧ^ƒõE9=“U° 1¨Å¸YPÈÑ®G"›——E¯W&§VªÔ;YL«+ ‚‰g]¿e]Û9\«Zþee×3Ym®w;»ff9±$É'`©œæRª¹ã®ÍÊA‘ꃯ牄]FIôCZ¶¸p¥äŒŒ†C?,ΈÎWSü&%FèÏA=|㦇²LdÁº£r+Gp¡XúG–‡é‹!TË– ‚—¶îJ
+ª±Ø8+ÇERŲÓRg1
+=]5Ÿ<,隢Ҽ…{+¡ã}gÜ
+ûUÐ åXÈM<p%®S"d|±:u¾¨7³×g¶êÊÚ²° €`‰=1"@¨8¤ nmÔ”Þ¨¦ºÅcb*È\0·‰9œt1²Œ¹ÌˆÑ©E§ñž'iæw®¾ómì·Ü•ó{ŠÔn<jØ€mö– …×hÌà¥)Dµ*0CL€d-jz+wÓÕÍ·Á»õ\*-²º9;J{µ†;lÚs†ptÓ„‹9¡Uùˆ‘ŒK€hUG-ý¥©›Ð€…_Ùœ>$*ÄJƒ¢¹±†Ñ‘Ó½—:µª«aƒWBN£ðÀÄ1ê¦í¥‰­b°w*Hm¡´õÇx¦JLi@–•¦ðè ¨Î0HòË,&N¬c5_ÿ
+¸ÈÁË, ø&y±þñù¥,_,‡†ZuÄ€£%·~‘¸kkŽ%®.~>ã±­@T6Ñ”…c™é8XßUdHíÚå[¿öJºA!uÐÿ
+ű6ÒÛjÇ¡ÿ
+É á_áò½ à‚ÿ
+#p=XðÁQ Á Š¬ä$kŽ+¶•åyÈéâsÇ
+.dǾ5–ɸқeX!°“á1%¨ãŒIó5E›d•ƒ¸ÐøÆ ‡ –&ÖR›Ü]ŠåÀ
+í>Ÿÿ
+GÝ‘39 èšQ¹S¤DÌbDœ¥J-TÇ|í<žÍÜy§—m_Ç`ø·'"–,¡¥-¬•lˆÐù`Ÿ—Å-¥‹t.>‹0ÒQDœ›!—ðÇUkò¹<®áu¼Þc.¾Æ¶èU_îXÛ™€P
+¡Œ’ P4鎑eÊfw”ª½ÂÌÉ üqÒîQÕ=Å´²‰%Z ç$ed¢Éþ<²ƒ™UÔ–¸0*‘)0u©M€Âwn!”GýN¨IÝÂ:»&D†Ý¡ÐÇIóÀJ=1IÍU‡"‡¶C¡Ý¾ Ìh`ˆ‰ÅIT-X%D›o¹ìä;o±œ³ä’I&ž¢D‰.M×”Ú^R@1üp@²L¢è7±#mGîûÈ×ø`œ%ÅͯÇz[2–,*ˆûÇRÇ˦ä+ÚéxWE2
+îuˆéá.¡˜?z8¨–È>àÀdܦ¸.µrëÛìúÁfÛ¸€|´Å|ßÅ^â6ñVªý½ÿ
+÷J&Ð×6Ü:`dÕc íÛ¢|ý\8"3Vu~Þ_‰¹³Ìç]a„Sk{HûIË©9bΰ^Ÿ˜Jd¥` ¶@Ûë$Ì´œÀe‹°wYŒYѶ5$Ukf°`:¬‰ƒ‹0/P³óDÄ€V§tíÎÕË=¿š*÷Öº­”µ-_nä!ßYe˜lƪr9â"ƪsFxÎÒߢÓøWáüÎòõ|ÓŸÉíÝ›ô¼†¯‘Ĩ_a¼!4¦ÒG¥žÈaYÌ€¢¹í‘Á9‘°m;ÏÛ´ØÉíÿ
+-óV"çÀ,ÛŠ­¨V…l*w•—]³ö·Iœüp²£uY¯Vã•óÊ0{bV3%¾¸åÊ,U‚w}ÂsŽ ‹+/&Šë¼_O¹u¨‹7öX0%¶®M*
+Áñq"¯¯Ñ,Kuû¿ë®$¡Cc+QˆuÀ!‚ |c¸¯ã­v»ØW
+ŠP.å`IÜY¤DŒŒàjèÀ \Õ“»<¾p@!%—½Ô­Hl‡L€ƒmÊWÚ<±Ô\ʳ„Ûî¡ûÕ’@ L£LD^˹ù‡wý·î_øÇབྷ—Û{ç‚kùW'‘x¶®o4¹>õ Zm€WËŠ%êV??Xâ1Eˆ¾;Ë—rôð\§"©[ûÙ†`¹c!3ä2Ÿ†Ñeõ%z•²ôñà$¼!Þ©ˆ=c PÚ¹ ÔùFäb*6†¿lõÀ‡>(ÈÁYi§LH T$¸dÅ*¦Ð6æ 3GXÏUåtv³Ñ±¡˜ äz~h#q…*¥¢JÀo ðÌaŠFzÅ‚už†ZÙÇ"NöhØFݱœøÎäƒ@ëôø/*5³iU
+cX?Ï=q˙Ń¢ª!Ëp“
+ß‘`c0l“¡üƒ'°§@z ‰Q
+«ô º={ˆÍ³ûc¤F"$ºd€£=‘Eƒ!Áƒ:‚#Yá?’\ 
+¶åW¤±š‚QtQ˜ ûhRRË’Ë6¡³¼C®ìÚ"WB<qò+Õ}€Ò„‡¢÷pïÇ—Åâvî_!­áð•“‹[Aجۊ«Fèž“– D
+µSgšS24 2mxR6KDg'ÏðÓºTÅMŽÁrA+á–ž2†,ꌫrÅP¬‹ºI:< šÈñ¸@ kÉ̱Xé‰ù!ž]MÑ‹kº¢,XàäÄ(Ëÿ
+šÚ ©N×r ·AП 3Â2‰Âê÷ÀÓ°ùžÝW@?s>GnÒœƒBÒ©W‰O¦ºiS>ÝcP:ùœÌœñTñDBÙ¾æ&…š€ ÝÛ¼Õ}¯öŸ±~î~àüÓŸÿ
+6‹Èû—X2KªM_¯åøü&¶=·¾ÿ
+aKu•}9Iô°ðÓÌ ®ˆY,@1¸åÓ¡
+Ò2@úcr\¸’½t'Èù㊆[Rsú~˜ç\Ê]x!
+†Ad’Kü?†9BöÊØ„I"Hðë'¥ZÓÆýeµñÃĽ–µWÜ)˜Â’³ÁÇi[©-¸µ»×€b„¹–è^²q1
+ U鱃í_H#øùÌá‘ †i†|€&`gÖ0íĤíyfc1¦˜á&\CÑ]«
+C6ïÛ¾s&5ÓðÅiRJä+ïB¬’Fô*±:ÇCþ¸€_U2¦‰‘MŠ¢Ô‚¬¹žºÁ
+˜;ƒvüÕ¼;$$XéG×éâsžY¦^yOOËß4’[Áz B×öÉ
+Áv t®
+#DOª©$
+Ÿ¥f¸iÚtòÃ
+ÇÒÄ'®}p`¡,®VKe3ƒ‰ù '¥×¶z÷
+€v‚LÌ’Oã€0ºtsv¿ýÇùoí¯.ÎOÂ{¯#µÛÉF£—È£'½XA…ÏOÏåÆ2©ZüOzþ¸ÛÝÀ.E‹¶‰Z>Ie^û^Þ;ÝÞ+ä©Kž¿î‹Êmy51 f½ ] fWÉî!¦u•þås\ÊÀe¨0t«mÎÄC±v†@3¤=qc.²9yš#«|ûו#Ĉ|  ç<Z
+žUk¢ª&öfÚˆ!TNa@è4ÄôNImÅÏo¢H¢=®QE‹´ÂŸL×^‡Lð+0˜'ª¿»s8}£¸öŠÏ¸ŠÔ‹¬Tß[K´`Ž@•‡lȃ„dÅWWøÜ©F Ð÷öù.s”YAé¤@Ÿ ,CTÍå™+ÌD¶Âꊎad*ùDœ €8MÊIêÚ7)†L÷i…J)‘’϶¦£Sžjç@jʃþãÓýq
+Pê¥î¹QvçêˆP`N¦8†DÑ^ʆPAœýzc— »G› GòÇ‘QmWhoéQ—á8à©Uq+
+Ö Ðæ@Óþ† ™ Ôî°×
+¤Ö¿sfr'SÐx`IF­vz
+¥Â.Yx‡yÚ2ÿ
+ªX nL£ Ý2`
+vsü|?ž$ªÊÉU’É‘9àB™Äu´#^#1ƒŒ’%‰Ôû|Šk^EÕºqï,´ZAÚÅÞõ‰Ï ‡E“ ¶‚ÔNò½‹×È^E¶Ô­r
+Í~Ó‚WÛèÒ îgダIÍZ‚-Z2cµpøiËâÛÝ¿ñ–¸7û=ãXh}›² á8hîºA`bgüOK¶©‹™í¬zdÄýÐN[ºe‹
+¿r`”L{þŒº_‚ü«µ|I»¿ü·Çø]øw>ÝwŽ¼ÒÀpî¶6òé(DY\e9xâ·',ŒA!Ž‹[Ú½Ëxœ÷®¾}ëžæšUë<tp¤÷²±/ì6
+ZÀÜÎft¬ø¸Ú$D:ñqÀd[NÝ‚VÒRÌ( Úœ@5@ÉŸÓÜ´×}ˆV›Iä§lƒÖ'<!ÒLc¡B+a0["rbg,p*dëÛNÜó®P÷¯ZŠÒÈ (ÈŸ¤Æ$Ð"ÝT †
+Ú`w"gSs×¹}’Â'®†<±Î×LÉÞ=ý¼öžO¸~®Îâ¥hÙb5Räò}Ô`IÜ#nÒ3×
+#ÌâÚõîV£’>™ŒŸwøÖƒ¯`³I‰Œ\8UT´çÄ:âמ‹Žœ²
+jÿ
+:HèÊÄÔaRÆ\ÅÉ”KÆ颺†åìs#AžX”ŒÄÑGÒ,)È!kœÜWÐyàI!I€ÔÑtt÷¾@¢ª«³gm¨M\tÌ3êsÔ˜ÌþQ…0wÔ«÷
+Gºfp·Ç°ÐV6ïÔÚ, íTòM#2Ÿþ3ªøa‘ WÈI;źtðîý’î K!NÆÆ|º`Ð 9V§V^E!U÷9‹¥@¤álô)¯°¸ìUyÓg/“o–«ŠïºªýÖAAxžz`à
+ Îc¸)Òì¨w’ Ë?ôÄíHß]Õlá>åEoÿ
+ì³}ö-Uÿ
+2§Ž ,ˆ**„XÍ€zµa¡ó뉪 oŠ÷é‹/¡`ò׌&R^­Y£AR#ÄùáÑ‹$’è¾8eV­Fä9ŸˆÈŠqÈê’¾–T0$dg¡HÂeb2@(D0Î
+ÁÔ8È'C…£"Ä RÒý#S㉔3©lö€&ÃdèDY;ÅiЃ‘ù XÆ\Ŭ›â·Þ‹ËpHÝᔈœXÜE•C/äáKÌJɬ·¤·‡M:á‰TKX¹±Dú¤Ÿ¤ÆÍ‚(âótW rI ÆfsÀœ nB£º© Tµz8v(ª¼Œ€·Ùx°F
+ 0Õ€œÁœY!•Ò£Õhqxü>o¼…âw-W_s_lWÈ
+È+§ŽŠ»½ÜØ™0G„f;¤wk÷#¡8б
+ÄhJ˜ðÀd%‹]YâÆ;†ðñÔ ¤Ýê²×4)®½ìÈÉÙ>L #
+$½WJ
+&Þ×JWî×e'm²ƒFeûK ÒqÑ._à‘–;F×]B:/¬dpçUˆ+À²¾å’
+žW•Ó ¶³VÛ´ƒ &|õ z!–:W¹Rõ,ƒÜË(XðþXYFǸªE 5À$Îóœå˜™ÇH'BFèO^ôU,u UˆÌÜ¡7¡ V:$kG ÁêTñœ˜WUY#O?ç‰D9`Hu¥Áåó»_&®gk¹éæRëeÖÅ] †V‚˜™Ä¾>YCͪfÞBŸÒsëºÛ{µF\Þªk_lh($îÈ #ë…znãElòY¦pënîÅ[þ¾òøŽùWû»=v{wòÒ£ì×m’ÁY”mRzË 2,U‘ÆžXœ€½GT­|zù
+E9]^[#øÇ_<A“^ˆ7 ?L~‡o(×Ã[62("Ý¥÷ÀÞ}9mݧ–¸˜”¼ñí‹öû+ò8~Îe·ž®4Ëà Ty(„Ôntþ”³F9Äõœ‚XÉ@:¢ WfLÏŸá㉂L²]yêE¬T ÛÐ~>xâa
+:áj’ŠvÜÂ&'=q,Én j¤"l%*>íÃ9?Lê—žq Pw£+ÿ
+ˆ1™ÏÇ\FÀ,™ ijöñH:I*Àýc<¼0©bW!ÊÓª_‘ÅWÒÍý9€?Òp™EYÇ3÷K~—w¥™ÒÓtÓ›hr¨ü¬Iu&:âe‹ªˆrD’wqJ™Yë§C…K|r‚n¯Âìüž}õñ*–¶Ö XNö0«øœ Áƒ•g3ˆ¹üWoóÙ_œþ×òx\Oœv~Om»›Æ¯—Ç«»ZıCnL¨&$kå€Ç-Å­Û·‚»Íöüœ`%6 ô Ô\S¡\—'„lÕŽ¡F@bü12ÆÉ™ÊZÔqêY‰Ìx}N
+/'Ëå1»’òÀ"ä¡D*„\”ö¨`¡ÁIJRÝ.ïÉ&Òn„ôþx’]LbɪPõ°©K*AvÖ4|³ÃZÀ¤nw"½SÕí
+º ‚ÍÐ þX¹ízË–MùØ+sìížò'Z”¢"ÞÎëfûþG¬íHVÕA¾'~(²‹¶½çVîñCmŒf¿I’V3 i‡Òªœ¤D©@˜zéÇ85ji«Ú 7î
+}¹°r:N%êÊ:=žÔè”vW–#ÿ
+*3;–ƒ÷žIâQÀ¿ÛºŽ-VÓÇGª²k[Û}„0‹nÍI'oL €ºxäKhÀE’ì ™€\.n›‰´^BÅçUðìiyƺ­ÐŽJ¹M¬a
+©uf`A}À©üðfn§ÓeU­ì•©K4:h¢zà j”pŽê ªTâ«Uý-ú†ážYŒA0µº¿ÜrÎdÀÓè0vUÉr‡cdëžgǦ–LŒ]Z›X°M»ß@ºÉÐ@Î$MO¦æ•Mûõݺ»i#’ªµT+ô’á³gR bDŒ£<p$kNÖ](8¨­‡_Í.êéa­”«+ASÒ<G–ùªÄXÕ–G†s4¢`p¬l ‘È>žX” T UwV[uDýÃP|G_®æªÌhD"ûA]Þ`h| `uP`YU½Â¡fÜ&GãŽ,¤ ’Èô¶`ë§á€ÞȆ!"ÊâÍ˶3'ü?×èN2ìT‚§!×® (Ä“e'ÔÛŸïn£È~‰5S¦>³ƒT.äb–Q—ž}'é™#·ÅË Àá‘1ŒÌ·‰Ï k!œÌ®ªÅF°3Î@Š‰ RBÆU¨‘çç‚\Á‚i®v/‰$™
+£©9`dXU7=æ–@dÜ ¨bŠ`¼‡çátý,†€— :Hg¤i×*.ˆ+ËcÔw¸e>Zà£$©ãꎬ­Y°´m:k":bLÜ¡ôC:òrl(ðûev‘œ#Ó—øâL bʵ¸läy H('W#v§]:è@`êâ²®@2‚@aÖ<¼ð.¥‚¹ºÈ
+&r醥‚è>“d‚ ÂŒj/£ßÃZÜ ×2êqÐ ±ó³Œ­|\èM®Ú²Çæñ“vBcQñÂå£ÆämðI‚Bì2Tg¸uÎ|\- Ó íú! }¶Ø+&ºT\h»ŽÅŸÄÆ
+¦Ê·íf¯,¡—Ó õÀ¦hE/µcý»‡¸@ HúO—ç†=­HÕ)ÜÁV¿ ‰Ê@Ê–8¥£áUVV`v‘½s ãôÇnê±Àèjª¨ {Ä€4P21”ë‚'D™U.P£Õ ÉWQ—Ó;ô·.¶¤‘kn»ríT!•„Hõ$e%ë¢tXyeSÝQóîBU *F÷Tp³N晑FPºl¤ñÚߪz,`dIÔDˆðÃ]T3ØQý¤mƒvã¶\ôúf5ƒÑH-_Élöï—|›¶|wñ'>î7ÆûÕÝÎà+UÖÓ>Û¸šÎX¯< —5ZX}Ë&<gKÚú$»} g2 ¾¦W ö)‚}Yý0¾@h”ïn‘9w­~ëì?¼—þÈÕØ~<ß´œ@îG„«ò.'h¸Ašç=ŒfqÁ†mßöÝý{—¯÷¼œA‰ðÆ$½ \üŸW»/±­«Ib¡·7H:m@¢ñ™DÄ:¦Ã¸}D?ÀbÄK¬¬ÑcDØBO¥fA¹}€Ã6†TýiDØÕÐEZHÊ Ç]AÄJ&âÎoe+EŠ „m2'Îz‘¢œ­ÕìS\nÞ9‰tÛUgYµ*i\Kª•BË
+<yÁº•®¡e¨:˜ðŒÅTÈruJ50w´h4ÄzeIÍ Y÷%2Vͺ µÀËU3î,³ï¦AXü0™ÒŠÆ3¹T²˜Í4ñü0±Tâ€[e¾œˆŸ?çgD &+¤Z$’@òÃérÈÊÉÛu]ͦÚÀ¡ÑJX›¬÷ ÿ
+`Z}=bF„c„] 綨ê…aN£=0á*’žâêÿ
+À!‰LÑZˆ.7öÌtpè㢧,Õ¨¢:•A ¨Ã
+]#Î5üF2š*"×a a€z™ËÏ
+ $úsþ6¢i†êÙIzì±ê š¸¥‰@æLNò iôÀ9g5=¬‚LAhömɾ»5ŒéÅSúƒÅcnUضF›¶˜Ã
+™$>kCŒ2W°«wõñ^æö‡§ˆ­j•½´h$Äu\°# 2êrñLq¹ %ü>Ek]®=6™«|Ñ”Áé=p`‡ iuJXÈG[w÷¡T²¶LZñ#¹(­ª€N숌%,€˜á·±È®ò•0Kz1eÊAê1seÐ"2Ùh3c@rIrOAცIUu¶·PÏýÀâBQ‰
+ûÔVÊ[®YkøãNÛ©ãï6.Í°ÄŒã-:NK:v89ëõ/ÿ
+#vû;%|NàÓÈ»›e
+½ªêmZë¦ÿ
+ "†ªÌ'r‰ ʆ ɺ¢]eV‹©v®Ô «©†Ç,šA‘ÂF'p¡Tg]ˆ“Ò1
+ŽEŽQ­s-
+$ä$á¢Maª‰y¿‘°M'‘ÞR&î=
+¦÷Bm«9ø0Ó–.¹JD ºDì !½M‘Ðyà„ªŒŠ/¨[e•Xád*Ì3;GCž<&F!VâJBOð~à•cd¯/z›Õ©Yu*Fr<2Èâ¾Ê¶‹ÑcÎÀIêÿ
+ØÀä¡¿u{xè—´z HÈéáà0[Nˆá8€ä°)6¢»˜V ¬4$HücéÞˆa`¼ÜöCª
+ÍZ¶\^°ÅPæÊ}C8צ~VÆWÏ(îB}B‡3¹W0uñ×Ç„@YYsNgwE,êÕÀ&='¯Ó´:\rÜΠWIû“Ö½cË!á†zq)G•–&º%y ŸŽÌÄÁr¬ã€—]Ãî·pR—qýº² ¬ Üù‘œ@Ã,GUkÎŒ(”¸ûˆZÈW“â@úá;‹R9÷W[!ñÖ› ‹»¨Öppcà‘È&„]hrþ;ÏâvÎ'{»‡u=«ž\p¹N¥iäX-¾Ý„Cl& 1ØKP£äBRScÕdܪ¨`m “$å´ˆ€5áSÆo¢»ƒ0Û[¥6ä3'ëÒ?–à˜@£JrÞF_q"
+1Q9„jÅ«oê©·Ûº­­[)!椎£(‡*3 î‰bJ­oýµ;¦¹õÄYMFv”ê?Î5ÏêbúÙZ•&Z$i¸ÁÀ9JÍ=¢©¥­}²îûJè–9ÇÓbL¦ïVD¡¸Î.K(7ÚÕìã•,¦»î@û²Añž˜™EëdX²ˆÜ;ª÷ª¬‹¤ÿ
+†rÈ×LãÕÔ–IÌŸŸ”á2Vq–*èþê§Õ>•=øà£P†~SE5³¡,#^¾88¸)SiZ<7qîrŶô⧻ȶ´g 0^¹*ÉNX9eêY/
+SÂ$µû’¦Ò£×—Ánê’q蕃ýÎÊ°X
+Š#©YuºJ…2 ôÏ$˜a¯U $ú Ú QÓÇ,ºàL‘Æh¢³
+uÔLýc Œ‹¥äˆd̺ÁŒÐã#´å<°[WõWâÙ_™Çå_W¿Ç®Ä{i P؀ɽ}K¸e#L‹„Xf# M@ø|Wšü^G.ëxT~›k³QÆ Ïí£4ªnlÛhÊNg)tyXȘ†@§‹Á<‹÷öèR¼IÌ䪽XsnóÛè=楢.{\¢÷¥äp¹¶öÞWöûxDÑoä+r¸ÉšÕ|ýÏ# BŽîúþ]Éü©HHÃnÐ(Æþ'ÿ
+7R:½m¦½ËòïËx¼¤ï7·)·»¦
+ Å£K+*ÍKE]’¤èO–$„²IWÝwA.‘Žt UMLé9çå‰u,¥t•/ \®Œ
+X~×9ïŽ
+T),tÔg‡ãÈR²c&ÚÈ%Ô°ƒ·8 ô?†- €
+}4V6ÕÅr~¶$Ü 4Ë”“çžx`›ªÙ"#mU²Qº} ÿ
+œ¦Gž'%Bì§Pþ=¾(-ö0`w^¸h²NFv*^«(*5ܹ*Á’pGýN‚(“šf47‡oš2XÛw ôz³
+
+“Øq}èÊ µ„¦
+ÆGÃÃ,#T®7:@<<;þŠ­\G¸§l>C<Ž
+­åÉ!¼=¥ZT³ ázÿ
+ÁÕ«Ûêf$g(Ó<I‰z(„£´½ôªU *ÊHU ”çüç"«ŽBÔF®˜†0IÌÓ ¢M]Ê탑F˜VTþ=C*ÆŸ5~ƒ
+<ÛÁ‹Ê ¿Ñ?oIÅŒDESäÄÌ&=éBz
+_(˜\Éü†fµ&V»~
+{I˜lÁñté‚ÜôÕÆ©±
+® HðÔ}4ŒD*`@Afz³âc Âª §Ä‚TU¾k’A'Ã˩á*Ù0Yjö_“wÎÃG?‹Ú;Ü7wãsJ]—õfev¦ÐÜ…”=F㌯VE‡—“#›u%à‘m¿dÈ&Óé†è©‘æpª²I'¦ (妔GL6UÈ
+z8Öðh®ž#/:£kry;Ë   öâ`H9ÎxfÚ¹4C<‘1¢å T¨•Ê3Á³*Û”jÀ7Œî‡Õ ŠÇ¸›FC¤Å ×,d?Ýáø`d AðW®Tl,
+œ‰eô× !Ó LlTÙK×}œEd´ñ÷z©ÕÀ2Ä0€$Éé… SªyÆO”UºkÛª{¸|³»÷>ÇÛ>3ζ»;Gdkß·ÓíV¬¿©pö‡±;‚Àf;zF¢$d.UÌÜÉÏqI¶ÆË0¼K ÌD ?í‹!f
+QC¹tÚàpD!‹ë½Î:û<ŠvúL2•h"FF5g¹ê
+yÆE$ \ŸQ”Æ_ž'N
+œœš-.×E=О v-]Åþй…±³þÓ¡?ÒO\ºâ3g0júøþjLj2¶™þ=þ?ZNG‘Á»ôÜ´ö¯( .àJï4 4 æ:àã–3„‰ñçŽ{d²âÛiÈÓéÿ
+÷rm乿Åù K5Îw5„™%™¦N;j™d$¹ùª+±uˆÞ[q… øôÄè¤d«ê¿D~Ëþçð?i9\o›r¯þYC‡àñ26RY?óÜ5"I9H-–G .9dòEÌFºØýßôÿ
+C½B~Û[U?iÍN{q[‡†XgºA€¿w‡×^ªÏ/›‚X7•@äz9¨$[åv_’»¿r²þQµÛs7Hƒ#(#øcÑb‹E‚ùŸ31É“qªÊfvm¹yF$ªmt~áG.Šx¼›ʬÙÅEpçb±RH•õ“gøap˜¨Ô]Yˈ€  6íãÕ.V["GúåƒÜ«J%®v®ºgD’©œ)1º>±ž
+ *¨$žƒÄÀJ24¾¸ÕÝu<ŽG­õq“ÝåÀl¯pMÞ¢:°g!’@5j²¸dbH—…ž¿º¿7á_$àö'Ì.àÛ_Æ{‹[_¸?þ;¬¦•¡ÊYI1J\ˆ—‹Õz¬~ËšŽvWúx®fÍÏ.ÔÒ dF´’­œ¢1è;—Š+æÑ·ú€ËN¸Q(.t@n*;°`I œ³™éˆ1vGÌJRÎ×°Ûã…O
+·ƒÜ¢iª'–Sµd“Ny¸ïNˆÿ
+Àkg‚ 5Ö5Äd{ÙÚ¥/hs ¹Aáãçƒ!—B{À«^73™ÚÐ
+¾ýÕ¸® CЂ 0œÆG  UœYeŽBbïó^ï½Û•òëËîüª¸ô_˱®¶ž-KEJÎwj¤Q|d1Ñò„îF_ZfEƒô¢¯p‚µvâ-•·zûB­¿nͳ»vs:të‚‹º¯8Çk5_è—w` ƒždéˆw5R"XÑZ–%ŽäA–r'0¦Sü†GÉ>6­OoÑtÛâœÞÃػȮæð¹nûM—QÅãÞ¯T梜šÀšÙŠÊƒ÷.xyªÊÇ7ÛvcŽB]ìuÛM‰–ïsú‰3=]
+À–‚Ó
+µñÚó¸¡r$‚L.sùk‚•KÉ“ih×ôB¹
+¤Î@å4•3“׌*ê†L¡›TÚr­Â¶) £A"TäAŽ‡ -ª¬7ä;Y–@‘"<1‘Æ+[—ÙS‰Ú¸Ü‹ªæl[¹+e´•z¹9ñ›ZçÒùûLiˆ„êzvuc. °^æ£[6¾)jRŒYÂm ‚KN±Ó,9g¶ê’ŸøßÇy-ïÜ?qy\>#šåS—Ü/^7¿»súPe©Â3äÙb|ÏoâFQŒHu‘aóY<š¬ãÝoù¨fGeõꃟ×L“ÒÄc#Š,çŸø‘ÚÇ€ëÉ7âŽK›=’óØÑ»®(ÕÝ]†Qéì
+H$‘¼Np†™æï*ÞOnÝÐkù¬ ;eÈ–2
+<Ì“™3€ãñã†;A'©7'©íà©s¹³ådÝ
+ì³»]'¨Ç:ãWV
+JÙì>Á̯¸Ž÷Íäq9TñÎÕ] —‘Ël¦Ö.žÚ$¾qà2’
+;ˆ\äFS€Å)_à­r±âŒaé’íæî=Ë$¹ûfTƘ°$©²°vR¯´6Ó0ÂF^#Ãu"…_•Ì»—È{ìÚ¶< ¨¡
+,  F,§Î[¬ý(„ F2#nEOäpBIf,Uý&†Ýq ¬¥( ÃɈ:
+]„: 9ã¶G4ˆ2ƒµT­,K1… —q2D ¦sëˆôËš$ ht.‚b+?ú|†2¥“+ŠÉÑR«€Š„”S–^ ËŽ²ó{ŽÉ0¨u¥Ý9¼žógîrÕU•QOEu%*k©BÖìD±¾¬s8˜qvš.åûùÌÂQƒt¦‡õYΈÄçÓ:ë€ÉŒü8\ØKÅ)Û+ FÑœëžÊæbú«-™Ã¬8^³˜>¸nà«2”«v^šé*Ã7cžs»Ä ¬öJ&j9ŸoÅ5_5,²kVJ‚
+Çq‘›j_\3Š¥î(ÜÕ8ÁŠ(W@X+  Ÿ˜˜Å¸
+ çñíá¿–¯o V©Â±]Et¨bÌv–3&3sÏL(ýª¯Æ¸ÌMKylÀ~?T³ý‘ H.šÉÇ Øå‰J=ªQ9ùH3–wTqã’ÂK{­°°ÈŒÈ‘§Ó^¸‚\«PÂ@`¨Í[‘$–=|Ž$9º3ˆ
+Ì2šÖèB†~=—oYBªP‘¸–S™ÀÈØ'B4%ÂWîeHe®Ÿ–+AîW„c Ö*õWR>ùÈÇùáŽá!šTMY}·%UYšÕ!
+~1.[¢LPâY³Œá¬bYª–$,ê…)00 Àš«"ãt=H1"*%—¢¹¬œÈ”œAÆotÅy®`¬õÓóãªÎqOÑauZË)`ÁI0„<£ÍV]ŽfCkÓ·Õlq¸¢©kVÉ-íoñÂŽIZø8±¥‰ï_¦m¿d¹>£þ>Ú…û‰Û8éqíêQÓ¸q¬Abò¨ØJ›BmA¨õŒ÷ y.Gÿ
+oì½ [¹-§êydãã©é÷Xrgƒ–i‘v~ÔY_úhb›oŒ:[qОëɼço‘WÊ»¹YÌîM;†ÐŠLÀP4UCÅåD§Å—„÷..ùîÈ^å‰Ý»o;³rlá÷Jmâ÷ »‹b*®¡Ô@"T‚2ÌhC0˜}žäðÎA z,æ¹€$‰>Y~8tK¬ì˜öš.‹àŸ_w«{wnÝÙí¯‹Èå~»¹Ýìq£Y³ÙAÞ6¯‹e…ry>ÜίûWµngá¹·‚æïöÕÅt¾øǤÌað‘5+7.(Ä°.†/z•ª@¾± v‚@‘¡:iÓ(ÕD$DOz ;
+7îðü± !’I“|±Ä20£Äêñ×L@*^Šó= 1ôĺ`•‹?¹%sûcð‰é‰©G¶^¬8þêÂ$¹âEù ê¤÷µ®äÕOµKYX³p÷#ûUR7Êa|ð'ËmS¢7»–aظFÝ´K?HãÀ¹Ar
+’#->˜çF
+‡r@%²
+^ƒF©Ñ$ÑQ¬`Þ­géøyc…ʪ¤Îz J:ò,r%W9g)Ä8u"Þõ0 ¹”4ƒ!¦$õÈ5ÃY%ØÙÓH6
+^®ã+kn€Z«PX¤»64ÎÜ;•ü¸%†DH'ù‚¾÷IöÁFBÊÃ6 uHÁíè”$ÿ
+Æ þ«ý>]> 2°6û‡Ô}AºÄ0Î ô8­6+c
+"wLé§ÐáÃÑRÏîP%¥~«BŠïG Sï|²®¹bÆ8*²3J./Ø£¶N‚TŒç<ç9ñÃV;z–íóOð¸Õ_Ë#“Êz·$«:‚ˆv.Õ½D
+ÕrÔ Q!·g9H?„ÏŽš÷.–&]5ÍávŠ{?¸UܽÎû®NWköœ5¨]–ûŸko“Íc=p.Imˆà„q ‰<‰/ƒªÅRö •Û©Ž
+Šk46Ý¢g?,±ÍToBÊ»UL“+åžÅ((ÚNÍÝ¡p”¹ì‹‚2¡ÍQ§10b3ÓOuÕð YœŒ„ ÿ
+1JD°LT›R
+h­”ZITíûX&Læzùa[uOÜhv»yÄúøáD+p—Uå¯r›39ñÄ
+dAÏ^˜ ¥«Bžñp=ôÑEL>Õ2¤5ª`YÂnŸmÆÉ>ÐÂ×®"RNň~ë¡íæÃÆDJ½ëg¶æ$~Š£MÉaW^§‡‰ñÄ
+† C2ý½Êìý¤öÑʾµßZo0¢DŸFšç‘9=‡ÇÊÊ2mµ_•¿ûgÏø÷'ãVŽc¡æ°vÄC§Ý™œ™`~XŽ@ó
+Õ—¹ö¸ìãeù«ùóJ[ÈkëjìVq°©("uƇ`|„÷ F"â«år87ð¹·÷O-ûöê‡ =.™‹}Û·©U ²Ÿ,lâ2 ‹Ëò¶ÈÈú,•f[<²>º#J,)å$¹P䨃*²Lt®tA8ÑÔò+z,~=›}Ô0ÅX0Ó£)#òÇFOQd9qí$ª0T­
+±6Ü‘Ó<tiª¤ež§^ƒTï@pK€Ù…i,'89â¥æc^ª¥¶¹
+Œ`ƒ ©>]“ƒ6¨cj´“>'ëfDku¥Úûü?Ï<z9cjÛú~M~åí3²Ô‘¹Q9àÙà „öLMn¶ø¢ Qùeï¬
+M›ì®¢c%SP20<0Àh‘*ÉÈø²-ÖÕi±xÈS‚¶;R®C:«Hw
+ 8“!›"†9L´C”Ê ŒÃk>˜ãUÁCa” ˜`T…3¶u Œ‰È<±Ä)DÅæqyœ”¿GéhK=«ìÛeĺ¡^:êoVâô‚z` ‚;|Õ¬QŒ‹Š uðíežT£L™H!„‚Ѓ傽ÐÆl\%Þwç,&HúõŸ< Šlf⪶±;NÅ]ªíLQ™ÏȤ] €j߸o1&LøþxâQ
+ïe* AŽ”Ë0¡A4•cþ@,ýYÕ_½ØÂÑÙ96ò{Bh¾ê½«Y`LÖ€3=sÁFE«tìÜ|Bõa¡!˳¬Ç³qßY"°ü³3†ˆ²ªÂe¬ªywí£RGžU¢»ƒ‹~hLÄ)e,güθ°Vꛧy¶ž?jâw5åñî³÷+ñQ‹_O·´r«nôN‡–MÍ€ã„r äÓ_@³ØohR@s¤n˜Ç,q€]ëI™ª/ñWáTÁê;½E`Î`H ÍD¬±Ú^]»~ «V´­,[nS½s•;ŠÉÊ3ò鈔è—‹éÛ·‚ )[9¨Ü”…Vpl¤¨,ª 1–Ðtœ.A…]Çy»v¶·En;OéØ«mQ%bs®¦Nªå'´Ô÷έMvñ˜²ÈVûŒçŸA?Ç ¸d©Dƒ¸ÛTòrU4îÿ
+~Z~ÈŽH¹¬+èYÝZ“!F£>±ã…nÓ” 'ÄjÉ.C…°(bl*¤“+ŒÕ§#ã â¼ê–·![ÝðýTQi
+pæ$Hë0Š½V‰Ä&= •cÈbì‡LäLmŽ£ð8dF¨Ì‹ÏÉKØZèhB
+§("K«;DÁÏ]rÇQã©?E·ñ?’Žwz{ÒöþqzÇè¹Õ{¼{=ÄjÁzäLn‘žL47Çm“¸\Ïéåv‰”‡‰zU{¶ü{¼üŽžçÏíœpü~ÕÇ~wq†UöxáÕ Á`Xna“ˆÉ–0`u QÂöìÜÍóÆGÍ.à¹þEÈ‹îI#2½uóñÁÉì‘
+úC”ÏË"]VœY1PWW/b¯õ‰Õ›M ç80
+‚zèpè€KªÙ$@bìj¯ì–ÐhÞ
+©¼Ä+-V+-S’’ø Ðœ
+Ül±r$N~xn.-d#muW
+H±ž
+epÄ6V¥Ž&. UžÆº¥ÜäÔ+F–P²IÚgÒè8ÒÂ÷Rà7HÒÝ´d#Z40ÑH3%A`Ñ×ÿ
+<~W/ƒÉNW죛C­•_[2XŒ3H‚9‚1] l®‰Êti!Uas–Üä’ÆXýNdáÑ“*³Çº©Ê®,Fã‘È“Ÿý Y‰T§Jj¶QçàpÐUYÅÈÌf¸&KXD ê>¸tSj­nÐ{{w®÷ÝïÙMõþ¼Q a °÷=¼ 6ÙŒ°9!-ž_ä¬qeŒç­ünjS¹o~ìv/|k÷»öOŠ'!>7ƼÜ9WÑɸÐê=ËxÌõ1†ÕOñ¸y'<`Îêç¾qðàäÊG3W¨øþkŽz×Ü%Lx œ9º¬¡>ŠAo€fzuãˆ1dèI¸pûhîñûEÖr;ph¢ûÐTì¹z™8\úIÂÄKVéóÞD Ç­’¥}§ØÐê@õð8è™;_^ùwì/nø¯í'Ç¿wkùGmæýe•·Çјò¸® •÷«û¶¦\baçÎyv7æ½Ç;Ø1bãzæW
+
+¯©û~@pÇ…œíÕ…Kô”´ÿ
+Ógm±Ì%©·ãö¶µ7¡µƒ‰dS¡Õ®<®ær㋆qÄîæC¦„:xø¯ÇýêÊlä°¢Ò¥²_W¥€ÈAǧâ>Ê…òþq©&?B²]í_K2I¦-† '#ÅZ‹(÷SßÜ(Ü=À‘¸¬ú¶ÎS8x•ŽŽ«p¬;=EaˆPÇÕ¶}3LkˆuÒ"½;2«
+ ƒ$ÌÎZb7—­”ú@Š9/ôA˜ƒ™5ŒH5C(8V¬æh#1瞃Ü€GTC œü K:ZˆgÌf4ÄŒ)·åqnìéįƒJsxü‡¶îãî7½evªªSí–Ùµ
+– Þ¬òŒ •î®’%Š‘ õ®Œ–âÙǧ“W#•@åqke6ñ‹šÅ¨º¦õ’²2‘†¸KÅF@È8ÔuDçWÛëçX;U¶ÝÛ‹KÛ_¶ä RŸí$sõÇAÚª9w•zÐì?¥¯’¼þ_2®={iKköÖëÞ«‰K^šlÛšÖL1^Ÿ„ȽˆÄ€=@hY*ËHä]úGcÅVcKZ³ 0¥”¨ñÃ"ê¼ÄI"6Mp¸\Þw+ÂáÔÖòùMz–bI
+õ.›6‚r^cÏL*ªÆÐÄ1§ëú Í¿{Êç*ŸSbbÖUóã›n7Oar @ݤ
+¿§XðÓÇ¡ ¦b7
+OÍ»[p&°PÌ3n
+ãI©†nÝE,gœÛñÓâµþ=òëñÞçúþÔjšì©Í”×jm¶¶­½+)%X‰ŒŽc<v\BQb»‡îSÁÏ=¬²+–•%tp·"”Ùȱlßî¾òÛ‚•R sÓÏ roû&ÂC"††¯¸»Ù‡u4ø¬·ºÄ÷€ ¦À$ÎlÀŽ¸ ÅÊv9Š‚Ïú¥ùWT\š*5Tb±r2Îrž w*9q/À‹]”ÑabAÿ
+Æ ?oùya¢j´ðPÝõ%¦T®’br9åŽ9—!•MŽZH`Až“¨Àz ¢<S!¾Uü+ÅÜ+žžB†T¶¦e`m``ÁƒåŽœgÕYÅ–Q
+¨KšžÀYPìø¨\.ELkRå x\˨»“Mðøå摬$ ÌÎptÂdöVâbÆZ¡ã0õÒÆO‡å×q„xù‘´••ÌxÙà%Ÿ Ï&]7Á8¶÷Ž÷Wî-ýËZvëÛ°žÜµ¾þâ±ì%âÕ9ÄgáŒîNòFÕé=¬qöÈg-Ó·á¢âí©ÜƉö’L馎2ø¬ì¹"<¸\~=vÖyÉspyi*¶•ë±œê0ßLétŸì@š»}U€ºû“úfPgS‰G¢˜L’£Û6úïÎ Ë!âpÈÅêù$Å®‚Üw'Ö¤ ä`Ž7K†pÝëÖq›´º0’R×ÆqÂÀßUà¬ÚÉ“¾X‘5Þ‘G­13—„ê|1b
+–`nS´±W
+E—}Ñi˜b£%
+nPG¤ŸPŸ<lJ«Èâ&ÍôE=Ó”)
+î] >†$‚¸IÄ»|öí5ªW•ÉäÝÆ«ˆ¶»p8ö=•TO¦¶·hrY¶Ñ1á1¯zíü£èé%³Ú;î
+rxȯ–R²@"¥¨ÇtHÒ Ê#,0w$¬ì»Vœã<ü|°H²†58«Æd™–úFX:¦ «4«1¾µejȬ†e¹ˆl¤˜ðë…H§î¬â”^º’ž%|¾U©ÂâR×_{
+ë­T»»éULà'!ºE™?9d"M:“Ñ–¿"çøíëU<…níZ·½e2Pú{hâAqÕ†‡í=p–Æà_þ]<;ûÖÜbxÒÚ%æûmÐOx¶PsÔs1ãÁ “™œÊ·S:⌃J—í¢»Š{¢Ó¿óMñ¶·©ä»Ä3ó:3„Ïæ6o‚°3€âïñ@óºöÎ]©Ç½T…j¬ö›uVÖþ—Fƒ [‘qä?ÿ
+Ì óâßr]©YS—5PNŸ†$¾ª%†2c¢aíuVedYLhrˆœvô©q€.,k¶’'ÖGXœ"eÖ—QPÚZÍ“6Áû‰'<ç\$«ØqÍ¯Í ¸“T3±
+e
+ÍŒŒüíFTâÜUÐ1Úw¦r"ç† Õ< ‚;:k•ÛíáÓYæUgë•.¤²íMˆuœàÆQ‘ÁÆBTAèKy4øƒ¯_¨E ýÓᶳÄA øduà XQ/÷—ÉTìe0`%L@“ ÌÈ
+v`F¾Ž,%•O¼Òl] VÓa’ßYÇM>¿ÉÇ]z|5V#s#¦F&:ŸË–e_6x‰ +÷¤
+£˜9ª-{YJÑ‘˜ÎdxY„\,ü“ ¯r*¶Uîc`îmÄ’Ž¹˜T ,ˆe7•P-á"qÒÕuää5
+H•¤šH‚3ü° |‘NA©t7PŒ uXÖ °SMW‘àtÌD`t‹/˜‘#¦"E ÕOö »ªwîvKü¹åT½½÷-qÈÞ=£.B¯ª5 ¸¯’1Úw¡ÅÉd™«ÓÅ?òÿ
+ŒKD4±‘¸Ë_<. \§ÊL6ö29tF)$¢­æÅJŸbŠÃAˆ'9†#2|16:®þL(ê :·ÎOñ-Ä B¶ã“KxfëÏz"ˆ -~/{~ÏÁ»‹Ùܧ;’¥y|øõ*ÁÕUµm4Å,üQ’`αs׸h¶8Üïëã1ÄZRþSjÿ
+±¬’b02‰
+c]‡Üíí·~¥+Õrû|¾=‡ûw#Õ£§PuS˜Å\¸·y]Ž„h¯q¹GÜ‚<ÀÚC·Äªs©ã%ž÷mrý¾Áº ÿ
+Ÿ+_òéÔwÿ
+㆙“à'
+äb6¨µ2)
+DƒJýÎ4ëÜPà3@K8…Ú&I:xç‰rGÍM{~(w‹ªc[£U}d«Vþ–dC˜#¯ò§0­áãÉÉÚÄiù÷õüÅÑÝNݦY„ÛM~˜¯) V–,&5
+Ô:;®÷ZÈ™È&ÌLgŸ–)RËGçºý¾ibÛܤ–“ œŒp³.ªÔb x¡5€ºrÊ4ž¹ŒäpÂ÷µ’Þákh¥÷gH
+¡íh&$éŽË0"N;Ûøù'–8ãü¤hÿ
+÷Yûÿ
+a¼´-Ž«Dâj¦Åƒ´°ÚFDøøtÂ<Dš!Ú}Õ›pÉ .AA3è0ƒ¢·5]ëöéà‚U‘É%•CÖ>‘‰ŒtG‚\ÑÕnCS€LF‚ç$åŽ6MÄK³¤¹NêÁé ˜ƒ–c1L.YÑãà$.÷俶ý“±~Úü÷Ÿ‘p¹|Îïe•ò;
+1<®!LƒÜ‘’°Ìc"<éO!ÆËÝr×0àâÃ%RÔ=ÿ
+­dË3à||0q)3'Up` „5ÿ
+ Ç ÃÌã)W˜¬È$d3!ãˆbÈ„âöC°nô€vžžÃ
+”©ðÌÅ´KÔ–‹ @úd†__ g¶é²ÄeH£µNª-b^‹¢Á©éž„c¡•Ë  ÉƒšŽ¿e;XeÛýøtáÂj¬ð²¡w$¼æFgÇýp×UŒIuê}D«O„9Ÿ·/<Išèâ­TË)(â
+6DAë>xdC¤H²óœäŒÛHÓðÄÆ”A IuzÝê[ $¦õ5¹•'0<²ÀË7MŽc С=dfœDœÝî$:µ©Z]m¼$¼FáÐƹâ"5S)h ‡^5…Ü0Rv¥‚v–Ô‚|À“¢l
+w(irëžSç†*Ä2³°¥ÈF£W‚&Fyp4ªéD=V0ft&bq2*#+×:¥&þöÏïîÛ·4lŽ›c^³„‚j¬Kmí_ÑPXUI!HaÔf <£(ÙtdÑyMuÖË<@.¸Å•Ñö@9‚=Hf œ±º˜ƒç %ÚOLóçe,êªZ¦÷«³m•æ¤LÈ=Ž
+ÝÙ˜,
+œñÌ“ûÓª†þÕma ÔÈþäG¯=1\ä«+°ã¼K‚G^ô:-$ŒÎyç9ùÎN¥RË€ JŽ@ÚksµI˜˜ƒÓé‹1’ÌË(š[PfHÖ$å†ʬâ'ü©ðCW¸±]­¸fÑž^~š:L±3ʾþFË.`^ªÖºý*Ä €ÀÊNx€
+jû3‘l
+sÔgÏXÅx‚5Z™2)§îª­
+ci¯Û#î-žùÈeqZXؾ‹_q(ˆ3Ë«éÓõY|­ÔÞh¹,FÛeL ¬k#¤b° Àº¾# vÝɺþ/òþ8ÿ
+C¨ÞWYK°z/¡¡Äé× g²¨ä]F^´_íˆÏq|¾¾X'd&]Êõ Hô–”'òÌå†â
+2mk+ª‚ð§âOCüpÁU^t²{Ù¦Úëf}Û¿¾3}Ç4öÄkœà£ß‚§—,"]ë¯wwÕ:¤2…°†Ý ‘ ê fFXl0n©Us{Ÿ¦àkU¡Æãñø´‰ÈNL6XèÁUÁÊžAÏÛâ•äQ7YisCV¬6€’Hð1VnØÁ(£ö²Ì¾æãJçm‡ÔFJ$bŽL{å]þ Ã(h~ISØ_õ,T©5Y4ÈàF.6\—¡*·àj
+„
+ºÃ·ûVrXËøàcÕ2y6Š6PûTí! ;[¡ Ô³–Åëe¶ŸhdZ IÎ ó™•‘#*èˆyZ‰M®ïMb*RĪ™
+4øbaeÉ)0&ƒè¡‘H®f|pÁ^rU•
+IÝ
+þ¦XüîG‘;ÞßÆ<.4ñšÃiQÑw ü±g"5.V_3læv ±Ð;ýP¬ãÓ')^­cV)Þ  ¨S¹“P¦r:>a% b1‹Òÿ
+—²©*ÅwFá1”ÈÇ18 ¡ê›êeup{)) Ö3#/È熥Õ}áÙ·mÎ …u11¤Ä≠ʼn ¡Ë]ØE(Ô7‘þX!T°|­ªNâl` ,ª#kOážÌ´±ä±}w&áî ˆ
+Õla“ÄíÒýµJÚÊl€} d>šyk„H2Öƒ‘ܼû‹3 Ð üð²ÁX†éE[e Pl IÜ$ÉsŒºOñÀJ•ÕX„Ë¥PŽÉˆ†Hð1¡Ë® IÐJ;[¼)­?÷YV²`“Ð~
+hbKzI€NDŽ¹ý0a"@U“•Ø®I=
+@‹·
+moeÔÙK.×"7uA¤}pØËv—TòÀ@–¸×òMvþOyËÜ»çûoAb[JXxû¬toûˆ¦6±Ý˜‰jm‰bºíù"ñ·J×_ªnæ¿n¶Û颎CÝÆ·³‘PµP\» ˆ–,Ê·ôœðSƒê•ƒ94ÃU'î>F}y?†;D 手¬ær’–çÚíUu
+h{°Zë?øë`)9(Òp@ÿ
+ç–gíð9`eq›TEIƒ–Ørœ*AYÇ *®•-€ ŒäJƒ—Yü<0bÁ­K½·Ð ˆð=AðǪH6=»Ð”dB‰*?Ï‹ê©äkE¹C3¬‰=:à÷‘ŒŠÀ’F½<Ç\3vˆ==Qo<-”)¸ÚkÝÊ÷U@îa•$”Û´ž˜"åÑÊ1 ¿{õîîQ_ëM«ÆÚ´k-+ ­csxÆ#ÔŸUÞ‰“í¯_
+<b!÷¥;_Ñ›Æù9gËpÃÄŠ¦`õF{Úëç9³Fšç €ÃÄv†U¦L‹›©Ú2P¹ÄàOUÛ…•€$¢ÎC_¦%ÊÌQ+
+ˉbÊï@d
+¨HOLårÌõ8Þ€À^+$‰bFÔUKž›+ ”‚˜Ìk‚ BQ6^ëD‰’ºOåƒj TôÁ(u<žW#–y6=¡³ø“…F6
+ÎNDò6éÝP=‹‡òÁOilÆõß$IÜD b'
+¯›4K½©ºµ7*òÝr:Çá‹Øä`°3bŽošv®EvÖ¹å$ê³ ÿ
+¦²ìLo‘é
+Þ²ýÀ)œ¼<µÏ
+ Úf?)ñÀΩ¸(@ K™v•´ç0çY Ö1Z@hµcÌ1ê—{äfážg¬ø㛢3q¹ÏzZÄip@|2ðñÂäªÎ2•êœ²Rã—–9h´ðc¢ÉY À±!cÓ×/
+Ù„šŽà¾¤Ð‘—8á7Ñ¥¶®ïÙ’Rr¹,œ*cì®wU}yŸVÓ,V‘7%_ƒ;Dxkãù¨Zž´®ÖÚVÀ}°‘ŒÖdg¤ë‹pfç”­ÛDZö¶⨳üÿ
+øäÚOÏôªs†ŽÛ‘2ݑקøbÐ V&Yy|Ë_‡VͬðÛtøëã‡@W½fr&ð¥{‘¹@f#HŸã‡²¡ŠD„­ƒk¨´$°ƒ1˜"zaRvWc·¯n‹RŽÚyœk»¥×G‹X ± Òó#ÜÎA‰¤¯eì¼’'<ååˆñ\¥ïïØÊÄ–wjH>=2Áˆ›¢–W$_½ë[[k²’ÚÃÿ
+7+Æ„« Ý×)ƒ‡Â´TsÁ«Ð¦_“oa 䟆,…GÔbCQî%.@
+Î~˜µ‚oÊïE™o¦g!‚ÃÚB"WLÈÈD $Å–¦<d¯a*²HÍê^ç„´GCen'y+o¹ÈJª‹¦ðÑc!
+þ¡¬ƒ:ã¢j‡) & Þ©Qe¨
+1`„£#94…‡U–®Cí=:ÿ
+U€ðˆÅ"†Ñkx-|[†Q’aÏòî#õù-™w®Ñò’sûßÇû==ƒ²r®qûM÷WÅ ­,°— œóÁ`„@%×{ŽhfÉ)B;GoÅeì S9tP5êI‚F^xnâê–ÀÏE-_pë±ÿ
+·“;DB@ww¡Yf¦IU˜1
+
+WÔ$üpጓ¸ü»kÞªdË Ô{ÛAÝuÌó¸CŽË] ¤,°R ýÀ}¾81tU?±G~Öø(µBXʧzB´º2ÜÏ1ã,:¦ñ,\iú!•±@Tu|ºtÌbvW ®
+0ò:âL^Ë·l›JýëÃk«{`¨Q¸3àt1,n¦2?ÍT ÆU$iž¸l ÷TùšÂ‰îåoÊh­xkÅäq*öù–fkÜ»p«R*¹Bγ‚CB†F9(bÄP÷þÉ
+•Ô+]õî/r–f``‰€esÄÃ)ä£/3€Ö¢¿Õ^ºô´Íd ™ ®Üú™üpó>«8ñå íñÕ9Æ»´?k¸óíäÌ ªýV†—«Ô.kXÊÀÆÐç .ôZ„vϹÃ
+9NQŠ“ÅpAû
+¹BrPÄSµ=ÆÍb2#!:ç¡ðñÇ)$"ÖeT |yùF&«úumTZ
+NTF;ˆï[T|§“áxœ Ün"fUOªÇ=ž'Ãæ+Œ,I•_éáÛÅlC܈qù@ÿ
+õÛí±cö¾˜'?–ˆ‹”u!Ô1Që®|G‡ž8ͦ/×TÏlíÕw^áOm[Ó}»–»Ÿs´ÿ
+=v5ÄVªYT|‡YòÄú¬ŒZ*käÕ…'iaµ™I½DøxàŒ¢n  Eö›£q­ºË=ªËsѱ3,I€
+¢mFp3=qÊI25ü’­êb zž?ž Ž¨Œ†Šmª´+²Ád¢³@ˆ'Uü01s¢<Œ‹Ñ{`œ³1å†$î_«¬ã%ÔÈ•c›3È럆8‡_ÇœDRýµY<ž*W:æs'§—á0ÑhàäIœ„›SÆWAfáê%ÊÊD‚ ˆœ&Q5e³‡$i¸‘Zõnä»UjP}¹;X þŸž8ºÐãrcvîGàÕdpªS0îÆv”õÂr²ÚáOt„¥Aߣvûô¯‡þóü£àƒ¹|SâüÆâví[W˦=V–厢Dˆc“Âõéý»w¯¢ûWû0ÆC±" ›‘ÓÃOªù‡u,÷{œvŒÄ–hb æ„õÏ9ë‹p‰ŠÃÏœ8­|Kô?ž«+¹ñ8õsê<>jòk¶ªÞÖØÕû6Ø zœ°õ:°ÈôÃ`<µUy$ €ÂN®ŒOT]ä*í;ágPÇAôúჺ©“•’‘ÓÅXñÑ—`W¨úÈ=gh>‘€8Ãx£ÇÌÉ4…ÿ
+8]_Åî%ˆ˜Ý'Èá]½®2ÅÉ%˜fKyÉ>8ŸL»#—(1×µÒ–#Vʈ°›A;Œú´'H'ÊÓTjÖÄ°4†”ˆ Ê`ùaÑ€Ô*’Êd\ü³µIÝœæÇ2|gS‚ÉÒŠpdï¯T½J¶¯rÖáwvFÐrúž˜¯9¶‹Cs×ëÓµ*wG ™‚`,fO–:«œsµh?=UßØ[‘Ìå7ÏsG¤mã;3)E2Û—dÄ)ÇIÂ=V¤©Ó½i˜|@È·šŸÅeKU¨mÉ Ÿ vâM/B0Ü`L€þ²3:‡ã‹0'U“œAü´ýŸu«³×}g³ÛÈ¿ŒõÓîYÉE­Òö@mP °ØBJæcÆI¡U9˜ñĉb$Š_Cù%7·ÙÒrÌxOÓ
+¤*’Nã N:SبŽ#š{C|éNô7ÚªL+ÏQ™:cŽJ²èb,âÝ{w%w-ä)!g!O¦$‚l›ŒÄ¯!Qº²ßiÊH:}qªìÅäÀ«´†Ý «,Èéøà$tLÇ„Äîz>BQh©8tšýºÀ¸;feœŒº~8¯½Ö€Â$ÛC7Z×SòI:T*Ú© $5šLæÓ<5V ÛZ=»Òª0¬¶ptóòÀH†tx±È–6^÷ gݪÆ[i#hQôlçÃóÀßUj1Ûb\v(vò,{Í–B\ãzÇ¥Lç tLLd
+¶:}Ò‰³9lÌîÈÇçˆ2Õ6´S[IR¤†l„˜ñŒNöP0n^bH%~í`e‡oU46abì9"1ÄÑt`AªWÛ;XÏœ}<ð’Và]3"7h<ð°Sö¸WQ»M<ðÑ ”bnU™FÀ«¯ùøáFéð .ë ZàY0÷uîö÷~U|›©ãPRŠhTãP´+-(3*.Ñ,Ú±Ìáp†Õc‘ŸÔ«  –|
+¤íg‰ož*pøžˆ.I+OÞ½ßû’‰
+“·1›F»|c™"ëCH;.»å¿>ï?,øÿ
+›|UÌr›14AåTfB¨ÊK'¦",» ,– -¤D㊌ezX
+2ÎÏ
+œFªÖ9š
+º¶ñ9™œÉ#9ÃI«­jû;/Åîù#s{yGæ/oÿ
+”žB,iWÓâ®ÃŽ‘ãSµ¿Ë«Ác™…똮 †U ŠÏ€#¦8 žÜ^3r?WÄ^_½C×T»'µcFÛ†Â7´äzàKéDpÉûƒ¸ù©bÑ )`/ÖÈõ ¥V×ë†
+¯ƒÊ$1 ‘æñÀÎ!¨:Ÿ ÄHj¬9
+
+°û‰2:F˜@*Ü¢/ª½{‚¬D’d‘ôðÁéRˆtÅ7¸ÉA‰€g0FDþ8`}PHDÿ
+y^öê9–²ÔlRÊ £,§)Œ<Ćº£ <%@öNð•í*) °dËL03itX÷B;@kø×òM.eávúLA fH1b
+6A8—V4ºé˜Î&aŒiõÄN`]2Z}OáàpÈŸ9zj…ɪРØÆ\ãѲ1êP"Já§]z$Í%\îV~èèSá.ɱ
+`’',üq­ÑI‰ zª—9W‘
+NÙ
+“‘‰dà–Yȃõ^«ÜpðñáŒá~âæÞmÝT¦‹ãœ­’Ä̤èq«é¼¦LÑAäq¸Õq8öñù"Þ]Ûÿ
+88Dk˜¡˜ õ…+RÎn‡ín`Ç?ð8—e
+ÂìT“1,wDÏå‹@UÕhÀYx±TÉcäþ!z%È°¨W÷ÔU¹ÉE+XÑI&MN^ô‰^– ÞWj§ƒG
+ê¹”r—G¼ÕRÅÞ‚]—Ú¼6¿¦`NDg$ɳÈÎýª€Ü{*MÃ5hŒ¿0pPÈéRÀÁú£pÅœ‹€d,ôÖ¹g¦
+\‘©ÅÃ9 E›neÒ„©Èæ2ŨÉÃ…›–Iº!ï°©Þ u‘ü±Àl:¢URÑê¯AÖ#Çì˜À…î=üuqmÀ¾ÇR+K¨2À™N™a¾£ Ž-µ=Só¸ðû—våw.ÓÛêí=ºÛšÞ/m¥ÞÚøÊO¦µ{K;âÄœt%×gÊ%3(¡Ü‰+·eöЧ¤ÜCÑê#!
+«(Ì8Æ`å~¨n}D•U´Ì ÌŒLfn¾3“Œ—OÁCòdî QÉ…sËðÁŠ–Uña1.œª7Xi3
+!Fݱ©ó8dÛ*a¾„Y»¾)ÎÛÛø\ÎUƒ—Îýº,²·jÚÝΔ¯jéî7¦t^¸ƒgVxÜXND™l
+2ñÉs©?4*x'–Ö´m5‚H0 NƒÄç…æÈ®ªÇ )ĈéÛæe,íÌõåøàªáŒ© öÕ/mv·¸$Ó[°-¸”“žS¡ÇÝÞBnò1‡ú%ûK´Èqmt˽’½!_š"œ÷Ø¥«C¶@Í„Ž¤ué€õÁV!À1íÒè*YkÝÅßÜ>ÕE·0HRZ 0>§Tÿ
+Ï ˆe!Ñ};÷“öSä²Ü_pþIÝ{o;þKƒÿ
+©¶ë}®:‚ä’©#Ôd™0:`§=¡ÉIÅ‹t˜
+¯#˜Ô4äG‘ë†EÍI† ”i¯úáદ›ŠÉÚLôòÃ"ä*Ù
+'"B™JD´‘}ĪÈݹ˜ dÀdzâ7–S Kª¸Û‹©Ïiȉï8‚A¢k]W—ÝEWiØò0:e˜ÔgãˆÝ_&V«l¸zÍ”„*HØý-cÃ>ªq ¸±U–Ì"sóp(ŒK¹B¹`ˆÍŒ Ñ|±^eî­ãŽÛj½U­P`„30 ¼j:ŠÒj¯ã–Ф§¸Õò¬àòù”:~›Šj÷Xªñk+bÀHõ@05ÀȇÛòM‹í‘ƒ·Ç½(ÌŽ@PBÏ‘Œ´“‡JªRbP^”ˆÐÉ#þ؃%’ì}S—öÔƒ,Ò=":ç×æ6«xÈ—ŽŸ’°ã\¼oÔm>ÑvEyþ eÏ<ÄæÚQ7—p^¥.{¾:3^d¢ ,Ù :g†‚¶U˜ÈùoÝuÊ@’Ï1
+ µ–˜ ÇñÏù`1–òƒ"º¯Œv?ƒ÷/‰ü‡¹üƒ¾YÛ>GÀ¦ƒØ;P㵫ܬ{"äkVÄõG«LWÏ“$fC…{‰ƒL2”ËaÕs\ûø<“E|.?éÍTª^ÁÙÍÖ‚w[ öÌ´e—ž.áÇ —_§E—ÉË ôùž¿¢WÛÚwt“ÒGŽ,HŠº-`†òðYë‰6C]u_·ä]²¿˜â-ɨwkhÎÅã—õ”Fý³xÎå
+§/¾C õKË„5r,㛜ñUÓŽ
+ÁÇ!IÜŒ ÖfpB`Ù ±‘Bî ZvÌÈDÿ
+Fé.±# %„úcœ²1‚⬈9º‹T‘`ÉG”ÿ
+xÆÔ¼<=ê’5’Ë ,gq’IñD]]”ƒZè¡,‰–ȃþ8cªÛ eJ¸÷ßa†vÚIUY!TI9tq' B8æT^4Xžò8þåf”#)GžìF©ßÇtNŠGÛŠ ¬±ö­Q¡-
+KÃîÎgé¦6³Ux® €>)•çÙuUÔÕÊÕjÔÖN3¥$H7^Žh²Ï«’Ü{ýÂŒ¥I$ç‘ÅøãpËÎò9Ýbnxâ‚Ä™°
+õŽ ÆQ›º<;vW?‚_{,Lªƒ˜ˆƒ‰pl¤c ’SÕYUhÎϵ‚Íd õ?ü°¬ƒqVpÈB-nˆýóäýþðû?læSƯ‰Ù*4ql§Z]m-iµ½öP ­,D¹û`iˆv¹{«99ç.È
+î1äq°ìr5EÉçûc"K®ß5•bp¶HqµÈ2XðËOzÏê¿UNU¼…®®?"Ödã©®¥cÿ
+Ñ®zLxøâR§i…•Ý­(ðzå–£ëˆz(f4(jÎí€
+§AäX­^ÅÙ¾MòžEøï•Üy\‚üŽ?oã!±¬j‘‹Øµ¯ÜUÉð¯—,!æ—ƒý–‡‹›3cÆ Õ¼5YíJ¡—R°@Û»ú´?Ç$âŠe‹ióSXD,ÄÌ©0Ž@Aé:㤠SIwUYåcsH lN…TÈKÓUë DY¾õ#<Ž%§eB¤6`æXù}p& ¢Œ¤ˆ©Æ=bÐxê¬R×FÊæjÉrÖ0¶“Z½:w§@’€]¯Ü£‹ÅnM‹JØ”¸VmöX+•-·q I
+¿ÊÄD!6ò‘~ñãûtXAŸ!Ÿé醪A΋۔¡
+uÍé8÷¥Jʈ¢wJœÄt'Jˆ‚¯'w¨BÄ}NѹE§’Õ+ŠÀõ.ÖX'¦ Àu1ɵÛÁyÑ„˜@ÁŽä–­Ô¼±Ü¹¿¿Ž8Kª#Œš‚¼v :ëŸ\s©ŒXŒ-tЫŸmGã…êГPtTbY
+KH-–c?®±vêš dÏ D»/ºÎC*¨±·0Q
+ Ô(:ƒ„˜
+M{”³+9`»T™œtÏ\·zR§cl÷JjB›#)9:IàWè´{xåv^kߟÔm¢þ=Œµ×i5ß[U` h+%X‰Ôj3ÄäŽáD\|¾œŸ»»î…J¢$‚ P
+‚f`€|† ³*’
+*`®\#2î :‘×à ÝU—)µ©¯^îÌ„y¼ ­­o÷WŒÙØ*Ú^`ÎÐÞ˜Ÿ˜­š¶ºÞöî6ÆÜæ:Š?÷Tœ•JÙ3ƒM$‚Â&O„b”ƒè±H´K½EuT¦úÅõ­ µDj©ÚJFìãëŠÓ«õ[<pÄ8ò›öј”)z«.—X¶-‰aŸI¬¤uÎp¸ê¬dÇÒ QÁ«¿‡TfTö«OY!r1>c@ë+.Ü“aCen©‘î­‚îl¬äW¡Nx(Ž—QÊ×ýBµœ¡e¯éZшooÔÁ
+E™9au?5`äX1ïTض°G‘¦¾>dFT‘‰ U9Ò,>ÌŒ„)32rœ.0êœfM»~j—ÑI±[ˆÛdƒÄ‡Œâ51Žbn‹|ApöV~ÙÏãUG>ꚺyAχ¤Z½·ÛL6Db¶IÐŽŠþ<$4ˆ½¿Eµ_r/ôˆ•¢Ú›Ëï±=’ÃÓ¸ç·AÓ Ã*V©<¸Z!‘ƒ‹«öÜ É$1&[,ÖçžíñU„ ÂMëBÂ6{GŸÓLWÉR®b Ñ|c†×Þµ+3ØÌ«ìªoŸ §2g3€îµx€š ôºýõðOÝÙžÏÿ
+®êÈY€c´ŒÀ`øp2ÆÁ<Ǻ½¾Š ªº°Ì
+É:­ñq1Ý}Ÿä?3ýœæ~ÅöÏ‹vµ?»ôrٻɇeüs¢($ç&˜Á†9o¨§m»ÏÌãž.ȶöÕݬ·êãEðÞE›²È瘌mF-eãòäÝB©Ç»€‰Ê^mVÙm”‘Åd}‚»‰XwNåÛ"gâLM9†;ÃþhoeoR*VU†ïuæC}9@ˆ :”¹Kp ñïü•…V¥ku&âÓêXÏüpaئC ˜S½“—ÂàržþçÛëî\f¦ê׋e–R¡Ý
+WlÖCMlC¡"X‰Ì›V0cŒ $8è•®ªU‘ù$­†ð£ÔT˜bÓÜöTÆ0šÔÝW õŽ8åܹ…-b„±ë é,ªXÃP ƒƒ3òÖé>Œ}O &.€UÁ
+@,}:å?^˜I™OŽ(½B¨µQ•«9êÄæ2>Ë&÷Qè BÜçüãå½ßä òžãÞy—|Rº×º5ïú€µV*@¶$FzeÅŠŽÐ(¬eæežA’R;…c½§s9êNâÙ’Oúâìd–T‡™ÙQ“*3è¹xcŒ¨–1ÖȈìa„¨Èœúþ‘6¢ãzötgÖ›ŽÅÑš u038-ô¢ïGÌ TØûddeøŸ È 2ñT!Š4˜Sê@Ë9X«ã’ ™†ùä'Ïf¸acTDM Ì“ÿ
+öq-žÁ^Î8
+C2ƒ¼‚G¤xå€>R¬cÆ2À“ E§Ád*§{AÐdrŽ˜l…U8×½L»`nÖ:`uP !”‹¿ümëÌnúþËÃT` P÷º2 ž±‰u +’š© ƒê~˜àTÈ ¼.à¼Jù[xô_úªŽO"¿pÕ¸©÷j˜Û`Û¼ ÄN6tìSÚ¯Jþ(4×m¯²ÖZ~ÕQ™:d†d
+Ö1…] 'Ç]F8Ò–EjØL°$(é¬âIe
+Bî’:£Ã $•ûU ·½¸îR3õé‚‹”
+’ç7 O—ùàX¢;hÕ\g“פ?Áz#îê|zà®…™{ÛôIÈ6`küð§ª|AÛâ¡e7l9õ$ôÁ‹¥x"T–\ËU`³»*ªŽ¬Æ
+äf:âc CõA8Y¬ZòíãŸeln7¸²;=ÂÓL#8ƒ[ý”Â1 ,ÿ
+ËJri°-¦
+ë=¢êà±#ÒàéHÂb
+³2*TJ3f½Á›˜¯\X
+„©¥Ñ¿MÉØ9†«†îR»¶•¯rÁdV"
+öæ
+/Yý¦5¤ˆõ©Ü¾9– MLñô¿UM䀽t
+@Ê2ƒ
+¼ä5Ý# ø%Oiè-pˆ
+¦FEÚ–,($€2cS–
+Ôz˜úGžzõË#WEŽ4n¨ýÕ»{rÙ»o¸üO@JžÓqT—!fX¦C,1G)œ™Gw”Sæ»Òû·_  ­UWj™ÛcYüÿ
+M€, |ðlRâ 
+ºd •ìÜ^%Ü»TqëvrÀA¸˜ê Áƒ¶ê°)hîÝç½7Û¸4?p®¾â^ŽÞmAÊaŸ¶³›GRxi<µ:(ÅÉÈÙ|¸ßÍÝÞµ¾cÛ{¾ò»_ÅûýßãœW#·s®CHjÜî'Ú$…%‰‘øáœ9‡˜bU_ö)ñøäâÁ-Ñ+¯‡U„x…
+›ˆGk2UÌfÄI
+â¦B;³ÚF¹IóÂAÕWEXØX“³ñËûBƒyUd?¨Û·Ó‘Df2×ktP E({`mŸGŒfÔâ¶H=:­N.jn:iÛ·Tÿ
+öÔ,»u]žÅå/xä]Æ©(µ¸Æª……¹bªØnPŽ­'oÇ2n,ØÉœˆ
+®Èõp‡*¾S×È¥£k \!°UÛ_ûœîIðÁ]‹)­jPûíÉZÉ9î‘–~<s6HÉ
+ [[×ñH¾ª÷+ É0a«¡Xo¡Ç/kSpÈ:0D@#?´ÁňÈN‹/$'‚ ±{í–VÄÌÉôzTý^^ih­ð±ÆP~–I¨àËΧÆ*ò…­À,@Ñkp?‘Å­=Û…Çgj8åÉJË\ &HƸÅÏ&=ëÒàQî
+¼®æ«E•3ɱˆÜ Éc0sÐâxØؾŠ9Y|¬.²íä\l[M’Ìwo2HÏM1¯`äÇ9ÊáÕëA»/I'2GOÇ"åDAŒJ+òl!PÆÜÚ"
+ËwÅ,aWí>'Äà·²âxÑ-y°€Á÷D–Ê>‚<°M BnŠ–¦ÂÇwº Ò…Žløc±’Ki¯U9D@%ë§N÷N/tîWq©í†û[·WcÜœVrjK\w“´1T
+«2Q³f=#ÄxëƒH”Ì‘=Æ
+p>™’LŸÖFà„’ Mû®¹VYK®Uˆ‘àsÐõÇ©žC`‚U£ÂHÝœ‚g,4\À«ìbû”J¨õ"O†É‘Œn\iuém¬Á¥ÿ
+"Âä÷vîSwvÞ'…cÕÌN;ÙW»KŸfÒ„€õ´Tê2ÌbÈ  r"…€'6:.Z¦
+®Ejží—p¸m}ÜîæUmÓHwzÅw:ÂZÜÕŸPSé=rÃbIÕ’ˆŒ]Âÿ
+Gè¼9ÆNL€Uñ+0V*ªw‚NDË\²’­`Ä"]œÃ÷JÙKWµrpä aá jHÂ_p¡ZÂF +¯_’½)[a!ŠúSlÇ×êq‹Q;—Ô/¯F·î˜àq¹Ü»jíœJ‹Û}Š©X ¹˜HXc˜øá
+›ø%9\.9ZÝöج܄d5Š¬Ü@UbHa
+µµ;—mK¬ãûÞ‚´—½!÷) ’>í¾xõþ׃/¤\ôû¬®w;‰ý‘ Ù"“}oñ¾MKe·@)f%fÈéPãU!@¢²YËÌLêc¬œ),î¼Ô±¹¯Ž0©OBš1ê3VÄ/@!Á×Âp¸ÉÓ% ª–=×Ûe¶zžÂK@Ô±ÌÀÈg‡Á€`“”’\¯QP“dN^g×bªK 4LÔl²Å©s @
+¦hîµÊÑá§î;Xï·iXX–$ŸQ `âôgܼæ\@<‰·Í9W/Ú¼
+À±‚† 'Ê#,Dƒ.ãg8æâ´¡YýÓ“¹ƒDÚL¶€Le¯´Fš-/TÌ>«8\®Š!ŽÜ ÊF¸-Ä*û¨AR¥v»fÛ€4øˆë€‘%ZÅŽ
+Þ\ũ׵™XÙA \?ú òþ7%¸ü¤jù[TÀ«)S2´AÔˆpávÓ+Š*]q»3év]­7™“®"ɾ£÷:Òªe&r
+Á}‹ç>?L*N*¬@FTÖÊ5;UÈ™ó: 6%ëeVPÚv³¢SfÂ-Ù¼++Ù©Û™xD‚d$ÕÕy‘"Ë’µ¥mfj UqûTH
+ÎÚ¬UÖvIòð±à|qn0j,yrŒüõ-ñPüd®@![P2‘§Ž†&xAKÃÏXªSÆÈv NÑ  ù sëŠãYjååÈDHÛ·Í ªz¬ É5¯õ/ª ê<Ž;
+*UôûelÄÛ2ŒDIÜú'çôÀreôîmN¯ÑRËÚÀ¯s†`c`€ ŸcC% n "ÿ
+«Xø)hŠ×ä?Ï÷*ñÝ©[ª¹ÆA‰ÿ
+Ш
+ãW:–UpPJ°2!X,D£º,B,Rôçº%Š+ælÉi1Ÿ\çëƒ2I&¨”®ÛæaúÇã×
+%â¬ã +Õ9Ü«¢ý÷pž>еí(Xë ´)ÍwÓ\F c}QrŒdäX_â”VÂu9çÄ}pÝ¥•A0$áú,ŠÜE£r2 G˜Œ Z½Srn,MŠ7«¯‘U¶HEa¿ÐGS 'ÂF–.OãL öFî¶v„î”쟨NÒ.Ò~£a¼Õ>t§§|kaQ‰"ªÖC
+vë'Õ¿wM#A~äȘíï‡î´x=÷¹vae½£—ï­©½èv¬µn!•¶‘*F£¯\'ҌϘYX"xA0$=U¶0"Á¯_Ç"O׈fX™fAud£•j¹ª§t©KÚUY‚$¹¢`g©Ë¸ ¡ôå!AdÓóøMÛ¸¼Z¸KOp¢ËZþà,r×£ìöÐÖ}+íÁ‚3iÏA‚5ø.œ†Ð
+#ðøÔŠ‹î›„—suŬr66X\øÅÁzÝX+í¦IvZŽ£Ã
+•Ÿ Ò6·â¼ÂêµÕ´l­‹Ì!¢dŒÈ01^`JÞáäÈÑ Í_‡âPm±y¼¦äWRS]…˜UP+Zv¨bHQÐN;Ä1EÌŒsIÃédF­›‹îU
+^›=(õ‚ q‘×0uÇ (Æ´·Õ“ɤ°^=e+„a“¸¸2c è0§&å]ÛŽ2òŠRýuøòDä· ¹º¾$Íøk4þ²WYÐ`ààVýÊ®NYˆ h÷ø²k¸ó»ws<»Gm^'"ž2QÊZÞËŸ•ÈVb×…o´° m\²ÄG!‹¹É;‘ yvúpj1ÔÈõøôYŒ Ò^­º‚rë‰É‘ÅøÜ`$Å
+ÖÔ.+ æV›e˜Ä6@OŽÈ
+ †ÝÒIŸçヌiT©äiSUuPÌÆbbcCƒØ«œžfÑ]vƒ½›1Ðõ?á‚d¹L¢ë¶*íT æ&p´LÅÉT{_ûoco1z 0óÂ…Y›H
+¡nõ $€I ?ë‰ÝÕG§fPÞ}r IÔyŒ
+š„Ï‘`µÎE=&t“刑j&á†âI£$ì$:À‚¨œ÷óòצ&!RÄ7îªlõE‹=Iÿ
+…É0NÑÐé
+ʪÌw.±Ö0³bN®K½kU„µJ}(sQ'8ðÓ<p€ÅÔ’Ù
+Aõ6žiãå†1J S]»ƒovæñ»_hås.J©k" -`‹¹‰
+)ÈL‹Ëæa±À6È;Waˆô
+dF
+Ç× ä 2œ³Ò– †¢‘'.ªT)"!º©®9”™õ
+öU},­r²Wr‡­ˆÉÁ$¾Rxè•zꬌwäAÊwt®$$ătU2³&f'ËÁ×n££­,v°œ¤`lŒD•d¨¹†\þàc(N$º€ìGäªË³1›‰Ó1à<>¸IC(ˆ«"ŒÂŸQûg ÄH•Ð`ì‹Åãßɶ¾5ÏÈvUJ×6bN[GSÓ2" 6LÅLˆZ+r8<Î%ø|ê®U,Rî=ˆRÅ`s óÂ÷ÆAÁV=)Â[d+Ñvû ]]eê*X°SöŒ³5Å)gÐÝiC¸KÛÄ ³l>Eø§ü±Ñ›š(–&”°†–ÎI'.˜x*´¢
+ð¥Ø„h*Ã&òëõŸS¢„ØÙÞ3F_ÎÓ F©²ãü¡fÿ
+
+çá…™&Æ ªíeƒDGHÇJ@Ñtq˜ÕÐÁ
+VTªÃÀz }¹å  ƒ_ÑAÜ náôúŒ3s¤l!@ ’ÆmÐO†ºb Â8ã6ê¬Ä¾ÐLÀŒæ
+2e‹Ý9PäßÆJûq½†ÄuIÐ Ÿ ²
+*ݸ’ïû’¯ÌåWWqÑ9GÔè~¸%¥Æã‰KsvñYÕû1î&Ø$ çS‘ƒ‰¥n¬Ë%Á ÷D{hÞ¢?¨çÓB?†'×è‡úu¨ 8‚Ãúˆ‘sŸ,ÈJµ0…4:*&ýÌ@þÙ|~¿L/s+BöeÖñ¿rûçöúïÛŽ:Ð{ üµæ›•kýÕDXA`#QŠ¿ÕËê=VÈ÷©aáž8þ:]^Öú:á9D¬–@Ò7)Ó§HÆ™—zò°‰¨nô¥™§ºWÔÇ^€i‘ÀSDÒHqoÙy­¦º½µ²˜ËSœG†:弧mëû©¢Óµ‘¹rY¶–TÌ€LËžxTÉjÝ? Fÿ
+›Ù±”2±­„ÊxI‚#¼AìUNgÊ%1KwS³îïw;‘o"õE{ 6ÑkYòT€ÓÄvÄm·ÍdãŒDˆ¯pü“Vñ¹1Âîq…¿=þ5nÀ‡Em¥,d*fuÓñæ‰pþaCú:½8ȱxÜîò>«:ÛC¾Õ!…ºŸéäŸðÅÀXºÏ
+;÷í–±Œ˜òñÄd€]?¨á‡‹w|Óßø‹ü—Üy‚Ý”öúÖËYSxUs¶N`…HÆ7¸sÇÆ$9‘[ÞÓ—.R
+GRI
+µMS ÐQ¬ê‡¶òýƒÉ9ã>îßLÆ„è,‘vÕ<`É·s½PšjE ãõ8º¨–@̨¥½6BÉ çã ®1 ŠÉB»¥s Z9.~'M*bê¼õZªÁÐ2zùaB;U£#D¬w®ç ªÄ×\ñÇÑtsG[¨öX±Fó1Óóϵ‘ U,ãÛJ+¸»ƒ«L "èrÁ¹BKÜF;ÖTˆ1‘>3ˆHƒE±òNÚ½£“Ãã¯wâ÷Qouwqí®•µ7þ”ïU+eDípÕm Ça•ØkT|̧ӢSw8ü„º–n_ Qfí©\_r•$ÈÓ1·Ï–b©Fqˆ.+Û°D¾‹x|‹¸ü¥jyÄ¡×vF i‘œ3
+\Ë0—9îgÇYT–@|Q,ö©
+¡ÒNã¦z×´µSwEÚ4T±UkV CÉô™9=C¦ ”ynâ…¹Uu”ŸVYåü°MUÛ€Š·!ìr‹yõH* µV+\ÖHNzœüp!‹Ytç'®|4ít¨¸€ÀXÄ(Ý:G^±#S¢’Ió UуØÎ’Ù ¤ÎA˜]7œi÷ðCdÜA9?õôÁD%ÈÕÑU’¦!’Rbrüp,YÅîµ{ à[ݸµ÷méÛÄýaC *Ýê8Ð`3°íºµÃŒNQ¿ø›ø.³÷^ŸÛž7˹”þÒÝÜ.ø)(xw%AËoHÜ-úd4ÄtÀpe2wN÷˜àŒ€ÂhÕèÿ
+âQÇ»•ß/^y„¥km‡ÓýÅ!”n‰ÚÇùR!ˆ¿rØön'¯—Ó6/ü´`ç¿MIûçû!òoþ¼üÓ‘ð¯–YÄä÷¤¡-[xÖo©+°zZ2;ˆñ0ò…ïú'óxãÆ9!-ñ˜&%™˜µGZx/’r7ï±j?y‘Yü|q¡ŠÁyüÏVAww]ìwHX'ÀdðÁÚ‰D¸uî9â»õ‚âþÓ8¨¬{Ò6› Ù1ž˜™Š1†©׿¹t=ÏáiÚþÙ~bÝç·^½ÞþM?ðô_<þ/éöÿ
+·˜3æ4œTIR7Qm¦Fá =g¦:R:!„×UEºLÈÌøg–˜"ˆD)
+œàªÑm$48‡SÇX#®$·=®>3âµ_£¾Kû?û%Ú?úûÚÿ
+2!«ÛðQú䥷 %†qõ늻ح™p÷Š‹šs,ýU|½ÊÖ#Ìni˜+ÔyafeibÈ·Å1Üù<¾opäsyUÓW&ëË…U¤3ÇÛTôêÈ 104`»˜FD
+ëÙ­f\Ô½ú ³‡L–‰ÁTW¿¢´Õ±ƒÀu(k zsÔ6s˜Â%ŒÊËC28º½´ÕA¨Š}Æf¹j£¨ó€;™TÍ!( ›ý{þ=ñæí–wÛûŵñ{O8×G7¸="û8”ûŠÏu)‘Þ
+VBiº O†CY]ÞÚ‡T$ܱ„퀣¤f0`º«0^º/
+ÝZ 5b·2Hë#Ã4Õ1¸W-è@@zfHéXvæ
+¡ÂïÑ3Û{½=³½q;•œDæqø×%¯Âä’õr²·`R R:b¾`LMjµ}³(Å–3Úà»h•ï½ËÜ»Ç3¸ñx4ð8Ü«žäâq§Úãï3íֱغ 3«Àb]iórG$å(ÄDš$MÈÌ6äJ€Ú™?Ôt‡’YdÂ#wˆýÕ9AX‹+ 2Deôé„ÝkDÆâ̶¾ÀøŸ3¿q¸ß:çr;oÆYúŽo‘}Õ³mD®épÏ!Š<ƒ!ün½7´GCÿ
+Å©}…·z] ξXx2pU¤ d`Yú„éçw.oŽÇ[µÜzì/Ä¡WK,„0Lœã P‰9c©îC—,ÿ
+Ë”;AöÂõÈ+ԊĸÒ-&§Ñ{•m7*X=E8UeçîA¸™ˆ×·hn´åÎ,ßT­Á,j޳ꃽBíY$æ3 åä1ЙÅ»
+ƒR1d™+=z凲¬dKÕÂ|ç:Î"Ê™È÷*ÊmtŒD
+Ù |Çþ‘Ó_ã…+Q^ý F~8à™€] qÛlcH8‘>¹#ªº$‚+ˆˆsÔ™ñœvÐõ]ê’(äl%[`@/¤Fèþ£æzâc §—qj ª+©,eµQ:φFªÎâ·K¶éÛ
+%”žå'vJ¨_¶:ýp©cV#ŸCdJ¹6î‡hS*ÃÃÃ
+Aò$Y¸
+×E˜ŒO ”Õ\Î][{m/·‹{#ܹCfâAûK4ÿ
+¦Ý°I3!5Årz¦€$Q;Ù¾5Íù7àv¥9}ÊôãÒ÷Ø*¥^Æ
+¦ËÒ‹'69 FIˆDÈØ'{~)òrG ÜKWGY]ïµs{väð9%M¼[Þ‹ ®¥‘¡¶:’HÈÎx®b$XVÁÈpä8çx–;~Åg]DZÌT †PÅTLk3– k€-ªlrH9tº¥©få;d†>#Cã…Ê «0Íéø«S[--Ê5©öL‰,DÄLéœáŽ;•I ÏÌÕ’7XÛÉV€!–\³ÀH=B¿ÆŽÊÞWØ„”Ÿ1çŠÓ’ÚÇŒ
+9SÊùx=‹ñ‹ù,ÿ
+•Nsh”í5‡T"í9Ÿ$®˜±²r=šý¸"˜õñÁK¢^9‹¯(Ì–>¥Ô F_Q…ÑX@rtS-Úç 1¤Î9œŸ%~ü¾ÝΫ¹q ©¨±¯Ü­lI‚¦kpÊuê0ƒ&ãͲ{ƒ8VàpQjEÉÅ¡•ÿ
+ŒˆÏ#ç#±O¬” »,Ò~þ¿†c ƒÖRQ7*J¦ªdIL±ÆEÑÊHýU\{®m
+wŒÆÒc®8@»7êšg'r^?té®Ð7`=µÍŒø`Œ@ÈMºÙ›Ûy«Ü>ãƻɮRÞ-ªõÙ[Ž¬0F0zħ䔡ä˜)ŠùÜ[{!í¼Š¬neW‹xWD®´pEêë³{–!
+аrÏ Ùæ~©ØÂ* >ÿ
+–ѱö£îY‚<²º¦€ZëÛ
+Òf2ž‘‰ˆ'.Ške‰)ý@01 ¬ÁrPÀ `X£ë…Î4V H-¢¢•$ægB&zøádh˜¥i
+»ŸŠ%u’1
+»‰Ý$d<ð¢l‚ªIf
+¹°˜ü±Ëž´^«
+ë!ÔÈ#YÖpœ£DìE˜¨·ºsßÿ
+Õ§
+¥l.d‘<µÄJ¥ÑÅÀ¯nŠ»¦R“3=P’'¡TöÄ€ 0=4òÇnD1Õ—Cñ?Œv¿uÛ¾ðû#öîß3ŒÜ´±‡6úöíáÓí«E–O¤·§,Î)çÊc`µ8<XeݺB$ uî\Ýë°¬D°ô¬ƒ®€ùá°›ªy «]¦¿R±W"7 GÒ0F¨cJº¢="Ôk•&7„ 1ÕÈðÁ“&-tpö^ ‚GC19‘Ÿø %)…B2ÊÌ΋íôµžLzDg™Ã£?ª«“ݨßuˆ™§Âz 3xIŽ2j¿NØ+*]dØHÜ¢GB5Å©‚Jñ@ˆwª–¯íÓúopØûòn,`,O¦#^¸¬Ò7²ÔŽlQÓw×ç§r;ó´Ó[S]vPžÛZ †¸î,ZÉ'<àDeˆÚ¿¢qÎ *)ããø!½ä ×Ó>¬Ï_#€~—Q\Š.Ãà?ì_0åsWºwÊ»
+ðxòîZ³W}µ‰ZÁ ·C㊌ÒÇ£ºôÞÓÁÇÊ%É{|‡ì¹ÃeT—@ÓZèÿ
+R$ШãcÇ-ð$0­–=ÖV†u‰&zŒÿ
+¦­.îÕT®àìÊþ­ÒLÎzOž"NÏ1^ôëþ‰øÜzé®ÊùÒãÌf¶¥
+$å=p^`OE^SÅ(ÅŸu]íÜß—sº_kÜÙ¦ºxÿ
+Hî{¼²ö_õ#ÊãFYJ;«
+-6YJ7´ûEŠkaЂGå óÇHt¸–ƒ )YRw‘¸²ô#X b(n«m€,õ4Êt‰˜±=ת±v’Í° ÖI>8 Å8âMKXX½pÊ3È™8 Y.lC Ú‚6xøé>?–%õC‹kØt:4ÄnDp†ïTw¬Y‚¾}'$ÉqU­ñŽgÅøÜžc|³Éî6áÞœø÷Š9n£Ø¹ÉW ˆÙ²@ÝãŠÙD‰ò­ÎL0V$†ìV¬$
+Cª r*I9·òóóP
+É‘
+ë\Á&[B
+}°aŽmx0È%5S^Ac¬Ç†AFû+Y]J¨·;ϸ¤@S0
+‰ÎQƒ0
+#“à¢å1žrc-@éŠÓ‹+Ð/BªËd` ý0›'‰“ª”G°­è0Ë¢â£UweU:è#(Ï)xA‹”ñD!«¶Ý©'= éã”F©°‘j*¥R7>BbFd d &sª±‹Š¡º³Ô6»q$ ð™ðŒ ‡MÚH¢®ôIû†'(D` )‘
+1KÉ Pëv¡ÒÔsî+HèÃ0‚“È`àºs…ɱíä~ {ƒ˜O¾Ç?SÛ¾»Ž*r" XQ¬­`‘$Õî’å)[2Jzœxã°dx¢Ë¤è6Ò Ëv`GN‡=g ‚ETX§?ê00h ½ ‘˜|±ÂJ :+ïr§fb3ƒãåõÇSTUj!03–`ÆcËüqÆN F‰‚Êh$îýD¯¶d p"&f#<W“¿r³nô«ÖZc(1Ž4Pª _ÔH"?†µWwñÚÎ_Ì>ò›qû¿láñ~-M7r¸\Î@§•Ê¹@¼Jˆþã–LPËÈ1“-Ž¶zØ¥I¶¿àõ:wu4\§&IJïvЕ«A5R!T@•ÒOQ8³…ÌiõY¹d sôB<wuåmŠÝ+²D@
+ÔIíË qVXiqyÄyA,mÞ—öб‚H=F¤ž£Ë䤆Z0L3Ø€š™×éüð­ŠÑä±¥òN€±ê:þ8ˆ¸ð]9‰›ÕyªVQ`eÜ£<à˜1u8—j$ÖU5·Í Dȳ6g¤ø 0Õ’FAAC¶Æg‘6ÀœúÇ„à¢^„õC¸î­ÙÉ Ðkþ8hŠXΧùdré´Bç¸çøô¦*´1dò±Õ =bBÿ
+³t“8 €ÊïGs¬û÷û›]Ê`Ÿ?®BÕв!,\ô“®zÁV U Û¶Ä(ëçãž U*DPˆÕ7¦sÊ7<Ë f*¡É¸©þÓÁä÷NoµvªŸ“ÜyN´ñøÕ‚Ïc±…@<IÓ"
+êT¤4ÀÜA\ÿ
+¬Ò@þ‘”pqj Éš†ÐÁ(Õ‚¥@‚cø`Ä
+L¹!µPkh“ŸXóX-‰~³¨Õwt=Ã*UVTH¸øŒÎ„0ÑVµx3 ñÇUL³Qnï´e“¤àÄYðQ ŒD8øœ5BL‰•ÑDê1Ö<#Ã"†Y$EJ®ãÔÁ'"0íª„fÆ«_¶wÞghnw.ŽÍȆåqis¶Æ@Me«,ªÐÄk ˜Â¥€Hî`d´1{ŽHDãÜD ÀíU™l¹–ÌœÈÅ’²]Ê#ÛÆý%5-ÌWsw#y;Ñ‚ìMš °së>X€ Þ‰ó00
+¹¯^”KÀþ§ÃUpŽg+Œ#u•ª‡_C²Ç¸»l÷.GÄdp“
+HW/®Xé*a3Wܱ'A¦$ ¥'.‰úzÑÔ¹NàªÈD4´ŸLŽ‘™8­Sļ´#·kªZŽÒ
+ÉX‹¶ÐA)#w«¢ë—× ™s[
+K€ÁP¨f‚$ä&g=tÁ
+µÈž)Éñ†NõŒÜ‹LðËqÅ$Lü©jzx}<°@¸‡^_I ™Î$ôI1j©°)v2w G\Id¹D:o‹ÍäÑW'‹U†ºyj*ä&ÑêU`àA"AÊ0¹
+ 8
+ÑH$ˆÊ ²Dæ쮲ÁZϸÆFdÌ
+¼æuMÓ»Ñ2Dþ>†Ùgí¦šÚ·íÜL2#ÕÔ Îž8˜IÅR3`
+Ž,•2$çI‚Q×Í„âÄ:Îãò6ËtIôê¹®ÿ
+&+.b`˜ÌŒ²ÿ
+Û•NŒAˆÎ#®#Ыbó
+`? ÃÕ6Q÷0 u'¦9LB7!;XíÜ{xöÞÝãÜ´rêzÔPµú}–­Ã,}[2‚p¡)n.Ì­Êö ¤î«ôm+™õÓJC+€N@æuÁ‚UÁh˦_\4yBQˆ¶4mÖ½IÄãQ*Ý8ÜNKvÏù€ð 猶îY6„WdîÉH3€3M«"ôH†ý’ØŸT…èpÐX%‡T±41¤œ¦â)UVã`f0™H:tz¡Š‚úŽm0F¹Ë'Á×v(‚yaYy‚Å‚ÌDéú„çŠÀ¥)Eïû%ËjbGûºþX‰Ç¢,9:¨­ŽàLN‡(Âe
+ÌdIîRÿ
+ss=~±€0ª1’ŠU½
+äN@¾x`’\¢áѽ™y܃ƬWk-‹Y°µŠ„¢¹ Oôë‰'¢ˆÁÉrÁ%é †Ô‘™™†,n©>©Î’Ñ—ç„dO…j«,Â’3f鉌ÙD¢ëÁ¤î&Leƒõúz¡ZHq¶b4~8]••Œk 9ù—øaØär‚lh®tGå3†nJê¿có*S¡‘3\Jü«‡&Ò’·„æ¶áT³m ˜ä tÅiVþA˜aã¯Äý’ ”ªZrjGŸ€Â' VÆ>}vÆÅ«¾Æ
+$î¸1%›û³˜ñÃÌc„3€Ý¨€Ìb;š#ëõÇNNl­ñá°8'·zo‘Øï~Ä>@m§ô‡xߧ÷Tr=Í·¤>È?tGLS–Q¿kUoáàÌáõ̆×m¯_Û½b8jÖV»‘21H'C
+¡‰Ü樶{%^Ùv³g÷Õ”
+2-Ü£6(†w%«ãû%yÝîfô°Ê~™N3: 2’å™dèL™ó8d%¢^\.çõV­¬
+X†®
+`Œç/8c*R&•².ËÏzÂaÉ-¸Éüg‰Y•Jd ¦4@úyá‚¡Qž=¥”Ô„ŒóÁY"e”¥¢›=Ç
+Tæ)¯s-JÆawÛWÌœ CY§¸“nîŸv Aû'2Ž¼25¦ÝôŽKÐÉGê+;¬ã‡Ò•‰ŸêĽƾ?^ä¹â Fzu"ÿ
+£š’¼W,ÆÓÓ®UYÌ:•UÐ3‘Ó éG¹C*íÊLjpn˜¥ýNSÐb"ŽVª=#C×ÏnºŒ¨L³"uñÀ›=B´H‘¨ë†
+ÊÈÈê2=pE”›‚š®ªÛˆ9ô÷M¥~À ‹7FØ$ÄL厨½1¶úÛïÚªhã7*Ū»*¨Í¾×§¡KAf& §,¤ÕK†=Ń ʲæ°pÄ¡E§Úê쇷w+;¡årÒ§´š¦ä]ËÉ.A ³tmÏttÅlÆ{¢"Ýÿ
+–?BÀ9™
+gL/.R»+ü^8$JcÊõû¦>F¢žÿ
+3á¡WjÑI¾Æ 1%HÈt AˆMee[+d*ñèlÁŒˆ'ó‡ø"”H=¿å;×rý'®bEÕ³ƒžßqÁ
+¤BG¨¸ü£®“Á
+#(ë>’TDâ£s{lNÓa¯M1ýt‹¾ÕÓ5W,à™åƒ&ˆKÑ€P¢c!
+ÑÝ4 Y¬{|@¶æÙX-m­µsÞN@³ÓÁœ¢™hÄ»ü\›©e´£§¶õmæAÒ¬ ɤg„Q[˜&Œ˜¾ª¬Ê‰C ü´Ä±ž9êù·ðm§“ƹ¨æ#K«m–TÃFfÔ…È÷+¼x˜ÂLzêæû¬³Ý²YÙ‰fmIlä“:ëžS6V6ÜnzþjÎ7AVH$ê8ìr *ÙñÂZüUob±f T† Æšy~X25Sd'¿ì«b®Ö·C¦]gü2ÄÊÁF,’rÎݾ‹#“¾
+Š%aÙ—ûe€•Ÿ=qÄ‹ýcÍJa¢û·æ³â÷ (Øÿ
+PӷઅHÈy}0P“ªüŠhŽ £§ùø`œ…VqÜÁ9únYáÿ
+Y%D}D Œ°øÉef Aät‚wç6Mã—Y×»qm%•«q´©#8"AÃ¥.…zŽ>ãtƒH[mÖÙ¸™PbLt'<ŒøüQãª\©q ÷ Ÿ<UœÖÖ88¢°ö•¤³4
+%‹ÂsMAòñœq4¢e]’û Ýdç1˜úâ
+¤”)þ 3:àIM1RáÁÝç 0BN–qˆ@’ÅœÁ'óŸCj¬B@†RFZ<|x1$³‰ÝË+Àªâ„ P,†A¨>cL°NÊÌ1
+¶×mÔ72ÂgÜØÏ´ì'nè 2˜éøà„›Ê—( äëÒ‹Ý—•Û¸Ýë‰Ëï\3Ïí[[r¸+i¡¯¬¾µµC,2Ý0¢LH‰cÕ3‰8Œ€Î;†¡•u7s.·I«Œ]½ªÙ·B}+») e=pxâD@%"Q3&"š ûr
+®j5oÁ»U!Í–‡rî–÷~eýǸüÛÂ
+’ì ¸Ù0µYœã\AjôNòm
+Î0äXÒT‚` œ³‰ÿ
+Ñdrª£ÙfgqË÷
+TÔu
+|’œª_e”Þ¥,F*Èâ0Ê èg páhK/¦N9Ð
+2ZÕÜÚ€Nlý X‚Ï(•ƒ]¶„½ö†Ö>2£òÃ" €JË´ÖE»ú|ý³—Çãqy<‘^ÎmFêvX–¡Ú³½T’§rœš g¡|X’Ú,\ñÉläÄH8«÷W¡Y·Öɹ,K/§ÿ
+
+/|³æÝßæÝןòßo?»rËYcÚÌ¿Ý`¼,AœŽ+àâGŠÐçû̹r2‘Ò‚ÀQž#¸Q—3ÉýòîÝï7e{ýý³îläl?néÛå®-‰•’0 ,nE/ßÚ‰k+¸Ò-aèÜ˼f¬ÀËIò‘‹0Vv\gñð'_Ä*
+ÉÍ@Qþ8#0–0Èè„¡ L
+%ͽFc8óÃ%‘”`ÀfªJÊ™ì,ʼn9 ¯Ó²IÖç6Aå§9¼W±¸Óº³j…°0¤‰Ÿ TŒäEYÖ¾HB'ÊíÔßè„Z¶S¼ Lºx Š¯
+ø®yÀ¬>£ÓB~‘‹"%dŒ€Ý+}Ť
+­–$xØ€Q£G—MpeTÍl¡³l…¶FF:aRº³Ž$Õ %gb‚D§˜À’õLŒDE“žÿ
+‘–П,HÜýʆÓ}ßNÿ
+&½ÈŒC8¢µ×ûìÖ{a³Ø“µO$œt)MPd;‹‹tjHR&u>xl¢ ÊA
+µ–Šeé,$†*ø¢§¤€ç „冂«ºƒµ·&¥ÈyO„㪸>5Ààq{€äžg:ž£eÔ›•Ï½bFÎ:{jÐï9…Ë3Ž——DP#¼€aØQ#±ÁDæ
+0qUdd14¢¥µîÍ DøàêœD&ö’ÕRØ o àǨ¦º` >©‚qÜÚnÙÁÿ
+ ™ÌÇ@<pI†D%û æzþ8k¤3¨fBæu80PJ%¨‹W$¦Ç¬ûv!deÌ0a˜3œã™ïd;¶ÔP¯3nv,C3fÄœÉë‰mFoR€A,7ä‚,Þê­R° Ñr?XÐá$'†Ê7°I®žá(3ª£)PAË?úÏUA/B® §,wžVñ-‚¸ÏÏtÇ”bC¿s!,Ýïô_ºùCŽ r
+wA‰#ë¦+™:ÒÅÇóûW·rp­¶B‘”ùýpUÂC>ªÄÔjÛ±UÁÝîA’rËÃ,D¥Tx"ïè ve2Dô>Q…­€I­ÔAe'iZ`hêÀ$‡e@…X•$Æ…zùb7.ØÞ=ËϹW{fQŽ(ã"++!5P0Ï]`œ¿Ë !"Œ†¡«*I0™Y‰ðÆ ä{$]2õUúzí[Žû¨AÉI:c£3Ñ/6°i95=Ý /£2A‰TŽÚ]y•”À
+µ³qRË»ÖgQá&z`''
+Þ0"]E–vñMIÆ[MÛIä5‘“’akƒšíŒÈ|±NCŽÛó£ö®'µó—™ÇJ^êÕåoD¶²¬… ¥’ ¤e æ4Àå¨bŽLdâýý¿U§ñ~ÙÞþYÜ8_íwWî]k·®Mõñøâ݇s5–² %SV>X‰‘;.ÅŽYÈÂs¥v:Yµ„c˜1ê]Hüpá BÏ8LeæУqèg`-þÙ´®¹A&gÓ</,˜QXÁqcG+«ùïíÍ¿l¹=·ò¾:UÉî\ûŸnº8n5ë¹-&¶1 hs£ÇçC+µ:­~o³åã
+º±F‡Ã ŒB¯—!èúê¨Þ»EËîU$z’úpØ3ÑTÊd
+2QŸAžC ÀK²·‹8`Ÿ’QªpÆ3S'Ë!D¹æz(Ah3K2’
+´ɵt8ãTG.ÒàÕGéë6“îfXFSÒÓ"_¹X9Ö«ÏZ¬Èÿ
+²è@ÙCÉbt’b1Û‰¤ÁŽÛº¬údf@G‡á‰2@qôW÷'9é˜óñÄ\!ÚQ§SíÚ¤8Dó7&£U« ¹æs㉑º(Œ-ÕRÌÖTK I‹ÝI *oe$8þ¡çÓ 1t@ÕõQîmªJÔ{¡U˜‰iegBHÎ:ar]ì­BL öø!^E†‹«ŽJ1[$ÌD Ž}p ƒèU‡ØXŠÙ&
+¬ÒTA*2$ë…D+9eAj/Û§·©ÆJ«˜ß˜Ý&}D˜Ë¦˜÷NÄ’WãÜ@HD
+›#ô1×<tñôE‹87Õv_)ý¾»âÝ‹²÷þG3‰½pÍÔ%„²ÔdfV÷k
+ÔÛaz ˆŸðÂIe«†LúuT·‰aJ0 @ð8ä+G‹!pYfòj>à( X¦€Le8’æêAD½j Ò'^‡ÇNˆc.WKò¿š_òNÁØ» ··ñ±qßW+‹B×È䇰ٻ•`ÿ
+™$A?† ¦@‚ˆœÌl™?éŽD eÞõ 0å³87d²º¨`¤æ¾~=0,ŒdÁ²=M
+ ¤d ë‰ F•_Kø¹ýªoÛ/Êÿ
+ê{,.UŠ<ºb1qãÚ/Ürf ND›
+Ù&•º)sŒäLøi8¸¬\†Bêõ­´°jÙ–õ ««AÅH‚ž'k¥G8¨z©õncsk'3:Ïøœ@Õ#+š…k+R‰ÞÅwS¬“რ)Ug=¿dµÖJ®yLˆŒI¢v09ýRÌ-´lo´f¹dN™â*é²Î"£SJÐ=¶õ õì"Sq==La£O®m§Ñ-lˆQ˜ NZx L…W@‚¡
+íC½€
+g!ŽX€Å4¼JšÆòTŒôÿ
+€å~'È„‘x<G?—_ °ò,…Ýk_H,eœªŒ‡S‚œÄbêpa9e´]y³ 1™Ç
+k1›'L¿Ç9 aªŠS[ Ao‘ñž¸Y‘ þjj‡;ŠœòÔb7¸b“é€h¯ê'<έÏ&Á’ç ÒVm›ÀŸêð
+¢§<”FºdxìŠ,Jª{u°kT>Ù£PAÈçœ^ÈñåÚj¨±íúÉÈo1ÔÎ}c µ“n*¨Ê£nà6Õ9LJXœq­”†ì¶>)ÿ
+R¥_öÓLo$GR—îö¥î”í×YomKl^-Ö¨[¥'Ûg@H DHœ°p2Úé<ˆâÞvŸ+Óì’Ì2ˆÌý:aÏUL†A>¦ >L¼±!AÁ5ŒªÉ
+ln¯Y•Üä2æõ×nÁzšþ*AûdýCÀâTp5`šáÚœU=ÁÐ9¡’ÅB$6Ö‘ tÿ
+wXœˆ‘—\)º+¾¤AbUK²¤É<ºàê áÂSõ
+ç¥F)úU9ǬHÐ~X ]S” M¤JÉ#8ÐtÃbY$ÈÈ¡µ»P²ué:Nz|p—ª§'“uŒ¥™‰Èm< ya€ÕW°ò'&$„½FµµO5Î$ÿ
+7æÓþ8Þ‹,ƒUV¶¦MŽ¤€%<‰8gxUv1ijý_hõF8Ù06æ ÖSZ†pv·QáqÂEA–®‘>’ ƒê©äÌ@¢‘ýµ6i—:àÀLìs;\ÕymœÂÁœ‰ëù`t(¯bÖÈ ËÌÁñ×® IHˆ$†Eoµ†êé
+©Uäò…†fûmÓáŒü]³2uëyÞñë`Ž-¬Í{P5:?â¾gÌ%›¨ÛÐgëLR^[4jýájicö‘˜úás$&`ŒO‚?sÿ
+ÃS鎿† EÎ@Š§8=®Þà9Á¬Ž5/É»}‹YöëÛ7¸æ!G¨ôÄJL¢L´j”“[nQê•ë‚1u\äÚ;ÕÖÆY²ˆ<|°@NR“§)«‘Ér8õµžÀZÀn €ºD‘®$°MŒ¦ke«OÇû¹íV÷Û¨ ÛÊUìfE%¹Íe+™*Û0 ybð]—@å"”úôñJÖª¶ÊËX퉟ú× ”X*xòÄš»(V\¤ƒ
+¥•¼– X ¬é‹œ,'x‰ü:¯=ï\`rF^Y[ZëÞ/ÿ
+«8ð™Úè,+,O·$žžxQ!ÙYÇ“¢i)„%S/µN™ sÀïªaÃå Tê9¤tŽ˜´
+Í.îhªÕª6K(Ö2$'>˜YI”lkøªò{šÊm@ÍkºHRrå1よ,Å+/šDÄkeêÙA`¤nÎAé—–YÐÊ¡FÖ¸ÌNOq5¢á
+ìÑz~ýPn æDf ê Ó *^Œ‰/Ø*û(©ÆbDA뉌Ý+>;V«xIHÉg\ðe•|nY¬—pÕ‡¤ŸIÖgË ÕX°p˜²ª\nY Fg¯ŽÊheäá‹ÜUmËE›HÄ€ ²yliaóÜ°YüÞ1¡*²T›VaI%1@– ubCc£ä”vÉaë=Ç(œ ¿T ”° H×ÏÄ„‚D¨N¿q¿ŸÎþí<ûž‘Në] ]^Õ2S?í€#éˆÅ…æÌrË|ªHo£–‹.Ñ´ŽCrm‚ ˜iò0R–¡&¢Ç·ŠJ¢ Gÿ
+!Š}[ôe¬GXÁ»¤H˜—WF`rG˜ñòĘºHÊB"†TÀ.&sÐË,S@'ZškT^7 ZRµÄ+(ÙšÎíJƺ2 ê\Óø Ø|>H´m¬r
+|2ÃYVvª’i
+H|–xÑ!šê¼}Â@î&ÃEzûöã;Äå2­á§Ô}.OB“ 0ã‹ê-Û½6éÉãxÈù¾ß¡Ñ!̤pùwqEÕܵ»!º¦Þ–hÜAÔ>2p
+©–;db-Ó_‚Æ}*:ëk…L‚‡e$y‰ÊzàLÑTß ‹½\•&6í#¡œ¼ñW.@jp±J[™}«á_±ßù¯í?És¹¿'âv~éØ6Š{ ¤­üïOž²F<ï'Ý2bËéÄúק‚÷/aÅÉãzò2¶þ#h7ÿ
+¿H–CñÏÛîl
+8jÅ>üÃ09 º“à0L×K†=Ô‡Tj”%h>‘82zy`ÄJ\²kÔª¬€Y£ê~˜ã2èå
+r9˜Ò1.m*í¤á‰tƒÝxíYQ1ÀºgPDÖ3›&cn@GøF#Tzw¯è¸âWp;`–1œÆ=¡ºü9ýƒÌ®•)`
+º³î ¤tÏQ‹^˜^w78ç“Ȇ5³8í¦‰"’
+A‚ÏÇ•äÊ@uXM8‰Ìë'_¦,jæ.SXkâÙ{¿tøÇwâ÷îÕsñ{Ï
+仉È]¬RÅÌ0 0|qO.ä/SíÞ㓉’3iQ —+¹òmçsÜ»Ïuí”»³nfœ+1Es•Êžiä®êé^ô;yÂÞ2p9Øxu–j«g&´.¹”
+§—nH6ºžï·ÝgòUM˜9åჂ¥ž"!y*¬ª±0²Ï,¼Æ U<°ŒÃ“D{ê­^ÓÇF4¼…6€]A" ¨‰Ë¦n‚X" ØwéòÕ,êÄŸl3mͲþ‘©:ä1$…1Ç Iú¥­ŒXø‰9Ä⼊ÒÃ
+\
+@#v[FRºëãþ‰„Î; ò}P0…újô³­R Æw0$D À˜²8K­PŸŽÄ c‡–…èz€u¯(Ó®㉔KŠ*w.0ãòÚŠ¯NE9¾µeF%A0Êc<V%Õé ²`_GÑ‹Ä£‘˧ɼqx¶:¥œ–VqZ–
+*@V¶`
+•­GsX¥åZ
+$wï œÉ!G‰óňªOõ(’¨Ñ;”ý ôŽŸŽ8)£µÂÙìMWëhk ÖŒ­qݶ}@ŸðëŠü™„ éâµ=·õ•F¾ ê¿ãö;ºÄ¿³¯•Û8õöê«ï«y“w0¼ ’BLäOáŒïiõ£"r;w•½þÊ8™!ákŸâËþ1=ãUñº_g %Öl­ÆlÀ°\¼³8ßõ.ÏŽ ûI`RÄ)rGL‡ž
+¤¥€Ћ+JëÌ´ôϧárž"
+h÷¬~/™¨ãobŠÏÙJ©hÎ5ÂHŽîò®ãÏÄEÎѢͶ絑Q=¥T„P¿n[ˆêOS€ˆ%X9œÓ·î¨=^‚WHËüðq€HÉ2¥A¦À
+œ‡áxéÄ®„
+'",¢^³œÉÌ(9uþ¨QC)1Ö$ÆK”ŒUlr©éS³M§Ç åqË´Zˆ\Rö¾ãGrö¨äÙƱ,^7*¿z‹¶™ÛjH ¾#®›mÑ\ãæ"W#®©~W.ÞJqéaR¥;ý½¨«ر ÀKg¤œ†Clä(ÉœÉjYÚhv·ÛÐþxâPˆ½T{jT‘˜Œ¾§Ã]#
+•ÕˆY
+ Nãšë¦Ÿž ”qUåjÔ0´ngÛ`ciŸ
+QSÉ)b–á¢|Quü“̹šÛ,rÖ;f$Ëñ8Xˆ•|¼£9:’\÷§kâqyä3ÑÃ;·6ßqÕs*"Vs˦0[©A °–A¸‘þæüÌVªæ­t9®ÙÀ3­¼!â
+ÇåÔr’A=0™ÃªÕãf“P¡lU¦]dm;ć®CÃ
+ÉWx²•EÇU Ã{+rŠgúGC:â¹È¬8…Í]ÁjR¬wªC„=–ö>> ˜?}ת®«U-Ržë†°
+‘°
+q8kó‹Ë¶ãmAùˆµšÚ»70öÕ‰;½0gÎ:b´äH.®Â&;dKÿ
+™¸PKj¹H ‰CoIÍ|¿†8Ö«£&CÜ&?¤äGŽš
+²†;´&N_–@&DÉ™™TÁzÔý1,,rTRïë``d¹ÀÀ‹+ñ–se½ÿ
+5>¸^Ö¨VMÍ výRæ«ÅEŠÿ
+rmVFWõ,ýÓ™n‡_ピ€$”ˆÁºõ(7[ýÙR:çÓN˜³8e–/"¬od }»F¾3†’⊱ÇUu°Ya%ghõË
+%¨®Ñ¸èU Lz À|:å…dˆtüq)+|ê[ýßÌáE ”»©¬ Ù©ƒ#Çü0%Å“`c+­Fnä„ÌäN¢AðÄZè£&6Õ3ÖO‡Ž:¤Jì´ªå“Bñ©fMÿ
+É*¶ªæ gfà\víD `ý‹•p5—ó¬˜+},·8Ÿî}÷´÷Nÿ
+(³º•Ÿ>ºa‹«P‘“"@õg{ÑZ*:[R«–:È*AŒãÔŸŽ"2ÑL¢ÁÕ‰Úå$°%„¬a±ÈáÊ cÛ& ÒXîcÿ
+9AA,Dý+äw>o+…ÄíVò öÞ¸x¼xk6°kÿ
+·Ž.X%yv-ËZ…@QH±™3ãb#®JNÔ¿™Ê†F¬ÂplÊÆù®œãü_—Þ;qù[røÞÏÚ“‘E–ªòmkI
+j¬ú˜e™b¦NH„ãŒö^Ï‹ì³äq2rw†¨1~eð¸Ìœ’¶¯·ÈBP®`©‚\ZK/)ÌÝŒ˜Ä\.†áT+žZâHX9¢nœ´ŠÁR@fcùb*ØÆâ¹ïÅ òé›tç”ĬaKÔñÞ!®_+„¾Ô°‹<õÏà œVðò!¬—^(JýËà Ìî#¨ò'ò ªßàb‘›†ûÿ
+BýÌc®xw¬R– mÀ}¹Üf¥W}Œ &¬ pØäÜUoëˆÅ‰XŸ£÷oZ…ŠŒæ±ð%ˆë‡ú‚!8¦dT‹~?ŠÃå(ÞvŸH:Á7 †'
+h_q…HÃPrë=0&ÊÆ à]=ÌWET]ìc=2?O犲ȴ±qŒF¤Ý!È6mTȈ¬`?êxüfPYýJ=Zeÿ
+K†Í}ºÿ
+/N§¦$(îM÷*;rw;×ãÖr9=§jš¬å¢%ÆK—DfQ 1L,H°ÝBŸ(Gqôê;Õlí=Ò¾ÝOz³‹rökî³ÇæšÈªËêUk*W9Uu$x‚¶«Ž)
+ÈöJØI&C
+Сûd#Džq:d|pƒ*§ˆ%É ±ûçùâ]AêU‰ôÿ
+•á1e™rð\Õ` ]Ê#“½†ÖbÆ j
+2#9ÁDj£!pÖC`ÖOûsÄ’•éžª²s‘æ8©‡r*Óa¬r,F^;3"Û´íf@ (m „Œø§zfæʆ݃îë>‚©bªå@&ÈV:mÔùF$Ií{¯2ÕíXìÓ`*Š„
+É’0¡Õ;ÇÉ”ŒZ§Á+Æ£‹Ë¾±ËäWƪëç’µ‚À` ˜PdÆq0&ÉÙüÅ,‡Í«Ä{«ãØ9;,*¼”VT±Uˆ ¡À 4Hœñ…‰¢µ˜ˆ8Xß¹(­u² û´
+…ß¿k»ßqâÕÍb§°YcJ˜V
+–/tÉ°Àù û×/Ìv`´×Ó8ÃÄR½Xš;¥8Îôr“”
+¥Üb-§pÜÔ‚Ôgç–
+ƤF‡¯\sQ™D†Ntƒ!¶°’$f¸ƒæ(Ãc ¢¦LÀ
+³œtúN e£u™yÇoßedƒfð•H‚Ö1[,$*­ñ§ŽÅʧmHüzÚ¿mvØY·Û‰Ü2#ÊpŒpœ‹o,á±âÎŒxœ¯ÒÈ
+,m¹
+ª™Èˆ*AÇŸ÷>dá’ƒ˜ÆAÀ¯Óê·=§ ³ŒØ´š}{ì¾qÜx\îÃÄ·ËOOº¨]HÚH…Û9ùœlú‘™ÝV~LrÇŽ¢Å–'¶m¦ËÀUª¢«úŽâ~Ñã‘ÃÚ[ª©éEî5­ÄÎí"qƒ¹H”C.°q-ùeœ_Žr9©Ç³ÜŽ3Ë<~=Oj¶ðQ}Ã埌â¶s°î¥jqAÏŽE›ø—a¿5Ê[ZÕs¨€vƒô:ÿ
+*¸³Q *
+xûYÛ‰ wJ쮽0UesŽÛ %5ú×»½gUɱ*` –×dÄ7,>u£‘`,`É#üð¹
+dh#(é‚ž1¨KÁË•všÚŸUZ=Æ@îÎ#0gN‡L,EÓ§9Eƒ?ϵÆçe®×(§"Ú…œŽ€˜Ä0vE »ŽÒU8gm쥡~ÜÏióñÀÉD`C—¢ë¾-ÆZy•rwmpó°–rqC—‰7‹—Ì66_¦o9|âÎ=;´£Ù¢•—×ëŸû–)XÙ}ÙödÉå·zG‹óNáËîß쥷5ŽfÅ™T™Åýn1Ñz‘îÒ$†¯zÞâ÷cÞ8ïw*‘W6Ñí˜ÍNYOXÅSÂæ¸
+—#ÝŒð¹‹:Käí=¯ãÜåK7÷^SVåB¶Ò½_¨x~ã)g!yováÅ”¨]¨·¿f¾<ýž†ï}ý,§µÐV®fU@œÏòÀûï8KɈ¼»Öú·µO.GÚÊ鯘~àwîåò®Orí|»¸SH¨Ö¶ˆtÔûçs¤â®(0ÿ
+d¦™ëŽ1p™ê
+Äyi4ú|+KQ…£Ó˜!L3Ã ê¼òmª%­b³3¨õú¢
+»•/só9Þý„ò‘ÊšPÔ})í€D¯Ý9é…˜%Õ¡š#¯^©F}¤0’Û×øc£ª'‘¬BÝuµñiR×ÜU°sgc?tÄ’TÄyuNó;_tì]Û—Ú;µ Áîü ZŽoÁUµ´24O¨Ž>Š2á”$bÍ µ¾7ñ•ùuÝÑ­îüÒý»ƒ9_¸YìŽO²þÞŒŽëž}+ד‘±¨éÜ_oõ̼Â$ uýW%s€àH‰'#/¬âøTŠ Ø€ƒ- 믆x0 ºT¤•y]EõDž-¿Û¶Á €ÞÙLAË,"EÇgM8ââƇòû¤Ž[™ˆ$Ãzeq=ÊAÔ¡X1Q*°[óþX\€MŒ‰ ^´Rý9bƒRÙÐå', IÕ2b$y\¨ÜFj žƒ,K¨gQà[S$΀ø*UN+ª/B`ž¸FH«ä–g;ŽâHé>\(Å“Dy6¬å$ŸAøƒ…È–DtŸ"ã~ßÓØû ¿æw+þEoÉ8ÜÚ*¯O'q…âZŒYë+¹Aœ(NJÞxa‰&_äöøv>:/Ýü«µEõ#\}Å~Å R–#1
+nIIÑLýDë0g§á‰uk&@ÌÉóI¾…ÜÛBô8窧êm(ÍÇsƦ"LF¤Ç_ Ä„fÓD·:†“íg¦”yK¥.ª¤®Ãª‰e:þxY
+Ö2dW'Ý {ë]y×ÌõÂ%Eèxaâé_vÍäµN£ü° ¬‘˜[d1…#øà¤NÊ¥ï ÃË®6
+÷ÉÂ¥œLÉQXrÐô#r5— ãnwéÚÈFã'hÇ"u€5ðÏÈW©áAüßE¹¡„Jƒgç®Ú«1–êEàmz€V ,B§ˆ)O,,„üyYšŽ—¬Û.±‚£?< :|òé-QÅgîhË!&1,—²º+ÙÀåÕÅ«mNœÝ–›ÊŽk€ÁZ3ÚHŸ 2,Kj«r!!y iðGàÔoå'zV9 M„*‚Æ%˜
+ˆ Ìé¤b'ì9Æ¥ qàH
+÷ÓMI²dÿ
+»/ür¿&Á¶®Aõ°ÁÜA™–(L#1*$ò}¿Á¾‰ß–UÜ{wÂøÊ€×S/»ÈöDmwÈ垘HÏ3š©öÞňÀuñº{­<ÎIãµ³ËR}ÇÚ@>ÞCQáS(ÅôYSä@äÚ$izR‹é?ïý׶‹xÜlð‹-¯Q]&OÓ\bs±ÆLMì¬ðär¤Q÷7÷;¿§o«Âå·ÂIÛL êþ¯®+ûw¶FSÜC…³—&>4@b¸Jÿ
+Fóp÷Ö5/ô\ªð¬ºÑÆ/][çû×··X…-êlâbZâÎò£Ë&pS@±ï,ª æñâW
+w¨ ÎÅÙ9¿&ï<.ÁÚÔ]Ý»‡"¾/ *¶Ö‹¹ˆXŒÉˆÉ”c‰‘°LãqeÈÈ1ÇùH°Vù`îï\ßwšÖžñÀ¹øüº‘ÒÕ[Ã(zË) Ž„ã°çŽH‰FÅ+>6C/òîa¤Lmê|pЭ)Djb}BD`ö¥nˆv¤Ædý§ÃÇλvÒ^èrÄæ%¼c18-¥™
+$Š*õ5=U™ê¶ÀÕÖ ö¤²ˆLœó9à„IFr N—LWÇE ¬n‚
+éOUÜ|q °§uä%e}ËfÅÒDDg>8¡È‰œö‡°W°d;¤°[mü«n6Eoë%õ":frÅøù@ ³r’Nç¢]bñÛ„ŠžÉ´Yî5kV7ë¶ Êb`áøàÕ)ys¸ÚŸ¥{w#E7ñh¢«P[y¾Æ*m T '/Hë:áÀ5t nê­d✿[SòYœ”z,Øéiƒ Gõ,ƒø`MSiµ’ö²«,I&Dt'XþXR3!wýwë#Ñ cÐø óŒrh­tTF¥ÝEÌÈ46º<ã®:R"˱Æ$ÕüUÿ
+L Ƙ;F`d ‰ì{Uhp«Ód7A>=‰ÏK*9"dKh¹>Ф‘ÿ
+žáÍíü›½—î{TZA
+X0S¤1ïx%(
+€]_ÿ
+^VïǼl&3L„DbI_îý›±vÎæozë10I3÷çE„åœh³³ÇdÒ¡=Š#wþ?o,8µ›}å
+6fÀ º`?­)šè‡$ <¤n+ ¼ðîî÷Õ_2edÒ¾
+)ð‰W¹¸ÍÄ¥jªÄå!Ô¹pVÀL×±` É3€bõ4VÞ…u]O?û™Ý>Û¿ä¸_ûiÛn·Û…Àâßl5µÔO¡ll‹™×ñG rÓù­Üùy³âüËŽo¼š<ã¯5G¢óàg¬å ¦xʆm5CÔÛYssê1ˆ7G‹$ ^7W=–}ĵ‡Õ$É’0 dü“2¬®™í\~ ÝÓ‹Gwå?µ]mkÌåVžóÕQ`,±k•ÞÊ$…‘8™’"LC•Ø£Ì –‹Ô÷(å/ŽeÕðn{ø‹k=λ •‚B9I;IHœ°p‘ tœ±€‘.¡]W¾Gñ®ÉÁï}¿ä‚ŽõÍîüOÒv¾e÷=C¶^]Xr—aˆ
+«,¬>ä`?1å‰ÄNÙ„ü|#&” üüžÑÛiíÜ«»¿êœQµTŠ«[°`,7†õ*„ûcSå‚<ƒ"Ñø£þŒDL¤ ÿ
+ Hž “ŸñÀ‚Jâ
+!^†q«Ú¶RÍÄîˆX•Ôî:iˆ)† ÇÃë×±SIÉ
+2Œó‰Êq$!‹"²zKVÒÓ
+„ Lÿ
+%Yˆ4è‚ê›ågÚ™ `:LNx‚iÞº |™d‚HÚ éþzáLžà¯ewÿ
+ÝÏ«Ç,Qbê·F €G]~}+Tšä’#9 ¿/3Š’¢ÖãÃ|›AÛ꺑÷¯ŒwÙÛ¨ø÷eÿ
+kƒÊzÑøõ:¢Þ«]îÝU\0ƒˆ i…˜¹®ŠÖ)íB~?š½M"ÚØ)@g<̇ˆv!gg˜ˆ µPù>˜V_éAÌá–UÜN”²ð?åùõpO*Ž³sW*Ïj•Ø…vƒ jp9g¶·Oâp†Y4dÝæÞ=Ë>÷®·r[B
+"5$ÿ
+ žC,Z†(Ä0¢VopË–o’FG½`ò)*sËÇðÃ(I!È•;I9F:JÞ*Ñ$á‹A\Ž ¯c•(¬µ†]2ëþ˜†td€¿ÿ
+ ¯(v¡°zC°•Y í“œ`Lرºo¢LL¢ ˆj²¿ ¸ó¸µý¾û8܆­é/K²1®Õ)b’¤ebê bd è!9@¼ ß?ÍR¸#1
+Ÿ»ó#›,²DSµûüÍ,’YÚdgh›ä² “t3[¶De®îžC>˜=Ì”q¾‰ÎÓÝ9]¦Ûì¡heåqíâØ×P·lK`3Õ¼z,éeõ˜ €H'qòdž´³ö)"êkUØ )'pûšc#Ó(Ç¢Ê,eKB¹TŒ%‰R5€ÃqÞ˜\£ºÊ  ‘
+zœyâ]Š‰
++r»‡7G”ígÃ_ôÖ,;œ©Ï""I
+ÆNLŒ#ŒŸ,]‡G©SW+;Ë
+–7~þÔ[\áã&-A×^¿²ù—q{O!¡ˆW0OCÖ<ñG1ª÷߈ wíÑ«q·9‰òÀã–©üŽ<ªéƒq²ÀISê–>1ÑKZ8æÄ™a‘1?i™FµðÅL’kñ¸ù åëÝö=¨½ºë+ªHlÂH‰ÿ
+
+«0.I#%ÏðÂe?N²Z~ù Çø‡+8“Sêҵϒ<1p ]aNm"r)Û¶ŠÕßÂ÷Çê){¸ªHdV
+}C ‚20N^X èñÇdÄ}Ò—Yr°=±èS0ÙøD“ž"l¯áÇŒ9én‰z˜‹=Ä
+«á„Lú%ã÷I‚û̶¨•SÙè£ÄN tIœhOb§‘}—"{ÎÄ(
+$ƒ@'ù`¼.†#sn+ÕI±¾ãLÆpÓ*,Ùmrû_`ãükܸýÌßò ï½y½¯Ø*œz”/µg¼L>ù9 Ö1Ð23 *fLxÆHKÎåâÔëŸh±=5©ڤxþ89ÑTÄwY+aÚJtËÌq«S¤Y“ªž?ºñx]Ç”¼. —¥|®cËML@6PX…ÀˆËº0$:%ñ 2f‘`O˜ô
+¿.â|o¶ü‡›Åø‡/‘Ïøê^ËÁåòªßu}Ð ôœóˆ3
+D™X×ÁPäNNöZt×úki¹Õ,J×h-[i Ž Äé%ÔÂfsÆÄ8]æ÷ð{ìœ~ÕÛv÷§©Ç#ÙÞ·a°/ ÉšÔî†ÖD Uže9§×Åjq}àGXl›ÿ
+ÑWêî _†J»B ñÌ 9õÇ ÿ
+ëägSž58<™b ¬Oqÿ
+%Y–×¥ÍR¾±0fO<FÔ{Â÷±UêÍ]v©”UºE~ VZûI‘ç€É‚³ƒ8ñµh•¾¯nסX3#.¤2˜:©ƒã‰Œ†×D\IºQ,Tƒ™ü>˜Y¥‘ăE汘h`âQ:ž¾mí]üª¸ŠµÙg»ví¥‘ -~…c¹ÈÚ¹DœàaS‘¬áÆ&X(oÛT0X¡œ‹ ˆtˆ¸²«mA—CŽ9*¢ÈIÌ}p¸º±6!ÕǦ`ý#ÏUiuVâò9\.U\ÎïÆæRëe7ÒÆ»+t2®Ž¤`t ÈÃ6CP¢9L”i!ÑRÆ6³3±k ÜÎÆX“™$ž¤áŒ
+À»äÖ%Ö_Ä$q¡kc—”¨Ëë‰<'¡ºl9äy£nõ…Ìî6òl{­;¥Žó¨=—–,Ç`Yç”Ímø%I.Éj™ þx ÏtÓŽŒ,ªÀ¨>Øé¨úc¥ªá—h`™PИÌàc)†Ck©V¦NåþŸÄN
+”SdzŒöñùjÕs+úvR¦A†Ý0A0]ˆ²L bâWè†í ˜œãò8|K*“
+àV‹-îB¤±9m ˆë8ýÈñ„œÔ«ÐvÑ8ü·áºÝP°õ¨qIÚÚœòð8FXn Uî>q#§G½5SA2I£=ÒH:à‘NôöÉþ?6Ú[Æc[ °•é®^X˜ãrÅnAÆ7AÁî¢oÜšù@ñi¾îZ5Ie¡¦–ÆÊö°ò#Ô‚rʼnc$^ƒê²0gÛ"v‚dâºwøø¤Ç!çºtÐƱ€1VI{²³r¬ÛÀ
+àDœ‰èrÂ2
+"ánéÜ_-±¦x¦÷°U¹’8?® “dãܲd{›òÙ¦-m£/=?ç»G^w & 'ú£@zà \Õ;×,ñCÚç™ÿ
+¸\žo3ÇgTâ
+²ß&@ÌGž2Œö‚Z®·e3p˜ù¿Ï.í=‰~%Úy%Pçʽc[à†3ËÃíþØ'“ÕðAÏälSÚËãt÷NõU|šIärègm”³zE„mš74O., bâååÚ]Ïwê…Ø>}ò¿‚wsÎìV_Àå‘ýÊ™›Û¶¢ciFÄëå€äû^.L6äi«£Ïô܈ÖìlBÜøÏîü“ç\?”w!'˜÷{/E„úQÁFÚ€N*s=´aãP`þJÇš99FB/§EõñÛ¸üK9ªlN/9ûtHûu“=ÇË)€.¼¸b …
+ùiî%³º¿'‡Î¼-zÙI
+é—S8ô£!
+“0®
+:')¸nëúJÞ´öÐ0±÷“`¦*À'0:xœ2©Q“i#h"Ÿ^Ú*ß}¥KM K%A-*ÌÆljs¸˜$ e–
+#½DÈ,Á˜W¿½,ÄÌ/Q¡þXã$qŠ³[a;Ý‹NJI“”
+¢#TAP°ÀŒü– ÈüÓ½xØÉö¼Nr4úF$øGGG휮Ûÿ
+Ô«­ª–‹"rž¢ ŒôËôFIÓ}ß¿÷.ûÜy=Û¼òîçw>[›y<›Î÷±ÈÍ™µ$õÀÃ37"S‘‘$’³Ý½Å†3бóÐ~;Y(Éè~kÕ­* pÅ@;v‘÷t&z}5ÀÈ“dXÀvÓõU{ÕYßvÑ
+ À=<† @"9 .‰É·g‰EsO:³oê¹~éa~â `V@ ´HÈú°È è‡<á(€¹{üÛØ@$åÒ0l$ú§»'xçü{ºñ{ïi¼ñ»·êù\;Óî®êX=n¾jÀž=áŠw’pÏ|n,˜ïß!îŸ%ï\ßw®CrûÇr½ù\îCºÛ¬bîæ#6bIÁaÄ!9|™f™™¹H›ƒ#û€îdað<’¯z¿?UaEzë„g>ë„*î€NRz§:x£¸Ü|K –eSø}04]P÷ÎõÇw)rj¨ÌaU‰;DI;WX ¢©‚R¢+€@p àènÒc(éˆ!Hžˆö·%-5òdÚ»Co2@Ò3œ€Ó
+ Xi'9œ ÚËúV(©H*‰×é®Xôä/ÁÊA¨KòB¹×냈MÅ*¡5dÀ gXh ŒI ˜›j*«,§0Ԭħw÷I`”aŠé›Qå5ÚJP[ÆCÀ`âŒEÐÍ÷%õò«Ö£é%dNºñÄÊDüôË‹ªû zÈ9€<pÁ#¥yT%Kí"í·ÇñÏu^‹#’Pi0ÀúGS㉪ÐÄAY…8FŽ}Óe|ªëVàT•K­.[°ÚfyF*Os†ø¯GÀ†B[¤A
+çzë …«
+äG᎔
+ÿ
+y¼®?•Û8á^Žq«ß_mÏ´Å#Ys9í#wYÇNq#¢ŒYf#,bÒg§K2E×iƒ‘Ù!Õë+´–]ò A‚C玭—PUP‰Î}yçôñÄ’à檦`’3Ð`S¢óŠ¸ÔcWYU‰
+O_ãž"‰Ê€ÅN×Ë<üsÇ (ØƪÊï ~ c‚®¼•ªÕ±ÑmUõi¼ŽÒ^X\ìŠÆ"ÅÈvAÞJÇ1ŽQ'(äH
+v „† #Õ]?uý¼îý“á“ç¾O ûg·‘_‹]èܺÏ€Íu
+"º­lËcª’¥Ë¸)lk 2{í¤8'J7^û|R‡k8
+äXš–_Aý¼ý°ù?îÇ~ã|OàÜaݾGu~ç³W§x ½³`¾¤Ðô='¹yG¨5·nŸ‚ô¼OlþÐh‘@ò‘ n¯×Nô~øŸrøguåvNýÇ<^ñŹ¨æRÓ4Ø™Çþ©OLYãçC…î ñ$c?åÚßžš,*]j÷Š–Ì
+‚k§ê¿¤WÙ]{E@Ž=nÕøIº ‡´n H‹&
+ÜD±\TÆ°Óî8 fLÆšŒtŠ~?9ÚJö¢Ìåò}çt
+’'¡Œ Ô"Éí€4‘Ë bŒé^KÀ5«¦`4i#ñÁDUZÃ9‘¡ºm°™1üððî ¢qvŒô3é>Yà”e4fªG¸¿–íZm_f?§uW @ X±Ã°òîäò׋eïã¡­ŸõnUö\”Á&NY`rH‚
+ô£+ÿ
+Õš¬`›×k6ÒI!s9|°²àÙ:#ybhíÛÁ?Èá¯ç«ß¦×ªæ¨ÙK‡­¶Ì:ž¨c&Âã7ÒŒŸŸ´í2 SñðïPU–RH2
+¶ª¬ÈN AŽ¸€$+òË(DH‚ÆÝÙ.êÁ2ÜÊÀ£Aà 4@…‘—š-R’å~¢×­mfpˆµc;Ta|g1‡W¹äI¥+㡯iP3× ª¢ruSB H0[\ñݤ Pþ”%`$’| "9Ž–U¤8ÇÞ‹ê#Àäÿ
+1]·`NO)Gm1j•$馑Ó™ä
+}ë ñÝ8\ŠþÈ¿‘îóg»`>ÙÈ'ï3™ŒoÃß_Ê€ë;åÓqìWûÇñøwz»´¯*Žàµ )Ëâ´ÒdL!ë®sî+yðY^óþ¼8GlKƒ^ù/Í$w»ÉUdTlrÏÊqìøæ•+ÄŽ6ÓAÛâ¹[k³qK´’\³8¹¸28ìÉ+mèùDpÍ Ñgr¹»v…NE‡óÂ¥&*î<`‚©èe•ë9àœºDŠ2+œiÔΊ¢^¨Ûí#5 â]¦ÅXµ>ËVkžFõ"ÍÙƒ+·LÌg‰ “z(Œ†Öjö¢6Ò¶VÅlS Œˆ#BÄÑ“!‘ª.€öæÂ$Ÿ¼ædþ8â;£ÙoÚéZ)5:$^û‹{¯¸ðr\ˆ<'®Šr‰
+Öè.ZIuŒI`º.T{ƒiP6°‚N¤Çž%õF@fS_¸ßXVEô¹m¤ à
+Z¸kcd˜è ðúàvc1³–Gáw~áÛ¸ÝÇÁ´ÓÄî”/ŸX
+}Ú–Å´), ´ ”òqã2 ©¿Ç÷ãŒh$¥yu|Z»•Õºpùl鎌‡4Àp ê²ÀPº„ר\càµÿ
+Í6¢ñn,{£*;*Ò„îurË–&AdÞ6HÆNCÐÑ$ªö¶Õ]ÇÈtœ
+“©ûº1•mÌ(,¢Š[›p¡ZºØ†!ípˆ©c,ÙtËÄå…Ëʬb|” K‰û‡ã'B*¯1”•ôÓ"šfáN¦tË%ñ8'd]ú«KŠÖ[Û
+ƒBsñÅN?
+8I=V‡;Ý2r€ƒ|›¿y\U’0ÛÒ<1 4‰—óy¼ûRÎ]Ïu•U]³’J×R…Dÿ
+wgô µub<  b
+•¦æ(`—á劲ÄËW6DTºÑ)Æ«õQo¿Ç\’⬥ÆPv’HÅiÕ¡ZøåKÑëÕ}Cöëá¿ù/eï|¯—÷ÓÚ{—‰ïvšU7~®ÐñˆúãÈÍŽ`c‹‚½Ç²ð8¼œ9æÒàQ¿ýU¥:®#¸ðÛ‹u{,­ëtÜn`è¬5Säqz^o1f*:ÛÄiñH®Iê'ÃðÃU=Fª-
+õ{Š¦”«ž¥O×M>¸7CâªXUèÌ4ÖGˆÁ…^t½kö^æmâØSÜKÐÂÊÚTî
+ýŠ-{+° ÷@·h(_]’²C'®'1nê?.Y1PDò¯Ù+kÕb{H6lÔóŘÇUƒšcø³2 .µµ¬j®ÿ
+HjoµC+u«H>c[Žp T+Òò_ýàn?p«“ÏãðE­­J¹üšÂƒM—–(k®A:
+Œø`å%Ar¯Êáò»g.î:—ãóxîÕßK‚¬Ž¦XÁgŽ†A ¨*2á”$c ÄPº`r¸UvkøVvúìî‹ê¶Žælqe5V=+X;°I"Fܺà I ÐhŸ4#ˆÀÄ—NïŠÌ,"éB:¡±®_Ìâ7"Wt sÇ:©¦Dj‘˜W`_qA€À<Ž
+ÌË“c ÜÉÈX SLÌ€OÞ½Q×̽UíÒ3]SÚ=´z«'ìb
+–E"±È:Ó<-º§o$RÚ¯UcöîVZÉÖ1ƒÕ<ò–{”Ô¼‚¬¨Ä­6v–€t$uŒ$°¢ÐÇ/6š ð8MÜû—‡mõp«äܵŽEçm5o`¥ì` ³,`ÀÂrdaEkÇÝ ¡óøã…ËäpVúïJlzýú jìØÄ{•±‰S2ÓáÊì±Ù#h­Îæ¯=è'OÓMt9ã®Õ³`…vYÄQqÏ ˆÚõzê›3¼‡
+Ìííç-ÿ
+´¨QÇh<³Sþ˜6Ãxfø¥´˜Î<1.,¸ÂM¹©Õxû{û±ë寞$!“7zÚÞO† …?%S¶
+ 5˜Ä®”Å‚•«ˆÓþ´Ä˜ Œ™ VGÝ1MöÝУdçOX:ÆGBdK+d†ÍŽ p œ$uRZL8>ùc­e4&ªÁý"LÈ,FªtNöþïÉíÖÛu+Muñœ]RÜ6\¥¨p@`¥†jsásˆ4V0ä1/C¢H€€s',1+vÕ jK¥ƒyÛéi#i1ŸŸÓ"r
+½{РíË 58k%Eý wZ© œŒƒB
+üb`IW[…õ
+«¶ÖÖ]cÄáS‚³ƒ”^½ú§¸½Çmƒõ$ŠA‹6jú‚ÎZ Ë%ÅÜ9¤¼ü¾ßdNW½Åä=©[+rxrK,©`˜8@îV²ìEAùü¨ýP‹…]ÕhÇCÓ9úb n‹øëÛÁG#“aû~ó©=Hé…îdÿ
+¾LfR2¯uÁ-e…Hº¶qÿ
+Û”0> '2õ5e—1(n„Œ¯ÞÖ]aï'´ì·‘RŠ,½Ù–BL–Èäg\˜ ”0bô¶»‰ ßIíñ_¢?fW¿~åµÿ
+¢„5­$ÀÐt:`$Ë ¬ÈŽ‹XÒ.½z/”Ž¸€^Ö]—ÀÇùkÜG?“Æâòxt°óU¥Q‰¸u† •õöÄé¦"PƒÑF<¤FQê±9°ŸvA¨*ݸφ˜š¸dB1Ú\×E<Z—Ȧƒe\yÖ¿zÖÙZo ovƒ
+&I12“ :ìX÷HΨ×÷g¿_ŸÌ·“ÂáãSíØ^µ©]Ÿm;²—;€ˆ3:œ$F7
+3Ð d‰É˳* À?†%:ôåÔu&BJs³öÎ?yî|ÓúÚ;uœ»½«¹Üööø”>›,±C0@>ã·,‰‹–Å?8ä”c¹žäÙ%Éã·ƨÊ
+뚸RWrŸbc PdÄb[ëÕÆr  £B(È„8*v“ë–U˜–¢½! ˆ·–²‰ x€Hárv¢~2¥eâÐcT_®%”¥••Ú¢Ù ©:ÆZÆNÔGܲgûMDõúâDTš&»¥]¿‹Ì·Úy/ÌíàW%ë4³ ’k,ÛHiâq¹ ÅG#lI.@<Oýk†H‹)2×\p4\C ÷£rÅÊæÉ "
+Íe^žÞN¹,•9j|pfNªˆA &Ô–"Ê&ˆ¶þ’¦¤8uH·y5€œÔ
+¿^îäµ’¬\¬G¦Lç…Å[Œã(Ù‚v»;qíD?¾½àÞû}Óí3¯«~èòŒ(ï2¿•¾ªÔ?¯ ‡Ô†ßÍЙm±¦Aœ9t tÔb$Yv8¸­¬ŒË”8Õð×<4v²®9ÍÆ
+‘)âÑ
+%F`í¦=G´r#"æë3Ý0˜Å¨Árý¡ßÛOžw\†åQœ‚# #éL°y‰Egñà@i¤{g+‰ÄãSÃ}Õ¢1±– úýpܸe9PªRçB ˆ† è}í9¥_»önZ[M ‚}ăÖ@é†qñÄ4f.—.LÈ”ñ‘EÅ÷O—|Ÿ––¹E°”ä‚6Î4áÀÅ‹ªs÷|óI î¯zỘå~«õ,áœH ²XÆŽ0ôYƒAZœ-‘läXH±jŒÎ"n(™VE—Ыí]·—EOeÛ魯ÏL¼±P<M–—*q«#r<^]h6ñ¸öìAu°û„úYáž «tè³Øcj>²¥t!pÝϺw÷Ý׳Hî E–ûnŽC;ÌÎgy?†61˜Â‡–Ëc&l¢ïbu×ÇU©Øy·|#½WÌäÙO –C7¤µÃ#“.é!g8?†*òâ98ÌYÇÑi{tÏ 8‘«uýYwu~âÿ
+¬XŒ²‰Ë"q¥È„\ƒðÑcðreœØ­¤¾ðî?;»ð»÷ÆûÅ¿ßå­vðˆƬ6ð­æ"<q—4qd„â(Ó½óÛrrx³ñ¨ïêËãÿ
+ äoý1 ØÐ<',I¥Ó1õvî^¦†½›nÙTg%ˆ\”I‰"O€×à!
+JÅ
+ûF¦zy "t¢½ˆ=UÔ¬Z’} HMÙ<tÝÒ~˜“ªt£Po'—ÊZדu—-Š¨9on¥$„I˜PI€2Ï ÉÊeríoD\â €I80§$ߕǧÉâž-WßÉZÖ«ß»ÇÚቬ+*ËIÜZAÏ ”jïdì3hÎOÌxx¯¬ü÷3áý§ù?Áû§Ä8½ãäýÕ«~ÝòG‘om*I"¸™œó|qƒÏàäÉœLI…5éù¯oìþé‡XŒ^AÝ€o5œÜm½(¾K}Ì×X#i,v¨Ì 2= ,‡Îæfšª#‘åÿ
+ IV¤%Ž(’s`g¯B0,Qn굇y@@úŸ,j€LÙ]DV™‚=o¡?äQÕIec´|{hÓ;'gퟸÕüká_ìçò˸|ŽYä›?ä9vZÍ[ØiB0L§1»®22NX$fl½o 9±†,A¤×üû»Öî·ìgËÿ
+°fFûZ Áˆ0zçŽeÂ_WpîÌŠª¬Å‚,À™;D’`tœ0B+**¨,& G†;s]¥¹ÈA$,®£ýpId–ºýågPXøcÑ/ȱÈJ „m;G„uóĺtdäñîãnmÀ»0g\úe‰ÕíÀ¤U E–$¹€3?\H
+Lš‚ÉN`½PŸúœ )Øv’—áqÙ˜"3Ï Š~|€-TÚ@݉9(³äé®w…EŠ;mÏÈ¥ª¬»Ø‚²¶Ä
+Á]‹Ê+ý—%¿ 7Ü:ã7— ‡ÿ
+-áÝ@Cj2oAb÷)Èá,*ÈžÖž¡Ô¦å¾ÖÌÈÌÇHƒ‚3uGúÄ@CKfIÌÚ’O\fË¥‡u‚²[c䲜hpØduK“ÅôênŠ(ws1ž½>˜i*“tz9<¾%n”³×]‚-UbQ”U¬\™c‰‘
+I~<Ÿm˜m%Aô–
+šŸk jY!ÆìÃm:Œ°2…cÍæ³ØÖÅ¿5æ’ê!Œ’?šŒ&Pp´ðå
+s
+TdÈ>œ øçˆ}·NØé¾gxk2A÷ÓÄòÁªÂòcnÝ™7ÈäÖ V,Ys¹˜ò0¡uÓ‰ÚC4ý—wðŽïÛ饻w:²—Y¬®j@ÈgÖq‹î0/¸-hÛ Æõíô×û‹Ïævšû¾v¥ÆÎ {lι9úd'®˜óÙ}¼FDüרÅî–=’ÐÐÔø¯§üS¼öo„piîÝû¸/¼ò?Š¡ïö¶Í¹(SÔœyÎv9ò £
+ï=¼vzîù$Uÿ
+\:¬í‘êq.¹0üîo.Ž?Ë&žm_`ªî]”:³' Ø$ «'4¥l(·þûƒß~À﫵
+_ò.è;¢ÛUv³RZ¡Åb„:©%`‘”Æ*ó8ÌbIb —¶{Üø‚QˆHW·æ¹Û¹VÛÈnQÚ—ØåÔT¢µBLÂ*ˆ
+8U§má¬$-H%Üýª4×ù`2LGÅvFuÐj¡¬ ©ZªªS![h û‰$¹ëåà1ÑÕLA§j¯)%ºfrlXU?‘]gÅþUgÄyü~õÛ­5÷þ3­¼K’'Žêelú¼º}qŸ— ÊOÅzN¸VBCùéÝÞ·ÿ
+jÂgõ*€ÆOûŒŸ-0 ú•bMqíئ{Sühp;¨ïTò­îoÇQÙ›Žè•/'ÜR[’®¤µ~Þá t022±ƒÐ1–ðIÿ
+]Y’”!ºLa0î.tZ^t±DÆ6b²ëXª¡¡%‰9®c1˜ÏM•hDUº/èéR=&\ýÀôǧ_=R²¹V&÷¨Œ†„c¢¯âHÝl&ÚÈ ¹
+¿(OŒMþ‚[¸Ðã:²Jî<Æ«2Þ=Ž 9•\¤´q刢I»SÚ¥ˆë¦[7a¢BÎ(¦À…I1:.Aiaäu¼zD¹“:i…J![ãó'»jè>óçû}ß¿vj¨³¹%oT_RßXKT£J0ÚLÃœÿ
+É´ÈùxášÒÙT²#¶磌HÈ5Ê
+H"$ˆ ³kJBËÏã—CnzO'ŽÀ¡!ZrØN€ŸÐⱑ«{dJ‹xx÷tCàv¾ouä2P‚Áµ˜”õz@3
+H1©ÿ
+Ó~%ñ½ÔVW±w#:œÀ$¤å«*qJÙt›àTs»m½ï‘Ïãq«Sí5VڡиÍàÆB1ŸÈ÷ ˆ’ýßE¯ÆöÝøýBÀ
+\Qfry½¯±q›ã½Šêû’sŠ[Ëä5cr½a‚ª1ò$剦YoŸ•¬¸˜`Æ1c"[®Zݺ®cš•%<{8…ý fõUÙy,vÖÉ´ Èf9 žÔHÉLJ¦ÏÇ»¹V‚͵~åa˜-
+°:AË É1´ÙYãäô$2E·¨§ä‰Æ§mëim¢ÐK©È
+ÿ
+Ù'$ÊE××ÿ
+×àã%‹j¿Pw_ÙÙn'ÿ
+&‡ã^íZ¹5¼n_R˜&5Ž‡ Ü$A%ÚªÄFÐ@£†X¼Ž1¬+[訒<|<IÅÜsÜì¨äã°d¥ü›±ÃA³‡[®½}G"Äõ&? t1Ýr{2«—4›`¤E¿44_FéáƒÕ.!ë}TÂǤÿ
+ÔMjŠ'fá×-<(–*ÄkIY´zŽdçç‹qY™ÑùÜ*øvT´r©å«Ó]»èÜB3¨f­·(õ¤íhÊt'½Ã Ë„@²OÃÄj•Ü€Ò§XÓjº$â›NæÉCÇú(Û­‚¡ 4ÏÊ7Õ3ÛÛ·¯2–îIsöðàòŽÊ–²uά ýAÇIÚˆ±nÝ»®€fÖ&±×!åø`¬’A‘¢®S:ã‚)+2HOœø`,Åꦱ&z q]èËEÆ·oE¶¶¬/ƒo°>í̤! L‘®XÕfP` Iz†§nˆ[X àzA‰Œ¤è' AhvîÑÝ;ÇêÏgá_É«ƒÇn_7ÚCa£Ž…CÝaQ’ÂIË<A˜‹9NÅÆžWÙ@{‡T˜0ÊOSþ Uˆ!yéÙUw3![7 €‚Ãl}ËÒg/C¹!Ó%J 5s
+Jƒë,‡"3
+ˆ"ÊÎlsÇ3\x€ ¸$ F 'p^×#ùâYC¨tõ0qr?‡Ópšª
+±áÄ0›Ú­¯…mTyÝ›ê?Ìa›SäT †fÉ€ërÄ°¡#"‚ä-A‹%ˆöÉ;´’cäøà7U•Ÿë¼]Åí¯oº'iûŸ“ÝjnOkªÅ<Ž=V{V:.¨å[i#ú Ç†#˜‘§ðˆŒã,â ¬{ÙvûËòDïüO’7 ¬í}´v®"¥KU‰ÄA
+wÖm ‘s%±—Ù±äÄqÈ–%þ?—röÇýÏ9ËŽ1&11[ÇþM­»—è/Úþgæ³Ü®iî´s{Åda¼û¢¡i”¡äîPcÒqó¯yÇ.7< „GF£÷¿UöõÌÑ÷l/K#yž¬ÿ
+±3öÇšyâdg_ñ}> çí<|< ‘Æpùo=´Ü[CÜVí8ø§kùo¹|ïú¿‡ÕrŽçÇ͵œÂÀ>¯ðòÆǹ¼±í‡òìë;ý:qÇœä̧Pæµ?ÅÇù2Ýýéî_ oßÏýŸàÅ|y®­¸(`í;¹©È–Ó3–38xŽÃêÙ¬½W¿òcêCúÀnpòˆh¾¿o²É{ÇÈ{ÏÁ»oÈlîUØ+ç]ÿ
+¬KV%Fð¤”lŒ«AòÏ
+sžŠÌ±ú@
+TuíT¸zª
+H•Ccðë‚uZqÜAîZNëÅ4íÙ,¦C¶ƒÈôÇ^ä¡‹Ëæ¸DNk3W]£iÓIÏ®#`*ó”¦@v‡È®µ÷›m`îT\·4ÌÇŽéŒÙ uö‡÷žáóŽßÅí8çw¾5+ç€Ù= ±ÙíôbˆñÇŽ÷õæf)]×ÑÔ½â9q6JÌF6ø¥«ø¿?»óÙ{š7Šmd±lBm¥Nž¡™ÂÇ(@yjW­ÉÆ«J3óNïÛûd¿¶vþDòmt©ï_@t®v’<ç3€áñå’bfË?ÍŒ"`.¹ÇÝjå÷Cu–÷6Ö&H
+<ÀÊgÃÑÄIh­(ò=êÝ»ã<^jßÝëbÕDºn•LÁ9“å¦$ò&ÛZÊ伃tJÃo„v®Ýɳº
+Æ×Rõ\`À$Àˬå,ùÈ’³y\xÌ?"ªù–äd{VX/P4|Le†ãË·+‹#Åÿ
+¦5ÃK*pUÈ´’WÇ®)+ ší5Ûj
+wI^¤Ó
+äõ¦š+„€ MÚ¾4Ðü—öê€YŽ€©' a r— ¦X*ÕÆ7ÛìÐClÙ‚Nl@ q-R¡œ°TK+£sÝ¥©·tle`IÛ4qÓà™‹
+å ‘ùþX©šNÇ]gÅ»‘ãó¸ÍÌìüµóiA¶Ð¤åe-+¦ªt?iÈã#˜Z »H[õî?¨^‡€Þ¦ÓÑ4×Ä tù/ºöOþ²w-¼^ãÚÈî=›˜¢ÞpªQ9gn ‚Q¶!•²óÆtå’u%zh{O‰“_OÙ“Ëÿ
+å›Ó :k¦­3H³A@ë öè“>ZÆ
+D¸*,¼Î}ÐFCÆ<0@QD§ætuû¨‰çþ˜QVa6Òö¸Àëœi‡ENb´Bx’:hLÿ
+Õ¹ ¢ŠµÕcnÚ­µD³A ‰'¦xa˜UÆ)+%–5Fc~˜;W$)e*:€HÕvª]Hg¢?—Ëâ‹‹}µ{¨j´#²ï¬êJ“Ðåƒ1èa–QqCÓà†sÈ‘/óâKÕŠò1ªÄº¸ß[Y„ƒ”ƒ‘üqÆ.®Œ¶—*X³ºsŒµÏ¦
+˯TV]2Ë#áGUJÀ
+°|#¦B°
+¡¨‰d;*ºã—R‡ñéˆ(©S£®˜„`Q~ïåíwmÄL Æý×ä¼N¢…ªUDxF0B?RN‰Åçw.'—Ûx×:vÞy¯õ”+B\)bÕïv“#ƒ¨Z}Ã&<rÅ“mñÒ[K’Åå׶ÓX ÷–SŽ`Õ
+¿l²¥î+©ˆ d´L Î ÈŠŠ«Xq‰Ì nÉÎÝñ¾çÝû_tï\6«ô]¡+·˜ÔGÛkìSZ1óÔ.˜N^@
+¾4éÞ³,°n.~àDxk˜> àd‹°HÇ·rØìÝ»²ßsYÞï~=
+m¡gç ÔiÑ9åßCó뾚÷ÕYÆT6:L±]Ä.èñËédñ/â« ø$A“Ž­Ó¨Ñ ßñûÉV>Ù'`b$}ca-QâÉhR–þ•ŸÐ¾á1žiV¢*ü•³ŠþÍÜ[x¶Àc] «D‚A
+J†e†2J™Ö2Àâ‰"¡“9±Û&‰}V×ã×7ÅGÌÏ?†8çšÜ&à{ËúÀÊžç¼hû…Fcû²À¯“a#>ܬ3Â`b?ËÅg=õ†TS¸’vž‚0âz,³Æ.E½ñÞ÷ÌíÜ„»½9!·-ˆÄDAÎ(s1 ‚ “8<}“ÜÅÅ_ö]Yù¿vç—‘˲À†Y ¹ºÏžYœco€v ÔãåNŽKx®{»÷k»ƒ•c´¤¶ÖРÊ<1s²ì¼£)u]Ç;Osíý߈½ó‚üKv#
+/­‘ØX¡ÒÖVÎH"2#ù$J%ŠÔŒ¥ŠCtXÓÇįҟsÃâÒˆ ›6î2xñ\ÌlW¤âó7êë¦åqy=Ãh¬ã©)3“øâ¤'´w­(e^¿Oºëî­<–vðÿ
+—S›$LÜ k¤‹mÕº0Í®ªoe|GפŽŠëmo´éûâYCS\Šûbðx­Ç{ߺM§Sª­(¡€«ÚpK4‰Ý GIÄUû“¥{AeW|àÈÁ>%Ð¥ÑHÆ¥±‚sÁ±N<rÎì •#ϯ†¸ É3vªRk¬eÕ§ ÁÊZ$ã€þ]îæ_}\~=æxÜEdã¦Ð6‡bì
+¤ÄÉÐIÀNB"©˜±…£Ù’[I]Ð#P€ªC“@eˆ!$•MÐAÿ
+Tßo…wzDùà ÝY–ꫧ5
+ì å3€t?Ö$Ù3Ë^Æ;Gú­¼÷Óm£•Ç±Rµ
+U`™dFQ†ÆeÑO‰ŒÄ±®÷ø~é^M‹W"Ê}űT•6§ÚÀuR`Á8trî©
+¬øc "2vé¯èº?ŠÔ¼Ë©ª¢nf´)¯aa3” N*ç-#¥¸ÿ
+Š¶~¡"Mûv‚·˜Ÿà<ÆlRÞnßg_uãåŒX“+¼›C÷uø×çꛑtT*}ÄFÓ"=&dêHÆô \/˜ûÇ7„¥EÇ›éܶ3ý
+°P}DjzŒ‚|2
+÷¥ŽØP—"5Œ.AY„¢b:©õ.â¤ïO‡«-0à›Ñ4Õ 3DWQ”g€—z³„=
+¯lÙh’~ß1øâÎ8Ñy¾o(ÎLÃTG^‡§Ó
+|V]œºÙ×ÙM
+±X\Ž I9‘ºƒ‹ÆÈq_½Z;²RÄ{Œ«¸…'Ô@ÊH0"ÏÕYÁ=Än$E,à×|¡•'ˆ†yÆ+˜Ò«LdTù«\A¬{ŽÍ´B©ÌÐ ñ@§.}­¸¿D"Û$³°­ÖÌný§Êp¹¾[ÀC;è rîBÞÛ0F@5…Ãns®pFDu
+äy™` hGÃä¬Õ"q궓•šÊ€#Û ä|!µÈå‡Xªž´
+ÉÛ99ÀÀœq­ŽLòVÞM¯$1Ë#×øë®&0óÊV(
+©Ô)œàè#d gTþõLÜkP£©!¿Ý18á´ÔY-å´Ð©Kci*KæwOýeƒ1B2|ל
+ ë»ÇM1! À³¨
+@bT†‘u²\s‹°<d+Õ}cö“öï›ûÊ£áÝ®±Éù%£ohz ›ˆ™âÛ®ßsöœŽG,l¤F[š„Ô}ÇÜ/aíüoWÒG”_»¡ðÐéeô?Üþ´÷ïÙ&áÜÎÎçȤ¿níé`uå’Ïe‰’V‚$Sœ€ÕŠÒÈr8ïíØwÙhcàcŒF@Óˆ¥‰zxéÕ~sùMvÙÜ-·D·Ú
+€‚ Ì“§Ÿ ÇH!­”
+ö’ÀÀëœâT«"“3+Ÿðà ’€ª5vE6×´æÁ”ˆ6†r$‚:N;mAS¾„výUvz¶f#]c].ªÊ`›àv¾o?õ‰W¸üj“z’«¶š£{zˆ˜x™L ¦bÁ);
+€ÿ
+ ê“6 Ï‚{ƒþž’—Ÿ¶„À²3+ÿ
+Ö‚k`6í‘Ôé„öºÓÁÈ–7qNïÀ¨¯‡gÃ0‹FæG€`tòŒ4EXJ{ëB,oú2âZX£ipðŸF =Ðs1Ç3²úöü“uÐÞ€$ #Ïé‹à°uäH2žÔ炙íÙ ?Õ9GŒb7ÑWˆ¾RáhsÊÖ S™aO
+JÊ~T^d€Mƒ#ö¶‡,Ž†IŽi vT~=ÉÄ^e©ÿ
+c)Ãc»ÐO‘¹ÒÒñÿ
+F@äHÎ a‚$…Fy„d^À«-v>ʦ)S;zN“é–:
+Öö„ô ô‚
+;ŸsØ+ö¹6.âTå·Ìé8·ƒŒ{–W?<g6!Šä8t~£•²G©óÜHÌ
+0±Wû£0b,ɤ' k¨Aåó¹œëQ¹v½ÂŠk¢¢ßÑU":(Èb"ѶªÙ&aä]€ ’À6´äcM|±jÂÎËäá~qv{mú¶³s]¿"›cg·Îg bîôHÜñf«ß쓲ÚÄç/‹Ý`PùVÊQkUÐO¬É ™&21–
+͘F$«\~1É1
+‚az“:“ˆØB f4Z}žŠýÍü lF`Uâ}¦Ð8^±áŠ<¨üV߶ÌçQø½ë±ç~Þw{»—Åì|¡ËK¬^wuSeÜ~R¹ S)*$É wuˆÆT9qŒÈ2òµEéeí§ŒJ8Ë¿šU"_vªâ»¿Ž<~Úêä]n9NÁ/™×1Hȹø~«'™ˆB-NïÅb³+4 ’tr¸Íu“{YHâòmãßË¢¶n?¡¹Æ‰î6Ô‘®g, “c„d,›Ã31&sˆËÔKÞÅÓœŽGú©Z–Ñut¢»ÚA—2¿Ò?¦sñÂc„öýU¹åŒâ\ÃâQsm…d‘”οá‹$ªZ²1Ù <HåÐ`k¢"ÚªÆä÷…$ e1}mu&Aô
+¥í¥ËëÖ1ÂTW¤ ÖìêG,°5‹)­›Lã=qÛŽŠ1äˆ5¨ú¡þ‘=ÍmÄ¢¢L 8Æè#œH±}¿?¹U$¡>ô½ì[}âÒ)»ô´\‚»•J…†Ü$îŒú|0¬€kR¶8\©¹c´3Qôþ'¢H×IEö˜’w›s§Œ“ü0$”è€|k§oÑhöfí|µåp>IÜy|Ûì[g 8ëî#se²êXäÏ™Çù”KÀ~ËÐûTqLrfc(ÖÝáÑdñ*í‡Î^꼡ܕk=´ C^òþ¡È'=¥'nßêòÁOq!™µKÁ,P„Œßwø~¿°©0Û-$˜×)Ãö±Yy³‰D­¼U $ùÇðÁ™=’¢vÝO°Ö(< <Ž¥'&m—ë$+&LÔƒÈÈ©Æ \³9 òq& ]«"h”¸Xh&¿ dN‡ 0^†c :% ‡é#ý@Ârsª«qVm¤…¨À1œa2rìD `P\åµ~ìGå…‚ÊÖHƒM‹·¶7§¦`ê#$—“‡Ñ [CX‹|ª¿fdN2Á•1À"ÏO †Ëb%z ’Ë,ƒ„c)vÑ9U RHt‰®~XtEÖn\².Ö
+öª>æ'ÛŒ•t9ë—\t`À%Ï6ââù}Åûm}©ùVÛMɧˆXšÒëQì
+LÊ <;Óˆ;¨èÿ
+Q^ÅË —I÷^êõ?¸-,Q&DLœXÅŒ3.ÍžNú®LÞÖrí¼7¸dfb<qt° ²À&D¢YË®T¶ÝÊzñÀ‡['hnâB;¨Z†û Áw.gLUÈñ¯ñÌe&"š¨=Ö‹mNu'´kx7‰#Ë¥‘Zpä‚D"(¹®ñØÁïKÁâÖÜÞ]îH@3Tò:
+¨ä\Çh n2?,p€RrÈ/s9?ª³õÿ
+ñ¬¤
+@2ÇÏóƬ<¡xn^ORr"%ŸZ,;ÏbžâñrKí>¢
++/X—¡ · Kîc™IðÓq’›‡Ÿ´1Õkñ9Ü^Ç»—l¿µÑÉî\Ö¥©îNÌ-â
+Ëní!¸ 4Ž™asÂe ^kp½ã,91˜n”ˆiÃÃÅbº­K,½CèÅYØ=Ê¥•Wq‚?/ŽºåŽ2MŒ¶ü>ñwÈ>¤,ü?í†n§zT‚×OvÏñnëÂï ò>íg›Æáµý¢”¡®<¾H
+\©ÒNã–X¡ÊÉ8‘´;•î?׸ü|زFM¤y\ '`i9í:çã‹•@¿Ù,ðʼnÈFGB5Â7Œ1Çi2¸Ñ ™¥:Ø}Q˜˜Í®‡‘ˆÈ†ÕXX­%UF~£’‡×¿GUaˆƒ¼‹w(ZËV&U9•ÔõŒrÙ±j÷f®®Ø{G6Îe÷ñCw
+¬«Ú^7$³R¾âBÁß–¾XŒS‘%Æ´ïK÷ 8a ~œ·<Úm—NôžöÚ)c+®Ðg<Äå‹"Câ°òD{ÕPˆÁJËDXDˆ Ï<K©†RO‘AGž Õ?V)¢$Lá2 Ob¥»uËE|—ÛíXl ¥¥"w(2y¯L Ê$µqˆ–•ÕU ¨,º1Ž3“6¨–WÇ^5
+– opÍrí`i ‘°éi
+'xÜncØ”YV‡>¸FLqW8|¹\†oþëj¾=hjJ·•¨i"É'(?\T”Hø-eŒØÀ—Õé𮳴pá¿þa ÆÕ µcéõÆ_&T²õÞÍŠ"U&ë£ù•Ÿ¯ÛW±Su62ço)–Ïs•žç¬ ‡ é„ñ£)/Cˆ°×UÀws\Œf!"2úÎXÑ„Œ åòÂY¿ÏzÃçÏeuR3ž„ç‹nå´S8‡›^ߊÊá÷
+ýæWW×%Ì™Ó ‘²,—îœÅ¾À´ØÞ˜È9Œv2ÁXœL‹žíB^ÛfKFZå3‡Q#kJ‰k®&Æ!UQ•C €sœºç‘ÇÙ ,j(–í­u{îCn<#®cE8Ž¨„ßUÎZÁ\Yæ5:à=4ßìUmvå}\ÚÂYÿ
+ÉÈg÷7å-–0}ÀL^¾´_Iÿ
+ Éž˜­é¼ZUü‡öšoâ4ÔüÖo!ýÒÖA€
+Ä2K%d\õè˵ﺟ–|âß·öNÙųã÷^)î´P©Íæ7)Ä/&ýiÉz.)G‡¶fDÑkæ÷oWqÔÍÑõêWËâÙÇkiµXrj°£(
+>CpD— :tyóŒvÄýRö;\YÛÿ
+ÛíÚ›•öÐècp:¡À¸,S=9BCpf­GÅR Øö˜PÎÇj
+'xºÛ¹…/¢ŠnãªqìJU?´¡7„†f‰fŸQÏ ƒ5z~w2¨
+¡YÉ1éÏ!Œ/õ¼ ‚E©û/YþÓÍ8
+¤F½?_ù~áÇã×ÿ
+¿(Ãd\
+i©=Jf¾R).«¶’ÍíÖNâªL») e8tbJÄåqÙFÆÝ»•íä FlFÐ ÿ
+ÞÚ–›Uí«ÛsY[f"@mFc,
+Ö¤2
+°fN£ëþ¸à yO™´PÜ–©B¡÷A­·¤ƒ"~Ó–¾F©Ø@b.ámè±A!@ERŽº‰úâcÕWäÄ‚ÌÉrSk
+j±®ãÝÌWHWDöÚw’Ò}"3
+Ç¡s’"3ƒåùâM ÕL€IØ[·`·»gs¥9•r=„þÛ#2>ïi‚æ³ Œ±_5b»‹"s‹3ÓÃãÑmŽáEÜ®O0"%v³9ãÓ+UA˜¨±
+:IÓh³§åÝ)™
+\Ž¶%€ÁWAhAÇ¥pA²ð0™‰Ü.“¿ß¸ÙÉ°µ„¹7Zd˹&Iñ9ýq6¢{™<¾«ÏB×ã”9;Úö)ã)&Ú½½°Ö
+òi#ÿ
+©ˆ“®q—\ðàS'Uê÷ï&¬º‚uc±2,¬Ûë#Æ5×,
+n©ë®ÌЕ#pÒuÀzñ&†ªÁádòÚˆr,mÏé8<0 G
+¯pä7'•g$­UŽïj¥ÖèdZax£¶ Vn‹<·H–ô$
+TýÂO—ˆÃ" ›ù]Óº/o_]É-Ú¸¼‹95ñUƒT/µU,µHK*(Ÿ, @¼jÉg¦Mø:D*…$'?Ç 2w¢þˆp©E+myÖz“ Ÿ Æ^C¡ºøÆ"LÆS÷ ¨¼ßÇoן¤µXLáÍ‹tôÌFb¶8†2 ç¦Òÿ
+ûPßÄuúàÁ*™;YíÛbÒÇb cêUdIüx$1†éÄH°&ýU¯òNÏÚ{{åöþÏÝ*ï
+£Ùî4«¥w©*Ž&3ë…byÅä«ÞóÄÇÇÌqáÈ2@˜×áÝeñÀƒ——˜>8#º­ƒ&ÑßÚŠi~ßWkäñîâ»÷m­øœ¥·jTŠXXTÛ²ƒ#luÂ%Ž[¼yXFQ;Ëm“Ð5Ãjÿ
+ÎÖYŸ1ÄU]Âc´.ÝŸ}–…kv·<ÄOQ‚„^©Ù¹G”?TïªÈš‘ÓÒ"Aƒ ŽÁeú³Üà˜q*ER²Q}@Á˜ätˆ8Î¥ÊI u­{û»–Uál˜
+I€<ü¤eÓ 7Wðáf»[p
+ìdX&De´ 0³Zع þnŠ*¼Ö…‚,HI=4Â'±ÅÉPœ–¦ÈN[²[zÖXh!ˆz %ˆþ!iG,\G)c[Ú·€K/ÙUä‚»FÑê>yâM,QŒ§CJRþ)þ:ò•¤­v
+97+ßצ—î~©•çÐx•UUÕ ·¹v÷›74¬¡$.Ñ–Zêq;ˆ$º©><'¡Þõ¯ÃD÷ “Êä»%U5»+v}ŠX…E–r
+v¢ R¹O! ›Bo¹Þ
+As¨'<p%D€eu7ﯹÇÚHÓÕr
+Ôÿ
+ßî}Ï·?ñïz­àÛ¿Ž ê2V<ÎÈÇ Ô‹„¾'#&cüM×~Pµü¦Ž'?¹ E@³ÒDÙþXÎáÒà]k{´Ç!§' …ù]ÔUÛèáT¡ ‚42Fqæ1½íîddn¼?û š1ˆ²á/ÚIUg–7‚òñI’þ͵™+ Zƒ¶Æ ÙÆ@’ ¤¨¯b“‚¾ë ùrù?Êþ7Û;×/E}‡ãÕSØ«çñxÕÒ ÷Tœ‡@ — w6d,TÁc™
+^ÚdX‚¡ˆ;¦ Æž8R.Ä£<y™
+…NB¦àÍ—6Y$Κ¯×_¹DȹÕ+c ô¨Ei`ÆRfqdªŒäæ”BÜȹ̺ëƒ`RDˆ ϸԻ¶…7
+
+é*ÄØ î2=+¶ºÎX‚îc^Ÿ¹¡ƒ #(ÿ
+ÃUÅré4¸U±^¸ÊÅБ®-ÂbaÂÈÉb–Ù~ˆ5ÞèT¸­Â0u[tÀˆhÎ<§,ogù©†R*X·s >ðPf4Ìç‰
+$K…æÜõŒµü±Ìå,Nò çˆÚ"I_Ñd+jl'-LQÐyã*@è¾7Ã
+`ÑÃ^Ø×þ¤žè/ö¿D¨ßøvI¸ÙöëéÛ®Wmè ~–ýÞ}͵ñjÉíz2̳‡ýÃh;¼ýg‚ÙÕHå—aeäã…;]Š•Rwå‚
+ä¾0íM?Íh{("{ iå}küOOüOÃUЧcz€<ºoNU)µë“°©‚¯F‡™zô "kn¥«ªÏî_³Ä^÷Ï®Î猠ü‚š•Œ¶)È´ÇMqÌÒôÅõîý{’gírŽ?^Ä»5åöÚ5? ®IÁ ¼…BÒ d
+zU¤6„àdÖÔâ%ÅX‘¤ËJ§ú›ÇÀá$9Z˜òHV§LˆŒôþ8—)~¬$ãU XÈ$Œ§ :h1ÅôO‰Å[#­K³i%®rë#©Á9d8äXÝ ÂäG™]2™ŒƒÕÈ#M¸†¶äÖybÊøíb Š`¤Å»lÀ=p©Ìc˜$@M{¼;ÓÜî?o»}ùp¯ú+9Rö¨µ®U%£X1ŠÄ˜ÿ
+þ-³$b‡£ß¼Ûû/ï÷eìÿ
+¡Ú(V% À`‚cÇë‘è™…ÈcQªõ\I¶)Fua¹+2íÏn`ÿ
+Ó^‹K´Ó`
+îì³²«¹ nHܱ¤¬‰ðÅl²­—¹ìëFë 3Òæ*#9& ‰é€Ä ºµ,‚&« ¼X”µ¨©h=|§Ç,^„Tä›Ø.hZ[• J– róüñl@2Ï–Réîkç÷~Rð{wÎg6ÀÞ×±¹˜ª—m¿EROÓ<Â!ôOÅÆžB×,“ªÄ5fÁiLö™Ï-<ð&aÓ¡Š@7D׎O3ÊåRªkáÐläè‘YuIˆ,eÆK'¬Dâ$cAÕL#2òƒË´2*Ö%·CA̘ñň
+ÌÌK°ÍU e,&D'ÄénGXŽOúÁ9zù`D´Fqê”gNR½ä5dçÂ5‚¥å5²77‹Å¶ûmá+·ØûAÀÒ\LÁÎ2œf@ct3€}ÂßUñѸ‰R©„½3# ÆÀ—YÜ©0KØDZãÒ€ €N½~˜™ez(†6.tZ*îô|¯ävwÞ'gíÝ•Hí\ŠðÕ’¥B§/÷‘¸ÿ
+»í^á,$È
+2Ão—rùܦÿ
+$œÀ8æ*7²—
+€é1êë'®cU3e­©ÏÌþx7k%
+¨µc&û´'"G¦$Ô®he‡PIéŽuD‘+MÌ°V¤’:'øã2dµWÆðÆ&^^ÝJÔø߶s{ß‹Ýìj;7"ÅNg$U)0Xà3Å Ò RëØ{.,y³ÇRЕ͛çe¡óŽÙñžÍòOkøÇ=û‡i¥‡±Í+³ÝHȉb¾1" +oÞ!ÇãdÂI ¯S£÷.nçöçÙ#8'üL0Uae㌅ãK%-»Ö­Zɘ@1®Ó'Á>€<£ù"•{«4¼ƒ¤¶æˆ‚0øcÚË ?'Ö2ŒOoBVñêC¶¬6‡,±c{YVþ‘Ë™¨>ðY|“Ç[o©É–2A±¥Çyæ½Ê1ã’
+íÃ:©òLh€¼O&bMJý–_pµª,ª
+¹3‘ò12-u@–»’®ŽÍ;4‚vÏðŒh¯äë¢ðXShÐsÄᢩ"..[D=ÛY¦tȘDˆdðàÖȪÊÊû§2&géå“:à Q3î»RÕ˜ZŒÇRg#ôòÅyÀêç9l¨: ½ –€U˜f5gŠÒ?5¥‚2©V†½k­Ä¥º@åîS'É•»û¿$zéa[$±ÓÇ, þX/T^YGt ¡€Š-nžœç¤Ôb2Rèø»ž»—Ýÿ
+°1¡q[=ÁŠÕŸ#Ò«Ïü—‘W&Ëy=ˬdPAbtP : ha Prr8sªæ.±ëÝôÌ
+à‹ƒbî9:´ê§1†ÄÙN,1€>g> 0÷
+ºxœzB(Í݉'hðˆ‚0$¹] F F7êµ{OÇx\žŘ®»ë  èÇ® d;¶£É†#¨°{凌ž$”rK:þ@ mq8 T¯!î~âeåê¹›K³võ´ƒÓñEæe•Ð’Fé~#L:èY”-yÄi8 ”÷mŸõ ½ðrNñqŠo¬î˜¥™4¨ çåÈ$‹|SðKŸQüGjý–C•"XÚ¦4PrË"¤œ„†:*2A'§—†&@]çT²¶ÏˆÄ ºnÂ.§ÚaXb
+íUXíTÜ40BJ%&
+8Wm¥gÜbf~ÞA9ÏŽ
+#ä¢dQ®­S ek2Œö×C‰"ŒBUrNÓ'5Ã
+;‚páÍÑÏ}õ›?P”‘B ´äÙ`b'±´VÏ·ƒÆ9Ä… m×Å`½JA(IÌKá‡Íg@hèf–P™]Ñãç¦"ê+Þ ‚ä’±&
+­ÏÕœŽÚë·€Y”¨²×ÛR–°É É
+ 0<†x‡èÄ ­~ˆfÀOݔ餌1ÀI
+Ç ±ÏéõÀ¡Ø§Ž9a „ÐêB¶K™ñ?L*r ØàY{egs6år]wÓ
+`¬SÑ€–@Ä`Š
+#(Y$¨?YðÏ
+´D†^€g×Ï#Õ[!ª.tH½~ÚËÏ¥·kùAÂÌV†>@1uà…I&,Y€‘3œLc™*t/óïBt;C¢’ä™3ÐtÄ14¿ì¨÷¸uVM¹€HÎI~8&VN–ªÖ,»°l˜œâ* â(¤<; Nk¹d.XáZ®
+ªBÌi&0s;Aê¼ù_kþên´XR„šåXTtX–:U{‹u”ª°ÖÕíÚJ` Jš°+¨Î$uÀO“WUg3Óvˆ¯éù£ÕÛkrOÿ
+ Áœª×Fó$ua1¯†"FŠ`¢8T-GÚb5“ã…ǪnCp•µMQ`XH<úÇÃIª¯ÑOn®‹öÃ#OœØQ<nke¾ü•PG6×Ë3ä0šØ«-P¡z"ï¼d€OÓ
+•ÕˆEÅRŽ¼W]µ³ f– NL2˜êq 2‰— Â…ãí²¶²™P3ƒ®:%DâÀjËW³ò3’«É€A&r×-<0"‰œynwÜgë}!Žq‚ÛAÆFH;׫âÄNV¢ù×Îyösû€á×µxµÉ frÜ|ã\hQÖ/¹dií\ý$˜ÈtÅýÔ¢ÆÚ樶vNPµV´*ÚÌô×ùbÂ#Ž@Ð-{sãñ/åÖôho±”ª©±L#<@'n@áø¶™
+*|¡/Ndš7`¸Ë/gffOMG×›Ò|â<‚õªEǽ €#/¦h]êà—n=…Ê´téˆ%61vM!P•°’:ƹé$Š¦Â7RÎ'ÑÌ“ÖtÁ@¶¨2`E„´Œõ0Y À)v @0Ã*%€ËÜŠìC²åexA
+<ŠIÃ-k÷lœ–0àÕíû®Rö{K?Œþµ´
+lE+ò]OÃ(ý¿µû±ùÇ'ÄJø?d^
+%¾ç<ì׸DTDîaŸ†œå
+´3HÃIÏ“¹&'ÌÍÞ†¨¬ªKa™C , ¤ùâ± ®ÇÌ]{Ÿ>¾ÙeVÛÛ®º¾EÕlBÆÚC*0x. ;d xôÇyI}QÎ01zÿ
+RÛ
+ à1€0ä9%§ÇðB>ãM–+Rc- `cB¬e„vÕ©K,{i
+ËÉš â/D…¼fÙ%v©jfGXÃ6”£îrÌb‘Ȩ¹® .^œòÿ
+žµ{kUÛ}bÕ&ÍÛ
+×&2<ÏEg¦å¯Þv¼ÊNæX1,
+2ª· l4J˜©œ¹ƒ"D£L YÇ¡ ‡«€x|kjå‘˱ìýOÔÃØ@¬‡Ñ÷‚t˜Ï$K†V'Ž–æ%Ü5º÷ú%ǽLý°<Û Tqå^ã÷o¾M\[Z¾?2µ¯’ƒK0°#yoPgË
+–0MVŽIŒH1v@ÞÃ,ƒ#O¡œ°G¡U±S¹®$fÀåéŽ1)†Iæ°Ujؘu*„—‡„ár:9 ª² ÛŸ‚ŒÈðúà
+~)nV±Rz‘Šíp® ’^ÚPÁ‚¡ïo¦ž‰± 1°ª%VVB%Ì甘9Éë…ÄÖ©Ùq0pn´k ; ®Ò ­g!àCOLq›PQ"‹î~îÚ#WuÆæ7’ª½!t\´Ë¸Q—z“F_/À|mMÜ”!@÷˜tº:“–xw¬N\{ôs¯zb¤5Té~Ò p„“
+Æ$ë¨Ó<°³0)Ð@ŠEÛ·ÑÛµßÛTþÚý†sS¬áã(ꑈ`h(,~ªã‡bÊ_BÎrÏC:â´ªµc=‘­u[|>Û_"„“²º¦SúY[X>=1Ÿ0w/OÁåãô„A ú¬¾çÙ“õbªÐ´Mƒé¡úa˜çÖêîh½’Ëe*ÝVå–¸³‹#ªYà«Þ 4å³0
+jG92de炉t‹7DU¨½£Ù$"‰$õ_ –­ÓD^L,´8¾ç&ÃÇâ×¾ÅG°(Ô-J]Û2RNK)ñrvÄ/Wͬ¯¶^^ °Ît ,“ñH
+£–
+±È™ŸÄ•0UÜuËø`M‘yw->ÿ
+ƒpk?È`Ù+r%J“ë¤óóÄ‘J Œ˜ÕX"„bÇ× ˆëŽd;©tJò±YÑ^¥eÝQ;K)‚DŒàõ8L‡Egž¦ÃE7
+ìµì©}Š™Ù«®KY%RNfRsÇê)D•§ä‡mŒ¦T9¯øàc›qE—Ž"Ç_Áy\n*§Î:IÃ{ªdmðFæ=Wr-n-+Çã)Vö³bøo9ŸÇµ(¦c) ;j‚r©
+QicÃ, —)¤D
+ÿ
+À»XAÈç0±
+«ã–L@±K_Ä ‚ÃvÆ첕ÈLÀÇYY¶ºkEš+{X²
+» p†¼h,I õ,“”EãÃn9FK(a´†œ‘ÏdôŒ6ÖWùþÊíHeõ1ÞÙ|G@'eoÝsR¡xöH’|¿ï€2eoh!Û·Š”ªÁšÐxžº ¤£C¸LÙÏ©xð‡G4Zm<½í,Œ 
+½²v
+2qÏø•¡Ç½Wt‚I­†¹$‚ñÄ•Ha«›tLp­[NûHÆXH('†&÷ W‹B«¤)|£ÄDi:aR•ÑG Lð.æp;­\ʪíF*†ú–êÀpT“[†R
+“#p»oÛ^_·ü›¶÷þîÎÕÛy]Î[„«Ò µk¤³zâ¦aBô^Ç1 ÑË#åßµû—Úÿ
+Z® #shF^
+²Ô7@‡uÞ«¬‰‹@÷Õd˜‘P()÷[“äã±rk¿…a®ìÕ”ú«äC+ò8 Üxd ŸÃ÷ ˜eº&¿oô>îVJ¹-EiÈTV´ÖŠXýÀƒ9õÆnOnèÿ
+)S›”3Qm?<FÕJ»# ÐF¾€tлÛÏÛß™þè|’¾ÑûsÁnOÊ(­¹Tñ¸íÅMíj3´îwkôÅ_2xÿ
+%Șu?ËdÊ!uvzB¤YºM›§Ò@ôífzâ »è¸6Ñ~ÔA±kÛHf+´>˜ÌŽ“üq唟,UФ©Ñ¦Ï å3ØQy\m …©ñÎsÀ5S„œh¨Ê
+…p)Ò3õ}5Än«‹#ÛF7
+24íhðñAPbAÕy,¬³%•ì}&v€È#¬Î½1ÕH –"§µ—¸¼~G.Ôâðêk¹6H –b9.³–:s¬‹8ñÊdFÉÑÝžÚ=hÊÛIy>–ƒ
+"[oôƾ8‘EÆFËÊ ™†
+c‹gñ϶¡î0ðrÛÐä ™óÅlÂ~ZÀ1¹{¥-©BÊ[¹„צּݧt
+ °ûšu±'µõVáÈ"ŒÞ >ÛUlF¨±,4mÑž'LKUÈä mõíõV§œêÁYòaéÎ5Ð}' õ *£Œ2IgìבºÁcAn‡# äq;þ
+¼8Ž ¹nÔMRØ›‘‰Œü?†tX²ÄA;µMR7,†…9úy`ʨK6E fݵ¾ùŒ°üR6I˜«È7îA·¬b$]ZâÌF@è®[”Ý“GP:ž‡
+Þ|‘ÊÌŸ 8÷WÈ{ùRÜzÁ®‡ ºö,¥{A&L‘–Y †©ül1;¥)(âGò&Œ4ùè’äYWæW˜È€ ´À˜’-S„fc’ãä…ʦÝ0]„ÀÕ|Di… ™+SÇr IéY#‘uè¼)ë;jMª®w91 Ä–ÊO–,
+Ugþ_•+Sõ¯T/ué¾Ê9ºYS2Y[(È`ƒæ4Ã!0X½Õ.GÄt ³&¸Üʃ+8Þ›Æô’%FeA:àîSôC€jøýË·'>Öäñ?QÄzîJ¨÷YB3‚+}àI5’ êë€&Uw§ŠR&;¢A`öèú~ª´
+v ÌX¬ f#L0›—,¤Á ŠÅÀLb$ìÈñMˆ%#­Šøç׬a:«™Ø‡Õi·l²ªÃ
+Š«³“´I͉‰®XfULr Xvª›Bñ¯³Œ–­ëYd÷«Ž‰]À:‰jÈŽ3¤ýϪª[Náî)c¨þn¸@„.lúí§ÑPÐ)û|§@Õ;¥Qà Úâ‘+^J÷£cû¶QÇ4BìP nÝ;¤“al_FZã&Œ—¨õ¶Ý´ø¤M~Á¬æŒ î‰<ŒgŽ#p*1å1 Š2Fúi¢JîÃo‘‘ð#¯çb­z±»öÑ+bîõ<ÉîÎ|ó‰Z8åVrÈ¢®E@6Ù *¨0g
+l3HÓ@ˆÜnO-må×ÆZè¥jKšŠvV™mBÑgÛ™þ£8T@{«™ç<¤Í˜v¯õA²¿oŽ!§íÖg–jUXJ@x mE
+̲Ë@•ê‘ùŠßò¿ñ¬©MÜŽÁJñ8ëMj£ô ’»¶($©9±–3®1ƒ){KñT?ÙpË•ÇLSþ+ãüªyJ÷)Y
+²@•áž=l
+ëÛE§ñï’÷Šs‡qø×;‘Û»žÆFåñœ×fÖ@e‚d|qG‘ÄŽ`Óß·{´øgv-JËäÙg.Ë9v9nC³=›µbÆKN¹œ61Ùå%åÉêò55+5ÒÝÂ’b<ÉÁ¤
+Ñþ×ÉNÛGsk¸ïMÖ[Xã¥Èo_h,³ÔåVÝé'&ƒaR˜Ý¶ªÜpÈ@NŒæ_’EXú—¡
+ƒÞà –f
+‘»ON™jLI
+"W¬*ñ
+e"1ul” h˜·†ÉÇnK]KMÆ­«`.r îlÈì:p¸ÍÈ
+¹•±õzO†¹øbÂÁ͆Z-
+Ùn]Ô´†ñ8šª3òš¢Ù]‚¡¹AÇ"<Æ µAÇqd>>ųkmd?Oãˆ6ªÓÀ “š#¯»YsÝ¡L ñ3€dùY#6M\Šj¾àhUŒüóXH™¶‹J dbd7‚Ö¿TµÊ¼ªÂSVׂ I†ƒ øâ=MŠæ8zÍÙûúþË“ÀäÒåŒÞ§c¤å‚9ŠÒÇ„Æ&4Ü;]$õ"4³’;[]Ç놂
+ÊϽÜ~+ʇcV ˆ9´x“‚býÉDÇ[ýUo{¸kUŽ¦¿t{•ˆ+19Lf¸èÌ1Dé`/lj?>5ö;+Éê„bwŒØÀ6u µ‡ÜÁ¶»4Á:`âvL• ¢¥&¾5Ûì"IÔâ&L£K¦íæ%¿q8$çÿ
+w÷‡Å.•þ™$ý§Pzpb˜D£4蘧·vö«”yÜ›+ÛK7WW¹î_#j9Ü»T‰õgôÁH
+s"˜LîSÈãÎ$D´¹éP€›‰Ó•Ðeã8‰Ô¢Á
+<¬ÕBZdsX8×
+,Ñ?’}³,ôœñÛµU®Ãjbžk¨X‘øž˜^@æŠÎ(úaˆ¿fM5‚Õ ~ùF¾}0“+0˜v>×Gîöð9ÜÛ›ƒÇ¯‹A#ÛãÐÖX‰
++Yê2DçŠñ‰«S.x™‡sýЫíÔ%e$ÙÉWR–!;6•ÍH Ó’§ ˆ~‡K'éãX™(â@éøâ%Z9ô,Qý“YS`—+‘#Ôc¢
+ªñÈHKËP Ðs ç/<cT˜Ñ+wr IPæ~˜¹5•yKªIÍu{NÐ…ŒàáA’n̪Æx7AiˆŒ4ã%G&Û§ 5Ø é¨Œ³ç… r ÒÍ‹Á¶­ëZ®€úŒ™9t8éÄ„0Ê
+'1®²Ìò ‰f*|F,ŸýǸ)5^Ž¦¿ü ´ýrŒ q;‚™<â,t[<â,1ý³º¸Çùb%…¨Pÿ
+¿–
+È€®Òf ± xÎ-q0 `¨s¹Ê\?ßÅ mÝ…Áve…2$ùå–5²Ã”KšU¾JQ•êÜ^`ˆ:xΞXi§‚Dbâ·RÏ
+&ØS©€}>x‰Jêö(fÇ@Ôûw ÝÎ; Ì„ØÄ S”ÁÐb¸
+•ÚÐ@g=Lâ´¢¶øùŸÊZ †jÁÞDWÓ mTp£n\‚?mT²Ø:XAbú’ÃÇüð Û£½›÷L[ÆTDj,6Ù¶lFP¥HÚ ™pd¸²¯ž’vµ{‘ä¬L7ܤ`áZ§H“¿m—„¶)±H-"Ä q*¸™gLñ¸Ã¨Ûf²tŽ²zòÀHh¬Bz›öÕôÌ 5ˆÞÊc3®žŠ=þ)ÞÍñîgÈ{ß²væ­yœë’ž3Ûb×VûÕßcª$æI×Ë!¹Z\8K.Xâ©·Oº%ݲþ×ÏävîN×åñ­z¬50u,ŒAÚVAjxTH!Å“9"p™©¢5u˜=Ôu5ž`õ%ZÄl² ãVÐÿ
+Û.5¨OæpÍŽ&\ˆÄíV»ãÜ–â[ÊJÿ
+d@'9×ßj–l›ì÷øwõ+è~Óþ͇‚8ÈÝ°’rÊì5ˆj?Å|7½ó,¾÷äµ¾õv‰ªÂ3aÖAЃ¨Æ¾8Çh ËÇó¹2ÉÍÝì{~ ¶S±™Ý'l€1®†|°AV0 (NŠTågÂN_L¢ƒAu” Áðœ£ñÀ˜á:1VªÖ©-¡XªÚ
+´’NSåŽ
+йI@- stL9W·ê¼ÉFæu$ªd€,'-ÐLÏ"B7ì%
+«ÒŒbLƒ5 TÙ
+öêÍ,°ØäÆ}1ž@k:gŠ¹eU¡Ç€ÚGTu½~èK'$#PÌ6“Ò1G4ËÙiqñ€/^ß²/f–g#h$c,;°OÈC>ŠU‹¿´€±ÚH3Kk1´[ÜOEû¿žj®ÃK*O J³‘?,<ãuùÛžqœ·iñ6Ñ`r«5u-Ü€Ù £I\W”.½G4hæ­ÙûUf7q²½àÿ
+„8¤Rÿ
+¶káãøtÅMÕî[ã‹(•–©6䳟í5¬…œŽg3¸Å¡ŒŠ_Ãì—ä\Û °UÎP#ùÔÊDCµÒ\4ã[mÑÉý9J‹ñýýË$BHûAî:`ˆ§UÀˆ™&#øÓ^Þ: oaX"Á[À}:Œ5ÊÌw©¿oš-,Š¿p$œ>!–FyJWɃ¸Á¹,Xä¾é“’ä:ô†Àµ
+<r©A¨ûS¹CzH ÇœàYÕ˜Ïâ„üU´3!‡SððÇ3§C>Â×HÜŒ€ª6™~8 ŠÎ<¦áÊ¿¶YÚDd4>¿Ã !ic›Ó»ä•t ¸Ë3¹†b È1–™árWWðeÚà?‚O‘O·fŜϖ±–
+¬&ìœ,ß ”V€vîðìës¶ºìÚA9úw ‰×<#!eÑÀå×CÅô‚¡l\Çå¨ü1XÕ9Œ|S•×Qõ4•ûuË/ã‰Ø¸e¥l‡/€˜a‘_!3‡Ã
+¾^\4ø r¸¦PÌGº¢Hg þ~><¤h¨ä÷\q¸XýǸó*SÄ
+H`C0º'Q8#ÂëO‡ïDÿ
+»„˜Š1p³…|ŽUç°—6Y þàãE[$ ¹é}— ìNkГÐybÀ‰!Õ † €Bηa9@:‚d ñc j¨ò§D×s¯õ”ªî-<k¸È8ö
+Á›I%Üî`XÌ2ËLj7U[?&^£0SÅesx KÆØ
+Å–rœÌ™Ëw)òQ‡æ™^èx!Lu’GC²d"+e—Ï*!^Ó_ †`tÛæp‰Ku4WåŒ<›Ãîÿ
+›
+ò€ù€-AÚ¨N‚,°Lƒr€§nÐg¬çˆ,ˆQ UeÛRµ.æ $ž€uÇI‚d5Ñ é
+§`€I Ò0ŸN¦Z­ ó&qŒz ,ôR¬dÌg‘宸h#^Ü-AZ!gf'w] f#øáÎ×*©ƒ
+ª,9ÈðŒ°g´&qñ™% 0PÓÉ'C¢I&ëLyE¿UêêÜâÐÓáNž=püp&ê¦|€9£‹eܤª…ÝeŒ«ZÈNC3ñÄä˜ØD¦Ð% KTíY
+P›é¹døt¦ ushbš c팄2‚$ æLX1•…q(3š²)­UC ¦D“7LŒ¿Ãᄈž¬©åäƒ hËö‡/šÌÛêôÔÓ
+3…:rêq @4Õ~pø,Ñ—áôKYb충{”laéõˆ$6Yˆ‘–+ˆUÖÈä@@Ä»žEkø,îM™ˆE­²%u1ôŽ¸Qb´0ɤú‰XœŽEœf3JµÄ“ôצ+Õz<Yˆ-ãÛ·Š½ ËQ}põ1̉ÌΆX¼Ü“õE»\¡¿3Ú¼B“2äi>C¤ ––¥¤(Orη”ïs)`’4€c9œ+jØÂc*}ú«WÉ
+¶|z‡—n©;­T±Ö¦Ù‘Ó #¯Ó ˆê«Èù ]
+Çš›=5ƒ$4ˆn²ºþx1ÕSÉG†ïÛæ½Q²­X63Oº‚B#HÏh_D¨ù†ÁWª½ÛAÎ#î#þ³ÇºqHÇnÚ¢{ä¨'SŸLZR²e€™3*-ÿ
+ÝÚj?r{Ê3Z°Ý NÒ$ÏøàŒ]h!ZÛUõ?ÛߟŸÛ^áG}â]XùûÜHÿ
+£#®šÏMpLR‹Ç«„x|«¹ÑO>¦©x¼PŒÿ
+ÄOHƒ×½è‘G˜ëݯæ´yŽUõp¨æ^öñ8•
+¸èHŠ«ÜÄ,p¨cEµZ}ÂgDˈ’Ôàqk´«)ÉåzxatÑ™ïbº+––äOn®Êø $-Ž¬Á‚€ÒÊ‚À4Ë„HñV³ç‰¬_§Çà «VxاÕÐùœ6!cçäÀuSw k³e` šÈ
+d)Ôa°,R§æ‰/o{º,' 3‚ƒsÈåô“‡.«ÆE©—Õ3EmÃÒ,v*ç™- ó8"7SE\¯î´x½Ÿº[Ænä8ö'}/ÈYCUUȘ,ÀÄëŽÉ8ÚèøÜyŸ8 ¯ïd«vý­î:’»&#<µË Œ”f„]Ëš~éVµ·Ö%@A= Î*–|ÑvÓD÷fà[uÞò04´îÓ!¤ˆ8nL‚1b*©áÆrH±ò¯¢ök~?ÇìÔü;Ÿ¾-ÌZ¶ÿ
+7
+Ndÿ
+¹9ÌètË,H;¼6ÎâÕR” 0 6 ôñ'àû ;‚$¶tÔÀñüp¬Ä«V^[¤Ñ™òðÂD5*áÊþPžì›™òN÷Äì}´'ê¹Ö­55̵fÕì°ÈDQêf9(ÌáY "7g)e€A¿ŒÜ[‹ÙO²åC£ A ”#" dzáØâéÎÂ_E
+bµ§®Ó œZ±X D÷}{}Uʸ´Í( ëÓ\Nº¤Tóh]¿s¦ÊØÈPÓµðè8ef1œè"ûƒÚY'jÌ,h'38-Ì•.<™Î–ûø/SÃ^áÌ£†¦µ7XÇØŠ[Ff:žC¾‰ü<²d`äµK3êJÌ<w7º((VDñÁÀ]õHò_ª-e¨›€Ñ*ãUé#Ï8Ý"ÃkéܨÍȤå2c<üúàÀA¾ZšëÛTŘ
+Ä‘9ë¦X0*«Î#hWnG¸sêè< DŠ`¡,Û›2޹͛(å…™+Q%BqîäoCŠ«k¬2*ýÇ2'é®"ROňÊ%ºSØ÷¢­–(PO‚ˆQø °@ O)œ‹>ÖLñÑT^
+YIº¿iÕ‚̹ÉÐOIóÇQwb×jþ‹;ŽäPe'Q牽ÕÌSÙAóJ¹dH`3P_<*p_ÖS5íާݲÒê~ßë#,¼0€MÈ‘
+†ŠUä€_¦è>_†!M”æ(‚{Œ…ˆ ™3×®;mWzŒ'Ǫ ÷j€­z4Lœ³‘¦+Ìrµ1MÀè:õEMï`
+
+À•°—rÌ°dH‰ŸÃC—ЮÚ;ÈX7[ü¾.–n)tÞĆ ˜#QŒõéˆd™dš­^~ŒÞÜÅÀö¡¤*Cä#"cǵôT'k»ááÙ“IeÏd²ïÜCcºXœÏ×<€ÐûZêSÜB¬á-ý±
+t¨‘€È¨¢8ÇhóWoÃÁuÜ?n~bÙÚÚ¸»TT¶°wÝ´oªn’2ÈF# »>l[ÆÇm;x®ƒƒÛKÖ*DoDpÛX ,óŒK¡„¤K–kÕêÚ&íá
+¯Fâ]¹Z \*•Úí;—Õ2Ž
+16)™!~íoÃAÂ,À»’6X=$3ë‹îC“3`æÊ-N%ü>5>À«•A°Ýyfg´(6‘éÚ$e®.BL;‹m–Ö!ëW=sšÉä~±­}°Çé [¼|N!-Ì›·É7ÄáÖkRˆ:D‰Ê3œer2WÐ}€E‚Ñí÷×gw¨/³Ã JP(¦‘²áYõ5…§s©ëŒùK̪úÏ´‘ Áƒf¿Šý—ûYÍø7᣶ü¾žÌTíMwV…P† ²N{ÅÉÄÑ“ùäO 8œBݺ/˼ß#âgwãò8þÅé(‰a.þ£¹YŒÁP4#(`XVq¸Ý»–—#0„%J7o’ü·Þykï
+–É]Ó`^ŠNq9Li‹˜_<åÎ&Lé
+ë²·7‚Þ݇ H’³©Ž±‹P¨mVfA´¾…;µn²OAŸ_¦ yS&DÇ@aÚù Ì4_ôÃñÉîªeÄ <·I=bÛ… éPd“ù>±‡«À\:{ˆœf×AeÙ¨V" ùŽÍ*X*ñÙŒ¹.ÝlQÜy´vë{_÷«‡Èe·“G¸EnÉöoQé%w³¦qˆ.jûS01‰aª§&–zú[r…ÙüY‰,e8ƒ!Ò–øõYÝ»â=Ó¼÷./gí•5ýÛjSÇVeMîä]Î@
+•Œ§BY¾ßeº½Î«ûrÕÉK¨R£9 ‘|ºâ·¢\©är¢" &ýÏâ¸>ûÁ5Øå@zuœàÉ1­Æ4^7•†Ww\·2‘Yõ)?,\nŠ¼dE
+FÊ‹’ví#RtÃ
+’·ŽN–mÊBÀ‘žÕ ÆÒ#ú†C0ªS·Ò|Á‘ŽQÎ,®µˆ’#Êp[Y/s!ºj±¤úFxA6P•Ž‘0>½p#¢9‹ÏTtÐeøàÌ Š)ZRÕ~EmoH÷+WØÌ@ÐcòÂgE.­cÈr)ªfþïeÝ‚Ž' /“g$w¨~­Å¨«ì½Ók¶Uc&$õÂý&–êø+ç˜N… î×ÁÖQFk"#ññÃvº¬22š8×ríöxÀYXúˆ\•K¶l@Ð`&@Sñ JMöt»¢Ü’¸ƒá‘Ûª×åò>2ßáq¸ÜJ|²®M¯Ïî xn=¼f
+)ªºB‚®„1-¸î˜«²{ïE­,ø=
+ ¶³ÚÙ…–2Ìrø†F[bHÍ95ª¢d0 #ËÄœ8]S›5”ÜÈ£{
+Š~íÑbU«–ÑNqU¼Q«ìaœL ôÁ‚K”L$¨ÛÃè|ð@ Þ]T
+ÅwŒú ñW-è½_F8Úê(åÖêêϵ‚ä­2t<
+›–@kbWX‰ðx(Èš}Pz#¿wà…cªíV$œ'˽IÀ[ÍÑÿ
+IÑA$ ÇSƒÚ 6P1LBäO`V
+y7Ш¡D#ÜRzƒ™F§Bv“*è­O%"‡
+¤æ ’<òÃAmyq·96u PÜnG!¯uå#V*¨!(Êäï,óé€2ÈîÂe" Ew; ‰.JVî{:¢ÙîÓXgšÔé
+èDm/U¡Ä g³0N@Û5±'pÏ5™ÀÕû’3B$‚Ä7Æé¯wÚVBÂb$xx`åë6º ' {²™¤Ã/Aþx†Mž'‹ª]b*¡3ÈèâM
+f,eˆú¯SÌö.N@
+v2··` ²¤ ê f<1­cd·5‹×ïÕ ‘z\ö^BÖö1}ˆ¡VXî;@ÐNƒ¦̬ÊsÝgíòK[É÷ì5{u9ƒ Ä™Œ"2j]idão|€
+¤9@Ý;úôO×Ú…nƒhnõ‰“Y8‚¹d¶•ø¶©Û‹zkõ91(˧L±Æ%nútï´Ø‡a˜µúaƒ“*üÎtñÅ¢\ýUÚ裌ªZ¢Þ- X‚?žq,!Ïr ’z×Nη’Òá}Åj©– À˜YÅyñ…ÂÑÁïbôÕ<ÃaK+†ˆ—‡†Yb©ˆv[ÐäÝ+tý•áÛŽãÁT¶úì1ž¡m`mX6OºO¤Œ°‘7Wq{„0ÌN
+Õ{c–è°¡éöJÿ
+öî^›klÏÒs5î$¡þƒär %q¯çãת žáÑ0•øôð=ÇN…|ðñ}ëغÒA^¤,ix¼² ’Èý«·öæç%]îëhíæË(¬[`ô’›Q™A–€sÓ&”º©ˆ/3ˆõüÓŽÍÆfª2h×éâF
+Q
+§ûnàwN÷ÂíÝǸWÚ{&Ñ]ÝÎä{+ã!ÖÆJÁb‚‰Â²¸‹€í§Uo‰Ï „¤"ù•µ¥\†PûêV*,\·($ãçƒ
+I9âŽCéÅâmqñÙ6Líï ²Ååq©ârRÕ­Úµµ$‡
+`8ò=1sŒ€+#•Œc™
+·µó€ÝàS=¾‹kªÛ¤BÚá™Pe‚“é…Ì‚vêSáŽQª”óF³›Æç/M<¸Ôû/Ê­žâ›Ý´I-aÜDd8Œ\Š÷&däG.ÐZ år|{Òl˱†rÀ†oº
+s:úH3çþ8\‚h‘à¨Å·®e¬j3 t„Æ,êÌæ$ÝUôP­šÄ:× •Rq¼n¤Ôûw“hO–°qØÙPQy¦ŠÍ‘‚¨µîõÇ©”€
+¥Ô"­R©™ñÃ…’îÉÎcÑÌqe|j¸«U5UeTo†dP­iÞÌw9š2
+,@È73Õ:^ß“Ñ9¶ù
+›us$ ‡—L<ITôˆ“›%Í…CIÐDõ8éªä`%sà¡ö„ÝïD6„k–¾X’]9
+ˆÈÿ
+,b¤±ÚS9dã¤ñÄTÓe5ÚI`ƒ¶cüð-Nõ2–Ñ Ñ™ñ tŒC:,9DCO6äÌB°ÊO—†cz Ÿ0‚oÙ¶ÁÓ\¤OŽ8ƪIpªQœG«Ó¶=Zk¦8‡ek9D9"´ežZÁ;„z¤:Wã„ü–UjNÒI%ŠHñ|²À28ÄH9Úÿ
+Nå^M” hL¤ T~RqL„
+î'0rÀmV`,º¢ˆ´±vaêHщ"³Ó
+¿Ü»¿!¸ý¯‹w3”µÙkÕEmc
+éRö>ÕíUOA”ÄEJ³‡<²hMè’²ã6×L£ù`d)Tp-eT­ÙÕB’Xä:™Ð` ¢`‹ï㺮„DA 5|1Àºa D0#\üw >Ÿ†:quЛ)k­²¡[;šU‹%rv«6¬È|p­€V½RCÛõ@± <©ÞO_Lƒ¸ÔЯ*2
+¿,·SPb6œ£S’( ¨QdœöærŒ²Ë
+ù5·uâñìöîºÃrVÝL'9Î-Œ´•ïgÇ‹@r‡†¿jj˜ýÄæ|/‘óçÀ8üž7Ã^÷ÿ
+Lfª«,Ô
+lÄ­Ùav#…Ûs2z‘:àcº9ä$µ»w¯ÕýñY-°VÁö;bŸI
+bV@0u0rçî8ÆD;·MGs²Âk”+3Fñ“!?Ê1Ÿ“!u츜(¹J[ÍhÚ¬}Å Ö³‘#B~˜¥’_%踘FŽéÞç߸½Óµp;U}·ÇäðÕäs(Ýïs79`×KÜ“´mÓŠñg[üŽDe†8Äj.Eåú¬‹\zÈÚOàq;/û€d“Ѽ˜W
+VËÄälˆXPR3g\²ÀÈîE‹<(E ü©NÚ/nr¾™'©\ÌôœE5V°ÂdŸENèkî{»µOÈí•Ø­ÉãÖþÝ\Ë"9 µˆÐc2ãËt\p!0rŽ½{~ÛK^Æ Z†gØ,Jœ–b¤G㎷EŒ Ž£¿§è‚žþe«[]ª‚ `{†c0§ýPy[ʧÇà‡¹wH%$ ¦r2fLä1;K.ÝÍEj­;½r+Ï<Îx J«È€.te£QF© t æÄI"4‘çá‹P’ÁÏ„Fo÷DKúp:‰Óê¶ÊÅ^»£p- Ó,Ú4 •UeŠ.âúwöê´{käwþéÄìý¼ æ󮮞?¸v.û(ÜÇ $êp¹Ï`}®?\¼‘Ç•ýÓß$ìýÏâ]ã™ñ¾ï°óø5ªëu¶±edƒ±‘Š°óœ9@éœî,ý¾g ØÈ]«¦ŸŠÉT(„Ë/«¤øk8µü–(ÎÃWu~U|jʯö²½«ëdÙê` Y9)‘=uÃ!"ÕsDyKÛ»ä;’¼ŠÉµØ–#qc©ñÇ8¢n(îþI&±CoÈ ÑDÉ3ü#<òëGƒ ©íüÕãXü‡¥må¡ Y¶
+V»òïbwà#À`ãê®\ð`$‡¹ù|ísR.öGvUa°†
+ h|GL7%`r€‡Ç§o¢tñÒú
+1k+åpÉꫮʛ՘ ižsžB£"EÈ¢5{U–f̈YðéªDò9J\Æ»H*6áœ@V Ò.—±-65©•m¡e’¹ŽvÐ¥mªàÅŒÉbäL™ëãŠû]hG‘´Öý®‚¼{ ¢’\˜RøarÇG*ÆTD¨­_Ò÷UeÊŒ•¬ÍîÏ`
+g¡9xá"2aE§ýŒDÉŽÒ ÷6”ú?Å/wÊ@A¯Ö2Œü;$K§ðy”Úéh • ¶ €Yƒž&4¢Œ±Œüݨ˜2
+÷¨„AƒÔæpDš„“KQ»vÑ ^ëWn{µ`§P3c¤ :œp„d>>
+Zå²°²Õ´‰ðÏÆsòÂäåYÇ ;Цø\Cd0€²3©A鈎"jê‡7ÜD ˆ
+}gÖ£Rq'Ì–0úuU{\&à…ØŸðñÂý7VñòvŠ òÅãcXŸ!æ|ðÈà“ÑSÏψªËw^GízØ1RJýddí‹qâ–¨T£îq”‰Œ«Á'o-ìäþª‚lRÚ²–û™JŸÓ¨ÃcŒ
+¢Š¹4? X‹É´()x#)Dyâfà€ÔYðQ3ܞ̽BÌ­X$¯P k
+v©N!ÃE[Ü®¶Rgh´ϧ‡\K‰B'T­¬5_¦uÂ3ÝêßÄ+#;U ¹ê§,Ƈ0ªÛ |µC&¥fØ™ffq#u¬vžˆ´£=ê5ÐeÓ $äåHüÑ‚Èo\çÖ|§éž5Uyd…_‹È~-éÖ§‘S®Ôb¬£+ Á™Gp¨K„Ì$ñ5
+Ün%üË¿OÆï`ïªäŠ]¤±@ãŒÄC›(Œ å¶7º¡µ×‹gv5.êÌÛ°+1µÈÜ Î`ð[jë½C·m¶¨Ýã½ÿ
+Ë8À<Þ/"[qEÊÎ) ±‰ Ýá#,4URÊn¢ºl¹]€¤†±‰6ÐcS™Ðb%0§9z þ
+* 0uÚŒóhÏ9ëŽz)˽Ù±&aÁ†ñ,Ú¢¢ª…Èþ#l– W¤}¹Àÿ
+õåRœŠÅ|„Øãm€¬Æ‡¦+åü/Cí>ðx²2ˆ‘[ӧ깮E–»3Ø7O¬tÿ
+YóöÄ°2±–yâ$tWð€~ ~o;ƒ)¦›+îkb"جMl€呤ïbDA
+„
+L,(Ý'#à'
+L0OE¯Ø¾+Þ~WÎ=»°q-çw¢ÎEµR%–ª½Î9ìA$àrdÕí™9“ÛŒTXw:ÐáFyÀœÀÖïŽPj§úf‚M<„ 4³N@ú€Ÿã†Ã-X*™¸a·¢k‹h
+kqýÖ‚<<±f
+èKådf<H9øàv(ÉÈ-õý·ŽiC,
+˜ Ž¤ë¬bbV~re&õZ¼wá+£òjk8ûzÔífPD…h òÁÉÚ—YxñàËø¿ïbÉ[ë«t°‚A‘ê˜ÓÇ
+ ^w÷z÷k³Ò6•
+<
+„Ödì ÚÐbuÁïÕ6y˜îÊ.|R-{ª²„œ¥µÈôðǦ T~MÜ‹ØÅîh–$’N™“ùb
+{Ý3Û¹|ž†Þ†›l®ÊYÁjµvº™èFGƒST~©ñ,î>A$( ˜ê|±d•On‹õ·râqyElàÔP*(°;‡—ˆfjÀ'AÓÇ<gUðr $6‚)©zêl>N«Û¯í|š¹kZ‹é!Ф­3Ž€éŒÜø^š/qìüÉãÛ’&¢ÝÔký–U‹¶Y9Ë#È<UôëU¿<Ï.—UP«heY2J©È~x“ ˜þNƒÈ¹Oösg¸åÎ0@j•’å3oÞ»KúrA
+žÈ6m{w»æÔÎ&²»×÷+žåÙo*Ñh±ÙÐ¥€ H†â†Ð̳ùY¥’U‘#¾é1Ȳ¿pVÅZH•ð*A_Ë\‡Uã’†¿.ß5TkÍ‹+è‘·üæ0Ìb‰y£¥êÕ‡UmÅƱžÑ ç‰&‹8b“Ô'›—o7’ü« Xç7UZ×0ª(
+2–
+™e
+«² “ç®-À/1ËÈz'*䨰îÜA>‘×Ã]' ÖU½DZF»•jT-0VÀ
+²æ‘óF¹Êémc¡íØ$ݬxßb©R o1“».ƒ® äè­aÀ%¨úëáÕnõi ÓÂzN's³©žDÒó¯ã z¶«-¢@eÀ‘™~Aù&bã¯Ðô×Çìšìöþõßø]·¾r‡oíܾB'+¸•¢¶h{ 1…r3CtEYj{/¶C“ÊŽ’‰5Óì½ó>ÛñþÇònçÙ{t^õÚ깫ãw­ªKëé`S˜Ðá\Òœbµ=ëÚ±qy†)îþ¢”²Ã¯–ª *ÏbNÝ™óŒ<õºÅäb‘ Ì[:°Ù–ZkÓ$,³ÇnN¨”ÚáÕ«_HÊ>¾é9!ªÔ£Žöv$1ãü12uDeÚ\hª¨*UO»<£éþ˜í»W,§hKroÆ°@ÐøF zfDš¥– î¡Ü('ÔæNѤN^XTˆÐ- Dȱ4íUW¦¼•Ì¿AÔŽ¸ ÷#ÁœÄ¦øȤmU" ”sN
+ɶäX+üly±#ÐWéÑ/Éí­Â_%9(ajaµ\Æ$ lŠp–7§æšäÛØ׳ö¾Gn^Xù…<‹¬îVÞÕ¿«R¿¥×·tˆ;÷Jœ£ Ž9‰M¿^õr|Œ” wzÀùŸø·ø²ÉåWpäÛÏå€yÚö9D¥œîmª€(t  ÑRɘșJC‘ÇRÛˆ gˆÚ› ¥l¤…-¹c(YÏ? ¿<$«p=è7ßÉzk¦Ëè ¦²Ä­aÎæ
+BI“ µJy™ h,–´³6÷bÖ¤™'¤gå€`,y7@»k(ÿ
+Ÿx7qÅ`ÚWy°Ø N茣!7b\&äË€ã;bDß­¿H
+È&èëõÃU2Õh
+"@:,p“r`ÀG_ ,…bª!—íцBp’^½ÊŒ@pU€0ë>9ŒpFMPÙôQ™,H]++ìÞÚ‚_WXÛœàPÆ-D7ß‘Ô~ï1tF4r½bxGË?OªvLvd˜õH3×d—eÔFÒ°7Ôùb°‹tÍÇUâ:$dŸL6‰lJ"f¡Za´ ÿ
+÷þ=è,êeÁ2D1 ‘ø僌iT¬¹$àÅûÊÖ²¶@À±RXŸH#-Óýœ~gî×솜U ä‘–¤
+~SÞGc§Áä_¼Ò×µü¥Qíñ½2WyŸWLUåäœYƒ¯Aì<.>a/R[X_ªèû3÷wææò¾>Ü›¾7ñ~Ô¼äx€V”öÿ
+$;j­Œr”wè ?{~K1î®Ò¦‰˜"rÏ ™Œ1 7OÒ»ikka±Œ>¥&:é–æµ'kÔP7âš«‰}/ͨ_Ƭ³]Qr›äLnPHú㋱Ût<mž Äigîp•»¹ò.â/àŸ¦G6ˆ
+—JBìÈ 8è@œÙ¥[½ŸÛỽtÕc5NƒÜPáC)R@3 Èô9áž–å““™(½CT=ú~iàBÒë’¼BŒ8
+,¢àé&⽕ߒº@ö¬Ý¡œÌ ó…~£ä*GɛڹiÛÿ
+äå„<Ò4 gÙx<Ž@– äÔ€á«Izí=çá½Û—Ø>EÅ~váØiåñÜCRëª<äX\9‘È%7•þµ›‰=™.úu¿×ÁfSÝ+ºÀf[í]Ó"G)ϸ2‰ð íÔ÷-ZvÚ)trŽ¹Bê`̃–1¹ÐcŸõåíÙÂ~ZíãÆL2"d 'O< ÈceÑÇê‚f<?ŠkŒõ›¾ðe`ÊÏåÓ2½Ò²q ÅA?­g“Ú½«Þ¢©ÈD¹AµOöØyN“† ‘˜a¢ÌÏÂäb ʆUSþLº…g·lå;–°¼8©Sp’%÷éŠd\ŸÝzÇéÆþoWþ,÷_K"Ô©ÉSï\™’té#‹©Çˆ *N¿tçnnÓÿ
+Q\–hž¢K™Â§ŠŽÿ
+Úè7¦ÖÝè='C‹3=fÀ DkÖâºx¬Ëøüfµ_Žr“$tèrÃá2tƒ†`‚„ôÖ¶ªÑb‚È,I‡Úu3ÒF8îdôï¡v§‹#òßm!Ü«—UŽ€ÇÝ Ã8Ð ²©î¼˜ öu‘¹®€gÏãŒ2¢ñ¼™‘*ÑVÎÌã„ü¯nÃZX­ÚJi Ðá‹"O FRôÌÀ,ìíOšÇæSî” 30È’ 6ZeB\¦kåZëå‚•ý
+è`Û1$)ÒrÅó˜4~kËÉö—`l¹ŽEn2³E
+ˆ*Yá‚J5
+6±M ÄœÏ†'Z.…Ô0jTHˆŽ€áYU?HÔYP¹+9FSž‡¡ñ„̕ƒŒD—*ŒþãIÖD5ü$\bjMÔ73Œ˜umì’ª¼‚3>=0 É¢a“|4â§%?åãÂÚÓìíHRk8+â|¼ñ׺0Ñ3·o½ÐùÅäsl·ƒÆý/Ûû\qcÚ@ýFHœðØDZ•[>A)âŸn´Pµî.Ëœ€=S˜ë# cª®d ¢4³
+ÑùåtÎõú—‘U«1“aû‡™ëˆ_Å2RoË­T¨AÈœüð¡ur8dl²ìçT®Ê  € OýNs Or ÔÓÛ!³ÏÆ:, ˜«˜pʶSo9^E.ÛæAYÜ\ÿ
+Ã2¤? XÆ̲9fG·Á?Å•F°#PGR<ÆZâdUCKUÀd5jÛ
+æ³ç趨&wy€£uBå° É@Îê% Ê’fgÇ,ãÇý(¯R7«ý;~ˆÞÅÚB‰¿Ð |[,fC'K‡ƒ´vñHò.cY p ™LGÖ:â2I­dÞ7Kù_íÚéKÏ)ª¨Òì]@ûdä? p"T*ìñù„~=Þ*dˆRåŒzI?‡×P§Ó‰.-Ûî¡·º}
+)çû~N<ÿ
+‚FõÐàH~ײËØo — -ž¥½xÜÃíÛ]Ø1öþ¡A' Ê8ZØxò3Úíâÿ
+Ÿu“s
+È Wñˆj}VÈí\ž;á’åô²èAúñždërŒdóLÑÁ|žÅ$
+t’¾=1‚vn`"–[]WÒ¤äâFD q¨O’Ô÷×ñZ–Õ(
+¤1
+e§1E7jA"77_,ê¥úE’¶ñ[”¹“1Ö¸l&ʶlfEŠ̾O`î#ƒÆî<^ä¯EWO ‹Ö ˆ¦âÞ³µ‡C‡ñùw ^ëíQãËlf ‡§k®jî2ñ-jʹkÐø#±ã3^o‘Êeðv^)ÇÜ×ÐÊ ÚrÌô2° [i <rà&rnÚw¥ýáb=l¦>‘lÌËȃ‹º«/vŒæcÇ«Ù,”ÜnÚZ7Fá§á–,D€ND'9’Ú-ù½É;'²Óʵ;'"êù<Ž b*²ÚÁE±—«
+j¦ËÛÛ¬3XÀúT`kœ5P%€uêÔ‡ñ"zà‚/§þÖ/oî\¥øï~䯴Ù`º»,
+’j´ÇÊþB>9ÿ
+ zâë,=Õm€Qjr9=£“Û¸ð86SÎã%‹ÜyFÓjò]œ”p„kjB ˜Ý× KŸY!ˆãˆŒH!÷jÿ
+‰ÄŠn?™È[¯ãñí·H÷JÙ–µ$(.À “p3˜±V1aœüÑÑW•Ä¿‹É<nM/Mé÷Ur²2å2TÁÐá^ e`à–Ò÷è•t¸d¡ñ§%c7º¿"óÈ
+ö¾ëªD’
+•¨°Î
+A"f3Â}@ûuW½ ú~¦Ó¶Ï£¯ÓÝ™Qbæã®X9E~zãεXÞ?»[(¢rüü°©³ƒ9‰îX–öò¼?õy…tu¹‹šá]j…d>ž¦2ÀíoϺº.ßö¯æ]§à.£¾ü²qþCÚÖ§­û_$ÿ
+‡î N„á›™& ©
+…Ûßv@ç=úb|Ý“0 ­Ûè™qW³s’ ÎMùœpC¬“õ3.ú:%.êL.î‡Y9ide¢©—
+’«™Aƒ9ÿ
+v°S§Ž^Q,;c”æÝ_ÞXGöF¹zs´çá=0œ€¨W°ÎB"Å,…Ö olÌtœ°&lÒªð¿qˆËÆ?ê1Þ¥Ž!p¼ :’2$xùâMW0 Ê’Ùœº§×ÑA U0ˆB†Ü6‚FÞ¿—øá± “#E`…šF Јd"eÔÑH°²3­P¬û¬$µI
+ ÛAçŽvG‰=Yuß
+ýÏùwÀ{wíå¯ò> vîîZ?»Çf ´n Fx¯ÈàÃ1‰–…j{¾fáBQÆÍ!¨·xï\£5ŒKLí†-
+±œ†¹å8y¼Ò2”šÅ 2`W€Ïë† ªÂ&ÉÞÈ{×làóûwoç_ÇàwdJ{Ÿ§e¯‘Un,DµGÜ€À¸TñDMÅ•Þ?7&1(‚ÂWø$ûŸtî}Û›grî\«y|ëãÝå\æË`
+%šI…
+ –
+sõÁ¿?`SeÏجÌí#8[½V³€MüeZ`yˆ!<ŽVc{A¤NåÊO\*N´cdÏ
+O¥»—^ª½ÅD(Ê?«.«çŽ”º£†Ƽ I2ŠÁ™Ì‰˜ž“€ß,Hð@f²‹-G’ê` ;´®Ÿ– ÉÓãÅÜâAÈèc´%;cí9é>8!2oôåãkžÝÈ|r,°OÚÞÓ”g¡ÿ
+‚wbl«Œ…Õy]£ä}ßµs¾WOþGcáÝ]}øUOö)²Ð}°å
+Õ‹ÀæÑm|„·ÓÉFURÊÄÖ&¶GÛ0bcÇôíÕhgÝŽ;Á¸fqÿ
+Ñö”uh:nÞ:gDbÔ°‡ê¼ä½ÂB šU´wü™¬ºN'j4$ é€lùãR _ðZu£qêBA1]¬4Ìtð9a°†ãK¬ž^m‘A»iõê™A`"¶FÞê mõyæDFxc5U1—Õ;X€Eè+ø6ªîãxF*â³µ€’¤ sŸêÀÊÏÕ;Š A¨‰f«ÿ
+Z–-“ Èºx`…ÙDª7-.wnãpSˆÜ^u<ÖäqÓ‘x¨:ž5ŒX=›ÕeÖ%es× 2w ÚèyáŒGl„‰Oñ=<R§#âãúµÁª;¡Â²ŒåµÏ qI¢?Û»¨$ÆÅÔŸ!Ž&ŽŠ1r×R0g-c-0VK ›n×Σ¶SݬHíÜ›lª‹w)Ýe!M‹´Â®¢<1јvÕ:Xd"&ÞR[åz%Ÿí€3ëž%&ʶXöÚ_ÆËzØı0
+ÐÔ7µ€½æw*ç g59N"WV¸Ó2b;ά½Ýø·Î¾®ÙÎþlR®bÖÕ D@a[Ê<Ž rÄ#÷8 uÇ'Å›éÑZ¾?'‘Eœu,ÜJåÛQp€‹Z$@…G–
+D½•hJ$ãùíñòª–¯`_m½²sa«eœ dª1$
+dDb ˆVŽÌ6øw«ªxݸ±m§2F™FºøbK¥Æ;[·É *=VV»¶Œ³×,ôÁHxÉv© &ÊZÞJíõ)?d€O×,TÚjô[G3´;¥ì@Ì˪ŒˆðŽ™t8ã#—ËÔÏÚ„íPFpg®_žÊ­ž
+©“Œ@Êy<»-QY$©>£:‘ˆ‘JÅ…¤êºóèà]Ûkºêûg-¿ŒŽËU¯XËrÌ')ÓeŠ.ú…¯ƒ•šÌbHÇ#Xè?²Ìî¼
+¸Ö‡àZy<-•Ï!Q‘C²nzÎíYL8‘…ZÝiÊm °/¶–®£êÁŠÝ‚™Ý’džšaÛ@*–i’¹•îÄ, ©'Àad±V8ùL¯DªÞcm{ƒ»H>c ÆJ쑉$›.‡·Ùb…k¸À@><6+Îò£"6LÝÈ*ÂÖ ’@ œ1Ú©ñ½5Wþ¡ ,düüqÔt™ÇjCžÎ§`Ìk¦‘¯×
+4Wð3Ucs ßfÒòBý¾GòËwˆÐ î íDRX©hüt8ÁÕ~O0À;SBº.'øáQNC_<< µ ÌgϸÕkp—2¿×r,®–?Þ¼!°©
+èKI>å­$ƒF,ƒ‘P~ˆÌñò8Ê1Ǻ¼ÏS£é¢Üø¯kí÷rãw£˜ámÞ6”')FˆŽ£³ç nÔ/Oì|eÌp»Æe‹ÑP~ãÅuÿ
+×™<'Ë"þ]ã¡êõ[o?†¼{,¹Ø¥rÚ AŒÿ
+¹“ŽôâÜyä{Ò/Ivfp±VFGT ÓW&¶äÕîñC©²Å7¨i)¼f²2‘¦ 5V1d
+=¬aD&BDU UýÉÚs‡ÈaB*Äò¨¢jªvA9“F¸T&j¨Õš®öœ¤ø൪›Š'nN9±Ÿˆ\Ói°
+·,o–ÜP€Dí€A3žÐÝHm 5^ÿ
+ìVõ+{(¸#Èbp©KæŸ m¯Ud.î–þ˜òÓ`#9ud5Ü}¸g¼¨J«©w°°éôðÂL/¢³ ›†ÒèÝ]Ädµ«*k¹L02¤¨ é˜Ó‡Ñ Áˆb‡egp‰=ZGLMAé—e-]aLf¤øHÏ®éÕZõÀŽÕ-Z%y±÷z.då¦_Ž ‰ðJ‘mj«éf¦æSp ™±0 ‡]–öÊêxÝ»‘ËârùˆÑÃU{‹:)ÛcU˜3Ì2PH×LòmTbã™ÂRvø¥œ
+TÁ9æuúඥï÷íTj
+¬°L€$ÎaJ%z•ª‚ªgn‡O<tcÕ È&Šàú`F‡":ý!ÜꥷWkILÊÉ1üñ^kâüI5–'¶ñ¨àŽ*Q}Oc[ÉVbö­»v+)%FÈËhç„
+õe`™ÿ
+ÎNÅÞ„y`#>·VOËå%‰Q]Õ::L÷jFX/Qáv“ µ¦Ëƒ LF“ôÀŒ‰²ã
+:\ûeÍjwìo¸€7u˜Ï®¸Tº±È1‘x®³òü^þÀ{oùvòkäÿ
+ÒLÂd9ÓðÂg‰Ê·Á÷щöŽîÓíÙÖ®r-Ò:P{->»
+¼A9ç1X‰F•ZÜ|Ç!!ª úõíòNrn RàUÕõ×ÌaPÆôVròN+µ5íd¿2š‡é÷V þÚ™1
+ñ¨ÌÌÎQ׳þK‡åØÔXÛ«S!œ‰»Qž/íꛀƒ H VºÜ£8ä4£•0
+HÏ<äi‰¡¡²·m± ý–w*„`Lþ³ˆœiDìs"…Sº·æªÎ'8Õ¯´±Æ·}ˆ°ö’Ù©sžÑéŠÑZ«óË´5ϯÅfûL¬,
+æ?à œ&zWAÛþoܸü1ÃçŸÕPöóP³´™òƒÓ|¯k‘¡î^£þÛ1Œù££éñ]7dùgŠÚ¯gš•ˆ33é‘ãŒÌÞß(hBÙâÿ
+&ÔK<‰
+=Á BØõ€…¾ƒ
+Ëp“Ó,à`BÏuKHV*ÊCŒˆ3 ùâ\Æ4QºI#íNx6ª¥˜Äœúøã‘FŠ
+Í0bj¾Ia˜˜¡(-È{Zë¹Nl²ÒlµÜ’ÌÍ™bNfNA‹5•‘”d2©&¥SÊ4]_&¢¦Ä ª°'Ì4ƒøŒƒÃpkóýþ+É÷N{å®$ê¤àG‚˜•XP™õÀI8¸Ný¥A_ºL äâ#4ܘ»ÒÖŒ¿¸ûT OOÄ™t]U`l/$¡ö (–.@°
+z«MBD@Ð=3"ž˜{ª[ >7Û»=Ú@R4Êp©Q[„žŠi<R¶µìÂÀ»ªUÔd
+óÜÙd‰2p³«†•J·²zV²m'tõŘÀ
+¬l¼Œ“-p>]Q½–ªÔdª /ý§ eTdn­ÝÛDSÁ»’¶;Ü \jò6?Ú í
+Šs9˜¦º`¨4©Tã’R$½
+”žÁ^ÅŒBçâB 5“ýÆ#%:uþíƨåà
+±ÆîÔqû+±žßŲÎUÕÝWru'“@¨05Òá€û½r ÀÓŒ't³ÆŒDCuIÔËS‚  —™ÏøbÌ(²yq {v¢½îΫ¡ŒÊƃøá’.(“€Ÿ5ê¥w­€ Ld<|FX_¦Å4óHéÕußø¯vùzàügãTg{î
+xœQ
+É9@P:ÕâÃ#!9& *]¨úk,r– õ;s×,uTÄâ;ÂiP ÛŸÀh>¸2UõŠËÄðAÈåå¦
+ÄD>¦°«Ï6C![vt¿üR-²¯µû¢s0 :øb'>«cƒ–d@¼uv~ïô¶©nV×È¡¸6*ØX0Ü2[ÊäÚfpŒ±¾ë/Yíü£º&
+r ™ˆ8ÊP,¨ˆŒàËFìݪ±;‚¿meK²ØAs
+Yö‰´§ûˆ‰ü>¸Å0À &¸üëïâ×Ú9ÜÛêìµÝg(R‹½ö¬.õ¬²ÌT™Óé…ÈUÅÕŒY7Nr"ÿ
+1kHh m`k¬å‚.$ÈDb`\ùž‚µ{¡7»Ç»Û¹Nå;YC)Ó1¬ WË‚Ê÷D‰/Á¯©x¶w’ãÙUYG\÷KH!ˆÊ1G7$î
+‚ ¬tñÏ
+™$«8â
+òï#l²~ƒˉ G¯iYs-ý$ç8‘/’5DþÐt ê ÿ
+b ’Cϧ×rV!„ƒbe~ÛJH$h€Ý?,ð@¸C)m’±¦Ä¬]Qg¡BûŒ$ªªÍ˜1ゆF-gJÍ„Hu‡r[[.ÒÙ´«Ò<úˆÃI*‘Çøvê‹ÇP"¦
+z óF$¸J9e´ƒÝØ-ËÊäpùôr$¥Å‚@u‘šÊ° ç¨#
+Ë‹p!"†BqÅènº®ßÍPÛ¬±ÜFLaÆeK÷EþkAé©œ=eBæ¬ ñóÅY
+ôy' 9½øüEî4ˆã—ÚÓ2­3üN d‰;UÜPÌ1œ¤y¼ Ý’ê‚WnóžbOà|ñÓÆÒãse’5 {ü>?ªõÜ*ì[Zä»mhÖ¶À )Ð:, ½B,ËO î%¤@–©ˆé¡?%•]–´Šƾ–¥…‰»j±zø0##¨Âs=Ù{/g͈@Iûª_·[
+}Á&:§ŽX ®Šö9F`Äÿ
+Ë‹uHAÄåúD㉦§»£ôK÷ò€°Ô·§se3àÙDap;VÏ¢2ÇsÒÝãçõXC‰wnæþ«ôÕòváUƒÐf~æR>°1pHd‹:ÏÇ”ñò<â¾$~Om·ŸÛØÞõ%¾†W÷k[‹im¬br=x¢2¢..\øåêHi¨Ü+O¦Ÿ4âP/6*ƒP!AÎ'ýÆ49õ½Y2×ÁÇ‹ù…;|•û…d J€örÞ`Ç”ÆX^,ÄÝ\äñàbÌÚ÷Q[±[ì3q-iã&™g9ÂOךfâú¢áJ,bîËÛº¾4TïJëå–¨‘wi¶L.‘ƒÅÈ$KŒc"4ïÓ·E—o”䵈ê7‰$ ©‹ä¥KÛÄdLëñýÕ¸Ü^W8µ§¹É¢–ºõVE>Õ^«"aDÀ×
+ôuÎÙÈä7Þ¹^=¬¯ecF);IúIŒ^”A ªXòh~Ë7‘í5’ ÎL ™™XÆH.³¬â[KûNJîPÊOUlÁQŠÑU¥)Ò̈xèªî0á
+¡ÈIP* ÐɈe;Ç@ Ã wký%~šÌᑶV±Ä°º‚ËI yF¸ ˆÁ”Vë´tÀ¹SéƒR‰½P®ÿ
+²¸%UH,¾¡ÓËÄ`a¹€G>1Û¸²²VÖ+RZBôÓ_¦¸[Ò‘ F©x­rSÈ-]AǸá7:¦ŒÁI@é# 8*çŽi4‹}Ô¢µíbPÕ@ÎasØ€Ät…Ìà·³D¯D—®¿/ÑXí,þÜ¢
+…9€Fq† 1Tóá2‡nÁkp(<®JS]•"»¨ kEkºD– ˜S‹€ \yÊF¢âöµTåYRÍh=3µ‚¾#Y’À/zü™
+ššëÇí^:±k‚I‰;A0¿¹Ö„±‹€z”¥Qœ ]Ç!´‘9ç®ít¢UîíñJ\WÛ%†â¥„ÄG\¿Ç9Õ\ãc/ª/É~GwÈùNô\Jxj¼J>êÔ [lfÖ7õ1×ái%Êõ<®ö#b·Õ`ïräŸJ HóÄn{ ôöÚ€.—²2'),á!®èh·5`G«t*|<1[02‹Ij{y#ÁÇq·{÷/¹üÿ
+'WZQÃþ-^îßÇÇP³UZ,kP5rîIS˜ôç ÁäÉj¦ðø»dA‹9%cÝÝà³ÅtQeddÃ=¾–ºá²¸e·ÁãJ ÛóK÷EÎJ²Fc§Óué°Dˆªvæ]¯TdHÌg1¡8³`,î_.r•5[?-øñø¼E¿›Ãæžãë™Sq­W-¢vYkŽ«Ó¦,Ì®s8™8¦Þ%¸=4\wî/sûµúªŒ€Ð2ÁÇ
+øãl“êDê ù`eÁUÅ哯gL5õ¢
+w°ÎðâBõŸóÅiEÏr݉1h“Óõú¥*›ÛØ’Œ†ØϬb L*×WFÉ€5Õn­é6þÁ9¤ý+NL^ËG=ÄÄy‡Šõ½V²Ë[*˜Y‚wÖ刎WN˸
+[õKš¹Âت îÝ :4'LÆyD¶êjÿ
+m[5
+A’¾8~箫<Š;@nì>@ôî\Ï}õª!bT’L
+­»Ya/ ±K+•™S©uœªB”EÄJ"ªÜ-OYuVS¶cí ™Äd{I—TÇw7œÜ~(JU·µu³ä£P7˜p'1Å(áÃç¶4&¡ÏÝf·qåÐÌ®‹1éÈŽŸC‹GxJ(N€±KÕÈ<¬¶•ÌÊF#]õLÍÇôµuy‡2$,gᆽBX…*õ½€<í$Ã8arÇ=Q
+¨‘òõ.g ±œýrë‹ •JQ€)°;” e×>½01È×G“•B» ®c(<üüp±›zyâlºÅïŒõ>SÓK¡
+SÅëÞ/äßÊöŸ”ùWHZ¡BúPBŒ€ë©Å¨ãˆU<ó‘gJ}—é.ïú~/?•ÆíܱÌâÓs%¥VQm`Àp­˜‘œWŒ‰
+öpZð,ÒFå‰ôÉ(aŸk…‘Íâ
+ßr)ÈúF¹Î§ ÉŽ«Oœ²C“ýµ•%mÐHl²"AðÅy@­¾>bn‹"Ýï¸&åv$1Å9Åz6G©,[ñ^¢°K.ÖBõê9
+/utÊ$˜šßE~::jà€I
+w¬sYœãQ‡G+ÕgSg–Cèç­ôü”+½n’FßTÉ4-Ú*¾Ë角Þó­®°bÓ÷†»HRÝP.¨rˆI]ʧԾõŒð²^ÅÈ$èì³.§ K iÈt#I˜è1Ò
+Þ În•öY™BëâÚ}„a&%–”2ÄI§o’ë{OræwNwê{¥õ×]5U[òa´¤­B¬n0 N+ËÇ+SΞ|ÆS
+žÕ¼šÖ«K•_tVp
+ýÙ5Ï®;j­‘Bž«ˆ‚Í®
+ñ¬ek w
+³öÌÏ19â H»ÉòLùu 9Éî"úLƽ0õŸ&%ö¹‰v‹ÿ
+®—„þâ+XHpGã‡Âk 4²r«y6ÝéBª§ÚFc3ŸÓ\L¦±m–Ðà×±ZZøîÇ´-¨TVNù>¬ÿ
+-®0&ÔíônåÓó8=×ãwqÇxã[Åäò鯓E !_jMv‡0DtÏzR'i üWÓ§íÒÅŽ'4ZD8þ=\|(©s7%ZÁ´î0H$D< õÂDŒJ^È’EFjvï¡GãW_&ĦîZñªhVäX¬UNˆ  † ».Á,sÊ,)V¢ÃäwGãûµ1v0Vu‰9ç9`„^¥\ˆŒÉ
+AÈýâzñ§ë[‰È‹Š½€îXHË(‘¬ÄóÁÄ1E¢Ó«e„3tTxŽŸëŽk*œˆÀ„ån—²»”¨û‡MrÇ=3!ñÿ
+'M”ÚT‚NÒ ƒ¨?÷Ç:#<”´Te£]>¸íÇUÞ˜ FâòíãX.ã³#
+ô ÖY§i#\ØÒtÄyLUþsŸ_j·°ñ¹WÕÙy7'#“ÀWqU·V
+×k ;K(bÄ€N)\îݨZ_Ýÿ
+ÕõI³±f#qm  ·åÚÁAȃê9õ:Ç–$GT2EJáC©Ù#ÇSá>xhd¦. ©–˜Ò?<våÉfIS©jN&4ºŒ¥ì‹M|w,ÐŒªÌ”™ L¼OS¦)`—Ž
+€˜¦Ã£ÃEu¸……$ž¿L4Y"Q
+w¯ŠaqºÉÎ9»eü~o Í\úl[k²t+œÇ×<@Ž÷˸ÙåŠc$?”H ø-Ÿ›þá|›÷¹¯wùop~tZ–¥µàm4
+0ëoÅsÜ>ß]ÕXÎ_xQ°ªÈ$¶ŒI–Ë2y@žÇ½iöÐ"äÇî̪™¹t‡u¢š«pßù »
+”# ¨…
+ Î“<<Aƒ:ÌžA)ï`/Ø+q}Ñí’ô™óÌâÎ
+“@,SÇŠËÓ{‡#6)ˆä‘,ÏøÜ[¢c‹Þk®äOt”l”“¤ç,Îc\#/ÖˆcËŒ¢¸ZkÏ6–‡ «ê3b„¼¥kaœhî>»–W9KodlšFáõ×)î¢Óöü[hmÕsÿ
+¦pÁ…Cÿ
+ÿ
+­´f|ðÃX%o ¯ … 6+Ltÿ
+ZåA3“t$È«Ö…F]tñÂ¥b.‰ÌãÑEÆ®=ã“PUoyQT^¤’¾q#,..EB~AZ%ÇoÂÈkê%I>cY)Š‚ê’éé
+ö$–-Ì7„N‘×LH»¨‹0»÷¯cöäÌ<|°Ó”D ‡ÎV£ü’…¶ÜE‘‘œÏªðÅ8f&M%¥—‰p­stZÔ‰Æ^qõļjÊ 2¢£¨»;Ó*
+²Äd3ƒ©Âöˆ2aË,®S4ó®tör±Ð¤f`xÄn‡\†…‹+·&–M@ÌHÏÅvèô¢^ÆJÀ†—" ŸNš ,Å63fꇹHÛYõ™‘ÿ
+\’LPúOðÁG01j¢\i Ê…MJ¦Yœ®ÕÈ©‰r÷ Ԓ̯Z«€FÁ
+§— Ü™¯ÛF(aO¤Áõ甞9âĪ¹?gLÒû7’˜©_Vq ‰~qƒ‹ªÐžÒh߬æH,ªDtúxb©’øèÀÅ#gu/r(;g¯†qŽ„™Z‡‹O¸•ár¬â-´^irÉ¡…•·þ¤h< aÐ.Ǫ^N9„Œ ƾ¢×í=Ó™Onävþ7"Êø<ÁYåñ•Š­Æ’Z½Ë×i20f
+šø­o»¶ÒûB #RúOHÁ^pÎóUþcÇì”V `‰Wó#®˜÷+9r´wFý¾iê…–K˜m‰Ðáâë#>Ijmª5HÆð6ÄæpÑ ,¼Ù‹÷'øu7)ʨþÚD¦|Ó1Æ«›É‚|q`J« TÏ„}rÅ“²Ë‡(FáÒwñÅo3#LðÂ:¦cÊá/w®Mõebê|0cQU>K#š¬NsôÁBk³á¡tÕ[ñÅøíÍcsË›–‡‰·géa÷7ϯÝߘœ2ßÿ
+·+ñ0DÀáà1X¹K¥ÓÛYÔ#=놩F¥+rZåQµmÒ:ýuÂÜtVAkÙfY˜+PÁÔêt>–]ÕØ1¸º»×ë bF^9ç&Br8dÕu -Ôhç‰!U”ê‹Æµ«ã±•™^#*‡,Štòl²”c·Ò&z™=O]pVH0¬^]ÎÌMƒ3 ÀQ_Åtão¨³] i…°4G–F%Ѹ¸=êaTdgžgëˆcT¾G#ÉBëw‹Y£•X¨°T`Á×&ÔñÃÈ Ë,åbï^äÅœRÅÍ‚q 9ç3
+¥K,„˜•<'åpy Êã“UüvÕjäUÉ—ñÄdm­wV¸ü‰ÆbP“—~‹W…G;”¶^+wJT[mÑ!C>ÝÍõcãŠù2üU¼\)eD;Tž•gùýS•{»ÅÂï]§P„“˜9Fx«)=nq#ˆÀùȾaÄýŒù‡ÉþÊùÿ
+íÛ¶@×òñÅCJ-d]]ȯ”–ªÖ×V2÷:A%NG\:pÅUž3&áõ°WâµiW²%–D°œœ  åÓa·l*£¹vî5´ï¨a ÈùA£‚Ž|]Ñ~«…ïœgV¢fNYeÐOÔcK6ºòÜþ1œ€ íø®[¹S+¹elPLt=ž41=Ë#4èg§&îÕs¨µ¸üÚmªÊÎÒ>¤f ç89AY?Xà q0\v¸=éfä³X °i$´‰3Ÿ_¸«“#½káæÊŸŸnª€Ð#vlÄ‚Ëh:ç–±•¯XÈ1$Ôü»hƒÍàqì¯õíF#Ô‘™ÊA j0ÜS"…UåGŸéõXðø¥Ž¥LÀ ŒúÌF˜¶ éq”%@’z7T»ŽyÌ`ãŠS4
+-87öÊJ'ûRËaöØU÷#vÌçlí˜:‰ÚSqg˜€4%þ_nå“`bU¶œ³m¹?퇻„8ØJòÀv¶Ú§%9˜é'.˜ UYI¢§ ­üºërvþæÜ¡F¦tÂrå1‰![ãq„çõ+Üê«­!QÅ“'~P<
+]™Îàz@Î'È`62}P¶#€«3'?¯–
+Ël
+‚ ˆŒÿ
+Ž£PÓ–ìÁŽ±§ã‡ãš©— Oªj¾=ög]{¢%JŒ¿™Œ<eÛrªK)••ÑíØ‚\‰˜ëôÿ
+×s½Èg%Tå\qªˆàk,ë¹…$Ö²:çœa3¢¹ /tjû¥Q¿“kW ªT)f*~â&^à è‹;ªhã媯Ê>5ÜûEKÈäŠ,áZ⺹t_UÈÎjKvmÚKàti]AÅoV3ëÐgöœ¼:ÉŒMˆ ½Oü—+m{CLåŸ\‰(ñe£•@lã0¬öä™Î ˆ˜ó
+8Œj­ú¢ck£WÊPÁÌg“xˆXá$‰áqUk®y¨-aSndIœÌøábFµOô£Q¾ê(àr»sqi±ùM[[‰¶¯lÈ‘TÌŒWœNçZØ2Äà8¤%ªÕ ùê¯Ä&ñ²]ù€±÷ÉŒ†x|&ÁÊÉäq†ImŽ–mQo7ðZÚyt½a¤5$lmÃí2F@'Çê‰T&ω.9Û8‘Ý«°¿}“‰Íæ%¶ñ){«ãQïòEunTÞßí˜ üF
+î'Äùå‹1
+yH ¨ƺ¹t×dؼ½Á]˜ƒ[ P.@È Ï–!·Álq2™0bçå §k';ïÆ;çùïÙþEÃnpªª­zlæ»Ñl­¥IXd`GñÀaÈ&;•¿tàäâäÛ ÅŸÅþ‹+“b
+‚£“\’>qƒ#¹VÂK7zÎe!ÁOQ,"uúŒ †ªÒŽMÀôMU™
+¬>d‰ºÙ¥ëltÐ?Z=DâE“]ÃØîì¼m9+ò¾Ã}¬èxÇŽU}µEÛ¼8`d“²z³+°åa@^£—¶Ý¿‹ºÃzÖ‚Û~Ó® Ñ–ë¬ÛøÂÆ÷C#=Þä3Ï
+"ËW(Ø– ®?%J–¸}§Ç?ç†ÂªžluîZl­Y~à"H‹V{—b‘îý³™Ú»«öþádzͨ®ú9µV.å F
+·VèXå#OñÀ¢Œ`³OXM¸X3@39Î0±wWÆ@ ÉK¾dOPq(%0AÂþMOÆø¿-åöÛ“ã\»ŸÆîEGµe•ÆêÔÿ
+95­,Ôå
+hGDfܳ¹÷fNJLñnÐ #ÅÊ2ÆrP‡°U‘p¹ì$|3ðÿ
+Ô«V¶X~ñ0l>˜2QÀH/¡I=ß©œÏ—LNªðÌDtüÓQ¼…³! ƒ¬cŒ.|˜Îô²Ù­Õ÷U[ÐùÆ„áVC›þÉ< ³|Ó´÷K¸…YþÂ
+8Òòç«}ÿ
+ÍÜÃBL ?BtÏ«¹Y|­ª{q
+·È ÖdÏS划> 8“²õÜøVk$³ ³#¯–˜A=¬ðî…W;Ü룑CŠÊ«oÜ®ùŸ“¤g3d2¬ÙpI¨__“tíuß{'™ÁávÞ]Ô[ÄàûÕqi¨$¤¾÷ÜÀI ÆA$å¦.qÜ9U½È±„&A$D§_\ovdT;Wûd
+æAë9yáq Ò*Z“3ÆÇT"vxáE<1º»9 føŸFåÑ‹*3ÀŽ‡¤øg€udÁYX+k=†xé†N™âìS¹ê£“‘˜’ ˆ×<UÊ_VZ|h6Žý¾Š×ÙE$§YB-×¢ 
+BF‡
+ÃÈ¥]YåðÌFæ )Dïäq7"ÊØ£Ôí[2oªÁ¦%XdAÈŒYÜ Â¤Ò‡ð—Ú…Cðy”p«æ°ž \ô×pˆ,€3× ÃQ…ŒÑ2#VM<iˆ èìéW€ rÍ|Ï]:áŽR¤#¢¸ÚÈå†D*òª±#lÔèÇ1ÓòÄ‹ ©nŠ¨ »0Ê3ÓÏ"˜Òêõ9PCIbsÂ2EÕÎ<ÈNð¹|
+Ûüþ;rSÚe£m†±]¦6Zr;‚}9:â´ñ›¥ƒ‘æAÇf+=Ù·3V˜Qç‚Ø#Õ&H”r¹<dºº¶Ç&£M¥•X”b Aƒ*3á2'Á\Å)D÷ ‚•Þæ3™ü0G+X%;»•«Ú)øëp{›w‹ùU÷ã¯üE|jÕÒîGº²·–e*7Y; D`ešnÉøxضËy.ÔmVKn$À?Ìâð•(²%ú¯ ú!¦§_TS6++¢>d²ùN
+AÂŒs(¢ä,Z·(Nj#  “—òÂ%‡UvÁ7oÉ _CW%Tä쫘> „zТñr ª#¡Ãê<Æ z¤äÎkýÕè'x`»ö‚XGN§£…fO•Ô:Ò§•Ê®‡ã¥®¼[¶µ•«úX¬ì,£"D˜1b8"îEU)ròŒd@=‚³\é »6Êg¦"™ ÎO¹ê¾œ¼«,b¬Ä¨Ö˜¯WÏå„
++¾ãï99ù7äÙ¨;:Ïá÷®ûðÿ
+&q
+A ®Õ²¸}' Í„Ì0-Þ´½³Ÿ>Q’qñ:¬ÛȾçtAU-kHÝô1ŽŒX6ª3ò„‰œCD“ðøýßbø×}ï\¯ø®ÇÁäsû‰©ì<z¬·Û­ »Q;BÉ>XyÉÅäh³°ñù™ìÅeÝÓòBâqTWþI ˆéáü0øFŽ°¹\‰Ä˜§K¹Ø›[j«=3“üpáYy§º =–â
+*ãohg$¬†Fs=3âY–!Êå*¤’€Þ1×M?&©K¥UX6¬»uò'5Ó̈4C·‹S‰˜3˜ycŒ”ãÈBµ|$¯0³—Ýþ#†YI]/yÿ
+Wgê*jXZ‚«w¤ý®#&Ž£¹;4F21c¸1[¼t=êý½÷× Ö-ePÚÁ9炦ä¼Y=Lƒ3;x.Ã÷öû¸þ×ò(ì¼®o g:Š¯~O
+ßu
+´X£FP#¸\¡È$± ·ÿ
++œ¸ä>cC´ùvº°å„N3fD™ñ(Ë—eW‡È„€‹½þ}{€Óæ´6-`o2ÿ
+åB‘ÈË´‘Œn*.o¹[È
+ájiÝ“Ɇ'Sž/c‹^ËÎòI“µü.°ùh}‘w¾­ar­Ä†,AÞLmÚÄÀ8èÆGh‘5þ?~Œt«®kŸrQpkËV„ú¬Y
+€Ï#§`Ç“0,ÔÑÏ~Ð=½¶R~èÊÿ
+Ê8ö½]YÔtþziåž8POU£Ù¾JÝÍ‚ž?.¯Ór8ëÆæT.©?P…ZÄVÑÖeú[<tð„î/.X‹°bAÇšäw¬"õ† ¨‰N¢0R®¨q†ªOR)%>æ§útK§Æ‰D#c˜ㇰE;í7³^UQÛÿ
+è{7Ê;ŸÆùœ_–|c”üûÛoNOÚón-êòVt–*lj]³¨:õ[s÷¿(ËŒ4âlÎßàW!Ý9Üîëܹ=ߟ{ÛÜyw½ü‹ØË5–wœ³$Î4q`Œ@ˆ /‘Ížiœ“/#R{ÒŒ
+úDá—L2A¬$d†Ä„%H‚HúÏ Ý¢-‚êõ€êw6p`~XWº «è!¬óÀº`‘¢ vTñŽ§,°¢Ÿ+C—Þkî³µvz»onKyÔ«/#˜m³zžC*Jµ`N¸¯m$“u­—3BããQyxªw~ÃÞ>7Ü­ì¿ àò;wuã‘ïð¹5µv&åܻр"T‚0Pˉ$gáåÃ3 ‘"]Pü‚¥® 14ú`eߢfä!ºþÉ]‚©HÛvé,Di2?Ž™èB³Å nTãs½£jÛbèäsž#*Î@Ã"
+)60R€)$øg—ž'e]ÉFeR¤c‰'ÇøHè¸u`w°, Î'Xóüñ
+ArèáMµ¢w&vxë÷}<q1 j™3º>]/ù¢ñ¬ºsÙf©lS]ÇÔ¦ Sâ bìbí©YÙ ‹±`hžöù4T=ʶ£0Â3ÈL~DÃ7U§ŽXÅEÿ
++(X´ ϯ„aì©“ó_Jª}ÇlËDˆññ8ÎW˜¥n˜ãòÝW;„†˜ë¦ú¤eÇåg]u[E#õ5šÍÕ-µoº·Í]|LXÕY<œ3Ç áœ8ø«Tèi>ŸíÌ:`ÈUgzžO òl6Y“,ä™
+E‰6oº²›æaU¶Ëõ&1I ‡<Af ×îŒEµ³r†æ¬Va‘1ŸÐà$L† d¡|S\š÷×î+‚ÛC©sÈH ŠªÛe І¿×ê‘egia
+ú˜IP eåŽÚ““šIDn5UVY¬kå†Y(e2@½´®€€WÈçüpE;£¤ùH»ÜñË×NïHmO„Ä`A-Þ® ‡ YS‹[0;”‚G‰œLIA–Iž=ú
+ÐÔø­?øûxœ!È âd Ó»ÃþØ¥’"eiðyRÄ:ýnãT^ók×é@%Aœÿ
+Ê.*jÞÂ"~Þ™xb¶ñ(ÔÑ;pLj‡=öZ¤ä½~”,¤
+äˆ
+ªŒºœ'&]¡ÊµÇâK$„bÎivüRÕ §pº“˜È‚<5Âäå;jµ“ÜÎñÍîwÛÍîÜ›y}ÁÙMœžKµ–¾Ü„³I0 fp¡ƒm…éóÎG3/.¦éž.‹yÊ··öšÞKRkRûAƒêm¡Tu$ *xdE_à­áäÃu
+§Ô"3#ÀÎXƒ
+²lfÁÕK‘ êÄiçˆfRî[E¡ÛÀÞŒ„oWˆëÁôõ8 ʇÁ\âc$ƒ¨?¿Šýûû5ûIñÙïŒ~àügåµw›wrËÜ»
+»kY„Dž,F«>A—ѵnwŽxͲò ‡F¦ÜÀ¨À$É=GQ‚6KœX-ùª6™9m`eLYÜÕYÓŽãToÔí¥Œ“ a‚IG”å9Pfs&:‘…¦Œ!×¹ÖpVš«m{^¢y*Õ„ZíÞÀ*6æÞ6€fyFS…nuhàŒDv—$Vúu¢ÜãØ9h•Ú+ËmªHa¬‰‰œ+ £&áË´»Ý%RVÍ–Ì <ü'TŒÌC…§M|v7/!Ü8¬ž>Å „Œ˜–]«$OÓEUxÊ-æ$5¼RÖÂ"¢¬@ >¿„áR0#ܲ¹ ¸”´
+}Ütkl¬)’AÖuð×Sd B!ú-
+¨»fÍ®w I=
+9Ð .†j]Ò¹¿¬øcVX‘fesV¾*Nß#…¡Bžz÷ð‘«° ™L*ä@ßQ‚‹%ÂG·~ßT©áÚœZ¯¼Ǽ··,à†)Ê'®8Ì9êîLsŒcÿ
+¢pøŠËYe
+8GÛ²¾Ö¯]Ekd\塈¬;²;~˜80¯UK?.{D 4(ŸÌ~r¯‹Q!zòùmÝŧ‘
+¨@qw
+ê½ÉÝx
+¶Â)•AÎs󶱲³ ¤ ’ºUc@
+Èüéá‡Æ$†Iœ¡¨¢VëÂ0PÀˆôqj8Vt¹\ê“nIoIh˜úa­Ña®­O1ø†Æ§ÛcmmS Óf±¸­–L30¹Áî­q2l³T5[°("ÕmʼnÔz¿žŽ*·"išìWôÌe‘:ŽQeP¨£ º"Z’ Ÿ ˜ÂòÊ÷Æ…ÿ
+™è™Œu¨±›ir릘 Íub8÷;/;6/Ü:Θ7éLHmU|«©,?«=\±Ä‹!Û*Jê¥IS õ= LPH1e}Š'Ü»NÐ"K”Ì@8'è¤A®½Éªš­)Sû´…mÙ²duÈ’'8èS2cÚZá®ÊŠ7„“ÌéÓeE
+Éȹ3?=:Œ.A>üKÏ û¨Gê\™#úê¾fué„œft6üU¼<‘Š ùÓÿðOÕέ8ö‡½Å‹ªˆÞ-ÞÃz1ŸHŒç®;Ó¨,?$óÌH2>~åŸÈ¹\‡L¼Ÿ¶?§ýqv
+Zv¼dǬücfC¶«Á`Ñ–ß
+!cMÄIð<I#U8#"äxß·æ¯Ã÷Ó[hÞ~ìðüreW”Aª±ã;ØáGF8"]/Ô
+6ÝĨ•
+Öf#_,p Y ±°LvÎå}v²²gMr18 AKÏÇÙæv]—åÝÓ²{‹Ú¹·p&–ªç¢ÂeM÷# |0ɈL ÁÙfqùŽ>ã†f.6Ëmtuò)¢³É÷}*°ç)õe
+€Nà= É®D«
+²>w&Qœè$^#SÞ{ºtVàq…œ…NZ3ñ]”ƒÔ„èãéá×›ºéþÓÊ@LDÓ¾'¨ìÅ}Ÿ€÷J”\œK-â0@·Ô…ªõ‚Cð?ÃräÄŠš¯¥aÿ
+(B¼[!-`†R4 åá¦Yá˜eºë;ŸÃ€#ùvùZ•HÜ^ɹÎD“=u“ž.á
+?ØøÖp;kR[‘kŠèlÔS
+t@ï[ óO’Ññ¾O=ÇÄù<Ôî6öñ—Z{KiÊwËXÄG LÆM@edû†A„ñÁò¸Žõ†Å_ÖÀ02&gùbgUSdD‰$HŒ”ÿ
+ä ®‰‹)廎5T›-Ê+]ä¤Ý鞇<.9#wV%ÇœŽÖ—TNÒÃ6è3Ž:U²œca×
+yüÐrîã3W}µ¦Ú\=m"Fƈ# …»T̸b$EÈéo‚"Æ&à°îÏIË)8VHºn)°vVeÞ7êÌøFzyÎ
+31¢ cªÔí]“…ÏíßÉî<~-œ*‘¸Ü;w{¼·{B¢YE;šHÈxâ'˜ƒ@¬qøQœ ”€è:×ò[ßâ?íŸìÿ
+«_‡î²ÐÌ°Jj´Æc3ÓŠ`€I
+œ®JWYIÏòÒ0¦à«<sT¸1¸÷ Ðç—žž8­„x+ùp;›¯[ÍãÚ‹´ºò ;ôØTÖq'%{‘džѵ~Ê8Üž(ªïpv
+2Q—fZ/ÉÜ VÃu†wN~L7ÁSØIó+'*Ô{*ºZ’$Ó
+â¥n/: ­ ª´ëÓ&“—¥iVö^ +µ¢&Ž's‡TåäSûhNõ êÛ¨>SðA«J¡ñû¥…S…cYmn5TÌaw!u '<±ÍJ]Y”]¥*£­ŽóøÔr¿ÿ
+û³œÖ|úbäJórÉWºÄçWeÁ¶
+ÎÉžQ²ÑNÜ£úz¸ïÉ…fö10’йúFgC‹¸¹g90W,¥éÒë$öç`Âgþø6£# ¥ß‚èäfQ–±Ž„uV°%PšB«V“œãä0n–j\¯#ªØCzUæ æ Ю
+퀪¥aŒ¹ÌçãŽØ
+“³ +[ý¸Ý&Oò8&ª˜IÁú)«·+Z!uqL°È¥íç=GÝLÚe]u1…Ë$Zªæ$Á ³ù=ÆÛ€ý3ÜK
+”$2ÁÂ:à B(̽
+WŽàãùáEÓÀz¢_ÊýE4P”WSQ[+Ø›·],[s–b$H
+M¨?Åz¾Q–“(FY,I$%Ï d+ÑÈk&vŒ¤ÄeõÁnIôvƨˆ\Z.?`0èq$¨ Åi'=¥ émJõ×džBv~\*YkYêF•
+Ò
+y^Ûq¹•C5«éÝÒ|'‡p˜å T ëöKw.`
+w~Jy•ªR-b¦Ã™Úºt†â&fˆåÃ8ã_½–!¥¸œj¸Æ÷Ë}þFŠ‹ùà?3“_ÃõV3{†/O"7•ž^=#Ò?5ϺÒ陕‘çž5° ¡Âð<Ìòœ¶ÊßšM+VÊdÄ΢:OŽ.õXóaA¢µLüzس˜YÎQâp, [̱˜1z§¹VÒ†$A#Ãé†À¬|؈Ÿv‹šç]²ȱÆÂêÿ
+öýEÂíIÊuR
+îþŸ»(×ü1S‘ÊÙ2Ùöïmõ²Oø¿gûuZ¼þÏÉãpBÒ¥­y÷Gõ Ðùã2¨È¯Q?f–(Æç¯n«‰çv~m¬”]O·PoQl jLõÆž,ñÚH5^{—ÄÈ c´>£ïÞ¹ë¸|ºYìÚ[Œ§YÂÉh
+¶ªün=6 Ÿ‘g²©[5ca}î>Úò#ho÷1W$ˆf¯k­Q I¥<kÓõCÚY
+¤‡Ë?áŠùq½QàÍ°í"Æ©‘ÍJ»=½·ôvå[È®úû“÷«DVV¥Fí›pbJî Œñ^0B¶ÑkúÄÀ†7û!/jî÷ÙÞ“‰ií
+þßë}¦4‹
+ÈRñ´1'g-š©† Æ'#yzè³nØ4€ 1×Æ1j0e›—#¢(…Ûš: :õÄ®qÑ
+Ô`Ì»Km’Ùtñ>XtX²­‘Á! ½>‡Ï`ªœŽUÎPÚý#€ÍʳƒÑ[<ºÆ “Q ï±™‘™ÿ
+‚ä(™$*“œ¹„"ò ]Àö윬§æìäTÜ+ž‹ký¯UÉ`ph±^22죯†¸O{VŸŠ'è<YåPA-tïAkÂúT´ Ðë™Åš2Ê ¹
+ËöÈ
+ÕáÈf±ÏöÄnœ³m5ú`âAYù£(ÅƉ«ª<9pÃqÕ|¿ÏhUhËz î¯W·Çßàˆ‚O×HdÕrÖZ7rRÎòÓc¤h¨ÇŒÍé©š”Wo\'pf*Ø5Õ…ȨÔkæ¢<10AŸÊW‘Á_|»ã:¯Vç…’¬cÍF [
+!öþ}“ØûžÚ 㹌?ñ´ÿ
+…iMÅrõi„ú„ÔÝ0ñ£‰Íâ,±—±ÛË7ÚHãöþ"—åòíÍj]:fÌ¥Fmƒ<“rlo®ˆ8žËý‰ÊdÈÿ
+•È÷ŽíÇn@âð(+ÚëoNø6Øf –”ø’ŒiᩯÑfóy8ç3°÷óßÝ`=¼¥6½h`·Ò`xý5ÅüP:ò^âL<ƒTú‚ÌYÚÆGQå‹L°2ñÌÀÚ+ßø¬ûšêH±ŠÎNr™Îs8lrÑ’gÂg,Íõø«Ô†Ú —“µ##â0³”:~>4£m(”¾Ö¨ûprôÇãá‹øòWŸÏÇ =ˆYœ¦©Æöh†æ_ÀáÄè‹Œ>«>hÓ]' Å|…–® z‡ÁG …mÎêk”]éáæp¨åŠw'á`ýë í½¤[y¨˜r@ —ª21ž"Y©Ÿ‰-•ëûÑwNÝÅãò–Ž>å¥Fز7äiÛ–³X±Å›Æ·^{Ý !”ì‡[÷»SÁKpÍ\Ajö‘ƒ\3™•(`2Ǹõe^ßÚ­äò2®s#/¨!…dÌicáNQÜ®¦ÎÛGƸéϳ„Ü»¹*éǨ•Ôflc¨§\P<‚b$Ísù-Ì|ê“&=Îâ#¡ÿ
+ô¹’Ç ¦¡þ ¶…r-Œ—Q˜ŸÇ„3¬ÉKqrUDIóÛŽˆÅ$‡o¨A/¦rD¹.ªxΠ’¹¶zÇñ +DØä;W…O
+Á¸‡cÛñVyò„Kc.)£i_‘@2¦G¡œÏàp×U*(Y ÜÕäê G†"éñxÚê•Yfƪӵ3€Ò˜‰uŒ&gÌá^Å!ŒD
+Íu3NíÀ˜ þDàŒ
+¬3I‘’Ä
+îÞž«#n]›„;ˆ3”ØI£|QcÍĉÜÈêÞ–µlcib›"· ƒ™Da¢mIå N§ð^¬ÔÕ°eþðëþ˜ ä÷%ô7 ÷>£T‘¼ 0‚uðê|0à”ˆ*E€ÿ
+n?NžX¨w£ò9ÛÅâñlã›ÚÖ3W ®ÚÛÒ›s˜ûµ8^ *ÉÎ'ÆÄ>½{´Z_0øOxøEý¿‰ÞMþåÛ¸ÝÎE«pZ9k¾ åIö‰+Ó®ƒ2»bÊç¸{\ø›DÈ&@Jÿ
+–®sÛàN0HïWpÆaËÅþ‹¥î,ìý£¿wÛ?n¸×vï‹÷n-œ¸}ÈQÍä§ÝŒè×5aC–\°¸© 2 oЭ^G;'#€4HfºæY÷ÆÐ
+õí¥ ²9 æ¹
+£.³ùáÎö+&0”hCuÑ›X°aÖ@~šàá.¨3àÜ<©þ%ÂÖ'ÛžHÈLü´ÃÄÖFN!
+Áõ}³=p™.
+¹ ÄâL@;Ÿ~½ÿ
+…I ’dé†5UL‡£í ;ªäR}Ó¼*”°³x*² <“že™“<žä•ÒÕ0Üï?\Æê$âã\+öåªòö
+ÕȹçŸÚ kˆ²ÄÔÔW<‘UŒ,MÊCmÎ&`þ¦ZŠ0ãù§×D?(qùtÝm"ꕲ·$+…2A*Aƒ¦X2UŒp,n½ËUnK-²í«MlIZ˜Q$€7NžxdG.Ò\[·àºŸŒñ¹Ç™W…½®ä²ŠÑLno¦Q©é„reD™X'q%“.HâÆùY‹<¿.§Eú·á??àü´ñ{GÊù}Êù[ùÕŸíV©“×DÇn…ÏÜ~ßN¾K ®ð  ÿ
+C#)
+abraˆÝ´
+Ššvð[ã-Õ„­æшÿ
+ †HÅYrÌAZ˜ÿ
+
+:Üï|ŽO+olãlº€DW'ÜàåöžÃhù
+Ì÷lrÊ} ÄQ‡ÏÃUòO‘ö·£—i¤ÏqÏ®§¦_Ë“ÈVëÀçöé ykö²Ãí÷)n©f=3¤“®˜~l{£TÞ7&Xä)õ_màü†ŽáÛ8¼»ªÝyQUÌJj&$f3ÇÉÀ1™ßšúx÷Øq‘#KYº£wþ QúŽ*•g] LN¸W&2©²?sånm‘©§Óð\§oárí»•’fcjË4/«!œ
+Ûj2éÏã!¦©#ˆcå•ëú¬k+¹Ë›vÓ¹À ½' ÞªÈádfµo¢Ê¾«K¸Q×í"3ð?†d
+ºµÆv!zRÙ €'q;`2ˆÏÇBÕ<I˜†WZÕ¨#&-êüuÀÑÕ7·HY<®i,ª£yBwÒuëã…íu¢Û&è}ÉÍí<˸åòi [ZºØ¢@" )z2%Pr°ËCFøþ µYÇ@Oõ~XeW
+”+@¬âÎDNãmé]í©ÒÅu´P)ê"!žSôÅŒ`¹ oªÍÍ »¿Ó»Çì’¸{¯c"m d(3·È†@2HÌ’™j{^Å­iF2*Y*¹f’cñÄTä"R&È㎞£´i;´ÄÄ Ê ‡rŒ„þ€ã®&¨d\:¡ ë§úá¥Õ}Ê­[;I>¢2ü0&,Š2WM
+ðXQb1.¡€NñÇ
+Î!nk×¹›*ý"Öˆjdõ{¦Ã!Á6íç8"à§Æ1 ¾ç ÷}|,7™ÌëŽ «Þ•—ê®YµídöÀ
+8º*Ù2R«¥î¼Þ'tæ¯#…À£µñÅTÖ8œvv¯}h¨Öu˜ÍŒ 6q$À Å€Â,K¥{.²n„
+Œ‹s7.( ’ T­j¶3€Óœ<Aƒ,™æ&¢ªÀ(•Ìú~“–~~X!EÀ x¯(±—lä"5Ï¡ÄFuò´Llµ{+öž;ò_½qoäTü{Šh±kdä‘5›•¬Ø-ÐŒ4‚ôT±Ï‰A%‹5ßO‚?‘m U¼kÍvºÅ,¥fT€D<:e‡ˆ¸4YRòÈIëñ§`ˆ—»EgBA DÀË<¦BF<$˜–U@ºã
+…dëàq 3†5©Âár7§ê3«8Ru>#ì¾G&$ynºžÕmuW@˜§†
+¶FzÝ`Pë¸+4œŠŽ±áR¡ê®Ç)12ìP…ïƱŒ#ÙP;QÁ*ò5#/°‰Í?+¼€{tIWʃïœÀ*ðÙõìUki‘†æíÚë¥ïã·sû‘äüw·žÑÛÅÕúq¯Ô¬ ,,À[KGIË Ã)5K”ŸyÇÇÉ=رcÎK˯Ǣ%ÑÇ¿¥œæ¤ùƒ‹Bey¼8Ìw=‚ªñÙ¬ ¡eA¸0aîÁÈà©Û{W>û誺 Fý¤äuG¸ìÇ Rp?ÚŒEJ¶}«7 L]ÿ
+GŽgÊÏIˆªÂÃÆ#•·‰Ä› uÿ
+"rŒñ[$dK«xefÛ€·éä/"„i2¢Ê:â†BBÙãñ`C‹¦kæð™+á»DD6ƒñÂ÷HÕYÇÇ€hËMP;ç,q@^+(£ #˯׆·Zyaüjä¹]äYÜÅ™– Cå‹8ã´'g˜ïe¿Û»Úñ×cµ¼‚ ˜ùbLwZdJ;z˜¡©¶ò wÒ:zù3x,£Ä9"I,¸½¼ñë÷WpårY·VTlUµƒIÌ™‘‡Ë+ÐX*°áÃdûÓ¡üÓ·€µ–·›îóØs
+tȈŸ]¦† ™q½væuó
+ïX”äqÒŽB«ñø¶³Òœ¥ß´<SxÕ¶ê0èB2$š²O dãˆíò»Õ¿GêË#¸º¿:®0$«ÆÚÊŒöƒ:e¬áãËU(`õó2XÚ=¾ë;‘Æ^JÜþØ¥P³1é
+N@4Fdç‹qÌb
+nlŽID̸O×ö\çqâ×MÌäC«n%r 3
+­±
+üZm³}ÔlT⢽å¬Eb¬áÅb l‚c=12a ½Ë¡JQj^½ú~ˆkchÐ7uŒðÑPš# Cºe¤fº Ec_)zªJ«”#vì¤ £GS  ÉŠ •+m_ËëŽ:¦äˆ,"¨
+¦Z©?öÁÕWÝj®—ܬı’ 
+Ôm9n$Ž%Å’'
+•¯Á㆜ÜÀCq‘eÈÊ×Z”öÚä­³äbÊ„¹'EÔw¯‘ö_mìý¿ãÝ v~áÃá7»s©¾Æ=ÅÙË,C’å
+üÒ¶J•±ÌVIŽ¦F£)‰é8V겸0 ζ¸¼¯l
+QLH‘™8­¼ÆëèžÙÁ€1g_ >'Íâ¯m£¸¨PVj‰Ü
+Ò§å]»ˆ§mÈ/¹€ÈBŸ¯†zâ¯õe!ܦNf– Hü>?t“|£—mLûÐòLä%Wf‡‰úà.ÁÙFTãé»åM
+?`ïw
+
+òùŽü
+ß};,b‚ã
+m ¤ÀÞ_(l ëÜŸí±õÃÎDÀ‰%·È~h¼î}'‘ÇÇu+“é†3ñ8F2Xª×ÉÆPÝaò¯oŠÈïÝÞÅ?¤¡GµíÅ•ƒ—_Ë‹ùµZ9ŸM¼­Û°\í\wöB”u/ê@à…“Ôå‹Ì:©ÃÃ1ˆ¡mñHYÃ5.Ôrl‚êWëÒqÒÊ–x¢Â¥¨³¬_Ò¡Ý`6°õ@#.¹tÀN{Š 8Î0wTž‹œæ6÷jÔ•­†éòÅ°EÖp‰.½#_rc¾´v áluE…Rsf€4Èu8‰¥ÈE‡œv¹bÃëø,^hUA†ƒrò8p›ª»YÞ¡(+ÏÒ™‰¨Ã"ê¾V¯EëkÐÑ?†8ÀµS°å !5!·0hNg謒 V¨¡Ô¬
+ÎÀi&ý—…õƒ¾v°gˆCª©Ÿ
+ÂÆUR“¡¨ŒÁ®¼=΄1Žžxâ€Íc·YÛï7­Ç»-•~aAG´{Þìŧnݹ}ÓÓ žàieo{†o ~)jÖÆDƒ»ÃUcBàªÙTVmýQƒŠ ®ª ?3†F.•3Db¦ƒ÷WüãÑD„ž«À¹‚íÚAòË#é¦T Ûgi!IÏ®
+Rpº)Ž×og«¸ÖÝé9ö°ÜN+¥wTìÚÖ+.OÈÒF=ÍK«¸F!'›˜÷SÁ'µl;Ì3”msËÜ«™j¼Ô¬Ë‚rÔâc%O!{©5©¼HÓ¬ý1;ZÊU‘!B £ÕœÉFYb6êÕ ÈM^ÐUµG†$uE¸ÙAȈŽ¸âT€½éÞ €ýÄ–”ÀHRH
+ä;€Þ¥ZQÚ&:â¤ã¢ô|y1Â[ä…;Gµó+î\Nsw.9ä[ÆâØ^ÞeòT¨òÜ
+Ì#(•É÷Oíîi; 6™âŽX/KÁ:…ÏÞ!, 9k ˆˆé”øc3, שâL8‰·Õ!]AÄ0ˆ##Öp¡¡, j¶;¶ò;ßnã|ƒ’üNÇeõ¯?—J l®‚ÀXõÖJïeY"N ”bLEtKázY2Äe>Wª§|«³ðû¿2ŽÅÈ~ogK­^#‘_µe”ÉöìjÁ;X¬H“Ì7P©Í¨Fñ«?â²î´ÒÞµ€'&gñÄH¿‚xªEŠš9Å
+ÉÉÇdÝvô“*@ÓÇJ¯é¨þã»×¿mR ‘=x.êw²zäØŠ«›…«ŸMr'3‚zQS&U ´;'&µR®Fþ§ü0È™ÎÂ^ˆœ¾Z %s™ˆÊ'®ej‘«n²µÞ#9Q™‰ž™â®I8Z>†ÊÜöºîþ?Øíº‰¨íf†RDHÿ
+žóRÀ§¹s8Är*UÞ
+nƒg€#X“† ‡Tì±Ä (E*SœNßËMíƬŠÔo²Ã-µTÉÝâe”jSx|e,ªz-.?iýX®ÍÛ0i
+c(‰7T ;·Î={C+ÔvØN§8ž.=V?½r±í®W;ò.ÇEÏïÓ•Ožá”Œæ?¾/$€Å|ûÝý²>£ÀÐŽÍù*vļ#U€mTi†“”õ³äy‹{Ú¸cÓwe©Èù/-¹<~7¾E<töý¦ÌV¬Å˜(é™'
+„.H¢õðÉ!ÅÜGè~ãö®âœž}OËÍl£„d%†r²â Š†°3m4Å̼l‘€%¢ýnÞJÞàòñÂM#¸èã#¤GÌ­ÅýíùCsmºçS¦Ú¬P ˜^Š±L
+lÈÎzÁÓòE­un~â I ¸ïüö‘q­î¼[}‹¦;‡ }I?ùèCRµ³ÐáüN<ÌìôÝ`û¯»Fx·BV¸îÐÄëÐ…ò®ïÝ)çªÚPZ‡i,!]vÌ?†5DLu^6Hæ“È;t¸AeîÖ¢€ÛCgæG'"K+¸cq&-Ö«#“Ç¥¤šJÂé‚5?L\€ÁyÜ™FY9þ:.{ºð—Þš€Úà«Œ ‰‚f²œ‹ÐØ÷,F¡xÖ¸tK pž zÊ0ü9 4CÍàâ„›¥{¹EÜ^U^Ù íºÎØ2ÄiˆË#qtÛˆEÄê;T*SÛ‹=ÈpL¢p1’¿Éi ¤²›¸þÔWaÆYdž~>xuFÿ
+¥É‰Ç1KÙv}·‘ÿ
+÷.&þäœ6¿ÙI,ÈÌul²]:cLE5XØðÈHnÿ
+@XÔÿ
+ °LÄÄäz}#
+¤]´§¨¨fR èLa8ʆ+O8Ø|’ÝÒ¿$§#ˆ8ä».dæ:Æ8t0ÈM½“Á»¹ÑWqæ§i`ü»k{R±°‘(’ÆL ±µFy
+E¡”:œü3¹FQ¯âÉ&œö½—Õ{?È{?fuâÕÂ7r½¶ ‹'ûl 6¬‰Œy™ðòå5“ þ‹Üaþ§dà6„õoŠ•÷^mÝÒªûÅÍ~`Ö'#»íe—”bôx[cå ªå÷ØÑζGî]w'º§€Î›g^Ý
+2 T._¾wš{mªëR‹C¼É®.ɼU#ûqÂÂ"ú•NO3‰ÚjNçÝPr;Õ¤YÆà1*zm䨌ó”¯ño„Œšˆ×òûŸ’ôPÍ‹†Í\Ò¬aÓ¤²û°øˢͷ»ßy{¹¬_Ý;ͳ-î™#ÃË 3”¥[ý•Ñ1‘Ö¿ÚË»ü…8I9c¥LgÓ,7fäü<Ó
+ÄùÁ{ëÑ#Éî<–©ª¼E”Z`=&t‰éã‡ñ³œyàV/6>M¤T|‘û¯ƒÝxƒ¾vD
+hÛ_uà&¼wcÄÿ
+­›1
+ñêpØÁÕiä ²hq”^ƒòÄW9
+’¢°@23Ž
+X*ØÄ®Y厒˜ Çì×,‰Àºh\;*¨9œŸs)ÜYTíÚ`æu?áŽ!@,€ÕÆ]c§\,”á%è+3âUs²±5
+•T6üýÆ$AÒ F^yâEû—R—P„4yuĨrˆ§Çøùã€A:•rª@‘1¯Lƒ¨‚Ôc.ŸL ŒI³ #óÄî\Êë`Ïø`„’ÌUÚÔÚ î'QàtÁïu›)‹^±Ç ÞÎíþÔ»¢7F“N"‡E&E™è¬¶1ŠˆÈLežÇáЗ!y›rb`OÓë‰ :€P¨×éˆtaÙI×ê|°6*¡’')×ËôDcUí¥žLL}<qIR+RsׯýðF. Lª²0£HÏø`F$êµÐü‹“ƯܾÂO€œ°©ÈDl¬b‰™Ð’â='Ìx鉌ÔNžÚ¼Ú!LËuÿ
+¤Ô\‚U2A¼Áb3ž˜‚È!ŠD‘Ò—×±C¢êër¿qèzâb‘8µûžÛ3W¨=?<4i3¦S‘@¦TCèO—Ž $ã“¥¹ÕÕe)w×{–R…¡„™¡œ°©H«¸1$]rܲág'=~¸­| ¤¿U쩪âH\„` ‘Ë„>m\ÂâÝG-/åÜ-÷ø»M—>–Þ3§\U$ȵ±ãŽ8FB@ÊNá•­]]erî´ðÏ
+Oé÷û››¶Æï¬`2c ü|²‹VŽì¹ëi±½P¤3>_–2²b.½g“G4‹fåRU@e”D‚Hñ'\7 U^dᑉ¿oª…¯ŒZÖäØê¶ý:"ndˆV2°œÿ
+€1Ÿž)åŽÐÁhO˜y
+Þn6<ï·à´hìžR{w˜Ë ¦Kž,P*„=¢P–ãû£qû5|š¬·šEC‚²ƒ‹™-¡ÅNVIUë=«šµF«½|÷„½½ûwh­ÔÖNû,eL©
+µ–AÔ}²
+Fg<³Ãq€ÔUyd™륿uœvÕöÜn“žJ"1\LnïVaŠLæË‚ï<w]Êâ¦Ô¥wÛ%A\ h$O¨Ä jã.À¬\ùJP ߥ¾óLq{W긯¹+XR·4ÝœŸ\ÉR
+•V%£/à±Úî]–ÜÕÒÖUÆQmÖ µ±
+n€2‰I2.È´ä½<7¹*ãr{2D/
+]ˆ 
+ˆm§Yÿ
+éÚ½›³I§Àkõc,dÙ>`ÿ
+³W¦R|<q9 ¸ÙŒK:ãVYYª…`5'¬árÇÑ\ÇÉåd{cÚˆ^F˜þ?Ã>;®Çî[Iù&x<÷&Tå@OLN,L«ó¹DIJÝö·Õ]6¸¤í0n‰Î$釜@Õcœò GA÷MUCÔèµAC©#YÃ
+O9‹’”EØ©ññf19 wD¨§ÛèÚn`íYÁ%ªÈæÚèHë¤â2´®(¬à˜${¿ïª”ìÞô“œ8A®}1j1Ú(°ˆ3›~ý¾Èj†¢^Û
+,”J¤ Ò:(ÂÌGGZ<yÈ)6×ÃÂë?Å£“È<:›r¤³8_뎌ˆB±“g- ¸ ¹%mA¤ÖJ# ¥3̃0OB3Åû*VÎ*â-ݪƒa­¸ÑýÆ &´l€9 çFHÅiq$
+íʶڪ¦Ãºº
+†^ÇqÏÌâ# :•3™  GªÀxöÛîJ”oVèÎ@/¬à®R˜
+LÈG Ÿ#ü0Ë$Žä:ØJ?ô«ž„ž\Í +|vÜκßÝ?™|Oæç…ÏøgÆ(ø¯nãvþ7‘ÀãØö­üšP-¼¢[CaÌÅ ˜Á“¹[^óÍÁÈœ}(m
+áq/#Bê¬åÇ·NàA« zýÝ©¾æÝ´AÊËò.¾ ŘˆCåqøÅUx¬ídØ
+¿ü5—QîÐÊ“.ºâ6ôKþàŒšH|×Ë~@©Ø brÔçÓv\ÀŠú3ö§÷§“ñïÛNáû1Ùû?¸s;©´ÕÜì5!RÊZÈ@ô…È“ž0yþÏ™½s&©áÛྕþ¿þûèpÇ3,(ĸŒNà_p?ñÒ¾nåðžZ)°U-`
+œäeÔc|‡ªù8Œ¡z„âT%
+KÚ€côÓÊ™ÈjtO/ú
+$ª’Ë­T[xæ±A€~Õ0^˜®E]HÎLD_áÛâ³îæq¢æàÆcÕéëŠYf¬Xg¸tHÉs¹\…“¸§¨±=Ëùb§¨%N‹b<ሓ*Sê»ÏŽ÷Þ]Wºú½ëœª®ìÔg¡ü1̈œjQû\§Ç䃌=k
+éUÛö®h´qùºÉÔË#yϦƒ3ä˜+ÙâÅ,ù%8†Pi^åõŒvô«†ð£P]t:b‰äŒ…^ÇíÇŽwCù¦,嵓mˆYÒFè`ÀþxQÆd½_ cƒañ>áÀîV÷]häÔgq0xœF\&j‹½I¡ˆù2ä¿s{ßiî|wâ‹+J¨Ü¬„´|Î5}·ˆ`krƒ›î&a©O¯zøo{î\.5¯W„5 ƒB\ocã¸êUÈœIu\í _?’½Æ›=ÞMaC)'Õ3œ"Ÿ‹&®ªçÜ!fNQÚ,æq¬wEg­‹oÌ禘:Æ,«œÐž]ÀÑÖ_tàòÔï“î ³êóÅXãrµ$D!ö¾;Úå
+±¾}2r‹ k`«ÌœŸÆ¤­ZxíSí­ý僿ô 9…#ÃÌÁ ‘l˜Tý’»+Ée`ª|<0ÑÂÄäIäW¡NSo÷7ØÐý¹É‘ü1ÒŽ‰0ÜlB²÷a]¶Y¸ YÐDœAÅFMÇ22¹e›Èî_ÖalÇøåþå,UŸO|bcªó*w#]Ä1ÈR»’&@Õ¿v9l“IXÍÇ–LRž:.Àå»›p®°”Rg|+Hç”ôÅîalbAygãòH—ñïü?"î6÷JÑQ•H°’Kâ£(×LjÄä«\¹ çÓˆ`ïSöT°öZk®—ªÛ96m
+kê$##ˆŽL’' V'ÀãcÆ7IkSÅ' ø(y\o¾¤ª $0AbDF2î-&e•—èÅà:V­Ö–û¬ßù/mlàz½‹ kÿ
+Íù2¥èQŸÜ nüHñËxY6•ï<–={~+™øÿ
+/ÌË<’$õ\o'Šw’G£Y&LxbÈÄ
+èòÈ _2Ëé®Êª/Xx ÚG¨
+“ušûìm ›,ò:á1ˆ*îI±ujø¥Y]Ì ”ytÁÇ\ Ÿ4˜´Sçmp•ÉQ”ðÅ­îtp±r¦ËÒœÚ ùøë‚Qµì¨lU@LuÎqÉ‚®·³™`?§ ž8¦E¬Ê<|~¸|U3OvÔãr9Ôq¹œ”âqìer¬Wu­N¬ËXf x8™Ì€HÜ‚„¤;A7éòEáñøüîu<[ù5pé¶ÀË´?·R“Ûb³m˜àç&‰ :8Á˜‰ nmù¥¡Î¤IÍ|‘Ï
+‰  ÖÌô:O‡ž'qS´!Èa‘ÈyuÀo$¢ôÕ,¤_: ÎXÀÓ é˜ËYïIr\!E˜&7f/‰Î~˜¯:+¸êE[›9[·‡­y,zM„íõ;L` š‚êÆ<fCqQŠ¦¦ èv¨0"`Ì,q²}¨âpoãó.äókâÛÆ¥lãÐÉc·*Íꦴ*R––5Œ&d‹û+xadY…;ÖrÛYÜ-]Ò¦
+h;s3”ê0¹u±b„¤±ÈdzœJ‚YX&Ó-×\K(Üêc(#,IBè×ð/£‡Æ繬ñùfÕ¨-ŠÎ $ßX%–we¸ é€Ü冉ÒÄDD‹ëÑ
+.î„Ƹ-U{‡P
+Œrâê^u–ý¶éãÉÚ'B|?,ñ®Kðœ%Ãk»ð,Wl²ÌÇŽ Ñ]ÆwÚêÊŸ¨ o¥W2OòÃ#$í¢ÊçÝX´­'h“ ôÂæY_ÃEVQ<t %Ìÿ
+ÖâÕ¾rÀ}9 ]qγòɤÁj÷O’ü“ÿ
+ò÷:’T†?s WÏ”€Ái`àFRsT¯•o*Ûx¨î•©w
+ ÛXÉ‹€LN'xÛTŒ<IÊd?§q7p—ÞUf¡àîû‚ô
+•s B;¥!´~ŸT¿qç3]e `Xt0g9è0p1ˆÜésÇ)ÈÃoƪží DØüpÇŠQ˜ÝÔùâ¶NGÍmðø@OñéÞ’ù0ûLJIûL!ÏwQ'-qg…Ï%GÝr“l-÷Hqkçó쪻Âñ¸‹>áV
+<N˜ É21r–ä-vÃïòÓ ’n2Emפêä
+Y‘ti+ã€?Tè•A\ˆ˜1‰î‹s!µ kÓµ›ªt9c‘y
+ñçÓËÊS¯·ŽéËý(±)”²ÃeŒª±Umdnb¢HXs9 ¥´;&`Ǿ[]¯ô•ZÌ«°e©¤ó‰úà@¨æÊTÈf:`K5Lò9>ûVéU|vª¥¬ŠA]ûAÞIõ7\s|TË#³£'éîǛ٫øï#œµv~ò9ün=€÷ì­ö²©bÖ-j
+êõÛˆ‘Ò1-UW"$1Zý¶»xÄL´A‘þÜgòd&ºGº»«¯ŽkØÌ&F³çˆfªÅ1&N“åv„¨ €ºùý1
+Æ.Y4CâŠén˜"Tä0,+ÉZׯ’À…R
+­Î7'UÎó)äñ¬þÊ‘:0ÍÆÆB«K´?'g½Çµ¨äÀ: :”aø© à A¢QäË·@±ù#zO·î3Z*”MĘ@>˜;*²œ¤‡În?%}€£q_P>X S€J%×Þû2ÔÌÛAAœ‘ é„d Ôðùb¹^_|ûoéŸH(ÅiAÖöC]nün‚Œ)¨äsÂ0ìk+ܦãq²îkìëeEI9þ ,¼¬¹d,®åÛhã¤n ` »ÿ
+•íáÉÄCcëâ²ùýÿ
+=T×ÜYmbÎY·¬¤ÿ
+Xd14ÓÏ Æ
+®È
+³©˜é
+ùN·#zY˜¹p4ȘÆ.]Ñ7^߆c´7ÉjvŸ˜÷ ËÅä%D®®’ã¦Þ‡L5LÉÀÅ0vèšîÂOê\’Ï ‚=QÓÏ,kaÌÑeæ¹\mÙM ¡ÙÝ/¿Ž‰ÇFD óý?í|ð™ä.µqbˆ‹€ÝèÕvöZ‡/¹n«Ž¤2ÊDõœäãŒJ¡Ècºe¬iú©~ÕO"ÇäðÞÁz¦ âc‚X@Ýt9}Ê™åÑî½ÈíÖÑÆ~*ZÇ™¸IA@=F'y5"ˆ‡
+Ðu
+ž£
+x\D*Û'h,@ÐN›$a)X+Ü&NFAyiø¬ŽmwQ{ñ®@—RMv( †>&uÀD¸p™“„ŒMÅ
+¢D®³ž $È2ºÉ Fqþx'@ËÛUˆþX” ¦n°\A¥@"¦Ô)*¡K'6‰>xèŇUÙ2n6oD]Lù`‚Y(üŽ:S{ÑU«r©u
+Þcp>¸áPêr4M …]¶mØO¦AÏÀL<NÍTÅ™NÈ‚@ƒ¦ ­Ê²H=|8Ý*kãIÌeâ0"*%’‰ÁUu©\:,«ÊD¢mPä"`øýN!3uŠêº»­AuJÊÏQ%C¨2VF`”Œð9"â—LÅ :u@tßk{j3©2“ž^x["2½‘Yx‹ÇÚÁÏ4X}R¾Ù¬,÷nóˆÀ‚~‰òƒ%¬R¹™‚$`ÝpU!U
+®ÊžzØRK‘; õÃH^z|p
+§3·÷øËÈn=£·¦¼§füòݧñÅl“‰“=UÜ<Lƒ¬"v;nc·Áì‘ãÖÕràª1³=c©ò¶‡,ˆ¦Ïh·›g½q,íÌè<>˜LâåW¨ã‹ _Ù8a8J©FZ“瀛ææyºè;Ä­¿˜%7(]ÍnŠ‹þâtŒÎFQª‡“,ÞH_·Ñt]LJٸigaâw:y€†Ûn@^¡c,B0È‘¦(áÈwÊiÞËÖppO„£üwík?Uòn÷ñ°ónåzƒ•ƒ-øÀÐœ3‘Ž¿Æ}ýwÝŒÙæ¦Ý‹[⸒½.â´ñœ½•ö±Q
+p
+Dï2­ºöÓ÷OÓdzŽŒúƒm0r"˜Y€%YõŽ8´ì·ÿ
+vÔ!Ô IÃIXÙaæªú÷Gä‰ûmír'ÿ
+%—™ÿ
+:ó<¬"3Ü .“³µGŒv¸ „—B`ÿ
+¨Ö˧Mq¡ƒ”æ«Ìrý¿hºå;ßÇ9}¯v¦`@õôœiâ䰧Ɯ+Ø®wŸ[£YD±™rˆÃŽRCÌxšBRJò»u½½rèj¹"0*J¼2“0`‚}q\H º¿8J@Å‹?ϳ¨jž» ³e]b'<°¼˜èíUk‰žFLôüýŸ€8žÛ$— $ê
+߉Þoá[m ¼g<bü]¦¦¥•“&']Ç\8y_½+’HÎ`HÚ<¾[SÂç½cZM››2‰%ly"N¹‘€ž2B³ ñô×ê4¢¡ KÕaÏSåpxñ…W7"P'mŠgƒÚ­5ƒ±Œ{†2ŒÆL[õ,³2a–`A·U«Î¼vÎám ¾{È‚ÄxŸ.˜î8;–G»dœG¤ÿ
+Û¶œþ™âw.eå:×ü1&HHD ˆóÁ„Åx=˜—]uvr߀Ëü°.…QëÚ»‰[,º…½SöЉZXw,úæÚÃÌôÀ²!„Ÿ
+q15G, Éª¢ÕY–¢1)bRcòªoqÍ =1Ÿ)Ä­S ¬^ëP"­ôª¥hÚ
+Á À’ôM†)j»_"Ûy®vŒëB—ÈÃåhÕ8î/°Ò\€ÙÈ\‚«´;-îËÀãqÀTÍò(juÏ ˜e“ÌÏ)]}ká|;ùŠ
+j‘
+¸#¯\<T/=ËÚ –¨>ãÙ`¨–£ÇðŘ…—´Š…NGíÊÕV`@S¨ŒsºtdîK·Ú5Ë#t¯„ë(¡˜âgéÞ,¬
+1‰“Þ¡í¡Ð¥êv”f3Ác®¨/¥ W™îSfÐÒ2=pqï ËkÛ½ÎxNãuÜ)°µ×r·o¸©
+A‡™6$%·U¥_þ"ûæÀªàÀÈ–Fþ™×ñÅ<Ù ÑnðpIzÁœ=š’7¤·µ`ܤœ„¯]p¬32‘­óxÑŒD€ÐÕr­Æ»Y7´ˆÜ|µ'›L–2l‰.Pêár¯p0›™æ@‘˜éËçŽD²½ƒ‘ÄÌ—¥‚'îµY
+v“Ð…OÛc%$ü>ös)‹>AÎ'Ú¹ÉSœ¤˜=P6ºÇåeÉŒÿ
+ÖáßeÆP±XoHé·S¦+͈–—&3.iÛ±]zT\¡aý1+‘:ƒ®¼ëCúñ‰6¯Nÿ
+¹xàö.õ^ê­¢"OŽ9‚%ÐwîõØøßã|W²ÑÄæ²®ãÉïVqM<êùHKx"Íì„lÆ^¦Ï,QÇŠ^©É"ãµü¬ÿ
+ý$Nk§ž îQ¸zâ]ÂæRª]¡9NBrâ ÑpAب=uÄ:⤚C݈Òd}Óå8‡%LXê €#®X%¥€éœu½ d1¹—‹ÿ
+!¬¶qÉÅQûXE}Û “ 0q •Éruý·çÿ
+°xÖ§nçYî F*ú†±Rωƒ®²¦aZÚí+ÔsQyù
+°NvN0ïÝξ×Dzš®¸°G¾Ô¦©U.w;£!Ôæp¼§dw~VxžÝ“‘’8à@'þDDYêMsŒxçÕ0Td<F$¬L¢VAºÑÉBPm*u#!†©F[ë 3 Ä+
+«­?X˜ºvžË™Dv¸Ö:yOLA.«Kšb¨´øµL;’NE›ÃÇCÕgåçƒ`ºNÝÚ,®Ú˜FÌ銹*(±ù\–pn¾ÛÕxßå~œR ƒî»Ý%Jý2ÏÙ$ùáqø2Îöî0™É”ÌÆQü·#ó\+‘_ö÷, 4
+2Ê5ÆÆ7+@cx° ³«ç@äÔPl¦_ç‹
+¥L4 ¡sÈå1×çêÔy0”@ê«ãÑnÕ. ¸ ²q‘ÖpPÆ ˆXüþFX@ÏúëÕeòO¸ZË
+=Išh•±FÁøýq™ÕEj¬ 9Gõ˜8€ÊdH4W²¤Ï©òÁ€‰•~g#‹pã8žÍ+]åÜÝ`'u­¼˜$!}9`"]Uœ³Œ€`ÌÞ§ª¢=‚B˜Ü Œ³áŒ
+@“;!\ë9 B˜ ¸›
+v“®ÉÎËNÿ
+ø` ”údU6W3¸”stÏ, š1Œ:kµpªîÕ÷íçñxƒÄnUtò]•ùL®‹ìqö«M¤6à  ç„äÌCQÜ«¼~˜‘Ü®½Ã½gÝ×Ôr,’L‘Ó“¶²wH‚g?/˸ժ¡°¼F‡S†“µ••7Ÿk’
+¬ÈÔu–Ìä3™Èx 3pʤ–
+ÌWq· 'iÒDä.€†4TuRe¤$‰a¯ž"j`kT·#s;1%•‰$é3â+ÖVDܺTˆaÓ?–ÌS„¨Ëõ¿&ëVÂÛ¶íÊÁã:knªüõŽ
+äb®ŒVHËf‰±]zù<{Øß]B” É› !B$'9Î2ÃLÙ‚Í„Ë€Áõ­tY-S*ç>†uŒD‘0éŽ7$ì5¼É_LõñÄÆIY1‡t¯'™z¶ÍÒƒ¡éåŽÜA¢v,1!Ò$¹ Œv+Gùœ2€UZ
+kh;¬°äª58NlÛ
+²gjƒ9 ÁÄ2ÂäËq%®¶éî5ÝIF…dûŽ¸í«"|sèHVÂUœã&[p {A
+ªd®zÃKÕ8sÚ^h°.»$ø—7»p?ù YíËÈ^3
+ÊêAöÀ9q…à”­eCÜ# y¨z,î_+´žp¬ÿ
+Qt¤d\”½ÕæFq9牔ÂI{8ñt8øä@»k@*ªÁ÷&LõÂgOur;ŽGXþXD€V¢êü«8$†á •‚¶\Ù°{Œ ·tÇX×
+‰-Tü‘‰¬{¯õú¤K Ë!'\A,¤D•W´ñ=p&JDPg1™é…¦¯ܪì fû¶‰Ìƹ`dQ š©çQM<»èâ^9|J¬e«”«¢˜WÞ¥ÜÁÌ`A$ ™F2 ªiä[MVU `¹6zÀbž Ò“öœ¢GLs9B20#·Ár€
+ö¢
+‰`©3:Ÿó8u’ÀtRŒrŒÆ°pÊ¥8
+­˜Úr8â¸!g ¸T¨棈9`+¹á{€Ú=ÏovglÆèé8I»þŠÀ”w5v¿Å—ëŽãÛËï^IjéØ}«¼³´Ä<iLl¿<psÁªX·`±øÜj·ÚäzÍ ëLA½¼™Á­O˜_ÞþWe=Ó¾r?SÉãq©áÖv"m£Œ›*X@£Ò¢<p˜q£
+F‹‚²¾GöögÄœgᎨ¯ÆQ˜ªßàó81Qî&ÔãúþÎÓf@ÁPä |pfE©uK d}½×ú ~§Ü™†ß˜˜Á’é~žÚ!“apä øcœ"
+°Ð²N$ºŸPH
+CŒÛR0,«È‡¢Õ§h¬õd0²»§øˆ ¡„í1 ªe4Lr/ªÄ²¢3
+sÓÌ“ŽW?Ìã¨ûMb éçZør1ªæù´r}ÑY@X˜$œž ¶°Î,î½Ìøít]e+rZÈŠÏeo¹ ¨`hb`ùâ¿ò®dÊqOi üKŠŽÎ¹®]I[3$¡ €~£ ˜W°Ì•<Z}è¡®mßtéÈâ–UÙfÞfZÜîÓÍîTðÇK'»Ó©p ¬øuÅ9D$AÕw‘üžŸ¬[.«·‡¡ÕŠ¨‚¤sëÓˆ ã~MSÜ1Ãj“’œU˜tòσ ]SÏ)¹‰ BÞÛÛ9•“iowfÝÙxa¬J§NLf–u—Ú»O0íUD³DË,dyà6—¢Ðås`Àu‘òŠB‚ÊeF@:L}N&0îµ=§—9„Ñq£ÜE•¹rà›ÓiþÙÝ
+ø„±Ãm‹QS—Úo²¥ß´X" Ðõyan"ue9e…Óœ./.ž5bÁí‰!A`©‰9Á8²ñ%ÂÆ”rB$_Z|ÓœJûµ¿ûK)U÷]·ÉB€uGÝŒTh³„9;þGäɶU§‹JS›³3[»Ä €ë瀔L‰è®b”0Ä=ßÌë›æ÷+ímÖx
+þ.y}ÛGzä;§ŸaéY¯Ž¢¥ Z‚ÁIÍÈNzæN5øâ;\j¼‡7&Mõ…>¥3Åâvä­ ÷WW çedüuס‹Ė²µ<C& It]otâ+ºÚ­´JfsÐȈê4ÂgRé¼<“ÀZ–GäÛGy"¢Q®$mŸ/$à¨ÊÉçKa”ˆråöÏk‹r2n,]
+œ¾1ªÖ´8*fIÈ‚C‚ßES›Ã©íú¥·'•]J»îÝ
+I_R‘ òÄcËH€
+Ñäp2`Ç “²]÷Ãâ±íM¨ 1>}|0ÓÞ‘ Ì59ã…6½Ñ•h
+âA/PýDé¦+H+xäY’Ojnˆ&2Œ&ROŒP·3“¦C”ÀY„àû<Ë÷Ï'ÛSÃöŠìß¼n÷wg·dÄgº:`H4L„¡´»¾Ÿ¯Á.w(6
+‘£Tü@¼ƒŽ‡ôJ%òc§ˆÄŒ•K”X Ƈ(ž±¬kŽ'E
+Ù9:†DS"X®W½S_ݨ‡Ü$±n‡ò–²ô<,›Àu”oVFC“É ¬ÆQhÊ
+"ñjÜ
+ä2Vâ[ $ˆ?_® —˜™¹Ãäpª¯“ï«ØÀ`ÖáBY¸K8ƒ¸@"xÎd\2©à]©Ý_­ úK‹*¸»Ø“rÙí¹fA“»ÒœµŽ˜(ÉÉu_,
+鎧ϹÒÿ
+Ï Ïår€J[ôµÎÑ°úbŽhÊ&‹{…ŸX´´Ožp¸"M$§k,àqRY'*£>IÉ _²÷VàWú{md
+k[Á>¯ýX)ãﮨaH¡†€®¿µTüº½ÎmTî¶LÏ,@cüR³¾A^ÖY=ÛÆk]ž­ˆº™ :e¯LYÇŒB±ósD¤ÌÃáø,úo²š¿L¨6g´ˆþô˜Ïáˆ\¬ùófûbÃåu©Çù·Ýíǹ\„.«B:ë]ÕC›Üv%Ç^>©ÎOÉ)³ˆàä®IX3mÐÆ¿\8…ê«ìb1v­z÷ö²ãùvñ9lÌA~IXëºsð=1­ŒìËÌÎ',ÌnÁeò-±Ívl€€@xÄ\Â!•îy'tï@å÷&6«£7º+eœyã4r@¥—ªµÎEïDÅ=î·F[Ø8c‰&4ÈOå‡c˜z,žwˆ—r;[ðT²°¶5Õ8VX1>9ÇŸž.C+Š¬9ñöiÛ°^6°•}†V¸Y(8d$×N8Ì¢6Šš[ðF[ö:»z]õQ§Ó $»¬ü›á?âµ8Æ£Y*=~`™ëøc9&L½O ÿ
+ŒÊ$ A(ÀU÷›iPLü5×z¦Äh„àfCeÓóÇ9D*…õÿ
+ÐNÖAÌba't¬˜ÌZº: ¶èƒãþ˜3KÿÙ
+endstream
+endobj
+1082 0 obj
+<</FunctionType 4
+/Domain [ 0 1]
+/Range [ 0 1]
+/Length 40
+/Filter /FlateDecode
+>>stream
+xÚ«6Ô³PÈ-ÍQH)-P
+endstream
+endobj
+1083 0 obj
+<</Type /FontDescriptor
+/FontName /YUJZIN+CMTT10
+/Flags 4
+/FontBBox [ -4 -233 537 696]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/C/G/H/N/U/a/b/c/comma/d/e/exclam/g/h/i/k/l/n/o/p/period/r/s/t/u/v/w/y)
+/FontFile 1100 0 R
+>>
+endobj
+1084 0 obj
+[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+1085 0 obj
+<</Type /FontDescriptor
+/FontName /JGEMJC+CMITT10
+/Flags 4
+/FontBBox [ 11 -233 669 696]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle -14
+/StemV 69
+/XHeight 431
+/CharSet (/H/U/a/c/e/exclam/h/i/m/o/p/period/quoteright/r/s/t/u/y)
+/FontFile 1101 0 R
+>>
+endobj
+1086 0 obj
+[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+1087 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1088 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1089 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1090 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1091 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1092 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1093 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1094 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1095 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1096 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1097 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1098 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1099 0 obj
+<</ExtGState <</ltr#40opacity_1 1061 0 R
+/ltr#40opacity_.8 1062 0 R
+/ltr#40opacity_.6 1063 0 R
+/ltr#40opacity_.5 1064 0 R
+/ltr#40opacity_.3 1065 0 R
+>>
+/ProcSet [/PDF]
+>>
+endobj
+1100 0 obj
+<</Length1 1813
+/Length2 11671
+/Length3 0
+/Length 12804
+/Filter /FlateDecode
+>>stream
+xÚöPœéòÀ ã$¸» îîÜÝÝa ƒ3¸Kp šàNp× ÁÝÝÝ-®—ݳgwÏÿûªî­©šyÝý´=Ýo ™Š:“¨…ƒPÊÁÞ…‰™• ®¨¡ÁÆ
+`eå`feeG ¢Ò
+Ì..Œ
+0}«ð¯úœÍÁ Ggfgí5²üáæ­Í’öâvv@{g„?ò“
+ÈÅüãŸóßkxón ²ª88ƒþxß
+ø¶QÿQÒÞÜÁâÕcç☂Á¦ž¬oóÅÎÅðf{ÛQ  ÇŸ£ `a¶wpy;x«Î`é
+¿½ÿ\зÑø/ÿù=€æKóæÁÖµÁmwÕ¢„îL{ãf¨ö´S蘼—À?\Pà¿ÐUem€oD¿ u£­îHÒ^‹,“>{Ÿ4×ǵ$ª¶>ú<Ç«Míµ",NâôOœˆÖõ¿'bÒÙ÷yvòÑ
+´n†ì£ÊqråEQÉüsï•ö¨ë+] ßSݯâ–G|*fŠÑŒ6,š¥Ê5ËœÃ#‡sa"~Gqî:{}3ƒ‘=ñJ*Ï€à{ÃñÍ[o“ýóýœ×Z¹»s'>%¾1ô5Æèµ·ØáW9ÜïâÂè Y¬tÌ£}¤>#d?ùõd1pYmÁK|Ò£”¾­u,:=Hï3öÔMékOPð,ÝÝ¥¤ó”¿ö톽¿ 3X(ºÅÂ+yzïo-Á\ëž\ËŸü¬Ð÷Ö·Ü~°½Ú$¶&ñæä‹¥GtµÏÛéS`^BYãÝc=qê8ã±ï¡þ£¿Lò̾àK**fAZ#ÕPüu &§Áû*¾V3ˆ÷]túCøËRš+ÌNû/œ?sGõRxå½Ü݉<m“&
+e¹Ì0šH­Íãêa—C¡¤F2&òdÌ•Ê×ðßQˆÈ­XTŠLµJBŽ)†Üv—æ>Z SX1Ô>œ|h::‰„™ÕË 3õÿÞ”¬M©t)å˲¼#¨WÛ_pXÖ—‰C(9öMdœ:'F±›ópîö9zî+*ÞGG˦p%ýŠ *±§¡áË*©na+µTù’:ȱ8Aõ• ï¯¨±åß>\—nëõ$.VSø¥ŒêÍté-z{ VE×†Õ jSKèÇÏA¤Sc4ìµÌ 󵆨øÞû¶ÇotôL™^Ï[3?Çä,È6¬ÙïÇßõ»ÇÍ(6ÍÐ{Ø}ŸÃÙ×­LÆ:]Efïa–Ç9Zz³Jtúp‹”de
+³Tµô™˜d¾+R…Yª–Ÿ…¶Ë°½1Z¥Ö^ ÀZð&iÊ;¶“ê%XûUFœYŸÜA¸<—:Ä'%ï'‹úGGƒGtUñQY%’YàóZ\´Ì0(T§&KÀ·6á. kߺOWçZrÁµŒ´-Ÿk Õq%NL¶­p+7R€óT’Ãã¨ú#†“ÕR&uvŽóÜUÿÙ]÷GÏ×´¬½Lö6}—Éé¡á¯ËùÑõ¯R#¿›el½Ð/CQ Xô3‰¤¨„ …¤Gð¢‘å\”Ð}.ñÑœúÕ_rm‰ w_†)ÑPàr‡6k‘Ü]”ó¡<=ƒkìw›?acÁ™5OÕ Hä5gsr*|DƒbÒ)œ@suRê¨æ6®™-ÉEr"hºi-Oy*/
+¤²÷”TJDéVºö`àãÝ„
+B¶Š5AuõN×qy¼á­šZz©ø7q£*®g>Š+ÑŸ[ Âb'”«tÇ" µüE´Ú4ûŒÐa/b}Ò¥HøLà„QÜÐ/s8º 
+ãtÐRP%t¬„= ù¾£Ÿt0v“µ7€OÙ¥QŸÃ'æœ Ì
+ý»Ù±ñåq‘~ã‹v
+‘“„B߶ÏÞ«?Mj±-Ü“}‚‘¥å^½Xš2ehÚõ(ƒ#– RÇ xc
+6?Çö롆†,x'ȳá]¥à¸ŽÞs«EG…‰±uh3¼Êñ)ø4UáàIÜÞ—S¨Iï<XíÝ
+ÆíÒÔ{å“,ÍžŸ•®Ürçä[Ú4qÀwjc *Øò;BñØþ«â“aÉGºP.Ü©sÁì:(æa)m&ùÄì®-ð’êÀØù÷›˜‚|ƒ7<Ÿå;+«'FHÛ#Ÿ2ê6€i<ÅASúüYÊ›â7ŠÕF¡SÍSó#ÿ±žFø2š&(¬0ûïJ¨“©ãlÑi…Úëýe/ðÅK¯Z«H%)J®p |¯Ë¨œ<èQžÒ¨´SÝ/ÈÅÈÝ‘ä^ÃÛ(ÊÝÆI>åæz/D^bûŸDšôDI×Úï7ELó_÷Í„ã„ÈDZ¿@¾Áëv†ü:˘Ç8Ò(´«·…Á\ŠáÓ|–:–«&ÇÐw4ìF\†vÿ½Ø•3Þ™P|ª Å01—è•{°Þ®*\ð
+º+®§zñøa#qÎ:¾ "Þ©aNJÉVjØxœ§[[™eÉ$Z¼c¦åGèÚþU–AÄ= •LUàèÔQz%„ã_.dtäåÁ¸ìm”0fnNßæv¨l
+mh¾Î\/w‘IÔXžX
+l8˜ŠõƒÂ˜ä}éfE£ª](D¿Ú›-Í›&g²Áõ?ª­lýb~%ÇséVÉO|Tß»0<±@ /0†çš“qÞ z¼^Åî?f¹Ün‰µÑ"ZsÝ·ÚõOzΚ?Có¥á´ý2™´'r_Õa¬,»Ñ̃Ÿ>ÁâgãåÉdÃó@¶$Ìý1Jú€Á#·15q¼0Óy[¯žY²C“M@èåß|bÖðmÆÜFÅì_ Ä"knMwÏ]á˜áŽìLY0²Æ§ïQj¥”3ŒßH‚ŠOYrÅ
+N·©%Sàx»êRžß»kÞfœr&/.÷2fl‚
+ÃtM6šé‹†º 1NWŠñôM™~-„^«-‚ëžšûâ“"¡Éºù¡„Ù†-#v®™¡ãܾÊGø’Ìf zèsÍ~ièÆ‘Zyõgø9põ„œjGä±Ä8µ“ Çç[((È%¡rÉŸµ»¨;°›}´õhïƒ'eÞ‰ì‡óX(÷äï;iG…šÆ_âW­Vàfñ;ãRÁ»‘Г+
+ŽÂ‘¤x-l[ó)ÉÀ¦ôsÅ|œ[Ce2HŒ¼ßU 1›Åîb¬²R¶§áÅz,­¨$Ã%œ ¥ ~ aÄí„f ûÓàÿ6ÕëØÏ”ßðܓ玛hL‹|%W%Lrw·NÇNœû¨Ãv['@s]< [oTè„*8Aûë·ÿC—t'b0Í8ÎtÜ‘Ôø½E2ƒm™¹7 ˆ»ÚØ ¬¥¼‚“ú2ÎîëAvPéÇOV,©­¹ÕJS?ûg4Ù…/­ÄÏ°TË°(|ueáåõƒîûÂÛgnES~©©Œ’«؀oµ5 ÷ â7OLÂ]Æ•ÃTúÓlGco4¼é X5ÇH¨Å–÷r”rj…aY“’ñ_¾(œ×'éÔ× /¯ßK$™*Áí ™b€Û8çDðï-ÚK“»’ܪ¸°ê Ž[2¸€Ø½–j MæT@P¯Îe+:ñ¼Ä/i³“vvQi+’U
+ǽ†2>ê‰ÝÕ5aM
+Î}äþ9°à¬«ƒŒ2à˜®†Z
+ Ü2\/ŽF®†iÊxxPxvÙ”%vú¬Uvaëì˹N¡1ƒK[.;è<Š÷FñݯóO Õ9ñeÅ^*ôª#%Éê j{ô¤¶J?qcÍ0­‡ÂJ° Ü¸÷Aã±nàq|3î°ëù
+ß^ŸÅÇíÚÔ}Ð ‘I$¿ûžD‰%lÙÄC’¼œ¶á‹Þœ 3²ëp~Àñ”A³Í ôá¹öËö¸ã“jO˜‡N|ÁrEý•’Úy÷OÉŸ8!„/¨Õd¾ï<¶+àŽ`®çÓØ…K)>¨?EŠ\
+æÞ™Ó¹FÖþÎÕ& ¡Œs¡z¡kR|`"g,VµIò±hÖéⓉL`ˆùrb€°ƒ¾·CAñ¶|à×AºYGR¡¢<~²©·™ƒ|ºì¾ý”f°ÃwB÷9+âKŽ„®¹Ÿxµv'baôó2š‡Ô}Hõ‡yÙy-ƒ^øCм†Õ`TŒ¾ñ†^ƒñ©u(QeþKWAU1¯;ªb8<ƒ$¿[4Bä0y0ô÷™Ò_%þ[‰¦…8ºHŸMêìnkÆû1—¿~•›9o‚œ„{ ô쇉{ŠÓ9ö»£“£´ßj¬ú ±Û
+ƒ,Ù”ø9ÄÅã”цÝÈýqëD…ù>t̆™&Ìà zc=<(Ž´F6ÞPû*ìÛ»fúã}ã\ÉÖÒÝd`Î31;.¦t¹)‹c;fnôš˜é2ŸzªòÞ-Lw;½]ý¾3ê5&ø€8qñup2 ‚o ·Ž×HžaäÒ˜:œBéy4Y:Ÿ«u
+0ÔþŠ×=?=+”¿¶Ã
+…~íOªR –ФMO¬'>ÔŸ©œu¬ðþ„µî(`Î4·%h|¾³nO=¸†küË-“/ODлÙ~œ%¦®tzÜï²â•±ÞlƒÍ¡¢‘)z}u»ð•ø`åxZéwˆö)Ü;¤Xm±y| ® 3t‰g¥ÛZRw…nddÈ=FŒZkò/GÚnužŠãf–néÍ÷DÔŒs¡2𕡟ЦÛ¤õƒ,C~öbS'–¨tz|¯§–ÅÀKK}=)ˆ} EIÎ9ôâÒ÷¤Q?ÍÃLÖçÈÚºUzª\-=YDÏè“@¹ ·xM¹ï
+L}„0ÿÆ÷µêHI÷Ã;3e.S·\ŽÓÛ¹ùœ†Ìî’ö¶ÏCL·aG¥ =ª:‹¼£À“HWQguкð;~,¾‘œ9¼³íÕŽ&™þL¿€Z«8|ÄÏCTumM`—žTJÖ@SÓÅÑìÕK(¨œí–ÁœEäàŸØÇ­¥:· ñg%+z÷ðI&ö5aMAòN­‰í¸.kSœÔi;¯¼çHðíF Ü÷3œP}žò +Dúi™tNõ2Ú;pWíÞ½D„p~Ò3RǸء:¿]¯ÝSU
+9’ W&ER‰‚KèƒÂþ«ªn4ÖʆZ(ÃãT› ‹Êª˜ÙVžCŒ[Ñ*ŒIÐâ÷tЫdThnÏœš=/K‡^7ÑãÌzf©…:Hñ‰
+³Î­Êú¾Ü)WG>âÇ‚pE .E&o%r¥¼¬Jµ$Žï©÷muÔyÛV-³B|À&F+Ì¥ó7àÜâ,Ùàp|Þ>çzdÇŒàjh’ë–ˆ8s>¼ë<ôÑ$¬ùƒ,'¢2-ù°÷}Æ)}Ÿe´µAÒA¤ÆUÒr¨d4øyºY·?ô~=¼ ¿±p‹¹ÕG£~…Ñ3°[’Vi„U‘þRšv¸¡ž—Gü…Àä@È
+'³»Õ9±ºø=3®õÄ`_4q¡Wvè~Ч„ßÉŸaYKÉùâ„ä…¿ösn;-ý.‹a/_‘v€Ù{=ò3d¬·˜<¾ïOÛT¿Š±Y|ø¶œh‹Ü«)´Z±;fO›_kW„㈬3¯%Ä" kÉW°2nɃZ&Né–JÏXIÌú¢×‰d‡´j ?‚Åê$#ã5ŽPEÃ\ÆÕ y4iƒÒYa†‘³k{ïzl=9FªéÇ9ÿ»)!—Ê;ûú¯5 P̨uЩý—$¤ÒQØúÚ9X¡¥§3ø7ÏÂkù9Ùn@;0kmÒyj!5¡éi=ʇ FD|oö²8Ç3ô*‘æSÏçÛ¸ ±þ½‹Æd+&ìðBûÍ’ÊÂ;K 3}*ýËvº‡ÖÕQsuwyø%7'½ºEoÚTlã¶ÝEŽë×ë2wapf§ֵV‡²2ë¨Ðüã+hx¼ Mô´pr»w+!!ˆzi(+ÅàÍíí¡Ç±Ý†¼Â­
+ñ …ŸøX4êh”Û§æ8ÓGQ( Ñ°s¼"!.䱯 N̹‘hKóN¾AÐ?:C¶o vš'pR­›$vŠ
+¾•âY8s¾f"Æ*éD$-sge±îpKy¶ p=R7£úÄÕD’™_µ5ÙЙme{`Îè0Ö·Œªh0=­<)\Ñ`ÃÈ(l%dí¡Ãzé÷¼»Æþ„V§ÖÓzRHv–ˆ²×ùýìIMÌÕ)²„mïS.»+Ê¡©ó‡Ry˜±–ˆî÷ýÖûïj9‡ã·%#W¹L20é÷ ÄÀÅÒr´]øþ°œØ³Ìí v¦xà
+kt
+\n£ù‰Êi)a`©ï«úˆ8”Ò+G¢%VŠ®×@\_›‡J Õøº}?7® ë¯ö¼øøü°gÂ?§n6Žr¡>¶VCÈbS#þP¹(’ž›-\š_Vÿ\p‘é+ nä¨)›¿EøZ¢)¼%×oÚçVƒ™p)Aéôó{ªª:ÕA[ X8^bͧº3DÚ[Àóº^tV/M»Ñ Ü(f‚¤‹ˆ
+<›ð•i{oÌK¶³V¯¿
+ÊEŽöpmÓaä´ðKëöµg7ÞÏ‚~t"BÛ´8þ§²†]†ai^Ùê®Ðã¸`QÇœ1ƒþÛ_mŒ07çÐÏ2…¤^
+¢¬rÂvóÏM?`Pp®g:–Ï".Ƴ `)‡ò´Ò 4ײ „¿(ði™ˆKŠG©+ÝOuß°þ”åÑšeÌA$ÆÌwú~Ö©öh'Ü|­x)
+t9ò>r”U÷­öê=¡ÕG¶f S;˜’umÆ=7²•¥3,ž+@²ýÐ)±U†]¢"‡ÈC}êD4™MZ-&Ð¥‚ázl®„fƒº“/ç¯ý’nV—óm/-·”O‹ò¡v¯/ ZIÕœÇ@„ ßÍwñmO’(oš *^ë¢åWF?þ†ÕÅb’‡áXèÔBÄòÕ‚.¶gEVÍAzc¼ÃcxÍ7f®‰Ü
+ê§æ¢øyò´àŠêlò3sÏÜ#WÐç6_­’1ifâõY¦Ìyà´m¼+ù!úwÂÖìí餋kĉó9¼6ª&PwõÛ`âL©®<æS%äk‹Å.Ú”)¤¶ïøˆµùÑm}†á²Cˆ¿ëg²°y‡ÖÞ‰{S a#ŒîäÛh¤ÀËôÔµ•’ñ¨¯©Ò!´W¢ É;lOWý’m(h8µÝ˜ |ãÏ æüíçì]˜›ïš¯®!)K´…ª¦‹Ôåh
+ÚÓÖøÀ¸¦2‰‚]L6Ü Å´Øc_FæRe²ZIôhµžO•6¶¬Ó¡.FÛqÙ²;¬0â¥b® =jk'<ŸcCgKxÖóô%ÊóbßÇ>å/\oEîgÅ_ºt*YÞ'ÆÅòûç7zšBÇí´[èh„|Á<â&R©¸\NEÅÅ Žå+M8;¸ŠÞ>غׇâ_°-ð3Nxø¶äm´>
+'hps.8n£ÙbXÆWܾ
+3ÑññÚ`8·ÖµjÉWõkеPÀžÞž>Ö–GI‰GÍ”Ãîjò[ÜÍ ”m4Σš¹¥îèB‹PçÞŽ³‚Fw9'7º‘óoáÛÊœyüaNV¡ÄÎ.IIh{³u'šˆäkKó`Ä z5IyÜ—{>³Ü“#”VÇ«ÔZ%“vìoYS~£Ò€"Ÿ‚fS 1L+½7Î*@0÷s=-<êÇžóéÔbÞš£ØãP‰›} õoSÁÊ™ -þdæ+šŸ´¸ˆAc}œz:K^P¦ ñ€‘8úuz|[h. AØwíØ´ü’jh×¾Q‘X)*ñûö‹äg|„€¸îÒ×äw¢O•ŒÁ|W; âÕc{S˜<f™ì%"™vÁøvÙ»C (:JÞdÿª¯€LÅU1ˆc¹å.á—–,é…ùâ-Ø»X‹ü”'v æ4*é›D÷ØK|âä €UìGp«ÜáÇϺÍ]ËÇ /»‹Š"‘OS7/× iTxÛo­Ã8?Èk¤„lÆ7 §¿ L,kÜ¿—…›ãñ`(’êõÁÈ.JÆ1[¶×¤•6Ç™†ž‘³‹)«}©ÒX>£êyñí$T’KñÒÓÃñ´«äX6©øJû’xi Èª%Ê‹H Ô3Èg´„²{V±•ZÞ^—²iu¥…:àCÚws3Å ©Ö7“˜ÝsIF+û@bÒ¤/87“«[*ÿîÈ[Fê\9¡üòÇÌ%õ<çY+U ´Ó· ãoêâ*O¨ôÀU¢Ú‘{pøד‹ÛyáöfÀ¯BºuæÁ°ËÛkÉ<º¯_Opsô©…ç¥Z‚Ò³}ë±å]
+ñ ¡Öw®7ŽjXýO‹.@t¼ð¢D[¬9Û¶IªÉ2³€ÇÃôc¥¥P[x± Ë}~
+’b©4¶æ!ÿNDkN¥ý>õBÿÏ!MW¯æ‚¨l½Âçá–ÂF-®PöǸ2@¿Ö'èÒ°eæý‡?ÂØJŠ_¡½%ëë — ÜzÄŸZ”U˜Z³•ïWÓùÆOB^,ÊíÑ¿0.œ#V~[Šý5V36®ûÀIÏðËO §œ ±nÛü wð7a\Ãzz ìd7,šÝöo]ä>=‡Ì-O3or2Š« ~ÙÑp3 xŠ$ô3Ö—|XŽ–zòášúpk† ’Ø»ßwˆˆ›ßÑgfŒˆgZoá5º–ºw¯˜w4 dxº#…Ç¥B
+«¹MTI2z=3U+›™oèk¿’§ÀWÜv‘CÒ¼·a¼ŠÉÓj¿¸Ï“÷€h^½b‘³¿³³lL®Õp¸¦¯"Uµ$¡øjdÍàãj¿–~%d"º“»Ì‡O±©Kƒ`bAþåôD»R¥h‰$Söíª€µ©U/¦÷îc2ŸÁÒg1Ƀø5fò6ùóµäµ#½_EðbÂyÄ„›»·èŸÔf q~*s3`^ÀPMqUÁ°½;`Êlý*ýMªC³ª2B—!^}qžÞ^O{‚}%äPGÜͱuÍÍ‹ùc+i¼|R`[þäøp2ÄInЪš_™°›h7¾aÈ)8Z¶¸±@MbRÒªuþaƒ‰ é8ß
+endstream
+endobj
+1101 0 obj
+<</Length1 1671
+/Length2 4118
+/Length3 0
+/Length 5158
+/Filter /FlateDecode
+>>stream
+xÚu 8”}Ô~–’µ²”âÕ#û6‹}É–²eO¨1 c†Y,ɲF(ŠÈš¥¨Hʾf—¬E¤ì¤D$ßCëûþÿ×õ}×\×ÌsŸsŸs~çüî󌈠‰™Œ&–ä€Ó%©2HBÐ2Ô77G"
+ ö
+ýzÄ1
+C#bqd
+ ŠG{ AÚ"lŸ èjžÐP‹?¤`È •£€„­&á[i 9ë±Z$WW‘JaÙ:Ÿ6HÆa Á{Ãݯ ‘äIôù ñ ‹ßjKsƒ[AwN_û' 2±ü±9⨀PRB8w
+­‡! Zâ©V¸KmˆÃ‚4×ÿzõ©hhM4‰ŽÔeò0„ü;HѽpXŠqÚVίۀJ@"΄D·^=Pñ´|èõBîlÛ…ƒvëßeuˆvk e4™ŒöfA@:“UP€m+çµ-q
+w§‘ ËÚ¾“?PQò_*Jù B‰þ&C Òþ@Yè ÞÛð_#ÆÐÈdè=´½ Ðüáí—ç…ð ô“0ªÁÎEÁ«5ù<e&žËÕ+Z|Ù¤–g‰"ÐÁèëŒx]òøäÓ—•ãS´MÚœÔïŸe0d  ‰áÓ‰RòtA¯„1qr]æ¤?~hö訑
+ÛÂnñ‹ˆúC±Wxo¤Îhy7ž˜¼÷匈ºV§Y‰ÇÿŸU›©iwã]|÷2 ˜§û%Pû×?Ÿ øVÙÕÛR¥p ½Áz²º¤ë«ØIÖ’¹®‚JÎó}ý ÇÙü{CôX¨E |gò”Tª:ªeל*O«¢«‘¾‘&6µ$}§eeÀ€!ÎOHˆy–ÿàÇ0ï÷†Ñ2@ÃÉ)·ì\k ò‚MEè†Ô‹¾8~¿¶=Kgmåò¦ ‰¼5ëj»Éjç
+,½Ž‚)Q²XØZ¶Þ$üâ+¶7¶K4Öct «o?럴Å&¬\#-‡Å·‹³båßt«œƒ3J°RY>MÉŠ­&L&Dúù£¸»¡ew—‡Þ?àkž}ËöÐKý¹£[CíJ†ˆÇ¼Cw.c˜Ù¶­1/Œ#åq‹äR¦Øá’F&hvo!_vXuÜ«¯:ó[ýyœXÛç¥þ{ø —¸ã¥8#©Þ™ øhÓ%‘Ѷys#f²'sóáÓtù¤§³g¢¥¯ Aá:«˜¤2ËZ~­DÒó¹B3ÉóŠlìåúιú‘ÃpßàJA”!"gfY<l’âë±»¿Î}×þÏ]ßcóž+RŒÉÆ’•Š·+ŸÆégÍHÚÊ´›ÊÝ}8hÄ9¬âˆ­Vuƒ[ª¢m¾×(Nç¥ïR¹”y’àyšî Í_Ê°å3Ãå·ºõÉñ}éDu
+ð àÖõ– ÉÔÚ&ïA¯€çôé¶^ŠQEwh…\å<ÎöÔo£æŽbÚo³c@Q—Ow}Pš5J:Ùi®Š€Ñ½¼såæ‰ûüÚ§> %¡+Óy¬™îw& Ãdj¯|Ó™ä>©2‹ñJ)™yž0ååÄø ˈ}Ã\ȸrf«‹]™nEàek^£–w…Ú@‚¦sÈW¾­Ksø5V²ãý¸¤Ï(Wª´VBºEˆõSP gõ¢ÇЉ·§§cµõXo4ðnŠ¯ýüPcšß¬·ÄŽý_ž'9„GÄÏ7ñÙˆ+‹ßú=ÊŠ™î®^¢{9ÓÞV€h–¥7PŠíœ2qq\É^_ÅX14ÍuŠ”³M±Ý»h—ÓR1´î¸XBL`ßÙb°#cú‘º6#_Ò²ÖŽ’)g߯[Ô\%á6Þ
+ýC×ÿñ69‰Ývfxî,;Æ9vB©#Š™ìtBC+;éŒ_»z":ªIÇ+lO‰óÈ÷“LdC¯”px?h¦nb“*Ã5»"á«›6‡ÃºP¨ÁÑ â§äÉAS:œFΚªš"‡™ŠþW«3kç.z¦Š!^’;õåTŒ¯{3ˆEtƺ’#Íy¬õ~+%ívJcoóè[¦Fó:s’‚˜,õÊ ¸SÉ·Vúnoà˜x—‘j_¯Z#Ж!ÛjRx><}íC¥9CÅÝGx%O-µmeá^DpøŒÅ›7©yU*„U½s‚ZtIÊç£G^Yxv$*߶D È 2< (uªJ\‡_j~–âøe°9_78àK(c[ü#Õz¦Ù´N²å5µ(öÉð*ù5‰'û6%°kœœ¢À<“ çrw å™ÙБ×
+×m;?ø±Ýtj‹MËŽŸti[$òfÌÚYgf×7ÛmTh r
+¹«ÞÆÊD¾·bkþtï]ãž%—×mê{0‡S»wª|,s039²÷âô`72«~Üø¬J˜öˆSý^É>jÜžÏyjWXþé «Er{r˜kË1X—*e^ —l’Íö+¨iØǪ:¾o„ñýwŸ&àƒ‹Þ½ÂÌýÏ.D.‡ø§4Ö©¶Ä4u*Í=®ß¹k}¥ýL×n­Ü’"âKÔ`¯ê§î7¾~…ÛûÃÜØClW§Ñõ¥¼0¢
+‚•Å²ZþyÔš†×û Œæû¨¾Ü{óÄ5sS_\¯Xkt÷0âØì|è]™¿GQÐźªñdê¥wúóÁùª©Z¼J ¾AÇ SWËÕËKÃŽÞ( A\põ×É=—Qa½Qgóòq¸)ŸÞ\ÿ®•=Œ‘L™©Æ–ÕÅÂc>rŠè«„´Ã«2zý<[¬ö|7{€}Þ•)t檊ñ3q¶SÏ‘ÝúVî{-ï>±šÂoSßÓ˜ikZG˜v]ªºD'½C#ÊOº9Y*¡)³0ÚÔpîñh>ö€ =ëBÿ»3Ü3Jd»ÔzÙ¼ña }‘½ŸtÓ´ <—½.œLS–>|§{ Åf=_ÇÛ IfI0Wcgäïx$oy4‘du(í\kºhJÉ"ÃH…jõ@Úµ3]Ww ²‡
+±pÚ[7)Fº‘&ÎòæGç{OÕÚ…?iuÎ)Õ^#‹<jºO- ¬>ÚLž‘Œ}h‹÷5²ýd"z:¶¼¥!\Üy¹'qÅ®ÿdV‚eçב©úÐ… _—„/&cjWºØL×Ò[qF¯§Ë“¬s)¼ŸTßɆ<Åj´š 5?#<´0ì¬:ÂrtøÍÕ®¢žƒtÝ
+SàÒ`¯Î7)ƒoîÁScåÞ”%‡5ƒá=1ÖêÚIƒ±ÆA²³IG­ÌÌK©è€BÍ„éZÇÛÁã㮜fG¯¦)úè¿”6.áwF¬Çi„¹K:³4<@œsf•õ>&rö¡³7afgø'³Þ(z;ÚÔí¤s­¨
+ ùö“¥­}o>Ä'ªøe—y—òeŠèÉb²gm\¸>³ûàaø»rèÚšÅï•“óæUe]noöð®û¥ ÓG
+wGiyYŒ×øÙ~RpÖ%Æðn`Ï7šG¦‰\78^¾é
+Jö ¾.Xz|ø¥Áñ;ÑÁº}áü£Ë&ä›<î‹úf\†ÇaH=ùVƒûÄS‘gäŠÖ%‹Ã8¤µÊ^Áu¶í¢9áu¨=_¢ÃLz­§­./Âœð#!o 8Þ¿:nòÅÂðLgjÔº•?v÷~N¦ýËbÉMæK]F"RÈD—ä'*TòM3rÑÓk~ö^Ô+N“ɘ V°Ãc¡žÐöÕ®c ¢¸rw•ø®ŽDý=Ï/ãZy”¢ÚóùMf÷v`cÓ_¯ù‹7Ð_%¾úØùÙg±}¼öX}Ôá\ŸÝ§nž+E«¾èV§k :$êX£xn]í¨K’ÖK§,‰^N‘.Ö›ê *[~\цçû¬ëÝ€5ÉY¶ÝKmj¦}Ìb·r‰Xa0eÍÏ¢i$-+1“]Ni4Ÿ¾ˆh:pÍ4e¨î€6×Î}øûVï H¶ïÌK‡³"ÄãAô}³_h<®2OR‘a¢Šî±ã}ç¬çåªY¡¹n3úlì~p÷¢R3%§ÕýÞ­>#–
+æú ËÆíF¥-ÌÞý £5î›ò£.N©&åûË~Y­÷:ý05Çâ¸:Fê`¥>=GÒÁ˜|ã 9 4 œ·]2' Ô±ÇÜÙˆ#z=Yù…UÆÞ$¼‘…쫲/íõê–õÌ Ë
+c­»Jj5§³†í
+ž\àõŸrQ Q3fŒ ٜٯc
+ž:Õî:((gŸ”üχ ¥ç¾wbw³øw¨}²³™™óuEô™.3†–ªß'
+o§½ôäKVðjÈø‡>®¡´DjŸÓG¹´×Ì# ù¥Ì]N'­<Zœï=/g-~²Wm8tål¯‹“¨ªš}`Þ¦º^G((ÇÝØD?¡y¶éè/¤¨—ò M_®½lGʱ7Îe_¢´= ý,-ÓêŽ/ŽÍ^kWr+s4tð=B¼©ŒNF:)œv«/Hœ°3øîMÀ
+endstream
+endobj
+995 0 obj <<
+/Font << /F111 6 0 R /F105 5 0 R /F63 7 0 R >>
+/XObject << /Im6 518 0 R /Im7 592 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1102 0 obj
+[777.8 0 777.8]
+endobj
+1103 0 obj
+[ 241 [505]]
+endobj
+1104 0 obj <<
+/Subtype /CIDFontType0C
+/Length 735
+>>
+stream
+
+Ö ÷Öø
+endstream
+endobj
+1105 0 obj <<
+/Type /FontDescriptor
+/FontName /UHYGOC+ChaparralPro-Italic
+/Flags 4
+/FontBBox [-171 -317 1042 867]
+/Ascent 740
+/CapHeight 651
+/Descent -260
+/ItalicAngle -10
+/StemV 81
+/XHeight 415
+/FontFile3 1104 0 R
+>> endobj
+1106 0 obj <<
+/Length 702
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-UHYGOC-ChaparralPro-Italic-0)
+%%Title: (TeX-UHYGOC-ChaparralPro-Italic-0 TeX UHYGOC-ChaparralPro-Italic 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (UHYGOC-ChaparralPro-Italic)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-UHYGOC-ChaparralPro-Italic def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+0 beginbfrange
+endbfrange
+1 beginbfchar
+<00F1> <0061>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+30 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /UHYGOC+ChaparralPro-Italic
+/DescendantFonts [1107 0 R]
+/ToUnicode 1106 0 R
+>> endobj
+1107 0 obj <<
+/Type /Font
+/Subtype /CIDFontType0
+/BaseFont /UHYGOC+ChaparralPro-Italic
+/FontDescriptor 1105 0 R
+/W 1103 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1108 0 obj
+[ 69 [602.5] 71 [602.5 602.5] 76 [602.5 602.5] 79 [602.5] 82 [602.5 602.5] 86 [602.5 602.5]]
+endobj
+1109 0 obj <<
+/Length 10547
+>>
+stream
+
+]
+  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a
+
+ "5U¶i)þÿfÿzÿç
+
+
+ 
+C#Ce
+-,
+ C#C -,
+-, i°@a°
+¸¶J ¸³
+œ‹ r
+§ x
+‹ ¸O@  
+
+î¹/
+_ i
+¸Ÿ@
+
+
+ ï
+__% !
+ Ör
+
+
+
+
+£
+¹Ö•²S
+¸ž²Ý¸š²Ý4A–•š
+ñ
+
+QZ°#B°K
+CX`!YBp>°CX¹;!~º
+endstream
+endobj
+1110 0 obj <<
+/Type /FontDescriptor
+/FontName /XOWMYW+LucidaSans-TypewriterBold
+/Flags 4
+/FontBBox [0 -193 1000 771]
+/Ascent 771
+/CapHeight 723
+/Descent -193
+/ItalicAngle 0
+/StemV 131
+/XHeight 530
+/FontFile2 1109 0 R
+>> endobj
+1111 0 obj <<
+/Length 830
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-XOWMYW-LucidaSans-TypewriterBold-0)
+%%Title: (TeX-XOWMYW-LucidaSans-TypewriterBold-0 TeX XOWMYW-LucidaSans-TypewriterBold 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (XOWMYW-LucidaSans-TypewriterBold)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-XOWMYW-LucidaSans-TypewriterBold def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+4 beginbfrange
+<0047> <0048> <0064>
+<004C> <004D> <0069>
+<0052> <0053> <006F>
+<0056> <0057> <0073>
+endbfrange
+2 beginbfchar
+<0045> <0062>
+<004F> <006C>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+23 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /XOWMYW+LucidaSans-TypewriterBold
+/DescendantFonts [1112 0 R]
+/ToUnicode 1111 0 R
+>> endobj
+1112 0 obj <<
+/Type /Font
+/Subtype /CIDFontType2
+/CIDToGIDMap /Identity
+/BaseFont /XOWMYW+LucidaSans-TypewriterBold
+/FontDescriptor 1110 0 R
+/W 1108 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1113 0 obj
+[ 13 [602.5] 16 [602.5] 18 [602.5 602.5 602.5 602.5] 24 [602.5] 28 [602.5] 31 [602.5] 33 [602.5] 49 [602.5] 63 [602.5] 68 [602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 85 [602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 183 [602.5]]
+endobj
+1114 0 obj <<
+/Length 16291
+>>
+stream
+
+úÇn
+  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a
+ 
+C#Ce
+-,
+ C#C -,
+-, i°@a°
+üü
+
+±v+öäýôä
+ )9955G llb b ||t t €€
+Jî¶+Nö]Míý]í
+
+€¸-·
+%´
+¸6±¶++<+]ö]í+<+À
+
+
+ X
+ X   X
+ 
+G ¸J@
+
+ 
+¦
+*+,2",[
+
+2["[' 2[
+[`¬Ê"ˆ²a²[+$-j47`7;èÝZE@•ƒKK‚nxÐk]1$;E`©-xe=Sþ9H+
+v 4â‘nIB<
+[ ¸K´
+[ 
+DF![ Tccppzº!ããóów [ [ d @€xp$Ô]íÔ]ýÄÀ9/
+
+(€
+!œ3;P\ˆ”üo
+)* 
+(5¸K@!
+[& :( 2dp€I:o   :
+o¹
+z
+w ¸w²
+
+Gl G
+®
+
+W
+
+
+w
+
+¿
+
+
+
+G(&##¸K@ [ 
+û GW
+ 
+¸K±
+uvý=
+
+
+
+z
+¸ÿ@3
+
+ 
+
+  % %d ds sà Ãâ âó ó  G¸ƒ@+
+ W
+G 
+
+
+'
+   
+  l
+G ®G®   ®® 
+ /
+ 
+
+ 
+ 
+ l   
+
+ 
+  º,
+
+
+~
+Ø \ \ À F ¬ v¸*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~º
+-
+
+
+
+
+ÿá
+v
+2
+
+QZ°#B°K
+§DYYK°yS \X¹><ED¹=<EDYX¹ã>ERX¹>ãDYYK°yS \X¹
+~
+~DYYK°S \X±[[ED±z[EDYX±[ERX±[DYYK¸šS \X±[[ED±^[EDYX¹ 
+#B° #B
+endstream
+endobj
+1115 0 obj <<
+/Type /FontDescriptor
+/FontName /MAWTRT+LucidaSans-TypewriterOblique
+/Flags 4
+/FontBBox [0 -193 1000 771]
+/Ascent 771
+/CapHeight 723
+/Descent -193
+/ItalicAngle 0
+/StemV 86
+/XHeight 530
+/FontFile2 1114 0 R
+>> endobj
+1116 0 obj <<
+/Length 922
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-MAWTRT-LucidaSans-TypewriterOblique-0)
+%%Title: (TeX-MAWTRT-LucidaSans-TypewriterOblique-0 TeX MAWTRT-LucidaSans-TypewriterOblique 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (MAWTRT-LucidaSans-TypewriterOblique)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-MAWTRT-LucidaSans-TypewriterOblique def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+3 beginbfrange
+<0012> <0015> <002F>
+<0044> <0053> <0061>
+<0055> <005D> <0072>
+endbfrange
+9 beginbfchar
+<000D> <002A>
+<0010> <002D>
+<0018> <0035>
+<001C> <0039>
+<001F> <003C>
+<0021> <003E>
+<0031> <004E>
+<003F> <005C>
+<00B7> <0027>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+17 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /MAWTRT+LucidaSans-TypewriterOblique
+/DescendantFonts [1117 0 R]
+/ToUnicode 1116 0 R
+>> endobj
+1117 0 obj <<
+/Type /Font
+/Subtype /CIDFontType2
+/CIDToGIDMap /Identity
+/BaseFont /MAWTRT+LucidaSans-TypewriterOblique
+/FontDescriptor 1115 0 R
+/W 1113 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1118 0 obj
+[ 13 [245] 34 [606 574 585 691] 39 [531] 42 [324] 47 [716] 49 [547] 52 [492 567] 241 [532 517 518 592 489 473 570 627 299 454] 252 [472 737 619 608 491] 258 [540 446 505 586 539 747] 265 [483]]
+endobj
+1119 0 obj <<
+/Subtype /CIDFontType0C
+/Length 5616
+>>
+stream
+
+
+ž V ² 3 ¡ p†Íiñ Õy‹½øí½‹½ø$½‹øˆùQüˆ÷ŽûÅû>÷“÷èû ûÀ÷>÷“ü“ü^÷>÷“÷>û“üøÀ÷>û“û>û”û¥û)÷÷Ô÷ïlqka‘ …¨€mmxjZm”••€Ç­¿ÄÕ·h³fãŒÿ
+¥C©6¥FûAŠŠŽŒ¤Î­Þ¦ÒŠ‹·÷S·÷B·÷Ö÷FØYÜô»¶|‹}}µ²‹§™Õ‹¤÷ÚÅáÈS¼@”øŵµÃ³p¯fœd]BZC‹ŠY~Š}zˉü$ˆ‰‰ˆÝø)”›Œ¢â´jWPLmBy{Œ„]Œ”›‹¤ô÷ °\[CIsGWx¢‹Áø.¿·ßø+÷ퟜ‰»ˆ¹‡¸”vd’YHF|^SQ^Z@!<®H¾fj¸È}ǿءˉ›†œ‡›|bQ|\WWœ¬md´µÈѥŵ³®¯¼˜¶£ ˆ‚ŽŠ†Œ…Õ‹¸ø+¸÷×÷¬Þº¶Š|‹|~°°‹§ ¼‹®ÛÌ›«»κ®Ûãà]ÓH°§ZR—&KKŠV}Š~ŒzɈü#ˆ‰‰‰Ýø(Œ”œŸÑÂ|n¯¿až\<SrNejmgY|DVŠ„’ n‹¹÷Nº÷?¹÷
+Oû&Xû‡S÷U÷Z÷UQ‹X~Š|{ð‹¹mvø[¸÷ÿ
+÷ xíû%÷û,Þ ¤‘œŽøLŽŒŒ¾ŽšŒ›Š˜olŠnhf‹iŠ~‹|{Ú‰û Œûû ‡Š9÷#÷,.÷`[Œ_Š}Š|Œ{ȉ¸ü"‰Š‰‡å¹ø<¹¸ß÷óß÷¸ÞÆ¢²·ÅÀ§ÙÙâbØR²©_Z—SQV€jZNcX:&<¨J¶bcµÄr×–¹ab™¬j`µ|ÆÉ۪Ȱ«¥ª®š¶¹²}h«±cžRK>oUmikm^z_p‹¹÷!¹÷o¸÷ÿ
+~m‹Še PûBdû†|Ö~Ê~Î}Î~Ά¨ÙŽšŒšŠ˜da‹`njŒn}Š||¾ˆŠ‰™RšLšL¡1£1¤/¤ ‹Œš¸÷¼÷´÷¬û¶û²û£¡‹Œœ¦Þ©ë¢ÜŸÎžËžÍh‹¹ÿ”€
+Ù ÷åøš
+endstream
+endobj
+1120 0 obj <<
+/Type /FontDescriptor
+/FontName /VOZYPH+ChaparralPro-Regular
+/Flags 4
+/FontBBox [-163 -317 1073 871]
+/Ascent 740
+/CapHeight 650
+/Descent -260
+/ItalicAngle 0
+/StemV 82
+/XHeight 415
+/FontFile3 1119 0 R
+>> endobj
+1121 0 obj <<
+/Length 1114
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-VOZYPH-ChaparralPro-Regular-0)
+%%Title: (TeX-VOZYPH-ChaparralPro-Regular-0 TeX VOZYPH-ChaparralPro-Regular 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (VOZYPH-ChaparralPro-Regular)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-VOZYPH-ChaparralPro-Regular def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+2 beginbfrange
+<0022> <0025> <0041>
+<0034> <0035> <0053>
+endbfrange
+27 beginbfchar
+<000D> <002C>
+<0027> <0046>
+<002A> <0049>
+<002F> <004E>
+<0031> <0050>
+<00F1> <0061>
+<00F2> <0062>
+<00F3> <0063>
+<00F4> <0064>
+<00F5> <0065>
+<00F6> <0066>
+<00F7> <0067>
+<00F8> <0068>
+<00F9> <0069>
+<00FA> <006A>
+<00FC> <006C>
+<00FD> <006D>
+<00FE> <006E>
+<00FF> <006F>
+<0100> <0070>
+<0102> <0072>
+<0103> <0073>
+<0104> <0074>
+<0105> <0075>
+<0106> <0076>
+<0107> <0077>
+<0109> <0079>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+14 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /VOZYPH+ChaparralPro-Regular
+/DescendantFonts [1122 0 R]
+/ToUnicode 1121 0 R
+>> endobj
+1122 0 obj <<
+/Type /Font
+/Subtype /CIDFontType0
+/BaseFont /VOZYPH+ChaparralPro-Regular
+/FontDescriptor 1120 0 R
+/W 1118 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1123 0 obj
+[ 8 [181 334 334] 13 [244 300 244 394] 27 [244 244] 34 [585 560 572 668 532 521 640 714 313] 45 [513 830 697] 49 [539 702 580 488 558 647] 56 [843 590 533] 66 [461 466 360 478 404 313 426 495 251 245 448 249 739 510 439 472 462 364 365 345 487 448 674 436 430] 203 [461] 234 [589 522] 239 [796] 489 [527 527 527 527] 613 [962]]
+endobj
+1124 0 obj <<
+/Subtype /CIDFontType0C
+/Length 10274
+>>
+stream
+
+
+p * ã Œ  ¸m À]ºnåoYúlÔzоYÑnƒ2ÃcÚŸ5¼| i!*"Q"Æ#!#•$%,”‹½ø콋½ø$½‹øˆùPüˆ÷ŽûÅû>÷“÷èû ûÀ÷>÷“ü’ü^÷>÷“÷>û“üø¿÷>û“û>û“ûÊùNw÷Ó÷]ù ±r§qnopa‰¡†›ukpl`p’€”“ɬÃÇÏû1û$ùíÄÓÄ÷QûBÚ/ÕH—–••“–RÉUÜ÷*÷x÷"÷X÷Ò‡—…™„–ûA-ûûqûeû1û#ùí÷mÓ÷µø÷8;÷
+€
+ž¤‹Œ–Ù÷"ä÷Dá÷F‘›û8 ûM¢û(¢¡‹Œ–¾÷Â÷¸ó±å¯ß³ì¾ŽšŽœŽšŠqk‹paYŠcˆ}‡zˆ|䉎‹ˆˆŠyR`ûqHk<g2g2„x÷<x÷[z÷0i‹Š‚Gû!ûû}Bû$ƒˆñŠÝ‰ãà‰àŠáÀîŒÿ
+ÕM€ø
+øìß÷ ‰Š¦žŠ‰ˆ{-€‹û
+üƒw8¢¢‹¢•±©÷•²Å›÷õÈ¡”yyq[…r€}Uk%yW~Žz«Æ’™³‹€Š™‰™ˆ™ƒkp†‡‰ŽŽº÷¬÷¸•Š—†“}«lœvŽgŠAs0$†œÏÐ÷¢‹Œ’ˆŽ‚ŠM€‹û‹`Špû‹nmû‹udlŒtU€S€Tš‰Š›Š©ì–‘ž¨£ŒÞ/ü·‰‰‰‰<ˆˆ|ˆzˆ|³¸Œ³µ¼° "Žš™*Ž
+Ö ÷Öø
+endstream
+endobj
+1125 0 obj <<
+/Type /FontDescriptor
+/FontName /HVSLBZ+ChaparralPro-Italic
+/Flags 4
+/FontBBox [-171 -317 1042 867]
+/Ascent 740
+/CapHeight 651
+/Descent -260
+/ItalicAngle -10
+/StemV 81
+/XHeight 415
+/FontFile3 1124 0 R
+>> endobj
+1126 0 obj <<
+/Length 990
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-HVSLBZ-ChaparralPro-Italic-0)
+%%Title: (TeX-HVSLBZ-ChaparralPro-Italic-0 TeX HVSLBZ-ChaparralPro-Italic 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (HVSLBZ-ChaparralPro-Italic)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-HVSLBZ-ChaparralPro-Italic def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+8 beginbfrange
+<0008> <000A> <0027>
+<000D> <0010> <002C>
+<001B> <001C> <003A>
+<0022> <002A> <0041>
+<002D> <002F> <004C>
+<0031> <0036> <0050>
+<0038> <003A> <0057>
+<0042> <005A> <0061>
+endbfrange
+9 beginbfchar
+<00CB> <00E0>
+<00EA> <FB00>
+<00EB> <00660069>
+<00EF> <FB03>
+<01E9> <0030>
+<01EA> <0031>
+<01EB> <0032>
+<01EC> <0033>
+<0265> <00540068>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+7 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /HVSLBZ+ChaparralPro-Italic
+/DescendantFonts [1127 0 R]
+/ToUnicode 1126 0 R
+>> endobj
+1127 0 obj <<
+/Type /Font
+/Subtype /CIDFontType0
+/BaseFont /HVSLBZ+ChaparralPro-Italic
+/FontDescriptor 1125 0 R
+/W 1123 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1128 0 obj
+[ 3 [602.5] 8 [602.5] 11 [602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 31 [602.5 602.5 602.5] 35 [602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 46 [602.5 602.5 602.5] 50 [602.5 602.5] 53 [602.5 602.5 602.5 602.5 602.5] 59 [602.5] 62 [602.5 602.5 602.5] 66 [602.5] 68 [602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5 602.5] 181 [602.5] 183 [602.5]]
+endobj
+1129 0 obj <<
+/Length 24909
+>>
+stream
+
+  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a
+
+
+
+ 
+C#Ce
+-,
+ C#C -,
+-, i°@a°
+¸¶J ¸¶
+  "&* .
+"&*.¤ªª¤¤2ª4ª8¤:ºµ
+µºº"µ&µ*º.ÅÊ
+ÊÅÅ"Ê&Ê*Å.(q¸§@ q 
+ ++::KKV
+Vc
+ct
+u tt—¦ ¦¹¹¹
+ %%66FFZ
+Zi
+iz
+x xz© © ©µµ¹  [
+
+   
+bb´Iù
+â ¦?^¥ â%/þ¸=1&?%Æ%#i‹¼D5`øt#þÝtø7TD¼‹26zMþ³
+¸´ U
+
+
+‘
+‘
+ ×
+†¸xµ
+º‚Ö
+
+  ‡
+
+‡‡' ÖÍÖ
+…! …
+
+ 
+
+/ÄÖ]<Ô<ý<9/
+ &%#¸“³$
+&¸“²
+¸I@ 
+ +\©5ý?|0®ÝshÍ+ ¹¦PþÛþ7þ¸œ
+ &%#¸“³$
+&¸“²<+
+
+
+
+q@1P1`11¦¦7[Ä*a [44;<.U  J<&[0I;Xu+Nô]MíNöMô<ý<9/í
+
+xv‰…†ˆ ¨§¸·ÈÇØÖ
+
+ h
+f
+” œ ™-«.µµ ê èììê.ú øú.
+.p % 0$ƒ0¸è@J
+ !*+)+(+ w"w',w. ,ew
+ e
+ee e
+ ^
+
+J  m
+¸"±‹+Nô]<Mý<NöMä
+&%% &e
+e
+
+)IYjix©ºö ¸ÿô@4 f h 
+
+Ã ÃÕÕ 
+
+%)6:i †Š¥ªÉ Æ  E
+ ¸–¶ E ¸—@  
+ º–
+ º—
+¦ ƒŒŒƒ
+¨§
+··çè
+
+7x x
+ e
+
+  ƒ ƒ¸,@ 
+  j¸{@
+
+Jm
+H ' Z jevŠ Š –² B 
+
+h
+ xx% 
+ ¯j"J)¸H·­
+x ¸H@ JjIÁ¹8
+55GFFWW
+W gw
+
+  h f
+JIpu+Näæ
+¸?@..Y4Y$Y)) ,c¸€@
+v 5áweFh<
+Y r J$
+]++++*
+  Y
+¦ÆÆÆÆÆÌ Ð
+œ @@ ) "
+„ k
+ ]
+«¸
+¾ÃÖ4}Y Y Åk¿
+]
+}
+
+Y'*k
+k c!!  Ÿ ¯ ¿  J9
+ˆ Jkc
+  Z Z++**
+ ¸‹@ 
+g¹]
+
+ Z
+Z
+
+
+  c
+¸ @
+„ „
+ÖÖ%ãã%òò%
+%$ ¸Ü@#„'
+¸~@ /?€Ï¸˜²G
+k/?€Ï¸˜·Gk&&¸~@
+
+ˆ Jkc
+ Z Z++**
+7Y Y
+ ]
+öö
+þööŸ ŽŽ Ÿ;ýý:þÆýýþÅ”ßÅÄßßÄÅß
+J$kc
+]
+ ¸í@°  Jkc0
+uvý=
+
+ €  
+YY' 
+âˆ$J*ˆ
+ }
+Y
+Y 
+„ kc
+ Z
+¸g²c
+: 5EJIH H
+I GYY Y
+Y fv™ªª »¹ ÊÊÊÊ ØÜÚ éè ù#G ¸ž@
+
+ G ¸@5
+@a 
+
+     Ä@  ¸œ@ I
+ÄO
+¹ÉÊÅ ÙÚÚÙÕ     Ž
+ Ž
+ €€  
+
+ 
+ 
+ €
+ 
+ Ž   
+
+ 
+   /  JÏ  I»¬+Nä]æ]9
+
+‚«+Nô]MäNöMä999
+ç7"¸Y±,<Þü<ý<ý<ý<
+ #WLLW" 
+1lrOm°X"+\Y[[Y[,"X±œ+”UN <‹F.<h[[fA-DŠ<!4K$”IˆO<K²'(<I3”1I='(²K<OˆI
+
+ "WLLW" 
+g©NlŸ¯W!á[[Y\,!½èþØ”%J4!<ŠF.;i[[g>.E‹< NU”JˆN<K²('·”2I=('²J=x¨
+
+
+ÞÜý<9/ÞÜý<9/
+ ‘ 
+z n¼ðð2\žž   þ
+Æ : ž Þ  † † † † ä
+ Š Š
+ll芸bbÐÐÐü,XXtt@ìJ†îÞJˆöbŒ Šú¢J¢<¤bž(xþ                                                                                      ôô 6
+
+
+
+
+²Öo±Öo°¼„š
+
+
+QZ°#B°K
+Ñ„ERX¹„
+ÑDYYK°«S \X¹JHED¹IHEDYX¹'JERX¹J'DYYK°«S \X¹
+CX`!YBp>°CX¹;!~º
+endstream
+endobj
+1130 0 obj <<
+/Type /FontDescriptor
+/FontName /MOPNJF+LucidaSans-Typewriter
+/Flags 4
+/FontBBox [0 -193 1000 771]
+/Ascent 771
+/CapHeight 723
+/Descent -193
+/ItalicAngle 0
+/StemV 86
+/XHeight 530
+/FontFile2 1129 0 R
+>> endobj
+1131 0 obj <<
+/Length 950
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-MOPNJF-LucidaSans-Typewriter-0)
+%%Title: (TeX-MOPNJF-LucidaSans-Typewriter-0 TeX MOPNJF-LucidaSans-Typewriter 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (MOPNJF-LucidaSans-Typewriter)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-MOPNJF-LucidaSans-Typewriter def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+8 beginbfrange
+<000B> <001D> <0028>
+<001F> <0021> <003C>
+<0023> <002A> <0040>
+<002E> <0030> <004B>
+<0032> <0033> <004F>
+<0035> <0039> <0052>
+<003E> <0040> <005B>
+<0044> <0060> <0061>
+endbfrange
+6 beginbfchar
+<0003> <0020>
+<0008> <0025>
+<003B> <0058>
+<0042> <005F>
+<00B5> <0022>
+<00B7> <0027>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+6 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /MOPNJF+LucidaSans-Typewriter
+/DescendantFonts [1132 0 R]
+/ToUnicode 1131 0 R
+>> endobj
+1132 0 obj <<
+/Type /Font
+/Subtype /CIDFontType2
+/CIDToGIDMap /Identity
+/BaseFont /MOPNJF+LucidaSans-Typewriter
+/FontDescriptor 1130 0 R
+/W 1128 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1133 0 obj
+[ 8 [202 328 328 357 524 245 315 245 392] 27 [245 245 524 524 524 426] 34 [606 574 585 691 555 531 665 731 324 493] 45 [523 869 716 718 547] 51 [600 492 567 669 624 880 589 562] 60 [323 392 323] 65 [202 454 509 403 521 445 334 466 545 266 244 499 256 812 558 505 522 507 375 401 358 528 473 680 474 462 441] 119 [357] 234 [631 561 564] 421 [403] 489 [528 528 528 528 512.2 528 528 528 528 528] 613 [1015]]
+endobj
+1134 0 obj <<
+/Subtype /CIDFontType0C
+/Length 12813
+>>
+stream
+
+
+6
+Å =  ¾ 8 ÐŽ2»V꺞`¢Þ#Wå‰â•¬¸tç]A¢ª]Ò˜Xõ ’!%!®"<##ý$ž%&%&‹'m(8(²)')z)ì*++‰,,b--².Ðy‹½øí½‹½ø$½‹øˆùQüˆ÷ŽûÅû>÷“÷èû ûÀ÷>÷“ü“ü^÷>÷“÷>û“üøÀ÷>û“û>û”ûÐùOwßÓæùOhsm`’¡†¢€pm{m\l“€””€Ç©¼Éйi­lûRû'ùïÑÓÑ÷¬û|÷û é?–•–—“•AÎ&÷ ÷j÷Tê÷!ÝÈ„—ƒ—‚–ûGûû5û_ûRû&ùì÷MÓ÷•÷²÷]û÷1û̓ƒ€ƒ€ÝJçûûVûh(û
+=I”€”•ïØ÷ ÷÷wû5ùw wÔwÿ
+Éø†Ñ¸÷øìŠû9‰ûkŠû:ˆŠŠˆI‡}Šz|¨«Œ¬´¹¯ "ŒšŒœš2ŽŒ÷6Ž÷N÷6‘Ùûd×ûHÊû" š‹Œ”Ç÷Ñ÷7ã÷}‘Œû3ûTû+ˆŠŠˆŠ>ˆ}Šz|¬¶Œ²¯´ª "Œš‹œšEŽØŠ÷CŠ÷a÷9ŽŒÌŽŒš‹œšYMŠULû.?ûVEûB†¸?÷ND÷ON÷)RH‹WŠ}‹y|÷ZŒºivÿa€
+øðŒš‹œ™oi‹l[_‹eŠ|‹z|㈌‰ˆ|W`ûsGo=i-i5†jçmínäz¾a÷€³íŽšŒœš]X‹Vhe‹m|Š{|ňŽ‰‰Œ¦9ª-©7± ºûµû¡¥Œ“¸ó½÷³ò­ã³ñ«Þ÷þ•vÿe€
+ºÿ
+÷Jzãù ûB‹û}ŠûC‰Š‰ŠMˆŠ}‹{}ª¯Œ­°°‹§Œ™‹›˜LŽºŒÍ»Œ—¤Œš¤¨e¨Y¢a£aŸq§Ï‹Œ°·Œš‹›™O†…’„zž|¥v­m»q¬o¢²®°®ÆĺŽŒ™‹œŠ™rnŠpjf‹mŠ~‹z|º‰‹ˆ‰‰gajjehˆzi‹Œ÷*Œ÷<Œ÷ŽŠŒ‰ƒ#w†dzŠ~‹|}ûšŒÿ
+(Š‰‰‰QˆŠ~‹{}«°Œ®¶»‹¯Œ™‹›˜-¬‹³Œ®«°—¡¤¼¡¨›–š”Ž•£…Š”’—”›¶ †‘}tuagqûR†ŒŠŠÀŠÁ‰¥‹ŒŠ….x…c¢Š}‹}}û ¹÷ð¹ÃÔ÷-Õã÷z‰yˆz‡ded‚¡·Á¼¸”›¦µ¤¡°·×S¢C ;£x’´¥–›™•–™¡“¥£¡†˜Ž‰Ž‡Œ†™LœžŽšˆ°‡°‡¯‘h—VZc‚zmkylh[S«kÜrÞr©…Xo~z|€}vq‰oop•–}…ŠŽ‰û4‚Á÷Ô¼[¾íØEÓ°÷]‚°Ä“œº‰™‰œˆ˜‚he…thm¶¼‹ÅŒ´«‹ÌšÄÁ‹¸Œšž¨ŠXT‹XµŒÁŒ­ŠŒ‰ȈazzqŠnŠgŠo‡‡ˆ‰ЊvuŠvŠ|Šy{¢¥‹ŸrŠOlsŠ<XlŒt¥s°r§§Š •Ã÷ؽÞØ÷^×ø¶–r–y•¸Ã–—Œ˜‹›˜HŠ†‰•÷ ÷÷ŠŒŠ~2‰fŠ|‹z|ˉ@ŒûŠ8labxhos”¦z{¥Œ§µÞŒÛ׊Œ‰3ˆŠhŠ|Š{|ÈŠCŠ75GÉFγ ¿ã^–vøº÷eà÷Høoø Œš‹›˜tp‹pifŠlŠ~‹{}ňŒŠ‰Š€fy\pFrI|jya…|¶~µtÒuÑ}»…£ÎŒ™‹œ˜hc‹eii‹pŠ}‹||¿ˆŒŠ‰Œ˜fšb§8ª1œb­3 ¡‹Œ™±Ö¡»¨Î´æªÓ™¨÷6€âIv÷Äðv¹_¸ÿÿÓ€
+Ù ÷åøš
+endstream
+endobj
+1135 0 obj <<
+/Type /FontDescriptor
+/FontName /ZTBWJF+ChaparralPro-Regular
+/Flags 4
+/FontBBox [-163 -317 1073 871]
+/Ascent 740
+/CapHeight 650
+/Descent -260
+/ItalicAngle 0
+/StemV 82
+/XHeight 415
+/FontFile3 1134 0 R
+>> endobj
+1136 0 obj <<
+/Length 1077
+>>
+stream
+%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-ZTBWJF-ChaparralPro-Regular-0)
+%%Title: (TeX-ZTBWJF-ChaparralPro-Regular-0 TeX ZTBWJF-ChaparralPro-Regular 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (ZTBWJF-ChaparralPro-Regular)
+/Supplement 0
+>> def
+/CMapName /TeX-Identity-ZTBWJF-ChaparralPro-Regular def
+/CMapType 2 def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+7 beginbfrange
+<0008> <0010> <0027>
+<001B> <0020> <003A>
+<0022> <002B> <0041>
+<002D> <0031> <004C>
+<0033> <003A> <0052>
+<003C> <003E> <005B>
+<0041> <005B> <0060>
+endbfrange
+16 beginbfchar
+<0077> <0022>
+<00EA> <FB00>
+<00EB> <00660069>
+<00EC> <0066006C>
+<01A5> <0107>
+<01E9> <0030>
+<01EA> <0031>
+<01EB> <0032>
+<01EC> <0033>
+<01ED> <0034>
+<01EE> <0035>
+<01EF> <0036>
+<01F0> <0037>
+<01F1> <0038>
+<01F2> <0039>
+<0265> <00540068>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+endstream
+endobj
+5 0 obj <<
+/Type /Font
+/Subtype /Type0
+/Encoding /Identity-H
+/BaseFont /ZTBWJF+ChaparralPro-Regular
+/DescendantFonts [1137 0 R]
+/ToUnicode 1136 0 R
+>> endobj
+1137 0 obj <<
+/Type /Font
+/Subtype /CIDFontType0
+/BaseFont /ZTBWJF+ChaparralPro-Regular
+/FontDescriptor 1135 0 R
+/W 1133 0 R
+/CIDSystemInfo <<
+/Registry ()
+/Ordering (Identity)
+/Supplement 0
+>>
+>> endobj
+1138 0 obj <<
+/Length1 1438
+/Length2 6052
+/Length3 0
+/Length 7490
+>>
+stream
+%!PS-AdobeFont-1.0: CMMI10 003.002
+%%Title: CMMI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup
+/UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /SYFPBV+CMMI10 def
+/FontBBox {-32 -250 1048 750 }readonly def
+/UniqueID 5087385 def
+/PaintType 0 def
+/FontInfo 10 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI10.) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/ascent 750 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 62 /greater put
+dup 60 /less put
+readonly def
+currentdict end
+currentfile eexec
+ÙÖoc;„j²„¼ø°Aw-åÎ<ï˜øX2-Τ^tÅEÒ_á’SœÚKªFÙÄ1F^j¿NBqøžÞ×ó{ä³´y4ö-FègbÖÿöÔ“{÷"Ö¸
+’w¯àÇÊÈÜÄÁ‹Jv‚åð$†tE;ÈD4¯VÜ¢üŸ§vëš{bG@ëdÅ«ß)–ø²Nòhäòë]!(”À7h`”fŒ1ìzùpÜB˜r £æŠdÛž‡·Ç>“÷sVÙiHÂÞ­âkJ‡…KyÚÔÃÑàüuK—I[ÏÆ„(,M’=þ¬äì}µ%½vf†º'°–äE+œ)ê}fƒ¢Æ$lÜö(…ÔW2[8˜h¼T>¦Ü9„º€X33 vi˜®U/µçÇ¥Yö{z4þ¢ó¾¾B&Úq¯‹nŒzà³Ü|š¤¡úï1/É´c™±ŒCzwmáö|¯xá]LÇmo¥}­z¼m5íà׎Œo: ž©ê¿Š„.º‰"­ÛãĈõ¬d
+v¨Œúëzýëš N
+p´zªP;VÒ¿g6ǢŠ>Ù,ÿñ>º—O€J4mA0ÌýR3¶Ö¹*È{¾+¢ºä9á…iuåÏM”äO@h}-Û(Ž ‚Qȃ钌¼Aàô¹Ÿ‹)Ó±Ôí ¼¨=.9©çœëô3góœ=[¾_ÿbÿo_ðBV¤ßúƂ˶òW"í䶛ÂàaòéoZFsO‘)„”¤%ïd2ò¹wŒN»­ÓH>õD}õðÛ‘ÅY•¼í´±1jZ®ƒg¨¿1b¾¹œJªa|`¾h§b)ÁwYƒïc[&0j”ð²X
+˜hS·…¢&}pþ-ÒêfÖ^ aûÖ_
+Ål4zVéóènRóà¿_e@¯³*z|–‘•Wi.·9Ì)ŽÇ™›B†SŽßs3Ïk ,^Œb’šðz˹a Ë…4_BãêÜûÆÎú1ï+ÑÚÓìWµ²2ÊpoœDûœ«‰¾x>Êf×H³ú[]TEöÁjšRÈŠ~/+û ääê š˜Ýl8äzXÜ’p²ôŸ›H!V÷Üd¶!¶€;d4¢£T¥Ù5:,ãúv#cK*ÜÖ;+zÏXŒ¯z k ¤QÓßwÅ>aqÆb6å1Iú¹ÎK&…?eÐÕ÷‘=ˆêf¹¶<ðjKüŽÓ$k¸löÞ%_ôm$]™9ã-ă åkaLËÜù˜TÏP1{Ðn ‰ŽÕžFÚ{bT½Ì¼f†âí ­{‰LÒë&ˆÀÀ
+ÊX9ãʦàú÷îµß>?Úä´T ØÈoîRwšÓá:
+‡›e¹ï
+/ò ‰ºèÁyûí¸}„ ‡tæÚX¢ƒº"7€òqt„àfú}ÀæÑ”)°†8SRÓX•y<œs´2j•O^¼áƒº%À Uº…à{>Ô/ ¬¯©Cmoßå0Î%¬}¡pÛdç{h4>ŠŠ^wD¦ð@eQôdÄêaidYÑ^à@¿µ?p i3;²BŹAeûûÇôõ Ñ"­Kcéæ_
+
+ô>üÉüToÑ=¤*¸ÉËúy¤€Ù#p$™UÎa¦€²€5Q2Z3:·È<YGÑ{1øÿcVI°6(_rM"ø‰t…d€€ƒÝªNë†2]ciaáö4óÿ=ïÍr™»vyÛ¯h^*ÁHKÙ±|\ôØY‰wµMë£3,*µÄŠv5}.ª¥9¦°Ÿ"6a¼´eYéš}6©2}Kƒ0î_V°λŒÛÌ/§6À~ˉ0òkB’ˆÆþlî>w’ÞXê<âHY°Æxv½}€äF-$›"›b!(µzkDQRbt;³Çéj¤¸Äk äNö4­Ó4ù™ôß³ÜÿjA*›`gÒ‡Qª±² (¦ç;Ë°Q U„CpbèÍ@;øÃC
+¢ü…ùù¦?Îr
+²w}±‚HH/³*%úÛb•k“¯üY±yoxжj®î—x£²S½˜\yµ)n?ºžVè‚J¶ù+Èka… [zÜÌf˜±€—×fI*Ý[f=M3Ó)%¼ñ©®“qª®¶O(¿\-Z!ŒžëJÃ
+H)rQöµQ5ö£TbL}/>Î5kì÷=Qw¢Oþ75üˆ#:•×,¢U_LP?‘µÇÊNC®æSMöÕiïÕ Ú>•ÆÏ÷ˆå åñ3*×j#WÃDê8è‹$òÓ|òž!·FŠßÊÌŠ¸þéÚL“;_
+dQ–JI$¶º–ÃYÈ(ØmRqè÷£J[’~fÖ9,–«6³â_1ú£Ó~w »ë©S,?1?ƒ óÖAÔÅßyl(‚ãL¹Ït» ïUîìè À«m@Ò*ûT9ÛE¹¥WOg-Ú–ÖÁŒ°HépæaH"\z¤ýÂ/ÒÓ„EjV{1‰ó1̃T±•VLýÒ5yWK|z€Òóã—ð|Ú¶t¤jBdé…V=®zÙ3ÚÀTÖJ~¼æ[²¾µþÕ3`ýv þpnrƒU MVWª›ö.çY-t虘鰭²2zÕñ‘„¥
+<S6t1µlÄÝ`»bšæŠ
+’ô•|šº“(±4Ÿß§(éðB²ý-k¼»¹žÆ–k¥áôû»K®m‹Ý@Þ_¤A'æ×ÀZºÓÀ,$Re mÔD[­Àp~Ëð®ð‰ XÜ“Aý8mAzÙõçœd¾N;"ä™~Ñ’¨¾pß¼ö—¸CG¦€“NП°ŽÄß|; Kî6ÀAß÷ÔÇ``ä¾j:/ 
+\ÂtHCêïÊù™/
+Dáå »Ê {ieÄã ™¬<¡¯¾êÏý|Â.{—c°‡lø0Ž£ˆ(§ÚC˜+î͸ÙZ¸þp$ &ña§´$Eª’FHm
+Õ’cuýy¹URkàQRbµÊ‰«Í¿†„|¼XPÔ V½Å(ézÞÑêm{v½ŽÃNt*ŸÌñšc
+㟈+;= ›GÛz87Srp&†²$‰kõäÍ@㵦˜‹aM€ˆÂ–#ʲe|û˜ôb¯â™ tL‡8ѱ0—ʈ|ÏÓê¾O)ßqÐåF•t –OŸ£=x²¥ºÅ‹Ú ئ_æÅ=ÿ“ý+—¯ÒO9å†A}Ì¡\ áy^,=x_ŒÁ«U»Àß¡6O‡jBÚã8?…?„çåD»
+÷½ ­‘œ £E6älWr‡<4þøMÊ_]Tˆ™~'˜v¯û?Qy
+jà…О¤á”Á ˜|-°cL„ô´TŸîz~ÈœÿLú†7Ô¥­G+ZÀËŸBŒ±ßŠ¿ê=¸*&ÌT7«8~‡#˜ÒàÆ¿l•Â8¶²Å½¸hJû·¦Á ¢(jÿbå*=|tŒ,cÒ“0Å0l·ï°´Ís<Vºw
+«©ÇXw5Í/"Ëá|k™¨(e$/ÞJ«¾G ¸à“ÇõÁž0Mõo#hpÑTé%Äòå-R (>¥*Îú Ò¨ìÈ25ˆh¼èïº|I.5uÁ`QP£÷Ö‚)`ñ©—QQǶé(ü÷4“5•³^§ƒÞ„‚M߯oˆ5G*`?ÍRFM¨ àÀþÕÌgãŽêpÀfÚßnþ
+y¸q ´BÀ¶$Ã@'ˆÊ6é!Wëà
+ÎúE¶ÆI¹ï6ø,ûITÁ$‡þÎy›Ù‡î“H–pi¹æÿVchž]l&Ûß¡FÃÝ:¹ÂO¤é$#ÈŠ!D:¨
+„®Ù¼BˆÅçÃ{†bq®%ʳù¼
+}z‹– ¯oUá+bú•¿FujØOzs‰»žJ’®ÄáàšóB‰<izCµîPø—zŸ<X-Jã8—‡}§Œ=L—ÓhB.Š\ÏàFÝŽMñxUÙŽ_† ]-ÜuŒy-(7Κ—\Ax$sªTˆ¡µ
+LXÖyŠû­oÁà @–·âXƒ˜"âañ¼<+[é>1þ¿m‚­ ÛËžpØïMc(áÐÀ»yÁJqØü
+endstream
+endobj
+1139 0 obj <<
+/Type /FontDescriptor
+/FontName /SYFPBV+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/greater/less)
+/FontFile 1138 0 R
+>> endobj
+46 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SYFPBV+CMMI10
+/FontDescriptor 1139 0 R
+/FirstChar 60
+/LastChar 62
+/Widths 1102 0 R
+>> endobj
+8 0 obj <<
+/Type /Pages
+/Parent 1140 0 R
+/Count 6
+/Kids [3 0 R 11 0 R 20 0 R 26 0 R 32 0 R 37 0 R]
+>> endobj
+53 0 obj <<
+/Type /Pages
+/Parent 1140 0 R
+/Count 6
+/Kids [41 0 R 56 0 R 64 0 R 74 0 R 87 0 R 104 0 R]
+>> endobj
+124 0 obj <<
+/Type /Pages
+/Parent 1140 0 R
+/Count 6
+/Kids [114 0 R 128 0 R 144 0 R 156 0 R 161 0 R 168 0 R]
+>> endobj
+192 0 obj <<
+/Type /Pages
+/Parent 1140 0 R
+/Count 6
+/Kids [182 0 R 196 0 R 211 0 R 216 0 R 221 0 R 224 0 R]
+>> endobj
+237 0 obj <<
+/Type /Pages
+/Parent 1140 0 R
+/Count 6
+/Kids [227 0 R 239 0 R 244 0 R 248 0 R 251 0 R 261 0 R]
+>> endobj
+268 0 obj <<
+/Type /Pages
+/Parent 1140 0 R
+/Count 4
+/Kids [266 0 R 405 0 R 520 0 R 996 0 R]
+>> endobj
+1140 0 obj <<
+/Type /Pages
+/Count 34
+/Kids [8 0 R 53 0 R 124 0 R 192 0 R 237 0 R 268 0 R]
+>> endobj
+1141 0 obj <<
+/Type /Outlines
+/First 594 0 R
+/Last 993 0 R
+/Count 12
+>> endobj
+993 0 obj <<
+/Title 994 0 R
+/A 992 0 R
+/Parent 1141 0 R
+/Prev 990 0 R
+>> endobj
+990 0 obj <<
+/Title 991 0 R
+/A 989 0 R
+/Parent 1141 0 R
+/Prev 969 0 R
+/Next 993 0 R
+>> endobj
+987 0 obj <<
+/Title 988 0 R
+/A 986 0 R
+/Parent 969 0 R
+/Prev 984 0 R
+/C [.4 .4 .4]
+>> endobj
+984 0 obj <<
+/Title 985 0 R
+/A 983 0 R
+/Parent 969 0 R
+/Prev 981 0 R
+/Next 987 0 R
+/C [.4 .4 .4]
+>> endobj
+981 0 obj <<
+/Title 982 0 R
+/A 980 0 R
+/Parent 969 0 R
+/Prev 978 0 R
+/Next 984 0 R
+/C [.4 .4 .4]
+>> endobj
+978 0 obj <<
+/Title 979 0 R
+/A 977 0 R
+/Parent 969 0 R
+/Prev 975 0 R
+/Next 981 0 R
+/C [.4 .4 .4]
+>> endobj
+975 0 obj <<
+/Title 976 0 R
+/A 974 0 R
+/Parent 969 0 R
+/Prev 972 0 R
+/Next 978 0 R
+/C [.4 .4 .4]
+>> endobj
+972 0 obj <<
+/Title 973 0 R
+/A 971 0 R
+/Parent 969 0 R
+/Next 975 0 R
+/C [.4 .4 .4]
+>> endobj
+969 0 obj <<
+/Title 970 0 R
+/A 968 0 R
+/Parent 1141 0 R
+/Prev 966 0 R
+/Next 990 0 R
+/First 972 0 R
+/Last 987 0 R
+/Count -6
+>> endobj
+966 0 obj <<
+/Title 967 0 R
+/A 965 0 R
+/Parent 1141 0 R
+/Prev 930 0 R
+/Next 969 0 R
+>> endobj
+963 0 obj <<
+/Title 964 0 R
+/A 962 0 R
+/Parent 930 0 R
+/Prev 936 0 R
+/F 1
+>> endobj
+960 0 obj <<
+/Title 961 0 R
+/A 959 0 R
+/Parent 936 0 R
+/Prev 957 0 R
+/C [.4 .4 .4]
+>> endobj
+957 0 obj <<
+/Title 958 0 R
+/A 956 0 R
+/Parent 936 0 R
+/Prev 954 0 R
+/Next 960 0 R
+/C [.4 .4 .4]
+>> endobj
+954 0 obj <<
+/Title 955 0 R
+/A 953 0 R
+/Parent 936 0 R
+/Prev 951 0 R
+/Next 957 0 R
+/C [.4 .4 .4]
+>> endobj
+951 0 obj <<
+/Title 952 0 R
+/A 950 0 R
+/Parent 936 0 R
+/Prev 948 0 R
+/Next 954 0 R
+/C [.4 .4 .4]
+>> endobj
+948 0 obj <<
+/Title 949 0 R
+/A 947 0 R
+/Parent 936 0 R
+/Prev 945 0 R
+/Next 951 0 R
+/C [.4 .4 .4]
+>> endobj
+945 0 obj <<
+/Title 946 0 R
+/A 944 0 R
+/Parent 936 0 R
+/Prev 942 0 R
+/Next 948 0 R
+/C [.4 .4 .4]
+>> endobj
+942 0 obj <<
+/Title 943 0 R
+/A 941 0 R
+/Parent 936 0 R
+/Prev 939 0 R
+/Next 945 0 R
+/C [.4 .4 .4]
+>> endobj
+939 0 obj <<
+/Title 940 0 R
+/A 938 0 R
+/Parent 936 0 R
+/Next 942 0 R
+/C [.4 .4 .4]
+>> endobj
+936 0 obj <<
+/Title 937 0 R
+/A 935 0 R
+/Parent 930 0 R
+/Prev 933 0 R
+/Next 963 0 R
+/First 939 0 R
+/Last 960 0 R
+/Count -8
+/F 1
+>> endobj
+933 0 obj <<
+/Title 934 0 R
+/A 932 0 R
+/Parent 930 0 R
+/Next 936 0 R
+/F 1
+>> endobj
+930 0 obj <<
+/Title 931 0 R
+/A 929 0 R
+/Parent 1141 0 R
+/Prev 921 0 R
+/Next 966 0 R
+/First 933 0 R
+/Last 963 0 R
+/Count -3
+>> endobj
+927 0 obj <<
+/Title 928 0 R
+/A 926 0 R
+/Parent 921 0 R
+/Prev 924 0 R
+/F 1
+>> endobj
+924 0 obj <<
+/Title 925 0 R
+/A 923 0 R
+/Parent 921 0 R
+/Next 927 0 R
+/F 1
+>> endobj
+921 0 obj <<
+/Title 922 0 R
+/A 920 0 R
+/Parent 1141 0 R
+/Prev 813 0 R
+/Next 930 0 R
+/First 924 0 R
+/Last 927 0 R
+/Count -2
+>> endobj
+918 0 obj <<
+/Title 919 0 R
+/A 917 0 R
+/Parent 891 0 R
+/Prev 915 0 R
+/C [.4 .4 .4]
+>> endobj
+915 0 obj <<
+/Title 916 0 R
+/A 914 0 R
+/Parent 891 0 R
+/Prev 912 0 R
+/Next 918 0 R
+/C [.4 .4 .4]
+>> endobj
+912 0 obj <<
+/Title 913 0 R
+/A 911 0 R
+/Parent 891 0 R
+/Prev 909 0 R
+/Next 915 0 R
+/C [.4 .4 .4]
+>> endobj
+909 0 obj <<
+/Title 910 0 R
+/A 908 0 R
+/Parent 891 0 R
+/Prev 906 0 R
+/Next 912 0 R
+/C [.4 .4 .4]
+>> endobj
+906 0 obj <<
+/Title 907 0 R
+/A 905 0 R
+/Parent 891 0 R
+/Prev 903 0 R
+/Next 909 0 R
+/C [.4 .4 .4]
+>> endobj
+903 0 obj <<
+/Title 904 0 R
+/A 902 0 R
+/Parent 891 0 R
+/Prev 900 0 R
+/Next 906 0 R
+/C [.4 .4 .4]
+>> endobj
+900 0 obj <<
+/Title 901 0 R
+/A 899 0 R
+/Parent 891 0 R
+/Prev 897 0 R
+/Next 903 0 R
+/C [.4 .4 .4]
+>> endobj
+897 0 obj <<
+/Title 898 0 R
+/A 896 0 R
+/Parent 891 0 R
+/Prev 894 0 R
+/Next 900 0 R
+/C [.4 .4 .4]
+>> endobj
+894 0 obj <<
+/Title 895 0 R
+/A 893 0 R
+/Parent 891 0 R
+/Next 897 0 R
+/C [.4 .4 .4]
+>> endobj
+891 0 obj <<
+/Title 892 0 R
+/A 890 0 R
+/Parent 813 0 R
+/Prev 879 0 R
+/First 894 0 R
+/Last 918 0 R
+/Count -9
+/F 1
+>> endobj
+888 0 obj <<
+/Title 889 0 R
+/A 887 0 R
+/Parent 879 0 R
+/Prev 885 0 R
+/C [.4 .4 .4]
+>> endobj
+885 0 obj <<
+/Title 886 0 R
+/A 884 0 R
+/Parent 879 0 R
+/Prev 882 0 R
+/Next 888 0 R
+/C [.4 .4 .4]
+>> endobj
+882 0 obj <<
+/Title 883 0 R
+/A 881 0 R
+/Parent 879 0 R
+/Next 885 0 R
+/C [.4 .4 .4]
+>> endobj
+879 0 obj <<
+/Title 880 0 R
+/A 878 0 R
+/Parent 813 0 R
+/Prev 822 0 R
+/Next 891 0 R
+/First 882 0 R
+/Last 888 0 R
+/Count -3
+/F 1
+>> endobj
+876 0 obj <<
+/Title 877 0 R
+/A 875 0 R
+/Parent 822 0 R
+/Prev 873 0 R
+/C [.4 .4 .4]
+>> endobj
+873 0 obj <<
+/Title 874 0 R
+/A 872 0 R
+/Parent 822 0 R
+/Prev 870 0 R
+/Next 876 0 R
+/C [.4 .4 .4]
+>> endobj
+870 0 obj <<
+/Title 871 0 R
+/A 869 0 R
+/Parent 822 0 R
+/Prev 867 0 R
+/Next 873 0 R
+/C [.4 .4 .4]
+>> endobj
+867 0 obj <<
+/Title 868 0 R
+/A 866 0 R
+/Parent 822 0 R
+/Prev 864 0 R
+/Next 870 0 R
+/C [.4 .4 .4]
+>> endobj
+864 0 obj <<
+/Title 865 0 R
+/A 863 0 R
+/Parent 822 0 R
+/Prev 861 0 R
+/Next 867 0 R
+/C [.4 .4 .4]
+>> endobj
+861 0 obj <<
+/Title 862 0 R
+/A 860 0 R
+/Parent 822 0 R
+/Prev 858 0 R
+/Next 864 0 R
+/C [.4 .4 .4]
+>> endobj
+858 0 obj <<
+/Title 859 0 R
+/A 857 0 R
+/Parent 822 0 R
+/Prev 855 0 R
+/Next 861 0 R
+/C [.4 .4 .4]
+>> endobj
+855 0 obj <<
+/Title 856 0 R
+/A 854 0 R
+/Parent 822 0 R
+/Prev 852 0 R
+/Next 858 0 R
+/C [.4 .4 .4]
+>> endobj
+852 0 obj <<
+/Title 853 0 R
+/A 851 0 R
+/Parent 822 0 R
+/Prev 849 0 R
+/Next 855 0 R
+/C [.4 .4 .4]
+>> endobj
+849 0 obj <<
+/Title 850 0 R
+/A 848 0 R
+/Parent 822 0 R
+/Prev 846 0 R
+/Next 852 0 R
+/C [.4 .4 .4]
+>> endobj
+846 0 obj <<
+/Title 847 0 R
+/A 845 0 R
+/Parent 822 0 R
+/Prev 843 0 R
+/Next 849 0 R
+/C [.4 .4 .4]
+>> endobj
+843 0 obj <<
+/Title 844 0 R
+/A 842 0 R
+/Parent 822 0 R
+/Prev 840 0 R
+/Next 846 0 R
+/C [.4 .4 .4]
+>> endobj
+840 0 obj <<
+/Title 841 0 R
+/A 839 0 R
+/Parent 822 0 R
+/Prev 837 0 R
+/Next 843 0 R
+/C [.4 .4 .4]
+>> endobj
+837 0 obj <<
+/Title 838 0 R
+/A 836 0 R
+/Parent 822 0 R
+/Prev 834 0 R
+/Next 840 0 R
+/C [.4 .4 .4]
+>> endobj
+834 0 obj <<
+/Title 835 0 R
+/A 833 0 R
+/Parent 822 0 R
+/Prev 831 0 R
+/Next 837 0 R
+/C [.4 .4 .4]
+>> endobj
+831 0 obj <<
+/Title 832 0 R
+/A 830 0 R
+/Parent 822 0 R
+/Prev 828 0 R
+/Next 834 0 R
+/C [.4 .4 .4]
+>> endobj
+828 0 obj <<
+/Title 829 0 R
+/A 827 0 R
+/Parent 822 0 R
+/Prev 825 0 R
+/Next 831 0 R
+/C [.4 .4 .4]
+>> endobj
+825 0 obj <<
+/Title 826 0 R
+/A 824 0 R
+/Parent 822 0 R
+/Next 828 0 R
+/C [.4 .4 .4]
+>> endobj
+822 0 obj <<
+/Title 823 0 R
+/A 821 0 R
+/Parent 813 0 R
+/Prev 819 0 R
+/Next 879 0 R
+/First 825 0 R
+/Last 876 0 R
+/Count -18
+/F 1
+>> endobj
+819 0 obj <<
+/Title 820 0 R
+/A 818 0 R
+/Parent 813 0 R
+/Prev 816 0 R
+/Next 822 0 R
+/F 1
+>> endobj
+816 0 obj <<
+/Title 817 0 R
+/A 815 0 R
+/Parent 813 0 R
+/Next 819 0 R
+/F 1
+>> endobj
+813 0 obj <<
+/Title 814 0 R
+/A 812 0 R
+/Parent 1141 0 R
+/Prev 774 0 R
+/Next 921 0 R
+/First 816 0 R
+/Last 891 0 R
+/Count -5
+>> endobj
+810 0 obj <<
+/Title 811 0 R
+/A 809 0 R
+/Parent 774 0 R
+/Prev 807 0 R
+/C [.4 .4 .4]
+>> endobj
+807 0 obj <<
+/Title 808 0 R
+/A 806 0 R
+/Parent 774 0 R
+/Prev 804 0 R
+/Next 810 0 R
+/C [.4 .4 .4]
+>> endobj
+804 0 obj <<
+/Title 805 0 R
+/A 803 0 R
+/Parent 774 0 R
+/Prev 801 0 R
+/Next 807 0 R
+/C [.4 .4 .4]
+>> endobj
+801 0 obj <<
+/Title 802 0 R
+/A 800 0 R
+/Parent 774 0 R
+/Prev 798 0 R
+/Next 804 0 R
+/C [.4 .4 .4]
+>> endobj
+798 0 obj <<
+/Title 799 0 R
+/A 797 0 R
+/Parent 774 0 R
+/Prev 795 0 R
+/Next 801 0 R
+/C [.4 .4 .4]
+>> endobj
+795 0 obj <<
+/Title 796 0 R
+/A 794 0 R
+/Parent 774 0 R
+/Prev 792 0 R
+/Next 798 0 R
+/C [.4 .4 .4]
+>> endobj
+792 0 obj <<
+/Title 793 0 R
+/A 791 0 R
+/Parent 774 0 R
+/Prev 789 0 R
+/Next 795 0 R
+/C [.4 .4 .4]
+>> endobj
+789 0 obj <<
+/Title 790 0 R
+/A 788 0 R
+/Parent 774 0 R
+/Prev 786 0 R
+/Next 792 0 R
+/C [.4 .4 .4]
+>> endobj
+786 0 obj <<
+/Title 787 0 R
+/A 785 0 R
+/Parent 774 0 R
+/Prev 783 0 R
+/Next 789 0 R
+/C [.4 .4 .4]
+>> endobj
+783 0 obj <<
+/Title 784 0 R
+/A 782 0 R
+/Parent 774 0 R
+/Prev 780 0 R
+/Next 786 0 R
+/C [.4 .4 .4]
+>> endobj
+780 0 obj <<
+/Title 781 0 R
+/A 779 0 R
+/Parent 774 0 R
+/Prev 777 0 R
+/Next 783 0 R
+/C [.4 .4 .4]
+>> endobj
+777 0 obj <<
+/Title 778 0 R
+/A 776 0 R
+/Parent 774 0 R
+/Next 780 0 R
+/C [.4 .4 .4]
+>> endobj
+774 0 obj <<
+/Title 775 0 R
+/A 773 0 R
+/Parent 1141 0 R
+/Prev 717 0 R
+/Next 813 0 R
+/First 777 0 R
+/Last 810 0 R
+/Count -12
+>> endobj
+771 0 obj <<
+/Title 772 0 R
+/A 770 0 R
+/Parent 762 0 R
+/Prev 768 0 R
+/C [.4 .4 .4]
+>> endobj
+768 0 obj <<
+/Title 769 0 R
+/A 767 0 R
+/Parent 762 0 R
+/Prev 765 0 R
+/Next 771 0 R
+/C [.4 .4 .4]
+>> endobj
+765 0 obj <<
+/Title 766 0 R
+/A 764 0 R
+/Parent 762 0 R
+/Next 768 0 R
+/C [.4 .4 .4]
+>> endobj
+762 0 obj <<
+/Title 763 0 R
+/A 761 0 R
+/Parent 717 0 R
+/Prev 738 0 R
+/First 765 0 R
+/Last 771 0 R
+/Count -3
+/F 1
+>> endobj
+759 0 obj <<
+/Title 760 0 R
+/A 758 0 R
+/Parent 738 0 R
+/Prev 756 0 R
+/C [.4 .4 .4]
+>> endobj
+756 0 obj <<
+/Title 757 0 R
+/A 755 0 R
+/Parent 738 0 R
+/Prev 753 0 R
+/Next 759 0 R
+/C [.4 .4 .4]
+>> endobj
+753 0 obj <<
+/Title 754 0 R
+/A 752 0 R
+/Parent 738 0 R
+/Prev 750 0 R
+/Next 756 0 R
+/C [.4 .4 .4]
+>> endobj
+750 0 obj <<
+/Title 751 0 R
+/A 749 0 R
+/Parent 738 0 R
+/Prev 747 0 R
+/Next 753 0 R
+/C [.4 .4 .4]
+>> endobj
+747 0 obj <<
+/Title 748 0 R
+/A 746 0 R
+/Parent 738 0 R
+/Prev 744 0 R
+/Next 750 0 R
+/C [.4 .4 .4]
+>> endobj
+744 0 obj <<
+/Title 745 0 R
+/A 743 0 R
+/Parent 738 0 R
+/Prev 741 0 R
+/Next 747 0 R
+/C [.4 .4 .4]
+>> endobj
+741 0 obj <<
+/Title 742 0 R
+/A 740 0 R
+/Parent 738 0 R
+/Next 744 0 R
+/C [.4 .4 .4]
+>> endobj
+738 0 obj <<
+/Title 739 0 R
+/A 737 0 R
+/Parent 717 0 R
+/Prev 720 0 R
+/Next 762 0 R
+/First 741 0 R
+/Last 759 0 R
+/Count -7
+/F 1
+>> endobj
+735 0 obj <<
+/Title 736 0 R
+/A 734 0 R
+/Parent 720 0 R
+/Prev 732 0 R
+/C [.4 .4 .4]
+>> endobj
+732 0 obj <<
+/Title 733 0 R
+/A 731 0 R
+/Parent 720 0 R
+/Prev 729 0 R
+/Next 735 0 R
+/C [.4 .4 .4]
+>> endobj
+729 0 obj <<
+/Title 730 0 R
+/A 728 0 R
+/Parent 720 0 R
+/Prev 726 0 R
+/Next 732 0 R
+/C [.4 .4 .4]
+>> endobj
+726 0 obj <<
+/Title 727 0 R
+/A 725 0 R
+/Parent 720 0 R
+/Prev 723 0 R
+/Next 729 0 R
+/C [.4 .4 .4]
+>> endobj
+723 0 obj <<
+/Title 724 0 R
+/A 722 0 R
+/Parent 720 0 R
+/Next 726 0 R
+/C [.4 .4 .4]
+>> endobj
+720 0 obj <<
+/Title 721 0 R
+/A 719 0 R
+/Parent 717 0 R
+/Next 738 0 R
+/First 723 0 R
+/Last 735 0 R
+/Count -5
+/F 1
+>> endobj
+717 0 obj <<
+/Title 718 0 R
+/A 716 0 R
+/Parent 1141 0 R
+/Prev 618 0 R
+/Next 774 0 R
+/First 720 0 R
+/Last 762 0 R
+/Count -3
+>> endobj
+714 0 obj <<
+/Title 715 0 R
+/A 713 0 R
+/Parent 699 0 R
+/Prev 711 0 R
+/C [.4 .4 .4]
+>> endobj
+711 0 obj <<
+/Title 712 0 R
+/A 710 0 R
+/Parent 699 0 R
+/Prev 708 0 R
+/Next 714 0 R
+/C [.4 .4 .4]
+>> endobj
+708 0 obj <<
+/Title 709 0 R
+/A 707 0 R
+/Parent 699 0 R
+/Prev 705 0 R
+/Next 711 0 R
+/C [.4 .4 .4]
+>> endobj
+705 0 obj <<
+/Title 706 0 R
+/A 704 0 R
+/Parent 699 0 R
+/Prev 702 0 R
+/Next 708 0 R
+/C [.4 .4 .4]
+>> endobj
+702 0 obj <<
+/Title 703 0 R
+/A 701 0 R
+/Parent 699 0 R
+/Next 705 0 R
+/C [.4 .4 .4]
+>> endobj
+699 0 obj <<
+/Title 700 0 R
+/A 698 0 R
+/Parent 618 0 R
+/Prev 687 0 R
+/First 702 0 R
+/Last 714 0 R
+/Count -5
+/F 1
+>> endobj
+696 0 obj <<
+/Title 697 0 R
+/A 695 0 R
+/Parent 687 0 R
+/Prev 693 0 R
+/C [.4 .4 .4]
+>> endobj
+693 0 obj <<
+/Title 694 0 R
+/A 692 0 R
+/Parent 687 0 R
+/Prev 690 0 R
+/Next 696 0 R
+/C [.4 .4 .4]
+>> endobj
+690 0 obj <<
+/Title 691 0 R
+/A 689 0 R
+/Parent 687 0 R
+/Next 693 0 R
+/C [.4 .4 .4]
+>> endobj
+687 0 obj <<
+/Title 688 0 R
+/A 686 0 R
+/Parent 618 0 R
+/Prev 639 0 R
+/Next 699 0 R
+/First 690 0 R
+/Last 696 0 R
+/Count -3
+/F 1
+>> endobj
+684 0 obj <<
+/Title 685 0 R
+/A 683 0 R
+/Parent 639 0 R
+/Prev 681 0 R
+/C [.4 .4 .4]
+>> endobj
+681 0 obj <<
+/Title 682 0 R
+/A 680 0 R
+/Parent 639 0 R
+/Prev 678 0 R
+/Next 684 0 R
+/C [.4 .4 .4]
+>> endobj
+678 0 obj <<
+/Title 679 0 R
+/A 677 0 R
+/Parent 639 0 R
+/Prev 675 0 R
+/Next 681 0 R
+/C [.4 .4 .4]
+>> endobj
+675 0 obj <<
+/Title 676 0 R
+/A 674 0 R
+/Parent 639 0 R
+/Prev 672 0 R
+/Next 678 0 R
+/C [.4 .4 .4]
+>> endobj
+672 0 obj <<
+/Title 673 0 R
+/A 671 0 R
+/Parent 639 0 R
+/Prev 669 0 R
+/Next 675 0 R
+/C [.4 .4 .4]
+>> endobj
+669 0 obj <<
+/Title 670 0 R
+/A 668 0 R
+/Parent 639 0 R
+/Prev 666 0 R
+/Next 672 0 R
+/C [.4 .4 .4]
+>> endobj
+666 0 obj <<
+/Title 667 0 R
+/A 665 0 R
+/Parent 639 0 R
+/Prev 663 0 R
+/Next 669 0 R
+/C [.4 .4 .4]
+>> endobj
+663 0 obj <<
+/Title 664 0 R
+/A 662 0 R
+/Parent 639 0 R
+/Prev 660 0 R
+/Next 666 0 R
+/C [.4 .4 .4]
+>> endobj
+660 0 obj <<
+/Title 661 0 R
+/A 659 0 R
+/Parent 639 0 R
+/Prev 657 0 R
+/Next 663 0 R
+/C [.4 .4 .4]
+>> endobj
+657 0 obj <<
+/Title 658 0 R
+/A 656 0 R
+/Parent 639 0 R
+/Prev 654 0 R
+/Next 660 0 R
+/C [.4 .4 .4]
+>> endobj
+654 0 obj <<
+/Title 655 0 R
+/A 653 0 R
+/Parent 639 0 R
+/Prev 651 0 R
+/Next 657 0 R
+/C [.4 .4 .4]
+>> endobj
+651 0 obj <<
+/Title 652 0 R
+/A 650 0 R
+/Parent 639 0 R
+/Prev 648 0 R
+/Next 654 0 R
+/C [.4 .4 .4]
+>> endobj
+648 0 obj <<
+/Title 649 0 R
+/A 647 0 R
+/Parent 639 0 R
+/Prev 645 0 R
+/Next 651 0 R
+/C [.4 .4 .4]
+>> endobj
+645 0 obj <<
+/Title 646 0 R
+/A 644 0 R
+/Parent 639 0 R
+/Prev 642 0 R
+/Next 648 0 R
+/C [.4 .4 .4]
+>> endobj
+642 0 obj <<
+/Title 643 0 R
+/A 641 0 R
+/Parent 639 0 R
+/Next 645 0 R
+/C [.4 .4 .4]
+>> endobj
+639 0 obj <<
+/Title 640 0 R
+/A 638 0 R
+/Parent 618 0 R
+/Prev 621 0 R
+/Next 687 0 R
+/First 642 0 R
+/Last 684 0 R
+/Count -15
+/F 1
+>> endobj
+636 0 obj <<
+/Title 637 0 R
+/A 635 0 R
+/Parent 621 0 R
+/Prev 633 0 R
+/C [.4 .4 .4]
+>> endobj
+633 0 obj <<
+/Title 634 0 R
+/A 632 0 R
+/Parent 621 0 R
+/Prev 630 0 R
+/Next 636 0 R
+/C [.4 .4 .4]
+>> endobj
+630 0 obj <<
+/Title 631 0 R
+/A 629 0 R
+/Parent 621 0 R
+/Prev 627 0 R
+/Next 633 0 R
+/C [.4 .4 .4]
+>> endobj
+627 0 obj <<
+/Title 628 0 R
+/A 626 0 R
+/Parent 621 0 R
+/Prev 624 0 R
+/Next 630 0 R
+/C [.4 .4 .4]
+>> endobj
+624 0 obj <<
+/Title 625 0 R
+/A 623 0 R
+/Parent 621 0 R
+/Next 627 0 R
+/C [.4 .4 .4]
+>> endobj
+621 0 obj <<
+/Title 622 0 R
+/A 620 0 R
+/Parent 618 0 R
+/Next 639 0 R
+/First 624 0 R
+/Last 636 0 R
+/Count -5
+/F 1
+>> endobj
+618 0 obj <<
+/Title 619 0 R
+/A 617 0 R
+/Parent 1141 0 R
+/Prev 606 0 R
+/Next 717 0 R
+/First 621 0 R
+/Last 699 0 R
+/Count -4
+>> endobj
+615 0 obj <<
+/Title 616 0 R
+/A 614 0 R
+/Parent 606 0 R
+/Prev 612 0 R
+/F 1
+>> endobj
+612 0 obj <<
+/Title 613 0 R
+/A 611 0 R
+/Parent 606 0 R
+/Prev 609 0 R
+/Next 615 0 R
+/F 1
+>> endobj
+609 0 obj <<
+/Title 610 0 R
+/A 608 0 R
+/Parent 606 0 R
+/Next 612 0 R
+/F 1
+>> endobj
+606 0 obj <<
+/Title 607 0 R
+/A 605 0 R
+/Parent 1141 0 R
+/Prev 594 0 R
+/Next 618 0 R
+/First 609 0 R
+/Last 615 0 R
+/Count -3
+>> endobj
+603 0 obj <<
+/Title 604 0 R
+/A 602 0 R
+/Parent 594 0 R
+/Prev 600 0 R
+/F 1
+>> endobj
+600 0 obj <<
+/Title 601 0 R
+/A 599 0 R
+/Parent 594 0 R
+/Prev 597 0 R
+/Next 603 0 R
+/F 1
+>> endobj
+597 0 obj <<
+/Title 598 0 R
+/A 596 0 R
+/Parent 594 0 R
+/Next 600 0 R
+/F 1
+>> endobj
+594 0 obj <<
+/Title 595 0 R
+/A 593 0 R
+/Parent 1141 0 R
+/Next 606 0 R
+/First 597 0 R
+/Last 603 0 R
+/Count -3
+>> endobj
+1142 0 obj <<
+/Names [(backtrans) 97 0 R (param_1) 45 0 R (param_10) 61 0 R (param_11) 62 0 R (param_12) 66 0 R (param_13) 67 0 R (param_14) 68 0 R (param_15) 69 0 R (param_16) 70 0 R (param_17) 71 0 R (param_18) 76 0 R (param_19) 77 0 R (param_2) 47 0 R (param_20) 78 0 R (param_21) 80 0 R (param_22) 89 0 R (param_23) 90 0 R (param_24) 92 0 R (param_25) 94 0 R (param_26) 95 0 R (param_27) 96 0 R (param_28) 98 0 R (param_29) 108 0 R (param_3) 48 0 R (param_30) 109 0 R (param_31) 110 0 R (param_32) 111 0 R (param_33) 116 0 R (param_34) 118 0 R (param_35) 119 0 R (param_36) 120 0 R (param_37) 121 0 R]
+/Limits [(backtrans) (param_37)]
+>> endobj
+1143 0 obj <<
+/Names [(param_38) 122 0 R (param_39) 123 0 R (param_4) 49 0 R (param_40) 130 0 R (param_41) 132 0 R (param_42) 133 0 R (param_43) 134 0 R (param_44) 135 0 R (param_45) 136 0 R (param_46) 137 0 R (param_47) 138 0 R (param_48) 146 0 R (param_49) 147 0 R (param_5) 50 0 R (param_50) 148 0 R (param_51) 149 0 R (param_52) 151 0 R (param_53) 152 0 R (param_54) 153 0 R (param_55) 154 0 R (param_56) 164 0 R (param_57) 165 0 R (param_58) 166 0 R (param_59) 170 0 R (param_6) 52 0 R (param_60) 171 0 R (param_61) 172 0 R (param_62) 173 0 R (param_63) 174 0 R (param_64) 175 0 R (param_65) 176 0 R (param_66) 177 0 R]
+/Limits [(param_38) (param_66)]
+>> endobj
+1144 0 obj <<
+/Names [(param_67) 178 0 R (param_68) 179 0 R (param_69) 180 0 R (param_7) 58 0 R (param_70) 184 0 R (param_71) 185 0 R (param_72) 186 0 R (param_73) 187 0 R (param_74) 189 0 R (param_75) 190 0 R (param_76) 191 0 R (param_77) 199 0 R (param_78) 201 0 R (param_79) 202 0 R (param_8) 59 0 R (param_80) 203 0 R (param_81) 204 0 R (param_82) 205 0 R (param_83) 206 0 R (param_84) 208 0 R (param_85) 209 0 R (param_86) 230 0 R (param_87) 231 0 R (param_88) 232 0 R (param_89) 233 0 R (param_9) 60 0 R (param_90) 234 0 R (param_91) 235 0 R (param_92) 236 0 R (param_93) 241 0 R (param_94) 253 0 R (param_95) 254 0 R]
+/Limits [(param_67) (param_95)]
+>> endobj
+1145 0 obj <<
+/Names [(param_96) 255 0 R (param_97) 256 0 R (param_98) 257 0 R (param_99) 258 0 R (ptx@section_link:1) 9 0 R (ptx@section_link:10) 35 0 R (ptx@section_link:11) 43 0 R (ptx@section_link:12) 44 0 R (ptx@section_link:13) 54 0 R (ptx@section_link:14) 51 0 R (ptx@section_link:15) 79 0 R (ptx@section_link:16) 82 0 R (ptx@section_link:17) 91 0 R (ptx@section_link:18) 99 0 R (ptx@section_link:19) 100 0 R (ptx@section_link:2) 13 0 R (ptx@section_link:20) 101 0 R (ptx@section_link:21) 106 0 R (ptx@section_link:22) 107 0 R (ptx@section_link:23) 117 0 R (ptx@section_link:24) 131 0 R (ptx@section_link:25) 139 0 R (ptx@section_link:26) 158 0 R (ptx@section_link:27) 159 0 R (ptx@section_link:28) 163 0 R (ptx@section_link:29) 188 0 R (ptx@section_link:3) 15 0 R (ptx@section_link:30) 198 0 R (ptx@section_link:31) 213 0 R (ptx@section_link:32) 219 0 R (ptx@section_link:33) 229 0 R (ptx@section_link:34) 242 0 R]
+/Limits [(param_96) (ptx@section_link:34)]
+>> endobj
+1146 0 obj <<
+/Names [(ptx@section_link:35) 259 0 R (ptx@section_link:4) 16 0 R (ptx@section_link:5) 22 0 R (ptx@section_link:6) 24 0 R (ptx@section_link:7) 28 0 R (ptx@section_link:8) 29 0 R (ptx@section_link:9) 34 0 R]
+/Limits [(ptx@section_link:35) (ptx@section_link:9)]
+>> endobj
+1147 0 obj <<
+/Kids [1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R]
+/Limits [(backtrans) (ptx@section_link:9)]
+>> endobj
+1148 0 obj <<
+/Dests 1147 0 R
+>> endobj
+1149 0 obj <<
+/Type /Catalog
+/Pages 1140 0 R
+/Outlines 1141 0 R
+/Names 1148 0 R
+/PageMode /UseOutlines
+>> endobj
+1150 0 obj <<
+/Producer (LuaTeX-0.60.2)
+/Author (Paul Isambert) /Title (Lecturer's documentation)
+/Creator (TeX)
+/CreationDate (D:20100727211304+02'00')
+/ModDate (D:20100727211304+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is LuaTeX, Version beta-0.60.2-2010070109 (rev 3730) (Web2C 2010/dev) kpathsea version 6.0.0dev)
+>> endobj
+xref
+0 1151
+0000000000 65535 f
+0000035552 00000 n
+0000035699 00000 n
+0000035422 00000 n
+0000000015 00000 n
+0001906299 00000 n
+0001891229 00000 n
+0001864108 00000 n
+0001914630 00000 n
+0001041207 00000 n
+0000060544 00000 n
+0000060249 00000 n
+0000035791 00000 n
+0000060364 00000 n
+0001851765 00000 n
+0000060424 00000 n
+0000060484 00000 n
+0001844052 00000 n
+0000092657 00000 n
+0000092864 00000 n
+0000092523 00000 n
+0000060662 00000 n
+0000092804 00000 n
+0001825783 00000 n
+0000429958 00000 n
+0000127620 00000 n
+0000127385 00000 n
+0000092983 00000 n
+0000127500 00000 n
+0000127560 00000 n
+0001813586 00000 n
+0000160006 00000 n
+0000159771 00000 n
+0000127763 00000 n
+0000159886 00000 n
+0000159946 00000 n
+0000181891 00000 n
+0000181776 00000 n
+0000160112 00000 n
+0000216837 00000 n
+0000217526 00000 n
+0000216702 00000 n
+0000181999 00000 n
+0000216986 00000 n
+0000217046 00000 n
+0000217106 00000 n
+0001914486 00000 n
+0000217166 00000 n
+0000217226 00000 n
+0000217286 00000 n
+0000217346 00000 n
+0000217406 00000 n
+0000217466 00000 n
+0001914739 00000 n
+0000634921 00000 n
+0000251384 00000 n
+0000250968 00000 n
+0000217668 00000 n
+0000251084 00000 n
+0000251144 00000 n
+0000251204 00000 n
+0000251264 00000 n
+0000251324 00000 n
+0000274197 00000 n
+0000273721 00000 n
+0000251501 00000 n
+0000273837 00000 n
+0000273897 00000 n
+0000273957 00000 n
+0000274017 00000 n
+0000274077 00000 n
+0000274137 00000 n
+0000301892 00000 n
+0000302490 00000 n
+0000301750 00000 n
+0000274314 00000 n
+0000302190 00000 n
+0000302250 00000 n
+0000302310 00000 n
+0000302370 00000 n
+0000302430 00000 n
+0000302041 00000 n
+0000503037 00000 n
+0000341500 00000 n
+0000341798 00000 n
+0000341947 00000 n
+0000342635 00000 n
+0000341344 00000 n
+0000302607 00000 n
+0000342096 00000 n
+0000342156 00000 n
+0000342216 00000 n
+0000342275 00000 n
+0000341649 00000 n
+0000342335 00000 n
+0000342395 00000 n
+0000342455 00000 n
+0000342515 00000 n
+0000342575 00000 n
+0000724451 00000 n
+0000801921 00000 n
+0000890924 00000 n
+0000380798 00000 n
+0000381466 00000 n
+0000380651 00000 n
+0000342765 00000 n
+0000381095 00000 n
+0000381157 00000 n
+0000381219 00000 n
+0000381280 00000 n
+0000381342 00000 n
+0000381404 00000 n
+0000380947 00000 n
+0000404911 00000 n
+0000404296 00000 n
+0000381609 00000 n
+0000404416 00000 n
+0000404478 00000 n
+0000404540 00000 n
+0000404601 00000 n
+0000404663 00000 n
+0000404725 00000 n
+0000404787 00000 n
+0000404849 00000 n
+0001914851 00000 n
+0000429348 00000 n
+0000429498 00000 n
+0000430265 00000 n
+0000429200 00000 n
+0000405029 00000 n
+0000429648 00000 n
+0000429710 00000 n
+0000429772 00000 n
+0000429834 00000 n
+0000429896 00000 n
+0000430019 00000 n
+0000430081 00000 n
+0000430143 00000 n
+0000430205 00000 n
+0000724512 00000 n
+0000462646 00000 n
+0000462796 00000 n
+0000463093 00000 n
+0000463738 00000 n
+0000462482 00000 n
+0000430408 00000 n
+0000463243 00000 n
+0000463305 00000 n
+0000463367 00000 n
+0000463429 00000 n
+0000462945 00000 n
+0000463490 00000 n
+0000463552 00000 n
+0000463614 00000 n
+0000463676 00000 n
+0000503098 00000 n
+0000502793 00000 n
+0000463856 00000 n
+0000502913 00000 n
+0000502975 00000 n
+0000528519 00000 n
+0000528151 00000 n
+0000503217 00000 n
+0000528271 00000 n
+0000528333 00000 n
+0000528395 00000 n
+0000528457 00000 n
+0000560886 00000 n
+0000560085 00000 n
+0000528637 00000 n
+0000560205 00000 n
+0000560267 00000 n
+0000560329 00000 n
+0000560391 00000 n
+0000560453 00000 n
+0000560514 00000 n
+0000560576 00000 n
+0000560638 00000 n
+0000560700 00000 n
+0000560762 00000 n
+0000560824 00000 n
+0000586142 00000 n
+0000585526 00000 n
+0000561004 00000 n
+0000585646 00000 n
+0000585708 00000 n
+0000585770 00000 n
+0000585832 00000 n
+0000585894 00000 n
+0000585956 00000 n
+0000586018 00000 n
+0000586080 00000 n
+0001914969 00000 n
+0000614627 00000 n
+0000614926 00000 n
+0000615846 00000 n
+0000614463 00000 n
+0000586260 00000 n
+0000615226 00000 n
+0000615288 00000 n
+0000614777 00000 n
+0000615350 00000 n
+0000615412 00000 n
+0000615474 00000 n
+0000615536 00000 n
+0000615598 00000 n
+0000615660 00000 n
+0000615076 00000 n
+0000615722 00000 n
+0000615784 00000 n
+0000634980 00000 n
+0000634739 00000 n
+0000615964 00000 n
+0000634859 00000 n
+0000673553 00000 n
+0000673915 00000 n
+0000673405 00000 n
+0000635112 00000 n
+0000673703 00000 n
+0000673853 00000 n
+0000695014 00000 n
+0000694894 00000 n
+0000674035 00000 n
+0000724574 00000 n
+0000724331 00000 n
+0000695110 00000 n
+0000760308 00000 n
+0000759692 00000 n
+0000724693 00000 n
+0000759812 00000 n
+0000759874 00000 n
+0000759936 00000 n
+0000759998 00000 n
+0000760060 00000 n
+0000760122 00000 n
+0000760184 00000 n
+0000760246 00000 n
+0001915087 00000 n
+0000802045 00000 n
+0000801739 00000 n
+0000760438 00000 n
+0000801859 00000 n
+0000801983 00000 n
+0000838159 00000 n
+0000838039 00000 n
+0000802175 00000 n
+0000862754 00000 n
+0000862903 00000 n
+0000862614 00000 n
+0000838266 00000 n
+0000891418 00000 n
+0000890804 00000 n
+0000863010 00000 n
+0000890986 00000 n
+0000891048 00000 n
+0000891108 00000 n
+0000891170 00000 n
+0000891232 00000 n
+0000891294 00000 n
+0000891356 00000 n
+0000908106 00000 n
+0000907986 00000 n
+0000891548 00000 n
+0000934139 00000 n
+0001006478 00000 n
+0001041267 00000 n
+0000934019 00000 n
+0000908214 00000 n
+0001915205 00000 n
+0000941794 00000 n
+0000942301 00000 n
+0000948911 00000 n
+0000948961 00000 n
+0000949011 00000 n
+0000949061 00000 n
+0000949106 00000 n
+0000949156 00000 n
+0000949206 00000 n
+0000949257 00000 n
+0000949312 00000 n
+0000949362 00000 n
+0000949412 00000 n
+0000949455 00000 n
+0000949505 00000 n
+0000949555 00000 n
+0000949603 00000 n
+0000949646 00000 n
+0000949696 00000 n
+0000949746 00000 n
+0000949797 00000 n
+0000949845 00000 n
+0000949895 00000 n
+0000949945 00000 n
+0000949995 00000 n
+0000950045 00000 n
+0000950095 00000 n
+0000950145 00000 n
+0000950195 00000 n
+0000950245 00000 n
+0000950298 00000 n
+0000950350 00000 n
+0000950405 00000 n
+0000950460 00000 n
+0000950509 00000 n
+0000950562 00000 n
+0000950615 00000 n
+0000950668 00000 n
+0000950712 00000 n
+0000950756 00000 n
+0000950800 00000 n
+0000950844 00000 n
+0000950889 00000 n
+0000950937 00000 n
+0000950985 00000 n
+0000951144 00000 n
+0000951301 00000 n
+0000951459 00000 n
+0000951614 00000 n
+0000951764 00000 n
+0000952193 00000 n
+0000952464 00000 n
+0000952738 00000 n
+0000953014 00000 n
+0000953285 00000 n
+0000953508 00000 n
+0000954055 00000 n
+0000954253 00000 n
+0000954756 00000 n
+0000954955 00000 n
+0000955525 00000 n
+0000955721 00000 n
+0000956228 00000 n
+0000956442 00000 n
+0000956989 00000 n
+0000957068 00000 n
+0000957173 00000 n
+0000957278 00000 n
+0000957383 00000 n
+0000957488 00000 n
+0000957708 00000 n
+0000958207 00000 n
+0000958430 00000 n
+0000958636 00000 n
+0000958858 00000 n
+0000959265 00000 n
+0000959484 00000 n
+0000959666 00000 n
+0000959877 00000 n
+0000960217 00000 n
+0000975481 00000 n
+0000980037 00000 n
+0000989375 00000 n
+0000993385 00000 n
+0001007563 00000 n
+0001007966 00000 n
+0001010035 00000 n
+0001010085 00000 n
+0001010135 00000 n
+0001010185 00000 n
+0001010235 00000 n
+0001010285 00000 n
+0001010335 00000 n
+0001010378 00000 n
+0001010428 00000 n
+0001010471 00000 n
+0001010514 00000 n
+0001010557 00000 n
+0001010608 00000 n
+0001010659 00000 n
+0001010709 00000 n
+0001010759 00000 n
+0001010809 00000 n
+0001010859 00000 n
+0001010909 00000 n
+0001010959 00000 n
+0001011009 00000 n
+0001011052 00000 n
+0001011095 00000 n
+0001011138 00000 n
+0001011189 00000 n
+0001011240 00000 n
+0001011290 00000 n
+0001011340 00000 n
+0001011390 00000 n
+0001011440 00000 n
+0001011490 00000 n
+0001011540 00000 n
+0001011583 00000 n
+0001011633 00000 n
+0001011776 00000 n
+0001011920 00000 n
+0001012063 00000 n
+0001012336 00000 n
+0001012595 00000 n
+0001012995 00000 n
+0001013223 00000 n
+0001013249 00000 n
+0001013616 00000 n
+0001014246 00000 n
+0001014325 00000 n
+0001022379 00000 n
+0001029425 00000 n
+0001083131 00000 n
+0001110534 00000 n
+0001182495 00000 n
+0001083011 00000 n
+0001041414 00000 n
+0001084485 00000 n
+0001084914 00000 n
+0001087915 00000 n
+0001087965 00000 n
+0001088015 00000 n
+0001088065 00000 n
+0001088115 00000 n
+0001088165 00000 n
+0001088215 00000 n
+0001088265 00000 n
+0001088315 00000 n
+0001088365 00000 n
+0001088416 00000 n
+0001088466 00000 n
+0001088516 00000 n
+0001088566 00000 n
+0001088616 00000 n
+0001088666 00000 n
+0001088716 00000 n
+0001088766 00000 n
+0001088816 00000 n
+0001088866 00000 n
+0001088916 00000 n
+0001088966 00000 n
+0001089016 00000 n
+0001089066 00000 n
+0001089116 00000 n
+0001089261 00000 n
+0001089416 00000 n
+0001089869 00000 n
+0001090356 00000 n
+0001090575 00000 n
+0001091008 00000 n
+0001107426 00000 n
+0001107642 00000 n
+0001107672 00000 n
+0001111865 00000 n
+0001112314 00000 n
+0001114743 00000 n
+0001114794 00000 n
+0001114844 00000 n
+0001114894 00000 n
+0001114944 00000 n
+0001114994 00000 n
+0001115044 00000 n
+0001115094 00000 n
+0001115144 00000 n
+0001115194 00000 n
+0001115244 00000 n
+0001115287 00000 n
+0001115338 00000 n
+0001115381 00000 n
+0001115424 00000 n
+0001115467 00000 n
+0001115518 00000 n
+0001115568 00000 n
+0001115618 00000 n
+0001115668 00000 n
+0001115718 00000 n
+0001115768 00000 n
+0001115818 00000 n
+0001115868 00000 n
+0001115918 00000 n
+0001115968 00000 n
+0001116011 00000 n
+0001116054 00000 n
+0001116105 00000 n
+0001116148 00000 n
+0001116199 00000 n
+0001116250 00000 n
+0001116300 00000 n
+0001116350 00000 n
+0001116400 00000 n
+0001116450 00000 n
+0001116500 00000 n
+0001116550 00000 n
+0001116600 00000 n
+0001116650 00000 n
+0001116700 00000 n
+0001116743 00000 n
+0001116794 00000 n
+0001116845 00000 n
+0001116896 00000 n
+0001117038 00000 n
+0001117181 00000 n
+0001117323 00000 n
+0001117465 00000 n
+0001117607 00000 n
+0001117750 00000 n
+0001118047 00000 n
+0001118312 00000 n
+0001118578 00000 n
+0001119045 00000 n
+0001119306 00000 n
+0001119640 00000 n
+0001120021 00000 n
+0001120633 00000 n
+0001120859 00000 n
+0001120903 00000 n
+0001121154 00000 n
+0001121791 00000 n
+0001122019 00000 n
+0001122103 00000 n
+0001122182 00000 n
+0001122261 00000 n
+0001131923 00000 n
+0001141329 00000 n
+0001159638 00000 n
+0001167359 00000 n
+0001174701 00000 n
+0001210743 00000 n
+0001353221 00000 n
+0001307704 00000 n
+0001210623 00000 n
+0001182630 00000 n
+0001212595 00000 n
+0001213043 00000 n
+0001214045 00000 n
+0001214096 00000 n
+0001214146 00000 n
+0001214196 00000 n
+0001214246 00000 n
+0001214296 00000 n
+0001214346 00000 n
+0001214396 00000 n
+0001214439 00000 n
+0001214482 00000 n
+0001214525 00000 n
+0001214568 00000 n
+0001214619 00000 n
+0001214763 00000 n
+0001214906 00000 n
+0001215049 00000 n
+0001215191 00000 n
+0001215333 00000 n
+0001215475 00000 n
+0001215615 00000 n
+0001215755 00000 n
+0001215898 00000 n
+0001216165 00000 n
+0001216461 00000 n
+0001216722 00000 n
+0001216978 00000 n
+0001217243 00000 n
+0001217498 00000 n
+0001217757 00000 n
+0001218023 00000 n
+0001218288 00000 n
+0001218553 00000 n
+0001218817 00000 n
+0001219277 00000 n
+0001219549 00000 n
+0001219993 00000 n
+0001220258 00000 n
+0001220582 00000 n
+0001220808 00000 n
+0001220852 00000 n
+0001221222 00000 n
+0001221834 00000 n
+0001222085 00000 n
+0001222722 00000 n
+0001222942 00000 n
+0001222968 00000 n
+0001223188 00000 n
+0001223214 00000 n
+0001223442 00000 n
+0001223526 00000 n
+0001223605 00000 n
+0001223684 00000 n
+0001223763 00000 n
+0001223842 00000 n
+0001223921 00000 n
+0001224000 00000 n
+0001224079 00000 n
+0001224158 00000 n
+0001224237 00000 n
+0001224316 00000 n
+0001233259 00000 n
+0001243266 00000 n
+0001253016 00000 n
+0001260737 00000 n
+0001278551 00000 n
+0001285893 00000 n
+0001292893 00000 n
+0001299910 00000 n
+0001380979 00000 n
+0001307826 00000 n
+0001929537 00000 n
+0001307882 00000 n
+0001307914 00000 n
+0001929453 00000 n
+0001307970 00000 n
+0001307997 00000 n
+0001929355 00000 n
+0001308053 00000 n
+0001308091 00000 n
+0001929271 00000 n
+0001308147 00000 n
+0001308191 00000 n
+0001929138 00000 n
+0001308247 00000 n
+0001308303 00000 n
+0001929054 00000 n
+0001308359 00000 n
+0001308394 00000 n
+0001928956 00000 n
+0001308450 00000 n
+0001308484 00000 n
+0001928872 00000 n
+0001308541 00000 n
+0001308574 00000 n
+0001928739 00000 n
+0001308631 00000 n
+0001308672 00000 n
+0001928616 00000 n
+0001308729 00000 n
+0001308767 00000 n
+0001928523 00000 n
+0001308812 00000 n
+0001308840 00000 n
+0001928416 00000 n
+0001308885 00000 n
+0001308913 00000 n
+0001928309 00000 n
+0001308958 00000 n
+0001308991 00000 n
+0001928202 00000 n
+0001309036 00000 n
+0001309069 00000 n
+0001928109 00000 n
+0001309114 00000 n
+0001309140 00000 n
+0001927971 00000 n
+0001309197 00000 n
+0001309227 00000 n
+0001927878 00000 n
+0001309272 00000 n
+0001309297 00000 n
+0001927771 00000 n
+0001309342 00000 n
+0001309368 00000 n
+0001927664 00000 n
+0001309413 00000 n
+0001309438 00000 n
+0001927557 00000 n
+0001309483 00000 n
+0001309507 00000 n
+0001927450 00000 n
+0001309553 00000 n
+0001309578 00000 n
+0001927343 00000 n
+0001309624 00000 n
+0001309649 00000 n
+0001927236 00000 n
+0001309695 00000 n
+0001309718 00000 n
+0001927129 00000 n
+0001309764 00000 n
+0001309790 00000 n
+0001927022 00000 n
+0001309836 00000 n
+0001309868 00000 n
+0001926915 00000 n
+0001309914 00000 n
+0001309941 00000 n
+0001926808 00000 n
+0001309987 00000 n
+0001310014 00000 n
+0001926701 00000 n
+0001310060 00000 n
+0001310089 00000 n
+0001926594 00000 n
+0001310135 00000 n
+0001310159 00000 n
+0001926487 00000 n
+0001310205 00000 n
+0001310229 00000 n
+0001926394 00000 n
+0001310275 00000 n
+0001310300 00000 n
+0001926257 00000 n
+0001310357 00000 n
+0001310384 00000 n
+0001926164 00000 n
+0001310430 00000 n
+0001310460 00000 n
+0001926057 00000 n
+0001310506 00000 n
+0001310531 00000 n
+0001925964 00000 n
+0001310577 00000 n
+0001310603 00000 n
+0001925841 00000 n
+0001310660 00000 n
+0001310685 00000 n
+0001925748 00000 n
+0001310731 00000 n
+0001310761 00000 n
+0001925641 00000 n
+0001310807 00000 n
+0001310837 00000 n
+0001925534 00000 n
+0001310883 00000 n
+0001310908 00000 n
+0001925427 00000 n
+0001310954 00000 n
+0001310978 00000 n
+0001925334 00000 n
+0001311024 00000 n
+0001311054 00000 n
+0001925201 00000 n
+0001311111 00000 n
+0001311151 00000 n
+0001925078 00000 n
+0001311208 00000 n
+0001311246 00000 n
+0001924985 00000 n
+0001311292 00000 n
+0001311320 00000 n
+0001924878 00000 n
+0001311366 00000 n
+0001311388 00000 n
+0001924771 00000 n
+0001311434 00000 n
+0001311457 00000 n
+0001924664 00000 n
+0001311503 00000 n
+0001311530 00000 n
+0001924571 00000 n
+0001311576 00000 n
+0001311603 00000 n
+0001924434 00000 n
+0001311660 00000 n
+0001311687 00000 n
+0001924341 00000 n
+0001311733 00000 n
+0001311757 00000 n
+0001924234 00000 n
+0001311803 00000 n
+0001311828 00000 n
+0001924127 00000 n
+0001311874 00000 n
+0001311899 00000 n
+0001924020 00000 n
+0001311945 00000 n
+0001311975 00000 n
+0001923913 00000 n
+0001312021 00000 n
+0001312046 00000 n
+0001923806 00000 n
+0001312092 00000 n
+0001312122 00000 n
+0001923713 00000 n
+0001312168 00000 n
+0001312193 00000 n
+0001923590 00000 n
+0001312250 00000 n
+0001312275 00000 n
+0001923497 00000 n
+0001312321 00000 n
+0001312345 00000 n
+0001923390 00000 n
+0001312391 00000 n
+0001312416 00000 n
+0001923297 00000 n
+0001312462 00000 n
+0001312492 00000 n
+0001923163 00000 n
+0001312548 00000 n
+0001312590 00000 n
+0001923070 00000 n
+0001312636 00000 n
+0001312662 00000 n
+0001922963 00000 n
+0001312708 00000 n
+0001312737 00000 n
+0001922856 00000 n
+0001312783 00000 n
+0001312808 00000 n
+0001922749 00000 n
+0001312854 00000 n
+0001312882 00000 n
+0001922642 00000 n
+0001312928 00000 n
+0001312952 00000 n
+0001922535 00000 n
+0001312998 00000 n
+0001313028 00000 n
+0001922428 00000 n
+0001313074 00000 n
+0001313098 00000 n
+0001922321 00000 n
+0001313144 00000 n
+0001313168 00000 n
+0001922214 00000 n
+0001313214 00000 n
+0001313244 00000 n
+0001922107 00000 n
+0001313290 00000 n
+0001313324 00000 n
+0001922000 00000 n
+0001313370 00000 n
+0001313396 00000 n
+0001921907 00000 n
+0001313442 00000 n
+0001313470 00000 n
+0001921774 00000 n
+0001313527 00000 n
+0001313552 00000 n
+0001921690 00000 n
+0001313609 00000 n
+0001313641 00000 n
+0001921592 00000 n
+0001313698 00000 n
+0001313742 00000 n
+0001921454 00000 n
+0001313799 00000 n
+0001313829 00000 n
+0001921361 00000 n
+0001313875 00000 n
+0001313900 00000 n
+0001921254 00000 n
+0001313946 00000 n
+0001313972 00000 n
+0001921147 00000 n
+0001314018 00000 n
+0001314045 00000 n
+0001921040 00000 n
+0001314091 00000 n
+0001314117 00000 n
+0001920933 00000 n
+0001314163 00000 n
+0001314189 00000 n
+0001920826 00000 n
+0001314235 00000 n
+0001314262 00000 n
+0001920719 00000 n
+0001314308 00000 n
+0001314333 00000 n
+0001920612 00000 n
+0001314379 00000 n
+0001314403 00000 n
+0001920505 00000 n
+0001314449 00000 n
+0001314474 00000 n
+0001920398 00000 n
+0001314520 00000 n
+0001314544 00000 n
+0001920291 00000 n
+0001314590 00000 n
+0001314615 00000 n
+0001920184 00000 n
+0001314661 00000 n
+0001314684 00000 n
+0001920077 00000 n
+0001314730 00000 n
+0001314756 00000 n
+0001919970 00000 n
+0001314802 00000 n
+0001314826 00000 n
+0001919863 00000 n
+0001314872 00000 n
+0001314904 00000 n
+0001919756 00000 n
+0001314950 00000 n
+0001314977 00000 n
+0001919649 00000 n
+0001315023 00000 n
+0001315050 00000 n
+0001919556 00000 n
+0001315096 00000 n
+0001315125 00000 n
+0001919419 00000 n
+0001315182 00000 n
+0001315209 00000 n
+0001919326 00000 n
+0001315255 00000 n
+0001315282 00000 n
+0001919219 00000 n
+0001315328 00000 n
+0001315361 00000 n
+0001919126 00000 n
+0001315407 00000 n
+0001315444 00000 n
+0001919003 00000 n
+0001315501 00000 n
+0001315526 00000 n
+0001918910 00000 n
+0001315572 00000 n
+0001315602 00000 n
+0001918803 00000 n
+0001315648 00000 n
+0001315678 00000 n
+0001918696 00000 n
+0001315724 00000 n
+0001315749 00000 n
+0001918589 00000 n
+0001315795 00000 n
+0001315819 00000 n
+0001918482 00000 n
+0001315865 00000 n
+0001315890 00000 n
+0001918375 00000 n
+0001315936 00000 n
+0001315967 00000 n
+0001918268 00000 n
+0001316013 00000 n
+0001316044 00000 n
+0001918161 00000 n
+0001316090 00000 n
+0001316122 00000 n
+0001918068 00000 n
+0001316168 00000 n
+0001316198 00000 n
+0001917935 00000 n
+0001316255 00000 n
+0001316285 00000 n
+0001917851 00000 n
+0001316342 00000 n
+0001316380 00000 n
+0001917767 00000 n
+0001316437 00000 n
+0001316476 00000 n
+0001917634 00000 n
+0001316533 00000 n
+0001316579 00000 n
+0001917550 00000 n
+0001316636 00000 n
+0001316662 00000 n
+0001917413 00000 n
+0001316719 00000 n
+0001316745 00000 n
+0001917320 00000 n
+0001316791 00000 n
+0001316816 00000 n
+0001917213 00000 n
+0001316862 00000 n
+0001316886 00000 n
+0001917106 00000 n
+0001316932 00000 n
+0001316954 00000 n
+0001916999 00000 n
+0001317000 00000 n
+0001317025 00000 n
+0001916892 00000 n
+0001317071 00000 n
+0001317096 00000 n
+0001916785 00000 n
+0001317142 00000 n
+0001317167 00000 n
+0001916678 00000 n
+0001317213 00000 n
+0001317239 00000 n
+0001916585 00000 n
+0001317285 00000 n
+0001317310 00000 n
+0001916501 00000 n
+0001317367 00000 n
+0001317393 00000 n
+0001916407 00000 n
+0001317450 00000 n
+0001317485 00000 n
+0001916274 00000 n
+0001317542 00000 n
+0001317573 00000 n
+0001916181 00000 n
+0001317619 00000 n
+0001317643 00000 n
+0001916074 00000 n
+0001317689 00000 n
+0001317715 00000 n
+0001915967 00000 n
+0001317761 00000 n
+0001317790 00000 n
+0001915860 00000 n
+0001317836 00000 n
+0001317865 00000 n
+0001915753 00000 n
+0001317911 00000 n
+0001317936 00000 n
+0001915660 00000 n
+0001317982 00000 n
+0001318010 00000 n
+0001915566 00000 n
+0001318067 00000 n
+0001318105 00000 n
+0001915486 00000 n
+0001318161 00000 n
+0001811579 00000 n
+0001353101 00000 n
+0001318195 00000 n
+0001354326 00000 n
+0001354780 00000 n
+0001356227 00000 n
+0001356278 00000 n
+0001356329 00000 n
+0001356380 00000 n
+0001356431 00000 n
+0001356482 00000 n
+0001356533 00000 n
+0001356584 00000 n
+0001356636 00000 n
+0001356687 00000 n
+0001356738 00000 n
+0001356789 00000 n
+0001356840 00000 n
+0001356891 00000 n
+0001356942 00000 n
+0001356993 00000 n
+0001357044 00000 n
+0001357095 00000 n
+0001357146 00000 n
+0001357197 00000 n
+0001357248 00000 n
+0001357299 00000 n
+0001357350 00000 n
+0001357401 00000 n
+0001357452 00000 n
+0001357503 00000 n
+0001357554 00000 n
+0001357605 00000 n
+0001357656 00000 n
+0001357707 00000 n
+0001357853 00000 n
+0001357999 00000 n
+0001358313 00000 n
+0001358571 00000 n
+0001358903 00000 n
+0001359145 00000 n
+0001359270 00000 n
+0001359558 00000 n
+0001359913 00000 n
+0001359994 00000 n
+0001360075 00000 n
+0001360156 00000 n
+0001370678 00000 n
+0001382149 00000 n
+0001382577 00000 n
+0001384253 00000 n
+0001384302 00000 n
+0001384350 00000 n
+0001384404 00000 n
+0001384464 00000 n
+0001384511 00000 n
+0001384562 00000 n
+0001384614 00000 n
+0001384663 00000 n
+0001384711 00000 n
+0001384765 00000 n
+0001384820 00000 n
+0001384872 00000 n
+0001384929 00000 n
+0001384980 00000 n
+0001385032 00000 n
+0001385153 00000 n
+0001385205 00000 n
+0001385261 00000 n
+0001385317 00000 n
+0001385373 00000 n
+0001385429 00000 n
+0001385575 00000 n
+0001385722 00000 n
+0001386052 00000 n
+0001386439 00000 n
+0001386726 00000 n
+0001387118 00000 n
+0001387437 00000 n
+0001387831 00000 n
+0001388132 00000 n
+0001388485 00000 n
+0001388838 00000 n
+0001389192 00000 n
+0001389543 00000 n
+0001389894 00000 n
+0001390243 00000 n
+0001789563 00000 n
+0001789720 00000 n
+0001790010 00000 n
+0001790387 00000 n
+0001790663 00000 n
+0001791040 00000 n
+0001791229 00000 n
+0001791418 00000 n
+0001791607 00000 n
+0001791796 00000 n
+0001791931 00000 n
+0001792120 00000 n
+0001792255 00000 n
+0001792444 00000 n
+0001792633 00000 n
+0001792822 00000 n
+0001793011 00000 n
+0001793200 00000 n
+0001793389 00000 n
+0001806308 00000 n
+0001811714 00000 n
+0001811748 00000 n
+0001811779 00000 n
+0001812599 00000 n
+0001812824 00000 n
+0001813744 00000 n
+0001813947 00000 n
+0001814058 00000 n
+0001824666 00000 n
+0001824893 00000 n
+0001825947 00000 n
+0001826179 00000 n
+0001826489 00000 n
+0001842841 00000 n
+0001843070 00000 n
+0001844219 00000 n
+0001844454 00000 n
+0001844666 00000 n
+0001850367 00000 n
+0001850591 00000 n
+0001851924 00000 n
+0001852128 00000 n
+0001852474 00000 n
+0001862833 00000 n
+0001863058 00000 n
+0001864265 00000 n
+0001864468 00000 n
+0001865027 00000 n
+0001889997 00000 n
+0001890219 00000 n
+0001891388 00000 n
+0001891616 00000 n
+0001892040 00000 n
+0001904938 00000 n
+0001905162 00000 n
+0001906457 00000 n
+0001906661 00000 n
+0001914251 00000 n
+0001915307 00000 n
+0001915407 00000 n
+0001929656 00000 n
+0001930305 00000 n
+0001930972 00000 n
+0001931639 00000 n
+0001932615 00000 n
+0001932899 00000 n
+0001933019 00000 n
+0001933059 00000 n
+0001933172 00000 n
+trailer
+<< /Size 1151
+/Root 1149 0 R
+/Info 1150 0 R
+/ID [<4895C6E9072A0E8B4A146E333BE155C5> <4895C6E9072A0E8B4A146E333BE155C5>] >>
+startxref
+1933509
+%%EOF
diff --git a/macros/generic/lecturer/doc/lecturer-doc.tex b/macros/generic/lecturer/doc/lecturer-doc.tex
new file mode 100644
index 0000000000..7165c27f3a
--- /dev/null
+++ b/macros/generic/lecturer/doc/lecturer-doc.tex
@@ -0,0 +1,2372 @@
+% This is the documentation for the Lecturer package.
+% Author: Paul Isambert
+% Date: July 2010.
+%
+\input pitex
+
+\newif\ifextraline
+\output{%
+ \ifnum\outputpenalty=10000
+ \outputpenalty=0
+ \fi
+ \ifextraline
+ \global\vsize=\dimexpr\vsize-\baselineskip\relax
+ \ifnum\outputpenalty=\widowpenalty
+ \global\extralinefalse
+ \unvbox255
+ \else
+ \Shipout
+ \fi
+ \else
+ \ifnum\outputpenalty<\widowpenalty
+ \Shipout
+ \else
+ \ifnum\outputpenalty=10000
+ \Shipout
+ \else
+ \global\extralinetrue
+ \global\vsize=\dimexpr\vsize+\baselineskip\relax
+ \unvbox255 \penalty0
+ \fi
+ \fi
+ \fi
+ }
+\def\Shipout{%
+ \removependingtitles
+ \processmarginalia
+ \shipout\vbox{%
+ \box255
+ \ifpagenum
+ \kern\numexpr3\ifextraline-1\fi\baselineskip
+ \hbox to \hsize{\sectionfont\hfil\the\pageno}%
+ \fi
+ }%
+ \global\extralinefalse
+ \global\pagenumtrue
+ \advancepageno
+ }
+\newif\ifpagenum
+
+
+
+\setparameter document:
+ author = "Paul Isambert"
+ title = "\ltr's documentation"
+ pdftitle = "Lecturer's documentation"
+ version = 1.0
+ date = "07/23/2010"
+ display = outlines
+
+
+\setparameter page:
+% pagewidth = 20cm
+ pageheight = 26cm
+ left = 4cm
+ top = 3cm
+ lines = 44
+ hsize = 13cm
+
+\setparameter font:
+ command = \mainfont
+ name = ChaparralPro-
+ size = 10pt
+ roman = Regular
+ bold = Bold
+ italic = Italic
+
+\setparameter font:
+ command = \notefont
+ name = ChaparralPro-
+ size = 8pt
+ roman = Regular
+ bold = Bold
+ italic = Italic
+
+\setparameter font:
+ command = \sectionfont
+ name = ChaparralPro-
+ size = 12pt
+ roman = Regular
+ bold = Bold
+ italic = Italic
+
+\setparameter font:
+ command = \titlefont
+ name = ChaparralPro-
+ size = 60pt
+ roman = Regular
+
+\setparameter font:
+ command = \codefont
+ name = LTYPE
+ size = 8pt
+ type = ttf
+ roman = {}
+ bold = B
+ italic = O
+
+
+\setparameter section:
+ font = "\sectionfont\sc"
+ beforeskip = 4
+ afterskip = 1
+ minimum = 4
+
+\setparameter subsection:
+ beforeskip = 2
+ minimum = 2
+ font = "\sectionfont\it"
+ bookmarkstyle = "/F 1"
+
+\setparameter section subsection:
+ number = none
+ color = ".8 0 0"
+
+
+\def\yax{%
+ Y\kern-.1em \raise.15em\hbox{\sc a}\kern-.1em \lower.15em\hbox{X}%
+ \antigobblespace
+ }
+\def\ltr{\emph{Lecturer}\antigobblespace}
+\newfornoempty\attrloop{1}#2 {%
+ \reverse\iffemptystring{#1}{#1\rm\char"007C\it}%
+ \passarguments{#2}}[#1]
+
+\newcount\paramcount
+\def\jump{%
+ \vskip-\lastskip
+ \penalty0
+ \ifdim\dimexpr\pagegoal-\pagetotal<\dimexpr 3\baselineskip-\prevdepth\relax
+ \clearpage
+ \else
+ \vskip\baselineskip
+ \fi}
+\def\bookmark#1{%
+ \advance\paramcount1
+ \pdfdest name {param_\the\paramcount} xyz
+ \createbookmark[{/C [.4 .4 .4]}]{4}{#1}{param_\the\paramcount}%
+ }
+
+\setcatcodes{_=12}
+\def\attr#1#2#3{%
+ \jump
+ \bookmark{#1}%
+ \noindent\llap{\attrib{#1} }%
+ \val{\it$<$\attrloop{}{#2 }$>$}\kern1em
+ \reverse\iffemptystring{#3}{{\hskip0pt plus 15em\penalty0\hskip0pt(\it Default:~\tcode{#3})}}
+ \par\noindent\ignorespaces
+ }
+\def\attrib#1{\color{.4 .4 .4}{{\codefont#1}}}
+\def\val#1{\color{.8 0 0}{{\codefont#1}}}
+\def\param#1{{\codefont\bf#1}}
+\def\rcom#1{\attrib{{\com#1}}\antigobblespace}
+\def\defcom{\jump\Defcom}
+\def\Defcom#1#2/{%
+ \noindent\llap{\rcom#1\kern.4em}#2\reverse\iffemptystring{#2}{\par\noindent}\ignorespaces}
+\def\draw#1 #2/{\jump\noindent\llap{\attrib{#1} }\val{#2}\par\noindent\ignorespaces}
+\def\Point#1#2{\tcode{(#1,#2)}}
+\def\point{\Point xy}
+
+\newdimen\seeindent
+\setbox0\hbox{\it See }
+\seeindent=\wd0
+\def\sectionaction#1{%
+ \note{%
+ \hangindent1\seeindent \hangafter1
+ See \color{\usevalueor section:color {0 0 0}}{#1}}%
+ }
+\newif\ifrightdemo
+\def\demo#1 #2 {%
+ \ifrightdemo \rightdemofalse \else \rightdemotrue \fi
+ \def\demofile{\tcode{LecturerDemo-#1.pdf}\antigobblespace}%
+ \pdfximage height \dimexpr(10\baselineskip-4pt) page #2 {LecturerDemo-#1.pdf}%
+ \setbox0=\hbox{\pdfrefximage\pdflastximage}%
+ \def\par{%
+ \endgraf
+ \ifdim\prevgraf\baselineskip<10\baselineskip
+ \kern\dimexpr(10\baselineskip-\prevgraf\baselineskip)
+ \fi
+ \let\par\endgraf}%
+ \vskip\baselineskip
+ \penalty0
+ \ifdim\dimexpr(\pagegoal-\pagetotal)<\ht0
+ \clearpage
+ \fi
+ \vbox to 8pt{%
+ \ifrightdemo
+ \hbox to\hsize{\hfill \pdfrefximage\pdflastximage}
+ \else
+ \hbox{\pdfrefximage\pdflastximage}
+ \fi
+ \vss}%
+ \kern-\baselineskip
+ \nointerlineskip
+ \parshape 11
+ \ifrightdemo
+ \repeatuntil{10}{0pt \dimexpr(\hsize-\wd0-\dimexpr(\baselineskip-1ex))}
+ \else
+ \repeatuntil{10}{\dimexpr(\wd0+1em) \dimexpr(\hsize-\wd0-1em)}
+ \fi
+ 0pt \hsize
+ \noindent\vrule height 12pt depth 0pt width 0pt\ignorespaces
+ }
+
+
+
+
+
+
+
+
+
+
+
+%\input grid
+
+
+
+
+\vbox to 4\baselineskip{%
+ \vfil
+ \hbox to \hsize{\titlefont \pdfcolorstack0 push {.8 0 0 rg}\pdfliteral {2 Tr}%
+ L\hss e\hss c\hss t\hss u\hss r\hss e\hss r%
+ \pdfliteral {0 Tr}\pdfcolorstack0 pop%
+ }}
+
+\vskip\baselineskip
+\hfill Author: \usevalue document:author \par
+\hfill \tcode{zappathustra@free.fr} \par
+\hfill Date: \usevalue document:date \par
+\hfill Version: \usevalue document:version \par
+
+
+\vfil
+
+
+\noindent\ltr creates presentations mainly based on PDF features.
+It doesn't manipulate \TeX's typesetting process in a complex way
+to give the impression that slides are being layered,
+but use PDF's so-called optional content to produce exactly this:
+layers. It was originally meant to work with plain \TeX, but since
+writing for plain is one step away from writing for
+any format, it is format-independent, though
+the heavy hand it lays on the output routine might make
+it conflict with other code. In plain \TeX, things are innocuous;
+in La\TeX, though not thoroughly tested, \ltr works good,
+provided it is not in conflict with other packages; since it
+is pretty self-contained for what it's designed, things should
+work nicely. Finally, \ltr seems to be usable with Con\TeX t MkII,
+but not MkIV (except perhaps to make a handout). I welcome comments
+on use of \ltr in those formats, so I can improve it.
+
+As for engines, \ltr currently works with pdf\TeX\ and
+Lua\TeX\ only, because the code is dependent on pdf\TeX's
+primitives. My apologies to Xe\TeX\ users. I welcome drivers.
+
+The main drawback in using \ltr is it requires
+a `conforming reader,' as they say at Adobe, to work
+properly, that is a reader that understands advanced PDF code
+and a little bit of JavaScript. Which basically means Adobe's reader, available
+mostly everywhere, and free, but `as in free beer,' to make
+a quote.
+
+The main advantage is that typesetting (\TeX) and presentation
+flow (PDF) are neatly divided: each slide is a page \ital{typeset} by
+\TeX\ and \ital{manipulated on the screen} by PDF code. Beside the
+intellectual satisfaction, there are more direct benefits: for
+instance, the handout is already in the slide, even if it's not
+directly prepared as such. Better still, there's no need to prepare
+the manuscript in any way to adapt to the requirements of a
+presentation. A list or a table, for instance,
+can be displayed stepwise without changing the usual way you type
+them in: interspersed \rcom\step commands will do.
+\note{%
+ If you don't feel like reading 30 pages of documentation,
+ switch to the demonstrations distributed with \ltr. For
+ an overview, go to the the
+ \let\sectionaction\unbrace
+ \tosection{demonstrations}{\color{\usevalueor section:color {0 0 0}}{Demonstrations}}
+ section.}%
+%
+
+And the best feature in \ltr, as far as I'm concerned, is that
+you can put anything anywhere with a few commands.
+
+\stoppage
+
+
+
+\section{Basic things}
+
+\subsection{Loading}
+
+\noindent\ltr should be loaded as is customary in the format at work,
+i.e. in plain TeX:
+
+\example
+\input lecturer
+\example/
+
+\noindent in La\TeX:
+
+\example
+\usepackage{lecturer}
+\example/
+
+\noindent and in Con\TeX t:
+
+\example
+\usemodule[lecturer]
+\example/
+
+
+
+
+
+\subsection{First things first}
+
+\noindent In \ltr, the content of a document is organized in
+slides, with steps to make things appear progressively on the screen
+when you're in fullscreen mode.
+A (default) slide is anything that appears between the following two commands:
+
+\defcom\slide\oarg{attributes}/
+\Defcom\endslide/
+In La\TeX\ you can use \verb"\begin{slide}" and \verb"\end{slide}", and
+in Con\TeX t \com\startslide and \com\stopslide. The
+\com\slide/\com\endslide pair can be used in all formats, though,
+which is why I'll use \com\slide and \com\endslide for the examples
+in this documentation.
+
+\defcom\step\oarg{attributes}/
+To make the content of a slide appear progressively on the screen,
+%
+\note{%
+ To advance in the presentation, use either a left click
+ or a right arrow key; to move backward, use a right click or a left
+ arrow; and you can also use \emph{\string\nextstep} and
+ \emph{\string\prevstep} with buttons.}%
+%
+this command is used where necessary. By default, it
+does nothing else, i.e. it doesn't disturb typesetting and simply
+creates the flow of the presentation with PDF code. Here's an example:
+
+\example
+\slide
+Something visible.
+\step My first proposition.
+
+\step And then... \step this.
+\endslide
+\example/
+
+\noindent which on the screen produces a paragraph
+with `\ital{Something visible. My first proposition.}' and
+another one with `\ital{And then... this.}' as is usual with
+\TeX. Except these paragraphs don't appear at once.
+
+A \com\step means you'll have to click
+to move on, and what follows it will appear on screen, whereas
+it is otherwise invisible (by default at least). In the example,
+`\ital{Something visible}' is already on the screen, since it is
+not in the scope of a \com\step command, but the rest appears
+piecewise, and it takes three clicks to reach the end of the slide.
+Conversely, when moving backward, either with a right click or
+a left arrow key, steps disappear.
+
+
+The \com\step command affects the content of what follows only,
+up to the next \com\step or to the slide's end. Something between
+the beginning of the slide and the first step is always visible.
+
+Everything between \com\slide and \com\endslide is only one page.
+Steps appear gradually because they are instructed to do so, but
+they are on the same page, as physically as is possible for a
+collection of bytes (which can be printed, though).
+
+\defcom\slideno\relax/
+\Defcom\slidenumber/
+The first of those is a count register holding the slide's number
+(i.e. \verb"\count0"). The second is a macro that returns its value.
+
+Now you know the best part of how things work. The rest, i.e. the
+optional \arg{attributes} and a bunch of other things, is only
+decoration, although it might be of interest too to enliven your
+slides.
+
+
+
+
+
+\subsection{Presentation and handout}[handout]
+
+\noindent\ltr allows you to easily produce a presentation for screen
+and a handout out of the same file. The output depends on
+the value of the \attrib{mode} attribute in the \param{job} \tosection{job}{Attributes for the job}
+parameter. If it is set to \val{presentation}, then steps
+behave as defined above. If it is set to \val{handout},
+then only those steps that have the value \val{true} for
+the \attrib{handout} parameter appear on the page. Other
+steps are still present, but hidden; they can be turned on
+in the reader's layers panel, though. By default, all steps are
+visible in a handout. The following three commands take
+a more radical way.
+
+\defcom\presentationonly\arg{material}/
+In presentation mode, \arg{material} is simply typeset.
+In handout mode, however, it is gobbled. Thus, it takes no
+space on the page, and can't be retrieved.
+
+\defcom\handoutonly\arg{material}/
+The same thing the other way around.
+
+\defcom\presentationorhandout\arg{presentation}\arg{handout}/
+In \val{presentation} mode, the first argument is executed, and
+the second one in \val{handout} mode.
+
+Note the difference between
+
+\example
+\step A\step[handout=false] B\step C
+\example/
+
+\noindent and
+
+\example
+\step A\presentationonly{\step B}\step C
+\example/
+
+\setbox0=\hbox{B}
+\noindent In presentation mode, both will produce `ABC'.
+In handout mode, though, the first example will produce `A\kern\wd0C',
+%
+\note{%
+ In Adobe Reader, the \emph{layers panel} is in the
+ navigation panel on the left, represented by two squares overlapping,
+ usually below thumbnails and bookmarks.}%
+%
+with `B' still retrievable from the layers panel,
+and the second example will produce `AC', with no `B' anywhere.
+
+Both \com\presentationonly and \com\handoutonly ignore any space
+following their argument when they gobble it.
+
+
+
+
+
+
+\section{Settings things globally and locally}
+
+\noindent Slides and steps can have attributes that modify
+their behavior. These attributes can be set locally or globally,
+meaning they either affect the current slide/step or
+all slides/steps or all slides/steps belonging to
+a certain type defined with \com\setslide/\com\setstep.
+
+The way attributes are used is a matter of inheritance.
+At the top of the hierarchy, there are the \param{slide} and
+\param{step} parameters. Attributes to those parameters
+aplly to all slides and steps, unless they are given other
+values lower in the hierarchy. At the bottom of the hierarchy,
+each individual slide or step can be followed by attribute settings
+between brackets. The values given there override all inherited
+values, but they hold for the current slide or step only. In
+between, new types of slides and steps can be defined; they
+inherit attributes from the corresponding parameters, and transmit
+their own attributes to slides and steps of their kind.
+
+
+
+\subsection{Global settings}
+
+\defcom\setparameter \arg{parameter}:/
+\noindent This is used to set the values to attributes for
+\arg{parameter}.
+%
+\note{%
+ There are only three parameters in \ltr: \emph{job}, \emph{slide},
+ and \emph{step}. They're sufficient to build a presentation,
+ and don't need to be created beforehand. Nonetheless, \yax's parameter
+ syntax is used everywhere.}%
+%
+The syntax for the attributes, which is used in many other places
+in \ltr, is as follows:
+
+\example
+\setparameter parameter:
+ attribute1 = valueA
+ attribute2 attribute3 = valueB
+ ...
+\par
+\example/
+
+\noindent You might find this syntax somewhat bizarre, but it
+is handy. It is the \yax syntax, and if you want to know more
+about it, see the \yax documentation.
+Here's how it works: after \com\setparameter you type either
+\param{slide} or \param{step} (or \param{job}, as we'll see
+later). Then a colon, which might be preceded by a space.
+Then you type the name of an attribute, or the names of several
+attributes separated by a space, and then a `=' sign. Finally
+you give your value, which is ended by the following space.
+If a value must contain a space, or if it's empty, you must give it
+between braces or double quotes, as in:
+
+\example
+\setparameter step:
+ attribute1 = "my value"
+ attribute2 = {}
+ ...
+\example/
+
+\noindent Or, if a value begins or ends with a control sequence,
+%
+\note{%
+ If you have any doubt, you can always rely on braces and quotes.}
+%
+it should be enclosed between braces or double quotes again,
+unless it is made of a single control sequence. Thus:
+
+\example
+\setparameter step:
+ attribute3 = "\command{argument}"
+ attribute4 = \controlsequence
+ ...
+\example/
+
+\noindent Finally, and most importantly, a \com\setparameter
+declaration is ended by \com\par which, and that's the cool
+thing, can be a blank line, since \TeX\ inserts a \com\par at
+each blank line.
+
+The \com\setparameter declaration can be used as often as you
+wish; there's no need to respecify each attribute on each declaration:
+they retain their last declared value, which \ltr uses when it needs it.
+
+
+
+\subsection{Local settings}
+
+\noindent Attributes are set locally when they are given
+between brackets after the \com\slide or \com\step commands.
+They will be used for this particular \com\slide or \com\step.
+%
+\note{%
+ Quotes and braces are removed anyway. So you can
+ use them too, although they're completely useless:
+ the delimitator is the comma.}%
+%
+The syntax is the custom \verb"key=value" fashion: first the
+attribute, then the value, then a comma. Here you can forget
+what's just been said about values: no need for quotes or
+braces.
+On the other hand, you can't set several attributes
+at once, each one must take its own value.
+
+Thus the following step
+
+\example
+\step[ myatt = myval ] And now something terrific...
+\example/
+
+\noindent will have the value \verb"myval" for the attribute
+\verb"myatt" (note how unwanted space is ignored), instead of
+the value given in the \com\setparameter
+declaration... or in its type, which we turn to right now (and
+then I promise we'll see what those attributes are).
+Any space after the right bracket is ignored, so that you don't
+have to put \verb"%" signs here and there.
+
+
+
+
+\subsection{Type settings}
+
+\noindent You can create new types of slides or steps and set
+their parameters with the \com\setslide and \com\setstep commands respectively.
+Note that there is no difference between creating and setting the attributes
+of a new slide/step, and simply setting the attributes to an already
+created slide/step : the same commands are used in both cases.
+
+
+\defcom\setslide\arg{list of slides}/
+The \com\setslide command sets parameters for all slides in the space-separated
+\arg{list of slides} (and creates them if they don't exist yet), as in:
+
+\example
+\setslide{myslide myotherslide}
+ attribute1 = valueA
+ attribute2 = valueB
+ ...
+\par
+\example/
+
+\noindent To use the slide \verb"myslide", in plain \TeX\ you call
+\com\myslide and \com\endmyslide, in La\TeX\ you do \verb"\begin{myslide}"
+and \verb"\end{myslide}", and in Con\TeX t you use \com\startmyslide
+and \com\stopmyslide. Actually \com\myslide and \com\endmyslide work
+in all three formats, but they're not customary.
+
+Slides thus created inherit values from the \param{slide} parameter,
+except when new values are specified. In our example, \com\myslide and
+\com\myotherslide will have \verb"valueA" and \verb"valueB" for \verb"attribute1"
+and \verb"attribute2" respectively, instead of the values defined
+for those attributes in the \com\setparameter declaration. Both
+commands can still be followed by local settings between
+brackets, and they'll override the ones given here. So in
+
+\example
+\myslide[attribute2=myval]
+...
+\endmyslide
+\example/
+
+\noindent \com\myslide will have the values \verb"myval" for
+\verb"attribute2", \verb"valueA" for \verb"attribute1", and
+the values defined in the \com\setparameter declaration for
+all the other attributes.
+
+\defcom\setstep\arg{list of steps}/
+This takes a list of commands, i.e. control sequences,
+as its first argument, and then attributes and values as in \com\setparameter.
+The commands are just concatenated, with nothing to separate them.
+Thus
+
+\example
+\setstep{\mystep \myotherstep}
+ attribute1 = valueA
+ attribute2 = valueB
+ ...
+\par
+\example/
+
+\noindent creates or modifies \com\mystep and \com\myotherstep,
+which in a slide will create a
+step with \verb"valueA" and \verb"valueB" for \verb"attribute1"
+and \verb"attribute2" respectively, overriding the value of
+the \param{step} parameter. The commands can still take values
+between brackets to set attributes locally.
+
+
+
+
+
+
+
+
+
+\section{Attributes for slides}
+
+\noindent The attributes that follow are to be used in the \com\setparameter
+declaration for the \param{slide} parameter, in the \com\setslide declaration,
+and as optional arguments to the \com\slide command and equivalent commands
+created with \com\setslide, for which I'll use \com\slide generically.
+
+
+
+\subsection{PDF and navigation}[pdfslides]
+
+\noindent First of all, if a \com\slide command takes anything
+between brackets, and if among it there is something that doesn't
+contain a `=' sign, i.e. something that is obviously no attribute
+setting, then this thing, let's call it a string, becomes the
+slide's title, and it is recorded in a macro called \com\slidetitle,
+which you can use in the slide itself. It is also used in bookmarks
+(if the slide is to be bookmarked), which leads us to our first
+attribute.
+
+
+\attr{pdftitle}{string}{slide's title}
+Suppose you want a slide with title \verb"Something about \TeX". Then
+if that string is used in a bookmark, the bookmark won't look
+very good, because of the \TeX\ operations contained in the \com\TeX
+command, which bookmarks don't understand, since bookmarks are
+pretty limited. This attribute sets the title of the slide for
+use in bookmarks (and in the layers panel too).
+%
+\note{%
+ Layers, i.e. steps, are grouped in the layers panel under the
+ heading of the slide where they belong.}%
+%
+It doesn't make
+much sense except as a local attribute, unless you define it
+with a command whose definition changes from slide to slide,
+involving for instance a counter.
+
+I a slide has no title, pdf or not, `Page \ital{n}' is used in
+bookmarks and layers, but the \com\slidetitle command remains empty
+(not undefined).
+
+\attr{bookmark}{true false}{true}
+If this is set to \val{true}, a bookmark is created with the
+slide's title.
+
+\attr{bookmarklevel}{number}{1}
+The level of the slide's bookmark. The higher the \val{number}, the \tosection{bookmarks}{Creating bookmarks}
+lower the slide in the hierarchy. The \val{number} needs not be
+an integer.
+
+\attr{bookmarkstyle}{{bookmark options}}{none}
+The style of the bookmark, i.e. the optional argument in the
+\rcom\createbookmark command.
+
+\attr{anchor}{name}{none}
+An anchor to navigate to the slide with a \rcom\goto command.
+%
+\note{%
+ You can actually specify the \emph{anchor} for several
+ slides at once, provided the value is a command that holds
+ a variable changing with slides.}%
+This the optional \arg{anchor} in \rcom\createbookmark.
+Since two anchors can't have the same name, this attribute can be used
+with \com\slide only, not in the \com\setparameter and \com\setslide
+declarations.
+
+
+
+%
+%\needspace{7\baselineskip}
+\subsection{Dimensions}[dimensions]
+
+\attr{width}{dimension}{15cm}
+The width of the slide.
+
+\attr{height}{dimension}{12cm}
+The height of the slide.
+
+\attr{hsize}{dimension}{slide's \attrib{width} minus twice its \attrib{left}}
+The width of lines.
+
+\attr{left}{dimension}{2cm}
+The left margin, i.e. the distance between the slide's left
+border and the textblock.
+
+\attr{right}{dimension}{unspecified}
+The right margin, i.e. the distance between the textblock and
+the slide's left border. If present, this parameter is always obeyed,
+in the following way: if neither \attrib{left} nor \attrib{hsize}
+is specified, \attrib{left} is set to the value of \attrib{right}
+and \attrib{hsize} is computed accordingly;
+%
+\note{%
+ Thus, to center the textblock on the slide, specify the \emph{right}
+ attribute only. The same holds for \emph{bottom} to center
+ vertically, and for areas it is also true of \emph{right},
+ \emph{bottom}, \emph{hshift*} and \emph{vshift*}.}%
+%
+if one is specified
+but not the other, the unspecified one is computed according
+to the specified one and \attrib{right}; and if both are present,
+\attrib{hsize} is ignored and the previous rule applies.
+
+What is inherited from global to type to local settings is the
+result of this calculation, i.e. values for \attrib{left} and
+\attrib{hsize}. If these are changed \attrib{right} won't be
+taken into account. Conversely, if \attrib{right} is specified,
+then \attrib{left} and \attrib{hsize} aren't inherited. If things
+were otherwise, \attrib{left} would always be specified (since
+inherited) and it'd be impossible to compute it according
+to \attrib{right} and \attrib{hsize}, since it always wins
+against the latter. Thus, assuming a slide width of 10cm,
+with the following:
+
+\example
+\setparameter slide:
+ left = 2cm
+ right = 1cm
+
+\setslide{slideA}
+ left = 1cm
+
+\setslide{slideB}
+ right = 2cm
+ hsize = 5cm
+\example/
+
+\noindent we have a default slide with a left margin 2cm wide,
+right margin 1cm, and a line length of 7cm. For \verb"slideA"
+nothing is recomputed, thus the left margin is 1cm but the line
+length is still 7cm, which gives a right margin of 2cm. And
+\verb"slideB" has a \attrib{right} attribute, which triggers
+a computation; \attrib{left} isn't inherited, thus only \attrib{hsize}
+is specified and \attrib{left} is computed accordingly (to 3cm,
+as you might imagine).
+
+\attr{vsize}{dimension}{slide's \attrib{height} minus twice its \attrib{top}}
+The height of the textblock. This isn't important for page breaks,
+since no page break occurs in \ltr, but for the \attrib{vpos}
+attribute, and the scaling of the page if any.
+
+\attr{top}{dimension}{1cm}
+The upper margin, i.e. the distance between the slide's top
+border and the textblock.
+
+\attr{bottom}{dimension}{unspecified}
+The bottom margin, i.e. the distance between the textblock
+and the slide's bottom border. Works exactly as \attrib{right}
+in the vertical dimension, i.e. it is al ways obeyed, but
+not inherited, etc.
+
+Note that in full screen mode, readers set the page so that
+its smallest dimension goes from one side of the screen to
+the other. Thus, with
+
+\example
+\setparameter slide:
+ height = 12cm
+\par
+\setlide{myslide}
+ height = 14cm
+\par
+\example/
+
+\noindent \com\slide and \com\myslide will actually look like
+they have the same height but not the same width. And the type
+will appear smaller in \com\myslide. By the way, the
+dimensions 12cm and 15cm are default simply because they
+make \TeX's default 10pt Computer Modern look readable.
+
+\attr{baselineskip}{{dimension or glue}}{12pt}
+The baseline distance for the slide. Glue means something
+like \verb"2pt plus 1fill", which can be useful (see
+the \attrib{vpos} attribue below).
+
+\attr{topskip}{{dimension or glue}}{12pt}
+The distance between the first line's baseline and the top
+of the textblock.
+
+\attr{parskip}{{dimension or glue}}{0pt}
+The distance between paragraphs.
+
+\attr{parindent}{dimension}{0pt}
+The width of the paragraph's indentation for this slide.
+
+You might want the previous dimensions to be connected in
+%
+\note{%
+ The slide's font, if any (see the \emph{<font>} attribute below),
+ is called before these dimensions are set, so the \emph{em}
+ and \emph{ex} dimensions works properly.}%
+some way. For instance, by default, \attrib{hsize} is connected
+to the slide's \attrib{width} and \attrib{left}. This is because
+the latter two attributes set the \TeX\ dimensions that the \attrib{hsize}
+attribute refers to. So the order in which those dimensions are set is important.
+Here are the dimensions and the attributes that set them, in the
+order of the assignement:
+
+\def\setdim#1#2{\par\noindent\com#1 = \attrib{#2}}
+\vskip\baselineskip
+\setdim\baselineskip{baselineskip}
+\setdim\topskip{topskip}
+\setdim\parskip{parskip}
+\setdim\pdfpagewidth{width}
+\setdim\pdfpageheight{height}
+\setdim\pdfhorigin{left}
+\setdim\pdfvorigin{top}
+\setdim\hsize{hsize}
+\setdim\parindent{parindent}
+\par\noindent\attrib{vsize}
+\vskip\baselineskip
+
+\noindent Thus, the default value for the \attrib{hsize}
+attribute is \attrib{width} minus twice \attrib{left} for each slide,
+because it is set as:
+
+\example
+ hsize = "\pdfpagewidth-2\pdfhorigin"
+\example/
+
+\noindent Which leads to an important point: in \ltr, a \arg{dimension}
+can be an expression, since it is then embedded in a \com\dimexpr primitive.
+
+
+\attr{hpos}{ff fr rf rr}{fr}
+This controls the slide's horizontal justification. The values mean:
+\val{ff} is flushleft/flushright (i.e. text justified on both
+sides), \val{fr} is flushleft/raggedright (commonly called raggedright),
+\val{rf} is raggedleft/flushright (called raggedleft),
+and \val{rr} is raggedleft/raggedright (i.e. text centered).
+Here second-order infinite glue is used.
+
+\attr{vpos}{top center bottom}{center}
+This sets how the lines are set in the textblock. Slides
+typically doesn't have the same number of lines, so we can't
+simply treat them as usual pages in typesetting. This is
+how the text of a slide is vertically positionned in the
+area defined by \attrib{vsize}. The \val{top} value
+means the text is flushed at the top, the \val{bottom}
+value is the same thing at the bottom, and \val{center}
+means the text will be centered in the area. This positioning
+is done with first-order infinite stretch, so you can use
+some too, or higher-order stretch, in the slide's content,
+to achieve some effects.
+
+\attr{scale}{true false}{false}
+If the main content of a slide is higher than \attrib{vsize}, it is
+scaled to the desired dimension if this attribute is set to \val{true}.
+The bad news is it is also scaled horizontally, to keep proportions.
+
+
+
+
+
+
+\subsection{Content}
+
+\attr{everyslide}{code}{nothing}
+Material inserted at the beginning of each slide (in vertical mode).
+For instance after \tosection{areas}{Adding material to areas}
+
+\example
+\setslide{myslide}
+ everyslide = "\position{title}{\slidetitle}"
+\example/
+
+\noindent the title's slide will be inserted in the \verb"title"
+area for each slide called with the \com\myslide command.
+
+\attr{areas}{{list of areas}}{all}
+This denotes the areas that may appear
+on a given slide. The keyword \val{all}, which is default, means that
+all areas will be painted (provided they are visible or contain material).
+Otherwise, \val{list of areas} enumerates allowed areas, separating them
+with space. If an area isn't painted on a slide but nonetheless contains
+material, this material is lost (and not even processed in the first place).
+
+\attr{areas*}{{list of areas}}{none}
+The list of excluded areas, i.e. the reverse of the previous attribute.
+Areas belonging to that list aren't painted on the slide. If an area appears
+in both \attrib{areas} and \attrib{areas*}, it is painted unless
+is is simply implicitely present in \attrib{areas} with \val{all}.
+
+
+
+\subsection{Style}
+
+\attr{background}{{named color or shade or color expression}}{white}
+The background color of the slide. \tosection{colors}{Colors, shades, and images}
+
+\attr{foreground}{{named color or color expression}}{black}
+The slide's foreground color.
+
+\attr{image}{image}{none}
+An image inserted in the slide's background, above the background color. \tosection{images}{Images}
+The image is inserted at the slide's upper left corner, and has the width
+and height it was declared with. Since this
+parameter is inherited, to cancel it give as \arg{image} any name that is
+not a declared image; \ltr is in the middle of a shipout when it reads
+this attribute, so don't worry, you'll get no error message.
+
+\attr{font}{{font command}}{job's font}
+The font used to typeset the slide.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries. If this attribute is used,
+it should be specified for all slide types, or the
+\param{job} parameter should have a value to its own
+\attrib{font} attribute. Otherwise, if a slide with a font
+information is followed by a slide without such information,
+the latter will use the font of the former.
+
+\pdfdest name {backtrans} xyz
+\attr{transition}{{named transition}}{none}
+This is the way the PDF reader will display, animate, enliven, \tosection{transitions}{Transitions}
+and perhaps discredit your presentation. A transition is
+a little animation conforming readers play when they go
+from one slide to the next. They work in full screen only.
+A \val{named transition} should be recorded beforehand with \rcom\newtransition
+unless you use the default values, in which case you can use at
+once \val{split}, \val{blinds}, \val{box}, \val{wipe},
+\val{dissolve}, \val{glitter}, \val{fly} (no less), \val{push},
+\val{cover}, \val{uncover} and \val{fade}.
+
+
+
+
+
+
+
+
+
+
+
+\section{Attributes for steps}
+
+\noindent The attributes that follow are to be used in the \com\setparameter
+declaration for the \param{step} parameter, in the \com\setstep declaration,
+and as optional arguments to the \com\step command and equivalent commands
+created with \com\setstep, for which I'll use \com\step generically.
+
+\subsection{PDF and navigation}
+
+\noindent As with slides, an entry without a `=' sign
+in the optional argument to the \com\step command becomes
+the step's name (which should be unique on a given slide).
+This name is mainly useful for referencing
+with the \attrib{on} and \attrib{off} attributes and the
+\com\showorhide command, but it is also
+used as the step's name in the layers panel of the reader
+(if it has one). Hence:
+
+\attr{pdftitle}{string}{step's default name}
+Set the name used in the reader's layers panel. Thus you
+can have a nice title here and keep
+an uninformative-but-less-painful-to-type name
+to refer to a step in the attributes that follow.
+(If a step has no name, it is referred to in the layers
+panel with `step \ital{n}' with \ital{n} set back to zero
+at each slide.)
+
+\attr{on}{{list of steps}}{none}
+This sets the steps that make the current step appear.
+%
+\note{%
+ When moving backward, just like the controlling step will
+ toggle its visibitity, steps tied with \emph{on} and \emph{off}
+ will too.}%
+%
+If there is no \attrib{on} attribute, a step appears
+at its position in the source. If there's an \attrib{on} attribute,
+then it appears when the steps referred to in the list
+are reached. If the list of steps contains the keyword \val{here},
+then the step also appear by itself. Steps in the list are
+separated by space.
+
+\attr{off}{{list of steps}}{none}
+This is the same thing as \attrib{on} in reverse: the step
+disappears when the steps in the list are reached. The \val{here} keyword
+can't be used.
+
+Note that a step with an \attrib{on} and/or \attrib{off} list
+%
+\note{%
+ This means there's no transitivity in the \emph{on} and \emph{off}
+ attributes: if step A is tied to step B and step B to step C, this
+ doesn't mean A is tied to C (it can, too, of course).}%
+%
+doesn't follow the steps in those lists, i.e. it doesn't appear/disappear
+when they do, but simply when they are reached in the linear sequence
+of steps in the source (which coincide more often than not).
+
+In the following example, the first step will appear
+by itself. Then the second step appears, along with
+the fourth, and the first one disappears. Finally,
+when the third step appears the first reappears.
+Since the fourth step has no autonomy, after the third
+step a click will lead to the next slide (provided
+it's the end of the slide, of course).
+
+\example
+\step[on=here B,off=A] First.
+\step[A] Second.
+\step[B] Third.
+\step[on=A] Fourth.
+\example/
+
+\attr{handout}{true false}{true}
+Steps whose value is \val{true} for this attribute are visible \tosection{handout}{Presentation and handout}
+on the page when the document is processed as a handout (i.e.
+\val{handout} is the value of the \attrib{presentation} attribute
+for the \param{job} parameter), no
+matter how they appear during a presentation. Thus the document
+can be printed without manipulating layers beforehand.
+
+\attr{visible}{true false}{false}
+When this attribute is \val{true}, then the step is visible on
+the page when it is opened.
+\note{%
+ This kind of step of course doesn't take a click during
+ the presentation. In the example on the left, you need
+ only two clicks to display \emph{Three}.}%
+%
+For instance, in a slide with:
+
+\example
+\step One.
+\step[visible=true] Two.
+\step[handout=true] Three.
+\example/
+
+\noindent the following happens: if we're in normal presentation
+mode, then the second step will be visible on the slide when it is displayed,
+whereas the other two will appear when clicking. On the other hand, in a
+handout, only the third step will be visible. With:
+
+\example
+\setparameter step:
+ visible handout = true
+\example/
+
+\noindent all steps will be visible by default, in both modes.
+
+
+
+
+\subsection{Content}
+
+\attr{left}{dimension}{0pt}
+The distance between the textblock's left border%
+\note{%
+ You can create list items and sub-items by simply
+ creating steps with positive \emph{left} and/or
+ \emph{right}.}%
+%
+(defined by the slide's \attrib{left} attribute and the left)
+and the border of the step's text.
+
+\attr{right}{dimension}{0pt}
+Same as \attrib{left}, on the right.
+
+\attr{vskip}{skip}{0pt}
+The value of the vertical glue inserted each time a \com\step
+occurs in vertical mode.%
+\note{%
+ As with slides, the step's font, if any (see below), is
+ called before those dimensions are used, so the \emph{em}
+ and \emph{ex} dimensions have the proper values.
+ Note that there's already the \emph{parskip} glue between
+ vertical steps.}%
+%
+
+\attr{everyvstep}{code}{nothing}
+Material inserted when a \com\step occurs in vertical mode.
+The insertion takes place after \attrib{vskip} (and doesn't
+switch to horizontal mode by itself).
+
+\attr{hskip}{skip}{0pt}
+The value of the horizontal glue inserted each time a \com\step
+occurs in horizontal mode.
+
+\attr{everyhstep}{code}{nothing}
+Material inserted when a \com\step occurs in horizontal mode,
+after \attrib{hskip}
+
+\attr{group}{true false}{false}
+If this is set to \val{true}, the content of the step (including
+the value of \verb"every(v/h)step") happens inside a group.
+
+
+
+\subsection{Style}
+
+\attr{font}{{font command}}{slide's font}
+The font used to typeset the step.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries. If this attribute is used,
+it should be specified for all step types, or the slide or job
+should have its own \attrib{font} attribute, or the step should
+have \attrib{group} set to \val{true}. Otherwise, font will
+bleed to the rest of the slide.
+
+\attr{color}{{Named color or color expression}}{slide's foreground}
+The color of the step, overriding the slide's foreground color. \tosection{realcolors}{Colors}
+
+\attr{transition}{{named transition}}{none} \tosection{transitions}{Transitions}
+The animation used to display the step, as with \com\slide.
+Note that the \val{push}, \val{cover}
+and \val{uncover} transitions make more sense with slides,
+since they affect the entire slide and not the step only.
+
+
+
+
+
+
+
+
+
+\section{Attributes for the job}[job]
+
+\noindent This section describes attributes pertaining to the entire document.
+They are set with the \com\setparameter command with \param{job}
+as the parameter's name.
+
+\attr{author}{string}{nothing}
+The author's name. It is stored in a command called \com\Author,
+and used in the document's properties, unless \attrib{pdfauthor}
+is defined.
+
+\attr{pdfauthor}{string}{nothing}
+This is used in the document's properties instead of \attrib{author}.
+
+\attr{title}{string}{\string\jobname}
+The document's title. It is stored in a command called \com\Title,
+and used in the document's properties, unless \attrib{pdftitle}
+is defined.
+
+\attr{pdftitle}{string}{nothing}
+This is used in the document's properties instead of \attrib{title}.
+
+\attr{date}{string}{\arg{month}/\arg{day}/\arg{year}}
+The document's date, recorded in the macro \com\Date.
+
+\attr{background}{{named color or color expression}}{reader's default}
+This sets the color of the reader's background (if the reader allows \tosection{realcolors}{Colors}
+such a thing to be done). You can set it to the color of the slide's
+background, so that slides appear to have the screen's dimensions.
+
+\attr{font}{{font command}}{nothing}
+The default font for the job.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries. It is wise to give a value to this
+attribute, so that fonts can be safely used in slides and steps.
+
+\attr{mode}{presentation handout}{presentation}
+Selects how the document should be displayed. In \val{handout}, only \tosection{handout}{Presentation and handout}
+those steps whose value for the \attrib{handout} attribute is \val{true}
+are displayed. The other ones nonetheless take space on the slide and
+can be turned on in the reader's layers panel. The \com\handoutonly,
+\com\presentationonly a,d \com\presentationorhandout commands
+are more radical yet, since they gobble the discarded material, which
+isn't typeset.
+
+\attr{fullscreen}{true false}{false}
+If this is turned to \val{true}, the document is opened in full screen,
+which will probably make the reader send a message for confirmation.
+
+\attr{autofullscreen}{true false}{false}
+If this is turned to \val{true}, the document is displayed in full screen
+before navigating to a destination (when a bookmark is clicked, for instance),
+so that the destination is properly reached.
+
+\attr{normal}{none outlines thumbs layers}{outlines}
+Selects what must be displayed in the reader's navigation panel when not
+in full screen: \val{outlines} is, well, outlines (or bookmarks), \val{thumbs}
+is thumbnails, and \val{layers} shows the layers panel, where the steps
+can be turned on and off; \val{none} folds the navigation panel.
+
+\attr{menutext}{text}{***}
+The text to be displayed at the top of a submenu in the \tosection{bookmarks}{Creating bookmarks}
+navigation pop-up menu, to represent the current bookmark
+
+
+
+
+
+
+
+\section{Areas}
+\noindent Material normally declared is typeset following \TeX's usual rules,
+building paragraphs in the slide's textblock.
+However, in \ltr you can put material anywhere, thanks to areas.
+Areas can also be used simply as decorations, since they're basically
+colored squares.
+
+
+
+\subsection{Using a grid}
+
+\defcom\showgrid[\arg{left},\arg{top}]\arg{increment}\oarg{named color or color expression}\oarg{line width}/
+This displays a grid on top of the slides
+%
+\note{%
+ Grids can also be used as decorations, with a little
+ imagination.}%
+%
+(following the command) to ease the creation of a display.
+Lines are drawn at a distance
+of \arg{increment} from each other. The grid starts from the upper left
+corner by default, but the optional \arg{left} and \arg{top} set horizontal and
+vertical shifts respectively (\arg{top} being a vertical distance \ital{à la \TeX},
+i.e. going downward). If no optional color is given, the grid is painted grey,
+and the default line width is .2pt.
+There can be as many such declarations as wanted, each grid being painted
+on top of the previous one. For instance:
+
+\example
+\showgrid[2cm,2cm]{1mm}
+\showgrid{1cm}[red][.4pt]
+\example/
+
+\noindent displays a grid in millimeters in grey, starting at 2cm from both the
+upper and left border, and a grid in centimers on top of it in red, with
+a line width twice the previous one, starting
+from the upper left corner. Note that there should be no space before
+the last two optional arguments (if it was allowed there'd
+be risks of unwanted space gobbling).
+
+
+\defcom\hidegrids/
+Hides all grids on following slides, as if \com\showgrid had
+never been called.
+
+
+
+
+\subsection{Adding material to areas}[areas]
+
+\defcom\position\arg{area}[\arg{left},\arg{top}]\arg{material}/
+This puts \arg{material} inside \arg{area}.
+%
+\note{%
+ If \emph{<left>} or \emph{<top>} are 0pt, they can be omitted.
+ Not the brackets and comma, though.}%
+%
+However, things
+differ greatly whether the optional argument is present or not. In
+case it isn't, \arg{material} is put below previous
+material in \arg{area}, as if continuing a page. On the other
+hand, if the optional argument is present, then \arg{material}
+is typeset so that its left border is at a distance of \arg{left} from the
+left border of the \arg{area}'s textblock and its baseline at a distance of
+(\arg{top} + \arg{area}'s \attrib{topskip})
+%
+\note{%
+ The calculation includes \emph{<topskip>} so the connection
+ between freely positioned material and normally position material
+ is preserved. When using it, this formula proves far more intuitive
+ than it seems.}
+%
+from its upper border. Thus, if both
+\arg{left} and \arg{top} are 0pt, then \arg{material} is typeset normally.
+Material already in the area has no effect on this process, and \arg{material}
+will have no effect either on incoming material, which is why
+\verb"\position{area}{material}" and \verb"\position{area}[0pt,0pt]{material}"
+aren't the same thing at all.
+
+The \com\position obeys the flow of the presentation, and appears
+only when the \com\step where it belongs appears. In this example:
+
+\example
+\step \position{myarea}{One}
+\step \position{myarea}{Two}
+\step \position{myarea}{Three}
+\example/
+
+\noindent `One', `Two' and `Three' will appear one after the other,
+and one above the other. On the other hand with:
+
+\example
+\step[off=B] \position{myarea}[12pt,12pt]{One}
+\step[B,off=C] \position{myarea}[12pt,12pt]{Two}
+\step[C] \position{myarea}[12pt,12pt]{Three}
+\example/
+
+\noindent `One', `Two' and `Three' will admittedly appear one
+after the other, but also disappear when one appears and
+take the place of the previous one, since they share the same position. All areas are
+emptied at each new slide. Remember that to be painted on a given slide,
+an area must be in the list of areas that is the value of
+the \attrib{areas} attribute for this slide, or shouldn't appear
+in the slide's \attrib{areas*} attribute. By default, slides accept
+all areas.
+
+\defcom\setarea\arg{list of areas}/
+To create an area, or to modify an existing one, this command is
+used with \arg{list of areas} being area names separated by space;
+thus attributes similar for several areas can be declared at once.
+The command then takes attributes and values like \com\setslide
+above. For instance the following code creates or modifies two areas,
+verb"badidea" and \verb"ugly":
+
+\example
+\setarea{badidea ugly}
+ background = red
+ foreground = green
+ ...
+\par
+\example/
+
+
+
+
+
+\subsection{Dimensions}
+
+\attr{width}{dimension}{slide's width}
+The area's width, i.e. the width of the painted zone.
+%
+\note{%
+ As far as dimensions are concerned, areas are very
+ similar to slides.
+ See the \emph{Visual Doc} for an illustration of
+ this claim.}%
+
+\attr{hshift}{dimension}{0pt}
+The distance between the area's left border and the slide's left border.
+
+\attr{hshift*}{dimension}{unspecified}
+The distance between the area's right border and the slide's right border.
+The \attrib{hshift*} attribute is always obeyed if present.
+If neither \attrib{width} nor \attrib{hshift} are specified, then
+\attrib{hshift} is set to \attrib{hshift*} and \attrib{width} is
+computed accordingly, which is convenient to center an area on a slide.
+If one of \attrib{width} or \attrib{hshift} is present but not the other,
+then the latter is computed with the given value and \attrib{hshift*}.
+If both are present, \attrib{width} is ignored and the previous rule applies.
+
+
+\attr{height}{dimension}{slide's height}
+The area's height. This defines the vertical dimension of the painted zone.
+
+\attr{vshift}{dimension}{0pt}
+The distance between the area's top and the slide's top.
+
+\attr{vshift*}{dimension}{unspecified}
+The distance between the area's bottom and the slide's bottom.
+It works like \attrib{hshift*} in the vertical dimension, and
+is consequently always obeyed.
+
+\attr{hsize}{dimension}{area's width}
+The line's length in the area.
+
+\attr{left}{dimension}{0pt}
+The area's left margin, i.e. the distance between its left border
+and the left border of its textblock.
+
+\attr{right}{dimension}{unspecified}
+The area's right margin, i.e. the distance between its right border
+and the right border of its textblock. Like the same attribute for slides, it is always
+obeyed, i.e. if specified \attrib{hsize} and/or \attrib{left} are set accordingly.
+For the rule governing those values are computed, see the discussion
+on the \attrib{right} attribute for slides, or on the \attrib{hshift*} attribute
+for areas just above, which works similarly.
+
+\attr{hpos}{ff fr rf rr}{fr}
+This controls the area's horizontal justification. The values mean:
+\val{ff} is flushleft/flushright (i.e. text justified on both
+sides), \val{fr} is flushleft/raggedright (commonly called raggedright),
+\val{rf} is raggedleft/flushright (called raggedleft),
+and \val{rr} is raggedleft/raggedright (i.e. text centered).
+
+\attr{vsize}{dimension}{area's height}
+The height of the area's textblock, not for page breaks, obviously,
+but for the \attrib{vpos} attribute below.
+
+\attr{top}{dimension}{0pt}
+The area's top margin, i.e. the distance between its upper border and
+the top of its textblock.
+
+\attr{bottom}{dimension}{unspecified}
+The area bottom margin, i.e. the distance between its textblock's bottom
+and its bottom border. It works like \attrib{right} in the vertical
+dimension.
+
+\attr{vpos}{top center bottom}{top}
+The vertical justification of the area's content in the textblock (defined
+as \attrib{vsize}).
+%
+\note{%
+ Freely positioned material is unfolded (including its vertical
+ displacement) at the top of normally positioned material.
+ Hence its vertical justification might seem somewhat unpredictable
+ unless \emph{<vpos>} is set to \emph{top}, though it isn't by \TeX's standard.
+ As a rule of thumb, take the top of the justified textblock as the
+ vertical reference, and consider that freely positioned material
+ is insensitive to vertical justification.}%
+%
+
+\attr{baselineskip}{{dimension or glue}}{current \com\baselineskip}
+The baseline distance for the area.
+
+\attr{topskip}{{dimension or glue}}{current \com\topskip}
+The distance between the baseline of the area's first box and
+the area's top. Unlike \TeX's \com\topskip, this distance is always
+respected, no matter the height of the box.
+
+\attr{parskip}{{dimension or glue}}{0pt}
+The distance between paragraphs in the areas, including between
+two normal \com\position.
+
+\attr{parindent}{dimension}{0pt}
+The width of the paragraph indent for the area.
+
+
+
+
+
+\subsection{Content}
+
+
+\attr{visible}{true false step}{true}
+If this attribute is set to \val{true},
+then the area is visible on the slide even if it contains no material.
+With \val{false}, it is painted only on the slides where it is filled.
+In the latter case, using \val{step} means the area will follow the
+first step where the first \com\position command is issued. Empty material
+freely positioned may be useful to control the area, for instance:
+
+\example
+\step[on=start,off=stop]\position{mayarea}[0pt,0pt]{}
+\example/
+
+\noindent This will make the area appear with \verb"start", probably
+its first real content, and disappear with \verb"stop", which probably
+also controls the disappearance of the last material in the area.
+
+Two remarks: the first \com\position means the first occurrence of
+the command in the source, not necessarily the first to be shown on
+screen; thus, to work properly, the previous example should be put
+at the very beginning of a slide. Second, in this example, it is important
+that the material be freely positioned, i.e. with \verb"[0pt,0pt]",
+so as to make the subsequent \com\position think (?) the area is
+still empty.
+
+
+\attr{everyposition}{code}{nothing}
+Code to be added before \arg{material} each time
+%
+\note{%
+ All material is actually added in vertical mode
+ with the \emph{\string\position} command.}%
+%
+\com\position\barg{area}\barg{material} is called. This material
+is added in vertical mode.
+
+\attr{everyfreeposition}{code}{nothing}
+Same as before, except it is used when \com\position is called
+with the optional argument for free position.
+
+
+
+\subsection{Style}
+
+
+\attr{background}{{named color or shade or color expression}}{none}
+The color of the area's background. If none is given, the area is transparent. \tosection{colors}{Colors, shades, and images}
+
+\attr{foreground}{{named color or color expression}}{black}
+The area's foreground color.
+
+\attr{image}{image}{none}
+An image inserted in the area's background, above the background color.
+The image is inserted at the area's upper left corner, and has the width
+and height it was declared with. Since this
+parameter is inherited, to cancel it give as \arg{image} any name that is
+not a declared image; no error message will ensue.
+
+\attr{font}{{font command}}{nothing}
+The font used to typeset material in the area.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries.
+
+\attr{frame}{{attribute-value pairs}}{none}
+This sets the area's frame, if you want any. The value itself is a setting
+of attributes, each one being accessible in the main declaration as
+\tcode{frame_\arg{attribute}}. I.e.
+
+\example
+ frame = "width = 1pt, color = blue"
+\example/
+
+\noindent and
+
+\example
+ frame_width = 1pt
+ frame_color = blue
+\example/
+
+\noindent are equivalent.
+
+\attr{frame_width}{dimension}{0pt}
+The frame's width. If positive, the frame is painted around the area.
+If negative, it is painted inside the area, with the the \arg{dimension}'s
+absolute value as its width. An area with no frame simply has a \attrib{frame_width}
+of 0pt.
+
+\attr{frame_color}{{named color or shade or color expression}}{area's \attrib{background}}
+The frame's color. \tosection{colors}{Colors, shades, and images}
+
+\attr{frame_corner}{miter round bevel}{miter}
+This is a \val{miter} corner:\kern4pt
+\pdfliteral {q 4 w 0 0 m 0 4 l 8 4 l S Q}\kern9pt,
+this is a \val{round} one:\kern4pt
+\pdfliteral {q 4 w 1 j 0 0 m 0 4 l 8 4 l S Q}\kern9pt,
+and this is a \val{bevel} one:\kern4pt
+\pdfliteral {q 4 w 2 j 0 0 m 0 4 l 8 4 l S Q}\kern9pt.
+
+\attr{frame_dash}{numbers}{none}
+The frame's dash pattern, meaning the frame is on (visible)
+for \ital{n1} points, then off (invisible) for \ital{n2} points,
+then on for \ital{n3} points, etc., where the \ital{n}'s are
+the \val{numbers}. This is cyclic, so that it starts again when
+\val{numbers} are exhausted. For instance a value of \verb"3 5 2"
+makes the frame visible for 3pt, then invisible for 5pt, then
+visible for 2pt, then invisible for 3pt, then...
+
+
+
+
+
+\section{Navigation}
+
+\noindent \ltr is made for fullscreen mode and navigation is no exception.
+Thus, bookmarks (and anchors in the next subsection) work properly in
+this mode only; when not in fullscreen, using a link leads
+to the page where the target appears, but not to the step in which it
+is embedded. Turning \attrib{autofullscreen} to \val{true} in the \param{job}
+parameters makes the reader go into fullscreen when clicking a link
+and thus navigation hits its target.
+
+\subsection{Creating bookmarks}[bookmarks]
+\noindent A presentation can be structured thanks to bookmarks (also
+called outlines), and these are accessible in the reader's outlines panel,
+or in the presentation via a pop-up menu.
+To create a bookmark, one uses the following command.
+
+\defcom\createbookmark\oarg{options}\arg{level}\oarg{anchor}\arg{text}/
+This creates a bookmark with \arg{text} as the text displayed in
+the outline panel and the pop-up menu. Bookmark hierarchy is managed with
+\arg{level}, according to the following principle: bookmarks with
+larger \arg{level} are children to bookmarks with smaller one. Thus,
+\arg{level} must be a number, but it need not be an integer nor a positive number.
+For instance:
+%
+\note{%
+ This means you don't need to redefine all your sections
+ if you want to add intermediate ones; just give the latter any
+ value in the interval where you want them to occur in the hierarchy.}%
+%
+
+\example
+\createbookmark{0}{Part}
+\createbookmark{.5}{Section}
+\slide[Slide]
+...
+\createbookmark{1.5}{Step1}
+...
+\createbookmark{1.5}{Step2}
+...
+\endslide
+\example/
+
+\noindent will create bookmarks with the following hierarchy:
+
+\example
+> Part
+ > Section
+ > Slide
+ > Step1
+ > Step2
+\example/
+
+\noindent because by default slides are bookmarked and have bookmark
+level 1. If sections of widest scope are eventually needed in this
+example, one can create them using bookmarks with a negative \arg{level}.
+
+The \arg{options} are any combination of the following keywords,
+separated by commas: \val{bold}, \val{italic} and \val{bolditalic}, which specify
+how the bookmark is to be typeset in the outlines panel, and \val{open}
+and \val{closed}, which specify whether the bookmark displays its children
+by default or not. Finally, \val{nosubmenutext} applies to the pop-up
+menu displayed with \rcom\showbookmarks, as explained below.
+
+Any other material in \arg{options} is supposed to
+be a triplet of numbers ranging between 0 and 1, to denote the bookmark's
+color in an RGB model. For instance:
+
+\example
+\createbookmark[italic,open,1 0 0]{0}{Bookmark}
+\example/
+
+\noindent creates a red bookmark in italic that displays its children when
+the document is opened in the reader.
+
+The \arg{anchor} is a reference so that one can go to the bookmarked place
+with \rcom\goto, and is equivalent to using \rcom\anchor (next subsection).
+
+Note that \arg{options} and \arg{level} are specified for a slide (if it \tosection{pdfslides}{PDF and navigation for slides}
+is bookmarked) the \attrib{bookmarkstyle} and \attrib{bookmarklevel}
+attributes.
+
+\defcom\showbookmarks\oarg{optional style}\arg{text}/
+This creates an hbox containing \arg{text} (which can be anything,
+like real text, or a symbol, etc.); when clicked, a pop-up
+menu appears, which contains the bookmark hierarchy of the document.
+The optional style is either \val{flash} or \val{push},
+which sets the little animation used when the link is clicked:
+it reverses its colors or seems to be pushed in the background. The keyword
+\val{none} can also be used to denote no animation.
+
+In the pop-up menu, the children of a bookmark are displayed as a sub-menu.
+Hence this bookmark isn't clickable anymore, because its only function
+is to show the submenu. That's why the first item of
+this sub-menu is clickable and refers to that parent bookmark. The text
+used by this item is the value of the \attrib{menutext} attribute in the
+\param{job} parameter, unless the bookmark has the \val{nosubmenutext} option.
+
+
+
+
+
+\subsection{Navigation commands}
+
+\defcom\anchor\arg{name}/
+This creates an anchor called \arg{name}, which is a destination for
+the \rcom\goto command.
+
+In what follows, all commands create a clickable hbox containing \arg{text},
+with animation specified by \arg{optional style}, as in \com\showbookmarks
+above. That's why I will only describe the action performed by the commands.
+
+\defcom\goto\oarg{optional style}\arg{name}\arg{text}/
+Go to the destination anchored by \arg{name} (which can be the
+value of the \attrib{anchor} argument in a bookmark).
+
+\defcom\gotoA\oarg{optional style}\arg{name}\arg{text}/
+This creates the first item of a bidirectional link called \arg{name}.
+Clicking \arg{text} goes where \com\gotoB with \arg{name}
+has been issued.
+
+\defcom\gotoB\oarg{optional style}\arg{name}\arg{text}/
+This creates the second item of a bidirectional link called \arg{name}.
+Clicking \arg{text} goes where \com\gotoA with \arg{name}
+has been issued. There's no need for \com\gotoA to appear before
+\com\gotoB. Using these macros is just simpler than a pair of
+\com\anchor's with a pair of \com\goto's.
+
+\defcom\firstslide\oarg{optional style}\arg{text}/
+Go to the presentation's first slide.
+
+\defcom\lastslide\oarg{optional style}\arg{text}/
+Go to the presentation's last slide.
+
+\defcom\prevslide\oarg{optional style}\arg{text}/
+Go to the presentation's previous slide.
+
+\defcom\nextslide\oarg{optional style}\arg{text}/
+Go to the presentation's next slide.
+
+\defcom\prevstep\oarg{optional style}\arg{text}/
+Go backward once. Equivalent to a right click.
+
+\defcom\nextstep\oarg{optional style}\arg{text}/
+Go forward once. Equivalent to a left click.
+
+\defcom\showorhide\oarg{optional style}\arg{actions}\arg{text}/
+This shows or hides the steps referred to in \arg{actions}, which
+is made of `\tcode{\arg{action}=\arg{step list}}' pairs separated
+by commas, where \arg{action} is \val{on}, \val{off} or \val{toggle},
+and \arg{step list} is a list of step names separated by space.
+The action is to show, hide, or reverse the visibility of a set of
+steps. For instance:
+
+\example
+\showorhide{on=A B,off=C,toggle=D E F}{Button}
+\example/
+
+\noindent will, when clicked, make the steps named \verb"A" and \verb"B" visible,
+hide step \verb"C", and reverse the visibility of \verb"D", \verb"E" and \verb"F".
+
+
+
+
+
+
+\section{Colors, shades, and images}[colors]
+\noindent Some attributes above take values denoted by the phrases
+\ital{named color or shade or color expression}, or \ital{named color or color expression}.
+Those are explained in this section.
+
+\subsection{Colors}[realcolors]
+\noindent A color can either be a \ital{named color} or a \ital{color expression}.
+The latter is the simpler. It is a \arg{color model} followed by as many \arg{numbers} as
+required, ranging from 0 to 1. A color model is one of the keywords
+\val{grey} (or \val{gray}), which takes one \arg{number} (0 is black, 1 is
+white), \val{rgb}, which takes three \arg{numbers} (red, green and blue), and
+is additive, and \val{cmyk}, which takes four numbers (cyan, magenta, yellow, black),
+and is substractive. Hence:
+
+\example
+\setparameter slide:
+ background = "rgb 1 0 0"
+ foreground = "cmyk 1 0 1 0"
+ ...
+\par
+\example/
+
+\noindent sets the slide's background color to red, and its foreground color to
+green. Which is not recommended.
+
+Color expressions aren't very handy, since you have to type them as many times
+as you need them. Which is why there exists the following command to declare
+a \ital{named color}:
+
+\defcom\newcolor\arg{name}\arg{color model}\oarg{opacity}\arg{values}/
+After this declaration you can use \arg{name} to denote a color,
+%
+\note{%
+ Unlike \emph{\string\newslide} or \emph{\string\newarea},
+ \emph{\string\newcolor} and \emph{\string\newshade} below take
+ only one \emph{<name>} (instead of a list).}%
+%
+which itself is somehow as a color expression, i.e. it has
+a \arg{color model} and as many \arg{values} as required. The optional
+\arg{opacity} is a number between 0 and 1, 0 meaning fully transparent
+and 1 fully opaque. If not present, it is set to 1. The following named colors
+are already defined (with full opacity):
+\val{black}, \val{white}, \val{red}, \val{green}, \val{blue},
+\val{cyan}, \val{magenta}, \val{yellow}. I suppose you can see where they
+come from. So our example above could be more easily rewritten as:
+
+\example
+\setparameter slide:
+ background = red
+ foreground = green
+ ...
+\par
+\example/
+
+Finally, colors can be used simply with:
+
+\defcom\usecolor\arg{Named color or color expression}\arg{text}/
+This typesets \arg{text} with the specified color,
+%
+\note{%
+ Beware, the operation of the \emph{\string\usecolor} command
+ isn't executed inside a group, as may be the case with colors
+ in other packages.}%
+%
+overriding whatever is used as the current color wherever
+this command is issued (i.e. step, slide, area).
+
+
+
+
+
+\subsection{Shades}
+\noindent A \ital{shade} is a transition from one color to another. It can
+be used for backgrounds and frames only.
+It takes many parameters, so it is declared with the \yax syntax.
+
+\defcom\newshade\barg{name}/
+The \arg{name} is what is used to refer to this shade where it
+can be used.
+
+\attr{model}{grey gray rgb cmyk}{grey}
+The shade's model for its colors. You can't create a shade with colors
+from different models.
+
+\attr{from}{values}{black}
+The shade's starting color. There must be as many numbers as
+required by the \attrib{model} parameter. If nothing is specified,
+black is supplied.
+
+\attr{to}{values}{white}
+The shade's ending color. There must be as many numbers as
+required by the \attrib{model} parameter. If nothing is specified,
+white is supplied. Neither \attrib{from} nor \attrib{to} can take
+named colors as arguments.
+
+\attr{angle}{angle}{90}
+The shade varies along an axis.
+%
+\note{%
+ Shades' attributes may be more easily understood with
+ the interactive examples in the \emph{Visual Doc}.}%
+%
+This axis starts in the upper left
+corner of the area to be painted and makes an angle of \arg{angle}
+degrees with the area's upper border. The \arg{angle} must range
+between 0 and 90: 0 means that the shade progresses horizontally
+and 90 that it moves verticaly. If \arg{angle} is between 0 and
+-90, its absolute value is taken as its value but the shade starts
+from the upper \ital{right} corner.
+
+The value of \arg{angle} actually refers to a shade painted in a
+square; if the area to be painted isn't a square, this imaginary
+square is scaled and the angle of the shade will follow the scaling.
+For instance, an angle of 45 makes the shade progress from the top left
+corner to the bottom right corner; if the area to be painted is a
+rectangle, the shade will still progress between these two corners,
+and the angle will be skewed.
+
+\attr{speed}{number}{1}
+The speed of the shade's progression: 1 means the shade takes its
+axis' full length to progress; a value between 0 and 1 makes it take
+more than this length (and thus it won't be fully painted in the area)
+whereas a value larger than 1 makes it take less than this length
+(for instance with \verb"speed = 2" it'll take half the axis' length).
+
+\attr{width}{dimension}{none}
+A shade normally adapts to the area it paints. However, if \attrib{width}
+is given, the shade will take the specified dimension; if \attrib{width}
+is larger than the area to be painted, the shade won't be seen in its
+entirety; if it is smaller, part of the area will be painted with the
+shade's \attrib{to} color.
+
+\attr{height}{dimension}{none}
+Same as width in the vertical dimension.
+
+\attr{fixed}{true false}{false}
+By default, a shade is painted from the area's upper left corner (or
+right corner if \attrib{angle} is negative). If \attrib{fixed} is set
+to \val{true}, then it is painted from the slide's upper left (or right)
+corner, although only the area displays it. Note that a fixed shade
+whose width and height are unspecified doesn't make much sense.
+
+\vskip\baselineskip
+To sum up: picture two areas painted with the same shade. If the shade
+has no width nor height and isn't fixed, they will both display the
+entire shade, and if they don't have the same dimensions the shade will
+have different shapes in them. If the shade has a width and a height, both
+areas will display exactly the same shade, although what is revealed of it
+depends on the areas' dimensions. Finally, if the shade is fixed, the areas
+will look like open windows on the same underlying shade.
+
+
+\subsection{Images}[images]
+
+\defcom\newimage\arg{name}[\arg{width},\arg{height}]\arg{file}/
+This loads image file \arg{file},
+%
+\note{%
+ If only one dimension is used, the comma should nonetheless remain,
+ with nothing left or right, in order to indicate which dimension is
+ referred to. Specifying a \emph{<height>} only is done for instance
+ with:~\emph{[,5cm]}. Note that background images in slides and areas (as
+ values to the \emph{image} attribute) aren't scaled to their container's
+ dimensions.}%
+%
+setting its dimensions to \arg{width} and \arg{height}; if none are present,
+the image has its natural width; if only one dimension is given,
+the other ones is scaled accordingly. If both are given, deformations might ensue.
+The image can be used in the background of a slide or area by setting \arg{name}
+as the value for the \attrib{image} attribute, and anywhere else with
+the following command.
+
+\defcom\useimage\arg{name}/
+This returns an hbox containing the image \arg{name}. The height and
+width of the box are the height and width of the image as declared
+with the previous command.
+
+
+
+
+
+
+
+
+\section{Drawing symbols}
+\noindent \ltr provides very basic but still useful drawing facilities aimed at creating symbols
+to whatever end, e.g. a button for navigation or a bullet before each step.
+
+\defcom\newsymbol\arg{command}\oarg{settings}\arg{drawing}/
+This creates a symbol that is called with \arg{command} and designed with
+\arg{drawing}; the symbol is actually an hbox, and its reference point (i.e.
+the intersection of its left border with the baseline) is the origin of
+the coordinate system for \arg{drawing}; in turn, this hbox's width is the
+largest x-coordinate in \arg{drawing}, its height the largest y-coordinate,
+and its depth the smallest negative y-coordinate. Any part of \arg{drawing} on the
+left of the y-axis, i.e. with a negative x-coordinate, is ignored in the box's width
+and will overlap material on the box's left.
+
+In \arg{drawing} goes a set of simple statements separated by commas,
+a statement being an operator sometimes followed by arguments (separated by space), which either
+define paths or paint them. All coordinates are expressed in units, a unit being 1pt
+by default, which can be changed in \arg{settings}. At the beginning the current point is \Point00.
+Here are the operators (in the first two, `\verb"[+]"' means an optional
+\verb"+" character, without the brackets):
+
+\draw move [+] x y/
+If \verb"+" is not present, this moves to \point, which becomes the current point;
+if there is a \verb"+", and the current point is \Point{x'}{y'}, then it moves to
+\Point{x'+x}{y'+y}, which becomes the current point.
+If there was a path being drawn, it is ended and stroked beforehand.
+
+\draw line [+] x y/
+If \verb"+" is not present, this creates a line from the current point to \point, which becomes the current point;
+if there is a \verb"+", and the current point is \Point{x'}{y'}, then it creates a line
+between the current point and \Point{x'+x}{y'+y}, which becomes the current point.
+Note that the \attrib{line} operator is actually optional and any statement of the
+form `\verb"[+] x y"' is understood as `\verb"line [+] x y"'.
+
+\draw circle \arg{direction} \arg{radius}/
+Despite its name, this actually creates a quarter-circle from the current point
+to a point depending on \arg{direction} and \arg{radius}, with the latter being
+a number and the former one of the keywords \val{ul}, \val{ur}, \val{lu}, \val{ru},
+\val{dl}, \val{dr}, \val{ld} or \val{rd}, where each letter denotes \ital{left},
+\ital{right}, \ital{up} or \ital{down}, these in turn being the quarter-circle's
+tangents' directions at the starting (for the first letter) and ending (for the second letter)
+points. For instance, `\verb"circle ur 7, circle rd 7"' creates a quarter-circle of radius 7
+going up and then right, followed by a quarter-circle of the same radius going right and
+then down, which figure mathematicians tend to call a semi-circle, i.e.~%
+\pdfliteral {q .7 0 0 .7 0 0 cm 0 0 m 0 5.52 4.48 10 10 10 c 15.52 10 20 5.52 20 0 c S Q}\kern15pt.
+The current point after a (quarter-)\attrib{circle} is its ending point, i.e. \val{radius}
+units away left or right and below or above from the starting point.
+
+\draw close /
+This closes the path, i.e. appends a line from the current point to the path's
+starting point.
+
+\draw stroke /
+This strokes the current path. This operator is appended at the end of \arg{drawing}
+if there remains a path that hasn't been painted; thus it is useless as the
+very last command.
+
+\draw fill /
+This fills the current path, i.e. the path is closed and the area it delimits is colored.
+%
+\note{%
+ Differences between \emph{fill} and \emph{paint} are
+ visible when the line width, set with \emph{pen}, is large.}%
+%
+
+\draw paint /
+This is similar to fill, except the path is also stroked.
+
+\draw pen \arg{width}/
+This sets the width of the stroking pen to \val{width}.
+
+\draw color \arg{named color or color expression}/
+This changes the current color to the specified value. If several such \tosection{realcolors}{Colors}
+commands are issued, the painting operators above use the color most recently
+issued when they are called. If no color is specified, the symbol takes
+the foreground color of the place where it appears.
+
+\vskip\baselineskip
+The optional \arg{settings} to \com\newsymbol are comma-separated `\verb"attribute=value"'
+pairs; there can also be a single \arg{dimension} among them expressing the value of
+a unit in the coordinate system, which is 1pt by default.
+The attributes are \attrib{left}, \attrib{right}, \attrib{top}, \attrib{bottom} and
+\attrib{padding}, and the values are \arg{dimensions}. These attributes set the amount
+of padding on the left, right, top and bottom borders respectively, with \attrib{padding}
+setting them all at once. Padding is somteimes necessary because the drawing's box's (and clipping path's)
+dimensions are defined according to the abstract paths the drawing is made of, not according to the paths
+as they are painted, and a painted path has the width of the pen used to paint it.
+For instance, the simple drawing `\verb"line 0 10"' has no width, even though it might
+be painted with a 10-unit wide pen. If there's no padding, the symbol won't show anything.
+By default, padding is set to 1pt on all sides.
+
+As an example, here's how the alien has been drawn in the demonstration file
+called \tcode{LecturerDemo-KitschScienceFiction.pdf}:
+
+\example
+ % Default unit.
+\newsymbol\alien[1.7em]{%
+ pen .05,
+ color cmyk .2 1 .4 0,
+% The alien's body
+ 1 0, circle ul .5, circle ld .5, fill,
+% The left tentacle
+ circle dl .2, circle lu .2,
+% The right tentacle
+ move 1 0, circle dr .2, circle ru .2,
+% The legs
+ move .16 0, + 0 -.3, % stroke is implicit in the next move
+ move .49 0, + 0 -.3,
+ move .82 0, + 0 -.3,stroke,
+% The eyes
+ color cmyk 0 0 1 0,
+ move .2 .25, + .2 0,
+ move + .2 0, + .2 0 % stroke is implicitly added at the end
+ }
+\example/
+
+\defcom\symbolwidth\arg{command}/
+\Defcom\symbolheight\arg{command}/
+\Defcom\symboldepth\arg{command}/
+When a symbol is defined, its dimensions can be queried with those macros,
+where \arg{command} is the symbol's command.
+
+
+
+
+\section{Transitions}[transitions]
+
+\noindent Transitions are basic animations played when a step (dis)appears on the
+slide or when one advances to the next slide. The \attrib{transition} attribute
+for slides and steps can take a \arg{named transition}
+as its value, and one declares a named transition with the following command:
+
+\defcom\newtransition\arg{name}/
+This command takes several attributes, which are:
+
+\attr{type}{split blinds box wipe dissolve glitter fly push cover uncover fade}{none}
+(These values can also have an uppercase first letter.) This is the type of the
+%
+\note[2\baselineskip]{%
+ The \emph{Visual Doc} has a slide illustrating those transitions.}%
+%
+animation being played. The predefined transitions already available in \ltr
+are those animations with the following parameters set to their default values.
+
+\attr{motion}{inward outward}{inward}
+(Only for transitions of type \val{split}, \val{box}, and \val{fly}.)
+The direction of motion, either from or to the center of the page.
+
+\attr{direction}{lr bt rl tb dx}{lr}
+(Only for moving transitions.)
+The direction of movement: left to right, bottom to top, right to left,
+top to bottom, and diagonal (top-left to bottom-right).
+
+\attr{dimension}{horizontal vertical}{horizontal}
+(Only for \val{split} and \val{blinds}.)
+Whether the splitting is horizontal or vertical.
+
+\attr{scale}{number}{1}
+(Only for \val{fly}.)
+The scale at which elements affected by the transition are drawn
+at the beginning of the transition (if its motion is \val{inward}) or at the
+end (if it is \val{outward}).
+
+\attr{duration}{number}{1}
+The length of the transition, in seconds.
+
+
+
+
+
+
+
+\section{Inserting PDF code}
+\noindent\ltr relies heavily on PDF code and unfortunately pdf\TeX's management of
+some PDF objects is far from optimal. Consequently, if you want to insert
+some PDF constructs things might go wrong. Hence the following macros,
+where arguments are always expanded immediately.
+
+\defcom\addtopageobject\arg{code}/
+This adds \arg{code} to the Page object for the current page.
+
+\defcom\addtoeachpageobject\arg{code}/
+This adds \arg{code} to the Page object for all pages. This command
+and the previous one fill the \com\pdfpageattr token list, which
+after each shipout is emptied of material added with \com\addtopageobject.
+
+\defcom\addtopageresources\arg{code}/
+This adds \arg{code} to the Resources dictionary for all pages.
+This uses the \com\pdfpageresources token list. For the Properties,
+Shading and ExtGState resources, the following command should be used.
+
+\defcom\addproperties\arg{name}\arg{object number}/
+Maps \arg{name} to \arg{object number} in the Properties dictionary
+of the current page's Resources. For instance,
+
+\example
+\addproperties{foo}{3}
+\example/
+
+\noindent produces the following in the page's Resources:
+
+\example
+...
+/Properties << ... /foo 3 0 R ... >>
+...
+\example/
+
+\defcom\addshading\arg{name}\arg{object number}/
+Same as \com\addproperties, but for the Shading dictionary. And
+this is added to all pages' Resources, not just the current one.
+
+\defcom\addgstate\arg{name}\arg{object number}/
+Same as \com\addshading, but for the ExtGState dictionary.
+
+\defcom\addOCG\arg{object number}/
+Adds the Optional Content Group \arg{object number} to the document's
+catalog, with base state {\sc off}. It is also turned off when one arrives
+on the page where it's been added.
+
+\defcom\addvisibleOCG\arg{object number}/
+Same as \com\addOCG, except base state is {\sc on}.
+
+
+
+
+\clearpage
+
+\section{Demonstrations}[demonstrations]
+
+
+\demo VisualDoc 4
+The present documentation might appear as a dull list of
+attributes. That's why it is distributed with a Visual
+Documentation (\demofile),
+which isn't really a demonstration, in the sense that it is
+not supposed to be an imaginary presentation but a visual display of many
+features of \ltr. Thus commands and attributes can make sense
+at once. One should nevertheless keep in mind that this visual documentation
+doesn't show everything in \ltr, and that the reference documentation
+remains the present one.
+The source isn't terribly user-friendly (and requires Lua\TeX\ and
+non-free fonts to compile), but still interesting constructions
+are used and can be copied, in particular with \com\showorhide.
+\let\par\endgraf
+
+\vskip\baselineskip
+The visual documentation explains how to use \ltr; the following
+demonstrations show what it can do. Barring \verb"LecturerDemo-SquaresOfAs", they have
+been typeset with the default Computer Modern fonts, so the sources
+can be modified and compiled again to see how things work. To do
+so, one should use the plain \TeX\ format with either pdf\TeX\ or Lua\TeX.
+
+\demo Mondrian 3
+\demofile is a simple presentation based on the work of one famous Dutch
+painter. It illustrates what you can do with areas, setting the
+main text in one square (although the text is not \com\position'ed
+but typed in as the slide's content, see below),
+the maths (synced with the main text) in another one,
+and footnotes, which are turned on and off with the \com\showorhide
+command, in a third square. The other squares are just decorations.
+The alignment of the squares is made easy
+by grouped attribute declarations with the \com\setarea command. For instance,
+the three squares on the left are declared as:
+
+\example
+\setarea{area1 area2 matharea}
+ width = 3cm
+\example/
+
+\noindent and the first two, which have the same height and color, are
+specified further again with:
+
+\example
+\setarea{area1 area2}
+ height = 4.3cm
+ background = white
+\example/
+
+\noindent after which \verb"area1" doesn't need anything; another
+declaration sets \verb"area2"'s \attrib{vshift}, and still another one
+is used for \verb"matharea" to display its content.
+
+The slide's background
+is painted black so lines appear between the areas (which is also why
+the \val{white} color must be specified as some areas' \attrib{background},
+otherwise they'd be transparent). The main text is set in the slide's
+textblock (i.e. not \com\position'ed), and a red area is painted below,
+which gives the impression that the text is set in an area, whereas it
+is simlpy asymmetrically shifted.
+
+\demo SquaresOfAs 3
+\demofile was inspired by some Con\-\TeX t presentations, and uses only areas
+to typeset its material. Barring the last slide, there's nothing in the main
+textblock. On the first slide, the \attrib{visible} attribute of the
+areas is set to \val{step}, so areas appear with their content.
+The background of the reader is turned to white, so the slides
+seem to fill the entire screen. The entire presentation is built
+on a single length (\com\squarewidth) in which all dimensions are
+expressed, including font sizes (such cumbersome font sizes
+as \verb"1.83\squarewidth" are meant to make all letters appear
+at the same height). Thus the presentation is totally scalable.
+Like in the Mondrian presentation, attributes are declared
+mostly for all areas at once, so the design can be easily modified.
+The frames of the areas have negative width, so they are painted
+inside the areas and they don't have to be taken into account
+when computing positions. Actually, their contribution to the
+design resides in their rounded corner only, since they have the
+same \attrib{background} color as the areas.
+
+The presentation itself is a wandering
+among several guises of the letter \ital{a}, with several non-free
+TrueType fonts (requiring Lua\TeX), and thus you should change those to
+fonts you own and can manage if you want to compile the source.
+(If you think it is inhuman to make the part of the letters below
+the baseline disappear in the white background, just change the latter.
+Jovica Veljovi\char"0107's \ital{Esprit} will regain its spirit indeed.)
+
+
+\demo SimplePresentation 4
+\demofile uses a very simple display, built on a millimetric grid, which
+can be displayed by uncommenting the first lines of the file.
+Some subtleties are included in the presentation's flow; for instance,
+the triangles at the left of each vertical step are already painted on the
+slide before the steps appear. This is done by creating two steps, one
+for the triangle with \attrib{visible} set to \val{true},and one
+for the step's content, a process which is automated by a simple
+code:
+
+\example
+\def\Step{%
+ \step[visible=true]\quitvmode\llap{\stepsym\kern.2cm}%
+ \step}
+\example/
+
+\noindent where \com\stepsym is the symbol's command. Note the
+necessary \com\quitvmode: those steps are called in vertical
+mode and plain \TeX's \com\llap macro creates a box which
+should be inserted in horizontal mode to get things right. The
+\attrib{everyvstep} attribute could also have been used, but care
+should be taken to ensure that no loop occurs, by creating to
+kinds of step, the \attrib{everyvstep} of one executing the other.
+
+The horizontal
+and vertical lines are actually areas with no width but a frame indeed,
+created with:
+
+\example
+\string\setarea{vline hline}
+ frame = "width = .15pt, color = black"
+
+\setarea{vline}
+ hshift = 3cm
+ width = 0pt
+
+\setarea{hline}
+ vshift = 2cm
+ height = 0pt
+\example/
+
+When clicked, the circle (a symbol) with the slide number in the
+bottom right corner displays the bookmarks in a pop-up menu. And
+the maths in the blackboark are of course inserted with free
+\com\position's. The next presentation is an elaboration on
+this one.
+
+
+\demo BeamerCambridgeUS 2
+\demofile is an imitation (not terribly faithful) of the Beamer package's
+\tcode{CambridgeUS} theme. It uses \attrib{everyslide} to typeset
+recurrent material, like the date or the slide's title. It also
+mimicks Beamer's display of inactive steps in transparent color.
+This is no feature in \ltr, though, and must be done by hand with
+overlapping elements; which means it's basically undoable for the
+main text. The presentation is also heavy on symbols designed
+with \com\newsymbol used as buttons, and uses bookmarks and anchors for navigation,
+including between the main text and appendices, thanks to
+\com\gotoA and \com\gotoB. The last slide displays
+scaled content, and finally, if the \attrib{mode} attribute is turned
+to \val{handout}, a handout is produced.
+(Which is true of all presentations, except in this case
+care has been taken so that the handout isn't just a presentation
+on a sheet of paper, although the differences are rather slight
+with the original presentation.)
+
+\demo ThePoodleLectures 4
+\demofile (don't ask) is made of five slides each displaying
+a different presentation style, sometimes verging on the PowerPoint-ish.
+The point of this demonstration is that the code for each slide
+remains minimal: you don't need to write hundreds of lines of
+attribute specifications to set up a presentation. Areas are used
+for decoration and the slide's title, and no complex positioning
+is involved. The same steps are reused (with silly text, don't ask
+either) and illustrate the use of the \attrib{left} attribute for
+steps as an easy way to create list items. Most of the effort, though,
+is spent on symbol design, from simple square to music note to
+sea shell. (Note that this demonstration contains such declarations
+as `\verb"hshift hshift* = 2cm"' when \attrib{hshift*} is supposed
+to automatically set \attrib{hshift} if the latter isn't specified;
+but since the same areas are reused for all slides, \attrib{hshift}
+\emph{is} specified after the first slide.)
+
+
+\demo KitschScienceFiction 1
+\demofile is a pathetic attempt at creating a video game with \TeX.
+Obviously there are better ways to do that. Nevertheless, the
+presentation illustrates many \ltr's features, including the use
+of \com\showorhide, free positions, transparent colors, shades,
+and a background image.
+The drawing of symbols is also used to an extent it wasn't designed
+for in the first place. The reader can pay a visit to the layers
+panel (which is displayed by default when not in full screen) to
+see how elements are organized on the screen. Once again an area
+(the green square) is painted below the slide's textblock,
+with similar colors, to give
+the impression of a screen, even though as far as \ltr is concerned
+the textblock and the area are totally unrelated, i.e. the text isn't
+the content of the area. The darker line that appears at the area's
+perimeter is produced by the area and its frame overlapping, an unwanted
+side effect with transparent colors, unavoidable but not so bad-looking
+here.
+
+\pagenumfalse
+
+
+
+
+
+\processbookmarks
+
+
+
+
+\bye \ No newline at end of file
diff --git a/macros/generic/lecturer/doc/universe.jpg b/macros/generic/lecturer/doc/universe.jpg
new file mode 100644
index 0000000000..fb6068cbbe
--- /dev/null
+++ b/macros/generic/lecturer/doc/universe.jpg
Binary files differ
diff --git a/macros/generic/lecturer/tex/lecturer.sty b/macros/generic/lecturer/tex/lecturer.sty
new file mode 100644
index 0000000000..7a3328c5dd
--- /dev/null
+++ b/macros/generic/lecturer/tex/lecturer.sty
@@ -0,0 +1,14 @@
+% This is lecturer.sty, a style file to load
+% the Lecturer package in LaTeX. Useful information
+% can be found in lecturer-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: July 2010.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lecturer}[2010/27/10 v.1.0 Screen presentations with PDF.]
+\chardef\formatnumber=4
+\input lecturer.tex
+\endinput \ No newline at end of file
diff --git a/macros/generic/lecturer/tex/lecturer.tex b/macros/generic/lecturer/tex/lecturer.tex
new file mode 100644
index 0000000000..e19e7d2f4d
--- /dev/null
+++ b/macros/generic/lecturer/tex/lecturer.tex
@@ -0,0 +1,122 @@
+% This is the Lecturer package.
+% Relevant information can be found in lecturer-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: July 2010.
+%
+\ifx\lectureralreadyloaded\undefined
+ \let\lectureralreadyloaded\relax
+\else
+ \expandafter\endinput
+\fi
+
+\input yax % which input's texapi
+\ifdefined\yaxversion
+ \ifdim\yaxversion pt<1.02pt
+ \senderror{Lecturer}{I need YaX with version at least 1.02. I quit}
+ \expandafter\expandafter\expandafter\endinput
+ \fi
+\else
+ \senderror{Lecturer}{I need YaX with version at least 1.02. I quit}
+ \expandafter\endinput
+\fi
+\setcatcodes{\_\@=11}
+\def\ltr@error{\senderror{Lecturer}}
+\pdfminorversion5
+%
+% YAX SETTINGS.
+%
+\newsyntax#1:#2;{ltr@}
+%
+% A faster way to restrict those attributes
+% that take boolean values.
+%
+\def\ltr@boolean_attr#1{%
+ \ltr@restrictattribute #1; true false\par
+ }
+%
+% Delete a list of attributes.
+%
+\newfor\ltr@attribute_deletion{1}#2 {%
+ \ltr@deleteattribute #1:#2;%
+ }
+%
+% Delete an attribute if empty, so being empty
+% is equivalent to being undefined.
+%
+\def\ltr@delete_empty#1{%
+ \ltr@passvalueand{\iffemptystring}#1;{{\ltr@deleteattribute#1;}}{}%
+ }
+%
+% Turn the <value> of those attributes that are supposed to
+% be dimensions into \dimexpr(<value>), so that one can
+% declare e.g. "5cm-12pt" as a value.
+%
+\newfor\ltr@todim_loop{1}#2 {%
+ \nometa\ltr@ifattribute#1:#2;
+ {\ltr@passvalue{\ltr@todim_trim{#1:#2}}#1:#2;}{}%
+ }
+\def\ltr@todim_trim#1#2{%
+ \passtrim{#2}{\ltr@todim_do{#1}}%
+ }
+\def\ltr@todim_do#1#2{%
+ \ltr@setattribute#1; = {\dimexpr(#2)}
+ }
+\def\ltr@gobbletopar#1\par{}%
+% GENERAL COMMANDS
+%
+% Option processing when between brackets [...].
+% Each command where such options occur (\slide, \step...)
+% defines a "useatom" and "usepair".
+%
+\newstring{=}
+\def\ltr@option_launchloop#1#2{\ltr@option_loop{#1}{#2,}}
+\newfornoempty\ltr@option_loop{1}#2,{%
+ \ifcontains={#2}{\ltr@option_getpair{#1}#2\ltr@end}
+ {\passtrim{#2}{\usecs{ltr@#1_useatom}}}%
+ }
+\def\ltr@option_getpair#1#2=#3\ltr@end{%
+ \passtrim{#3}{\ltr@option_checkquotes{\passtrim{#2}{\usecs{ltr@#1_usepair}}}}%
+ }
+\newstring{"}
+\def\ltr@option_checkquotes#1#2{%
+ \iffprefix"{#2}
+ {\iffsuffix"{#2}\ltr@option_removequotes}%
+ #1{#2}%
+ }
+\def\ltr@option_removequotes#1#2#3#4{%
+ \removeprefixand"{#4}{\ltr@removesuffixand"{#1{#2}{#3}}}%
+ }
+\def\ltr@removesuffixand#1#2#3{\removesuffixand#1{#3}{#2}}
+%
+% A generic loop on space-separated lists.
+\newfornoempty\ltr@space_loop{1}#2 {#1{#2}}
+%
+% Turns a dimension into a number.
+%
+\def\ltr@nopt#1{\expandafter\lTr@noPT\the\dimexpr(#1)\relax}
+\def\ltr@integer#1{\expandafter\lTr@inTeger\the\dimexpr(#1)\relax}
+% Turns TeX english points (72.27 per inch), in which dimensions
+% are expressed, into Postscript ones (72 per inch), which PDF understands.
+%
+\def\ltr@point_convert#1{%
+ \expandafter\lTr@noPT\the\dimexpr(.996264\dimexpr(#1))\relax\spacecs
+ }
+\let\numexPr\numexpr
+{\setcatcodes{pt=12} \gdef\lTr@noPT#1pt{#1}
+\gdef\lTr@inTeger#1.#2#3pt{\numexPr(#1#2/10)}}
+%
+% Here we go.
+%
+\def\ltr@input#1 {\priminput ltr-#1.tex }
+\ltr@input job
+\ltr@input slides
+\ltr@input steps
+\ltr@input areas
+\ltr@input graphics
+\ltr@input navigation
+\restorecatcodes
+\endinput
+% Goodbye.
diff --git a/macros/generic/lecturer/tex/ltr-areas.tex b/macros/generic/lecturer/tex/ltr-areas.tex
new file mode 100644
index 0000000000..9e89d6696e
--- /dev/null
+++ b/macros/generic/lecturer/tex/ltr-areas.tex
@@ -0,0 +1,208 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+%
+%
+% ATTRIBUTES
+%
+\def\setarea#1#2\par{%
+ \ltr@space_loop{\ltr@setarea_do{#2}}{#1 }%
+ }
+\long\def\ltr@setarea_do#1#2{%
+ \ltr@ifattribute {ltr@#2@inner_area}:visible;
+ {\setparameter {ltr@#2@inner_area}:}
+ {\ltr@setarea_new{#2}}%
+ #1\par
+ }%
+\def\ltr@area_list{}%
+\def\ltr@setarea_new#1{%
+ \global\eaddright\ltr@area_list{ltr@#1@inner_area,}%
+ \passcs{\usecs{newbox}}{ltr@#1@inner_area:box}%
+ \restrictparameter ltr@#1@inner_area:
+ width height hshift hshift* vshift vshift* left right top bottom
+ foreground background topskip baselineskip parindent parskip hpos vpos
+ visible frame frame_width frame_color frame_corner frame_dash
+ everyposition everyfreeposition font hsize vsize image
+ \par
+ \ltr@restrictattribute ltr@#1@inner_area:visible; true false step\par
+ \ltr@restrictattribute ltr@#1@inner_area:frame_corner; miter round bevel\par
+ \ltr@restrictattribute ltr@#1@inner_area:hpos; ff rr fr rf\par
+ \defactiveparameter ltr@#1@inner_area {%
+ \ltr@delete_empty{##1:background}%
+ \ltr@todim_loop{##1}{width height hshift hshift* vshift vshift* left right top bottom hsize vsize
+ topskip baselineskip parindent frame_width }%
+ \ltr@dimen_set{##1}{hshift*}{hshift}{width}{\pdfpagewidth}%
+ \ltr@dimen_set{##1}{vshift*}{vshift}{height}{\pdfpageheight}%
+ \ltr@deleteattribute ##1:hshift*;%
+ \ltr@deleteattribute ##1:vshift*;%
+ \ltr@dimen_set{##1}{right}{left}{hsize}{\ltr@area_width{##1}}%
+ \ltr@dimen_set{##1}{bottom}{top}{vsize}{\ltr@area_height{##1}}%
+ \ltr@deleteattribute ##1:right;%
+ \ltr@deleteattribute ##1:bottom;%
+ \ltr@ifattribute##1:frame;
+ {\def\ltr@area_name{#1}\ltr@passvalue{\ltr@option_launchloop{area}}##1:frame;}{}%
+ \ltr@deleteattribute##1:frame;
+ \ltr@todim_loop{##1}{frame_width }%
+ \ltr@ifattribute##1:frame_color;{}
+ {\ltr@ifattribute##1:background;
+ {\ltr@setattribute##1:frame_color; = {\ltr@usevalueor##1:background;{white}} }{}}%
+ }%
+ \setparameter {ltr@#1@inner_area}:
+ visible = true
+ }
+\def\ltr@area_usepair#1#2{%
+ \ltr@setattribute ltr@\ltr@area_name @inner_area:frame_#1;={#2}
+ }
+%
+%
+%
+\def\ltr@area_hshift#1{%
+ \ltr@usevalueor #1:hshift;{0pt}%
+ }
+\def\ltr@area_vshift#1{%
+ \ltr@usevalueor #1:vshift;{0pt}%
+ }
+\def\ltr@area_width#1{%
+ \ltr@usevalueor #1:width;{\dimexpr(\pdfpagewidth-\ltr@area_hshift{#1})}%
+ }
+\def\ltr@area_height#1{%
+ \ltr@usevalueor #1:height;{\dimexpr(\pdfpageheight-\ltr@area_vshift{#1})}%
+ }
+\def\ltr@area_left#1{%
+ \ltr@usevalueor #1:left;{0pt}%
+ }
+\def\ltr@area_top#1{%
+ \ltr@usevalueor #1:top;{0pt}%
+ }
+\def\ltr@area_hsize#1{%
+ \ltr@usevalueor #1:hsize;{\dimexpr(\ltr@area_width{#1}-\ltr@area_left{#1})\relax}%
+ }
+\def\ltr@area_vsize#1{%
+ \ltr@usevalueor #1:vsize;{\dimexpr(\ltr@area_height{#1}-\ltr@area_top{#1})\relax}%
+ }
+%
+% POSITION
+% No attributes, except the optional argument,
+% which takes the x and y (downward, \'a la TeX)
+% shifts. Most of this is box manipulation.
+%
+\newcount\ltr@temp_count
+\newcount\ltr@position_count
+\def\position#1{%
+ \ifnextnospace[{\ltr@position{#1}}{\ltr@position{#1}[]}%
+ }
+\newife\ifltr@area_do
+\long\def\ltr@position#1[#2]{%
+ \ltr@ifattribute ltr@#1@inner_area:visible;
+ {\ltr@area_check{#1}%
+ \ifltr@area_do
+ {\ltr@position_do{#2}{ltr@#1@inner_area}}
+ {\gobbleone}}
+ {\ltr@error{Area `#1' doesn't exist. Material is discarded}\gobbleone}
+ }
+\def\ltr@area_check#1{%
+ \ltr@area_dotrue
+ \ltr@ifattribute ltr@inner_slide:areas*;
+ {\ltr@ifvalue ltr@inner_slide:areas*; = all
+ {\ltr@area_dofalse}
+ {\ltr@storevalue\ltr@temp ltr@inner_slide:areas*;
+ \addright\ltr@temp{ }\addleft\ltr@temp{ }%
+ \passexpanded{\iffcontains{ #1 }}{\ltr@temp}\ltr@area_dofalse}}
+ {}%
+ \ltr@ifattribute ltr@inner_slide:areas;
+ {\ltr@ifvalue ltr@inner_slide:areas; = all
+ {}
+ {\ltr@storevalue\ltr@temp ltr@inner_slide:areas;
+ \addright\ltr@temp{ }\addleft\ltr@temp{ }%
+ \passexpanded{\ifcontains{ #1 }}{\ltr@temp}\ltr@area_dotrue\ltr@area_dofalse}}
+ {}%
+ }
+\newbox\ltr@temp_box
+\newdimen\ltr@temp_dimen
+\long\def\ltr@position_do#1#2#3{%
+ \ifemptystring{#1}
+ % Normal position.
+ {\setbox\ltr@temp_box=\ltr@position_dobox{#2}{\ltr@usevalue #2:everyposition;#3}}
+ % Free position.
+ {\setbox\ltr@temp_box=\vbox{%
+ \ltr@position_dobox{#2}{\ltr@usevalue #2:everyfreeposition;#3}}%
+ \ltr@position_getposition#1
+ \setbox\ltr@temp_box=\vbox{%
+ \kern\dimexpr(\ltr@position_top+\ltr@usevalueor #2:topskip;\topskip-\ht\ltr@temp_box)\relax
+ \moveright\ltr@position_left\box\ltr@temp_box
+ }%
+ \dp\ltr@temp_box=0pt \ht\ltr@temp_box=0pt
+ }%
+ % How to apply topskip?
+ % If the box isn't empty, that doesn't mean it shouldn't be used,
+ % since the content of the box might be material freely positioned,
+ % which doesn't exist, so to speak.
+ % We can't measure the box either, because if topskip
+ % is 0pt, one-line material without depth will fill the box
+ % with height and depth 0pt, as if there were nothing, and
+ % topskip will be applied again on the next material.
+ % Hence this pseudo-conditional turned to true the first
+ % time real material is added.
+ \ifemptystring{#1}
+ {\begingroup
+ \ltr@usevalue #2:font;% So em and ex are right.
+ \ifcsname #2:done\endcsname
+ \global\ltr@temp_dimen=\dimexpr(%
+ \dimexpr(\ltr@usevalueor #2:baselineskip;\baselineskip+\ltr@usevalueor #2:parskip;{0pt})\relax
+ -\dimexpr(\ht\ltr@temp_box+\dp\usecs{#2:box}))\relax
+ \ifdim\ltr@temp_dimen<\lineskiplimit
+ \global\ltr@temp_dimen=\lineskip
+ \fi
+ \else
+ \global\ltr@temp_dimen=\dimexpr(\ltr@usevalueor #2:topskip;\topskip-\ht\ltr@temp_box)\relax%
+ \global\letcs{#2:done}\relax
+ \fi
+ \endgroup}
+ {\edef\ltr@position_left{\the\ht\usecs{#2:box}}% I could have used special dimensions
+ \edef\ltr@position_top{\the\dp\usecs{#2:box}}}% but it's a time of austerity.
+ \global\setbox\usecs{#2:box}=\vbox{%
+ \unless\ifvoid\usecs{#2:box}
+ \unvcopy\usecs{#2:box}
+ \fi
+ \ifemptystring{#1}
+ {\kern\ltr@temp_dimen}
+ {\kern-\dimexpr(\ht\usecs{#2:box}+\dp\usecs{#2:box})\relax}
+ \ifx\ltr@step_current\emptycs
+ \ifemptystring{#1}\unvbox\box\ltr@temp_box
+ \reverse\iffcs{ltr@#2_\the\slideno @inner_area:group}
+ {\global\letcs{ltr@#2_\the\slideno @inner_area:group}\emptycs}
+ \else
+ \global\advance\ltr@position_count1
+ \pdfliteral {/OC/ltr@position_\the\ltr@position_count:content BDC}
+ \ifemptystring{#1}\unvbox\box\ltr@temp_box
+ \pdfliteral {EMC}
+ \addproperties{ltr@position_\the\ltr@position_count:content}{\ltr@step_current}
+ \reverse\iffcs{#2_\the\slideno:group}
+ {\global\letcs{#2_\the\slideno:group}\ltr@step_current
+ \addproperties{#2_\the\slideno:background}{\usecs{#2_\the\slideno:group}}}
+ \fi
+ \reverse\iffemptystring{#1} % Restore the box to its original dimensions.
+ {\prevdepth-1000pt \vbox to \ht\usecs{#2:box}{\vfil\hbox{\vrule height0pt width0pt depth\dp\usecs{#2:box}}}}%
+ }%
+ \ltr@temp_dimen=0pt
+ }
+\def\ltr@position_getposition#1,#2 {%
+ \edef\ltr@position_left{\ifemptystring{#1}{0pt}{\dimexpr(#1)}}%
+ \edef\ltr@position_top{\ifemptystring{#2}{0pt}{\dimexpr(#2)}}
+ }
+\long\def\ltr@position_dobox#1#2{%
+ \vtop{%
+ \ltr@usevalue #1:font;
+ \parindent\ltr@usevalueor #1:parindent;{0pt}\relax
+ \hsize=\ltr@area_hsize{#1}\relax
+ \ltr@settovalue\baselineskip #1:baselineskip;
+ \parskip=\ltr@usevalueor #1:parskip;{0pt}\relax
+ \leftskip=0pt \rightskip=0pt plus 1fill\relax
+ \ltr@ifcasevalue #1:hpos;
+ \val ff \rightskip=0pt
+ \val rr \leftskip=0pt plus 1fill\relax
+ \val rf \leftskip=0pt plus 1fill \rightskip=0pt
+ \endval
+ #2}%
+ }
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/lecturer/tex/ltr-graphics.tex b/macros/generic/lecturer/tex/ltr-graphics.tex
new file mode 100644
index 0000000000..c42ef9f1d2
--- /dev/null
+++ b/macros/generic/lecturer/tex/ltr-graphics.tex
@@ -0,0 +1,644 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+%
+% COLORS
+% No attributes here. Cool.
+%
+\def\newcolor#1#2{%
+ \ifnextnospace[{\ltr@newcolor{#1}{#2}}{\ltr@newcolor{#1}{#2}[]}%
+ }
+\def\ltr@newcolor#1#2[#3]#4{%
+ \ifcs{ltr@colormodel_#2}
+ {\xdefcs{ltr@color_user:#1}{%
+ \usecs{ltr@colormodel_#2}#4\ltr@color_end
+ \ifemptystring{#3}{/ltr@opacity_1 gs }{/ltr@opacity_#3 gs }}%
+ \reverse\iffemptystring{#3}{\ltr@create_opacity{#3}}%
+ \xdefcs{ltr@jscolor_user:#1}{\usecs{ltr@jscolormodel_#2}#4\ltr@color_end}%
+ }%
+ {\ltr@error{Unknown color model `#2'. Color `#1' won't be defined}}%
+ }
+\def\ltr@create_opacity#1{%
+ \reverse\iffcs{ltr@opacity_#1}
+ {\immediate\pdfobj{<< /Type/ExtGState /CA #1 /ca #1 >>}%
+ \addgstate{ltr@opacity_#1}{\the\pdflastobj}%
+ \gdefcs{ltr@opacity_#1}{}}%
+ }
+
+\def\ltr@colormodel_grey#1\ltr@color_end{#1 g #1 G }
+\let\ltr@colormodel_gray\ltr@colormodel_grey
+\def\ltr@colormodel_rgb#1\ltr@color_end{#1 rg #1 RG }
+\def\ltr@colormodel_cmyk#1\ltr@color_end{#1 k #1 K }
+%
+\def\ltr@color_use#1{%
+ \ifcs{ltr@color_user:#1}
+ {\usecs{ltr@color_user:#1}}
+ {\ltr@color_analyze#1 0 0 0 0 \ltr@color_end}%
+ }
+\def\ltr@color_analyze#1 {%
+ \ifcs{ltr@color_usemodel:#1}
+ {\usecs{ltr@color_usemodel:#1}}%
+ {\ltr@use_defaultcolor}%
+ }
+%
+\defcs{ltr@color_usemodel:grey}#1 #2\ltr@color_end{#1 g #1 G }
+\letcstocs{ltr@color_usemodel:gray}{ltr@color_usemodel:grey}
+\defcs{ltr@color_usemodel:rgb}#1 #2 #3 #4\ltr@color_end{#1 #2 #3 rg #1 #2 #3 RG }
+\defcs{ltr@color_usemodel:cmyk}#1 #2 #3 #4 #5\ltr@color_end{#1 #2 #3 #4 k #1 #2 #3 #4 K }
+\def\ltr@use_defaultcolor#1\ltr@color_end{1 g 1 G }
+%
+% A simple macro for everybody.
+%
+\long\def\usecolor#1#2{%
+ \pdfcolorstack0 push {\ltr@color_use{#1}}%
+ #2%
+ \pdfcolorstack0 pop%
+ }
+%
+% And the same in JavaScript, just for the background in full screen. Ain't it nice?
+%
+\def\ltr@jscolormodel_grey#1\ltr@color_end{["G",#1]}
+\let\ltr@jscolormodel_gray\ltr@jscolormodel_grey
+\def\ltr@jscolormodel_rgb#1 #2 #3\ltr@color_end{["RGB",#1,#2,#3]}
+\def\ltr@jscolormodel_cmyk#1 #2 #3 #4\ltr@color_end{["CMYK",#1,#2,#3,#4]}
+%
+\def\ltr@jscolor_use#1#2#3{%
+ \ltr@ifattribute #1:#2;
+ {\ifcs{ltr@jscolor_user:\ltr@usevalueor#1:#2;{ltr@novalue}}
+ {\usecs{ltr@jscolor_user:\ltr@usevalue#1:#2;}}
+ {\ltr@passvaluenobraces{\ltr@jscolor_analyze{#3}}#1:#2; \ltr@color_end}}
+ {["G",#3]}%
+ }
+\def\ltr@jscolor_analyze#1#2 {%
+ \ifcs{ltr@jscolor_usemodel:#2}
+ {\usecs{ltr@jscolor_usemodel:#2}}%
+ {\ltr@jsuse_defaultcolor{#1}}%
+ }
+\defcs{ltr@jscolor_usemodel:grey}#1 \ltr@color_end{["G",#1]}
+\letcstocs{ltr@jscolor_usemodel:gray}{ltr@jscolor_usemodel:grey}
+\defcs{ltr@jscolor_usemodel:rgb}#1 #2 #3 \ltr@color_end{["RGB",#1,#2,#3]}
+\defcs{ltr@jscolor_usemodel:cmyk}#1 #2 #3 #4 \ltr@color_end{["CMYK",#1,#2,#3,#4]}
+\def\ltr@jsuse_defaultcolor#1#2\ltr@color_end{["G",#1]}
+
+\ltr@create_opacity{1}
+\newcolor{black}{grey}{0}
+\newcolor{white}{grey}{1}
+\newcolor{red}{rgb}{1 0 0}
+\newcolor{green}{rgb}{0 1 0}
+\newcolor{blue}{rgb}{0 0 1}
+\newcolor{cyan}{cmyk}{1 0 0 0}
+\newcolor{magenta}{cmyk}{0 1 0 0}
+\newcolor{yellow}{cmyk}{0 0 1 0}
+
+%
+%
+%
+%
+% SHADES
+%
+\def\ltr@newshade_do#1#2#3{%
+ \immediate\pdfobj stream attr {
+ /FunctionType 4
+ /Domain [0 1]
+ /Range [#1]
+ }
+ {{\ltr@usevalueor ltr@inner_shade:speed;1 mul dup #3}}%
+ \edef\ltr@temp{\the\pdflastobj\spacecs}
+ \immediate\pdfobj{
+ <<
+ /ShadingType 2
+ /Coords[0 0 1 0]
+ /Extend [true true]
+ /ColorSpace /Device#2
+ /Function \ltr@temp 0 R
+ >>}
+ \edef\ltr@temp{\the\pdflastobj\spacecs}%
+ \addshading{ltr@shade_\ltr@usevalue ltr@inner_shade:name;}{\ltr@temp}
+ }
+\def\ltr@newshade_trig#1#2{%
+ \ltr@nopt{%
+ \dimexpr(\ltr@nopt{#1pt*71/4068}%
+ \dimexpr(#2\dimexpr(#2\dimexpr(#2\dimexpr(#2pt/72-1pt)\relax+42pt)\relax-840pt)\relax+5040pt)\relax/5040)\relax}%
+ }
+\def\ltr@newshade_sin#1{%
+ \ltr@newshade_trig{#1}{\ltr@nopt{\ltr@nopt{#1pt*71/4068}\dimexpr(#1pt*71/4068)}}%
+ }
+\def\ltr@newshade_cos#1{%
+ \ltr@newshade_trig{\ltr@nopt{90pt-#1pt}}{\ltr@nopt{\ltr@nopt{\ltr@nopt{90pt-#1pt}pt*71/4068}\dimexpr(\ltr@nopt{90pt-#1pt}pt*71/4068)}}%
+ }
+\def\ltr@newshade_removepoint#1.#2#3#4#5\ltr@end{#1#2#3#4}
+\def\ltr@newshade_removesign-{}%
+\def\ltr@newshade_doscale#1{%
+ \xdefcs{ltr@shade_user:\ltr@usevalue ltr@inner_shade:name;_scale}{\ltr@nopt{1000pt/\expandafter\ltr@newshade_removepoint#1000\ltr@end}}%
+ }
+\defactiveparameter ltr@inner_shade {%
+ \ltr@todim_loop{#1}{width height }%
+ \ifdim\ltr@usevalueor #1:angle;{90}pt>90pt
+ \ltr@error{A shade's angle can't be more than 90 [shade `\ltr@usevalue #1:name;']}%
+ \ltr@esetattribute #1:angle; = 90
+ \else
+ \ifdim\ltr@usevalueor #1:angle;{90}pt<-90pt
+ \ltr@error{A shade's angle can't be less than -90 [shade `\ltr@usevalue #1:name;']}%
+ \ltr@esetattribute #1:angle; = -90
+ \fi
+ \fi
+ \ifdim\ltr@usevalueor #1:angle;{90}pt<0pt
+ \ltr@esetattribute #1:angle; = \ltr@passvaluenobraces\ltr@newshade_removesign#1:angle;
+ \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;}{reversed}%
+ \else
+ \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;}{normal}%
+ \fi
+ \xdefcs{ltr@shade_user:\ltr@usevalue #1:name;_sin}{\ltr@newshade_sin{\ltr@usevalueor#1:angle;{90}}}%
+ \xdefcs{ltr@shade_user:\ltr@usevalue #1:name;_cos}{\ltr@newshade_cos{\ltr@usevalueor#1:angle;{90}}}%
+ \ifdim\ltr@usevalueor#1:angle;{90}pt<45pt
+ \passcs\ltr@newshade_doscale{ltr@shade_user:\ltr@usevalue #1:name;_cos}%
+ \else
+ \passcs\ltr@newshade_doscale{ltr@shade_user:\ltr@usevalue #1:name;_sin}%
+ \fi
+ \ltr@ifvalue #1:fixed; = true
+ {\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_fixed}{}
+%
+% This would force fixed shades to have at least the slide's dimension,
+% so it would never take the area's dimensions. But after all why forbid
+% an option simply because I can't see the point of it?
+%
+% \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_width}{\pdfpagewidth}
+% \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_height}{\pdfpageheight}
+ }{}%
+ \ltr@passvalue{\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_width}}#1:width;%
+ \ltr@passvalue{\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_height}}#1:height;%
+ \ltr@ifcasevalue#1:model;
+ \val grey
+ \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }%
+ \edef\ltr@to_grey{\ltr@usevalueor#1:to;1 }%
+ \ltr@newshade_do{0 1}{Gray}{%
+ \ltr@newshade_setcolor{grey}}%
+ \val gray
+ \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }%
+ \edef\ltr@to_grey {\ltr@usevalueor#1:to;0 }%
+ \ltr@newshade_do{0 1}{Gray}{%
+ \ltr@newshade_setcolor{grey}}%
+ \val rgb
+ \ltr@passvaluenobracesor{\ltr@newshade_getrgb{from}}#1:from;
+ {\def\ltr@from_red{0 }\def\ltr@from_green{0 }\def\ltr@from_black{0 }} %
+ \ltr@passvaluenobracesor{\ltr@newshade_getrgb{to}}#1:to;
+ {\def\ltr@to_red{1 }\def\ltr@to_green{1 }\def\ltr@to_blue{1 }} %
+ \ltr@newshade_do{0 1 0 1 0 1}{RGB}{%
+ \ltr@newshade_setcolor{red}%
+ exch dup \ltr@newshade_setcolor{green}%
+ exch \ltr@newshade_setcolor{blue}}%
+ \val cmyk
+ \ltr@passvaluenobracesor{\ltr@newshade_getcmyk{from}}#1:from;
+ {\def\ltr@from_cyan{0 }\def\ltr@from_magenta{0 }\def\ltr@from_yellow{ }\def\ltr@from_black{0 }} %
+ \ltr@passvaluenobraces{\ltr@newshade_getcmyk{to}}#1:to;
+ {\def\ltr@to_cyan{1 }\def\ltr@to_magenta{1 }\def\ltr@to_yellow{1 }\def\ltr@to_black{1 }} %
+ \ltr@newshade_do{0 1 0 1 0 1 0 1}{CMYK}{%
+ \ltr@newshade_setcolor{cyan}%
+ exch dup \ltr@newshade_setcolor{magenta}%
+ exch dup \ltr@newshade_setcolor{yellow}%
+ exch \ltr@newshade_setcolor{black}%
+ }%
+ \elseval
+ \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }%
+ \edef\ltr@to_grey{\ltr@usevalueor#1:to;1 }%
+ \ltr@newshade_do{0 1}{Gray}{%
+ \ltr@newshade_setcolor{grey}}%
+ \endval
+ \ltr@deleteattribute#1:name;%
+ \ltr@deleteattribute#1:width;%
+ \ltr@deleteattribute#1:height;%
+ \ltr@deleteattribute#1:fixed;%
+ \ltr@deleteattribute#1:model;%
+ \ltr@deleteattribute#1:from;%
+ \ltr@deleteattribute#1:to;%
+ \ltr@deleteattribute#1:angle;%
+ \ltr@deleteattribute#1:speed;%
+ }
+\def\ltr@newshade_getrgb#1#2 #3 #4 {%
+ \defcs{ltr@#1_red}{#2 }\defcs{ltr@#1_green}{#3 }\defcs{ltr@#1_blue}{#4 }%
+ \skipspace{}%
+ }
+\def\ltr@newshade_getcmyk#1#2 #3 #4 #5 {%
+ \defcs{ltr@#1_cyan}{#2 }\defcs{ltr@#1_magenta}{#3 }\defcs{ltr@#1_yellow}{#4 }\defcs{ltr@#1_black}{#5 }%
+ \skipspace{}%
+ }
+\def\ltr@newshade_setcolor#1{%
+ \usecs{ltr@from_#1} \usecs{ltr@to_#1} sub mul \usecs{ltr@from_#1} exch sub
+ }
+\restrictparameter ltr@inner_shade: name model from to angle speed width height fixed\par
+\ltr@boolean_attr{ltr@inner_shade:fixed}
+\ltr@restrictattribute ltr@inner_shade:model; grey gray rgb cmyk\par
+\def\newshade#1{%
+ \setparameter ltr@inner_shade:
+ name = {#1}
+ }
+
+%
+%
+%
+%
+% PAINTING
+%
+\def\ltr@paint_area#1#2#3#4#5{%
+ \ifcs{ltr@shade_user:#1}
+ {\ltr@point_convert{#2-\pdfhorigin}
+ \ltr@point_convert{\pdfvorigin-#3}
+ \ltr@point_convert{#4}
+ \ltr@point_convert{-#5} re W* n
+ \ltr@paint_shade{#1}}
+ {\ltr@paint_color{f}{#1}}
+ {#2}{#3}{#4}{#5}
+ }
+\def\ltr@paint_path#1#2#3#4#5{%
+ \ifcs{ltr@shade_user:\ltr@usevalueor#1:frame_color;{ltr@novalue}}
+ {\ltr@point_convert{#2-\dimexpr(\pdfhorigin+\ltr@usevalue #1:frame_width;)}
+ \ltr@point_convert{\dimexpr(\pdfvorigin+\ltr@usevalue #1:frame_width;)-#3}
+ \ltr@point_convert{#4+\dimexpr(\ltr@usevalue #1:frame_width;*2)}
+ \ltr@point_convert{-#5+\dimexpr(\ltr@usevalue #1:frame_width;*2)} re
+ \ltr@point_convert{#2-\pdfhorigin}
+ \ltr@point_convert{\pdfvorigin-#3}
+ \ltr@point_convert{#4}
+ \ltr@point_convert{-#5} re W* n
+ \ltr@passvalue\ltr@paint_shade #1:frame_color;
+ {\dimexpr(#2-\ltr@usevalue #1:frame_width;)\relax}
+ {\dimexpr(#3-\ltr@usevalue #1:frame_width;)\relax}
+ {#4+\dimexpr(\ltr@usevalue #1:frame_width;*2)}
+ {#5+\dimexpr(\ltr@usevalue #1:frame_width;*2)}}
+ {%
+ \ltr@point_convert{\ifdim\ltr@usevalue #1:frame_width;<0pt -\fi\ltr@usevalue #1:frame_width;} w
+ \ltr@ifcasevalue#1:frame_corner;
+ \val round 1
+ \val bevel 2
+ \elseval 0
+ \endval\spacecs j
+ \ltr@ifattribute#1:frame_dash;{[\ltr@usevalue#1:frame_dash;] 0 d }{}%
+ \ltr@passvalue{\ltr@paint_color{S}}#1:frame_color;
+ {\dimexpr(#2-\ltr@usevalue #1:frame_width;/2)}
+ {\dimexpr(#3-\ltr@usevalue #1:frame_width;/2)}
+ {\dimexpr(#4+\ltr@usevalue #1:frame_width;)}
+ {\dimexpr(#5+\ltr@usevalue #1:frame_width;)}}
+ }
+\def\ltr@paint_shade#1#2#3#4#5{%
+% Translation, and reversal of vertical dimension.
+ 1 0 0 -1
+ \passexpandedcs\ifstring{ltr@shade_user:#1}{reversed}
+ {\ifcs{ltr@shade_user:#1_fixed}
+ {\ltr@point_convert{\pdfpagewidth-\pdfhorigin}}
+ {\ltr@point_convert{\dimexpr(#4+#2)-\pdfhorigin}}}
+ {\ifcs{ltr@shade_user:#1_fixed}
+ {\ltr@point_convert{-\pdfhorigin}}
+ {\ltr@point_convert{#2-\pdfhorigin}}}
+ \ifcs{ltr@shade_user:#1_fixed}{\ltr@point_convert{\pdfvorigin}}{\ltr@point_convert{\pdfvorigin-#3}} cm
+% Scaling.
+ \passexpandedcs\iffstring{ltr@shade_user:#1}{reversed}{-}%
+ \ifcs{ltr@shade_user:#1_width}
+ {\ltr@point_convert{\usecs{ltr@shade_user:#1_width}}}
+ {\ltr@point_convert{#4}}%
+ 0 0
+ \ifcs{ltr@shade_user:#1_height}
+ {\ltr@point_convert{\usecs{ltr@shade_user:#1_height}}}
+ {\ltr@point_convert{#5}}%
+ 0 0 cm
+% Rotation.
+ \usecs{ltr@shade_user:#1_cos} \usecs{ltr@shade_user:#1_sin} -\usecs{ltr@shade_user:#1_sin}
+ \usecs{ltr@shade_user:#1_cos} 0 0 cm
+% Scaling of rotated material top accommodate the new length (diagonal, not side).
+ \usecs{ltr@shade_user:#1_scale} 0 0 1 0 0 cm
+ /ltr@shade_#1 sh
+ }
+\def\ltr@paint_color#1#2#3#4#5#6{%
+ \ltr@color_use{#2}%
+ \ltr@point_convert{#3-\pdfhorigin} \ltr@point_convert{\pdfvorigin-#4}
+ \ltr@point_convert{#5} \ltr@point_convert{-#6} re #1
+ }
+
+%
+%
+%
+%
+% SYMBOLS
+%
+\def\ltr@draw_dim#1{%
+ \ltr@nopt{#1pt}%
+ }
+\newfornoempty\ltr@draw_loop{1}#2,{%
+ \passtrim{#2}{\ltr@draw_addspace{#1}}%
+ }[\ltr@draw_add{}{}{}{#1}]
+\def\ltr@draw_addspace#1#2{%
+ \reverse\iffemptystring{#2}{\ltr@draw_decide{#1}#2 }% SPACE!!!
+ }
+\def\ltr@draw_decide#1#2 {%
+ \ifcs{ltr@draw_#2}
+ {\usecs{ltr@draw_#2}{#1}}
+ {\ltr@draw_line{#1}#2 }%
+ }
+\def\ltr@draw_line#1#2 #3 {%
+ \ifstring{#2}{+}
+ {\ltr@draw_relativeline#3 }
+ {\ltr@draw_add{}{#2}{#3}{l}%
+ \passarguments{S}}%
+ }
+\def\ltr@draw_relativeline#1 #2 {%
+ \ltr@draw_add{}{\ltr@nopt{#1pt+\ltr@draw_x pt}}{\ltr@nopt{#2pt+\ltr@draw_y pt}}{l}%
+ \passarguments{S}
+ }
+\def\ltr@draw_move#1#2 #3 {%
+ \ifstring{#2}{+}
+ {\ltr@draw_relativemove{#1}#3 }
+ {\ltr@draw_add{#1}{#2}{#3}{m}%
+ \passarguments{}}%
+ }
+\def\ltr@draw_relativemove#1#2 #3 {%
+ \ltr@draw_add{#1}{\ltr@nopt{#2pt+\ltr@draw_x pt}}{\ltr@nopt{#3pt+\ltr@draw_y pt}}{m}%
+ \passarguments{}
+ }
+\def\ltr@draw_stroke#1{%
+ \ltr@draw_add{S}{\ltr@draw_x}{\ltr@draw_y}{m}%
+ \passarguments{}
+ }
+\def\ltr@draw_close#1{%
+ \ltr@draw_add{h}{\ltr@draw_x}{\ltr@draw_y}{m}%
+ \passarguments{S}
+ }
+\def\ltr@draw_fill#1{%
+ \ltr@draw_add{f*}{\ltr@draw_x}{\ltr@draw_y}{m}%
+ \passarguments{}
+ }
+\def\ltr@draw_paint#1{%
+ \ltr@draw_add{h B*}{\ltr@draw_x}{\ltr@draw_y}{m}%
+ \passarguments{}
+ }
+\def\ltr@draw_pen#1#2 {%
+ \ltr@draw_add{}{}{}{#2 w }%
+ \passarguments{}
+ }
+\def\ltr@draw_color#1#2 {%
+ \ifcs{ltr@color_user:#2}
+ {\ltr@draw_add{}{}{}{\usecs{ltr@color_user:#2}}}
+ {\usecs{ltr@draw_color#2}}%
+ }
+\def\ltr@draw_colorrgb#1 #2 #3 {%
+ \ltr@draw_add{}{}{}{#1 #2 #3 rg #1 #2 #3 RG }%
+ }
+\def\ltr@draw_colorcmyk#1 #2 #3 #4 {%
+ \ltr@draw_add{}{}{}{#1 #2 #3 #4 k #1 #2 #3 #4 K }%
+ }
+\def\ltr@draw_colorgrey#1 {%
+ \ltr@draw_add{}{}{}{#1 g #1 G }%
+ }
+\let\ltr@draw_colorgray\ltr@draw_colorgrey
+\def\ltr@draw_add#1#2#3#4{%
+ \eaddright\ltr@draw_temp{%
+ \reverse\iffemptystring{#1}{#1 }%
+ \reverse\iffemptystring{#2}{\ltr@draw_dim{#2} }%
+ \reverse\iffemptystring{#3}{\ltr@draw_dim{#3} }%
+ #4 }%
+ \reverse\iffemptystring{#2}
+ {\edef\ltr@draw_x{#2}%
+ \ifdim\ltr@draw_x pt>\ltr@draw_xmax pt \edef\ltr@draw_xmax{\ltr@draw_x}\fi
+ \ifdim\ltr@draw_x pt<\ltr@draw_xmin pt \edef\ltr@draw_xmin{\ltr@draw_x}\fi}%
+ \reverse\iffemptystring{#3}
+ {\edef\ltr@draw_y{#3}%
+ \ifdim\ltr@draw_y pt>\ltr@draw_ymax pt \edef\ltr@draw_ymax{\ltr@draw_y}\fi
+ \ifdim\ltr@draw_y pt<\ltr@draw_ymin pt \edef\ltr@draw_ymin{\ltr@draw_y}\fi}%
+ }
+\def\ltr@draw_circle#1#2 #3 {%
+ \usecs{ltr@draw_circle#2}{\ltr@draw_x}{\ltr@draw_y}{#3}%
+ \passarguments{S}
+ }
+\def\ltr@draw_kappa{5522847}
+\def\ltr@draw_circleur#1#2#3{%
+ \ltr@draw_addcircle{#1pt}{#2pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt+#3pt}
+ {#1pt+#3pt}{#2pt+#3pt}{#3}{#3}%
+ }
+\def\ltr@draw_circledr#1#2#3{%
+ \ltr@draw_addcircle{#1pt}{#2pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt-#3pt}
+ {#1pt+#3pt}{#2pt-#3pt}{#3}{-#3}%
+ }
+\def\ltr@draw_circleru#1#2#3{%
+ \ltr@draw_addcircle{#1pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+ {#1pt+#3pt}{#2pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt+#3pt}{#2pt+#3pt}{#3}{#3}%
+ }
+\def\ltr@draw_circlerd#1#2#3{%
+ \ltr@draw_addcircle{#1pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+ {#1pt+#3pt}{#2pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt+#3pt}{#2pt-#3pt}{#3}{-#3}%
+ }
+\def\ltr@draw_circleul#1#2#3{%
+ \ltr@draw_addcircle{#1pt}{#2pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt+#3pt}
+ {#1pt-#3pt}{#2pt+#3pt}{-#3}{#3}%
+ }
+\def\ltr@draw_circledl#1#2#3{%
+ \ltr@draw_addcircle{#1pt}{#2pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt-#3pt}
+ {#1pt-#3pt}{#2pt-#3pt}{-#3}{-#3}%
+ }
+\def\ltr@draw_circlelu#1#2#3{%
+ \ltr@draw_addcircle{#1pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+ {#1pt-#3pt}{#2pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt-#3pt}{#2pt+#3pt}{-#3}{#3}%
+ }
+\def\ltr@draw_circleld#1#2#3{%
+ \ltr@draw_addcircle{#1pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+ {#1pt-#3pt}{#2pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+ {#1pt-#3pt}{#2pt-#3pt}{-#3}{-#3}%
+ }
+\def\ltr@draw_addcircle#1#2#3#4#5#6#7#8{%
+ \eaddright\ltr@draw_temp{%
+ \ltr@nopt{#1} \ltr@nopt{#2}
+ \ltr@nopt{#3} \ltr@nopt{#4}
+ \ltr@nopt{#5} \ltr@nopt{#6} c
+ }%
+ \edef\ltr@draw_x{\ltr@nopt{\ltr@draw_x pt+#7pt}}%
+ \edef\ltr@draw_y{\ltr@nopt{\ltr@draw_y pt+#8pt}}%
+ \reverse\iffemptycommand\ltr@draw_x
+ {\ifdim\ltr@draw_x pt>\ltr@draw_xmax pt \edef\ltr@draw_xmax{\ltr@draw_x}\fi
+ \ifdim\ltr@draw_x pt<\ltr@draw_xmin pt \edef\ltr@draw_xmin{\ltr@draw_x}\fi}%
+ \reverse\iffemptycommand\ltr@draw_y
+ {\ifdim\ltr@draw_y pt>\ltr@draw_ymax pt \edef\ltr@draw_ymax{\ltr@draw_y}\fi
+ \ifdim\ltr@draw_y pt<\ltr@draw_ymin pt \edef\ltr@draw_ymin{\ltr@draw_y}\fi}%
+ }
+
+\def\newsymbol#1{%
+ \ifnextnospace[{\ltr@newsymbol{#1}}{\ltr@newsymbol{#1}[1pt]}%
+ }
+\def\ltr@newsymbol#1[#2]#3{%
+ \def\ltr@draw_temp{}%
+ \def\ltr@draw_x{0}\def\ltr@draw_y{0}%
+ \def\ltr@draw_xmax{0}\def\ltr@draw_xmin{0}%
+ \def\ltr@draw_ymax{0}\def\ltr@draw_ymin{0}%
+ \def\ltr@draw_unit{1pt}%
+ \def\ltr@draw_leftpadding{1cm}\def\ltr@draw_rightpadding{1pt}%
+ \def\ltr@draw_toppadding{1pt}\def\ltr@draw_bottompadding{1pt}%
+ \ltr@option_launchloop{draw}{#2}%
+ \deftrim\ltr@temp{#3}%
+ \passexpanded{\ltr@draw_loop{}}{\ltr@temp,}%
+ \setbox\ltr@temp_box=\hbox{% Need the total width (not just positive) of the drawing.
+ % \ltr@draw_xmin is negative, hence the somewhat confusing signs.
+ \kern-\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax
+ \pdfliteral{q \ltr@point_convert{\ltr@draw_unit} 0 0 \ltr@point_convert{\ltr@draw_unit} 0 0 cm 1 w 0 0 m \ltr@draw_temp Q}}%
+ \wd\ltr@temp_box=\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmax pt-\ltr@draw_xmin pt)\relax+\ltr@draw_leftpadding+\ltr@draw_rightpadding)\relax
+ \ht\ltr@temp_box=\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_ymax pt)\relax+\ltr@draw_toppadding)\relax
+ \dp\ltr@temp_box=-\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_ymin pt)\relax-\ltr@draw_bottompadding)\relax
+ \pdfxform resources {/ExtGState << \ltr@page_extgstate >>} \ltr@temp_box
+ \setbox\ltr@temp_box=\hbox{%
+ \kern\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax
+ \pdfrefxform\the\pdflastxform}%
+ \xdefcs{ltr@\commandtoname#1@symbol_width}{\the\wd\ltr@temp_box}%
+ \xdefcs{ltr@\commandtoname#1@symbol_height}{\the\ht\ltr@temp_box}%
+ \xdefcs{ltr@\commandtoname#1@symbol_depth}{\the\dp\ltr@temp_box}%
+ \xdef#1{%
+ \hbox{%
+ \kern\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax
+ \pdfrefxform\the\pdflastxform}%
+ }%
+ }
+\def\ltr@draw_usepair#1#2{%
+ \ifstring{#1}{padding}
+ {\def\ltr@draw_leftpadding{#2}%
+ \def\ltr@draw_rightpadding{#2}%
+ \def\ltr@draw_toppadding{#2}%
+ \def\ltr@draw_bottompadding{#2}}
+ {\ifcs{ltr@draw_#1padding}
+ {\defcs{ltr@draw_#1padding}{#2}}
+ {\ltr@error{Unknown option `#1' in \string\newsymbol}}}%
+ }
+\def\ltr@draw_useatom#1{%
+ \def\ltr@draw_unit{#1}%
+ }
+\def\symbolwidth#1{%
+ \ltr@symbol_dimensions{#1}{width}%
+ }
+\def\symbolheight#1{%
+ \ltr@symbol_dimensions{#1}{height}%
+ }
+\def\symboldepth#1{%
+ \ltr@symbol_dimensions{#1}{depth}%
+ }
+\def\ltr@symbol_dimensions#1#2{%
+ \ifcs{ltr@\commandtoname#1@symbol_#2}
+ {\usecs{ltr@\commandtoname#1@symbol_#2}}
+ {\ltr@error{\string#1 is not a symbol}}%
+ }
+%
+%
+% IMAGES
+%
+\def\newimage#1{%
+ \ifnextnospace[{\ltr@newimage{#1}}{\ltr@newimage{#1}[,]}%
+ }
+\def\ltr@newimage#1[#2,#3]#4{%
+ \pdfximage\reverse\iffemptystring{#2}{width \dimexpr(#2)\relax }
+ \reverse\iffemptystring{#3}{height \dimexpr(#3)\relax }
+ {#4}%
+ \xdefcs{ltr@image_user:#1}{%
+ \hbox{\pdfrefximage\the\pdflastximage}%
+ }%
+ \setbox\ltr@temp_box=\usecs{ltr@image_user:#1}%
+ \xdefcs{ltr@image_height:#1}{\the\ht\ltr@temp_box}%
+ }
+\def\useimage#1{%
+ \ifcs{ltr@image_user:#1}
+ {\usecs{ltr@image_user:#1}}
+ {\ltr@error{Unkown image `#1'. Declare it with \string\useimage}}%
+ }
+\def\ltr@image_use#1#2#3{%
+ \iffcs{ltr@image_user:#1}
+ {\kern\dimexpr(#3-\pdfvorigin)\relax
+ \moveright\dimexpr(#2-\pdfhorigin)\relax
+ \usecs{ltr@image_user:#1}
+ \kern-\dimexpr(#3+\usecs{ltr@image_height:#1}-\pdfvorigin)\relax
+ \prevdepth-1000pt}%
+ }%
+
+%
+% TRANSITIONS
+% Attributes : type, motion, direction, dimension, duration, scale.
+%
+\def\ltr@transition_restrictions{name type motion direction dimension duration scale}
+\passexpandednobraces{\restrictparameter ltr@inner_transition:}\ltr@transition_restrictions\par
+\ltr@restrictattribute ltr@inner_transition:type;
+ split Split blinds Blinds box Box wipe Wipe
+ dissolve Dissolve glitter Glitter fly Fly
+ push Push cover Cover uncover Uncover fade Fade\par
+\ltr@restrictattribute ltr@inner_transition:motion; inward outward\par
+\ltr@restrictattribute ltr@inner_transition:direction; lr bt rl tb dx\par
+\ltr@restrictattribute ltr@inner_transition:dimension; horizontal vertical\par
+\defactiveparameter ltr@inner_transition{%
+ \immediate\pdfobj{
+ << /Type/Trans
+ /S/%
+ \ltr@ifcasevalue #1:type;
+ \val split Split
+ \val Split Split
+ \val blinds Blinds
+ \val Blinds Blinds
+ \val box Box
+ \val Box Box
+ \val wipe Wipe
+ \val Wipe Wipe
+ \val dissolve Dissolve
+ \val Dissolve Dissolve
+ \val glitter Glitter
+ \val Glitter Glitter
+ \val fly Fly
+ \val Fly Fly
+ \val push Push
+ \val Push Push
+ \val cover Cover
+ \val Cover Cover
+ \val uncover Uncover
+ \val Uncover Uncover
+ \val fade Fade
+ \val Fade Fade
+ \elseval R
+ \endval\spacecs
+ \ltr@ifcasevalue #1:motion;
+ \val inward /M/I
+ \val outward /M/O
+ \endval\spacecs
+ \ltr@ifcasevalue #1:direction;
+ \val lr /Di 0
+ \val bt /Di 90
+ \val rl /Di 180
+ \val tb /Di 270
+ \val dx /Di 315
+ \endval\spacecs
+ \ltr@ifcasevalue #1:dimension;
+ \val horizontal /Dm/H
+ \val vertical /Dm/V
+ \endval\spacecs
+ \ltr@ifattribute #1:duration;{/D \ltr@usevalue #1:duration;}{}
+ \ltr@ifattribute #1:scale;{/SS \ltr@usevalue #1:scale;}{}
+ >>}%
+ \xdefcs{ltr@inner_transition:\ltr@usevalue #1:name;}{\the\pdflastobj\spacecs}%
+ \ltr@deleteattribute#1:name;%
+ \ltr@deleteattribute#1:type;%
+ \ltr@deleteattribute#1:motion;%
+ \ltr@deleteattribute#1:direction;%
+ \ltr@deleteattribute#1:dimension;%
+ \ltr@deleteattribute#1:duration;%
+ \ltr@deleteattribute#1:scale;%
+ }
+\def\newtransition#1{%
+ \restrictallattributes transition #1\par
+ \setparameter ltr@inner_transition:
+ name = {#1}
+ }
+\newtransition{split} type = split\par
+\newtransition{blinds} type = blinds\par
+\newtransition{box} type = box\par
+\newtransition{wipe} type = wipe\par
+\newtransition{dissolve} type = dissolve\par
+\newtransition{glitter} type = glitter\par
+\newtransition{fly} type = fly\par
+\newtransition{push} type = push\par
+\newtransition{cover} type = cover\par
+\newtransition{uncover} type = uncover\par
+\newtransition{fade} type = fade\par
+\restrictallattributes transition none\par
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/lecturer/tex/ltr-job.tex b/macros/generic/lecturer/tex/ltr-job.tex
new file mode 100644
index 0000000000..4ac3d0d42b
--- /dev/null
+++ b/macros/generic/lecturer/tex/ltr-job.tex
@@ -0,0 +1,407 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+%
+% ATTRIBUTES
+%
+\restrictparameter job: background fullscreen normal title pdftitle author pdfauthor date mode menutext autofullscreen font\par
+\ltr@boolean_attr{job:fullscreen} \ltr@boolean_attr{job:autofullscreen}
+\ltr@restrictattribute job:normal; none outlines thumbs layers\par
+\ltr@restrictattribute job:mode; presentation handout\par
+\defactiveparameter job {%
+ \ltr@ifvalue #1:mode; = presentation
+ {\def\handoutonly{\gobbleoneand\ignorespaces}%
+ \let\presentationonly\unbrace
+ \let\presentationorhandout\firstoftwo}
+ {\let\handoutonly\unbrace
+ \def\presentationonly{\gobbleoneand\ignorespaces}%
+ \let\presentationorhandout\secondoftwo}
+ \ltr@storevalueor\Title #1:title;{\let\Title\emptycs}%
+ \ltr@storevalueor\Author #1:author;{\let\Author\emptycs}%
+ \ltr@storevalueor\Date #1:date;{\def\Date{\the\month/\the\day/\the\year}}%
+ \pdfinfo{%
+ \ltr@ifattribute #1:pdfauthor;%
+ {/Author (\ltr@usevalue #1:pdfauthor;)}
+ {\ltr@ifattribute #1:author;{/Author (\ltr@usevalue #1:author;)}{}}
+ \ltr@ifattribute #1:pdftitle;%
+ {/Title (\ltr@usevalue #1:pdftitle;)}
+ {\ltr@ifattribute #1:title;{/Title (\ltr@usevalue #1:title;)}{}}
+ /Creator (TeX, with a little help from Lecturer) % Yes, pure self-advertising
+ }%
+ \pdfcatalog{%
+ /PageMode\ltr@ifvalue #1:fullscreen; = true
+ {/FullScreen}
+ {\ltr@ifcasevalue#1:normal;
+ \val none /UseNone
+ \val outlines /UseOutlines
+ \val thumbs /UseThumbs
+ \val layers /UseOC
+ \elseval /UseNone
+ \endval}
+ /ViewerPreferences << /NonFullScreenPageMode
+ \ltr@ifcasevalue#1:normal;
+ \val none /UseNone
+ \val outlines /UseOutlines
+ \val thumbs /UseThumbs
+ \val layers /UseOC
+ \elseval /UseNone
+ \endval >>
+ }%
+ \ltr@ifattribute #1:background;
+ % It makes sense for the job parameter to appear at the beginning
+ % of the document, before color definition. If this were added,
+ % immediately, the color wouldn't be right. That's why
+ % this will be added at the job's end to the document's catalog.
+ {\def\ltr@job_background{/OpenAction << /S/JavaScript /JS(app.fs.backgroundColor=\ltr@jscolor_use{#1}{background}{0})>>}}{}
+ }
+\setparameter job:
+ mode = presentation
+ normal = outlines
+ title = \jobname
+ menutext = ***
+ fullscreen = false
+ autofullscreen = false
+\par
+
+%
+%
+%
+% OUTPUT ROUTINE
+% It is called by \endslide.
+%
+\def\ltr@output_penalty{-15000\relax}
+%
+% One day perhaps I'll make slides that can break
+% when the content is too large. Which means:
+% output before every step, check the accumulated
+% material, etc. Which is not too complicated. The
+% hardest part comes with \position (they must be
+% treated as insertions) and OCGs (they must be recorded
+% to the page only if the step isn't moved to the next
+% one, whereas for the moment OCGs are created with the
+% step itself). And there'll be trouble anyway with content
+% related to elements that occur on two different pages
+% because of a split (e.g. optional content controlled
+% by the first and last steps). Which, for the moment,
+% is too much work with little benefit (slides aren't
+% supposed to be too large!).
+%
+\output{%
+ \ifnum\outputpenalty=\ltr@output_penalty
+ \ltr@slide_output
+ \else
+ {\setbox\ltr@temp_box=\box255}%
+ \fi}
+\newbox\ltr@output_box
+\def\ltr@slide_output{%
+ % This chains the steps.
+ \reverse\iffemptycommand\ltr@page_steplist{\passexpanded{\ltr@output_loop{}{}{}}\ltr@page_steplist}
+ % For LaTeX, otherwise you get errors in \write statements.
+ \ifnum\formatnumber>3
+ \let\protect\noexpand
+ \fi
+ \setbox\ltr@output_box=\vbox{\unvbox255}
+ \ltr@ifattribute ltr@inner_slide:vsize;
+ {}
+ {\ltr@setattribute ltr@inner_slide:vsize; = {\dimexpr(\pdfpageheight-2\pdfvorigin)\relax} }% We badly need this value.
+ % If the page is too high, it is scaled if scale=true.
+ \ifdim\dimexpr\ht\ltr@output_box-\pageshrink>\ltr@usevalue ltr@inner_slide:vsize;\relax
+ \ltr@ifvalue ltr@inner_slide:scale; = true
+ {\setbox\ltr@output_box=\vbox{
+ \pdfsave
+ \pdfsetmatrix{\ltr@point_convert{\ltr@usevalue ltr@inner_slide:vsize;/\ltr@integer{\ht\ltr@output_box-\pageshrink}} 0 0
+ \ltr@point_convert{\ltr@usevalue ltr@inner_slide:vsize;/\ltr@integer{\ht\ltr@output_box-\pageshrink}}}
+ \unvcopy\ltr@output_box
+ \kern-\dimexpr\ht\ltr@output_box-\pageshrink\relax \kern-\dp\ltr@output_box
+ \pdfrestore
+ \kern\dimexpr\ht\ltr@output_box-\pageshrink\relax \kern\dp\ltr@output_box
+ }}{}
+ \fi
+ \shipout\vbox{% At last...
+ \pdfliteral direct {q}
+ % Paints the slide background.
+ \pdfliteral {%
+ q
+ \ltr@passvalueand\ltr@paint_area ltr@inner_slide:background;{{0pt}{0pt}\pdfpagewidth\pdfpageheight}{}%
+ Q}
+ % Puts the background image, if any.
+ \ltr@passvalueand{\ltr@image_use}ltr@inner_slide:image;{{0pt}{0pt}}{}
+ % Puts the areas.
+ \expandafter\ltr@output_arealoop\expandafter{\ltr@area_list}%
+ % Set the slide's foreground color and release that good ol' box.
+ \pdfcolorstack0 push {\ltr@passvalueor\ltr@color_use ltr@inner_slide:foreground;{\ltr@color_use{black}}}
+ \vbox to \ltr@usevalue ltr@inner_slide:vsize;{%
+ \ltr@ifcasevalue ltr@inner_slide:vpos;
+ \val top \unvbox\ltr@output_box \vfil
+ \val center \vfil\unvbox\ltr@output_box \vfil
+ \val bottom \vfil\unvbox\ltr@output_box
+ \elseval \unvbox\ltr@output_box \vfil
+ \endval
+ }%
+ \pdfcolorstack0 pop
+ \pdfliteral page {%
+ Q
+ q
+ 1 0 0 -1 0 \ltr@point_convert\pdfpageheight cm
+ \passexpanded\ltr@grid_loop\ltr@grids
+ Q}
+ }
+ \ifnum\formatnumber>2
+ \let\protect\relax
+ \fi
+ \advanceslideno
+ }
+\def\ltr@remove_ltr ltr@#1@inner_area{#1}
+\newfor\ltr@output_arealoop#1,{%
+ \passexpanded\ltr@area_check{\ltr@remove_ltr#1}%
+ \iffltr@area_do{%
+ \ifvoid\usecs{#1:box}
+ % Draw the area's background unless the box is empty
+ % and not visible.
+ \ltr@ifvalue #1:visible; = true {\ltr@area_draw{#1}}{}
+ \else
+ \ltr@ifvalue #1:visible; = step
+ {\pdfliteral {/OC/#1_\the\slideno:background BDC}
+ \ltr@area_draw{#1}
+ \pdfliteral {EMC}}
+ {\ltr@area_draw{#1}}
+ % Position the box.
+ \kern\dimexpr(\dimexpr(\ltr@area_vshift{#1}+\ltr@area_top{#1})\relax-\pdfvorigin)\relax
+ % Use its foreground color.
+ \pdfcolorstack0 push {\ltr@passvalueor\ltr@color_use #1:foreground;{\ltr@color_use{black}}}
+ \moveright\dimexpr(\dimexpr(\ltr@area_hshift{#1}+\ltr@area_left{#1})\relax-\pdfhorigin)\relax
+ \vbox to \ltr@area_vsize{#1}\relax{%
+ \ltr@ifcasevalue #1:vpos;
+ \val top \unvbox\usecs{#1:box} \vfil
+ \val center \ltr@temp_dimen=\dp\usecs{#1:box}\vfil\unvbox\usecs{#1:box} \kern-\ltr@temp_dimen\vfil
+ \val bottom \vfil\unvbox\usecs{#1:box}
+ \elseval \unvbox\usecs{#1:box} \vfil
+ \endval
+ }%
+ \pdfcolorstack0 pop
+ \kern-\dimexpr(%
+ \dimexpr(\ltr@area_vshift{#1}+\ltr@area_top{#1})\relax
+ +\ltr@area_vsize{#1}+\prevdepth-\pdfvorigin)\relax
+ \global\letcs{#1:done}\ltr@undefined
+ \fi}
+ \prevdepth-1000pt
+ }
+\def\ltr@area_draw#1{%
+ \pdfliteral {%
+ % Paint the area's background if it has a color.
+ \ltr@ifattribute #1:background;{
+ q
+ \ifdim\ltr@usevalueor #1:frame_width;{0pt}<0pt
+ \ltr@passvalue\ltr@paint_area #1:background;
+ {\dimexpr(\ltr@area_hshift{#1}-\ltr@usevalue #1:frame_width;)}
+ {\dimexpr(\ltr@area_vshift{#1}-\ltr@usevalue #1:frame_width;)}
+ {\dimexpr(\ltr@area_width{#1})+2\ltr@usevalue #1:frame_width;}
+ {\dimexpr(\ltr@area_height{#1}+2\ltr@usevalue #1:frame_width;)}%
+ \else
+ \ltr@passvalue\ltr@paint_area #1:background;
+ {\dimexpr(\ltr@area_hshift{#1})}
+ {\dimexpr(\ltr@area_vshift{#1})}
+ {\dimexpr(\ltr@area_width{#1})}
+ {\dimexpr(\ltr@area_height{#1})}%
+ \fi
+ Q}{}
+ % Paint the frame iff not 0.
+ \ifpdfabsdim\ltr@usevalueor #1:frame_width;{0pt}>0pt
+ \ltr@ifattribute #1:frame_color;
+ {q
+ \ltr@paint_path{#1}
+ {\dimexpr(\ltr@area_hshift{#1})}
+ {\dimexpr(\ltr@area_vshift{#1})}
+ {\dimexpr(\ltr@area_width{#1})}
+ {\dimexpr(\ltr@area_height{#1})}%
+ Q}{}
+ \fi}
+ % Uses the image if any.
+ \ltr@passvalueand{\ltr@image_use}#1:image;
+ {{\ltr@area_hshift{#1}}{\ltr@area_vshift{#1}}}{}
+ }%
+%
+%
+%
+% Draws the grid at the end of the shipout.
+%
+\newfor\ltr@grid_loop#1#2#3#4#5{%
+ \ltr@color_use{#4}
+ \ltr@point_convert{#5} w
+ \ltr@grid_vertical{#1}{#3}{#2}
+ \ltr@grid_horizontal{#2}{#3}{#1}
+ }
+\newwhile\ltr@grid_vertical3{#1+#2}{#2}{#3}{%
+ \ifdim\dimexpr(#1)>\pdfpagewidth
+ \afterfi{\breakwhile{}}
+ \else
+ \ltr@point_convert{#1} \ltr@point_convert{#3} m
+ \ltr@point_convert{#1} \ltr@point_convert\pdfpageheight l S
+ \fi}
+\newwhile\ltr@grid_horizontal3{#1+#2}{#2}{#3}{%
+ \ifdim\dimexpr#1>\pdfpageheight
+ \afterfi{\breakwhile{}}
+ \else
+ \ltr@point_convert{#3} \ltr@point_convert{#1} m
+ \ltr@point_convert\pdfpagewidth \ltr@point_convert{#1} l S
+ \fi}
+\def\ltr@grids{}
+\def\showgrid{%
+ \ifnextnospace[{\ltr@showgrid}{\ltr@showgrid[0pt,0pt]}%
+ }
+\def\ltr@showgrid[#1,#2]#3{%
+ \ifnext[{\ltr@showgrid_getarg{#1}{#2}{#3}}{\ltr@showgrid_getarg{#1}{#2}{#3}[grey .5]}%
+ }
+\def\ltr@showgrid_getarg#1#2#3[#4]{%
+ \ifnext[{\ltr@showgrid_do{#1}{#2}{#3}{#4}}{\ltr@showgrid_do{#1}{#2}{#3}{#4}[.2pt]}%
+ }
+\def\ltr@showgrid_do#1#2#3#4[#5]{%
+ \global\eaddright\ltr@grids{%
+ {\ifemptystring{#1}{0pt}{#1}}
+ {\ifemptystring{#2}{0pt}{#2}}
+ {#3}{#4}
+ {\ifemptystring{#5}{.2pt}{#5}}}%
+ }
+\def\hidegrids{\def\ltr@grids{}}
+%
+%
+%
+%
+% A loop to connect object.
+% #4 is the ordered list of objects on the page (those that
+% appear by themselves, although they can also be tied to
+% other ones).
+% #1 is the previously reserved action number,
+% #2 is the sequence to go back to the previous object,
+% #3 is the current object.
+%
+% Suppose (I'm talking to myself, I know), that
+% #4 extracts from "A,B,C,".
+% On first iteration, #1, #2 and #3 are empty.
+% We reserve an action number, and define the first
+% object on the page as this number. Then we pass
+% {<number>}{}{A} and the next iteration has B as #4.
+% Now, second iteration, we create the object with
+% <number> (and reserve another one before hand). #2 is empty,
+% meaning there's no previous object, thus /P(revious)A(ction)
+% for A is "go to the previous page".
+% #3 is not empty, it's A, and we build its /N(ext)A(ction),
+% i.e. what happens when we hit it with a move forward, as
+% its own appearance and the appearance and disappearance
+% of the objects that are tied to it via "on" and "off".
+% Now we pass {<new number>}{</PA of A>}{B} and #4 is C
+% (yes, we never use #4, we just pass it as #3).
+% Things are clearer now (!). We build the object
+% B with <new number>, create its /NA as before and
+% use #2 as /PA, since, A is just before B.
+%
+\newfornoempty\ltr@output_loop{3}#4,{%
+ \pdfobj reserveobjnum
+ \ltr@temp_count=\pdflastobj
+ \ifemptystring{#1}
+ {\edef\ltr@page_firstobject{\the\ltr@temp_count\spacecs 0 R}%
+ \expandafter\passarguments\expandafter{\the\ltr@temp_count}{}{#4}}%
+ {\ltr@output_addtopagePA{#3}%
+ \immediate\pdfobj useobjnum #1 {%
+ << \ifemptystring{#2}{/PA << /S/Named /N/PrevPage >> }{#2}
+ \ltr@output_NA{#3}%
+ /Next \the\ltr@temp_count\spacecs 0 R >>}
+ \expandafter\passarguments\expandafter{\the\ltr@temp_count}{/Prev #1 0 R \ltr@output_PA{#3}}{#4}}}
+ [\ltr@output_addtopagePA{#3}%
+ \immediate\pdfobj useobjnum #1 {%
+ << \ifemptystring{#2}{/PA << /S/Named /N/PrevPage >> }{#2}% If there is only one object on the page, #2 is empty.
+ \ltr@output_NA{#3}%
+ /Next <<
+ /Prev #1 0 R
+ \ltr@output_PA{#3}%
+ /NA << /S/Named /N/NextPage >> >>
+ >>}%
+ \addtopageobject{%
+ /PresSteps <<
+ /Prev <<
+ /Prev #1 0 R /NA << /S/Named /N/NextPage >>
+ \ltr@output_PA{#3}
+ >>
+ /PA << /S/SetOCGState /State [] /Next [ \ltr@page_PA ] >>
+ /Next \ltr@page_firstobject
+ /NA << /S/SetOCGState /State [/OFF \ltr@page_invisibleOCGs /ON \ltr@page_visibleOCGs] >>
+ >>}]
+\def\ltr@output_NA#1{%
+ /NA <<
+ /S/SetOCGState /State [/ON #1 0 R \ltr@OCGs_onoff{#1}{OFF}]
+ \iffcs{ltr@step_#1:transition}{/Next << /S/Trans /Trans \usecs{ltr@step_#1:transition} >> }%
+ >>
+ }%
+\def\ltr@output_PA#1{%
+ /PA << /S/SetOCGState /State [/OFF #1 0 R \ltr@OCGs_onoff{#1}{ON}] >>
+ }%
+\def\ltr@output_addtopagePA#1{%
+ \eaddright\ltr@page_PA{<< /S/SetOCGState /State [/ON #1 0 R \ltr@OCGs_onoff{#1}{OFF}] >> }%
+ }%
+\def\ltr@OCGs_onoff#1#2{%
+ \iffcs{ltr@step_#1:name}{%
+ \iffcs{ltr@step_\usecs{ltr@step_#1:name}:on}{\usecs{ltr@step_\usecs{ltr@step_#1:name}:on}}%
+ \iffcs{ltr@step_\usecs{ltr@step_#1:name}:off}{/#2 \usecs{ltr@step_\usecs{ltr@step_#1:name}:off}}}%
+ }
+\newfor\ltr@page_doPA#1{#1 }
+
+%
+% Now, things look like this (PresSteps is the root
+% object on the page):
+%
+% PresSteps: Prev = (Prev = C, PA = Hide C, NA = NextPage)
+% PA = Shows the page as it is when it has been read
+% Next = A
+% NA = Shows the page as in its original appearance
+% A: NA = Show A + A-transition
+% Next = B
+% PA = PrevPage
+% B: NA = Show B + B-transition
+% Next = C
+% PA = Hide A
+% Prev = A
+% C: NA = Show C + C-transition
+% Next = (Prev = B, PA = Hide C, NA = NextPage)
+% PA = Hide B
+% Prev = B
+%
+% PDF works as follows: when you're on a step
+% and you move forward, you execute the NA
+% of the current step and then move to the one
+% specified by Next (and similarly for a move
+% backward). So, suppose you're on B and move
+% forward, then you show B and go to C. And
+% if you move forward again, you show C and
+% go to the unnamed node between parentheses.
+% Which is like any other node. If you go backward,
+% you hide C and go to C, etc.
+% Now, PresSteps is special, it's a slippery place.
+% Note that you can't reach it by a step: A has no
+% Prev entry. You go to PresSteps only when you
+% arrive on a page, and if you arrive by moving
+% forward Next becomes the new node immediately
+% (no need to move forward to reach A, otherwise
+% you'd need two clicks to make it appear). On the
+% other hand, if you come by moving backward, then
+% Prev becomes the current node immediately, and
+% you can see what it does: if you move forward, it
+% goes to the next page, and if you move backward,
+% you hide C and make it the current node.
+% PresSteps also contains a PA and NA, which are
+% executed under the same circumstances; the NA
+% contains the list of steps of the page and their
+% original visibility; hence when one arrives on a
+% page, this visibility is restored. PA contains
+% the succession of actions made thoughout the page;
+% hence, when one arrives on it backward, this succession
+% of action is executed and one sees the completed page.
+% Thus, one avoids discrepancy between navigation and
+% step visibility.
+%
+% To say it otherwise, PresSteps is the gate to the
+% page, and you have to go through the gate to reach
+% the steps (they aren't linked together from one
+% page to the other.
+%
+% And I'm not really lecturing on PDF here. I'm just
+% trying to write things down while I understand them.
+\endinput
diff --git a/macros/generic/lecturer/tex/ltr-navigation.tex b/macros/generic/lecturer/tex/ltr-navigation.tex
new file mode 100644
index 0000000000..a482d0d5fd
--- /dev/null
+++ b/macros/generic/lecturer/tex/ltr-navigation.tex
@@ -0,0 +1,263 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+%
+\def\ltr@link_create#1#2#3{%
+ \hbox{%
+ \pdfannot{%
+ /Subtype/Link
+ /Border [0 0 0]
+ /H/\ifstring{#1}{none}{N}{\ifstring{#1}{flash}{I}{\ifstring{#1}{push}{P}{N}}}
+ \reverse\iffemptycommand\ltr@step_current{/OC \ltr@step_current 0 R}
+ /A #2}%
+ #3}%
+ }
+%
+\def\firstslide{%
+ \ifnext[{\ltr@firstslide}{\ltr@firstslide[]}%
+ }
+\def\ltr@firstslide[#1]#2{%
+ \ltr@link_create{#1}{<< /S/GoTo /D (ltr@linktopage_1) >>}{#2}%
+ }
+\def\lastslide{%
+ \ifnext[{\ltr@lastslide}{\ltr@lastslide[]}%
+ }
+\def\ltr@lastslide[#1]#2{%
+ \ltr@link_create{#1}{<< /S/Named /N/LastPage >>}{#2}%
+ }
+\def\prevslide{%
+ \ifnum\slideno=1
+ \expandafter\firstslide
+ \else
+ \afterfi{\ifnext[{\ltr@prevslide}{\ltr@prevslide[]}}
+ \fi
+ }
+\def\ltr@prevslide[#1]#2{%
+ \ltr@link_create{#1}{<< /S/GoTo /D (ltr@linktopage_\the\numexpr\slideno-1\relax) >>}{#2}%
+ }
+\def\nextslide{%
+ \ifnext[{\ltr@nextslide}{\ltr@nextslide[]}%
+ }
+\def\ltr@nextslide[#1]#2{%
+ \ltr@link_create{#1}{<< /S/GoTo /D (ltr@linktopage_\the\numexpr\slideno+1\relax) >>}{#2}%
+ }
+\def\nextstep{%
+ \ifnext[{\ltr@nextstep}{\ltr@nextstep[]}%
+ }
+\def\ltr@nextstep[#1]#2{%
+ \ltr@link_create{#1}{<< /S/Named /N/NextPage >>}{#2}%
+ }
+\def\prevstep{%
+ \ifnext[{\ltr@prevstep}{\ltr@prevstep[]}%
+ }
+\def\ltr@prevstep[#1]#2{%
+ \ltr@link_create{#1}{<< /S/Named /N/PrevPage >>}{#2}%
+ }
+%
+\def\anchor#1{%
+ \ifcs{ltr@anchor_user:#1}
+ {\ltr@error{Anchor `#1' already exists. Find another name}}
+ {\global\letcs{ltr@anchor_user:#1}\relax
+ \immediate\pdfobj\iffcs{ltr@anchor_objnum:#1}{useobjnum \usecs{ltr@anchor_objnum:#1}}{\ltr@anchor{\the\slideno}{\ltr@activesteps_count}}%
+ \reverse\iffcs{ltr@anchor_objnum:#1}{\xdefcs{ltr@anchor_objnum:#1}{\the\pdflastobj\spacecs}}}%
+ }
+\def\ltr@anchor#1#2{%
+ <<
+ /S/GoTo /D (ltr@linktopage_#1)
+ /Next << /S/JavaScript /JS (\ltr@ifvalue job:autofullscreen; = true {app.fs.isFullScreen = true; }{}%
+ if (app.fs.isFullScreen) {\repeatuntil{#2}{app.execMenuItem("NextPage");}}) >>
+ >>}%
+\def\goto{%
+ \ifnextnospace[{\ltr@goto}{\ltr@goto[none]}%
+ }
+\def\ltr@goto[#1]#2#3{%
+ \reverse\iffcs{ltr@anchor_objnum:#2}
+ {\pdfobj reserveobjnum%
+ \xdefcs{ltr@anchor_objnum:#2}{\the\pdflastobj}}%
+ \ltr@link_create{#1}{\usecs{ltr@anchor_objnum:#2} 0 R}{#3}%
+ }
+\def\gotoA{%
+ \ifnextnospace[{\ltr@gotoA}{\ltr@gotoA[none]}%
+ }
+\def\ltr@gotoA[#1]#2#3{%
+ \anchor{ltr@#2_back}%
+ \ltr@goto[#1]{#2}{#3}%
+ }
+\def\gotoB{%
+ \ifnextnospace[{\ltr@gotoB}{\ltr@gotoB[none]}%
+ }
+\def\ltr@gotoB[#1]#2#3{%
+ \anchor{#2}%
+ \ltr@goto[#1]{ltr@#2_back}{#3}%
+ }
+\def\showorhide{%
+ \ifnextnospace[{\ltr@showorhide}{\ltr@showorhide[none]}%
+ }
+\def\ltr@showorhide[#1]#2#3{%
+ \ifsuffix,{#2}
+ {\ltr@showorhide_loop{}{}{}{#2}}
+ {\ltr@showorhide_loop{}{}{}{#2,}}%
+ \ltr@link_create{#1}{\ltr@temp 0 R}{#3}%
+ }
+\newfor\ltr@showorhide_loop{3}#4=#5,{%
+ \ltr@showorhide_objloop{#5 }%
+ \passtrim{#4}\ifstring{on}
+ {\passarguments{#1#5 }{#2}{#3}}
+ {\passtrim{#4}\ifstring{off}
+ {\passarguments{#1}{#2#5 }{#3}}
+ {\passtrim{#4}\ifstring{toggle}
+ {\passarguments{#1}{#2}{#3#5 }}
+ {\ltr@error{Unkown attribute `#4' in \string\showorhide}}}}%
+ }[\immediate\pdfobj{%
+ << /S/SetOCGState
+ /State [/ON \ltr@showorhide_objects{#1} /OFF \ltr@showorhide_objects{#2} /Toggle \ltr@showorhide_objects{#3}] >>}%
+ \edef\ltr@temp{\the\pdflastobj\spacecs}]
+\newfornoempty\ltr@showorhide_objloop#1 {%
+ \reverse\iffcs{ltr@step_objnum:#1_\the\slideno}
+ {\pdfobj reserveobjnum
+ \xdefcs{ltr@step_objnum:#1_\the\slideno}{\the\pdflastobj\spacecs}}%
+ }
+\newfornoempty\ltr@showorhide_objects#1 {%
+ \usecs{ltr@step_objnum:#1_\the\slideno}0 R
+ }
+%
+\def\showbookmarks{%
+ \ifnextnospace[{\ltr@showbookmarks}{\ltr@showbookmarks[none]}%
+ }
+\def\ltr@showbookmarks[#1]#2{%
+ \reverse\iffcommand\ltr@bookmark_menuobject{%
+ \pdfobj reserveobjnum
+ \xdef\ltr@bookmark_menuobject{\the\pdflastobj\spacecs}}%
+ \ltr@link_create{#1}{\ltr@bookmark_menuobject 0 R}{#2}%
+ }
+%
+\def\ltr@bookmark_list{}
+\def\ltr@bookmark_stack{}
+\def\createbookmark{%
+ \ifnextnospace[{\ltr@createbookmark}{\ltr@createbookmark[]}%
+ }
+\newcount\ltr@bookmark_count
+\def\ltr@createbookmark[#1]#2{%
+ \ifnextnospace[
+ {\ltr@bookmark_create{#1}{#2}}
+ {\global\advance\ltr@bookmark_count1
+ \ltr@bookmark_create{#1}{#2}[ltr@bookmark_number:\the\ltr@bookmark_count]}%
+ }
+\def\ltr@bookmark_create#1#2[#3]#4{%
+ \reverse\iffcommand\ltr@bookmark_menuobject{%
+ \pdfobj reserveobjnum
+ \xdef\ltr@bookmark_menuobject{\the\pdflastobj\spacecs}%
+ }%
+ \passexpanded{\ltr@bookmark_add{#2}{{#4}{\the\slideno,\the\ltr@activesteps_count,{#3}}{#1}}}\ltr@bookmark_stack
+ }
+\bgroup
+\setcatcodes{\{\}=12,<=1,>=2}
+\gdef\ltr@leftbrace<{>
+\gdef\ltr@rightbrace<}>
+\egroup
+\def\ltr@bookmark_submenu#1{%
+ \reverse\iffemptystring{#1}{, oSubMenu: [#1]}%
+ }
+\newfor\ltr@bookmark_add{2}#3,{%
+ \straightenif{ifdim}{#1pt>#3pt }
+ {\global\eaddright\ltr@bookmark_list{#2\ltr@leftbrace}
+ \retrieverest{\ltr@bookmark_addtostack{#1,#3,}}}
+ {\global\eaddright\ltr@bookmark_list{\ltr@rightbrace,}}
+ }[\global\eaddright\ltr@bookmark_list{#2\ltr@leftbrace}
+ \ltr@bookmark_addtostack{#1,}{}]
+\def\ltr@bookmark_addtostack#1#2{\gdef\ltr@bookmark_stack{#1#2}}
+
+%
+%
+% JOB END
+% Creates the bookmarks and fills the catalog with the OCGs.
+% The default end job is maintained, except in TeX.
+%
+\newfor\ltr@bookmark_endlist#1,{%
+ \eaddright\ltr@bookmark_list{\ltr@rightbrace,}%
+ }
+\newfor\ltr@bookmark_process#1#2#3#4,{%
+ \ltr@bookmark_subcount{0}{#1}{#2}{#3}{#4}%
+ \reverse\iffemptystring{#4}{\ltr@bookmark_process{#4}}%
+ }
+\newfor\ltr@bookmark_subcount{4}#5,{%
+ \passarguments{#1+1}{#2}{#3}{#4}
+ }[\def\ltr@bookmark_sign{-}%
+ \def\ltr@bookmark_options{}%
+ \ltr@option_launchloop{bookmark}{#4}%
+ \ltr@bookmark_anchor#3,%
+ \pdfoutline attr {\ltr@bookmark_options} user {\ltr@bookmark_action#3,} count \ltr@bookmark_sign\the\numexpr(#1) {#2}%
+ ]
+\def\ltr@bookmark_useatom#1{%
+ \ifstring{#1}{italic}
+ {\eaddright\ltr@bookmark_options{/F 1 }}
+ {\ifstring{#1}{bold}
+ {\eaddright\ltr@bookmark_options{/F 2 }}
+ {\ifstring{#1}{bolditalic}
+ {\eaddright\ltr@bookmark_options{/F 3 }}
+ {\ifstring{#1}{open}
+ {\def\ltr@bookmark_sign{}}
+ {\ifstring{#1}{closed}
+ {\def\ltr@bookmark_sign{-}}
+ {\reverse\iffstring{#1}{nosubmenutext}
+ {\eaddright\ltr@bookmark_options{/C [#1]}}}}}}}%
+ }
+\def\ltr@bookmark_action#1,#2,#3,{\ltr@anchor{#1}{#2}}
+\def\ltr@bookmark_anchor#1,#2,#3,{%
+ \immediate\pdfobj\iffcs{ltr@anchor_objnum:#3}{useobjnum \usecs{ltr@anchor_objnum:#3}}{\ltr@anchor{#1}{#2}}%
+ \reverse\iffcs{ltr@anchor_objnum:#1}{\xdefcs{ltr@anchor_objnum:#1}{\the\pdflastobj\spacecs}}%
+ }
+\newstring{nosubmenutext}
+\newfor\ltr@bookmark_javaprocess{1}#2#3#4#5,{%
+ \reverse\iffemptystring{#1}{, }%
+ {cName: "#2"%
+ \ifemptystring{#5}
+ {, cReturn: "#3"}
+ {, oSubMenu: [\ifcontains{nosubmenutext}{#4}
+ {\ltr@bookmark_javaprocess{}{#5}}
+ {\ltr@bookmark_javaprocess{}{{\ltr@usevalueor job:menutext;{***}}{#3}{}{},#5}}]%
+ }}%
+ \passarguments{*}
+ }
+\def\ltr@job_end{%
+ \reverse\iffemptycommand\ltr@bookmark_list{%
+ \expandafter\ltr@bookmark_endlist\expandafter{\ltr@bookmark_stack}
+ \bgroup
+ \setcatcodes{_@=11}
+ \scantokens\expandafter{\expandafter\gdef\expandafter\ltr@bookmark_list\expandafter{\ltr@bookmark_list}}%
+ \egroup
+ \expandafter\ltr@bookmark_process\expandafter{\ltr@bookmark_list}
+ \edef\ltr@bookmark_list{\passexpanded{\ltr@bookmark_javaprocess{}}\ltr@bookmark_list}
+ \immediate\pdfobj useobjnum \ltr@bookmark_menuobject{%
+ << /S/JavaScript
+ /JS (var bookmark = app.popUpMenuEx(\ltr@bookmark_list);
+ if (bookmark != null)
+ {var bookmark = bookmark.split(",");
+ \ltr@ifvalue job:autofullscreen; = true {app.fs.isFullScreen = true; }{}%
+ this.gotoNamedDest("ltr@linktopage_" + bookmark[0])};)
+ % If the two JS actions are executed together, the timing is wrong and the second
+ % one has no effect. Hence its isolation in a /Next action.
+ /Next << /S/JavaScript
+ /JS (if (app.fs.isFullScreen) { if (bookmark != null) {for (var i=0; i<bookmark[1];i++) {app.execMenuItem("NextPage")}} } ) >>
+ >>
+ }}
+ \pdfcatalog{%
+ \iffcommand\ltr@job_background\ltr@job_background
+ /OCProperties <<
+ /OCGs [\ltr@catalog_OCGs]
+ /D << /Order [\ltr@order_OCGs] /BaseState/OFF /ON [\ltr@visible_OCGs] >>
+ >>}
+ \ltr@end_job
+ }
+\ifnum\formatnumber<3
+ \let\ltr@end_job\end
+ \let\bye\ltr@job_end % plain and eplain
+\else
+ \ifnum\formatnumber=3
+ \let\ltr@end_job\normalend
+ \let\normalend\ltr@job_end % ConTeXt
+ \else
+ \let\ltr@end_job\@@end
+ \AtEndDocument{\ltr@job_end}% LaTeX
+ \fi
+\fi
+
diff --git a/macros/generic/lecturer/tex/ltr-slides.tex b/macros/generic/lecturer/tex/ltr-slides.tex
new file mode 100644
index 0000000000..dd99458dbf
--- /dev/null
+++ b/macros/generic/lecturer/tex/ltr-slides.tex
@@ -0,0 +1,244 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+%
+\countdef\slideno=0
+\slideno=1
+\def\advanceslideno{\global\advance\slideno1 }
+\def\slidenumber{\the\slideno}
+%
+%
+%
+% ATTRIBUTES
+%
+\def\ltr@slide_restrictions{width height background foreground image transition bookmark everyslide anchor font scale
+ vsize vpos hpos top left right bottom parindent parskip hsize baselineskip topskip pdftitle bookmarklevel bookmarkstyle areas areas* }
+\def\ltr@slide_deleteattributes{%
+ \passexpanded{\ltr@attribute_deletion{ltr@inner_slide}}\ltr@slide_restrictions
+ }
+\passexpandednobraces{\restrictparameter slide ltr@inner_slide:}\ltr@slide_restrictions\par
+\ltr@restrictattribute slide:vpos; top center bottom\par
+\ltr@restrictattribute ltr@inner_slide:vpos; top center bottom\par
+\ltr@restrictattribute slide:hpos; ff rr fr rf\par
+\ltr@restrictattribute ltr@inner_slide:hpos; ff rr fr rf\par
+\ltr@boolean_attr{slide:bookmark}
+\ltr@boolean_attr{ltr@inner_slide:bookmark}
+\ltr@boolean_attr{slide:scale}
+\ltr@boolean_attr{ltr@inner_slide:scale}
+\def\ltr@slide_parameter#1{%
+ \ltr@todim_loop{#1}{width height vsize hsize top left bottom right parindent baselineskip topskip }%
+ \ltr@delete_empty{#1:font}%
+ \ltr@delete_empty{#1:hsize}\ltr@delete_empty{#1:left}\ltr@delete_empty{#1:right}%
+ \ltr@delete_empty{#1:vsize}\ltr@delete_empty{#1:top}\ltr@delete_empty{#1:bottom}%
+ \ltr@dimen_set{#1}{right}{left}{hsize}{\ltr@usevalueor #1:width;\pdfpagewidth}%
+ \ltr@dimen_set{#1}{bottom}{top}{vsize}{\ltr@usevalueor #1:height;\pdfpageheight}%
+ \ltr@deleteattribute #1:right;%
+ \ltr@deleteattribute #1:bottom;%
+ }
+\defactiveparameter slide {%
+ \ltr@slide_parameter{#1}%
+ }
+% #1 parameter (e.g. slide)
+% #2 ordering attribute (e.g. right (for slide))
+% #3 first obeying attribute (e.g. left)
+% #4 second obeying attribute (e.g. hsize)
+% #5 reference (e.g. (page)width)
+\def\ltr@dimen_set#1#2#3#4#5{%
+ \nometa\ltr@ifattribute #1:#2;
+ {\ltr@passvalue{\defcs{ltr@#1:inner_#2}}#1:#2;%
+ \nometa\ltr@ifattribute #1:#3;
+ {\ltr@setattribute #1:#4; = {\dimexpr(#5-\dimexpr(\usecs{ltr@#1:inner_#2}+\ltr@usevalue #1:#3;))\relax} }% SPACE
+ {\nometa\ltr@ifattribute #1:#4;
+ {\ltr@setattribute #1:#3; = {\dimexpr(#5-\dimexpr(\usecs{ltr@#1:inner_#2}+\ltr@usevalue #1:#4;))\relax} }% SPACE
+ {\ltr@passvalue{\ltr@setattribute #1:#3;=}#1:#2; % SPACE
+ \ltr@setattribute #1:#4; = {\dimexpr(#5-\dimexpr(\usecs{ltr@#1:inner_#2}+\ltr@usevalue #1:#3;))\relax} }}}% SPACE
+ {}%
+ }
+% Defaults
+\vsize=\maxdimen % So no unwanted output occurs
+\setparameter slide:
+ vpos = center
+ background = white
+ foreground = black
+ bookmark = true
+ bookmarklevel = 1
+ scale = false
+
+\setparameter ltr@inner_slide:
+ meta = slide
+
+\long\def\setslide#1#2\par{%
+ \ltr@space_loop{\ltr@setslide_do{#2}}{#1 }%
+ }
+\long\def\ltr@setslide_do#1#2{%
+ \ltr@ifattribute {ltr@#2@inner_slide}:meta;
+ {\setparameter{ltr@#2@inner_slide}:}
+ {\ltr@setslide_new{#2}}%
+ #1\par
+ }
+\def\ltr@setslide_new#1{%
+ \defcs{#1}{%
+ \ltr@setattribute ltr@inner_slide:meta;={ltr@#1@inner_slide}
+ \slide}%
+ \letcs{end#1}\endslide
+ \ifnum\formatnumber=3 % ConTeXt
+ \letcstocs{start#1}{#1}%
+ \letcs{stop#1}\endslide
+ \fi
+ \passexpandednobraces{\restrictparameter ltr@#1@inner_slide:}\ltr@slide_restrictions\par
+ \ltr@restrictattribute ltr@#1@inner_slide:vpos; top center bottom\par
+ \ltr@boolean_attr{ltr@#1@inner_slide:bookmark}%
+ \defactiveparameter ltr@#1@inner_slide {%
+ \ltr@slide_parameter{##1}%
+ }%
+ \setparameter{ltr@#1@inner_slide}:
+ meta = slide
+ }
+%
+%
+%
+%
+%
+%
+% The \slide command.
+% Attributes (beside those in the slide parameter):
+% pdftitle; and a value without a = sign is taken
+% as the slide title and recorded in \slidetitle;
+% it is also recorded as pdftitle if there is this
+% entry is missing.
+%
+\def\slidetitle{}\def\ltr@slide_pdftitle{}
+\def\ltr@ltr@inner_slide_usepair#1#2{% Used by option_launchloop.
+ \ltr@setattribute ltr@inner_slide:#1;={#2} %
+ }
+\def\ltr@ltr@inner_slide_useatom#1{% Idem. (Literate programming, he said?)
+ \def\slidetitle{#1}%
+ }
+\def\slide{%
+ \ifnextnospace[{\ltr@slide}{\ltr@slide[]}%
+ }
+\ifnum\formatnumber=3
+ \let\startslide\slide
+\fi
+\def\ltr@slide[#1]{%
+ \def\slidetitle{}
+ \ltr@option_launchloop{ltr@inner_slide}{#1}%
+ \ltr@slide_parameter{ltr@inner_slide}%
+ \edef\ltr@slide_pdftitle{%
+ \ltr@usevalueor ltr@inner_slide:pdftitle;{\slidetitle}%
+ }%
+ \pdfdest name {ltr@linktopage_\the\slideno} fit
+ \ltr@ifvalue ltr@inner_slide:bookmark;= true
+ {\ltr@ifattribute ltr@inner_slide:anchor;
+ {\createbookmark[\ltr@usevalue ltr@inner_slide:bookmarkstyle;]{\ltr@usevalue ltr@inner_slide:bookmarklevel;}[\ltr@usevalue ltr@inner_slide:anchor;]{\ltr@slide_dotitle}}
+ {\createbookmark[\ltr@usevalue ltr@inner_slide:bookmarkstyle;]{\ltr@usevalue ltr@inner_slide:bookmarklevel;}{\ltr@slide_dotitle}}}
+ {\ltr@passvalue\anchor ltr@inner_slide:anchor;}
+ %
+ \ltr@usevalueor ltr@inner_slide:font;{\ltr@usevalue job:font;}%
+ % Set the page dimensions.
+ \baselineskip=\ltr@usevalueor ltr@inner_slide:baselineskip;{12pt}\relax
+ \topskip=\ltr@usevalueor ltr@inner_slide:topskip;{12pt}\relax
+ \parskip=\ltr@usevalueor ltr@inner_slide:parskip;{0pt}\relax
+ \pdfpagewidth=\ltr@usevalueor ltr@inner_slide:width;{15cm}\relax
+ \pdfpageheight=\ltr@usevalueor ltr@inner_slide:height;{12cm}\relax
+ \pdfhorigin=\ltr@usevalueor ltr@inner_slide:left;{2cm}\relax
+ \pdfvorigin=\ltr@usevalueor ltr@inner_slide:top;{1cm}\relax
+ \hsize=\ltr@usevalueor ltr@inner_slide:hsize;{\dimexpr(\pdfpagewidth-2\pdfhorigin)\relax}\relax
+ \parindent=\ltr@usevalueor ltr@inner_slide:parindent;{0pt}\relax
+ \leftskip=0pt \rightskip=0pt plus 1fill\relax
+ \ltr@ifcasevalue ltr@inner_slide:hpos;
+ \val ff \rightskip=0pt
+ \val rr \leftskip=0pt plus 1fill\relax
+ \val rf \leftskip=0pt plus 1fill\rightskip=0pt
+ \endval
+ \ltr@usevalue ltr@inner_slide:everyslide;%
+ }
+\def\ltr@slide_dotitle{%
+ \ifemptycommand\ltr@slide_pdftitle{Page \the\slideno}{\ltr@slide_pdftitle}%
+ }
+\def\endslide{%
+ \par
+ \ltr@step_clear
+ \ifdim\pagetotal=0pt
+ \hbox{\vrule width 0pt}% If the slide is empty, there might be material in areas.
+ \fi % Close the previous step, if any.
+ \addtopageresources{%
+ /Properties << \ltr@page_properties >>
+ /Shading << \ltr@page_shading >>
+ /ExtGState << \ltr@page_extgstate >>
+ }%
+ \addtopageobject{%
+ \iffcs{ltr@inner_transition:\ltr@usevalueor ltr@inner_slide:transition;{ltr@no_value}}
+ {/Trans \usecs{ltr@inner_transition:\ltr@usevalueor ltr@inner_slide:transition;{ltr@no_value}} 0 R}
+ \ltr@pageattr_global}%
+ % End up as /Order [ [(Page 1) 1 0 R 2 0 R...] [(Page 2)...]...] in the catalog.
+ \global\eaddright\ltr@order_OCGs{[(\ltr@slide_dotitle) \ltr@page_OCGs] }%
+ % Here we go.
+ \penalty\ltr@output_penalty
+ \ltr@page_clear
+ }
+\ifnum\formatnumber=3 % ConTeXt
+ \let\stopslide\endslide
+\fi
+%
+% Resource management.
+% Should be usable by anybody. Returns the list of /<name> <number> 0 R pairs
+% in /Page ... /Resources << /Properties ... >>.
+% Using \pdfpageresources would ruin everything.
+%
+\def\ltr@catalog_OCGs{} \def\ltr@page_OCGs{} \def\ltr@order_OCGs{}
+\def\ltr@visible_OCGs{} \def\ltr@page_visibleOCGs{} \def\ltr@page_invisibleOCGs{}
+\edef\ltr@page_PA{}
+\def\ltr@page_properties{} \def\ltr@page_steplist{}
+\def\ltr@page_shading{} \def\ltr@page_extgstate{}
+\def\ltr@pageattr_global{}
+\def\addshading#1#2{%
+ \global\eaddright\ltr@page_shading{/#1 #2 0 R }%
+ }
+\def\addgstate#1#2{%
+ \global\eaddright\ltr@page_extgstate{/#1 #2 0 R }%
+ }
+\def\addproperties#1#2{%
+ \global\eaddright\ltr@page_properties{/#1 #2 0 R }%
+ }
+\def\addtopageresources#1{%
+ \begingroup
+ \edef\ltr@temp{\global\pdfpageresources{\the\pdfpageresources\spacecs #1 }}%
+ \ltr@temp
+ \endgroup
+ }
+\def\addOCG#1{%
+ \global\eaddright\ltr@catalog_OCGs{#1 0 R }%
+ \global\eaddright\ltr@page_OCGs{#1 0 R }%
+ \global\eaddright\ltr@page_invisibleOCGs{#1 0 R }%
+ }
+\def\addvisibleOCG#1{%
+ \global\eaddright\ltr@catalog_OCGs{#1 0 R }%
+ \global\eaddright\ltr@visible_OCGs{#1 0 R }%
+ \global\eaddright\ltr@page_OCGs{#1 0 R }%
+ \global\eaddright\ltr@page_visibleOCGs{#1 0 R }%
+ }
+\def\addtopageobject#1{%
+ \begingroup
+ \edef\ltr@temp{\global\pdfpageattr{#1\the\pdfpageattr}}%
+ \ltr@temp
+ \endgroup
+ }
+\def\addtoeachpageobject#1{%
+ \global\eaddright\ltr@pageattr_global{#1}%
+ }
+\def\ltr@page_clear{%
+ \gdef\ltr@page_OCGs{}%
+ \gdef\ltr@page_visbleOCGs{}%
+ \gdef\ltr@page_invisbleOCGs{}%
+ \gdef\ltr@page_PA{}%
+ \gdef\ltr@page_properties{}%
+ \gdef\ltr@page_steplist{}%
+ \global\pdfpageattr={}%
+ \global\def\ltr@step_current{}%
+ \global\ltr@steps_count=0
+ \global\ltr@activesteps_count=0
+ \ltr@setattribute ltr@inner_slide:meta; = slide
+ \ltr@slide_deleteattributes
+ }
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/lecturer/tex/ltr-steps.tex b/macros/generic/lecturer/tex/ltr-steps.tex
new file mode 100644
index 0000000000..eb2424aadc
--- /dev/null
+++ b/macros/generic/lecturer/tex/ltr-steps.tex
@@ -0,0 +1,202 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+%
+% ATTRIBUTES
+%
+\def\ltr@step_restrictions{%
+ vskip hskip everyvstep everyhstep left right
+ transition handout visible group color font on off pdftitle }
+\ltr@boolean_attr{step:handout}
+\ltr@boolean_attr{step:visible}
+\ltr@boolean_attr{step:group}
+\ltr@setattribute step:handout;=true
+\defactiveparameter step {%
+ \ltr@delete_empty{#1:font}%
+ }%
+
+\def\ltr@step_clear{%
+ \ifltr@step_open
+ \ltr@ifattribute ltr@inner_step:font;
+ {\ltr@usevalueor ltr@inner_slide:font;{\ltr@usevalue job:font;}}{}%
+ \ltr@ifvalue ltr@inner_step:group; = true
+ {\endgroup}{}%
+ \ltr@passvalueand{\reverse\iffemptystring}ltr@inner_step:color;
+ {{\pdfcolorstack0 pop}}{}%
+ \pdfliteral direct {EMC}%
+ \ltr@setattribute ltr@inner_step:meta; = step
+ \passexpanded{\ltr@attribute_deletion{ltr@inner_step}}\ltr@step_restrictions
+ \fi
+ }
+\passexpandednobraces{\restrictparameter step ltr@inner_step:}\ltr@step_restrictions\par
+\ltr@boolean_attr{ltr@inner_step:handout}
+\ltr@boolean_attr{ltr@inner_step:visible}
+\ltr@boolean_attr{ltr@inner_step:group}
+
+\long\def\setstep#1#2\par{%
+ \ltr@setstep_do{#2}{#1}%
+ }%
+\newfor\ltr@setstep_do{1}#2{%
+ \ltr@ifattribute {ltr@\commandtoname#2@inner_step}:meta;
+ {\setparameter{ltr@\commandtoname#2@inner_step}:}
+ {\ltr@setstep_new{#2}}%
+ #1\par
+ }
+\def\ltr@setstep_new#1{%
+ \def#1{%
+ \ltr@step_clear
+ \ltr@setattribute ltr@inner_step:meta;={ltr@\commandtoname#1@inner_step}
+ \ltr@step_do}%
+ \passexpandednobraces{\restrictparameter {ltr@\commandtoname#1@inner_step}:}\ltr@step_restrictions\par
+ \ltr@boolean_attr{{ltr@\commandtoname#1@inner_step}:visible}%
+ \ltr@boolean_attr{{ltr@\commandtoname#1@inner_step}:handout}%
+ \ltr@boolean_attr{{ltr@\commandtoname#1@inner_step}:group}%
+ \defactiveparameter{ltr@\commandtoname#1@inner_step}{%
+ \ltr@delete_empty{##1:font}%
+ }%
+ \setparameter{ltr@\commandtoname#1@inner_step}:
+ meta = step
+ }
+\setparameter ltr@inner_step:
+ meta = step
+
+%
+%
+%
+%
+%
+% The \step command.
+%
+\newif\ifltr@step_open
+\newcount\ltr@steps_count
+\newcount\ltr@activesteps_count
+\def\step{%
+ % Close the current step, if any.
+ \ltr@step_clear
+ \ltr@step_do
+ }
+% Steps created with \newstep goes there directly.
+\def\ltr@step_do{%
+ \global\ltr@step_opentrue
+ \ifnextnospace[{\ltr@step_create}{\ltr@step_create[]}%
+ }
+
+\newif\ifltr@step_standalone
+%
+% For the options.
+%
+\newif\ifltr@step_named
+\def\ltr@stepcheck_useatom#1{%
+ \ltr@step_namedtrue
+ \reverse\iffcs{ltr@step_objnum:#1_\the\slideno}
+ {\pdfobj reserveobjnum%
+ \xdefcs{ltr@step_objnum:#1_\the\slideno}{\the\pdflastobj\spacecs}}%
+ \global\lettocs\ltr@step_current{ltr@step_objnum:#1_\the\slideno}%
+ }
+\def\ltr@stepcheck_usepair#1#2{}
+%
+\def\ltr@step_useatom#1{%
+ \ifstring{#1}{here}
+ {\ltr@error{You can't name a step `here', it's a keyword}}
+ {\def\ltr@step_ref{#1}%
+ \iffemptycommand\ltr@step_pdftitle{\def\ltr@step_pdftitle{#1}}}%
+ }
+\def\ltr@step_usepair#1#2{%
+ \ifstring{#1}{on}
+ {\ltr@step_standalonefalse\ltr@step_onoff{on}{#2 }}
+ {\ifstring{#1}{off}
+ {\ltr@step_onoff{off}{#2 }}
+ {\ifstring{#1}{pdftitle}
+ {\def\ltr@step_pdftitle{#2}}
+ {\ltr@setattribute ltr@inner_step:#1;={#2} }}}%
+ }
+\def\ltr@step_usepair#1#2{%
+ \ifstring{#1}{pdftitle}
+ {\def\ltr@step_pdftitle{#2}}
+ {\ltr@setattribute ltr@inner_step:#1;={#2} }%
+ }
+\def\ltr@step_onoff#1#2{%
+ \reverse\iffemptystring{#2}
+ {\ltr@step_onoffloop{#1}{#2 }}%
+ }
+\newfornoempty\ltr@step_onoffloop{1}#2 {%
+ \ifstring{#2}{here}{\ltr@step_standalonetrue}{%
+ \ifcs{ltr@step_#2:#1}
+ {\global\eaddrightcs}
+ {\xdefcs}
+ {ltr@step_#2:#1}{\ltr@step_current 0 R }}%
+ % Add the object to ltr@step_OCG:on/off
+ }
+\def\ltr@step_current{}
+\def\ltr@step_create[#1]{%
+ \global\advance\ltr@steps_count1
+ \ltr@step_namedfalse
+ \ltr@option_launchloop{stepcheck}{#1}%
+ \unless\ifltr@step_named
+ \pdfobj reserveobjnum
+ \xdef\ltr@step_current{\the\pdflastobj\spacecs}%
+ \fi
+ \def\ltr@step_ref{}\def\ltr@step_pdftitle{}%
+ \ltr@step_standalonefalse
+ \ltr@option_launchloop{step}{#1}%
+ \ltr@delete_empty{ltr@inner_step:font}%
+ \ltr@passvalueor{\ltr@step_onoff{on}}ltr@inner_step:on;\ltr@step_standalonetrue
+ \ltr@passvalue{\ltr@step_onoff{off}}ltr@inner_step:off;%
+ \immediate\pdfobj useobjnum\ltr@step_current {%
+ << /Type/OCG /Name(%
+ \ifemptycommand\ltr@step_ref
+ {\ifemptycommand\ltr@step_pdftitle
+ {[step \the\ltr@steps_count]}
+ {\ltr@step_pdftitle}}%
+ {\ltr@step_pdftitle}) >>
+ }%
+ % ... and, if the object has a reference name, it might be referenced,
+ % so its object number now returns its name.
+ \reverse\iffemptycommand\ltr@step_ref{\global\letcs{ltr@step_\ltr@step_current:name}\ltr@step_ref}%
+ % According to the value to the attribute "handout" or "visible"
+ % this group has base state ON or OFF (see catalog).
+ \ltr@ifvalue job:mode; = handout
+ {\ltr@ifvalue ltr@inner_step:handout; = true
+ {\addvisibleOCG{\ltr@step_current}}
+ {\addOCG{\ltr@step_current}}}
+ {\ltr@ifvalue ltr@inner_step:visible; = true
+ {\addvisibleOCG{\ltr@step_current}\ltr@step_standalonefalse}
+ {\addOCG{\ltr@step_current}}}%
+ % Link the step to the OCG.
+ \addproperties{ltr@step_\the\ltr@steps_count:content}{\ltr@step_current}%
+ % If the step appears by itself, it is added it to the list to
+ % be chained in the output routine, and its transition is stored, if any.
+ \ifltr@step_standalone
+ \global\advance\ltr@activesteps_count1
+ \global\eaddright\ltr@page_steplist{\ltr@step_current,}%
+ \iffcs{ltr@inner_transition:\ltr@usevalueor ltr@inner_step:transition;{ltr@no_value}}
+ {\xdefcs{ltr@step_\ltr@step_current:transition}{%
+ \usecs{ltr@inner_transition:\ltr@usevalueor ltr@inner_step:transition;{ltr@no_value}} 0 R}}%
+ \fi
+ % The step is opened, and the every...'s released.
+ \pdfliteral direct {/OC/ltr@step_\the\ltr@steps_count:content BDC}%
+ \ltr@ifvalue ltr@inner_step:group; = true
+ {\begingroup}{}%
+ \ltr@passvalueand{\reverse\iffemptystring}ltr@inner_step:color;
+ {{\pdfcolorstack0 push {\ltr@passvalue\ltr@color_use ltr@inner_step:color;}}}{}%
+ \ltr@usevalue ltr@inner_step:font;%
+ \ifvmode
+ \ltr@settovalue\vskip ltr@inner_step:vskip;%
+ \leftskip=0pt \rightskip=0pt plus 1fill\relax
+ \ltr@ifcasevalue ltr@inner_slide:hpos;
+ \val ff \rightskip=0pt
+ \val rr \leftskip=0pt plus 1fill\relax
+ \val rf \leftskip=0pt plus 1fill\rightskip=0pt
+ \endval
+ \ltr@settovalue{\advance\leftskip}ltr@inner_step:left;%
+ \ltr@settovalue{\advance\rightskip}ltr@inner_step:right;%
+ \ltr@usevalue ltr@inner_step:everyvstep;%
+ \else
+ \ifhmode
+ \ltr@settovalue\hskip ltr@inner_step:hskip;%
+ \ltr@usevalue ltr@inner_step:everyhstep;%
+ \fi
+ \fi
+ \ignorespaces
+ }
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/lecturer/tex/t-lecturer.tex b/macros/generic/lecturer/tex/t-lecturer.tex
new file mode 100644
index 0000000000..a3d2953c8c
--- /dev/null
+++ b/macros/generic/lecturer/tex/t-lecturer.tex
@@ -0,0 +1,24 @@
+% This is t-lecturer.tex, a third-party file to load
+% the Lecturer package in ConTeXt. Useful information
+% can be found in lecturer-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: July 2010.
+%
+%D \module
+%D [ file=t-lecturer,
+%D version=2010.07.10,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Lecturer,
+%D author=Paul Isambert,
+%D date=\currentdate,
+%D copyright=Paul Isambert,
+%D email=zappathustra@free.fr,
+%D license=LaTeX Project Public License]
+
+\writestatus{loading}{ConTeXt User Module / lecturer}
+\chardef\formatnumber=3
+\input lecturer.tex
+\endinput
diff --git a/macros/generic/librarian/README b/macros/generic/librarian/README
new file mode 100644
index 0000000000..45841bd946
--- /dev/null
+++ b/macros/generic/librarian/README
@@ -0,0 +1,27 @@
+This is the README file for the librarian package.
+Author: Paul Isambert.
+E-mail: zappathustra AT free DOT fr
+Comments and suggestions are welcome.
+Date: April 2010.
+
+The package creates bibliographies without BibTeX,
+for all formats.
+Relevant information can be found in librarian-doc.pdf.
+
+The files in this distribution are:
+
+DOC:
+librarian-doc.pdf -> The documentation.
+librarian-doc.tex -> The source.
+librarian.bib -> A bib file for the examples in
+ the documentation.
+
+TEX:
+librarian.tex -> The crux of the biscuit
+ (directly \input in plain TeX).
+t-librarian.tex -> A third-party file for use with ConTeXt.
+librarian.sty -> A style file for use with LaTeX.
+authoryear.tex -> An example bibliographic style
+ (described in the documentation).
+
+Licensing of this package is covered by LPPL. \ No newline at end of file
diff --git a/macros/generic/librarian/doc/generic/librarian/README b/macros/generic/librarian/doc/generic/librarian/README
new file mode 120000
index 0000000000..443793f937
--- /dev/null
+++ b/macros/generic/librarian/doc/generic/librarian/README
@@ -0,0 +1 @@
+../../../README \ No newline at end of file
diff --git a/macros/generic/librarian/doc/generic/librarian/librarian-doc.pdf b/macros/generic/librarian/doc/generic/librarian/librarian-doc.pdf
new file mode 100644
index 0000000000..2e3d0e84c8
--- /dev/null
+++ b/macros/generic/librarian/doc/generic/librarian/librarian-doc.pdf
Binary files differ
diff --git a/macros/generic/librarian/doc/generic/librarian/librarian-doc.tex b/macros/generic/librarian/doc/generic/librarian/librarian-doc.tex
new file mode 100644
index 0000000000..1beb373e01
--- /dev/null
+++ b/macros/generic/librarian/doc/generic/librarian/librarian-doc.tex
@@ -0,0 +1,1271 @@
+% This is the source of the documentation for the librarian package.
+% Proper compilation requires: luatex (v.0.51 or later), a recent
+% version of luaotfload, not to mention the Adobe Garamond Pro font,
+% which however might be replaced by URW's Garamond. The required format
+% is plain TeX in its modified luatex version.
+% Three compilations are needed to get examples right.
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: April 2010.
+
+
+%%%%%%%%%%%%%%%%%
+%%%%% FONTS %%%%%
+%%%%%%%%%%%%%%%%%
+
+\input luaotfload.sty
+\pdfadjustspacing=2
+\directlua{%
+% From otfl-font-dum.lua
+ local byte = string.byte
+ fonts.expansions.setups['threepercent'] = {
+
+ stretch = 3, shrink = 3, step = .5, factor = 1,
+
+ [byte('A')] = 0.5, [byte('B')] = 0.7, [byte('C')] = 0.7, [byte('D')] = 0.5, [byte('E')] = 0.7,
+ [byte('F')] = 0.7, [byte('G')] = 0.5, [byte('H')] = 0.7, [byte('K')] = 0.7, [byte('M')] = 0.7,
+ [byte('N')] = 0.7, [byte('O')] = 0.5, [byte('P')] = 0.7, [byte('Q')] = 0.5, [byte('R')] = 0.7,
+ [byte('S')] = 0.7, [byte('U')] = 0.7, [byte('W')] = 0.7, [byte('Z')] = 0.7,
+ [byte('a')] = 0.7, [byte('b')] = 0.7, [byte('c')] = 0.7, [byte('d')] = 0.7, [byte('e')] = 0.7,
+ [byte('g')] = 0.7, [byte('h')] = 0.7, [byte('k')] = 0.7, [byte('m')] = 0.7, [byte('n')] = 0.7,
+ [byte('o')] = 0.7, [byte('p')] = 0.7, [byte('q')] = 0.7, [byte('s')] = 0.7, [byte('u')] = 0.7,
+ [byte('w')] = 0.7, [byte('z')] = 0.7, [byte('2')] = 0.7, [byte('3')] = 0.7, [byte('6')] = 0.7,
+ [byte('8')] = 0.7, [byte('9')] = 0.7,
+ }
+ }
+
+\def\currentstyle{rm}
+\def\currentweight{rg}
+\def\currentcase{lc}
+\def\makecurrentfont{%
+ \csname\currentfont @\currentstyle @\currentweight @\currentcase\endcsname
+ }
+
+\def\fontfeatures{+trep;+onum;+tlig;+liga;expansion=threepercent}
+\def\mainfont{%
+ \def\currentfont{Garamond}%
+ \csname\currentfont @\currentstyle @\currentweight @\currentcase\endcsname
+ }
+\expandafter\font\csname Garamond@rm@rg@lc\endcsname="AGaramondPro-Regular.otf:\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@rm@bf@lc\endcsname="AGaramondPro-Bold.otf:\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@rm@rg@sc\endcsname="AGaramondPro-Regular.otf:+smcp;\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@rm@bf@sc\endcsname="AGaramondPro-Bold.otf:+smcp;\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@it@rg@lc\endcsname="AGaramondPro-Italic.otf:\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@it@bf@lc\endcsname="AGaramondPro-BoldItalic.otf:\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@it@rg@sc\endcsname="AGaramondPro-Italic.otf:+smcp;\fontfeatures" at 10pt
+\expandafter\font\csname Garamond@it@bf@sc\endcsname="AGaramondPro-BoldItalic.otf:+smcp;\fontfeatures" at 10pt
+\mainfont
+
+\font\titlefont="AGaramondPro-Italic.otf:\fontfeatures" at 20pt
+
+\def\codefont{%
+ \def\currentfont{Inconsolata}%
+ \csname\currentfont @\currentstyle @\currentweight @\currentcase\endcsname
+ }
+\expandafter\font\csname Inconsolata@rm@rg@lc\endcsname="Inconsolata.Otf:\fontfeatures;-trep" at 8.5pt
+\expandafter\font\csname Inconsolata@rm@bf@lc\endcsname="Inconsolata.Otf:\fontfeatures;-trep" at 8.5pt
+%\expandafter\font\csname Inconsolata@rm@rg@sc\endcsname="Inconsolata.Otf:+smcp;\fontfeatures;-trep" at 8.5pt
+%\expandafter\font\csname Inconsolata@rm@bf@sc\endcsname="Inconsolata.Otf:+smcp;\fontfeatures;-trep" at 8.5pt
+\expandafter\font\csname Inconsolata@it@rg@lc\endcsname="Inconsolata.Otf:slant=.2;\fontfeatures;-trep" at 8.5pt
+\expandafter\font\csname Inconsolata@it@bf@lc\endcsname="Inconsolata.Otf:slant=.2;\fontfeatures;-trep" at 8.5pt
+%\expandafter\font\csname Inconsolata@it@rg@sc\endcsname="Inconsolata.Otf:slant=.2;+smcp;\fontfeatures;-trep" at 8.5pt
+%\expandafter\font\csname Inconsolata@it@bf@sc\endcsname="Inconsolata.Otf:slant=.2;+smcp;\fontfeatures;-trep" at 8.5pt
+
+\def\it{%
+ \def\currentstyle{it}%
+ \makecurrentfont
+ }
+\def\bf{%
+ \def\currentweight{bf}%
+ \makecurrentfont
+ }
+\def\sc{%
+ \def\currentcase{sc}%
+ \makecurrentfont
+ }
+\def\rm{%
+ \def\currentstyle{rm}%
+ \makecurrentfont
+ }
+\def\textit#1{{\it#1}}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% PAGE LAYOUT %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\baselineskip=12pt
+\topskip=\baselineskip
+\vsize=41\baselineskip
+\hsize=21pc
+\parfillskip=.5\hsize plus 1fil minus .4\hsize
+\pdfpagewidth=3\hsize
+\pdfpageheight=\pdfpagewidth
+\pdfhorigin=\dimexpr((\pdfpagewidth-2\hsize-1em)/2)
+\pdfvorigin=\pdfhorigin
+\parskip0pt \parindent0pt
+\frenchspacing
+
+\newbox\leftside
+\newif\ifleftside \leftsidetrue
+\output{%
+ \ifleftside
+ \global\setbox\leftside=\box255
+ \global\leftsidefalse
+ \else
+ \global\leftsidetrue
+ \shipout\hbox{%
+ \box\leftside\kern1em\box255
+ }%
+ \advancepageno
+ \fi
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%
+%%%%% SECTIONS %%%%%
+%%%%%%%%%%%%%%%%%%%%
+
+\def\title#1{%
+ \hbox to \hsize{%
+ \vbox to 2\baselineskip{%
+ \vfill
+ \hbox{\titlefont\inred{#1}}%
+ \vfill
+ }%
+ \hfil
+ \vbox{%
+ \setbox0=\hbox{\texttt{zappathustra@free.fr}}%
+ \hbox to\wd0{\hfil\textit{Paul Isambert}}%
+ \box0}%
+ }%
+ }
+\newcount\sectioncount
+\def\onelineskip{\vskip\baselineskip}
+\def\makebookmarks{%
+ \def\lib{librarian}%
+ \def\TeX{TeX}}%
+\def\section#1{%
+ \onelineskip
+ \advance\sectioncount1
+ \subsectioncount=0
+ \expandafter\gdef\csname\the\sectioncount sub\endcsname{0}%
+ \xdef\makebookmarks{%
+ \unexpanded\expandafter{\makebookmarks
+ \pdfoutline goto name}{section\the\sectioncount}%
+ count -\unexpanded\expandafter{\csname\the\sectioncount sub\endcsname{#1}}%
+ }%
+ \pdfdest name{section\the\sectioncount} xyz\penalty10000
+ \noindent
+ {%
+ \parfillskip0pt plus 1fil
+ \hfil\inred{\sc#1}\par}\penalty10000
+ \everypar\expandafter{%
+ \expandafter\parindent\the\parindent
+ \everypar={}}%
+ \parindent=0pt
+ }
+\newcount\subsectioncount
+\newif\iflefttitle
+\def\subsection#1{%
+ \advance\subsectioncount1
+ \expandafter\xdef\csname\the\sectioncount sub\endcsname{%
+ \the\numexpr(1+\csname\the\sectioncount sub\endcsname)}%
+ \xdef\makebookmarks{%
+ \unexpanded\expandafter{\makebookmarks
+ \pdfoutline goto name}{section\the\sectioncount.\the\subsectioncount}%
+ \unexpanded{{#1}}%
+ }%
+ \onelineskip
+ \pdfdest name{section\the\sectioncount.\the\subsectioncount} xyz\penalty10000
+ \noindent
+ {%
+ \penalty0
+ \ifdim\pagetotal<\dimexpr(\pagegoal-\baselineskip)\relax
+ \ifleftside \lefttitletrue
+ \else \lefttitlefalse \fi
+ \else
+ \ifleftside \lefttitlefalse
+ \else \lefttitletrue \fi
+ \fi
+ \iflefttitle
+ \parfillskip0pt plus 1fil
+ \inred{\hbox to0pt{\hss\char"E09D\kern1em}\textit{#1}}
+ \else
+ \parfillskip0pt
+ \inred{\textit{#1}\hfill\hbox to0pt{\kern1em \char"E09D\hss}}
+ \fi
+ \par\penalty10000
+ }%
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%
+%%%%% VERBATIM %%%%%
+%%%%%%%%%%%%%%%%%%%%
+
+\def\do#1{\catcode`#1=12}
+\def\verbatim{%
+ \bgroup
+ \parfillskip0pt plus 1fill
+ \onelineskip
+ \obeylines \dospecials
+ \def\par{\leavevmode\endgraf}%
+ \parindent=0pt
+ \codefont \getcode
+ }%
+\bgroup
+\catcode`\|=0
+\catcode`\\=12
+|long|gdef|getcode#1\endverbatim{#1|egroup|onelineskip}%
+|egroup
+\newbox\cmdbox
+\def\command#1{%
+ \bgroup
+ \codefont
+ \string#1%
+ \egroup
+ }
+\def\cmd#1{%
+ \inred{\command{#1}}%
+ }
+\def\tcmd#1{%
+ \command{#1}%
+ }
+\def\cmddef{%
+ \onelineskip\subcmddef
+ }
+\def\subcmddef#1{%
+ \noindent{\bf\cmd{#1}\parfillskip0pt plus 1fil \par}%
+ \penalty10000\noindent\ignorespaces
+ }
+\def\arg#1{%
+ \bgroup
+ \codefont
+ \textit{\lower.08em\hbox{\char"003C}#1\lower.08em\hbox{\char"003E}}%
+ \egroup
+ }
+\def\marg#1{%
+ \char"007B\arg{#1}\char"007D
+ }
+\def\targ#1{%
+ \texttt{\char"007B #1\char"007D}%
+ }
+\def\field#1{\texttt{\inred{#1}}}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% SOME MACROS %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\texttt#1{{\codefont#1}}
+\def\inred{\incolor{.7 0 .1}}
+\long\def\incolor#1#2{%
+ \pdfliteral{#1 rg}%
+ #2%
+ \pdfliteral{0 0 0 rg}%
+ }
+\def\lib{\textit{librarian}}
+\def\LaTeX{La\TeX} \def\ConTeXt{Con\TeX t}
+\long\def\citation#1\endcitation{%
+ \onelineskip
+ \bgroup
+ \advance\leftskip2em \rightskip\leftskip
+ \incolor{.1 0 .5}{#1}\par
+ \egroup
+ \onelineskip
+}
+
+
+\pdfinfo{%
+ /Title (librarian-doc.pdf)
+ /Author (Paul Isambert)
+ }
+\pdfcatalog{%
+ /PageMode /UseOutlines
+ }
+
+\input librarian
+\title{Librarian}
+
+\section{Introduction}
+
+\textit{Librarian} is a set of macros that handles bibliographic
+references without Bib\TeX. It reads bibliographic files, extracts
+information about entries, and sorts lists of entries according to
+that informa\-tion and the user's specifications. \TeX\ code can then
+be written to typeset citations and bibliographies or more generally
+to write the equivalent of \texttt{bst} files, and absolutely
+no knowledge of the Bib\TeX\ language is needed, nor is Bib\TeX\ itself.
+
+The package is low-level in the sense that it doesn't do much more
+than what's said above and offers little syntactic sugar to typeset
+bibliographies. It is meant to make as few meaningful decisions as
+possible, where `meaningful decisions' means operations that influence
+the output or what the user can do. The way \lib\ extracts information
+is immaterial (barring efficiency, of course) to the typesetting of
+a bibliography, which depends strictly on the user's knowledge in
+\TeX\ programming. On the contrary, predefined styles, for instance,
+would be easier indeed but also more limited.
+
+Besides, \lib\ is format-independent, relying on plain \TeX's usual
+allocation macros only (which are similar in other formats, as far
+as I can tell). Thus, a well-written bibliographic style should
+work equally well in all formats; by `well written' I mean that it does
+not use any format-specific commands, and at worst defines aliases
+to those commands at the beginning of the file.
+
+The first part of this document is a reference manual where \lib\
+is explained thoroughly. The second part spells out a pair of
+examples of bibliographic styles; the second example gives details
+on the important parts of the file \texttt{authoryear.tex}, which
+is distributed with the package and can be used as is.
+
+
+
+
+
+\section{Reference manual}
+
+\subsection{How to load \lib}
+
+In plain, the package is loaded in the good old way:
+
+\verbatim
+\input librarian
+\endverbatim
+
+\noindent In La\TeX\ you must use the associated style file:
+
+\verbatim
+\usepackage{librarian}
+\endverbatim
+
+\noindent And in Con\TeX t you must load \lib\ with the
+third-party file:
+
+\verbatim
+\usemodule[librarian]
+\endverbatim
+
+\subsection{Commands}
+
+\cmddef{\Cite\marg{entry key}\marg{list}\marg{code1}\marg{code2}}
+This adds \arg{entry key} to \arg{list} (if the latter doesn't exist,
+it is created on the fly), unless it has already been added previously. If \arg{entry key}
+has already been read in the bibliography (most likely in a previous
+compilation), \cmd\EntryKey\ is set to \arg{entry key} and \arg{code1} is
+executed. Otherwise, \lib\ will read the bibliographic files to retrieve information
+about \arg{entrykey}, and for the moment \arg{code2} is executed (without
+redefining \tcmd\EntryKey). With complex bibliographic styles, this command is
+better embedded in macros.
+
+\cmddef{\BibFile\marg{list of files}}
+The \arg{list of files} is a comma-sepa\-rated list of bibliographic
+files in which \lib\ will dig information about the requested entries.
+The \texttt{.bib} extension is implicit, but you can give another
+one, as in \tcmd{\BibFiles\targ{mybib,myotherbib.tex}}. The information
+is passed to the next compilation thanks to an external file called
+\texttt{\arg{jobname}.lbr} (the culprit to delete if things seem wrong to you).
+If there remains no requested entry then the
+files aren't read. \tcmd\BibFile\ can occur several times in a document,
+but on each call, only those entries that have been \tcmd\Cite'd before
+will be searched for in the bibliographic files, because calls
+to \tcmd\Cite\ aren't passed from one compilation to the next. Most
+complex bibliographic styles generally require three compilations to
+get everything right.
+
+%%%% Pour la page suivante:
+\advance\vsize-\baselineskip
+%%%% Clumsy but I had no time to implement
+%%%% my own widow-killer here...
+
+\cmddef{\SortingOrder\marg{list of fields}\marg{name parts}}
+This sets the order in which lists will be sorted. The fields in
+\arg{list of fields} are the ones you find in Bib\TeX\ entries,
+plus the ones \lib\ adds to entries (like \texttt{name}), and they should
+be separated by commas. Any field can be prefixed with `\texttt{-}',
+which indicates that when it comes to this field entries will be
+sorted in reverse order. The sorting works as follows: when comparing
+two entries, \lib\ compares their values for the first field; if they
+are the same, it tries the second field, and so on. If \arg{list of fields}
+is exhausted, the entries are sorted according to the order of citation
+in the document relative to the list that's being scanned (i.e. the value
+of \tcmd\EntryNumber). The \arg{name parts}
+are concatenated letters, with `\texttt{f}' denoting first name, `\texttt{l}'
+denoting last name, `\texttt{v}' referring to the von part and `\texttt{j}'
+referring to the junior part; it sets how names are compared, and although
+there seems to be only two meaningful orders (\texttt{vlfj} and \texttt{lfvj}),
+differing in how the von part is taken into account, you can do whatever you
+want. Thus, \tcmd{\SortingOrder\targ{name,year,title}\targ{vlfj}} sorts entries in
+the `author year' style, with titles differentiating entries by the same
+author(s) written the same year, and with the von part taking precedence in
+the last name. Instead, \tcmd{\SortingOrder\targ{name,-year}\targ{lfvj}}
+will produce a bibliography sorted by names, with most recent references first,
+and similar references sorted according to their order in the document, while
+the von part doesn't matter in last names (and thus Ludwig van Beethoven is
+sorted before Franz Schubert). In any case, \arg{name parts} have nothing
+to do with how names are typeset in the bibliography. (In these examples,
+\texttt{name} is used instead of \texttt{author} or \texttt{editor} on purpose.
+See below about the \texttt{name} field.) By default, \lib\ doesn't sort entries.
+
+\cmddef{\SortList\marg{list}}
+This sorts \arg{list} according to the latest value of \tcmd\SortingOrder.
+Thus different lists can be sorted with different orders. If \tcmd\SortList\
+is called before \tcmd\BibFile, then new entries will be sorted on the
+next compilation only. From one compilation to the next, \lib\ retains
+the previous sorted entries and sorts only new entries, and entries that
+are equal according to \tcmd\SortingOrder\ (because their relative order
+may have changed). This saves time (especially in Lua\TeX\ where the many
+calls to \tcmd\directlua\ are quite time-consuming). However, if the value
+of \tcmd\SortingOrder\ when \tcmd\SortList\ is called has changed from the
+previous compilation, all entries are sorted again.
+
+\cmddef{\ReadList\marg{list}}
+This loops over entries in \arg{list}, and for each it stores its key
+in \cmd\EntryKey\ and calls \cmd\MakeReference, which by default does nothing,
+and should be redefined to typeset the entry. For each entry you can use
+the \cmd\ifequalentry\ conditional, which is true if the current entry
+is part of a set of entries that are equal with regard to \tcmd\SortingOrder\
+and are thus distinguished by citation order only, and false otherwise.
+If the list is unsorted (i.e. \tcmd\SortingOrder\ is empty), then \tcmd\ifequalentry\
+is always false, even though all entries are equal.
+
+
+
+\cmddef{\SortDef\marg{command}\marg{definition}}
+This defines \arg{command} as \arg{defi\-nition} at sorting time.
+Indeed, macros shouldn't hinder sorting. However, \tcmd\TeX\ won't
+be read as `TeX' and \textit{\TeX book} won't be sorted after
+\textit{Tao Te Ching} but rather after \textit{Typographic Investigations},
+because macros separate letters. So
+\tcmd{\SortDef\tcmd\TeX\targ{tex}} is the proper way to get good sorting
+(everything is sorted in lowercase, so no need to use `\texttt{TeX}').
+\tcmd\SortDef\ can't define with parameter text, but a macro can
+be defined to another one taking arguments, although it is generally
+unnecessary: all braces are removed at sorting time. It is probably
+very important to redefine accents (\lib\ doesn't), e.g. \tcmd{\SortDef\string\'\targ{}}
+is vital if you want to see B\char"00E9 zier between Bernoulli and Boole.
+
+\cmddef{\WriteInfo\marg{arg}}
+\subcmddef{\WriteImmediateInfo\marg{arg}}
+Since \lib\ reads and rewrites an external file on each compilation,
+you can use it too. This writes \arg{arg} to that file, so that it is
+made available for the next compilation; \arg{arg} is expanded as in
+any \tcmd\write\ statement. \tcmd\WriteInfo\ writes at output time,
+whereas \tcmd\WriteImmediateInfo\ writes immediately.
+
+\cmddef\Preamble
+This holds everything that has been encountered in \texttt{@preamble}
+entries when reading bibliographies. It isn't passed from one compilation
+to the next.
+
+%%%% Pour la page suivante:
+\advance\vsize\baselineskip
+\cmddef{\CreateField\marg{field}}
+If a field is unknown to \lib\ (there is no restriction in bibliographic entries),
+\lib\ complains when asked to retrieve it with the commands below. This command
+just enables it to work with unknown fields. By default, \lib\ knows the common
+Bib\TeX\ fields and its own, of course.
+
+\cmddef{\AbbreviateFirstname}
+This turns first names into initials, e.g. \textit{John} into \textit{J.} and
+\textit{Jean-Luc} into \textit{J.-L.} In order to get \textit{Ch.} from
+\textit{Charles}, the name in the bibliographic file should be
+`\texttt{\char`\{Ch\char`\}arles}', which is already the case for Bib\TeX.
+Note that \lib\ sorts full names and thus \textit{J(ohn) Doe} and \textit{J(ack) Doe}
+are different in this respect, even though they'll be indistinguishable in your
+bibliography.
+
+
+
+
+
+
+\onelineskip
+The following macros all come in pairs made of \tcmd\Command\ and \tcmd\CommandFor,
+where \tcmd\Command\ is \tcmd\CommandFor\ with \arg{entry key} set to \tcmd\EntryKey.
+All along, I refer to bibliographic entries, naturally, and \textit{field\/} and \textit{value\/}
+are to be understood in that context (see the next two sections for details).
+
+\cmddef{\RetrieveField\marg{field}}
+\subcmddef{\RetrieveFieldFor\marg{field}\marg{entry key}}
+This produces the value of \arg{field} for \arg{entry key}. The command
+uses \tcmd\lowercase, so you should use it with care, and basically avoid it
+unless for typesetting fields. The following command should be preferred
+if anything must be manipulated.
+
+\cmddef{\RetrieveFieldIn\marg{field}\marg{command}}
+\subcmddef{\RetrieveFieldInFor\marg{field}\marg{entry key}\marg{command}}
+This one defines \arg{command} as the value of \arg{field} for \arg{entry key}.
+If \arg{field} doesn't exist in \arg{entry key}, or else if \arg{entry key}
+doesn't exist, then \arg{command} is defined as an empty command and
+is equivalent to \tcmd\empty\ if the latter is defined as
+\tcmd\def\tcmd\empty\texttt{\char`\{\char`\}}. Quite convenient for testing.
+
+\cmddef{\EntryNumber\marg{list}}
+\subcmddef{\EntryNumberFor\marg{entry key}\marg{list}}
+This returns \textit{n} if \arg{entry key} is the \textit{n}th entry
+in \arg{list}, i.e. if it is the \textit{n}th entry to be cited for the
+first time in \arg{list}.
+
+\cmddef{\EntryNumberIn\marg{list}\marg{command}}
+\subcmddef{\EntryNumberInFor\marg{entry key}\marg{list}\marg{command}}
+This defines \arg{command} as \textit{n}, where \textit{n} is defined
+as above. (Beware that \arg{command} is a macro whose expansion produces
+a number, not an integer denotation.) This is safer than the previous command
+for the same reason as with \tcmd\RetrieveFieldFor, and is emptily defined
+under the same circumstances.
+
+\cmddef{\ReadName\marg{code}}
+\subcmddef{\ReadNameFor\marg{entry key}\marg{code}}
+For each person in the \texttt{name} field for \arg{entry key}, this stores the first name
+in \cmd\Firstname\ (abbreviated if \tcmd\AbbreviateFirstname\ was called),
+the last name in \cmd\Lastname, the von part in
+\cmd\Von\ and the junior part in \cmd\Junior. There is also a
+number \cmd\NameCount, which holds the place of the person in the
+\texttt{name} field (i.e. the first author has \tcmd\NameCount\texttt{=1}).
+Finally, \arg{code} is called with those values. There are aliases
+\cmd\ReadNames\ and \cmd\ReadNamesFor. \cmd\ReadAuthor, \cmd\ReadAuthorFor,
+\cmd\ReadEditor\ and \cmd\ReadEditorFor, and the versions with plural as well,
+are defined equivalently for the \texttt{author} and
+\texttt{editor} fields respectively. You can still use \tcmd{\RetrieveField
+\targ{author}}, for instance, but those fields aren't designed
+for typesetting in their basic form, hence this command.
+
+\cmddef{\TypesetField\marg{field}\marg{command}\marg{code}}
+\subcmddef{\TypesetFieldFor\marg{field}\marg{entry key}\marg{command}\marg{code}}
+If \arg{field} isn't empty in \arg{entry key}, \arg{command} is
+executed with the value of \arg{field} as its argument. So
+\arg{command} should be a macro that takes one (and only one) argument.
+If \arg{field} is empty, \arg{code} is executed instead.
+
+
+
+
+
+
+
+
+\subsection{Fields}
+Beside the fields that are found in bibliographic entries, \lib\ adds
+some of its own, which can be convenient for dealing with references.
+Here they are.
+
+The \field{entrytype} field contains the type of the entry as recorded
+in \texttt{bib} files at the beginning of each entry after the
+\texttt{@} sign. Thus
+
+\verbatim
+@Book{Coover2002,
+ ...
+}
+\endverbatim
+
+\noindent has `\texttt{book}' as the value for \texttt{entrytype}. Note
+that lowercase is always used, whatever the actual case in the \texttt{bib} file.
+The number of authors in the \texttt{author} field is the value of the \field{authornumber}
+field, each author being distinguished from the next by the customary `\texttt{and}'.
+An equivalent field, \field{editornumber}, does the same for \texttt{editor}.
+Most importantly, the \field{name} field holds the same value as \texttt{author}
+if there is such a field in the entry, or the value of \texttt{editor}
+it it exists and there is no \texttt{author}. Thus edited books can be
+cited along with normal books. That's why \texttt{name} appeared in
+\tcmd\SortingOrder\ above: if it had been \texttt{author}, then collective
+works wouldn't have been sorted correctly. Along with \texttt{name},
+\field{namenumber} holds the value either of \texttt{authornumber} or
+of \texttt{editornumber}, according to the same rule. Finally, \field{nametype}
+takes one out of two values: \texttt{author} or \texttt{editor}. It
+takes the former if the \texttt{name} field is set to the value of the \texttt{author}
+field, and the latter if it is set to the value of the \texttt{editor} field.
+Thus, when referencing collective works in a bibliography, you can add
+`(ed.)' for instance after the value of \texttt{name} if \texttt{nametype}
+is \texttt{editor}.
+
+
+
+
+\subsection{A crash course in bibliographic entries (and how \lib\ reads them)}
+This section is not necessary to the understanding of \lib\ but it can be
+useful if in trouble. Suppose you have the following entry:
+
+\verbatim
+@Book{Coover2002,
+ author = {Coover, Robert},
+ title = {The Adventures of Lucky Pierre},
+ subtitle = {Director's Cut},
+ publisher = "Grove Press",
+ Address = {New York},
+ year = 2002,
+}
+\endverbatim
+
+\noindent Then \lib\ stores all the fields for the `\texttt{coover2002}' entry key.
+This key is in lowercase, and thus you can't distinguish two entries by case only
+(this is how Bib\TeX\ works). This doesn't mean that you can't use
+\tcmd{\Cite\targ{Coover2002}\targ{list}}: \lib\ does the necessary conversion.
+The \texttt{entrytype} field is set to `\texttt{book}', in lowercase once again, and
+this time you must be careful: `\texttt{book}' is a value, and since you'll probably
+test it to know how the reference should be typeset in the bibliography, you
+shouldn't compare it to, say, `\texttt{Book}', of course. And to finish with
+lowercase, `\texttt{New York}' is the value of the \texttt{address} field,
+not \texttt{Address}, but once again \lib\ does the conversion so you can call
+\tcmd{\RetrieveField\targ{Address}\targ{cooVEr2002}}. Finally, the \texttt{subtitle}
+field is no customary field, but you can use it. Up to there, \lib\ works
+exactly like Bib\TeX.
+
+But there are differences too. For one thing, \lib\ has no restriction on the type
+of the entry, so you could have:
+
+\verbatim
+@novel{Coover2002,
+ author = {Coover, Robert},
+ title = {The Adventures of Lucky Pierre},
+ subtitle = {Director's Cut},
+ publisher = "Grove Press",
+ Address = {New York},
+ year = 2002,
+}
+\endverbatim
+
+\noindent That's perfectly fine with \lib, although not with Bib\TeX.
+There are no restrictions on fields either, and unlike Bib\TeX\ fields
+aren't labelled as required or optional or ignored; in a bibliographic
+style you can issue an error message if a field is missing, but \lib\
+won't do it for you. And there are
+annoying differences too. They occur in the way \lib\ reads the values of
+fields. Here's how it works: if the first character (disregarding space) after
+the `\texttt{=}' sign is a~\texttt{\string{}, then everything up to the next
+balanced~\texttt{\string}} is taken as the value, and everything up to the comma
+is discarded. (The last value of the entry may have no comma, but \lib\ adds one
+before reading the entry.) If the first character is a~\texttt{\string"}, then
+everything up to the next~\texttt{\string"}, with balanced braces, is taken
+as the value, and everything up to the comma is discarded once again. Finally,
+if the first character is none of the above, then \lib\ takes everything up
+to the next comma as the value (while balancing braces, of course). The latter
+case differs from Bib\TeX. Normally, only numerical values (like the value of
+\texttt{year} in our example) can be given as such, unless strings are used.
+But \lib\ is totally unable to understand strings. The following
+
+\verbatim
+@string{ny = "New York"}
+@Book{Coover2002,
+ author = {Coover, Robert},
+ title = {The Adventures of Lucky Pierre},
+ subtitle = {Director's Cut},
+ publisher = "Grove Press",
+ Address = ny,
+ year = 2002,
+}
+\endverbatim
+
+\noindent would yield `\texttt{New York}' as the value of \texttt{address} in
+Bib\TeX, whereas with \lib\ it gives `\texttt{ny}' (and the \texttt{@string}
+entry is simply ignored). In a situation as simple as the present one, you can
+make do with macros in you document, i.e. a macro which when fed with `\texttt{ny}'
+returns `\texttt{New York}' (problems arise if `\texttt{ny}' is the \textit{real}
+value of a field, though), but it becomes more serious when you concatenate strings
+with the \texttt{\string#} operator. No way to hide the truth: \lib\ will get
+everything wrong. So if you're heavy on strings, better stick to Bib\TeX.
+
+
+
+
+
+
+\section{Examples}
+Although \lib\ doesn't use many commands, it might be hard to understand them
+from scratch. This section details a pair of example styles so you can get
+familiar with how things work. The first example is stripped to the minimum
+just to learn the basic use of \lib's macros.
+The second example is an \textit{Author~(Year)} style
+with some refinements, dealing in particular with entries that have the same
+author and the same year and should thus be distinguished by a suffix, and it
+also shows how to handle cross-references. This style is thoroughly defined
+in the file \texttt{authoryear.tex}, distributed with \lib.
+
+Remember, though, that what you can do in \lib\ is what you can do in \TeX.
+There's nothing arcane in \lib, and what you can achieve depends really
+on your skill in \TeX. So don't feel limited; for instance, suppose you
+want to make a list of your publications like:
+
+\citation
+{\it2010}\par
+`My fascinating paper', {\it Journal of Science}, volume 55 (22), 210--224.\par
+{\it The book I finally wrote}, Good Publishing House: City\-ville.\par
+{\it2009}\par
+`A talk on something', presented at...
+\endcitation
+
+\noindent That is, you want the year to be set above the entries, not
+repeated each time: then, for each entry, retrieve its \texttt{year}
+in a macro, and on the next one, compare with the current year. If it
+has changed, print the new value. (Of course entries should be sorted
+by date, otherwise it doesn't make sense.)
+
+Another example: \lib\ doesn't abbreviate journal titles. But if you think
+in \TeX, it is easily solved: just create a function from a journal title
+to its abbreviation (if any), and call it on the value of the \texttt{journal}
+field... and so on and so forth...
+
+
+
+\subsection{A simple unsorted list with numerical references, which gets sorted later}
+Our first example simply doesn't sort entries, and they are cited with
+the number they get when they appear. To make things a little funnier,
+though, we'll have a case of multiple bibliographies, e.g. one bibliography
+per chapter. In each chapter we set \tcmd\currentchapter, and \tcmd\cite\
+is as follows:
+
+\verbatim
+\def\cite#1{%
+ \Cite{#1}{\currentchapter}%
+ {[\EntryNumber{\currentchapter}]}{[??]}%
+ }
+...
+\def\currentchapter{chapter1}
+\endverbatim
+
+\noindent And at the end of the chapter we'll have:
+
+\verbatim
+\ReadList{\currentchapter}
+\endverbatim
+
+\noindent whereas the \tcmd\BibFile\ command will appear
+at the end of the book. What \tcmd\cite\ does is: store
+the entry in the list associated with the chapter, print
+`[??]' if there's no information associated with that entry (probably
+because it hasn't been read in the bibliographic file yet) and
+`[n]' instead, where \textit{n} is its number in that list, e.g.
+`[3]' if that's the third entry in that chapter.
+
+When \tcmd\ReadList\ is called, we need to have \tcmd\MakeReference\
+ready, so here it is:
+
+\verbatim
+\def\empty{}
+\def\MakeReference{%
+ \par \noindent
+ \llap{[\EntryNumber{\currentchapter}]~}%
+ \RetrieveFieldIn{namenumber}\tempcount
+ \ifx\tempcount\empty
+ \def\tempcount{0}%
+ \fi
+ \ReadName\makerefname.
+ \RetrieveField{title}.
+ \RetrieveField{year}.\par
+ }
+\endverbatim
+
+This produces `[n]' in the left margin (with plain \TeX's \tcmd\llap\
+macro), and prints the name, the title, the year, separated by dots
+and a space. To put it simply, that's an utterly boring citation style,
+which doesn't take the entry type into account. The thing about \tcmd\tempcount\
+is: we'll need it in \tcmd\ReadName\ with \tcmd\makerefname\ to check
+whether we're at the last author. So we need it as a number; however,
+on the first compilation, since \tcmd\BibFile\ appears after \tcmd\ReadList,
+entries have no \texttt{namenumber} field, and thus \tcmd\tempcount\ is
+empty... which is a very bad idea in an \tcmd\ifnum\ test. In that case
+we set it to 0. Now here how names are typeset:
+
+\verbatim
+\def\space{ }
+\def\makerefname{%
+ \ifnum\NameCount>1
+ \ifnum\NameCount=\tempcount\relax \space and \else , \fi
+ \fi
+ \Firstname
+ \unless\ifx\Von\empty \Von\space \fi
+ \space\Lastname
+ \unless\ifx\Junior\empty , \Junior \fi
+ }
+\endverbatim
+
+\noindent We check for the existence of the von and junior parts and
+put them conditionally. Names are separated by a comma except the last
+one which takes `and' instead. Note the crucial \tcmd\relax\ after
+\tcmd\tempcount: the latter is a macro expanding to a number, and it
+would gobble the next \tcmd\space\ if \tcmd\relax\ wasn't there.
+I could have swapped \tcmd\NameCount\ and \tcmd\tempcount, since the
+former is a real integer denotation, but we would have missed this
+fascinating conversation.
+
+Now we're done with that style. Suppose however we want sorted entries.
+For instance:
+
+\verbatim
+\SortingOrder{name,year,title}{lfvj}
+\endverbatim
+
+Now, citing entries with the citation number isn't very convenient.
+Instead, we want a number associated with the entry in the sorted
+list. We need a new count, and on each chapter it should be reset to
+0. For instance:
+
+\verbatim
+\newcount\entrycount
+...
+\def\currentchapter{chapter24}
+\entrycount=0
+\endverbatim
+
+\noindent Next, we redefine \tcmd\cite\ as follows:
+
+\verbatim
+\def\cite#1{%
+ \Cite{#1}{\currentchapter}%
+ {[\csname\EntryKey @\currentchapter\endcsname]}%
+ {[??]}%
+ }
+\endverbatim
+
+\noindent Now \tcmd\cite\ calls a command associated with the key
+(note that \tcmd\EntryKey\ is useless, we could have used \texttt{\#1}
+directly) and the chapter, which holds the number we want. The latter
+was set in \tcmd\MakeCitation, redefined as:
+
+\verbatim
+\def\MakeReference{%
+ \par \noindent
+ \advance\entrycount1
+ \WriteImmediateInfo{%
+ \noexpand\expandafter\def
+ \noexpand\csname\EntryKey @\currentchapter
+ \noexpand\endcsname{\the\entrycount}%
+ }%
+ \llap{[\the\entrycount]~}%
+% ... same as before
+ }
+\endverbatim
+
+\noindent This means: on each entry, advance \tcmd\entrycount\ and
+store its value as the expansion of the command seen above, thanks
+to \tcmd\WriteImmediateInfo. The rather clumsy code in the latter
+just means that the following will be written to the external file:
+
+\verbatim
+\expandafter\def\csname coover2002@chapter24\endcsname{13}
+\endverbatim
+
+And of course, it is the value of \tcmd\entrycount\ that we put into the left margin.
+Note that this style takes three compilations to get everything right:
+in the first one, a new entry can't be sorted, because \tcmd\SortList\
+appears before \tcmd\BibFile. In the second compilation, the entry is
+sorted and its number is written to the external file. In the last one,
+that number is read and used when the entry is cited. Here's the style
+it produces:
+
+
+%\input unsorted
+%\Cite{Wallace2004}{\currentchapter}{}{} \Cite{Wallace1996}{\currentchapter}{}{}
+%\citation
+%Wallace's last book \cite{Wallace2004} was published eight years after his cult
+%novel \cite{Wallace1996}.\par
+%...\par
+%\SortList{\currentchapter}
+%\ReadList{\currentchapter}
+%\endcitation
+
+\Cite{Wallace2004}{empty}{}{} \Cite{Wallace1996}{empty}{}{}
+\citation
+Wallace's last book [2] was published eight years after his cult
+novel [1].\par
+...\par
+\quitvmode\llap{[1]~}David Foster Wallace. \RetrieveFieldFor{title}{Wallace1996}. \RetrieveFieldFor{year}{Wallace1996}.\par
+\quitvmode\llap{[2]~}David Foster Wallace. \RetrieveFieldFor{title}{Wallace2004}. \RetrieveFieldFor{year}{Wallace2004}.\par
+\endcitation
+
+
+
+
+
+\subsection{An Author (Year) style, with similar entries and cross-references}
+The basic idea here is to have a command \tcmd{\cite\targ{entry key}}
+that produces an \textit{Author~(Year)} citation in the main document
+(rather \textit{Name~(Year)}, but whatever). References are thus sorted
+according to names and then year, and if two entries are equal with
+regard to these fields, they should be sorted according to their relative
+order of appearance in the document and distinguished with a suffixes,
+e.g. `Wallace~(2003a)' and `Wallace~(2003b)'. To do so we'll use \tcmd\ifequalentry\
+and \tcmd\WriteImmediateInfo.
+
+However, such a simple \tcmd\cite\ is definitely not very fun. So let's
+make it harder: it will take any number of entry keys and separate them
+with commas (e.g. `Wallace~(1996), Coover~(2002)') unless the \texttt{name}
+field is identical, in which case it won't be repeated and the year
+will be put between the same parentheses as the previous entry
+(e.g. `Wallace~(1996, 2003)'). So \tcmd\cite\ actually calls a
+recursive macro (\tcmd\readcite) on its argument. Here's how it goes.
+(Since \lib\ requires e\TeX, we can use it too; if you don't know anything
+about it, the only important thing is that you can prefix a conditional
+with \tcmd\unless\ to reverse its evaluation; i.e.
+\tcmd{\unless\tcmd\ifwhatever\ A\tcmd\else\ B\tcmd\fi} is the same as
+\tcmd{\ifwhatever\ B\tcmd\else\ A\tcmd\fi}. It's useful to write
+\tcmd{\unless\tcmd\ifwhatever} instead of \tcmd{\ifwhatever\tcmd\else}
+when you're interested in the false condition only.)
+
+\verbatim
+\def\terminator{\terminator} \def\empty{}
+\def\cite#1{%
+ \def\prevauthor{}%
+ \readcite#1,\terminator,%
+ }
+\def\readcite#1,{%
+ \def\temp{#1}%
+ \ifx\temp\terminator
+ )%
+ \let\tail\relax
+ \else
+ \let\tail\readcite
+ \unless\ifx\temp\empty
+ \Cite{#1}{main}\makecitation{}%
+ \fi
+ \fi\tail
+ }
+\endverbatim
+
+\noindent Since we don't know what the next entry will be, if any,
+the final parenthesis is typeset when \tcmd\readcite\ meets the
+terminator. (We take care of empty entries in case one writes
+`\tcmd{\cite\targ{entry1,entry2,}}' by mistake, which becomes
+`\texttt{entry1,entry2,,\string\terminator,}' for \tcmd\readcite.)
+Note that in \texttt{authoryear.tex}, `(' and `)' are actually
+replaced by macros (\tcmd\leftcitemark\ and \tcmd\rightcitemark)
+that are defined as parentheses; it simply makes the switch to
+another style easier.
+
+All entries are added to the \texttt{main} list, and at the end
+of the document we'll have to write:
+
+\verbatim
+% Perhaps some \SortDef's?
+\BibFile{myfiles}
+\SortingOrder{name,year}{lfvj}
+\SortList{main}
+\ReadList{main}
+\endverbatim
+
+But back to citation. \tcmd\readcite\ calls \tcmd\makecitation\
+in case there are fields for the entry. Here it is. If the current
+author is the same as in the previous entry (recorded in
+\tcmd\prevauthor), then we just add a command and a space
+to the previous date:
+
+\verbatim
+\def\makecitation{%
+ \RetrieveFieldIn{name}\temp
+ \ifx\temp\prevauthor ,
+\endverbatim
+
+\noindent On the other hand, if authors differ (unless the previous
+one is empty, which means we're on the first citation), we close
+the parenthesis (always added by the next entry to the previous
+one, remember?), adds a comma and a space to separate entries,
+and typeset the name with \tcmd\ReadName\ (which will make
+use of \tcmd\tempcount). We also typeset an opening parenthesis
+preceded by a hard space to welcome the upcoming year.
+
+\verbatim
+ \else
+ \unless\ifx\prevauthor\empty ),\fi
+ \RetrieveFieldIn{namenumber}\tempcount
+ \ReadName\makecitename~(%
+ \fi
+\endverbatim
+
+\noindent And in any case we set \tcmd\prevauthor\ to the
+current value of \texttt{name}, typeset the year and
+add the suffix associated with that entry if it exists
+(it is created when we use \tcmd\ReadList), somehow like
+the entry number in the previous example.
+
+\verbatim
+ \RetrieveFieldIn{name}\prevauthor
+ \RetrieveField{year}\csname\EntryKey @suffix\endcsname
+ }
+\endverbatim
+
+Now here's how names are typeset: they are separated by
+commas, except the last one which is separated by \textit{and}
+(e.g. `Jackson, Jameson and Johnson~(1980)'). Besides, if there
+are more than 3 authors, only the first one is typeset,
+followed by \textit{et alii}. The number 3 is of course
+totally arbitrary. Finally, each name is typeset as
+\texttt{\string\Von\string~\string\Lastname} with the \tcmd\Von\
+part optional, of course (maybe that makes too many hard
+spaces, though). Remember that \tcmd\tempcount\ holds the value of
+the \texttt{namenumber} field and that \tcmd\NameCount\ is
+the place of the author under investigation in the entire field.
+Hence, if they are more authors than allowed:
+
+\verbatim
+\chardef\namelimit=3
+\def\makecitename{%
+ \ifnum\tempcount>\namelimit
+ \ifnum\NameCount=1
+ \unless\ifx\Von\empty \Von~\fi
+ \Lastname\space {\italics{et alii}}%
+ \fi
+\endverbatim
+
+\noindent Otherwise we typeset all names preceded by
+different markers: nothing for the first author, \textit{and}
+for the last one, and commas in between.
+
+\verbatim
+ \else
+ \unless\ifnum\NameCount=1
+ \ifnum\NameCount=\tempcount\relax \space and
+ \else , \fi
+ \fi
+ \unless\ifx\Von\empty \Von~\fi
+ \Lastname
+ \fi
+ }
+\endverbatim
+
+\noindent And we're done with the \tcmd\cite\ command. We could
+add variation, e.g. \tcmd\citeauthor\ to typeset the \texttt{name}
+field, \tcmd\citeyear\ for the date, remove parentheses when needed,
+etc., but basically we've done the hardest part. The \tcmd\makecitename\
+macro shown here is slightly simpler than the real one in
+\texttt{authoryear.tex}. The latter first checks whether \tcmd\Lastname\
+is `\texttt{others}', in which case it typesets the \textit{et alii}
+phrase (a basic feature of Bib\TeX).
+
+Now we have to define \tcmd\MakeCitation. It begins with \tcmd\ReadName\
+called with \tcmd\makerefname\ as in the previous example. Even though
+\tcmd\makrefname\ is slightly different (the first author is typeset
+as \textit{von Last, Jr, First} whereas the other authors remain in the
+\textit{First von Last, Jr} style), I won't show it here,
+because there's nothing much to learn.
+
+\verbatim
+\def\MakeReference{%
+ \par\noindent
+ \RetrieveFieldIn{namenumber}\tempcount
+ \ReadName\makerefname
+\endverbatim
+
+\noindent In \tcmd\MakeReference\ still, we add a usual marker for collective
+works (\tcmd\editor\ is simply defined as `\texttt{editor}' elsewhere).
+
+\verbatim
+ \RetrieveFieldIn{nametype}\temp
+ \ifx\temp\editor
+ \RetrieveFieldIn{namenumber}\temp
+ \ifnum\temp>1 \space (eds.)\else \space (ed.)\fi
+ \fi
+\endverbatim
+
+\noindent Then we typeset the date between parentheses with a suffix,
+which will be set by \tcmd\comparentries\ (and actually probably empty).
+This suffix is meant to distinguish entries that are equal according to
+\tcmd\SortingOrder.
+
+\verbatim
+ \space (\RetrieveField{year}%
+ \csname\EntryKey @suffix\endcsname)
+ \compareentries
+\endverbatim
+
+\noindent Typesetting the rest of the entry depends on the entry type,
+which is fed to \tcmd\typesetref. At the end of the entry we call
+\tcmd\conditionalstop, a stop that appears if and only if there was no
+stop before (see \texttt{authoryear.tex} for details).
+
+
+\verbatim
+ \RetrieveFieldIn{entrytype}\temp
+ \typesetref\temp \conditionalstop
+ }
+\endverbatim
+
+The \tcmd\comparentries\ macro tests whether we are in equal entries
+relative to sorting and if so gives them a suffix.
+
+\verbatim
+\newcount\sameentrycount
+\def\compareentries{%
+ \ifequalentry
+ \advance\sameentrycount1
+ \WriteImmediateInfo{%
+ \noexpand\expandafter\def
+ \noexpand\csname\EntryKey @suffix\noexpand\endcsname
+ {\toletter}}%
+ \else \sameentrycount=0 \fi
+ }
+\endverbatim
+
+\noindent The \tcmd\toletter\ macro turns \tcmd\sameentrycount\
+into a letter and is quite uninteresting, so it isn't shown here.
+Note that this version of \tcmd\compareentries\ works because
+the first argument of \tcmd\SortOrder\ is set to `\texttt{name,year}',
+and hence two references written the same year by the same author
+are equal according to \lib, which can set the \tcmd\ifequelentry\
+conditional to the requested value. However, if \tcmd\SortOrder\
+was `\texttt{name,year,title}', then not only would the same two
+entries be sorted according to their titles,
+but most importantly they wouldn't be equal at all as far as \lib\
+is concerned (unless they have identical titles, of course),
+although in this bibliographic style they should be
+seen as such. In that case, \tcmd\compareentries\ should be more
+refined and store each entry's \texttt{name} and \texttt{year} fields
+in a macro to be compared to the next one.
+
+But we were calling \tcmd\typesetref\ on the \texttt{entrytype} field.
+It launches a macro which typesets the rest of the entry according
+to its type, and \tcmd\createtype\ is meant to define such a macro:
+
+\verbatim
+\def\typesetref#1{%
+ \ifcsname#1@entrytype\endcsname
+ \csname#1@entrytype\endcsname
+ \else
+ \errmessage{Unknown entry type: `#1'}%
+ \fi
+ }
+\def\createtype#1{%
+ \expandafter\def\csname#1@entrytype\endcsname
+ }
+\endverbatim
+
+Before creating entries, here are some useful macros to be used with
+\tcmd\TypesetField. Indeed, to typeset references properly, punctuation
+should be added if and only if the corresponding field exists.
+
+\verbatim
+\def\booktitle#1{\setbooktitle{\RetrieveField{#1}}}
+\def\setbooktitle#1{\italics{#1}}
+\def\articletitle#1{\setarticletitle{\RetrieveField{#1}}}
+\def\setarticletitle#1{`#1'}
+\def\addcomma#1{, #1}
+\def\addjournal#1{\addcomma{{\setbooktitle{#1}}}}
+\def\addcolon#1{: #1}
+\def\addpar#1{(#1)}
+\def\addbook#1{, in \setbooktitle{#1}}
+\def\addeditor#1{%
+ \RetrieveFieldIn{editornumber}\tempcount
+ , edited by \ReadEditor\makeedname}
+\endverbatim
+
+\noindent The \tcmd\italics\ macro in \tcmd\setbooktitle\ should
+be set to whatever you use to typeset italics. Now, we can create
+entries:
+
+\verbatim
+\createtype{book}{%
+ \booktitle{title}%
+ \TypesetField{publisher}\addcomma{}%
+ \TypesetField{address}\addcolon{}%
+ }
+\createtype{article}{%
+ \articletitle{title}%
+ \TypesetField{journal}\addjournal{}%
+ \TypesetField{volume}\addcomma{}%
+ \TypesetField{number}\addpar{}%
+ \TypesetField{pages}\addcomma{}%
+ }
+\createtype{incollection}{%
+ \articletitle{title}%
+ \TypesetField{crossref}\crossref{%
+ \TypesetField{booktitle}\addbook{}%
+ \TypesetField{editor}\addeditor{}%
+ \TypesetField{pages}\addcomma{}%
+ \TypesetField{publisher}\addcomma{}%
+ \TypesetField{address}\addcolon{}%
+ }%
+ }
+\endverbatim
+
+\noindent ... and many more! That's the basic job of a bibliographic
+style. Note that we make good use of \tcmd\TypesetField, but not with
+the \texttt{title} field, because it is very unlikely to be missing.
+Now, give a look at the \texttt{incollection} entry; once the title
+is typeset, it reads as follows: call the \tcmd\crossref\ macro on the
+value of the \texttt{crossref} field if it has any, otherwise, typeset
+the information about the book. And \tcmd\crossref\ is:
+
+\verbatim
+\def\crossref#1{%
+ , in \cite{#1}%
+ \WriteImmediateInfo{\noexpand\Cite{#1}{main}{}{}}%
+ }
+\endverbatim
+
+\noindent Since the value of the \texttt{crossref} field is an entry key,
+we simply \tcmd\cite\ that entry. However, this is not enough; \tcmd\SortList\
+can deal with entries if and only if they are cited before it is called; on the
+other hand, \tcmd\ReadList, where the cross-reference happens, must appear after
+\tcmd\SortList. That's why we pass a \tcmd\Cite\ command to the next compilation;
+note that the third argument does nothing.
+
+Thus, supposing the reference `\texttt{Gaddis1994}' has a \texttt{crossref} field to `\texttt{Gass2000}',
+\tcmd{\cite\targ{Gaddis1994}} in a document will produce the following in the
+bibliography:
+
+\input authoryear
+\Cite{Gaddis1994}{main}{}{}
+\citation
+\SortList{main}
+\ReadList{main}
+\endcitation
+
+What if we don't want to see the `\texttt{Gass2000}' reference in the bibliography
+and instead want something like this:
+
+\citation
+\def\EntryKey{gaddis1994}
+\RetrieveFieldIn{namenumber}\tempcount
+\ReadName\makerefname~(\RetrieveField{year})
+`\RetrieveField{title}', in
+\def\EntryKey{gass2000}
+\RetrieveFieldIn{namenumber}\tempcount
+\booktitle{title}, edited by \ReadName\makeedname,
+\RetrieveField{publisher}: \RetrieveField{address},
+\RetrieveField{year}.
+\endcitation
+
+\noindent Then \tcmd\crossref\ should be something like this:
+
+\verbatim
+\def\crossref#1{%
+ \bgroup
+ \lowercase{\def\EntryKey{#1}}%
+ \TypesetField{title}\addbook{}%
+ \TypesetField{editor}\addeditor{}%
+ \TypesetField{pages}\addcomma{}%
+ \TypesetField{publisher}\addcomma{}%
+ \TypesetField{address}\addcolon{}%
+ \TypesetField{year}\addcomma{}%
+ \egroup
+ \WriteImmediateInfo{\noexpand\Cite{#1}{crossref}{}{}}%
+ }
+\endverbatim
+
+\noindent That is: we apply the same macros to a different entry
+by redefining \tcmd\EntryKey\ temporarily (hence the group). Note
+that this redefinition must happen in \tcmd\lowercase, because there
+we're away from \lib's handling of entry keys. Note also that we
+still \tcmd\Cite\ the entry in the external file, because the citation
+is necessary to retrieve fields in the bibliographic files; however
+the entry is added to a secondary list `\texttt{crossref}' that we'll never
+sort nor read.
+
+\vskip 0pt plus 1filll
+\parfillskip0pt
+\noindent\hfill {\it Typeset with Lua\TeX\ v.0.6}\par
+\noindent\hfill {\it in Garamond Pro (Robert Slimbach)}\par
+\noindent\hfill {\it and Inconsolata (Raph Levien)}\par
+
+\makebookmarks
+
+\BibFile{librarian}
+\bye
diff --git a/macros/generic/librarian/doc/generic/librarian/librarian.bib b/macros/generic/librarian/doc/generic/librarian/librarian.bib
new file mode 100644
index 0000000000..f58b10be47
--- /dev/null
+++ b/macros/generic/librarian/doc/generic/librarian/librarian.bib
@@ -0,0 +1,39 @@
+@Book{Coover2002,
+ author = {Coover, Robert},
+ title = {The Adventures of Lucky Pierre},
+ subtitle = {Director's Cut},
+ publisher = "Grove Press",
+ Address = {New York},
+ year = 2002,
+}
+
+@book{Wallace1996,
+ author = {David Foster Wallace},
+ title = {Infinite Jest},
+ publisher = "Little, Brown",
+ address = "New York",
+ year = 1996,
+}
+
+@shortstories{Wallace2004,
+ author = {David Foster Wallace},
+ title = {Oblivion},
+ publisher = "Little, Brown",
+ address = "New York",
+ year = 2004,
+}
+
+@incollection{Gaddis1994,
+ author = {Gaddis, William},
+ title = {Old Foes with New Faces},
+ year = 1994,
+ crossref = {Gass2000},
+}
+
+@book{Gass2000,
+ editor = {Gass, William H. and Lorin Cuoco},
+ title = {The Writer and Religion},
+ publisher = {Southern Illinois University Press},
+ address = {Carbondale},
+ year = 2000,
+} \ No newline at end of file
diff --git a/macros/generic/librarian/tex/context/librarian/t-librarian.tex b/macros/generic/librarian/tex/context/librarian/t-librarian.tex
new file mode 100644
index 0000000000..1625f60f76
--- /dev/null
+++ b/macros/generic/librarian/tex/context/librarian/t-librarian.tex
@@ -0,0 +1,25 @@
+% This is t-librarian, a third-party file to load
+% the librarian package in ConTeXt. Useful information
+% can be found in librarian-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: April 2010.
+%
+%D \module
+%D [ file=t-librarian,
+%D version=2010.03.01,
+%D title=\CONTEXT\ User Module,
+%D subtitle=librarian,
+%D author=Paul Isambert,
+%D date=\currentdate,
+%D copyright=Paul Isambert,
+%D email=zappathustra@free.fr,
+%D license=LaTeX Project Public License]
+
+\writestatus{loading}{ConTeXt User Module / librarian}
+\expandafter\let\csname lb@input\endcsname\normalinput
+\expandafter\let\csname lb@unexpanded\endcsname\normalunexpanded
+\input librarian.tex
+\endinput
diff --git a/macros/generic/librarian/tex/generic/librarian/authoryear.tex b/macros/generic/librarian/tex/generic/librarian/authoryear.tex
new file mode 100644
index 0000000000..1bd0c7b2f5
--- /dev/null
+++ b/macros/generic/librarian/tex/generic/librarian/authoryear.tex
@@ -0,0 +1,266 @@
+% This file is distributed with the librarian package
+% as an example bibliographic style. Most of it is explained
+% in librarian-doc.pdf. It produces author (year) citations,
+% using letter prefixes to distinguish similar entries.
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: April 2010.
+
+\ifx\RetrieveFieldIn\undefined
+ \errmessage{You should load librarian first}
+ \expandafter\endinput
+\fi
+
+%%% Replace this definitions by yours.
+\def\italics#1{{\it#1}}
+\chardef\namelimit=3
+\def\leftcitemark{(} \def\rightcitemark{)}
+\def\etalii{\italics{ et alii}}
+
+%%% The \cite command.
+\def\terminator{\terminator} \def\empty{} \def\space{ }
+\def\cite#1{%
+ \def\prevauthor{}%
+ \readcite#1,\terminator,%
+ }
+\def\readcite#1,{%
+ \def\temp{#1}%
+ \ifx\temp\terminator
+ \rightcitemark
+ \let\tail\relax
+ \else
+ \let\tail\readcite
+ \unless\ifx\temp\empty
+ \Cite{#1}{main}\makecitation{}%
+ \fi
+ \fi\tail
+ }
+\def\makecitation{%
+ \RetrieveFieldIn{name}\temp
+ \ifx\temp\prevauthor
+ , % Necessary space, as everywhere in this file.
+ \else
+ \unless\ifx\prevauthor\empty
+ \rightcitemark,
+ \fi
+ \RetrieveFieldIn{namenumber}\tempcount
+ \ReadName\makecitename~\leftcitemark%
+ \fi
+ \RetrieveFieldIn{name}\prevauthor
+ \RetrieveField{year}\csname\EntryKey @suffix\endcsname
+ }
+
+\def\othersname{others}
+\def\makecitename{%
+ \ifx\Lastname\othersname
+ \etalii
+ \else
+ \ifnum\tempcount>\namelimit
+ \ifnum\NameCount=1
+ \unless\ifx\Von\empty \Von~\fi
+ \Lastname\etalii
+ \fi
+ \else
+ \unless\ifnum\NameCount=1
+ \ifnum\NameCount=\tempcount\relax \space and \else, \fi
+ \fi
+ \unless\ifx\Von\empty \Von~\fi
+ \Lastname
+ \fi
+ \fi
+ }%
+
+\def\editor{editor}
+\parindent0pt
+\sfcode`\.=\numexpr(\the\sfcode`\.+1)
+\def\conditionalstop{%
+ \unless\ifnum\spacefactor=\sfcode`\.
+ .%
+ \fi
+ }
+
+%%% Typesetting entries.
+\def\MakeReference{%
+ \par\noindent
+ \RetrieveFieldIn{namenumber}\tempcount
+ \ReadName\makerefname
+ \RetrieveFieldIn{nametype}\temp
+ \ifx\temp\editor
+ \RetrieveFieldIn{namenumber}\temp
+ \ifnum\temp>1
+ \space (eds.)%
+ \else
+ \space (ed.)%
+ \fi
+ \fi
+ \space \leftcitemark\RetrieveField{year}\csname\EntryKey @suffix\endcsname\rightcitemark\space
+ \compareentries
+ \RetrieveFieldIn{entrytype}\temp
+ \typesetref\temp\conditionalstop
+ }
+\newcount\sameentrycount
+\def\compareentries{%
+ \ifequalentry
+ \advance\sameentrycount1
+ \WriteImmediateInfo{%
+ \noexpand\expandafter\def\noexpand\csname\EntryKey @suffix\noexpand\endcsname{\toletter}%
+ }%
+ \else
+ \sameentrycount=0
+ \fi
+ }
+\def\toletter{%
+ \ifcase\sameentrycount
+ \or a\or b\or c\or d\or e\or f\or g\or h%
+ \or i\or j\or k\or l\or m\or n\or o\or p%
+ \or q\or r\or s\or t\or u\or v\or w\or x%
+ \or y\or z\fi
+ }
+
+%%% These are for names in the bibliography.
+\def\makerefname{%
+ \ifx\Lastname\othersname
+ \etalii
+ \else
+ \ifnum\NameCount=1
+ \unless\ifx\Von\empty \Von\space \fi
+ \Lastname, \Firstname
+ \unless\ifx\Junior\empty, \Junior \fi
+ \else
+ \ifnum\NameCount=\tempcount\relax \space and \else , \fi
+ \Firstname
+ \unless\ifx\Von\empty \space\Von \fi
+ \space\Lastname
+ \unless\ifx\Junior\empty , \Junior \fi
+ \fi
+ \fi
+ }
+\def\makeedname{%
+ \ifx\Lastname\othersname
+ \etalii
+ \else
+ \unless\ifnum\NameCount=1
+ \ifnum\NameCount=\tempcount\relax \space and \else , \fi
+ \fi
+ \Firstname
+ \unless\ifx\Von\empty \space\Von \fi
+ \space\Lastname
+ \unless\ifx\Junior\empty , \Junior \fi
+ \fi
+ }
+
+%%% Here entries are defined.
+\def\typesetref#1{%
+ \ifcsname#1@entrytype\endcsname
+ \csname#1@entrytype\endcsname
+ \else
+ \errmessage{Unknown entry type: `#1'}%
+ \fi
+ }
+\def\createtype#1{%
+ \expandafter\def\csname#1@entrytype\endcsname
+ }
+\def\booktitle#1{\setbooktitle{\RetrieveField{#1}}}
+\def\setbooktitle#1{\italics{#1}}
+\def\articletitle#1{\setarticletitle{\RetrieveField{#1}}}%
+\def\setarticletitle#1{`#1'}
+\def\addcomma#1{, #1}
+\def\addjournal#1{\addcomma{{\setbooktitle{#1}}}}
+\def\addcolon#1{: #1}
+\def\addpar#1{(#1)}
+\def\addbook#1{, in \setbooktitle{#1}}
+\def\addeditor#1{%
+ \RetrieveFieldIn{editornumber}\tempcount
+ , edited by \ReadEditor\makeedname}
+\def\inbook#1{%
+ , chapter #1%
+ }
+\def\crossref#1{%
+ , in \cite{#1}%
+ \WriteImmediateInfo{\noexpand\Cite{#1}{main}{}{}}%
+ }
+
+%%% The following do not pretend to show how entries
+%%% should be typeset.
+\createtype{book}{%
+ \booktitle{title}%
+ \TypesetField{publisher}\addcomma{}%
+ \TypesetField{address}\addcolon{}%
+ }%
+\createtype{article}{%
+ \articletitle{title}%
+ \TypesetField{journal}\addjournal{}%
+ \TypesetField{volume}\addcomma{}%
+ \TypesetField{number}\addpar{}%
+ \TypesetField{pages}\addcomma{}%
+ }
+\createtype{inbook}{%
+ \booktitle{title}%
+ \TypesetField{chapter}\inbook{%
+ \TypesetField{pages}\addcomma{}%
+ }%
+ \TypesetField{publisher}\addcomma{}%
+ \TypesetField{address}\addcolon{}%
+ }%
+\createtype{incollection}{%
+ \articletitle{title}%
+ \TypesetField{crossref}\crossref{%
+ \TypesetField{booktitle}\addbook{}%
+ \TypesetField{editor}\addeditor{}%
+ \TypesetField{pages}\addcomma{}%
+ \TypesetField{publisher}\addcomma{}%
+ \TypesetField{address}\addcolon{}%
+ }%
+ }
+\createtype{inproceedings}{%
+ \articletitle{title}%
+ \TypesetField{booktitle}\addbook{}%
+ \TypesetField{editor}\addeditor{}%
+ \TypesetField{pages}\addcomma{}%
+ \TypesetField{address}\addcomma{}%
+ }
+\createtype{conference}{%
+ \articletitle{title}%
+ \TypesetField{booktitle}\addbook{}%
+ \TypesetField{editor}\addeditor{}%
+ \TypesetField{pages}\addcomma{}%
+ \TypesetField{address}\addcomma{}%
+ }
+\createtype{mastersthesis}{%
+ \booktitle{title}%
+ , Master's thesis%
+ \TypesetField{organization}\addcomma{}{}%
+ }
+\createtype{phdthesis}{%
+ \booktitle{title}%
+ , PhD dissertation%
+ \TypesetField{organization}\addcomma{}{}%
+ }
+\createtype{proceedings}{%
+ \booktitle{title}%
+ \TypesetField{publisher}\addcomma{%
+ \TypesetField{organisation}\addcomma{}%
+ }%
+ \TypesetField{address}\addcolon{}%
+ }
+\createtype{techreport}{%
+ \booktitle{title}%
+ , technical report%
+ \TypesetField{institution}\addcomma{}%
+ }
+\createtype{booklet}{%
+ \booktitle{title}%
+ \TypesetField{howpublished}\addcomma{}%
+ }
+\createtype{manual}{%
+ \booktitle{title}%
+ \TypesetField{organization}\addcomma{}%
+ }
+\createtype{misc}{%
+ \booktitle{title}%
+ \TypesetField{howpublished}\addcomma{}%
+ }
+\SortingOrder{name,year}{lfvj}
+\endinput \ No newline at end of file
diff --git a/macros/generic/librarian/tex/generic/librarian/librarian.tex b/macros/generic/librarian/tex/generic/librarian/librarian.tex
new file mode 100644
index 0000000000..11e1b318be
--- /dev/null
+++ b/macros/generic/librarian/tex/generic/librarian/librarian.tex
@@ -0,0 +1,1176 @@
+% This is the librarian package.
+% Relevant information can be found in librarian-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: April 2010.
+
+\csname lb@alreadyloaded\endcsname
+\expandafter\let\csname lb@alreadyloaded\endcsname\endinput
+
+\expandafter\edef\csname lb@restoreat\endcsname{%
+ \catcode`\noexpand\@=\the\catcode`\@
+ }
+\catcode`\@=11
+\def\lb@error#1{\errmessage{Librarian error: #1}}
+\def\lb@badengine{%
+ \lb@error{No proper engine. Use pdfTeX (v.1.4 at least), XeTeX or LuaTeX. I quit}%
+ \lb@restoreat
+ \endinput
+ }
+\ifx\scantokens\lb@undefined
+ \expandafter\lb@badengine
+\fi
+\let\lb@next\relax
+%%% Shamelessly stolen from Heiko Oberdiek's pdftexcmds.
+\ifcsname directlua\endcsname
+ \directlua{%
+ librarian = { }
+ function librarian.strcmp(A,B)
+ if A == B then
+ tex.write("0")
+ elseif A < B then
+ tex.write("-1")
+ else
+ tex.write("1")
+ end
+ end
+ }%
+ \def\lb@strcmp#1#2{%
+ \directlua{%
+ librarian.strcmp("\luaescapestring{#1}","\luaescapestring{#2}")
+ }%
+ }
+\else
+ \ifcsname XeTeXversion\endcsname
+ \let\lb@strcmp\strcmp
+ \else
+ \ifcsname pdfstrcmp\endcsname
+ \let\lb@strcmp\pdfstrcmp
+ \else
+ \let\lb@next\lb@badengine
+ \fi
+ \fi
+\fi
+\lb@next
+\unless\ifcsname lb@unexpanded\endcsname
+ \let\lb@unexpanded\unexpanded
+\fi
+\unless\ifcsname lb@input\endcsname
+ \let\lb@input\input
+\fi
+
+
+%%% TRIMMING (Vilely lifted from Will Robertson's trimspaces.)
+
+\def\lb@trimleft#1{%
+ \expandafter\def\expandafter#1\expandafter{%
+ \romannumeral-`\.\expandafter\noexpand#1%
+ }%
+ }
+\bgroup
+\catcode`\Q=3
+\gdef\lb@trimright#1{%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter#1%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter{%
+ \expandafter\lb@@trimright#1Q Q}%
+ }
+\gdef\lb@@trimright#1 Q{%
+ \lb@@@trimright#1Q%
+ }
+\gdef\lb@@@trimright#1Q#2{%
+ #1%
+ }
+\egroup
+\def\lb@trim#1{%
+ \lb@trimleft#1%
+ \lb@trimright#1%
+ }
+
+%%% KEYWORDS AND GENERAL MACROS
+
+\def\lb@comment{comment} \def\lb@string{string} \def\lb@preamble{preamble} \def\lb@requested{requested}
+\def\lb@author{author} \def\lb@editor{editor} \def\lb@namestring{name} \def\lb@endstring{lb@end}
+\def\lb@eoe{\lb@eoe} \def\lb@gobbletoeoe#1\lb@eoe,{} \def\lb@gobble#1{}
+{\def\:{\global\let\lb@space= }\: } \def\lb@@space{ } \def\lb@empty{}
+
+\def\lb@ifcs#1#2#3#4{%
+ \ifcsname#1:lb@#2\endcsname
+ #3%
+ \else
+ #4%
+ \fi
+ }
+\def\lb@defcs#1#2{%
+ \expandafter\def\csname#1:lb@#2\endcsname
+ }
+\def\lb@gdefcs{%
+ \global\lb@defcs
+ }
+\def\lb@edefcs#1#2{%
+ \expandafter\edef\csname#1:lb@#2\endcsname
+ }
+\def\lb@xdefcs{%
+ \global\lb@edefcs
+ }
+\def\lb@cs#1#2{%
+ \csname#1:lb@#2\endcsname
+ }%
+\def\lb@uncs#1#2{%
+ \lb@unexpanded\expandafter\expandafter\expandafter{%
+ \csname#1:lb@#2\endcsname
+ }%
+ }%
+\def\lb@apptocs#1#2#3{%
+ \expandafter\expandafter\expandafter#1\csname#2:lb@#3\endcsname
+ }
+
+%%% ADDING AND RETRIEVING FIELD
+
+\def\lb@addfield#1#2{%
+ \lb@ifcs{#1}{retrieve}%
+ {}%
+ {\lb@makeretrieve{#1}%
+ \WriteImmediateInfo{\noexpand\lb@makeretrieve{#1}}}%
+ \lb@edefcs\lb@entrykey{fields}{%
+ \lb@unexpanded{[[#1=#2]]}%
+ \lb@uncs{\lb@entrykey}{fields}%
+ }%
+ }%
+
+\def\lb@addvalue#1#2{\lb@addfield{#2}{#1}}
+\def\lb@makeretrieve#1{%
+ \lowercase{\lb@defcs{#1}{retrieve}##1[[#1=##2]]##3\lb@eoe{##2}}%
+ \lowercase{\lb@defcs{#1}{retrievein}##1[[#1=##2]]##3\lb@eoe##4{\def##4{##2}}}%
+ }
+\def\CreateField#1{%
+ \lowercase{\lb@ifcs{#1}{retrieve}}%
+ {}%
+ {\lb@makeretrieve{#1}}%
+ }
+\def\lb@@makeretrieve#1,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \lb@makeretrieve{#1}%
+ \expandafter\lb@@makeretrieve
+ \fi
+ }
+\lb@@makeretrieve address,annote,author,booktitle,chapter,crossref,%
+ edition,editor,howpublished,institution,journal,%
+ key,month,note,number,organization,pages,publisher,%
+ school,series,title,type,volume,year,file,%
+% These are specific to Librarian.
+ entrytype,authornumber,editornumber,name,namenumber,nametype,\lb@eoe,%
+\def\RetrieveField#1{%
+ \RetrieveFieldFor{#1}\EntryKey
+ }
+\def\RetrieveFieldFor#1#2{%
+ \lowercase{\lb@retrievefield{#1}{#2}}%
+ }
+\def\lb@retrievefield#1#2{%
+ \lb@ifcs{#1}{retrieve}%
+ {\lb@apptocs\lb@retrieve{#2}{fields}\lb@eoe{#1}}%
+ {\lb@error{Unknown field: `#1'}}%
+ }
+\def\lb@retrieve#1\lb@eoe#2{%
+ \lb@cs{#2}{retrieve}#1[[#2=]]\lb@eoe
+ }
+\def\RetrieveFieldIn#1{%
+ \RetrieveFieldInFor{#1}\EntryKey
+ }
+\def\RetrieveFieldInFor#1#2{%
+ \lowercase{\lb@retrievefieldin{#1}{#2}}%
+ }%
+\def\lb@retrievefieldin#1#2#3{%
+ \lb@ifcs{#1}{retrieve}%
+ {\lb@apptocs\lb@retrievein{#2}{fields}\lb@eoe{#1}#3}%
+ {\lb@error{Unknown field: `#1'}}%
+ }
+\def\lb@retrievein#1\lb@eoe#2#3{%
+ \lb@cs{#2}{retrievein}#1[[#2=]]\lb@eoe#3%
+ }
+\def\EntryNumber{%
+ \EntryNumberFor\EntryKey
+ }
+\def\EntryNumberFor#1#2{%
+ \lowercase{\lb@ifcs{#1@#2}{entrynumber}}%
+ {\lowercase{\lb@cs{#1@#2}{entrynumber}}}%
+ {\lb@error{`#1' doesn't belong to `#2'}}%
+ }
+\def\EntryNumberIn{%
+ \EntryNumberInFor\EntryKey
+ }
+\def\EntryNumberInFor#1#2#3{%
+ \lowercase{\lb@ifcs{#1@#2}{entrynumber}}%
+ {\lowercase{\edef#3{\lb@cs{#1@#2}{entrynumber}}}}%
+ {\lb@error{`#1' doesn't belong to `#2'}}%
+ }
+\def\TypesetField#1{%
+ \TypesetFieldFor{#1}\EntryKey
+ }%
+\def\TypesetFieldFor#1#2#3#4{%
+ \def\lb@temp{}%
+ \RetrieveFieldInFor{#1}{#2}\lb@temp
+ \ifx\lb@temp\lb@empty
+ \def\lb@next{#4}%
+ \else
+ \def\lb@next{%
+ \expandafter#3\expandafter{\lb@temp}%
+ }%
+ \fi
+ \lb@next
+ }
+
+%%% CITATION
+
+\newcount\lb@entrycount \newif\iflb@requested
+\def\lb@mainlist{}%
+\def\Cite#1{%
+ \lowercase{\lb@cite{#1}}%
+ }%
+\def\lb@cite#1#2{%
+ \lb@ifcs{#2}{entrylist}%
+ {\lb@ifcs{#1@#2}{entrynumber}%
+ {}%
+ {\lb@xdefcs{#2}{entrycount}{\the\numexpr(\lb@cs{#2}{entrycount}+1)}%
+ \lb@xdefcs{#1@#2}{entrynumber}{\lb@cs{#2}{entrycount}}%
+ \lb@xdefcs{#2}{entrylist}{\lb@cs{#2}{entrylist}#1,}%
+ \lb@ifcs{#1}{fields}%
+ {}%
+ {\lb@ifcs{#2}{newentries}%
+ {\lb@xdefcs{#2}{newentries}{%
+ \lb@cs{#2}{newentries}#1,}}%
+ {\lb@xdefcs{#2}{newentries}{#1,}}}}}%
+ {\lb@gdefcs{#2}{entrycount}{1}%
+ \lb@gdefcs{#1@#2}{entrynumber}{1}%
+ \lb@gdefcs{#2}{entrylist}{#1,}%
+ \lb@ifcs{#1}{fields}%
+ {}%
+ {\lb@ifcs{#2}{newentries}%
+ {\lb@xdefcs{#2}{newentries}{%
+ \lb@cs{#2}{newentries}#1,}}%
+ {\lb@xdefcs{#2}{newentries}{#1,}}}}%
+ \lb@ifcs{#1}{fields}%
+ {\lb@ifcs{#1}{done}%
+ {}%
+ {\lb@cs{#1}{done}%
+ \lb@storeentry{#1}}%
+ \def\EntryKey{#1}%
+ \let\lb@next\lb@first}%
+ {\lb@ifcs{#1}{requested}%
+ {}%
+ {\lb@xdefcs{#1}{requested}{}%
+ \xdef\lb@mainlist{\lb@mainlist#1,}%
+ \global\lb@requestedtrue}%
+ \let\lb@next\lb@second}%
+ \lb@next
+ }
+\def\lb@first#1#2{#1}
+\def\lb@second#1#2{#2}
+
+%%% READING ENTRIES IN BIB FILES
+
+\def\Preamble{}%
+\def\lb@checktype#1#{%
+ \lowercase{\def\lb@temp{#1}}%
+ \ifx\lb@temp\lb@endoffile
+ \let\lb@next\endinput
+ \else
+ \ifx\lb@next\lb@string
+ \def\lb@next{\expandafter\lb@gotoat\lb@gobble}%
+ \else
+ \ifx\lb@temp\lb@comment
+ \def\lb@next{\expandafter\lb@gotoat\lb@gobble}%
+ \else
+ \ifx\lb@temp\lb@preamble
+ \xdef\Preamble{\lb@unexpanded\expandafter{\Preamble}#1}%
+ \else
+ \def\lb@next{\lb@getentry{#1}}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \lb@next
+ }
+\def\lb@getentry#1#2{%
+ \lb@readentry{#1}#2,=\lb@eoe,%
+ }
+\def\lb@readentry#1#2,{%
+ \lowercase{\def\lb@temp{#2}}%
+ \lb@ifcs\lb@temp{requested}%
+ {\let\lb@entrykey\lb@temp
+ \lb@defcs\lb@entrykey{fields}{}%
+ \lowercase{\lb@addfield{entrytype}{#1}}%
+ \let\lb@next\lb@analyzeentry}%
+ {\def\lb@next{\expandafter\lb@gotoat\lb@gobbletoeoe}}%
+ \lb@next
+ }
+\def\lb@analyzeentry#1={%
+ \lowercase{\def\lb@field{#1}}%
+ \futurelet\lb@nextchar\lb@@analyzeentry
+ }
+\def\lb@@analyzeentry{%
+ \ifx\lb@nextchar\lb@eoe
+ \RetrieveFieldInFor{author}\lb@entrykey\lb@temp
+ \ifx\lb@temp\lb@empty
+ \RetrieveFieldInFor{editor}\lb@entrykey\lb@temp
+ \unless\ifx\lb@temp\lb@empty
+ \expandafter\lb@addvalue\expandafter{\lb@temp}{name}%
+ \RetrieveFieldInFor{editornumber}\lb@entrykey\lb@temp
+ \expandafter\lb@addvalue\expandafter{\lb@temp}{namenumber}%
+ \lb@addfield{nametype}{editor}%
+ \fi
+ \else
+ \expandafter\lb@addvalue\expandafter{\lb@temp}{name}%
+ \RetrieveFieldInFor{authornumber}\lb@entrykey\lb@temp
+ \expandafter\lb@addvalue\expandafter{\lb@temp}{namenumber}%
+ \lb@addfield{nametype}{author}%
+ \fi
+ \lb@xdefcs{\lb@entrykey}{fields}{\lb@uncs\lb@entrykey{fields}}%
+ \def\lb@next{\expandafter\lb@gotoat\lb@gobbletoeoe}%
+ \else
+ \lb@trim\lb@field
+ \def\lb@next{\futurelet\lb@nextchar\lb@getvalue}%
+ \fi
+ \lb@next
+ }
+\def\lb@getvalue{%
+ \if\noexpand\lb@nextchar\lb@space
+ \def\lb@next{%
+ \def\lb@next{\futurelet\lb@nextchar\lb@getvalue}%
+ \afterassignment\lb@next\let\lb@nextchar=
+ }%
+ \else
+ \if\noexpand\lb@nextchar"%
+ \let\lb@next\lb@readvalue
+ \else
+ \if\noexpand\lb@nextchar\bgroup
+ \let\lb@next\lb@@readvalue
+ \else
+ \let\lb@next\lb@@@readvalue
+ \fi
+ \fi
+ \fi
+ \lb@next
+ }
+\def\lb@readvalue"#1"#2,{\lb@dovalue{#1}}
+\def\lb@@readvalue#1#2,{\lb@dovalue{#1}}
+\def\lb@@@readvalue#1,{\lb@dovalue{#1}}
+\def\lb@dovalue#1{%
+ \ifx\lb@field\lb@author
+ \def\lb@tempname{}%
+ \lb@namecount=0
+ \lb@splitnames#1 and lb@end and %
+ \expandafter\lb@addvalue\expandafter{\lb@tempname}{author}%
+ \expandafter\lb@addvalue\expandafter{\the\lb@namecount}{authornumber}%
+ \else
+ \ifx\lb@field\lb@editor
+ \def\lb@tempname{}%
+ \lb@namecount=0
+ \lb@splitnames#1 and lb@end and %
+ \lb@trim\lb@tempname
+ \expandafter\lb@addvalue\expandafter{\lb@tempname}{editor}%
+ \expandafter\lb@addvalue\expandafter{\the\lb@namecount}{editornumber}%
+ \else
+ \expandafter\lb@addfield\expandafter{\lb@field}{#1}%
+ \fi
+ \fi
+ \lb@analyzeentry
+ }
+
+%%% ANALYZING NAMES
+
+\newcount\lb@namecount
+\newcount\lb@tempcount
+\newif\iflb@von \newif\iflb@group
+\def\lb@splitnames#1 and {%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@endstring
+ \def\lb@name{}\def\lb@lastname{}%
+ \def\lb@firstname{}\def\lb@von{}%
+ \def\lb@junior{}\def\lb@temporary{}%
+ \lb@vonfalse \advance\lb@namecount1
+ \lb@scanname#1,\lb@eoe,\lb@eoe,%
+ \expandafter\lb@splitnames
+ \fi
+ }
+\def\lb@scanname#1,#2,#3,{%
+ \def\lb@temp{#2}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@getrest\lb@withfirst
+ \def\lb@next{\futurelet\lb@nextchar\lb@analyzename#1 \lb@eoe}%
+ \else\let\lb@next\relax
+ \let\lb@getrest\lb@nofirst
+ \def\lb@temp{#3}%
+ \ifx\lb@temp\lb@eoe
+ \expandafter\def\expandafter\lb@firstname\expandafter{\romannumeral-`\:\noexpand#2}%
+ \def\lb@next{%
+ \def\lb@next{\futurelet\lb@nextchar\lb@analyzename#1 \lb@eoe}%
+ \expandafter\lb@next\lb@commagobble
+ }%
+ \else
+ \expandafter\def\expandafter\lb@junior\expandafter{\romannumeral-`\:\noexpand#2}%
+ \expandafter\def\expandafter\lb@firstname\expandafter{\romannumeral-`\:\noexpand#3}%
+ \def\lb@next{%
+ \def\lb@next{\futurelet\lb@nextchar\lb@analyzename#1 \lb@eoe}%
+ \expandafter\expandafter\expandafter\lb@next\expandafter\lb@commagobble\lb@commagobble
+ }%
+ \fi
+ \fi\lb@next
+ }
+\def\lb@commagobble#1,{}%
+\def\lb@analyzename#1{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \def\lb@next{\expandafter\lb@getlast\lb@name\lb@eoe}%
+ \else
+ \if\noexpand\lb@nextchar\bgroup
+ \def\lb@next{\lb@grabword{{#1}}}%
+ \else
+ \def\lb@next{\lb@grabword#1}%
+ \fi
+ \fi\lb@next
+ }
+\def\lb@getlast#1{%
+ \def\lb@lastname{#1}%
+ \lb@trim\lb@lastname
+ \lb@getrest
+ }
+\def\lb@grabword#1#2 {%
+ \edef\lb@name{{\lb@unexpanded{#1#2}}\lb@unexpanded\expandafter{\lb@name}}%
+ \futurelet\lb@nextchar\lb@analyzename
+ }
+\def\lb@checkbrace#1\lb@eoe{%
+ \if\noexpand\lb@nextchar\bgroup
+ \lb@grouptrue
+ \else
+ \lb@groupfalse
+ \fi
+ }
+\def\lb@withfirst#1{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \expandafter\def\expandafter\lb@firstname\expandafter{\lb@temporary}%
+ \let\lb@next\lb@storename
+ \else
+ \futurelet\lb@nextchar\lb@checkbrace#1\lb@eoe
+ \let\lb@next\lb@withfirst
+ \iflb@group
+ \edef\lb@temporary{\lb@unexpanded{#1}%
+ \unless\ifx\lb@temporary\lb@empty
+ \lb@@space
+ \lb@unexpanded\expandafter{\lb@temporary}%
+ \fi}%
+ \else
+ \lb@getfirstletter#1 %
+ \fi
+ \fi\lb@next
+ }
+\def\lb@empty{}
+\def\lb@getfirstletter#1#2 {%
+ \ifnum\lccode`#1=`#1
+ \iflb@von
+ \edef\lb@von{\lb@unexpanded{#1#2}%
+ \unless\ifx\lb@temporary\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@temporary}\lb@@space
+ \fi
+ \lb@unexpanded\expandafter{\lb@von}}%
+ \def\lb@temporary{}%
+ \else
+ \lb@vontrue
+ \edef\lb@lastname{%
+ \unless\ifx\lb@temporary\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@temporary}%
+ \fi
+ \lb@unexpanded\expandafter{\lb@lastname}%
+ }%
+ \def\lb@temporary{}%
+ \def\lb@von{#1#2}%
+ \fi
+ \else
+ \edef\lb@temporary{%
+ \lb@unexpanded{#1#2}%
+ \unless\ifx\lb@temporary\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@temporary}%
+ \fi}%
+ \fi
+ }%
+\def\lb@nofirst#1{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\lb@storename
+ \else
+ \futurelet\lb@nextchar\lb@checkbrace#1\lb@eoe
+ \let\lb@next\lb@nofirst
+ \iflb@von
+ \edef\lb@von{%
+ \lb@unexpanded{#1}%
+ \unless\ifx\lb@von\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@von}%
+ \fi}%
+ \else
+ \iflb@group
+ \edef\lb@lastname{%
+ \lb@unexpanded{#1}%
+ \unless\ifx\lb@lastname\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@lastname}%
+ \fi}%
+ \else
+ \lb@@getfirstletter#1 %
+ \fi
+ \fi
+ \fi\lb@next
+ }
+\def\lb@@getfirstletter#1#2 {%
+ \ifnum\lccode`#1=`#1
+ \lb@vontrue
+ \edef\lb@von{%
+ \lb@unexpanded{#1#2}%
+ \unless\ifx\lb@von\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@von}%
+ \fi
+ }%
+ \else
+ \edef\lb@lastname{%
+ \lb@unexpanded{#1#2}%
+ \unless\ifx\lb@lastname\lb@empty
+ \lb@@space\lb@unexpanded\expandafter{\lb@lastname}%
+ \fi
+ }%
+ \fi
+ }
+\def\lb@storename{%
+ \edef\lb@tempname{%
+ \unless\ifx\lb@tempname\lb@empty
+ \lb@unexpanded\expandafter{\lb@tempname}%
+ \fi
+ {{\lb@unexpanded\expandafter{\lb@firstname}}%
+ {\lb@unexpanded\expandafter{\lb@von}}%
+ {\lb@unexpanded\expandafter{\lb@lastname}}%
+ {\lb@unexpanded\expandafter{\lb@junior}}}%
+ }%
+ }
+
+%%% SORTING
+
+\def\SortingOrder#1#2{%
+ \def\lb@sortingorder{}%
+ \expandafter\lb@makesortingorder#1,\lb@eoe,%
+%
+ \edef\lb@tempnameorder{#2}%
+ \def\lb@nameorder{}%
+ \lb@namesortingorder#2\lb@eoe
+ }
+\def\lb@makesortingorder#1,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \unless\ifx\lb@temp\lb@empty
+ \lb@ifcs{#1}{retrieve}%
+ {}%
+ {\lb@makeretrieve{#1}}%
+ \edef\lb@sortingorder{\lb@sortingorder#1,}%
+ \fi
+ \expandafter\lb@makesortingorder
+ \fi
+ }
+\def\lb@nameorderdef{\gdef\lb@nameorder_1_2_3_4}%
+\def\lb@namesortingorder#1{%
+ \ifx#1\lb@eoe
+ \bgroup
+ \catcode`\_=6
+ \catcode`\@=11
+ \scantokens\expandafter\expandafter\expandafter{%
+ \expandafter\lb@nameorderdef\expandafter{\lb@nameorder}% A space is created here. Why?
+ }%
+ \egroup
+ \let\lb@next\relax
+ \else
+ \let\lb@next\lb@namesortingorder
+ \if#1f%
+ \edef\lb@nameorder{\lb@unexpanded\expandafter{\lb@nameorder} _1}%
+ \else\if#1v%
+ \edef\lb@nameorder{\lb@unexpanded\expandafter{\lb@nameorder} _2}%
+ \else\if#1l%
+ \edef\lb@nameorder{\lb@unexpanded\expandafter{\lb@nameorder} _3}%
+ \else\if#1j%
+ \edef\lb@nameorder{\lb@unexpanded\expandafter{\lb@nameorder} _4}%
+ \else
+ \lb@error{`#1' is not valid in \SortingOrder}%
+ \fi\fi\fi\fi
+ \fi\lb@next
+ }
+\SortingOrder{}{}
+\newcount\lb@sortnumber
+\newif\iflb@tie \newif\iflb@puttie
+\def\lb@tie{\lb@tie} \def\lb@endtie{\lb@endtie}
+\def\lb@addtosorted#1{%
+ \xdef\lb@sortedentries{\lb@unexpanded\expandafter{\lb@sortedentries}#1,}%
+ }
+\def\lb@@addtosorted#1{%
+ \xdef\lb@sortedentries{\lb@unexpanded\expandafter{\lb@sortedentries}#1}%
+ }
+\def\lb@sort#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \lb@addtosorted\lb@entrykey
+ \let\lb@next\relax
+ \else
+ \ifx\lb@temp\lb@tie
+ \lb@tietrue \lb@puttietrue
+ \let\lb@next\lb@sort
+ \else
+ \ifx\lb@temp\lb@endtie
+ \ifnum\lb@sortnumber=0
+ \lb@addtosorted{\lb@entrykey,\noexpand\lb@endtie}%
+ \let\lb@next\lb@finishlist
+ \else
+ \lb@addtosorted{\noexpand\lb@endtie}%
+ \let\lb@next\lb@sort
+ \fi
+ \lb@tiefalse
+ \else
+ \def\lb@currententry{#1}%
+ \expandafter\lb@sortby\lb@sortingorder,\lb@eoe,%
+ \ifnum\lb@sortnumber=0
+ \iflb@tie
+ \iflb@puttie
+ \lb@addtosorted{\noexpand\lb@tie}%
+ \lb@puttiefalse
+ \fi
+ \ifnum\lb@cs{\lb@entrykey @\lb@currentlist}{entrynumber}<\lb@cs{#1@\lb@currentlist}{entrynumber}%
+ \lb@addtosorted{\lb@entrykey,#1}%
+ \let\lb@next\lb@finishlist
+ \else
+ \lb@addtosorted{#1}%
+ \let\lb@next\lb@sort
+ \fi
+ \else
+ \ifnum\lb@cs{\lb@entrykey @\lb@currentlist}{entrynumber}<\lb@cs{#1@\lb@currentlist}{entrynumber}%
+ \lb@addtosorted{\noexpand\lb@tie,\lb@entrykey,#1,\noexpand\lb@endtie}%
+ \else
+ \lb@addtosorted{\noexpand\lb@tie,#1,\lb@entrykey,\noexpand\lb@endtie}%
+ \fi
+ \let\lb@next\lb@finishlist
+ \fi
+ \else
+ \ifnum\lb@sortnumber\lb@sign0
+ \lb@tiefalse
+ \lb@addtosorted\lb@entrykey
+ \iflb@puttie
+ \lb@addtosorted{\noexpand\lb@tie}%
+ \lb@puttiefalse
+ \fi
+ \lb@addtosorted{#1}%
+ \let\lb@next\lb@finishlist
+ \else
+ \iflb@puttie
+ \lb@addtosorted{\noexpand\lb@tie}%
+ \lb@puttiefalse
+ \fi
+ \lb@addtosorted{#1}%
+ \let\lb@next\lb@sort
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \lb@next
+ }
+\def\lb@finishlist#1\lb@eoe,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@empty
+ \lb@@addtosorted{\lb@unexpanded{#1}}%
+ \fi
+ }%
+\def\lb@sign{<}%
+\def\lb@sortby#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@empty
+ \let\lb@next\lb@sortby
+ \else
+ \ifx\lb@temp\lb@eoe
+ \lb@sortnumber=0
+ \let\lb@next\relax
+ \else
+ \bgroup
+ \edef\lb@temp{#1}%
+ \expandafter\lb@preparesort\lb@temp\lb@eoe
+ \egroup
+ \ifnum\lb@sortnumber=0
+ \let\lb@next\lb@sortby
+ \else
+ \let\lb@next\lb@gobbletoeoe
+ \fi
+ \fi
+ \fi
+ \lb@next
+ }
+\def\lb@preparesort#1#2\lb@eoe{%
+ \if#1-%
+ \gdef\lb@sign{>}%
+ \def\lb@temp{#2}%
+ \else
+ \gdef\lb@sign{<}%
+ \def\lb@temp{#1#2}%
+ \fi
+ \expandafter\RetrieveFieldInFor\expandafter{\lb@temp}\lb@entrykey\lb@firstfield
+ \expandafter\RetrieveFieldInFor\expandafter{\lb@temp}\lb@currententry\lb@secondfield
+ \ifx\lb@temp\lb@author
+ \lb@preparenames{author}\lb@entrykey\lb@firstfield
+ \lb@preparenames{author}\lb@currententry\lb@secondfield
+ \else\ifx\lb@temp\lb@editor
+ \lb@preparenames{editor}\lb@entrykey\lb@firstfield
+ \lb@preparenames{editor}\lb@currententry\lb@secondfield
+ \else\ifx\lb@temp\lb@namestring
+ \lb@preparenames{name}\lb@entrykey\lb@firstfield
+ \lb@preparenames{name}\lb@currententry\lb@secondfield
+ \else
+ \catcode`\ =9
+ \fi\fi\fi
+ \expandafter\expandafter\expandafter\lb@compare
+ \expandafter\lb@firstfield\expandafter\lb@eoe\lb@secondfield\lb@eoe
+ }
+\def\lb@preparenames#1#2#3{%
+ \expandafter\RetrieveFieldInFor\expandafter{#1number}#2\lb@@temp
+ \ifx\lb@@temp\lb@empty
+ \def\lb@@temp{0}%
+ \fi
+ \expandafter\ifnum\lb@@temp=1
+ \def\lb@@temp{}%
+ \expandafter\lb@loopover\expandafter{#3}\lb@eoe
+ \else
+ \def\lb@@temp{}%
+ \expandafter\lb@loopover#3\lb@eoe
+ \fi
+ \let#3\lb@@temp
+ }
+\def\lb@loopover#1{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\relax
+ \else
+ \lb@makename#1%
+ \let\lb@next\lb@loopover
+ \fi\lb@next
+ }
+\def\lb@makename#1#2#3#4{%
+ \edef\lb@@temp{%
+ \lb@unexpanded\expandafter{\lb@@temp}
+ \lb@unexpanded\expandafter{\lb@nameorder{#1}{#2}{#3}{#4}}%
+ }%
+ }
+\def\lb@compare#1\lb@eoe#2\lb@eoe{%
+ \catcode`\<=1 \catcode`\>=2
+ \catcode`\{=13 \catcode`\}=13
+ \catcode`\@=11
+ \lb@changemacros
+ \everyeof={}%
+ \scantokens{%
+ \let{\lb@empty \let}\lb@empty
+ \lowercase<\global\lb@sortnumber=\lb@strcmp<#1><#2>>%
+ }%
+ }
+\def\lb@changemacros{}%
+\def\SortDef#1#2{%
+ \edef\lb@changemacros{%
+ \lb@unexpanded\expandafter{\lb@changemacros%
+ \def#1{#2}}%
+ }%
+ }
+
+%%% BIB FILES
+
+\def\lb@readbib#1{%
+ \iflb@requested
+ \global\lb@requestedfalse
+ \openin\lb@read=#1\relax
+ \ifeof\lb@read
+ \lb@error{I can't find file `#1'}%
+ \else
+ \bgroup
+ \endlinechar=`\ %
+ \catcode`\%=12
+ \lb@makeendoffile
+ \catcode`\@=12
+ \expandafter\lb@gotoat\lb@input#1\relax
+ \egroup
+ \fi
+ \expandafter\lb@checkentrylist\lb@mainlist\lb@eoe,%
+ \fi
+ }
+\def\BibFile#1{%
+ \lb@bibfile#1,\lb@eoe,%
+ \iflb@requested
+ \expandafter\lb@checkmissingentries\lb@mainlist\lb@eoe,%
+ \fi
+ }
+{\catcode`\#=12 \gdef\hash{#}}
+\def\lb@storelist#1,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \lb@ifcs{#1}{fields}%
+ {\lb@storeentry{#1}}%
+ {}%
+ \expandafter\lb@storelist
+ \fi
+ }
+\def\lb@bibfile#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\relax
+ \else
+ \let\lb@next\lb@bibfile
+ \unless\ifx\@temp\lb@empty
+ \def\lb@file{#1}%
+ \lb@checkextension#1.\lb@eoe
+ \lb@readbib\lb@file
+ \fi
+ \fi
+ \lb@next
+ }
+\def\lb@checkextension#1.#2\lb@eoe{%
+ \def\lb@temp{#2}%
+ \ifx\lb@temp\lb@empty
+ \def\lb@file{#1.bib}%
+ \fi
+ }
+\bgroup
+\catcode`\@=12
+\expandafter\xdef\csname lb@gotoat\endcsname#1@{%
+ \csname lb@unexpanded\endcsname\expandafter{\csname lb@checktype\endcsname}%
+ }
+\expandafter\gdef\csname lb@makeendoffile\endcsname{%
+ \everyeof={@lb@endoffile{}}%
+ }
+\expandafter\gdef\csname lb@endoffile\endcsname{lb@endoffile}
+\long\expandafter\gdef\csname lb@readlbr\endcsname#1@lb@endoffile{%
+ \expandafter\gdef\csname lb@dolbr\endcsname{#1}}
+\egroup
+\def\lb@checkentrylist#1,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \lb@ifcs{#1}{fields}%
+ {\lb@storeentry{#1}}%
+ {\global\lb@requestedtrue}%
+ \expandafter\lb@checkentrylist
+ \fi
+ }
+\def\lb@checkmissingentries#1,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \lb@ifcs{#1}{fields}%
+ {}%
+ {\lb@error{Entry `#1' wasn't found}}%
+ \expandafter\lb@checkmissingentries
+ \fi
+ }
+
+%%% SORTING AND READING LISTS
+
+\newif\iflb@resort
+\def\SortList#1{%
+ \def\lb@sortedentries{}%
+ \def\lb@currentlist{#1}%
+ \lb@ifcs{#1}{entrylist}%
+ {\unless\ifx\lb@sortingorder\lb@empty
+ \lb@resorttrue
+ \expandafter\ifx\csname#1:lb@prevorder\endcsname\lb@sortingorder
+ \expandafter\ifx\csname#1:lb@prevnameorder\endcsname\lb@tempnameorder
+ \lb@resortfalse
+ \fi
+ \fi
+ \iflb@resort
+ \bgroup
+ \tracingmacros0 \tracingcommands0 \tracingrestores0
+ \tracingscantokens0 \tracingassigns0 \tracingifs0
+ \tracinggroups0 \tracingnesting0
+ \def\lb@sortedentries{}%
+ \lb@apptocs\lb@sortlist{#1}{entrylist}\lb@eoe,%
+ \egroup
+ \else
+ \def\lb@sortedentries{}%
+ \lb@apptocs\lb@removeold{#1}{prevsorted}\lb@eoe,%
+ \unless\ifx\lb@sortedentries\lb@empty
+ \let\lb@temp\lb@sortedentries
+ \def\lb@sortedentries{}%
+ \expandafter\lb@checkties\lb@temp\lb@tie,\lb@eoe\lb@endtie,%
+ \fi
+ \edef\lb@newentries{%
+ \lb@ifcs{#1}{newentries}%
+ {\lb@cs{#1}{newentries}}%
+ {}%
+ \lb@cs{#1}{prevoldnew}%
+ }%
+ \expandafter\lb@sortlist\lb@newentries\lb@eoe,%
+ \fi
+ \expandafter\let\csname#1:lb@entrylist\endcsname\lb@sortedentries
+ \fi
+ \WriteImmediateInfo{\noexpand\lb@makelist{#1}%
+ {\lb@ifcs{#1}{oldnew}%
+ {\lb@cs{#1}{oldnew}}%
+ {}}%
+ {\lb@sortingorder}{\lb@tempnameorder}%
+ {\lb@uncs{#1}{entrylist}}}}%
+ {\lb@error{List `#1' doesn't exist}}%
+ }
+\def\lb@removeold#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\relax
+ \else
+ \let\lb@next\lb@removeold
+ \ifx\lb@temp\lb@tie
+ \lb@addtosorted{\noexpand\lb@tie}%
+ \else
+ \ifx\lb@temp\lb@endtie
+ \lb@addtosorted{\noexpand\lb@endtie}%
+ \else
+ \lb@ifcs{#1@\lb@currentlist}{entrynumber}%
+ {\lb@addtosorted{#1}}%
+ {}%
+ \fi
+ \fi
+ \fi\lb@next
+ }
+\newif\iflb@onetie
+\def\lb@checkties#1\lb@tie,#2\lb@endtie,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@empty
+ \lb@@addtosorted{#1}%
+ \fi
+ \def\lb@temp{#2}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\relax
+ \else
+ \let\lb@next\lb@checkties
+ \unless\ifx\lb@temp\lb@empty
+ \lb@countties#2\lb@eoe,%
+ \iflb@onetie
+ \lb@@addtosorted{#2}%
+ \else
+ \def\lb@templist{}%
+ \lb@sortties#2\lb@eoe,%
+ \let\lb@next\lb@checkties
+ \lb@addtosorted{\noexpand\lb@tie,\lb@templist\noexpand\lb@endtie}%
+ \fi
+ \fi
+ \fi\lb@next
+ }
+\def\lb@countties#1,#2,{%
+ \def\lb@temp{#2}%
+ \ifx\lb@temp\lb@eoe
+ \lb@onetietrue
+ \else
+ \lb@onetiefalse
+ \expandafter\lb@gobbletoeoe
+ \fi
+ }%
+\def\lb@sortties#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\relax
+ \else
+ \let\lb@temp\lb@templist
+ \def\lb@templist{}%
+ \def\lb@entrykey{#1}%
+ \expandafter\lb@@sortties\lb@temp\lb@eoe,%
+ \let\lb@next\lb@sortties
+ \fi\lb@next
+ }
+\def\lb@@sortties#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \edef\lb@templist{\lb@templist\lb@entrykey,}%
+ \let\lb@next\relax
+ \else
+ \ifnum\lb@cs{\lb@entrykey @\lb@currentlist}{entrynumber}<\lb@cs{#1@\lb@currentlist}{entrynumber}%
+ \edef\lb@templist{\lb@templist\lb@entrykey,#1,}%
+ \let\lb@next\lb@finishties
+ \else
+ \edef\lb@templist{\lb@templist#1,}%
+ \let\lb@next\lb@@sortties
+ \fi
+ \fi
+ \lb@next
+ }
+\def\lb@finishties#1\lb@eoe,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@empty
+ \edef\lb@templist{\lb@templist#1}%
+ \fi
+ }%
+\def\lb@sortlist#1,{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \lb@ifcs{#1}{fields}%
+ {\def\lb@entrykey{#1}%
+ \let\lb@temp\lb@sortedentries
+ \def\lb@sortedentries{}%
+ \expandafter\lb@sort\lb@temp\lb@eoe,}%
+ {\lb@ifcs{\lb@currentlist}{oldnew}%
+ {\lb@xdefcs\lb@currentlist{oldnew}{%
+ \lb@cs{\lb@currentlist}{oldnew}#1,}}%
+ {\lb@xdefcs\lb@currentlist{oldnew}{#1,}}}%
+ \expandafter\lb@sortlist
+ \fi
+ }
+\newif\ifequalentry
+\def\ReadList#1{%
+ \lb@ifcs{#1}{entrylist}%
+ {\let\lb@makecitename\MakeCiteName
+ \let\MakeCiteName\MakeRefName
+ \lb@apptocs\lb@loopoverentries{#1}{entrylist}\lb@eoe,%
+ \let\MakeCiteName\lb@makecitename}%
+ {\lb@error{List `#1' doesn't exist}}%
+ }
+\def\lb@loopoverentries#1,{%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@eoe
+ \let\lb@next\relax
+ \else
+ \let\lb@next\lb@loopoverentries
+ \ifx\lb@temp\lb@tie
+ \equalentrytrue
+ \else
+ \ifx\lb@temp\lb@endtie
+ \equalentryfalse
+ \else
+ \def\EntryKey{#1}%
+ \MakeReference
+ \let\lb@next\lb@loopoverentries
+ \fi
+ \fi
+ \fi\lb@next
+ }
+\let\MakeReference\relax
+\def\CheckEntry#1#2{%
+ \ifcs{#1}{fields}%
+ {\def\lb@next{#2}%
+ \expandafter\lb@next}%
+ {}%
+ }
+\def\ReadAuthor{%
+ \ReadAuthorFor\EntryKey
+ }
+\def\ReadAuthorFor{%
+ \lb@readandloop{author}%
+ }%
+\let\ReadAuthors\ReadAuthor
+\let\ReadAuthorsFor\ReadAuthorFor
+\def\ReadEditor{%
+ \ReadEditorFor\EntryKey
+ }
+\def\ReadEditorFor{%
+ \lb@readandloop{editor}%
+ }%
+\let\ReadEditors\ReadEditor
+\let\ReadEditorsFor\ReadEditorFor
+\def\ReadName{%
+ \ReadNameFor\EntryKey
+ }
+\def\ReadNameFor{%
+ \lb@readandloop{name}%
+ }%
+\let\ReadNames\ReadName
+\let\ReadNamesFor\ReadNameFor
+\newcount\NameCount
+\def\lb@readandloop#1#2#3{%
+ \def\lb@makerefname{#3}%
+ \NameCount=0
+ \RetrieveFieldInFor{#1number}{#2}\lb@temp
+ \ifx\lb@temp\lb@empty
+ \def\lb@temp{0}%
+ \fi
+ \ifcase\lb@temp\relax
+ \or
+ \RetrieveFieldInFor{#1}{#2}\lb@temp
+ \expandafter\lb@loopovernames\expandafter{\lb@temp}\lb@eoe
+ \else
+ \RetrieveFieldInFor{#1}{#2}\lb@temp
+ \expandafter\lb@loopovernames\lb@temp\lb@eoe
+ \fi
+ }
+\def\lb@loopovernames#1{%
+ \def\lb@temp{#1}%
+ \unless\ifx\lb@temp\lb@eoe
+ \advance\NameCount1
+ \lb@@loopovernames#1%
+ \expandafter\lb@loopovernames
+ \fi
+ }
+\def\lb@@loopovernames#1#2#3#4{%
+ \iflb@abbreviate
+ \def\Firstname{}%
+ \lb@abbreviate#1 lb@end
+ \else
+ \def\Firstname{#1}%
+ \fi
+ \def\Von{#2}\def\Lastname{#3}\def\Junior{#4}%
+ \lb@makerefname
+ }
+\newif\iflb@abbreviate
+\def\lb@abbreviate#1 {%
+ \def\lb@temp{#1}%
+ \ifx\lb@temp\lb@endstring
+ \lb@trim\Firstname
+ \else
+ \lb@checkhyphen#1--\lb@eoe,%
+ \expandafter\lb@abbreviate
+ \fi
+ }
+\def\lb@checkhyphen#1-#2-{%
+ \lb@makeinitial#1\lb@eoe
+ \edef\Firstname{\Firstname\lb@@space\lb@temp}%
+ \def\lb@temp{#2}%
+ \unless\ifx\lb@temp\lb@empty
+ \lb@makeinitial#2\lb@eoe
+ \edef\Firstname{\Firstname-\lb@temp}%
+ \fi
+ \lb@gobbletoeoe
+ }
+\def\lb@makeinitial#1#2\lb@eoe{%
+ \def\lb@temp{#1\spacefactor1000.}%
+ }
+\def\AbbreviateFirstname{\lb@abbreviatetrue}
+
+%%% EXTERNAL FILE
+
+\def\lb@makelist#1#2#3#4#5{%
+ \lb@defcs{#1}{prevoldnew}{#2}%
+ \lb@defcs{#1}{prevorder}{#3}%
+ \lb@defcs{#1}{prevnameorder}{#4}%
+ \lb@defcs{#1}{prevsorted}{#5}%
+ }%
+\def\WriteImmediateInfo{%
+ \immediate\write\lb@write
+ }
+\def\WriteInfo{%
+ \write\lb@write
+ }
+\def\lb@storeentry#1{%
+ \WriteImmediateInfo{%
+ \noexpand\lb@defcs{#1}{fields}{\lb@uncs{#1}{fields}}%
+ }%
+ }
+\newread\lb@read
+\openin\lb@read=\jobname.lbr
+\ifeof\lb@read
+ \closein\lb@read
+ \let\lb@dolbr\relax
+\else
+ \closein\lb@read
+ \bgroup
+ \lb@makeendoffile
+ \expandafter\lb@readlbr\lb@input\jobname.lbr
+ \egroup
+\fi
+\newwrite\lb@write
+\immediate\openout\lb@write=\jobname.lbr
+\lb@dolbr
+\lb@restoreat
+\endinput \ No newline at end of file
diff --git a/macros/generic/librarian/tex/latex/librarian/librarian.sty b/macros/generic/librarian/tex/latex/librarian/librarian.sty
new file mode 100644
index 0000000000..f36c42518b
--- /dev/null
+++ b/macros/generic/librarian/tex/latex/librarian/librarian.sty
@@ -0,0 +1,16 @@
+% This is librarian.sty, a style file to load
+% the librarian package in LaTeX. Useful information
+% can be found in librarian-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: April 2010.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{librarian}[2010/03/01 v.1.0 Bibliographies all in TeX.]
+\makeatletter
+\let\lb@input\@@input
+\makeatother
+\input librarian.tex
+\endinput \ No newline at end of file
diff --git a/macros/generic/listofitems/README b/macros/generic/listofitems/README
new file mode 100644
index 0000000000..12bd57f366
--- /dev/null
+++ b/macros/generic/listofitems/README
@@ -0,0 +1,30 @@
+___________________________________
+
+ The
+ listofitems
+ package
+
+ v1.63
+
+ 21/08/2019
+___________________________________
+
+Authors : Christian Tellechea, Steven B. Segletes
+Maintainer: Christian Tellechea
+E-mail : unbonpetit@netc.fr (CT)
+ steven.b.segletes.civ@mail.mil (SBS)
+ Comments, bug reports and suggestions are welcome.
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Cette extension permet de capturer tous les \'el\'ements d'une liste
+dont le s\'eparateur a \'et\'e choisi par l'utilisateur et d'acc\'eder
+\`a tout \'el\'ement par une syntaxe simple.
+
+----------------------------------------------------------------------
+
+This package allows one to capture all the items of a list, for which
+the parsing character has been selected by the user, and to access any
+of these items with a simple syntax. \ No newline at end of file
diff --git a/macros/generic/listofitems/listofitems-en.pdf b/macros/generic/listofitems/listofitems-en.pdf
new file mode 100644
index 0000000000..018a8bdb6d
--- /dev/null
+++ b/macros/generic/listofitems/listofitems-en.pdf
Binary files differ
diff --git a/macros/generic/listofitems/listofitems-en.tex b/macros/generic/listofitems/listofitems-en.tex
new file mode 100644
index 0000000000..ca22711f26
--- /dev/null
+++ b/macros/generic/listofitems/listofitems-en.tex
@@ -0,0 +1,590 @@
+% This is the AMERICAN ENGLISH package documentation for "listofitems"
+\documentclass[american]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{listofitems,babel,xspace}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine}\usepackage[italic]{mathastext}
+\usepackage[scaled=0.8]{luximono}
+\usepackage[margin=3cm]{geometry}
+\usepackage{fancybox}
+\usepackage{xcolor}
+\usepackage{listings,MnSymbol}
+\def\listofitems{\textsf{\loiname}\xspace}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\makeatletter
+\def\code{\expandafter\code@i\string}
+\def\code@i#1{%
+ \begingroup
+ \par\nobreak\medskip\parindent0pt
+ \leftskip.1\linewidth
+ \catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+ \let\do\@makeother \dospecials
+ \ttfamily\small\@noligs
+ \obeylines\obeyspaces
+ \def\code@ii##1#1{##1\par\medbreak\endgroup}%
+ \code@ii
+}
+\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
+
+\newcommand\disable@lig[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\exemple[1][65]{%
+ \edef\par@@indent{\the\parindent}%
+ \par\nobreak\vskip5pt \noindent
+ \def\part@coeff{#1}%
+ \relax\leavevmode\null
+ \bgroup
+ \let\do\@makeother\dospecials
+ \catcode`\^^M\active \catcode`\ \active
+ \begingroup
+ \lccode`\~`\ \lowercase{\def~{ {}}}%
+ \lccode`\~`\^^M\lowercase{\endgroup\def~{\par\noexpand\leavevmode}}%
+ \@makeother:\disable@lig,\disable@lig-%
+ \exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+ \def\@tempa##1#1{%
+ \xdef\left@content{##1}%
+ \egroup
+ \def\right@content{##1}%
+ \begingroup
+ \newlinechar`\^^M\everyeof{\relax}%
+ \expandafter\grab@toks\scantokens\expandafter{\right@content}%
+ \endgroup
+ \exemple@@@
+ }%
+ \@tempa
+}
+
+\begingroup
+\catcode`#=12
+\gdef\exemple@@@{%
+ \begingroup
+ \fboxsep1pt\relax
+ \edef\part@left{\the\dimexpr0.\part@coeff\linewidth-\fboxsep-\fboxrule}%
+ \edef\part@right{\the\dimexpr\linewidth-0.\part@coeff\linewidth-\fboxsep-\fboxrule}%
+ \fbox{%
+ \parbox[c]\part@left{\vskip5pt\relax\ttfamily\footnotesize\left@content\vskip5pt}%
+ \parbox[c]\part@right{\vskip5pt\relax\normalfont\footnotesize\right@content\vskip5pt}%
+ }%
+ \vskip7.5pt\relax
+ \endgroup
+}
+\endgroup
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+\makeatother
+% FOR AMERICAN-ENGLISH VERSION
+\usepackage{setspace}
+\setstretch{1.01}
+\usepackage{enumitem}
+\newcommand\no[1]{number #1}
+\let\bsc\textsc
+\def\americanloidate{\expandafter\americanloidatei\loidate/}
+\def\americanloidatei#1/#2/#3/{\number#3\relax\space\ifcase #2 \or January\or February\or March\or April\or May\or
+ June\or July\or August\or September\or October\or November\or December\fi{} #1}
+%\newcommand\flag[1]{\textcolor{red}{#1}}% DIAGNOSTIC FLAG FOR FURTHER TRANSLATION
+%\newcommand\cflag[1]{\textcolor{blue}{#1}}% DIAGNOSTIC FLAG FOR FURTHER TRANSLATION
+%
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \renewcommand\thefootnote{\fnsymbol{footnote}}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries Package\par \Huge \listofitems\par}
+ \bigbreak
+ v\loiver
+ \smallbreak
+ \americanloidate
+ \vskip1.5cm
+ {Christian \bsc{Tellechea}\footnote{\texttt{unbonpetit@netc.fr}}\par Steven B. \bsc{Segletes}\footnote{steven.b.segletes.civ@mail.mil}}
+ \par
+ \endgroup
+ \vskip2cm
+ \leftskip=.2\linewidth \rightskip=.2\linewidth \small
+This simple package is designed to read a list of items whose
+ parsing separator may be selected by the user.
+Once the list is read, its items are stored in a structure that behaves
+ as a dimensioned array.
+As such, it becomes very easy to access an item
+ in the list by its number.
+For example, if the list is stored in the
+ macro \verb|\foo|, the item \no3 is designated by \verb|\foo[3]|.
+
+A component may, in turn, be a list with a parsing delimiter different from
+ the parent list, paving the way for
+ nesting and employing a syntax reminiscent of an array of
+ several dimensions of the type \verb|\foo[3,2]| to access the item \no2
+ of the list contained within the item \no3 of the top-tier list.
+\end{titlepage}
+\def\listofitems{\textsf\loiname\xspace}
+
+\section{Preface}
+\fbox{\vbox{\hsize\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax\textbf{Important}: As of version 1.62, \listofitems requires a \TeX{} engine that provides the \texttt{\string\expanded} primitive. If this is not available, an error message will be issued and version 1.61 will be loaded (last version working without the primitive \texttt{\string\expanded}); it is strongly recommended that you update your \LaTeX{} distribution in order to take advantage of the newer \TeX{} engines that provide for the use of this new primitive.}}\medbreak
+
+This package loads no external packages, must be used with the
+ \eTeX{} engine, and must be called in (pdf)\hskip0pt(Xe)\hskip0pt(lua)\LaTeX{} with
+ the invocation
+\code|\usepackage{listofitems}|
+
+and under (pdf)(Xe)(Lua)\TeX {} by way of
+\code|\input listofitems.tex|
+
+\section{Read a Simple List}
+\paragraph{Set the parsing separator}
+The default parsing separator is the comma and if we want change it, we must do so
+ before reading a list of items, with the definition
+ \verb|\setsepchar{<parsing-separator>}|.
+A \verb|<parsing-separator>| is a set of tokens which possess catcodes different from
+ 1 and 2 (the opening and closing braces), 14 (usually
+ \verb|%|) and 15.
+The token of catcode 6 (usually \verb|#|) is accepted only if it
+ is followed by an integer, denoting the argument of a macro;
+In no case should this token be provided alone as the \verb|<parsing-separator>|.
+Commands can be included in this set of tokens,
+including the \TeX{} primitive \verb|\par|.%
+\smallbreak
+The parsing-separator \verb|<delimiter>| ``\verb-/-'' is reserved by default
+ for nested lists (see page 3). %\ref{nested.list.delimiters}).
+It is therefore not proper to write "\verb-\setsepchar{/}-"
+ because the \listofitems{} package would misunderstand that you want to read
+ a nested list.
+To set ``\verb-/-'' as the \verb|<parsing-separator>| for a simple list,
+ it is necessary, using the optional argument, to choose
+ a different parsing-separator \verb|<delimiter>| for nested lists,
+ for example ``\verb|.|'', and write ``\verb+\setsepchar[.]{/}+''.
+\medbreak
+
+It is not possible to select \verb-|- as the \verb|<delimiter>| because it would
+ conflict with the logical \textbf{OR}, denoted ``\verb-||-'' (see below).
+However, one can work around this limitation, at one's own peril, writing
+ ``\verb-\setsepchar{{|}}-''.
+
+\paragraph{Read a list}
+To read the list of items, the \verb|\readlist<macro-list>{<list>}| should be called.
+In so doing, the \verb|<list>| is read and the items are stored in a macro, denoted
+ \verb|<macro-list>| which therefore acts as a table with the items of the
+ \verb|<list>|.
+If braces appear as part of a list item, they
+ \emph{must} be balanced.
+Tokens possessing the catcodes 6, 14 and 15 are not allowed in the lists.
+
+For example, to set the \verb|<macro-list>| named \verb|\foo|, we can write
+\code|\setsepchar{,}
+\readlist\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}|
+\setsepchar{,}
+\readlist\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+
+If the \verb|<list>| is contained in a macro, then this macro is expanded.
+Therefore, we can simply employ the syntax
+ \verb|\readlist<macro-list><macro>|
+as in
+
+\code|\setsepchar{,}
+\def\List{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+\readlist\foo\List|
+
+The macro \verb|\greadlist| makes \emph{global} assignments and therefore, enables the use of \verb|<macro-list>| outside of the group where \verb|\greadlist| has been executed.
+
+\paragraph{Access an item}
+The macro \verb|\foo| \emph{requires} a numeric argument in square brackets,
+ which we symbolically denote as $i$, indicating the rank of the item
+ you wish to access.
+So \verb|\foo[1]| is\footnote{\texttt{\textbackslash
+ foo[}$i$\texttt] requires 2 expansions to give the item.} ``\verb|12|''. Similarly, \verb|\foo[4]| is
+ ``\verb|{\bfseries z}|''.
+
+The number $i$ can also be negative in which case the counting is done from the end
+ of the list: $-1$ represents the last item, $-2$ the penultimate, etc.
+If the number of items is $n$, then the argument $-n$ is the first item.
+\medbreak
+
+In general, if a \verb|<list>| has a length $n$, then the index $i$ can be in the
+ interval $[1\,;n]$ or $[-n\,;-1]$.
+Otherwise, a compilation error occurs.
+
+If the index is empty, \verb|\foo[]| produces the complete \verb|<list>|.
+
+The macro \verb|\foosep| is created. It is used with the syntax
+ \verb|\foosep[<index>]| and allows access to the parsing-separator that follows the
+ item of rank \verb|<index>|.
+The last parsing-separator (the one following the last item) is empty.
+If the \verb|<index>| is empty, \verb|\foosep[]| is empty.
+
+\paragraph{Select several possible parsing separators}
+To specify several possible separators, use the \textbf{OR} operator,
+ denoted ``\verb-||-''.
+One can use this feature, for example, to isolate the terms in an
+ algebraic sum:
+
+\exemple/\setsepchar{+||-}
+\readlist\term{17-8+4-11}
+1) \term[1] (parsing separator = \termsep[1])\par
+2) \term[2] (parsing separator = \termsep[2])\par
+3) \term[3] (parsing separator = \termsep[3])\par
+4) \term[4] (parsing separator = \termsep[4])/
+
+\paragraph{Number of items}
+If we write \verb|\readlist<macro-list>{<list>}|, then the macro \verb|<macro-list>len|
+ con\-tains\footnote{That is to say, it is
+ purely expandable and grows into a number.}
+ the number of the items in \verb|<list>|.
+In the example with \verb|\foo|, the macro \verb|\foolen| expands to \foolen.
+
+\paragraph{View all items}
+For purposes of debugging, the macro \verb|\showitems<macro-list>| includes all
+ items from a list, while the star version displays these items ``detokenized.''
+ \footnote{The primitive \texttt{\string\detokenize}, conducting this
+ decomposition, inserts a space after each control sequence.}
+
+\exemple/\showitems\foo\par
+\showitems*\foo/
+
+The presentation of each list item is assigned to the macro \verb|\showitemsmacro|
+ whose code is
+
+\code|\newcommand\showitemsmacro[1]{%
+ \begingroup\fboxsep=0.25pt \fboxrule=0.5pt \fbox{\strut#1}\endgroup
+ \hskip0.25em\relax}|
+
+It is therefore possible ---~and desirable~--- to redefine it if we desire a
+ different presentation effect.\medbreak
+
+The macro \verb|\fbox| and associated dimensions \verb|\fboxsep| and
+ \verb|\fboxrule|, are defined by \listofitems, when \textit{not}
+ compiled under \LaTeX{}, to achieve the same result \textit{as if}
+ performed under \LaTeX.
+
+\paragraph{Suppression of extreme (leading/trailing) spaces}
+By default, \listofitems reads and retains the spaces located at
+ the beginning and end of an item.
+For these spaces to be ignored when reading the \verb|<list>|, execute the starred
+ version \verb|\readlist*<macro>{<list>}|:
+
+\exemple|\setsepchar{,}
+\readlist*\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+\showitems\foo|
+
+\paragraph{Managing empty items}
+By default, the \listofitems package retains and accounts for empty items.
+Thus, in the previous ex\-am\-ple, the 2nd expansion of \verb|\foo[7]| is empty.
+For empty items of the list (i.e., those list items defined by two
+ consecutive parsing delimiters) to be ignored, we must,
+ before invoking \verb|\readlist|,
+ execute the macro \verb|\ignoreemptyitems| .
+To return to the default package behavior, simply execute the macro
+ \verb|\reademptyitems|.
+
+This option can be used alone or in combination with \verb|\readlist*|,
+ in which case the suppression of extreme (leading/trailing) spaces occurs
+ \textit{before} \textsf{listofitems} ignores the empty list items:
+
+\exemple|\setsepchar{,}
+\ignoreemptyitems
+\readlist\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+a) number of items = \foolen\par
+ \showitems\foo
+
+\readlist*\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+b) number of items = \foolen\par
+ \showitems\foo|
+
+\paragraph{Iterate over a list}
+Once a list read by \verb|\readlist| and stored in a \verb|<macro-list>|, one may
+ iterate over the list with the syntax
+ \verb|\foreachitem <variable> \in <macro-list>{<code>}|:
+The \verb|<variable>| is a macro chosen by the user that will loop over the value
+ of each item in the list.
+
+The macro \verb|<variable>cnt| represents the sequence number of the item in
+ \verb|<variable>|.
+
+\exemple|\setsepchar{ }% parsing-separator = space
+\readlist\phrase{One phrase to test.}
+\foreachitem\word\in\phrase{List item number \wordcnt{}: \word\par}|
+
+\paragraph{Assign an item to a macro}
+The \verb|\itemtomacro<macro-list>[index]<macro>| assigns to the \verb|<macro>|
+ the item designated by \verb|<macro-list>[index]|.
+The \verb|<macro>| thus defined is purely expandable provided that the tokens
+ in the items are expandable.
+
+\exemple|\setsepchar{ }% parsing-separator = space
+\readlist\phrase{One phrase to test.}
+\itemtomacro\phrase[2]\aword
+\meaning\aword\par
+\itemtomacro\phrase[-1]\wordattheend
+\meaning\wordattheend|
+
+\section{Nested Lists}
+We speak of a list being ``nested'' when asking \listofitems to read a list where
+ the items are, in turn, understood as being a list (implying a parsing
+ separator different from the top-tier list).
+The nesting depth is not limited, but in practice, a depth of
+ 2 or 3 will usually suffice.
+
+\paragraph{Defining the parsing separators}\label{nested.list.delimiters}
+To indicate that a list will be nested, so that
+ the list parsing will be performed recursively, one must specify multiple
+ parsing separators, each corresponding to the particular tier of nesting.
+This list of parsing separators is itself given as a delimited list to
+ the macro \verb|\setsepchar|, with the syntax
+ \verb|\setsepchar[<delimiter>]{<delimited-list-of-parsing-separators>}|.
+
+By default, the \verb|<delimiter>| is ``\texttt{/}''.
+Thus, writing
+
+\code|\setsepchar{\\/,/ }|
+
+indicates a recursive depth of 3, with the parsing-separator list delimiter defaulting
+ to ``\texttt{/}'':
+
+\begin{itemize}[itemsep=0pt,topsep=0pt,partopsep=0pt,parsep=0pt,label=---]
+ \item Tier 1 items are parsed between ``\verb|\\|'' delimiters;
+ \item Tier 2 items are found within Tier 1 items, parsed between ``\verb|,|'' delimiters;
+ \item finally, the Tier 3 items are found within Tier 2 items, parsed between the
+ ``\verb*| |'' delimiters.
+\end{itemize}
+
+The \verb|<depth>| of nesting is contained in the purely expandable macro \verb|\nestdepth|.
+
+\paragraph{Read and access list items}
+For nested lists, the use of
+ indices obey the following rules:
+
+\begin{itemize}[itemsep=0pt,topsep=0pt,partopsep=0pt,parsep=0pt,label=---]
+ \item \verb|[]| is the main list, i.e., the argument of \verb|\readlist|;
+ \item \verb|[<i>]| means the item \no\verb|<i>| of the main list;
+ \item \verb|[<i>,<j>]| means the item \no\verb|<j>| of the list
+ mentioned in the previous point (a subitem);
+ \item \verb|[<i>,<j>,<k>]| means the item \no\verb|<k>| of the
+ list mentioned in the previous point (a sub-subitem);
+ \item etc.
+\end{itemize}
+
+As in the case of a non-nested list, the index may be negative.
+
+To read items, the syntax of \verb|\readlist| is exactly the same as
+ that for simple (non-nested) lists:
+
+\exemple|\setsepchar{\\/,/ }
+\readlist\baz{1,2 a b,3 c\\4 d e f,5,6\\7,,8, ,9 xy z}
+a) \string\baz[1] is \baz[1]\par
+b) \string\baz[1,1] is \baz[1,1]\par
+c) \string\baz[1,1,1] is \baz[1,1,1]\par
+b) \string\bar[1,2] is \baz[1,2]\par
+e) \string\baz[1,2,3] is \baz[1,2,3]\par
+f) \string\baz[-2,1,-1] is \baz[-2,1,-1]|
+
+\paragraph{The operator ``||''}
+This operator may be employed at any level of nesting.
+
+\exemple=\setsepchar[,]{+||-,*||/}
+\readlist\numbers{1+2*3-4/5*6}
+Term 1: \numbers[1]\par
+Term 2: \numbers[2] (factors: \numbers[2,1] and
+ \numbers[2,2])\par
+Term 3: \numbers[3] (factors: \numbers[3,1],
+ \numbers[3,2] and \numbers[3,3])=
+
+\paragraph{Number of list items}
+The macro \verb|\listlen<macro-list>[<index>]| requires 2 expansions
+ in order to
+ give the number of items in the list specified by the \verb|<index>|.
+The \verb|<depth>| of the \verb|<index>| must be strictly less than that
+ of the list.
+
+For the case where the \verb|<index>| is empty,
+ \verb|\listlen<macro-list>[]|, with 2 expansions, yields the identical result
+ as \verb|<macro-list>len| with 1 expansion.
+
+\exemple|\setsepchar{\\/,/ }
+\readlist\baz{1,2 a b,3 c\\4 d e f,5,6\\7,,8, ,9 xy z}
+a) \bazlen\ or \listlen\baz[]\par
+b) \listlen\baz[1]\par
+c) \listlen\baz[2]\par
+d) \listlen\baz[3]\par
+e) \listlen\baz[3,1]\par
+f) \listlen\baz[3,4]\par% 2 empty items
+g) \listlen\baz[3,5]|
+
+\paragraph{Displaying list items}
+The macro \verb|\showitems<macrolist>[<index>]| displays items from the list specified by
+ \verb|<index>|, in the same manner as \verb|\listlen|.
+The \verb|<depth>| of the \verb|<index>| must be strictly less than
+ that of the \verb|<list>|.
+
+\exemple|\setsepchar{\\/,/ }
+\readlist\baz{1,2 a b,3 c\\4 d e f,5,6\\7,,8, ,9 xy z}
+a) \showitems\baz[]\par
+b) \showitems\baz[1]\par
+c) \showitems\baz[2]\par
+d) \showitems\baz[3]\par
+e) \showitems\baz[3,1]\par
+f) \showitems\baz[3,4]\par% 2 empty items
+g) \showitems\baz[3,5]|
+
+
+
+\paragraph{Empty items and extreme (leading/trailing) spaces}
+The removal of empty items and/or leading/\allowbreak trailing spaces will occur in \emph{all}
+ the items, regardless of the degree of nesting.
+It is clear that a space, ``\verb*| |'', is useless as a parsing separator if you want
+ to use \verb|\readlist*|.
+Therefore, in the following example, ``\verb|*|'' is instead selected as the (3rd-tier)
+ parsing separator.
+
+Further, we remove only the extreme spaces, but retain empty items.
+
+\exemple|\setsepchar{\\/,/*}
+\readlist*\baz{1, 2*a*b ,3*c\\4*d*e*f,5,6\\7,,8, ,9* xy *z}
+a) \showitems\baz[]\par
+b) \showitems\baz[1]\par
+c) \showitems\baz[2]\par
+d) \showitems\baz[3]\par
+e) \showitems\baz[3,1]\par
+f) \showitems\baz[3,4]\par
+g) \showitems\baz[3,5]% "xy" without extreme spaces|
+
+\paragraph{Iterate over a list}
+The syntax \verb|\foreachitem <variable> \in <macro>[<index>]{<code>}|
+ remains valid where now the \verb|<index>| specifies the item
+ (understood as a list) on which to iterate.
+The \verb|<depth>| of the \verb|<index>| must be strictly less than
+ that of the \verb|<list>|.
+
+
+\paragraph{Assign an item to a macro}
+The syntax \verb|\itemtomacro<macro-list>[<index>]<macro>| remains valid to assign
+ to \verb|<macro>| the item specified by \verb|<macro-list>[<index>]|.
+
+\exemple[55]|\setsepchar[,]{\\, }
+\readlist\poem{There once was a runner named Dwight\\%
+Who could speed even faster than light.\\%
+He set out one day\\%
+In a relative way\\%
+And returned on the previous night.}
+\itemtomacro\poem[2]\verse
+2nd verse = \verse
+
+\itemtomacro\poem[2,-4]\word
+A word = \word|
+
+The macro \verb|\gitemtomacro| makes a global assignment.
+
+\section{Balanced Tokens}
+
+For the parsing of items, it is possible, with version 1.6, to take into
+ account the presence of \emph{balanced tokens}.
+Thus, if a list of paired tokens is defined, then each parsed item
+ in the list will extend to the first \verb|<separator>|, while assuring
+ that any paired tokens are balanced (i.e., occur in matched pairs within
+ the item).
+
+To define a list of balanced-token pairs, we use
+
+\code|\defpair{<tok1><tok2><tok3><tok4>...}|
+
+where the token list is read in pairs to form each matched-token pair.
+A \verb|<token>| that serves within a matched pair must consist of
+ a single character---%
+macros, primitives, spaces, braces, the token
+ "\verb|#|", as well as sets of several-tokens-between-%
+ braces are all forbidden.
+The two tokens which form a pair \emph{must} be different from
+ each other.
+
+\exemple/\setsepchar{+||-}
+\defpair{()[]}
+\readlist\terms{1+2*[3+4*(5+6-7)+8]-9+10}
+\showitems\terms/
+
+To return to the package's default behavior, that is, without
+ paired tokens, you must execute
+
+\code|\defpair{}|
+
+In an expression, in order to store in a macro that which
+ is between two matched tokens, we can call on
+
+\code|\insidepair<tok1><tok2>{<expression>}\macro|
+
+which will put in the \verb|\macro| that which lies between the pair
+ \verb|<tok1><tok2>| in the \verb|<expression>|.
+
+\exemple/\setsepchar{+||-}
+\defpair{()}
+\readlist\terms{1+2*(3+4*(5+6-7)+8)-9+10}
+\showitems\terms
+
+\itemtomacro\terms[2]\parenterm
+In the outer parenthesis:
+\insidepair()\parenterm\inbigparen
+"\inbigparen"
+
+In the inner parenthesis:
+\insidepair()\inbigparen\insmallparen
+"\insmallparen"/
+
+\section{The Code}
+
+Any suggestion, bug report, remark, request, addition or modification
+ of functionality is welcome; in this case, I invite users of
+ \listofitems to send me an email to \verb|unbonpetit@netc.fr|.\medbreak
+
+The code below is the exact verbatim of the file \verb|listofitems.tex|.
+I hope that the few comments scattered throughout it will
+ be enough for the user or the curious to understand the internal
+ machinery of this package:
+
+
+\lstinputlisting[
+ language=TeX,
+ inputencoding=latin1,
+ moretexcs={unless,ifcsname,ifdefined,detokenize,numexpr,dimexpr,glueexpr,unexpanded,expanded},
+ basicstyle=\small\ttfamily\color{black!25},
+ identifierstyle=\bfseries\color{white},%
+ backgroundcolor=\color{black!85},
+ keywordstyle=\bfseries\color{orange},
+ commentstyle=\color{cyan!66},
+ columns=fixed,
+ alsoletter={\_},
+ tabsize=2,
+ extendedchars=true,
+ showspaces=false,
+ showstringspaces=false,
+ numbers=left,
+ numberstyle=\tiny\ttfamily\color{black},
+ breaklines=true,
+ prebreak={\hbox{$\rhookswarrow$}},
+ breakindent=3em,
+ breakautoindent=true,
+ xleftmargin=1em,
+ xrightmargin=0pt,
+ lineskip=0pt,
+ numbersep=1em,
+ classoffset=1,
+ alsoletter={\_},
+ morekeywords={defpair,insidepair,setsepchar,greadlist,readlist,listlen,foreachitem,%
+ showitems,showitemsmacro,itemtomacro,gitemtomacro,ignoreemptyitems,reademptyitems},
+ keywordstyle=\bfseries\color{red!85!black},
+ classoffset=0,
+ ]{listofitems.tex}
+\end{document} \ No newline at end of file
diff --git a/macros/generic/listofitems/listofitems-fr.pdf b/macros/generic/listofitems/listofitems-fr.pdf
new file mode 100644
index 0000000000..6cf2128a85
--- /dev/null
+++ b/macros/generic/listofitems/listofitems-fr.pdf
Binary files differ
diff --git a/macros/generic/listofitems/listofitems-fr.tex b/macros/generic/listofitems/listofitems-fr.tex
new file mode 100644
index 0000000000..8eaff849df
--- /dev/null
+++ b/macros/generic/listofitems/listofitems-fr.tex
@@ -0,0 +1,438 @@
+% !TeX encoding = UTF-8
+% Ceci est la documentation du package "listofitems"
+%
+% Fichier compilé avec pdflatex
+\documentclass[french,a4paper]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{listofitems,babel}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine}\usepackage[italic,frenchmath]{mathastext}
+\usepackage[scaled=0.8]{luximono}
+\usepackage[margin=3cm]{geometry}
+\usepackage{fancybox,xcolor,xspace,listings,MnSymbol}
+\def\listofitems{\loiname\xspace}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\makeatletter
+\def\code{\expandafter\code@i\string}
+\def\code@i#1{%
+ \begingroup
+ \par\nobreak\medskip\parindent0pt
+ \leftskip.1\linewidth
+ \catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+ \let\do\@makeother \dospecials
+ \ttfamily\small\@noligs
+ \obeylines\obeyspaces
+ \catcode`\<13 \catcode`\>13
+ \begingroup\lccode`\~`\<\lowercase{\endgroup\def~{\begingroup$\langle$\itshape}}%
+ \begingroup\lccode`\~`\>\lowercase{\endgroup\def~{\/$\rangle$\endgroup}}%
+ \def\code@ii##1#1{##1\par\medbreak\endgroup}%
+ \code@ii
+}
+\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
+
+\newcommand\disable@lig[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\exemple[1][60]{%
+ \edef\par@@indent{\the\parindent}%
+ \par\nobreak\vskip5pt \noindent
+ \def\part@coeff{#1}%
+ \relax\leavevmode\null
+ \bgroup
+ \let\do\@makeother\dospecials
+ \catcode`\^^M\active \catcode`\ \active
+ \begingroup
+ \lccode`\~`\ \lowercase{\def~{ {}}}%
+ \lccode`\~`\^^M\lowercase{\endgroup\def~{\par\noexpand\leavevmode}}%
+ \@makeother:\disable@lig,\disable@lig-%
+ \exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+ \def\@tempa##1#1{%
+ \xdef\left@content{##1}%
+ \egroup
+ \def\right@content{##1}%
+ \begingroup
+ \newlinechar`\^^M\everyeof{\relax}%
+ \expandafter\grab@toks\scantokens\expandafter{\right@content}%
+ \endgroup
+ \exemple@@@
+ }%
+ \@tempa
+}
+
+\begingroup
+\catcode`#=12
+\gdef\exemple@@@{%
+ \begingroup
+ \fboxsep1pt\relax
+ \edef\part@left{\the\dimexpr0.\part@coeff\linewidth-\fboxsep-\fboxrule}%
+ \edef\part@right{\the\dimexpr\linewidth-0.\part@coeff\linewidth-\fboxsep-\fboxrule}%
+ \fbox{%
+ \parbox[c]\part@left{\vskip5pt\relax\ttfamily\footnotesize\left@content\vskip5pt}%
+ \parbox[c]\part@right{\vskip5pt\relax\normalfont\footnotesize\right@content\vskip5pt}%
+ }%
+ \vskip7.5pt\relax
+ \endgroup
+}
+\endgroup
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+\def\longfrloidate@i#1/#2/#3\@nil{\number#3\relax\ifnum#3=1 \ier\fi\space \ifcase #2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\def\longfrloidate{\expandafter\longfrloidate@i\loidate\@nil}
+\makeatother
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \renewcommand\thefootnote{\fnsymbol{footnote}}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries L'extension\par \Huge \listofitems\par}
+ \bigbreak
+ v\loiver
+ \smallbreak
+ \longfrloidate
+ \vskip1.5cm
+ {Christian \bsc{Tellechea}\footnote{\texttt{unbonpetit@netc.fr}}\par Steven B. \bsc{Segletes}\footnote{steven.b.segletes.civ@mail.mil}}
+ \par
+ \endgroup
+ \vskip2cm
+ \leftskip=.2\linewidth \rightskip=.2\linewidth \small
+ Cette petite extension pour est destinée à lire une liste d'éléments dont le séparateur peut être choisi par l'utilisateur. Une fois la liste lue, ses éléments sont stockés dans une structure qui se comporte comme un tableau unidimensionnel et ainsi, il devient très facile d'accéder à un élément de la liste par son numéro. Par exemple, si la liste est stockée dans la macro \verb|\foo|, l'élément \no3 est désigné par \verb|\foo[3]|.
+
+ Un élément peut à son tour être une liste disposant d'un autre séparateur que celui de la liste de niveau supérieur, ce qui ouvre la voie à des imbrications et donne une syntaxe rappelant celle des tableaux à plusieurs dimensions du type \verb|\foo[3,2]| pour accéder à l'élément \no2 de la liste contenue dans l'élément \no3 de la liste de plus haut niveau.
+\end{titlepage}
+\def\listofitems{\textsf\loiname\xspace}
+\section{Avant-propos}
+\fbox{\vbox{\hsize\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax\textbf{Important} : à partir de la version 1.62, \listofitems nécessite un moteur \TeX{} fournissant la primitive \texttt{\string\expanded}. Si ce n'est pas le cas, un message d'erreur sera émis et la version 1.61 sera chargée (dernière version fonctionnant sans la primitive \texttt{\string\expanded}) : il est vivement conseillé de mettre à jour sa distribution \LaTeX{} afin de profiter d'un moteur \TeX{} récent permettant l'utilisation de cette nouvelle primitive.}}\medbreak
+
+Cette extension ne requiert aucun package, doit être utilisée avec un moteur \eTeX, et doit être appelée sous (pdf)(Xe)(lua)\LaTeX{} par
+\code|\usepackage{listofitems}|
+
+et sous (pdf)(Xe)(lua)\TeX{} par
+\code|\input listofitems.tex|
+
+\section{Lire une liste simple}
+\paragraph{Définir le séparateur}
+Le \verb|<séparateur>| par défaut est la virgule et si l'on souhaite en changer, il faut, avant de lire une liste d'éléments, le définir avec \verb|\setsepchar{<séparateur>}|. Un \verb|<séparateur>| est un ensemble de tokens dont les catcodes sont différents de 1 et 2 (les accolades ouvrantes et fermantes), 14 (habituellement \verb|%|) et 15. Le token de catcode 6 (habituellement \verb|#|) n'est accepté que s'il est suivi d'un entier auquel cas l'ensemble désigne l'argument d'une macro; en aucun cas ce token ne doit se trouver seul dans le \verb|<séparateur>|. Des commandes peuvent se trouver dans cet ensemble de tokens, y compris la primitive \verb|\par|.
+\smallbreak
+Le \verb|<séparateur>| \og\verb-/-\fg{} est réservé par défaut pour les listes imbriquées (voir page~\pageref{sep.listes.imbriquees}). Il ne faut donc pas écrire \og\verb-\setsepchar{/}-\fg{} car \listofitems comprendrait que l'on souhaite lire une liste imbriquée. Pour définir \og\verb-/-\fg comme \verb|<séparateur>| d'une liste simple, il faut, à l'aide de l'argument optionnel, choisir un autre \verb|<séparateur>| de listes imbriquées, par exemple \og\verb|.|\fg{} et écrire \og\verb+\setsepchar[.]{/}+\fg.
+\medbreak
+
+Il n'est pas possible de choisir \og\verb-|-\fg{} comme \verb|<séparateur>| car il entrerait en conflit avec l'opérateur logique \textbf{OU} noté \og\verb-||-\fg{} (voir plus bas). On peut cependant contourner cette limitation, à ses risques et périls, en écrivant \og\verb-\setsepchar{{|}}-\fg.
+
+\paragraph{Lire la liste}
+Pour lire la liste d'éléments, la commande \verb|\readlist<macroliste>{<liste>}| doit être appelée. Ce faisant, la \verb|<liste>| est lue et les éléments sont stockés dans une macro, notée \verb|<macroliste>| qui dès lors, se comporte comme un tableau composé des éléments de la \verb|<liste>|. Un élément est un ensemble de tokens dont les accolades \emph{doivent} être équilibrées. Les tokens de catcode 6 seuls, 14 et 15 ne sont pas autorisés dans les listes.
+
+Par exemple, pour définir la \verb|<macroliste>| nommée \verb|\foo|, on peut écrire
+\code|\setsepchar{,}
+\readlist\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}|
+\setsepchar{,}
+\readlist\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+
+Si la \verb|<liste>| est contenue dans une macro, alors cette macro est développée par \listofitems. On peut donc écrire \verb|\readlist<macroliste><macro>| ce qui donnerait
+
+\code|\setsepchar{,}
+\def\liste{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+\readlist\foo\liste|
+
+La macro \verb|\greadlist| agit comme \verb|\readlist| mais effectue des assignations \emph{globales} et par conséquent, la \verb|<macroliste>| est utilisable hors du groupe où a été exécutée \verb|\greadlist|.
+
+\paragraph{Accéder à un élément}
+La macro \verb|\foo| attend un argument numérique \emph{obligatoire} entre crochets, que nous notons $i$ et qui désigne le rang de l'élément auquel on souhaite accéder. Ainsi, \verb|\foo[1]| est\footnote{Il faut 2 développements à \texttt{\textbackslash foo[}$i$\texttt] pour obtenir l'élément \no$i$.} \og\verb|12|\fg. De la même façon, \verb|\foo[4]| est \og\verb|{\bfseries z}|\fg.
+
+Le nombre $i$ peut également être négatif auquel cas le comptage se fait à partir de la fin de la liste : $-1$ représente le dernier rang, $-2$ l'avant-dernier, etc. Si le nombre d'éléments est $n$, alors l'argument $-n$ est le premier élément.
+\medbreak
+
+D'une façon générale, si une \verb|<liste>| a une longueur $n$, alors l'index $i$ peut se trouver dans l'intervalle $[1\,;n]$ ou $[-n\,;-1]$ et dans le cas contraire, une erreur de compilation survient.
+
+Si l'index est vide, alors \verb|\foo[]| se développe en la \verb|<liste>| entière.
+
+\paragraph{Accéder à un séparateur}
+Lorsque \verb|\readlist\foo{<liste>}| est exécuté, la macro \verb|\foosep| est créé. Elle s'utilise avec la syntaxe \verb|\foosep[<index>]| et permet d'accéder au séparateur qui suit l'élément de rang \verb|<index>|. Le dernier séparateur (celui qui suit le dernier élément) est vide. Si l'\verb|<index>| est vide, \verb|\foosep[]| a un développement vide.
+
+\paragraph{Choisir plusieurs séparateurs possibles}
+Pour spécifier plusieurs séparateurs possibles, il faut utiliser l'opérateur \textbf{OU} noté \og\verb-||-\fg{}. On peut par exemple utiliser cette fonctionnalité pour isoler les termes dans une somme algébrique :
+
+\exemple/\setsepchar{+||-}
+\readlist\terme{17-8+4-11}
+1) \terme[1] (séparateur = \termesep[1])\par
+2) \terme[2] (séparateur = \termesep[2])\par
+3) \terme[3] (séparateur = \termesep[3])\par
+4) \terme[4] (séparateur = \termesep[4])/
+
+\paragraph{Nombre d'éléments}
+Si l'on écrit \verb|\readlist<macroliste>{<liste>}| alors la macro \verb|<macroliste>len| contient\footnote{C'est-à-dire qu'elle est purement développable et se développe en un nombre} le nombre d'éléments de la \verb|<liste>|. Dans l'exemple avec \verb|\foo|, la macro \verb|\foolen| contient \foolen.
+
+\paragraph{Afficher tous les éléments}
+À des fins de débogage, la macro \verb|\showitems<macroliste>| compose tous les éléments d'une liste tandis que que sa version étoilée affiche ces éléments \og détokénisés\footnote{La primitive \texttt{\string\detokenize} qui procède à cette dénaturation insère un espace après chaque séquence de contrôle.}\fg.
+
+\exemple/\showitems\foo\par
+\showitems*\foo/
+
+La présentation de chaque élément est confiée à la macro \verb|\showitemsmacro| dont le code est
+
+\code|\newcommand\showitemsmacro[1]{%
+ \begingroup\fboxsep=0.25pt \fboxrule=0.5pt \fbox{\strut#1}\endgroup
+ \hskip0.25em\relax}|
+
+Il est donc possible ---~et souhaitable~--- de la redéfinir si l'on cherche un autre effet.
+\medbreak
+
+La macro \verb|\fbox| et ses dimensions afférentes \verb|\fboxsep| et \verb|\fboxrule| sont définies par \listofitems lorsqu'on ne compile pas sous \LaTeX{} de façon à obtenir le même résultat qu'avec \LaTeX.
+
+\paragraph{Suppression des espaces extrêmes}
+Par défaut, \listofitems lit et prend en compte le (ou les) espaces se trouvant au début et à la fin d'un élément. Pour que ces espaces soient ignorés lors de la lecture de la \verb|<liste>|, il faut exécuter la version étoilée \verb|\readlist*<macro>{<liste>}|:
+
+\exemple|\setsepchar{,}
+\readlist*\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+\showitems\foo|
+
+\paragraph{Gestion des éléments vides}
+Par défaut, \listofitems prend en compte les éléments vides. Ainsi, dans l'exemple précédent, le 2-développement de \verb|\foo[7]| est vide. Pour que des éléments vides (ceux délimités par deux séparateurs consécutifs dans la liste) soient ignorés, il faut, avant de lancer la macro \verb|\readlist|, exécuter la macro \verb|\ignoreemptyitems|. La macro \verb|\reademptyitems| revient au comportement par défaut.
+
+Cette option peut être utilisée seule ou combinée avec \verb|\readlist*| auquel cas la suppression des espaces extrêmes intervient \emph{avant} que \listofitems n'ignore les éléments vides :
+
+\exemple|\setsepchar{,}
+\ignoreemptyitems
+\readlist\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+a) nombre d'éléments = \foolen\par
+ \showitems\foo
+
+\readlist*\foo{12,abc, x y ,{\bfseries z}, ,\TeX,,!}
+b) nombre d'éléments = \foolen\par
+ \showitems\foo|
+
+\paragraph{Itérer sur la liste}
+Une fois une liste lue par \verb|\readlist| et stockée dans une \verb|<macroliste>|, la commande \verb|\foreachitem <variable> \in <macroliste>{<code>}| itère sur la liste : la \verb|<variable>| est une macro choisire par l'utilisateur qui prendra tour à tour la valeur de chaque élément.
+
+La macro \verb|<variable>cnt| représente le numéro de l'élément contenu dans \verb|<variable>|.
+
+\exemple|\setsepchar{ }% séparateur = espace
+\readlist\phrase{Une phrase de test.}
+\foreachitem\mot\in\phrase{Le mot numéro \motcnt{} : \mot\par}|
+
+\paragraph{Assigner un élément à une macro}
+La commande \verb|\itemtomacro<macroliste>[index]<macro>| assigne à la \verb|<macro>| l'élément désigné par \verb|<macroliste>[index]|. La \verb|<macro>| ainsi définie est purement développable, sous réserve que l'élément qu'elle contient le soit.
+
+\exemple|\setsepchar{ }% séparateur = espace
+\readlist\phrase{Une phrase de test.}
+\itemtomacro\phrase[2]\unmot
+\meaning\unmot\par
+\itemtomacro\phrase[-1]\motdelafin
+\meaning\motdelafin|
+
+\section{Listes imbriquées}
+On parle de liste \og imbriquée\fg lorsque l'on demande à \listofitems de lire une liste où les éléments sont à leur tour compris comme une liste (dont le séparateur est différent de la liste de niveau supérieur). Le nombre d'imbrication n'est pas limité, mais dans la pratique, un niveau d'imbrication de 2, voire 3, semble un maximum.
+
+\paragraph{Définir les séparateurs}\label{sep.listes.imbriquees}
+Pour indiquer que les éléments de la liste doivent eux-mêmes être compris comme des listes et que la recherche des éléments sera récursive, il faut spécifier plusieurs \verb|<séparateurs>|, chacun correspondant à un niveau d'imbrication. Pour déclarer une \verb|<liste de séparateurs>| il faut définir le \verb|<séparateur>| de cette \verb|<liste de séparateurs>| à l'aide de l'argument optionnel de la macro \verb|\setsepchar| et écrire \verb|\setsepchar[<separateur>]{<liste des séparateurs>}|.
+
+Par défaut, le \verb|<séparateur>| est \og\verb-/-\fg. Ainsi, si l'on donne l'ordre
+
+\code|\setsepchar{\\/,/ }|
+
+on indique une profondeur récursive de 3 et on choisit comme séparateur de la \verb|<liste des séparateurs>| le caractère par défaut \og\verb-/-\fg{} :
+
+\begin{itemize}
+ \item les éléments de niveau 1 sont trouvés entre les séparateurs \og\verb|\\|\fg;
+ \item les éléments de niveau 2 sont trouvés dans les éléments de niveau 1 entre les séparateurs \og\verb|,|\fg{};
+ \item enfin, les éléments de niveau 3 sont trouvés dans ceux de niveau 2 entre les séparateurs \og\verb*| |\fg.
+\end{itemize}
+
+La \verb|<profondeur>| de recherche est contenue dans la macro purement développable \verb|\nestdepth|.
+
+\paragraph{Lire et accéder aux éléments}
+Pour les listes imbriquées, les index obéissent à la règle suivante :
+
+\begin{itemize}
+ \item \verb|[]| désigne la liste principale, c'est-à-dire l'argument de \verb|\readlist|;
+ \item \verb|[<i>]| désigne l'élément \no\verb|<i>| de la liste principale;
+ \item \verb|[<i>,<j>]| désigne l'élément \no\verb|<j>| de la liste constituée par l'élément évoqué au point précédent;
+ \item \verb|[<i>,<j>,<k>]| désigne l'élément \no\verb|<k>| de la liste constituée par l'élément évoqué au point précédent;
+ \item etc.
+\end{itemize}
+
+Comme pour les liste non imbriquées, les index peuvent être négatifs.
+
+Pour lire les éléments, la syntaxe de \verb|\readlist| est exactement la même qu'avec les listes simples :
+
+\exemple|\setsepchar{\\/,/ }
+\readlist\baz{1,2 a b,3 c\\4 d e f,5,6\\7,,8, ,9 xy z}
+a) \string\baz[1] est \baz[1]\par
+b) \string\baz[1,1] est \baz[1,1]\par
+c) \string\baz[1,1,1] est \baz[1,1,1]\par
+b) \string\bar[1,2] est \baz[1,2]\par
+e) \string\baz[1,2,3] est \baz[1,2,3]\par
+f) \string\baz[-2,1,-1] est \baz[-2,1,-1]|
+
+\paragraph{L'opérateur \og||\fg}
+Cet opérateur peut se trouver dans n'importe quel niveau d'imbrication.
+
+\exemple=\setsepchar[,]{+||-,*||/}
+\readlist\nombres{1+2*3-4/5*6}
+Terme 1 : \nombres[1]\par
+Terme 2 : \nombres[2] (facteurs : \nombres[2,1] et
+ \nombres[2,2])\par
+Terme 3 : \nombres[3] (facteurs : \nombres[3,1],
+ \nombres[3,2] et \nombres[3,3])=
+
+\paragraph{Nombre d'éléments}
+La macro \verb|\listlen<macrolist>[<index>]| nécessite 2 développements pour donner le nombre d'éléments de la liste spécifiée par l'\verb|<index>|.\medbreak
+
+La \verb|<profondeur>| de l'\verb|<index>| doit être strictement inférieure à celle de la \verb|<liste>|.\medbreak
+
+Dans le cas d'un \verb|<index>| vide, \verb|\listlen<macrolist>[]| donne en 2 développements le même résultat que \verb|<macrolist>len| qui le donne en 1.
+
+\exemple|\setsepchar{\\/,/ }
+\readlist\baz{1,2 a b,3 c\\4 d e f,5,6\\7,,8, ,9 xy z}
+a) \bazlen\ ou \listlen\baz[]\par
+b) \listlen\baz[1]\par
+c) \listlen\baz[2]\par
+d) \listlen\baz[3]\par
+e) \listlen\baz[3,1]\par
+f) \listlen\baz[3,4]\par% 2 éléments vides
+g) \listlen\baz[3,5]|
+
+\paragraph{Afficher les éléments}
+La macro \verb|\showitems<macrolist>[<index>]| affiche les éléments de la liste spécifiée par \verb|<index>|, selon le même principe que \verb|\listlen|.\medbreak
+
+La \verb|<profondeur>| de l'\verb|<index>| doit être strictement inférieure à celle de la \verb|<liste>|.
+
+\exemple|\setsepchar{\\/,/ }
+\readlist\baz{1,2 a b,3 c\\4 d e f,5,6\\7,,8, ,9 xy z}
+a) \showitems\baz[]\par
+b) \showitems\baz[1]\par
+c) \showitems\baz[2]\par
+d) \showitems\baz[3]\par
+e) \showitems\baz[3,1]\par
+f) \showitems\baz[3,4]\par% 2 éléments vides
+g) \showitems\baz[3,5]|
+
+\paragraph{Éléments vides et espaces extrêmes}
+La suppression des éléments vides et/ou des espaces extrêmes intervient dans \emph{tous} les éléments, quel que soit le degré d'imbrication. Il est clair que choisir un espace comme séparateur est inutile si l'on veut utiliser \verb|\readlist*|. C'est pourquoi dans cet exemple, \og\verb|*|\fg est choisi comme séparateur.
+
+Dans cet exemple, on ne supprime que les espaces extrêmes en gardant les éléments vides.
+
+\exemple|\setsepchar{\\/,/*}
+\readlist*\baz{1, 2*a*b ,3*c\\4*d*e*f,5,6\\7,,8, ,9* xy *z}
+a) \showitems\baz[]\par
+b) \showitems\baz[1]\par
+c) \showitems\baz[2]\par
+d) \showitems\baz[3]\par
+e) \showitems\baz[3,1]\par
+f) \showitems\baz[3,4]\par
+g) \showitems\baz[3,5]% "xy" sans espaces extrêmes|
+
+\paragraph{Itérer sur une liste}
+La syntaxe \verb|\foreachitem <variable> \in <macro>[<index>]{<code>}| reste valable où désormais, l'\verb|<index>| spécifie sur quel élément (compris comme une liste) on veut itérer.\medbreak
+
+La \verb|<profondeur>| de l'\verb|<index>| doit être strictement inférieure à celle de la \verb|<liste>|.
+
+\paragraph{Assigner un élément à une macro}
+La syntaxe \verb|\itemtomacro<macroliste>[<index>]<macro>| reste valable pour assigner à \verb|<macro>| l'élément spécifié par \verb|<macroliste>[<index>]|.
+
+\exemple[55]|\setsepchar[,]{\\, }
+\readlist\poeme{J'arrive tout couvert encore de rosée\\%
+Que le vent du matin vient glacer à mon front.\\%
+Souffrez que ma fatigue à vos pieds reposée\\%
+Rêve des chers instants qui la délasseront.}% 2e strophe de << Green >>, Paul Verlaine
+\itemtomacro\poeme[2]\vers
+2e vers = \vers
+
+\itemtomacro\poeme[2,-4]\mot
+Un mot = \mot|
+
+La macro \verb|\gitemtomacro| fait une assignation globale.
+
+\section{Tokens appariés}
+Pour le découpage des items, il est possible à partir de la version 1.6, de tenir compte de la présence de caractères \emph{appariés}. Ainsi, si une liste de caractères appariés est définie, chaque item s'étend jusqu'au prochain \verb|<séparateur>| qui équilibre les tokens appariés.
+
+Pour définir une liste de tokens appariés, on utilise
+
+\code|\defpair{<tok1><tok2><tok3><tok4>...}|
+
+où les tokens sont lus deux par deux pour former les paires d'appariement. Un \verb|<token>| d'appariement doit être constitué d'un seul caractère; les macros, primitives, espaces, accolades, token «\verb|#|», ensembles de plusieurs tokens entre accolades sont interdits. Deux tokens formant une paire \emph{doivent} être différents.
+
+\exemple/\setsepchar{+||-}
+\defpair{()[]}
+\readlist\termes{1+2*[3+4*(5+6-7)+8]-9+10}
+\showitems\termes/
+
+Pour revenir au comportement par défaut, c'est-à-dire sans tokens appariés, il faut exécuter
+
+\code|\defpair{}|
+
+Dans une expression, pour stocker dans une macro ce qui se trouve entre deux tokens appariés, on peut faire appel à
+
+\code|\insidepair<tok1><tok2>{<expression>}\macro|
+
+qui mettra dans la \verb|\macro| ce qui de trouve entre la paire \verb|<tok1><tok2>| dans l'\verb|<expression>|.
+
+\exemple/\setsepchar{+||-}
+\defpair{()}
+\readlist\termes{1+2*(3+4*(5+6-7)+8)-9+10}
+\showitems\termes
+
+\itemtomacro\termes[2]\parenterm
+Dans la parenthèse extérieure :
+\insidepair()\parenterm\inbigparen
+"\inbigparen"
+
+Dans la parenthèse intérieure :
+\insidepair()\inbigparen\insmallparen
+"\insmallparen"/
+
+\section{Le code}
+Toute suggestion, remontée de bug, remarque, demande, ajout ou modification de fonctionnalité est bienvenue; dans ce cas, j'invite les utilisateurs de \listofitems à m'envoyer un email à \verb|unbonpetit@netc.fr|.\medbreak
+
+Le code ci-dessous est l'exact verbatim du fichier \verb|listofitems.tex|. J'espère que les quelques commentaires qui le parsèment de-ci de-là seront suffisants pour que l'utilisateur ou le curieux comprenne la machinerie interne de ce package :
+
+\lstinputlisting[
+ language=TeX,
+ inputencoding=latin1,
+ moretexcs={unless,ifcsname,ifdefined,detokenize,numexpr,dimexpr,glueexpr,unexpanded,expanded},
+ basicstyle=\small\ttfamily\color{black!25},
+ identifierstyle=\bfseries\color{white},%
+ backgroundcolor=\color{black!85},
+ keywordstyle=\bfseries\color{orange},
+ commentstyle=\color{cyan!66},
+ columns=fixed,
+ alsoletter={\_},
+ tabsize=2,
+ extendedchars=true,
+ showspaces=false,
+ showstringspaces=false,
+ numbers=left,
+ numberstyle=\tiny\ttfamily\color{black},
+ breaklines=true,
+ prebreak={\hbox{$\rhookswarrow$}},
+ breakindent=3em,
+ breakautoindent=true,
+ xleftmargin=1em,
+ xrightmargin=0pt,
+ lineskip=0pt,
+ numbersep=1em,
+ classoffset=1,
+ alsoletter={\_},
+ morekeywords={defpair,insidepair,setsepchar,greadlist,readlist,listlen,foreachitem,%
+ showitems,showitemsmacro,itemtomacro,gitemtomacro,ignoreemptyitems,reademptyitems},
+ keywordstyle=\bfseries\color{red!85!black},
+ classoffset=0,
+ ]{listofitems.tex}
+\end{document} \ No newline at end of file
diff --git a/macros/generic/listofitems/listofitems.sty b/macros/generic/listofitems/listofitems.sty
new file mode 100644
index 0000000000..fb45d1dfab
--- /dev/null
+++ b/macros/generic/listofitems/listofitems.sty
@@ -0,0 +1,4 @@
+\expandafter\let\csname loi_fromsty\endcsname\relax
+\input listofitems.tex
+\ProvidesPackage\loiname[\loidate\space v\loiver\space Grab items in lists using user-specified sep char (CT)]
+\endinput \ No newline at end of file
diff --git a/macros/generic/listofitems/listofitems.tex b/macros/generic/listofitems/listofitems.tex
new file mode 100644
index 0000000000..6e2189f249
--- /dev/null
+++ b/macros/generic/listofitems/listofitems.tex
@@ -0,0 +1,606 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "listofitems"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\loiname {listofitems} %
+\def\loiver {1.63} %
+% %
+\def\loidate {2019/08/21} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Author : Christian Tellechea, Steven B. Segletes (contributor) %
+% Status : Maintained %
+% Maintainer : Christian Tellechea %
+% Email : unbonpetit@netc.fr %
+% steven.b.segletes.civ@mail.mil %
+% Package URL: https://www.ctan.org/pkg/listofitems %
+% Bug tracker: https://framagit.org/unbonpetit/listofitems/issues %
+% Repository : https://framagit.org/unbonpetit/listofitems/tree/master
+% Copyright : Christian Tellechea 2016-2019 %
+% Licence : Released under the LaTeX Project Public License v1.3c %
+% or later, see http://www.latex-project.org/lppl.txt %
+% Files : 1) listofitems.tex %
+% 2) listofitems.sty %
+% 3) listofitems-fr.tex %
+% 4) listofitems-fr.pdf %
+% 5) listofitems-en.tex %
+% 6) listofitems-en.pdf %
+% 7) README %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\expandafter\edef\csname loi_restorecatcode\endcsname{\catcode\number`\_=\number\catcode`\_\relax}
+\catcode`\_11
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% gestion des erreurs + annonce package %%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\unless\ifdefined\loi_fromsty
+ \immediate\write -1 {Package: \loidate\space v\loiver\space Grab items in lists using user-specified sep char (CT)}%
+\fi
+
+\ifdefined\PackageError
+ \def\loi_error#1{\PackageError\loiname{#1}{Read the \loiname\space manual}}% pour LaTeX
+\else
+ \def\loi_error#1{\errmessage{Package \loiname\space Error: #1^^J}}% pour TeX
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% vérification des prérequis %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\loi_checkprimitive#1#2#3{% Vérifie que #1 est une primitive et sinon, émet le message #2 et exécute #3
+ \begingroup
+ \edef\__tempa{\meaning#1}\edef\__tempb{\string#1}\expandafter
+ \endgroup
+ \ifx\__tempa\__tempb\else
+ \loi_error{#2}%
+ \def\loi_temp{#3}%
+ \loi_restorecatcode\expandafter\loi_temp
+ \fi
+}
+\loi_checkprimitive\eTeXversion
+ {You are not using an eTeX engine, listofitems cannot work.}
+ {\endinput}%
+\loi_checkprimitive\expanded
+ {the \string\expanded\space primitive is not provided by your TeX engine, listofitems v\loiver\space cannot work: loading listofitems v1.61}
+ {\input listofitemsold.tex\relax\endinput}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macros auxiliaires %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\loi_quark{\loi_quark}
+\long\def\loi_identity#1{#1}
+\long\def\loi_gobarg#1{}
+\long\def\loi_first#1#2{#1}
+\long\def\loi_second#1#2{#2}
+\long\def\loi_firsttonil#1#2\_nil{#1}
+\long\def\loi_antefi#1#2\fi{#2\fi#1}
+\long\def\loi_exparg#1#2{\expandafter\loi_exparg_a\expandafter{#2}{#1}}% \loi_exparg{<a>}{<b>} devient <a>{<*b>}
+\long\def\loi_exparg_a#1#2{#2{#1}}
+\long\def\loi_expafter#1#2{\expandafter\loi_expafter_a\expandafter{#2}{#1}}% \loi_expafter{<a>}{<b>} devient <a><*b>
+\long\def\loi_expafter_a#1#2{#2#1}
+\def\loi_macroname{\loi_ifinrange\escapechar[[0:255]]{\expandafter\loi_gobarg}{}\string}
+\def\loi_argcsname#1#{\loi_argcsname_a{#1}}
+\def\loi_argcsname_a#1#2{\loi_expafter{#1}{\csname#2\endcsname}}
+\long\def\loi_addtomacro#1#2{\loi_exparg{\def#1}{#1#2}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% macros de test %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\loi_ifnum#1{\ifnum#1\expandafter\loi_first\else\expandafter\loi_second\fi}
+\long\def\loi_ifx#1{\ifx#1\expandafter\loi_first\else\expandafter\loi_second\fi}
+\long\def\loi_ifempty#1{\loi_exparg\loi_ifx{\expandafter\relax\detokenize{#1}\relax}}
+\def\loi_ifstar#1#2{\def\loi_ifstar_a{\loi_ifx{*\loi_nxttok}{\loi_first{#1}}{#2}}\futurelet\loi_nxttok\loi_ifstar_a}
+\edef\loi_escapechar{\expandafter\loi_gobarg\string\\}
+\long\def\loi_ifcsexpandable#1{% #1 est-il constitué d'une seule sc _développable_ ?
+ \loi_ifempty{#1}
+ {\loi_second
+ }
+ {\loi_ifspacefirst{#1}
+ {\loi_second% si espace en 1er, faux
+ }
+ {\csname loi_\if\loi_escapechar\expandafter\loi_firsttonil\detokenize{#1}\_nil first\else second\fi\endcsname
+ {\loi_exparg\loi_ifempty{\loi_gobarg#1}% 1 seul arg commençant par "\" ?
+ {\def\loi_tempa{#1}\loi_exparg{\def\loi_tempb}{#1}% est-il développable ?
+ \expandafter\unless\loi_ifx{\loi_tempa\loi_tempb}%
+ }
+ {\loi_second
+ }%
+ }
+ {\loi_second
+ }%
+ }%
+ }%
+}
+\def\loi_ifinrange#1[[#2:#3]]{\expandafter\unless\loi_ifnum{\numexpr(#1-#2)*(#1-#3)>0 }}
+\def\loi_ifstring#1#2{% si la chaine #1 est contenue dans #2
+ \def\loi_ifstring_a##1#1##2\_nil{\loi_ifempty{##2}\loi_second\loi_first}%
+ \loi_ifstring_a#2#1\_nil% appel de la macro auxiliaire
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macro \loi_foreach %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\loi_cnt_foreach_nest \loi_cnt_foreach_nest=0
+\def\end_foreach{\end_foreach}
+\def\loi_def_foreachsep#1{%
+ \long\def\loi_foreach##1\in##2##3{%
+ \global\advance\loi_cnt_foreach_nest1
+ \loi_argcsname\def{loop_code_\number\loi_cnt_foreach_nest}{##3}%
+ \loi_foreach_a##1##2#1\end_foreach#1%
+ \loi_argcsname\let{loop_code_\number\loi_cnt_foreach_nest}\empty
+ \global\advance\loi_cnt_foreach_nest-1
+ }%
+ \long\def\loi_foreach_a##1##2#1{%
+ \def##1{##2}%
+ \loi_ifx{\end_foreach##1}
+ {}
+ {\csname loop_code_\number\loi_cnt_foreach_nest\endcsname% exécute le code
+ \loi_foreach_a##1%
+ }%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% macros gérant l'appariement %%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\defpair#1{%
+ \let\loi_listofpair\empty
+ \loi_ifempty{#1}
+ {}
+ {\defpair_a{}#1\loi_quark\loi_quark}%
+}
+\long\def\defpair_a#1#2#3{%
+ \loi_ifx{\loi_quark#2}
+ {\def\loi_sanitizelist##1,\_nil{\def\loi_listofpair{##1}}%
+ \loi_sanitizelist#1\_nil
+ }
+ {\loi_if_validpair#2#3%
+ {\long\def\loi_paired_a{#2}\long\def\loi_paired_b{#3}%
+ \loi_ifx{\loi_paired_a\loi_paired_b}
+ {\loi_error{Paired tokens must not be equal, the pair \detokenize{#2#3} is ignored}%
+ \defpair_a{#1}%
+ }
+ {\defpair_a{#1#2#3,}%
+ }%
+ }
+ {\loi_error{Invalid paired tokens, the pair "\detokenize{#2}" and "\detokenize{#3}" is ignored}%
+ \defpair_a{#1}%
+ }%
+ }%
+}
+\long\def\loi_if_validpair#1#2{%
+ \def\loi_validpair{1}%
+ \loi_if_invalid_pairtoken{#1}{\def\loi_validpair{0}}%
+ \loi_if_invalid_pairtoken{#2}{\def\loi_validpair{0}}%
+ \loi_ifnum{\loi_validpair=1 }
+}
+\long\def\loi_if_invalid_pairtoken#1{%
+ \loi_ifempty{#1}
+ {\loi_identity
+ }
+ {\loi_ifspacefirst{#1}
+ {\loi_identity
+ }
+ {\loi_exparg\loi_ifempty{\loi_gobarg#1}% 1 seul token ?
+ {\ifcat\relax\noexpand#1\expandafter\loi_identity\else\expandafter\loi_gobarg\fi}
+ {\loi_identity}% si plusieurs tokens, faux
+ }%
+ }%
+}
+\long\def\loi_count_occur#1\in#2:#3{% compte le nombre d'occurrences de #1 dans #2 et met le résultat dans la macro #3
+ \long\def\loi_count_occur_a##1##2#1##3\_nil{%
+ \loi_ifempty{##3}
+ {\def#3{##1}}
+ {\expandafter\loi_count_occur_a\number\numexpr##1+1\relax##3\_nil}%
+ }%
+ \loi_count_occur_a0#2#1\_nil
+}
+\long\def\loi_check_pair#1#2\in#3{% teste l'appariement de #1 et #2 dans #3
+ \loi_ifempty{#3}
+ {\loi_second
+ }
+ {\loi_count_occur#1\in#3:\loi_tempa
+ \loi_count_occur#2\in#3:\loi_tempb
+ \loi_ifnum{\loi_tempa=\loi_tempb\relax}%
+ }%
+}
+\long\def\loi_grabpaired_expr#1#2#3#4#5{% #1=liste de paires #2=expression #3=séparateur #4=résultat #5=ce qui reste
+ \let#4\empty
+ \def\loi_remain{#2#3}%
+ \loi_foreach\loi_pair\in{#1}{\expandafter\loi_grabpaired_expr_a\loi_pair{#3}#4}%
+ \def\loi_remove_lastsep##1#3\_nil{\def#4{##1}}%
+ \expandafter\loi_remove_lastsep#4\_nil
+ \loi_expafter{\long\def\loi_grab_remain}#4##1\_nil{%
+ \loi_ifempty{##1}
+ {\let#5\empty}
+ {\loi_exparg{\def#5}{\loi_gobarg##1}}%
+ }%
+ \loi_grab_remain#2\_nil
+}
+\long\def\loi_grabpaired_expr_a#1#2#3#4{% #1#2=paire en cours #3=séparateur #4=résultat
+ \loi_exparg{\loi_check_pair#1#2\in}#4% si les paires sont appariées dans le résultat
+ {}% passer à la paire suivante
+ {\long\def\loi_grabpaired_expr_b##1#3##2\_nil{%
+ \loi_addtomacro#4{##1#3}% ajouter au résultat ce qui est jusqu'au prochain séparateur
+ \def\loi_remain{##2}%
+ \loi_exparg{\loi_check_pair#1#2\in}{#4}
+ {}
+ {\loi_ifempty{##2}
+ {\loi_error{"\detokenize{#1}" and "\detokenize{#2}" are not paired}}
+ {\loi_grabpaired_expr_b##2\_nil}%
+ }%
+ }%
+ \expandafter\loi_grabpaired_expr_b\loi_remain\_nil
+ }%
+}
+\def\insidepair#1#2#3#4{% #1#2=paire #3=expr #4=macro reçevant le resultat
+ \loi_if_validpair#1#2%
+ {\loi_ifcsexpandable{#3}
+ {\loi_exparg{\insidepair#1#2}{#3}#4%
+ }
+ {\loi_check_pair#1#2\in{#3}% si les paires sont appariées dans le résultat
+ {\def\insidepair_a##1#1##2\_nil{\insidepair_b##2\_nil{#1}}%
+ \def\insidepair_b##1#2##2\_nil##3{%
+ \loi_check_pair#1#2\in{##3##1#2}
+ {\loi_exparg{\def#4}{\loi_gobarg##3##1}%
+ \def\loi_remainafterparen{##2}%
+ }%
+ {\insidepair_b##2\_nil{##3##1#2}%
+ }%
+ }%
+ \insidepair_a#3\_nil
+ }
+ {\loi_error{"\detokenize{#1}" and "\detokenize{#2}" are not paired in "#3"}%
+ }%
+ }%
+ }
+ {\loi_error{Invalid paired tokens "\detokenize{#1}" and "\detokenize{#2}", empty \string#4 returned}% et bim
+ \let#4\empty% voilà, bien fait pour vos gueules
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%% macro \loi_fornum %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\loi_fornum#1=#2to#3\do{%
+ \edef#1{\number\numexpr#2}%
+ \expandafter\loi_fornum_a
+ \csname loi_fornum_\string#1\expandafter\endcsname\expandafter
+ {\number\numexpr#3\expandafter}%
+ \expanded{\ifnum#1<\numexpr#3\relax>+\else<-\fi}%
+ #1%
+}
+\long\def\loi_fornum_a#1#2#3#4#5#6{%
+ \def#1{%
+ \unless\ifnum#5#3#2\relax
+ \loi_antefi{#6\edef#5{\number\numexpr#5#41\relax}#1}%
+ \fi}%
+ #1%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% macro retirant les espaces extrêmes %%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\loi_ifspacefirst#1{\expandafter\loi_ifspacefirst_a\detokenize{#10} \_nil}
+\long\def\loi_ifspacefirst_a#1 #2\_nil{\loi_ifempty{#1}}
+\loi_expafter{\def\loi_gobspace}\space{}
+\long\def\loi_removefirstspaces#1{\loi_ifspacefirst{#1}{\loi_exparg\loi_removefirstspaces{\loi_gobspace#1}}{\unexpanded{#1}}}%##BUGFIX v1.63
+\begingroup
+ \catcode0 12
+ \long\gdef\loi_removelastspaces#1{\loi_removelastspaces_a#1^^00 ^^00\_nil}
+ \long\gdef\loi_removelastspaces_a#1 ^^00{\loi_removelastspaces_b#1^^00}
+ \long\gdef\loi_removelastspaces_b#1^^00#2\_nil{\loi_ifspacefirst{#2}{\loi_removelastspaces_a#1^^00 ^^00\_nil}{\unexpanded{#1}}}
+\endgroup
+\long\def\loi_removeextremespaces#1{\expanded{\loi_exparg\loi_removelastspaces{\expanded{\loi_removefirstspaces{#1}}}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% macro publique \setsepchar %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\setsepchar{\futurelet\loi_nxttok\setsepchar_a}
+\def\setsepchar_a{\loi_ifx{[\loi_nxttok}\setsepchar_b{\setsepchar_b[/]}}
+\long\def\setsepchar_b[#1]#2{% #1=sepcar de <liste des sepcar> #2=<liste des sepcar>
+ \loi_ifempty{#1}
+ {\loi_error{Empty separator not allowed, separator "/" used}%
+ \setsepchar_b[/]{#2}%
+ }
+ {\def\loi_currentsep{#1}%
+ \_removeextremespacesfalse
+ \loi_nestcnt1 % réinitaliser niveau initial à 1
+ \def\nestdepth{1}%
+ \loi_argcsname\let{loi_previndex[\number\loi_nestcnt]}\empty
+ \def\loi_listname{loi_listofsep}%
+ \let\loi_def\def \let\loi_edef\edef \let\loi_let\let
+ \let\loi_listofpair_saved\loi_list_ofpair
+ \let\loi_list_ofpair\empty
+ \loi_ifempty{#2}
+ {\loi_error{Empty list of separators not allowed, "," used}%
+ \readlist_g1{,}%
+ }
+ {\readlist_g1{#2}%
+ }%
+ \loi_argcsname\let\nestdepth{loi_listofseplen[0]}%
+ \loi_argcsname\let\loi_currentsep{loi_listofsep[1]}% 1er car de séparation
+ \let\loi_listofpair\loi_listofpair_saved
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% macro normalisant l'index %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\loi_normalizeindex#1#2{% #1=macroname #2=liste d'index --> renvoie {err}{indx norm}
+ \loi_ifempty{#2}
+ {{}{}}
+ {\loi_exparg{\loi_normalizeindex_a1{}}{\number\csname#1nest\endcsname}{#1}#2,\loi_quark,}%
+}%
+\def\loi_normalizeindex_a#1#2#3#4#5,{% #1=compteur de profondeur #2=index précédents #3=profondeur max #4=macroname #5=index courant
+ \loi_ifx{\loi_quark#5}
+ {\loi_normalizeindex_c#2\loi_quark% supprimer la dernière virgule
+ }
+ {\loi_ifnum{#1>#3 }
+ {\loi_invalidindex{Too deeply nested index, index [.] retained}{#2}% si profondeur trop grande
+ }
+ {\loi_ifinrange\ifnum\numexpr#5<0 -1*\fi(#5)[[1:\csname #4len[#20]\endcsname]]% si abs(#5) hors de [1,len]
+ {\loi_exparg\loi_normalizeindex_b{\number\numexpr#5\ifnum\numexpr#5<0 +\csname #4len[#20]\endcsname+1\fi}{#1}{#2}{#3}{#4}}
+ {\loi_invalidindex{#5 is an invalid index, index [.] retained}{#2}}%
+ }%
+ }%
+}
+\def\loi_normalizeindex_b#1#2#3{\loi_exparg\loi_normalizeindex_a{\number\numexpr#2+1}{#3#1,}}% #1=index à rajouter #2=compteur de profondeur #3=index précédents
+\def\loi_normalizeindex_c#1,\loi_quark{{}{#1}}
+\def\loi_invalidindex#1#2{\loi_ifempty{#2}{\loi_invalidindex_a{#1},}\loi_invalidindex_a{#1}{#2}}
+\def\loi_invalidindex_a#1#2{\loi_invalidindex_b#1\loi_quark#2\loi_quark}
+\def\loi_invalidindex_b#1[.]#2\loi_quark#3,\loi_quark#4\loi_quark,{{#1[#3]#2}{#3}}% #4= index ignorés
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% macro publique \readlist %%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\loi_nestcnt
+\def\greadlist{\let\loi_def\gdef\let\loi_edef\xdef\def\loi_let{\global\let}\readlist_a}%
+\def\readlist{\let\loi_def\def\let\loi_edef\edef\let\loi_let\let\readlist_a}
+\def\readlist_a{%
+ \loi_nestcnt1 % niveau initial = 1
+ \loi_argcsname\let{loi_previndex[\number\loi_nestcnt]}\empty
+ \loi_ifstar{\_removeextremespacestrue\readlist_b}{\_removeextremespacesfalse\readlist_b}%
+}
+\long\def\readlist_b#1#2{% #1=macro stockant les éléments #2=liste des éléments
+ \loi_ifcsexpandable{#2}
+ {\loi_exparg{\readlist_b#1}{#2}%
+ }
+ {\loi_edef\loi_listname{\loi_macroname#1}%
+ \loi_exparg{\readlist_c#1{#2}}{\loi_listname}%%
+ }%
+}
+\long\def\readlist_c#1#2#3{% #1=macro stockant les éléments #2=liste des éléments #3=macroname
+ \loi_argcsname\loi_let{#3nest}\nestdepth
+ \loi_argcsname\loi_def{#3[]}{#2}% la liste entière
+ \loi_argcsname\loi_def{#3sep[]}{}% séparateur vide
+ \loi_ifempty{#2}
+ {\loi_def#1[##1]{}%
+ \loi_argcsname\loi_def{#3len}{0}\loi_argcsname\loi_def{#3len[0]}{0}%
+ \loi_error{Empty list ignored, nothing to do}%
+ }
+ {\loi_def#1[##1]{\expanded{\expandafter\readlist_d\expanded{\loi_normalizeindex{#3}{##1}}{#3}}}%
+ \loi_argcsname\loi_def{#3sep}[##1]{\expanded{\expandafter\readlist_d\expanded{\loi_normalizeindex{#3}{##1}}{#3sep}}}%
+ \readlist_e{#2}%
+ \loi_argcsname\loi_argcsname\loi_let{#3len}{#3len[0]}% longueur du niveau 0
+ }%
+}
+\def\readlist_d#1#2#3{%
+ \unexpanded\expandafter\expandafter\expandafter{\csname#3[#2]\expandafter\endcsname\expandafter}%
+ \expanded{\loi_ifempty{#1}{}{\unexpanded{\unexpanded{\loi_error{#1}}}}}%
+}
+\def\readlist_e{%
+ \loi_argcsname\loi_let\loi_currentsep{loi_listofsep[\number\loi_nestcnt]}%
+ \expandafter\readlist_f\loi_currentsep||\_nil
+}
+\long\def\readlist_f#1||#2\_nil#3{\readlist_g1{#3#1}}% #1=<sep courant simple> #3=liste -> rajoute un élément vide pour le test \ifempty ci dessous
+\long\def\readlist_g#1#2{% #1=compteur d'index #2=liste d'éléments à examiner terminée par <sep courant simple> >>RIEN laissé après
+ \loi_ifempty{#2}
+ {\loi_argcsname\loi_edef{\loi_listname len[\csname loi_previndex[\number\loi_nestcnt]\endcsname0]}{\number\numexpr#1-1\relax}%
+ \loi_argcsname\loi_let{\loi_listname sep[\csname loi_previndex[\number\loi_nestcnt]\endcsname\number\numexpr#1-1\relax]}\empty% le dernier <sep> est <vide> ##NEW v1.52
+ \advance\loi_nestcnt-1
+ \loi_argcsname\loi_let\loi_currentsep{loi_listofsep[\number\loi_nestcnt]}%
+ }
+ {\loi_expafter{\readlist_h{#2}{}}\loi_currentsep||\loi_quark||#2\_nil{#1}% aller isoler le 1er item
+ }%
+}
+\long\def\readlist_h#1#2#3||{% #1=liste restante #2=<dernier sep utilisé> #3=<sep courant>
+ \loi_ifx{\loi_quark#3}% on a épuisé tous les <séparateurs> ? RESTE à lire <expr+sep1>\_nil{<compteur>}
+ {\loi_ifempty{#2}% si #2 vide, aucun <sep utilisé> n'a été trouvé, il reste à lire "<liste complète>\_nil"
+ {\long\def\readlist_i##1\_nil##2{\loi_exparg{\readlist_j{##2}{}}{\loi_gobarg##1}{#2}}% ##2=compteur d'index
+ }
+ {\loi_ifx{\loi_listofpair\empty}% paires définies ?
+ {\long\def\readlist_i##1#2##2\_nil##3{\loi_exparg{\readlist_j{##3}{##2}}{\loi_gobarg##1}{#2}}%
+ }
+ {\long\def\readlist_i##1\_nil##2{%
+ \loi_exparg{\loi_exparg\loi_grabpaired_expr\loi_listofpair}{\loi_gobarg##1}{#2}\loi_grabpaired_result\loi_grabpaired_remain
+ \loi_exparg{\loi_exparg{\readlist_j{##2}}{\loi_grabpaired_remain}}{\loi_grabpaired_result}{#2}}%{#}
+ }%
+ }%
+ \readlist_i\relax% le \relax meuble l'argument délimité
+ }
+ {\long\def\readlist_i##1#3##2\_nil{%
+ \loi_ifempty{##2}% si <liste restante> ne contient pas le <sep courant>
+ {\readlist_h{#1}{#2}% recommencer avec le même <sep utile>
+ }%
+ {\loi_ifx{\loi_listofpair\empty}% si pas de paires définies
+ {\loi_exparg\readlist_h{\loi_gobarg##1#3}{#3}% raccourcir <liste restante> et <sep courant>:=<sep utile>% ##BUGFIX v1.53
+ }%
+ {\loi_exparg\loi_grabpaired_expr\loi_listofpair{#1#3}{#3}\loi_grabpaired_result\loi_grabpaired_remain
+ \loi_ifx{\loi_grabpaired_remain\empty}% si liste non raccourcie #BUGFIX 1.63
+ {\loi_exparg\readlist_h{\loi_grabpaired_result}{#2}}% garder le précédent <sep>
+ {\loi_exparg\readlist_h{\loi_grabpaired_result}{#3}}%
+ }%
+ }%
+ }%
+ \readlist_i\relax#1#3\_nil% ##BUGFIX v1.53
+ }%
+}
+\long\def\readlist_j#1#2#3{% #1=compteur d'index #2=liste restante #3=élément courant
+ \loi_ifnum{0\loi_exparg\loi_ifspacefirst{\loi_currentsep}{}1\if_removeextremespaces1\fi=11 }% s'il faur retirer les espaces extrêmes
+ {\loi_exparg{\loi_exparg{\readlist_k{#1}{#2}}}{\loi_removeextremespaces{#3}}}% redéfinir l'élément courant
+ {\readlist_k{#1}{#2}{#3}}%
+}
+\long\def\readlist_k#1#2#3#4{% #1=compteur d'index #2=liste restante #3=élément courant #4=sep utilisé
+ \loi_ifnum{0\if_ignoreemptyitems1\fi\loi_ifempty{#3}1{}=11 }
+ {\readlist_g{#1}{#2}% si l'on n'ignore pas les éléments vides
+ }%
+ {\loi_argcsname\loi_def{\loi_listname[\csname loi_previndex[\number\loi_nestcnt]\endcsname#1]}{#3}% assignation
+ \loi_argcsname\loi_def{\loi_listname sep[\csname loi_previndex[\number\loi_nestcnt]\endcsname#1]}{#4}% assignation du <sep> actuel à la macro \<macrolist>sep
+ \loi_ifnum{\loi_nestcnt<\nestdepth\relax}% si imbrication max non atteinte
+ {\advance\loi_nestcnt1
+ \loi_argcsname\edef{loi_previndex[\number\loi_nestcnt]}{\csname loi_previndex[\number\numexpr\loi_nestcnt-1]\endcsname#1,}%
+ \readlist_e{#3}% recommencer avec l'élément courant
+ }
+ {}%
+ \loi_exparg\readlist_g{\number\numexpr#1+1}{#2}% puis chercher l'élément suivant dans la liste restante
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% macro \listlen %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\listlen#1[#2]{%
+ \expanded{%
+ \loi_ifempty{#2}
+ {\csname\loi_macroname#1len[0]\endcsname}
+ {\loi_exparg\listlen_a{\expanded{\loi_macroname#1}}{#2}}%
+ }%
+}
+\def\listlen_a#1#2{% #1=macro name #2=index non normalisé prendre <profondeur max-1>
+ \expandafter\listlen_b\expanded{\loi_normalizeindex{#1}{#2}}{#1}%
+}
+\def\listlen_b#1#2#3{% #1=err #2=index normalisé #3=macroname
+ \csname#3len[#2,0]\expandafter\endcsname
+ \expanded{\loi_ifempty{#1}{}{\unexpanded{\unexpanded{\loi_error{#1}}}}}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macro \foreachitem %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\foreachitem#1\in#2{%
+ \edef\foreachitem_a{\noexpand\foreachitem_c\noexpand#1{\expandafter\noexpand\csname\loi_macroname#1cnt\endcsname}{\loi_macroname#2}}%
+ \futurelet\loi_nxttok\foreachitem_b
+}
+\def\foreachitem_b{\loi_ifx{\loi_nxttok[}\foreachitem_a{\foreachitem_a[]}}
+\def\foreachitem_c#1#2#3[#4]{% prendre <profondeur max-1>
+ \expandafter\foreachitem_d\expanded{\loi_normalizeindex{#3}{#4}}#1{#2}{#3}%
+}
+\def\foreachitem_d#1#2{\loi_ifempty{#2}{\foreachitem_e{#1}{}}{\foreachitem_e{#1}{#2,}}}% #1=err #2=index norm
+\long\def\foreachitem_e#1#2#3#4#5#6{% #1=err #2=index norm #3=macroiter #4=compteur associé #5=nom de macrolist #6=code
+ \loi_ifnum{\csname#5len[#20]\endcsname>0 }
+ {\loi_ifempty{#1}{}{\loi_error{#1}}%
+ \loi_fornum#4=1to\csname#5len[#20]\endcsname\do{\loi_argcsname\let#3{#5[#2#4]}#6}%
+ }
+ {}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%% macro \showitem %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\showitems{\loi_ifstar{\let\showitems_cmd\detokenize\showitems_a}{\let\showitems_cmd\loi_identity\showitems_a}}
+\def\showitems_a#1{\def\showitems_b{\showitems_d#1}\futurelet\loi_nxttok\showitems_c}
+\def\showitems_c{\loi_ifx{\loi_nxttok[}\showitems_b{\showitems_b[]}}
+\def\showitems_d#1[#2]{\foreachitem\showitems_iter\in#1[#2]{\showitemsmacro{\expandafter\showitems_cmd\expandafter{\showitems_iter}}}}
+\unless\ifdefined\fbox
+ \newdimen\fboxrule \newdimen\fboxsep \fboxrule=.4pt \fboxsep=3pt % réglages identiques à LaTeX
+ \def\fbox#1{% imitation de la macro \fbox de LaTeX, voir pages 271 à 274 de "Apprendre à programmer en TeX"
+ \hbox{%
+ \vrule width\fboxrule
+ \vtop{%
+ \vbox{\hrule height\fboxrule \kern\fboxsep \hbox{\kern\fboxsep#1\kern\fboxsep}}%
+ \kern\fboxsep \hrule height\fboxrule
+ }\vrule width\fboxrule
+ }%
+ }
+\fi
+\def\showitemsmacro#1{% encadrement par défaut
+ \begingroup\fboxsep=0.25pt \fboxrule=0.5pt \fbox{\strut#1}\endgroup
+ \hskip0.25em\relax
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macro \itemtomacro %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\itemtomacro#1[#2]{% #1[#2]=item non encore lu: #3=macro
+ \edef\loi_listname{\loi_macroname#1}%
+ \expandafter\itemtomacro_a\expanded{\loi_normalizeindex{\loi_listname}{#2}}\let
+}
+\def\gitemtomacro#1[#2]{% #1[#2]=item
+ \xdef\loi_listname{\loi_macroname#1}%
+ \expandafter\itemtomacro_a\expanded{\loi_normalizeindex{\loi_listname}{#2}}{\global\let}%
+}
+\def\itemtomacro_a#1#2#3#4{%
+ \loi_ifempty{#1}{}{\loi_error{#1}}%
+ \loi_argcsname#3#4{\loi_listname[#2]}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%% réglages par défaut %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if_removeextremespaces
+\newif\if_ignoreemptyitems
+\let\ignoreemptyitems\_ignoreemptyitemstrue
+\let\reademptyitems\_ignoreemptyitemsfalse
+\loi_def_foreachsep{,}
+\loi_restorecatcode
+\reademptyitems
+\setsepchar{,}
+\defpair{}
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%% historique %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+v1.0 19/8/2016
+ - Première version publique
+----------------------------------------------------------------------
+v1.1 01/09/2016
+ - Stockage des séparateurs dans <macrolist>sep
+ - bug corrigé dans \loi_restorecatcode
+----------------------------------------------------------------------
+v1.2 22/10/2016
+ - macros \greadlist et \gitemtomacro pour la globalité
+----------------------------------------------------------------------
+v1.3 18/11/2016
+ - bugs corrigés dans la gestion de la globalité
+----------------------------------------------------------------------
+v1.4 05/10/2017
+ - test \loi_ifprimitive ajouté au test \loi_ifcs
+ - suppression de \loi_expafternil, création de \loi_expafter,
+ modification de \loi_argcsname
+ - correction d'un bug : \setsepchar{\par} ne provoque plus d'erreur.
+ \loi_ifnum devient \long
+----------------------------------------------------------------------
+v1.5 06/10/2017
+ - correction d'un bug dans \loi_ifcs
+----------------------------------------------------------------------
+v1.51 24/10/2017
+ - correction d'un bug dans \loi_ifcs
+----------------------------------------------------------------------
+v1.52 13/01/2018
+ - le dernier séparateur est <vide>
+----------------------------------------------------------------------
+v1.53 13/03/2018
+ - correction d'un bug dans \readlist_i
+----------------------------------------------------------------------
+v1.6 01/11/2018
+ - possibilité d'appariement de tokens dans les items
+----------------------------------------------------------------------
+v1.61 03/03/2019
+ - la macro \loi_ifcs contient une erreur de conception. Il faut
+ tester si le token est un sc && s'il est développable pour
+ renvoyer vrai car il existe des sc non développables && qui ne
+ sont _pas_ des primitives.
+ Macro rebaptisée \loi_ifcsexpandable
+----------------------------------------------------------------------
+v1.62 18/05/2019
+ - utilisation de la nouvelle primitive \expanded au lieu du
+ désormais obsolète \romannumeral
+ - bug corrigé dans \loi_ifcsexpandable
+----------------------------------------------------------------------
+v1.63 21/08/2019
+ - bug corrigé dans \readlist_h avec les tokens appariés
+ - bug corrigé \loi_removefirstspaces est désormais \long \ No newline at end of file
diff --git a/macros/generic/listofitems/listofitemsold.tex b/macros/generic/listofitems/listofitemsold.tex
new file mode 100644
index 0000000000..644200a6f0
--- /dev/null
+++ b/macros/generic/listofitems/listofitemsold.tex
@@ -0,0 +1,572 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "listofitems"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\loiname {listofitems} %
+\def\loiver {1.61} %
+% %
+\def\loidate {2019/03/03} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Author : Christian Tellechea, Steven B. Segletes %
+% Status : Maintained %
+% Maintainer : Christian Tellechea %
+% Email : unbonpetit@netc.fr %
+% steven.b.segletes.civ@mail.mil %
+% Package URL: https://www.ctan.org/pkg/listofitems %
+% Bug tracker: https://framagit.org/unbonpetit/listofitems/issues %
+% Repository : https://framagit.org/unbonpetit/listofitems/tree/master
+% Copyright : Christian Tellechea 2016-2019 %
+% Licence : Released under the LaTeX Project Public License v1.3c %
+% or later, see http://www.latex-project.org/lppl.txt %
+% Files : 1) listofitems.tex %
+% 2) listofitems.sty %
+% 3) listofitems-fr.tex %
+% 4) listofitems-fr.pdf %
+% 5) listofitems-en.tex %
+% 6) listofitems-en.pdf %
+% 7) README %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifdefined\ProvidesPackage\else
+ \immediate\write -1 {%
+ Package: \loidate\space v\loiver\space Grab items in lists using user-specified sep char (CT)}%
+\fi
+
+\expandafter\edef\csname loi_restorecatcode\endcsname{\catcode\number`\_=\number\catcode`\_\relax}
+\catcode`\_11
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%% gestion des erreurs %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifdefined\PackageError
+ \def\loi_error#1{\PackageError\loiname{#1}{Read the manual}}% pour LaTeX
+\else
+ \def\loi_error#1{\errmessage{Package \loiname\space Error: #1^^J}}% pour TeX
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% vérification de la présence de etex %%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begingroup
+\edef\__tempa{\meaning\eTeXversion}\edef\__tempb{\string\eTeXversion}%
+\ifx\__tempa\__tempb
+ \endgroup
+\else
+ \endgroup
+ \loi_error{You are not using an eTeX engine, listofitems cannot work.}%
+ \loi_restorecatcode\expandafter\endinput
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macros auxiliaires %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chardef\loi_stop=0
+\def\loi_quark{\loi_quark}
+\long\def\loi_identity#1{#1}
+\long\def\loi_gobarg#1{}
+\long\def\loi_first#1#2{#1}
+\long\def\loi_second#1#2{#2}
+\long\def\loi_firsttonil#1#2\_nil{#1}
+\long\def\loi_antefi#1#2\fi{#2\fi#1}
+\long\def\loi_exparg#1#2{\expandafter\loi_exparg_a\expandafter{#2}{#1}}% \loi_exparg{<a>}{<b>} devient <a>{<*b>}
+\long\def\loi_exparg_a#1#2{#2{#1}}
+\long\def\loi_expafter#1#2{\expandafter\loi_expafter_a\expandafter{#2}{#1}}% \loi_expafter{<a>}{<b>} devient <a><*b>
+\long\def\loi_expafter_a#1#2{#2#1}
+\def\loi_macroname{\loi_ifinrange\escapechar[[0:255]]{\expandafter\loi_gobarg}{}\string}
+\def\loi_argcsname#1#{\loi_argcsname_a{#1}}
+\def\loi_argcsname_a#1#2{\loi_expafter{#1}{\csname#2\endcsname}}
+\long\def\loi_addtomacro#1#2{\loi_exparg{\def#1}{#1#2}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% macros de test %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\loi_ifnum#1{\ifnum#1\expandafter\loi_first\else\expandafter\loi_second\fi}
+\long\def\loi_ifx#1{\ifx#1\expandafter\loi_first\else\expandafter\loi_second\fi}
+\long\def\loi_ifempty#1{\loi_exparg\loi_ifx{\expandafter\relax\detokenize{#1}\relax}}
+\def\loi_ifstar#1#2{\def\loi_ifstar_a{\loi_ifx{*\loi_nxttok}{\loi_first{#1}}{#2}}\futurelet\loi_nxttok\loi_ifstar_a}
+\long\def\loi_ifstuffexpandable#1{\def\loi_tempa{#1}\loi_exparg{\def\loi_tempb}{#1}\expandafter\unless\loi_ifx{\loi_tempa\loi_tempb}}
+\long\def\loi_ifcsexpandable#1{% #1 est-il constitué d'une sc _développable_ ?
+ \loi_ifempty{#1}
+ {\loi_second
+ }
+ {\loi_ifspacefirst{#1}
+ {\loi_second% si espace en 1er, faux
+ }
+ {%
+ \loi_exparg\loi_ifempty{\loi_gobarg#1}% 1 seul token ?
+ {\begingroup\escapechar`\_\def\_{#1}\expandafter\endgroup
+ \csname loi_\if\expandafter\expandafter\expandafter\loi_firsttonil\expandafter\string\_\_nil\string _first\else second\fi\endcsname
+ {\loi_ifstuffexpandable{#1}}
+ {\loi_second}%
+ }
+ {\loi_second% si plusieurs tokens, faux
+ }%
+ }%
+ }%
+}
+\def\loi_ifinrange#1[[#2:#3]]{\loi_ifnum{\numexpr(#1-#2)*(#1-#3)>0 }\loi_second\loi_first}
+\def\loi_ifstring#1\in#2{% si la chaine #1 est contenue dans #2
+ \def\loi_ifstring_a##1#1##2\_nil{\loi_ifempty{##2}\loi_second\loi_first}%
+ \loi_ifstring_a#2#1\@nil% appel de la macro auxiliaire
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macros \loi_foreach %%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\loi_cnt_foreach_nest \loi_cnt_foreach_nest=0
+\def\end_foreach{\end_foreach}
+\def\loi_def_foreachsep#1{%
+ \long\def\loi_foreach##1\in##2##3{%
+ \global\advance\loi_cnt_foreach_nest1
+ \loi_argcsname\def{loop_code_\number\loi_cnt_foreach_nest}{##3}%
+ \loi_foreach_a##1##2#1\end_foreach#1%
+ \loi_argcsname\let{loop_code_\number\loi_cnt_foreach_nest}\empty
+ \global\advance\loi_cnt_foreach_nest-1
+ }%
+ \long\def\loi_foreach_a##1##2#1{%
+ \def##1{##2}%
+ \loi_ifx{\end_foreach##1}
+ {}
+ {\csname loop_code_\number\loi_cnt_foreach_nest\endcsname% exécute le code
+ \loi_foreach_a##1%
+ }%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%% macros gérant l'appariement %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\defpair#1{%
+ \let\loi_listofpair\empty
+ \loi_ifempty{#1}
+ {}
+ {\defpair_a{}#1\loi_quark\loi_quark}%
+}
+\long\def\defpair_a#1#2#3{%
+ \loi_ifx{\loi_quark#2}
+ {\def\loi_sanitizelist##1,\_nil{\def\loi_listofpair{##1}}%
+ \loi_sanitizelist#1\_nil
+ }
+ {\loi_if_validpair#2#3%
+ {\long\def\loi_paired_a{#2}\long\def\loi_paired_b{#3}%
+ \loi_ifx{\loi_paired_a\loi_paired_b}
+ {\loi_error{Paired tokens must not be equal, the pair \detokenize{#2#3} is ignored}%
+ \defpair_a{#1}%
+ }
+ {\defpair_a{#1#2#3,}%
+ }%
+ }
+ {\loi_error{Invalid paired tokens, the pair "\detokenize{#2}" and "\detokenize{#3}" is ignored}%
+ \defpair_a{#1}%
+ }%
+ }%
+}
+\long\def\loi_if_validpair#1#2{%
+ \def\loi_validpair{1}%
+ \loi_if_invalid_pairtoken{#1}{\def\loi_validpair{0}}%
+ \loi_if_invalid_pairtoken{#2}{\def\loi_validpair{0}}%
+ \loi_ifnum{\loi_validpair=1 }
+}
+\long\def\loi_if_invalid_pairtoken#1{%
+ \loi_ifempty{#1}
+ {\loi_identity
+ }
+ {\loi_ifspacefirst{#1}
+ {\loi_identity
+ }
+ {\loi_exparg\loi_ifempty{\loi_gobarg#1}% 1 seul token ?
+ {\ifcat\relax\noexpand#1\expandafter\loi_identity\else\expandafter\loi_gobarg\fi}
+ {\loi_identity}% si plusieurs tokens, faux
+ }%
+ }%
+}
+\long\def\loi_count_occur#1\in#2:#3{% compte le nombre d'occurrences de #1 dans #2 et met le résultat dans la macro #3
+ \long\def\loi_count_occur_a##1##2#1##3\_nil{%
+ \loi_ifempty{##3}
+ {\def#3{##1}}
+ {\expandafter\loi_count_occur_a\number\numexpr##1+1\relax##3\_nil}%
+ }%
+ \loi_count_occur_a0#2#1\_nil
+}
+\long\def\loi_check_pair#1#2\in#3{% teste l'appariement de #1 et #2 dans #3
+ \loi_ifempty{#3}
+ {\loi_second
+ }
+ {\loi_count_occur#1\in#3:\loi_tempa
+ \loi_count_occur#2\in#3:\loi_tempb
+ \loi_ifnum{\loi_tempa=\loi_tempb\relax}%
+ }%
+}
+\long\def\loi_grabpaired_expr#1#2#3#4#5{% #1=liste de paires #2=expression #3=séparateur #4=résultat #5=ce qui reste
+ \let#4\empty
+ \def\loi_remain{#2#3}%
+ \loi_foreach\loi_pair\in{#1}{\expandafter\loi_grabpaired_expr_a\loi_pair{#3}#4}%
+ \def\loi_remove_lastsep##1#3\_nil{\def#4{##1}}%
+ \expandafter\loi_remove_lastsep#4\_nil
+ \expandafter\long\expandafter\def\expandafter\loi_grab_remain#4##1\_nil{\loi_ifempty{##1}{\let#5\empty}{\loi_exparg{\def#5}{\loi_gobarg##1}}}%
+ \loi_grab_remain#2\_nil
+}
+\long\def\loi_grabpaired_expr_a#1#2#3#4{% #1#2=paire en cours #3=séparateur #4=résultat
+ \loi_exparg{\loi_check_pair#1#2\in}#4% si les paires sont appariées dans le résultat
+ {}% passer à la paire suivante
+ {\long\def\loi_grabpaired_expr_b##1#3##2\_nil{%
+ \loi_addtomacro#4{##1#3}% ajouter au résultat ce qui est jusqu'au prochain séparateur
+ \def\loi_remain{##2}%
+ \loi_exparg{\loi_check_pair#1#2\in}{#4}
+ {}
+ {\loi_ifempty{##2}
+ {\loi_error{"\detokenize{#1}" and "\detokenize{#2}" are not paired}}
+ {\loi_grabpaired_expr_b##2\_nil}%
+ }%
+ }%
+ \expandafter\loi_grabpaired_expr_b\loi_remain\_nil
+ }%
+}
+\def\insidepair#1#2#3#4{% #1#2=paire #3=expr #4=macro reçevant le resultat
+ \loi_if_validpair#1#2%
+ {\loi_ifcsexpandable{#3}
+ {\loi_exparg{\insidepair#1#2}{#3}#4%
+ }
+ {\loi_check_pair#1#2\in{#3}% si les paires sont appariées dans le résultat
+ {\def\insidepair_a##1#1##2\_nil{\insidepair_b##2\_nil{#1}}%
+ \def\insidepair_b##1#2##2\_nil##3{%
+ \loi_check_pair#1#2\in{##3##1#2}
+ {\loi_exparg{\def#4}{\loi_gobarg##3##1}}%
+ {\insidepair_b##2\_nil{##3##1#2}}%
+ }%
+ \insidepair_a#3\_nil
+ }
+ {\loi_error{"\detokenize{#1}" and "\detokenize{#2}" are not paired in "#3"}%
+ }%
+ }%
+ }
+ {\loi_error{Invalid paired tokens "\detokenize{#1}" and "\detokenize{#2}", empty \string#4 returned}% et bim
+ \let#4\empty% voilà, bien fait pour vos gueules
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macro \loi_fornum %%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\loi_fornum#1=#2to#3\do{%
+ \edef#1{\number\numexpr#2}\edef\loi_sgncmp{\ifnum#1<\numexpr#3\relax>+\else<-\fi}%
+ \expandafter\loi_fornum_a\csname loi_fornum_\string#1\expandafter\endcsname\expandafter{\number\numexpr#3\expandafter}\loi_sgncmp#1%
+}
+\long\def\loi_fornum_a#1#2#3#4#5#6{\def#1{\unless\ifnum#5#3#2\relax\loi_antefi{#6\edef#5{\number\numexpr#5#41\relax}#1}\fi}#1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% macro retirant les espaces extrêmes %%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\loi_ifspacefirst#1{\expandafter\loi_ifspacefirst_a\detokenize{#10} \_nil}
+\long\def\loi_ifspacefirst_a#1 #2\_nil{\loi_ifempty{#1}}
+\expandafter\def\expandafter\loi_gobspace\space{}
+\def\loi_removefirstspaces{\romannumeral\loi_removefirstspaces_a}
+\long\def\loi_removefirstspaces_a#1{\loi_ifspacefirst{#1}{\expandafter\loi_removefirstspaces_a\expandafter{\loi_gobspace#1}}{\loi_stop#1}}
+\edef\loi_restorezerocatcode{\catcode0=\number\catcode0 \relax}
+\catcode0 12
+\long\def\loi_removelastspaces#1{\romannumeral\loi_removelastspaces_a#1^^00 ^^00\_nil}
+\long\def\loi_removelastspaces_a#1 ^^00{\loi_removelastspaces_b#1^^00}
+\long\def\loi_removelastspaces_b#1^^00#2\_nil{\loi_ifspacefirst{#2}{\loi_removelastspaces_a#1^^00 ^^00\_nil}{\loi_stop#1}}
+\loi_restorezerocatcode
+\long\def\loi_removeextremespaces#1{% #1=texte où les espaces extrêmes sont retirés
+ \romannumeral\expandafter\expandafter\expandafter\loi_removelastspaces\expandafter\expandafter\expandafter
+ {\expandafter\expandafter\expandafter\loi_stop\loi_removefirstspaces{#1}}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% macro publique \setsepchar %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\setsepchar{\futurelet\loi_nxttok\setsepchar_a}
+\def\setsepchar_a{\loi_ifx{[\loi_nxttok}\setsepchar_b{\setsepchar_b[/]}}
+\long\def\setsepchar_b[#1]#2{% #1=sepcar de <liste des sepcar> #2=<liste des sepcar>
+ \loi_ifempty{#1}
+ {\loi_error{Empty separator not allowed, separator "/" used}%
+ \setsepchar_b[/]{#2}%
+ }
+ {\def\loi_currentsep{#1}%
+ \_removeextremespacesfalse
+ \loi_nestcnt1 % réinitaliser niveau initial à 1
+ \def\nestdepth{1}%
+ \loi_argcsname\let{loi_previndex[\number\loi_nestcnt]}\empty
+ \def\loi_listname{loi_listofsep}%
+ \let\loi_def\def \let\loi_edef\edef \let\loi_let\let
+ \let\loi_listofpair_saved\loi_list_ofpair
+ \let\loi_list_ofpair\empty
+ \loi_ifempty{#2}
+ {\loi_error{Empty list of separators not allowed, "," used}%
+ \readlist_e1{,}%
+ }
+ {\readlist_e1{#2}%
+ }%
+ \loi_argcsname\let\nestdepth{loi_listofseplen[0]}%
+ \loi_argcsname\let\loi_currentsep{loi_listofsep[1]}% 1er car de séparation
+ \let\loi_listofpair\loi_listofpair_saved
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% macro normalisant l'index %%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\loi_normalizeindex#1#2#3{% #1=macroname #2=liste d'index #3=profondeur max --> renvoie {err}{indx norm}
+ \loi_ifempty{#2}
+ {\loi_stop{}{}}
+ {\loi_normalizeindex_a1{}{#3}{#1}#2,\loi_quark,}%
+}%
+\def\loi_normalizeindex_a#1#2#3#4#5,{% #1=compteur de profondeur #2=index précédents #3=profondeur max #4=macroname #5=index courant
+ \loi_ifx{\loi_quark#5}
+ {\loi_normalizeindex_c#2\loi_quark% supprimer la dernière virgule
+ }
+ {\loi_ifnum{#1>#3 }
+ {\loi_invalidindex{Too deeply nested index, index [.] retained}{#2}% si profondeur trop grande
+ }
+ {\loi_ifinrange\ifnum\numexpr#5<0 -1*\fi(#5)[[1:\csname #4len[#20]\endcsname]]% si abs(#5) hors de [1,len]
+ {\loi_exparg\loi_normalizeindex_b{\number\numexpr#5\ifnum\numexpr#5<0 +\csname #4len[#20]\endcsname+1\fi}{#1}{#2}{#3}{#4}}
+ {\loi_invalidindex{#5 is an invalid index, index [.] retained}{#2}}%
+ }%
+ }%
+}
+\def\loi_normalizeindex_b#1#2#3{\loi_exparg\loi_normalizeindex_a{\number\numexpr#2+1}{#3#1,}}% #1=index à rajouter #2=compteur de profondeur #3=index précédents
+\def\loi_normalizeindex_c#1,\loi_quark{\loi_stop{}{#1}}
+\def\loi_invalidindex#1#2{\loi_ifempty{#2}{\loi_invalidindex_a{#1},}\loi_invalidindex_a{#1}{#2}}
+\def\loi_invalidindex_a#1#2{\loi_invalidindex_b#1\loi_quark#2\loi_quark}
+\def\loi_invalidindex_b#1[.]#2\loi_quark#3,\loi_quark#4\loi_quark,{\loi_stop{#1[#3]#2}{#3}}% #4= index ignorés
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% macro publique \readlist %%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\loi_nestcnt
+\def\greadlist{\let\loi_def\gdef\let\loi_edef\xdef\def\loi_let{\global\let}\readlist_a}%
+\def\readlist{\let\loi_def\def\let\loi_edef\edef\let\loi_let\let\readlist_a}
+\def\readlist_a{%
+ \loi_nestcnt1 % niveau initial = 1
+ \loi_argcsname\let{loi_previndex[\number\loi_nestcnt]}\empty
+ \loi_ifstar{\_removeextremespacestrue\readlist_b}{\_removeextremespacesfalse\readlist_b}%
+}
+\long\def\readlist_b#1#2{% #1=macro stockant les éléments #2=liste des éléments
+ \loi_ifcsexpandable{#2}
+ {\loi_exparg{\readlist_b#1}{#2}%
+ }
+ {\loi_edef\loi_listname{\loi_macroname#1}%
+ \loi_argcsname\loi_let{\loi_listname nest}\nestdepth
+ \loi_argcsname\loi_def{\loi_listname[]}{#2}% la liste entière
+ \loi_argcsname\loi_def{\loi_listname sep[]}{}% séparateur vide
+ \loi_ifempty{#2}
+ {\loi_def#1[##1]{}%
+ \loi_argcsname\loi_def{\loi_listname len}{0}\loi_argcsname\loi_def{\loi_listname len[0]}{0}%
+ \loi_error{Empty list ignored, nothing to do}%
+ }
+ {\loi_edef#1[##1]{\unexpanded{\romannumeral\expandafter\loi_checkindex\romannumeral\loi_normalizeindex}{\loi_listname}{##1}{\csname\loi_listname nest\endcsname}{\loi_listname}}%
+ \loi_argcsname\loi_edef{\loi_listname sep}[##1]{\unexpanded{\romannumeral\expandafter\loi_checkindex\romannumeral\loi_normalizeindex}{\loi_listname}{##1}{\csname\loi_listname nest\endcsname}{\loi_listname sep}}%
+ \readlist_c{#2}%
+ \loi_argcsname\loi_argcsname\loi_let{\loi_listname len}{\loi_listname len[0]}% longueur du niveau 0
+ }%
+ }%
+}
+\def\loi_checkindex#1#2#3{%
+ \expandafter\expandafter\expandafter\loi_stop\csname#3[#2]\expandafter\endcsname
+ \romannumeral\loi_ifempty{#1}{\loi_stop}{\loi_stop\loi_error{#1}}%
+}
+\def\readlist_c{%
+ \loi_argcsname\loi_let\loi_currentsep{loi_listofsep[\number\loi_nestcnt]}%
+ \expandafter\readlist_d\loi_currentsep||\_nil
+}
+\long\def\readlist_d#1||#2\_nil#3{\readlist_e1{#3#1}}% #1=<sep courant simple> #3=liste -> rajoute un élément vide pour le test \ifempty ci dessous
+\long\def\readlist_e#1#2{% #1=compteur d'index #2=liste d'éléments à examiner terminée par <sep courant simple> >>RIEN laissé après
+ \loi_ifempty{#2}
+ {\loi_argcsname\loi_edef{\loi_listname len[\csname loi_previndex[\number\loi_nestcnt]\endcsname0]}{\number\numexpr#1-1\relax}%
+ \loi_argcsname\loi_let{\loi_listname sep[\csname loi_previndex[\number\loi_nestcnt]\endcsname\number\numexpr#1-1\relax]}\empty% le dernier <sep> est <vide> ##NEW v1.52
+ \advance\loi_nestcnt-1
+ \loi_argcsname\loi_let\loi_currentsep{loi_listofsep[\number\loi_nestcnt]}%
+ }
+ {\loi_expafter{\readlist_f{#2}{}}\loi_currentsep||\loi_quark||#2\_nil{#1}% aller isoler le 1er item
+ }%
+}
+\long\def\readlist_f#1#2#3||{% #1=liste restante #2=<dernier sep utilisé> #3=<sep courant>
+ \loi_ifx{\loi_quark#3}% on a épuisé tous les <séparateurs> ? RESTE à lire <expr+sep1>\_nil{<compteur>}
+ {\loi_ifempty{#2}% si #2 vide, aucun <sep utilisé> n'a été trouvé, il reste à lire "<liste complète>\_nil"
+ {\long\def\readlist_g##1\_nil##2{\loi_exparg{\readlist_h{##2}{}}{\loi_gobarg##1}{#2}}% ##2=compteur d'index
+ }
+ {\loi_ifx{\loi_listofpair\empty}% paires définies ?
+ {\long\def\readlist_g##1#2##2\_nil##3{\loi_exparg{\readlist_h{##3}{##2}}{\loi_gobarg##1}{#2}}%
+ }
+ {\long\def\readlist_g##1\_nil##2{%
+ \loi_exparg{\loi_exparg\loi_grabpaired_expr\loi_listofpair}{\loi_gobarg##1}{#2}\loi_grabpaired_result\loi_grabpaired_remain
+ \loi_exparg{\loi_exparg{\readlist_h{##2}}{\loi_grabpaired_remain}}{\loi_grabpaired_result}{#2}}%
+ }%
+ }%
+ \readlist_g\relax% le \relax meuble l'argument délimité
+ }
+ {\long\def\readlist_g##1#3##2\_nil{%
+ \loi_ifempty{##2}% si <liste restante> ne contient pas le <sep courant>
+ {\readlist_f{#1}{#2}% recommencer avec le même <sep utile>
+ }%
+ {\loi_ifx{\loi_listofpair\empty}% si pas de paires définies
+ {\loi_exparg\readlist_f{\loi_gobarg##1#3}{#3}% raccourcir <liste restante> et <sep courant>:=<sep utile>% ##BUGFIX v1.53
+ }%
+ {\loi_exparg\loi_grabpaired_expr\loi_listofpair{#1}{#3}\loi_grabpaired_result\loi_grabpaired_remain
+ \loi_exparg\readlist_f{\loi_grabpaired_result#3}{#3}%
+ }%
+ }%
+ }%
+ \readlist_g\relax#1#3\_nil% ##BUGFIX v1.53
+ }%
+}
+\long\def\readlist_h#1#2#3{% #1=compteur d'index #2=liste restante #3=élément courant
+ \loi_ifnum{0\loi_exparg\loi_ifspacefirst{\loi_currentsep}{}1\if_removeextremespaces1\fi=11 }% s'il faur retirer les espaces extrêmes
+ {\loi_exparg{\loi_exparg{\readlist_i{#1}{#2}}}{\loi_removeextremespaces{#3}}}% redéfinir l'élément courant
+ {\readlist_i{#1}{#2}{#3}}%
+}
+\long\def\readlist_i#1#2#3#4{% #1=compteur d'index #2=liste restante #3=élément courant #4=sep utilisé
+ \loi_ifnum{0\if_ignoreemptyitems1\fi\loi_ifempty{#3}1{}=11 }
+ {\readlist_e{#1}{#2}% si l'on n'ignore pas les éléments vides
+ }%
+ {\loi_argcsname\loi_def{\loi_listname[\csname loi_previndex[\number\loi_nestcnt]\endcsname#1]}{#3}% assignation de l'item ctuel à la macro
+ \loi_argcsname\loi_def{\loi_listname sep[\csname loi_previndex[\number\loi_nestcnt]\endcsname#1]}{#4}% assignation du <sep> actuel à la macro \<macrolist>sep
+ \loi_ifnum{\loi_nestcnt<\nestdepth\relax}% si imbrication max non atteinte
+ {\advance\loi_nestcnt1
+ \loi_argcsname\edef{loi_previndex[\number\loi_nestcnt]}{\csname loi_previndex[\number\numexpr\loi_nestcnt-1]\endcsname#1,}%
+ \readlist_c{#3}% recommencer avec l'élément courant
+ }
+ {}%
+ \loi_exparg\readlist_e{\number\numexpr#1+1}{#2}% puis chercher l'élément suivant dans la liste restante
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% macro \listlen %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\listlen#1[#2]{%
+ \romannumeral\loi_ifempty{#2}
+ {\expandafter\expandafter\expandafter\loi_stop\csname\loi_macroname#1len[0]\endcsname}
+ {\loi_exparg\listlen_a{\romannumeral-`\.\loi_macroname#1}{#2}}%
+}
+\def\listlen_a#1#2{% #1=macro name #2=index non normalisé prendre <profondeur max-1>
+ \loi_exparg{\expandafter\listlen_b\romannumeral\loi_normalizeindex{#1}{#2}}{\number\numexpr\csname#1nest\endcsname-1}{#1}%
+}
+\def\listlen_b#1#2#3{% #1=err #2=index normalisé #3=macroname
+ \expandafter\expandafter\expandafter\loi_stop\csname#3len[#2,0]\expandafter\endcsname
+ \romannumeral\loi_ifempty{#1}{\loi_stop}{\loi_stop\loi_error{#1}}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macro \foreachitem %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\foreachitem#1\in#2{%
+ \edef\foreachitem_a{\noexpand\foreachitem_c\noexpand#1{\expandafter\noexpand\csname\loi_macroname#1cnt\endcsname}{\loi_macroname#2}}%
+ \futurelet\loi_nxttok\foreachitem_b
+}
+\def\foreachitem_b{\loi_ifx{\loi_nxttok[}\foreachitem_a{\foreachitem_a[]}}
+\def\foreachitem_c#1#2#3[#4]{% prendre <profondeur max-1>
+ \loi_exparg{\expandafter\foreachitem_d\romannumeral\loi_normalizeindex{#3}{#4}}{\number\numexpr\csname#3nest\endcsname-1}#1{#2}{#3}%
+}
+\def\foreachitem_d#1#2{\loi_ifempty{#2}{\foreachitem_e{#1}{}}{\foreachitem_e{#1}{#2,}}}% #1=err #2=index norm
+\long\def\foreachitem_e#1#2#3#4#5#6{% #1=err #2=index norm #3=macroiter #4=compteur associé #5=nom de macrolist #6=code
+ \loi_ifnum{\csname#5len[#20]\endcsname>0 }
+ {\loi_ifempty{#1}{}{\loi_error{#1}}%
+ \loi_fornum#4=1to\csname#5len[#20]\endcsname\do{\loi_argcsname\let#3{#5[#2#4]}#6}%
+ }
+ {}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% macro \showitem %%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\showitems{\loi_ifstar{\let\showitems_cmd\detokenize\showitems_a}{\let\showitems_cmd\loi_identity\showitems_a}}
+\def\showitems_a#1{\def\showitems_b{\showitems_d#1}\futurelet\loi_nxttok\showitems_c}
+\def\showitems_c{\loi_ifx{\loi_nxttok[}\showitems_b{\showitems_b[]}}
+\def\showitems_d#1[#2]{\foreachitem\showitems_ater\in#1[#2]{\showitemsmacro{\expandafter\showitems_cmd\expandafter{\showitems_ater}}}}
+\unless\ifdefined\fbox
+ \newdimen\fboxrule \newdimen\fboxsep \fboxrule=.4pt \fboxsep=3pt % réglages identiques à LaTeX
+ \def\fbox#1{% imitation de la macro \fbox de LaTeX, voir pages 271 à 274 de "Apprendre à programmer en TeX"
+ \hbox{%
+ \vrule width\fboxrule
+ \vtop{%
+ \vbox{\hrule height\fboxrule \kern\fboxsep \hbox{\kern\fboxsep#1\kern\fboxsep}}%
+ \kern\fboxsep \hrule height\fboxrule
+ }\vrule width\fboxrule
+ }%
+ }
+\fi
+\def\showitemsmacro#1{% encadrement par défaut
+ \begingroup\fboxsep=0.25pt \fboxrule=0.5pt \fbox{\strut#1}\endgroup
+ \hskip0.25em\relax
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% macro \itemtomacro %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\itemtomacro#1[#2]{% #1[#2]=item non encore lu: #3=macro
+ \edef\loi_listname{\loi_macroname#1}%
+ \loi_exparg{\expandafter\itemtomacro_a\romannumeral\expandafter\loi_normalizeindex\expandafter{\loi_listname}{#2}}{\csname\loi_listname nest\endcsname}\let
+}
+\def\gitemtomacro#1[#2]{% #1[#2]=item
+ \xdef\loi_listname{\loi_macroname#1}%
+ \loi_exparg{\expandafter\itemtomacro_a\romannumeral\expandafter\loi_normalizeindex\expandafter{\loi_listname}{#2}}{\csname\loi_listname nest\endcsname}{\global\let}%
+}
+\def\itemtomacro_a#1#2#3#4{%
+ \loi_ifempty{#1}{}{\loi_error{#1}}%
+ \loi_argcsname#3#4{\loi_listname[#2]}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% réglages par défaut %%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if_removeextremespaces
+\newif\if_ignoreemptyitems
+\let\ignoreemptyitems\_ignoreemptyitemstrue
+\let\reademptyitems\_ignoreemptyitemsfalse
+\setsepchar{,}
+\defpair{}
+\loi_def_foreachsep{,}
+\reademptyitems
+
+\loi_restorecatcode
+\endinput
+
+######################################################################
+############################ Historique #############################
+######################################################################
+
+v1.0 19/8/2016
+ - Première version publique
+
+v1.1 01/09/2016
+ - Stockage des séparateurs dans <macrolist>sep
+ - bug corrigé dans \loi_restorecatcode
+
+v1.2 22/10/2016
+ - macros \greadlist et \gitemtomacro pour la globalité
+
+v1.3 18/11/2016
+ - bugs corrigés dans la gestion de la globalité
+
+v1.4 05/10/2017
+ - test \loi_ifprimitive ajouté au test \loi_ifcs
+ - suppression de \loi_expafternil, création de \loi_expafter,
+ modification de \loi_argcsname
+ - correction d'un bug : \setsepchar{\par} ne provoque plus
+ d'erreur. \loi_ifnum devient \long
+
+v1.5 06/10/2017
+ - correction d'un bug dans \loi_ifcs
+
+v1.51 24/10/2017
+ - correction d'un bug dans \loi_ifcs
+
+v1.52 13/01/2018
+ - le dernier séparateur est <vide>
+
+v1.53 13/03/2018
+ - correction d'un bug dans \readlist_g
+
+v1.6 01/11/2018
+ - possibilité d'appariement de tokens dans les items
+
+v1.61 03/03/2019
+ - la macro \loi_ifcs contient une erreur de conception.
+ Il faut tester si le token est un sc && s'il est
+ développable pour renvoyer vrai car il existe des sc
+ non développables && qui ne sont _pas_ des primitives.
+ Macro rebaptisée \loi_ifcsexpandable \ No newline at end of file
diff --git a/macros/generic/localloc b/macros/generic/localloc
new file mode 120000
index 0000000000..7af85ed8d9
--- /dev/null
+++ b/macros/generic/localloc
@@ -0,0 +1 @@
+../latex/contrib/localloc \ No newline at end of file
diff --git a/macros/generic/lpform/README b/macros/generic/lpform/README
new file mode 100644
index 0000000000..4f0f9456a4
--- /dev/null
+++ b/macros/generic/lpform/README
@@ -0,0 +1,17 @@
+This is the README file for the lpform package.
+
+Author: Marijn Waltman
+E-mail: marijnwaltman AT hotmail DOT com
+Date: July 14, 2014
+
+Description:
+The lpform package is designed for easily writing linear programming formulations one restriction at a time. With this package, one can easily label equations, formulations can span multiple pages and several elements of the layout (such as spacing, texts and equation tags) are also customizable. Besides linear programming formulations, this package can also be used to display any series of aligned equations with easy labeling/referencing and other customization options.
+
+Included files:
+lpform-doc.pdf - The package documentation.
+lpform-doc.tex - The package documentation source file.
+lpform.sty - The style file for use in LaTeX.
+
+This package requires the xifthen package.
+
+This package is licensed under the LaTeX Project Public License. \ No newline at end of file
diff --git a/macros/generic/lpform/lpform-doc.pdf b/macros/generic/lpform/lpform-doc.pdf
new file mode 100644
index 0000000000..df093e973b
--- /dev/null
+++ b/macros/generic/lpform/lpform-doc.pdf
Binary files differ
diff --git a/macros/generic/lpform/lpform-doc.tex b/macros/generic/lpform/lpform-doc.tex
new file mode 100644
index 0000000000..8a0e52c6a1
--- /dev/null
+++ b/macros/generic/lpform/lpform-doc.tex
@@ -0,0 +1,300 @@
+\documentclass{article}
+
+\usepackage{amsmath}
+\usepackage{amsfonts}
+\usepackage{amsthm}
+\usepackage[english]{babel}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{graphicx}
+\usepackage{lpform}
+\usepackage[parfill]{parskip}
+\usepackage{fancyvrb}
+
+\newcommand{\example}{\textbf{Example: }}
+
+\begin{document}
+\title{\textsc{lpform} Package Documentation}
+\author{by Marijn Waltman}
+\date{\today}
+
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+
+The \textsc{lpform} package allows users to easily write linear programming formulations one restriction at a time. With this package, one can easily label equations, formulations can span multiple pages and several elements of the layout (such as spacing, texts and equation tags) are also customizable. Besides linear programming formulations, this package can also be used to display any series of aligned equations with easy labeling, referencing and other customization options.
+
+To start using the \textsc{lpform} package, put this in your document preamble:
+
+\begin{Verbatim}[frame=single]
+\usepackage{lpform}
+\end{Verbatim}
+
+The `lpform.sty' file should also be in the same folder as your .tex file.
+
+There are also the optional \textit{noforall} and \textit{alignedforall} arguments. Its purposes are explained in Section \ref{sec:optional}.
+
+\section{Commands}
+
+This is a list of all commands which are included in the package.
+
+\begin{itemize}
+\item \textbf{\textbackslash begin\{lpformulation\}[name] ... \textbackslash end\{lpformulation\}}
+
+This is the environment in which the commands below should be placed. Each restriction is an equation and is aligned using an align environment.
+\begin{itemize}
+\item \textit{name} is an optional argument, which is the name given to the formulation (e.g. (P1)) and is displayed on the left of the formulation before the first line.
+\end{itemize}
+
+\item \textbf{\textbackslash lpobj[label]\{min/max\}\{objective function\}}
+
+This displays the objective function, followed by the ``subject to'' text.
+\begin{itemize}
+\item \textit{label} is an optional argument which is the label text used for referencing.
+\item \textit{min/max} is the text before the objective function, which is usually either min or max.
+\item \textit{objective function} is where you put the objective function in math text.
+\end{itemize}
+
+\item \textbf{\textbackslash lpeq[label]\{constraint\}\{for all\}}
+
+This displays a constraint as an equation with only an equation number (e.g. (1)).
+\begin{itemize}
+\item \textit{constraint} is the constraint, which is automatically formatted in a math environment.
+\item \textit{for all} is the for all argument. The `for all' argument is automatically formatted in a math environment. If there is no for all argument for your constraint, then this argument should be left empty.
+\end{itemize}
+
+\item \textbf{\textbackslash lpnewsubeq[label]\{constraint\}\{for all\}}
+
+This is the same as \textbackslash lpeq but it also starts a new list of subequations, which are indexed by the letters a,b,c,... (e.g. (2a)).
+
+\item \textbf{\textbackslash lpsubeq[label]\{constraint\}\{for all\}}
+
+This is the same as \textbackslash lpeq but it continues a previously started list of subequations (e.g. (2b)).
+
+\item \textbf{\textbackslash lplabel\{label name\}}
+
+This works the same as \textbackslash label and can be placed anywhere in the formulation to label it with \textit{label name}; the \textbackslash ref command then displays the name of the formulation given in lpformulation.
+
+\item \textbf{\textbackslash lpnewline}
+
+This can be placed inside the \textbackslash lpobj, \textbackslash lpeq, \textbackslash lpnewsubeq and \textbackslash lpsubeq commands in order to split the equation over multiple lines. For an example of using this command, see Section \ref{sec:split}.
+\end{itemize}
+
+The \textbackslash lpobj, \textbackslash lpeq, \textbackslash lpnewsubeq and \textbackslash lpsubeq commands all have starred versions, which hides the equation number at the end of the line.
+
+\example Formulation \ref{lp:form} is a knapsack problem with additional constraints \eqref{eq:add1} and \eqref{eq:add2}.
+
+\vspace{2ex}
+\begin{Verbatim}[frame=single]
+\begin{lpformulation}[(P)]
+\lpobj{max}{\sum_{i \in I} u_ix_i}
+\lpeq*{\sum_{i \in I} w_ix_i \le W}{}
+\lpnewsubeq[eq:add1]{\sum_{i \in I} x_i \le 5}{}
+\lpsubeq[eq:add2]{x_1 = 1}{}
+\lpeq{x_i \in \{0,1\}}{i \in I}
+\lplabel{lp:form}
+\end{lpformulation}
+\end{Verbatim}
+\begin{lpformulation}[(P)]
+\lplabel{lp:form}
+\lpobj{max}{\sum_{i \in I} u_ix_i}
+\lpeq*{\sum_{i \in I} w_ix_i \le W}{}
+\lpnewsubeq[eq:add1]{\sum_{i \in I} x_i \le 5}{}
+\lpsubeq[eq:add2]{x_1 = 1}{}
+\lpeq{x_i \in \{0,1\}}{i \in I}
+\end{lpformulation}
+
+\textbf{Important:} When adding equations inside the lpformulation environment, it is important that there are NO empty lines, as this will cause an error to occur. An example of using empty lines:
+
+\begin{Verbatim}[frame=single]
+\begin{lpformulation}
+\lpeq{5+1=6}{}
+
+\lpeq{5+2=7}{}
+\end{lpformulation}
+\end{Verbatim}
+
+\section{Optional arguments}
+\label{sec:optional}
+
+\subsection{\textit{noforall}}
+
+The \textsc{lpform} package has an optional \textit{noforall} argument, which can be used by putting
+
+\begin{Verbatim}[frame=single]
+\usepackage[noforall]{lpform}
+\end{Verbatim}
+
+in your document preamble. This argument removes the `for all' arguments from the \textbackslash lpeq, \textbackslash lpnewsubeq and \textbackslash lpsubeq commands. This can be useful if you want to make a simple list of equations without having to leave the `for all' argument empty each time, or if you want to typeset the `for all' arguments manually.
+
+\example An arbitrary list of equations (with \textit{noforall} on).
+
+\vspace{2ex}
+\begin{Verbatim}[frame=single]
+\begin{lpformulation}
+\lpeq{e^{i\pi} = -1}
+\lpnewsubeq{\phi = \frac{1+\sqrt{5}}{2}}
+\lpsubeq{\phi^2 - \phi - 1 = 0}
+\end{lpformulation}
+\end{Verbatim}
+\begin{lpformulation}
+\lpeq{e^{i\pi} = -1}{}
+\lpnewsubeq{\phi = \frac{1+\sqrt{5}}{2}}{}
+\lpsubeq{\phi^2 - \phi - 1 = 0}{}
+\end{lpformulation}
+
+\subsection{\textit{alignedforall}}
+\label{sec:optionalalign}
+
+The optional \textit{alignedforall} argument can be used by putting
+
+\begin{Verbatim}[frame=single]
+\usepackage[alignedforall]{lpform}
+\end{Verbatim}
+
+in your document preamble. This argument aligns the `for all' arguments of all equations in the \textbackslash lpformulation environment. The alignment is either around the center of the page or to the right of the longest equation if this equation is longer than half of the page. Using this argument is equivalent to using
+
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpforall}[1]{&& \forall #1}
+\end{Verbatim}
+
+For examples of this argument in use, see Section \ref{sec:aligned}.
+
+\section{Internal variables}
+
+This package uses several internal variables to determine how the equations are displayed. These variables can also be redefined in order to customize the layout.
+
+\begin{itemize}
+\item \textbf{\textbackslash lpsubjectto}
+
+This is the text which is shown in the `subject to'-line. Default value is `s.t.'. To change this variable to \textit{value}, use
+
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpsubjectto}{value}
+\end{Verbatim}
+
+\item \textbf{\textbackslash lpforall}
+
+This is the way the \textit{for all} argument is displayed. Default value is `\textbackslash quad \textbackslash forall \#1'. To change this variable to \textit{value}, use
+
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpforall}[1]{value}
+\end{Verbatim}
+
+\item \textbf{\textbackslash lpindent}
+
+This is the size of the left indent. Default value is `\textbackslash hspace\{20pt\}'. To change this variable to \textit{value}, use
+
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpindent}{value}
+\end{Verbatim}
+
+\item \textbf{\textbackslash lpsubeqtag}
+
+This is the way that sub-equations are tagged. Default value is `\textbackslash theequation\textbackslash alph\{subcounter\}', where subcounter is the counter of the sub-equation in the list. To change this variable to \textit{value}, use
+
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpsubeqtag}{value}
+\end{Verbatim}
+\end{itemize}
+
+\section{Custom layout examples}
+
+\subsection{Custom names, tags and spacing}
+
+This is an example of using the custom names, custom equation tags and custom spacing options. In this example the left indent has been removed, `max' has been changed to ``Maximize:'', the `subject to' line has been changed to ``Subject to:'' and the sub-equations are tagged by numbers instead of letters.
+
+\example A knapsack problem with additional constraints.
+
+\vspace{2ex}
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpindent}{\hspace{0pt}}
+\renewcommand{\lpsubjectto}{Subject to:}
+\renewcommand{\lpsubeqtag}{\theequation .\arabic{subcounter}}
+\begin{lpformulation}
+\lpobj{Maximize:}{\sum_{i \in I} u_ix_i}
+\lpeq*{\sum_{i \in I} w_ix_i \le W}{}
+\lpnewsubeq{\sum_{i \in I} x_i \le 5}{}
+\lpsubeq{x_1 = 1}{}
+\lpeq{x_i \in \{0,1\}}{i \in I}
+\end{lpformulation}
+\end{Verbatim}
+\renewcommand{\lpindent}{\hspace{0pt}}
+\renewcommand{\lpsubjectto}{Subject to:}
+\renewcommand{\lpsubeqtag}{\theequation .\arabic{subcounter}}
+\begin{lpformulation}
+\lpobj{Maximize:}{\sum_{i \in I} u_ix_i}
+\lpeq*{\sum_{i \in I} w_ix_i \le W}{}
+\lpnewsubeq{\sum_{i \in I} x_i \le 5}{}
+\lpsubeq{x_1 = 1}{}
+\lpeq{x_i \in \{0,1\}}{i \in I}
+\end{lpformulation}
+
+\subsection{Aligned `for all' arguments}
+\label{sec:aligned}
+
+Since each equation is put in an align environment, the `for all' arguments can be aligned by letting a new column start before the argument is shown. This can be achieved by using
+
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpforall}[1]{&& \forall #1}
+\end{Verbatim}
+
+or by using the \textit{alignedforall} argument in the document preamble. The `for all' arguments will be aligned either around the center of the page or just to the right of the longest equation if this equation is longer than half of the page.
+
+\example An arbitrary problem.
+
+\vspace{2ex}
+\begin{Verbatim}[frame=single]
+\renewcommand{\lpforall}[1]{&& \forall #1}
+\begin{lpformulation}
+\lpobj{max}{\sum_{i \in I} u_ix_i
+ - \sum_{i \in I} \sum_{j \in J} v_iy_{ij}}
+\lpeq{\sum_{i \in I} y_{ij} - \sum_{i \in I} x_i
+ \le 3.141592653589793238462643...}{j \in J}
+\lpeq{\sum_{i \in I} x_i \le 5}{}
+\lpeq{\sum_{j \in J} y_{ij} \ge 5}{i \in I}
+\lpnewsubeq{x_i \in \{0,1\}}{i \in I}
+\lpsubeq{y_{ij} \in \{0,1\}}{i \in I, j \in J}
+\end{lpformulation}
+\end{Verbatim}
+\renewcommand{\lpindent}{\hspace{20pt}}
+\renewcommand{\lpsubjectto}{s.t.}
+\renewcommand{\lpsubeqtag}{\theequation\alph{subcounter}}
+\renewcommand{\lpforall}[1]{&& \forall #1}
+\begin{lpformulation}
+\lpobj{max}{\sum_{i \in I} u_ix_i - \sum_{i \in I} \sum_{j \in J} v_iy_{ij}}
+\lpeq{\sum_{i \in I} y_{ij} - \sum_{i \in I} x_i \le 3.141592653589793238462643...}{j \in J}
+\lpeq{\sum_{i \in I} x_i \le 5}{}
+\lpeq{\sum_{j \in J} y_{ij} \ge 5}{i \in I}
+\lpnewsubeq{x_i \in \{0,1\}}{i \in I}
+\lpsubeq{y_{ij} \in \{0,1\}}{i \in I, j \in J}
+\end{lpformulation}
+
+\subsection{Splitting long equations}
+\label{sec:split}
+
+Sometimes an equation can be too long to fit on just one line, which has some undesirable results. In these situations the \textbackslash lpnewline command can be used to break up the equation and divide it over multiple lines. Additional spacing can be added manually.
+
+\example Breaking up a long equation.
+
+\vspace{2ex}
+\begin{Verbatim}[frame=single]
+\begin{lpformulation}
+\lpeq{1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\frac{1}{16}
+ +\frac{1}{32}+\frac{1}{64}+\frac{1}{128}
+ +\frac{1}{256}+\frac{1}{512}+\frac{1}{1024}
+ +\frac{1}{2048}+...=2}{}
+\lpeq{1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\frac{1}{16}
+ +\frac{1}{32}+\frac{1}{64}+\frac{1}{128}+...
+ \lpnewline\qquad ...+\frac{1}{256}+\frac{1}{512}
+ +\frac{1}{1024}+\frac{1}{2048}+...=2}{}
+\end{lpformulation}
+\end{Verbatim}
+\renewcommand{\lpforall}[1]{\quad \forall #1}
+\begin{lpformulation}
+\lpeq{1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \frac{1}{16} + \frac{1}{32} + \frac{1}{64} + \frac{1}{128} + \frac{1}{256} + \frac{1}{512} + \frac{1}{1024} + \frac{1}{2048} + ... = 2}{}
+\lpeq{1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \frac{1}{16} + \frac{1}{32} + \frac{1}{64} + \frac{1}{128} + ... \lpnewline\qquad ... + \frac{1}{256} + \frac{1}{512} + \frac{1}{1024} + \frac{1}{2048} + ... = 2}{}
+\end{lpformulation}
+
+\end{document} \ No newline at end of file
diff --git a/macros/generic/lpform/lpform.sty b/macros/generic/lpform/lpform.sty
new file mode 100644
index 0000000000..59760c4e81
--- /dev/null
+++ b/macros/generic/lpform/lpform.sty
@@ -0,0 +1,78 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lpform}[2015/04/18]
+
+\usepackage{xifthen}
+
+\makeatletter
+
+\newcounter{subcounter} % This is the counter for the sub-equations
+\newcounter{eqcounter} % This counts the number of equations in the lpformulation environment
+
+% Creating custom labels
+\newcommand{\customlabel}[2]{\protected@write \@auxout{}{\string \newlabel {#1}{{#2}{}}}}
+
+% The name of the formulation
+\newcommand{\lpname}{}
+
+% The lpformulation environment
+\newenvironment{lpformulation}[1][]{\setcounter{eqcounter}{0}\renewcommand{\lpname}{#1} \start@align\tw@\st@rredfalse\m@ne \ifthenelse{\isempty{#1}}{}{\lpname}}{\endalign}
+
+% The method that is used to display the for all arguments
+\newcommand{\lpforall}[1]{\quad \forall #1}
+
+% The size of the left indent
+\newcommand{\lpindent}{\hspace{20pt}}
+
+% The method that is used to tag subequations
+\newcommand{\lpsubeqtag}{\theequation\alph{subcounter}}
+
+% The text that is shown on the 'subject to' line
+\newcommand{\lpsubjectto}{s.t.}
+
+% Labeling the lp formulation
+\newcommand{\lplabel}[1]{\customlabel{#1}{\lpname}}
+
+% Splitting one equation into two lines
+\newcommand{\lpnewline}{\nonumber\\&\lpindent}
+
+% \lpobj(*)[label]{min/max}{objective function}
+\def\lpobj{\@ifstar\@@lpobj\@lpobj}
+\newcommand{\@lpobj}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\textrm{#2 } #3 \ifthenelse{\isempty{#1}}{}{\label{#1}}&\\&\lpindent\nonumber\textrm{\lpsubjectto}&}
+\newcommand{\@@lpobj}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\textrm{#2 } #3 \nonumber \ifthenelse{\isempty{#1}}{}{\label{#1}}&\\&\lpindent\nonumber\textrm{\lpsubjectto}&}
+
+% \lpeq(*)[label]{constraint}{for all}
+\def\lpeq{\@ifstar\@@lpeq\@lpeq}
+\newcommand{\@lpeq}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent #2 \ifthenelse{\isempty{#3}}{}{\lpforall{#3}}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+\newcommand{\@@lpeq}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent #2 \nonumber\ifthenelse{\isempty{#3}}{}{\lpforall{#3}}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+
+% \lpnewsubeq(*)[label]{constraint}{for all}
+\def\lpnewsubeq{\@ifstar\@@lpnewsubeq\@lpnewsubeq}
+\newcommand{\@lpnewsubeq}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\refstepcounter{equation}\setcounter{subcounter}{1} #2 \ifthenelse{\isempty{#3}}{}{\lpforall{#3}}\tag{\lpsubeqtag}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+\newcommand{\@@lpnewsubeq}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\refstepcounter{equation}\setcounter{subcounter}{0} #2 \nonumber\ifthenelse{\isempty{#3}}{}{\lpforall{#3}}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+
+% \lpsubeq(*)[label]{constraint}{for all}
+\def\lpsubeq{\@ifstar\@@lpsubeq\@lpsubeq}
+\newcommand{\@lpsubeq}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\refstepcounter{subcounter} #2 \ifthenelse{\isempty{#3}}{}{\lpforall{#3}}\tag{\lpsubeqtag}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+\newcommand{\@@lpsubeq}[3][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent #2 \nonumber\ifthenelse{\isempty{#3}}{}{\lpforall{#3}}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+
+% Using the noforall option
+\DeclareOption{noforall}{
+ \renewcommand{\@lpeq}[2][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent #2 \ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+ \renewcommand{\@@lpeq}[2][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent #2 \nonumber\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+ \renewcommand{\@lpnewsubeq}[2][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\refstepcounter{equation}\setcounter{subcounter}{1} #2 \tag{\lpsubeqtag}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+ \renewcommand{\@@lpnewsubeq}[2][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\refstepcounter{equation}\setcounter{subcounter}{0} #2 \nonumber\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+ \renewcommand{\@lpsubeq}[2][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent\refstepcounter{subcounter} #2 \tag{\lpsubeqtag}\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+ \renewcommand{\@@lpsubeq}[2][]{\ifthenelse{\value{eqcounter} = 0}{}{\displaybreak[0]\\}\stepcounter{eqcounter}&\lpindent #2 \nonumber\ifthenelse{\isempty{#1}}{}{\label{#1}}&}
+}
+
+% Using the alignedforall option
+\DeclareOption{alignedforall}{
+ \renewcommand{\lpforall}[1]{&& \forall #1}
+}
+
+\ExecuteOptions{}
+\ProcessOptions\relax
+
+\makeatother
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/luatex85/README.md b/macros/generic/luatex85/README.md
new file mode 100644
index 0000000000..fd21bd08f7
--- /dev/null
+++ b/macros/generic/luatex85/README.md
@@ -0,0 +1,10 @@
+luatex85 - Compatibility package for luatex 0.85+
+==================================================
+
+This package provides emulation of pdfTeX
+primitives for LuaTeX v0.85+.
+
+Please report any issues via
+https://github.com/josephwright/luatex85/issues
+
+This package is maintained by David Carlisle and Joseph Wright. \ No newline at end of file
diff --git a/macros/generic/luatex85/luatex85.dtx b/macros/generic/luatex85/luatex85.dtx
new file mode 100644
index 0000000000..3d1da23c57
--- /dev/null
+++ b/macros/generic/luatex85/luatex85.dtx
@@ -0,0 +1,277 @@
+% \iffalse
+%% Source File: luatex85.dtx
+%% Copyright 2015-2016 LaTeX3 project
+%%
+%% This file may be distributed under the terms of the LPPL.
+%% See README for details.
+%
+%<*dtx>
+ \ProvidesFile{luatex85.dtx}
+%</dtx>
+%<package>\ifx\ProvidesPackage\undefined
+%<package>\def\next#1#2[#3]{\wlog{#2 #3}\expandafter\gdef
+%<package>\csname ver@luatex85.sty\endcsname{#3}}
+%<package>\expandafter\next\fi
+%<package>\ProvidesPackage{luatex85}
+%<driver> \ProvidesFile{luatex85.drv}
+% \fi
+% \ProvidesFile{luatex85.dtx}
+ [2016/06/15 v1.4 pdftex aliases for luatex]
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\begin{document}
+\DocInput{luatex85.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \hfuzz0.6pt
+%
+% \GetFileInfo{luatex85.dtx}
+%
+% \title{The \textsf{luatex85} Package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.
+% Please report any issues at https://github.com/josephwright/luatex85/issues}}
+% \author{LaTeX3 project}
+% \date{\filedate}
+% \maketitle
+%
+% \section{Introduction}
+%
+% Lua\TeX\ 0.85 and 0.87 contain many changes from Lua\TeX~0.80 as contained in \TeX{}Live 2014.
+% Most notably almost all the pdf\TeX\ extended primitves with names
+% \verb|\pdf...| have been renamed or removed. Lua\TeX\ is aiming for
+% a cleaner separation of the ``back end'' PDF generation (that
+% corresponds to the work of a dvi driver with classical \TeX).
+%
+% There are many other changes and bug fixes in the Lua\TeX\ sources,
+% however this package is just concerned with compatibility for
+% documents or packages using the pdf\TeX\ primitives.
+%
+% The changes are of several types:
+%
+% A few commands have been removed,
+% as the facilities are achievable in Lua (mostly these had already
+% been removed in earlier release).
+%
+% Some commands have been ``adopted'' as Lua\TeX\ primitives and so
+% lose their \verb|\pdf| prefix (and in some cases are renamed)
+% so \verb|\pdfsavepos| becomes \verb|\savepos|, but \verb|\pdfoutput|
+% becomes \verb|\outputmode|.
+%
+% The majority of the ``back end'' commands have been removed and
+% replaced by calls to one of three new primitives,
+% \verb|\pdffeedback|, \verb|\pdfextension| and \verb|\pdfvariable|
+% These take keywords so for example \verb|\pdfliteral| becomes
+% \verb|\pdfextension literal|.
+%
+% The Lua\TeX\ manual lists suitable compatibility definitions
+% that may be made so that documents can continue to use the old
+% names. Mostly this package just consists of those definitions, with
+% minor changes in some cases. (Mostly different choices over the use
+% of \verb|\protected| or \verb|\edef|.)
+%
+% In general it is recommended that packages are updated to use the
+% new primitive Lua\TeX\ syntax when used with Lua\TeX, but until
+% packages are updated authors may find that adding\\%
+% \verb|\RequirePackage{luatex85}|\\
+% as the first line of their
+% document helps with the use of older packages with the new Lua\TeX.
+%
+% As noted above, there are other changes in Lua\TeX, notably the
+% removal of the |\verb\write18| syntax for accessing system commands.
+% The \LaTeX\ \textsf{tools} bundle includes
+% the \textsf{shellesc} package which emulates
+% \verb|\write18| as well as providing an alternative
+% \verb|\Shellescape| syntax that may be used with all engines.
+%
+% Note that if packages are found that require \textsf{luatex85}
+% you may want to contact the authors asking that the packages
+% be updated to current Lua\TeX\ syntax. The \textsf{luatex85} package
+% should be seen as a temporary aid to improve compatibility during
+% the transition towards Lua\TeX~1.0 it is not intended that future
+% documents should always have to load this compatibility emulation.
+%
+% The package is designed to also be usable with plain Lua\TeX.
+%
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{Checking the engine}
+% \begin{macrocode}
+\ifx\pdfvariable\undefined
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+
+% \subsection{Commands promoted to Lua\TeX\ primitives.}
+%
+%
+% \begin{macrocode}
+\let\pdfpagewidth \pagewidth
+\let\pdfpageheight \pageheight
+\let\pdfadjustspacing \adjustspacing
+\let\pdfprotrudechars \protrudechars
+\let\pdfnoligatures \ignoreligaturesinfont
+\let\pdffontexpand \expandglyphsinfont
+\let\pdfcopyfont \copyfont
+\let\pdfxform \saveboxresource
+\let\pdflastxform \lastsavedboxresourceindex
+\let\pdfrefxform \useboxresource
+\let\pdfximage \saveimageresource
+\let\pdflastximage \lastsavedimageresourceindex
+\let\pdflastximagepages \lastsavedimageresourcepages
+\let\pdfrefximage \useimageresource
+\let\pdfsavepos \savepos
+\let\pdflastxpos \lastxpos
+\let\pdflastypos \lastypos
+\let\pdfoutput \outputmode
+\let\pdfdraftmode \draftmode
+\let\pdfpxdimen \pxdimen
+\let\pdfinsertht \insertht
+\let\pdfnormaldeviate \normaldeviate
+\let\pdfuniformdeviate \uniformdeviate
+\let\pdfsetrandomseed \setrandomseed
+\let\pdfrandomseed \randomseed
+\let\pdfprimitive \primitive
+\let\ifpdfprimitive \ifprimitive
+\let\ifpdfabsnum \ifabsnum
+\let\ifpdfabsdim \ifabsdim
+% \end{macrocode}
+% Use |\enableprimitives| here in case of conflict with tracefnt.
+% \begin{macrocode}
+\directlua{tex.enableprimitives('pdf',{'tracingfonts'})}
+% \end{macrocode}
+%
+% \subsection{Commands converted to constants}
+% The |\pdffeedback| version is not defined in dvi mode and (currently) is
+% curiously defined to be 40 in pdf mode, so define these as constant values.
+% \begin{macrocode}
+\protected\def\pdftexversion {\numexpr 140\relax}
+ \def\pdftexrevision {7}
+%\protected\def\pdftexversion {\numexpr\pdffeedback version\relax}
+% \def\pdftexrevision {\pdffeedback revision}
+% \end{macrocode}
+%
+% \subsection{Commands converted to \cs{pdffeedback}}
+% Expandable commands use a simple |\def|. Internal registers that
+% were accessed via |\the| in PDF\TeX\ use a |\protected| definition
+% using |\numexpr| terminated by an explicit |\relax|.
+% \begin{macrocode}
+\protected\def\pdflastlink {\numexpr\pdffeedback lastlink\relax}
+\protected\def\pdfretval {\numexpr\pdffeedback retval\relax}
+\protected\def\pdflastobj {\numexpr\pdffeedback lastobj\relax}
+\protected\def\pdflastannot {\numexpr\pdffeedback lastannot\relax}
+ \def\pdfxformname {\pdffeedback xformname}
+{\outputmode=1
+ \xdef\pdfcreationdate {\pdffeedback creationdate}
+}
+ \def\pdffontname {\pdffeedback fontname}
+ \def\pdffontobjnum {\pdffeedback fontobjnum}
+ \def\pdffontsize {\pdffeedback fontsize}
+ \def\pdfpageref {\pdffeedback pageref}
+ \def\pdfcolorstackinit {\pdffeedback colorstackinit}
+% \end{macrocode}
+%
+% \subsection{Commands converted to calls to \cs{pdfextension}}
+% These use a |\protected| definition. Commands that take no following
+% argument are currently terminated by |\relax| as suggested in the
+% Lua\TeX\ manual, although it would be appear to be sufficient to
+% consistently terminate these commands with a space.
+% \begin{macrocode}
+\protected\def\pdfliteral {\pdfextension literal}
+\protected\def\pdfcolorstack {\pdfextension colorstack}
+\protected\def\pdfsetmatrix {\pdfextension setmatrix}
+\protected\def\pdfsave {\pdfextension save\relax}
+\protected\def\pdfrestore {\pdfextension restore\relax}
+\protected\def\pdfobj {\pdfextension obj }
+\protected\def\pdfrefobj {\pdfextension refobj }
+\protected\def\pdfannot {\pdfextension annot }
+\protected\def\pdfstartlink {\pdfextension startlink }
+\protected\def\pdfendlink {\pdfextension endlink\relax}
+\protected\def\pdfoutline {\pdfextension outline }
+\protected\def\pdfdest {\pdfextension dest }
+\protected\def\pdfthread {\pdfextension thread }
+\protected\def\pdfstartthread {\pdfextension startthread }
+\protected\def\pdfendthread {\pdfextension endthread\relax}
+\protected\def\pdfinfo {\pdfextension info }
+\protected\def\pdfcatalog {\pdfextension catalog }
+\protected\def\pdfnames {\pdfextension names }
+\protected\def\pdfincludechars {\pdfextension includechars }
+\protected\def\pdffontattr {\pdfextension fontattr }
+\protected\def\pdfmapfile {\pdfextension mapfile }
+\protected\def\pdfmapline {\pdfextension mapline }
+\protected\def\pdftrailer {\pdfextension trailer }
+\protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+% \end{macrocode}
+%
+% \subsection{Commands converted to calls to \cs{pdfvariable}}
+% Currently as suggested in the manual the call to |\pdfvariable| has
+% no explict termination, and relies on the fact that no variable name
+% is a prefix of another. |\edef| is used to save one expansion step
+% when these comands are used the definition directly access the
+% internal command token.
+% \begin{macrocode}
+\protected\edef\pdfcompresslevel {\pdfvariable compresslevel}
+\protected\edef\pdfobjcompresslevel {\pdfvariable objcompresslevel}
+\protected\edef\pdfdecimaldigits {\pdfvariable decimaldigits}
+\protected\edef\pdfgamma {\pdfvariable gamma}
+\protected\edef\pdfimageresolution {\pdfvariable imageresolution}
+\protected\edef\pdfimageapplygamma {\pdfvariable imageapplygamma}
+\protected\edef\pdfimagegamma {\pdfvariable imagegamma}
+\protected\edef\pdfimagehicolor {\pdfvariable imagehicolor}
+% \end{macrocode}
+% Note that |\pdfimageaddfilename| was never actually in PDF\TeX,
+% But is included here so that all the |\pdfvariable| cases are covered.
+% \begin{macrocode}
+\protected\edef\pdfimageaddfilename {\pdfvariable imageaddfilename}
+% \end{macrocode}
+% \begin{macrocode}
+\protected\edef\pdfpkresolution {\pdfvariable pkresolution}
+\protected\edef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts}
+\protected\edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel}
+% \end{macrocode}
+% Note that |\pdfreplacefont| was never in public releases of
+% PDF\TeX, It was in Lua\TeX0.85, but discussion on luatex list
+% lead to it being removed in 0.87
+% \begin{macrocode}
+%\protected\edef\pdfreplacefont {\pdfvariable replacefont}
+% \end{macrocode}
+% \begin{macrocode}
+\protected\edef\pdfgentounicode {\pdfvariable gentounicode}
+\protected\edef\pdfpagebox {\pdfvariable pagebox}
+\protected\edef\pdfminorversion {\pdfvariable minorversion}
+\protected\edef\pdfuniqueresname {\pdfvariable uniqueresname}
+\protected\edef\pdfhorigin {\pdfvariable horigin}
+\protected\edef\pdfvorigin {\pdfvariable vorigin}
+\protected\edef\pdflinkmargin {\pdfvariable linkmargin}
+\protected\edef\pdfdestmargin {\pdfvariable destmargin}
+\protected\edef\pdfthreadmargin {\pdfvariable threadmargin}
+\protected\edef\pdfpagesattr {\pdfvariable pagesattr}
+\protected\edef\pdfpageattr {\pdfvariable pageattr}
+\protected\edef\pdfpageresources {\pdfvariable pageresources}
+% \end{macrocode}
+% Note that |\pdfxformattr| and |\pdfxformresources| were never
+% in PDF\TeX, But are included here so that all the
+% |\pdfvariable| cases are covered.
+% \begin{macrocode}
+\protected\edef\pdfxformattr {\pdfvariable xformattr}
+\protected\edef\pdfxformresources {\pdfvariable xformresources}
+% \end{macrocode}
+% \begin{macrocode}
+\protected\edef\pdfpkmode {\pdfvariable pkmode}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
diff --git a/macros/generic/luatex85/luatex85.ins b/macros/generic/luatex85/luatex85.ins
new file mode 100644
index 0000000000..8a9b7e9344
--- /dev/null
+++ b/macros/generic/luatex85/luatex85.ins
@@ -0,0 +1,10 @@
+\input docstrip
+\keepsilent
+\preamble
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{luatex85.sty}{\from{luatex85.dtx}{package}}}
+
+\endbatchfile
diff --git a/macros/generic/luatex85/luatex85.pdf b/macros/generic/luatex85/luatex85.pdf
new file mode 100644
index 0000000000..99675fdf4c
--- /dev/null
+++ b/macros/generic/luatex85/luatex85.pdf
Binary files differ
diff --git a/macros/generic/markdown/LICENSE b/macros/generic/markdown/LICENSE
new file mode 100644
index 0000000000..72d52c06d9
--- /dev/null
+++ b/macros/generic/markdown/LICENSE
@@ -0,0 +1,42 @@
+Copyright (C) 2009-2016 John MacFarlane, Hans Hagen
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Copyright (C) 2016-2018 Vít Novotný
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Vít Novotný.
+
+Send bug reports, requests for additions and questions
+either to the GitHub issue tracker at
+
+ https://github.com/witiko/markdown/issues
+
+or to the e-mail address <witiko@mail.muni.cz>.
diff --git a/macros/generic/markdown/Makefile b/macros/generic/markdown/Makefile
new file mode 100644
index 0000000000..5c210f83e4
--- /dev/null
+++ b/macros/generic/markdown/Makefile
@@ -0,0 +1,130 @@
+.PHONY: all clean implode dist test examples
+AUXFILES=markdown.bbl markdown.cb markdown.cb2 markdown.glo markdown.bbl \
+ markdown.run.xml markdown.bib markdown.markdown.in markdown.markdown.lua \
+ markdown.markdown.out
+AUXDIRS=_minted-markdown _markdown_markdown
+TDSARCHIVE=markdown.tds.zip
+CTANARCHIVE=markdown.ctan.zip
+DISTARCHIVE=markdown.zip
+ARCHIVES=$(TDSARCHIVE) $(CTANARCHIVE) $(DISTARCHIVE)
+EXAMPLES_RESOURCES=examples/example.md examples/scientists.csv
+EXAMPLES_SOURCES=examples/context.tex examples/latex.tex
+EXAMPLES=examples/context-mkii.pdf examples/context-mkiv.pdf \
+ examples/latex-pdftex.pdf examples/latex-luatex.pdf examples/latex-xetex.pdf
+TESTS=tests/test.sh tests/support/*.tex tests/templates/*/*.tex.m4 \
+ tests/templates/*/COMMANDS.m4 tests/testfiles/*/*.test
+MAKES=Makefile $(addsuffix /Makefile, $(SUBDIRECTORIES)) latexmkrc
+READMES=README.md LICENSE examples/README.md tests/README.md \
+ tests/support/README.md tests/templates/README.md tests/testfiles/README.md \
+ tests/templates/*/README.md tests/testfiles/*/README.md
+DTXARCHIVE=markdown.dtx
+VERSION=$(shell sed -rn '/^\\def\\markdownVersion\{/s/[^{]*\{(.*)\}.*/\1/p' <$(DTXARCHIVE))
+LASTMODIFIED=$(shell sed -rn '/^\\def\\markdownLastModified\{/s/[^{]*\{(.*)\}.*/\1/p' <$(DTXARCHIVE))
+INSTALLER=markdown.ins docstrip.cfg
+TECHNICAL_DOCUMENTATION=markdown.pdf
+MARKDOWN_USER_MANUAL=markdown.md markdown.css
+HTML_USER_MANUAL=markdown.html markdown.css
+USER_MANUAL=$(MARKDOWN_USER_MANUAL) $(HTML_USER_MANUAL)
+DOCUMENTATION=$(TECHNICAL_DOCUMENTATION) $(USER_MANUAL)
+INSTALLABLES=markdown.lua markdown-cli.lua markdown.tex markdown.sty t-markdown.tex
+MAKEABLES=$(TECHNICAL_DOCUMENTATION) $(USER_MANUAL) $(INSTALLABLES) $(EXAMPLES)
+RESOURCES=$(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(EXAMPLES) \
+ $(MAKES) $(READMES) $(INSTALLER) $(DTXARCHIVE) $(TESTS)
+EVERYTHING=$(RESOURCES) $(INSTALLABLES)
+
+# This is the default pseudo-target. It typesets the manual,
+# the examples, and extracts the package files.
+all: $(MAKEABLES)
+ $(MAKE) clean
+
+# This target extracts the source files out of the DTX archive.
+$(INSTALLABLES) $(MARKDOWN_USER_MANUAL): $(INSTALLER) $(DTXARCHIVE)
+ xetex $<
+
+# This target typesets the manual.
+$(TECHNICAL_DOCUMENTATION): $(DTXARCHIVE) $(INSTALLABLES)
+ latexmk -interaction=nonstopmode $<
+
+# These targets typeset the examples.
+$(EXAMPLES): $(EXAMPLE_SOURCES) examples/example.tex $(INSTALLABLES)
+ $(MAKE) -C examples $(notdir $@)
+
+examples/example.tex: $(INSTALLABLES)
+ $(MAKE) -C examples $(notdir $@)
+
+# This target converts the markdown user manual to an HTML page.
+%.html: %.md %.css
+ awk '{ \
+ filename = gensub(/^\/(.*\.md)$$/, "\\1", "g"); \
+ if(filename != $$0) \
+ system("cat " filename); \
+ else \
+ print($$0); \
+ }' <$< | \
+ sed -e 's#\\markdownVersion{}#$(VERSION)#g' \
+ -e 's#\\markdownLastModified{}#$(LASTMODIFIED)#g' \
+ -e 's#\\TeX{}#<span class="tex">T<sub>e</sub>X</span>#g' \
+ -e 's#\\LaTeX{}#<span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>#g' \
+ -e 's#\\Hologo{ConTeXt}#Con<span class="tex">T<sub>e</sub>X</span>t#g' \
+ -e 's#\\Opt{\([^}]*\)}#**`\1`**#g' -e 's#\\,# #g' \
+ -e 's#\\meta{\([^}]*\)}#\&LeftAngleBracket;*\1*\&RightAngleBracket;#g' \
+ -e 's#\\acro{\([^}]*\)}#<abbr>\1</abbr>#g' \
+ -e 's#;-)#<i class="em em-wink"></i>#g' \
+ -e 's#\\envm{\([^}]*\)}#`\1`#g' -e 's#\\envmdef{\([^}]*\)}#`\1`#g' \
+ -e 's#\\m{\([^}]*\)}#`\\\1`#g' -e 's#\\mdef{\([^}]*\)}#`\\\1`#g' | \
+ pandoc -f markdown -t html -N -s --toc --toc-depth=3 --css=$(word 2, $^) >$@
+
+# This pseudo-target runs all the tests in the `tests/` directory.
+test:
+ $(MAKE) -C tests
+
+# This pseudo-target produces the distribution archives.
+dist: implode
+ $(MAKE) $(ARCHIVES)
+ $(MAKE) clean
+
+# This target produces the TeX directory structure archive.
+$(TDSARCHIVE): $(DTXARCHIVE) $(INSTALLABLES) $(DOCUMENTATION)
+ @# Installing the macro package.
+ mkdir -p tex/generic/markdown tex/luatex/markdown tex/latex/markdown \
+ tex/context/third/markdown scripts/markdown
+ cp markdown.lua tex/luatex/markdown/
+ cp markdown-cli.lua scripts/markdown/
+ cp markdown.sty tex/latex/markdown/
+ cp markdown.tex tex/generic/markdown/
+ cp t-markdown.tex tex/context/third/markdown/
+ @# Installing the documentation.
+ mkdir -p doc/generic/markdown doc/latex/markdown/examples \
+ doc/context/third/markdown/examples
+ cp $(DOCUMENTATION) doc/generic/markdown/
+ cp examples/context.tex $(EXAMPLES_RESOURCES) doc/context/third/markdown/examples/
+ cp examples/latex.tex $(EXAMPLES_RESOURCES) doc/latex/markdown/examples/
+ @# Installing the sources.
+ mkdir -p source/generic/markdown
+ cp $(DTXARCHIVE) $(INSTALLER) source/generic/markdown
+ zip -r -v -nw $@ doc scripts source tex
+ rm -rf doc scripts source tex
+
+# This target produces the distribution archive.
+$(DISTARCHIVE): $(EVERYTHING) $(TDSARCHIVE)
+ -ln -s . markdown
+ zip -MM -r -v -nw $@ $(addprefix markdown/,$(EVERYTHING)) $(TDSARCHIVE)
+ rm -f markdown
+
+# This target produces the CTAN archive.
+$(CTANARCHIVE): $(RESOURCES) $(TDSARCHIVE)
+ -ln -s . markdown
+ zip -MM -r -v -nw $@ $(addprefix markdown/,$(RESOURCES)) $(TDSARCHIVE)
+ rm -f markdown
+
+# This pseudo-target removes any existing auxiliary files and directories.
+clean:
+ latexmk -c $(DTXARCHIVE)
+ rm -f $(AUXFILES)
+ rm -rf ${AUXDIRS}
+ $(MAKE) -C examples clean
+
+# This pseudo-target removes any makeable files.
+implode: clean
+ rm -f $(MAKEABLES) $(ARCHIVES)
+ $(MAKE) -C examples implode
diff --git a/macros/generic/markdown/README.md b/macros/generic/markdown/README.md
new file mode 100644
index 0000000000..44c963a2da
--- /dev/null
+++ b/macros/generic/markdown/README.md
@@ -0,0 +1,100 @@
+Markdown
+========
+[![release](https://img.shields.io/github/release/witiko/markdown.svg)][release]
+[![CircleCI](https://circleci.com/gh/Witiko/markdown/tree/master.svg?style=shield)][CircleCI]
+
+ [CircleCI]: https://circleci.com/gh/Witiko/markdown/tree/master "CircleCI"
+ [release]: https://github.com/Witiko/markdown/releases/latest "Releases · Witiko/markdown"
+
+The Markdown package converts [markdown][] markup to TeX commands. The
+functionality is provided both as a Lua module, and as plain TeX, LaTeX, and
+ConTeXt macro packages that can be used to directly typeset TeX documents
+containing markdown markup. Unlike other convertors, the Markdown package
+makes it easy to redefine how each and every markdown element is rendered.
+Creative abuse of the markdown syntax is encouraged. 😉
+
+ [markdown]: https://daringfireball.net/projects/markdown/basics/ "Daring Fireball: Markdown Basics"
+
+Further information
+-------------------
+For further information, consult one of the following:
+
+1. The [user manual][manual], which can be produced by interpreting the
+ `markdown.ins` file using a Unicode-aware TeX engine, such as XeTeX
+ (`xetex markdown.ins`) or LuaTeX (`luatex markdown.ins`). The manual will
+ reside in the file `markdown.md` and the CSS stylesheet `markdown.css`.
+2. The [technical documentation][techdoc], which can be typeset by running the
+ [LaTeXMK][] tool on the `markdown.dtx` file
+ (`latexmk markdown.dtx`) after [installing the Markdown package][install].
+ [LaTeXMK][] should be included in your TeX distribution. The typeset
+ documentation will reside in the file `markdown.pdf`.
+3. Tutorials and example documents by [Lian Tze Lim][liantze] at [Overleaf][]:
+ - [How to write in Markdown on Overleaf][overleaf-1],
+ - [Markdown into LaTeX with Style][overleaf-2],
+ - [Writing Markdown in LaTeX Documents][overleaf-3],
+ - [Writing Beamer Slides with Markdown][overleaf-4],
+ - [Writing Posters with Markdown][overleaf-5], and
+ - [Using Markdown in LaTeX documents][overleaf-6].
+4. My journal articles published by [TUGboat][]:
+ - [Using Markdown inside TeX documents][tb119], and
+ - [Markdown 2.7.0: Towards lightweight markup in TeX][tb124].
+
+ [overleaf-1]: https://www.overleaf.com/learn/latex/Articles/How_to_write_in_Markdown_on_Overleaf "How to write in Markdown on Overleaf"
+ [overleaf-2]: https://www.overleaf.com/learn/latex/Articles/Markdown_into_LaTeX_with_Style "Markdown into LaTeX with Style"
+ [overleaf-3]: https://www.overleaf.com/learn/how-to/Writing_Markdown_in_LaTeX_Documents "Writing Markdown in LaTeX Documents"
+ [overleaf-4]: https://www.overleaf.com/latex/examples/writing-beamer-slides-with-markdown/dnrwnjrpjjhw "Writing Beamer Slides with Markdown"
+ [overleaf-5]: https://www.overleaf.com/latex/examples/writing-posters-with-markdown/jtbgmmgqrqmh "Writing Posters with Markdown"
+ [overleaf-6]: https://www.overleaf.com/latex/examples/using-markdown-in-latex-documents/whdrnpcpnwrm "Using Markdown in LaTeX documents"
+
+ [tb119]: https://www.tug.org/members/TUGboat/tb38-2/tb119novotny.pdf "Using Markdown inside TeX documents"
+ [tb124]: https://www.tug.org/TUGboat/production/40-1/tb124novotny-markdown.pdf "Markdown 2.7.0: Towards lightweight markup in TeX"
+
+ [install]: http://mirrors.ctan.org/macros/generic/markdown/markdown.html#installation "Markdown Package User Manual"
+ [liantze]: http://liantze.penguinattack.org/ "Rants from the Lab"
+ [manual]: http://mirrors.ctan.org/macros/generic/markdown/markdown.html "Markdown Package User Manual"
+ [overleaf]: https://www.overleaf.com/ "Overleaf: Real-time Collaborative Writing and Publishing Tools with Integrated PDF Preview"
+ [techdoc]: http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf "A Markdown Interpreter for TeX"
+ [tugboat]: https://www.tug.org/tugboat/ "TUGboat - Communications of the TeX Users Group"
+
+Contributing
+------------
+Apart from the example markdown documents and tests, which are placed in the
+`examples/` and `tests/` directories, the complete source code and
+documentation of the package are placed in the `markdown.dtx` document
+following the literate programming paradigm.
+
+When the file `markdown.ins` is interpreted using a Unicode-aware TeX engine,
+such as XeTeX (`xetex markdown.ins`) or LuaTeX (`luatex markdown.ins`), several
+files are produced from the `markdown.dtx` document. In `markdown.dtx`, the
+boundaries between the produced files are marked up using a XML-like syntax
+provided by the [DocStrip][] plain TeX package.
+
+Running the [LaTeXMK][] tool on the `markdown.dtx` file
+(`latexmk markdown.dtx`) after the Markdown package has been
+[installed][install] typesets the documentation. In `markdown.dtx`, the
+documentation is placed inside TeX comments and marked up using the
+[ltxdockit][] LaTeX document class. Support for typesetting the documentation
+is provided by the [doc][] LaTeX package.
+
+ [doc]: https://ctan.org/pkg/doc "doc – Format LaTeX documentation"
+ [DocStrip]: https://ctan.org/pkg/docstrip "docstrip – Remove comments from file"
+ [LaTeXMK]: https://ctan.org/pkg/latexmk "latexmk – Fully automated LaTeX document generation"
+ [ltxdockit]: https://ctan.org/pkg/ltxdockit "ltxdockit – Documentation support"
+
+Acknowledgements
+----------------
+I gratefully acknowledge the funding from the [Faculty of Informatics][fimu]
+at the [Masaryk University][mu] in Brno, Czech Republic, for the development of
+the Markdown package.
+
+Support for content slicing (Lua options `shiftHeadings` and `slice`) and pipe
+tables (Lua options `pipeTables` and `tableCaptions`) was graciously sponsored
+by [David Vins][dvins] and [Omedym][].
+
+Extensive user documentation of the Markdown package was kindly written by
+[Lian Tze Lim][liantze] and published by [Overleaf][].
+
+ [dvins]: https://github.com/dvins "David Vins"
+ [fimu]: https://www.fi.muni.cz/index.html.en "Faculty of Informatics, Masaryk University"
+ [mu]: https://www.muni.cz/en "Masaryk University"
+ [Omedym]: https://www.omedym.com/ "Omedym"
diff --git a/macros/generic/markdown/docstrip.cfg b/macros/generic/markdown/docstrip.cfg
new file mode 100644
index 0000000000..a03b51c87b
--- /dev/null
+++ b/macros/generic/markdown/docstrip.cfg
@@ -0,0 +1,105 @@
+\askforoverwritefalse
+\def\luapreamble{%
+-- ^^J%
+-- Copyright (C) 2009-2016 John MacFarlane, Hans Hagen^^J%
+-- ^^J%
+-- Permission is hereby granted, free of charge, to any person obtaining^^J%
+-- a copy of this software and associated documentation files (the^^J%
+-- "Software"), to deal in the Software without restriction, including^^J%
+-- without limitation the rights to use, copy, modify, merge, publish,^^J%
+-- distribute, sublicense, and/or sell copies of the Software, and to^^J%
+-- permit persons to whom the Software is furnished to do so, subject to^^J%
+-- the following conditions:^^J%
+-- ^^J%
+-- The above copyright notice and this permission notice shall be included^^J%
+-- in all copies or substantial portions of the Software.^^J%
+-- ^^J%
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,^^J%
+-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF^^J%
+-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.^^J%
+-- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY^^J%
+-- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,^^J%
+-- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE^^J%
+-- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.^^J%
+-- ^^J%
+-- Copyright (C) 2016-2019 Vít Novotný^^J%
+-- ^^J%
+-- This work may be distributed and/or modified under the^^J%
+-- conditions of the LaTeX Project Public License, either version 1.3^^J%
+-- of this license or (at your option) any later version.^^J%
+-- The latest version of this license is in^^J%
+-- ^^J%
+-- \space\space\space\space http://www.latex-project.org/lppl.txt^^J%
+-- ^^J%
+-- and version 1.3 or later is part of all distributions of LaTeX^^J%
+-- version 2005/12/01 or later.^^J%
+-- ^^J%
+-- This work has the LPPL maintenance status `maintained'.^^J%
+-- The Current Maintainer of this work is Vít Novotný.^^J%
+-- ^^J%
+-- Send bug reports, requests for additions and questions^^J%
+-- either to the GitHub issue tracker at^^J%
+-- ^^J%
+-- \space\space\space\space https://github.com/witiko/markdown/issues^^J%
+-- ^^J%
+-- or to the e-mail address <witiko@mail.muni.cz>.^^J%
+-- ^^J%
+-- MODIFICATION ADVICE:^^J%
+-- ^^J%
+-- If you want to customize this file, it is best to make a copy of^^J%
+-- the source file(s) from which it was produced. Use a different^^J%
+-- name for your copy(ies) and modify the copy(ies); this will ensure^^J%
+-- that your modifications do not get overwritten when you install a^^J%
+-- new release of the standard system. You should also ensure that^^J%
+-- your modified source file does not generate any modified file with^^J%
+-- the same name as a standard file.^^J%
+-- ^^J%
+-- You will also need to produce your own, suitably named, .ins file to^^J%
+-- control the generation of files from your source file; this file^^J%
+-- should contain your own preambles for the files it generates, not^^J%
+-- those in the standard .ins files.^^J%
+-- }
+\let\luapostamble\empty
+\declarepreamble\texpreamble
+
+Copyright (C) 2016-2019 Vít Novotný
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Vít Novotný.
+
+Send bug reports, requests for additions and questions
+either to the GitHub issue tracker at
+
+ https://github.com/Witiko/markdown/issues
+
+or to the e-mail address <witiko@mail.muni.cz>.
+
+MODIFICATION ADVICE:
+
+If you want to customize this file, it is best to make a copy of
+the source file(s) from which it was produced. Use a different
+name for your copy(ies) and modify the copy(ies); this will ensure
+that your modifications do not get overwritten when you install a
+new release of the standard system. You should also ensure that
+your modified source file does not generate any modified file with
+the same name as a standard file.
+
+You will also need to produce your own, suitably named, .ins file to
+control the generation of files from your source file; this file
+should contain your own preambles for the files it generates, not
+those in the standard .ins files.
+
+The names of the source files used are shown above.
+
+\endpreamble
+\let\texpostamble\defaultpostamble
diff --git a/macros/generic/markdown/examples/README.md b/macros/generic/markdown/examples/README.md
new file mode 100644
index 0000000000..0d32d16ec4
--- /dev/null
+++ b/macros/generic/markdown/examples/README.md
@@ -0,0 +1,7 @@
+This directory contains example LaTeX and ConTeXt documents. These documents
+can be typeset by running the GNU `make` program in this directory. It is
+expected that your TeX installation contains the `pdflatex`, `xelatex`,
+`lualatex`, `texexec`, and `context` executables.
+
+The `markdown.dtx` file in the root directory contains documentation in the
+markdown language and can also serve as an example LaTeX document.
diff --git a/macros/generic/markdown/examples/context-mkii.pdf b/macros/generic/markdown/examples/context-mkii.pdf
new file mode 100644
index 0000000000..a17e5fc469
--- /dev/null
+++ b/macros/generic/markdown/examples/context-mkii.pdf
Binary files differ
diff --git a/macros/generic/markdown/examples/context-mkiv.pdf b/macros/generic/markdown/examples/context-mkiv.pdf
new file mode 100644
index 0000000000..ad965f37fe
--- /dev/null
+++ b/macros/generic/markdown/examples/context-mkiv.pdf
Binary files differ
diff --git a/macros/generic/markdown/examples/context.tex b/macros/generic/markdown/examples/context.tex
new file mode 100644
index 0000000000..7ed432344a
--- /dev/null
+++ b/macros/generic/markdown/examples/context.tex
@@ -0,0 +1,31 @@
+\enableregime[utf]
+\usetypescript[modern][ec]
+\setupbodyfont[10pt,rm]
+\setupexternalfigures[location={local,global,default}]
+\usemodule[t][markdown]
+\def\markdownOptionHashEnumerators{true}
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionSmartEllipses{true}
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionPipeTables{true}
+\def\markdownOptionTableCaptions{true}
+\definetyping [latex]
+\setuptyping [latex] [option=TEX]
+\starttext
+% Typeset the document `example.md` by letting the Markdown package handle
+% the conversion internally.
+\markdownInput{./example.md}
+
+% Typeset the document `example.tex` that we prepared separately using the
+% Lua command-line interface and that contains a plain TeX representation
+% of the document `example.md`.
+\doiffileelse{./example.tex}{\input example}{}
+
+\startmarkdown
+Here are some non-ASCII characters: *ěšÄřžýáíé*
+and ConTeXt special characters: *|*.
+\stopmarkdown
+\stoptext
diff --git a/macros/generic/markdown/examples/example.md b/macros/generic/markdown/examples/example.md
new file mode 100644
index 0000000000..8aeb423a20
--- /dev/null
+++ b/macros/generic/markdown/examples/example.md
@@ -0,0 +1,131 @@
+This is an H1
+=============
+
+This is an H2
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is a table:
+
+| Right | Left | Default | Center |
+|------:|:-----|---------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of pipe table syntax.
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
diff --git a/macros/generic/markdown/examples/latex-luatex.pdf b/macros/generic/markdown/examples/latex-luatex.pdf
new file mode 100644
index 0000000000..1ce6e43d49
--- /dev/null
+++ b/macros/generic/markdown/examples/latex-luatex.pdf
Binary files differ
diff --git a/macros/generic/markdown/examples/latex-pdftex.pdf b/macros/generic/markdown/examples/latex-pdftex.pdf
new file mode 100644
index 0000000000..f5eca2597a
--- /dev/null
+++ b/macros/generic/markdown/examples/latex-pdftex.pdf
Binary files differ
diff --git a/macros/generic/markdown/examples/latex-xetex.pdf b/macros/generic/markdown/examples/latex-xetex.pdf
new file mode 100644
index 0000000000..3c9f0ff75d
--- /dev/null
+++ b/macros/generic/markdown/examples/latex-xetex.pdf
Binary files differ
diff --git a/macros/generic/markdown/examples/latex.tex b/macros/generic/markdown/examples/latex.tex
new file mode 100644
index 0000000000..07ebe631f9
--- /dev/null
+++ b/macros/generic/markdown/examples/latex.tex
@@ -0,0 +1,42 @@
+\documentclass{book}
+\usepackage{ifxetex,ifluatex}
+\ifxetex
+ \usepackage{polyglossia}
+ \setmainlanguage{english}
+ \usepackage{fontspec}
+\else\ifluatex
+ \usepackage{polyglossia}
+ \setmainlanguage{english}
+ \usepackage{fontspec}
+\else
+ \usepackage[english]{babel}
+ \usepackage[utf8]{inputenc}
+ \usepackage[T1]{fontenc}
+ \usepackage{lmodern}
+\fi\fi
+\usepackage{booktabs}
+\usepackage[
+ hashEnumerators,
+ definitionLists,
+ footnotes,
+ inlineFootnotes,
+ smartEllipses,
+ fencedCode,
+ contentBlocks,
+ pipeTables,
+ tableCaptions,
+]{markdown}
+\begin{document}
+% Typeset the document `example.md` by letting the Markdown package handle
+% the conversion internally.
+\markdownInput{./example.md}
+
+% Typeset the document `example.tex` that we prepared separately using the
+% Lua command-line interface of the Markdown package and that contains a
+% plain TeX representation of the document `example.md`.
+\InputIfFileExists{./example.tex}{}{}
+
+\begin{markdown}
+Here are some non-ASCII characters: *ěšÄřžýáíé*.
+\end{markdown}
+\end{document}
diff --git a/macros/generic/markdown/examples/scientists.csv b/macros/generic/markdown/examples/scientists.csv
new file mode 100644
index 0000000000..dee7830edf
--- /dev/null
+++ b/macros/generic/markdown/examples/scientists.csv
@@ -0,0 +1,4 @@
+Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847
diff --git a/macros/generic/markdown/latexmkrc b/macros/generic/markdown/latexmkrc
new file mode 100644
index 0000000000..34d796211e
--- /dev/null
+++ b/macros/generic/markdown/latexmkrc
@@ -0,0 +1,4 @@
+$pdflatex = 'lualatex --shell-escape %O %S';
+$pdf_mode = 1;
+$postscript_mode = 0;
+$dvi_mode = 0;
diff --git a/macros/generic/markdown/markdown.css b/macros/generic/markdown/markdown.css
new file mode 100644
index 0000000000..f679065407
--- /dev/null
+++ b/macros/generic/markdown/markdown.css
@@ -0,0 +1,351 @@
+
+html {
+ font-size: 100%;
+ overflow-y: scroll;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ color: #444;
+ font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif;
+ font-size: 12px;
+ line-height: 1.7;
+ padding: 1em;
+ margin: auto;
+ max-width: 42em;
+ background: #fefefe;
+}
+
+a {
+ color: #0645ad;
+}
+
+a:visited {
+ color: #0b0080;
+}
+
+a:hover {
+ color: #06e;
+}
+
+a:active {
+ color: #faa700;
+}
+
+a:focus {
+ outline: thin dotted;
+}
+
+*::-moz-selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #000;
+}
+
+*::selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #000;
+}
+
+a::-moz-selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #0645ad;
+}
+
+a::selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #0645ad;
+}
+
+p {
+ margin: 1em 0;
+}
+
+img {
+ max-width: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #111;
+ line-height: 125%;
+ margin-top: 2em;
+ font-weight: normal;
+}
+
+h4, h5, h6 {
+ font-weight: bold;
+}
+
+h1 {
+ font-size: 2.5em;
+}
+
+h2 {
+ font-size: 2em;
+}
+
+h3 {
+ font-size: 1.5em;
+}
+
+h4 {
+ font-size: 1.2em;
+}
+
+h5 {
+ font-size: 1em;
+}
+
+h6 {
+ font-size: 0.9em;
+}
+
+blockquote {
+ color: #666666;
+ margin: 0;
+ padding-left: 3em;
+ border-left: 0.5em #EEE solid;
+}
+
+hr {
+ display: block;
+ height: 2px;
+ border: 0;
+ border-top: 1px solid #aaa;
+ border-bottom: 1px solid #eee;
+ margin: 1em 0;
+ padding: 0;
+}
+
+pre, code, kbd, samp {
+ color: #000;
+ font-family: monospace, monospace;
+ _font-family: 'courier new', monospace;
+ font-size: 0.98em;
+}
+
+pre {
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+b, strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+ins {
+ background: #ff9;
+ color: #000;
+ text-decoration: none;
+}
+
+mark {
+ background: #ff0;
+ color: #000;
+ font-style: italic;
+ font-weight: bold;
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+ul, ol {
+ margin: 1em 0;
+ padding: 0 0 0 2em;
+}
+
+li p:last-child {
+ margin-bottom: 0;
+}
+
+ul ul, ol ol {
+ margin: .3em 0;
+}
+
+dl {
+ margin-bottom: 1em;
+}
+
+dt {
+ font-weight: bold;
+ margin-bottom: .8em;
+}
+
+dd {
+ margin: 0 0 .8em 2em;
+}
+
+dd:last-child {
+ margin-bottom: 0;
+}
+
+img {
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+ vertical-align: middle;
+}
+
+figure {
+ display: block;
+ text-align: center;
+ margin: 1em 0;
+}
+
+figure img {
+ border: none;
+ margin: 0 auto;
+}
+
+figcaption {
+ font-size: 0.8em;
+ font-style: italic;
+ margin: 0 0 .8em;
+}
+
+table {
+ margin-bottom: 2em;
+ border-bottom: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+table th {
+ padding: .2em 1em;
+ background-color: #eee;
+ border-top: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+}
+
+table td {
+ padding: .2em 1em;
+ border-top: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.author {
+ font-size: 1.2em;
+ text-align: center;
+}
+
+@media only screen and (min-width: 480px) {
+ body {
+ font-size: 14px;
+ }
+}
+@media only screen and (min-width: 768px) {
+ body {
+ font-size: 16px;
+ }
+}
+@media print {
+ * {
+ background: transparent !important;
+ color: black !important;
+ filter: none !important;
+ -ms-filter: none !important;
+ }
+
+ body {
+ font-size: 12pt;
+ max-width: 100%;
+ }
+
+ a, a:visited {
+ text-decoration: underline;
+ }
+
+ hr {
+ height: 1px;
+ border: 0;
+ border-bottom: 1px solid black;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: "";
+ }
+
+ pre, blockquote {
+ border: 1px solid #999;
+ padding-right: 1em;
+ page-break-inside: avoid;
+ }
+
+ tr, img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ @page :left {
+ margin: 15mm 20mm 15mm 10mm;
+}
+
+ @page :right {
+ margin: 15mm 10mm 15mm 20mm;
+}
+
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2, h3 {
+ page-break-after: avoid;
+ }
+}
+
+.tex sub, .latex sub, .latex sup {
+ text-transform: uppercase;
+}
+
+.tex sub, .latex sub {
+ vertical-align: -0.1ex;
+ margin-left: -0.1667em;
+ margin-right: -0.125em;
+}
+
+.tex, .latex, .tex sub, .latex sub {
+ font-size: 1em;
+}
+
+.latex sup {
+ font-size: 0.85em;
+ vertical-align: -0.35em;
+ margin-left: -0.36em;
+ margin-right: -0.15em;
+}
+
+abbr {
+ text-transform: lowercase;
+ font-variant: small-caps;
+}
+
diff --git a/macros/generic/markdown/markdown.dtx b/macros/generic/markdown/markdown.dtx
new file mode 100644
index 0000000000..71c06b8154
--- /dev/null
+++ b/macros/generic/markdown/markdown.dtx
@@ -0,0 +1,17226 @@
+% \iffalse
+%<*driver>
+\documentclass{ltxdockit}
+\usepackage[american]{babel}
+\usepackage{amsmath,btxdockit,doc,fancyvrb,hologo,microtype,minted,xcolor}
+\usepackage{fontspec}
+\defaultfontfeatures[\rmfamily,\sffamily,\ttfamily]{}
+
+% Set up the style.
+\emergencystretch=1em
+\fvset{gobble=0,frame=single}
+\setcounter{secnumdepth}{4}
+\addtokomafont{title}{\sffamily}
+\addtokomafont{paragraph}{\spotcolor}
+\addtokomafont{section}{\spotcolor}
+\addtokomafont{subsection}{\spotcolor}
+\addtokomafont{subsubsection}{\spotcolor}
+\addtokomafont{descriptionlabel}{\spotcolor}
+\setkomafont{caption}{\bfseries\sffamily\spotcolor}
+\setkomafont{captionlabel}{\bfseries\sffamily\spotcolor}
+\hypersetup{citecolor=spot}
+\let\oldCodelineNo\theCodelineNo
+\def\theCodelineNo{\textcolor{gray}{\oldCodelineNo}}
+
+% Define some markup.
+\let\pkg\relax % A package name
+\newcommand\mdef[1]{% A TeX macro definition
+ \phantomsection\label{macro:#1}\textcolor{spot}{\cs{#1}}}
+\newcommand\m[1]{% A TeX macro reference
+ \hyperref[macro:#1]{\textcolor{spot}{\cs{#1}}}}
+\newcommand\envmdef[1]{% A TeX macro definition
+ \phantomsection\label{environment:#1}\t`#1`}
+\newcommand\envm[1]{% A LaTeX environment reference
+ \hyperref[environment:#1]{\t`#1`}}
+\newcommand\luamdef[1]{% A Lua object / method definition
+ \phantomsection\label{lua:#1}\t`#1`}
+\newcommand\luam[1]{% A Lua object / method reference
+ \hyperref[lua:#1]{\t`#1`}}
+\def\inline#1{% Inline code
+ \textcolor{spot}{\text{\texttt{#1}}}}
+\def\t`#1`{\inline{#1}}
+\newcommand\Optitem[2][]{\penalty -1000\relax % An option item definition
+ \phantomsection\label{opt:#2}\optitem[#1]{#2}}
+\newcommand\Valitem[2][]{\penalty -1000\relax % A value item definition
+ \phantomsection\label{opt:#2}\valitem[#1]{#2}}
+\newcommand\Opt[1]{% An option / value item reference
+ \hyperref[opt:#1]{\t`#1`}}
+\newcommand\acro[1]{% An acronym
+ \textsc{\MakeLowercase{#1}}}
+
+% Set up markdown.
+\usepackage[
+ citations,
+ definitionLists,
+ fencedCode,
+ headerAttributes,
+ hybrid,
+ html,
+ stripPercentSigns,
+ underscores=false,
+]{markdown}
+\markdownSetup{
+ renderers = {
+ codeSpan = {\inline{#1}},
+ link = {#1\footnote{See \url{#3}.}},
+ headingFour = {%
+ \paragraph{#1}\leavevmode
+ \def\markdownRendererInterblockSeparator{%
+ \let\markdownRendererInterblockSeparator\par
+ }%
+ \noindent
+ },
+ },
+}
+
+% Set up the catcodes.
+\catcode`\_=12 % We won't be typesetting much math and Lua contains lots of `_`.
+\catcode`\^^B=8 % When we occasionally need subscripts , we will use `^^B` (STX).
+
+% Set up the title page.
+\titlepage{%
+ title={A Markdown Interpreter for \TeX{}},
+ subtitle={},
+ url={https://github.com/witiko/markdown},
+ author={Vít Novotný},
+ email={witiko@mail.muni.cz},
+ revision=\markdownVersion,
+ date={\today}}
+\hypersetup{%
+ pdftitle={A Markdown Interpreter for \TeX{}},
+ pdfauthor={Vít Novotný}}
+\CodelineIndex
+
+% Set up the bibliography.
+\usepackage{filecontents}
+\begin{filecontents}{markdown.bib}
+@online{sotkov17,
+ author = {Sotkov, Anton},
+ title = {File transclusion syntax for Markdown},
+ date = {2017-01-19},
+ url = {https://github.com/iainc/Markdown-Content-Blocks},
+ urldate = {2018-01-08}}
+@book{luatex17,
+ author = {{Lua\TeX{} development team}},
+ title = {Lua\TeX{} reference manual},
+ year = {2017},
+ month = {2},
+ url = {http://www.luatex.org/svn/trunk/manual/luatex.pdf},
+ urldate = {2018-01-08}}
+@book{latex17,
+ author = {Braams, Johannes and Carlisle, David and Jeffrey, Alan and
+ Lamport, Leslie and Mittelbach, Frank and Rowley, Chris and
+ Schöpf, Rainer},
+ title = {The \Hologo{LaTeX2e} Sources},
+ date = {2017-04-15},
+ url = {http://mirrors.ctan.org/macros/latex/base/source2e.pdf},
+ urldate = {2018-01-08}}
+@book{mittelbach17,
+ author = {Mittelbach, Frank},
+ title = {The \texttt{doc} and \texttt{shortvrb} Packages},
+ date = {2017-04-15},
+ url = {http://mirrors.ctan.org/macros/latex/base/doc.pdf},
+ urldate = {2018-02-19}}
+@online{novotny15,
+ author = {Novotný, Vít},
+ year = {2015},
+ title = {TeXový interpret jazyka Markdown (markdown.sty)},
+ location = {Brno, Czech Republic},
+ publisher = {Masaryk University},
+ url = {https://www.muni.cz/en/research/projects/32984},
+ urldate = {2018-02-19}}
+@book{ierusalimschy13,
+ author = {Ierusalimschy, Roberto},
+ year = {2013},
+ title = {Programming in Lua},
+ edition = {3},
+ isbn = {978-85-903798-5-0},
+ pagetotal = {xviii, 347},
+ location = {Rio de Janeiro},
+ publisher = {PUC-Rio}}
+@book{knuth86,
+ author = {Knuth, Donald Ervin},
+ year = {1986},
+ title = {The \TeX{}book},
+ edition = {3},
+ isbn = {0-201-13447-0},
+ pagetotal = {ix, 479},
+ publisher = {Addison-Wesley}}
+\end{filecontents}
+\usepackage[
+ backend=biber,
+ style=numeric,
+ sorting=none,
+ autolang=other,
+ sortlocale=auto]{biblatex}
+\addbibresource{markdown.bib}
+
+\begin{document}
+\printtitlepage
+\tableofcontents
+\DocInput{markdown.dtx}
+\printbibliography
+\end{document}
+%</driver>
+%<*manual-css>
+
+html {
+ font-size: 100%;
+ overflow-y: scroll;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ color: #444;
+ font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif;
+ font-size: 12px;
+ line-height: 1.7;
+ padding: 1em;
+ margin: auto;
+ max-width: 42em;
+ background: #fefefe;
+}
+
+a {
+ color: #0645ad;
+}
+
+a:visited {
+ color: #0b0080;
+}
+
+a:hover {
+ color: #06e;
+}
+
+a:active {
+ color: #faa700;
+}
+
+a:focus {
+ outline: thin dotted;
+}
+
+*::-moz-selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #000;
+}
+
+*::selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #000;
+}
+
+a::-moz-selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #0645ad;
+}
+
+a::selection {
+ background: rgba(255, 255, 0, 0.3);
+ color: #0645ad;
+}
+
+p {
+ margin: 1em 0;
+}
+
+img {
+ max-width: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #111;
+ line-height: 125%;
+ margin-top: 2em;
+ font-weight: normal;
+}
+
+h4, h5, h6 {
+ font-weight: bold;
+}
+
+h1 {
+ font-size: 2.5em;
+}
+
+h2 {
+ font-size: 2em;
+}
+
+h3 {
+ font-size: 1.5em;
+}
+
+h4 {
+ font-size: 1.2em;
+}
+
+h5 {
+ font-size: 1em;
+}
+
+h6 {
+ font-size: 0.9em;
+}
+
+blockquote {
+ color: #666666;
+ margin: 0;
+ padding-left: 3em;
+ border-left: 0.5em #EEE solid;
+}
+
+hr {
+ display: block;
+ height: 2px;
+ border: 0;
+ border-top: 1px solid #aaa;
+ border-bottom: 1px solid #eee;
+ margin: 1em 0;
+ padding: 0;
+}
+
+pre, code, kbd, samp {
+ color: #000;
+ font-family: monospace, monospace;
+ _font-family: 'courier new', monospace;
+ font-size: 0.98em;
+}
+
+pre {
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+b, strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+ins {
+ background: #ff9;
+ color: #000;
+ text-decoration: none;
+}
+
+mark {
+ background: #ff0;
+ color: #000;
+ font-style: italic;
+ font-weight: bold;
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+ul, ol {
+ margin: 1em 0;
+ padding: 0 0 0 2em;
+}
+
+li p:last-child {
+ margin-bottom: 0;
+}
+
+ul ul, ol ol {
+ margin: .3em 0;
+}
+
+dl {
+ margin-bottom: 1em;
+}
+
+dt {
+ font-weight: bold;
+ margin-bottom: .8em;
+}
+
+dd {
+ margin: 0 0 .8em 2em;
+}
+
+dd:last-child {
+ margin-bottom: 0;
+}
+
+img {
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+ vertical-align: middle;
+}
+
+figure {
+ display: block;
+ text-align: center;
+ margin: 1em 0;
+}
+
+figure img {
+ border: none;
+ margin: 0 auto;
+}
+
+figcaption {
+ font-size: 0.8em;
+ font-style: italic;
+ margin: 0 0 .8em;
+}
+
+table {
+ margin-bottom: 2em;
+ border-bottom: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+table th {
+ padding: .2em 1em;
+ background-color: #eee;
+ border-top: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+}
+
+table td {
+ padding: .2em 1em;
+ border-top: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.author {
+ font-size: 1.2em;
+ text-align: center;
+}
+
+@media only screen and (min-width: 480px) {
+ body {
+ font-size: 14px;
+ }
+}
+@media only screen and (min-width: 768px) {
+ body {
+ font-size: 16px;
+ }
+}
+@media print {
+ * {
+ background: transparent !important;
+ color: black !important;
+ filter: none !important;
+ -ms-filter: none !important;
+ }
+
+ body {
+ font-size: 12pt;
+ max-width: 100%;
+ }
+
+ a, a:visited {
+ text-decoration: underline;
+ }
+
+ hr {
+ height: 1px;
+ border: 0;
+ border-bottom: 1px solid black;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: "";
+ }
+
+ pre, blockquote {
+ border: 1px solid #999;
+ padding-right: 1em;
+ page-break-inside: avoid;
+ }
+
+ tr, img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ @page :left {
+ margin: 15mm 20mm 15mm 10mm;
+}
+
+ @page :right {
+ margin: 15mm 10mm 15mm 20mm;
+}
+
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2, h3 {
+ page-break-after: avoid;
+ }
+}
+
+.tex sub, .latex sub, .latex sup {
+ text-transform: uppercase;
+}
+
+.tex sub, .latex sub {
+ vertical-align: -0.1ex;
+ margin-left: -0.1667em;
+ margin-right: -0.125em;
+}
+
+.tex, .latex, .tex sub, .latex sub {
+ font-size: 1em;
+}
+
+.latex sup {
+ font-size: 0.85em;
+ vertical-align: -0.35em;
+ margin-left: -0.36em;
+ margin-right: -0.15em;
+}
+
+abbr {
+ text-transform: lowercase;
+ font-variant: small-caps;
+}
+
+%</manual-css>
+%<*manual>
+
+---
+title: Markdown Package User Manual
+author: Vít Novotný
+date: v\markdownVersion{} (\markdownLastModified{})
+---
+
+% \fi
+% \par
+% \begin{markdown}
+
+<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet" />
+
+Introduction
+============
+The [Markdown package][pkg] converts [markdown][] markup to \TeX{} commands. The
+functionality is provided both as a Lua module and as plain \TeX{}, \LaTeX{}, and
+\Hologo{ConTeXt} macro packages that can be used to directly typeset \TeX documents
+containing markdown markup. Unlike other convertors, the Markdown package
+makes it easy to redefine how each and every markdown element is rendered.
+Creative abuse of the markdown syntax is encouraged. ;-)
+
+ [markdown]: https://daringfireball.net/projects/markdown/basics/
+ (Daring Fireball: Markdown Basics)
+ [pkg]: https://ctan.org/pkg/markdown
+ (CTAN: Package markdown)
+
+% This document is a technical documentation for the \pkg{Markdown} package. It
+% consists of three sections. This section introduces the package and outlines
+% its prerequisites. Section \ref{sec:interfaces} describes the interfaces
+% exposed by the package. Section \ref{sec:implementation} describes the
+% implementation of the package. The technical documentation contains only a
+% limited number of tutorials and code examples. You can find more of these in
+% the [user manual.][manual]
+%
+% [manual]: http://mirrors.ctan.org/macros/generic/markdown/markdown.html
+%
+% \end{markdown}
+% \iffalse
+
+This document is a user manual for the [Markdown package][pkg]. It provides
+tutorials and code examples. For an in-depth description of the package
+requirements, interfaces, and implementation, please refer to the [technical
+documentation][techdoc].
+
+ [techdoc]: http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf
+ (A Markdown Interpreter for TeX)
+
+%</manual>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+local metadata = {
+ version = "2.8.1",
+ comment = "A module for the conversion from markdown to plain TeX",
+ author = "John MacFarlane, Hans Hagen, Vít Novotný",
+ copyright = {"2009-2016 John MacFarlane, Hans Hagen",
+ "2016-2019 Vít Novotný"},
+ license = "LPPL 1.3"
+}
+
+% \end{macrocode}
+% \iffalse
+%</lua,lua-cli>
+%<*lua>
+% \fi
+% \begin{macrocode}
+if not modules then modules = { } end
+modules['markdown'] = metadata
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Feedback
+%---------
+% Please use the \pkg{Markdown} project page on
+% [GitHub](https://github.com/witiko/markdown/issues) to report bugs and submit
+% feature requests. If you do not want to report a bug or request a feature but
+% are simply in need of assistance, you might want to consider posting your
+% question on the [\TeX-\LaTeX{} Stack Exchange.](https://tex.stackexchange.com)
+%
+% Acknowledgements
+%-----------------
+% The Lunamark Lua module provides speedy markdown parsing for the package. I
+% would like to thank John Macfarlane, the creator of Lunamark, for releasing
+% Lunamark under a permissive license.
+%
+% Funding by the the Faculty of Informatics at the Masaryk~University
+% in~Brno~[@novotny15] is gratefully acknowledged.
+%
+% The \TeX{} implementation of the package draws inspiration from several
+% sources including the source code of \Hologo{LaTeX2e}, the \pkg{minted}
+% package by Geoffrey M. Poore, which likewise tackles the issue of
+% interfacing with an external interpreter from \TeX{}, the \pkg{filecontents}
+% package by Scott Pakin and others.
+%
+% \end{markdown}
+% \iffalse
+%</lua>
+%<*manual>
+
+Requirements
+------------
+
+The package requires a working \TeX{} distribution. [\TeX{} Live][tl] ≥ 2013 is
+known to work and so are recent installation of [Mik\TeX{}][mik]. If you are
+using a minimal installation of a \TeX{} distribution, please consult the
+[technical documentation][techdoc] for a detailed list of required packages.
+
+ [tl]: https://www.tug.org/texlive/ (TeX Live - TeX Users Group)
+ [mik]: https://miktex.org/ (Home - MiKTeXorg)
+
+Installation
+------------
+
+The package comes pre-installed with [\TeX{} Live][tl] ≥ 2016 and with recent
+installations of [MikTeX][mik]. Unless you explicitly wish to use the latest
+version of the package, you are encouraged to skip this step.
+
+To install the package, first download the package from the repository
+using Git:
+``` sh
+git clone https://github.com/witiko/markdown
+``````
+Next, enter the directory named `markdown` and interpret the file named
+`markdown.ins` file using a Unicode-aware \TeX{} engine, such as XeTeX or
+LuaTeX:
+``` sh
+cd markdown
+luatex markdown.ins
+``````
+This should produce the following files:
+
+ * `markdown.lua`, the Lua module,
+ * `markdown-cli.lua`, the Lua command-line interface,
+ * `markdown.tex`, the plain \TeX{} macro package,
+ * `markdown.sty`, the \LaTeX{} package, and
+ * `t-markdown.tex`, the \Hologo{ConTeXt} module.
+
+### Local Installation
+
+To perform a local installation, place the above files into your \TeX{}
+directory structure. This is generally where the individual files should be
+placed:
+
+ * `<TEXMF>/tex/luatex/markdown/markdown.lua`
+ * `<TEXMF>/scripts/markdown/markdown-cli.lua`
+ * `<TEXMF>/tex/generic/markdown/markdown.tex`
+ * `<TEXMF>/tex/latex/markdown/markdown.sty`
+ * `<TEXMF>/tex/context/third/markdown/t-markdown.tex`
+
+where `<TEXMF>` corresponds to a root of your \TeX{} distribution, such as
+`/usr/share/texmf` and `~/texmf` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf` on Windows systems. When in doubt,
+consult the manual of your \TeX{} distribution.
+
+### Portable Installation
+
+Alternatively, you can also store the above files in the same folder as your
+\TeX{} document and distribute them together. This way your document can be
+portably typeset on legacy \TeX{} distributions.
+
+%</manual>
+%<*lua>
+% \fi
+% \par
+% \begin{markdown}
+%
+% Requirements
+%-------------
+%
+% This section gives an overview of all resources required by the package.
+%
+%### Lua Requirements
+% \label{sec:luaprerequisites}
+% The Lua part of the package requires that the following Lua modules are
+% available from within the Lua\TeX{} engine:
+%
+% \pkg{LPeg${}\geq{}$0.10}
+%
+%: A pattern-matching library for the writing of recursive descent parsers
+% via the Parsing Expression Grammars (\acro{peg}s). It is used by the
+% \pkg{Lunamark} library to parse the markdown input.
+% \pkg{LPeg${}\geq{}$0.10} is included in Lua\TeX${}\geq{}$0.72.0 (\TeX
+% Live${}\geq{}2013$).
+%
+% \end{markdown}
+% \begin{macrocode}
+local lpeg = require("lpeg")
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{Selene Unicode}
+%
+%: A library that provides support for the processing of wide strings. It is
+% used by the \pkg{Lunamark} library to cast image, link, and footnote tags
+% to the lower case. \pkg{Selene Unicode} is included in all releases of
+% Lua\TeX{} (\TeX Live${}\geq{}2008$).
+%
+% \end{markdown}
+% \begin{macrocode}
+local unicode = require("unicode")
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{MD5}
+%
+%: A library that provides \acro{md5} crypto functions. It is used by the
+% \pkg{Lunamark} library to compute the digest of the input for caching
+% purposes. \pkg{MD5} is included in all releases of Lua\TeX{} (\TeX
+% Live${}\geq{}2008$).
+%
+% \end{markdown}
+% \begin{macrocode}
+local md5 = require("md5")
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% All the abovelisted modules are statically linked into the current version of
+% the Lua\TeX{} engine~[@luatex17, Section 3.3].
+%
+% \end{markdown}
+% \iffalse
+%</lua>
+%<*tex>
+% \fi
+% \par
+% \begin{markdown}
+%
+%### Plain \TeX{} Requirements
+% \label{sec:texprerequisites}
+% The plain \TeX{} part of the package requires that the plain \TeX{}
+% format (or its superset) is loaded, all the Lua prerequisites (see
+% Section \ref{sec:luaprerequisites}), and the following Lua module:
+%
+% \pkg{Lua File System}
+%
+%: A library that provides access to the filesystem via \acro{os}-specific
+% syscalls. It is used by the plain \TeX{} code to create the cache
+% directory specified by the \m{markdownOptionCacheDir} macro before
+% interfacing with the \pkg{Lunamark} library. \pkg{Lua File System} is
+% included in all releases of Lua\TeX{} (\TeX Live${}\geq{}2008$).
+%
+% The plain \TeX{} code makes use of the \luam{isdir} method that was added
+% to the \pkg{Lua File System} library by the Lua\TeX{} engine
+% developers~[@luatex17, Section 3.2].
+%
+% The \pkg{Lua File System} module is statically linked into the Lua\TeX{}
+% engine~[@luatex17, Section~3.3].
+%
+% Unless you convert markdown documents to \TeX{} manually using the Lua
+% command-line interface (see Section~\ref{sec:lua-cli-interface}), the plain
+% \TeX{} part of the package will require that either the Lua\TeX{}
+% \m{directlua} primitive or the shell access file stream 18 is available in
+% your \TeX{} engine. If only the shell access file stream is available in your
+% \TeX{} engine (as is the case with \hologo{pdfTeX} and \Hologo{XeTeX}) or if
+% you enforce the use of shell using the \m{markdownMode} macro, then unless
+% your \TeX{} engine is globally configured to enable shell access, you will
+% need to provide the `-shell-escape` parameter to your engine when typesetting
+% a document.
+%
+% \end{markdown}
+% \iffalse
+%</tex>
+%<*latex>
+% \fi
+% \par
+% \begin{markdown}
+%
+%### \LaTeX{} Requirements
+% \label{sec:latexprerequisites}
+% The \LaTeX{} part of the package requires that the \Hologo{LaTeX2e} format is
+% loaded,
+% \end{markdown}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}%
+% \end{macrocode}
+% \begin{markdown}
+% all the plain \TeX{} prerequisites (see Section \ref{sec:texprerequisites}),
+% and the following \Hologo{LaTeX2e} packages:
+%
+% \pkg{keyval}
+%
+%: A package that enables the creation of parameter sets. This package is
+% used to provide the \m{markdownSetup} macro, the package options
+% processing, as well as the parameters of the \envm{markdown*} \LaTeX{}
+% environment.
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{keyval}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{url}
+%
+%: A package that provides the \m{url} macro for the typesetting of
+% \acro{url}s. It is used to provide the default token renderer prototype
+% (see Section \ref{sec:texrendererprototypes}) for links.
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{url}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{graphicx}
+%
+%: A package that provides the \m{includegraphics} macro for the typesetting
+% of images. It is used to provide the corresponding default token renderer
+% prototype (see Section \ref{sec:texrendererprototypes}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{graphicx}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{paralist}
+%
+%: A package that provides the \envm{compactitem}, \envm{compactenum}, and
+% \envm{compactdesc} macros for the typesetting of tight bulleted lists,
+% ordered lists, and definition lists. It is used to provide the
+% corresponding default token renderer prototypes (see Section
+% \ref{sec:texrendererprototypes}).
+%
+% \pkg{ifthen}
+%
+%: A package that provides a concise syntax for the inspection of macro
+% values. It is used to determine whether or not the \pkg{paralist} package
+% should be loaded based on the user options.
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{ifthen}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{fancyvrb}
+%
+%: A package that provides the \m{VerbatimInput} macros for the verbatim
+% inclusion of files containing code. It is used to provide the
+% corresponding default token renderer prototype (see Section
+% \ref{sec:texrendererprototypes}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{fancyvrb}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{csvsimple}
+%
+%: A package that provides the default token renderer prototype for
+% iA\,Writer content blocks with the \acro{csv} filename extension (see
+% Section \ref{sec:texrendererprototypes}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{csvsimple}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% \pkg{gobble}
+%
+%: A package that provides the \m{\@gobblethree} \TeX{} command.
+%
+% \end{markdown}
+% \begin{macrocode}
+\RequirePackage{gobble}
+% \end{macrocode}
+% \iffalse
+%</latex>
+%<*context>
+% \fi
+% \par
+% \begin{markdown}
+%
+%### \Hologo{ConTeXt} Prerequisites
+% The \Hologo{ConTeXt} part of the package requires that either the Mark II or
+% the Mark IV format is loaded, all the plain \TeX{} prerequisites (see
+% Section \ref{sec:texprerequisites}), and the following \Hologo{ConTeXt}
+% modules:
+%
+% \pkg{m-database}
+%
+%: A module that provides the default token renderer prototype for
+% iA\,Writer content blocks with the \acro{csv} filename extension (see
+% Section \ref{sec:texrendererprototypes}).
+%
+% Interfaces
+%===========
+% \label{sec:interfaces}
+% This part of the documentation describes the interfaces exposed by the package
+% along with usage notes and examples. It is aimed at the user of the package.
+%
+% Since neither \TeX{} nor Lua provide interfaces as a language construct, the
+% separation to interfaces and implementations is purely abstract. It serves as
+% a means of structuring this documentation and as a promise to the user that
+% if they only access the package through the interface, the future minor
+% versions of the package should remain backwards compatible.
+%
+% \end{markdown}
+% \iffalse
+%</context>
+%<*manual>
+
+First Document
+--------------
+
+In this section, we will take the necessary steps to typeset our first markdown
+document in \TeX{}. This will serve as our first hands-on experience with the
+package and also as a reassurance that the package has been correctly installed.
+
+### Using Lua
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input hello
+\bye
+```````
+
+#### Using the Lua Module
+
+Using a text editor, create a text document named `hello.lua` with the
+following content:
+``` lua
+#!/usr/bin/env texlua
+local kpse = require("kpse")
+kpse.set_program_name("luatex")
+local markdown = require("markdown")
+local convert = markdown.new()
+print(convert("Hello *world*!"))
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua hello.lua > hello.tex
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!†Invoking pdfTeX should have the same effect:
+``` sh
+texlua hello.lua > hello.tex
+pdftex document.tex
+``````
+
+#### Using the Lua Command-Line Interface
+
+Using a text editor, create a text document named `hello.md` with the
+following content:
+``` md
+Hello *world*!
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- hello.md hello.tex
+luatex document.tex
+``````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+ [Kpathsea]: https://tug.org/kpathsea/ (Kpathsea - TeX Users Group)
+
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†Invoking pdfTeX should have the same effect:
+``` sh
+texlua ⟨CLI pathname⟩ -- hello.md hello.tex
+pdftex document.tex
+``````
+
+### Using Plain \TeX{}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\markdownBegin
+Hello *world*!
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!†Invoking pdfTeX should have the same effect:
+``` sh
+pdftex --shell-escape document.tex
+```````
+
+### Using \LaTeX{}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+\begin{markdown}
+Hello *world*!
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†Invoking pdfTeX should have the same effect:
+``` sh
+pdflatex --shell-escape document.tex
+``````
+
+***
+
+As the next step, try typesetting the example documents distributed along with
+the Markdown package:
+``` sh
+git clone https://github.com/witiko/markdown
+cd markdown/examples
+lualatex latex.tex
+``````
+A PDF document named `latex.pdf` should be produced. Open the text documents
+`latex.tex` and `example.md` in a text editor to see how the example documents
+are structured. Try changing the documents and typesetting them as follows:
+``` sh
+lualatex latex.tex
+``````
+to see the effect of your changes.
+
+### Using \Hologo{ConTeXt}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+\startmarkdown
+Hello *world*!
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†Invoking pdfTeX should have the same effect:
+``` sh
+texexec --passon=--shell-escape document.tex
+``````
+
+***
+
+As the next step, try typesetting the example documents distributed along with
+the Markdown package:
+``` sh
+git clone https://github.com/witiko/markdown
+cd markdown/examples
+context context.tex
+``````
+A PDF document named `context.pdf` should be produced. Open the text documents
+`context.tex` and `example.md` in a text editor to see how the example documents
+are structured. Try changing the documents and typesetting them as follows:
+``` sh
+context context.tex
+``````
+to see the effect of your changes.
+
+Examples
+========
+
+In this section, I will describe the individual parts of the Markdown package.
+Each part will be shown by example, leaving the implementation details to the
+[technical documentation][techdoc].
+
+ [techdoc]: http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf
+ (A Markdown Interpreter for \TeX{})
+
+/markdown-interfaces.md
+/markdown-options.md
+/markdown-tokens.md
+
+%</manual>
+%<*lua>
+% \fi
+% \par
+% \begin{markdown}
+%
+% Lua Interface
+%--------------
+% \label{sec:luainterface}
+%
+% \iffalse
+%</lua>
+%<*manual-interfaces>
+
+Interfaces
+----------
+
+In this section, I will describe the individual interfaces exposed by the
+Markdown package starting with the low-level Lua interfaces and all the way up
+to the \LaTeX{} and \Hologo{ConTeXt} interfaces intended for the ordinary
+user.
+
+### Lua
+
+The Lua programming language is what drives the conversion from markdown to
+\TeX{} in the Markdown package. Based on the [Lunamark][] Lua library by John
+MacFarlane, the Lua implementation is largely independent on \TeX{}, and can be
+used separately from typesetting a document. Lua provides two interfaces: a Lua
+module and a command-line interface (CLI).
+
+ [Lunamark]: https://github.com/jgm/lunamark
+ (Lua library for conversion between markup formats)
+
+%</manual-interfaces>
+%<*lua>
+% \fi
+%
+% The Lua interface provides the conversion from \acro{utf}-\oldstylenums8
+% encoded markdown to plain \TeX{}. This interface is used by the plain \TeX{}
+% implementation (see Section \ref{sec:teximplementation}) and will be of
+% interest to the developers of other packages and Lua modules.
+%
+% The Lua interface is implemented by the `markdown` Lua module.
+%
+% \end{markdown}
+% \begin{macrocode}
+local M = {metadata = metadata}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Conversion from Markdown to Plain \TeX{}
+% \label{sec:luaconversion}
+% The Lua interface exposes the \luamdef{new}`(options)` method. This
+% method creates converter functions that perform the conversion from markdown
+% to plain \TeX{} according to the table `options` that contains options
+% recognized by the Lua interface. (see Section \ref{sec:luaoptions}). The
+% `options` parameter is optional; when unspecified, the behaviour will be
+% the same as if `options` were an empty table.
+%
+% The following example Lua code converts the markdown string `Hello
+% *world*!` to a \TeX{} output using the default options and prints the \TeX{}
+% output:
+% ``` lua
+% local md = require("markdown")
+% local convert = md.new()
+% print(convert("Hello *world*!"))
+% ```````
+%
+% \end{markdown}
+% \iffalse
+%</lua>
+%<*manual-interfaces>
+
+#### Lua Module
+
+A Lua module is a software library that can be used from in other programs.
+The `markdown` Lua module makes it possible to convert markdown to \TeX{} from
+within Lua\TeX{} documents and Lua scripts.
+
+The `markdown` Lua module exposes the `new(`\meta{options}`)` method, which
+creates a converter function from markdown to \TeX{}. The properties of the
+converter function are specified by the Lua table `options`. The parameter is
+optional; when unspecified, the behaviour will be the same as if \meta{options}
+were an empty table.
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input example
+\bye
+```````
+Using a text editor, create a text document named `example.lua` with the
+following content:
+``` lua
+#!/usr/bin/env texlua
+local kpse = require("kpse")
+kpse.set_program_name("luatex")
+local markdown = require("markdown")
+local input, convert_safe, convert_unsafe, paragraph
+
+input = [[$\sqrt{-1}$ *equals* $i$.]]
+convert_safe = markdown.new()
+convert_unsafe = markdown.new({hybrid = true})
+paragraph = [[\par]]
+
+print(
+ convert_safe(input) .. paragraph ..
+ convert_unsafe(input)
+)
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua example.lua > example.tex
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+Invoking pdfTeX should have the same effect:
+``` sh
+texlua example.lua > example.tex
+pdftex document.tex
+``````
+
+***
+
+Rather than use the `texlua` interpreter, we can also access the `markdown` Lua
+module directly from our document. Using a text editor, create a text document
+named `document.tex` with the following content:
+``` tex
+\input markdown
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local input, convert_safe, convert_unsafe, paragraph
+
+ input = [[$\string\sqrt{-1}$ *equals* $i$.]]
+ convert_safe = markdown.new()
+ convert_unsafe = markdown.new({hybrid = true})
+ paragraph = [[\par]]
+
+ tex.sprint(
+ convert_safe(input) .. paragraph ..
+ convert_unsafe(input)
+ )
+}
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+In this case, we cannot use pdfTeX, because pdfTeX does not define the
+`\directlua` \TeX{} command.
+
+#### Lua Command-Line Interface
+
+The Lua command-line interface (CLI) of the Markdown package makes the
+functionality of the Lua module accessible from the command line. This makes
+it possible to convert documents from markdown to \TeX{} manually without any
+knowledge of the Lua programming language.
+
+The Lua command-line interface accepts the same options as the `markdown` Lua
+module, but now the options are specified as command-line parameters.
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input safe
+
+\input unsafe
+\bye
+```````
+Using a text editor, create a text document named `example.md` with the
+following content:
+``` md
+$\sqrt{-1}$ *equals* $i$.
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- example.md safe.tex
+texlua ⟨CLI pathname⟩ hybrid=true -- example.md unsafe.tex
+luatex document.tex
+``````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+Invoking pdfTeX should have the same effect:
+``` sh
+texlua ⟨CLI pathname⟩ -- example.md safe.tex
+texlua ⟨CLI pathname⟩ hybrid=true -- example.md unsafe.tex
+pdftex document.tex
+``````
+
+%</manual-interfaces>
+%<*lua>
+% \fi
+% \begin{markdown}
+%
+%### Options
+% \label{sec:luaoptions}
+% The Lua interface recognizes the following options. When unspecified, the
+% value of a key is taken from the \luamdef{defaultOptions} table.
+%
+% \end{markdown}
+% \iffalse
+%</lua>
+%<*manual-options>
+
+## Options
+
+In this section, I will describe all the options recognized by the Markdown
+package.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+local defaultOptions = {}
+% \end{macrocode}
+% \begingroup
+% \markdownSetup{
+% renderers = {
+% dlBegin = {\begin{optionlist}},
+% dlItem = {
+% #1
+% \begingroup
+% \markdownSetup{
+% renderers = {
+% dlBegin = {
+% \begingroup
+% \markdownSetup{
+% renderers = {
+% dlItem = {\item[####1]},
+% dlItemEnd = {}}}
+% \begin{valuelist}},
+% dlEnd = {
+% \end{valuelist}
+% \endgroup}}}},
+% dlItemEnd = {\endgroup},
+% dlEnd = {\end{optionlist}}}}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+### Lua
+
+Lua options control the conversion from markdown to \TeX{}. They are supported
+by all interfaces of the Markdown package starting with the low-level Lua
+interfaces and all the way up to the \LaTeX{} and \Hologo{ConTeXt} interfaces.
+
+% \fi
+% \begin{markdown}
+%
+%### File and Directory Names
+%
+% \end{markdown}
+% \par
+% \iffalse
+
+#### Option `cacheDir`
+
+`cacheDir` (default value: `"."`)
+
+% \fi
+% \begin{markdown}
+%
+% \Valitem[.]{cacheDir}{path}
+%
+: A path to the directory containing auxiliary cache files. If the last
+ segment of the path does not exist, it will be created by the Lua
+ command-line and plain \TeX{} implementations. The Lua implementation
+ expects that the entire path already exists.
+
+ When iteratively writing and typesetting a markdown document, the cache
+ files are going to accumulate over time. You are advised to clean the
+ cache directory every now and then, or to set it to a temporary filesystem
+ (such as `/tmp` on UN*X systems), which gets periodically emptied.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new({cacheDir = "cache"})
+ local input = "Hello *world*!"
+ tex.sprint(convert(input)) }
+\bye
+```````
+Create an empty directory named `cache` next to our text document. Then, invoke
+LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!†Several cache files of the Markdown package will also be
+produced in the `cache` directory as we requested using the `cacheDir` option.
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input hello
+\bye
+```````
+Using a text editor, create a text document named `hello.md` with the
+following content:
+``` md
+Hello *world*!
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ cacheDir=cache -- hello.md hello.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!†A directory named `cache` containing several cache files of
+the Markdown package will also be produced as we requested using the `cacheDir`
+option.
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionCacheDir{cache}
+\markdownBegin
+Hello *world*!
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†A directory named `cache` containing several cache files of the
+Markdown package will also be produced as we requested using the `cacheDir`
+option.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[cacheDir=cache]{markdown}
+\begin{document}
+\begin{markdown}
+Hello *world*!
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†A directory named `cache` containing several cache files of the
+Markdown package will also be produced as we requested using the `cacheDir`
+option.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionCacheDir{cache}
+\starttext
+\startmarkdown
+Hello *world*!
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†A directory named `cache` containing several cache files of the
+Markdown package will also be produced as we requested using the `cacheDir`
+option.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.cacheDir = "."
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+% \fi
+% \begin{markdown}
+%
+%### Parser Options
+%
+% \end{markdown}
+% \par
+% \iffalse
+
+#### Option `blankBeforeBlockquote`
+
+`blankBeforeBlockquote` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+% \Optitem[false]{blankBeforeBlockquote}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Require a blank line between a paragraph and the following blockquote.
+
+ false
+
+ : Do not require a blank line between a paragraph and the following
+ blockquote.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local newline = [[^^J^^J]]
+ local convert, input
+
+ convert = markdown.new()
+ input = "A paragraph." .. newline ..
+ "> A quote." .. newline
+ tex.sprint(convert(input))
+
+ convert = markdown.new({blankBeforeBlockquote = true})
+ input = "A paragraph." .. newline ..
+ "> Not a quote." .. newline
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> > A quote.
+>
+> A paragraph > Not a quote.
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` md
+A paragraph.
+> A quote?
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ blankBeforeBlockquote=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> > A quote?
+>
+> A paragraph. > A quote?
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+
+\markdownBegin
+A paragraph.
+> A quote.
+\markdownEnd
+
+\def\markdownOptionBlankBeforeBlockquote{true}
+\markdownBegin
+A paragraph.
+> Not a quote.
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> > A quote.
+>
+> A paragraph > Not a quote.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+A paragraph.
+> A quote.
+\end{markdown}
+
+\begin{markdown*}{blankBeforeBlockquote}
+A paragraph.
+> Not a quote.
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> > A quote.
+>
+> A paragraph > Not a quote.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+A paragraph.
+> A quote.
+\stopmarkdown
+
+\def\markdownOptionBlankBeforeBlockquote{true}
+\startmarkdown
+A paragraph.
+> Not a quote.
+\stopmarkdown
+
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> > A quote.
+>
+> A paragraph > Not a quote.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.blankBeforeBlockquote = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `blankBeforeCodeFence`
+
+`blankBeforeCodeFence` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{blankBeforeCodeFence}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Require a blank line between a paragraph and the following fenced code
+ block.
+
+ false
+
+ : Do not require a blank line between a paragraph and the following
+ fenced code block.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local newline = [[^^J^^J]]
+ local convert, input
+
+ convert = markdown.new({fencedCode = true})
+ input = "A paragraph." .. newline ..
+ "```" .. newline ..
+ "A code fence." .. newline ..
+ "```" .. newline
+ tex.sprint(convert(input))
+
+ convert = markdown.new({
+ fencedCode = true, blankBeforeCodeFence = true})
+ input = "A paragraph." .. newline ..
+ "```" .. newline ..
+ "Not a code fence." .. newline ..
+ "```" .. newline
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> ```
+> A code fence.
+> ```
+>
+> A paragraph. ``` Not a code fence. ```
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+```` md
+A paragraph.
+```
+A code fence?
+```
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ fencedCode=true -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ fencedCode=true blankBeforeCodeFence=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> ```
+> A code fence?
+> ```
+>
+> A paragraph. ``` A code fence? ```
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+```` tex
+\input markdown
+\def\markdownOptionFencedCode{true}
+
+\markdownBegin
+A paragraph.
+```
+A code fence.
+```
+\markdownEnd
+
+\def\markdownOptionBlankBeforeCodeFence{true}
+\markdownBegin
+A paragraph.
+```
+Not a code fence.
+```
+\markdownEnd
+
+\bye
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> ```
+> A code fence.
+> ```
+>
+> A paragraph. ``` Not a code fence. ```
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+```` tex
+\documentclass{article}
+\usepackage[fencedCode]{markdown}
+\begin{document}
+
+\begin{markdown}
+A paragraph.
+```
+A code fence.
+```
+\end{markdown}
+
+\begin{markdown*}{blankBeforeCodeFence}
+A paragraph.
+```
+Not a code fence.
+```
+\end{markdown*}
+
+\end{document}
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> ```
+> A code fence.
+> ```
+>
+> A paragraph. ``` Not a code fence. ```
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+```` tex
+\usemodule[t][markdown]
+\def\markdownOptionFencedCode{true}
+\starttext
+
+\startmarkdown
+A paragraph.
+```
+A code fence.
+```
+\stopmarkdown
+
+\def\markdownOptionBlankBeforeCodeFence{true}
+\startmarkdown
+A paragraph.
+```
+Not a code fence.
+```
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> ```
+> A code fence.
+> ```
+>
+> A paragraph. ``` Not a code fence. ```
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.blankBeforeCodeFence = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `blankBeforeHeading`
+
+`blankBeforeHeading` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{blankBeforeHeading}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Require a blank line between a paragraph and the following header.
+
+ false
+
+ : Do not require a blank line between a paragraph and the following
+ header.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\def\markdownRendererHeadingOne#1{{\bf #1}\par}
+\directlua{
+ local markdown = require("markdown")
+ local newline = [[^^J^^J]]
+ local convert, input
+
+ convert = markdown.new()
+ input = "A paragraph." .. newline ..
+ "A heading." .. newline ..
+ "==========" .. newline
+ tex.sprint(convert(input))
+
+ convert = markdown.new({blankBeforeHeading = true})
+ input = "A paragraph." .. newline ..
+ "Not a heading." .. newline ..
+ "==============" .. newline
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> A heading.
+> ==========
+>
+> A paragraph. Not a heading. ==============
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` md
+A paragraph.
+A heading?
+==========
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ blankBeforeHeading=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> A heading?
+> ==========
+>
+> A paragraph. A heading? ==========
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+
+\markdownBegin
+A paragraph.
+A heading.
+==========
+\markdownEnd
+
+\def\markdownOptionBlankBeforeHeading{true}
+\markdownBegin
+A paragraph.
+Not a heading.
+==============
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> A heading.
+> ==========
+>
+> A paragraph. Not a heading. ==============
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+A paragraph.
+A heading.
+==========
+\end{markdown}
+
+\begin{markdown*}{blankBeforeHeading}
+A paragraph.
+Not a heading.
+==============
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> A heading.
+> ==========
+>
+> A paragraph. Not a heading. ==============
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+A paragraph.
+A heading.
+==========
+\stopmarkdown
+
+\def\markdownOptionBlankBeforeHeading{true}
+\startmarkdown
+A paragraph.
+Not a heading.
+==============
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A paragraph.
+>
+> A heading.
+> ==========
+>
+> A paragraph. Not a heading. ==============
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.blankBeforeHeading = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `breakableBlockquotes`
+
+`breakableBlockquotes` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{breakableBlockquotes}{\opt{true}, \opt{false}}
+%
+: true
+
+ : A blank line separates block quotes.
+
+ false
+
+ : Blank lines in the middle of a block quote are ignored.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\def\markdownRendererHeadingOne#1{{\bf #1}\par}
+\directlua{
+ local markdown = require("markdown")
+ local newline = [[^^J^^J]]
+ local convert, input
+
+ convert = markdown.new()
+ input = "> A single" .. newline .. newline ..
+ "> block quote." .. newline
+ tex.sprint(convert(input))
+
+ convert = markdown.new({breakableBlockquotes = true})
+ input = "> A block quote." .. newline .. newline ..
+ "> Another block quote." .. newline
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> > A single block quote.
+>
+> > A block quote.
+>
+> > Another block quote.
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` md
+> A single block quote
+
+> or two block quotes?
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ breakableBlockquotes=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> > A single block quote or two block quotes?
+>
+> > A single block quote
+>
+> > or two block quotes?
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+
+\markdownBegin
+> A single
+
+> block quote.
+\markdownEnd
+
+\def\markdownOptionBreakableBlockquotes{true}
+\markdownBegin
+> A block quote.
+
+> Another block quote.
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> > A single block quote.
+>
+> > A block quote.
+>
+> > Another block quote.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+> A single
+
+> block quote.
+\end{markdown}
+
+\begin{markdown*}{breakableBlockquotes}
+> A block quote.
+
+> Another block quote.
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> > A single block quote.
+>
+> > A block quote.
+>
+> > Another block quote.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+> A single
+
+> block quote.
+\stopmarkdown
+
+\def\markdownOptionBreakableBlockquotes{true}
+\startmarkdown
+> A block quote.
+
+> Another block quote.
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> > A single block quote.
+>
+> > A block quote.
+>
+> > Another block quote.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.breakableBlockquotes = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `citationNbsps`
+
+`citationNbsps` (default value: `true`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{citationNbsps}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Replace regular spaces with non-breakable spaces inside the prenotes
+ and postnotes of citations produced via the pandoc citation syntax
+ extension.
+
+ false
+
+ : Do not replace regular spaces with non-breakable spaces inside the
+ prenotes and postnotes of citations produced via the pandoc citation
+ syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.bib` with the
+following content:
+``` bib
+@book{knuth:tex,
+ author = "Knuth, Donald Ervin",
+ title = "The \TeX book, volume A of Computers and typesetting",
+ publisher = "Addison-Wesley",
+ year = "1984"
+}
+```````
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[citations]{markdown}
+\begin{document}
+
+\begin{markdown}
+The TeXbook [@knuth:tex, p. 123 and 130] is good.
+\end{markdown}
+
+\begin{markdown*}{citationNbsps = false}
+The TeXbook [@knuth:tex, p. 123 and 130] is good.
+\end{markdown*}
+
+\bibliographystyle{plain}
+\bibliography{document.bib}
+\end{document}
+```````
+Next, invoke LuaTeX and BibTeX from the terminal:
+``` sh
+lualatex document.tex
+bibtex document.aux
+lualatex document.tex
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text, where the middot (`·`) denotes a non-breakable space:
+
+> The TeXbook [1, p.·123·and·130] is good.
+>
+> The TeXbook [1, p. 123 and 130] is good.
+>
+> ### References
+> [1] Donald·Ervin Knuth. _The TeXbook, volume A of Computers and typesetting._
+> Addison-Wesley, 1984.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.citationNbsps = true
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `citations`
+
+`citations` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{citations}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the pandoc citation syntax extension:
+
+ ``` md
+ Here is a simple parenthetical citation [@doe99] and here
+ is a string of several [see @doe99, pp. 33-35; also
+ @smith04, chap. 1].
+
+ A parenthetical citation can have a [prenote @doe99] and
+ a [@smith04 postnote]. The name of the author can be
+ suppressed by inserting a dash before the name of an
+ author as follows [-@smith04].
+
+ Here is a simple text citation @doe99 and here is
+ a string of several @doe99 [pp. 33-35; also @smith04,
+ chap. 1]. Here is one with the name of the author
+ suppressed -@doe99.
+ ``````
+
+: false
+
+ : Disable the pandoc citation syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.bib` with the
+following content:
+``` bib
+@book{knuth:tex,
+ author = "Knuth, Donald Ervin",
+ title = "The \TeX book, volume A of Computers and typesetting",
+ publisher = "Addison-Wesley",
+ year = "1984"
+}
+```````
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[backend=biber]{biblatex}
+\addbibresource{document.bib}
+\usepackage[citations]{markdown}
+\begin{document}
+
+\begin{markdown}
+The TeXbook [@knuth:tex, p. 123 and 130] was written by @knuth:tex.
+\end{markdown}
+
+\printbibliography
+\end{document}
+```````
+Next, invoke LuaTeX and Biber from the terminal:
+``` sh
+lualatex document.tex
+biber document.bcf
+lualatex document.tex
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The TeXbook [1, p.·123 and 130] was written by Knuth [1].
+>
+> ### References
+> [1] Donald Ervin Knuth. _The \TeX{}book, volume A of Computers and typesetting._
+> Addison-Wesley, 1984.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.citations = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `codeSpans`
+
+`codeSpans` (default value: `true`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[true]{codeSpans}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the code span syntax:
+
+ ~~~ md
+ Use the `printf()` function.
+ ``There is a literal backtick (`) here.``
+ ~~~
+
+: false
+
+ : Disable the code span syntax. This allows you to easily
+ use the quotation mark ligatures in texts that do not contain code
+ spans:
+
+ ~~~
+ ``This is a quote.''
+ ~~~~~~
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new()
+ local input =
+ "``This is a code span.'' " ..
+ "``This is no longer a code span.''"
+ tex.sprint(convert(input)) }
+\par
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new({codeSpans = false})
+ local input =
+ "``This is a quote.'' " ..
+ "``This is another quote.''"
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> ``This is a code span.'' ``This is no longer a code span.''
+>
+> “This is a quote.†“This is another quote.â€
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+\par
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` md
+``Is this a code span?'' ``Or a quote?''
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ codeSpans=false -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> “Is this a code span?†“Or a quote?â€
+>
+> ``Is this a code span?'' ``Or a quote?''
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+
+\markdownBegin
+``This is a code span.''
+``This is no longer a code span.''
+\markdownEnd
+
+\def\markdownOptionCodeSpans{false}
+\markdownBegin
+``This is a quote.''
+``This is another quote.''
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> ``This is a code span.'' ``This is no longer a code span.''
+>
+> “This is a quote.†“This is another quote.â€
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+``This is a code span.''
+``This is no longer a code span.''
+\end{markdown}
+
+\begin{markdown*}{codeSpans=false}
+``This is a quote.''
+``This is another quote.''
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> ``This is a code span.'' ``This is no longer a code span.''
+>
+> “This is a quote.†“This is another quote.â€
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+``This is a code span.''
+``This is no longer a code span.''
+\stopmarkdown
+
+\def\markdownOptionCodeSpans{false}
+\startmarkdown
+``This is a quote.''
+``This is another quote.''
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> ``This is a code span.'' ``This is no longer a code span.''
+>
+> “This is a quote.†“This is another quote.â€
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.codeSpans = true
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `contentBlocks`
+
+`contentBlocks` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{contentBlocks}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the
+% iA\,Writer content blocks syntax extension~[@sotkov17]:
+% \iffalse
+ iA\,Writer content blocks syntax extension:
+% \fi
+
+ ``` md
+ http://example.com/minard.jpg (Napoleon's
+ disastrous Russian campaign of 1812)
+ /Flowchart.png "Engineering Flowchart"
+ /Savings Account.csv 'Recent Transactions'
+ /Example.swift
+ /Lorem Ipsum.txt
+ ``````
+
+: false
+
+ : Disable the
+ iA\,Writer content blocks syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `table.csv` with the
+following content:
+``` csv
+Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847
+```````
+Create also a text document named `markdown-languages.json` with the following
+content:
+``` js
+{
+ "tex": "LaTeX"
+}
+``````
+Create also a text document named `code.tex` with the following content:
+``` tex
+This is an example code listing in \LaTeX.
+```````
+Create also a text document named `part.md` with the following content:
+``` md
+This is a *transcluded markdown document*.
+``````
+Create also a text document named `document.tex` with the following content:
+``` tex
+\documentclass{article}
+\usepackage{minted}
+\usepackage[contentBlocks]{markdown}
+\begin{document}
+\begin{markdown}
+/table.csv (An example table)
+/code.tex (An example code listing)
+/part.md (A file transclusion example)
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex --shell-escape document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Name | Surname | Born |
+> | ------ | ---------| ---- |
+> | Albert | Einstein | 1879 |
+> | Marie | Curie | 1867 |
+> | Thomas | Edison | 1847 |
+>
+> Table 1: An example table
+>
+> ``` tex
+> This is an example code listing in \LaTeX.
+> ```````
+>
+> This is a *transcluded markdown document*.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `table.csv` with the
+following content:
+``` csv
+Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847
+```````
+Create also a text document named `markdown-languages.json` with the following
+content:
+``` js
+{
+ "tex": "ConTeXt"
+}
+``````
+Create also a text document named `code.tex` with the following content:
+``` tex
+This is an example code listing in \ConTeXt.
+```````
+Create also a text document named `part.md` with the following content:
+``` md
+This is a *transcluded markdown document*.
+``````
+Create also a text document named `document.tex` with the following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionContentBlocks{true}
+\definetyping [ConTeXt]
+\setuptyping [ConTeXt] [option=TEX]
+\starttext
+\startmarkdown
+/table.csv (An example table)
+/code.tex (An example code listing)
+/part.md (A file transclusion example)
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Name | Surname | Born |
+> | ------ | ---------| ---- |
+> | Albert | Einstein | 1879 |
+> | Marie | Curie | 1867 |
+> | Thomas | Edison | 1847 |
+>
+> Table 1: An example table
+>
+> ``` tex
+> This is an example code listing in \ConTeXt.
+> ```````
+>
+> This is a *transcluded markdown document*.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.contentBlocks = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `contentBlocksLanguageMap`
+
+`contentBlocksLanguageMap` (default value: `"markdown-languages.json"`)
+
+% \fi
+% \begin{markdown}
+%
+% \Valitem[markdown-languages.json]{contentBlocksLanguageMap}{filename}
+%
+: The filename of the JSON file that maps filename extensions to
+ programming language names in the iA\,Writer content blocks.
+% See Section~\ref{sec:texcontentblockrenderers} for more information.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `table.csv` with the
+following content:
+``` csv
+Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847
+```````
+Create also a text document named `language-map.json` with the following
+content:
+``` js
+{
+ "tex": "LaTeX"
+}
+``````
+Create also a text document named `code.tex` with the following content:
+``` tex
+This is an example code listing in \LaTeX.
+```````
+Create also a text document named `part.md` with the following content:
+``` md
+This is a *transcluded markdown document*.
+``````
+Create also a text document named `document.tex` with the following content:
+``` tex
+\documentclass{article}
+\usepackage{minted}
+\usepackage[contentBlocks]{markdown}
+\markdownSetup{
+ contentBlocksLanguageMap = {language-map.json},
+}
+\begin{document}
+\begin{markdown}
+/table.csv (An example table)
+/code.tex (An example code listing)
+/part.md (A file transclusion example)
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex --shell-escape document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Name | Surname | Born |
+> | ------ | ---------| ---- |
+> | Albert | Einstein | 1879 |
+> | Marie | Curie | 1867 |
+> | Thomas | Edison | 1847 |
+>
+> Table 1: An example table
+>
+> ``` tex
+> This is an example code listing in \LaTeX.
+> ```````
+>
+> This is a *transcluded markdown document*.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `table.csv` with the
+following content:
+``` csv
+Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847
+```````
+Create also a text document named `language-map.json` with the following
+content:
+``` js
+{
+ "tex": "ConTeXt"
+}
+``````
+Create also a text document named `code.tex` with the following content:
+``` tex
+This is an example code listing in \ConTeXt.
+```````
+Create also a text document named `part.md` with the following content:
+``` md
+This is a *transcluded markdown document*.
+``````
+Create also a text document named `document.tex` with the following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionContentBlocksLanguageMap{language-map.json}
+\definetyping [ConTeXt]
+\setuptyping [ConTeXt] [option=TEX]
+\starttext
+\startmarkdown
+/table.csv (An example table)
+/code.tex (An example code listing)
+/part.md (A file transclusion example)
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Name | Surname | Born |
+> | ------ | ---------| ---- |
+> | Albert | Einstein | 1879 |
+> | Marie | Curie | 1867 |
+> | Thomas | Edison | 1847 |
+>
+> Table 1: An example table
+>
+> ``` tex
+> This is an example code listing in \ConTeXt.
+> ```````
+>
+> This is a *transcluded markdown document*.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.contentBlocksLanguageMap = "markdown-languages.json"
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `definitionLists`
+
+`definitionLists` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{definitionLists}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the pandoc definition list syntax extension:
+
+ ``` md
+ Term 1
+
+ : Definition 1
+
+ Term 2 with *inline markup*
+
+ : Definition 2
+
+ { some code, part of Definition 2 }
+
+ Third paragraph of definition 2.
+ `````
+
+: false
+
+ : Disable the pandoc definition list syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[definitionLists]{markdown}
+\begin{document}
+\begin{markdown}
+Term 1
+
+: Definition 1
+
+Term 2 with *inline markup*
+
+: Definition 2
+
+ { some code, part of Definition 2 }
+
+ Third paragraph of definition 2.
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Term 1
+>
+> : Definition 1
+>
+> Term 2 with *inline markup*
+>
+> : Definition 2
+>
+> { some code, part of Definition 2 }
+>
+> Third paragraph of definition 2.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionDefinitionLists{true}
+\starttext
+\startmarkdown
+Term 1
+
+: Definition 1
+
+Term 2 with *inline markup*
+
+: Definition 2
+
+ { some code, part of Definition 2 }
+
+ Third paragraph of definition 2.
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Term 1
+>
+> : Definition 1
+>
+> Term 2 with *inline markup*
+>
+> : Definition 2
+>
+> { some code, part of Definition 2 }
+>
+> Third paragraph of definition 2.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.definitionLists = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `fencedCode`
+
+`fencedCode` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{fencedCode}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the commonmark fenced code block extension:
+
+ ~~~~~~~~ md
+ ~~~ js
+ if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+ }
+ ~~~~~~
+
+ ``` html
+ <pre>
+ <code>
+ // Some comments
+ line 1 of code
+ line 2 of code
+ line 3 of code
+ </code>
+ </pre>
+ ```
+ ~~~~~~~~~~~
+
+: false
+
+ : Disable the commonmark fenced code block extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+```` tex
+\documentclass{article}
+\usepackage{minted}
+\usepackage[fencedCode]{markdown}
+\begin{document}
+\begin{markdown}
+~~~ js
+if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+}
+~~~~~~
+
+ ``` html
+ <pre>
+ <code>
+ // Some comments
+ line 1 of code
+ line 2 of code
+ line 3 of code
+ </code>
+ </pre>
+ ```
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex --shell-escape document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> ~~~ js
+> if (a > 3) {
+> moveShip(5 * gravity, DOWN);
+> }
+> ~~~~~~
+>
+> ``` html
+> <pre>
+> <code>
+> // Some comments
+> line 1 of code
+> line 2 of code
+> line 3 of code
+> </code>
+> </pre>
+> ```
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+```` tex
+\usemodule[t][markdown]
+\def\markdownOptionFencedCode{true}
+\definetyping [js]
+\definetyping [html]
+\setuptyping [html] [option=XML]
+\starttext
+\startmarkdown
+~~~ js
+if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+}
+~~~~~~
+
+ ``` html
+ <pre>
+ <code>
+ // Some comments
+ line 1 of code
+ line 2 of code
+ line 3 of code
+ </code>
+ </pre>
+ ```
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> ~~~ js
+> if (a > 3) {
+> moveShip(5 * gravity, DOWN);
+> }
+> ~~~~~~
+>
+> ``` html
+> <pre>
+> <code>
+> // Some comments
+> line 1 of code
+> line 2 of code
+> line 3 of code
+> </code>
+> </pre>
+> ```
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.fencedCode = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `footnotes`
+
+`footnotes` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{footnotes}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the pandoc footnote syntax extension:
+
+ ``` md
+ Here is a footnote reference,[^1] and another.[^longnote]
+
+ [^1]: Here is the footnote.
+
+ [^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+ belong to the previous footnote.
+
+ { some.code }
+
+ The whole paragraph can be indented, or just the
+ first line. In this way, multi-paragraph footnotes
+ work like multi-paragraph list items.
+
+ This paragraph won't be part of the note, because it
+ isn't indented.
+ ``````
+
+: false
+
+ : Disable the pandoc footnote syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[footnotes]{markdown}
+\begin{document}
+\begin{markdown}
+Here is a footnote reference,[^1] and another.[^longnote]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ { some.code }
+
+ The whole paragraph can be indented, or just the
+ first line. In this way, multi-paragraph footnotes
+ work like multi-paragraph list items.
+
+This paragraph won't be part of the note, because it
+isn't indented.
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Here is a footnote reference,[^1] and another.[^longnote]
+>
+> [^1]: Here is the footnote.
+>
+> [^longnote]: Here's one with multiple blocks.
+>
+> Subsequent paragraphs are indented to show that they
+> belong to the previous footnote.
+>
+> { some.code }
+>
+> The whole paragraph can be indented, or just the
+> first line. In this way, multi-paragraph footnotes
+> work like multi-paragraph list items.
+>
+> This paragraph won't be part of the note, because it
+> isn't indented.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionFootnotes{true}
+\starttext
+\startmarkdown
+Here is a footnote reference,[^1] and another.[^longnote]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ { some.code }
+
+ The whole paragraph can be indented, or just the
+ first line. In this way, multi-paragraph footnotes
+ work like multi-paragraph list items.
+
+This paragraph won't be part of the note, because it
+isn't indented.
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Here is a footnote reference,[^1] and another.[^longnote]
+>
+> [^1]: Here is the footnote.
+>
+> [^longnote]: Here's one with multiple blocks.
+>
+> Subsequent paragraphs are indented to show that they
+> belong to the previous footnote.
+>
+> { some.code }
+>
+> The whole paragraph can be indented, or just the
+> first line. In this way, multi-paragraph footnotes
+> work like multi-paragraph list items.
+>
+> This paragraph won't be part of the note, because it
+> isn't indented.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.footnotes = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `hashEnumerators`
+
+`hashEnumerators` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{hashEnumerators}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the use of hash symbols (`#`) as ordered item list
+ markers:
+
+ ``` md
+ #. Bird
+ #. McHale
+ #. Parish
+ ``````
+
+: false
+
+ : Disable the use of hash symbols (`#`) as ordered item list
+ markers.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+. Bird
+. McHale
+. Parish
+\end{markdown}
+
+\begin{markdown*}{hashEnumerators}
+. Bird
+. McHale
+. Parish
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> . Bird
+> ========
+> . McHale
+> ========
+> . Parish
+> ========
+>
+> #. Bird
+> #. McHale
+> #. Parish
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+. Bird
+. McHale
+. Parish
+\stopmarkdown
+
+\def\markdownOptionHashEnumerators{true}
+\startmarkdown
+. Bird
+. McHale
+. Parish
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> . Bird
+> ========
+> . McHale
+> ========
+> . Parish
+> ========
+>
+> #. Bird
+> #. McHale
+> #. Parish
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.hashEnumerators = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `headerAttributes` {#header-attributes}
+
+`headerAttributes` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{headerAttributes}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the assignment of HTML attributes to headings:
+
+ ``` md
+ # My first heading {#foo}
+
+ ## My second heading ## {#bar .baz}
+
+ Yet another heading {key=value}
+ ===================
+ ``````
+
+ These HTML attributes have currently no effect other than enabling
+% content slicing, see the \Opt{slice} option.
+% \iffalse
+ [content slicing](#slice).
+% \fi
+
+: false
+
+ : Disable the assignment of HTML attributes to headings.
+
+% \end{markdown}
+% \iffalse
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.headerAttributes = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `html`
+
+`html` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{html}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the recognition of HTML tags, block elements, comments, HTML
+ instructions, and entities in the input. Tags, block elements (along
+ with contents), HTML instructions, and comments will be ignored and
+ HTML entities will be replaced with the corresponding Unicode
+ codepoints.
+
+: false
+
+ : Disable the recognition of HTML markup. Any HTML markup in the input
+ will be rendered as plain text.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new()
+ local newline = [[^^J^^J]]
+ local input =
+ "<div>*There is no block tag support.*</div>" .. newline ..
+ "*There is no <inline tag="tag"></inline> support.*" .. newline ..
+ "_There is no <!-- comment --> support._" .. newline ..
+ "_There is no <? HTML instruction ?> support._"
+ tex.sprint(convert(input)) }
+\par
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new({html = true})
+ local input =
+ "<div>*There is block tag support.*</div>" .. newline ..
+ "*There is <inline tag="tag"></inline> support.*" .. newline ..
+ "_There is <!-- comment --> support._" .. newline ..
+ "_There is <? HTML instruction ?> support._"
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \<div>There is no block tag support.\</div>
+> There is no \<inline tag=â€tagâ€>\</inline> support.
+> There is no \<!-- comment --> support.
+> There is no <? HTML instruction ?> support.
+>
+> There is support. There is support. There is support.
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+\par
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` html
+<div>
+*Is there block tag support?*
+</div>
+*Is there <inline tag="tag"></inline> support?*
+_Is there <!-- comment --> support?_
+_Is there <? HTML instruction ?> support?_
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ html=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \<div>Is there block tag support?\</div>
+> Is there \<inline tag=â€tagâ€>\</inline> support?
+> Is there \<!-- comment --> support?
+> Is there <? HTML instruction ?> support?
+>
+> Is there support? Is there support? Is there support?
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+
+\markdownBegin
+<div>
+*There is no block tag support.*
+</div>
+*There is no <inline tag="tag"></inline> support.*
+_There is no <!-- comment --> support._
+_There is no <? HTML instruction ?> support._
+\markdownEnd
+
+\def\markdownOptionHtml{true}
+\markdownBegin
+<div>
+*There is block tag support.*
+</div>
+*There is <inline tag="tag"></inline> support.*
+_There is <!-- comment --> support._
+_There is <? HTML instruction ?> support._
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \<div>There is no block tag support.\</div>
+> There is no \<inline tag=â€tagâ€>\</inline> support.
+> There is no \<!-- comment --> support.
+> There is no <? HTML instruction ?> support.
+>
+> There is support. There is support. There is support.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+<div>
+*There is no block tag support.*
+</div>
+*There is no <inline tag="tag"></inline> support.*
+_There is no <!-- comment --> support._
+_There is no <? HTML instruction ?> support._
+\end{markdown}
+
+\begin{markdown*}{html}
+<div>
+*There is block tag support.*
+</div>
+*There is <inline tag="tag"></inline> support.*
+_There is <!-- comment --> support._
+_There is <? HTML instruction ?> support._
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \<div>There is no block tag support.\</div>
+> There is no \<inline tag=â€tagâ€>\</inline> support.
+> There is no \<!-- comment --> support.
+> There is no <? HTML instruction ?> support.
+>
+> There is support. There is support. There is support.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+<div>
+*There is no block tag support.*
+</div>
+*There is no <inline tag="tag"></inline> support.*
+_There is no <!-- comment --> support._
+_There is no <? HTML instruction ?> support._
+\stopmarkdown
+
+\def\markdownOptionHtml{true}
+\startmarkdown
+<div>
+*There is block tag support.*
+</div>
+*There is <inline tag="tag"></inline> support.*
+_There is <!-- comment --> support._
+_There is <? HTML instruction ?> support._
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \<div>There is no block tag support.\</div>
+> There is no \<inline tag=â€tagâ€>\</inline> support.
+> There is no \<!-- comment --> support.
+> There is no <? HTML instruction ?> support.
+>
+> There is support. There is support. There is support.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.html = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `hybrid`
+
+`hybrid` (default value: `true`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{hybrid}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Disable the escaping of special plain \TeX{} characters, which makes it
+ possible to intersperse your markdown markup with \TeX{} code. The
+ intended usage is in documents prepared manually by a human author.
+ In such documents, it can often be desirable to mix \TeX{} and markdown
+ markup freely.
+
+: false
+
+ : Enable the escaping of special plain \TeX{} characters outside verbatim
+ environments, so that they are not interpretted by \TeX{}. This is
+ encouraged when typesetting automatically generated content or
+ markdown documents that were not prepared with this package in mind.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local input, convert_safe, convert_unsafe, paragraph
+
+ input = [[$\string\sqrt{-1}$ *equals* $i$.]]
+ convert_safe = markdown.new()
+ convert_unsafe = markdown.new({hybrid = true})
+ paragraph = [[\par]]
+
+ tex.sprint(
+ convert_safe(input) .. paragraph ..
+ convert_unsafe(input)
+ )
+}
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt {-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+\input optionfalse
+
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` md
+$\sqrt{-1}$ *equals* $i$.
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ hybrid=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt {-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+
+\markdownBegin
+$\sqrt{-1}$ *equals* $i$.
+\markdownEnd
+
+\def\markdownOptionHybrid{true}
+\markdownBegin
+$\sqrt{-1}$ *equals* $i$.
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt {-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+$\sqrt{-1}$ *equals* $i$.
+\end{markdown}
+
+\begin{markdown*}{hybrid}
+$\sqrt{-1}$ *equals* $i$.
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt {-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+$\sqrt{-1}$ *equals* $i$.
+\stopmarkdown
+
+\def\markdownOptionHybrid{true}
+\startmarkdown
+$\sqrt{-1}$ *equals* $i$.
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt {-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.hybrid = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `inlineFootnotes`
+
+`inlineFootnotes` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{inlineFootnotes}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the pandoc inline footnote syntax extension:
+
+ ``` md
+ Here is an inline note.^[Inlines notes are easier to
+ write, since you don't have to pick an identifier and
+ move down to type the note.]
+ ``````
+
+: false
+
+ : Disable the pandoc inline footnote syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[footnotes, inlineFootnotes]{markdown}
+\begin{document}
+\begin{markdown}
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Here is an inline note.^[Inlines notes are easier to
+> write, since you don't have to pick an identifier and
+> move down to type the note.]
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\starttext
+\startmarkdown
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Here is an inline note.^[Inlines notes are easier to
+> write, since you don't have to pick an identifier and
+> move down to type the note.]
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.inlineFootnotes = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `pipeTables` {#pipe-tables}
+
+`pipeTables` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{pipeTables}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the \acro{PHP} Markdown table syntax extension:
+
+ ``` md
+ | Right | Left | Default | Center |
+ |------:|:-----|---------|:------:|
+ | 12 | 12 | 12 | 12 |
+ | 123 | 123 | 123 | 123 |
+ | 1 | 1 | 1 | 1 |
+ ``````
+
+: false
+
+ : Disable the \acro{PHP} Markdown table syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[pipeTables]{markdown}
+\begin{document}
+\begin{markdown}
+| Right | Left | Default | Center |
+|------:|:-----|---------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Right | Left | Default | Center |
+> |------:|:-----|---------|:------:|
+> | 12 | 12 | 12 | 12 |
+> | 123 | 123 | 123 | 123 |
+> | 1 | 1 | 1 | 1 |
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionPipeTables{true}
+\starttext
+\startmarkdown
+| Right | Left | Default | Center |
+|------:|:-----|---------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Right | Left | Default | Center |
+> |------:|:-----|---------|:------:|
+> | 12 | 12 | 12 | 12 |
+> | 123 | 123 | 123 | 123 |
+> | 1 | 1 | 1 | 1 |
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.pipeTables = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `preserveTabs`
+
+`preserveTabs` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{preserveTabs}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Preserve tabs in code block and fenced code blocks.
+
+: false
+
+ : Convert any tabs in the input to spaces.
+
+% \end{markdown}
+% \iffalse
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.preserveTabs = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `shiftHeadings`
+
+`shiftHeadings` (default value: `0`)
+
+% \fi
+% \begin{markdown}
+%
+% \Valitem[0]{shiftHeadings}{shift amount}
+%
+: All headings will be shifted by \meta{shift amount}, which can be both
+ positive and negative. Headings will not be shifted beyond level 6 or
+ below level 1. Instead, those headings will be shifted to level 6, when
+ \meta{shift amount} is positive, and to level 1, when \meta{shift amount}
+ is negative.
+
+% \end{markdown}
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `example.md` with the
+following content:
+
+``` md
+## A section
+```
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+
+\font\normal=cmr10\normal
+\font\big=cmr10 at 12pt
+\def\markdownRendererHeadingTwo#1{{\big #1\par}}
+\font\bigger=cmr10 scaled 1440
+\def\markdownRendererHeadingOne#1{{\bigger #1\par}}
+
+\def\markdownOptionShiftHeadings{-1}
+\markdownInput{example.md}
+
+\def\markdownOptionShiftHeadings{0}
+\markdownInput{example.md}
+
+\def\markdownOptionShiftHeadings{+1}
+\markdownInput{example.md}
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> # A section
+> ## A section
+> ### A section
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\usepackage{filecontents}
+\begin{filecontents*}{example.md}
+## A section
+\end{filecontents*}
+\begin{document}
+\markdownInput[shiftHeadings=-1]{example.md}
+\markdownInput{example.md}
+\markdownInput[shiftHeadings=+1]{example.md}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> # A section
+> ## A section
+> ### A section
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `example.md` with the
+following content:
+
+``` md
+## A section
+```
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\def\markdownOptionShiftHeadings{-1}
+\markdownInput{example.md}
+
+\def\markdownOptionShiftHeadings{0}
+\markdownInput{example.md}
+
+\def\markdownOptionShiftHeadings{+1}
+\markdownInput{example.md}
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> # A section
+> ## A section
+> ### A section
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.shiftHeadings = 0
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `slice` {#slice}
+
+`slice` (default value: `^ $`)
+
+% \fi
+% \begin{markdown}
+%
+% \Valitem[\textasciicircum{} \$]{slice}{the beginning and the end of a slice}
+%
+: Two space-separated selectors that specify the slice of a document that
+ will be processed, whereas the remainder of the document will be ignored.
+ The following selectors are recognized:
+
+ - The circumflex (`^`) selects the beginning of a document.
+ - The dollar sign (`$`) selects the end of a document.
+ - `^`\meta{identifier} selects the beginning of a section with the
+% \acro{HTML} attribute `#`\meta{identifier} (see the
+% \Opt{headerAttributes} option).
+% \iffalse
+ [\acro{HTML} attribute](#header-attributes) `#`\meta{identifier}.
+% \fi
+ - `$`\meta{identifier} selects the end of a section with the \acro{HTML}
+ attribute `#`\meta{identifier}.
+ - \meta{identifier} corresponds to `^`\meta{identifier} for the first
+ selector and to `$`\meta{identifier} for the second selector.
+
+ Specifying only a single selector, \meta{identifier}, is equivalent
+ to specifying the two selectors \meta{identifier} \meta{identifier},
+ which is equivalent to `^`\meta{identifier} `$`\meta{identifier}, i.e.
+ the entire section with the \acro{HTML} attribute `#`\meta{identifier} will be
+ selected.
+
+% \end{markdown}
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `hamlet.md` with the
+following content:
+
+``` md
+# The Tragedy of Hamlet
+Shakespeare's longest play.
+
+## Act III {#act-3}
+Hamlet kills Polonius.
+
+## Act V {#act-5}
+Hamlet dies.
+
+## Act I {#act-1}
+Hamlet talks to ghost.
+```
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionHeaderAttributes{true}
+
+\font\normal=cmr10\normal
+\font\big=cmr10 at 12pt
+\def\markdownRendererHeadingTwo#1{{\big #1\par}}
+\font\bigger=cmr10 scaled 1440
+\def\markdownRendererHeadingOne#1{{\bigger #1\par}}
+
+\def\markdownOptionSlice{^ ^act-3}
+\markdownInput{hamlet.md}
+
+\def\markdownOptionSlice{act-1}
+\markdownInput{hamlet.md}
+
+\def\markdownOptionSlice{act-3 act-5}
+\markdownInput{hamlet.md}
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> # The Tragedy of Hamlet
+> Shakespeare's longest play.
+>
+> ## Act I
+> Hamlet talks to ghost.
+>
+> ## Act III
+> Hamlet kills Polonius.
+>
+> ## Act V
+> Hamlet dies.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[headerAttributes]{markdown}
+\usepackage{filecontents}
+\begin{filecontents*}{hamlet.md}
+# The Tragedy of Hamlet
+Shakespeare's longest play.
+
+## Act III {#act-3}
+Hamlet kills Polonius.
+
+## Act V {#act-5}
+Hamlet dies.
+
+## Act I {#act-1}
+Hamlet talks to ghost.
+\end{filecontents*}
+\begin{document}
+\markdownInput[slice=^ ^act-3]{hamlet.md}
+\markdownInput[slice=act-1]{hamlet.md}
+\markdownInput[slice=act-3 act-5]{hamlet.md}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> # The Tragedy of Hamlet
+> Shakespeare's longest play.
+>
+> ## Act I
+> Hamlet talks to ghost.
+>
+> ## Act III
+> Hamlet kills Polonius.
+>
+> ## Act V
+> Hamlet dies.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `hamlet.md` with the
+following content:
+
+``` md
+# The Tragedy of Hamlet
+Shakespeare's longest play.
+
+## Act III {#act-3}
+Hamlet kills Polonius.
+
+## Act V {#act-5}
+Hamlet dies.
+
+## Act I {#act-1}
+Hamlet talks to ghost.
+```
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionHeaderAttributes{true}
+\starttext
+
+\def\markdownOptionSlice{^ ^act-3}
+\markdownInput{hamlet.md}
+
+\def\markdownOptionSlice{act-1}
+\markdownInput{hamlet.md}
+
+\def\markdownOptionSlice{act-3 act-5}
+\markdownInput{hamlet.md}
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> # The Tragedy of Hamlet
+> Shakespeare's longest play.
+>
+> ## Act I
+> Hamlet talks to ghost.
+>
+> ## Act III
+> Hamlet kills Polonius.
+>
+> ## Act V
+> Hamlet dies.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.slice = "^ $"
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+
+#### Option `smartEllipses`
+
+`smartEllipses` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{smartEllipses}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Convert any ellipses in the input to the
+ \m{markdownRendererEllipsis} \TeX{} macro.
+
+: false
+
+ : Preserve all ellipses in the input.
+
+% \end{markdown}
+% \iffalse
+
+##### Lua Module Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererEllipsis{. . .}
+\input lmfonts
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new()
+ local input = "These are just three regular dots ..."
+ tex.sprint(convert(input)) }
+\par
+\directlua{
+ local markdown = require("markdown")
+ local convert = markdown.new({smartEllipses = true})
+ local input = "... and this is a victorian ellipsis."
+ tex.sprint(convert(input)) }
+\bye
+```````
+Then, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+```````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> These are just three regular dots ...
+>
+> . . . and this is a victorian ellipsis.
+
+##### Lua CLI Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererEllipsis{. . .}
+\input lmfonts
+\input optionfalse
+\par
+\input optiontrue
+\bye
+```````
+Using a text editor, create a text document named `content.md` with the
+following content:
+``` md
+Are these just three regular dots, a victorian ellipsis, or ... ?
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex
+texlua ⟨CLI pathname⟩ smartEllipses=true -- content.md optiontrue.tex
+luatex document.tex
+```````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Are these just three regular dots, a victorian ellipsis, or ... ?
+>
+> Are these just three regular dots, a victorian ellipsis, or . . . ?
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererEllipsis{. . .}
+
+\markdownBegin
+These are just three regular dots ...
+\markdownEnd
+
+\def\markdownOptionSmartEllipses{true}
+\markdownBegin
+... and this is a victorian ellipsis.
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> These are just three regular dots ...
+>
+> . . . and this is a victorian ellipsis.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ ellipsis = {. . .} }}
+\begin{document}
+
+\begin{markdown}
+These are just three regular dots ...
+\end{markdown}
+
+\begin{markdown*}{smartEllipses}
+... and this is a victorian ellipsis.
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> These are just three regular dots ...
+>
+> . . . and this is a victorian ellipsis.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererEllipsis{. . .}
+\starttext
+
+\startmarkdown
+These are just three regular dots ...
+\stopmarkdown
+
+\def\markdownOptionSmartEllipses{true}
+\startmarkdown
+... and this is a victorian ellipsis.
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> These are just three regular dots ...
+>
+> . . . and this is a victorian ellipsis.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.smartEllipses = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `startNumber`
+
+`startNumber` (default value: `true`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[true]{startNumber}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Make the number in the first item of an ordered lists significant. The
+ item numbers will be passed to the
+ \m{markdownRendererOlItemWithNumber} \TeX{} macro.
+
+: false
+
+ : Ignore the numbers in the ordered list items. Each item will only
+ produce a \m{markdownRendererOlItem} \TeX{} macro.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+The following list respects the numbers specified in the markup:
+
+3. third item
+4. fourth item
+5. fifth item
+\end{markdown}
+
+\begin{markdown*}{startNumber=false}
+The following list does not respect the numbers specified in the
+markup:
+
+3. third item
+4. fourth item
+5. fifth item
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The following list respects the numbers specified in the markup:
+>
+> 3. third item
+> 4. fourth item
+> 5. fifth item
+>
+> The following list does not respect the numbers specified in the markup:
+>
+> 1. third item
+> 2. fourth item
+> 3. fifth item
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+The following list respects the numbers specified in the markup:
+
+3. third item
+4. fourth item
+5. fifth item
+\stopmarkdown
+
+\def\markdownOptionStartNumber{false}
+\startmarkdown
+The following list respects the numbers specified in the markup:
+
+3. third item
+4. fourth item
+5. fifth item
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The following list respects the numbers specified in the markup:
+>
+> 3. third item
+> 4. fourth item
+> 5. fifth item
+>
+> The following list does not respect the numbers specified in the markup:
+>
+> 1. third item
+> 2. fourth item
+> 3. fifth item
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.startNumber = true
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `tableCaptions`
+
+`tableCaptions` (default value: `false`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[false]{tableCaptions}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Enable the Pandoc `table_captions` syntax extension for
+% pipe tables (see the \Opt{pipeTables} option).
+% \iffalse
+ [pipe tables](#pipe-tables).
+% \fi
+
+ ``` md
+ | Right | Left | Default | Center |
+ |------:|:-----|---------|:------:|
+ | 12 | 12 | 12 | 12 |
+ | 123 | 123 | 123 | 123 |
+ | 1 | 1 | 1 | 1 |
+
+ : Demonstration of pipe table syntax.
+ ``````
+
+: false
+
+ : Enable the Pandoc `table_captions` syntax extension.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[pipeTables, tableCaptions]{markdown}
+\begin{document}
+\begin{markdown}
+| Right | Left | Default | Center |
+|------:|:-----|---------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of pipe table syntax.
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Right | Left | Default | Center |
+> |------:|:-----|---------|:------:|
+> | 12 | 12 | 12 | 12 |
+> | 123 | 123 | 123 | 123 |
+> | 1 | 1 | 1 | 1 |
+>
+> : Demonstration of pipe table syntax.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionPipeTables{true}
+\def\markdownOptionTableCaptions{true}
+\starttext
+\startmarkdown
+| Right | Left | Default | Center |
+|------:|:-----|---------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of pipe table syntax.
+\stopmarkdown
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> | Right | Left | Default | Center |
+> |------:|:-----|---------|:------:|
+> | 12 | 12 | 12 | 12 |
+> | 123 | 123 | 123 | 123 |
+> | 1 | 1 | 1 | 1 |
+>
+> : Demonstration of pipe table syntax.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.tableCaptions = false
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+
+#### Option `tightLists`
+
+`tightLists` (default value: `true`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[true]{tightLists}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Lists whose bullets do not consist of multiple paragraphs will be
+ passed to the
+ \m{markdownRendererOlBeginTight}, \m{markdownRendererOlEndTight},
+ \m{markdownRendererUlBeginTight}, \m{markdownRendererUlEndTight},
+ \m{markdownRendererDlBeginTight}, and
+ \m{markdownRendererDlEndTight} \TeX{} macros.
+
+: false
+
+ : Lists whose bullets do not consist of multiple paragraphs will be
+ treated the same way as lists that do consist of multiple paragraphs.
+
+% \end{markdown}
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+The following list is tight:
+
+ - first item
+ - second item
+ - third item
+
+The following list is loose:
+
+ - first item
+ - second item that spans
+
+ multiple paragraphs
+ - third item
+\end{markdown}
+
+\begin{markdown*}{tightLists=false}
+The following list is now also loose:
+
+ - first item
+ - second item
+ - third item
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The following list is tight:
+>
+> - first item
+> - second item
+> - third item
+>
+> The following list is loose:
+>
+> - first item
+> - second item that spans
+>
+> multiple paragraphs
+> - third item
+>
+> The following list is now also loose:
+>
+> - first item
+>
+> - second item
+>
+> - third item
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.tightLists = true
+% \end{macrocode}
+% \par
+% \iffalse
+%</lua,lua-cli>
+%<*manual-options>
+
+#### Option `underscores`
+
+`underscores` (default value: `true`)
+
+% \fi
+% \begin{markdown}
+%
+% \Optitem[true]{underscores}{\opt{true}, \opt{false}}
+%
+: true
+
+ : Both underscores and asterisks can be used to denote emphasis and
+ strong emphasis:
+
+ ``` md
+ *single asterisks*
+ _single underscores_
+ **double asterisks**
+ __double underscores__
+ ``````
+
+: false
+
+ : Only asterisks can be used to denote emphasis and strong emphasis.
+ This makes it easy to write math with the \Opt{hybrid} option
+ without the need to constantly escape subscripts.
+
+% \end{markdown}
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionHybrid{true}
+
+\markdownBegin
+This is _emphasized text_ and this is a math subscript: $m\_n$.
+\markdownEnd
+
+\def\markdownOptionUnderscores{false}
+\markdownBegin
+This is *emphasized text* and this is a math subscript: $m_n$.
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is _emphasized text_ and this is a math subscript: *mâ‚™*.
+>
+> This is _emphasized text_ and this is a math subscript: *mâ‚™*.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[hybrid]{markdown}
+\begin{document}
+
+\begin{markdown}
+This is _emphasized text_ and this is a math subscript: $m\_n$.
+\end{markdown}
+
+\begin{markdown*}{underscores=false}
+This is *emphasized text* and this is a math subscript: $m_n$.
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is _emphasized text_ and this is a math subscript: *mâ‚™*.
+>
+> This is _emphasized text_ and this is a math subscript: *mâ‚™*.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionHybrid{true}
+\starttext
+
+\startmarkdown
+This is _emphasized text_ and this is a math subscript: $m\_n$.
+\stopmarkdown
+
+\def\markdownOptionUnderscores{false}
+\startmarkdown
+This is *emphasized text* and this is a math subscript: $m_n$.
+\stopmarkdown
+
+\stoptext
+````````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+`````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is _emphasized text_ and this is a math subscript: *mâ‚™*.
+>
+> This is _emphasized text_ and this is a math subscript: *mâ‚™*.
+
+%</manual-options>
+%<*lua,lua-cli>
+% \fi
+% \begin{macrocode}
+defaultOptions.underscores = true
+% \end{macrocode}
+% \endgroup
+% \iffalse
+%</lua,lua-cli>
+%<*lua-cli>
+% \fi
+% \par
+% \begin{markdown}
+%
+%### Command-Line Interface
+% \label{sec:lua-cli-interface}
+% To provide finer control over the conversion and to simplify debugging, a
+% command-line Lua interface for converting a Markdown document to \TeX{} is
+% also provided.
+%
+% \end{markdown}
+% \begin{macrocode}
+
+HELP_STRING = [[
+Usage: texlua ]] .. arg[0] .. [[ [OPTIONS] -- [INPUT_FILE] [OUTPUT_FILE]
+where OPTIONS are documented in the Lua interface section of the
+technical Markdown package documentation.
+
+When OUTPUT_FILE is unspecified, the result of the conversion will be
+written to the standard output. When INPUT_FILE is also unspecified, the
+result of the conversion will be read from the standard input.
+
+Report bugs to: witiko@mail.muni.cz
+Markdown package home page: <https://github.com/witiko/markdown>]]
+
+VERSION_STRING = [[
+markdown-cli.lua (Markdown) ]] .. metadata.version .. [[
+
+Copyright (C) ]] .. table.concat(metadata.copyright,
+ "\nCopyright (C) ") .. [[
+
+License: ]] .. metadata.license
+
+local function warn(s)
+ io.stderr:write("Warning: " .. s .. "\n") end
+
+local function error(s)
+ io.stderr:write("Error: " .. s .. "\n")
+ os.exit(1) end
+
+local process_options = true
+local options = {}
+local input_filename
+local output_filename
+for i = 1, #arg do
+ if process_options then
+% \end{macrocode}
+% \begin{markdown}
+% After the optional `-`{}`-` argument has been specified, the remaining
+% arguments are assumed to be input and output filenames. This argument is
+% optional, but encouraged, because it helps resolve ambiguities when
+% deciding whether an option or a filename has been specified.
+% \end{markdown}
+% \begin{macrocode}
+ if arg[i] == "--" then
+ process_options = false
+ goto continue
+% \end{macrocode}
+% \begin{markdown}
+% Unless the `-`{}`-` argument has been specified before, an argument
+% containing the equals sign (`=`) is assumed to be an option specification in
+% a \meta{key}`=`\meta{value} format. The available options are listed in
+% Section~\ref{sec:luaoptions}.
+% \end{markdown}
+% \begin{macrocode}
+ elseif arg[i]:match("=") then
+ key, value = arg[i]:match("(.-)=(.*)")
+% \end{macrocode}
+% \begin{markdown}
+% The \luam{defaultOptions} table is consulted to identify whether \meta{value}
+% should be parsed as a string or as a boolean.
+% \end{markdown}
+% \begin{macrocode}
+ default_type = type(defaultOptions[key])
+ if default_type == "boolean" then
+ options[key] = (value == "true")
+ else
+ if default_type ~= "string" then
+ if default_type == "nil" then
+ warn('Option "' .. key .. '" not recognized.')
+ else
+ warn('Option "' .. key .. '" type not recognized, please file ' ..
+ 'a report to the package maintainer.')
+ end
+ warn('Parsing the ' .. 'value "' .. value ..'" of option "' ..
+ key .. '" as a string.')
+ end
+ options[key] = value
+ end
+ goto continue
+% \end{macrocode}
+% \begin{markdown}
+% Unless the `-`{}`-` argument has been specified before, an argument
+% `-`{}`-help`, or `-h` causes a brief documentation for how to invoke the
+% program to be printed to the standard output.
+% \end{markdown}
+% \begin{macrocode}
+ elseif arg[i] == "--help" or arg[i] == "-h" then
+ print(HELP_STRING)
+ os.exit()
+% \end{macrocode}
+% \begin{markdown}
+% Unless the `-`{}`-` argument has been specified before, an argument
+% `-`{}`-version`, or `-v` causes the program to print information about its
+% name, version, origin and legal status, all on standard output.
+% \end{markdown}
+% \begin{macrocode}
+ elseif arg[i] == "--version" or arg[i] == "-v" then
+ print(VERSION_STRING)
+ os.exit()
+ end
+ end
+% \end{macrocode}
+% \begin{markdown}
+% The first argument that matches none of the above patters is assumed to be
+% the input filename. The input filename should correspond to the Markdown
+% document that is going to be converted to a \TeX{} document.
+% \end{markdown}
+% \begin{macrocode}
+ if input_filename == nil then
+ input_filename = arg[i]
+% \end{macrocode}
+% \begin{markdown}
+% The first argument that matches none of the above patters is assumed to be
+% the output filename. The output filename should correspond to the \TeX{}
+% document that will result from the conversion.
+% \end{markdown}
+% \begin{macrocode}
+ elseif output_filename == nil then
+ output_filename = arg[i]
+ else
+ error('Unexpected argument: "' .. arg[i] .. '".')
+ end
+ ::continue::
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The command-line Lua interface is implemented by the `markdown-cli.lua`
+% file that can be invoked from the command line as follows:
+% ``` sh
+% texlua /path/to/markdown-cli.lua cacheDir=. -- hello.md hello.tex
+% ``````
+% \noindent to convert the Markdown document `hello.md` to a \TeX{} document
+% `hello.tex`. After the Markdown package for our \TeX{} format has been
+% loaded, the converted document can be typeset as follows:
+% ``` tex
+% \input hello
+% ```````
+%
+% This shows another advantage of using the command-line interface compared to
+% using a higher-level \TeX{} interface: it is unnecessary to provide shell
+% access for the \TeX{} engine.
+%
+% \end{markdown}
+% \iffalse
+%</lua-cli>
+%<*tex>
+% \fi
+% \par
+% \begin{markdown}
+%
+% Plain \TeX{} Interface
+%-----------------------
+% \label{sec:texinterface}
+%
+% \iffalse
+%</tex>
+%<*manual-interfaces>
+
+### Plain \TeX{}
+
+The plain \TeX{} interface provides \TeX{} commands that typeset markdown
+documents by using the Lua interface behind the scenes. Unlike the Lua
+interface, the plain TeX interface does not provide low-level tools for
+converting markdown to \TeX{}. Instead, its goal is to provide high-level
+typesetting capabilities.
+
+The plain \TeX{} interface accepts the same options as the `markdown` Lua
+module, in addition to its own options, but now the options are specified as
+\TeX{} commands.
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+
+\markdownBegin
+$\sqrt{-1}$ *equals* $i$.
+\markdownEnd
+
+\def\markdownOptionHybrid{true}
+\markdownBegin
+$\sqrt{-1}$ *equals* $i$.
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+Invoking pdfTeX should have the same effect:
+``` sh
+pdftex --shell-escape document.tex
+``````
+
+%</manual-interfaces>
+%<*tex>
+% \fi
+%
+% The plain \TeX{} interface provides macros for the typesetting of markdown
+% input from within plain \TeX{}, for setting the Lua interface options (see
+% Section \ref{sec:luaoptions}) used during the conversion from markdown to
+% plain \TeX{} and for changing the way markdown the tokens are rendered.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownLastModified{2019/04/30}%
+\def\markdownVersion{2.8.1}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The plain \TeX{} interface is implemented by the `markdown.tex` file that can
+% be loaded as follows:
+% ``` tex
+% \input markdown
+% ```````
+% \noindent It is expected that the special plain \TeX{} characters have the
+% expected category codes, when \m{input}ting the file.
+%
+%### Typesetting Markdown
+% \label{sec:textypesetting}
+% The interface exposes the \mdef{markdownBegin}, \mdef{markdownEnd}, and
+% \mdef{markdownInput} macros.
+%
+% The \m{markdownBegin} macro marks the beginning of a markdown document
+% fragment and the \m{markdownEnd} macro marks its end.
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\markdownBegin\relax
+\let\markdownEnd\relax
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% You may prepend your own code to the \m{markdownBegin} macro and redefine the
+% \m{markdownEnd} macro to produce special effects before and after the
+% markdown block.
+%
+% There are several limitations to the macros you need to be aware of.
+% The first limitation concerns the \m{markdownEnd} macro, which must be
+% visible directly from the input line buffer (it may not be produced as a
+% result of input expansion). Otherwise, it will not be recognized as the end
+% of the markdown string. As a corrolary, the \m{markdownEnd} string
+% may not appear anywhere inside the markdown input.
+%
+% Another limitation concerns spaces at the right end of an input line. In
+% markdown, these are used to produce a forced line break. However, any such
+% spaces are removed before the lines enter the input buffer of
+% \TeX{}~[@knuth86, p. 46]. As a corrolary, the \m{markdownBegin} macro also
+% ignores them.
+%
+% The \m{markdownBegin} and \m{markdownEnd} macros will also consume the rest
+% of the lines at which they appear. In the following example plain \TeX{}
+% code, the characters `c`, `e`, and `f` will not appear in the output.
+%
+% ``` tex
+% \input markdown
+% a
+% b \markdownBegin c
+% d
+% e \markdownEnd f
+% g
+% \bye
+% ```````
+%
+% Note that you may also not nest the \m{markdownBegin} and \m{markdownEnd}
+% macros.
+%
+% The following example plain \TeX{} code showcases the usage of the
+% \m{markdownBegin} and \m{markdownEnd} macros:
+%
+% ``` tex
+% \input markdown
+% \markdownBegin
+% _Hello_ **world** ...
+% \markdownEnd
+% \bye
+% ```````
+%
+% The \m{markdownInput} macro accepts a single parameter containing the
+% filename of a markdown document and expands to the result of the conversion
+% of the input markdown document to plain \TeX{}.
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\markdownInput\relax
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% This macro is not subject to the abovelisted limitations of the
+% \m{markdownBegin} and \m{markdownEnd} macros.
+%
+% The following example plain \TeX{} code showcases the usage of the
+% \m{markdownInput} macro:
+%
+% ``` tex
+% \input markdown
+% \markdownInput{hello.md}
+% \bye
+% ```````
+%
+%### Options
+% \label{sec:texoptions}
+%
+% The plain \TeX{} options are represented by \TeX{} commands. Some of them map
+% directly to the options recognized by the Lua interface (see
+% Section~\ref{sec:luaoptions}), while some of them are specific to the plain
+% \TeX{} interface.
+%
+% \end{markdown}
+% \iffalse
+%</tex>
+%<*manual-options>
+
+### Plain \TeX{}
+
+Plain \TeX{} options control the communication between the \TeX{} interface and
+the `markdown` Lua module. They are supported by all higher-level interfaces of
+the Markdown package, i.e. the plain \TeX{}, \LaTeX{} and \Hologo{ConTeXt}
+interfaces.
+
+% \fi
+% \begin{markdown}
+
+#### File and Directory Names
+
+% \end{markdown}
+% \iffalse
+%</manual-options>
+%<*tex>
+% \fi
+% \begin{markdown}
+%
+% The \mdef{markdownOptionHelperScriptFileName} macro sets the filename of the
+% helper Lua script file that is created during the conversion from markdown to
+% plain \TeX{} in \TeX{} engines without the \m{directlua} primitive. It
+% defaults to \m{jobname}`.markdown.lua`, where \m{jobname} is the base name
+% of the document being typeset.
+%
+% The expansion of this macro must not contain quotation marks (`"`) or
+% backslash symbols (`extbackslash`). Mind that \TeX{} engines tend to
+% put quotation marks around \m{jobname}, when it contains spaces.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionHelperScriptFileName{\jobname.markdown.lua}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownOptionInputTempFileName} macro sets the filename of the
+% temporary input file that is created during the conversion from markdown to
+% plain \TeX{} in \m{markdownMode} other than `2`. It defaults to
+% \m{jobname}`.markdown.out`. The same limitations as in the case of the
+% \m{markdownOptionHelperScriptFileName} macro apply here.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionInputTempFileName{\jobname.markdown.in}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownOptionOutputTempFileName} macro sets the filename of the
+% temporary output file that is created during the conversion from markdown to
+% plain \TeX{} in \m{markdownMode} other than `2`. It defaults to
+% \m{jobname}`.markdown.out`. The same limitations apply here as in the case
+% of the \m{markdownOptionHelperScriptFileName} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionOutputTempFileName{\jobname.markdown.out}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownOptionErrorTempFileName} macro sets the filename of the
+% temporary output file that is created when a Lua error is encountered during
+% the conversion from markdown to plain \TeX{} in \m{markdownMode} other than
+% `2`. It defaults to \m{jobname}`.markdown.err`. The same limitations
+% apply here as in the case of the \m{markdownOptionHelperScriptFileName}
+% macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionErrorTempFileName{\jobname.markdown.err}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownOptionOutputDir} macro sets the path to the directory that
+% will contain the cache files produced by the Lua implementation and also the
+% auxiliary files produced by the plain \TeX{} implementation. The option
+% defaults to `.`.
+%
+% The path must be set to the same value as the `-output-directory` option of
+% your \TeX{} engine for the package to function correctly. We need this macro
+% to make the Lua implementation aware where it should store the helper files.
+% The same limitations apply here as in the case of the
+% \m{markdownOptionHelperScriptFileName} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionOutputDir{.}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownOptionCacheDir} macro corresponds to the Lua interface
+% \Opt{cacheDir} option that sets the path to the directory that will contain
+% the produced cache files. The option defaults to `_markdown_`\m{jobname},
+% which is a similar naming scheme to the one used by the \pkg{minted} \LaTeX{}
+% package. The same limitations apply here as in the case of the
+% \m{markdownOptionHelperScriptFileName} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionCacheDir{\markdownOptionOutputDir/_markdown_\jobname}%
+% \end{macrocode}
+%
+% \iffalse
+%</tex>
+%<*manual-options>
+
+The plain \TeX{} interface provides the following commands that you can use to
+specify the location of temporary files produced during the conversion from
+Markdown to \TeX{}:
+
+- `\markdownOptionHelperScriptFileName`,
+- `\markdownOptionInputTempFileName`,
+- `\markdownOptionOutputTempFileName`,
+- `\markdownOptionErrorTempFileName`,
+- `\markdownOptionOutputDir`, and
+- `\markdownOptionCacheDir`.
+
+Using a text editor, create a folder named `output-directory` and a text
+document named `document.tex` with the following content:
+``` tex
+\input lmfonts
+\input markdown
+\def\markdownOptionHelperScriptFileName{helper-script.lua}
+\def\markdownOptionInputTempFileName{temporary-input.md}
+\def\markdownOptionOutputTempFileName{temporary-output.tex}
+\def\markdownOptionErrorTempFileName{error-output.txt}
+\def\markdownOptionOutputDir{output-directory}
+\def\markdownOptionCacheDir{output-directory/cache-directory}
+\markdownBegin
+Hello *world*!
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex --output-directory output-directory document.tex
+``````
+A text document named `temporary-input.md` should be produced in the folder
+named `output-directory` and contain the following text:
+
+> Hello \*world\*!
+
+A folder named `output-directory/cache-directory` should also be produced and
+contain fragments of the converted markdown document. LuaTeX does not need
+other temporary files to perform the conversion from markdown to \TeX{}. To
+produce the remaining temporary files, invoke pdfTeX from the terminal:
+``` sh
+pdftex --output-directory output-directory --shell-escape document.tex
+``````
+Text documents named `helper-script.lua`, and `temporary-output.md` should be
+produced in the folder named `output-directory`. The document named
+`helper-script.lua` will contain Lua code that was executed to convert markdown
+to plain \TeX{}. The document named `temporary-output.tex` will contain the
+input markdown document converted to \TeX{}.
+
+No document named `error-output.txt` should be produced in the folder named
+`output-directory`. This document would only be produced if an error had occured
+while executing the Lua code. If this happens, please [file a
+bug](https://github.com/witiko/markdown/issues).
+
+%</manual-options>
+%<*tex>
+% \fi
+% \par
+% \begin{markdown}
+%
+%#### Lua Interface Options
+% The following macros map directly to the options recognized by the Lua
+% interface (see Section \ref{sec:luaoptions}) and are not processed by the
+% plain \TeX{} implementation, only passed along to Lua. They are undefined, which
+% makes them fall back to the default values provided by the Lua interface.
+%
+% For the macros that correspond to the non-boolean options recognized by the
+% Lua interface, the same limitations apply here in the case of the
+% \m{markdownOptionHelperScriptFileName} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\markdownOptionBlankBeforeBlockquote\undefined
+\let\markdownOptionBlankBeforeCodeFence\undefined
+\let\markdownOptionBlankBeforeHeading\undefined
+\let\markdownOptionBreakableBlockquotes\undefined
+\let\markdownOptionCitations\undefined
+\let\markdownOptionCitationNbsps\undefined
+\let\markdownOptionContentBlocks\undefined
+\let\markdownOptionContentBlocksLanguageMap\undefined
+\let\markdownOptionDefinitionLists\undefined
+\let\markdownOptionFootnotes\undefined
+\let\markdownOptionFencedCode\undefined
+\let\markdownOptionHashEnumerators\undefined
+\let\markdownOptionHeaderAttributes\undefined
+\let\markdownOptionHtml\undefined
+\let\markdownOptionHybrid\undefined
+\let\markdownOptionInlineFootnotes\undefined
+\let\markdownOptionPipeTables\undefined
+\let\markdownOptionPreserveTabs\undefined
+\let\markdownOptionShiftHeadings\undefined
+\let\markdownOptionSlice\undefined
+\let\markdownOptionSmartEllipses\undefined
+\let\markdownOptionStartNumber\undefined
+\let\markdownOptionTableCaptions\undefined
+\let\markdownOptionTightLists\undefined
+% \end{macrocode}
+% \par
+% \iffalse
+%</tex>
+%<*manual-options>
+
+#### Package Documentation
+
+The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent
+sign (`%`) at the beginning of a line will be discarded when reading Markdown
+input from a \TeX{} document. This enables the use of markdown when writing
+\TeX{} package documentation using the [Doc \LaTeX{} package][doc] by Frank
+Mittelbach.
+
+ [doc]: https://ctan.org/pkg/doc (doc – Format LaTeX documentation)
+
+Using a text editor, create a text document named `document.dtx` with the
+following content:
+
+ ``` tex
+ % \iffalse
+ \documentclass{ltxdoc}
+ \usepackage[stripPercentSigns]{markdown}
+ \begin{document}
+ \DocInput{document.dtx}
+ \end{document}
+ % \fi
+ %
+ % \begin{markdown}
+ % Hello *world*!
+ % \end{markdown}
+ ```````
+
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.dtx
+``````
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!â€
+
+%</manual-options>
+%<*tex>
+% \fi
+% \begin{markdown}
+%
+%#### Miscellaneous Options
+%
+% The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent
+% sign (`%`) at the beginning of a line will be discarded when buffering
+% Markdown input (see Section~\ref{sec:buffering}) or not. Notably, this
+% enables the use of markdown when writing \TeX{} package documentation using
+% the \pkg{Doc} \LaTeX{}~package~[@mittelbach17] or similar. The recognized
+% values of the macro are `true` (discard) and `false` (retain).
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownOptionStripPercentSigns{false}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownIfOption}`{`\meta{name}`}` macro is provided for testing,
+% whether the value of `\markdownOption`\meta{name} is `true` or `false`.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownIfOption#1{%
+ \def\next##1##2##3##4##5{%
+ \expandafter\def\expandafter\next\expandafter{%
+ \csname iffalse\endcsname}%
+ \if##1t\if##2r\if##3u\if##4e
+ \expandafter\def\expandafter\next\expandafter{%
+ \csname iftrue\endcsname}%
+ \fi\fi\fi\fi
+ \next}%
+ \expandafter\expandafter\expandafter\next
+ \csname markdownOption#1\endcsname\relax\relax\relax\relax\relax}
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+
+## Markdown Tokens
+
+A key feature of the Markdown package is the support for manipulating markdown
+tokens, such as headings, emphasized text, links, and lists, in \TeX{}. Instead
+of reducing \TeX{} to a PDF document producer, the Markdown package allows the
+user to specify how every markdown token should be processed and rendered.
+
+% \fi
+% \begin{markdown}
+
+### Token Renderers
+
+% \label{sec:texrenderersuser}
+% \end{markdown}
+% \iffalse
+
+Token renderers are user-defined \TeX{} macros, which render markdown tokens.
+In this section, I will describe the individual token renderers.
+
+% \fi
+% \begin{markdown}
+%
+% The following \TeX{} macros may occur inside the output of the
+% converter functions exposed by the Lua interface (see Section
+% \ref{sec:luaconversion}) and represent the parsed markdown tokens. These
+% macros are intended to be redefined by the user who is typesetting a
+% document. By default, they point to the corresponding prototypes (see Section
+% \ref{sec:texrendererprototypes}).
+
+#### Interblock Separator Renderer
+The \mdef{markdownRendererInterblockSeparator} macro represents a separator
+between two markdown block elements. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererInterblockSeparator{%
+ \par
+ {\it(The end of a block)}%
+ \par
+}
+\markdownBegin
+Hello *world*!
+
+_Foo_ bar!
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(The end of a block)*
+>
+> _Foo_ bar!
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ interblockSeparator = {%
+ \par
+ \emph{(The end of a block)}%
+ \par
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+Hello *world*!
+
+_Foo_ bar!
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(The end of a block)*
+>
+> _Foo_ bar!
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererInterblockSeparator{%
+ \par
+ \emph{(The end of a block)}%
+ \par
+}
+\starttext
+\startmarkdown
+Hello *world*!
+
+_Foo_ bar!
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(The end of a block)*
+>
+> _Foo_ bar!
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererInterblockSeparator{%
+ \markdownRendererInterblockSeparatorPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Line Break Renderer
+The \mdef{markdownRendererLineBreak} macro represents a forced line break.
+The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererLineBreak{%
+ \par
+ {\it(A forced linebreak)}%
+ \par
+}
+\markdownInput{example.md}
+\bye
+```````
+Using a text editor, create a text document named `example.md` with the
+following content. Note the two spaces at the end of the first line, which
+specify a hard linebreak. Due to the limitations of the \TeX{} input
+processor, hard linebreaks would be ignored if we typed them directly into the
+`document.tex` document.
+
+<pre><code>Hello world! <br/>_Foo_ bar!</code></pre>
+
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(A forced linebreak)*
+>
+> _Foo_ bar!
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ lineBreak = {%
+ \par
+ \emph{(A forced linebreak)}%
+ \par
+ },
+ },
+}
+\begin{document}
+\markdownInput{example.md}
+\end{document}
+```````
+Using a text editor, create a text document named `example.md` with the
+following content. Note the two spaces at the end of the first line, which
+specify a hard linebreak. Due to the limitations of the \TeX{} input
+processor, hard linebreaks would be ignored if we typed them directly into the
+`document.tex` document.
+
+<pre><code>Hello world! <br/>_Foo_ bar!</code></pre>
+
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(A forced linebreak)*
+>
+> _Foo_ bar!
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererLineBreak{%
+ \par
+ \emph{(A forced linebreak)}%
+ \par
+}
+\starttext
+\markdownInput{example.md}
+\stoptext
+```````
+Using a text editor, create a text document named `example.md` with the
+following content. Note the two spaces at the end of the first line, which
+specify a hard linebreak. Due to the limitations of the \TeX{} input
+processor, hard linebreaks would be ignored if we typed them directly into the
+`document.tex` document.
+
+<pre><code>Hello world! <br/>_Foo_ bar!</code></pre>
+
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(A forced linebreak)*
+>
+> _Foo_ bar!
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererLineBreak{%
+ \markdownRendererLineBreakPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Ellipsis Renderer
+ The \mdef{markdownRendererEllipsis} macro replaces any occurance of ASCII
+ ellipses in the input text. This macro will only be produced, when the
+ \Opt{smartEllipses} option is `true`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionSmartEllipses{true}
+\def\markdownRendererEllipsis{{\it SHAZAM}!}
+\markdownBegin
+The secret word is ...
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The secret word is *SHAZAM*!
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[smartEllipses]{markdown}
+\markdownSetup{
+ renderers = {
+ ellipsis = \emph{SHAZAM}!,
+ },
+}
+\begin{document}
+\begin{markdown}
+The secret word is ...
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The secret word is *SHAZAM*!
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionSmartEllipses{true}
+\def\markdownRendererEllipsis{\emph{SHAZAM}!}
+\starttext
+\startmarkdown
+The secret word is ...
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Hello *world*!
+>
+> *(The end of a block)*
+>
+> _Foo_ bar!
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererEllipsis{%
+ \markdownRendererEllipsisPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Non-Breaking Space Renderer
+The \mdef{markdownRendererNbsp} macro represents a non-breaking space.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.bib` with the
+following content:
+``` bib
+@book{knuth:tex,
+ author = "Knuth, Donald Ervin",
+ title = "The \TeX book, volume A of Computers and typesetting",
+ publisher = "Addison-Wesley",
+ year = "1984"
+}
+```````
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[
+ citations,
+ citationNbsps,
+]{markdown}
+\markdownSetup{
+ renderers = {
+ nbsp = {$\cdot$},
+ },
+}
+\begin{document}
+
+\begin{markdown}
+The TeXbook [@knuth:tex, p. 123 and 130] is good.
+\end{markdown}
+
+\bibliographystyle{plain}
+\bibliography{document.bib}
+
+\end{document}
+```````
+Next, invoke LuaTeX and BibTeX from the terminal:
+``` sh
+lualatex document.tex
+bibtex document.aux
+lualatex document.tex
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> The TeXbook [1, p.·123·and·130] is good.
+>
+> ### References
+> [1] Donald Ervin Knuth. _The TeXbook, volume A of Computers and typesetting._
+> Addison-Wesley, 1984.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererNbsp{%
+ \markdownRendererNbspPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Special Character Renderers
+The following macros replace any special plain \TeX{} characters, including
+% \iffalse
+the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text:
+
+- \mdef{markdownRendererAmpersand} replaces the ampersand (`&`).
+- \mdef{markdownRendererBackslash} replaces the backslash (`\`).
+- \mdef{markdownRendererCircumflex} replaces the circumflex (`^`).
+- \mdef{markdownRendererDollarSign} replaces the dollar sign (`$`).
+- \mdef{markdownRendererHash} replaces the hash sign (`#`).
+- \mdef{markdownRendererLeftBrace} replaces the left brace (`{`).
+- \mdef{markdownRendererPercentSign} replaces the percent sign (`%`).
+- \mdef{markdownRendererPipe} replaces the pipe character (`|`).
+- \mdef{markdownRendererRightBrace} replaces the right brace (`}`).
+- \mdef{markdownRendererTilde} replaces the tilde (`~`).
+- \mdef{markdownRendererUnderscore} replaces the underscore (`_`).
+
+% \fi
+% the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text.
+% These macros will only be produced, when the \Opt{hybrid} option is
+% `false`.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content. We will make the tilde behave as if it were written in
+\TeX{}, where it represents a non-breaking space.
+``` tex
+\input markdown
+\def\markdownRendererTilde{~}
+\markdownBegin
+Bartel~Leendert van~der~Waerden
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text, where the middot (`·`) denotes a non-breakable space:
+
+> Bartel·Leendert van·der·Waerden
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content. We will make the tilde behave as if it were written in
+\TeX{}, where it represents a non-breaking space.
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ tilde = ~,
+ },
+}
+\begin{document}
+\begin{markdown}
+Bartel~Leendert van~der~Waerden
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text, where the middot (`·`) denotes a non-breakable space:
+
+> Bartel·Leendert van·der·Waerden
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content. We will make the tilde behave as if it were written in
+\TeX{}, where it represents a non-breaking space.
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererTilde{~}
+\starttext
+\startmarkdown
+Bartel~Leendert van~der~Waerden
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text, where the middot (`·`) denotes a non-breakable space:
+
+> Bartel·Leendert van·der·Waerden
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererLeftBrace{%
+ \markdownRendererLeftBracePrototype}%
+\def\markdownRendererRightBrace{%
+ \markdownRendererRightBracePrototype}%
+\def\markdownRendererDollarSign{%
+ \markdownRendererDollarSignPrototype}%
+\def\markdownRendererPercentSign{%
+ \markdownRendererPercentSignPrototype}%
+\def\markdownRendererAmpersand{%
+ \markdownRendererAmpersandPrototype}%
+\def\markdownRendererUnderscore{%
+ \markdownRendererUnderscorePrototype}%
+\def\markdownRendererHash{%
+ \markdownRendererHashPrototype}%
+\def\markdownRendererCircumflex{%
+ \markdownRendererCircumflexPrototype}%
+\def\markdownRendererBackslash{%
+ \markdownRendererBackslashPrototype}%
+\def\markdownRendererTilde{%
+ \markdownRendererTildePrototype}%
+\def\markdownRendererPipe{%
+ \markdownRendererPipePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Code Span Renderer
+The \mdef{markdownRendererCodeSpan} macro represents inlined code span in the
+input text. It receives a single argument that corresponds to the inlined
+code span.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input lmfonts
+
+\def\markdownRendererCodeSpan#1{#1}
+
+\markdownBegin
+`$\sqrt{-1}$ *equals* $i$`
+
+$\sqrt{-1}$ *equals* $i$
+\markdownEnd
+
+\def\markdownOptionHybrid{true}
+\markdownBegin
+$\sqrt{-1}$ *equals* $i$
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ \*equals\* \$i\$.
+>
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[smartEllipses]{markdown}
+\markdownSetup{
+ renderers = {
+ codeSpan = {#1},
+ },
+}
+\begin{document}
+
+\begin{markdown}
+`$\sqrt{-1}$ *equals* $i$`
+
+$\sqrt{-1}$ *equals* $i$
+\end{markdown}
+
+\begin{markdown*}{hybrid}
+$\sqrt{-1}$ *equals* $i$
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ \*equals\* \$i\$.
+>
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererCodeSpan#1{#1}
+\starttext
+
+\startmarkdown
+`$\sqrt{-1}$ *equals* $i$`
+
+$\sqrt{-1}$ *equals* $i$
+\stopmarkdown
+
+\def\markdownOptionHybrid{true}
+\startmarkdown
+$\sqrt{-1}$ *equals* $i$
+\stopmarkdown
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ \*equals\* \$i\$.
+>
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererCodeSpan{%
+ \markdownRendererCodeSpanPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Link Renderer
+The \mdef{markdownRendererLink} macro represents a hyperlink. It receives
+four arguments: the label, the fully escaped \acro{uri} that can be directly
+typeset, the raw \acro{uri} that can be used outside typesetting, and the
+title of the link.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererLink#1#2#3#4{%
+ #1 {\tt#2} titled {\it#4}%
+}
+\markdownBegin
+Please visit [the link][ctan].
+
+ [ctan]: https://ctan.org/
+ (the Comprehensive TeX Archive Network)
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Please visit the link <https://ctan.org/> titled *the Comprehensive TeX
+> Archive Network*.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ link = {%
+ #1 \texttt{#2} titled \emph{#4}%
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+Please visit [the link][ctan].
+
+ [ctan]: https://ctan.org/
+ (the Comprehensive TeX Archive Network)
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Please visit the link <https://ctan.org/> titled *the Comprehensive TeX
+> Archive Network*.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererLink#1#2#3#4{%
+ #1 {\tt#2} titled \emph{#4}%
+}
+\starttext
+\startmarkdown
+Please visit [the link][ctan].
+
+ [ctan]: https://ctan.org/
+ (the Comprehensive TeX Archive Network)
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Please visit the link <https://ctan.org/> titled *the Comprehensive TeX
+> Archive Network*.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererLink{%
+ \markdownRendererLinkPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Image Renderer
+The \mdef{markdownRendererImage} macro represents an image. It receives
+four arguments: the label, the fully escaped \acro{uri} that can be directly
+typeset, the raw \acro{uri} that can be used outside typesetting, and the
+title of the link.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begingroup
+\catcode`\@=11
+\catcode`\%=12
+\catcode`\^^A=14
+\global\def\markdownRendererImage#1#2#3#4{^^A
+ \immediate\write18{^^A
+ if printf '%s' "#3" | grep -q ^http; then
+ OUTPUT="$(printf '%s' "#3" | md5sum | cut -d' ' -f1).^^A
+ $(printf '%s' "#3" | sed 's/.*[.]//')";
+ if ! [ -e "$OUTPUT" ]; then
+ wget -O "$OUTPUT" '#3' || rm "$OUTPUT";
+ convert "$OUTPUT" png:"$OUTPUT";
+ fi;
+ printf '%s%%' "$OUTPUT" > \jobname.fetched;
+ else
+ printf '%s%%' "#3" > \jobname.fetched;
+ fi^^A
+ }^^A
+ {^^A
+ \everyeof={\noexpand}^^A
+ \edef\filename{\@@input"\jobname.fetched" }^^A
+ \includegraphics[width=\textwidth]{\filename}^^A
+ }^^A
+}
+\endgroup
+\begin{document}
+\begin{markdown}
+![TUGboat](https://tug.org/tugboat/noword.jpg)
+\end{markdown}
+\end{document}
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex --shell-escape document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following content. This assumes that you use a Unix-like operating system with
+Bourne or Bourne again shell as the default shell of the current user. It also
+assumes that the `md5sum`, `wget`, and `convert` binaries are installed and
+that the \TeX{} engine has shell access.
+
+> ![](https://tug.org/tugboat/noword.jpg "The Communications of the TeX Users Group")
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererImage{%
+ \markdownRendererImagePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Content Block Renderers
+\label{sec:texcontentblockrenderers}
+The \mdef{markdownRendererContentBlock} macro represents an iA\,Writer content
+block. It receives four arguments: the local file or online image filename
+extension cast to the lower case, the fully escaped \acro{uri} that can be
+directly typeset, the raw \acro{uri} that can be used outside typesetting,
+and the title of the content block.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererContentBlock{%
+ \markdownRendererContentBlockPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererContentBlockOnlineImage} macro represents an
+iA\,Writer online image content block. The macro receives the same arguments
+as \m{markdownRendererContentBlock}.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererContentBlockOnlineImage{%
+ \markdownRendererContentBlockOnlineImagePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererContentBlockCode} macro represents an iA\,Writer
+content block that was recognized as a file in a known programming language
+by its filename extension $s$. If any `markdown-languages.json` file found
+by \pkg{kpathsea}\footnote{Local files take precedence. Filenames other
+than `markdown-languages.json` may be specified using the
+`contentBlocksLanguageMap` Lua option.} contains a record $(k, v)$, then a
+non-online-image content block with the filename extension $s,
+s$`:lower()`${}=k$ is considered to be in a known programming language $v$.
+The macro receives five arguments: the local file name extension $s$ cast to
+the lower case, the language $v$, the fully escaped \acro{uri} that can be
+directly typeset, the raw \acro{uri} that can be used outside typesetting,
+and the title of the content block.
+
+Note that you will need to place place a `markdown-languages.json` file
+inside your working directory or inside your local \TeX{} directory
+structure. In this file, you will define a mapping between filename
+extensions and the language names recognized by your favorite syntax
+highlighter; there may exist other creative uses beside syntax highlighting.
+% The `Languages.json` file provided by @sotkov17 is a good starting point.
+% \end{markdown}
+%
+% \iffalse
+[The `Languages.json` file provided by Anton Sotkov][sotkov17] is a good
+starting point.
+
+ [sotkov17]: https://github.com/iainc/Markdown-Content-Blocks
+ (File transclusion syntax for Markdown)
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionContentBlocks{true}
+\def\markdownRendererContentBlock#1#2#3#4{%
+ This is {\tt #2}, #4.
+}
+\def\markdownRendererContentBlockOnlineImage#1#2#3#4{%
+ This is the image {\tt #2}, #4.
+}
+\def\markdownRendererContentBlockCode#1#2#3#4#5{%
+ This is the #2 (\uppercase{#1}) document {\tt #3}, #5.
+}
+\markdownBegin
+/document.tex (the document that we are currently typesetting)
+/markdown-languages.json (the mapping between filename extensions
+ and programming language names)
+https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)
+\markdownEnd
+\bye
+```````
+Create also a text document named `markdown-languages.json` with the following
+content:
+``` js
+{
+ "json": "JavaScript Object Notation",
+}
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is `document.tex`, the document that we are currently typesetting.
+>
+> This is the JavaScript Object Notation (JSON) document
+> `markdown-languages.json`, the mapping between filename extensions and
+> programming language names.
+>
+> This is the image `https://tug.org/tugboat/noword.jpg`, the logotype of
+> TUGboat.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{filecontents}
+\begin{filecontents*}{markdown-languages.json}
+{
+ "json": "JavaScript Object Notation",
+}
+\end{filecontents*}
+\usepackage[contentBlocks]{markdown}
+\markdownSetup{
+ renderers = {
+ contentBlock = {This is \texttt{#2}, #4.},
+ contentBlockOnlineImage = {This is the image \texttt{#2}, #4.},
+ contentBlockCode = {%
+ This is the #2 (\MakeUppercase{#1}) document \texttt{#3}, #5.
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+/document.tex (the document that we are currently typesetting)
+/markdown-languages.json (the mapping between filename extensions
+ and programming language names)
+https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is `document.tex`, the document that we are currently typesetting.
+>
+> This is the JavaScript Object Notation (JSON) document
+> `markdown-languages.json`, the mapping between filename extensions and
+> programming language names.
+>
+> This is the image `https://tug.org/tugboat/noword.jpg`, the logotype of
+> TUGboat.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionContentBlocks{true}
+\def\markdownRendererContentBlock#1#2#3#4{%
+ This is {\tt #2}, #4.
+}
+\def\markdownRendererContentBlockOnlineImage#1#2#3#4{%
+ This is the image {\tt #2}, #4.
+}
+\def\markdownRendererContentBlockCode#1#2#3#4#5{%
+ This is the #2 (\uppercase{#1}) document {\tt #3}, #5.
+}
+\starttext
+\startmarkdown
+/document.tex (the document that we are currently typesetting)
+/markdown-languages.json (the mapping between filename extensions
+ and programming language names)
+https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)
+\stopmarkdown
+\stoptext
+```````
+Create also a text document named `markdown-languages.json` with the following
+content:
+``` js
+{
+ "json": "JavaScript Object Notation",
+}
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is `document.tex`, the document that we are currently typesetting.
+>
+> This is the JavaScript Object Notation (JSON) document
+> `markdown-languages.json`, the mapping between filename extensions and
+> programming language names.
+>
+> This is the image `https://tug.org/tugboat/noword.jpg`, the logotype of
+> TUGboat.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererContentBlockCode{%
+ \markdownRendererContentBlockCodePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Bullet List Renderers
+The \mdef{markdownRendererUlBegin} macro represents the beginning of a
+bulleted list that contains an item with several paragraphs of text (the
+list is not tight). The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererUlBegin{%
+ \markdownRendererUlBeginPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererUlBeginTight} macro represents the beginning of a
+bulleted list that contains no item with several paragraphs of text (the list
+is tight). This macro will only be produced, when the \Opt{tightLists} option
+is `false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererUlBeginTight{%
+ \markdownRendererUlBeginTightPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererUlItem} macro represents an item in a bulleted
+list. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererUlItem{%
+ \markdownRendererUlItemPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererUlItemEnd} macro represents the end of an item in a
+bulleted list. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererUlItemEnd{%
+ \markdownRendererUlItemEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererUlEnd} macro represents the end of a bulleted list
+that contains an item with several paragraphs of text (the list is not
+tight). The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererUlEnd{%
+ \markdownRendererUlEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererUlEndTight} macro represents the end of a bulleted
+list that contains no item with several paragraphs of text (the list is
+tight). This macro will only be produced, when the \Opt{tightLists} option is
+`false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionTightLists{true}
+
+\def\markdownRendererInterblockSeparator{}
+\def\markdownRendererUlBeginTight{ (}
+\def\markdownRendererUlItem{%
+ \def\markdownRendererUlItem{%
+ ,
+ \def\markdownRendererUlItem{, and }%
+ }%
+}
+\def\markdownRendererUlItemEnd{}
+\def\markdownRendererUlEndTight{).}
+
+\markdownBegin
+This is a tight list
+
+- the first item
+- the second item
+- the third item
+\markdownEnd
+
+\def\markdownRendererInterblockSeparator{%
+ :\par
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererUlBegin{}
+\def\markdownRendererUlItem{--\kern 0.5em}
+\def\markdownRendererUlItemEnd{.\par}
+\def\markdownRendererUlEnd{}
+
+\markdownBegin
+This is a loose list
+
+- This is the first item
+
+- This is the second item
+
+- This is the third item
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight list (the first item, the second item, and the third item).
+>
+> This is a loose list:
+>
+> - This is the first item.
+>
+> - This is the second item.
+>
+> - This is the third item.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[tightLists]{markdown}
+\begin{document}
+
+\begin{markdown*}{
+ renderers = {
+ interblockSeparator = {},
+ ulBeginTight = { (},
+ ulItem = {%
+ \def\markdownRendererUlItem{%
+ ,
+ \def\markdownRendererUlItem{, and }%
+ }%
+ },
+ ulItemEnd = {},
+ ulEndTight = {).},
+ },
+}
+This is a tight list
+
+- the first item
+- the second item
+- the third item
+\end{markdown*}
+
+\begin{markdown*}{
+ renderers = {
+ interblockSeparator = {%
+ :\par
+ \def\markdownRendererInterblockSeparator{\par}%
+ },
+ ulBeginTight = {\begin{itemize}},
+ ulItem = {\item},
+ ulItemEnd = {.},
+ ulEnd = {\end{itemize}},
+ },
+}
+This is a loose list
+
+- This is the first item
+
+- This is the second item
+
+- This is the third item
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight list (the first item, the second item, and the third item).
+>
+> This is a loose list:
+>
+> - This is the first item.
+>
+> - This is the second item.
+>
+> - This is the third item.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionTightLists{true}
+\starttext
+
+\def\markdownRendererInterblockSeparator{}
+\def\markdownRendererUlBeginTight{ (}
+\def\markdownRendererUlItem{%
+ \def\markdownRendererUlItem{%
+ ,
+ \def\markdownRendererUlItem{, and }%
+ }%
+}
+\def\markdownRendererUlItemEnd{}
+\def\markdownRendererUlEndTight{).}
+
+\startmarkdown
+This is a tight list
+
+- the first item
+- the second item
+- the third item
+\stopmarkdown
+
+\def\markdownRendererInterblockSeparator{%
+ :\par
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererUlBegin{\startitemize}
+\def\markdownRendererUlItem{\item}
+\def\markdownRendererUlItemEnd{.}
+\def\markdownRendererUlEnd{\stopitemize}
+
+\startmarkdown
+This is a loose list
+
+- This is the first item
+
+- This is the second item
+
+- This is the third item
+\stopmarkdown
+
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight list (the first item, the second item, and the third item).
+>
+> This is a loose list:
+>
+> - This is the first item.
+>
+> - This is the second item.
+>
+> - This is the third item.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererUlEndTight{%
+ \markdownRendererUlEndTightPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Ordered List Renderers
+The \mdef{markdownRendererOlBegin} macro represents the beginning of an
+ordered list that contains an item with several paragraphs of text (the
+list is not tight). The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlBegin{%
+ \markdownRendererOlBeginPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererOlBeginTight} macro represents the beginning of an
+ordered list that contains no item with several paragraphs of text (the
+list is tight). This macro will only be produced, when the \Opt{tightLists}
+option is `false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlBeginTight{%
+ \markdownRendererOlBeginTightPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererOlItem} macro represents an item in an ordered list.
+This macro will only be produced, when the \Opt{startNumber} option is
+`false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlItem{%
+ \markdownRendererOlItemPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererOlItemEnd} macro represents the end of an item in
+an ordered list. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlItemEnd{%
+ \markdownRendererOlItemEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererOlItemWithNumber} macro represents an item in an
+ordered list. This macro will only be produced, when the \Opt{startNumber}
+option is `true`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlItemWithNumber{%
+ \markdownRendererOlItemWithNumberPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererOlEnd} macro represents the end of an ordered list
+that contains an item with several paragraphs of text (the list is not
+tight). The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlEnd{%
+ \markdownRendererOlEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererOlEndTight} macro represents the end of an ordered
+list that contains no item with several paragraphs of text (the list is
+tight). This macro will only be produced, when the \Opt{tightLists} option is
+`false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionTightLists{true}
+\def\markdownOptionStartNumber{true}
+
+\def\markdownRendererInterblockSeparator{}
+\def\markdownRendererOlBeginTight{ (}
+\def\markdownRendererOlItemWithNumber#1{%
+ \ifnum #1=1\relax
+ the first
+ \else
+ \ifnum #1=2\relax
+ , the second
+ \else
+ , and the third
+ \fi
+ \fi
+}
+\def\markdownRendererOlItemEnd{}
+\def\markdownRendererOlEndTight{).}
+
+\markdownBegin
+This is a tight list
+
+1. item
+2. item
+3. item
+\markdownEnd
+
+\def\markdownRendererInterblockSeparator{%
+ :\par
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererOlBegin{}
+\def\markdownRendererOlItemWithNumber#1{%
+ #1.\kern 0.5em%
+ This is the
+ \ifnum #1=1\relax
+ first
+ \else
+ \ifnum #1=2\relax
+ second
+ \else
+ third
+ \fi
+ \fi
+}
+\def\markdownRendererOlItemEnd{.\par}
+\def\markdownRendererOlEnd{}
+
+\markdownBegin
+This is a loose list
+
+1. item
+
+2. item
+
+3. item
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight list (the first item, the second item, and the third item).
+>
+> This is a loose list:
+>
+> 1. This is the first item.
+>
+> 2. This is the second item.
+>
+> 3. This is the third item.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[tightLists, startNumber]{markdown}
+\begin{document}
+
+\begin{markdown*}{
+ renderers = {
+ interblockSeparator = {},
+ olBeginTight = { (},
+ olItemWithNumber = {%
+ \ifnum #1=1\relax
+ the first
+ \else
+ \ifnum #1=2\relax
+ , the second
+ \else
+ , and the third
+ \fi
+ \fi
+ },
+ olItemEnd = {},
+ olEndTight = {).},
+ },
+}
+This is a tight list
+
+1. item
+2. item
+3. item
+\end{markdown*}
+
+\begin{markdown*}{
+ renderers = {
+ interblockSeparator = {%
+ :\par
+ \def\markdownRendererInterblockSeparator{\par}%
+ },
+ olBeginTight = {\begin{enumerate}},
+ olItemWithNumber = {%
+ \item This is the
+ \ifnum #1=1\relax
+ first
+ \else
+ \ifnum #1=2\relax
+ second
+ \else
+ third
+ \fi
+ \fi
+ },
+ olItemEnd = {.},
+ olEnd = {\end{enumerate}},
+ },
+}
+This is a loose list
+
+1. item
+
+2. item
+
+3. item
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight list (the first item, the second item, and the third item).
+>
+> This is a loose list:
+>
+> 1. This is the first item.
+>
+> 2. This is the second item.
+>
+> 3. This is the third item.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionTightLists{true}
+\def\markdownOptionStartNumber{true}
+\starttext
+
+\def\markdownRendererInterblockSeparator{}
+\def\markdownRendererOlBeginTight{ (}
+\def\markdownRendererOlItemWithNumber#1{%
+ \ifnum #1=1\relax
+ the first
+ \else
+ \ifnum #1=2\relax
+ , the second
+ \else
+ , and the third
+ \fi
+ \fi
+}
+\def\markdownRendererOlItemEnd{}
+\def\markdownRendererOlEndTight{).}
+
+\startmarkdown
+This is a tight list
+
+1. item
+2. item
+3. item
+\stopmarkdown
+
+\def\markdownRendererInterblockSeparator{%
+ :\par
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererOlBegin{\startitemize}
+\def\markdownRendererOlItemWithNumber#1{%
+ \sym{#1.}
+ This is the
+ \ifnum #1=1\relax
+ first
+ \else
+ \ifnum #1=2\relax
+ second
+ \else
+ third
+ \fi
+ \fi
+}
+\def\markdownRendererOlItemEnd{.\par}
+\def\markdownRendererOlEnd{\stopitemize}
+
+\startmarkdown
+This is a loose list
+
+1. item
+
+2. item
+
+3. item
+\stopmarkdown
+
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight list (the first item, the second item, and the third item).
+>
+> This is a loose list:
+>
+> 1. This is the first item.
+>
+> 2. This is the second item.
+>
+> 3. This is the third item.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererOlEndTight{%
+ \markdownRendererOlEndTightPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Definition List Renderers
+The following macros are only produced, when the \Opt{definitionLists} option
+is `true`.
+
+The \mdef{markdownRendererDlBegin} macro represents the beginning of a
+definition list that contains an item with several paragraphs of text (the
+list is not tight). The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlBegin{%
+ \markdownRendererDlBeginPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlBeginTight} macro represents the beginning of a
+definition list that contains an item with several paragraphs of text (the
+list is not tight). This macro will only be produced, when the
+\Opt{tightLists} option is `false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlBeginTight{%
+ \markdownRendererDlBeginTightPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlItem} macro represents a term in a definition
+list. The macro receives a single argument that corresponds to the term
+being defined.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlItem{%
+ \markdownRendererDlItemPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlItemEnd} macro represents the end of a list of
+definitions for a single term.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlItemEnd{%
+ \markdownRendererDlItemEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlDefinitionBegin} macro represents the beginning
+of a definition in a definition list. There can be several definitions for
+a single term.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlDefinitionBegin{%
+ \markdownRendererDlDefinitionBeginPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlDefinitionEnd} macro represents the end of a
+definition in a definition list. There can be several definitions for a
+single term.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlDefinitionEnd{%
+ \markdownRendererDlDefinitionEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlEnd} macro represents the end of a definition
+list that contains an item with several paragraphs of text (the list is not
+tight). The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlEnd{%
+ \markdownRendererDlEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererDlEndTight} macro represents the end of a
+definition list that contains no item with several paragraphs of text (the
+list is tight). This macro will only be produced, when the \Opt{tightLists}
+option is `false`. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionTightLists{true}
+
+\def\markdownRendererInterblockSeparator{%
+ :%
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererDlBeginTight{%
+ \begingroup
+ \parindent=0pt
+}
+\def\markdownRendererDlItem#1{%
+ \par{\bf#1}%
+ \def\markdownRendererDlDefinitionEnd{%
+ ,
+ \def\markdownRendererDlDefinitionEnd{%
+ , and
+ \def\markdownRendererDlDefinitionEnd{.}%
+ }%
+ }%
+}
+\def\markdownRendererDlItemEnd{}
+\def\markdownRendererDlDefinitionBegin{\par--\kern 0.5em}
+\def\markdownRendererDlEndTight{\endgroup}
+
+\markdownBegin
+This is a tight definition list
+
+Coffee
+: black hot drink
+: prepared from roasted coffee beans
+: one of the most traded agricultural commodities in the world
+
+Milk
+: white cold drink
+: nutrient-rich
+: produced on an industrial scale
+\markdownEnd
+
+\def\markdownRendererInterblockSeparator{%
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererDlBegin{}
+\def\markdownRendererDlItem#1{%
+ . #1 is a
+ \def\markdownRendererDlDefinitionBegin{%
+ \def\markdownRendererDlDefinitionBegin{%
+ ,
+ \def\markdownRendererDlDefinitionBegin{, and }%
+ }%
+ }%
+}
+\def\markdownRendererDlItemEnd{}
+\def\markdownRendererDlDefinitionEnd{}
+\def\markdownRendererDlEnd{.}
+
+\markdownBegin
+This is a loose definition list
+
+Coffee
+
+: black hot drink
+
+: prepared from roasted coffee beans
+
+: one of the most traded agricultural commodities in the world
+
+Milk
+
+: white cold drink
+
+: nutrient-rich
+
+: produced on an industrial scale
+\markdownEnd
+
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight definition list:
+>
+> **Coffee**
+>
+> - black hot drink,
+> - prepared from roasted coffee beans, and
+> - one of the most traded agricultural commodities in the world.
+>
+> **Milk**
+>
+> - white cold drink,
+> - nutrient-rich, and
+> - produced on an industrial scale.
+>
+> This is a loose definition list. Coffee is a black hot drink, prepared from
+> roasted coffee beans, and one of the most traded agricultural commodities in
+> the world. Milk is a white cold drink, nutrient-rich, and produced on an
+> industrial scale.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[definitionLists, tightLists]{markdown}
+\begin{document}
+
+\begin{markdown*}{
+ renderers = {
+ interblockSeparator = {%
+ :%
+ \def\markdownRendererInterblockSeparator{\par}%
+ },
+ dlBeginTight = {\begin{description}},
+ dlItem = {%
+ \item[#1]
+ \begin{itemize}
+ \def\markdownRendererDlDefinitionEnd{%
+ ,
+ \def\markdownRendererDlDefinitionEnd{%
+ , and
+ \def\markdownRendererDlDefinitionEnd{.}%
+ }%
+ }%
+ },
+ dlItemEnd = {\end{itemize}},
+ dlDefinitionBegin = \item,
+ dlEndTight = {\end{description}},
+ },
+}
+This is a tight definition list
+
+Coffee
+: black hot drink
+: prepared from roasted coffee beans
+: one of the most traded agricultural commodities in the world
+
+Milk
+: white cold drink
+: nutrient-rich
+: produced on an industrial scale
+\end{markdown*}
+
+\begin{markdown*}{
+ renderers = {
+ interblockSeparator = {%
+ \def\markdownRendererInterblockSeparator{\par}%
+ },
+ dlBegin = {},
+ dlItem = {%
+ . #1 is a
+ \def\markdownRendererDlDefinitionBegin{%
+ \def\markdownRendererDlDefinitionBegin{%
+ ,
+ \def\markdownRendererDlDefinitionBegin{, and }%
+ }%
+ }%
+ },
+ dlItemEnd = {},
+ dlDefinitionEnd = {},
+ dlEnd = {.},
+ },
+}
+This is a loose definition list
+
+Coffee
+
+: black hot drink
+
+: prepared from roasted coffee beans
+
+: one of the most traded agricultural commodities in the world
+
+Milk
+
+: white cold drink
+
+: nutrient-rich
+
+: produced on an industrial scale
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight definition list:
+>
+> **Coffee**
+>
+> - black hot drink,
+> - prepared from roasted coffee beans, and
+> - one of the most traded agricultural commodities in the world.
+>
+> **Milk**
+>
+> - white cold drink,
+> - nutrient-rich, and
+> - produced on an industrial scale.
+>
+> This is a loose definition list. Coffee is a black hot drink, prepared from
+> roasted coffee beans, and one of the most traded agricultural commodities in
+> the world. Milk is a white cold drink, nutrient-rich, and produced on an
+> industrial scale.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionTightLists{true}
+\starttext
+
+\def\markdownRendererInterblockSeparator{%
+ :%
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererDlBeginTight{}
+\def\markdownRendererDlItem#1{%
+ \par{\bf#1}%
+ \startitemize
+ \def\markdownRendererDlDefinitionEnd{%
+ ,
+ \def\markdownRendererDlDefinitionEnd{%
+ , and
+ \def\markdownRendererDlDefinitionEnd{.}%
+ }%
+ }%
+}
+\def\markdownRendererDlItemEnd{\stopitemize}
+\def\markdownRendererDlDefinitionBegin{\item}
+\def\markdownRendererDlEndTight{}
+
+\startmarkdown
+This is a tight definition list
+
+Coffee
+: black hot drink
+: prepared from roasted coffee beans
+: one of the most traded agricultural commodities in the world
+
+Milk
+: white cold drink
+: nutrient-rich
+: produced on an industrial scale
+\stopmarkdown
+
+\def\markdownRendererInterblockSeparator{%
+ \def\markdownRendererInterblockSeparator{\par}%
+}
+\def\markdownRendererDlBegin{}
+\def\markdownRendererDlItem#1{%
+ . #1 is a
+ \def\markdownRendererDlDefinitionBegin{%
+ \def\markdownRendererDlDefinitionBegin{%
+ ,
+ \def\markdownRendererDlDefinitionBegin{, and }%
+ }%
+ }%
+}
+\def\markdownRendererDlItemEnd{}
+\def\markdownRendererDlDefinitionEnd{}
+\def\markdownRendererDlEnd{.}
+
+\startmarkdown
+This is a loose definition list
+
+Coffee
+
+: black hot drink
+
+: prepared from roasted coffee beans
+
+: one of the most traded agricultural commodities in the world
+
+Milk
+
+: white cold drink
+
+: nutrient-rich
+
+: produced on an industrial scale
+\stopmarkdown
+
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a tight definition list:
+>
+> **Coffee**
+>
+> - black hot drink,
+> - prepared from roasted coffee beans, and
+> - one of the most traded agricultural commodities in the world.
+>
+> **Milk**
+>
+> - white cold drink,
+> - nutrient-rich, and
+> - produced on an industrial scale.
+>
+> This is a loose definition list. Coffee is a black hot drink, prepared from
+> roasted coffee beans, and one of the most traded agricultural commodities in
+> the world. Milk is a white cold drink, nutrient-rich, and produced on an
+> industrial scale.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererDlEndTight{%
+ \markdownRendererDlEndTightPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Emphasis Renderers
+The \mdef{markdownRendererEmphasis} macro represents an emphasized span of
+text. The macro receives a single argument that corresponds to the emphasized
+span of text.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererEmphasis#1{{\it#1}}
+\def\markdownRendererStrongEmphasis#1{{\bf#1}}
+\markdownBegin
+This is *emphasis*.
+
+This is **strong emphasis**.
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is *emphasis*.
+>
+> This is **strong emphasis**.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ emphasis = {\emph{#1}},
+ strongEmphasis = {\textbf{#1}},
+ },
+}
+\begin{document}
+\begin{markdown}
+This is *emphasis*.
+
+This is **strong emphasis**.
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is *emphasis*.
+>
+> This is **strong emphasis**.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererEmphasis#1{\emph{#1}}
+\def\markdownRendererStrongEmphasis#1{\bold{#1}}
+\starttext
+\startmarkdown
+This is *emphasis*.
+
+This is **strong emphasis**.
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is *emphasis*.
+>
+> This is **strong emphasis**.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererEmphasis{%
+ \markdownRendererEmphasisPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererStrongEmphasis} macro represents a strongly
+emphasized span of text. The macro receives a single argument that
+corresponds to the emphasized span of text.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererStrongEmphasis{%
+ \markdownRendererStrongEmphasisPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Block Quote Renderers
+The \mdef{markdownRendererBlockQuoteBegin} macro represents the beginning of
+a block quote. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererBlockQuoteBegin{%
+ \begingroup
+ \vskip\parindent
+ \leftskip=2\parindent
+ \parindent=0pt
+}
+\def\markdownRendererBlockQuoteEnd{%
+ \par
+ \vskip\parindent
+ \endgroup
+}
+\markdownBegin
+A quote from William Shakespeare's King Lear:
+
+> This is the excellent foppery of the world that when we are
+> sick in fortune---often the surfeit of our own behavior---we
+> make guilty of our disasters the sun, the moon, and the
+> stars [...]
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A quote from William Shakespeare's King Lear:
+>
+> > This is the excellent foppery of the world that when we are
+> > sick in fortune—often the surfeit of our own behavior—we
+> > make guilty of our disasters the sun, the moon, and the
+> > stars [...]
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ blockQuoteBegin = {\begin{quote}},
+ blockQuoteEnd = {\end{quote}},
+ },
+}
+\begin{document}
+\begin{markdown}
+A quote from William Shakespeare's King Lear:
+
+> This is the excellent foppery of the world that when we are
+> sick in fortune---often the surfeit of our own behavior---we
+> make guilty of our disasters the sun, the moon, and the
+> stars [...]
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A quote from William Shakespeare's King Lear:
+>
+> > This is the excellent foppery of the world that when we are
+> > sick in fortune—often the surfeit of our own behavior—we
+> > make guilty of our disasters the sun, the moon, and the
+> > stars [...]
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererBlockQuoteBegin{\startquotation}
+\def\markdownRendererBlockQuoteEnd{\stopquotation}
+\starttext
+\startmarkdown
+A quote from William Shakespeare's King Lear:
+
+> This is the excellent foppery of the world that when we are
+> sick in fortune---often the surfeit of our own behavior---we
+> make guilty of our disasters the sun, the moon, and the
+> stars [...]
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> A quote from William Shakespeare's King Lear:
+>
+> > This is the excellent foppery of the world that when we are
+> > sick in fortune—often the surfeit of our own behavior—we
+> > make guilty of our disasters the sun, the moon, and the
+> > stars [...]
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererBlockQuoteBegin{%
+ \markdownRendererBlockQuoteBeginPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererBlockQuoteEnd} macro represents the end of a block
+quote. The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererBlockQuoteEnd{%
+ \markdownRendererBlockQuoteEndPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Code Block Renderers
+The \mdef{markdownRendererInputVerbatim} macro represents a code
+block. The macro receives a single argument that corresponds to the
+filename of a file contaning the code block contents.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererInputVerbatim{%
+ \markdownRendererInputVerbatimPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererInputFencedCode} macro represents a fenced code
+block. This macro will only be produced, when the \Opt{fencedCode} option is
+`true`. The macro receives two arguments that correspond to the filename of
+a file contaning the code block contents and to the code fence infostring.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{verbatim}
+\usepackage[hyphens]{url}
+\usepackage[fencedCode]{markdown}
+\markdownSetup{
+ renderers = {
+ interblockSeparator = {
+ \def\markdownRendererInterblockSeparator{%
+ \par
+ \def\markdownRendererInterblockSeparator{%
+ \def\markdownRendererInterblockSeparator{%
+ \par
+ }%
+ }%
+ }%
+ },
+ inputVerbatim = {
+ is contained in file \url{#1}:%
+ \verbatiminput{#1}%
+ },
+ inputFencedCode = {
+ in #2 \markdownRendererInputVerbatim{#1}%
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+The following code
+
+ def foo(bar):
+ if len(bar) <= 1:
+ return bar[0]
+ elif len(bar) == 2:
+ return sorted(bar)
+ else:
+ baz = len(bar) // 2
+ return foo(bar[baz:], bar[:baz])
+
+The following code
+
+~~~ Python
+>>> foo([4, 2, 1, 3])
+[1, 2, 3, 4]
+~~~~~~~~~~
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text except for the filename, which may differ:
+
+> The following code is contained in file
+> `./_markdown_document/882453149edcf288976647f6fe147ada.verbatim`:
+> ``` py
+> def foo(bar):
+> if len(bar) <= 1:
+> return bar[:1]
+> elif len(bar) == 2:
+> return sorted(bar)
+> else:
+> baz = bar[len(bar) // 2]
+> return (
+> foo([qux for qux in bar if qux < baz]) + [baz] +
+> foo([qux for qux in bar if qux > baz])
+> )
+> ``````
+> The following code in Python contained in file
+> `./_markdown_document/cf2a96e2120cef5b1fae5fea36fcc27b.verbatim`:
+> ``` py
+> >>> foo([4, 2, 1, 3])
+> [1, 2, 3, 4]
+> ``````
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererInputFencedCode{%
+ \markdownRendererInputFencedCodePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Heading Renderers
+The \mdef{markdownRendererHeadingOne} macro represents a first level heading.
+The macro receives a single argument that corresponds to the heading text.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHeadingOne{%
+ \markdownRendererHeadingOnePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererHeadingTwo} macro represents a second level
+heading. The macro receives a single argument that corresponds to the heading
+text.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHeadingTwo{%
+ \markdownRendererHeadingTwoPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererHeadingThree} macro represents a third level
+heading. The macro receives a single argument that corresponds to the heading
+text.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHeadingThree{%
+ \markdownRendererHeadingThreePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererHeadingFour} macro represents a fourth level
+heading. The macro receives a single argument that corresponds to the heading
+text.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHeadingFour{%
+ \markdownRendererHeadingFourPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererHeadingFive} macro represents a fifth level
+heading. The macro receives a single argument that corresponds to the heading
+text.
+
+% \end{markdown}
+%
+% \iffalse
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHeadingFive{%
+ \markdownRendererHeadingFivePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+The \mdef{markdownRendererHeadingSix} macro represents a sixth level
+heading. The macro receives a single argument that corresponds to the heading
+text.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererInterblockSeparator{}
+\def\markdownRendererHeadingOne{1}
+\def\markdownRendererHeadingTwo{2}
+\def\markdownRendererHeadingThree{3}
+\def\markdownRendererHeadingFour{4}
+\def\markdownRendererHeadingFive{5}
+\def\markdownRendererHeadingSix{6}
+\markdownBegin
+######
+#####
+#####
+###
+######
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> 65536
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ interblockSeparator = {},
+ headingOne = 1,
+ headingTwo = 2,
+ headingThree = 3,
+ headingFour = 4,
+ headingFive = 5,
+ headingSix = 6,
+ },
+}
+\begin{document}
+\begin{markdown}
+######
+#####
+#####
+###
+######
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> 65536
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererInterblockSeparator{}
+\def\markdownRendererHeadingOne{1}
+\def\markdownRendererHeadingTwo{2}
+\def\markdownRendererHeadingThree{3}
+\def\markdownRendererHeadingFour{4}
+\def\markdownRendererHeadingFive{5}
+\def\markdownRendererHeadingSix{6}
+\starttext
+\startmarkdown
+######
+#####
+#####
+###
+######
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> 65536
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHeadingSix{%
+ \markdownRendererHeadingSixPrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Horizontal Rule Renderer
+The \mdef{markdownRendererHorizontalRule} macro represents a horizontal rule.
+The macro receives no arguments.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererHorizontalRule{\vfil\break}
+\markdownBegin
+This is the first page.
+
+***
+
+This is the second page.
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is the first page.
+>
+> ***
+>
+> This is the second page.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ renderers = {
+ horizontalRule = \newpage,
+ },
+}
+\begin{document}
+\begin{markdown}
+This is the first page.
+
+***
+
+This is the second page.
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is the first page.
+>
+> ***
+>
+> This is the second page.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererHorizontalRule{\page[yes]}
+\starttext
+\startmarkdown
+This is the first page.
+
+***
+
+This is the second page.
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is the first page.
+>
+> ***
+>
+> This is the second page.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererHorizontalRule{%
+ \markdownRendererHorizontalRulePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Footnote Renderer
+The \mdef{markdownRendererFootnote} macro represents a footnote. This macro
+will only be produced, when the \Opt{footnotes} option is `true`. The
+macro receives a single argument that corresponds to the footnote text.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownOptionFootnotes{true}
+\def\markdownRendererFootnote#1{ (and \lowercase{#1})}
+\markdownBegin
+This is some text[^1] and this is some other text[^2].
+
+ [^1]: this is a footnote
+
+ [^2]: this is some other footnote
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is some text (and this is a footnote) and this is some other
+> text (and this is some other footnote).
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[footnotes]{markdown}
+\markdownSetup{
+ renderers = {
+ footnote = { (and \MakeLowercase{#1})},
+ },
+}
+\begin{document}
+\begin{markdown}
+This is some text[^1] and this is some other text[^2].
+
+ [^1]: this is a footnote
+
+ [^2]: this is some other footnote
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is some text (and this is a footnote) and this is some other
+> text (and this is some other footnote).
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownOptionFootnotes{true}
+\def\markdownRendererFootnote#1{ (and \lowercase{#1})}
+\starttext
+\startmarkdown
+This is some text[^1] and this is some other text[^2].
+
+ [^1]: this is a footnote
+
+ [^2]: this is some other footnote
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is some text (and this is a footnote) and this is some other
+> text (and this is some other footnote).
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererFootnote{%
+ \markdownRendererFootnotePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Parenthesized Citations Renderer
+The \mdef{markdownRendererCite} macro represents a string of one or more
+parenthetical citations. This macro will only be produced, when the
+\Opt{citations} option is `true`. The macro receives the parameter
+`{`\meta{number of citations}`}` followed by \meta{suppress
+author}`{`\meta{prenote}`}{`\meta{postnote}`}{`\meta{name}`}` repeated
+\meta{number of citations} times. The \meta{suppress author} parameter is
+either the token `-`, when the author's name is to be suppressed, or `+`
+otherwise.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[citations]{markdown}
+\newcount\citationsCounter
+\newcount\citationsTotal
+\makeatletter
+\def\citations#1#2#3#4{%
+ a parenthesized citation \emph{#4}
+ \advance\citationsCounter by 1\relax
+ \ifx\relax#2\relax
+ \ifx\relax#3\relax\else
+ with a postfix \emph{#3}%
+ \fi
+ \else
+ with a prefix \emph{#2}%
+ \ifx\relax#3\relax\else
+ \ and a postfix \emph{#3}%
+ \fi
+ \fi
+ \ifnum\citationsCounter>\citationsTotal\relax
+ .%
+ \expandafter\@gobble
+ \else
+ , and
+ \fi\citations}
+\makeatother
+\markdownSetup{
+ renderers = {
+ cite = {%
+ \citationsCounter=1%
+ \citationsTotal=#1%
+ This is
+ \expandafter\citations
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+[see @abrahams90, pp. 12; @eijkhout91, pp. 34]
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a parenthesized citation *abrahams90* with a prefix see
+> and a postfix *pp. > 12*, and a citation *eijkhout91* with a
+> postfix *pp. 34*.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererCite{%
+ \markdownRendererCitePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Text Citations Renderer
+The \mdef{markdownRendererTextCite} macro represents a string of one or more
+text citations. This macro will only be produced, when the
+\Opt{citations} option is `true`. The macro receives parameters in the same
+format as the \m{markdownRendererCite} macro.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[citations]{markdown}
+\newcount\citationsCounter
+\newcount\citationsTotal
+\makeatletter
+\def\citations#1#2#3#4{%
+ a text citation \emph{#4}
+ \advance\citationsCounter by 1\relax
+ \ifx\relax#2\relax
+ \ifx\relax#3\relax\else
+ with a postfix \emph{#3}%
+ \fi
+ \else
+ with a prefix \emph{#2}%
+ \ifx\relax#3\relax\else
+ \ and a postfix \emph{#3}%
+ \fi
+ \fi
+ \ifnum\citationsCounter>\citationsTotal\relax
+ .%
+ \expandafter\@gobble
+ \else
+ , and
+ \fi\citations}
+\makeatother
+\markdownSetup{
+ renderers = {
+ textCite = {%
+ \citationsCounter=1%
+ \citationsTotal=#1%
+ This is
+ \expandafter\citations
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+@abrahams90 [pp. 12; also @eijkhout91]
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a text citation *abrahams90* with a postfix *pp. 12*,
+> and a citation *eijkhout91* with a prefix *also*.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererTextCite{%
+ \markdownRendererTextCitePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+#### Table Renderer
+The \mdef{markdownRendererTable} macro represents a table. This macro will only
+be produced, when the \Opt{pipeTables} option is `true`. The macro receives the
+parameters `{`\meta{caption}`}{`\meta{number of rows}`}{`\meta{number of columns}`}`
+followed by `{`\meta{alignments}`}` and then by `{`\meta{row}`}` repeated
+\meta{number of rows} times, where \meta{row} is `{`\meta{column}`}` repeated
+\meta{number of columns} times, \meta{alignments} is \meta{alignment} repeated
+\meta{number of columns} times, and \meta{alignment} is one of the following:
+
+- `d` -- The corresponding column has an unspecified (default) alignment.
+- `l` -- The corresponding column is left-aligned.
+- `c` -- The corresponding column is centered.
+- `r` -- The corresponding column is right-aligned.
+
+% \end{markdown}
+%
+% \iffalse
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage[pipeTables, tableCaptions]{markdown}
+\newcount\rowCounter
+\newcount\columnCounter
+\makeatletter
+\def\processRow#1{%
+ \columnCounter=1%
+ \ifnum\rowCounter=0\relax
+ As for the alignment,
+ \else
+ In row \the\rowCounter,
+ \fi
+ \processColumn#1
+ \advance\rowCounter by 1\relax
+ \ifnum\rowCounter>\rowTotal\relax
+ \expandafter\@gobble
+ \fi\processRow}%
+\def\processColumn#1{%
+ column number \the\columnCounter{}
+ \ifnum\rowCounter=0\relax
+ \if#1d{}has default alignment\fi
+ \if#1l{}is left-aligned\fi
+ \if#1c{}is centered\fi
+ \if#1r{}is right-aligned\fi
+ \else
+ says \emph{#1}%
+ \fi
+ \advance\columnCounter by 1\relax
+ \ifnum\columnCounter<\columnTotal\relax, \fi
+ \ifnum\columnCounter=\columnTotal\relax, and \fi
+ \ifnum\columnCounter>\columnTotal\relax
+ .\expandafter\@gobble
+ \fi\processColumn}%
+\makeatother
+\markdownSetup{
+ renderers = {
+ table = {%
+ This is a table with caption \emph{#1} that is #3 colums wide
+ and #2 rows long.
+ \rowCounter=0%
+ \def\rowTotal{#2}%
+ \def\columnTotal{#3}%
+ \processRow
+ },
+ },
+}
+\begin{document}
+\begin{markdown}
+| Right | Left | Default | Center |
+|------:|:-----|---------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of pipe table syntax
+\end{markdown}
+\end{document}
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> This is a table with caption *Demonstration of pipe table syntax* that is 4
+> colums wide and 4 rows long. As for the alignment, column number 1 is
+> right-aligned, column number 2 is left-aligned, column number 3 has default
+> alignment, and column number 4 is centered. In row 1, column number 1 says
+> *Right*, column number 2 says *Left*, column number 3 says *Default*, and
+> column number 4 says *Center*. In row 2, column number 1 says *12*, column
+> number 2 says *12*, column number 3 says *12*, and column number 4 says *12*.
+> In row 3, column number 1 says *123*, column number 2 says *123*, column
+> number 3 says *123*, and column number 4 says *123*. In row 4, column number
+> 1 says *1*, column number 2 says *1*, column number 3 says *1*, and column
+> number 4 says *1*.
+
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{macrocode}
+\def\markdownRendererTable{%
+ \markdownRendererTablePrototype}%
+% \end{macrocode}
+% \par
+%
+% \iffalse
+%</tex>
+%<*manual-tokens>
+% \fi
+%
+% \begin{markdown}
+
+### Token Renderer Prototypes
+
+% \label{sec:texrendererprototypes}
+%
+% \end{markdown}
+% \iffalse
+
+By default, token renderers point to package-defined \TeX{} macros, further
+referred to as *prototypes*, which provide useful default definitions.
+
+% \fi
+%
+% \iffalse
+
+##### Plain \TeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\def\markdownRendererTildePrototype{%
+ Packages can specify token renderer prototypes.%
+}
+\markdownBegin
+~
+\markdownEnd
+
+\def\markdownRendererTilde{%
+ User-defined token renderers take precedence.%
+}
+\markdownBegin
+~
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Packages can specify token renderer prototypes.
+>
+> User-defined token renderers take precedence.
+
+##### \LaTeX{} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\markdownSetup{
+ rendererPrototypes = {
+ tilde = {Packages can specify token renderer prototypes.},
+ },
+}
+\begin{document}
+\begin{markdown}
+~
+\end{markdown}
+
+\begin{markdown*}{
+ renderers = {
+ tilde = {User-defined token renderers take precedence.},
+ },
+}
+~
+\end{markdown*}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Packages can specify token renderer prototypes.
+>
+> User-defined token renderers take precedence.
+
+##### \Hologo{ConTeXt} Example {.unnumbered}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\def\markdownRendererTildePrototype{%
+ Packages can specify token renderer prototypes.%
+}
+\starttext
+\startmarkdown
+~
+\stopmarkdown
+
+\def\markdownRendererTilde{%
+ User-defined token renderers take precedence.%
+}
+\startmarkdown
+~
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> Packages can specify token renderer prototypes.
+>
+> User-defined token renderers take precedence.
+
+%</manual-tokens>
+%<*tex>
+% \fi
+%
+% \begin{markdown}
+%
+% The following \TeX{} macros provide definitions for the token renderers (see
+% Section \ref{sec:texrenderersuser}) that have not been redefined by the
+% user. These macros are intended to be redefined by macro package authors
+% who wish to provide sensible default token renderers. They are also redefined
+% by the \LaTeX{} and \Hologo{ConTeXt} implementations (see sections
+% \ref{sec:lateximplementation} and \ref{sec:contextimplementation}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownRendererInterblockSeparatorPrototype{}%
+\def\markdownRendererLineBreakPrototype{}%
+\def\markdownRendererEllipsisPrototype{}%
+\def\markdownRendererNbspPrototype{}%
+\def\markdownRendererLeftBracePrototype{}%
+\def\markdownRendererRightBracePrototype{}%
+\def\markdownRendererDollarSignPrototype{}%
+\def\markdownRendererPercentSignPrototype{}%
+\def\markdownRendererAmpersandPrototype{}%
+\def\markdownRendererUnderscorePrototype{}%
+\def\markdownRendererHashPrototype{}%
+\def\markdownRendererCircumflexPrototype{}%
+\def\markdownRendererBackslashPrototype{}%
+\def\markdownRendererTildePrototype{}%
+\def\markdownRendererPipePrototype{}%
+\def\markdownRendererCodeSpanPrototype#1{}%
+\def\markdownRendererLinkPrototype#1#2#3#4{}%
+\def\markdownRendererImagePrototype#1#2#3#4{}%
+\def\markdownRendererContentBlockPrototype#1#2#3#4{}%
+\def\markdownRendererContentBlockOnlineImagePrototype#1#2#3#4{}%
+\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{}%
+\def\markdownRendererUlBeginPrototype{}%
+\def\markdownRendererUlBeginTightPrototype{}%
+\def\markdownRendererUlItemPrototype{}%
+\def\markdownRendererUlItemEndPrototype{}%
+\def\markdownRendererUlEndPrototype{}%
+\def\markdownRendererUlEndTightPrototype{}%
+\def\markdownRendererOlBeginPrototype{}%
+\def\markdownRendererOlBeginTightPrototype{}%
+\def\markdownRendererOlItemPrototype{}%
+\def\markdownRendererOlItemWithNumberPrototype#1{}%
+\def\markdownRendererOlItemEndPrototype{}%
+\def\markdownRendererOlEndPrototype{}%
+\def\markdownRendererOlEndTightPrototype{}%
+\def\markdownRendererDlBeginPrototype{}%
+\def\markdownRendererDlBeginTightPrototype{}%
+\def\markdownRendererDlItemPrototype#1{}%
+\def\markdownRendererDlItemEndPrototype{}%
+\def\markdownRendererDlDefinitionBeginPrototype{}%
+\def\markdownRendererDlDefinitionEndPrototype{}%
+\def\markdownRendererDlEndPrototype{}%
+\def\markdownRendererDlEndTightPrototype{}%
+\def\markdownRendererEmphasisPrototype#1{}%
+\def\markdownRendererStrongEmphasisPrototype#1{}%
+\def\markdownRendererBlockQuoteBeginPrototype{}%
+\def\markdownRendererBlockQuoteEndPrototype{}%
+\def\markdownRendererInputVerbatimPrototype#1{}%
+\def\markdownRendererInputFencedCodePrototype#1#2{}%
+\def\markdownRendererHeadingOnePrototype#1{}%
+\def\markdownRendererHeadingTwoPrototype#1{}%
+\def\markdownRendererHeadingThreePrototype#1{}%
+\def\markdownRendererHeadingFourPrototype#1{}%
+\def\markdownRendererHeadingFivePrototype#1{}%
+\def\markdownRendererHeadingSixPrototype#1{}%
+\def\markdownRendererHorizontalRulePrototype{}%
+\def\markdownRendererFootnotePrototype#1{}%
+\def\markdownRendererCitePrototype#1{}%
+\def\markdownRendererTextCitePrototype#1{}%
+\def\markdownRendererTablePrototype#1#2#3{}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Logging Facilities
+% The \mdef{markdownInfo}, \mdef{markdownWarning}, and \mdef{markdownError}
+% macros perform logging for the Markdown package. Their first argument
+% specifies the text of the info, warning, or error message.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownInfo#1{}%
+\def\markdownWarning#1{}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \m{markdownError} macro receives a second argument that provides a help
+% text.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownError#1#2{}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% You may redefine these macros to redirect and process the info, warning, and
+% error messages.
+%
+%### Miscellanea
+% The \mdef{markdownMakeOther} macro is used by the package, when a \TeX{}
+% engine that does not support direct Lua access is starting to buffer a text.
+% The plain \TeX{} implementation changes the category code of plain \TeX{}
+% special characters to other, but there may be other active characters that
+% may break the output. This macro should temporarily change the category of
+% these to *other*.
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\markdownMakeOther\relax
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownReadAndConvert} macro implements the \m{markdownBegin}
+% macro. The first argument specifies the token sequence that will terminate
+% the markdown input (\m{markdownEnd} in the instance of the \m{markdownBegin}
+% macro) when the plain \TeX{} special characters have had their category
+% changed to *other*. The second argument specifies the token sequence
+% that will actually be inserted into the document, when the ending token
+% sequence has been found.
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\markdownReadAndConvert\relax
+\begingroup
+% \end{macrocode}
+% \begin{markdown}
+% Locally swap the category code of the backslash symbol (`\`) with the pipe
+% symbol (`|`). This is required in order that all the special symbols in the
+% first argument of the `markdownReadAndConvert` macro have the category code
+% *other*.
+%
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`\|=0\catcode`\\=12%
+ |gdef|markdownBegin{%
+ |markdownReadAndConvert{\markdownEnd}%
+ {|markdownEnd}}%
+|endgroup
+% \end{macrocode}
+% \begin{markdown}
+% The macro is exposed in the interface, so that the user can create their own
+% markdown environments. Due to the way the arguments are passed to Lua (see
+% Section \ref{sec:directlua}), the first argument may not contain the
+% string `]]` (regardless of the category code of the bracket symbol (`]`)).
+%
+% The \mdef{markdownMode} macro specifies how the plain \TeX{} implementation
+% interfaces with the Lua interface. The valid values and their meaning are
+% as follows:
+%
+% - `0` – Shell escape via the 18 output file stream
+% - `1` – Shell escape via the Lua \luam{os.execute} method
+% - `2` – Direct Lua access
+%
+% By defining the macro, the user can coerce the package to use a specific mode.
+% If the user does not define the macro prior to loading the plain \TeX{}
+% implementation, the correct value will be automatically detected. The outcome
+% of changing the value of \m{markdownMode} after the implementation has been
+% loaded is undefined.
+%
+% \end{markdown}
+% \begin{macrocode}
+\ifx\markdownMode\undefined
+ \ifx\directlua\undefined
+ \def\markdownMode{0}%
+ \else
+ \def\markdownMode{2}%
+ \fi
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The following macros are no longer a part of the plain \TeX{} interface and
+% are only defined for backwards compatibility:
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownLuaRegisterIBCallback#1{\relax}%
+\def\markdownLuaUnregisterIBCallback#1{\relax}%
+% \end{macrocode}
+% \iffalse
+%</tex>
+% \fi
+% \par
+% \begin{markdown}
+%
+% \LaTeX{} Interface
+%-------------------
+% \label{sec:latexinterface}
+%
+% \end{markdown}
+% \iffalse
+%<*manual-interfaces>
+
+### \LaTeX{}
+
+The \LaTeX{} interface provides the same level of functionality as the plain
+\TeX{} interface by using the plain \TeX{} interface behind the scenes. Unlike
+the plain \TeX{} interface, the \LaTeX{} interface uses familiar \LaTeX{}
+idioms, such as package options and environments.
+
+The \LaTeX{} interface accepts the same options as the plain \TeX{} interface,
+but now the options are specified as \meta{key}${}={}$\meta{value} pairs and
+they are passed either as package options, in the \m{markdownSetup} command, or
+as parameters for the \envm{markdown*} \LaTeX{} environment.
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+
+\begin{markdown}
+$\sqrt{-1}$ *equals* $i$
+\end{markdown}
+
+\begin{markdown*}{hybrid}
+$\sqrt{-1}$ *equals* $i$
+\end{markdown*}
+
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+Invoking pdfTeX should have the same effect:
+``` sh
+pdflatex --shell-escape document.tex
+``````
+
+%</manual-interfaces>
+%<*latex>
+% \fi
+% \begin{markdown}
+%
+% The \LaTeX{} interface provides \LaTeX{} environments for the typesetting of
+% markdown input from within \LaTeX{}, facilities for setting Lua interface
+% options (see Section \ref{sec:luaoptions}) used during the conversion from
+% markdown to plain \TeX{}, and facilities for changing the way markdown tokens
+% are rendered. The rest of the interface is inherited from the plain \TeX{}
+% interface (see Section \ref{sec:texinterface}).
+%
+% The \LaTeX{} interface is implemented by the `markdown.sty` file, which
+% can be loaded from the \LaTeX{} document preamble as follows:
+% \end{markdown}
+% \begin{Verbatim}[commandchars=\\\{\},gobble=2]
+% \textbackslash{}usepackage[\textrm{\meta{options}}]\{markdown\}
+% \end{Verbatim}
+% \begin{markdown}
+% where \meta{options} are the \LaTeX{} interface options (see Section
+% \ref{sec:latexoptions}). Note that \meta{options} inside the \m{usepackage}
+% macro may not set the `markdownRenderers` (see Section
+% \ref{sec:latexrenderers}) and `markdownRendererPrototypes` (see Section
+% \ref{sec:latexrendererprototypes}) keys. This limitation is due to the way
+% \Hologo{LaTeX2e} parses package options.
+%
+% \end{markdown}
+% \par
+% \begin{markdown}
+%
+%### Typesetting Markdown
+% The interface exposes the \envmdef{markdown} and \envmdef{markdown*}
+% \LaTeX{} environments, and redefines the \m{markdownInput} command.
+%
+% The \envm{markdown} and \envm{markdown*} \LaTeX{} environments are used to
+% typeset markdown document fragments. The starred version of the
+% \envm{markdown} environment accepts \LaTeX{} interface options (see
+% Section \ref{sec:latexoptions}) as its only argument. These options will
+% only influence this markdown document fragment.
+%
+% \end{markdown}
+% \begin{macrocode}
+\newenvironment{markdown}\relax\relax
+\newenvironment{markdown*}[1]\relax\relax
+% \end{macrocode}
+% \markdownBegin
+%
+% You may prepend your own code to the \m{markdown} macro and append your own
+% code to the \m{endmarkdown} macro to produce special effects before and after
+% the \envm{markdown} \LaTeX{} environment (and likewise for the starred
+% version).
+%
+% Note that the \envm{markdown} and \envm{markdown*} \LaTeX{} environments are
+% subject to the same limitations as the \m{markdownBegin} and \m{markdownEnd}
+% macros exposed by the plain \TeX{} interface.
+%
+% The following example \LaTeX{} code showcases the usage of the
+% \envm{markdown} and \envm{markdown*} environments:
+% ``` tex
+% \documentclass{article} \documentclass{article}
+% \usepackage{markdown} \usepackage{markdown}
+% \begin{document} \begin{document}
+% % ... % ...
+% \begin{markdown} \begin{markdown*}{smartEllipses}
+% _Hello_ **world** ... _Hello_ **world** ...
+% \end{markdown} \end{markdown*}
+% % ... % ...
+% \end{document} \end{document}
+% ```````
+%
+% The \m{markdownInput} macro accepts a single mandatory parameter containing
+% the filename of a markdown document and expands to the result of the
+% conversion of the input markdown document to plain \TeX{}. Unlike the
+% \m{markdownInput} macro provided by the plain \TeX{} interface, this macro
+% also accepts \LaTeX{} interface options (see Section \ref{sec:latexoptions})
+% as its optional argument. These options will only influnce this markdown
+% document.
+%
+% The following example \LaTeX{} code showcases the usage of the
+% \m{markdownInput} macro:
+% ``` tex
+% \documentclass{article}
+% \usepackage{markdown}
+% \begin{document}
+% % ...
+% \markdownInput[smartEllipses]{hello.md}
+% % ...
+% \end{document}
+% ```````
+%
+%### Options
+% \label{sec:latexoptions}
+%
+% The \LaTeX{} options are represented by a comma-delimited list of
+% \meta{key}`=`\meta{value} pairs. For boolean options, the `=`\meta{value}
+% part is optional, and \meta{key} will be interpreted as \meta{key}`=true`.
+%
+% The \LaTeX{} options map directly to the options recognized by the plain
+% \TeX{} interface (see Section \ref{sec:texoptions}) and to the markdown token
+% renderers and their prototypes recognized by the plain \TeX{} interface (see
+% Sections \ref{sec:texrenderersuser} and \ref{sec:texrendererprototypes}).
+%
+% The \LaTeX{} options may be specified when loading the \LaTeX{} package (see
+% Section \ref{sec:latexinterface}), when using the \envm{markdown*} \LaTeX{}
+% environment, or via the \mdef{markdownSetup} macro. The \m{markdownSetup}
+% macro receives the options to set up as its only argument.
+%
+% \markdownEnd
+% \begin{macrocode}
+\newcommand\markdownSetup[1]{%
+ \setkeys{markdownOptions}{#1}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Plain \TeX{} Interface Options
+% The following options map directly to the option macros exposed by the plain
+% \TeX{} interface (see Section \ref{sec:texoptions}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\define@key{markdownOptions}{helperScriptFileName}{%
+ \def\markdownOptionHelperScriptFileName{#1}}%
+\define@key{markdownOptions}{inputTempFileName}{%
+ \def\markdownOptionInputTempFileName{#1}}%
+\define@key{markdownOptions}{outputTempFileName}{%
+ \def\markdownOptionOutputTempFileName{#1}}%
+\define@key{markdownOptions}{errorTempFileName}{%
+ \def\markdownOptionErrorTempFileName{#1}}%
+\define@key{markdownOptions}{cacheDir}{%
+ \def\markdownOptionCacheDir{#1}}%
+\define@key{markdownOptions}{outputDir}{%
+ \def\markdownOptionOutputDir{#1}}%
+\define@key{markdownOptions}{blankBeforeBlockquote}[true]{%
+ \def\markdownOptionBlankBeforeBlockquote{#1}}%
+\define@key{markdownOptions}{blankBeforeCodeFence}[true]{%
+ \def\markdownOptionBlankBeforeCodeFence{#1}}%
+\define@key{markdownOptions}{blankBeforeHeading}[true]{%
+ \def\markdownOptionBlankBeforeHeading{#1}}%
+\define@key{markdownOptions}{breakableBlockquotes}[true]{%
+ \def\markdownOptionBreakableBlockquotes{#1}}%
+\define@key{markdownOptions}{citations}[true]{%
+ \def\markdownOptionCitations{#1}}%
+\define@key{markdownOptions}{citationNbsps}[true]{%
+ \def\markdownOptionCitationNbsps{#1}}%
+\define@key{markdownOptions}{contentBlocks}[true]{%
+ \def\markdownOptionContentBlocks{#1}}%
+\define@key{markdownOptions}{codeSpans}[true]{%
+ \def\markdownOptionCodeSpans{#1}}%
+\define@key{markdownOptions}{contentBlocksLanguageMap}{%
+ \def\markdownOptionContentBlocksLanguageMap{#1}}%
+\define@key{markdownOptions}{definitionLists}[true]{%
+ \def\markdownOptionDefinitionLists{#1}}%
+\define@key{markdownOptions}{footnotes}[true]{%
+ \def\markdownOptionFootnotes{#1}}%
+\define@key{markdownOptions}{fencedCode}[true]{%
+ \def\markdownOptionFencedCode{#1}}%
+\define@key{markdownOptions}{hashEnumerators}[true]{%
+ \def\markdownOptionHashEnumerators{#1}}%
+\define@key{markdownOptions}{headerAttributes}[true]{%
+ \def\markdownOptionHeaderAttributes{#1}}%
+\define@key{markdownOptions}{html}[true]{%
+ \def\markdownOptionHtml{#1}}%
+\define@key{markdownOptions}{hybrid}[true]{%
+ \def\markdownOptionHybrid{#1}}%
+\define@key{markdownOptions}{inlineFootnotes}[true]{%
+ \def\markdownOptionInlineFootnotes{#1}}%
+\define@key{markdownOptions}{pipeTables}[true]{%
+ \def\markdownOptionPipeTables{#1}}%
+\define@key{markdownOptions}{preserveTabs}[true]{%
+ \def\markdownOptionPreserveTabs{#1}}%
+\define@key{markdownOptions}{smartEllipses}[true]{%
+ \def\markdownOptionSmartEllipses{#1}}%
+\define@key{markdownOptions}{shiftHeadings}{%
+ \def\markdownOptionShiftHeadings{#1}}%
+\define@key{markdownOptions}{slice}{%
+ \def\markdownOptionSlice{#1}}%
+\define@key{markdownOptions}{startNumber}[true]{%
+ \def\markdownOptionStartNumber{#1}}%
+\define@key{markdownOptions}{tableCaptions}[true]{%
+ \def\markdownOptionTableCaptions{#1}}%
+\define@key{markdownOptions}{tightLists}[true]{%
+ \def\markdownOptionTightLists{#1}}%
+\define@key{markdownOptions}{underscores}[true]{%
+ \def\markdownOptionUnderscores{#1}}%
+\define@key{markdownOptions}{stripPercentSigns}[true]{%
+ \def\markdownOptionStripPercentSigns{#1}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The following example \LaTeX{} code showcases a possible configuration of
+% plain \TeX{} interface options \m{markdownOptionHybrid},
+% \m{markdownOptionSmartEllipses}, and \m{markdownOptionCacheDir}.
+% ``` tex
+% \markdownSetup{
+% hybrid,
+% smartEllipses,
+% cacheDir = /tmp,
+% }
+% ```````
+%
+%#### Plain \TeX{} Markdown Token Renderers
+% \label{sec:latexrenderers}
+%
+% The \LaTeX{} interface recognizes an option with the `renderers` key,
+% whose value must be a list of options that map directly to the markdown token
+% renderer macros exposed by the plain \TeX{} interface (see Section
+% \ref{sec:texrenderersuser}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\define@key{markdownRenderers}{interblockSeparator}{%
+ \renewcommand\markdownRendererInterblockSeparator{#1}}%
+\define@key{markdownRenderers}{lineBreak}{%
+ \renewcommand\markdownRendererLineBreak{#1}}%
+\define@key{markdownRenderers}{ellipsis}{%
+ \renewcommand\markdownRendererEllipsis{#1}}%
+\define@key{markdownRenderers}{nbsp}{%
+ \renewcommand\markdownRendererNbsp{#1}}%
+\define@key{markdownRenderers}{leftBrace}{%
+ \renewcommand\markdownRendererLeftBrace{#1}}%
+\define@key{markdownRenderers}{rightBrace}{%
+ \renewcommand\markdownRendererRightBrace{#1}}%
+\define@key{markdownRenderers}{dollarSign}{%
+ \renewcommand\markdownRendererDollarSign{#1}}%
+\define@key{markdownRenderers}{percentSign}{%
+ \renewcommand\markdownRendererPercentSign{#1}}%
+\define@key{markdownRenderers}{ampersand}{%
+ \renewcommand\markdownRendererAmpersand{#1}}%
+\define@key{markdownRenderers}{underscore}{%
+ \renewcommand\markdownRendererUnderscore{#1}}%
+\define@key{markdownRenderers}{hash}{%
+ \renewcommand\markdownRendererHash{#1}}%
+\define@key{markdownRenderers}{circumflex}{%
+ \renewcommand\markdownRendererCircumflex{#1}}%
+\define@key{markdownRenderers}{backslash}{%
+ \renewcommand\markdownRendererBackslash{#1}}%
+\define@key{markdownRenderers}{tilde}{%
+ \renewcommand\markdownRendererTilde{#1}}%
+\define@key{markdownRenderers}{pipe}{%
+ \renewcommand\markdownRendererPipe{#1}}%
+\define@key{markdownRenderers}{codeSpan}{%
+ \renewcommand\markdownRendererCodeSpan[1]{#1}}%
+\define@key{markdownRenderers}{link}{%
+ \renewcommand\markdownRendererLink[4]{#1}}%
+\define@key{markdownRenderers}{contentBlock}{%
+ \renewcommand\markdownRendererContentBlock[4]{#1}}%
+\define@key{markdownRenderers}{contentBlockOnlineImage}{%
+ \renewcommand\markdownRendererContentBlockOnlineImage[4]{#1}}%
+\define@key{markdownRenderers}{contentBlockCode}{%
+ \renewcommand\markdownRendererContentBlockCode[5]{#1}}%
+\define@key{markdownRenderers}{image}{%
+ \renewcommand\markdownRendererImage[4]{#1}}%
+\define@key{markdownRenderers}{ulBegin}{%
+ \renewcommand\markdownRendererUlBegin{#1}}%
+\define@key{markdownRenderers}{ulBeginTight}{%
+ \renewcommand\markdownRendererUlBeginTight{#1}}%
+\define@key{markdownRenderers}{ulItem}{%
+ \renewcommand\markdownRendererUlItem{#1}}%
+\define@key{markdownRenderers}{ulItemEnd}{%
+ \renewcommand\markdownRendererUlItemEnd{#1}}%
+\define@key{markdownRenderers}{ulEnd}{%
+ \renewcommand\markdownRendererUlEnd{#1}}%
+\define@key{markdownRenderers}{ulEndTight}{%
+ \renewcommand\markdownRendererUlEndTight{#1}}%
+\define@key{markdownRenderers}{olBegin}{%
+ \renewcommand\markdownRendererOlBegin{#1}}%
+\define@key{markdownRenderers}{olBeginTight}{%
+ \renewcommand\markdownRendererOlBeginTight{#1}}%
+\define@key{markdownRenderers}{olItem}{%
+ \renewcommand\markdownRendererOlItem{#1}}%
+\define@key{markdownRenderers}{olItemWithNumber}{%
+ \renewcommand\markdownRendererOlItemWithNumber[1]{#1}}%
+\define@key{markdownRenderers}{olItemEnd}{%
+ \renewcommand\markdownRendererOlItemEnd{#1}}%
+\define@key{markdownRenderers}{olEnd}{%
+ \renewcommand\markdownRendererOlEnd{#1}}%
+\define@key{markdownRenderers}{olEndTight}{%
+ \renewcommand\markdownRendererOlEndTight{#1}}%
+\define@key{markdownRenderers}{dlBegin}{%
+ \renewcommand\markdownRendererDlBegin{#1}}%
+\define@key{markdownRenderers}{dlBeginTight}{%
+ \renewcommand\markdownRendererDlBeginTight{#1}}%
+\define@key{markdownRenderers}{dlItem}{%
+ \renewcommand\markdownRendererDlItem[1]{#1}}%
+\define@key{markdownRenderers}{dlItemEnd}{%
+ \renewcommand\markdownRendererDlItemEnd{#1}}%
+\define@key{markdownRenderers}{dlDefinitionBegin}{%
+ \renewcommand\markdownRendererDlDefinitionBegin{#1}}%
+\define@key{markdownRenderers}{dlDefinitionEnd}{%
+ \renewcommand\markdownRendererDlDefinitionEnd{#1}}%
+\define@key{markdownRenderers}{dlEnd}{%
+ \renewcommand\markdownRendererDlEnd{#1}}%
+\define@key{markdownRenderers}{dlEndTight}{%
+ \renewcommand\markdownRendererDlEndTight{#1}}%
+\define@key{markdownRenderers}{emphasis}{%
+ \renewcommand\markdownRendererEmphasis[1]{#1}}%
+\define@key{markdownRenderers}{strongEmphasis}{%
+ \renewcommand\markdownRendererStrongEmphasis[1]{#1}}%
+\define@key{markdownRenderers}{blockQuoteBegin}{%
+ \renewcommand\markdownRendererBlockQuoteBegin{#1}}%
+\define@key{markdownRenderers}{blockQuoteEnd}{%
+ \renewcommand\markdownRendererBlockQuoteEnd{#1}}%
+\define@key{markdownRenderers}{inputVerbatim}{%
+ \renewcommand\markdownRendererInputVerbatim[1]{#1}}%
+\define@key{markdownRenderers}{inputFencedCode}{%
+ \renewcommand\markdownRendererInputFencedCode[2]{#1}}%
+\define@key{markdownRenderers}{headingOne}{%
+ \renewcommand\markdownRendererHeadingOne[1]{#1}}%
+\define@key{markdownRenderers}{headingTwo}{%
+ \renewcommand\markdownRendererHeadingTwo[1]{#1}}%
+\define@key{markdownRenderers}{headingThree}{%
+ \renewcommand\markdownRendererHeadingThree[1]{#1}}%
+\define@key{markdownRenderers}{headingFour}{%
+ \renewcommand\markdownRendererHeadingFour[1]{#1}}%
+\define@key{markdownRenderers}{headingFive}{%
+ \renewcommand\markdownRendererHeadingFive[1]{#1}}%
+\define@key{markdownRenderers}{headingSix}{%
+ \renewcommand\markdownRendererHeadingSix[1]{#1}}%
+\define@key{markdownRenderers}{horizontalRule}{%
+ \renewcommand\markdownRendererHorizontalRule{#1}}%
+\define@key{markdownRenderers}{footnote}{%
+ \renewcommand\markdownRendererFootnote[1]{#1}}%
+\define@key{markdownRenderers}{cite}{%
+ \renewcommand\markdownRendererCite[1]{#1}}%
+\define@key{markdownRenderers}{textCite}{%
+ \renewcommand\markdownRendererTextCite[1]{#1}}%
+\define@key{markdownRenderers}{table}{%
+ \renewcommand\markdownRendererTable[3]{#1}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The following example \LaTeX{} code showcases a possible configuration of the
+% \m{markdownRendererLink} and \m{markdownRendererEmphasis} markdown token
+% renderers.
+% ``` tex
+% \markdownSetup{
+% renderers = {
+% link = {#4}, % Render links as the link title.
+% emphasis = {\emph{#1}}, % Render emphasized text via `\emph`.
+% }
+% }
+% ```````
+%
+%#### Plain \TeX{} Markdown Token Renderer Prototypes
+% \label{sec:latexrendererprototypes}
+% The \LaTeX{} interface recognizes an option with the `rendererPrototypes`
+% key, whose value must be a list of options that map directly to the markdown
+% token renderer prototype macros exposed by the plain \TeX{} interface (see
+% Section \ref{sec:texrendererprototypes}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\define@key{markdownRendererPrototypes}{interblockSeparator}{%
+ \renewcommand\markdownRendererInterblockSeparatorPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{lineBreak}{%
+ \renewcommand\markdownRendererLineBreakPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ellipsis}{%
+ \renewcommand\markdownRendererEllipsisPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{nbsp}{%
+ \renewcommand\markdownRendererNbspPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{leftBrace}{%
+ \renewcommand\markdownRendererLeftBracePrototype{#1}}%
+\define@key{markdownRendererPrototypes}{rightBrace}{%
+ \renewcommand\markdownRendererRightBracePrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dollarSign}{%
+ \renewcommand\markdownRendererDollarSignPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{percentSign}{%
+ \renewcommand\markdownRendererPercentSignPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ampersand}{%
+ \renewcommand\markdownRendererAmpersandPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{underscore}{%
+ \renewcommand\markdownRendererUnderscorePrototype{#1}}%
+\define@key{markdownRendererPrototypes}{hash}{%
+ \renewcommand\markdownRendererHashPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{circumflex}{%
+ \renewcommand\markdownRendererCircumflexPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{backslash}{%
+ \renewcommand\markdownRendererBackslashPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{tilde}{%
+ \renewcommand\markdownRendererTildePrototype{#1}}%
+\define@key{markdownRendererPrototypes}{pipe}{%
+ \renewcommand\markdownRendererPipePrototype{#1}}%
+\define@key{markdownRendererPrototypes}{codeSpan}{%
+ \renewcommand\markdownRendererCodeSpanPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{link}{%
+ \renewcommand\markdownRendererLinkPrototype[4]{#1}}%
+\define@key{markdownRendererPrototypes}{contentBlock}{%
+ \renewcommand\markdownRendererContentBlockPrototype[4]{#1}}%
+\define@key{markdownRendererPrototypes}{contentBlockOnlineImage}{%
+ \renewcommand\markdownRendererContentBlockOnlineImagePrototype[4]{#1}}%
+\define@key{markdownRendererPrototypes}{contentBlockCode}{%
+ \renewcommand\markdownRendererContentBlockCodePrototype[5]{#1}}%
+\define@key{markdownRendererPrototypes}{image}{%
+ \renewcommand\markdownRendererImagePrototype[4]{#1}}%
+\define@key{markdownRendererPrototypes}{ulBegin}{%
+ \renewcommand\markdownRendererUlBeginPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ulBeginTight}{%
+ \renewcommand\markdownRendererUlBeginTightPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ulItem}{%
+ \renewcommand\markdownRendererUlItemPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ulItemEnd}{%
+ \renewcommand\markdownRendererUlItemEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ulEnd}{%
+ \renewcommand\markdownRendererUlEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{ulEndTight}{%
+ \renewcommand\markdownRendererUlEndTightPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{olBegin}{%
+ \renewcommand\markdownRendererOlBeginPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{olBeginTight}{%
+ \renewcommand\markdownRendererOlBeginTightPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{olItem}{%
+ \renewcommand\markdownRendererOlItemPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{olItemWithNumber}{%
+ \renewcommand\markdownRendererOlItemWithNumberPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{olItemEnd}{%
+ \renewcommand\markdownRendererOlItemEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{olEnd}{%
+ \renewcommand\markdownRendererOlEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{olEndTight}{%
+ \renewcommand\markdownRendererOlEndTightPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlBegin}{%
+ \renewcommand\markdownRendererDlBeginPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlBeginTight}{%
+ \renewcommand\markdownRendererDlBeginTightPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlItem}{%
+ \renewcommand\markdownRendererDlItemPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{dlItemEnd}{%
+ \renewcommand\markdownRendererDlItemEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlDefinitionBegin}{%
+ \renewcommand\markdownRendererDlDefinitionBeginPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlDefinitionEnd}{%
+ \renewcommand\markdownRendererDlDefinitionEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlEnd}{%
+ \renewcommand\markdownRendererDlEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{dlEndTight}{%
+ \renewcommand\markdownRendererDlEndTightPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{emphasis}{%
+ \renewcommand\markdownRendererEmphasisPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{strongEmphasis}{%
+ \renewcommand\markdownRendererStrongEmphasisPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{blockQuoteBegin}{%
+ \renewcommand\markdownRendererBlockQuoteBeginPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{blockQuoteEnd}{%
+ \renewcommand\markdownRendererBlockQuoteEndPrototype{#1}}%
+\define@key{markdownRendererPrototypes}{inputVerbatim}{%
+ \renewcommand\markdownRendererInputVerbatimPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{inputFencedCode}{%
+ \renewcommand\markdownRendererInputFencedCodePrototype[2]{#1}}%
+\define@key{markdownRendererPrototypes}{headingOne}{%
+ \renewcommand\markdownRendererHeadingOnePrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{headingTwo}{%
+ \renewcommand\markdownRendererHeadingTwoPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{headingThree}{%
+ \renewcommand\markdownRendererHeadingThreePrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{headingFour}{%
+ \renewcommand\markdownRendererHeadingFourPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{headingFive}{%
+ \renewcommand\markdownRendererHeadingFivePrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{headingSix}{%
+ \renewcommand\markdownRendererHeadingSixPrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{horizontalRule}{%
+ \renewcommand\markdownRendererHorizontalRulePrototype{#1}}%
+\define@key{markdownRendererPrototypes}{footnote}{%
+ \renewcommand\markdownRendererFootnotePrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{cite}{%
+ \renewcommand\markdownRendererCitePrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{textCite}{%
+ \renewcommand\markdownRendererTextCitePrototype[1]{#1}}%
+\define@key{markdownRendererPrototypes}{table}{%
+ \renewcommand\markdownRendererTablePrototype[3]{#1}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The following example \LaTeX{} code showcases a possible configuration of the
+% \m{markdownRendererImagePrototype} and \m{markdownRendererCodeSpanPrototype}
+% markdown token renderer prototypes.
+% ``` tex
+% \markdownSetup{
+% rendererPrototypes = {
+% image = {\includegraphics{#2}},
+% codeSpan = {\texttt{#1}}, % Render inline code via `\texttt`.
+% }
+% }
+% ```````
+%
+% \iffalse
+%</latex>
+%<*context>
+% \fi
+% \Hologo{ConTeXt} Interface
+%---------------------------
+% \label{sec:contextinterface}
+%
+% \iffalse
+%</context>
+%<*manual-interfaces>
+
+### \Hologo{ConTeXt}
+
+The \Hologo{ConTeXt} interface provides the same level of functionality as the
+plain \TeX{} interface by using the plain \TeX{} interface behind the scenes.
+Unlike the plain \TeX{} interface, the \Hologo{ConTeXt} interface uses familiar
+\Hologo{ConTeXt} idioms, such as environments.
+
+The \Hologo{ConTeXt} interface accepts the same options as the plain \TeX{}
+interface.
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+
+\startmarkdown
+$\sqrt{-1}$ *equals* $i$.
+\stopmarkdown
+
+\def\markdownOptionHybrid{true}
+\startmarkdown
+$\sqrt{-1}$ *equals* $i$.
+\stopmarkdown
+
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the
+following text:
+
+> \$\\sqrt{-1}\$ *equals* \$i\$.
+>
+> √-̅1̅ *equals* $i$.
+
+Invoking pdfTeX should have the same effect:
+``` sh
+texexec --passon=--shell-escape document.tex
+``````
+
+%</manual-interfaces>
+%<*context>
+% \fi
+%
+% The \Hologo{ConTeXt} interface provides a start-stop macro pair for the
+% typesetting of markdown input from within \Hologo{ConTeXt}. The rest of the
+% interface is inherited from the plain \TeX{} interface (see Section
+% \ref{sec:texinterface}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\writestatus{loading}{ConTeXt User Module / markdown}%
+\unprotect
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \Hologo{ConTeXt} interface is implemented by the
+% `t-markdown.tex` \Hologo{ConTeXt} module file that can be loaded as follows:
+% ``` tex
+% \usemodule[t][markdown]
+% ```````
+% \noindent It is expected that the special plain \TeX{} characters have the
+% expected category codes, when \m{input}ting the file.
+%
+%### Typesetting Markdown
+% The interface exposes the \mdef{startmarkdown} and \mdef{stopmarkdown} macro
+% pair for the typesetting of a markdown document fragment.
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\startmarkdown\relax
+\let\stopmarkdown\relax
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% You may prepend your own code to the \m{startmarkdown} macro and redefine the
+% \m{stopmarkdown} macro to produce special effects before and after the
+% markdown block.
+%
+% Note that the \m{startmarkdown} and \m{stopmarkdown} macros
+% are subject to the same limitations as the \m{markdownBegin} and
+% \m{markdownEnd} macros exposed by the plain \TeX{} interface.
+%
+% The following example \Hologo{ConTeXt} code showcases the usage of the
+% \m{startmarkdown} and \m{stopmarkdown} macros:
+% ``` tex
+% \usemodule[t][markdown]
+% \starttext
+% \startmarkdown
+% _Hello_ **world** ...
+% \stopmarkdown
+% \stoptext
+% ```````
+%
+% Implementation
+%===============
+% \label{sec:implementation}
+% This part of the documentation describes the implementation of the interfaces
+% exposed by the package (see Section \ref{sec:interfaces}) and is aimed at the
+% developers of the package, as well as the curious users.
+%
+% \iffalse
+%</context>
+%<*lua>
+% \fi
+%
+% Lua Implementation
+%-------------------
+% \label{sec:luaimplementation}
+% The Lua implementation implements \luamdef{writer} and \luamdef{reader}
+% objects that provide the conversion from markdown to plain \TeX{}.
+%
+% The Lunamark Lua module implements writers for the conversion to various
+% other formats, such as DocBook, Groff, or \acro{HTML}. These were stripped
+% from the module and the remaining markdown reader and plain \TeX{} writer
+% were hidden behind the converter functions exposed by the Lua interface (see
+% Section \ref{sec:luainterface}).
+%
+% \end{markdown}
+% \begin{macrocode}
+local upper, gsub, format, length =
+ string.upper, string.gsub, string.format, string.len
+local concat = table.concat
+local P, R, S, V, C, Cg, Cb, Cmt, Cc, Ct, B, Cs, any =
+ lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cg, lpeg.Cb,
+ lpeg.Cmt, lpeg.Cc, lpeg.Ct, lpeg.B, lpeg.Cs, lpeg.P(1)
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Utility Functions
+% This section documents the utility functions used by the plain \TeX{}
+% writer and the markdown reader. These functions are encapsulated in the
+% `util` object. The functions were originally located in the
+% `lunamark/util.lua` file in the Lunamark Lua module.
+%
+% \end{markdown}
+% \begin{macrocode}
+local util = {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.err} method prints an error message `msg` and exits.
+% If `exit_code` is provided, it specifies the exit code. Otherwise, the
+% exit code will be 1.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.err(msg, exit_code)
+ io.stderr:write("markdown.lua: " .. msg .. "\n")
+ os.exit(exit_code or 1)
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.cache} method computes the digest of `string` and
+% `salt`, adds the `suffix` and looks into the directory `dir`, whether a
+% file with such a name exists. If it does not, it gets created with
+% `transform(string)` as its content. The filename is then returned.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.cache(dir, string, salt, transform, suffix)
+ local digest = md5.sumhexa(string .. (salt or ""))
+ local name = util.pathname(dir, digest .. suffix)
+ local file = io.open(name, "r")
+ if file == nil then -- If no cache entry exists, then create a new one.
+ local file = assert(io.open(name, "w"))
+ local result = string
+ if transform ~= nil then
+ result = transform(result)
+ end
+ assert(file:write(result))
+ assert(file:close())
+ end
+ return name
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.table_copy} method creates a shallow copy of a table `t`
+% and its metatable.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.table_copy(t)
+ local u = { }
+ for k, v in pairs(t) do u[k] = v end
+ return setmetatable(u, getmetatable(t))
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.expand_tabs_in_line} expands tabs in string `s`. If
+% `tabstop` is specified, it is used as the tab stop width. Otherwise,
+% the tab stop width of 4 characters is used. The method is a copy of the tab
+% expansion algorithm from @ierusalimschy13 [Chapter 21].
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.expand_tabs_in_line(s, tabstop)
+ local tab = tabstop or 4
+ local corr = 0
+ return (s:gsub("()\t", function(p)
+ local sp = tab - (p - 1 + corr) % tab
+ corr = corr - 1 + sp
+ return string.rep(" ", sp)
+ end))
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.walk} method walks a rope `t`, applying a function `f`
+% to each leaf element in order. A rope is an array whose elements may be
+% ropes, strings, numbers, or functions. If a leaf element is a function, call
+% it and get the return value before proceeding.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.walk(t, f)
+ local typ = type(t)
+ if typ == "string" then
+ f(t)
+ elseif typ == "table" then
+ local i = 1
+ local n
+ n = t[i]
+ while n do
+ util.walk(n, f)
+ i = i + 1
+ n = t[i]
+ end
+ elseif typ == "function" then
+ local ok, val = pcall(t)
+ if ok then
+ util.walk(val,f)
+ end
+ else
+ f(tostring(t))
+ end
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.flatten} method flattens an array `ary` that does not
+% contain cycles and returns the result.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.flatten(ary)
+ local new = {}
+ for _,v in ipairs(ary) do
+ if type(v) == "table" then
+ for _,w in ipairs(util.flatten(v)) do
+ new[#new + 1] = w
+ end
+ else
+ new[#new + 1] = v
+ end
+ end
+ return new
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.rope_to_string} method converts a rope `rope` to a
+% string and returns it. For the definition of a rope, see the definition of
+% the \luam{util.walk} method.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.rope_to_string(rope)
+ local buffer = {}
+ util.walk(rope, function(x) buffer[#buffer + 1] = x end)
+ return table.concat(buffer)
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.rope_last} method retrieves the last item in a rope. For
+% the definition of a rope, see the definition of the \luam{util.walk} method.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.rope_last(rope)
+ if #rope == 0 then
+ return nil
+ else
+ local l = rope[#rope]
+ if type(l) == "table" then
+ return util.rope_last(l)
+ else
+ return l
+ end
+ end
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Given an array `ary` and a string `x`, the \luamdef{util.intersperse}
+% method returns an array `new`, such that `ary[i] == new[2*(i-1)+1]` and
+% `new[2*i] == x` for all $1\leq`i`\leq`#ary`$.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.intersperse(ary, x)
+ local new = {}
+ local l = #ary
+ for i,v in ipairs(ary) do
+ local n = #new
+ new[n + 1] = v
+ if i ~= l then
+ new[n + 2] = x
+ end
+ end
+ return new
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Given an array `ary` and a function `f`, the \luamdef{util.map} method
+% returns an array `new`, such that `new[i] == f(ary[i])` for all
+% $1\leq`i`\leq`#ary`$.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.map(ary, f)
+ local new = {}
+ for i,v in ipairs(ary) do
+ new[i] = f(v)
+ end
+ return new
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Given a table `char_escapes` mapping escapable characters to escaped
+% strings and optionally a table `string_escapes` mapping escapable strings
+% to escaped strings, the \luamdef{util.escaper} method returns an escaper
+% function that escapes all occurances of escapable strings and characters (in
+% this order).
+%
+% The method uses \pkg{LPeg}, which is faster than the Lua `string.gsub`
+% built-in method.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.escaper(char_escapes, string_escapes)
+% \end{macrocode}
+% \begin{markdown}
+% Build a string of escapable characters.
+% \end{markdown}
+% \begin{macrocode}
+ local char_escapes_list = ""
+ for i,_ in pairs(char_escapes) do
+ char_escapes_list = char_escapes_list .. i
+ end
+% \end{macrocode}
+% \begin{markdown}
+% Create an \pkg{LPeg} capture `escapable` that produces the escaped string
+% corresponding to the matched escapable character.
+% \end{markdown}
+% \begin{macrocode}
+ local escapable = S(char_escapes_list) / char_escapes
+% \end{macrocode}
+% \begin{markdown}
+% If `string_escapes` is provided, turn `escapable` into the
+% $$\sum^^B{(`k`, `v`)\in`string_escapes`}`P(k) / v` + `escapable`$$
+% capture that replaces any occurance of the string `k` with the string
+% `v` for each $(`k`, `v`)\in`string_escapes`$. Note that the pattern
+% summation is not commutative and its operands are inspected in the
+% summation order during the matching. As a corrolary, the strings always
+% take precedence over the characters.
+%
+% \end{markdown}
+% \begin{macrocode}
+ if string_escapes then
+ for k,v in pairs(string_escapes) do
+ escapable = P(k) / v + escapable
+ end
+ end
+% \end{macrocode}
+% \begin{markdown}
+% Create an \pkg{LPeg} capture `escape_string` that captures anything
+% `escapable` does and matches any other unmatched characters.
+% \end{markdown}
+% \begin{macrocode}
+ local escape_string = Cs((escapable + any)^0)
+% \end{macrocode}
+% \begin{markdown}
+% Return a function that matches the input string `s` against the
+% `escape_string` capture.
+% \end{markdown}
+% \begin{macrocode}
+ return function(s)
+ return lpeg.match(escape_string, s)
+ end
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{util.pathname} method produces a pathname out of a directory
+% name `dir` and a filename `file` and returns it.
+%
+% \end{markdown}
+% \begin{macrocode}
+function util.pathname(dir, file)
+ if #dir == 0 then
+ return file
+ else
+ return dir .. "/" .. file
+ end
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### HTML Entities
+% This section documents the \acro{HTML} entities recognized by the
+% markdown reader. These functions are encapsulated in the `entities`
+% object. The functions were originally located in the
+% `lunamark/entities.lua` file in the Lunamark Lua module.
+%
+% \end{markdown}
+% \begin{macrocode}
+local entities = {}
+
+local character_entities = {
+ ["Tab"] = 9,
+ ["NewLine"] = 10,
+ ["excl"] = 33,
+ ["quot"] = 34,
+ ["QUOT"] = 34,
+ ["num"] = 35,
+ ["dollar"] = 36,
+ ["percnt"] = 37,
+ ["amp"] = 38,
+ ["AMP"] = 38,
+ ["apos"] = 39,
+ ["lpar"] = 40,
+ ["rpar"] = 41,
+ ["ast"] = 42,
+ ["midast"] = 42,
+ ["plus"] = 43,
+ ["comma"] = 44,
+ ["period"] = 46,
+ ["sol"] = 47,
+ ["colon"] = 58,
+ ["semi"] = 59,
+ ["lt"] = 60,
+ ["LT"] = 60,
+ ["equals"] = 61,
+ ["gt"] = 62,
+ ["GT"] = 62,
+ ["quest"] = 63,
+ ["commat"] = 64,
+ ["lsqb"] = 91,
+ ["lbrack"] = 91,
+ ["bsol"] = 92,
+ ["rsqb"] = 93,
+ ["rbrack"] = 93,
+ ["Hat"] = 94,
+ ["lowbar"] = 95,
+ ["grave"] = 96,
+ ["DiacriticalGrave"] = 96,
+ ["lcub"] = 123,
+ ["lbrace"] = 123,
+ ["verbar"] = 124,
+ ["vert"] = 124,
+ ["VerticalLine"] = 124,
+ ["rcub"] = 125,
+ ["rbrace"] = 125,
+ ["nbsp"] = 160,
+ ["NonBreakingSpace"] = 160,
+ ["iexcl"] = 161,
+ ["cent"] = 162,
+ ["pound"] = 163,
+ ["curren"] = 164,
+ ["yen"] = 165,
+ ["brvbar"] = 166,
+ ["sect"] = 167,
+ ["Dot"] = 168,
+ ["die"] = 168,
+ ["DoubleDot"] = 168,
+ ["uml"] = 168,
+ ["copy"] = 169,
+ ["COPY"] = 169,
+ ["ordf"] = 170,
+ ["laquo"] = 171,
+ ["not"] = 172,
+ ["shy"] = 173,
+ ["reg"] = 174,
+ ["circledR"] = 174,
+ ["REG"] = 174,
+ ["macr"] = 175,
+ ["OverBar"] = 175,
+ ["strns"] = 175,
+ ["deg"] = 176,
+ ["plusmn"] = 177,
+ ["pm"] = 177,
+ ["PlusMinus"] = 177,
+ ["sup2"] = 178,
+ ["sup3"] = 179,
+ ["acute"] = 180,
+ ["DiacriticalAcute"] = 180,
+ ["micro"] = 181,
+ ["para"] = 182,
+ ["middot"] = 183,
+ ["centerdot"] = 183,
+ ["CenterDot"] = 183,
+ ["cedil"] = 184,
+ ["Cedilla"] = 184,
+ ["sup1"] = 185,
+ ["ordm"] = 186,
+ ["raquo"] = 187,
+ ["frac14"] = 188,
+ ["frac12"] = 189,
+ ["half"] = 189,
+ ["frac34"] = 190,
+ ["iquest"] = 191,
+ ["Agrave"] = 192,
+ ["Aacute"] = 193,
+ ["Acirc"] = 194,
+ ["Atilde"] = 195,
+ ["Auml"] = 196,
+ ["Aring"] = 197,
+ ["AElig"] = 198,
+ ["Ccedil"] = 199,
+ ["Egrave"] = 200,
+ ["Eacute"] = 201,
+ ["Ecirc"] = 202,
+ ["Euml"] = 203,
+ ["Igrave"] = 204,
+ ["Iacute"] = 205,
+ ["Icirc"] = 206,
+ ["Iuml"] = 207,
+ ["ETH"] = 208,
+ ["Ntilde"] = 209,
+ ["Ograve"] = 210,
+ ["Oacute"] = 211,
+ ["Ocirc"] = 212,
+ ["Otilde"] = 213,
+ ["Ouml"] = 214,
+ ["times"] = 215,
+ ["Oslash"] = 216,
+ ["Ugrave"] = 217,
+ ["Uacute"] = 218,
+ ["Ucirc"] = 219,
+ ["Uuml"] = 220,
+ ["Yacute"] = 221,
+ ["THORN"] = 222,
+ ["szlig"] = 223,
+ ["agrave"] = 224,
+ ["aacute"] = 225,
+ ["acirc"] = 226,
+ ["atilde"] = 227,
+ ["auml"] = 228,
+ ["aring"] = 229,
+ ["aelig"] = 230,
+ ["ccedil"] = 231,
+ ["egrave"] = 232,
+ ["eacute"] = 233,
+ ["ecirc"] = 234,
+ ["euml"] = 235,
+ ["igrave"] = 236,
+ ["iacute"] = 237,
+ ["icirc"] = 238,
+ ["iuml"] = 239,
+ ["eth"] = 240,
+ ["ntilde"] = 241,
+ ["ograve"] = 242,
+ ["oacute"] = 243,
+ ["ocirc"] = 244,
+ ["otilde"] = 245,
+ ["ouml"] = 246,
+ ["divide"] = 247,
+ ["div"] = 247,
+ ["oslash"] = 248,
+ ["ugrave"] = 249,
+ ["uacute"] = 250,
+ ["ucirc"] = 251,
+ ["uuml"] = 252,
+ ["yacute"] = 253,
+ ["thorn"] = 254,
+ ["yuml"] = 255,
+ ["Amacr"] = 256,
+ ["amacr"] = 257,
+ ["Abreve"] = 258,
+ ["abreve"] = 259,
+ ["Aogon"] = 260,
+ ["aogon"] = 261,
+ ["Cacute"] = 262,
+ ["cacute"] = 263,
+ ["Ccirc"] = 264,
+ ["ccirc"] = 265,
+ ["Cdot"] = 266,
+ ["cdot"] = 267,
+ ["Ccaron"] = 268,
+ ["ccaron"] = 269,
+ ["Dcaron"] = 270,
+ ["dcaron"] = 271,
+ ["Dstrok"] = 272,
+ ["dstrok"] = 273,
+ ["Emacr"] = 274,
+ ["emacr"] = 275,
+ ["Edot"] = 278,
+ ["edot"] = 279,
+ ["Eogon"] = 280,
+ ["eogon"] = 281,
+ ["Ecaron"] = 282,
+ ["ecaron"] = 283,
+ ["Gcirc"] = 284,
+ ["gcirc"] = 285,
+ ["Gbreve"] = 286,
+ ["gbreve"] = 287,
+ ["Gdot"] = 288,
+ ["gdot"] = 289,
+ ["Gcedil"] = 290,
+ ["Hcirc"] = 292,
+ ["hcirc"] = 293,
+ ["Hstrok"] = 294,
+ ["hstrok"] = 295,
+ ["Itilde"] = 296,
+ ["itilde"] = 297,
+ ["Imacr"] = 298,
+ ["imacr"] = 299,
+ ["Iogon"] = 302,
+ ["iogon"] = 303,
+ ["Idot"] = 304,
+ ["imath"] = 305,
+ ["inodot"] = 305,
+ ["IJlig"] = 306,
+ ["ijlig"] = 307,
+ ["Jcirc"] = 308,
+ ["jcirc"] = 309,
+ ["Kcedil"] = 310,
+ ["kcedil"] = 311,
+ ["kgreen"] = 312,
+ ["Lacute"] = 313,
+ ["lacute"] = 314,
+ ["Lcedil"] = 315,
+ ["lcedil"] = 316,
+ ["Lcaron"] = 317,
+ ["lcaron"] = 318,
+ ["Lmidot"] = 319,
+ ["lmidot"] = 320,
+ ["Lstrok"] = 321,
+ ["lstrok"] = 322,
+ ["Nacute"] = 323,
+ ["nacute"] = 324,
+ ["Ncedil"] = 325,
+ ["ncedil"] = 326,
+ ["Ncaron"] = 327,
+ ["ncaron"] = 328,
+ ["napos"] = 329,
+ ["ENG"] = 330,
+ ["eng"] = 331,
+ ["Omacr"] = 332,
+ ["omacr"] = 333,
+ ["Odblac"] = 336,
+ ["odblac"] = 337,
+ ["OElig"] = 338,
+ ["oelig"] = 339,
+ ["Racute"] = 340,
+ ["racute"] = 341,
+ ["Rcedil"] = 342,
+ ["rcedil"] = 343,
+ ["Rcaron"] = 344,
+ ["rcaron"] = 345,
+ ["Sacute"] = 346,
+ ["sacute"] = 347,
+ ["Scirc"] = 348,
+ ["scirc"] = 349,
+ ["Scedil"] = 350,
+ ["scedil"] = 351,
+ ["Scaron"] = 352,
+ ["scaron"] = 353,
+ ["Tcedil"] = 354,
+ ["tcedil"] = 355,
+ ["Tcaron"] = 356,
+ ["tcaron"] = 357,
+ ["Tstrok"] = 358,
+ ["tstrok"] = 359,
+ ["Utilde"] = 360,
+ ["utilde"] = 361,
+ ["Umacr"] = 362,
+ ["umacr"] = 363,
+ ["Ubreve"] = 364,
+ ["ubreve"] = 365,
+ ["Uring"] = 366,
+ ["uring"] = 367,
+ ["Udblac"] = 368,
+ ["udblac"] = 369,
+ ["Uogon"] = 370,
+ ["uogon"] = 371,
+ ["Wcirc"] = 372,
+ ["wcirc"] = 373,
+ ["Ycirc"] = 374,
+ ["ycirc"] = 375,
+ ["Yuml"] = 376,
+ ["Zacute"] = 377,
+ ["zacute"] = 378,
+ ["Zdot"] = 379,
+ ["zdot"] = 380,
+ ["Zcaron"] = 381,
+ ["zcaron"] = 382,
+ ["fnof"] = 402,
+ ["imped"] = 437,
+ ["gacute"] = 501,
+ ["jmath"] = 567,
+ ["circ"] = 710,
+ ["caron"] = 711,
+ ["Hacek"] = 711,
+ ["breve"] = 728,
+ ["Breve"] = 728,
+ ["dot"] = 729,
+ ["DiacriticalDot"] = 729,
+ ["ring"] = 730,
+ ["ogon"] = 731,
+ ["tilde"] = 732,
+ ["DiacriticalTilde"] = 732,
+ ["dblac"] = 733,
+ ["DiacriticalDoubleAcute"] = 733,
+ ["DownBreve"] = 785,
+ ["UnderBar"] = 818,
+ ["Alpha"] = 913,
+ ["Beta"] = 914,
+ ["Gamma"] = 915,
+ ["Delta"] = 916,
+ ["Epsilon"] = 917,
+ ["Zeta"] = 918,
+ ["Eta"] = 919,
+ ["Theta"] = 920,
+ ["Iota"] = 921,
+ ["Kappa"] = 922,
+ ["Lambda"] = 923,
+ ["Mu"] = 924,
+ ["Nu"] = 925,
+ ["Xi"] = 926,
+ ["Omicron"] = 927,
+ ["Pi"] = 928,
+ ["Rho"] = 929,
+ ["Sigma"] = 931,
+ ["Tau"] = 932,
+ ["Upsilon"] = 933,
+ ["Phi"] = 934,
+ ["Chi"] = 935,
+ ["Psi"] = 936,
+ ["Omega"] = 937,
+ ["alpha"] = 945,
+ ["beta"] = 946,
+ ["gamma"] = 947,
+ ["delta"] = 948,
+ ["epsiv"] = 949,
+ ["varepsilon"] = 949,
+ ["epsilon"] = 949,
+ ["zeta"] = 950,
+ ["eta"] = 951,
+ ["theta"] = 952,
+ ["iota"] = 953,
+ ["kappa"] = 954,
+ ["lambda"] = 955,
+ ["mu"] = 956,
+ ["nu"] = 957,
+ ["xi"] = 958,
+ ["omicron"] = 959,
+ ["pi"] = 960,
+ ["rho"] = 961,
+ ["sigmav"] = 962,
+ ["varsigma"] = 962,
+ ["sigmaf"] = 962,
+ ["sigma"] = 963,
+ ["tau"] = 964,
+ ["upsi"] = 965,
+ ["upsilon"] = 965,
+ ["phi"] = 966,
+ ["phiv"] = 966,
+ ["varphi"] = 966,
+ ["chi"] = 967,
+ ["psi"] = 968,
+ ["omega"] = 969,
+ ["thetav"] = 977,
+ ["vartheta"] = 977,
+ ["thetasym"] = 977,
+ ["Upsi"] = 978,
+ ["upsih"] = 978,
+ ["straightphi"] = 981,
+ ["piv"] = 982,
+ ["varpi"] = 982,
+ ["Gammad"] = 988,
+ ["gammad"] = 989,
+ ["digamma"] = 989,
+ ["kappav"] = 1008,
+ ["varkappa"] = 1008,
+ ["rhov"] = 1009,
+ ["varrho"] = 1009,
+ ["epsi"] = 1013,
+ ["straightepsilon"] = 1013,
+ ["bepsi"] = 1014,
+ ["backepsilon"] = 1014,
+ ["IOcy"] = 1025,
+ ["DJcy"] = 1026,
+ ["GJcy"] = 1027,
+ ["Jukcy"] = 1028,
+ ["DScy"] = 1029,
+ ["Iukcy"] = 1030,
+ ["YIcy"] = 1031,
+ ["Jsercy"] = 1032,
+ ["LJcy"] = 1033,
+ ["NJcy"] = 1034,
+ ["TSHcy"] = 1035,
+ ["KJcy"] = 1036,
+ ["Ubrcy"] = 1038,
+ ["DZcy"] = 1039,
+ ["Acy"] = 1040,
+ ["Bcy"] = 1041,
+ ["Vcy"] = 1042,
+ ["Gcy"] = 1043,
+ ["Dcy"] = 1044,
+ ["IEcy"] = 1045,
+ ["ZHcy"] = 1046,
+ ["Zcy"] = 1047,
+ ["Icy"] = 1048,
+ ["Jcy"] = 1049,
+ ["Kcy"] = 1050,
+ ["Lcy"] = 1051,
+ ["Mcy"] = 1052,
+ ["Ncy"] = 1053,
+ ["Ocy"] = 1054,
+ ["Pcy"] = 1055,
+ ["Rcy"] = 1056,
+ ["Scy"] = 1057,
+ ["Tcy"] = 1058,
+ ["Ucy"] = 1059,
+ ["Fcy"] = 1060,
+ ["KHcy"] = 1061,
+ ["TScy"] = 1062,
+ ["CHcy"] = 1063,
+ ["SHcy"] = 1064,
+ ["SHCHcy"] = 1065,
+ ["HARDcy"] = 1066,
+ ["Ycy"] = 1067,
+ ["SOFTcy"] = 1068,
+ ["Ecy"] = 1069,
+ ["YUcy"] = 1070,
+ ["YAcy"] = 1071,
+ ["acy"] = 1072,
+ ["bcy"] = 1073,
+ ["vcy"] = 1074,
+ ["gcy"] = 1075,
+ ["dcy"] = 1076,
+ ["iecy"] = 1077,
+ ["zhcy"] = 1078,
+ ["zcy"] = 1079,
+ ["icy"] = 1080,
+ ["jcy"] = 1081,
+ ["kcy"] = 1082,
+ ["lcy"] = 1083,
+ ["mcy"] = 1084,
+ ["ncy"] = 1085,
+ ["ocy"] = 1086,
+ ["pcy"] = 1087,
+ ["rcy"] = 1088,
+ ["scy"] = 1089,
+ ["tcy"] = 1090,
+ ["ucy"] = 1091,
+ ["fcy"] = 1092,
+ ["khcy"] = 1093,
+ ["tscy"] = 1094,
+ ["chcy"] = 1095,
+ ["shcy"] = 1096,
+ ["shchcy"] = 1097,
+ ["hardcy"] = 1098,
+ ["ycy"] = 1099,
+ ["softcy"] = 1100,
+ ["ecy"] = 1101,
+ ["yucy"] = 1102,
+ ["yacy"] = 1103,
+ ["iocy"] = 1105,
+ ["djcy"] = 1106,
+ ["gjcy"] = 1107,
+ ["jukcy"] = 1108,
+ ["dscy"] = 1109,
+ ["iukcy"] = 1110,
+ ["yicy"] = 1111,
+ ["jsercy"] = 1112,
+ ["ljcy"] = 1113,
+ ["njcy"] = 1114,
+ ["tshcy"] = 1115,
+ ["kjcy"] = 1116,
+ ["ubrcy"] = 1118,
+ ["dzcy"] = 1119,
+ ["ensp"] = 8194,
+ ["emsp"] = 8195,
+ ["emsp13"] = 8196,
+ ["emsp14"] = 8197,
+ ["numsp"] = 8199,
+ ["puncsp"] = 8200,
+ ["thinsp"] = 8201,
+ ["ThinSpace"] = 8201,
+ ["hairsp"] = 8202,
+ ["VeryThinSpace"] = 8202,
+ ["ZeroWidthSpace"] = 8203,
+ ["NegativeVeryThinSpace"] = 8203,
+ ["NegativeThinSpace"] = 8203,
+ ["NegativeMediumSpace"] = 8203,
+ ["NegativeThickSpace"] = 8203,
+ ["zwnj"] = 8204,
+ ["zwj"] = 8205,
+ ["lrm"] = 8206,
+ ["rlm"] = 8207,
+ ["hyphen"] = 8208,
+ ["dash"] = 8208,
+ ["ndash"] = 8211,
+ ["mdash"] = 8212,
+ ["horbar"] = 8213,
+ ["Verbar"] = 8214,
+ ["Vert"] = 8214,
+ ["lsquo"] = 8216,
+ ["OpenCurlyQuote"] = 8216,
+ ["rsquo"] = 8217,
+ ["rsquor"] = 8217,
+ ["CloseCurlyQuote"] = 8217,
+ ["lsquor"] = 8218,
+ ["sbquo"] = 8218,
+ ["ldquo"] = 8220,
+ ["OpenCurlyDoubleQuote"] = 8220,
+ ["rdquo"] = 8221,
+ ["rdquor"] = 8221,
+ ["CloseCurlyDoubleQuote"] = 8221,
+ ["ldquor"] = 8222,
+ ["bdquo"] = 8222,
+ ["dagger"] = 8224,
+ ["Dagger"] = 8225,
+ ["ddagger"] = 8225,
+ ["bull"] = 8226,
+ ["bullet"] = 8226,
+ ["nldr"] = 8229,
+ ["hellip"] = 8230,
+ ["mldr"] = 8230,
+ ["permil"] = 8240,
+ ["pertenk"] = 8241,
+ ["prime"] = 8242,
+ ["Prime"] = 8243,
+ ["tprime"] = 8244,
+ ["bprime"] = 8245,
+ ["backprime"] = 8245,
+ ["lsaquo"] = 8249,
+ ["rsaquo"] = 8250,
+ ["oline"] = 8254,
+ ["caret"] = 8257,
+ ["hybull"] = 8259,
+ ["frasl"] = 8260,
+ ["bsemi"] = 8271,
+ ["qprime"] = 8279,
+ ["MediumSpace"] = 8287,
+ ["NoBreak"] = 8288,
+ ["ApplyFunction"] = 8289,
+ ["af"] = 8289,
+ ["InvisibleTimes"] = 8290,
+ ["it"] = 8290,
+ ["InvisibleComma"] = 8291,
+ ["ic"] = 8291,
+ ["euro"] = 8364,
+ ["tdot"] = 8411,
+ ["TripleDot"] = 8411,
+ ["DotDot"] = 8412,
+ ["Copf"] = 8450,
+ ["complexes"] = 8450,
+ ["incare"] = 8453,
+ ["gscr"] = 8458,
+ ["hamilt"] = 8459,
+ ["HilbertSpace"] = 8459,
+ ["Hscr"] = 8459,
+ ["Hfr"] = 8460,
+ ["Poincareplane"] = 8460,
+ ["quaternions"] = 8461,
+ ["Hopf"] = 8461,
+ ["planckh"] = 8462,
+ ["planck"] = 8463,
+ ["hbar"] = 8463,
+ ["plankv"] = 8463,
+ ["hslash"] = 8463,
+ ["Iscr"] = 8464,
+ ["imagline"] = 8464,
+ ["image"] = 8465,
+ ["Im"] = 8465,
+ ["imagpart"] = 8465,
+ ["Ifr"] = 8465,
+ ["Lscr"] = 8466,
+ ["lagran"] = 8466,
+ ["Laplacetrf"] = 8466,
+ ["ell"] = 8467,
+ ["Nopf"] = 8469,
+ ["naturals"] = 8469,
+ ["numero"] = 8470,
+ ["copysr"] = 8471,
+ ["weierp"] = 8472,
+ ["wp"] = 8472,
+ ["Popf"] = 8473,
+ ["primes"] = 8473,
+ ["rationals"] = 8474,
+ ["Qopf"] = 8474,
+ ["Rscr"] = 8475,
+ ["realine"] = 8475,
+ ["real"] = 8476,
+ ["Re"] = 8476,
+ ["realpart"] = 8476,
+ ["Rfr"] = 8476,
+ ["reals"] = 8477,
+ ["Ropf"] = 8477,
+ ["rx"] = 8478,
+ ["trade"] = 8482,
+ ["TRADE"] = 8482,
+ ["integers"] = 8484,
+ ["Zopf"] = 8484,
+ ["ohm"] = 8486,
+ ["mho"] = 8487,
+ ["Zfr"] = 8488,
+ ["zeetrf"] = 8488,
+ ["iiota"] = 8489,
+ ["angst"] = 8491,
+ ["bernou"] = 8492,
+ ["Bernoullis"] = 8492,
+ ["Bscr"] = 8492,
+ ["Cfr"] = 8493,
+ ["Cayleys"] = 8493,
+ ["escr"] = 8495,
+ ["Escr"] = 8496,
+ ["expectation"] = 8496,
+ ["Fscr"] = 8497,
+ ["Fouriertrf"] = 8497,
+ ["phmmat"] = 8499,
+ ["Mellintrf"] = 8499,
+ ["Mscr"] = 8499,
+ ["order"] = 8500,
+ ["orderof"] = 8500,
+ ["oscr"] = 8500,
+ ["alefsym"] = 8501,
+ ["aleph"] = 8501,
+ ["beth"] = 8502,
+ ["gimel"] = 8503,
+ ["daleth"] = 8504,
+ ["CapitalDifferentialD"] = 8517,
+ ["DD"] = 8517,
+ ["DifferentialD"] = 8518,
+ ["dd"] = 8518,
+ ["ExponentialE"] = 8519,
+ ["exponentiale"] = 8519,
+ ["ee"] = 8519,
+ ["ImaginaryI"] = 8520,
+ ["ii"] = 8520,
+ ["frac13"] = 8531,
+ ["frac23"] = 8532,
+ ["frac15"] = 8533,
+ ["frac25"] = 8534,
+ ["frac35"] = 8535,
+ ["frac45"] = 8536,
+ ["frac16"] = 8537,
+ ["frac56"] = 8538,
+ ["frac18"] = 8539,
+ ["frac38"] = 8540,
+ ["frac58"] = 8541,
+ ["frac78"] = 8542,
+ ["larr"] = 8592,
+ ["leftarrow"] = 8592,
+ ["LeftArrow"] = 8592,
+ ["slarr"] = 8592,
+ ["ShortLeftArrow"] = 8592,
+ ["uarr"] = 8593,
+ ["uparrow"] = 8593,
+ ["UpArrow"] = 8593,
+ ["ShortUpArrow"] = 8593,
+ ["rarr"] = 8594,
+ ["rightarrow"] = 8594,
+ ["RightArrow"] = 8594,
+ ["srarr"] = 8594,
+ ["ShortRightArrow"] = 8594,
+ ["darr"] = 8595,
+ ["downarrow"] = 8595,
+ ["DownArrow"] = 8595,
+ ["ShortDownArrow"] = 8595,
+ ["harr"] = 8596,
+ ["leftrightarrow"] = 8596,
+ ["LeftRightArrow"] = 8596,
+ ["varr"] = 8597,
+ ["updownarrow"] = 8597,
+ ["UpDownArrow"] = 8597,
+ ["nwarr"] = 8598,
+ ["UpperLeftArrow"] = 8598,
+ ["nwarrow"] = 8598,
+ ["nearr"] = 8599,
+ ["UpperRightArrow"] = 8599,
+ ["nearrow"] = 8599,
+ ["searr"] = 8600,
+ ["searrow"] = 8600,
+ ["LowerRightArrow"] = 8600,
+ ["swarr"] = 8601,
+ ["swarrow"] = 8601,
+ ["LowerLeftArrow"] = 8601,
+ ["nlarr"] = 8602,
+ ["nleftarrow"] = 8602,
+ ["nrarr"] = 8603,
+ ["nrightarrow"] = 8603,
+ ["rarrw"] = 8605,
+ ["rightsquigarrow"] = 8605,
+ ["Larr"] = 8606,
+ ["twoheadleftarrow"] = 8606,
+ ["Uarr"] = 8607,
+ ["Rarr"] = 8608,
+ ["twoheadrightarrow"] = 8608,
+ ["Darr"] = 8609,
+ ["larrtl"] = 8610,
+ ["leftarrowtail"] = 8610,
+ ["rarrtl"] = 8611,
+ ["rightarrowtail"] = 8611,
+ ["LeftTeeArrow"] = 8612,
+ ["mapstoleft"] = 8612,
+ ["UpTeeArrow"] = 8613,
+ ["mapstoup"] = 8613,
+ ["map"] = 8614,
+ ["RightTeeArrow"] = 8614,
+ ["mapsto"] = 8614,
+ ["DownTeeArrow"] = 8615,
+ ["mapstodown"] = 8615,
+ ["larrhk"] = 8617,
+ ["hookleftarrow"] = 8617,
+ ["rarrhk"] = 8618,
+ ["hookrightarrow"] = 8618,
+ ["larrlp"] = 8619,
+ ["looparrowleft"] = 8619,
+ ["rarrlp"] = 8620,
+ ["looparrowright"] = 8620,
+ ["harrw"] = 8621,
+ ["leftrightsquigarrow"] = 8621,
+ ["nharr"] = 8622,
+ ["nleftrightarrow"] = 8622,
+ ["lsh"] = 8624,
+ ["Lsh"] = 8624,
+ ["rsh"] = 8625,
+ ["Rsh"] = 8625,
+ ["ldsh"] = 8626,
+ ["rdsh"] = 8627,
+ ["crarr"] = 8629,
+ ["cularr"] = 8630,
+ ["curvearrowleft"] = 8630,
+ ["curarr"] = 8631,
+ ["curvearrowright"] = 8631,
+ ["olarr"] = 8634,
+ ["circlearrowleft"] = 8634,
+ ["orarr"] = 8635,
+ ["circlearrowright"] = 8635,
+ ["lharu"] = 8636,
+ ["LeftVector"] = 8636,
+ ["leftharpoonup"] = 8636,
+ ["lhard"] = 8637,
+ ["leftharpoondown"] = 8637,
+ ["DownLeftVector"] = 8637,
+ ["uharr"] = 8638,
+ ["upharpoonright"] = 8638,
+ ["RightUpVector"] = 8638,
+ ["uharl"] = 8639,
+ ["upharpoonleft"] = 8639,
+ ["LeftUpVector"] = 8639,
+ ["rharu"] = 8640,
+ ["RightVector"] = 8640,
+ ["rightharpoonup"] = 8640,
+ ["rhard"] = 8641,
+ ["rightharpoondown"] = 8641,
+ ["DownRightVector"] = 8641,
+ ["dharr"] = 8642,
+ ["RightDownVector"] = 8642,
+ ["downharpoonright"] = 8642,
+ ["dharl"] = 8643,
+ ["LeftDownVector"] = 8643,
+ ["downharpoonleft"] = 8643,
+ ["rlarr"] = 8644,
+ ["rightleftarrows"] = 8644,
+ ["RightArrowLeftArrow"] = 8644,
+ ["udarr"] = 8645,
+ ["UpArrowDownArrow"] = 8645,
+ ["lrarr"] = 8646,
+ ["leftrightarrows"] = 8646,
+ ["LeftArrowRightArrow"] = 8646,
+ ["llarr"] = 8647,
+ ["leftleftarrows"] = 8647,
+ ["uuarr"] = 8648,
+ ["upuparrows"] = 8648,
+ ["rrarr"] = 8649,
+ ["rightrightarrows"] = 8649,
+ ["ddarr"] = 8650,
+ ["downdownarrows"] = 8650,
+ ["lrhar"] = 8651,
+ ["ReverseEquilibrium"] = 8651,
+ ["leftrightharpoons"] = 8651,
+ ["rlhar"] = 8652,
+ ["rightleftharpoons"] = 8652,
+ ["Equilibrium"] = 8652,
+ ["nlArr"] = 8653,
+ ["nLeftarrow"] = 8653,
+ ["nhArr"] = 8654,
+ ["nLeftrightarrow"] = 8654,
+ ["nrArr"] = 8655,
+ ["nRightarrow"] = 8655,
+ ["lArr"] = 8656,
+ ["Leftarrow"] = 8656,
+ ["DoubleLeftArrow"] = 8656,
+ ["uArr"] = 8657,
+ ["Uparrow"] = 8657,
+ ["DoubleUpArrow"] = 8657,
+ ["rArr"] = 8658,
+ ["Rightarrow"] = 8658,
+ ["Implies"] = 8658,
+ ["DoubleRightArrow"] = 8658,
+ ["dArr"] = 8659,
+ ["Downarrow"] = 8659,
+ ["DoubleDownArrow"] = 8659,
+ ["hArr"] = 8660,
+ ["Leftrightarrow"] = 8660,
+ ["DoubleLeftRightArrow"] = 8660,
+ ["iff"] = 8660,
+ ["vArr"] = 8661,
+ ["Updownarrow"] = 8661,
+ ["DoubleUpDownArrow"] = 8661,
+ ["nwArr"] = 8662,
+ ["neArr"] = 8663,
+ ["seArr"] = 8664,
+ ["swArr"] = 8665,
+ ["lAarr"] = 8666,
+ ["Lleftarrow"] = 8666,
+ ["rAarr"] = 8667,
+ ["Rrightarrow"] = 8667,
+ ["zigrarr"] = 8669,
+ ["larrb"] = 8676,
+ ["LeftArrowBar"] = 8676,
+ ["rarrb"] = 8677,
+ ["RightArrowBar"] = 8677,
+ ["duarr"] = 8693,
+ ["DownArrowUpArrow"] = 8693,
+ ["loarr"] = 8701,
+ ["roarr"] = 8702,
+ ["hoarr"] = 8703,
+ ["forall"] = 8704,
+ ["ForAll"] = 8704,
+ ["comp"] = 8705,
+ ["complement"] = 8705,
+ ["part"] = 8706,
+ ["PartialD"] = 8706,
+ ["exist"] = 8707,
+ ["Exists"] = 8707,
+ ["nexist"] = 8708,
+ ["NotExists"] = 8708,
+ ["nexists"] = 8708,
+ ["empty"] = 8709,
+ ["emptyset"] = 8709,
+ ["emptyv"] = 8709,
+ ["varnothing"] = 8709,
+ ["nabla"] = 8711,
+ ["Del"] = 8711,
+ ["isin"] = 8712,
+ ["isinv"] = 8712,
+ ["Element"] = 8712,
+ ["in"] = 8712,
+ ["notin"] = 8713,
+ ["NotElement"] = 8713,
+ ["notinva"] = 8713,
+ ["niv"] = 8715,
+ ["ReverseElement"] = 8715,
+ ["ni"] = 8715,
+ ["SuchThat"] = 8715,
+ ["notni"] = 8716,
+ ["notniva"] = 8716,
+ ["NotReverseElement"] = 8716,
+ ["prod"] = 8719,
+ ["Product"] = 8719,
+ ["coprod"] = 8720,
+ ["Coproduct"] = 8720,
+ ["sum"] = 8721,
+ ["Sum"] = 8721,
+ ["minus"] = 8722,
+ ["mnplus"] = 8723,
+ ["mp"] = 8723,
+ ["MinusPlus"] = 8723,
+ ["plusdo"] = 8724,
+ ["dotplus"] = 8724,
+ ["setmn"] = 8726,
+ ["setminus"] = 8726,
+ ["Backslash"] = 8726,
+ ["ssetmn"] = 8726,
+ ["smallsetminus"] = 8726,
+ ["lowast"] = 8727,
+ ["compfn"] = 8728,
+ ["SmallCircle"] = 8728,
+ ["radic"] = 8730,
+ ["Sqrt"] = 8730,
+ ["prop"] = 8733,
+ ["propto"] = 8733,
+ ["Proportional"] = 8733,
+ ["vprop"] = 8733,
+ ["varpropto"] = 8733,
+ ["infin"] = 8734,
+ ["angrt"] = 8735,
+ ["ang"] = 8736,
+ ["angle"] = 8736,
+ ["angmsd"] = 8737,
+ ["measuredangle"] = 8737,
+ ["angsph"] = 8738,
+ ["mid"] = 8739,
+ ["VerticalBar"] = 8739,
+ ["smid"] = 8739,
+ ["shortmid"] = 8739,
+ ["nmid"] = 8740,
+ ["NotVerticalBar"] = 8740,
+ ["nsmid"] = 8740,
+ ["nshortmid"] = 8740,
+ ["par"] = 8741,
+ ["parallel"] = 8741,
+ ["DoubleVerticalBar"] = 8741,
+ ["spar"] = 8741,
+ ["shortparallel"] = 8741,
+ ["npar"] = 8742,
+ ["nparallel"] = 8742,
+ ["NotDoubleVerticalBar"] = 8742,
+ ["nspar"] = 8742,
+ ["nshortparallel"] = 8742,
+ ["and"] = 8743,
+ ["wedge"] = 8743,
+ ["or"] = 8744,
+ ["vee"] = 8744,
+ ["cap"] = 8745,
+ ["cup"] = 8746,
+ ["int"] = 8747,
+ ["Integral"] = 8747,
+ ["Int"] = 8748,
+ ["tint"] = 8749,
+ ["iiint"] = 8749,
+ ["conint"] = 8750,
+ ["oint"] = 8750,
+ ["ContourIntegral"] = 8750,
+ ["Conint"] = 8751,
+ ["DoubleContourIntegral"] = 8751,
+ ["Cconint"] = 8752,
+ ["cwint"] = 8753,
+ ["cwconint"] = 8754,
+ ["ClockwiseContourIntegral"] = 8754,
+ ["awconint"] = 8755,
+ ["CounterClockwiseContourIntegral"] = 8755,
+ ["there4"] = 8756,
+ ["therefore"] = 8756,
+ ["Therefore"] = 8756,
+ ["becaus"] = 8757,
+ ["because"] = 8757,
+ ["Because"] = 8757,
+ ["ratio"] = 8758,
+ ["Colon"] = 8759,
+ ["Proportion"] = 8759,
+ ["minusd"] = 8760,
+ ["dotminus"] = 8760,
+ ["mDDot"] = 8762,
+ ["homtht"] = 8763,
+ ["sim"] = 8764,
+ ["Tilde"] = 8764,
+ ["thksim"] = 8764,
+ ["thicksim"] = 8764,
+ ["bsim"] = 8765,
+ ["backsim"] = 8765,
+ ["ac"] = 8766,
+ ["mstpos"] = 8766,
+ ["acd"] = 8767,
+ ["wreath"] = 8768,
+ ["VerticalTilde"] = 8768,
+ ["wr"] = 8768,
+ ["nsim"] = 8769,
+ ["NotTilde"] = 8769,
+ ["esim"] = 8770,
+ ["EqualTilde"] = 8770,
+ ["eqsim"] = 8770,
+ ["sime"] = 8771,
+ ["TildeEqual"] = 8771,
+ ["simeq"] = 8771,
+ ["nsime"] = 8772,
+ ["nsimeq"] = 8772,
+ ["NotTildeEqual"] = 8772,
+ ["cong"] = 8773,
+ ["TildeFullEqual"] = 8773,
+ ["simne"] = 8774,
+ ["ncong"] = 8775,
+ ["NotTildeFullEqual"] = 8775,
+ ["asymp"] = 8776,
+ ["ap"] = 8776,
+ ["TildeTilde"] = 8776,
+ ["approx"] = 8776,
+ ["thkap"] = 8776,
+ ["thickapprox"] = 8776,
+ ["nap"] = 8777,
+ ["NotTildeTilde"] = 8777,
+ ["napprox"] = 8777,
+ ["ape"] = 8778,
+ ["approxeq"] = 8778,
+ ["apid"] = 8779,
+ ["bcong"] = 8780,
+ ["backcong"] = 8780,
+ ["asympeq"] = 8781,
+ ["CupCap"] = 8781,
+ ["bump"] = 8782,
+ ["HumpDownHump"] = 8782,
+ ["Bumpeq"] = 8782,
+ ["bumpe"] = 8783,
+ ["HumpEqual"] = 8783,
+ ["bumpeq"] = 8783,
+ ["esdot"] = 8784,
+ ["DotEqual"] = 8784,
+ ["doteq"] = 8784,
+ ["eDot"] = 8785,
+ ["doteqdot"] = 8785,
+ ["efDot"] = 8786,
+ ["fallingdotseq"] = 8786,
+ ["erDot"] = 8787,
+ ["risingdotseq"] = 8787,
+ ["colone"] = 8788,
+ ["coloneq"] = 8788,
+ ["Assign"] = 8788,
+ ["ecolon"] = 8789,
+ ["eqcolon"] = 8789,
+ ["ecir"] = 8790,
+ ["eqcirc"] = 8790,
+ ["cire"] = 8791,
+ ["circeq"] = 8791,
+ ["wedgeq"] = 8793,
+ ["veeeq"] = 8794,
+ ["trie"] = 8796,
+ ["triangleq"] = 8796,
+ ["equest"] = 8799,
+ ["questeq"] = 8799,
+ ["ne"] = 8800,
+ ["NotEqual"] = 8800,
+ ["equiv"] = 8801,
+ ["Congruent"] = 8801,
+ ["nequiv"] = 8802,
+ ["NotCongruent"] = 8802,
+ ["le"] = 8804,
+ ["leq"] = 8804,
+ ["ge"] = 8805,
+ ["GreaterEqual"] = 8805,
+ ["geq"] = 8805,
+ ["lE"] = 8806,
+ ["LessFullEqual"] = 8806,
+ ["leqq"] = 8806,
+ ["gE"] = 8807,
+ ["GreaterFullEqual"] = 8807,
+ ["geqq"] = 8807,
+ ["lnE"] = 8808,
+ ["lneqq"] = 8808,
+ ["gnE"] = 8809,
+ ["gneqq"] = 8809,
+ ["Lt"] = 8810,
+ ["NestedLessLess"] = 8810,
+ ["ll"] = 8810,
+ ["Gt"] = 8811,
+ ["NestedGreaterGreater"] = 8811,
+ ["gg"] = 8811,
+ ["twixt"] = 8812,
+ ["between"] = 8812,
+ ["NotCupCap"] = 8813,
+ ["nlt"] = 8814,
+ ["NotLess"] = 8814,
+ ["nless"] = 8814,
+ ["ngt"] = 8815,
+ ["NotGreater"] = 8815,
+ ["ngtr"] = 8815,
+ ["nle"] = 8816,
+ ["NotLessEqual"] = 8816,
+ ["nleq"] = 8816,
+ ["nge"] = 8817,
+ ["NotGreaterEqual"] = 8817,
+ ["ngeq"] = 8817,
+ ["lsim"] = 8818,
+ ["LessTilde"] = 8818,
+ ["lesssim"] = 8818,
+ ["gsim"] = 8819,
+ ["gtrsim"] = 8819,
+ ["GreaterTilde"] = 8819,
+ ["nlsim"] = 8820,
+ ["NotLessTilde"] = 8820,
+ ["ngsim"] = 8821,
+ ["NotGreaterTilde"] = 8821,
+ ["lg"] = 8822,
+ ["lessgtr"] = 8822,
+ ["LessGreater"] = 8822,
+ ["gl"] = 8823,
+ ["gtrless"] = 8823,
+ ["GreaterLess"] = 8823,
+ ["ntlg"] = 8824,
+ ["NotLessGreater"] = 8824,
+ ["ntgl"] = 8825,
+ ["NotGreaterLess"] = 8825,
+ ["pr"] = 8826,
+ ["Precedes"] = 8826,
+ ["prec"] = 8826,
+ ["sc"] = 8827,
+ ["Succeeds"] = 8827,
+ ["succ"] = 8827,
+ ["prcue"] = 8828,
+ ["PrecedesSlantEqual"] = 8828,
+ ["preccurlyeq"] = 8828,
+ ["sccue"] = 8829,
+ ["SucceedsSlantEqual"] = 8829,
+ ["succcurlyeq"] = 8829,
+ ["prsim"] = 8830,
+ ["precsim"] = 8830,
+ ["PrecedesTilde"] = 8830,
+ ["scsim"] = 8831,
+ ["succsim"] = 8831,
+ ["SucceedsTilde"] = 8831,
+ ["npr"] = 8832,
+ ["nprec"] = 8832,
+ ["NotPrecedes"] = 8832,
+ ["nsc"] = 8833,
+ ["nsucc"] = 8833,
+ ["NotSucceeds"] = 8833,
+ ["sub"] = 8834,
+ ["subset"] = 8834,
+ ["sup"] = 8835,
+ ["supset"] = 8835,
+ ["Superset"] = 8835,
+ ["nsub"] = 8836,
+ ["nsup"] = 8837,
+ ["sube"] = 8838,
+ ["SubsetEqual"] = 8838,
+ ["subseteq"] = 8838,
+ ["supe"] = 8839,
+ ["supseteq"] = 8839,
+ ["SupersetEqual"] = 8839,
+ ["nsube"] = 8840,
+ ["nsubseteq"] = 8840,
+ ["NotSubsetEqual"] = 8840,
+ ["nsupe"] = 8841,
+ ["nsupseteq"] = 8841,
+ ["NotSupersetEqual"] = 8841,
+ ["subne"] = 8842,
+ ["subsetneq"] = 8842,
+ ["supne"] = 8843,
+ ["supsetneq"] = 8843,
+ ["cupdot"] = 8845,
+ ["uplus"] = 8846,
+ ["UnionPlus"] = 8846,
+ ["sqsub"] = 8847,
+ ["SquareSubset"] = 8847,
+ ["sqsubset"] = 8847,
+ ["sqsup"] = 8848,
+ ["SquareSuperset"] = 8848,
+ ["sqsupset"] = 8848,
+ ["sqsube"] = 8849,
+ ["SquareSubsetEqual"] = 8849,
+ ["sqsubseteq"] = 8849,
+ ["sqsupe"] = 8850,
+ ["SquareSupersetEqual"] = 8850,
+ ["sqsupseteq"] = 8850,
+ ["sqcap"] = 8851,
+ ["SquareIntersection"] = 8851,
+ ["sqcup"] = 8852,
+ ["SquareUnion"] = 8852,
+ ["oplus"] = 8853,
+ ["CirclePlus"] = 8853,
+ ["ominus"] = 8854,
+ ["CircleMinus"] = 8854,
+ ["otimes"] = 8855,
+ ["CircleTimes"] = 8855,
+ ["osol"] = 8856,
+ ["odot"] = 8857,
+ ["CircleDot"] = 8857,
+ ["ocir"] = 8858,
+ ["circledcirc"] = 8858,
+ ["oast"] = 8859,
+ ["circledast"] = 8859,
+ ["odash"] = 8861,
+ ["circleddash"] = 8861,
+ ["plusb"] = 8862,
+ ["boxplus"] = 8862,
+ ["minusb"] = 8863,
+ ["boxminus"] = 8863,
+ ["timesb"] = 8864,
+ ["boxtimes"] = 8864,
+ ["sdotb"] = 8865,
+ ["dotsquare"] = 8865,
+ ["vdash"] = 8866,
+ ["RightTee"] = 8866,
+ ["dashv"] = 8867,
+ ["LeftTee"] = 8867,
+ ["top"] = 8868,
+ ["DownTee"] = 8868,
+ ["bottom"] = 8869,
+ ["bot"] = 8869,
+ ["perp"] = 8869,
+ ["UpTee"] = 8869,
+ ["models"] = 8871,
+ ["vDash"] = 8872,
+ ["DoubleRightTee"] = 8872,
+ ["Vdash"] = 8873,
+ ["Vvdash"] = 8874,
+ ["VDash"] = 8875,
+ ["nvdash"] = 8876,
+ ["nvDash"] = 8877,
+ ["nVdash"] = 8878,
+ ["nVDash"] = 8879,
+ ["prurel"] = 8880,
+ ["vltri"] = 8882,
+ ["vartriangleleft"] = 8882,
+ ["LeftTriangle"] = 8882,
+ ["vrtri"] = 8883,
+ ["vartriangleright"] = 8883,
+ ["RightTriangle"] = 8883,
+ ["ltrie"] = 8884,
+ ["trianglelefteq"] = 8884,
+ ["LeftTriangleEqual"] = 8884,
+ ["rtrie"] = 8885,
+ ["trianglerighteq"] = 8885,
+ ["RightTriangleEqual"] = 8885,
+ ["origof"] = 8886,
+ ["imof"] = 8887,
+ ["mumap"] = 8888,
+ ["multimap"] = 8888,
+ ["hercon"] = 8889,
+ ["intcal"] = 8890,
+ ["intercal"] = 8890,
+ ["veebar"] = 8891,
+ ["barvee"] = 8893,
+ ["angrtvb"] = 8894,
+ ["lrtri"] = 8895,
+ ["xwedge"] = 8896,
+ ["Wedge"] = 8896,
+ ["bigwedge"] = 8896,
+ ["xvee"] = 8897,
+ ["Vee"] = 8897,
+ ["bigvee"] = 8897,
+ ["xcap"] = 8898,
+ ["Intersection"] = 8898,
+ ["bigcap"] = 8898,
+ ["xcup"] = 8899,
+ ["Union"] = 8899,
+ ["bigcup"] = 8899,
+ ["diam"] = 8900,
+ ["diamond"] = 8900,
+ ["Diamond"] = 8900,
+ ["sdot"] = 8901,
+ ["sstarf"] = 8902,
+ ["Star"] = 8902,
+ ["divonx"] = 8903,
+ ["divideontimes"] = 8903,
+ ["bowtie"] = 8904,
+ ["ltimes"] = 8905,
+ ["rtimes"] = 8906,
+ ["lthree"] = 8907,
+ ["leftthreetimes"] = 8907,
+ ["rthree"] = 8908,
+ ["rightthreetimes"] = 8908,
+ ["bsime"] = 8909,
+ ["backsimeq"] = 8909,
+ ["cuvee"] = 8910,
+ ["curlyvee"] = 8910,
+ ["cuwed"] = 8911,
+ ["curlywedge"] = 8911,
+ ["Sub"] = 8912,
+ ["Subset"] = 8912,
+ ["Sup"] = 8913,
+ ["Supset"] = 8913,
+ ["Cap"] = 8914,
+ ["Cup"] = 8915,
+ ["fork"] = 8916,
+ ["pitchfork"] = 8916,
+ ["epar"] = 8917,
+ ["ltdot"] = 8918,
+ ["lessdot"] = 8918,
+ ["gtdot"] = 8919,
+ ["gtrdot"] = 8919,
+ ["Ll"] = 8920,
+ ["Gg"] = 8921,
+ ["ggg"] = 8921,
+ ["leg"] = 8922,
+ ["LessEqualGreater"] = 8922,
+ ["lesseqgtr"] = 8922,
+ ["gel"] = 8923,
+ ["gtreqless"] = 8923,
+ ["GreaterEqualLess"] = 8923,
+ ["cuepr"] = 8926,
+ ["curlyeqprec"] = 8926,
+ ["cuesc"] = 8927,
+ ["curlyeqsucc"] = 8927,
+ ["nprcue"] = 8928,
+ ["NotPrecedesSlantEqual"] = 8928,
+ ["nsccue"] = 8929,
+ ["NotSucceedsSlantEqual"] = 8929,
+ ["nsqsube"] = 8930,
+ ["NotSquareSubsetEqual"] = 8930,
+ ["nsqsupe"] = 8931,
+ ["NotSquareSupersetEqual"] = 8931,
+ ["lnsim"] = 8934,
+ ["gnsim"] = 8935,
+ ["prnsim"] = 8936,
+ ["precnsim"] = 8936,
+ ["scnsim"] = 8937,
+ ["succnsim"] = 8937,
+ ["nltri"] = 8938,
+ ["ntriangleleft"] = 8938,
+ ["NotLeftTriangle"] = 8938,
+ ["nrtri"] = 8939,
+ ["ntriangleright"] = 8939,
+ ["NotRightTriangle"] = 8939,
+ ["nltrie"] = 8940,
+ ["ntrianglelefteq"] = 8940,
+ ["NotLeftTriangleEqual"] = 8940,
+ ["nrtrie"] = 8941,
+ ["ntrianglerighteq"] = 8941,
+ ["NotRightTriangleEqual"] = 8941,
+ ["vellip"] = 8942,
+ ["ctdot"] = 8943,
+ ["utdot"] = 8944,
+ ["dtdot"] = 8945,
+ ["disin"] = 8946,
+ ["isinsv"] = 8947,
+ ["isins"] = 8948,
+ ["isindot"] = 8949,
+ ["notinvc"] = 8950,
+ ["notinvb"] = 8951,
+ ["isinE"] = 8953,
+ ["nisd"] = 8954,
+ ["xnis"] = 8955,
+ ["nis"] = 8956,
+ ["notnivc"] = 8957,
+ ["notnivb"] = 8958,
+ ["barwed"] = 8965,
+ ["barwedge"] = 8965,
+ ["Barwed"] = 8966,
+ ["doublebarwedge"] = 8966,
+ ["lceil"] = 8968,
+ ["LeftCeiling"] = 8968,
+ ["rceil"] = 8969,
+ ["RightCeiling"] = 8969,
+ ["lfloor"] = 8970,
+ ["LeftFloor"] = 8970,
+ ["rfloor"] = 8971,
+ ["RightFloor"] = 8971,
+ ["drcrop"] = 8972,
+ ["dlcrop"] = 8973,
+ ["urcrop"] = 8974,
+ ["ulcrop"] = 8975,
+ ["bnot"] = 8976,
+ ["profline"] = 8978,
+ ["profsurf"] = 8979,
+ ["telrec"] = 8981,
+ ["target"] = 8982,
+ ["ulcorn"] = 8988,
+ ["ulcorner"] = 8988,
+ ["urcorn"] = 8989,
+ ["urcorner"] = 8989,
+ ["dlcorn"] = 8990,
+ ["llcorner"] = 8990,
+ ["drcorn"] = 8991,
+ ["lrcorner"] = 8991,
+ ["frown"] = 8994,
+ ["sfrown"] = 8994,
+ ["smile"] = 8995,
+ ["ssmile"] = 8995,
+ ["cylcty"] = 9005,
+ ["profalar"] = 9006,
+ ["topbot"] = 9014,
+ ["ovbar"] = 9021,
+ ["solbar"] = 9023,
+ ["angzarr"] = 9084,
+ ["lmoust"] = 9136,
+ ["lmoustache"] = 9136,
+ ["rmoust"] = 9137,
+ ["rmoustache"] = 9137,
+ ["tbrk"] = 9140,
+ ["OverBracket"] = 9140,
+ ["bbrk"] = 9141,
+ ["UnderBracket"] = 9141,
+ ["bbrktbrk"] = 9142,
+ ["OverParenthesis"] = 9180,
+ ["UnderParenthesis"] = 9181,
+ ["OverBrace"] = 9182,
+ ["UnderBrace"] = 9183,
+ ["trpezium"] = 9186,
+ ["elinters"] = 9191,
+ ["blank"] = 9251,
+ ["oS"] = 9416,
+ ["circledS"] = 9416,
+ ["boxh"] = 9472,
+ ["HorizontalLine"] = 9472,
+ ["boxv"] = 9474,
+ ["boxdr"] = 9484,
+ ["boxdl"] = 9488,
+ ["boxur"] = 9492,
+ ["boxul"] = 9496,
+ ["boxvr"] = 9500,
+ ["boxvl"] = 9508,
+ ["boxhd"] = 9516,
+ ["boxhu"] = 9524,
+ ["boxvh"] = 9532,
+ ["boxH"] = 9552,
+ ["boxV"] = 9553,
+ ["boxdR"] = 9554,
+ ["boxDr"] = 9555,
+ ["boxDR"] = 9556,
+ ["boxdL"] = 9557,
+ ["boxDl"] = 9558,
+ ["boxDL"] = 9559,
+ ["boxuR"] = 9560,
+ ["boxUr"] = 9561,
+ ["boxUR"] = 9562,
+ ["boxuL"] = 9563,
+ ["boxUl"] = 9564,
+ ["boxUL"] = 9565,
+ ["boxvR"] = 9566,
+ ["boxVr"] = 9567,
+ ["boxVR"] = 9568,
+ ["boxvL"] = 9569,
+ ["boxVl"] = 9570,
+ ["boxVL"] = 9571,
+ ["boxHd"] = 9572,
+ ["boxhD"] = 9573,
+ ["boxHD"] = 9574,
+ ["boxHu"] = 9575,
+ ["boxhU"] = 9576,
+ ["boxHU"] = 9577,
+ ["boxvH"] = 9578,
+ ["boxVh"] = 9579,
+ ["boxVH"] = 9580,
+ ["uhblk"] = 9600,
+ ["lhblk"] = 9604,
+ ["block"] = 9608,
+ ["blk14"] = 9617,
+ ["blk12"] = 9618,
+ ["blk34"] = 9619,
+ ["squ"] = 9633,
+ ["square"] = 9633,
+ ["Square"] = 9633,
+ ["squf"] = 9642,
+ ["squarf"] = 9642,
+ ["blacksquare"] = 9642,
+ ["FilledVerySmallSquare"] = 9642,
+ ["EmptyVerySmallSquare"] = 9643,
+ ["rect"] = 9645,
+ ["marker"] = 9646,
+ ["fltns"] = 9649,
+ ["xutri"] = 9651,
+ ["bigtriangleup"] = 9651,
+ ["utrif"] = 9652,
+ ["blacktriangle"] = 9652,
+ ["utri"] = 9653,
+ ["triangle"] = 9653,
+ ["rtrif"] = 9656,
+ ["blacktriangleright"] = 9656,
+ ["rtri"] = 9657,
+ ["triangleright"] = 9657,
+ ["xdtri"] = 9661,
+ ["bigtriangledown"] = 9661,
+ ["dtrif"] = 9662,
+ ["blacktriangledown"] = 9662,
+ ["dtri"] = 9663,
+ ["triangledown"] = 9663,
+ ["ltrif"] = 9666,
+ ["blacktriangleleft"] = 9666,
+ ["ltri"] = 9667,
+ ["triangleleft"] = 9667,
+ ["loz"] = 9674,
+ ["lozenge"] = 9674,
+ ["cir"] = 9675,
+ ["tridot"] = 9708,
+ ["xcirc"] = 9711,
+ ["bigcirc"] = 9711,
+ ["ultri"] = 9720,
+ ["urtri"] = 9721,
+ ["lltri"] = 9722,
+ ["EmptySmallSquare"] = 9723,
+ ["FilledSmallSquare"] = 9724,
+ ["starf"] = 9733,
+ ["bigstar"] = 9733,
+ ["star"] = 9734,
+ ["phone"] = 9742,
+ ["female"] = 9792,
+ ["male"] = 9794,
+ ["spades"] = 9824,
+ ["spadesuit"] = 9824,
+ ["clubs"] = 9827,
+ ["clubsuit"] = 9827,
+ ["hearts"] = 9829,
+ ["heartsuit"] = 9829,
+ ["diams"] = 9830,
+ ["diamondsuit"] = 9830,
+ ["sung"] = 9834,
+ ["flat"] = 9837,
+ ["natur"] = 9838,
+ ["natural"] = 9838,
+ ["sharp"] = 9839,
+ ["check"] = 10003,
+ ["checkmark"] = 10003,
+ ["cross"] = 10007,
+ ["malt"] = 10016,
+ ["maltese"] = 10016,
+ ["sext"] = 10038,
+ ["VerticalSeparator"] = 10072,
+ ["lbbrk"] = 10098,
+ ["rbbrk"] = 10099,
+ ["lobrk"] = 10214,
+ ["LeftDoubleBracket"] = 10214,
+ ["robrk"] = 10215,
+ ["RightDoubleBracket"] = 10215,
+ ["lang"] = 10216,
+ ["LeftAngleBracket"] = 10216,
+ ["langle"] = 10216,
+ ["rang"] = 10217,
+ ["RightAngleBracket"] = 10217,
+ ["rangle"] = 10217,
+ ["Lang"] = 10218,
+ ["Rang"] = 10219,
+ ["loang"] = 10220,
+ ["roang"] = 10221,
+ ["xlarr"] = 10229,
+ ["longleftarrow"] = 10229,
+ ["LongLeftArrow"] = 10229,
+ ["xrarr"] = 10230,
+ ["longrightarrow"] = 10230,
+ ["LongRightArrow"] = 10230,
+ ["xharr"] = 10231,
+ ["longleftrightarrow"] = 10231,
+ ["LongLeftRightArrow"] = 10231,
+ ["xlArr"] = 10232,
+ ["Longleftarrow"] = 10232,
+ ["DoubleLongLeftArrow"] = 10232,
+ ["xrArr"] = 10233,
+ ["Longrightarrow"] = 10233,
+ ["DoubleLongRightArrow"] = 10233,
+ ["xhArr"] = 10234,
+ ["Longleftrightarrow"] = 10234,
+ ["DoubleLongLeftRightArrow"] = 10234,
+ ["xmap"] = 10236,
+ ["longmapsto"] = 10236,
+ ["dzigrarr"] = 10239,
+ ["nvlArr"] = 10498,
+ ["nvrArr"] = 10499,
+ ["nvHarr"] = 10500,
+ ["Map"] = 10501,
+ ["lbarr"] = 10508,
+ ["rbarr"] = 10509,
+ ["bkarow"] = 10509,
+ ["lBarr"] = 10510,
+ ["rBarr"] = 10511,
+ ["dbkarow"] = 10511,
+ ["RBarr"] = 10512,
+ ["drbkarow"] = 10512,
+ ["DDotrahd"] = 10513,
+ ["UpArrowBar"] = 10514,
+ ["DownArrowBar"] = 10515,
+ ["Rarrtl"] = 10518,
+ ["latail"] = 10521,
+ ["ratail"] = 10522,
+ ["lAtail"] = 10523,
+ ["rAtail"] = 10524,
+ ["larrfs"] = 10525,
+ ["rarrfs"] = 10526,
+ ["larrbfs"] = 10527,
+ ["rarrbfs"] = 10528,
+ ["nwarhk"] = 10531,
+ ["nearhk"] = 10532,
+ ["searhk"] = 10533,
+ ["hksearow"] = 10533,
+ ["swarhk"] = 10534,
+ ["hkswarow"] = 10534,
+ ["nwnear"] = 10535,
+ ["nesear"] = 10536,
+ ["toea"] = 10536,
+ ["seswar"] = 10537,
+ ["tosa"] = 10537,
+ ["swnwar"] = 10538,
+ ["rarrc"] = 10547,
+ ["cudarrr"] = 10549,
+ ["ldca"] = 10550,
+ ["rdca"] = 10551,
+ ["cudarrl"] = 10552,
+ ["larrpl"] = 10553,
+ ["curarrm"] = 10556,
+ ["cularrp"] = 10557,
+ ["rarrpl"] = 10565,
+ ["harrcir"] = 10568,
+ ["Uarrocir"] = 10569,
+ ["lurdshar"] = 10570,
+ ["ldrushar"] = 10571,
+ ["LeftRightVector"] = 10574,
+ ["RightUpDownVector"] = 10575,
+ ["DownLeftRightVector"] = 10576,
+ ["LeftUpDownVector"] = 10577,
+ ["LeftVectorBar"] = 10578,
+ ["RightVectorBar"] = 10579,
+ ["RightUpVectorBar"] = 10580,
+ ["RightDownVectorBar"] = 10581,
+ ["DownLeftVectorBar"] = 10582,
+ ["DownRightVectorBar"] = 10583,
+ ["LeftUpVectorBar"] = 10584,
+ ["LeftDownVectorBar"] = 10585,
+ ["LeftTeeVector"] = 10586,
+ ["RightTeeVector"] = 10587,
+ ["RightUpTeeVector"] = 10588,
+ ["RightDownTeeVector"] = 10589,
+ ["DownLeftTeeVector"] = 10590,
+ ["DownRightTeeVector"] = 10591,
+ ["LeftUpTeeVector"] = 10592,
+ ["LeftDownTeeVector"] = 10593,
+ ["lHar"] = 10594,
+ ["uHar"] = 10595,
+ ["rHar"] = 10596,
+ ["dHar"] = 10597,
+ ["luruhar"] = 10598,
+ ["ldrdhar"] = 10599,
+ ["ruluhar"] = 10600,
+ ["rdldhar"] = 10601,
+ ["lharul"] = 10602,
+ ["llhard"] = 10603,
+ ["rharul"] = 10604,
+ ["lrhard"] = 10605,
+ ["udhar"] = 10606,
+ ["UpEquilibrium"] = 10606,
+ ["duhar"] = 10607,
+ ["ReverseUpEquilibrium"] = 10607,
+ ["RoundImplies"] = 10608,
+ ["erarr"] = 10609,
+ ["simrarr"] = 10610,
+ ["larrsim"] = 10611,
+ ["rarrsim"] = 10612,
+ ["rarrap"] = 10613,
+ ["ltlarr"] = 10614,
+ ["gtrarr"] = 10616,
+ ["subrarr"] = 10617,
+ ["suplarr"] = 10619,
+ ["lfisht"] = 10620,
+ ["rfisht"] = 10621,
+ ["ufisht"] = 10622,
+ ["dfisht"] = 10623,
+ ["lopar"] = 10629,
+ ["ropar"] = 10630,
+ ["lbrke"] = 10635,
+ ["rbrke"] = 10636,
+ ["lbrkslu"] = 10637,
+ ["rbrksld"] = 10638,
+ ["lbrksld"] = 10639,
+ ["rbrkslu"] = 10640,
+ ["langd"] = 10641,
+ ["rangd"] = 10642,
+ ["lparlt"] = 10643,
+ ["rpargt"] = 10644,
+ ["gtlPar"] = 10645,
+ ["ltrPar"] = 10646,
+ ["vzigzag"] = 10650,
+ ["vangrt"] = 10652,
+ ["angrtvbd"] = 10653,
+ ["ange"] = 10660,
+ ["range"] = 10661,
+ ["dwangle"] = 10662,
+ ["uwangle"] = 10663,
+ ["angmsdaa"] = 10664,
+ ["angmsdab"] = 10665,
+ ["angmsdac"] = 10666,
+ ["angmsdad"] = 10667,
+ ["angmsdae"] = 10668,
+ ["angmsdaf"] = 10669,
+ ["angmsdag"] = 10670,
+ ["angmsdah"] = 10671,
+ ["bemptyv"] = 10672,
+ ["demptyv"] = 10673,
+ ["cemptyv"] = 10674,
+ ["raemptyv"] = 10675,
+ ["laemptyv"] = 10676,
+ ["ohbar"] = 10677,
+ ["omid"] = 10678,
+ ["opar"] = 10679,
+ ["operp"] = 10681,
+ ["olcross"] = 10683,
+ ["odsold"] = 10684,
+ ["olcir"] = 10686,
+ ["ofcir"] = 10687,
+ ["olt"] = 10688,
+ ["ogt"] = 10689,
+ ["cirscir"] = 10690,
+ ["cirE"] = 10691,
+ ["solb"] = 10692,
+ ["bsolb"] = 10693,
+ ["boxbox"] = 10697,
+ ["trisb"] = 10701,
+ ["rtriltri"] = 10702,
+ ["LeftTriangleBar"] = 10703,
+ ["RightTriangleBar"] = 10704,
+ ["race"] = 10714,
+ ["iinfin"] = 10716,
+ ["infintie"] = 10717,
+ ["nvinfin"] = 10718,
+ ["eparsl"] = 10723,
+ ["smeparsl"] = 10724,
+ ["eqvparsl"] = 10725,
+ ["lozf"] = 10731,
+ ["blacklozenge"] = 10731,
+ ["RuleDelayed"] = 10740,
+ ["dsol"] = 10742,
+ ["xodot"] = 10752,
+ ["bigodot"] = 10752,
+ ["xoplus"] = 10753,
+ ["bigoplus"] = 10753,
+ ["xotime"] = 10754,
+ ["bigotimes"] = 10754,
+ ["xuplus"] = 10756,
+ ["biguplus"] = 10756,
+ ["xsqcup"] = 10758,
+ ["bigsqcup"] = 10758,
+ ["qint"] = 10764,
+ ["iiiint"] = 10764,
+ ["fpartint"] = 10765,
+ ["cirfnint"] = 10768,
+ ["awint"] = 10769,
+ ["rppolint"] = 10770,
+ ["scpolint"] = 10771,
+ ["npolint"] = 10772,
+ ["pointint"] = 10773,
+ ["quatint"] = 10774,
+ ["intlarhk"] = 10775,
+ ["pluscir"] = 10786,
+ ["plusacir"] = 10787,
+ ["simplus"] = 10788,
+ ["plusdu"] = 10789,
+ ["plussim"] = 10790,
+ ["plustwo"] = 10791,
+ ["mcomma"] = 10793,
+ ["minusdu"] = 10794,
+ ["loplus"] = 10797,
+ ["roplus"] = 10798,
+ ["Cross"] = 10799,
+ ["timesd"] = 10800,
+ ["timesbar"] = 10801,
+ ["smashp"] = 10803,
+ ["lotimes"] = 10804,
+ ["rotimes"] = 10805,
+ ["otimesas"] = 10806,
+ ["Otimes"] = 10807,
+ ["odiv"] = 10808,
+ ["triplus"] = 10809,
+ ["triminus"] = 10810,
+ ["tritime"] = 10811,
+ ["iprod"] = 10812,
+ ["intprod"] = 10812,
+ ["amalg"] = 10815,
+ ["capdot"] = 10816,
+ ["ncup"] = 10818,
+ ["ncap"] = 10819,
+ ["capand"] = 10820,
+ ["cupor"] = 10821,
+ ["cupcap"] = 10822,
+ ["capcup"] = 10823,
+ ["cupbrcap"] = 10824,
+ ["capbrcup"] = 10825,
+ ["cupcup"] = 10826,
+ ["capcap"] = 10827,
+ ["ccups"] = 10828,
+ ["ccaps"] = 10829,
+ ["ccupssm"] = 10832,
+ ["And"] = 10835,
+ ["Or"] = 10836,
+ ["andand"] = 10837,
+ ["oror"] = 10838,
+ ["orslope"] = 10839,
+ ["andslope"] = 10840,
+ ["andv"] = 10842,
+ ["orv"] = 10843,
+ ["andd"] = 10844,
+ ["ord"] = 10845,
+ ["wedbar"] = 10847,
+ ["sdote"] = 10854,
+ ["simdot"] = 10858,
+ ["congdot"] = 10861,
+ ["easter"] = 10862,
+ ["apacir"] = 10863,
+ ["apE"] = 10864,
+ ["eplus"] = 10865,
+ ["pluse"] = 10866,
+ ["Esim"] = 10867,
+ ["Colone"] = 10868,
+ ["Equal"] = 10869,
+ ["eDDot"] = 10871,
+ ["ddotseq"] = 10871,
+ ["equivDD"] = 10872,
+ ["ltcir"] = 10873,
+ ["gtcir"] = 10874,
+ ["ltquest"] = 10875,
+ ["gtquest"] = 10876,
+ ["les"] = 10877,
+ ["LessSlantEqual"] = 10877,
+ ["leqslant"] = 10877,
+ ["ges"] = 10878,
+ ["GreaterSlantEqual"] = 10878,
+ ["geqslant"] = 10878,
+ ["lesdot"] = 10879,
+ ["gesdot"] = 10880,
+ ["lesdoto"] = 10881,
+ ["gesdoto"] = 10882,
+ ["lesdotor"] = 10883,
+ ["gesdotol"] = 10884,
+ ["lap"] = 10885,
+ ["lessapprox"] = 10885,
+ ["gap"] = 10886,
+ ["gtrapprox"] = 10886,
+ ["lne"] = 10887,
+ ["lneq"] = 10887,
+ ["gne"] = 10888,
+ ["gneq"] = 10888,
+ ["lnap"] = 10889,
+ ["lnapprox"] = 10889,
+ ["gnap"] = 10890,
+ ["gnapprox"] = 10890,
+ ["lEg"] = 10891,
+ ["lesseqqgtr"] = 10891,
+ ["gEl"] = 10892,
+ ["gtreqqless"] = 10892,
+ ["lsime"] = 10893,
+ ["gsime"] = 10894,
+ ["lsimg"] = 10895,
+ ["gsiml"] = 10896,
+ ["lgE"] = 10897,
+ ["glE"] = 10898,
+ ["lesges"] = 10899,
+ ["gesles"] = 10900,
+ ["els"] = 10901,
+ ["eqslantless"] = 10901,
+ ["egs"] = 10902,
+ ["eqslantgtr"] = 10902,
+ ["elsdot"] = 10903,
+ ["egsdot"] = 10904,
+ ["el"] = 10905,
+ ["eg"] = 10906,
+ ["siml"] = 10909,
+ ["simg"] = 10910,
+ ["simlE"] = 10911,
+ ["simgE"] = 10912,
+ ["LessLess"] = 10913,
+ ["GreaterGreater"] = 10914,
+ ["glj"] = 10916,
+ ["gla"] = 10917,
+ ["ltcc"] = 10918,
+ ["gtcc"] = 10919,
+ ["lescc"] = 10920,
+ ["gescc"] = 10921,
+ ["smt"] = 10922,
+ ["lat"] = 10923,
+ ["smte"] = 10924,
+ ["late"] = 10925,
+ ["bumpE"] = 10926,
+ ["pre"] = 10927,
+ ["preceq"] = 10927,
+ ["PrecedesEqual"] = 10927,
+ ["sce"] = 10928,
+ ["succeq"] = 10928,
+ ["SucceedsEqual"] = 10928,
+ ["prE"] = 10931,
+ ["scE"] = 10932,
+ ["prnE"] = 10933,
+ ["precneqq"] = 10933,
+ ["scnE"] = 10934,
+ ["succneqq"] = 10934,
+ ["prap"] = 10935,
+ ["precapprox"] = 10935,
+ ["scap"] = 10936,
+ ["succapprox"] = 10936,
+ ["prnap"] = 10937,
+ ["precnapprox"] = 10937,
+ ["scnap"] = 10938,
+ ["succnapprox"] = 10938,
+ ["Pr"] = 10939,
+ ["Sc"] = 10940,
+ ["subdot"] = 10941,
+ ["supdot"] = 10942,
+ ["subplus"] = 10943,
+ ["supplus"] = 10944,
+ ["submult"] = 10945,
+ ["supmult"] = 10946,
+ ["subedot"] = 10947,
+ ["supedot"] = 10948,
+ ["subE"] = 10949,
+ ["subseteqq"] = 10949,
+ ["supE"] = 10950,
+ ["supseteqq"] = 10950,
+ ["subsim"] = 10951,
+ ["supsim"] = 10952,
+ ["subnE"] = 10955,
+ ["subsetneqq"] = 10955,
+ ["supnE"] = 10956,
+ ["supsetneqq"] = 10956,
+ ["csub"] = 10959,
+ ["csup"] = 10960,
+ ["csube"] = 10961,
+ ["csupe"] = 10962,
+ ["subsup"] = 10963,
+ ["supsub"] = 10964,
+ ["subsub"] = 10965,
+ ["supsup"] = 10966,
+ ["suphsub"] = 10967,
+ ["supdsub"] = 10968,
+ ["forkv"] = 10969,
+ ["topfork"] = 10970,
+ ["mlcp"] = 10971,
+ ["Dashv"] = 10980,
+ ["DoubleLeftTee"] = 10980,
+ ["Vdashl"] = 10982,
+ ["Barv"] = 10983,
+ ["vBar"] = 10984,
+ ["vBarv"] = 10985,
+ ["Vbar"] = 10987,
+ ["Not"] = 10988,
+ ["bNot"] = 10989,
+ ["rnmid"] = 10990,
+ ["cirmid"] = 10991,
+ ["midcir"] = 10992,
+ ["topcir"] = 10993,
+ ["nhpar"] = 10994,
+ ["parsim"] = 10995,
+ ["parsl"] = 11005,
+ ["fflig"] = 64256,
+ ["filig"] = 64257,
+ ["fllig"] = 64258,
+ ["ffilig"] = 64259,
+ ["ffllig"] = 64260,
+ ["Ascr"] = 119964,
+ ["Cscr"] = 119966,
+ ["Dscr"] = 119967,
+ ["Gscr"] = 119970,
+ ["Jscr"] = 119973,
+ ["Kscr"] = 119974,
+ ["Nscr"] = 119977,
+ ["Oscr"] = 119978,
+ ["Pscr"] = 119979,
+ ["Qscr"] = 119980,
+ ["Sscr"] = 119982,
+ ["Tscr"] = 119983,
+ ["Uscr"] = 119984,
+ ["Vscr"] = 119985,
+ ["Wscr"] = 119986,
+ ["Xscr"] = 119987,
+ ["Yscr"] = 119988,
+ ["Zscr"] = 119989,
+ ["ascr"] = 119990,
+ ["bscr"] = 119991,
+ ["cscr"] = 119992,
+ ["dscr"] = 119993,
+ ["fscr"] = 119995,
+ ["hscr"] = 119997,
+ ["iscr"] = 119998,
+ ["jscr"] = 119999,
+ ["kscr"] = 120000,
+ ["lscr"] = 120001,
+ ["mscr"] = 120002,
+ ["nscr"] = 120003,
+ ["pscr"] = 120005,
+ ["qscr"] = 120006,
+ ["rscr"] = 120007,
+ ["sscr"] = 120008,
+ ["tscr"] = 120009,
+ ["uscr"] = 120010,
+ ["vscr"] = 120011,
+ ["wscr"] = 120012,
+ ["xscr"] = 120013,
+ ["yscr"] = 120014,
+ ["zscr"] = 120015,
+ ["Afr"] = 120068,
+ ["Bfr"] = 120069,
+ ["Dfr"] = 120071,
+ ["Efr"] = 120072,
+ ["Ffr"] = 120073,
+ ["Gfr"] = 120074,
+ ["Jfr"] = 120077,
+ ["Kfr"] = 120078,
+ ["Lfr"] = 120079,
+ ["Mfr"] = 120080,
+ ["Nfr"] = 120081,
+ ["Ofr"] = 120082,
+ ["Pfr"] = 120083,
+ ["Qfr"] = 120084,
+ ["Sfr"] = 120086,
+ ["Tfr"] = 120087,
+ ["Ufr"] = 120088,
+ ["Vfr"] = 120089,
+ ["Wfr"] = 120090,
+ ["Xfr"] = 120091,
+ ["Yfr"] = 120092,
+ ["afr"] = 120094,
+ ["bfr"] = 120095,
+ ["cfr"] = 120096,
+ ["dfr"] = 120097,
+ ["efr"] = 120098,
+ ["ffr"] = 120099,
+ ["gfr"] = 120100,
+ ["hfr"] = 120101,
+ ["ifr"] = 120102,
+ ["jfr"] = 120103,
+ ["kfr"] = 120104,
+ ["lfr"] = 120105,
+ ["mfr"] = 120106,
+ ["nfr"] = 120107,
+ ["ofr"] = 120108,
+ ["pfr"] = 120109,
+ ["qfr"] = 120110,
+ ["rfr"] = 120111,
+ ["sfr"] = 120112,
+ ["tfr"] = 120113,
+ ["ufr"] = 120114,
+ ["vfr"] = 120115,
+ ["wfr"] = 120116,
+ ["xfr"] = 120117,
+ ["yfr"] = 120118,
+ ["zfr"] = 120119,
+ ["Aopf"] = 120120,
+ ["Bopf"] = 120121,
+ ["Dopf"] = 120123,
+ ["Eopf"] = 120124,
+ ["Fopf"] = 120125,
+ ["Gopf"] = 120126,
+ ["Iopf"] = 120128,
+ ["Jopf"] = 120129,
+ ["Kopf"] = 120130,
+ ["Lopf"] = 120131,
+ ["Mopf"] = 120132,
+ ["Oopf"] = 120134,
+ ["Sopf"] = 120138,
+ ["Topf"] = 120139,
+ ["Uopf"] = 120140,
+ ["Vopf"] = 120141,
+ ["Wopf"] = 120142,
+ ["Xopf"] = 120143,
+ ["Yopf"] = 120144,
+ ["aopf"] = 120146,
+ ["bopf"] = 120147,
+ ["copf"] = 120148,
+ ["dopf"] = 120149,
+ ["eopf"] = 120150,
+ ["fopf"] = 120151,
+ ["gopf"] = 120152,
+ ["hopf"] = 120153,
+ ["iopf"] = 120154,
+ ["jopf"] = 120155,
+ ["kopf"] = 120156,
+ ["lopf"] = 120157,
+ ["mopf"] = 120158,
+ ["nopf"] = 120159,
+ ["oopf"] = 120160,
+ ["popf"] = 120161,
+ ["qopf"] = 120162,
+ ["ropf"] = 120163,
+ ["sopf"] = 120164,
+ ["topf"] = 120165,
+ ["uopf"] = 120166,
+ ["vopf"] = 120167,
+ ["wopf"] = 120168,
+ ["xopf"] = 120169,
+ ["yopf"] = 120170,
+ ["zopf"] = 120171,
+}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Given a string `s` of decimal digits, the \luamdef{entities.dec_entity}
+% returns the corresponding \acro{utf}8-encoded Unicode codepoint.
+%
+% \end{markdown}
+% \begin{macrocode}
+function entities.dec_entity(s)
+ return unicode.utf8.char(tonumber(s))
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Given a string `s` of hexadecimal digits, the
+% \luamdef{entities.hex_entity} returns the corresponding
+% \acro{utf}8-encoded Unicode codepoint.
+%
+% \end{markdown}
+% \begin{macrocode}
+function entities.hex_entity(s)
+ return unicode.utf8.char(tonumber("0x"..s))
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Given a character entity name `s` (like `ouml`), the
+% \luamdef{entities.char_entity} returns the corresponding
+% \acro{utf}8-encoded Unicode codepoint.
+%
+% \end{markdown}
+% \begin{macrocode}
+function entities.char_entity(s)
+ local n = character_entities[s]
+ if n == nil then
+ return "&" .. s .. ";"
+ end
+ return unicode.utf8.char(n)
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Plain \TeX{} Writer
+% \label{sec:texwriter}
+% This section documents the \luam{writer} object, which implements the
+% routines for producing the \TeX{} output. The object is an amalgamate of the
+% generic, \TeX{}, \LaTeX{} writer objects that were located in the
+% `lunamark/writer/generic.lua`, `lunamark/writer/tex.lua`, and
+% `lunamark/writer/latex.lua` files in the Lunamark Lua module.
+%
+% Although not specified in the Lua interface (see Section
+% \ref{sec:luainterface}), the \luam{writer} object is exported, so that the
+% curious user could easily tinker with the methods of the objects produced by
+% the \luam{writer.new} method described below. The user should be aware,
+% however, that the implementation may change in a future revision.
+%
+% \end{markdown}
+% \begin{macrocode}
+M.writer = {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{writer.new} method creates and returns a new \TeX{} writer
+% object associated with the Lua interface options (see Section
+% \ref{sec:luaoptions}) `options`. When `options` are unspecified, it is
+% assumed that an empty table was passed to the method.
+%
+% The objects produced by the \luam{writer.new} method expose instance methods
+% and variables of their own. As a convention, I will refer to these
+% \meta{member}s as `writer->`\meta{member}.
+%
+% \end{markdown}
+% \begin{macrocode}
+function M.writer.new(options)
+ local self = {}
+ options = options or {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Make the `options` table inherit from the \luam{defaultOptions} table.
+%
+% \end{markdown}
+% \begin{macrocode}
+ setmetatable(options, { __index = function (_, key)
+ return defaultOptions[key] end })
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Parse the \Opt{slice} option and define \luamdef{writer->slice\_begin}
+% \luamdef{writer->slice\_end}, and \luamdef{writer->is\_writing}.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local slice_specifiers = {}
+ for specifier in options.slice:gmatch("[^%s]+") do
+ table.insert(slice_specifiers, specifier)
+ end
+
+ if #slice_specifiers == 2 then
+ self.slice_begin, self.slice_end = table.unpack(slice_specifiers)
+ local slice_begin_type = self.slice_begin:sub(1, 1)
+ if slice_begin_type ~= "^" and slice_begin_type ~= "$" then
+ self.slice_begin = "^" .. self.slice_begin
+ end
+ local slice_end_type = self.slice_end:sub(1, 1)
+ if slice_end_type ~= "^" and slice_end_type ~= "$" then
+ self.slice_end = "$" .. self.slice_end
+ end
+ elseif #slice_specifiers == 1 then
+ self.slice_begin = "^" .. slice_specifiers[1]
+ self.slice_end = "$" .. slice_specifiers[1]
+ end
+
+ if self.slice_begin == "^" and self.slice_end ~= "^" then
+ self.is_writing = true
+ else
+ self.is_writing = false
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->suffix} as the suffix of the produced cache files.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.suffix = ".tex"
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->space} as the output format of a space character.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.space = " "
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->nbsp} as the output format of a non-breaking space
+% character.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.nbsp = "\\markdownRendererNbsp{}"
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->plain} as a function that will transform an input
+% plain text block `s` to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.plain(s)
+ return s
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->paragraph} as a function that will transform an
+% input paragraph `s` to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.paragraph(s)
+ if not self.is_writing then return "" end
+ return s
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->pack} as a function that will take the filename
+% `name` of the output file prepared by the reader and transform it to the
+% output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.pack(name)
+ return [[\input ]] .. name .. [[\relax{}]]
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->interblocksep} as the output format of a block
+% element separator.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.interblocksep()
+ if not self.is_writing then return "" end
+ return "\\markdownRendererInterblockSeparator\n{}"
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->eof} as the end of file marker in the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.eof = [[\relax]]
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->linebreak} as the output format of a forced line break.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.linebreak = "\\markdownRendererLineBreak\n{}"
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->ellipsis} as the output format of an ellipsis.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.ellipsis = "\\markdownRendererEllipsis{}"
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->hrule} as the output format of a horizontal rule.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.hrule()
+ if not self.is_writing then return "" end
+ return "\\markdownRendererHorizontalRule{}"
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define a table \luamdef{escaped_chars} containing the mapping from special
+% plain \TeX{} characters (including the active pipe character (`|`) of
+% \Hologo{ConTeXt}) to their escaped variants. Define tables
+% \luamdef{escaped_minimal_chars} and \luamdef{escaped_minimal_strings}
+% containing the mapping from special plain characters and character strings
+% that need to be escaped even in content that will not be typeset.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local escaped_chars = {
+ ["{"] = "\\markdownRendererLeftBrace{}",
+ ["}"] = "\\markdownRendererRightBrace{}",
+ ["$"] = "\\markdownRendererDollarSign{}",
+ ["%"] = "\\markdownRendererPercentSign{}",
+ ["&"] = "\\markdownRendererAmpersand{}",
+ ["_"] = "\\markdownRendererUnderscore{}",
+ ["#"] = "\\markdownRendererHash{}",
+ ["^"] = "\\markdownRendererCircumflex{}",
+ ["\\"] = "\\markdownRendererBackslash{}",
+ ["~"] = "\\markdownRendererTilde{}",
+ ["|"] = "\\markdownRendererPipe{}",
+ }
+ local escaped_uri_chars = {
+ ["{"] = "\\markdownRendererLeftBrace{}",
+ ["}"] = "\\markdownRendererRightBrace{}",
+ ["%"] = "\\markdownRendererPercentSign{}",
+ ["\\"] = "\\markdownRendererBackslash{}",
+ }
+ local escaped_citation_chars = {
+ ["{"] = "\\markdownRendererLeftBrace{}",
+ ["}"] = "\\markdownRendererRightBrace{}",
+ ["%"] = "\\markdownRendererPercentSign{}",
+ ["#"] = "\\markdownRendererHash{}",
+ ["\\"] = "\\markdownRendererBackslash{}",
+ }
+ local escaped_minimal_strings = {
+ ["^^"] = "\\markdownRendererCircumflex\\markdownRendererCircumflex ",
+ }
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Use the \luam{escaped_chars} table to create an escaper function
+% \luamdef{escape} and the \luam{escaped_minimal_chars} and
+% \luam{escaped_minimal_strings} tables to create an escaper function
+% \luamdef{escape_minimal}.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local escape = util.escaper(escaped_chars)
+ local escape_citation = util.escaper(escaped_citation_chars,
+ escaped_minimal_strings)
+ local escape_uri = util.escaper(escaped_uri_chars, escaped_minimal_strings)
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->string} as a function that will transform an input
+% plain text span `s` to the output format and \luamdef{writer->uri} as a
+% function that will transform an input \acro{uri} `u` to the output format.
+% If the \Opt{hybrid} option is `true`, use identity functions. Otherwise,
+% use the \luam{escape} and \luam{escape_minimal} functions.
+%
+% \end{markdown}
+% \begin{macrocode}
+ if options.hybrid then
+ self.string = function(s) return s end
+ self.citation = function(c) return c end
+ self.uri = function(u) return u end
+ else
+ self.string = escape
+ self.citation = escape_citation
+ self.uri = escape_uri
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->code} as a function that will transform an input
+% inlined code span `s` to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.code(s)
+ return {"\\markdownRendererCodeSpan{",escape(s),"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->link} as a function that will transform an input
+% hyperlink to the output format, where `lab` corresponds to the label,
+% `src` to \acro{uri}, and `tit` to the title of the link.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.link(lab,src,tit)
+ return {"\\markdownRendererLink{",lab,"}",
+ "{",self.string(src),"}",
+ "{",self.uri(src),"}",
+ "{",self.string(tit or ""),"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->table} as a function that will transform an input
+% table to the output format, where `rows` is a sequence of columns and a
+% column is a sequence of cell texts.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.table(rows, caption)
+ local buffer = {"\\markdownRendererTable{",
+ caption or "", "}{", #rows - 1, "}{", #rows[1], "}"}
+ local temp = rows[2] -- put alignments on the first row
+ rows[2] = rows[1]
+ rows[1] = temp
+ for i, row in ipairs(rows) do
+ table.insert(buffer, "{")
+ for _, column in ipairs(row) do
+ if i > 1 then -- do not use braces for alignments
+ table.insert(buffer, "{")
+ end
+ table.insert(buffer, column)
+ if i > 1 then
+ table.insert(buffer, "}%\n")
+ end
+ end
+ table.insert(buffer, "}%\n")
+ end
+ return buffer
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->image} as a function that will transform an input
+% image to the output format, where `lab` corresponds to the label, `src`
+% to the \acro{url}, and `tit` to the title of the image.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.image(lab,src,tit)
+ return {"\\markdownRendererImage{",lab,"}",
+ "{",self.string(src),"}",
+ "{",self.uri(src),"}",
+ "{",self.string(tit or ""),"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{languages_json} table maps programming language filename
+% extensions to fence infostrings. All \luam{options.contentBlocksLanguageMap}
+% files located by \pkg{kpathsea} are loaded into a chain of tables.
+% \luam{languages_json} corresponds to the first table and is chained with
+% the rest via Lua metatables.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local languages_json = (function()
+ local kpse = require("kpse")
+ kpse.set_program_name("luatex")
+ local base, prev, curr
+ for _, file in ipairs{kpse.lookup(options.contentBlocksLanguageMap,
+ { all=true })} do
+ json = io.open(file, "r"):read("*all")
+ :gsub('("[^\n]-"):','[%1]=')
+ curr = (function()
+ local _ENV={ json=json, load=load } -- run in sandbox
+ return load("return "..json)()
+ end)()
+ if type(curr) == "table" then
+ if base == nil then
+ base = curr
+ else
+ setmetatable(prev, { __index = curr })
+ end
+ prev = curr
+ end
+ end
+ return base or {}
+ end)()
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->contentblock} as a function that will transform an
+% input iA\,Writer content block to the output format, where `src`
+% corresponds to the \acro{uri} prefix, `suf` to the \acro{uri} extension,
+% `type` to the type of the content block (`localfile` or `onlineimage`),
+% and `tit` to the title of the content block.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.contentblock(src,suf,type,tit)
+ if not self.is_writing then return "" end
+ src = src.."."..suf
+ suf = suf:lower()
+ if type == "onlineimage" then
+ return {"\\markdownRendererContentBlockOnlineImage{",suf,"}",
+ "{",self.string(src),"}",
+ "{",self.uri(src),"}",
+ "{",self.string(tit or ""),"}"}
+ elseif languages_json[suf] then
+ return {"\\markdownRendererContentBlockCode{",suf,"}",
+ "{",self.string(languages_json[suf]),"}",
+ "{",self.string(src),"}",
+ "{",self.uri(src),"}",
+ "{",self.string(tit or ""),"}"}
+ else
+ return {"\\markdownRendererContentBlock{",suf,"}",
+ "{",self.string(src),"}",
+ "{",self.uri(src),"}",
+ "{",self.string(tit or ""),"}"}
+ end
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->bulletlist} as a function that will transform an input
+% bulleted list to the output format, where `items` is an array of the list
+% items and `tight` specifies, whether the list is tight or not.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local function ulitem(s)
+ return {"\\markdownRendererUlItem ",s,
+ "\\markdownRendererUlItemEnd "}
+ end
+
+ function self.bulletlist(items,tight)
+ if not self.is_writing then return "" end
+ local buffer = {}
+ for _,item in ipairs(items) do
+ buffer[#buffer + 1] = ulitem(item)
+ end
+ local contents = util.intersperse(buffer,"\n")
+ if tight and options.tightLists then
+ return {"\\markdownRendererUlBeginTight\n",contents,
+ "\n\\markdownRendererUlEndTight "}
+ else
+ return {"\\markdownRendererUlBegin\n",contents,
+ "\n\\markdownRendererUlEnd "}
+ end
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->ollist} as a function that will transform an input
+% ordered list to the output format, where `items` is an array of the list
+% items and `tight` specifies, whether the list is tight or not. If the
+% optional parameter `startnum` is present, it should be used as the number
+% of the first list item.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local function olitem(s,num)
+ if num ~= nil then
+ return {"\\markdownRendererOlItemWithNumber{",num,"}",s,
+ "\\markdownRendererOlItemEnd "}
+ else
+ return {"\\markdownRendererOlItem ",s,
+ "\\markdownRendererOlItemEnd "}
+ end
+ end
+
+ function self.orderedlist(items,tight,startnum)
+ if not self.is_writing then return "" end
+ local buffer = {}
+ local num = startnum
+ for _,item in ipairs(items) do
+ buffer[#buffer + 1] = olitem(item,num)
+ if num ~= nil then
+ num = num + 1
+ end
+ end
+ local contents = util.intersperse(buffer,"\n")
+ if tight and options.tightLists then
+ return {"\\markdownRendererOlBeginTight\n",contents,
+ "\n\\markdownRendererOlEndTight "}
+ else
+ return {"\\markdownRendererOlBegin\n",contents,
+ "\n\\markdownRendererOlEnd "}
+ end
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->inline_html} and \luamdef{writer->display_html}
+% as functions that will transform an inline or block \acro{html} element
+% respectively to the output format, where `html` is the \acro{html}
+% input.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.inline_html(html) return "" end
+ function self.display_html(html) return "" end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->definitionlist} as a function that will transform an
+% input definition list to the output format, where `items` is an array of
+% tables, each of the form `{ term = t, definitions = defs }`, where `t`
+% is a term and `defs` is an array of definitions. `tight` specifies,
+% whether the list is tight or not.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local function dlitem(term, defs)
+ local retVal = {"\\markdownRendererDlItem{",term,"}"}
+ for _, def in ipairs(defs) do
+ retVal[#retVal+1] = {"\\markdownRendererDlDefinitionBegin ",def,
+ "\\markdownRendererDlDefinitionEnd "}
+ end
+ retVal[#retVal+1] = "\\markdownRendererDlItemEnd "
+ return retVal
+ end
+
+ function self.definitionlist(items,tight)
+ if not self.is_writing then return "" end
+ local buffer = {}
+ for _,item in ipairs(items) do
+ buffer[#buffer + 1] = dlitem(item.term, item.definitions)
+ end
+ if tight and options.tightLists then
+ return {"\\markdownRendererDlBeginTight\n", buffer,
+ "\n\\markdownRendererDlEndTight"}
+ else
+ return {"\\markdownRendererDlBegin\n", buffer,
+ "\n\\markdownRendererDlEnd"}
+ end
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->emphasis} as a function that will transform an
+% emphasized span `s` of input text to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.emphasis(s)
+ return {"\\markdownRendererEmphasis{",s,"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->strong} as a function that will transform a strongly
+% emphasized span `s` of input text to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.strong(s)
+ return {"\\markdownRendererStrongEmphasis{",s,"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->blockquote} as a function that will transform an
+% input block quote `s` to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.blockquote(s)
+ if #util.rope_to_string(s) == 0 then return "" end
+ return {"\\markdownRendererBlockQuoteBegin\n",s,
+ "\n\\markdownRendererBlockQuoteEnd "}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->verbatim} as a function that will transform an
+% input code block `s` to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.verbatim(s)
+ if not self.is_writing then return "" end
+ local name = util.cache(options.cacheDir, s, nil, nil, ".verbatim")
+ return {"\\markdownRendererInputVerbatim{",name,"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->codeFence} as a function that will transform an
+% input fenced code block `s` with the infostring `i` to the output
+% format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.fencedCode(i, s)
+ if not self.is_writing then return "" end
+ local name = util.cache(options.cacheDir, s, nil, nil, ".verbatim")
+ return {"\\markdownRendererInputFencedCode{",name,"}{",i,"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->active_headings} as a stack of identifiers
+% of the headings that are currently active.
+%
+% \end{markdown}
+% \begin{macrocode}
+ self.active_headings = {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->heading} as a function that will transform an
+% input heading `s` at level `level` with identifiers `identifiers` to the
+% output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.heading(s,level,attributes)
+ local active_headings = self.active_headings
+ local slice_begin_type = self.slice_begin:sub(1, 1)
+ local slice_begin_identifier = self.slice_begin:sub(2) or ""
+ local slice_end_type = self.slice_end:sub(1, 1)
+ local slice_end_identifier = self.slice_end:sub(2) or ""
+
+ while #active_headings < level do
+ -- push empty identifiers for implied sections
+ table.insert(active_headings, {})
+ end
+
+ while #active_headings >= level do
+ -- pop identifiers for sections that have ended
+ local active_identifiers = active_headings[#active_headings]
+ if active_identifiers[slice_begin_identifier] ~= nil
+ and slice_begin_type == "$" then
+ self.is_writing = true
+ end
+ if active_identifiers[slice_end_identifier] ~= nil
+ and slice_end_type == "$" then
+ self.is_writing = false
+ end
+ table.remove(active_headings, #active_headings)
+ end
+
+ -- push identifiers for the new section
+ attributes = attributes or {}
+ local identifiers = {}
+ for index = 1, #attributes do
+ attribute = attributes[index]
+ identifiers[attribute:sub(2)] = true
+ end
+ if identifiers[slice_begin_identifier] ~= nil
+ and slice_begin_type == "^" then
+ self.is_writing = true
+ end
+ if identifiers[slice_end_identifier] ~= nil
+ and slice_end_type == "^" then
+ self.is_writing = false
+ end
+ table.insert(active_headings, identifiers)
+
+ if not self.is_writing then return "" end
+
+ local cmd
+ level = level + options.shiftHeadings
+ if level <= 1 then
+ cmd = "\\markdownRendererHeadingOne"
+ elseif level == 2 then
+ cmd = "\\markdownRendererHeadingTwo"
+ elseif level == 3 then
+ cmd = "\\markdownRendererHeadingThree"
+ elseif level == 4 then
+ cmd = "\\markdownRendererHeadingFour"
+ elseif level == 5 then
+ cmd = "\\markdownRendererHeadingFive"
+ elseif level >= 6 then
+ cmd = "\\markdownRendererHeadingSix"
+ else
+ cmd = ""
+ end
+ return {cmd,"{",s,"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->note} as a function that will transform an
+% input footnote `s` to the output format.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.note(s)
+ return {"\\markdownRendererFootnote{",s,"}"}
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{writer->citations} as a function that will transform an
+% input array of citations `cites` to the output format. If `text_cites`
+% is `true`, the citations should be rendered in-text, when applicable.
+% The `cites` array contains tables with the following keys and values:
+% \begin{itemize}
+% \item`suppress_author` -- If the value of the key is true, then the
+% author of the work should be omitted in the citation, when applicable.
+% \item`prenote` -- The value of the key is either `nil` or a rope
+% that should be inserted before the citation.
+% \item`postnote` -- The value of the key is either `nil` or a rope
+% that should be inserted after the citation.
+% \item`name` -- The value of this key is the citation name.
+% \end{itemize}
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.citations(text_cites, cites)
+ local buffer = {"\\markdownRenderer", text_cites and "TextCite" or "Cite",
+ "{", #cites, "}"}
+ for _,cite in ipairs(cites) do
+ buffer[#buffer+1] = {cite.suppress_author and "-" or "+", "{",
+ cite.prenote or "", "}{", cite.postnote or "", "}{", cite.name, "}"}
+ end
+ return buffer
+ end
+
+ return self
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Parsers
+% The \luamdef{parsers} hash table stores \acro{peg} patterns that are
+% static and can be reused between different \luam{reader} objects.
+%
+% \end{markdown}
+% \begin{macrocode}
+local parsers = {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Basic Parsers
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.percent = P("%")
+parsers.at = P("@")
+parsers.comma = P(",")
+parsers.asterisk = P("*")
+parsers.dash = P("-")
+parsers.plus = P("+")
+parsers.underscore = P("_")
+parsers.period = P(".")
+parsers.hash = P("#")
+parsers.ampersand = P("&")
+parsers.backtick = P("`")
+parsers.less = P("<")
+parsers.more = P(">")
+parsers.space = P(" ")
+parsers.squote = P("'")
+parsers.dquote = P('"')
+parsers.lparent = P("(")
+parsers.rparent = P(")")
+parsers.lbracket = P("[")
+parsers.rbracket = P("]")
+parsers.lbrace = P("{")
+parsers.rbrace = P("}")
+parsers.circumflex = P("^")
+parsers.slash = P("/")
+parsers.equal = P("=")
+parsers.colon = P(":")
+parsers.semicolon = P(";")
+parsers.exclamation = P("!")
+parsers.pipe = P("|")
+parsers.tilde = P("~")
+parsers.tab = P("\t")
+parsers.newline = P("\n")
+parsers.tightblocksep = P("\001")
+
+parsers.digit = R("09")
+parsers.hexdigit = R("09","af","AF")
+parsers.letter = R("AZ","az")
+parsers.alphanumeric = R("AZ","az","09")
+parsers.keyword = parsers.letter
+ * parsers.alphanumeric^0
+parsers.citation_chars = parsers.alphanumeric
+ + S("#$%&-+<>~/_")
+parsers.internal_punctuation = S(":;,.?")
+
+parsers.doubleasterisks = P("**")
+parsers.doubleunderscores = P("__")
+parsers.fourspaces = P(" ")
+
+parsers.any = P(1)
+parsers.fail = parsers.any - 1
+
+parsers.escapable = S("\\`*_{}[]()+_.!<>#-~:^@;")
+parsers.anyescaped = P("\\") / "" * parsers.escapable
+ + parsers.any
+
+parsers.spacechar = S("\t ")
+parsers.spacing = S(" \n\r\t")
+parsers.nonspacechar = parsers.any - parsers.spacing
+parsers.optionalspace = parsers.spacechar^0
+
+parsers.specialchar = S("*_`&[]<!\\.@-^")
+
+parsers.normalchar = parsers.any - (parsers.specialchar
+ + parsers.spacing
+ + parsers.tightblocksep)
+parsers.eof = -parsers.any
+parsers.nonindentspace = parsers.space^-3 * - parsers.spacechar
+parsers.indent = parsers.space^-3 * parsers.tab
+ + parsers.fourspaces / ""
+parsers.linechar = P(1 - parsers.newline)
+
+parsers.blankline = parsers.optionalspace
+ * parsers.newline / "\n"
+parsers.blanklines = parsers.blankline^0
+parsers.skipblanklines = (parsers.optionalspace * parsers.newline)^0
+parsers.indentedline = parsers.indent /""
+ * C(parsers.linechar^1 * parsers.newline^-1)
+parsers.optionallyindentedline = parsers.indent^-1 /""
+ * C(parsers.linechar^1 * parsers.newline^-1)
+parsers.sp = parsers.spacing^0
+parsers.spnl = parsers.optionalspace
+ * (parsers.newline * parsers.optionalspace)^-1
+parsers.line = parsers.linechar^0 * parsers.newline
+parsers.nonemptyline = parsers.line - parsers.blankline
+
+parsers.chunk = parsers.line * (parsers.optionallyindentedline
+ - parsers.blankline)^0
+
+parsers.css_identifier_char = R("AZ", "az", "09") + S("-_")
+parsers.css_identifier = (parsers.hash + parsers.period)
+ * (((parsers.css_identifier_char
+ - parsers.dash - parsers.digit)
+ * parsers.css_identifier_char^1)
+ + (parsers.dash
+ * (parsers.css_identifier_char
+ - parsers.digit)
+ * parsers.css_identifier_char^0))
+parsers.attribute_name_char = parsers.any - parsers.space
+ - parsers.squote - parsers.dquote
+ - parsers.more - parsers.slash
+ - parsers.equal
+parsers.attribute_value_char = parsers.any - parsers.dquote
+ - parsers.more
+
+-- block followed by 0 or more optionally
+-- indented blocks with first line indented.
+parsers.indented_blocks = function(bl)
+ return Cs( bl
+ * (parsers.blankline^1 * parsers.indent * -parsers.blankline * bl)^0
+ * (parsers.blankline^1 + parsers.eof) )
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Markdown Lists
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.bulletchar = C(parsers.plus + parsers.asterisk + parsers.dash)
+
+parsers.bullet = ( parsers.bulletchar * #parsers.spacing
+ * (parsers.tab + parsers.space^-3)
+ + parsers.space * parsers.bulletchar * #parsers.spacing
+ * (parsers.tab + parsers.space^-2)
+ + parsers.space * parsers.space * parsers.bulletchar
+ * #parsers.spacing
+ * (parsers.tab + parsers.space^-1)
+ + parsers.space * parsers.space * parsers.space
+ * parsers.bulletchar * #parsers.spacing
+ )
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Markdown Code Spans
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.openticks = Cg(parsers.backtick^1, "ticks")
+
+local function captures_equal_length(s,i,a,b)
+ return #a == #b and i
+end
+
+parsers.closeticks = parsers.space^-1
+ * Cmt(C(parsers.backtick^1)
+ * Cb("ticks"), captures_equal_length)
+
+parsers.intickschar = (parsers.any - S(" \n\r`"))
+ + (parsers.newline * -parsers.blankline)
+ + (parsers.space - parsers.closeticks)
+ + (parsers.backtick^1 - parsers.closeticks)
+
+parsers.inticks = parsers.openticks * parsers.space^-1
+ * C(parsers.intickschar^0) * parsers.closeticks
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Fenced Code Blocks
+%
+% \end{markdown}
+% \begin{macrocode}
+local function captures_geq_length(s,i,a,b)
+ return #a >= #b and i
+end
+
+parsers.infostring = (parsers.linechar - (parsers.backtick
+ + parsers.space^1 * (parsers.newline + parsers.eof)))^0
+
+local fenceindent
+parsers.fencehead = function(char)
+ return C(parsers.nonindentspace) / function(s) fenceindent = #s end
+ * Cg(char^3, "fencelength")
+ * parsers.optionalspace * C(parsers.infostring)
+ * parsers.optionalspace * (parsers.newline + parsers.eof)
+end
+
+parsers.fencetail = function(char)
+ return parsers.nonindentspace
+ * Cmt(C(char^3) * Cb("fencelength"), captures_geq_length)
+ * parsers.optionalspace * (parsers.newline + parsers.eof)
+ + parsers.eof
+end
+
+parsers.fencedline = function(char)
+ return C(parsers.line - parsers.fencetail(char))
+ / function(s)
+ i = 1
+ remaining = fenceindent
+ while true do
+ c = s:sub(i, i)
+ if c == " " and remaining > 0 then
+ remaining = remaining - 1
+ i = i + 1
+ elseif c == "\t" and remaining > 3 then
+ remaining = remaining - 4
+ i = i + 1
+ else
+ break
+ end
+ end
+ return s:sub(i)
+ end
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Markdown Tags and Links
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.leader = parsers.space^-3
+
+-- content in balanced brackets, parentheses, or quotes:
+parsers.bracketed = P{ parsers.lbracket
+ * ((parsers.anyescaped - (parsers.lbracket
+ + parsers.rbracket
+ + parsers.blankline^2)
+ ) + V(1))^0
+ * parsers.rbracket }
+
+parsers.inparens = P{ parsers.lparent
+ * ((parsers.anyescaped - (parsers.lparent
+ + parsers.rparent
+ + parsers.blankline^2)
+ ) + V(1))^0
+ * parsers.rparent }
+
+parsers.squoted = P{ parsers.squote * parsers.alphanumeric
+ * ((parsers.anyescaped - (parsers.squote
+ + parsers.blankline^2)
+ ) + V(1))^0
+ * parsers.squote }
+
+parsers.dquoted = P{ parsers.dquote * parsers.alphanumeric
+ * ((parsers.anyescaped - (parsers.dquote
+ + parsers.blankline^2)
+ ) + V(1))^0
+ * parsers.dquote }
+
+-- bracketed tag for markdown links, allowing nested brackets:
+parsers.tag = parsers.lbracket
+ * Cs((parsers.alphanumeric^1
+ + parsers.bracketed
+ + parsers.inticks
+ + (parsers.anyescaped
+ - (parsers.rbracket + parsers.blankline^2)))^0)
+ * parsers.rbracket
+
+-- url for markdown links, allowing nested brackets:
+parsers.url = parsers.less * Cs((parsers.anyescaped
+ - parsers.more)^0)
+ * parsers.more
+ + Cs((parsers.inparens + (parsers.anyescaped
+ - parsers.spacing
+ - parsers.rparent))^1)
+
+-- quoted text, possibly with nested quotes:
+parsers.title_s = parsers.squote * Cs(((parsers.anyescaped-parsers.squote)
+ + parsers.squoted)^0)
+ * parsers.squote
+
+parsers.title_d = parsers.dquote * Cs(((parsers.anyescaped-parsers.dquote)
+ + parsers.dquoted)^0)
+ * parsers.dquote
+
+parsers.title_p = parsers.lparent
+ * Cs((parsers.inparens + (parsers.anyescaped-parsers.rparent))^0)
+ * parsers.rparent
+
+parsers.title = parsers.title_d + parsers.title_s + parsers.title_p
+
+parsers.optionaltitle
+ = parsers.spnl * parsers.title * parsers.spacechar^0
+ + Cc("")
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for iA\,Writer Content Blocks
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.contentblock_tail
+ = parsers.optionaltitle
+ * (parsers.newline + parsers.eof)
+
+-- case insensitive online image suffix:
+parsers.onlineimagesuffix
+ = (function(...)
+ local parser = nil
+ for _,suffix in ipairs({...}) do
+ local pattern=nil
+ for i=1,#suffix do
+ local char=suffix:sub(i,i)
+ char = S(char:lower()..char:upper())
+ if pattern == nil then
+ pattern = char
+ else
+ pattern = pattern * char
+ end
+ end
+ if parser == nil then
+ parser = pattern
+ else
+ parser = parser + pattern
+ end
+ end
+ return parser
+ end)("png", "jpg", "jpeg", "gif", "tif", "tiff")
+
+-- online image url for iA Writer content blocks with mandatory suffix,
+-- allowing nested brackets:
+parsers.onlineimageurl
+ = (parsers.less
+ * Cs((parsers.anyescaped
+ - parsers.more
+ - #(parsers.period
+ * parsers.onlineimagesuffix
+ * parsers.more
+ * parsers.contentblock_tail))^0)
+ * parsers.period
+ * Cs(parsers.onlineimagesuffix)
+ * parsers.more
+ + (Cs((parsers.inparens
+ + (parsers.anyescaped
+ - parsers.spacing
+ - parsers.rparent
+ - #(parsers.period
+ * parsers.onlineimagesuffix
+ * parsers.contentblock_tail)))^0)
+ * parsers.period
+ * Cs(parsers.onlineimagesuffix))
+ ) * Cc("onlineimage")
+
+-- filename for iA Writer content blocks with mandatory suffix:
+parsers.localfilepath
+ = parsers.slash
+ * Cs((parsers.anyescaped
+ - parsers.tab
+ - parsers.newline
+ - #(parsers.period
+ * parsers.alphanumeric^1
+ * parsers.contentblock_tail))^1)
+ * parsers.period
+ * Cs(parsers.alphanumeric^1)
+ * Cc("localfile")
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Citations
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.citation_name = Cs(parsers.dash^-1) * parsers.at
+ * Cs(parsers.citation_chars
+ * (((parsers.citation_chars + parsers.internal_punctuation
+ - parsers.comma - parsers.semicolon)
+ * -#((parsers.internal_punctuation - parsers.comma
+ - parsers.semicolon)^0
+ * -(parsers.citation_chars + parsers.internal_punctuation
+ - parsers.comma - parsers.semicolon)))^0
+ * parsers.citation_chars)^-1)
+
+parsers.citation_body_prenote
+ = Cs((parsers.alphanumeric^1
+ + parsers.bracketed
+ + parsers.inticks
+ + (parsers.anyescaped
+ - (parsers.rbracket + parsers.blankline^2))
+ - (parsers.spnl * parsers.dash^-1 * parsers.at))^0)
+
+parsers.citation_body_postnote
+ = Cs((parsers.alphanumeric^1
+ + parsers.bracketed
+ + parsers.inticks
+ + (parsers.anyescaped
+ - (parsers.rbracket + parsers.semicolon
+ + parsers.blankline^2))
+ - (parsers.spnl * parsers.rbracket))^0)
+
+parsers.citation_body_chunk
+ = parsers.citation_body_prenote
+ * parsers.spnl * parsers.citation_name
+ * (parsers.internal_punctuation - parsers.semicolon)^-1
+ * parsers.spnl * parsers.citation_body_postnote
+
+parsers.citation_body
+ = parsers.citation_body_chunk
+ * (parsers.semicolon * parsers.spnl
+ * parsers.citation_body_chunk)^0
+
+parsers.citation_headless_body_postnote
+ = Cs((parsers.alphanumeric^1
+ + parsers.bracketed
+ + parsers.inticks
+ + (parsers.anyescaped
+ - (parsers.rbracket + parsers.at
+ + parsers.semicolon + parsers.blankline^2))
+ - (parsers.spnl * parsers.rbracket))^0)
+
+parsers.citation_headless_body
+ = parsers.citation_headless_body_postnote
+ * (parsers.sp * parsers.semicolon * parsers.spnl
+ * parsers.citation_body_chunk)^0
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Footnotes
+%
+% \end{markdown}
+% \begin{macrocode}
+local function strip_first_char(s)
+ return s:sub(2)
+end
+
+parsers.RawNoteRef = #(parsers.lbracket * parsers.circumflex)
+ * parsers.tag / strip_first_char
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Tables
+%
+% \end{markdown}
+% \begin{macrocode}
+local function make_pipe_table_rectangular(rows)
+ local num_columns = #rows[2]
+ local rectangular_rows = {}
+ for i = 1, #rows do
+ local row = rows[i]
+ local rectangular_row = {}
+ for j = 1, num_columns do
+ rectangular_row[j] = row[j] or ""
+ end
+ table.insert(rectangular_rows, rectangular_row)
+ end
+ return rectangular_rows
+end
+
+local function pipe_table_row(allow_empty_first_column
+ , nonempty_column
+ , column_separator
+ , column)
+ local row_beginning
+ if allow_empty_first_column then
+ row_beginning = -- empty first column
+ #(parsers.spacechar^4
+ * column_separator)
+ * parsers.optionalspace
+ * column
+ * parsers.optionalspace
+ -- non-empty first column
+ + parsers.nonindentspace
+ * nonempty_column^-1
+ * parsers.optionalspace
+ else
+ row_beginning = parsers.nonindentspace
+ * nonempty_column^-1
+ * parsers.optionalspace
+ end
+
+ return Ct(row_beginning
+ * (-- single column with no leading pipes
+ #(column_separator
+ * parsers.optionalspace
+ * parsers.newline)
+ * column_separator
+ * parsers.optionalspace
+ -- single column with leading pipes or
+ -- more than a single column
+ + (column_separator
+ * parsers.optionalspace
+ * column
+ * parsers.optionalspace)^1
+ * (column_separator
+ * parsers.optionalspace)^-1))
+end
+
+parsers.table_hline_separator = parsers.pipe + parsers.plus
+parsers.table_hline_column = (parsers.dash
+ - #(parsers.dash
+ * (parsers.spacechar
+ + parsers.table_hline_separator
+ + parsers.newline)))^1
+ * (parsers.colon * Cc("r")
+ + parsers.dash * Cc("d"))
+ + parsers.colon
+ * (parsers.dash
+ - #(parsers.dash
+ * (parsers.spacechar
+ + parsers.table_hline_separator
+ + parsers.newline)))^1
+ * (parsers.colon * Cc("c")
+ + parsers.dash * Cc("l"))
+parsers.table_hline = pipe_table_row(false
+ , parsers.table_hline_column
+ , parsers.table_hline_separator
+ , parsers.table_hline_column)
+parsers.table_caption_beginning = parsers.skipblanklines
+ * parsers.nonindentspace
+ * (P("Table")^-1 * parsers.colon)
+ * parsers.optionalspace
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for HTML
+%
+% \end{markdown}
+% \begin{macrocode}
+-- case-insensitive match (we assume s is lowercase). must be single byte encoding
+parsers.keyword_exact = function(s)
+ local parser = P(0)
+ for i=1,#s do
+ local c = s:sub(i,i)
+ local m = c .. upper(c)
+ parser = parser * S(m)
+ end
+ return parser
+end
+
+parsers.block_keyword =
+ parsers.keyword_exact("address") + parsers.keyword_exact("blockquote") +
+ parsers.keyword_exact("center") + parsers.keyword_exact("del") +
+ parsers.keyword_exact("dir") + parsers.keyword_exact("div") +
+ parsers.keyword_exact("p") + parsers.keyword_exact("pre") +
+ parsers.keyword_exact("li") + parsers.keyword_exact("ol") +
+ parsers.keyword_exact("ul") + parsers.keyword_exact("dl") +
+ parsers.keyword_exact("dd") + parsers.keyword_exact("form") +
+ parsers.keyword_exact("fieldset") + parsers.keyword_exact("isindex") +
+ parsers.keyword_exact("ins") + parsers.keyword_exact("menu") +
+ parsers.keyword_exact("noframes") + parsers.keyword_exact("frameset") +
+ parsers.keyword_exact("h1") + parsers.keyword_exact("h2") +
+ parsers.keyword_exact("h3") + parsers.keyword_exact("h4") +
+ parsers.keyword_exact("h5") + parsers.keyword_exact("h6") +
+ parsers.keyword_exact("hr") + parsers.keyword_exact("script") +
+ parsers.keyword_exact("noscript") + parsers.keyword_exact("table") +
+ parsers.keyword_exact("tbody") + parsers.keyword_exact("tfoot") +
+ parsers.keyword_exact("thead") + parsers.keyword_exact("th") +
+ parsers.keyword_exact("td") + parsers.keyword_exact("tr")
+
+-- There is no reason to support bad html, so we expect quoted attributes
+parsers.htmlattributevalue
+ = parsers.squote * (parsers.any - (parsers.blankline
+ + parsers.squote))^0
+ * parsers.squote
+ + parsers.dquote * (parsers.any - (parsers.blankline
+ + parsers.dquote))^0
+ * parsers.dquote
+
+parsers.htmlattribute = parsers.spacing^1
+ * (parsers.alphanumeric + S("_-"))^1
+ * parsers.sp * parsers.equal * parsers.sp
+ * parsers.htmlattributevalue
+
+parsers.htmlcomment = P("<!--") * (parsers.any - P("-->"))^0 * P("-->")
+
+parsers.htmlinstruction = P("<?") * (parsers.any - P("?>" ))^0 * P("?>" )
+
+parsers.openelt_any = parsers.less * parsers.keyword * parsers.htmlattribute^0
+ * parsers.sp * parsers.more
+
+parsers.openelt_exact = function(s)
+ return parsers.less * parsers.sp * parsers.keyword_exact(s)
+ * parsers.htmlattribute^0 * parsers.sp * parsers.more
+end
+
+parsers.openelt_block = parsers.sp * parsers.block_keyword
+ * parsers.htmlattribute^0 * parsers.sp * parsers.more
+
+parsers.closeelt_any = parsers.less * parsers.sp * parsers.slash
+ * parsers.keyword * parsers.sp * parsers.more
+
+parsers.closeelt_exact = function(s)
+ return parsers.less * parsers.sp * parsers.slash * parsers.keyword_exact(s)
+ * parsers.sp * parsers.more
+end
+
+parsers.emptyelt_any = parsers.less * parsers.sp * parsers.keyword
+ * parsers.htmlattribute^0 * parsers.sp * parsers.slash
+ * parsers.more
+
+parsers.emptyelt_block = parsers.less * parsers.sp * parsers.block_keyword
+ * parsers.htmlattribute^0 * parsers.sp * parsers.slash
+ * parsers.more
+
+parsers.displaytext = (parsers.any - parsers.less)^1
+
+-- return content between two matched HTML tags
+parsers.in_matched = function(s)
+ return { parsers.openelt_exact(s)
+ * (V(1) + parsers.displaytext
+ + (parsers.less - parsers.closeelt_exact(s)))^0
+ * parsers.closeelt_exact(s) }
+end
+
+local function parse_matched_tags(s,pos)
+ local t = string.lower(lpeg.match(C(parsers.keyword),s,pos))
+ return lpeg.match(parsers.in_matched(t),s,pos-1)
+end
+
+parsers.in_matched_block_tags = parsers.less
+ * Cmt(#parsers.openelt_block, parse_matched_tags)
+
+parsers.displayhtml = parsers.htmlcomment
+ + parsers.emptyelt_block
+ + parsers.openelt_exact("hr")
+ + parsers.in_matched_block_tags
+ + parsers.htmlinstruction
+
+parsers.inlinehtml = parsers.emptyelt_any
+ + parsers.htmlcomment
+ + parsers.htmlinstruction
+ + parsers.openelt_any
+ + parsers.closeelt_any
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for HTML Entities
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.hexentity = parsers.ampersand * parsers.hash * S("Xx")
+ * C(parsers.hexdigit^1) * parsers.semicolon
+parsers.decentity = parsers.ampersand * parsers.hash
+ * C(parsers.digit^1) * parsers.semicolon
+parsers.tagentity = parsers.ampersand * C(parsers.alphanumeric^1)
+ * parsers.semicolon
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Helpers for References
+%
+% \end{markdown}
+% \begin{macrocode}
+-- parse a reference definition: [foo]: /bar "title"
+parsers.define_reference_parser = parsers.leader * parsers.tag * parsers.colon
+ * parsers.spacechar^0 * parsers.url
+ * parsers.optionaltitle * parsers.blankline^1
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Inline Elements
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.Inline = V("Inline")
+parsers.IndentedInline = V("IndentedInline")
+
+-- parse many p between starter and ender
+parsers.between = function(p, starter, ender)
+ local ender2 = B(parsers.nonspacechar) * ender
+ return (starter * #parsers.nonspacechar * Ct(p * (p - ender2)^0) * ender2)
+end
+
+parsers.urlchar = parsers.anyescaped - parsers.newline - parsers.more
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Block Elements
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.Block = V("Block")
+
+parsers.OnlineImageURL
+ = parsers.leader
+ * parsers.onlineimageurl
+ * parsers.optionaltitle
+
+parsers.LocalFilePath
+ = parsers.leader
+ * parsers.localfilepath
+ * parsers.optionaltitle
+
+parsers.TildeFencedCode
+ = parsers.fencehead(parsers.tilde)
+ * Cs(parsers.fencedline(parsers.tilde)^0)
+ * parsers.fencetail(parsers.tilde)
+
+parsers.BacktickFencedCode
+ = parsers.fencehead(parsers.backtick)
+ * Cs(parsers.fencedline(parsers.backtick)^0)
+ * parsers.fencetail(parsers.backtick)
+
+parsers.lineof = function(c)
+ return (parsers.leader * (P(c) * parsers.optionalspace)^3
+ * (parsers.newline * parsers.blankline^1
+ + parsers.newline^-1 * parsers.eof))
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Lists
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.defstartchar = S("~:")
+parsers.defstart = ( parsers.defstartchar * #parsers.spacing
+ * (parsers.tab + parsers.space^-3)
+ + parsers.space * parsers.defstartchar * #parsers.spacing
+ * (parsers.tab + parsers.space^-2)
+ + parsers.space * parsers.space * parsers.defstartchar
+ * #parsers.spacing
+ * (parsers.tab + parsers.space^-1)
+ + parsers.space * parsers.space * parsers.space
+ * parsers.defstartchar * #parsers.spacing
+ )
+
+parsers.dlchunk = Cs(parsers.line * (parsers.indentedline - parsers.blankline)^0)
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Headings
+%
+% \end{markdown}
+% \begin{macrocode}
+parsers.heading_attribute = C(parsers.css_identifier)
+ + C((parsers.attribute_name_char
+ - parsers.rbrace)^1
+ * parsers.equal
+ * (parsers.attribute_value_char
+ - parsers.rbrace)^1)
+parsers.HeadingAttributes = parsers.lbrace
+ * parsers.heading_attribute
+ * (parsers.spacechar^1
+ * parsers.heading_attribute)^0
+ * parsers.rbrace
+
+-- parse Atx heading start and return level
+parsers.HeadingStart = #parsers.hash * C(parsers.hash^-6)
+ * -parsers.hash / length
+
+-- parse setext header ending and return level
+parsers.HeadingLevel = parsers.equal^1 * Cc(1) + parsers.dash^1 * Cc(2)
+
+local function strip_atx_end(s)
+ return s:gsub("[#%s]*\n$","")
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Markdown Reader
+% \label{sec:markdownreader}
+% This section documents the \luam{reader} object, which implements the
+% routines for parsing the markdown input. The object corresponds to the
+% markdown reader object that was located in the
+% `lunamark/reader/markdown.lua` file in the Lunamark Lua module.
+%
+% Although not specified in the Lua interface (see Section
+% \ref{sec:luainterface}), the \luam{reader} object is exported, so that the
+% curious user could easily tinker with the methods of the objects produced by
+% the \luam{reader.new} method described below. The user should be aware,
+% however, that the implementation may change in a future revision.
+%
+% The \luamdef{reader.new} method creates and returns a new \TeX{} reader
+% object associated with the Lua interface options (see Section
+% \ref{sec:luaoptions}) `options` and with a writer object `writer`. When
+% `options` are unspecified, it is assumed that an empty table was passed to
+% the method.
+%
+% The objects produced by the \luam{reader.new} method expose instance methods
+% and variables of their own. As a convention, I will refer to these
+% \meta{member}s as `reader->`\meta{member}.
+%
+% \end{markdown}
+% \begin{macrocode}
+M.reader = {}
+function M.reader.new(writer, options)
+ local self = {}
+ options = options or {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Make the `options` table inherit from the \luam{defaultOptions} table.
+%
+% \end{markdown}
+% \begin{macrocode}
+ setmetatable(options, { __index = function (_, key)
+ return defaultOptions[key] end })
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Top-Level Helper Functions
+% Define \luamdef{normalize_tag} as a function that normalizes a markdown
+% reference tag by lowercasing it, and by collapsing any adjacent whitespace
+% characters.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local function normalize_tag(tag)
+ return unicode.utf8.lower(
+ gsub(util.rope_to_string(tag), "[ \n\r\t]+", " "))
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Define \luamdef{expandtabs} either as an identity function, when the
+% \Opt{preserveTabs} Lua inrerface option is `true`, or to a function that
+% expands tabs into spaces otherwise.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local expandtabs
+ if options.preserveTabs then
+ expandtabs = function(s) return s end
+ else
+ expandtabs = function(s)
+ if s:find("\t") then
+ return s:gsub("[^\n]*", util.expand_tabs_in_line)
+ else
+ return s
+ end
+ end
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \luamdef{larsers} (as in ``local \luam{parsers}'') hash table stores
+% \acro{peg} patterns that depend on the received `options`, which impedes
+% their reuse between different \luam{reader} objects.
+%
+% \end{markdown}
+% \begin{macrocode}
+ local larsers = {}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Top-Level Parser Functions
+%
+% \end{markdown}
+% \begin{macrocode}
+ local function create_parser(name, grammar)
+ return function(str)
+ local res = lpeg.match(grammar(), str)
+ if res == nil then
+ error(format("%s failed on:\n%s", name, str:sub(1,20)))
+ else
+ return res
+ end
+ end
+ end
+
+ local parse_blocks
+ = create_parser("parse_blocks",
+ function()
+ return larsers.blocks
+ end)
+
+ local parse_blocks_toplevel
+ = create_parser("parse_blocks_toplevel",
+ function()
+ return larsers.blocks_toplevel
+ end)
+
+ local parse_inlines
+ = create_parser("parse_inlines",
+ function()
+ return larsers.inlines
+ end)
+
+ local parse_inlines_no_link
+ = create_parser("parse_inlines_no_link",
+ function()
+ return larsers.inlines_no_link
+ end)
+
+ local parse_inlines_no_inline_note
+ = create_parser("parse_inlines_no_inline_note",
+ function()
+ return larsers.inlines_no_inline_note
+ end)
+
+ local parse_inlines_nbsp
+ = create_parser("parse_inlines_nbsp",
+ function()
+ return larsers.inlines_nbsp
+ end)
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Markdown Lists (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ if options.hashEnumerators then
+ larsers.dig = parsers.digit + parsers.hash
+ else
+ larsers.dig = parsers.digit
+ end
+
+ larsers.enumerator = C(larsers.dig^3 * parsers.period) * #parsers.spacing
+ + C(larsers.dig^2 * parsers.period) * #parsers.spacing
+ * (parsers.tab + parsers.space^1)
+ + C(larsers.dig * parsers.period) * #parsers.spacing
+ * (parsers.tab + parsers.space^-2)
+ + parsers.space * C(larsers.dig^2 * parsers.period)
+ * #parsers.spacing
+ + parsers.space * C(larsers.dig * parsers.period)
+ * #parsers.spacing
+ * (parsers.tab + parsers.space^-1)
+ + parsers.space * parsers.space * C(larsers.dig^1
+ * parsers.period) * #parsers.spacing
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Blockquotes (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ -- strip off leading > and indents, and run through blocks
+ larsers.blockquote_body = ((parsers.leader * parsers.more * parsers.space^-1)/""
+ * parsers.linechar^0 * parsers.newline)^1
+ * (-(parsers.leader * parsers.more
+ + parsers.blankline) * parsers.linechar^1
+ * parsers.newline)^0
+
+ if not options.breakableBlockquotes then
+ larsers.blockquote_body = larsers.blockquote_body
+ * (parsers.blankline^0 / "")
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Citations (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ larsers.citations = function(text_cites, raw_cites)
+ local function normalize(str)
+ if str == "" then
+ str = nil
+ else
+ str = (options.citationNbsps and parse_inlines_nbsp or
+ parse_inlines)(str)
+ end
+ return str
+ end
+
+ local cites = {}
+ for i = 1,#raw_cites,4 do
+ cites[#cites+1] = {
+ prenote = normalize(raw_cites[i]),
+ suppress_author = raw_cites[i+1] == "-",
+ name = writer.citation(raw_cites[i+2]),
+ postnote = normalize(raw_cites[i+3]),
+ }
+ end
+ return writer.citations(text_cites, cites)
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Footnotes (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ local rawnotes = {}
+
+ -- like indirect_link
+ local function lookup_note(ref)
+ return function()
+ local found = rawnotes[normalize_tag(ref)]
+ if found then
+ return writer.note(parse_blocks_toplevel(found))
+ else
+ return {"[", parse_inlines("^" .. ref), "]"}
+ end
+ end
+ end
+
+ local function register_note(ref,rawnote)
+ rawnotes[normalize_tag(ref)] = rawnote
+ return ""
+ end
+
+ larsers.NoteRef = parsers.RawNoteRef / lookup_note
+
+
+ larsers.NoteBlock = parsers.leader * parsers.RawNoteRef * parsers.colon
+ * parsers.spnl * parsers.indented_blocks(parsers.chunk)
+ / register_note
+
+ larsers.InlineNote = parsers.circumflex
+ * (parsers.tag / parse_inlines_no_inline_note) -- no notes inside notes
+ / writer.note
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Parsers Used for Tables (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+larsers.table_row = pipe_table_row(true
+ , (C((parsers.linechar - parsers.pipe)^1)
+ / parse_inlines)
+ , parsers.pipe
+ , (C((parsers.linechar - parsers.pipe)^0)
+ / parse_inlines))
+
+if options.tableCaptions then
+ larsers.table_caption = #parsers.table_caption_beginning
+ * parsers.table_caption_beginning
+ * Ct(parsers.IndentedInline^1)
+ * parsers.newline
+else
+ larsers.table_caption = parsers.fail
+end
+
+larsers.PipeTable = Ct(larsers.table_row * parsers.newline
+ * parsers.table_hline
+ * (parsers.newline * larsers.table_row)^0)
+ / make_pipe_table_rectangular
+ * larsers.table_caption^-1
+ / writer.table
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Helpers for Links and References (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ -- List of references defined in the document
+ local references
+
+ -- add a reference to the list
+ local function register_link(tag,url,title)
+ references[normalize_tag(tag)] = { url = url, title = title }
+ return ""
+ end
+
+ -- lookup link reference and return either
+ -- the link or nil and fallback text.
+ local function lookup_reference(label,sps,tag)
+ local tagpart
+ if not tag then
+ tag = label
+ tagpart = ""
+ elseif tag == "" then
+ tag = label
+ tagpart = "[]"
+ else
+ tagpart = {"[", parse_inlines(tag), "]"}
+ end
+ if sps then
+ tagpart = {sps, tagpart}
+ end
+ local r = references[normalize_tag(tag)]
+ if r then
+ return r
+ else
+ return nil, {"[", parse_inlines(label), "]", tagpart}
+ end
+ end
+
+ -- lookup link reference and return a link, if the reference is found,
+ -- or a bracketed label otherwise.
+ local function indirect_link(label,sps,tag)
+ return function()
+ local r,fallback = lookup_reference(label,sps,tag)
+ if r then
+ return writer.link(parse_inlines_no_link(label), r.url, r.title)
+ else
+ return fallback
+ end
+ end
+ end
+
+ -- lookup image reference and return an image, if the reference is found,
+ -- or a bracketed label otherwise.
+ local function indirect_image(label,sps,tag)
+ return function()
+ local r,fallback = lookup_reference(label,sps,tag)
+ if r then
+ return writer.image(writer.string(label), r.url, r.title)
+ else
+ return {"!", fallback}
+ end
+ end
+ end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Inline Elements (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ larsers.Str = parsers.normalchar^1 / writer.string
+
+ larsers.Symbol = (parsers.specialchar - parsers.tightblocksep)
+ / writer.string
+
+ larsers.Ellipsis = P("...") / writer.ellipsis
+
+ larsers.Smart = larsers.Ellipsis
+
+ larsers.Code = parsers.inticks / writer.code
+
+ if options.blankBeforeBlockquote then
+ larsers.bqstart = parsers.fail
+ else
+ larsers.bqstart = parsers.more
+ end
+
+ if options.blankBeforeHeading then
+ larsers.headerstart = parsers.fail
+ else
+ larsers.headerstart = parsers.hash
+ + (parsers.line * (parsers.equal^1 + parsers.dash^1)
+ * parsers.optionalspace * parsers.newline)
+ end
+
+ if not options.fencedCode or options.blankBeforeCodeFence then
+ larsers.fencestart = parsers.fail
+ else
+ larsers.fencestart = parsers.fencehead(parsers.backtick)
+ + parsers.fencehead(parsers.tilde)
+ end
+
+ larsers.Endline = parsers.newline * -( -- newline, but not before...
+ parsers.blankline -- paragraph break
+ + parsers.tightblocksep -- nested list
+ + parsers.eof -- end of document
+ + larsers.bqstart
+ + larsers.headerstart
+ + larsers.fencestart
+ ) * parsers.spacechar^0 / writer.space
+
+ larsers.OptionalIndent
+ = parsers.spacechar^1 / writer.space
+
+ larsers.Space = parsers.spacechar^2 * larsers.Endline / writer.linebreak
+ + parsers.spacechar^1 * larsers.Endline^-1 * parsers.eof / ""
+ + parsers.spacechar^1 * larsers.Endline^-1
+ * parsers.optionalspace / writer.space
+
+ larsers.NonbreakingEndline
+ = parsers.newline * -( -- newline, but not before...
+ parsers.blankline -- paragraph break
+ + parsers.tightblocksep -- nested list
+ + parsers.eof -- end of document
+ + larsers.bqstart
+ + larsers.headerstart
+ + larsers.fencestart
+ ) * parsers.spacechar^0 / writer.nbsp
+
+ larsers.NonbreakingSpace
+ = parsers.spacechar^2 * larsers.Endline / writer.linebreak
+ + parsers.spacechar^1 * larsers.Endline^-1 * parsers.eof / ""
+ + parsers.spacechar^1 * larsers.Endline^-1
+ * parsers.optionalspace / writer.nbsp
+
+ if options.underscores then
+ larsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks,
+ parsers.doubleasterisks)
+ + parsers.between(parsers.Inline, parsers.doubleunderscores,
+ parsers.doubleunderscores)
+ ) / writer.strong
+
+ larsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk,
+ parsers.asterisk)
+ + parsers.between(parsers.Inline, parsers.underscore,
+ parsers.underscore)
+ ) / writer.emphasis
+ else
+ larsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks,
+ parsers.doubleasterisks)
+ ) / writer.strong
+
+ larsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk,
+ parsers.asterisk)
+ ) / writer.emphasis
+ end
+
+ larsers.AutoLinkUrl = parsers.less
+ * C(parsers.alphanumeric^1 * P("://") * parsers.urlchar^1)
+ * parsers.more
+ / function(url)
+ return writer.link(writer.string(url), url)
+ end
+
+ larsers.AutoLinkEmail = parsers.less
+ * C((parsers.alphanumeric + S("-._+"))^1
+ * P("@") * parsers.urlchar^1)
+ * parsers.more
+ / function(email)
+ return writer.link(writer.string(email),
+ "mailto:"..email)
+ end
+
+ larsers.DirectLink = (parsers.tag / parse_inlines_no_link) -- no links inside links
+ * parsers.spnl
+ * parsers.lparent
+ * (parsers.url + Cc("")) -- link can be empty [foo]()
+ * parsers.optionaltitle
+ * parsers.rparent
+ / writer.link
+
+ larsers.IndirectLink = parsers.tag * (C(parsers.spnl) * parsers.tag)^-1
+ / indirect_link
+
+ -- parse a link or image (direct or indirect)
+ larsers.Link = larsers.DirectLink + larsers.IndirectLink
+
+ larsers.DirectImage = parsers.exclamation
+ * (parsers.tag / parse_inlines)
+ * parsers.spnl
+ * parsers.lparent
+ * (parsers.url + Cc("")) -- link can be empty [foo]()
+ * parsers.optionaltitle
+ * parsers.rparent
+ / writer.image
+
+ larsers.IndirectImage = parsers.exclamation * parsers.tag
+ * (C(parsers.spnl) * parsers.tag)^-1 / indirect_image
+
+ larsers.Image = larsers.DirectImage + larsers.IndirectImage
+
+ larsers.TextCitations = Ct(Cc("")
+ * parsers.citation_name
+ * ((parsers.spnl
+ * parsers.lbracket
+ * parsers.citation_headless_body
+ * parsers.rbracket) + Cc("")))
+ / function(raw_cites)
+ return larsers.citations(true, raw_cites)
+ end
+
+ larsers.ParenthesizedCitations
+ = Ct(parsers.lbracket
+ * parsers.citation_body
+ * parsers.rbracket)
+ / function(raw_cites)
+ return larsers.citations(false, raw_cites)
+ end
+
+ larsers.Citations = larsers.TextCitations + larsers.ParenthesizedCitations
+
+ -- avoid parsing long strings of * or _ as emph/strong
+ larsers.UlOrStarLine = parsers.asterisk^4 + parsers.underscore^4
+ / writer.string
+
+ larsers.EscapedChar = S("\\") * C(parsers.escapable) / writer.string
+
+ larsers.InlineHtml = C(parsers.inlinehtml) / writer.inline_html
+
+ larsers.HtmlEntity = parsers.hexentity / entities.hex_entity / writer.string
+ + parsers.decentity / entities.dec_entity / writer.string
+ + parsers.tagentity / entities.char_entity / writer.string
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Block Elements (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ larsers.ContentBlock = parsers.leader
+ * (parsers.localfilepath + parsers.onlineimageurl)
+ * parsers.contentblock_tail
+ / writer.contentblock
+
+ larsers.DisplayHtml = C(parsers.displayhtml)
+ / expandtabs / writer.display_html
+
+ larsers.Verbatim = Cs( (parsers.blanklines
+ * ((parsers.indentedline - parsers.blankline))^1)^1
+ ) / expandtabs / writer.verbatim
+
+ larsers.FencedCode = (parsers.TildeFencedCode
+ + parsers.BacktickFencedCode)
+ / function(infostring, code)
+ return writer.fencedCode(writer.string(infostring),
+ expandtabs(code))
+ end
+
+ larsers.Blockquote = Cs(larsers.blockquote_body^1)
+ / parse_blocks_toplevel / writer.blockquote
+
+ larsers.HorizontalRule = ( parsers.lineof(parsers.asterisk)
+ + parsers.lineof(parsers.dash)
+ + parsers.lineof(parsers.underscore)
+ ) / writer.hrule
+
+ larsers.Reference = parsers.define_reference_parser / register_link
+
+ larsers.Paragraph = parsers.nonindentspace * Ct(parsers.Inline^1)
+ * parsers.newline
+ * ( parsers.blankline^1
+ + #parsers.hash
+ + #(parsers.leader * parsers.more * parsers.space^-1)
+ )
+ / writer.paragraph
+
+ larsers.ToplevelParagraph
+ = parsers.nonindentspace * Ct(parsers.Inline^1)
+ * ( parsers.newline
+ * ( parsers.blankline^1
+ + #parsers.hash
+ + #(parsers.leader * parsers.more * parsers.space^-1)
+ + parsers.eof
+ )
+ + parsers.eof )
+ / writer.paragraph
+
+ larsers.Plain = parsers.nonindentspace * Ct(parsers.Inline^1)
+ / writer.plain
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Lists (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ larsers.starter = parsers.bullet + larsers.enumerator
+
+ -- we use \001 as a separator between a tight list item and a
+ -- nested list under it.
+ larsers.NestedList = Cs((parsers.optionallyindentedline
+ - larsers.starter)^1)
+ / function(a) return "\001"..a end
+
+ larsers.ListBlockLine = parsers.optionallyindentedline
+ - parsers.blankline - (parsers.indent^-1
+ * larsers.starter)
+
+ larsers.ListBlock = parsers.line * larsers.ListBlockLine^0
+
+ larsers.ListContinuationBlock = parsers.blanklines * (parsers.indent / "")
+ * larsers.ListBlock
+
+ larsers.TightListItem = function(starter)
+ return -larsers.HorizontalRule
+ * (Cs(starter / "" * larsers.ListBlock * larsers.NestedList^-1)
+ / parse_blocks)
+ * -(parsers.blanklines * parsers.indent)
+ end
+
+ larsers.LooseListItem = function(starter)
+ return -larsers.HorizontalRule
+ * Cs( starter / "" * larsers.ListBlock * Cc("\n")
+ * (larsers.NestedList + larsers.ListContinuationBlock^0)
+ * (parsers.blanklines / "\n\n")
+ ) / parse_blocks
+ end
+
+ larsers.BulletList = ( Ct(larsers.TightListItem(parsers.bullet)^1) * Cc(true)
+ * parsers.skipblanklines * -parsers.bullet
+ + Ct(larsers.LooseListItem(parsers.bullet)^1) * Cc(false)
+ * parsers.skipblanklines )
+ / writer.bulletlist
+
+ local function ordered_list(items,tight,startNumber)
+ if options.startNumber then
+ startNumber = tonumber(startNumber) or 1 -- fallback for '#'
+ if startNumber ~= nil then
+ startNumber = math.floor(startNumber)
+ end
+ else
+ startNumber = nil
+ end
+ return writer.orderedlist(items,tight,startNumber)
+ end
+
+ larsers.OrderedList = Cg(larsers.enumerator, "listtype") *
+ ( Ct(larsers.TightListItem(Cb("listtype"))
+ * larsers.TightListItem(larsers.enumerator)^0)
+ * Cc(true) * parsers.skipblanklines * -larsers.enumerator
+ + Ct(larsers.LooseListItem(Cb("listtype"))
+ * larsers.LooseListItem(larsers.enumerator)^0)
+ * Cc(false) * parsers.skipblanklines
+ ) * Cb("listtype") / ordered_list
+
+ local function definition_list_item(term, defs, tight)
+ return { term = parse_inlines(term), definitions = defs }
+ end
+
+ larsers.DefinitionListItemLoose = C(parsers.line) * parsers.skipblanklines
+ * Ct((parsers.defstart
+ * parsers.indented_blocks(parsers.dlchunk)
+ / parse_blocks_toplevel)^1)
+ * Cc(false) / definition_list_item
+
+ larsers.DefinitionListItemTight = C(parsers.line)
+ * Ct((parsers.defstart * parsers.dlchunk
+ / parse_blocks)^1)
+ * Cc(true) / definition_list_item
+
+ larsers.DefinitionList = ( Ct(larsers.DefinitionListItemLoose^1) * Cc(false)
+ + Ct(larsers.DefinitionListItemTight^1)
+ * (parsers.skipblanklines
+ * -larsers.DefinitionListItemLoose * Cc(true))
+ ) / writer.definitionlist
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Blank (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ larsers.Blank = parsers.blankline / ""
+ + larsers.NoteBlock
+ + larsers.Reference
+ + (parsers.tightblocksep / "\n")
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Headings (local)
+%
+% \end{markdown}
+% \begin{macrocode}
+ -- parse atx header
+ if options.headerAttributes then
+ larsers.AtxHeading = Cg(parsers.HeadingStart,"level")
+ * parsers.optionalspace
+ * (C(((parsers.linechar
+ - ((parsers.hash^1
+ * parsers.optionalspace
+ * parsers.HeadingAttributes^-1
+ + parsers.HeadingAttributes)
+ * parsers.optionalspace
+ * parsers.newline))
+ * (parsers.linechar
+ - parsers.hash
+ - parsers.lbrace)^0)^1)
+ / parse_inlines)
+ * Cg(Ct(parsers.newline
+ + (parsers.hash^1
+ * parsers.optionalspace
+ * parsers.HeadingAttributes^-1
+ + parsers.HeadingAttributes)
+ * parsers.optionalspace
+ * parsers.newline), "attributes")
+ * Cb("level")
+ * Cb("attributes")
+ / writer.heading
+
+ larsers.SetextHeading = #(parsers.line * S("=-"))
+ * (C(((parsers.linechar
+ - (parsers.HeadingAttributes
+ * parsers.optionalspace
+ * parsers.newline))
+ * (parsers.linechar
+ - parsers.lbrace)^0)^1)
+ / parse_inlines)
+ * Cg(Ct(parsers.newline
+ + (parsers.HeadingAttributes
+ * parsers.optionalspace
+ * parsers.newline)), "attributes")
+ * parsers.HeadingLevel
+ * Cb("attributes")
+ * parsers.optionalspace
+ * parsers.newline
+ / writer.heading
+ else
+ larsers.AtxHeading = Cg(parsers.HeadingStart,"level")
+ * parsers.optionalspace
+ * (C(parsers.line) / strip_atx_end / parse_inlines)
+ * Cb("level")
+ / writer.heading
+
+ larsers.SetextHeading = #(parsers.line * S("=-"))
+ * Ct(parsers.linechar^1 / parse_inlines)
+ * parsers.newline
+ * parsers.HeadingLevel
+ * parsers.optionalspace
+ * parsers.newline
+ / writer.heading
+ end
+
+ larsers.Heading = larsers.AtxHeading + larsers.SetextHeading
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Syntax Specification
+%
+% \end{markdown}
+% \begin{macrocode}
+ local syntax =
+ { "Blocks",
+
+ Blocks = larsers.Blank^0 * parsers.Block^-1
+ * (larsers.Blank^0 / writer.interblocksep
+ * parsers.Block)^0
+ * larsers.Blank^0 * parsers.eof,
+
+ Blank = larsers.Blank,
+
+ Block = V("ContentBlock")
+ + V("Blockquote")
+ + V("PipeTable")
+ + V("Verbatim")
+ + V("FencedCode")
+ + V("HorizontalRule")
+ + V("BulletList")
+ + V("OrderedList")
+ + V("Heading")
+ + V("DefinitionList")
+ + V("DisplayHtml")
+ + V("Paragraph")
+ + V("Plain"),
+
+ ContentBlock = larsers.ContentBlock,
+ Blockquote = larsers.Blockquote,
+ Verbatim = larsers.Verbatim,
+ FencedCode = larsers.FencedCode,
+ HorizontalRule = larsers.HorizontalRule,
+ BulletList = larsers.BulletList,
+ OrderedList = larsers.OrderedList,
+ Heading = larsers.Heading,
+ DefinitionList = larsers.DefinitionList,
+ DisplayHtml = larsers.DisplayHtml,
+ Paragraph = larsers.Paragraph,
+ PipeTable = larsers.PipeTable,
+ Plain = larsers.Plain,
+
+ Inline = V("Str")
+ + V("Space")
+ + V("Endline")
+ + V("UlOrStarLine")
+ + V("Strong")
+ + V("Emph")
+ + V("InlineNote")
+ + V("NoteRef")
+ + V("Citations")
+ + V("Link")
+ + V("Image")
+ + V("Code")
+ + V("AutoLinkUrl")
+ + V("AutoLinkEmail")
+ + V("InlineHtml")
+ + V("HtmlEntity")
+ + V("EscapedChar")
+ + V("Smart")
+ + V("Symbol"),
+
+ IndentedInline = V("Str")
+ + V("OptionalIndent")
+ + V("Endline")
+ + V("UlOrStarLine")
+ + V("Strong")
+ + V("Emph")
+ + V("InlineNote")
+ + V("NoteRef")
+ + V("Citations")
+ + V("Link")
+ + V("Image")
+ + V("Code")
+ + V("AutoLinkUrl")
+ + V("AutoLinkEmail")
+ + V("InlineHtml")
+ + V("HtmlEntity")
+ + V("EscapedChar")
+ + V("Smart")
+ + V("Symbol"),
+
+ Str = larsers.Str,
+ Space = larsers.Space,
+ OptionalIndent = larsers.OptionalIndent,
+ Endline = larsers.Endline,
+ UlOrStarLine = larsers.UlOrStarLine,
+ Strong = larsers.Strong,
+ Emph = larsers.Emph,
+ InlineNote = larsers.InlineNote,
+ NoteRef = larsers.NoteRef,
+ Citations = larsers.Citations,
+ Link = larsers.Link,
+ Image = larsers.Image,
+ Code = larsers.Code,
+ AutoLinkUrl = larsers.AutoLinkUrl,
+ AutoLinkEmail = larsers.AutoLinkEmail,
+ InlineHtml = larsers.InlineHtml,
+ HtmlEntity = larsers.HtmlEntity,
+ EscapedChar = larsers.EscapedChar,
+ Smart = larsers.Smart,
+ Symbol = larsers.Symbol,
+ }
+
+ if not options.citations then
+ syntax.Citations = parsers.fail
+ end
+
+ if not options.contentBlocks then
+ syntax.ContentBlock = parsers.fail
+ end
+
+ if not options.codeSpans then
+ syntax.Code = parsers.fail
+ end
+
+ if not options.definitionLists then
+ syntax.DefinitionList = parsers.fail
+ end
+
+ if not options.fencedCode then
+ syntax.FencedCode = parsers.fail
+ end
+
+ if not options.footnotes then
+ syntax.NoteRef = parsers.fail
+ end
+
+ if not options.html then
+ syntax.DisplayHtml = parsers.fail
+ syntax.InlineHtml = parsers.fail
+ syntax.HtmlEntity = parsers.fail
+ end
+
+ if not options.inlineFootnotes then
+ syntax.InlineNote = parsers.fail
+ end
+
+ if not options.smartEllipses then
+ syntax.Smart = parsers.fail
+ end
+
+ if not options.pipeTables then
+ syntax.PipeTable = parsers.fail
+ end
+
+ local blocks_toplevel_t = util.table_copy(syntax)
+ blocks_toplevel_t.Paragraph = larsers.ToplevelParagraph
+ larsers.blocks_toplevel = Ct(blocks_toplevel_t)
+
+ larsers.blocks = Ct(syntax)
+
+ local inlines_t = util.table_copy(syntax)
+ inlines_t[1] = "Inlines"
+ inlines_t.Inlines = parsers.Inline^0 * (parsers.spacing^0 * parsers.eof / "")
+ larsers.inlines = Ct(inlines_t)
+
+ local inlines_no_link_t = util.table_copy(inlines_t)
+ inlines_no_link_t.Link = parsers.fail
+ larsers.inlines_no_link = Ct(inlines_no_link_t)
+
+ local inlines_no_inline_note_t = util.table_copy(inlines_t)
+ inlines_no_inline_note_t.InlineNote = parsers.fail
+ larsers.inlines_no_inline_note = Ct(inlines_no_inline_note_t)
+
+ local inlines_nbsp_t = util.table_copy(inlines_t)
+ inlines_nbsp_t.Endline = larsers.NonbreakingEndline
+ inlines_nbsp_t.Space = larsers.NonbreakingSpace
+ larsers.inlines_nbsp = Ct(inlines_nbsp_t)
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%#### Exported Conversion Function
+% Define \luamdef{reader->convert} as a function that converts markdown string
+% `input` into a plain \TeX{} output and returns it. Note that the converter
+% assumes that the input has \acro{unix} line endings.
+%
+% \end{markdown}
+% \begin{macrocode}
+ function self.convert(input)
+ references = {}
+% \end{macrocode}
+% \begin{markdown}
+% When determining the name of the cache file, create salt for the hashing
+% function out of the package version and the passed options recognized by the
+% Lua interface (see Section \ref{sec:luaoptions}). The \Opt{cacheDir} option
+% is disregarded.
+% \end{markdown}
+% \begin{macrocode}
+ local opt_string = {}
+ for k,_ in pairs(defaultOptions) do
+ local v = options[k]
+ if k ~= "cacheDir" then
+ opt_string[#opt_string+1] = k .. "=" .. tostring(v)
+ end
+ end
+ table.sort(opt_string)
+ local salt = table.concat(opt_string, ",") .. "," .. metadata.version
+% \end{macrocode}
+% \begin{markdown}
+% Produce the cache file, transform its filename via the \luam{writer->pack}
+% method, and return the result.
+% \end{markdown}
+% \begin{macrocode}
+ local name = util.cache(options.cacheDir, input, salt, function(input)
+ return util.rope_to_string(parse_blocks_toplevel(input)) .. writer.eof
+ end, ".md" .. writer.suffix)
+ return writer.pack(name)
+ end
+ return self
+end
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Conversion from Markdown to Plain \TeX{}
+% The \luam{new} method returns the \luam{reader->convert} function of a reader
+% object associated with the Lua interface options (see Section
+% \ref{sec:luaoptions}) `options` and with a writer object associated with
+% `options`.
+%
+% \end{markdown}
+% \begin{macrocode}
+function M.new(options)
+ local writer = M.writer.new(options)
+ local reader = M.reader.new(writer, options)
+ return reader.convert
+end
+
+return M
+% \end{macrocode}
+% \iffalse
+%</lua>
+%<*lua-cli>
+% \fi
+% \par
+% \begin{markdown}
+%
+%### Command-Line Implementation
+% \label{sec:lua-cli-implementation}
+% The command-line implementation provides the actual conversion routine for
+% the command-line interface described in Section~\ref{sec:lua-cli-interface}.
+%
+% \end{markdown}
+% \begin{macrocode}
+
+local input
+if input_filename then
+ local input_file = io.open(input_filename, "r")
+ input = assert(input_file:read("*a"))
+ input_file:close()
+else
+ input = assert(io.read("*a"))
+end
+
+% \end{macrocode}
+% \begin{markdown}
+% First, ensure that the `options.cacheDir` directory exists.
+% \end{markdown}
+% \begin{macrocode}
+local lfs = require("lfs")
+if options.cacheDir and not lfs.isdir(options.cacheDir) then
+ assert(lfs.mkdir(options["cacheDir"]))
+end
+
+local kpse = require("kpse")
+kpse.set_program_name("luatex")
+local md = require("markdown")
+% \end{macrocode}
+% \begin{markdown}
+% Since we are loading the rest of the Lua implementation dynamically,
+% check that both the `markdown` module and the command line implementation
+% are the same version.
+% \end{markdown}
+% \begin{macrocode}
+if metadata.version ~= md.metadata.version then
+ warn("markdown-cli.lua " .. metadata.version .. " used with " ..
+ "markdown.lua " .. md.metadata.version .. ".")
+end
+local convert = md.new(options)
+local output = convert(input:gsub("\r\n?", "\n"))
+
+if output_filename then
+ local output_file = io.open(output_filename, "w")
+ assert(output_file:write(output))
+ assert(output_file:close())
+else
+ assert(io.write(output))
+end
+% \end{macrocode}
+% \iffalse
+%</lua-cli>
+%<*tex>
+% \fi
+% \par
+% \begin{markdown}
+%
+% Plain \TeX{} Implementation
+%----------------------------
+% \label{sec:teximplementation}
+% The plain \TeX{} implementation provides macros for the interfacing between
+% \TeX{} and Lua and for the buffering of input text. These macros are then
+% used to implement the macros for the conversion from markdown to plain \TeX{}
+% exposed by the plain \TeX{} interface (see Section \ref{sec:texinterface}).
+%
+%### Logging Facilities
+% \label{sec:texinterfacelogging}
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownInfo#1{%
+ \immediate\write-1{(l.\the\inputlineno) markdown.tex info: #1.}}%
+\def\markdownWarning#1{%
+ \immediate\write16{(l.\the\inputlineno) markdown.tex warning: #1}}%
+\def\markdownError#1#2{%
+ \errhelp{#2.}%
+ \errmessage{(l.\the\inputlineno) markdown.tex error: #1}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Token Renderer Prototypes
+% The following definitions should be considered placeholder.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownRendererInterblockSeparatorPrototype{\par}%
+\def\markdownRendererLineBreakPrototype{\hfil\break}%
+\let\markdownRendererEllipsisPrototype\dots
+\def\markdownRendererNbspPrototype{~}%
+\def\markdownRendererLeftBracePrototype{\char`\{}%
+\def\markdownRendererRightBracePrototype{\char`\}}%
+\def\markdownRendererDollarSignPrototype{\char`$}%
+\def\markdownRendererPercentSignPrototype{\char`\%}%
+\def\markdownRendererAmpersandPrototype{\char`&}%
+\def\markdownRendererUnderscorePrototype{\char`_}%
+\def\markdownRendererHashPrototype{\char`\#}%
+\def\markdownRendererCircumflexPrototype{\char`^}%
+\def\markdownRendererBackslashPrototype{\char`\\}%
+\def\markdownRendererTildePrototype{\char`~}%
+\def\markdownRendererPipePrototype{|}%
+\def\markdownRendererCodeSpanPrototype#1{{\tt#1}}%
+\def\markdownRendererLinkPrototype#1#2#3#4{#2}%
+\def\markdownRendererContentBlockPrototype#1#2#3#4{%
+ \markdownInput{#3}}%
+\def\markdownRendererContentBlockOnlineImagePrototype{%
+ \markdownRendererImage}%
+\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{%
+ \markdownRendererInputFencedCode{#3}{#2}}%
+\def\markdownRendererImagePrototype#1#2#3#4{#2}%
+\def\markdownRendererUlBeginPrototype{}%
+\def\markdownRendererUlBeginTightPrototype{}%
+\def\markdownRendererUlItemPrototype{}%
+\def\markdownRendererUlItemEndPrototype{}%
+\def\markdownRendererUlEndPrototype{}%
+\def\markdownRendererUlEndTightPrototype{}%
+\def\markdownRendererOlBeginPrototype{}%
+\def\markdownRendererOlBeginTightPrototype{}%
+\def\markdownRendererOlItemPrototype{}%
+\def\markdownRendererOlItemWithNumberPrototype#1{}%
+\def\markdownRendererOlItemEndPrototype{}%
+\def\markdownRendererOlEndPrototype{}%
+\def\markdownRendererOlEndTightPrototype{}%
+\def\markdownRendererDlBeginPrototype{}%
+\def\markdownRendererDlBeginTightPrototype{}%
+\def\markdownRendererDlItemPrototype#1{#1}%
+\def\markdownRendererDlItemEndPrototype{}%
+\def\markdownRendererDlDefinitionBeginPrototype{}%
+\def\markdownRendererDlDefinitionEndPrototype{\par}%
+\def\markdownRendererDlEndPrototype{}%
+\def\markdownRendererDlEndTightPrototype{}%
+\def\markdownRendererEmphasisPrototype#1{{\it#1}}%
+\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}%
+\def\markdownRendererBlockQuoteBeginPrototype{\par\begingroup\it}%
+\def\markdownRendererBlockQuoteEndPrototype{\endgroup\par}%
+\def\markdownRendererInputVerbatimPrototype#1{%
+ \par{\tt\input#1\relax{}}\par}%
+\def\markdownRendererInputFencedCodePrototype#1#2{%
+ \markdownRendererInputVerbatimPrototype{#1}}%
+\def\markdownRendererHeadingOnePrototype#1{#1}%
+\def\markdownRendererHeadingTwoPrototype#1{#1}%
+\def\markdownRendererHeadingThreePrototype#1{#1}%
+\def\markdownRendererHeadingFourPrototype#1{#1}%
+\def\markdownRendererHeadingFivePrototype#1{#1}%
+\def\markdownRendererHeadingSixPrototype#1{#1}%
+\def\markdownRendererHorizontalRulePrototype{}%
+\def\markdownRendererFootnotePrototype#1{#1}%
+\def\markdownRendererCitePrototype#1{}%
+\def\markdownRendererTextCitePrototype#1{}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Lua Snippets
+% The \mdef{markdownLuaOptions} macro expands to a Lua table that
+% contains the plain \TeX{} options (see Section \ref{sec:texoptions}) in a
+% format recognized by Lua (see Section \ref{sec:luaoptions}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownLuaOptions{{%
+\ifx\markdownOptionBlankBeforeBlockquote\undefined\else
+ blankBeforeBlockquote = \markdownOptionBlankBeforeBlockquote,
+\fi
+\ifx\markdownOptionBlankBeforeCodeFence\undefined\else
+ blankBeforeCodeFence = \markdownOptionBlankBeforeCodeFence,
+\fi
+\ifx\markdownOptionBlankBeforeHeading\undefined\else
+ blankBeforeHeading = \markdownOptionBlankBeforeHeading,
+\fi
+\ifx\markdownOptionBreakableBlockquotes\undefined\else
+ breakableBlockquotes = \markdownOptionBreakableBlockquotes,
+\fi
+ cacheDir = "\markdownOptionCacheDir",
+\ifx\markdownOptionCitations\undefined\else
+ citations = \markdownOptionCitations,
+\fi
+\ifx\markdownOptionCitationNbsps\undefined\else
+ citationNbsps = \markdownOptionCitationNbsps,
+\fi
+\ifx\markdownOptionCodeSpans\undefined\else
+ codeSpans = \markdownOptionCodeSpans,
+\fi
+\ifx\markdownOptionContentBlocks\undefined\else
+ contentBlocks = \markdownOptionContentBlocks,
+\fi
+\ifx\markdownOptionContentBlocksLanguageMap\undefined\else
+ contentBlocksLanguageMap =
+ "\markdownOptionContentBlocksLanguageMap",
+\fi
+\ifx\markdownOptionDefinitionLists\undefined\else
+ definitionLists = \markdownOptionDefinitionLists,
+\fi
+\ifx\markdownOptionFootnotes\undefined\else
+ footnotes = \markdownOptionFootnotes,
+\fi
+\ifx\markdownOptionFencedCode\undefined\else
+ fencedCode = \markdownOptionFencedCode,
+\fi
+\ifx\markdownOptionHashEnumerators\undefined\else
+ hashEnumerators = \markdownOptionHashEnumerators,
+\fi
+\ifx\markdownOptionHeaderAttributes\undefined\else
+ headerAttributes = \markdownOptionHeaderAttributes,
+\fi
+\ifx\markdownOptionHtml\undefined\else
+ html = \markdownOptionHtml,
+\fi
+\ifx\markdownOptionHybrid\undefined\else
+ hybrid = \markdownOptionHybrid,
+\fi
+\ifx\markdownOptionInlineFootnotes\undefined\else
+ inlineFootnotes = \markdownOptionInlineFootnotes,
+\fi
+\ifx\markdownOptionPipeTables\undefined\else
+ pipeTables = \markdownOptionPipeTables,
+\fi
+\ifx\markdownOptionPreserveTabs\undefined\else
+ preserveTabs = \markdownOptionPreserveTabs,
+\fi
+\ifx\markdownOptionShiftHeadings\undefined\else
+ shiftHeadings = "\markdownOptionShiftHeadings",
+\fi
+\ifx\markdownOptionSlice\undefined\else
+ slice = "\markdownOptionSlice",
+\fi
+\ifx\markdownOptionSmartEllipses\undefined\else
+ smartEllipses = \markdownOptionSmartEllipses,
+\fi
+\ifx\markdownOptionStartNumber\undefined\else
+ startNumber = \markdownOptionStartNumber,
+\fi
+\ifx\markdownOptionTableCaptions\undefined\else
+ tableCaptions = \markdownOptionTableCaptions,
+\fi
+\ifx\markdownOptionTightLists\undefined\else
+ tightLists = \markdownOptionTightLists,
+\fi
+\ifx\markdownOptionUnderscores\undefined\else
+ underscores = \markdownOptionUnderscores,
+\fi}
+}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownPrepare} macro contains the Lua code that is executed prior
+% to any conversion from markdown to plain \TeX{}. It exposes the
+% \luam{convert} function for the use by any further Lua code.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownPrepare{%
+% \end{macrocode}
+% \begin{markdown}
+% First, ensure that the \m{markdownOptionCacheDir} directory exists.
+% \end{markdown}
+% \begin{macrocode}
+local lfs = require("lfs")
+local cacheDir = "\markdownOptionCacheDir"
+if not lfs.isdir(cacheDir) then
+ assert(lfs.mkdir(cacheDir))
+end
+% \end{macrocode}
+% \begin{markdown}
+% Next, load the `markdown` module and create a converter function using
+% the plain \TeX{} options, which were serialized to a Lua table via the
+% \m{markdownLuaOptions} macro.
+% \end{markdown}
+% \begin{macrocode}
+local md = require("markdown")
+local convert = md.new(\markdownLuaOptions)
+}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Buffering Markdown Input
+% \label{sec:buffering}
+% The macros \mdef{markdownInputFileStream} and \mdef{markdownOutputFileStream}
+% contain the number of the input and output file streams that will be used for
+% the IO operations of the package.
+%
+% \end{markdown}
+% \begin{macrocode}
+\csname newread\endcsname\markdownInputFileStream
+\csname newwrite\endcsname\markdownOutputFileStream
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownReadAndConvertTab} macro contains the tab character literal.
+%
+% \end{markdown}
+% \begin{macrocode}
+\begingroup
+ \catcode`\^^I=12%
+ \gdef\markdownReadAndConvertTab{^^I}%
+\endgroup
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \m{markdownReadAndConvert} macro is largely a rewrite of the
+% \Hologo{LaTeX2e} \m{filecontents} macro to plain \TeX{}.
+%
+% \end{markdown}
+% \begin{macrocode}
+\begingroup
+% \end{macrocode}
+% \begin{markdown}
+% Make the newline and tab characters active and swap the character codes of
+% the backslash symbol (`\`) and the pipe symbol (`|`), so that we can use the
+% backslash as an ordinary character inside the macro definition. Likewise,
+% swap the character codes of the percent sign (`%`) and the ampersand (`@`),
+% so that we can remove percent signs from the beginning of lines when
+% \m{markdownOptionStripPercentSigns} is `true`.
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`\^^M=13%
+ \catcode`\^^I=13%
+ \catcode`|=0%
+ \catcode`\\=12%
+ |catcode`@=14%
+ |catcode`|%=12@
+ |gdef|markdownReadAndConvert#1#2{@
+ |begingroup@
+% \end{macrocode}
+% \begin{markdown}
+% Open the \m{markdownOptionInputTempFileName} file for writing.
+% \end{markdown}
+% \begin{macrocode}
+ |immediate|openout|markdownOutputFileStream@
+ |markdownOptionInputTempFileName|relax@
+ |markdownInfo{Buffering markdown input into the temporary @
+ input file "|markdownOptionInputTempFileName" and scanning @
+ for the closing token sequence "#1"}@
+% \end{macrocode}
+% \begin{markdown}
+% Locally change the category of the special plain \TeX{} characters to
+% *other* in order to prevent unwanted interpretation of the input. Change
+% also the category of the space character, so that we can retrieve it
+% unaltered.
+% \end{markdown}
+% \begin{macrocode}
+ |def|do##1{|catcode`##1=12}|dospecials@
+ |catcode`| =12@
+ |markdownMakeOther@
+% \end{macrocode}
+% \begin{markdown}
+% The \mdef{markdownReadAndConvertStripPercentSigns} macro will process the
+% individual lines of output, stipping away leading percent signs (`%`) when
+% \m{markdownOptionStripPercentSigns} is `true`.
+% Notice the use of the comments (`@`) to ensure that the entire macro is at
+% a single line and therefore no (active) newline symbols
+% (`^^M`) are produced.
+% \end{markdown}
+% \begin{macrocode}
+ |def|markdownReadAndConvertStripPercentSign##1{@
+ |markdownIfOption{StripPercentSigns}@
+ |if##1%@
+ |expandafter|expandafter|expandafter@
+ |markdownReadAndConvertProcessLine@
+ |else@
+ |expandafter|expandafter|expandafter@
+ |markdownReadAndConvertProcessLine@
+ |expandafter|expandafter|expandafter##1@
+ |fi@
+ |else@
+ |expandafter@
+ |markdownReadAndConvertProcessLine@
+ |expandafter##1@
+ |fi}@
+% \end{macrocode}
+% \begin{markdown}
+% The \mdef{markdownReadAndConvertProcessLine} macro will process the individual
+% lines of output.
+% Notice the use of the comments (`@`) to ensure that the entire macro is at
+% a single line and therefore no (active) newline symbols
+% (`^^M`) are produced.
+% \end{markdown}
+% \begin{macrocode}
+ |def|markdownReadAndConvertProcessLine##1#1##2#1##3|relax{@
+% \end{macrocode}
+% \begin{markdown}
+% When the ending token sequence does not appear in the line, store the line in
+% the \m{markdownOptionInputTempFileName} file.
+% \end{markdown}
+% \begin{macrocode}
+ |ifx|relax##3|relax@
+ |immediate|write|markdownOutputFileStream{##1}@
+ |else@
+% \end{macrocode}
+% \begin{markdown}
+% When the ending token sequence appears in the line, make the next newline
+% character close the \m{markdownOptionInputTempFileName} file, return the
+% character categories back to the former state, convert the
+% \m{markdownOptionInputTempFileName} file from markdown to plain \TeX{},
+% \m{input} the result of the conversion, and expand the ending control
+% sequence.
+% \end{markdown}
+% \begin{macrocode}
+ |def^^M{@
+ |markdownInfo{The ending token sequence was found}@
+ |immediate|closeout|markdownOutputFileStream@
+ |endgroup@
+ |markdownInput|markdownOptionInputTempFileName@
+ #2}@
+ |fi@
+% \end{macrocode}
+% \begin{markdown}
+% Repeat with the next line.
+% \end{markdown}
+% \begin{macrocode}
+ ^^M}@
+% \end{macrocode}
+% \begin{markdown}
+% Make the tab character active at expansion time and make it expand to a
+% literal tab character.
+% \end{markdown}
+% \begin{macrocode}
+ |catcode`|^^I=13@
+ |def^^I{|markdownReadAndConvertTab}@
+% \end{macrocode}
+% \begin{markdown}
+% Make the newline character active at expansion time and make it consume the
+% rest of the line on expansion. Throw away the rest of the first line and
+% pass the second line to the \m{markdownReadAndConvertProcessLine} macro.
+% \end{markdown}
+% \begin{macrocode}
+ |catcode`|^^M=13@
+ |def^^M##1^^M{@
+ |def^^M####1^^M{@
+ |markdownReadAndConvertStripPercentSign####1#1#1|relax}@
+ ^^M}@
+ ^^M}@
+% \end{macrocode}
+% \begin{markdown}
+% Reset the character categories back to the former state.
+% \end{markdown}
+% \begin{macrocode}
+|endgroup
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Lua Shell Escape Bridge
+% \label{sec:luabridge}
+% The following \TeX{} code is intended for \TeX{} engines that do not provide
+% direct access to Lua, but expose the shell of the operating system. This
+% corresponds to the \m{markdownMode} values of `0` and `1`.
+%
+% The \m{markdownLuaExecute} macro defined here and in Section
+% \ref{sec:directlua} are meant to be indistinguishable to the remaining code.
+%
+% The package assumes that although the user is not using the Lua\TeX{} engine,
+% their \TeX{} distribution contains it, and uses shell access to produce and
+% execute Lua scripts using the \TeX{}Lua interpreter~[@luatex17, Section
+% 3.1.1].
+%
+% \end{markdown}
+% \begin{macrocode}
+\ifnum\markdownMode<2\relax
+\ifnum\markdownMode=0\relax
+ \markdownInfo{Using mode 0: Shell escape via write18}%
+\else
+ \markdownInfo{Using mode 1: Shell escape via os.execute}%
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownExecuteShellEscape} macro contains the numeric value indicating
+% whether the shell access is enabled (`1`), disabled (`0`), or restricted
+% (`2`).
+%
+% Inherit the value of the the \m{pdfshellescape} (Lua\TeX{}, \Hologo{pdfTeX})
+% or the \m{shellescape} (\Hologo{XeTeX}) commands. If neither of these
+% commands is defined and Lua is available, attempt to access the
+% \luam{status.shell_escape} configuration item.
+%
+% If you cannot detect, whether the shell access is enabled, act as if it were.
+%
+% \end{markdown}
+% \begin{macrocode}
+\ifx\pdfshellescape\undefined
+ \ifx\shellescape\undefined
+ \ifnum\markdownMode=0\relax
+ \def\markdownExecuteShellEscape{1}%
+ \else
+ \def\markdownExecuteShellEscape{%
+ \directlua{tex.sprint(status.shell_escape or "1")}}%
+ \fi
+ \else
+ \let\markdownExecuteShellEscape\shellescape
+ \fi
+\else
+ \let\markdownExecuteShellEscape\pdfshellescape
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownExecuteDirect} macro executes the code it has received as
+% its first argument by writing it to the output file stream 18, if Lua is
+% unavailable, or by using the Lua \luam{os.execute} method otherwise.
+%
+% \end{markdown}
+% \begin{macrocode}
+\ifnum\markdownMode=0\relax
+ \def\markdownExecuteDirect#1{\immediate\write18{#1}}%
+\else
+ \def\markdownExecuteDirect#1{%
+ \directlua{os.execute("\luaescapestring{#1}")}}%
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownExecute} macro is a wrapper on top of
+% \m{markdownExecuteDirect} that checks the value of
+% \m{markdownExecuteShellEscape} and prints an error message if the shell is
+% inaccessible.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownExecute#1{%
+ \ifnum\markdownExecuteShellEscape=1\relax
+ \markdownExecuteDirect{#1}%
+ \else
+ \markdownError{I can not access the shell}{Either run the TeX
+ compiler with the --shell-escape or the --enable-write18 flag,
+ or set shell_escape=t in the texmf.cnf file}%
+ \fi}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \mdef{markdownLuaExecute} macro executes the Lua code it has received as
+% its first argument. The Lua code may not directly interact with the \TeX{}
+% engine, but it can use the \luam{print} function in the same manner it
+% would use the \luam{tex.print} method.
+%
+% \end{markdown}
+% \begin{macrocode}
+\begingroup
+% \end{macrocode}
+% \begin{markdown}
+% Swap the category code of the backslash symbol and the pipe symbol, so that
+% we may use the backslash symbol freely inside the Lua code.
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`|=0%
+ \catcode`\\=12%
+ |gdef|markdownLuaExecute#1{%
+% \end{macrocode}
+% \begin{markdown}
+% Create the file \m{markdownOptionHelperScriptFileName} and fill it with the
+% input Lua code prepended with \pkg{kpathsea} initialization, so that Lua
+% modules from the \TeX{} distribution are available.
+% \end{markdown}
+% \begin{macrocode}
+ |immediate|openout|markdownOutputFileStream=%
+ |markdownOptionHelperScriptFileName
+ |markdownInfo{Writing a helper Lua script to the file
+ "|markdownOptionHelperScriptFileName"}%
+ |immediate|write|markdownOutputFileStream{%
+ local ran_ok, error = pcall(function()
+ local kpse = require("kpse")
+ kpse.set_program_name("luatex")
+ #1
+ end)
+% \end{macrocode}
+% \begin{markdown}
+% If there was an error, use the file \m{markdownOptionErrorTempFileName} to
+% store the error message.
+% \end{markdown}
+% \begin{macrocode}
+ if not ran_ok then
+ local file = io.open("%
+ |markdownOptionOutputDir
+ /|markdownOptionErrorTempFileName", "w")
+ if file then
+ file:write(error .. "\n")
+ file:close()
+ end
+ print('\\markdownError{An error was encountered while executing
+ Lua code}{For further clues, examine the file
+ "|markdownOptionOutputDir
+ /|markdownOptionErrorTempFileName"}')
+ end}%
+ |immediate|closeout|markdownOutputFileStream
+% \end{macrocode}
+% \begin{markdown}
+% Execute the generated \m{markdownOptionHelperScriptFileName} Lua script using
+% the \TeX{}Lua binary and store the output in the
+% \m{markdownOptionOutputTempFileName} file.
+% \end{markdown}
+% \begin{macrocode}
+ |markdownInfo{Executing a helper Lua script from the file
+ "|markdownOptionHelperScriptFileName" and storing the result in the
+ file "|markdownOptionOutputTempFileName"}%
+ |markdownExecute{texlua "|markdownOptionOutputDir
+ /|markdownOptionHelperScriptFileName" > %
+ "|markdownOptionOutputDir
+ /|markdownOptionOutputTempFileName"}%
+% \end{macrocode}
+% \begin{markdown}
+% \m{input} the generated \m{markdownOptionOutputTempFileName} file.
+% \end{markdown}
+% \begin{macrocode}
+ |input|markdownOptionOutputTempFileName|relax}%
+|endgroup
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Direct Lua Access
+% \label{sec:directlua}
+% The following \TeX{} code is intended for \TeX{} engines that provide
+% direct access to Lua (Lua\TeX{}). The macro \m{markdownLuaExecute} defined
+% here and in Section \ref{sec:luabridge} are meant to be indistinguishable to
+% the remaining code. This corresponds to the \m{markdownMode} value of `2`.
+%
+% \end{markdown}
+% \begin{macrocode}
+\else
+\markdownInfo{Using mode 2: Direct Lua access}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The direct Lua access version of the \m{markdownLuaExecute} macro is defined
+% in terms of the \m{directlua} primitive. The \luam{print} function is set as
+% an alias to the \m{tex.print} method in order to mimic the behaviour of the
+% \m{markdownLuaExecute} definition from Section \ref{sec:luabridge},
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownLuaExecute#1{\directlua{local print = tex.print #1}}%
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Typesetting Markdown
+% The \m{markdownInput} macro uses an implementation of the
+% \m{markdownLuaExecute} macro to convert the contents of the file whose
+% filename it has received as its single argument from markdown to plain
+% \TeX{}.
+%
+% \end{markdown}
+% \begin{macrocode}
+\begingroup
+% \end{macrocode}
+% \begin{markdown}
+% Swap the category code of the backslash symbol and the pipe symbol, so that
+% we may use the backslash symbol freely inside the Lua code.
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`|=0%
+ \catcode`\\=12%
+ |gdef|markdownInput#1{%
+ |markdownInfo{Including markdown document "#1"}%
+% \end{macrocode}
+% \begin{markdown}
+% Attempt to open the markdown document to record it in the `.log` and
+% `.fls` files. This allows external programs such as \LaTeX Mk to track
+% changes to the markdown document.
+% \end{markdown}
+% \begin{macrocode}
+ |openin|markdownInputFileStream#1
+ |closein|markdownInputFileStream
+ |markdownLuaExecute{%
+ |markdownPrepare
+ local input = assert(io.open("%
+ |markdownOptionOutputDir
+ /#1", "r"):read("*a"))
+% \end{macrocode}
+% \begin{markdown}
+% Since the Lua converter expects \acro{unix} line endings, normalize the
+% input.
+% \end{markdown}
+% \begin{macrocode}
+ print(convert(input:gsub("\r\n?", "\n")))}}%
+|endgroup
+% \end{macrocode}
+% \iffalse
+%</tex>
+%<*latex>
+% \fi
+% \par
+% \begin{markdown}
+%
+% \LaTeX{} Implementation
+%------------------------
+% \label{sec:lateximplementation}
+% The \LaTeX{} implemenation makes use of the fact that, apart from some subtle
+% differences, \LaTeX{} implements the majority of the plain \TeX{}
+% format~[@latex17, Section 9]. As a consequence, we can directly reuse the
+% existing plain \TeX{} implementation.
+%
+% \end{markdown}
+% \begin{macrocode}
+\input markdown
+\def\markdownVersionSpace{ }%
+\ProvidesPackage{markdown}[\markdownLastModified\markdownVersionSpace v%
+ \markdownVersion\markdownVersionSpace markdown renderer]%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Logging Facilities
+% The \LaTeX{} implementation redefines the plain \TeX{} logging macros (see
+% Section \ref{sec:texinterfacelogging}) to use the \LaTeX{} \m{PackageInfo},
+% \m{PackageWarning}, and \m{PackageError} macros.
+%
+% \end{markdown}
+% \begin{macrocode}
+\renewcommand\markdownInfo[1]{\PackageInfo{markdown}{#1}}%
+\renewcommand\markdownWarning[1]{\PackageWarning{markdown}{#1}}%
+\renewcommand\markdownError[2]{\PackageError{markdown}{#1}{#2.}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Typesetting Markdown
+% The \mdef{markdownInputPlainTeX} macro is used to store the original plain
+% \TeX{} implementation of the \m{markdownInput} macro. The \m{markdownInput}
+% is then redefined to accept an optional argument with options recognized by
+% the \LaTeX{} interface (see Section \ref{sec:latexoptions}).
+%
+% \end{markdown}
+% \begin{macrocode}
+\let\markdownInputPlainTeX\markdownInput
+\renewcommand\markdownInput[2][]{%
+ \begingroup
+ \markdownSetup{#1}%
+ \markdownInputPlainTeX{#2}%
+ \endgroup}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The \envm{markdown}, and \envm{markdown*} \LaTeX{} environments are
+% implemented using the \m{markdownReadAndConvert} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\renewenvironment{markdown}{%
+ \markdownReadAndConvert@markdown{}}\relax
+\renewenvironment{markdown*}[1]{%
+ \markdownSetup{#1}%
+ \markdownReadAndConvert@markdown*}\relax
+\begingroup
+% \end{macrocode}
+% \begin{markdown}
+% Locally swap the category code of the backslash symbol with the pipe symbol,
+% and of the left (`{`) and right brace (`}`) with the less-than (`<`)
+% and greater-than (`>`) signs. This is required in order that all the
+% special symbols that appear in the first argument of the
+% `markdownReadAndConvert` macro have the category code *other*.
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`\|=0\catcode`\<=1\catcode`\>=2%
+ \catcode`\\=12|catcode`|{=12|catcode`|}=12%
+ |gdef|markdownReadAndConvert@markdown#1<%
+ |markdownReadAndConvert<\end{markdown#1}>%
+ <|end<markdown#1>>>%
+|endgroup
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Options
+% The supplied package options are processed using the \m{markdownSetup} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\DeclareOption*{%
+ \expandafter\markdownSetup\expandafter{\CurrentOption}}%
+\ProcessOptions\relax
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% After processing the options, activate the `renderers` and
+% `rendererPrototypes` keys.
+%
+% \end{markdown}
+% \begin{macrocode}
+\define@key{markdownOptions}{renderers}{%
+ \setkeys{markdownRenderers}{#1}%
+ \def\KV@prefix{KV@markdownOptions@}}%
+\define@key{markdownOptions}{rendererPrototypes}{%
+ \setkeys{markdownRendererPrototypes}{#1}%
+ \def\KV@prefix{KV@markdownOptions@}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Token Renderer Prototypes
+% The following configuration should be considered placeholder.
+%
+% If the \m{markdownOptionTightLists} macro expands to `false`, do not load
+% the \pkg{paralist} package. This is necessary for \Hologo{LaTeX2e} document
+% classes that do not play nice with \pkg{paralist}, such as \pkg{beamer}.
+% If the \m{markdownOptionTightLists} is undefined and the \pkg{beamer}
+% document class is in use, then do not load the \pkg{paralist} package either.
+%
+% \end{markdown}
+% \begin{macrocode}
+\ifx\markdownOptionTightLists\undefined
+ \@ifclassloaded{beamer}{}{
+ \RequirePackage{paralist}}
+\else
+ \ifthenelse{\equal{\markdownOptionTightLists}{false}}{}{
+ \RequirePackage{paralist}}
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% If we loaded the \pkg{paralist} package, define the respective renderer
+% prototypes to make use of the capabilities of the package. Otherwise,
+% define the renderer prototypes to fall back on the corresponding renderers
+% for the non-tight lists.
+%
+% \end{markdown}
+% \begin{macrocode}
+\@ifpackageloaded{paralist}{
+ \markdownSetup{rendererPrototypes={
+ ulBeginTight = {\begin{compactitem}},
+ ulEndTight = {\end{compactitem}},
+ olBeginTight = {\begin{compactenum}},
+ olEndTight = {\end{compactenum}},
+ dlBeginTight = {\begin{compactdesc}},
+ dlEndTight = {\end{compactdesc}}}}
+}{
+ \markdownSetup{rendererPrototypes={
+ ulBeginTight = {\markdownRendererUlBegin},
+ ulEndTight = {\markdownRendererUlEnd},
+ olBeginTight = {\markdownRendererOlBegin},
+ olEndTight = {\markdownRendererOlEnd},
+ dlBeginTight = {\markdownRendererDlBegin},
+ dlEndTight = {\markdownRendererDlEnd}}}}
+\markdownSetup{rendererPrototypes={
+ lineBreak = {\\},
+ leftBrace = {\textbraceleft},
+ rightBrace = {\textbraceright},
+ dollarSign = {\textdollar},
+ underscore = {\textunderscore},
+ circumflex = {\textasciicircum},
+ backslash = {\textbackslash},
+ tilde = {\textasciitilde},
+ pipe = {\textbar},
+ codeSpan = {\texttt{#1}},
+ contentBlock = {%
+ \ifthenelse{\equal{#1}{csv}}{%
+ \begin{table}%
+ \begin{center}%
+ \csvautotabular{#3}%
+ \end{center}
+ \ifx\empty#4\empty\else
+ \caption{#4}%
+ \fi
+ \label{tab:#1}%
+ \end{table}}{%
+ \markdownInput{#3}}},
+ image = {%
+ \begin{figure}%
+ \begin{center}%
+ \includegraphics{#3}%
+ \end{center}%
+ \ifx\empty#4\empty\else
+ \caption{#4}%
+ \fi
+ \label{fig:#1}%
+ \end{figure}},
+ ulBegin = {\begin{itemize}},
+ ulItem = {\item},
+ ulEnd = {\end{itemize}},
+ olBegin = {\begin{enumerate}},
+ olItem = {\item},
+ olItemWithNumber = {\item[#1.]},
+ olEnd = {\end{enumerate}},
+ dlBegin = {\begin{description}},
+ dlItem = {\item[#1]},
+ dlEnd = {\end{description}},
+ emphasis = {\emph{#1}},
+ blockQuoteBegin = {\begin{quotation}},
+ blockQuoteEnd = {\end{quotation}},
+ inputVerbatim = {\VerbatimInput{#1}},
+ inputFencedCode = {%
+ \ifx\relax#2\relax
+ \VerbatimInput{#1}%
+ \else
+ \ifx\minted@code\undefined
+ \ifx\lst@version\undefined
+ \markdownRendererInputFencedCode{#1}{}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% When the \pkg{listings} package is loaded, use it for syntax highlighting.
+%
+% \end{markdown}
+% \begin{macrocode}
+ \else
+ \lstinputlisting[language=#2]{#1}%
+ \fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% When the \pkg{minted} package is loaded, use it for syntax highlighting.
+% The \pkg{minted} package is preferred over \pkg{listings}.
+%
+% \end{markdown}
+% \begin{macrocode}
+ \else
+ \inputminted{#2}{#1}%
+ \fi
+ \fi},
+ horizontalRule = {\noindent\rule[0.5ex]{\linewidth}{1pt}},
+ footnote = {\footnote{#1}}}}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Support the nesting of strong emphasis.
+%
+% \end{markdown}
+% \begin{macrocode}
+\newif\ifmarkdownLATEXStrongEmphasisNested
+\markdownLATEXStrongEmphasisNestedfalse
+\markdownSetup{rendererPrototypes={
+ strongEmphasis = {%
+ \ifmarkdownLATEXStrongEmphasisNested
+ \markdownLATEXStrongEmphasisNestedfalse
+ \textmd{#1}%
+ \markdownLATEXStrongEmphasisNestedtrue
+ \else
+ \markdownLATEXStrongEmphasisNestedtrue
+ \textbf{#1}%
+ \markdownLATEXStrongEmphasisNestedfalse
+ \fi}}}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Support \LaTeX{} document classes that do not provide chapters.
+%
+% \end{markdown}
+% \begin{macrocode}
+\ifx\chapter\undefined
+ \markdownSetup{rendererPrototypes = {
+ headingOne = {\section{#1}},
+ headingTwo = {\subsection{#1}},
+ headingThree = {\subsubsection{#1}},
+ headingFour = {\paragraph{#1}\leavevmode},
+ headingFive = {\subparagraph{#1}\leavevmode}}}
+\else
+ \markdownSetup{rendererPrototypes = {
+ headingOne = {\chapter{#1}},
+ headingTwo = {\section{#1}},
+ headingThree = {\subsection{#1}},
+ headingFour = {\subsubsection{#1}},
+ headingFive = {\paragraph{#1}\leavevmode},
+ headingSix = {\subparagraph{#1}\leavevmode}}}
+\fi
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% There is a basic implementation for citations that uses the \LaTeX{} \m{cite}
+% macro. There are also implementations that use the \pkg{natbib} \m{citep},
+% and \m{citet} macros, and the Bib\LaTeX{} \m{autocites} and \m{textcites}
+% macros. These implementations will be used, when the respective packages are
+% loaded.
+%
+% \end{markdown}
+% \begin{macrocode}
+\newcount\markdownLaTeXCitationsCounter
+
+% Basic implementation
+\def\markdownLaTeXBasicCitations#1#2#3#4#5#6{%
+ \advance\markdownLaTeXCitationsCounter by 1\relax
+ \ifx\relax#4\relax
+ \ifx\relax#5\relax
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \cite{#1#2#6}% Without prenotes and postnotes, just accumulate cites
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \@gobblethree
+ \fi
+ \else% Before a postnote (#5), dump the accumulator
+ \ifx\relax#1\relax\else
+ \cite{#1}%
+ \fi
+ \cite[#5]{#6}%
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \else
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \markdownLaTeXBasicCitations
+ \fi
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter
+ \@gobblethree
+ \fi
+ \else% Before a prenote (#4), dump the accumulator
+ \ifx\relax#1\relax\else
+ \cite{#1}%
+ \fi
+ \ifnum\markdownLaTeXCitationsCounter>1\relax
+ \space % Insert a space before the prenote in later citations
+ \fi
+ #4~\expandafter\cite\ifx\relax#5\relax{#6}\else[#5]{#6}\fi
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \else
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \markdownLaTeXBasicCitations
+ \fi
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \expandafter
+ \@gobblethree
+ \fi\markdownLaTeXBasicCitations{#1#2#6},}
+\let\markdownLaTeXBasicTextCitations\markdownLaTeXBasicCitations
+
+% Natbib implementation
+\def\markdownLaTeXNatbibCitations#1#2#3#4#5{%
+ \advance\markdownLaTeXCitationsCounter by 1\relax
+ \ifx\relax#3\relax
+ \ifx\relax#4\relax
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \citep{#1,#5}% Without prenotes and postnotes, just accumulate cites
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \@gobbletwo
+ \fi
+ \else% Before a postnote (#4), dump the accumulator
+ \ifx\relax#1\relax\else
+ \citep{#1}%
+ \fi
+ \citep[][#4]{#5}%
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \else
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \markdownLaTeXNatbibCitations
+ \fi
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter
+ \@gobbletwo
+ \fi
+ \else% Before a prenote (#3), dump the accumulator
+ \ifx\relax#1\relax\relax\else
+ \citep{#1}%
+ \fi
+ \citep[#3][#4]{#5}%
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \else
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \markdownLaTeXNatbibCitations
+ \fi
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \expandafter
+ \@gobbletwo
+ \fi\markdownLaTeXNatbibCitations{#1,#5}}
+\def\markdownLaTeXNatbibTextCitations#1#2#3#4#5{%
+ \advance\markdownLaTeXCitationsCounter by 1\relax
+ \ifx\relax#3\relax
+ \ifx\relax#4\relax
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \citet{#1,#5}% Without prenotes and postnotes, just accumulate cites
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \@gobbletwo
+ \fi
+ \else% After a prenote or a postnote, dump the accumulator
+ \ifx\relax#1\relax\else
+ \citet{#1}%
+ \fi
+ , \citet[#3][#4]{#5}%
+ \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax
+ ,
+ \else
+ \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax
+ ,
+ \fi
+ \fi
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter
+ \markdownLaTeXNatbibTextCitations
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter
+ \@gobbletwo
+ \fi
+ \else% After a prenote or a postnote, dump the accumulator
+ \ifx\relax#1\relax\relax\else
+ \citet{#1}%
+ \fi
+ , \citet[#3][#4]{#5}%
+ \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax
+ ,
+ \else
+ \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax
+ ,
+ \fi
+ \fi
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXNatbibTextCitations
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \expandafter
+ \@gobbletwo
+ \fi\markdownLaTeXNatbibTextCitations{#1,#5}}
+
+% BibLaTeX implementation
+\def\markdownLaTeXBibLaTeXCitations#1#2#3#4#5{%
+ \advance\markdownLaTeXCitationsCounter by 1\relax
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \autocites#1[#3][#4]{#5}%
+ \expandafter\@gobbletwo
+ \fi\markdownLaTeXBibLaTeXCitations{#1[#3][#4]{#5}}}
+\def\markdownLaTeXBibLaTeXTextCitations#1#2#3#4#5{%
+ \advance\markdownLaTeXCitationsCounter by 1\relax
+ \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax
+ \textcites#1[#3][#4]{#5}%
+ \expandafter\@gobbletwo
+ \fi\markdownLaTeXBibLaTeXTextCitations{#1[#3][#4]{#5}}}
+
+\markdownSetup{rendererPrototypes = {
+ cite = {%
+ \markdownLaTeXCitationsCounter=1%
+ \def\markdownLaTeXCitationsTotal{#1}%
+ \ifx\autocites\undefined
+ \ifx\citep\undefined
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXBasicCitations
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \else
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXNatbibCitations
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \fi
+ \else
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXBibLaTeXCitations
+ \expandafter{\expandafter}%
+ \fi},
+ textCite = {%
+ \markdownLaTeXCitationsCounter=1%
+ \def\markdownLaTeXCitationsTotal{#1}%
+ \ifx\autocites\undefined
+ \ifx\citep\undefined
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXBasicTextCitations
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \else
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXNatbibTextCitations
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter}%
+ \fi
+ \else
+ \expandafter\expandafter\expandafter
+ \markdownLaTeXBibLaTeXTextCitations
+ \expandafter{\expandafter}%
+ \fi}}}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% Before consuming the parameters for the hyperlink renderer, we change the
+% category code of the hash sign (`#`) to other, so that it cannot be
+% mistaken for a parameter character. After the hyperlink has been typeset,
+% we restore the original catcode.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownRendererLinkPrototype{%
+ \begingroup
+ \catcode`\#=12
+ \def\next##1##2##3##4{%
+ ##1\footnote{%
+ \ifx\empty##4\empty\else##4: \fi\texttt<\url{##3}\texttt>}%
+ \endgroup}%
+ \next}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% There is a basic implementation of tables. If the \pkg{booktabs} package is
+% loaded, then it is used to produce horizontal lines.
+%
+% \end{markdown}
+% \begin{macrocode}
+\newcount\markdownLaTeXRowCounter
+\newcount\markdownLaTeXRowTotal
+\newcount\markdownLaTeXColumnCounter
+\newcount\markdownLaTeXColumnTotal
+\newtoks\markdownLaTeXTable
+\newtoks\markdownLaTeXTableAlignment
+\newtoks\markdownLaTeXTableEnd
+\@ifpackageloaded{booktabs}{
+ \let\markdownLaTeXTopRule\toprule
+ \let\markdownLaTeXMidRule\midrule
+ \let\markdownLaTeXBottomRule\bottomrule
+}{
+ \let\markdownLaTeXTopRule\hline
+ \let\markdownLaTeXMidRule\hline
+ \let\markdownLaTeXBottomRule\hline
+}
+\markdownSetup{rendererPrototypes={
+ table = {%
+ \markdownLaTeXTable={}%
+ \markdownLaTeXTableAlignment={}%
+ \markdownLaTeXTableEnd={%
+ \markdownLaTeXBottomRule
+ \end{tabular}}%
+ \ifx\empty#1\empty\else
+ \addto@hook\markdownLaTeXTable{%
+ \begin{table}
+ \centering}%
+ \addto@hook\markdownLaTeXTableEnd{%
+ \caption{#1}
+ \end{table}}%
+ \fi
+ \addto@hook\markdownLaTeXTable{\begin{tabular}}%
+ \markdownLaTeXRowCounter=0%
+ \markdownLaTeXRowTotal=#2%
+ \markdownLaTeXColumnTotal=#3%
+ \markdownLaTeXRenderTableRow
+ }
+}}
+\def\markdownLaTeXRenderTableRow#1{%
+ \markdownLaTeXColumnCounter=0%
+ \ifnum\markdownLaTeXRowCounter=0\relax
+ \markdownLaTeXReadAlignments#1%
+ \markdownLaTeXTable=\expandafter\expandafter\expandafter{%
+ \expandafter\the\expandafter\markdownLaTeXTable\expandafter{%
+ \the\markdownLaTeXTableAlignment}}%
+ \addto@hook\markdownLaTeXTable{\markdownLaTeXTopRule}%
+ \else
+ \markdownLaTeXRenderTableCell#1%
+ \fi
+ \ifnum\markdownLaTeXRowCounter=1\relax
+ \addto@hook\markdownLaTeXTable\markdownLaTeXMidRule
+ \fi
+ \advance\markdownLaTeXRowCounter by 1\relax
+ \ifnum\markdownLaTeXRowCounter>\markdownLaTeXRowTotal\relax
+ \markdownInfo{\the\markdownLaTeXTable}
+ \markdownInfo{\the\markdownLaTeXTableEnd}
+ \the\markdownLaTeXTable
+ \the\markdownLaTeXTableEnd
+ \expandafter\@gobble
+ \fi\markdownLaTeXRenderTableRow}
+\def\markdownLaTeXReadAlignments#1{%
+ \advance\markdownLaTeXColumnCounter by 1\relax
+ \if#1d%
+ \addto@hook\markdownLaTeXTableAlignment{l}%
+ \else
+ \addto@hook\markdownLaTeXTableAlignment{#1}%
+ \fi
+ \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax\else
+ \expandafter\@gobble
+ \fi\markdownLaTeXReadAlignments}
+\def\markdownLaTeXRenderTableCell#1{%
+ \advance\markdownLaTeXColumnCounter by 1\relax
+ \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax
+ \addto@hook\markdownLaTeXTable{#1&}%
+ \else
+ \addto@hook\markdownLaTeXTable{#1\\}%
+ \expandafter\@gobble
+ \fi\markdownLaTeXRenderTableCell}
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Miscellanea
+% When buffering user input, we should disable the bytes with the high bit set,
+% since these are made active by the \pkg{inputenc} package. We will do this by
+% redefining the \m{markdownMakeOther} macro accordingly. The code is courtesy
+% of Scott Pakin, the creator of the \pkg{filecontents} package.
+%
+% \end{markdown}
+% \begin{macrocode}
+\newcommand\markdownMakeOther{%
+ \count0=128\relax
+ \loop
+ \catcode\count0=11\relax
+ \advance\count0 by 1\relax
+ \ifnum\count0<256\repeat}%
+% \end{macrocode}
+% \iffalse
+%</latex>
+%<*context>
+% \fi
+% \par
+% \begin{markdown}
+%
+% \Hologo{ConTeXt} Implementation
+%--------------------------------
+% \label{sec:contextimplementation}
+% The \Hologo{ConTeXt} implementation makes use of the fact that, apart from
+% some subtle differences, the Mark II and Mark IV \Hologo{ConTeXt} formats
+% *seem* to implement (the documentation is scarce) the majority of the
+% plain \TeX{} format required by the plain \TeX{} implementation. As a
+% consequence, we can directly reuse the existing plain \TeX{} implementation
+% after supplying the missing plain \TeX{} macros.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\_\do\%\do\~}%
+\input markdown
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% When buffering user input, we should disable the bytes with the high bit set,
+% since these are made active by the \m{enableregime} macro. We will do this
+% by redefining the \m{markdownMakeOther} macro accordingly. The code is
+% courtesy of Scott Pakin, the creator of the \pkg{filecontents} \LaTeX{}
+% package.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownMakeOther{%
+ \count0=128\relax
+ \loop
+ \catcode\count0=11\relax
+ \advance\count0 by 1\relax
+ \ifnum\count0<256\repeat
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% On top of that, make the pipe character (`|`) inactive during the scanning.
+% This is necessary, since the character is active in \Hologo{ConTeXt}.
+%
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`|=12}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Logging Facilities
+% The \Hologo{ConTeXt} implementation redefines the plain \TeX{} logging macros (see
+% Section \ref{sec:texinterfacelogging}) to use the \Hologo{ConTeXt}
+% \m{writestatus} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownInfo#1{\writestatus{markdown}{#1.}}%
+\def\markdownWarning#1{\writestatus{markdown\space warn}{#1.}}%
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Typesetting Markdown
+% The \m{startmarkdown} and \m{stopmarkdown} macros are implemented using the
+% \m{markdownReadAndConvert} macro.
+%
+% \end{markdown}
+% \begin{macrocode}
+\begingroup
+% \end{macrocode}
+% \begin{markdown}
+% Locally swap the category code of the backslash symbol with the pipe symbol.
+% This is required in order that all the special symbols that appear in the
+% first argument of the `markdownReadAndConvert` macro have the category code
+% *other*.
+% \end{markdown}
+% \begin{macrocode}
+ \catcode`\|=0%
+ \catcode`\\=12%
+ |gdef|startmarkdown{%
+ |markdownReadAndConvert{\stopmarkdown}%
+ {|stopmarkdown}}%
+|endgroup
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+%### Token Renderer Prototypes
+% The following configuration should be considered placeholder.
+%
+% \end{markdown}
+% \begin{macrocode}
+\def\markdownRendererLineBreakPrototype{\blank}%
+\def\markdownRendererLeftBracePrototype{\textbraceleft}%
+\def\markdownRendererRightBracePrototype{\textbraceright}%
+\def\markdownRendererDollarSignPrototype{\textdollar}%
+\def\markdownRendererPercentSignPrototype{\percent}%
+\def\markdownRendererUnderscorePrototype{\textunderscore}%
+\def\markdownRendererCircumflexPrototype{\textcircumflex}%
+\def\markdownRendererBackslashPrototype{\textbackslash}%
+\def\markdownRendererTildePrototype{\textasciitilde}%
+\def\markdownRendererPipePrototype{\char`|}%
+\def\markdownRendererLinkPrototype#1#2#3#4{%
+ \useURL[#1][#3][][#4]#1\footnote[#1]{\ifx\empty#4\empty\else#4:
+ \fi\tt<\hyphenatedurl{#3}>}}%
+\usemodule[database]
+\defineseparatedlist
+ [MarkdownConTeXtCSV]
+ [separator={,},
+ before=\bTABLE,after=\eTABLE,
+ first=\bTR,last=\eTR,
+ left=\bTD,right=\eTD]
+\def\markdownConTeXtCSV{csv}
+\def\markdownRendererContentBlockPrototype#1#2#3#4{%
+ \def\markdownConTeXtCSV@arg{#1}%
+ \ifx\markdownConTeXtCSV@arg\markdownConTeXtCSV
+ \placetable[][tab:#1]{#4}{%
+ \processseparatedfile[MarkdownConTeXtCSV][#3]}%
+ \else
+ \markdownInput{#3}%
+ \fi}%
+\def\markdownRendererImagePrototype#1#2#3#4{%
+ \placefigure[][fig:#1]{#4}{\externalfigure[#3]}}%
+\def\markdownRendererUlBeginPrototype{\startitemize}%
+\def\markdownRendererUlBeginTightPrototype{\startitemize[packed]}%
+\def\markdownRendererUlItemPrototype{\item}%
+\def\markdownRendererUlEndPrototype{\stopitemize}%
+\def\markdownRendererUlEndTightPrototype{\stopitemize}%
+\def\markdownRendererOlBeginPrototype{\startitemize[n]}%
+\def\markdownRendererOlBeginTightPrototype{\startitemize[packed,n]}%
+\def\markdownRendererOlItemPrototype{\item}%
+\def\markdownRendererOlItemWithNumberPrototype#1{\sym{#1.}}%
+\def\markdownRendererOlEndPrototype{\stopitemize}%
+\def\markdownRendererOlEndTightPrototype{\stopitemize}%
+\definedescription
+ [MarkdownConTeXtDlItemPrototype]
+ [location=hanging,
+ margin=standard,
+ headstyle=bold]%
+\definestartstop
+ [MarkdownConTeXtDlPrototype]
+ [before=\blank,
+ after=\blank]%
+\definestartstop
+ [MarkdownConTeXtDlTightPrototype]
+ [before=\blank\startpacked,
+ after=\stoppacked\blank]%
+\def\markdownRendererDlBeginPrototype{%
+ \startMarkdownConTeXtDlPrototype}%
+\def\markdownRendererDlBeginTightPrototype{%
+ \startMarkdownConTeXtDlTightPrototype}%
+\def\markdownRendererDlItemPrototype#1{%
+ \startMarkdownConTeXtDlItemPrototype{#1}}%
+\def\markdownRendererDlItemEndPrototype{%
+ \stopMarkdownConTeXtDlItemPrototype}%
+\def\markdownRendererDlEndPrototype{%
+ \stopMarkdownConTeXtDlPrototype}%
+\def\markdownRendererDlEndTightPrototype{%
+ \stopMarkdownConTeXtDlTightPrototype}%
+\def\markdownRendererEmphasisPrototype#1{{\em#1}}%
+\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}%
+\def\markdownRendererBlockQuoteBeginPrototype{\startquotation}%
+\def\markdownRendererBlockQuoteEndPrototype{\stopquotation}%
+\def\markdownRendererInputVerbatimPrototype#1{\typefile{#1}}%
+\def\markdownRendererInputFencedCodePrototype#1#2{%
+ \ifx\relax#2\relax
+ \typefile{#1}%
+ \else
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% The code fence infostring is used as a name from the \Hologo{ConTeXt}
+% \m{definetyping} macro. This allows the user to set up code highlighting
+% mapping as follows:
+% ````` tex
+% % Map the `TEX` syntax highlighter to the `latex` infostring.
+% \definetyping [latex]
+% \setuptyping [latex] [option=TEX]
+%
+% \starttext
+% \startmarkdown
+% ~~~ latex
+% \documentclass{article}
+% \begin{document}
+% Hello world!
+% \end{document}
+% ~~~
+% \stopmarkdown
+% \stoptext
+% `````````
+%
+% \end{markdown}
+% \begin{macrocode}
+ \typefile[#2][]{#1}%
+ \fi}%
+\def\markdownRendererHeadingOnePrototype#1{\chapter{#1}}%
+\def\markdownRendererHeadingTwoPrototype#1{\section{#1}}%
+\def\markdownRendererHeadingThreePrototype#1{\subsection{#1}}%
+\def\markdownRendererHeadingFourPrototype#1{\subsubsection{#1}}%
+\def\markdownRendererHeadingFivePrototype#1{\subsubsubsection{#1}}%
+\def\markdownRendererHeadingSixPrototype#1{\subsubsubsubsection{#1}}%
+\def\markdownRendererHorizontalRulePrototype{%
+ \blackrule[height=1pt, width=\hsize]}%
+\def\markdownRendererFootnotePrototype#1{\footnote{#1}}%
+\stopmodule\protect
+% \end{macrocode}
+% \par
+% \begin{markdown}
+%
+% There is a basic implementation of tables.
+%
+% \end{markdown}
+% \begin{macrocode}
+\newcount\markdownConTeXtRowCounter
+\newcount\markdownConTeXtRowTotal
+\newcount\markdownConTeXtColumnCounter
+\newcount\markdownConTeXtColumnTotal
+\newtoks\markdownConTeXtTable
+\newtoks\markdownConTeXtTableFloat
+\def\markdownRendererTablePrototype#1#2#3{%
+ \markdownConTeXtTable={}%
+ \ifx\empty#1\empty
+ \markdownConTeXtTableFloat={%
+ \the\markdownConTeXtTable}%
+ \else
+ \markdownConTeXtTableFloat={%
+ \placetable{#1}{\the\markdownConTeXtTable}}%
+ \fi
+ \begingroup
+ \setupTABLE[r][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off]
+ \setupTABLE[c][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off]
+ \setupTABLE[r][1][topframe=on, bottomframe=on]
+ \setupTABLE[r][#1][bottomframe=on]
+ \markdownConTeXtRowCounter=0%
+ \markdownConTeXtRowTotal=#2%
+ \markdownConTeXtColumnTotal=#3%
+ \markdownConTeXtRenderTableRow}
+\def\markdownConTeXtRenderTableRow#1{%
+ \markdownConTeXtColumnCounter=0%
+ \ifnum\markdownConTeXtRowCounter=0\relax
+ \markdownConTeXtReadAlignments#1%
+ \markdownConTeXtTable={\bTABLE}%
+ \else
+ \markdownConTeXtTable=\expandafter{%
+ \the\markdownConTeXtTable\bTR}%
+ \markdownConTeXtRenderTableCell#1%
+ \markdownConTeXtTable=\expandafter{%
+ \the\markdownConTeXtTable\eTR}%
+ \fi
+ \advance\markdownConTeXtRowCounter by 1\relax
+ \ifnum\markdownConTeXtRowCounter>\markdownConTeXtRowTotal\relax
+ \markdownConTeXtTable=\expandafter{%
+ \the\markdownConTeXtTable\eTABLE}%
+ \the\markdownConTeXtTableFloat
+ \endgroup
+ \expandafter\gobbleoneargument
+ \fi\markdownConTeXtRenderTableRow}
+\def\markdownConTeXtReadAlignments#1{%
+ \advance\markdownConTeXtColumnCounter by 1\relax
+ \if#1d%
+ \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right]
+ \fi\if#1l%
+ \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right]
+ \fi\if#1c%
+ \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=middle]
+ \fi\if#1r%
+ \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=left]
+ \fi
+ \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else
+ \expandafter\gobbleoneargument
+ \fi\markdownConTeXtReadAlignments}
+\def\markdownConTeXtRenderTableCell#1{%
+ \advance\markdownConTeXtColumnCounter by 1\relax
+ \markdownConTeXtTable=\expandafter{%
+ \the\markdownConTeXtTable\bTD#1\eTD}%
+ \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else
+ \expandafter\gobbleoneargument
+ \fi\markdownConTeXtRenderTableCell}
+% \end{macrocode}
+% \iffalse
+%</context>
+% \fi
diff --git a/macros/generic/markdown/markdown.html b/macros/generic/markdown/markdown.html
new file mode 100644
index 0000000000..e6ed568bff
--- /dev/null
+++ b/macros/generic/markdown/markdown.html
@@ -0,0 +1,5344 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <meta name="author" content="Vít Novotný" />
+ <title>Markdown Package User Manual</title>
+ <style type="text/css">
+ code{white-space: pre-wrap;}
+ span.smallcaps{font-variant: small-caps;}
+ span.underline{text-decoration: underline;}
+ div.column{display: inline-block; vertical-align: top; width: 50%;}
+ </style>
+ <style type="text/css">
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; position: absolute; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; }
+pre.numberSource a.sourceLine:empty
+ { position: absolute; }
+pre.numberSource a.sourceLine::before
+ { content: attr(data-line-number);
+ position: absolute; left: -5em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ color: #aaaaaa;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
+div.sourceCode
+ { }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { color: #ff0000; font-weight: bold; } /* Alert */
+code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
+code span.at { color: #7d9029; } /* Attribute */
+code span.bn { color: #40a070; } /* BaseN */
+code span.bu { } /* BuiltIn */
+code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
+code span.ch { color: #4070a0; } /* Char */
+code span.cn { color: #880000; } /* Constant */
+code span.co { color: #60a0b0; font-style: italic; } /* Comment */
+code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
+code span.do { color: #ba2121; font-style: italic; } /* Documentation */
+code span.dt { color: #902000; } /* DataType */
+code span.dv { color: #40a070; } /* DecVal */
+code span.er { color: #ff0000; font-weight: bold; } /* Error */
+code span.ex { } /* Extension */
+code span.fl { color: #40a070; } /* Float */
+code span.fu { color: #06287e; } /* Function */
+code span.im { } /* Import */
+code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
+code span.kw { color: #007020; font-weight: bold; } /* Keyword */
+code span.op { color: #666666; } /* Operator */
+code span.ot { color: #007020; } /* Other */
+code span.pp { color: #bc7a00; } /* Preprocessor */
+code span.sc { color: #4070a0; } /* SpecialChar */
+code span.ss { color: #bb6688; } /* SpecialString */
+code span.st { color: #4070a0; } /* String */
+code span.va { color: #19177c; } /* Variable */
+code span.vs { color: #4070a0; } /* VerbatimString */
+code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
+ </style>
+ <link rel="stylesheet" href="markdown.css" />
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+</head>
+<body>
+<header>
+<h1 class="title">Markdown Package User Manual</h1>
+<p class="author">Vít Novotný</p>
+<p class="date">v2.8.1 (2019/04/30)</p>
+</header>
+<nav id="TOC">
+<ul>
+<li><a href="#introduction"><span class="toc-section-number">1</span> Introduction</a><ul>
+<li><a href="#requirements"><span class="toc-section-number">1.1</span> Requirements</a></li>
+<li><a href="#installation"><span class="toc-section-number">1.2</span> Installation</a><ul>
+<li><a href="#local-installation"><span class="toc-section-number">1.2.1</span> Local Installation</a></li>
+<li><a href="#portable-installation"><span class="toc-section-number">1.2.2</span> Portable Installation</a></li>
+</ul></li>
+<li><a href="#first-document"><span class="toc-section-number">1.3</span> First Document</a><ul>
+<li><a href="#using-lua"><span class="toc-section-number">1.3.1</span> Using Lua</a></li>
+<li><a href="#using-plain-tex"><span class="toc-section-number">1.3.2</span> Using Plain <span class="tex">T<sub>e</sub>X</span></a></li>
+<li><a href="#using-latex"><span class="toc-section-number">1.3.3</span> Using <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li>
+<li><a href="#using-context"><span class="toc-section-number">1.3.4</span> Using Con<span class="tex">T<sub>e</sub>X</span>t</a></li>
+</ul></li>
+</ul></li>
+<li><a href="#examples"><span class="toc-section-number">2</span> Examples</a><ul>
+<li><a href="#interfaces"><span class="toc-section-number">2.1</span> Interfaces</a><ul>
+<li><a href="#lua"><span class="toc-section-number">2.1.1</span> Lua</a></li>
+<li><a href="#plain-tex"><span class="toc-section-number">2.1.2</span> Plain <span class="tex">T<sub>e</sub>X</span></a></li>
+<li><a href="#latex"><span class="toc-section-number">2.1.3</span> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li>
+<li><a href="#context"><span class="toc-section-number">2.1.4</span> Con<span class="tex">T<sub>e</sub>X</span>t</a></li>
+</ul></li>
+<li><a href="#options"><span class="toc-section-number">2.2</span> Options</a><ul>
+<li><a href="#lua-1"><span class="toc-section-number">2.2.1</span> Lua</a></li>
+<li><a href="#plain-tex-1"><span class="toc-section-number">2.2.2</span> Plain <span class="tex">T<sub>e</sub>X</span></a></li>
+</ul></li>
+<li><a href="#markdown-tokens"><span class="toc-section-number">2.3</span> Markdown Tokens</a><ul>
+<li><a href="#token-renderers"><span class="toc-section-number">2.3.1</span> Token Renderers</a></li>
+<li><a href="#token-renderer-prototypes"><span class="toc-section-number">2.3.2</span> Token Renderer Prototypes</a></li>
+</ul></li>
+</ul></li>
+</ul>
+</nav>
+<p><link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet" /></p>
+<h1 id="introduction"><span class="header-section-number">1</span> Introduction</h1>
+<p>The <a href="https://ctan.org/pkg/markdown" title="CTAN: Package markdown">Markdown package</a> converts <a href="https://daringfireball.net/projects/markdown/basics/" title="Daring Fireball: Markdown Basics">markdown</a> markup to <span class="tex">T<sub>e</sub>X</span> commands. The functionality is provided both as a Lua module and as plain <span class="tex">T<sub>e</sub>X</span>, <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>, and Con<span class="tex">T<sub>e</sub>X</span>t macro packages that can be used to directly typeset documents containing markdown markup. Unlike other convertors, the Markdown package makes it easy to redefine how each and every markdown element is rendered. Creative abuse of the markdown syntax is encouraged. <i class="em em-wink"></i></p>
+<p>This document is a user manual for the <a href="https://ctan.org/pkg/markdown" title="CTAN: Package markdown">Markdown package</a>. It provides tutorials and code examples. For an in-depth description of the package requirements, interfaces, and implementation, please refer to the <a href="http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf" title="A Markdown Interpreter for &lt;span class=&quot;tex&quot;&gt;T&lt;sub&gt;e&lt;/sub&gt;X&lt;/span&gt;">technical documentation</a>.</p>
+<h2 id="requirements"><span class="header-section-number">1.1</span> Requirements</h2>
+<p>The package requires a working <span class="tex">T<sub>e</sub>X</span> distribution. <a href="https://www.tug.org/texlive/" title="TeX Live - TeX Users Group"><span class="tex">T<sub>e</sub>X</span> Live</a> ≥ 2013 is known to work and so are recent installation of <a href="https://miktex.org/" title="Home - MiKTeXorg">Mik<span class="tex">T<sub>e</sub>X</span></a>. If you are using a minimal installation of a <span class="tex">T<sub>e</sub>X</span> distribution, please consult the <a href="http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf" title="A Markdown Interpreter for &lt;span class=&quot;tex&quot;&gt;T&lt;sub&gt;e&lt;/sub&gt;X&lt;/span&gt;">technical documentation</a> for a detailed list of required packages.</p>
+<h2 id="installation"><span class="header-section-number">1.2</span> Installation</h2>
+<p>The package comes pre-installed with <a href="https://www.tug.org/texlive/" title="TeX Live - TeX Users Group"><span class="tex">T<sub>e</sub>X</span> Live</a> ≥ 2016 and with recent installations of <a href="https://miktex.org/" title="Home - MiKTeXorg">MikTeX</a>. Unless you explicitly wish to use the latest version of the package, you are encouraged to skip this step.</p>
+<p>To install the package, first download the package from the repository using Git:</p>
+<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/witiko/markdown</a></code></pre></div>
+<p>Next, enter the directory named <code>markdown</code> and interpret the file named <code>markdown.ins</code> file using a Unicode-aware <span class="tex">T<sub>e</sub>X</span> engine, such as XeTeX or LuaTeX:</p>
+<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="bu">cd</span> markdown</a>
+<a class="sourceLine" id="cb2-2" data-line-number="2"><span class="ex">luatex</span> markdown.ins</a></code></pre></div>
+<p>This should produce the following files:</p>
+<ul>
+<li><code>markdown.lua</code>, the Lua module,</li>
+<li><code>markdown-cli.lua</code>, the Lua command-line interface,</li>
+<li><code>markdown.tex</code>, the plain <span class="tex">T<sub>e</sub>X</span> macro package,</li>
+<li><code>markdown.sty</code>, the <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> package, and</li>
+<li><code>t-markdown.tex</code>, the Con<span class="tex">T<sub>e</sub>X</span>t module.</li>
+</ul>
+<h3 id="local-installation"><span class="header-section-number">1.2.1</span> Local Installation</h3>
+<p>To perform a local installation, place the above files into your <span class="tex">T<sub>e</sub>X</span> directory structure. This is generally where the individual files should be placed:</p>
+<ul>
+<li><code>&lt;TEXMF&gt;/tex/luatex/markdown/markdown.lua</code></li>
+<li><code>&lt;TEXMF&gt;/scripts/markdown/markdown-cli.lua</code></li>
+<li><code>&lt;TEXMF&gt;/tex/generic/markdown/markdown.tex</code></li>
+<li><code>&lt;TEXMF&gt;/tex/latex/markdown/markdown.sty</code></li>
+<li><code>&lt;TEXMF&gt;/tex/context/third/markdown/t-markdown.tex</code></li>
+</ul>
+<p>where <code>&lt;TEXMF&gt;</code> corresponds to a root of your <span class="tex">T<sub>e</sub>X</span> distribution, such as <code>/usr/share/texmf</code> and <code>~/texmf</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf</code> on Windows systems. When in doubt, consult the manual of your <span class="tex">T<sub>e</sub>X</span> distribution.</p>
+<h3 id="portable-installation"><span class="header-section-number">1.2.2</span> Portable Installation</h3>
+<p>Alternatively, you can also store the above files in the same folder as your <span class="tex">T<sub>e</sub>X</span> document and distribute them together. This way your document can be portably typeset on legacy <span class="tex">T<sub>e</sub>X</span> distributions.</p>
+<h2 id="first-document"><span class="header-section-number">1.3</span> First Document</h2>
+<p>In this section, we will take the necessary steps to typeset our first markdown document in <span class="tex">T<sub>e</sub>X</span>. This will serve as our first hands-on experience with the package and also as a reassurance that the package has been correctly installed.</p>
+<h3 id="using-lua"><span class="header-section-number">1.3.1</span> Using Lua</h3>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb3"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb3-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb3-2" data-line-number="2"><span class="fu">\input</span> hello</a>
+<a class="sourceLine" id="cb3-3" data-line-number="3"><span class="fu">\bye</span></a></code></pre></div>
+<h4 id="using-the-lua-module"><span class="header-section-number">1.3.1.1</span> Using the Lua Module</h4>
+<p>Using a text editor, create a text document named <code>hello.lua</code> with the following content:</p>
+<div class="sourceCode" id="cb4"><pre class="sourceCode lua"><code class="sourceCode lua"><a class="sourceLine" id="cb4-1" data-line-number="1"><span class="ot">#</span>!<span class="ot">/</span>usr<span class="ot">/</span>bin<span class="ot">/</span>env texlua</a>
+<a class="sourceLine" id="cb4-2" data-line-number="2"><span class="kw">local</span> kpse <span class="ot">=</span> <span class="fu">require</span><span class="ot">(</span><span class="st">&quot;kpse&quot;</span><span class="ot">)</span></a>
+<a class="sourceLine" id="cb4-3" data-line-number="3">kpse<span class="ot">.</span>set_program_name<span class="ot">(</span><span class="st">&quot;luatex&quot;</span><span class="ot">)</span></a>
+<a class="sourceLine" id="cb4-4" data-line-number="4"><span class="kw">local</span> markdown <span class="ot">=</span> <span class="fu">require</span><span class="ot">(</span><span class="st">&quot;markdown&quot;</span><span class="ot">)</span></a>
+<a class="sourceLine" id="cb4-5" data-line-number="5"><span class="kw">local</span> convert <span class="ot">=</span> markdown<span class="ot">.</span>new<span class="ot">()</span></a>
+<a class="sourceLine" id="cb4-6" data-line-number="6"><span class="fu">print</span><span class="ot">(</span>convert<span class="ot">(</span><span class="st">&quot;Hello *world*!&quot;</span><span class="ot">))</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="ex">texlua</span> hello.lua <span class="op">&gt;</span> hello.tex</a>
+<a class="sourceLine" id="cb5-2" data-line-number="2"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="ex">texlua</span> hello.lua <span class="op">&gt;</span> hello.tex</a>
+<a class="sourceLine" id="cb6-2" data-line-number="2"><span class="ex">pdftex</span> document.tex</a></code></pre></div>
+<h4 id="using-the-lua-command-line-interface"><span class="header-section-number">1.3.1.2</span> Using the Lua Command-Line Interface</h4>
+<p>Using a text editor, create a text document named <code>hello.md</code> with the following content:</p>
+<div class="sourceCode" id="cb7"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb7-1" data-line-number="1">Hello *world*!</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- hello.md hello.tex</a>
+<a class="sourceLine" id="cb8-2" data-line-number="2"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb9"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- hello.md hello.tex</a>
+<a class="sourceLine" id="cb9-2" data-line-number="2"><span class="ex">pdftex</span> document.tex</a></code></pre></div>
+<h3 id="using-plain-tex"><span class="header-section-number">1.3.2</span> Using Plain <span class="tex">T<sub>e</sub>X</span></h3>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb10"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb10-2" data-line-number="2"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb10-3" data-line-number="3">Hello *world*!</a>
+<a class="sourceLine" id="cb10-4" data-line-number="4"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb10-5" data-line-number="5"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb11"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb11-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb12"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb12-1" data-line-number="1"><span class="ex">pdftex</span> --shell-escape document.tex</a></code></pre></div>
+<h3 id="using-latex"><span class="header-section-number">1.3.3</span> Using <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></h3>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb13"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb13-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb13-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb13-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb13-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb13-5" data-line-number="5">Hello *world*!</a>
+<a class="sourceLine" id="cb13-6" data-line-number="6"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb13-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb14"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb14-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb15"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb15-1" data-line-number="1"><span class="ex">pdflatex</span> --shell-escape document.tex</a></code></pre></div>
+<hr />
+<p>As the next step, try typesetting the example documents distributed along with the Markdown package:</p>
+<div class="sourceCode" id="cb16"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb16-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/witiko/markdown</a>
+<a class="sourceLine" id="cb16-2" data-line-number="2"><span class="bu">cd</span> markdown/examples</a>
+<a class="sourceLine" id="cb16-3" data-line-number="3"><span class="ex">lualatex</span> latex.tex</a></code></pre></div>
+<p>A PDF document named <code>latex.pdf</code> should be produced. Open the text documents <code>latex.tex</code> and <code>example.md</code> in a text editor to see how the example documents are structured. Try changing the documents and typesetting them as follows:</p>
+<div class="sourceCode" id="cb17"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb17-1" data-line-number="1"><span class="ex">lualatex</span> latex.tex</a></code></pre></div>
+<p>to see the effect of your changes.</p>
+<h3 id="using-context"><span class="header-section-number">1.3.4</span> Using Con<span class="tex">T<sub>e</sub>X</span>t</h3>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb18"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb18-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb18-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb18-3" data-line-number="3"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb18-4" data-line-number="4">Hello *world*!</a>
+<a class="sourceLine" id="cb18-5" data-line-number="5"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb18-6" data-line-number="6"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb19"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb19-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb20"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb20-1" data-line-number="1"><span class="ex">texexec</span> --passon=--shell-escape document.tex</a></code></pre></div>
+<hr />
+<p>As the next step, try typesetting the example documents distributed along with the Markdown package:</p>
+<div class="sourceCode" id="cb21"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb21-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/witiko/markdown</a>
+<a class="sourceLine" id="cb21-2" data-line-number="2"><span class="bu">cd</span> markdown/examples</a>
+<a class="sourceLine" id="cb21-3" data-line-number="3"><span class="ex">context</span> context.tex</a></code></pre></div>
+<p>A PDF document named <code>context.pdf</code> should be produced. Open the text documents <code>context.tex</code> and <code>example.md</code> in a text editor to see how the example documents are structured. Try changing the documents and typesetting them as follows:</p>
+<div class="sourceCode" id="cb22"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb22-1" data-line-number="1"><span class="ex">context</span> context.tex</a></code></pre></div>
+<p>to see the effect of your changes.</p>
+<h1 id="examples"><span class="header-section-number">2</span> Examples</h1>
+<p>In this section, I will describe the individual parts of the Markdown package. Each part will be shown by example, leaving the implementation details to the <a href="http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf" title="A Markdown Interpreter for &lt;span class=&quot;tex&quot;&gt;T&lt;sub&gt;e&lt;/sub&gt;X&lt;/span&gt;">technical documentation</a>.</p>
+<h2 id="interfaces"><span class="header-section-number">2.1</span> Interfaces</h2>
+<p>In this section, I will describe the individual interfaces exposed by the Markdown package starting with the low-level Lua interfaces and all the way up to the <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> and Con<span class="tex">T<sub>e</sub>X</span>t interfaces intended for the ordinary user.</p>
+<h3 id="lua"><span class="header-section-number">2.1.1</span> Lua</h3>
+<p>The Lua programming language is what drives the conversion from markdown to <span class="tex">T<sub>e</sub>X</span> in the Markdown package. Based on the <a href="https://github.com/jgm/lunamark" title="Lua library for conversion between markup formats">Lunamark</a> Lua library by John MacFarlane, the Lua implementation is largely independent on <span class="tex">T<sub>e</sub>X</span>, and can be used separately from typesetting a document. Lua provides two interfaces: a Lua module and a command-line interface (CLI).</p>
+<h4 id="lua-module"><span class="header-section-number">2.1.1.1</span> Lua Module</h4>
+<p>A Lua module is a software library that can be used from in other programs. The <code>markdown</code> Lua module makes it possible to convert markdown to <span class="tex">T<sub>e</sub>X</span> from within Lua<span class="tex">T<sub>e</sub>X</span> documents and Lua scripts.</p>
+<p>The <code>markdown</code> Lua module exposes the <code>new(</code>⟨<em>options</em>⟩<code>)</code> method, which creates a converter function from markdown to <span class="tex">T<sub>e</sub>X</span>. The properties of the converter function are specified by the Lua table <code>options</code>. The parameter is optional; when unspecified, the behaviour will be the same as if ⟨<em>options</em>⟩ were an empty table.</p>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb23"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb23-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb23-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb23-3" data-line-number="3"><span class="fu">\input</span> example</a>
+<a class="sourceLine" id="cb23-4" data-line-number="4"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>example.lua</code> with the following content:</p>
+<div class="sourceCode" id="cb24"><pre class="sourceCode lua"><code class="sourceCode lua"><a class="sourceLine" id="cb24-1" data-line-number="1"><span class="ot">#</span>!<span class="ot">/</span>usr<span class="ot">/</span>bin<span class="ot">/</span>env texlua</a>
+<a class="sourceLine" id="cb24-2" data-line-number="2"><span class="kw">local</span> kpse <span class="ot">=</span> <span class="fu">require</span><span class="ot">(</span><span class="st">&quot;kpse&quot;</span><span class="ot">)</span></a>
+<a class="sourceLine" id="cb24-3" data-line-number="3">kpse<span class="ot">.</span>set_program_name<span class="ot">(</span><span class="st">&quot;luatex&quot;</span><span class="ot">)</span></a>
+<a class="sourceLine" id="cb24-4" data-line-number="4"><span class="kw">local</span> markdown <span class="ot">=</span> <span class="fu">require</span><span class="ot">(</span><span class="st">&quot;markdown&quot;</span><span class="ot">)</span></a>
+<a class="sourceLine" id="cb24-5" data-line-number="5"><span class="kw">local</span> input<span class="ot">,</span> convert_safe<span class="ot">,</span> convert_unsafe<span class="ot">,</span> paragraph</a>
+<a class="sourceLine" id="cb24-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb24-7" data-line-number="7">input <span class="ot">=</span> <span class="st">[[$\sqrt{-1}$ *equals* $i$.]]</span></a>
+<a class="sourceLine" id="cb24-8" data-line-number="8">convert_safe <span class="ot">=</span> markdown<span class="ot">.</span>new<span class="ot">()</span></a>
+<a class="sourceLine" id="cb24-9" data-line-number="9">convert_unsafe <span class="ot">=</span> markdown<span class="ot">.</span>new<span class="ot">({</span>hybrid <span class="ot">=</span> <span class="kw">true</span><span class="ot">})</span></a>
+<a class="sourceLine" id="cb24-10" data-line-number="10">paragraph <span class="ot">=</span> <span class="st">[[\par]]</span></a>
+<a class="sourceLine" id="cb24-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb24-12" data-line-number="12"><span class="fu">print</span><span class="ot">(</span></a>
+<a class="sourceLine" id="cb24-13" data-line-number="13"> convert_safe<span class="ot">(</span>input<span class="ot">)</span> <span class="ot">..</span> paragraph <span class="ot">..</span></a>
+<a class="sourceLine" id="cb24-14" data-line-number="14"> convert_unsafe<span class="ot">(</span>input<span class="ot">)</span></a>
+<a class="sourceLine" id="cb24-15" data-line-number="15"><span class="ot">)</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb25"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb25-1" data-line-number="1"><span class="ex">texlua</span> example.lua <span class="op">&gt;</span> example.tex</a>
+<a class="sourceLine" id="cb25-2" data-line-number="2"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<p>Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb26"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb26-1" data-line-number="1"><span class="ex">texlua</span> example.lua <span class="op">&gt;</span> example.tex</a>
+<a class="sourceLine" id="cb26-2" data-line-number="2"><span class="ex">pdftex</span> document.tex</a></code></pre></div>
+<hr />
+<p>Rather than use the <code>texlua</code> interpreter, we can also access the <code>markdown</code> Lua module directly from our document. Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb27"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb27-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb27-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb27-3" data-line-number="3"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb27-4" data-line-number="4"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb27-5" data-line-number="5"> local input, convert_safe, convert_unsafe, paragraph</a>
+<a class="sourceLine" id="cb27-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb27-7" data-line-number="7"> input = [[<span class="ss">$</span><span class="sc">\string\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.]]</a>
+<a class="sourceLine" id="cb27-8" data-line-number="8"> convert_safe = markdown.new()</a>
+<a class="sourceLine" id="cb27-9" data-line-number="9"> convert_unsafe = markdown.new({hybrid = true})</a>
+<a class="sourceLine" id="cb27-10" data-line-number="10"> paragraph = [[<span class="fu">\par</span>]]</a>
+<a class="sourceLine" id="cb27-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb27-12" data-line-number="12"> tex.sprint(</a>
+<a class="sourceLine" id="cb27-13" data-line-number="13"> convert_safe(input) .. paragraph ..</a>
+<a class="sourceLine" id="cb27-14" data-line-number="14"> convert_unsafe(input)</a>
+<a class="sourceLine" id="cb27-15" data-line-number="15"> )</a>
+<a class="sourceLine" id="cb27-16" data-line-number="16">}</a>
+<a class="sourceLine" id="cb27-17" data-line-number="17"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb28"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb28-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<p>In this case, we cannot use pdfTeX, because pdfTeX does not define the <code>\directlua</code> <span class="tex">T<sub>e</sub>X</span> command.</p>
+<h4 id="lua-command-line-interface"><span class="header-section-number">2.1.1.2</span> Lua Command-Line Interface</h4>
+<p>The Lua command-line interface (CLI) of the Markdown package makes the functionality of the Lua module accessible from the command line. This makes it possible to convert documents from markdown to <span class="tex">T<sub>e</sub>X</span> manually without any knowledge of the Lua programming language.</p>
+<p>The Lua command-line interface accepts the same options as the <code>markdown</code> Lua module, but now the options are specified as command-line parameters.</p>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb29"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb29-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb29-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb29-3" data-line-number="3"><span class="fu">\input</span> safe</a>
+<a class="sourceLine" id="cb29-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb29-5" data-line-number="5"><span class="fu">\input</span> unsafe</a>
+<a class="sourceLine" id="cb29-6" data-line-number="6"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>example.md</code> with the following content:</p>
+<div class="sourceCode" id="cb30"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb30-1" data-line-number="1">$\sqrt{-1}$ *equals* $i$.</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb31"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb31-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- example.md safe.tex</a>
+<a class="sourceLine" id="cb31-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true -- example.md unsafe.tex</a>
+<a class="sourceLine" id="cb31-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<p>Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb32"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb32-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- example.md safe.tex</a>
+<a class="sourceLine" id="cb32-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true -- example.md unsafe.tex</a>
+<a class="sourceLine" id="cb32-3" data-line-number="3"><span class="ex">pdftex</span> document.tex</a></code></pre></div>
+<h3 id="plain-tex"><span class="header-section-number">2.1.2</span> Plain <span class="tex">T<sub>e</sub>X</span></h3>
+<p>The plain <span class="tex">T<sub>e</sub>X</span> interface provides <span class="tex">T<sub>e</sub>X</span> commands that typeset markdown documents by using the Lua interface behind the scenes. Unlike the Lua interface, the plain TeX interface does not provide low-level tools for converting markdown to <span class="tex">T<sub>e</sub>X</span>. Instead, its goal is to provide high-level typesetting capabilities.</p>
+<p>The plain <span class="tex">T<sub>e</sub>X</span> interface accepts the same options as the <code>markdown</code> Lua module, in addition to its own options, but now the options are specified as <span class="tex">T<sub>e</sub>X</span> commands.</p>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb33"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb33-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb33-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb33-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb33-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb33-5" data-line-number="5"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb33-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb33-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb33-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb33-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb33-10" data-line-number="10"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb33-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb33-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb33-13" data-line-number="13"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb34"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb34-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<p>Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb35"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb35-1" data-line-number="1"><span class="ex">pdftex</span> --shell-escape document.tex</a></code></pre></div>
+<h3 id="latex"><span class="header-section-number">2.1.3</span> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></h3>
+<p>The <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> interface provides the same level of functionality as the plain <span class="tex">T<sub>e</sub>X</span> interface by using the plain <span class="tex">T<sub>e</sub>X</span> interface behind the scenes. Unlike the plain <span class="tex">T<sub>e</sub>X</span> interface, the <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> interface uses familiar <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> idioms, such as package options and environments.</p>
+<p>The <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> interface accepts the same options as the plain <span class="tex">T<sub>e</sub>X</span> interface, but now the options are specified as ⟨<em>key</em>⟩<span class="math inline"> = </span>⟨<em>value</em>⟩ pairs and they are passed either as package options, in the <code>\markdownSetup</code> command, or as parameters for the <code>markdown*</code> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> environment.</p>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb36"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb36-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb36-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb36-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb36-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb36-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb36-6" data-line-number="6"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb36-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb36-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb36-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hybrid}</a>
+<a class="sourceLine" id="cb36-10" data-line-number="10"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb36-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb36-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb36-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb37"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb37-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<p>Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb38"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb38-1" data-line-number="1"><span class="ex">pdflatex</span> --shell-escape document.tex</a></code></pre></div>
+<h3 id="context"><span class="header-section-number">2.1.4</span> Con<span class="tex">T<sub>e</sub>X</span>t</h3>
+<p>The Con<span class="tex">T<sub>e</sub>X</span>t interface provides the same level of functionality as the plain <span class="tex">T<sub>e</sub>X</span> interface by using the plain <span class="tex">T<sub>e</sub>X</span> interface behind the scenes. Unlike the plain <span class="tex">T<sub>e</sub>X</span> interface, the Con<span class="tex">T<sub>e</sub>X</span>t interface uses familiar Con<span class="tex">T<sub>e</sub>X</span>t idioms, such as environments.</p>
+<p>The Con<span class="tex">T<sub>e</sub>X</span>t interface accepts the same options as the plain <span class="tex">T<sub>e</sub>X</span> interface.</p>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb39"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb39-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb39-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb39-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb39-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb39-5" data-line-number="5"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb39-6" data-line-number="6"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb39-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb39-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb39-9" data-line-number="9"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb39-10" data-line-number="10"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb39-11" data-line-number="11"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb39-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb39-13" data-line-number="13"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb40"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb40-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<p>Invoking pdfTeX should have the same effect:</p>
+<div class="sourceCode" id="cb41"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb41-1" data-line-number="1"><span class="ex">texexec</span> --passon=--shell-escape document.tex</a></code></pre></div>
+<h2 id="options"><span class="header-section-number">2.2</span> Options</h2>
+<p>In this section, I will describe all the options recognized by the Markdown package.</p>
+<h3 id="lua-1"><span class="header-section-number">2.2.1</span> Lua</h3>
+<p>Lua options control the conversion from markdown to <span class="tex">T<sub>e</sub>X</span>. They are supported by all interfaces of the Markdown package starting with the low-level Lua interfaces and all the way up to the <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> and Con<span class="tex">T<sub>e</sub>X</span>t interfaces.</p>
+<h4 id="option-cachedir"><span class="header-section-number">2.2.1.1</span> Option <code>cacheDir</code></h4>
+<dl>
+<dt><code>cacheDir</code> (default value: <code>&quot;.&quot;</code>)</dt>
+<dd><p>A path to the directory containing auxiliary cache files. If the last segment of the path does not exist, it will be created by the Lua command-line and plain <span class="tex">T<sub>e</sub>X</span> implementations. The Lua implementation expects that the entire path already exists.</p>
+<p>When iteratively writing and typesetting a markdown document, the cache files are going to accumulate over time. You are advised to clean the cache directory every now and then, or to set it to a temporary filesystem (such as <code>/tmp</code> on UN*X systems), which gets periodically emptied.</p>
+</dd>
+</dl>
+<h5 id="lua-module-example" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb42"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb42-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb42-2" data-line-number="2"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb42-3" data-line-number="3"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb42-4" data-line-number="4"> local convert = markdown.new({cacheDir = &quot;cache&quot;})</a>
+<a class="sourceLine" id="cb42-5" data-line-number="5"> local input = &quot;Hello *world*!&quot;</a>
+<a class="sourceLine" id="cb42-6" data-line-number="6"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb42-7" data-line-number="7"><span class="fu">\bye</span></a></code></pre></div>
+<p>Create an empty directory named <code>cache</code> next to our text document. Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb43"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb43-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†Several cache files of the Markdown package will also be produced in the <code>cache</code> directory as we requested using the <code>cacheDir</code> option.</p>
+<h5 id="lua-cli-example" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb44"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb44-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb44-2" data-line-number="2"><span class="fu">\input</span> hello</a>
+<a class="sourceLine" id="cb44-3" data-line-number="3"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>hello.md</code> with the following content:</p>
+<div class="sourceCode" id="cb45"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb45-1" data-line-number="1">Hello *world*!</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb46"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb46-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ cacheDir=cache -- hello.md hello.tex</a>
+<a class="sourceLine" id="cb46-2" data-line-number="2"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†A directory named <code>cache</code> containing several cache files of the Markdown package will also be produced as we requested using the <code>cacheDir</code> option.</p>
+<h5 id="plain-tex-example" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb47"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb47-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb47-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionCacheDir{cache}</a>
+<a class="sourceLine" id="cb47-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb47-4" data-line-number="4">Hello *world*!</a>
+<a class="sourceLine" id="cb47-5" data-line-number="5"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb47-6" data-line-number="6"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb48"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb48-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†A directory named <code>cache</code> containing several cache files of the Markdown package will also be produced as we requested using the <code>cacheDir</code> option.</p>
+<h5 id="latex-example" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb49"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb49-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb49-2" data-line-number="2"><span class="bu">\usepackage</span>[cacheDir=cache]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb49-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb49-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb49-5" data-line-number="5">Hello *world*!</a>
+<a class="sourceLine" id="cb49-6" data-line-number="6"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb49-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb50"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb50-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†A directory named <code>cache</code> containing several cache files of the Markdown package will also be produced as we requested using the <code>cacheDir</code> option.</p>
+<h5 id="context-example" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb51"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb51-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb51-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionCacheDir{cache}</a>
+<a class="sourceLine" id="cb51-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb51-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb51-5" data-line-number="5">Hello *world*!</a>
+<a class="sourceLine" id="cb51-6" data-line-number="6"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb51-7" data-line-number="7"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb52"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb52-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!†A directory named <code>cache</code> containing several cache files of the Markdown package will also be produced as we requested using the <code>cacheDir</code> option.</p>
+<h4 id="option-blankbeforeblockquote"><span class="header-section-number">2.2.1.2</span> Option <code>blankBeforeBlockquote</code></h4>
+<dl>
+<dt><code>blankBeforeBlockquote</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Require a blank line between a paragraph and the following blockquote.</p>
+</dd>
+<dt>false</dt>
+<dd><p>Do not require a blank line between a paragraph and the following blockquote.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-1" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb53"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb53-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb53-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb53-3" data-line-number="3"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb53-4" data-line-number="4"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb53-5" data-line-number="5"> local newline = [[^^J^^J]]</a>
+<a class="sourceLine" id="cb53-6" data-line-number="6"> local convert, input</a>
+<a class="sourceLine" id="cb53-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb53-8" data-line-number="8"> convert = markdown.new()</a>
+<a class="sourceLine" id="cb53-9" data-line-number="9"> input = &quot;A paragraph.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb53-10" data-line-number="10"> &quot;&gt; A quote.&quot; .. newline</a>
+<a class="sourceLine" id="cb53-11" data-line-number="11"> tex.sprint(convert(input))</a>
+<a class="sourceLine" id="cb53-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb53-13" data-line-number="13"> convert = markdown.new({blankBeforeBlockquote = true})</a>
+<a class="sourceLine" id="cb53-14" data-line-number="14"> input = &quot;A paragraph.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb53-15" data-line-number="15"> &quot;&gt; Not a quote.&quot; .. newline</a>
+<a class="sourceLine" id="cb53-16" data-line-number="16"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb53-17" data-line-number="17"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb54"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb54-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<blockquote>
+<p>A quote.</p>
+</blockquote>
+<p>A paragraph &gt; Not a quote.</p>
+</blockquote>
+<h5 id="lua-cli-example-1" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb55"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb55-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb55-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb55-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb55-4" data-line-number="4"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb55-5" data-line-number="5"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb56"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb56-1" data-line-number="1">A paragraph.</a>
+<a class="sourceLine" id="cb56-2" data-line-number="2">&gt;<span class="dt"> A quote?</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb57"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb57-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb57-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeBlockquote=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb57-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<blockquote>
+<p>A quote?</p>
+</blockquote>
+<p>A paragraph. &gt; A quote?</p>
+</blockquote>
+<h5 id="plain-tex-example-1" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb58"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb58-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb58-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb58-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb58-4" data-line-number="4">A paragraph.</a>
+<a class="sourceLine" id="cb58-5" data-line-number="5">&gt; A quote.</a>
+<a class="sourceLine" id="cb58-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb58-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb58-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionBlankBeforeBlockquote{true}</a>
+<a class="sourceLine" id="cb58-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb58-10" data-line-number="10">A paragraph.</a>
+<a class="sourceLine" id="cb58-11" data-line-number="11">&gt; Not a quote.</a>
+<a class="sourceLine" id="cb58-12" data-line-number="12"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb58-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb58-14" data-line-number="14"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb59"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb59-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<blockquote>
+<p>A quote.</p>
+</blockquote>
+<p>A paragraph &gt; Not a quote.</p>
+</blockquote>
+<h5 id="latex-example-1" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb60"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb60-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb60-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb60-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb60-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb60-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb60-6" data-line-number="6">A paragraph.</a>
+<a class="sourceLine" id="cb60-7" data-line-number="7">&gt; A quote.</a>
+<a class="sourceLine" id="cb60-8" data-line-number="8"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb60-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb60-10" data-line-number="10"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeBlockquote}</a>
+<a class="sourceLine" id="cb60-11" data-line-number="11">A paragraph.</a>
+<a class="sourceLine" id="cb60-12" data-line-number="12">&gt; Not a quote.</a>
+<a class="sourceLine" id="cb60-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb60-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb60-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb61"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb61-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<blockquote>
+<p>A quote.</p>
+</blockquote>
+<p>A paragraph &gt; Not a quote.</p>
+</blockquote>
+<h5 id="context-example-1" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb62"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb62-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb62-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb62-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb62-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb62-5" data-line-number="5">A paragraph.</a>
+<a class="sourceLine" id="cb62-6" data-line-number="6">&gt; A quote.</a>
+<a class="sourceLine" id="cb62-7" data-line-number="7"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb62-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb62-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionBlankBeforeBlockquote{true}</a>
+<a class="sourceLine" id="cb62-10" data-line-number="10"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb62-11" data-line-number="11">A paragraph.</a>
+<a class="sourceLine" id="cb62-12" data-line-number="12">&gt; Not a quote.</a>
+<a class="sourceLine" id="cb62-13" data-line-number="13"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb62-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb62-15" data-line-number="15"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb63"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb63-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<blockquote>
+<p>A quote.</p>
+</blockquote>
+<p>A paragraph &gt; Not a quote.</p>
+</blockquote>
+<h4 id="option-blankbeforecodefence"><span class="header-section-number">2.2.1.3</span> Option <code>blankBeforeCodeFence</code></h4>
+<dl>
+<dt><code>blankBeforeCodeFence</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Require a blank line between a paragraph and the following fenced code block.</p>
+</dd>
+<dt>false</dt>
+<dd><p>Do not require a blank line between a paragraph and the following fenced code block.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-2" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb64"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb64-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb64-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb64-3" data-line-number="3"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb64-4" data-line-number="4"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb64-5" data-line-number="5"> local newline = [[^^J^^J]]</a>
+<a class="sourceLine" id="cb64-6" data-line-number="6"> local convert, input</a>
+<a class="sourceLine" id="cb64-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb64-8" data-line-number="8"> convert = markdown.new({fencedCode = true})</a>
+<a class="sourceLine" id="cb64-9" data-line-number="9"> input = &quot;A paragraph.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb64-10" data-line-number="10"> &quot;```&quot; .. newline ..</a>
+<a class="sourceLine" id="cb64-11" data-line-number="11"> &quot;A code fence.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb64-12" data-line-number="12"> &quot;```&quot; .. newline</a>
+<a class="sourceLine" id="cb64-13" data-line-number="13"> tex.sprint(convert(input))</a>
+<a class="sourceLine" id="cb64-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb64-15" data-line-number="15"> convert = markdown.new({</a>
+<a class="sourceLine" id="cb64-16" data-line-number="16"> fencedCode = true, blankBeforeCodeFence = true})</a>
+<a class="sourceLine" id="cb64-17" data-line-number="17"> input = &quot;A paragraph.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb64-18" data-line-number="18"> &quot;```&quot; .. newline ..</a>
+<a class="sourceLine" id="cb64-19" data-line-number="19"> &quot;Not a code fence.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb64-20" data-line-number="20"> &quot;```&quot; .. newline</a>
+<a class="sourceLine" id="cb64-21" data-line-number="21"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb64-22" data-line-number="22"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb65"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb65-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<pre><code>A code fence.</code></pre>
+<p>A paragraph. <code>Not a code fence.</code></p>
+</blockquote>
+<h5 id="lua-cli-example-2" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb67"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb67-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb67-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb67-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb67-4" data-line-number="4"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb67-5" data-line-number="5"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb68"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb68-1" data-line-number="1">A paragraph.</a>
+<a class="sourceLine" id="cb68-2" data-line-number="2">```</a>
+<a class="sourceLine" id="cb68-3" data-line-number="3">A code fence?</a>
+<a class="sourceLine" id="cb68-4" data-line-number="4">```</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb69"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb69-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ fencedCode=true -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb69-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ fencedCode=true blankBeforeCodeFence=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb69-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<pre><code>A code fence?</code></pre>
+<p>A paragraph. <code>A code fence?</code></p>
+</blockquote>
+<h5 id="plain-tex-example-2" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb71"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb71-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb71-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFencedCode{true}</a>
+<a class="sourceLine" id="cb71-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb71-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb71-5" data-line-number="5">A paragraph.</a>
+<a class="sourceLine" id="cb71-6" data-line-number="6">```</a>
+<a class="sourceLine" id="cb71-7" data-line-number="7">A code fence.</a>
+<a class="sourceLine" id="cb71-8" data-line-number="8">```</a>
+<a class="sourceLine" id="cb71-9" data-line-number="9"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb71-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb71-11" data-line-number="11"><span class="fu">\def</span>\markdownOptionBlankBeforeCodeFence{true}</a>
+<a class="sourceLine" id="cb71-12" data-line-number="12"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb71-13" data-line-number="13">A paragraph.</a>
+<a class="sourceLine" id="cb71-14" data-line-number="14">```</a>
+<a class="sourceLine" id="cb71-15" data-line-number="15">Not a code fence.</a>
+<a class="sourceLine" id="cb71-16" data-line-number="16">```</a>
+<a class="sourceLine" id="cb71-17" data-line-number="17"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb71-18" data-line-number="18"></a>
+<a class="sourceLine" id="cb71-19" data-line-number="19"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb72"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb72-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<pre><code>A code fence.</code></pre>
+<p>A paragraph. <code>Not a code fence.</code></p>
+</blockquote>
+<h5 id="latex-example-2" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb74"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb74-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb74-2" data-line-number="2"><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb74-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb74-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb74-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb74-6" data-line-number="6">A paragraph.</a>
+<a class="sourceLine" id="cb74-7" data-line-number="7">```</a>
+<a class="sourceLine" id="cb74-8" data-line-number="8">A code fence.</a>
+<a class="sourceLine" id="cb74-9" data-line-number="9">```</a>
+<a class="sourceLine" id="cb74-10" data-line-number="10"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb74-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb74-12" data-line-number="12"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeCodeFence}</a>
+<a class="sourceLine" id="cb74-13" data-line-number="13">A paragraph.</a>
+<a class="sourceLine" id="cb74-14" data-line-number="14">```</a>
+<a class="sourceLine" id="cb74-15" data-line-number="15">Not a code fence.</a>
+<a class="sourceLine" id="cb74-16" data-line-number="16">```</a>
+<a class="sourceLine" id="cb74-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb74-18" data-line-number="18"></a>
+<a class="sourceLine" id="cb74-19" data-line-number="19"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb75"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb75-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<pre><code>A code fence.</code></pre>
+<p>A paragraph. <code>Not a code fence.</code></p>
+</blockquote>
+<h5 id="context-example-2" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb77"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb77-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb77-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFencedCode{true}</a>
+<a class="sourceLine" id="cb77-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb77-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb77-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb77-6" data-line-number="6">A paragraph.</a>
+<a class="sourceLine" id="cb77-7" data-line-number="7">```</a>
+<a class="sourceLine" id="cb77-8" data-line-number="8">A code fence.</a>
+<a class="sourceLine" id="cb77-9" data-line-number="9">```</a>
+<a class="sourceLine" id="cb77-10" data-line-number="10"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb77-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb77-12" data-line-number="12"><span class="fu">\def</span>\markdownOptionBlankBeforeCodeFence{true}</a>
+<a class="sourceLine" id="cb77-13" data-line-number="13"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb77-14" data-line-number="14">A paragraph.</a>
+<a class="sourceLine" id="cb77-15" data-line-number="15">```</a>
+<a class="sourceLine" id="cb77-16" data-line-number="16">Not a code fence.</a>
+<a class="sourceLine" id="cb77-17" data-line-number="17">```</a>
+<a class="sourceLine" id="cb77-18" data-line-number="18"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb77-19" data-line-number="19"></a>
+<a class="sourceLine" id="cb77-20" data-line-number="20"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb78"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb78-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<pre><code>A code fence.</code></pre>
+<p>A paragraph. <code>Not a code fence.</code></p>
+</blockquote>
+<h4 id="option-blankbeforeheading"><span class="header-section-number">2.2.1.4</span> Option <code>blankBeforeHeading</code></h4>
+<dl>
+<dt><code>blankBeforeHeading</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Require a blank line between a paragraph and the following header.</p>
+</dd>
+<dt>false</dt>
+<dd><p>Do not require a blank line between a paragraph and the following header.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-3" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb80"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb80-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb80-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb80-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererHeadingOne#1{{\bf #1}\par}</a>
+<a class="sourceLine" id="cb80-4" data-line-number="4"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb80-5" data-line-number="5"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb80-6" data-line-number="6"> local newline = [[^^J^^J]]</a>
+<a class="sourceLine" id="cb80-7" data-line-number="7"> local convert, input</a>
+<a class="sourceLine" id="cb80-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb80-9" data-line-number="9"> convert = markdown.new()</a>
+<a class="sourceLine" id="cb80-10" data-line-number="10"> input = &quot;A paragraph.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb80-11" data-line-number="11"> &quot;A heading.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb80-12" data-line-number="12"> &quot;==========&quot; .. newline</a>
+<a class="sourceLine" id="cb80-13" data-line-number="13"> tex.sprint(convert(input))</a>
+<a class="sourceLine" id="cb80-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb80-15" data-line-number="15"> convert = markdown.new({blankBeforeHeading = true})</a>
+<a class="sourceLine" id="cb80-16" data-line-number="16"> input = &quot;A paragraph.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb80-17" data-line-number="17"> &quot;Not a heading.&quot; .. newline ..</a>
+<a class="sourceLine" id="cb80-18" data-line-number="18"> &quot;==============&quot; .. newline</a>
+<a class="sourceLine" id="cb80-19" data-line-number="19"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb80-20" data-line-number="20"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb81"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb81-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<h1 id="a-heading.">A heading.</h1>
+<p>A paragraph. Not a heading. ==============</p>
+</blockquote>
+<h5 id="lua-cli-example-3" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb82"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb82-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb82-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb82-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb82-4" data-line-number="4"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb82-5" data-line-number="5"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb83"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb83-1" data-line-number="1">A paragraph.</a>
+<a class="sourceLine" id="cb83-2" data-line-number="2">A heading?</a>
+<a class="sourceLine" id="cb83-3" data-line-number="3">==========</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb84"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb84-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb84-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeHeading=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb84-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<h1 id="a-heading">A heading?</h1>
+<p>A paragraph. A heading? ==========</p>
+</blockquote>
+<h5 id="plain-tex-example-3" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb85"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb85-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb85-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb85-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb85-4" data-line-number="4">A paragraph.</a>
+<a class="sourceLine" id="cb85-5" data-line-number="5">A heading.</a>
+<a class="sourceLine" id="cb85-6" data-line-number="6">==========</a>
+<a class="sourceLine" id="cb85-7" data-line-number="7"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb85-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb85-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionBlankBeforeHeading{true}</a>
+<a class="sourceLine" id="cb85-10" data-line-number="10"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb85-11" data-line-number="11">A paragraph.</a>
+<a class="sourceLine" id="cb85-12" data-line-number="12">Not a heading.</a>
+<a class="sourceLine" id="cb85-13" data-line-number="13">==============</a>
+<a class="sourceLine" id="cb85-14" data-line-number="14"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb85-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb85-16" data-line-number="16"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb86"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb86-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<h1 id="a-heading.-1">A heading.</h1>
+<p>A paragraph. Not a heading. ==============</p>
+</blockquote>
+<h5 id="latex-example-3" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb87"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb87-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb87-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb87-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb87-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb87-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb87-6" data-line-number="6">A paragraph.</a>
+<a class="sourceLine" id="cb87-7" data-line-number="7">A heading.</a>
+<a class="sourceLine" id="cb87-8" data-line-number="8">==========</a>
+<a class="sourceLine" id="cb87-9" data-line-number="9"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb87-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb87-11" data-line-number="11"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeHeading}</a>
+<a class="sourceLine" id="cb87-12" data-line-number="12">A paragraph.</a>
+<a class="sourceLine" id="cb87-13" data-line-number="13">Not a heading.</a>
+<a class="sourceLine" id="cb87-14" data-line-number="14">==============</a>
+<a class="sourceLine" id="cb87-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb87-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb87-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb88"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb88-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<h1 id="a-heading.-2">A heading.</h1>
+<p>A paragraph. Not a heading. ==============</p>
+</blockquote>
+<h5 id="context-example-3" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb89"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb89-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb89-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb89-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb89-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb89-5" data-line-number="5">A paragraph.</a>
+<a class="sourceLine" id="cb89-6" data-line-number="6">A heading.</a>
+<a class="sourceLine" id="cb89-7" data-line-number="7">==========</a>
+<a class="sourceLine" id="cb89-8" data-line-number="8"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb89-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb89-10" data-line-number="10"><span class="fu">\def</span>\markdownOptionBlankBeforeHeading{true}</a>
+<a class="sourceLine" id="cb89-11" data-line-number="11"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb89-12" data-line-number="12">A paragraph.</a>
+<a class="sourceLine" id="cb89-13" data-line-number="13">Not a heading.</a>
+<a class="sourceLine" id="cb89-14" data-line-number="14">==============</a>
+<a class="sourceLine" id="cb89-15" data-line-number="15"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb89-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb89-17" data-line-number="17"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb90"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb90-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A paragraph.</p>
+<h1 id="a-heading.-3">A heading.</h1>
+<p>A paragraph. Not a heading. ==============</p>
+</blockquote>
+<h4 id="option-breakableblockquotes"><span class="header-section-number">2.2.1.5</span> Option <code>breakableBlockquotes</code></h4>
+<dl>
+<dt><code>breakableBlockquotes</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>A blank line separates block quotes.</p>
+</dd>
+<dt>false</dt>
+<dd><p>Blank lines in the middle of a block quote are ignored.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-4" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb91"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb91-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb91-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb91-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererHeadingOne#1{{\bf #1}\par}</a>
+<a class="sourceLine" id="cb91-4" data-line-number="4"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb91-5" data-line-number="5"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb91-6" data-line-number="6"> local newline = [[^^J^^J]]</a>
+<a class="sourceLine" id="cb91-7" data-line-number="7"> local convert, input</a>
+<a class="sourceLine" id="cb91-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb91-9" data-line-number="9"> convert = markdown.new()</a>
+<a class="sourceLine" id="cb91-10" data-line-number="10"> input = &quot;&gt; A single&quot; .. newline .. newline ..</a>
+<a class="sourceLine" id="cb91-11" data-line-number="11"> &quot;&gt; block quote.&quot; .. newline</a>
+<a class="sourceLine" id="cb91-12" data-line-number="12"> tex.sprint(convert(input))</a>
+<a class="sourceLine" id="cb91-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb91-14" data-line-number="14"> convert = markdown.new({breakableBlockquotes = true})</a>
+<a class="sourceLine" id="cb91-15" data-line-number="15"> input = &quot;&gt; A block quote.&quot; .. newline .. newline ..</a>
+<a class="sourceLine" id="cb91-16" data-line-number="16"> &quot;&gt; Another block quote.&quot; .. newline</a>
+<a class="sourceLine" id="cb91-17" data-line-number="17"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb91-18" data-line-number="18"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb92"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb92-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<blockquote>
+<p>A single block quote.</p>
+</blockquote>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+<blockquote>
+<p>Another block quote.</p>
+</blockquote>
+</blockquote>
+<h5 id="lua-cli-example-4" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb93"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb93-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb93-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb93-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb93-4" data-line-number="4"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb93-5" data-line-number="5"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb94"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb94-1" data-line-number="1">&gt;<span class="dt"> A single block quote</span></a>
+<a class="sourceLine" id="cb94-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb94-3" data-line-number="3">&gt;<span class="dt"> or two block quotes?</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb95"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb95-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb95-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ breakableBlockquotes=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb95-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<blockquote>
+<p>A single block quote or two block quotes?</p>
+</blockquote>
+<blockquote>
+<p>A single block quote</p>
+</blockquote>
+<blockquote>
+<p>or two block quotes?</p>
+</blockquote>
+</blockquote>
+<h5 id="plain-tex-example-4" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb96"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb96-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb96-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb96-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb96-4" data-line-number="4">&gt; A single</a>
+<a class="sourceLine" id="cb96-5" data-line-number="5"></a>
+<a class="sourceLine" id="cb96-6" data-line-number="6">&gt; block quote.</a>
+<a class="sourceLine" id="cb96-7" data-line-number="7"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb96-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb96-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionBreakableBlockquotes{true}</a>
+<a class="sourceLine" id="cb96-10" data-line-number="10"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb96-11" data-line-number="11">&gt; A block quote.</a>
+<a class="sourceLine" id="cb96-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb96-13" data-line-number="13">&gt; Another block quote.</a>
+<a class="sourceLine" id="cb96-14" data-line-number="14"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb96-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb96-16" data-line-number="16"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb97"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb97-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<blockquote>
+<p>A single block quote.</p>
+</blockquote>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+<blockquote>
+<p>Another block quote.</p>
+</blockquote>
+</blockquote>
+<h5 id="latex-example-4" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb98"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb98-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb98-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb98-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb98-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb98-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb98-6" data-line-number="6">&gt; A single</a>
+<a class="sourceLine" id="cb98-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb98-8" data-line-number="8">&gt; block quote.</a>
+<a class="sourceLine" id="cb98-9" data-line-number="9"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb98-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb98-11" data-line-number="11"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{breakableBlockquotes}</a>
+<a class="sourceLine" id="cb98-12" data-line-number="12">&gt; A block quote.</a>
+<a class="sourceLine" id="cb98-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb98-14" data-line-number="14">&gt; Another block quote.</a>
+<a class="sourceLine" id="cb98-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb98-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb98-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb99"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb99-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<blockquote>
+<p>A single block quote.</p>
+</blockquote>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+<blockquote>
+<p>Another block quote.</p>
+</blockquote>
+</blockquote>
+<h5 id="context-example-4" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb100"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb100-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb100-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb100-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb100-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb100-5" data-line-number="5">&gt; A single</a>
+<a class="sourceLine" id="cb100-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb100-7" data-line-number="7">&gt; block quote.</a>
+<a class="sourceLine" id="cb100-8" data-line-number="8"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb100-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb100-10" data-line-number="10"><span class="fu">\def</span>\markdownOptionBreakableBlockquotes{true}</a>
+<a class="sourceLine" id="cb100-11" data-line-number="11"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb100-12" data-line-number="12">&gt; A block quote.</a>
+<a class="sourceLine" id="cb100-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb100-14" data-line-number="14">&gt; Another block quote.</a>
+<a class="sourceLine" id="cb100-15" data-line-number="15"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb100-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb100-17" data-line-number="17"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb101"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb101-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<blockquote>
+<p>A single block quote.</p>
+</blockquote>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+<blockquote>
+<p>Another block quote.</p>
+</blockquote>
+</blockquote>
+<h4 id="option-citationnbsps"><span class="header-section-number">2.2.1.6</span> Option <code>citationNbsps</code></h4>
+<dl>
+<dt><code>citationNbsps</code> (default value: <code>true</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Replace regular spaces with non-breakable spaces inside the prenotes and postnotes of citations produced via the pandoc citation syntax extension.</p>
+</dd>
+<dt>false</dt>
+<dd><p>Do not replace regular spaces with non-breakable spaces inside the prenotes and postnotes of citations produced via the pandoc citation syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-5" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.bib</code> with the following content:</p>
+<div class="sourceCode" id="cb102"><pre class="sourceCode bib"><code class="sourceCode bibtex"><a class="sourceLine" id="cb102-1" data-line-number="1"><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</a>
+<a class="sourceLine" id="cb102-2" data-line-number="2"> <span class="dt">author</span> = &quot;<span class="st">Knuth, Donald Ervin</span>&quot;,</a>
+<a class="sourceLine" id="cb102-3" data-line-number="3"> <span class="dt">title</span> = &quot;<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>&quot;,</a>
+<a class="sourceLine" id="cb102-4" data-line-number="4"> <span class="dt">publisher</span> = &quot;<span class="st">Addison-Wesley</span>&quot;,</a>
+<a class="sourceLine" id="cb102-5" data-line-number="5"> <span class="dt">year</span> = &quot;<span class="st">1984</span>&quot;</a>
+<a class="sourceLine" id="cb102-6" data-line-number="6">}</a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb103"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb103-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb103-2" data-line-number="2"><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb103-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb103-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb103-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb103-6" data-line-number="6">The TeXbook [@knuth:tex, p. 123 and 130] is good.</a>
+<a class="sourceLine" id="cb103-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb103-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb103-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{citationNbsps = false}</a>
+<a class="sourceLine" id="cb103-10" data-line-number="10">The TeXbook [@knuth:tex, p. 123 and 130] is good.</a>
+<a class="sourceLine" id="cb103-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb103-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb103-13" data-line-number="13"><span class="bu">\bibliographystyle</span>{<span class="ex">plain</span>}</a>
+<a class="sourceLine" id="cb103-14" data-line-number="14"><span class="bu">\bibliography</span>{<span class="ex">document.bib</span>}</a>
+<a class="sourceLine" id="cb103-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX and BibTeX from the terminal:</p>
+<div class="sourceCode" id="cb104"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb104-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a>
+<a class="sourceLine" id="cb104-2" data-line-number="2"><span class="ex">bibtex</span> document.aux</a>
+<a class="sourceLine" id="cb104-3" data-line-number="3"><span class="ex">lualatex</span> document.tex</a>
+<a class="sourceLine" id="cb104-4" data-line-number="4"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breakable space:</p>
+<blockquote>
+<p>The TeXbook [1, p.·123·and·130] is good.</p>
+<p>The TeXbook [1, p. 123 and 130] is good.</p>
+<h3 id="references">References</h3>
+<p>[1] Donald·Ervin Knuth. <em>The TeXbook, volume A of Computers and typesetting.</em> Addison-Wesley, 1984.</p>
+</blockquote>
+<h4 id="option-citations"><span class="header-section-number">2.2.1.7</span> Option <code>citations</code></h4>
+<dl>
+<dt><code>citations</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the pandoc citation syntax extension:</p>
+<div class="sourceCode" id="cb105"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb105-1" data-line-number="1">Here is a simple parenthetical citation [@doe99] and here</a>
+<a class="sourceLine" id="cb105-2" data-line-number="2">is a string of several [see @doe99, pp. 33-35; also</a>
+<a class="sourceLine" id="cb105-3" data-line-number="3">@smith04, chap. 1].</a>
+<a class="sourceLine" id="cb105-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb105-5" data-line-number="5">A parenthetical citation can have a [prenote @doe99] and</a>
+<a class="sourceLine" id="cb105-6" data-line-number="6">a [@smith04 postnote]. The name of the author can be</a>
+<a class="sourceLine" id="cb105-7" data-line-number="7">suppressed by inserting a dash before the name of an</a>
+<a class="sourceLine" id="cb105-8" data-line-number="8">author as follows [-@smith04].</a>
+<a class="sourceLine" id="cb105-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb105-10" data-line-number="10">Here is a simple text citation @doe99 and here is</a>
+<a class="sourceLine" id="cb105-11" data-line-number="11">a string of several @doe99 [pp. 33-35; also @smith04,</a>
+<a class="sourceLine" id="cb105-12" data-line-number="12">chap. 1]. Here is one with the name of the author</a>
+<a class="sourceLine" id="cb105-13" data-line-number="13">suppressed -@doe99.</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the pandoc citation syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-6" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.bib</code> with the following content:</p>
+<div class="sourceCode" id="cb106"><pre class="sourceCode bib"><code class="sourceCode bibtex"><a class="sourceLine" id="cb106-1" data-line-number="1"><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</a>
+<a class="sourceLine" id="cb106-2" data-line-number="2"> <span class="dt">author</span> = &quot;<span class="st">Knuth, Donald Ervin</span>&quot;,</a>
+<a class="sourceLine" id="cb106-3" data-line-number="3"> <span class="dt">title</span> = &quot;<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>&quot;,</a>
+<a class="sourceLine" id="cb106-4" data-line-number="4"> <span class="dt">publisher</span> = &quot;<span class="st">Addison-Wesley</span>&quot;,</a>
+<a class="sourceLine" id="cb106-5" data-line-number="5"> <span class="dt">year</span> = &quot;<span class="st">1984</span>&quot;</a>
+<a class="sourceLine" id="cb106-6" data-line-number="6">}</a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb107"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb107-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb107-2" data-line-number="2"><span class="bu">\usepackage</span>[backend=biber]{<span class="ex">biblatex</span>}</a>
+<a class="sourceLine" id="cb107-3" data-line-number="3"><span class="fu">\addbibresource</span>{document.bib}</a>
+<a class="sourceLine" id="cb107-4" data-line-number="4"><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb107-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb107-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb107-7" data-line-number="7"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb107-8" data-line-number="8">The TeXbook [@knuth:tex, p. 123 and 130] was written by @knuth:tex.</a>
+<a class="sourceLine" id="cb107-9" data-line-number="9"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb107-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb107-11" data-line-number="11"><span class="fu">\printbibliography</span></a>
+<a class="sourceLine" id="cb107-12" data-line-number="12"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX and Biber from the terminal:</p>
+<div class="sourceCode" id="cb108"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb108-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a>
+<a class="sourceLine" id="cb108-2" data-line-number="2"><span class="ex">biber</span> document.bcf</a>
+<a class="sourceLine" id="cb108-3" data-line-number="3"><span class="ex">lualatex</span> document.tex</a>
+<a class="sourceLine" id="cb108-4" data-line-number="4"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The TeXbook [1, p.·123 and 130] was written by Knuth [1].</p>
+<h3 id="references-1">References</h3>
+<p>[1] Donald Ervin Knuth. <em>The <span class="tex">T<sub>e</sub>X</span>book, volume A of Computers and typesetting.</em> Addison-Wesley, 1984.</p>
+</blockquote>
+<h4 id="option-codespans"><span class="header-section-number">2.2.1.8</span> Option <code>codeSpans</code></h4>
+<dl>
+<dt><code>codeSpans</code> (default value: <code>true</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the code span syntax:</p>
+<div class="sourceCode" id="cb109"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb109-1" data-line-number="1">Use the <span class="bn">`printf()`</span> function.</a>
+<a class="sourceLine" id="cb109-2" data-line-number="2">`<span class="bn">`There is a literal backtick (`</span>) here.``</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the code span syntax. This allows you to easily use the quotation mark ligatures in texts that do not contain code spans:</p>
+<pre><code>``This is a quote.&#39;&#39;</code></pre>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-5" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb111"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb111-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb111-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb111-3" data-line-number="3"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb111-4" data-line-number="4"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb111-5" data-line-number="5"> local convert = markdown.new()</a>
+<a class="sourceLine" id="cb111-6" data-line-number="6"> local input =</a>
+<a class="sourceLine" id="cb111-7" data-line-number="7"> &quot;``This is a code span.&#39;&#39; &quot; ..</a>
+<a class="sourceLine" id="cb111-8" data-line-number="8"> &quot;``This is no longer a code span.&#39;&#39;&quot;</a>
+<a class="sourceLine" id="cb111-9" data-line-number="9"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb111-10" data-line-number="10"><span class="fu">\par</span></a>
+<a class="sourceLine" id="cb111-11" data-line-number="11"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb111-12" data-line-number="12"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb111-13" data-line-number="13"> local convert = markdown.new({codeSpans = false})</a>
+<a class="sourceLine" id="cb111-14" data-line-number="14"> local input =</a>
+<a class="sourceLine" id="cb111-15" data-line-number="15"> &quot;``This is a quote.&#39;&#39; &quot; ..</a>
+<a class="sourceLine" id="cb111-16" data-line-number="16"> &quot;``This is another quote.&#39;&#39;&quot;</a>
+<a class="sourceLine" id="cb111-17" data-line-number="17"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb111-18" data-line-number="18"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb112"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb112-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p><code>This is a code span.''</code>This is no longer a code span.’’</p>
+<p>“This is a quote.†“This is another quote.â€</p>
+</blockquote>
+<h5 id="lua-cli-example-5" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb113"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb113-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb113-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb113-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb113-4" data-line-number="4"><span class="fu">\par</span></a>
+<a class="sourceLine" id="cb113-5" data-line-number="5"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb113-6" data-line-number="6"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb114"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb114-1" data-line-number="1">`<span class="bn">`Is this a code span?&#39;&#39; `</span>`Or a quote?&#39;&#39;</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb115"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb115-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ codeSpans=false -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb115-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb115-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>“Is this a code span?†“Or a quote?â€</p>
+<p><code>Is this a code span?''</code>Or a quote?’’</p>
+</blockquote>
+<h5 id="plain-tex-example-5" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb116"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb116-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb116-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb116-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb116-4" data-line-number="4">``This is a code span.&#39;&#39;</a>
+<a class="sourceLine" id="cb116-5" data-line-number="5">``This is no longer a code span.&#39;&#39;</a>
+<a class="sourceLine" id="cb116-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb116-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb116-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionCodeSpans{false}</a>
+<a class="sourceLine" id="cb116-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb116-10" data-line-number="10">``This is a quote.&#39;&#39;</a>
+<a class="sourceLine" id="cb116-11" data-line-number="11">``This is another quote.&#39;&#39;</a>
+<a class="sourceLine" id="cb116-12" data-line-number="12"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb116-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb116-14" data-line-number="14"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb117"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb117-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p><code>This is a code span.''</code>This is no longer a code span.’’</p>
+<p>“This is a quote.†“This is another quote.â€</p>
+</blockquote>
+<h5 id="latex-example-7" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb118"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb118-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb118-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb118-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb118-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb118-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb118-6" data-line-number="6">``This is a code span.&#39;&#39;</a>
+<a class="sourceLine" id="cb118-7" data-line-number="7">``This is no longer a code span.&#39;&#39;</a>
+<a class="sourceLine" id="cb118-8" data-line-number="8"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb118-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb118-10" data-line-number="10"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{codeSpans=false}</a>
+<a class="sourceLine" id="cb118-11" data-line-number="11">``This is a quote.&#39;&#39;</a>
+<a class="sourceLine" id="cb118-12" data-line-number="12">``This is another quote.&#39;&#39;</a>
+<a class="sourceLine" id="cb118-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb118-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb118-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb119"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb119-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p><code>This is a code span.''</code>This is no longer a code span.’’</p>
+<p>“This is a quote.†“This is another quote.â€</p>
+</blockquote>
+<h5 id="context-example-5" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb120"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb120-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb120-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb120-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb120-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb120-5" data-line-number="5">``This is a code span.&#39;&#39;</a>
+<a class="sourceLine" id="cb120-6" data-line-number="6">``This is no longer a code span.&#39;&#39;</a>
+<a class="sourceLine" id="cb120-7" data-line-number="7"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb120-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb120-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionCodeSpans{false}</a>
+<a class="sourceLine" id="cb120-10" data-line-number="10"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb120-11" data-line-number="11">``This is a quote.&#39;&#39;</a>
+<a class="sourceLine" id="cb120-12" data-line-number="12">``This is another quote.&#39;&#39;</a>
+<a class="sourceLine" id="cb120-13" data-line-number="13"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb120-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb120-15" data-line-number="15"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb121"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb121-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p><code>This is a code span.''</code>This is no longer a code span.’’</p>
+<p>“This is a quote.†“This is another quote.â€</p>
+</blockquote>
+<h4 id="option-contentblocks"><span class="header-section-number">2.2.1.9</span> Option <code>contentBlocks</code></h4>
+<dl>
+<dt><code>contentBlocks</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the iA Writer content blocks syntax extension:</p>
+<div class="sourceCode" id="cb122"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb122-1" data-line-number="1">http://example.com/minard.jpg (Napoleon&#39;s</a>
+<a class="sourceLine" id="cb122-2" data-line-number="2"> disastrous Russian campaign of 1812)</a>
+<a class="sourceLine" id="cb122-3" data-line-number="3">/Flowchart.png &quot;Engineering Flowchart&quot;</a>
+<a class="sourceLine" id="cb122-4" data-line-number="4">/Savings Account.csv &#39;Recent Transactions&#39;</a>
+<a class="sourceLine" id="cb122-5" data-line-number="5">/Example.swift</a>
+<a class="sourceLine" id="cb122-6" data-line-number="6">/Lorem Ipsum.txt</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the iA Writer content blocks syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-8" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>table.csv</code> with the following content:</p>
+<pre class="csv"><code>Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847</code></pre>
+<p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p>
+<div class="sourceCode" id="cb124"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb124-1" data-line-number="1"><span class="op">{</span></a>
+<a class="sourceLine" id="cb124-2" data-line-number="2"> <span class="st">&quot;tex&quot;</span><span class="op">:</span> <span class="st">&quot;LaTeX&quot;</span></a>
+<a class="sourceLine" id="cb124-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<p>Create also a text document named <code>code.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb125"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb125-1" data-line-number="1">This is an example code listing in <span class="fu">\LaTeX</span>.</a></code></pre></div>
+<p>Create also a text document named <code>part.md</code> with the following content:</p>
+<div class="sourceCode" id="cb126"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb126-1" data-line-number="1">This is a *transcluded markdown document*.</a></code></pre></div>
+<p>Create also a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb127"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb127-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb127-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</a>
+<a class="sourceLine" id="cb127-3" data-line-number="3"><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb127-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb127-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb127-6" data-line-number="6">/table.csv (An example table)</a>
+<a class="sourceLine" id="cb127-7" data-line-number="7">/code.tex (An example code listing)</a>
+<a class="sourceLine" id="cb127-8" data-line-number="8">/part.md (A file transclusion example)</a>
+<a class="sourceLine" id="cb127-9" data-line-number="9"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb127-10" data-line-number="10"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb128"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb128-1" data-line-number="1"><span class="ex">lualatex</span> --shell-escape document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<thead>
+<tr class="header">
+<th>Name</th>
+<th>Surname</th>
+<th>Born</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Albert</td>
+<td>Einstein</td>
+<td>1879</td>
+</tr>
+<tr class="even">
+<td>Marie</td>
+<td>Curie</td>
+<td>1867</td>
+</tr>
+<tr class="odd">
+<td>Thomas</td>
+<td>Edison</td>
+<td>1847</td>
+</tr>
+</tbody>
+</table>
+<p>Table 1: An example table</p>
+<div class="sourceCode" id="cb129"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb129-1" data-line-number="1">This is an example code listing in <span class="fu">\LaTeX</span>.</a></code></pre></div>
+<p>This is a <em>transcluded markdown document</em>.</p>
+</blockquote>
+<h5 id="context-example-6" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>table.csv</code> with the following content:</p>
+<pre class="csv"><code>Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847</code></pre>
+<p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p>
+<div class="sourceCode" id="cb131"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb131-1" data-line-number="1"><span class="op">{</span></a>
+<a class="sourceLine" id="cb131-2" data-line-number="2"> <span class="st">&quot;tex&quot;</span><span class="op">:</span> <span class="st">&quot;ConTeXt&quot;</span></a>
+<a class="sourceLine" id="cb131-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<p>Create also a text document named <code>code.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb132"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb132-1" data-line-number="1">This is an example code listing in <span class="fu">\ConTeXt</span>.</a></code></pre></div>
+<p>Create also a text document named <code>part.md</code> with the following content:</p>
+<div class="sourceCode" id="cb133"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb133-1" data-line-number="1">This is a *transcluded markdown document*.</a></code></pre></div>
+<p>Create also a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb134"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb134-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb134-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionContentBlocks{true}</a>
+<a class="sourceLine" id="cb134-3" data-line-number="3"><span class="fu">\definetyping</span> [ConTeXt]</a>
+<a class="sourceLine" id="cb134-4" data-line-number="4"><span class="fu">\setuptyping</span> [ConTeXt] [option=TEX]</a>
+<a class="sourceLine" id="cb134-5" data-line-number="5"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb134-6" data-line-number="6"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb134-7" data-line-number="7">/table.csv (An example table)</a>
+<a class="sourceLine" id="cb134-8" data-line-number="8">/code.tex (An example code listing)</a>
+<a class="sourceLine" id="cb134-9" data-line-number="9">/part.md (A file transclusion example)</a>
+<a class="sourceLine" id="cb134-10" data-line-number="10"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb134-11" data-line-number="11"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb135"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb135-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<thead>
+<tr class="header">
+<th>Name</th>
+<th>Surname</th>
+<th>Born</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Albert</td>
+<td>Einstein</td>
+<td>1879</td>
+</tr>
+<tr class="even">
+<td>Marie</td>
+<td>Curie</td>
+<td>1867</td>
+</tr>
+<tr class="odd">
+<td>Thomas</td>
+<td>Edison</td>
+<td>1847</td>
+</tr>
+</tbody>
+</table>
+<p>Table 1: An example table</p>
+<div class="sourceCode" id="cb136"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb136-1" data-line-number="1">This is an example code listing in <span class="fu">\ConTeXt</span>.</a></code></pre></div>
+<p>This is a <em>transcluded markdown document</em>.</p>
+</blockquote>
+<h4 id="option-contentblockslanguagemap"><span class="header-section-number">2.2.1.10</span> Option <code>contentBlocksLanguageMap</code></h4>
+<dl>
+<dt><code>contentBlocksLanguageMap</code> (default value: <code>&quot;markdown-languages.json&quot;</code>)</dt>
+<dd><p>The filename of the JSON file that maps filename extensions to programming language names in the iA Writer content blocks.</p>
+</dd>
+</dl>
+<h5 id="latex-example-9" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>table.csv</code> with the following content:</p>
+<pre class="csv"><code>Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847</code></pre>
+<p>Create also a text document named <code>language-map.json</code> with the following content:</p>
+<div class="sourceCode" id="cb138"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb138-1" data-line-number="1"><span class="op">{</span></a>
+<a class="sourceLine" id="cb138-2" data-line-number="2"> <span class="st">&quot;tex&quot;</span><span class="op">:</span> <span class="st">&quot;LaTeX&quot;</span></a>
+<a class="sourceLine" id="cb138-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<p>Create also a text document named <code>code.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb139"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb139-1" data-line-number="1">This is an example code listing in <span class="fu">\LaTeX</span>.</a></code></pre></div>
+<p>Create also a text document named <code>part.md</code> with the following content:</p>
+<div class="sourceCode" id="cb140"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb140-1" data-line-number="1">This is a *transcluded markdown document*.</a></code></pre></div>
+<p>Create also a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb141"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb141-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb141-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</a>
+<a class="sourceLine" id="cb141-3" data-line-number="3"><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb141-4" data-line-number="4"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb141-5" data-line-number="5"> contentBlocksLanguageMap = {language-map.json},</a>
+<a class="sourceLine" id="cb141-6" data-line-number="6">}</a>
+<a class="sourceLine" id="cb141-7" data-line-number="7"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb141-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb141-9" data-line-number="9">/table.csv (An example table)</a>
+<a class="sourceLine" id="cb141-10" data-line-number="10">/code.tex (An example code listing)</a>
+<a class="sourceLine" id="cb141-11" data-line-number="11">/part.md (A file transclusion example)</a>
+<a class="sourceLine" id="cb141-12" data-line-number="12"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb141-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb142"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb142-1" data-line-number="1"><span class="ex">lualatex</span> --shell-escape document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<thead>
+<tr class="header">
+<th>Name</th>
+<th>Surname</th>
+<th>Born</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Albert</td>
+<td>Einstein</td>
+<td>1879</td>
+</tr>
+<tr class="even">
+<td>Marie</td>
+<td>Curie</td>
+<td>1867</td>
+</tr>
+<tr class="odd">
+<td>Thomas</td>
+<td>Edison</td>
+<td>1847</td>
+</tr>
+</tbody>
+</table>
+<p>Table 1: An example table</p>
+<div class="sourceCode" id="cb143"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb143-1" data-line-number="1">This is an example code listing in <span class="fu">\LaTeX</span>.</a></code></pre></div>
+<p>This is a <em>transcluded markdown document</em>.</p>
+</blockquote>
+<h5 id="context-example-7" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>table.csv</code> with the following content:</p>
+<pre class="csv"><code>Name,Surname,Born
+Albert,Einstein,1879
+Marie,Curie,1867
+Thomas,Edison,1847</code></pre>
+<p>Create also a text document named <code>language-map.json</code> with the following content:</p>
+<div class="sourceCode" id="cb145"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb145-1" data-line-number="1"><span class="op">{</span></a>
+<a class="sourceLine" id="cb145-2" data-line-number="2"> <span class="st">&quot;tex&quot;</span><span class="op">:</span> <span class="st">&quot;ConTeXt&quot;</span></a>
+<a class="sourceLine" id="cb145-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<p>Create also a text document named <code>code.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb146"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb146-1" data-line-number="1">This is an example code listing in <span class="fu">\ConTeXt</span>.</a></code></pre></div>
+<p>Create also a text document named <code>part.md</code> with the following content:</p>
+<div class="sourceCode" id="cb147"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb147-1" data-line-number="1">This is a *transcluded markdown document*.</a></code></pre></div>
+<p>Create also a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb148"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb148-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb148-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionContentBlocks{true}</a>
+<a class="sourceLine" id="cb148-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionContentBlocksLanguageMap{language-map.json}</a>
+<a class="sourceLine" id="cb148-4" data-line-number="4"><span class="fu">\definetyping</span> [ConTeXt]</a>
+<a class="sourceLine" id="cb148-5" data-line-number="5"><span class="fu">\setuptyping</span> [ConTeXt] [option=TEX]</a>
+<a class="sourceLine" id="cb148-6" data-line-number="6"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb148-7" data-line-number="7"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb148-8" data-line-number="8">/table.csv (An example table)</a>
+<a class="sourceLine" id="cb148-9" data-line-number="9">/code.tex (An example code listing)</a>
+<a class="sourceLine" id="cb148-10" data-line-number="10">/part.md (A file transclusion example)</a>
+<a class="sourceLine" id="cb148-11" data-line-number="11"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb148-12" data-line-number="12"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb149"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb149-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<thead>
+<tr class="header">
+<th>Name</th>
+<th>Surname</th>
+<th>Born</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Albert</td>
+<td>Einstein</td>
+<td>1879</td>
+</tr>
+<tr class="even">
+<td>Marie</td>
+<td>Curie</td>
+<td>1867</td>
+</tr>
+<tr class="odd">
+<td>Thomas</td>
+<td>Edison</td>
+<td>1847</td>
+</tr>
+</tbody>
+</table>
+<p>Table 1: An example table</p>
+<div class="sourceCode" id="cb150"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb150-1" data-line-number="1">This is an example code listing in <span class="fu">\ConTeXt</span>.</a></code></pre></div>
+<p>This is a <em>transcluded markdown document</em>.</p>
+</blockquote>
+<h4 id="option-definitionlists"><span class="header-section-number">2.2.1.11</span> Option <code>definitionLists</code></h4>
+<dl>
+<dt><code>definitionLists</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the pandoc definition list syntax extension:</p>
+<div class="sourceCode" id="cb151"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb151-1" data-line-number="1">Term 1</a>
+<a class="sourceLine" id="cb151-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb151-3" data-line-number="3">: Definition 1</a>
+<a class="sourceLine" id="cb151-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb151-5" data-line-number="5">Term 2 with *inline markup*</a>
+<a class="sourceLine" id="cb151-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb151-7" data-line-number="7">: Definition 2</a>
+<a class="sourceLine" id="cb151-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb151-9" data-line-number="9"><span class="bn"> { some code, part of Definition 2 }</span></a>
+<a class="sourceLine" id="cb151-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb151-11" data-line-number="11"><span class="bn"> Third paragraph of definition 2.</span></a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the pandoc definition list syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-10" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb152"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb152-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb152-2" data-line-number="2"><span class="bu">\usepackage</span>[definitionLists]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb152-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb152-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb152-5" data-line-number="5">Term 1</a>
+<a class="sourceLine" id="cb152-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb152-7" data-line-number="7">: Definition 1</a>
+<a class="sourceLine" id="cb152-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb152-9" data-line-number="9">Term 2 with *inline markup*</a>
+<a class="sourceLine" id="cb152-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb152-11" data-line-number="11">: Definition 2</a>
+<a class="sourceLine" id="cb152-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb152-13" data-line-number="13"> { some code, part of Definition 2 }</a>
+<a class="sourceLine" id="cb152-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb152-15" data-line-number="15"> Third paragraph of definition 2.</a>
+<a class="sourceLine" id="cb152-16" data-line-number="16"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb152-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb153"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb153-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<dl>
+<dt>Term 1</dt>
+<dd><p>Definition 1</p>
+</dd>
+<dt>Term 2 with <em>inline markup</em></dt>
+<dd><p>Definition 2</p>
+<pre><code>{ some code, part of Definition 2 }</code></pre>
+<p>Third paragraph of definition 2.</p>
+</dd>
+</dl>
+</blockquote>
+<h5 id="context-example-8" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb155"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb155-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb155-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionDefinitionLists{true}</a>
+<a class="sourceLine" id="cb155-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb155-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb155-5" data-line-number="5">Term 1</a>
+<a class="sourceLine" id="cb155-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb155-7" data-line-number="7">: Definition 1</a>
+<a class="sourceLine" id="cb155-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb155-9" data-line-number="9">Term 2 with *inline markup*</a>
+<a class="sourceLine" id="cb155-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb155-11" data-line-number="11">: Definition 2</a>
+<a class="sourceLine" id="cb155-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb155-13" data-line-number="13"> { some code, part of Definition 2 }</a>
+<a class="sourceLine" id="cb155-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb155-15" data-line-number="15"> Third paragraph of definition 2.</a>
+<a class="sourceLine" id="cb155-16" data-line-number="16"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb155-17" data-line-number="17"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb156"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb156-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<dl>
+<dt>Term 1</dt>
+<dd><p>Definition 1</p>
+</dd>
+<dt>Term 2 with <em>inline markup</em></dt>
+<dd><p>Definition 2</p>
+<pre><code>{ some code, part of Definition 2 }</code></pre>
+<p>Third paragraph of definition 2.</p>
+</dd>
+</dl>
+</blockquote>
+<h4 id="option-fencedcode"><span class="header-section-number">2.2.1.12</span> Option <code>fencedCode</code></h4>
+<dl>
+<dt><code>fencedCode</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the commonmark fenced code block extension:</p>
+<div class="sourceCode" id="cb158"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb158-1" data-line-number="1">~~~ js</a>
+<a class="sourceLine" id="cb158-2" data-line-number="2">if (a &gt; 3) {</a>
+<a class="sourceLine" id="cb158-3" data-line-number="3"><span class="bn"> moveShip(5 * gravity, DOWN);</span></a>
+<a class="sourceLine" id="cb158-4" data-line-number="4">}</a>
+<a class="sourceLine" id="cb158-5" data-line-number="5">~~~~~~</a>
+<a class="sourceLine" id="cb158-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb158-7" data-line-number="7"> ``` html</a>
+<a class="sourceLine" id="cb158-8" data-line-number="8"> &lt;pre&gt;</a>
+<a class="sourceLine" id="cb158-9" data-line-number="9"><span class="bn"> &lt;code&gt;</span></a>
+<a class="sourceLine" id="cb158-10" data-line-number="10"><span class="bn"> // Some comments</span></a>
+<a class="sourceLine" id="cb158-11" data-line-number="11"><span class="bn"> line 1 of code</span></a>
+<a class="sourceLine" id="cb158-12" data-line-number="12"><span class="bn"> line 2 of code</span></a>
+<a class="sourceLine" id="cb158-13" data-line-number="13"><span class="bn"> line 3 of code</span></a>
+<a class="sourceLine" id="cb158-14" data-line-number="14"><span class="bn"> &lt;/code&gt;</span></a>
+<a class="sourceLine" id="cb158-15" data-line-number="15"> &lt;/pre&gt;</a>
+<a class="sourceLine" id="cb158-16" data-line-number="16"> ```</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the commonmark fenced code block extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-11" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb159"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb159-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb159-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</a>
+<a class="sourceLine" id="cb159-3" data-line-number="3"><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb159-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb159-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb159-6" data-line-number="6">~~~ js</a>
+<a class="sourceLine" id="cb159-7" data-line-number="7">if (a &gt; 3) {</a>
+<a class="sourceLine" id="cb159-8" data-line-number="8"> moveShip(5 * gravity, DOWN);</a>
+<a class="sourceLine" id="cb159-9" data-line-number="9">}</a>
+<a class="sourceLine" id="cb159-10" data-line-number="10">~~~~~~</a>
+<a class="sourceLine" id="cb159-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb159-12" data-line-number="12"> ``` html</a>
+<a class="sourceLine" id="cb159-13" data-line-number="13"> &lt;pre&gt;</a>
+<a class="sourceLine" id="cb159-14" data-line-number="14"> &lt;code&gt;</a>
+<a class="sourceLine" id="cb159-15" data-line-number="15"> // Some comments</a>
+<a class="sourceLine" id="cb159-16" data-line-number="16"> line 1 of code</a>
+<a class="sourceLine" id="cb159-17" data-line-number="17"> line 2 of code</a>
+<a class="sourceLine" id="cb159-18" data-line-number="18"> line 3 of code</a>
+<a class="sourceLine" id="cb159-19" data-line-number="19"> &lt;/code&gt;</a>
+<a class="sourceLine" id="cb159-20" data-line-number="20"> &lt;/pre&gt;</a>
+<a class="sourceLine" id="cb159-21" data-line-number="21"> ```</a>
+<a class="sourceLine" id="cb159-22" data-line-number="22"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb159-23" data-line-number="23"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb160"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb160-1" data-line-number="1"><span class="ex">lualatex</span> --shell-escape document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<div class="sourceCode" id="cb161"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb161-1" data-line-number="1"><span class="cf">if</span> (a <span class="op">&gt;</span> <span class="dv">3</span>) <span class="op">{</span></a>
+<a class="sourceLine" id="cb161-2" data-line-number="2"> <span class="at">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></a>
+<a class="sourceLine" id="cb161-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<div class="sourceCode" id="cb162"><pre class="sourceCode html"><code class="sourceCode html"><a class="sourceLine" id="cb162-1" data-line-number="1"><span class="kw">&lt;pre&gt;</span></a>
+<a class="sourceLine" id="cb162-2" data-line-number="2"> <span class="kw">&lt;code&gt;</span></a>
+<a class="sourceLine" id="cb162-3" data-line-number="3"> // Some comments</a>
+<a class="sourceLine" id="cb162-4" data-line-number="4"> line 1 of code</a>
+<a class="sourceLine" id="cb162-5" data-line-number="5"> line 2 of code</a>
+<a class="sourceLine" id="cb162-6" data-line-number="6"> line 3 of code</a>
+<a class="sourceLine" id="cb162-7" data-line-number="7"> <span class="kw">&lt;/code&gt;</span></a>
+<a class="sourceLine" id="cb162-8" data-line-number="8"><span class="kw">&lt;/pre&gt;</span></a></code></pre></div>
+</blockquote>
+<h5 id="context-example-9" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb163"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb163-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb163-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFencedCode{true}</a>
+<a class="sourceLine" id="cb163-3" data-line-number="3"><span class="fu">\definetyping</span> [js]</a>
+<a class="sourceLine" id="cb163-4" data-line-number="4"><span class="fu">\definetyping</span> [html]</a>
+<a class="sourceLine" id="cb163-5" data-line-number="5"><span class="fu">\setuptyping</span> [html] [option=XML]</a>
+<a class="sourceLine" id="cb163-6" data-line-number="6"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb163-7" data-line-number="7"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb163-8" data-line-number="8">~~~ js</a>
+<a class="sourceLine" id="cb163-9" data-line-number="9">if (a &gt; 3) {</a>
+<a class="sourceLine" id="cb163-10" data-line-number="10"> moveShip(5 * gravity, DOWN);</a>
+<a class="sourceLine" id="cb163-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb163-12" data-line-number="12">~~~~~~</a>
+<a class="sourceLine" id="cb163-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb163-14" data-line-number="14"> ``` html</a>
+<a class="sourceLine" id="cb163-15" data-line-number="15"> &lt;pre&gt;</a>
+<a class="sourceLine" id="cb163-16" data-line-number="16"> &lt;code&gt;</a>
+<a class="sourceLine" id="cb163-17" data-line-number="17"> // Some comments</a>
+<a class="sourceLine" id="cb163-18" data-line-number="18"> line 1 of code</a>
+<a class="sourceLine" id="cb163-19" data-line-number="19"> line 2 of code</a>
+<a class="sourceLine" id="cb163-20" data-line-number="20"> line 3 of code</a>
+<a class="sourceLine" id="cb163-21" data-line-number="21"> &lt;/code&gt;</a>
+<a class="sourceLine" id="cb163-22" data-line-number="22"> &lt;/pre&gt;</a>
+<a class="sourceLine" id="cb163-23" data-line-number="23"> ```</a>
+<a class="sourceLine" id="cb163-24" data-line-number="24"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb163-25" data-line-number="25"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb164"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb164-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<div class="sourceCode" id="cb165"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb165-1" data-line-number="1"><span class="cf">if</span> (a <span class="op">&gt;</span> <span class="dv">3</span>) <span class="op">{</span></a>
+<a class="sourceLine" id="cb165-2" data-line-number="2"> <span class="at">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></a>
+<a class="sourceLine" id="cb165-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<div class="sourceCode" id="cb166"><pre class="sourceCode html"><code class="sourceCode html"><a class="sourceLine" id="cb166-1" data-line-number="1"><span class="kw">&lt;pre&gt;</span></a>
+<a class="sourceLine" id="cb166-2" data-line-number="2"> <span class="kw">&lt;code&gt;</span></a>
+<a class="sourceLine" id="cb166-3" data-line-number="3"> // Some comments</a>
+<a class="sourceLine" id="cb166-4" data-line-number="4"> line 1 of code</a>
+<a class="sourceLine" id="cb166-5" data-line-number="5"> line 2 of code</a>
+<a class="sourceLine" id="cb166-6" data-line-number="6"> line 3 of code</a>
+<a class="sourceLine" id="cb166-7" data-line-number="7"> <span class="kw">&lt;/code&gt;</span></a>
+<a class="sourceLine" id="cb166-8" data-line-number="8"><span class="kw">&lt;/pre&gt;</span></a></code></pre></div>
+</blockquote>
+<h4 id="option-footnotes"><span class="header-section-number">2.2.1.13</span> Option <code>footnotes</code></h4>
+<dl>
+<dt><code>footnotes</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the pandoc footnote syntax extension:</p>
+<div class="sourceCode" id="cb167"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb167-1" data-line-number="1">Here is a footnote reference,<span class="ot">[^1]</span> and another.<span class="ot">[^longnote]</span></a>
+<a class="sourceLine" id="cb167-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb167-3" data-line-number="3"><span class="ot">[^1]</span>: Here is the footnote.</a>
+<a class="sourceLine" id="cb167-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb167-5" data-line-number="5"><span class="ot">[^longnote]</span>: Here&#39;s one with multiple blocks.</a>
+<a class="sourceLine" id="cb167-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb167-7" data-line-number="7"><span class="bn"> Subsequent paragraphs are indented to show that they</span></a>
+<a class="sourceLine" id="cb167-8" data-line-number="8">belong to the previous footnote.</a>
+<a class="sourceLine" id="cb167-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb167-10" data-line-number="10"><span class="bn"> { some.code }</span></a>
+<a class="sourceLine" id="cb167-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb167-12" data-line-number="12"><span class="bn"> The whole paragraph can be indented, or just the</span></a>
+<a class="sourceLine" id="cb167-13" data-line-number="13"><span class="bn"> first line. In this way, multi-paragraph footnotes</span></a>
+<a class="sourceLine" id="cb167-14" data-line-number="14"><span class="bn"> work like multi-paragraph list items.</span></a>
+<a class="sourceLine" id="cb167-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb167-16" data-line-number="16">This paragraph won&#39;t be part of the note, because it</a>
+<a class="sourceLine" id="cb167-17" data-line-number="17">isn&#39;t indented.</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the pandoc footnote syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-12" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb168"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb168-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb168-2" data-line-number="2"><span class="bu">\usepackage</span>[footnotes]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb168-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb168-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb168-5" data-line-number="5">Here is a footnote reference,[^1] and another.[^longnote]</a>
+<a class="sourceLine" id="cb168-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb168-7" data-line-number="7">[^1]: Here is the footnote.</a>
+<a class="sourceLine" id="cb168-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb168-9" data-line-number="9">[^longnote]: Here&#39;s one with multiple blocks.</a>
+<a class="sourceLine" id="cb168-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb168-11" data-line-number="11"> Subsequent paragraphs are indented to show that they</a>
+<a class="sourceLine" id="cb168-12" data-line-number="12">belong to the previous footnote.</a>
+<a class="sourceLine" id="cb168-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb168-14" data-line-number="14"> { some.code }</a>
+<a class="sourceLine" id="cb168-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb168-16" data-line-number="16"> The whole paragraph can be indented, or just the</a>
+<a class="sourceLine" id="cb168-17" data-line-number="17"> first line. In this way, multi-paragraph footnotes</a>
+<a class="sourceLine" id="cb168-18" data-line-number="18"> work like multi-paragraph list items.</a>
+<a class="sourceLine" id="cb168-19" data-line-number="19"></a>
+<a class="sourceLine" id="cb168-20" data-line-number="20">This paragraph won&#39;t be part of the note, because it</a>
+<a class="sourceLine" id="cb168-21" data-line-number="21">isn&#39;t indented.</a>
+<a class="sourceLine" id="cb168-22" data-line-number="22"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb168-23" data-line-number="23"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb169"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb169-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Here is a footnote reference,<a href="#fn1" class="footnote-ref" id="fnref1"><sup>1</sup></a> and another.<a href="#fn2" class="footnote-ref" id="fnref2"><sup>2</sup></a></p>
+<p>This paragraph won’t be part of the note, because it isn’t indented.</p>
+</blockquote>
+<h5 id="context-example-10" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb171"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb171-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb171-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFootnotes{true}</a>
+<a class="sourceLine" id="cb171-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb171-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb171-5" data-line-number="5">Here is a footnote reference,[^1] and another.[^longnote]</a>
+<a class="sourceLine" id="cb171-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb171-7" data-line-number="7">[^1]: Here is the footnote.</a>
+<a class="sourceLine" id="cb171-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb171-9" data-line-number="9">[^longnote]: Here&#39;s one with multiple blocks.</a>
+<a class="sourceLine" id="cb171-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb171-11" data-line-number="11"> Subsequent paragraphs are indented to show that they</a>
+<a class="sourceLine" id="cb171-12" data-line-number="12">belong to the previous footnote.</a>
+<a class="sourceLine" id="cb171-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb171-14" data-line-number="14"> { some.code }</a>
+<a class="sourceLine" id="cb171-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb171-16" data-line-number="16"> The whole paragraph can be indented, or just the</a>
+<a class="sourceLine" id="cb171-17" data-line-number="17"> first line. In this way, multi-paragraph footnotes</a>
+<a class="sourceLine" id="cb171-18" data-line-number="18"> work like multi-paragraph list items.</a>
+<a class="sourceLine" id="cb171-19" data-line-number="19"></a>
+<a class="sourceLine" id="cb171-20" data-line-number="20">This paragraph won&#39;t be part of the note, because it</a>
+<a class="sourceLine" id="cb171-21" data-line-number="21">isn&#39;t indented.</a>
+<a class="sourceLine" id="cb171-22" data-line-number="22"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb171-23" data-line-number="23"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb172"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb172-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Here is a footnote reference,<a href="#fn3" class="footnote-ref" id="fnref3"><sup>3</sup></a> and another.<a href="#fn4" class="footnote-ref" id="fnref4"><sup>4</sup></a></p>
+<p>This paragraph won’t be part of the note, because it isn’t indented.</p>
+</blockquote>
+<h4 id="option-hashenumerators"><span class="header-section-number">2.2.1.14</span> Option <code>hashEnumerators</code></h4>
+<dl>
+<dt><code>hashEnumerators</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the use of hash symbols (<code>#</code>) as ordered item list markers:</p>
+<div class="sourceCode" id="cb174"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb174-1" data-line-number="1">#. Bird</a>
+<a class="sourceLine" id="cb174-2" data-line-number="2">#. McHale</a>
+<a class="sourceLine" id="cb174-3" data-line-number="3">#. Parish</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the use of hash symbols (<code>#</code>) as ordered item list markers.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-13" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb175"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb175-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb175-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb175-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb175-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb175-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb175-6" data-line-number="6">. Bird</a>
+<a class="sourceLine" id="cb175-7" data-line-number="7">. McHale</a>
+<a class="sourceLine" id="cb175-8" data-line-number="8">. Parish</a>
+<a class="sourceLine" id="cb175-9" data-line-number="9"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb175-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb175-11" data-line-number="11"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hashEnumerators}</a>
+<a class="sourceLine" id="cb175-12" data-line-number="12">. Bird</a>
+<a class="sourceLine" id="cb175-13" data-line-number="13">. McHale</a>
+<a class="sourceLine" id="cb175-14" data-line-number="14">. Parish</a>
+<a class="sourceLine" id="cb175-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb175-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb175-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb176"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb176-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="bird">. Bird</h1>
+<h1 id="mchale">. McHale</h1>
+<h1 id="parish">. Parish</h1>
+<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</blockquote>
+<h5 id="context-example-11" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb177"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb177-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb177-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb177-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb177-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb177-5" data-line-number="5">. Bird</a>
+<a class="sourceLine" id="cb177-6" data-line-number="6">. McHale</a>
+<a class="sourceLine" id="cb177-7" data-line-number="7">. Parish</a>
+<a class="sourceLine" id="cb177-8" data-line-number="8"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb177-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb177-10" data-line-number="10"><span class="fu">\def</span>\markdownOptionHashEnumerators{true}</a>
+<a class="sourceLine" id="cb177-11" data-line-number="11"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb177-12" data-line-number="12">. Bird</a>
+<a class="sourceLine" id="cb177-13" data-line-number="13">. McHale</a>
+<a class="sourceLine" id="cb177-14" data-line-number="14">. Parish</a>
+<a class="sourceLine" id="cb177-15" data-line-number="15"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb177-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb177-17" data-line-number="17"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb178"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb178-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="bird-1">. Bird</h1>
+<h1 id="mchale-1">. McHale</h1>
+<h1 id="parish-1">. Parish</h1>
+<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+</blockquote>
+<h4 id="header-attributes"><span class="header-section-number">2.2.1.15</span> Option <code>headerAttributes</code></h4>
+<dl>
+<dt><code>headerAttributes</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the assignment of HTML attributes to headings:</p>
+<div class="sourceCode" id="cb179"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb179-1" data-line-number="1"><span class="fu"># My first heading {#foo}</span></a>
+<a class="sourceLine" id="cb179-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb179-3" data-line-number="3"><span class="fu">## My second heading ## {#bar .baz}</span></a>
+<a class="sourceLine" id="cb179-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb179-5" data-line-number="5">Yet another heading {key=value}</a>
+<a class="sourceLine" id="cb179-6" data-line-number="6">===================</a></code></pre></div>
+<p>These HTML attributes have currently no effect other than enabling <a href="#slice">content slicing</a>.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the assignment of HTML attributes to headings.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h4 id="option-html"><span class="header-section-number">2.2.1.16</span> Option <code>html</code></h4>
+<dl>
+<dt><code>html</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the recognition of HTML tags, block elements, comments, HTML instructions, and entities in the input. Tags, block elements (along with contents), HTML instructions, and comments will be ignored and HTML entities will be replaced with the corresponding Unicode codepoints.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the recognition of HTML markup. Any HTML markup in the input will be rendered as plain text.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-6" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb180"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb180-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb180-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb180-3" data-line-number="3"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb180-4" data-line-number="4"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb180-5" data-line-number="5"> local convert = markdown.new()</a>
+<a class="sourceLine" id="cb180-6" data-line-number="6"> local newline = [[^^J^^J]]</a>
+<a class="sourceLine" id="cb180-7" data-line-number="7"> local input =</a>
+<a class="sourceLine" id="cb180-8" data-line-number="8"> &quot;&lt;div&gt;*There is no block tag support.*&lt;/div&gt;&quot; .. newline ..</a>
+<a class="sourceLine" id="cb180-9" data-line-number="9"> &quot;*There is no &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*&quot; .. newline ..</a>
+<a class="sourceLine" id="cb180-10" data-line-number="10"> &quot;_There is no &lt;!-- comment --&gt; support._&quot; .. newline ..</a>
+<a class="sourceLine" id="cb180-11" data-line-number="11"> &quot;_There is no &lt;? HTML instruction ?&gt; support._&quot;</a>
+<a class="sourceLine" id="cb180-12" data-line-number="12"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb180-13" data-line-number="13"><span class="fu">\par</span></a>
+<a class="sourceLine" id="cb180-14" data-line-number="14"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb180-15" data-line-number="15"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb180-16" data-line-number="16"> local convert = markdown.new({html = true})</a>
+<a class="sourceLine" id="cb180-17" data-line-number="17"> local input =</a>
+<a class="sourceLine" id="cb180-18" data-line-number="18"> &quot;&lt;div&gt;*There is block tag support.*&lt;/div&gt;&quot; .. newline ..</a>
+<a class="sourceLine" id="cb180-19" data-line-number="19"> &quot;*There is &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*&quot; .. newline ..</a>
+<a class="sourceLine" id="cb180-20" data-line-number="20"> &quot;_There is &lt;!-- comment --&gt; support._&quot; .. newline ..</a>
+<a class="sourceLine" id="cb180-21" data-line-number="21"> &quot;_There is &lt;? HTML instruction ?&gt; support._&quot;</a>
+<a class="sourceLine" id="cb180-22" data-line-number="22"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb180-23" data-line-number="23"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb181"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb181-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>&lt;div&gt;There is no block tag support.&lt;/div&gt; There is no &lt;inline tag=â€tagâ€&gt;&lt;/inline&gt; support. There is no &lt;!– comment –&gt; support. There is no &lt;? HTML instruction ?&gt; support.</p>
+<p>There is support. There is support. There is support.</p>
+</blockquote>
+<h5 id="lua-cli-example-6" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb182"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb182-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb182-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb182-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb182-4" data-line-number="4"><span class="fu">\par</span></a>
+<a class="sourceLine" id="cb182-5" data-line-number="5"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb182-6" data-line-number="6"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb183"><pre class="sourceCode html"><code class="sourceCode html"><a class="sourceLine" id="cb183-1" data-line-number="1"><span class="kw">&lt;div&gt;</span></a>
+<a class="sourceLine" id="cb183-2" data-line-number="2">*Is there block tag support?*</a>
+<a class="sourceLine" id="cb183-3" data-line-number="3"><span class="kw">&lt;/div&gt;</span></a>
+<a class="sourceLine" id="cb183-4" data-line-number="4">*Is there <span class="kw">&lt;inline</span><span class="ot"> tag=</span><span class="st">&quot;tag&quot;</span><span class="kw">&gt;&lt;/inline&gt;</span> support?*</a>
+<a class="sourceLine" id="cb183-5" data-line-number="5">_Is there <span class="co">&lt;!-- comment --&gt;</span> support?_</a>
+<a class="sourceLine" id="cb183-6" data-line-number="6">_Is there <span class="kw">&lt;?</span> HTML instruction <span class="kw">?&gt;</span> support?_</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb184"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb184-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb184-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ html=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb184-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>&lt;div&gt;Is there block tag support?&lt;/div&gt; Is there &lt;inline tag=â€tagâ€&gt;&lt;/inline&gt; support? Is there &lt;!– comment –&gt; support? Is there &lt;? HTML instruction ?&gt; support?</p>
+<p>Is there support? Is there support? Is there support?</p>
+</blockquote>
+<h5 id="plain-tex-example-6" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb185"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb185-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb185-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb185-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb185-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb185-5" data-line-number="5">&lt;div&gt;</a>
+<a class="sourceLine" id="cb185-6" data-line-number="6">*There is no block tag support.*</a>
+<a class="sourceLine" id="cb185-7" data-line-number="7">&lt;/div&gt;</a>
+<a class="sourceLine" id="cb185-8" data-line-number="8">*There is no &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*</a>
+<a class="sourceLine" id="cb185-9" data-line-number="9">_There is no &lt;!-- comment --&gt; support._</a>
+<a class="sourceLine" id="cb185-10" data-line-number="10">_There is no &lt;? HTML instruction ?&gt; support._</a>
+<a class="sourceLine" id="cb185-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb185-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb185-13" data-line-number="13"><span class="fu">\def</span>\markdownOptionHtml{true}</a>
+<a class="sourceLine" id="cb185-14" data-line-number="14"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb185-15" data-line-number="15">&lt;div&gt;</a>
+<a class="sourceLine" id="cb185-16" data-line-number="16">*There is block tag support.*</a>
+<a class="sourceLine" id="cb185-17" data-line-number="17">&lt;/div&gt;</a>
+<a class="sourceLine" id="cb185-18" data-line-number="18">*There is &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*</a>
+<a class="sourceLine" id="cb185-19" data-line-number="19">_There is &lt;!-- comment --&gt; support._</a>
+<a class="sourceLine" id="cb185-20" data-line-number="20">_There is &lt;? HTML instruction ?&gt; support._</a>
+<a class="sourceLine" id="cb185-21" data-line-number="21"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb185-22" data-line-number="22"></a>
+<a class="sourceLine" id="cb185-23" data-line-number="23"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb186"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb186-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>&lt;div&gt;There is no block tag support.&lt;/div&gt; There is no &lt;inline tag=â€tagâ€&gt;&lt;/inline&gt; support. There is no &lt;!– comment –&gt; support. There is no &lt;? HTML instruction ?&gt; support.</p>
+<p>There is support. There is support. There is support.</p>
+</blockquote>
+<h5 id="latex-example-14" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb187"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb187-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb187-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb187-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb187-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb187-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb187-6" data-line-number="6">&lt;div&gt;</a>
+<a class="sourceLine" id="cb187-7" data-line-number="7">*There is no block tag support.*</a>
+<a class="sourceLine" id="cb187-8" data-line-number="8">&lt;/div&gt;</a>
+<a class="sourceLine" id="cb187-9" data-line-number="9">*There is no &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*</a>
+<a class="sourceLine" id="cb187-10" data-line-number="10">_There is no &lt;!-- comment --&gt; support._</a>
+<a class="sourceLine" id="cb187-11" data-line-number="11">_There is no &lt;? HTML instruction ?&gt; support._</a>
+<a class="sourceLine" id="cb187-12" data-line-number="12"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb187-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb187-14" data-line-number="14"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{html}</a>
+<a class="sourceLine" id="cb187-15" data-line-number="15">&lt;div&gt;</a>
+<a class="sourceLine" id="cb187-16" data-line-number="16">*There is block tag support.*</a>
+<a class="sourceLine" id="cb187-17" data-line-number="17">&lt;/div&gt;</a>
+<a class="sourceLine" id="cb187-18" data-line-number="18">*There is &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*</a>
+<a class="sourceLine" id="cb187-19" data-line-number="19">_There is &lt;!-- comment --&gt; support._</a>
+<a class="sourceLine" id="cb187-20" data-line-number="20">_There is &lt;? HTML instruction ?&gt; support._</a>
+<a class="sourceLine" id="cb187-21" data-line-number="21"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb187-22" data-line-number="22"></a>
+<a class="sourceLine" id="cb187-23" data-line-number="23"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb188"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb188-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>&lt;div&gt;There is no block tag support.&lt;/div&gt; There is no &lt;inline tag=â€tagâ€&gt;&lt;/inline&gt; support. There is no &lt;!– comment –&gt; support. There is no &lt;? HTML instruction ?&gt; support.</p>
+<p>There is support. There is support. There is support.</p>
+</blockquote>
+<h5 id="context-example-12" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb189"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb189-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb189-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb189-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb189-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb189-5" data-line-number="5">&lt;div&gt;</a>
+<a class="sourceLine" id="cb189-6" data-line-number="6">*There is no block tag support.*</a>
+<a class="sourceLine" id="cb189-7" data-line-number="7">&lt;/div&gt;</a>
+<a class="sourceLine" id="cb189-8" data-line-number="8">*There is no &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*</a>
+<a class="sourceLine" id="cb189-9" data-line-number="9">_There is no &lt;!-- comment --&gt; support._</a>
+<a class="sourceLine" id="cb189-10" data-line-number="10">_There is no &lt;? HTML instruction ?&gt; support._</a>
+<a class="sourceLine" id="cb189-11" data-line-number="11"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb189-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb189-13" data-line-number="13"><span class="fu">\def</span>\markdownOptionHtml{true}</a>
+<a class="sourceLine" id="cb189-14" data-line-number="14"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb189-15" data-line-number="15">&lt;div&gt;</a>
+<a class="sourceLine" id="cb189-16" data-line-number="16">*There is block tag support.*</a>
+<a class="sourceLine" id="cb189-17" data-line-number="17">&lt;/div&gt;</a>
+<a class="sourceLine" id="cb189-18" data-line-number="18">*There is &lt;inline tag=&quot;tag&quot;&gt;&lt;/inline&gt; support.*</a>
+<a class="sourceLine" id="cb189-19" data-line-number="19">_There is &lt;!-- comment --&gt; support._</a>
+<a class="sourceLine" id="cb189-20" data-line-number="20">_There is &lt;? HTML instruction ?&gt; support._</a>
+<a class="sourceLine" id="cb189-21" data-line-number="21"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb189-22" data-line-number="22"></a>
+<a class="sourceLine" id="cb189-23" data-line-number="23"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb190"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb190-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>&lt;div&gt;There is no block tag support.&lt;/div&gt; There is no &lt;inline tag=â€tagâ€&gt;&lt;/inline&gt; support. There is no &lt;!– comment –&gt; support. There is no &lt;? HTML instruction ?&gt; support.</p>
+<p>There is support. There is support. There is support.</p>
+</blockquote>
+<h4 id="option-hybrid"><span class="header-section-number">2.2.1.17</span> Option <code>hybrid</code></h4>
+<dl>
+<dt><code>hybrid</code> (default value: <code>true</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Disable the escaping of special plain <span class="tex">T<sub>e</sub>X</span> characters, which makes it possible to intersperse your markdown markup with <span class="tex">T<sub>e</sub>X</span> code. The intended usage is in documents prepared manually by a human author. In such documents, it can often be desirable to mix <span class="tex">T<sub>e</sub>X</span> and markdown markup freely.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Enable the escaping of special plain <span class="tex">T<sub>e</sub>X</span> characters outside verbatim environments, so that they are not interpretted by <span class="tex">T<sub>e</sub>X</span>. This is encouraged when typesetting automatically generated content or markdown documents that were not prepared with this package in mind.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-7" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb191"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb191-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb191-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb191-3" data-line-number="3"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb191-4" data-line-number="4"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb191-5" data-line-number="5"> local input, convert_safe, convert_unsafe, paragraph</a>
+<a class="sourceLine" id="cb191-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb191-7" data-line-number="7"> input = [[<span class="ss">$</span><span class="sc">\string\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.]]</a>
+<a class="sourceLine" id="cb191-8" data-line-number="8"> convert_safe = markdown.new()</a>
+<a class="sourceLine" id="cb191-9" data-line-number="9"> convert_unsafe = markdown.new({hybrid = true})</a>
+<a class="sourceLine" id="cb191-10" data-line-number="10"> paragraph = [[<span class="fu">\par</span>]]</a>
+<a class="sourceLine" id="cb191-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb191-12" data-line-number="12"> tex.sprint(</a>
+<a class="sourceLine" id="cb191-13" data-line-number="13"> convert_safe(input) .. paragraph ..</a>
+<a class="sourceLine" id="cb191-14" data-line-number="14"> convert_unsafe(input)</a>
+<a class="sourceLine" id="cb191-15" data-line-number="15"> )</a>
+<a class="sourceLine" id="cb191-16" data-line-number="16">}</a>
+<a class="sourceLine" id="cb191-17" data-line-number="17"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb192"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb192-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt {-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h5 id="lua-cli-example-7" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb193"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb193-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb193-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb193-3" data-line-number="3"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb193-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb193-5" data-line-number="5"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb193-6" data-line-number="6"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb194"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb194-1" data-line-number="1">$\sqrt{-1}$ *equals* $i$.</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb195"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb195-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb195-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb195-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt {-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h5 id="plain-tex-example-7" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb196"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb196-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb196-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb196-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb196-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb196-5" data-line-number="5"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb196-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb196-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb196-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb196-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb196-10" data-line-number="10"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb196-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb196-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb196-13" data-line-number="13"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb197"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb197-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt {-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h5 id="latex-example-15" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb198"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb198-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb198-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb198-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb198-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb198-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb198-6" data-line-number="6"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb198-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb198-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb198-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hybrid}</a>
+<a class="sourceLine" id="cb198-10" data-line-number="10"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb198-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb198-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb198-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb199"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb199-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt {-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h5 id="context-example-13" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb200"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb200-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb200-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb200-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb200-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb200-5" data-line-number="5"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb200-6" data-line-number="6"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb200-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb200-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb200-9" data-line-number="9"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb200-10" data-line-number="10"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</a>
+<a class="sourceLine" id="cb200-11" data-line-number="11"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb200-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb200-13" data-line-number="13"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb201"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb201-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt {-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h4 id="option-inlinefootnotes"><span class="header-section-number">2.2.1.18</span> Option <code>inlineFootnotes</code></h4>
+<dl>
+<dt><code>inlineFootnotes</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the pandoc inline footnote syntax extension:</p>
+<div class="sourceCode" id="cb202"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb202-1" data-line-number="1">Here is an inline note.^[Inlines notes are easier to</a>
+<a class="sourceLine" id="cb202-2" data-line-number="2">write, since you don&#39;t have to pick an identifier and</a>
+<a class="sourceLine" id="cb202-3" data-line-number="3">move down to type the note.]</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the pandoc inline footnote syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-16" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb203"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb203-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb203-2" data-line-number="2"><span class="bu">\usepackage</span>[footnotes, inlineFootnotes]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb203-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb203-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb203-5" data-line-number="5">Here is an inline note.^[Inlines notes are easier to</a>
+<a class="sourceLine" id="cb203-6" data-line-number="6">write, since you don&#39;t have to pick an identifier and</a>
+<a class="sourceLine" id="cb203-7" data-line-number="7">move down to type the note.]</a>
+<a class="sourceLine" id="cb203-8" data-line-number="8"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb203-9" data-line-number="9"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb204"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb204-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Here is an inline note.<a href="#fn5" class="footnote-ref" id="fnref5"><sup>5</sup></a></p>
+</blockquote>
+<h5 id="context-example-14" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb205"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb205-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb205-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFootnotes{true}</a>
+<a class="sourceLine" id="cb205-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionInlineFootnotes{true}</a>
+<a class="sourceLine" id="cb205-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb205-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb205-6" data-line-number="6">Here is an inline note.^[Inlines notes are easier to</a>
+<a class="sourceLine" id="cb205-7" data-line-number="7">write, since you don&#39;t have to pick an identifier and</a>
+<a class="sourceLine" id="cb205-8" data-line-number="8">move down to type the note.]</a>
+<a class="sourceLine" id="cb205-9" data-line-number="9"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb205-10" data-line-number="10"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb206"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb206-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Here is an inline note.<a href="#fn6" class="footnote-ref" id="fnref6"><sup>6</sup></a></p>
+</blockquote>
+<h4 id="pipe-tables"><span class="header-section-number">2.2.1.19</span> Option <code>pipeTables</code></h4>
+<dl>
+<dt><code>pipeTables</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the <abbr>PHP</abbr> Markdown table syntax extension:</p>
+<div class="sourceCode" id="cb207"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb207-1" data-line-number="1">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb207-2" data-line-number="2">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb207-3" data-line-number="3">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb207-4" data-line-number="4">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb207-5" data-line-number="5">| 1 | 1 | 1 | 1 |</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Disable the <abbr>PHP</abbr> Markdown table syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-17" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb208"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb208-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb208-2" data-line-number="2"><span class="bu">\usepackage</span>[pipeTables]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb208-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb208-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb208-5" data-line-number="5">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb208-6" data-line-number="6">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb208-7" data-line-number="7">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb208-8" data-line-number="8">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb208-9" data-line-number="9">| 1 | 1 | 1 | 1 |</a>
+<a class="sourceLine" id="cb208-10" data-line-number="10"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb208-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb209"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb209-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<thead>
+<tr class="header">
+<th style="text-align: right;">Right</th>
+<th style="text-align: left;">Left</th>
+<th>Default</th>
+<th style="text-align: center;">Center</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: right;">12</td>
+<td style="text-align: left;">12</td>
+<td>12</td>
+<td style="text-align: center;">12</td>
+</tr>
+<tr class="even">
+<td style="text-align: right;">123</td>
+<td style="text-align: left;">123</td>
+<td>123</td>
+<td style="text-align: center;">123</td>
+</tr>
+<tr class="odd">
+<td style="text-align: right;">1</td>
+<td style="text-align: left;">1</td>
+<td>1</td>
+<td style="text-align: center;">1</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<h5 id="context-example-15" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb210"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb210-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb210-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionPipeTables{true}</a>
+<a class="sourceLine" id="cb210-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb210-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb210-5" data-line-number="5">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb210-6" data-line-number="6">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb210-7" data-line-number="7">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb210-8" data-line-number="8">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb210-9" data-line-number="9">| 1 | 1 | 1 | 1 |</a>
+<a class="sourceLine" id="cb210-10" data-line-number="10"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb210-11" data-line-number="11"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb211"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb211-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<thead>
+<tr class="header">
+<th style="text-align: right;">Right</th>
+<th style="text-align: left;">Left</th>
+<th>Default</th>
+<th style="text-align: center;">Center</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: right;">12</td>
+<td style="text-align: left;">12</td>
+<td>12</td>
+<td style="text-align: center;">12</td>
+</tr>
+<tr class="even">
+<td style="text-align: right;">123</td>
+<td style="text-align: left;">123</td>
+<td>123</td>
+<td style="text-align: center;">123</td>
+</tr>
+<tr class="odd">
+<td style="text-align: right;">1</td>
+<td style="text-align: left;">1</td>
+<td>1</td>
+<td style="text-align: center;">1</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<h4 id="option-preservetabs"><span class="header-section-number">2.2.1.20</span> Option <code>preserveTabs</code></h4>
+<dl>
+<dt><code>preserveTabs</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Preserve tabs in code block and fenced code blocks.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Convert any tabs in the input to spaces.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h4 id="option-shiftheadings"><span class="header-section-number">2.2.1.21</span> Option <code>shiftHeadings</code></h4>
+<dl>
+<dt><code>shiftHeadings</code> (default value: <code>0</code>)</dt>
+<dd><p>All headings will be shifted by ⟨<em>shift amount</em>⟩, which can be both positive and negative. Headings will not be shifted beyond level 6 or below level 1. Instead, those headings will be shifted to level 6, when ⟨<em>shift amount</em>⟩ is positive, and to level 1, when ⟨<em>shift amount</em>⟩ is negative.</p>
+</dd>
+</dl>
+<h5 id="plain-tex-example-8" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>example.md</code> with the following content:</p>
+<div class="sourceCode" id="cb212"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb212-1" data-line-number="1"><span class="fu">## A section</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb213"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb213-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb213-2" data-line-number="2"></a>
+<a class="sourceLine" id="cb213-3" data-line-number="3"><span class="fu">\font\normal</span>=cmr10<span class="fu">\normal</span></a>
+<a class="sourceLine" id="cb213-4" data-line-number="4"><span class="fu">\font\big</span>=cmr10 at 12pt</a>
+<a class="sourceLine" id="cb213-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererHeadingTwo#1{{\big #1\par}}</a>
+<a class="sourceLine" id="cb213-6" data-line-number="6"><span class="fu">\font\bigger</span>=cmr10 scaled 1440</a>
+<a class="sourceLine" id="cb213-7" data-line-number="7"><span class="fu">\def</span>\markdownRendererHeadingOne#1{{\bigger #1\par}}</a>
+<a class="sourceLine" id="cb213-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb213-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionShiftHeadings{-1}</a>
+<a class="sourceLine" id="cb213-10" data-line-number="10"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb213-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb213-12" data-line-number="12"><span class="fu">\def</span>\markdownOptionShiftHeadings{0}</a>
+<a class="sourceLine" id="cb213-13" data-line-number="13"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb213-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb213-15" data-line-number="15"><span class="fu">\def</span>\markdownOptionShiftHeadings{+1}</a>
+<a class="sourceLine" id="cb213-16" data-line-number="16"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb213-17" data-line-number="17"></a>
+<a class="sourceLine" id="cb213-18" data-line-number="18"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb214"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb214-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="a-section">A section</h1>
+<h2 id="a-section-1">A section</h2>
+<h3 id="a-section-2">A section</h3>
+</blockquote>
+<h5 id="latex-example-18" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb215"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb215-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb215-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb215-3" data-line-number="3"><span class="bu">\usepackage</span>{<span class="ex">filecontents</span>}</a>
+<a class="sourceLine" id="cb215-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">filecontents*</span>}{example.md}</a>
+<a class="sourceLine" id="cb215-5" data-line-number="5">## A section</a>
+<a class="sourceLine" id="cb215-6" data-line-number="6"><span class="kw">\end</span>{<span class="ex">filecontents*</span>}</a>
+<a class="sourceLine" id="cb215-7" data-line-number="7"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb215-8" data-line-number="8"><span class="fu">\markdownInput</span>[shiftHeadings=-1]{example.md}</a>
+<a class="sourceLine" id="cb215-9" data-line-number="9"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb215-10" data-line-number="10"><span class="fu">\markdownInput</span>[shiftHeadings=+1]{example.md}</a>
+<a class="sourceLine" id="cb215-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb216"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb216-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="a-section-3">A section</h1>
+<h2 id="a-section-4">A section</h2>
+<h3 id="a-section-5">A section</h3>
+</blockquote>
+<h5 id="context-example-16" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>example.md</code> with the following content:</p>
+<div class="sourceCode" id="cb217"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb217-1" data-line-number="1"><span class="fu">## A section</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb218"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb218-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb218-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb218-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb218-4" data-line-number="4"><span class="fu">\def</span>\markdownOptionShiftHeadings{-1}</a>
+<a class="sourceLine" id="cb218-5" data-line-number="5"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb218-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb218-7" data-line-number="7"><span class="fu">\def</span>\markdownOptionShiftHeadings{0}</a>
+<a class="sourceLine" id="cb218-8" data-line-number="8"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb218-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb218-10" data-line-number="10"><span class="fu">\def</span>\markdownOptionShiftHeadings{+1}</a>
+<a class="sourceLine" id="cb218-11" data-line-number="11"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb218-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb218-13" data-line-number="13"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb219"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb219-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="a-section-6">A section</h1>
+<h2 id="a-section-7">A section</h2>
+<h3 id="a-section-8">A section</h3>
+</blockquote>
+<h4 id="slice"><span class="header-section-number">2.2.1.22</span> Option <code>slice</code></h4>
+<dl>
+<dt><code>slice</code> (default value: <code>^ $</code>)</dt>
+<dd><p>Two space-separated selectors that specify the slice of a document that will be processed, whereas the remainder of the document will be ignored. The following selectors are recognized:</p>
+<ul>
+<li>The circumflex (<code>^</code>) selects the beginning of a document.</li>
+<li>The dollar sign (<code>$</code>) selects the end of a document.</li>
+<li><code>^</code>⟨<em>identifier</em>⟩ selects the beginning of a section with the <a href="#header-attributes"><abbr>HTML</abbr> attribute</a> <code>#</code>⟨<em>identifier</em>⟩.</li>
+<li><code>$</code>⟨<em>identifier</em>⟩ selects the end of a section with the <abbr>HTML</abbr> attribute <code>#</code>⟨<em>identifier</em>⟩.</li>
+<li>⟨<em>identifier</em>⟩ corresponds to <code>^</code>⟨<em>identifier</em>⟩ for the first selector and to <code>$</code>⟨<em>identifier</em>⟩ for the second selector.</li>
+</ul>
+<p>Specifying only a single selector, ⟨<em>identifier</em>⟩, is equivalent to specifying the two selectors ⟨<em>identifier</em>⟩ ⟨<em>identifier</em>⟩, which is equivalent to <code>^</code>⟨<em>identifier</em>⟩ <code>$</code>⟨<em>identifier</em>⟩, i.e. the entire section with the <abbr>HTML</abbr> attribute <code>#</code>⟨<em>identifier</em>⟩ will be selected.</p>
+</dd>
+</dl>
+<h5 id="plain-tex-example-9" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>hamlet.md</code> with the following content:</p>
+<div class="sourceCode" id="cb220"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb220-1" data-line-number="1"><span class="fu"># The Tragedy of Hamlet</span></a>
+<a class="sourceLine" id="cb220-2" data-line-number="2">Shakespeare&#39;s longest play.</a>
+<a class="sourceLine" id="cb220-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb220-4" data-line-number="4"><span class="fu">## Act III {#act-3}</span></a>
+<a class="sourceLine" id="cb220-5" data-line-number="5">Hamlet kills Polonius.</a>
+<a class="sourceLine" id="cb220-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb220-7" data-line-number="7"><span class="fu">## Act V {#act-5}</span></a>
+<a class="sourceLine" id="cb220-8" data-line-number="8">Hamlet dies.</a>
+<a class="sourceLine" id="cb220-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb220-10" data-line-number="10"><span class="fu">## Act I {#act-1}</span></a>
+<a class="sourceLine" id="cb220-11" data-line-number="11">Hamlet talks to ghost.</a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb221"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb221-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb221-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionHeaderAttributes{true}</a>
+<a class="sourceLine" id="cb221-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb221-4" data-line-number="4"><span class="fu">\font\normal</span>=cmr10<span class="fu">\normal</span></a>
+<a class="sourceLine" id="cb221-5" data-line-number="5"><span class="fu">\font\big</span>=cmr10 at 12pt</a>
+<a class="sourceLine" id="cb221-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererHeadingTwo#1{{\big #1\par}}</a>
+<a class="sourceLine" id="cb221-7" data-line-number="7"><span class="fu">\font\bigger</span>=cmr10 scaled 1440</a>
+<a class="sourceLine" id="cb221-8" data-line-number="8"><span class="fu">\def</span>\markdownRendererHeadingOne#1{{\bigger #1\par}}</a>
+<a class="sourceLine" id="cb221-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb221-10" data-line-number="10"><span class="fu">\def</span>\markdownOptionSlice{^ ^act-3}</a>
+<a class="sourceLine" id="cb221-11" data-line-number="11"><span class="fu">\markdownInput</span>{hamlet.md}</a>
+<a class="sourceLine" id="cb221-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb221-13" data-line-number="13"><span class="fu">\def</span>\markdownOptionSlice{act-1}</a>
+<a class="sourceLine" id="cb221-14" data-line-number="14"><span class="fu">\markdownInput</span>{hamlet.md}</a>
+<a class="sourceLine" id="cb221-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb221-16" data-line-number="16"><span class="fu">\def</span>\markdownOptionSlice{act-3 act-5}</a>
+<a class="sourceLine" id="cb221-17" data-line-number="17"><span class="fu">\markdownInput</span>{hamlet.md}</a>
+<a class="sourceLine" id="cb221-18" data-line-number="18"></a>
+<a class="sourceLine" id="cb221-19" data-line-number="19"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb222"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb222-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="the-tragedy-of-hamlet">The Tragedy of Hamlet</h1>
+<p>Shakespeare’s longest play.</p>
+<h2 id="act-i">Act I</h2>
+<p>Hamlet talks to ghost.</p>
+<h2 id="act-iii">Act III</h2>
+<p>Hamlet kills Polonius.</p>
+<h2 id="act-v">Act V</h2>
+<p>Hamlet dies.</p>
+</blockquote>
+<h5 id="latex-example-19" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb223"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb223-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb223-2" data-line-number="2"><span class="bu">\usepackage</span>[headerAttributes]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb223-3" data-line-number="3"><span class="bu">\usepackage</span>{<span class="ex">filecontents</span>}</a>
+<a class="sourceLine" id="cb223-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">filecontents*</span>}{hamlet.md}</a>
+<a class="sourceLine" id="cb223-5" data-line-number="5"># The Tragedy of Hamlet</a>
+<a class="sourceLine" id="cb223-6" data-line-number="6">Shakespeare&#39;s longest play.</a>
+<a class="sourceLine" id="cb223-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb223-8" data-line-number="8">## Act III {#act-3}</a>
+<a class="sourceLine" id="cb223-9" data-line-number="9">Hamlet kills Polonius.</a>
+<a class="sourceLine" id="cb223-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb223-11" data-line-number="11">## Act V {#act-5}</a>
+<a class="sourceLine" id="cb223-12" data-line-number="12">Hamlet dies.</a>
+<a class="sourceLine" id="cb223-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb223-14" data-line-number="14">## Act I {#act-1}</a>
+<a class="sourceLine" id="cb223-15" data-line-number="15">Hamlet talks to ghost.</a>
+<a class="sourceLine" id="cb223-16" data-line-number="16"><span class="kw">\end</span>{<span class="ex">filecontents*</span>}</a>
+<a class="sourceLine" id="cb223-17" data-line-number="17"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb223-18" data-line-number="18"><span class="fu">\markdownInput</span>[slice=^ ^act-3]{hamlet.md}</a>
+<a class="sourceLine" id="cb223-19" data-line-number="19"><span class="fu">\markdownInput</span>[slice=act-1]{hamlet.md}</a>
+<a class="sourceLine" id="cb223-20" data-line-number="20"><span class="fu">\markdownInput</span>[slice=act-3 act-5]{hamlet.md}</a>
+<a class="sourceLine" id="cb223-21" data-line-number="21"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb224"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb224-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="the-tragedy-of-hamlet-1">The Tragedy of Hamlet</h1>
+<p>Shakespeare’s longest play.</p>
+<h2 id="act-i-1">Act I</h2>
+<p>Hamlet talks to ghost.</p>
+<h2 id="act-iii-1">Act III</h2>
+<p>Hamlet kills Polonius.</p>
+<h2 id="act-v-1">Act V</h2>
+<p>Hamlet dies.</p>
+</blockquote>
+<h5 id="context-example-17" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>hamlet.md</code> with the following content:</p>
+<div class="sourceCode" id="cb225"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb225-1" data-line-number="1"><span class="fu"># The Tragedy of Hamlet</span></a>
+<a class="sourceLine" id="cb225-2" data-line-number="2">Shakespeare&#39;s longest play.</a>
+<a class="sourceLine" id="cb225-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb225-4" data-line-number="4"><span class="fu">## Act III {#act-3}</span></a>
+<a class="sourceLine" id="cb225-5" data-line-number="5">Hamlet kills Polonius.</a>
+<a class="sourceLine" id="cb225-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb225-7" data-line-number="7"><span class="fu">## Act V {#act-5}</span></a>
+<a class="sourceLine" id="cb225-8" data-line-number="8">Hamlet dies.</a>
+<a class="sourceLine" id="cb225-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb225-10" data-line-number="10"><span class="fu">## Act I {#act-1}</span></a>
+<a class="sourceLine" id="cb225-11" data-line-number="11">Hamlet talks to ghost.</a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb226"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb226-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb226-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionHeaderAttributes{true}</a>
+<a class="sourceLine" id="cb226-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb226-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb226-5" data-line-number="5"><span class="fu">\def</span>\markdownOptionSlice{^ ^act-3}</a>
+<a class="sourceLine" id="cb226-6" data-line-number="6"><span class="fu">\markdownInput</span>{hamlet.md}</a>
+<a class="sourceLine" id="cb226-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb226-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionSlice{act-1}</a>
+<a class="sourceLine" id="cb226-9" data-line-number="9"><span class="fu">\markdownInput</span>{hamlet.md}</a>
+<a class="sourceLine" id="cb226-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb226-11" data-line-number="11"><span class="fu">\def</span>\markdownOptionSlice{act-3 act-5}</a>
+<a class="sourceLine" id="cb226-12" data-line-number="12"><span class="fu">\markdownInput</span>{hamlet.md}</a>
+<a class="sourceLine" id="cb226-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb226-14" data-line-number="14"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb227"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb227-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<h1 id="the-tragedy-of-hamlet-2">The Tragedy of Hamlet</h1>
+<p>Shakespeare’s longest play.</p>
+<h2 id="act-i-2">Act I</h2>
+<p>Hamlet talks to ghost.</p>
+<h2 id="act-iii-2">Act III</h2>
+<p>Hamlet kills Polonius.</p>
+<h2 id="act-v-2">Act V</h2>
+<p>Hamlet dies.</p>
+</blockquote>
+<h4 id="option-smartellipses"><span class="header-section-number">2.2.1.23</span> Option <code>smartEllipses</code></h4>
+<dl>
+<dt><code>smartEllipses</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Convert any ellipses in the input to the <code>\markdownRendererEllipsis</code> <span class="tex">T<sub>e</sub>X</span> macro.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Preserve all ellipses in the input.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="lua-module-example-8" class="unnumbered">Lua Module Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb228"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb228-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb228-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererEllipsis{. . .}</a>
+<a class="sourceLine" id="cb228-3" data-line-number="3"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb228-4" data-line-number="4"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb228-5" data-line-number="5"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb228-6" data-line-number="6"> local convert = markdown.new()</a>
+<a class="sourceLine" id="cb228-7" data-line-number="7"> local input = &quot;These are just three regular dots ...&quot;</a>
+<a class="sourceLine" id="cb228-8" data-line-number="8"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb228-9" data-line-number="9"><span class="fu">\par</span></a>
+<a class="sourceLine" id="cb228-10" data-line-number="10"><span class="fu">\directlua</span>{</a>
+<a class="sourceLine" id="cb228-11" data-line-number="11"> local markdown = require(&quot;markdown&quot;)</a>
+<a class="sourceLine" id="cb228-12" data-line-number="12"> local convert = markdown.new({smartEllipses = true})</a>
+<a class="sourceLine" id="cb228-13" data-line-number="13"> local input = &quot;... and this is a victorian ellipsis.&quot;</a>
+<a class="sourceLine" id="cb228-14" data-line-number="14"> tex.sprint(convert(input)) }</a>
+<a class="sourceLine" id="cb228-15" data-line-number="15"><span class="fu">\bye</span></a></code></pre></div>
+<p>Then, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb229"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb229-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>These are just three regular dots …</p>
+<p>. . . and this is a victorian ellipsis.</p>
+</blockquote>
+<h5 id="lua-cli-example-8" class="unnumbered">Lua CLI Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb230"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb230-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb230-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererEllipsis{. . .}</a>
+<a class="sourceLine" id="cb230-3" data-line-number="3"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb230-4" data-line-number="4"><span class="fu">\input</span> optionfalse</a>
+<a class="sourceLine" id="cb230-5" data-line-number="5"><span class="fu">\par</span></a>
+<a class="sourceLine" id="cb230-6" data-line-number="6"><span class="fu">\input</span> optiontrue</a>
+<a class="sourceLine" id="cb230-7" data-line-number="7"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p>
+<div class="sourceCode" id="cb231"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb231-1" data-line-number="1">Are these just three regular dots, a victorian ellipsis, or ... ?</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb232"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb232-1" data-line-number="1"><span class="ex">texlua</span> ⟨CLI pathname⟩ -- content.md optionfalse.tex</a>
+<a class="sourceLine" id="cb232-2" data-line-number="2"><span class="ex">texlua</span> ⟨CLI pathname⟩ smartEllipses=true -- content.md optiontrue.tex</a>
+<a class="sourceLine" id="cb232-3" data-line-number="3"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems or <code>C:\Users\</code>⟨<em>Your username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on Windows systems. Use the command <code>kpsewhich markdown-cli.lua</code> to locate the Lua CLI script file using <a href="https://tug.org/kpathsea/" title="Kpathsea - TeX Users Group">Kpathsea</a>.</p>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Are these just three regular dots, a victorian ellipsis, or … ?</p>
+<p>Are these just three regular dots, a victorian ellipsis, or . . . ?</p>
+</blockquote>
+<h5 id="plain-tex-example-10" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb233"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb233-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb233-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererEllipsis{. . .}</a>
+<a class="sourceLine" id="cb233-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb233-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb233-5" data-line-number="5">These are just three regular dots ...</a>
+<a class="sourceLine" id="cb233-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb233-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb233-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionSmartEllipses{true}</a>
+<a class="sourceLine" id="cb233-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb233-10" data-line-number="10">... and this is a victorian ellipsis.</a>
+<a class="sourceLine" id="cb233-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb233-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb233-13" data-line-number="13"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb234"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb234-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>These are just three regular dots …</p>
+<p>. . . and this is a victorian ellipsis.</p>
+</blockquote>
+<h5 id="latex-example-20" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb235"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb235-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb235-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb235-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb235-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb235-5" data-line-number="5"> ellipsis = {. . .} }}</a>
+<a class="sourceLine" id="cb235-6" data-line-number="6"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb235-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb235-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb235-9" data-line-number="9">These are just three regular dots ...</a>
+<a class="sourceLine" id="cb235-10" data-line-number="10"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb235-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb235-12" data-line-number="12"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{smartEllipses}</a>
+<a class="sourceLine" id="cb235-13" data-line-number="13">... and this is a victorian ellipsis.</a>
+<a class="sourceLine" id="cb235-14" data-line-number="14"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb235-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb235-16" data-line-number="16"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb236"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb236-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>These are just three regular dots …</p>
+<p>. . . and this is a victorian ellipsis.</p>
+</blockquote>
+<h5 id="context-example-18" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb237"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb237-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb237-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererEllipsis{. . .}</a>
+<a class="sourceLine" id="cb237-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb237-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb237-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb237-6" data-line-number="6">These are just three regular dots ...</a>
+<a class="sourceLine" id="cb237-7" data-line-number="7"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb237-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb237-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionSmartEllipses{true}</a>
+<a class="sourceLine" id="cb237-10" data-line-number="10"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb237-11" data-line-number="11">... and this is a victorian ellipsis.</a>
+<a class="sourceLine" id="cb237-12" data-line-number="12"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb237-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb237-14" data-line-number="14"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb238"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb238-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>These are just three regular dots …</p>
+<p>. . . and this is a victorian ellipsis.</p>
+</blockquote>
+<h4 id="option-startnumber"><span class="header-section-number">2.2.1.24</span> Option <code>startNumber</code></h4>
+<dl>
+<dt><code>startNumber</code> (default value: <code>true</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Make the number in the first item of an ordered lists significant. The item numbers will be passed to the <code>\markdownRendererOlItemWithNumber</code> <span class="tex">T<sub>e</sub>X</span> macro.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Ignore the numbers in the ordered list items. Each item will only produce a <code>\markdownRendererOlItem</code> <span class="tex">T<sub>e</sub>X</span> macro.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-21" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb239"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb239-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb239-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb239-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb239-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb239-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb239-6" data-line-number="6">The following list respects the numbers specified in the markup:</a>
+<a class="sourceLine" id="cb239-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb239-8" data-line-number="8">3. third item</a>
+<a class="sourceLine" id="cb239-9" data-line-number="9">4. fourth item</a>
+<a class="sourceLine" id="cb239-10" data-line-number="10">5. fifth item</a>
+<a class="sourceLine" id="cb239-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb239-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb239-13" data-line-number="13"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{startNumber=false}</a>
+<a class="sourceLine" id="cb239-14" data-line-number="14">The following list does not respect the numbers specified in the</a>
+<a class="sourceLine" id="cb239-15" data-line-number="15">markup:</a>
+<a class="sourceLine" id="cb239-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb239-17" data-line-number="17">3. third item</a>
+<a class="sourceLine" id="cb239-18" data-line-number="18">4. fourth item</a>
+<a class="sourceLine" id="cb239-19" data-line-number="19">5. fifth item</a>
+<a class="sourceLine" id="cb239-20" data-line-number="20"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb239-21" data-line-number="21"></a>
+<a class="sourceLine" id="cb239-22" data-line-number="22"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb240"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb240-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The following list respects the numbers specified in the markup:</p>
+<ol start="3" type="1">
+<li>third item</li>
+<li>fourth item</li>
+<li>fifth item</li>
+</ol>
+<p>The following list does not respect the numbers specified in the markup:</p>
+<ol type="1">
+<li>third item</li>
+<li>fourth item</li>
+<li>fifth item</li>
+</ol>
+</blockquote>
+<h5 id="context-example-19" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb241"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb241-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb241-2" data-line-number="2"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb241-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb241-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb241-5" data-line-number="5">The following list respects the numbers specified in the markup:</a>
+<a class="sourceLine" id="cb241-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb241-7" data-line-number="7">3. third item</a>
+<a class="sourceLine" id="cb241-8" data-line-number="8">4. fourth item</a>
+<a class="sourceLine" id="cb241-9" data-line-number="9">5. fifth item</a>
+<a class="sourceLine" id="cb241-10" data-line-number="10"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb241-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb241-12" data-line-number="12"><span class="fu">\def</span>\markdownOptionStartNumber{false}</a>
+<a class="sourceLine" id="cb241-13" data-line-number="13"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb241-14" data-line-number="14">The following list respects the numbers specified in the markup:</a>
+<a class="sourceLine" id="cb241-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb241-16" data-line-number="16">3. third item</a>
+<a class="sourceLine" id="cb241-17" data-line-number="17">4. fourth item</a>
+<a class="sourceLine" id="cb241-18" data-line-number="18">5. fifth item</a>
+<a class="sourceLine" id="cb241-19" data-line-number="19"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb241-20" data-line-number="20"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb242"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb242-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The following list respects the numbers specified in the markup:</p>
+<ol start="3" type="1">
+<li>third item</li>
+<li>fourth item</li>
+<li>fifth item</li>
+</ol>
+<p>The following list does not respect the numbers specified in the markup:</p>
+<ol type="1">
+<li>third item</li>
+<li>fourth item</li>
+<li>fifth item</li>
+</ol>
+</blockquote>
+<h4 id="option-tablecaptions"><span class="header-section-number">2.2.1.25</span> Option <code>tableCaptions</code></h4>
+<dl>
+<dt><code>tableCaptions</code> (default value: <code>false</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Enable the Pandoc <code>table_captions</code> syntax extension for <a href="#pipe-tables">pipe tables</a>.</p>
+<div class="sourceCode" id="cb243"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb243-1" data-line-number="1">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb243-2" data-line-number="2">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb243-3" data-line-number="3">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb243-4" data-line-number="4">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb243-5" data-line-number="5">| 1 | 1 | 1 | 1 |</a>
+<a class="sourceLine" id="cb243-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb243-7" data-line-number="7"> : Demonstration of pipe table syntax.</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Enable the Pandoc <code>table_captions</code> syntax extension.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-22" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb244"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb244-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb244-2" data-line-number="2"><span class="bu">\usepackage</span>[pipeTables, tableCaptions]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb244-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb244-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb244-5" data-line-number="5">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb244-6" data-line-number="6">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb244-7" data-line-number="7">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb244-8" data-line-number="8">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb244-9" data-line-number="9">| 1 | 1 | 1 | 1 |</a>
+<a class="sourceLine" id="cb244-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb244-11" data-line-number="11"> : Demonstration of pipe table syntax.</a>
+<a class="sourceLine" id="cb244-12" data-line-number="12"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb244-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb245"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb245-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<caption>Demonstration of pipe table syntax.</caption>
+<thead>
+<tr class="header">
+<th style="text-align: right;">Right</th>
+<th style="text-align: left;">Left</th>
+<th>Default</th>
+<th style="text-align: center;">Center</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: right;">12</td>
+<td style="text-align: left;">12</td>
+<td>12</td>
+<td style="text-align: center;">12</td>
+</tr>
+<tr class="even">
+<td style="text-align: right;">123</td>
+<td style="text-align: left;">123</td>
+<td>123</td>
+<td style="text-align: center;">123</td>
+</tr>
+<tr class="odd">
+<td style="text-align: right;">1</td>
+<td style="text-align: left;">1</td>
+<td>1</td>
+<td style="text-align: center;">1</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<h5 id="context-example-20" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb246"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb246-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb246-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionPipeTables{true}</a>
+<a class="sourceLine" id="cb246-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionTableCaptions{true}</a>
+<a class="sourceLine" id="cb246-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb246-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb246-6" data-line-number="6">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb246-7" data-line-number="7">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb246-8" data-line-number="8">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb246-9" data-line-number="9">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb246-10" data-line-number="10">| 1 | 1 | 1 | 1 |</a>
+<a class="sourceLine" id="cb246-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb246-12" data-line-number="12"> : Demonstration of pipe table syntax.</a>
+<a class="sourceLine" id="cb246-13" data-line-number="13"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb246-14" data-line-number="14"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb247"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb247-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<table>
+<caption>Demonstration of pipe table syntax.</caption>
+<thead>
+<tr class="header">
+<th style="text-align: right;">Right</th>
+<th style="text-align: left;">Left</th>
+<th>Default</th>
+<th style="text-align: center;">Center</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: right;">12</td>
+<td style="text-align: left;">12</td>
+<td>12</td>
+<td style="text-align: center;">12</td>
+</tr>
+<tr class="even">
+<td style="text-align: right;">123</td>
+<td style="text-align: left;">123</td>
+<td>123</td>
+<td style="text-align: center;">123</td>
+</tr>
+<tr class="odd">
+<td style="text-align: right;">1</td>
+<td style="text-align: left;">1</td>
+<td>1</td>
+<td style="text-align: center;">1</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<h4 id="option-tightlists"><span class="header-section-number">2.2.1.26</span> Option <code>tightLists</code></h4>
+<dl>
+<dt><code>tightLists</code> (default value: <code>true</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Lists whose bullets do not consist of multiple paragraphs will be passed to the <code>\markdownRendererOlBeginTight</code>, <code>\markdownRendererOlEndTight</code>, <code>\markdownRendererUlBeginTight</code>, <code>\markdownRendererUlEndTight</code>, <code>\markdownRendererDlBeginTight</code>, and <code>\markdownRendererDlEndTight</code> <span class="tex">T<sub>e</sub>X</span> macros.</p>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Lists whose bullets do not consist of multiple paragraphs will be treated the same way as lists that do consist of multiple paragraphs.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="latex-example-23" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb248"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb248-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb248-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb248-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb248-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb248-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb248-6" data-line-number="6">The following list is tight:</a>
+<a class="sourceLine" id="cb248-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb248-8" data-line-number="8"> - first item</a>
+<a class="sourceLine" id="cb248-9" data-line-number="9"> - second item</a>
+<a class="sourceLine" id="cb248-10" data-line-number="10"> - third item</a>
+<a class="sourceLine" id="cb248-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb248-12" data-line-number="12">The following list is loose:</a>
+<a class="sourceLine" id="cb248-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb248-14" data-line-number="14"> - first item</a>
+<a class="sourceLine" id="cb248-15" data-line-number="15"> - second item that spans</a>
+<a class="sourceLine" id="cb248-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb248-17" data-line-number="17"> multiple paragraphs</a>
+<a class="sourceLine" id="cb248-18" data-line-number="18"> - third item</a>
+<a class="sourceLine" id="cb248-19" data-line-number="19"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb248-20" data-line-number="20"></a>
+<a class="sourceLine" id="cb248-21" data-line-number="21"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{tightLists=false}</a>
+<a class="sourceLine" id="cb248-22" data-line-number="22">The following list is now also loose:</a>
+<a class="sourceLine" id="cb248-23" data-line-number="23"></a>
+<a class="sourceLine" id="cb248-24" data-line-number="24"> - first item</a>
+<a class="sourceLine" id="cb248-25" data-line-number="25"> - second item</a>
+<a class="sourceLine" id="cb248-26" data-line-number="26"> - third item</a>
+<a class="sourceLine" id="cb248-27" data-line-number="27"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb248-28" data-line-number="28"></a>
+<a class="sourceLine" id="cb248-29" data-line-number="29"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb249"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb249-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The following list is tight:</p>
+<ul>
+<li>first item</li>
+<li>second item</li>
+<li>third item</li>
+</ul>
+<p>The following list is loose:</p>
+<ul>
+<li>first item</li>
+<li><p>second item that spans</p>
+multiple paragraphs</li>
+<li><p>third item</p></li>
+</ul>
+<p>The following list is now also loose:</p>
+<ul>
+<li><p>first item</p></li>
+<li><p>second item</p></li>
+<li><p>third item</p></li>
+</ul>
+</blockquote>
+<h4 id="option-underscores"><span class="header-section-number">2.2.1.27</span> Option <code>underscores</code></h4>
+<dl>
+<dt><code>underscores</code> (default value: <code>true</code>)</dt>
+<dd><dl>
+<dt>true</dt>
+<dd><p>Both underscores and asterisks can be used to denote emphasis and strong emphasis:</p>
+<div class="sourceCode" id="cb250"><pre class="sourceCode md"><code class="sourceCode markdown"><a class="sourceLine" id="cb250-1" data-line-number="1">*single asterisks*</a>
+<a class="sourceLine" id="cb250-2" data-line-number="2">_single underscores_</a>
+<a class="sourceLine" id="cb250-3" data-line-number="3">**double asterisks**</a>
+<a class="sourceLine" id="cb250-4" data-line-number="4">__double underscores__</a></code></pre></div>
+</dd>
+</dl>
+</dd>
+<dd><dl>
+<dt>false</dt>
+<dd><p>Only asterisks can be used to denote emphasis and strong emphasis. This makes it easy to write math with the <strong><code>hybrid</code></strong> option without the need to constantly escape subscripts.</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<h5 id="plain-tex-example-11" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb251"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb251-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb251-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb251-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb251-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb251-5" data-line-number="5">This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</a>
+<a class="sourceLine" id="cb251-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb251-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb251-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionUnderscores{false}</a>
+<a class="sourceLine" id="cb251-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb251-10" data-line-number="10">This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</a>
+<a class="sourceLine" id="cb251-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb251-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb251-13" data-line-number="13"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb252"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb252-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <em>emphasized text</em> and this is a math subscript: <em>mâ‚™</em>.</p>
+<p>This is <em>emphasized text</em> and this is a math subscript: <em>mâ‚™</em>.</p>
+</blockquote>
+<h5 id="latex-example-24" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb253"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb253-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb253-2" data-line-number="2"><span class="bu">\usepackage</span>[hybrid]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb253-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb253-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb253-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb253-6" data-line-number="6">This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</a>
+<a class="sourceLine" id="cb253-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb253-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb253-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{underscores=false}</a>
+<a class="sourceLine" id="cb253-10" data-line-number="10">This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</a>
+<a class="sourceLine" id="cb253-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb253-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb253-13" data-line-number="13"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb254"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb254-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <em>emphasized text</em> and this is a math subscript: <em>mâ‚™</em>.</p>
+<p>This is <em>emphasized text</em> and this is a math subscript: <em>mâ‚™</em>.</p>
+</blockquote>
+<h5 id="context-example-21" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb255"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb255-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb255-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb255-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb255-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb255-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb255-6" data-line-number="6">This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</a>
+<a class="sourceLine" id="cb255-7" data-line-number="7"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb255-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb255-9" data-line-number="9"><span class="fu">\def</span>\markdownOptionUnderscores{false}</a>
+<a class="sourceLine" id="cb255-10" data-line-number="10"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb255-11" data-line-number="11">This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</a>
+<a class="sourceLine" id="cb255-12" data-line-number="12"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb255-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb255-14" data-line-number="14"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb256"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb256-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <em>emphasized text</em> and this is a math subscript: <em>mâ‚™</em>.</p>
+<p>This is <em>emphasized text</em> and this is a math subscript: <em>mâ‚™</em>.</p>
+</blockquote>
+<h3 id="plain-tex-1"><span class="header-section-number">2.2.2</span> Plain <span class="tex">T<sub>e</sub>X</span></h3>
+<p>Plain <span class="tex">T<sub>e</sub>X</span> options control the communication between the <span class="tex">T<sub>e</sub>X</span> interface and the <code>markdown</code> Lua module. They are supported by all higher-level interfaces of the Markdown package, i.e. the plain <span class="tex">T<sub>e</sub>X</span>, <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> and Con<span class="tex">T<sub>e</sub>X</span>t interfaces.</p>
+<h4 id="file-and-directory-names"><span class="header-section-number">2.2.2.1</span> File and Directory Names</h4>
+<p>The plain <span class="tex">T<sub>e</sub>X</span> interface provides the following commands that you can use to specify the location of temporary files produced during the conversion from Markdown to <span class="tex">T<sub>e</sub>X</span>:</p>
+<ul>
+<li><code>\markdownOptionHelperScriptFileName</code>,</li>
+<li><code>\markdownOptionInputTempFileName</code>,</li>
+<li><code>\markdownOptionOutputTempFileName</code>,</li>
+<li><code>\markdownOptionErrorTempFileName</code>,</li>
+<li><code>\markdownOptionOutputDir</code>, and</li>
+<li><code>\markdownOptionCacheDir</code>.</li>
+</ul>
+<p>Using a text editor, create a folder named <code>output-directory</code> and a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb257"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb257-1" data-line-number="1"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb257-2" data-line-number="2"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb257-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionHelperScriptFileName{helper-script.lua}</a>
+<a class="sourceLine" id="cb257-4" data-line-number="4"><span class="fu">\def</span>\markdownOptionInputTempFileName{temporary-input.md}</a>
+<a class="sourceLine" id="cb257-5" data-line-number="5"><span class="fu">\def</span>\markdownOptionOutputTempFileName{temporary-output.tex}</a>
+<a class="sourceLine" id="cb257-6" data-line-number="6"><span class="fu">\def</span>\markdownOptionErrorTempFileName{error-output.txt}</a>
+<a class="sourceLine" id="cb257-7" data-line-number="7"><span class="fu">\def</span>\markdownOptionOutputDir{output-directory}</a>
+<a class="sourceLine" id="cb257-8" data-line-number="8"><span class="fu">\def</span>\markdownOptionCacheDir{output-directory/cache-directory}</a>
+<a class="sourceLine" id="cb257-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb257-10" data-line-number="10">Hello *world*!</a>
+<a class="sourceLine" id="cb257-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb257-12" data-line-number="12"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb258"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb258-1" data-line-number="1"><span class="ex">luatex</span> --output-directory output-directory document.tex</a></code></pre></div>
+<p>A text document named <code>temporary-input.md</code> should be produced in the folder named <code>output-directory</code> and contain the following text:</p>
+<blockquote>
+<p>Hello *world*!</p>
+</blockquote>
+<p>A folder named <code>output-directory/cache-directory</code> should also be produced and contain fragments of the converted markdown document. LuaTeX does not need other temporary files to perform the conversion from markdown to <span class="tex">T<sub>e</sub>X</span>. To produce the remaining temporary files, invoke pdfTeX from the terminal:</p>
+<div class="sourceCode" id="cb259"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb259-1" data-line-number="1"><span class="ex">pdftex</span> --output-directory output-directory --shell-escape document.tex</a></code></pre></div>
+<p>Text documents named <code>helper-script.lua</code>, and <code>temporary-output.md</code> should be produced in the folder named <code>output-directory</code>. The document named <code>helper-script.lua</code> will contain Lua code that was executed to convert markdown to plain <span class="tex">T<sub>e</sub>X</span>. The document named <code>temporary-output.tex</code> will contain the input markdown document converted to <span class="tex">T<sub>e</sub>X</span>.</p>
+<p>No document named <code>error-output.txt</code> should be produced in the folder named <code>output-directory</code>. This document would only be produced if an error had occured while executing the Lua code. If this happens, please <a href="https://github.com/witiko/markdown/issues">file a bug</a>.</p>
+<h4 id="package-documentation"><span class="header-section-number">2.2.2.2</span> Package Documentation</h4>
+<p>The <code>\markdownOptionStripPercentSigns</code> macro controls whether a percent sign (<code>%</code>) at the beginning of a line will be discarded when reading Markdown input from a <span class="tex">T<sub>e</sub>X</span> document. This enables the use of markdown when writing <span class="tex">T<sub>e</sub>X</span> package documentation using the <a href="https://ctan.org/pkg/doc" title="doc – Format LaTeX documentation">Doc <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> package</a> by Frank Mittelbach.</p>
+<p>Using a text editor, create a text document named <code>document.dtx</code> with the following content:</p>
+<div class="sourceCode" id="cb260"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb260-1" data-line-number="1"><span class="co">% \iffalse</span></a>
+<a class="sourceLine" id="cb260-2" data-line-number="2"><span class="bu">\documentclass</span>{<span class="ex">ltxdoc</span>}</a>
+<a class="sourceLine" id="cb260-3" data-line-number="3"><span class="bu">\usepackage</span>[stripPercentSigns]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb260-4" data-line-number="4"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb260-5" data-line-number="5"><span class="fu">\DocInput</span>{document.dtx}</a>
+<a class="sourceLine" id="cb260-6" data-line-number="6"><span class="kw">\end</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb260-7" data-line-number="7"><span class="co">% \fi</span></a>
+<a class="sourceLine" id="cb260-8" data-line-number="8"><span class="co">%</span></a>
+<a class="sourceLine" id="cb260-9" data-line-number="9"><span class="co">% \begin{markdown}</span></a>
+<a class="sourceLine" id="cb260-10" data-line-number="10"><span class="co">% Hello *world*!</span></a>
+<a class="sourceLine" id="cb260-11" data-line-number="11"><span class="co">% \end{markdown}</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb261"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb261-1" data-line-number="1"><span class="ex">lualatex</span> document.dtx</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!â€</p>
+<h2 id="markdown-tokens"><span class="header-section-number">2.3</span> Markdown Tokens</h2>
+<p>A key feature of the Markdown package is the support for manipulating markdown tokens, such as headings, emphasized text, links, and lists, in <span class="tex">T<sub>e</sub>X</span>. Instead of reducing <span class="tex">T<sub>e</sub>X</span> to a PDF document producer, the Markdown package allows the user to specify how every markdown token should be processed and rendered.</p>
+<h3 id="token-renderers"><span class="header-section-number">2.3.1</span> Token Renderers</h3>
+<p>Token renderers are user-defined <span class="tex">T<sub>e</sub>X</span> macros, which render markdown tokens. In this section, I will describe the individual token renderers.</p>
+<h4 id="interblock-separator-renderer"><span class="header-section-number">2.3.1.1</span> Interblock Separator Renderer</h4>
+<p>The <code>\markdownRendererInterblockSeparator</code> macro represents a separator between two markdown block elements. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-12" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb262"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb262-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb262-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb262-3" data-line-number="3"> \par</a>
+<a class="sourceLine" id="cb262-4" data-line-number="4"> {\it(The end of a block)}<span class="co">%</span></a>
+<a class="sourceLine" id="cb262-5" data-line-number="5"> \par</a>
+<a class="sourceLine" id="cb262-6" data-line-number="6">}</a>
+<a class="sourceLine" id="cb262-7" data-line-number="7"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb262-8" data-line-number="8">Hello *world*!</a>
+<a class="sourceLine" id="cb262-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb262-10" data-line-number="10">_Foo_ bar!</a>
+<a class="sourceLine" id="cb262-11" data-line-number="11"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb262-12" data-line-number="12"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb263"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb263-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(The end of a block)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h5 id="latex-example-25" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb264"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb264-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb264-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb264-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb264-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb264-5" data-line-number="5"> interblockSeparator = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb264-6" data-line-number="6"> <span class="fu">\par</span></a>
+<a class="sourceLine" id="cb264-7" data-line-number="7"> <span class="fu">\emph</span>{(The end of a block)}<span class="co">%</span></a>
+<a class="sourceLine" id="cb264-8" data-line-number="8"> <span class="fu">\par</span></a>
+<a class="sourceLine" id="cb264-9" data-line-number="9"> },</a>
+<a class="sourceLine" id="cb264-10" data-line-number="10"> },</a>
+<a class="sourceLine" id="cb264-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb264-12" data-line-number="12"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb264-13" data-line-number="13"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb264-14" data-line-number="14">Hello *world*!</a>
+<a class="sourceLine" id="cb264-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb264-16" data-line-number="16">_Foo_ bar!</a>
+<a class="sourceLine" id="cb264-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb264-18" data-line-number="18"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb265"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb265-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(The end of a block)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h5 id="context-example-22" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb266"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb266-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb266-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb266-3" data-line-number="3"> \par</a>
+<a class="sourceLine" id="cb266-4" data-line-number="4"> \emph{(The end of a block)}<span class="co">%</span></a>
+<a class="sourceLine" id="cb266-5" data-line-number="5"> \par</a>
+<a class="sourceLine" id="cb266-6" data-line-number="6">}</a>
+<a class="sourceLine" id="cb266-7" data-line-number="7"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb266-8" data-line-number="8"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb266-9" data-line-number="9">Hello *world*!</a>
+<a class="sourceLine" id="cb266-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb266-11" data-line-number="11">_Foo_ bar!</a>
+<a class="sourceLine" id="cb266-12" data-line-number="12"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb266-13" data-line-number="13"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb267"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb267-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(The end of a block)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h4 id="line-break-renderer"><span class="header-section-number">2.3.1.2</span> Line Break Renderer</h4>
+<p>The <code>\markdownRendererLineBreak</code> macro represents a forced line break. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-13" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb268"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb268-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb268-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererLineBreak{<span class="co">%</span></a>
+<a class="sourceLine" id="cb268-3" data-line-number="3"> \par</a>
+<a class="sourceLine" id="cb268-4" data-line-number="4"> {\it(A forced linebreak)}<span class="co">%</span></a>
+<a class="sourceLine" id="cb268-5" data-line-number="5"> \par</a>
+<a class="sourceLine" id="cb268-6" data-line-number="6">}</a>
+<a class="sourceLine" id="cb268-7" data-line-number="7"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb268-8" data-line-number="8"><span class="fu">\bye</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>example.md</code> with the following content. Note the two spaces at the end of the first line, which specify a hard linebreak. Due to the limitations of the <span class="tex">T<sub>e</sub>X</span> input processor, hard linebreaks would be ignored if we typed them directly into the <code>document.tex</code> document.</p>
+<pre><code>Hello world! <br/>_Foo_ bar!</code></pre>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb269"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb269-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(A forced linebreak)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h5 id="latex-example-26" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb270"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb270-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb270-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb270-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb270-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb270-5" data-line-number="5"> lineBreak = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb270-6" data-line-number="6"> <span class="fu">\par</span></a>
+<a class="sourceLine" id="cb270-7" data-line-number="7"> <span class="fu">\emph</span>{(A forced linebreak)}<span class="co">%</span></a>
+<a class="sourceLine" id="cb270-8" data-line-number="8"> <span class="fu">\par</span></a>
+<a class="sourceLine" id="cb270-9" data-line-number="9"> },</a>
+<a class="sourceLine" id="cb270-10" data-line-number="10"> },</a>
+<a class="sourceLine" id="cb270-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb270-12" data-line-number="12"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb270-13" data-line-number="13"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb270-14" data-line-number="14"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Using a text editor, create a text document named <code>example.md</code> with the following content. Note the two spaces at the end of the first line, which specify a hard linebreak. Due to the limitations of the <span class="tex">T<sub>e</sub>X</span> input processor, hard linebreaks would be ignored if we typed them directly into the <code>document.tex</code> document.</p>
+<pre><code>Hello world! <br/>_Foo_ bar!</code></pre>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb271"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb271-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(A forced linebreak)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h5 id="context-example-23" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb272"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb272-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb272-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererLineBreak{<span class="co">%</span></a>
+<a class="sourceLine" id="cb272-3" data-line-number="3"> \par</a>
+<a class="sourceLine" id="cb272-4" data-line-number="4"> \emph{(A forced linebreak)}<span class="co">%</span></a>
+<a class="sourceLine" id="cb272-5" data-line-number="5"> \par</a>
+<a class="sourceLine" id="cb272-6" data-line-number="6">}</a>
+<a class="sourceLine" id="cb272-7" data-line-number="7"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb272-8" data-line-number="8"><span class="fu">\markdownInput</span>{example.md}</a>
+<a class="sourceLine" id="cb272-9" data-line-number="9"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Using a text editor, create a text document named <code>example.md</code> with the following content. Note the two spaces at the end of the first line, which specify a hard linebreak. Due to the limitations of the <span class="tex">T<sub>e</sub>X</span> input processor, hard linebreaks would be ignored if we typed them directly into the <code>document.tex</code> document.</p>
+<pre><code>Hello world! <br/>_Foo_ bar!</code></pre>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb273"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb273-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(A forced linebreak)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h4 id="ellipsis-renderer"><span class="header-section-number">2.3.1.3</span> Ellipsis Renderer</h4>
+<p>The <code>\markdownRendererEllipsis</code> macro replaces any occurance of ASCII ellipses in the input text. This macro will only be produced, when the <strong><code>smartEllipses</code></strong> option is <code>true</code>. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-14" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb274"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb274-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb274-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionSmartEllipses{true}</a>
+<a class="sourceLine" id="cb274-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererEllipsis{{\it SHAZAM}!}</a>
+<a class="sourceLine" id="cb274-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb274-5" data-line-number="5">The secret word is ...</a>
+<a class="sourceLine" id="cb274-6" data-line-number="6"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb274-7" data-line-number="7"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb275"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb275-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The secret word is <em>SHAZAM</em>!</p>
+</blockquote>
+<h5 id="latex-example-27" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb276"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb276-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb276-2" data-line-number="2"><span class="bu">\usepackage</span>[smartEllipses]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb276-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb276-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb276-5" data-line-number="5"> ellipsis = <span class="fu">\emph</span>{SHAZAM}!,</a>
+<a class="sourceLine" id="cb276-6" data-line-number="6"> },</a>
+<a class="sourceLine" id="cb276-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb276-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb276-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb276-10" data-line-number="10">The secret word is ...</a>
+<a class="sourceLine" id="cb276-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb276-12" data-line-number="12"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb277"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb277-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The secret word is <em>SHAZAM</em>!</p>
+</blockquote>
+<h5 id="context-example-24" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb278"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb278-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb278-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionSmartEllipses{true}</a>
+<a class="sourceLine" id="cb278-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererEllipsis{\emph{SHAZAM}!}</a>
+<a class="sourceLine" id="cb278-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb278-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb278-6" data-line-number="6">The secret word is ...</a>
+<a class="sourceLine" id="cb278-7" data-line-number="7"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb278-8" data-line-number="8"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb279"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb279-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Hello <em>world</em>!</p>
+<p><em>(The end of a block)</em></p>
+<p><em>Foo</em> bar!</p>
+</blockquote>
+<h4 id="non-breaking-space-renderer"><span class="header-section-number">2.3.1.4</span> Non-Breaking Space Renderer</h4>
+<p>The <code>\markdownRendererNbsp</code> macro represents a non-breaking space.</p>
+<h5 id="latex-example-28" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.bib</code> with the following content:</p>
+<div class="sourceCode" id="cb280"><pre class="sourceCode bib"><code class="sourceCode bibtex"><a class="sourceLine" id="cb280-1" data-line-number="1"><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</a>
+<a class="sourceLine" id="cb280-2" data-line-number="2"> <span class="dt">author</span> = &quot;<span class="st">Knuth, Donald Ervin</span>&quot;,</a>
+<a class="sourceLine" id="cb280-3" data-line-number="3"> <span class="dt">title</span> = &quot;<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>&quot;,</a>
+<a class="sourceLine" id="cb280-4" data-line-number="4"> <span class="dt">publisher</span> = &quot;<span class="st">Addison-Wesley</span>&quot;,</a>
+<a class="sourceLine" id="cb280-5" data-line-number="5"> <span class="dt">year</span> = &quot;<span class="st">1984</span>&quot;</a>
+<a class="sourceLine" id="cb280-6" data-line-number="6">}</a></code></pre></div>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb281"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb281-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb281-2" data-line-number="2"><span class="bu">\usepackage</span>[</a>
+<a class="sourceLine" id="cb281-3" data-line-number="3"> citations,</a>
+<a class="sourceLine" id="cb281-4" data-line-number="4"> citationNbsps,</a>
+<a class="sourceLine" id="cb281-5" data-line-number="5">]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb281-6" data-line-number="6"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb281-7" data-line-number="7"> renderers = {</a>
+<a class="sourceLine" id="cb281-8" data-line-number="8"> nbsp = {<span class="ss">$</span><span class="sc">\cdot</span><span class="ss">$</span>},</a>
+<a class="sourceLine" id="cb281-9" data-line-number="9"> },</a>
+<a class="sourceLine" id="cb281-10" data-line-number="10">}</a>
+<a class="sourceLine" id="cb281-11" data-line-number="11"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb281-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb281-13" data-line-number="13"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb281-14" data-line-number="14">The TeXbook [@knuth:tex, p. 123 and 130] is good.</a>
+<a class="sourceLine" id="cb281-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb281-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb281-17" data-line-number="17"><span class="bu">\bibliographystyle</span>{<span class="ex">plain</span>}</a>
+<a class="sourceLine" id="cb281-18" data-line-number="18"><span class="bu">\bibliography</span>{<span class="ex">document.bib</span>}</a>
+<a class="sourceLine" id="cb281-19" data-line-number="19"></a>
+<a class="sourceLine" id="cb281-20" data-line-number="20"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX and BibTeX from the terminal:</p>
+<div class="sourceCode" id="cb282"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb282-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a>
+<a class="sourceLine" id="cb282-2" data-line-number="2"><span class="ex">bibtex</span> document.aux</a>
+<a class="sourceLine" id="cb282-3" data-line-number="3"><span class="ex">lualatex</span> document.tex</a>
+<a class="sourceLine" id="cb282-4" data-line-number="4"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>The TeXbook [1, p.·123·and·130] is good.</p>
+<h3 id="references-2">References</h3>
+<p>[1] Donald Ervin Knuth. <em>The TeXbook, volume A of Computers and typesetting.</em> Addison-Wesley, 1984.</p>
+</blockquote>
+<h4 id="special-character-renderers"><span class="header-section-number">2.3.1.5</span> Special Character Renderers</h4>
+<p>The following macros replace any special plain <span class="tex">T<sub>e</sub>X</span> characters, including the active pipe character (<code>|</code>) of Con<span class="tex">T<sub>e</sub>X</span>t, in the input text:</p>
+<ul>
+<li><code>\markdownRendererAmpersand</code> replaces the ampersand (<code>&amp;</code>).</li>
+<li><code>\markdownRendererBackslash</code> replaces the backslash (<code>\</code>).</li>
+<li><code>\markdownRendererCircumflex</code> replaces the circumflex (<code>^</code>).</li>
+<li><code>\markdownRendererDollarSign</code> replaces the dollar sign (<code>$</code>).</li>
+<li><code>\markdownRendererHash</code> replaces the hash sign (<code>#</code>).</li>
+<li><code>\markdownRendererLeftBrace</code> replaces the left brace (<code>{</code>).</li>
+<li><code>\markdownRendererPercentSign</code> replaces the percent sign (<code>%</code>).</li>
+<li><code>\markdownRendererPipe</code> replaces the pipe character (<code>|</code>).</li>
+<li><code>\markdownRendererRightBrace</code> replaces the right brace (<code>}</code>).</li>
+<li><code>\markdownRendererTilde</code> replaces the tilde (<code>~</code>).</li>
+<li><code>\markdownRendererUnderscore</code> replaces the underscore (<code>_</code>).</li>
+</ul>
+<h5 id="plain-tex-example-15" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content. We will make the tilde behave as if it were written in <span class="tex">T<sub>e</sub>X</span>, where it represents a non-breaking space.</p>
+<div class="sourceCode" id="cb283"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb283-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb283-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererTilde{~}</a>
+<a class="sourceLine" id="cb283-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb283-4" data-line-number="4">Bartel~Leendert van~der~Waerden</a>
+<a class="sourceLine" id="cb283-5" data-line-number="5"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb283-6" data-line-number="6"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb284"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb284-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breakable space:</p>
+<blockquote>
+<p>Bartel·Leendert van·der·Waerden</p>
+</blockquote>
+<h5 id="latex-example-29" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content. We will make the tilde behave as if it were written in <span class="tex">T<sub>e</sub>X</span>, where it represents a non-breaking space.</p>
+<div class="sourceCode" id="cb285"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb285-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb285-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb285-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb285-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb285-5" data-line-number="5"> tilde = ~,</a>
+<a class="sourceLine" id="cb285-6" data-line-number="6"> },</a>
+<a class="sourceLine" id="cb285-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb285-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb285-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb285-10" data-line-number="10">Bartel~Leendert van~der~Waerden</a>
+<a class="sourceLine" id="cb285-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb285-12" data-line-number="12"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb286"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb286-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breakable space:</p>
+<blockquote>
+<p>Bartel·Leendert van·der·Waerden</p>
+</blockquote>
+<h5 id="context-example-25" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content. We will make the tilde behave as if it were written in <span class="tex">T<sub>e</sub>X</span>, where it represents a non-breaking space.</p>
+<div class="sourceCode" id="cb287"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb287-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb287-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererTilde{~}</a>
+<a class="sourceLine" id="cb287-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb287-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb287-5" data-line-number="5">Bartel~Leendert van~der~Waerden</a>
+<a class="sourceLine" id="cb287-6" data-line-number="6"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb287-7" data-line-number="7"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb288"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb288-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breakable space:</p>
+<blockquote>
+<p>Bartel·Leendert van·der·Waerden</p>
+</blockquote>
+<h4 id="code-span-renderer"><span class="header-section-number">2.3.1.6</span> Code Span Renderer</h4>
+<p>The <code>\markdownRendererCodeSpan</code> macro represents inlined code span in the input text. It receives a single argument that corresponds to the inlined code span.</p>
+<h5 id="plain-tex-example-16" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb289"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb289-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb289-2" data-line-number="2"><span class="fu">\input</span> lmfonts</a>
+<a class="sourceLine" id="cb289-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb289-4" data-line-number="4"><span class="fu">\def</span>\markdownRendererCodeSpan#1{#1}</a>
+<a class="sourceLine" id="cb289-5" data-line-number="5"></a>
+<a class="sourceLine" id="cb289-6" data-line-number="6"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb289-7" data-line-number="7">`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</a>
+<a class="sourceLine" id="cb289-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb289-9" data-line-number="9"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb289-10" data-line-number="10"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb289-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb289-12" data-line-number="12"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb289-13" data-line-number="13"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb289-14" data-line-number="14"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb289-15" data-line-number="15"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb289-16" data-line-number="16"></a>
+<a class="sourceLine" id="cb289-17" data-line-number="17"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb290"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb290-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ *equals* $i$.</p>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h5 id="latex-example-30" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb291"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb291-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb291-2" data-line-number="2"><span class="bu">\usepackage</span>[smartEllipses]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb291-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb291-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb291-5" data-line-number="5"> codeSpan = {#1},</a>
+<a class="sourceLine" id="cb291-6" data-line-number="6"> },</a>
+<a class="sourceLine" id="cb291-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb291-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb291-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb291-10" data-line-number="10"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb291-11" data-line-number="11">`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</a>
+<a class="sourceLine" id="cb291-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb291-13" data-line-number="13"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb291-14" data-line-number="14"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb291-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb291-16" data-line-number="16"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hybrid}</a>
+<a class="sourceLine" id="cb291-17" data-line-number="17"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb291-18" data-line-number="18"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb291-19" data-line-number="19"></a>
+<a class="sourceLine" id="cb291-20" data-line-number="20"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb292"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb292-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ *equals* $i$.</p>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h5 id="context-example-26" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb293"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb293-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb293-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererCodeSpan#1{#1}</a>
+<a class="sourceLine" id="cb293-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb293-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb293-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb293-6" data-line-number="6">`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</a>
+<a class="sourceLine" id="cb293-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb293-8" data-line-number="8"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb293-9" data-line-number="9"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb293-10" data-line-number="10"></a>
+<a class="sourceLine" id="cb293-11" data-line-number="11"><span class="fu">\def</span>\markdownOptionHybrid{true}</a>
+<a class="sourceLine" id="cb293-12" data-line-number="12"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb293-13" data-line-number="13"><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></a>
+<a class="sourceLine" id="cb293-14" data-line-number="14"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb293-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb293-16" data-line-number="16"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb294"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb294-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>$\sqrt{-1}$ *equals* $i$.</p>
+<p>$\sqrt{-1}$ <em>equals</em> $i$.</p>
+<p>√-̅1̅ <em>equals</em> <span class="math inline"><em>i</em></span>.</p>
+</blockquote>
+<h4 id="link-renderer"><span class="header-section-number">2.3.1.7</span> Link Renderer</h4>
+<p>The <code>\markdownRendererLink</code> macro represents a hyperlink. It receives four arguments: the label, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the link.</p>
+<h5 id="plain-tex-example-17" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb295"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb295-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb295-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererLink#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb295-3" data-line-number="3"> #1 {\tt#2} titled {\it#4}<span class="co">%</span></a>
+<a class="sourceLine" id="cb295-4" data-line-number="4">}</a>
+<a class="sourceLine" id="cb295-5" data-line-number="5"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb295-6" data-line-number="6">Please visit [the link][ctan].</a>
+<a class="sourceLine" id="cb295-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb295-8" data-line-number="8"> [ctan]: https://ctan.org/</a>
+<a class="sourceLine" id="cb295-9" data-line-number="9"> (the Comprehensive TeX Archive Network)</a>
+<a class="sourceLine" id="cb295-10" data-line-number="10"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb295-11" data-line-number="11"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb296"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb296-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Please visit the link <a href="https://ctan.org/" class="uri">https://ctan.org/</a> titled <em>the Comprehensive TeX Archive Network</em>.</p>
+</blockquote>
+<h5 id="latex-example-31" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb297"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb297-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb297-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb297-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb297-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb297-5" data-line-number="5"> link = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb297-6" data-line-number="6"> #1 <span class="fu">\texttt</span>{#2} titled <span class="fu">\emph</span>{#4}<span class="co">%</span></a>
+<a class="sourceLine" id="cb297-7" data-line-number="7"> },</a>
+<a class="sourceLine" id="cb297-8" data-line-number="8"> },</a>
+<a class="sourceLine" id="cb297-9" data-line-number="9">}</a>
+<a class="sourceLine" id="cb297-10" data-line-number="10"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb297-11" data-line-number="11"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb297-12" data-line-number="12">Please visit [the link][ctan].</a>
+<a class="sourceLine" id="cb297-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb297-14" data-line-number="14"> [ctan]: https://ctan.org/</a>
+<a class="sourceLine" id="cb297-15" data-line-number="15"> (the Comprehensive TeX Archive Network)</a>
+<a class="sourceLine" id="cb297-16" data-line-number="16"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb297-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb298"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb298-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Please visit the link <a href="https://ctan.org/" class="uri">https://ctan.org/</a> titled <em>the Comprehensive TeX Archive Network</em>.</p>
+</blockquote>
+<h5 id="context-example-27" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb299"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb299-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb299-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererLink#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb299-3" data-line-number="3"> #1 {\tt#2} titled \emph{#4}<span class="co">%</span></a>
+<a class="sourceLine" id="cb299-4" data-line-number="4">}</a>
+<a class="sourceLine" id="cb299-5" data-line-number="5"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb299-6" data-line-number="6"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb299-7" data-line-number="7">Please visit [the link][ctan].</a>
+<a class="sourceLine" id="cb299-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb299-9" data-line-number="9"> [ctan]: https://ctan.org/</a>
+<a class="sourceLine" id="cb299-10" data-line-number="10"> (the Comprehensive TeX Archive Network)</a>
+<a class="sourceLine" id="cb299-11" data-line-number="11"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb299-12" data-line-number="12"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb300"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb300-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Please visit the link <a href="https://ctan.org/" class="uri">https://ctan.org/</a> titled <em>the Comprehensive TeX Archive Network</em>.</p>
+</blockquote>
+<h4 id="image-renderer"><span class="header-section-number">2.3.1.8</span> Image Renderer</h4>
+<p>The <code>\markdownRendererImage</code> macro represents an image. It receives four arguments: the label, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the link.</p>
+<h5 id="latex-example-32" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb301"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb301-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb301-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb301-3" data-line-number="3"><span class="fu">\begingroup</span></a>
+<a class="sourceLine" id="cb301-4" data-line-number="4"><span class="fu">\catcode</span>`<span class="fu">\@</span>=11</a>
+<a class="sourceLine" id="cb301-5" data-line-number="5"><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</a>
+<a class="sourceLine" id="cb301-6" data-line-number="6"><span class="fu">\catcode</span>`<span class="fu">\^</span>^A=14</a>
+<a class="sourceLine" id="cb301-7" data-line-number="7"><span class="fu">\global\def</span>\markdownRendererImage#1#2#3#4{^^A</a>
+<a class="sourceLine" id="cb301-8" data-line-number="8"> \immediate\write18{^^A</a>
+<a class="sourceLine" id="cb301-9" data-line-number="9"> if printf &#39;<span class="co">%s&#39; &quot;#3&quot; | grep -q ^http; then</span></a>
+<a class="sourceLine" id="cb301-10" data-line-number="10"> OUTPUT=&quot;$(printf &#39;<span class="co">%s&#39; &quot;#3&quot; | md5sum | cut -d&#39; &#39; -f1).^^A</span></a>
+<a class="sourceLine" id="cb301-11" data-line-number="11"> $(printf &#39;<span class="co">%s&#39; &quot;#3&quot; | sed &#39;s/.*[.]//&#39;)&quot;;</span></a>
+<a class="sourceLine" id="cb301-12" data-line-number="12"> if ! [ -e &quot;$OUTPUT&quot; ]; then</a>
+<a class="sourceLine" id="cb301-13" data-line-number="13"> wget -O &quot;$OUTPUT&quot; &#39;#3&#39; || rm &quot;$OUTPUT&quot;;</a>
+<a class="sourceLine" id="cb301-14" data-line-number="14"> convert &quot;$OUTPUT&quot; png:&quot;$OUTPUT&quot;;</a>
+<a class="sourceLine" id="cb301-15" data-line-number="15"> fi;</a>
+<a class="sourceLine" id="cb301-16" data-line-number="16"> printf &#39;<span class="co">%s%%&#39; &quot;$OUTPUT&quot; &gt; \jobname.fetched;</span></a>
+<a class="sourceLine" id="cb301-17" data-line-number="17"> else</a>
+<a class="sourceLine" id="cb301-18" data-line-number="18"> printf &#39;<span class="co">%s%%&#39; &quot;#3&quot; &gt; \jobname.fetched;</span></a>
+<a class="sourceLine" id="cb301-19" data-line-number="19"> fi^^A</a>
+<a class="sourceLine" id="cb301-20" data-line-number="20"> }^^A</a>
+<a class="sourceLine" id="cb301-21" data-line-number="21"> {^^A</a>
+<a class="sourceLine" id="cb301-22" data-line-number="22"> \everyeof={\noexpand}^^A</a>
+<a class="sourceLine" id="cb301-23" data-line-number="23"> \edef\filename{\@@input&quot;\jobname.fetched&quot; }^^A</a>
+<a class="sourceLine" id="cb301-24" data-line-number="24"> \includegraphics[width=\textwidth]{\filename}^^A</a>
+<a class="sourceLine" id="cb301-25" data-line-number="25"> }^^A</a>
+<a class="sourceLine" id="cb301-26" data-line-number="26">}</a>
+<a class="sourceLine" id="cb301-27" data-line-number="27"><span class="fu">\endgroup</span></a>
+<a class="sourceLine" id="cb301-28" data-line-number="28"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb301-29" data-line-number="29"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb301-30" data-line-number="30">![TUGboat](https://tug.org/tugboat/noword.jpg)</a>
+<a class="sourceLine" id="cb301-31" data-line-number="31"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb301-32" data-line-number="32"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb302"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb302-1" data-line-number="1"><span class="ex">lualatex</span> --shell-escape document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following content. This assumes that you use a Unix-like operating system with Bourne or Bourne again shell as the default shell of the current user. It also assumes that the <code>md5sum</code>, <code>wget</code>, and <code>convert</code> binaries are installed and that the <span class="tex">T<sub>e</sub>X</span> engine has shell access.</p>
+<blockquote>
+<p><img src="https://tug.org/tugboat/noword.jpg" title="The Communications of the TeX Users Group" /></p>
+</blockquote>
+<h4 id="content-block-renderers"><span class="header-section-number">2.3.1.9</span> Content Block Renderers</h4>
+<p> The <code>\markdownRendererContentBlock</code> macro represents an iA Writer content block. It receives four arguments: the local file or online image filename extension cast to the lower case, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the content block.</p>
+<p>The <code>\markdownRendererContentBlockOnlineImage</code> macro represents an iA Writer online image content block. The macro receives the same arguments as <code>\markdownRendererContentBlock</code>.</p>
+<p>The <code>\markdownRendererContentBlockCode</code> macro represents an iA Writer content block that was recognized as a file in a known programming language by its filename extension <span class="math inline"><em>s</em></span>. If any <code>markdown-languages.json</code> file found by contains a record <span class="math inline">(<em>k</em>, <em>v</em>)</span>, then a non-online-image content block with the filename extension <span class="math inline"><em>s</em>, <em>s</em></span><code>:lower()</code><span class="math inline"> = <em>k</em></span> is considered to be in a known programming language <span class="math inline"><em>v</em></span>. The macro receives five arguments: the local file name extension <span class="math inline"><em>s</em></span> cast to the lower case, the language <span class="math inline"><em>v</em></span>, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the content block.</p>
+<p>Note that you will need to place place a <code>markdown-languages.json</code> file inside your working directory or inside your local <span class="tex">T<sub>e</sub>X</span> directory structure. In this file, you will define a mapping between filename extensions and the language names recognized by your favorite syntax highlighter; there may exist other creative uses beside syntax highlighting. <a href="https://github.com/iainc/Markdown-Content-Blocks" title="File transclusion syntax for Markdown">The <code>Languages.json</code> file provided by Anton Sotkov</a> is a good starting point.</p>
+<h5 id="plain-tex-example-18" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb303"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb303-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb303-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionContentBlocks{true}</a>
+<a class="sourceLine" id="cb303-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererContentBlock#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb303-4" data-line-number="4"> This is {\tt #2}, #4.</a>
+<a class="sourceLine" id="cb303-5" data-line-number="5">}</a>
+<a class="sourceLine" id="cb303-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererContentBlockOnlineImage#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb303-7" data-line-number="7"> This is the image {\tt #2}, #4.</a>
+<a class="sourceLine" id="cb303-8" data-line-number="8">}</a>
+<a class="sourceLine" id="cb303-9" data-line-number="9"><span class="fu">\def</span>\markdownRendererContentBlockCode#1#2#3#4#5{<span class="co">%</span></a>
+<a class="sourceLine" id="cb303-10" data-line-number="10"> This is the #2 (\uppercase{#1}) document {\tt #3}, #5.</a>
+<a class="sourceLine" id="cb303-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb303-12" data-line-number="12"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb303-13" data-line-number="13">/document.tex (the document that we are currently typesetting)</a>
+<a class="sourceLine" id="cb303-14" data-line-number="14">/markdown-languages.json (the mapping between filename extensions</a>
+<a class="sourceLine" id="cb303-15" data-line-number="15"> and programming language names)</a>
+<a class="sourceLine" id="cb303-16" data-line-number="16">https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</a>
+<a class="sourceLine" id="cb303-17" data-line-number="17"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb303-18" data-line-number="18"><span class="fu">\bye</span></a></code></pre></div>
+<p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p>
+<div class="sourceCode" id="cb304"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb304-1" data-line-number="1"><span class="op">{</span></a>
+<a class="sourceLine" id="cb304-2" data-line-number="2"> <span class="st">&quot;json&quot;</span><span class="op">:</span> <span class="st">&quot;JavaScript Object Notation&quot;</span><span class="op">,</span></a>
+<a class="sourceLine" id="cb304-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb305"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb305-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <code>document.tex</code>, the document that we are currently typesetting.</p>
+<p>This is the JavaScript Object Notation (JSON) document <code>markdown-languages.json</code>, the mapping between filename extensions and programming language names.</p>
+<p>This is the image <code>https://tug.org/tugboat/noword.jpg</code>, the logotype of TUGboat.</p>
+</blockquote>
+<h5 id="latex-example-33" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb306"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb306-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb306-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">filecontents</span>}</a>
+<a class="sourceLine" id="cb306-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">filecontents*</span>}{markdown-languages.json}</a>
+<a class="sourceLine" id="cb306-4" data-line-number="4">{</a>
+<a class="sourceLine" id="cb306-5" data-line-number="5"> &quot;json&quot;: &quot;JavaScript Object Notation&quot;,</a>
+<a class="sourceLine" id="cb306-6" data-line-number="6">}</a>
+<a class="sourceLine" id="cb306-7" data-line-number="7"><span class="kw">\end</span>{<span class="ex">filecontents*</span>}</a>
+<a class="sourceLine" id="cb306-8" data-line-number="8"><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb306-9" data-line-number="9"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb306-10" data-line-number="10"> renderers = {</a>
+<a class="sourceLine" id="cb306-11" data-line-number="11"> contentBlock = {This is <span class="fu">\texttt</span>{#2}, #4.},</a>
+<a class="sourceLine" id="cb306-12" data-line-number="12"> contentBlockOnlineImage = {This is the image <span class="fu">\texttt</span>{#2}, #4.},</a>
+<a class="sourceLine" id="cb306-13" data-line-number="13"> contentBlockCode = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb306-14" data-line-number="14"> This is the #2 (<span class="fu">\MakeUppercase</span>{#1}) document <span class="fu">\texttt</span>{#3}, #5.</a>
+<a class="sourceLine" id="cb306-15" data-line-number="15"> },</a>
+<a class="sourceLine" id="cb306-16" data-line-number="16"> },</a>
+<a class="sourceLine" id="cb306-17" data-line-number="17">}</a>
+<a class="sourceLine" id="cb306-18" data-line-number="18"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb306-19" data-line-number="19"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb306-20" data-line-number="20">/document.tex (the document that we are currently typesetting)</a>
+<a class="sourceLine" id="cb306-21" data-line-number="21">/markdown-languages.json (the mapping between filename extensions</a>
+<a class="sourceLine" id="cb306-22" data-line-number="22"> and programming language names)</a>
+<a class="sourceLine" id="cb306-23" data-line-number="23">https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</a>
+<a class="sourceLine" id="cb306-24" data-line-number="24"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb306-25" data-line-number="25"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb307"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb307-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <code>document.tex</code>, the document that we are currently typesetting.</p>
+<p>This is the JavaScript Object Notation (JSON) document <code>markdown-languages.json</code>, the mapping between filename extensions and programming language names.</p>
+<p>This is the image <code>https://tug.org/tugboat/noword.jpg</code>, the logotype of TUGboat.</p>
+</blockquote>
+<h5 id="context-example-28" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb308"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb308-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb308-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionContentBlocks{true}</a>
+<a class="sourceLine" id="cb308-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererContentBlock#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb308-4" data-line-number="4"> This is {\tt #2}, #4.</a>
+<a class="sourceLine" id="cb308-5" data-line-number="5">}</a>
+<a class="sourceLine" id="cb308-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererContentBlockOnlineImage#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb308-7" data-line-number="7"> This is the image {\tt #2}, #4.</a>
+<a class="sourceLine" id="cb308-8" data-line-number="8">}</a>
+<a class="sourceLine" id="cb308-9" data-line-number="9"><span class="fu">\def</span>\markdownRendererContentBlockCode#1#2#3#4#5{<span class="co">%</span></a>
+<a class="sourceLine" id="cb308-10" data-line-number="10"> This is the #2 (\uppercase{#1}) document {\tt #3}, #5.</a>
+<a class="sourceLine" id="cb308-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb308-12" data-line-number="12"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb308-13" data-line-number="13"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb308-14" data-line-number="14">/document.tex (the document that we are currently typesetting)</a>
+<a class="sourceLine" id="cb308-15" data-line-number="15">/markdown-languages.json (the mapping between filename extensions</a>
+<a class="sourceLine" id="cb308-16" data-line-number="16"> and programming language names)</a>
+<a class="sourceLine" id="cb308-17" data-line-number="17">https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</a>
+<a class="sourceLine" id="cb308-18" data-line-number="18"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb308-19" data-line-number="19"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p>
+<div class="sourceCode" id="cb309"><pre class="sourceCode js"><code class="sourceCode javascript"><a class="sourceLine" id="cb309-1" data-line-number="1"><span class="op">{</span></a>
+<a class="sourceLine" id="cb309-2" data-line-number="2"> <span class="st">&quot;json&quot;</span><span class="op">:</span> <span class="st">&quot;JavaScript Object Notation&quot;</span><span class="op">,</span></a>
+<a class="sourceLine" id="cb309-3" data-line-number="3"><span class="op">}</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb310"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb310-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <code>document.tex</code>, the document that we are currently typesetting.</p>
+<p>This is the JavaScript Object Notation (JSON) document <code>markdown-languages.json</code>, the mapping between filename extensions and programming language names.</p>
+<p>This is the image <code>https://tug.org/tugboat/noword.jpg</code>, the logotype of TUGboat.</p>
+</blockquote>
+<h4 id="bullet-list-renderers"><span class="header-section-number">2.3.1.10</span> Bullet List Renderers</h4>
+<p>The <code>\markdownRendererUlBegin</code> macro represents the beginning of a bulleted list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments.</p>
+<p>The <code>\markdownRendererUlBeginTight</code> macro represents the beginning of a bulleted list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererUlItem</code> macro represents an item in a bulleted list. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererUlItemEnd</code> macro represents the end of an item in a bulleted list. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererUlEnd</code> macro represents the end of a bulleted list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments.</p>
+<p>The <code>\markdownRendererUlEndTight</code> macro represents the end of a bulleted list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-19" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb311"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb311-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb311-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionTightLists{true}</a>
+<a class="sourceLine" id="cb311-3" data-line-number="3"></a>
+<a class="sourceLine" id="cb311-4" data-line-number="4"><span class="fu">\def</span>\markdownRendererInterblockSeparator{}</a>
+<a class="sourceLine" id="cb311-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererUlBeginTight{ (}</a>
+<a class="sourceLine" id="cb311-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererUlItem{<span class="co">%</span></a>
+<a class="sourceLine" id="cb311-7" data-line-number="7"> \def\markdownRendererUlItem{<span class="co">%</span></a>
+<a class="sourceLine" id="cb311-8" data-line-number="8"> ,</a>
+<a class="sourceLine" id="cb311-9" data-line-number="9"> \def\markdownRendererUlItem{, and }<span class="co">%</span></a>
+<a class="sourceLine" id="cb311-10" data-line-number="10"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb311-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb311-12" data-line-number="12"><span class="fu">\def</span>\markdownRendererUlItemEnd{}</a>
+<a class="sourceLine" id="cb311-13" data-line-number="13"><span class="fu">\def</span>\markdownRendererUlEndTight{).}</a>
+<a class="sourceLine" id="cb311-14" data-line-number="14"></a>
+<a class="sourceLine" id="cb311-15" data-line-number="15"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb311-16" data-line-number="16">This is a tight list</a>
+<a class="sourceLine" id="cb311-17" data-line-number="17"></a>
+<a class="sourceLine" id="cb311-18" data-line-number="18">- the first item</a>
+<a class="sourceLine" id="cb311-19" data-line-number="19">- the second item</a>
+<a class="sourceLine" id="cb311-20" data-line-number="20">- the third item</a>
+<a class="sourceLine" id="cb311-21" data-line-number="21"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb311-22" data-line-number="22"></a>
+<a class="sourceLine" id="cb311-23" data-line-number="23"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb311-24" data-line-number="24"> :\par</a>
+<a class="sourceLine" id="cb311-25" data-line-number="25"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb311-26" data-line-number="26">}</a>
+<a class="sourceLine" id="cb311-27" data-line-number="27"><span class="fu">\def</span>\markdownRendererUlBegin{}</a>
+<a class="sourceLine" id="cb311-28" data-line-number="28"><span class="fu">\def</span>\markdownRendererUlItem{--\kern 0.5em}</a>
+<a class="sourceLine" id="cb311-29" data-line-number="29"><span class="fu">\def</span>\markdownRendererUlItemEnd{.\par}</a>
+<a class="sourceLine" id="cb311-30" data-line-number="30"><span class="fu">\def</span>\markdownRendererUlEnd{}</a>
+<a class="sourceLine" id="cb311-31" data-line-number="31"></a>
+<a class="sourceLine" id="cb311-32" data-line-number="32"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb311-33" data-line-number="33">This is a loose list</a>
+<a class="sourceLine" id="cb311-34" data-line-number="34"></a>
+<a class="sourceLine" id="cb311-35" data-line-number="35">- This is the first item</a>
+<a class="sourceLine" id="cb311-36" data-line-number="36"></a>
+<a class="sourceLine" id="cb311-37" data-line-number="37">- This is the second item</a>
+<a class="sourceLine" id="cb311-38" data-line-number="38"></a>
+<a class="sourceLine" id="cb311-39" data-line-number="39">- This is the third item</a>
+<a class="sourceLine" id="cb311-40" data-line-number="40"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb311-41" data-line-number="41"></a>
+<a class="sourceLine" id="cb311-42" data-line-number="42"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb312"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb312-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight list (the first item, the second item, and the third item).</p>
+<p>This is a loose list:</p>
+<ul>
+<li><p>This is the first item.</p></li>
+<li><p>This is the second item.</p></li>
+<li><p>This is the third item.</p></li>
+</ul>
+</blockquote>
+<h5 id="latex-example-34" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb313"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb313-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb313-2" data-line-number="2"><span class="bu">\usepackage</span>[tightLists]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb313-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb313-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb313-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb313-6" data-line-number="6"> renderers = {</a>
+<a class="sourceLine" id="cb313-7" data-line-number="7"> interblockSeparator = {},</a>
+<a class="sourceLine" id="cb313-8" data-line-number="8"> ulBeginTight = { (},</a>
+<a class="sourceLine" id="cb313-9" data-line-number="9"> ulItem = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb313-10" data-line-number="10"> <span class="fu">\def</span>\markdownRendererUlItem{<span class="co">%</span></a>
+<a class="sourceLine" id="cb313-11" data-line-number="11"> ,</a>
+<a class="sourceLine" id="cb313-12" data-line-number="12"> \def\markdownRendererUlItem{, and }<span class="co">%</span></a>
+<a class="sourceLine" id="cb313-13" data-line-number="13"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb313-14" data-line-number="14"> },</a>
+<a class="sourceLine" id="cb313-15" data-line-number="15"> ulItemEnd = {},</a>
+<a class="sourceLine" id="cb313-16" data-line-number="16"> ulEndTight = {).},</a>
+<a class="sourceLine" id="cb313-17" data-line-number="17"> },</a>
+<a class="sourceLine" id="cb313-18" data-line-number="18">}</a>
+<a class="sourceLine" id="cb313-19" data-line-number="19">This is a tight list</a>
+<a class="sourceLine" id="cb313-20" data-line-number="20"></a>
+<a class="sourceLine" id="cb313-21" data-line-number="21">- the first item</a>
+<a class="sourceLine" id="cb313-22" data-line-number="22">- the second item</a>
+<a class="sourceLine" id="cb313-23" data-line-number="23">- the third item</a>
+<a class="sourceLine" id="cb313-24" data-line-number="24"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb313-25" data-line-number="25"></a>
+<a class="sourceLine" id="cb313-26" data-line-number="26"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb313-27" data-line-number="27"> renderers = {</a>
+<a class="sourceLine" id="cb313-28" data-line-number="28"> interblockSeparator = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb313-29" data-line-number="29"> :<span class="fu">\par</span></a>
+<a class="sourceLine" id="cb313-30" data-line-number="30"> <span class="fu">\def</span>\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb313-31" data-line-number="31"> },</a>
+<a class="sourceLine" id="cb313-32" data-line-number="32"> ulBeginTight = {<span class="kw">\begin</span>{<span class="ex">itemize</span>}},</a>
+<a class="sourceLine" id="cb313-33" data-line-number="33"> ulItem = {<span class="fu">\item</span>},</a>
+<a class="sourceLine" id="cb313-34" data-line-number="34"> ulItemEnd = {.},</a>
+<a class="sourceLine" id="cb313-35" data-line-number="35"> ulEnd = {<span class="kw">\end</span>{<span class="ex">itemize</span>}},</a>
+<a class="sourceLine" id="cb313-36" data-line-number="36"> },</a>
+<a class="sourceLine" id="cb313-37" data-line-number="37">}</a>
+<a class="sourceLine" id="cb313-38" data-line-number="38">This is a loose list</a>
+<a class="sourceLine" id="cb313-39" data-line-number="39"></a>
+<a class="sourceLine" id="cb313-40" data-line-number="40">- This is the first item</a>
+<a class="sourceLine" id="cb313-41" data-line-number="41"></a>
+<a class="sourceLine" id="cb313-42" data-line-number="42">- This is the second item</a>
+<a class="sourceLine" id="cb313-43" data-line-number="43"></a>
+<a class="sourceLine" id="cb313-44" data-line-number="44">- This is the third item</a>
+<a class="sourceLine" id="cb313-45" data-line-number="45"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb313-46" data-line-number="46"></a>
+<a class="sourceLine" id="cb313-47" data-line-number="47"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb314"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb314-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight list (the first item, the second item, and the third item).</p>
+<p>This is a loose list:</p>
+<ul>
+<li><p>This is the first item.</p></li>
+<li><p>This is the second item.</p></li>
+<li><p>This is the third item.</p></li>
+</ul>
+</blockquote>
+<h5 id="context-example-29" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb315"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb315-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb315-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionTightLists{true}</a>
+<a class="sourceLine" id="cb315-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb315-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb315-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererInterblockSeparator{}</a>
+<a class="sourceLine" id="cb315-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererUlBeginTight{ (}</a>
+<a class="sourceLine" id="cb315-7" data-line-number="7"><span class="fu">\def</span>\markdownRendererUlItem{<span class="co">%</span></a>
+<a class="sourceLine" id="cb315-8" data-line-number="8"> \def\markdownRendererUlItem{<span class="co">%</span></a>
+<a class="sourceLine" id="cb315-9" data-line-number="9"> ,</a>
+<a class="sourceLine" id="cb315-10" data-line-number="10"> \def\markdownRendererUlItem{, and }<span class="co">%</span></a>
+<a class="sourceLine" id="cb315-11" data-line-number="11"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb315-12" data-line-number="12">}</a>
+<a class="sourceLine" id="cb315-13" data-line-number="13"><span class="fu">\def</span>\markdownRendererUlItemEnd{}</a>
+<a class="sourceLine" id="cb315-14" data-line-number="14"><span class="fu">\def</span>\markdownRendererUlEndTight{).}</a>
+<a class="sourceLine" id="cb315-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb315-16" data-line-number="16"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb315-17" data-line-number="17">This is a tight list</a>
+<a class="sourceLine" id="cb315-18" data-line-number="18"></a>
+<a class="sourceLine" id="cb315-19" data-line-number="19">- the first item</a>
+<a class="sourceLine" id="cb315-20" data-line-number="20">- the second item</a>
+<a class="sourceLine" id="cb315-21" data-line-number="21">- the third item</a>
+<a class="sourceLine" id="cb315-22" data-line-number="22"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb315-23" data-line-number="23"></a>
+<a class="sourceLine" id="cb315-24" data-line-number="24"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb315-25" data-line-number="25"> :\par</a>
+<a class="sourceLine" id="cb315-26" data-line-number="26"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb315-27" data-line-number="27">}</a>
+<a class="sourceLine" id="cb315-28" data-line-number="28"><span class="fu">\def</span>\markdownRendererUlBegin{\startitemize}</a>
+<a class="sourceLine" id="cb315-29" data-line-number="29"><span class="fu">\def</span>\markdownRendererUlItem{\item}</a>
+<a class="sourceLine" id="cb315-30" data-line-number="30"><span class="fu">\def</span>\markdownRendererUlItemEnd{.}</a>
+<a class="sourceLine" id="cb315-31" data-line-number="31"><span class="fu">\def</span>\markdownRendererUlEnd{\stopitemize}</a>
+<a class="sourceLine" id="cb315-32" data-line-number="32"></a>
+<a class="sourceLine" id="cb315-33" data-line-number="33"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb315-34" data-line-number="34">This is a loose list</a>
+<a class="sourceLine" id="cb315-35" data-line-number="35"></a>
+<a class="sourceLine" id="cb315-36" data-line-number="36">- This is the first item</a>
+<a class="sourceLine" id="cb315-37" data-line-number="37"></a>
+<a class="sourceLine" id="cb315-38" data-line-number="38">- This is the second item</a>
+<a class="sourceLine" id="cb315-39" data-line-number="39"></a>
+<a class="sourceLine" id="cb315-40" data-line-number="40">- This is the third item</a>
+<a class="sourceLine" id="cb315-41" data-line-number="41"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb315-42" data-line-number="42"></a>
+<a class="sourceLine" id="cb315-43" data-line-number="43"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb316"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb316-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight list (the first item, the second item, and the third item).</p>
+<p>This is a loose list:</p>
+<ul>
+<li><p>This is the first item.</p></li>
+<li><p>This is the second item.</p></li>
+<li><p>This is the third item.</p></li>
+</ul>
+</blockquote>
+<h4 id="ordered-list-renderers"><span class="header-section-number">2.3.1.11</span> Ordered List Renderers</h4>
+<p>The <code>\markdownRendererOlBegin</code> macro represents the beginning of an ordered list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments.</p>
+<p>The <code>\markdownRendererOlBeginTight</code> macro represents the beginning of an ordered list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererOlItem</code> macro represents an item in an ordered list. This macro will only be produced, when the <strong><code>startNumber</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererOlItemEnd</code> macro represents the end of an item in an ordered list. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererOlItemWithNumber</code> macro represents an item in an ordered list. This macro will only be produced, when the <strong><code>startNumber</code></strong> option is <code>true</code>. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererOlEnd</code> macro represents the end of an ordered list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments.</p>
+<p>The <code>\markdownRendererOlEndTight</code> macro represents the end of an ordered list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-20" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb317"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb317-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb317-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionTightLists{true}</a>
+<a class="sourceLine" id="cb317-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionStartNumber{true}</a>
+<a class="sourceLine" id="cb317-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb317-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererInterblockSeparator{}</a>
+<a class="sourceLine" id="cb317-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererOlBeginTight{ (}</a>
+<a class="sourceLine" id="cb317-7" data-line-number="7"><span class="fu">\def</span>\markdownRendererOlItemWithNumber#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb317-8" data-line-number="8"> \ifnum #1=1\relax</a>
+<a class="sourceLine" id="cb317-9" data-line-number="9"> the first</a>
+<a class="sourceLine" id="cb317-10" data-line-number="10"> \else</a>
+<a class="sourceLine" id="cb317-11" data-line-number="11"> \ifnum #1=2\relax</a>
+<a class="sourceLine" id="cb317-12" data-line-number="12"> , the second</a>
+<a class="sourceLine" id="cb317-13" data-line-number="13"> \else</a>
+<a class="sourceLine" id="cb317-14" data-line-number="14"> , and the third</a>
+<a class="sourceLine" id="cb317-15" data-line-number="15"> \fi</a>
+<a class="sourceLine" id="cb317-16" data-line-number="16"> \fi</a>
+<a class="sourceLine" id="cb317-17" data-line-number="17">}</a>
+<a class="sourceLine" id="cb317-18" data-line-number="18"><span class="fu">\def</span>\markdownRendererOlItemEnd{}</a>
+<a class="sourceLine" id="cb317-19" data-line-number="19"><span class="fu">\def</span>\markdownRendererOlEndTight{).}</a>
+<a class="sourceLine" id="cb317-20" data-line-number="20"></a>
+<a class="sourceLine" id="cb317-21" data-line-number="21"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb317-22" data-line-number="22">This is a tight list</a>
+<a class="sourceLine" id="cb317-23" data-line-number="23"></a>
+<a class="sourceLine" id="cb317-24" data-line-number="24">1. item</a>
+<a class="sourceLine" id="cb317-25" data-line-number="25">2. item</a>
+<a class="sourceLine" id="cb317-26" data-line-number="26">3. item</a>
+<a class="sourceLine" id="cb317-27" data-line-number="27"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb317-28" data-line-number="28"></a>
+<a class="sourceLine" id="cb317-29" data-line-number="29"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb317-30" data-line-number="30"> :\par</a>
+<a class="sourceLine" id="cb317-31" data-line-number="31"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb317-32" data-line-number="32">}</a>
+<a class="sourceLine" id="cb317-33" data-line-number="33"><span class="fu">\def</span>\markdownRendererOlBegin{}</a>
+<a class="sourceLine" id="cb317-34" data-line-number="34"><span class="fu">\def</span>\markdownRendererOlItemWithNumber#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb317-35" data-line-number="35"> #1.\kern 0.5em<span class="co">%</span></a>
+<a class="sourceLine" id="cb317-36" data-line-number="36"> This is the</a>
+<a class="sourceLine" id="cb317-37" data-line-number="37"> \ifnum #1=1\relax</a>
+<a class="sourceLine" id="cb317-38" data-line-number="38"> first</a>
+<a class="sourceLine" id="cb317-39" data-line-number="39"> \else</a>
+<a class="sourceLine" id="cb317-40" data-line-number="40"> \ifnum #1=2\relax</a>
+<a class="sourceLine" id="cb317-41" data-line-number="41"> second</a>
+<a class="sourceLine" id="cb317-42" data-line-number="42"> \else</a>
+<a class="sourceLine" id="cb317-43" data-line-number="43"> third</a>
+<a class="sourceLine" id="cb317-44" data-line-number="44"> \fi</a>
+<a class="sourceLine" id="cb317-45" data-line-number="45"> \fi</a>
+<a class="sourceLine" id="cb317-46" data-line-number="46">}</a>
+<a class="sourceLine" id="cb317-47" data-line-number="47"><span class="fu">\def</span>\markdownRendererOlItemEnd{.\par}</a>
+<a class="sourceLine" id="cb317-48" data-line-number="48"><span class="fu">\def</span>\markdownRendererOlEnd{}</a>
+<a class="sourceLine" id="cb317-49" data-line-number="49"></a>
+<a class="sourceLine" id="cb317-50" data-line-number="50"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb317-51" data-line-number="51">This is a loose list</a>
+<a class="sourceLine" id="cb317-52" data-line-number="52"></a>
+<a class="sourceLine" id="cb317-53" data-line-number="53">1. item</a>
+<a class="sourceLine" id="cb317-54" data-line-number="54"></a>
+<a class="sourceLine" id="cb317-55" data-line-number="55">2. item</a>
+<a class="sourceLine" id="cb317-56" data-line-number="56"></a>
+<a class="sourceLine" id="cb317-57" data-line-number="57">3. item</a>
+<a class="sourceLine" id="cb317-58" data-line-number="58"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb317-59" data-line-number="59"></a>
+<a class="sourceLine" id="cb317-60" data-line-number="60"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb318"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb318-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight list (the first item, the second item, and the third item).</p>
+<p>This is a loose list:</p>
+<ol type="1">
+<li><p>This is the first item.</p></li>
+<li><p>This is the second item.</p></li>
+<li><p>This is the third item.</p></li>
+</ol>
+</blockquote>
+<h5 id="latex-example-35" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb319"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb319-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb319-2" data-line-number="2"><span class="bu">\usepackage</span>[tightLists, startNumber]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb319-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb319-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb319-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb319-6" data-line-number="6"> renderers = {</a>
+<a class="sourceLine" id="cb319-7" data-line-number="7"> interblockSeparator = {},</a>
+<a class="sourceLine" id="cb319-8" data-line-number="8"> olBeginTight = { (},</a>
+<a class="sourceLine" id="cb319-9" data-line-number="9"> olItemWithNumber = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb319-10" data-line-number="10"> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></a>
+<a class="sourceLine" id="cb319-11" data-line-number="11"> the first</a>
+<a class="sourceLine" id="cb319-12" data-line-number="12"> <span class="fu">\else</span></a>
+<a class="sourceLine" id="cb319-13" data-line-number="13"> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></a>
+<a class="sourceLine" id="cb319-14" data-line-number="14"> , the second</a>
+<a class="sourceLine" id="cb319-15" data-line-number="15"> <span class="fu">\else</span></a>
+<a class="sourceLine" id="cb319-16" data-line-number="16"> , and the third</a>
+<a class="sourceLine" id="cb319-17" data-line-number="17"> <span class="fu">\fi</span></a>
+<a class="sourceLine" id="cb319-18" data-line-number="18"> <span class="fu">\fi</span></a>
+<a class="sourceLine" id="cb319-19" data-line-number="19"> },</a>
+<a class="sourceLine" id="cb319-20" data-line-number="20"> olItemEnd = {},</a>
+<a class="sourceLine" id="cb319-21" data-line-number="21"> olEndTight = {).},</a>
+<a class="sourceLine" id="cb319-22" data-line-number="22"> },</a>
+<a class="sourceLine" id="cb319-23" data-line-number="23">}</a>
+<a class="sourceLine" id="cb319-24" data-line-number="24">This is a tight list</a>
+<a class="sourceLine" id="cb319-25" data-line-number="25"></a>
+<a class="sourceLine" id="cb319-26" data-line-number="26">1. item</a>
+<a class="sourceLine" id="cb319-27" data-line-number="27">2. item</a>
+<a class="sourceLine" id="cb319-28" data-line-number="28">3. item</a>
+<a class="sourceLine" id="cb319-29" data-line-number="29"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb319-30" data-line-number="30"></a>
+<a class="sourceLine" id="cb319-31" data-line-number="31"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb319-32" data-line-number="32"> renderers = {</a>
+<a class="sourceLine" id="cb319-33" data-line-number="33"> interblockSeparator = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb319-34" data-line-number="34"> :<span class="fu">\par</span></a>
+<a class="sourceLine" id="cb319-35" data-line-number="35"> <span class="fu">\def</span>\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb319-36" data-line-number="36"> },</a>
+<a class="sourceLine" id="cb319-37" data-line-number="37"> olBeginTight = {<span class="kw">\begin</span>{<span class="ex">enumerate</span>}},</a>
+<a class="sourceLine" id="cb319-38" data-line-number="38"> olItemWithNumber = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb319-39" data-line-number="39"> <span class="fu">\item</span> This is the</a>
+<a class="sourceLine" id="cb319-40" data-line-number="40"> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></a>
+<a class="sourceLine" id="cb319-41" data-line-number="41"> first</a>
+<a class="sourceLine" id="cb319-42" data-line-number="42"> <span class="fu">\else</span></a>
+<a class="sourceLine" id="cb319-43" data-line-number="43"> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></a>
+<a class="sourceLine" id="cb319-44" data-line-number="44"> second</a>
+<a class="sourceLine" id="cb319-45" data-line-number="45"> <span class="fu">\else</span></a>
+<a class="sourceLine" id="cb319-46" data-line-number="46"> third</a>
+<a class="sourceLine" id="cb319-47" data-line-number="47"> <span class="fu">\fi</span></a>
+<a class="sourceLine" id="cb319-48" data-line-number="48"> <span class="fu">\fi</span></a>
+<a class="sourceLine" id="cb319-49" data-line-number="49"> },</a>
+<a class="sourceLine" id="cb319-50" data-line-number="50"> olItemEnd = {.},</a>
+<a class="sourceLine" id="cb319-51" data-line-number="51"> olEnd = {<span class="kw">\end</span>{<span class="ex">enumerate</span>}},</a>
+<a class="sourceLine" id="cb319-52" data-line-number="52"> },</a>
+<a class="sourceLine" id="cb319-53" data-line-number="53">}</a>
+<a class="sourceLine" id="cb319-54" data-line-number="54">This is a loose list</a>
+<a class="sourceLine" id="cb319-55" data-line-number="55"></a>
+<a class="sourceLine" id="cb319-56" data-line-number="56">1. item</a>
+<a class="sourceLine" id="cb319-57" data-line-number="57"></a>
+<a class="sourceLine" id="cb319-58" data-line-number="58">2. item</a>
+<a class="sourceLine" id="cb319-59" data-line-number="59"></a>
+<a class="sourceLine" id="cb319-60" data-line-number="60">3. item</a>
+<a class="sourceLine" id="cb319-61" data-line-number="61"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb319-62" data-line-number="62"></a>
+<a class="sourceLine" id="cb319-63" data-line-number="63"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb320"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb320-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight list (the first item, the second item, and the third item).</p>
+<p>This is a loose list:</p>
+<ol type="1">
+<li><p>This is the first item.</p></li>
+<li><p>This is the second item.</p></li>
+<li><p>This is the third item.</p></li>
+</ol>
+</blockquote>
+<h5 id="context-example-30" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb321"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb321-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb321-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionTightLists{true}</a>
+<a class="sourceLine" id="cb321-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionStartNumber{true}</a>
+<a class="sourceLine" id="cb321-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb321-5" data-line-number="5"></a>
+<a class="sourceLine" id="cb321-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererInterblockSeparator{}</a>
+<a class="sourceLine" id="cb321-7" data-line-number="7"><span class="fu">\def</span>\markdownRendererOlBeginTight{ (}</a>
+<a class="sourceLine" id="cb321-8" data-line-number="8"><span class="fu">\def</span>\markdownRendererOlItemWithNumber#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb321-9" data-line-number="9"> \ifnum #1=1\relax</a>
+<a class="sourceLine" id="cb321-10" data-line-number="10"> the first</a>
+<a class="sourceLine" id="cb321-11" data-line-number="11"> \else</a>
+<a class="sourceLine" id="cb321-12" data-line-number="12"> \ifnum #1=2\relax</a>
+<a class="sourceLine" id="cb321-13" data-line-number="13"> , the second</a>
+<a class="sourceLine" id="cb321-14" data-line-number="14"> \else</a>
+<a class="sourceLine" id="cb321-15" data-line-number="15"> , and the third</a>
+<a class="sourceLine" id="cb321-16" data-line-number="16"> \fi</a>
+<a class="sourceLine" id="cb321-17" data-line-number="17"> \fi</a>
+<a class="sourceLine" id="cb321-18" data-line-number="18">}</a>
+<a class="sourceLine" id="cb321-19" data-line-number="19"><span class="fu">\def</span>\markdownRendererOlItemEnd{}</a>
+<a class="sourceLine" id="cb321-20" data-line-number="20"><span class="fu">\def</span>\markdownRendererOlEndTight{).}</a>
+<a class="sourceLine" id="cb321-21" data-line-number="21"></a>
+<a class="sourceLine" id="cb321-22" data-line-number="22"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb321-23" data-line-number="23">This is a tight list</a>
+<a class="sourceLine" id="cb321-24" data-line-number="24"></a>
+<a class="sourceLine" id="cb321-25" data-line-number="25">1. item</a>
+<a class="sourceLine" id="cb321-26" data-line-number="26">2. item</a>
+<a class="sourceLine" id="cb321-27" data-line-number="27">3. item</a>
+<a class="sourceLine" id="cb321-28" data-line-number="28"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb321-29" data-line-number="29"></a>
+<a class="sourceLine" id="cb321-30" data-line-number="30"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb321-31" data-line-number="31"> :\par</a>
+<a class="sourceLine" id="cb321-32" data-line-number="32"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb321-33" data-line-number="33">}</a>
+<a class="sourceLine" id="cb321-34" data-line-number="34"><span class="fu">\def</span>\markdownRendererOlBegin{\startitemize}</a>
+<a class="sourceLine" id="cb321-35" data-line-number="35"><span class="fu">\def</span>\markdownRendererOlItemWithNumber#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb321-36" data-line-number="36"> \sym{#1.}</a>
+<a class="sourceLine" id="cb321-37" data-line-number="37"> This is the</a>
+<a class="sourceLine" id="cb321-38" data-line-number="38"> \ifnum #1=1\relax</a>
+<a class="sourceLine" id="cb321-39" data-line-number="39"> first</a>
+<a class="sourceLine" id="cb321-40" data-line-number="40"> \else</a>
+<a class="sourceLine" id="cb321-41" data-line-number="41"> \ifnum #1=2\relax</a>
+<a class="sourceLine" id="cb321-42" data-line-number="42"> second</a>
+<a class="sourceLine" id="cb321-43" data-line-number="43"> \else</a>
+<a class="sourceLine" id="cb321-44" data-line-number="44"> third</a>
+<a class="sourceLine" id="cb321-45" data-line-number="45"> \fi</a>
+<a class="sourceLine" id="cb321-46" data-line-number="46"> \fi</a>
+<a class="sourceLine" id="cb321-47" data-line-number="47">}</a>
+<a class="sourceLine" id="cb321-48" data-line-number="48"><span class="fu">\def</span>\markdownRendererOlItemEnd{.\par}</a>
+<a class="sourceLine" id="cb321-49" data-line-number="49"><span class="fu">\def</span>\markdownRendererOlEnd{\stopitemize}</a>
+<a class="sourceLine" id="cb321-50" data-line-number="50"></a>
+<a class="sourceLine" id="cb321-51" data-line-number="51"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb321-52" data-line-number="52">This is a loose list</a>
+<a class="sourceLine" id="cb321-53" data-line-number="53"></a>
+<a class="sourceLine" id="cb321-54" data-line-number="54">1. item</a>
+<a class="sourceLine" id="cb321-55" data-line-number="55"></a>
+<a class="sourceLine" id="cb321-56" data-line-number="56">2. item</a>
+<a class="sourceLine" id="cb321-57" data-line-number="57"></a>
+<a class="sourceLine" id="cb321-58" data-line-number="58">3. item</a>
+<a class="sourceLine" id="cb321-59" data-line-number="59"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb321-60" data-line-number="60"></a>
+<a class="sourceLine" id="cb321-61" data-line-number="61"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb322"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb322-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight list (the first item, the second item, and the third item).</p>
+<p>This is a loose list:</p>
+<ol type="1">
+<li><p>This is the first item.</p></li>
+<li><p>This is the second item.</p></li>
+<li><p>This is the third item.</p></li>
+</ol>
+</blockquote>
+<h4 id="definition-list-renderers"><span class="header-section-number">2.3.1.12</span> Definition List Renderers</h4>
+<p>The following macros are only produced, when the <strong><code>definitionLists</code></strong> option is <code>true</code>.</p>
+<p>The <code>\markdownRendererDlBegin</code> macro represents the beginning of a definition list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments.</p>
+<p>The <code>\markdownRendererDlBeginTight</code> macro represents the beginning of a definition list that contains an item with several paragraphs of text (the list is not tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<p>The <code>\markdownRendererDlItem</code> macro represents a term in a definition list. The macro receives a single argument that corresponds to the term being defined.</p>
+<p>The <code>\markdownRendererDlItemEnd</code> macro represents the end of a list of definitions for a single term.</p>
+<p>The <code>\markdownRendererDlDefinitionBegin</code> macro represents the beginning of a definition in a definition list. There can be several definitions for a single term.</p>
+<p>The <code>\markdownRendererDlDefinitionEnd</code> macro represents the end of a definition in a definition list. There can be several definitions for a single term.</p>
+<p>The <code>\markdownRendererDlEnd</code> macro represents the end of a definition list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments.</p>
+<p>The <code>\markdownRendererDlEndTight</code> macro represents the end of a definition list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is <code>false</code>. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-21" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb323"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb323-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb323-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionDefinitionLists{true}</a>
+<a class="sourceLine" id="cb323-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionTightLists{true}</a>
+<a class="sourceLine" id="cb323-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb323-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-6" data-line-number="6"> :<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-7" data-line-number="7"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-8" data-line-number="8">}</a>
+<a class="sourceLine" id="cb323-9" data-line-number="9"><span class="fu">\def</span>\markdownRendererDlBeginTight{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-10" data-line-number="10"> \begingroup</a>
+<a class="sourceLine" id="cb323-11" data-line-number="11"> \parindent=0pt</a>
+<a class="sourceLine" id="cb323-12" data-line-number="12">}</a>
+<a class="sourceLine" id="cb323-13" data-line-number="13"><span class="fu">\def</span>\markdownRendererDlItem#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-14" data-line-number="14"> \par{\bf#1}<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-15" data-line-number="15"> \def\markdownRendererDlDefinitionEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-16" data-line-number="16"> ,</a>
+<a class="sourceLine" id="cb323-17" data-line-number="17"> \def\markdownRendererDlDefinitionEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-18" data-line-number="18"> , and</a>
+<a class="sourceLine" id="cb323-19" data-line-number="19"> \def\markdownRendererDlDefinitionEnd{.}<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-20" data-line-number="20"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-21" data-line-number="21"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-22" data-line-number="22">}</a>
+<a class="sourceLine" id="cb323-23" data-line-number="23"><span class="fu">\def</span>\markdownRendererDlItemEnd{}</a>
+<a class="sourceLine" id="cb323-24" data-line-number="24"><span class="fu">\def</span>\markdownRendererDlDefinitionBegin{\par--\kern 0.5em}</a>
+<a class="sourceLine" id="cb323-25" data-line-number="25"><span class="fu">\def</span>\markdownRendererDlEndTight{\endgroup}</a>
+<a class="sourceLine" id="cb323-26" data-line-number="26"></a>
+<a class="sourceLine" id="cb323-27" data-line-number="27"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb323-28" data-line-number="28">This is a tight definition list</a>
+<a class="sourceLine" id="cb323-29" data-line-number="29"></a>
+<a class="sourceLine" id="cb323-30" data-line-number="30">Coffee</a>
+<a class="sourceLine" id="cb323-31" data-line-number="31">: black hot drink</a>
+<a class="sourceLine" id="cb323-32" data-line-number="32">: prepared from roasted coffee beans</a>
+<a class="sourceLine" id="cb323-33" data-line-number="33">: one of the most traded agricultural commodities in the world</a>
+<a class="sourceLine" id="cb323-34" data-line-number="34"></a>
+<a class="sourceLine" id="cb323-35" data-line-number="35">Milk</a>
+<a class="sourceLine" id="cb323-36" data-line-number="36">: white cold drink</a>
+<a class="sourceLine" id="cb323-37" data-line-number="37">: nutrient-rich</a>
+<a class="sourceLine" id="cb323-38" data-line-number="38">: produced on an industrial scale</a>
+<a class="sourceLine" id="cb323-39" data-line-number="39"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb323-40" data-line-number="40"></a>
+<a class="sourceLine" id="cb323-41" data-line-number="41"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-42" data-line-number="42"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-43" data-line-number="43">}</a>
+<a class="sourceLine" id="cb323-44" data-line-number="44"><span class="fu">\def</span>\markdownRendererDlBegin{}</a>
+<a class="sourceLine" id="cb323-45" data-line-number="45"><span class="fu">\def</span>\markdownRendererDlItem#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-46" data-line-number="46"> . #1 is a</a>
+<a class="sourceLine" id="cb323-47" data-line-number="47"> \def\markdownRendererDlDefinitionBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-48" data-line-number="48"> \def\markdownRendererDlDefinitionBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-49" data-line-number="49"> ,</a>
+<a class="sourceLine" id="cb323-50" data-line-number="50"> \def\markdownRendererDlDefinitionBegin{, and }<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-51" data-line-number="51"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-52" data-line-number="52"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb323-53" data-line-number="53">}</a>
+<a class="sourceLine" id="cb323-54" data-line-number="54"><span class="fu">\def</span>\markdownRendererDlItemEnd{}</a>
+<a class="sourceLine" id="cb323-55" data-line-number="55"><span class="fu">\def</span>\markdownRendererDlDefinitionEnd{}</a>
+<a class="sourceLine" id="cb323-56" data-line-number="56"><span class="fu">\def</span>\markdownRendererDlEnd{.}</a>
+<a class="sourceLine" id="cb323-57" data-line-number="57"></a>
+<a class="sourceLine" id="cb323-58" data-line-number="58"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb323-59" data-line-number="59">This is a loose definition list</a>
+<a class="sourceLine" id="cb323-60" data-line-number="60"></a>
+<a class="sourceLine" id="cb323-61" data-line-number="61">Coffee</a>
+<a class="sourceLine" id="cb323-62" data-line-number="62"></a>
+<a class="sourceLine" id="cb323-63" data-line-number="63">: black hot drink</a>
+<a class="sourceLine" id="cb323-64" data-line-number="64"></a>
+<a class="sourceLine" id="cb323-65" data-line-number="65">: prepared from roasted coffee beans</a>
+<a class="sourceLine" id="cb323-66" data-line-number="66"></a>
+<a class="sourceLine" id="cb323-67" data-line-number="67">: one of the most traded agricultural commodities in the world</a>
+<a class="sourceLine" id="cb323-68" data-line-number="68"></a>
+<a class="sourceLine" id="cb323-69" data-line-number="69">Milk</a>
+<a class="sourceLine" id="cb323-70" data-line-number="70"></a>
+<a class="sourceLine" id="cb323-71" data-line-number="71">: white cold drink</a>
+<a class="sourceLine" id="cb323-72" data-line-number="72"></a>
+<a class="sourceLine" id="cb323-73" data-line-number="73">: nutrient-rich</a>
+<a class="sourceLine" id="cb323-74" data-line-number="74"></a>
+<a class="sourceLine" id="cb323-75" data-line-number="75">: produced on an industrial scale</a>
+<a class="sourceLine" id="cb323-76" data-line-number="76"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb323-77" data-line-number="77"></a>
+<a class="sourceLine" id="cb323-78" data-line-number="78"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb324"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb324-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight definition list:</p>
+<p><strong>Coffee</strong></p>
+<ul>
+<li>black hot drink,</li>
+<li>prepared from roasted coffee beans, and</li>
+<li>one of the most traded agricultural commodities in the world.</li>
+</ul>
+<p><strong>Milk</strong></p>
+<ul>
+<li>white cold drink,</li>
+<li>nutrient-rich, and</li>
+<li>produced on an industrial scale.</li>
+</ul>
+<p>This is a loose definition list. Coffee is a black hot drink, prepared from roasted coffee beans, and one of the most traded agricultural commodities in the world. Milk is a white cold drink, nutrient-rich, and produced on an industrial scale.</p>
+</blockquote>
+<h5 id="latex-example-36" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb325"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb325-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb325-2" data-line-number="2"><span class="bu">\usepackage</span>[definitionLists, tightLists]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb325-3" data-line-number="3"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb325-4" data-line-number="4"></a>
+<a class="sourceLine" id="cb325-5" data-line-number="5"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb325-6" data-line-number="6"> renderers = {</a>
+<a class="sourceLine" id="cb325-7" data-line-number="7"> interblockSeparator = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-8" data-line-number="8"> :<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-9" data-line-number="9"> <span class="fu">\def</span>\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-10" data-line-number="10"> },</a>
+<a class="sourceLine" id="cb325-11" data-line-number="11"> dlBeginTight = {<span class="kw">\begin</span>{<span class="ex">description</span>}},</a>
+<a class="sourceLine" id="cb325-12" data-line-number="12"> dlItem = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-13" data-line-number="13"> <span class="fu">\item</span>[#1]</a>
+<a class="sourceLine" id="cb325-14" data-line-number="14"> <span class="kw">\begin</span>{<span class="ex">itemize</span>}</a>
+<a class="sourceLine" id="cb325-15" data-line-number="15"> <span class="fu">\def</span>\markdownRendererDlDefinitionEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-16" data-line-number="16"> ,</a>
+<a class="sourceLine" id="cb325-17" data-line-number="17"> \def\markdownRendererDlDefinitionEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-18" data-line-number="18"> , and</a>
+<a class="sourceLine" id="cb325-19" data-line-number="19"> \def\markdownRendererDlDefinitionEnd{.}<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-20" data-line-number="20"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-21" data-line-number="21"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-22" data-line-number="22"> },</a>
+<a class="sourceLine" id="cb325-23" data-line-number="23"> dlItemEnd = {<span class="kw">\end</span>{<span class="ex">itemize</span>}},</a>
+<a class="sourceLine" id="cb325-24" data-line-number="24"> dlDefinitionBegin = <span class="fu">\item</span>,</a>
+<a class="sourceLine" id="cb325-25" data-line-number="25"> dlEndTight = {<span class="kw">\end</span>{<span class="ex">description</span>}},</a>
+<a class="sourceLine" id="cb325-26" data-line-number="26"> },</a>
+<a class="sourceLine" id="cb325-27" data-line-number="27">}</a>
+<a class="sourceLine" id="cb325-28" data-line-number="28">This is a tight definition list</a>
+<a class="sourceLine" id="cb325-29" data-line-number="29"></a>
+<a class="sourceLine" id="cb325-30" data-line-number="30">Coffee</a>
+<a class="sourceLine" id="cb325-31" data-line-number="31">: black hot drink</a>
+<a class="sourceLine" id="cb325-32" data-line-number="32">: prepared from roasted coffee beans</a>
+<a class="sourceLine" id="cb325-33" data-line-number="33">: one of the most traded agricultural commodities in the world</a>
+<a class="sourceLine" id="cb325-34" data-line-number="34"></a>
+<a class="sourceLine" id="cb325-35" data-line-number="35">Milk</a>
+<a class="sourceLine" id="cb325-36" data-line-number="36">: white cold drink</a>
+<a class="sourceLine" id="cb325-37" data-line-number="37">: nutrient-rich</a>
+<a class="sourceLine" id="cb325-38" data-line-number="38">: produced on an industrial scale</a>
+<a class="sourceLine" id="cb325-39" data-line-number="39"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb325-40" data-line-number="40"></a>
+<a class="sourceLine" id="cb325-41" data-line-number="41"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb325-42" data-line-number="42"> renderers = {</a>
+<a class="sourceLine" id="cb325-43" data-line-number="43"> interblockSeparator = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-44" data-line-number="44"> <span class="fu">\def</span>\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-45" data-line-number="45"> },</a>
+<a class="sourceLine" id="cb325-46" data-line-number="46"> dlBegin = {},</a>
+<a class="sourceLine" id="cb325-47" data-line-number="47"> dlItem = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-48" data-line-number="48"> . #1 is a</a>
+<a class="sourceLine" id="cb325-49" data-line-number="49"> <span class="fu">\def</span>\markdownRendererDlDefinitionBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-50" data-line-number="50"> \def\markdownRendererDlDefinitionBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-51" data-line-number="51"> ,</a>
+<a class="sourceLine" id="cb325-52" data-line-number="52"> \def\markdownRendererDlDefinitionBegin{, and }<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-53" data-line-number="53"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-54" data-line-number="54"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb325-55" data-line-number="55"> },</a>
+<a class="sourceLine" id="cb325-56" data-line-number="56"> dlItemEnd = {},</a>
+<a class="sourceLine" id="cb325-57" data-line-number="57"> dlDefinitionEnd = {},</a>
+<a class="sourceLine" id="cb325-58" data-line-number="58"> dlEnd = {.},</a>
+<a class="sourceLine" id="cb325-59" data-line-number="59"> },</a>
+<a class="sourceLine" id="cb325-60" data-line-number="60">}</a>
+<a class="sourceLine" id="cb325-61" data-line-number="61">This is a loose definition list</a>
+<a class="sourceLine" id="cb325-62" data-line-number="62"></a>
+<a class="sourceLine" id="cb325-63" data-line-number="63">Coffee</a>
+<a class="sourceLine" id="cb325-64" data-line-number="64"></a>
+<a class="sourceLine" id="cb325-65" data-line-number="65">: black hot drink</a>
+<a class="sourceLine" id="cb325-66" data-line-number="66"></a>
+<a class="sourceLine" id="cb325-67" data-line-number="67">: prepared from roasted coffee beans</a>
+<a class="sourceLine" id="cb325-68" data-line-number="68"></a>
+<a class="sourceLine" id="cb325-69" data-line-number="69">: one of the most traded agricultural commodities in the world</a>
+<a class="sourceLine" id="cb325-70" data-line-number="70"></a>
+<a class="sourceLine" id="cb325-71" data-line-number="71">Milk</a>
+<a class="sourceLine" id="cb325-72" data-line-number="72"></a>
+<a class="sourceLine" id="cb325-73" data-line-number="73">: white cold drink</a>
+<a class="sourceLine" id="cb325-74" data-line-number="74"></a>
+<a class="sourceLine" id="cb325-75" data-line-number="75">: nutrient-rich</a>
+<a class="sourceLine" id="cb325-76" data-line-number="76"></a>
+<a class="sourceLine" id="cb325-77" data-line-number="77">: produced on an industrial scale</a>
+<a class="sourceLine" id="cb325-78" data-line-number="78"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb325-79" data-line-number="79"></a>
+<a class="sourceLine" id="cb325-80" data-line-number="80"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb326"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb326-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight definition list:</p>
+<p><strong>Coffee</strong></p>
+<ul>
+<li>black hot drink,</li>
+<li>prepared from roasted coffee beans, and</li>
+<li>one of the most traded agricultural commodities in the world.</li>
+</ul>
+<p><strong>Milk</strong></p>
+<ul>
+<li>white cold drink,</li>
+<li>nutrient-rich, and</li>
+<li>produced on an industrial scale.</li>
+</ul>
+<p>This is a loose definition list. Coffee is a black hot drink, prepared from roasted coffee beans, and one of the most traded agricultural commodities in the world. Milk is a white cold drink, nutrient-rich, and produced on an industrial scale.</p>
+</blockquote>
+<h5 id="context-example-31" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb327"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb327-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb327-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionDefinitionLists{true}</a>
+<a class="sourceLine" id="cb327-3" data-line-number="3"><span class="fu">\def</span>\markdownOptionTightLists{true}</a>
+<a class="sourceLine" id="cb327-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb327-5" data-line-number="5"></a>
+<a class="sourceLine" id="cb327-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-7" data-line-number="7"> :<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-8" data-line-number="8"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-9" data-line-number="9">}</a>
+<a class="sourceLine" id="cb327-10" data-line-number="10"><span class="fu">\def</span>\markdownRendererDlBeginTight{}</a>
+<a class="sourceLine" id="cb327-11" data-line-number="11"><span class="fu">\def</span>\markdownRendererDlItem#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-12" data-line-number="12"> \par{\bf#1}<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-13" data-line-number="13"> \startitemize</a>
+<a class="sourceLine" id="cb327-14" data-line-number="14"> \def\markdownRendererDlDefinitionEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-15" data-line-number="15"> ,</a>
+<a class="sourceLine" id="cb327-16" data-line-number="16"> \def\markdownRendererDlDefinitionEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-17" data-line-number="17"> , and</a>
+<a class="sourceLine" id="cb327-18" data-line-number="18"> \def\markdownRendererDlDefinitionEnd{.}<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-19" data-line-number="19"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-20" data-line-number="20"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-21" data-line-number="21">}</a>
+<a class="sourceLine" id="cb327-22" data-line-number="22"><span class="fu">\def</span>\markdownRendererDlItemEnd{\stopitemize}</a>
+<a class="sourceLine" id="cb327-23" data-line-number="23"><span class="fu">\def</span>\markdownRendererDlDefinitionBegin{\item}</a>
+<a class="sourceLine" id="cb327-24" data-line-number="24"><span class="fu">\def</span>\markdownRendererDlEndTight{}</a>
+<a class="sourceLine" id="cb327-25" data-line-number="25"></a>
+<a class="sourceLine" id="cb327-26" data-line-number="26"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb327-27" data-line-number="27">This is a tight definition list</a>
+<a class="sourceLine" id="cb327-28" data-line-number="28"></a>
+<a class="sourceLine" id="cb327-29" data-line-number="29">Coffee</a>
+<a class="sourceLine" id="cb327-30" data-line-number="30">: black hot drink</a>
+<a class="sourceLine" id="cb327-31" data-line-number="31">: prepared from roasted coffee beans</a>
+<a class="sourceLine" id="cb327-32" data-line-number="32">: one of the most traded agricultural commodities in the world</a>
+<a class="sourceLine" id="cb327-33" data-line-number="33"></a>
+<a class="sourceLine" id="cb327-34" data-line-number="34">Milk</a>
+<a class="sourceLine" id="cb327-35" data-line-number="35">: white cold drink</a>
+<a class="sourceLine" id="cb327-36" data-line-number="36">: nutrient-rich</a>
+<a class="sourceLine" id="cb327-37" data-line-number="37">: produced on an industrial scale</a>
+<a class="sourceLine" id="cb327-38" data-line-number="38"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb327-39" data-line-number="39"></a>
+<a class="sourceLine" id="cb327-40" data-line-number="40"><span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-41" data-line-number="41"> \def\markdownRendererInterblockSeparator{\par}<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-42" data-line-number="42">}</a>
+<a class="sourceLine" id="cb327-43" data-line-number="43"><span class="fu">\def</span>\markdownRendererDlBegin{}</a>
+<a class="sourceLine" id="cb327-44" data-line-number="44"><span class="fu">\def</span>\markdownRendererDlItem#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-45" data-line-number="45"> . #1 is a</a>
+<a class="sourceLine" id="cb327-46" data-line-number="46"> \def\markdownRendererDlDefinitionBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-47" data-line-number="47"> \def\markdownRendererDlDefinitionBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-48" data-line-number="48"> ,</a>
+<a class="sourceLine" id="cb327-49" data-line-number="49"> \def\markdownRendererDlDefinitionBegin{, and }<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-50" data-line-number="50"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-51" data-line-number="51"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb327-52" data-line-number="52">}</a>
+<a class="sourceLine" id="cb327-53" data-line-number="53"><span class="fu">\def</span>\markdownRendererDlItemEnd{}</a>
+<a class="sourceLine" id="cb327-54" data-line-number="54"><span class="fu">\def</span>\markdownRendererDlDefinitionEnd{}</a>
+<a class="sourceLine" id="cb327-55" data-line-number="55"><span class="fu">\def</span>\markdownRendererDlEnd{.}</a>
+<a class="sourceLine" id="cb327-56" data-line-number="56"></a>
+<a class="sourceLine" id="cb327-57" data-line-number="57"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb327-58" data-line-number="58">This is a loose definition list</a>
+<a class="sourceLine" id="cb327-59" data-line-number="59"></a>
+<a class="sourceLine" id="cb327-60" data-line-number="60">Coffee</a>
+<a class="sourceLine" id="cb327-61" data-line-number="61"></a>
+<a class="sourceLine" id="cb327-62" data-line-number="62">: black hot drink</a>
+<a class="sourceLine" id="cb327-63" data-line-number="63"></a>
+<a class="sourceLine" id="cb327-64" data-line-number="64">: prepared from roasted coffee beans</a>
+<a class="sourceLine" id="cb327-65" data-line-number="65"></a>
+<a class="sourceLine" id="cb327-66" data-line-number="66">: one of the most traded agricultural commodities in the world</a>
+<a class="sourceLine" id="cb327-67" data-line-number="67"></a>
+<a class="sourceLine" id="cb327-68" data-line-number="68">Milk</a>
+<a class="sourceLine" id="cb327-69" data-line-number="69"></a>
+<a class="sourceLine" id="cb327-70" data-line-number="70">: white cold drink</a>
+<a class="sourceLine" id="cb327-71" data-line-number="71"></a>
+<a class="sourceLine" id="cb327-72" data-line-number="72">: nutrient-rich</a>
+<a class="sourceLine" id="cb327-73" data-line-number="73"></a>
+<a class="sourceLine" id="cb327-74" data-line-number="74">: produced on an industrial scale</a>
+<a class="sourceLine" id="cb327-75" data-line-number="75"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb327-76" data-line-number="76"></a>
+<a class="sourceLine" id="cb327-77" data-line-number="77"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb328"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb328-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a tight definition list:</p>
+<p><strong>Coffee</strong></p>
+<ul>
+<li>black hot drink,</li>
+<li>prepared from roasted coffee beans, and</li>
+<li>one of the most traded agricultural commodities in the world.</li>
+</ul>
+<p><strong>Milk</strong></p>
+<ul>
+<li>white cold drink,</li>
+<li>nutrient-rich, and</li>
+<li>produced on an industrial scale.</li>
+</ul>
+<p>This is a loose definition list. Coffee is a black hot drink, prepared from roasted coffee beans, and one of the most traded agricultural commodities in the world. Milk is a white cold drink, nutrient-rich, and produced on an industrial scale.</p>
+</blockquote>
+<h4 id="emphasis-renderers"><span class="header-section-number">2.3.1.13</span> Emphasis Renderers</h4>
+<p>The <code>\markdownRendererEmphasis</code> macro represents an emphasized span of text. The macro receives a single argument that corresponds to the emphasized span of text.</p>
+<h5 id="plain-tex-example-22" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb329"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb329-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb329-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererEmphasis#1{{\it#1}}</a>
+<a class="sourceLine" id="cb329-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererStrongEmphasis#1{{\bf#1}}</a>
+<a class="sourceLine" id="cb329-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb329-5" data-line-number="5">This is *emphasis*.</a>
+<a class="sourceLine" id="cb329-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb329-7" data-line-number="7">This is **strong emphasis**.</a>
+<a class="sourceLine" id="cb329-8" data-line-number="8"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb329-9" data-line-number="9"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb330"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb330-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <em>emphasis</em>.</p>
+<p>This is <strong>strong emphasis</strong>.</p>
+</blockquote>
+<h5 id="latex-example-37" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb331"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb331-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb331-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb331-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb331-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb331-5" data-line-number="5"> emphasis = {<span class="fu">\emph</span>{#1}},</a>
+<a class="sourceLine" id="cb331-6" data-line-number="6"> strongEmphasis = {<span class="fu">\textbf</span>{#1}},</a>
+<a class="sourceLine" id="cb331-7" data-line-number="7"> },</a>
+<a class="sourceLine" id="cb331-8" data-line-number="8">}</a>
+<a class="sourceLine" id="cb331-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb331-10" data-line-number="10"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb331-11" data-line-number="11">This is *emphasis*.</a>
+<a class="sourceLine" id="cb331-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb331-13" data-line-number="13">This is **strong emphasis**.</a>
+<a class="sourceLine" id="cb331-14" data-line-number="14"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb331-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb332"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb332-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <em>emphasis</em>.</p>
+<p>This is <strong>strong emphasis</strong>.</p>
+</blockquote>
+<h5 id="context-example-32" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb333"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb333-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb333-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererEmphasis#1{\emph{#1}}</a>
+<a class="sourceLine" id="cb333-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererStrongEmphasis#1{\bold{#1}}</a>
+<a class="sourceLine" id="cb333-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb333-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb333-6" data-line-number="6">This is *emphasis*.</a>
+<a class="sourceLine" id="cb333-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb333-8" data-line-number="8">This is **strong emphasis**.</a>
+<a class="sourceLine" id="cb333-9" data-line-number="9"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb333-10" data-line-number="10"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb334"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb334-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is <em>emphasis</em>.</p>
+<p>This is <strong>strong emphasis</strong>.</p>
+</blockquote>
+<p>The <code>\markdownRendererStrongEmphasis</code> macro represents a strongly emphasized span of text. The macro receives a single argument that corresponds to the emphasized span of text.</p>
+<h4 id="block-quote-renderers"><span class="header-section-number">2.3.1.14</span> Block Quote Renderers</h4>
+<p>The <code>\markdownRendererBlockQuoteBegin</code> macro represents the beginning of a block quote. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-23" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb335"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb335-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb335-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererBlockQuoteBegin{<span class="co">%</span></a>
+<a class="sourceLine" id="cb335-3" data-line-number="3"> \begingroup</a>
+<a class="sourceLine" id="cb335-4" data-line-number="4"> \vskip\parindent</a>
+<a class="sourceLine" id="cb335-5" data-line-number="5"> \leftskip=2\parindent</a>
+<a class="sourceLine" id="cb335-6" data-line-number="6"> \parindent=0pt</a>
+<a class="sourceLine" id="cb335-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb335-8" data-line-number="8"><span class="fu">\def</span>\markdownRendererBlockQuoteEnd{<span class="co">%</span></a>
+<a class="sourceLine" id="cb335-9" data-line-number="9"> \par</a>
+<a class="sourceLine" id="cb335-10" data-line-number="10"> \vskip\parindent</a>
+<a class="sourceLine" id="cb335-11" data-line-number="11"> \endgroup</a>
+<a class="sourceLine" id="cb335-12" data-line-number="12">}</a>
+<a class="sourceLine" id="cb335-13" data-line-number="13"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb335-14" data-line-number="14">A quote from William Shakespeare&#39;s King Lear:</a>
+<a class="sourceLine" id="cb335-15" data-line-number="15"></a>
+<a class="sourceLine" id="cb335-16" data-line-number="16">&gt; This is the excellent foppery of the world that when we are</a>
+<a class="sourceLine" id="cb335-17" data-line-number="17">&gt; sick in fortune---often the surfeit of our own behavior---we</a>
+<a class="sourceLine" id="cb335-18" data-line-number="18">&gt; make guilty of our disasters the sun, the moon, and the</a>
+<a class="sourceLine" id="cb335-19" data-line-number="19">&gt; stars [...]</a>
+<a class="sourceLine" id="cb335-20" data-line-number="20"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb335-21" data-line-number="21"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb336"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb336-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A quote from William Shakespeare’s King Lear:</p>
+<blockquote>
+<p>This is the excellent foppery of the world that when we are sick in fortune—often the surfeit of our own behavior—we make guilty of our disasters the sun, the moon, and the stars […]</p>
+</blockquote>
+</blockquote>
+<h5 id="latex-example-38" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb337"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb337-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb337-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb337-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb337-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb337-5" data-line-number="5"> blockQuoteBegin = {<span class="kw">\begin</span>{<span class="ex">quote</span>}},</a>
+<a class="sourceLine" id="cb337-6" data-line-number="6"> blockQuoteEnd = {<span class="kw">\end</span>{<span class="ex">quote</span>}},</a>
+<a class="sourceLine" id="cb337-7" data-line-number="7"> },</a>
+<a class="sourceLine" id="cb337-8" data-line-number="8">}</a>
+<a class="sourceLine" id="cb337-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb337-10" data-line-number="10"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb337-11" data-line-number="11">A quote from William Shakespeare&#39;s King Lear:</a>
+<a class="sourceLine" id="cb337-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb337-13" data-line-number="13">&gt; This is the excellent foppery of the world that when we are</a>
+<a class="sourceLine" id="cb337-14" data-line-number="14">&gt; sick in fortune---often the surfeit of our own behavior---we</a>
+<a class="sourceLine" id="cb337-15" data-line-number="15">&gt; make guilty of our disasters the sun, the moon, and the</a>
+<a class="sourceLine" id="cb337-16" data-line-number="16">&gt; stars [...]</a>
+<a class="sourceLine" id="cb337-17" data-line-number="17"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb337-18" data-line-number="18"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb338"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb338-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A quote from William Shakespeare’s King Lear:</p>
+<blockquote>
+<p>This is the excellent foppery of the world that when we are sick in fortune—often the surfeit of our own behavior—we make guilty of our disasters the sun, the moon, and the stars […]</p>
+</blockquote>
+</blockquote>
+<h5 id="context-example-33" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb339"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb339-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb339-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererBlockQuoteBegin{\startquotation}</a>
+<a class="sourceLine" id="cb339-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererBlockQuoteEnd{\stopquotation}</a>
+<a class="sourceLine" id="cb339-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb339-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb339-6" data-line-number="6">A quote from William Shakespeare&#39;s King Lear:</a>
+<a class="sourceLine" id="cb339-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb339-8" data-line-number="8">&gt; This is the excellent foppery of the world that when we are</a>
+<a class="sourceLine" id="cb339-9" data-line-number="9">&gt; sick in fortune---often the surfeit of our own behavior---we</a>
+<a class="sourceLine" id="cb339-10" data-line-number="10">&gt; make guilty of our disasters the sun, the moon, and the</a>
+<a class="sourceLine" id="cb339-11" data-line-number="11">&gt; stars [...]</a>
+<a class="sourceLine" id="cb339-12" data-line-number="12"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb339-13" data-line-number="13"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb340"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb340-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>A quote from William Shakespeare’s King Lear:</p>
+<blockquote>
+<p>This is the excellent foppery of the world that when we are sick in fortune—often the surfeit of our own behavior—we make guilty of our disasters the sun, the moon, and the stars […]</p>
+</blockquote>
+</blockquote>
+<p>The <code>\markdownRendererBlockQuoteEnd</code> macro represents the end of a block quote. The macro receives no arguments.</p>
+<h4 id="code-block-renderers"><span class="header-section-number">2.3.1.15</span> Code Block Renderers</h4>
+<p>The <code>\markdownRendererInputVerbatim</code> macro represents a code block. The macro receives a single argument that corresponds to the filename of a file contaning the code block contents.</p>
+<p>The <code>\markdownRendererInputFencedCode</code> macro represents a fenced code block. This macro will only be produced, when the <strong><code>fencedCode</code></strong> option is <code>true</code>. The macro receives two arguments that correspond to the filename of a file contaning the code block contents and to the code fence infostring.</p>
+<h5 id="latex-example-39" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb341"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb341-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb341-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">verbatim</span>}</a>
+<a class="sourceLine" id="cb341-3" data-line-number="3"><span class="bu">\usepackage</span>[hyphens]{<span class="ex">url</span>}</a>
+<a class="sourceLine" id="cb341-4" data-line-number="4"><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb341-5" data-line-number="5"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb341-6" data-line-number="6"> renderers = {</a>
+<a class="sourceLine" id="cb341-7" data-line-number="7"> interblockSeparator = {</a>
+<a class="sourceLine" id="cb341-8" data-line-number="8"> <span class="fu">\def</span>\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-9" data-line-number="9"> \par</a>
+<a class="sourceLine" id="cb341-10" data-line-number="10"> \def\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-11" data-line-number="11"> \def\markdownRendererInterblockSeparator{<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-12" data-line-number="12"> \par</a>
+<a class="sourceLine" id="cb341-13" data-line-number="13"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-14" data-line-number="14"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-15" data-line-number="15"> }<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-16" data-line-number="16"> },</a>
+<a class="sourceLine" id="cb341-17" data-line-number="17"> inputVerbatim = {</a>
+<a class="sourceLine" id="cb341-18" data-line-number="18"> is contained in file <span class="fu">\url</span>{#1}:<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-19" data-line-number="19"> <span class="fu">\verbatiminput</span>{#1}<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-20" data-line-number="20"> },</a>
+<a class="sourceLine" id="cb341-21" data-line-number="21"> inputFencedCode = {</a>
+<a class="sourceLine" id="cb341-22" data-line-number="22"> in #2 <span class="fu">\markdownRendererInputVerbatim</span>{#1}<span class="co">%</span></a>
+<a class="sourceLine" id="cb341-23" data-line-number="23"> },</a>
+<a class="sourceLine" id="cb341-24" data-line-number="24"> },</a>
+<a class="sourceLine" id="cb341-25" data-line-number="25">}</a>
+<a class="sourceLine" id="cb341-26" data-line-number="26"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb341-27" data-line-number="27"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb341-28" data-line-number="28">The following code</a>
+<a class="sourceLine" id="cb341-29" data-line-number="29"></a>
+<a class="sourceLine" id="cb341-30" data-line-number="30"> def foo(bar):</a>
+<a class="sourceLine" id="cb341-31" data-line-number="31"> if len(bar) &lt;= 1:</a>
+<a class="sourceLine" id="cb341-32" data-line-number="32"> return bar[0]</a>
+<a class="sourceLine" id="cb341-33" data-line-number="33"> elif len(bar) == 2:</a>
+<a class="sourceLine" id="cb341-34" data-line-number="34"> return sorted(bar)</a>
+<a class="sourceLine" id="cb341-35" data-line-number="35"> else:</a>
+<a class="sourceLine" id="cb341-36" data-line-number="36"> baz = len(bar) // 2</a>
+<a class="sourceLine" id="cb341-37" data-line-number="37"> return foo(bar[baz:], bar[:baz])</a>
+<a class="sourceLine" id="cb341-38" data-line-number="38"></a>
+<a class="sourceLine" id="cb341-39" data-line-number="39">The following code</a>
+<a class="sourceLine" id="cb341-40" data-line-number="40"></a>
+<a class="sourceLine" id="cb341-41" data-line-number="41">~~~ Python</a>
+<a class="sourceLine" id="cb341-42" data-line-number="42">&gt;&gt;&gt; foo([4, 2, 1, 3])</a>
+<a class="sourceLine" id="cb341-43" data-line-number="43">[1, 2, 3, 4]</a>
+<a class="sourceLine" id="cb341-44" data-line-number="44">~~~~~~~~~~</a>
+<a class="sourceLine" id="cb341-45" data-line-number="45"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb341-46" data-line-number="46"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb342"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb342-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text except for the filename, which may differ:</p>
+<blockquote>
+<p>The following code is contained in file <code>./_markdown_document/882453149edcf288976647f6fe147ada.verbatim</code>:</p>
+<div class="sourceCode" id="cb343"><pre class="sourceCode py"><code class="sourceCode python"><a class="sourceLine" id="cb343-1" data-line-number="1"><span class="kw">def</span> foo(bar):</a>
+<a class="sourceLine" id="cb343-2" data-line-number="2"> <span class="cf">if</span> <span class="bu">len</span>(bar) <span class="op">&lt;=</span> <span class="dv">1</span>:</a>
+<a class="sourceLine" id="cb343-3" data-line-number="3"> <span class="cf">return</span> bar[:<span class="dv">1</span>]</a>
+<a class="sourceLine" id="cb343-4" data-line-number="4"> <span class="cf">elif</span> <span class="bu">len</span>(bar) <span class="op">==</span> <span class="dv">2</span>:</a>
+<a class="sourceLine" id="cb343-5" data-line-number="5"> <span class="cf">return</span> <span class="bu">sorted</span>(bar)</a>
+<a class="sourceLine" id="cb343-6" data-line-number="6"> <span class="cf">else</span>:</a>
+<a class="sourceLine" id="cb343-7" data-line-number="7"> baz <span class="op">=</span> bar[<span class="bu">len</span>(bar) <span class="op">//</span> <span class="dv">2</span>]</a>
+<a class="sourceLine" id="cb343-8" data-line-number="8"> <span class="cf">return</span> (</a>
+<a class="sourceLine" id="cb343-9" data-line-number="9"> foo([qux <span class="cf">for</span> qux <span class="kw">in</span> bar <span class="cf">if</span> qux <span class="op">&lt;</span> baz]) <span class="op">+</span> [baz] <span class="op">+</span></a>
+<a class="sourceLine" id="cb343-10" data-line-number="10"> foo([qux <span class="cf">for</span> qux <span class="kw">in</span> bar <span class="cf">if</span> qux <span class="op">&gt;</span> baz])</a>
+<a class="sourceLine" id="cb343-11" data-line-number="11"> )</a></code></pre></div>
+<p>The following code in Python contained in file <code>./_markdown_document/cf2a96e2120cef5b1fae5fea36fcc27b.verbatim</code>:</p>
+<div class="sourceCode" id="cb344"><pre class="sourceCode py"><code class="sourceCode python"><a class="sourceLine" id="cb344-1" data-line-number="1"><span class="op">&gt;&gt;&gt;</span> foo([<span class="dv">4</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="dv">3</span>])</a>
+<a class="sourceLine" id="cb344-2" data-line-number="2">[<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>]</a></code></pre></div>
+</blockquote>
+<h4 id="heading-renderers"><span class="header-section-number">2.3.1.16</span> Heading Renderers</h4>
+<p>The <code>\markdownRendererHeadingOne</code> macro represents a first level heading. The macro receives a single argument that corresponds to the heading text.</p>
+<p>The <code>\markdownRendererHeadingTwo</code> macro represents a second level heading. The macro receives a single argument that corresponds to the heading text.</p>
+<p>The <code>\markdownRendererHeadingThree</code> macro represents a third level heading. The macro receives a single argument that corresponds to the heading text.</p>
+<p>The <code>\markdownRendererHeadingFour</code> macro represents a fourth level heading. The macro receives a single argument that corresponds to the heading text.</p>
+<p>The <code>\markdownRendererHeadingFive</code> macro represents a fifth level heading. The macro receives a single argument that corresponds to the heading text.</p>
+<p>The <code>\markdownRendererHeadingSix</code> macro represents a sixth level heading. The macro receives a single argument that corresponds to the heading text.</p>
+<h5 id="plain-tex-example-24" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb345"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb345-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb345-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererInterblockSeparator{}</a>
+<a class="sourceLine" id="cb345-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererHeadingOne{1}</a>
+<a class="sourceLine" id="cb345-4" data-line-number="4"><span class="fu">\def</span>\markdownRendererHeadingTwo{2}</a>
+<a class="sourceLine" id="cb345-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererHeadingThree{3}</a>
+<a class="sourceLine" id="cb345-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererHeadingFour{4}</a>
+<a class="sourceLine" id="cb345-7" data-line-number="7"><span class="fu">\def</span>\markdownRendererHeadingFive{5}</a>
+<a class="sourceLine" id="cb345-8" data-line-number="8"><span class="fu">\def</span>\markdownRendererHeadingSix{6}</a>
+<a class="sourceLine" id="cb345-9" data-line-number="9"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb345-10" data-line-number="10">######</a>
+<a class="sourceLine" id="cb345-11" data-line-number="11">#####</a>
+<a class="sourceLine" id="cb345-12" data-line-number="12">#####</a>
+<a class="sourceLine" id="cb345-13" data-line-number="13">###</a>
+<a class="sourceLine" id="cb345-14" data-line-number="14">######</a>
+<a class="sourceLine" id="cb345-15" data-line-number="15"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb345-16" data-line-number="16"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb346"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb346-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>65536</p>
+</blockquote>
+<h5 id="latex-example-40" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb347"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb347-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb347-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb347-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb347-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb347-5" data-line-number="5"> interblockSeparator = {},</a>
+<a class="sourceLine" id="cb347-6" data-line-number="6"> headingOne = 1,</a>
+<a class="sourceLine" id="cb347-7" data-line-number="7"> headingTwo = 2,</a>
+<a class="sourceLine" id="cb347-8" data-line-number="8"> headingThree = 3,</a>
+<a class="sourceLine" id="cb347-9" data-line-number="9"> headingFour = 4,</a>
+<a class="sourceLine" id="cb347-10" data-line-number="10"> headingFive = 5,</a>
+<a class="sourceLine" id="cb347-11" data-line-number="11"> headingSix = 6,</a>
+<a class="sourceLine" id="cb347-12" data-line-number="12"> },</a>
+<a class="sourceLine" id="cb347-13" data-line-number="13">}</a>
+<a class="sourceLine" id="cb347-14" data-line-number="14"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb347-15" data-line-number="15"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb347-16" data-line-number="16">######</a>
+<a class="sourceLine" id="cb347-17" data-line-number="17">#####</a>
+<a class="sourceLine" id="cb347-18" data-line-number="18">#####</a>
+<a class="sourceLine" id="cb347-19" data-line-number="19">###</a>
+<a class="sourceLine" id="cb347-20" data-line-number="20">######</a>
+<a class="sourceLine" id="cb347-21" data-line-number="21"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb347-22" data-line-number="22"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb348"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb348-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>65536</p>
+</blockquote>
+<h5 id="context-example-34" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb349"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb349-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb349-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererInterblockSeparator{}</a>
+<a class="sourceLine" id="cb349-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererHeadingOne{1}</a>
+<a class="sourceLine" id="cb349-4" data-line-number="4"><span class="fu">\def</span>\markdownRendererHeadingTwo{2}</a>
+<a class="sourceLine" id="cb349-5" data-line-number="5"><span class="fu">\def</span>\markdownRendererHeadingThree{3}</a>
+<a class="sourceLine" id="cb349-6" data-line-number="6"><span class="fu">\def</span>\markdownRendererHeadingFour{4}</a>
+<a class="sourceLine" id="cb349-7" data-line-number="7"><span class="fu">\def</span>\markdownRendererHeadingFive{5}</a>
+<a class="sourceLine" id="cb349-8" data-line-number="8"><span class="fu">\def</span>\markdownRendererHeadingSix{6}</a>
+<a class="sourceLine" id="cb349-9" data-line-number="9"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb349-10" data-line-number="10"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb349-11" data-line-number="11">######</a>
+<a class="sourceLine" id="cb349-12" data-line-number="12">#####</a>
+<a class="sourceLine" id="cb349-13" data-line-number="13">#####</a>
+<a class="sourceLine" id="cb349-14" data-line-number="14">###</a>
+<a class="sourceLine" id="cb349-15" data-line-number="15">######</a>
+<a class="sourceLine" id="cb349-16" data-line-number="16"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb349-17" data-line-number="17"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb350"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb350-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>65536</p>
+</blockquote>
+<h4 id="horizontal-rule-renderer"><span class="header-section-number">2.3.1.17</span> Horizontal Rule Renderer</h4>
+<p>The <code>\markdownRendererHorizontalRule</code> macro represents a horizontal rule. The macro receives no arguments.</p>
+<h5 id="plain-tex-example-25" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb351"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb351-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb351-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererHorizontalRule{\vfil\break}</a>
+<a class="sourceLine" id="cb351-3" data-line-number="3"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb351-4" data-line-number="4">This is the first page.</a>
+<a class="sourceLine" id="cb351-5" data-line-number="5"></a>
+<a class="sourceLine" id="cb351-6" data-line-number="6">***</a>
+<a class="sourceLine" id="cb351-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb351-8" data-line-number="8">This is the second page.</a>
+<a class="sourceLine" id="cb351-9" data-line-number="9"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb351-10" data-line-number="10"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb352"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb352-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is the first page.</p>
+<hr />
+<p>This is the second page.</p>
+</blockquote>
+<h5 id="latex-example-41" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb353"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb353-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb353-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb353-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb353-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb353-5" data-line-number="5"> horizontalRule = <span class="fu">\newpage</span>,</a>
+<a class="sourceLine" id="cb353-6" data-line-number="6"> },</a>
+<a class="sourceLine" id="cb353-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb353-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb353-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb353-10" data-line-number="10">This is the first page.</a>
+<a class="sourceLine" id="cb353-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb353-12" data-line-number="12">***</a>
+<a class="sourceLine" id="cb353-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb353-14" data-line-number="14">This is the second page.</a>
+<a class="sourceLine" id="cb353-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb353-16" data-line-number="16"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb354"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb354-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is the first page.</p>
+<hr />
+<p>This is the second page.</p>
+</blockquote>
+<h5 id="context-example-35" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb355"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb355-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb355-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererHorizontalRule{\page[yes]}</a>
+<a class="sourceLine" id="cb355-3" data-line-number="3"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb355-4" data-line-number="4"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb355-5" data-line-number="5">This is the first page.</a>
+<a class="sourceLine" id="cb355-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb355-7" data-line-number="7">***</a>
+<a class="sourceLine" id="cb355-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb355-9" data-line-number="9">This is the second page.</a>
+<a class="sourceLine" id="cb355-10" data-line-number="10"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb355-11" data-line-number="11"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb356"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb356-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is the first page.</p>
+<hr />
+<p>This is the second page.</p>
+</blockquote>
+<h4 id="footnote-renderer"><span class="header-section-number">2.3.1.18</span> Footnote Renderer</h4>
+<p>The <code>\markdownRendererFootnote</code> macro represents a footnote. This macro will only be produced, when the <strong><code>footnotes</code></strong> option is <code>true</code>. The macro receives a single argument that corresponds to the footnote text.</p>
+<h5 id="plain-tex-example-26" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb357"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb357-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb357-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFootnotes{true}</a>
+<a class="sourceLine" id="cb357-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererFootnote#1{ (and \lowercase{#1})}</a>
+<a class="sourceLine" id="cb357-4" data-line-number="4"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb357-5" data-line-number="5">This is some text[^1] and this is some other text[^2].</a>
+<a class="sourceLine" id="cb357-6" data-line-number="6"></a>
+<a class="sourceLine" id="cb357-7" data-line-number="7"> [^1]: this is a footnote</a>
+<a class="sourceLine" id="cb357-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb357-9" data-line-number="9"> [^2]: this is some other footnote</a>
+<a class="sourceLine" id="cb357-10" data-line-number="10"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb357-11" data-line-number="11"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb358"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb358-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is some text (and this is a footnote) and this is some other text (and this is some other footnote).</p>
+</blockquote>
+<h5 id="latex-example-42" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb359"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb359-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb359-2" data-line-number="2"><span class="bu">\usepackage</span>[footnotes]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb359-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb359-4" data-line-number="4"> renderers = {</a>
+<a class="sourceLine" id="cb359-5" data-line-number="5"> footnote = { (and <span class="fu">\MakeLowercase</span>{#1})},</a>
+<a class="sourceLine" id="cb359-6" data-line-number="6"> },</a>
+<a class="sourceLine" id="cb359-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb359-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb359-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb359-10" data-line-number="10">This is some text[^1] and this is some other text[^2].</a>
+<a class="sourceLine" id="cb359-11" data-line-number="11"></a>
+<a class="sourceLine" id="cb359-12" data-line-number="12"> [^1]: this is a footnote</a>
+<a class="sourceLine" id="cb359-13" data-line-number="13"></a>
+<a class="sourceLine" id="cb359-14" data-line-number="14"> [^2]: this is some other footnote</a>
+<a class="sourceLine" id="cb359-15" data-line-number="15"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb359-16" data-line-number="16"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb360"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb360-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is some text (and this is a footnote) and this is some other text (and this is some other footnote).</p>
+</blockquote>
+<h5 id="context-example-36" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb361"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb361-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb361-2" data-line-number="2"><span class="fu">\def</span>\markdownOptionFootnotes{true}</a>
+<a class="sourceLine" id="cb361-3" data-line-number="3"><span class="fu">\def</span>\markdownRendererFootnote#1{ (and \lowercase{#1})}</a>
+<a class="sourceLine" id="cb361-4" data-line-number="4"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb361-5" data-line-number="5"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb361-6" data-line-number="6">This is some text[^1] and this is some other text[^2].</a>
+<a class="sourceLine" id="cb361-7" data-line-number="7"></a>
+<a class="sourceLine" id="cb361-8" data-line-number="8"> [^1]: this is a footnote</a>
+<a class="sourceLine" id="cb361-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb361-10" data-line-number="10"> [^2]: this is some other footnote</a>
+<a class="sourceLine" id="cb361-11" data-line-number="11"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb361-12" data-line-number="12"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb362"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb362-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is some text (and this is a footnote) and this is some other text (and this is some other footnote).</p>
+</blockquote>
+<h4 id="parenthesized-citations-renderer"><span class="header-section-number">2.3.1.19</span> Parenthesized Citations Renderer</h4>
+<p>The <code>\markdownRendererCite</code> macro represents a string of one or more parenthetical citations. This macro will only be produced, when the <strong><code>citations</code></strong> option is <code>true</code>. The macro receives the parameter <code>{</code>⟨<em>number of citations</em>⟩<code>}</code> followed by <code>{</code>⟨<em>prenote</em>⟩<code>}{</code>⟨<em>postnote</em>⟩<code>}{</code>⟨<em>name</em>⟩<code>}</code> repeated ⟨<em>number of citations</em>⟩ times. The ⟨<em>suppress author</em>⟩ parameter is either the token <code>-</code>, when the author’s name is to be suppressed, or <code>+</code> otherwise.</p>
+<h5 id="latex-example-43" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb363"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb363-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb363-2" data-line-number="2"><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb363-3" data-line-number="3"><span class="fu">\newcount\citationsCounter</span></a>
+<a class="sourceLine" id="cb363-4" data-line-number="4"><span class="fu">\newcount\citationsTotal</span></a>
+<a class="sourceLine" id="cb363-5" data-line-number="5"><span class="fu">\makeatletter</span></a>
+<a class="sourceLine" id="cb363-6" data-line-number="6"><span class="fu">\def</span>\citations#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-7" data-line-number="7"> a parenthesized citation \emph{#4}</a>
+<a class="sourceLine" id="cb363-8" data-line-number="8"> \advance\citationsCounter by 1\relax</a>
+<a class="sourceLine" id="cb363-9" data-line-number="9"> \ifx\relax#2\relax</a>
+<a class="sourceLine" id="cb363-10" data-line-number="10"> \ifx\relax#3\relax\else</a>
+<a class="sourceLine" id="cb363-11" data-line-number="11"> with a postfix \emph{#3}<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-12" data-line-number="12"> \fi</a>
+<a class="sourceLine" id="cb363-13" data-line-number="13"> \else</a>
+<a class="sourceLine" id="cb363-14" data-line-number="14"> with a prefix \emph{#2}<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-15" data-line-number="15"> \ifx\relax#3\relax\else</a>
+<a class="sourceLine" id="cb363-16" data-line-number="16"> \ and a postfix \emph{#3}<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-17" data-line-number="17"> \fi</a>
+<a class="sourceLine" id="cb363-18" data-line-number="18"> \fi</a>
+<a class="sourceLine" id="cb363-19" data-line-number="19"> \ifnum\citationsCounter&gt;\citationsTotal\relax</a>
+<a class="sourceLine" id="cb363-20" data-line-number="20"> .<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-21" data-line-number="21"> \expandafter\@gobble</a>
+<a class="sourceLine" id="cb363-22" data-line-number="22"> \else</a>
+<a class="sourceLine" id="cb363-23" data-line-number="23"> , and</a>
+<a class="sourceLine" id="cb363-24" data-line-number="24"> \fi\citations}</a>
+<a class="sourceLine" id="cb363-25" data-line-number="25"><span class="fu">\makeatother</span></a>
+<a class="sourceLine" id="cb363-26" data-line-number="26"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb363-27" data-line-number="27"> renderers = {</a>
+<a class="sourceLine" id="cb363-28" data-line-number="28"> cite = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-29" data-line-number="29"> <span class="fu">\citationsCounter</span>=1<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-30" data-line-number="30"> <span class="fu">\citationsTotal</span>=#1<span class="co">%</span></a>
+<a class="sourceLine" id="cb363-31" data-line-number="31"> This is</a>
+<a class="sourceLine" id="cb363-32" data-line-number="32"> <span class="fu">\expandafter\citations</span></a>
+<a class="sourceLine" id="cb363-33" data-line-number="33"> },</a>
+<a class="sourceLine" id="cb363-34" data-line-number="34"> },</a>
+<a class="sourceLine" id="cb363-35" data-line-number="35">}</a>
+<a class="sourceLine" id="cb363-36" data-line-number="36"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb363-37" data-line-number="37"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb363-38" data-line-number="38">[see @abrahams90, pp. 12; @eijkhout91, pp. 34]</a>
+<a class="sourceLine" id="cb363-39" data-line-number="39"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb363-40" data-line-number="40"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb364"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb364-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a parenthesized citation <em>abrahams90</em> with a prefix see and a postfix <em>pp. &gt; 12</em>, and a citation <em>eijkhout91</em> with a postfix <em>pp. 34</em>.</p>
+</blockquote>
+<h4 id="text-citations-renderer"><span class="header-section-number">2.3.1.20</span> Text Citations Renderer</h4>
+<p>The <code>\markdownRendererTextCite</code> macro represents a string of one or more text citations. This macro will only be produced, when the <strong><code>citations</code></strong> option is <code>true</code>. The macro receives parameters in the same format as the <code>\markdownRendererCite</code> macro.</p>
+<h5 id="latex-example-44" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb365"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb365-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb365-2" data-line-number="2"><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb365-3" data-line-number="3"><span class="fu">\newcount\citationsCounter</span></a>
+<a class="sourceLine" id="cb365-4" data-line-number="4"><span class="fu">\newcount\citationsTotal</span></a>
+<a class="sourceLine" id="cb365-5" data-line-number="5"><span class="fu">\makeatletter</span></a>
+<a class="sourceLine" id="cb365-6" data-line-number="6"><span class="fu">\def</span>\citations#1#2#3#4{<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-7" data-line-number="7"> a text citation \emph{#4}</a>
+<a class="sourceLine" id="cb365-8" data-line-number="8"> \advance\citationsCounter by 1\relax</a>
+<a class="sourceLine" id="cb365-9" data-line-number="9"> \ifx\relax#2\relax</a>
+<a class="sourceLine" id="cb365-10" data-line-number="10"> \ifx\relax#3\relax\else</a>
+<a class="sourceLine" id="cb365-11" data-line-number="11"> with a postfix \emph{#3}<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-12" data-line-number="12"> \fi</a>
+<a class="sourceLine" id="cb365-13" data-line-number="13"> \else</a>
+<a class="sourceLine" id="cb365-14" data-line-number="14"> with a prefix \emph{#2}<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-15" data-line-number="15"> \ifx\relax#3\relax\else</a>
+<a class="sourceLine" id="cb365-16" data-line-number="16"> \ and a postfix \emph{#3}<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-17" data-line-number="17"> \fi</a>
+<a class="sourceLine" id="cb365-18" data-line-number="18"> \fi</a>
+<a class="sourceLine" id="cb365-19" data-line-number="19"> \ifnum\citationsCounter&gt;\citationsTotal\relax</a>
+<a class="sourceLine" id="cb365-20" data-line-number="20"> .<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-21" data-line-number="21"> \expandafter\@gobble</a>
+<a class="sourceLine" id="cb365-22" data-line-number="22"> \else</a>
+<a class="sourceLine" id="cb365-23" data-line-number="23"> , and</a>
+<a class="sourceLine" id="cb365-24" data-line-number="24"> \fi\citations}</a>
+<a class="sourceLine" id="cb365-25" data-line-number="25"><span class="fu">\makeatother</span></a>
+<a class="sourceLine" id="cb365-26" data-line-number="26"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb365-27" data-line-number="27"> renderers = {</a>
+<a class="sourceLine" id="cb365-28" data-line-number="28"> textCite = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-29" data-line-number="29"> <span class="fu">\citationsCounter</span>=1<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-30" data-line-number="30"> <span class="fu">\citationsTotal</span>=#1<span class="co">%</span></a>
+<a class="sourceLine" id="cb365-31" data-line-number="31"> This is</a>
+<a class="sourceLine" id="cb365-32" data-line-number="32"> <span class="fu">\expandafter\citations</span></a>
+<a class="sourceLine" id="cb365-33" data-line-number="33"> },</a>
+<a class="sourceLine" id="cb365-34" data-line-number="34"> },</a>
+<a class="sourceLine" id="cb365-35" data-line-number="35">}</a>
+<a class="sourceLine" id="cb365-36" data-line-number="36"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb365-37" data-line-number="37"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb365-38" data-line-number="38">@abrahams90 [pp. 12; also @eijkhout91]</a>
+<a class="sourceLine" id="cb365-39" data-line-number="39"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb365-40" data-line-number="40"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb366"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb366-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a text citation <em>abrahams90</em> with a postfix <em>pp. 12</em>, and a citation <em>eijkhout91</em> with a prefix <em>also</em>.</p>
+</blockquote>
+<h4 id="table-renderer"><span class="header-section-number">2.3.1.21</span> Table Renderer</h4>
+<p>The <code>\markdownRendererTable</code> macro represents a table. This macro will only be produced, when the <strong><code>pipeTables</code></strong> option is <code>true</code>. The macro receives the parameters <code>{</code>⟨<em>caption</em>⟩<code>}{</code>⟨<em>number of rows</em>⟩<code>}{</code>⟨<em>number of columns</em>⟩<code>}</code> followed by <code>{</code>⟨<em>alignments</em>⟩<code>}</code> and then by <code>{</code>⟨<em>row</em>⟩<code>}</code> repeated ⟨<em>number of rows</em>⟩ times, where ⟨<em>row</em>⟩ is <code>{</code>⟨<em>column</em>⟩<code>}</code> repeated ⟨<em>number of columns</em>⟩ times, ⟨<em>alignments</em>⟩ is ⟨<em>alignment</em>⟩ repeated ⟨<em>number of columns</em>⟩ times, and ⟨<em>alignment</em>⟩ is one of the following:</p>
+<ul>
+<li><code>d</code> – The corresponding column has an unspecified (default) alignment.</li>
+<li><code>l</code> – The corresponding column is left-aligned.</li>
+<li><code>c</code> – The corresponding column is centered.</li>
+<li><code>r</code> – The corresponding column is right-aligned.</li>
+</ul>
+<h5 id="latex-example-45" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb367"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb367-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb367-2" data-line-number="2"><span class="bu">\usepackage</span>[pipeTables, tableCaptions]{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb367-3" data-line-number="3"><span class="fu">\newcount\rowCounter</span></a>
+<a class="sourceLine" id="cb367-4" data-line-number="4"><span class="fu">\newcount\columnCounter</span></a>
+<a class="sourceLine" id="cb367-5" data-line-number="5"><span class="fu">\makeatletter</span></a>
+<a class="sourceLine" id="cb367-6" data-line-number="6"><span class="fu">\def</span>\processRow#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-7" data-line-number="7"> \columnCounter=1<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-8" data-line-number="8"> \ifnum\rowCounter=0\relax</a>
+<a class="sourceLine" id="cb367-9" data-line-number="9"> As for the alignment,</a>
+<a class="sourceLine" id="cb367-10" data-line-number="10"> \else</a>
+<a class="sourceLine" id="cb367-11" data-line-number="11"> In row \the\rowCounter,</a>
+<a class="sourceLine" id="cb367-12" data-line-number="12"> \fi</a>
+<a class="sourceLine" id="cb367-13" data-line-number="13"> \processColumn#1</a>
+<a class="sourceLine" id="cb367-14" data-line-number="14"> \advance\rowCounter by 1\relax</a>
+<a class="sourceLine" id="cb367-15" data-line-number="15"> \ifnum\rowCounter&gt;\rowTotal\relax</a>
+<a class="sourceLine" id="cb367-16" data-line-number="16"> \expandafter\@gobble</a>
+<a class="sourceLine" id="cb367-17" data-line-number="17"> \fi\processRow}<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-18" data-line-number="18"><span class="fu">\def</span>\processColumn#1{<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-19" data-line-number="19"> column number \the\columnCounter{}</a>
+<a class="sourceLine" id="cb367-20" data-line-number="20"> \ifnum\rowCounter=0\relax</a>
+<a class="sourceLine" id="cb367-21" data-line-number="21"> \if#1d{}has default alignment\fi</a>
+<a class="sourceLine" id="cb367-22" data-line-number="22"> \if#1l{}is left-aligned\fi</a>
+<a class="sourceLine" id="cb367-23" data-line-number="23"> \if#1c{}is centered\fi</a>
+<a class="sourceLine" id="cb367-24" data-line-number="24"> \if#1r{}is right-aligned\fi</a>
+<a class="sourceLine" id="cb367-25" data-line-number="25"> \else</a>
+<a class="sourceLine" id="cb367-26" data-line-number="26"> says \emph{#1}<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-27" data-line-number="27"> \fi</a>
+<a class="sourceLine" id="cb367-28" data-line-number="28"> \advance\columnCounter by 1\relax</a>
+<a class="sourceLine" id="cb367-29" data-line-number="29"> \ifnum\columnCounter&lt;\columnTotal\relax, \fi</a>
+<a class="sourceLine" id="cb367-30" data-line-number="30"> \ifnum\columnCounter=\columnTotal\relax, and \fi</a>
+<a class="sourceLine" id="cb367-31" data-line-number="31"> \ifnum\columnCounter&gt;\columnTotal\relax</a>
+<a class="sourceLine" id="cb367-32" data-line-number="32"> .\expandafter\@gobble</a>
+<a class="sourceLine" id="cb367-33" data-line-number="33"> \fi\processColumn}<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-34" data-line-number="34"><span class="fu">\makeatother</span></a>
+<a class="sourceLine" id="cb367-35" data-line-number="35"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb367-36" data-line-number="36"> renderers = {</a>
+<a class="sourceLine" id="cb367-37" data-line-number="37"> table = {<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-38" data-line-number="38"> This is a table with caption <span class="fu">\emph</span>{#1} that is #3 colums wide</a>
+<a class="sourceLine" id="cb367-39" data-line-number="39"> and #2 rows long.</a>
+<a class="sourceLine" id="cb367-40" data-line-number="40"> <span class="fu">\rowCounter</span>=0<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-41" data-line-number="41"> <span class="fu">\def</span>\rowTotal{#2}<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-42" data-line-number="42"> <span class="fu">\def</span>\columnTotal{#3}<span class="co">%</span></a>
+<a class="sourceLine" id="cb367-43" data-line-number="43"> <span class="fu">\processRow</span></a>
+<a class="sourceLine" id="cb367-44" data-line-number="44"> },</a>
+<a class="sourceLine" id="cb367-45" data-line-number="45"> },</a>
+<a class="sourceLine" id="cb367-46" data-line-number="46">}</a>
+<a class="sourceLine" id="cb367-47" data-line-number="47"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb367-48" data-line-number="48"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb367-49" data-line-number="49">| Right | Left | Default | Center |</a>
+<a class="sourceLine" id="cb367-50" data-line-number="50">|------:|:-----|---------|:------:|</a>
+<a class="sourceLine" id="cb367-51" data-line-number="51">| 12 | 12 | 12 | 12 |</a>
+<a class="sourceLine" id="cb367-52" data-line-number="52">| 123 | 123 | 123 | 123 |</a>
+<a class="sourceLine" id="cb367-53" data-line-number="53">| 1 | 1 | 1 | 1 |</a>
+<a class="sourceLine" id="cb367-54" data-line-number="54"></a>
+<a class="sourceLine" id="cb367-55" data-line-number="55"> : Demonstration of pipe table syntax</a>
+<a class="sourceLine" id="cb367-56" data-line-number="56"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb367-57" data-line-number="57"><span class="kw">\end</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb367-58" data-line-number="58"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb367-59" data-line-number="59"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb368"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb368-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>This is a table with caption <em>Demonstration of pipe table syntax</em> that is 4 colums wide and 4 rows long. As for the alignment, column number 1 is right-aligned, column number 2 is left-aligned, column number 3 has default alignment, and column number 4 is centered. In row 1, column number 1 says <em>Right</em>, column number 2 says <em>Left</em>, column number 3 says <em>Default</em>, and column number 4 says <em>Center</em>. In row 2, column number 1 says <em>12</em>, column number 2 says <em>12</em>, column number 3 says <em>12</em>, and column number 4 says <em>12</em>. In row 3, column number 1 says <em>123</em>, column number 2 says <em>123</em>, column number 3 says <em>123</em>, and column number 4 says <em>123</em>. In row 4, column number 1 says <em>1</em>, column number 2 says <em>1</em>, column number 3 says <em>1</em>, and column number 4 says <em>1</em>.</p>
+</blockquote>
+<h3 id="token-renderer-prototypes"><span class="header-section-number">2.3.2</span> Token Renderer Prototypes</h3>
+<p>By default, token renderers point to package-defined <span class="tex">T<sub>e</sub>X</span> macros, further referred to as <em>prototypes</em>, which provide useful default definitions.</p>
+<h5 id="plain-tex-example-27" class="unnumbered">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb369"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb369-1" data-line-number="1"><span class="fu">\input</span> markdown</a>
+<a class="sourceLine" id="cb369-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererTildePrototype{<span class="co">%</span></a>
+<a class="sourceLine" id="cb369-3" data-line-number="3"> Packages can specify token renderer prototypes.<span class="co">%</span></a>
+<a class="sourceLine" id="cb369-4" data-line-number="4">}</a>
+<a class="sourceLine" id="cb369-5" data-line-number="5"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb369-6" data-line-number="6">~</a>
+<a class="sourceLine" id="cb369-7" data-line-number="7"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb369-8" data-line-number="8"></a>
+<a class="sourceLine" id="cb369-9" data-line-number="9"><span class="fu">\def</span>\markdownRendererTilde{<span class="co">%</span></a>
+<a class="sourceLine" id="cb369-10" data-line-number="10"> User-defined token renderers take precedence.<span class="co">%</span></a>
+<a class="sourceLine" id="cb369-11" data-line-number="11">}</a>
+<a class="sourceLine" id="cb369-12" data-line-number="12"><span class="fu">\markdownBegin</span></a>
+<a class="sourceLine" id="cb369-13" data-line-number="13">~</a>
+<a class="sourceLine" id="cb369-14" data-line-number="14"><span class="fu">\markdownEnd</span></a>
+<a class="sourceLine" id="cb369-15" data-line-number="15"><span class="fu">\bye</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb370"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb370-1" data-line-number="1"><span class="ex">luatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Packages can specify token renderer prototypes.</p>
+<p>User-defined token renderers take precedence.</p>
+</blockquote>
+<h5 id="latex-example-46" class="unnumbered"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb371"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb371-1" data-line-number="1"><span class="bu">\documentclass</span>{<span class="ex">article</span>}</a>
+<a class="sourceLine" id="cb371-2" data-line-number="2"><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb371-3" data-line-number="3"><span class="fu">\markdownSetup</span>{</a>
+<a class="sourceLine" id="cb371-4" data-line-number="4"> rendererPrototypes = {</a>
+<a class="sourceLine" id="cb371-5" data-line-number="5"> tilde = {Packages can specify token renderer prototypes.},</a>
+<a class="sourceLine" id="cb371-6" data-line-number="6"> },</a>
+<a class="sourceLine" id="cb371-7" data-line-number="7">}</a>
+<a class="sourceLine" id="cb371-8" data-line-number="8"><span class="kw">\begin</span>{<span class="ex">document</span>}</a>
+<a class="sourceLine" id="cb371-9" data-line-number="9"><span class="kw">\begin</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb371-10" data-line-number="10">~</a>
+<a class="sourceLine" id="cb371-11" data-line-number="11"><span class="kw">\end</span>{<span class="ex">markdown</span>}</a>
+<a class="sourceLine" id="cb371-12" data-line-number="12"></a>
+<a class="sourceLine" id="cb371-13" data-line-number="13"><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</a>
+<a class="sourceLine" id="cb371-14" data-line-number="14"> renderers = {</a>
+<a class="sourceLine" id="cb371-15" data-line-number="15"> tilde = {User-defined token renderers take precedence.},</a>
+<a class="sourceLine" id="cb371-16" data-line-number="16"> },</a>
+<a class="sourceLine" id="cb371-17" data-line-number="17">}</a>
+<a class="sourceLine" id="cb371-18" data-line-number="18">~</a>
+<a class="sourceLine" id="cb371-19" data-line-number="19"><span class="kw">\end</span>{<span class="ex">markdown*</span>}</a>
+<a class="sourceLine" id="cb371-20" data-line-number="20"><span class="kw">\end</span>{<span class="ex">document</span>}</a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb372"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb372-1" data-line-number="1"><span class="ex">lualatex</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Packages can specify token renderer prototypes.</p>
+<p>User-defined token renderers take precedence.</p>
+</blockquote>
+<h5 id="context-example-37" class="unnumbered">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5>
+<p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p>
+<div class="sourceCode" id="cb373"><pre class="sourceCode tex"><code class="sourceCode latex"><a class="sourceLine" id="cb373-1" data-line-number="1"><span class="fu">\usemodule</span>[t][markdown]</a>
+<a class="sourceLine" id="cb373-2" data-line-number="2"><span class="fu">\def</span>\markdownRendererTildePrototype{<span class="co">%</span></a>
+<a class="sourceLine" id="cb373-3" data-line-number="3"> Packages can specify token renderer prototypes.<span class="co">%</span></a>
+<a class="sourceLine" id="cb373-4" data-line-number="4">}</a>
+<a class="sourceLine" id="cb373-5" data-line-number="5"><span class="fu">\starttext</span></a>
+<a class="sourceLine" id="cb373-6" data-line-number="6"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb373-7" data-line-number="7">~</a>
+<a class="sourceLine" id="cb373-8" data-line-number="8"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb373-9" data-line-number="9"></a>
+<a class="sourceLine" id="cb373-10" data-line-number="10"><span class="fu">\def</span>\markdownRendererTilde{<span class="co">%</span></a>
+<a class="sourceLine" id="cb373-11" data-line-number="11"> User-defined token renderers take precedence.<span class="co">%</span></a>
+<a class="sourceLine" id="cb373-12" data-line-number="12">}</a>
+<a class="sourceLine" id="cb373-13" data-line-number="13"><span class="fu">\startmarkdown</span></a>
+<a class="sourceLine" id="cb373-14" data-line-number="14">~</a>
+<a class="sourceLine" id="cb373-15" data-line-number="15"><span class="fu">\stopmarkdown</span></a>
+<a class="sourceLine" id="cb373-16" data-line-number="16"><span class="fu">\stoptext</span></a></code></pre></div>
+<p>Next, invoke LuaTeX from the terminal:</p>
+<div class="sourceCode" id="cb374"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb374-1" data-line-number="1"><span class="ex">context</span> document.tex</a></code></pre></div>
+<p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p>
+<blockquote>
+<p>Packages can specify token renderer prototypes.</p>
+<p>User-defined token renderers take precedence.</p>
+</blockquote>
+<section class="footnotes">
+<hr />
+<ol>
+<li id="fn1"><p>Here is the footnote.<a href="#fnref1" class="footnote-back">↩</a></p></li>
+<li id="fn2"><p>Here’s one with multiple blocks.</p>
+<p>Subsequent paragraphs are indented to show that they belong to the previous footnote.</p>
+<pre><code>{ some.code }</code></pre>
+<p>The whole paragraph can be indented, or just the first line. In this way, multi-paragraph footnotes work like multi-paragraph list items.<a href="#fnref2" class="footnote-back">↩</a></p></li>
+<li id="fn3"><p>Here is the footnote.<a href="#fnref3" class="footnote-back">↩</a></p></li>
+<li id="fn4"><p>Here’s one with multiple blocks.</p>
+<p>Subsequent paragraphs are indented to show that they belong to the previous footnote.</p>
+<pre><code>{ some.code }</code></pre>
+<p>The whole paragraph can be indented, or just the first line. In this way, multi-paragraph footnotes work like multi-paragraph list items.<a href="#fnref4" class="footnote-back">↩</a></p></li>
+<li id="fn5"><p>Inlines notes are easier to write, since you don’t have to pick an identifier and move down to type the note.<a href="#fnref5" class="footnote-back">↩</a></p></li>
+<li id="fn6"><p>Inlines notes are easier to write, since you don’t have to pick an identifier and move down to type the note.<a href="#fnref6" class="footnote-back">↩</a></p></li>
+</ol>
+</section>
+</body>
+</html>
diff --git a/macros/generic/markdown/markdown.ins b/macros/generic/markdown/markdown.ins
new file mode 100644
index 0000000000..b7436c37fc
--- /dev/null
+++ b/macros/generic/markdown/markdown.ins
@@ -0,0 +1,15 @@
+\input docstrip.tex
+\generate{\usepreamble\luapreamble\usepostamble\luapostamble
+ \file{markdown.lua}{\from{markdown.dtx}{lua}}
+ \file{markdown-cli.lua}{\from{markdown.dtx}{lua-cli}}
+ \usepreamble\texpreamble\usepostamble\texpostamble
+ \file{markdown.tex}{\from{markdown.dtx}{tex}}
+ \file{markdown.sty}{\from{markdown.dtx}{latex}}
+ \file{t-markdown.tex}{\from{markdown.dtx}{context}}
+ \usepreamble\empty\usepostamble\empty
+ \file{markdown.md}{\from{markdown.dtx}{manual}}
+ \file{markdown-interfaces.md}{\from{markdown.dtx}{manual-interfaces}}
+ \file{markdown-options.md}{\from{markdown.dtx}{manual-options}}
+ \file{markdown-tokens.md}{\from{markdown.dtx}{manual-tokens}}
+ \file{markdown.css}{\from{markdown.dtx}{manual-css}}}
+\endbatchfile
diff --git a/macros/generic/markdown/markdown.md b/macros/generic/markdown/markdown.md
new file mode 100644
index 0000000000..ddd8c67dcd
--- /dev/null
+++ b/macros/generic/markdown/markdown.md
@@ -0,0 +1,278 @@
+
+---
+title: Markdown Package User Manual
+author: Vít Novotný
+date: v\markdownVersion{} (\markdownLastModified{})
+---
+
+
+<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet" />
+
+Introduction
+============
+The [Markdown package][pkg] converts [markdown][] markup to \TeX{} commands. The
+functionality is provided both as a Lua module and as plain \TeX{}, \LaTeX{}, and
+\Hologo{ConTeXt} macro packages that can be used to directly typeset \TeX documents
+containing markdown markup. Unlike other convertors, the Markdown package
+makes it easy to redefine how each and every markdown element is rendered.
+Creative abuse of the markdown syntax is encouraged. ;-)
+
+ [markdown]: https://daringfireball.net/projects/markdown/basics/
+ (Daring Fireball: Markdown Basics)
+ [pkg]: https://ctan.org/pkg/markdown
+ (CTAN: Package markdown)
+
+
+This document is a user manual for the [Markdown package][pkg]. It provides
+tutorials and code examples. For an in-depth description of the package
+requirements, interfaces, and implementation, please refer to the [technical
+documentation][techdoc].
+
+ [techdoc]: http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf
+ (A Markdown Interpreter for TeX)
+
+
+Requirements
+------------
+
+The package requires a working \TeX{} distribution. [\TeX{} Live][tl] ≥ 2013 is
+known to work and so are recent installation of [Mik\TeX{}][mik]. If you are
+using a minimal installation of a \TeX{} distribution, please consult the
+[technical documentation][techdoc] for a detailed list of required packages.
+
+ [tl]: https://www.tug.org/texlive/ (TeX Live - TeX Users Group)
+ [mik]: https://miktex.org/ (Home - MiKTeXorg)
+
+Installation
+------------
+
+The package comes pre-installed with [\TeX{} Live][tl] ≥ 2016 and with recent
+installations of [MikTeX][mik]. Unless you explicitly wish to use the latest
+version of the package, you are encouraged to skip this step.
+
+To install the package, first download the package from the repository
+using Git:
+``` sh
+git clone https://github.com/witiko/markdown
+``````
+Next, enter the directory named `markdown` and interpret the file named
+`markdown.ins` file using a Unicode-aware \TeX{} engine, such as XeTeX or
+LuaTeX:
+``` sh
+cd markdown
+luatex markdown.ins
+``````
+This should produce the following files:
+
+ * `markdown.lua`, the Lua module,
+ * `markdown-cli.lua`, the Lua command-line interface,
+ * `markdown.tex`, the plain \TeX{} macro package,
+ * `markdown.sty`, the \LaTeX{} package, and
+ * `t-markdown.tex`, the \Hologo{ConTeXt} module.
+
+### Local Installation
+
+To perform a local installation, place the above files into your \TeX{}
+directory structure. This is generally where the individual files should be
+placed:
+
+ * `<TEXMF>/tex/luatex/markdown/markdown.lua`
+ * `<TEXMF>/scripts/markdown/markdown-cli.lua`
+ * `<TEXMF>/tex/generic/markdown/markdown.tex`
+ * `<TEXMF>/tex/latex/markdown/markdown.sty`
+ * `<TEXMF>/tex/context/third/markdown/t-markdown.tex`
+
+where `<TEXMF>` corresponds to a root of your \TeX{} distribution, such as
+`/usr/share/texmf` and `~/texmf` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf` on Windows systems. When in doubt,
+consult the manual of your \TeX{} distribution.
+
+### Portable Installation
+
+Alternatively, you can also store the above files in the same folder as your
+\TeX{} document and distribute them together. This way your document can be
+portably typeset on legacy \TeX{} distributions.
+
+
+First Document
+--------------
+
+In this section, we will take the necessary steps to typeset our first markdown
+document in \TeX{}. This will serve as our first hands-on experience with the
+package and also as a reassurance that the package has been correctly installed.
+
+### Using Lua
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\input hello
+\bye
+```````
+
+#### Using the Lua Module
+
+Using a text editor, create a text document named `hello.lua` with the
+following content:
+``` lua
+#!/usr/bin/env texlua
+local kpse = require("kpse")
+kpse.set_program_name("luatex")
+local markdown = require("markdown")
+local convert = markdown.new()
+print(convert("Hello *world*!"))
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua hello.lua > hello.tex
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!†Invoking pdfTeX should have the same effect:
+``` sh
+texlua hello.lua > hello.tex
+pdftex document.tex
+``````
+
+#### Using the Lua Command-Line Interface
+
+Using a text editor, create a text document named `hello.md` with the
+following content:
+``` md
+Hello *world*!
+``````
+Next, invoke LuaTeX from the terminal:
+``` sh
+texlua ⟨CLI pathname⟩ -- hello.md hello.tex
+luatex document.tex
+``````
+where \meta{CLI pathname} corresponds to the location of the Lua CLI script file,
+such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or
+`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows
+systems. Use the command `kpsewhich markdown-cli.lua` to locate the Lua CLI
+script file using [Kpathsea][].
+
+ [Kpathsea]: https://tug.org/kpathsea/ (Kpathsea - TeX Users Group)
+
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†Invoking pdfTeX should have the same effect:
+``` sh
+texlua ⟨CLI pathname⟩ -- hello.md hello.tex
+pdftex document.tex
+``````
+
+### Using Plain \TeX{}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\input markdown
+\markdownBegin
+Hello *world*!
+\markdownEnd
+\bye
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+luatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text
+“Hello *world*!†Invoking pdfTeX should have the same effect:
+``` sh
+pdftex --shell-escape document.tex
+```````
+
+### Using \LaTeX{}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\documentclass{article}
+\usepackage{markdown}
+\begin{document}
+\begin{markdown}
+Hello *world*!
+\end{markdown}
+\end{document}
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+lualatex document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†Invoking pdfTeX should have the same effect:
+``` sh
+pdflatex --shell-escape document.tex
+``````
+
+***
+
+As the next step, try typesetting the example documents distributed along with
+the Markdown package:
+``` sh
+git clone https://github.com/witiko/markdown
+cd markdown/examples
+lualatex latex.tex
+``````
+A PDF document named `latex.pdf` should be produced. Open the text documents
+`latex.tex` and `example.md` in a text editor to see how the example documents
+are structured. Try changing the documents and typesetting them as follows:
+``` sh
+lualatex latex.tex
+``````
+to see the effect of your changes.
+
+### Using \Hologo{ConTeXt}
+
+Using a text editor, create a text document named `document.tex` with the
+following content:
+``` tex
+\usemodule[t][markdown]
+\starttext
+\startmarkdown
+Hello *world*!
+\stopmarkdown
+\stoptext
+```````
+Next, invoke LuaTeX from the terminal:
+``` sh
+context document.tex
+``````
+A PDF document named `document.pdf` should be produced and contain the text “Hello
+*world*!†Invoking pdfTeX should have the same effect:
+``` sh
+texexec --passon=--shell-escape document.tex
+``````
+
+***
+
+As the next step, try typesetting the example documents distributed along with
+the Markdown package:
+``` sh
+git clone https://github.com/witiko/markdown
+cd markdown/examples
+context context.tex
+``````
+A PDF document named `context.pdf` should be produced. Open the text documents
+`context.tex` and `example.md` in a text editor to see how the example documents
+are structured. Try changing the documents and typesetting them as follows:
+``` sh
+context context.tex
+``````
+to see the effect of your changes.
+
+Examples
+========
+
+In this section, I will describe the individual parts of the Markdown package.
+Each part will be shown by example, leaving the implementation details to the
+[technical documentation][techdoc].
+
+ [techdoc]: http://mirrors.ctan.org/macros/generic/markdown/markdown.pdf
+ (A Markdown Interpreter for \TeX{})
+
+/markdown-interfaces.md
+/markdown-options.md
+/markdown-tokens.md
+
diff --git a/macros/generic/markdown/markdown.pdf b/macros/generic/markdown/markdown.pdf
new file mode 100644
index 0000000000..d166468833
--- /dev/null
+++ b/macros/generic/markdown/markdown.pdf
Binary files differ
diff --git a/macros/generic/markdown/tests/README.md b/macros/generic/markdown/tests/README.md
new file mode 100644
index 0000000000..53db58776b
--- /dev/null
+++ b/macros/generic/markdown/tests/README.md
@@ -0,0 +1,17 @@
+This directory contains the testing framework of the Markdown package. Tests
+act as an ensurance that changes to the package did not introduce new bugs.
+
+The `test.sh` shell script is used to run the individual tests. To run one or
+more tests, execute the `test.sh` script with the pathnames of one or more test
+files as the arguments. Test files can be recognized by the `.test` suffix and
+reside inside the `testfiles/` directory. The Markdown package needs to be
+[installed][install] before running the tests.
+
+ [install]: http://mirrors.ctan.org/macros/generic/markdown/markdown.html#installation "Markdown Package User Manual"
+
+Each time a commit is made to the Git repository of the project, this test
+suite is ran by a continuous integration service.
+The current status is:
+[![CircleCI](https://circleci.com/gh/Witiko/markdown/tree/master.svg)][CircleCI]
+
+ [CircleCI]: https://circleci.com/gh/Witiko/markdown/tree/master (CircleCI)
diff --git a/macros/generic/markdown/tests/support/README.md b/macros/generic/markdown/tests/support/README.md
new file mode 100644
index 0000000000..d06e40a921
--- /dev/null
+++ b/macros/generic/markdown/tests/support/README.md
@@ -0,0 +1,4 @@
+This directory contains support files. Support files should be available to the
+TeX source code that is being typeset during a test. These are mainly files
+containing TeX source code that is common for all the TeX source code
+templates.
diff --git a/macros/generic/markdown/tests/support/latex-setup.tex b/macros/generic/markdown/tests/support/latex-setup.tex
new file mode 100644
index 0000000000..be002d6ec8
--- /dev/null
+++ b/macros/generic/markdown/tests/support/latex-setup.tex
@@ -0,0 +1,162 @@
+renderers = {%
+ interblockSeparator = {%
+ \TYPE{interblockSeparator}%
+ \GOBBLE},
+ lineBreak = {%
+ \TYPE{lineBreak}%
+ \GOBBLE},
+ ellipsis = {%
+ \TYPE{ellipsis}%
+ \GOBBLE},
+ nbsp = {%
+ \TYPE{nbsp}%
+ \GOBBLE},
+ leftBrace = {%
+ \TYPE{leftBrace}%
+ \GOBBLE},
+ rightBrace = {%
+ \TYPE{rightBrace}%
+ \GOBBLE},
+ dollarSign = {%
+ \TYPE{dollarSign}%
+ \GOBBLE},
+ percentSign = {%
+ \TYPE{percentSign}%
+ \GOBBLE},
+ ampersand = {%
+ \TYPE{ampersand}%
+ \GOBBLE},
+ underscore = {%
+ \TYPE{underscore}%
+ \GOBBLE},
+ hash = {%
+ \TYPE{hash}%
+ \GOBBLE},
+ circumflex = {%
+ \TYPE{circumflex}%
+ \GOBBLE},
+ backslash = {%
+ \TYPE{backslash}%
+ \GOBBLE},
+ tilde = {%
+ \TYPE{tilde}%
+ \GOBBLE},
+ pipe = {%
+ \TYPE{pipe}%
+ \GOBBLE},
+ codeSpan = {%
+ \TYPE{codeSpan: #1}},
+ link = {%
+ \TYPE{BEGIN link}%
+ \TYPE{- label: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END link}},
+ image = {%
+ \TYPE{BEGIN image}%
+ \TYPE{- label: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END image}},
+ contentBlock = {%
+ \TYPE{BEGIN contentBlock}%
+ \TYPE{- suffix: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END contentBlock}%
+ },
+ contentBlockOnlineImage = {%
+ \TYPE{BEGIN contentBlockOnlineImage}%
+ \TYPE{- suffix: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END contentBlockOnlineImage}%
+ },
+ contentBlockCode = {%
+ \TYPE{BEGIN contentBlockCode}%
+ \TYPE{- suffix: #1}%
+ \TYPE{- language: #2}%
+ \TYPE{- URI: #3}%
+ \TYPE{- title: #5}%
+ \TYPE{END contentBlockCode}%
+ },
+ ulBegin = {%
+ \TYPE{ulBegin}},
+ ulBeginTight = {%
+ \TYPE{ulBeginTight}},
+ ulItem = {%
+ \TYPE{ulItem}},
+ ulItemEnd = {%
+ \TYPE{ulItemEnd}},
+ ulEnd = {%
+ \TYPE{ulEnd}},
+ ulEndTight = {%
+ \TYPE{ulEndTight}},
+ olBegin = {%
+ \TYPE{olBegin}},
+ olBeginTight = {%
+ \TYPE{olBeginTight}},
+ olItem = {%
+ \TYPE{olItem}},
+ olItemEnd = {%
+ \TYPE{olItemEnd}},
+ olItemWithNumber = {%
+ \TYPE{olItemWithNumber: #1}},
+ olEnd = {%
+ \TYPE{olEnd}},
+ olEndTight = {%
+ \TYPE{olEndTight}},
+ dlBegin = {%
+ \TYPE{dlBegin}},
+ dlBeginTight = {%
+ \TYPE{dlBeginTight}},
+ dlItem = {%
+ \TYPE{dlItem: #1}},
+ dlItemEnd = {%
+ \TYPE{dlItemEnd}},
+ dlDefinitionBegin = {%
+ \TYPE{dlDefinitionBegin}},
+ dlDefinitionEnd = {%
+ \TYPE{dlDefinitionEnd}},
+ dlEnd = {%
+ \TYPE{dlEnd}},
+ dlEndTight = {%
+ \TYPE{dlEndTight}},
+ emphasis = {%
+ \TYPE{emphasis: #1}},
+ strongEmphasis = {%
+ \TYPE{strongEmphasis: #1}},
+ blockQuoteBegin = {%
+ \TYPE{blockQuoteBegin}},
+ blockQuoteEnd = {%
+ \TYPE{blockQuoteEnd}},
+ inputVerbatim = {%
+ \TYPE{inputVerbatim: #1}},
+ inputFencedCode = {%
+ \TYPE{BEGIN fencedCode}%
+ \TYPE{- src: #1}%
+ \TYPE{- infostring: #2}%
+ \TYPE{END fencedCode}},
+ headingOne = {%
+ \TYPE{headingOne: #1}},
+ headingTwo = {%
+ \TYPE{headingTwo: #1}},
+ headingThree = {%
+ \TYPE{headingThree: #1}},
+ headingFour = {%
+ \TYPE{headingFour: #1}},
+ headingFive = {%
+ \TYPE{headingFive: #1}},
+ headingSix = {%
+ \TYPE{headingSix: #1}},
+ horizontalRule = {%
+ \TYPE{horizontalRule}},
+ footnote = {%
+ \TYPE{footnote: #1}},
+ cite = {%
+ \CITATIONS{#1}},
+ textCite = {%
+ \TEXTCITATIONS{#1}},
+ table = {%
+ \TABLE{#1}{#2}{#3}}
+}
diff --git a/macros/generic/markdown/tests/support/plain-setup.tex b/macros/generic/markdown/tests/support/plain-setup.tex
new file mode 100644
index 0000000000..1c163781e7
--- /dev/null
+++ b/macros/generic/markdown/tests/support/plain-setup.tex
@@ -0,0 +1,142 @@
+\def\markdownRendererInterblockSeparator#1{%
+ \TYPE{interblockSeparator}}%
+\def\markdownRendererLineBreak#1{%
+ \TYPE{lineBreak}}%
+\def\markdownRendererEllipsis#1{%
+ \TYPE{ellipsis}}%
+\def\markdownRendererNbsp#1{%
+ \TYPE{nbsp}}%
+\def\markdownRendererLeftBrace#1{%
+ \TYPE{leftBrace}}%
+\def\markdownRendererRightBrace#1{%
+ \TYPE{rightBrace}}%
+\def\markdownRendererDollarSign#1{%
+ \TYPE{dollarSign}}%
+\def\markdownRendererPercentSign#1{%
+ \TYPE{percentSign}}%
+\def\markdownRendererAmpersand#1{%
+ \TYPE{ampersand}}%
+\def\markdownRendererUnderscore#1{%
+ \TYPE{underscore}}%
+\def\markdownRendererHash#1{%
+ \TYPE{hash}}%
+\def\markdownRendererCircumflex#1{%
+ \TYPE{circumflex}}%
+\def\markdownRendererBackslash#1{%
+ \TYPE{backslash}}%
+\def\markdownRendererTilde#1{%
+ \TYPE{tilde}}%
+\def\markdownRendererPipe#1{%
+ \TYPE{pipe}}%
+\def\markdownRendererCodeSpan#1{%
+ \TYPE{codeSpan: #1}}%
+\def\markdownRendererLink#1#2#3#4{%
+ \TYPE{BEGIN link}%
+ \TYPE{- label: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END link}}%
+\def\markdownRendererImage#1#2#3#4{%
+ \TYPE{BEGIN image}%
+ \TYPE{- label: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END image}}%
+\def\markdownRendererContentBlock#1#2#3#4{%
+ \TYPE{BEGIN contentBlock}%
+ \TYPE{- suffix: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END contentBlock}}%
+\def\markdownRendererContentBlockOnlineImage#1#2#3#4{%
+ \TYPE{BEGIN contentBlockOnlineImage}%
+ \TYPE{- suffix: #1}%
+ \TYPE{- URI: #2}%
+ \TYPE{- title: #4}%
+ \TYPE{END contentBlockOnlineImage}}%
+\def\markdownRendererContentBlockCode#1#2#3#4#5{%
+ \TYPE{BEGIN contentBlockCode}%
+ \TYPE{- suffix: #1}%
+ \TYPE{- language: #2}%
+ \TYPE{- URI: #3}%
+ \TYPE{- title: #5}%
+ \TYPE{END contentBlockCode}}%
+\def\markdownRendererUlBegin{%
+ \TYPE{ulBegin}}%
+\def\markdownRendererUlBeginTight{%
+ \TYPE{ulBeginTight}}%
+\def\markdownRendererUlItem{%
+ \TYPE{ulItem}}%
+\def\markdownRendererUlItemEnd{%
+ \TYPE{ulItemEnd}}%
+\def\markdownRendererUlEnd{%
+ \TYPE{ulEnd}}%
+\def\markdownRendererUlEndTight{%
+ \TYPE{ulEndTight}}%
+\def\markdownRendererOlBegin{%
+ \TYPE{olBegin}}%
+\def\markdownRendererOlBeginTight{%
+ \TYPE{olBeginTight}}%
+\def\markdownRendererOlItem{%
+ \TYPE{olItem}}%
+\def\markdownRendererOlItemEnd{%
+ \TYPE{olItemEnd}}%
+\def\markdownRendererOlItemWithNumber#1{%
+ \TYPE{olItemWithNumber: #1}}%
+\def\markdownRendererOlEnd{%
+ \TYPE{olEnd}}%
+\def\markdownRendererOlEndTight{%
+ \TYPE{olEndTight}}%
+\def\markdownRendererDlBegin{%
+ \TYPE{dlBegin}}%
+\def\markdownRendererDlBeginTight{%
+ \TYPE{dlBeginTight}}%
+\def\markdownRendererDlItem#1{%
+ \TYPE{dlItem: #1}}%
+\def\markdownRendererDlItemEnd{%
+ \TYPE{dlItemEnd}}%
+\def\markdownRendererDlDefinitionBegin{%
+ \TYPE{dlDefinitionBegin}}%
+\def\markdownRendererDlDefinitionEnd{%
+ \TYPE{dlDefinitionEnd}}%
+\def\markdownRendererDlEnd{%
+ \TYPE{dlEnd}}%
+\def\markdownRendererDlEndTight{%
+ \TYPE{dlEndTight}}%
+\def\markdownRendererEmphasis#1{%
+ \TYPE{emphasis: #1}}%
+\def\markdownRendererStrongEmphasis#1{%
+ \TYPE{strongEmphasis: #1}}%
+\def\markdownRendererBlockQuoteBegin{%
+ \TYPE{blockQuoteBegin}}%
+\def\markdownRendererBlockQuoteEnd{%
+ \TYPE{blockQuoteEnd}}%
+\def\markdownRendererInputVerbatim#1{%
+ \TYPE{inputVerbatim: #1}}%
+\def\markdownRendererInputFencedCode#1#2{%
+ \TYPE{BEGIN fencedCode}%
+ \TYPE{- src: #1}%
+ \TYPE{- infostring: #2}%
+ \TYPE{END fencedCode}}%
+\def\markdownRendererHeadingOne#1{%
+ \TYPE{headingOne: #1}}%
+\def\markdownRendererHeadingTwo#1{%
+ \TYPE{headingTwo: #1}}%
+\def\markdownRendererHeadingThree#1{%
+ \TYPE{headingThree: #1}}%
+\def\markdownRendererHeadingFour#1{%
+ \TYPE{headingFour: #1}}%
+\def\markdownRendererHeadingFive#1{%
+ \TYPE{headingFive: #1}}%
+\def\markdownRendererHeadingSix#1{%
+ \TYPE{headingSix: #1}}%
+\def\markdownRendererHorizontalRule{%
+ \TYPE{horizontalRule}}%
+\def\markdownRendererFootnote#1{%
+ \TYPE{footnote: #1}}%
+\def\markdownRendererCite#1{%
+ \CITATIONS{#1}}%
+\def\markdownRendererTextCite#1{%
+ \TEXTCITATIONS{#1}}%
+\def\markdownRendererTable#1#2#3{%
+ \TABLE{#1}{#2}{#3}}%
diff --git a/macros/generic/markdown/tests/support/setup.tex b/macros/generic/markdown/tests/support/setup.tex
new file mode 100644
index 0000000000..60a943d2ac
--- /dev/null
+++ b/macros/generic/markdown/tests/support/setup.tex
@@ -0,0 +1,79 @@
+\long\def\TYPE#1{%
+ \begingroup
+ \long\def\TYPE##1{(##1)}%
+ \immediate\write128{TEST INPUT BEGIN}%
+ \immediate\write128{#1}%
+ \immediate\write128{TEST INPUT END}%
+ \endgroup}%
+\def\GOBBLE#1{}%
+
+% Table parsing
+\newcount\ROWCOUNTER
+\newcount\COLCOUNTER
+
+\def\DOROW#1{%
+ \COLCOUNTER=1%
+ \DOCOL#1
+ \advance\ROWCOUNTER by 1\relax
+ \ifnum\ROWCOUNTER>\ROWTOTAL\relax
+ \TYPE{END table}%
+ \expandafter\GOBBLE
+ \fi\DOROW}%
+\def\DOCOL#1{%
+ \ifnum\ROWCOUNTER=0
+ \TYPE{- alignment of column \the\COLCOUNTER: #1}%
+ \else
+ \TYPE{- row \the\ROWCOUNTER, column \the\COLCOUNTER: #1}%
+ \fi
+ \advance\COLCOUNTER by 1\relax
+ \ifnum\COLCOUNTER>\COLTOTAL\relax
+ \expandafter\GOBBLE
+ \fi\DOCOL}%
+\def\TABLE#1#2#3{%
+ \ROWCOUNTER=0%
+ \def\ROWTOTAL{#2}%
+ \def\COLTOTAL{#3}%
+ \TYPE{BEGIN table (#2 rows, #3 columns)}%
+ \TYPE{- caption: #1}%
+ \DOROW}%
+
+% Citations parsing
+\newcount\CITATIONSCOUNTER
+
+%% Regular citations
+\def\DOCITATIONS#1#2#3#4{%
+ \advance\CITATIONSCOUNTER by 1\relax
+ \CITE{#1}{#2}{#3}{#4}%
+ \ifnum\CITATIONSCOUNTER>\CITATIONSTOTAL\relax
+ \expandafter\GOBBLE
+ \fi\DOCITATIONS}%
+\def\CITE#1#2#3#4{%
+ \TYPE{BEGIN cite}%
+ \TYPE{- suppressAuthor: \if#1+false\else true\fi}%
+ \TYPE{- prenote: #2}%
+ \TYPE{- postnote: #3}%
+ \TYPE{- name: #4}%
+ \TYPE{END cite}}%
+\def\CITATIONS#1{%
+ \CITATIONSCOUNTER=1%
+ \def\CITATIONSTOTAL{#1}%
+ \DOCITATIONS}%
+
+%% Text citations
+\def\DOTEXTCITATIONS#1#2#3#4{%
+ \advance\CITATIONSCOUNTER by 1\relax
+ \TEXTCITE{#1}{#2}{#3}{#4}%
+ \ifnum\CITATIONSCOUNTER>\CITATIONSTOTAL\relax
+ \expandafter\GOBBLE
+ \fi\DOTEXTCITATIONS}%
+\def\TEXTCITE#1#2#3#4{%
+ \TYPE{BEGIN textCite}%
+ \TYPE{- suppressAuthor: \if#1+false\else true\fi}%
+ \TYPE{- prenote: #2}%
+ \TYPE{- postnote: #3}%
+ \TYPE{- name: #4}%
+ \TYPE{END textCite}}%
+\def\TEXTCITATIONS#1{%
+ \CITATIONSCOUNTER=1%
+ \def\CITATIONSTOTAL{#1}%
+ \DOTEXTCITATIONS}%
diff --git a/macros/generic/markdown/tests/templates/README.md b/macros/generic/markdown/tests/templates/README.md
new file mode 100644
index 0000000000..f56802cf7b
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/README.md
@@ -0,0 +1,20 @@
+This directory contains subdirectories, which correspond to individual TeX
+formats. These subdirectories contain TeX source code templates, which
+can be recognized by the `.tex.m4` suffix, and a file named `COMMANDS.m4`.
+
+The TeX source code templates are documents that will be typeset as a part of
+every test. Before being typeset, the TeX source code templates will be
+pre-processed using the m4 macro preprocessor with the following macro
+definitions:
+
+ 1. `TEST_SETUP_FILENAME` corresponds to the name of the file containing the
+ test setup TeX source code.
+ 2. `TEST_INPUT_FILENAME` corresponds to the name of the file containing the
+ test markdown source code.
+
+The `COMMANDS.m4` file contains a newline-separated list of commands that will
+be used to typeset the pre-processed TeX source code templates. Before use,
+the commands will preprocessed with the following macro definitions:
+
+ 1. `TEST_FILENAME` corresponds to the name of the pre-processed TeX source
+ code template that is being typeset.
diff --git a/macros/generic/markdown/tests/templates/context/COMMANDS.m4 b/macros/generic/markdown/tests/templates/context/COMMANDS.m4
new file mode 100644
index 0000000000..d427cd3513
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/context/COMMANDS.m4
@@ -0,0 +1,2 @@
+texexec --passon="--shell-escape --8bit --interaction=nonstopmode" TEST_FILENAME
+context --nonstopmode TEST_FILENAME
diff --git a/macros/generic/markdown/tests/templates/context/README.md b/macros/generic/markdown/tests/templates/context/README.md
new file mode 100644
index 0000000000..5acb21c88f
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/context/README.md
@@ -0,0 +1,2 @@
+This directory contains TeX source code templates for the ConTeXt Mark II and
+ConteXt Mark IV formats.
diff --git a/macros/generic/markdown/tests/templates/context/input.tex.m4 b/macros/generic/markdown/tests/templates/context/input.tex.m4
new file mode 100644
index 0000000000..527b73cf9f
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/context/input.tex.m4
@@ -0,0 +1,11 @@
+% Load the package.
+\usemodule[t][markdown]
+% Load the support files.
+\input setup\relax
+\input plain-setup\relax
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+% Perform the test.
+\starttext
+ \markdownInput{TEST_INPUT_FILENAME}%
+\stoptext
diff --git a/macros/generic/markdown/tests/templates/context/verbatim.tex.m4 b/macros/generic/markdown/tests/templates/context/verbatim.tex.m4
new file mode 100644
index 0000000000..6d19154972
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/context/verbatim.tex.m4
@@ -0,0 +1,13 @@
+% Load the package.
+\usemodule[t][markdown]
+% Load the support files.
+\input setup\relax
+\input plain-setup\relax
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+% Perform the test.
+\starttext
+ \startmarkdown
+undivert(TEST_INPUT_FILENAME)dnl
+ \stopmarkdown
+\stoptext
diff --git a/macros/generic/markdown/tests/templates/latex/COMMANDS.m4 b/macros/generic/markdown/tests/templates/latex/COMMANDS.m4
new file mode 100644
index 0000000000..767145adc5
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/latex/COMMANDS.m4
@@ -0,0 +1,3 @@
+pdflatex --shell-escape --interaction=nonstopmode TEST_FILENAME
+xelatex --shell-escape --8bit --interaction=nonstopmode TEST_FILENAME
+lualatex --interaction=nonstopmode TEST_FILENAME
diff --git a/macros/generic/markdown/tests/templates/latex/README.md b/macros/generic/markdown/tests/templates/latex/README.md
new file mode 100644
index 0000000000..e62b4a40fa
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/latex/README.md
@@ -0,0 +1 @@
+This directory contains TeX source code templates for the LaTeX format.
diff --git a/macros/generic/markdown/tests/templates/latex/input.tex.m4 b/macros/generic/markdown/tests/templates/latex/input.tex.m4
new file mode 100644
index 0000000000..324f4e7bf1
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/latex/input.tex.m4
@@ -0,0 +1,14 @@
+\documentclass{minimal}
+\csname UseRawInputEncoding\endcsname
+% Load the package.
+\usepackage{markdown}
+% Load the support files.
+\input setup\relax
+\usepackage{catchfile}
+\CatchFileDef{\LATEXOPTIONS}{latex-setup}\relax
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+\begin{document}
+% Perform the test.
+\expandafter\markdownInput\expandafter[\LATEXOPTIONS]{TEST_INPUT_FILENAME}%
+\end{document}
diff --git a/macros/generic/markdown/tests/templates/latex/verbatim-starred.tex.m4 b/macros/generic/markdown/tests/templates/latex/verbatim-starred.tex.m4
new file mode 100644
index 0000000000..5f1434869f
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/latex/verbatim-starred.tex.m4
@@ -0,0 +1,17 @@
+\documentclass{minimal}
+\csname UseRawInputEncoding\endcsname
+% Load the package.
+\usepackage{markdown}
+% Load the support files.
+\input setup\relax
+\usepackage{catchfile}
+\CatchFileDef{\LATEXOPTIONS}{latex-setup}\relax
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+\begin{document}
+% Perform the test.
+\let\ea\expandafter
+\ea\begin\ea{\ea m\ea a\ea r\ea k\ea d\ea o\ea w\ea n\ea *\ea}\ea{\LATEXOPTIONS}
+undivert(TEST_INPUT_FILENAME)dnl
+\end{markdown*}
+\end{document}
diff --git a/macros/generic/markdown/tests/templates/latex/verbatim.tex.m4 b/macros/generic/markdown/tests/templates/latex/verbatim.tex.m4
new file mode 100644
index 0000000000..737d49def7
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/latex/verbatim.tex.m4
@@ -0,0 +1,17 @@
+\documentclass{minimal}
+\csname UseRawInputEncoding\endcsname
+% Load the package.
+\usepackage{markdown}
+% Load the support files.
+\input setup\relax
+\usepackage{catchfile}
+\CatchFileDef{\LATEXOPTIONS}{latex-setup}\relax
+\expandafter\markdownSetup\expandafter{\LATEXOPTIONS}
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+\begin{document}
+% Perform the test.
+\begin{markdown}
+undivert(TEST_INPUT_FILENAME)dnl
+\end{markdown}
+\end{document}
diff --git a/macros/generic/markdown/tests/templates/plain/COMMANDS.m4 b/macros/generic/markdown/tests/templates/plain/COMMANDS.m4
new file mode 100644
index 0000000000..50745b8a63
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/plain/COMMANDS.m4
@@ -0,0 +1,3 @@
+pdftex --shell-escape --interaction=nonstopmode TEST_FILENAME
+xetex --shell-escape --8bit --interaction=nonstopmode TEST_FILENAME
+luatex --interaction=nonstopmode TEST_FILENAME
diff --git a/macros/generic/markdown/tests/templates/plain/README.md b/macros/generic/markdown/tests/templates/plain/README.md
new file mode 100644
index 0000000000..779102ed26
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/plain/README.md
@@ -0,0 +1 @@
+This directory contains TeX source code templates for the plain TeX format.
diff --git a/macros/generic/markdown/tests/templates/plain/input.tex.m4 b/macros/generic/markdown/tests/templates/plain/input.tex.m4
new file mode 100644
index 0000000000..b2ef1b560d
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/plain/input.tex.m4
@@ -0,0 +1,10 @@
+% Load the package.
+\input markdown\relax
+% Load the support files.
+\input setup\relax
+\input plain-setup\relax
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+% Perform the test.
+\markdownInput{TEST_INPUT_FILENAME}%
+\bye
diff --git a/macros/generic/markdown/tests/templates/plain/verbatim.tex.m4 b/macros/generic/markdown/tests/templates/plain/verbatim.tex.m4
new file mode 100644
index 0000000000..fd87725c06
--- /dev/null
+++ b/macros/generic/markdown/tests/templates/plain/verbatim.tex.m4
@@ -0,0 +1,12 @@
+% Load the package.
+\input markdown\relax
+% Load the support files.
+\input setup\relax
+\input plain-setup\relax
+% Load the test-specific setup.
+\input TEST_SETUP_FILENAME\relax
+% Perform the test.
+\markdownBegin
+undivert(TEST_INPUT_FILENAME)dnl
+\markdownEnd
+\bye
diff --git a/macros/generic/markdown/tests/test.sh b/macros/generic/markdown/tests/test.sh
new file mode 100755
index 0000000000..c32b8274a2
--- /dev/null
+++ b/macros/generic/markdown/tests/test.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Run a test for each testfile passed as an argument. If a testfile does not
+# contain the expected test result, generate one.
+set -e
+BUILDDIR=`mktemp -d`
+trap 'rm -rf $BUILDDIR' INT TERM
+for TESTFILE; do
+ printf 'Testfile %s\n' $TESTFILE
+ for FORMAT in templates/*/; do
+ printf ' Format %s\n' $FORMAT
+ for TEMPLATE in ${FORMAT}*.tex.m4; do
+ printf ' Template %s\n' $TEMPLATE
+ m4 -DTEST_FILENAME=test.tex <$FORMAT/COMMANDS.m4 |
+ (while read COMMAND; do
+ printf ' Command %s\n' "$COMMAND"
+
+ # Set up the testing directory.
+ cp support/* $TESTFILE $BUILDDIR
+ cd $BUILDDIR
+ sed -r '/^\s*<<<\s*$/{x;q}' \
+ <${TESTFILE##*/} >test-setup.tex
+ sed -rn '/^\s*<<<\s*$/,/^\s*>>>\s*$/{/^\s*(<<<|>>>)\s*$/!p}' \
+ <${TESTFILE##*/} >test-input.md
+ sed -n '/^\s*>>>\s*$/,${/^\s*>>>\s*$/!p}' \
+ <${TESTFILE##*/} >test-expected.log
+ m4 -DTEST_SETUP_FILENAME=test-setup.tex \
+ -DTEST_INPUT_FILENAME=test-input.md <"$OLDPWD"/$TEMPLATE >test.tex
+
+ # Run the test, filter the output and concatenate adjacent lines.
+ eval $COMMAND >/dev/null 2>&1 ||
+ { cat test.markdown.err 1>&2 2>/dev/null; exit 1; }
+ sed -nr '/^\s*TEST INPUT BEGIN\s*$/,/^\s*TEST INPUT END\s*$/{
+ /^\s*TEST INPUT (BEGIN|END)\s*$/!H
+ /^\s*TEST INPUT END\s*$/{s/.*//;x;s/\n//g;p}
+ }' <test.log >test-actual.log
+
+ # If the testfile does not contain an expected outcome, use the current
+ # outcome and update the testfile.
+ if ! grep -q '^\s*>>>\s*$' <${TESTFILE##*/}; then
+ cp test-actual.log test-expected.log
+ (cat ${TESTFILE##*/} && printf '>>>\n'
+ cat test-expected.log) >"$OLDPWD"/$TESTFILE
+ printf ' Added the expected test outcome to the testfile.\n'
+ fi
+
+ # Compare the expected outcome against the actual outcome.
+ diff -c $BUILDDIR/test-expected.log $BUILDDIR/test-actual.log # ||
+# (sed -n '1,/^\s*>>>\s*$/p' <${TESTFILE##*/} &&
+# cat test-actual.log) >"$OLDPWD"/$TESTFILE
+
+ # Clean up the testing directory.
+ cd "$OLDPWD"
+ find $BUILDDIR -mindepth 1 -exec rm -rf {} + # && break
+ done) # && break
+ done # && break
+ done
+done
+rm -rf $BUILDDIR
diff --git a/macros/generic/markdown/tests/testfiles/CommonMark_0.26/README.md b/macros/generic/markdown/tests/testfiles/CommonMark_0.26/README.md
new file mode 100644
index 0000000000..7ae2191762
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/CommonMark_0.26/README.md
@@ -0,0 +1,2 @@
+This directory contains test files that were taken from the
+CommonMark project specification.
diff --git a/macros/generic/markdown/tests/testfiles/CommonMark_0.26/fenced-code.test b/macros/generic/markdown/tests/testfiles/CommonMark_0.26/fenced-code.test
new file mode 100644
index 0000000000..98cb973956
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/CommonMark_0.26/fenced-code.test
@@ -0,0 +1,315 @@
+\def\markdownOptionFencedCode{true}
+<<<
+Here is a simple example with backticks:
+
+```
+<
+ >
+```
+
+With tildes:
+
+~~~
+<
+ >
+~~~
+
+The closing code fence must use the same character as the opening fence:
+
+```
+aaa
+~~~
+```
+
+~~~
+aaa
+```
+~~~
+
+The closing code fence must be at least as long as the opening fence:
+
+````
+aaa
+```
+``````
+
+~~~~
+aaa
+~~~
+~~~~
+
+Unclosed code blocks are closed by the end of the document (or the enclosing block quote or list item):
+
+> ```
+> aaa
+
+bbb
+
+A code block can have all empty lines as its content
+
+```
+
+
+```
+
+A code block can be empty:
+```
+```
+
+Fences can be indented. If the opening fence is indented, content lines will have equivalent opening indentation removed, if present:
+ ```
+ aaa
+aaa
+```
+
+ ```
+aaa
+ aaa
+aaa
+ ```
+
+ ```
+ aaa
+ aaa
+ aaa
+ ```
+
+Four spaces indentation produces an indented code block:
+
+ ```
+ aaa
+ ```
+
+Closing fences may be indented by 0-3 spaces, and their indentation need not match that of the opening fence:
+
+```
+aaa
+ ```
+
+ ```
+aaa
+ ```
+
+This is not a closing fence, because it is indented 4 spaces:
+
+```
+aaa
+ ```
+```
+
+Code fences (opening and closing) cannot contain internal spaces:
+
+``` ```
+aaa
+
+```
+aaa
+``` ```
+```
+
+~~~~~~
+aaa
+~~~ ~~
+~~~~~~
+
+foo
+```
+bar
+```
+baz
+
+Other blocks can also occur before and after fenced code blocks without an intervening blank line:
+
+foo
+---
+~~~
+bar
+~~~
+# baz
+
+An info string can be provided after the opening code fence. Opening and closing spaces will be stripped, and the first word, prefixed with language-, is used as the value for the class attribute of the code element within the enclosing pre element.
+
+```ruby
+def foo(x)
+ return 3
+end
+```
+
+~~~~ ruby startline=3 $%@#$
+def foo(x)
+ return 3
+end
+~~~~~~~
+
+````;
+````
+
+Info strings for backtick code blocks cannot contain backticks:
+
+``` aa ```
+foo
+
+Closing code fences cannot have info strings:
+
+```
+``` aaa
+```
+
+Unclosed code blocks are closed by the end of the document (or the enclosing block quote or list item):
+
+`````
+
+```
+aaa
+>>>
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/40aeb3c06faa194425865c43b0818cf3.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/40aeb3c06faa194425865c43b0818cf3.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/162c3a1e89dc98bb7c0e223462144172.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/a109a04c348f12d1fc1e55dc6cd3153d.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/a109a04c348f12d1fc1e55dc6cd3153d.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/162c3a1e89dc98bb7c0e223462144172.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+blockQuoteBegin
+BEGIN fencedCode
+- src: ./_markdown_test/5c9597f3c8245907ea71a89d9d39d08e.verbatim
+- infostring:
+END fencedCode
+blockQuoteEnd
+interblockSeparator
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/e1c06d85ae7b8b032bef47e42e4c08f9.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/d41d8cd98f00b204e9800998ecf8427e.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/4b44563cc9886576b6589dd730cbc397.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/f084b3953e4a48b5425a11074ae99e3c.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/8a70ce8c35179c24412d9271f69da1fd.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/04338967b57abaf5489d4de2ca3d5d75.verbatim
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/5c9597f3c8245907ea71a89d9d39d08e.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/5c9597f3c8245907ea71a89d9d39d08e.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/5fcf96d052f67d3d8a648cb90cc39193.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+codeSpan:
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/baeea0ffee491579d17a52cb85675edf.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/42935760431e4eb4ddd8a8bcc5e54a23.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+interblockSeparator
+headingTwo: foo
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+headingOne: baz
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/22bc2a65d877cb1e2a14deece6005742.verbatim
+- infostring: ruby
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/22bc2a65d877cb1e2a14deece6005742.verbatim
+- infostring: ruby startline=3 (dollarSign)(percentSign)@(hash)(dollarSign)
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/d41d8cd98f00b204e9800998ecf8427e.verbatim
+- infostring: ;
+END fencedCode
+interblockSeparator
+interblockSeparator
+codeSpan: aa
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/e1ff8c7886d18f6b5499b096584e13bf.verbatim
+- infostring:
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/ab4c9bee663124ac417409b22e2af252.verbatim
+- infostring:
+END fencedCode
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/README.md b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/README.md
new file mode 100644
index 0000000000..1a8fd15a48
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/README.md
@@ -0,0 +1,2 @@
+This directory contains test files that were inherited from the
+`tests/Markdown_1.0.3/` directory in the lunamark project.
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/amps-encoding.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/amps-encoding.test
new file mode 100644
index 0000000000..da079fc68f
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/amps-encoding.test
@@ -0,0 +1,36 @@
+<<<
+Here's a [link] [1] with an ampersand in the URL.
+
+Here's a link with an amersand in the link text: [AT&T] [2].
+
+Here's an inline [link](/script?foo=1&bar=2).
+
+Here's an inline [link](</script?foo=1&bar=2>).
+
+
+[1]: http://example.com/?foo=1&bar=2
+[2]: http://att.com/ "AT&T"
+>>>
+BEGIN link
+- label: link
+- URI: http://example.com/?foo=1(ampersand)bar=2
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: AT(ampersand)T
+- URI: http://att.com/
+- title: AT(ampersand)T
+END link
+interblockSeparator
+BEGIN link
+- label: link
+- URI: /script?foo=1(ampersand)bar=2
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: link
+- URI: /script?foo=1(ampersand)bar=2
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/auto-links.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/auto-links.test
new file mode 100644
index 0000000000..765a85d3e2
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/auto-links.test
@@ -0,0 +1,52 @@
+<<<
+Link: <http://example.com/>.
+
+With an ampersand: <http://example.com/?foo=1&bar=2>
+
+* In a list?
+* <http://example.com/>
+* It should.
+
+> Blockquoted: <http://example.com/>
+
+Auto-links should not occur here: `<http://example.com/>`
+
+ or here: <http://example.com/>
+>>>
+BEGIN link
+- label: http://example.com/
+- URI: http://example.com/
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: http://example.com/?foo=1(ampersand)bar=2
+- URI: http://example.com/?foo=1(ampersand)bar=2
+- title:
+END link
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+BEGIN link
+- label: http://example.com/
+- URI: http://example.com/
+- title:
+END link
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+blockQuoteBegin
+BEGIN link
+- label: http://example.com/
+- URI: http://example.com/
+- title:
+END link
+blockQuoteEnd
+interblockSeparator
+codeSpan: <http://example.com/>
+interblockSeparator
+inputVerbatim: ./_markdown_test/d65b41d110c17fbc771809f553258ff5.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/backslash-escapes.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/backslash-escapes.test
new file mode 100644
index 0000000000..182a63747c
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/backslash-escapes.test
@@ -0,0 +1,192 @@
+<<<
+These should all get escaped:
+
+Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+
+
+
+These should not, because they occur within a code block:
+
+ Backslash: \\
+
+ Backtick: \`
+
+ Asterisk: \*
+
+ Underscore: \_
+
+ Left brace: \{
+
+ Right brace: \}
+
+ Left bracket: \[
+
+ Right bracket: \]
+
+ Left paren: \(
+
+ Right paren: \)
+
+ Greater-than: \>
+
+ Hash: \#
+
+ Period: \.
+
+ Bang: \!
+
+ Plus: \+
+
+ Minus: \-
+
+
+Nor should these, which occur in code spans:
+
+Backslash: `\\`
+
+Backtick: `` \` ``
+
+Asterisk: `\*`
+
+Underscore: `\_`
+
+Left brace: `\{`
+
+Right brace: `\}`
+
+Left bracket: `\[`
+
+Right bracket: `\]`
+
+Left paren: `\(`
+
+Right paren: `\)`
+
+Greater-than: `\>`
+
+Hash: `\#`
+
+Period: `\.`
+
+Bang: `\!`
+
+Plus: `\+`
+
+Minus: `\-`
+
+
+These should get escaped, even though they're matching pairs for
+other Markdown constructs:
+
+\*asterisks\*
+
+\_underscores\_
+
+\`backticks\`
+
+This is a code span with a literal backslash-backtick sequence: `` \` ``
+
+This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.
+
+This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.
+>>>
+interblockSeparator
+backslash
+interblockSeparator
+interblockSeparator
+interblockSeparator
+underscore
+interblockSeparator
+leftBrace
+interblockSeparator
+rightBrace
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+hash
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/127bce8785d826a9ba07a20f6ca866c9.verbatim
+interblockSeparator
+interblockSeparator
+codeSpan: (backslash)(backslash)
+interblockSeparator
+codeSpan: (backslash)`
+interblockSeparator
+codeSpan: (backslash)*
+interblockSeparator
+codeSpan: (backslash)(underscore)
+interblockSeparator
+codeSpan: (backslash)(leftBrace)
+interblockSeparator
+codeSpan: (backslash)(rightBrace)
+interblockSeparator
+codeSpan: (backslash)[
+interblockSeparator
+codeSpan: (backslash)]
+interblockSeparator
+codeSpan: (backslash)(
+interblockSeparator
+codeSpan: (backslash))
+interblockSeparator
+codeSpan: (backslash)>
+interblockSeparator
+codeSpan: (backslash)(hash)
+interblockSeparator
+codeSpan: (backslash).
+interblockSeparator
+codeSpan: (backslash)!
+interblockSeparator
+codeSpan: (backslash)+
+interblockSeparator
+codeSpan: (backslash)-
+interblockSeparator
+interblockSeparator
+interblockSeparator
+underscore
+underscore
+interblockSeparator
+interblockSeparator
+codeSpan: (backslash)`
+interblockSeparator
+codeSpan: ticks
+interblockSeparator
+backslash
+backslash
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/blockquotes-with-code-blocks.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/blockquotes-with-code-blocks.test
new file mode 100644
index 0000000000..1fa09a34de
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/blockquotes-with-code-blocks.test
@@ -0,0 +1,21 @@
+<<<
+> Example:
+>
+> sub status {
+> print "working";
+> }
+>
+> Or:
+>
+> sub status {
+> return "working";
+> }
+
+>>>
+blockQuoteBegin
+interblockSeparator
+inputVerbatim: ./_markdown_test/702e5d3a17f709c02cee3a2b5e106619.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/9d7d6b4bdbb0a57a705dc70e6c7f5612.verbatim
+blockQuoteEnd
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-blocks.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-blocks.test
new file mode 100644
index 0000000000..5f4a0bb137
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-blocks.test
@@ -0,0 +1,18 @@
+<<<
+ code block on the first line
+
+Regular text.
+
+ code block indented by spaces
+
+Regular Text.
+
+ code block on the last line
+>>>
+inputVerbatim: ./_markdown_test/757353c94a464c718394adbe349d6771.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/84469dcb7c065e457fc00040f5c96d8f.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/e0bb27efcfecc25309f165e0092a7434.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-spans.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-spans.test
new file mode 100644
index 0000000000..94aab36b56
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/code-spans.test
@@ -0,0 +1,4 @@
+<<<
+Here's how you put `` `backticks` `` in a code span.
+>>>
+codeSpan: `backticks`
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/hard-wrapped-paragraphs-with-list-like-lines.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/hard-wrapped-paragraphs-with-list-like-lines.test
new file mode 100644
index 0000000000..6c6690877d
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/hard-wrapped-paragraphs-with-list-like-lines.test
@@ -0,0 +1,12 @@
+<<<
+In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.
+
+Here's one with a bullet.
+* criminey.
+
+>>>
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/horizontal-rules.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/horizontal-rules.test
new file mode 100644
index 0000000000..e5d45d9dde
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/horizontal-rules.test
@@ -0,0 +1,132 @@
+<<<
+Dashes:
+
+---
+
+ ---
+
+ ---
+
+ ---
+
+ ---
+
+- - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+
+Asterisks:
+
+***
+
+ ***
+
+ ***
+
+ ***
+
+ ***
+
+* * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+
+Underscores:
+
+___
+
+ ___
+
+ ___
+
+ ___
+
+ ___
+
+_ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+
+>>>
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+inputVerbatim: ./_markdown_test/6105347ebb9825ac754615ca55ff3b0c.verbatim
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+inputVerbatim: ./_markdown_test/162bbc959948880b7b81a0fe05afbe29.verbatim
+interblockSeparator
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+inputVerbatim: ./_markdown_test/2bb6aed5111ef9726bcf6eef982ff32b.verbatim
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+inputVerbatim: ./_markdown_test/11de6126af81e6dc22594955105d9180.verbatim
+interblockSeparator
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+inputVerbatim: ./_markdown_test/926225b865393c08438ddbfd89ff3d40.verbatim
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+inputVerbatim: ./_markdown_test/c4775559353a17841cc9cde2eae040b2.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-inline-style.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-inline-style.test
new file mode 100644
index 0000000000..d956be1ede
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-inline-style.test
@@ -0,0 +1,50 @@
+<<<
+Just a [URL](/url/).
+
+[URL and title](/url/ "title").
+
+[URL and title](/url/ "title preceded by two spaces").
+
+[URL and title](/url/ "title preceded by a tab").
+
+[URL and title](/url/ "title has spaces afterward" ).
+
+
+[Empty]().
+
+>>>
+BEGIN link
+- label: URL
+- URI: /url/
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: URL and title
+- URI: /url/
+- title: title
+END link
+interblockSeparator
+BEGIN link
+- label: URL and title
+- URI: /url/
+- title: title preceded by two spaces
+END link
+interblockSeparator
+BEGIN link
+- label: URL and title
+- URI: /url/
+- title: title preceded by a tab
+END link
+interblockSeparator
+BEGIN link
+- label: URL and title
+- URI: /url/
+- title: title has spaces afterward
+END link
+interblockSeparator
+BEGIN link
+- label: Empty
+- URI:
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-reference-style.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-reference-style.test
new file mode 100644
index 0000000000..793ea37dca
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-reference-style.test
@@ -0,0 +1,176 @@
+<<<
+Foo [bar] [1].
+
+Foo [bar][1].
+
+Foo [bar]
+[1].
+
+[1]: /url/ "Title"
+
+
+With [embedded [brackets]] [b].
+
+
+Indented [once][].
+
+Indented [twice][].
+
+Indented [thrice][].
+
+Indented [four][] times.
+
+ [once]: /url
+
+ [twice]: /url
+
+ [thrice]: /url
+
+ [four]: /url
+
+
+[b]: /url/
+
+* * *
+
+[this] [this] should work
+
+So should [this][this].
+
+And [this] [].
+
+And [this][].
+
+And [this].
+
+But not [that] [].
+
+Nor [that][].
+
+Nor [that].
+
+[Something in brackets like [this][] should work]
+
+[Same with [this].]
+
+In this case, [this](/somethingelse/) points to something else.
+
+Backslashing should suppress \[this] and [this\].
+
+[this]: foo
+
+
+* * *
+
+Here's one where the [link
+breaks] across lines.
+
+[link breaks]: /url/
+
+>>>
+BEGIN link
+- label: bar
+- URI: /url/
+- title: Title
+END link
+interblockSeparator
+BEGIN link
+- label: bar
+- URI: /url/
+- title: Title
+END link
+interblockSeparator
+BEGIN link
+- label: bar
+- URI: /url/
+- title: Title
+END link
+interblockSeparator
+BEGIN link
+- label: embedded [brackets]
+- URI: /url/
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: once
+- URI: /url
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: twice
+- URI: /url
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: thrice
+- URI: /url
+- title:
+END link
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/b0cba64633d2a9eac28ca9e3fa500018.verbatim
+interblockSeparator
+horizontalRule
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: /somethingelse/
+- title:
+END link
+interblockSeparator
+interblockSeparator
+horizontalRule
+interblockSeparator
+BEGIN link
+- label: link breaks
+- URI: /url/
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-shortcut-references.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-shortcut-references.test
new file mode 100644
index 0000000000..24b189d7c9
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/links-shortcut-references.test
@@ -0,0 +1,42 @@
+<<<
+This is the [simple case].
+
+[simple case]: /simple
+
+
+
+This one has a [line
+break].
+
+[line break]: /foo
+
+
+[this] [that] and the [other]
+
+[this]: /this
+[that]: /that
+[other]: /other
+
+>>>
+BEGIN link
+- label: simple case
+- URI: /simple
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: line break
+- URI: /foo
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: this
+- URI: /that
+- title:
+END link
+BEGIN link
+- label: other
+- URI: /other
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/literal-quotes-in-titles.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/literal-quotes-in-titles.test
new file mode 100644
index 0000000000..cd44028f8f
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/literal-quotes-in-titles.test
@@ -0,0 +1,21 @@
+<<<
+Foo [bar][].
+
+Foo [bar](/url/ "Title with "quotes" inside").
+
+
+ [bar]: /url/ "Title with "quotes" inside"
+
+
+>>>
+BEGIN link
+- label: bar
+- URI: /url/
+- title: Title with "quotes" inside
+END link
+interblockSeparator
+BEGIN link
+- label: bar
+- URI: /url/
+- title: Title with "quotes" inside
+END link
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-basics.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-basics.test
new file mode 100644
index 0000000000..4ce4b68028
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-basics.test
@@ -0,0 +1,436 @@
+<<<
+Markdown: Basics
+================
+
+Getting the Gist of Markdown's Formatting Syntax
+------------------------------------------------
+
+This page offers a brief overview of what it's like to use Markdown.
+The [syntax page] [s] provides complete, detailed documentation for
+every feature, but Markdown should be very easy to pick up simply by
+looking at a few examples of it in action. The examples on this page
+are written in a before/after style, showing example syntax and the
+HTML output produced by Markdown.
+
+It's also helpful to simply try Markdown out; the [Dingus] [d] is a
+web application that allows you type your own Markdown-formatted text
+and translate it to XHTML.
+
+**Note:** This document is itself written using Markdown; you
+can [see the source for it by adding '.text' to the URL] [src].
+
+ [s]: /projects/markdown/syntax "Markdown Syntax"
+ [d]: /projects/markdown/dingus "Markdown Dingus"
+ [src]: /projects/markdown/basics.text
+
+
+## Paragraphs, Headers, Blockquotes ##
+
+A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.
+
+Markdown offers two styles of headers: *Setext* and *atx*.
+Setext-style headers for `<h1>` and `<h2>` are created by
+"underlining" with equal signs (`=`) and hyphens (`-`), respectively.
+To create an atx-style header, you put 1-6 hash marks (`#`) at the
+beginning of the line -- the number of hashes equals the resulting
+HTML header level.
+
+Blockquotes are indicated using email-style '`>`' angle brackets.
+
+Markdown:
+
+ A First Level Header
+ ====================
+
+ A Second Level Header
+ ---------------------
+
+ Now is the time for all good men to come to
+ the aid of their country. This is just a
+ regular paragraph.
+
+ The quick brown fox jumped over the lazy
+ dog's back.
+
+ ### Header 3
+
+ > This is a blockquote.
+ >
+ > This is the second paragraph in the blockquote.
+ >
+ > ## This is an H2 in a blockquote
+
+
+Output:
+
+ <h1>A First Level Header</h1>
+
+ <h2>A Second Level Header</h2>
+
+ <p>Now is the time for all good men to come to
+ the aid of their country. This is just a
+ regular paragraph.</p>
+
+ <p>The quick brown fox jumped over the lazy
+ dog's back.</p>
+
+ <h3>Header 3</h3>
+
+ <blockquote>
+ <p>This is a blockquote.</p>
+
+ <p>This is the second paragraph in the blockquote.</p>
+
+ <h2>This is an H2 in a blockquote</h2>
+ </blockquote>
+
+
+
+### Phrase Emphasis ###
+
+Markdown uses asterisks and underscores to indicate spans of emphasis.
+
+Markdown:
+
+ Some of these words *are emphasized*.
+ Some of these words _are emphasized also_.
+
+ Use two asterisks for **strong emphasis**.
+ Or, if you prefer, __use two underscores instead__.
+
+Output:
+
+ <p>Some of these words <em>are emphasized</em>.
+ Some of these words <em>are emphasized also</em>.</p>
+
+ <p>Use two asterisks for <strong>strong emphasis</strong>.
+ Or, if you prefer, <strong>use two underscores instead</strong>.</p>
+
+
+
+## Lists ##
+
+Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`,
+`+`, and `-`) as list markers. These three markers are
+interchangable; this:
+
+ * Candy.
+ * Gum.
+ * Booze.
+
+this:
+
+ + Candy.
+ + Gum.
+ + Booze.
+
+and this:
+
+ - Candy.
+ - Gum.
+ - Booze.
+
+all produce the same output:
+
+ <ul>
+ <li>Candy.</li>
+ <li>Gum.</li>
+ <li>Booze.</li>
+ </ul>
+
+Ordered (numbered) lists use regular numbers, followed by periods, as
+list markers:
+
+ 1. Red
+ 2. Green
+ 3. Blue
+
+Output:
+
+ <ol>
+ <li>Red</li>
+ <li>Green</li>
+ <li>Blue</li>
+ </ol>
+
+If you put blank lines between items, you'll get `<p>` tags for the
+list item text. You can create multi-paragraph list items by indenting
+the paragraphs by 4 spaces or 1 tab:
+
+ * A list item.
+
+ With multiple paragraphs.
+
+ * Another item in the list.
+
+Output:
+
+ <ul>
+ <li><p>A list item.</p>
+ <p>With multiple paragraphs.</p></li>
+ <li><p>Another item in the list.</p></li>
+ </ul>
+
+
+
+### Links ###
+
+Markdown supports two styles for creating links: *inline* and
+*reference*. With both styles, you use square brackets to delimit the
+text you want to turn into a link.
+
+Inline-style links use parentheses immediately after the link text.
+For example:
+
+ This is an [example link](http://example.com/).
+
+Output:
+
+ <p>This is an <a href="http://example.com/">
+ example link</a>.</p>
+
+Optionally, you may include a title attribute in the parentheses:
+
+ This is an [example link](http://example.com/ "With a Title").
+
+Output:
+
+ <p>This is an <a href="http://example.com/" title="With a Title">
+ example link</a>.</p>
+
+Reference-style links allow you to refer to your links by names, which
+you define elsewhere in your document:
+
+ I get 10 times more traffic from [Google][1] than from
+ [Yahoo][2] or [MSN][3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+
+Output:
+
+ <p>I get 10 times more traffic from <a href="http://google.com/"
+ title="Google">Google</a> than from <a href="http://search.yahoo.com/"
+ title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
+ title="MSN Search">MSN</a>.</p>
+
+The title attribute is optional. Link names may contain letters,
+numbers and spaces, but are *not* case sensitive:
+
+ I start my morning with a cup of coffee and
+ [The New York Times][NY Times].
+
+ [ny times]: http://www.nytimes.com/
+
+Output:
+
+ <p>I start my morning with a cup of coffee and
+ <a href="http://www.nytimes.com/">The New York Times</a>.</p>
+
+
+### Images ###
+
+Image syntax is very much like link syntax.
+
+Inline (titles are optional):
+
+ ![alt text](/path/to/img.jpg "Title")
+
+Reference-style:
+
+ ![alt text][id]
+
+ [id]: /path/to/img.jpg "Title"
+
+Both of the above examples produce the same output:
+
+ <img src="/path/to/img.jpg" alt="alt text" title="Title" />
+
+
+
+### Code ###
+
+In a regular paragraph, you can create code span by wrapping text in
+backtick quotes. Any ampersands (`&`) and angle brackets (`<` or
+`>`) will automatically be translated into HTML entities. This makes
+it easy to use Markdown to write about HTML example code:
+
+ I strongly recommend against using any `<blink>` tags.
+
+Output:
+
+ <p>I strongly recommend against using any
+ <code>&lt;blink&gt;</code> tags.</p>
+
+
+To specify an entire block of pre-formatted code, indent every line of
+the block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`,
+and `>` characters will be escaped automatically.
+
+Markdown:
+
+ If you want your page to validate under XHTML 1.0 Strict,
+ you've got to put paragraph tags in your blockquotes:
+
+ <blockquote>
+ <p>For example.</p>
+ </blockquote>
+
+Output:
+
+ <p>If you want your page to validate under XHTML 1.0 Strict,
+ you've got to put paragraph tags in your blockquotes:</p>
+
+ <pre><code>&lt;blockquote&gt;
+ &lt;p&gt;For example.&lt;/p&gt;
+ &lt;/blockquote&gt;
+ </code></pre>
+
+>>>
+headingOne: Markdown: Basics
+interblockSeparator
+headingTwo: Getting the Gist of Markdown's Formatting Syntax
+interblockSeparator
+BEGIN link
+- label: syntax page
+- URI: /projects/markdown/syntax
+- title: Markdown Syntax
+END link
+interblockSeparator
+BEGIN link
+- label: Dingus
+- URI: /projects/markdown/dingus
+- title: Markdown Dingus
+END link
+interblockSeparator
+strongEmphasis: Note:
+BEGIN link
+- label: see the source for it by adding '.text' to the URL
+- URI: /projects/markdown/basics.text
+- title:
+END link
+interblockSeparator
+headingTwo: Paragraphs, Headers, Blockquotes
+interblockSeparator
+interblockSeparator
+emphasis: Setext
+emphasis: atx
+codeSpan: <h1>
+codeSpan: <h2>
+codeSpan: =
+codeSpan: -
+codeSpan: (hash)
+interblockSeparator
+codeSpan: >
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/5ebdf3631f626dba5ee92ee773e97a8f.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/9347d3cfacf328e3d73c4fe1b4f76524.verbatim
+interblockSeparator
+headingThree: Phrase Emphasis
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/495d205391f56da33d355c43c81daa64.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/60195f0a7c825159eb9156947e6fb71b.verbatim
+interblockSeparator
+headingTwo: Lists
+interblockSeparator
+codeSpan: *
+codeSpan: +
+codeSpan: -
+interblockSeparator
+inputVerbatim: ./_markdown_test/30a921ea3110056dc221ed257b3c883b.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/674e077aa8994de8bf541093168d2e29.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/7ae61eceff910c380dbe3ee9af7b6c4a.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/b84dd49773de7abaeec71bfa32680045.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/2a1d33d66339f281e4a171d1eb084b07.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/430a75a1628ba89cc2b1005bb1e5d932.verbatim
+interblockSeparator
+codeSpan: <p>
+interblockSeparator
+inputVerbatim: ./_markdown_test/e6108616b0422dd64f485971e61ac69c.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/0bd4d7d78b1cd0e46e78a522f613a6a3.verbatim
+interblockSeparator
+headingThree: Links
+interblockSeparator
+emphasis: inline
+emphasis: reference
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/20cfebed5272ba2f01c1aee798509f18.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/46124210265b51c9d470c0c70a598037.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/d56162c63107aadd63a5b6ca05f491e9.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/c62653fbfcf155bfe2912f066f242885.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/b996f30ba094126a05b4797a048ff2d2.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/0b1519420e84d1c754b52b25170d7213.verbatim
+interblockSeparator
+emphasis: not
+interblockSeparator
+inputVerbatim: ./_markdown_test/15e1c1abc08ec60d9181f9578c6cf172.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/440c1e901154984bf647fc152cb0971b.verbatim
+interblockSeparator
+headingThree: Images
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/602bb0e325271b2b4dce9175eaed15b1.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/e5b369214c819b9d9b476b7bb1f5aa53.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/885cbee5cc0e1fac9ce25c3a9d30034e.verbatim
+interblockSeparator
+headingThree: Code
+interblockSeparator
+codeSpan: (ampersand)
+codeSpan: <
+codeSpan: >
+interblockSeparator
+inputVerbatim: ./_markdown_test/fbcaafb68ad6405619da77e413788d6e.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/cfc57312a789ed7b4e14f3f56c88381a.verbatim
+interblockSeparator
+codeSpan: (ampersand)
+codeSpan: <
+codeSpan: >
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/fe59314852dc8de3165464ab451f44a0.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/3f58f44c2de7257eb42c24e7aee621c5.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-syntax.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-syntax.test
new file mode 100644
index 0000000000..2942add07e
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/markdown-documentation-syntax.test
@@ -0,0 +1,1518 @@
+<<<
+Markdown: Syntax
+================
+
+* [Overview](#overview)
+ * [Philosophy](#philosophy)
+ * [Inline HTML](#html)
+ * [Automatic Escaping for Special Characters](#autoescape)
+* [Block Elements](#block)
+ * [Paragraphs and Line Breaks](#p)
+ * [Headers](#header)
+ * [Blockquotes](#blockquote)
+ * [Lists](#list)
+ * [Code Blocks](#precode)
+ * [Horizontal Rules](#hr)
+* [Span Elements](#span)
+ * [Links](#link)
+ * [Emphasis](#em)
+ * [Code](#code)
+ * [Images](#img)
+* [Miscellaneous](#misc)
+ * [Backslash Escapes](#backslash)
+ * [Automatic Links](#autolink)
+
+
+**Note:** This document is itself written using Markdown; you
+can [see the source for it by adding '.text' to the URL][src].
+
+ [src]: /projects/markdown/syntax.text
+
+* * *
+
+## Overview
+
+### Philosophy
+
+Markdown is intended to be as easy-to-read and easy-to-write as is feasible.
+
+Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4],
+[Grutatext] [5], and [EtText] [6] -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.
+
+ [1]: http://docutils.sourceforge.net/mirror/setext.html
+ [2]: http://www.aaronsw.com/2002/atx/
+ [3]: http://textism.com/tools/textile/
+ [4]: http://docutils.sourceforge.net/rst.html
+ [5]: http://www.triptico.com/software/grutatxt.html
+ [6]: http://ettext.taint.org/doc/
+
+To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like \*emphasis\*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.
+
+
+
+### Inline HTML
+
+Markdown's syntax is intended for one purpose: to be used as a
+format for *writing* for the web.
+
+Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is *not* to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a *publishing* format; Markdown is a *writing*
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.
+
+For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.
+
+The only restrictions are that block-level HTML elements -- e.g. `<div>`,
+`<table>`, `<pre>`, `<p>`, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) `<p>` tags around HTML block-level tags.
+
+For example, to add an HTML table to a Markdown article:
+
+ This is a regular paragraph.
+
+ <table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+ </table>
+
+ This is another regular paragraph.
+
+Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an
+HTML block.
+
+Span-level HTML tags -- e.g. `<span>`, `<cite>`, or `<del>` -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML `<a>` or `<img>` tags instead of Markdown's
+link or image syntax, go right ahead.
+
+Unlike block-level HTML tags, Markdown syntax *is* processed within
+span-level tags.
+
+
+### Automatic Escaping for Special Characters
+
+In HTML, there are two characters that demand special treatment: `<`
+and `&`. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. `&lt;`, and
+`&amp;`.
+
+Ampersands in particular are bedeviling for web writers. If you want to
+write about 'AT&T', you need to write '`AT&amp;T`'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:
+
+ http://images.google.com/images?num=30&q=larry+bird
+
+you need to encode the URL as:
+
+ http://images.google.com/images?num=30&amp;q=larry+bird
+
+in your anchor tag `href` attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.
+
+Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into `&amp;`.
+
+So, if you want to include a copyright symbol in your article, you can write:
+
+ &copy;
+
+and Markdown will leave it alone. But if you write:
+
+ AT&T
+
+Markdown will translate it to:
+
+ AT&amp;T
+
+Similarly, because Markdown supports [inline HTML](#html), if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:
+
+ 4 < 5
+
+Markdown will translate it to:
+
+ 4 &lt; 5
+
+However, inside Markdown code spans and blocks, angle brackets and
+ampersands are *always* encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single `<`
+and `&` in your example code needs to be escaped.)
+
+
+* * *
+
+
+## Block Elements
+
+
+### Paragraphs and Line Breaks
+
+A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be intended with spaces or tabs.
+
+The implication of the "one or more consecutive lines of text" rule is
+that Markdown supports "hard-wrapped" text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's "Convert Line Breaks" option) which translate every line break
+character in a paragraph into a `<br />` tag.
+
+When you *do* want to insert a `<br />` break tag using Markdown, you
+end a line with two or more spaces, then type return.
+
+Yes, this takes a tad more effort to create a `<br />`, but a simplistic
+"every line break is a `<br />`" rule wouldn't work for Markdown.
+Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l]
+work best -- and look better -- when you format them with hard breaks.
+
+ [bq]: #blockquote
+ [l]: #list
+
+
+
+### Headers
+
+Markdown supports two styles of headers, [Setext] [1] and [atx] [2].
+
+Setext-style headers are "underlined" using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:
+
+ This is an H1
+ =============
+
+ This is an H2
+ -------------
+
+Any number of underlining `=`'s or `-`'s will work.
+
+Atx-style headers use 1-6 hash characters at the start of the line,
+corresponding to header levels 1-6. For example:
+
+ # This is an H1
+
+ ## This is an H2
+
+ ###### This is an H6
+
+Optionally, you may "close" atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :
+
+ # This is an H1 #
+
+ ## This is an H2 ##
+
+ ### This is an H3 ######
+
+
+### Blockquotes
+
+Markdown uses email-style `>` characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a `>` before every line:
+
+ > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+ > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+ > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+ >
+ > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+ > id sem consectetuer libero luctus adipiscing.
+
+Markdown allows you to be lazy and only put the `>` before the first
+line of a hard-wrapped paragraph:
+
+ > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+ consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+ > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+ id sem consectetuer libero luctus adipiscing.
+
+Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of `>`:
+
+ > This is the first level of quoting.
+ >
+ > > This is nested blockquote.
+ >
+ > Back to the first level.
+
+Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:
+
+ > ## This is a header.
+ >
+ > 1. This is the first list item.
+ > 2. This is the second list item.
+ >
+ > Here's some example code:
+ >
+ > return shell_exec("echo $input | $markdown_script");
+
+Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.
+
+
+### Lists
+
+Markdown supports ordered (numbered) and unordered (bulleted) lists.
+
+Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:
+
+ * Red
+ * Green
+ * Blue
+
+is equivalent to:
+
+ + Red
+ + Green
+ + Blue
+
+and:
+
+ - Red
+ - Green
+ - Blue
+
+Ordered lists use numbers followed by periods:
+
+ 1. Bird
+ 2. McHale
+ 3. Parish
+
+It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:
+
+ <ol>
+ <li>Bird</li>
+ <li>McHale</li>
+ <li>Parish</li>
+ </ol>
+
+If you instead wrote the list in Markdown like this:
+
+ 1. Bird
+ 1. McHale
+ 1. Parish
+
+or even:
+
+ 3. Bird
+ 1. McHale
+ 8. Parish
+
+you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.
+
+If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.
+
+List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.
+
+To make lists look nice, you can wrap items with hanging indents:
+
+ * Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+ * Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+
+But if you want to be lazy, you don't have to:
+
+ * Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+ * Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+
+If list items are separated by blank lines, Markdown will wrap the
+items in `<p>` tags in the HTML output. For example, this input:
+
+ * Bird
+ * Magic
+
+will turn into:
+
+ <ul>
+ <li>Bird</li>
+ <li>Magic</li>
+ </ul>
+
+But this:
+
+ * Bird
+
+ * Magic
+
+will turn into:
+
+ <ul>
+ <li><p>Bird</p></li>
+ <li><p>Magic</p></li>
+ </ul>
+
+List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be intended by either 4 spaces
+or one tab:
+
+ 1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+ 2. Suspendisse id sem consectetuer libero luctus adipiscing.
+
+It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:
+
+ * This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+ only required to indent the first line. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit.
+
+ * Another item in the same list.
+
+To put a blockquote within a list item, the blockquote's `>`
+delimiters need to be indented:
+
+ * A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+
+To put a code block within a list item, the code block needs
+to be indented *twice* -- 8 spaces or two tabs:
+
+ * A list item with a code block:
+
+ <code goes here>
+
+
+It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:
+
+ 1986. What a great season.
+
+In other words, a *number-period-space* sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:
+
+ 1986\. What a great season.
+
+
+
+### Code Blocks
+
+Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both `<pre>` and `<code>` tags.
+
+To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:
+
+ This is a normal paragraph:
+
+ This is a code block.
+
+Markdown will generate:
+
+ <p>This is a normal paragraph:</p>
+
+ <pre><code>This is a code block.
+ </code></pre>
+
+One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:
+
+ Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+
+will turn into:
+
+ <p>Here is an example of AppleScript:</p>
+
+ <pre><code>tell application "Foo"
+ beep
+ end tell
+ </code></pre>
+
+A code block continues until it reaches a line that is not indented
+(or the end of the article).
+
+Within a code block, ampersands (`&`) and angle brackets (`<` and `>`)
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:
+
+ <div class="footer">
+ &copy; 2004 Foo Corporation
+ </div>
+
+will turn into:
+
+ <pre><code>&lt;div class="footer"&gt;
+ &amp;copy; 2004 Foo Corporation
+ &lt;/div&gt;
+ </code></pre>
+
+Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.
+
+
+
+### Horizontal Rules
+
+You can produce a horizontal rule tag (`<hr />`) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:
+
+ * * *
+
+ ***
+
+ *****
+
+ - - -
+
+ ---------------------------------------
+
+ _ _ _
+
+
+* * *
+
+## Span Elements
+
+### Links
+
+Markdown supports two style of links: *inline* and *reference*.
+
+In both styles, the link text is delimited by [square brackets].
+
+To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an *optional*
+title for the link, surrounded in quotes. For example:
+
+ This is [an example](http://example.com/ "Title") inline link.
+
+ [This link](http://example.net/) has no title attribute.
+
+Will produce:
+
+ <p>This is <a href="http://example.com/" title="Title">
+ an example</a> inline link.</p>
+
+ <p><a href="http://example.net/">This link</a> has no
+ title attribute.</p>
+
+If you're referring to a local resource on the same server, you can
+use relative paths:
+
+ See my [About](/about/) page for details.
+
+Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:
+
+ This is [an example][id] reference-style link.
+
+You can optionally use a space to separate the sets of brackets:
+
+ This is [an example] [id] reference-style link.
+
+Then, anywhere in the document, you define your link label like this,
+on a line by itself:
+
+ [id]: http://example.com/ "Optional Title Here"
+
+That is:
+
+* Square brackets containing the link identifier (optionally
+ indented from the left margin using up to three spaces);
+* followed by a colon;
+* followed by one or more spaces (or tabs);
+* followed by the URL for the link;
+* optionally followed by a title attribute for the link, enclosed
+ in double or single quotes.
+
+The link URL may, optionally, be surrounded by angle brackets:
+
+ [id]: <http://example.com/> "Optional Title Here"
+
+You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:
+
+ [id]: http://example.com/longish/path/to/resource/here
+ "Optional Title Here"
+
+Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.
+
+Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links:
+
+ [link text][a]
+ [link text][A]
+
+are equivalent.
+
+The *implicit link name* shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+"Google" to the google.com web site, you could simply write:
+
+ [Google][]
+
+And then define the link:
+
+ [Google]: http://google.com/
+
+Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:
+
+ Visit [Daring Fireball][] for more information.
+
+And then define the link:
+
+ [Daring Fireball]: http://daringfireball.net/
+
+Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.
+
+Here's an example of reference links in action:
+
+ I get 10 times more traffic from [Google] [1] than from
+ [Yahoo] [2] or [MSN] [3].
+
+ [1]: http://google.com/ "Google"
+ [2]: http://search.yahoo.com/ "Yahoo Search"
+ [3]: http://search.msn.com/ "MSN Search"
+
+Using the implicit link name shortcut, you could instead write:
+
+ I get 10 times more traffic from [Google][] than from
+ [Yahoo][] or [MSN][].
+
+ [google]: http://google.com/ "Google"
+ [yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [msn]: http://search.msn.com/ "MSN Search"
+
+Both of the above examples will produce the following HTML output:
+
+ <p>I get 10 times more traffic from <a href="http://google.com/"
+ title="Google">Google</a> than from
+ <a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+ or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+
+For comparison, here is the same paragraph written using
+Markdown's inline link style:
+
+ I get 10 times more traffic from [Google](http://google.com/ "Google")
+ than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+ [MSN](http://search.msn.com/ "MSN Search").
+
+The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.
+
+With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.
+
+
+### Emphasis
+
+Markdown treats asterisks (`*`) and underscores (`_`) as indicators of
+emphasis. Text wrapped with one `*` or `_` will be wrapped with an
+HTML `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML
+`<strong>` tag. E.g., this input:
+
+ *single asterisks*
+
+ _single underscores_
+
+ **double asterisks**
+
+ __double underscores__
+
+will produce:
+
+ <em>single asterisks</em>
+
+ <em>single underscores</em>
+
+ <strong>double asterisks</strong>
+
+ <strong>double underscores</strong>
+
+You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.
+
+Emphasis can be used in the middle of a word:
+
+ un*fucking*believable
+
+But if you surround an `*` or `_` with spaces, it'll be treated as a
+literal asterisk or underscore.
+
+To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:
+
+ \*this text is surrounded by literal asterisks\*
+
+
+
+### Code
+
+To indicate a span of code, wrap it with backtick quotes (`` ` ``).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:
+
+ Use the `printf()` function.
+
+will produce:
+
+ <p>Use the <code>printf()</code> function.</p>
+
+To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:
+
+ ``There is a literal backtick (`) here.``
+
+which will produce this:
+
+ <p><code>There is a literal backtick (`) here.</code></p>
+
+The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:
+
+ A single backtick in a code span: `` ` ``
+
+ A backtick-delimited string in a code span: `` `foo` ``
+
+will produce:
+
+ <p>A single backtick in a code span: <code>`</code></p>
+
+ <p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+
+With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:
+
+ Please don't use any `<blink>` tags.
+
+into:
+
+ <p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+
+You can write this:
+
+ `&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+
+to produce:
+
+ <p><code>&amp;#8212;</code> is the decimal-encoded
+ equivalent of <code>&amp;mdash;</code>.</p>
+
+
+
+### Images
+
+Admittedly, it's fairly difficult to devise a "natural" syntax for
+placing images into a plain text document format.
+
+Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: *inline* and *reference*.
+
+Inline image syntax looks like this:
+
+ ![Alt text](/path/to/img.jpg)
+
+ ![Alt text](/path/to/img.jpg "Optional title")
+
+That is:
+
+* An exclamation mark: `!`;
+* followed by a set of square brackets, containing the `alt`
+ attribute text for the image;
+* followed by a set of parentheses, containing the URL or path to
+ the image, and an optional `title` attribute enclosed in double
+ or single quotes.
+
+Reference-style image syntax looks like this:
+
+ ![Alt text][id]
+
+Where "id" is the name of a defined image reference. Image references
+are defined using syntax identical to link references:
+
+ [id]: url/to/image "Optional title attribute"
+
+As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML `<img>` tags.
+
+
+* * *
+
+
+## Miscellaneous
+
+### Automatic Links
+
+Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:
+
+ <http://example.com/>
+
+Markdown will turn this into:
+
+ <a href="http://example.com/">http://example.com/</a>
+
+Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:
+
+ <address@example.com>
+
+into something like this:
+
+ <a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+ &#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+ &#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+ &#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+
+which will render in a browser as a clickable link to "address@example.com".
+
+(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)
+
+
+
+### Backslash Escapes
+
+Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word with
+literal asterisks (instead of an HTML `<em>` tag), you can backslashes
+before the asterisks, like this:
+
+ \*literal asterisks\*
+
+Markdown provides backslash escapes for the following characters:
+
+ \ backslash
+ ` backtick
+ * asterisk
+ _ underscore
+ {} curly braces
+ [] square brackets
+ () parentheses
+ # hash mark
+ + plus sign
+ - minus sign (hyphen)
+ . dot
+ ! exclamation mark
+
+>>>
+headingOne: Markdown: Syntax
+interblockSeparator
+ulBeginTight
+ulItem
+BEGIN link
+- label: Overview
+- URI: (hash)overview
+- title:
+END link
+interblockSeparator
+ulBeginTight
+ulItem
+BEGIN link
+- label: Philosophy
+- URI: (hash)philosophy
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Inline HTML
+- URI: (hash)html
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Automatic Escaping for Special Characters
+- URI: (hash)autoescape
+- title:
+END link
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulItem
+BEGIN link
+- label: Block Elements
+- URI: (hash)block
+- title:
+END link
+interblockSeparator
+ulBeginTight
+ulItem
+BEGIN link
+- label: Paragraphs and Line Breaks
+- URI: (hash)p
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Headers
+- URI: (hash)header
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Blockquotes
+- URI: (hash)blockquote
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Lists
+- URI: (hash)list
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Code Blocks
+- URI: (hash)precode
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Horizontal Rules
+- URI: (hash)hr
+- title:
+END link
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulItem
+BEGIN link
+- label: Span Elements
+- URI: (hash)span
+- title:
+END link
+interblockSeparator
+ulBeginTight
+ulItem
+BEGIN link
+- label: Links
+- URI: (hash)link
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Emphasis
+- URI: (hash)em
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Code
+- URI: (hash)code
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Images
+- URI: (hash)img
+- title:
+END link
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulItem
+BEGIN link
+- label: Miscellaneous
+- URI: (hash)misc
+- title:
+END link
+interblockSeparator
+ulBeginTight
+ulItem
+BEGIN link
+- label: Backslash Escapes
+- URI: (hash)backslash
+- title:
+END link
+ulItemEnd
+ulItem
+BEGIN link
+- label: Automatic Links
+- URI: (hash)autolink
+- title:
+END link
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulEndTight
+interblockSeparator
+strongEmphasis: Note:
+BEGIN link
+- label: see the source for it by adding '.text' to the URL
+- URI: /projects/markdown/syntax.text
+- title:
+END link
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingTwo: Overview
+interblockSeparator
+headingThree: Philosophy
+interblockSeparator
+interblockSeparator
+BEGIN link
+- label: Setext
+- URI: http://docutils.sourceforge.net/mirror/setext.html
+- title:
+END link
+BEGIN link
+- label: atx
+- URI: http://www.aaronsw.com/2002/atx/
+- title:
+END link
+BEGIN link
+- label: Textile
+- URI: http://textism.com/tools/textile/
+- title:
+END link
+BEGIN link
+- label: reStructuredText
+- URI: http://docutils.sourceforge.net/rst.html
+- title:
+END link
+BEGIN link
+- label: Grutatext
+- URI: http://www.triptico.com/software/grutatxt.html
+- title:
+END link
+BEGIN link
+- label: EtText
+- URI: http://ettext.taint.org/doc/
+- title:
+END link
+interblockSeparator
+interblockSeparator
+headingThree: Inline HTML
+interblockSeparator
+emphasis: writing
+interblockSeparator
+emphasis: not
+emphasis: publishing
+emphasis: writing
+interblockSeparator
+interblockSeparator
+codeSpan: <div>
+codeSpan: <table>
+codeSpan: <pre>
+codeSpan: <p>
+codeSpan: <p>
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/6c0e67934e0358fd4071cf4247bcf221.verbatim
+interblockSeparator
+codeSpan: *emphasis*
+interblockSeparator
+codeSpan: <span>
+codeSpan: <cite>
+codeSpan: <del>
+codeSpan: <a>
+codeSpan: <img>
+interblockSeparator
+emphasis: is
+interblockSeparator
+headingThree: Automatic Escaping for Special Characters
+interblockSeparator
+codeSpan: <
+codeSpan: (ampersand)
+codeSpan: (ampersand)lt;
+codeSpan: (ampersand)amp;
+interblockSeparator
+ampersand
+codeSpan: AT(ampersand)amp;T
+interblockSeparator
+inputVerbatim: ./_markdown_test/01abe6d069cf62de251cf21f8df1d11f.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/3bb5e0b18bdd7c9688b9f5df139967f3.verbatim
+interblockSeparator
+codeSpan: href
+interblockSeparator
+codeSpan: (ampersand)amp;
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/9f3cb292eb01028cce569a08ef6f975b.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/7cdba89e6cc34bd4841c7c6a41bb4156.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/c79c1d6af747ea457d80ff723101137a.verbatim
+interblockSeparator
+BEGIN link
+- label: inline HTML
+- URI: (hash)html
+- title:
+END link
+interblockSeparator
+inputVerbatim: ./_markdown_test/e76bfed335c678dbe01b3982b9b46fdc.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/cc7bb6b7c24a66c62c969328036e8f7b.verbatim
+interblockSeparator
+emphasis: always
+codeSpan: <
+codeSpan: (ampersand)
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingTwo: Block Elements
+interblockSeparator
+headingThree: Paragraphs and Line Breaks
+interblockSeparator
+interblockSeparator
+codeSpan: <br />
+interblockSeparator
+emphasis: do
+codeSpan: <br />
+interblockSeparator
+codeSpan: <br />
+codeSpan: <br />
+BEGIN link
+- label: blockquoting
+- URI: (hash)blockquote
+- title:
+END link
+BEGIN link
+- label: list items
+- URI: (hash)list
+- title:
+END link
+interblockSeparator
+headingThree: Headers
+interblockSeparator
+BEGIN link
+- label: Setext
+- URI: http://docutils.sourceforge.net/mirror/setext.html
+- title:
+END link
+BEGIN link
+- label: atx
+- URI: http://www.aaronsw.com/2002/atx/
+- title:
+END link
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/4f59d4e23ef758fd94bd2324643e2f2b.verbatim
+interblockSeparator
+codeSpan: =
+codeSpan: -
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/48058b850bf198c75e9571ef25b4174e.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/37d9f30690dba801bda9a65ec7cfd1be.verbatim
+interblockSeparator
+headingThree: Blockquotes
+interblockSeparator
+codeSpan: >
+codeSpan: >
+interblockSeparator
+inputVerbatim: ./_markdown_test/a89055d359469d454a801830954a9c6f.verbatim
+interblockSeparator
+codeSpan: >
+interblockSeparator
+inputVerbatim: ./_markdown_test/944cb176339d03ac7508f0f66090979f.verbatim
+interblockSeparator
+codeSpan: >
+interblockSeparator
+inputVerbatim: ./_markdown_test/2a3331ca2a955f6ad7da2480f9cda089.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/539f94bbd698cb75fb0cd1ba51d297b2.verbatim
+interblockSeparator
+interblockSeparator
+headingThree: Lists
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/7667e2408d637a1e3ca69ccc1ce50809.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/f9c93344b256fc419363b5137a49888e.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/0ae7b8161204fb8d79d287ece754d868.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/5159786425bde2cec7e20b79500dde54.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/9679de8f4110a0e2906694aa1804cbf0.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/68c7899020501a169d9e9ca810aff930.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/733b6752776567144548322ef66d67e6.verbatim
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/3915e80c9e2b1a87599797fb217c295b.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/35441140ac44d3c2c7b9611d18c6dca4.verbatim
+interblockSeparator
+codeSpan: <p>
+interblockSeparator
+inputVerbatim: ./_markdown_test/92f4628c14a10b92aead4a4ebd01936a.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/02afc9ab8392711baf578d89e8b624a8.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/ec0f57523c3541a14df8f17f3c822039.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/197c8667c0c0307c8174e6a6e07c2a48.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/a07ba2a71f8cd42180768463fa2e5dad.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/d56908f0f6e2476a6146ece0fa7e2f32.verbatim
+interblockSeparator
+codeSpan: >
+interblockSeparator
+inputVerbatim: ./_markdown_test/4c06d5a765803dd6f15378765020443c.verbatim
+interblockSeparator
+emphasis: twice
+interblockSeparator
+inputVerbatim: ./_markdown_test/d3f24a5ba4f9ebe7c97b690753fef199.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/d87e20aae0facc7fbbc293f790178cf4.verbatim
+interblockSeparator
+emphasis: number-period-space
+interblockSeparator
+inputVerbatim: ./_markdown_test/ea5e5fa61236c2e31ecb34d484caed78.verbatim
+interblockSeparator
+headingThree: Code Blocks
+interblockSeparator
+codeSpan: <pre>
+codeSpan: <code>
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/80158a498770adf4d0617503ae558414.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/35dd5e3b1d316dec464fafbedf53439e.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/992aa3a21cc79d1a6a7b273173e1cc48.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/d37edcee91241df6034067902bf7ff5f.verbatim
+interblockSeparator
+interblockSeparator
+codeSpan: (ampersand)
+codeSpan: <
+codeSpan: >
+interblockSeparator
+inputVerbatim: ./_markdown_test/bfd3b2e8e47a22fe0914d55781a73b7c.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/6a14fbcefad86826e777c27a9000b94a.verbatim
+interblockSeparator
+interblockSeparator
+headingThree: Horizontal Rules
+interblockSeparator
+codeSpan: <hr />
+interblockSeparator
+inputVerbatim: ./_markdown_test/b3a754721670b6236c8eb8159555f38b.verbatim
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingTwo: Span Elements
+interblockSeparator
+headingThree: Links
+interblockSeparator
+emphasis: inline
+emphasis: reference
+interblockSeparator
+interblockSeparator
+emphasis: optional
+interblockSeparator
+inputVerbatim: ./_markdown_test/1414e8798e8df1116073e37e18480580.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/fee0581724d177221ef58d9e6a498b35.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/be45edb9cb5e6fb760f9805ffc37b64b.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/00842bca924b6e825c555a0866ba0488.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/525e6727b97cbbb73ce96c0ba62e8eb6.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/a35af952f6f3a307982ea5250cfb72de.verbatim
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/59be3295fa322e809f4138ef7500798a.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/a39ca11b40fca9daced4a3b44b1fc1a3.verbatim
+interblockSeparator
+interblockSeparator
+emphasis: not
+interblockSeparator
+inputVerbatim: ./_markdown_test/a943d1cc49e6963c7bcb45acfebf321f.verbatim
+interblockSeparator
+interblockSeparator
+emphasis: implicit link name
+interblockSeparator
+inputVerbatim: ./_markdown_test/c2c38dc7e1a41ddb3d50c965e569aab4.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/17194fe133f07ed35b959c9108de4cec.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/1a7658c341b463a9232093771a413acc.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/65aaecc2b48f0d27de8de608c27ed6e7.verbatim
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/31285fcec3a6ea99b4694d3e6750fc60.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/0810a7510b5a42a7ec77fd3d55be870e.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/28d0c5764a38e6b58409f9967ef91bcc.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/f39ac74789b190c9c1460bd06b2e5f66.verbatim
+interblockSeparator
+interblockSeparator
+interblockSeparator
+headingThree: Emphasis
+interblockSeparator
+codeSpan: *
+codeSpan: (underscore)
+codeSpan: *
+codeSpan: (underscore)
+codeSpan: <em>
+codeSpan: *
+codeSpan: (underscore)
+codeSpan: <strong>
+interblockSeparator
+inputVerbatim: ./_markdown_test/ad2981010cf94e370ccb06c7233f0989.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/451a1d0edf74505402610a4bae7997d0.verbatim
+interblockSeparator
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/3f3996b979db4e11ec6fd9b0232b3d83.verbatim
+interblockSeparator
+codeSpan: *
+codeSpan: (underscore)
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/85d79dd13f594a1dc7dc5b2be403366a.verbatim
+interblockSeparator
+headingThree: Code
+interblockSeparator
+codeSpan: `
+interblockSeparator
+inputVerbatim: ./_markdown_test/3013bb705f116d1bf7d7506a827cd6f1.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/0d572dc866bb6649bdedef400a32f2ee.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/000c6f567a8ecf3820cf43f6b248b303.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/a499280e33397f3bd9ec1415835a1c04.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/56cb72e47c0ff4e11b252117ed9d7c15.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/2624fb4324d31d847556b8cf06cc71a3.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/7e31b58c38fbe808c13ae0c21943fdbb.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/775e317bc6e9bac7e3a3a3f44dade6d1.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/b71470703a2237b352df145a688666b9.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/c7d2bf55eba7aa8ecd26cc75c0116ecd.verbatim
+interblockSeparator
+headingThree: Images
+interblockSeparator
+interblockSeparator
+emphasis: inline
+emphasis: reference
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/95e477e08806ad17333ef8c62ab1a9bf.verbatim
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+codeSpan: !
+ulItemEnd
+ulItem
+codeSpan: alt
+ulItemEnd
+ulItem
+codeSpan: title
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/90c3fb2e48c6bc6b5139b7d9fefe33eb.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/a5bd86aacaa065512fabab353b4646b5.verbatim
+interblockSeparator
+codeSpan: <img>
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingTwo: Miscellaneous
+interblockSeparator
+headingThree: Automatic Links
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/ba84105470e6c3ca4640b0165ba73e28.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/3d59db9474543617b421ad8938c9ad5f.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/7c01c9510936100673897e413a694f95.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/57dc30d4baafa58ac03c967e1ffe882b.verbatim
+interblockSeparator
+interblockSeparator
+interblockSeparator
+headingThree: Backslash Escapes
+interblockSeparator
+codeSpan: <em>
+interblockSeparator
+inputVerbatim: ./_markdown_test/ee5b9bd27735fe320e0eb1cd9218539d.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/4f5715933ffa8d2f20d0360598a68dbb.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/nested-blockquotes.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/nested-blockquotes.test
new file mode 100644
index 0000000000..bbc0f7e4c5
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/nested-blockquotes.test
@@ -0,0 +1,14 @@
+<<<
+> foo
+>
+> > bar
+>
+> foo
+
+>>>
+blockQuoteBegin
+interblockSeparator
+blockQuoteBegin
+blockQuoteEnd
+interblockSeparator
+blockQuoteEnd
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/ordered-and-unordered-lists.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/ordered-and-unordered-lists.test
new file mode 100644
index 0000000000..6a88122d16
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/ordered-and-unordered-lists.test
@@ -0,0 +1,323 @@
+<<<
+## Unordered
+
+Asterisks tight:
+
+* asterisk 1
+* asterisk 2
+* asterisk 3
+
+
+Asterisks loose:
+
+* asterisk 1
+
+* asterisk 2
+
+* asterisk 3
+
+* * *
+
+Pluses tight:
+
++ Plus 1
++ Plus 2
++ Plus 3
+
+
+Pluses loose:
+
++ Plus 1
+
++ Plus 2
+
++ Plus 3
+
+* * *
+
+
+Minuses tight:
+
+- Minus 1
+- Minus 2
+- Minus 3
+
+
+Minuses loose:
+
+- Minus 1
+
+- Minus 2
+
+- Minus 3
+
+
+## Ordered
+
+Tight:
+
+1. First
+2. Second
+3. Third
+
+and:
+
+1. One
+2. Two
+3. Three
+
+
+Loose using tabs:
+
+1. First
+
+2. Second
+
+3. Third
+
+and using spaces:
+
+1. One
+
+2. Two
+
+3. Three
+
+Multiple paragraphs:
+
+1. Item 1, graf one.
+
+ Item 2. graf two. The quick brown fox jumped over the lazy dog&#39;s
+ back.
+
+2. Item 2.
+
+3. Item 3.
+
+
+
+## Nested
+
+* Tab
+ * Tab
+ * Tab
+
+Here&#39;s another:
+
+1. First
+2. Second:
+ * Fee
+ * Fie
+ * Foe
+3. Third
+
+Same thing but with paragraphs:
+
+1. First
+
+2. Second:
+ * Fee
+ * Fie
+ * Foe
+
+3. Third
+
+
+This was an error in Markdown 1.0.1:
+
+* this
+
+ * sub
+
+ that
+
+>>>
+headingTwo: Unordered
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+ulBegin
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEnd
+interblockSeparator
+horizontalRule
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+ulBegin
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEnd
+interblockSeparator
+horizontalRule
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+ulBegin
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEnd
+interblockSeparator
+headingTwo: Ordered
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEnd
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEnd
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 1
+interblockSeparator
+ampersand
+hash
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEnd
+interblockSeparator
+headingTwo: Nested
+interblockSeparator
+ulBeginTight
+ulItem
+interblockSeparator
+ulBeginTight
+ulItem
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulEndTight
+interblockSeparator
+ampersand
+hash
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEnd
+interblockSeparator
+interblockSeparator
+ulBegin
+ulItem
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+ulItemEnd
+ulEnd
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/strong-and-em-together.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/strong-and-em-together.test
new file mode 100644
index 0000000000..44c84cd6d1
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/strong-and-em-together.test
@@ -0,0 +1,17 @@
+<<<
+***This is strong and em.***
+
+So is ***this*** word.
+
+___This is strong and em.___
+
+So is ___this___ word.
+
+>>>
+strongEmphasis: (emphasis: This is strong and em.)
+interblockSeparator
+strongEmphasis: (emphasis: this)
+interblockSeparator
+strongEmphasis: (emphasis: This is strong and em.)
+interblockSeparator
+strongEmphasis: (emphasis: this)
diff --git a/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/tabs.test b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/tabs.test
new file mode 100644
index 0000000000..4737ab75e8
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/Markdown_1.0.3/tabs.test
@@ -0,0 +1,39 @@
+<<<
++ this is a list item
+ indented with tabs
+
++ this is a list item
+ indented with spaces
+
+Code:
+
+ this code block is indented by one tab
+
+And:
+
+ this code block is indented by two tabs
+
+And:
+
+ + this is an example list item
+ indented with tabs
+
+ + this is an example list item
+ indented with spaces
+
+>>>
+ulBegin
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEnd
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/07112549a31e78f7efb64c16f22570db.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/385fbae90889669b105262d12987e9da.verbatim
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/ce062b920c62d9e77aae68da221de295.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/README.md b/macros/generic/markdown/tests/testfiles/PHP_Markdown/README.md
new file mode 100644
index 0000000000..8ceeb21dec
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/README.md
@@ -0,0 +1,2 @@
+This directory contains test files that were inherited from the
+`tests/PHP_Markdown` directory in the lunamark project.
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/auto-links.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/auto-links.test
new file mode 100644
index 0000000000..ba3ee16d9a
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/auto-links.test
@@ -0,0 +1,16 @@
+<<<
+<HTTP://WWW.SOMEURL.COM>
+
+<hr@company.com>
+>>>
+BEGIN link
+- label: HTTP://WWW.SOMEURL.COM
+- URI: HTTP://WWW.SOMEURL.COM
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: hr@company.com
+- URI: mailto:hr@company.com
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/backslash-escapes.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/backslash-escapes.test
new file mode 100644
index 0000000000..a66cdefb8e
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/backslash-escapes.test
@@ -0,0 +1,19 @@
+<<<
+Tricky combinaisons:
+
+backslash with \\-- two dashes
+
+backslash with \\> greater than
+
+\\[test](not a link)
+
+\\\*no emphasis*
+>>>
+interblockSeparator
+backslash
+interblockSeparator
+backslash
+interblockSeparator
+backslash
+interblockSeparator
+backslash
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-in-a-list-item.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-in-a-list-item.test
new file mode 100644
index 0000000000..8ac52d287a
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-in-a-list-item.test
@@ -0,0 +1,31 @@
+<<<
+
+* List Item:
+
+ code block
+
+ with a blank line
+
+ within a list item.
+
+* code block
+ as first element of a list item
+
+* List Item:
+
+ code block with whitespace on preceding line
+>>>
+ulBegin
+ulItem
+interblockSeparator
+inputVerbatim: ./_markdown_test/3918bc9009f196cbcc980181827419e9.verbatim
+interblockSeparator
+ulItemEnd
+ulItem
+inputVerbatim: ./_markdown_test/2ecbe437956c71ad33b2efd354f11893.verbatim
+ulItemEnd
+ulItem
+interblockSeparator
+inputVerbatim: ./_markdown_test/89ad99c3052a342e765443409ef64797.verbatim
+ulItemEnd
+ulEnd
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-on-second-line.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-on-second-line.test
new file mode 100644
index 0000000000..7b402e3fa0
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/code-block-on-second-line.test
@@ -0,0 +1,6 @@
+<<<
+
+ Codeblock on second line
+
+>>>
+inputVerbatim: ./_markdown_test/722b6c7a40293698cf78b28fdb8623ff.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/email-auto-links.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/email-auto-links.test
new file mode 100644
index 0000000000..afda759ec7
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/email-auto-links.test
@@ -0,0 +1,16 @@
+<<<
+<michel.fortin@michelf.com>
+
+International domain names: <help@tūdaliņ.lv>
+>>>
+BEGIN link
+- label: michel.fortin@michelf.com
+- URI: mailto:michel.fortin@michelf.com
+- title:
+END link
+interblockSeparator
+BEGIN link
+- label: help@tūdaliņ.lv
+- URI: mailto:help@tūdaliņ.lv
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/emphasis.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/emphasis.test
new file mode 100644
index 0000000000..ed36492e09
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/emphasis.test
@@ -0,0 +1,272 @@
+<<<
+Combined emphasis:
+
+1. ***test test***
+2. ___test test___
+3. *test **test***
+4. **test *test***
+5. ***test* test**
+6. ***test** test*
+7. ***test* test**
+8. **test *test***
+9. *test **test***
+10. _test __test___
+11. __test _test___
+12. ___test_ test__
+13. ___test__ test_
+14. ___test_ test__
+15. __test _test___
+16. _test __test___
+
+
+Incorrect nesting:
+
+1. *test **test* test**
+2. _test __test_ test__
+3. **test *test** test*
+4. __test _test__ test_
+5. *test *test* test*
+6. _test _test_ test_
+7. **test **test** test**
+8. __test __test__ test__
+
+
+
+No emphasis:
+
+1. test* test *test
+2. test** test **test
+3. test_ test _test
+4. test__ test __test
+
+
+
+Middle-word emphasis (asterisks):
+
+1. *a*b
+2. a*b*
+3. a*b*c
+4. **a**b
+5. a**b**
+6. a**b**c
+
+
+Middle-word emphasis (underscore):
+
+1. _a_b
+2. a_b_
+3. a_b_c
+4. __a__b
+5. a__b__
+6. a__b__c
+
+my_precious_file.txt
+
+
+## Tricky Cases
+
+E**. **Test** TestTestTest
+
+E**. **Test** Test Test Test
+
+
+## Overlong emphasis
+
+Name: ____________
+Organization: ____
+Region/Country: __
+
+_____Cut here_____
+
+____Cut here____
+
+>>>
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+strongEmphasis: (emphasis: test test)
+olItemEnd
+olItemWithNumber: 2
+strongEmphasis: (emphasis: test test)
+olItemEnd
+olItemWithNumber: 3
+emphasis: test (strongEmphasis: test)
+olItemEnd
+olItemWithNumber: 4
+strongEmphasis: test (emphasis: test)
+olItemEnd
+olItemWithNumber: 5
+strongEmphasis: (emphasis: test) test
+olItemEnd
+olItemWithNumber: 6
+emphasis: (strongEmphasis: test) test
+olItemEnd
+olItemWithNumber: 7
+strongEmphasis: (emphasis: test) test
+olItemEnd
+olItemWithNumber: 8
+strongEmphasis: test (emphasis: test)
+olItemEnd
+olItemWithNumber: 9
+emphasis: test (strongEmphasis: test)
+olItemEnd
+olItemWithNumber: 10
+emphasis: test (strongEmphasis: test)
+olItemEnd
+olItemWithNumber: 11
+strongEmphasis: test (emphasis: test)
+olItemEnd
+olItemWithNumber: 12
+strongEmphasis: (emphasis: test) test
+olItemEnd
+olItemWithNumber: 13
+emphasis: (strongEmphasis: test) test
+olItemEnd
+olItemWithNumber: 14
+strongEmphasis: (emphasis: test) test
+olItemEnd
+olItemWithNumber: 15
+strongEmphasis: test (emphasis: test)
+olItemEnd
+olItemWithNumber: 16
+emphasis: test (strongEmphasis: test)
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+strongEmphasis: test* test
+olItemEnd
+olItemWithNumber: 2
+underscore
+strongEmphasis: test(underscore) test
+olItemEnd
+olItemWithNumber: 3
+emphasis: (emphasis: test (emphasis: test)) test
+olItemEnd
+olItemWithNumber: 4
+emphasis: (emphasis: test (emphasis: test)) test
+olItemEnd
+olItemWithNumber: 5
+emphasis: test (emphasis: test) test
+olItemEnd
+olItemWithNumber: 6
+emphasis: test (emphasis: test) test
+olItemEnd
+olItemWithNumber: 7
+strongEmphasis: test (strongEmphasis: test) test
+olItemEnd
+olItemWithNumber: 8
+strongEmphasis: test (strongEmphasis: test) test
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+emphasis: * test *
+olItemEnd
+olItemWithNumber: 3
+underscore
+underscore
+olItemEnd
+olItemWithNumber: 4
+emphasis: (underscore) test (underscore)
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+emphasis: a
+olItemEnd
+olItemWithNumber: 2
+emphasis: b
+olItemEnd
+olItemWithNumber: 3
+emphasis: b
+olItemEnd
+olItemWithNumber: 4
+strongEmphasis: a
+olItemEnd
+olItemWithNumber: 5
+strongEmphasis: b
+olItemEnd
+olItemWithNumber: 6
+strongEmphasis: b
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+emphasis: a
+olItemEnd
+olItemWithNumber: 2
+emphasis: b
+olItemEnd
+olItemWithNumber: 3
+emphasis: b
+olItemEnd
+olItemWithNumber: 4
+strongEmphasis: a
+olItemEnd
+olItemWithNumber: 5
+strongEmphasis: b
+olItemEnd
+olItemWithNumber: 6
+strongEmphasis: b
+olItemEnd
+olEndTight
+interblockSeparator
+emphasis: precious
+interblockSeparator
+headingTwo: Tricky Cases
+interblockSeparator
+strongEmphasis: Test
+interblockSeparator
+strongEmphasis: Test
+interblockSeparator
+headingTwo: Overlong emphasis
+interblockSeparator
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+interblockSeparator
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+interblockSeparator
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
+underscore
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/empty-list-item.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/empty-list-item.test
new file mode 100644
index 0000000000..a9fb47b84b
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/empty-list-item.test
@@ -0,0 +1,97 @@
+<<<
+With asterisks
+
+ * List item
+ *
+ * List item
+
+With numbers
+
+1. List item
+2.
+3. List item
+
+With hyphens
+
+- List item
+-
+- List item
+
+With asterisks
+
+ * List item
+ * List item
+ *
+
+With numbers
+
+1. List item
+2. List item
+3.
+
+With hyphens
+
+- List item
+- List item
+-
+
+>>>
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/headers.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/headers.test
new file mode 100644
index 0000000000..f068181502
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/headers.test
@@ -0,0 +1,18 @@
+<<<
+### Header
+
+ - - -
+
+Paragraphr
+
+ - - -
+
+Paragraph
+>>>
+headingThree: Header
+interblockSeparator
+horizontalRule
+interblockSeparator
+interblockSeparator
+horizontalRule
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/horizontal-rules.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/horizontal-rules.test
new file mode 100644
index 0000000000..634ad3db9c
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/horizontal-rules.test
@@ -0,0 +1,51 @@
+<<<
+Horizontal rules:
+
+- - -
+
+* * *
+
+***
+
+---
+
+___
+
+Not horizontal rules (testing for a bug in 1.0.1j):
+
++++
+
+,,,
+
+===
+
+???
+
+AAA
+
+jjj
+
+j j j
+
+n n n
+
+>>>
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+horizontalRule
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/links-inline-style.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/links-inline-style.test
new file mode 100644
index 0000000000..bb67b838d1
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/links-inline-style.test
@@ -0,0 +1,9 @@
+<<<
+[silly URL w/ angle brackets](<?}]*+|&)>).
+
+>>>
+BEGIN link
+- label: silly URL w/ angle brackets
+- URI: ?(rightBrace)]*+(pipe)(ampersand))
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/md5-hashes.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/md5-hashes.test
new file mode 100644
index 0000000000..b70a29c981
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/md5-hashes.test
@@ -0,0 +1,22 @@
+<<<
+# Character Escapes
+
+The MD5 value for `+` is "26b17225b626fb9238849fd60eabdf60".
+
+# HTML Blocks
+
+<p>test</p>
+
+The MD5 value for `<p>test</p>` is:
+
+6205333b793f34273d75379350b36826
+>>>
+headingOne: Character Escapes
+interblockSeparator
+codeSpan: +
+interblockSeparator
+headingOne: HTML Blocks
+interblockSeparator
+interblockSeparator
+codeSpan: <p>test</p>
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/mixed-ols-and-uls.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/mixed-ols-and-uls.test
new file mode 100644
index 0000000000..fddda61878
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/mixed-ols-and-uls.test
@@ -0,0 +1,47 @@
+<<<
+* test
++ test
+- test
+
+1. test
+2. test
+
+* test
++ test
+- test
+
+1. test
+2. test
+
+>>>
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olEndTight
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olEndTight
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/nesting.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/nesting.test
new file mode 100644
index 0000000000..f95ada9662
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/nesting.test
@@ -0,0 +1,30 @@
+<<<
+Valid nesting:
+
+**[Link](url)**
+
+[**Link**](url)
+
+**[**Link**](url)**
+
+Invalid nesting:
+
+[[Link](url)](url)
+>>>
+interblockSeparator
+strongEmphasis: (BEGIN link)(- label: Link)(- URI: url)(- title: )(END link)
+interblockSeparator
+BEGIN link
+- label: (strongEmphasis: Link)
+- URI: url
+- title:
+END link
+interblockSeparator
+strongEmphasis: (BEGIN link)(- label: (strongEmphasis: Link))(- URI: url)(- title: )(END link)
+interblockSeparator
+interblockSeparator
+BEGIN link
+- label: [Link](url)
+- URI: url
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/parens-in-url.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/parens-in-url.test
new file mode 100644
index 0000000000..7c7831220a
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/parens-in-url.test
@@ -0,0 +1,52 @@
+<<<
+[Inline link 1 with parens](/url\(test\) "title").
+
+[Inline link 2 with parens](</url\(test\)> "title").
+
+[Inline link 3 with non-escaped parens](/url(test) "title").
+
+[Inline link 4 with non-escaped parens](</url(test)> "title").
+
+[Reference link 1 with parens][1].
+
+[Reference link 2 with parens][2].
+
+ [1]: /url(test) "title"
+ [2]: </url(test)> "title"
+
+>>>
+BEGIN link
+- label: Inline link 1 with parens
+- URI: /url(test)
+- title: title
+END link
+interblockSeparator
+BEGIN link
+- label: Inline link 2 with parens
+- URI: /url(test)
+- title: title
+END link
+interblockSeparator
+BEGIN link
+- label: Inline link 3 with non-escaped parens
+- URI: /url(test)
+- title: title
+END link
+interblockSeparator
+BEGIN link
+- label: Inline link 4 with non-escaped parens
+- URI: /url(test)
+- title: title
+END link
+interblockSeparator
+BEGIN link
+- label: Reference link 1 with parens
+- URI: /url(test)
+- title: title
+END link
+interblockSeparator
+BEGIN link
+- label: Reference link 2 with parens
+- URI: /url(test)
+- title: title
+END link
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/php-specific-bugs.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/php-specific-bugs.test
new file mode 100644
index 0000000000..3f3db6c6ee
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/php-specific-bugs.test
@@ -0,0 +1,39 @@
+<<<
+This tests for a bug where quotes escaped by PHP when using
+`preg_replace` with the `/e` modifier must be correctly unescaped
+(hence the `_UnslashQuotes` function found only in PHP Markdown).
+
+
+
+Headers below should appear exactly as they are typed (no backslash
+added or removed).
+
+Header "quoted\" again \\""
+===========================
+
+Header "quoted\" again \\""
+---------------------------
+
+### Header "quoted\" again \\"" ###
+
+
+
+Test with tabs for `_Detab`:
+
+ Code 'block' with some "tabs" and "quotes"
+
+>>>
+codeSpan: preg(underscore)replace
+codeSpan: /e
+codeSpan: (underscore)UnslashQuotes
+interblockSeparator
+interblockSeparator
+headingOne: Header "quoted(backslash)" again (backslash)""
+interblockSeparator
+headingTwo: Header "quoted(backslash)" again (backslash)""
+interblockSeparator
+headingThree: Header "quoted(backslash)" again (backslash)""
+interblockSeparator
+codeSpan: (underscore)Detab
+interblockSeparator
+inputVerbatim: ./_markdown_test/58f5a43337a97a77594d067c159d772c.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/quotes-in-attributes.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/quotes-in-attributes.test
new file mode 100644
index 0000000000..75247fc7fd
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/quotes-in-attributes.test
@@ -0,0 +1,29 @@
+<<<
+[Test](/"style="color:red)
+[Test](/'style='color:red)
+
+![](/"style="border-color:red;border-size:1px;border-style:solid)
+![](/'style='border-color:red;border-size:1px;border-style:solid)
+
+>>>
+BEGIN link
+- label: Test
+- URI: /"style="color:red
+- title:
+END link
+BEGIN link
+- label: Test
+- URI: /'style='color:red
+- title:
+END link
+interblockSeparator
+BEGIN image
+- label:
+- URI: /"style="border-color:red;border-size:1px;border-style:solid
+- title:
+END image
+BEGIN image
+- label:
+- URI: /'style='border-color:red;border-size:1px;border-style:solid
+- title:
+END image
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/tables.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/tables.test
new file mode 100644
index 0000000000..9300123d19
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/tables.test
@@ -0,0 +1,327 @@
+\def\markdownOptionPipeTables{true}
+<<<
+Header 1 | Header 2
+--------- | ---------
+Cell 1 | Cell 2
+Cell 3 | Cell 4
+
+With leading pipes:
+
+| Header 1 | Header 2
+| --------- | ---------
+| Cell 1 | Cell 2
+| Cell 3 | Cell 4
+
+With tailing pipes:
+
+Header 1 | Header 2 |
+--------- | --------- |
+Cell 1 | Cell 2 |
+Cell 3 | Cell 4 |
+
+With leading and tailing pipes:
+
+| Header 1 | Header 2 |
+| --------- | --------- |
+| Cell 1 | Cell 2 |
+| Cell 3 | Cell 4 |
+
+* * *
+
+# One-column one-row table
+
+With leading pipes:
+
+| Header
+| -------
+| Cell
+
+With tailing pipes:
+
+Header |
+------- |
+Cell |
+
+With leading and tailing pipes:
+
+| Header |
+| ------- |
+| Cell |
+
+* * *
+
+Table alignement:
+
+| Default | Right | Center | Left |
+| --------- |:--------- |:---------:| ---------:|
+| Long Cell | Long Cell | Long Cell | Long Cell |
+| Cell | Cell | Cell | Cell |
+
+Table alignement (alternate spacing):
+
+| Default | Right | Center | Left |
+| --------- | :-------- | :-------: | --------: |
+| Long Cell | Long Cell | Long Cell | Long Cell |
+| Cell | Cell | Cell | Cell |
+
+* * *
+
+# Empty cells
+
+| Header 1 | Header 2 |
+| --------- | --------- |
+| A | B |
+| C | |
+
+Header 1 | Header 2
+--------- | ---------
+A | B
+ | D
+
+* * *
+
+# Missing tailing pipe
+
+Header 1 | Header 2
+--------- | --------- |
+Cell | Cell |
+Cell | Cell |
+
+Header 1 | Header 2 |
+--------- | ---------
+Cell | Cell |
+Cell | Cell |
+
+Header 1 | Header 2 |
+--------- | --------- |
+Cell | Cell
+Cell | Cell |
+
+Header 1 | Header 2 |
+--------- | --------- |
+Cell | Cell |
+Cell | Cell
+
+* * *
+
+# Too many pipes in rows
+
+| Header 1 | Header 2 |
+| ---------
+| Cell | Cell | Extra cell? |
+| Cell | Cell | Extra cell? |
+>>>
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell 1
+- row 2, column 2: Cell 2
+- row 3, column 1: Cell 3
+- row 3, column 2: Cell 4
+END table
+interblockSeparator
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell 1
+- row 2, column 2: Cell 2
+- row 3, column 1: Cell 3
+- row 3, column 2: Cell 4
+END table
+interblockSeparator
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell 1
+- row 2, column 2: Cell 2
+- row 3, column 1: Cell 3
+- row 3, column 2: Cell 4
+END table
+interblockSeparator
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell 1
+- row 2, column 2: Cell 2
+- row 3, column 1: Cell 3
+- row 3, column 2: Cell 4
+END table
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingOne: One-column one-row table
+interblockSeparator
+interblockSeparator
+BEGIN table (2 rows, 1 columns)
+- caption:
+- alignment of column 1: d
+- row 1, column 1: Header
+- row 2, column 1: Cell
+END table
+interblockSeparator
+interblockSeparator
+BEGIN table (2 rows, 1 columns)
+- caption:
+- alignment of column 1: d
+- row 1, column 1: Header
+- row 2, column 1: Cell
+END table
+interblockSeparator
+interblockSeparator
+BEGIN table (2 rows, 1 columns)
+- caption:
+- alignment of column 1: d
+- row 1, column 1: Header
+- row 2, column 1: Cell
+END table
+interblockSeparator
+horizontalRule
+interblockSeparator
+interblockSeparator
+BEGIN table (3 rows, 4 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: l
+- alignment of column 3: c
+- alignment of column 4: r
+- row 1, column 1: Default
+- row 1, column 2: Right
+- row 1, column 3: Center
+- row 1, column 4: Left
+- row 2, column 1: Long Cell
+- row 2, column 2: Long Cell
+- row 2, column 3: Long Cell
+- row 2, column 4: Long Cell
+- row 3, column 1: Cell
+- row 3, column 2: Cell
+- row 3, column 3: Cell
+- row 3, column 4: Cell
+END table
+interblockSeparator
+interblockSeparator
+BEGIN table (3 rows, 4 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: l
+- alignment of column 3: c
+- alignment of column 4: r
+- row 1, column 1: Default
+- row 1, column 2: Right
+- row 1, column 3: Center
+- row 1, column 4: Left
+- row 2, column 1: Long Cell
+- row 2, column 2: Long Cell
+- row 2, column 3: Long Cell
+- row 2, column 4: Long Cell
+- row 3, column 1: Cell
+- row 3, column 2: Cell
+- row 3, column 3: Cell
+- row 3, column 4: Cell
+END table
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingOne: Empty cells
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: A
+- row 2, column 2: B
+- row 3, column 1: C
+- row 3, column 2:
+END table
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: A
+- row 2, column 2: B
+- row 3, column 1:
+- row 3, column 2: D
+END table
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingOne: Missing tailing pipe
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell
+- row 2, column 2: Cell
+- row 3, column 1: Cell
+- row 3, column 2: Cell
+END table
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell
+- row 2, column 2: Cell
+- row 3, column 1: Cell
+- row 3, column 2: Cell
+END table
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell
+- row 2, column 2: Cell
+- row 3, column 1: Cell
+- row 3, column 2: Cell
+END table
+interblockSeparator
+BEGIN table (3 rows, 2 columns)
+- caption:
+- alignment of column 1: d
+- alignment of column 2: d
+- row 1, column 1: Header 1
+- row 1, column 2: Header 2
+- row 2, column 1: Cell
+- row 2, column 2: Cell
+- row 3, column 1: Cell
+- row 3, column 2: Cell
+END table
+interblockSeparator
+horizontalRule
+interblockSeparator
+headingOne: Too many pipes in rows
+interblockSeparator
+BEGIN table (3 rows, 1 columns)
+- caption:
+- alignment of column 1: d
+- row 1, column 1: Header 1
+- row 2, column 1: Cell
+- row 3, column 1: Cell
+END table
diff --git a/macros/generic/markdown/tests/testfiles/PHP_Markdown/tight-blocks.test b/macros/generic/markdown/tests/testfiles/PHP_Markdown/tight-blocks.test
new file mode 100644
index 0000000000..b8f0650113
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/PHP_Markdown/tight-blocks.test
@@ -0,0 +1,30 @@
+<<<
+Paragraph and no space:
+* ciao
+
+Paragraph and 1 space:
+ * ciao
+
+Paragraph and 3 spaces:
+ * ciao
+
+Paragraph and 4 spaces:
+ * ciao
+
+Paragraph before header:
+#Header
+
+Paragraph before blockquote:
+>Some quote.
+
+>>>
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+headingOne: Header
+interblockSeparator
+interblockSeparator
+blockQuoteBegin
+blockQuoteEnd
diff --git a/macros/generic/markdown/tests/testfiles/README.md b/macros/generic/markdown/tests/testfiles/README.md
new file mode 100644
index 0000000000..0f0168e787
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/README.md
@@ -0,0 +1,21 @@
+This directory contains subdirectories with test files, which can be recognized
+by the `.test` suffix. A test file has the following syntax:
+
+ The test setup TeX source code
+ <<<
+ The test markdown source code
+ >>>
+ The expected test output
+
+The test setup TeX source code can be used to configure the Markdown package
+through its plain TeX interface before the test markdown source code is
+processed.
+
+The test markdown source code is the markdown code that will be processed
+during the test. The majority of markdown tokens are configured by the support
+files to produce output to the log file. This output will be compared against
+the expected test output.
+
+The `<<<` and `>>>` markers may be surrounded by optional whitespaces. If the
+last section beginning with `>>>` is not present, it will be automatically
+generated during the testing and appended to the test file.
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/README.md b/macros/generic/markdown/tests/testfiles/lunamark-markdown/README.md
new file mode 100644
index 0000000000..238044662b
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/README.md
@@ -0,0 +1,2 @@
+This directory contains test files that were tailored specifically to the
+Markdown package.
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/blank-before-code-fence.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/blank-before-code-fence.test
new file mode 100644
index 0000000000..8d42218e09
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/blank-before-code-fence.test
@@ -0,0 +1,57 @@
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionBlankBeforeCodeFence{true}
+<<<
+This test ensures that the Lua `fencedCode` and `blankBeforeCodeFence` options
+correctly propagate through the plain TeX interface.
+
+The following fenced code block should resolve to a code span.
+
+foo
+``` foo
+bar
+```
+
+foo
+~~~ foo
+bar
+~~~
+
+The following fenced code blocks should be recognized as such.
+
+foo
+
+``` foo
+bar
+```
+
+foo
+
+~~~ foo
+bar
+~~~
+>>>
+codeSpan: fencedCode
+codeSpan: blankBeforeCodeFence
+interblockSeparator
+interblockSeparator
+codeSpan: foo bar
+interblockSeparator
+tilde
+tilde
+tilde
+tilde
+tilde
+tilde
+interblockSeparator
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/breakable-blockquotes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/breakable-blockquotes.test
new file mode 100644
index 0000000000..69dffa4e21
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/breakable-blockquotes.test
@@ -0,0 +1,19 @@
+\def\markdownOptionBreakableBlockquotes{true}
+<<<
+This test ensures that the Lua `breakableBlockquotes` option correctly
+propagates through the plain TeX interface.
+
+> *quote 1*
+
+> *quote 2*
+
+>>>
+codeSpan: breakableBlockquotes
+interblockSeparator
+blockQuoteBegin
+emphasis: quote 1
+blockQuoteEnd
+interblockSeparator
+blockQuoteBegin
+emphasis: quote 2
+blockQuoteEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/cache-dir.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/cache-dir.test
new file mode 100644
index 0000000000..f9968e9168
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/cache-dir.test
@@ -0,0 +1,12 @@
+\def\markdownOptionCacheDir{some-other-directory}
+<<<
+This test ensures that the Lua `cacheDir` option correctly propagates through
+the plain TeX interface and causes a change in the cache directory location.
+The following code should be stored in a temporary file inside the specified
+cache directory.
+
+ foo bar
+>>>
+codeSpan: cacheDir
+interblockSeparator
+inputVerbatim: some-other-directory/5ceaa7ed396ccb8e959c02753cb4bd18.verbatim
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-escapes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-escapes.test
new file mode 100644
index 0000000000..646c0b9610
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-escapes.test
@@ -0,0 +1,73 @@
+\def\markdownOptionCitations{true}
+<<<
+This test ensures that the Lua `citations` option correctly propagates through
+the plain TeX interface and that the `citationNbsps` option is enabled by
+default.
+
+Here is a simple parenthetical citation \[\@doe99] and here
+is a string of several [see @doe99, pp\; 33-35; also
+@smit:.#$%&-+?<>_/h04, chap. 1].
+
+A parenthetical citation can have a [prenote @doe99] and a
+[@smith04 postnote]. The name of the author can be
+suppressed by inserting a dash before the name of an author
+as follows [\-@smith04].
+
+Here is a simple text citation \@doe99 and here is a string
+of several @doe99 [pp\; 33-35; also @smit:.#$%&-+?<>_/h04,
+chap. 1]. Here is one with the name of the author
+suppressed \-@doe99.
+>>>
+codeSpan: citations
+codeSpan: citationNbsps
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote: see
+- postnote: pp;(nbsp)33-35
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote: also
+- postnote: chap.(nbsp)1
+- name: smit:.(hash)$(percentSign)&-+?<>_/h04
+END cite
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote: prenote
+- postnote:
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote: postnote
+- name: smith04
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote: -
+- postnote:
+- name: smith04
+END cite
+interblockSeparator
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote: pp;(nbsp)33-35
+- name: doe99
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote: also
+- postnote: chap.(nbsp)1
+- name: smit:.(hash)$(percentSign)&-+?<>_/h04
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: doe99
+END textCite
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-nbsps.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-nbsps.test
new file mode 100644
index 0000000000..e607828711
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-nbsps.test
@@ -0,0 +1,85 @@
+\def\markdownOptionCitations{true}
+<<<
+This test ensures that the Lua `citations` option correctly propagates through
+the plain TeX interface and that the `citationNbsps` option is enabled by
+default.
+
+Here is a simple parenthetical citation [@doe99] and here
+is a string of several [see @doe99, pp. 33-35; also
+@smit:.#$%&-+?<>_/h04, chap. 1].
+
+A parenthetical citation can have a [prenote @doe99] and
+a [@smith04 postnote]. The name of the author can be
+suppressed by inserting a dash before the name of an
+author as follows [-@smith04].
+
+Here is a simple text citation @doe99 and here is a
+string of several @doe99 [pp. 33-35; also
+@smit:.#$%&-+?<>_/h04, chap. 1]. Here is one with the
+name of the author suppressed -@doe99.
+>>>
+codeSpan: citations
+codeSpan: citationNbsps
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote: see
+- postnote: pp.(nbsp)33-35
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote: also
+- postnote: chap.(nbsp)1
+- name: smit:.(hash)$(percentSign)&-+?<>_/h04
+END cite
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote: prenote
+- postnote:
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote: postnote
+- name: smith04
+END cite
+BEGIN cite
+- suppressAuthor: true
+- prenote:
+- postnote:
+- name: smith04
+END cite
+interblockSeparator
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: doe99
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote: pp.(nbsp)33-35
+- name: doe99
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote: also
+- postnote: chap.(nbsp)1
+- name: smit:.(hash)$(percentSign)&-+?<>_/h04
+END textCite
+BEGIN textCite
+- suppressAuthor: true
+- prenote:
+- postnote:
+- name: doe99
+END textCite
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-no-nbsps.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-no-nbsps.test
new file mode 100644
index 0000000000..bc5b70c0d0
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-no-nbsps.test
@@ -0,0 +1,85 @@
+\def\markdownOptionCitations{true}
+\def\markdownOptionCitationNbsps{false}
+<<<
+This test ensures that the Lua `citations` and `citationNbsps` options correctly
+propagate through the plain TeX interface.
+
+Here is a simple parenthetical citation [@doe99] and here
+is a string of several [see @doe99, pp. 33-35; also
+@smit:.#$%&-+?<>_/h04, chap. 1].
+
+A parenthetical citation can have a [prenote @doe99] and
+a [@smith04 postnote]. The name of the author can be
+suppressed by inserting a dash before the name of an
+author as follows [-@smith04].
+
+Here is a simple text citation @doe99 and here is a
+string of several @doe99 [pp. 33-35; also
+@smit:.#$%&-+?<>_/h04, chap. 1]. Here is one with the
+name of the author suppressed -@doe99.
+>>>
+codeSpan: citations
+codeSpan: citationNbsps
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote: see
+- postnote: pp. 33-35
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote: also
+- postnote: chap. 1
+- name: smit:.(hash)$(percentSign)&-+?<>_/h04
+END cite
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote: prenote
+- postnote:
+- name: doe99
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote: postnote
+- name: smith04
+END cite
+BEGIN cite
+- suppressAuthor: true
+- prenote:
+- postnote:
+- name: smith04
+END cite
+interblockSeparator
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: doe99
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote: pp. 33-35
+- name: doe99
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote: also
+- postnote: chap. 1
+- name: smit:.(hash)$(percentSign)&-+?<>_/h04
+END textCite
+BEGIN textCite
+- suppressAuthor: true
+- prenote:
+- postnote:
+- name: doe99
+END textCite
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-trailing-punctuation.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-trailing-punctuation.test
new file mode 100644
index 0000000000..3063b324e9
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/citations-trailing-punctuation.test
@@ -0,0 +1,115 @@
+\def\markdownOptionCitations{true}
+<<<
+This test ensures that the Lua `citations` option correctly propagates through
+the plain TeX interface and that the trailing punctuation does not get included
+in the citation name.
+
+[@f] [@f:] [@foo:bar] [@foo:bar:]
+
+[@_] [@f_] [@foo_bar] [@foo_bar_]
+
+ @f @f: @foo:bar @foo:bar:
+
+ @_ @f_ @foo_bar @foo_bar_
+>>>
+codeSpan: citations
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: f
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: f
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo:bar
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo:bar
+END cite
+interblockSeparator
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: _
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: f_
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo_bar
+END cite
+BEGIN cite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo_bar_
+END cite
+interblockSeparator
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: f
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: f
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo:bar
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo:bar
+END textCite
+interblockSeparator
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: _
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: f_
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo_bar
+END textCite
+BEGIN textCite
+- suppressAuthor: false
+- prenote:
+- postnote:
+- name: foo_bar_
+END textCite
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks-language-map.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks-language-map.test
new file mode 100644
index 0000000000..545be6893d
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks-language-map.test
@@ -0,0 +1,16 @@
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionContentBlocksLanguageMap{markdown-languages-nonstandard.json}
+<<<
+This test ensures that the Lua `contentBlockLanguages` option correctly
+propagates through the plain TeX interface.
+
+/basename.WEIRDextension (title)
+>>>
+codeSpan: contentBlockLanguages
+interblockSeparator
+BEGIN contentBlockCode
+- suffix: weirdextension
+- language: weirdLANGUAGE
+- URI: basename.WEIRDextension
+- title: title
+END contentBlockCode
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks.test
new file mode 100644
index 0000000000..60b460fbf9
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/content-blocks.test
@@ -0,0 +1,64 @@
+\def\markdownOptionContentBlocks{true}
+<<<
+This test ensures that the Lua `contentBlocks` option correctly propagates
+through the plain TeX interface.
+/not/a/translusion.md
+
+/not/a/
+transclusion/either.md
+
+<http://example.com/minard.jpg>
+<http://example.com/minard.jpg> <-- This is just a link.
+
+htt(p:/)/exam(ple.c)om/m\(inard.jpg (Napoleon's disastrous Russian campaign of 1812)
+/Flowchart.png "Engineering Flowchart"
+
+/Savings Account.csv 'Recent Transactions'
+/Example.jS (Source code)
+/Lorem Ipsum.txt
+>>>
+codeSpan: contentBlocks
+interblockSeparator
+interblockSeparator
+BEGIN contentBlockOnlineImage
+- suffix: jpg
+- URI: http://example.com/minard.jpg
+- title:
+END contentBlockOnlineImage
+interblockSeparator
+BEGIN link
+- label: http://example.com/minard.jpg
+- URI: http://example.com/minard.jpg
+- title:
+END link
+interblockSeparator
+BEGIN contentBlockOnlineImage
+- suffix: jpg
+- URI: htt(p:/)/exam(ple.c)om/m(inard.jpg
+- title: Napoleon's disastrous Russian campaign of 1812
+END contentBlockOnlineImage
+interblockSeparator
+BEGIN contentBlock
+- suffix: png
+- URI: Flowchart.png
+- title: Engineering Flowchart
+END contentBlock
+interblockSeparator
+BEGIN contentBlock
+- suffix: csv
+- URI: Savings Account.csv
+- title: Recent Transactions
+END contentBlock
+interblockSeparator
+BEGIN contentBlockCode
+- suffix: js
+- language: JavaScript
+- URI: Example.jS
+- title: Source code
+END contentBlockCode
+interblockSeparator
+BEGIN contentBlock
+- suffix: txt
+- URI: Lorem Ipsum.txt
+- title:
+END contentBlock
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/empty-code-spans.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/empty-code-spans.test
new file mode 100644
index 0000000000..cd69efae60
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/empty-code-spans.test
@@ -0,0 +1,24 @@
+<<<
+These are just two backticks:
+
+``
+
+These are empty code spans:
+
+` `
+
+` `
+
+This is a code span containing a single space:
+
+` `
+>>>
+interblockSeparator
+interblockSeparator
+interblockSeparator
+codeSpan:
+interblockSeparator
+codeSpan:
+interblockSeparator
+interblockSeparator
+codeSpan:
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/fenced-code.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/fenced-code.test
new file mode 100644
index 0000000000..2efe132ad1
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/fenced-code.test
@@ -0,0 +1,27 @@
+\def\markdownOptionFencedCode{true}
+<<<
+This test ensures that the Lua `fencedCode` option correctly propagates through
+the plain TeX interface.
+
+The following fenced code blocks should be recognized as such.
+
+``` foo
+bar
+```
+
+~~~ foo
+bar
+~~~
+>>>
+codeSpan: fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/header-attributes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/header-attributes.test
new file mode 100644
index 0000000000..3da7ac7a7d
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/header-attributes.test
@@ -0,0 +1,37 @@
+\def\markdownOptionHeaderAttributes{true}
+<<<
+This test ensures that the Lua `headerAttributes` option correctly propagates
+through the plain TeX interface.
+
+# A level one heading {#first-id}
+
+A level one heading {#second_id2}
+=================================
+
+## A level two heading ### {#third-3id .a-class}
+
+A level two heading {#fourth4-id .2not-a-class}
+-----------------------------------------------
+
+### A level three heading ## {#5not-the-fifth-id}
+#### A level four heading {#-6not-the-sixth-id}
+##### A level five heading ## {#--7the-seventh-id}
+###### A level six heading {#-_the-eighth-id attribute=value}
+>>>
+codeSpan: headerAttributes
+interblockSeparator
+headingOne: A level one heading
+interblockSeparator
+headingOne: A level one heading
+interblockSeparator
+headingTwo: A level two heading
+interblockSeparator
+headingTwo: A level two heading (leftBrace)(hash)fourth4-id .2not-a-class(rightBrace)
+interblockSeparator
+headingThree: A level three heading (hash)(hash) (leftBrace)(hash)5not-the-fifth-id(rightBrace)
+interblockSeparator
+headingFour: A level four heading (leftBrace)(hash)-6not-the-sixth-id(rightBrace)
+interblockSeparator
+headingFive: A level five heading
+interblockSeparator
+headingSix: A level six heading
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/html.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/html.test
new file mode 100644
index 0000000000..1975c5b221
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/html.test
@@ -0,0 +1,53 @@
+\def\markdownOptionHtml{true}
+<<<
+This test ensures that the Lua `html` option correctly propagates through
+the plain TeX interface.
+
+<div>
+*There is block tag support.*
+</div>
+*There is <inline tag="tag"></inline> support.*
+_There is <!-- comment --> support._
+_There is <? HTML instruction ?> support._
+
+Here are several ways to write a pipe:
+
+- |
+- &verbar;
+- &vert;
+- &VerticalLine;
+- &#x0007C;
+- &#124;
+
+Unrecognized character entities are ignored: &nonsense;
+>>>
+codeSpan: html
+interblockSeparator
+interblockSeparator
+emphasis: There is support.
+emphasis: There is support.
+emphasis: There is support.
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+pipe
+ulItemEnd
+ulItem
+pipe
+ulItemEnd
+ulItem
+pipe
+ulItemEnd
+ulItem
+pipe
+ulItemEnd
+ulItem
+pipe
+ulItemEnd
+ulItem
+pipe
+ulItemEnd
+ulEndTight
+interblockSeparator
+ampersand
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/hybrid.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/hybrid.test
new file mode 100644
index 0000000000..a82ba1aa1b
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/hybrid.test
@@ -0,0 +1,43 @@
+\def\markdownOptionHybrid{true}
+<<<
+This test ensures that the Lua `hybrid` option correctly propagates through
+the plain TeX interface. The following special characters should not be
+processed by lunamark in any way.
+
+ * \char`{
+ * \char`}
+ * \char`$
+ * \char`\%
+ * \char`&
+ * \char`_
+ * \char`#
+ * \char`^
+ * \char`\
+ * \char`~
+ * \char`|
+>>>
+codeSpan: hybrid
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/inline-footnotes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/inline-footnotes.test
new file mode 100644
index 0000000000..28ecb568b3
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/inline-footnotes.test
@@ -0,0 +1,17 @@
+\def\markdownOptionInlineFootnotes{true}
+<<<
+This test ensures that the Lua `footnotes` and `inlineFootnotes` options
+correctly propagate through the plain TeX interface.
+
+^[Here is the footnote. It can go anywhere after the footnote
+reference. It need *not* be placed at the end of the document.]
+
+\^[This should *not* be a footnote, because it has been escaped.]
+>>>
+codeSpan: footnotes
+codeSpan: inlineFootnotes
+interblockSeparator
+footnote: Here is the footnote. It can go anywhere after the footnote reference. It need (emphasis: not) be placed at the end of the document.
+interblockSeparator
+circumflex
+emphasis: not
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-blank-before-code-fence.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-blank-before-code-fence.test
new file mode 100644
index 0000000000..fbe81311a3
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-blank-before-code-fence.test
@@ -0,0 +1,57 @@
+\def\markdownOptionFencedCode{true}
+<<<
+This test ensures that the Lua `fencedCode` option correctly propagates through
+the plain TeX interface and that the Lua `blankBeforeCodeFence` option is
+disabled by default.
+
+The following fenced code blocks should be recognized as such.
+
+foo
+``` foo
+bar
+```
+
+foo
+~~~ foo
+bar
+~~~
+
+foo
+
+``` foo
+bar
+```
+
+foo
+
+~~~ foo
+bar
+~~~
+>>>
+codeSpan: fencedCode
+codeSpan: blankBeforeCodeFence
+interblockSeparator
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/c157a79031e1c40f85931829bc5fc552.verbatim
+- infostring: foo
+END fencedCode
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-breakable-blockquotes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-breakable-blockquotes.test
new file mode 100644
index 0000000000..d65cbef728
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-breakable-blockquotes.test
@@ -0,0 +1,15 @@
+<<<
+This test ensures that the Lua `breakableBlockquotes` option is disabled by
+default.
+
+> *quote 1*
+
+> *quote 2*
+
+>>>
+codeSpan: breakableBlockquotes
+interblockSeparator
+blockQuoteBegin
+emphasis: quote 1
+emphasis: quote 2
+blockQuoteEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-citations.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-citations.test
new file mode 100644
index 0000000000..811c8aed35
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-citations.test
@@ -0,0 +1,31 @@
+<<<
+This test ensures that the Lua `citations` option is disabled by default.
+
+Here is a simple parenthetical citation [@doe99] and here
+is a string of several [see @doe99, pp. 33-35; also
+@smit:.#$%&-+?<>~/h04, chap. 1].
+
+A parenthetical citation can have a [prenote @doe99] and
+a [@smith04 postnote]. The name of the author can be
+suppressed by inserting a dash before the name of an
+author as follows [-@smith04].
+
+Here is a simple text citation @doe99 and here is a
+string of several @doe99 [pp. 33-35; also
+@smit:.#$%&-+?<>~/h04, chap. 1]. Here is one with the
+name of the author suppressed -@doe99.
+>>>
+codeSpan: citations
+interblockSeparator
+hash
+dollarSign
+percentSign
+ampersand
+tilde
+interblockSeparator
+interblockSeparator
+hash
+dollarSign
+percentSign
+ampersand
+tilde
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-code-spans.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-code-spans.test
new file mode 100644
index 0000000000..de24f9db29
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-code-spans.test
@@ -0,0 +1,9 @@
+\def\markdownOptionCodeSpans{false}
+<<<
+This test ensures that the Lua `codeSpans` option correctly propagates through
+the plain TeX interface.
+
+``This is a quote.''
+``This is another one.''
+>>>
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-content-blocks.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-content-blocks.test
new file mode 100644
index 0000000000..ed814a3071
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-content-blocks.test
@@ -0,0 +1,32 @@
+<<<
+This test ensures that the Lua `contentBlocks` option is disabled by default.
+/not/a/translusion.md
+
+/not/a/
+transclusion/either.md
+
+<http://example.com/minard.jpg>
+<http://example.com/minard.jpg> <-- This is just a link.
+
+htt(p:/)/exam(ple.c)om/m\(inard.jpg (Napoleon's disastrous Russian campaign of 1812)
+/Flowchart.png "Engineering Flowchart"
+
+/Savings Account.csv 'Recent Transactions'
+/Example.swift (Source code)
+/Lorem Ipsum.txt
+>>>
+codeSpan: contentBlocks
+interblockSeparator
+interblockSeparator
+BEGIN link
+- label: http://example.com/minard.jpg
+- URI: http://example.com/minard.jpg
+- title:
+END link
+BEGIN link
+- label: http://example.com/minard.jpg
+- URI: http://example.com/minard.jpg
+- title:
+END link
+interblockSeparator
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-fenced-code.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-fenced-code.test
new file mode 100644
index 0000000000..aab1caa4fb
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-fenced-code.test
@@ -0,0 +1,22 @@
+<<<
+This test ensures that the Lua `fencedCode` option is disabled by default. The
+following fenced code block should resolve to a code spans.
+
+``` foo
+bar
+```
+
+~~~ foo
+bar
+~~~
+>>>
+codeSpan: fencedCode
+interblockSeparator
+codeSpan: foo bar
+interblockSeparator
+tilde
+tilde
+tilde
+tilde
+tilde
+tilde
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-header-attributes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-header-attributes.test
new file mode 100644
index 0000000000..ba752d6e8d
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-header-attributes.test
@@ -0,0 +1,35 @@
+<<<
+This test ensures that the Lua `headerAttributes` option is disabled by default.
+
+# A level one heading {#first-id}
+
+A level one heading {#second_id2}
+=================================
+
+## A level two heading ### {#third-3id .a-class}
+
+A level two heading {#fourth4-id .2not-a-class}
+-----------------------------------------------
+
+### A level three heading ## {#5not-the-fifth-id}
+#### A level four heading {#-6not-the-sixth-id}
+##### A level five heading ## {#--7the-seventh-id}
+###### A level six heading {#-_the-eighth-id attribute=value}
+>>>
+codeSpan: headerAttributes
+interblockSeparator
+headingOne: A level one heading (leftBrace)(hash)first-id(rightBrace)
+interblockSeparator
+headingOne: A level one heading (leftBrace)(hash)second(underscore)id2(rightBrace)
+interblockSeparator
+headingTwo: A level two heading (hash)(hash)(hash) (leftBrace)(hash)third-3id .a-class(rightBrace)
+interblockSeparator
+headingTwo: A level two heading (leftBrace)(hash)fourth4-id .2not-a-class(rightBrace)
+interblockSeparator
+headingThree: A level three heading (hash)(hash) (leftBrace)(hash)5not-the-fifth-id(rightBrace)
+interblockSeparator
+headingFour: A level four heading (leftBrace)(hash)-6not-the-sixth-id(rightBrace)
+interblockSeparator
+headingFive: A level five heading (hash)(hash) (leftBrace)(hash)--7the-seventh-id(rightBrace)
+interblockSeparator
+headingSix: A level six heading (leftBrace)(hash)-(underscore)the-eighth-id attribute=value(rightBrace)
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-html.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-html.test
new file mode 100644
index 0000000000..cf1763f854
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-html.test
@@ -0,0 +1,53 @@
+<<<
+This test ensures that the Lua `html` option is disabled by default.
+
+<div>
+*There is no block tag support.*
+</div>
+*There is no <inline tag="tag"></inline> support.*
+_There is no <!-- comment --> support._
+_There is no <? HTML instruction ?> support._
+
+Here are several ways to write a pipe:
+
+- |
+- &verbar;
+- &vert;
+- &VerticalLine;
+- &#x0007C;
+- &#124;
+
+Unrecognized character entities are ignored: &nonsense;
+>>>
+codeSpan: html
+interblockSeparator
+emphasis: There is no block tag support.
+emphasis: There is no <inline tag="tag"></inline> support.
+emphasis: There is no <!-- comment --> support.
+emphasis: There is no <? HTML instruction ?> support.
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+pipe
+ulItemEnd
+ulItem
+ampersand
+ulItemEnd
+ulItem
+ampersand
+ulItemEnd
+ulItem
+ampersand
+ulItemEnd
+ulItem
+ampersand
+hash
+ulItemEnd
+ulItem
+ampersand
+hash
+ulItemEnd
+ulEndTight
+interblockSeparator
+ampersand
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-hybrid.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-hybrid.test
new file mode 100644
index 0000000000..d1f3100921
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-hybrid.test
@@ -0,0 +1,65 @@
+<<<
+This test ensures that the Lua `hybrid` option is disabled by default. The
+following special characters should be processed by lunamark.
+
+ * \char`{
+ * \char`}
+ * \char`$
+ * \char`\%
+ * \char`&
+ * \char`_
+ * \char`#
+ * \char`^
+ * \char`\
+ * \char`~
+ * \char`|
+>>>
+codeSpan: hybrid
+interblockSeparator
+ulBeginTight
+ulItem
+backslash
+leftBrace
+ulItemEnd
+ulItem
+backslash
+rightBrace
+ulItemEnd
+ulItem
+backslash
+dollarSign
+ulItemEnd
+ulItem
+backslash
+backslash
+percentSign
+ulItemEnd
+ulItem
+backslash
+ampersand
+ulItemEnd
+ulItem
+backslash
+underscore
+ulItemEnd
+ulItem
+backslash
+hash
+ulItemEnd
+ulItem
+backslash
+circumflex
+ulItemEnd
+ulItem
+backslash
+backslash
+ulItemEnd
+ulItem
+backslash
+tilde
+ulItemEnd
+ulItem
+backslash
+pipe
+ulItemEnd
+ulEndTight
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-inline-footnotes.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-inline-footnotes.test
new file mode 100644
index 0000000000..52053b3393
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-inline-footnotes.test
@@ -0,0 +1,16 @@
+<<<
+This test ensures that the Lua `inlineFootnotes` option is disabled by default.
+The following inline footnotes should resolve to footnotes.
+
+^[Here is the footnote. It can go anywhere after the footnote
+reference. It need *not* be placed at the end of the document.]
+
+\^[This should *not* be a footnote, because it has been escaped.]
+>>>
+codeSpan: inlineFootnotes
+interblockSeparator
+circumflex
+emphasis: not
+interblockSeparator
+circumflex
+emphasis: not
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-pipe-tables.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-pipe-tables.test
new file mode 100644
index 0000000000..ef1545c2fc
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-pipe-tables.test
@@ -0,0 +1,41 @@
+<<<
+This test ensures that the Lua `pipeTables` option is disabled by default.
+
+| Right | *Left* | Default | Center |
+|------:|:-------|-------------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | **123** | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of pipe table syntax.
+>>>
+codeSpan: pipeTables
+interblockSeparator
+pipe
+pipe
+emphasis: Left
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+strongEmphasis: 123
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+pipe
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-shift-headings.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-shift-headings.test
new file mode 100644
index 0000000000..35c21a73d1
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-shift-headings.test
@@ -0,0 +1,35 @@
+<<<
+This test ensures that the Lua `shiftHeadings` option is disabled by default.
+
+# A level one heading
+
+A level one heading
+===================
+
+## A level two heading
+
+A level two heading
+-------------------
+
+### A level three heading
+#### A level four heading
+##### A level five heading
+###### A level six heading
+>>>
+codeSpan: shiftHeadings
+interblockSeparator
+headingOne: A level one heading
+interblockSeparator
+headingOne: A level one heading
+interblockSeparator
+headingTwo: A level two heading
+interblockSeparator
+headingTwo: A level two heading
+interblockSeparator
+headingThree: A level three heading
+interblockSeparator
+headingFour: A level four heading
+interblockSeparator
+headingFive: A level five heading
+interblockSeparator
+headingSix: A level six heading
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-slice.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-slice.test
new file mode 100644
index 0000000000..130042e81f
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-slice.test
@@ -0,0 +1,251 @@
+\def\markdownOptionHeaderAttributes{true}
+<<<
+This test ensures that the Lua `slice` option processes the entire document by
+default.
+
+This is an H1
+=============
+
+This is an H2 {#first-h2}
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is an H2 {#second-h2}
+-------------
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is an H2
+-------------
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
+>>>
+codeSpan: slice
+interblockSeparator
+headingOne: This is an H1
+interblockSeparator
+headingTwo: This is an H2
+interblockSeparator
+headingThree: This is an H3
+interblockSeparator
+headingFour: This is an H4
+interblockSeparator
+headingFive: This is an H5
+interblockSeparator
+headingSix: This is an H6
+interblockSeparator
+interblockSeparator
+horizontalRule
+interblockSeparator
+codeSpan: code
+BEGIN link
+- label: link
+- URI: http://google.cz
+- title: Google
+END link
+emphasis: This is an (emphasis: emphasized) span of text
+strongEmphasis: This is a (strongEmphasis: strongly emphasized) span of text
+interblockSeparator
+BEGIN image
+- label: example image
+- URI: example-image.pdf
+- title: An example image from Martin Scharrer's mwe package
+END image
+interblockSeparator
+interblockSeparator
+interblockSeparator
+codeSpan: latex (backslash)documentclass(leftBrace)article(rightBrace) (backslash)begin(leftBrace)document(rightBrace) Hello world! (backslash)end(leftBrace)document(rightBrace)
+interblockSeparator
+headingTwo: This is an H2
+interblockSeparator
+interblockSeparator
+ulBegin
+ulItem
+interblockSeparator
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEnd
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 5
+interblockSeparator
+olItemEnd
+olItemWithNumber: 6
+olItemEnd
+olItemWithNumber: 7
+olItemEnd
+olEnd
+interblockSeparator
+interblockSeparator
+hash
+interblockSeparator
+inputVerbatim: ./_markdown_test/484324226416f8957283b25427f6a56e.verbatim
+interblockSeparator
+hash
+hash
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 5
+olItemEnd
+olItemWithNumber: 6
+olItemEnd
+olItemWithNumber: 7
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+hash
+hash
+hash
+interblockSeparator
+interblockSeparator
+interblockSeparator
+interblockSeparator
+emphasis: Term 2
+interblockSeparator
+interblockSeparator
+inputVerbatim: ./_markdown_test/75062d55efa99b0f4cb94891f3745f93.verbatim
+interblockSeparator
+interblockSeparator
+interblockSeparator
+emphasis: Term 2
+interblockSeparator
+headingTwo: This is an H2
+interblockSeparator
+interblockSeparator
+blockQuoteBegin
+interblockSeparator
+blockQuoteBegin
+blockQuoteEnd
+interblockSeparator
+blockQuoteEnd
+interblockSeparator
+circumflex
+circumflex
+circumflex
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-start-number.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-start-number.test
new file mode 100644
index 0000000000..49e03d7653
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-start-number.test
@@ -0,0 +1,41 @@
+\def\markdownOptionStartNumber{false}
+<<<
+This test ensures that the Lua `startNumber` option correctly propagates
+through the plain TeX interface. The following lists should not receive
+any starting number.
+
+Tight:
+
+3. three
+4. four
+5. five
+
+Loose:
+
+3. three
+
+4. four
+
+5. five
+>>>
+codeSpan: startNumber
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItem
+olItemEnd
+olItem
+olItemEnd
+olItem
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBegin
+olItem
+olItemEnd
+olItem
+olItemEnd
+olItem
+olItemEnd
+olEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-strip-percent-signs.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-strip-percent-signs.test
new file mode 100644
index 0000000000..a077a44db7
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-strip-percent-signs.test
@@ -0,0 +1,10 @@
+<<<
+This test ensures that the plain TeX `stripPercentSigns` option is disabled by
+default.
+
+The following emphasized text *should contain the percent sign at the
+% beginning of the line*.
+>>>
+codeSpan: stripPercentSigns
+interblockSeparator
+emphasis: should contain the percent sign at the (percentSign) beginning of the line
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-table-captions.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-table-captions.test
new file mode 100644
index 0000000000..7bcab8e5b3
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-table-captions.test
@@ -0,0 +1,79 @@
+\def\markdownOptionPipeTables{true}
+<<<
+This test ensures that the Lua `tableCaptions` option is disabled by
+default.
+
+| Right | *Left* | Default | Center |
+|------:|:-------|-------------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | **123** | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of *pipe table* syntax with the caption spreading over
+ multiple lines.
+
+| Right | *Left* | Default | Center |
+|------:|:-------|-------------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | **123** | 123 |
+| 1 | 1 | 1 | 1 |
+
+ Table: Demonstration of *pipe table* syntax with the caption spreading over
+ multiple lines.
+
+A caption may not span multiple paragraphs.
+>>>
+codeSpan: tableCaptions
+interblockSeparator
+BEGIN table (4 rows, 4 columns)
+- caption:
+- alignment of column 1: r
+- alignment of column 2: l
+- alignment of column 3: d
+- alignment of column 4: c
+- row 1, column 1: Right
+- row 1, column 2: (emphasis: Left)
+- row 1, column 3: Default
+- row 1, column 4: Center
+- row 2, column 1: 12
+- row 2, column 2: 12
+- row 2, column 3: 12
+- row 2, column 4: 12
+- row 3, column 1: 123
+- row 3, column 2: 123
+- row 3, column 3: (strongEmphasis: 123)
+- row 3, column 4: 123
+- row 4, column 1: 1
+- row 4, column 2: 1
+- row 4, column 3: 1
+- row 4, column 4: 1
+END table
+interblockSeparator
+emphasis: pipe table
+interblockSeparator
+BEGIN table (4 rows, 4 columns)
+- caption:
+- alignment of column 1: r
+- alignment of column 2: l
+- alignment of column 3: d
+- alignment of column 4: c
+- row 1, column 1: Right
+- row 1, column 2: (emphasis: Left)
+- row 1, column 3: Default
+- row 1, column 4: Center
+- row 2, column 1: 12
+- row 2, column 2: 12
+- row 2, column 3: 12
+- row 2, column 4: 12
+- row 3, column 1: 123
+- row 3, column 2: 123
+- row 3, column 3: (strongEmphasis: 123)
+- row 3, column 4: 123
+- row 4, column 1: 1
+- row 4, column 2: 1
+- row 4, column 3: 1
+- row 4, column 4: 1
+END table
+interblockSeparator
+emphasis: pipe table
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-tight-lists.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-tight-lists.test
new file mode 100644
index 0000000000..446eb681fc
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-tight-lists.test
@@ -0,0 +1,19 @@
+\def\markdownOptionTightLists{false}
+<<<
+This test ensures that the Lua `tightLists` option correctly propagates
+through the plain TeX interface. The following list should be regular.
+
+3. three
+4. four
+5. five
+>>>
+codeSpan: tightLists
+interblockSeparator
+olBegin
+olItemWithNumber: 3
+olItemEnd
+olItemWithNumber: 4
+olItemEnd
+olItemWithNumber: 5
+olItemEnd
+olEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-underscores.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-underscores.test
new file mode 100644
index 0000000000..6e24e3c6d0
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/no-underscores.test
@@ -0,0 +1,15 @@
+\def\markdownOptionUnderscores{false}
+\def\markdownOptionHybrid{true}
+<<<
+This test ensures that the Lua `underscores` option correctly propagates
+through the plain TeX interface.
+
+This is a math expression: $\sqrt{\sum_{i=0}^n (a_i + b_i)^2}$.
+\begingroup\catcode`\_=12
+This __is no__ strongly emphasized span of text.
+This **is** a strongly emphasized span of text.
+\endgroup
+>>>
+codeSpan: underscores
+interblockSeparator
+strongEmphasis: is
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-backwards.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-backwards.test
new file mode 100644
index 0000000000..127658d479
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-backwards.test
@@ -0,0 +1,37 @@
+\def\markdownOptionShiftHeadings{-2}
+<<<
+This test ensures that the Lua `shiftHeadings` option correctly propagates
+through the plain TeX interface.
+
+# A level one heading
+
+A level one heading
+===================
+
+## A level two heading
+
+A level two heading
+-------------------
+
+### A level three heading
+#### A level four heading
+##### A level five heading
+###### A level six heading
+>>>
+codeSpan: shiftHeadings
+interblockSeparator
+headingOne: A level one heading
+interblockSeparator
+headingOne: A level one heading
+interblockSeparator
+headingOne: A level two heading
+interblockSeparator
+headingOne: A level two heading
+interblockSeparator
+headingOne: A level three heading
+interblockSeparator
+headingTwo: A level four heading
+interblockSeparator
+headingThree: A level five heading
+interblockSeparator
+headingFour: A level six heading
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-forward.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-forward.test
new file mode 100644
index 0000000000..f38f9d44e9
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/shift-headings-forward.test
@@ -0,0 +1,37 @@
+\def\markdownOptionShiftHeadings{2}
+<<<
+This test ensures that the Lua `shiftHeadings` option correctly propagates
+through the plain TeX interface.
+
+# A level one heading
+
+A level one heading
+===================
+
+## A level two heading
+
+A level two heading
+-------------------
+
+### A level three heading
+#### A level four heading
+##### A level five heading
+###### A level six heading
+>>>
+codeSpan: shiftHeadings
+interblockSeparator
+headingThree: A level one heading
+interblockSeparator
+headingThree: A level one heading
+interblockSeparator
+headingFour: A level two heading
+interblockSeparator
+headingFour: A level two heading
+interblockSeparator
+headingFive: A level three heading
+interblockSeparator
+headingSix: A level four heading
+interblockSeparator
+headingSix: A level five heading
+interblockSeparator
+headingSix: A level six heading
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-conclusion.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-conclusion.test
new file mode 100644
index 0000000000..affb0a44c3
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-conclusion.test
@@ -0,0 +1,155 @@
+\def\markdownOptionHashEnumerators{true}
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\def\markdownOptionSmartEllipses{true}
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionSlice{$second-h2 $}
+<<<
+This test ensures that the Lua `slice` option correctly propagates through the
+plain TeX interface.
+
+This is an H1
+=============
+
+This is an H2 {#first-h2}
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is an H2 {#second-h2}
+-------------
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is an H2
+-------------
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
+>>>
+headingTwo: This is an H2
+interblockSeparator
+interblockSeparator
+blockQuoteBegin
+interblockSeparator
+blockQuoteBegin
+blockQuoteEnd
+interblockSeparator
+blockQuoteEnd
+interblockSeparator
+footnote: Here is the footnote.
+footnote: Here's one with multiple blocks.(interblockSeparator)Subsequent paragraphs are indented to show that they belong to the previous footnote.(interblockSeparator)(inputVerbatim: ./_markdown_test/384313ed77c3960a536af8343b57216d.verbatim)(interblockSeparator)The whole paragraph can be indented, or just the first line. In this way, multi-paragraph footnotes work like multi-paragraph list items.
+footnote: Inlines notes are easier to write, since you don't have to pick an identifier and move down to type the note.
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-existing-section.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-existing-section.test
new file mode 100644
index 0000000000..d291815912
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-existing-section.test
@@ -0,0 +1,182 @@
+\def\markdownOptionHashEnumerators{true}
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\def\markdownOptionSmartEllipses{true}
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionSlice{first-h2}
+<<<
+This test ensures that the Lua `slice` option correctly propagates through the
+plain TeX interface.
+
+This is an H1
+=============
+
+This is an H2 {#first-h2}
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is an H2 {#second-h2}
+-------------
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is an H2
+-------------
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
+>>>
+headingTwo: This is an H2
+interblockSeparator
+headingThree: This is an H3
+interblockSeparator
+headingFour: This is an H4
+interblockSeparator
+headingFive: This is an H5
+interblockSeparator
+headingSix: This is an H6
+interblockSeparator
+ellipsis
+interblockSeparator
+horizontalRule
+interblockSeparator
+codeSpan: code
+BEGIN link
+- label: link
+- URI: http://google.cz
+- title: Google
+END link
+emphasis: This is an (emphasis: emphasized) span of text
+strongEmphasis: This is a (strongEmphasis: strongly emphasized) span of text
+interblockSeparator
+BEGIN image
+- label: example image
+- URI: example-image.pdf
+- title: An example image from Martin Scharrer's mwe package
+END image
+interblockSeparator
+BEGIN contentBlock
+- suffix: csv
+- URI: scientists.csv
+- title: The great minds of the 19th century rendered via a content block
+END contentBlock
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/5ccbfd8d1e383aae968fc8c9b1412c8e.verbatim
+- infostring: latex
+END fencedCode
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-nonexisting-section.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-nonexisting-section.test
new file mode 100644
index 0000000000..d2a7cd5b8e
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-nonexisting-section.test
@@ -0,0 +1,141 @@
+\def\markdownOptionHashEnumerators{true}
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\def\markdownOptionSmartEllipses{true}
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionSlice{third-h2}
+<<<
+This test ensures that the Lua `slice` option correctly propagates through the
+plain TeX interface.
+
+This is an H1
+=============
+
+This is an H2 {#first-h2}
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is an H2 {#second-h2}
+-------------
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is an H2
+-------------
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
+>>>
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-preface.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-preface.test
new file mode 100644
index 0000000000..1891c5ecad
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-preface.test
@@ -0,0 +1,148 @@
+\def\markdownOptionHashEnumerators{true}
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\def\markdownOptionSmartEllipses{true}
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionSlice{^ ^first-h2}
+<<<
+This test ensures that the Lua `slice` option correctly propagates through the
+plain TeX interface.
+
+This is an H1
+=============
+
+This is an H2 {#first-h2}
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is an H2 {#second-h2}
+-------------
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is an H2
+-------------
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+>
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
+>>>
+codeSpan: slice
+interblockSeparator
+headingOne: This is an H1
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-two-sections.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-two-sections.test
new file mode 100644
index 0000000000..d202fd3e42
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/slice-two-sections.test
@@ -0,0 +1,278 @@
+\def\markdownOptionHashEnumerators{true}
+\def\markdownOptionDefinitionLists{true}
+\def\markdownOptionFootnotes{true}
+\def\markdownOptionInlineFootnotes{true}
+\def\markdownOptionSmartEllipses{true}
+\def\markdownOptionFencedCode{true}
+\def\markdownOptionContentBlocks{true}
+\def\markdownOptionHeaderAttributes{true}
+\def\markdownOptionSlice{first-h2 second-h2}
+<<<
+This test ensures that the Lua `slice` option correctly propagates through the
+plain TeX interface.
+
+This is an H1
+=============
+
+This is an H2 {#first-h2}
+-------------
+
+### This is an H3
+#### This is an H4
+##### This is an H5
+###### This is an H6
+
+This is a text paragraph containing an ellipsis ... and followed by a horizontal rule.
+
+***
+
+This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__.
+
+ ![example image](example-image.pdf "An example image from Martin Scharrer's mwe package")
+
+ /scientists.csv (The great minds of the 19th century rendered via a content block)
+
+This is a fenced code block:
+
+``` latex
+\documentclass{article}
+\begin{document}
+ Hello world!
+\end{document}
+```
+
+This is an H2 {#second-h2}
+-------------
+
+This is a bullet list:
+
+ * The first item of a bullet list
+
+ that spans several paragraphs,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is a compact bullet list:
+
+ * The first item of a bullet list,
+ * the second item of a bullet list,
+ * the third item of a bullet list.
+
+This is an ordered list:
+
+ 5. The first item of an ordered list
+
+ that spans several paragraphs,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is an ordered list using hash enumerators:
+
+ #. The first item of an ordered list
+
+ that spans several paragraphs,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a compact ordered list:
+
+ 5. The first item of an ordered list,
+ 6. the second item of an ordered list,
+ 7. the third item of an ordered list.
+
+This is a compact ordered list using hash enumerators:
+
+ #. The first item of an ordered list,
+ #. the second item of an ordered list,
+ #. the third item of an ordered list.
+
+This is a definition list:
+
+Term 1
+
+: Definition 1
+
+*Term 2*
+
+: Definition 2
+
+ Some code, part of Definition 2
+
+ Third paragraph of Definition 2.
+
+: Definition 3
+
+This is a compact definition list:
+
+Term 1
+: Definition 1
+*Term 2*
+: Definition 2
+: Definition 3
+
+This is an H2
+-------------
+
+This is a block quote:
+
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Here is a footnote reference[^1] and another.[^longnote]
+Here is an inline note.^[Inlines notes are easier to
+write, since you don't have to pick an identifier and
+move down to type the note.]
+
+[^1]: Here is the footnote.
+
+[^longnote]: Here's one with multiple blocks.
+
+ Subsequent paragraphs are indented to show that they
+belong to the previous footnote.
+
+ Some code
+
+ The whole paragraph can be indented, or just the first
+ line. In this way, multi-paragraph footnotes work like
+ multi-paragraph list items.
+>>>
+headingTwo: This is an H2
+interblockSeparator
+headingThree: This is an H3
+interblockSeparator
+headingFour: This is an H4
+interblockSeparator
+headingFive: This is an H5
+interblockSeparator
+headingSix: This is an H6
+interblockSeparator
+ellipsis
+interblockSeparator
+horizontalRule
+interblockSeparator
+codeSpan: code
+BEGIN link
+- label: link
+- URI: http://google.cz
+- title: Google
+END link
+emphasis: This is an (emphasis: emphasized) span of text
+strongEmphasis: This is a (strongEmphasis: strongly emphasized) span of text
+interblockSeparator
+BEGIN image
+- label: example image
+- URI: example-image.pdf
+- title: An example image from Martin Scharrer's mwe package
+END image
+interblockSeparator
+BEGIN contentBlock
+- suffix: csv
+- URI: scientists.csv
+- title: The great minds of the 19th century rendered via a content block
+END contentBlock
+interblockSeparator
+interblockSeparator
+BEGIN fencedCode
+- src: ./_markdown_test/5ccbfd8d1e383aae968fc8c9b1412c8e.verbatim
+- infostring: latex
+END fencedCode
+interblockSeparator
+headingTwo: This is an H2
+interblockSeparator
+interblockSeparator
+ulBegin
+ulItem
+interblockSeparator
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEnd
+interblockSeparator
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 5
+interblockSeparator
+olItemEnd
+olItemWithNumber: 6
+olItemEnd
+olItemWithNumber: 7
+olItemEnd
+olEnd
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 1
+interblockSeparator
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEnd
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 5
+olItemEnd
+olItemWithNumber: 6
+olItemEnd
+olItemWithNumber: 7
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olItemWithNumber: 3
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+dlBegin
+dlItem: Term 1
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: (emphasis: Term 2)
+dlDefinitionBegin
+interblockSeparator
+inputVerbatim: ./_markdown_test/341d9e6b078ab6ffb77652958c88c4ef.verbatim
+interblockSeparator
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEnd
+interblockSeparator
+interblockSeparator
+dlBeginTight
+dlItem: Term 1
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: (emphasis: Term 2)
+dlDefinitionBegin
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEndTight
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/start-number.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/start-number.test
new file mode 100644
index 0000000000..8f0245016f
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/start-number.test
@@ -0,0 +1,39 @@
+<<<
+This test ensures that the Lua `startNumber` option is enabled by default. The
+following lists should start with number three.
+
+Tight:
+
+3. three
+4. four
+5. five
+
+Loose:
+
+3. three
+
+4. four
+
+5. five
+>>>
+codeSpan: startNumber
+interblockSeparator
+interblockSeparator
+olBeginTight
+olItemWithNumber: 3
+olItemEnd
+olItemWithNumber: 4
+olItemEnd
+olItemWithNumber: 5
+olItemEnd
+olEndTight
+interblockSeparator
+interblockSeparator
+olBegin
+olItemWithNumber: 3
+olItemEnd
+olItemWithNumber: 4
+olItemEnd
+olItemWithNumber: 5
+olItemEnd
+olEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/table-captions.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/table-captions.test
new file mode 100644
index 0000000000..11db7c69e6
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/table-captions.test
@@ -0,0 +1,76 @@
+\def\markdownOptionPipeTables{true}
+\def\markdownOptionTableCaptions{true}
+<<<
+This test ensures that the Lua `tableCaptions` option correctly propagates
+through the plain TeX interface.
+
+| Right | *Left* | Default | Center |
+|------:|:-------|-------------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | **123** | 123 |
+| 1 | 1 | 1 | 1 |
+
+ : Demonstration of *pipe table* syntax with the caption spreading over
+ multiple lines.
+
+| Right | *Left* | Default | Center |
+|------:|:-------|-------------|:------:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | **123** | 123 |
+| 1 | 1 | 1 | 1 |
+
+ Table: Demonstration of *pipe table* syntax with the caption spreading over
+ multiple lines.
+
+A caption may not span multiple paragraphs.
+>>>
+codeSpan: tableCaptions
+interblockSeparator
+BEGIN table (4 rows, 4 columns)
+- caption: Demonstration of (emphasis: pipe table) syntax with the caption spreading over multiple lines.
+- alignment of column 1: r
+- alignment of column 2: l
+- alignment of column 3: d
+- alignment of column 4: c
+- row 1, column 1: Right
+- row 1, column 2: (emphasis: Left)
+- row 1, column 3: Default
+- row 1, column 4: Center
+- row 2, column 1: 12
+- row 2, column 2: 12
+- row 2, column 3: 12
+- row 2, column 4: 12
+- row 3, column 1: 123
+- row 3, column 2: 123
+- row 3, column 3: (strongEmphasis: 123)
+- row 3, column 4: 123
+- row 4, column 1: 1
+- row 4, column 2: 1
+- row 4, column 3: 1
+- row 4, column 4: 1
+END table
+interblockSeparator
+BEGIN table (4 rows, 4 columns)
+- caption: Demonstration of (emphasis: pipe table) syntax with the caption spreading over multiple lines.
+- alignment of column 1: r
+- alignment of column 2: l
+- alignment of column 3: d
+- alignment of column 4: c
+- row 1, column 1: Right
+- row 1, column 2: (emphasis: Left)
+- row 1, column 3: Default
+- row 1, column 4: Center
+- row 2, column 1: 12
+- row 2, column 2: 12
+- row 2, column 3: 12
+- row 2, column 4: 12
+- row 3, column 1: 123
+- row 3, column 2: 123
+- row 3, column 3: (strongEmphasis: 123)
+- row 3, column 4: 123
+- row 4, column 1: 1
+- row 4, column 2: 1
+- row 4, column 3: 1
+- row 4, column 4: 1
+END table
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark-markdown/tight-lists.test b/macros/generic/markdown/tests/testfiles/lunamark-markdown/tight-lists.test
new file mode 100644
index 0000000000..47ecbcb726
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark-markdown/tight-lists.test
@@ -0,0 +1,18 @@
+<<<
+This test ensures that the Lua `tightLists` option is enabled by default. The
+following list should be tight.
+
+3. three
+4. four
+5. five
+>>>
+codeSpan: tightLists
+interblockSeparator
+olBeginTight
+olItemWithNumber: 3
+olItemEnd
+olItemWithNumber: 4
+olItemEnd
+olItemWithNumber: 5
+olItemEnd
+olEndTight
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/README.md b/macros/generic/markdown/tests/testfiles/lunamark/README.md
new file mode 100644
index 0000000000..59a2e70f47
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/README.md
@@ -0,0 +1,2 @@
+This directory contains test files that were inherited from the
+`tests/lunamark/` directory in the lunamark project.
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/backticks-in-links.test b/macros/generic/markdown/tests/testfiles/lunamark/backticks-in-links.test
new file mode 100644
index 0000000000..4f1f3fb24b
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/backticks-in-links.test
@@ -0,0 +1,8 @@
+<<<
+[hi `there] bud`](/url)
+>>>
+BEGIN link
+- label: hi (codeSpan: there] bud)
+- URI: /url
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/case-insensitive-references.test b/macros/generic/markdown/tests/testfiles/lunamark/case-insensitive-references.test
new file mode 100644
index 0000000000..4b2e6ad26b
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/case-insensitive-references.test
@@ -0,0 +1,10 @@
+<<<
+[hI]
+
+[Hi]: /foo
+>>>
+BEGIN link
+- label: hI
+- URI: /foo
+- title:
+END link
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/consecutive-lists.test b/macros/generic/markdown/tests/testfiles/lunamark/consecutive-lists.test
new file mode 100644
index 0000000000..56aaf8a8b3
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/consecutive-lists.test
@@ -0,0 +1,19 @@
+<<<
+- one
+- two
+1. one
+2. two
+>>>
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olEndTight
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/definition-lists.test b/macros/generic/markdown/tests/testfiles/lunamark/definition-lists.test
new file mode 100644
index 0000000000..35e5ef684b
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/definition-lists.test
@@ -0,0 +1,200 @@
+\def\markdownOptionDefinitionLists{true}
+<<<
+Tight using spaces:
+
+apple
+: red fruit
+orange
+: orange fruit
+banana
+: yellow fruit
+
+Tight using tabs:
+
+apple
+: red fruit
+orange
+: orange fruit
+banana
+: yellow fruit
+
+Loose:
+
+apple
+: red fruit
+
+orange
+: orange fruit
+
+banana
+: yellow fruit
+
+Multiple blocks with italics:
+
+*apple*
+: red fruit
+
+ contains seeds,
+ crisp, pleasant to taste
+
+*orange*
+: orange fruit
+
+ { orange code block }
+
+ > orange block quote
+
+Multiple definitions, tight:
+
+apple
+: red fruit
+: computer
+orange
+: orange fruit
+: bank
+
+Multiple definitions, loose:
+
+apple
+: red fruit
+
+: computer
+
+orange
+: orange fruit
+
+: bank
+
+Blank line after term, indented marker, alternate markers:
+
+apple
+
+ ~ red fruit
+
+ ~ computer
+
+orange
+
+ ~ orange fruit
+
+ 1. sublist
+ 2. sublist
+>>>
+interblockSeparator
+dlBeginTight
+dlItem: apple
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: orange
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: banana
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEndTight
+interblockSeparator
+interblockSeparator
+dlBeginTight
+dlItem: apple
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: orange
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: banana
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEndTight
+interblockSeparator
+interblockSeparator
+dlBegin
+dlItem: apple
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: orange
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: banana
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEnd
+interblockSeparator
+interblockSeparator
+dlBegin
+dlItem: (emphasis: apple)
+dlDefinitionBegin
+interblockSeparator
+dlDefinitionEnd
+dlItemEnd
+dlItem: (emphasis: orange)
+dlDefinitionBegin
+interblockSeparator
+inputVerbatim: ./_markdown_test/f9f08689e38f4705165b9018b14b4a09.verbatim
+interblockSeparator
+blockQuoteBegin
+blockQuoteEnd
+dlDefinitionEnd
+dlItemEnd
+dlEnd
+interblockSeparator
+interblockSeparator
+dlBeginTight
+dlItem: apple
+dlDefinitionBegin
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: orange
+dlDefinitionBegin
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEndTight
+interblockSeparator
+interblockSeparator
+dlBegin
+dlItem: apple
+dlDefinitionBegin
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: orange
+dlDefinitionBegin
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlEnd
+interblockSeparator
+interblockSeparator
+dlBegin
+dlItem: apple
+dlDefinitionBegin
+dlDefinitionEnd
+dlDefinitionBegin
+dlDefinitionEnd
+dlItemEnd
+dlItem: orange
+dlDefinitionBegin
+interblockSeparator
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olEndTight
+dlDefinitionEnd
+dlItemEnd
+dlEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/hash-enumerators.test b/macros/generic/markdown/tests/testfiles/lunamark/hash-enumerators.test
new file mode 100644
index 0000000000..94f63fd2ad
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/hash-enumerators.test
@@ -0,0 +1,11 @@
+\def\markdownOptionHashEnumerators{true}
+<<<
+#. one
+#. two
+>>>
+olBeginTight
+olItemWithNumber: 1
+olItemEnd
+olItemWithNumber: 2
+olItemEnd
+olEndTight
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/indented-code-in-list-item.test b/macros/generic/markdown/tests/testfiles/lunamark/indented-code-in-list-item.test
new file mode 100644
index 0000000000..8e35081172
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/indented-code-in-list-item.test
@@ -0,0 +1,16 @@
+<<<
+1. Just a small test
+
+ This is some code
+
+ and some indented code
+
+ and this is the end
+>>>
+olBegin
+olItemWithNumber: 1
+interblockSeparator
+inputVerbatim: ./_markdown_test/36d7a0503b844c792d46549a49b6e7b8.verbatim
+interblockSeparator
+olItemEnd
+olEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/list-spacing.test b/macros/generic/markdown/tests/testfiles/lunamark/list-spacing.test
new file mode 100644
index 0000000000..4e7f84248d
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/list-spacing.test
@@ -0,0 +1,42 @@
+<<<
+ * item 1
+ * item 1a
+ * item 2
+* item 2a
+ * item 2b
+ * item 2c
+ * item 3
+
+----
+
+ 8. item 1
+ 9. item 2
+10. item 2a
+>>>
+ulBeginTight
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulItem
+ulItemEnd
+ulEndTight
+interblockSeparator
+horizontalRule
+interblockSeparator
+olBeginTight
+olItemWithNumber: 8
+olItemEnd
+olItemWithNumber: 9
+olItemEnd
+olItemWithNumber: 10
+olItemEnd
+olEndTight
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/lists-and-hrules.test b/macros/generic/markdown/tests/testfiles/lunamark/lists-and-hrules.test
new file mode 100644
index 0000000000..cffd38dc87
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/lists-and-hrules.test
@@ -0,0 +1,18 @@
+<<<
++ item 1
+
+ + item 2
+
+ * * * * *
+>>>
+ulBegin
+ulItem
+interblockSeparator
+ulBeginTight
+ulItem
+ulItemEnd
+ulEndTight
+ulItemEnd
+ulEnd
+interblockSeparator
+horizontalRule
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/notes.test b/macros/generic/markdown/tests/testfiles/lunamark/notes.test
new file mode 100644
index 0000000000..312090de8a
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/notes.test
@@ -0,0 +1,27 @@
+\def\markdownOptionFootnotes{true}
+<<<
+Here is a footnote reference,[^1] and another.[^longnote]
+This should *not* be a footnote reference, because it has not been
+defined.[^my note]
+
+[^longnote]: Here's the long note. This one contains multiple blocks.
+
+ Subsequent blocks are indented to show that they belong to the
+footnote (as with list items).
+
+ { <code> }
+
+ If you want, you can indent every line, but you can also be
+ lazy and just indent the first line of each block.
+
+This paragraph should not be part of the note, as it is not indented.
+
+ [^1]: Here is the footnote. It can go anywhere after the footnote
+ reference. It need not be placed at the end of the document.
+
+>>>
+footnote: Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.
+footnote: Here's the long note. This one contains multiple blocks.(interblockSeparator)Subsequent blocks are indented to show that they belong to the footnote (as with list items).(interblockSeparator)(inputVerbatim: ./_markdown_test/7f88af46ac2c38c6ee0c6837fcb8cbc6.verbatim)(interblockSeparator)If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.
+emphasis: not
+circumflex
+interblockSeparator
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/reference-defined-in-blockquote.test b/macros/generic/markdown/tests/testfiles/lunamark/reference-defined-in-blockquote.test
new file mode 100644
index 0000000000..8bafd8f0d4
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/reference-defined-in-blockquote.test
@@ -0,0 +1,12 @@
+<<<
+> [foo]
+>
+> [foo]: /bar
+>>>
+blockQuoteBegin
+BEGIN link
+- label: foo
+- URI: /bar
+- title:
+END link
+blockQuoteEnd
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-blockquote.test b/macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-blockquote.test
new file mode 100644
index 0000000000..9c476ac354
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-blockquote.test
@@ -0,0 +1,5 @@
+\def\markdownOptionBlankBeforeBlockquote{true}
+<<<
+Hi
+> no quote
+>>>
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-header.test b/macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-header.test
new file mode 100644
index 0000000000..4ed22912e7
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/require-blank-before-header.test
@@ -0,0 +1,6 @@
+\def\markdownOptionBlankBeforeHeading{true}
+<<<
+Hi
+# No header
+>>>
+hash
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/smart.test b/macros/generic/markdown/tests/testfiles/lunamark/smart.test
new file mode 100644
index 0000000000..ce48cf374c
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/smart.test
@@ -0,0 +1,7 @@
+\def\markdownOptionSmartEllipses{true}
+<<<
+Ellipses...and...and....
+>>>
+ellipsis
+ellipsis
+ellipsis
diff --git a/macros/generic/markdown/tests/testfiles/lunamark/unicode.test b/macros/generic/markdown/tests/testfiles/lunamark/unicode.test
new file mode 100644
index 0000000000..1392aa0915
--- /dev/null
+++ b/macros/generic/markdown/tests/testfiles/lunamark/unicode.test
@@ -0,0 +1,10 @@
+<<<
+[Beiß nicht in die Hand, die dich füttert.]
+
+[BEIß NICHT IN DIE HAND, DIE DICH FÜTTERT.]: http://en.wikiquote.org/wiki/German_proverbs
+>>>
+BEGIN link
+- label: Beiß nicht in die Hand, die dich füttert.
+- URI: http://en.wikiquote.org/wiki/German(underscore)proverbs
+- title:
+END link
diff --git a/macros/generic/mathdots/README b/macros/generic/mathdots/README
new file mode 100644
index 0000000000..071d123576
--- /dev/null
+++ b/macros/generic/mathdots/README
@@ -0,0 +1,54 @@
+This is the mathdots package, version 0.9.
+Copyright 2001--2014, Daniel H. Luecking
+
+License:
+=======
+Mathdots may be distributed and/or modified under the conditions of the
+LaTeX Project Public License, either version 1.3c of this license or (at
+your option) any later version. The latest version of this license is in
+ <http://www.latex-project.org/lppl.txt>
+and version 1.3c or later is part of all distributions of LaTeX dated
+2008/05/04 or later.
+
+Mathdots has maintenance status "author-maintained". The Current
+Maintainer is Daniel H. Luecking. The Base Interpreters associated with
+mathdots are plain TeX and LaTeX
+
+Purpose:
+=======
+This package changes the basic LaTeX and plain TeX commands \ddots and
+\vdots so that they properly change size when font sizes change, and
+when they are used in superscripts and subscripts. It also adds the
+command \iddots (for inverse diagonal dots) which slants the opposite
+way from \ddots.
+
+In addition, if it detects amsmath in LaTeX (or AMSTeX in plain TeX) it
+defines improved versions of the \dddot and \ddddot commands that place
+three and four dots on a math symbol (similar to the math accent
+commands \dot and \ddot). These also are arranged to change size
+correctly and some placement bugs are corrected.
+
+Other (minor) improvements: the commands \vdots, \ddots and \iddots
+select the dot from the math fonts instead of the text fonts, so they
+always match math punctuation dots. The \dddot and \ddddot commands
+select the accent dot (same one placed by \dot).
+
+File list:
+
+README This file
+mathdots.dtx The code
+mathdots.pdf The manual
+mathdots.ins unpacking script
+mdotest.tex LaTeX test file
+plmdotest.tex Plain TeX test file (requires loading amstex.tex and the
+ and something to define the commands \eightpoint,
+ \ninepoint, \tenpoint and \twelvepoint)
+
+Installation:
+
+Run tex or latex on mathdots.ins to unpack the files. Copy mathdots.tex
+where tex will find it and mathdots.sty where latex will find it. Copy
+the remaining files to your documentation area.
+
+Daniel H. Luecking, \luecking \at \uark \dot \edu
+
diff --git a/macros/generic/mathdots/mathdots.dtx b/macros/generic/mathdots/mathdots.dtx
new file mode 100644
index 0000000000..d5ace76661
--- /dev/null
+++ b/macros/generic/mathdots/mathdots.dtx
@@ -0,0 +1,512 @@
+% \iffalse
+% -------------------------------------------------------------------
+%
+% Copyright 2001--2006, Daniel H. Luecking
+%
+% Mathdots may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License, either version 1.3c of this license or (at
+% your option) any later version. The latest version of this license is in
+% <http://www.latex-project.org/lppl.txt>
+% and version 1.3c or later is part of all distributions of LaTeX version
+% 2008/05/04 or later.
+%
+% Mathdots has maintenance status "author-maintained". The Current
+% Maintainer is Daniel H. Luecking. The Base Interpreters associated with
+% mathdots are TeX and LaTeX.
+%
+%<*sty|tex>
+%<*driver>
+\ProvidesFile{mathdots.dtx}%
+%</driver>
+%<sty>\ifx\documentclass\UndEfInEd\input mathdots \expandafter\endinput\fi
+%<sty>\ProvidesPackage{mathdots}
+%<*sty>
+[2014/06/11 v0.9 Improve and add various macros for dots in math.]%
+%</sty>
+%<tex>\def\mathdotsfiledate{2014/06/11}%
+%<tex>\def\mathdotsfileversion{0.9}%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{amsmath}
+\usepackage{mathdots}
+\addtolength{\textwidth}{.5878pt}
+
+\def\mytt{\upshape\mdseries\ttfamily}
+\renewcommand\marg[1]{{\mytt \{#1\}}}
+\renewcommand\oarg[1]{{\mytt [#1]}}
+\renewcommand\parg[1]{{\mytt (#1)}}
+\renewcommand\arg[1]{{\mytt\##1}}
+\renewcommand{\meta}[1]{{$\langle$\rmfamily\itshape#1\/$\rangle$}}
+\DeclareRobustCommand\cs[1]{{\mytt\char`\\#1}}
+\def\prog#1{{\mdseries\scshape #1}}
+\def\opt#1{{\sffamily\upshape#1}}
+\def\mtt#1{{\mytt#1}}
+\let\env\mtt
+\let\file\mtt
+\def\MD{\prog{mathdots}}
+\renewcommand\{{\mtt{\char`\{}}
+\renewcommand\}{\mtt{\char`\}}}
+\renewcommand\|{${}\mathrel{|}{}$}
+
+\makeatletter
+\newcommand\bsl{{\mytt\@backslashchar}}
+% Stupid lists!
+\def\@listi{\leftmargin\leftmargini
+ \parsep \z@ \@plus\p@ \@minus\z@
+ \topsep 4\p@ \@plus\p@ \@minus2\p@
+ \itemsep\parsep}
+\let\@listI\@listi \@listi
+\renewcommand\labelitemi{\normalfont\bfseries \textendash}
+\renewcommand\labelitemii{\textasteriskcentered}
+\renewcommand\labelitemiii{\textperiodcentered}
+\leftmargini\parindent
+% Stupid index!
+\def\usage#1{\textrm{#1}}
+\def\index@prologue{\section*{Index}\markboth{Index}{Index}%
+ Numbers refer to the page(s) where the corresponding entry is described.
+}
+\def\IndexParms{%
+ \parindent \z@ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \rightskip 5pt plus2em \mathsurround \z@
+ \parfillskip-5pt \small
+ % less hanging:
+ \def\@idxitem{\par\hangindent 20pt}%
+ \def\subitem{\@idxitem\hspace*{15pt}}%
+ \def\subsubitem{\@idxitem\hspace*{25pt}}%
+ \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}}
+\makeatother
+
+\title{The \MD{} package\thanks{This file has version number
+ \fileversion, last revised \filedate.}}
+\author{Dan Luecking}
+\date{\filedate}
+\DisableCrossrefs
+\CodelineIndex
+\AlsoImplementation
+\begin{document}
+ \DeleteShortVerb{\|}
+ \DocInput{mathdots.dtx}
+\end{document}
+%</driver>
+%\fi
+% \CheckSum{364}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \catcode`\_=12
+% \GetFileInfo{mathdots.dtx}
+% \maketitle
+%
+% \begin{abstract}
+% This package provides vertical dots and diagonal dots in math, slanting
+% in either direction. It should work equally well in \LaTeX{} or plain
+% \TeX{}. It improves on the default definitions of plain \TeX{} and
+% \LaTeX{}. Similar improvements are provided for the triple and
+% quadruple dot accents of AMS\TeX{}/AMS\LaTeX{}.
+% \end{abstract}
+%
+% \StopEventually{\PrintIndex}
+%
+% \section{Introduction}
+%
+% Running \LaTeX{} or \TeX{} on \file{mathdots.ins} generates
+% \file{mathdots.sty}, a \LaTeX{} package, and \file{mathdots.tex} a plain
+% \TeX{} input file. If one puts \verb"\input mathdots.sty" in a plain
+% \TeX{} file, it will cause \file{mathdots.tex} to be input. This is for
+% backward compatibility.
+%
+% Unlike the commands \cs{ddots} and \cs{vdots} provided by \LaTeX{},
+% the versions defined by \MD{} change size with \LaTeX{} size
+% changing commands, as well as in \{sub[sub]\|super[super]\}scripts.
+% After \MD{} is loaded, \verb"{\large$\ddots$}" will be larger and
+% \verb"{\small$\ddots$}" will be smaller than \verb"$\ddots$" at normal
+% size. Moreover, \verb"$2^{2^\ddots}$" will also produce a smaller
+% symbol. This last example is very unlikely to be needed, but the version
+% with the opposite slant is very common (and is provided by \MD{}).
+%
+% The \prog{amsmath} accents \cs{dddot} and \cs{ddddot} have similar
+% problems that \MD{} attempts to correct when \prog{amsmath} is loaded.
+%
+% See Table~\ref{examples} for examples of the \MD{} commands at
+% different sizes and in exponents. See Table~\ref{compare} for
+% comparison, showing the results without \MD{}.
+%
+% \def\dott#1{$#1$}
+% \def\dotts#1{$2^{#1}\quad 2^{2^{#1}}$}
+% \begin{table}[htbp]
+% \centering \renewcommand\arraystretch{1.4}
+% \begin{tabular}{c|cccc}
+% \multicolumn{1}{l}{\large With \MD{}:}\\[4pt]
+% \multicolumn{1}{c}{\textbf{Command}}%
+% &\textbf{Large} &\textbf{normal} &\textbf{scriptsize}
+% &\textbf{in exponents}\\
+% \hline
+% \verb$\ddots$ & \Large\dott{\ddots} & \dott{\ddots} & \scriptsize\dott{\ddots}
+% & \dotts{\ddots}\\
+% \verb$\vdots$ & \Large\dott{\vdots} & \dott{\vdots} & \scriptsize\dott{\vdots}
+% & \dotts{\vdots}\\
+% \verb$\iddots$ & \Large\dott{\iddots} & \dott{\iddots} & \scriptsize\dott{\iddots}
+% & \dotts{\iddots}\\
+% \verb$\dddot{X}$ & \Large\dott{\dddot{X}} & \dott{\dddot{X}} & \scriptsize\dott{\dddot{X}}
+% & \dotts{\dddot{X}}\\
+% \verb$\ddddot{X}$& \Large\dott{\ddddot{X}}& \dott{\ddddot{X}}& \scriptsize\dott{\ddddot{X}}
+% & \dotts{\ddddot{X}}
+% \end{tabular}
+% \caption{Dots at different sizes and in exponents.}
+% \label{examples}
+% \end{table}
+%
+% \begin{table}[htbp]
+% \centering \renewcommand\arraystretch{1.4}
+% \begin{tabular}{c|cccc}
+% \multicolumn{1}{l}{\large Without \MD{}:}\\[4pt]
+% \multicolumn{1}{c}{\textbf{Command}}%
+% &\textbf{Large} &\textbf{normal} &\textbf{scriptsize}
+% &\textbf{in exponents}\\
+% \hline
+% \verb$\ddots$ & \Large\dott{\originalddots} & \dott{\originalddots} & \scriptsize\dott{\originalddots}
+% & \dotts{\originalddots}\\
+% \verb$\vdots$ & \Large\dott{\originalvdots} & \dott{\originalvdots} & \scriptsize\dott{\originalvdots}
+% & \dotts{\originalvdots}\\
+% \verb$\dddot{X}$ & \Large\dott{\originaldddot{X}} & \dott{\originaldddot{X}} & \scriptsize\dott{\originaldddot{X}}
+% & \dotts{\originaldddot{X}}\\
+% \verb$\ddddot{X}$& \Large\dott{\originalddddot{X}} & \dott{\originalddddot{X}}& \scriptsize\dott{\originalddddot{X}}
+% & \dotts{\originalddddot{X}}
+% \end{tabular}
+% \caption{Dots without \MD{}.}
+% \label{compare}
+% \end{table}
+%
+% \DescribeMacro{\ddots}
+% The default \LaTeX{} (and plain \TeX) definition changes the size of the
+% dots, and the horizontal dimensions, but not the vertical dimensions,
+% giving them different slants at different sizes. Also, using the default
+% version in 'scripts produces symbols identical to those produced
+% elsewhere. Finally, the default takes the dots from the current text
+% font, whereas the \MD{} package takes them from the current math symbol
+% font, so they should match other dots in math mode. This is only really
+% a concern in \mtt{17pt} sizes or larger where \file{cmr17} is scaled to
+% get text dots, but \file{cmsy12} is scaled to get math dots.
+%
+% \DescribeMacro{\iddots}
+% \MD{} supplies also \cs{iddots}, with behavior similar to \cs{ddots},
+% except it produces the other diagonal. This command is not provided in
+% basic \TeX{} or \LaTeX{}.
+%
+% \DescribeMacro{\vdots}
+% \cs{vdots} produces vertical dots (as in standard \TeX{} or \LaTeX{}),
+% but again, the \MD{} version will change size with size
+% changing commands.
+%
+% \DescribeMacro{\fixedddots}
+% \DescribeMacro{\fixedvdots}
+% \DescribeMacro{\fixediddots}
+% The old behavior is stored in \cs{fixedddots} and \cs{fixedvdots}.
+% If you wish \cs{iddots} to behave similarly then use \cs{fixediddots}.
+%
+% The \cs{fixed...} versions try to maintain the (awful) default behavior,
+% which is to let the horizontal dimensions change size, as well as the
+% dots themselves, but hard code unchanging vertical dimensions. The
+% `fixed' part of the name does not mean `corrected', but rather
+% `unchanging' or `frozen'.
+%
+% \DescribeMacro{\originalddots}
+% \DescribeMacro{\originalvdots}
+% \DescribeMacro{\originaliddots}
+% On the chance that some other package changes the behavior before \MD{}
+% is loaded, use \cs{originalddots}, \cs{originalvdots}, and
+% \cs{originaliddots} to obtain the versions in force before \MD{} is
+% loaded.
+%
+% \DescribeMacro{\dddot}
+% \DescribeMacro{\ddddot}
+% If the \prog{amsmath} package is detected in \LaTeX{}, the commands
+% \cs{dddot} and \cs{ddddot} are modified to get the same size changing
+% behavior in 'scripts. They also correct a positioning bug in the
+% \prog{amsmath} code. Compare the old and new versions and the 2-dot accent
+% (from basic \LaTeX{}): $\originaldddot{X},\dddot{X},\ddot{X}$. I have
+% also taken the liberty of changing the spacing between dots to match
+% that in the 2-dot accent.
+%
+% \DescribeMacro{\originaldddot}
+% \DescribeMacro{\originalddddot}
+% Some of the changes to \cs{dddot} and \cs{ddddot} require the command
+% \cs{text}, and so is only applied if \prog{amsmath} has been loaded
+% \emph{before} \MD{}. The old amsmath commands are saved in
+% \cs{originaldddot} and \cs{originalddddot}. Similar comments apply to
+% plain \TeX{} with regard to \file{amstex.tex}.
+%
+% \DescribeMacro{\MDoprekern}
+% \DescribeMacro{\MDodotkern}
+% \DescribeMacro{\MDopostkern}
+% Different math fonts have different metrics for the \cs{dot} and
+% \cs{ddot} accents. If you use a math font family other than the CM
+% fonts, you can adjust the positioning and spacing of the the dots in
+% \cs{dddot} and \cs{ddddot} to better match the spacing in \cs{ddot}
+% with the following length commands: \cs{MDoprekern}, \cs{MDodotkern} and
+% \cs{MDopostkern}. These adjust the space before the first dot, between
+% the dots and after the last dot, respectively. They are in units of
+% \texttt{mu}, which is $1/3$ the size of the space made by \cs{,}.
+% Reducing the first and/or increasing the last one cause the dots to be
+% shifted left. Reducing the middle one causes the dots to be closer
+% together. As there is usually a bit of white on either side of the dot
+% character, these usually have to be given negative values (so ``reduce''
+% means ``make more negative''). The defaults for the CM fonts are
+% accomplished by the commands
+% \begin{verbatim}
+% \MDoprekern=0mu
+% \MDodotkern=-1.3mu
+% \MDopostkern=-1mu \end{verbatim}
+% I have found that the \prog{mathptmx} package (Times fonts in text and
+% math) benefits from changing these via the following commands
+% \begin{verbatim}
+% \MDoprekern=-1mu
+% \MDodotkern=-2mu
+% \MDopostkern=0mu \end{verbatim}
+% \cs{MDoprekern}, \cs{MDodotkern}, and \cs{MDopostkern} were made
+% user-accessible commands in version 0.9.
+%
+% \DescribeMacro{\MDoddots}
+% \DescribeMacro{\MDovdots}
+% \DescribeMacro{\MDoiddots}
+% \DescribeMacro{\MDodddot}
+% \DescribeMacro{\MDoddddot}
+% In \LaTeX{}, all these commands have been made robust as of version 0.6.
+% On the chance that some later loaded package changes things, the \MD{}
+% versions can be obtained with \cs{MDoddots}, \cs{MDovdots},
+% \cs{MDoiddots}, \cs{MDodddot} and \cs{MDoddddot} (as of version 0.9).
+%
+% \section{The implementation}
+%
+% The following are commands for plain \TeX{} that prevent double loading,
+% announce the package name, and change/restore the category of \mtt{@}.
+% \begin{macrocode}
+%<*tex>
+\expandafter
+\ifx\csname MathDots\mathdotsfileversion\endcsname\relax
+\else
+ \immediate\write16{Mathdots already loaded.}\expandafter\endinput
+\fi
+\immediate\write16{Package mathdots, \mathdotsfiledate\space version
+ \mathdotsfileversion.}%
+\expandafter\edef\csname MathDots\mathdotsfileversion\endcsname{%
+ \catcode`\noexpand\@=\the\catcode`@}%
+\catcode`\@=11
+\def\@nameuse#1{\csname#1\endcsname}%
+%</tex>
+% \end{macrocode}
+%
+% Now various shorthands. For example `\cs{MDo@us}\cs{MDo@t}' becomes
+% `\cs{textstyle}' and `\cs{MDo@uf}\cs{MDo@ss}' produces
+% `\cs{scriptscriptfont0}'.
+% \begin{macrocode}
+\def\MDo@us#1{\@nameuse{#1style}}%
+\def\MDo@uf#1{\@nameuse{#1font}0}%
+\def\MDo@t{text}\def\MDo@s{script}\def\MDo@ss{scriptscript}%
+\newdimen\MDo@unit \MDo@unit\p@
+% \end{macrocode}
+%
+% The following are the main utility macros to implement changes of style.
+% Since most of our symbols are built with boxes, they have to exit math
+% mode and need \cs{mathchoice} so we know the current style (i.e., size)
+% when we re-enter math mode.
+%
+% We detect differences in sizes (for example, after \cs{large}) by
+% examining the appropriate \cs{fontdimen} of family 0. Instead of the
+% hard coded \mtt{1pt}, we use \mtt{0.1em} from this family.
+%
+% We pass along the current style via \cs{everymath}.
+%
+% In \cs{MDo@palette}, \arg1 is a command which we feed the current
+% style name. For example, \cs{MDo@palette}\cs{MDo@ddots} will be our
+% definition of \cs{ddots}. Then \cs{MDo@ddots} will see the current style
+% as its first argument.
+% \begin{macrocode}
+\def\MDo@changestyle#1{\relax\MDo@unit0.1\fontdimen6\MDo@uf{#1}%
+ \everymath\expandafter{\the\everymath\MDo@us{#1}}}%
+\def\MDo@dot{$\m@th\ldotp$}%
+\def\MDo@palette#1{\mathchoice{#1\MDo@t}{#1\MDo@t}{#1\MDo@s}{#1\MDo@ss}}%
+% \end{macrocode}
+%
+% In the following commands, \arg1 is the current style (supplied via
+% \cs{MDo@palette}). Except for the change in the unit used and the dot
+% used, the first two definitions are essentially the same as plain's
+% \cs{ddots} and \cs{vdots}, and the third is the same as the first with
+% the boxes reversed.
+% \begin{macrocode}
+\def\MDo@ddots#1{{\MDo@changestyle{#1}%
+ \mkern1mu\raise7\MDo@unit\vbox{\kern7\MDo@unit\hbox{\MDo@dot}}%
+ \mkern2mu\raise4\MDo@unit\hbox{\MDo@dot}%
+ \mkern2mu\raise \MDo@unit\hbox{\MDo@dot}\mkern1mu}}%
+\def\MDo@vdots#1{\vbox{\MDo@changestyle{#1}%
+ \baselineskip4\MDo@unit\lineskiplimit\z@
+ \kern6\MDo@unit\hbox{\MDo@dot}\hbox{\MDo@dot}\hbox{\MDo@dot}}}%
+\def\MDo@iddots#1{{\MDo@changestyle{#1}%
+ \mkern1mu\raise \MDo@unit\hbox{\MDo@dot}%
+ \mkern2mu\raise4\MDo@unit\hbox{\MDo@dot}%
+ \mkern2mu\raise7\MDo@unit\vbox{\kern7\MDo@unit\hbox{\MDo@dot}}}}%
+% \end{macrocode}
+%
+% \DescribeMacro{\fixedddots}
+% \DescribeMacro{\fixedvdots}
+% We include current (as of 2014/06/11) \LaTeX{}/plain\TeX{} definitions
+% so a user can choose them. \LaTeX{} and plain\TeX{} don't have the other
+% diagonal, so we provide a \DescribeMacro{fixediddots}\cs{fixediddots}
+% which is just \cs{fixedddots} with the boxes reversed.
+%
+% \DescribeMacro{\originalvdots}
+% \DescribeMacro{\originalddots}
+% We save the versions at load time so user can use them in case he
+% loads \MD{} for its other features. Chances are the original
+% \DescribeMacro{\originaliddots}\cs{iddots} is undefined.
+% \begin{macrocode}
+%<sty>\DeclareRobustCommand\fixedvdots{%
+%<tex>\def\fixedvdots{%
+ \vbox{\baselineskip4\p@ \lineskiplimit\z@
+ \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}%
+%<sty>\DeclareRobustCommand\fixedddots{%
+%<tex>\def\fixedddots{%
+ \mathinner{\mkern1mu
+ \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
+ \raise4\p@\hbox{.}\mkern2mu
+ \raise\p@\hbox{.}\mkern1mu}}%
+%<sty>\DeclareRobustCommand\fixediddots{%
+%<tex>\def\fixediddots{%
+ \mathinner{\mkern1mu
+ \raise\p@\hbox{.}\mkern2mu
+ \raise4\p@\hbox{.}\mkern2mu
+ \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern1mu}}%
+\let\originalddots=\ddots
+\let\originalvdots=\vdots
+\let\originaliddots=\iddots
+% \end{macrocode}
+%
+% \DescribeMacro{\ddots}
+% \DescribeMacro{\vdots}
+% \DescribeMacro{\iddots}
+% Here are the actual (re)definitions of these three commands. The
+% plain\TeX{} version emits messages similar to that produced by
+% \LaTeX{}'s \cs{DeclareRobustCommand}.
+%
+% Since \cs{ddots} et al.\ are defined in \LaTeX{} with
+% \cs{DeclareRobustCommand}, saving the original definition with
+% \verb$\let\originalddots\ddots$ will not work unless the internal
+% command ``\verb*$\ddots $'' is unchanged. Thus we can't use
+% \verb$\DeclareRobustCommand\ddots$ directly because it changes that
+% internal. Instead we define \cs{MDoddots} and then do
+% \verb$\let\ddots\MDoddots$
+% \begin{macrocode}
+%<sty>\DeclareRobustCommand\MDoddots{%
+%<tex>\def\MDoddots{%
+ \mathinner{\MDo@palette\MDo@ddots}}%
+%<sty>\DeclareRobustCommand\MDoiddots{%
+%<tex>\def\MDoiddots{%
+ \mathinner{\MDo@palette\MDo@iddots}}%
+%<sty>\DeclareRobustCommand\MDovdots{%
+%<tex>\def\MDovdots{%
+ \mathinner{\MDo@palette\MDo@vdots}}%
+%<tex>\wlog{Mathdots Info: Redefining \string\ddots.}%
+%<tex>\wlog{Mathdots Info: Redefining \string\vdots.}%
+\let\ddots \MDoddots
+\let\iddots\MDoiddots
+\let\vdots \MDovdots
+% \end{macrocode}
+%
+% Now we try to get AMS \cs{dddot} and \cs{ddddot} accents to behave
+% nicely.
+%
+% \DescribeMacro{\dddot}
+% \DescribeMacro{\ddddot}
+% We add a \verb"\kern\z@" to prevent \TeX{} from vertically centering
+% \arg1. I don't know if the \cs{text} command is necessary, but it
+% doesn't seem to hurt. I included it in the original version because that
+% one used text dots and needed the text to change size. Now I use a math
+% symbol (the dot accent) and \cs{mathpalette} to implement the change.
+% Still, I don't really understand how \cs{ex@} works in the AMS packages,
+% so I leave it in.
+% \DescribeMacro{MDoprekern}
+% \DescribeMacro{MDodotkern}
+% \DescribeMacro{MDopostkern}
+% For possible fine tuning, I have used two macros that
+% represent the math spacing placed before and after the sequence of
+% dots (\cs{MDoprekern} and \cs{MDopostkern}). Also, the actual dot is in
+% the definition of \cs{MDo@D} where another spacing command follows the
+% dot (\cs{MDodotkern}). In fact, by redefining \cs{MDo@D} and changing
+% the spacing, one can define other multiple ``dot'' accent commands.
+%
+% \DescribeMacro{\originaldddot}
+% \DescribeMacro{\originalddddot}
+% We also save the original \prog{amsmath} versions.
+% \begin{macrocode}
+\newbox\MDo@dotsbox
+\newmuskip\MDoprekern
+\newmuskip\MDopostkern
+\newmuskip\MDodotkern
+\MDoprekern 0mu
+\MDopostkern -1mu
+\MDodotkern -1.3 mu
+\def\MDo@dotsaccent#1{\mathpalette{\MDo@@dotsaccent{#1}}}%
+\let\originaldddot \dddot
+\let\originalddddot\ddddot
+%<*sty>
+\def\MDo@@dotsaccent#1#2#3{%
+ {\setbox\MDo@dotsbox\hbox{$#2\mkern\MDoprekern#1\mkern\MDopostkern$}%
+ \mathop{#3\kern\z@}\limits^{%
+ \text{\vbox to-1.4\ex@{\kern-1.8\ex@\copy\MDo@dotsbox\vss}}}}%
+}%
+\@ifpackageloaded{amsmath}{%
+ \def\MDo@D{\mathchar"5F\mkern\MDodotkern}%
+ \DeclareRobustCommand\MDodddot {%
+ \MDo@dotsaccent{\MDo@D\MDo@D\MDo@D}}%
+ \DeclareRobustCommand\MDoddddot{%
+ \MDo@dotsaccent{\MDo@D\MDo@D\MDo@D\MDo@D}}%
+ \let\dddot \MDodddot
+ \let\ddddot\MDoddddot
+}{}%
+%</sty>
+% \end{macrocode}
+%
+% For plain tex + amstex: \cs{ex@} is set in \file{amstex.tex} to
+% \texttt{.2326ex}, so its value depends on the value of \texttt{ex} when
+% \prog{amstex} is loaded. Unlike \prog{amsmath}, it doesn't seem to be
+% recalculated with size changes. Thus, in plain TeX we add a reset.
+% \begin{macrocode}
+%<*tex>
+\def\MDo@@dotsaccent#1#2#3{%
+{%
+ \setbox\MDo@dotsbox\hbox{$#2\mkern\MDoprekern#1\mkern\MDopostkern$}%
+ \mathop{#3\kern\z@}\limits^{\text{\ex@.2326ex
+ \vbox to-1.4\ex@{\kern-1.8\ex@\copy\MDo@dotsbox\vss}}}%
+}}%
+\ifx\amstexloaded@\relax % true if amstex has been loaded
+ % A backup test in case \amstexloaded@ became \relax by accident:
+ \ifx\ddddot\UndEfInEd
+ \else
+ \def\MDo@D{\mathchar"5F\mkern\MDodotkern}%
+ \wlog{Mathdots Info: Redefining \string\dddot.}%
+ \wlog{Mathdots Info: Redefining \string\ddddot.}%
+ \def\MDodddot {\MDo@dotsaccent{\MDo@D\MDo@D\MDo@D}}%
+ \def\MDoddddot{\MDo@dotsaccent{\MDo@D\MDo@D\MDo@D\MDo@D}}%
+ \let\dddot \MDodddot
+ \let\ddddot\MDoddddot
+ \fi
+\fi
+\csname MathDots\mathdotsfileversion\endcsname
+%</tex>
+%</sty|tex>
+% \end{macrocode}
+%\Finale
diff --git a/macros/generic/mathdots/mathdots.ins b/macros/generic/mathdots/mathdots.ins
new file mode 100644
index 0000000000..521c93bca7
--- /dev/null
+++ b/macros/generic/mathdots/mathdots.ins
@@ -0,0 +1,35 @@
+\input docstrip
+\keepsilent
+\preamble
+
+-------------------------------------------------------------------
+
+Copyright 2001--2014, Daniel H. Luecking
+
+Mathdots may be distributed and/or modified under the conditions of the
+LaTeX Project Public License, either version 1.3 of this license or (at
+your option) any later version. The latest version of this license is in
+ <http://www.latex-project.org/lppl.txt>
+and version 1.3 or later is part of all distributions of LaTeX version
+2003/12/01 or later.
+
+Mathdots has maintenance status "author-maintained". The Current
+Maintainer is Daniel H. Luecking. The Base Interpreters associated with
+mathdots are plain TeX and LaTeX
+
+\endpreamble
+\askforoverwritefalse
+
+\generate{\file{mathdots.tex}{\from{mathdots.dtx}{tex}}
+ \file{mathdots.sty}{\from{mathdots.dtx}{sty}}}
+
+\immediate\write16{%
+^^J*******************************************************************
+^^J
+^^J To finish the installation, copy the files mathdots.tex and
+^^J mathdots.sty to a location where TeX and LaTeX will find them.
+^^J For example, the directory TEXMF/tex/generic/mathdots/ .
+^^J
+^^J*******************************************************************}
+
+\endbatchfile
diff --git a/macros/generic/mathdots/mathdots.pdf b/macros/generic/mathdots/mathdots.pdf
new file mode 100644
index 0000000000..fa68a0143b
--- /dev/null
+++ b/macros/generic/mathdots/mathdots.pdf
Binary files differ
diff --git a/macros/generic/mathdots/mdotest.pdf b/macros/generic/mathdots/mdotest.pdf
new file mode 100644
index 0000000000..fdee95981e
--- /dev/null
+++ b/macros/generic/mathdots/mdotest.pdf
Binary files differ
diff --git a/macros/generic/mathdots/mdotest.tex b/macros/generic/mathdots/mdotest.tex
new file mode 100644
index 0000000000..0e61f711dc
--- /dev/null
+++ b/macros/generic/mathdots/mdotest.tex
@@ -0,0 +1,61 @@
+% All possible sizes of the various mathdots tested
+\documentclass{article}
+%\usepackage{mathptmx}
+\usepackage{amsmath}
+\usepackage{mathdots}
+%
+% \dddot and \ddddot are wider in mathptmx package.
+% Since there is no way to get a measure of the actual separation
+% between dots in the 2-dot accent, I have made the spacing
+% commands available to the user. The following seem to work well
+% for mathptmx:
+%\MDodotkern=-2mu
+%\MDoprekern=-1mu
+%\MDopostkern=0mu
+\newcommand\testdots{%
+$\ddots^{\ddots^{\ddots}}$ $\iddots^{\iddots^{\iddots}}$
+$\vdots^{\vdots^{\vdots}}$
+\par
+$\dot{X}
+\ddot{X}
+\dddot{X}
+\ddddot{X}
+X^{\dot{X}}
+X^{\ddot{X}}
+X^{\dddot{X}}
+X^{\ddddot{X}}
+X^{X^{\dot{X}}}
+X^{X^{\ddot{X}}}
+X^{X^{\dddot{X}}}
+X^{X^{\ddddot{X}}}$
+\par\smallskip\hrule\smallskip}
+
+\setlength\textwidth{6.664in}
+\setlength\oddsidemargin{-.082in}
+\setlength\parindent{0pt}
+
+\setlength{\textheight}{8.9in}
+\setlength{\topmargin}{0pt}
+\addtolength\headheight{3.06pt}
+\addtolength\topmargin{-\headheight}
+\addtolength\topmargin{-\headsep}
+
+\begin{document}
+\pagestyle{headings}
+\tableofcontents
+\clearpage
+
+\section{Testing in headers and TOC:
+ $\ddots$, $\vdots$, $\iddots$, $\dddot{X}$ and $\ddddot{X}$}
+
+\tiny tiny \testdots
+\scriptsize scriptsize \testdots
+\footnotesize footnotesize \testdots
+\small small \testdots
+\normalsize normalsize \testdots
+\large large \testdots
+\Large Large \testdots
+\huge huge \testdots
+\Huge Huge \testdots
+
+\end{document}
diff --git a/macros/generic/mathdots/plmdotest.tex b/macros/generic/mathdots/plmdotest.tex
new file mode 100644
index 0000000000..2396647bbd
--- /dev/null
+++ b/macros/generic/mathdots/plmdotest.tex
@@ -0,0 +1,88 @@
+\input amstex
+\input mathdots
+
+\eightpoint
+eightpoint
+$\ddots^{\ddots^{\ddots}}$ $\iddots^{\iddots^{\iddots}}$
+$\vdots^{\vdots^{\vdots}}$
+
+$\dot{X}$
+$\ddot{X}$
+$\dddot{X}$
+$\ddddot{X}$
+$X^{\dot{X}}$
+$X^{\ddot{X}}$
+$X^{\dddot{X}}$
+$X^{\ddddot{X}}$
+$X^{X^{\dot{X}}}$
+$X^{X^{\ddot{X}}}$
+$X^{X^{\dddot{X}}}$
+$X^{X^{\ddddot{X}}}$
+
+\smallskip
+\hrule
+\smallskip
+\ninepoint
+ninepoint
+$\ddots^{\ddots^{\ddots}}$ $\iddots^{\iddots^{\iddots}}$
+$\vdots^{\vdots^{\vdots}}$
+
+$\dot{X}$
+$\ddot{X}$
+$\dddot{X}$
+$\ddddot{X}$
+$X^{\dot{X}}$
+$X^{\ddot{X}}$
+$X^{\dddot{X}}$
+$X^{\ddddot{X}}$
+$X^{X^{\dot{X}}}$
+$X^{X^{\ddot{X}}}$
+$X^{X^{\dddot{X}}}$
+$X^{X^{\ddddot{X}}}$
+
+\smallskip
+\hrule
+\smallskip
+\tenpoint
+tenpoint
+$\ddots^{\ddots^{\ddots}}$ $\iddots^{\iddots^{\iddots}}$
+$\vdots^{\vdots^{\vdots}}$
+
+$\dot{X}$
+$\ddot{X}$
+$\dddot{X}$
+$\ddddot{X}$
+$X^{\dot{X}}$
+$X^{\ddot{X}}$
+$X^{\dddot{X}}$
+$X^{\ddddot{X}}$
+$X^{X^{\dot{X}}}$
+$X^{X^{\ddot{X}}}$
+$X^{X^{\dddot{X}}}$
+$X^{X^{\ddddot{X}}}$
+
+\smallskip
+\hrule
+\smallskip
+\twelvepoint
+twelvepoint
+$\ddots^{\ddots^{\ddots}}$ $\iddots^{\iddots^{\iddots}}$
+$\vdots^{\vdots^{\vdots}}$
+
+$\dot{X}$
+$\ddot{X}$
+$\dddot{X}$
+$\ddddot{X}$
+$X^{\dot{X}}$
+$X^{\ddot{X}}$
+$X^{\dddot{X}}$
+$X^{\ddddot{X}}$
+$X^{X^{\dot{X}}}$
+$X^{X^{\ddot{X}}}$
+$X^{X^{\dddot{X}}}$
+$X^{X^{\ddddot{X}}}$
+
+\smallskip
+\hrule
+\smallskip
+\enddocument\end
diff --git a/macros/generic/midnight/README b/macros/generic/midnight/README
new file mode 100644
index 0000000000..7f58fedeb0
--- /dev/null
+++ b/macros/generic/midnight/README
@@ -0,0 +1,23 @@
+Midnight Macros --- Thu Oct 24 14:22:09 PDT 1991
+
+quire [1--4]
+Macros for making booklets, printing double pages, and printing outlines
+and crop marks.
+
+gloss [5--7]
+Macros for vertically aligning words in consecutive sentences.
+
+loop [8]
+A simple looping construct (meta-macros).
+
+dolines [9--11]
+Meta-macros to separate arguments by newlines and by empty lines.
+
+labels [12--13]
+Macros to print address labels and bulk letters.
+
+styledef [14--16]
+Macros to selectively input parts of a file.
+
+border [17--20]
+Macros to typeset borders.
diff --git a/macros/generic/midnight/border.doc b/macros/generic/midnight/border.doc
new file mode 100644
index 0000000000..f1a2ea4126
--- /dev/null
+++ b/macros/generic/midnight/border.doc
@@ -0,0 +1,372 @@
+% border.doc --- version 1.0 (21 October 1991)
+% This is the documentation for border.tex.
+% To read this file, process it with (plain) TeX: tex border.doc
+% (To do that, you need both border.tex and manmac.tex. The latter has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1991 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- border.doc:
+
+\input Midnight/border % change this to refer to border.tex on your system
+
+\def\boxelm#1%
+ {\hbox{\vrule width .2mm
+ \vbox to 10mm{\hrule height.2mm
+ \hbox to9.8mm{}\vfil
+ \hrule height.2mm}%
+ \vrule width .2mm
+ }}
+
+\def\bulletelm#1%
+ {\ifcase#1%
+ \roundcorners0%
+ \or\hbox to1cm{\hss$\bullet$\hss}%
+ \or\roundcorners2%
+ \fi
+ }
+
+\def\cloudelm#1%
+ {\hbox{\roundcorners0\roundcorners2}}
+
+\def\numberelm#1%
+ {\vbox to12pt{\vss
+ \hbox to12pt{\hss\number#1\hss}
+ \vss
+ }}
+
+\pageno=17 % follows styledef.doc
+
+\manpage border.tex
+Macros to typeset borders.
+Version: 1.0 (21 October 1991) (doc: 23 Oct 1991)
+
+\setborder[\hsize,1em,\smallskipamount]\border{\noindent
+The macros described in this manual section are used to typeset borders,
+such as the border around this paragraph. These borders are built from
+different ``characters'': in this example from quarter circles for the corners
+and straight line segments for the edges, but, given an appropriate font,
+other borders can also be typeset. (Below we explain how a border
+font must be designed in order to be useful with these macros.) Before
+any of the macros described below can be used, you must |\input|
+border.tex.*
+}
+
+There\footnote{}{* Border.tex also works with \LaTeX.}
+% if the \footnote is done within \setborder, it gets lost
+are several ways of typesetting borders, depending on the characters
+that form the border. Macros such as |\border|
+create a vbox of specified height and width (the depth is always zero),
+containing only the border. Typesetting text within a border is done by
+creating a box with the text and superimposing it on the box with the border,
+as explained later. The types of border we will now describe differ in the
+way they compose characters to build a border; the choice of the characters
+is determined by another macro (|\borderelm|). The border around the
+previous paragraph was typeset with |\border|. It is built from eight
+different characters: `\roundcorners0', `\roundcorners1', and
+`\roundcorners2' for the top; `\roundcorners3' and `\roundcorners4' for the
+center; and `\roundcorners5', `\roundcorners6', and `\roundcorners7' for the
+bottom. |\border| takes two arguments, the height and the width of the border.
+\begintt
+\border{2cm}{10cm}
+\endtt
+creates a border like this:
+$$\border{2cm}{10cm}$$
+It is a vbox with height $2$ cm, depth $0$, and width $10$ cm.
+
+In order to create a border of the exact specified dimensions, some characters
+may need to overlap. Suppose we built a border from the following character,
+a $1$ cm by $1$ cm box:
+$$\boxelm0$$
+The following is the
+border created by |\border{4.8cm}{10.5cm}|:
+$$
+\let\borderelm=\boxelm
+\border{4.8cm}{10.5cm}
+$$
+As you see, some of the boxes overlap, in order to get the specified
+dimensions. This overlap is always between the edge elements, there is never
+overlap with the corner elements (unless the size is too small).
+In fact, the overlap is always with
+the edge elements that are closest to the corners. (|\border| always sets
+at least one edge element for each edge.)
+
+|\border| works fine if the edge elements can overlap, which basically
+restricts them to be ``rule like.'' There is an alternative to |\border|,
+called |\xborder|. It is used in the same way as |\border|, but the exact
+size is obtained by putting extra space
+between the elements, rather than overlapping them. Suppose we build a
+border with the
+same corner elements as before, but with the edge built from ``bullets''
+rather than straight line segments. The top element consists of a bullet
+centered in a $1$ cm wide box. Here are the top lines obtained from
+|\border{...}{4.5cm}| and |\xborder{...}{4.5cm}|, respectively.
+\let\borderelm=\bulletelm
+$$
+\line{\hss\hborder{4.5cm}012\qquad\qquad\hxborder{4.5cm}012\hss}
+$$
+In case of |\xborder|, the proper vertical size is also obtained by spacing.
+
+Some border characters, however, need to abut in order to form
+a border. For instance, suppose we want to make a ``cloud like'' border,
+where the top corners and top edge elements are all `\cloudelm0'
+In this case, |\border{...}{1.6cm}| and |\xborder{...}{1.8cm}| give
+\let\borderelm=\cloudelm
+$$\line{\hss
+\hborder{1.6cm}012\qquad and\qquad\hxborder{1.8cm}012%
+\hss}$$
+Clearly, neither solution works very well.
+For this case there are two other macros, |\minusborder| and |\plusborder|.
+They take the same arguments as |\border|, but produce a box of rounded
+dimensions rather than of the exact size. The border is built by abutting
+the elements. |\minusborder| rounds the size down, whereas |\plusborder| rounds
+the size up. |\minusborder{...}{1.8cm}| and |\plusborder{...}{1.8cm}| give
+$$\line{\hss
+\hminusborder{1.8cm}012\qquad and\qquad\hplusborder{1.8cm}012%
+\hss}$$
+
+\setbox0=\hbox{\it width}\setbox2=\hbox{\it hspace}\setbox4=\hbox{\it vspace}
+
+The above macros all generate empty borders. Typically, one wants to put some
+text in the border. There is one macro to make that easy, |\setborder|. It
+is called as follows:
+\begintt
+\setborder[|copy0, |copy2, |copy4]\border{ ... }
+\endtt
+where the |...| stands for the text that must be boxed. In this case, |\border|
+will be used to create the border, but you can also use |\xborder| etc.
+The border will be \copy0\ wide (or a rounded value); the height of the
+border is determined by the amount of text. The text itself is first
+broken in paragraphs and lines, as usual in \TeX. The width of the lines
+is $\copy0 - 2\cdot\copy2$. The text is than put in the border with
+\copy4\ space at the top and at the bottom, and \copy2\ space at the left and
+at the right hand sides.
+For instance, the first paragraph of this manual section was set with
+\begintt
+\setborder[\hsize,1em,\smallskipamount]\border
+{\noindent The macros described ...
+ ....
+}
+\endtt
+The \copy0\ and \copy2\ must be dimensions; \copy4\ can be a dimension or
+a glue amount (without |\vskip|).
+
+\danger With |\setborder|, the text between braces, |{...}|, is read
+in the same way as when you write |\vbox {...}|. (You can use |\bgroup| and
+|\egroup| instead of the braces.) The text is {\it not\/} an argument of
+|\setborder|, which is important if it contains catcode changes. You can
+change the paragraph shape, or have more than one paragraph of text.
+\let\borderelm=\roundcorners
+$$\setborder[10cm, 1cm, 4mm]\border{
+\parindent=0pt \parfillskip=0pt
+\leftskip=0pt plus 1cm minus 5mm
+\rightskip=0pt plus 1cm minus 5mm
+For instance, the text in this paragraph is set with some extra |\leftskip|
+and |\rightskip| glue, which takes care of centering every line. This
+was done as follows:
+}
+$$
+\beginlines
+|\setborder[10cm, 1cm, 4mm]\border{|
+|\parindent=0pt \parfillskip=0pt|
+|\leftskip=0pt plus 1cm minus 5mm \rightskip=0pt plus 1cm minus 5mm|
+\goodbreak
+|For instance, the text in this paragraph ...|
+|...|
+\nobreak
+|}|
+\endlines
+
+\danger If |\setborder| does not suit your purpose, you can write your
+own equivalent. Generally, to put text in a border, you first generate
+a box containing the border of the appropriate size. Then you make a box
+containing this border box plus the text superimposed on it. Superimposing
+is done by either ``backspacing'' using negative kerns, or by making a
+zero width or height border box, in a similar way as |\llap| makes a zero
+width box. Usually, you have to use several nested levels of boxing to
+get the desired result.
+
+We have described the different ways of composing border characters, but not
+yet how to specify which characters are used. Whenever a border is typeset,
+it is assumed that a macro |\borderelm#1| exists. This macro is called with
+as argument a number in the range $0,\dots,7$; it should return the appropriate
+border element, where the elements are numbered as follows:
+\let\borderelm=\numberelm
+$$\minusborder{2cm}{5cm}$$
+|\borderelm| is called within an hbox; it should typeset a character, a
+box, or an vrule. (Since the macro is expanded within an hbox, you should be
+careful not to put extra spaces in it; doing that may cause strange
+gaps in the border.)
+
+A convenient way of writing |\borderelm| is with
+an |\ifcase| construction. For instance, assume that in font |\qc| the
+characters |a|, |b|, |c|, etc. correspond to `\roundcorners0',
+`\roundcorners1', `\roundcorners2', etc. Then you could write |\borderelm|
+as follows:
+\beginlines
+|\def\borderelm#1%|
+\nobreak
+| {{\qc \ifcase#1|
+| a\or b\or c\or d\or e\or f\or g\or h% no extra space|
+| \fi|
+| }}|
+\endlines
+In fact, a macro like this is already defined in border.tex. It is called
+|\roundcorners|, so that you can say |\let\borderelm=\roundcorners| to
+get the borders with rounded corners. The corner elements come from
+font |\manfnt|, which corresponds to the external font `manfnt.' (The
+corner elements are described on page 389 of The \TeX book.) |\roundcorners|
+scales, which means that you can say, for instance,
+\begintt
+\font\manfnt=manfnt scaled 2074
+\endtt
+to get larger corners --- provided you have the appropriately scaled
+font file (2074 corresponds to |\magstep4|).
+If you do not want to load the manfnt font (e.g., because your installation
+does not have it), you should define |\let\manfnt=\relax| before you
+|\input| border.tex.
+
+Hopefully a variety of border fonts will come available in the future. But even
+with just the quarter circles you can already vary your borders quite a bit.
+We already saw a border with half circles before, it is an easy exercise
+to define a complete border that way. The following definition defines
+a fancier corner:
+\beginlines
+|\setbox0=\hbox{\roundcorners2}|
+|\vbox{\offinterlineskip|
+| \hbox{\copy0\roundcorners0\copy0}|
+| \hbox to 3\wd0{\hfil\roundcorners7}|
+| \hbox to 3\wd0{\hfil\copy0}|
+\nobreak
+| }%|
+\endlines
+It defines the ``number 2'' (or number 5) corner:
+\setbox0=\hbox{\roundcorners2}
+\vbox{\offinterlineskip
+ \hbox{\copy0\roundcorners0\copy0}
+ \hbox to 3\wd0{\hfil\roundcorners7}
+ \hbox to 3\wd0{\hfil\copy0}
+ } ;
+the other corners can be defined similarly.
+
+\danger If you want, you can omit the corners from |\borderelm| (i.e., write
+|\borderelm| to return nothing for arguments $0$, $2$, $5$, and $7$).
+But if you do not want any edge elements, you should still put something
+with width (or height) for the top/bottom (or left/right) edges; for instance,
+|\hbox to10pt{}| is a valid top element. Border.tex uses several box and
+dimen registers. Rather than reserving private registers, which would
+make them unavailable for other purposes, border.tex uses |\box0|, |\box2|,
+|\box4|, |\dimen0|, |\dimen2|, and |\count2|. Normally, this does not cause
+problems, since they are always restored to their old value. The only time
+you should take this into account, is in |\borderelm|: this macro should
+not depend on any global values of these registers, nor should it make
+any lasting changes to them.
+
+\danger If you are a font designer, and want to define a font that can be
+used with border.tex, you should understand something of how |\border| etc.
+build the borders. A border is built from three horizontal strips. The top
+and bottom strips consist of a corner element, a number of edge elements,
+and another corner element. These elements are aligned by their baselines,
+and the width of the border(-strip) is determined by the width of the
+bounding boxes. Therefore, the ``ink'' in the border elements
+should be close to the outside edges of the bounding boxes; otherwise there
+will not be a proper relation between the actual size of the border and
+the size of the visible border. The center strip is built from an edge,
+white space (glue), and another edge. The amount of white space is chosen
+so that the width of the center strip is the width of the top strip.
+The whole border is built by vertically aligning the top strip, a
+number of center strips, and the bottom strip. This is done by aligning
+the left hand edges of the horizontal strips. The vertical size of the
+border is again determined by the vertical size of the bounding boxes.
+You may notice that the quarter circle elements described on p. 389 of The
+\TeX book (used in |\roundcorners|), do not fit properly in their bounding
+boxes for the purpose of setting borders. In fact, |\roundcorners| must go
+to considerable effort to reposition the bounding boxes. If you can, avoid
+such problems with any new fonts you design.
+
+There are two more variants of borders. First, to set only one horizontal
+strip of a border generated by |\border|, you can use |\hborder|. It takes
+four argument: the width, and the numbers of the left element, middle
+element, and right element. E.g., |\border{4cm}012| generates the top
+of the border, whereas |\border{4cm}567| generates the bottom. There
+are also |\hxborder|, |\hminusborder|, and |\hplusborder|. However, there
+are no vertical equivalents.
+
+Finally, there are macros |\minusgray| and |\plusgray|. They behave
+like their border counterparts, except that the center of the border
+is filled with an extra character (|\borderelm8|) rather than with white space.
+For use with these macros, |\borderelm| must return characters as follows:
+\let\borderelm=\numberelm
+$$\minusgray{2cm}{5cm}$$
+This is useful if you have characters that contain a ``gray'' pattern
+(a ``stipple'' or ``Ben Day'' pattern). Although a font with a gray pattern
+should not be hard to define, to the author's knowledge there is currently
+no such font in the public domain. These gray macros can also be used with
+|\setborder|.
+
+\bye
+
diff --git a/macros/generic/midnight/border.tex b/macros/generic/midnight/border.tex
new file mode 100644
index 0000000000..87403f021a
--- /dev/null
+++ b/macros/generic/midnight/border.tex
@@ -0,0 +1,319 @@
+\ifx\BORDER\relax\endinput\else\let\BORDER=\relax\fi % \input only once
+%
+% border.tex: Macros to typeset borders.
+% version: 1.0 release: 21 October 1991
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file border.doc
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% USA
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 21 Oct 1991: The original
+%
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+\edef\borderelm{\the\catcode`\_} % minor trick to remember the catcode
+\catcode`\_=11% letter, to make private macros
+
+% Note: we use \box0, \box2, \box4, \dimen0, \dimen2, and \count2, rather than
+% allocating new boxes, dimensions, and counts. That is usually ok because all
+% assignments are done within \hbox{...} or \vbox{...}, which provides
+% grouping.
+
+%%%%%%% exactly fitting border with overlaps
+% \border makes a border of the specified dimensions, by overlapping some
+% of the elements when necessary.
+% \hborder takes four arguments, the width, and the indices of the left
+% element, the middle element, and the right element. It makes an horizontal
+% border of the form \hbox to wd{ l m+ r }, where there is at least one m.
+% If wd is large enough to set at least {l m r}, all overlap is between
+% elements of type m. In the unusual case where wd is too small, the overlap
+% is necessarily with the corner elements.
+
+\def\hborder#1#2#3#4% wd, l, m, r
+ {\hbox to#1
+ {\setbox0=\hbox{\borderelm#3}%
+ \borderelm#2%
+ \hskip0pt minus1fil %
+ \copy0\kern-.5\wd0 %
+ \cleaders\copy0\hskip0pt plus1fil %
+ \kern-.5\wd0\copy0 %
+ \hskip0pt minus1fil %
+ \borderelm#4%
+ }%
+ }
+
+% \border does the vertical equivalent of \hborder: the top and bottom
+% elements are hboxes generated with \hborder, and the middle element is
+% an \hbox{ l \hss r }. This middle element is again used at least once,
+% and if possible all overlap will be among middle elements.
+% The \kern0sp at the end is to get depth 0, rather than the depth of
+% the last hbox. (\boxmaxdepth is set to the largest possible value to make
+% sure that the depth is indeed 0, not negative.)
+
+\def\border#1#2% ht, wd
+ {\vbox to#1
+ {\offinterlineskip\boxmaxdepth=\maxdimen
+ \dimen2=#2
+ \setbox0=\hbox to\dimen2{\borderelm3\hss\borderelm4}
+ \dimen0=\ht0 \advance\dimen0 by\dp0
+ \hborder{\dimen2}012
+ \vskip0pt minus1fil
+ \copy0\kern-.5\dimen0
+ \cleaders\copy0\vskip0pt plus1fil
+ \kern-.5\dimen0\copy0
+ \vskip0pt minus1fil
+ \hborder{\dimen2}567
+ \kern0sp
+ }%
+ }
+
+%%%%%%% exactly fitting border with spaces
+% \xborder also makes a border of the specified dimensions, but rather than
+% overlapping elements, it leaves space between the elements.
+% \xhborder makes a horizontal border. Unlike \hborder, there are zero (not
+% one) or more middle elements. The extra space is equally distributed
+% between all the elements.
+
+\def\hxborder#1#2#3#4% wd, l, m, r
+ {\hbox to#1
+ {\setbox0=\hbox{\borderelm#3}%
+ \borderelm#2%
+ \xleaders\copy0\hskip0pt plus1fil minus1fil %
+ \borderelm#4%
+ }%
+ }
+
+% \xborder is to \hxborder as \border is to \hborder.
+
+\def\xborder#1#2% ht, wd
+ {\vbox to#1
+ {\offinterlineskip\boxmaxdepth=\maxdimen
+ \dimen2=#2
+ \setbox0=\hbox to\dimen2{\borderelm3\hss\borderelm4}
+ \hxborder{\diemn2}012
+ \xleaders\copy0\vskip0pt plus1fil minus1fil
+ \hxborder{\dimen2}567
+ \kern0sp
+ }%
+ }
+
+%%%%%%% rounded border with abutting elements
+% \plusborder and \minusborder make borders with abutted elements (no
+% overlaps, no spaces). To make this possible, the border dimensions are
+% rounded so that an integral number of elements fits. \plusborder rounds
+% up, \minusborder rounds down. \plusgray and \minusgray are similiar, except
+% that \borderelm8 is used as center element (normally the center is white).
+% \plus_border and \minus_border are used for both, where the 3rd argument
+% indicates whether there is a center element.
+
+% The computation consists of determining the space D that has to be
+% filled with middle elements. If the width of the middle element is d,
+% there fit (D div d) middle element in a `minus border.'
+% To avoid minor inaccuracies in the arithmetic, what we actually do is
+% (D+100sp) div d. 100sp is so small as to be invisible.
+
+\def\hminusborder#1#2#3#4% wd, l, m, r
+ {\hbox
+ {\dimen0=#1\count2=\dimen0 %
+ \setbox0=\hbox{\borderelm#2}\advance\count2 by-\wd0 %
+ \setbox0=\hbox{\borderelm#4}\advance\count2 by-\wd0 %
+ \setbox0=\hbox{\borderelm#3}%
+ \advance\count2 by100 %
+ \divide\count2 by\wd0 %
+ \borderelm#2%
+ \cleaders\copy0\hskip\count2\wd0 %
+ \borderelm#4%
+ }%
+ }
+
+\def\minus_border#1#2#3% ht, wd, #3=empty ==> no center element
+ {\vbox
+ {\offinterlineskip\boxmaxdepth=\maxdimen
+ \dimen2=#2\relax
+ \dimen0=#1\count2=\dimen0
+ \setbox0=\hminusborder{\dimen2}012
+ \advance\count2 by-\ht0 \advance\count2 by-\dp0
+ \setbox2=\hminusborder{\dimen2}567
+ \advance\count2 by-\ht2 \advance\count2 by-\dp2
+ \if.#3.\setbox4=\hbox to\wd0{\borderelm3\hss\borderelm4}
+ \else \setbox4=\hminusborder{\dimen2}384
+ \fi
+ \advance\count2 by100
+ \dimen0=\ht4\advance\dimen0 by\dp4
+ \divide\count2 by\dimen0
+ \box0
+ \cleaders\copy4\vskip\count2\dimen0
+ \box2
+ \kern0sp
+ }%
+ }
+
+\def\minusborder#1#2{\minus_border{#1}{#2}{}}
+
+\def\minusgray#1#2{\minus_border{#1}{#2}{1}}
+
+
+% Rounding upwards is achieved with (D + d - 1) div d, but again, we
+% actually do (D + d - 100sp) div d.
+
+\def\hplusborder#1#2#3#4% wd, l, m, r
+ {\hbox
+ {\dimen0=#1\count2=\dimen0 %
+ \setbox0=\hbox{\borderelm#2}\advance\count2 by-\wd0 %
+ \setbox0=\hbox{\borderelm#4}\advance\count2 by-\wd0 %
+ \setbox0=\hbox{\borderelm#3}%
+ \advance\count2 by\wd0\advance\count2 by-100 %
+ \divide\count2 by\wd0 %
+ \borderelm#2%
+ \cleaders\copy0\hskip\count2\wd0 %
+ \borderelm#4%
+ }%
+ }
+
+\def\plus_border#1#2#3% ht, wd, #3=empty ==> no center element
+ {\vbox
+ {\offinterlineskip\boxmaxdepth=\maxdimen
+ \dimen2=#2\relax
+ \dimen0=#1\relax\count2=\dimen0
+ \setbox0=\hplusborder{\dimen2}012
+ \advance\count2 by-\ht0 \advance\count2 by-\dp0
+ \setbox2=\hplusborder{\dimen2}567
+ \advance\count2 by-\ht2 \advance\count2 by-\dp2
+ \if.#3.\setbox4=\hbox to\wd0{\borderelm3\hss\borderelm4}
+ \else\setbox4=\hplusborder{\dimen2}384
+ \fi
+ \dimen0=\ht4\advance\dimen0 by\dp4
+ \advance\count2 by\dimen0\advance\count2 by-100
+ \divide\count2 by\dimen0
+ \box0
+ \cleaders\copy4\vskip\count2\dimen0
+ \box2
+ \kern0sp
+ }%
+ }
+
+\def\plusborder#1#2{\plus_border{#1}{#2}{}}
+
+\def\plusgray#1#2{\plus_border{#1}{#2}{1}}
+
+%%%%%%% border example (rounded corners)
+% This example creates a border with rounded corners. The corners are taken
+% from the manfnt font, as described in The TeXbook, p.389. However, we
+% reposition them in their boxes, as their original position is inconvenient:
+% We want tight-fitting boxes, because the boxes determine the border width
+% and height. The original position is described in The TeXbook.
+
+% If \manfnt is already defined, we do not redefine it.
+\ifx\manfnt\UNDEFINED
+\font\manfnt=manfnt
+\fi
+
+% \roundcorners is a bit messy, but that is not so important.
+% Just so that you can use \minusgray and \plusgray, we added a center
+% character (just some random character from the font). That meant that the
+% left and right character had to be given widths equal to the corner elements.
+% \roundcorners scales properly with \manfnt.
+
+\def\roundcorners#1% use as \borderelm
+ {{\manfnt
+ \setbox2=\hbox{\char'44}% for demonstration purposes
+ \ifcase#1
+ \setbox0=\hbox{d}% lu
+ \hbox to\ht0{\vbox to\fontdimen8\font{\vss\box0}\hss}%
+ \or\hbox{\vrule width\wd2 height\fontdimen8\font depth0pt\hss}% u=d
+ \or\setbox0=\hbox{a}% ru
+ \hbox to\ht0{\kern\dp0\vbox to\fontdimen8\font{\vss\box0}\hss}%
+ \or\setbox0=\hbox{d}%
+ \hbox to\ht0{\vrule width\fontdimen8\font height\ht2 depth\dp2\hss}% l
+ \or\setbox0=\hbox{d}%
+ \hbox to\ht0{\hss\vrule width\fontdimen8\font height\ht2 depth\dp2}% r
+ \or\setbox0=\hbox{c}% ld
+ \hbox to\ht0{\vbox{\copy0\kern-\dp0}\hss}%
+ \or\hbox{\vrule width\wd2 height\fontdimen8\font depth0pt\hss}% d=u
+ \or\setbox0=\hbox{b}% rd
+ \hbox to\ht0{\kern\dp0\vbox{\copy0\kern-\dp0}\hss}%
+ \or\box2 % center character
+ \fi
+ }}
+
+%%%%%%% centering text within a border
+% \setborder[bwd, hspace, vspace]\bordermacro uses \bordermacro (one of
+% \border, \xborder, etc.) to typeset a border. The width of the border is bwd,
+% the height of the border depends on the amount of text within the border.
+% This text is read and typeset in a vbox, with the hsize set so that the
+% width has the appropriate value. This is done in a somewhat convoluted way
+% with \afterassignment to set the hsize, and \aftergroup to create the border.
+% The reason is that now the text is not read as an argument of \setborder,
+% which is important, for instance, if the text contains catcode changes.
+% We did not write \setborder[#1,#2,#3]#4#{ , which would have ensured that a
+% brace follows: that would have required an explicit brace, whereas now you
+% can also use \bgroup (useful if you want to put \setborder in some other
+% macro).
+
+\newbox\brd_txt
+\newbox\brd_box
+
+\def\setborder[#1,#2,#3]#4% wd, hspace, vspace, bordermacro
+ {\def\brd_inbox
+ {\hsize=#1
+ \advance\hsize by-#2
+ \advance\hsize by-#2
+ \aftergroup\set_border
+ }%
+ \def\set_border
+ {\setbox\brd_txt=\vbox
+ {\vskip#3
+ \box\brd_txt
+ \vskip#3
+ }%
+ \setbox\brd_box=#4{\ht\brd_txt}{#1}%
+ \vbox to\ht\brd_box
+ {\copy\brd_box \kern-\ht\brd_box
+ \vss
+ \hbox to\wd\brd_box{\hss\box\brd_txt\hss}
+ \vss
+ }%
+ }%
+ \afterassignment\brd_inbox
+ \setbox\brd_txt=\vbox
+ }
+
+
+%%%%%%% initialization
+
+\catcode`\_=\borderelm % restore catcode
+
+\let\borderelm=\roundcorners % only reasonable initialization
+
diff --git a/macros/generic/midnight/dolines.doc b/macros/generic/midnight/dolines.doc
new file mode 100644
index 0000000000..782b981de2
--- /dev/null
+++ b/macros/generic/midnight/dolines.doc
@@ -0,0 +1,306 @@
+% dolines.doc --- version 1.0 (15 April 1991)
+% This is the documentation for dolines.tex.
+% To read this file, process it with (plain) TeX: tex dolines.doc
+% (To do that, you need manmac.tex, which has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1991 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- dolines.doc:
+
+\pageno=9 % follows loop.doc
+
+\manpage dolines.tex
+Meta-macros to separate arguments by newlines and by empty lines.
+Version: 1.0 (15 April 1991) (doc: 15 Apr 1991)
+
+The macros in dolines.tex are intended to help you write your own
+macros, rather than to typeset text directly. Consequently, it is
+assumed that you have some experience writing macros; in other words,
+assume that this whole section is preceded by a ``dangerous bend'' symbol.
+
+Dolines.tex\footnote*{To use dolines.tex you also need Midnight/loop.tex,
+which will be |\input| when you |\input dolines|.}
+helps to write macros for which line breaks inserted
+by the user are important. When the definitions from dolines.tex
+are in effect, text consists of paragraphs separated by one
+or more empty lines (as usual). Each paragraph consist of one
+or more lines, where a line is terminated by a normal newline character,
+`|^^M|' (normally, \TeX\ treats newlines as if they are spaces). Note that,
+as far as dolines.tex is concerned, a paragraph can only be
+terminated by an empty line, not by, e.g., |\par| or |\vskip|.
+To use dolines.tex, you have to define three macros, |\beforelines|,
+|\everyline#1|, and |\afterlines|. When dolines.tex detects the beginning
+of a paragraph, |\beforelines| is called. Next, for every line,
+|\everyline| is called with as argument a single macro. That macro
+has as its expansion the line that was read. (Usually, this is almost
+the same as saying that |\everyline| is called with the line as argument.)
+After the last line of the paragraph, |\afterlines| is called.
+No output is generated, other than what is produced by your own macros.
+
+{\def\fnm{\<\rm file name>}
+There are two ways of using dolines.tex. One is to read lines from
+a file, the other is to take the lines from the current input file.
+If you say
+\begintt
+\filedolines{|fnm}
+\endtt
+dolines.tex will attempt to read the file, calling |\beforelines|,
+|\everyline|, and |\afterlines| as described above. The file is read
+inside a group, so you may need to use |\global| if you do assignments
+within, e.g., |\everyline|.
+}% \fnm
+
+As an example, we define a ``poetry environment'' which reads a poem
+from a file, preserving the poet's line breaks. We draw horizontal
+lines around the poem, and put every stanza in a vbox to prevent
+page breaks. (It is certainly possible to write better poetry environments,
+we are just illustrating dolines.tex.)
+\beginlines
+|\input dolines|
+\nobreak\smallskip\nobreak
+|\def\readpoem#1{\medskip \hrule \filedolines{#1}\hrule \medskip}|
+\smallbreak
+|\def\beforelines{\medskip \vbox\bgroup}|
+|\def\everyline#1{\hbox{\kern\parindent \it #1}}|
+|\def\afterlines{\egroup \medskip} % end of the vbox|
+\endlines
+If file ``epic.tex'' contains a poem, we can typeset it with
+|\readpoem{epic}|.
+
+However, if you are typesetting several short rhymes, it is somewhat
+inconvenient to have each of them in a separate file. This is where
+the second method of using dolines.tex is useful. You have to define
+a macro |\enddolines|, the expansion of which should be
+the text you want to use to terminate
+dolines.tex's effect. You also have to define a macro |\finishdolines|.
+When you say |\begindolines|, dolines.tex starts reading lines,
+calling |\everyline| etc. This continues until dolines.tex reads a
+line equal to the (top level) expansion of |\enddolines|. Then your
+macro |\finishdolines| is called, and \TeX\ resumes normal processing.
+|\begindolines| and the line equal to |\enddolines| form a group
+(as with |\filedolines|); |\finishdolines| is called {\sl outside}
+this group.
+
+Here is how we can extend the poetry environment with two control
+sequences |\beginpoem| and |\endpoem|. We keep the above definitions
+of |\beforelines| etc.
+\beginlines
+|\def\beginpoem{\medskip \hrule \begindolines}|
+|\def\enddolines{\endpoem}|
+|\def\finishdolines{\hrule \medskip}|
+\endlines
+Now we can typeset a poem as follows (the English stanza is from The
+\TeX book):
+\beginlines
+|\beginpoem|
+\nobreak\medskip\nobreak
+|Roses are red,|
+|\quad Violets are blue;|
+|Rhymes can be typeset|
+|\quad With boxes and glue.|
+\nobreak\medskip\nobreak
+|Blauw de viooltjes,|
+|\quad Rood zijn de rozen;|
+|Een rijm kan gezet|
+|\quad Met plaksel en dozen.|
+\nobreak
+|\endpoem|
+\endlines
+Note that we never defined |\endpoem|, as it is never expanded. In fact,
+there is no reason to terminate the poem with a control sequence. If we
+define |\def\enddolines{***}|, three stars on a single line will play
+the r\^ole of |\endpoem| above.
+
+\danger There are a few things to be careful about. First, a line
+must have properly nested |{...}| groups. (Because a line is read as
+an argument delimited by a \<return> character.) You should not use
+this to fold long lines, because that will insert an explicit \<return>
+character with catcode 12 in the line. Second, spaces at the beginning
+of a line are skipped, unless you change the catcode of `\]'. This means
+that, for instance, there can be spaces in front of |\endpoem|.
+(Spaces are skipped at the beginning
+of a line because at that point \TeX\ is in ``state N'' --- see Chapter
+8 of The \TeX book.) Third, when |\everyline| is called, the line
+that is its argument is already tokenized. This means that a catcode
+change within |\everyline| cannot effect this line. Furthermore,
+when |\beforelines| is called, the first line is already read and
+tokenized.
+
+\danger |\filedolines| and |\begindolines| treat lines in pretty much
+the same way. There is however a significant difference in the way
+comments are treated. If a line has a comment (i.e., it ends with
+`|%...|'), |\begindolines| will miss the \<return> at the end of the
+line. This is normal for \TeX, it can be used to fold long lines.
+However, if you are using |\filedolines|, comments will be skipped,
+but lines are not concatenated: |\filedolines| will not miss the
+\<return>! (This is because |\filedolines| uses \TeX's |\read| primitive.)
+A rather obscure difference
+is that a line consisting of just `|\par|' is read as an empty line
+by |\filedolines|, whereas it is read as a non-empty line by |\begindolines|.
+If you want to use |\begindolines| to read from a file, you can say
+|\expandafter\begindolines\input ...|.
+
+It is possible for |\finishdolines| to take arguments, but they have to appear
+on the line following the line with the expansion of |\enddolines|. Suppose
+we change the poem environment by defining |\finishdolines| as
+\begintt
+\def\finishdolines#1%
+ {\line{\strut \hss --- #1\hss\hss}\hrule \medskip}
+\endtt
+Hence, |\finishdolines| will print the author's name under the poem.
+The argument should be written on the line following |\endpoem|:
+\begintt
+\beginpoem
+ ...
+\endpoem
+{A.U. Thor}
+\endtt
+
+Sometimes we want to use dolines.tex to read just one paragraph by making
+|\enddolines| equal to an empty line. For instance, a macro |\address| which
+reads an address terminated by an empty line. The problem with defining
+|\def\enddolines{}| is that if there is an empty line before the address
+(or even if the rest of the line after |\address| is empty), no lines
+will be read at all. To ensure that at least one paragraph is read, we use
+|\beforelines| to define |\enddolines|:
+\begintt
+\def\beforelines{\normalbeforelines\def\enddolines{}}
+\let\enddolines=\relax
+\endtt
+Here, |\normalbeforelines| denotes whatever must be done at the beginning
+of the address. Initially |\enddolines| is equal to |\relax|, but as soon
+as the first non-empty line is found, |\enddolines|
+is redefined as an empty line. Following that, an empty line causes calls
+of |\afterlines| and |\finishdolines|. (A way to include an empty line in
+the address is to write a tie (`|~|') on a line of its own.)
+
+\danger As a more complicated example, we design a simple verbatim
+environment. The verbatim environment treats horizontal tabs as spaces,
+and considers multiple empty lines equal to a single empty line.
+We first write macros |\setupverbatim| and |\finishverbatim|. The first
+sets up the character codes for verbatim printing, the second resets
+those character codes.
+
+\beginlines
+|\def\setupverbatim|
+\nobreak
+| {\medskip \hrule \bgroup|
+| \def\do##1{\catcode`##1=12 }\dospecials|
+| \obeyspaces \tt|
+| }|
+\medskip
+|\def\finishverbatim{\egroup \hrule \medskip}|
+\medskip
+|{\obeyspaces\global\let|\]|=\|\]|}|
+\endlines
+Grouping is used to keep the catcode changes local. Plain \TeX's |\dospecials|
+macro applies the macro |\do| to all special characters (`|\|', `|$|', etc.),
+which, in this case, gives them all catcode 12 (``other''). But we don't want
+catcode 12 for spaces, because the |\tt| font has a visible space character
+`\]'. Therefore, spaces are made active with |\obeyspaces|, and in the
+last line we make an active space equal to \hbox{|\|\]}.
+
+To start setting verbatim text, we use |\beginverbatim|; |\readverbatim|
+is used to typeset a whole file in verbatim mode.
+The macros for typesetting lines and paragraphs are very straightforward.
+\beginlines
+|\def\beginverbatim{\setupverbatim\begindolines}|
+|\let\finishdolines=\finishverbatim|
+\medbreak
+|\def\readverbatim#1{\setupverbatim\filedolines{#1}\finishverbatim}|
+\medbreak
+|\def\beforelines{\smallskip}|
+|\def\everyline#1{\hbox{\strut #1}}|
+\nobreak
+|\def\afterlines{\smallskip}|
+\endlines
+
+Finally, we have to define |\enddolines|. We want to match |\beginverbatim|
+with |\endverbatim|, so we would like to do
+\begintt
+\def\enddolines{\endverbatim}
+\endtt
+The problem is that this makes |\enddolines| expand to the {\sl control
+sequence} |\endverbatim|. But while we are in verbatim mode, no control
+sequences are recognized, because `|\|' is not an escape character.
+What we really want is to make the expansion of |\enddolines| equal
+to the {\sl string} ``$\backslash$endverbatim''. This is done by
+temporarily making `|\|' a normal character and `|/|' an escape
+character:
+\beginlines
+|{\catcode`\/=0 /catcode`/\=12|
+| /gdef/enddolines{\endverbatim}|
+\nobreak
+|}|
+\endlines
+This completes the verbatim environment. Note that |\endverbatim| is
+only recognized if it appears on a line by its own and is not preceded
+by spaces. If you are not afraid of confusion, you can change the
+name |\finishverbatim| to |\endverbatim|.
+
+\bye
diff --git a/macros/generic/midnight/dolines.tex b/macros/generic/midnight/dolines.tex
new file mode 100644
index 0000000000..6237893bb1
--- /dev/null
+++ b/macros/generic/midnight/dolines.tex
@@ -0,0 +1,180 @@
+\ifx\DOLINES\relax\endinput\else\let\DOLINES=\relax\fi % \input only once
+%
+% dolines.tex: Meta-macros to separate arguments by newlines and by
+% empty lines.
+% version: 1.0 release: 15 April 1991
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file dolines.doc
+% You need Midnight/loop.tex to use these macros.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% USA
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 15 April 1991: This one.
+% release 8 February 1991: Used \next instead of \do_next, which
+% occasionally conflicted with use of \next in other macros.
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+\input Midnight/loop % CHANGE this filename to correspond to your installation
+
+%%%%%%% Reading from a different file
+% This is relatively simple, it can be done with a loop. The read function
+% reads a single line (that is what \read does). A file that is being
+% \read always ends with an empty line, therefore no test for eof(lines_in)
+% is needed in the inner loop.
+%
+% while (!eof(lines_in))
+% {
+% read(lines_in, _ln);
+% if (_ln != empty_ln)
+% {
+% beforelines();
+% do { everyline(_ln);
+% read(lines_in, _ln);
+% } while (_ln != empty_ln);
+% afterlines();
+% }
+% }
+%
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\catcode`\_=11 % 11 = letter (used to make macros private)
+
+\newread\lines_in
+
+\globaldefs=1
+
+\def\empty_ln{\par}
+
+\def\filedolines#1%
+ {{\openin\lines_in=#1 %
+ \ifeof\lines_in\message{File #1 not found.}\fi
+ \Loop\ifeof\lines_in \Break1 \fi
+ \read\lines_in to\_ln
+ \ifx\_ln\empty_ln
+ \else {\beforelines
+ \Loop\everyline{\_ln}%
+ \read\lines_in to\_ln
+ \ifx\_ln\empty_ln \Break1 \fi
+ \Pool
+ \afterlines
+ }%
+ \fi
+ \Pool
+ \closein\lines_in
+ }}
+
+} % restore \catcode`\^^M, \catcode`\_, etc.
+
+
+%%%%%%% Reading from the current file
+% This is more complicated. The problem is that a line can only be
+% read at the end of a macro, because otherwise a part of the macro
+% itself will be read. Therefore, the above solution with \Loop cannot
+% be used. Instead, this is implemented as a finite state machine. The
+% FSM has two major states, outer_loop and inner_loop, corresponding to the
+% program above. In these states, the value of _ln is used to determine
+% what actions to take, and what the next state is. The next state
+% is indicated by the control-sequence \do_next.
+% There are two minor states, get_out and get_in. In each of them
+% the next line is read into _ln. After get_out, the next state is always
+% outer_loop; after get_in it is always inner_loop.
+% Here is a ``picure.'' `(...)' is a state, `...?' denotes the value
+% of _ln, and other texts are actions. ctrl-M stands for an empty line.
+%
+% /---<----\
+% (get_out) |
+% \ ctrl-M?
+% begindolines V /
+% \->bgroup -> (get_out) -> (outer_loop) -> enddolines? -> egroup
+% ^ | ^ \-> (finish)
+% / | \
+% afterlines --/ other? \-- afterlines
+% ^ V ^
+% | beforelines |
+% ctrl-M? <--\ | /--> enddolines?
+% \ V /
+% (inner_loop)
+% / ^
+% other? \
+% | (get_in)
+% V |
+% \-everyline->/
+%
+
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\catcode`\_=11 % 11 = letter (used to make macros private)
+\globaldefs=1
+
+
+\long\def\get_out#1^^M% here a line is read (as #1)
+ {\gdef\_ln{#1}%
+ \outer_loop
+ }
+
+\long\def\get_in#1^^M% here a line is read (as #1)
+ {\gdef\_ln{#1}%
+ \inner_loop
+ }
+
+\def\outer_loop
+ {\ifx\_ln\enddolines \egroup\let\do_next=\finishdolines
+ \else\ifx\_ln\empty \let\do_next=\get_out
+ \else \beforelines\let\do_next=\inner_loop
+ \fi \fi
+ \do_next
+ }
+
+\def\inner_loop
+ {\ifx\_ln\enddolines \afterlines\let\do_next=\outer_loop
+ \else\ifx\_ln\empty \afterlines\let\do_next=\outer_loop
+ \else \everyline\_ln\let\do_next=\get_in
+ \fi \fi
+ \do_next
+ }
+
+\def\begindolines
+ {\bgroup
+ \catcode`\^^M=12 %
+ \get_out
+ }
+
+} % restore \catcode`\^^M, \catcode`\_, etc.
+
+% We define \finishdolines and \enddolines, in case someone forgets:
+
+\let\finishdolines=\relax
+\def\enddolines{\enddolines}
+
diff --git a/macros/generic/midnight/gloss.doc b/macros/generic/midnight/gloss.doc
new file mode 100644
index 0000000000..225180806a
--- /dev/null
+++ b/macros/generic/midnight/gloss.doc
@@ -0,0 +1,283 @@
+% gloss.doc --- version 1.0 (26 November 1990)
+% This is the documentation for gloss.tex.
+% To read this file, process it with (plain) TeX: tex gloss.doc
+% (To do that, you need both gloss.tex and manmac.tex. The latter has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1990 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- gloss.doc:
+
+\input Midnight/gloss % change this to refer to gloss.tex on your system
+
+\pageno=5 % follows quire.doc
+
+\manpage gloss.tex
+Macros for vertically aligning words in consecutive sentences.
+Version: 1.0 (26 November 1990) (doc: 10 November 1990)
+
+To gloss means to insert explanations or translations of words
+between the lines of a text. For ease of reading, one generally
+wants the explained word and the explanation to line up, as in
+\gloss Dit is een Nederlands voorbeeld.
+This is a Dutch example.
+\begindisplay
+\box\gline
+\enddisplay
+The macros defined in gloss.tex make it convenient to typeset
+such glossed sentences. To use the macros, you first have to
+|\input gloss|\footnote*{We have made no attempt to \LaTeX ify gloss.tex,
+but you can use the macros in \LaTeX\ just as in plain \TeX.}.
+The main macro for typesetting glossed sentences
+is |\gloss|. It should be followed by the two sentences, each
+terminated by a \<return>. The previous example was typeset with
+\begintt
+\gloss Dit is een Nederlands voorbeeld.
+This is a Dutch example.
+\endtt
+But instead of printing the glossed sentence, |\gloss| puts the
+whole construction in an hbox, called |\gline|. To actually insert
+that box in your text, you use |\box\gline| or |\unhbox\gline|.
+The text is put in a box to make it easier to handle. For instance,
+it makes it easy to put extra indentation or an example number
+in front of the sentence. (The baseline of the hbox is the baseline
+of the second line in the box.) The difference between |\box\gline|
+and |\unhbox\gline| is that the latter allows line breaks in the
+glossed sentence. That is obviously only useful if the glossed
+sentence is quite long; we will see an example later on.
+
+The |\gloss| macro splits each sentence into words, and then aligns
+the words. In this context, a word is a sequence of characters separated
+by spaces. The number of spaces between words is irrelevant, so that
+you can line up the words in your input as well. Using
+\begintt
+\gloss Dit is een Nederlands voorbeeld.
+ This is a Dutch example.
+\endtt
+gives exactly the same output as the input given before. However,
+you should not insert extra \<return> symbols. The sentences
+can have a different number of words.
+Sometimes one of the two sentences has a word without equivalent
+in the other sentence. In such cases you can insert an empty word
+with |{}|. You can also combine several words into a single word,
+by using grouping. The following example illustrates both.
+\begintt
+\gloss Dit is een voorbeeldje in het Nederlands.
+ This is a {little example} in {} Dutch.
+\endtt
+gives
+\gloss Dit is een voorbeeldje in het Nederlands.
+ This is a {little example} in {} Dutch.
+\begindisplay
+\box\gline
+\enddisplay
+Without the grouping ``example'' would have been lined up
+with ``{\it in\/}.''
+
+By default the first sentence of a glossed pair is set in italic font
+(|\it|), the second in roman font (|\rm|). You can change this by,
+for instance, setting |\let\eachwordone=\rm|, which will set
+each word in the first sentence in roman font. The font of the second
+sentence is governed by |\eachwordtwo|. This use of the |\eachword|
+macros is an instance of a more general mechanism that is explained
+later. You can insert font changes in the middle
+of a sentence, but they only apply to the next word.
+\begintt
+\gloss Dit is een Nederlands voorbeeld.
+ This is a \sl Dutch example.
+\endtt
+will set ``Dutch'' in slanted font, but ``example'' in the default
+font. The |\gloss| macro considers |\sl Dutch| to be a single word,
+and sets this word in an hbox so that the effect of the font change
+is limited. |\sl| is not considered a word by itself, because
+spaces following a macro are always skipped.
+
+{
+\let\eachwordone=\rm
+\def\sixstrut{\vrule height5pt depth1.5pt width0pt }
+\def\eachwordtwo{\let\strut=\sixstrut\sixrm}
+\baselineskip=22.5pt
+\setbox0=\hbox{ }\advance\rightskip by-\wd0
+\let\s=\string
+
+\gloss You may want to gloss more than a single sentence, maybe
+ {} verb verb {} verb {} {} {} {} noun
+\gloss a whole paragraph.
+ {} {} noun
+\gloss It would however be quite inconvenient if you had to
+ {} verb {} verb
+\gloss follow |\s\gloss| by a whole paragraph on a single line (by
+ verb macro {} {} {} noun {} {} {} noun
+\gloss terminating each line with a {|\%|-sign}), followed by a line
+ verb {} noun {} {} noun verb {} {} noun
+\gloss containing all the glosses. Especially if there are a lot of
+ verb {} {} noun {} {} {} verb {} noun
+\gloss unglossed (empty) words, it would be hard to get the sentences
+ verb? {} noun {} verb verb {} {} verb {} noun
+\gloss lined up properly. Fortunately, a paragraph like the current
+ verb {} {} {} {} noun
+\gloss one can be set quite easily. |\s\gloss| puts the created sentence
+ noun verb verb verb {} {} macro verb {} verb noun
+\gloss in |\s\gline|, and |\s\gline| is emptied by using |\s\box| or
+ {} box {} box verb verb {} verb
+\gloss |\s\unhbox|. But if you don't empty |\s\gline|, the next
+ {} {} {} {} verb verb box
+\gloss usage of |\s\gloss| will append the new sentence to the older
+ noun {} macro verb verb {} {} noun
+\gloss one. Hence, this paragraph was typeset with
+ noun {} {} noun verb verb
+\unhbox\gline
+
+}
+\beginlines
+|\gloss You may want to gloss more than a single sentence, maybe|
+\nobreak
+| {} verb verb {} verb {} {} {} {} noun|
+|\gloss a whole paragraph.|
+\nobreak
+| {} {} noun|
+\quad\vdots\ {\sevenrm(10 more)}\smallskip
+|\gloss one. Hence, this paragraph was typeset with|
+\nobreak
+| noun {} {} noun verb verb|
+\nobreak\smallskip\nobreak
+|\unhbox\gline|
+\endlines
+Of course, a few more things, like the fonts, had to be changed. We
+discuss that next. Also notice that it takes \TeX\ quite some time
+to typeset such a paragraph.
+
+\medskip
+\def\word{{\rm\<word>}}
+\danger Each word from the first line following |\gloss| is set in
+an hbox as follows
+\begintt
+\hbox{\eachwordone\strut|word|]}
+\endtt
+The macro |\eachwordone| is by default |\let| equal to |\it|, but
+can be redefined. The previous paragraph was made with
+\begintt
+\let\eachwordone=\rm
+\def\sixstrut{\vrule height5pt depth1.5pt width0pt }
+\def\eachwordtwo{\let\strut=\sixstrut\sixrm}
+\endtt
+(If |\strut| were not redefined, there would be too much space between
+the first and the second line.) Furthermore, to obtain a larger separation
+between the pairs of lines, the |\baselineskip| was set to 22.5 pt
+(|\baselineskip| governs the spacing between the glossed pairs, the
+spacing within the pair is governed by the |\strut|s.) Since a word
+does not contain spaces, and each word is followed by a space,
+the |\eachword| macros can easily be made to take the word (and the
+|\strut|) as argument. For instance, the following definition will
+underline every word in the first line.
+\begintt
+\def\eachwordone#1|]{\rm\underbar{#1}|]}
+\endtt
+The space following the word does not disappear at a line break, because
+it is hidden within an hbox. To hide this extra space between the last
+word and the right margin, the final thing needed to typeset the
+previous paragraph was
+\begintt
+\setbox0=\hbox{|]}\advance\rightskip by-\wd0
+\endtt
+This is not perfect, because the size of the space depends on the font:
+there is a {\sixrm verb} sticking out slightly.
+
+\danger The word boxes are paired together in a single vbox, and
+|\gline| consists of a sequence of these vboxes. The vboxes are separated
+by some glue, equal to |\glossglue|. Without this glue no line breaks
+would be possible, nor would the spaces between the words be stretchable.
+|gloss.tex| says |\glossglue=0pt plus2pt minus1pt|. The stretch and
+shrink components are only relevant if |\unhbox\gline| is used.
+
+Sometimes you would rather not have extra space following a word,
+for instance when parts of a word are glossed separately: In
+\gloss Dit is een voorbeeld- je in het Nederlands.
+This is an example (``little'') in {} Dutch.
+\begindisplay
+\box\gline
+\enddisplay
+it is preferable to have no space following ``{\it voorbeeld-}'' if it
+is not necessary. This can easily be achieved with a macro like
+\begintt
+\def\+#1|]{#1}
+\endtt
+which is inserted just before the word that should not have a space:
+|\+voorbeeld- je|.
+It can also be done by making the hyphen gobble up the space, as in
+\begintt
+\let\hyphen=-
+\catcode`-=\active
+\def-#1|]{\hyphen#1}
+\endtt
+However, this does not work if there is a word with a hyphen in the
+middle. To handle that situation, a more sophisticated definition
+of |-| can check what the next character is, using
+|\futurelet|. We will not do that here, as it has little to do with
+glossed sentences.
+
+\bye
diff --git a/macros/generic/midnight/gloss.tex b/macros/generic/midnight/gloss.tex
new file mode 100644
index 0000000000..2fa5352d2e
--- /dev/null
+++ b/macros/generic/midnight/gloss.tex
@@ -0,0 +1,122 @@
+\ifx\GLOSS\relax\endinput\else\let\GLOSS=\relax\fi % \input only once
+%
+% gloss.tex: Macros for vertically aligning words in consecutive sentences.
+% version: 1.0 release: 26 November 1990
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file gloss.doc
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% I wrote these macros after reading a request for something like this
+% from Robert Malouf (SUNY Buffalo) on usenet in comp.text.tex.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 9 Nov 1990: used % instead of \endlinechar (no functional
+% changes involved).
+% release 26 Nov 1990: This one.
+% version 8 Nov 1990: Same as this, but with less readable documentation.
+% version 7 Nov 1990: Used the names \fontone and \fonttwo instead of
+% \eachwordone and \eachwordtwo.
+% version 6 Nov 1990: Could not easily typeset a '+', handled
+% linespacing incorrectly.
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+\newbox\lineone % boxes with words from first line
+\newbox\linetwo
+\newbox\wordone % a word from the first line (hbox)
+\newbox\wordtwo
+\newbox\gline % the constructed double line (hbox)
+\newskip\glossglue % extra glue between glossed pairs
+\glossglue = 0pt plus 2pt minus 1pt % allow stretch/shrink between words
+\newif\ifnotdone
+
+\let\eachwordone=\it
+\let\eachwordtwo=\rm
+
+
+\def\lastword#1#2#3% #1 = \each, #2 = line box, #3 = word box
+ {\setbox#2=\vbox{\unvbox#2%
+ \global\setbox#3=\lastbox
+ }%
+ \ifvoid#3\global\setbox#3=\hbox{#1\strut{} }\fi
+ % extra space following \strut in case #1 needs a space
+ }
+
+\def\testdone
+ {\ifdim\ht\lineone=0pt
+ \ifdim\ht\linetwo=0pt \notdonefalse % tricky space after pt
+ \else\notdonetrue
+ \fi
+ \else\notdonetrue
+ \fi
+ }
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\gdef\getwords(#1,#2)#3 #4^^M% #1=linebox, #2=\each, #3=1st word, #4=remainder
+ {\setbox#1=\vbox{\hbox{#2\strut#3 }% adds space
+ \unvbox#1%
+ }%
+ \def\more{#4}%
+ \ifx\more\empty\let\more=\donewords
+ \else\let\more=\getwords
+ \fi
+ \more(#1,#2)#4^^M%
+ }
+
+\gdef\donewords(#1,#2)^^M{}%
+
+\gdef\twosent#1^^M#2^^M% #1 = first line, #2 = second line
+ {\getwords(\lineone,\eachwordone)#1 ^^M%
+ \getwords(\linetwo,\eachwordtwo)#2 ^^M%
+ \loop\lastword{\eachwordone}{\lineone}{\wordone}%
+ \lastword{\eachwordtwo}{\linetwo}{\wordtwo}%
+ \global\setbox\gline=\hbox{\unhbox\gline
+ \hskip\glossglue
+ \vbox{\box\wordone
+ \nointerlineskip
+ \box\wordtwo
+ }%
+ }%
+ \testdone
+ \ifnotdone
+ \repeat
+ \egroup % matches \bgroup in \gloss
+ }
+} % restore \catcode`\^^M
+
+\def\gloss
+ {\bgroup
+ \catcode`\^^M=12
+ \twosent
+ }
+
diff --git a/macros/generic/midnight/labels.doc b/macros/generic/midnight/labels.doc
new file mode 100644
index 0000000000..1cfa44d6ea
--- /dev/null
+++ b/macros/generic/midnight/labels.doc
@@ -0,0 +1,234 @@
+% labels.doc --- version 1.0 (24 October 1991)
+% This is the documentation for labels.tex.
+% To read this file, process it with (plain) TeX: tex labels.doc
+% (To do that, you need manmac.tex, which has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1991 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% Doc history:
+% 10 Sep 1991: Added paragraph about centering labels.
+% 22 Apr 1991: First version
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- labels.doc:
+
+\pageno=12 % follows dolines.doc
+
+\manpage labels.tex
+Macros to print address labels and bulk letters.
+Version: 1.0 (24 October 1991) (doc: 10 Sep 1991)
+
+The macros defined in labels.tex can be used to print address labels. Such
+labels can be printed on normal paper, if you want to cut them yourself,
+or on peel-off labels. (Peel-off labels are available in various sizes for
+most types of printers and photo-copiers.)
+In order to use the macros
+you always have to start with |\input labels|, which reads
+labels.tex\footnote*{To use labels.tex you also need Midnight/dolines.tex and
+Midnight/loop.tex, which are input automatically.}.
+We will first explain how to
+typeset labels, then how to print bulk letters.
+
+There are two slightly different ways to print labels. The first one is to say
+\begintt
+\beginlabels
+...
+\endlabels
+\endtt
+where in place of `|...|' you type the labels separated by empty lines.
+The second is to simply say
+\begintt
+\labelfile{...}
+\endtt
+where `|...|' is the name of a file that contains the labels. In either case
+a label consists of several lines, and labels are separated by one
+or more empty lines. You end your file as usual, with |\bye|.
+Labels.tex does not specify which font to use, which
+in plain \TeX\ means that by default a 10 points Roman font is used.
+However, for legibility
+it is usually better to use a sans-serif font, for instance by writing
+\begintt
+\font\sf=cmss12
+\sf \baselineskip=14pt
+\endtt
+In order to typeset labels, you must define the size and other attributes
+of labels. (There are default values, but they are
+unlikely to suit your needs, especially if you want to print on
+peel-off labels.) These attributes must be set before you call
+|\beginlabels| or |\labelfile|; therefore, a typical input file has the form
+\beginlines
+|\input labels|
+\nobreak
+|\vlbls=5 \hlbls=2|
+\goodbreak
+|\vlblsize=5cm|
+|\labelfile{customers.lbl}|
+\nobreak
+|\bye|
+\endlines
+where file `customers.lbl' has the addresses that must be typeset. The
+assignments to |\vlbls|, |\hlbls|, and |\vlblsize| define certain attributes.
+Next we describe which attributes there are.
+
+First you have to tell \TeX\ how labels must appear on a page. |\vlbls|
+must denote the vertical number of labels per page, |\hlbls| the horizontal
+number. |\vfirst| specifies the amount of white space between the top of the
+page and the top of the first label; |\hfirst| is the amount of white space
+to the left of the first label. Dimensions |\vinter| and |\hinter| specify
+the white space between labels.
+
+Then you have to specify the size of each label. |\vlblsize| and |\hlblsize|
+specify the vertical and horizontal sizes of a single label. |\vindent| is
+the white space between the top of the label and the baseline of the first
+line. (|\vindent| is similar to \TeX's |\topskip| parameter.) |\hindent|
+is the amount of white space between the left edge of a label and the
+text of the label.
+
+The parameters mentioned above are sufficient to typeset labels. There
+are however a few special parameters that are sometimes useful.
+By default, there is no outline around the labels. That is suitable for
+printing on peel-off labels, but inconvenient for use with previewers or
+plain paper. You can set |\lbloutline| to the thickness of the lines
+you want around your labels, e.g., |\lbloutline=0.5pt|. The outlines
+are drawn at the outside of the label (i.e., in the space between the
+labels).
+
+If there is too much text on a label, an error message is given; for reference,
+the message contains the input text corresponding to the label. A label
+with an error is not typeset.
+When you typeset labels, by default a file `lblerror.tex' is created, which
+has the text of all the labels that did not fit. This makes it convenient to
+process those labels again, e.g., with |\labelfile|.
+However, if you set |\erroraction=0| before you start typesetting labels,
+file `lblerror.tex' is not created. Setting |\erroraction=1| does not only
+suppress generation of the error file, it also forces printing of the labels
+that have errors. Any other value of |\erroraction| causes the default
+behavior.
+
+\danger The error messages refer to the natural size of a label. If
+|\vindent| and |\hindent|, which are glue parameters, have shrink components,
+it is possible that the text will actually fit on the label. However, usually
+these indentations have no stretch or shrink components.
+
+\danger There are two token registers, |\beforelbl| and |\afterlbl|, that
+can be used to put additional text on each label.
+They contain \<vertical material> that is inserted just before and after
+the text of the label, respectively. By default, these sequences are empty.
+One can for instance specify
+\begintt
+\beforelbl={\line{---Confidential---\hfil}\smallskip}
+\endtt
+to put ``---Confidential---'' at the beginning of each address. {\sl Note:\/}
+Since addresses are normally read from bottom to top, the post office
+prefers it if you don't put text after the address, unless it is part
+of the address. E.g., using |\afterlbl={\noindent USA}| is ok, but use
+|\beforelbl| if you want to add an ``attention:\dots'' line to each label.
+
+\danger If you want to use the labels for something else than addresses, you
+may want to center the text on the label. Horizontal centering can be obtained
+with |\hindent=0pt plus1fil|. Note that this centers the text according to
+the widest line; it does not center each line separately.
+Vertical centering is a bit more complicated, because of the way \TeX\ stacks
+boxes vertically. The following centers the label text vertically:
+\begintt
+\count255=\baselineskip
+\vindent=\count255sp plus1fil
+\endtt
+This works because the actual vertical indentation is |\vindent| minus
+|\baselineskip|, since \TeX\ automatically inserts |\baselineskip| glue.
+
+Within a label, you can type `|&|' and `|#|' for
+`\&' and `\#'. (In \TeX, you usually have to type `|\&|' and `|\#|' to get
+these symbols.) You can use macros in a label, for instance for font changes.
+A line of a label must contain balanced braces; a `|%|' sign
+will concatenate the next line. (Usually, labels do not contain macros, nor
+braces, nor percentage-signs.)
+If for some reason you want an empty line in the middle of a label,
+write a `tie' (`|~|') on that line. (The |~| is replaced by a space in the
+output.)
+
+Address labels are often used to send an identical letter to each addressee.
+The command |\bulk| makes it easy to print the address on each letter. You
+need two files, one with all the addresses, and one with the standard letter.
+Say that they are called `addr.tex' and `letter.tex', respectively. The command
+\begintt
+\bulk{addr}{letter}
+\endtt
+will typeset a copy of the letter for each address. In the letter you can
+use the control sequence |\bulkaddress|. This stands for a vbox that contains
+the address to which the letter corresponds. (The vbox contains an hbox for
+each line of the address; parameters like |\vindent| and |\hlblsize| are not
+important when |\bulk| is used.) Since `letter.tex' is processed many times,
+it is best to put any definitions that apply to all letters in the file
+that contains the |\bulk| command, rather than in the letter itself.
+Each letter is read within a group, so all non-global definitions and
+assignments in the letter are local to the letter. Also note that the
+vbox containing the address is typeset before the letter is read.
+The |\bulk| command does not generate address labels; for that you have
+to use |\labelfile{addr}|.
+
+\bye
diff --git a/macros/generic/midnight/labels.tex b/macros/generic/midnight/labels.tex
new file mode 100644
index 0000000000..eea2cf5a84
--- /dev/null
+++ b/macros/generic/midnight/labels.tex
@@ -0,0 +1,358 @@
+\ifx\LABELS\relax\endinput\else\let\LABELS=\relax\fi % \input only once
+%
+% labels.tex: Macros to print address labels (and bulk letters).
+% version: 1.0 release: 24 October 1991
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file labels.doc
+% You need Midnight/dolines.tex and Midnight/loop.tex to use these
+% macros.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% USA
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 24 Oct 1991: I undid the change from 6 Aug 1991: Matthias
+% Feyerabend suggested a more elegant change that has the
+% same result (involving \the\expandafter\lbl_txt#1).
+% release 6 Aug 1991: Dolines.tex was changed since the previous
+% release: it now calls \everyline with a single macro rather
+% than with the text of the line. This required a change in
+% the creation of \lbl_txt; \addlbl_txt was added.
+% release 14 Feb 1991: The original
+%
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+\input Midnight/dolines % CHANGE this filename to correspond to
+ % your installation
+
+%%%%%%% Registers
+% All user-accessible registers. Some private registers are declared
+% later.
+% Individual labels:
+\newdimen\vlblsize
+\newdimen\hlblsize
+\newskip\vindent
+\newskip\hindent
+\newdimen\lbloutline
+\newtoks\beforelbl
+\newtoks\afterlbl
+
+% Labels on a page:
+\newcount\vlbls
+\newcount\hlbls
+\newdimen\vfirst
+\newdimen\hfirst
+\newdimen\vinter
+\newdimen\hinter
+
+% We make `_' into a letter to make macros private
+\vlbls=\catcode`\_ % minor trick to remember old value
+\catcode`\_=11
+
+\newbox\lbl_ % box in which a label is constructed
+
+
+%%%%%%% Error message
+% If a label is too large, we give an error message. \err_dim is the
+% excess size of the label, \lbl_txt is the text of the label. \lbl_txt
+% is set while reading the label, so that we can report which label is
+% too large. Depending on the value of \err_act, more action is
+% taken: 0 --> nothing, 1 --> print label anyway, others --> print
+% this label on \lbl_log=lblerror.tex as well. \lbl_log is closed
+% and an appropriate message printed by \close_log.
+
+\newdimen\err_dim
+\newtoks\lbl_txt
+\newcount\err_act
+\newcount\err_cnt
+\newwrite\lbl_log
+
+\let\erroraction=\err_act
+
+\def\err_lbl#1% #1 = "wide" or "high"
+ {{\global\advance\err_cnt by 1
+ \newlinechar=`\^^J
+ \immediate\write16{^^J**** Label is \the\err_dim\space too #1:}%
+ \immediate\write16{\the\lbl_txt}%
+ \ifcase\err_act
+ \or\make_lbl
+ \else\immediate\write\lbl_log{\the\lbl_txt}%
+ \fi
+ }}
+
+\def\close_msg#1%
+ {\ifnum\err_cnt>0 \immediate\write16{#1}%
+ \fi
+ }
+
+\def\close_log
+ {\ifcase\err_act
+ \close_msg{**** \the\err_cnt\space error(s) ****}%
+ \or \close_msg{**** \the\err_cnt\space label(s) with errors %
+ are included in the dvi file ****}%
+ \else\immediate\closeout\lbl_log
+ \close_msg{**** \the\err_cnt\space error(s): see lblerror.tex ****}%
+ \fi
+ }
+
+%%%%%%% Reading a label
+% Every group of lines is set in a vbox, using dolines.tex (see dolines.doc).
+% \lbl_before corresponds to \beforelines (see dolines), etc.
+% Every line itself is set in an hbox. The sizes of the hboxes and
+% vboxes are not specified here, because we want to do our own checking
+% rather than rely on TeX's checking and error messages. The computation
+% in \lbl_before is used to position the baseline of the first line
+% independently of the height of that line. \vindent is similar to TeX's
+% \topskip.
+
+\def\lbl_before
+ {\global\lbl_txt={}%
+ \setbox\lbl_=\vbox\bgroup
+ \advance\vindent by -\baselineskip
+ \ifdim\vindent<0sp \vindent=0sp \fi
+ \vskip\vindent
+ \prevdepth=0sp
+ \the\beforelbl
+ }
+
+% #1 is always equal to `\_ln', which in turn expands to the line of text.
+% That works fine with \hbox, but we must somehow expand \_ln first before
+% we put it in \lbl_txt. That is what the second expandafter is for. The
+% first expandafter is to expand \the\lbl_txt (and \_ln) before the '{' is
+% read. Otherwise no expansion is done: TeX does not expand the tokens in
+% the text of a token variable.
+% --- thanks for this solution to Matthias Feyerabend.
+
+\def\lbl_every#1%
+ {\hbox{#1}%
+ \global\lbl_txt=\expandafter{\the\expandafter\lbl_txt#1^^J}%
+ }
+
+\def\lbl_after
+ {\the\afterlbl
+ \egroup % closes \lbl_=\vbox{...}
+ \check_lbl
+ }
+
+%%%%%%% Making a label
+% \check_lbl checks whether the label is not too large, and, if not,
+% calls \make_lbl. (\make_lbl can also be called from \err_lbl.)
+% Note that \check_lbl only checks for the natural size of the label;
+% if \hindent or \vindent have shrink components, the label may
+% actually fit.
+
+\def\check_lbl
+ {\err_dim=\wd\lbl_ \advance\err_dim by \hindent
+ \ifdim\err_dim>\hlblsize
+ \advance\err_dim by -\hlblsize
+ \err_lbl{wide}%
+ \else\err_dim=\ht\lbl_ \advance\err_dim by \dp\lbl_
+ \ifdim\err_dim>\vlblsize
+ \advance\err_dim by -\vlblsize
+ \err_lbl{high}%
+ \else\make_lbl
+ \fi \fi
+ }
+
+\def\make_lbl
+ {\setbox\lbl_=\vbox to \vlblsize{\unvbox\lbl_ \vss}%
+ \setbox\lbl_=\hbox to \hlblsize
+ {\kern -\lbloutline \vrule width\lbloutline
+ \hskip\hindent \box\lbl_ \hss
+ \vrule width\lbloutline \kern -\lbloutline
+ }%
+ \setbox\lbl_=\vbox
+ {\kern -\lbloutline \hrule height\lbloutline
+ \box\lbl_
+ \hrule height\lbloutline \kern -\lbloutline
+ }%
+ \add_to_row
+ }
+
+%%%%%%% Making a page
+% \lbl_out takes the label constructed in \lbl_ and adds it to the current
+% row. If the row is full, as counted by \h_cnt, the row is added
+% to the current page. Similarly, if \v_cnt indicates a full page,
+% the page is shipped out. (Note: There is no interline glue between
+% rows because of the way \unvbox does (not) affect \prevdepth.)
+% \finish_page ships out any remaining incomplete page.
+% \count1 is used to count the labels (this is only used to report
+% to the user when a page is shipped out).
+
+\newbox\lbl_page
+\newbox\lbl_row
+\newcount\v_cnt
+\newcount\h_cnt
+
+\def\add_to_row
+ {\ifnum\h_cnt=0
+ \global\setbox\lbl_row=\hbox{\kern\hfirst \box\lbl_}%
+ \else\global\setbox\lbl_row=
+ \hbox{\unhbox\lbl_row \kern\hinter \box\lbl_}%
+ \fi
+ \global\advance\h_cnt by 1 \global\advance\count1 by 1
+ \ifnum\h_cnt<\hlbls
+ \else\add_to_page \global\h_cnt=0
+ \fi
+ }
+
+\def\add_to_page
+ {\ifnum\v_cnt=0
+ \global\setbox\lbl_page=\vbox{\kern\vfirst \box\lbl_row}%
+ \else\global\setbox\lbl_page=
+ \vbox{\unvbox\lbl_page \kern\vinter \box\lbl_row}%
+ \fi
+ \global\advance\v_cnt by 1
+ \ifnum\v_cnt<\vlbls
+ \else\shipout\box\lbl_page \global\v_cnt=0 \global\advance\count0 by 1
+ \fi
+ }
+
+\def\finish_page
+ {\ifnum\h_cnt>0 \add_to_page \fi
+ \ifnum\v_cnt>0 \shipout\box\lbl_page \global\advance\count0 by1 \fi
+ }
+
+%%%%%%% Typesetting labels
+% In \setup_lbl the \bgroup is to prevent some changes from continuing
+% after \endlabels (e.g., catcode changes). Of course, we could also have
+% reset them to the (presumed) old values in \endlabels. And anyway,
+% it is a rather unnecessary refinement, since it doesn't make much
+% sence to combine typesetting labels with other things in the same
+% TeX run. We prevent changes of \erroraction while labels are being
+% typeset, since such changes would cause confusion with respect to
+% the log file. (Another unnecessary refinement: if you change the
+% action you deserve what you get.)
+% The \hsize is set properly in case \beforelbl or \afterlbl contains
+% horizontal material (this will be typeset as a normal paragraph).
+% It also allows the use of \line in these token registers.
+
+\def\catcode_lbl{\catcode`\&=12 \catcode`\#=12 }
+
+\def\setup_lbl
+ {\vfill\supereject
+ \ifcase\err_act\or\else
+ \immediate\openout\lbl_log=lblerror.tex %<- significant space
+ \fi
+ \let\beforelines=\lbl_before \let\afterlines=\lbl_after
+ \let\everyline=\lbl_every
+ \let\finishdolines=\endlabels \def\enddolines{\endlabels}%
+ \bgroup
+ \dimen0=\hlblsize \advance\dimen0 by-\hindent
+ \hsize=\dimen0
+ \let\erroraction=\relax \err_cnt=0
+ \h_cnt=0 \v_cnt=0 \global\count1=0
+ \voffset=-1in \hoffset=-1in
+ \catcode_lbl
+ }
+
+\def\endlabels
+ {\finish_page
+ \egroup
+ \close_log
+ }
+
+\def\beginlabels{\setup_lbl \begindolines}
+
+\def\labelfile#1{\setup_lbl \filedolines{#1}\endlabels}
+
+
+%%%%%%% Typesetting bulk letters
+% This is kept quite simple: Labels are read one by one from a file,
+% and consist of a vbox with an hbox for each line. No extra indentations
+% or other frills. After each label has been read, we simply \input the
+% bulk letter. In the letter, \bulkaddress will typeset the label.
+% Just before we input the letter, we set \end=\relax, just in case the
+% letter ends with \bye. (This is better than setting \bye=\relax, since
+% \bye may insert extra material.) The grouping from \filedolines will
+% restore the original \end.
+
+\def\bulk_before{\setbox\lbl_=\vbox\bgroup}
+\def\bulk_every#1{\hbox{#1\strut}}
+
+\def\bulk_after
+ {\egroup % closes \setbox\lbl_=\vbox\bgroup
+ \catcode_plain
+ \let\end=\relax
+ \input\bulk_in %
+ \vfill\supereject
+ \catcode_lbl
+ }
+
+\def\bulkaddress{\copy\lbl_}
+
+\def\bulk#1#2% addresses, letter
+ {\vfill\supereject
+ \edef\catcode_plain{\catcode`\noexpand\&=\the\catcode`\&%
+ \catcode`\noexpand\#=\the\catcode`\#}%
+ \let\beforelines=\bulk_before \let\afterlines=\bulk_after
+ \let\everyline=\bulk_every
+ \catcode_lbl
+ \def\bulk_in{#2}%
+ \filedolines{#1}%
+ \catcode_plain
+ }
+
+
+%%%%%%% Initial values
+% \errorcontextlines (exists in TeX 3.0 and later versions) is set in
+% order to not unnecessarily confuse unexperienced users. Supposedly,
+% the macros above don't cause errors. Any errors are most likely
+% caused by something in \beforelines or \afterlines.
+
+\catcode`\_=\vlbls % restore catcode
+
+\ifx\errorcontextlines\undefined % \then old TeX version
+\else\errorcontextlines=-1
+\fi
+
+\erroraction=2
+\lbloutline=0sp
+\beforelbl={}
+\afterlbl={}
+
+% The following defaults are rather arbitrary, in practice the user
+% always has to set these values.
+\vlblsize=5cm
+\hlblsize=10cm
+\vindent=1.3\baselineskip
+\hindent=0.5cm
+
+\vlbls=5
+\hlbls=2
+\vfirst=1cm
+\hfirst=5mm
+\vinter=2mm
+\hinter=2mm
+
+%%%%%%%
diff --git a/macros/generic/midnight/loop.doc b/macros/generic/midnight/loop.doc
new file mode 100644
index 0000000000..ecd37bcd6a
--- /dev/null
+++ b/macros/generic/midnight/loop.doc
@@ -0,0 +1,144 @@
+% loop.doc --- version 1.0 (15 April 1991)
+% This is the documentation for loop.tex.
+% To read this file, process it with (plain) TeX: tex loop.doc
+% (To do that, you need manmac.tex, which has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1991 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- loop.doc:
+
+\pageno=8 % follows gloss.doc
+
+\manpage loop.tex
+A simple looping construct (meta-macros).
+Version: 1.0 (15 April 1991) (doc: 15 Apr 1991)
+
+The macros in loop.tex are intended to help you write your own
+macros, rather than to typeset text directly. Consequently, it is
+assumed that you have some experience writing macros; In other words,
+assume that this whole section is preceded by a ``dangerous bend'' symbol.
+These macros are kept
+simple and are not very robust: if you decide
+to use them in a different way than described below you are
+entirely responsible for what happens\footnote{$^1$}{Not that the
+author assumes any responsibility even if you {\sl do\/}
+obey the rules.}.
+
+Loop.tex defines an alternative to plain \TeX's |\loop| construct.
+(It can also be used with, e.g., \LaTeX.)
+Plain \TeX's |\loop| is often awkward to use because of the
+limited form of tests in \TeX. The new construct tries to alleviate
+this problem by allowing a more flexible use of tests in the loop.
+To execute a loop, you say |\Loop ... \Pool|\footnote{$^2$}{We use
+initial capital letters to prevent confusion with plain \TeX's |\loop|.
+Although you don't need |\loop| anymore, there may still be macros
+that depend on it (e.g., plain \TeX's tabbing macros).}.
+This will normally
+execute the loop `body', i.e., the commands corresponding to the dots,
+infinitely many times.
+There are two special commands you can use within the loop,
+|\Break| and |\Continue|. When a |\Break| command is
+executed, the rest of the body is ignored, and the loop is terminated.
+Execution of a |\Continue| command also causes the rest of the body
+to be ignored, but then the loop is started again from the beginning.
+
+Both |\Break| and |\Continue| must be followed by a number. This
+number should be the number of |\if...| constructs that are terminated
+by the command. In other words, it is the number of |\fi|'s that
+has to be `executed' to get proper balancing of all |\if...| tests.
+It is somewhat unfortunate that this number has to be supplied,
+but there seems to be no way to close all |\if...| tests automatically.
+Here is an example similar to one from the \TeX book.
+\begintt
+\def\yes{Yes } \def\no{No }
+\Loop\message{Are you happy? }
+ \read-1 to\answer
+ \ifx\answer\yes \Break1
+ \else\ifx\answer\no \Continue2
+ \fi \fi
+ \message{(Please type Yes or No.)}
+\Pool
+\endtt
+At the position of |\Break| the nesting level of |\if...| tests
+is 1, at the position of |\Continue| the level is 2.
+If you forget the number you will (usually) get a `|missing number|' error
+message, but possibly at an unexpected point in the program. The
+wrong number typically results in either an `|Extra \fi|' or
+an `|\if... was incomplete|' message.
+
+There can be any number of |\Break| and |\Continue| commands in
+a loop, although it is wise to have at least one |\Break| command.
+The text following any of these commands up till the |\Pool| at the
+end of the loop must have balanced braces, and the loop body itself
+must also have balanced braces. If this causes a problem, you
+can use |\bgroup| and |\egroup| instead of |{| and |}|. If you
+want to nest two loops, you will have to enclose the inner loop within
+a group. (Incidentally, these restrictions on balancing braces and
+nesting loops also apply to plain \TeX's |\loop| construct.)
+
+\bye
diff --git a/macros/generic/midnight/loop.tex b/macros/generic/midnight/loop.tex
new file mode 100644
index 0000000000..aa6670f14e
--- /dev/null
+++ b/macros/generic/midnight/loop.tex
@@ -0,0 +1,105 @@
+\ifx\LOOP\relax\endinput\else\let\LOOP=\relax\fi % \input only once
+%
+% loop.tex: A simple looping construct (meta-macros).
+% version: 1.0 release: 26 June 1991
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file loop.doc
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% USA
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 26 April 1991: This one.
+% release 15 April 1991: Did not have \long in \Loop, \_break, and
+% \_continue.
+% release 8 Feb 1991: Used \next instead of \Lp_next.
+%
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+{
+\catcode`\_=11 % 11 = letter; to make macros private
+\globaldefs=1
+
+% Code to supply \fi's:
+
+\def\do_fi{\fi\finish_ifs}
+
+\def\finish_ifs
+ {\ifnum\count255>0 %
+ \let\Lp_next=\do_fi
+ \else\let\Lp_next=\relax
+ \fi
+ \advance\count255 by-1 %
+ \Lp_next
+ }
+
+% The loop (tail-recursion does not clog memory):
+
+\long\def\Loop#1\Pool%
+ {\def\Pool{#1\Pool}%
+ \Pool
+ }
+
+% \Break could have been defined as
+% \def\Break#1#2\Pool{{\count255=#1 \finish_ifs}}
+% but this fails if you do
+% \ifnum\count0>5\Break
+% without space after the 5: \Break wil be expanded to see if there
+% are more digits (and expanding \Break means reading its 2nd argument).
+% With the solution below, only \Break is expanded because it starts
+% with \relax which is not a number. Using \afterassignment rather
+% than passing the number as argument gives better error messages.
+
+\def\Break
+ {\relax\afterassignment\_break
+ \bgroup\count255=
+ }
+
+\long\def\_break#1\Pool%
+ {\finish_ifs
+ \egroup
+ }
+
+\def\Continue
+ {\relax\afterassignment\_continue
+ \bgroup\count255=
+ }
+
+\long\def\_continue#1\Pool%
+ {\finish_ifs
+ \egroup
+ \Pool
+ }
+
+} % restore \catcode`\_, \globaldefs
+
diff --git a/macros/generic/midnight/midnight.pdf b/macros/generic/midnight/midnight.pdf
new file mode 100644
index 0000000000..32b936f285
--- /dev/null
+++ b/macros/generic/midnight/midnight.pdf
Binary files differ
diff --git a/macros/generic/midnight/quire.doc b/macros/generic/midnight/quire.doc
new file mode 100644
index 0000000000..4360f2ecaa
--- /dev/null
+++ b/macros/generic/midnight/quire.doc
@@ -0,0 +1,448 @@
+% quire.doc --- version 1.0 (19 January 1991)
+% This is the documentation for quire.tex.
+% To read this file, process it with (plain) TeX: tex quire.doc
+% (To do that, you need manmac.tex, which has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1991 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% Doc history:
+% 10 Sep 1991: Added note about using \nofiles in LaTeX.
+% 10 Jan 1991: First public version
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- quire.doc:
+
+
+\def\picpage#1% single white page with page number
+ {\vbox to 2.7cm{\vskip 0pt plus 5fil
+ \hbox to 2.2cm{\hss #1\hss}%
+ \vskip 0pt plus 1fil
+ }%
+ }
+
+\def\fold
+ {\hbox to 0pt{\hss
+ \vbox to 2.7cm{\vss
+ \hrule height3mm depth0pt width0.5pt
+ \vss\vss
+ \hrule height3mm depth0pt width0.5pt
+ \vss
+ }%
+ \hss
+ }}
+
+\def\picdblpage#1#2% two pages with outlines and fold
+ {\vbox{\hrule
+ \hbox{\vrule
+ \picpage{#1}\fold\picpage{#2}%
+ \vrule
+ }%
+ \hrule
+ }%
+ }
+
+\pageno=1 % first set of the ``Midnight Macros''
+
+\manpage quire.tex
+Macros for making booklets, printing double pages, and printing outlines %
+and crop marks.
+Version: 1.0 (19 January 1990) (doc: 10 Sep 1991)
+
+A quire is a ``set of folded sheets (as of a book)
+fitting one within another'' [Webster's].
+Such a set of sheets forms a little booklet. Larger books usually consist
+of a number of quires, with 20 to 40 pages each. The macros
+in quire.tex help you to turn your own texts into such booklets. (The
+macros can also be used for some other things, such as printing crop
+marks.) Quire.tex is designed to minimize the interference with other
+macro packages, so that, for instance, it can be used with plain \TeX\
+as well as with \LaTeX. You do not need any special programs or special
+equipment to print quires, but it is convenient if you can print pages
+in ``landscape mode.'' Whether you can print in landscape mode depends
+on your device driver and printer (most printers support this), it is
+outside the control of \TeX. The reason for using landscape mode is that,
+because sheets are folded, two pages have to be printed next to each other
+on the same sheet. In ``portrait mode'' this allows only very narrow pages.
+Making quires is
+easier if you have a large version of \TeX\ (i.e., one with lots of memory).
+
+Before we explain what the macros do, let us emphasize what they do not do.
+Quire.tex does {\sl not} change the layout of your pages, look at page numbers,
+print odd and even pages differently, or print small pages. These are all
+things that you have to take care of with other macros or style files.
+What quire.tex does is to take your pages, reorder them, print two per
+sheet, and draw outlines around them. As an example, assume we want
+to make a booklet consisting of five sheets folded together. With two
+pages next to each other, and with double sided printing, this gives
+us a booklet consisting of 20 pages. The first page of the five folded
+sheets is page 1. When we open the booklet we get page 2,
+printed on the back of the same sheet as page 1. Page 2 occupies the
+left-hand side of that sheet. The page on the right-hand side is
+not page 3, which is printed on the next sheet, but page 19. This reordering
+of pages is the main task of quire.tex. For this example, the following
+figure depicts two of the sheets generated by quire.tex (these
+are the last two sheets that are generated).
+
+\goodbreak\midinsert
+\line{\hss\picdblpage{20}{1}\hss\picdblpage{2}{19}\hss}%
+\endinsert
+
+Once again, quire.tex does not look at the page numbers you print.
+What we call here ``page 1'' is simply what the first page of output
+would be if you were not using quire.tex. To make a booklet, the two double
+pages in the figure should be printed on the opposite sides of the same sheet
+of paper. There are two ways of doing that. One is to print all the
+sheets and then use a photocopier to make double sided prints. The second
+is to print all even sheets, walk to your printer and reinsert the
+stack of printed sheets upside down, then print all the odd sheets.
+Many device drivers can be instructed to print only even or odd sheets.
+But in case your installation does not support this, you can say
+|\shonly1| at the beginning of your file to instruct quire.tex to only
+generate odd sheets; |\shonly2| generates only even sheets; and |\shonly0|,
+which is the default, generates both.
+
+Before you can use any of the macros, you have to
+|\input quire|\footnote*{Although quire.tex can be used with \LaTeX,
+we have made no attempts to \LaTeX ify the macros. So yes, in \LaTeX\ you
+use the macros exactly as described here.}. Then
+you give values to some of the parameters (which are discussed later),
+and you can call, for instance, |\quire|. All of this should be done
+preceding the actual text of your file; in \LaTeX\ all of this should
+be put in the preamble. If you are using \LaTeX, you must say
+|\latexquire| somewhere in the preamble, regardless of
+what other macros you are using.
+The macro |\quire| is used to start typesetting
+of a quire. It takes one argument, the number of pages in the quire.
+Hence you have to \TeX\ your document at least once before you use
+|\quire|, to determine the number of pages. That also helps to separate
+errors in your input from problems caused by quire.tex. Say your document
+consists of 19 pages, numbered 1\dots19. When you say
+\begintt
+\quire{19}
+\endtt
+\TeX\ will produce 10 sheets. The first one is sheet 10 with pages 10 and 11,
+the second is sheet 9 with pages 12 and 9, etc. The last sheet has pages
+20 and 1, where page 20 is blank.
+
+This example illustrates that if there are not enough pages for a complete
+quire, \TeX\ will insert empty pages at the end of your text.
+If, on the other hand, there are more pages than fit in a quire,
+\TeX\ will just generate more than one quire. For instance,
+a 250-page book can be printed in 13 quires with |\quire{20}|.
+The mechanism through which \TeX\ supplies extra blank pages at the end
+of your text is called \TeX's ``endgame.'' These extra pages
+are passed to \TeX's output routine, which usually means
+that they will have headlines and footlines. You can bypass the output routine
+by saying |\endquire| at the end of your text, in which case the blank
+pages will really be blank pages (you can say |\endquire| even if you are
+not using |\quire|). In \LaTeX\ you should {\sl not} use
+|\endquire|, it is implied by the |\end{document}| that terminates your file.
+Sometimes you may want to start your text with an empty page. Here are
+two simple ways of generating an empty starting page (in plain \TeX).
+\begintt
+\line{}\vfill\eject % or:
+\shipout\vbox{}
+\endtt
+The method with |\shipout| bypasses the output routine.
+
+Let us turn to the parameters that determine the output of quire.tex.
+You have to take care that you indeed generate small pages.
+The page size is normally determined by |\hsize| and |\vsize|, but
+depending on the macro package you are using, other parameters may
+also be important. However, quire.tex does not look at the values of these
+parameters, they only serve to determine the size of the text area (i.e.,
+the printed part of the page). In the following, ``page'' refers to
+the small pages you print, ``sheet'' refers to the actual sheets of
+paper. We start with the parameters related to pages, which are all
+dimen parameters.
+First there are |\htotal| and |\vtotal|, which should be
+equal to the horizontal and vertical size of the small pages you want.
+For instance, a pocket book has
+$|\htotal| \approx$ 10.5 cm, $|\vtotal| \approx$ 17 cm. Then there are
+|\horigin| and |\vorigin| which describe the ``natural'' offset of the
+text area from the top left corner of the page. These offsets are added
+to the \TeX\ offsets |\hoffset| and |\voffset|. You may wonder why
+there are four parameters to describe the offsets, \TeX\ itself only
+has the latter two. The reason is that, unfortunately, \TeX\ has built in
+extra offsets of 1 inch. That may be right for American ``letter'' size
+paper, but on smaller pages it is generally too
+much. To make scaling of these offsets possible we had to introduce
+two extra parameters for them.
+
+The names of parameters related to sheets all start with \hbox{``|sh|''};
+all but one are dimen parameters.
+Quire.tex draws a number of lines to denote where the actual pages
+are on the sheet. As in the previous figure, lines are drawn around
+pairs of pages. The width is |\shoutline|, so you can make them disappear
+with |\shoutline=0pt|. The two pages are separated by two ``staples,''
+with width |\shstaplewidth| and length |\shstaplelength|. You can make
+them disappear by making the width |0pt|; setting the length to
+|0.5\vtotal| will give you a solid line instead of two staples.
+The outlines are drawn exactly around the pages, the staples on top
+of the two pages. The widths of these lines does not influence the
+width of the pages. Finally, quire.tex draws ``crop marks'' of width
+|\shcrop|. Crop marks are lines that indicate the outlines and center
+of the pages, without actually touching the pages. When you are cutting
+the paper, crop marks are sometimes more convenient than outlines.
+The crop marks are drawn so that, if they were extended, they would
+just be on the page. So they fall within the outlines that are drawn,
+which is easily observable if you make the widths excessive, say 1 cm.
+
+The distance of the top of the sheet to the top of the pages is
+|\shvoffset| plus 1 inch. The pages are centered horizontally,
+therefore there is no parameter for horizontal offset.
+Under the pages, a footline is printed. The footline is determined
+by token register |\shfootline|. By default the sheet number and the
+numbers of the two pages are printed (more about page numbers later),
+as well as the filename.
+The next paragraph explains the remaining four parameters,
+but if you are lucky you don't have to
+set them yourself: They describe the printer you are using, so they
+need only be determined once. Your local installation may have
+macros that set these parameters automatically. Local macros are
+described at the end of this manual section.
+
+\danger In order to center the pages, |\shhtotal| must be set to the
+horizontal size of the sheets. The size is usually not a nice number,
+like 8.5 inch (216 mm), but more likely
+something like 220.1 mm. It is important to get this size right, since
+double sided printing requires properly centered pages. You probably
+have to experiment a bit with double sided pages to get this right,
+because often the printer introduces small inaccuracies.
+If a photocopier is used to turn single sided print into double sided print,
+you may need the parameters |\shhcorrection| and |\shvcorrection|.
+These denote extra offsets which are applied to odd numbered sheets only,
+to compensate for shifts introduced by ``smart'' copiers.
+|\shhcorrection| can sometimes be used to compensate for a wrong value
+of |\shhtotal|, but the author recommends that |\shhtotal| is set
+properly for the printer, and that the correction offsets are only used
+for copiers. If you take a stack of sheets and fold them, the
+outer sheets will have a longer way to go around the bend than the
+inner ones. In an attempt to compensate for that, the pages on each
+sheet are shifted
+outwards with respect to the pages on the next inner sheet, by an
+amount equal to |\shthickness|. Naturally, this parameter should have a
+rather small value.
+
+Consider printing a quire of 20 pages. The first sheet that can be
+printed is sheet number 10 with pages 10 and 11. That means that
+\TeX\ has to store 10 complete pages in memory. If your \TeX\ version
+is small, there may not be enough memory for this, resulting in
+an error message
+\begintt
+TeX capacity exceeded, sorry.
+\endtt
+Luckily, there are some ways to reduce the number of pages that have to
+be stored. We already mentioned the use of |\shonly| to restrict
+output to odd or even sheets only. Doing that halves the number of
+pages that have to be stored. If that is not enough, you
+can use the macro |\makequire| instead of |\quire|. |\makequire|
+takes three arguments. The first argument is the same as for |\quire|,
+namely the number of pages per quire. Let $s$ and $r$ be the second
+and third arguments, respectively. Let $n$ be the number of a sheet
+in the first quire. Then that sheet is only printed if
+$s \leq n < s+r$ (and similarly for following quires).
+This means that at most $r$ pages need to be stored
+(or about half that if you also use |\shonly|). As an example, our
+20 page quire can be printed in three runs with, respectively,
+\begintt
+\makequire{20}{1}{4}
+\makequire{20}{5}{4}
+\makequire{20}{9}{4}
+\endtt
+The runs result in sheets 4\dots 1, 8\dots 5, and 10\dots 9. In the
+last run, the range $r$ is larger than the actual number of sheets,
+but that causes no problems. Also, sheet $s$ need not exist. In fact,
+|\quire{20}| is just an abbreviation for |\makequire{20}{0}{1000}|.
+
+For previewing it is often inconvenient to use |\quire|, because of
+the reordering of pages. But you may still want to see how your
+text fits on the smaller pages. There are two macros which you
+can use instead of |\quire|. |\qtwopages| prints two pages per sheet,
+just like quire, but does not reorder the pages. All parameters mentioned
+before remain valid, except for |\shthickness|. Of course, you can also
+use this if you are not previewing a quire.
+For instance, if you have appropriately scaled
+fonts and you print in landscape mode, the following preamble
+will print your file two pages per sheet.
+\begintt
+\input quire
+\mag=500 % works in LaTeX too
+\qtwopages
+\endtt
+Finally, there is |\qonepage|, which prints just one page per
+sheet as usual. It does however draw outlines (no staples) and crop marks,
+and |\shonly| can also be used.
+
+We claimed that quire.tex would work together with most other
+macro packages. But there is one type of macro that doesn't go well
+with quires, and usually you will have to switch them off when you
+are typesetting a quire. \TeX's primitives for file handling, such
+as |\write|, are only performed when a page is actually shipped out.
+That is often used for the creation of an index or a contents page,
+in order to get the page numbers right. But quire.tex prints two pages
+per sheet, and a sheet has only one ``page number,'' so that such
+methods will most likely get all the page numbers wrong. Worse,
+the pages are shipped out in an unusual order, so that for instance
+a |\write| may take place before the file has been opened. Therefore,
+you should avoid generation of an index or contents page when you are using
+|\quire|. In \LaTeX\ this is done by inserting |\nofiles| in the preamble.
+(For all but the final run you can use |\qonepage|, which
+does not change the page numbers.) Of course, if you want your booklet
+to start with a contents page, then that page has to be generated before
+the final \TeX\ run, since you cannot just rearrange the printed pages.
+
+In |\shfootline|, |\pageno| refers to the sheet number (if you are
+using plain \TeX's definitions); |\firstpageno| is the number
+of the first of the two pages (i.e., the page that was finished first,
+that can be either the left-hand or the right-hand page), and |\secondpageno|
+is the number of the other page. These three numbers are also shipped
+to the |dvi| file, as |\count0|, |\count1|, and |\count2|, respectively.
+When a page is finished but not yet printed on a sheet, the page number
+is displayed on your terminal between parentheses, as in |[(1)]|.
+When sheet number 7 with pages 11 and 14 is finished, |[7.11.14]| is
+displayed.
+
+\ddanger Quire.tex does its job by redefining |\shipout|. Since |\shipout|
+is a \TeX\ primitive, such redefinition is not recommended; normally one
+would redefine the output routine instead. However,
+important parts of the typesetting of a text are often done in the
+output routine, which may well be different for different pages of
+a book. Since quire.tex is supposed to handle the whole book, and since
+it only handles complete pages without changing
+their layout, it seemed that in this particular case redefinition of
+|\shipout| was justified. The new |\shipout| can be used in the same
+way as the original one, except that you should not try to ship out a
+void box (which is a pretty meaningless thing to do anyway).
+Doing that will most likely result in a, seemingly unrelated,
+error message somewhere later in the text. The dangers of using
+|\openout|, |\closeout| and |\write|, without |\immediate|, were
+already explained. Like these file operations, |\special| works
+with ``whatsits'' which are handled when the page is shipped out.
+But as the argument of |\special|
+is expanded immediately, rather than when the page is shipped out, this
+is less likely to cause problems.
+
+\ddanger Quire.tex uses mostly \TeX's primitives, but also a few
+macros defined in plain.tex. The latter are |\newbox|, |\newcount|,
+|\newdimen|, |\newif|, |\newtoks|, |\nointerlineskip|, and
+|\offinterlineskip|, none of which are likely to be redefined by
+other macros. As mentioned before, quire.tex relies on \TeX's endgame
+to generate complete quires. Although the endgame is built in,
+a really devious macro package may disable it.
+This is in fact exactly what happens in \LaTeX's |\end| command,
+which is why we need |\latexquire| (which inserts an implicit
+|\endquire| at the end of the text).
+
+% Note: The next subsection serves as example only. Do NOT change it, even
+% if you have different local definitions. Change the local definitions
+% in the file quire.tex, and see below.
+\subsection Printer definitions. It is convenient if the parameters
+that depend (only) on the
+printer are predefined. As an example, here are some of the
+local definitions for the author's installation. When someone
+wants to use the printer called ``maser,'' all he or she has to
+do to set up those parameters is to say |\Pmaser| or
+|\Pmaserlandscape|. Note that this does not put any information in the
+|dvi| file, the user is still responsible for printing on the correct
+output device. There are similar definitions for other available printers.
+The next subsection lists the local definitions for your installation,
+if any.
+
+\beginlines
+|\def\Pmaser|
+| {\shhtotal=220.02true mm|
+| \shthickness=0.21true mm|
+\goodbreak
+| \message{maser: flip paper so that short sides remain in place, %|
+| align closest right-hand corner in tray.}%|
+| }|
+\medskip
+|\def\Pmaserlandscape|
+| {\shhtotal=281true mm|
+\goodbreak
+| \shthickness=0.21true mm|
+| \message{maser landscape: ...}|
+| }|
+\endlines
+
+% Note: If you have your own local definitions, change the following
+% subsection.
+\subsection Local Caltech definitions. The following macros will set
+the appropriate printer parameters: |\Pmaser|, |\Pmaserlandscape|,
+|\Plaser|, |\Plaserlandscape|, |\Phaser|, |\Phaserlandscape|,
+|\canon| (for the copier). For double-sided printing on maser, flip
+the pages so that the short edges remain in place. Align the closest
+right-hand corner in the tray. But for printing in landscape mode,
+flip the pages so that the long edges remain in place. On haser, you
+should rotate the pages 180$^\circ$, but keep the text side up. You
+have to reorder the pages (or print the second time with |gtex -t|). Haser
+seems to have problems keeping the paper straight, which makes
+double-sided printing hard.
+
+
+\bye
diff --git a/macros/generic/midnight/quire.tex b/macros/generic/midnight/quire.tex
new file mode 100644
index 0000000000..f9218581a7
--- /dev/null
+++ b/macros/generic/midnight/quire.tex
@@ -0,0 +1,541 @@
+\ifx\QUIRE\relax\endinput\else\let\QUIRE=\relax\fi % \input only once
+%
+% quire.tex: Macros for making booklets, printing double pages, and
+% printing outlines and crop marks.
+% version: 1.0 release: 19 January 1991
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file quire.doc
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% USA
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 19 Jan 1991: This one.
+%
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+%%%%%%%%%%%%%%% registers accessible by the user
+
+% dimens related to pages:
+\newdimen\vorigin
+\newdimen\horigin
+\newdimen\vtotal
+\newdimen\htotal
+% also used: dimens \voffset, \hoffset
+
+% dimens related to sheets
+\newdimen\shoutline
+\newdimen\shstaplewidth
+\newdimen\shstaplelength
+\newdimen\shcrop
+\newdimen\shvoffset
+\newdimen\shhtotal
+\newdimen\shthickness
+\newdimen\shvcorrection
+\newdimen\shhcorrection
+
+% token register related to sheets
+\newtoks\shfootline
+
+%%%%%%%%%%%%%%% the implementation
+
+% Private identifiers are prefixed with `q_'; in the comments below,
+% this prefix is omitted for readability.
+
+\shoutline=\catcode`_ sp % minor trick to remember the original catcode
+\catcode`_=11 % letter
+
+%%%%% The stack
+% A stack of boxes is needed to store pages that cannot be printed yet.
+% The stack is formed by \stackbox, an hbox storing the stacked boxes,
+% and \stacktop, the top box on the stack. The stack top can be accessed
+% by \copy\stacktop or \box\stacktop, but the latter should only be
+% used if the next stack operation is \pop. There is no stackcounter
+% implemented, because we don't need it here.
+
+\newbox\q_stackbox % an hbox keeping the stacked boxes but one
+\newbox\q_stacktop % the topmost box
+
+\def\q_push#1% #1 = a box
+ {\global\setbox\q_stackbox=
+ \hbox{\unhbox\q_stackbox \box\q_stacktop}%
+ \global\setbox\q_stacktop=#1%
+ }
+
+\def\q_pop
+ {\global\setbox\q_stackbox=
+ \hbox{\unhbox\q_stackbox \global\setbox\q_stacktop=\lastbox}%
+ }
+
+
+%%%%% Handling pages
+% \makepage takes a box representing the printed material (this box is the
+% argument of \shipout), and makes it into a page. A page is represented
+% by an hbox with height \vtotal, width \htotal, and depth 0.
+
+\def\q_makepage#1% #1 = textpage, return = an hbox (\vtotal+0)*\htotal
+ {\hbox to\htotal
+ {\boxmaxdepth=0pt
+ \advance\vorigin by\voffset
+ \advance\horigin by\hoffset
+ \kern\horigin
+ \vbox to\vtotal
+ {\kern\vorigin
+ #1%
+ \vss
+ }%
+ \hss
+ }%
+ }
+
+% \doublepage takes two pages produced by \makepage, and puts them next
+% to each other in a vbox. Between the two pages there is two times the
+% space specified by \thickoffset. \doublepage draws lines around the
+% produced vbox, and draws `staples' in the center.
+
+\newdimen\q_thickoffset
+
+\def\q_doublepage#1#2% #1 and #2 are page boxes,
+ % return = vbox ((\vtotal+2\shoutline)+0)*
+ % (2(\htotal+\thickoffset+\shoutline))
+ {\vbox{\vbox to0pt{\vss\q_vcrop\kern3mm}%
+ \hrule height\shoutline depth0pt
+ \hbox{\hbox to0pt{\hss\q_hcrop\kern3mm}%
+ \vrule width\shoutline
+ #1%
+ \kern\q_thickoffset
+ \q_fold
+ \kern\q_thickoffset
+ #2%
+ \vrule width\shoutline
+ \hbox to0pt{\kern3mm\q_hcrop\hss}%
+ }%
+ \hrule height\shoutline depth0pt
+ \vbox to0pt{\kern3mm\q_vcrop\vss}%
+ }%
+ }
+
+% \fold returns an hbox containing the two `staples'. The hbox has
+% width 0 so that it does not interfere with the separation between
+% double pages.
+
+\def\q_fold % return = an hbox (\vtotal+0)*0
+ {\hbox to0pt
+ {\divide\vtotal by 4
+ \advance\vtotal by-0.5\shstaplelength
+ \hss
+ \vbox{\kern\vtotal
+ \hrule width\shstaplewidth height\shstaplelength depth0pt
+ \kern 2\vtotal
+ \hrule width\shstaplewidth height\shstaplelength depth0pt
+ \kern\vtotal
+ }%
+ \hss
+ }%
+ }
+
+% \vcrop returns an hbox containing the three vertical crop marks,
+% \hcrop a vbox with the two horizontal marks.
+
+\def\q_vcrop % return = an hbox (15mm+0)*(2(\htotal+\thickoffset+\shoutline))
+ {\hbox{\kern\shoutline
+ \hbox to0pt{\vrule height15mm depth0pt width\shcrop\hss}%
+ \kern\htotal \kern\q_thickoffset
+ \hbox to0pt{\hss\vrule height15mm depth0pt width\shcrop\hss}%
+ \kern\q_thickoffset \kern\htotal
+ \hbox to0pt{\hss\vrule height15mm depth0pt width\shcrop}%
+ \kern\shoutline
+ }%
+ }
+
+\def\q_hcrop % return = a vbox (vtotal+0)*15mm
+ {\vbox{\vbox to0pt{\hrule width15mm height\shcrop depth0pt\vss}%
+ \nointerlineskip
+ \kern\vtotal
+ \vbox to0pt{\vss\hrule width15mm height\shcrop depth0pt}%
+ }%
+ }
+
+
+%%%%% Shipout routines
+% Suppose Q is the number of pages per quire (rounded upwards to the
+% nearest multiple of 4), then there are Q/2 sheets per quire. The first
+% Q/2 pages have to be stacked, which is done by the shipout routine
+% \collect. The next Q/2 pages have to be combined with the stacked ones
+% into double pages, which are then printed. This is done by the shipout
+% routine \combine. \goal is the number Q/2, \sheetnr is used to count the
+% sheets of the current quire, \qnr counts sheets in completed quires
+% (\count0 is set to the actual sheet number when a sheet is shipped out).
+% The current shipout routine is held in \ship, \shipbox is the box
+% that must be shipped out. \oldship is the original \shipout.
+% In order to print partial quires if there is not enough memory to
+% store Q/2 pages, the user can specify a range of sheets that should
+% be printed. This range is tested with \ifrange; sheets that fall
+% outside the range are counted, but otherwise ignored.
+%
+% Normally, \shipout resets \deadcycles to 0 and a call of the output
+% routine (by TeX's page-breaking mechanism) increments it. We do not
+% want to reset \deadcycles until enough pages for a quire have been
+% collected, because as long as \deadcycles is not 0, TeX will produce
+% more pages. We cannot allow it to be continuously incremented either,
+% since TeX gives an error message if it becomes too high. Therefore,
+% we set it to 1 if we need more pages. (Actually, the algorithm below
+% always requires a full quire, even if only a partial one is printed.)
+%
+% In \shfootline we want to be able to print the page number of the
+% actual pages. To save the page number, we use a ``dirty trick''
+% (the only one in these macros, as far as I can tell): we push a box
+% with the pagenumber as width on the stack. We recover the pagenumber by
+% using that width as a count, which replaces the dimen (\wd) by its
+% value in sp. The pagenumbers are also shipped out as \count1 and 2.
+
+\newcount\q_sheetnr
+\newcount\q_qnr
+
+\newif\ifq_range
+
+\newbox\q_shipbox
+
+\def\q_collect
+ {\message{[(\the\count0)]}%
+ \global\advance\q_sheetnr by1 \q_checkrange
+ \ifq_range
+ \q_push{\q_makepage{\box\q_shipbox}}%
+ \q_push{\hbox to\count0 sp{}}% dirty trick
+ \fi
+ \global\deadcycles=1
+ \ifnum\q_sheetnr=\q_goal
+ \global\q_thickoffset=0pt
+ \global\let\q_ship=\q_combine
+ \fi
+ }
+
+\def\q_combine
+ {{\ifq_range
+ \count1=\wd\q_stacktop \q_pop % \firstpageno
+ \count2=\count0 % \secondpageno
+ \ifodd\q_sheetnr % stacktop is an odd page
+ \q_print{\q_makepage{\box\q_shipbox}}{\box\q_stacktop}%
+ \else\q_print{\box\q_stacktop}{\q_makepage{\box\q_shipbox}}%
+ \fi
+ \q_pop
+ \else\message{[(\the\count0)]}%
+ \fi
+ \ifodd\q_sheetnr\global\advance\q_thickoffset by\shthickness\fi
+ \global\advance\q_sheetnr by-1 \q_checkrange
+ \ifnum\q_sheetnr=0
+ \global\advance\q_qnr by\q_goal
+ \global\let\q_ship=\q_collect
+ \global\deadcycles=\q_cycles
+ \else\global\deadcycles=1
+ \fi
+ }}
+
+\def\q_print#1#2% two page boxes
+ {{\count0=\q_qnr \advance\count0 by\q_sheetnr
+ \setbox0=\hbox to\shhtotal
+ {\hss
+ \boxmaxdepth=0pt
+ \vbox{\offinterlineskip
+ \q_doublepage{#1}{#2}%
+ \kern1pc
+ \hbox{\kern\q_thickoffset
+ \hbox to 2\htotal{\the\shfootline}%
+ }%
+ }%
+ \hss
+ }%
+ \hoffset=-1truein % defeat the annoying 1 inch offset
+ \voffset=\shvoffset
+ \ifodd\count0
+ \advance\hoffset by\shhcorrection
+ \advance\voffset by\shvcorrection
+ \fi
+ \q_oldship\box0
+ \xdef\q_cycles{\the\deadcycles}%
+ }}
+
+
+%%%%% shipout
+% This is perhaps the most obscure part, although it actually has little
+% to do with the problem at hand.
+% What I would have liked to do is define the above \collect and \combine
+% as taking a parameter #1 and then use #1 instead of \shipbox. Then
+% we could just say \let\shipout=\collect etc. Unfortunately, that doesn't
+% work: The actual \shipout is not a macro but a built-in command that
+% must be followed by a <box>. As a result, \shipout\box0 works
+% fine, but \shipout{\box0} generates an error (because the first `{' is
+% not the start of a <box>). On the other hand, \collect\box0 would make
+% #1 -> \box instead of \box0, and therefore wouldn't work; only
+% \collect{\box0} would work. It really seemed highly preferrable to make
+% the shipout replacements work in the same way as the original. Therefore,
+% \boat will read a box and put it in \shipbox, and then call \ship.
+% This has the additional advantage that the box is actually constructed
+% before the shipout replacement does anything (if you do
+% \collect{\hbox {...}} the box is only constructed when #1 is used).
+% The routine \boat must be followed by a <box> because of the \setbox.
+% Again, I would have liked to do
+% \def\boat{\afterassignment\ship\setbox\shipbox=}
+% but \afterassignment behaves different for a <box> of the form
+% \hbox {...} than for one of the form \box0. \tstship tests whether
+% the assignment has actually taken place, or whether we are at the
+% beginning of an \hbox {<here> ...} etc. This way of testing
+% is not perfect, it doesn't work if you try to ship out a void box. However,
+% that is a strange thing to do, and this is by far the easiest solution
+% I could come up with.
+
+\def\q_boat
+ {{\setbox255=\box\q_shipbox}% makes \shipbox void
+ \afterassignment\q_tstship
+ \global\setbox\q_shipbox= % \boat must be followed by a <box>
+ }
+
+\def\q_tstship
+ {\ifvoid\q_shipbox\aftergroup\q_ship
+ \else\q_ship
+ \fi
+ }
+
+%%%%% Public routines for making quires
+% The routine that sets up printing quires is \makequire. It takes 3
+% arguments, the number of pages per quire (Q before rounding), the
+% number of the first sheet in the printing range, and the extend
+% (in sheet numbers) of the printing range. It uses these numbers to
+% define \checkrange, used by the output routines.
+% If there is sufficient memory to print a full quire, then \quire
+% can be used instead of \makequire. \quire only takes the number of
+% pages.
+
+\def\q_init
+ {\global\q_sheetnr=0\global\q_qnr=0
+ \global\let\q_oldship=\shipout
+ \global\let\shipout=\q_boat
+ \xdef\q_cycles{\the\deadcycles}%
+ \global\let\endquire=\q_endquire
+ }
+
+\def\makequire#1#2#3% #1 = nr of pages, #2 = first sheet, #3 = size of range
+ {{\count0=#1%
+ \advance\count0 by3 \divide\count0 by4 \multiply\count0 by2
+ \xdef\q_goal{\the\count0}%
+ \count0=#2%
+ \count1=#3\advance\count1 by\count0 \advance\count1 by-1
+ \let\nox=\noexpand
+ \xdef\q_checkrange
+ {\nox\ifnum \q_sheetnr < \the\count0
+ \nox\global\nox\q_rangefalse
+ \nox\else\nox\ifnum \the\count1 < \q_sheetnr
+ \nox\global\nox\q_rangefalse
+ \nox\else \nox\global\nox\q_rangetrue
+ \nox\q_parity
+ \nox\fi\nox\fi
+ }%
+ \q_init
+ \global\let\q_ship=\q_collect
+ }}
+
+\def\quire#1% #1 = nr of pages
+ {\makequire{#1}{0}{1000}%
+ }
+
+% \endquire can be used to finish the quire before the end of the
+% input is reached. It ships out the current page, then ships out empty
+% boxes until the quire is finished.
+
+\let\endquire=\relax % if \endquire is used when \quire is not
+
+\def\q_endquire
+ {{\vfill\supereject
+ \loop
+ \ifnum\q_sheetnr>0 \shipout\vbox{}%
+ \repeat
+ \global\let\shipout=\q_oldship
+ }}
+
+% Normally both even and odd sheets are printed. However, one can surpress
+% one class by using \shonly#1. If #1 = 0, both are printed. Otherwise
+% only sheets with the same parity as #1 are printed.
+
+\def\shonly#1% a number
+ {\ifnum #1=0
+ \gdef\q_parity{}%
+ \else\ifodd#1%
+ \gdef\q_parity{\ifodd\q_sheetnr\else\global\q_rangefalse\fi}%
+ \else\gdef\q_parity{\ifodd\q_sheetnr\global\q_rangefalse\fi}%
+ \fi\fi
+ }
+
+% In LaTeX, \end is redefined to set \deadcycles to 0 before it does the
+% actual \end. This means that the quire is not actually finished if the
+% text doesn't have enough pages (see the earlier discussion about
+% \deadcycles). You cannot solve this by using \endquire, because then
+% not all output is actually finished (also because of various LaTeX
+% definitions). Therefore, in \latexquire, we redefine \@@end, which is
+% what LaTeX thinks is the original \end, to do an \endquire just before
+% the actual \end.
+
+{
+\catcode`@=11
+\gdef\latexquire
+ {\global\let\q_end=\@@end
+ \gdef\@@end{\endquire\q_end}%
+ }
+}
+
+%%%%% Some extras
+% Quires are not so easy to preview. Therefore we also define
+% \qtwopages for printing double pages (without reordening them) and
+% \qonepage for printing single pages (with outlines etc.). Most of
+% the needed routines were already there anyway.
+% \two is the shipout routine used for \qtwopages. It uses \qnr to
+% count pages, \sheetnr to distinguish between the first and the second
+% page of a pair. (We count with \qnr because \endquire wants \sheetnr
+% to be 0 at the end. But note that \parity looks at \sheetnr to determine
+% whether the page must be printed.
+
+\def\q_two
+ {{\ifodd\q_sheetnr % second page
+ \global\q_sheetnr=0
+ \ifq_range
+ \count1=\wd\q_stacktop \q_pop % \firstpageno
+ \count2=\count0 % \secondpageno
+ \q_print{\box\q_stacktop}{\q_makepage{\box\q_shipbox}}%
+ \q_pop
+ \else\message{[(\the\count0)]}%
+ \fi
+ \global\deadcycles=\q_cycles
+ \else % first page
+ \message{[(\the\count0)]}%
+ \global\advance\q_qnr by1
+ \global\q_sheetnr=\q_qnr
+ \global\q_rangetrue \q_parity
+ \ifq_range
+ \q_push{\q_makepage{\box\q_shipbox}}%
+ \q_push{\hbox to\count0 sp{}}% that same dirty trick again
+ \fi
+ \global\deadcycles=1
+ \global\q_sheetnr=1
+ \fi
+ }}
+
+\def\qtwopages
+ {\q_init
+ \global\let\q_ship=\q_two
+ \global\q_thickoffset=0pt
+ }
+
+% \one is the output routine for \qonepage. \qnr is used to count
+% the pages (again because of \endquire).
+
+\def\q_one
+ {{\global\advance\q_qnr by1
+ \global\q_sheetnr=\q_qnr
+ \global\q_rangetrue \q_parity
+ \global\q_sheetnr=0
+ \ifq_range
+ \count1=\count0 \count2=0
+ \divide\htotal by2
+ \q_print{\q_makepage{\box\q_shipbox}}{\q_makepage{}}%
+ \else\message{[(\the\count0)]}%
+ \fi
+ \global\deadcycles=\q_cycles
+ }}
+
+\def\qonepage
+ {\q_init
+ \global\let\q_ship=\q_one
+ \global\q_thickoffset=0pt
+ \global\let\q_fold=\relax
+ }
+
+% restore \catcode`_ to whatever it was
+
+\catcode`_=\shoutline
+
+\countdef\firstpageno=1
+\countdef\secondpageno=2
+
+\shonly0 % to make sure that \parity is defined
+
+%%%%% Initial values for user parameters
+
+\shfootline={\tenrm\qquad\jobname\qquad\number\count0{} (\number\count1,
+ \number\count2)\hfil}
+
+\shhtotal=22in
+\shthickness=.2mm
+\shvcorrection=0pt
+\shhcorrection=0pt
+
+\shvoffset=0pt
+\shoutline=1.5pt
+\shstaplewidth=1.5pt
+\shstaplelength=2cm
+\shcrop=3pt
+
+\vorigin=1in
+\horigin=1in
+
+\htotal=8.5in
+\vtotal=11in
+
+%%%%% Local definitions
+% The above is the standard file quire.tex.
+% CHANGE: What follows are local definitions; you should replace them with
+% appropriate values for your own installation.
+
+\def\Pmaser
+ {\shhtotal=220.02true mm
+ \shthickness=0.21true mm
+ \message{maser: flip paper so that short sides remain in place, %
+ align closest right-hand corner in tray.}%
+ }
+
+\def\Pmaserlandscape
+ {\shhtotal=281true mm
+ \shthickness=0.21true mm
+ \message{maser landscape: flip paper so that long sides remain in place, %
+ align closest right-hand corner in tray.}%
+ }
+
+\def\Phaser
+ {\shhtotal=216.4truemm
+ \shthickness=0.21truemm
+ \message{haser: rotate (but do not flip) pages 180 degrees, and reorder.}
+ }
+
+\def\Phaserlandscape
+ {\shhtotal=283truemm
+ \shthickness=0.21truemm
+ \message{haser landscape: do not flip or rotate pages, but reorder them.}
+ }
diff --git a/macros/generic/midnight/styledef.doc b/macros/generic/midnight/styledef.doc
new file mode 100644
index 0000000000..c2991cbc59
--- /dev/null
+++ b/macros/generic/midnight/styledef.doc
@@ -0,0 +1,309 @@
+% styledef.doc --- version 1.0 (16 April 1991)
+% This is the documentation for styledef.tex.
+% To read this file, process it with (plain) TeX: tex styledef.doc
+% (To do that, you need manmac.tex, which has
+% the macros for typesetting the TeXbook, as explained in appendix E.
+% It comes free with the standard distribution of TeX.)
+%
+% NOTE: Processing this file with TeX will create empty files
+% index.tex and answers.tex in your directory. And if you
+% have a file pages.tex in your directory, TeX will probably
+% get very confused.
+% The manmac format will try to load a font called cmman; if
+% TeX complains that it cannot find that font you can savely
+% ignore that, since the font is not actually used.
+%
+% This file: copyright (c) 1991 Marcel van der Goot.
+% You may redistribute this file and printed versions of it.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% (818) 356--4603
+
+% ------ definitions for manual pages:
+% The documentation is typeset using Knuth's ``manmac'' macros, with a
+% few additional things defined here. You are free to use or adapt these
+% extra definitions.
+
+\input manmac % the macros used for typesetting The TeXbook (appendix E)
+\catcode`^=7 % manmac makes ^ active for creating an index
+ % we don't make an index, and we need ^ to be non-active
+
+{\catcode`\^^M=12 \endlinechar=-1 % 12 = other
+\long\gdef\manpagehead#1^^M#2^^M#3^^M^^M% tex-file, description, version
+ {\egroup % matches \bgroup in \manpage
+ \par\vfill\eject
+ \edef\rhead{\manualname: #1\unskip}%
+ \setbox1=\hbox{\titlefont #1\quad}%
+ \setbox3=\vtop{\advance\hsize by-\wd1 \parindent=0pt \raggedright
+ #2\par
+ #3\par
+ \cnotice
+ }%
+ \line{\box1\box3}%
+ \bigskip\bigskip\bigskip\noindent
+ }%
+} % restore \catcode`\^^M
+
+\outer\def\manpage
+ {\bgroup\catcode`\^^M=12
+ \manpagehead
+ }
+
+\hsize=6.5in\vsize=8.9in % default plain TeX values
+\pagewidth=\hsize \pageheight=\vsize
+
+\def\cnotice{Copyright \copyright\ 1991 Marcel R. van der Goot}
+\def\manualname{Midnight Macros}
+
+% LaTeX logo, from latex.tex (except for the capital `A': manmac
+% doesn't have a real smallcaps font)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\tenpoint
+
+% (end of extra definitions)
+
+% -------------------- styledef.doc:
+
+\pageno=14 % follows labels.doc
+
+\manpage styledef.tex
+styledef.tex: Macros to selectively input parts of a file.
+Version: 1.0 (16 April 1991) (doc: 19 Sep 1991)
+
+Consider the following situation: You write a set of \TeX\ macros
+to typeset letters. These macros must set fonts, margins, offsets, etc.
+However, you want to use different styles for different types of letters.
+For instance, a short letter may need extra white space at the top to
+get a full page, whereas this is not needed for a letter several pages
+long. And a business letter has a standard header, with subject and
+references, whereas a small note to a friend only has a date. Probably
+the macros for the different styles have a lot in common, a reason to put
+them all in one file. But the different styles may have some conflicting
+definitions, of which you only want to include one.
+Styledef.tex\footnote*{You also need Midnight/dolines.tex and
+Midnight/loop.tex, which will be |\input| automatically.}
+provides
+some macros to |\input| from a file only parts belonging to a particular
+``style.'' (Partial inclusion can also be useful for other things than
+styles; see the end of this manual section for an example.)
+
+Before we explain the macros from styledef.tex, let us look at two other
+solutions. First, say the only difference between styles ``wide'' and
+``narrow'' is the width of the text. Then we can write macros |\widestyle|
+and |\narrowstyle| that set the appropriate width. As long as the differences
+between styles are small and easily parametrized, this method works fine.
+If there are many differences, however, the macros for setting the style
+soon get very large. Furthermore, it is hard too share parts of styles.
+
+A second method is the one used by \LaTeX. One makes one file ``letter.sty''
+with all the common definitions for letters; an additional file is made
+for each style. \LaTeX's |\documentstyle| macro is then used to include
+the proper files. E.g., one could write
+\begintt
+\documentstyle[business,narrow]{letter}
+\endtt
+to write a letter with the ``business'' and ``narrow'' style options.
+This method allows sharing of common definitions, and also allows the
+combination of different style options. The disadvantage is that it soon
+leads to a very large number of files, many of them with only a few
+definitions.
+
+With the macros in styledef.tex, you would use only one or two files.
+Typical would be to have one file, ``letter.tex,'' with all the common
+definitions for letters, and one file, ``letter.style,'' with all the
+different styles. Only some parts of the latter file are included,
+through the macros below. Alternatively, everything can be put in a single
+file. (Using two files has the advantage that ``letter.tex'' can be shared
+by several users, who each have there own personalized ``letter.style.'')
+Styledef.tex is of course especially useful with plain \TeX, since that does
+not have an equivalent mechanism. However, the macros can also be used
+with \LaTeX; later on we describe how to
+make the |\documentstyle| command interact with the styledef macros.
+
+First we describe how to |\input| only parts of a file. In order to use
+any of these macros, you first have to |\input styledef|. Then you have to
+allocate one or more ``style registers'': a style register called
+``|\myst|'' is allocated with the command
+\begintt
+\newstyle\myst
+\endtt
+
+You can give a new value to a style register through the |\setstyle| command.
+It takes a style register and a list of styles as arguments. E.g.,
+\begintt
+\setstyle\myst{business, narrow}
+\endtt
+For this command, as for all others, a style list is a list of style names
+separated by spaces and/or commas; the whole list must be enclosed in braces.
+The style names
+themselves can be any names that are meaningful to the macro package you are
+using. The |\addstyle| command is used in the same way as |\setstyle|, but
+it adds one or more styles to the style register without removing the old
+contents. You can use |\the\myst| to get the contents of the style register,
+and style registers can be assigned to each other using `|=|'.
+The last operation involving style registers is |\readstyle|. It takes
+a style register and a file name: The command
+\begintt
+\readstyle\myst{letter.style}
+\endtt
+will |\input| file letter.style, but includes only those parts of it that
+belong to one of the styles in register |\myst|. That is all that is needed
+to selectively |\input| a file. The other macros from styledef.tex and the
+remainder of this manual section describe how to indicate in a file like
+letter.style which parts belong to which styles. If you don't intend to
+create such files yourself, there is no need to read on.
+
+There are only three commands that govern which parts of a file belong
+to a particular style: |\styledef|, |\negstyledef|, and |\endstyle|.
+The first two are followed by a brace-enclosed list of styles (but not
+by a style register). When a file is read with |\readstyle|, the file
+is just |\input| by \TeX. However, when in that file a command
+\begintt
+\styledef{business, long}
+\endtt
+is encountered, \TeX\ checks whether the style register that is used
+with |\readstyle| contains style ``business'' or style ``long.'' If at
+least one of them is contained in the register, \TeX\ continues to input
+the file. But if none of the styles match, \TeX\ skips lines of the file until
+an |\endstyle| command is encountered. |\negstyledef| has exactly the
+opposite effect: if any style matches, the file is skipped till the next
+|\endstyle| command; only if no style matches is this part of the file
+included. The |\endstyle| command must occur on a line by itself, with nothing,
+not even a comment, following it. The |\endstyle| command stops \TeX\ from
+skipping text; if it is encountered when \TeX\ is not skipping text, it
+is equivalent to |\relax|.
+
+Text that is not enclosed by a |\styledef| \dots |\endstyle| (or |\negstyledef|
+equivalent) is always included. |\styledef| commands can be used within
+each other's range, but they do not actually nest: when part of the text is
+skipped, skipping always stops at the first |\endstyle|; any intervening
+|\styledef| commands are also skipped. E.g.,
+\begintt
+\styledef{business}
+\negstyledef{narrow}
+ ...
+\endstyle
+\endtt
+The text corresponding to `|...|' (which does not include any |\endstyle|)
+is only included if the style register contains style ``business'' and does
+not contain ``narrow.'' If style ``business'' is not contained in the
+register, the |\negstyledef| command as well as the `|...|' are skipped.
+As a catch-all you may want to put an |\endstyle| at the end of the included
+file: if you missed an |\endstyle| somewhere, this catch-all will at
+least restrict the effects to this file.
+
+\danger The |\readstyle| command uses an internal style register to store
+which styles must be included. Therefore, if a file which is being read with
+|\readstyle|, uses |\readstyle| to read yet another file, the original list
+of styles will be lost. Although this situation seldomly occurs, there
+is a command |\savereadstyle| which takes a style register as argument and
+saves the internal style list in this register. Of course, if the second
+file should be read with exactly the same style list, you should just use
+|\input| instead of |\readstyle|. To restore the original style list, you
+use |\setreadstyle|, which also takes a style register as argument.
+|\setreadstyle| can also be used instead of |\readstyle|, if you want to
+select certain parts of the current file rather than |\input| a different
+file.
+
+\danger Style names can be built from any characters, except for spaces,
+commas, dots, and some characters with a special meaning to \TeX\ (e.g.,
+braces, hash signs (|#|), and percentage signs).
+Also, characters in a style name must have the same catcode in the
+|\styledef| command as in the |\setstyle| command.
+When a |\styledef| or
+|\negstyledef| command is encountered, the following conditions must hold:
+The only escape character (catcode 0) is `|\|'; the only grouping characters
+(catcodes 1 and 2) are `|{|' and `|}|'; the only parameter character (catcode
+6) is `|#|'; and the only comment character (catcode 14) is `|%|'. After the
+|\styledef| command these catcodes may be changed, as long as the conditions
+hold again when the next |\styledef| is encountered. These particular
+catcode assignments are so standard that this rule is unlikely to ever cause
+problems.
+
+Suppose you have written a file letter.tex, which is to be used by several
+people. You also have a file letter.style with some standard styles; people
+can copy and change this file to suit their own needs. To make life
+easier for those who only want to use your standard styles, you may not want
+to force them to learn about styledef.tex. Instead, you can define a macro
+|\style| which always reads a file with name letter.style. Its usage would
+be:
+\begintt
+\input letter
+\style business, long, narrow.
+ ...
+\endtt
+so that users need not be concerned about style registers etc. Here is
+part of an appropriate letter.tex:
+\beginlines
+|\input styledef|
+\nobreak
+|\newstyle\letterstyle|
+\medskip
+|\def\style#1.% terminate the argument with a dot|
+\nobreak
+| {\setstyle\letterstyle{#1}|
+| \readstyle\letterstyle{letter.style}|
+\nobreak
+| }|
+\endlines
+
+\ddanger Something similar can be done with \LaTeX's |\documentstyle|, provided
+you know which styles can appear in letter.style. This is done as follows:
+first, rename letter.tex to letter.sty, so that \LaTeX\ can read it. Then
+add the following to the end of that file:
+\begintt
+\newstyle\lst
+\def\ds@business{\addstyle\lst{business}}
+\def\ds@narrow{\addstyle\lst{narrow}}
+ ... % same for every style
+\@options
+\readstyle\lst{letter.style}
+\endtt
+You can then write |\documentstyle[narrow]{letter}|. \LaTeX\ takes this
+as a command to read letter.sty. The |\@options| command causes \LaTeX\ to
+execute, for every option `xyz,' the command |\ds@xyz|, if it exists. All
+options for which this command does not exist lead to the input of a file
+xyz.sty, so that standard \LaTeX\ options can still be used. Note that
+letter.sty is here the main style file (only there can |\@options| be used);
+be warned that it is not easy to write a main style file that satisfies all
+of \LaTeX's assumptions.
+
+Although we have suggested that these macros are suitable to handle different
+``styles,'' selective inclusion can also be useful in contexts unrelated
+to styles. For instance, you may write a paper which has some details and
+speculations which are not relevant for every reader.
+You can write the paper like this:
+\beginlines
+| ... % relevant thoughts|
+\goodbreak
+|\styledef{details}|
+| ... % messy details|
+|\endstyle|
+\goodbreak
+|\negstyledef{details}|
+|Details are left as an exercise for the reader.|
+|\endstyle|
+\goodbreak
+| ... % important stuff|
+|\styledef{speculations}|
+| ... % wild fantasies|
+|\endstyle|
+\endlines
+If you want to print a version with speculations but without details, you
+can start the file with
+\begintt
+\newstyle\print
+\setstyle\print{speculations}
+\setreadstyle\print
+ ...
+\endtt
+
+\bye
diff --git a/macros/generic/midnight/styledef.tex b/macros/generic/midnight/styledef.tex
new file mode 100644
index 0000000000..8de7650d5e
--- /dev/null
+++ b/macros/generic/midnight/styledef.tex
@@ -0,0 +1,208 @@
+\ifx\STYLEDEF\relax\endinput\else\let\STYLEDEF=\relax\fi % \input only once
+%
+% styledef.tex: Macros to selectively input parts of a file.
+% version: 1.0 release: 16 April 1991
+%
+% copyright (c) 1991 Marcel R. van der Goot
+% You can use these macros to typeset documents. You may
+% distribute this file freely, provided that you also distribute
+% the accompanying documentation.
+% You may make changes to this file, or extract portions
+% of it for inclusion in other files, provided that
+% (1) you change the name of the file;
+% (2) you give proper credit and include copyright
+% information where applicable;
+% (3) explain how an unchanged version can be obtained; and
+% (4) document the usage of your macros/changes (if usage
+% of your macros is not worth documenting, they must not
+% be worth using).
+% You are not allowed to use the name ``Midnight Macros'' for
+% any changed files.
+% The above rules for making changes do not apply where it
+% is explicitly noted in this file that something can be changed
+% to conform to your local installation.
+%
+% USAGE:
+% See the file styledef.doc.
+% You need Midnight/dolines.tex and Midnight/loop.tex to use these macros.
+%
+% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex
+% (use anonymous ftp). Also in various archives.
+%
+% Caltech, Pasadena --- Marcel van der Goot
+% marcel@cs.caltech.edu
+% Caltech 256--80
+% Pasadena, CA 91125
+% USA
+% (818) 356--4603
+%
+
+% update history:
+% version 1.0: This one.
+% release 16 April 1991: the original (this one)
+%
+
+%%%%%% CODE: (you don't need to read this to use the macros)
+
+\edef\next{\the\catcode`\_} % to remember that catcode
+\catcode`\_=11 % 11=letter (for private macros)
+
+%%%%%%%%%%%%%%%%%%%% the current style list
+% A style list is represented by a token register. The register is either
+% empty or contains a sequence of words separated by single commas (no spaces).
+% A non-empty list starts with a comma. A list denotation is a list of words
+% separated by commas and spaces.
+% \setstyle#1#2. makes style list reg #1 equal to #2 (a list denotation),
+% \addstyle#1#2. adds the list #2 to the list register #1.
+
+\let\newstyle=\newtoks
+
+\def\setstyle#1#2% #1 a token reg, #2 a list denotation
+ {#1={}%
+ \make_stylelist#1#2 .% space before the dot
+ }
+
+\def\addstyle#1#2% #1 a token reg, #2 a list denotation
+ {\make_stylelist#1#2 .% space before the dot
+ }
+
+%%%%%%%%%%%%%%%%%%%% reading a style list denotation
+% \make_stylelist takes as first argument the name of a token register.
+% Following that name there should be a list of words separated by spaces
+% and/or commas, terminated by ` .' (a space and a dot). It constructs
+% the corresponding style list in #1.
+% \make_stylelist takes the sequence up till the first space, calls
+% \nocomma_stylelist with that sequence, and recurses with the sequence after
+% the first space. \nocomma_stylelist works similarly, but strips a comma
+% rather than a space. (Note: separation by single commas without spaces
+% is slightly more efficient.)
+
+\def\eat_style#1.{} % skip everything till first dot
+
+\def\make_stylelist#1#2 #3.% #1=name of list; #2#3=list ending in ` .'
+ {\if.#2.\else\nocomma_stylelist#1#2,.\fi
+ \if.#3.\let\style_tmp=\eat_style
+ \else\let\style_tmp=\make_stylelist
+ \fi
+ \style_tmp#1#3.%
+ }
+
+\def\nocomma_stylelist#1#2,#3.% #1=name of list; #2#3=list ending in `,.'
+ {\if.#2.\else#1=\expandafter{\the#1,#2}\fi
+ \if.#3.\let\style_tmp=\eat_style
+ \else\let\style_tmp=\nocomma_stylelist
+ \fi
+ \style_tmp#1#3.%
+ }
+
+%%%%%%%%%%%%%%%%%%%% determining whether lists intersect
+% \isect_style is used to check whether two lists have a non-empty
+% intersection. The switch \if_style will be set to indicate whether
+% the lists intersect.
+% \style_member takes two arguments, a style list register and a word.
+% It sets the switch if the word is in the style list. This check is done
+% by TeX's pattern match mechanism rather than through word-by-word comparison:
+% To check for the presence of word `xyz' a macro `\style_tmp#1,xyz,#2.' is
+% defined. If it is called as `\style_tmp<list>,xyz,.' where <list> is the
+% contents of the style list, then #2 will not be empty if and only if the
+% pattern `,xyz,' is part of <list>, i.e., iff `xyz' is in the list.
+% \doisect_style calls \style_member repeatedly for each word in the second
+% list.
+
+\newif\if_style
+
+\def\style_member#1#2% #1 a style list (token reg), #2 a word
+ {\def\style_tmp##1,#2,##2.{\check_style{##2}}%
+ \expandafter\style_tmp\the#1,#2,.%
+ }
+
+\def\check_style#1% check whether #1 is empty
+ {\if.#1.\else\_styletrue\fi
+ }
+
+\def\doisect_style#1,#2,#3.% #1=reg, #2#3=expansion of list reg ending in ,.
+ {\if.#2.\else\style_member#1{#2}\fi
+ \if_style\let\style_tmp=\eat_style
+ \else\if.#3.\let\style_tmp=\eat_style
+ \else\let\style_tmp=\doisect_style
+ \fi \fi
+ \style_tmp#1,#3.%
+ }
+
+\def\isect_style#1#2% two list regs
+ {\_stylefalse
+ \expandafter\doisect_style\expandafter#1\the#2,,.% extra comma for #2={}
+ }
+
+%%%%%%%%%%%%%%%%%%%% including a style
+% \readstyle takes a style list register and a filename. It puts the style list
+% in \style_list, then inputs the file.
+% \skip_style skips everything till the next \endstyle. It uses
+% dolines.tex to read the input line-by-line. To make that possible,
+% the grouping characters are disabled (because they must balance on a line),
+% the comment char is disabled (because it causes wraparound), the argument
+% character is disabled (because a macro is defined that has the line as
+% body --- it should not have undeclared arguments in the body), and the
+% escape character is disabled (not to prevent expansion, but to prevent lines
+% containing an `outer' control sequence). Note: If you wanted a real
+% ``comment environment,'' you should set all catcodes of all characters to
+% 11 or 12.
+% \styledef and \negstyledef have list denotations as arguments. They create
+% a list \style_other, then skip based on the intersection of \style_other
+% and \style_list. If no skip is done, \endstyle is equivalent to \relax.
+% \savereadstyle and \setreadstyle serve to access the protected \style_list
+% register.
+
+\input Midnight/dolines
+
+\newtoks\style_list
+\newtoks\style_other
+
+\def\readstyle#1#2% #1 a token reg, #2 a filename
+ {\style_list=#1%
+ \input#2 % significant space (sometimes)
+ }
+
+\def\savereadstyle#1% a style (token) reg
+ {#1=\style_list}
+
+\def\setreadstyle#1% a style reg
+ {\style_list=#1}
+
+{\catcode`\/=0 /catcode`/\=12 % see dolines.doc
+ /gdef/end_style{\endstyle}
+}
+
+\let\endstyle=\relax
+
+\def\skip_style
+ {\begingroup
+ \let\beforelines=\relax
+ \let\afterlines=\relax
+ \def\everyline##1{}%
+ \let\enddolines=\end_style
+ \let\finishdolines=\endgroup
+ \catcode`\{=12 \catcode`\}=12 \catcode`\%=12
+ \catcode`\#=12 \catcode`\\=12
+ \begindolines
+ }
+
+\def\styledef#1% #1 a list denotation
+ {\style_other={}%
+ \make_stylelist\style_other#1 .% space before dot
+ \isect_style\style_list\style_other
+ \if_style
+ \else\expandafter\skip_style
+ \fi
+ }
+
+\def\negstyledef#1% #1 a list denotation
+ {\style_other={}%
+ \make_stylelist\style_other#1 .% space before dot
+ \isect_style\style_list\style_other
+ \if_style\expandafter\skip_style\fi
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\_=\next
diff --git a/macros/generic/minifp/README b/macros/generic/minifp/README
new file mode 100644
index 0000000000..5f488bf27f
--- /dev/null
+++ b/macros/generic/minifp/README
@@ -0,0 +1,110 @@
+The MiniFP package
+
+Purpose:
+
+ minifp.sty defines macros for calculating with decimal real numbers.
+ It provides 8 decimal digits before and after the decimal point.
+ Minifp also provides a stack-based "assembly" language for writing
+ "programs".
+
+ In its basic form, minifp makes only simple operations available. To
+ get additional operations (sine, cosine, angle, square root, log and
+ exp), the file mfpextra.tex is provided.
+
+ Minifp should work in both LaTeX and plainTeX.
+
+ This is version 0.96. It should work reasonably well, barring any
+ bugs, but I expect to spend some time fine-tuning it before calling it
+ version 1.0.
+
+License:
+
+ All files of the minifp distribution (listed below) may be distributed
+ and/or modified under the conditions of the LaTeX Project Public
+ License, either version 1.3c of this license or (at your option) any
+ later version. The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3c or later is part of all distributions of LaTeX
+ version 2008/12/01 or later.
+
+ While every effort has been made to make minifp useful, it comes with
+ no warranty, expressed or implied.
+
+Usage:
+
+ You can use minifp as a LaTeX package with
+ \usepackage{minifp}
+ or use it in plain TeX with
+ \input minifp.sty
+
+ You can access the extra commands from mfpextra.tex by issuing the
+ command
+ \MFPloadextra
+ after minifp.sty has been loaded.
+
+Installation:
+
+ To install minifp, obtain minifp.tds.zip from CTAN and unzip it in any
+ TDS-compliant texmf tree.
+
+ Or, in the presence of minifp.dtx, run tex or latex on minifp.ins to
+ unpack the files minifp.sty and mfpextra.tex. Copy those files to some
+ place where both tex and latex can find them. For example, in a TDS
+ compliant system, the directory /tex/generic/minifp/ under one of your
+ TEXMF root directories.
+
+ The documentation is provided in minifp.pdf. Put minifp.pdf (and this
+ README and the files test*.tex, if you wish) wherever documentation of
+ packages is kept. For example, in the directory /doc/generic/minifp/
+ under one of your TEXMF root directories.
+
+ If you wish to regenerate the documentation, run latex (or pdflatex)
+ on minifp.dtx three times and then
+ makeindex -s gind.ist -o minifp.ind minifp.idx
+ and then (pdf)latex again on minifp.dtx.
+
+Manifest:
+
+ These, together with the files minifp.sty and mfpextra.tex (generated
+ by tex-ing minifp.ins), constitute the minifp distribution to which the
+ license applies:
+
+ minifp.dtx Contains minifp.sty and mfpextra.tex
+ minifp.ins The unpacking script: run tex or latex on it.
+ It reads in minifp.dtx and produces the files
+ minifp.sty and mfpextra.tex
+ minifp.pdf Documentation
+ test1.tex A suite of tests, including error messages (plain TeX)
+ test2.tex More tests, including long tests of speed (plain TeX)
+ README This file.
+
+ This distribution, the latest updates, and possibly some past
+ versions, should also be available at my web site:
+ <http://comp.uark.edu/~luecking/tex/tex.html>.
+
+History:
+ Version 0.96: Added random number generator, based on random.tex
+ Version 0.95: More testing. Changed square root of negative from an
+ error to a warning. Documentation updated. Now mfpextra
+ checks for minifp.sty and inputs it if needed.
+ Version 0.94: Improved accuracy of log, sin and sqrt.
+ Version 0.93: Corrected mistyped data for logarithm.
+ Fixed bugs in degree/radian conversions.
+ Version 0.92: Corrected sign of floor and ceiling. Corrected
+ occasional minus sign in front of 0.0 for sin or cos.
+ Version 0.9 : angle: near maximum accuracy, at some cost to speed.
+ Version 0.8 : exp: now more accurate for many cases.
+ Version 0.7 : sqrt: now exact when possible and much more accurate.
+ Version 0.6 : Added angle to mfpextra. Changed package name to minifp.
+ Version 0.5 : Added sqrt, deg, rad to mfpextra.
+ Version 0.4 : Added log, exp, pow to mfpextra.
+ Version 0.3 : Added mfpextra.tex, defines sin and cos.
+ Version 0.2 : Added macros for printing, formatting the results.
+ Version 0.1 : First working set of macros. Package named mfp.sty.
+
+--
+Dan Luecking <luecking (at) uark (dot) edu>
+Department of Mathematical Sciences
+1 University of Arkansas
+Fayetteville, Arkansas 72701-1201
+U.S.A.
diff --git a/macros/generic/minifp/doc/minifp.pdf b/macros/generic/minifp/doc/minifp.pdf
new file mode 100644
index 0000000000..0fffe0ad38
--- /dev/null
+++ b/macros/generic/minifp/doc/minifp.pdf
Binary files differ
diff --git a/macros/generic/minifp/doc/test1.tex b/macros/generic/minifp/doc/test1.tex
new file mode 100644
index 0000000000..52b8d138fa
--- /dev/null
+++ b/macros/generic/minifp/doc/test1.tex
@@ -0,0 +1,515 @@
+\errorcontextlines999\relax
+%\def\MFPextra{}
+%X\input minifp.sty\relax X
+%X\MFPloadextra X
+X\input mfpextra\relax X
+X\input mfpextra\relax X
+
+
+\def\filbreak{\vskip 12pt plus 100pt\penalty 0 \vskip 0pt plus -100pt\relax}
+\def\meaningless#1>{}
+\def\verbprint#1{%
+\begingroup
+ \toks0=\expandafter{#1}\edef\x{\the\toks0}%
+ \edef\x{\expandafter\meaningless\meaning\x}%
+ \tt "\x"%
+\endgroup}
+{\catcode`\@=11
+ \gdef\y{\Y\\}
+ \gdef\Y{\space\verbprint\MFP@Rstack}% adds its own space
+}
+\def\\{\hfill\break\ignorespaces}
+\def\U{\X}
+\baselineskip 12.1pt plus .2pt minus 2pt
+
+\filbreak
+\startMFPprogram
+{\bf Stack-only operations:}\\
+Stack is empty, test the error message for popping an empty
+stack:\immediate\write16{^^J*** The following tests the error for popping an
+empty stack:^^J}\Rpop\X\y
+Push 0.000 001:\Rpush{0.000 001}\y
+Pop into {\tt\string\X}:\Rpop\X\\
+\indent {\tt \string\X:}\verbprint\X\\
+\indent {\tt stack:}\y
+Push 1.2 then -2.3:\Rpush{1.2}\Rpush{-2.3}\y
+Exchange them:\Rexch\y
+Duplicate the last:\Rdup\Y
+
+\filbreak
+{\bf Unary operations:}\\
+First a new stack with only one value
+$21.34$:\Rpop\X\Rpop\X\Rpop\X\Rpush{21.34}\y
+Unless otherwise noted, the stack will always be restored to this value
+between operations.
+
+\medskip
+\noindent
+Change sign:\Rchs\y
+ \Rpop\X\Rpush{21.34}%
+Absolute value:\Rabs\y
+ \Rpop\X\Rpush{21.34}%
+Integer part:\Rint\y
+ \Rpop\X\Rpush{21.34}%
+Fractional part:\Rfrac\y
+ \Rpop\X\Rpush{21.34}%
+Double:\Rdbl\y
+ \Rpop\X\Rpush{21.34}%
+Halve:\Rhalve\y
+ \Rpop\X\Rpush{21.34}%
+Signum:\Rsgn\y
+ \Rpop\X\Rpush{-21.34}%
+Signum of negative:\Rsgn\y
+ \Rpop\X\Rpush{21.34}%
+Increment:\Rincr\y
+ \Rpop\X\Rpush{21.34}%
+Decrement:\Rdecr\y
+ \Rpop\X\Rpush{21.34}%
+Sine:\Rsin\y
+ \Rpop\X\Rpush{21.34}%
+Cosine:\Rcos\y
+ \Rpop\X\Rpush{21.34}%
+Radians to degrees:\Rdeg\y
+ \Rpop\X\Rpush{-21.34}%
+Degrees to radians (negative):\Rrad\y
+ \Rpop\X\Rpush{21.34}%
+Common logarithm:\Rlog\y
+ \Rpop\X\Rpush{21.34}%
+Natural logarithm:\Rln\y
+Put $-1.34$ on the stack:\Rpop\X\Rpush{-1.34}\y
+Exponential:\Rexp\y
+Put $3.3$ on the stack:\Rpop\X\Rpush{3.3}\y
+Exponential:\Rexp\y
+Back to $21.34$:\Rpop\X\Rpush{21.34}\y
+Square:\Rsq\y
+ \Rpop\X\Rpush{21.34}%
+Inversion:\Rinv\y
+ \Rpop\X\Rpush{21.34}%
+Floor:\Rfloor\y
+ \Rpop\X\Rpush{21.34}%
+Ceiling:\Rceil\y
+ \Rpop\X\Rpush{21.34}%
+Square root:\Rsqrt\y
+ \Rpop\X\Rpush{21.34}%
+Random number:\Rrand\y
+ \Rpop\X\Rpush{21.34}%
+% restart with second generator
+\MFPsetseed0
+\MFPrandgenB
+Another:\Rrand\y
+ \Rpop\X\Rpush{21.34}%
+% restart with third generator
+\MFPsetseed0
+\MFPrandgenC
+Another:\Rrand\y
+Now push $21.34$ and $12.34$ in that order:\Rpop\X\Rpush{21.34}\Rpush{12.34}\y
+Compare: \Rcmp
+ 21.34 is\IFlt{}{ not} less than 12.34.
+ 21.34 is\IFgt{}{ not} more than 12.34.
+ 21.34 is\IFeq{}{ not} equal to 12.34.\\
+Take difference and check:\Rsub\Rchk\y
+ 21.34-12.34 is\IFneg {}{ not} negative.
+ 21.34-12.34 is\IFpos {}{ not} positive.
+ 21.34-12.34 is\IFzero{}{ not} zero.
+
+\Rpop\X
+
+\filbreak
+{\bf Binary operations:}\\
+({\it After each operation we restore the original stack.})\\
+Start with empty stack and\\
+push 1.2 then -2.3:\Rpush{1.2}\Rpush{-2.3}\y
+Angle:\Rangle\y\Rpop\X\Rpush{1.2}\Rpush{-2.3}%
+Add:\Radd\y\Rpop\X\Rpush{1.2}\Rpush{-2.3}%
+Subtract:\Rsub\y\Rpop\X\Rpush{1.2}\Rpush{-2.3}%
+Multiply:\Rmul\y\Rpop\X\Rpush{1.2}\Rpush{-2.3}%
+Divide:\Rdiv\y
+New stack:\Rpop\X\Rpush{2.3}\Rpush{0}\y
+\immediate\write16{^^J*** The following tests the error for dividing by 0:^^J}
+Divide by zero:\Rdiv\y
+Reset stack:\Rpop\X\Rpush{2.3}\Rpush{17}\y
+Raise to a power ($(2.3)^{17}$):\Rpow\y
+Reset stack:\Rpop\X\Rpush{2.3}\Rpush{-17}\y
+Raise to a power ($(2.3)^{-17}$):\Rpow\y
+Back to $1.2$ and $-2.3$:\Rpop\X\Rpush{1.2}\Rpush{-2.3}\y
+Find max:\Rmax\y
+ \Rpop\X\Rpush{1.2}\Rpush{-2.3}%
+Find min:\Rmin\y
+Exporting stack (value above).\\
+Exporting \verbprint\U: \verbprint\X
+\ExportStack
+\Export\X
+% change \X
+\def\X{0}
+\stopMFPprogram
+
+\medskip
+\noindent
+Exported value of \verbprint\U: \verbprint\X\\
+Exported value of stack:\Y
+
+\def\w{\W\\}
+\def\W{ \verbprint\Z}% adds its own space
+
+\filbreak
+{\bf Operand forms}\\
+{\it All results go to {\tt\string\Z}. All operate on {\tt\string\X}
+and/or {\tt\string\Y}}\\
+Define ${\tt X}=1.2$ and ${\tt Y}=-2.3$:\def\X{1.2}\def\Y{-2.3}\\
+\indent {\tt X}:=\verbprint\X\\
+\indent {\tt Y}:=\verbprint\Y
+
+\filbreak
+{\bf Unary operations:}\\
+ Change sign of {\tt X}:\MFPchs\X\Z\w
+ Change sign of {\tt Y}:\MFPchs\Y\Z\w
+ Absolute value of {\tt X}:\MFPabs\X\Z\w
+ Absolute value of {\tt Y}:\MFPabs\Y\Z\w
+ Double value of {\tt X}:\MFPdbl\X\Z\w
+ Double value of {\tt Y}:\MFPdbl\Y\Z\w
+ Half of {\tt X}:\MFPhalve\X\Z\w
+ Half of {\tt Y}:\MFPhalve\Y\Z\w
+ Integer part of {\tt X}:\MFPint\X\Z\w
+ Integer part of {\tt Y}:\MFPint\Y\Z\w
+ Signum of {\tt X}:\MFPsgn\X\Z\w
+ Signum of {\tt Y}:\MFPsgn\Y\Z\w
+ Increment of {\tt X}:\MFPincr\X\Z\w
+ Increment of {\tt Y}:\MFPincr\Y\Z\w
+ Decrement of {\tt X}:\MFPdecr\X\Z\w
+ Decrement of {\tt Y}:\MFPdecr\Y\Z\w
+ Square of {\tt X}:\MFPsq\X\Z\w
+ Square of {\tt Y}:\MFPsq\Y\Z\w
+ Inverse of {\tt X}:\MFPinv\X\Z\w
+ Inverse of {\tt Y}:\MFPinv\Y\Z\w
+ Fractional part of {\tt X}:\MFPfrac\X\Z\w
+ Fractional part of {\tt Y}:\MFPfrac\Y\Z\w
+ Floor of {\tt X}:\MFPfloor\X\Z\w
+ Floor of {\tt Y}:\MFPfloor\Y\Z\w
+ Ceiling of {\tt X}:\MFPceil\X\Z\w
+ Ceiling of {\tt Y}:\MFPceil\Y\Z\w
+ Sine of {\tt 30}:\MFPsin{30}\Z\w
+ Sine of {\tt 420}:\MFPsin{420}\Z\w
+ Cosine of {\tt 60}:\MFPcos{60}\Z\w
+ Cosine of {\tt 390}:\MFPcos{390}\Z\w
+ Common logarithm of {\tt X}:\MFPlog\X\Z\w
+\immediate\write16{^^J*** The following tests the warning for log of a negative
+number:^^J}%
+ Common logarithm of {\tt Y}:\MFPlog\Y\Z\w
+Natural logarithm of {\tt X}:\MFPln\X\Z\w
+\immediate\write16{^^J*** The following tests the warning for ln of a negative
+number:^^J}%
+Natural Logarithm of {\tt Y}:\MFPln\Y\Z\w
+ Exponential of {\tt X}:\MFPexp\X\Z\w
+ Exponential of {\tt Y}:\MFPexp\Y\Z\w
+ Square root of {\tt X}:\MFPsqrt\X\Z\w
+ Square root of {\tt Y}:\MFPsqrt\Y\Z\w
+\MFPrandgenA
+Random number less than {\tt X}:\MFPrand\X\Z\w
+Random number less than {\tt Y}:\MFPrand\Y\Z\w
+\MFPsetseed0
+\MFPrandgenB
+ Another less than {\tt X}:\MFPrand\X\Z\w
+ Another less than {\tt Y}:\MFPrand\Y\Z\w
+\MFPsetseed0
+\MFPrandgenC
+ Another less than {\tt X}:\MFPrand\X\Z\w
+ Another less than {\tt Y}:\MFPrand\Y\Z\w
+
+\filbreak
+{\bf Extra tests of sine}\\
+Sine of 1:\MFPsin{1}\Z\w
+Cosine of 1:\MFPcos{1}\Z\w
+Sine of $-2$:\MFPsin{-2}\Z\w
+Cosine of 3:\MFPcos{3}\Z\w
+Sine of $-4$:\MFPsin{-4}\Z\w
+Cosine of 5:\MFPcos{5}\Z\w
+Sine of $-6$:\MFPsin{-6}\Z\w
+Cosine of 7:\MFPcos{7}\Z\w
+Sine of $-8$:\MFPsin{-8}\Z\w
+Cosine of 9:\MFPcos{9}\Z\w
+Sine of $-10$:\MFPsin{-10}\Z\w
+Cosine of 20:\MFPcos{20}\Z\w
+Sine of $-30$:\MFPsin{-30}\Z\w
+Cosine of 40:\MFPcos{40}\Z\w
+Sine of $-50$:\MFPsin{-50}\Z\w
+Cosine of 60:\MFPcos{60}\Z\w
+Sine of $-70$:\MFPsin{-70}\Z\w
+Cosine of 80:\MFPcos{80}\Z\w
+Sine of $-90$:\MFPsin{-90}\Z\w
+Sine of $135$:\MFPsin{135}\Z\w
+Sine of $180$:\MFPsin{180}\Z\w
+Sine of $225$:\MFPsin{225}\Z\w
+Sine of $270$:\MFPsin{270}\Z\w
+Sine of $315$:\MFPsin{315}\Z\W
+
+\medskip
+\noindent
+Angle of $(10,.1)$:\MFPangle{10}{.1}\Z\w
+Angle of $(-11.5,.1)$:\MFPangle{-11.5}{.1}\Z\w
+Angle of $(11.5,-.2)$:\MFPangle{11.5}{-.2}\Z\w
+Angle of $(-11.5,.3)$:\MFPangle{-11.5}{.3}\Z\w
+Angle of $(11.5,-.4)$:\MFPangle{11.5}{-.4}\Z\w
+Angle of $(-11.5,.5)$:\MFPangle{-11.5}{.5}\Z\w
+Angle of $(11.5,-.6)$:\MFPangle{11.5}{-.6}\Z\w
+Angle of $(-11.5,.7)$:\MFPangle{-11.5}{.7}\Z\w
+Angle of $(11.5,-.8)$:\MFPangle{11.5}{-.8}\Z\w
+Angle of $(-11.5,.9)$:\MFPangle{-11.5}{.9}\Z\w
+ Angle of $(11.5,-1)$:\MFPangle{11.5}{-1}\Z\w
+ Angle of $(-11.5,2)$:\MFPangle{-11.5}{2}\Z\w
+ Angle of $(11.5,-3)$:\MFPangle{11.5}{-3}\Z\w
+ Angle of $(-11.5,4)$:\MFPangle{-11.5}{4}\Z\w
+ Angle of $(11.5,-5)$:\MFPangle{11.5}{-5}\Z\w
+ Angle of $(-11.5,6)$:\MFPangle{-11.5}{6}\Z\w
+ Angle of $(11.5,-7)$:\MFPangle{11.5}{-7}\Z\w
+ Angle of $(-11.5,8)$:\MFPangle{-11.5}{8}\Z\w
+ Angle of $(11.5,-9)$:\MFPangle{11.5}{-9}\Z\w
+Angle of $(-11.5,10)$:\MFPangle{-11.5}{10}\Z\w
+Angle of $(11.5,-20)$:\MFPangle{11.5}{-20}\Z\w
+Angle of $(-11.5,30)$:\MFPangle{-11.5}{30}\Z\w
+Angle of $(11.5,-40)$:\MFPangle{11.5}{-40}\Z\w
+Angle of $(-11.5,50)$:\MFPangle{-11.5}{50}\Z\w
+Angle of $(11.5,-60)$:\MFPangle{11.5}{-60}\Z\w
+Angle of $(-11.5,70)$:\MFPangle{-11.5}{70}\Z\w
+Angle of $(11.5,-80)$:\MFPangle{11.5}{-80}\Z\w
+Angle of $(-11.5,90)$:\MFPangle{-11.5}{90}\Z\w
+Angle of $(11.5,-100)$:\MFPangle{11.5}{-100}\Z\w
+Angle of $(0,10)$:\MFPangle{0}{10}\Z\w
+Angle of $(0,-10)$:\MFPangle{0}{-10}\Z\w
+\immediate\write16{^^J*** The following tests the warning for angle of
+(0,0):^^J}
+Angle of $(0,0)$:\MFPangle{0}{0}\Z\W
+
+\noindent
+Testing large arguments:\\
+Angle of $(85 713 000, 99 999 999)$:\MFPangle{8571 3000}{9999 9999}\Z\W
+
+
+\filbreak
+{\bf Extra tests of log}\\
+ Log of $.1$:\MFPlog{.1}\Z\w
+ Log of $.2$:\MFPlog{.2}\Z\w
+ Log of $.3$:\MFPlog{.3}\Z\w
+ Log of $.4$:\MFPlog{.4}\Z\w
+ Log of $.5$:\MFPlog{.5}\Z\w
+ Log of $.6$:\MFPlog{.6}\Z\w
+ Log of $.7$:\MFPlog{.7}\Z\w
+ Log of $.8$:\MFPlog{.8}\Z\w
+ Log of $.9$:\MFPlog{.9}\Z\w
+ Log of $1$:\MFPlog{1}\Z\w
+Log of $1.01$:\MFPlog{1.01}\Z\w
+Log of $1.02$:\MFPlog{1.02}\Z\w
+Log of $1.03$:\MFPlog{1.03}\Z\w
+Log of $1.04$:\MFPlog{1.04}\Z\w
+Log of $1.05$:\MFPlog{1.05}\Z\w
+Log of $1.06$:\MFPlog{1.06}\Z\w
+Log of $1.07$:\MFPlog{1.07}\Z\w
+Log of $1.08$:\MFPlog{1.08}\Z\w
+Log of $1.09$:\MFPlog{1.09}\Z\w
+\immediate\write16{^^J*** The following tests the error for log of 0:^^J}
+Log of $0$:\MFPlog{0}\Z\W
+
+\filbreak
+{\bf Extra tests of exp}\\
+ Exp of $.00009990$:\MFPexp{.00009990}\Z
+\w
+ Exp of $.00009999$:\MFPexp{.00009999}\Z\w
+ Exp of $.0001$:\MFPexp{.0001}\Z\w
+ Exp of $.0002$:\MFPexp{.0002}\Z\w
+ Exp of $.0003$:\MFPexp{.0003}\Z\w
+ Exp of $.0004$:\MFPexp{.0004}\Z\w
+ Exp of $.0005$:\MFPexp{.0005}\Z\w
+ Exp of $.0006$:\MFPexp{.0006}\Z\w
+ Exp of $.0007$:\MFPexp{.0007}\Z\w
+ Exp of $.0008$:\MFPexp{.0008}\Z\w
+ Exp of $.0009$:\MFPexp{.0009}\Z\w
+ Exp of $.001$:\MFPexp{.001}\Z\w
+ Exp of $.002$:\MFPexp{.002}\Z\w
+ Exp of $.003$:\MFPexp{.003}\Z\w
+ Exp of $.004$:\MFPexp{.004}\Z\w
+ Exp of $.005$:\MFPexp{.005}\Z\w
+ Exp of $.006$:\MFPexp{.006}\Z\w
+ Exp of $.007$:\MFPexp{.007}\Z\w
+ Exp of $.008$:\MFPexp{.008}\Z\w
+ Exp of $.009$:\MFPexp{.009}\Z\w
+ Exp of $.01$:\MFPexp{.01}\Z\w
+ Exp of $.02$:\MFPexp{.02}\Z\w
+ Exp of $.03$:\MFPexp{.03}\Z\w
+ Exp of $.04$:\MFPexp{.04}\Z\w
+ Exp of $.05$:\MFPexp{.05}\Z\w
+ Exp of $.06$:\MFPexp{.06}\Z\w
+ Exp of $.07$:\MFPexp{.07}\Z\w
+ Exp of $.08$:\MFPexp{.08}\Z\w
+ Exp of $.09$:\MFPexp{.09}\Z\w
+ Exp of $.1$:\MFPexp{.1}\Z\w
+ Exp of $.2$:\MFPexp{.2}\Z\w
+ Exp of $.3$:\MFPexp{.3}\Z\w
+ Exp of $.4$:\MFPexp{.4}\Z\w
+ Exp of $.5$:\MFPexp{.5}\Z\w
+ Exp of $.6$:\MFPexp{.6}\Z\w
+ Exp of $.7$:\MFPexp{.7}\Z\w
+ Exp of $.8$:\MFPexp{.8}\Z\w
+ Exp of $.9$:\MFPexp{.9}\Z\w
+ Exp of $1$:\MFPexp{1}\Z\w
+ Exp of $2$:\MFPexp{2}\Z\w
+ Exp of $3$:\MFPexp{3}\Z\w
+ Exp of $4$:\MFPexp{4}\Z\w
+ Exp of $5$:\MFPexp{5}\Z\w
+ Exp of $6$:\MFPexp{6}\Z\w
+ Exp of $7$:\MFPexp{7}\Z\w
+ Exp of $8$:\MFPexp{8}\Z\w
+ Exp of $9$:\MFPexp{9}\Z\w
+ Exp of $10$:\MFPexp{10}\Z\w
+ Exp of $-8.3254$:\MFPexp{-8.3254}\Z\w
+ Exp of $18.42068073$:\MFPexp{18.42068073}\Z\w
+ Exp of $18.42068074$:\MFPexp{18.42068074}\Z\w
+\immediate\write16{^^J*** The following tests the error for a power too
+large:^^J}
+ Exp of $18.42068075$:\MFPexp{18.42068075}\Z\W
+
+\filbreak
+{\bf Extra tests of pow}\\
+ $-10$ power of $3$:\MFPpow{3}{-10}\Z\w
+ $-9$ power of $3$:\MFPpow{3}{-9}\Z\w
+ $-8$ power of $3$:\MFPpow{3}{-8}\Z\w
+ $-7$ power of $3$:\MFPpow{3}{-7}\Z\w
+ $-6$ power of $3$:\MFPpow{3}{-6}\Z\w
+ $-5$ power of $3$:\MFPpow{3}{-5}\Z\w
+ $-4$ power of $3$:\MFPpow{3}{-4}\Z\w
+ $-3$ power of $3$:\MFPpow{3}{-3}\Z\w
+ $-2$ power of $3$:\MFPpow{3}{-2}\Z\w
+ $-1$ power of $3$:\MFPpow{3}{-1}\Z\w
+ $0$ power of $3$:\MFPpow{3}{0}\Z\w
+ $1$ power of $3$:\MFPpow{3}{1}\Z\w
+ $2$ power of $3$:\MFPpow{3}{2}\Z\w
+ $3$ power of $3$:\MFPpow{3}{3}\Z\w
+ $4$ power of $3$:\MFPpow{3}{4}\Z\w
+ $5$ power of $3$:\MFPpow{3}{5}\Z\w
+ $6$ power of $3$:\MFPpow{3}{6}\Z\w
+ $7$ power of $3$:\MFPpow{3}{7}\Z\w
+ $8$ power of $3$:\MFPpow{3}{8}\Z\w
+ $9$ power of $3$:\MFPpow{3}{9}\Z\w
+ $10$ power of $3$:\MFPpow{3}{10}\Z\w
+\immediate\write16{^^J*** The following tests the error for a power too
+large:^^J}
+ $10$ power of $9$:\MFPpow{9}{10}\Z\w
+\immediate\write16{^^J*** The following also tests the error for a power too
+large:^^J}
+ $10$ power of $-9$:\MFPpow{-9}{10}\Z\w
+\immediate\write16{^^J*** The following also tests the error for a power too
+large:^^J}
+ $11$ power of $-9$:\MFPpow{-9}{11}\Z\w
+\immediate\write16{^^J*** The following tests the error for a negative power of
+0:^^J}
+ $-10$ power of $0$:\MFPpow{0}{-10}\Z\w
+\immediate\write16{^^J*** The following also tests the error for a power too
+large:^^J}
+ $-10$ power of $0.1$:\MFPpow{0.1}{-10}\Z\W
+
+\filbreak
+{\bf Extra tests of sqrt}\\
+\immediate\write16{^^J*** The following tests the warning for a square root of a
+negative:^^J}
+ Square root of $-1$:\MFPsqrt{-1}\Z\w
+ Square root of $0$:\MFPsqrt{0}\Z\w
+ Square root of $.0001$:\MFPsqrt{.0001}\Z\w
+ Square root of $.002$:\MFPsqrt{.002}\Z\w
+ Square root of $.03$:\MFPsqrt{.03}\Z\w
+ Square root of $.4$:\MFPsqrt{.4}\Z\w
+ Square root of $.5$:\MFPsqrt{.5}\Z\w
+ Square root of $.6$:\MFPsqrt{.6}\Z\w
+ Square root of $.7$:\MFPsqrt{.7}\Z\w
+ Square root of $.8$:\MFPsqrt{.8}\Z\w
+ Square root of $.9$:\MFPsqrt{.9}\Z\w
+ Square root of $1$:\MFPsqrt{1}\Z\w
+ Square root of $2$:\MFPsqrt{2}\Z\w
+ Square root of $3$:\MFPsqrt{3}\Z\w
+ Square root of $4$:\MFPsqrt{4}\Z\w
+ Square root of $5$:\MFPsqrt{5}\Z\w
+ Square root of $6$:\MFPsqrt{6}\Z\w
+ Square root of $7$:\MFPsqrt{7}\Z\w
+ Square root of $8$:\MFPsqrt{8}\Z\w
+ Square root of $9$:\MFPsqrt{9}\Z\w
+ Square root of $10$:\MFPsqrt{10}\Z\w
+ Square root of $99$:\MFPsqrt{99}\Z\w
+ Square root of $500$:\MFPsqrt{500}\Z\w
+ Square root of $1000$:\MFPsqrt{1000}\Z\w
+ Square root of $5000$:\MFPsqrt{5000}\Z\w
+ Square root of $9999$:\MFPsqrt{9999}\Z\w
+Square root of $100000$:\MFPsqrt{100000}\Z\w
+Square root of $100000$:\MFPsqrt{100000}\Z\w
+Square root of $1500000$:\MFPsqrt{1500000}\Z\w
+Square root of $1524157.65279684$ (should be exact):\MFPsqrt{1524157.65279684}\Z\w
+Square root of $15000000$:\MFPsqrt{15000000}\Z\w
+Square root of $99999998.00000001$ (should be exact):\MFPsqrt{99999998.00000001}\Z\w
+ Square root of $9999.99$:\MFPsqrt{9999.99}\Z\w
+ Square root of $9999.999 999$:\MFPsqrt{9999.999999}\Z\W
+
+\filbreak
+{\bf Binary operations:}\\
+Add $X+Y$:\MFPadd\X\Y\Z\w
+Add $\infty+\infty$:\MFPadd{99999999.99999999}{99999999.99999999}\Z\w
+Subtract $X-Y$:\MFPsub\X\Y\Z\w
+Subtract $Y-X$:\MFPsub\Y\X\Z\w
+Subtract $X-X$:\MFPsub\X\X\Z\w
+Subtract $Y-Y$:\MFPsub\Y\Y\Z\w
+Multiply:\MFPmul\X\Y\Z\w
+Multiply $10^{4}\times10^4$ (loses the overflow digit):\MFPmul{10000}{10000}\Z\w
+Divide $X/Y$:\MFPdiv\X\Y\Z\w
+Divide $Y/X$:\MFPdiv\Y\X\Z\w
+Max:\MFPmax\X\Y\Z\w
+Min:\MFPmin\X\Y\Z\w
+Angle $(X,Y)$:\MFPangle\X\Y\Z\w
+Angle $(Y,X)$:\MFPangle\Y\X\Z\w
+Power $X^5$:\MFPpow\X{5}\Z\w
+Power $X^{-5}$:\MFPpow\X{-5}\Z\w
+Power $Y^{5}$:\MFPpow\Y{5}\Z\w
+Power $Y^{-5}$:\MFPpow\Y{-5}\Z\w
+Compare: \MFPcmp\X\Y
+ \X\ is\IFlt{}{ not} less than \Y.
+ \X\ is\IFgt{}{ not} more than \Y.
+ \X\ is\IFeq{}{ not} equal to \Y.\\
+Take difference and check:\MFPsub\X\Y\Z\w
+ $\X-\Y$ is\IFneg{}{ not} negative.
+ $\X-\Y$ is\IFpos{}{ not} positive.
+ $\X-\Y$ is\IFzero{}{ not} zero.
+
+\filbreak
+{\bf Print-related formating}
+
+\def\T{333.00000000}
+\def\S{1357.12345678}
+
+\noindent This is original: $T ={}${\tt"\T"}\\
+Truncate to 4 digits right of decimal:\MFPtruncate{4}\T\Z\w
+Truncate to the decimal:\MFPtruncate{0}\T\Z\w
+Truncate to 2 digits left of decimal:\MFPtruncate{-2}\T\Z\w
+Strip trailing zeros:\MFPstrip\T\Z\w
+Strip trailing zeros (star form):\MFPstrip*\T\Z\W
+
+\noindent Original: $S = {}${\tt"\S"}\\
+Round to 3 decimals:\MFPround{3}\S\Z\w
+Round to 5 decimals:\MFPround{5}\S\Z\w
+Round to 0 decimals:\MFPround{0}\S\Z\w
+Round to 100s:\MFPround{-2}\S\Z\W
+
+\def\T{-333.00000000}
+\def\S{-1357.12345678}
+
+\filbreak
+\noindent All that again with negative numbers.
+
+\medskip
+\noindent This is original: $T ={}${\tt"\T"}\\
+Truncate to 4 digits right of decimal:\MFPtruncate{4}\T\Z\w
+Truncate to the decimal:\MFPtruncate{0}\T\Z\w
+Truncate to 2 digits left of decimal:\MFPtruncate{-2}\T\Z\w
+Strip trailing zeros:\MFPstrip\T\Z\w
+Strip trailing zeros (star form):\MFPstrip*\T\Z\W
+
+\noindent Original: $S = {}${\tt"\S"}\\
+Round to 3 decimals:\MFPround{3}\S\Z\w
+Round to 5 decimals:\MFPround{5}\S\Z\w
+Round to 0 decimals:\MFPround{0}\S\Z\w
+Round to 100s:\MFPround{-2}\S\Z\W
+
+\end{document}
diff --git a/macros/generic/minifp/doc/test2.tex b/macros/generic/minifp/doc/test2.tex
new file mode 100644
index 0000000000..c861032595
--- /dev/null
+++ b/macros/generic/minifp/doc/test2.tex
@@ -0,0 +1,385 @@
+\errorcontextlines999\relax
+The various ``XX'' and ``xX'' pairs test whether there are errant spaces
+in the macros or the macro files.
+
+X\input mfpextra\relax X
+X\input mfpextra\relax X
+\def\empty{}
+
+\def\frac#1#2{{#1\over#2}}
+\def\cs#1{{\tt \char`\\#1}}
+\def\mybreak{\vskip 0pt plus 100pt\penalty 0 \vskip 0pt plus -100pt\relax}
+\def\\{\hfil\break\ignorespaces}
+\def\y{Rpop\Z\Z\\}
+\def\Y{Rpop\Z\Z}
+\everymath{\displaystyle}
+
+{\bf Stack-only operations:}\\
+Example of a program. Computes the solution of $ax^2 + bx + c = 0$ using
+the quadratic formula. If the result is complex, it detects this.
+Coefficients stored in \cs{A}, \cs{B} and \cs{C}. First case: $4x^2 +
+5y^2 - 1= 0$. Solutions are $x = -\frac{5}{8} \pm \frac{1}{8}\sqrt{41}$
+
+\def\A{4}\def\B{5}\def\C{-1}
+
+X\startMFPprogram % stack
+\Rpush\B\Rdup\Rsq % B(B^2)
+\Rpush\A\Rpush\C\Rmul\Rdbl\Rdbl % B(B^2)(4AC)
+\Rsub % B(B^2-4AC)
+\IFneg{\def\I{i}\Rchs}{\def\I{}}% % B(|B^2-4AC|)
+\Rsqrt\Rpush\A\Rdbl\Rdiv % B(sqrt(|B^2-4AC|)/2A)
+\Rpop\Ypart % B
+\Rpush\A\Rdbl\Rdiv\Rchs % (-B/2A)
+\Rpop\Xpart %
+%\expandafter\show\csname MFP@Rstack\endcsname
+\Rpush\Xpart\Rpush\Ypart\Radd\Rpop\Broot
+\Rpush\Xpart\Rpush\Ypart\Rsub\Rpop\Sroot
+\Export\Xpart
+\Export\Ypart
+\Export\Broot
+\Export\Sroot
+\Export\I
+\stopMFPprogram X
+
+\indent Solution: $x = \Xpart \pm \I\Ypart = \Broot$ and $\Sroot$.
+
+Second case $2x^2 - 2x + 3 = 0$. Solutions are $x = \frac{1}{2} \pm
+\frac{i}{2}\sqrt{5}$.
+
+\def\A{2}\def\B{-2}\def\C{3}
+
+X\startMFPprogram % stack
+\Rpush\B\Rdup\Rsq % B(B^2)
+\Rpush\A\Rpush\C\Rmul\Rdbl\Rdbl % B(B^2)(4AC)
+\Rsub % B(B^2-4AC)
+\IFneg{\def\I{i}\Rchs}{\def\I{}}% % B(|B^2-4AC|)
+\Rsqrt\Rpush\A\Rdbl\Rdiv % B(sqrt(|B^2-4AC|)/2A)
+\Rpop\Ypart % B
+\Rpush\A\Rdbl\Rdiv\Rchs % (-B/2A)
+\Rpop\Xpart %
+\Export\Xpart
+\Export\Ypart
+\Export\I
+\stopMFPprogram X
+
+%\expandafter\show\csname MFP@Rstack\endcsname
+\indent Solution: $x = \Xpart \pm \I\Ypart$.
+
+Now try square roots (should be exactly 1234.5678 and 1524):
+X\startMFPprogram % stack
+\Rpush{1524157.65279684}\Rsqrt\Rpop\X
+\Rpush{1524}\Rsq\Rsqrt\Rpop\Y
+\Export\X
+\Export\Y
+\stopMFPprogram X \X { and }\Y.
+
+
+Below we test for speed and to check for any space characters
+accidentally produced. You should see only a few xX pairs with hopefully
+no spaces in between them. As curently set up, these tests perform about
+34000 numerical operations. It all takes about 31 seconds on a
+moderately old (2 years?) Windows 7 running plain tex from
+TeX~Live~2012.
+
+This operation count does not distinguish between basic operations like
+addition and multiplication, and those operations from mfpextra that are
+probably each equivalent to a dozen or more multiplications. Counting
+each such operation with the an estimated multiplicity, the tests
+probably perform 400 thousand or more basic operations.
+
+Of the basic operations, multiplication is (by measurement) 2--4 times
+as lengthy as addition, and division is 2--3 times as lengthy as
+multiplication. Actual times depend on the machine, but the ratios
+remain pretty much the same. Here is a summary of timings on my fastest
+machine; each operation is run 500 times in a loop. (A loop in which
+an input number is processed and a value returned, but no calculations are
+performed ({\tt\string\MFPzero}), times at $0.0\,$sec.) Timing obtained
+with {\tt\string\pdfelapsedtime}.
+
+\medskip
+
+\indent\vtop{\halign{\hfil$#$&\quad$#\,$sec\cr
+\noalign{\hrule\smallskip}
+2.54321+22432.87654321 &0.016\cr
+2.54321\times22432.87654321 &0.046\cr
+22432.87654321/2.54321 &0.11\cr
+\sqrt{23456789.54321} &0.172\cr
+\mathop{\fam0 rand}(23456789.54321) &0.105\cr
+1.00001234^{8000} &0.72\cr
+\exp(2.54321) &0.42\cr
+\sin(2.54321) &0.41\cr
+\log(2.54321) &0.73\cr
+\mathop{\fam0 angle}(254.321,100) &1.14\cr
+\noalign{\smallskip\hrule}
+}}
+
+\medskip
+
+Originally, all the tests below combined took 21 seconds on a 4-year-old
+Windows XP under TeX Live 2011. But since then I have changed angle and
+power computations so that they are considerably more accurate, but with
+a possible reduction in speed. I cannot test the speed reduction, since
+I no longer have that machine.
+
+For my current machines: On a Windows 7 machine, 64-bit, laptop, it
+takes 32 seconds to process this file. On another Windows 7 machine,
+32-bit, desktop, it takes about 10 seconds. (This difference could be
+explained partly by the fact that the last machine is newer and partly
+by the fact that TeX is a 32-bit program and therefore a better match to
+the 32-bit hardware.)
+
+\def\testi{% stack forms
+\startMFPprogram
+\Rpush{0.000 001}\Rpop\X
+\Rpush{1.2}\Rpush{-2.3}\Rexch\Rdup
+\Rpop\X\Rpop\X
+\Rpop\X\Rpush{21.34}\Rchs
+\Rpop\X\Rpush{21.34}\Rabs
+\Rpop\X\Rpush{21.34}\Rchs
+\Rpop\X\Rpush{21.34}\Rint
+\Rpop\X\Rpush{21.34}\Rfrac
+\Rpop\X\Rpush{21.34}\Rdbl
+\Rpop\X\Rpush{21.34}\Rhalve
+\Rpop\X\Rpush{21.34}\Rsgn
+\Rpop\X\Rpush{21.34}\Rsin
+\Rpop\X\Rpush{21.34}\Rcos
+\Rpop\X\Rpush{21.34}\Rdeg
+\Rpop\X\Rpush{21.34}\Rrad
+\Rpop\X\Rpush{21.34}\Rlog
+\Rpop\X\Rpush{21.34}\Rln
+\Rpop\X\Rpush{-1.34}\Rexp
+\Rpop\X\Rpush{3.3}\Rexp
+\Rpop\X\Rpush{21.34}\Rsq
+\Rpop\X\Rpush{21.34}\Rinv
+\Rpop\X\Rpush{21.34}\Rfloor
+\Rpop\X\Rpush{21.34}\Rceil
+\Rpop\X\Rpush{21.34}\Rsqrt
+\Rpop\X\Rpush{21.34}\Rrand
+\Rpop\X\Rpush{21.34}\Rpush{12.34}\Rcmp
+\IFlt{}{}\IFgt{}{}\IFeq{}{}\Rsub
+\IFneg{}{}\IFpos{}{}\IFzero{}{}\Rpop\X
+\Rpush{1.2}\Rpush{-2.3}\Radd
+\Rpop\X\Rpush{1.2}\Rpush{-2.3}\Rsub
+\Rpop\X\Rpush{1.2}\Rpush{-2.3}\Rmul
+\Rpop\X\Rpush{1.2}\Rpush{-2.3}\Rdiv
+\Rpop\X\Rpush{2.3}\Rpush{17}\Rpow
+\Rpop\X\Rpush{2.3}\Rpush{-17}\Rpow
+\Rpop\X\Rpush{1.2}\Rpush{-2.3}\Rmax
+\Rpop\X\Rpush{1.2}\Rpush{-2.3}\Rmin
+\stopMFPprogram}
+
+\def\testii{% unary operand forms, including
+\MFPchs\X\Z % extra tests of sin, log, exp and pow
+\MFPchs\Y\Z
+\MFPabs\X\Z
+\MFPabs\Y\Z
+\MFPdbl\X\Z
+\MFPdbl\Y\Z
+\MFPhalve\X\Z
+\MFPhalve\Y\Z
+\MFPint\X\Z
+\MFPint\Y\Z
+\MFPsgn\X\Z
+\MFPsgn\Y\Z
+\MFPsq\X\Z
+\MFPsq\Y\Z
+\MFPinv\X\Z
+\MFPinv\Y\Z
+\MFPfrac\X\Z
+\MFPfrac\Y\Z
+\MFPfloor\X\Z
+\MFPfloor\Y\Z
+\MFPceil\X\Z
+\MFPceil\Y\Z
+\MFPsin{30}\Z
+\MFPsin{420}\Z
+\MFPcos{60}\Z
+\MFPcos{390}\Z
+\MFPlog\X\Z
+\MFPln\X\Z
+\MFPexp\X\Z
+\MFPexp\Y\Z
+\MFPsin{1}\Z
+\MFPsin{2}\Z
+\MFPsin{3}\Z
+\MFPsin{4}\Z
+\MFPsin{5}\Z
+\MFPsin{6}\Z
+\MFPsin{7}\Z
+\MFPsin{8}\Z
+\MFPsin{9}\Z
+\MFPsin{10}\Z
+\MFPsin{20}\Z
+\MFPsin{30}\Z
+\MFPsin{40}\Z
+\MFPsin{50}\Z
+\MFPsin{60}\Z
+\MFPsin{70}\Z
+\MFPsin{80}\Z
+\MFPsin{90}\Z
+\MFPlog{.1}\Z
+\MFPlog{.2}\Z
+\MFPlog{.3}\Z
+\MFPlog{.4}\Z
+\MFPlog{.5}\Z
+\MFPlog{.6}\Z
+\MFPlog{.7}\Z
+\MFPlog{.8}\Z
+\MFPlog{.9}\Z
+\MFPlog{1}\Z
+\MFPlog{1.01}\Z
+\MFPlog{1.02}\Z
+\MFPlog{1.03}\Z
+\MFPlog{1.04}\Z
+\MFPlog{1.05}\Z
+\MFPlog{1.06}\Z
+\MFPlog{1.07}\Z
+\MFPlog{1.08}\Z
+\MFPlog{1.09}\Z
+\MFPexp{.000001}\Z
+\MFPexp{.00001}\Z
+\MFPexp{.0001}\Z
+\MFPexp{.001}\Z
+\MFPexp{.01}\Z
+\MFPexp{.1}\Z
+\MFPexp{1}\Z
+\MFPexp{2}\Z
+\MFPexp{3}\Z
+\MFPexp{4}\Z
+\MFPexp{5}\Z
+\MFPexp{6}\Z
+\MFPexp{7}\Z
+\MFPexp{8}\Z
+\MFPexp{9}\Z
+\MFPexp{10}\Z
+\MFPsqrt{10}\Z
+\MFPrand{10}\Z
+\MFPexp{-8.3254}\Z
+\MFPpow\MFPe{-10}\Z
+\MFPpow\MFPe{-9}\Z
+\MFPpow\MFPe{-8}\Z
+\MFPpow\MFPe{-7}\Z
+\MFPpow\MFPe{-6}\Z
+\MFPpow\MFPe{-5}\Z
+\MFPpow\MFPe{-4}\Z
+\MFPpow\MFPe{-3}\Z
+\MFPpow\MFPe{-2}\Z
+\MFPpow\MFPe{-1}\Z
+\MFPpow\MFPe{0}\Z
+\MFPpow\MFPe{1}\Z
+\MFPpow\MFPe{2}\Z
+\MFPpow\MFPe{3}\Z
+\MFPpow\MFPe{4}\Z
+\MFPpow\MFPe{5}\Z
+\MFPpow\MFPe{6}\Z
+\MFPpow\MFPe{7}\Z
+\MFPpow\MFPe{8}\Z
+\MFPpow\MFPe{9}\Z
+\MFPpow\MFPe{10}\Z}
+
+\def\testiii{%% binary operand forms and print formating, plus
+\MFPsqrt{0}\Z % additional tests of sqrt
+\MFPsqrt{1}\Z
+\MFPsqrt{2}\Z
+\MFPsqrt{3}\Z
+\MFPsqrt{4}\Z
+\MFPsqrt{5}\Z
+\MFPsqrt{6}\Z
+\MFPsqrt{7}\Z
+\MFPsqrt{8}\Z
+\MFPsqrt{9}\Z
+\MFPsqrt{10}\Z
+\MFPsqrt{1524157.65279684}\Z
+\MFPadd\X\Y\Z
+\MFPsub\X\Y\Z
+\MFPsub\Y\X\Z
+\MFPsub\X\X\Z
+\MFPsub\Y\Y\Z
+\MFPmul\X\Y\Z
+\MFPdiv\X\Y\Z
+\MFPdiv\Y\X\Z
+\MFPmax\X\Y\Z
+\MFPmin\X\Y\Z
+\MFPpow\X{5}\Z
+\MFPpow\X{-5}\Z
+\MFPpow\Y{5}\Z
+\MFPpow\Y{-5}\Z
+\MFPcmp\X\Y
+\IFlt{}{}\IFgt{}{}\IFeq{}{}%
+\MFPsub\X\Y\Z
+\IFneg{}{}\IFpos{}{}\IFzero{}{}%
+\def\T{333.00000000}%
+\def\S{1357.12345678}%
+\MFPtruncate{4}\T\Z
+\MFPtruncate{0}\T\Z
+\MFPtruncate{-2}\T\Z
+\MFPstrip\T\Z
+\MFPstrip*\T\Z
+\MFPround{3}\S\Z
+\MFPround{5}\S\Z
+\MFPround{0}\S\Z
+\MFPround{-2}\S\Z
+\def\T{-333.00000000}%
+\def\S{-1357.12345678}%
+\MFPtruncate{4}\T\Z
+\MFPtruncate{0}\T\Z
+\MFPtruncate{-2}\T\Z
+\MFPstrip\T\Z
+\MFPstrip*\T\Z
+\MFPround{3}\S\Z
+\MFPround{5}\S\Z
+\MFPround{0}\S\Z
+\MFPround{-2}\S\Z}
+
+Three test loops follow. The first repeats 500 times a stack program
+that performs each available command followed by popping the result and
+repushing the original value(s).
+
+\newcount\n
+\def\testloopi{%
+ \ifnum \n>0
+ \advance\n -1
+ \testi
+ \expandafter
+ \testloopi
+ \fi
+}
+\n=500
+x\testloopi X
+
+
+The second repeats 100 times a sequence in which all the unary operand
+commands are performed twice, plus extra of sine, log and exp.
+
+\def\testloopii{%
+ \ifnum \n>0
+ \advance\n -1
+ \testii
+ \expandafter
+ \testloopii
+ \fi
+}
+\def\X{1.2}
+\def\Y{-2.3}
+\n=100
+x\testloopii X
+
+
+The third repeats 100 times a sequence in which all the binary operand
+commands are performed, plus some extra tests of sqrt and then all the
+print-preparation commands.
+
+\def\testloopiii{%
+ \ifnum \n>0
+ \advance\n -1
+ \testiii
+ \expandafter
+ \testloopiii
+ \fi
+}
+
+\n=100
+x\testloopiii X
+\end
+
+\end{document}
diff --git a/macros/generic/minifp/minifp.dtx b/macros/generic/minifp/minifp.dtx
new file mode 100644
index 0000000000..2e88dd1e47
--- /dev/null
+++ b/macros/generic/minifp/minifp.dtx
@@ -0,0 +1,4136 @@
+% \iffalse
+% -------------------------------------------------------------------
+%
+% Copyright 2008--2013, Daniel H. Luecking
+%
+% minifp may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License, either version 1.3b of this license or (at
+% your option) any later version. The latest version of this license is in
+% <http://www.latex-project.org/lppl.txt>
+% and version 1.3c or later is part of all distributions of LaTeX version
+% 2008/12/01 or later.
+%
+% minifp has maintenance status "author-maintained". The Current Maintainer
+% is Daniel H. Luecking. The Base Interpreter is TeX (plain TeX or LaTeX).
+%<*driver|sty>
+\def\MFPfiledate{2013/12/30}%
+\def\MFPfileversion{0.96}%
+%</driver|sty>
+%
+%<*driver>
+\ProvidesFile{minifp.dtx}
+ [\MFPfiledate\space v\MFPfileversion. Macros for real number operations and a
+ stack-based programing language.]%
+\documentclass[draft]{ltxdoc}
+
+\addtolength{\textwidth}{1pt}
+
+\usepackage[morefloats=5]{morefloats}
+\usepackage{amssymb}
+% This avoids messages about nonexistent font variants (e.g., in \section):
+\def\mytt{\upshape\mdseries\ttfamily}
+% I use it instead of \texttt:
+\renewcommand\marg[1]{{\mytt\{#1\}}}
+\renewcommand\oarg[1]{{\mytt [#1]}}
+\renewcommand\parg[1]{{\mytt (#1)}}
+\renewcommand \arg[1]{{\mytt \##1}}
+\renewcommand\#{\char`\#\relax}
+\DeclareRobustCommand\cs[1]{{\mytt\char`\\#1}}
+% sometimes I want a <meta> without enclosing braces:
+\renewcommand{\meta}[1]{\mbox{$\langle$\rmfamily\itshape#1\/$\rangle$}}
+% and sometimes I want the braces:
+\newcommand\mmarg[1]{\marg{\meta{#1}}}
+
+\def\prog#1{{\mdseries\scshape #1}}
+\def\mfp{\prog{minifp}}
+\def\Mfp{\prog{Minifp}}
+\def\file#1{{\mytt #1}}
+\let\dim\file
+\let\env\file
+\def\sgn{\mathop{\mathrm{sgn}}\nolimits}
+% \op is for abstract operations (e.g., \op{add}) as opposed to
+% the macro that performs it (e.g., \cs{Radd}). And \reg is for
+% a "register" (e.g., the 3 macros \MFP@x@Sgn, \MFP@x@Int and \MFP@x@Frc)
+% conceived of as a single entity.
+\let\op\textit
+\def\reg#1{$#1$}
+% The occasional bare \tt braces
+\renewcommand\{{\char`\{}
+\renewcommand\}{\char`\}}
+% this gives the alternative symbol in BNF productions, i.e., the bar
+% in: { this | that }
+\renewcommand\|{${}\mathrel{|}{}$}
+
+\makeatletter
+\newcommand\bsl{{\mytt\@backslashchar}}
+% better lists
+\def\@listi{\leftmargin\leftmargini
+ \parsep \z@ \@plus\p@ \@minus\z@
+ \topsep 4\p@ \@plus\p@ \@minus2\p@
+ \itemsep\parsep}
+\let\@listI\@listi \@listi
+\renewcommand\labelitemi{\normalfont\bfseries \textendash}
+\renewcommand\labelitemii{\textasteriskcentered}
+\renewcommand\labelitemiii{\textperiodcentered}
+\leftmargini\parindent
+% better index
+\def\usage#1{\textrm{#1}}
+\def\index@prologue{\section*{Index}\markboth{Index}{Index}%
+ Numbers refer to the page(s) where the corresponding entry is described.}
+\def\IndexParms{%
+ \parindent \z@ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \rightskip 5pt plus2em \mathsurround \z@
+ \parfillskip-5pt \small
+ % less hanging:
+ \def\@idxitem{\par\hangindent 20pt}%
+ \def\subitem{\@idxitem\hspace*{15pt}}%
+ \def\subsubitem{\@idxitem\hspace*{25pt}}%
+ \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}}
+\makeatother
+
+\title{The \mfp{} package\thanks{This file has version number
+ \fileversion, last revised \filedate. The code described here
+ was developed by Dan Luecking.}}
+\author{Dan Luecking}
+\date{\filedate}
+\DisableCrossrefs
+\CodelineIndex
+\AlsoImplementation
+
+\begin{document}
+ \DeleteShortVerb{\|}
+ \DocInput{minifp.dtx}
+\end{document}
+%</driver>
+%\fi
+% \CheckSum{3541}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{minifp.dtx}
+% \maketitle
+%
+% \begin{abstract}
+% This package provides minimal fixed point exact decimal arithmetic
+% operations. `Minimal' means numbers are limited to eight digits on
+% either side of the decimal point. `Exact' means that when a number
+% \emph{can} be represented exactly within those limits, it will be.
+% \end{abstract}
+%
+% \StopEventually{\PrintIndex}
+% \tableofcontents
+%
+% \section{Introduction}
+% In working on an application that needed to be able to automatically
+% generate numeric labels on the axes of a graph, I needed to be able
+% to make simple calculations with real numbers. What \TeX{} provides is
+% far too limited. In fact, its only native user-level support for real
+% numbers is as factors for dimensions. For example one can ``multiply''
+% $3.1\times 0.2$ by the following: \verb$\dimen0=0.2pt \dimen0=3.1\dimen0$.
+%
+% Unfortunately \TeX{} stores dimensions as integer multiples of the
+% ``scaled points'' (\dim{sp}) with \dim{sp}${}=2^{-16}$\dim{pt}, and
+% therefore \dim{.2pt} is approximated by $\frac{13107}{65536}$, which is
+% not exact. Then mutiplying by $3.1$ produces $\frac{40631}{65536}$. If
+% we ask \TeX{} to display this, it produces $0.61998$\dim{pt} and not the
+% exact value $0.62$. This is sufficiently accurate for positioning
+% elements on a page, but not for displaying automatically computed axis
+% labels if five digit accuracy is needed.
+%
+% The \mfp{} package was written to provide the necessary calculations
+% with the necessary accuracy for this application. The implementation
+% would have been an order of magnitude smaller and faster if only four digit
+% accuracy were provided (and I may eventually do that for the application
+% under consideration), but I have decided to clean up what I have
+% produced and release it as is. The full \mfp{} package provides nearly
+% the same operations as a subset of the \prog{fp} package, but the latter
+% carries calculations to 18 decimal places, which is far more than
+% necessary for my purposes. I want something small and fast to embed in
+% the \prog{mfpic} drawing package.
+%
+% I decided on eight digits on both sides of the decimal point essentially
+% because I wanted at least five digits and the design I chose made multiples
+% of four the easiest to work with.
+%
+% \Mfp{} also provides a simple stack-based language for writing assembly
+% language-like programs. Originally, this was to be the native
+% calculation method, but it turned out to be too unwieldy for ordinary
+% use. I left it in because it adds only about 10\% overhead to the code.
+%
+% But why \emph{only} eight digits? \TeX{} only works with integers, and
+% since the maximum integer allowed is about $2\,000\,000\,000$, the
+% largest numbers that can be added are limited to about $999\,999\,999$.
+% It is very little trouble to add numbers by adding their fractional
+% parts and integer parts separately as 9-digit integers. So it would seem
+% multiples of $9$ digits would be easy to implement.
+%
+% However, something we have to do repeatedly in \emph{division} is
+% multiply the integer and fractional parts of a number by a one-digit
+% number. For that purpose, nine digits would be too much, but eight
+% digits is just right. For nine digits, we would have to inconveniently
+% break the number into more than two parts. Limiting our numbers to
+% eight-digit parts drastically simplifies division.
+%
+% Another simplification: multiplication has to be done by breaking the
+% number into parts. \TeX{} can multiply any two 4-digit integers without
+% overflow, but it cannot multiply most pairs of 5-digit integers. Two
+% 8-digit numbers conveniently break into four 4-digit parts. To get even
+% nine digits of accuracy would require six parts (five, if we don't
+% insist on a separation occuring at the decimal point). The complexity of
+% the multiplication process goes up as the square of the number of parts,
+% so six parts would more than double the complexity.
+%
+% A final simplification: \TeX{} places a limit of nine on the number of
+% arguments a macro can have. Quite often the last argument is needed to
+% clear out unused text to be discarded. Thus, a string of eight digits
+% can quite often be processed with one execution of one nine-argument
+% macro.
+%
+% Addition and subtraction can be exact, multiplication and division can
+% extend numbers past the 8-digit limit so they might be rounded.
+% However, when the exact answer fits in the 8-digit limit, our code
+% should produce it. Overflow (in the sense that the integer part can
+% exceed the allowed eight digits) is always possible, but is much more
+% likely with multiplication and division.
+%
+% Multiplication is carried out internally to an exact answer, with 16
+% digits on each side of the decimal point. The underflow digits (places 9
+% through 16 after the decimal point) are used to round to an 8-digit
+% result. Overflow digits (those to the left of the lowest 8 in the
+% integer part) are discarded, usually without warning. Division is
+% internally carried to nine digits after the decimal, which is then also
+% rounded to an 8-digit result. Overflow digits are ignored for division
+% also.
+%
+% We supply two kinds of operations in this package. There are stack-based
+% operations, in which the operands are \op{popped} from a stack and the
+% results \op{pushed} onto it, and argument-based, in which the operands (and a
+% macro to hold the result^^A
+% \footnote{Unlike most other packages for decimal
+% arithmetic, \mfp{} puts the macro to hold the result
+% last. This allows the calculation to be performed before the
+% macro is even read, and this makes it somewhat easier for the
+% stack- and argument-based versions to share code.}^^A
+% ) are arguments of a macro. Both types load the arguments into internal
+% macros (think of them as ``registers''), then call internal commands
+% (think ``microcode'') which return the results in internal macros.
+% These results are then \op{pushed} onto the stack (stack-based
+% operations) or stored in a supplied macro argument (think ``variable'').
+% The difference lies entirely in where the operands come from (arguments
+% or stack) and where they go (macro or stack).
+%
+% The stack is implemented as an internal macro which is redefined with
+% each command. The binary operations act on the last two \op{pushed} objects
+% in the order they were \op{pushed}. For example, the sequence ``\op{push} 5,
+% \op{push} 3, \op{subtract}'' performs $5-3$ by popping $3$ and $5$ into
+% registers (thereby removing them from the stack), subtracting them
+% and then pushing the result ($2$) onto the stack.
+%
+% Our implementation of the \op{push} operation first prepares the number
+% in a standard form. Thus, stack-based operations always obtain numbers
+% in this form. The argument based operations will prepare the arguments
+% in the same way. The internal commands will thus have a standard form to
+% operate on. All results are returned in standard form.
+%
+% The standard form referred to above is an integer part (one to eight digits
+% with no unnecessary leading zeros nor unnecessary sign) followed by the
+% decimal point (always a dot, which is ASCII \number`\.), followed by exactly
+% eight digits, all of this preceded by a minus sign if the number is
+% negative. Thus, $-{-0.25}$ would be processed and stored as
+% ``\texttt{0.25000000}'' and $-.333333$ as ``\texttt{-0.33333300}''.
+%
+%
+% \section{User macros}
+%
+% \Mfp{} provides (so far) six binary operations (that act on a pair of
+% numbers): addition, subtraction, multiplication, division, maximum and
+% minimum, as well as fourteen unary operations (that act on one number):
+% negation, absolute value, doubling, halving, integer part, fractional
+% part, floor, ceiling, signum, squaring, increment, decrement and
+% inversion. With the ``\texttt{extra}'' option, the unary operations
+% sine, cosine, logarithm, powers, square root and random number are
+% available, and the binary operation angle. See section~\ref{extras}.
+%
+% These extra operations are made available using the \texttt{extra}
+% option in \LaTeX{}:
+% \begin{verbatim}
+% \usepackage[extra]{minifp} \end{verbatim}
+% In plain \TeX{}, they will be loaded if you give the macro
+% \cs{MFPextra} a definition (any definition) before inputting
+% \file{minifp.sty}:
+% \begin{verbatim}
+% \def\MFPextra{} \input minifp.sty \end{verbatim}
+% The extras can also be loaded by means of the command
+% \cs{MFPloadextra}, issued after \file{minifp.sty} is loaded.
+% As of version 0.95 \file{mfpextra} can be directly \cs{input}.
+% It will detect whether \file{minifp.sty} has been loaded and input it
+% if not. This will work only in plain \TeX{}.
+%
+% If the extra operations are not needed, some memory and time might be
+% saved by using \file{minifp.sty} alone. I have not seriously tried to
+% keep \file{mfpextra.tex} as small or fast as possible, but I do try
+% to improve the accuracy when I can.
+%
+% As previously mentioned, each of these operations come in two versions:
+% a version that acts on operands and stores the result in a macro, and a
+% version that acts on the stack. The former all have names that begin
+% \cs{MFP} and the latter begin with \cs{R}. The former can be used
+% anywhere, while the latter can only be used in a ``program''.
+% A program is started with \cs{startMFPprogram} and terminated with
+% \cs{stopMFPprogram}. The \texttt{R} in the names is for `real'. This is
+% because it is possible that stacks of other types will be implemented in
+% the future.
+%
+% For example, \verb$\MFPadd{1.2}{3.4}\X$ will add $1.20000000$ to
+% $3.40000000$ and then define \cs{X} to be the resulting
+% \texttt{4.60000000}. These operand forms do not alter or even address
+% the stack in any way. The stack-based version of the same operation
+% would look like the following:
+% \begin{verbatim}
+% \Rpush{1.2}
+% \Rpush{3.4}
+% \Radd
+% \Rpop\X \end{verbatim}
+% which would \op{push} first \texttt{1.20000000} then \texttt{3.40000000} onto
+% the stack, then replace them with \texttt{4.60000000}, then remove that
+% and store it in \verb$\X$. Clearly the stack is intended for
+% calculations that produce a lot of intermediate values and only the
+% final result needs to be stored.
+%
+% \SpecialUsageIndex{\startMFPprogram}
+% The command \cs{startMFPprogram} starts a group. That group should be
+% ended by \cs{stopMFPprogram}.
+% \SpecialUsageIndex{\stopMFPprogram}
+% Changes to the stack and defined macros are local to that group. Thus
+% the macro \cs{X} in the example above might seem to be useful only as a
+% temporary storage for later calculations in the same program group.
+% However, there are commands provided to force such a macro to survive
+% the group, and even to force the contents of the stack to survive the
+% group (see the end of subsection~\ref{stack}). Do not try to turn a
+% \mfp{} program into a \LaTeX{} environment. The extra grouping added by
+% environments would defeat the effects of these commands.
+%
+% \subsection{Nonstack-based operations}
+%
+% In the following tables, an argument designated \meta{num} can be any
+% decimal real number with at most 8 digits on each side of the decimal
+% point, or it can be a macro that contains such a number. If the decimal
+% dot is absent, the fractional part will be taken to be zero, if the
+% integer part or the fractional part is absent, it will be taken to be
+% zero. (One consequence of these rules is that all the following
+% arguments produce the same internal representation of zero: \marg{0.0},
+% \marg{0.}, \marg{.0}, \marg{0}, \marg{.}, and \marg{}\,.) Spaces may
+% appear anywhere in the \meta{num} arguments and are stripped out before
+% the number is used. For example, \marg{3 . 1415 9265} is a valid
+% argument. Commas are not permitted. The decimal point \emph{must} be
+% ASCII 46 (variously called a dot, period, or fullstop) with category 12
+% (`other'). If an input encoding is used that allows more than one `dot',
+% the user must be sure to enter this one. If some babel language
+% definitions make it a shorthand, it must be inactivated before use.
+%
+% The \cs{macro} argument is any legal macro. The result of using one of
+% these commands is that the macro is defined (or redefined, there is no
+% checking done) to contain the standard form of the result. If the
+% \meta{num} is a macro, the braces surrounding it are optional.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3in}}
+% \textit{Binary Operations}&\\[3pt]
+% \hline \hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\MFPadd}^^A
+% \cs{MFPadd}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Stores the result of \meta{num$_1$}${}+{}$\meta{num$_2$} in \cs{macro}\\
+% \SpecialUsageIndex{\MFPsub}^^A
+% \cs{MFPsub}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Stores the result of \meta{num$_1$}${}-{}$\meta{num$_2$} in \cs{macro}\\
+% \SpecialUsageIndex{\MFPmul}^^A
+% \cs{MFPmul}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Stores the result of \meta{num$_1$}${}\times{}$\meta{num$_2$},
+% rounded to 8 places after the decimal point, in \cs{macro}\\
+% \SpecialUsageIndex{\MFPmpy}^^A
+% \cs{MFPmpy}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Same as \cs{MFPmul}\\
+% \SpecialUsageIndex{\MFPdiv}^^A
+% \cs{MFPdiv}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Stores the result of \meta{num$_1$}${}/{}$\meta{num$_2$},
+% rounded to 8 places after the decimal point, in \cs{macro}\\
+% \SpecialUsageIndex{\MFPmin}^^A
+% \cs{MFPmin}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Stores the smaller of \meta{num$_1$} and \meta{num$_2$} in \cs{macro}\\
+% \SpecialUsageIndex{\MFPmax}^^A
+% \cs{MFPmax}\mmarg{num$_1$}\mmarg{num$_2$}\cs{macro}&
+% Stores the larger of \meta{num$_1$} and \meta{num$_2$} in \cs{macro}
+% \end{tabular}}
+%
+%\bigskip
+%
+% \centerline{%
+% \begin{tabular}{lp{3.4in}}
+% \textit{Unary Operations}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\MFPchs}^^A
+% \cs{MFPchs}\mmarg{num}\cs{macro}&
+% Stores $-{}$\meta{num} in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPabs}^^A
+% \cs{MFPabs}\mmarg{num}\cs{macro}&
+% Stores $|$\meta{num}$|$ in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPdbl}^^A
+% \cs{MFPdbl}\mmarg{num}\cs{macro}&
+% Stores $2\times{}$\meta{num} in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPhalve}^^A
+% \cs{MFPhalve}\mmarg{num}\cs{macro}&
+% Stores \meta{num}/2, rounded to 8 places after the decimal point, in
+% \cs{macro}.\\
+% \SpecialUsageIndex{\MFPint}^^A
+% \cs{MFPint}\mmarg{num}\cs{macro}&
+% Replaces the part of \meta{num} after the decimal point with zeros
+% (keeps the sign unless the result is zero) and stores the result in
+% \cs{macro}.\\
+% \SpecialUsageIndex{\MFPfrac}^^A
+% \cs{MFPfrac}\mmarg{num}\cs{macro}&
+% Replaces the part of \meta{num} before the decimal point with zero
+% (keeps the sign unless the result is zero) and stores the result in
+% \cs{macro}.\\
+% \SpecialUsageIndex{\MFPfloor}^^A
+% \cs{MFPfloor}\mmarg{num}\cs{macro}&
+% Stores the largest integer not more than \meta{num} in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPceil}^^A
+% \cs{MFPceil}\mmarg{num}\cs{macro}&
+% Stores the smallest integer not less than \meta{num} in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPsgn}^^A
+% \cs{MFPsgn}\mmarg{num}\cs{macro}&
+% Stores $-1$, $0$ or $1$ (in standard form) in \cs{macro} according
+% to whether \meta{num} is negative, zero, or positive.\\
+% \SpecialUsageIndex{\MFPsq}^^A
+% \cs{MFPsq}\mmarg{num}\cs{macro}&
+% Stores the square of \meta{num} in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPinv}^^A
+% \cs{MFPinv}\mmarg{num}\cs{macro}&
+% Stores 1/\meta{num}, rounded to 8 places after the decimal point, in
+% \cs{macro}.\\
+% \SpecialUsageIndex{\MFPincr}^^A
+% \cs{MFPincr}\mmarg{num}\cs{macro}&
+% Stores \meta{num}${}+1$ in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPdecr}^^A
+% \cs{MFPdecr}\mmarg{num}\cs{macro}&
+% Stores \meta{num}${}-1$ in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPzero}^^A
+% \cs{MFPzero}\mmarg{num}\cs{macro}&
+% Ignores \meta{num} and stores {0.00000000} in the \cs{macro}.\\
+% \SpecialUsageIndex{\MFPstore}^^A
+% \cs{MFPstore}\mmarg{num}\cs{macro}&
+% Stores the \meta{num}, converted to standard form, in \cs{macro}
+% \end{tabular}}
+%
+%\bigskip
+%
+% The command \cs{MFPzero} is useful for ``macro programs''. If you want
+% to do something to a number depending on the outcome of a test, you may
+% occasionally want to simply absorbed the number and output a default
+% result. This is more efficient than multiplying by zero (but less
+% efficient than simply defining the \cs{macro} to be zero.)
+%
+% Note that one could easily double, halve, square, increment,
+% decrement or invert a \meta{num} using the binary versions of
+% \cs{MFPadd}, \cs{MFPsub}, \cs{MFPmul} or \cs{MFPdiv}. The commands
+% \cs{MFPdbl}, \cs{MFPhalve}, \cs{MFPsq}, \cs{MFPincr}, \cs{MFPdecr} and
+% \cs{MFPinv} are designed to be more efficient versions, since they are
+% used repeatedly in internal code.
+%
+% Also, multiplication is far more efficient than division, so even if you
+% use the two argument versions, \cs{MFPmul}\mmarg{num}\marg{.5} is faster than
+% \cs{MFPdiv}\mmarg{num}\marg{2}.
+%
+% There is one command that takes no argument and returns no value:
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3.4in}}
+% \textit{Do Nothing}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\MFPnoop}\cs{MFPnoop}& Does nothing.
+% \end{tabular}}
+%
+% \bigskip
+% The following are not commands at all, but macros that contain
+% convenient constants.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3.9in}}
+% \textit{Constants}&\\[3pt]
+% \hline\hline
+% \textbf{Constant}&\textbf{value}\\
+% \hline
+% \SpecialUsageIndex{\MFPpi}^^A
+% \cs{MFPpi}& \texttt{3.14159265}, the eight-digit approximation to
+% $\pi$.\\
+% \SpecialUsageIndex{\MFPe}^^A
+% \cs{MFPe}& \texttt{2.71828183}, the eight-digit approximation to
+% $e$.\\
+% \SpecialUsageIndex{\MFPphi}^^A
+% \cs{MFPphi}& \texttt{1.61803399}, the eight-digit approximation to
+% the golden ratio $\phi.$
+% \end{tabular}}
+%
+% \bigskip
+% There also exist commands to check the sign of a number and the
+% relative size of two numbers:
+%
+% \medskip
+% \indent \SpecialUsageIndex{\MFPchk}\cs{MFPchk}\mmarg{num}\\
+% \indent \SpecialUsageIndex{\MFPcmp}\cs{MFPcmp}\mmarg{num$_1$}\mmarg{num$_2$}
+%
+% \medskip
+% \noindent These influence the behavior of six commands:
+%
+% \medskip
+% \indent \SpecialUsageIndex{\IFneg}\cs{IFneg}\mmarg{true text}\mmarg{false text}\\
+% \indent \SpecialUsageIndex{\IFzero}\cs{IFzero}\mmarg{true text}\mmarg{false text}\\
+% \indent \SpecialUsageIndex{\IFpos}\cs{IFpos}\mmarg{true text}\mmarg{false text}\\
+% \indent \SpecialUsageIndex{\IFlt}\cs{IFlt}\mmarg{true text}\mmarg{false text}\\
+% \indent \SpecialUsageIndex{\IFeq}\cs{IFeq}\mmarg{true text}\mmarg{false text}\\
+% \indent \SpecialUsageIndex{\IFgt}\cs{IFgt}\mmarg{true text}\mmarg{false text}
+%
+% \medskip
+% Issuing \verb$\MFPchk{\X}$ will check the sign of the number stored in
+% the macro \cs{X}. Then \verb$\IFneg{A}{B}$ will produce `\verb$A$' if it
+% is negative and `\verb$B$' if it is zero or positive. Similarly,
+% \verb$\MFPcmp{\X}{1}$ will compare the number stored in \cs{X} to $1$.
+% Afterward, \verb$\IFlt{A}{B}$ will produce `\verb$A$' if \cs{X} is less
+% than $1$ and `\verb$B$' if \cs{X} is equal to or greater than $1$.
+%
+% If users finds it tiresome to type two separate commands, they can
+% easily define a single command that both checks a value and runs
+% \cs{IF...}. For example\\
+% \indent\verb$\def\IFisneg#1{\MFPchk{#1}\IFneg}$\\
+% Used like\\
+% \indent\verb$\IFisneg{\X}{A}{B}$\\
+% this will check the value of \cs{X} and run \cs{IFneg} on the pair of
+% alternatives that follow.
+%
+% The user might never need to use \cs{MFPchk} because every one of the
+% operators provided by the \mfp{} package runs an internal version of
+% \cs{MFPchk} on the result of the operation before storing it in the
+% \cs{macro}. For example, after \cs{MFPzero} the command \cs{IFzero} will
+% always return the first argument. For this reason one should not insert
+% any \mfp{} operations between a check/compare and the \cs{IF...} command
+% that depends on it.
+%
+% Note: the behavior of all six \cs{IF...} commands is influenced by
+% \emph{both} \cs{MFPchk} and \cs{MFPcmp}. This is because internally
+% \verb$\MFPchk{\X}$ (for example) and \verb$\MFPcmp{\X}{0}$ do
+% essentially the same thing. In fact there are only three internal
+% booleans that govern the behavior of the six \cs{IF...} commands. The
+% different names are for clarity: \cs{IFgt} after a compare is less
+% confusing than the entirely equivalent \cs{IFpos}.
+%
+% It should probably be pointed out that the settings for the \cs{IF...}
+% macros are local to any \TeX{} groups they are contained in.
+%
+%
+% \subsection{Commands to process numbers for printing}
+%
+% After \verb$\MFPadd{1}{2}\X$ one can use \cs{X} anywhere and get
+% $3.00000000$. One might may well prefer $3.0$, and so commands are
+% provided to truncate a number or round it to some number of decimal
+% places. Note: these are provided for printing and they will not invoke
+% the above \cs{MFPchk}. They do not have any stack-based versions.
+% The commands are\\
+% \indent\SpecialUsageIndex{\MFPtruncate}\cs{MFPtruncate}\mmarg{int}\mmarg{num}\cs{macro}\\
+% \indent\SpecialUsageIndex{\MFPround}\cs{MFPround}\mmarg{int}\mmarg{num}\cs{macro}\\
+% \indent\SpecialUsageIndex{\MFPstrip}\cs{MFPstrip}\mmarg{num}\cs{macro}\\
+% where \meta{int} is a whole number between $-8$ and $8$ (inclusive). The
+% other two arguments are as before.
+%
+% These commands merely process \meta{num} and define \cs{macro} to
+% produce a truncated or rounded version, or one stripped of trailing
+% zeros, or one with added trailing zeros. Note that truncating or
+% rounding a number to a number of digits greater than it already has will
+% actually lengthen it with added zeros. For example,
+% \verb$\MFPround{4}{3.14159}\X$
+% will cause \cs{X} to be defined to contain \texttt{3.1416}, while
+% \verb$\MFPround{6}{3.14159}\X$
+% will cause \cs{X} to contain \texttt{3.141590}.
+% If \cs{Y} contains \texttt{3.14159}, then
+% \verb$\MFPtruncate{4}\Y\Y$
+% will redefine \cs{Y} to contain \texttt{3.1415}. Also,
+% \verb$\MFPstrip{1.20000000}\Z$
+% will cause \cs{Z} to contain \texttt{1.2}. All these commands first
+% normalize the \meta{num}, so any spaces are removed and redundant signs
+% are discarded.
+%
+% If \meta{int} is negative, places are counted to the left of the decimal
+% point and $0$\,s are substituted for lower order digits. That is,
+% \verb$\MFPtruncate{-2}{1864.3}\X$
+% will give \cs{X} the value \texttt{1800} and
+% \verb$\MFPround{-2}{1864}\X$
+% will give \cs{X} the value \texttt{1900}.
+%
+% If the first argument of \cs{MFPround} or \cs{MFPtruncate} is zero or
+% negative then the dot is also omitted from the result. If \cs{MFPstrip} is
+% applied to a number with all zeros after the dot, then one 0 is
+% retained. There is a star form where the dot and the zero are dropped.
+%
+% For these three commands, the sign of the number is irrelevant. That
+% is, the results for negative numbers are the negatives of the results
+% for the absolute values. The processing will remove redundant signs
+% along with redundant leading zeros: \verb$\MFPtruncate{-3}{-+123.456}$
+% will produce \texttt{0}. The rounding rule is as follows: round up if
+% the digit to the right of the rounding point is $5$ or more, round down if
+% the digit is $4$ or less.
+%
+%
+% \subsection{Stack-based macros}\label{stack}
+%
+% The stack-based macros can only be used in a \mfp{} program group.
+% This group is started by the command \cs{startMFPprogram} and ended by
+% \cs{stopMFPprogram}. None of the stack-based macros takes an argument,
+% but merely operate on values on the stack, replacing them with the
+% results. There are also commands to manipulate the stack and save a
+% value on the stack into a macro. Finally, since all changes to the stack
+% (and to macros) are local and therefore lost after \cs{stopMFPprogram},
+% there are commands to selectively cause them to be retained.
+%
+% To place numbers on the stack we have \cs{Rpush} and to get them
+% off we have \cs{Rpop}. The syntax is\\
+% \indent \SpecialUsageIndex{\Rpush}\cs{Rpush}\marg{\meta{num}}\\
+% \indent \SpecialUsageIndex{\Rpop}\cs{Rpop}\cs{macro}\\
+% The first will preprocess the \meta{num} as previously discussed and
+% put it on the stack, the second will remove the last number from the stack
+% and define the given macro to have that number as its definition.
+%
+% All the binary operations remove the last two numbers from the stack,
+% operate on them in the order they were put on the stack, and \op{push} the
+% result on the stack. Thus the program
+% \begin{verbatim}
+% \Rpush{1.2}
+% \Rpush{3.4}
+% \Rsub \end{verbatim}
+% will first put \texttt{1.20000000} and \texttt{3.40000000} on the stack
+% and then replace them with \texttt{-2.20000000}. Note the order: $1.2-3.4$.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{4.0in}}
+% \textit{Binary Operations}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\Radd}\cs{Radd}&
+% Adds the last two numbers on the stack.\\
+% \SpecialUsageIndex{\Rsub}\cs{Rsub}&
+% Subtracts the last two numbers on the stack.\\
+% \SpecialUsageIndex{\Rmul}\cs{Rmul}&
+% Multiplies the last two numbers on the stack, rounding to 8 decimal
+% places.\\
+% \SpecialUsageIndex{\Rmpy}\cs{Rmpy}&
+% Same as \cs{Rmul}.\\
+% \SpecialUsageIndex{\Rdiv}\cs{Rdiv}&
+% Divides the last two numbers on the stack, rounding to 8 decimal
+% places.\\
+% \SpecialUsageIndex{\Rmin}\cs{Rmin}&
+% Replaces the last two elements on the stack with the smaller one.\\
+% \SpecialUsageIndex{\Rmax}\cs{Rmax}&
+% Replaces the last two elements on the stack with the larger one.
+% \end{tabular}}
+%
+%\bigskip
+%
+% The unary operations replace the last number on the stack with the
+% result of the operation performed on it.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{4.0in}}
+% \textit{Unary Operations}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\Rchs}\cs{Rchs}&
+% Changes the sign.\\
+% \SpecialUsageIndex{\Rabs}\cs{Rabs}&
+% Obtains the absolute value.\\
+% \SpecialUsageIndex{\Rdbl}\cs{Rdbl}&
+% Doubles the value.\\
+% \SpecialUsageIndex{\Rhalve}\cs{Rhalve}&
+% Halves the value, rounding to 8 places.\\
+% \SpecialUsageIndex{\Rint}\cs{Rint}&
+% Replaces the fractional part with zeros. If the result equals $0.0$, any
+% negative sign will be dropped.\\
+% \SpecialUsageIndex{\Rfrac}\cs{Rfrac}&
+% Replaces the integer part with \texttt{0}. If the result equals
+% $0.0$, any negative sign will be dropped.\\
+% \SpecialUsageIndex{\Rfloor}\cs{Rfloor}&
+% Obtains the largest integer not greater than the number.\\
+% \SpecialUsageIndex{\Rceil}\cs{Rceil}&
+% Obtains the smallest integer not less than the number.\\
+% \SpecialUsageIndex{\Rsgn}\cs{Rsgn}&
+% Obtains $-1$, $0$ or $1$ according to whether the number
+% is negative, zero, or positive. These numbers are pushed onto the
+% stack with the usual decimal point followed by 8 zeros.\\
+% \SpecialUsageIndex{\Rsq}\cs{Rsq}&
+% Obtains the square. Slightly more efficient than the equivalent
+% \cs{Rdup}\cs{Rmul}. See below for \cs{Rdup}.\\
+% \SpecialUsageIndex{\Rinv}\cs{Rinv}&
+% Obtains the reciprocal. Slightly more efficient than the equivalent
+% division.\\
+% \SpecialUsageIndex{\Rincr}\cs{Rincr}&
+% Increases by $1$. Slightly more efficient than the equivalent
+% addition.\\
+% \SpecialUsageIndex{\Rdecr}\cs{Rdecr}&
+% Decreases by $1$. Slightly more efficient than the equivalent
+% subtraction.\\
+% \SpecialUsageIndex{\Rzero}\cs{Rzero}&
+% Replaces the number with zero. Slightly more convenient than the
+% equivalent \cs{Rpop}\cs{X} followed by a \cs{Rpush}\marg{0}.\\
+% \end{tabular}}
+%
+%\bigskip
+%
+%
+% There is one operation, which does not read the stack nor change it
+% (nor do anything else).
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3.8in}}
+% \textit{Do Nothing}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\Rnoop}\cs{Rnoop}&
+% Does nothing.
+% \end{tabular}}
+%
+% \bigskip
+% There also exist commands to check the sign of the last number, and the
+% relative size of the last two numbers on the stack:\\
+% \indent \SpecialUsageIndex{\Rchk}\cs{Rchk}\\
+% \indent \SpecialUsageIndex{\Rcmp}\cs{Rcmp}\\
+% They do not remove anything from the stack.
+% Just like the nonstack counterparts, they influence the behavior of
+% six commands: \cs{IFneg}, \cs{IFzero}, \cs{IFpos}, \cs{IFlt},
+% \cs{IFeq} and \cs{IFgt}. Issuing \verb$\Rchk$ will check the sign of the
+% last number on the stack, while \verb$\Rcmp$ will compare the last two
+% in the order they were pushed. For example, in the following
+% \begin{verbatim}
+% \Rpush{1.3}
+% \Rpush{-2.3}
+% \Rcmp
+% \IFgt{\Radd}{\Rsub}
+% \Rpush\X
+% \Rchk
+% \IFneg{\Radd}{\Rsub} \end{verbatim}
+% \verb$\Rcmp$ will compare $1.3$ to $-2.3$. Since the first is greater
+% than the second, \verb$\IFgt$ will be true and they will be added,
+% producing $-1.0$. Following this the contents of the macro \cs{X} are
+% pushed, it is examined by \verb$\Rchk$ and then either added to or
+% subtracted from $-1.0$.
+%
+% The user might never need to use \cs{Rchk} because every operator that
+% puts something on the stack also runs \cs{Rchk}. In the above program,
+% in fact, \verb$\Rchk$ is redundant since \verb$\Rpush$ will already have
+% run it on the contents of \cs{X}.
+%
+% There exist stack manipulation commands that allow the contents of the
+% stack to be changed without performing any operations. These are really
+% just conveniences, as there effects could be obtained with appropriate
+% combinations of \verb$\Rpop$ and \verb$\Rpush$. These commands, however, do
+% not run \verb$\Rchk$ as \cs{Rpush} would.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3.8in}}
+% \textit{Stack Manipulations}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\Rdup}\cs{Rdup}&
+% Puts another copy of the last element of the stack onto the stack.\\
+% \SpecialUsageIndex{\Rexch}\cs{Rexch}&
+% Exchanges the last two elements on the stack.
+% \end{tabular}}
+%
+% \bigskip
+%
+% After \cs{stopMFPprogram}, any changes to macros or to the stack are
+% lost, unless arrangements have been made to save them. There are four
+% commands provided. Two act on a macro which is the only argument, the
+% other two have no arguments and act on the stack. The macro must
+% simply contain a value, it cannot be more complicated and certainly
+% cannot take an argument.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3.8in}}
+% \textit{Exporting changed values}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\Export}\cs{Export}\cs{macro}&
+% \raggedright
+% Causes the definition of \cs{macro} to survive the
+% program group.\tabularnewline
+% \SpecialUsageIndex{\Global}\cs{Global}\cs{macro}&
+% Causes the definition of \cs{macro} to be global.\\
+% \SpecialUsageIndex{\ExportStack}\cs{ExportStack}&
+% \raggedright
+% Causes the contents of the stack to survive the program
+% group.\tabularnewline
+% \SpecialUsageIndex{\GlobalStack}\cs{GlobalStack}&
+% Causes the contents of the stack to be global.\\
+% \end{tabular}}
+%
+% \bigskip
+% The difference between \cs{Export} and \cs{Global} is solely in how
+% \emph{other} grouping is handled. If the program group is contained in
+% another group (for example, inside an environment), then the result of
+% \cs{Global}\cs{X} is that the definition of \cs{X} survives that group
+% (and all containing groups) as well. On the other hand, after
+% \cs{Export}\cs{X}, then the definition survives the program group, but
+% not other containing groups.
+%
+% If \TeX{} grouping is used \emph{inside} a program group, then using
+% \cs{Export} inside that group has no effect at all, while \cs{Global}
+% works as before.
+%
+% The stack versions are implemented by running \cs{Export} or
+% \cs{Global} on the internal macro that defines the stack, so they
+% have the same behavior.
+%
+% \subsection{Errors}
+%
+% If one tries to \op{pop} from an empty stack, an error message will be
+% issued. Ignoring the error causes the macro to have the value stored
+% in the macro \SpecialUsageIndex{\EndofStack}\verb$\EndofStack$.
+% Its default is \texttt{0.00000000}.
+%
+% If one tries to divide by zero, an error message will be issued.
+% Ignoring the error causes the result to be one of the following:
+% \begin{itemize}
+% \item Dividing $0$ by $0$ gives a result whose integer part is stored
+% in \verb$\ZeroOverZeroInt$\SpecialUsageIndex{\ZeroOverZeroInt}
+% and whose fractional part is stored in
+% \SpecialUsageIndex{\ZeroOverZeroFrac}\verb$\ZeroOverZeroFrac$.
+% The default is \texttt{0.00000000}
+% \item Dividing a nonzero $x$ by $0$ gives a result whose integer part is
+% stored in \SpecialUsageIndex{\xOverZeroInt}\verb$\xOverZeroInt$
+% and whose fractional part is stored in
+% \SpecialUsageIndex{\xOverZeroFrac}\verb$\xOverZeroFrac$. The
+% defaults are both equal to \texttt{99999999}. The sign of the
+% result will be the sign of $x$.
+% \end{itemize}
+%
+% You can change any of these macros, but make sure they produce a
+% result which is a number in standard form (as described earlier).
+% These macros are copied directly into the result without checking.
+% Then further processing steps may require the result to be a number in
+% standard form.
+%
+% Error messages may result from trying to process numbers given in
+% incorrect format. However, there are so many ways for numbers to be
+% incorrect that this package does not even try to detect them. Thus, they
+% will only be caught if some \TeX{} operation encounters something it
+% cannot handle. (The \LaTeX{} manual calls these ``weird errors'' because
+% the messages tend to be uninformative.) Incorrectly formed numbers may even
+% pass unnoticed, but leave unexpected printed characters on the paper, or odd
+% spacing.
+%
+% \section{Implementation}
+%
+% \subsection{Utility macros}
+%
+% We announce ourself, and our purpose. We save the catcode of
+% \texttt{@} and change it to letter. Several other catcodes are saved
+% and set to other in this file. We also make provisions to load the
+% extra definitions, either directly with \cs{MFPloadextra} or through a
+% declared option in \LaTeX{}.
+% \begin{macrocode}
+%<*sty>
+\expandafter
+\ifx \csname MFP@finish\endcsname\relax
+\else \expandafter\endinput \fi
+\expandafter\edef\csname MFP@finish\endcsname{%
+ \catcode64=\the\catcode64 \space
+ \catcode46=\the\catcode46 \space
+ \catcode60=\the\catcode60 \space
+ \catcode62=\the\catcode62 \space}%
+\ifx\ProvidesPackage\UndEfInEd
+ \newlinechar`\^^J%
+ \message{%
+ Package minifp: \MFPfiledate\space v\MFPfileversion. %
+ Macros for real number operations %
+ ^^Jand a stack-based programing language.^^J}%
+\else
+ \ProvidesPackage{minifp}[\MFPfiledate\space v\MFPfileversion. %
+ Macros for real number operations %
+ and a stack-based programing language.]%
+ \DeclareOption{extra}{\def\MFPextra{}}%
+ \ProcessOptions\relax
+\fi
+\catcode64=11
+\ifx\MFPextra\UndEfInEd
+ \def\MFP@loadextra{}%
+\else
+ \def\MFP@loadextra{\input mfpextra\relax}%
+\fi
+\def\MFPloadextra{\input mfpextra\relax}%
+\catcode46=12
+\catcode60=12
+\catcode62=12
+% \end{macrocode}
+%
+% We check for \LaTeX{} (ignoring \LaTeX209); \cs{MFP@ifnoLaTeX}\dots\cs{MFP@end}
+% is skipped in \LaTeX{} and executed otherwise.
+% \begin{macrocode}
+\long\def\gobbleto@MFP@end#1\MFP@end{}%
+\def\MFP@end{\@empty}%
+\ifx\documentclass\UndEfInEd
+ \def\MFP@ifnoLaTeX{}%
+\else
+ \let\MFP@ifnoLaTeX\gobbleto@MFP@end
+\fi
+% \end{macrocode}
+%
+% We have \LaTeX{}'s \cs{zap@space}. It pretty much \emph{must} be used
+% inside \cs{edef} or other purely expansion context. The rest of these
+% are standard \LaTeX{} internals. Note that the token list that
+% \cs{zap@space} is applied to should probably never contain braces or
+% expandable tokens.\\
+% \indent Usage: \verb*$\edef\X{\zap@space<tokens> \@empty}$\\
+% The space is necessary in case none exist; the \cs{@empty} terminates
+% the loop.
+% \begin{macrocode}
+\let\@xp\expandafter
+\def\@XP{\@xp\@xp\@xp}%
+\MFP@ifnoLaTeX
+ \def\@empty{}%
+ \long\def\@gobble#1{}%
+ \def\zap@space#1 #2{#1\ifx#2\@empty\else\@xp\zap@space\fi#2}%
+ \long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}%
+ \def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}%
+ {%
+ \def\:{\global\let\@sptoken= }\: %
+ \def\:{\@xifnch}\@xp\gdef\: {\futurelet\@let@token\@ifnch}%
+ }%
+ \def\@ifstar#1{\@ifnextchar*{\@firstoftwo{#1}}}%
+ \long\def\@firstofone #1{#1}%
+ \long\def\@firstoftwo #1#2{#1}%
+ \long\def\@secondoftwo#1#2{#2}%
+\MFP@end
+% \end{macrocode}
+%
+% We need to divide by both $10^4$ and $10^8$ several times. I could
+% have allocated two count registers, but have taken the approach of
+% reserving those for intermediate calculations.
+% \begin{macrocode}
+\def\MFP@tttfour {10000}% ttt = Ten To The
+\def\MFP@ttteight{100000000}%
+% \end{macrocode}
+%
+% These are for manipulating digits. The \verb$\...ofmany$ commands
+% require a sequence of arguments (brace groups or tokens) followed by
+% \verb$\MFP@end$. The minimum number of required parameters is surely
+% obvious. For example, \cs{MFP@ninthofmany} must be used like\\
+% \indent\cs{MFP@ninthofmany}\meta{9 or more arguments}\cs{MFP@end}\\
+% All these are fully expandable.
+% \begin{macrocode}
+\def\MFP@oneofmany#1#2\MFP@end{#1}%
+\def\MFP@fifthofmany#1#2#3#4#5#6\MFP@end{#5}%
+\def\MFP@ninthofmany#1#2#3#4#5#6#7#8{\MFP@oneofmany}%
+\def\MFP@eightofmany#1#2#3#4#5#6#7#8#9\MFP@end{#1#2#3#4#5#6#7#8}%
+% \end{macrocode}
+%
+% \subsection{Processing numbers and the stack}
+%
+% Our stack stores elements in groups, like \\
+% \indent \verb${-1.234567890}{0.00001234}\MFP@eos$\\
+% with an end marker. The purpose of the marker is to prevent certain
+% parameter manipulations from stripping off braces. This means we can't
+% use \cs{@empty} to test for an empty stack. At the moment, only
+% \cs{Rpop} actually checks, but all other stack commands (so far) use
+% \cs{Rpop} to get their arguments.
+% \begin{macrocode}
+\let\MFP@eos\relax
+\def\MFP@EOS{\MFP@eos}%
+\def\MFP@initRstack{\def\MFP@Rstack{\MFP@eos}}%
+\MFP@initRstack
+% \end{macrocode}
+%
+% Define some scratch registers for arithmetic operations. We don't care
+% that these might be already in use, as we only use them inside a group.
+% However, we need one counter that will not be messed with by any of
+% our operations. I must be sure not to use commands that change
+% \cs{MFP@loopctr} in code that depends on it.
+% \begin{macrocode}
+\countdef \MFP@tempa 0
+\countdef \MFP@tempb 2
+\countdef \MFP@tempc 4
+\countdef \MFP@tempd 6
+\countdef \MFP@tempe 8
+\countdef \MFP@tempf 10
+\newcount \MFP@loopctr
+% \end{macrocode}
+%
+% The following can only be used where unrestricted expansion is robust.
+% It will allow results obtained inside a group to survive the group,
+% but not be unrestrictedly global.
+% Example: the code\\
+% \indent \verb$\MFP@endgroup@after{\def\noexpand\MFP@z@Val{\MFP@z@Val}}$\\
+% becomes\\
+% \indent \verb$\edef\x{\endgroup\def\noexpand\MFP@z@Val{\MFP@z@Val}}\x$\\
+% which gives, upon expansion of \verb$\x$,\\
+% \indent
+% \cs{endgroup}\cs{def}\cs{MFP@z@Val}\marg{\meta{expansion-of-\cs{MFP@z@Val}}}\\
+% which defines \cs{MFP@z@Val} outside the current group to equal its expansion
+% within the current group (provided the group was started with
+% \cs{begingroup}).
+%
+% We define a \cs{MFP@returned@values} to make all the conceivable produced
+% values survive the group. The \cs{MFPcurr@Sgn} part is to permit testing
+% the sign of the result and allow conditional code based on it.
+%
+% I have been lax at making sure \cs{MFP@z@Ovr} is properly initiallized
+% and properly checked whenever it could be relevant, and properly
+% passed on. I think every internal command \cs{MFP@R}\textit{xxx}
+% should ensure it starts being zero and ends with a numerical value. At
+% one time division could leave it undefined.
+%
+% \cs{MFP@subroutine} executes its argument (typically a single command) with
+% a wrapper that initializes all the macros that might need initializing,
+% and returns the necessary results.
+% \begin{macrocode}
+\def\MFP@endgroup@after#1{\edef\x{\endgroup#1}\x}%
+\def\MFP@afterdef{\def\noexpand}%
+\def\MFP@returned@values{%
+ \MFP@afterdef\MFP@z@Val{\MFP@z@Sign\MFP@z@Int.\MFP@z@Frc}%
+ \MFP@afterdef\MFP@z@Ovr{\MFP@z@Ovr}%
+ \MFP@afterdef\MFP@z@Und{\MFP@z@Und}%
+ \MFP@afterdef\MFPcurr@Sgn{\MFP@z@Sgn}}%
+\def\MFP@subroutine#1{%
+ \begingroup
+ \MFP@Rzero
+ \def\MFP@z@Ovr{0}%
+ \def\MFP@z@Und{0}%
+ #1%
+ \MFP@endgroup@after\MFP@returned@values}%
+\def\MFP@Rzero{%
+ \def\MFP@z@Sgn{0}%
+ \def\MFP@z@Int{0}%
+ \def\MFP@z@Frc{00000000}}%
+% \end{macrocode}
+%
+% \DescribeMacro{\EndofStack}
+% We define here the error messages: popping from an empty stack and
+% dividing by zero. In addition to the error messages, we provide some
+% default values that hopefully allow some operations to continue.
+%
+% We also have a warning or two.
+% \begin{macrocode}
+\def\MFP@errmsg#1#2{%
+\begingroup
+ \newlinechar`\^^J\let~\space
+ \def\MFP@msgbreak{^^J~~~~~~~~~~~~~~}%
+ \edef\reserved@a{\errhelp{#2}}\reserved@a
+ \errmessage{MiniFP error: #1}%
+\endgroup}%
+\def\MFP@popempty@err{%
+ \MFP@errmsg{cannot POP from an empty stack}%
+ {There were no items on the stack for the POP operation. %
+ If you continue, ^^Jthe macro will contain the %
+ value \EndofStack.}}%
+\def\EndofStack{0.00000000}%
+\def\MFP@dividebyzero@err{%
+ \MFP@errmsg{division by zero}%
+ {You tried to divide by zero. What were you thinking? %
+ If you continue, ^^Jthe value assigned will be either %
+ \ZeroOverZeroInt.\ZeroOverZeroFrac~(numerator=0) or %
+ ^^J+/-\xOverZeroInt.\xOverZeroFrac~(numerator<>0).}}%
+\def\MFP@warn#1{%
+\begingroup
+ \newlinechar`\^^J\let~\space
+ \def\MFP@msgbreak{^^J~~~~~~~~~~~~~~~~}%
+ \immediate\write16{^^JMiniFP warning: #1.^^J}%
+\endgroup}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MaxRealInt}These are the largest possible integer and
+% fractional parts of a real
+% \DescribeMacro{\MaxRealFrac}number. They are returned for division by
+% zero, for logarithm of zero, and when overflow is detected in the
+% exponential function.
+% \begin{macrocode}
+\def\MaxRealInt {99999999}%
+\def\MaxRealFrac {99999999}%
+% \end{macrocode}
+%
+% \SpecialUsageIndex{\MaxRealInt}
+% \SpecialUsageIndex{\MaxRealFrac}
+% These are the results returned when trying to divide by zero. Two are
+% \DescribeMacro{\xOverZeroInt}
+% \DescribeMacro{\xOverZeroFrac}
+% used when dividing a nonzero number by zero and and two when trying to
+% divide zero by zero.
+% \DescribeMacro{\ZeroOverZeroInt}
+% \DescribeMacro{\ZeroOverZeroFrac}
+% \begin{macrocode}
+\def\xOverZeroInt {\MaxRealInt}%
+\def\xOverZeroFrac {\MaxRealFrac}%
+\def\ZeroOverZeroInt {0}%
+\def\ZeroOverZeroFrac{00000000}%
+% \end{macrocode}
+%
+% These macros strip the spaces, process a number into sign, integer and
+% fractional parts, and pad the fractional part out to eight decimals. They
+% are used in \op{push} so that the stack will only contains reals in a
+% normalized form. Some of them are also used to preprocess the reals in
+% the operand versions of commands
+%
+% The \cs{MFP@*@Int} and \cs{MFP@*@Frc} parts are always positive, the sign being
+% stored in \cs{MFP@*@Sgn} as $-1$, $0$ or $1$.
+%
+% We strip the spaces and pad the fractional parts separately because
+% they are unnecessary when processing \op{pop}ped reals (though they wouldn't
+% hurt).
+%
+% The number to be parsed is \arg4 and the macros to contain the parts
+% are the first three arguments. Since we normally call \cs{MFPparse@real}
+% with one of two sets of macros, we have two shortcuts for those cases.
+% \begin{macrocode}
+\def\MFPparse@real#1#2#3#4{%
+ \MFPnospace@def\MFPtemp@Val{#4}%
+ \MFPprocess@into@parts\MFPtemp@Val#1#2#3%
+ \MFP@padtoeight#3}%
+\def\MFPparse@x{\MFPparse@real\MFP@x@Sgn\MFP@x@Int\MFP@x@Frc}%
+\def\MFPparse@y{\MFPparse@real\MFP@y@Sgn\MFP@y@Int\MFP@y@Frc}%
+% \end{macrocode}
+%
+% This macro strips all spaces out of the number (not just before and
+% after). It takes a macro that will hold the result, followed by the
+% number (as a macro or a group of actual digits).
+% \begin{macrocode}
+\def\MFPnospace@def#1#2{%
+ \edef#1{#2\space}\edef#1{\@xp\zap@space#1\@empty}}%
+% \end{macrocode}
+%
+% This is the process that splits a number into parts. The biggest
+% difficulty is obtaining the sign. All four arguments are macros, with
+% the first one holding the number. Following that are the macros to hold
+% the sign, integer and fractional parts.
+% \begin{macrocode}
+\def\MFPprocess@into@parts#1#2#3#4{%
+ \@xp\MFPsplit@dot#1..\MFP@end #3#4%
+% \end{macrocode}
+%
+% At this point \arg3 holds the part before the dot (or the whole thing
+% if there was no dot) and \arg4 holds the part after the dot, (or
+% nothing). Now is the first place where having at most eight digits
+% simplifies things. Note that \arg3 could contain any number of
+% consecutive signs followed by up to eight digits. It could be zero or
+% empty, so to avoid losing the sign we append a \texttt{1} (for up to
+% nine digits). We temporarily define the sign based on the result, but
+% may need to drop it if both the integer and fractional parts are zero.
+%
+% Prepending a zero to the fractional part pemits it to be empty.
+% In the final \cs{edef}, \arg3 is made positive.
+% \begin{macrocode}
+ \ifnum#31<0 \def#2{-1}%
+ \else \def#2{1}%
+ \fi
+ \ifnum #30=0
+ \def#3{0}%
+ \ifnum 0#4=0 \def#2{0}\fi
+ \fi
+ \edef#3{\number \ifnum #2<0 -\fi#3}}%
+% \end{macrocode}
+%
+% This only copies the parts before and after the dot, \arg1 and \arg2,
+% into macros \arg4 and \arg5.
+% \begin{macrocode}
+\def\MFPsplit@dot#1.#2.#3\MFP@end#4#5{\edef#4{#1}\edef#5{#2}}%
+% \end{macrocode}
+%
+% This is used to pad the fractional part to eight places with zeros. If
+% a number with more than eight digits survives to this point, it gets
+% truncated.
+% \begin{macrocode}
+\def\MFP@padtoeight#1{%
+ \edef#1{\@xp\MFP@eightofmany#100000000\MFP@end}}%
+% \end{macrocode}
+%
+% These take operands off the stack. We know already that there are no
+% spaces and that the fractional part has eight digits.
+% \begin{macrocode}
+\def\MFPgetoperand@x{\Rpop\MFP@x@Val
+ \MFPprocess@into@parts\MFP@x@Val\MFP@x@Sgn\MFP@x@Int\MFP@x@Frc}%
+\def\MFPgetoperand@y{\Rpop\MFP@y@Val
+ \MFPprocess@into@parts\MFP@y@Val\MFP@y@Sgn\MFP@y@Int\MFP@y@Frc}%
+% \end{macrocode}
+%
+% Concatenate an argument (or two) to the front of stack. The material
+% must already be in correct format. Note: `front' is where they go
+% visually (i.e., leftmost) but it can be useful to imagine the stack
+% growin rightward (or sometimes even downward).
+%
+% Note that the result of \verb$\MFP@cattwo{#1}{#2}$ is the same as
+% \verb$\MFP@cat{#2}$ followed by \verb$\MFP@cat{#1}$. It seemed that
+% reversing the arguments in \cs{MFP@Rcattwo} confused me more than this
+% fact.
+% \begin{macrocode}
+\def\MFP@Rcat#1{\edef\MFP@Rstack{{#1}\MFP@Rstack}}%
+\def\MFP@Rcattwo#1#2{\edef\MFP@Rstack{{#1}{#2}\MFP@Rstack}}%
+% \end{macrocode}
+%
+% Convert from a signum (a number) to a sign ($-$ or nothing):
+% \begin{macrocode}
+\def\MFP@Sign#1{\ifnum#1<0 -\fi}%
+\def\MFP@x@Sign{\MFP@Sign\MFP@x@Sgn}%
+\def\MFP@y@Sign{\MFP@Sign\MFP@y@Sgn}%
+\def\MFP@z@Sign{\MFP@Sign\MFP@z@Sgn}%
+% \end{macrocode}
+%
+% Sometimes only parts of the number needs changing (used in CHS, ABS).
+% This copies the integer and fractional parts of $x$ into $z$.
+% \begin{macrocode}
+\def\copyMFP@x{\edef\MFP@z@Int{\MFP@x@Int}\edef\MFP@z@Frc{\MFP@x@Frc}}%
+% \end{macrocode}
+%
+% We use \cs{MFPpush@result} to put the result of internal operations onto
+% the stack. For convenience, we also have it set the sign flags.
+% \begin{macrocode}
+\def\MFPpush@result{\MFP@Rchk\MFPcurr@Sgn\MFP@Rcat\MFP@z@Val}%
+% \end{macrocode}
+%
+% When \op{pop} encounters an empty stack it gobbles the code that would
+% perform the \op{pop} (\arg1) and defines the macro (\arg2) to contain
+% \cs{EndofStack}. The default meaning for this macro is $0$.
+% \begin{macrocode}
+\def\if@EndofStack{%
+ \ifx\MFP@EOS\MFP@Rstack
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi}%
+% \end{macrocode}
+%
+% The macro \cs{Rpop} calls \cs{MFP@popit} followed by the contents of the
+% stack, the token \cs{MFP@end} and the macro to \op{pop} into. If the stack is
+% not empty, \cs{doMFP@popit} will read the first group \arg1 into that macro
+% \arg3, and then redefine the stack to be the rest of the argument \arg2.
+% If the stack is empty, \cs{doMFP@EOS} will equate the macro to
+% \cs{EndofStack} (initialized to {\tt0.00000000}) after issuing an error
+% message.
+% \begin{macrocode}
+\def\MFP@popit{\if@EndofStack\doMFP@EOS\doMFP@popit}%
+\def\doMFP@EOS#1\MFP@end#2{\MFP@popempty@err\let#2\EndofStack}%
+\def\doMFP@popit#1#2\MFP@end#3{\edef\MFP@Rstack{#2}\edef#3{#1}}%
+% \end{macrocode}
+%
+% \subsection{The user-level operations}
+%
+% All operations that can be done on arguments as well as the stack will
+% have a common format: The stack version pops the requisite numbers and
+% splits them into internal macros (\cs{MFPgetoperand@*}), runs an internal
+% command that operates on these internal macros, then ``pushes'' the result
+% returned. The internal commands take care to return the result in proper
+% form so we don't actually run \cs{Rpush}, but only \cs{MFPpush@result}.
+%
+% The operand version processes the operands into normalized form (as if
+% pushed, using \cs{MFPparse@*}), then proceeds as in the stack version, but
+% copies the result into the named macro instead of to the stack
+% (\cs{MFPstore@result}).
+%
+% For unary operations we process one argument or stack element. We call
+% it $x$ and use the \texttt{x} version of all macros. All internal
+% commands (\arg1) return the results in \texttt{z} versions.
+%
+% \DescribeMacro{\MFPchk}
+% The \cs{MFPchk} command examines its argument and sets a flag according to
+% its sign.
+% \begin{macrocode}
+\def\MFPchk#1{%
+ \MFPparse@x{#1}%
+ \MFP@Rchk\MFP@x@Sgn}%
+% \end{macrocode}
+%
+% We make \cs{MFP@Rchk} a little more general than is strictly needed here,
+% by giving it an argument (instead of only examining \cs{MFP@x@Sgn}). This is
+% so we can apply it to the results of operations (which would be in
+% \cs{MFPcurr@Sgn}).
+% \begin{macrocode}
+\def\MFP@Rchk#1{%
+ \MFPclear@flags
+ \ifnum#1>0 \MFP@postrue
+ \else\ifnum#1<0 \MFP@negtrue
+ \else \MFP@zerotrue
+ \fi\fi}%
+\def\MFPclear@flags{\MFP@zerofalse \MFP@negfalse \MFP@posfalse}%
+% \end{macrocode}
+%
+% \DescribeMacro{\IFzero}
+% \DescribeMacro{\IFneg}
+% \DescribeMacro{\IFpos}
+% These are the user interface to the internal \cs{ifMFP@zero},
+% \cs{ifMFP@neg}, \cs{ifMFP@pos}
+% \begin{macrocode}
+\def\IFzero{\ifMFP@zero\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
+\def\IFneg {\ifMFP@neg \@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
+\def\IFpos {\ifMFP@pos \@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
+\newif\ifMFP@zero \newif\ifMFP@neg \newif\ifMFP@pos
+% \end{macrocode}
+%
+% Our comparison commands parallel the check-sign commands. They even
+% \DescribeMacro{\MFPcmp}
+% reuse the same internal booleans. The differences: the internal
+% \DescribeMacro{\IFeq}
+% \cs{MFP@Rcmp} doesn't take arguments and the comparison test is a little
+% \DescribeMacro{\IFlt}
+% more involved. We could simply subtract, which automatically sets the
+% \DescribeMacro{\IFgt}
+% internal booleans, but it is way more efficient to compare sizes
+% directly.
+% \begin{macrocode}
+\newif\ifMFPdebug
+\def\MFPcmp#1#2{\MFPparse@x{#1}\MFPparse@y{#2}\MFP@Rcmp}%
+\def\MFP@Rcmp{\MFPclear@flags
+ \ifnum \MFP@x@Sign\MFP@x@Int>\MFP@y@Sign\MFP@y@Int\relax
+ \MFP@postrue
+ \else\ifnum \MFP@x@Sign\MFP@x@Int<\MFP@y@Sign\MFP@y@Int\relax
+ \MFP@negtrue
+ \else\ifnum \MFP@x@Sign\MFP@x@Frc>\MFP@y@Sign\MFP@y@Frc\relax
+ \MFP@postrue
+ \else\ifnum \MFP@x@Sign\MFP@x@Frc<\MFP@y@Sign\MFP@y@Frc\relax
+ \MFP@negtrue
+ \else
+ \MFP@zerotrue
+ \fi\fi\fi\fi}%
+\let\IFeq\IFzero\let\IFlt\IFneg \let\IFgt\IFpos
+% \end{macrocode}
+%
+% Given an operation (\op{pop}, \op{chs}, or whatever), the stack version will
+% have the same name with ``\texttt{R}'' (for ``real'') prepended. The operand
+% versions will have the same name with ``\texttt{MFP}'' prepended. The
+% internal version has the same name as the stack version, with an
+% ``\texttt{MFP@}'' prepended.
+%
+% The unary operations are:
+% \begin{description}
+% \item[chs] change sign of $x$.
+% \item[abs] absolute value of $x$.
+% \item[dbl] double $x$.
+% \item[halve] halve $x$.
+% \item[sgn] $+1$, $-1$ or $0$ depending on the sign of $x$.
+% \item[sq] square $x$.
+% \item[int] zero out the fractional part of $x$.
+% \item[frac] zero out the integer part of $x$.
+% \item[floor] largest integer not exceeding $x$.
+% \item[ceil] smallest integer not less than $x$.
+% \end{description}
+%
+% The binary operations are ($x$ represents the first and $y$ second):
+% \begin{description}
+% \item[add] add $x$ and $y$.
+% \item[sub] subtract $y$ from $x$.
+% \item[mul] multiply $x$ and $y$.
+% \item[div] divide $x$ by $y$.
+% \end{description}
+%
+% There are also some operations that do not actually change any
+% values, but may change the stack or the state of some boolean:
+% \begin{description}
+% \item[cmp] compare $x$ and $y$ (stack version does not change stack).
+% \item[chk] examine the sign of $x$ (stack version does not change stack).
+% \item[dup] stack only, duplicate the top element of the stack.
+% \item[push] stack only, put a value onto the top of the stack.
+% \item[pop] stack only, remove the top element of the stack,
+% store it in a variable.
+% \item[exch] stack only, exchange top two elements of the stack.
+% \end{description}
+%
+% \DescribeMacro{\startMFPprogram}
+% The purpose of \cs{startMFPprogram} is to start the group, inside of
+% which all the stack operations can be used. The ensuing
+% \DescribeMacro{\stopMFPprogram}
+% \cs{stopMFPprogram} closes the group.
+% \begin{macrocode}
+\def\startMFPprogram{%
+\begingroup
+% \end{macrocode}
+%
+% \DescribeMacro{\Rchs}
+% \DescribeMacro{\Rabs}
+% \DescribeMacro{\Rdbl}
+% \DescribeMacro{\Rhalve}
+% \DescribeMacro{\Rsgn}
+% Then we give definitions to all the stack-based macros.
+% These definitions are all lost after the group ends.
+%
+% \DescribeMacro{\Rsq}
+% \DescribeMacro{\Rinv}
+% \DescribeMacro{\Rint}
+% \DescribeMacro{\Rfrac}
+% \DescribeMacro{\Rfloor}
+% \DescribeMacro{\Rceil}
+% \DescribeMacro{\Rincr}
+% \DescribeMacro{\Rdecr}
+% \DescribeMacro{\Rzero}
+% We start with the unary operations. Note that all they do is call a
+% wrapper macro \cs{MFP@stack@Unary} with an argument which is the internal
+% version of the command.
+% \begin{macrocode}
+ \def\Rchs {\MFP@stack@Unary\MFP@Rchs}%
+ \def\Rabs {\MFP@stack@Unary\MFP@Rabs}%
+ \def\Rdbl {\MFP@stack@Unary\MFP@Rdbl}%
+ \def\Rhalve{\MFP@stack@Unary\MFP@Rhalve}%
+ \def\Rsgn {\MFP@stack@Unary\MFP@Rsgn}%
+ \def\Rsq {\MFP@stack@Unary\MFP@Rsq}%
+ \def\Rinv {\MFP@stack@Unary\MFP@Rinv}%
+ \def\Rint {\MFP@stack@Unary\MFP@Rint}%
+ \def\Rfrac {\MFP@stack@Unary\MFP@Rfrac}%
+ \def\Rfloor{\MFP@stack@Unary\MFP@Rfloor}%
+ \def\Rceil {\MFP@stack@Unary\MFP@Rceil}%
+ \def\Rincr {\MFP@stack@Unary\MFP@Rincr}%
+ \def\Rdecr {\MFP@stack@Unary\MFP@Rdecr}%
+ \def\Rzero {\MFP@stack@Unary\MFP@Rzero}%
+% \end{macrocode}
+%
+% \DescribeMacro{\Radd}
+% \DescribeMacro{\Rsub}
+% \DescribeMacro{\Rmul}
+% \DescribeMacro{\Rmpy}
+% \DescribeMacro{\Rdiv}
+% \DescribeMacro{\Rmin}
+% \DescribeMacro{\Rmax}
+% Then the binary operations, which again call a wrapper around
+% the internal version.
+% \begin{macrocode}
+ \def\Radd {\MFP@stack@Binary\MFP@Radd}%
+ \def\Rmul {\MFP@stack@Binary\MFP@Rmul}%
+ \let\Rmpy\Rmul
+ \def\Rsub {\MFP@stack@Binary\MFP@Rsub}%
+ \def\Rdiv {\MFP@stack@Binary\MFP@Rdiv}%
+ \def\Rmin {\MFP@stack@Binary\MFP@Rmin}%
+ \def\Rmax {\MFP@stack@Binary\MFP@Rmax}%
+% \end{macrocode}
+%
+% \DescribeMacro{\Rnoop}
+% \DescribeMacro{\Rcmp}
+% \DescribeMacro{\Rchk}
+% \DescribeMacro{\Rpush}
+% \DescribeMacro{\Rpop}
+% \DescribeMacro{\Rexch}
+% \DescribeMacro{\Rdup}
+% And finally some special commands. There is a no-op and commands for
+% comparing, checking, and manipulation of the stack. Note that
+% \cs{Rcmp} parses the last two elements on the stack, then puts them back
+% before calling the internal command that operates on the parsed parts.
+% The same is true of \cs{Rchk}, but only the last stack element is
+% examined.
+% \begin{macrocode}
+ \let\Rnoop\relax
+ \def\Rcmp{%
+ \MFPgetoperand@y\MFPgetoperand@x
+ \MFP@Rcattwo\MFP@y@Val\MFP@x@Val
+ \MFP@Rcmp}%
+ \def\Rchk{%
+ \MFPgetoperand@x
+ \MFP@Rcat\MFP@x@Val
+ \MFP@Rchk\MFP@x@Sgn}%
+ \def\Rpush##1{%
+ \MFPparse@x{##1}%
+ \edef\MFP@z@Val{\MFP@x@Sign\MFP@x@Int.\MFP@x@Frc}%
+ \edef\MFPcurr@Sgn{\MFP@x@Sgn}%
+ \MFPpush@result}%
+ \def\Rpop{\@xp\MFP@popit\MFP@Rstack\MFP@end}%
+ \def\Rexch{%
+ \Rpop\MFP@y@Val\Rpop\MFP@x@Val
+ \MFP@Rcattwo\MFP@x@Val\MFP@y@Val}%
+ \def\Rdup{%
+ \Rpop\MFP@x@Val
+ \MFP@Rcattwo\MFP@x@Val\MFP@x@Val}%
+% \end{macrocode}
+%
+% If \file{mfpextra.tex} is input, then \cs{MFP@Rextra} makes the
+% additional commands in that file available to an \mfp{} program.
+%
+% \DescribeMacro{\Global}
+% \DescribeMacro{\GlobalStack}
+% \DescribeMacro{\Export}
+% \DescribeMacro{\ExportStack}
+% The last four commands allow computed values to be made available
+% outside the program group
+% \begin{macrocode}
+ \MFP@Rextra
+ \let\Global\MFP@Global
+ \let\GlobalStack\MFP@GlobalStack
+ \let\Export\MFP@Export
+ \let\ExportStack\MFP@ExportStack}%
+\def\stopMFPprogram{\@xp\endgroup\MFPprogram@returns}%
+\let\MFP@Rextra\@empty
+\let\MFPprogram@returns\@empty
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPchs}
+% \DescribeMacro{\MFPabs}
+% \DescribeMacro{\MFPdbl}
+% \DescribeMacro{\MFPhalve}
+% \DescribeMacro{\MFPsgn}
+% \DescribeMacro{\MFPsq}
+% \DescribeMacro{\MFPinv}
+% Now we define the operand versions. These also are defined via a
+% wrapper command that executes the very same internal commands as the
+% stack versions.
+%
+% \DescribeMacro{\MFPint}
+% \DescribeMacro{\MFPfrac}
+% \DescribeMacro{\MFPfloor}
+% \DescribeMacro{\MFPceil}
+% \DescribeMacro{\MFPincr}
+% \DescribeMacro{\MFPdecr}
+% \DescribeMacro{\MFPzero}
+% \DescribeMacro{\MFPstore}
+% First the unary operations.
+% \begin{macrocode}
+\def\MFPchs {\MFP@op@Unary\MFP@Rchs}%
+\def\MFPabs {\MFP@op@Unary\MFP@Rabs}%
+\def\MFPdbl {\MFP@op@Unary\MFP@Rdbl}%
+\def\MFPhalve{\MFP@op@Unary\MFP@Rhalve}%
+\def\MFPsgn {\MFP@op@Unary\MFP@Rsgn}%
+\def\MFPsq {\MFP@op@Unary\MFP@Rsq}%
+\def\MFPinv {\MFP@op@Unary\MFP@Rinv}%
+\def\MFPint {\MFP@op@Unary\MFP@Rint}%
+\def\MFPfrac {\MFP@op@Unary\MFP@Rfrac}%
+\def\MFPfloor{\MFP@op@Unary\MFP@Rfloor}%
+\def\MFPceil {\MFP@op@Unary\MFP@Rceil}%
+\def\MFPincr {\MFP@op@Unary\MFP@Rincr}%
+\def\MFPdecr {\MFP@op@Unary\MFP@Rdecr}%
+\def\MFPzero {\MFP@op@Unary\MFP@Rzero}%
+\def\MFPstore{\MFP@op@Unary\MFP@Rstore}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPadd}
+% \DescribeMacro{\MFPsub}
+% \DescribeMacro{\MFPmul}
+% \DescribeMacro{\MFPmpy}
+% \DescribeMacro{\MFPdiv}
+% \DescribeMacro{\MFPmin}
+% \DescribeMacro{\MFPmax}
+% Then the binary operations.
+% \begin{macrocode}
+\def\MFPadd{\MFP@op@Binary\MFP@Radd}%
+\def\MFPmul{\MFP@op@Binary\MFP@Rmul}%
+\let\MFPmpy\MFPmul
+\def\MFPsub{\MFP@op@Binary\MFP@Rsub}%
+\def\MFPdiv{\MFP@op@Binary\MFP@Rdiv}%
+\def\MFPmin{\MFP@op@Binary\MFP@Rmin}%
+\def\MFPmax{\MFP@op@Binary\MFP@Rmax}%
+% \end{macrocode}
+%
+% A \emph{nullary} operation is one that produces a result with no
+% operand. Thus, it could return a fixed constant, or it could perform
+% calculations that obtain input from the system (e.g., current time). At
+% the moment we don't define any.
+% \begin{macrocode}
+\def\MFP@stack@Nullary#1{%
+ \MFP@subroutine{#1}\MFPpush@result}%
+\def\MFP@op@Nullary#1{%
+ \MFP@subroutine{#1}\MFPstore@result}%
+% \end{macrocode}
+%
+% These are the wrappers for unary operations. The operand versions have a
+% second argument, the macro that stores the result. But this will be the
+% argument of \cs{MFPstore@result}.
+% \begin{macrocode}
+\def\MFP@stack@Unary#1{%
+ \MFPgetoperand@x
+ \MFP@subroutine{#1}\MFPpush@result}%
+\def\MFP@op@Unary#1#2{%
+ \MFPparse@x{#2}%
+ \MFP@subroutine{#1}\MFPstore@result}%
+\def\MFPstore@result#1{\MFP@Rchk\MFPcurr@Sgn\edef#1{\MFP@z@Val}}%
+% \end{macrocode}
+%
+% These are the wrappers for binary operations. The top level definitions
+% are almost identical to those of the unary operations. The only difference
+% is they \op{pop} or parse two operands.
+% \begin{macrocode}
+\def\MFP@stack@Binary#1{%
+ \MFPgetoperand@y \MFPgetoperand@x
+ \MFP@subroutine{#1}\MFPpush@result}%
+\def\MFP@op@Binary#1#2#3{%
+ \MFPparse@x{#2}\MFPparse@y{#3}%
+ \MFP@subroutine{#1}\MFPstore@result}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPnoop}
+% We end with a traditional, but generally useless command, the no-op,
+% which does nothing. It doesn't even have a wrapper.
+% \begin{macrocode}
+\let\MFPnoop\relax
+% \end{macrocode}
+%
+% \subsection{The internal computations}
+%
+% To change the sign or get the absolute value, we just need to set the
+% value of \cs{MFP@x@Sgn}.
+% \begin{macrocode}
+\def\MFP@Rabs{%
+ \copyMFP@x \edef\MFP@z@Sgn{\ifnum\MFP@x@Sgn=0 0\else1\fi}}%
+\def\MFP@Rchs{\copyMFP@x \edef\MFP@z@Sgn{\number-\MFP@x@Sgn}}%
+% \end{macrocode}
+%
+% The doubling and halving operations are more efficient ways to
+% multiply or divide a number by $2$. For doubling, copy $x$ to $y$
+% and add. For halving, we use basic \TeX{} integer division, more
+% efficient than multiplying by $0.5$ and far more than using
+% \cs{MFP@Rdiv}.
+%
+% In \cs{MFP@Rhalve}. we add $1$ to the fractional part for rounding
+% purposes, and we move any odd 1 from the end of the integer part to the
+% start of the fractional part.
+% \begin{macrocode}
+\def\MFP@Rdbl{\MFP@Rcopy xy\MFP@Radd}%
+\def\MFP@Rhalve{%
+ \MFP@tempa\MFP@x@Int
+ \MFP@tempb\MFP@x@Frc\relax
+ \ifodd\MFP@tempb
+ \def\MFP@z@Und{5}%
+ \advance\MFP@tempb 1
+ \ifnum\MFP@ttteight=\MFP@tempb
+ \MFP@tempb0 \advance\MFP@tempa1
+ \fi
+ \fi
+ \ifodd \MFP@tempa
+ \advance\MFP@tempb \MFP@ttteight\relax
+ \fi
+ \divide\MFP@tempa 2
+ \divide\MFP@tempb 2
+ \MFP@Rloadz\MFP@x@Sgn\MFP@tempa\MFP@tempb}%
+% \end{macrocode}
+%
+% The signum is $0.0$, $1.0$ or $-1.0$ to match the sign of $x$.
+% \begin{macrocode}
+\def\MFP@Rsgn{\MFP@Rloadz \MFP@x@Sgn{\ifnum\MFP@x@Sgn=0 0\else1\fi}0}%
+% \end{macrocode}
+%
+% The squaring operation just calls \cs{MFP@Rmul} after copying $x$ to
+% $y$. Its gain in efficiency over a multiplication is that it can skip
+% preprocessing of the second (identical) operand.
+% \begin{macrocode}
+\def\MFP@Rsq{\MFP@Rcopy xy\MFP@Rmul}%
+% \end{macrocode}
+%
+% The inversion operation just calls \cs{MFP@Rdiv} after copying $x$ to
+% $y$ and $1$ to $x$. Its advantage over a divide is it skips the
+% preprocessing of $1$ as an operand.
+% \begin{macrocode}
+\def\MFP@Rinv{\MFP@Rcopy xy\MFP@Rload x110\MFP@Rdiv}%
+% \end{macrocode}
+%
+% Integer part: replace fractional part with zeros.
+% \begin{macrocode}
+\def\MFP@Rint{%
+ \MFP@Rloadz {\ifnum\MFP@x@Int=0 0\else\MFP@x@Sgn\fi}\MFP@x@Int 0}%
+% \end{macrocode}
+%
+% Fractional part: replace integer part with a zero.
+% \begin{macrocode}
+\def\MFP@Rfrac{%
+ \MFP@Rloadz {\ifnum\MFP@x@Frc=0 0\else\MFP@x@Sgn\fi}0\MFP@x@Frc}%
+% \end{macrocode}
+%
+% To increment and decrement by $1$, except in border cases, we need only
+% address the integer part of a number. This doesn't seem so simple
+% written out but, even so, it is more efficient than full-blown addition.
+% It would be very slightly more efficient if \cs{MFP@Rdecr} did not call
+% \cs{MFP@Rincr}, but instead was similarly coded.
+% \begin{macrocode}
+\def\MFP@Rincr{%
+ \ifnum\MFP@x@Sgn<0
+ \ifcase\MFP@x@Int
+ \MFP@tempa\MFP@ttteight
+ \advance\MFP@tempa -\MFP@x@Frc\relax
+ \MFP@Rloadz 10\MFP@tempa
+ \or
+ \MFP@Rloadz{\ifnum\MFP@x@Frc=0 0\else -1\fi}0\MFP@x@Frc
+ \else
+ \MFP@tempa\MFP@x@Int
+ \advance\MFP@tempa -1
+ \MFP@Rloadz{-1}\MFP@tempa\MFP@x@Frc
+ \fi
+ \else
+ \MFP@tempa\MFP@x@Int
+ \advance\MFP@tempa 1
+ \MFP@Rloadz 1\MFP@tempa\MFP@x@Frc
+ \fi}%
+\def\MFP@Rdecr{%
+ \edef\MFP@x@Sgn{\number -\MFP@x@Sgn}\MFP@Rincr
+ \edef\MFP@z@Sgn{\number -\MFP@z@Sgn}}%
+\def\MFP@Rstore{\MFP@Rcopy xz}%
+% \end{macrocode}
+%
+% The floor of a real number $x$ is the largest integer not larger than
+% $x$. The ceiling is the smallest integer not less than $x$. For
+% positive $x$, floor is the same as integer part. Not true for negative
+% $x$. Example: $\mathop{\mathrm{int}}(-1.5) = -1$ but
+% $\mathop{\mathrm{floor}}=-2$
+%
+% We use the same code to get floor or ceiling, the
+% appropriate inequality character being its argument.
+% \begin{macrocode}
+\def\MFP@Rfloorceil#1{%
+ \MFP@tempa\MFP@x@Int\relax
+ \ifnum \MFP@x@Sgn #10
+ \ifnum\MFP@x@Frc=0
+ \else
+ \advance\MFP@tempa1
+ \fi
+ \fi
+ \MFP@Rloadz{\ifnum\MFP@x@Int=0 0\else\MFP@x@Sgn\fi}\MFP@tempa0}%
+\def\MFP@Rfloor{\MFP@Rfloorceil<}%
+\def\MFP@Rceil {\MFP@Rfloorceil>}%
+% \end{macrocode}
+%
+% For multiplication, after the usual break into integer and fractional
+% parts, we further split these parts into $4$-digit pieces with
+% \cs{MFP@split}. The first argument (\arg1) holds the eight digit number,
+% then \arg2 is a macro that will hold the top four digits and \arg3 will
+% hold the bottom four.
+% \begin{macrocode}
+\def\MFP@split#1#2#3{%
+ \begingroup
+ \MFP@tempa#1\relax
+ \MFP@tempb\MFP@tempa
+ \divide\MFP@tempb by\MFP@tttfour
+ \edef#2{\number\MFP@tempb}%
+ \multiply\MFP@tempb by\MFP@tttfour
+ \advance\MFP@tempa-\MFP@tempb
+ \MFP@endgroup@after{%
+ \MFP@afterdef#2{#2}%
+ \MFP@afterdef#3{\number\MFP@tempa}%
+ }}%
+%
+\def\MFP@@split{%
+ \MFP@split\MFP@x@Int\MFP@x@Int@ii\MFP@x@Int@i
+ \MFP@split\MFP@x@Frc\MFP@x@Frc@i\MFP@x@Frc@ii
+ \MFP@split\MFP@y@Int\MFP@y@Int@ii\MFP@y@Int@i
+ \MFP@split\MFP@y@Frc\MFP@y@Frc@i\MFP@y@Frc@ii}%
+% \end{macrocode}
+%
+% We will store the intermediate and final products in \cs{MFP@z@*}. Each one
+% is ultimately reduced to four digits, like the parts of $x$ and $y$. As each
+% base-$10000$ digit of $y$ is multiplied by a digit of $x$, we add the
+% result to the appropriate digit of the partial result $z$.
+%
+% The underflow ends up in \cs{MFP@z@Frc@iv} and \cs{MFP@z@Frc@iii}.
+% Overflow will be in \cs{MFP@z@Int@iii}. Unlike the rest, it can be up to
+% eight digits because we do not need to carry results out of it.
+%
+% This command prepends zeros so a number fills four slots. Here \arg1 is
+% a macro holding the value and it is redefined to contain the result. A
+% macro that calls this should ensure that \arg1 is not empty and is less
+% than 10,000.
+% \begin{macrocode}
+\def\makeMFP@fourdigits#1{%
+ \edef#1{\@xp\MFP@fifthofmany\number#1{}{0}{00}{000}\MFP@end\number#1}}%
+% \end{macrocode}
+%
+% This is the same, but produces eight digits. Similarly \arg1 should be
+% nonempty and less than 100,000,000.
+% \begin{macrocode}
+\def\makeMFP@eightdigits#1{%
+ \edef#1{\@xp\MFP@ninthofmany\number#1%
+ {}{0}{00}{000}{0000}{00000}{000000}{0000000}\MFP@end\number#1}}%
+% \end{macrocode}
+%
+% The following macros implement carrying. The macros \cs{MFP@carrya} and
+% \cs{MFP@carrym} should be followed by two macros that hold numbers. The
+% first number can have too many digits. These macros remove extra digits
+% from the front and add their value to the number in the second macro
+% (the ``carry''). Both act by calling \cs{MFP@carry}, which is told the
+% number of digits to keep via \arg1 (10,000 for four digits,
+% 100,000,000 for eight). The ``\texttt{a}'' in \cs{MFP@carrya} is for
+% addition and ``\texttt{m}'' is for multiplication, which indicates where
+% these will mainly be used.
+% \begin{macrocode}
+\def\MFP@carrya{\MFP@carry\MFP@ttteight}%
+\def\MFP@carrym{\MFP@carry\MFP@tttfour}%
+\def\MFP@carry#1#2#3{%
+ \begingroup
+ \MFP@carryi{#1}#2#3%
+ \MFP@endgroup@after{%
+ \MFP@afterdef#3{\number\MFP@tempa}%
+ \MFP@afterdef#2{\number\MFP@tempb}%
+ }}%
+% \end{macrocode}
+%
+% This is the ``internal'' carry. \arg1, \arg2, and \arg3 are as in
+% \cs{MFP@carry}. Its advantage is that it can be used used where \arg2
+% and \arg3 are not macros, leaving the result in \cs{MFP@tempa} and
+% \cs{MFP@tempb} with \cs{MFP@tempb} in the correct range,
+% $[0,\mbox{\arg1})$. Its disadvantage is it does not protect temporary
+% registers. Warning: do not use it with \arg2=\cs{MFP@tempa} and do not
+% use it without grouping if you want to preserve the values in these
+% temporary count registers.
+% \begin{macrocode}
+\def\MFP@carryi#1#2#3{%
+ \MFP@tempa=#3\relax
+ \MFP@tempb=#2\relax
+ \MFP@tempc=\MFP@tempb
+ \divide \MFP@tempc #1\relax
+ \advance \MFP@tempa \MFP@tempc
+ \multiply\MFP@tempc #1\relax
+ \advance \MFP@tempb -\MFP@tempc}%
+% \end{macrocode}
+%
+% This adds \arg1 to \arg2, the result goes into macro \arg3. This does no
+% checking. It is basicly used to add with macros instead of registers.
+% \begin{macrocode}
+\def\MFP@addone#1#2#3{%
+ \begingroup
+ \MFP@tempa#1%
+ \advance\MFP@tempa#2\relax
+ \MFP@endgroup@after{%
+ \MFP@afterdef#3{\number\MFP@tempa}%
+ }}%
+% \end{macrocode}
+%
+% Multiply \arg1 by \cs{MFP@tempb} and add to \arg2. \cs{MFP@tempb} is one digit
+% (base=10000) of $y$ in multiplying $x\times y$, \arg1 (usually a macro)
+% holds one digit of $x$. \arg2 is a macro that will hold one digit of the
+% final product $z$. The product is added to it (overflow is taken care of
+% later by the carry routines).
+% \begin{macrocode}
+\def\MFP@multiplyone#1#2{%
+ \MFP@tempa#1%
+ \multiply\MFP@tempa\MFP@tempb
+ \advance\MFP@tempa#2%
+ \edef#2{\number\MFP@tempa}}%
+% \end{macrocode}
+%
+% This does the above multiplication-addition for all four ``digits'' of
+% $x$. This is where \cs{MFP@tempb} is initialized for \cs{MFP@multiplyone}. The
+% first argument represents a digit of $y$, the remaining four arguments
+% are macros representing the digits of $z$ that are involved in
+% multiplying the digits of $x$ by \arg1.
+% \begin{macrocode}
+\def\MFP@multiplyfour#1#2#3#4#5{%
+ \MFP@tempb #1\relax
+ \MFP@multiplyone\MFP@x@Int@ii #2%
+ \MFP@multiplyone\MFP@x@Int@i #3%
+ \MFP@multiplyone\MFP@x@Frc@i #4%
+ \MFP@multiplyone\MFP@x@Frc@ii #5}%
+% \end{macrocode}
+%
+% Now we begin the internal implementations of the binary operations. All
+% four expect macros \cs{MFP@x@Sgn}, \cs{MFP@x@Int}, \cs{MFP@x@Frc}, \cs{MFP@y@Sgn},
+% \cs{MFP@y@Int} and \cs{MFP@y@Frc} to be the normalized parts of two real numbers
+% $x$ and $y$.
+%
+% \cs{MFP@Rsub} just changes the sign of $y$ and then calls \cs{MFP@Radd}.
+%
+% \cs{MFP@Radd} checks whether $x$ and $y$ have same or different signs. In
+% the first case we need only add absolute values and the sign of the
+% result will match that of the operands. In the second case, finding the
+% sign of the result is a little more involve (and ``borrowing'' may be
+% needed).
+% \begin{macrocode}
+\def\MFP@Rsub{\edef\MFP@y@Sgn{\number-\MFP@y@Sgn}\MFP@Radd}%
+\def\MFP@Radd{%
+ \MFP@tempa\MFP@x@Sgn
+ \multiply\MFP@tempa\MFP@y@Sgn\relax
+ \ifcase\MFP@tempa
+ \ifnum \MFP@x@Sgn=0
+ \MFP@Rcopy yz%
+ \else
+ \MFP@Rcopy xz%
+ \fi
+ \or
+ \@xp\MFP@Radd@same
+ \else
+ \@xp\MFP@Radd@diff
+ \fi}%
+% \end{macrocode}
+%
+% \cs{MFP@Radd@same} adds two numbers which have the same sign. The sign
+% of the result is the common sign. The fractional and integer parts are
+% added separately, then a carry is invoked. The overflow (\cs{MFP@z@Ovr})
+% could be only a single digit 0 or 1.
+% \begin{macrocode}
+\def\MFP@Radd@same{%
+ \MFP@addone\MFP@x@Frc\MFP@y@Frc\MFP@z@Frc
+ \MFP@addone\MFP@x@Int\MFP@y@Int\MFP@z@Int
+ \MFP@carrya\MFP@z@Frc\MFP@z@Int
+ \MFP@carrya\MFP@z@Int\MFP@z@Ovr
+ \makeMFP@eightdigits\MFP@z@Frc
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}}%
+% \end{macrocode}
+%
+% We are now adding two numbers with opposite sign. Since $x\ne 0$ this
+% is the same as $\sgn(x)(|x| - |y|)$ . So we subtract absolute values,
+% save the result in \cs{MFP@z@Sgn}, \cs{MFP@z@Int} and \cs{MFP@z@Frc}
+% (with the last two nonnegative, as usual), then change the sign of
+% \cs{MFP@z@Sgn} if \cs{MFP@x@Sgn} is negative. Since the difference
+% between numbers in $[0,10^8)$ has absolute value in that range, there is
+% no carrying. However, there may be borrowing.
+% \begin{macrocode}
+\def\MFP@Radd@diff{%
+ \MFP@addone\MFP@x@Frc{-\MFP@y@Frc}\MFP@z@Frc
+ \MFP@addone\MFP@x@Int{-\MFP@y@Int}\MFP@z@Int
+% \end{macrocode}
+%
+% Now we need to establish the sign and arrange the borrow. The sign of
+% the result is the sign of \cs{MFP@z@Int} unless it is 0; in that case
+% it, is the sign of \cs{MFP@z@Frc}. There must be a simpler coding,
+% though.
+% \begin{macrocode}
+ \MFP@tempa=\MFP@z@Int
+ \MFP@tempb=\MFP@z@Frc\relax
+ \ifnum\MFP@tempa=0 \else \MFP@tempa=\MFP@Sign\MFP@tempa 1 \fi
+ \ifnum\MFP@tempb=0 \else \MFP@tempb=\MFP@Sign\MFP@tempb 1 \fi
+ \ifnum\MFP@tempa=0 \MFP@tempa=\MFP@tempb \fi
+% \end{macrocode}
+%
+% Now we have the sign of $|x| - |y|$ in \cs{MFP@tempa}, and we multiply
+% that sign by the sign of $x$ to get \cs{MFP@z@Sgn}. Then we multiply the
+% current value of $z$ by that sign to get the absolute value, stored in
+% \cs{MFP@tempa} and \cs{MFP@tempb}.
+% \begin{macrocode}
+ \edef\MFP@z@Sgn{\number\MFP@x@Sign\MFP@tempa}%
+ \MFP@tempb\MFP@tempa
+ \multiply\MFP@tempa \MFP@z@Int
+ \multiply\MFP@tempb \MFP@z@Frc\relax
+% \end{macrocode}
+%
+% What we should have now is a positive number which might still be
+% represented with a negative fractional part. A human being performing
+% the subtraction would have borrowed first. Being a computer, we do it
+% last, and we're done.
+% \begin{macrocode}
+ \ifnum\MFP@tempb<0
+ \advance\MFP@tempb\MFP@ttteight
+ \advance\MFP@tempa-1
+ \fi
+ \edef\MFP@z@Int{\number\MFP@tempa}%
+ \edef\MFP@z@Frc{\number\MFP@tempb}%
+ \makeMFP@eightdigits\MFP@z@Frc}%
+% \end{macrocode}
+%
+% \cs{MFP@Rmul} first computes the (theoretical) sign of the product: if
+% it is zero, return zero, otherwise provisionally set the sign of the product
+% and call \cs{MFP@@Rmul}.
+% \begin{macrocode}
+\def\MFP@Rmul{%
+ \ifnum\MFP@x@Sgn=0 \MFP@Rzero
+ \else\ifnum\MFP@y@Sgn=0 \MFP@Rzero
+ \else \edef\MFP@z@Sgn{\number\MFP@x@Sign\MFP@y@Sgn}%
+ \@XP\MFP@@Rmul
+ \fi\fi}%
+% \end{macrocode}
+%
+% \cs{MFP@@Rmul} first initializes the macros that will hold the
+% base-10000 digits of $z$. Then it splits the four expected macros into
+% eight macros that hold the base-10000 digits for each of $x$ and $y$.
+% Then each digit of $y$ is used to multiply the four digits of $x$ and the
+% results are added to corresponding digits of $z$.
+% \begin{macrocode}
+\def\MFP@@Rmul{%
+ \def\MFP@z@Frc@iv {0}\def\MFP@z@Frc@iii{0}%
+ \def\MFP@z@Frc@ii {0}\def\MFP@z@Frc@i {0}%
+ \def\MFP@z@Int@i {0}\def\MFP@z@Int@ii {0}%
+ \def\MFP@z@Int@iii{0}%
+ \MFP@@split
+ \MFP@multiplyfour \MFP@y@Frc@ii \MFP@z@Frc@i
+ \MFP@z@Frc@ii \MFP@z@Frc@iii \MFP@z@Frc@iv
+ \MFP@multiplyfour \MFP@y@Frc@i \MFP@z@Int@i
+ \MFP@z@Frc@i \MFP@z@Frc@ii \MFP@z@Frc@iii
+ \MFP@multiplyfour \MFP@y@Int@i \MFP@z@Int@ii
+ \MFP@z@Int@i \MFP@z@Frc@i \MFP@z@Frc@ii
+ \MFP@multiplyfour \MFP@y@Int@ii \MFP@z@Int@iii
+ \MFP@z@Int@ii \MFP@z@Int@i \MFP@z@Frc@i
+% \end{macrocode}
+% Now apply the carry routines on the underflow digits\dots
+% \begin{macrocode}
+ \MFP@carrym\MFP@z@Frc@iv\MFP@z@Frc@iii
+ \MFP@carrym\MFP@z@Frc@iii\MFP@z@Frc@ii
+% \end{macrocode}
+% \dots and pause to round the lowest digit that will be kept\dots
+% \begin{macrocode}
+ \ifnum\MFP@z@Frc@iii<5000 \else
+ \MFP@tempb\MFP@z@Frc@ii
+ \advance\MFP@tempb1
+ \edef\MFP@z@Frc@ii{\number\MFP@tempb}%
+ \fi
+% \end{macrocode}
+% \dots and continue carrying.
+% \begin{macrocode}
+ \MFP@carrym\MFP@z@Frc@ii\MFP@z@Frc@i
+ \MFP@carrym\MFP@z@Frc@i \MFP@z@Int@i
+ \MFP@carrym\MFP@z@Int@i \MFP@z@Int@ii
+ \MFP@carrym\MFP@z@Int@ii\MFP@z@Int@iii
+% \end{macrocode}
+% To end, we arrange for all macros to hold four digits (except
+% \cs{MFP@z@Int@ii} and \cs{MFP@z@Int@iii} which don't need leading 0s)
+% and load them into the appropriate 8-digit macros. The underflow digits
+% are stored in \cs{MFP@z@Und} in case we ever need to examine them (we
+% now do: in our unit conversion routine \cs{MFP@DPmul}), and the overflow
+% in \cs{MFP@z@Ovr} in case we ever want to implement an overflow error.
+% Theoretically $z \ne 0$, but it is possible that $z=0$ after reducing to
+% eight places. If so, we must reset \cs{MFP@z@Sgn}.
+% \begin{macrocode}
+ \makeMFP@fourdigits\MFP@z@Frc@iv
+ \makeMFP@fourdigits\MFP@z@Frc@iii
+ \makeMFP@fourdigits\MFP@z@Frc@ii
+ \makeMFP@fourdigits\MFP@z@Frc@i
+ \makeMFP@fourdigits\MFP@z@Int@i
+ \edef\MFP@z@Int{\number\MFP@z@Int@ii\MFP@z@Int@i}%
+ \edef\MFP@z@Frc{\MFP@z@Frc@i\MFP@z@Frc@ii}%
+ \edef\MFP@z@Ovr{\number\MFP@z@Int@iii}%
+ \edef\MFP@z@Und{\MFP@z@Frc@iii\MFP@z@Frc@iv}%
+ \ifnum\MFP@z@Int>0
+ \else\ifnum\MFP@z@Frc>0
+ \else \def\MFP@z@Sgn{0}%
+ \fi\fi}%
+% \end{macrocode}
+%
+% For division, we will obtain the result one digit at a time until the
+% $9$th digit after the decimal is found. That $9$th will be used to round
+% to eight digits (and stored as underflow). We normalize the denominator
+% by shifting left until the integer part is eight digits. We do the same for
+% the numerator. The integer quotient of the integer parts will be one digit
+% (possibly a 0). If the denominator is shifted $d$ digits left and the
+% numerator $n$ digits left, the quotient will have to be shifted $n-d$
+% places right or $d-n$ places left. Since the result is supposed to have
+% $9$ digits after the dot, our quotient needs $9+d-n+1$ total digits.
+% Since $d$ can be as high as $15$ and $n$ as low as $0$, we could need
+% $25$ repetitions. However, that extreme would put $15$ or $16$ digits in
+% the integer part, a $7$ or $8$ digit overflow. (It can be argued that
+% only $16$ significant digits should be retained in any case.) If $d$ is
+% $0$ and $n$ is $15$ we would need $-5$ digits. That means the first
+% nonzero digit is in the 15th or 16th place after the dot and the
+% quotient is effectively zero.
+%
+% Here I explain why we normalize the parts in this way. If a numerator
+% has the form $n_1.n_2$ and the denominator has the form $d_1.d_2$ then
+% \TeX{} can easily obtain the integer part of $n_1/d_1$, because these
+% are within its range for integers. The resulting quotient (let's call it
+% $q_1$) is the largest integer satisfying $q_1d_1 \le n_1$. What we seek,
+% however is the largest integer $q$ such that $q(d_1.d_2) \le n_1.n_2$.
+% It can easily be shown that $q \le q_1$. It is true, but not so easily
+% shown, that $q \ge q_1 - 1$. This is only true if $d_1$ is large enough,
+% in our case it has to be at least five digits. Thus we only have to do one
+% simple division and decide if we need to reduce the quotient by one. If
+% we arrange for $d_1$ to have eight digits, then $q_1$ will be one digit and
+% the test for whether we need to reduce it becomes easier.
+%
+% This test is done as follows. The first trial quotient, $q_1$, will work
+% if
+% \[
+% q_1 d_1 (10)^8 + q_1 d_2 \le n_1 (10)^8 + n_2
+% \]
+% This means
+% \begin{equation}\label{crucial}
+% 0 \le (n_1 - q_1 d_1) (10)^8 + n_2 - q_1 d_2 .
+% \end{equation}
+% Since $d_2$ is no more than eight digits, $q_1 d_2$ is less than $9
+% (10)^8$. Inequality (\ref{crucial}) is therefore satisfied if $n_1 - q_1
+% d_1 \ge 9$. If that is not the case then the right side of
+% (\ref{crucial}) is computable within \TeX's integer ranges and we can
+% easily test the inequality. If the inequality holds, then $q = q_1$,
+% otherwise $q = q_1 - 1$.
+%
+% Note also that when $q = q_1$, then both terms in (\ref{crucial})
+% (ignoring the $10^8$ factor) will be needed to calculate the remainder.
+% If $q = q_1 - 1$, we simply add $d_1$ and $d_2$ to the respective parts.
+% Thus we will save these values for that use.
+%
+% Now I need to get it organized. \cs{MFP@Rdiv} will have \cs{MFP@x@*} and
+% \cs{MFP@y@*} available. One step (could be first or last). Is to calculate
+% the sign. Let's do it first (because we need to check for zero anyway).
+%
+% We invoke an error message upon division by zero, but nevertheless return
+% a value. By default it is $0$ for $0/0$ and the maximum possible real
+% for $x/0$ when $x$ is not zero. If the numerator is zero and the
+% denominator not, we could do nothing as $z$ was initialized to be zero.
+% However, we play it safe by explicitly setting $z$ to zero.
+%
+% If neither is zero, we calculate the sign of the result and call
+% \cs{MFP@@Rdiv} to divide the absolute values.
+% \begin{macrocode}
+\def\MFP@Rdiv{%
+ \ifnum\MFP@y@Sgn=0 \MFP@dividebyzero@err
+ \ifnum\MFP@x@Sgn=0
+ \edef\MFP@z@Int{\ZeroOverZeroInt}%
+ \edef\MFP@z@Frc{\ZeroOverZeroFrac}%
+ \else
+ \edef\MFP@z@Int{\xOverZeroInt}%
+ \edef\MFP@z@Frc{\xOverZeroFrac}%
+ \fi
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}%
+ \else\ifnum\MFP@x@Sgn=0 \MFP@Rzero
+ \else \edef\MFP@z@Sgn{\number\MFP@x@Sign\MFP@y@Sgn}\MFP@@Rdiv
+ \fi\fi}%
+% \end{macrocode}
+%
+% Now we have two positive values to divide. Our first step is to shift
+% the denominator ($y$) left and keep track of how many places. We store
+% the shift in \cs{MFP@tempa}. This actually changes the value of $y$,
+% but knowing the shift will give us the correct quotient in the end.
+%
+% We first arrange that \cs{MFP@y@Int} is nonzero by making it \cs{MFP@y@Frc} if
+% it is zero (a shift of eight digits). Then the macro
+% \cs{MFP@numdigits@toshift} computes $8$ minus the number of digits in
+% \cs{MFP@y@Int}, which is how many positions left $y$ will be shifted.
+% We then call \cs{MFP@doshift@y} on the concatenation of the digits in
+% the integer and fractional parts (padded with zeros to ensure there are
+% at least 16). All this macro does is read the first eight digits into
+% \cs{MFP@y@Int} and the next eight into \cs{MFP@y@Frc}.
+% \begin{macrocode}
+\def\MFP@@Rdiv{%
+ \ifnum\MFP@y@Int=0
+ \edef\MFP@y@Int{\number\MFP@y@Frc}%
+ \def\MFP@y@Frc{00000000}%
+ \MFP@tempa=8
+ \else
+ \MFP@tempa=0
+ \fi
+ \advance\MFP@tempa\MFP@numdigits@toshift\MFP@y@Int\relax
+ \@XP\MFP@doshift@y\@xp\MFP@y@Int\MFP@y@Frc0000000\MFP@end
+% \end{macrocode}
+%
+% We repeat all that on the numerator $x$, except shifting its digits
+% left means the final outcome will need a corresponding \emph{right}
+% shift. We record that fact by reducing \cs{MFP@tempa}, which ends up
+% holding the net shift necesary.
+%
+% This has the advantage that we know the result will be in the range
+% $[0.1, 10)$. It also means we can reduce the number of places we will
+% need to shift left as well as reduce the number of iterations of the
+% loop that calculates the digits.
+% \begin{macrocode}
+ \ifnum\MFP@x@Int=0
+ \edef\MFP@x@Int{\number\MFP@x@Frc}%
+ \def\MFP@x@Frc{00000000}%
+ \advance\MFP@tempa -8
+ \fi
+ \advance\MFP@tempa-\MFP@numdigits@toshift\MFP@x@Int\relax
+ \@XP\MFP@doshift@x\@xp\MFP@x@Int\MFP@x@Frc0000000\MFP@end
+% \end{macrocode}
+%
+% Since our result will have at most one digit in the integer part, a
+% rightward shift of $10$ places will make every digit $0$ including the
+% rounding digit, so we return $0$.
+% \begin{macrocode}
+ \ifnum\MFP@tempa<-9
+ \MFP@Rzero
+ \else
+% \end{macrocode}
+%
+% Now we perform the division, which is a loop repeated $10 +
+% {}$\cs{MFP@tempa} times. Therefore, we add 10 to \cs{MFP@tempa} in
+% \cs{MFP@tempf}, our loop counter. We also initialize the macro that
+% will store the digits and then, after the division, shift and split it
+% into parts.
+% \begin{macrocode}
+ \MFP@tempf\MFP@tempa
+ \advance\MFP@tempf 10
+ \def\MFP@z@digits{}%
+ \MFP@Rdivloop
+ \MFPshiftandsplit@z@digits
+% \end{macrocode}
+%
+% The last remaining step is to round and carry and get the fractional
+% part in the appropriate 8-digit form..
+% \begin{macrocode}
+ \ifnum\MFP@z@Und>4
+ \MFP@addone\MFP@z@Frc1\MFP@z@Frc
+ \MFP@carrya\MFP@z@Frc\MFP@z@Int
+ \MFP@carrya\MFP@z@Int\MFP@z@Ovr
+ \makeMFP@eightdigits\MFP@z@Frc
+ \fi
+ \fi}%
+% \end{macrocode}
+%
+% If \arg1 of \cs{MFP@numdigits@toshift}, has $n$ digits then
+% \cs{MFP@numdigits@toshift} picks out the value $8-n$. \cs{MFP@doshift@x}
+% reads the first eight digits into \cs{MFP@x@Int} and then pulls out eight more
+% from the rest (\arg9) inside \cs{MFP@x@Frc}. The same with
+% \cs{MFP@doshift@y}.
+% \begin{macrocode}
+\def\MFP@numdigits@toshift#1{\@xp\MFP@ninthofmany#101234567\MFP@end}%
+\def\MFP@doshift@x#1#2#3#4#5#6#7#8#9\MFP@end{%
+ \def\MFP@x@Int{#1#2#3#4#5#6#7#8}%
+ \edef\MFP@x@Frc{\MFP@eightofmany#9\MFP@end}}%
+\def\MFP@doshift@y#1#2#3#4#5#6#7#8#9\MFP@end{%
+ \def \MFP@y@Int{#1#2#3#4#5#6#7#8}%
+ \edef\MFP@y@Frc{\MFP@eightofmany#9\MFP@end}}%
+% \end{macrocode}
+%
+% The loop counter is \cs{MFP@tempf}, \cs{MFP@tempa} is reserved for the
+% shift required later, the quotient digit will be \cs{MFP@tempb}. The
+% remainder will be calculated in \cs{MFP@tempc} and \cs{MFP@tempd}.
+% \cs{MFP@tempe} will hold the value whose size determines whether the
+% quotient needs to be reduced.
+% \begin{macrocode}
+\def\MFP@Rdivloop{%
+ \MFP@tempb\MFP@x@Int % \MFP@tempb = n_1
+ \MFP@tempc\MFP@y@Int % \MFP@tempc = d_1
+ \divide\MFP@tempb \MFP@tempc % \MFP@tempb = n_1/d_1 = q_1
+ \multiply \MFP@tempc \MFP@tempb % \MFP@tempc = q_1 d_1
+ \MFP@tempd \MFP@y@Frc % \MFP@tempd = d_2
+ \multiply \MFP@tempd \MFP@tempb % \MFP@tempd = q_1 d_2
+ \MFP@tempe \MFP@tempc
+ \advance \MFP@tempe -\MFP@x@Int\relax % \MFP@tempe = -n_1 + q_1 d_1
+ \ifnum \MFP@tempe > -9 % n_1 - q_1 d_1 < 9
+ \multiply \MFP@tempe\MFP@ttteight % -(n_1 - q_1 d_1)(10)^8
+ \advance \MFP@tempe \MFP@tempd % add q_1 d_2
+ \advance \MFP@tempe -\MFP@x@Frc\relax % add -n_2
+ \ifnum \MFP@tempe>0 % Crucial inequality fails
+ \advance\MFP@tempb -1 % new q = q_1 - 1
+ \advance\MFP@tempc -\MFP@y@Int % q_1 d_1 - d_1 = q d_1
+ \advance\MFP@tempd -\MFP@y@Frc\relax% q_1 d_2 - d_2 = q d_2
+ \fi
+ \fi
+ \edef\MFP@z@digits{\MFP@z@digits\number\MFP@tempb}%
+% \end{macrocode}
+%
+% It remains to:
+% \begin{itemize}
+% \item Do the carry from \cs{MFP@tempd} to \cs{MFP@tempc}. Then
+% \cs{MFP@tempc.}\cs{MFP@tempd} will represent $q\cdot y$.
+% \item Subtract them from \cs{MFP@x@Int} and \cs{MFP@x@Frc} (i.e. remainder =
+% $x - qy$).
+% \item Borrow, if needed, and we will have the remainder in
+% \cs{MFP@x@Int.}\cs{MFP@x@Frc}.
+% \end{itemize}
+% Then we decrement the loop counter, and decide whether to repeat this
+% loop. If so, we need to shift the remainder right one digit (multiply
+% by 10). We don't use \cs{MFP@carrya} since it requires macros; its
+% internal code, \cs{MFP@carryi} just leaves the results in
+% \cs{MFP@tempa.}\cs{MFP@tempb}.
+% \begin{macrocode}
+ \begingroup
+ \MFP@carryi\MFP@ttteight\MFP@tempd\MFP@tempc
+ \MFP@endgroup@after{%
+ \MFP@tempc=\number\MFP@tempa
+ \MFP@tempd=\number\MFP@tempb\relax
+ }%
+% subtract
+ \MFP@addone\MFP@x@Int{-\MFP@tempc}\MFP@x@Int
+ \MFP@addone\MFP@x@Frc{-\MFP@tempd}\MFP@x@Frc
+% borrow
+ \ifnum\MFP@x@Frc<0
+ \MFP@addone\MFP@x@Frc\MFP@ttteight\MFP@x@Frc
+ \MFP@addone\MFP@x@Int{-1}\MFP@x@Int
+ \fi
+ \advance\MFP@tempf -1
+ \ifnum\MFP@tempf>0
+ \edef\MFP@x@Int{\MFP@x@Int0}%
+ \edef\MFP@x@Frc{\MFP@x@Frc0}%
+ \MFP@carrya\MFP@x@Frc\MFP@x@Int
+ \@xp\MFP@Rdivloop
+ \fi}%
+% \end{macrocode}
+%
+% Now \cs{MFPshiftandsplit@z@digits}. At this point, the digits of the
+% quotient are stored in \cs{MFP@z@digits}. We need to shift the decimal
+% \cs{MFP@tempa} places left, and perform the rounding. There are
+% \cs{MFP@tempa}${}+10$ digits. This could be as little as $1$ or as great
+% as $25$. In the first case \cs{MFP@tempa} is $-9$, and this (rightward)
+% shift produces $0$ plus a rounding digit. In the latter case \cs{MFP@tempa}
+% is $15$, and the shift produces $8$ digits overflow, an $8$-digit
+% integer part, an $8$-digit fractional part and a rounding digit. In the
+% example $0123456$, \cs{MFP@tempa}${}+10$ is $7$, so \cs{MFP@tempa} is $-3$.
+% The shift produces $0.0001\,2345\,6$. The rounding digit ($6$) makes the
+% answer $0.0001\,2346$.
+%
+% We take two cases:
+% \begin{itemize}
+% \item \cs{MFP@tempa}${}\le 7$, prepend $7-{}$\cs{MFP@tempa} zeros. The first
+% $8$ digits will become the integer part, and there should be
+% exactly $9$ more digits.
+% \item \cs{MFP@tempa}${} > 7$, pluck \cs{MFP@tempa}${}-7$ digits for
+% overflow, the next $8$ for integer part, leaving $9$ more digits
+% \end{itemize}
+% In either case, the $9$ last digits will be processed into a fractional
+% part (with possible carry if the rounding increases it to $10^8$).
+%
+% After this, we will return to \cs{MFP@Rdiv} so overwriting \cs{MFP@temp*}
+% won't cause any problems.
+% \begin{macrocode}
+\def\MFPshiftandsplit@z@digits{%
+ \advance \MFP@tempa -7
+ \ifnum\MFP@tempa>0
+ \def\MFP@z@Ovr{}%
+ \@xp\MFPget@Ovrdigits\MFP@z@digits\MFP@end
+ \else
+ \ifnum\MFP@tempa<-7
+ \edef\MFP@z@digits{00000000\MFP@z@digits}%
+ \advance\MFP@tempa8
+ \fi
+ \ifnum\MFP@tempa<-3
+ \edef\MFP@z@digits{0000\MFP@z@digits}%
+ \advance\MFP@tempa4
+ \fi
+ \edef\MFP@z@digits{%
+ \ifcase-\MFP@tempa\or
+ 0\or
+ 00\or
+ 000\or
+ 0000\else
+ 00000%
+ \fi \MFP@z@digits}%
+ \@xp\MFPget@Intdigits\MFP@z@digits\MFP@end
+ \fi}%
+% \end{macrocode}
+%
+% The macro \cs{MFPget@Ovrdigits} is a loop that loads the first \cs{MFP@tempa}
+% digits of what follows into \cs{MFP@z@Ovr}. It does this one digit (\arg1)
+% at a time. Once the counter reaches $0$, we call the macro that
+% processes the integer part digits.
+% \begin{macrocode}
+\def\MFPget@Ovrdigits#1{%
+ \edef\MFP@z@Ovr{\MFP@z@Ovr#1}%
+ \advance\MFP@tempa -1
+ \ifnum\MFP@tempa>0
+ \@xp\MFPget@Ovrdigits
+ \else
+ \@xp\MFPget@Intdigits
+ \fi}%
+% \end{macrocode}
+%
+% The macro \cs{MFPget@Intdigits} should have exactly 17 digits following it.
+% It puts eight of them in \cs{MFP@z@Int}, then calls \cs{MFPget@Frcdigits} to
+% read the fractional part. That requires exactly nine digits follow it,
+% putting eight in \cs{MFP@z@Frc} and the last in \cs{MFP@z@Und}. Still, to
+% allow a graceful exit should there be more, we gobble the rest of the
+% digits.
+% \begin{macrocode}
+\def\MFPget@Intdigits#1#2#3#4#5#6#7#8{%
+ \def\MFP@z@Int{\number#1#2#3#4#5#6#7#8}%
+ \MFPget@Frcdigits}%
+\def\MFPget@Frcdigits#1#2#3#4#5#6#7#8#9{%
+ \def\MFP@z@Frc{#1#2#3#4#5#6#7#8}%
+ \def\MFP@z@Und{#9}\gobbleto@MFP@end}%
+% \end{macrocode}
+%
+% The max amd min operations simply run the compare operation and use
+% and use the resultant booleans to copy $x$ or $y$ to $z$.
+% \begin{macrocode}
+\def\MFP@Rmax{%
+ \MFP@Rcmp \ifMFP@neg \MFP@Rcopy yz\else\MFP@Rcopy xz\fi}%
+\def\MFP@Rmin{%
+ \MFP@Rcmp \ifMFP@pos \MFP@Rcopy yz\else\MFP@Rcopy xz\fi}%
+% \end{macrocode}
+%
+% \subsection{Commands to format for printing}
+%
+% \DescribeMacro{\MFPtruncate}
+% This first runs the parsing command so the fractional part has exactly
+% eight digits. These become the arguments of \cs{MFP@@Rtrunc}, which just
+% keeps the right number. For negative truncations we prepend zeros to the
+% integer part so it too is exactly eight digits. These become the
+% arguments of \cs{MFP@@iRtrunc}, which substitutes 0 for the last
+% \texttt{-}\cs{MFP@tempa} of them.
+%
+% The macro to store the result in follows \arg2. It is read and
+% defined by either \cs{MFP@Rtrunc} or \cs{MFP@iRtrunc}.
+% \begin{macrocode}
+\def\MFPtruncate#1#2{%
+ \begingroup
+ \MFP@tempa#1\relax
+ \MFPparse@x{#2}%
+ \ifnum\MFP@tempa<1
+ \@xp\MFP@iRtrunc
+ \else
+ \@xp\MFP@Rtrunc
+ \fi}%
+\def\MFP@Rtrunc#1{%
+ \edef\MFP@x@Frc{\@xp\MFP@@Rtrunc\MFP@x@Frc\MFP@end}%
+ \ifnum\MFP@x@Int=0
+ \ifnum\MFP@x@Frc=0
+ \def\MFP@x@Sgn{0}%
+ \fi
+ \fi
+ \MFP@endgroup@after{%
+ \MFP@afterdef#1{\MFP@x@Sign\MFP@x@Int.\MFP@x@Frc}}}%
+\def\MFP@@Rtrunc#1#2#3#4#5#6#7#8#9\MFP@end{%
+ \ifcase\MFP@tempa\or
+ #1\or
+ #1#2\or
+ #1#2#3\or
+ #1#2#3#4\or
+ #1#2#3#4#5\or
+ #1#2#3#4#5#6\or
+ #1#2#3#4#5#6#7\else
+ #1#2#3#4#5#6#7#8\fi}%
+\def\MFP@iRtrunc#1{%
+ \makeMFP@eightdigits\MFP@x@Int
+ \edef\MFP@x@Val{\number\MFP@x@Sign\@xp\MFP@@iRtrunc\MFP@x@Int\MFP@end}%
+ \MFP@endgroup@after{\MFP@afterdef#1{\MFP@x@Val}}}%
+\def\MFP@@iRtrunc#1#2#3#4#5#6#7#8#9\MFP@end{%
+ \ifcase-\MFP@tempa
+ #1#2#3#4#5#6#7#8\or
+ #1#2#3#4#5#6#70\or
+ #1#2#3#4#5#600\or
+ #1#2#3#4#5000\or
+ #1#2#3#40000\or
+ #1#2#300000\or
+ #1#2000000\or
+ #10000000\else
+ 00000000\fi}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPround}
+% For rounding we simply add the appropriate fraction and truncate.
+% The macro in which to store the result will follow \arg2, and be
+% picked up by the \cs{MFPtruncate} command.
+% \begin{macrocode}
+\def\MFPround#1#2{%
+ \begingroup
+ \MFP@tempa#1\relax
+ \ifnum 0>\MFP@tempa
+ \edef\MFP@y@Tmp{%
+ \ifcase-\MFP@tempa\or
+ 5\or
+ 50\or
+ 500\or
+ 5000\or
+ 50000\or
+ 500000\or
+ 5000000\else
+ 50000000\fi
+ }%
+ \else
+ \edef\MFP@y@Tmp{%
+ \ifcase\MFP@tempa
+ .5\or
+ .05\or
+ .005\or
+ .0005\or
+ .00005\or
+ .000005\or
+ .0000005\or
+ .00000005\else
+ 0\fi
+ }%
+ \fi
+ \MFPchk{#2}\ifMFP@neg\edef\MFP@y@Tmp{-\MFP@y@Tmp}\fi
+ \MFPadd{#2}\MFP@y@Tmp\MFP@z@Tmp
+ \MFP@endgroup@after{\MFP@afterdef\MFP@z@Tmp{\MFP@z@Tmp}}%
+ \MFPtruncate{#1}\MFP@z@Tmp}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPstrip}
+% Stripping zeros from the right end of the fractional part. The star form
+% differs only in the handling of a zero fractional part. So we check
+% whether it is zero and when it is, we either append `\texttt{.0}' or
+% nothing. The rest of the code grabs a digit at a time and stops when the
+% rest are zero.
+% \begin{macrocode}
+\def\MFPstrip{%
+ \@ifstar{\MFP@strip{}}{\MFP@strip{.0}}}%
+\def\MFP@strip#1#2#3{%
+ \MFPparse@x{#2}%
+ \ifnum \MFP@x@Frc=0
+ \edef#3{\MFP@x@Sign\MFP@x@Int#1}%
+ \else
+ \edef#3{\MFP@x@Sign\MFP@x@Int.\@xp\MFP@@strip\MFP@x@Frc\MFP@end}%
+ \fi}%
+\def\MFP@@strip#1#2\MFP@end{%
+ #1%
+ \ifnum 0#2>0
+ \@xp\MFP@@strip
+ \else
+ \@xp\gobbleto@MFP@end
+ \fi#2\MFP@end}%
+% \end{macrocode}
+%
+% \subsection{Miscellaneous}
+%
+% Here is the code that allows definitions to survive after
+% \cs{stopMFPprogram}. The \cs{Global} variants are easiest.
+% \begin{macrocode}
+\def\MFP@Global#1{\toks@\@xp{#1}\xdef#1{\the\toks@}}%
+\def\MFP@GlobalStack{\MFP@Global\MFP@Rstack}%
+% \end{macrocode}
+%
+% The \cs{Export} command adds the command and its definition to a macro
+% that is executed after the closing group of the program.
+% \begin{macrocode}
+\def\MFP@Export#1{%
+ \begingroup
+ \toks@\@xp{\MFPprogram@returns}%
+ \MFP@endgroup@after{%
+ \MFP@afterdef\MFPprogram@returns{\the\toks@ \MFP@afterdef#1{#1}}%
+ }}%
+\def\MFP@ExportStack{\MFP@Export\MFP@Rstack}%
+% \end{macrocode}
+%
+% The various operations \cs{MFP@R...} together make up a ``microcode'' in
+% terms of which the stack language and the operand language are both
+% defined. As a language in its own right, it lacks only convenient ways
+% to move numbers around, as well as a few extra registers for saving
+% intermediate results. In this language, numbers are represented by a
+% three part data structure, consisting of a signum, an integer part and a
+% fractional part.
+%
+% Here we define extra commands to remedy this lack, starting with a way
+% to load a number (or rather, a three part data structure representing a
+% number) directly into a register. Here \arg1 is a register name (we
+% always us a single letter) and the remaining arguments are the signum,
+% the integer part and the fractional part (automatically normalized to 8
+% digits). The ``register'' is just a set of three macros created from the
+% name given.
+%
+% We make loading a number into a register a little more general than
+% strictly needed, allowing the parts to be specified as anything \TeX{}
+% recognizes as a number and allowing any register name. This generality
+% might reduce efficiency but it simplifies code. Because register
+% \reg{z} is by far the most common one to load, we make more efficient
+% version of it.
+% \begin{macrocode}
+\def\MFP@Rload #1#2#3#4{%
+ \@xp\edef\csname MFP@#1@Sgn\endcsname{\number#2}%
+ \@xp\edef\csname MFP@#1@Int\endcsname{\number#3}%
+ \@xp\edef\csname MFP@#1@Frc\endcsname{\number#4}%
+ \@xp\makeMFP@eightdigits\csname MFP@#1@Frc\endcsname}%
+\def\MFP@Rcopy#1#2{%
+ \MFP@Rload #2{\csname MFP@#1@Sgn\endcsname}%
+ {\csname MFP@#1@Int\endcsname}%
+ {\csname MFP@#1@Frc\endcsname}}%
+\def\MFP@Rloadz#1#2#3{%
+ \edef\MFP@z@Sgn{\number#1}%
+ \edef\MFP@z@Int{\number#2}%
+ \edef\MFP@z@Frc{\number#3}%
+ \makeMFP@eightdigits\MFP@z@Frc}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPpi}
+% These are some miscellaneous constants. The 8-digit approximation to
+% $\pi$, is \cs{MFPpi} and the constant mathematicians call $e$ is
+% \DescribeMacro{\MFPe}
+% \cs{MFPe}. Finally, the golden ratio (often called $\phi$) is obtained
+% by
+% \DescribeMacro{\MFPphi}
+% \cs{MFPphi}.
+% \begin{macrocode}
+\def\MFPpi{3.14159265}%
+\def\MFPe{2.71828183}%
+\def\MFPphi{1.61803399}%
+% \end{macrocode}
+% Load (conditionally) \file{mfpextra.tex}.
+% \begin{macrocode}
+\MFP@loadextra
+\MFP@finish
+%</sty>
+% \end{macrocode}
+%
+% \section{Extras}\label{extras}
+%
+% The extras consist so far of sine, cosine, angle, logarithm, powers,
+% square root, and random number. For completeness, here is the table of
+% user-level commands available.
+%
+% \medskip
+% \centerline{%
+% \begin{tabular}{lp{3in}}
+% \textit{Operand versions}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\MFPsin}^^A
+% \cs{MFPsin}\mmarg{num}\cs{macro}&
+% Stores $\sin(\meta{num})$ in \cs{macro}, where \meta{num} is an
+% angle in degrees.\\
+% \SpecialUsageIndex{\MFPcos}^^A
+% \cs{MFPcos}\mmarg{num}\cs{macro}&
+% Stores $\cos(\meta{num})$ in \cs{macro}, where \meta{num} is an
+% angle in degrees.\\
+% \SpecialUsageIndex{\MFPangle}^^A
+% \cs{MFPangle}\mmarg{$x$}\mmarg{$y$}\cs{macro}&
+% Stores in \cs{macro} the polar angle coordinate $\theta$ of the point
+% $(x,y)$, where $-180<\theta\le 180$.\\
+% \SpecialUsageIndex{\MFPrad}^^A
+% \cs{MFPrad}\mmarg{num}\cs{macro}&
+% The angle \meta{num} in degrees is converted to radians,
+% and result is stored in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPdeg}^^A
+% \cs{MFPdeg}\mmarg{num}\cs{macro}&
+% The angle \meta{num} in radians is converted to degrees,
+% and result is stored in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPlog}^^A
+% \cs{MFPlog}\mmarg{num}\cs{macro}&
+% Stores $\log(\meta{num})$ in \cs{macro} (base 10 logarithm).\\
+% \SpecialUsageIndex{\MFPln}^^A
+% \cs{MFPln}\mmarg{num}\cs{macro}&
+% Stores $\ln(\meta{num})$ in \cs{macro} (natural logarithm).\\
+% \SpecialUsageIndex{\MFPexp}^^A
+% \cs{MFPexp}\mmarg{num}\cs{macro}&
+% Stores $\exp(\meta{num})$ (i.e., $e^x$) in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPsqrt}^^A
+% \cs{MFPsqrt}\mmarg{num}\cs{macro}&
+% Stores the square root of \meta{num} in \cs{macro}.\\
+% \SpecialUsageIndex{\MFPrand}^^A
+% \cs{MFPrand}\mmarg{num}\cs{macro}&
+% Stores a random real number between $0$ amd \meta{num} in
+% \cs{macro}. If \meta{num} is negative, so is the result.\\
+% \SpecialUsageIndex{\MFPpow}^^A
+% \cs{MFPpow}\mmarg{num}\mmarg{int}\cs{macro}&
+% Stores the \meta{int} power of \meta{num} in \cs{macro}. The
+% second operand must be an integer (positive or negative).
+% \end{tabular}}
+%
+% In addition, there is \SpecialUsageIndex{\MFPsetseed}\cs{MFPsetseed} for
+% setting the internal random number seed. It takes one argument, the seed
+% value, which must be an integer greater than or equal to $1$ and less
+% than or equal to $2^{31}-2 = 2\,147\,483\,646$. If the seed is set to
+% zero or a negative number then the first use of the random number
+% generator will replace it with a seed value based on the current time
+% and date. The randum number seed is a global value.
+%
+% There are actually three random number generators and they can be
+% selected with the commands
+% \SpecialUsageIndex{\MFPrandgenA}\cs{MFPrandgenA},
+% \SpecialUsageIndex{\MFPrandgenB}\cs{MFPrandgenB}, or
+% \SpecialUsageIndex{\MFPrandgenC}\cs{MFPrandgenC}. The first uses the
+% code and multiplier value from the well-known macro file
+% \file{random.tex}. It is the default. The other two use different
+% multipliers which are alleged to have better statistical behavior. If
+% any of these commands is used inside a group, that generator is in force
+% during that group only.
+%
+% \bigskip
+% \centerline{%
+% \begin{tabular}{lp{3.9in}}
+% \textit{Stack versions}&\\[3pt]
+% \hline\hline
+% \textbf{Command}&\textbf{operation}\\
+% \hline
+% \SpecialUsageIndex{\Rsin}\cs{Rsin}&
+% The number is interpreted as degrees, and its sine is computed.\\
+% \SpecialUsageIndex{\Rcos}\cs{Rcos}&
+% The number is interpreted as degrees, and its cosine is computed.\\
+% \SpecialUsageIndex{\Rangle}\cs{Rangle}&
+% The top two numbers are interpreted as coordinates of a point $P$
+% in the order they were pushed. The polar angle coordinate $\theta$
+% of $P$, with $-180 < \theta \le 180$ is computed.\\
+% \SpecialUsageIndex{\Rrad}\cs{Rrad}&
+% The number of degrees is converted to radians.\\
+% \SpecialUsageIndex{\Rdeg}\cs{Rdeg}&
+% The number of radians is converted to degrees.\\
+% \SpecialUsageIndex{\Rlog}\cs{Rlog}&
+% Computes the base-10 logarithm.\\
+% \SpecialUsageIndex{\Rln}\cs{Rln}&
+% Computes the natural logarithm.\\
+% \SpecialUsageIndex{\Rexp}\cs{Rexp}&
+% Computes the exponential of the number (i.e., $e^x$).\\
+% \SpecialUsageIndex{\Rsqrt}\cs{Rsqrt}&
+% Computes the square root of the number.\\
+% \SpecialUsageIndex{\Rrand}\cs{Rrand}&
+% Returns a random real number between $0$ and the number, keeping the
+% sign.\\
+% \SpecialUsageIndex{\Rpow}\cs{Rpow}&
+% Computes $x^y$. The last number pushed ($y$) must be an
+% integer.
+% \end{tabular}}
+%
+% \bigskip
+% The user could easily convert between radians and degrees using
+% multiplication and/or division. One could similarly convert between
+% natural logarithms and base ten logarithms. The commands \cs{Rdeg},
+% \cs{Rrad}, \cs{Rlog} and \cs{Rln} (and their \cs{MFP...} counterparts)
+% aim for more accurate results.
+%
+% \subsection{Loading the extras}
+%
+% \DescribeMacro{\Rsin}\DescribeMacro{\Rcos}
+% \DescribeMacro{\Rangle}
+% \DescribeMacro{\Rrad}\DescribeMacro{\Rdeg}
+% \DescribeMacro{\Rlog}\DescribeMacro{\Rln}
+% \DescribeMacro{\Rexp}\DescribeMacro{\Rsqrt}
+% \DescribeMacro{\Rrand}\DescribeMacro{\Rpow}
+% We start \file{mfpextra} with the hook \cs{MFP@Rextra} that
+% \cs{startMFPprogram} will call to make available the extra operations
+% defined here. If \file{minifp.sty} has been loaded, this macro is
+% \cs{@empty}, otherwise it should be undefined. If it is undefined we
+% load \file{minifp.sty}. If it is then not \cs{@empty} we assume
+% \file{mfpextra.tex} was previously loaded and end input here.
+% \begin{macrocode}
+%<*extra>
+% check if mfpextra already loaded:
+\expandafter\ifx\csname MFP@xfinish\endcsname\relax
+\else \expandafter\endinput\fi
+\expandafter\edef\csname MFP@xfinish\endcsname{%
+ \catcode64=\the\catcode64 \space
+ \catcode46=\the\catcode46 \space
+ \catcode60=\the\catcode60 \space
+ \catcode62=\the\catcode62 \space}%
+\catcode64=11 % @
+\catcode46=12 % . (period)
+\catcode60=12 % <
+\catcode62=12 % >
+\ifx\MFP@Rextra\UndEfInEd \input minifp.sty \fi
+\ifx\MFP@Rextra\@empty
+\else
+ \immediate\write16{mfpextra.tex: already loaded.^^J}%
+ \MFP@xfinish
+ \expandafter\endinput
+\fi
+\immediate\write16{%
+ mfpextra.tex: extra operations for the MiniFP package.^^J}%
+\def\MFP@Rextra{%
+ \def\Rcos {\MFP@stack@Unary\MFP@Rcos }%
+ \def\Rsin {\MFP@stack@Unary\MFP@Rsin }%
+ \def\Rangle{\MFP@stack@Binary\MFP@Rangle}%
+ \def\Rrad {\MFP@stack@Unary\MFP@Rrad }%
+ \def\Rdeg {\MFP@stack@Unary\MFP@Rdeg }%
+ \def\Rlog {\MFP@stack@Unary\MFP@Rlog }%
+ \def\Rln {\MFP@stack@Unary\MFP@Rln }%
+ \def\Rexp {\MFP@stack@Unary\MFP@Rexp }%
+ \def\Rsqrt {\MFP@stack@Unary\MFP@Rsqrt}%
+ \def\Rrand {\MFP@stack@Unary\MFP@Rrand}%
+ \def\Rpow {\MFP@stack@Binary\MFP@Rpow}}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPsin}\DescribeMacro{\MFPcos}
+% \DescribeMacro{\MFPrad}\DescribeMacro{\MFPdeg}
+% \DescribeMacro{\MFPlog}\DescribeMacro{\MFPln}
+% \DescribeMacro{\MFPexp}\DescribeMacro{\MFPsqrt}
+% \DescribeMacro{\MFPrand}\DescribeMacro{\MFPpow}
+% Then the wrappers for the operand versions.
+% \begin{macrocode}
+\def\MFPcos {\MFP@op@Unary\MFP@Rcos }%
+\def\MFPsin {\MFP@op@Unary\MFP@Rsin }%
+\def\MFPangle {\MFP@op@Binary\MFP@Rangle}%
+\def\MFPrad {\MFP@op@Unary\MFP@Rrad }%
+\def\MFPdeg {\MFP@op@Unary\MFP@Rdeg }%
+\def\MFPlog {\MFP@op@Unary\MFP@Rlog }%
+\def\MFPln {\MFP@op@Unary\MFP@Rln }%
+\def\MFPexp {\MFP@op@Unary\MFP@Rexp }%
+\def\MFPsqrt {\MFP@op@Unary\MFP@Rsqrt}%
+\def\MFPrand {\MFP@op@Unary\MFP@Rrand}%
+\def\MFPpow {\MFP@op@Binary\MFP@Rpow}%
+% \end{macrocode}
+%
+% \subsection{Error messages}
+%
+% These extra commands come with a few possible new warnings and errors.
+%
+% \DescribeMacro{\LogOfZeroInt}
+% \DescribeMacro{\LogOfZeroFrac}
+% Trying to take the logarithm of zero will result in an error message.
+% If one allows \TeX{} to continue, the returned value will be negative,
+% with an integer part whose absolute value is equal to the contents of
+% \cs{LogOfZeroInt} and a fractional part equal to the contents of
+% \cs{LogOfZeroFrac}. The defaults are both $99999999$.
+%
+% Trying to take the logarithm of a negative number will produce the
+% warning
+% \begin{verbatim}
+% MFP warning: Log of a negative number is complex.
+% Only the real part will be computed. \end{verbatim}
+% The log of the absolute value is returned.
+%
+% Trying to take the square root of a negative number has similar
+% behavior. It produces a warning and returns $0$.
+%
+% \SpecialUsageIndex{\MaxRealInt}
+% \SpecialUsageIndex{\MaxRealFrac}
+% Trying to take the exponential of a number larger than about $18.42$
+% will cause an error and the number returned has integer part
+% $99999999$ and fractional part $99999999$.
+%
+% Trying to take a negative power of $0$ produces an error and returns
+% the same value as trying to divide $1$ by $0$.
+%
+% Messages for errors related to impossible powers and logarithms.
+% \begin{macrocode}
+\def\MFP@logofzero@err{%
+ \MFP@errmsg{logarithm of zero}%
+ {You tried to take the logarithm of zero. What were you %
+ thinking? If you ^^Jcontinue, the value %
+ assigned will be -\LogOfZeroInt.\LogOfZeroFrac.}}%
+\def\LogOfZeroInt {\MaxRealInt}%
+\def\LogOfZeroFrac{\MaxRealFrac}%
+\def\MFP@expoverflow@err{%
+ \MFP@errmsg{Power too large}%
+ {The power you tried to calculate is too large for %
+ 8 digits. If you continue, ^^Jthe value assigned will be %
+ \MaxRealInt.\MaxRealFrac.}}%
+\def\MFP@badpower@err{%
+ \MFP@errmsg{negative power of zero}%
+ {You tried to take a negative power of zero. What were you
+ thinking? If you ^^Jcontinue, the value assigned will be %
+ \xOverZeroInt.\xOverZeroFrac.}}%
+% \end{macrocode}
+%
+% A debugging utility, \cs{MFPshowreg} displays the contents of a
+% register.
+% \begin{macrocode}
+\def\MFPshowreg #1{%
+\ifMFPdebug
+\begingroup
+ \edef\theregister{%
+ #1 = \expandafter \MFP@Sign
+ \csname MFP@#1@Sgn\endcsname %
+ \csname MFP@#1@Int\endcsname.%
+ \csname MFP@#1@Frc\endcsname}%
+ \show\theregister
+\endgroup
+\fi}%
+% \end{macrocode}
+%
+% \subsection{Sine and Cosine}
+%
+% For iterated code, the most common register to copy is $z$ and
+% the most common place to copy it is to $x$ or $y$ so we
+% make single commands to do those.
+% \begin{macrocode}
+\def\MFP@Rcopyz#1{\MFP@Rload {#1}\MFP@z@Sgn\MFP@z@Int\MFP@z@Frc}%
+\def\MFP@Rcopyzx{\MFP@Rcopyz x}%
+\def\MFP@Rcopyzy{\MFP@Rcopyz y}%
+% \end{macrocode}
+%
+% Our code assumes the number $x$ is an angle in degrees. To get sine and
+% cosine of numbers as radians, simply convert your radians to degrees
+% using \cs{MFPdeg} or \cs{Rdeg}. Then find the sine or cosine of the
+% result. For example, if \cs{X} holds the angle in in radians and you
+% want the result to be stored in \cs{S}:
+% \begin{verbatim}
+% \MFPdeg\X\Y \MFPsin\Y\S \end{verbatim}
+%
+% For unit conversions such as radian to degree we try to be more accurate
+% than a multiplication by an eight-digit conversion factor allows.
+% If $x$ is large and the factor is off by $0.5\times 10^{-8}$, then the
+% result can be significantly off. But if we are able to give the
+% conversion factor 16 digits precision, then only the imprecision of $x$
+% will significantly affect the result.
+%
+% We express the conversion factor as an integer part and two eight-digit
+% fractional parts. We multiply $x$ by the integer and first fractional
+% part (\arg1 and \arg2) with a normal \cs{MFP@Rmul}, but we save the
+% underflow digits and undo the rounding that occured at the 8th digit.
+% Together these give us an essentially exact result. Then we multiply $x$
+% by the second fractional part (\arg3) and add the saved underflow to the
+% result. Finally, we round and add the result to the first product.
+% Argument \arg3, as well as the underflow digits, represent numbers less
+% than $10^{-8}$, so we effectively scale them up by $10^8$, round the
+% result to an integer and scale that back down.
+%
+% The registers $w$ and $v$ are used to save intermediate results.
+% The ``\texttt{DP}'' in \cs{MFP@DPmul} refers to the fact that we are
+% multiplying by a ``double precision'' real. The conversion factors are
+% required to be positive.
+% \begin{macrocode}
+\def\MFP@DPmul#1#2#3{%
+ \ifnum\MFP@x@Sgn=0
+ \MFP@Rzero
+ \else
+ \MFP@Rcopy xv%
+ \MFP@Rload y1{#1}{#2}\MFP@Rmul
+ \edef\MFP@w@Und{\MFP@z@Und}%
+ \ifnum\MFP@z@Frc@iii>4999
+ \MFP@tempa\MFP@z@Frc \advance\MFP@tempa-1
+ \edef\MFP@z@Frc{\number\MFP@tempa}%
+ \makeMFP@eightdigits\MFP@z@Frc
+ \fi
+ \MFP@Rcopyz w%
+ \MFP@Rcopy vx\MFP@Rload y10{#3}\MFP@Rmul
+ \MFP@Rcopyzx\MFP@Rload y\MFP@v@Sgn 0{\MFP@w@Und}\MFP@Radd
+ \MFP@tempa\MFP@z@Int\relax
+ \ifnum\MFP@z@Frc<50000000 \else \advance\MFP@tempa 1 \fi
+ \ifnum\MFP@tempa<\MFP@ttteight\relax
+ \MFP@Rload x{\ifnum\MFP@tempa>0 \MFP@z@Sgn\else0\fi}0\MFP@tempa
+ \else
+ \MFP@Rload x\MFP@z@Sgn10%
+ \fi
+ \MFP@Rcopy wy\MFP@Radd
+ \fi}%
+% \end{macrocode}
+%
+% Conversion factors:
+% \begin{itemize}
+% \item radians to degrees: $57.2957795130823209$
+% \item degrees to radians: $0.0174532925199433$
+% \item natural log to common log: $0.4342944819032518$
+% \item common log to natural log: $2.3025850929940457$
+% \end{itemize}
+%
+% Note that the comparatively large size of the first number means that
+% the $\pm0.5\cdot10^{-8}$ imprecision that $x$ implicitly carries will
+% be multiplied to approximately $\pm29.6\cdot 10^{-8}$ in the result.
+% The only way around this would be to operate with higher precision
+% internally. We do that in the code for computing angles.
+% \begin{macrocode}
+\def\MFP@Rdeg{\MFP@DPmul{57}{29577951}{30823209}}%
+\def\MFP@Rrad{\MFP@DPmul{0}{01745329}{25199433}}%
+\def\MFP@RbaseX{\MFP@DPmul{0}{43429448}{19032518}}%
+\def\MFP@RbaseE{\MFP@DPmul{2}{30258509}{29940457}}%
+% \end{macrocode}
+%
+% There are very few angles that are expressible in eight digits whose sine
+% or cosine can be expressed exactly in eight digits. For these, we do obtain
+% an exact result. Other values produce inexact results. It would be nice
+% if we could at least obtain these correctly rounded to eight decimals, but
+% unfortunately our methods will often produce a result off by $1$ in the
+% eighth decimal from the correctly rounded value. Anything that
+% involves the addition of two or more rounded results can have this
+% problem. The only way to get correctly rounded results is to carry out
+% all operations internally to additional places. Even then, there will be
+% the occasional $.4999\dots$ that should round to $0$ but rounds to $1$
+% instead.
+%
+% For the cosine, just compute $\sin(90-x)$.
+% \begin{macrocode}
+\def\MFP@Rcos{%
+ \MFP@Rcopy xy\MFP@Rload x1{90}0\MFP@Rsub
+ \MFP@Rcopyzx\MFP@Rsin}%
+% \end{macrocode}
+%
+% Reduce $|x|$ by subtracting $180$ from the integer part until it is less
+% than $180$. Of course, $\sin x = \sgn(x)\sin(|x|)$ so we only need to
+% compute $\sin(|x|)$. The sign will be that of $x$; each reduction by
+% $180$ changes the sign, but the reduction code keeps track of that. If
+% $x$ is 0 after the reduction, return zero.
+% \begin{macrocode}
+\def\MFP@Rsin{%
+ \MFP@tempa\MFP@x@Int
+ \MFP@tempb\MFP@x@Frc
+ \MFP@tempc\MFP@x@Sgn\relax
+ \MFP@reduce@angle
+ \ifnum\MFP@tempa>0 \MFP@@Rsin
+ \else\ifnum\MFP@tempb>0 \MFP@@Rsin
+ \else \MFP@Rzero
+ \fi\fi}%
+% \end{macrocode}
+%
+% This following reduces $|x|$ to the case $0 \le |x| < 180$. It assumes
+% the integer part is in count register \cs{MFP@tempa}, the sign in
+% \cs{MFP@tempc}.
+% \begin{macrocode}
+\def\MFP@reduce@angle{%
+ \ifnum\MFP@tempa<180
+ \else
+ \advance\MFP@tempa-180
+ \MFP@tempc-\MFP@tempc
+ \@xp\MFP@reduce@angle
+ \fi}%
+% \end{macrocode}
+%
+% At this point, $|x|$ is represented by \cs{MFP@tempa} (integer part) and
+% \cs{MFP@tempb} (fractional part). Also, we already know the sign stored
+% in \cs{MFP@tempc}. Moreover $0 < {}$\cs{MFP@tempa}${} < 180$. We now
+% reduce to $0 < |x| \le 90$ using $\sin(x) = \sin(180-|x|)$, and return
+% $1$ if equal to $90$.
+%
+% The calculation of $180-x$ is optimized, taking advantage of the fact
+% that both $x$ and the result are known to be positive. If the fractional
+% part is positive, we borrow $1$ by reducing $180$ to $179$.
+% \begin{macrocode}
+\def\MFP@@Rsin{%
+ \ifnum\MFP@tempa<90
+ \else
+ \MFP@tempa -\MFP@tempa
+ \ifnum\MFP@tempb>0
+ \MFP@tempb -\MFP@tempb
+ \advance\MFP@tempb \MFP@ttteight\relax
+ \advance\MFP@tempa 179
+ \else \advance\MFP@tempa 180
+ \fi
+ \fi
+ \ifnum\MFP@tempa=90
+ \MFP@Rloadz \MFP@tempc10%
+ \else
+% \end{macrocode}
+%
+% We would need to convert $x$ to radians (multiply by $\pi/180$) to use
+% the standard power series, but instead we will incorporate the
+% conversion factor into the power series coefficients.
+%
+% We will, however, try to increase accuracy by reducing the size of $x$
+% and correspondingly increasing the appropriate factors. Since the
+% number of significant figures of a product is limited by the least
+% number of significant figures of the two factors, the bottleneck on
+% accuracy is that of the smaller term: all our numbers have eight digits
+% so if a number is small, the number of nonzero digits is small.
+%
+% Dividing by 100 seems a good choice (so our units are
+% ``hectodegrees''). This makes $0 < x < .9$ and the integer part
+% (\cs{MFP@tempa}) will be henceforth ignored.
+%
+% The addition of 50 is for rounding purposes. After that, our
+% computations amount to concatenating the top six digits of
+% \cs{MFP@tempb} to the digits of \cs{MFP@tempa}. This will produce the
+% integer form of the fractional part of $x/100$ (the integer part of
+% $x/100$ is zero).
+%
+% Division by $100$ can turn a number into $0$. This is one place we can
+% lose accuracy (up to $\pm1$ in the last digit of the result). In
+% compensation, the rest of the calculations become very much more
+% accurate.
+% \begin{macrocode}
+ \advance\MFP@tempb 50 \divide\MFP@tempb 100
+ \multiply\MFP@tempa 1000000 \advance\MFP@tempb\MFP@tempa
+ \ifnum\MFP@tempb=0
+ \MFP@Rzero
+ \else
+% \end{macrocode}
+%
+% We save some multiplications by working with $t=x^2$. As we don't need
+% the original $x$ anymore, we simply replace it with the newly reduced
+% value. We also save this reduced $x$ in another register, $s$, as
+% we will need it again at the end, and our intermediate calculations do
+% not preserve the $x$ register. Then we square $x$ and, if that
+% square is $0$ we can skip all the power series and simply return $x$
+% converted to radians. If $x^2$ is not zero, we save it in temporary
+% register $t$ and call our power series. When this program is
+% finished, all that remains is the final multiplication by a conversion
+% factor (\cs{MFP@DPmul}).
+% \begin{macrocode}
+ \MFP@Rload s\MFP@tempc0\MFP@tempb
+ \MFP@Rcopy sx%
+ \MFP@Rsq
+ \ifnum \MFP@z@Frc>0
+ \MFP@Rcopyz t\MFP@Rsin@prog
+ \else
+ \MFP@Rcopy sx%
+ \fi
+ \MFP@DPmul 1{74532925}{19943296}%
+ \fi
+ \fi}%
+% \end{macrocode}
+%
+% \cs{MFP@Rsin@prog} is the power series computation. The power series
+% need only go to the $x^{13}$ term as the next is less than $10^{-9}$ and
+% in our 8-place computations is indistingushable from $0$. Our series is:
+% $$
+% rx(1 - r^2t/3! + r^4t^2/5! - r^6t^3/7! + r^8t^4/9! - r^{10}t^5/11! +
+% r^{12}t^6/13!)
+% $$
+% where $r$ is the factor that converts $x$ to radian measure
+% (hectodegrees to radians). When $x$ is so small as to produce $t = 0$ we
+% have skipped all this.
+%
+% We minimize any multiplications of tiny numbers by computing this as
+% $$
+% rx(1 - ft(1 - et(1 - dt(1 - ct(1 - bt(1 - at)))))).
+% $$
+% In this format, additional terms might actually make a difference,
+% because $at$ is not particularly small. However, the more computations
+% we have, the more errors accumulate. Therefore we take the fewest that
+% produce acceptable accuracy.
+%
+% Now $r = 1.7453292519943296$ and $a$, $b$, etc., have formulas:
+% $$
+% \vcenter{\centering
+% $\displaystyle a = r^2/13/12,\ b = r^2/11/10,\ c = r^2/9/8$,\\
+% $\displaystyle d = r^2/7/6,\ e = r^2/5/4,\ f = r^2/3/2$.\par
+% }
+% $$
+% An alternative method would be to accumulate a sum, computing each term
+% from the previous one (e.g., if $u = t^3/7!$ is the fourth term, the next
+% one is $u*t*(1/(8*9))$). This is a bit more complicated to code and requires
+% moving values around more. It would have the advantage that we can stop
+% whenever a term evaluates to zero, making computation faster for small
+% values of $x$. I have not determined whether it would compromise
+% accuracy.
+%
+% We avoid divisions by precomputing the coefficients $a$, $b$, $c$, etc.
+% Note that without the reduction in $x$, the value of $a$ for example
+% would be $0.00000195$, with only three significant figures of accuracy.
+% Now we can have seven, and the accuracy is more-or-less determined by that
+% of the reduced x.
+% $$
+% \vcenter{\centering
+% $\displaystyle a = 0.01952676,\ b = 0.02769249,\ c = 0.04230797,$,\\
+% $\displaystyle d = 0.07252796,\ e = 0.15230871,\ f = 0.50769570$.\par
+% }
+% $$
+% It is important to note that the following operations step all over
+% the \cs{MFP@temp}\textit{x} \cs{count} registers, so we have made sure
+% that we no longer need them.
+%
+% The \cs{MFP@flipz} computes $1-z$, where $z$ is the result of the
+% previous operation. Instead of simply subtracting, we optimize based
+% on the fact that $z$ is known to be nonnegative and not larger than $1$.
+%
+% The macro \cs{MFP@com@iter} `flipz' the previous result then multiplies
+% by $t$ and the indicated coefficient. (The name of this macro stands for
+% ``common iterated'' code; it is reused for some other power series.)
+%
+% For extra efficiency, the power series uses a ``small'' version of
+% multiplication \cs{MFP@Rsmul}, used only when the factors are sure to
+% lie in $[0,1]$. This does not take into account the sign of $x$,
+% whence the ending \cs{edef}.
+% \begin{macrocode}
+\def\MFP@Rsin@prog{%
+ \MFP@Rcopy tx\MFP@Rload y10{01952676}\MFP@Rsmul%
+ \MFP@com@iter{02769249}\MFP@com@iter{04230797}\MFP@com@iter{07252796}%
+ \MFP@com@iter{15230871}\MFP@com@iter{50769570}\MFP@flipz \MFP@Rcopyzx
+ \MFP@Rcopy sy\MFP@Rsmul\MFP@Rcopyzx\edef\MFP@x@Sgn{\MFP@s@Sgn}}%
+\def\MFP@flipz{%
+ \ifnum\MFP@z@Sgn=0
+ \MFP@Rloadz 110%
+ \else
+ \MFP@tempa\MFP@ttteight
+ \advance\MFP@tempa-\MFP@z@Frc\relax
+ \MFP@Rloadz{\ifcase\MFP@tempa 0\else1\fi}0\MFP@tempa
+ \fi}%
+\def\MFP@com@iter#1{\MFP@flipz
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rload y10{#1}\MFP@Rsmul}%
+% \end{macrocode}
+%
+% As to the accuracy of these computations, we can certainly lose accuracy
+% at each step. In principle, if $x$ is known to 10 significant figures
+% ($x \ge 10$~degrees), then even though we lose two figures with division
+% by 100, the accuracy bottleneck is the fact that our coefficients have
+% only seven figures. Now we have 17 multiplications, and while products
+% are said to have the same number of significant figures as the factors,
+% in the worse case we can accumulate inaccuracy of about $.5\times
+% 10^{-8}$ per multiplication. So we are not guaranteed an accuracy of
+% more than about $\pm 10^{-7}$. Numerical tests, however, show that it
+% isn't that bad, probably because the direction of inaccuracies usually
+% varies randomly, and inaccuracies in one direction compensate for those
+% going the other way. I have not seen a case where the result is off by
+% more than $1$ in the last decimal place (i.e., $\pm 1.5\times 10^{-8}$).
+% In the case where we can know the result exactly, $x=30$, we get an
+% exact answer, even though we don't single it out (as we do $0$, $90$ and
+% $180$).
+%
+% The following is the ``small'' version of \cs{MFP@Rmul}. Limited to
+% non-negative numbers less than or equal to $1$. Theoretically all the
+% numbers are strictly between $0$ and $1$, but in practice a
+% multiplication could round to $0$ and then, after subtraction, a $1$
+% could occur. We handle those easy cases separately, so that in
+% \cs{MFP@@Rsmul} we don't have to worry about the integer parts at all.
+%
+% Also, since these are completely internal, we don't even define the
+% overflow and underflow macros.
+% \begin{macrocode}
+\def\MFP@Rsmul{%
+ \ifnum \MFP@x@Sgn=0 \MFP@Rzero
+ \else\ifnum \MFP@y@Sgn=0 \MFP@Rzero
+ \else\ifnum\MFP@x@Int>0 \MFP@Rcopy yz%
+ \else\ifnum\MFP@y@Int>0 \MFP@Rcopy xz%
+ \else \MFP@@Rsmul
+ \fi\fi\fi\fi}%
+\def\MFP@@Rsmul{%
+ \MFP@split\MFP@x@Frc\MFP@x@Frc@i\MFP@x@Frc@ii
+ \MFP@split\MFP@y@Frc\MFP@y@Frc@i\MFP@y@Frc@ii
+ \def\MFP@z@Frc@i {0}\def\MFP@z@Frc@ii {0}%
+ \def\MFP@z@Frc@iii{0}\def\MFP@z@Frc@iv {0}%
+ \MFP@tempb\MFP@y@Frc@ii\relax
+ \MFP@multiplyone\MFP@x@Frc@ii\MFP@z@Frc@iv
+ \MFP@multiplyone\MFP@x@Frc@i\MFP@z@Frc@iii
+ \MFP@tempb\MFP@y@Frc@i\relax
+ \MFP@multiplyone\MFP@x@Frc@ii\MFP@z@Frc@iii
+ \MFP@multiplyone\MFP@x@Frc@i\MFP@z@Frc@ii
+ \MFP@carrym\MFP@z@Frc@iv\MFP@z@Frc@iii
+ \MFP@carrym\MFP@z@Frc@iii\MFP@z@Frc@ii
+ \ifnum\MFP@z@Frc@iii<5000 \else
+ \MFP@tempb\MFP@z@Frc@ii
+ \advance\MFP@tempb1
+ \edef\MFP@z@Frc@ii{\number\MFP@tempb}\fi
+ \MFP@carrym\MFP@z@Frc@ii\MFP@z@Frc@i
+ \makeMFP@fourdigits\MFP@z@Frc@ii
+ \makeMFP@fourdigits\MFP@z@Frc@i
+ \def\MFP@z@Int{0}%
+ \edef\MFP@z@Frc{\MFP@z@Frc@i\MFP@z@Frc@ii}%
+ \edef\MFP@z@Sgn{\ifnum\MFP@z@Frc=0 0\else 1\fi}}%
+% \end{macrocode}
+%
+% \subsection{Polar angle}
+%
+% Instead of supplying the arcsine and arccosine functions, we supply the
+% more general angle function. This is a binary operation that accepts
+% the two coordinates of a point and computes its angle in polar
+% coordinates. One then has, for example, $\arctan x =
+% \mathop{\mathrm{angle}}(1,x)$ and $\arccos x = \mathop{\mathrm{angle}}
+% (x, \sqrt{1-x^2})$.
+%
+% We start, as usual, with a few reductions. When the $y$-part is $0$, we
+% immediately return $0$ or $180$. If the $y$-part is negative, we compute
+% the angle for $(x,|y|)$ and negate it. If the $x$-part is negative, we
+% compute the angle for $|x|$ and subtract it from $180$. Finally,
+% reduced to both coordinates positive, if $y>x$ we compute the angle of
+% $(y,x)$ and subtract that from $90$. Ultimately, we apply a power
+% series formula for $\mathop{\mathrm{angle}}(1,y/x)$ and get convergence
+% when the argument is less than $1$, but convergence is poor unless the
+% argument is less than $1/2$. When that is not the case, conceptually, we
+% rotate the picture clockwise by the arctangent of $1/2$, compute the
+% angle of the new point and then add a precomputed value of
+% $\arctan(1/2)$.
+% \begin{macrocode}
+\def\MFP@Rangle{%
+ \ifcase\MFP@y@Sgn\relax
+ \ifcase\MFP@x@Sgn\relax
+ \MFP@warn{Point (0,0) has no angle. Returning 0 anyway}%
+ \MFP@Rzero
+ \or
+ \MFP@Rzero
+ \else
+ \MFP@Rloadz 1{180}0%
+ \fi
+ \@xp\@gobble
+ \or
+ \def\MFP@angle@Sgn{1}\@xp\@firstofone
+ \else
+ \def\MFP@y@Sgn{1}%
+ \def\MFP@angle@Sgn{-1}\@xp\@firstofone
+ \fi
+ {\ifcase\MFP@x@Sgn\relax
+ \MFP@Rloadz1{90}0%
+ \or \MFP@@Rangle
+ \else
+ \def\MFP@x@Sgn{1}\MFP@@Rangle
+ \MFP@Rcopyzy\MFP@Rload x1{180}0\MFP@Rsub
+ \fi
+ \let\MFP@z@Sgn\MFP@angle@Sgn}}%
+\def\MFP@@Rangle{%
+ \MFP@Rcmp
+ \ifMFP@neg
+ \MFP@Rcopy xw\MFP@Rcopy yx\MFP@Rcopy wy%
+ \MFP@@@Rangle
+ \MFP@Rload x1{90}0\MFP@Rcopyzy\MFP@Rsub
+ \else
+ \MFP@@@Rangle
+ \fi}%
+% \end{macrocode}
+%
+% Precisely what we do when we are finally in the case $0<y<x$ is perform
+% a couple of reductions. Ultimately we want to compute the arctan of
+% $z = y/x$. We once again use a power series but, for fast convergence,
+% we require $z$ to be considerably less than $1$. For reasons we discuss
+% later, we won't be able to use the more efficient \cs{MFP@Rsmul} so we
+% want to keep the number of iterations of our power series calculations
+% low.
+%
+% So we start with two iterations of the algorithm used by Knuth: if $y/x
+% > 1/2$ we transform the pair $(x,y)$ to a new one whose angle has been
+% reduced by $\arctan (1/2)$. The new pair is $(x',y') = (2x+y, 2y-x)$.
+% If we still have $y/x > 1/4$, we perform $(x'',y'') = (4x + y, 4y - x)$,
+% which then satisfies $y''/x'' \le 1/4$. When either of these
+% transformations is performed, we add the corresponding angle to the
+% ``angle-so-far'' in register $a$.
+%
+% We could continue this iteration 32 times to get (theoretically) the
+% angle in degrees to $\pm 10^{-8}$. That seems a bit long, plus the
+% accumulation of errors over $32$ iterations could (in the worst case)
+% produce less than $\pm10^{-7}$ accuracy.
+%
+% To get the accuracy we need, we work in ``scaled reals''. That is, we
+% get 10 effective decimal places of accuracy by letting an $x$ in the
+% range $0< x < 100$ stand for $0< x/100 < 1$.
+%
+% Our initial reductions can increase $x$ by a factor of about 13.
+% Moreover, we ultimately need to scale y by 100 when we convert to
+% scaled computations. Thus, if we make sure $x$ is less than
+% $1\,000\,000$, we will prevent overflow in both cases.
+% \begin{macrocode}
+\def\MFP@Rquad{\MFP@Rdbl\MFP@Rcopyzx\MFP@Rdbl}%
+\def\MFP@@@Rangle{%
+ \MFP@Rcopy xs\MFP@Rcopy yt%
+ \ifnum\MFP@x@Int<1000000
+ \else
+ \MFP@RdivC \MFP@Rcopyz s%
+ \MFP@Rcopy tx\MFP@RdivC \MFP@Rcopyz t%
+ \fi
+ \ifnum\MFP@t@Sgn=0 \MFP@Rzero
+ \else
+ \MFP@Rcopy tx\MFP@Rdbl\MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rcmp
+ \ifMFP@pos
+ \MFP@Rsub\MFP@Rcopyz u\MFP@Rcopy sx\MFP@Rdbl
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Radd
+ \MFP@Rcopyz s\MFP@Rcopy ut%
+ \MFP@Rload a1{2656}{50511771}%
+ \else
+ \MFP@Rload a000%
+ \fi
+ \MFP@Rcopy tx\MFP@Rquad\MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rcmp
+ \ifMFP@pos
+ \MFP@Rsub\MFP@Rcopyz u\MFP@Rcopy sx\MFP@Rquad
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Radd
+ \MFP@Rcopyz s\MFP@Rcopy ut%
+ \MFP@Rcopy ax\MFP@Rload y1{1403}{62434679}%
+ \MFP@Radd\MFP@Rcopy za%
+ \fi
+ \MFP@Rcopy tx\MFP@RmulC
+ \MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rdiv
+ \MFP@Rcopyzx\MFP@Ratanc
+ \MFP@Rcopyzx\MFP@Rdeg
+ \MFP@Rcopyzx\MFP@Rcopy ay\MFP@Radd
+ \MFP@Rcopyzx\MFP@RdivC
+ \fi}%
+% \end{macrocode}
+%
+% Here are fast multiplication and division by 100. We need these because
+% we are going to compute the arctangent in radians to ten decimal places.
+% We do this by computing with scaled reals in which, for example, $0.5$
+% is represented by $50.0$. When we do this, multiplication requires a
+% division by 100: $.5\times.5 = .25$ would be computed as $(50\times50) /
+% 100 = 25$.
+% \begin{macrocode}
+\def\MFP@twoofmany#1#2#3\MFP@end{#1#2}%
+\def\MFP@gobbletwo#1#2{}%
+\def\MFP@RmulC{%
+ \edef\MFP@z@Int{\MFP@x@Int\@xp\MFP@twoofmany\MFP@x@Frc\MFP@end}%
+ \edef\MFP@z@Frc{\@xp\MFP@gobbletwo\MFP@x@Frc00}%
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}}%
+\def\MFP@RdivC{%
+ \makeMFP@eightdigits\MFP@x@Int
+ \makeMFP@eightdigits\MFP@x@Frc
+ \@XP\MFP@@RdivC\@xp\MFP@x@Int\MFP@x@Frc\MFP@end}%
+\def\MFP@@RdivC#1#2#3#4#5#6{%
+ \edef\MFP@z@Int{\number#1#2#3#4#5#6}%
+ \MFP@@@RdivC}%
+\def\MFP@@@RdivC#1#2#3#4#5#6#7#8#9\MFP@end{%
+ \MFP@tempa#1#2#3#4#5#6#7#8\relax
+ \ifnum#9>49 \advance\MFP@tempa1 \fi
+ \edef\MFP@z@Frc{\number\MFP@tempa}%
+ \makeMFP@eightdigits\MFP@z@Frc
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}%
+ \ifnum\MFP@tempa=0
+ \ifnum\MFP@z@Int=0 \def\MFP@z@Sgn{0}\fi
+ \fi}%
+% \end{macrocode}
+%
+% Finally, we compute the arctan of a scaled real producing a result
+% as a scaled number (i..e., as ``centiradians''---$100$ times the number
+% of radians) using a power series. Since that number could be
+% around $0.25$ (represented by $25.0$), we have to sum to at least its
+% $15$th power ($4^{-15}/15 \approx .6\times 10^{-10}$ and the next term
+% in the series is effectively $0$). Fortunately, the power series has
+% only odd terms, so there are only eight terms we actually need to calculate.
+% The calculation proceeds much like the one for the sine, starting with
+% the sum
+% $$
+% x\left(1 - \frac{u}{3} + \frac{u^2}{5} - \frac{u^3}{7} + \cdots
+% - \frac{u^7}{15}\right),
+% $$
+% where $u = x^2$.
+%
+% We start with the common iterated code. It assumes a scaled value in $x$
+% to be multiplied by the saved (scaled) value of $x^2$ (in register $u$)
+% and by a coefficient (supplied in separate integer and fractional
+% parts). It ends with the new value in $x$.
+% \begin{macrocode}
+\def\MFP@scaledmul{\MFP@Rmul\MFP@Rcopyzx\MFP@RdivC}%
+\def\MFP@atan@iter#1#2{%
+ \MFP@Rcopy uy\MFP@scaledmul
+ \MFP@Rcopyzx\MFP@Rload y1{#1}{#2}\MFP@scaledmul
+ \MFP@Rcopyzy\MFP@Rload x1{100}{00000000}%
+ \MFP@Rsub\MFP@Rcopyzx}%
+\def\MFP@Ratanc{%
+ \MFP@Rcopy xs\MFP@Rcopy xy\MFP@scaledmul
+ \ifnum \MFP@z@Sgn=0
+ \MFP@Rcopy sz%
+ \else
+ \MFP@Rcopyz u\MFP@Rcopyzx
+ \MFP@Rload y1{86}{66666667}\MFP@scaledmul
+ \MFP@Rcopyzy\MFP@Rload x1{100}{00000000}\MFP@Rsub\MFP@Rcopyzx
+ \MFP@atan@iter{84}{61538462}\MFP@atan@iter{81}{81818182}%
+ \MFP@atan@iter{77}{77777778}\MFP@atan@iter{71}{42857143}%
+ \MFP@atan@iter{60}{00000000}\MFP@atan@iter{33}{33333333}%
+ \MFP@Rcopy sy\MFP@scaledmul
+ \fi}%
+% \end{macrocode}
+%
+% \subsection{Logarithms}
+%
+% Now for logarithms. We are going to compute both common logarithms
+% (base $10$) and natural logarithms (base $e$). The first step of the
+% calculation is be essentially trivial and works with base 10: to
+% get the integer part of the log for numbers with positive integer part,
+% count the digits in the integer part and subtract $1$. For numbers less
+% than one, count the number of zeros at the beginning of the fractional
+% part and add $1$ (subtract this from the result of the second part). This
+% reduces the problem to numbers $1 \le x < 10$. A few divisions (when
+% necessary) reduce to the case where $x = 1 + u$ with $u$ small enough
+% that the power series for $\log (1 + u)$ can be computed accurately in
+% an acceptable number of of terms. Then we proceed as in the code for
+% sine.
+%
+% The power series produces a logarithm in base $e$ so we ultimately get
+% the answer in two parts, with the parts calculated for different bases.
+% The last step for the common log is to multiply the second part by a
+% conversion factor and add the first to it. For natural log, convert the
+% first and add the second. Which one is to be returned is passed as a
+% boolean.
+%
+% We keep the value-so-far in register $s$ and the modified
+% $x$-value in register $t$.
+% \begin{macrocode}
+\newif\ifMFP@natural
+\def\MFP@Rlog{\MFP@naturalfalse\MFP@Rlog@}%
+\def\MFP@Rln{\MFP@naturaltrue\MFP@Rlog@}%
+\def\MFP@Rlog@{%
+ \ifnum\MFP@x@Sgn=0
+ \MFP@logofzero@err
+ \MFP@Rloadz{-1}\LogOfZeroInt\LogOfZeroFrac
+ \else
+ \ifnum \MFP@x@Sgn<0
+ \MFP@warn{The logarithm of a negative number is complex.
+ \MFP@msgbreak Only the real part will be computed}%
+ \def\MFP@x@Sgn{1}%
+ \fi
+ \MFP@Rload s000%
+% \end{macrocode}
+%
+% If the integer part is $0$, the fractional part is not. Save the
+% number of places that will be shifted in \cs{MFP@tempa}. We use
+% \cs{number} to strip the leading zeros and (essentially) we count
+% the number of digits that remain. Then we shift left, putting the first
+% digit into the integer part of \reg{s} and the rest into the
+% fractional part.
+% \begin{macrocode}
+ \ifnum \MFP@x@Int=0
+ \edef\MFP@x@Tmp{\number\MFP@x@Frc}%
+ \MFP@tempa=\MFP@numshiftL\MFP@x@Tmp\relax
+ \def\MFP@s@Sgn{-1}%
+ \edef\MFP@t@Int{\@xp\MFP@oneofmany\MFP@x@Tmp\MFP@end}%
+ \edef\MFP@t@Frc{\@xp\@gobble\MFP@x@Tmp0}%
+ \MFP@padtoeight\MFP@t@Frc
+ \else
+% \end{macrocode}
+% When the integer part is not $0$, we get the number of digits to
+% shift again in \cs{MFP@tempa}. It will be one less than the number of
+% integer digits.
+% \begin{macrocode}
+ \MFP@tempa\MFP@numshiftR\MFP@x@Int
+ \edef\MFP@x@Tmp{\MFP@x@Int\MFP@x@Frc}%
+ \ifnum\MFP@tempa>0 \def\MFP@s@Sgn{1}\fi
+ \edef\MFP@t@Int{\@xp\MFP@oneofmany\MFP@x@Tmp\MFP@end}%
+ \edef\MFP@x@Tmp{\@xp\@gobble\MFP@x@Tmp}%
+ \edef\MFP@t@Frc{\@xp\MFP@eightofmany\MFP@x@Tmp\MFP@end}%
+ \fi
+% \end{macrocode}
+%
+% Now the integer part of $\log_{10} x$ is known. We save it in $s$.
+% Also set the sign of the reduced argument (positive). Then call
+% \cs{MFP@Rlog@reduce}, which reduces $x$ to less than $1.161\,$ while
+% possibly increasing $s$. For the natural log, we convert the value in
+% $s$.
+%
+% If the reduced $x$ is $1$, return the value in $s$, otherwise call the
+% power series program (discarding the integer part of $t$, which should
+% be a $1$). Finally, convert the returned result if necessary and add
+% register $s$ to it.
+% \begin{macrocode}
+ \edef\MFP@s@Int{\number\MFP@tempa}%
+ \def\MFP@t@Sgn{1}%
+ \MFP@Rlog@reduce
+ \ifMFP@natural \MFP@Rcopy sx\MFP@RbaseE \MFP@Rcopy zs\fi
+ \ifnum\MFP@t@Frc=0
+ \MFP@Rcopy sz%
+ \else
+ \def\MFP@t@Int{0}\MFP@Rlog@prog
+ \ifMFP@natural\else \MFP@Rcopyzx \MFP@RbaseX \fi
+ \MFP@Rcopy sy\MFP@Rcopyzx\MFP@Radd
+ \fi
+ \fi}%
+% \end{macrocode}
+%
+% We determine the size of a right shift by lining up the digits in
+% the integer part, followed by the possible numbers, and picking out the
+% ninth argument. Similarly, to get a left shift we line up the digits
+% of the fractional part (minus the leading zeros) followed by the
+% possible numbers, and again picking the ninth.
+% \begin{macrocode}
+\def\MFP@numshiftR#1{\@xp\MFP@ninthofmany#176543210\MFP@end}%
+\def\MFP@numshiftL#1{\@xp\MFP@ninthofmany#112345678\MFP@end}%
+% \end{macrocode}
+%
+% In \cs{MFP@Rlog@reduce} we divide by the square root of 10 if the number
+% is significantly larger than that (adding $.5$ to value-so-far). We
+% repeat with the 4th, 8th and 16th roots. It seems that this could be
+% where errors can accumulate, so the divisions are done with double
+% precision multiplication and $x$ is scaled by 100. Our check whether
+% $x > \sqrt{10}$ is rather rough: comparing the first three digits only,
+% but even in the worst case, the final $x$ is less than $1.1605$, so at
+% most $0.161$ is fed to the power series.
+% \begin{macrocode}
+\def\MFP@Rlog@reduce{%
+ \MFP@Rcopy tx\MFP@RmulC\MFP@Rcopyz t%
+ \MFP@reduceonce {316}{31622776}{60168379}{50000000}%
+ \MFP@reduceonce {177}{56234132}{51903491}{25000000}%
+ \MFP@reduceonce {133}{74989420}{93324558}{12500000}%
+ \MFP@reduceonce {115}{86596432}{33600654}{06250000}%
+ \MFP@Rcopy tx\MFP@RdivC\MFP@Rcopyz t}%
+\def\MFP@reduceonce#1#2#3#4{%
+ \ifnum\MFP@t@Int>#1\relax
+ \MFP@Rcopy tx%
+ \MFP@DPmul 0{#2}{#3}\MFP@Rcopyz t%
+ \MFP@Rcopy sx\MFP@Rload y10{#4}\MFP@Radd
+ \MFP@Rcopyz s%
+ \fi}%
+% \end{macrocode}
+%
+% Now we have a value for $t$ of the form $1 + u$ with $0\le u < 0.161$.
+% We will use the formula
+% $$
+% \ln (1 + u) = \sum_{n=1}^\infty (-1)^{n-1} \frac{u^n}{n}.
+% $$
+% We only need to carry it far enough to assure that the remaining terms
+% would be zero in our finite resolution arithmetic, that is
+% $(.161)^k/k < .5\times 10^{-8}$. This is satisfied by $k=10$.
+% So we carry the sum to 9 places.
+%
+% Again, we compute this by
+% $$
+% u(1-au(1-bu(1-cu(1-du(1-eu(1-fu(1-gu(1-hu))))))))
+% $$
+% where $a= 1/2$, $b = 2/3$,\dots, $g=7/8$, and $h=8/9$
+% This arrangement allows us to reuse \cs{MFP@com@iter}.
+% \begin{macrocode}
+\def\MFP@Rlog@prog{%
+ \MFP@Rcopy tx\MFP@Rload y10{88888889}\MFP@Rsmul
+ \MFP@com@iter{87500000}\MFP@com@iter{85714286}\MFP@com@iter{83333333}%
+ \MFP@com@iter{80000000}\MFP@com@iter{75000000}\MFP@com@iter{66666667}%
+ \MFP@com@iter{50000000}\MFP@flipz\MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul}%
+% \end{macrocode}
+%
+% \subsection{Powers}
+%
+% With the exponential function we immediately return $1$ if $x=0$. We
+% call two separate handlers for positive and negative $x$. This is
+% because the issues are different between positive and negative
+% exponents.
+% \begin{macrocode}
+\def\MFP@Rexp{%
+ \ifcase\MFP@x@Sgn\relax
+ \MFP@Rloadz 110%
+ \or
+ \MFP@Rexp@pos
+ \else
+ \def\MFP@x@Sgn{1}%
+ \MFP@Rexp@neg
+ \fi}%
+% \end{macrocode}
+%
+% One issue for positive exponents is overflow, so we issue an error
+% message for that case. The largest mumber that will not produce
+% overflow is $18.42068074$ so we first compare to that; if larger,
+% issue the error message and return $99999999.99999999$.
+%
+% We compute the integer power first, using an \cs{ifcase}. Because there
+% are only 19 cases to consider a table lookup is faster than
+% multiplications.
+%
+% Then, we examine the first digit $d$ after the decimal and compute
+% $e^{0.d}$, again by cases. This is multiplied by the integer power
+% previously found. What remains is the rest of the fractional part of
+% $x$, which is strictly less than $0.1$. The exponential of this is
+% computed using the first several terms of the power series for $e^x$.
+% \begin{macrocode}
+\def\MFP@Rexp@pos{%
+ \MFP@Rload y1{18}{42068074}\MFP@Rcmp
+ \ifMFP@pos
+ \MFP@expoverflow@err
+ \MFP@Rloadz 1\MaxRealInt\MaxRealFrac
+ \else
+ \MFP@tempa\MFP@x@Int
+ \edef\MFP@powerof@e{%
+ 1\ifcase\MFP@tempa
+ 10\or
+ 2{71828183}\or
+ 7{38905610}\or
+ {20}{08553692}\or
+ {54}{59815003}\or
+ {148}{41315910}\or
+ {403}{42879349}\or
+ {1096}{63315843}\or
+ {2980}{95798704}\or
+ {8103}{08392758}\or
+ {22026}{46579481}\or
+ {59874}{14171520}\or
+ {162754}{79141900}\or
+ {442413}{39200892}\or
+ {1202604}{28416478}\or
+ {3269017}{37247211}\or
+ {8886110}{52050787}\or
+ {24154952}{75357530}\or
+ {65659969}{13733051}\else
+ {\MaxRealInt}{\MaxRealFrac}\fi}%
+ \@xp\MFP@Rloadz\MFP@powerof@e
+ \ifnum\MFP@x@Frc=0
+ \else
+ \MFP@Rcopyz s%
+ \MFP@tempa=\@xp\MFP@oneofmany\MFP@x@Frc\MFP@end
+ \edef\MFP@powerof@e{%
+ y1\ifcase\MFP@tempa
+ 10\or
+ 1{10517092}\or
+ 1{22140276}\or
+ 1{34985881}\or
+ 1{49182470}\or
+ 1{64872127}\or
+ 1{82211880}\or
+ 2{01375271}\or
+ 2{22554093}\or
+ 2{45960311}\else
+ 10\fi}%
+ \edef\MFP@t@Frc{0\@xp\@gobble\MFP@x@Frc}%
+ \MFP@Rcopy sx\@xp\MFP@Rload\MFP@powerof@e\MFP@Rmul
+ \ifnum\MFP@t@Frc=0
+ \else
+ \MFP@Rcopyz s\MFP@Rload t10\MFP@t@Frc
+ \MFP@Rexp@pos@prog
+ \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Rmul
+ \fi
+ \fi
+ \fi}%
+% \end{macrocode}
+%
+% Since the $x$ value is now less than $0.1$, we can get eight places of
+% accuracy with only six terms of the power series. We can also arrange to
+% use the more efficient \cs{MFP@Rsmul} for multiplication.
+%
+% We organize the computation thusly
+% $$
+% 1 + (x + x/2(x + x/3(x + x/4(x + x/5(x + x/6)))))
+% $$
+% We start by loading $x$ (now in register $t$) into register
+% $z$, then repeatedly run \cs{MFP@Rexp@iter} feeding it the
+% successive values of $1/n$. This iterator first multiplies the most
+% recent result (the $z$ register) by $1/n$, then that by $x$ and
+% then adds $x$ to that. The final step is to add $1$.
+% \begin{macrocode}
+\def\MFP@Rexp@pos@prog{%
+ \MFP@Rcopy tz\MFP@Rexp@iter{14285714}\MFP@Rexp@iter{16666667}%
+ \MFP@Rexp@iter{20000000}\MFP@Rexp@iter{25000000}%
+ \MFP@Rexp@iter{33333333}\MFP@Rexp@iter{50000000}\MFP@Rcopyzx
+ \MFP@Rincr}%
+\def\MFP@Rexp@iter#1{%
+ \MFP@Rcopyzx\MFP@Rload y10{#1}\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Radd}%
+% \end{macrocode}
+% It is impossible to get accuracy to the last digit when $e^x$ is large.
+% This is because an absolute error in $x$ converts to a relative error
+% in $e^x$, That is, knowing $x$ only to $10^{-8}$ means $e^x$ is off by
+% (about) $e^x\cdot 10^{-8}$. Roughly speaking, this means only about $8$
+% places of $e^x$ are accurate, so if (for example) the integer part of
+% $e^x$ has six places then only two places after the decimal are
+% significant.
+%
+% \bigskip
+% The first issue with negative exponents is that it doesn't take much to
+% produce a value of $e^{-x}$ that rounds to $0$. Any $x > 19.11382792$. So
+% we start by comparing to that value and simply return zero if $x$ is
+% larger.
+%
+% We perform exactly the same reductions as for positive exponents,
+% handling the integer part and the first decimal separately. Then we call
+% the power series program (not the same).
+% \begin{macrocode}
+\def\MFP@Rexp@neg{%
+ \MFP@Rload y1{19}{11382792}%
+ \MFP@Rcmp
+ \ifMFP@pos
+ \MFP@Rloadz 000%
+ \else
+ \MFP@tempa\MFP@x@Int
+ \edef\MFP@powerof@e{%
+ \ifcase\MFP@tempa
+ 11{0}\or
+ 10{36787944}\or
+ 10{13533528}\or
+ 10{04978707}\or
+ 10{01831564}\or
+ 10{00673795}\or
+ 10{00247875}\or
+ 10{00091188}\or
+ 10{00033546}\or
+ 10{00012341}\or
+ 10{00004540}\or
+ 10{00001670}\or
+ 10{00000614}\or
+ 10{00000226}\or
+ 10{00000083}\or
+ 10{00000031}\or
+ 10{00000011}\or
+ 10{00000004}\or
+ 10{00000002}\or
+ 10{00000001}\else
+ 000\fi}%
+ \@xp\MFP@Rloadz\MFP@powerof@e
+ \ifnum\MFP@x@Frc=0
+ \else
+ \MFP@Rcopyz s%
+ \MFP@tempa=\@xp\MFP@oneofmany\MFP@x@Frc\MFP@end
+ \edef\MFP@powerof@e{%
+ y1\ifcase\MFP@tempa
+ 10\or
+ 0{90483742}\or
+ 0{81873075}\or
+ 0{74081822}\or
+ 0{67032005}\or
+ 0{60653066}\or
+ 0{54881164}\or
+ 0{49658530}\or
+ 0{44932896}\or
+ 0{40656966}\else
+ 10\fi}%
+ \edef\MFP@t@Frc{0\@xp\@gobble\MFP@x@Frc}%
+ \MFP@Rcopy sx\@xp\MFP@Rload\MFP@powerof@e\MFP@Rmul
+ \ifnum\MFP@t@Frc=0
+ \else
+ \MFP@Rcopyz s\MFP@Rload t10\MFP@t@Frc
+ \MFP@Rexp@neg@prog
+ \MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rmul
+ \fi
+ \fi
+ \fi}%
+% \end{macrocode}
+%
+% Since $x$ is now positive we calculate $e^{-x}$. Again we need only up
+% to the 6th power, organized as follows
+% $$
+% 1 - x(1 - x/2(1 - x/3(1 - x/4(1 - x/5(1 - x/6)))))
+% $$
+% Since this has exactly the same form as the the power series calculation
+% for $\log$ and $\sin$, we can reuse the code in \cs{MFP@com@iter}. We
+% end with the final multiplication by $x$ and the subtraction from 1
+% rather than call \cs{MFP@com@iter} with a useless multiplication by $1$.
+% \begin{macrocode}
+\def\MFP@Rexp@neg@prog{%
+ \MFP@Rcopy tx\MFP@Rload y10{14285712}\MFP@Rsmul
+ \MFP@com@iter{16666667}\MFP@com@iter{20000000}%
+ \MFP@com@iter{25000000}\MFP@com@iter{33333333}%
+ \MFP@com@iter{50000000}\MFP@flipz\MFP@Rcopyzx
+ \MFP@Rcopy ty\MFP@Rsmul\MFP@flipz}%
+% \end{macrocode}
+%
+% The most efficient way to take an integer power of a number $x$ is to
+% scan the binary code for the exponent. Each digit $1$ in this code
+% corresponds to a $2^k$ power of $x$, which can be computed by repeatedly
+% squaring $x$. These \emph{dyadic} powers are mutiplied together. We can
+% convert this idea to a simple loop illustrated by this example of
+% finding $x^{13}$ ($13 = 1101$ in base $2$). Here $p$ holds the current
+% product and $q$ holds the current dyadic power of $x$, initialized with
+% $p=1$ and $q=x$:
+% \begin{enumerate}
+% \item Rightmost digit 1: update $p\leftarrow pq = x$ and $q\leftarrow
+% q^2 = x^2$.
+% \item Next digit 0: Just update $q\leftarrow q^2 = x^4$.
+% \item Next digit 1: update $p \leftarrow pq = x^5$ and $q\leftarrow
+% q^2 = x^8$.
+% \item Next digit 1: update $p \leftarrow pq = x^{13}$, detect that we
+% are at the end and skip the update of $q$. Return $p$.
+% \end{enumerate}
+% Of course, this requires the binary digits of the exponent $n$. But the
+% rightmost digit of $n$ is $1$ if and only if $n$ is odd, and we can
+% examine each digit in turn if we divide $n$ by $2$ (discarding the
+% remainder) at each stage. We detect the end when $n$ is reduced to $1$.
+%
+% Accuracy is partly a function of the number of multiplications.
+% The above scheme requires at most $\lfloor\log_2 n\rfloor$ squarings
+% and at most $\lceil \log_2 n \rceil$ multiplications for $x^n$, while
+% directly multiplying $x\cdot x \cdots x$ would require $n-1$
+% multiplications.
+%
+% I have tested with an exponents around $8000$, which has 13 binary
+% digits. Each squaring could double the relative error. For that
+% large a power, the base has to be near 1 to avoid overflow or underflow.
+% So the relative error is about $.5(10)^{-8}$. Doubling that 12 times
+% would increase it to about $.00004$, and the result could have as little
+% as 4 or 5 significant figures. In these tests, the results were actually
+% accurate to 5 or 6 significant figures, starting with 8 figures. Raising
+% to this power takes only about $25$ times as long as a single
+% multiplication (rather than $7999$ times).
+%
+% For negative powers we can either find the positive power of $x$ and
+% take its reciprocal or take the reciprocal of $x$ and find its positive
+% power. We do the second so that overflow can be detected in
+% \cs{MFP@@Rpow}.
+% \begin{macrocode}
+\def\MFP@Rpow{%
+ \ifnum\MFP@y@Frc>0
+ \MFP@warn{The "pow" function requires an integer power.
+ \MFP@msgbreak The fractional part will be ignored}%
+ \fi
+ \MFP@loopctr=\MFP@y@Int\relax
+ \ifnum\MFP@loopctr=0
+ \MFP@Rloadz 110%
+ \else
+ \ifnum\MFP@x@Sgn=0
+ \ifnum\MFP@y@Sgn>0
+ \MFP@Rloadz 000%
+ \else
+ \MFP@badpower@err
+ \MFP@Rloadz 1\xOverZeroInt\xOverZeroFrac
+ \fi
+ \else
+ \ifnum\MFP@x@Sgn>0
+ \def\MFP@power@Sgn{1}%
+ \else
+ \edef\MFP@power@Sgn{\ifodd\MFP@loopctr -\fi 1}%
+ \fi
+ \ifnum\MFP@y@Sgn<0 \MFP@Rinv \MFP@Rcopyzx\fi
+ \ifnum\MFP@loopctr=1
+ \MFP@Rloadz \MFP@power@Sgn\MFP@x@Int\MFP@x@Frc
+ \else
+ \MFP@@Rpow
+ \fi
+ \fi
+ \fi}%
+% \end{macrocode}
+%
+% This implements the algorithm discussed above. We save $x$ in register
+% $q$, initialize the starting value of $1$ in \reg{p} and then
+% run the loop. If the binary digit just read is a 1 (i.e., \cs{ifodd} is
+% true), it multiplies $p$ and $q$. It also saves the last product (copies
+% \reg{z} to \reg{p}). This need not be done on the last iteration,
+% but must not be moved out of the \cs{ifodd} conditional because
+% intervening computations modify $z$. If there are more iterations to do
+% (i.e., the \cs{ifnum} is true), this squares $q$ and reduces the
+% counter. Note that the exponents $0$ and $1$ do not occur since we have
+% handled them separately.
+%
+% In case of overflow (either the multiplication or the squaring) we
+% break the loop and return $\pm\infty$.
+% \begin{macrocode}
+\def\MFP@@Rpow{%
+ \MFP@Rcopy xq%
+ \MFP@Rload p110%
+ \MFP@Rpow@loop}%
+\def\MFP@Rpow@loop{%
+ \ifodd\MFP@loopctr
+ \MFP@Rcopy px\MFP@Rcopy qy\MFP@Rmul
+ \ifnum \MFP@z@Ovr>0 \MFP@handle@expoverflow
+ \else
+ \ifnum\MFP@loopctr>1 \MFP@Rcopyz p\fi
+ \fi
+ \fi
+ \ifnum\MFP@loopctr>1
+ \MFP@Rcopy qx\MFP@Rsq
+ \ifnum \MFP@z@Ovr>0 \MFP@handle@expoverflow
+ \else
+ \MFP@Rcopyz q%
+ \divide\MFP@loopctr 2
+ \@XP\MFP@Rpow@loop
+ \fi
+ \fi}%
+\def\MFP@handle@expoverflow{%
+ \MFP@expoverflow@err
+ \MFP@loopctr=0
+ \MFP@Rloadz\MFP@power@Sgn\MaxRealInt\MaxRealFrac}%
+% \end{macrocode}
+%
+% \subsection{The square root}
+%
+% One can combine logarithms and exponentials to get any power: to get
+% $x^y$, compute $e^{y\ln x}$. This has the disadvantage that it doesn't
+% work if $x$ is negative. Most powers of negative numbers are not
+% defined, but certainly integer powers are. Thus we have defined
+% \cs{MFPpow} and \cs{Rpow} for that case.
+%
+% If we enforce a positive $x$, then $y$ can have any value. However,
+% the computation of $e^{.5\ln x}$ cannot give a result as good as one can
+% get from a special purpose algorithm for the square root. For example,
+% the inaccuracies in computing $\ln x$ will make $e^{.5\ln 9}$ inexact,
+% while the square root function we implement below will produce exactly
+% $\sqrt{9} = 3$. In fact, if a square root can be expressed exactly
+% within our 8-digit precision, our code will find it.
+%
+% For the square root we return zero if $x$ is not positive. If the integer
+% part of $x$ is $0$, we copy the fractional part to the integer part
+% (that is, we multiply by $10^{8}$, remembering to multiply by $10^{-4}$
+% later). This makes the square root of such numbers rather more
+% accurate. (To get around some other rare but annoying inaccuracies, we
+% go through a similar process when the integer part of $x$ is at most $4$
+% digits, multiplying by $10^4$ before and by $10^{-2}$ after.)
+%
+% We then compute the square root using an algorithm that will
+% be exact whenever possible. We perform one additional processing step.
+% To explain it, note that our algorithm actually produces the largest
+% number $s$ with four digits right of the decimal place that satisfies $s^2
+% \le x$. That is
+% $$
+% s^2 \le x < \left( s + 10^{-4} \right)^2
+% $$
+% From this it follows that $x = (s+\epsilon)^2 = s^2 + 2s\epsilon +
+% \epsilon^2$ with $\epsilon < 10^{-4}$ (and so $\epsilon^2 < 10^{-8}$).
+% We estimate this $\epsilon$ and add that estimate to $s$. The estimate
+% we use is obtained by discarding the very small $\epsilon^2$ and solving
+% for the remaining $\epsilon$ get
+% $$
+% \epsilon \approx \bar\epsilon = \frac{x-s^2}{2s}
+% $$
+% With this value, $s + \bar\epsilon$ misses the exact square root by at
+% most $\epsilon^2/(2s) < .5\cdot 10^{-8}$, because $s \ge 1$.
+% The final result $s + \bar\epsilon$ is equivalent to computing the
+% average of $s$ and $x/s$. This, possibly divided by $10^4$ or $10^2$ is the
+% returned value.
+%
+% By tests, with rare exceptions, our computations produces a result
+% correct in all eight decimal places. In the rare exception, the last
+% place is within $1$ of the correct value.
+% \begin{macrocode}
+\def\MFP@Rsqrt{%
+ \ifcase\MFP@x@Sgn\relax
+ \MFP@Rzero
+ \or
+ \ifnum\MFP@x@Int=0
+ \def\MFP@sqrt@reduce{2}%
+ \edef\MFP@x@Int{\number\MFP@x@Frc}%
+ \edef\MFP@x@Frc{00000000}%
+ \else\ifnum\MFP@x@Int<10000
+ \def\MFP@sqrt@reduce{1}%
+ \edef\MFP@x@Int{\MFP@x@Int\@xp\MFP@fourofmany\MFP@x@Frc\MFP@end}%
+ \edef\MFP@x@Frc{\@xp\MFP@gobblefour\MFP@x@Frc0000}%
+ \else
+ \def\MFP@sqrt@reduce{0}%
+ \fi\fi
+ \MFP@Rcopy xt%
+ \MFP@Isqrt
+ \MFP@Rcopyz s\MFP@Rcopyzy
+ \MFP@Rcopy tx\MFP@Rdiv
+ \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Radd
+ \MFP@Rcopyzx\MFP@Rhalve
+ \ifcase \MFP@sqrt@reduce\relax
+ \or
+ \MFP@Rcopyzx\MFP@Rload y10{01000000}\MFP@Rmul
+ \or
+ \MFP@Rcopyzx\MFP@Rload y10{00010000}\MFP@Rmul
+ \fi
+ \else
+ \MFP@warn{Square root of a negative number. Zero will be returned.}%
+ \MFP@Rzero
+ \fi}%
+\def\MFP@fourofmany#1#2#3#4#5\MFP@end{#1#2#3#4}%
+\def\MFP@gobblefour#1#2#3#4{}%
+% \end{macrocode}
+%
+% There is a rather straightforward pencil and paper algorithm that
+% provides the square root digit by digit, and it produces an exact answer
+% when that is possible. Unfortunately, the decimal version is not easy to
+% code. Fortunately the same algorithm works in any number base and it is
+% rather simple to code the binary version (because we only need to decide
+% at each stage whether the ``next digit'' is $0$ or $1$. This produces a
+% square root in binary digits, from which it is easy to compute the
+% number itself. The result is exact if the answer would be a finite
+% number of binary digits. We apply it to the integer $10^8 x$. While this
+% number is too large for \TeX{} to handle as an integer, it is not that
+% hard to convert it to a string of binary digits stored in a macro.
+%
+% The algorithm simplifies somewhat if we proces a base 4 integer,
+% producing a base 2 result. Also, instead of producing the square root
+% encoded in a string of binary digits, we simply build the numerical
+% result as we discover the binary digits (multiply previous value by two
+% and add the new digit.) Fortunately, the square root of $10^8 x$ (and
+% the temporary scratch registers used in the code) will never exceed
+% \TeX{}'s limit for integers.
+%
+% The macro \cs{MFP@ItoQ} implements the conversion to base-4 digits.
+% The two arguments are the integer and fractional part of $x$. The
+% result is stored in \cs{MFP@ItoQ@Tmp}, which is so far only used by the
+% square root code.
+%
+% The test \cs{ifodd}\cs{MFP@tempb} is used to get the binary digits.
+% Combining two of them yields the quadrenary digits. The
+% \cs{ifodd}\cs{MFP@tempa} tests are there to check whether there
+% will be a remainder after division by $2$, which should then be
+% inserted at the front of \cs{MFP@tempb} before division by $2$. Two
+% divisions by $2$ each iteration amounts to division by $4$. This is slightly
+% more efficient than dividing by $4$ and determining the remainder.
+% \begin{macrocode}
+\def\MFP@ItoQ#1#2{%
+ \MFP@tempa#1\relax\MFP@tempb#2\relax
+ \def\MFP@ItoQ@Tmp{}\MFP@ItoQ@loop}%
+\def\MFP@ItoQ@loop{%
+ \ifodd\MFP@tempb
+ \ifodd\MFP@tempa \advance\MFP@tempb \MFP@ttteight\relax\fi
+ \divide\MFP@tempa2 \divide\MFP@tempb2
+ \edef\MFP@ItoQ@Tmp{\ifodd\MFP@tempb 3\else 1\fi\MFP@ItoQ@Tmp}%
+ \else
+ \ifodd\MFP@tempa \advance\MFP@tempb \MFP@ttteight\relax\fi
+ \divide\MFP@tempa2 \divide\MFP@tempb2
+ \edef\MFP@ItoQ@Tmp{\ifodd\MFP@tempb 2\else 0\fi\MFP@ItoQ@Tmp}%
+ \fi
+ \ifodd\MFP@tempa \advance\MFP@tempb \MFP@ttteight\relax\fi
+ \divide\MFP@tempa 2 \divide\MFP@tempb 2
+ \ifnum\MFP@tempa>0
+ \@xp\MFP@ItoQ@loop
+ \else\ifnum\MFP@tempb>0
+ \@XP\MFP@ItoQ@loop
+ \fi\fi}%
+% \end{macrocode}
+%
+% This integer square root $n$ is $10^4$ times the largest number $y$
+% satisfying $y^2 \le x$ and having at most four decimal places. The rest of
+% the code after the \cs{MFP@Isqrt@loop} is intended to divide $n$
+% (returned in \cs{MFP@tempc}) by $10^4$ in order to get the number $y$
+% itself.
+% \begin{macrocode}
+\def\MFP@Isqrt{%
+ \MFP@ItoQ\MFP@x@Int\MFP@x@Frc
+ \MFP@tempa=0 \MFP@tempb=0 \MFP@tempc=0
+ \expandafter\MFP@Isqrt@loop\MFP@ItoQ@Tmp\MFP@end
+ \MFP@tempa=\MFP@tempc
+ \divide\MFP@tempc\MFP@tttfour
+ \edef\MFP@z@Int{\number\MFP@tempc}%
+ \multiply\MFP@tempc \MFP@tttfour
+ \advance\MFP@tempa -\MFP@tempc
+ \edef\MFP@z@Frc{\number\MFP@tempa}%
+ \makeMFP@fourdigits\MFP@z@Frc
+ \edef\MFP@z@Frc{\MFP@z@Frc0000}%
+ \def\MFP@z@Sgn{1}}%
+% \end{macrocode}
+%
+% The following is a loop that essentially performs a base-2 version of
+% the base-10 algorithm that I learned at age 12 from my father
+% (apparently it was taught in eighth or ninth grade in his day, but not
+% in mine). Seeing it written out, I am surprise at how concise and
+% elegant it is!
+% \begin{macrocode}
+\def\MFP@Isqrt@loop#1{%
+ \ifx\MFP@end #1%
+ \else
+ \multiply\MFP@tempa 2 \multiply\MFP@tempb 4 \multiply\MFP@tempc 2
+ \advance \MFP@tempb#1\relax
+ \ifnum\MFP@tempa<\MFP@tempb
+ \advance\MFP@tempc 1 \advance\MFP@tempa 1
+ \advance\MFP@tempb -\MFP@tempa
+ \advance\MFP@tempa 1
+ \fi
+ \expandafter\MFP@Isqrt@loop
+ \fi}%
+% \end{macrocode}
+%
+%^^A For my own benefit: the above code finds the next binary digit and
+%^^A updates the square root (in \cs{MFP@tempc}) by appending that digit. The
+%^^A new digit is also appended to the end of \cs{MFP@tempa}. This is
+%^^A subtracted from \cs{MFP@tempb}, but only if the last digit is a 1. Then
+%^^A the next quadrenary digit is appended to \cs{MFP@tempb}. Finally, the
+%^^A last binary digit found is added (not appended) to \cs{MFP@tempa}. The
+%^^A ``appending'' of a digit means a multiplication by $2$ (or $4$) and the
+%^^A addition of the digit. We perform such additions only if the digit is a
+%^^A 1, and we determine if the digit is 1 or 0 by the \cs{ifnum} test.
+%
+% \subsection{Random numbers}
+%
+% We borrow the code of \file{random.tex} to generate a random integer in
+% the range $1$ to $2^{31}-2$, inclusive. Mathematically, this works
+% because the modulus $m = 2^{31}-1$ is a prime number, and the
+% multiplicative group of nonzero elements of $\mathbb{Z}_m$ is cyclic.
+% The multiplier chosen (in our cases $16\,807$, $48\,271$, or $69\,621$)
+% has to be a generator of that group.
+%
+% The first step is the code for \cs{nextrandom} from \file{random.tex}.
+% We could omit this if it is already defined, or we could even input
+% \file{random.tex} but, for better control, we define it ourselves with
+% an internal name. This code leaves the next random number in
+% \cs{MFP@randseed}. The initial seed is calculated from the time and
+% date if it was not positive
+% \begin{macrocode}
+\newcount\MFP@randseed % the random number (and starting seed)
+\def\MFP@nextrand{\begingroup
+ \ifnum\MFP@randseed<1
+ \global\MFP@randseed\time
+ \global\multiply\MFP@randseed388 \global\advance\MFP@randseed\year
+ \global\multiply\MFP@randseed31 \global\advance\MFP@randseed\day
+ \global\multiply\MFP@randseed97 \global\advance\MFP@randseed\month
+ \MFP@nextrand \MFP@nextrand \MFP@nextrand
+ \fi
+ \MFP@tempa\MFP@randseed
+ \divide\MFP@tempa \MFP@rand@q % modulus = m*q + r
+ \MFP@tempb\MFP@tempa
+ \multiply\MFP@tempa \MFP@rand@q
+ \global\advance\MFP@randseed-\MFP@tempa % seed mod q
+ \global\multiply\MFP@randseed \MFP@rand@m
+ \multiply\MFP@tempb \MFP@rand@r
+ \global\advance\MFP@randseed-\MFP@tempb
+ \ifnum\MFP@randseed<\z@ \global\advance\MFP@randseed "7FFFFFFF\relax\fi
+ \endgroup}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPrandgenA}\DescribeMacro{\MFPrandgenB}
+% \DescribeMacro{\MFPrandgenC}
+% We have paametrized \cs{MFP@nextrand} so that any suitable multiplier
+% can be used. The following commands each select one of the three
+% multipliers that we provide, plus precomputed values for the quotient
+% and remainder. We default to generator ``A''.
+% \begin{macrocode}
+\def\MFPrandgenA{\def\MFP@rand@m{16807 }\def\MFP@rand@q{127773 }%
+ \def\MFP@rand@r{2836 }}%
+\def\MFPrandgenB{\def\MFP@rand@m{48271 }\def\MFP@rand@q{44488 }%
+ \def\MFP@rand@r{3399 }}%
+\def\MFPrandgenC{\def\MFP@rand@m{69621 }\def\MFP@rand@q{30845 }%
+ \def\MFP@rand@r{23902 }}%
+\MFPrandgenA
+% \end{macrocode}
+%
+% The command \verb$\MFPranr{$\meta{x}\verb$}\X$ will take a parameter $x$
+% and define \cs{X} to contain a (pseudo)random real number in the
+% interval $[0,x]$. Theoretically, the number should lie in $[0,x)$, but
+% rounding will make $x$ itself a possible value. Similarly, \cs{Rrand}
+% will replace the $x$ on top of the stack with this random value. To get
+% the result, we call \cs{MFP@getrand} twice to produce two random
+% integers in the range $[0,99999999]$ and assemble them into a double
+% precision multiplier less than $1$. Then we multiply $x$ by that with
+% our \cs{MDP@DPmul}.
+%
+% The test at the end of \cs{MFP@getrand} fails only about 1 time in 50,
+% so the odds are vanishingly small that more than a few tries are needed.
+% \begin{macrocode}
+\def\MFP@getrand{% leaves result in \MFP@tempa
+ \MFP@nextrand
+ \MFP@tempa\MFP@randseed
+ \advance\MFP@tempa-1
+ \divide\MFP@tempa 21 % (2^31-3)= 100000000*21 + r
+ \ifnum \MFP@ttteight> \MFP@tempa
+ \else \@xp\MFP@getrand\fi}%
+\def\MFP@Rrand{%
+ \MFP@getrand \edef\MFP@a@Tmp{\number\MFP@tempa}%
+ \MFP@getrand \edef\MFP@b@Tmp{\number\MFP@tempa}%
+ \MFP@DPmul0\MFP@a@Tmp\MFP@b@Tmp}%
+% \end{macrocode}
+%
+% \DescribeMacro{\MFPsetseed}
+% Finally, a user-level command to set the seed value.
+% \begin{macrocode}
+\def\MFPsetseed#1{\global\MFP@randseed #1\relax}%
+\MFP@xfinish
+%</extra>
+% \end{macrocode}
+%\Finale
+%
diff --git a/macros/generic/minifp/minifp.ins b/macros/generic/minifp/minifp.ins
new file mode 100644
index 0000000000..a3e0d22d5d
--- /dev/null
+++ b/macros/generic/minifp/minifp.ins
@@ -0,0 +1,51 @@
+\input docstrip
+\keepsilent
+\preamble
+
+-------------------------------------------------------------------
+
+Copyright 2008--2010, Daniel H. Luecking
+
+Minifp may be distributed and/or modified under the conditions of the
+LaTeX Project Public License, either version 1.3b of this license or (at
+your option) any later version. The latest version of this license is in
+ <http://www.latex-project.org/lppl.txt>
+and version 1.3c or later is part of all distributions of LaTeX version
+2008/12/01 or later.
+
+Minifp has maintenance status "author-maintained". The Current Maintainer
+is Daniel H. Luecking. The Base Interpreters associated
+with minifp are plain TeX and LaTeX.
+
+\endpreamble
+\askforoverwritefalse
+\generate{%
+ \file{minifp.sty}{\from{minifp.dtx}{sty}}%
+ \file{mfpextra.tex}{\from{minifp.dtx}{extra}}%
+}
+
+\def\sps{\space\space\space\space}
+\def\sJ{^^J\sps}
+\immediate\write16{%
+^^J*******************************************************************
+^^J
+^^J To finish the installation:
+^^J
+^^J -- Copy the file minifp.sty to a location where TeX and LaTeX
+\sJ will find them. For example, in a TDS compliant system,
+\sJ the directory TEXMF/tex/generic/minifp/
+^^J
+^^J -- To obtain the documentation (minifp.pdf) if not provided, run
+\sJ\sps pdflatex minifp.dtx
+\sJ\sps pdflatex minifp.dtx
+\sJ\sps pdflatex minifp.dtx
+\sJ\sps makeindex -s gind.ist minifp.idx
+\sJ\sps pdflatex minifp.dtx
+\sJ and copy minifp.pdf and README wherever you keep documentation
+\sJ (for example, TEXMF/doc/generic/minifp/).
+^^J
+^^J -- Refresh the filename database if your TeX system requires it.
+^^J
+^^J*******************************************************************}
+
+\endbatchfile
diff --git a/macros/generic/misc/CropMarks_pt.tex b/macros/generic/misc/CropMarks_pt.tex
new file mode 100644
index 0000000000..a30808f341
--- /dev/null
+++ b/macros/generic/misc/CropMarks_pt.tex
@@ -0,0 +1,391 @@
+% Self-documenting file
+
+\ifx \Comment \Undefined
+ \long \def \Comment #1\EndComment {}
+\else
+ \ifx \EndComment \Undefined
+ \def \EndComment
+ {\message {Error: \noexpand \EndComment encountered
+ without preceding \noexpand \Comment}}
+ \else %%% both defined; let's hope they're the right definitions!
+ \fi
+\fi
+
+%%% Author: Philip Taylor (RHBNC) <P.Taylor@Rhul.Ac.Uk>
+%%% Cropmarks.TeX V1.4 Copyright (C) Philip Taylor, MCMLXXXXII
+
+\Comment % The Licence
+
+ Unlimited copying and redistribution of this file
+ is permitted so long as the file is not modified
+ in any way.
+
+ Modifications may be made for private purposes (though
+ this is discouraged, as it could result in documents
+ typesetting differently on different systems) but if
+ such modifications are re-distributed, the modified
+ file must not be capable of being confused with the
+ original. In particular, this means
+
+(a) the filename (the portion before the extension, if any)
+ must not match either of the sequences :
+
+ CROPMARKS
+ CROP-MARKS
+
+ regardless of case, and
+
+(b) the file must contain conditions identical to these,
+ except that the modifier/distributor may, if he or she
+ wishes, augment the list of proscribed filenames.
+
+\EndComment
+
+%%% Usage:
+
+%%% \input cropmarks
+%%% \topcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \bottomcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \leftcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \rightcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \lrcropmarkstrue ;;; iff you want alternating left and right cropmarks only
+%%% \rvcropmarkstrue ;;; iff you want recto and verso specified independently
+%%% (in which case the first four variables are two-valued
+%%% as \recto<var> and \verso<var>).
+
+%%% Square brackets indicate optional items, and the <dimen>s are
+%%% respectively (and all measured w.r.t. the origin, which is the
+%%% top left corner of the notional, rather than physical page; the
+%%% exact origin will need to be determined by inspection)
+
+%%% The distance to the centre of the cross;
+%%% The distance which the cross extends beyond the page limits;
+%%% The distance which the cross extends within the page limits.
+
+%%% Any or all can be zero <unit>s. For conventional (exo-) cropmarks, the
+%%% `plus' component indicates the length of the mark, and the `minus' component
+%%% should be omitted or zero. For inverted (endo-) cropmarks, the `plus'
+%%% component should be omitted or zero, and the `minus' component indicates the
+%%% length of the mark. If `plus' or `minus' components are negative, this
+%%% has the effect of a `white cropmark' extending in the reverse direction
+%%% for the specified distance; this may be used to achieve non-touching marks.
+%%% The first and only mandatory component may be also negative, to cope with
+%%% pathological origins.
+
+%
+%%% A test which will allow us to be read regardless of the \catcode of `@'
+%
+
+\newif \ifatletter
+\ifcat @A\atlettertrue \else \catcode `\@ = 11 \atletterfalse \fi
+
+\ifx \c@tcodeminus \undefined \else \message {Warning: previous
+meaning of \string \c@tcodeminus \space lost} \fi \edef
+\c@tcodeminus {\the \catcode `\-} \catcode `\- = 12
+
+%
+\message {CROPMARKS.TEX V1.4 Copyright (C) 05-Mar-1992 13:43:28
+Philip Taylor}
+%
+
+%
+%%% Miscellaneous variables
+%
+\newif \iflrcropmarks \lrcropmarksfalse
+\newif \ifrvcropmarks \rvcropmarksfalse
+\newdimen \cropmarkwidth \cropmarkwidth = 0.4 pt
+\newdimen \t@pshift
+\newdimen \b@ttomshift
+\newdimen \l@ftshift
+\newskip \topcropmark
+\newskip \leftcropmark
+\newskip \rightcropmark
+\newskip \bottomcropmark
+\newskip \rectotopcropmark
+\newskip \rectoleftcropmark
+\newskip \rectorightcropmark
+\newskip \rectobottomcropmark
+\newskip \versotopcropmark
+\newskip \versoleftcropmark
+\newskip \versorightcropmark
+\newskip \versobottomcropmark
+\newskip \m@rkskip
+\newskip \m@rkplus
+\newskip \m@rkminus
+\newbox \p@gebox
+\newbox \cr@pmarkbox
+\newbox \topcr@pmarkbox
+\newbox \bottomcr@pmarkbox
+%
+%%% Extraordinary arcanery, to parse <skip>s into <dimen>s; any better ways ?
+%
+\begingroup
+\catcode `\P = 12 \catcode `\L = 12 \catcode `\U = 12 \catcode `\S =
+12 \catcode `\M = 12 \catcode `\I = 12 \catcode `\N = 12 \catcode
+`\T = 12 \globaldefs = 1 \lowercase
+{%
+\def \p@rseskip #1%
+ {\expandafter \p@rs@skip \the #1 PLUS 0.0PT MINUS 0.0PT \@ndparse #1 }
+\def \p@rs@skip #1 PLUS #2 MINUS #3\@ndparse #4
+ {%
+ \m@rkskip = #1%
+ \m@rkplus = #2%
+ \m@rkminus = #3%
+ \ifdim \m@rkminus = 0.0 pt
+ \expandafter \p@rs@sk@p \the \m@rkskip MINUS 0.0PT \@ndparse
+ \fi
+ }%
+\def \p@rs@sk@p #1MINUS #2\@ndparse {\m@rkskip = #1 \m@rkminus = #2 }
+}
+\endgroup
+%
+%%% Take control of \shipout, to force it to add cropmarks
+%
+\let \ship@ut = \shipout
+\def \shipout {\futurelet \b@x \whichb@x}
+\def \whichb@x
+ {%
+ \ifx \b@x \vbox
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Shipout
+ \else \ifx \b@x \hbox
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Shipout
+ \else \ifx \b@x \box
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Ship@ut
+ \else \ifx \b@x \copy
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Ship@ut
+ \else
+ \def \n@xt {\ship@ut}%
+ \message {Sorry, can't understand
+ what follows \shipout}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \n@xt
+ }
+\def \Shipout {\aftergroup \Ship@ut}
+\def \Ship@ut
+ {%
+ \ifrvcropmarks
+ \ifodd \pageno
+ \topcropmark = \rectotopcropmark
+ \bottomcropmark = \rectobottomcropmark
+ \leftcropmark = \rectoleftcropmark
+ \rightcropmark = \rectorightcropmark
+ \else
+ \topcropmark = \versotopcropmark
+ \bottomcropmark = \versobottomcropmark
+ \leftcropmark = \versoleftcropmark
+ \rightcropmark = \versorightcropmark
+ \fi
+ \fi
+ \setbox \topcr@pmarkbox =
+ \hbox \bgroup
+ \p@rseskip \leftcropmark
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \phantom
+ \else
+ \let \next = \relax
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \kern -\m@rkminus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ \begingroup
+ \p@rseskip \topcropmark
+ \vrule height \m@rkplus
+ depth \m@rkminus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \rlap {\kern -\m@rkplus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \endgroup
+ \else
+ \rlap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \fi
+ }%
+ \hskip \m@rkskip
+ \p@rseskip \rightcropmark
+ \hskip \m@rkskip
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \relax
+ \else
+ \let \next = \phantom
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ \kern -\m@rkplus
+ }%
+ \endgroup
+ \else
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ }%
+ \fi
+ \begingroup
+ \p@rseskip \topcropmark
+ \vrule height \m@rkplus
+ depth \m@rkminus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \kern -\m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ }%%%%%%%% end of parameter to \next
+ \egroup%%%%%%%% end of \bgroup ... \egroup to \setbox ...
+ \ht \topcr@pmarkbox = 0 pt
+ \dp \topcr@pmarkbox = 0 pt
+ \wd \topcr@pmarkbox = \wd \p@gebox
+ \setbox \bottomcr@pmarkbox =
+ \hbox \bgroup
+ \p@rseskip \leftcropmark
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \phantom
+ \else
+ \let \next = \relax
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \kern -\m@rkminus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ \begingroup
+ \p@rseskip \bottomcropmark
+ \vrule height \m@rkminus
+ depth \m@rkplus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \rlap {\kern -\m@rkplus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \endgroup
+ \else
+ \rlap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \fi
+ }%
+ \hskip \m@rkskip
+ \p@rseskip \rightcropmark
+ \hskip \m@rkskip
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \relax
+ \else
+ \let \next = \phantom
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ \kern -\m@rkplus
+ }%
+ \endgroup
+ \else
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ }%
+ \fi
+ \begingroup
+ \p@rseskip \bottomcropmark
+ \vrule height \m@rkminus
+ depth \m@rkplus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \kern -\m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ }%%%%%%%% end of parameter to \next
+ \egroup%%%%%%%% end of \bgroup ... \egroup to \setbox ...
+ \ht \bottomcr@pmarkbox = 0 pt
+ \dp \bottomcr@pmarkbox = 0 pt
+ \wd \bottomcr@pmarkbox = \wd \p@gebox
+ \setbox \cr@pmarkbox = \vbox
+ \bgroup
+ \offinterlineskip
+ \p@rseskip \leftcropmark \l@ftshift = \m@rkskip
+ \p@rseskip \topcropmark \t@pshift = \m@rkskip
+ \p@rseskip \bottomcropmark \b@ttomshift = \m@rkskip
+ \advance \l@ftshift by \m@rkplus
+ \advance \l@ftshift by \cropmarkwidth
+ \vskip -\t@pshift
+ \moveleft \l@ftshift \box \topcr@pmarkbox
+ \vskip +\t@pshift
+ \vskip +\b@ttomshift
+ \moveleft \l@ftshift \box \bottomcr@pmarkbox
+ \vskip -\b@ttomshift
+ \egroup
+ \setbox \p@gebox = \vbox
+ {\offinterlineskip
+ \box \cr@pmarkbox
+ \box \p@gebox}%
+ \ship@ut \box \p@gebox
+ }
+%
+%%% Restore \catcode of `-' & `@'
+%
+
+\catcode `\- = \c@tcodeminus
+\let \c@tcodeminus = \undefined
+\ifatletter \else \catcode `\@ = 12 \fi
+
+%%% All done
diff --git a/macros/generic/misc/anti.tex b/macros/generic/misc/anti.tex
new file mode 100644
index 0000000000..52bf003549
--- /dev/null
+++ b/macros/generic/misc/anti.tex
@@ -0,0 +1,19 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%% CUT HERE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \anti -- Definition.
+% Produce a superscripted antiparticle: #1 with an overbar and a super-
+% script #2. Looks better than \overline{{#1}^{#2}} (bar does not extend over
+% superscript) or {\overline {#1}}^{#2} (superscript does not stick up above
+% bar; in fact, superscript is at same height as for the charge conjugate,
+% {#1}^{#2}). If you want subscripts too, you'll have to modify
+% this definition to take a third argument. Math mode is assumed.
+% Macro by Rich Holmes (rich@suhep.bitnet), 1/88
+%
+\def\anti#1#2{\vbox{\ialign{##\crcr
+ \hrulefill$\smash{\phantom{\scriptstyle#2}}$\crcr % the right length bar
+ \noalign{\kern-1pt\nointerlineskip\vskip 0.25ex} % the right spacing
+ $\hfil{#1}^{#2}\hfil$\crcr}}} % the right text
+%%%%%%%%%%%%%%%%%%%%%%%% CUT HERE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\Kzerobar{\anti{K}{0}}
+\def\Dstarbar{\anti{D}{*}} % et cetera
+%%%%%%%%%%%%%%%%%%%%%%%% CUT HERE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/misc/apldef.tex b/macros/generic/misc/apldef.tex
new file mode 120000
index 0000000000..12ec83dd2f
--- /dev/null
+++ b/macros/generic/misc/apldef.tex
@@ -0,0 +1 @@
+../../../fonts/apl/apldef.tex \ No newline at end of file
diff --git a/macros/generic/misc/arabic.tex b/macros/generic/misc/arabic.tex
new file mode 100644
index 0000000000..acba65e59f
--- /dev/null
+++ b/macros/generic/misc/arabic.tex
@@ -0,0 +1,55 @@
+%--------------------------------------------
+% Ole Michael Selberg, October 5, 1995
+% TeX macros to make a Roman number Arabic
+%
+% Syntax: \arabicnumeral <Roman number >
+%--------------------------------------------
+\catcode`@=11
+\newcount\r@mancount \newcount\current \newcount\previous
+\def\@valueofcurrent{%
+ \ifx\next i\global\current=1 \else
+ \ifx\next v\global\current=5 \else
+ \ifx\next x\global\current=10 \else
+ \ifx\next l\global\current=50 \else
+ \ifx\next c\global\current=100 \else
+ \ifx\next d\global\current=500 \else
+ \ifx\next m\global\current=1000 \else
+ \global\r@mancount=-100000
+ \immediate\write16{Line \the\inputlineno: non-Roman digit!}
+ \fi\fi\fi\fi\fi\fi\fi}
+\def\stop{\stop}
+\def\arabicnumeral #1 {\r@mancount=0 \current=0 \previous=10000
+ \fr@mroman#1\stop}
+\def\fr@mroman {\afterassignment\@testchar\let\next}
+\def\@testchar{%
+ \ifx\next\stop
+ \ifnum\r@mancount<0 (Wrong Roman numeral: ???)
+ \else
+ \the\r@mancount
+ \fi
+ \let\next\relax
+ \else \@valueofcurrent
+ \advance\r@mancount by\current
+ \ifnum\previous<\current
+ \multiply\previous by2
+ \advance\r@mancount by -\previous
+ \fi
+ \let\next\fr@mroman
+ \fi
+ \previous=\current
+ \next}
+\catcode`@=12
+\endinput
+
+
+---------------------------------------------------------------------------
+Ole Michael Selberg,
+Institutt for oesteuropeiske og orientalske studier
+Universitetet i Oslo
+Pb. 1030 Blindern
+N-0315 Oslo
+
+Phone: (47) 22 85 67 94
+Fax: (47) 22 85 41 40
+
+
diff --git a/macros/generic/misc/backgrnd.tex b/macros/generic/misc/backgrnd.tex
new file mode 100644
index 0000000000..165ee69094
--- /dev/null
+++ b/macros/generic/misc/backgrnd.tex
@@ -0,0 +1,319 @@
+%%% backgrnd.sty = background.sty
+%%% Experimental version 24 march 1996
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% This macro file aims at implementing marking of text,
+%%% either by a grey background or by a changeebar
+%%% using TeX's own resources only,
+%%% (i.e., without resorting to any pstricks).
+%%% Grey background uses a shade font defined using MetaFont
+%%% The macros seem to work satisfactory under plain TeX,
+%%% however, I have also tried (rudimentarily) to integrate them with
+%%% LaTeX, too. It seems to work with (simple) LaTeX 2.09, at least.
+%%%
+%%% commands :
+%%% \RuleOn and \RuleOff : changebar
+%%% \RuleON : backs up to mark current line, too
+%%% \RuleStyle { ( dimension ) % width of rule
+%%% % rule offset on pages
+%%% [ # dimension | % with even pagenumbers
+%%% # dimension ] } % with odd pagenumbers
+%%% % # is either < : left margin
+%%% % or > : right margin
+%%% e.g.: default values are set by
+%%% \RuleStyle { (2pt)[<18pt|>18pt] }
+%%%
+%%%
+%%% \ShadeON ( backs up to mark current line, too ) and
+%%% \ShadeOn and \ShadeOff : grey background, requires shade.sty
+%%% therefore, by default,
+ \let\ifUseGrey\iffalse % grey background will not be installed
+%%% - and will be replaced by rules
+%%% if grey background is required then
+%%% remove comment signs %%% from next line :
+%%% \let\ifUseGrey\iftrue
+%%%
+%%% (At present) it is not possible to use both commands
+%%% in the same document !
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Peter Schmitt %%%
+%%% Institut f\"ur Mathematik, Universit\"at Wien %%%
+%%% Strudlhofgasse 4, A-1090 Wien, Austria %%%
+%%% email: schmitt@awirap.bitnet %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\: 11 % make internal macros private
+\countdef\int: 255 % scratch registers
+\dimendef\dim: 0
+\skipdef\skip: 0
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% commands and options %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \RuleOn {\bg:ini \bg:rule
+ \RuleStyle { (2pt)[<18pt|>18pt] }
+ \bg:commands \RuleOn \RuleON \RuleOff
+ \RuleOn
+ }
+\def \RuleStyle #1{\set:hsize #1(\bg:hsize)\\%
+ \set:offsets #1[*|*]\iftrue]\iffalse\\%
+ }
+
+\def \bg:rule {\leaders\vrule width\bg:hsize\vskip}
+\def \bg:empty {\vskip}
+\let \bg:offset \relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% interface tools %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bg:commands #1#2#3{\def #1{\bg:option {\vbox{}\pos:on}}
+ \def #2{\bg:option {\nobreak\vskip-\baselineskip
+ \vbox{}\pos:on
+ \nobreak\vskip\baselineskip }
+ }
+ \def #3{\bg:option {\vbox{}\pos:off}}
+ }
+\def \bg:ini {\output{\bg:output} % should be followed by desired \bg:style
+ \zero:pos
+ \global\let \bg:skip \bg:empty
+ \let \bg:style
+ }
+\def\bg:option #1{\ifvmode #1\else \vadjust{#1}\fi }
+
+\def \set:hsize #1(#2)#3\\{\edef\bg:hsize{#2}}
+\def \set:offsets #1[#2#3|#4#5]#6]#7#8\\{#7
+ \def\bg:shift{}
+ \set:offset #2#3
+ \set:offset #4#5
+ \expandafter \set:shifts \bg:shift
+ \fi }
+\def\set:offset #1#2 {\setbox0\hbox{\dim: #2\bg:offset\xdef\bg:offset{\the\dim:}}
+ \dim:\bg:offset
+ \expandafter\expandafter\expandafter
+ \set:shift \csname bg:#1\endcsname
+ }
+\def\set:shift #1#2{\dim: \bg:offset \advance\dim: #2%
+ \edef\bg:shift {\bg:shift {#1\the\dim:}}
+ }
+\expandafter\def \csname bg:<\endcsname {\moveleft \bg:hsize}
+\expandafter\def \csname bg:>\endcsname {\moveright \hsize}
+\def \set:shifts #1#2{\def\bg:shift{\ifodd\pageno #2\else #1\fi}}
+
+%%% not used :
+\def\bg:err #1{\errmessage {%
+ Warning ! Background mode \noexpand#1 already active ! }
+ }
+%%% saving position without eject yields not always correct result
+%%% \def\bg:on {\switch:to \bg:style } \def\bg:off {\switch:to \bg:empty }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% grey background %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifUseGrey
+
+\def\ShadeOn {\bg:ini \bg:grey
+ \let\bg:shift\relax
+ \let\bg:hsize\hsize
+ \setbox\grey:line
+ \vbox{\shade{\line:{\vphantom{\grey:\char0}\hfil}}}
+ \bg:commands \ShadeOn \ShadeON \ShadeOff
+ \ShadeOn
+ }
+\csname newbox\endcsname\grey:line % allow \newbox in conditional text
+\def\bg:grey {\leaders\copy\grey:line\vskip}
+\let\line:\line
+\input shade
+
+\else
+ \def\ShadeOn{\RuleOn} \def\ShadeOff{\RuleOff} \def\ShadeON{\RuleON}
+ \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% output routine %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ \newbox \bg:page
+ \newdimen \v:size
+ \newskip \v:pos
+ \newcount \true:penalty
+ \chardef \the:page 255
+
+\def\option: #1{\advance\int: -1
+ \edef#1{\penalty\the\int: }
+ \expandafter\def\csname\the\int:\endcsname
+ } \int: -12345
+\def\bg:output{\expandafter\ifx\csname\the\outputpenalty\endcsname\relax
+ \global\true:penalty\outputpenalty
+ \expandafter\bg:pagecontents
+ \else \expandafter\expandafter
+ \csname\the\outputpenalty\endcsname
+ \fi }
+\option: \pos:on {\bg:switch \bg:style }
+\option: \pos:off {\bg:switch \bg:empty }
+\option: \bg:top {\save:pos \add:bg\bg:empty\v:skip{}
+ \repeat:page \unvbox\the:page }
+\option: \bg:bot {\save:pos \repeat:page \unvbox\the:page }
+\option: \fg:end {\save:pos \add:bg\bg:empty{}\v:skip \bg:makepage }
+
+\def \bg:switch #1{\setbox\the:page
+ \vbox{\unvbox\the:page \setbox0\lastbox }
+ \ifdim \pagetotal=\topskip
+ \global\let \bg:skip #1
+ \unvbox\the:page
+ \else \switch:to #1
+ \repeat:page\repeat:inserts \unvbox\the:page
+ \fi
+ }
+\def\switch:to #1{\save:pos
+ \add:bg \bg:skip{}\v:skip
+ \global\let \bg:skip #1}
+\def\bg:pagecontents {\switch:to \bg:skip
+ \setbox\the:page \vbox
+ {\vbox{}\bg:top \unvbox\the:page \bg:bot }
+ \zero:pos \repeat:page
+ \pagecontents \fg:end
+ }
+\def\bg:makepage {\global\v:size\vsize \advance\v:size \dp\the:page
+ \def\pagecontents{%
+ \bg:shift
+ \vbox to0pt{\vbox to\v:size{\unvbox\bg:page}\vss}
+ \unvbox\the:page }
+ \outputpenalty\true:penalty
+ \plainoutput
+ \zero:pos \reset:inserts
+ }
+
+%%%%%%%%%%%%%%%%%
+%%% tools %%%
+%%%%%%%%%%%%%%%%%
+
+\def\repeat:page {\vbox{}\nobreak\kern-\topskip }
+\def\add:bg #1#2#3{\let\bg:vskip #1
+ \global\setbox\bg:page \vbox{#2\unvbox\bg:page#3}
+ }
+
+\newdimen \v:fil
+\newdimen \v:fill
+\newdimen \v:filll
+\def\zero:pos {\global \v:pos 0pt
+ \global \v:fil 0pt
+ \global \v:fill 0pt
+ \global \v:filll 0pt
+ }
+\def\save:pos {\skip: -\v:pos % save -last:pos
+ \global \v:pos \pagetotal
+ \global\advance \v:pos \pagedepth
+ \ifnum \pagedepth=0 \advance\v:pos \dp\the:page \fi
+ \global\advance \v:pos 0ptplus\pagestretch minus\pageshrink
+ \save:skip
+ }
+\def\save:pos {\skip: -\v:pos % save -last:pos
+ \global \v:pos \pagetotal
+ \global\advance \v:pos \pagedepth
+ \ifnum \pagedepth=0 \advance\v:pos \dp\the:page \fi
+ \global\advance \v:pos 0ptplus\pagestretch minus\pageshrink
+ \save:skip
+ \global\skip\ins:size \vsize
+ \global\advance\skip\ins:size -\pagegoal
+ \global\advance\skip\ins:size -\ins:skip
+ }
+\def\save:skip {\advance\skip:\v:pos % v:pos - last:pos
+ \let\bg:vskip\relax
+ \edef\v:skip{\bg:vskip\the\skip:}
+ \fil:skip l \fil:skip ll \fil:skip lll
+ }
+\def\fil:skip #1 {\set:fil {\csname v:fi#1\endcsname}
+ {\csname pagefi#1stretch\endcsname}
+ \edef\v:skip{\v:skip \bg:vskip0ptplus\the:pt \dim: fi#1 }
+ }
+\def\set:fil #1#2{\dim: -#1
+ \advance \dim: #2
+ \global #1 #2
+ }
+\def\the:pt {\expandafter\PT:\the}
+ { \catcode`p 12 \catcode`t 12
+\gdef\PT: #1pt{#1} }% \catcode`p 11 \catcode`t 11
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% insert handling %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\ins:
+\newinsert\ins:size
+\newdimen\ins:skip
+
+\let\do:insert \insert
+\def\inserts:{}
+\def\insert {\afterassignment\adjust:pos\ins:}
+\def\adjust:pos {\csname ins:\the\ins:\endcsname\csname iftrue\endcsname
+ \add:plus \ins: \add:minus \ins:
+ \advance\ins:skip\skip\ins:
+ \let\temp:\relax
+ \edef\inserts:{\inserts: \temp:{\the\ins:}}
+ \fi
+ \global\expandafter\let\csname ins:\the\ins:\endcsname \iffalse
+ \do:insert\ins: }
+\def\repeat:inserts{\def\temp:##1{\do:insert##1{}}\inserts: }
+\def\reset:inserts{%
+ \def\temp: ##1{\global\expandafter\let\csname ins:##1\endcsname \relax }
+ \inserts: \gdef\inserts:{}\global\ins:skip 0pt }
+
+%%% tools for insert handling %%%
+
+ \catcode `L12 \catcode `N12 \catcode `S12 \catcode `U12 \lowercase{
+\def\plus: #1LUS #2 #3\\{#2}
+\def\Plus: #1{\expandafter\plus:\the#1 LUS 0.0pt \\}
+\def\minus: #1NUS #2 #3\\{#2}
+\def\Minus: #1{\expandafter\minus:\the#1 NUS 0.0pt \\}
+ } \catcode `L11 \catcode `N11 \catcode `S11 \catcode `U11
+
+\def\set:int {\afterassignment\set:frac\int: }
+\def\set:frac #1{\afterassignment\csname\count0 }
+\def\adv:pos #1{\global\advance#1\the\int:.\the\count0 pt }
+\def \pt:p {\adv:pos {\v:pos 0ptplus}}
+\def \pt:m {\adv:pos {\v:pos 0ptminus}}
+\def \fil:p {\adv:pos \v:fil }
+\def \fill:p {\adv:pos \v:fill }
+\def\filll:p {\adv:pos \v:filll }
+
+\def\add:plus #1{{\expandafter\set:int \Plus: {\skip#1}:p\endcsname }}
+\def\add:minus #1{{\expandafter\set:int \Minus:{\skip#1}:m\endcsname }}
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+%%% LaTeX extras %%%
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`@ 11
+\ifx \@outputbox\undefined \endinput \catcode`@12 \catcode`: 12 \fi
+
+\newtoks\latex:output \latex:output \output
+\newdimen\v:ht % possibly \textheight could be used
+
+\def\bg:@makecol {\switch:to \bg:skip
+ \setbox\the:page \vbox
+ {\vbox{}\bg:top \unvbox\the:page \bg:bot }
+ \@makecol
+ \global\v:ht\ht\@outputbox \global\v:size\v:ht
+ \global\advance\v:size\dp\@outputbox
+ \zero:pos \outputpenalty\true:penalty
+ \repeat:page \unvbox\@outputbox \fg:end
+ }
+\def\bg:@makepage {\setbox\@outputbox \vbox to \v:ht {%
+ \bg:shift
+ \vbox to0pt{\vbox to\v:size{\unvbox\bg:page}\vss}
+ \unvbox\the:page }
+ \outputpenalty\true:penalty
+ \let\@makecol\relax \the\latex:output
+ \zero:pos \reset:inserts
+ }
+\let \bg:makepage \bg:@makepage
+\let \bg:pagecontents \bg:@makecol
+\def \line: {\hbox to\textwidth}
+\let \pageno \c@page
+
+\catcode`@ 12 \catcode`: 12
+
+\endinput %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% end : background.sty [ 0.3 ] %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/misc/balancedquotes.sty b/macros/generic/misc/balancedquotes.sty
new file mode 100644
index 0000000000..f280fbeba8
--- /dev/null
+++ b/macros/generic/misc/balancedquotes.sty
@@ -0,0 +1,418 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% file name: balancedquotes.sty (for plain TeX and LaTeX)
+%% Ole Michael Selberg, 25.8.1994
+%% E-mail: O.M.Selberg@easteur-orient.uio.no
+%%-------------------------------------------------------------------
+%% Description:
+%% This file contains macros that simplify the management of quotes.
+%% The input:
+%% "...*....*..."
+%% will be typeset as:
+%% <<...<...>...>> (default)
+%%
+%% (or as:
+%% ,,...,...'...''
+%% etc., depending on your choices.).
+%%
+%% TeX keeps track of whether full quotes (written as ") and half
+%% quotes (written as *) are balanced, When a quote has been omitted,
+%% as in:
+%% --- text "text in quotes more text "text in quotes" ---
+%% an error message is written to the screen, and a mark is put in
+%% the margin to the left of the line in which a final full or half
+%% quote followed by a letter was discovered.
+%%
+%% The macros can be used both with plain TeX and LaTeX. You can test
+%% them and learn how to use the commands by running the test file
+%% which is included in this file, after \endinput.
+%% Just copy all the stuff after \endinput to a new file,
+%% which you should name balancedquotestest.tex, and then delete it
+%% from this file.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`\@=11 \catcode`\_=11 \newif\ifapostrophe \newlinechar=`^^J
+%
+\def\definequotes #1#2#3#4{%
+ \def\bquote_char{#1}\def\equote_char{#2}%
+ \def\bhquote_char{#3}\def\ehquote_char{#4}}
+%
+\def\setquotes{\futurelet\test_token\CheckForOptArg}
+\def\CheckForOptArg{\ifx\test_token[
+ \let\next\OptArgPresent
+ \else \let\next\OptArgAbsent \fi \next}
+\def\OptArgPresent[#1]#2{\csname #2#1q\endcsname}
+\def\OptArgAbsent #1{\csname #1q\endcsname}
+ %---------------------------------------
+ % Norwegian:
+ %
+\def\Nq{% Output: <<...<...>...>>
+ \def\bquote_char {\char"13 }\def\equote_char {\char"14 }%
+ \def\bhquote_char {\char"0E}\def\ehquote_char {\char"0F}%
+ }
+\def\NCq{% Output: ,,...,...'...''
+ \def\bquote_char {\char"12 \apostrophe_check}%
+ \def\equote_char {\char"11 }%
+ \def\bhquote_char {\char"0D}\def\ehquote_char {\char"27}%
+ \apostrophetrue}
+\let\NGq=\Nq \let\norwegianquotes=\Nq \let\norwegianguillemetsq=\Nq
+\let\norwegiancommasq=\NCq
+ %-----------------------------------------
+ % German:
+ %
+\def\DGq{% Output: >>...>...<...<<
+ \def\bquote_char {\char"14 }\def\equote_char {\char"13 }%
+ \def\bhquote_char {\char"0F}\def\ehquote_char {\char"0E}%
+ }
+\def\DCq{% Output: ,,...,...`...``
+ \def\bquote_char{\char"12 \apostrophe_check}%
+ \def\equote_char {\char"10 }%
+ \def\bhquote_char {\char"0D}\def\ehquote_char {\char"60}%
+ \apostrophetrue}
+\let\Dq=\DCq \let\germanquotes=\DCq \let\germanguillemetsq=\DGq
+\let\germancommasq=\DCq
+ %------------------------------------------
+ % French:
+ %
+\def\Fq{% Output: <<...<<...>>...>>
+ \def\bquote_char {\char"13\ }%
+ \def\equote_char {\thinspace\char"14 }%
+ \def\bhquote_char {\char"13\thinspace }%
+ \def\ehquote_char { \char"14 }%
+ }
+\def\FCq{\message{French doesn't use comma quotes!
+ I shall choose guillemets instead.}}
+\let\frenchquotes=\Fq \let\FGq=\Fq \let\frenchguillemetsq=\Fq
+\let\frenchcommasq=\FCq
+ %------------------------------------------
+ % English:
+ %
+\def\GBq{% Output: `...``...''...'
+ \def\bquote_char {\char"60 }\def\equote_char {\char"27 }%
+ \def\bhquote_char {\char"10 }\def\ehquote_char {\char"11 }%
+ }
+\def\USq{% Output: ``...`...'...''
+ \def\bquote_char {\char"10 }\def\equote_char {\char"11 }%
+ \def\bhquote_char {\char"60 }\def\ehquote_char {\char"27 }%
+ }
+\def\EQM{\message{English doesn't use guillmets!
+ I shall choose normal English quotes instead.}}
+\let\USquotes=\USq \let\GBquotes=\GBq \let\USCq=\USq \let\GBCq=\GBq
+\def\GBguillemetsq{\EQM\GBq} \def\USguillemetsq{\EQM\USq}
+\let\englishquotes=\USq \let\englishcommasq=\USq \let\Eq=\USq \let\ECq=\USq
+\let\englishguillemetsq=\USguillemetsq
+%-------------------------------------------
+\def\bquote{\global\advance\quotecount by1 \bquote_char}%
+\def\equote{\penalty 10000 {\equote_char }\global\advance\quotecount by1 }%
+\def\bhquote{\bhquote_char \global\advance\hquotecount by1 }%
+\def\ehquote{\penalty 10000 \ehquote_char \global\advance\hquotecount by1 }%
+
+\newcount\quoteflag \newcount\quotecount
+\newcount\hquoteflag \newcount\hquotecount
+\def\hex{"} \let\star=*
+\catcode`\"=\active \catcode`\*=\active
+\def"{\begingroup\ifnum\quoteflag=0
+ \aftergroup\bquote\global\quoteflag=1
+ \else \equote\global\quoteflag=0
+ \aftergroup\equote_check \fi \endgroup}
+\def*{\begingroup\ifmmode \else\ifnum\hquoteflag=0 \bhquote\global\hquoteflag=1
+ \else \ehquote\global\hquoteflag=0
+ \aftergroup\ehquote_check \fi \fi \endgroup}
+\def\equote_check{\futurelet\next\equote_test}
+\def\ehquote_check{\futurelet\next\ehquote_test}
+\def\equote_test{\ifcat\noexpand\next a%
+ \immediate\write16{^^J--->> Final full quote followed by a
+ letter!!}\equote_warning\fi}
+\def\ehquote_test{\ifcat\noexpand\next a%
+ \immediate\write16{^^J---> Final half quote followed by a
+ letter!!}\ehquote_warning\fi}
+\def\quotesnumbertest{\ifodd\quotecount\immediate\write16{!! Odd number
+ of full quotes.}\fi
+ \ifodd\hquotecount\immediate\write16{!! Odd number
+ of half quotes.}\fi}
+\def\apostrophe_check{\futurelet\next\apostrophe_test}
+\def\apostrophe_test{\if\next j\thinspace\fi}
+
+\def\l_note{\strut\vadjust{\kern-\dp\strutbox
+ \vtop to 0pt{%
+ \vss\llap{{\box0}\
+ \quad}}
+ \dimen0=-\prevdepth\advance\dimen0by\dp\strutbox
+ \penalty0\kern\dimen0
+}}
+\def\equote_warning{{\setbox0=\hbox{\equote_char\thinspace !\quad}\l_note}}
+\def\ehquote_warning{{\setbox0=\hbox{\ehquote_char\thinspace !\quad}\l_note}}
+%
+%\catcode`\@=12 \catcode`\_=8
+\Nq
+\endinput
+
+% Copy this to a new file:
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% file name: balancedquotestest.tex
+%% Ole Michael Selberg, 25.8.1994
+%% E-mail: O.M.Selberg@easteur-orient.uio.no
+%%-------------------------------------------------------------------
+%% Description:
+%% This file inputs the file balancedquotes.sty and tests
+%% the quote macros defined there.
+%% It works with both plain TeX and LaTeX.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifLaTeX
+ % Is this LaTeX?
+\ifx\protect\undefined \else \LaTeXtrue \fi
+ % We presuppose Cork-encoding:
+\def\"{\accent4}\def\\{$\backslash$}\def\<{$\lbrace$}
+\def\>{$\rbrace$}
+\overfullrule=0pt
+
+
+\ifLaTeX
+ \documentstyle [balancedquotes] {article}
+ \begin{document}
+\else \input balancedquotes.sty
+\fi
+
+\message{^^JType the name of a font with Cork encoding,
+ ^^Je.g. dcr10:}
+\read16 to \dvifontname
+\font\dvifont=\dvifontname at 10pt
+\message{^^J}
+\dvifont
+
+\hsize=10cm
+\hoffset=2cm
+\parindent=0pt
+
+\hyphenation{Af-ten-pos-ten}
+\centerline{Test of {\tt balancedquotes.sty}\hfill
+ Date:\enspace \the\month/\the\day/\the\year}
+
+\vglue 1cm
+%\Nq
+\definequotes{\char19}{\char20}{\char14}{\char15}
+
+\moveleft 10pt\vbox{\bf The command {\tt \\Nq} (\dvifont Norwegian: "...*...*..."):}
+\smallskip
+"Det er sant," sa han, "jeg har nettopp avbestilt *Aftenposten*!"
+
+"Har du det?" svarte hun forbauset. "Hvorfor spurte du ikke meg f{\o}rst?"
+
+\medskip
+{\leftskip20pt
+Equivalent commands:
+\smallskip
+\tt
+\\norwegianquotes ({\dvifont This is the default for Norwegian.})
+
+\\NGq
+
+\\setquotes \<norwegian\>
+
+\\setquotes \<N\>
+
+\\setquotes [guillemets]\<norwegian\>
+
+\\setquotes [G]\<N\>
+
+\\norwegianguillemetsq
+
+\\definequotes \<\\char19\>\<\\char20\>\<\\char14\>\<\\char15\>
+
+}
+
+\bigskip
+
+\setquotes [commas]{norwegian}
+
+
+\moveleft 10pt\vbox{\bf The command {\tt \\NCq} \dvifont (Norwegian: "...*...*..."):}
+\smallskip
+"Det er sant," sa han, "jeg har nettopp avbestilt *Aftenposten*!"
+
+"Har du det?" svarte hun forbauset. "Hvorfor spurte du ikke meg f{\o}rst?"
+\medskip
+
+{\leftskip20pt
+Equivalent commands:
+\tt
+\smallskip
+
+\\setquotes [commas]\<norwegian\>
+
+\\setquotes [C]\<N\>
+
+\\norwegiancommasq
+
+\\definequotes \<\\char18\>\<\\char17\>\<\\char13\>\<\\char39\>
+
+}
+\bigskip
+\Dq
+
+\moveleft 10pt\vbox{\bf The command {\tt \\Dq} \dvifont (German: "...*...*..."):}
+\smallskip
+Goethe schrieb: "Wielands *Oberon* wird als ein Meisterst\"uck angesehen."
+
+\medskip
+{\leftskip20pt
+Equivalent commands:
+\smallskip
+\tt
+
+\\germanquotes ({\dvifont This is the default for German})
+
+\\DCq
+
+\\setquotes [commas]\<german\>
+
+\\setquotes [C]\<D\>
+
+\\germancommasq
+
+\\definequotes \<\\char18\>\<\\char17\>\<\\char13\>\<\\char39\>
+
+}
+
+\bigskip
+\DGq
+
+\moveleft 10pt\vbox{\bf The command {\tt \\DGq} \dvifont (German: "...*...*..."):}
+\smallskip
+Goethe schrieb: "Wielands *Oberon* wird als ein Meisterst\"uck angesehen."
+
+\medskip
+{\leftskip20pt
+Equivalent commands:
+\smallskip
+\tt
+
+\\setquotes [guillemets]\<german\>
+
+\\setquotes [G]\<D\>
+
+\\germanguillmetsq
+
+\\definequotes \<\\char20\>\<\\char19\>\<\\char15\>\<\\char14\>
+
+}
+
+\ifLaTeX \else\filbreak\fi
+
+\USq
+
+\moveleft 10pt\vbox{\bf The command {\tt \\USq} \dvifont (US English: "...*...*..."):}
+\smallskip
+Goethe wrote: "Wieland's *Oberon* is considered a masterpiece."
+
+\medskip
+{\leftskip20pt
+Equivalent commands:
+\smallskip
+\tt
+
+\\setquotes \<US\>
+
+\\setquotes [commas]\<US\>
+
+\\setquotes [C]\<US\>
+
+\\UScommasq
+
+\\definequotes \<\\char16\>\<\\char17\>\<\\char96\>\<\\char39\>
+
+\\setquotes [guillmets]\<US\> {\dvifont etc.\ will generate an error message
+and call} \\USq
+
+}
+
+\bigskip
+\GBq
+
+\moveleft 10pt\vbox{\bf The command {\tt \\GBq} \dvifont (GB English: "...*...*..."):}
+\smallskip
+Goethe wrote: "Wieland's *Oberon* is considered a masterpiece."
+
+\medskip
+{\leftskip20pt
+Equivalent commands:
+\smallskip
+\tt
+
+\\setquotes \<GB\>
+
+\\setquotes [commas]\<GB\>
+
+\\setquotes [C]\<GB\>
+
+\\GBcommasq
+
+\\definequotes \<\\char96\>\<\\char39\>\<\\char16\>\<\\char17\>
+
+\\setquotes [guillmets]\<GB\> {\dvifont etc.\ will generate an error message
+and call} \\GBq
+
+}
+
+
+\bigskip
+\Fq
+
+\moveleft 10pt\vbox{\bf The command {\tt \\Fq} \dvifont (French: "...*...*..."):}
+\smallskip
+On dit couramment {\it nic nie wiem\/} "je ne sais rien".
+
+\medskip
+{\leftskip20pt
+Equivalent commands:
+\smallskip
+\tt
+
+\\frenchquotes {\dvifont This is the default.}
+\\setquotes \<GB\>
+
+\\setquotes [guillemets]\<F\>
+
+\\setquotes [G]\<F\>
+
+\\frenchguillemetsq
+
+\\definequotes \<\\char19\ \>\<\\ \\char20\>\<\\char19\ \>\<\\ \\char20\>
+
+\\setquotes [commas]\<french\> {\dvifont etc.\ will generate an error message
+and call} \\Fq
+
+}
+
+\bigskip
+
+\NCq
+
+\moveleft 10pt\vbox{\bf Test of error detection when quotes are unbalanced:}
+\smallskip
+"Det er sant," sa han, "jeg har nettopp avbestilt *Aftenposten*!"
+
+"Har du det? svarte hun forbauset. "Hvorfor spurte du ikke meg f{\o}rst?"
+
+
+\bigskip
+
+
+\moveleft 10pt\vbox{\bf Test of {\tt \\hex} og {\tt \\star}}
+\smallskip
+The command {\tt \\hex} is used instead of {\tt
+\\char\hex22} whenever {\tt \\char\hex22} does not denote
+a quote sign. For instance, we can write: {\tt
+\\char\hex41} in order to get an `A'. Here we
+test that the macro {\tt \\hex} works as it should: `{\tt
+\\char\\hex4F\\char\\hex4B}'
+is output as `\char\hex4F\char\hex4B'.
+
+\smallskip
+Instead of {\char \hex2A} we write {\tt \\star}.
+
+\def\slutt{\end{document}}
+{\ifLaTeX
+ \aftergroup\slutt
+\fi}
+
+\bye
+
diff --git a/macros/generic/misc/calendarweek.tex b/macros/generic/misc/calendarweek.tex
new file mode 100644
index 0000000000..fb5a42ed7b
--- /dev/null
+++ b/macros/generic/misc/calendarweek.tex
@@ -0,0 +1,35 @@
+%% calendarweek.tex
+%% 2006 (C) Taco Hoekwater, public domain
+%%
+%% Usage:
+%% \calendarweek{30}{12}{2006}
+%%
+%% Watch out: Dec 29 can be week 1 of the next year; and Jan 3 can be
+%% week 53 of the previous year.
+
+\def\Expr#1{\the\numexpr #1\relax}
+
+\def\Modulonumber#1#2{\Expr{#2-((((#2+(#1/2))/#1)-1)*#1)}}
+\def\Divisionnumber#1#2{\Expr{(2*#2-#1)/(2*#1)}}
+
+\def\Mod#1#2{\Modulonumber{\Expr{#2}}{\Expr{#1}}}
+\def\Div#1#2{\Divisionnumber{\Expr{#2}}{\Expr{#1}}}
+
+\def\Jday#1#2#3%
+ {\Expr{#1+\Div{((153*(\Expr{#2+(12*(\Div{14-#2}{12}))-3}))+2)}
+ {5}+365*(\Expr{#3+4800-(\Div{14-#2}{12})})+
+ (\Div{\Expr{#3+4800-(\Div{14-#2}{12})}}{4})-
+ (\Div{\Expr{#3+4800-(\Div{14-#2}{12})}}{100})+
+ (\Div{\Expr{#3+4800-(\Div{14-#2}{12})}}{400})-32045 }}
+
+\def\cwhlp#1#2#3%
+ {\Expr{\Mod {\Mod {\Mod {\Expr
+ {\Jday{#1}{#2}{#3}+31741-\Mod{\Jday{#1}{#2}{#3}}{7}}}%
+ {146097}}{36524}}{1461}}}
+
+\def\calendarweek#1#2#3%
+ {\Expr{\Expr{\Div{\Expr{\Mod{\cwhlp{#1}{#2}{#3}-
+ \Expr{\Div{\cwhlp{#1}{#2}{#3}}{1460}}}{365}+
+ \Expr{\Div{\cwhlp{#1}{#2}{#3}}{1460}}}}{7} +1}}}
+
+\endinput
diff --git a/macros/generic/misc/chessmin.tex b/macros/generic/misc/chessmin.tex
new file mode 100644
index 0000000000..49b03d31b4
--- /dev/null
+++ b/macros/generic/misc/chessmin.tex
@@ -0,0 +1,171 @@
+% These are two TeX macros which may be useful for writing about
+% chess. \bore creates a chess diagram from Forsyth notation, with
+% Z used as a terminator. For example,
+%
+% $$\bore r1bqkbnr pppp1ppp 2n5 1B2p3 4P3 5N2 PPPP1PPP RNBQK2R Z$$
+%
+% shows the Ruy Lopez after white's third move.
+%
+% \VAR (number) (moves separated by spaces) Z may be used to write
+% a variation. The macro inserts the move numbers, starting with
+% (number). For example,
+%
+% Continuing from the diagram above, \VAR 3 \dots{} a6 Ba4 Nf6 O--O
+% Be7 Re1 b5 Bb3 O-O c3 d5 Z is the Marshall gambit.
+%
+% Note the \dots{} to indicate that Black made the first move.
+%
+% The diagrams created by \bore have pieces made up of a small number
+% of rectangles. Much nicer diagrams and more powerful macros were
+% created by Piet Tutelaers, available by anonymous ftp
+% at sol.cs.ruu.nl (131.211.80.5). However, the ones offered here
+% do not require additional fonts, and may be easier to use.
+%
+% I authorize circulation of these macros by ftp sites and similar
+% nonprofit media. Improvements are welcome. An earlier version of
+% the macros (with letters for pieces) was done several years ago,
+% with substantial modifications by Steve Cochran.
+%
+% Charles Blair (ceblair@ux1.cso.uiuc.edu)
+% macros start below--- you may cut here --------------------------
+%
+% \fun is the fundamental length unit for the diagrams. If you
+% replace 1.2pt by something else, the scale is changed.
+% The box rf is not used, except to provide something with which to
+% refer to \fun.
+%
+\newdimen\fun \dimen\fun=1.2pt
+\newbox\rf \setbox\rf=\vbox to \dimen\fun{
+\hrule height \dimen\fun width \dimen\fun}
+%
+\def\oil{\offinterlineskip} % I needed to use this in all my vboxes
+%
+% Black pieces are made from solid boxes of specified height and
+% width (the \filbox macro). For White pieces, \filbox is replaced by a
+% macro (\blbox) which draws the lines around the border of such a box.
+% (the white knight is an exception to this)
+% The macro \tbo is defined as \blbox or \filbox as needed.
+%
+\def\filbox#1#2{\vbox{\oil \hrule height #1\ht\rf width #2\ht\rf}}
+%
+\newdimen\adjust
+\def\blbox#1#2{\dimen\adjust=#1\ht\rf \advance\dimen\adjust by-0.4\ht\rf
+\vbox{\oil \hrule height 0.2\ht\rf width #2\wd\rf
+\hbox to #2\wd\rf{\vrule height \dimen\adjust width 0.2\wd\rf\hfil
+\vrule height \dimen\adjust width 0.2\wd\rf}
+\hrule height 0.2\ht\rf width #2\wd\rf}}
+%
+% Each piece is 12 units wide. \scen produces an hbox with this width
+% and either a \blbox or a \filbox in the center.
+%
+\def\scen#1#2{\hbox to 12\wd\rf{\hfil\tbo{#1}{#2}\hfil}}
+%
+% Definitions (color independent) of each piece
+%
+\def\pawn{\vbox{\oil \scen{2.5}{4}\scen{3}{8}\scen{4.5}{4}\scen{3}{10}}}
+%
+\def\bishop{\vbox{\oil \scen{2}{2.5}\scen{3}{8}\scen{4}{10}%
+\scen{3}{6}\scen{1.5}{12}}}
+%
+\def\rook{\vbox{\oil
+\hbox to 12\wd\rf{\tbo2{2.5}\hfil\tbo2{2.5}\hfil\tbo2{2.5}}
+\scen{3}{12}\scen{5.5}{7}\scen{3}{12}}}
+%
+\def\queen{\vbox{\oil \hbox to 12\wd\rf{\tbo{6}{2}\hfil\tbo{8}{2}%
+\hfil\tbo{8}{2}\hfil\tbo{6}{2}}\scen{4}{10}}}
+%
+\def\king{\vbox{\oil% Next 4 lines are the cross part (improvement wanted)
+\hbox to 12\wd\rf{\rlap%
+{\hbox to 12\wd\rf{\hfil\vrule height 3\ht\rf width 0.2\wd\rf\hfil}}%
+\hfil\raise 1.5\ht\rf%
+\hbox{\vrule width 3\ht\rf height 0.2\ht\rf}\hfil}
+\hbox to 12\wd\rf{\tbo{6}{4.5}\hfil\tbo{6}{4.5}}
+\scen{4}{10}}}
+%
+\def\knight{\vbox{\oil \hbox{\hskip 7\wd\rf\tbo{1}{1}}
+\hbox{\hskip2\wd\rf\tbo{2.5}{7}}\hbox{\hskip 2\wd\rf
+\vbox to 3\ht\rf{\tbo{1}{1.5}\vfil}\hskip3\wd\rf\tbo{3}{2.5}}
+\hbox{\hskip 3.4\wd\rf\tbo{4}{5.6}}
+\tbo{2.5}{12}}}
+%
+% Creation of the boxes for the pieces
+%
+\newbox\WP \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WP=\pawn
+\newbox\BP \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BP=\pawn
+\newbox\WB \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WB=\bishop
+\newbox\BB \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BB=\bishop
+\newbox\WR \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WR=\rook
+\newbox\BR \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BR=\rook
+\newbox\WQ \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WQ=\queen
+\newbox\BQ \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BQ=\queen
+\newbox\WK \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WK=\king
+\newbox\BK \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BK=\king
+\newbox\BN \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BN=\knight
+%
+% The exceptional white knight (a lot of work to avoid a line at neck!)
+%
+\newbox\WN \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WN=
+\vbox{\oil \hbox{\hskip 7\wd\rf\tbo{1}{1}}
+\hbox{\hskip2\wd\rf\vrule height 2.5\ht\rf width 0.2\ht\rf
+\vbox to 2.5\ht\rf{\hrule height 0.2\ht\rf width 6.6\wd\rf\vfil
+\hrule height 0.2\ht\rf width 4.5\wd\rf}%
+\vrule height 2.5\ht\rf width 0.2\wd\rf}
+\hbox{\hskip 2\wd\rf
+\vbox to 3\ht\rf{\tbo{1}{1.5}\vfil}\hskip3\wd\rf
+\hbox to 2.5\wd\rf{\vrule height 3\ht\rf width 0.2\wd\rf\hfil
+\vrule height 3\ht\rf width 0.2\wd\rf}}
+\hbox{\hskip 3.4\wd\rf\tbo{4}{5.6}}
+\tbo{2.5}{12}}
+%
+% \ver is the line used for square boundaries on the board
+% \nver is thinner line used to shade dark squares (if no piece on them)
+% \hor draws horizontal lines for each rank
+%
+\def\ver{\vrule height 15\ht\rf width 0.4\wd\rf}
+\def\nver{\vrule height 15\ht\rf width 0.1\wd\rf}
+\def\hor{\hrule height 0.4\wd\rf width 120\wd\rf}
+%
+ \newcount\color \newcount\blanks
+\def\blanksquare{\ifodd\color \hbox to 15\wd\rf{\hfil\nver%
+\hfil\nver\hfil\ver}\else\hbox to 15\wd\rf{\hfil\ver}\fi
+\advance\color by 1}
+%
+% Each piece is centered inside a 15-unit square
+%
+\def\cen#1{\hbox to 15\wd\rf{\hfil\vbox to 15\ht\rf{\vfil\copy#1\vfil}%
+\hfil\ver}}
+%
+% This processes the characters specifying a row of the diagram. It
+% is patterned after the \length example at the end of chapter 20
+% of The TeXbook
+\def\nextchar#1{\let\nex=\nextchar%
+\ifcat7#1%
+\blanks=#1\loop\ifnum\blanks>0 \blanksquare%
+\advance\blanks by -1\repeat\else
+\advance\color by 1%
+\ifx#1P\cen{\WP}\else\ifx#1p\cen{\BP}\else%
+\ifx#1N\cen{\WN}\else\ifx#1n\cen{\BN}\else%
+\ifx#1B\cen{\WB}\else\ifx#1b\cen{\BB}\else%
+\ifx#1Q\cen{\WQ}\else\ifx#1q\cen{\BQ}\else%
+\ifx#1R\cen{\WR}\else\ifx#1r\cen{\BR}%
+\else\ifx#1K\cen{\WK}\else\ifx#1k\cen{\BK}\else\let\nex=\relax%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\nex}
+%
+% \bore carries out preliminary steps for making the diagram.
+% \rgc reads in a string of non-blank characters, checks that the
+% first character is not the terminator Z, gives the string to \nextchar,
+% and then processes the next string. (again patterned after \length)
+%
+\def\bore#1Z{\color=1\vbox{\oil \hor\rgc#1 Z }}
+\def\rgc#1#2 {\advance\color by 1\let\nx=\rgc\ifx#1Z\let\nx=\relax
+\else\hbox{\ver\nextchar#1#2Z}\hor\fi\nx}
+%
+% This macro prints a variation. It is supposed to use the ideas of
+% \length and seems to work, but there is something I don't understand:
+% if the {} following the \else is deleted, something goes wrong. Why?
+%
+\newcount\move \newcount\iswhite
+\def\VAR#1 #2Z{\move=#1\iswhite=1\listem #2 Z }
+\def\listem#1#2 {\ifx#1Z\let\nx=\relax\else{}%
+\ifodd\iswhite{} \number\move~#1#2\else%
+~#1#2\advance\move by 1\fi\advance\iswhite by 1\let\nx=\listem\fi\nx}
diff --git a/macros/generic/misc/compare.tex b/macros/generic/misc/compare.tex
new file mode 100644
index 0000000000..05976cbe86
--- /dev/null
+++ b/macros/generic/misc/compare.tex
@@ -0,0 +1,12 @@
+% compare.tex - macro to compare two strings
+% By \'Eamonn McManus. This file is not copyrighted.
+
+\def\compare#1#2{\compcont#1\ \\#2\ \\}
+\def\compcont#1#2\\#3#4\\{%
+ \csname comp%
+ \if #1#3\if #1\ same\else cont\fi
+ \else \ifnum `#1<`#3less\else greater\fi \fi
+ \endcsname #2\\#4\\}
+\def\compsame#1\\#2\\{0}
+\def\compless#1\\#2\\{-1}
+\def\compgreater#1\\#2\\{1}
diff --git a/macros/generic/misc/cropmark.tex b/macros/generic/misc/cropmark.tex
new file mode 100644
index 0000000000..3f04674e82
--- /dev/null
+++ b/macros/generic/misc/cropmark.tex
@@ -0,0 +1,154 @@
+%% Save file as: CROPMARK.TEX Source: FILESERV@SHSU.BITNET
+% Author: Peter Ungar <LAXA@ACFcluster.NYU.EDU>
+%
+% CROPMARK MACROS FOR PLAIN TEX. Feb. 10, 1992 01:31 Peter Ungar 914 723 7187
+% Cropmarks are markings on pages intended to be phototypeset. They mark the
+% corners of the intended book page.
+% THE DIMENSION SPECIFICATIONS (\paperheight,\paperwidth, \topmargin,
+% \outsidemargin, \hsize, \vsize) SHOULD COME BEFORE THE MACROS. OTHERWISE
+% THE CROPMARKS GO INTO ODD LOCATIONS. THESE QUANTITIES ARE ASSIGNED VALUES
+% IN THIS FILE TO MAKE THE EXAMPLE WORK. REPLACE THE GIVEN VALUES BY THE
+% ONES YOU NEED BEFORE INSTALLING THE MACROS. HSIZE IS THE LENGTH OF THE LINES
+% AND VSIZE IS THE HEIGHT OF THE PRINTED PAGE NOT COUNTING HEADER OR FOOTER.
+% \lefttopcropmark should be inserted at the beginning of the
+% headline. It is a \llap and should not take space away from any other item
+% in the headline. \righttopcropmark should be at the end of the headline.
+% If there is no \hfil in the headline, use one to put the cropmark to
+% the end of the headline. It is a \rlap and in theory it should not take
+% space away
+% from other items. Do not to put a space in front of \righttopcropmark be-
+% cause the space will be typeset unless it is preceded by a control sequence.
+% The bottom cropmarks should be inserted in the beginning and end of the
+% \footline. Be sure to fill space in the middle with \hfil.
+% Remember that the \footline definition has to come BEFORE the end of the
+% first page.
+% The values of \voffset and \hoffset can be adjusted to try to push the
+% entire page including the cutmarks into the area your printer can print.
+% The quantities you have to input are
+% \paperheight, \paperwidth, \topmargin (measured from the top of the headline
+% which is assumed to be 10-point size, and \outsidemargin which will be the
+% right margin of odd-numbered pages and the left margin of even numbered
+% pages. The other quantities which are needed are computed by the macros.
+% The computations two empirical corrections.
+% If the dimensions on your printout are slightly off, try over or under-
+% stating the true dimensions of the above quantities.
+% The macros ought to work for all values of \hsize and \vsize but if these
+% are too large the cropmarks may not fit the area most printers can print.
+% \nocropmarks replaces the cropmark macros by \relax (blanks). The cropmarks
+% are needed only for phototypesetting and we may not want to see them on
+% printout prepared for other purposes.
+% TEX WILL NOT LET YOU KNOW IF YOU DID NOT ASSIGN A VALUE TO A DIMENSION.
+% THAT MAY BE THE REASON IF YOU GET BIZARRE RESULTS. THE VALUES MUST COME
+% BEFORE THE MACROS.
+
+%\magnification 1042 %% Needed to get exact dimensions on the MacPlus screen.
+
+\voffset=20mm\hoffset=15mm % Needed to bring cropmarks within printable area.
+\overfullrule=0mm % To prevent overfullrules being added to cropmarks
+\newdimen\paperheight
+\newdimen\paperwidth
+\newdimen\topmargin
+\newdimen\outsidemargin
+\newdimen\insidemargin
+\newdimen\leftmargin
+\newdimen\rightmargin
+\newdimen\topliftadjustment
+\newdimen\bottomliftadjustment
+\newdimen\topcropmarklift
+\newdimen\bottomcropmarklift
+\newdimen\leftsideskip
+\newdimen\rightsideskip
+\newdimen\bclifta
+\newdimen\bcliftb
+
+\vsize=182mm
+\hsize=112mm
+\paperheight=227.4mm % These six quantities specify the margins.
+\paperwidth=152.3mm % The ones introduced below are either
+\topmargin=14mm % computed from these by the macros or they
+\outsidemargin=25mm % are auxiliary.
+
+\topliftadjustment=2.6mm
+\bottomliftadjustment=15.5mm
+\insidemargin=\paperwidth
+\advance\insidemargin by -\outsidemargin
+\advance\insidemargin by -\hsize
+
+\def\leftorright{\ifodd\pageno
+\leftmargin=\insidemargin\rightmargin=\outsidemargin\else
+\leftmargin=\outsidemargin\rightmargin=\insidemargin\fi
+\leftsideskip=\leftmargin
+\advance\leftsideskip by -4.05mm
+\rightsideskip=\rightmargin
+\advance\rightsideskip by -4.05mm}
+
+\def\lefttopcropmark{{\parindent=0mm\llap{\vtop{
+\hsize=\leftmargin
+\vskip-\topliftadjustment
+\vskip-\topmargin
+\vrule height 0.05mm depth 4mm width 0.05mm
+\vrule height 0.05mm depth0mm width 4mm
+\hfill}}}}
+\def\righttopcropmark{{\parindent=0mm\rlap{\vtop{\hsize=\rightmargin
+\vskip-\topliftadjustment
+\vskip-\topmargin
+\hfill
+\vrule height 0.05mm depth0mm width 4mm
+\vrule height 0.05mm depth 4mm width 0.05mm
+}}}}
+
+\bottomcropmarklift=-\paperheight
+\advance\bottomcropmarklift by\topmargin
+\advance\bottomcropmarklift by\vsize
+\advance\bottomcropmarklift by\bottomliftadjustment
+
+\bclifta=\bottomcropmarklift
+\advance\bclifta by 4mm
+\bcliftb=\bottomcropmarklift
+\advance\bcliftb by -0.05mm
+
+\def\leftbottomcropmark{{\parindent=0mm\llap{
+\hbox{\vrule height\bclifta depth -\bottomcropmarklift width 0.05mm
+\vrule height \bottomcropmarklift depth -\bcliftb width 4mm
+\hskip\leftsideskip}}}}
+
+\def\rightbottomcropmark{{\parindent=0mm\rlap{\hbox{\hskip\rightsideskip
+\vrule height \bottomcropmarklift depth -\bcliftb width 4mm
+\vrule height\bclifta depth -\bottomcropmarklift width 0.05mm}}}}
+
+
+\def\nocropmarks{\def\lefttopcropmark{\relax} % THIS TURNS OFF CROPMARKS
+\def\righttopcropmark{\relax}
+\def\leftbottomcropmark{\relax}
+\def\rightbottomcropmark{\relax}}
+\endinput
+
+% END OF THE MACROS. AN EXAMPLE FOLLOWS. COMMENT OUT \endinput TO
+% TYPESET IT.
+
+\headline={\leftorright\lefttopcropmark\ifodd\pageno
+\hfil HEADLINE\hfil\folio\else
+\folio\hfil HEADLINE\hfil \fi
+\righttopcropmark}
+\footline={\leftorright\leftbottomcropmark
+\hfil
+\rightbottomcropmark}
+
+\noindent Topliftadjustment=2.6mm bottomliftadjustment=15.5mm
+\hfill H
+
+\noindent paperheight=227.4mm paperwidth=152.3mm
+
+\noindent topmargin=14mm outsidemargin=25mm
+
+\noindent vsize=182mm hsize=112mm
+
+NOTE THAT THE DIMENSION SPECIFICATIONS MUST COME BEFORE THE MACROS.
+\vfill
+\noindent\line{Here is the bottom left corner. \hfil Bottom right is H}
+\eject
+\noindent\line{Here is the top left corner.\hfil Top right is H}
+\vfill
+\noindent\line{Here is the bottom left corner. \hfil Bottom right is H}
+\eject
+\end
diff --git a/macros/generic/misc/dayofweek.tex b/macros/generic/misc/dayofweek.tex
new file mode 100644
index 0000000000..4ce46ac243
--- /dev/null
+++ b/macros/generic/misc/dayofweek.tex
@@ -0,0 +1,149 @@
+%
+% \DayOfWeek expands to the day of the week ("Sunday", etc.)
+% \PhaseOfMoon expands to the phase of the moon
+%
+% Written by Martin Minow of DEC (minow%bolt.dec@decwrl.dec.com).
+%
+\def\DayOfWeek{%
+%
+% Calculate day of the week, return "Sunday", etc.
+%
+ \newcount\dow % Gets day of the week
+ \newcount\leap % Leap year fingaler
+ \newcount\x % Temp register
+ \newcount\y % Another temp register
+% leap = year + (month - 14)/12;
+ \leap=\month \advance\leap by -14 \divide\leap by 12
+ \advance\leap by \year
+% dow = (13 * (month + 10 - (month + 10)/13*12) - 1)/5
+ \dow=\month \advance\dow by 10
+ \y=\dow \divide\y by 13 \multiply\y by 12
+ \advance\dow by -\y \multiply\dow by 13 \advance\dow by -1 \divide\dow by 5
+% dow += day + 77 + 5 * (leap % 100)/4
+ \advance\dow by \day \advance\dow by 77
+ \x=\leap \y=\x \divide\y by 100 \multiply\y by 100 \advance\x by -\y
+ \multiply\x by 5 \divide\x by 4 \advance\dow by \x
+% dow += leap / 400
+ \x=\leap \divide\x by 400 \advance\dow by \x
+% dow -= leap / 100 * 2;
+% dow = (dow % 7)
+ \x=\leap \divide\x by 100 \multiply\x by 2 \advance\dow by -\x
+ \x=\dow \divide\x by 7 \multiply\x by 7 \advance\dow by -\x
+ \ifcase\dow Sunday\or Monday\or Tuesday\or Wednesday\or
+ Thursday\or Friday\or Saturday\fi
+}
+%%
+%%
+%%
+\def\PhaseOfMoon{% Calculate the phase of the (civil) moon.
+%
+% The routine calculates the year's epact (the age of the moon on Jan 1.),
+% adds this to the number of days in the year, and calculates the phase
+% of the moon for this date. It returns the phase as a string, e.g.,
+% "new", "full", etc.
+%
+% In the algorithm:
+%
+% diy Is the day of the year - 1 (i.e., Jan 1 is day 0).
+%
+% golden Is the number of the year in the Mentonic cycle, used to
+% determine the position of the calender moon.
+%
+% epact Is the age of the calender moon (in days) at the beginning
+% of the year. To calculate epact, two century-based
+% corrections are applied:
+% Gregorian: (3 * cent)/4 - 12
+% is the number of years such as 1700, 1800 when
+% leap year was not held.
+% Clavian: (((8 * cent) + 5) / 25) - 5
+% is a correction to the Mentonic cycle of about
+% 8 days every 2500 years. Note that this will
+% overflow 16 bits in the year 409600. Beware.
+%
+% The algorithm is accurate for the Gregorian calender only.
+%
+% The magic numbers used in the phase calculation are as follows:
+% 29.5 The moon's period in days.
+% 177 29.5 scaled by 6
+% 22 (29.5 / 8) scaled by 6 (this gets the phase)
+% 11 ((29.5 / 8) / 2) scaled by 6
+%
+% Theoretically, this should yield a number in the range 0 .. 7. However,
+% two days per year, things don't work out too well.
+%
+% Epact is calculated by the algorithm given in Knuth vol. 1 (calculation
+% of Easter). See also the article on Calenders in the Encyclopaedia
+% Britannica and Knuth's algorithm in CACM April 1962, page 209.
+%
+ \newcount\cent % Century number (1979 == 20)
+ \newcount\epact % Age of the moon on Jan. 1
+ \newcount\diy % Day in the year
+ \newcount\golden % Moon's golden number
+ \newcount\x % Temp
+ \newcount\m % Temp for modulus
+ \diy=\day \advance\diy by \ifcase\month % Jan 1 == 0
+ -1\or -1\or 30\or 58\or 89\or 119\or 150\or % Jan .. Jun
+ 180\or 211\or 241\or 272\or 303\or 333\fi % Jul .. Dec
+% if ((month > 2) && ((year % 4 == 0) &&
+% ((year % 400 == 0) || (year % 100 != 0))))
+% diy++; /* Leapyear fixup */
+ \ifnum \month>2
+ \x=\year \m=\x \divide\m by 4 \multiply\m by 4 \advance\x by -\m
+ \ifnum \x=0 % month > 2 and maybe leapyear
+ \x=\year \m=\x \divide\m by 400 \multiply\m by 400 \advance\x by -\m
+ \ifnum \x=0 % 2000 is a leap year
+ \advance\diy by 1 % so it's one day later
+ \else % not 2000, check other '00's
+ \x=\year \m=\x \divide\m by 100 \multiply\m by 100 \advance\x by -\m
+ \ifnum \x>0 % not some other '00' year
+ \advance\diy by 1 % it's still one day later
+ \fi % not odd century
+ \fi % not 2000-type century
+ \fi % not leapish year
+ \fi % not march or later
+% cent = (year / 100) + 1; /* Century number */
+% golden = (year % 19) + 1; /* Golden number */
+ \cent=\year \divide\cent by 100 \advance\cent by 1
+ \golden=\year
+ \m=\year \divide\m by 19 \multiply\m by 19 \advance\golden by -\m
+ \advance\golden by 1
+% epact = ((11 * golden) + 20 /* Golden number */
+% + (((8 * cent) + 5) / 25) - 5 /* 400 year cycle */
+% - (((3 * cent) / 4) - 12)) % 30;/* Leap year correction */
+ \epact=11 \multiply\epact by \golden
+ \advance\epact by 20
+ \x=8 \multiply\x by \cent \advance\x by 5
+ \divide\x by 25 \advance\x by -5
+ \advance\epact by \x
+ \x=3 \multiply\x by \cent \divide\x by 4 \advance\x by -12
+ \advance\epact by -\x
+ \m=\epact \divide\m by 30 \multiply\m by 30 \advance\epact by -\m
+% if (epact <= 0)
+% epact += 30; /* Age range is 1 .. 30 */
+% if ((epact == 25 && golden > 11) || epact == 24)
+% epact++;
+ \ifnum \epact<0
+ \advance\epact by 30
+ \fi
+ \ifnum \epact=25
+ \ifnum \golden>11
+ \advance \epact by 1
+ \fi
+ \else
+ \ifnum \epact=24
+ \advance \epact by 1
+ \fi
+ \fi
+%
+% Calculate the phase, using the magic numbers defined above.
+% Note that phase may be equal to 8 (== 0) on two days of the year
+% due to the way the algorithm was implemented.
+% phase = (((((diy + epact) * 6) + 11) % 177) / 22) & 7;
+%
+ \x=\diy \advance\x by \epact \multiply\x by 6 \advance\x by 11
+ \m=\x \divide\m by 177 \multiply\m by 177 \advance\x by -\m
+ \divide\x by 22
+ \ifcase\x new\or waxing crescent\or in its first quarter\or
+ waxing gibbous\or full\or waning gibbous\or
+ in its last quarter\or waning crescent\or new\fi
+}
diff --git a/macros/generic/misc/daytime.sty b/macros/generic/misc/daytime.sty
new file mode 100644
index 0000000000..cfeeafb205
--- /dev/null
+++ b/macros/generic/misc/daytime.sty
@@ -0,0 +1,30 @@
+%% Save file as: DAYTIME.STY Source: FILESERV@SHSU.BITNET
+%% Source: INFO-TeX@SHSU.edu (Wed, 2 Oct 1991 10:01:43 EDT)
+%% Author: Mauro Orlandini <ORLANDINI@HEAVAX.GSFC.NASA.GOV>
+%% Modified: George D. Greenwade <bed_gdg@SHSU.edu> -- added \Daytime
+%% to not have the leading 0 on 1:00 --- 9:00
+\begingroup
+ \count0=\time
+ \count1=\count0
+ \divide\count0 by 60
+ \count2=\count0
+ \multiply\count0 by 60
+ \advance\count1 by -\count0
+ \ifnum\count2>11
+ \ifnum\count2>12 \advance\count2 by -12\fi
+ \def\ampm{pm}%
+ \else
+ \ifnum\count2=0 \advance\count2 by 12\fi
+ \def\ampm{am}%
+ \fi
+ \xdef\daytime{%
+ \ifnum\count2<10 0\fi \the\count2:%
+ \ifnum\count1<10 0\fi \the\count1
+ \ampm
+ }%
+ \xdef\Daytime{% %GDG
+ \the\count2:% %GDG
+ \ifnum\count1<10 0\fi \the\count1 %GDG
+ \ampm %GDG
+ }% %GDG
+\endgroup
diff --git a/macros/generic/misc/default.sty b/macros/generic/misc/default.sty
new file mode 100644
index 0000000000..b2a0f0c023
--- /dev/null
+++ b/macros/generic/misc/default.sty
@@ -0,0 +1,311 @@
+% DEFAULT.STY, version 1.3 July 1998, provides
+% 1. macro parameter-defaulting mechanism.
+% 2. user stack and dynamic array
+% Particularly useful if you have macros with many parameters, and you
+% don't want to remember all of them all the time.
+%
+% Author: Zhuhan Jiang, University of New England, Australia
+% Email: zhuhan@neumann.une.edu.au
+%
+% NOTES:
+% 1. This style file can be loaded in as many times as you want,
+% without overrunning the resources for such as counter
+% registers and etc. So different packages may all use it to
+% default their macro parameters, without causing any conflict.
+% 2. Macro parameters that can be defaulted through this style file
+% are those included in square brackets. E.g. #1, #2, #3 in
+% \foo[#1][#2][#3]#4#5 are defaultable while #4 and #5 here are
+% not.
+% 3. If \foo is a macro to be defaulted, the original macro \foo
+% will be renamed as ``\foo@ raw'' (yes, there is a space) and
+% the new macro \foo will be defined through the use of the
+% original ``\foo@ raw''.
+%
+% MAIN MACRO:
+% \setdefalut{cmdname}{n}{default1}{..}{default_n}
+% - gives defaults to \cmdname[p_1][p_2]..[p_n]
+% (the macro to be defaulted must be already defined
+% when \setdefault is executed)
+% EXAMPLES:
+% 1. Suppose \foo is defined for \foo[#1][#2][#3]{#4}, we may default
+% all (or some of) the parameters in the SQUARE BRACKETS to for
+% instance 'one', 'two' and 'three' via
+% \setdefault{foo}{3}{one}{two}{three}
+% This way, command \foo{stuff} or \foo[]{stuff} or \foo[][]{stuff}
+% or \foo[][][]{stuff} will all be translated as
+% \foo[one][two][three]{stuff}. Command \foo[][2]{stuff} will be
+% translated as \foo[one][2][three]{stuff}.
+% 2. See how \placebox is defined and redefined via \setdefault
+% in this file.
+%
+% TIP:
+% The best strategy to define (e.g.) \foo[#1][#2]{#3} so that
+% it has defaults for #1 and #2
+% 1. define \foo@[#1][#2]#3 as normal (what you wish)
+% 2. define \foo[#1][#2]#{\foo@[#1][#2]} to make {#3} mandatory
+% 3. use \setdefault{foo}{2}{one}{two} to default #1=one and #2 to two
+%
+% MINOR MACROS:
+% \placebox[#1][#2][#3][#4][#5][#6]{#7}
+% - place stuff #7 in a box at the position specified
+% by parameters #1, ..., #6. (move mini page around)
+% #1: box position (default 0)
+% 1--6--2 <-- top of the box
+% | |
+% | |
+% | |
+% 9 5 7 0 is -5 <-- middle height of the box
+% | |
+% 10 11 12 <-height up <-- baseline
+% | | depth down
+% 4--8--3 <-- bottom of the box
+% #1<=0: box has no width, no height
+% #2: x shift (default 0pt)
+% #3: y shift (default 0pt)
+% #4,#5: extra x,y shift in multiple of box width/10, height/10
+% #6: box type: v=vbox, otherwise=hbox
+% #7: content to be boxed
+% \push{ ... } - push stuff to stack; anything can be saved to
+% \pop - pop stack
+% \popnil - delete stack top element (pop to nil)
+% \fetch{#1} - fetch #1-th entry from the stack
+% (illegal number #1 will produce \relax)
+% if #1>0, fetch #1-th entry from bottom of stack
+% if #1>=0, fetch (-#1)-th element from top of stack
+% e.g.
+% fetch{0} - fetch the element of the top of stack
+% fetch{-1} - the element just below the top of stack
+% fetch{2} - 2nd element from the bottom of stack
+%
+\ifx\EntryDefault\undefined
+ \message{1.3 13/7/98}%
+ {\catcode`\@=11\relax \def\temp@macro{\space\space\space\space}%
+ \wlog{\temp@macro DEFAULT.STY version 1.3 July 1998 By Z Jiang}%
+ \wlog{\temp@macro University of New England, Australia}%
+ \wlog{\temp@macro Email: zhuhan@neumann.une.edu.au}}%
+\fi
+\xdef\EntryDefault{\the\catcode`\@}\catcode`\@=11\relax % SAVE @'s STATUS
+%
+%
+% NEW MEASURES etc (parameter defaulting mechanism given by macros below)
+\def\new@measures{%
+ \def\temp@@macro##1##2##3{\expandafter\ifx\csname ##3temp##2##1\endcsname
+ \relax\edef\next{\noexpand\csname new##1\noexpand\endcsname
+ \csname ##3temp##2##1\endcsname}%
+ \else\let\next\relax\fi\next}%
+ \def\temp@macro##1{%
+ \temp@@macro{##1}{@}{}\temp@@macro{##1}{@@}{}\temp@@macro{##1}{@@@}{}}%
+ \temp@macro{count}\temp@macro{toks}\temp@macro{box}\temp@macro{read}%
+ \temp@@macro{if}{@}{if}\temp@@macro{if}{@@}{if}\temp@@macro{if}{@@@}{if}%
+ \def\temp@@macro##1{\expandafter\ifx\csname temp##1dim\endcsname
+ \relax\edef\next{\noexpand\csname newdimen\noexpand\endcsname
+ \csname temp##1dim\endcsname}%
+ \else\let\next\relax\fi\next}%
+ \temp@@macro{@}\temp@@macro{@@}\temp@@macro{@@@}%
+}%
+\let\temp@@@macro=\wlog\def\wlog#1{}\new@measures
+%
+%%% GENERAL STACK
+\def\make@STKcount{\csname newcount\endcsname
+ \STKcount\global\STKcount=0\relax}%
+\ifx\STKcount\undefined@
+ \def\next{\make@STKcount}\else\def\next{}\fi
+\next % ensures stack pointer not flushed if this piece of code
+ % is loaded again
+%
+\long\def\push#1{\global\advance\STKcount1\relax
+\expandafter\gdef\csname STK\the\STKcount\string~\endcsname{#1}}%
+%
+\def\popnil{\expandafter\let\expandafter\temp@macro
+ \csname STK\the\STKcount\string~\endcsname
+ \ifnum\STKcount>0\global\expandafter\let
+ \csname STK\the\STKcount\string~\endcsname=\undefined@
+ \global\advance\STKcount-1%
+ \else
+ \def\temp@macro{}\global\STKcount=0%
+ \fi\relax % \temp@macro for pop
+}%
+%
+\def\pop{\popnil\temp@macro}%
+%
+\def\fetch@#1{\ifnum#1>0 \relax \temp@count=#1 \else
+ \temp@count=\STKcount \advance\temp@count by #1 \fi
+ \csname STK\the\temp@count\string~\endcsname
+}%
+\def\fetch#{\fetch@}%
+%
+%% GET PARAMETERS
+\long\def\get@nepara[#1][#2]{{\def\next@{#2}%
+\ifx\next@\empty\push{#1}\else\push{#2}\fi}\ag@in}%
+%
+\long\def\get@para\left@#1\right@{%
+\def\check@{%
+ \ifx[\next@ \def\full@####1{\get@nepara[#1]####1}%
+ \else \def\full@{\get@nepara[#1][#1]}\fi
+ \full@}%
+\futurelet\next@\check@}%
+%
+\long\def\do@nepara\left@#1\right@#2\p@r@end{%
+\gdef\p@r@data{#2}\global\advance\p@r@count1\get@para\left@#1\right@}%
+%
+\def\ag@in{\ifx\p@r@data\empty \def\next@{\relax
+\getp@r@s\run@CMD}\else
+\def\next@{\expandafter\do@nepara\p@r@data\p@r@end}\fi
+\next@}%
+%
+\def\run@CMD{\csname STK\the\STKcount\string~\endcsname}%
+%
+\def\num@to@word#1{\ifcase #1 \or
+ \def\temp@macro{one}\or \def\temp@macro{two}\or
+ \def\temp@macro{three}\or \def\temp@macro{four}\or
+ \def\temp@macro{five}\or \def\temp@macro{six}\or
+ \def\temp@macro{seven}\or \def\temp@macro{eight}\or
+ \def\temp@macro{nine}\else \def\temp@macro{}\fi
+\temp@toks=\expandafter{\temp@macro}}%
+%
+\temp@@count=1 % make nine newtoks, if they don't already exist
+\loop \num@to@word{\temp@@count}%
+ \expandafter\ifx\csname p@r@\the\temp@toks\endcsname\relax
+ \temp@@toks={newtoks}\expandafter\csname\expandafter\the
+ \expandafter\temp@@toks\expandafter\endcsname
+ \csname p@r@\the\temp@toks\endcsname\fi
+ \advance\temp@@count by 1 \ifnum\temp@@count<10 \repeat
+%
+\ifx\p@r@count\undefined@ \csname newcount\endcsname\p@r@count\fi
+\long\def\st@ckparas#1\p@r@end{%
+\global\p@r@count=0\gdef\p@r@data{#1}\ag@in}%
+%
+% PARAMETER ASSIGNMENT % use \temp@count
+\def\getp@r@s{\temp@count=\p@r@count
+{\loop
+ \ifnum\temp@count>0 %
+ \expandafter\let\expandafter
+ \temp@macro\csname STK\the\STKcount\string~\endcsname
+ \ifcase\temp@count
+ \or \global\p@r@one=\expandafter{\temp@macro}%
+ \or \global\p@r@two=\expandafter{\temp@macro}%
+ \or \global\p@r@three=\expandafter{\temp@macro}%
+ \or \global\p@r@four=\expandafter{\temp@macro}%
+ \or \global\p@r@five=\expandafter{\temp@macro}%
+ \or \global\p@r@six=\expandafter{\temp@macro}%
+ \or \global\p@r@seven=\expandafter{\temp@macro}%
+ \or \global\p@r@eight=\expandafter{\temp@macro}%
+ \or \global\p@r@nine=\expandafter{\temp@macro}%
+ \else \errmessage{Parameter capacity exceeded.}%
+ % this should never happen: TeX's max para no. is 9
+ \fi
+ \global\expandafter\let
+ \csname STK\the\STKcount\string~\endcsname=\undefined@%
+ \global\advance\STKcount-1%
+ \global\advance\temp@count-1\relax
+ \fi
+ \ifnum\temp@count>0 %
+\repeat}}%
+%
+\def\clrp@r@s{%GLOBALLY clear
+\global\p@r@one={}\global\p@r@two={}\global\p@r@three={}%
+\global\p@r@four={}\global\p@r@five={}\global\p@r@six={}%
+\global\p@r@seven={}\global\p@r@eight={}\global\p@r@nine={}}%
+%
+\def\read@paras#1{\temp@@@count=1 %use \temp@@@count and \temp@@count
+ \loop \num@to@word{\the\temp@@@count}\csname p@r@\the\temp@toks\endcsname={}%
+ \advance\temp@@@count by 1 \ifnum\temp@@@count<10 \repeat
+ \temp@@@count=1 \temp@@count=#1 %
+ \def\read@one@para##1{\num@to@word{\temp@@@count}%
+ \def\temp@macro{\left@ ##1\right@}%
+ \temp@@@toks=\expandafter{\temp@macro}%
+ \csname p@r@\the\temp@toks\endcsname\expandafter{\temp@macro}%
+ \advance\temp@@@count by 1 \read@continue}%
+ \def\read@continue{\num@to@word{\temp@@@count}% which uses \temp@macro
+ \ifnum\temp@@@count>\temp@@count \let\next@@\make@default
+ \edef\temp@@macro{\the\p@r@one\the\p@r@two\the\p@r@three\the\p@r@four
+ \the\p@r@five\the\p@r@six\the\p@r@seven\the\p@r@eight\the\p@r@nine}%
+ \else \let\next@@\read@one@para
+ \fi \next@@}\read@continue}%
+%
+\def\make@@default#1#2{\temp@count=#2\relax \temp@@count=1 %used \temp@@macro
+ \loop \num@to@word{\temp@@count}%
+ \ifnum\temp@@count>\temp@count \csname p@r@\the\temp@toks\endcsname={}%
+ \else \csname p@r@\the\temp@toks\endcsname
+ =\expandafter{\expandafter[\expandafter
+ \the\csname p@r@\the\temp@toks\endcsname]}\fi
+ \advance\temp@@count by 1 %
+ \ifnum\temp@@count<10 \repeat
+ \edef\temp@macro{\the\p@r@one\the\p@r@two\the\p@r@three\the\p@r@four
+ \the\p@r@five\the\p@r@six\the\p@r@seven\the\p@r@eight\the\p@r@nine}%
+ \temp@toks=\expandafter{\temp@macro}%
+ \temp@@toks=\expandafter{\temp@@macro}%
+ \expandafter\let\expandafter\temp@macro\csname #1\endcsname
+ \expandafter\ifx\csname #1@ raw\endcsname\relax
+ \expandafter\let\csname #1@ raw\endcsname\temp@macro\fi
+ \expandafter\edef\csname#1\endcsname{%
+ \noexpand\push{\noexpand\edef\noexpand\next@@{%
+ \noexpand\noexpand \noexpand \csname \noexpand#1@ raw\noexpand\endcsname
+ \the\temp@toks}%
+ \noexpand\popnil\noexpand\clrp@r@s\noexpand\next@@}\noexpand\st@ckparas
+ \the\temp@@toks \noexpand\p@r@end}}%
+%
+% \setdefalut{cmdname}{n}{default1}{..}{default_n}
+% then \cmdname[#1][..][#n] can be defaulted.
+\def\setdefault#1#2{\def\make@default{\make@@default{#1}{#2}}\read@paras{#2}}
+%
+% DEFAULT MECHANISM END: this piece of code can be included in any
+% package and can be reloaded any times without overruning the resources.
+%
+% Now an example to use \setdefault:
+% lower a box
+\long\def\xylower#1#2#3{\bgroup\hskip#1\hbox{% #1=x #2=y #3=content
+ \ifmmode\let\SoftLower\undefined\else\def\SoftLower{}$\fi
+ \mathop{\vtop{\ialign{##\crcr \noalign{\kern#2}#3\crcr}}}%
+ \ifx\SoftLower\undefined\else $\fi}\egroup}%
+%
+% #1=box position(0) #2=x shift(0pt) #3=y shift(0pt) #6=v (vbox)
+% #4,#5=extra x,y shift in multiple of box width/10, height/10 #7=content
+\long\def\placebox[#1][#2][#3][#4][#5][#6]#7{\begingroup
+\def\temp@macro{#6}\def\temp@@macro{v}\ifx\temp@macro\temp@@macro
+\setbox\temp@box=\vbox{#7}\else \leavevmode % #1 (box position)
+\setbox\temp@box=\hbox{#7}\fi\temp@dim=-\wd\temp@box % 1--6--2
+\temp@@dim=\ht\temp@box \temp@@@dim=\dp\temp@box % | |
+\ifnum#1<0 \temp@count=-#1 \else\temp@count=#1 \fi % | |
+\ifnum\temp@count=0 \temp@count=5 \fi % | |
+\ifcase\temp@count % 9 5 7 0 is -5
+ \or \temp@dim=0pt \temp@@dim=0pt % | |
+ \or \temp@@dim=0pt % 10 11 12 <-height up
+ \or \advance\temp@@dim by \temp@@@dim % | | depth down
+ \temp@@dim=-\temp@@dim % 4--8--3
+ \or \temp@dim=0pt \advance\temp@@dim by %
+ \temp@@@dim \temp@@dim=-\temp@@dim % -#1: box has no width etc
+ \or \divide\temp@dim by 2 \advance\temp@@@dim by \temp@@dim
+ \divide\temp@@@dim by 2 \temp@@dim=-\temp@@@dim
+ \or \divide\temp@dim by 2 \temp@@dim=0pt
+ \or \advance\temp@@dim by \temp@@@dim
+ \temp@@dim=-\temp@@dim \divide\temp@@dim by 2
+ \or \advance\temp@@dim by \temp@@@dim
+ \temp@@dim=-\temp@@dim \divide\temp@dim by 2
+ \or \temp@dim=0pt \advance\temp@@dim by \temp@@@dim
+ \temp@@dim=-\temp@@dim \divide\temp@@dim by 2
+ \or \temp@dim=0pt \advance\temp@@@dim by \temp@@dim \temp@@dim=-\temp@@dim
+ \or \divide\temp@dim by 2
+ \advance\temp@@@dim by \temp@@dim \temp@@dim=-\temp@@dim
+ \or \advance\temp@@@dim by \temp@@dim \temp@@dim=-\temp@@dim
+ \or \errmessage{Invalid range of first parameter: #1}\fi
+ \advance\temp@dim by #2 \advance \temp@@dim by #3
+ \temp@@@dim=\wd\temp@box \divide \temp@@@dim by 10
+ \multiply\temp@@@dim by #4 \advance\temp@dim by \temp@@@dim
+ \temp@@@dim=\ht\temp@box \advance\temp@@@dim by \dp\temp@box
+ \divide \temp@@@dim by 10 \multiply\temp@@@dim by #5
+ \advance\temp@@dim by \temp@@@dim
+ \setbox\temp@box=\hbox{\xylower{\temp@dim}{\temp@@dim}{\box\temp@box}}%
+ \ifnum#1>0 \else \wd\temp@box=0pt \ht\temp@box=0pt \dp\temp@box=0pt \fi
+ \box\temp@box\endgroup
+}%
+%
+\ifx\setdefault\undefined\else\setdefault{placebox}{6}{0}{0pt}{0pt}{0}{0}{h}\fi
+% example ends
+%
+\let\wlog\temp@@@macro\let\temp@@@macro\undefined@
+\catcode`\@=\EntryDefault\relax
+\endinput
+%
+%ENDMACROS
+%
diff --git a/macros/generic/misc/dow.tex b/macros/generic/misc/dow.tex
new file mode 100644
index 0000000000..ea504ba375
--- /dev/null
+++ b/macros/generic/misc/dow.tex
@@ -0,0 +1,44 @@
+%%%------------Start Cutting------------------------------------------
+% \dowcomp returns integer day of week in \dow with Sunday=0.
+% \downame returns the name of the day of the week.
+% E.g., if \year=1963 \month=11 \day=22,
+% then \dowcomp ==> \dow=5 and \downame ==> Friday which happened
+% to be the day President John F. Kennedy was assasinated.
+
+% Converted from the lisp function DOW by Jon L. White given in
+% the file LIBDOC DOW JONL3 on MIT-MC (which follows).
+
+%(defun dow (year month day)
+% (and (and (fixp year) (fixp month) (fixp day))
+% ((lambda (a)
+% (declare (fixnum a))
+% (\ (+ (// (1- (* 13. (+ month 10.
+% (* (// (+ month 10.) -13.) 12.))))
+% 5.)
+% day
+% 77.
+% (// (* 5. (- a (* (// a 100.) 100.))) 4.)
+% (// a -2000.)
+% (// a 400.)
+% (* (// a -100.) 2.))
+% 7.))
+% (+ year (// (+ month -14.) 12.)))))
+
+\newcount\dow
+\def\dowcomp{{\count3 \month \advance\count3 -14 \divide\count3 12
+ \advance\count3 \year \count4 \month \advance\count4 10
+ \divide\count4 -13 \multiply\count4 12 \advance\count4 10
+ \advance\count4 \month \multiply\count4 13 \advance\count4 -1
+ \divide\count4 5 \advance\count4 \day \advance\count4 77
+ \count2 \count3 \divide\count2 100 \multiply\count2 -100
+ \advance\count2 \count3 \multiply\count2 5 \divide\count2 4
+ \advance\count4 \count2 \count2 \count3 \divide\count2 -2000
+ \advance\count4 \count2 \count2 \count3 \divide\count2 400
+ \advance\count4 \count2 \count2 \count3 \divide\count2 -100
+ \multiply\count2 2 \advance\count4 \count2 \count2 \count4
+ \divide\count2 7 \multiply\count2 -7 \advance\count4 \count2
+ \global\dow \count4}}
+
+\def\dayname{\dowcomp \ifcase\dow Sunday\or Monday\or Tuesday\or
+ Wednesday\or Thursday\or Friday\else Saturday\fi}
+%%%--------------Stop cutting-----------------------------------------
diff --git a/macros/generic/misc/emtrees.tex b/macros/generic/misc/emtrees.tex
new file mode 100644
index 0000000000..3c9c5e1a3f
--- /dev/null
+++ b/macros/generic/misc/emtrees.tex
@@ -0,0 +1,87 @@
+%From: hwb@texnix.stgt.sub.org (Harald Boegeholz)
+%Newsgroups: comp.text.tex
+%Date: 14 Jan 91 13:44:29 GMT
+%
+%Hi!
+%
+%Some time ago I wrote some TeX-macros to typeset trees. Since
+%two people asked recently, here they are (quite short, so I thought
+%I might post). Be aware, though, of two possible problems:
+% 1. The macros use the \specials defined by emTeX. If your DVI-driver
+% doesn't support these, you won't see any lines.
+% 2. The semantic nest size required is considerable (too many boxes
+% inside of boxes inside of boxes...), so you'll possibly need
+% a TeX which is "large" in this respect for typesetting complex trees.
+%
+%Hope this helps
+%Harald
+%------------------ cut here with a sharp knife ------------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tree macros by Harald Boegeholz
+% This file uses the \specials defined by emTeX to draw the lines!
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\pointnumber \pointnumber=0
+\newcount\father
+\font\nodefont=cmr7
+\def\nextpoint{\global\advance\pointnumber by 1\relax}
+\def\endsubtrees{\endsubtrees}
+\def\tn#1{\vbox{%
+ \vskip.5mm
+ \hbox{\nodefont\hskip1ex\relax #1\hskip1ex}
+ \vskip.5mm
+ }%
+}
+\def\tree#1#2{%
+ \vtop{%
+ \nextpoint
+ \father=\pointnumber
+ \halign{\hfil##\hfil\cr
+ #1\cr
+ \special{em:point \number\father}\cr
+ \noalign{\vskip5mm}
+ \hbox{\subtrees#2\endsubtrees}\cr
+ }%
+ }%
+}%
+\def\subtrees#1{\ifx#1\endsubtrees\let\next\relax\else
+ \vbox{\halign{\hfil##\hfil\cr
+ \nextpoint
+ \special{em:point \number\pointnumber}%
+ \special{em:line \number\pointnumber h,\number\father h}\cr
+ #1\cr
+ }}%
+ \let\next\subtrees\fi
+ \next
+}
+\def\labeledtree#1#2{\vbox{\offinterlineskip\halign{\hfil##\hfil\cr
+ #1\cr
+ \noalign{\vskip3pt}%
+ $\scriptstyle#2$\cr
+}}}
+
+\parindent0pt
+\raggedbottom
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% macros end here ... sample follows:
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+
+{\labeledtree{%
+ {\tree{\tn{1}}{%
+ {\tree{\tn{2}}{%
+ {\tn{3}}%
+ {\tn{4}}%
+ }}%
+ {\tree{\tn{5}}{%
+ {\tn{6}}%
+ }}%
+ }}%
+}{[1,2,2,1,5]}}%
+
+\bye
+------------------ cut here with a sharp knife ------------------------
+--
+Harald Boegeholz |Home: hwb@texnix.stgt.sub.org (read daily)
+ |University: boegehol@az3.informatik.uni-stuttgart.de
+ | ^ please use the latter for large (>100k) mails
diff --git a/macros/generic/misc/endnote.tex b/macros/generic/misc/endnote.tex
new file mode 100644
index 0000000000..6ca4cd8df9
--- /dev/null
+++ b/macros/generic/misc/endnote.tex
@@ -0,0 +1,36 @@
+% Use \endnote{1}{text}. At the end of your document, type
+% \producenotes to actually flush all end notes to be printed.
+%
+% macros for making endnotes instead of footnotes
+% We make @ signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+\catcode`@=11
+\newbox\endnotebox
+\def\setendnotefont#1{\gdef\endnotefont{#1}}
+\setendnotefont{\rm}
+\def\endnote#1{\let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ #1\@sf\vendnote{{#1}}}
+\def\vendnote#1{\global\setbox\endnotebox=
+ \vbox{\parindent=0pt\endnotefont\unvbox\endnotebox\bgroup
+ \indent\llap#1\ignorespaces\futurelet\next\aftergroup\no@te\relax}}
+\def\no@te{\ifcat\bgroup\noexpand\next \let\next\n@@te
+ \else\let\next\n@t\fi \next}
+\def\n@@te{\bgroup\aftergroup\@endnote\let\next}
+\def\n@t#1{#1\@endnote}
+\def\@endnote{\strut\egroup}
+%
+\newcount\enotecounter
+\def\resetenotecount{\global\enotecounter=0 } \resetenotecount
+\def\setenotecount#1{\global\enotecounter=#1 }
+%
+\def\setendnoteflagfont#1{\gdef\endnoteflagfont{#1}}
+\setendnoteflagfont{\sevenrm}
+\def\enote{\unskip
+ \global\advance \enotecounter by 1 % First bump the counter.
+ % Now convert the current value of the counter into a superscripted numeral
+ \endnote{{$^{\hbox{\endnoteflagfont\the\enotecounter}}$}}}
+%
+\def\producenotes{%
+\ifvoid\endnotebox\else\medskip\unvbox\endnotebox\par\fi}
+\catcode`@=12 % at signs are no longer letters
diff --git a/macros/generic/misc/epigram.tex b/macros/generic/misc/epigram.tex
new file mode 100644
index 0000000000..1542c87661
--- /dev/null
+++ b/macros/generic/misc/epigram.tex
@@ -0,0 +1,20 @@
+% From TeXMaG Volume 2, Number 6
+% Don Hosek. Public domain.
+%
+\long\def\epigram#1{% We use \long\def to allow the argument
+ % to span several paragraphs.
+ \bigskip % extra space above.
+ \setbox0=\hbox{#1} % put the text into a box
+ \ifdim\wd0>\critwidth %check the length
+ \centerline{\vtop{\hsize=\episize\noindent#1}}
+ % If the length is greater than
+ % the critical length, make a
+ % displayed paragraph
+ \else % otherwise, we just center the text.
+ \centerline{\box0}
+ \fi
+ \smallskip % extra space for the end.
+}
+
+\newdimen\critwidth \critwidth=.75\hsize
+\newdimen\episize \episize=.6\hsize
diff --git a/macros/generic/misc/fakebold.tex b/macros/generic/misc/fakebold.tex
new file mode 100644
index 0000000000..5699b405de
--- /dev/null
+++ b/macros/generic/misc/fakebold.tex
@@ -0,0 +1,5 @@
+\def\fakebold#1{\leavevmode\setbox0=\hbox{#1}%
+ \kern-.025em\copy0 \kern-\wd0
+ \kern .05em\copy0 \kern-\wd0
+ \kern-.025em\raise.0433em\box0
+}
diff --git a/macros/generic/misc/hep.tex b/macros/generic/misc/hep.tex
new file mode 100644
index 0000000000..5a740da239
--- /dev/null
+++ b/macros/generic/misc/hep.tex
@@ -0,0 +1,12 @@
+\def\slasha#1{\setbox0=\hbox{$#1$}#1\hskip-\wd0\hbox to\wd0{\hss\sl/\/\hss}}
+\def\slashb#1{\setbox0=\hbox{$#1$}#1\hskip-\wd0\dimen0=5pt\advance
+ \dimen0 by-\ht0\advance\dimen0 by\dp0\lower0.5\dimen0\hbox
+ to\wd0{\hss\sl/\/\hss}}
+% Four macros for Dirac's bracket notation of expectation values
+\def\bra#1{\left< #1\right|}
+\def\ket#1{\left| #1\right>}
+\def\bracket#1#2{\left<#1\mid #2\right>}
+\def\EV#1#2#3{\bra{#1}#2\ket{#3}}
+% And finally a macro for printing so-called `normal ordered' products
+% They are denoted by a colon on either side
+\normalord#1{\mathopen{:}#1\mathclose{:}}
diff --git a/macros/generic/misc/hexdump.sty b/macros/generic/misc/hexdump.sty
new file mode 120000
index 0000000000..8d2236a70e
--- /dev/null
+++ b/macros/generic/misc/hexdump.sty
@@ -0,0 +1 @@
+../../latex/contrib/misc/hexdump.sty \ No newline at end of file
diff --git a/macros/generic/misc/inscrutable.tex b/macros/generic/misc/inscrutable.tex
new file mode 100644
index 0000000000..1d45298cc6
--- /dev/null
+++ b/macros/generic/misc/inscrutable.tex
@@ -0,0 +1,11 @@
+% Date: Thu, 7 Feb 91 12:20:50 -0500
+%From: amgreene@ATHENA.MIT.EDU
+%Subject: A response to perl hackers
+\let~\catcode~`?`\
+\let?\the~`#?~`~~`]?~`~\let]\let~`\.?~`~~`,?~`~~`\%?~`~~`=?~`~]=\def
+],\expandafter~`[?~`~][{=%{\message[}~`\$?~`~=${\uccode`'.\uppercase
+{,=,%,{%'}}}~`*?~`~=*{\advance.by}]#\number~`/?~`~=/{*-1}\newcount.
+=\-{*-}~`-?~`~]-\-~`^?~`~=^{*1}~`\ ?~`~= {.`\ $}~`@?~`~=@{,.,"#`@^$}
+.`#*`'$.?~`~0-?~`~$//$^$ .``^$*?~`~$^$.?~`~0-?~`~/$-?~`~^$@*?~`~$ *
+?~`~*?~`~*?~`~*?~`~$@-?~`~$ .?~`~0-?~`~-?~`~$.``^$^^$.`<-?~`~*`<$@*
+?~`~$*?~`~-`(-`+$%}\batchmode
diff --git a/macros/generic/misc/ipamacs.tex b/macros/generic/misc/ipamacs.tex
new file mode 120000
index 0000000000..1b935cbbac
--- /dev/null
+++ b/macros/generic/misc/ipamacs.tex
@@ -0,0 +1 @@
+../../../fonts/wsuipa/macros/ipamacs.tex \ No newline at end of file
diff --git a/macros/generic/misc/kbordermatrix.sty b/macros/generic/misc/kbordermatrix.sty
new file mode 100644
index 0000000000..67d486929f
--- /dev/null
+++ b/macros/generic/misc/kbordermatrix.sty
@@ -0,0 +1,151 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{kbordermatrix}[2011/09/21 Bordered matrix with brackets]
+
+% Author: Kim C Border <kcborder@caltech.edu>
+% Date: SuperBowl XXXVII (Go Bucs)
+
+% Revised 2003/09/20
+% to allow flush right option.
+% Revised 2011/09/21
+% at urging of Bruno Calfa (CMU)
+% to coexist with package arydshln
+% by adding \def\@xarraycr ...
+
+% Defines \kbordermatrix along the lines of plain tex's
+% \bordermatrix (which is still available in LaTeX).
+
+% In particular, as with \bordermatrix,
+% 1. It takes the array as an argument. It does not use \begin{}..\end{}.
+% Is this a feature or a bug?
+% 2. The first row is spaced a bit further apart from the rest.
+% 3. The lower (n-1) by (n-1) block is set off by delimiters.
+% 4. There is an invisible bottom row of the same height as the segregated
+% top row that adds to the height of the equation.
+
+% Differences from \bordermatrix:
+% 1. Square brackets are used in place of parentheses.
+% 2. You may use \\ instead of \cr.
+% 3. The line heights agree with LaTeX's line heights for the
+% array environment, and \arraystretch is respected. This means
+% the bottom (n-1) rows align with the rows of an (n-1)-rowed
+% \begin{array}..\end{array} (with or without delimiters).
+% 4. All columns are centered.
+% ** Modified 2003-9-20 to allow flush right option.
+% 5. The first column is spaced a bit further apart from the rest.
+
+
+% Differences from \left\[\begin{array}...\end{array}\right\]
+% 1. It takes the array as an argument. It does not use \begin{}..\end{}.
+% Is this a feature or a bug?
+% 2. Consequently, you cannot use a column specifier (e.g., {l|cr}).
+% 3. Consequently the maximum number of columns is not specified.
+% 4. Vertical rules must be put in each row in a separate column.
+% 5. You can use \hline and \cline.
+
+% At least it works in the cases I have tried, but I offer no guarantees.
+
+
+
+% cf. \bordermatrix p. 361, and \vrulealign p. 392 of The TeXbook
+
+
+
+% Style parameters, they may be redefined according to taste.
+ \newcommand{\kbldelim}{[} % Left delimiter
+ \newcommand{\kbrdelim}{]}% Right delimiter
+
+ \newcommand{\kbrowstyle}{\scriptstyle}% Style applied to first row
+ \newcommand{\kbcolstyle}{\scriptstyle}% Style applied to first column
+
+ \newlength{\kbcolsep} % Extra separation after first border column
+ \newlength{\kbrowsep} % Extra separation after first border row
+
+ \setlength{\kbcolsep}{.5\arraycolsep}
+ \setlength{\kbrowsep}{.2ex}
+
+ \newif\ifkbalignright
+
+% Scratch lengths (to be computed)
+ \newlength{\br@kwd} % Width of delimiter
+ \newlength{\k@bordht} % Height of border column
+
+% This is it
+\newcommand{\kbordermatrix}[1]{%
+\begingroup
+ % \br@kwd depends on font size, so compute it now.
+ \setbox0=\hbox{$\left\kbldelim\right.$}
+ \setlength{\br@kwd}{\wd0}
+ % Compute the array strut based on current value of \arraystretch.
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch\dp\strutbox
+ \@width\z@}
+ % Compute height of first row and extra space.
+ \setlength{\k@bordht}{\kbrowsep}
+ \addtolength{\k@bordht}{\ht\@arstrutbox}
+ \addtolength{\k@bordht}{\dp\@arstrutbox}
+ % turn off mathsurround
+ \m@th
+ % Set the first row style
+ \def\@kbrowstyle{\kbrowstyle}
+ % Swallow the alignment into box0:
+ \setbox0=\vbox{%
+ % Define \cr for first row to include the \kbrowsep
+ % and to reset the row style
+ \def\cr{\crcr\noalign{\kern\kbrowsep
+ \global\let\cr=\endline
+ \global\let\@kbrowstyle=\relax}}
+ % Redefine \\ a la LaTeX:
+ \let\\\@arraycr
+ % The following are needed to make a solid \vrule with no gaps
+ % between the lines.
+ \lineskip\z@skip
+ \baselineskip\z@skip
+ % Compute the length of the skip after the first column
+ \dimen0\kbcolsep \advance\dimen0\br@kwd
+ % Here begins the alignment:
+ \ialign{\tabskip\dimen0 % This space will show up after the first column
+ \kern\arraycolsep\hfil\@arstrut$\kbcolstyle ##$\hfil\kern\arraycolsep&
+ \tabskip\z@skip % Cancel extra space for other columns
+ \kern\arraycolsep\hfil$\@kbrowstyle ##$\ifkbalignright\relax\else\hfil\fi\kern\arraycolsep&&
+ \kern\arraycolsep\hfil$\@kbrowstyle ##$\ifkbalignright\relax\else\hfil\fi\kern\arraycolsep\crcr
+ % That ends the template.
+ % Here is the argument:
+ #1\crcr}% End \ialign
+ }% End \setbox0.
+ % \box0 now holds the array.
+ %
+ % This next line uses \box2 to hold a throwaway
+ % copy of \box0, leaving \box0 intact,
+ % while putting the last row in \box5.
+ \setbox2=\vbox{\unvcopy0 \global\setbox5=\lastbox}
+ % We want the width of the first column,
+ % so we lop off columns until there is only one left.
+ % It's not elegant or efficient, but at 1 gHz, who cares.
+ \loop
+ \setbox2=\hbox{\unhbox5 \unskip \global\setbox3=\lastbox}
+ \ifhbox3
+ \global\setbox5=\box2
+ \global\setbox1=\box3
+ \repeat
+ % \box1 now holds the first column of last row.
+ %
+ % This next line stores the alignment in \box2,
+ % while calculating the proper
+ % delimiter height and placement.
+ \setbox2=\hbox{$\kern\wd1\kern\kbcolsep\kern-\arraycolsep
+ \left\kbldelim
+ \kern-\wd1\kern-\kbcolsep\kern-\br@kwd
+ %
+ % Here is the output. The \vcenter aligns the array with the "math axis."
+ % The negative vertical \kern only shrinks the delimiter's height.
+ % BTW, I didn't find this in the TeXbook,
+ % I had to try various \kerns to see what they did in a
+ % \left[\vcenter{}\right].
+ \vcenter{\kern-\k@bordht\vbox{\unvbox0}}
+ \right\kbrdelim$}
+ \null\vbox{\kern\k@bordht\box2}
+ %
+ \endgroup
+}
+
diff --git a/macros/generic/misc/laps.tex b/macros/generic/misc/laps.tex
new file mode 100644
index 0000000000..b8b2d54b64
--- /dev/null
+++ b/macros/generic/misc/laps.tex
@@ -0,0 +1,14 @@
+%%% File: Laps.TeX
+\catcode`\@=11 % Let's pretend @ is a letter
+% Vertical `laps'; cf. \llap and \rlap
+\long\def\ulap#1{\vbox to \z@{\vss#1}}
+\long\def\dlap#1{\vbox to \z@{#1\vss}}
+
+% And centered horizontal and vertical `laps'
+\def\xlap#1{\hbox to \z@{\hss#1\hss}}
+\long\def\ylap#1{\vbox to \z@{\vss#1\vss}}
+
+% And a `lap' centered on its midpoint
+\long\def\zlap#1{\ylap{\xlap{#1}}}
+
+\catcode`\@=12 % That's enough pretending for one day.
diff --git a/macros/generic/misc/letterspacing.tex b/macros/generic/misc/letterspacing.tex
new file mode 100644
index 0000000000..d73d9ed533
--- /dev/null
+++ b/macros/generic/misc/letterspacing.tex
@@ -0,0 +1,319 @@
+% Self-documenting file
+
+\ifx \Comment \Undefined
+ \long \def \Comment #1\EndComment {}
+\else
+ \ifx \EndComment \Undefined
+ \def \EndComment
+ {\message {Error: \noexpand \EndComment encountered
+ without preceding \noexpand \Comment}}
+ \else %%% both defined; let's hope they're the right definitions!
+ \fi
+\fi
+
+\Comment
+This file, "letterspacing.tex", created by Philip Taylor of
+Royal Holloway, University of London (P.Taylor@Rhul.Ac.Uk) for
+Kaveh Bazargan of Focal Image (Kaveh@Focal.Demon.Co.Uk) may be
+freely distributed provided that the following licence conditions
+are honoured :
+\EndComment
+
+\Comment % The Licence
+ Unlimited copying and redistribution of this file
+ is permitted so long as the file is not modified
+ in any way.
+
+ Modifications may be made for private purposes (though
+ this is discouraged, as it could result in documents
+ typesetting differently on different systems) but if
+ such modifications are re-distributed, the modified
+ file must not be capable of being confused with the
+ original. In particular, this means
+
+(a) the filename (the portion before the extension, if any)
+ must not match any of :
+
+ LETTERSPACE LETTER-SPACE
+ LETTERSPACING LETTER-SPACING
+
+ regardless of case, and
+
+(b) the file must contain conditions identical to these,
+ except that the modifier/distributor may, if he or she
+ wishes, augment the list of proscribed filenames.
+\EndComment
+
+\Comment
+As far as is possible, `inaccessible' control sequences (i.e.~control sequences
+containing one or more commercial-at$\,$s) are used to minimise the risk of
+accidental collision with user-defined macros; however, the control sequences
+used to access the natural dimensions of the text are required to be user
+accessible, and therefore must contain only letters.
+\EndComment
+
+%%% Open control sequences
+
+\newdimen \naturalwidth
+\newdimen \naturaldepth
+\newdimen \naturalheight
+
+\Comment
+All control sequences defined hereafter are inaccessible to the casual user,
+including the control sequence used to store the category code of commercial-at;
+this catcode must be saved in order to be able to re-instate it at end of
+module, as we have no idea in what context the module will be |\input|. Having
+saved the catcode of commercial-at, we then change it to |11| (i.e.~that of a
+letter) in order to allow it to be used in the cs-names which follow.
+\EndComment
+
+%%% Concealed control sequences
+
+\expandafter \chardef
+ \csname \string @code\endcsname =
+ \the \catcode `\@
+\catcode `\@ = 11
+
+\Comment
+We will need a a box register in order to measure the natural dimensions of
+the text, and a token-list register in which to save the tokens to be
+letter-spaced.
+\EndComment
+
+\newbox \l@tterspacebox
+\newtoks \l@tterspacetoks
+
+\Comment
+We will need to test whether a particular macro expands to a space, so we will
+need another macro which does so expand with which to compare it; we will
+also need a `more infinite' variant of |\hss|.
+\EndComment
+
+\def \sp@ce { }
+\def \hsss
+ {\hskip 0 pt plus 1 fill minus 1 fill\relax}
+
+\Comment
+Many of the macros will used delimited parameter structures, typically
+terminated by the reserved control sequence |\@nd|; we make this a synonym
+for the empty macro (which expands to nothing), so that should it accidentally
+get expanded there will be no side effects. We also define a brief synonym
+for |\expandafter|, just to keep the individual lines of code reasonably short.
+\EndComment
+
+\let \@nd = \empty
+\let \@x = \expandafter
+
+\Comment
+We will also need to compare a token which has been peeked at by |\futurelet|
+with a space token; because of the difficulty of accessing such a space
+token (which would usually be absorbed by a preceding control word), we
+establish |\sp@cetoken| as a synonym. The code to achieve this is messy,
+because of the very difficulty just outlined, and so we `waste' a control
+sequence |\t@mp|; we then return this to the pool of undefined tokens.
+\EndComment
+
+\let \sp@cetoken = \relax
+\edef \t@mp {\let \sp@cetoken = \sp@ce}
+\t@mp \let \t@mp = \undefined
+
+\Comment
+The user-level macro |\letterspace| has exactly the same syntax as that for
+|\hbox| and |\vbox|, as explained in the introduction; the delimited parameter
+structure for this macro ensures that everything up to the open brace which
+delimits the beginning of the text to be letter-spaced is absorbed as parameter
+to the macro, and the brace-delimited text which follows is then assigned to the
+token-list register |\l@tterspacetoks|; |\afterassignment| is used to regain
+control once the assignment is complete.
+\EndComment
+
+%%% Primary (user-level) macro
+
+\def \letterspace #1#%
+ {\def \hb@xmodifier {#1}%
+ \afterassignment \l@tterspace
+ \l@tterspacetoks =
+ }
+
+\Comment
+Control then passes to |\l@tterspace|, which starts by setting an |\hbox|
+containing the text to be typeset; the dimensions of this box (and therefore
+of the text) are then saved in the open control sequences previously declared,
+and the |\hbox| becomes of no further interest.
+
+A new |\hbox| is now created, in which the same text, but this time
+letter-spaced, will be set; the box starts and ends with |\hss| glue so that if
+only a single character is to be letter-spaced, it will be centered in the box.
+If two or more characters are to be letter-spaced, they will be separated by
+|\hsss| glue, previously declared, which by virtue of its greater degree of
+infinity will completely override the |\hss| glue at the beginning and end;
+thus the first and last characters will be set flush with the edges of the box.
+
+The actual mechanism by which letter-spacing takes place is not yet apparent,
+but it will be seen that it is crucially dependent on the definition of
+|\l@tt@rspace|, which is expanded as the box is being set; the |\@x|
+(|\expandafter|) causes the actual tokens stored in |\l@tterspacetoks| to be
+made available as parameter to |\l@tt@rspace| rather than the token-list
+register itself, as it is these tokens on which |\l@tt@rspace| will operate.
+The |\@nd| terminates the parameter list, and the |{}| which immediately
+precedes it ensures that that there is always a null element at the end of the
+list: without this, the braces which are needed to protect an accent/character
+pair would be lost if such a pair formed the final element of the list, at the
+point where they are passed as the second (delimited) parameter to |\p@rtiti@n|;
+by definition, <TeX> removes the outermost pair of braces from both simple and
+delimited parameters during parameter substitution if such braces form the first
+and last tokens of the parameter, and thus if a brace-delimited group ever
+becomes the second element of a two-element list, the braces will be irrevocably
+lost. The |{}| ensure that such a situation can never occur.
+\EndComment
+
+%%% Secondary (implementation-level) macro
+
+\def \l@tterspace
+ {\setbox \l@tterspacebox = \hbox
+ {\the \l@tterspacetoks}%
+ \naturalwidth = \wd \l@tterspacebox
+ \naturaldepth = \dp \l@tterspacebox
+ \naturalheight = \ht \l@tterspacebox
+ \hbox \hb@xmodifier
+ \bgroup
+ \hss
+ \@x \l@tt@rspace
+ \the \l@tterspacetoks {}\@nd
+ \hss
+ \egroup
+ }
+
+\Comment
+The next macro is |\l@tt@rspace|, which forms the crux of the entire operation.
+The text to be letter-spaced is passed as parameter to this macro, and the
+first step is to check whether there is, in fact, any such text; this is
+necessary both to cope with pathological usage (e.g.~|\letterspace {}|), and to
+provide an exit route, as the macro uses tail-recursion to apply itself
+iteratively to the `tail' of the text to be letter-spaced; when no elements
+remain, the macro must exit.
+
+Once the presence of text has been ensured, the token-list representing
+this text is partitioned into a head (the first element), and the tail
+(the remainder); at each iteration, only the head is considered, although
+if the tail is empty (i.e.~the end of the list has been reached), special
+action is taken.
+
+If the first element is a space, it is treated specially by surrounding it
+with two globs of |\hsss| glue, to provide extra stretchability when compared
+to the single glob of |\hsss| glue which will separate consecutive non-space
+tokens; otherwise, the element itself is yielded, followed by a single glob
+of |\hsss| glue. This glue is suppressed if the element is the last of the
+list, to ensure that the last token aligns with the edge of the box.
+
+When the first element has been dealt with, the macro uses tail
+recursion to apply itself to the remaining elements (i.e.~to the tail);
+|\@x| (|\expandafter|) is again used to ensure that the tail is expanded
+into its component tokens before being passed as parameter.
+\EndComment
+
+%%% Tertiary (implementation-level) macro
+
+\def \l@tt@rspace #1\@nd
+ {\ifx \@nd #1\@nd
+ \let \n@xt = \relax
+ \else
+ \p@rtition #1\@nd
+ \ifx \h@ad \sp@ce \hsss \h@ad \hsss
+ \else
+ \h@ad
+ \ifx \t@il \@nd \else \hsss \fi
+ \fi
+ \@x \def \@x \n@xt \@x
+ {\@x \l@tt@rspace \t@il \@nd}%
+ \fi
+ \n@xt
+ }
+
+\Comment
+The operation of token-list partitioning is conceptually simple: one passes the
+token list as parameter text to a macro defined to take two parameters, the
+first simple and the second delimited; the first element of the list will be
+split off as parameter-1, and the remaining material passed as parameter-2.
+Unfortunately this na\"\i ve approach fails when the first element is a bare
+space, as the semantics of <TeX> prevent such a space from ever being passed as
+a simple parameter (it could be passed as a delimited parameter, but as one
+does not know what token follows the space, defining an appropriate delimiter
+structure would be tricky if not impossible). The technique used here relies
+upon the adjunct macro |\m@kespacexplicit|, which replaces a leading bare space
+by a space protected by braces; such spaces may legitimately be passed as simple
+parameters. Once that operation has been completed, the re-constructed token
+list is passed to |\p@rtiti@n|, which actually performs the partitioning as
+above; again |\@x| (|\expandafter|) is used to expand |\b@dy| (the
+re-constructed token list) into its component elements before being passed as
+parameter text.
+\EndComment
+
+%%% Adjunct macros -- list partitioning
+
+\def \p@rtition #1\@nd
+ {\m@kespacexplicit #1\@nd
+ \@x \p@rtiti@n \b@dy \@nd
+ }
+
+\def \p@rtiti@n #1#2\@nd
+ {\def \h@ad {#1}%
+ \def \t@il {#2}%
+ }
+
+\Comment
+The operation of making a space explicit relies on prescience: the code needs
+to know what token starts the token list before it knows how to proceed.
+Prescience in <TeX> is usually accomplished by |\futurelet|, and this code
+is no exception: |\futurelet| here causes |\h@ad| to be |\let| equal to
+the leading token, and control is then ceded to |\m@kesp@cexplicit|.
+
+The latter compares |\h@ad| with |\sp@cetoken| (remember the convolutions we
+had to go through to get |\sp@cetoken| correctly defined in the first place),
+and if they match (i.e.~if the leading token is a space), then |\b@dy|
+(the control sequence through which the results of this operation will
+be returned) is defined to expand to a protected space (a space surrounded by
+braces), followed by the remainder of the elements; if they do not match
+(i.e.~if the leading token is \stress {not} a space), then |\b@dy| is simply
+defined to be the original token list, unmodified. If the leading token
+\stress {was} a space, it must be replaced by a protected space: this is
+accomplished by |\pr@tectspace|.
+
+The |\pr@tectspace| macro uses a delimited parameter structure, as do most
+of the other macros in this suite, but the structure used here is unique,
+in that the initial delimiter is a space. Thus, when a token-list starting
+with a space is passed as parameter text, that space is regarded as matching
+the space in the delimiter structure and removed; the expansion of the macro
+is therefore the tokens remaining once the leading space has been removed,
+preceded by a protected space |{ }|.
+\EndComment
+
+%%% Adjunct macros -- <space>... -> {<space>}...
+
+\def \m@kespacexplicit #1\@nd
+ {\futurelet \h@ad \m@kesp@cexplicit #1\@nd}
+
+\def \m@kesp@cexplicit #1\@nd
+ {\ifx \h@ad \sp@cetoken
+ \@x \def \@x \b@dy
+ \@x {\pr@tectspace #1\@nd}%
+ \else
+ \def \b@dy {#1}%
+ \fi
+ }%
+
+\@x \def \@x \pr@tectspace \sp@ce #1\@nd {{ }#1}
+
+\Comment
+The final step is to re-instate the category code of commercial-at.
+\EndComment
+
+%%% re-instate category code of commercial-at
+
+\catcode `\@ = \the \@code
+
+\Comment
+Thus letter-spacing is accomplished. The author hopes both that the code will
+be found useful and that the explanation which accompanies it will be found
+informative and interesting.
+\EndComment
diff --git a/macros/generic/misc/longdiv.tex b/macros/generic/misc/longdiv.tex
new file mode 100644
index 0000000000..4c9a1d4fd1
--- /dev/null
+++ b/macros/generic/misc/longdiv.tex
@@ -0,0 +1,53 @@
+% longdiv.tex v.1 (1994) Donald Arseneau
+%
+% Work out and print integer long division problems. Use:
+% \longdiv{numerator}{denominator}
+% The numerator and denominator (divisor and dividend) must be integers, and
+% the quotient is an integer too. \longdiv leaves a remainder.
+% Use this in any type of TeX.
+
+\newcount\gpten % (global) power-of-ten -- tells which digit we are doing
+\countdef\rtot2 % running total -- remainder so far
+\countdef\LDscratch4 % scratch
+
+\def\longdiv#1#2{%
+ \vtop{\normalbaselines \offinterlineskip
+ \setbox\strutbox\hbox{\vrule height 2.1ex depth .5ex width0ex}%
+ \def\showdig{$\underline{\the\LDscratch\strut}$\cr\the\rtot\strut\cr
+ \noalign{\kern-.2ex}}%
+ \global\rtot=#1\relax
+ \count0=\rtot\divide\count0by#2\edef\quotient{\the\count0}%\show\quotient
+ % make list macro out of digits in quotient:
+ \def\temp##1{\ifx##1\temp\else \noexpand\dodig ##1\expandafter\temp\fi}%
+ \edef\routine{\expandafter\temp\quotient\temp}%
+ % process list to give power-of-ten:
+ \def\dodig##1{\global\multiply\gpten by10 }\global\gpten=1 \routine
+ % to display effect of one digit in quotient (zero ignored):
+ \def\dodig##1{\global\divide\gpten by10
+ \LDscratch =\gpten
+ \multiply\LDscratch by##1%
+ \multiply\LDscratch by#2%
+ \global\advance\rtot-\LDscratch \relax
+ \ifnum\LDscratch>0 \showdig \fi % must hide \cr in a macro to skip it
+ }%
+ \tabskip=0pt
+ \halign{\hfil##\cr % \halign for entire division problem
+ $\quotient$\strut\cr
+ #2$\,\overline{\vphantom{\big)}%
+ \hbox{\smash{\raise3.5\fontdimen8\textfont3\hbox{$\big)$}}}%
+ \mkern2mu \the\rtot}$\cr\noalign{\kern-.2ex}
+ \routine \cr % do each digit in quotient
+}}}
+
+\endinput % Demonstration below:
+
+\noindent Here are some long division problems
+
+\indent
+\longdiv{12345}{13} \quad
+\longdiv{123}{1234} \quad
+\longdiv{31415926}{2} \quad
+\longdiv{81}{3} \quad
+\longdiv{1132}{99} \quad
+\longdiv{86491}{94}
+\bye
diff --git a/macros/generic/misc/mandel.tex b/macros/generic/misc/mandel.tex
new file mode 100644
index 0000000000..e008dc98f2
--- /dev/null
+++ b/macros/generic/misc/mandel.tex
@@ -0,0 +1,139 @@
+% TeX Mandelbrot Program
+%
+% My entry for the contest ``The most useless TeX program ever written''.
+% Can anyone top that? (Don't mention MusicTeX in this context. That's not
+% meant to be a joke.)
+% Also welcome: Improvements of this saving on TeX's resources. This takes
+% more than five minutes on my NeXT 486/66.
+%
+% Seb, 6.7.94
+%
+% (seb@balu.afp.ruhr-uni-bochum.de)
+%
+%
+% parameters that you can modify:
+%
+% \x, \y, \xmax, \ymax in units of 10000
+\newcount\x
+\x=-20000 % means -2.000 for real part of start value
+\newcount\y
+\y=-20000 % imaginary part
+\newcount\xmax
+\xmax=20000 % end value, real
+\newcount\ymax
+\ymax=20000 % end value, imaginary
+%
+% calculation depth
+\newcount\mandeldepth
+\mandeldepth=100
+%
+%
+% recursation depth = number of pixels.
+\newcount\xsize % (Don't go wild, tail recursion
+\xsize=100 % uses loads of TeX memory!)
+\newcount\ysize
+\ysize=100
+%
+% picture size
+\newdimen\height
+\newdimen\width
+\height=10cm
+\width=10cm
+%
+% that was all the parameters!
+%
+%
+% pixel size:
+\newdimen\xgrid
+\xgrid=\height
+\divide\xgrid by\xsize
+\newdimen\ygrid
+\ygrid=\width
+\divide\ygrid by\ysize
+%
+\nopagenumbers
+%
+\newcount\stepX % work out step sizes
+\stepX=\xmax
+\advance\stepX by -\x
+\divide\stepX by\xsize
+\newcount\stepY
+\stepY=\ymax
+\advance\stepY by -\y
+\divide\stepY by\ysize
+%
+\def\cout#1{\immediate\write16{#1}} % type out debug message
+%
+\def\yes{Y} % some stupid logical macros
+\def\no{N}
+\def\notyet{x}
+%
+\newcount\u % variables for calculation
+\newcount\v
+\newcount\newV
+\newcount\newU
+\newcount\d
+\newcount\h
+\def\runmandel{% % recursive Mandelbrot macro
+ \newU=\u%
+ \multiply\newU by \u% % newU := u^2
+ \h=\v%
+ \multiply\h by \v% % h := v^2
+ \advance\newU by -\h% % newU := u^2 - v^2
+ \h=\x%
+ \multiply\h by 10000% % h := x * 10000 (normalize)
+ \advance\newU by \h% % newU := newU + h
+ \divide\newU by 10000% % renormalize u
+ \newV=\u%
+ \multiply\newV by \v%
+ \multiply\newV by 2% % newV := 2 *u * v
+ \h=\y%
+ \multiply\h by 10000% % h := y * 10000
+ \advance\newV by \h% % newV := newV + h
+ \divide\newV by 10000% % renormalize v
+ \u=\newU% % newU = u^2 - v^2 + x
+ \v=\newV% % newV = 2 * u * v + y
+ \advance\d by 1%
+ % \cout{d: \the\d, u: \the\u, v: \the\v}%
+ \ifnum\d>\mandeldepth% % member ofthe Mandelbrot set
+ \def\result{\yes}%
+ \fi%
+ \ifnum\u<-20000%
+ \def\result{\no}% % real part exceeded -2
+ \fi%
+ \ifnum\u>20000%
+ \def\result{\no}% % real part exceeded 2
+ \fi%
+ \ifnum\v<-20000%
+ \def\result{\no}% % imaginary part exceeded -2
+ \fi%
+ \ifnum\v>20000%
+ \def\result{\no}% % real part exceeded 2
+ \fi%
+ \if\notyet\result\runmandel\fi% % play it again...
+}%
+\def\result{\yes}%
+\def\makeline{\advance\x by \stepX%
+ %\cout{testing \the\x = i * \the\y}%
+ \u=0%
+ \v=0%
+ \d=0%
+ \def\result{\notyet}%
+ \runmandel% result expands to either yes or no now
+ \if\result\yes%
+ \vrule height \xgrid depth 0pt width \ygrid%
+ \else%
+ \vrule height \xgrid depth 0pt width 0pt\hskip\xgrid%
+ \fi%
+ \ifnum\x<\xmax%
+ \makeline%
+ \else\fi}%
+\def\makepicture{\advance\y by \stepY%
+ \hbox{\makeline}%
+ %\cout{y in makepicture: \the\y}%
+ \ifnum\y<\ymax%
+ \makepicture%
+ \else\fi}%
+\vbox{\offinterlineskip\makepicture} % now, let's go tail
+\bye % recursive!
+
diff --git a/macros/generic/misc/mathlig.tex b/macros/generic/misc/mathlig.tex
new file mode 100644
index 0000000000..04194b8493
--- /dev/null
+++ b/macros/generic/misc/mathlig.tex
@@ -0,0 +1,131 @@
+%
+% mathlig.tex
+%
+% (c) 2001 Jules Bean <jules@jellybean.co.uk>
+% Permission is granted to freely use, copy, and distribute
+% without restriction. Permission is also granted to distribute
+% modified versions and incorporate into your own macro packages
+% if a brief acknowledgement is given.
+%
+% Version 1.0 11 May 2001
+
+% Define 'mathmode' ligatures, as in
+%
+%\mathlig{->}{\rightarrow}
+%\mathlig{<-}{\leftarrow}
+%\mathlig{<->}{\leftrightarrow}
+%
+% Works even if they have common prefixes (takes the longest match,
+% then backtracks).
+%
+% Can be used to create ligatures even if the second
+% and subsequent characters have weird catcodes, but I don't recommend
+% it.
+
+\count255\catcode`@
+\catcode`@=11
+\chardef\mathlig@atcode\count255
+
+% Let or def an 'active' version of a token. Thanks to Donald
+% Arseneau and groups.google.com
+\def\actively#1#2{\begingroup\uccode`\~=`#2\relax\uppercase{\endgroup#1~}}
+% Eat the next token, and then pass control to mathlig@next@cmd
+\def\mathlig@gobble{\afterassignment\mathlig@next@cmd\let\mathlig@next= }
+% Used to delimit delimited arguments, and ifx tests for emptyness.
+\def\mathlig@delim{\mathlig@delim}
+% Some macros to help dealing with 'computed names' (csnames).
+% Just like def, but first parameter is evaluated as a csname
+\def\mathlig@defcs#1{\expandafter\def\csname#1\endcsname}
+% A version of \let <normal cs><computed cs>
+\def\mathlig@let@cs#1#2{\expandafter\let\expandafter#1\csname#2\endcsname}
+% Maintain a 'list' of tokens as a macro which expands to them
+\def\mathlig@appendcs#1#2{\expandafter\edef\csname#1\endcsname{\csname#1\endcsname#2}}
+
+% The main externally visible macro.
+% Defines '#1' as a 'ligature' to expand to #2
+% First uses \mathlig@checklig to make sure that all initial segments of
+% #1 as set up as ligatures.
+% Then sets the ligature #1 to expand to #2.
+\def\mathlig#1#2{\mathlig@checklig#1\mathlig@end\mathlig@defcs{mathlig@back@#1}{#2}\ignorespaces}
+
+% All the @check macros should be idempotent: they set up the definitions
+% only if it hasn't already been done.
+
+%Check #1#2 can be a ligature:
+% Check #1 is math-active.
+% If not, save the mathcode, set the macros #1
+%Now check the suffix tables with \checkrest
+\def\mathlig@checklig#1#2\mathlig@end{%
+ \expandafter\ifx\csname mathlig@forw@#1\endcsname\relax
+ \expandafter\mathchardef\csname mathlig@back@#1\endcsname=\mathcode`#1%
+ \mathcode`#1"8000\actively\def#1{\csname mathlig@look@#1\endcsname}%
+ \mathlig@dolig#1\mathlig@delim
+\fi
+\mathlig@checksuffix#1#2\mathlig@end
+}
+
+%Two-part macro.
+%Check suffix tables. If #2 is empty, no suffix!
+%Otherwise, we make sure #2 is a valid suffix for #1,
+%then recurse for #3 on #1#2
+\def\mathlig@checksuffix#1#2\mathlig@end{%
+\ifx\mathlig@delim#2\mathlig@delim\relax\else\mathlig@checksuffix@{#1}#2\mathlig@end\fi
+}
+\def\mathlig@checksuffix@#1#2#3\mathlig@end{%
+\expandafter\ifx\csname mathlig@forw@#1#2\endcsname\relax\mathlig@dosuffix{#1}{#2}\fi
+\mathlig@checksuffix{#1#2}#3\mathlig@end
+}
+
+% The do macros should not be called more than once for a given ligature.
+
+% Add #2 to the list of valid suffixes for #1
+% Then make the ligature for #1#2 one which only backtracks, for now
+\def\mathlig@dosuffix#1#2{%
+\mathlig@appendcs{mathlig@toks@#1}{#2}%
+\mathlig@dolig{#1}{#2}\mathlig@delim
+}
+
+% Setup #1#2 so that ligatures beginning #1#2 work.
+% Such ligatures will look at what's coming next (in case
+% of a longer ligature) and, failing that,
+% backtrack to just #1
+
+\def\mathlig@dolig#1#2\mathlig@delim{%
+%The look macro just \futurelets what's coming up and
+%then passes control to forw
+ \mathlig@defcs{mathlig@look@#1#2}{%
+ \mathlig@let@cs\mathlig@next{mathlig@forw@#1#2}\futurelet\mathlig@next@tok\mathlig@next}%
+%The forw macro uses chck to try all possible suffixes, passing control
+%either to one of those, or to the back macro
+ \mathlig@defcs{mathlig@forw@#1#2}{%
+ \mathlig@let@cs\mathlig@next{mathlig@back@#1#2}%
+ \mathlig@let@cs\checker{mathlig@chck@#1#2}%
+ \mathlig@let@cs\mathligtoks{mathlig@toks@#1#2}%
+ \expandafter\ifx\expandafter\mathlig@delim\mathligtoks\mathlig@delim\relax\else
+ \expandafter\checker\mathligtoks\mathlig@delim\fi
+ \mathlig@next
+ }%
+%The toks macro just stores the suffixes
+ \mathlig@defcs{mathlig@toks@#1#2}{}%
+%The chk macro goes through the suffixes one by one
+%tail recursing until it runs out, or finds one.
+ \mathlig@defcs{mathlig@chck@#1#2}##1##2\mathlig@delim{%
+ %\message{Lig so far '#1#2', checking for '##1'}%
+ \ifx\mathlig@next@tok##1%
+ \mathlig@let@cs\mathlig@next@cmd{mathlig@look@#1#2##1}\let\mathlig@next\mathlig@gobble
+ \fi
+ \ifx\mathlig@delim##2\mathlig@delim\relax\else
+ \csname mathlig@chck@#1#2\endcsname##2\mathlig@delim
+ \fi
+ }%
+%
+% The back macro, defined only if this is a ligature of at least
+% two characters, is a default fallback: go back to the previous char.
+% (If this is a ligature of only one character, the mathcode will have
+% been saved and set as the fallback elsewhere)
+ \ifx\mathlig@delim#2\mathlig@delim\else
+ \mathlig@defcs{mathlig@back@#1#2}{\csname mathlig@back@#1\endcsname #2}%
+ \fi
+}%
+
+\catcode`@\mathlig@atcode
diff --git a/macros/generic/misc/nth.sty b/macros/generic/misc/nth.sty
new file mode 100644
index 0000000000..8a96c73903
--- /dev/null
+++ b/macros/generic/misc/nth.sty
@@ -0,0 +1,56 @@
+% nth.sty version 2002/27/02 Donald Arseneau
+% Ordinal numbering style, 1st 2nd 3rd 4th 5th... 12th... 101st 102nd...
+%
+% (Public domain: take, include, extract, whatever)
+%
+% In LaTeX:
+% \usepackage[super,negative]{nth}
+% where option [super] gives superscript `th'
+% and option [negative] allows ``st, nd, rd'' suffixes on negative numbers.
+%
+% example: \renewcommand{\thesection}{\ordinal{section}}
+% or \renewcommand{\thesection}{\@ordinal\c@section}
+% or \renewcommand{\thesection}{\nth\c@section}
+%
+% In plain TeX:
+% \input nth.sty
+% use: \nth{<number>}.
+% Change formatting by redefining \nthscript and \nthtest
+
+\def\nth#1{% First print number:
+ \expandafter\nthM \number #1\relax
+ \nthscript{%
+ \ifnum#1\nthtest0 th\else % negatives are all ``th'' (depending on \nthtest)
+ \expandafter \nthSuff \expandafter 0\number\ifnum #1<0-\fi#1\delimiter
+ \fi
+ }}
+
+% Minus sign using math mode:
+\def\nthM#1{\if -#1\ifmmode-\else$-$\fi\else #1\fi}
+
+% Print suffix depending on last two digits:
+\def\nthSuff#1#2#3{%
+ \ifx \delimiter#3% #1#2 are last two digits
+ \ifnum #1=1 th% teens are always ``th''
+ \else % use appropriate suffix
+ \ifcase #2 th\or st\or nd\or rd\else th\fi
+ \fi
+ \else % continue scanning for last two digits
+ \expandafter \nthSuff \expandafter #2\expandafter #3%
+ \fi}
+
+% Formatting hook for ordinals (\let\nthscript\textsuperscript)
+\def\nthscript#1{#1}% alternate: \def\nthscript#1{$\rm^{#1}$}
+
+% Formatting hook for all negative numbers giving ``th''
+\def\nthtest{<} % alternate: \def\nthtest{=}
+
+\ifx\Alph\undefined\else
+ \def\ordinal#1{\expandafter\@ordinal\csname c@#1\endcsname}
+ \let\@ordinal\nth
+ \ProvidesPackage{nth}[2002/02/27]
+ \DeclareOption{super}{\def\nthscript{\textsuperscript}}
+ \DeclareOption{negative}{\def\nthtest{=}}
+ \ProcessOptions
+\fi
+
diff --git a/macros/generic/misc/outerhbox.sty b/macros/generic/misc/outerhbox.sty
new file mode 100644
index 0000000000..75b618dc9a
--- /dev/null
+++ b/macros/generic/misc/outerhbox.sty
@@ -0,0 +1,86 @@
+% Copyright (c) 2005 Jonathan Fine <jfine@pytex.org>
+% License: GPL version 2 or (at your option) any later version.
+% $Source: /cvsroot/pytex/pytex/texmacros/outerhbox.sty,v $
+
+% $Log: outerhbox.sty,v $
+% Revision 1.2 2005/10/06 07:00:19 jfine
+% Added description, as provided to CTAN
+%
+% Revision 1.1 2005/10/06 06:32:18 jfine
+% As posted to comp.text.tex, but \outerhbox instead of \outerbox
+
+% Collects horizontal mode material into an \hbox, suitable for later
+% \unhbox'ing into a paragraph. For use with plain, LaTeX, ConTeXt, etc.
+
+% Provides \outerhbox, which is roughly similar to \hbox, except that
+% material is set in outer horizontal mode. This prevents TeX from
+% optimising away math penalties and the like, that are needed when the
+% material is \unhbox'ed.
+
+% Based on code I posted to comp.text.tex
+
+% Message-ID: <43399D5A.50803@pytex.org>
+% Date: Tue, 27 Sep 2005 20:28:26 +0100
+% Newsgroups: comp.text.tex
+% Subject: Re: overlong lines in List of Figures
+% <http://groups.google.com/group/comp.text.tex/msg/56ea490ad6d13dae>
+
+\ifx\undefined\outerhbox
+\else\endinput\fi
+
+\ifx \documentstyle \undefined \else
+ \ifx \documentclass \undefined
+ \else \ProvidesPackage{outerhbox}[2005/09/29] \fi
+\fi
+
+
+\long\def\outerhbox #1%
+% like \hbox, but sets material in outer horizontal mode
+% #1 - horizontal material, to be set in outer horizontal mode
+% Note: inappropriate commands in #1 can cause an \outerhboxerror
+{%
+ \hbox{%
+ \setbox0 \vbox{%
+ \hsize\maxdimen
+ \pretolerance -1
+ \rightskip 0pt
+ \parfillskip 0pt plus 1fil
+ \noindent #1\endgraf
+ \global\setbox1 \lastbox
+ }%
+ % check that size of \box 0 is 0.0+0.0x0.0
+ \ifcase
+ % skip to \else if any dimension is non-zero
+ \ifcase\wd0 \else 1 \fi
+ \ifcase\ht0 \else 1 \fi
+ \ifcase\dp0 \else 1 \fi
+ 0 % satisfy the \ifcase
+ %
+ % place material into \hbox
+ \unhbox 1
+ \unskip % remove \rightskip glue
+ \unskip % remove \parfillskip glue
+ \unpenalty % remove paragraph ending \penalty 10000
+ \else
+ % there's something left in \box 0
+ \outerhboxerror % default handler is to be \undefined
+ \fi
+ }%
+}
+
+% \endinut % some test code follows
+
+\tracingall
+\tracingonline = 1
+% \nonstopmode
+
+\setbox 0 \hbox{$2+2=2$} \showbox 0
+\setbox 0 \outerhbox{$2+2=2$} \showbox 0
+{ \leftskip 1in
+ \setbox 0 \outerhbox{$2+2=2$} \showbox 0
+}
+
+\setbox 0 \outerhbox{a\par b} \showbox 0
+\setbox 0 \outerhbox{} \showbox 0
+\setbox 0 \outerhbox{\ } \showbox 0
+\end
diff --git a/macros/generic/misc/pagereference.tex b/macros/generic/misc/pagereference.tex
new file mode 100644
index 0000000000..34ebc44c68
--- /dev/null
+++ b/macros/generic/misc/pagereference.tex
@@ -0,0 +1,67 @@
+%%%%%%%% PAGEREFERENCE MACROS
+% May 2nd, 1994
+% Peter Ungar, 914 723 7187, laxa@acfcluster.nyu.edu
+% 109 Lee Road, Scarsdale, N.Y. 10583-5229
+%
+\long\def\COMMENT#1!E{}
+%
+% MACROS BEGIN HERE
+\newwrite\inpr
+\message{Is this the second pass? (y or n)}
+\read16 to\answer
+\if n\answer\immediate\openout\inpr=\jobname.pgn%
+\def\wrx{\write\inpr}%
+\def\plbl*#1*{\wrx{\noexpand\let\csname prec#1\endcsname=\folio}}
+\def\pref*#1*{XX}
+\fi
+\if y\answer\closeout\inpr
+\input \jobname.pgn
+\def\plbl*#1*{}
+\def\pref*#1*{\csname prec#1\endcsname}
+\fi
+% MACROS END HERE
+
+\COMMENT
+
+ We use the macros as follow. Suppose you want to refer to a page
+where you say something about Pythagoras. Put at the place to
+which you want to refer
+\plbl*pyth* Where you want to refer to this page, put
+\pref*pyth* Here, in the place of pyth, one may use any sequence
+of small and capital letters. Since the sequence will end up as
+part of a TEX control sequence, digits are unfortunately not
+allowed. (If that is very burdensome, we suggest encoding digits
+as capitals, A for 1 etc.) In the second pass, the macros insert
+a page number where there is a \pref.
+
+ The macro \plbl (pagelabel), as defined when the answer to the
+question, Is this the second pass, was n, writes the page number
+into the file filename.pgn. To be precise, it creates a new
+control sequence, consisting of \prec followed by the letters
+identifying the label, which would result in \precpyth in the
+example we gave, and sets it equal to the page number. In the
+meanwhile, the \pref (page reference) macro is defined to print XX.
+ For the second pass, we input the file of labels and the page
+numbers they signify which we wrote in the first pass. The
+pagenumber recording macro
+\plbl is redefined as vacuous, and the page reference macro \pref
+is set to insert the page number.
+
+!E
+
+
+This is a test of the page reference macro pair,
+$\backslash$plbl (pagelabel) and $\backslash$pref (pagereference)
+control sequences. There is a pagelabel command, with no effect on
+the tpyeset output, just before the period at the end of this
+sentence\plbl*aaa*.
+
+Reference to the page label on the next page: p.\pref*bb*;
+reference to the pgae label on this page: p.\pref*aaa*.
+\vfill
+\eject Here is a second pagelabel, just before the
+period\plbl*bb*. A reference to the first page label:
+p.\pref*aaa*, and a reference to the second page page label:
+p.\pref*bb*.
+
+\end
diff --git a/macros/generic/misc/patch.doc b/macros/generic/misc/patch.doc
new file mode 100644
index 0000000000..92582583a5
--- /dev/null
+++ b/macros/generic/misc/patch.doc
@@ -0,0 +1,555 @@
+%\iffalse This is patch.doc, and it's -*-LaTeX-*- text
+%% patch.doc/patch.tex
+%% (c) 1994 by David Kastrup (dak@pool.informatik.rwth-aachen.de)
+%% Version 0.91
+%%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `not maintained'.
+%
+% The work consists of the source file patch.doc
+% and the derived file patch.tex
+%
+% This file is provided marked up according to an early version of LaTeX
+% `doc' format markup. Unfortunatly, docstrip for that version of doc is
+% no longer available; therefore stripping is to be done by removing all
+% lines starting with a single percent sign.
+% You may extract a driver file for printing the documentation with
+% the doc style package by extracting all lines starting with
+% %<+driver>, while removing the %<+driver> directive.
+%\fi
+% \CheckSum{360}
+% \title{Using {\tt patch.tex}}
+% \author{David Kastrup\\dak@gnu.org}
+% \date{January 22, 1994}
+% \maketitle
+% \MakeShortVerb\"
+% \begin{abstract}
+% Often one has the need to use a preestablished format, such
+% as~\LaTeX, but with some slight changes to some of the macros.
+% Of~course, it is possible to just copy the offendin maco
+% definitions into your application or style file, and~modify them
+% there. This can lead to parts of your macros being from different
+% versions of \LaTeX{} resp.~\TeX.
+%
+% This input file is a tool for replacing just parts of existing macros
+% by user defined parts. If those parts are no longer recognizable,
+% an~error message is produced, calling the user to~attention.
+% \end{abstract}
+% \tableofcontents
+% \section{User Interface}
+% The macros defined here will allow ``patching'' up already existing
+% macros. A~typical example, included from a~style file used for
+% typesetting Greek text (to~appear in "kdgreek") is the following:
+%\begin{verbatim}
+%\input patch.tex
+%\ifx\descriptionlabel\undefined\else
+%\gpatch\descriptionlabel#1{{#1}}{%
+% \bf {\grbf}} \fi
+%\ifx\@part\undefined\else
+%\gpatch\@part[#1]#2{[#1]{#2}}{%
+% \bf\partname~{\grbf\partname\nobreak\ }%
+% \bf {\grbf}} \fi
+%...
+%\endpatch
+%\end{verbatim}
+%This shows almost all features that are really there. You start by
+%inputting "patch.tex". This, among other things, opens a~local
+%group in which all of the definitions of~"patch.tex" are read~in.
+%In~order not to use up unnecessary hash~space, almost all local
+%commands are in the form~"\^^80" and upwards. For this reason,
+%you cannot {\em use\/} any macros of yours with such names
+%(Note: they are {\em
+%not\/} active characters, but rather regular one-letter control
+%sequences), and you should not patch them, but you can patch any
+%macros containing them, or patch them into macros.
+%
+%One macro is {\em very\/} special and must not appear in any macro
+%you patch, nor in any arguments to~"\patch": this is~"\@ndp@tch".
+%
+%\DescribeMacro{\patch}
+%\DescribeMacro{\gpatch}
+%You follow the "\input" by several "\patch" or "\gpatch"
+%commands. These commands
+%consist of several parts:
+%\begin{itemize}
+%\item[Optional "\bslash long"] for definition of macros possibly containing
+% "\par" tokens in their arguments. Note that the prefixes "\global"
+% and~"\outer" are not supported. "\global"ness is achieved by~usage
+% of~"\gpatch" as opposed to~"\patch", and is explained later, and
+% "\outer" macros are detestable.
+%\item ["\bslash patch" or "\bslash gpatch"] To be expected.
+%\item [\meta{Argument list}] which is the argument list the macro will
+% have in the patched version (usually the same as the original one).
+% It~is terminated by the opening brace of
+%\item [\meta{Argument replacement}] which is enclosed in braces. This
+% is fed as an argument list into the old macro, in order to get the
+% replacement text for the new macro. Basically this means that you
+% will have to use, say, "{#1}" for an undelimited parameter~"#1",
+% "#1@" for a delimited parameter "#1@", and "@$#!?!!" for a brace
+% delimited parameter "#1#{" (don't try patching any macros like
+% that. Presume you have never heard of~them).
+%\item [\meta{Substitution list}] This contains a~brace enclosed list
+% of~replacements. Each replacement consists of
+% \begin{itemize}
+% \item [\meta{Matching sequence}] which is a sequence of tokens not
+% containing any braces. If really need to match braces, you can
+% match by using implicit braces you get by saying something like
+% "\let\openbrace={". If you think of using the default implicit
+% braces "\bgroup" and~"\egroup", forget~it. They are used in
+% several macros we might want to~patch, and thus are disabled
+% by~default.
+% \item [\meta{Replacement sequence}] which is enclosed in~braces.
+% Again, if you want braces to appear in your replacement, you can
+% make that happen by using implicit braces. Matched braces,
+% however, you may include explicitly.
+% \end{itemize}
+%\end{itemize}
+%\DescribeMacro{\endpatch}
+%Then the patches are followed by~"\endpatch", which closes the group
+%opened by~"\input", thus freeing up almost all \TeX{} space
+%"patch.tex" took up. Since~mismatched patches can be hard to
+%diagnose, "\endpatch" is defined as being~"\outer". As~long as
+%the "\outer" nuisance prevails, we~might use it for what it~is
+%useful~for.
+%
+%That's all there is to it! Except for the "\global" issue we promised
+%to explain\dots{}
+%Usually you will be patching macros of some style, and there will be no
+%point in using~"\patch" instead of~"\gpatch". So~mostly "\gpatch" does
+%no harm, and will cause a~global definition. "\patch", on the other
+%hand, has the problem that its definitions should hold in the group
+%ended by~"\endpatch", but not globally. So~"\patch" cannot just make
+%the definitions. Instead, it collects the new definitions, and~does
+%them all at~"\endpatch".
+%
+%\DescribeMacro{\globaldefs}
+%Here is one friendly feature: If "\globaldefs" is negative,
+%"\gpatch"~will invoke "\patch" instead of its own behaviour, so that
+%local patches will be performed instead of none at~all (since the then
+%non-global definition would disappear at~"\endpatch"). This feature was
+%deemed desirable\footnote{Reason:
+%I~made an example file showing the effects of several
+%"\bslash documentstyle" commands with my Greek macro set. The Greek style
+%patched up some \LaTeX{} macros, and this was wanted only
+%locally, namely for the length of the demonstration of one particular
+%document style.}.
+%\subsection{Things to beware of (aka bugs)}
+%"patch.doc" is a very simple package (sort~of). It can fail for
+%a~number of reasons, and is not applicable in every situation. You
+%will have problems if
+%\begin{enumerate}
+%\item You use implicit tokens which are implicit at the time the
+% patches are applied. "\bgroup" and~"\egroup" are explicitly disabled
+% for this reason. Implicit spaces will be regarded as explicit ones
+% by~"\patch". Implicit macro parameter characters I~am not so sure
+% about. \TeX~behaves pretty wierd with regard to them anyhow. Other
+% implicits should do no~harm. "\patch"~will take the problematic
+% implicit
+% tokens for explicit ones while it is analyzing tokens. It analyzes
+% both matching and replacement tokens, and all tokens in the original
+% macro up to the last replacement performed. This means that, for
+% example, matching implicit braces in locations where you did not
+% intend it can lead to mismatched explicit braces and lots
+% of~confusion.
+%\item You use outer tokens in any respect.
+% "\patch" does not care for them.
+%\item When "\@ndp@tch" appears anywhere, namely in a~macro to be
+% patched, or in a matching or replacement sequence. It~is used for
+% internal purposes, and you can cause lots of confusion when
+% using~it. This means, for one thing, that you should not try
+% "\patch"ing up any macros of this package with itself.
+%\item And this is harsh: if the macro you patch contains "#" marks
+% (which originally were produced by writing "##") these will not be
+% reduplicated, leading to missing parameter number errors (which will
+% do the right thing if you ignore them, but that's ugly), or to
+% recombination with a following number, which is plain wrong. You can
+% work around this ugliness in an~ugly way: specify a~replacement
+% "#{##}" for any such token. I~am pretty much afraid I~know no
+% better way around this one.
+%\item Since "\bgroup" and~"\egroup" are disabled, using any macro that
+% in turn uses those will not work while in patch~mode. What
+% I~guarantee to keep working in future versions is "\let" (locally,
+% for making implicit tokens),
+% all expandable constructs (like conditionals) not
+% using any of the macros of this package, and~"\patch"es.
+% Other things are not necessarily supported in patch~mode.
+% Specifically, do not use "\def" or~"\gdef", since manipulation of
+% localness might unnecessarily be thwarted if you~do.
+%\item Do not change "\toks@" in any way, or use a~macro changing it.
+% Cannot happen really, if you listen to the last advice.
+%\item Do not rely on the patches either taking place or not before the
+% final "\endpatch"! This means, do not use a~patched macro before
+% "\endpatch" in ways which require specifically the patched or
+% the unpatched version. For example, do not patch one and the same macro
+% with two separate "\patch" commands in the same patch session! The
+% reason for this is the collecting behaviour for non-global patches.
+% And you never really know when a~package of yours might come handy
+% non-globally.
+%\item For similar reasons,
+% do not use "\input patch.tex" in a local group when you are doing
+% "\gpatch"es (unless you know what you are doing, as in the case of
+% negative~"\globaldefs"). It~might get to~being a~problem sometime.
+%\item Never set "\globaldefs" to a~non-zero {\em positive\/} value
+% while working with~"\patch", since it will interfere disastrously with
+% "patch.tex"'s internals, which heavily work with local groups.
+% Anyway, "patch.tex" is by its nature intended for local use only.
+%\item Just as a note aside: it is a~very bad idea to set "\globaldefs"
+% to non-zero values longer than strictly necessary. It is especially
+% a~bad idea to set it to a~negative value while {\em typesetting\/}
+% anything,
+% because the output routine (implicitly enclosed in a~group) will
+% never be able to get anything done permanently, and will therefore
+% be repeated over and~over.
+%\end{enumerate}
+%
+%Ok, this should be all there really is to it. If I~look that list over
+%again, it seems like groups really occupy my fantasy.
+%
+%Happy "\patch"ing!
+%\StopEventually{\PrintIndex}
+%\section{The Implementation}
+%We begin by opening our local group and making private control
+%sequences accessible:
+% \begin{macrocode}
+\begingroup
+\catcode`@=11
+% \end{macrocode}
+%We then set "\toks@" to the initial set of~actions to~perform at the
+%end of the~patches.
+% \begin{macrocode}
+\toks@={\endgroup}
+% \end{macrocode}
+% \begin{macro}{\endpatch}
+% Rather simple. "\outer"~seems not to do much harm here. It might
+% help better pinpointing severe failures when using~"\patch".
+% \begin{macrocode}
+\outer\def\endpatch{\the\toks@}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\futuredef}
+% This is somewhat similar to "\futurelet", only not at~all. It
+% defines the macro which is its first argument as~code which can
+% by use of~"\aftergroup" reproduce the third argument~token,
+% and after doing that it will call the second argument.
+% All~arguments are removed from the input, unlike "\futurelet"'s
+% behaviour.
+% \begin{macrocode}
+\def\futuredef#1#2{\begingroup
+% \end{macrocode}
+% We do this locally, and set up a few things to do after the
+% group. Since a~"\def" is going to finish what we want, we can
+% insert the ``do-after'' token via "\afterassignment".
+% \begin{macrocode}
+ \aftergroup\afterassignment \aftergroup#2%
+ \aftergroup\def \aftergroup#1%
+ \futurelet\next\^^90}
+% \end{macrocode}
+% \end{macro}
+% We still have the token in our input stream, but also a copy of
+% its meaning in "\next". We first try out some cases which will
+% not allow us to treat the next token as an undelimited macro
+% parameter. Of course we cannot distinguish explicit from implicit
+% tokens, but we rely on the user to explicitly unimplicate possibly
+% implicit characters. We will do this ourselves with the following
+% two ones:
+% \begin{macrocode}
+\let\bgroup\relax \let\egroup\relax
+% \end{macrocode}
+% Now we start checking all problematic cases.
+% "\^^90" will substitute an appropriate definition given
+% explicitly instead of the following token. If we can, however, we
+% rather use the token we get. If you wonder about this name, here
+% is why: we have to use hosts of macros because of various
+% "\futurelet"-like constructions. Patches occur just in a local group,
+% and should not permanently require resources. If we did not use
+% one-letter control sequences here, the hash table size would be
+% somewhat reduced, permanently, because entries never leave the
+% hash table. One letter control sequences, however, are not
+% hashed, and can disappear without a trace again.
+% \begin{macrocode}
+\def\^^90{%
+ \ifcat\noexpand\next{%
+ \^^91{\aftergroup{\iffalse}\fi}%
+ \else\ifcat\noexpand\next}%
+ \^^91{\iffalse{\fi\aftergroup}}%
+ \else\ifcat\noexpand\next\space
+ \^^91{\expandafter\aftergroup\space}%
+ \else\ifcat\noexpand\next##
+ \^^91{\aftergroup########}%
+ \else
+ \let\next\^^93%
+ \fi\fi\fi\fi\next}
+% \end{macrocode}
+% "\^^91" is rather simple. We save the definition in
+% "\next@", and we'll call upon this after disposing of the next
+% token.
+% \begin{macrocode}
+\def\^^91#1{\def\next@{\endgroup{#1}}%
+ \let\next\^^92}
+\def\^^92{\afterassignment\next@ \let\next= }
+% \end{macrocode}
+% "\^^93" will actively get the next token, and produce an
+% "\aftergroup" definition from that. It is "\long" in case we are
+% dealing with a "\par" token.
+% \begin{macrocode}
+\long\def\^^93#1{\endgroup{\aftergroup#1}}
+% \end{macrocode}
+% \begin{macro}{\@ndp@tch}
+% This is supposed to be used as a delimiter. So that we may
+% check for its appearance conveniently, we define it as its own
+% "\futuredef" expansion.
+% \begin{macrocode}
+\def\@ndp@tch{\aftergroup\@ndp@tch}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\gpatch}
+% This is it. If you are in doubt as to what the "\def\next{}" is
+% supposed to~achieve, this is~easy. We want to detect whether you
+% want a~long macro to be~patched. In that case, you say
+% "\long\gpatch"\dots. We can figure this out by comparing
+% "\next" to the non-long~"\empty". Of course, we do not
+% explicitly check for "\outer"ness. You should not even think of
+% wanting to make an "\outer" definition.
+%
+% We start by defining~"\gpatch", which will in the case
+% of~disabled "global"ness revert to~"\patch". Both~"\patch"
+% and~"\gpatch" define "\next" as a~macro getting one
+% "\@ndp@tch"-delimited argument:
+% it is all what should appear after a~"\def".
+% "\next"~should make all necessary actions for doing
+% the~definition. After setting~up "\next", "\^^a0"~is called, for
+% which we wrap up the argument list as a~separate argument.
+% \begin{macrocode}
+\def\gpatch{\ifnum\globaldefs<\z@
+ \expandafter\patch
+ \else
+ \expandafter\^^98%
+ \fi}
+\long\def\^^98#1#2#{\def\next{}%
+ \long\edef\next##1\@ndp@tch%
+ {\ifx\next\empty\else\long\fi\gdef##1}%
+ \^^a0#1{#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\patch}
+% "\patch"~is a~bit more complicated, because we need to~make
+% additions to the current "\toks@"~list.
+% \begin{macrocode}
+\def\patch#1#2#{\def\next{}%
+ \long\edef\next##1\@ndp@tch
+ {\toks@ \noexpand\expandafter {\noexpand\the \toks@
+ \ifx\next\empty\else\long\fi \def##1}}%
+ \^^a0#1{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% Now the real fun starts. We get the argument replacement list,
+% and the macro body replacement list. We define a~macro~"\^^e0"
+% (the "e" means error) just for knowing the proper macro name for
+% error messages.
+%
+% We prepare in a local
+% "\toks@" the definition (because we could not simply
+% "\aftergroup" the argument replacement, which could consist of
+% any number of~tokens). Note that we start yet another group,
+% making the definitions of "\toks@" and "\next" stable.
+%
+% \begin{macrocode}
+\long\def\^^a0#1#2#3#4{\begingroup
+ \def\^^e0{#1}%
+ \toks@{\endgroup\next#1#2}%
+ \begingroup
+ \aftergroup\the\aftergroup\toks@
+% \end{macrocode}
+% We collect the replacement in a continually shrinking token list.
+% Do not get annoyed, but we'll use "\toks@" for that, too.
+% When we are through with replacements, we'll say "\endgroup",
+% after which the definition takes place.
+%
+% The replacement needs
+% to be in a token list instead of a macro in order not to break upon
+% encountering hash marks. The use of "\toks@" for this does not
+% conflict with its other uses due to the grouping.
+%
+% After that, we are ready to start the fun by expanding our macro,
+% and putting~"\p@check" to~work.
+% \begin{macrocode}
+ \toks@{#4}%
+ \expandafter\p@check\expandafter{#1#3}\@ndp@tch}
+% \end{macrocode}
+% \begin{macro}{\p@match}
+% \begin{macro}{\p@replace}
+% These are token lists holding the current string to be matched
+% next, and its replacement string. We
+% use token lists~1 and~2 for that.
+% \begin{macrocode}
+\toksdef\p@match=\@ne
+\toksdef\p@replace=\tw@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\p@check}
+% We check for any remaining replacements. If there are none, we
+% may quit. "\toks@"~is the list of
+% remaining substitutions. "\endgroup"~stops and makes the
+% definition (check~"\^^a0" to~see~why), "\^^a1"~continues. By the
+% way, in case of an~error, we will later use~"\next@" in order to
+% tell what replacements were not carried out.
+% \begin{macrocode}
+\def\p@check{\edef\next@{\the\toks@}%
+ \ifx\empty\next@ \expandafter\endgroup
+ \else \expandafter\^^a1\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\p@first}
+% This sets "\p@first" to the "\futuredef" expansion of the first
+% token we want to~match. "\^^a2"~will rewrap the rest of~"\toks@",
+% and needs an (as~to~yet) unmatched closing brace for that.
+% It~will provide the matching open one by~itself.
+% \begin{macrocode}
+\def\^^a1{\iffalse{\fi
+ \expandafter\futuredef \expandafter\p@first
+ \expandafter\^^a2\the\toks@}}
+% \end{macrocode}
+% \end{macro}
+% Ok, we rewrap the rest to be matched into~"\p@match", and the
+% replacement into~"\p@replace", after which we continue with~"\^^a3".
+% \begin{macrocode}
+\def\^^a2#1#{\p@match{#1}\afterassignment\^^a3\p@replace}
+% \end{macrocode}
+% The remaining substitutions we repack into~"\toks@". Now we need to
+% insert the matching opening brace for the closing one we put~before.
+% \begin{macrocode}
+\def\^^a3{\afterassignment\^^a4\toks@\expandafter{\iffalse}\fi}
+% \end{macrocode}
+% We now get the first (or next) token of the original macro.
+% \begin{macrocode}
+\def\^^a4{\futuredef\next\^^a5}
+% \end{macrocode}
+% If this token matches~"\p@first", we check the rest in~"\^^a6". We
+% collect in~"\toks@" all tokens matched so far (excluding "\p@first"),
+% so that we can
+% reinsert them if the match cannot be completed successfully. This~is
+% done in a~separate group. If~"\next" turns out to
+% be~"\@ndp@tch", however,
+% this is an~error indication. It~means that the end of patchable
+% material was reached. We call then~"\^^e1", which quits in that
+% case in a somewhat unusual (but relatively fast) way, reinserting
+% the gotten~"\@ndp@tch".
+%
+% It does not do any harm that "\next" is contained in conditional
+% context. Coming from~"\futuredef", it cannot be "\let" to an
+% unmatched conditional, and will correctly be~skipped.
+% \begin{macrocode}
+\def\^^a5{\ifx\next\p@first
+ \begingroup \toks@{}\expandafter\^^a6%
+ \else\ifx\next\@ndp@tch \^^e1\fi
+ \next \expandafter \^^a4%
+ \fi}
+% \end{macrocode}
+% In case of an error, we give the original macro (which has not yet
+% been patched). And at definition time, we will show how the macro
+% looks like afterwards.
+% \begin{macrocode}
+\def\^^e1{\let\^^a4\endgroup
+ \newlinechar`\^^J
+ \toks@\expandafter{\next@}%
+ \errorcontextlines\m@ne
+ \errhelp{I am ignoring inapplicable patches. Go on.}%
+ \errmessage{When trying to patch
+ \expandafter\string\^^e0, which was defined as^^J%
+ \expandafter\meaning\^^e0^^J%
+ the following patches remained inapplicable:^^J%
+ \the\toks@^^J%
+ I will show the results of the succeeded patches as soon^^J%
+ as I can without further comment, so do not be surprised.}%
+ \aftergroup\show \expandafter\aftergroup\^^e0%
+}
+% \end{macrocode}
+% Ok, we look whether there are any tokens remaining to be matched. If
+% there are not, replacement can go~forth. In~that case, we end our
+% local group, and go over to~"\^^ac". If~there are, we continue
+% with~"\^^a7".
+% \begin{macrocode}
+\def\^^a6{\edef\next{\the\p@match}%
+ \ifx\next\empty \endgroup\expandafter\^^ac%
+ \else \expandafter\^^a7\fi}
+% \end{macrocode}
+% We get the next token to be matched into~"\next@" from~"\p@match".
+% We~will have to adjust "\p@match" again with a token list
+% reassignment. For this we need to insert an unmatched closing brace
+% after its expansion, which will again be matched later.
+% \begin{macrocode}
+\def\^^a7{\iffalse{\fi
+ \expandafter\futuredef\expandafter\next@
+ \expandafter\^^a8\the\p@match}}
+% \end{macrocode}
+% Ok, here we gather the rest into~"\p@match" and~continue.
+% \begin{macrocode}
+\def\^^a8{\afterassignment\^^a9\p@match\expandafter{\iffalse}\fi}
+% \end{macrocode}
+% Now we get the next token from the original macro into~"\next".
+% \begin{macrocode}
+\def\^^a9{\futuredef\next\^^aa}
+% \end{macrocode}
+% In case of a match, we continue with~"\^^ab". Otherwise, if~we have
+% reached the illegal end of~macro ("\next" set to~"\@ndp@tch"),
+% we~stop.
+% If~we have no match legally, we reinsert~"\p@first", continue
+% scanning with~"\^^a4", reinserting everything matched with the help
+% of the "\futuredef" generated "\aftergroup"-sequence in~"\toks@".
+% This will hapen also if "\@ndp@tch" indicates something went
+% haywire, because "\@ndp@tch" cannot be in a~match sequence (if you
+% do not put it there, and you are not allowed to).
+% this we do also in the case of error, as you can easily see.
+% \begin{macrocode}
+\def\^^aa{\ifx\next@\next
+ \expandafter\^^ab%
+ \else \aftergroup\p@first
+ \aftergroup\^^a4%
+ \the\toks@\next\expandafter\endgroup\fi}
+% \end{macrocode}
+% We now have to append the "\aftergroup" sequence of the next matched
+% token in~"\next" to~"\toks@". After that, we can loop.
+% \begin{macrocode}
+\def\^^ab{\toks@\expandafter\expandafter\expandafter{%
+ \expandafter\the\expandafter\toks@\next}%
+ \^^a6}
+% \end{macrocode}
+% Ok, here follows the code if a~match {\em was\/} completed. We
+% insert the tokens of~"\p@replace". We~have to scan "\p@replace"
+% token by~token, so that implicit braces work like in the match
+% code sequences. We do this until "\p@replace" is exhausted. Which we
+% can detect by finding "\@ndp@tch".
+% \begin{macrocode}
+\def\^^ac{\expandafter\^^ad\the\p@replace\@ndp@tch}
+% \end{macrocode}
+% The following analysis loop is about as straight as it can get.
+% \begin{macrocode}
+\def\^^ad{\futuredef\next\^^ae}
+\def\^^ae{\ifx\next\@ndp@tch
+ \expandafter\p@check
+ \else
+ \next \expandafter\^^ad%
+ \fi}
+% \end{macrocode}
+% We end here by giving the driver file for the documentation, which
+% will typically be extracted using~"docstrip.sty".
+% \begin{macrocode}
+%<+driver>\documentstyle[doc]{article}
+%<+driver> \EnableCrossrefs
+%<+driver>% \DisableCrossrefs
+%<+driver>
+%<+driver> \CodelineIndex
+%<+driver>\begin{document}
+%<+driver> \DocInput{patch.doc}
+%<+driver>\end{document}
+% \end{macrocode}
+%\Finale
diff --git a/macros/generic/misc/quotation.tex b/macros/generic/misc/quotation.tex
new file mode 100644
index 0000000000..357a113816
--- /dev/null
+++ b/macros/generic/misc/quotation.tex
@@ -0,0 +1,5 @@
+\def\quotation#1#2{{% An extra group to keep changes to \tabskip local
+ \tabskip=0pt plus 1fill\let\\=\cr
+ \halign to\hsize{##\hfil\cr
+ #1\cr
+ \hfill#2\crcr}}}
diff --git a/macros/generic/misc/ragged.sty b/macros/generic/misc/ragged.sty
new file mode 100644
index 0000000000..909de8695c
--- /dev/null
+++ b/macros/generic/misc/ragged.sty
@@ -0,0 +1,781 @@
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% ragged.sty by Laurent Siebenmann, March 1996 --
+ %% beta version of Mar 30, 1996.
+ %% Aim: Maintain hyphenation and raggedness control
+ %% while providing the following for all formats.
+ %% --- to make a paragraph ragged on left and justified
+ %% on right, use the syntax
+ %% \raggedL <paragraph>
+ %% --- to make a paragraph ragged on both left and right
+ %% (and symmetric), use the syntax
+ %% \raggedC <paragraph>
+ %% \raggedR is essentially equivalent \raggedright of Plain
+ %% or to \RaggedRight of raggedri.sty of G. Schr"oder.
+ %% All three \raggedX should give the same linebreaks; they
+ %% just provide different horizontal positioning of the lines.
+ %% Documentation of options etc. follows \endinput.
+ %% Run this file alone to see a demo.
+
+ \ifx\undefined\raggedL\else\expandafter\endinput\fi
+
+ \chardef\raggedcatAT=\catcode`\@ \catcode`\@=11
+
+ %%temporarily suppress Plain's logging of allocations
+ \let\R@Gtemp\wlog
+ \def\wlog#1{\relax}
+
+ \newbox\R@Gvbox
+ \newbox\R@Ghbox
+ \newbox\R@Ghbox@
+
+ \newcount\R@Glinect
+
+ \newskip\R@Gfillskip
+
+ \newdimen\R@Gauxdim
+ \newdimen\R@Gindentdim
+ \newdimen\R@Ghsize
+ \newdimen\raggedStretch
+
+ \raggedStretch=10\p@ %% default
+
+ \newtoks\raggedEnv
+ \newtoks\raggedEnvOnce
+
+ \let\wlog\R@Gtemp
+
+ \R@Gfillskip=\z@ plus 1fil
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% Core macros
+
+ \def\R@Gprep{\ifhmode
+ \errmessage{ Do not use
+ \noexpand\raggedX commands in horizontal mode}%
+ \expandafter\par\fi}
+
+ \def\R@Gcore{%
+ \setbox\R@Gvbox=\vbox\bgroup
+ \hsize=\maxdimen \leftskip=\z@
+ \hskip\z@skip}
+
+ \def\CalcR@GIndent@{%
+ %% first set \R@Gindentdim to excess of \R@Ghsize over remainder
+ \R@Gindentdim=\hsize
+ \advance\R@Gindentdim by -\rightskip
+ \advance\R@Gindentdim by -\wd\R@Ghbox@
+ %% second convert to hang as l,c,r demand
+ \fixR@Ghang@ %% \R@Gindentdim=.5\R@Gindentdim for \raggedC
+ }%
+
+ \def\endR@Gcore{\endgraf
+ \global\R@Glinect=\prevgraf
+ \global\setbox\R@Ghbox=\lastbox
+ \egroup %
+ \ifcase\R@Glinect\relax %% 0
+ \or \endR@Gcore@ %% 1
+ \else \errmessage{\noexpand\raggedX is failing.
+ Read about \string\RaggedX}\endR@Gcore@ %% >1
+ \fi}
+
+ \def\endR@Gcore@{%
+ \setbox\R@Gvbox=\vbox{%
+ \unhcopy\R@Ghbox\unpenalty\unskip\unskip
+ \endgraf\global\R@Glinect=\prevgraf %\showthe\prevgraf
+ \global\setbox\R@Ghbox@=\lastbox}%
+ \setbox\R@Ghbox@=\hbox{%
+ \unhbox\R@Ghbox@\unpenalty\unskip\unskip}%
+ \CalcR@GIndent@ %%
+ \ifdim\R@Gindentdim>\z@
+ \hangindent=\R@Gindentdim %\showthe\R@Gindentdim
+ \else
+ \hangindent=\z@
+ %% Rmk: neg hangindents are from right margin
+ \fi
+ \advance\R@Glinect by -1\relax
+ \hangafter\R@Glinect
+ \unhbox\R@Ghbox
+ \endgraf}
+
+ \def\endR@@G{\endR@Gcore\let\par\R@Goldpar\endgroup}
+
+ \def\raggedFrac#1{\def\R@GFrac{#1 }}
+
+ \raggedFrac{1} %% default
+
+ \def\R@GEnv@{%
+ %\parskip=4pt plus 1pt
+ %\baselineskip=12pt
+ %\parfillskip=0pt plus 1fil
+ %\emergencystretch=20pt
+ \finalhyphendemerits=20000 % 5000 is Plain default
+ \parindent=\z@ %% 0
+ \pretolerance=\@M %% 10000
+ %% end of options easily changeable
+ %% via \raggedEnv{...} and \raggedEnvOnce{...}
+ \let\R@Goldpar\par
+ \let\par\endR@@G
+ \R@Gauxdim=\hsize
+ \advance\R@Gauxdim by -\leftskip
+ \advance\R@Gauxdim by -\rightskip
+ \R@Ghsize=\R@GFrac\R@Gauxdim
+ \advance\R@Gauxdim by -\R@Ghsize
+ \R@GRedefs
+ \the\raggedEnv
+ \the\raggedEnvOnce\global\raggedEnvOnce{}%
+ }%
+
+ \def\R@GRedefs{\let\break\R@Gbreak
+ \let\vadjust\R@Gvadjust@
+ \everydisplay{\R@Geverydisplaymole@}}
+
+ \def\R@Gnono{ is forbidden with \string\raggedX}
+ \def\R@Gbreak{\errmessage{\noexpand\break\R@Gnono}\penalty-\@M}%
+ \def\R@Gvadjust@#1{{\tt (USE OF vadjust)}%
+ \errmessage{\noexpand\vadjust\R@Gnono.\space See output}}%
+ \def\R@Geverydisplaymole@#1$${$${\tt (DISPLAY)}%
+ \errmessage{Display math\R@Gnono. See output}}%
+
+ \def\raggedHrule{\unskip\penalty0
+ \vrule height0.3\p@ depth-0\p@ width \R@Ghsize \penalty0}%
+
+ %%% \R@GEnv@@ corrects \R@Ghsize if user has modified it
+ %% through \leftskip, \rightskip via \raggedEnv{...}
+ %% then does other last minute tasks tasks
+ \def\R@GEnv@@{%
+ \R@Ghsize=\hsize
+ \advance\R@Ghsize by -\leftskip
+ \advance\R@Ghsize by -\rightskip
+ \parfillskip=\R@Gfillskip
+ }
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% User macros
+
+ %%% \raggedC
+ \def\raggedC{\R@Gprep\begingroup
+ \leftskip=1\leftskip \rightskip=1\rightskip
+ \R@GEnv@
+ \advance\leftskip by .5\R@Gauxdim plus .5\raggedStretch
+ \advance\rightskip by .5\R@Gauxdim plus .5\raggedStretch
+ \def\fixR@Ghang@{\R@Gindentdim=.5\R@Gindentdim}%
+ \R@GEnv@@
+ \R@Gcore}
+
+ %%% \RaggedC
+ \def\RaggedC{\R@Gprep\begingroup\let\R@Gcore\relax
+ \let\R@GRedefs\relax\raggedC
+ \parfillskip=\z@
+ \def\par{\let\par\R@Goldpar\par\endgroup\endgroup}%
+ }
+
+ % %%% \raggedR@ is strict analog of \raggedR@, \raggedC@
+ % %% present for testing only
+ % \def\raggedR@{\R@Gprep\begingroup
+ % \R@GEnv@ %% not needed
+ % \advance\rightskip by \R@Gauxdim plus \raggedStretch
+ % \def\fixR@Ghang@{\R@Gindentdim=0\p@}%
+ % \R@GEnv@@
+ % \R@Gcore
+ % }
+
+ %%% \raggedR is more robust then \raggedL, \raggedC as it
+ %% it allows $$...$$ and \vadjust, \break etc. in paragraph.
+ \def\raggedR{\R@Gprep\begingroup
+ \let\R@GRedefs\relax
+ \R@GEnv@ %% initial part
+ \advance\rightskip by \R@Gauxdim plus \raggedStretch
+ \R@GEnv@@
+ \def\par{\let\par\R@Goldpar\par\endgroup}%
+ }
+
+ %%% \RaggedR
+ \def\RaggedR{\R@Gprep\raggedR
+ \parfillskip=\z@\relax}
+
+ \def\raggedL{\R@Gprep\begingroup
+ \R@GEnv@
+ \advance\leftskip by \R@Gauxdim plus \raggedStretch
+ \def\fixR@Ghang@{}%
+ \R@GEnv@@
+ \R@Gcore}
+
+ %%% \RaggedL
+ \def\RaggedL{\R@Gprep\begingroup\let\R@Gcore\relax
+ \let\R@GRedefs\relax\raggedL
+ \parfillskip=\z@
+ \def\par{\let\par\R@Goldpar\par\endgroup\endgroup}%
+ }
+
+ \def\gobble#1{}
+
+ \catcode`\@=\raggedcatAT
+
+ %%%% END INPUT IF THIS IS NOT A DEMO RUN !
+ \edef\temp{\csname\jobname\endcsname}%
+ \edef\Temp{\csname ragged.sty\endcsname}%
+ \ifx\temp\Temp\else
+ \expandafter\endinput
+ \fi
+
+ %%%% END OF MACROS
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% BEGINNING OF DEMONSTRATION
+ %%% TESTS FOR \raggedX
+
+ \ifx\documentstyle\undefined
+ \let\documentstyle\gobble \let\begin\gobble
+ \fi
+ \documentstyle{article}
+ \begin{document}
+
+ \hsize=400pt
+
+ \raggedStretch=1000pt
+ \RaggedC
+ THESE ARE TESTS FOR ragged.sty\break
+ EXPORT THE TESTS BEFORE PLAYING WITH THEM
+ \bigskip
+
+ \widowpenalty=10000
+ \leftskip=0\hsize %plus 10pt
+ \rightskip=0\hsize %plus 10pt
+ \raggedStretch=10pt %% 10pt dafault
+ \raggedFrac{.5}
+ \raggedEnv{\parskip=4pt plus 3pt
+ \emergencystretch=20pt
+ %\pretolerance=100
+ }
+ \parskip=0pt plus 2pt
+ \parindent=0pt
+
+\def\TESTTEXT{It is the union of passionate interest in detailed
+facts with equal devotion to abstract generalization which forms
+the novelty in \hbox{our present society}. }
+
+ \TESTTEXT
+
+ %\raggedEnvOnce{\raggedStretch=0pt}
+ \raggedL\raggedHrule
+ % $$dfd$$ %\vadjust{\hrule}% \break
+ \TESTTEXT
+
+ \raggedL
+ {\sl A.N. Whitehead}
+
+ \raggedC\raggedHrule\TESTTEXT
+
+ %\raggedEnvOnce{\parskip=0pt}
+ \raggedC{\sl A.N. Whitehead}
+
+
+ \raggedR\raggedHrule\TESTTEXT
+
+ \raggedR
+{\sl A.N. Whitehead}
+
+ %\end
+ %{document}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% TESTS FOR \RaggedX
+
+ \raggedStretch=1000pt %% default 10pt %% play with this
+ \raggedEnv{%
+ %\linepenalty=0 %% default 50 %% play with this
+ \parskip=4pt plus 3pt
+ %\pretolerance=0 %% default 100
+ %\hyphenpenalty=0 %% default 50
+ }
+
+ \bigskip \hrule \bigskip
+
+ \TESTTEXT
+
+ \RaggedL\raggedHrule\TESTTEXT
+
+ \raggedL
+{\sl A.N. Whitehead}
+
+
+ \RaggedC\raggedHrule\TESTTEXT
+
+ %\raggedEnvOnce{\parskip=0pt}
+ \raggedC{\sl A.N. Whitehead}
+
+
+ \RaggedR\raggedHrule\TESTTEXT
+
+ \raggedR
+{\sl A.N. Whitehead}
+
+\end
+{document}
+
+ %%%% END OF TESTS
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ ***** USER DOCUMENTATION FOR ragged.sty *****
+
+
+
+ *** TYPICAL EXAMPLE
+
+ \input ragged.sty
+
+ \raggedFrac{.4}
+ \raggedEnv{\parskip=4pt plus 3pt}
+ \raggedL\raggedHrule
+I was not a Child~Prodigy, because a Child~Prodigy is
+a child who knows as much when it is a child as it
+does when it~grows~up.
+
+\raggedL
+{--- Will Rogers}
+
+The above will produce a quotation that is aligned to the right margin,
+ragged on the left and having about .4 the width of a normal line.
+
+ Just compose this file itself to see to see a more extensive
+example instantly composed.
+
+
+
+ *** INTENDED USES
+
+(i) For "ragged-left-and-flush-right" formatting of short prose
+quotations tradionally placed at the end of book chapters.
+
+(ii) For captions on figures in an artistic page layout.
+
+(iii) For notes in a left hand margin ragged on the left and aligned
+on the right.
+
+ (iv) For "raggedleft" composition of left-hand pages of of narrow
+brochures --- matching "raggedright" composition of right hand pages.
+
+ Admittedly, hand specification of linebreaks is often the best
+option, and that is how Don Knuth proceeds for use (i) in most of his
+books. But in case reformatting for different page sizes or screen sizes
+is anticipated, Knuth's alternative should be avoided like the plague;
+this should apply to all documents distributed in ".tex" typescript
+format. The last 3 applications seem to demand good control on
+raggedness and hyphenation.
+
+
+
+ *** NOVELTY
+
+ It is too early to assert with confidence that ragged.sty offers
+genuinely new capabilities in all formats.
+
+ Hopefully \raggedL and \raggedC offer something new even for LaTeX
+users. The standard "center" and "flushright" environments of LaTeX do
+*roughly* the same thing by a different method. But the macros
+\raggedL and \raggedC seem a necessery innovation in case one wants
+control on raggedness and/or hyphenation.
+
+ Outside LaTeX, even the offer even the more limited LaTeX features
+are little known; thus, particularly sturdy macros \RaggedC and \RaggedL
+are also offered by ragged.sty to provide just the LaTeX features in
+other formats --- which means all features except raggedness control and
+hyphenation.
+
+
+
+ *** USER CONTROL SEQUENCE SUMMARY
+
+The \raggedX trio:
+\raggedL <paragraph> %% sets paragraph ragged on left justified on right
+\raggedC <paragraph> %% sets paragraph ragged on both left and right
+\raggedR <paragraph> %% sets paragraph ragged on right justified on left
+See also the companion trio \RaggedX below.
+
+With the default configuration, each of these leaves an arbitrarily
+short last line while maintaining some tension on earlier lines
+(\raggedStretch=10pt, total raggedness stretch).
+
+Only the following paragraph is affected by each.
+
+ --- \raggedHrule provides a horizontal line of the ragged text width
+if put *immediately after* \raggedX.
+
+ --- \raggedFrac{<decimal fraction>} sets the length of the lines of
+the ragged-set paragraphs as a fraction of current line length.
+The current line length is
+
+ (\hsize diminished by \leftskip and \rightskip)
+
+ --- \raggedEnv{...} is to be placed before \raggedX; it allows the user
+to redefine parameters for the line breaking environment of \raggedX.
+Inspect the definition of the internal macro \R@GEnv@ for hints on
+which parameters to change. Never change the code in ragged.sty;
+your modifications belong in \raggedEnv{...} within your typescripts.
+
+ \raggedEnv{...} and \raggedFrac{...} need not be repeated before
+each use of \raggedX. If you want once-only temporary ragged
+environment change, you can use grouping or \raggedEnvOnce{...}
+
+ \raggedFrac, \hsize, \leftskip, \rightskip should not appear in the
+argument of \raggedEnv; this is roughly because they relate to external
+parameters.
+
+ By default, paragraph indentation of the ragged paragraph is
+zero. Hyphenation is by default switched off. However
+\raggedEnv{\parindent=20pt \pretolerance=100} would change this back
+to Plain defaults.
+
+ You may want to adjust the new dimension \raggedStretch, which is
+10pt by default. Incidentally, if the total stretch in lines falls
+below about 20pt, you may have to add, say \emergencystretch=20pt
+inside \raggedEnv{...}.
+
+ In tuning stretch and hyphenation, consider also the following:
+\fontdimen3\font=<dimension>, \spaceskip=<skip> and \xspaceskip=<skip>.
+Cf. Plain's \raggedright.
+
+ A companion trio \RaggedL, \RaggedC, \RaggedR are simpler,
+robuster, and faster macros that perform two services already available
+in LaTeX:
+
+ (i) If used with default parameters, they force the last paragraph line
+to have roughly the same length as all others. Results are good if
+there are many lines.
+
+ (ii) If used with parameter value \raggedStretch=1000pt, they behave
+like the competing LaTeX environments with default parameters: lines are
+relaxed and filled in natural order.
+
+
+ *** INSTALLATION
+
+ For any format, \input ragged.sty will install the package.
+
+ For LaTeX (version 2e), place \usepackage{ragged} in the article header
+between \documentclass{...} and \begin{document}.
+
+
+
+ *** OCCASIONAL PROBLEMS AND THEIR REMEDIES
+
+ \raggedL and \raggedC (not \raggedR and \RaggedX) are only
+moderately robust: they work correctly only when the paragraph contents
+will form a single line if composed on an "infinitely" long line.
+Therefore, they misbehave if they contain *for example* displayed math
+or \break or material inserted by \vadjust; and also if the paragraph
+exceeds about a page of typing; error warnings are given.
+
+ The most annoying failing is the unavailability of \break; it can
+be replaced by \hbox{...} and the tie ~ ; indeed without introducing the
+inflexibility which \break does.
+
+ Fortunately such limitations do not much interfere with the use
+intended. (Indeed the unavailability of \break is a blessing in
+disguise.)
+
+ If difficulty is nevertheless encountered, use the *fast* and
+*robust* \RaggedL and \RaggedC where necessary (search out "\Ragged"
+instructions and tests!).
+
+ On a given paragraph, all 3 \raggedX should always produce the
+*same* linebreaks; any exception is a bug. Similarly for all three
+\RaggedX.
+
+ Please report undocumented bugs to lcs@topo.math.u-psud.fr.
+
+
+
+ *** A TRIVIAL SOLUTION WHEN RAGGEDNESS IS NULL
+
+ Donald Arseneau pointed out (Info-TeX, Sat Mar 9, 1996) that if
+left and right margins are justified (i.e. \raggedStretch is zero) then
+the last line of paragraphs can be center or right aligned by a simple
+"trick" setting as follows:
+
+ *** Center Alignment
+
+ \leftskip=1\leftskip plus 1fil %% use \setlength in LaTeX
+ \rightskip=-\leftskip
+ \parfillskip=0pt plus 2fil
+
+ *** Right Alignment
+
+ \leftskip=1\leftskip plus 1fil %% use \setlength in LaTeX
+ \rightskip=-\leftskip
+ \parfillskip=0pt plus 1fil
+
+Donald considers this *well known*; he learned of it first from
+Barbara Beeton.
+
+ This device will also work in ragged environments IF AND WHEN
+*extended* TeX allows skips to have *both* finite and infinite stretch
+-- analogous to ordinals of the form integer + \omega. This is not
+yet planned.
+
+ As always in TeX, there may yet be another "deus ex machina"! Time
+will tell.
+
+
+
+ *** WHY USE ragged.sty WITH LATEX?
+
+ LaTeX (in all versions) has the environments "flushleft", "center",
+and "flushright" that perform very nearly the services of \RaggedL,
+\RaggedC, and \RaggedR. LaTeX also has macros \raggedright and
+\raggedleft roughly equivalent to "flushleft" and "flushright" minus
+the grouping that goes along with an environment.
+
+ These LaTeX environments/macros perform reliably, and like \RaggedX
+do *not* suffer the fragility mentioned above for \raggedX.
+
+ All these LaTeX features are programmed by a mare parameter setting
+(cf. programmer documentation below): they simply use the infinite value
+1fil for the stretch component of \leftskip and/or \rightskip, and this
+permits quite excessive raggedness -- as testing shows. If one just
+makes this stretch finite and modest, then the last line becomes
+excessively stretched and/or all lines tend to become equal. This matter
+seems to have been first recorded and remedied by Jan van der Steen and
+Martin Schr\"oder who wrote raggedri.sty (1993) (see CTAN) producing a
+macro \RaggedRight more or less equivalent to Plain's \raggedright --
+but no \RaggedCenter nor \RaggedLeft.
+
+ Consequently LaTeX users have reason to use my macros \raggedL and
+\raggedC when controlled raggedness is wanted. In addition, I suspect
+the ragged.sty syntax will prove helpful in adjusting up width's and
+margins.
+
+ Since the competing LaTeX environments are deeply imbricated in
+the complicated "list" environment apparatus, I have not attempted to
+tinker directly with the LaTeX code to make the new ragged.sty features
+a well integrated patch for LaTeX; that is a job for those working on
+LaTeX3.
+
+
+
+ *** HISTORY
+
+ These macros were initially programmed to respond to a request of
+Laszlo Battha <battha@apollo.ggki.hu>, Mon Mar 4, 1996 on the Info-TeX
+list.
+
+ Laurent Siebenmann
+ Math'ematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
+
+
+
+
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ ***** PROGRAMMER DOCUMENTATION FOR ragged.sty *****
+
+ In essence, \RaggedX is a mere parameter setting; indeed, it sets
+the stretch components of \leftskip and \rightskip to total
+\raggedStretch. What is a miracle preordained by Knuth is that as
+soon as \raggedStretch is huge (say 1000pt), while \linepenalty
+remains substantial (say 50) all lines but the last are as full as
+they can be without puting interword spaces under tension.
+Hyphenation occurs only to prevent line length overrun. LaTeX
+operates similarly but using infinite stretch.
+
+ In contrast, \raggedL and \raggedC are hopefully original; they
+are more devious than outright difficult; what will be more
+difficult is to make them work in absolutely all circumstances where
+Plain's \raggedright works. They already give perfect typography
+or else complain.
+
+ Permit me to set the scene with an overstatement. Analogs of all
+three \raggedX exist in every competent wordprocessor since 1984 --
+beginning with MacWrite. However, in TeX (1982) there was an
+unfortunate oversight; there should be not just one \parfillskip but
+two: \leftparfillskip and \rightparfillskip=\parfillskip. These
+should be "skip"s (elastic spaces) inserted at the left and right of
+the last line of each paragraph. If these become available (say in
+an e-TeX or Omega), one will be able to program \raggedL and
+\raggedC by merely setting these parameters along with \leftskip,
+\rightskip and a few others.
+
+ This makes it clear that the moderately complicated programming
+I have used is just a "workaround". Fortunately it is neither slow
+nor bulky.
+
+ Here is the logic of the present programming of \raggedL; it
+will be followed by some promising alternatives.
+
+
+
+ *** CURRENT METHOD (A)
+
+ --- Sweep the paragraph text into \vbox of huge \hsize so that the
+paragraph text fits on one line. The use of a \vbox instead of an
+\hbox; here is the one recent "breakthrough" involved; it surfaced as a
+result of investigations of Barbara Beeton, Michael Downes and Don
+Knuth -- in this order! -- see TUGboat 11 (Nov 1991), pages 605--612.
+
+ --- Extract the line as an \hbox and \unhbox it into a \vbox with
+the "raggedleft" environment as desired, except for \parfillskip=0pt
+plus 1fil where we would really want \leftparfillskip=0pt plus 1fil
+and \rightparfillskip=0pt. Here we learn the number of lines in the
+paragraph by use of \lastgraph.
+
+ --- We find out the length of the the last line by using \lastbox to
+pick off the last \hbox in the above \vbox, and then \unhbox'ing it
+into another \hbox stripping off a penalty10000, \rightskip and
+\parfillskip (going right to left).
+
+ --- From this, we can calculate the indentation by which to push the
+last box right to make it flush with the right margin.
+
+ But we do *not* do that since it entails unpleasant technical
+complications related to vertical placement. Instead we more
+simply:
+
+ --- unhbox onto the current page (essentially) the first \hbox
+encountered above, using the last mentioned environment modified only by
+a \hangindent equal to the measured indent, which is scheduled by
+\hangafter to intervene on the last line of the paragraph.
+
+ In a real sense the current page receives the final paragraph
+just like a normal paragraph. Therefore (hopefully!) no vertical
+mode complications will occur.
+
+ Far *more* complex tricks of this sort, *the last one excepted*, are
+exploited in Donald Arseneau's shapepar.sty on CTAN. Fortunately,
+ragged.sty and shapepar.sty do not compete on the performance
+front.
+
+
+
+ *** ALTERNATIVE METHOD (B)
+
+ This is the method I first attempted in a preliminary "hack" posted
+on Info-teX Sat Mar 9, 1996. The raggedleft paragraph can contain
+\vadjust and \break since the "one-long-line" requirement of (A)
+disappears.
+
+ --- first compose the paragraph \vbox with the ultimately desired
+\hsize, \leftskip, \rightskip, but use \parfillskip=0pt plus 1fil.
+
+ --- obtain the relaxed length of the last paragraph line much as
+as above, using \lastbox etc. The last line is thus "deleted".
+
+ --- reconstruct the last line as an \hbox to assure the correct
+horizontal location.
+
+ --- restore the last line into the \vbox. This requires careful
+vertical placement, possibly involving \lastskip, \lastdepth,
+\lastpenalty,
+
+ --- \unvbox the corrected \vbox onto the current page.
+This again requires careful vertical placement, eg. as regards
+space both above and below, penalties etc.
+
+ The last step requires that one be able to perfectly emulate, by
+hand as it were, important parts of TeX's paragraph builder. It is by
+far a more delicate task than the first method. Donald Arseneau called
+it "painful" (Info-TeX, Sat Mar 9, 1996).
+
+ Indentations above *displayed equations* have not been discussed
+(but they are in alternative C below); that would redouble complexity.
+
+
+
+ *** ALTERNATIVE METHOD (C)
+
+ This last alternative is my proposed improvement of the first
+method by use of an auxiliary file for storing widths between TeX
+jobs and by possible use of two passes on each paragraph.
+
+ This method seems to fully eliminate the failings of \raggedX,
+ie. refusal of: displays, \break, \vadjust. Very desirable for a
+narrow brochure with left-hand pages composed "raggedleft". But I
+have done only fragmentary prototyping.
+
+ Two passes on a paragraph are executed (when that is necessary)
+by taking up the whole paragraph in a macro argument, storing it
+temporarily in unexpanded token list form, and then rereading it so
+that category assignments are those for normal progressive input.
+This will be done by fast internal primitives in all versions of
+e-TeX. But in Knuth's TeX it requires writing the unexpanded token
+list out to a file, with help of the the \meaning primitive and
+then rereading.
+
+ An auxiliary file with indentation widths may indicate that a
+preliminary pass is unnecessary; thus, on the average, composition
+should be very fast.
+
+ --- during a possible preliminary composition of a paragraph one
+keeps \parfillskip equal 0pt plus 1fil, and merely records, in the
+order of occurrence:
+
+ (a) the widths of remainders on the last line before each display,
+using \predisplaysize and a temporary addition to the token list
+\everydisplay.
+
+ (b) the width of the remainder on the paragraph's last line. This
+is gotten using \lastbox much as in methods (A) or (B).
+
+Note that \lastbox operates in internal vertical mode, and not in
+vertical mode. Hence all preliminary composition is to be done in a
+\vbox. This \vbox is discarded once the necessary indentation
+information has been extracted --- just as in method (A) but
+contrary to method (B).
+
+ --- during final raggedleft composition of a paragraph, the width
+information is applied with help from \lastgraf, \hangindent,
+\hangafter much as in method (A).
+
+In this final raggedleft composition of a paragraph, the width
+information used may be either from the current job or from a
+previous job. But it is always obtained from some preliminary
+composition.
+
+ In the case of a paragraph that is composed by \raggedL in a
+single pass, it would be highly desirable to have a check that the
+composed paragraph is OK; it would for example probably *not* be OK
+if changes had intervened there since last composition. The
+unavailability of \lastbox in ordinary vertical mode seems to make
+a *sure* check difficult. Perhaps one must be content with checks
+that are less than sure --- such as variation of the number of
+typescript lines occupied by the paragraph as found via
+\inputlineno. The user could also signal changes using a syntax like
+\raggedL[changed 1647]. Also, \raggedTwoPass in the header could
+force slow but sure two-pass treatment.
+
+
+ Incidentally, a simple way to make a brochure with left pages
+raggedleft and right pages raggedright and *without* altering the
+output routine is to compose the brochure twice, once raggedleft
+and once raggedright; then one can mix the two at the .dvi (or
+postscript) level.
+
+ It is clear that, for such brochures, vertical spacing in and
+among paragraphs should be perfectly normal, and identical for
+raggedleft and raggedright composition. Method (C) seems to
+promise this without pain.
+
+
+
+ I recommend (C) as next method to program. But I could
+be wrong.
+
+ Laurent Siebenmann
+ Math'ematique, Bat. 425,
+ Univ de Paris-Sud,
+ 91405-Orsay,
+ France
+
+ 30 March 1996
+
+
diff --git a/macros/generic/misc/random.tex b/macros/generic/misc/random.tex
new file mode 100644
index 0000000000..d1a818558b
--- /dev/null
+++ b/macros/generic/misc/random.tex
@@ -0,0 +1,94 @@
+% RANDOM.TEX v.1 (Donald Arseneau)
+% Generating "random" numbers in TeX.
+%
+% Random integers are generated in the range 1 to 2147483646 by the
+% macro \nextrandom. The result is returned in the counter \randomi.
+% Do not change \randomi except, perhaps, to initialize it at some
+% random value. If you do not initialize it, it will be initialized
+% using the time and date. (This is a sparse initialization, giving
+% fewer than a million different starting values, but you should use
+% other sources of numbers if they are available--just remember that
+% most of the numbers available to TeX are not at all random.)
+%
+% The \nextrandom command is not very useful by itself, unless you
+% have exactly 2147483646 things to choose from. Much more useful
+% is the \setrannum command which sets a given counter to a random
+% value within a specified range. There are three parameters:
+% \setrannum {<counter>} {<minimum>} {<maximum>}. For example, to
+% simulate a die-roll: \setrannum{\die}{1}{6} \ifcase\die... .
+%
+% If you need random numbers that are not integers, you will have to
+% use dimen registers and \setrandimen. For example, to set a random
+% page width: \setrandimen \hsize{3in}{6.5in}. The "\pointless" macro
+% will remove the "pt" that TeX gives so you can use the dimensions
+% as pure `real' numbers. In that case, specify the range in pt units.
+% For example,
+% \setrandimen\answer{2.71828pt}{3.14159pt}
+% The answer is \pointless\answer.
+%
+% The random number generator is the one by Lewis, Goodman, and Miller
+% (1969) and used as "ran0" in "Numerical Recipies" using Schrage's
+% method for avoiding overflows. The multiplier is 16807 (7^5), the
+% added constant is 0, and the modulus is 2147483647 (2^{31}-1). The
+% range of integers generated is 1 - 2147483646. A smaller range would
+% reduce the complexity of the macros a bit, but not much--most of the
+% code deals with initialization and type-conversion. On the other hand,
+% the large range may be wasted due to the sparse seed initialization.
+
+\newcount\randomi % the random number seed (while executing)
+\global\randomi\catcode`\@ % scratch variable during definitions
+\catcode`\@=11
+
+\def\nextrandom{\begingroup
+ \ifnum\randomi<\@ne % then initialize with time
+ \global\randomi\time
+ \global\multiply\randomi388 \global\advance\randomi\year
+ \global\multiply\randomi31 \global\advance\randomi\day
+ \global\multiply\randomi97 \global\advance\randomi\month
+ \message{Randomizer initialized to \the\randomi.}%
+ \nextrandom \nextrandom \nextrandom
+ \fi
+ \count@ii\randomi
+ \divide\count@ii 127773 % modulus = multiplier * 127773 + 2836
+ \count@\count@ii
+ \multiply\count@ii 127773
+ \global\advance\randomi-\count@ii % random mod 127773
+ \global\multiply\randomi 16807
+ \multiply\count@ 2836
+ \global\advance\randomi-\count@
+ \ifnum\randomi<\z@ \global\advance\randomi 2147483647\relax\fi
+ \endgroup
+}
+
+\countdef\count@ii=2 % use only in boxes!
+\ifx\@tempcnta\undefined \csname newcount\endcsname \@tempcnta \fi
+\ifx\@tempcntb\undefined \csname newcount\endcsname \@tempcntb \fi
+
+\def\setrannum#1#2#3{% count register, minimum, maximum
+ \@tempcnta#3\advance\@tempcnta-#2\advance\@tempcnta\@ne
+ \@tempcntb 2147483645 % = m - 2 = 2^{31} - 3
+ \divide\@tempcntb\@tempcnta
+ \getr@nval
+ \advance\ranval#2\relax
+ #1\ranval
+}
+
+\def\setrandim#1#2#3{% dimen register, minimum length, maximum length
+ \dimen@#2\dimen@ii#3\relax
+ \setrannum\ranval\dimen@\dimen@ii
+ #1\ranval sp\relax
+}
+
+\def\getr@nval{% The values in \@tempcnta and \@tempcntb are parameters
+ \nextrandom
+ \ranval\randomi \advance\ranval\m@ne \divide\ranval\@tempcntb
+ \ifnum\ranval<\@tempcnta\else \expandafter\getr@nval \fi
+}
+
+\def\pointless{\expandafter\PoinTless\the}
+{\catcode`p=12 \catcode`t=12
+\gdef\PoinTless#1pt{#1}}
+
+\catcode`\@=\randomi
+\global\randomi=0
+\newcount\ranval
diff --git a/macros/generic/misc/rotate-textures.sty b/macros/generic/misc/rotate-textures.sty
new file mode 100644
index 0000000000..89454382b6
--- /dev/null
+++ b/macros/generic/misc/rotate-textures.sty
@@ -0,0 +1,111 @@
+% Rotation of TeX output with TeXtures (and maybe? other PostScript drivers)
+
+% Written by
+% Charles Karney
+% Plasma Physics Laboratory Phone: +1 609 243 2607
+% Princeton University MFEnet: Karney@PPC.MFEnet
+% PO Box 451 ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
+% Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFEnet@ANLVMS.Bitnet
+
+% User instructions:
+
+% If you use TeXtures (TeX on the Macintosh), you can rotate portions of TeX
+% output by arbitrary angles. In order to accomplish this you need to:
+
+% (1) Transfer the file TEX$INPUTS:ROTATE.STY to your Macintosh and it in the
+% "TeX inputs" folder.
+% (2) Specify rotate as an optional argument to \documentstyle, e.g.,
+% \documentstyle[11pt,rotate]{article}
+% (3) Use the construction
+% {\rotate{angle}Text-to-be-rotated}
+
+% Notes:
+
+% (1) The rotation is made only with TeXtures outputting to a PostScript
+% printer (e.g., a LaserWriter). The screen preview and the ImageWriter
+% output will show the text unrotated.
+
+% (2) The rotation angle is measured in degrees. It can be positive or
+% negative, real or integer. The best results are obtained when the angle is
+% a multiple of 90 degrees.
+
+% (3) The point about which the text is rotated is the location of the
+% \rotate command. In the example above it would be the bottom left corner
+% of the initial "T".
+
+% (4) Normal TeX grouping serves to delimit the scope of the rotation.
+% \rotate should always appear in a group. If you want to get all the TeX
+% output rotated by 90 degrees, select Landscape mode in the Print Setup
+% Dialog.
+
+% (5) \rotate is effectively a no-op with drivers other than TeXtures. Thus
+% you can include \rotate's in a file which you print on the QMS printers.
+% In order to get the rotation, however, you must transfer either the TeX
+% source or the DVI file to the Mac for printing with TeXtures.
+
+% (6) The position of the text outside the scope of the rotation is the same
+% as if the \rotate command were a no-op. Thus for example
+% abc{\rotate{-90}def}ghi
+% prints as
+% abc ghi
+% d
+% e
+% f
+
+% (7) Rotations can be stacked, e.g.,
+% abc{\rotate{-90}def\rotate{-90}ghi}jkl
+% would print as
+% abc jlk
+% d
+% e
+% f
+% ihg
+% except that the letters ``def'' would be sideways, and ``ghi'' would be
+% upside down. This is to be compared with
+% abc{\rotate{-90}def}{\rotate{-90}ghi}jkl
+% which prints as
+% abc jlk
+% d g
+% e h
+% f i
+
+% (8) \rotate can be useful in picture environments, e.g., when writing the y
+% axis label. E.g.,
+% \put(-50,100){\rotate{90}\makebox(0,0){$\tan\theta$}}
+% Here the \makebox centers the argument at the location of the \put. Thus
+% the text is rotated about the bottom-center of $\tan\theta$.
+
+% Technical details:
+
+% The following assumptions are made about the PostScript that TeXtures
+% generates:
+% (1) A single transform is used for all TeXtures output.
+% (2) The PostScript \special is bracketed by gsave ... grestore.
+% (3) Immediately after the gsave, the coordinate system is translated so the
+% origin is at the current point; and the y axis is flipped.
+% (4) TeXtures doesn't leave anything on the stack for long periods. (This
+% simplifies restoring the default coordinate system.)
+
+\def\rotate#1{\aftergroup\@unrotate
+\special
+{postscript
+ 0 0 transform % Current location in device coordinates.
+ grestore % Undoes TeXtures gsave.
+ matrix currentmatrix % Save default transform on stack
+ 3 1 roll % Put transform at back of current location.
+ itransform % Current location in TeXtures coords
+ dup 3 -1 roll % Duplicate the location
+ dup 4 1 roll exch % x y ==> x y x y
+ translate % Translate origin to current location.
+ #1\space neg % Negate angle because of flip of y axis.
+ rotate % Rotate.
+ neg exch neg exch translate % Translate origin back.
+ gsave}} % To match grestore.
+
+\def\@unrotate{\special
+{postscript
+ grestore % Undoes TeXtures gsave
+ setmatrix % Restore saved transform
+ gsave}} % To match grestore
+
+\endinput
diff --git a/macros/generic/misc/ruler.tex b/macros/generic/misc/ruler.tex
new file mode 100644
index 0000000000..c35928e6a6
--- /dev/null
+++ b/macros/generic/misc/ruler.tex
@@ -0,0 +1,656 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Typographic ruler for TeX, version 1.1
+% Copyright Victor Eijkhout 1999
+% file name: ruler.tex
+%
+% Author:
+% Victor Eijkhout
+% Department of Computer Science
+% University of Tennessee, Knoxville TN 37996
+%
+% victor@eijkhout.net
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% For a copy of the GNU General Public License, write to the
+% Free Software Foundation, Inc.,
+% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA,
+% or find it on the net, for instance at
+% http://www.gnu.org/copyleft/gpl.html
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file is identical to an earlier version which was on ctan and
+% other archive sites; only the license and copyright information
+% has changed.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\hsize=14.5cm \vsize=32cm \voffset=-1.5cm
+\nopagenumbers \raggedbottom
+\overfullrule=0pt
+%\tracingoutput=1
+\showboxbreadth=20 \showboxdepth=7
+
+\font\tiny=cmr5 \font\ss=cmr8
+\font\big=cmss10 scaled \magstep3
+\font\manual=cmr10
+
+%\font\tiny=helv at 5pt \font\ss=helv at 8pt
+%\font\big=helv at 16pt
+%\font\manual=times at 10pt
+
+\let\tt=\ss \let\rm=\ss
+\parindent=0cm \offinterlineskip
+\def\\{\hfill\break}
+
+\newdimen\margin \margin=.5cm
+\newdimen\linewidth \linewidth=0.05mm
+\newdimen\scalewidth \scalewidth=6mm \newdimen\magboxwidth
+\newdimen\gridheight \gridheight=8cm
+\newdimen\rulewidth \rulewidth=\scalewidth
+\newdimen\ruleboxheight \ruleboxheight=6mm
+
+\newbox\magscalenames \newbox\scale \newbox\grid
+\newbox\stairs \newbox\ruler
+\newcount\ncol \newcount\nrow
+\newcount\tempcount \newcount\tempcountb \newcount\tempcounth
+\newbox\tempboxa \newbox\tempboxb
+\newskip\tempskip \newskip\tempskipb
+\newdimen\tempdimen \newdimen\tempdimenb \newdimen\tempdimenc
+
+\newbox\storea \newbox\storeb \newbox\storec
+\newbox\stored \newbox\storee \newbox\storef
+\newbox\storeg \newbox\storeh \newbox\storei
+\newbox\storej
+
+\def\gobble#1{}
+\def\gobbletwo#1#2{}
+\def\gobblethree#1#2#3{}
+\def\gobblefive#1#2#3#4#5{}
+
+\def\hfilll{\hskip 0cm plus 1filll\relax}
+
+%%%%%%%%%%%%%%%% trace
+%\tracingonline=1
+%\tracingmacros=1
+
+%%%%%%%%%%%%%%%% auxiliaries
+\def\decimala %% #1=getal; a-> 1 plaats achter de komma
+ #1{{\tempcounth=#1\relax
+ \tempcountb=\tempcounth
+ \divide\tempcountb by 10\relax
+ \number\tempcountb.%
+ \multiply\tempcountb by 10\relax
+ \advance\tempcounth by -\tempcountb
+ \number\tempcounth}}
+
+\def\decimalb %% #1=getal; b-> 2 plaatsen achter de komma
+ #1{{\tempcounth=#1\relax
+ \tempcountb=\tempcounth
+ \divide\tempcountb by 100\relax
+ \number\tempcountb.%
+ \multiply\tempcountb by 100\relax
+ \advance\tempcounth by -\tempcountb
+ \ifnum\tempcounth<10 0\fi
+ \number\tempcounth}}
+
+\def\hundred#1{{\tempcounth=#1
+ \tempcountb=\tempcounth
+ \divide\tempcounth by 100\relax
+ \ifnum\tempcounth>0
+ \number\tempcounth.\fi
+ \multiply\tempcounth by 100
+ \advance\tempcountb by -\tempcounth
+ \ifnum\tempcountb<10 0\fi
+ \number\tempcountb}}
+
+\def\thousand#1{{\tempcount=#1 \tempcountb=\tempcount
+ \divide\tempcount by 1000
+ \ifnum\tempcount>0 \number\tempcount.\fi
+ \multiply\tempcount by 1000
+ \advance\tempcountb by -\tempcount
+ \ifnum\tempcountb<100 0\fi
+ \ifnum\tempcountb<10 0\fi
+ \number\tempcountb}}
+
+\def\headedbox %% #1=heading text #2=vbox
+ #1#2{\vtop{\vbox to 0cm{\vss\setbox0=\hbox to 0cm{\tt #1\hss} \dp0=0cm
+ \box0 \vskip2pt}
+ #2}}
+\def\boxit#1{\vbox{\hrule
+ \hbox{\vrule #1\vrule}
+ \hrule}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% baseline measurement %%%%%%%%%%%%%%%%%%%%%%%%
+\newskip\liftskip
+%% what baselineskips are needed?
+\def\baselinedist#1{\ifcase#1\or 5\or 6\or 7\or 8\or 9\or 10\or
+ 11\or 12\or 13\or 14\or 15\or 16\or 17\or
+ 18\or 20\or 22\or 25\or 30\fi}
+
+%% first one step in a ladder of baselineskips
+\def\baselinebox %% #1=size #2=number label
+ #1#2{\vbox to #1pt{\vfil
+ \moveright .5\hsize\vbox{\hrule height \linewidth
+ width .5\hsize}
+ \vfil\vbox to 0cm{\vss\hskip2pt\tiny\number#2\vskip\liftskip}
+ \hrule height \linewidth}}
+
+%% next a whole ladder of baselineskips
+\def\baselinescale %% #1=number of steps #2=point size
+ #1#2{\ifnum#2<7 \liftskip=0pt \else \liftskip=2pt \fi
+ \setbox\scale=\vbox{}%
+ \baselinescalei 1{#1}{#2}%
+ \edef\tcs{{#2}{\box\scale}}\expandafter\headedbox\tcs}
+\def\baselinescalei %% #1=label #2=number of steps #3=point size
+ #1#2#3{\ifnum#1>#2 \def\tcs{0}\let\next=\gobblethree
+ \else\tempcount=#1 \advance\tempcount by 1
+ \setbox\scale=\vtop{\hsize=\scalewidth
+ \advance\hsize by -\linewidth
+ \unvbox\scale
+ \baselinebox{#3}{#1}}%
+ \let\next\baselinescalei \edef\tcs{{\number\tempcount}}\fi
+ \expandafter\next\tcs{#2}{#3}}
+
+%% finally a grid of ladders of baselineskips
+\def\baselinegrid %% #1=number of baseline scales #2=storage box
+ #1#2{\setbox\grid=\hbox{}%
+ \setbox#2=\vtop{\hrule height 0pt depth \linewidth
+ \baselinegridi 1{#1}
+ \hrule height \linewidth}}
+\def\baselinegridi %% #1=current number #2=total number of baseline scales
+ #1#2{\ifnum#1>#2 \hbox{\vsize=\gridheight \unhbox\grid
+ \vrule width \linewidth}
+ \else\tempcount=\gridheight \tempskip=\baselinedist{#1}pt
+ \divide\tempcount by \tempskip \edef\tcs{{\number\tempcount}}
+ \setbox\grid=
+ \hbox{\vsize=\gridheight \unhbox\grid
+ \vrule width \linewidth
+ \expandafter\baselinescale\tcs{\baselinedist{#1}}}
+ \tempcount=#1 \advance\tempcount by 1 \edef\tcs{{\number\tempcount}}
+ \expandafter\baselinegridi\tcs{#2}\fi}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% magnified font sizes %%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\honcor
+\long\def\bungeltext#1#2{
+ \hrule height \linewidth
+ \kern1mm
+ \vbox{\hsize=#1\relax \rightskip=0cm plus 1fil
+ \lineskiplimit=0pt \lineskip=0pt \baselineskip=6pt
+ \tiny #2\par}}
+
+\def\magstep#1{\ifcase#1 1000\or 1095\or 1200\or 1440\or 1728\or
+ 2074\or 2488\fi}
+\def\tienstep#1{\ifcase#1 10\or 10.95\or 12\or 14.4\or 17.28\or
+ 20.74\or 24.88\fi}
+\def\zevenstep#1{\ifcase#1 7\or 7.67\or 8.4\or 10.08\or 12.10\or
+ 14.52\or 17.42\fi}
+\def\vijfstep#1{\ifcase#1 5\or 5.48\or 6\or 7.2\or 8.64\or
+ 10.37\or 12.44\fi}
+
+\def\magname#1{\ifcase#1 0\or half\or 1\or 2\or 3\or 4\or 5\fi}
+\def\cmmagbox#1{{\divide\tempdimen by 1000
+ \multiply\tempdimen by \magstep#1%
+ \tempdimenb=.01mm \tempdimenc=\tempdimen
+ \divide\tempdimenc by \tempdimenb
+ \tempcount=\tempdimenc
+ \edef\next{\the\tempcount}%
+ \divide\honcor by 1000
+ \multiply \honcor by \magstep#1\relax
+ \tempdimenc=.01pt \divide\honcor by \tempdimenc
+ \edef\mixt{\the\honcor}%
+ \edef\next{\noexpand\magbox{\the\tempdimen}{\magname#1}%
+ {\noexpand\hundred{\next}}
+ {\noexpand\corrout#1}}\next}}
+\def\magbox %% #1=height #2=first text #3=second #4=third
+ #1#2#3#4{\vtop{\hbox{\vrule width\linewidth
+ \vbox{\hrule width \magboxwidth height \linewidth
+ \kern #1}}
+ \bungeltext\magboxwidth
+ {#2\par #3\par #4\par}
+ }}
+
+\def\magsteps{\vtop{\hbox{\cmmagbox0\cmmagbox1\cmmagbox2%
+ \cmmagbox3\cmmagbox4\cmmagbox5\cmmagbox6%
+ \vrule width \linewidth depth 0cm}}}
+
+\def\magrow %% #1=name #2=unit numerator #3=unit denominator
+ %% #4=unit size #5=design size #6=store box
+ #1#2#3#4#5#6{\tempdimen=#4 \divide\tempdimen by #3
+ \multiply\tempdimen by #2
+ \tempdimenb=#5pt \honcor=\tempdimenb
+ \ifnum#5=10 \let\corrout\tienstep
+ \else\ifnum#5=7 \let\corrout\zevenstep
+ \else \let\corrout\vijfstep \fi\fi
+ \magboxwidth=\scalewidth \setbox\tempboxa=\magsteps
+ \setbox\tempboxb=
+ \vtop{\vbox{\hsize=1.2cm
+ \lineskiplimit=0pt \lineskip=0pt
+ \baselineskip=6pt
+ \def\\{\hfil\break} \tiny #1
+ \par \kern1mm}
+ \setbox0=\hbox{\tiny point size }
+ \bungeltext{\wd0}{magstep\par
+ mm \par point size\par}}
+ \tempdimen=\wd\tempboxa \advance\tempdimen by \wd\tempboxb
+ \advance\tempdimen by 2mm
+ \setbox#6=
+ \hbox to \tempdimen{\box\tempboxa \kern2mm \box\tempboxb}}
+
+\def\magsizebox %% #1=text
+ #1{\hbox to 1.5\scalewidth{\hfil \tiny #1\hfil}}
+
+%%%%%%%%%%%%%%%%%%%%%%%% general magrows %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\gmagsteps %% #1=from #2=by #3=to
+ #1#2#3{\tempcount=#1\relax
+ {\multiply\tempdimen by \tempcount \tempcountb=\tempdimen
+ \tempdimenc=.01mm \divide\tempcountb by \tempdimenc
+ \edef\next{\the\tempcountb}%
+ \edef\next{\noexpand\magbox{\the\tempdimen}{\the\tempcount}%
+ {\noexpand\hundred{\next}}{}}%
+ \next}%
+ \advance\tempcount by #2%
+ \ifnum\tempcount=#3\relax\vrule width \linewidth depth 0cm
+ \else\edef\next{\noexpand\gmagsteps
+ {\number\tempcount}{#2}{#3}}\next\fi}
+
+\def\gmagrow %% #1=name #2=unit numerator #3=unit denominator
+ %% #4=unit size #5=from #6=by #7=to #8=store box
+ #1#2#3#4#5#6#7#8{\tempdimen=#4 \divide\tempdimen by #3
+ \multiply\tempdimen by #2
+ \setbox#8=\hbox{\magboxwidth\scalewidth \gmagsteps{#5}{#6}{#7}
+ \ {}
+ \vtop{\kern0cm
+ \setbox0=\hbox{\tiny point size }
+ \bungeltext{\wd0}{point size\\mm}}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rulers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifleftruler \newdimen\stapje \newdimen\Stap \newdimen\hstapje
+\newcount\halfway \newcount\alltheway
+\newbox\onerulerbox
+\newdimen\vollebreedte \newdimen\vollebreedteplus
+\newdimen\overschot \overschot=.75mm
+
+\def\doalltheway
+ #1#2#3{#3{#1}\relax
+ \ifnum#1=#2\relax\else
+ \tempcount=#1 \advance\tempcount by 1
+ \expandafter\doalltheway\expandafter
+ {\number\tempcount}{#2}{#3}\fi}
+
+\def\centimeterruler{\Stap=1cm \leftrulerfalse
+ \vollebreedte=1cm\relax
+ \def\rulename{centimeter}%
+ \let\ruledigitfont=\rm
+ \alltheway=10 \doruler{cm}}
+\def\inchruler{\Stap=1in \leftrulertrue
+ \vollebreedte=1cm\relax
+ \def\rulename{inch}%
+ \let\ruledigitfont=\rm
+ \alltheway=8 \doruler{inch}}
+\def\picaruler{\Stap=12pt \leftrulerfalse
+ \vollebreedte=1cm\relax
+ \def\rulename{pica}%
+ \let\ruledigitfont=\tiny
+ \alltheway=6 \doruler{pica}}
+\def\rulerpiece
+ #1{\vbox to \stapje{\vfil \rulerhalfline \vfil \rulerline{#1}}}
+\def\rulerline %% streepje over aantal mm; halfweg volle breedte
+ #1{\ifnum#1=\halfway \tempskipb=\vollebreedteplus
+ \else \tempskipb=#1\hstapje
+ \advance\tempskipb by \overschot \fi
+ \hbox to \vollebreedteplus
+ {\maybeleft \vrule width\tempskipb height\linewidth
+ \mayberight }}
+\def\rulerhalfline
+ {\tempskipb=.5\hstapje \advance\tempskipb by \overschot
+ \hbox to \vollebreedteplus
+ {\maybeleft\vrule width\tempskipb height\linewidth
+ \mayberight}}
+\def\rulerbox %% #1=label
+ #1{\vbox to 0cm{\kern.75mm\relax %was .5\stapje
+ \hbox to \vollebreedteplus
+ {\mayberight
+ \kern.75mm\ruledigitfont
+ #1\kern.75mm
+ \maybeleft}
+ \vss}
+ \copy\onerulerbox}
+\def\makerulerbox{\global\setbox\onerulerbox=
+ \vbox to \Stap{\vbox to 0cm
+ {\hbox{\ifleftruler\kern\overschot\fi
+ \kern.5\vollebreedte
+ \vrule depth \Stap width\linewidth}
+ \vss}
+ \doalltheway1{\alltheway}{\rulerpiece}
+ \vss}}
+\def\doruler %% #1=unit name #2=length #3=storage box
+ #1#2#3{\ifleftruler \let\maybeleft\relax \let\mayberight\hfil
+ \else \let\maybeleft\hfil \let\mayberight\relax
+ \fi
+ \bgroup \halfway=\alltheway \divide\halfway by 2\relax
+ \stapje=\Stap \divide\stapje by \alltheway
+ \hstapje=\vollebreedte \divide\hstapje by \alltheway
+ \vollebreedteplus=\vollebreedte
+ \advance\vollebreedteplus by \overschot
+ \makerulerbox
+ \setbox\ruler=\vbox{\hrule width \vollebreedteplus height\linewidth}%
+ \doruleri 0{#2}\relax
+ \global\setbox\ruler=
+ \hbox{\ifleftruler\else\vrule width\linewidth\fi
+ \box\ruler
+ \ifleftruler \vrule width\linewidth \fi}%
+ \xdef\tcs{{#1}{\box\ruler}}\egroup
+ \setbox#3\expandafter\headedbox\tcs}
+ \def\doruleri
+ #1#2{\ifnum#1>#2 \let\next=\gobbletwo \def\tcs{0}%
+ \else \setbox\ruler=
+ \vtop{\unvbox\ruler\rulerbox{#1}}%
+ \let\next=\doruleri
+ \tempcount=#1\relax \advance\tempcount by 1
+ \edef\tcs{{\number\tempcount}}\fi
+ \expandafter\next\tcs{#2}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% paper size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\papersize#1#2{\vtop
+ {\kern0cm\vbox to #2{
+ \vbox to #1{\vfil\hrule width 2mm height 0cm depth \linewidth}
+ \vfil\hrule width 2mm height 0cm depth \linewidth}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%% rule thickness %%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\rulelength \rulelength=.75\scalewidth
+\newdimen\interruleskip \interruleskip=.5\scalewidth
+
+\def\ruleboxh %% #1=rule thickness #2=label
+ #1#2{\setbox\tempbox=
+ \vbox{\hsize=\rulewidth
+ \vfill \vskip10pt \hbox{\tiny \rulenum{#2}}
+ \vskip1pt \hrule height #1 width \rulewidth}%
+ \ifdim\ht\tempbox<\ruleboxheight
+ \vbox to \ruleboxheight{\unvbox\tempbox}%
+ \else\box\tempbox\fi}
+\def\ruleboxv %% #1=rule thickness #2=label
+ #1#2{\vtop{\kern0cm
+ \hbox{\hbox to 5mm{\tiny \hfil \rulenum{#2}\kern1mm}%
+ \vrule height \rulelength width #1}
+ \kern \interruleskip}}
+\let\rulebox=\ruleboxv
+\def\rulestackhead %% #1=minimal label #2=label step
+ %% #3=minimal dimen #4=dimen step
+ %% #5=maximal label #6=storage box #7=header
+ #1#2#3#4#5#6#7{\setbox\scale=\vbox{}%
+ \rulestacki{#1}{#2}{#3}{#4}{#5}%
+ \setbox#6=\headedbox{#7}{\box\scale}}
+\def\rulestack %% #1=minimal label #2=label step
+ %% #3=minimal dimen #4=dimen step
+ %% #5=maximal label #6=storage box
+ #1#2#3#4#5#6{\setbox\scale=\vbox{}%
+ \rulestacki{#1}{#2}{#3}{#4}{#5}%
+ \setbox#6=\box\scale}
+\def\rulestacki %% #1=curr label #2=label step
+ %% #3=curr dimen #4=dimen step #5=total dimen
+ #1#2#3#4#5{\ifnum#1>#5%
+ \setbox\scale=
+ \vtop{\unvbox\scale \setbox0=\lastbox}%
+ \let\next=\gobblefive \def\tcs{0}%
+ \else \setbox\scale=
+ \vtop{\unvbox\scale
+ \rulebox{#3}{#1}}%
+ \tempskip=#3\relax \advance\tempskip by #4\relax
+ \tempcount=#1\relax \advance\tempcount by #2\relax
+ \let\next=\rulestacki
+ \edef\tcs{{\number\tempcount}}\fi
+ \expandafter\next\tcs{#2}{\tempskip}{#4}{#5}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% conversion table %%%%%%%%%%%%%%%%%%%%%%%%
+\def\num{\ss\enspace\hfill}
+\def\me#1{\ifcase#1\relax\or pt\or pc\or dd\or cc\or bp\or mm\or in\fi}
+\def\table{\halign{\strut\hbox to 1cm{\tt##\hfil}\vrule\enspace
+ &\num##&\num##&\num##&\num##&\num##&\num##&\num##\cr
+ \hfill&\tt \me1&\tt \me2&\tt \me3&\tt \me4&\tt \me5&\tt \me6&\tt \me7\cr
+ \noalign{\hrule}
+ \me1&1&.0833&&&&.351&.0138\cr
+ \me2&12&1&&&&4.218&.166\cr
+ \me3&&&1&.0833&&.376&.0148\cr
+ \me4&&&12&1&&4.513&.1777\cr
+ \me5&&&&&1&.383&.0139\cr
+ \me6&2.845&.237&2.659&.222&2.835&1&.0394\cr
+ \me7&72.27&6.0225&67.54&5.628&72&25.4&1\cr
+ }}
+%%%%%%%%%%%%%%%%%%%%%%%%%% the whole sheet %%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\opskip{\vskip.5mm\relax}
+\let\neerskip\opskip
+
+\output{}
+
+\begingroup\hsize=12cm \vsize=8in
+\parindent=0pt \parskip=6pt
+\rightskip=0cm plus 5cm \normalbaselines
+
+\hbox{}\vskip3cm
+\big The \TeX\ ruler
+
+\manual
+This is the \TeX\ ruler, a measuring device for
+typographical designers working with \TeX. It includes ordinary
+rulers in inches, centimeters, and picas.
+It can be used to measure font sizes, baseline distances,
+and rule weights. The design is based on a ruler
+by Inge~Eijkhout, implementation in \TeX\ is by
+Victor~Eijkhout.
+
+The \TeX\ ruler is shareware, distributed under the GNU Public License.
+If you want to show your appreciation, send a contribution
+to the address below.
+
+How to format and print this file
+
+This file will give you three pages. Most likely the second one
+cannot be handled by your printer, but I've included it for
+completeness. At the top of the source file, 3 fonts are
+declared. Please change the CM fonts to something more pretty,
+eg Helvetica.
+
+How to use the \TeX\ ruler
+
+Rulers. Use them like ordinary rulers. It is suggested
+that you print the \TeX\ ruler on transparent plastic and
+cut the edges along the rulers.
+
+Baseline distances. Put the top line along the baseline
+of some line of text. Then see in what column the other
+lines of text line up.
+
+Font sizes: cap height. Take an uppercase letter
+such as `K' or `H'. Find the line with its font name,
+or use the first line. See what box on that line
+it fits in best, with the character completely between
+the lines. Read out the magnification and size of the
+font. Alternately check on all lines which box fits
+best, then read out the size.
+
+General remark: all lines have a width of .05 millimeter.
+This is less than the dot width of a 300dpi
+laser printer, so beware of some inaccuracies.
+Also your printer driver may introduce
+inaccuracies.
+
+\leavevmode
+{\obeylines \parskip=0pt %
+Victor Eijkhout
+Department of Computer Science
+University of Tennessee
+Knoxville, TN 37996
+USA\par {\tt victor@eijkhout.net}}
+
+\vfil
+Copyright 1990-99 by Victor Eijkhout
+\eject
+\endgroup
+
+\endlinechar-1
+
+\def\BigSheet{\leavevmode
+\leftrulertrue \inchruler{11}{\storea}
+\box\storea
+\papersize{8.5in}{11in}
+%
+\vtop{
+ \baselinegrid{18}\storea \box\storea
+ \kern1mm
+ \moveright2mm
+ \vbox{\hbox{\ss Baseline distances}
+ \neerskip \hrule}
+ \kern5mm
+ %
+ \moveright2mm
+ \hbox{
+ \vtop{\vbox{\hrule \opskip \hbox{\ss Cap heights}}
+ \kern-3mm
+ \def\a{\kern2mm}
+ \magrow{cmr10\\cmbx10\\cmss10\\cmmi10}{250}{36}{1pt}{10}\storec
+ \magrow{cmtt10\\cmff10}{220}{36}{1pt}{10}\stored
+ \magrow{cmr7\\cmbx7\\cmmi7}{175}{36}{1pt}7\storee
+ \magrow{cmr5\\cmbx5\\cmmi5}{125}{36}{1pt}5\storef
+ \vbox{\a\box\storec \a\box\stored
+ \a\box\storee \a\box\storef}
+ %
+ \gmagrow{cmr10}{25}{36}{1pt}51{14}\storec
+ \gmagrow{cmr10}{25}{36}{1pt}{15}1{24}\stored
+ \gmagrow{cmr10}{25}{36}{1pt}{26}2{44}\storee
+ \gmagrow{cmr10}{25}{36}{1pt}{46}2{64}\storef
+ \vbox{\a\box\storec \a\box\stored
+ \a\box\storee \a\box\storef}
+ %
+ \leftrulertrue \picaruler{19}{\storea}
+ \setbox\storeb=\vtop{\kern0cm
+ \def\a{}%{\moveright1cm}
+ \a\vbox{\hrule \opskip
+ \hbox{\strut\ss Conversion of units}}
+ \kern2mm
+ \halign{\vrule height8pt depth3pt width0pt
+ \ss##\ &${}={}$\hfil\ \ss##&$\,$##\cr
+ 1{\tt in}& 72.27&{\tt pt}\cr
+ 1{\tt in}& 72&{\tt bp}\cr
+ 1{\tt in}& 25.4&{\tt mm}\cr
+ 1157{\tt dd}& 1238&{\tt pt}\cr
+ 1{\tt pt}& 65536&{\tt sp}\cr}
+ \kern2mm \table
+ \kern8mm
+ \hbox{\hskip1cm \big The \TeX\ Ruler}
+ \kern2pt
+ \hbox{\hskip1cm \tiny Design:\ {}
+ Inge and Victor Eijkhout 1990--96}}
+ \kern4mm
+ \hbox{\box\storea \kern2mm \box\storeb}
+ }%end of \vtop
+ \kern-1cm
+ \vtop{\vbox{\hrule \opskip \hbox{\ss Rule weights}}
+ \kern5mm
+ \let\rulenum=\decimalb
+ \rulestackhead{5}{5}{0.05mm}{0.05mm}{100}\storeg{mm}
+ \rulestack {100}{25}{1mm}{0.25mm}{525}\storeh
+ \let\rulenum=\decimala
+ \rulestackhead{5}{5}{.5pt}{.5pt}{151}\storei{pt}
+ \hbox{\box\storeg \kern3mm \box\storeh \kern3mm \box\storei}
+ }%end of second \vtop
+ }%end of \hbox
+ }
+%
+\kern2mm\relax
+\leftrulerfalse \centimeterruler {29}{\storea}
+\papersize{21cm}{29.7cm}
+\box\storea
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\smallsheet{\leavevmode
+\leftrulertrue \inchruler{9}{\storea}
+\box\storea \kern2mm
+%
+\vtop{
+ \baselinegrid{18}\storea \box\storea
+ \kern1mm
+ \moveright2mm
+ \vbox{\hbox{\ss Baseline distances}
+ \neerskip \hrule}
+ \kern5mm
+ %
+ \moveright2mm
+ \hbox{
+ \vtop{\vbox{\hrule \opskip \hbox{\ss Cap heights}}
+ \kern-3mm
+ \def\a{\kern2mm}
+ \magrow{cmr10\\cmbx10\\cmss10\\cmmi10}{250}{36}{1pt}{10}\storec
+ \magrow{cmtt10\\cmff10}{220}{36}{1pt}{10}\stored
+ \magrow{cmr7\\cmbx7\\cmmi7}{175}{36}{1pt}7\storee
+ \magrow{cmr5\\cmbx5\\cmmi5}{125}{36}{1pt}5\storef
+ \vbox{\a\box\storec \a\box\stored
+ \a\box\storee \a\box\storef}
+%
+ \leftrulertrue \picaruler{19}{\storea}%\showbox\storea
+ \setbox\storeb=\vtop{\kern0cm
+ \def\a{}%{\moveright1cm}
+ \a\vbox{\hrule \opskip
+ \hbox{\strut\ss Conversion of units}}
+ \kern2mm
+ \halign{\vrule height8pt depth3pt width0pt
+ \ss##\ &${}={}$\hfil\ \ss##&$\,$##\cr
+ 1{\tt in}& 72.27&{\tt pt}\cr
+ 1{\tt in}& 72&{\tt bp}\cr
+ 1{\tt in}& 25.4&{\tt mm}\cr
+ 1157{\tt dd}& 1238&{\tt pt}\cr
+ 1{\tt pt}& 65536&{\tt sp}\cr}
+ \kern2mm \table
+ \kern8mm
+ \hbox{\hskip1cm \big The \TeX\ Ruler}
+ \kern2pt
+ \hbox{\hskip1cm \tiny Design:\ {}
+ Inge and Victor Eijkhout 1990--96}}
+ \kern4mm
+ \hbox{\box\storea \kern2mm \box\storeb}
+ }%end of \vtop
+ \kern-1cm
+ \vtop{\vbox{\hrule \opskip \hbox{\ss Rule weights}}
+ \kern5mm
+ \let\rulenum=\decimalb
+ \rulestackhead{5}{5}{0.05mm}{0.05mm}{50}\storeg{mm}
+ \rulestack {50}{10}{.5mm}{0.1mm}{160}\storeh
+ \let\rulenum=\decimala
+ \rulestackhead{5}{5}{.5pt}{.5pt}{101}\storei{pt}
+ \hbox{\box\storeg \kern3mm \box\storeh \kern3mm \box\storei}
+ }%end of second \vtop
+ }%end of \hbox
+ }
+%
+\kern2mm\relax
+\leftrulerfalse \centimeterruler {23}{\storea}
+\box\storea
+}
+
+
+\count0=2
+\BigSheet
+\vfill\eject
+\count0=3
+\smallsheet
+
+\end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/misc/selectpage.tex b/macros/generic/misc/selectpage.tex
new file mode 100644
index 0000000000..5a1405d3c4
--- /dev/null
+++ b/macros/generic/misc/selectpage.tex
@@ -0,0 +1,30 @@
+%From Tugboat volume 8, number 2 july 1987
+%by Donald Knuth
+%
+% The idea is to make TeX look for a file called pages.tex. if such a
+%file doesn't exit, everything works as before, Otherwise the file
+%should contain a list of apge numbers, one per line, in the order that
+%they will be generated. After the last page number has been matched,
+%all further pages will be printed. Thus, if you want ot print pages
+%123 and all pages from 300 onwards, your file pages.tex should say
+% 123
+% 300
+%but if you want to print pages 123 and 300 only, the file should say,
+%e.g.,
+% 123
+% 300
+% -99999999999 % impossible number
+%so that the end of file will never occur.
+%
+
+\let\Shipout=\shipout
+\newread\pages \newcount\nextpage \openin\pages=pages
+\def\getnextpage{\ifeof\pages\else
+ {\endlinechar=-1\read\pages to\next \ifx\next\empty % in this case we
+should have eof now \else\global\nextpage=\next\fi}\fi}
+\ifeof\pages\else\message{OK, I'll ship only the requested pages!}
+ \getnextpage\fi
+\def\shipout{\ifeof\pages\let\next=\Shipout
+ \else\ifnum\pageno=\nextpage\getnextpage\let\next=\Shipout
+ \else\let\next=\Tosspage\fi\fi \next}
+\newbox\garbage \def\Tosspage{\deadcycles=0\setbox\garbage=}
diff --git a/macros/generic/misc/shadebox.tex b/macros/generic/misc/shadebox.tex
new file mode 100644
index 0000000000..da352d44b4
--- /dev/null
+++ b/macros/generic/misc/shadebox.tex
@@ -0,0 +1,171 @@
+%% Save file as: SHADEBOX.TEX Source: FILESERV@SHSU.BITNET
+%% Author: Leo@vaxc.cc.monash.edu.au
+%% Original Source: Posted by Jim Hefferon <HEFFERON@SMCVAX.BITNET> to
+%% INFO-TeX on Thu, 16 Jan 1992 11:21 EST
+
+%% Small (and subtle) bug correction on 25 July 2002
+%% by Danilo {\v S}egan <mm01142@alas.matf.bg.ac.yu>
+%%
+%% The mysterious factor of 65782 is number of sp in 1bp, or 1bp/1pt * 65536.
+%% 1pt - printer point 1/72.27"
+%% 1bp - ps point aka bigpoint 1/72"
+%% 65536 - a number of TeX's scaled points (sp) in 1pt.
+%%
+%% The other solution is to use temporary registers for dividing all
+%% dimensions by 1bp, but who would want to do that?
+
+
+%----------------------------------------------------------------------------
+\newbox\graybox
+\newdimen\xgrayspace
+\newdimen\ygrayspace
+%----------------------------------------------------------------------------
+%
+% The following \TeX code was based on previous work by
+%
+% Je'ro^me Maillot, maillot@bora.inria.fr
+%
+%----------------------------------------------------------------------------
+%
+% Use the following for one or more words within a line.
+%
+\def\textshade#1#2{%
+ \xgrayspace=4pt%
+ \ygrayspace=4pt%
+ \def\grayshade{0.95}%
+ \def\linewidth{1}%
+ \def\theradius{5}%
+ \setbox\graybox=\hbox{\surroundboxa{#2}}%
+ \hbox{%
+ \hbox to 0pt{%
+ \special{"gsave newpath 0 0 moveto %
+ 0 1 copy /xmin exch store %
+ \number\dp\graybox \space -65782 div 1 copy /ymin exch store %
+ \number\wd\graybox \space 65782 div 1 copy /xmax exch store %
+ \number\ht\graybox \space 65782 div 1 copy /ymax exch store %
+ \theradius\space /radius exch store
+ \linewidth\space /linewidth exch store
+ \grayshade\space /grayshade exch store
+ #1 grestore}}%
+ \box\graybox}}%
+%
+% Use the following for paragraphs.
+%
+\def\parashade#1#2{%
+ \xgrayspace=10pt%
+ \ygrayspace=10pt%
+ \def\grayshade{0.95}%
+ \def\linewidth{2}%
+ \def\theradius{10}%
+ \def\thevskip{15pt}%
+ \setbox\graybox=\hbox{\surroundboxb{#2}}%
+ \vskip\thevskip
+ \hbox{%
+ \hbox to 0pt{%
+ \special{"gsave newpath 0 0 moveto %
+ 0 1 copy /xmin exch store %
+ \number\dp\graybox \space -65782 div 1 copy /ymin exch store %
+ \number\wd\graybox \space 65782 div 1 copy /xmax exch store %
+ \number\ht\graybox \space 65782 div 1 copy /ymax exch store %
+ \theradius\space /radius exch store
+ \linewidth\space /linewidth exch store
+ \grayshade\space /grayshade exch store
+ #1 grestore}}%
+ \box\graybox}%
+ \vskip\thevskip%
+}%
+%----------------------------------------------------------------------------
+%
+% A pair of box macros. Each builds a slightly oversized box
+% containing the text. The text is centred both in the vertical
+% horizontal directions.
+%
+% Use the following for one or more words within a line.
+%
+\long\def\surroundboxa#1{\leavevmode\hbox{\vtop{%
+\vbox{\kern\ygrayspace%
+\hbox{\kern\xgrayspace#1%
+ \kern\xgrayspace}}\kern\ygrayspace}}}
+%
+% Use the following for a paragraphs.
+%
+\long\def\surroundboxb#1{\leavevmode\hbox{\vtop{%
+\vbox{\kern\ygrayspace%
+\hbox{\kern\xgrayspace\vbox{\advance\hsize-2\xgrayspace#1}%
+ \kern\xgrayspace}}\kern\ygrayspace}}}
+%----------------------------------------------------------------------------
+%
+% Here are some simple PostScript routines.
+%
+% The TeX command \PScommands must be called before any of the
+% shading routines can be used.
+%
+\long\def\PScommands{\special{! TeXDict begin
+%
+/sharpbox{%
+ newpath
+ xmin ymin moveto
+ xmin ymax lineto
+ xmax ymax lineto
+ xmax ymin lineto
+ xmin ymin lineto
+ closepath
+ }bind def
+%
+/roundbox{%
+ newpath
+ xmin radius add ymin moveto
+ xmax ymin xmax ymax radius arcto
+ xmax ymax xmin ymax radius arcto
+ xmin ymax xmin ymin radius arcto
+ xmin ymin xmax ymin radius arcto 16 {pop} repeat
+ closepath
+ }bind def
+%
+/sharpcorners{%
+ sharpbox gsave grayshade setgray fill grestore
+ linewidth setlinewidth stroke
+ }bind def
+%
+/plainbox{%
+ sharpbox grayshade setgray fill
+ }bind def
+%
+/roundcorners{%
+ roundbox gsave grayshade setgray fill grestore
+ linewidth setlinewidth stroke
+ }bind def
+%
+end}% Closes dictionnary
+}%
+
+\PScommands
+
+This is a test of a\ \textshade{roundcorners}{shaded box} routine.
+%
+This is another test of a\ \textshade{sharpcorners}{shaded box} routine
+
+\parashade{roundcorners}{%
+This is one very long line which I expect will be broken over one or more
+lines. The idea is to have this paragraph enclosed in a shaded box. I'll
+just keep on typing until I can be sure that there are more than two lines
+in this paragraph. I expect that this should be well and truely sufficient
+to test this macro.
+}
+\parashade{sharpcorners}{%
+This is one very long line which I expect will be broken over one or more
+lines. The idea is to have this paragraph enclosed in a shaded box. I'll
+just keep on typing until I can be sure that there are more than two lines
+in this paragraph. I expect that this should be well and truely sufficient
+to test this macro.
+}
+
+The field equations of General Relativity are\ %
+%
+\textshade{roundcorners}{\hbox{$G_{\mu\nu} = kT_{\mu\nu}$}}
+
+They can also be written as
+
+\parashade{sharpcorners}{$$R_{\mu\nu}-{1\over2}g_{\mu\nu}R = kT_{\mu\nu}$$}
+
+\bye
diff --git a/macros/generic/misc/swrule.sty b/macros/generic/misc/swrule.sty
new file mode 100644
index 0000000000..1632cf3c9d
--- /dev/null
+++ b/macros/generic/misc/swrule.sty
@@ -0,0 +1,89 @@
+% swrule.sty
+% Written by Tobias G. Dussa <tdussa@sdhs.de>
+% 09oct01
+% Copyright (C) by Tobias G. Dussa <tdussa@sdhs.de>
+%
+% Provides two macros to create english lines a.k.a. swelled rules (i.e.
+% lines % that become thicker towards the middle, much like a very
+% far-stretched diamond) that only use plain tex means.
+%
+% The macros provided are
+% - \swrule{length}{maximum width}
+% - \swrulex{length}{minimum width}{maximum width}
+%
+% The \swrule macro is just a shortcut for \swrulex{length}{0pt}{max width}.
+%
+% The minimum width is the width of the line at the far left and
+% right ends, while the maximum width is the width of the line in
+% the very middle.
+%
+% The english line is made up of many short lines of different widths.
+% The counter variable \swrulecount specifies how many small line pieces
+% should be used to approximate the english line. It is set to 50 by
+% default. The larger this value is, the finer-grained the resulting
+% english line will be, so that the steps will not be as obvious.
+% The \swrulecount variable should never be set to one, as a division
+% by zero would occur. Likewise, any value smaller than 1 is pointless,
+% albeit possible.
+%
+% The style package is a quick hack. If any error should occur, then
+% I would greatly appreciate learning about it.
+% Likewise, any suggestion is appreciated.
+%
+% The style package is copyrighted but may be used and extended in
+% any way, as long as a pointer to the original author is maintained.
+% The author is not liable for any problem that may or may not result
+% from using this package. Use at your own risk.
+%
+% Enjoy.
+
+\newcount\swrulecount
+\newcount\swrulestep
+\newdimen\swrulemin
+\newdimen\swrulemax
+\newdimen\swrulelength
+\newdimen\swruleraise
+\newdimen\swrulewidth
+\newdimen\swruledelta
+\newdimen\swrulepiece
+
+\swrulecount=50
+
+\def\swrulex#1#2#3{%
+\swrulestep=\swrulecount%
+\advance\swrulestep by -1%
+\swrulelength=#1%
+\swrulemin=#2%
+\swrulemax=#3%
+\swrulewidth=\swrulemin%
+\swruleraise=\swrulemax%
+\advance\swruleraise by -\swrulemin%
+\divide\swruleraise by 2%
+\swruledelta=\swrulemax%
+\advance\swruledelta by -\swrulemin%
+\divide\swruledelta by \swrulestep%
+\multiply\swrulestep by 2\advance\swrulestep by 1%
+\swrulepiece=\swrulelength%
+\divide\swrulepiece by \swrulestep%
+\swrulestep=1%
+\hbox{%
+\loop%
+\raise\swruleraise\hbox{\rule{\swrulepiece}{\swrulewidth}}%
+\ifnum\swrulestep<\swrulecount%
+\advance\swrulestep by 1%
+\advance\swruleraise by -\swruledelta%
+\advance\swrulewidth by 2\swruledelta%
+\repeat%
+\advance\swrulestep by -1%
+\advance\swruleraise by \swruledelta%
+\advance\swrulewidth by -2\swruledelta%
+\loop%
+\raise\swruleraise\hbox{\rule{\swrulepiece}{\swrulewidth}}%
+\ifnum\swrulestep>1%
+\advance\swrulestep by -1%
+\advance\swruleraise by \swruledelta%
+\advance\swrulewidth by -2\swruledelta%
+\repeat%
+}}
+
+\def\swrule#1#2{\swrulex{#1}{0pt}{#2}}
diff --git a/macros/generic/misc/tabto.tex b/macros/generic/misc/tabto.tex
new file mode 100644
index 0000000000..457bd9e4ed
--- /dev/null
+++ b/macros/generic/misc/tabto.tex
@@ -0,0 +1,39 @@
+%-------------- tabto.tex ------------
+% Donald Arseneau <asnd@triumf.ca>
+%
+% This software is contributed to the public domain.
+% See tabto.sty for more useful definitions for LaTeX.
+%
+% Tab to a position relative to the left margin in a paragraph:
+% some text \tabto{1in} more text, and \tabto 3in final text.
+% If the text on the line already goes past the desired position,
+% the tab starts a new line.
+% Note that braces are allowed, but not required.
+%
+
+\newdimen \scratchdim % or use \@tempdima in LaTeX
+\newdimen \scratchDIM % or use \@tempdimb in LaTeX
+
+% this preliminary mess is just TeX's awful way of reading a parameter
+% with or without braces.
+
+\def\tabto{\futurelet\nExt\tabtO}
+\def\tabtO{\ifx\nExt\bgroup\let\nExt\TabTo\else\let\nExt\tabtOO\fi\nExt}
+\def\tabtOO{\afterassignment\tabTOO\scratchDIM }
+\def\tabTOO{\TabTo\scratchDIM}
+
+\def\TabTo#1{\begingroup\leavevmode
+\ifinner\scratchdim=0pt\relax % in a \hbox, so ignore
+\else % unrestricted horizontal mode
+ \parfillskip=0pt plus 1fill % must swamp the -1fil glue
+ \hfil\null\penalty20 \hskip0ptplus-1fil
+ \hbox{\mathstrut\kern\hsize\kern-#1}\vadjust{\nobreak}\par
+ \scratchdim=\prevdepth
+ \prevdepth=-999pt % make sure I get an exact \baselineskip
+ \parskip=-999pt % but cancel the extra space
+ \advance\parskip-\baselineskip % cancel the \baselineskip
+ \advance\parskip-\scratchdim
+ \noindent
+\fi \hbox to#1{\vrule depth\scratchdim width0pt\hss}\endgroup
+\ignorespaces}
+
diff --git a/macros/generic/misc/tex.logos b/macros/generic/misc/tex.logos
new file mode 100644
index 0000000000..19d8e3fb5d
--- /dev/null
+++ b/macros/generic/misc/tex.logos
@@ -0,0 +1,9 @@
+\def\TeXMaG{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX% TeX part
+ M\kern-.1667em\lower.5ex\hbox{A}\kern-.2267emG}
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em
+ S$-\TeX}
+\def\SliTeX{Sli\TeX}
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
diff --git a/macros/generic/misc/time.sty b/macros/generic/misc/time.sty
new file mode 100644
index 0000000000..e1b86ce46d
--- /dev/null
+++ b/macros/generic/misc/time.sty
@@ -0,0 +1,30 @@
+%%% Save file as: TIME.STY (TIME.TEX) Source: FILESERV@SHSU.BITNET
+%%% Author: Sunando Sen <sens@nyuacf.bitnet> <sens@acfcluster.nyu.edu>
+%%% Source: INFO-TeX@SHSU.edu, Mon, 6 Jan 1992 23:14 EST
+%%% Purpose: The command \now produces the current time in hh:mm A.M./P.M.
+%%% format; similar to \today
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%% Macro to write the current time %%%%%%%%%%%%%%%%%%%
+% \now produces the current time, e.g., 11:15 A.M. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\hour \newcount\minute
+\hour=\time \divide \hour by 60
+\minute=\time
+
+\count99=\hour \multiply \count99 by -60 \advance \minute by \count99
+
+\def\now{%
+\ifnum \hour<13
+ \ifnum \hour=0 \advance \hour by 12 \number\hour:\else \number\hour:\fi%
+ \ifnum \minute<10 0\fi%
+ \number\minute%
+\ A.M.%
+\else \advance \hour by -12 \number\hour:%
+ \ifnum \minute<10 0\fi%
+ \number\minute%
+ \ P.M.%
+\fi%
+}
+
+\endinput
diff --git a/macros/generic/misc/underlin.tex b/macros/generic/misc/underlin.tex
new file mode 100644
index 0000000000..eec6aaa129
--- /dev/null
+++ b/macros/generic/misc/underlin.tex
@@ -0,0 +1,18 @@
+% underlin.tex - real multi-word underlining
+% By Stephen Gildea <gildea@x.org> January 1995.
+
+% Usage: \textul{text to underline}
+
+\def\textul#1{\leavevmode\let\textulnext=\textuli\textuli#1 & }
+\def\textuli#1 {\ifx&#1\unskip\let\textulnext=\relax\else
+ \textulword{#1}\textulspace\fi \textulnext}
+\newskip\textulspskip %saved size of a space
+\def\textulword#1{%
+ \setbox0\hbox{#1\space\global\textulspskip=\the\lastskip\unskip}%
+ \dimen0=\dp0\dp0=1.2pt
+ \setbox0\vtop{\box0\hrule}\ifdim\dp0<\dimen0\dp0=\dimen0\fi \box0}
+\def\textulspace{\leaders\hrule height -1.2pt depth 1.6pt
+ \hskip\textulspskip}
+
+% For a much fancier version with many options (e.g., strikeout),
+% see ulem.sty in the CTAN archive.
diff --git a/macros/generic/misc/undertilde.tex b/macros/generic/misc/undertilde.tex
new file mode 100644
index 0000000000..a586f5554b
--- /dev/null
+++ b/macros/generic/misc/undertilde.tex
@@ -0,0 +1,3 @@
+\def\undertilde#1{\mathord{\vtop{\ialign{##\crcr
+ $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern1.5pt\nointerlineskip}
+ $\hfil\tilde{}\hfil$\crcr\noalign{\kern1.5pt}}}}}
diff --git a/macros/generic/misc/verbatim.tex b/macros/generic/misc/verbatim.tex
new file mode 100644
index 0000000000..11d684db6f
--- /dev/null
+++ b/macros/generic/misc/verbatim.tex
@@ -0,0 +1,258 @@
+\catcode `\@ = 11 %%% we use commercial-at as a letter throughout;
+\chardef \l@tter = 11 %%% and introduce synonyms for the \catcodes for
+\chardef \@ther = 12 %%% <letter> and <other>;
+\newcount \c@unt %%% a loop-counter;
+\newcount \ch@rcode %%% this will hold the character-code of the
+ %%% escape character;
+\newif \ifd@bugging %%% set <true> if you want to watch the
+ %%% finite-state automaton at work;
+\newif \ifshewleadingspaces %%% set <true> if you want to see leading spaces
+ %%% shewn as inverted square cup (explicit);
+\newif \ifshewembeddedspaces %%% set <false> if you want to see embedded
+\shewembeddedspacestrue %%% spaces shewn as white space (implicit);
+\ifd@bugging %%% if <debugging>,
+ \let \m@ssage = \message %%% \m@ssage is synonymous with \message
+\else %%% otherwise
+ \def \m@ssage #1{}% %%% it simply throws its parameter away;
+\fi
+%
+\def \verbatim %%% the \verbatim macro takes no parameter
+ {\begingroup %%% and immediately starts a nested group
+ \tracingonline = 0
+ \def \n@sted %%% within which \n@sted is defined
+ {\begingroup %%% to start a further group within which
+ \let \n@sted %%% \n@sted becomes a synonym for \endgroup
+ = \endgroup
+ \@nvironment %%% and the environment is restored to that
+ %%% which obtained two levels of nesting out;
+ \ignorespaces %%% for tidyness, we ignore any <lwsp>
+ }% %%% which follows the escape character;
+ \edef \@nvironment %%% we initialise \@nvironment
+ {\the \font %%% who forgot this ?????
+ \parindent = %%% to prepare to restore \parindent
+ \the \parindent
+ \parskip = %%% and \parskip;
+ \the \parskip
+ \space %%% and ensure that the value to be assigned to
+ }% %%% \parskip is properly terminated;
+ \displayverbatimfont %%% we assume Knuth's font-selectors and
+ %%% select the `typewriter' font;
+ \parskip = 0 pt %%% we then set \parindent and
+ \parindent = 0 pt %%% \parskip to 0 pt;
+ \c@unt = 0 %%% and initialise \count to 0;
+ \loop %%% this loop checks the \catcode of each
+ %%% character code in the range 0 .. 127
+ %%% (or 0 .. 255 for TeX V3) and if it
+ %%% is other than <letter> or <other>, as
+ %%% appropriate, saves the current value in
+ %%% \@nvironment for subsequent restoration
+ %%% within an inner group; it then sets the
+ %%% \catcode to either <letter> or <other>;
+ \ifnum \c@unt < `\A
+ \s@ve \catcode \c@unt = \@ther
+ \else \ifnum \c@unt > `\z
+ \s@ve \catcode \c@unt = \@ther
+ \else \ifnum \c@unt > `\Z
+ \ifnum \c@unt < `\a
+ \s@ve \catcode \c@unt = \@ther
+ \else \s@ve \catcode \c@unt = \l@tter
+ \fi
+ \else \s@ve \catcode \c@unt = \l@tter
+ \fi
+ \fi
+ \fi
+ \advance \c@unt by 1
+ \ifnum \c@unt < 256 % or 128 for the V2 sites ...
+ \repeat
+ \v@rbatim
+ }
+%
+\def \v@rbatim #1% %%%
+ {\if #1 %%%
+ \let \n@xt = \v@rb@tim %%%
+ \else %%%
+ \def \n@xt %%%
+ {\v@rb@tim #1}% %%%
+ \fi %%%
+ \n@xt %%%
+ } %%%
+%
+\def \v@rb@tim #1%
+ {\ch@rcode = `#1 %%%
+ \edef \@nvironment %%% and append code to \@nvironment
+ {\@nvironment %%% to make the escape character active;
+ \catcode \the \ch@rcode
+ = \active
+ \space %%% <space> separates list items in \@nvironment
+ }%
+ \catcode \ch@rcode %%% the escape character is made active;
+ = \active
+ \uccode `\^^M = \ch@rcode %%% and the upper-case code of <return> is made
+ %%% equal to the character-code of the escape
+ %%% character; this is necessary because only
+ %%% <return> can be guaranteed to be active at
+ %%% this point, and we need an active character
+ %%% to form the primary operand of \def;
+ %%% the \@x's below are \expandafter's,
+ %%% and the effect is to upper-case <return>
+ %%% (yielding the escape character), then \def
+ %%% (an active instance of) this character as
+ %%% \n@sted, which has been defined above;
+%
+ \@x \uppercase \@x {\@x \def \r@turn {\n@sted}}%
+%
+ \uccode `\^^M = 0 %%% the upper-case code of <return> is then re-
+ %%% instated (not strictly true; it is set to 0,
+ %%% which is assumed to be its previous value
+ %%% --- could be improved here);
+ \@ctivecr %%% <return> is made active;
+ \@ctivespace %%% and so is <space> (to avoid space-elision);
+ %%% finally, the finite-state automaton which
+ }% %%% processes <space>s is set to <????>;
+ %%% this ends the definition of \verbatim.
+%
+\def \s@ve #1#2=#3% %%% \s@ve minimises the \catcode restoration
+ {\ifnum #1#2 = #3% %%% work of \@nvironment by saving only the
+ %%% \catcode of characters whose \catcode
+ %%% is to be changed; it then changes the
+ %%% \catcode of those characters.
+ \else \edef \@nvironment
+ {\@nvironment #1\the #2=\the #1#2 }%
+ #1#2 = #3%
+ \fi
+ }%
+ %%% the code which follows implements the finite
+ %%% state automaton which determines whether
+ %%% <space>s are ignored, shewn explicitly or
+ %%% implied, and which ensures that blank
+ %%% lines are reproduced correctly.
+%
+\def \v@id {\futurelet \n@xt \v@idifspace}%
+\def \l@ad {\l@adingspace \futurelet \n@xt \l@adifspace}%
+\def \sk@p {\vskip \baselineskip \futurelet \n@xt \l@adifspace}%
+\def \emb@d {\emb@ddedspace}%
+\def \sh@wspace {\char 32\relax}%
+\def \h@despace {\leavevmode \kern \fontdimen 2 \font}%
+\def \l@adingspace {\ifshewleadingspaces \sh@wspace \else \h@despace \fi}%
+\def \emb@ddedspace {\ifshewembeddedspaces \sh@wspace \else \h@despace \fi}%
+\def \v@idifspace {\testn@xt {\afterassignment \v@id}}%
+\def \l@adifspace {\testn@xt {\afterassignment \sk@p}}%
+%
+ %%% \testn@xt provides a common look-ahead for
+ %%% \v@idifspace and \l@adifspace, and also
+\def \testn@xt #1% %%% implements some essential debugging hooks.
+ {\ifx \n@xt \sp@c@
+ \m@ssage {Next character is a space}%
+ \let \n@xt = \relax
+ \else \ifx \n@xt \r@t@rn
+ \m@ssage {Next character is a return}%
+ \def \n@xt {#1\let \n@xt = }%
+ \else \m@ssage {Next character is \meaning \n@xt}%
+ \let \n@xt = \relax
+ \@x \let \sp@ce = \emb@d
+ \fi
+ \fi
+ \n@xt
+ }%
+%
+ %%% We next tamper with the \catcode of <space>
+ %%% and <return>, while defining macros and
+ %%% synonyms which require them to be active;
+ %%% the \catcode is then restored to its default
+ %%% (not necessarily the previous value ---
+ %%% could be improved). \@ctivespace makes
+ %%% <space> active, then defines <space> as
+\catcode `\ = \active% %%% \v@id with a synonym \sp@c@. This code is
+\def\sp@ce{ }% %%% used by the finite-state automaton.
+\def\@ctivespace%
+{\catcode`\ =\active\def {\v@id}\let\sp@c@= }\catcode`\ =10\relax%
+\catcode`\ =10\relax%
+%
+\catcode `\^^M = \active % %%% <return> is made active;
+\def \r@turn {^^M}% %%% \r@turn defined as an active <return>;
+\let \r@t@rn = ^^M% %%% \r@t@rn is made a synonym;
+\def \@ctivecr % %%% and \@ctivecr is defined to
+ {\catcode `\^^M = \active % %%% make <return> active, then
+ \def ^^M% %%% define <return> to manipulate the
+ %%% finite-state automaton and ...
+ {\@x \def \sp@ce {\l@ad}%
+ \@x \let \@x \sp@c@ \@x =\sp@ce %
+%
+ \endgraf % %%% insert a \par primitive (for blank lines).
+%
+ \futurelet \n@xt \l@adifspace %
+ }%
+ \let \r@t@rn = ^^M% %%% \r@t@rn is synonymous with active <return>
+ }%
+\catcode `\^^M = 5 % %%% finally, the \catcode of <return> is
+ %%% restored to its normal value;
+%
+ %%% the \AfterGroup macro is intended for
+ %%% use within a nested normal environment,
+ %%% and causes (a concealed macro defined as)
+ %%% its parameter text to be inserted into
+ %%% TeX's input stream when the nested normal
+ %%% group terminates.
+%
+\def \AfterGroup #1{\global \def \@ftergroup {#1}\aftergroup \@ftergroup}%
+%
+\let \@x = \expandafter %%% \@x is a brief synonym for \expandafter;
+%
+%
+\def \mitabrev %%% and \mitabrev defined as the closure for
+ {\endgroup \endgroup}% %%% \verbatim; any other name could be used,
+ %%% as the code performs no look-ahead for
+ %%% any particular string.
+%
+ %%% Finally we announce to the world that we
+ %%% have been loaded, and gives some clues as
+ %%% to the usage.
+%
+
+\catcode `\Ý = \active
+\catcode `\| = \active
+
+\def Ý{\begingroup
+ \def \s@lidus ##1Ý{\inlineverbatimfont ##1\endgroup}%
+ \p@ssivate \activesp@ces \s@lidus
+ }
+
+\def |{\begingroup
+
+ \def \s@lidus ##1|{\inlineverbatimfont ##1\endgroup}%
+ \p@ssivate \activesp@ces \s@lidus
+ }
+
+\def \p@ssivate
+ {\tracingonline = 0
+ \c@unt = 0
+ \loop
+ \ifnum \catcode \c@unt = 11 {}%
+ \else \ifnum \catcode \c@unt = 12 {}%
+ \else \catcode \c@unt = 12
+ \fi
+ \fi
+ \ifnum
+ \c@unt < 255
+ \advance \c@unt by 1
+ \repeat
+ \catcode `\Ý = \active
+ \catcode `\| = \active
+ }
+
+\begingroup
+\catcode `\ = \active\gdef\activesp@ce{\def {\phantom{\char`\ }}}%
+\endgroup
+
+\def \activesp@ces {\catcode `\ = \active \activesp@ce}
+
+\catcode `\@ = \@ther %%% commercial-at is restored to its normal
+ %%% <other> catcode (not necessarily the
+ %%% previous value --- could be improved);
+
+\message {Verbatim environment loaded;}%
+\message {usage: ``\noexpand \verbatim <char> ... <char> \noexpand \mitabrev''}%
+\message {less functional short forms: \string Ý...\string Ý &
+ \string |...\string |}%
+
+%%% ======================================================================== %%%
diff --git a/macros/generic/misc/weekday.sty b/macros/generic/misc/weekday.sty
new file mode 100644
index 0000000000..cda185ad31
--- /dev/null
+++ b/macros/generic/misc/weekday.sty
@@ -0,0 +1,74 @@
+% Save file as: WEEKDAY.STY Source: FILESERV@SHSU.BITNET
+%% WEEKDAY.STY -- original source: Dimitri Vulis <DLV@CUNYVMS1.BITNET> with
+%% modifications by George D. Greenwade <BED_GDG@SHSU.BITNET>, and gracious
+%% assistance from Bernhard Schroeder <UPK002@DBNRHRZ1.BITNET>, Hunter
+%% Goatley <GOATHUNTER@WKUVX1.BITNET>, and others via INFO-TeX/comp.text.tex.
+%% 21-FEB-1991 17:42:37
+%%
+%% Usage: \weekday{yyyy}{mm}{dd} (where "yyyy" is a year, "mm" is the numeric
+%% equilavent of the month, and "dd" is the specific calendar date
+%% which may be one or two numbers) yields the weekday associated with
+%% the date provided (i.e., Sunday, Monday, ...). May pass \year,
+%% \month, and \day to generate today's weekday.
+%%
+%% -- \weekdaydate{yyyy}{mm}{dd} yields result of \weekday, as well as the
+%% calendar date (i.e., \weekdaydate{1991}{02}{21} yields Thursday,
+%% February 21, 1991). (NOTE: syntax is changed from \weekdaydisplay
+%% to \weekdaydate to make it a little more rememberable)
+%%
+%% May be used as a TeX macro or as a LaTeX style, from what I can tell.
+%% Please report any enhancements or bugs you come across so they can be
+%% posted in FILESERV's STYle archives. George <BED_GDG@SHSU.BITNET>
+%%
+\newcount\wwwy
+\newcount\wwwm
+\newcount\wwwd
+\newcount\wwwc
+\newcount\wwwt
+\newcount\wwws
+
+\def\weekday@{%
+\wwwc=\wwwy
+\divide\wwwc100\relax
+\wwwt=-\wwwc
+\multiply\wwwt100\relax
+\advance\wwwy\wwwt
+\wwws=\wwwy
+\multiply\wwws1461\relax
+\divide\wwws4\relax
+\wwwt=\wwwm
+\multiply\wwwt764\relax
+\divide\wwwt25\relax
+\advance\wwws\wwwt
+\advance\wwws\wwwd
+\ifnum\wwwm>\tw@\advance\wwws\thr@@\else\weekday@@\fi
+\wwwt=-\wwws
+\divide\wwwt7\relax
+\multiply\wwwt7\relax
+\advance\wwws\wwwt
+}
+
+% By the year 2000 we ought to examine \wwwc as well
+
+\def\weekday@@{%
+\wwwt=\wwwy
+\divide\wwwt4\relax
+\multiply\wwwt4\relax
+\advance\wwwt-\wwwy
+\ifnum\wwwt=\z@\advance\wwws4\else\advance\wwws5\fi
+}
+
+\def\weekday#1#2#3{% year, month 1--12, day 1--31
+\wwwy=#1\relax\wwwm=#2\relax\wwwd=#3\relax \weekday@
+\ifcase\wwws Sunday\or
+ Monday\or Tuesday\or Wednesday\or Thursday\or Friday\or Saturday\fi}
+
+\def\weekdaydate#1#2#3{% year, month 1--12, day 1--31
+\wwwy=#1\relax\wwwm=#2\relax\wwwd=#3\relax\weekday@
+\ifcase\wwws Sunday,\or
+Monday,\or Tuesday,\or Wednesday,\or Thursday,\or Friday,\or Saturday,\fi
+\space
+\ifcase #2\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+\space\number#3, \space\number#1} % Here I (Bernhard) inserted \number
diff --git a/macros/generic/misc/wiggly.tex b/macros/generic/misc/wiggly.tex
new file mode 100644
index 0000000000..7f04760f34
--- /dev/null
+++ b/macros/generic/misc/wiggly.tex
@@ -0,0 +1,30 @@
+% A macro \underwiggle for drawing variable length wiggly lines horizontally
+% under its argument in the same way as \underbar.
+% Written by Dr. John S. Garavelli on 4 December 1987 and adapted from a routine
+% by A. G. W. Cameron at Harvard University which appeared in TUGBOAT November
+% 1985, vol. 6, no. 3, p. 155.
+% WARNING: the computations performed by this macro can be very time consuming,
+% so use it sparingly.
+
+\newcount\vone \newcount\vtwo \newcount\vthree \newcount\vfour \newcount\vfive
+\newcount\vsix \newcount\vseven \newcount\veight \newcount\vnine \newcount\vten
+\newbox\wbox \newdimen\wbsize
+\def\underwiggle#1{\ifmmode\setbox\wbox=\hbox{$#1$}
+ \else\setbox\wbox=\hbox{#1}\fi
+\dp\wbox=0pt\wbsize=\wd\wbox\lower2pt\hbox to0pt
+{\hss$\vone=0\vtwo=0\vthree=7000\vfive=\vtwo
+\loop
+\vseven=\vone \divide\vseven by 2
+\vsix=\vfive \divide\vsix by 2 \multiply\vsix by -1
+\veight=16384 \advance\veight by \vsix
+\vnine=16384 \advance\vnine by -\vsix
+\vten=\vseven \advance\vten by 32768
+\hskip\vseven sp
+\vrule height\veight sp width 32768 sp depth\vnine sp
+\hskip-\vten sp
+\ifdim\vseven sp<\wbsize \advance\vone by 20000
+\advance\vtwo by \vthree
+\vfour=-\vtwo \divide\vfour by 10
+\advance\vthree by \vfour
+\advance\vfive by \vtwo
+\repeat$}\box\wbox}
diff --git a/macros/generic/misc/zip.tex b/macros/generic/misc/zip.tex
new file mode 100644
index 0000000000..c1139b3cc4
--- /dev/null
+++ b/macros/generic/misc/zip.tex
@@ -0,0 +1,88 @@
+% zip.tex
+%
+% J. Daniel Smith
+% 24 May 1990
+%
+% Modified from a STY file snarfed from someplace else. But I don't
+% remember where the original code came from... OOPS!!!
+%
+% Make a barcode for a ZIP code!
+%
+% Example usage is below.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`@=11 % letter
+%
+% Dimensions of bars to be used in the barcode
+\newdimen\b@rwidth \newdimen\b@rlong \newdimen\b@rshort \newdimen\b@rsep
+\b@rwidth=0.02true in \b@rlong=0.125true in \b@rshort=0.05true in
+\b@rsep=0.0275true in
+\def\sb@r{\vrule height\b@rshort width\b@rwidth depth0pt \kern\b@rsep}
+\def\lb@r{\vrule height\b@rlong width\b@rwidth depth0pt \kern\b@rsep}
+
+% The barcodes for each digit
+\def\zerob@r{\lb@r\lb@r\sb@r\sb@r\sb@r}
+\def\oneb@r{\sb@r\sb@r\sb@r\lb@r\lb@r}
+\def\twob@r{\sb@r\sb@r\lb@r\sb@r\lb@r}
+\def\threeb@r{\sb@r\sb@r\lb@r\lb@r\sb@r}
+\def\fourb@r{\sb@r\lb@r\sb@r\sb@r\lb@r}
+\def\fiveb@r{\sb@r\lb@r\sb@r\lb@r\sb@r}
+\def\sixb@r{\sb@r\lb@r\lb@r\sb@r\sb@r}
+\def\sevenb@r{\lb@r\sb@r\sb@r\sb@r\lb@r}
+\def\eightb@r{\lb@r\sb@r\sb@r\lb@r\sb@r}
+\def\nineb@r{\lb@r\sb@r\lb@r\sb@r\sb@r}
+
+\newcount\zipb@rm
+\newcount\zipb@rn
+\chardef\ten=10
+
+%Almost like using \ifcase... except `-' is ignored.
+\def\zipb@r@@@#1#2{\expandafter\def\csname zipb@r@@#1\endcsname%
+ {#2\advance\zipb@rn#1\relax}}
+
+\newbox\zipbarcode
+\zipb@r@@@0{\global\setbox\zipbarcode\hbox{\box\zipbarcode\zerob@r}}
+\zipb@r@@@1{\global\setbox\zipbarcode\hbox{\box\zipbarcode\oneb@r}}
+\zipb@r@@@2{\global\setbox\zipbarcode\hbox{\box\zipbarcode\twob@r}}
+\zipb@r@@@3{\global\setbox\zipbarcode\hbox{\box\zipbarcode\threeb@r}}
+\zipb@r@@@4{\global\setbox\zipbarcode\hbox{\box\zipbarcode\fourb@r}}
+\zipb@r@@@5{\global\setbox\zipbarcode\hbox{\box\zipbarcode\fiveb@r}}
+\zipb@r@@@6{\global\setbox\zipbarcode\hbox{\box\zipbarcode\sixb@r}}
+\zipb@r@@@7{\global\setbox\zipbarcode\hbox{\box\zipbarcode\sevenb@r}}
+\zipb@r@@@8{\global\setbox\zipbarcode\hbox{\box\zipbarcode\eightb@r}}
+\zipb@r@@@9{\global\setbox\zipbarcode\hbox{\box\zipbarcode\nineb@r}}
+
+\def\zipb@r@@#1{\csname zipb@r@@#1\endcsname}
+
+\def\zipb@r@#1{\ifx#1\null
+ \let\next\relax
+ \else
+ \zipb@r@@{#1}#1%
+ \let\next\zipb@r@
+ \fi
+ \next}
+
+\def\zipbar#1{\setbox\zipbarcode=\null
+ \hbox{ % put numbers in an \hbox
+ \global\setbox\zipbarcode\hbox{\box\zipbarcode\lb@r} % start with long bar
+ \zipb@rn\z@\zipb@r@#1\null
+ \zipb@rm\zipb@rn \divide\zipb@rm\ten \multiply\zipb@rm\ten
+ \advance\zipb@rm-\zipb@rn
+ \ifnum\zipb@rm<0
+ \advance\zipb@rm\ten
+ \fi
+ \zipb@r@@{\the\zipb@rm} % last digit, so that the sum is divisible by ten
+ \global\setbox\zipbarcode\hbox{\box\zipbarcode\lb@r}% end with a long bar
+ } % end of \hbox
+}
+
+\catcode`@=12 % disable private sequences
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%\zipbar{1234567890}
+%
+%\zipbar{48837}
+%
+%\zipbar{78653--0102}
+%\bye
+\endinput
diff --git a/macros/generic/modulus/CHANGES b/macros/generic/modulus/CHANGES
new file mode 100644
index 0000000000..c89d5a58dc
--- /dev/null
+++ b/macros/generic/modulus/CHANGES
@@ -0,0 +1 @@
+2 May 1202 (2 May 2018): Initial release.
diff --git a/macros/generic/modulus/README b/macros/generic/modulus/README
new file mode 100644
index 0000000000..3e76a5ac15
--- /dev/null
+++ b/macros/generic/modulus/README
@@ -0,0 +1,27 @@
++AMDG
+
+This document is copyright 2018 by Donald P. Goodman, and is
+released publicly under the LaTeX Project Public License. The
+distribution and modification of this work is constrained by the
+conditions of that license. See
+ http://www.latex-project.org/lppl.txt
+for the text of the license. This document is released
+under version 1.3 of that license, and this work may be distributed
+or modified under the terms of that license or, at your option, any
+later version.
+
+This work has the LPPL maintenance status 'maintained'.
+
+The Current Maintainer of this work is Donald P. Goodman
+(dgoodmaniii@gmail.com).
+
+This work consists of the files modulus.ins and
+modulus.dtx, along with derived files modulus.sty and
+modulus.pdf.
+
+The modulus package provides non-destructive, TeX-primitive
+macros for assigning the modulus and quotient of division
+operations to counters.
+
+This package should run properly on any properly running LaTeX
+system.
diff --git a/macros/generic/modulus/lppl.txt b/macros/generic/modulus/lppl.txt
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/generic/modulus/lppl.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/generic/modulus/modulus.dtx b/macros/generic/modulus/modulus.dtx
new file mode 100644
index 0000000000..62d970c231
--- /dev/null
+++ b/macros/generic/modulus/modulus.dtx
@@ -0,0 +1,212 @@
+% \iffalse
+% +AMDG This document was begun on 1 May 1202, the
+% feast of St. Joseph the Worker, and it
+% is humbly dedicated to him and to the Immaculate Heart of
+% Mary for their prayers, and to the Sacred Heart of Jesus
+% for His mercy.
+%
+% This document is copyright 2018 by Donald P. Goodman, and is
+% released publicly under the LaTeX Project Public License. The
+% distribution and modification of this work is constrained by the
+% conditions of that license. See
+% http://www.latex-project.org/lppl.txt
+% for the text of the license. This document is released
+% under version 1.3c of that license, and this work may be distributed
+% or modified under the terms of that license or, at your option, any
+% later version.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Donald P. Goodman
+% (dgoodmaniii@gmail.com).
+%
+% This work consists of modulus.dtx, modulus.ins, and
+% derived files modulus.sty and modulus.pdf.
+% \fi
+
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{modulus}[2018/05/07 v1.0 Modulus/modulo operator in plain TeX]
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{doc}
+\usepackage{modulus}
+\usepackage{booktabs}
+
+\begin{document}
+\DocInput{modulus.dtx}
+\end{document}
+%</driver> \fi
+%
+% \title{The |modulus| Package, v1.0}
+% \author{Donald P.\ Goodman III}
+% \date{\today}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% \TeX\ (traditional \TeX, not even $\epsilon$-\TeX) has the four
+% basic functions with |\advance|, |\multiply|, and
+% |\divide|, though these are all integer operations. This
+% tiny package makes a modulus operator usable with \TeX\
+% (or \LaTeX, and probably most flavors). It also provides a
+% non-destructive way of
+% getting at the integer quotient of two numbers.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{The Operators}
+%
+% One question immediately occurs to me: why bother with
+% such a package, when $\epsilon$-\TeX\ already has
+% |\numexpr|, and there are so many advanced packages
+% providing real math, and even floating-point operations
+% and bignums? The answer is twofold: (1) an interesting
+% project, and (2) \TeX\ is the archival format, as Knuth
+% has always emphasized, and so doing things in ordinary
+% \TeX, where possible, should be preferred, to keep it
+% such.
+%
+% The core of the package is \DescribeMacro{\modulo}|\modulo|:
+%
+% \begin{center}
+% \cmd{\modulo} \marg{dividend} \marg{divisor}
+% \end{center}
+%
+% Running this will assign the remainder of the integer
+% division of \textit{dividend} and \textit{divisor} to the
+% counter \DescribeMacro{\remainder}|\remainder|. The
+% values of \textit{dividend} and \textit{divisor} will not
+% be changed, if they are changeable (e.g., if they are
+% counters).
+%
+% Note that the package works with plain \TeX\ counters,
+% \emph{not} \LaTeX-style counters created and set with
+% |\newcounter{counter}| and friends. If you try to
+% use it with |\thecounter| or |\value{counter}| in the
+% \LaTeX\ style, it will not work. Fortunately, plain-\TeX\
+% counters are perfectly usable within \LaTeX.
+%
+% We can use the macro as such:
+%
+% \begin{quote}
+% |\modulo{\the\dividend}{\the\divisor}\the\remainder|
+% \end{quote}
+%
+% This will execute the macro and print the resulting
+% remainder. We can also use simple number tokens in the
+% same way:
+%
+% \begin{quote}
+% |\modulo{8}{3}\the\remainder|: \modulo{8}{3}\the\remainder
+% \end{quote}
+%
+% In the table above, the divisor is always the
+% value of a counter |\testdivisor|, which is 4; the
+% dividend is the value of a counter |\testdividend|, which
+% is reset as indicated in each line. We then do the
+% modulus operation and print the value of |\remainder| in
+% the ``Modulus'' column. We then reprint the values of
+% |\testdividend| and |\testdivisor|, to show that we have
+% not altered them by taking the remainder.
+%
+% \newcount\testdivisor\testdivisor=4
+% \newcount\testdividend
+%
+% \begin{table}[t]
+% \centering
+% \begin{tabular}{ccccc}
+% \toprule
+% Dividend & Divisor & Modulus & Dividend & Divisor \\
+% \midrule
+% \global\testdividend=1\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=2\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=3\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=4\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=5\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=6\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=7\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=8\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \global\testdividend=9\leavevmode\the\testdividend & \the\testdivisor &
+% \modulo{\the\testdividend}{\the\testdivisor}\the\remainder &
+% \the\testdividend & \the\testdivisor \\
+% \bottomrule
+% \end{tabular}
+% \caption{A few example modulos, dividend and divisor both
+% before and after the operation.}
+% \label{tab:ex}
+% \end{table}
+%
+% Plain \TeX\ can also very simply take the integer quotient
+% of a counter, with the |\divide| operator, like so:
+%
+% \begin{quote}
+% |\divide\thiscounter by4|
+% \end{quote}
+%
+% However, this destroys the original value of
+% |\thiscounter| (or whatever else one is dividing). The
+% |modulus| package therefore also provides another macro,
+% \DescribeMacro{\quotient}|\quotient|, which
+% non-destructively takes the integer quotient of two
+% numbers and stores it in the counter
+% \DescribeMacro{\intquotient}|\intquotient|:
+%
+% \begin{quote}
+% |\quotient{365}{4}\leavevmode\the\intquotient|: \quotient{365}{4}\leavevmode\the\intquotient\\
+% |\modulo{365}{4}\leavevmode\the\remainder|: \modulo{365}{4}\leavevmode\the\remainder
+% \end{quote}
+%
+% Note that if |\the\thecounter| doesn't print as expected,
+% it may be because you're still in vertical mode (the
+% |\the| operator only works in horizontal mode), so try
+% |\leavevmode| before printing the counter.
+%
+% \section{Implementation}
+%
+% Not much to this one. We define our counter to hold the
+% eventual modulus:
+% \begin{macrocode}
+\newcount\remainder%
+% \end{macrocode}
+% Then we define the macro which will assign the modulus to
+% that counter:
+% \begin{macrocode}
+\def\modulo#1#2{%
+ \remainder=#1%
+ \divide\remainder by#2%
+ \multiply\remainder by#2%
+ \multiply\remainder by-1%
+ \advance\remainder by#1\relax%
+}%
+% \end{macrocode}
+% Then, for good measure, we also have a macro which will
+% non-destructively take the integer quotient of a division, and
+% store it in the counter |\intquotient|:
+% \begin{macrocode}
+\newcount\intquotient%
+\def\quotient#1#2{%
+ \intquotient=#1%
+ \divide\intquotient by#2%
+}%
+% \end{macrocode}
+% Happy \TeX{}ing!
diff --git a/macros/generic/modulus/modulus.ins b/macros/generic/modulus/modulus.ins
new file mode 100644
index 0000000000..223fc5e85c
--- /dev/null
+++ b/macros/generic/modulus/modulus.ins
@@ -0,0 +1,65 @@
+% +AMDG
+% This document was begun on 12 Apr 1202, the feast of St.
+% Justin Martyr, and it is humbly dedicated to him and to
+% the Immaculate Heart of Mary, for their prayers, and to
+% the Sacred Heart of Jesus, for His mercy.
+%
+% This document is copyright 2018 by Donald P. Goodman, and is
+% released publicly under the LaTeX Project Public License. The
+% distribution and modification of this work is constrained by the
+% conditions of that license. See
+% http://www.latex-project.org/lppl.txt
+% for the text of the license. This document is released
+% under version 1.3c of that license, and this work may be distributed
+% or modified under the terms of that license or, at your option, any
+% later version.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Donald P. Goodman
+% (dgoodmaniii@gmail.com).
+%
+% This work consists of modulus.dtx, modulus.ins, and
+% derived files modulus.sty and modulus.pdf.
+
+\input docstrip.tex
+
+\preamble
+This is a generated file.
+
+This document is copyright 2018 by Donald P. Goodman, and is
+released publicly under the LaTeX Project Public License. The
+distribution and modification of this work is constrained by the
+conditions of that license. See
+ http://www.latex-project.org/lppl.txt
+for the text of the license. This document is released
+under version 1.3 of that license, and this work may be distributed
+or modified under the terms of that license or, at your option, any
+later version.
+
+This work has the LPPL maintenance status 'maintained'.
+
+The Current Maintainer of this work is Donald P. Goodman
+(dgoodmaniii@gmail.com).
+
+This work consists of modulus.dtx, modulus.ins, and
+derived files modulus.sty and modulus.pdf.
+\endpreamble
+
+\keepsilent
+\generate{\file{modulus.sty}{\from{modulus.dtx}{package}}}
+
+\Msg{******************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space modulus.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file modulus.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{******************************************************}
+
+\endbatchfile
diff --git a/macros/generic/modulus/modulus.pdf b/macros/generic/modulus/modulus.pdf
new file mode 100644
index 0000000000..868bc57836
--- /dev/null
+++ b/macros/generic/modulus/modulus.pdf
Binary files differ
diff --git a/macros/generic/multido/Changes b/macros/generic/multido/Changes
new file mode 100644
index 0000000000..1abe6687f7
--- /dev/null
+++ b/macros/generic/multido/Changes
@@ -0,0 +1,12 @@
+--- multido.tex
+1.42 2010-05-14 - small changes to the code (hv)
+ - LPPL license (hv)
+1.41 2004-05-18 - fix bug when using the fp-package (same macronames)
+ FPadd -> fpAdd; FPsub -> fpSub (RN/hv)
+1.4 Small change to make it compatible with PSTricks v0.93 and later.
+
+
+--- multido-doc.tex
+2010-05-14 - updated (hv)
+2006-01-01 - updated (hv)
+2004-05-18 - small changes to this documentation (RN/HV)
diff --git a/macros/generic/multido/Makefile b/macros/generic/multido/Makefile
new file mode 100644
index 0000000000..285260e7ed
--- /dev/null
+++ b/macros/generic/multido/Makefile
@@ -0,0 +1,71 @@
+
+# `Makefile' for `multido.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = multido
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+ GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+# if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+# if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+# makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+# makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+# $(basename $<).glo
+# bibtex $(basename $<)
+# $(LATEX) $<
+# $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .Roessler .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+ $(RM) data3d.Roessler
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro ~/Links/dvips-local/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/macros/generic/multido/multido-doc.pdf b/macros/generic/multido/multido-doc.pdf
new file mode 100644
index 0000000000..54a947cc8b
--- /dev/null
+++ b/macros/generic/multido/multido-doc.pdf
Binary files differ
diff --git a/macros/generic/multido/multido-doc.tex b/macros/generic/multido/multido-doc.tex
new file mode 100644
index 0000000000..2861100173
--- /dev/null
+++ b/macros/generic/multido/multido-doc.tex
@@ -0,0 +1,274 @@
+%% $Id: multido-doc.tex 317 2010-05-14 21:54:15Z herbert $
+\documentclass[12pt]{article}
+\usepackage{fp,multido}
+\let\MDfv\fileversion
+\usepackage{url}
+
+\makeatletter
+
+%% PAGE PARAMETERS:
+\setlength{\parindent}{0pt} % paragraph indent
+\setlength{\parskip}{4pt plus 1pt minus 1pt}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headheight}{12pt} % height of running head
+\setlength{\headsep}{30pt} % distance between header and text
+\setlength{\textheight}{54pc} % height of text on page
+%%
+%% DATES, VERSIONS AND TITLES:
+%%
+\def\expanddate#1/#2/#3/{\year=#1 \month=#2 \day=#3}
+\begingroup
+ \expandafter\expanddate\filedate/
+ \xdef\thefiledate{\today}
+\endgroup
+\date{Version \fileversion\\ \thefiledate}
+\def\@maketitle{%
+ \begin{center}
+ {\Large\bf \@title \par}
+ \vskip 1.2em {\lineskip .5em
+ \begin{tabular}[t]{c}\@author\end{tabular}\par}
+ \vskip .8em {\@date}%
+ \end{center}
+ \par
+ \vskip .5em}
+%%
+%% PAGE STYLE:
+%%
+\pagestyle{myheadings}
+\markright{Documentation for multido.tex \hfill
+ v.\fileversion\hskip 1em \thefiledate\hfill}%
+%%
+%% VERBATIM:
+%%
+\begingroup
+ \catcode`\{=12 \catcode`\}=12
+ \catcode`\(=1 \catcode`\)=2
+ \catcode`\+=0 \catcode`\\=12
+ +gdef+|(\) % \| = character \
+ +gdef+{({) % \{ = character {
+ +gdef+}(}) % \} = character }
++endgroup
+\def\Backslash{\protect\|}
+%%
+%% Define some functional font commands:
+%%
+\def\MainFont{\tt} % For macro definitions.
+\def\UsageFont{\tt} % For in-line macro names.
+\def\InlineFont{\tt} % For other in-line snipets of code.
+\def\MetaFont{\rm\it} % For meta arguments.
+%%
+%% Short-cuts for font commands:
+%%
+\def\s#1{\string#1}
+\def\t#1{{\InlineFont\string#1}} % For other in-line code.
+\def\m#1{{\MetaFont #1\/}} % For just putting things in italics
+\def\M#1{{\InlineFont\{\m{#1}\}}} % Arg is in italic, enclosed in tt braces.
+\let\N\t % For in-line macro names.
+\catcode`\<=13 \def<#1>{\m{#1}} % <meta>
+%%
+%% This is for listing macro definitions in a quote-like environment.
+%%
+\begingroup
+ \catcode`\[=1 \catcode`\]=2
+ \catcode`\{=13 \catcode`\}=12
+ \gdef\@MD[%
+ \catcode`\{=13 \catcode`\}=12
+ \def{##1}[\{[\MetaFont ##1]\}]]
+\endgroup
+\def\MD{%
+ \quote
+ \begingroup
+ \@MD
+ \def\end{\endgroup\end}%
+ \def\\{\@centercr\s}%
+ \MainFont
+ \s}
+\def\endMD{\endquote}
+%%
+%% END PREAMBLE:
+%%
+\catcode`\"=13
+\def"{\verb"}
+\catcode`\@=12
+\begin{document}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title{Documentation for multido.tex, version \MDfv:\\[2pt]
+ A loop macro for Generic \protect\TeX}
+\author{Timothy Van Zandt%
+ \thanks{Author's address: Department of Economics, Princeton University,
+ Princeton, NJ 08544-1021, USA. Internet: \protect\url{tvz@Princeton.EDU}.
+ This document was edited by Rolf Niepraschk \protect\url{Rolf.Niepraschk@gmx.de} and
+ Herbert Voss \protect\url{hvoss@tug.org} to get it run with LaTeX2e (2006-01-01)}}
+\maketitle
+
+"multido.tex"/"multido.sty" contains the \N\multido\ macro, which is a loop
+facility for Generic TeX. This macro happens to be useful for drawing
+pictures, and was originally developed for the PSTricks
+package,\footnote{PSTricks is an extensive collection of PostScript-based
+macros for Generic TeX. It is available from \url{CTAN://graphics/pstricks/}.}
+but you can use it for other purposes as well.
+
+A special feature is support of fixed-point addition. For example, PSTricks
+uses the \N\multido\ to put numbers on axes, much like in the following
+\LaTeX\ example:
+\begin{verbatim}
+ \setlength{\unitlength}{1cm}
+ \small
+ \begin{picture}(8,1)(0,-.5)
+ \put(0,0){\vector(1,0){8}}
+ \multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+ \end{picture}
+\end{verbatim}
+\begin{center}
+ \setlength{\unitlength}{1cm}
+ \small
+ \begin{picture}(8,1)(0,-.5)
+ \put(0,0){\vector(1,0){8}}
+ \multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+ \end{picture}
+\end{center}
+
+The general syntax for \N\multido\ is:
+\begin{MD}
+ \multido{variables}{repetitions}{stuff}
+\end{MD}
+<stuff> is whatever you want repeated; it can be any balanced \TeX\ input.
+<repetitions> is the number times <stuff> is repeated.
+
+The first argument is the interesting one. <variables> is a comma-separated
+list of variable declarations.\footnote{Don't use commas to mark the decimal
+point within the \protect<variables> argument, as they will be confused for
+delimiters.} Each variable declaration is of the form:
+\begin{center}\tt
+ <variable> = <initial value> + <increment>
+\end{center}
+<variable> is a command sequence that can be used in <stuff>. It is initially
+set to <initial value>, and is then incremented by <increment> with each
+repetition.
+
+The first letter of the variable name determines the variable type. There are
+four variable types:
+\begin{description}
+\item[Dimension (d or D)] The initial value and the increment should be
+dimensions (lengths, in \LaTeX\ parlance). The substitution text is a
+dimension, with "sp" units. E.g., "\dx=4cm+5pt".\footnote{For PSTricks users,
+the unit is optional.}
+
+\item[Number (n or N)] The initial value and increment should be integers or
+numbers with the same number of digits to the right of the decimal. The one
+exception is that it is always OK for the initial value to be an integer.
+There can be at most 8 digits on each side of the decimal. The substitution
+text is a number, with fixed-point addition. E.g., "\n=3+7.05",
+"\Nx=5.30+-1.25".
+
+\item[Integer (i or I)] The initial value and increment should be integers.
+This gives the same result as using a number variable, but it is faster. E.g.,
+"\I=2+-1".
+
+\item[Real (r or R)] The initial value and increment should be integers or
+numbers with at most 4 digits on each side of the decimal. The substitution
+text is a number, but with floating point addition and occasional small
+errors. This gives a less satisfactory result than using a number variable,
+but it is faster. E.g., "\ry=4.2+1.05".
+\end{description}
+
+Here are some examples that illustrate how the substitution text is
+determined:
+\begin{quote}
+ "\multido{}{10}{\TeX\ }"\\[3pt]
+ \hbox to 2em{}\multido{}{10}{\TeX\ }{}\\[8pt]
+ "\multido{\d=2pt+3pt}{5}{\d, }"\\[3pt]
+ \hbox to 2em{}\multido{\d=2pt+3pt}{5}{\d, }{}\\[8pt]
+ "\multido{\n=2+3}{10}{\n, }"\\[3pt]
+ \hbox to 2em{}\multido{\n=2+3}{10}{\n, }{}\\[8pt]
+ "\multido{\i=2+-3}{10}{\i, }"\\[3pt]
+ \hbox to 2em{}\multido{\i=2+-3}{10}{\i, }{}\\[8pt]
+ "\multido{\r=2+3.05}{6}{\r, }"\\[3pt]
+ \hbox to 2em{}\multido{\r=2+3.05}{6}{\r, }{}\\[8pt]
+ "\multido{\n=2.00+-3.05}{8}{\n, }"\\[3pt]
+ \hbox to 2em{}\multido{\n=2.00+-3.05}{8}{\n, }{}
+\end{quote}
+
+Here are some details about the choice of names:
+\begin{itemize}
+\item Your computer won't explode if you use names that conflict with \TeX\
+internal commands, but you might want to check name conflicts if you get
+inexplicable errors. The command \N\MultidoCheckNames\ can be useful in this
+case. It causes \N\multido\ to report an error whenever you use a variable
+name that is already defined. But see the next item.
+\item The whole \N\multido\ loop is grouped. This means, e.g., that although
+"\i" is a Plain \TeX\ command sequence (giving a dotless ``\i''), you can use
+the variable "\i" if you do not use any dotless i's in <stuff> (and if you do
+not use \N\MultidoCheckNames).
+\end{itemize}
+
+Here are a few more details:
+\begin{itemize}
+\item \N\Multido\ commands can be nested.
+\item Spaces after a \N\multido\ command are ignored. This makes \N\multido\
+more hospitable for pictures.
+\item Spaces between the various parts of the <variables> argument are
+ignored.
+\end{itemize}
+
+And finally here a few special features, some of which are of interest mainly
+macro writers and other \TeX nicians:
+\begin{itemize}
+\item The material that is repeated is not grouped, so that you can insert
+your own recursive routines.
+\item There is a variant, "\mmultido", which works just like "\multido" except
+that the variables are all incremented once before starting.
+\item If you use "\Multido" or "\MMultido" instead of "\multido" or
+"\mmultido", resp., then the whole loop is not grouped. This can be useful,
+e.g., for making entries in an alignment environment. However, these cannot be
+nested within any "\multido" macro.
+\item If the number of repetitions is a negative number, the variables are
+incremented backwards.
+\item The count register "\multidocount" keeps track of the number of current
+iteration.
+\item The command "\multidostop" causes the "\multido" loop to quit at the end
+of the current iteration.
+\item Fixed point addition is performed by \N\fpAdd\ and \N\fpSub:
+\begin{MD}
+ \fpAdd{num1}{num2}{command}\\
+ \fpSub{num1}{num2}{command}
+\end{MD}
+<num2> is added to or subtracted from <num1>, and the answers is stored in the
+command sequence given as the third argument. The rules about decimals and so
+on that apply to number variables apply here as well. E.g., after
+\begin{verbatim}
+ \fpSub{1.75}{-0.15}{\answer}
+\end{verbatim}
+\fpSub{1.75}{-0.15}{\answer}
+the definition of "\answer" is \answer.
+\end{itemize}
+
+\subsection*{Changes:}
+
+\begin{description}
+\item[V1.1] Fixed bug in \N\FPadd\ that gave wrong answer for, e.g., $3.4 +
+-0.2.$
+
+\item[V1.2] Made unit optional for dimension variables when using PSTricks.
+
+\item[V1.3] Now 0 repetitions really gets 0 repetitions. "\def\multido@"
+changed to "\long\def\multido@".
+
+% RN modification begin
+%\end{description}
+% RN modification end
+
+\item[V1.4] Small change to make it compatible with PSTricks v0.93 and later.
+
+\item[V1.41] Fix bug when using the fp-package (same macronames) and small
+changes to this documentation (RN/HV)
+\end{description}
+
+\end{document}
+%% END multido-doc
diff --git a/macros/generic/multido/multido.pdf b/macros/generic/multido/multido.pdf
new file mode 100644
index 0000000000..db9793caf5
--- /dev/null
+++ b/macros/generic/multido/multido.pdf
Binary files differ
diff --git a/macros/generic/multido/multido.sty b/macros/generic/multido/multido.sty
new file mode 100644
index 0000000000..c17e7bd999
--- /dev/null
+++ b/macros/generic/multido/multido.sty
@@ -0,0 +1,28 @@
+%%% $Id: multido.sty 317 2010-05-14 21:54:15Z herbert $
+%
+%% This is file `multido.sty'.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% multido.sty Copyright (C) 1997 Timothy Van Zandt
+%% (C) 2004-2010 Herbert Voss <hvoss@tug.org>
+%% Rolf Niepraschk <Rolf.Niepraschk@gmx.de>
+%%
+%% This package may be distributed under the terms of the LaTeX Project
+%% Public License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.0 or, at your option, any later version.
+%%
+
+\ProvidesPackage{multido}
+ [2004/05/17 package wrapper for PSTricks `multido.tex', (HV/RN)]
+
+\@ifundefined{MultidoLoaded}
+{%
+ \input{multido.tex}
+ \ProvidesFile{multido.tex}
+ [\filedate\space v\fileversion\space `multido' (tvz,hv)]
+}{}
+
+\endinput
+%%
+%% End of file `multido.sty'.
diff --git a/macros/generic/multido/multido.tex b/macros/generic/multido/multido.tex
new file mode 100644
index 0000000000..eca6355b4e
--- /dev/null
+++ b/macros/generic/multido/multido.tex
@@ -0,0 +1,288 @@
+%% $Id: multido.tex 317 2010-05-14 21:54:15Z herbert $
+%% BEGIN multido.tex
+%%
+\def\fileversion{1.42}
+\def\filedate{2010/05/14}
+%%
+%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
+%% Version 1.41 (2004) prepared by Rolf Niepraschk <Rolf.Niepraschk@gmx.de>
+%% Herbert Voss <hvoss@tug.org>
+%% COPYRIGHT 2010 by Herbert Voss <hvoss@tug.org>
+%%
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% multido.tex/multido.sty contains a loop macro, \multido, that supports
+%% fixed-point addition and has a nice interface. Among other things, it
+%% is useful for pictures and putting numbers on axes. multido.tex
+%% is compatible with most TeX macro packages, including Plain TeX, LaTeX,
+%% AmSTeX, and Ams-LaTeX.
+%%
+%% CODE:
+% These macros use TeX primitives, plus the Plain TeX commands:
+% \dimen@, \dimen@i, \count@, \newcount, \newtoks, \@ne, \tw@, \@z@.
+%
+% Check if file is loaded, announce file on terminal, and take care of @:
+%
+\message{ v\fileversion, \filedate\space <tvz>}
+\csname MultidoLoaded\endcsname
+\let\MultidoLoaded\endinput
+\edef\TheAtCode{\the\catcode`\@}
+\catcode`\@=11
+
+% These are some useful hacks. "\multido@dimtonum" strips the value of "#1",
+% a dimension register, of the "pt", and assigns the result to "#2",
+% a command sequence.
+
+\def\@empty{}
+\def\@nnil{\@nil}
+\def\multido@dimtonum#1#2{\edef#2{\multido@@dimtonum#1}}
+\def\multido@@dimtonum#1{\expandafter\multido@@@dimtonum\the#1}
+\edef\next{%
+ \noexpand\def\noexpand\multido@@@dimtonum##1\string p\string t{##1}}
+\next
+
+% "\multido@count" stores the number of repetitions. "\multidocount" keeps
+% track of the iteration. These are also used locally as scratch counters
+% by "\FPadd@". "\multido@stuff" is used to store the <stuff> that is
+% to be repeated.
+
+\newcount\multido@count
+\newcount\multidocount
+\newtoks\multido@stuff
+
+\def\multido{\multido@{}{\begingroup}{\endgroup}}
+\def\mmultido{\multido@{\multido@stepvar}{\begingroup}{\endgroup}}
+\def\Multido{\multido@{}{}{}}
+\def\MMultido{\multido@{\multido@stepvar}{}{}}
+
+% "\multido@initvar" processes the variable declarations, initializing
+% the value of the variables and defining "\multido@stepvar" to increment
+% the variables with each repetition. "\multido@count" is set to the number
+% of repetitions.
+
+\long\def\multido@#1#2#3#4#5#6{%
+ #2%
+ \multido@count=#5\relax
+ \ifnum\multido@count=\z@\else\multido@@{#1}{#4}{#6}\fi
+ #3%
+ \ignorespaces}
+\def\multido@@#1#2#3{%
+ \def\multido@stepvar{}%
+ \def\do{\noexpand\do\noexpand}%
+ \multido@initvar#2,\@nil,%
+ \let\do\noexpand
+ \edef\multido@stepvar{\multido@stepvar}%
+ \ifnum\multido@count<\z@\multido@count=-\multido@count\fi
+ \multidocount=1\relax
+ #1%
+ \multido@stuff{#3}%
+ \multido@loop}
+\def\multido@loop{%
+ \the\multido@stuff
+ \ifnum\multidocount<\multido@count
+ \advance\multidocount\@ne
+ \multido@stepvar
+ \expandafter\multido@loop
+ \fi}
+\def\multidostop{\multidocount=\multido@count}
+\def\multido@badvar{%
+ \multido@count=0
+ \errhelp{\multido command will be skipped.}%
+ \errmessage{Bad \string\multido\space variable declaration}}
+\def\multido@initvar#1,{%
+ \def\multido@temp{#1}%
+ \ifx\multido@temp\@nnil\else
+ \ifx\multido@temp\@empty\else
+ \multido@@initvar#1\@nil=+\@nil\relax
+ \fi
+ \expandafter\multido@initvar
+ \fi}
+\def\multido@@initvar#1=#2+#3\@nil#4\relax{%
+ \ifx\@empty#4\@empty
+ \multido@badvar
+ \else
+ \multido@vartype#1\@empty
+ \ifx\multido@temp\relax
+ \multido@badvar
+ \else
+ \multido@temp{#2}{#3}#1%
+ \fi
+ \fi}
+\def\multido@vartype#1{%
+ \ifcat\noexpand\@nil\noexpand#1%
+ \expandafter\multido@@vartype\string#1\@nil
+ \else
+ \let\multido@temp\relax
+ \fi}
+\def\multido@@vartype#1#2#3\@nil{%
+ \expandafter\let\expandafter\multido@temp
+ \csname multido@init@#2\endcsname}
+\def\MultidoCheckNames{%
+ \let\multido@@@vartype\multido@vartype
+ \def\multido@vartype##1{%
+ \ifx\undefined##1%
+ \multido@@@vartype{##1}%
+ \else
+ \errhelp{\multido command will be skipped.}%
+ \errmessage{Multido variable \string##1 already defined}%
+ \let\multido@temp\relax
+ \fi}}
+
+% For each variable type, we must now define \multido@init<vartype>.
+% The syntax of these macros is:
+%
+% \multido@init@<vartype>{initial value}{increment}{variable}
+%
+% and the outcome should be:
+%
+% 1. Set <variable> to the initial value.
+% 2. Invoke \multido@addtostep{step stuff}, where <step stuff> is
+% whatever should be done to increment the variable. <step stuff> is
+% expanded first, with expansion suppressed by "\do".
+
+\def\multido@addtostep#1{\edef\multido@stepvar{\multido@stepvar#1}}
+
+% Variable type for dimensions ("d", "D"):
+
+\def\multido@init@d#1#2#3{%
+ \expandafter\ifx\csname pssetlength\endcsname\relax
+ \dimen@=#1\relax\dimen@i=#2\relax
+ \else
+ \pssetlength\dimen@{#1}\pssetlength\dimen@i{#2}%
+ \fi
+ \edef#3{\number\dimen@ sp}%
+ \ifnum\multido@count<\z@\dimen@i=-\dimen@i\fi
+ \multido@addtostep{\do\multido@step@d{\do#3}{\number\dimen@i sp}}}
+\def\multido@step@d#1#2{%
+ \dimen@=#1\advance\dimen@#2
+ \edef#1{\number\dimen@ sp}}%
+\def\multido@init@D{\multido@init@d}
+
+% Variable type for integers ("i", "I"):
+
+\def\multido@init@i#1#2#3{%
+ \count@=#1\relax
+ \edef#3{\the\count@}%
+ \count@=#2\relax
+ \ifnum\multido@count<\z@\count@=-\count@\fi
+ \multido@addtostep{\do\multido@step@i{\do#3}{\the\count@}}}
+\def\multido@step@i#1#2{%
+ \count@=#1\advance\count@ by #2
+ \edef#1{\the\count@}}
+\def\multido@init@I{\multido@init@i}
+
+% Variable type for reals ("r", "R").
+
+\def\multido@init@r#1#2#3{%
+ \dimen@=#1pt
+ \multido@dimtonum\dimen@#3%
+ \dimen@=#2pt
+ \ifnum\multido@count<\z@\dimen@=-\dimen@\fi
+ \multido@addtostep{\do\multido@step@r{\do#3}{\number\dimen@ sp}}}
+\def\multido@step@r#1#2{%
+ \dimen@=#1pt\advance\dimen@#2
+ \multido@dimtonum\dimen@#1}
+\def\multido@init@R{\multido@init@r}
+
+% Variable type for numbers ("n", "N").
+
+\def\multido@init@n#1#2#3{%
+ \edef#3{#1}%
+ \ifnum\multido@count<\z@\expandafter\fpSub\else\expandafter\fpAdd\fi
+ {0}{#2}\multido@temp
+ \multido@addtostep{\do\fpAdd{\do#3}{\multido@temp}{\do#3}}}
+\def\multido@init@N{\multido@init@n}
+
+% Simple fixed-point addition couldn't be harder.
+% "\dimen@" and "\dimen@i" are used as scratch {\em counters} (to avoid
+% creating a new counter). "\count@", "\multido@count" and "\multidocount"
+% are also used as scratch counters.
+
+% This is probably pretty close to optimal, given the requirements that
+% leading and trailing spaces be OK in the arguments, and that there need
+% not be any numbers to the left of the decimal.
+
+% RN modification begin -- 2004/05/17; Rolf.Niepraschk@ptb.de
+% \def\FPadd#1#2#3{%
+% \edef\multido@temp{#1..\noexpand\@nil#2}%
+% \expandafter\FPadd@\multido@temp..\@nil
+% \let#3\multido@temp}
+% \def\FPsub#1#2{%
+% \edef\multido@temp{\noexpand\FPsub@#2\noexpand\@empty}%
+% \FPadd{#1}{\multido@temp}}
+\def\fpAdd#1#2#3{%
+ \edef\multido@temp{#1..\noexpand\@nil#2}%
+ \expandafter\FPadd@\multido@temp..\@nil
+ \let#3\multido@temp}
+\def\fpSub#1#2{%
+ \edef\multido@temp{\noexpand\FPsub@#2\noexpand\@empty}%
+ \fpAdd{#1}{\multido@temp}}
+\ifx\FPadd\undefined\let\FPadd\fpAdd\let\FPsub\fpSub\fi
+% RN modification end
+\def\FPsub@#1{\ifx-#1\else-#1\fi}
+\def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%
+ \begingroup
+ \def\multido@temp{\let\next\relax}%
+ \let\next\z@
+ \afterassignment\multido@temp\count@=#1\next
+ \dimen@i=0#2sp\relax
+ \let\next\z@
+ \afterassignment\multido@temp\multido@count=#4\next
+ \multidocount=0#5\relax
+ \dimen@=\number\count@ sp
+ \count@=\@ne
+ \FPadd@@@#500000000\@nil
+ \ifnum#11<\z@
+ \count@=-\tw@
+ \dimen@=-\dimen@
+ \fi
+ \ifnum#41<\z@
+ \count@=-\count@
+ \multido@count=-\multido@count
+ \fi
+ \ifnum\count@>\z@
+ \advance\multido@count\dimen@
+ \advance\multidocount\dimen@i
+ \ifnum\multidocount<\multido@temp\relax
+ \advance\multidocount\multido@temp\relax
+ \else
+ \advance\multido@count\@ne
+ \fi
+ \advance\count@-3
+ \else
+ \advance\multido@count-\dimen@
+ \advance\multidocount-\dimen@i
+ \ifnum\multido@count<\z@
+ \multido@count=-\multido@count
+ \multidocount=-\multidocount
+ \advance\count@\@ne
+ \else
+ \ifnum\multido@count=\z@
+ \ifnum\multidocount<\z@
+ \multidocount=-\multidocount
+ \advance\count@\@ne
+ \fi
+ \fi
+ \fi
+ \ifnum\multidocount<\z@
+ \advance\multidocount\multido@temp
+ \advance\multido@count-\@ne
+ \fi
+ \advance\multidocount\multido@temp\relax
+ \fi
+ \expandafter\FPadd@@\the\multidocount\@empty\@nil
+ \endgroup}
+\def\FPadd@@#1#2#3\@nil{\xdef\multido@temp{%
+ \ifnum\count@=-1-\fi
+ \the\multido@count\ifx#2\@empty\else.#2#3\fi}}
+\def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@temp{1#9}}
+
+\catcode`\@=\TheAtCode\relax
+
+\endinput
+%%
+%% END multido.tex
diff --git a/macros/generic/multiexpand/README.md b/macros/generic/multiexpand/README.md
new file mode 100644
index 0000000000..decdfd06ff
--- /dev/null
+++ b/macros/generic/multiexpand/README.md
@@ -0,0 +1,41 @@
+Variations on the `\expandafter` TeX primitive
+==============================================
+* E-mail: blflatex@gmail.com
+* Released under the LaTeX Project Public License v1.3c or later
+ See http://www.latex-project.org/lppl.txt
+
+The package defines `\multiexpand`, `\multiexpandafter`, `\MultiExpand`
+and `\MultiExpandAfter`, replacing large chains of `\expandafter`.
+These four commands take as an argument the number of expansion to be
+done. If eTeX is available, this number is evaluated using `\numexpr`.
+
+Say we want to expand `\C` five times before `\A` and `\B` in `\A\B\C`.
+The traditional approach would be to insert 31 `\expandafter` before
+`\A` and the same number before `\B`. With this package one can use
+any of
+
+ \expandafter\A\expandafter\B\romannumeral\multiexpand{5}\C
+
+ \expandafter\A\romannumeral\multiexpandafter{5}\B\C
+
+ \MultiExpandAfter{2}\A\MultiExpandAfter{5}\B\C
+
+ \MultiExpandAfter{2}\A\MultiExpandAfter{2}\B\MultiExpand{5}\C
+
+In one step of expansion (triggered by the `\expandafter`'s),
+`\romannumeral\multiexpand{5}` expands the following token 5 times,
+whereas `\romannumeral\multiexpandafter{5}` expands the token after
+that 5 times. The macros `\MultiExpandAfter` and `\MultiExpand`
+take two steps of expansion, but do not require `\romannumeral`.
+Another example is that in two steps of expansion,
+
+ \MultiExpandAfter{2}\a\MultiExpandAfter{3}{%
+ \MultiExpandAfter{9}\b\MultiExpandAfter{10}\c\d}
+
+expands `\d` 10 times, then `\c` 7 times (9-2), then `\b` once (3-2).
+
+The package can be built from the file `multiexpand.dtx' by running
+
+ pdflatex multiexpand.dtx
+ pdflatex multiexpand.dtx
+
diff --git a/macros/generic/multiexpand/multiexpand.dtx b/macros/generic/multiexpand/multiexpand.dtx
new file mode 100644
index 0000000000..ad3b304ef0
--- /dev/null
+++ b/macros/generic/multiexpand/multiexpand.dtx
@@ -0,0 +1,491 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+Variations on the `\expandafter` TeX primitive
+==============================================
+* E-mail: blflatex@gmail.com
+* Released under the LaTeX Project Public License v1.3c or later
+ See http://www.latex-project.org/lppl.txt
+
+The package defines `\multiexpand`, `\multiexpandafter`, `\MultiExpand`
+and `\MultiExpandAfter`, replacing large chains of `\expandafter`.
+These four commands take as an argument the number of expansion to be
+done. If eTeX is available, this number is evaluated using `\numexpr`.
+
+Say we want to expand `\C` five times before `\A` and `\B` in `\A\B\C`.
+The traditional approach would be to insert 31 `\expandafter` before
+`\A` and the same number before `\B`. With this package one can use
+any of
+
+ \expandafter\A\expandafter\B\romannumeral\multiexpand{5}\C
+
+ \expandafter\A\romannumeral\multiexpandafter{5}\B\C
+
+ \MultiExpandAfter{2}\A\MultiExpandAfter{5}\B\C
+
+ \MultiExpandAfter{2}\A\MultiExpandAfter{2}\B\MultiExpand{5}\C
+
+In one step of expansion (triggered by the `\expandafter`'s),
+`\romannumeral\multiexpand{5}` expands the following token 5 times,
+whereas `\romannumeral\multiexpandafter{5}` expands the token after
+that 5 times. The macros `\MultiExpandAfter` and `\MultiExpand`
+take two steps of expansion, but do not require `\romannumeral`.
+Another example is that in two steps of expansion,
+
+ \MultiExpandAfter{2}\a\MultiExpandAfter{3}{%
+ \MultiExpandAfter{9}\b\MultiExpandAfter{10}\c\d}
+
+expands `\d` 10 times, then `\c` 7 times (9-2), then `\b` once (3-2).
+
+The package can be built from the file `multiexpand.dtx' by running
+
+ pdflatex multiexpand.dtx
+ pdflatex multiexpand.dtx
+
+%</readme>
+%<*lvt>
+ \input regression-test.tex\relax
+ \START
+ \LONGTYPEOUT{Author: Bruno Le Floch}
+%<lvt002> \let\numexpr\relax
+ \input multiexpand.sty\relax
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Introduce commands that expand to each other, to count how many times
+ % things were expanded.
+ \OMIT
+ \def\i{}
+ \def\v{\i\i\i\i}
+ \def\x{\i\i\i\i\v}
+ \def\l{\i\i\i\i\v\x\x\x\x}
+ \def\c{\i\i\i\i\v\x\x\x\x\l}
+ \def\d{\i\i\i\i\v\x\x\x\x\l\c\c\c\c}
+ \def\m{\i\i\i\i\v\x\x\x\x\l\c\c\c\c\d}
+ \TIMO
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % We test |\MultiExpand|, which needs two expansions. In particular, we see
+ % that the implementation is reasonably quick, and we get the $2345$-th
+ % expansion of |\m\m\m\m|.
+ % 4000-2345 = 1655 = mdclv
+ \TEST{MultiExpand many times (vlcdm)}{%
+ \toks0\expandafter\expandafter\expandafter{\MultiExpand{2345}\m\m\m\m}%
+ \TYPE{\the\toks0.}%
+ }
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Test |\MultiExpandAfter|, two expansions to get the specified expansion.
+ % The results indirectly show that expansions happen in the expected order.
+ % 100 = c
+ % 100-(27-2) = 75 = lxxv
+ % 100-(14-2) = 88 = lxxxviii
+ % 100-38 = 62 = lxii
+ \TEST{MultiExpandAfter chain (c vxxl iiivxxxl iixl)}{%
+ \toks0\expandafter\expandafter\expandafter{%
+ \MultiExpandAfter{27}\c
+ \MultiExpandAfter{14}\c
+ \MultiExpandAfter{38}\c\c}%
+ \TYPE{\the\toks0.}%
+ }
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Test the order of expansion. The example was given in the original
+ % question that led to writing this package. For the record, this
+ % package (at some point) used 32 |\expandafter| to do the expansion
+ % in the right order, which was better than other approaches; however
+ % this counting ignores the large overheads due to other primitives.
+ \OMIT
+ \def\a#1.{#1}
+ \def\b#1:{#1.}
+ \def\c#1,{#1:}
+ \def\d{Hello world!,}
+ \TIMO
+ %
+ \TEST{MultiExpandAfter order}{%
+ \toks0\MultiExpandAfter{3}{%
+ \MultiExpandAfter{3}\a
+ \MultiExpandAfter{3}\b
+ \MultiExpandAfter{1}\c
+ \d}%
+ \TYPE{\the\toks0}%
+ }
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The other example from the same question (expanding seven tokens once
+ % each in the reverse order) takes 74 \expandafter.
+ \OMIT
+ \def\b.{.b} \def\c.{.c} \def\d.{.d}
+ \def\e.{.e} \def\f.{.f} \def\g.{.g}
+ \TIMO
+ %
+ \TEST{MultiExpandAfter order (2)}{%
+ \toks0\MultiExpandAfter{2}{%
+ \MultiExpandAfter3\a \MultiExpandAfter3\b
+ \MultiExpandAfter3\c \MultiExpandAfter3\d
+ \MultiExpandAfter3\e \MultiExpandAfter1\f\g.}%
+ \TYPE{\the\toks0}%
+ }
+
+ \END
+%</lvt>
+%<*tlg>
+This is a generated file for the l3build validation system.
+Don't change this file in any respect.
+Author: Bruno Le Floch
+(multiexpand.sty)
+============================================================
+TEST 1: MultiExpand many times (vlcdm)
+============================================================
+\v \l \c \d \m .
+============================================================
+============================================================
+TEST 2: MultiExpandAfter chain (c vxxl iiivxxxl iixl)
+============================================================
+\c \v \x \x \l \i \i \i \v \x \x \x \l \i \i \x \l .
+============================================================
+============================================================
+TEST 3: MultiExpandAfter order
+============================================================
+Hello world!
+============================================================
+============================================================
+TEST 4: MultiExpandAfter order (2)
+============================================================
+\a .bcdefg
+============================================================
+%</tlg>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+multiexpand --- trigger multiple expansions in one expansion step.
+E-mail: blflatex@gmail.com
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2011-2017 by Bruno Le Floch <blflatex@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Bruno Le Floch.
+
+This work consists of the file multiexpand.dtx
+and the derived files multiexpand.ins,
+ multiexpand.pdf and
+ multiexpand.sty.
+
+\endpostamble
+\usedir{tex/latex/multiexpand}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/multiexpand}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+ \file{\jobname 001.lvt}{\from{\jobname.dtx}{lvt}}
+ \file{\jobname 002.lvt}{\from{\jobname.dtx}{lvt,lvt002}}
+}
+\nopreamble\nopostamble
+\generate{
+ \file{\jobname 001.tlg}{\from{\jobname.dtx}{tlg}}
+ \file{\jobname 002.tlg}{\from{\jobname.dtx}{tlg}}
+}
+\usedir{doc/latex/multiexpand}
+\generate{
+ \file{README.md}{\from{\jobname.dtx}{readme}}
+}
+
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[12pt]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{hologo}
+\usepackage{multiexpand}
+\usepackage[margin=4cm]{geometry}
+\usepackage{hyperref}
+\RecordChanges
+\begin{document}
+ \DocInput{multiexpand.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{126}
+%
+% \def\fileversion{v1.5} \def\filedate{2017/11/29}
+%\title{\texttt{multiexpand}\\
+% Trigger multiple expansions \\ in one expansion step\thanks{This file
+% describes version \fileversion, last revised \filedate.}}
+%\author{Bruno Le Floch\thanks{E-mail: blflatex@gmail.com}
+% \thanks{I have gathered ideas from various posts in the \texttt{\{TeX\}}
+% community at \url{http://tex.stackexchange.com}. Thanks to their authors.}}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+% \tableofcontents
+% \changes{v1.0}{2011/02/15}{First version with documentation}
+% \changes{v1.1}{2013/01/08}{Version submitted to CTAN}
+% \changes{v1.2}{2013/01/09}{Use fewer expandafter for large arguments}
+% \changes{v1.2}{2013/01/09}{Change ME prefix to multiexpand}
+% \changes{v1.4}{2015/09/20}{Clarify that eTeX is not required}
+% \changes{v1.5}{2017/11/29}{Updates due to l3build changes}
+%
+% \section{Two user commands}
+%
+% \begin{itemize}
+% \item For $n>0$, expanding |\MultiExpand{|$n$|}\macro| twice gives
+% the $n$-th expansion of |\macro|.
+% \item For $n>0$, expanding |\MultiExpandAfter{|$n$|}\macroA\macroB|
+% twice expands |\macroB| $n$ times before expanding |\macroA|.
+% \end{itemize}
+% Note that neither functions work for $n = 0$.
+%
+% These can typically be combined as
+% \begin{verbatim}
+% \MultiExpand{7}%
+% \MultiExpandAfter{4}\a\MultiExpandAfter{7}\b%
+% \MultiExpandAfter{3}\c\d
+% \end{verbatim}
+% which would expand |\d| $3$~times, then |\c| $5$~times ($2$~of the $7$~times
+% were used to expand |\MultiExpandAfter{3}|), then |\b| twice ($4-2$), and
+% finally |\a| five times ($7-2$). Note that all this happens in precisely
+% \emph{two} steps of expansion.
+%
+% In some cases, one needs to achieve the same effect in \emph{one} step
+% only. For this, we use the first expansion of |\MultiExpand|, which
+% is |\romannumeral| |\multiexpand|, or of |\MultiExpandAfter|, which is
+% |\romannumeral| |\multiexpandafter|. In detail, expanding |\romannumeral|
+% |\multiexpand{|$n$|}| once expands the following token $n$ times, and
+% similarly for |\romannumeral| |\multiexpandafter{|$n$|}|.
+%
+% These are especially useful when we want to expand several times a
+% very specific token which is buried behind many others. For instance,
+% expanding the following code once
+% \begin{verbatim}
+% \expandafter\macroA\expandafter\macroB
+% \romannumeral\multiexpandafter{4}\macroC\macroD
+% \end{verbatim}
+% will expand |\macroD| $4$ times before the three other macros.
+%
+% Note: as we mentionned, this breaks for $n=0$. But in this case, consider
+% using |\expandafter\empty|, or a variant thereof.
+%
+% \section{Implementation}
+%\StopEventually{\PrintChanges\PrintIndex}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% We work inside a group, to change the catcode of |@|. So we will only
+% do |\gdef|s. Note that this code can be read several times with no
+% issue; no need to bother to check whether it was already read or not.
+% \begin{macrocode}
+\begingroup
+\catcode `\@=11
+% \end{macrocode}
+%
+% \subsection{Common to the \hologo{eTeX} and non-\hologo{eTeX} cases}
+%
+% For the ``lazy'', who do not want to use |\romannumeral|, we provide
+% |\MultiExpand| and |\MultiExpandAfter|, simple shorthands. A drawback
+% is that they require two steps of expansion rather than only one.
+% \begin{macrocode}
+\gdef \MultiExpand {\romannumeral \multiexpand }
+\gdef \MultiExpandAfter {\romannumeral \multiexpandafter }
+% \end{macrocode}
+%
+% \subsection{Without \hologo{eTeX}'s \cs{numexpr}}
+% \changes{v1.3}{2015/03/03}{Support TeX with no numexpr}
+%
+% No need for the usual |\begingroup\expandafter\endgroup| to prevent
+% |\numexpr| from being set to |\relax|, because we are already in a
+% group.
+% \begin{macrocode}
+\expandafter \ifx \csname numexpr\endcsname \relax
+% \end{macrocode}
+%
+% A helper.
+% \begin{macrocode}
+\long \gdef \multiexpand@gobble #1{}
+% \end{macrocode}
+%
+% The user commands |\multiexpand| and |\multiexpandafter|, to be used
+% after |\romannumeral|. They only differ a little bit.
+% \begin{macrocode}
+\gdef \multiexpand {\multiexpand@aux \multiexpand@ }
+\gdef \multiexpandafter {\multiexpand@aux \multiexpand@after }
+% \end{macrocode}
+% The user commands receives a number, and to accept various forms of
+% numbers we hit it with |\number|. If it is non-positive, stop the
+% |\romannumeral| expansion with |0| and a space. Otherwise, reverse
+% the number, to make it easy to subtract~$1$.
+% \begin{macrocode}
+\long \gdef \multiexpand@aux #1#2%
+ {\expandafter \multiexpand@test \number #2;#1}
+\gdef \multiexpand@test #1;#2%
+ {%
+ \ifnum #1>0
+ \multiexpand@reverse #1{?\multiexpand@reverse@end }?;;#2%
+ \fi
+ 0 %
+ }
+% \end{macrocode}
+% The macro |\multiexpand@reverse| puts characters from the number one
+% by one (as~|#1|) after the semicolon, to reverse the number. After
+% the last digit, |#1| is |{?\multiexpand@reverse@end}|. The question
+% mark is removed by |\multiexpand@gobble|, and the |reverse@end|
+% macro cleans up. In particular, one should not forget to close the
+% conditional using~|#5|, which is the trailing~|\fi|. At this stage,
+% |#4| is the function that distinguishes |\multiexpand| from
+% |\multiexpand@after|, and |#3| is the reversed
+% number. \begin{macrocode}
+\gdef \multiexpand@reverse #1#2;%
+ {\multiexpand@gobble #1\multiexpand@reverse #2;#1}
+\gdef \multiexpand@reverse@end #1;?#2#3;#4#50
+ {#5\multiexpand@iterate #41#3;}
+% \end{macrocode}
+% The macro |\multiexpand@iterate| applies a \meta{function} a certain
+% number of times to what follows in the input stream. It expects to
+% receive \meta{function} \meta{nines} |1|\meta{reversed number}|;|.
+% The argument \meta{nines}, made entirely of the digit~|9|, is used to
+% compute carries when subtracting~$1$, and is initally empty. As a
+% concrete example, after |\multiexpand{302}| the successive
+% calls to |\multiexpand@iterate| would go as follows.
+% \begin{verbatim}
+% \multiexpand@iterate \multiexpand@ 1203;
+% \multiexpand@iterate \multiexpand@ 1103;
+% \multiexpand@iterate \multiexpand@ 1003;
+% \multiexpand@iterate \multiexpand@ 9 103;
+% \multiexpand@iterate \multiexpand@ 99 13;
+% \multiexpand@iterate \multiexpand@ 1992;
+% \multiexpand@iterate \multiexpand@ 1892;
+% \multiexpand@iterate \multiexpand@ 1792;
+% \end{verbatim}
+% Note in particular how carries are done in several steps. The details
+% are left as an exercise to the reader. The most common case is when
+% |#2| is empty and |#3| is a non-zero digit. Then |\number| is
+% expanded, triggering |\ifcase| which shifts |#3| by one unit, and |#1|
+% takes care of expanding the tokens are required by |\multiexpand| or
+% |\multiexpandafter|. If |#3| is~$0$, then |\multiexpand@zero| is
+% called, closing the conditional with |#1|, and iterating, this time
+% with a non-empty \meta{nines}, which are the argument |#2| of a new
+% call to |\multiexpand@iterate|. Those \meta{nines} are put back into
+% the number by |\multiexpand@iterate|, unless the next significant
+% digit is also $0$, in which case |\multiexpand@zero| is called again,
+% until finding a non-zero digit; at each step, one more $9$ is added to
+% the \meta{nines}. If all digits are zero, we reach |;| this way, and
+% end, after cleaning up.
+% \begin{macrocode}
+\gdef \multiexpand@iterate #1#21#3%
+ {%
+ \ifx ;#3\multiexpand@end \fi
+ \ifx 0#3\multiexpand@zero \fi
+ \expandafter \multiexpand@iterate
+ \expandafter #1%
+ \number 1#2%
+ \ifcase #3 \or 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\fi
+ #1%
+ }
+\gdef \multiexpand@zero #1#2\number 1#3\ifcase #4\fi #5%
+ {#1\multiexpand@iterate #59#31}
+\gdef \multiexpand@end #1#2\ifcase #3\fi #4{#10 }
+% \end{macrocode}
+% Finally, the two different expansion commands.
+% \begin{macrocode}
+\gdef \multiexpand@ #1;{#1\expandafter ;}
+\gdef \multiexpand@after #1;{#1\expandafter ;\expandafter }
+% \end{macrocode}
+%
+% \subsection{With \hologo{eTeX}}
+%
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% With \hologo{eTeX}, everything is much easier, since the engine knows
+% how to subtract~$1$.
+%
+% The main looping macros expect their arguments as an integer followed
+% by a semicolon. As long as the argument is at least~$2$, decrement
+% it, and expand what follows. Once the argument is~$1$ (or less: the
+% macros are not meant to handle that case), call |\multiexpand@end| to clean up
+% and stop looping.
+% \begin{macrocode}
+\gdef \multiexpand@ #1;%
+ {%
+ \ifnum #1<2 \multiexpand@end \fi
+ \expandafter \multiexpand@
+ \the \numexpr #1-1\expandafter ;%
+ }
+\gdef \multiexpand@after #1;%
+ {%
+ \ifnum #1<2 \multiexpand@end \fi
+ \expandafter \multiexpand@after
+ \the \numexpr #1-1\expandafter ;\expandafter
+ }
+% \end{macrocode}
+% The looping macros are used within an overarching |\romannumeral|
+% expansion, which we end with a |0| and a space, as well as the
+% appropriate |\expandafter|. Here, |#1| is |\fi| which needs to remain
+% to close the conditional, |#2| is |\expandafter|, and there is a
+% trailing |\expandafter| in the case of |\multiexpand@after|.
+% \begin{macrocode}
+\gdef \multiexpand@end #1#2#3;{#10#2 }
+% \end{macrocode}
+% Finally, user commands, used as |\romannumeral| |\multiexpand(after)|.
+% Those evaluate their argument, and pass it to |\multiexpand@(after)|.
+% The argument might contain |\par| tokens (who knows)
+% \begin{macrocode}
+\long \gdef \multiexpand #1%
+ {\expandafter \multiexpand@ \the \numexpr #1;}
+\long \gdef \multiexpandafter #1%
+ {\expandafter \multiexpand@after \the \numexpr #1;}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% Close the group.
+% \begin{macrocode}
+\endgroup
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%\Finale
+\endinput
+
+
+
diff --git a/macros/generic/multiexpand/multiexpand.pdf b/macros/generic/multiexpand/multiexpand.pdf
new file mode 100644
index 0000000000..9e77cc9c4a
--- /dev/null
+++ b/macros/generic/multiexpand/multiexpand.pdf
Binary files differ
diff --git a/macros/generic/navigator/README b/macros/generic/navigator/README
new file mode 100644
index 0000000000..a0a565eff2
--- /dev/null
+++ b/macros/generic/navigator/README
@@ -0,0 +1,27 @@
+This is the README file for the navigator package.
+Author: Paul Isambert.
+E-mail: zappathustra AT free DOT fr
+Comments and suggestions are welcome.
+Date: May 2016.
+Version: 1.1.
+
+Navigator offers access to PDF features such as:
+anchors, outlines (bookmarks), links and actions, embedded files, and raw PDF
+code. It works with all formats (some limitations in ConTeXt), and with
+pdfTeX, LuaTeX and XeTeX (i.e. xdvipdfmx), trying to implement a similar
+behavior between those drivers.
+
+It requires texapi and YaX, both v.1.03.
+
+Relevant information can be found in navigator-doc.pdf.
+
+
+The files in this distribution are:
+
+navigator.tex The bulk of the code.
+navigator.sty A wrapper file for LaTeX.
+t-navigator.tex A wrapper file for ConTeXt.
+navigator-doc.pdf The manual.
+navigator-doc.tex The source of the manual.
+
+Licensing of this package is covered by LPPL.
diff --git a/macros/generic/navigator/navigator-doc.pdf b/macros/generic/navigator/navigator-doc.pdf
new file mode 100644
index 0000000000..07f9a005d8
--- /dev/null
+++ b/macros/generic/navigator/navigator-doc.pdf
Binary files differ
diff --git a/macros/generic/navigator/navigator-doc.tex b/macros/generic/navigator/navigator-doc.tex
new file mode 100644
index 0000000000..b8c09bbbb4
--- /dev/null
+++ b/macros/generic/navigator/navigator-doc.tex
@@ -0,0 +1,914 @@
+\input pitex
+\input navigator
+
+\setparameter page:
+ left = 5cm
+ top = 3cm
+ hsize = 27pc
+ width = "\dimexpr 10cm + 27pc\relax"
+ baselineskip = 14pt
+
+\setparameter navigator:
+ author = "Paul Isambert"
+ title = "Navigator's documentation"
+ mode = bookmarks
+ layout = onecolumn
+ pre = "\longcolor{.8 .2 .2}"
+ post = \endlongcolor
+
+\def\longcolor#1#2\endlongcolor{%
+ \color{#1}{#2}%
+ }
+
+\setparameter font:
+ command = \mainfont
+ type = ttf
+ name = lucidastd
+ roman = ""
+ italic = i
+ bold = b
+ big = 15pt
+
+\setparameter font:
+ command = \codefont
+ type = ttf
+ name = lucon
+ roman = ""
+ features = ""
+
+\setparameter section:
+ font = "\sc\bf"
+ number = none
+ color = \comcolor
+
+\setparameter describebookmark:
+ meta = navigator
+ left = 12em
+
+\def\beforedescribe{%
+ \vskip-\lastskip
+ \vskip\baselineskip
+ \iflines1{}{\clearpage}%
+ \noindent
+ \bgroup\codefont
+ \hfuzz=\maxdimen}
+\def\afterdescribe{\par\egroup\noindent\ignorespaces}
+
+\def\desclap#1{\llap{#1\kern.25em}}
+
+\def\comcolor{.75 0 0}
+\def\attrcolor{.3 .3 .3}
+
+\def\describe#1#2.{%
+ \beforedescribe
+ \outline[meta = describebookmark]{3}[\commandtoname#1]{\noexpand#1}%
+ \desclap{\color{\comcolor}{\string#1}}#2%
+ \ifemptystring{#2}{\egroup\ignorespaces}{\afterdescribe}%
+ }
+
+\def\jumpcom#1{\jumplink{\commandtoname#1}{\com#1}\antigobblespace}
+
+\def\name{\arg{name}\antigobblespace}
+\def\code{\arg{code}\antigobblespace}
+
+\freedef\param#1{{\codefont#1}}
+\freedef\attr#1{{\codefont\color{\attrcolor}{#1}}}
+\freedef\value#1{{\codefont#1}}
+
+\def\describeattr#1#2(#3).{%
+ \beforedescribe
+ \outline[meta = describebookmark, italic]{4}{#1}%
+ \desclap{\attr{#1}}<\valueloop{}{#2 }> (\ifemptystring{#3}{No default}{Default: #3}.)%
+ \afterdescribe
+ }
+
+\newfornoempty\valueloop{1}#2 {%
+ \ifemptystring{#1}
+ {#2\passarguments{x}}
+ {\kern1pt\char"007C\kern1pt#2}%
+ }
+
+\newverbatim\verbatim
+ {\vskip\baselineskip
+ \codefont
+ \hfuzz=\maxdimen
+ \parindent=0pt\relax}
+ {\printverbatim
+ \vskip\baselineskip\removenextindent}
+
+\newblock*\description
+ {\it\rightskip=0pt plus 1fil\relax}{\par}
+
+\newblock*\values
+ {\parindent=0pt
+ \everypar{\getvalue}%
+ \getleftskip
+ }{\par}
+
+\def\getleftskip[#1]{\leftskip=#1\relax}
+\def\getvalue#1 {\llap{\value"#1"\kern.6em}}
+
+
+\gates def {headers}{%
+ \setbox255=\vbox to \dimexpr\outputsize+4\baselineskip{%
+ \box255
+ \vfil
+ \hbox to \hsize{\it\normalsize\hfil \the\pageno \hfil}}%
+ }
+
+
+\urlaction{pdf}{http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf}
+
+\def\tex{\TeX\antigobblespace}
+\def\pdftex{\scap{pdf}\tex}
+\def\luatex{Lua\kern-1pt\tex}
+\def\xetex{Xe\kern-1pt\tex}
+\def\navigator{\emph{Navigator}\antigobblespace}
+\pdfdef\navigator{Navigator}
+
+
+\bgroup
+
+\vbox to 4\baselineskip{%
+ \leftskip=0pt plus 1fil
+ \parfillskip=0pt \parindent=0pt
+ \vfil\obeylines
+ {\big\color{\comcolor}{\navigator}}\hfill Paul Isambert
+ \verb"zappathustra@free.fr"
+ 01/25/2010
+ }
+
+\egroup
+
+
+
+
+
+\section"Introduction"
+
+\navigator offers access to PDF features such as outlines (bookmarks), links,
+actions and embedded files; it differs from other existing packages on two
+main points: first, it doesn't depend on any format and can be used with plain
+\tex, La\tex, ConTeXt (with some limitations, see \jumplink{files}{here} and
+\jumplink{features}{here}), and anywhere else; second, it defines commands
+to create PDF objects, and can be used as a base to produce raw PDF
+code across \pdftex, \luatex and \xetex.
+
+Note that PDF is a description language, and that not all PDF viewers render
+it completely (not even Adobe Acrobat, actually); thus, some of the features
+in \navigator might seem to produce nothing when the file is read with a
+reader which doesn't fully support PDF. Fortunately, the most common and
+useful features, such as links and outlines, are generally supported.
+
+
+
+
+
+
+
+
+\section"Using \navigator"
+
+\navigator is loaded in the usual fashion, depending on the format:
+\verb"\usepackage{navigator}" in La\tex, \verb"\usemodule[navigator]" in
+Con\tex{}t, and \verb"\input navigator" anywhere else.
+
+\describe\finishpdffile.
+Some of \navigator's operations can take place only at the end of the file.
+These include producing the outline's hierarchy, sorting embedded files, and
+writing some information about the document. However, there are exceptions:
+first in La\tex and Con\tex{}t, this is done automatically (and for Con\tex{}t
+anyway file embedding document settings aren't properly supported; you can
+do what \navigator does with the Con\tex{}t core, though); second, even
+if you don't use La\tex or Con\tex t, in \xetex the outline hierarchy is
+built at once, so this command isn't needed unless you embed files or
+want to write some infos to the document's properties. Anyway the command
+can also be systematically issued harmlessly.
+
+
+
+
+
+
+\section"Anchors"[anchors]
+
+\description
+Anchors are positions used as the targets of links for navigation
+within a PDF file (they are called \emph"destinations" in PDF parlance).
+They are to be used in association with the \jumpcom\jumplink command
+or with \jumplink{outlines}{outlines}.
+\description/
+
+\describe\anchor\oarg{options}\name.
+This defines \name as an anchor. In vertical mode, the destination is were the
+command is issued; in horizontal mode, it also depends on the \attr"up" and \attr"left"
+attributes below. In both cases, however, the value of \attr"fit" might make a difference.
+The options that follow are also used in the \jumpcom\outline command
+when it defines an implicit anchor.
+
+\describeattr{up} dimension (\com\baselineskip).
+In horizontal mode, anchors are placed on the baseline; it means they send
+below the intended line (more precisely: with the intended line's baseline
+at the top of the screen). This attribute makes a vertical correction, so
+the intended line is shown.
+
+\describeattr{left} dimension (0pt).
+Similar to \attr"up", but in the horizontal direction (moving leftward).
+
+\describeattr{fit} xyz fit fith fitv fitb fitbh fitbv fitr (xyz).
+All anchors target the page where they appear (fortunately), but when
+jumping to an anchor how the page is displayed depends on this parameter.
+The values have the following effect:
+
+\values[4em]
+xyz
+The page is displayed so that the anchor is positioned at the
+upper-left corner of the window. Also, if \attr"zoom" is specified, it
+is enforced.
+
+fit
+The page is displayed so that it fits entirely in the window.
+
+fith
+Same as \value"fit", but only horizontally.
+
+fitv
+Same as \value"fit", vertically.
+
+fitb
+The page is displayed so that its bounding box fits entirely
+in the window. A page's bounding box is the smallest rectancle enclosing
+its contents (including headers and footers or marginal material, if any).
+
+fitbh
+Same as \value"fith" for the bounding box.
+
+fitbv
+Same as \value"fitv" for the bounding box.
+
+fitr
+Displays the page so that the box where the anchor appears
+fits entirely in the window. This is disabled with \xetex, and subtler
+things might be possible in the future.
+\values/
+
+\describeattr{zoom} number ().
+Sets the viewer's zoom when jumping to a destination. The number provided
+should be 1000 times the intended zoom (like magnification in \tex); hence
+\verb"zoom = 1000" is the normal magnification, i.e. a 100\%~zoom. The use
+of this attribute, as well as any value but \value"xyz" for the previous
+one, might be extremely annoying for the reader, because s/he might need
+to reset his or her zoom after each jump. (Most viewers implement \value"xyz"
+so that it performs its operation as best as possible without zooming; hence,
+unless the reader already uses a powerful zoom, the way the page is displayed
+is predictable.)
+
+\describe\anchorname\name.
+To avoid possible conflicts, \navigator tweaks the names you give it
+for anchors; if you ever need it, this command returns the real PDF
+names of the anchor you call \name.
+
+
+
+
+\section"Outlines (aka bookmarks)"[outlines]
+
+\description
+Don't hold it against me if I use the words \emph"outline" and
+\emph"bookmarks" alternatively. They are the same things, even
+though the command is \com\outline. There is no need for a second
+run to get bookmarks right.
+\description/
+
+\describe\outline\oarg{options}\arg{level}\oarg{name}\arg{title}.
+This creates a bookmark with title \arg{title}. In \luatex, \arg{title}
+is converted to UTF\nobreak-16 (in octal form, so \luatex doesn't
+complain), so you can use any character of Unicode (although the
+font used by your reader is very unlikely to display anything besides
+the basic plane). \xetex seems to spot the right encoding sometimes.
+As for \pdftex, no conversion is performed, so Latin-1 at best may
+succeed (the string is escaped nonetheless for characters with special
+meanings in PDF).
+
+The \arg{level} defines how the bookmark fits in the hierarchy. It
+is a number, and the smaller it is, the higher the bookmark. A bookmark
+is a child to the nearest preceding bookmark with a smaller \arg{level}.
+The following example illustrates that (hopefully):
+
+\verbatim
+\outline{1}{A chapter}
+ \outline{2}{A section}
+ \outline{3}{A subsection}
+ \outline{2}{Another section}
+\verbatim/
+
+Now, there is a difference between \pdftex and \luatex on the one hand
+and \xetex on the other. First, when using \xetex, \arg{level} should be an
+integer; no such restriction applies with the other engines. That means
+that if you suddenly want to insert a bookmark halfway between a chapter
+and a section in the hierarchy, you don't need to renumber everything:
+just assign a decimal number to it, for instance \verb"1.5" in the previous
+example. That is impossible with \xetex (which will ignore the decimal part,
+so it is also harmless). Second, with the latter engine, it is also impossible
+to skip levels, i.e. the following example isn't allowed:
+
+\verbatim
+\outline{1}{A chapter}
+ \outline{3}{A subsection}
+\verbatim/
+
+In that case, \xetex (i.e. \verb"xdvipdfmx") will insert an intermediate
+bookmark, called \verb"<No Title>", in red and italics (so you definitely
+can't miss it). With \pdftex and \luatex, since levels are a continuum,
+skipping a level doesn't make sense and the previous example is perfectly
+legitimate (however, if a section follows the subsection, its bookmark
+will appear at the same level as the subsection's). Finally, with all
+engines, \arg{level} can be zero or negative.
+
+Among the \arg{options}, those pertaining to a bookmark's appearance are:
+
+\describeattr{open} true false (false).
+If set to \verb"true", the bookmark diplays its immediate children.
+(You don't need to type `\verb"open = true"'; as with all other boolean
+attributes, `\verb"open"' suffices.)
+
+\describeattr{bold} true false (false).
+If \verb"true", the bookmark is displayed in a bold font.
+
+\describeattr{italic} true false (false).
+If \verb"true", the bookmark is displayed in an italic font (this is
+not incompatible with the previous attribute).
+
+\describeattr{color} {red green blue} (0 0 0, i.e. black).
+A triplet of numbers between between \verb"0" and \verb"1" setting
+the bookmark's color.
+
+\describeattr{outlinecolor} {red green blue} (0 0 0, i.e. black).
+Alias for \attr"color". (This name should be used when setting
+attributes globally in the \param"navigator" parameter or elsewhere.)
+
+\vskip\baselineskip
+By default, a bookmark creates an anchor, and clicking it jumps to the
+position thus defined. If the optional \arg{name} is present, then you
+can refer to that anchor and reuse it, as if you'd issued the \jumpcom\anchor
+command. Such an anchor, named or not, can take the same options
+as seen above for the \jumpcom\anchor command, for instance:
+
+\verbatim
+\outline[zoom = fith]{1}{A chapter}
+...
+ \outline[left = 2em]{2}[mysection]{A section}
+\verbatim/
+
+Two other options can modify a bookmark's behavior:
+
+\describeattr{anchor} name ().
+As just said, a bookmark creates an anchor. However, this is not true if
+this attribute is set; in this case, when clicked the bookmark sends
+to the anchor called \name, which need not be already defined,
+of course. The attributes pertaining to anchor settings, if any, are
+ignored, as is the optional name in the \com\outline command. In
+other words, the following two bookmarks are equivalent:
+
+\verbatim
+\outline[anchor = mydest, fit = fitv]{1}[aname]{A title}
+\outline[anchor = mydest]{1}{A title}
+\verbatim/
+
+\describeattr{action} name ().
+Like \attr"anchor", except the bookmark executes action \name
+(and doesn't send you anywhere). If both \attr"anchor" and \attr"action"
+are given, the former wins. See the section on \jumplink{actions}{actions}.
+
+\describe\pdfdef<command><parameter text>\string{replacement text\string}.
+Most of the commands used in \tex will yield nothing good in a bookmark's
+title. However, you may want to reuse the same text to set that title and,
+say, a section heading. When redefined with \com\pdfdef, \arg{command} will
+expand to \arg{replacement text}, but only in a bookmark's title. For
+instance, after:
+
+\verbatim
+\pdfdef\TeX{TeX}
+\pdfdef\emph#1{#1}
+\pdfdef\whatever{\noexpand\whatever}
+\verbatim/
+
+\com\TeX will produce ``\verb"TeX"'' in a bookmark, \com\emph will simply
+return its argument, and \com\whatever will represent itself. Note that
+unexpandable commands and \com\protected commands don't require any special
+treatment to represent themselves.
+
+
+
+
+\section"Links"[links]
+
+\description
+Links (and annotations more generally) are clickable zones of a PDF document,
+which trigger actions. \navigator offers a few types of links and actions,
+and also allows you to create your own with raw \jumplink{objects}{PDF objects}.
+The \arg{options} that appear in the commands below are described at
+\jumplink{options}{the end of this section}.
+\description/
+
+\describe\jumplink\oarg{options}\name\arg{text}.
+This prints \arg{text} and defines it as a clickable zone that sends to
+the anchor called \name (defined either with \jumpcom\anchor or \jumpcom\outline,
+although the anchor need not be already defined for the link to work,
+obviously). For instance, clicking \com\anchor or \com\outline in the
+previous parenthesis sends you to the page where those commands are defined.
+
+\describe\urllink\oarg{options}\arg{url}\arg{text}.
+This is the same thing as \com\jumplink,
+except the link sends to an internet resource (any URI works, actually).
+For instance:
+
+\verbatim
+\urllink[border = 1, color = 1 0 0, dash = 3 2]
+ {http://www.tug.org}{Go to TUG!}
+\verbatim/
+
+produces: \doverbatim\ If the \jumplink{uri}{uri} or
+\jumplink{base}{base} attributes in the \param"navigator"
+parameter are set, then \arg{url} can be relative.
+
+\describe\javascriptlink\oarg{options}\arg{JavaScript code}\arg{text}.
+A link which executes some JavaScript code (if the viewer can do that).
+For instance:
+
+\verbatim
+\javascriptlink[highlight = push]
+ {app.alert("Hello!")}{Say hello!}
+\verbatim/
+
+produces: \doverbatim
+
+\describe\actionlink\oarg{options}\name\arg{text}.
+This executes the action called \name. A named action is an action that is
+defined elsewhere in the document (not necessarily before) and given a name to
+refer to it. The \jumplink{actions}{next section} introduces two simple
+commands to create URL and JavaScript actions; however, an action is just a
+PDF object; hence, \name can be any valid PDF object (of the right type,
+obviously), and you can define such objects with the commands introduced in
+\jumplink{objects}{the last section} of this document. \navigator already
+defines four actions, namely: \actionlink{firstpage}{firstpage},
+\actionlink{lastpage}{lastpage}, \actionlink{prevpage}{prevpage} and
+\actionlink{nextpage}{nextpage}. The meaning should be obvious, but if you
+have any doubt, just click!
+
+\describe\rawactionlink\oarg{options}\arg{PDF code}\arg{text}.
+This is the same as \com\actionlink, except the action is defined
+not in an external action but in \arg{PDF code}, which should be
+an action dictionary (without the enclosing \verb"<<" and \verb">>",
+exactly as with \jumpcom\pdfdictobject).
+
+
+\vskip\baselineskip
+\noindent\anchor{options}%
+In the commands above, the \arg{options} are used to set the appearance
+of the links. Here are the ones you can set:
+
+\describeattr{border} number (0).
+The width (in PostScript points) of the border drawn around the link.
+Default \verb"0" means no border. (In \pdftex and \luatex, you can use
+the \com\pdflinkmargin primitive to set the distance between the link's
+border and its content, even if the border isn't drawn -- it makes
+the clickable zone larger.)
+
+\describeattr{color} {red green blue} (0 0 0, i.e. black).
+The color of the link's border, if any.
+
+\describeattr{linkcolor} {red green blue} (0 0 0, i.e. black).
+Alias for \attr"color". (This name should be used when setting
+attributes globally in the \param"navigator" parameter or elsewhere.)
+
+\describeattr{dash} numbers ().
+The dash pattern of the link's border, can you believe it? The
+\arg{numbers} should be \verb"a1 b1 a2 b2..." where \verb"a"'s
+specify visible parts of the border in PostScript points and
+\verb"b"'s specify hidden parts. Then the pattern repeats itself.
+More or less. (Set \attr"dash" to \verb"1"\nobreak\ \verb"0" if you want to
+override a default dash pattern.)
+
+\describeattr{highlight} none invert outline push (invert).
+This defines how the link flashes when clicked: \value"none" does
+nothing, \value"invert" inverts its colors, \value"outline" inverts
+its border's colors if any, and \value"push" gives the amazing illusion
+that the link is pushed below the surface of the page (says the
+author of the \ital{PDF reference}, except s/he didn't mention any
+amazing illusion).
+
+\describeattr{pre} code ().
+\tex code to be appended before \arg{text}.
+
+\describeattr{post} code ().
+\tex code to be appended after \arg{text}. This and \attr"pre"
+allows you to achieve coherent formatting of links. For instance:
+
+\verbatim
+\def\weblink{\urllink[pre = \bgroup\bf, post = \egroup]}
+Go to \weblink{http://www.tug.org}{TUG} and
+upload to \weblink{http://ctan.org}{CTAN}.
+\verbatim/
+
+produces:\doverbatim
+
+\describeattr{raw} {PDF code} ().
+Raw PDF code to be inserted in the link's dictionary.
+
+\describe\annotation\oarg{options}\arg{PDF code}\arg{text}.
+This creates an annotation tied to \arg{text}. \arg{PDF code} goes
+into the annotation's dictionary; note that the annotation thus created
+doesn't even have a \verb"Subtype" entry (a link, as described in this
+section, is one of the many subtypes of annotation). Depending on the
+\arg{options}, the \verb"Border" entry, the \verb"C" entry (for \attr"color")
+and the \verb"H" (for \attr"highlight") might be specified.
+
+\vskip\baselineskip
+\noindent
+There is one more type of action link, \jumpcom\openfilelink; it takes
+the same options as the commands described here, but it is introduced
+in the section on \jumplink{files}{embedded files}, because it is
+related to them.
+
+
+
+
+
+\section"Actions"[actions]
+
+\description
+The commands in this section allow you to create actions and
+refer to it somewhere else in your document. That is a convenient
+approach for actions that are used repeatedly. Note that the PDF
+file itself is also improved, because in it too actions thus defined
+appear only once.
+
+You might think that not much types of actions can be designed:
+only internet addresses and JavaScript. But those are only predefined
+patterns to be used even when one doesn't know anything about PDF.
+Other types of actions require that you write real PDF code, more precisely
+so-called action dictionaries; these are but dictionary objects,
+and \navigator allows you to create them with \jumpcom\pdfdictobject.
+Then the name you give to that object is a valid action name and can
+be used with \jumpcom\actionlink.
+
+In other words, there is no \com\whateveraction command, because
+that's what \jumpcom\pdfdictobject does.
+\description/
+
+\describe\urlaction\name\arg{url}.
+Defines \name as an action which sends to the address \arg{url} on
+the internet. (Actually, any URI can be used, not only URLs.)
+As with \jumpcom\urllink,
+if the \jumplink{uri}{uri} or \jumplink{base}{base} attributes
+in the \param"navigator" parameter are set, then \arg{url} can be relative.
+
+\describe\javascriptaction\name\arg{JavaScript code}.
+Defines \name as an action which executes \arg{JavaScript code}
+(if the viewer can do that).
+
+Thus the following are equivalent to the previous two examples
+with \com\urllink and \com\javascriptlink:
+
+\verbatim
+\urlaction {tug}{http://www.tug.org}
+\actionlink{tug}{Go to TUG!}
+
+\javascriptaction{hello}{app.alert("Hello!")}
+\actionlink{hello}{Say hello!}
+\verbatim/
+
+
+
+
+
+
+\section"Embedded files"[files]
+
+\description
+\navigator provides a simple command to embed files in a PDF document.
+Embedded file can also be opened with an action link, but only if they
+are PDF files. However, no proper support is offered for file embedding
+in Con\tex{}t.
+\description/
+
+\describe\embeddedfile\oarg{description}\arg{object name}\oarg{alternate filename}\arg{file}.
+This embeds \arg{file} in the current document; the name displayed by the viewer
+will be \arg{file} or \arg{alternate filename}, if used (do not forget the
+file's extension in that alternate name). The use of an alternate name
+is useful if \arg{file} contains a path.
+The viewer might also display an
+optional \arg{description}. (The command name \com\embeddedfile, cumbersome
+when compared to the more obvious \com\embedfile, is meant to avoid a possible
+conflict with Heiko Oberdiek's \verb"embedfile".)
+
+The command creates a \jumplink{objects}{PDF object} called \arg{object name}; its
+\verb"Type" is \verb"Filespec", and it points to another object of type
+\verb"EmbeddedFile" (containing the actual file). That object isn't used anywhere
+in \navigator for the moment, but it is available in case you need it, for instance
+when writing raw PDF.
+
+\describe\openfilelink\oarg{options}\arg{file}\oarg{page}\arg{text}.
+This is an action link, so see the description of the \jumplink{options}{\arg{options}}
+above. When clicked, it opens \arg{file} on page \arg{page}
+(first page if \arg{page} is omitted). That file should be embedded elsewhere
+in the document with \jumpcom\embeddedfile, and it should be a PDF file;
+\arg{file} should match the \arg{file} argument in \com\embeddedfile,
+or \arg{alternate filename} if given.
+
+
+
+
+
+
+\section{Settings}[settings]
+
+\description
+Many of the commands introduced in the previous sections can take options.
+If an option is not given, its default value is used instead; you may
+want to set those default values, and to do so you have to change the
+attributes of the \param"navigator" parameter:
+\description/
+
+\verbatim
+\setparameter navigator:
+ <attribute> = <value>
+ <attribute> = <value>
+...
+\par
+\verbatim/
+
+This is the \urllink{http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=yax}{YaX}
+syntax , it is a little bit special, and if you don't want to learn it the
+traditional comma-separated list is also possible:
+
+\verbatim
+\setparameterlist{navigator}
+ {<attribute> = <value>,
+ <attribute> = <value>...}
+\verbatim/
+
+(If a \arg{value} is \verb"true" it can be omitted.)
+Learning YaX might still be a good idea, though, since then you can
+use the \verb"meta" attribute, which wasn't shown when the options for
+the commands above were explained, because it can be used anywhere.
+For instance:
+
+\verbatim
+\setparameterlist{mylink1}
+ {meta = navigator,
+ color = 1 0 0}
+\setparameterlist{mylink2}
+ {meta = navigator,
+ color = 0 1 0}
+...
+\actionlink[meta = mylink1]{...}{...}
+\actionlink[meta = mylink2]{...}{...}
+\verbatim/
+
+There you define two types of links, and you can change their settings
+at once by changing the parameters \param"mylink1" and \param"mylink2"
+instead of the links themselves (which might be numerous). Note how
+\param"mylink1" and \param"mylink2" define \param"navigator" as the
+meta-parameter. That is not necessary, but the action links wouldn't inherit
+your global default settings otherwise (unless the meta-parameter of
+\param"mylink1" and \param"mylink2" itself had \param"navigator" as its
+meta-parameter, or a meta-parameter which... got it?). The \verb"navigator"
+parameter itself can have a meta-attribute too.
+
+\vskip\baselineskip
+\noindent
+At last, here are the attributes that can be set (some make sense in individual
+commands only, and not in the \param"navigator" parameter, but
+you can still set them):
+
+\vskip\baselineskip
+\noindent
+\attr"up", \attr"left", \attr"fit", \attr"zoom":
+see the \jumplink{anchors}{section on anchors} (note that they also
+affect \jumplink{outlines}{outlines} when outlines create implicit anchors).
+
+\vskip\baselineskip
+\noindent
+\attr"outlinecolor", \attr"open", \attr"bold", \attr"italic", \attr"action", \attr"anchor":
+those are options for \jumplink{outlines}{outlines}. (In a given outline, one
+can use the \attr"color" attribute instead of \attr"outlinecolor"; in the \param"navigator"
+parameter, however, one should use only the latter.)
+
+\vskip\baselineskip
+\noindent
+\attr"border", \attr"linkcolor", \attr"highlight", \attr"dash", \attr"raw", \attr"pre", \attr"post":
+those affect \jumplink{links}{action links}. (The remark on \attr"outlinecolor"
+above holds for \attr"linkcolor" here.)
+
+\vskip\baselineskip
+\noindent\anchor{features}%
+And here are attributes that aren't associated with commands, but instead
+specify options and pieces of information for the entire document.
+Note that they do not work in Con\tex{}t, but that can be done easily
+without \navigator.
+
+\describeattr{author} string ().
+The author of the document. This shows up in the document's properties.
+The string is dealt with as described for an \jumpcom\outline's title.
+
+\describeattr{title} string ().
+Same as \attr"author", with the document's title.
+
+\describeattr{keywords} string ().
+Same thing again, with keywords.
+
+\describeattr{subject} string ().
+One more time for the world, this time with the subject addressed by your document.
+
+\describeattr{date} date (current date).
+The creation date; the date should be formatted as explained in the \actionlink{pdf}{\ital"PDF Reference"},
+so have fun. Anyway that is set automatically by \tex (and can't be set with \xetex).
+
+\describeattr{moddate} date (current date).
+Same as \attr"date", for the modification date.
+
+\describeattr{creator} string (TeX).
+The software that produced the document's original format.
+
+\describeattr{producer} string (\pdftex, \luatex or \xetex).
+The software that turned the original document into PDF (cannot be set with \xetex).
+
+\describeattr{rawinfo} {PDF code} ().
+Entries you want to add by yourself to the document's \verb"Info" dictionary.
+
+\describeattr{layout} onepage onecolumn twopage twocolumn twopage* twocolumn* ().
+This sets how the document should be displayed when opened:
+
+\values[6em]
+onepage
+The window displays only one page, with no continuous transition to the next one.
+
+onecolumn
+The window displays only one page, with a continuous transition to the next.
+
+twopage
+The window displays two pages, odd-numbered pages on the right,
+without a continuous transition.
+
+twocolumn
+Same as \value"twopage" with a continuous transition.
+
+twopage*
+Same as \value"twopage" with odd-numbered pages on the left.
+
+twocolumn*
+Same as \value"twopage*" with a continuous transition.
+\values/
+
+\describeattr{mode} outlines bookmarks thumbnails thumbs attachments files oc ().
+This sets what panel the reader should display when the document is
+opened:
+
+\values[6em]
+outlines
+The reader shows the document's outlines.
+
+bookmarks
+Same as \value"outlines".
+
+thumbnails
+Thumbnail images are shown.
+
+thumbs
+Same as \value"thumbnails".
+
+attachments
+Show the attached files.
+
+files
+Same as \value"attachments".
+
+oc
+The Optional Content Group panel is displayed; quite useless
+if you don't have any OCG's (\navigator might offer support one day).
+\values/
+
+\describeattr{uri} address ().
+\anchor[up = 2\baselineskip]{uri}%
+The base address that will be used with relative references.
+See \jumpcom\urllink and \jumpcom\urlaction.
+
+\describeattr{base} address ().
+\anchor[up = 2\baselineskip]{base}%
+Alias for \attr"uri".
+
+\describeattr{openaction} name ().
+The \name of the \jumplink{actions}{action} to be performed
+when the document is opened.
+
+\describeattr{rawcatalog} {PDF code} ().
+Raw PDF code to be added to the document's catalog.
+
+
+
+
+
+
+
+
+\section"PDF objects"[objects]
+
+\description
+Here are commands that let you create and use PDF objects (and which
+\navigator actually uses internally). Of course they are useless unless
+you know how PDF works (if you do, then you might note that what I call
+here \emph"objects" actually are \emph"indirect objects").
+
+Named actions used with \jumpcom\actionlink being objects, they
+behave as any other object with the commands below; for one thing, they
+respond positively to \jumpcom\ifpdfobject, and you can't create an object
+with the same name.
+\description/
+
+\describe\pdfobject\name\code.
+Creates a raw PDF object with name \name. There shouldn't already exist an
+object with the same name (unless it is just reserved).
+
+\describe\pdfdictobject\name\code.
+Same as \com\pdfobject, except a dictionary object is created. This
+command is totally equivalent to the previous one with \code enclosed between
+\verb"<<" and \verb">>". With this you can write custom named actions,
+i.e. \name can be used with \jumpcom\actionlink.
+
+\describe\pdfstreamobject\oarg{raw code}\name\arg{stream}.
+Creates a PDF stream object, with optional \arg{raw code} added to the
+dictionary.
+
+\describe\pdffileobject\oarg{raw code}\name\arg{file}.
+Same as \com\pdfstreamobject, except the stream is the contents of
+\arg{file}.
+
+\describe\pdfreserveobject\name.
+Reserves an object with name \name. That is totally useless (but harmless too)
+with \xetex. In \pdftex and \luatex, it is needed to refer to an object that
+isn't created yet.
+
+\describe\pdfensureobject\name.
+If \name isn't an object (reserved or created), this command reserves it.
+Otherwise it does nothing.
+
+\describe\pdfobjectnumber\name.
+Returns the number of object \name (which must be reserved at least). In \xetex,
+it actually returns nothing, because you can't use object numbers there,
+but fortunately in \pdftex and \luatex it isn't very useful either; the next
+command is much more interesting. (If \name doesn't exist, this command returns
+\verb"0"; an object can't have number \verb"0" in PDF, but that makes more
+sense than returning an error message, which would never make it to the terminal
+and spoil the PDF file instead.)
+
+\describe\pdfrefobject\name.
+Makes an indirect reference to object \name. For instance:
+
+\verbatim
+\urlaction{tug}{http://www.tug.org}
+\verbatim/
+
+and then somewhere while writing PDF code:
+
+\verbatim
+/A \pdfrefobject{myobj}
+\verbatim/
+
+(As with \com\pdfobjectnumber, if \name doesn't exist, i.e. it hasn't been
+reserved or created, this command returns \verb"0 0 R", an impossible object
+that is better than an error message. With \xetex, though, the reference is
+made anyway.)
+
+\describe\pdfobjectstatus\name.
+Returns \verb"0" if \name isn't an object, \verb"1" if it is a reserved object and
+\verb"2" if the object has been created.
+
+\describe\ifpdfobject\name\arg{true}\arg{false}.
+Executes \arg{true} if \name is an object (reserved or created) and \arg{false}
+otherwise.
+
+\describe\pdfstring\arg{string}.
+This transforms \arg{string} into a valid PDF string: in \xetex this
+actually does nothing, whereas in \pdftex the string is escaped, and
+in \luatex it is converted to UTF-16 in octal form. Note that this operation
+is already performed in a bookmark's title, in the description of an
+embedded file, in \jumpcom\javascriptaction and in various attributes
+of the \param"navigator" parameter,
+so you shouldn't use it there; it might be otherwise useful when writing raw PDF code.
+
+
+\vskip0pt plus 1filll
+
+\bgroup
+\leftskip=0pt plus 1fill
+\it\obeylines
+Typeset with LuaTeX v.0.66
+in Lucida and Lucida Console
+(Charles Bigelow and Kris Holmes)
+\egroup
+
+
+\finishpdffile
+\bye
diff --git a/macros/generic/navigator/navigator.sty b/macros/generic/navigator/navigator.sty
new file mode 100644
index 0000000000..3045208d8a
--- /dev/null
+++ b/macros/generic/navigator/navigator.sty
@@ -0,0 +1,15 @@
+% This is navigator.sty, a style file to load
+% the Navigator package in LaTeX. Useful information
+% can be found in navigator-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: May 2016.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{navigator}[2016/22/05 v.1.1 PDF links, outlines, etc.]
+\chardef\formatnumber=4
+\input navigator.tex
+\AtEndDocument{\finishpdffile}
+\endinput
diff --git a/macros/generic/navigator/navigator.tex b/macros/generic/navigator/navigator.tex
new file mode 100644
index 0000000000..67064606e9
--- /dev/null
+++ b/macros/generic/navigator/navigator.tex
@@ -0,0 +1,776 @@
+% This is the Navigator package.
+% Relevant information can be found in navigator-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: January 2011.
+
+\ifdefined\NavigatorHasAlreadyBeenLoadedMyDear
+ \expandafter\endinput
+\fi
+\let\NavigatorHasAlreadyBeenLoadedMyDear\relax
+
+\input yax
+\ifdim\yaxversion pt<1.03pt
+ \senderror{Navigator}{YaX should be at least version 1.03. I quit}%
+ \expandafter\endinput
+\fi
+
+\ifnum\texenginenumber>1
+ \lettocs\ifpdforluatex{iftrue}
+\else
+ \letcstocs{ifpdforluatex}{iffalse}
+\fi
+\newsyntax#1:#2;{nav@}
+\setcatcodes{_@=11}
+\def\nav@error#1{\senderror{Navigator}{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%% Strings %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifcase\texenginenumber
+\or
+% XeTeX: we do nothing. Under some circumstances,
+% xdvipdfmx writes a good UTF-16 string.
+\let\pdfstring\unbrace
+
+\or
+% PDFTeX: we escape the string.
+\let\pdfstring\pdfescapestring
+
+\or
+% LuaTeX: the string is converted from UTF-8 to
+% UTF-16, and expressed in octal form (otherwise LuaTeX
+% would complain about non-UTF-8 characters). Hexadecimal
+% strings may be better, but \pdfoutline encloses the title
+% between braces, whereas hexadecimal strings should be
+% enclosed between "<" and ">".
+%
+% The UTF-16 conversion covers the entire Unicode range,
+% because one has the right to use Linear-B or musical notations
+% in a bookmark, but the viewer is very unlikely to display
+% anything beside the basic plane (unless one can change
+% the UI's font).
+
+% One could use a catcode table for this, but I don't think
+% it's worth it.
+{\catcode`\_=0
+\catcode`\\=12
+_gdef_navbackslash{\}}
+
+\bgroup
+\catcode`\%=12
+\directlua{
+local function to8 (...)
+ local arg, str = {...}, ""
+ for _, num in ipairs(arg) do
+ str = str .. string.format("\noexpand\\navbackslash%.3o", num)
+ end
+ return str
+end
+function toutf16(str)
+ local result = ""
+ for c in string.utfvalues(str) do
+ if c < 0x10000 then
+ result = result .. to8(c / 256, c % 256)
+ else
+ c = c - 0x10000
+ local a, b = c / 1024 + 0xD800, c % 1024 + 0xDC00
+ result = result .. to8(a / 256, a % 256, b / 256, b % 256)
+ end
+ end
+ tex.print([[\noexpand\navbackslash376\noexpand\navbackslash377]] .. result)
+end
+}
+\egroup
+
+\long\def\pdfstring#1{%
+ \directlua{toutf16("\luaescapestring{#1}")}%
+ }
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% Object creation %%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pdfobjectstatus#1{%
+ \ifcs{nav@pdfobject:#1}
+ {\ifcs{nav@pdfobject_used:#1}{2}{1}}
+ {0}%
+ }
+
+\def\ifpdfobject#1{%
+ \ifcs{nav@pdfobject:#1}%
+ }
+
+\def\pdfobject#1#2{%
+ \nav@pdfobject{}{}[]{#1}{#2}%
+ }
+
+\def\pdfdictobject#1#2{%
+ \nav@pdfobject{}{}[]{#1}{<< #2 >>}%
+ }
+
+\def\pdfstreamobject{%
+ \ifnext[
+ {\nav@pdfobject{stream}{}}
+ {\nav@pdfobject{stream}{}[]}%
+ }
+
+\def\pdffileobject{%
+ \ifnext[
+ {\nav@pdfobject{stream}{file}}
+ {\nav@pdfobject{stream}{file}[]}%
+ }
+
+\ifpdforluatex
+
+\def\nav@pdfobject#1#2[#3]#4#5{%
+ \ifnum\pdfobjectstatus{#4}=2
+ \nav@error{There already exists an object named `#4'}%
+ \else
+ \immediate\pdfobj
+ \ifnum\pdfobjectstatus{#4}=1 useobjnum \pdfobjectnumber{#4}\fi
+ #1 % "stream" or nothing.
+ \reverse\iffemptystring{#3}{attr {#3} }% "attr {...}" or nothing.
+ #2 % "file" or nothing.
+ {#5}% Contents.
+ \ifnum\pdfobjectstatus{#2}=0
+ \xdefcs{nav@pdfobject:#4}{\the\pdflastobj}%
+ \fi
+ \global\letcs{nav@pdfobject_used:#4}\relax
+ \fi
+ }
+
+\def\pdfreserveobject#1{%
+ \ifcase\pdfobjectstatus{#1}
+ \pdfobj reserveobjnum
+ \xdefcs{nav@pdfobject:#1}{\the\pdflastobj}%
+ \or
+ \nav@error{Object `#1' is already reserved}%
+ \or
+ \nav@error{Object `#1' is already in use}%
+ \fi
+ }
+
+% An error message here wouldn't reach the terminal
+% but would spoil the PDF file instead; therefore
+% I prefer to return an unexisting (and impossible)
+% object with number 0.
+
+\def\pdfobjectnumber#1{%
+ \ifcs{nav@pdfobject:#1}
+ {\usecs{nav@pdfobject:#1}}
+ {0}%
+ }
+
+\def\pdfrefobject#1{%
+ \ifcs{nav@pdfobject:#1}
+ {\usecs{nav@pdfobject:#1} 0 R}
+ {0 0 R}%
+ }
+
+\else
+
+\def\nav@pdfobject#1#2[#3]#4#5{%
+ \ifnum\pdfobjectstatus{#4}=2
+ \nav@error{There already exists an object named `#4'}%
+ \else
+ \special{pdf:
+ \ifemptystring{#1}
+ % No matter whether the object has been reserved,
+ % it doesn't mean anything with xdvipdfmx.
+ {obj \pdfrefobject{#4} #5}
+ {\ifemptystring{#2}{stream}{fstream}
+ \pdfrefobject{#4} (#5)
+ \reverse\iffemptystring{#3}{<< #3 >>}}}%
+ % Useless. But so the same behavior can be expected
+ % no matter the driver.
+ \global\defcs{nav@pdfobject:#4}{@nav_#4}%
+ \global\letcs{nav@pdfobject_used:#4}\relax
+ \fi
+ }
+
+\def\pdfreserveobject#1{%
+ \ifcase\pdfobjectstatus{#1}
+ % We do absolutely nothing except register the object
+ % as ``reserved''.
+ \xdefcs{nav@pdfobject:#1}{@nav_#1}%
+ \or
+ % Stupid, but then the same behavior can be expected
+ % across engines.
+ \nav@error{Object `#1' is already reserved}%
+ \or
+ \nav@error{Object `#1' is already in use}%
+ \fi
+ }
+
+% We can't do anything meaningful here, so we do nothing.
+\def\pdfobjectnumber#1{}
+
+% With XeTeX, referencing of unreserved
+% object is allowed, because reserving objects is
+% dummy behavior anyway. Thus, rather than returning
+% an unexisting 0 object, at least there exists the
+% possibility that the object will be created later,
+% even if it hasn't been reserved yet.
+\def\pdfrefobject#1{@nav_#1}
+
+\fi
+
+\def\pdfensureobject#1{%
+ \ifpdfobject{#1}{}{\pdfreserveobject{#1}}%
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%% Anchors %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% REMARK
+%
+% Here and elsewhere, \usevalueor (or similar) is used (with a default
+% value as the or-part), because the user might do something like:
+%
+% \setparameter param:
+% up = 12pt
+%
+% \anchor[meta = param]{foo}
+%
+% Then there is no value for the "left" attribute, since "param"
+% doesn't have "navigator" (which holds the user's default values)
+% as a meta-parameter.
+% If no meta is detected, "navigator" is assigned to meta.
+
+\def\nav@prepare_options#1#2{%
+ \setparameterlist{nav@temp}[#1]{#2}%
+ \nav@ifattribute nav@temp:meta;
+ {}{\nav@setattribute nav@temp:meta; = navigator }%
+ }
+
+\def\anchor{%
+ \ifnext[
+ {\nav@anchor}
+ {\nav@anchor[]}%
+ }
+
+\def\nav@anchor[#1]#2{%
+ \ifcs{nav@pdfanchor:#2}
+ {\nav@error{Anchor `#2' already exists}}
+ {\global\letcs{nav@pdfanchor:#2}\relax
+ \nav@prepare_options{\gobbleone}{#1}%
+ \nav@anchor_position{#2}%
+ \deleteparameter nav@temp:}%
+ }
+
+\def\nav@anchor_position#1{%
+ \ifvmode
+ \nav@passvalueand{\nav@anchor_pass{nav@pdfanchor:#1}}nav@temp:fit;{{\nav@usevalue nav@temp:zoom;}}
+ {\nav@anchor_pass{nav@pdfanchor:#1}{xyz}{}}%
+ \else
+ \vbox to 0pt{\vss
+ \vbox to \nav@usevalueor nav@temp:up;{\baselineskip}{%
+ \hbox to 0pt{%
+ \kern-\nav@usevalueor nav@temp:left;{0pt}%
+ \nav@passvalueand{\nav@anchor_pass{nav@pdfanchor:#1}}nav@temp:fit;{{\nav@usevalue nav@temp:zoom;}}
+ {\nav@anchor_pass{nav@pdfanchor:#1}{xyz}{}}\hss}\vss}}%
+ \fi
+ }
+
+\def\nav@anchor_pass#1#2#3{%
+ \lowercase{\nav@anchor_create{#2}}{#1}{#3}%
+ }
+
+\ifpdforluatex
+
+\def\nav@anchor_xyz #1{xyz zoom 0#1}
+\def\nav@anchor_fit #1{fit}
+\def\nav@anchor_fith #1{fith}
+\def\nav@anchor_fitv #1{fitv}
+\def\nav@anchor_fitb #1{fitb}
+\def\nav@anchor_fitbh #1{fitbh}
+\def\nav@anchor_fitbv #1{fitbv}
+\def\nav@anchor_fitr #1{fitr}
+
+\def\nav@anchor_create#1#2#3{%
+ \pdfdest name {#2} \ifcs{nav@anchor_#1}{\usecs{nav@anchor_#1}{#3}}{xyz}%
+ }
+
+\else
+
+% FitR is quite unusable with xdvipdfm.
+{\setcatcodes{pt=12}\gdef\noPT#1pt{#1}}
+\def\nav@anchor_xyz #1{XYZ @xpos @ypos \expandafter\noPT\the\dimexpr0#1pt/1000\relax}
+\def\nav@anchor_fit #1{Fit}
+\def\nav@anchor_fith #1{FitH @ypos}
+\def\nav@anchor_fitv #1{FitV @xpos}
+\def\nav@anchor_fitb #1{FitB}
+\def\nav@anchor_fitbh #1{FitBH @ypos}
+\def\nav@anchor_fitbv #1{FitBV @xpos}
+
+\def\nav@anchor_create#1#2#3{%
+ \special{pdf: dest (#2)
+ [ @thispage /\ifcs{nav@anchor_#1}{\usecs{nav@anchor_#1}{#3}}{XYZ} ]
+ }%
+ }
+
+\fi
+
+\def\anchorname#1{%
+ nav@pdfanchor:#1%
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%% Outlines %%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\nav@pdfdef_list{}
+\def\pdfdef#1{%
+ \global\addright\nav@pdfdef_list{#1}%
+ \gdefcs{nav@pdfdef:\commandtoname#1}%
+ }
+
+\newfor\nav@pdfdef_loop#1{%
+ \lettocs#1{nav@pdfdef:\commandtoname#1}%
+ }
+
+\def\outline{%
+ \ifnext[
+ {\nav@outline}
+ {\nav@outline[]}%
+ }
+
+\def\nav@outline[#1]#2{%
+ \ifnext[
+ {\nav@outline_do{#1}{#2}}
+ {\nav@outline_do{#1}{#2}[]}%
+ }
+
+\newcount\nav@outline_count
+\ifpdforluatex
+
+\def\nav@outline_do#1#2[#3]#4{%
+ \global\advance\nav@outline_count 1
+ \gdefcs{nav@outline_\the\nav@outline_count:specs}{#1,}%
+ \gdefcs{nav@outline_\the\nav@outline_count:level}{#2}%
+ \gdefcs{nav@outline_\the\nav@outline_count:title}{#4}%
+ \nav@prepare_options{\gobbleone}{#1}%
+ \nav@outline_getaction{#1}{#3}%
+ % It'd be simpler to create one action object anyway and let \nav@outline_n:action
+ % refer to it; but then I'd have to use the /NoAction trick (in \nav@outline_getaction), which not all
+ % viewers understand; at least here outlines with destinations work.
+ \global\xdefcs{nav@outline_\the\nav@outline_count:action}{<< \nav@temp >>}%
+ \deleteparameter nav@temp:%
+ }
+
+\def\nav@processoutlines{%
+ \bgroup
+ \passexpanded\nav@pdfdef_loop\nav@pdfdef_list
+ \nav@processoutlines_loop{1}%
+ \egroup
+ }
+
+\newwhile\nav@processoutlines_loop1{#1+1}
+ {\straightenif{ifnum}{\numexpr#1>\nav@outline_count}
+ {\breakwhile{}}
+ {\nav@processoutlines_subloop{#1+1}{#1}{}{0}}%
+ }
+
+\newwhile\nav@processoutlines_subloop4{#1+1}{#2}{#3}{#4}
+ {\straightenif{ifnum}{\numexpr#1>\nav@outline_count}
+ {\breakwhile{\nav@processoutlines_create{#2}{#4}}}
+ {\straightenif{ifdim}{\usecs{nav@outline_\the\numexpr#2:level}pt<\usecs{nav@outline_\the\numexpr#1:level}pt\relax}
+ {\ifemptystring{#3}
+ {\changewhile{#1+1}{#2}{#1}{#4+1}}
+ {\reverse\straighteniff{ifdim}{\usecs{nav@outline_\the\numexpr#3:level}pt<\usecs{nav@outline_\the\numexpr#1:level}pt\relax}
+ {\changewhile{#1+1}{#2}{#1}{#4+1}}}}
+ {\breakwhile{\nav@processoutlines_create{#2}{#4}}}}%
+ }
+
+\def\nav@processoutlines_create#1#2{%
+ \passexpandedcs{\nav@prepare_options{}}{nav@outline_\the\numexpr#1:specs}%
+ \pdfoutline
+ attr {\nav@outline_attributes}
+ user {\usecs{nav@outline_\the\numexpr#1:action}}
+ count \nav@ifvalue nav@temp:open; = true {}{-}\numexpr#2\relax {\pdfstring{\usecs{nav@outline_\the\numexpr#1:title}}}%
+ \deleteparameter nav@temp:%
+ }
+
+\else
+%
+% So much simpler because xdvipdfmx deals with children
+% automatically; thus \nav@processoutlines is unnecessary.
+%
+
+\let\nav@processoutlines\relax
+
+\def\nav@outline_do#1#2[#3]#4{%
+ \global\advance\nav@outline_count 1
+ \nav@prepare_options{\gobbleone}{#1}%
+ \nav@outline_getaction{#1}{#3}%
+ \bgroup
+ \passexpanded\nav@pdfdef_loop\nav@pdfdef_list
+%
+ \special{pdf: out
+ [\nav@ifvalue nav@temp:open;=true {}{-}] #2
+ << /Title (#4)
+ /A << \nav@temp >>
+ \nav@outline_attributes >>}%
+%
+ \egroup
+ \deleteparameter nav@temp:%
+ }
+
+\fi
+
+\def\nav@outline_getaction#1#2{%
+ \nav@storevalueand\nav@temp nav@temp:anchor;
+ {\edef\nav@temp{/S/GoTo /D (\anchorname{\nav@temp})}}
+ {\nav@storevalueand\nav@temp nav@temp:action;
+ {\pdfensureobject{\nav@temp}%
+ \edef\nav@temp{/S/Named /N/NoAction /Next \pdfrefobject{\nav@temp}}}
+ {\nav@anchor[#1]{\ifemptystring{#2}{outline_\the\nav@outline_count}{#2}}%
+ \edef\nav@temp{/S/GoTo /D (\anchorname{\ifemptystring{#2}{outline_\the\nav@outline_count}{#2})}}}}%
+ }
+
+
+\def\nav@outline_attributes{%
+ % See REMARK above for default values.
+ /C [\nav@usevalueor nav@temp:color;{\nav@usevalueor nav@temp:outlinecolor;{0 0 0}}]
+ /F \nav@ifvalue nav@temp:bold; = true {1}{0}\nav@ifvalue nav@temp:italic; = true {1}{0}
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%% Annotations %%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\actionlink{%
+ \ifnext[
+ {\nav@actionlink_do{a}}
+ {\nav@actionlink_do{a}[]}%
+ }
+
+\def\rawactionlink{%
+ \ifnext[
+ {\nav@actionlink_do{r}}
+ {\nav@actionlink_do{r}[]}%
+ }
+
+\def\jumplink{%
+ \ifnext[
+ {\nav@actionlink_do{d}}
+ {\nav@actionlink_do{d}[]}%
+ }
+
+\def\annotation{%
+ \ifnext[
+ {\nav@actionlink_do{x}}
+ {\nav@actionlink_do{x}[]}%
+ }
+
+\def\openfilelink{%
+ \ifnext[
+ {\nav@openfilelink}
+ {\nav@openfilelink[]}%
+ }
+
+\def\nav@openfilelink[#1]#2{%
+ \ifnext[
+ {\nav@openfilelink_do{#1}{#2}}
+ {\nav@openfilelink_do{#1}{#2}[0]}%
+ }
+
+\def\nav@openfilelink_do#1#2[#3]{%
+ \nav@actionlink_do{r}[#1]
+ {/S/GoToE /D [\the\numexpr#3-1\relax /Fit]
+ /T << /R/C /N (#2) >> /NewWindow true}%
+ }
+
+\long\def\nav@actionlink_do#1[#2]#3#4{%
+ \nav@quitvmode
+ \nav@prepare_options{}{#2}%
+ \iffstring{#1}{a}{\pdfensureobject{#3}}%
+ \nav@actionlink_create{#1}{#3}{%
+ % Something in pre might be delimited by something in post
+ % so post must be passed expanded.
+ \nav@passvaluenobracesor{\nav@usevalue nav@temp:pre;#4}nav@temp:post;
+ {\nav@usevalue nav@temp:pre;#4}%
+ }%
+ \deleteparameter nav@temp:%
+ }
+
+\ifpdforluatex
+
+\let\nav@quitvmode\quitvmode
+
+\long\def\nav@actionlink_create#1#2#3{%
+ \pdfstartlink
+ attr {\nav@actionlink_attributes{#1}{#2}}
+ user {}%
+ #3\pdfendlink
+ }
+
+\else
+
+\let\nav@quitvmode\leavevmode
+
+\long\def\nav@actionlink_create#1#2#3{%
+ \special{pdf: bannot
+ << \nav@actionlink_attributes{#1}{#2} >>}%
+ #3\special{pdf: eannot}%
+ }
+
+\fi
+
+\def\nav@actionlink_attributes#1#2{%
+ /Border [0 0 \nav@usevalueor nav@temp:border;{1}%
+ \nav@passvaluenobracesand{[}nav@temp:dash;{]}{}]
+ /C [\nav@usevalueor nav@temp:color;{\nav@usevalueor nav@temp:linkcolor;{0 0 0}}]
+ \nav@ifcasevalue nav@temp:highlight;%
+ \val none /H/N
+ \val invert /H/I
+ \val outline /H/O
+ \val push /H/P
+ \endval
+ \ifstring{#1}{x}
+ {#2}
+ {/Subtype/Link
+ \ifstring{#1}{d}
+ {/Dest (\anchorname{#2})}
+ {/A \ifstring{#1}{r}
+ {<< #2 >>}
+ {\pdfrefobject{#2}}}}%
+ \nav@usevalue nav@temp:raw;%
+ }
+
+\pdfdictobject{firstpage}{/S/Named /N/FirstPage}
+\pdfdictobject{lastpage} {/S/Named /N/LastPage}
+\pdfdictobject{prevpage} {/S/Named /N/PrevPage}
+\pdfdictobject{nextpage} {/S/Named /N/NextPage}
+
+\def\urlaction#1#2{%
+ \pdfdictobject{#1}{/S/URI /URI (#2)}%
+ }
+
+\def\javascriptaction#1#2{%
+ \pdfdictobject{#1}{/S/JavaScript /JS (\pdfstring{#2})}%
+ }
+
+\def\urllink{%
+ \ifnext[
+ {\nav@urllink}
+ {\nav@urllink[]}%
+ }
+
+\def\nav@urllink[#1]#2{%
+ \nav@actionlink_do{r}[#1]{/S/URI /URI (#2)}%
+ }
+
+\def\javascriptlink{%
+ \ifnext[
+ {\nav@javascriptlink}
+ {\nav@javascriptlink[]}%
+ }
+
+\def\nav@javascriptlink[#1]#2{%
+ \nav@actionlink_do{r}[#1]{/S/JavaScript /JS (\pdfstring{#2})}%
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% Embedded files %%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\nav@embeddedfile_names{}%
+
+\ifcase\texenginenumber
+
+\or % XeTeX
+\def\nav@sort#1#2{%
+ \straightenif{ifnum}{\strcmp{#1}{#2} < 0\relax}%
+ }
+
+\or % PDFTeX
+\def\nav@sort#1#2{%
+ \straightenif{ifnum}{\pdfstrcmp{#1}{#2} < 0\relax}%
+ }
+
+\or % LuaTeX
+\def\nav@sort#1#2{%
+ \usecs{%
+ \directlua{%
+ if [[#1]] < [[#2]] then
+ tex.print("firstoftwo")
+ else
+ tex.print("secondoftwo")
+ end}}}
+\fi
+
+\def\embeddedfile{%
+ \ifnext[
+ {\nav@embeddedfile_getdesc}
+ {\nav@embeddedfile_getdesc[]}%
+ }
+
+\def\nav@embeddedfile_getdesc[#1]#2{%
+ \ifnext[
+ {\nav@embeddedfile_do{#1}{#2}}
+ {\nav@embeddedfile_do{#1}{#2}[]}%
+ }
+
+\def\nav@embeddedfile_do#1#2[#3]#4{%s
+ \pdffileobject[/Type/EmbeddedFile]{nav@embeddedfile:#2}{#4}%
+ \pdfdictobject{#2}{%
+ /Type/Filespec
+ /F (\ifemptystring{#3}{#4}{#3})
+ \reverse\iffemptystring{#1}{/Desc (\pdfstring{#1})}
+ /EF << /F \pdfrefobject{nav@embeddedfile:#2} >>}%
+ \let\nav@temp\nav@embeddedfile_names
+ \let\nav@embeddedfile_names\emptycs
+ \passexpanded{\ifemptystring{#3}{\nav@embeddedfile_add{#4}}{\nav@embeddedfile_add{#3}}{\pdfrefobject{#2}}}\nav@temp
+ }
+
+\newfor\nav@embeddedfile_add{2}#3#4{%
+ \nav@sort{#1}{#3}
+ {\global\eaddright\nav@embeddedfile_names{{#1}{#2}{#3}{#4}}%
+ \retrieverest{\global\eaddright\nav@embeddedfile_names}}
+ {\global\eaddright\nav@embeddedfile_names{{#3}{#4}}}%
+ }[\global\eaddright\nav@embeddedfile_names{{#1}{#2}}]
+
+\newfor\nav@embeddedfile_print#1#2{(#1) #2}
+
+\def\nav@embeddedfile_process{%
+ \pdfdictobject{EmbeddedFiles}{/Names [\passexpanded\nav@embeddedfile_print\nav@embeddedfile_names]}%
+ \nav@embeddedfile_setnames
+ }
+
+\ifpdforluatex
+
+\def\nav@embeddedfile_setnames{%
+ \pdfnames{/EmbeddedFiles \pdfrefobject{EmbeddedFiles}}%
+ }
+
+\else
+
+\def\nav@embeddedfile_setnames{%
+ \special{pdf: put @names << /EmbeddedFiles \pdfrefobject{EmbeddedFiles} >>}%
+ }
+
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%% INFO %%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifnav@finished
+\def\finishpdffile{%
+ \unless\ifnav@finished
+ \global\nav@finishedtrue
+ \nav@embeddedfile_process
+ \nav@processoutlines
+ \nav@processinfo
+ \fi
+ }
+
+\setparameter navigator :
+% ANCHORS (and bookmarks which create implicit anchors)
+ up = \baselineskip
+ left = 0pt
+ fit = xyz
+% zoom = 1000 % If it is set, it always sets view to 100%, which is extremely irritating.
+%
+% LINKS
+ border = 0
+ linkcolor = "0 0 0" % "color" in individual links
+ highlight = invert
+% dash = 1 0
+% raw = makes sense for individual links only
+% pre = nothing
+% post = nothing
+%
+% OUTLINES
+ outlinecolor = "0 0 0" % "color" in individual outlines
+ open = false
+ bold = false
+ italic = false
+% action = makes sense for individual outlines only
+% anchor = idem
+%
+% PDF info, no default values:
+% author, title, keywords, subject, date, moddate,
+% creator, producer, rawinfo
+%
+% PDF catalog, idem:
+% layout, mode, uri or base, openaction, rawcatalog
+
+
+\def\nav@processinfo_do#1#2{%
+ \nav@passvalueand{/#1 (\pdfstring}navigator:#2;{) }{}%
+ }
+
+\def\nav@processinfo{%
+ \nav@info{%
+ \nav@processinfo_do{Author} {author}%
+ \nav@processinfo_do{Title} {title}%
+ \nav@processinfo_do{Keywords} {keywords}%
+ \nav@processinfo_do{Subject} {subject}%
+ \nav@processinfo_do{CreationDate} {date}%
+ \nav@processinfo_do{ModDate} {moddate}%
+ \nav@processinfo_do{Creator} {creator}%
+ \nav@processinfo_do{Producer} {producer}%
+ \nav@usevalue navigator:rawinfo;}%
+%
+ \nav@passvalue\pdfensureobject navigator:openaction;%
+ \nav@catalog{%
+ \nav@ifattribute navigator:layout;
+ {/PageLayout%
+ \nav@ifcasevalue navigator:layout;%
+ \val onepage /SinglePage
+ \val onecolumn /OneColumn
+ \val twopage /TwoPageRight
+ \val twopage* /TwoPageLeft
+ \val twocolumn /TwoColumnRight
+ \val twocolumn* /TwoColumnLeft
+ \endval\spacecs}{}%
+ \nav@ifattribute navigator:mode;
+ {/PageMode
+ \nav@ifcasevalue navigator:mode;%
+ \val outlines /UseOutlines
+ \val bookmarks /UseOutlines
+ \val thumbnails /UseThumbs
+ \val thumbs /UseThumbs
+ \val oc /UseOC
+ \val attachments /UseAttachments
+ \val files /UseAttachments
+ \elseval /UseOutlines
+ \endval\spacecs}{}%
+ \nav@ifattribute navigator:uri;
+ {/URI << /Base (\nav@usevalue navigator:uri;) >> }
+ {\nav@ifattribute navigator:base;
+ {/URI << /Base (\nav@usevalue navigator:base;) >> }
+ {}}%
+ \nav@passvalue{/OpenAction \pdfrefobject}navigator:openaction;%
+ \nav@usevalue navigator:rawcatalog;}%
+ }%
+
+\ifpdforluatex
+
+\let\nav@info\pdfinfo
+\let\nav@catalog\pdfcatalog
+
+\else
+
+\def\nav@info#1{%
+ \special{pdf: docinfo << #1 >>}%
+ }
+\def\nav@catalog#1{%
+ \special{pdf: docview << #1 >>}%
+ }
+
+\fi
+
+\restorecatcodes
+\endinput
+% Almost 800 lines? Gee, that code was supposed to
+% be short and light...
diff --git a/macros/generic/navigator/t-navigator.tex b/macros/generic/navigator/t-navigator.tex
new file mode 100644
index 0000000000..1641d394fc
--- /dev/null
+++ b/macros/generic/navigator/t-navigator.tex
@@ -0,0 +1,33 @@
+% This is t-navigator.tex, a third-party file to load
+% the Navigator package in ConTeXt. Useful information
+% can be found in navigator-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: May 2016.
+%
+% Note that support for Navigator is limited in ConTeXt,
+% because ConTeXt doesn't really need it, and any effort
+% on my part could be harmful to the integrity of ConTeXt's
+% processing, to put it in a somewhat tragic tone. More
+% precisely, embedded files and document infos and display
+% aren't supported.
+%
+%D \module
+%D [ file=t-navigator,
+%D version=2016.05.22,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Navigator,
+%D author=Paul Isambert,
+%D date=\currentdate,
+%D copyright=Paul Isambert,
+%D email=zappathustra@free.fr,
+%D license=LaTeX Project Public License]
+
+\writestatus{loading}{ConTeXt User Module / navigator}
+\chardef\formatnumber=3
+\input navigator.tex
+\appendtoks \finishpdffile \to \everystoptext
+\endinput
+
diff --git a/macros/generic/occam/DefStrip-QUEDCmds.hqx b/macros/generic/occam/DefStrip-QUEDCmds.hqx
new file mode 100644
index 0000000000..2331b08789
--- /dev/null
+++ b/macros/generic/occam/DefStrip-QUEDCmds.hqx
@@ -0,0 +1,224 @@
+(This file must be converted with BinHex 4.0)
+:%84PCP0dFQP`,9&9484$E@4c!&&03804483a!3!!!!!!!!!TJ)bi!!!!!!%!!!!
+S#3!!*`N!!!&h!!$`)[rr!!!N2!!!!!$`-!!R-!!S'J!!!!!!!2rr)!!44'9Q8h4
+bDA!Y899&4%0YC(-#!!!!88e"3e&&4$%"!!!!88e"3e&&4$%"!!!F!,N!!!!!!!!
+!!!!!!!!!!!!!!!#XPK,M!!!!!!!!+B#ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff!!!!3%9NDA3J6@&MFQr*$8YPH5"NC@CcG(*TF'KXF!e,CANJ$3e
+$E'PMDb!a-M3X)#dh$80XD@0V)$%b0#`J,6F0$3d!!!$B6h"PEL!LBA9NDA3ZE(0
+d)L!J$80[F(NJ)MJL)#)k2PYH35eDB5ekA5)J)!e'D@jN)#)k2&`UA&aFA&Y",9T
+K,ATG+b)J)Le"Ch48)Je$Eh"j)#)j)L!06h"PEL!LGfpbDb)03fKKEQGP)#GF3cP
+F3cJZ+VdR)#"dEb!J)LDp)#!P*5"E9N969%P(46mrA5)J)N&KCh3L$80SB@jRC5!
+RA%-jA%-i,LSN*b!JG'mJ)#)QA()J)#8P)&Y@490858G&2cpG)L!L3@&RG#)0C'9
+QFh4bDA"dB@PX!!!!lde[EQ&ME`dj)&"[D@jd$90PE'9MG#""E'`03fp`H5!L15)
+04QPZC#!L)L!J)!d06Q9h)#*hEh*V)Je,CANJ)#!0$90PG#"-D@jP)&GTC(4Sb3e
+,CANJ$3dj)&"[D@jd$8e[EQ&ME`e6C@aPBh3J3@aX$9"KFh4P)#)j)Je'D@jN)#)
+L$90KGQ80$8p`C@iJ)Q&eC'Pd,QacG#)J)!dj)&"[D@jd$8e[EQ&ME`e$D'&ZCf8
+J)PjFFbTF+&YF)e`UA5TF+9ac+PaF)L!JG'mJ)P`aA&aFA#)J)#!LG'&R)Je'D@j
+N)#)kFb)J)QFL)#!0!!!%L%GPEQ9fB3da-L"3EfPZG!e6C@aPBh3J3@aX$80[F(N
+J)MNL$8CTEQ3J)L)J)R4R)Je1CAFJ)RG[FQXL$8YPH5!J)!d08f9d)%aTEQ8J9fP
+NG'M*)!e,CANJ-6!`-$!05f9j)!d04f9ZCACK$6%b)&"[D@jd$90PE'9MG#""E'`
+08'&cG'8J)MNL$8CTEQ3J)L)J)R3L$90KGQ80$8CTEQ3J*cTc*b!LCd&d)L!J$80
+SB@jRC5!L*9aHA(-UA(*FFbTFA%&eC'Pd4'9`G'KFFbTFHe`UA#TFI9ac+L9FAea
+c+Pab)L"dEb!L)L!J)#!L,@P"G'&R)Jd03fKKEQGP)#)kFcSZ+L9FAL"")'0[E@e
+PER3JCQpb)(4SC5"cD(*eEQYPEL"YB@0bEb"QD@aPA$TFFbSPAb)JG'mJ)#!J)#!
+J)L)J)#!J)LeTG'&R)L!03fKKEQGP)#*FG#)JG'mJ)#)J)#!L)#!J)#*dB@FL)!e
+$D'&ZCf8J)#*HA(-U*59EA&jIA5SZ+L)JG'mJ)L)J)#!LG'&R)Jd03fKKEQGP)#!
+LAP`SA(-U*9`T)bS[A&iZ+Pab)L"dEb!L)L!J)#*dB@FL$80SB@jRC5!J)PjF+&a
+c+L9F+5-U,beFAL)JG'mJ)P`a)L!J)#*dB@FL$80SB@jRC5!J)L8M+LmYAeac+L3
+L)(4[)#)P)L!J)#*dB@FL$80SB@jRC5!LA#KHA(-UA&aR,9`T4#YF+'9QA(-UA&a
+F+5)JG'mJ)#*F-@4F-L)J)#!J)LeTG'&R)L!03fKKEQGP)#*F+&jFFbTFA'FYA#P
+-A#KPG&ac+PaFA#NL)(4[)#!LA$&XA$)L)#!J)#)YDA4KCb)J$80SB@jRC5!LA#K
+HA(-UA&aF+8CF+'pZG&ac+PaFA#NL)(4[)#!LA$&QA$)L)#!J)#)YDA4KCb)J$80
+SB@jRC5!LA#KHA(-UA&aRE'pLB@aFFbTFA&`T4P`SEfjdA(-UA&aF+5)JG'mJ)#*
+F-@CF-L)J)#!J)LeTG'&R)L!03fKKEQGP)#*F+&jFFbTFA&`T69`SBA4SBfKKFQ4
+PCPac+PaFA#NL)(4[)#!LA$&YA$)L)#!J)#)YDA4KCb)J$80SB@jRC5!LA#KHA(-
+UA&aRE'pLB@aFFbTFA&`T69`SBA4SBfKKFQ4PCPac+PaFA#NL)(4[)#!LA$&YA$)
+L)#!J)#)YDA4KCb)J$80SB@jRC5!LA#KHA(-UA&aF+8jF+'9hFhPYBQpXA(-UA&a
+F+5)JG'mJ)#*F-@jF-L)J)#!J)LeTG'&R)L!03fKKEQGP)#*F+&jFFbTFA'GXEf*
+KE&ac+PaFA#P1A#KPGh0jE@*[E&ac+PaFA#NL)(4[)#!LA$&ZA$)L)#!J)#)YDA4
+KCb)J$3e'D@jN)#)kFb)J)QFL$80SB@jRC5!LAPac+Pab)L!JG'mJ)#*FFL)J)#!
+L3A4KCb)03fKKEQGP)#*FFPabA()V)L!JG'mJ)#*FFPab)L!J)#*"G'&R)Jd08f&
+fC5""FmN05f9j)'peG("eG!e,CANJ$3d0!!!#0NCTEQ3J)MTc)L!LCb)J)!e$D'&
+ZCf8J)#*FFPab)L"dEb!LA(*FFVBL)#!J)R4KCb)03fKKEQGP)#!LYLUT1PYH[lD
+T[9dU[9ab)L"dEb!LYL)J)#!L,@PdB@FL$80SB@jRC5!J)MSm@lffA9ab+cSq@ek
+fA5)JG'mJ)PabYL)J)#!L,@PdB@FL$80SB@jRC5!J)Vmk@ekf[leG+VdL)(4[)#+
+r[5)J)#!L,@PdB@FL$80SB@jRC5!J)VBV1PYHYVqpA5Ur)L"dEb!LYVmL)#!J)Le
+TG'&R)Je$D'&ZCf8J)#*HYLUr1PYHYVqpA5UpYLeFFL)JG'mJ)VBL)#!J)LeTG'&
+R)Je$D'&ZCf8J)#*HYLUpYLeFFL)J)#+f)L!J)#*dB@FL$80SB@jRC5!J)VmL)#!
+L[bSU8eP19%&B)%958Np5+LSL)#!J)LeTG'&R)Je$D'&ZCf8J)#*FFP`SYLTFFP`
+T+b)JG'mJ)PabA(+f)L!J)#*dB@FL$80SB@jRC5!J)VBV)L!J)VBL)#!J)LeTG'&
+R)Je$D'&ZCf8J)#+f+Vff+L)J)#+p)L!J)#)YDA4KCb)03fKKEQGP)#!L[9ab,Ed
+U)L!J)VdL)#!J)LeTG'&R)JdP*3e$D'&ZCf8J)#+f+UNZ+Pab)L!J)VBL)#!J)Le
+TG'&R)JdP3fKKEQGP)#!LYL)J)#)P)L!J)#)YDA4KCb)0*80SB@jRC5!J)Pkf+Vf
+f+L)J)#)P)L!J)#)YDA4KCb)0!!!!Sd0[F(NJ)MFL)#*ESU1dekDTA5XL$8p`C@i
+J)Q&eC'Pd,QacG#)04QPZC#!L1MaF+PaFA&aEAPacA5XL)#)Y3@Gd9#)03fp`H5!
+L1#)J$80[F(NJ)MNL)#)k2PYH35eDB5ekA5)J)!e2F'9Z)#*hEh*V)Je$D'&ZCf8
+J*ea$0ea$1&a$15FJ)(4[)#+r)L!J)LeT3@&RG#)0Fh4TCfeKG'PkC3d!!!!Y3fK
+KEQGP)#!LYLUr1PYHA,Dr[9dU[EBYA()L)(4[)#+f)L!J)#)YDA4KCb)0!!!"i8p
+`C@iJ)RG[FQXL$8CTEQ3J)MTc)L!LCb)J)!d03fKKEQGP)#!LA(+f+PabYLSL)(4
+[)#*FFPabYL)J)#!L,@PdB@FL$80SB@jRC5!J)MSm@lffA9ab+cSq@ekfA5)JG'm
+J)PabYL)J)#!L,@PdB@FL$80SB@jRC5!J)Vmk@ekf[leG+VdL)(4[)#+r[5)J)#!
+L,@PdB@FL$80SB@jRC5!J)VBV1PYHYVqpA5Ur)L"dEb!LYVmL)#!J)LeTG'&R)Je
+$D'&ZCf8J)#+f+Vmk@ekf[leG+Vff+Pab)L"dEb!LYL)J)#!L,@PdB@FL$80SB@j
+RC5!J)Pkf+Vff+Pab)L!J)VBL)#!J)LeTG'&R)Je$D'&ZCf8J)#+r)L!J)VmU+P0
+C6P4"@#"&8P*28LSU)L!J)#)YDA4KCb)03fKKEQGP)#!LA(*F+,BUA(*F+5XL)(4
+[)#*FFPabYL)J)#!L,@PdB@FL$80SB@jRC5!J)VBV)L!J)VBL)#!J)LeTG'&R)Je
+$D'&ZCf8J)#+f+Vff+L)J)#+p)L!J)#)YDA4KCb)03fKKEQGP)#!L[9ab,EdL)#!
+L[5)J)#!L,@PdB@FL$3e2F'9Z)#*KG@4TG#jXFh3L$8CTEQ3J)MTc)L!LCb)J)!d
+!!!P5)&"KFR3JEfBJG'KP)%pMBf&Y)(9dD@aTG(NZ$5"-BA9bC@jd)&0TC@*PEQe
+KEQimE'0c3(4[F'mZE@&dD#je,A"cG@3ZCR)q$5"0BA0dCA)JF'pcG'PZCb"TEL!
+a16Ne,#"QG(!JCR4`,QeKG'JZG5e`Fh9N,QCb$3e"G@GeFh3J-6Nj05"fCA*cD@p
+Z$3dJ+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU+JdJ+LSU+LSU$5!U+LSU+LSJ)#!J)#"%C@C6G(*TF#e4989%65e$E@4c)%K
+PE(!0)#SU+LSU+JdJ+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU+LSU+LSU+LSU+Jd0)&"98P"28d8J6dBJ9%K&8d8J68&$8NmY3dp068&14&-
+Z$3dJ)#!J)#"8D'8JE@&TEL"`GA*`Eh0P)'Pc)(4[)(9cC5"K)'CTE'8J)Q&eC'P
+d,QacG#)JC'9bDACPC#"QFQpY$@&eC'Pd,R4PH#`JB@jN)'%J9'9B)'eKBh*[)'C
+TE'8X)(JYEf0M,R0dH5"cBANX)'PZ)(4SC5!L6f0MB@dL$@C[FQeKG#!SC'9QD@j
+PC#"TEL"[Bf0KE5jcF'-T)(4[)'4PFQPfC5"K)'jPGb"cD@e`E'PQD@9N)#)ZG'9
+i)JeYB@0bEb"QD@aP)'PZ)(GSD@0S)(0PE'9MG'9N)(9ZGf&ZG'9N)'eKG'9bD@&
+X)'Pc)(0eF("bCA0cC@3Z$94SDA-JE@&dCA*TB@`JDA-JC'9cD@GZBA4PC#"LH5!
+LBA9NDA3ZE(0d)L"TEL"MEfjUG@jMG'P[EL"hDA4S$8pMBf&Y)(0dFR9MG(9bD@j
+R)'pQ)(4SC5!JH#e[Bf-ZFh4j)&4P@#"YB@0bEb"QD@aP,#"hD'PMD!eTERC[E(C
+PFb!PAL`J*9mX)&a%C@BX)&a-CA3X)&aR4'9Q,#"FCdaPG#`JA%C[ER3X)'&ZC#"
+cEfeP$@pdD'9bFbiJ)&4SC5"eFf9b)'eKBh*[)#!U+LTNC@CcG(*TF#"REhCPFQj
+c)(4SDA-JCR9ZBh4TEfiZ$3dJ)#!J)#"8D'8JFf9MEfjNBA*j)'&ZC#"eER*PE'&
+dC@3JF(9bF'pcC5"TFb"dEb"bC@e[GQ8J6f0MB@d0CQpbE@&dG'PZCbiJ)&4SC5"
+YB@0bEb!U+QpMBbedEbedCAJJ)'G[GQ9bER-JG'KTFb"QG@jMG'P[ELi0$3dJ4%P
+5480858p18b"'6e)J990&,Jd0)#!J)#!J)&*PB@3JG'KP)'C[E'a[GfPZCb"MBA*
+PCR9XE(NJB@jN)(4SC@iJF(*KBh4TBf8JEfiJEfjP)'pQ)(4SC3eTEQ0XG@4PC#"
+hEh*VC@3JCAKKEA"XCA-Z$3dJ)#!J)#!J8(9d)(4[Cf9dD'9b)'PZG'mJEfjP)'C
+[E'4PFL"K)'0[F(NJEfBJ4'9Q8h4bDA!Y899&4%dY3feNF`eYB@0bEb"QD@aP,#"
+dD'8JCQPXC5"KG@4TG#jXFh3X)'&ZC#"dD'8JE@&MFQmJCQPXC5"dEb"LC5"cD@e
+`E'PQD@9N,Jd0)#!J)#!J)%p`C@iJG'KP)%4PCP0dFQP`,9&94840,80YC(-JCQP
+XC5iJ)%PQ)'Pd)'Pc)'j[G#"fDA0TBQaP,!eXBA9ZBfJJ899&4%dJGA0TEQFJDA3
+Z$3dJ)#!J)#!J6h"PEL"dD'8J9'9B)'eKBh*[)'CTE'8JG@jNCA)J899&4%dJB@j
+N)#TKBh4TGQ&dC5SJDA4c$AGTEQ4[GbiJ9'KPEL"XBA9ZBfJJG'KP)'eKBh*[)#S
+U+Q4PCR0dFQP`)'CbEfdJG'KP)&&94840$@eKBh*[Fb"YC@je,Jd0)#!J)#!J)%&
+Z)'&eC'Pd,QacG#"hD@jNEhFJ)(GTE'`JEQph)'p`C@iJB@jN)'eeBfJJB@0dDAC
+TG(NJGfPXE!eLC5"cC@9Z,L"'D@jKE'aj,#"K)'0XC@&ZC@3YGA!JGQ9bFfP[EL"
+[CL"dD'8J)LjdCAJL)'eKBh*[)'CTE'80GfPXE#"KF("PBA)JD@iJB5"hD@jNEhF
+JBf&XE'9N)#*[GA4`GA3L,Jd0)#!J)#!J)%K[Gf9fCA)X)#!LEh9dF(9d)L"YBAN
+JEQpd)'*P)#TMEfe`E'9dC@aj+L"ME'9KEQ9N)(9`,Je*EL"dD'&d)'0KFf8JFfp
+YC5"[CL"dD'8JFh4bG@0dGA*TEQFJFhPYBQpXFb"YC@jdD@pZC@3JB@*[GQ80GfP
+XE#"hD@aX)'*P)(CTFfPLE'8JD@iJDA3X)'&ZC#"KFh4PFQPcDh-JGfPXE#"LC5"
+cG'PXE#"fDA0TBQaP)'PZ)(4SC3eXD@jP)#"*9%95394*6dj$6e919%95)#"XD@j
+P)'&d)(4SC5"PEQ3JEfBJ)Q&eC'Pd,QacG#)Z)#"*EL"dD'Pc$@0KFf8X)(*eEL!
+U+LTNC@CcG(*TF#"KCf&TEL"[EL!LEh9dF(9d)L"dEb"`FQpNG@0P)#*[GA4`GA3
+b)LiJ3A-0EQ9MCA0cBA*j,#"TG'9bBA4P)(9ZG'PX)'&XE#"KFh4PFQPcDh-JBA*
+P)'G[EQ8JCR*[E5"dD'Pc)'0[G@jdCA)0E'PZC5iJ)&4SFQ9P)(*eER-JEfBJ+LS
+UC'9QFh4bDA!JDA-JG'KP)'eKH'PYG@dJG'KKG#"SBA-JF(*[GQ9N$A9cC@CeE#"
+TEL!a16Ne,Jd0$9*&68&55e-Z)#!J6fjXH5"dD'8J)#SU+QKPE(!X)#!U+LTNC@C
+cG(*TF#`J)'&ZC#!J+LT[Bf-YG'mYG'9i$@eKBh*[Fb"QFQpY)(4SC5"4989%65"
+YB@0bEh-JE@9ZG5"cD'peE'3JBQ8JE'&eEQ0SC@3J)'*j)(4SC3eeFf9b,L!J9'K
+P)'pdD'9bFb"KFQ8JFh9LFQpeG'PZCA-Z$3dJ)#!J)#!J8f9P)'pMBf&Y,R0`Bb"
+QEh)JCR9bG'KPFL"NCA4KD@ac,#"KEQ3JEf0MB@dZF(9L)'C[FL"KEJe[GQ9bGQP
+PGb"[CL"dD'8J6f0MB@dJGA4TE'PdH5i0$3e36e0658*-45"38Np#6%908biZ,Li
+SF'aPBA0P)(*PF'pbG#"LG@Gc)(4[)(4[)'&eG'K[FLN0$3d0$3!!#L)J8'&bG#"
+[CL"dD'8J6f0MB@dJGA4TE'PdH5i0)%aKGA*PER3J8fPPBQ9ZE@&ZEMaXBh0!G'p
+`EbjYBA4S,R8YF(0eC#jQFMi0)%eKFh4PFL"`Eh0dD@jR)'PZ)$%j168X)'CdF#"
+QG(!ZE@&dD#je,A"cG@3ZCR)0$8&eCh9cG#!a16Ne)(CPFR0TEfi0$5!U+LSU+LS
+U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU$5!U+LS
+U+LS0)#SU+LSU+L!J)#!J)%4PCP0dFQP`,9&94840,80YC(-J5'9XF!dJ+LSU+LS
+U$5!U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU$3dJ8&958%p645"24L"85%9645"038056be$6de038j%8bi0$5!J)#!J)&4
+SC5"YB@PZ)("eFR"[Ff8JDA-JG'mJGA0P)'%JCQPXC5!LBA9NDA3ZE(0d)L"NCA*
+TGQ9N)'CbEfd0BA9NDA3ZG'9i,#"KEQ3JB5"8C9JJE@&MFQmJCQPXC5`JH#e[Bf-
+ZFh4j)(0KH5`JD@iJG'KP)#*2Bf0KE5)0CQpbE@&d)#KNC@CTEQ9N)'PZ)'pMBf&
+Y,R0`BbNJG'mJC'9bDACP)'%JEQ9h)(0TEA"XD@CTC@3J)LjdCAJL$@eKBh*[)'C
+TE'8JD@iJGfKTBfJJFf9XC@0dC@3JG@jhB@jdC@3JE@&dCA*TB@`JDA-JFh9`F(*
+PFh0PC#i09'KTFb"YBA4PFQPKE#"TFb"NCA0TCfjKG'9N)'*j)#*KG@4TG#jXFh3
+L)'PZ)'0[EQTeEQ0dD@pZ)(GTG'J06f0MB@dJFh4bG@0dGA*TEQFJEfBJG'KP)#"
+i,@pMBbjcG(NJ9'9B)'eKBh*[)'CTE'8X)(GSD@0S$@PZGQpXGQ9c)#9H,#!PAb`
+JA%4PCL`JA%aPG#`JA'G%C@BX)&aR6'9d,#"F4QpZG#`JB@jN)(0[E@80Eh4SCA*
+c,L!J9'KP)(9cCA)JE@&MFQmJ)#SU+Q4PCR0dFQP`)'G[GQ9bER-JG'KTFb"QG@j
+MG'P[ELi0$5!J)#!J)&4SC5"cC@0[EQ4KFRNJB@jN)(9ZFQ9XBA4PC#"`GA*`Eh0
+P)'Pc)(4[)(*PE@pfC5"2Bf0KE3eQEh*YBA4dD@jR,L!J9'KP)'eKBh*[)#SUEf0
+M,A4[,A4PH#!JCfpfCA*ZFb"dD'Pc)'CeEQ0dD@pZ,Jd0$5"%59*&3e4*6dj6)%C
+28L"98d8Z$3dJ)#!J)#!J8Q9KC#"dD'8JCQpXE'phD@jR)'0KFQ9QG@aXH5"KEQ3
+JG'KPEL"`FQ&MG'PMC5"[EL"[EQ8JEfBJG'KP$@PZBfaeC'9N)(G[FQYPC#"PH'&
+YF'aPFbi0$5!J)#!J)#"3GA3JG'pRCA4SCA)JD@jdEb"[EQ8JCQpXC'9b)'%JBfp
+`H5"[CL"%C@C6G(*TF#e4989%65e$E@4c$@eKBh*[)'CTE'8X)(4SC5"QD@aP)'&
+eC'Pd,QacG#`JB@jN)(4SC5"YB@0bEb"QD@aP)(4[)'*P)(0TEA"XD@CTC@3Z$3d
+J)#!J)#!J6h"PEL"dD'8J4'9Q8h4bDA!Y899&4%dY3feNFb"QD@aP,L!J5@BJDA3
+JDA-JEQpd)(CTFfPLE'8X$@aKG@jMD#"4989%65"eFfPZCb"TG#i0$5!J)#!J)#"
+2F'9Z)(4SC5"8C9JJE@&MFQmJCQPXC5"eEQ4PFL"4989%65"KEQ3J+Q&MG'PfBA4
+P+L"TG(-0GfPZC'ph,L"8D'9Z)'aKG@jMD#"dD'8JE@&MFQmJ+LSUC'9QFh4bDA!
+JCR*[E5"dD'8J899&4%d0E@&MFQpc)'ePER8Z$3dJ)#!J)#!J3@iJBA9NDA3ZE(0
+d)(GTEQ4[Gb!JGfPXE#"ZEhFJEh"PEL"KEQ3JEA9MD#"KBh4TGQPdH5"hD@aX$@*
+P)(0PC@iZ)%CTEQ&XE(NX)'%JBfaPB@jPC#eeF#"fCA*cD@pZ)'pQ)(4SC5!L,R4
+PH#)JE@&MFQmJCQPXC3ehD@aX)'&`F'9KFL"TEL"K)(GTEQ4[Gb"MB@aXC@3J)Qp
+eG("eG#)Z$3dJ)#!J)#!J5'phCACPFL`J)#*[GA4`GA3L)'eKH5"ZEh3JBQ8J+Q0
+[EA"XCA4PE(NU)'0XC@&ZC@3JGA!Z)%PZ$A4SBA3JBf&cC5"cEfeP)'pQ)(4SC5"
+cG(*eBh4eFQPZCb"cH@eLEfac)'ePER4TEfjPC#"KBQpfC5"hD@aX$AGTE'`JBQ8
+JGQPcD@*XC5"TEL"TG#`JB@jN)'&cG'9bDA0VFb"hD@aX)'*P)(0dD@aX)(CTFfP
+LE'8JD@iJG'KP)'aTEQ80594&8N&858p13dp96P4&8L!JE'PZC5"KG#"dD'8JC@j
+N)'pQ)#*KG@4TG#jXFh3L,L!J5@iJG'KTFb"MBA0P,!ebG@iJ+LSUC'9QFh4bDA!
+JB@GKD@iJEfiJ)QpeG("eG#)JG'mJF(*[C(9MC5!LEh9dF(9d-L)Z)%&c$@jPBf9
+cFf&bH5`JDA4PFQ&dC5"eER4TE#"KE'`JBA0dCA*TFfYc)'&bC5"REfjP)'CbEfd
+JG'KTFb"MEh9ZG'9b$@aTEQ8Z)#"8D(*PC5"bG@jc)'pQ)#SU+Q4PCR0dFQP`)'P
+c)(4SC5"YBAKTEA9Y)(4SBA3JD'&c)("bEhCPC!eeFf9QG@`JD@iJ-6Nj05i0$3e
+548e"8NY6,Jd0)#dY,5"2EQaj)(4SC5!J+LSUD'9XF#`J)#SU+Q4PCR0dFQP`,#!
+JB@jN)#!U+QpMBbedEbedCAJJE@&MFQpc$@CbEfdJG'KP)&&94840)'eKBh*[Fb"
+YC@je)(0SEh9XC#"LC5"XBA9ZBfKPC#!JBRNJG'KP)(9cCA)Z$94SC5"[G'KPFR-
+JBA*P)(0eBR*[GA4TEQ9c,JdJ,5dY)%9bFQpbFb"TEL"dD'8J6f0MB@dJFh4bG@0
+dGA*TEQFJD@BJG'KP)'eKBh*[)'CTE'80)(JYEf0M,R0dH5!SFf&j+5"LC@PZCb"
+cD@e`E'PQD@9N)'eKH5"hC@aX)(0SEhFJGA!JG'KbEh9RD!eZEh4TBf9c)#SU8eP
+19%&B)%958Np5+LSJD@iJG'KP)'peG("eG#"QD@aP,L!J5@iJG'KTFb"MBA0P)'j
+[G'PQH3edD'8JF(*[Ch*KE@ePFL"[CL"i,@pMBbjcG(NZ$5!Y,5dJ8f9P)'pMBf&
+Y,R0`Bb"QEh)JCR9bG'KPFL"NCA4KD@ac,#"KEQ3JEf0MB@dZF(9L)'C[FL"KEJe
+[GQ9bGQPPGb"[CL"dD'8J6f0MB@dJGA4TE'PdH5i0$3e36e0658*-45"38Np#6%9
+08biZ,LiSF'aPBA0P)(*PF'pbG#"LG@Gc)(4[)(4[)'&eG'K[FLN0$3d0$3!!!!!
+!!!4A6h"PEL!LGfpbDb)0$80SB@jRC5!J)U+L)L"dEb!L)&aFCfa[BQ&XA&aNC@B
+J)L!J)#)YDA4KCb)03fKKEQGP)#!LSL)JG'mJ)L"FA'4PCL!L)#!J)LeTG'&R)Je
+$D'&ZCf8J)#+dY#)JG'mJ)L"FA'GXEf*KE&aFE'9d)#)J)#!L,@PdB@FL$80SB@j
+RC5!J)V3L)(4[)#)JA&aXCA3J)L!J)#)YDA4KCb)03fKKEQGP)#!LSk-L)(4[)#)
+JA&aRE'pLB@aFA'C[ER3J)L!J)#)YDA4KCb)03fKKEQGP)#!LSb)JG'mJ)L"FA'C
+[ER3J)L!J)#)YDA4KCb)03fKKEQGP)#!LepFL)(4[)#)JA&aRE'pLB@aFA'eKG'K
+MD'&bC'9Q)#)J)#!L,@PdB@FL$80SB@jRC5!J)YFL)(4[)#)JA&aYBA4SBfKKFQ4
+PCL!L)#!J)LeTG'&R)Je$D'&ZCf8J)#+Q)L"dEb!L)&aFEQ9hFhPYBQpX)#)J)#!
+L,@PdB@FL$80SB@jRC5!J)UNZ+Pab)L"dEb!L)L!J)#)YDA4KCb)03fKKEQGP)#!
+LYL)JG'mJ)L)J)#!L,@PdB@FL$80SB@jRC5!J)PkpA()L)(4[)#)L)#!J)LeTG'&
+R)Je$D'&ZCf8J)#+p)L"dEb!L*5)J)#!L,@PdB@FL$80SB@jRC5!J)PaF8f0bDA"
+dFf0bDA"dCQpZG#)JG'mJ)PaFFf0bDA"dFf0bDA"dCQpZG#)J)#!L,@PdB@FL$80
+SB@jRC5!J)PaF8f0bDA"dCQpZG#)JG'mJ)PaFFf0bDA"dCQpZG#)J)#!L,@PdB@F
+L$80SB@jRC5!J)PaF9'9iG&YQA@pZG#)JG'mJ)PaFG'9iG'C[ER3L)#!J)LeTG'&
+R)Je$D'&ZCf8J)#*FA&0VCAGMD'&b)L"dEb!LA&acDf9hBfKKFL)J)#!L,@PdB@F
+L$3e$D'&ZCf8J)#*F+#8M+P`T)e`S@em[APeF+5)JG'mJ)P`aA$)L)#!J)LeTG'&
+R)Je$D'&ZCf8J)#)P)b3L)(4[)#)L)#!J)LeTG'&R)Je$D'&ZCf8J)#*FA&`S4#Y
+F+84PCL)JG'mJ)PaFA$&PCL)J)#!L,@PdB@FL$80SB@jRC5!J)PaFA#K'+e`T4Qp
+ZG#)JG'mJ)PaFA$&[ER3L)#!J)LeTG'&R)Jd06h"PEL!LBA9NDA3ZE(0d)Je$D'&
+ZCf8J)#*FA&aF)L"dEb!LA&`L)#!J)LeTG'&R)Je$D'&ZCf8J)#*F+PaF)L"dEb!
+L)eaF)L!J)#)YDA4KCb)03fKKEQGP)#!LAP`S)bTF+9`U)e`S)bTF+5)JG'mJ)P`
+a)e`UA$)L)#!J)#)YDA4KCb)0$8p`C@iJ)RG[FQXL$6NJ8'pTER306@pZB@0[$90
+PG#"-D@jP)&GTC(4Sb5!05f9j)$%`-$!`$8YPH5!0$90KGQ8J3A2*$8YPH5"[GA4
+`GA30$3d0$3d0$3!!!&"NC@CcG(*TF("bCA!0C'9QFh4bDA"SC@&N$A0dD@GYBA4
+THQ80C'9QFh4bDA"`CA)0*59NC@CcG(*TF(4KD@`0C'9QFh4bDA"dD@4j$3d0$3d
+0$3d!!!-m6h"PEL!LGfpbDb)0$80SB@jRC5!LA(3L)(4[)#!L)#!J)L!J)#!LG'&
+R)L!03fKKEQGP)#!LAPac+L8PA&jI1LiU)L"dEb!L)L!J)#*dB@FL$3e$D'&ZCf8
+J)#*HA(-U*9aH)L"dEb!LYVmL)#!J)R4KCb)03fKKEQGP)#!L*5mYAeac+L3L)(4
+[)#+p)L!J)#*dB@FL$80SB@jRC5!J)PjFFbZp)L"dEb!L[5)J)#!LG'&R)Je$D'&
+ZCf8J)PjFFbSP,eaH)L"dEb!J)VDT)L!J)#!LG'&R)L!03fKKEQGP)#*HA(-UA&a
+%C@CFFbSL)(4[)#!LSL)J)#!J)LeTG'&R)L!03fKKEQGP)#*HA(-UA&aR4'9QA(-
+U)L"dEb!J)U+L)L!J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA'GXEf*KE&ac+Pa
+F4'9QA(-U)L"dEb!J)U+L)L!J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA%aPG&a
+c+L)JG'mJ)#+d)L!J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA'G-CA4FFbSL)(4
+[)#!LY,3L)#!J)#)YDA4KCb)J$80SB@jRC5!LAPac+PaFCfa[BQ&XA(-UA&a-CA4
+FFbSL)(4[)#!LY,3L)#!J)#)YDA4KCb)J$80SB@jRC5!LAPac+PaF4QpZG&ac+L)
+JG'mJ)#+M)L!J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA'GXEf*KE&ac+PaF4Qp
+ZG&ac+L)JG'mJ)#+MSb)J)#!J)LeTG'&R)L!03fKKEQGP)#*HA(-UA&a0BA4SBfK
+KFQ4PCPac+L)JG'mJ)#,A)L!J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA'GXEf*
+KE&ac+PaF6@&dD'0SBA*NC@CFFbSL)(4[)#!LepFL)#!J)#)YDA4KCb)J$80SB@j
+RC5!LAPac+PaF6Q9hFhPYBQpXA(-U)L"dEb!J)UBL)#!J)#)YDA4KCb)J$3e$D'&
+ZCf8J)#*FFbTF+&abA(-UA#NUA(*FFbTFFL)JG'mJ)PabA(+f)L!J)#*dB@FL$3e
+'D@jN)#)kFb)J)#*dCb)J)!d0!!!"!!!!+!N!!#F*!!!"G`!-0"!0Q!!!!"`!cJ!
+!88e"3`!0!!SYEJ!!)!!Mb3!-0!3"r!!0)!!*X3!--rK!#`!C)!!I&J!--r4'D!!
+Q)!!MF3!--r!fN3!b)!!")!!--qadJJ!r)!!)f3!--qKY83"+)!!!!!!--q4`e3"
+6)!!8l!!--q"HN3"I)!!!4!!--paD#J#')!!#%`!--pJ3rJ"X)!!*J!!--p4Jr`"
+i)!!'R`!--p!ZU3#6)!!,PJ!--m`U9!#J)!!I%J!--mJ-C'9QFh4bDA"SC@&N#f4
+PCR0dFQP`F'9b$'4PCR0dFQP`G'PNH3XU+LTNC@CcG(*TF!aNC@CcG(*TF("bCA!
++Fh4TCfeKG'PkC3JU+LSUD'9XF!YNC@CcG(*TF'KXF!aNC@CcG(*TF(4KD@`,Fh0
+dD@GYBA4THQ80C'4PCR0dFQP`G'&TE!`U+QpMBbedEbedCAJ-C'9QFh4bDA!ZD'a
+`#'ej)'eKBh*[P2-:
diff --git a/macros/generic/occam/DefStrip-QUEDCmds.hqx_old b/macros/generic/occam/DefStrip-QUEDCmds.hqx_old
new file mode 100644
index 0000000000..598dbb0174
--- /dev/null
+++ b/macros/generic/occam/DefStrip-QUEDCmds.hqx_old
@@ -0,0 +1,223 @@
+(This file must be converted with BinHex 4.0)
+:%84PCP0dFQP`,9&9484$E@4c!&&03804483a!3!!!!!!!!!T8hHQ!!!!!!%!!!!
+Rm3!!*[%!!!&L!!$`)[rr!!!N2!!!!!$`-!!R-!!S'J!!!!!!!2rr)!!34'9Q8h4
+bDA!Y889%3feNFfm#!!!!88e"3e&&4$%"!!!!88e"3e&&4$%"!!!J!+J!!!!!!!!
+!!!!!!!!!!!!!!!#U-4NI!!!!!!!!+91ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff!!!!3%9NDA3J6@&MFQr*$8YPH5"NC@CcG(*TF'KXF!e,CANJ$3e
+$E'PMDb!a-M3X)#dh$80XD@0V)$%b0#`J,6F0$3d!!!$B6h"PEL!LBA9NDA3ZE(0
+d)L!J$80[F(NJ)MJL)#)k2PYH35eDB5ekA5)J)!e'D@jN)#)k2&`UA&aFA&Y",9T
+K,ATG+b)J)Le"Ch48)Je$Eh"j)#)j)L!06h"PEL!LGfpbDb)03fKKEQGP)#GF3cP
+F3cJZ+VdR)#"dEb!J)LDp)#!P*5"E9N969%P(46mrA5)J)N&KCh3L$80SB@jRC5!
+RA%-jA%-i,LSN*b!JG'mJ)#)QA()J)#8P)&Y@490858G&2cpG)L!L3@&RG#)0C'9
+QFh4bDA"dB@PX!!!!mNGPEQ9fB3da-L"3EfPZG!e6C@aPBh3J3@aX$80[F(NJ)MN
+L$8CTEQ3J)L)J)#!0$8jPGb!LGfpbDb)05f9j)#!J$3e6CA3J6'PZC5"AD@4dD-N
+05f9j)!d04f9ZCACK$6%b)&"[D@jd$90PE'9MG#""E'`08'&cG'8J)MNL$8CTEQ3
+J)L)08f&fC3d06h"PEL!LBA9NDA3ZE(0d)L!J$8GPEQ9fB3da-L"3EfPZG!e$D'&
+ZCf8J)PjFFbTF+&YF)e`UA5TF+9ac+PaF)L!JG'mJ)P`aA&aFA#)J)#!LG'&R)Je
+'D@jN)#)kFb)J)QFL)#!0!!!%L%GPEQ9fB3da-L"3EfPZG!e6C@aPBh3J3@aX$80
+[F(NJ)MNL$8CTEQ3J)L)J)R4R)Je1CAFJ)RG[FQXL$8YPH5!J)!d08f9d)%aTEQ8
+J9fPNG'M*)!e,CANJ-6!`-$!05f9j)!d04f9ZCACK$6%b)&"[D@jd$90PE'9MG#"
+"E'`08'&cG'8J)MNL$8CTEQ3J)L)J)R3L$90KGQ80$8CTEQ3J*cTc*b!LCd&d)L!
+J$80SB@jRC5!L*9aHA(-UA(*FFbTFA%&eC'Pd4'9`G'KFFbTFHe`UA#TFI9ac+L9
+FAeac+Pab)L"dEb!L)L!J)#!L,@P"G'&R)Jd03fKKEQGP)#)kFcSZ+L9FAL"")'0
+[E@ePER3JCQpb)(4SC5"cD(*eEQYPEL"YB@0bEb"QD@aPA$TFFbSPAb)JG'mJ)#!
+J)#!J)L)J)#!J)LeTG'&R)L!03fKKEQGP)#*FG#)JG'mJ)#)J)#!L)#!J)#*dB@F
+L)!e$D'&ZCf8J)#*HA(-U*59EA&jIA5SZ+L)JG'mJ)L)J)#!LG'&R)Jd03fKKEQG
+P)#!LAP`SA(-U*9`T)bS[A&iZ+Pab)L"dEb!L)L!J)#*dB@FL$80SB@jRC5!J)Pj
+F+&ac+L9F+5-U,beFAL)JG'mJ)P`a)L!J)#*dB@FL$80SB@jRC5!J)L8M+LmYAea
+c+L3L)(4[)#)P)L!J)#*dB@FL$80SB@jRC5!LA#KHA(-UA&aR,9`T4#YF+'9QA(-
+UA&aF+5)JG'mJ)#*F-@4F-L)J)#!J)LeTG'&R)L!03fKKEQGP)#*F+&jFFbTFA'F
+YA#P-A#KPG&ac+PaFA#NL)(4[)#!LA$&XA$)L)#!J)#)YDA4KCb)J$80SB@jRC5!
+LA#KHA(-UA&aF+8CF+'pZG&ac+PaFA#NL)(4[)#!LA$&QA$)L)#!J)#)YDA4KCb)
+J$80SB@jRC5!LA#KHA(-UA&aRE'pLB@aFFbTFA&`T4P`SEfjdA(-UA&aF+5)JG'm
+J)#*F-@CF-L)J)#!J)LeTG'&R)L!03fKKEQGP)#*F+&jFFbTFA&`T69`SBA4SBfK
+KFQ4PCPac+PaFA#NL)(4[)#!LA$&YA$)L)#!J)#)YDA4KCb)J$80SB@jRC5!LA#K
+HA(-UA&aRE'pLB@aFFbTFA&`T69`SBA4SBfKKFQ4PCPac+PaFA#NL)(4[)#!LA$&
+YA$)L)#!J)#)YDA4KCb)J$80SB@jRC5!LA#KHA(-UA&aF+8jF+'9hFhPYBQpXA(-
+UA&aF+5)JG'mJ)#*F-@jF-L)J)#!J)LeTG'&R)L!03fKKEQGP)#*F+&jFFbTFA'G
+XEf*KE&ac+PaFA#P1A#KPGh0jE@*[E&ac+PaFA#NL)(4[)#!LA$&ZA$)L)#!J)#)
+YDA4KCb)J$3e'D@jN)#)kFb)J)QFL$80SB@jRC5!LAPac+Pab)L!JG'mJ)#*FFL)
+J)#!L3A4KCb)03fKKEQGP)#*FFPabA()V)L!JG'mJ)#*FFPab)L!J)#*"G'&R)Jd
+08f&fC5""FmN05f9j)'peG("eG!e,CANJ$3d0!!!#0NCTEQ3J)MTc)L!LCb)J)!e
+$D'&ZCf8J)#*FFPab)L"dEb!LA(*FFVBL)#!J)R4KCb)03fKKEQGP)#!LYLUT1PY
+H[lDT[9dU[9ab)L"dEb!LYL)J)#!L,@PdB@FL$80SB@jRC5!J)MSm@lffA9ab+cS
+q@ekfA5)JG'mJ)PabYL)J)#!L,@PdB@FL$80SB@jRC5!J)Vmk@ekf[leG+VdL)(4
+[)#+r[5)J)#!L,@PdB@FL$80SB@jRC5!J)VBV1PYHYVqpA5Ur)L"dEb!LYVmL)#!
+J)LeTG'&R)Je$D'&ZCf8J)#*HYLUr1PYHYVqpA5UpYLeFFL)JG'mJ)VBL)#!J)Le
+TG'&R)Je$D'&ZCf8J)#*HYLUpYLeFFL)J)#+f)L!J)#*dB@FL$80SB@jRC5!J)Vm
+L)#!L[bSU8eP19%&B)%958Np5+LSL)#!J)LeTG'&R)Je$D'&ZCf8J)#*FFP`SYLT
+FFP`T+b)JG'mJ)PabA(+f)L!J)#*dB@FL$80SB@jRC5!J)VBV)L!J)VBL)#!J)Le
+TG'&R)Je$D'&ZCf8J)#+f+Vff+L)J)#+p)L!J)#)YDA4KCb)03fKKEQGP)#!L[9a
+b,EdU)L!J)VdL)#!J)LeTG'&R)JdP*3e$D'&ZCf8J)#+f+UNZ+Pab)L!J)VBL)#!
+J)LeTG'&R)JdP3fKKEQGP)#!LYL)J)#)P)L!J)#)YDA4KCb)0*80SB@jRC5!J)Pk
+f+Vff+L)J)#)P)L!J)#)YDA4KCb)0!!!!Sd0[F(NJ)MFL)#*ESU1dekDTA5XL$8p
+`C@iJ)Q&eC'Pd,QacG#)04QPZC#!L1MaF+PaFA&aEAPacA5XL)#)Y3@Gd9#)03fp
+`H5!L1#)J$80[F(NJ)MNL)#)k2PYH35eDB5ekA5)J)!e2F'9Z)#*hEh*V)Je$D'&
+ZCf8J*ea$0ea$1&a$15FJ)(4[)#+r)L!J)LeT3@&RG#)0Fh4TCfeKG'PkC3d!!!!
+Y3fKKEQGP)#!LYLUr1PYHA,Dr[9dU[EBYA()L)(4[)#+f)L!J)#)YDA4KCb)0!!!
+"i8p`C@iJ)RG[FQXL$8CTEQ3J)MTc)L!LCb)J)!d03fKKEQGP)#!LA(+f+PabYLS
+L)(4[)#*FFPabYL)J)#!L,@PdB@FL$80SB@jRC5!J)MSm@lffA9ab+cSq@ekfA5)
+JG'mJ)PabYL)J)#!L,@PdB@FL$80SB@jRC5!J)Vmk@ekf[leG+VdL)(4[)#+r[5)
+J)#!L,@PdB@FL$80SB@jRC5!J)VBV1PYHYVqpA5Ur)L"dEb!LYVmL)#!J)LeTG'&
+R)Je$D'&ZCf8J)#+f+Vmk@ekf[leG+Vff+Pab)L"dEb!LYL)J)#!L,@PdB@FL$80
+SB@jRC5!J)Pkf+Vff+Pab)L!J)VBL)#!J)LeTG'&R)Je$D'&ZCf8J)#+r)L!J)Vm
+U+P0C6P4"@#"&8P*28LSU)L!J)#)YDA4KCb)03fKKEQGP)#!LA(*F+,BUA(*F+5X
+L)(4[)#*FFPabYL)J)#!L,@PdB@FL$80SB@jRC5!J)VBV)L!J)VBL)#!J)LeTG'&
+R)Je$D'&ZCf8J)#+f+Vff+L)J)#+p)L!J)#)YDA4KCb)03fKKEQGP)#!L[9ab,Ed
+L)#!L[5)J)#!L,@PdB@FL$3e2F'9Z)#*KG@4TG#jXFh3L$8CTEQ3J)MTc)L!LCb)
+J)!d!!!4)6h"PEL!LGfpbDb)0$80SB@jRC5!J)U+L)L"dEb!L)&aFCfa[BQ&XA&a
+NC@BJ)L!J)#)YDA4KCb)03fKKEQGP)#!LSL)JG'mJ)L"FA'4PCL!L)#!J)LeTG'&
+R)Je$D'&ZCf8J)#+dY#)JG'mJ)L"FA'GXEf*KE&aFE'9d)#)J)#!L,@PdB@FL$80
+SB@jRC5!J)V3L)(4[)#)JA&aXCA3J)L!J)#)YDA4KCb)03fKKEQGP)#!LSk-L)(4
+[)#)JA&aRE'pLB@aFA'C[ER3J)L!J)#)YDA4KCb)03fKKEQGP)#!LSb)JG'mJ)L"
+FA'C[ER3J)L!J)#)YDA4KCb)03fKKEQGP)#!LepFL)(4[)#)JA&aRE'pLB@aFA'e
+KG'KMD'&bC'9Q)#)J)#!L,@PdB@FL$80SB@jRC5!J)YFL)(4[)#)JA&aYBA4SBfK
+KFQ4PCL!L)#!J)LeTG'&R)Je$D'&ZCf8J)#+Q)L"dEb!L)&aFEQ9hFhPYBQpX)#)
+J)#!L,@PdB@FL$80SB@jRC5!J)UNZ+Pab)L"dEb!L)L!J)#)YDA4KCb)03fKKEQG
+P)#!LYL)JG'mJ)L)J)#!L,@PdB@FL$80SB@jRC5!J)PkpA()L)(4[)#)L)#!J)Le
+TG'&R)Je$D'&ZCf8J)#+p)L"dEb!L*5)J)#!L,@PdB@FL$80SB@jRC5!J)PaF8f0
+bDA"dFf0bDA"dCQpZG#)JG'mJ)PaFFf0bDA"dFf0bDA"dCQpZG#)J)#!L,@PdB@F
+L$80SB@jRC5!J)PaF8f0bDA"dCQpZG#)JG'mJ)PaFFf0bDA"dCQpZG#)J)#!L,@P
+dB@FL$80SB@jRC5!J)PaF9'9iG&YQA@pZG#)JG'mJ)PaFG'9iG'C[ER3L)#!J)Le
+TG'&R)Je$D'&ZCf8J)#*FA&0VCAGMD'&b)L"dEb!LA&acDf9hBfKKFL)J)#!L,@P
+dB@FL$3e$D'&ZCf8J)#*F+#8M+P`T)e`S@em[APeF+5)JG'mJ)P`aA$)L)#!J)Le
+TG'&R)Je$D'&ZCf8J)#)P)b3L)(4[)#)L)#!J)LeTG'&R)Je$D'&ZCf8J)#*FA&`
+S4#YF+84PCL)JG'mJ)PaFA$&PCL)J)#!L,@PdB@FL$80SB@jRC5!J)PaFA#K'+e`
+T4QpZG#)JG'mJ)PaFA$&[ER3L)#!J)LeTG'&R)Jd06h"PEL!LBA9NDA3ZE(0d)Je
+$D'&ZCf8J)#*FA&aF)L"dEb!LA&`L)#!J)LeTG'&R)Je$D'&ZCf8J)#*F+PaF)L"
+dEb!L)eaF)L!J)#)YDA4KCb)03fKKEQGP)#!LAP`S)bTF+9`U)e`S)bTF+5)JG'm
+J)P`a)e`UA$)L)#!J)#)YDA4KCb)0$8p`C@iJ)RG[FQXL$90PG#"-D@jP)&GTC(4
+Sb5!05f9j)$%`-$!`$8YPH5!0$90KGQ8J3A2*$8YPH5"[GA4`GA30$3d0$3d0$3!
+!!&"NC@CcG(*TF("bCA!0C'9QFh4bDA"SC@&N$A0dD@GYBA4THQ80C'9QFh4bDA"
+`CA)0*59NC@CcG(*TF(4KD@`0C'9QFh4bDA"dD@4j$3d0$3!!!cK2F'9Z)#*hEh*
+V)Jd03fKKEQGP)#*FG#)JG'mJ)#)J)#!L)#!J)#*dB@FL)!e$D'&ZCf8J)#*HA(-
+U*59FAPmk,LSL)(4[)#)L)#!J)R4KCb)0$80SB@jRC5!J)PjFFbSPA&iL)(4[)#+
+f[b)J)#!LG'&R)Je$D'&ZCf8J)#)P,beIA(-U*#)JG'mJ)VdL)#!J)R4KCb)03fK
+KEQGP)#!LAPac+ldL)(4[)#+p)L!J)#*dB@FL$80SB@jRC5!LAPac+L8[A&iL)(4
+[)#!LYUNL)#!J)#*dB@FL)!e$D'&ZCf8J)PjFFbTFA%4PCPac+L)JG'mJ)#+L)L!
+J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA'G%C@CFFbSL)(4[)#!LSU)L)#!J)#)
+YDA4KCb)J$80SB@jRC5!LAPac+PaFCfa[BQ&XA(-UA&a%C@CFFbSL)(4[)#!LSU)
+L)#!J)#)YDA4KCb)J$80SB@jRC5!LAPac+PaF6'9dA(-U)L"dEb!J)V3L)#!J)#*
+dB@FL)!e$D'&ZCf8J)PjFFbTFA'G-CA4FFbSL)(4[)#!LY,3L)#!J)#*dB@FL)!e
+$D'&ZCf8J)PjFFbTFA'GXEf*KE&ac+PaF6'9dA(-U)L"dEb!J)V5d)L!J)#!L,@P
+dB@FL)!e$D'&ZCf8J)PjFFbTFA%C[ER4FFbSL)(4[)#!LSb)J)#!J)LeTG'&R)L!
+03fKKEQGP)#*HA(-UA&aRE'pLB@aFFbTFA%C[ER4FFbSL)(4[)#!LSk-L)#!J)#)
+YDA4KCb)J$80SB@jRC5!LAPac+PaF6@&dD'0SBA*NC@CFFbSL)(4[)#!Leb)J)#!
+J)LeTG'&R)L!03fKKEQGP)#*HA(-UA&aRE'pLB@aFFbTFA%eKG'KMD'&bC'9QA(-
+U)L"dEb!J)YIA)L!J)#!L,@PdB@FL)!e$D'&ZCf8J)PjFFbTFA%jPGh0jE@*[E&a
+c+L)JG'mJ)#+Q)L!J)#!L,@PdB@FL)!d03fKKEQGP)#!LA(-UA#KFFPac+P`T+Pa
+bA(-UA()L)(4[)#*FFPabYL)J)#!LG'&R)Jd04QPZC#!L1R-L)#!LG'FL)#!0$3!
+!#9)J8'&bG#"[CL"dD'8J6f0MB@dJGA4TE'PdH5i0)%aKGA*PER3J8fPPBQ9ZE@&
+ZEMaXBh0!G'p`EbjYBA4S,R8YF(0eC#jQFMi0)%eKFh4PFL"`Eh0dD@jR)'PZ)$%
+j168X)'CdF#"QG(!ZE@&dD#je,A"cG@3ZCR)0$8&eCh9cG#!a16Ne)(CPFR0TEfi
+0$5!U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU$5!U+LSU+LS0)#SU+LSU+L!J)#!J)%4PCP0dFQP`,9&94840,80YC(-J5'9
+XF!dJ+LSU+LSU$5!U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU+LSU+LSU+LSU$3dJ8&958%p645"24L"85%9645"038056be$6de038j%8bi
+0$5!J)#!J)&4SC5"YB@PZ)("eFR"[Ff8JDA-JG'mJGA0P)'%JCQPXC5!LBA9NDA3
+ZE(0d)L"NCA*TGQ9N)'CbEfd0BA9NDA3ZG'9i,#"KEQ3JB5"8C9JJE@&MFQmJCQP
+XC5`JH#e[Bf-ZFh4j)(0KH5`JD@iJG'KP)#*2Bf0KE5)0CQpbE@&d)#KNC@CTEQ9
+N)'PZ)'pMBf&Y,R0`BbNJG'mJC'9bDACP)'%JEQ9h)(0TEA"XD@CTC@3J)LjdCAJ
+L$@eKBh*[)'CTE'8JD@iJGfKTBfJJFf9XC@0dC@3JG@jhB@jdC@3JE@&dCA*TB@`
+JDA-JFh9`F(*PFh0PC#i09'KTFb"YBA4PFQPKE#"TFb"NCA0TCfjKG'9N)'*j)#*
+KG@4TG#jXFh3L)'PZ)'0[EQTeEQ0dD@pZ)(GTG'J06f0MB@dJFh4bG@0dGA*TEQF
+JEfBJG'KP)#"i,@pMBbjcG(NJ9'9B)'eKBh*[)'CTE'8X)(GSD@0S$@PZGQpXGQ9
+c)#9H,#!PAb`JA%4PCL`JA%aPG#`JA'G%C@BX)&aR6'9d,#"F4QpZG#`JB@jN)(0
+[E@80Eh4SCA*c,L!J9'KP)(9cCA)JE@&MFQmJ)#SU+Q4PCR0dFQP`)'G[GQ9bER-
+JG'KTFb"QG@jMG'P[ELi0$5!J)#!J)&4SC5"cC@0[EQ4KFRNJB@jN)(9ZFQ9XBA4
+PC#"`GA*`Eh0P)'Pc)(4[)(*PE@pfC5"2Bf0KE3eQEh*YBA4dD@jR,L!J9'KP)'e
+KBh*[)#SUEf0M,A4[,A4PH#!JCfpfCA*ZFb"dD'Pc)'CeEQ0dD@pZ,Jd0$5"%59*
+&3e4*6dj6)%C28L"98d8Z$3dJ)#!J)#!J8Q9KC#"dD'8JCQpXE'phD@jR)'0KFQ9
+QG@aXH5"KEQ3JG'KPEL"`FQ&MG'PMC5"[EL"[EQ8JEfBJG'KP$@PZBfaeC'9N)(G
+[FQYPC#"PH'&YF'aPFbi0$5!J)#!J)#"3GA3JG'pRCA4SCA)JD@jdEb"[EQ8JCQp
+XC'9b)'%JBfp`H5"[CL"%C@C6G(*TF#e4989%65e$E@4c$@eKBh*[)'CTE'8X)(4
+SC5"QD@aP)'&eC'Pd,QacG#`JB@jN)(4SC5"YB@0bEb"QD@aP)(4[)'*P)(0TEA"
+XD@CTC@3Z$3dJ)#!J)#!J6h"PEL"dD'8J4'9Q8h4bDA!Y899&4%dY3feNFb"QD@a
+P,L!J5@BJDA3JDA-JEQpd)(CTFfPLE'8X$@aKG@jMD#"4989%65"eFfPZCb"TG#i
+0$5!J)#!J)#"2F'9Z)(4SC5"8C9JJE@&MFQmJCQPXC5"eEQ4PFL"4989%65"KEQ3
+J+Q&MG'PfBA4P+L"TG(-0GfPZC'ph,L"8D'9Z)'aKG@jMD#"dD'8JE@&MFQmJ+LS
+UC'9QFh4bDA!JCR*[E5"dD'8J899&4%d0E@&MFQpc)'ePER8Z$3dJ)#!J)#!J3@i
+JBA9NDA3ZE(0d)(GTEQ4[Gb!JGfPXE#"ZEhFJEh"PEL"KEQ3JEA9MD#"KBh4TGQP
+dH5"hD@aX$@*P)(0PC@iZ)%CTEQ&XE(NX)'%JBfaPB@jPC#eeF#"fCA*cD@pZ)'p
+Q)(4SC5!L,R4PH#)JE@&MFQmJCQPXC3ehD@aX)'&`F'9KFL"TEL"K)(GTEQ4[Gb"
+MB@aXC@3J)QpeG("eG#)Z$3dJ)#!J)#!J5'phCACPFL`J)#*[GA4`GA3L)'eKH5"
+ZEh3JBQ8J+Q0[EA"XCA4PE(NU)'0XC@&ZC@3JGA!Z$8PZ)(4SBA3JBf&cC5"cEfe
+P)'pQ)(4SC5"cG(*eBh4eFQPZCb"cH@eLEfac)'ePER4TEfjPC#"KBQpfC3ehD@a
+X)(GTE'`JBQ8JGQPcD@*XC5"TEL"TG#`JB@jN)'&cG'9bDA0VFb"hD@aX)'*P)(0
+dD@aX)(CTFfPLE'8JD@iJG'KP$@aTEQ8J)%P849*"9%P26N0298j849)J)'aTEQ8
+JBA3JG'KP)'9ZC#"[CL!LBA9NDA3ZE(0d)LiJ)%PZ)(4SDA-0Bf&cC5`JFR9Z)#S
+U+Q4PCR0dFQP`)'&RB@PZ)'pZ)#*[GA4`GA3L)(4[)("bEf4eBf8J)QpeG("eG$)
+L,L""F`eZC@0PFh0KFRNX)'PdCA*KG'8JG@jdD@`JB@aX)'&cG'9bDA0VFb"KFQ8
+JCfpZC5"QFQpY)(4SDA-JBfpeER4PFJeXD@jP,L!J9'KbC@8JFR9ZFb"[CL!U+LT
+NC@CcG(*TF#"TFb"dD'8JE@&iD@eeE5"dD'&d)'KKFb"`FQpfC@30GA0PCR9X)'P
+Z)$%j168Z$3d08N9039*,8biJ)#"2EQaj)(4SC5!J+LSUD'9XF#`J)#SU+Q4PCR0
+dFQP`,#!JB@jN)#!U+QpMBbedEbedCAJ0E@&MFQpc)'CbEfdJG'KP)&&94840)'e
+KBh*[Fb"YC@je)(0SEh9XC#"LC5"XBA9ZBfKPC#!JBRNJG'KP$A9cCA)Z)#"8D'8
+JEh4SCA*c)'&bC5"cG@*bEh9dD@jPFbi0$5!J)#!J)#"6C@8JEf0MB@dZFh"M)'C
+[FL"QGA*dD'9b)'4PG'&TE(-X)'&ZC#"[Bf0KE5j`G@)JCQpb)'&Z$@pfCA*fD@9
+h)'pQ)(4SC5"2Bf0KE5"eG'PXDA4j,Jd0$9"28e0*3Na&)&"56d*-48e6,LiZ,LK
+`E'9KFf8JFQ9`Eh*d)'*eCh-JG'mJG'mJBA9dD'pb+3d0$3d0!!!+)L"3BA*d)'p
+Q)(4SC5"2Bf0KE5"eG'PXDA4j,JdJ6'&eFQ9ZG#"6D@9LC@jYB@jZ2'aMFd"dEh"
+[,QeKG'JZG5e`Fh9N,QCb2JdJ6@&cG'9b)("[Fh4TEQFJD@iJ-6Nj05`JCR4`)'C
+dF#jYBA4S,R8YF(0eC#jQFJd03A9RGA0d)$%j168JGQ9bFfP[EJd0)#SU+LSU+LS
+U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS0)#SU+LS
+U+JdJ+LSU+LSU)#!J)#!J4'9Q8h4bDA!Y899&4%dY3feNFb")C@a`$5!U+LSU+LS
+0)#SU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LS0$5"399*36e0&)%p')&4)490&)%e"3e*2,80268e"6N46,Jd0)#!J)#!J9'K
+P)'eKD@iJF(9bF'pcC5"TFb"dEb"eFf8JB5"QD@aP)#*KG@4TG#jXFh3L)'4PFQP
+fC@3JCR*[E3eKG@4TG#jdCAJX)'&ZC#"K)&4P@#"YB@0bEb"QD@aP,#"i,@pMBbj
+cG(NJFf&j,#"TEL"dD'8J)NpMBf&Y)JeQEh*YBA3J+'4PCQPZC@3JD@iJEf0MB@d
+ZFh"M+5"dEb"NCA*TGQ8JB5"ZCAFJFfPYF'aTCQPPC#!L,R4PH#)0E@&MFQmJCQP
+XC5"TEL"hD'PMD#"cC@aPBh4PC#"eERGKER4PC#"YBA4PFQPKE#"TFb"cGA"`FQ9
+cFf9N,Je8D'Pc)'eKG'9bD@&X)'Pc)'4PFfPREQ&dC@3JBRNJ)Q&eC'Pd,QacG#)
+JD@iJBfpZDR9ZBh4TEfiJGfPdD!e2Bf0KE5"cG(*eBh4eFQPZCb"[CL"dD'8J)(J
+YEf0M,R0dH5"8C9JJE@&MFQmJCQPXC5`JGfKTBfJ0D@jfEfafCA-J*9iX)#9I,#"
+F4'9Q,#"F6'9d,#"FCd4PCL`JA'G-CA3X)&a'Efjd,#"KEQ3JFfpYC3e[G'KPFR-
+Z)#"8D'8JGA0PFL"YB@0bEb!J+LSUC'9QFh4bDA!JCfpfCA*ZFb"dD'Pc)'CeEQ0
+dD@pZ,Jd0)#!J)#!J9'KP)(0PBfpZC'&bH5"KEQ3JG@jbC@aKG'9N)("eFR"[Ff8
+JDA-JG'mJFQ9YEhCP)%pMBf&Y$@C[FQeKG(4TEQFZ)#"8D'8JE@&MFQmJ+LT[Bf-
+YG'mYG'9i)#"REhCPFQjc)(4SDA-JCR9ZBh4TEfiZ$3d0)%4*8N9$9%P26P-J4Np
+5)&9645i0$5!J)#!J)#"5C@&N)(4SC5"QEfaXEhGTEQFJBf&bC@CeE'aj)'&ZC#"
+dD'9Z)("bB@0dD@0P)'pZ)'pZC5"[CL"dD'80D@jME(9NC@3JGfpbDf9N)'9iB@e
+`E'9c,Jd0)#!J)#!J)&"eG#"dEfGPG'KPFL"TER4[)'pZC5"QEfaNCA)JB5"MEh"
+j)'pQ)%4PCP0dFQP`,9&94840,80YC(-0E@&MFQmJCQPXC5`JG'KP)'CTE'8JBA9
+NDA3ZE(0d,#"KEQ3JG'KP)'eKBh*[)'CTE'8JG'mJBQ8JFfPYF'aTCQPPC#i0$5!
+J)#!J)#"2F'9Z)(4SC5"%C@C6G(*TF#e4989%65e$E@4c)'CTE'8Z)#"*CL"TG#"
+TFb"ZEh3JGQPcD@*XC5`0E'&eEQ0S)&&94840)(9cD@jR)'Pd,Jd0)#!J)#!J)%p
+`C@iJG'KP)&4P@#"YB@0bEb"QD@aP)(9ZC'9b)&&94840)'&ZC#!UB@0dDACKG'8
+U)'PdF`ehD@jNEhFZ)&4SC@iJE'&eEQ0S)(4SC5"YB@0bEb!U+LTNC@CcG(*TF#"
+QFQpY)(4SC5"4989%63eYB@0bEh-JE@9ZG5i0$5!J)#!J)#""EL"KG@4TG#jXFh3
+JGfPZC'ph)#"hD@aX)'j[Gb"[F'9Z)'&ZC#"YG@0S)'&MG'PfDA4j)(GTE'`0BQ8
+JFf9PELiJ4QPZB@aXH5`JB5"ME'9KEQ9N,A9`)(CPFR0TEfiJEfBJG'KP)#)ZG'9
+i)L"YB@0bEb"QD@aP$AGTE'`JBA"`C@&b)'PZ)'%JGfPZC'ph)'0KE'aPC#!LEh9
+dF(9d)Li0$5!J)#!J)#")EhGPGQ9b,#!J)QpeG("eG#)JE@&j)'j[G#"LC5!UBfp
+YF'aPG'9XH5SJBfaPB@jPC#"eF#iJ5@i0G'KKG#"MBA0P)(0[E@8JEfBJG'KP)(0
+dFR9MG(9bD@jR)(0jE@*[E(-JE@9ZG'P[EQ9N)'&LEhCP)(GTE'`0GfPXE#"LC5"
+fDA0TBQaP)'PZ)'Pd,#"KEQ3JBA0dCA*TFfYc)(GTE'`JBQ8JFh4TE'`JGQPcD@*
+XC5"TEL"dD'8JE'PZC3e*9%95394*6dj$6e919%95)#"XD@jP)'&d)(4SC5"PEQ3
+JEfBJ)Q&eC'Pd,QacG#)Z)#"*EL"dD'Pc)'0KFf8X$A*eEL!U+LTNC@CcG(*TF#"
+KCf&TEL"[EL!LEh9dF(9d)L"dEb"`FQpNG@0P)#*[GA4`GA3b)LiJ3A-0EQ9MCA0
+cBA*j,#"TG'9bBA4P)(9ZG'PX)'&XE#"KFh4PFQPcDh-JBA*P)'G[EQ8JCR*[E5"
+dD'Pc)'0[G@jdCA)0E'PZC5iJ)&4SFQ9P)(*eER-JEfBJ+LSUC'9QFh4bDA!JDA-
+JG'KP)'eKH'PYG@dJG'KKG#"SBA-JF(*[GQ9N$A9cC@CeE#"TEL!a16Ne,Jd0$9*
+&68&55e-Z$3dJ,5dY)%pZE(NJG'KP)#!U+LTSC@a`,#!J+LSUC'9QFh4bDA!X)#"
+KEQ3J)#SUEf0M,A4[,A4PH#"YB@0bEh-0CR*[E5"dD'8J899&4%dJE@&MFQpc)'e
+PER8JFfK[G@aN)'*P)'aKG@jMD'9N)#"LH5"dD'8JGA0PFLi09'KP)'pdD'9bFb"
+KFQ8JFh9LFQpeG'PZCA-Z$5!Y,5dJ4A*bEh*c)'PZ)(4SC5"2Bf0KE5"cG(*eBh4
+eFQPZCb"TCL"dD'8JE@&MFQmJCQPXC3dJH#e[Bf-ZFh4j)#KcBANT)'*PD@jR)(0
+TEA"XD@CTC@3JE@&j)(GPE'`JFfK[Gb"eF#"dD(*[G@GS$@j[G'PMCA-J+LT6@8j
+839JJ49*56e)U+L"TEL"dD'8JEh9dF(9d)'CTE'8Z)#"*EL"dD'Pc)'0KFf8JEQp
+dD@Cj$A4SC5"`FQpRFQ&YE@9b)'pQ)(JYEf0M,R0dH5i0)#dY,5"6C@8JEf0MB@d
+ZFh"M)'C[FL"QGA*dD'9b)'4PG'&TE(-X)'&ZC#"[Bf0KE5j`G@)JCQpb)'&Z$@p
+fCA*fD@9h)'pQ)(4SC5"2Bf0KE5"eG'PXDA4j,Jd0$9"28e0*3Na&)&"56d*-48e
+6,LiZ,LK`E'9KFf8JFQ9`Eh*d)'*eCh-JG'mJG'mJBA9dD'pb+3d0$3d0!!!"!!!
+!*r%!!#Ea!!!"BJ!-0!`-)!!!!"`!`J!!88e"3`!-!!SYEJ!!)!!313!--p`"r!!
+0)!!*Y!!--q"!#`!C)!!,Q3!--q4'D!!Q)!!2j3!--qJfN3!b)!!")!!--qadJJ!
+r)!!)h!!--r"Y83"+)!!!!!!--r4`e3"6)!!Fb`!-0!"HN3"I)!!!4!!--pKD#J#
+')!!#&J!-T2!3rJ"X)!!*J`!-T3"Jr`"i)!!'SJ!-T1JZU3#6)!!6G3!-T13-C'9
+QFh4bDA"SC@&N#f4PCR0dFQP`F'9b$'4PCR0dFQP`G'PNH3XU+LTNC@CcG(*TF!a
+NC@CcG(*TF("bCA!+Fh4TCfeKG'PkC3JU+LSUD'9XF!YNC@CcG(*TF'KXF!aNC@C
+cG(*TF(4KD@`,Fh0dD@GYBA4THQ80C'4PCR0dFQP`G'&TE!`U+QpMBbedEbedCAJ
+-C'9QFh4bDA!ZD'a`$3i:
diff --git a/macros/generic/occam/Euro92.sty b/macros/generic/occam/Euro92.sty
new file mode 100644
index 0000000000..555cf8fee7
--- /dev/null
+++ b/macros/generic/occam/Euro92.sty
@@ -0,0 +1,296 @@
+
+
+% Call this file euro92.sty and use it in LaTeX file as
+% \documentstyle[euro92]{article}
+% Also specify
+% \titlehead{Short title for paper}
+% \paperhead{Author Name(s)}
+% The fields of \maketitle are further redefined: \date is eliminated and
+% \affiliation is added.
+%
+% Richard Furuta December 9, 1987
+% (adapte pour les "Cahiers GUTenberg" - Ph Louarn 88-89)
+% (adaptation for EuroTeX '92 Prague conference - Petr Sojka
+% <sojka@aci.cvut.cs>)
+%
+
+% hyphenation commands (For MLTeX)
+\ifx\fhyph\undefined\relax\else % si \fhyph est connu, on suppose \ehyph connu
+ \ifx\enhyph\undefined\let\enhyph=\ehyph\fi
+ \ifx\frhyph\undefined\let\frhyph=\fhyph\fi
+\fi
+
+\def\NoC#1{\gdef\N@C{#1}}
+
+\def\DateC#1{\gdef\D@teC{#1}}
+
+% size requirements
+\def\@normalsize{\@setsize\normalsize{14pt}\xipt\@xipt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+% baseline for section is set at 12 because I need 13 and can't get it
+% easily another way (see redefinition of section, etc.)
+\def\sectsize{\@setsize\sectsize{21pt}\xivpt\@xivpt} % for section heads
+\def\subsectsize{\@setsize\subsectsize{14pt}\xipt\@xipt} % for section heads
+\def\abstsize{\@setsize\abstsize{11pt}\viiipt\@viiipt} % for abstract
+\def\captsize{\@setsize\captsize{12pt}\xpt\@xpt} % for captions
+\def\titlesize{\@setsize\titlesize{25pt}\xxpt\@xxpt} % title large
+\def\authsize{\@setsize\authsize{14pt}\xipt\@xipt} % author size
+\def\affilsize{\@setsize\affilsize{12pt}\xpt\@xpt} % affiliation
+
+% - redefine the citation style to put spaces after the commas
+% redefine the citation style to put spaces after the commas
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{, }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+% new field for the title
+\def\affiliation#1{\gdef\@affiliation{#1}}
+
+%title's spacing
+\def\titlesp{\list{}{\leftmargin0pc}\item[]}
+\let\endtitlesp=\endlist
+
+% title needs adjusting, no date in title
+\def\@maketitle{\newpage
+ \null
+ \vspace*{-28pt}
+ \begin{titlesp}
+ {\titlesize \@title \par}
+ \vskip 8pt % Vertical space after title. 8pt
+ \hrule % one point rule
+ \vskip 14pt % 14 points below rule (adjusted for baseline)
+ {\authsize \@author \par}
+% there should be 18 pts between author and affiliation baselines
+ \vskip 6pt % Vertical space after author. 18pt - 6pt
+ {\affilsize\it \@affiliation \par}
+\end{titlesp}
+ \par
+ \vskip 16pt} % Vertical space after title. 26pt - 10pt
+
+\def\maketitle{\par
+\begingroup
+\def\thefootnote{\fnsymbol{footnote}}
+\def\@makefnmark{\hbox
+to 0pt{$^{\@thefnmark}$\hss}}
+\newpage \global\@topnum\z@ \@maketitle \thispagestyle{titre}\@thanks
+\endgroup
+\setcounter{footnote}{0}
+\let\maketitle\relax
+\let\@maketitle\relax
+\gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\abstract{\small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\rm\ifx\enhyph\undefined\relax\else\enhyph\fi}
+\def\endabstract{\endquotation\normalsize\rm}
+
+\def\resume#1{\small
+\begin{center}
+{\bf #1\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\em\ifx\frhyph\undefined\relax\else\frhyph\fi}
+\def\endresume{\endquotation\normalsize\ifx\enhyph\undefined\relax\else\enhyph\f
+i}
+
+\def\keywords{\small\quotation
+\noindent\rm {\bf Key words:\ }}
+\def\endkeywords{\endquotation\normalsize}
+
+% modify the sectioning commands as is appropriate for style. Adjusting
+% for baselines again to get 35 pt above and 15 pt below
+\def\section{\@startsection {section}{1}{\z@}{-12pt plus -2pt minus
+-2pt}{10pt plus 1pt minus 1pt}{\sectsize\raggedright}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-10pt plus -2pt minus
+-1pt}{8pt plus 1pt minus 1pt}{\subsectsize\bf\raggedright}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-8pt plus
+-2pt minus -1pt}{6pt plus 1pt minus 1 pt}{\subsectsize\it\raggedright}}
+\def\paragraph{\@startsection
+{paragraph}{4}{\z@}{6pt plus 2pt minus 2pt}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+{subparagraph}{4}{\parindent}{6pt plus 2pt minus
+2pt}{-1em}{\normalsize\bf}}
+
+\gdef\thesection{\arabic{section}}
+\gdef\thesubsection{\thesection.\arabic{subsection}}
+\gdef\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\gdef\theparagraph{\thesubsubsection.\arabic{paragraph}}
+\gdef\thesubparagraph{\theparagraph.\arabic{subparagraph}}
+
+% define a new environment for use in setting the abstract
+\def\abst{\list{}{\leftmargin0pc}\abstsize\item[]}
+\def\endabst{\endlist\vskip-7pt}
+
+\def\listelabel{$\bullet$}
+\settowidth{\labelwidth}{\listelabel}
+\def\liste{\list{}{\settowidth{\labelwidth}{\listelabel}
+\leftmargin\labelwidth\advance\leftmargin\labelsep\rightmargin0pt\labelsep0pt
+\itemsep0pt \let\makelabel\listelabel}\small}
+\let\endliste=\endlist
+
+\def\enumeration{\list{{\small \arabic{enumi}.\ }}%
+{\settowidth{\labelwidth}{{\small 1.\ }}
+\leftmargin\labelwidth\advance\leftmargin\labelsep\rightmargin0pt\labelsep0pt
+\itemsep0pt \usecounter{enumi}}\small}
+\let\endenumeration=\endlist
+
+% bibliography stuff
+
+\def\thebibliography#1{\section*{References}%
+\list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+\advance\leftmargin\labelsep\usecounter{enumi}}\small}
+\let\endthebibliography=\endlist \newif\if@restonecol
+
+% modifying the format of the footnote display
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+% figure spacings
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\textfloatsep 13pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\@maxsep 13pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \captsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\long\def\@makecaption#1#2{
+ \vskip 1pt % almost no skip at all
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% figure placement modifications
+\setcounter{topnumber}{1}
+\def\bottomfraction{0.01}
+
+% running headers
+\def\titlehead#1{\gdef\@titlehead{#1}}
+\def\authorhead#1{\gdef\@authorhead{#1}}
+
+% pagestyle
+\def\ps@gut{\let\@mkboth\@gobbletwo%
+ \def\@evenhead{\normalsize\it{%
+\ifx\@authorhead\u@ndefined\@author\else\@authorhead\fi}\hfil}%
+ \def\@oddfoot{\rm\hfil\thepage}\def\@oddhead{\normalsize\it\hfil{%
+\ifx\@titlehead\u@ndefined\@title\else\@titlehead\fi}}%
+ \def\@evenfoot{\rm\thepage\hfil}}
+
+\def\ps@titre{\let\@mkboth\@gobbletwo%
+ \def\@evenhead{\hfill{\footnotesize Euro\TeX\ \N@C{} --- \D@teC}}%
+ \def\@oddhead{{\footnotesize Euro\TeX\ \N@C{} --- \D@teC}\hfill}%
+ \def\@oddfoot{\rm\hfil\thepage}%
+ \def\@evenfoot{\rm\thepage\hfil}}
+
+\ds@twoside
+
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}
+ \vskip 10pt \hbox to\textwidth{\hrulefill}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+% heading needs a bar
+
+\oddsidemargin3mm \evensidemargin36mm
+
+\marginparwidth 2cm \marginparsep 10pt
+\topmargin 3cm \headheight 1cm \headsep 14pt \footheight .3cm \footskip
+1cm
+
+\textheight 546pt \textwidth12.7cm \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 1.1ex plus 1pt \parindent 1.5em \topsep 10pt plus 4pt minus 6pt
+\partopsep 3pt plus 2pt minus 2pt \itemsep 5pt plus 2.5pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\hfuzz2pt
+\tolerance3500
+\pretolerance3500
+\hbadness10000
+\hyphenpenalty50
+\exhyphenpenalty50
+
+%\sloppy
+\frenchspacing
+
+\pagestyle{gut}
+\thispagestyle{titre}
+
+\def\at{{\char '100}}
+\def\boi{{\tt\char '134}}
+\def\circonflexe{{\char '136}}
+\def\tild{{\char '176}}
+\def\degre{{\char '027}}
+%% remove the 3 following lines if you don't the guill font.
+%\font\trom=guill
+%\def\oguill{{\trom A}\nobreak\mbox{\hglue.25em}\nobreak}
+%\def\fguill{\nobreak\mbox{\hglue.25em}\nobreak{\trom B}\,}
+
+\NoC{92}
+\DateC{September 14--18, Prague, Czechoslovakia}
+\let\twocolumn\relax % Don't use twocolumn, please
+\ifx\enhyph\undefined\relax\else\enhyph\fi
+
+
+
+
diff --git a/macros/generic/occam/Occam94-old/DefStrip-QEDMacros.hqx b/macros/generic/occam/Occam94-old/DefStrip-QEDMacros.hqx
new file mode 100644
index 0000000000..2473008235
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/DefStrip-QEDMacros.hqx
@@ -0,0 +1,125 @@
+(This file must be converted with BinHex 4.0)
+:%N4PCP0dFQP`,9&&4%eKBh*[F`"468&$889%-3%!!!!!!!!!&[UY5J!!!!!"!!!
+!&H-!!"6M!!!"&`!!m#,rr`!!*$`!!!!!m$!!*c!!+"S!!!!!!!$rrb!!%N4PCP0
+dFQP`,9&&4%eKBh*[Fdd#!!!!88e"3e&&4$%!!&&03804483a!3!!d!!Z!!!!!!!
+!!!!!!!!!!!!!!!!!UM%C(`!!!!!!!"EkYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
+YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
+YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
+YYYYYYYYYYYYYYJ!!!%"NC@CcG(*TF("bCA!0C'9QFh4bDA"SC@&N$A0dD@GYBA4
+THQ80C'9QFh4bDA"`CA)0C'9QFh4bDA"dD@4j$3d0!!!!3%9NDA3J6@&MFQr*$8Y
+PH5"NC@CcG(*TF'KXF!e,CANJ$3e$E'PMDb!a-M3X)#dh$80XD@0V)$%b0#`J,6F
+0$3d!!!%"4f9ZCACK$6%b)&"[D@jd$90PE'9MG#""E'`03fp`H5!L15)04QPZC#!
+L,L)06Q9h)#*hEh*V)Je,CANJ)#!0$90PG#"-D@jP)&GTC(4Sb3e,CANJ$3e(C@j
+PGQ%0-6)J8'pTER308f9XC@0d)%&XE!e3BA0dC5!L15)04QPZC#!L)Je6BACP$3e
+2F'9Z)#*KG@4TG#jXFh3L)#!04f9ZCACK$6%b)&"[D@jd$80SB@jRC5!LA&`L)#"
+dEb!LA&aFA#)J)#!LG'&R)Je$D'&ZCf8J)PY",9TK,ATG)L!JG'mJ)PaE*PaG)L!
+J)#*dB@FL$8CTEQ3J)MTc)L!LCb)J)!d!!!$F6h"PEL!LBA9NDA3ZE(0d)L!J$80
+[F(NJ)MJL)#)k2PYH35eDB5ekA5)J)!e'D@jN)#)k2&`UA&aFA&Y",9TK,ATF@ea
+GA5XL)#)Y3@Gd9#)03fp`H5!L15)J$8p`C@iJ)RG[FQXL$80SB@jRC5!RA%-jA%-
+i,LUp*b!JG'mJ)#)Q[5!J*58J@eC&8e4*4d8r2edL)#*"B@Gd)Je$D'&ZCf8J*ea
+$19a$1#iU*#FJ)(4[)#!L*Pab)#!P*5"E9N969%P(46mrA5)J)N&KCh3L$@4PCR0
+dFQP`G'&TE!!!!La2F'9Z)#*hEh*V)Jd03fKKEQGP)#!LSU)L)(4[)#)JA&aRE'p
+LB@aFA'4PCL!L)#!J)R4KCb)03fKKEQGP)#!LSL)JG'mJ)L"FA'4PCL!L)#!J)R4
+KCb)03fKKEQGP)#!LY,3L)(4[)#)JA&aRE'pLB@aFA'aPG#!L)#!J)R4KCb)03fK
+KEQGP)#!LY#)JG'mJ)L"FA'aPG#!L)#!J)R4KCb)03fKKEQGP)#!LSk-L)(4[)#)
+JA&aRE'pLB@aFA'C[ER3J)L!J)#*dB@FL$80SB@jRC5!J)U-L)(4[)#)JA&aQEfj
+d)#)J)#!LG'&R)Je$D'&ZCf8J)#,Aeb)JG'mJ)L"FA'GXEf*KE&aFE@&dD'0SBA*
+NC@BJ)L!J)#*dB@FL$80SB@jRC5!J)YFL)(4[)#)JA&aYBA4SBfKKFQ4PCL!L)#!
+J)R4KCb)03fKKEQGP)#!LTL)JG'mJ)L"FA'jPGh0jE@*[E#!L)#!J)R4KCb)03fK
+KEQGP)#!L[5)JG'mJ)L8L)#!J)R4KCb)0$8p`C@iJ)Q&eC'Pd,QacG#)03fKKEQG
+P)#!LA&aFA#)JG'mJ)PaF)L!J)#*dB@FL$80SB@jRC5!J)PYF@eaGA5)JG'mJ)L)
+J)#!LG'&R)Jd06h"PEL!LGfpbDb)08f9d)%aTEQ8J9fPNG'M*)!e,CANJ-6!`-$!
+05f9j)!d08f&fC5""FmN05f9j)'peG("eG!e,CANJ$3d0$3d0$3d0!!!"K8p`C@i
+J)RG[FQXL$8CTEQ3J)MTc)L!LCb)J)!e$D'&ZCf8J)#*FFPab)L"dEb!LA(*FFVB
+L)#!J)R4KCb)03fKKEQGP)#!L1MbpA()V1MjEAVCG)L"dEb!LA(+f)L!J)#*dB@F
+L$80SB@jRC5!J)VBV1PYHYVeG+VmL)(4[)#+r)L!J)#*dB@FL$80SB@jRC5!J)Vm
+k@ekrYVeG+VdL)(4[)#+r[5)J)#!LG'&R)Je$D'&ZCf8J)#*HYLfr1PYHYVqpA5U
+pYLeFFL)JG'mJ)L)J)#!LG'&R)Je$D'&ZCf8J)#*HYLfpYLeFFL)J)#)L)#!J)R4
+KCb)03fKKEQGP)#!L@lpG)L!J)VmU+P0C6P4"@#"&8P*28LSU)L!J)#*dB@FL$80
+SB@jRC5!J)PZfA5)J)#)L)#!J)R4KCb)03fKKEQGP)#!LA#KFFPab+e`T)L"dEb!
+LA(*FFL)J)#!LG'&R)Jd06h"PEL!LBA9NDA3ZE(0d)Je'D@jN)#)kFb)J)QFL)#!
+0!!!!SNp`C@iJ)Q&eC'Pd,QacG#)03fp`H5!L0b)J)PjESU1dekCG+b)03fp`H5!
+L1#)J)MSq@ej",9TK,ATG)L!J$8CTEQ3J)MSmA#TFA&aF@ejFFedV)L!L,8&RG&3
+L$80[F(NJ)MNL)!e2F'9Z)#*hEh*V)Je$D'&ZCf8J*ea$0ea$19a$1#FJ)(4[)#+
+r)L!J)N&KCh3L$A0dD@GYBA4THQ80$3!!!hT2F'9Z)#*hEh*V)Jd03fKKEQGP)#*
+FG#)JG'mJ)#)J)#!L)#!J)#*dB@FL)!e$D'&ZCf8J)#*HA(-U*59FAPmk,LSL)(4
+[)#)L)#!J)R4KCb)0$80SB@jRC5!J)PjFFbSPA&iL)(4[)#+r)L!J)#*dB@FL$80
+SB@jRC5!J)L9IA(-U*#)JG'mJ)VdL)#!J)R4KCb)03fKKEQGP)#*HA(-UA&aE4&e
+EC9eECPeFFbSL)(4[)#!LSL)J)#!J)R4KCb)J$80SB@jRC5!LAPac+PaF@fGG@d4
+G@f9G@fCGA(-U)L"dEb!J)U+L)L!J)#!LG'&R)L!03fKKEQGP)#*HA(-UA&aRE'p
+LB@aFFbTFA&Y%A9YPA9YQA9ac+L)JG'mJ)#+LSL)J)#!J)R4KCb)J$80SB@jRC5!
+LAPac+PaF@daG@f9G@h4GA(-U)L"dEb!J)V3L)#!J)#*dB@FL)!e$D'&ZCf8J)Pj
+FFbTFA&YRA9Y-A9YPA9YdA9ac+L)JG'mJ)#+dY#)J)#!J)R4KCb)J$80SB@jRC5!
+LAPac+PaFCfa[BQ&XA(-UA&aE6&eEC9eEG&eFFbSL)(4[)#!LY,3L)#!J)#*dB@F
+L)!e$D'&ZCf8J)PjFFbTFA&Y'A9Y[A9YZA9YdA9ac+L)JG'mJ)#+M)L!J)#!LG'&
+R)L!03fKKEQGP)#*HA(-UA&aRE'pLB@aFFbTFA&Y'A9Y[A9YZA9YdA9ac+L)JG'm
+J)#+MSb)J)#!J)R4KCb)J$80SB@jRC5!LAPac+PaF@deG@f&G@h4G@fKG@f0G@fK
+G@f&G@h*G@f4G@f9G@fCGA(-U)L"dEb!J)YFL)#!J)#*dB@FL)!e$D'&ZCf8J)Pj
+FFbTFA'GXEf*KE&ac+PaF@deG@f&G@h4G@fKG@f0G@fKG@f&G@h*G@f4G@f9G@fC
+GA(-U)L"dEb!J)YIA)L!J)#!LG'&R)L!03fKKEQGP)#*HA(-UA&aE6PeEC9eEGee
+EFeeEH9eEE9eEBPeEEeeEE&eFFbSL)(4[)#!LTL)J)#!J)R4KCb)J$3e$D'&ZCf8
+J)#*FFbTF+&abA(-UA#NUA(*FFbTFFL)JG'mJ)VCFFPab)L!J)#*dB@FL$3e$D'&
+ZCf8J)#*H[cTEAVeG+Vff,9ab)L"dEb!L)L!J)#*dB@FL$3e'D@jN)#)kFb)J)QF
+L)#!0$3!!"YJJ8'&bG#"[CL"dD'8J6f0MB@dJGA4TE'PdH5iJ$5"-BA9bC@jd)&0
+TC@*PEQeKEQimE'0c3(4[F'mZE@&dD#je,A"cG@3ZCR)q)!dJ6@&cG'9b)("[Fh4
+TEQFJ-6Nj0#`JCR4`)'CdF#jYBA4S,R8YF(0eC#jQFJd0)%TeEQ8J-6Nj0#"KE("
+SB5"fCA*cD@pZ$3dJ+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU+LSU+LSU+LSU+JdJ+LSU+LSU$5!U+LSU+LSJ)#!J)#"%C@C6G(*TF#e4989
+%65e0B@0bEh-J5'9XF!dJ+LSU+LSU$5!U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LS
+U+LSU+LSU+LSU+LSU+LSU+LSU+LSU+LSU$3dJ8&958%p645"24L"85%9645"0380
+56e-Z$3dJ)#!J)#"8D'8JE@&TEL"`GA*`Eh0P)'Pc)(4[)(9cC5"K)'CTE'8J)Q&
+eC'Pd,QacG#)JC'9bDACPC#"QFQpY$@&eC'Pd,R4PH#`JB@jN)'%J9'9B)'eKBh*
+[)'CTE'8X)(JYBA9N,R0dH5"cBANX)'PZ)(4SC3dL6f0MB@dL)'C[FQeKG#!SC'9
+QD@jPC#"TEL"[Bf0KE5jcF'-T)(4[)'4PFQPfC5"K)'jPG`ecD@e`E'PQD@9N)#)
+ZG'9i)L"YB@0bEb"QD@aP)'PZ)(GSD@0S)(0PE'9MG'9N)(9ZGf&ZG'9N)'eKG'9
+bD@&X)'Pc$A0eF("bCA0cC@3Z)&4SDA-JE@&dCA*TB@`JDA-JC'9cD@GZBA4PC#"
+LH5!LBA9NDA3ZE(0d)L"TEJeMEfjUG@jMG'P[EL"hDA4S)'PZG'9bEQ&X)'C[FQe
+KG'PZCb"TERC[E(CTEQFJ*9iX)#9I,#"F4'9Q,#"F6'9d,!eFCd4PCL`JA'G-CA3
+X)&a'Efjd,#"KEQ3JFfpYC5"[G'KPFR-Z)#"8D'8JGA0PFL"YB@0bE`dU+LTNC@C
+cG(*TF#"REhCPFQjc)(4SDA-JCR9ZBh4TEfiZ)#!0$5!J)#!J)&4SC5"cC@0[EQ4
+KFRNJF(9bF'pcC5"TFb"dEb"bC@e[GQ8J6f0MB@dJCQpbE@&dG'PZCbi09'KP)'e
+KBh*[)#SUBA9N,A4[,A4PH#!JCfpfCA*ZFb"dD'Pc)'CeEQ0dD@pZ,Jd0$5"%59*
+&3e4*6dj6)%C28L"98d8Z$3dJ)#!J)#!J8(9d)(4[Cf9dD'9b)'PZG'mJEfjP)'C
+[E'4PFL"K)'0[F(NJEfBJ4'9Q8h4bDA!Y899&4%dY6@&MFQpc$@eKBh*[)'CTE'8
+X)(4SC5"QD@aP)'&eC'Pd,QacG#`JB@jN)(4SC5"YB@0bEb"QD@aP)(4[)'*P)(0
+TEA"XD@CTC@3Z$3dJ)#!J)#!J6h"PEL"dD'8J4'9Q8h4bDA!Y899&4%dY6@&MFQp
+c)'eKBh*[)'CTE'8Z)#"*CL"TG#"TFb"ZEh30GQPcD@*XC5`JE'&eEQ0S)&&9484
+0)(9cD@jR)'Pd,Jd0)#!J)#!J)%p`C@iJG'KP)&4P@#"YB@0bEb"QD@aP)(9ZC'9
+b)&&94840)'&ZC#!UB@0dDACKG'8U)'PdFb"hD@jNEhFZ$94SC@iJE'&eEQ0S)(4
+SC5"YB@0bEb!U+LTNC@CcG(*TF#"QFQpY)(4SC5"4989%65"YB@0bEh-JE@9ZG5i
+0$5!J)#!J)#""EL"KG@4TG#jXFh3JGfPZC'ph)#"hD@aX)'j[Gb"[F'9Z)'&ZC#"
+YG@0S)'&MG'PfDA4j)(GTE'`JBQ80Ff9PELiJ4QPZB@aXH5`JB5"ME'9KEQ9N,A9
+`)(CPFR0TEfiJEfBJG'KP)#)ZG'9i)L"YB@0bEb"QD@aP)(GTE'`0BA"`C@&b)'P
+Z)'%JGfPZC'ph)'0KE'aPC#!LEh9dF(9d)Li0$5!J)#!J)#"2EQaj)(4SC5!J+LS
+UD'9XF#`J)#SU+Q4PCR0dFQP`,#!JB@jN)#!U+Q&eC#edEbedCAJJ)'eKBh*[Fb!
+0CR*[E5"dD'8J899&4%dJE@&MFQpc)'ePER8JFfK[G@aN)'*P)'aKG@jMD'9N)!e
+LH5"dD'8JGA0PFLiJ)&4SC5"[G'KPFR-JBA*P)(0eBR*[GA4TEQ9c,Jd0)#!J)#!
+J)&0PC5"[Bf0KE5jcF'-JCQpb)'CeFR4SCA)JC'9dB@PXFb`JB@jN)'pMBf&Y,R"
+eBL"QEh)JB@i0EhCPFRCTCAFZ$3d08%p68dP#6%8J8&*23Na&69-Z,LiZ+("XC@&
+cC5"bCA"[FR3JBR9RFb"dEb"dEb"KGA4SEh)T$3d0$3edEb"dEb"KGA4SEh)T$3d
+0$3d!!!1Q4f9ZCACK$6%b)&"[D@jd$90PE'9MG#""E'`03fp`H5!L15)04QPZC#!
+L,L)06Q9h)#*hEh*V)Je,CANJ)#!0$90PG#"-D@jP)&GTC(4Sb3e,CANJ$3e(C@j
+PGQ%0-6)J8'pTER308f9XC@0d)%&XE!e3BA0dC5!L15)04QPZC#!L)Je6BACP$3e
+'D@jN)#)kFb)J)QFL)#!0$3e$D'&ZCf8J)Pad)L"dEb!J)L!J)#)J)#!J)R4KCb)
+J$80SB@jRC5!J)PjFFbSP*9aHAbiU)L"dEb!L)L!J)#*dB@FL$3e$D'&ZCf8J)#*
+HA#KFFbSPA#PFAL)JG'mJ)P`a)L!J)#*dB@FL$80SB@jRC5!J)L9IA(-U*#)JG'm
+J)L8L)#!J)R4KCb)03fKKEQGP)#*F+&jFFbTFA&YRA5eF+9Y%A9`S@f9G@fCGA(-
+UA&aF+5)JG'mJ)#*F-@4F-L)J)#!J)R4KCb)J$80SB@jRC5!LA#KHA(-UA&aECed
+YA#PE6&eF+&YPA9YdA9ac+PaFA#NL)(4[)#!LA$&XA$)L)#!J)#*dB@FL)!e$D'&
+ZCf8J)P`SAPac+PaFA#PE4PeF+&Y[A9YZA9YdA9ac+PaFA#NL)(4[)#!LA$&QA$)
+L)#!J)#*dB@FL)!e$D'&ZCf8J)P`SAPac+PaFCfa[BQ&XA(-UA&aF+9Y'A9`S@fp
+G@fjG@h4GA(-UA&aF+5)JG'mJ)#*F-@CF-L)J)#!J)R4KCb)J$80SB@jRC5!LA#K
+HA(-UA&aF+9Y0A9`S@f&G@h4G@fKG@f0G@fKG@f&G@h*G@f4G@f9G@fCGA(-UA&a
+F+5)JG'mJ)#*F-@eF-L)J)#!J)R4KCb)J$80SB@jRC5!LA#KHA(-UA&aRE'pLB@a
+FFbTFA&`T@deGA#KEB9eEG&eED&eEBeeED&eEB9eEFPeEC&eEC9eECPeFFbTFA&`
+T)L"dEb!J)P`aE9`b)L!J)#!LG'&R)L!03fKKEQGP)#*F+&jFFbTFA&`T@djGA#K
+EC9eEGeeEFeeEH9eEE9eEBPeEEeeEE&eFFbTFA&`T)L"dEb!J)P`aEP`b)L!J)#!
+LG'&R)L!03fKKEQGP)#*F+&jFFbTFA'GXEf*KE&ac+PaFA#PE6PeF+&YPA9YhA9Y
+cA9YjA9YYA9YLA9Y[A9YXA9ac+PaFA#NL)(4[)#!LA$&ZA$)L)#!J)#*dB@FL)!d
+0$90KGQ8J3A2*$8YPH5"[GA4`GA305f9j)!d0$3d!!!%!!!!9i`!!&1-!!!%A!!S
+8j!N`!!!!(!#H!!"468&$!!N!#LeZ!!!J!!E-!!S8c!(m!!dJ!!5G!!S8b%!,!"N
+J!!*Y!!S8a%CS!#BJ!!!!!!S8`$D4!$)J!!#)!!S8[(5#!$mJ!!BQ!!S8Z'e4!%S
+J!!"%!!S8Y($9!&-J!!T+!!S8X&k4!&mJ!!'0!!S8V&S+!'`J!"%i!!S8U!aNC@C
+cG(*TF'KPB@3,C'9QFh4bDA"`CA)-C'9QFh4bDA"dD@4j#bSU+Q4PCR0dFQP`$'4
+PCR0dFQP`F(*PF!TcG'PRE@&dDATP##SU+LTSC@a`#f4PCR0dFQP`D'a`$'4PCR0
+dFQP`G'&TE!`U+Q&eC#edEbedCAMNb!:
diff --git a/macros/generic/occam/Occam94-old/auditor.tex b/macros/generic/occam/Occam94-old/auditor.tex
new file mode 100644
index 0000000000..8d92c2f91b
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/auditor.tex
@@ -0,0 +1,599 @@
+
+ %% auditor.tex of 6-94 (alpha)
+ %% "audits macro use"
+ %% By laurent siebenmann, lcs@topo.math.u-psud.fr (comments please!)
+ %% Used mostly for Plain and amstex; LaTeX use not debugged.
+ %% Documentation after endinput.
+ %% Alpha posting on ftp ftp.math.u-psud.fr in pub/TeX/Occam.dir
+ %% auditor.tex is part of the Occam system for macro management.
+ %% But it can also be used alone.
+
+ \ifx\undefined\auditortex\def\auditortex{}
+ \else
+ \immediate\write16{}%
+ \errmessage{%
+ The auditor.tex macro \noexpand\Def already loaded\string!}%
+ \EX@\endinput
+ \fi
+
+ \chardef\auditAt=\catcode`\@
+ \catcode`\@=11
+
+ %%temporarily suppress Plain's logging of allocations
+ \let\auditorwlog@ld\wlog
+ \def\wlog#1{\relax}
+
+ \def\WrSc@{\immediate\write16}
+ \def\WrOut@{\immediate\write\unusedout@}
+
+ \WrSc@{}%
+ \WrSc@{%
+ *** The auditor.tex macro-auditing system}%
+ \WrSc@{%
+ *** is being installed for a test run of your typescript.}%
+ \WrSc@{%
+ *** Its report will appear after typesetting.}%
+ \WrSc@{%
+ *** See documentation in auditor.tex.}%
+ \WrSc@{%
+ *** Hit return to get audit.}%
+ \WrSc@{%
+ *** Hit \space x \space and return to typeset without audit.}%
+ \def\temp{\par}%
+ \read16 to \YourChoice
+ %\def\YourChoice{\par}%%%%%%%%%% comment out?
+ \ifx\YourChoice\temp
+ \def\Modify@Audit{}%
+ \else
+ \def\Modify@Audit{\let\Def\def \let\gDef\gdef \let\Let\let
+ \def\gLet{\global\let}\let\The@Audit@\relax}%
+ \WrSc@{%
+ *** Auditor apparatus switched off\string.}%
+ \fi
+ \WrSc@{}%
+
+
+ \newwrite \unusedout@
+ \newtoks\temptoks@
+ \newtoks\nibbletoks@
+ \newtoks\resttoks@
+ \newtoks\deftoks@
+ \newtoks\mactoks@
+ \newtoks\unusedtoks@
+ \newtoks\AuditDepth
+
+ \let\EX@\expandafter
+
+ \def\Nibbl@#1#2\endNibbl@{\nibbletoks@{#1}\resttoks@{#2}}
+
+ \def\gobble#1{}
+
+ \def\WrDef@#1{\EX@
+ \ifx\csname\string_%
+ \string#1\string_\endcsname\@Used
+ \else
+ \EX@\global\EX@\let\csname\string_%
+ \string#1\string_\endcsname\@Defed
+ \edef\@tmp@{\global
+ \noexpand\deftoks@{\the\deftoks@\noexpand#1}}%
+ \@tmp@
+ \fi
+ }
+
+ \def\WrDDef@#1{\EX@
+ \ifx\csname\string_%
+ \string#1\string_\endcsname\@Used
+ \else
+ \EX@\global\EX@\let\csname\string_%
+ \string#1\string_\endcsname\@DDefed
+ \edef\@tmp@{\global
+ \noexpand\deftoks@{\the\deftoks@\noexpand#1}}%
+ \@tmp@
+ \fi
+ }
+
+ \def\@UsedMathSym{@UsedMathSym}
+ \newtoks\Def@toks@
+ \newtoks\Def@@toks@
+ \newtoks\Font@toks@
+ \newtoks\Mathchar@toks@
+ \newtoks\MATHchar@toks@
+ \newtoks\MATHchars@toks@
+
+\def\Deff@{%
+ \edef\@tmp@ {\@d@f\the\Def@toks@ {%\noexpand
+ \global\let \EX@\noexpand\csname\string_%
+ \EX@\string\the\nibbletoks@\string_\endcsname
+ \noexpand\@Used
+ \the\Def@@toks@ }}%
+ \@tmp@
+ \EX@\WrDef@\the\nibbletoks@
+ }
+
+\def\DDeff@{%
+ \edef\@tmp@ {\@d@f\the\Def@toks@ {%\noexpand
+ \global\let \EX@\noexpand\csname\string_%
+ \EX@\string\the\nibbletoks@\string_\endcsname
+ \noexpand\@Used
+ \the\Def@@toks@ }}%
+ \@tmp@
+ \EX@\WrDDef@\the\nibbletoks@
+ }
+
+ \def\Def#1#{\Def@toks@{#1}%
+ \Nibbl@#1\endNibbl@\let\@d@f\def
+ \afterassignment\Deff@\Def@@toks@
+ }
+
+ \def\DDef#1#{\Def@toks@{#1}%
+ \Nibbl@#1\endNibbl@\let\@d@f\def
+ \afterassignment\DDeff@\Def@@toks@
+ }
+
+ \def\gDef#1#{\Def@toks@{#1}%
+ \Nibbl@#1\endNibbl@\let\@d@f\gdef
+ \afterassignment\Deff@\Def@@toks@
+ }
+
+ %% \Let \gLet require two *macros* following, without =
+ %% Only then enhances \let
+ \def\Let#1#2{%
+ \EX@\Def\EX@#1\EX@{#2}%
+ }
+ \def\gLet#1#2{%
+ \EX@\gDef\EX@#1\EX@{#2}%
+ }
+
+ \def\WrMATHchardef@{%
+ \EX@\edef\the\MATHchar@toks@{%
+ \noexpand\ifx
+ \csname\string_\EX@\string\the\MATHchar@toks@\string_\endcsname
+ \noexpand\@UsedMathSym
+ \noexpand\else
+ \global\MATHchars@toks@\noexpand\EX@{%
+ \noexpand\the\MATHchars@toks@\the\MATHchar@toks@}%
+ \global\let\csname\string_\EX@\string\the\MATHchar@toks@\string_\endcsname
+ \noexpand\@UsedMathSym
+ \noexpand\fi
+ \csname \EX@\string\the\MATHchar@toks@\string_\endcsname}
+ %\EX@\show\the\MATHchar@toks@
+ }
+
+ \def\MATHchardef#1{\MATHchar@toks@{#1}%
+ %\showthe\MATHchar@toks@
+ \afterassignment\WrMATHchardef@
+ \EX@\mathchardef\csname \string#1\string_\endcsname}
+
+ \def\AfterMathchardef@{%
+ \edef\@@temp@{%
+ \noexpand\Def\the\Mathchar@toks@{%
+ \csname \EX@\string\the\Mathchar@toks@\string_\endcsname}}
+ %\show\@@temp@
+ \@@temp@}
+
+ \def\Mathchardef#1{\Mathchar@toks@{#1}%
+ \afterassignment\AfterMathchardef@
+ \EX@\mathchardef\csname \string#1\string_\endcsname}
+
+ %%% \Newsymbol, \NEWsymbol for \newsymbol of amssym.def
+ \def\Newsymbol#1#2#3#4#5{\let\next@\relax
+ \ifnum#2=\@ne\let\next@\msafam@\else
+ \ifnum#2=\tw@\let\next@\msbfam@\fi\fi
+ \Mathchardef#1="#3\next@#4#5}
+
+ \def\NEWsymbol#1#2#3#4#5{\let\next@\relax
+ \ifnum#2=\@ne\let\next@\msafam@\else
+ \ifnum#2=\tw@\let\next@\msbfam@\fi\fi
+ \MATHchardef#1="#3\next@#4#5}
+
+ \def\@F@nt@{\edef\@@temp@{%
+ \noexpand\Def\the\Font@toks@{%
+ \csname \EX@\string\the\Font@toks@\string_\endcsname}}%
+ \@@temp@}
+
+ \def\Font#1{\Font@toks@{#1}\afterassignment\@F@nt@
+ \EX@\font\csname \string#1\string_\endcsname}
+
+ \def\@FF@nt@{\edef\@@temp@{%
+ \noexpand\DDef\the\Font@toks@{%
+ \csname \EX@\string\the\Font@toks@\string_\endcsname}}%
+ \@@temp@}
+
+ \def\FFont#1{\Font@toks@{#1}\afterassignment\@FF@nt@
+ \EX@\font\csname \string#1\string_\endcsname}
+
+ \def\Loop@#1\Repeat@{%
+ \def\Iterate@{#1\EX@\Iterate@\fi}%
+ \Iterate@}
+
+ \bgroup\catcode`\%=12
+ \global\def\Pct@{ %% }\egroup
+
+ \def\WriteToToks@{\edef\@tmp@{\global\noexpand
+ \unusedtoks@{\the\unusedtoks@\the\nibbletoks@}}%
+ \@tmp@}
+
+ %\def\@Defed{@Defed}
+ %\def\@Used{@Used}
+ \def\@Used{\WrOut@{ \the\nibbletoks@}}%
+ \def\@Defed{\WrOut@{ *\the\nibbletoks@}\WriteToToks@}%
+ \def\@DDefed{\WrOut@{ **\the\nibbletoks@}\WriteToToks@}%
+ \let\@Filler\relax
+ \def\@Tail{@Tail}
+
+ \def\List@M@cs{%
+ \Loop@
+ %\message{ x }
+ \EX@\Nibbl@\the\deftoks@\@Tail\endNibbl@
+ \deftoks@\resttoks@ %\showthe\resttoks@
+ \edef\@Temp@{\EX@\noexpand\csname\string_%
+ \EX@\string\the\nibbletoks@\string_\endcsname}%
+ \EX@\let\EX@\@Temp\@Temp@ %
+ %% \@Temp is x-equal and let-equal to
+ %% \@Defed or \@DDefed or \@Used or \@Filler or @
+ %\showthe\nibbletoks@
+ %\show\@Temp@
+ %\show\@Temp
+ \EX@
+ \ifx \the\nibbletoks@\@Tail
+ %% exit if next token \@Tail
+ \else
+ \@Temp %% write appropriate stuff to file and log
+ \Repeat@
+ }
+
+ \newtoks\hrct@
+
+
+ {\catcode`\#=12\gdef\StringSharp{\string#}}
+
+ \def\The@Audit@{%\show\patience
+ \def\AuditSheet@{audit.lst}
+ %%%
+ \count255=\time\divide\count255 by 60\relax
+ \edef\temp@{\the\count255}
+ \multiply\count255 by -60\relax
+ \advance\count255 by \time
+ \immediate\openout\unusedout@ \AuditSheet@
+ \WrOut@{\Pct@ auditor.tex output, date
+ \the\day-\the\month-\the\year,
+ time \temp@\string:\the\count255.}%
+ \WrOut@{}
+ \edef\@temp@{\the\MATHchars@toks@}\def\empty{}%
+ \ifx\@temp@\empty\else
+ \WrOut@{\Pct@ Math characters defined via \noexpand\MATHchardef }
+ \WrOut@{\Pct@ or \noexpand\NEWsymbol and really used were\string:}
+ \WrOut@{\the\MATHchars@toks@}
+ \WrOut@{\Pct@ Beware lack of wordwrap\string!}
+ \WrOut@{}
+ \fi
+ \WrOut@{\Pct@ Macros (if any) defined by \string\Def, \string\Let, etc.}%
+ \WrOut@{\Pct@ are listed in order defined\string:}
+ \WrOut@{\Pct@ *Unused* macros among these are marked by *.}%
+ \WrOut@{\Pct@ And \StringSharp\space
+ indicates nesting (hence delayed action).}%
+ \WrSc@{}%
+ \WrOut@{}%
+ \List@M@cs
+ %\showthe\unusedtoks@
+ %\showthe\deftoks@
+ \def\empty{}%
+ \edef\@tmp@{\the\unusedtoks@}%
+ \ifx\@tmp@\empty
+ \EX@\def\EX@\@tmp@\EX@{\the\deftoks@}%
+ \ifx\@tmp@\empty
+ \WrSc@{*** No macros have been defined via \string\Def,
+ \string\Let, etc.}%
+ \else
+ \WrSc@{*** All macros defined via \string\Def,
+ \string\Let, etc. have been used.}%
+ \fi
+ \else
+ \WrSc@{*** The following macros defined via \string\Def,
+ \string\Let, etc. have not been used\string;}%
+ \WrSc@{%
+ *** --- you can probably delete their definitions\string:}%
+ \WrSc@{*** }%
+ \WrSc@{***** \the\unusedtoks@}%
+ \fi
+ \edef\@tmp@{\the\MATHchars@toks@}%
+ \ifx\@tmp@\empty\else
+ \WrSc@{ }%
+ \WrSc@{*** The following math chars defined by \noexpand\MATHchardef}%
+ \WrSc@{*** or \noexpand\NEWsymbol are really used\string:}%
+ \WrSc@{***** \the\MATHchars@toks@}%
+ \fi
+ \WrSc@{}%
+ \WrSc@{*** See the file \string"\AuditSheet@\string" for details.}%
+ \WrSc@{*** See the DefStrip utility for cleanup.}%
+ \WrOut@{}
+ \WrOut@{\the\AuditDepth\noexpand\ITERATIONCOUNTER}
+ \WrOut@{\Pct@ PLEASE iterate ***defstrip macro of QUEDM }
+ \WrOut@{\Pct@ until asterisks disappear from iteration counter line.}
+ \WrOut@{\Pct@ Name successive output files output1, output2, ...}
+ }
+
+ \ifx\undefined\@@end
+ \let\audprim@end@\end
+ \def\end{\The@Audit@\audprim@end@}
+ \else %%% LaTeX
+ \let\audprim@end@\@@end
+ \def\@@end{\The@Audit@\audprim@end@}
+ \fi
+
+ \Modify@Audit
+
+ \let\wlog\auditorwlog@ld
+ \catcode`\@=\auditAt
+
+ %\let\DDef\Def
+
+ \endinput %% comment out for tests
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end code
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% begin tests
+
+ \input amssym.def
+ \input amssym.aud
+
+$\digamma\digamma\varkappa$
+
+\Font\cmr cmr10 scaled 1500
+%\cmr
+
+\end
+
+ %\catcode`\@=11
+
+
+ %\documentstyle{article} %% LaTeX only
+ %\begin{document} %% LaTeX only
+ %\let\Def\def
+ %\let\Let\let
+
+ \Def\Rm#1{\mathop{\fam0#1}}
+
+ \Def \End {\Rm {End}}
+ \Def \Hom {\Rm {Hom}}
+ \Def \ind {\Rm {ind}}
+ \Def \Re {\Rm {Re}}
+ \Def \Tr {\Rm {Tr}}
+ \Def \rk {\Rm {rk}}
+ \Def \rg {\Rm {rg}}
+ \Def \Td {\Rm{Td}}
+ \Def \ch {\Rm{ch}}
+ \Def \T{\Rm{T}}
+ \Def \R{\Rm{R}}
+ \Def \e{\Rm{e}}
+ \Def \odd {\Rm{odd}}
+ \Def \even {\Rm{even}}
+ \Def \Ker {\Rm{Ker}}
+ \Def \id {\Rm{id}}
+ \Def \Pf {\Rm{Pf}}
+
+ \gDef\filler{filler}
+ \gLet\Filler\filler
+
+ %\Filler
+
+ \Font\myfont=cmr10 at 11.5pt
+ %\myfont
+
+ $\End
+ %\Hom
+ \ind
+ \Re
+ \Tr
+ \rk
+ \rg
+ \Td
+ \ch
+ \T
+ \R
+ \e
+ %\odd
+ %\even
+ \Ker
+ \id
+ \Pf $
+
+ \end{document}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end tests
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% begin doc
+
+
+DOCUMENTATION FOR auditor.tex.
+
+
+ Warnings : These macros are not bulletproof. I believe no such
+macros could be bulletproof. But in practice that should be of
+no importance; hopefully, any significant annoyances will be
+routinely reported and remedied. Use of this alpha version
+with an imbricated format like LaTeX is probably for hardened
+texperts only. Plain and AmSTeX seem to respond well.
+
+ INSTRUCTIONS.
+
+ Suppose you have a macro file x.sty used for typesetting the
+typescript x.tex. The aim is to find out, quickly and easily,
+which of the macro definitions in x.sty are necessary to typeset
+x.tex.
+
+ 1) Modify a *copy* of x.sty to x-aud.sty by altering
+definitions as follows:
+
+ (a) replace \def by \Def for definitions of macros you suspect
+ might be unused in x.tex. Similarly use \gDef in place
+ of \gdef or \global\def.
+
+ (b) similarly replace \mathchardef by \Mathchardef, and so forth
+ as indicated in the list of currently possible substitutions
+ indicated in occam.spc.
+
+Provisional Warnings:
+ --- Do not modify \def's or \let's within other definitions.
+This would be pointless and perhaps dangerous. Be ready to
+revert to \def or \let if trouble ensues.
+ --- Avoid "\outer" and "\long" macros; also \alloc@
+
+ (c) Place the lines
+
+ %%% auditor.tex audits use of macros in a typescript.
+ \input auditor.tex %% Keep this file available to TeX!
+
+at the head of x-aud.sty. (Watch the order!)
+
+ 2) Modify x.tex temporarily replacing
+
+ \input x.sty by \input x-aud.sty
+
+in the header. Typeset as usual. The audit should now proceed
+with an explanatory dialog.
+
+ 3) If there is trouble in step 2), repeat it choosing (by
+dialog) to compose *without* an audit. There should be no
+change from the original behavior of x.tex. Correct any
+misbehavior --- probably arising from a malformation in
+x-aud.sty. Sometimes, here and there in x-aud.sty, one has to
+change \Def back to \def etc.
+
+ 4) Delete the unused definitions in another copy of x.sty, say
+x-min.sty. The list in the "audit.lst" output file is designed to
+make this easy, in fact so easy that a utility called "defstrip" can
+do the job automatically. Then replace x-aud.sty by x-min.sty in
+the header of x.tex. Typeset x.tex and check a proof copy.
+
+ 5) You can now send x.tex and x-min.sty to a colleague or
+publisher, without burdening him/her with useless macros present in
+x.sty.
+
+
+
+
+IMPROVEMENTS CURRENT AND FUTURE
+ A) In all, the list of prepared macros is currently (July
+1994):
+
+ \Def, \Let, \gDef, \gLet, \Font, \Mathchardef, \Newsymbol
+
+Unless the contrary is indicated, each is to be used in analogy
+with \Def replacing in x.sty a corresponding uncapitalized TeX
+primitive.
+
+ [Exception: \newsymbol (from amssym.def) is *not*
+primitive; it is used copiously for declaration of symbols from
+the AmS math fonts msam and msbm, as in amssym.tex.]
+
+ When the file amssym.tex is \input, huge numbers of math
+characters are defined via \newsymbol but only few are used. In
+this case it is appropriate to use variants \MATHchardef,
+\NEWsymbol. which signal math characters only if they are used
+--- and *not* if they are unused. For this, try temporarily
+replacing
+
+ \input amssym.tex
+
+in x-aud.sty (after \input auditor.tex please) by
+
+ \input amssym.aud
+
+where amssym.aud is obtained from amssym.tex by replacing
+\newsymbol by \NEWsymbol; then you get a list of the symbols really
+needed in x.tex.
+
+ In using \Let and \gLet, avoid macros with parameters and
+note that the condition that the second argument be a macro is
+often not satisfied. Do not use = in the syntax.
+
+ \Let, \gLet, and \Font tend to be troublesome; while
+\Mathchardef, \MATHchardef, \Newsymbol, \NEWsymbolseem tend to
+be troublefree.
+
+ The usefullness of the above list can be stretched by the
+user. For example, before \Font was introduced
+
+\font\myfont=cmr10 scaled 11.5pt
+
+would have been replaced by
+
+ \font\myfont@=cmr10 at 11.5pt \Def\myfont{\myfont@}
+
+to report use of \myfont.
+
+ In many formats, user definitions are made via macros not
+available in Plain TeX; for example, \define and \redefine in
+AmSTeX. In practice, they can usually be replaced by \Def for
+the audit. But the programmer may want to invent new macros,
+say \Define and \Redefine for AmSTeX.
+ (B) In case x.sty is of permanent interest, it is a good idea
+to begin to use x-aud.sty instead of x.sty after commenting
+out the line \input auditor.tex and replacing it by something
+like
+
+ %% Audit.tex apparatus
+ \let\Def\def \let\gDef\gdef \let\Let\let
+ \let\Font\font \def\gLet{\global\let}
+ \let\Mathchardef\mathchardef %% extend as necessary
+ % \input auditor.tex %% comment out to suppress audit function
+
+This will make steps (1) to (4) superfluous for your next
+typescript y.tex.
+
+ (C) DefStrip automates the generation of x-min.sty.
+(auditor.tex plus DefStrip make up the "Occam" utility.)
+Its starting materials are "x-aud.sty" plus the "list audit.lst"
+of unused macros provided by auditor.tex. This depends on a
+special arrangement of x-aud.sty described in occam.spc.
+
+ Ultimately, an auxiliary ".tex" program "defstrip.tex"
+will rewrite x-aud.sty omitting the inused definitions. This
+auxiliary program resembles the "docstrip" utility of LaTeX
+fame.
+
+ At the present time defstrip.tex is unavailable. But there
+exists a QUEDM script called Auditor-QUEDM-Macros; QUEDM is a
+editor with convenient "macro" (=composite command) capabilities
+that is available on Macintosh computers at prices as low as $60
+The instructions for Auditor-QUEDM-Macros are found in
+defstrip.hlp.
+
+
+ *** How "auditor.tex" functions or fails to function.
+
+ "auditor.tex" prefixes a reporting device to the expansion
+of macros defined by \Def; this device reports the use of the
+macro by defining a tell-tale auxilliary macro that is then
+polled after typesetting. But it may cause strange behavior or
+even stop TeX.
+
+ As has been mentioned auditor.tex is not bullet-proof. Any
+change whatever in the expansion of a macro can in principle
+alter its behavior. For example TeX can use \ifx and many other
+means to examine the expansion of a macro; it can detect any
+tampering with definitions.
+
+
+ *** The "watchman" mechanism.
+
+ This mechanism is capable of deleting any collection of
+lines of a macro file in response to the non-use of a single
+macro called the "watchman". This "watchman" may be a macro that
+is specially defined for the purpose. The mechanism is
+definitely only for macro files carefully formatted for Occam.
+This mechanism is more powerful but more cumbersome than that
+for \Def etc. It is still to be implemented.
+
+
+CAVEAT LaTeX : LaTeX environments tend to define their user
+macros locally; indeed their definitions are not set up while
+the macro file x.sty is being read but when the environment is
+entered. Thus the modus operandi indicated above is suspect.
+However, normally, the meanings assigned upon entering the
+environment are stored in macros whose name involves @ ; these
+are possibly the macros to spy on with \Def etc. Alternatively,
+the "watchman" mechanism may prove effective. The cleanup based
+on audit.lst is then still a delicate matter requiring texpert
+attention. Further, LaTeX's fragility must be attended to...
+
+
diff --git a/macros/generic/occam/Occam94-old/defstrip.hlp b/macros/generic/occam/Occam94-old/defstrip.hlp
new file mode 100644
index 0000000000..2691b39397
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/defstrip.hlp
@@ -0,0 +1,56 @@
+ Part of the Occam utility.
+ Laurent Siebenmann<lcs@topo.math.u-psud.fr>
+ Master posting 1994, ftp ftp.math.u-psud.fr
+
+
+ June 1994 alpha version
+
+ *************************************************
+ ******
+ ****** DefStrip-QUEDM-Macros Help
+ ******
+ *************************************************
+
+ PURPOSE OF THESE MACROS.
+
+ The main purpose is to use a file "audit.lst" derived from
+audit.tex, and a TeX macro file, x-aud.sty say, in the
+"Occam" format (defined in occam.spc) to derive a new
+simplified ".tex" macro file in which selected unwanted material is
+suppressed. This material is designated by "audit.lst" in
+conjunction with internal formating involving %^, %_, \Def, \Let,
+\gDef, \gLet, \Font, and some others. The user macro
+***defstrip governs this function.
+
+ The secondary purpose is to remove Occam formatting.
+The macro **aud-to-tex governs this function.
+
+
+ DIRECTIONS FOR USE.
+
+ Put together into one folder a copy of DefStrip-QUEDM-Macros
+macro file, the file audit.lst, and the macro file to be simplified.
+
+ Open the DefStrip-QUEDM-Macros macro file. If it is not
+visible, launch QUEDM using it.
+
+ Open the TeX macro file under QUEDM and *activate* its window.
+Then launch the macro ***defstrip from the QUEDM macros menu.
+
+ An audit.lst window will now open and much activity will be
+seen. Finally, a cleaned-up version of the ".tex" macro file will
+appear in a window called "output".
+
+ Only the ***help, ***defstrip, and **aud-to-tex macros
+from the QUEDM macros menu should be launched
+by the user. The others are subroutines.
+
+ See occam.spc for further details, and occam.pub for an
+overview.
+
+
+POSSIBLE PROBLEMS....(please report bugs to to author)
+
+
+
+
diff --git a/macros/generic/occam/Occam94-old/occam.pub b/macros/generic/occam/Occam94-old/occam.pub
new file mode 100644
index 0000000000..37333dbb32
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/occam.pub
@@ -0,0 +1,173 @@
+Part of the Occam utility.
+Laurent Siebenmann <lcs@topo.math.u-psud.fr>
+Master posting 1994, ftp ftp.math.u-psud.fr
+
+
+ *************************************************
+ ******
+ ****** OCCAM'S RAZOR AND MACRO MANAGEMENT
+ ******
+ ****** Laurent Siebenmann
+ ******
+ ****** lcs@topo.math.u-psud.fr
+ ******
+ *************************************************
+
+THE APHORISM:
+
+ entia non sunt multiplicanda praeter necessitatem
+
+ entities should not be multiplied beyond necessity
+
+ William of Occam 1285-1349(?)
+
+\footnote{Occam's Razor is not just a trendy novel of this
+decade; it is the aphorism quoted! Experts believe that Occam
+did not formulated it in exactly these famous words, but rather
+as
+
+ What can be done with fewer assumptions
+ is done in vain with more.
+
+or
+
+ Plurality is not to be assumed without necessity.
+
+The term Principle of Parcimony is also used for the Razor.}
+
+
+THE SOFTWARE:
+ --- occam.pub
+ --- auditor.tex
+ --- DefStrip-QUEDM-Macros (Macintosh only)
+ --- defstrip.hlp help file for above
+ --- occam.spc specifications for source macro files to be minimized
+ --- defstrip.tex (is mere wishful thinking in summer 1994)
+
+MASTER POSTING in 1994:
+ --- ftp ftp.math.u-psud.fr directory pub/TeX/defstrip.dir/
+
+ Have you ever felt guilty about burdening a friend with
+macros that are not really necessary for composing your
+typescript? I certainly have; and would ideally like to
+follow Knuth's example of using macro files which define
+exactly what is necessary for a document and nothing more.
+
+ However, pruning a macro file that has served for
+another purpose is a pain. Most of us respond to this pain
+by adopting a rather messy maximalist approach in which all
+the macros that have a geneology related to the necessary
+macros are transmitted.
+
+ But there is another approach! One can seek efficient
+mechanisms to ease the task of weeding out unnecessary macros.
+
+ One such mechanism is auditor.tex, which sets up a list of
+names of those macros of macro file that turn out to be
+*unnecessary* in a given typescript.
+
+ A complementary tool is the utility DefStrip which
+combines a specially arranged version of the macro file to be
+"cleaned up" with the list of unused macros provided by
+auditor.tex to delete the unneeded macros listed together
+with some related material.
+
+ Ultimately, DefStrip will hopefully be a ".tex" program
+"defstrip.tex" resembling the "docstrip.cmd" utility of LaTeX
+fame. At the present time there exists instead a QUEDM script
+called DefStrip-QUEDM-Macros; QUEDM is a editor with convenient
+"macro" (=composite command) capabilities that is available on
+Macintosh computers.
+
+ DefStrip and Auditor together make up a system called
+"Occam".
+
+ Let us consider two plausible examples of use of the Occam
+system. Only the first has proved genuinely useful thus far.
+
+ (A) Many TeX users build up a cumulative personal macro file
+through composing many articles with TeX. A time inevitably
+comes when it is embarrassing, cumbersome, or confusing to
+submit the whole macro file along with the article. The Occam
+system makes the pruning of the macro file painless. It is
+advisable to tidy up the macro file and maintain it in "Occam"
+format as explained in "occam.spc"; then and only then will
+auditor.tex and DefStrip collaborate to *automatically*
+produce a minimal version of the macro file suitable for the
+article at hand.
+
+ (B) Suppose that one proposes to post in electronic ".tex"
+form an article prepared using the TUGboat macro package.
+(The alternative ".dvi" form is less flexible; for instance the
+".tex" version can be reformatted to be read in comfort on any
+computer screen whereas a ".dvi" version often does not have an
+appropriate width.) Such a macro package is not immune to
+alteration with time and unfortunately the principles of
+upward compatibility are pious hopes, not laws. Consequently,
+one is well-advised to post, along with the article the macros
+necessary to compile it --- especially if modifications to
+the macros have been used. Unfortunately, the TUGboat macros
+are more voluminous than most articles. This is an unfortunate
+obstacle to electronic posting of ".tex" typescripts.
+
+ An attractive solution would be to have a version of the
+TUGboat macros that have been set out in a form suitable for
+use with Occam. Then the necessary macros for a
+given article can quickly be extracted from the total package
+to make the total posting both compact and archival.
+
+ The archival nature of such TeX postings still depends on
+Knuth's Plain format being archival. Plain probably will be at
+least upwards compatible in the best sense. However, the
+article (or a book, say) could perhaps be made archival on the
+scale of many decades by subjecting the Plain macros to the same
+process as the TUGboat macros; this incidentally seems necessary
+to realize best economy. The article would then have its own
+format built with initex. This may seem needlessly radical to
+an English speaking user. But I consider bootstrapping from
+initex the best approach for fully archival ".tex" postings
+where other languages are concerned.
+
+
+Afterthoughts
+
+ 1) Occam as presently realized does not make much sense in the
+LaTeX world. The LaTeX group is building official macro modules
+that cover all needs and are univerally available. I suspect this
+will require continuing exponential growth of the LaTeX project,
+of the computers that run LaTeX, and of the of the time invested
+by LaTeX users. I may be wrong.
+
+ 2) Bootstrapping on initex as mentioned above seems to have a
+parallel in classical programming, namely the use of assembly
+language --- whereas the LaTeX approach is parallel to the
+use of a big and constantly evolving interpreter.
+
+3) Occam's razor was one of the guiding principles of
+scientific thought in the era before the coming of age of
+computers. I suspect the philosophy of Aristotle or Descartes
+is far more likely to appeal to computer scientists. One might
+go so far as to say that Occam's razor has by now been
+discarded --- indeed object oriented programming consciously
+cultivates the art of multiplication of entities, and this
+sort of thing is to be found in TeX in commands such as
+\newheading of LaTeX. What can the minimalism of Occam's
+razor offer TeX users at this late date? Probably just a few
+things.
+
+ (a) Friendliness to human beings. Unnecessary entities
+that cost a microprocessor only a fraction of a second can cost
+the human mind a significant amount of time.
+ (b) Extra storage space and computing power. Both are in a
+period of exponential growth. But so is the TeX software we
+use. Where performance in a fixed task is concerned these
+growths may even cancel one another. When this happens the
+old-fashioned minimalism of Occam's razor can
+help derive pleasure from progress.
+
+
+
+ Laurent Siebenmann
+ <lcs@topo.math.u-psud.fr>
+
+
diff --git a/macros/generic/occam/Occam94-old/occam.spc b/macros/generic/occam/Occam94-old/occam.spc
new file mode 100644
index 0000000000..dbd61b999d
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/occam.spc
@@ -0,0 +1,209 @@
+Part of the Occam utility.
+Laurent Siebenmann <lcs@topo.math.u-psud.fr>
+Master posting 1994, ftp ftp.math.u-psud.fr
+Alpha version 6-94 subject to change.
+
+
+ ====== Occam Syntax and Specifications ======
+
+ Occam is a system for extracting from a large macro file
+exactly those macros required by a given typescript. Its
+active parts are auditor.tex that determines which macros
+are necessary, and DefStrip a utility to deletes unnecessary
+macros.
+
+ The first created DefStrip utility is a QUEDM script; QUEDM
+is a editor with macro capabilities that is available on
+Macintosh computers. (Hopefully a version of this utility
+which is a ".tex" program like auditor.tex will follow in due
+time; it would be very analogous to the LaTeX "docstrip.cmd"
+utility.)
+
+(I) About the QUEDM Version of Summer 1994 (preliminary)
+
+ The Occam syntax is for TeX macro files. Its purpose is to let
+the "DefStrip" utility delete selected lines of the file with the
+help of a list audit.lst of "unused" control sequences (mostly
+macros).
+
+ These lines come in blocks of roughly two sorts:
+
+ (a) Material that is to be unconditionally deleted.
+
+ (b) Blocks surrounding lines beginning (modulo spaces) with
+one of:
+
+ \Def (variant of \def)
+ \gDef (variant of \gdef or \global\def)
+ \Let (variant of \let)
+ \gLet (variant of \global\let)
+ \Font (variant of \font)
+ \Mathchardef (variant of \mathchardef)
+ \Newsymbol (variant of \newsymbol)
+
+This list may be extended. A particular such block is to be deleted
+precisely if the macro name is designated in an external list called
+"audit.lst". output by the TeX utility "auditor.tex".
+
+
+MAIN SPECIFICATIONS of the Occam syntax.
+
+ ASCII (7-bit) text files only. No tab characters please.
+
+ The names of macro files conforming to this syntax should
+involve the suffix "aud" in some form if at all possible. For
+example, "x.sty" might become "x-aud.sty" or "x.aud", say
+"x-aud.sty" for future reference.
+
+ See internal documentation of "audit.tex" to generate a
+list of macros in "x-aud.sty" that are unnecessary in a
+given typesetting job "x.tex".
+
+ In x-aud.sty, the lines
+
+ %^ This file is formatted by <programmer>, <date>, <email>
+ % for use of the Occam utility posted on the CTAN archives
+ % (master posting 1994 on ftp ftp.math.u-psud.fr)
+ %% DO NOT ALTER "OCCAM" SIGNS <percent>^ or <percent>_ , ^_
+ %% UNLESS YOU UNDERSTAND THEM!
+ \let\Def\def \let\gDef\gdef \let\Let\let
+ \def\gLet{\global\let} \let\Font\font
+ \let\Mathchardef\mathchardef\let\Newsymbol\newsymbol
+ \let\MATHchardef\mathchardef\let\NEWsymbol\newsymbol
+ % \input auditor.tex %% keep auditor.tex available
+ %% comment out above line to suppress audit function. %_
+
+should appear in the header.
+
+ Two composite symbols %^ and %_ are employed to
+designate possible deletions. On its line %^ is always
+preceeded by spaces only (zero or more); similarly %_ is
+always followed by spaces only.
+
+ (A) Unconditionally deleted material:
+
+ %%^_ <delete me>
+
+Everything from %%^_ to the end of file is then deleted.
+To delete just a segment use
+
+ %^ <delete me> %_
+
+The deleted material can span many lines, but must include no
+blank line. We have just seen a block of such material above!
+Note that it may well contain \Def etc. but not %^, %_.
+
+ The unconditional deletions will occur in the order
+described, and before conditional deletions are considered.
+
+
+ (B) Conditionally deleted material:
+
+ \Def \somemacro<maybe delete me>%_
+
+may cause deletion of the block of lines beginning with \Def
+etc. and ending with %_. This material is really deleted
+precisely if the macro \somemacro is marked for deletion in
+the the file "audit.lst".
+
+ The material <maybe delete me> must contain no blank line nor %^,
+%_, \Def etc; but it is otherwise arbitrary; in particular, macro
+arguments, comments, and auxiliary definitions are OK.
+
+ Along with this material some additional preceding material
+is deleted, namely contiguous preceeding lines (if any) that (a)
+are nonempty and (b) contain no %_ (but \Def etc; are allowed).
+Typically, such preceeding material might be comments or commands
+"owned" by the macro being deleted. For example the whole block
+
+ %_
+ \ifx\undefined\eightpoint
+ \Def\eightpoint{}
+ \fi %_
+
+will be deleted precisely in case \eightpoint is marked as unused
+in audit.lst. (The first %_ could be replaced by a blank line.)
+
+ Note that %_ is not really a closing delimiter since it can
+exist in arbitrary numbers without belonging to a matching pair.
+For another example, consider:
+
+ \Def\amacro ...%_
+ \newtoks\btoks %_
+ \Def\cmacro ...%_
+
+Here, the the first two %_ prevent \newtoks\btoks being deleted
+--- in all circumstances.
+
+ The example
+
+ \Def\amacro ...
+ \Def\bmacro ...%_
+
+is incorrect because the block beginning with \Def\amacro ...
+contains \Def\bmacro.
+
+ There is a second type of conditional deletion. Suppose
+\amacro is not used and is so designated in audit.lst. It
+often occurs that several *disjoint* blocks of lines should be
+deleted along with \amacro. These blocks should be
+designated as follows:
+
+ %/^\amacro
+ <stuff>
+ %/_
+
+\amacro is called the sentinel (watchman).
+The sentinel's line %/^... must contain nothing more than
+%/^\amacro and blank space. The initial and terminal
+lines will vanish along with <stuff>.
+
+IN SUMMARY: the blocks %^...%_ are unconditionally deleted,
+while a block signalled by \Def, \gDef, etc. with the help of
+%_ and/or blank lines is deleted or not according as the macro
+following \Def etc. is marked for deletion in "audit.lst".
+Similarly for blocks with sentinel macro. None of these blocks
+for conditional or unconditional deletion is allowed to contain
+an empty line nor any extraneous %^,%_,%/^,%/_,%%^_,\Def,
+\gDef, etc. The blocks introduced by \Def, \gDef, etc. include
+material extending backward as far as (but not including) a
+preceding line that is blank or terminated by one of %_,%/_. No
+such extension for blocks introduced by %^, %/^ is allowed ---
+nor would it be helpful.
+
+ Beyond these primary deletions, the utility DefStrip
+performs a few auxiliary tasks:
+
+ --- All remaining \Def, \gDef, etc. are converted to \def,
+\global\def, etc.. Also, if a remaining %_ is alone on its line
+(spaces ignored), the whole line disappears. And each remaining %_
+*not* alone on its line becomes % (this is the only deletion that
+can affect a line that survives.)
+
+ --- any empty line sequence (usually created by the deletion of
+blocks of lines) is reduced to a single empty line.
+
+ --- Residual appearances in x-aud.sty of macros marked for
+deletion in audit.lst will be marked by %%[VESTIGE] (on a new
+following line). They should be considered a failure of the current
+Occam format".
+
+ Users may find the vestiges mentioned above hard to deal with.
+(Can they simply be deleted?) Thus programmers should attempt to
+set up "Occam" formatting so as to assure that vestiges
+never occur; for their part, users should report vestiges to the
+programmers along with the involved audit.lst file from
+auditor.tex.
+
+ It is the programmer's or the user's responsibility to
+assure that the deletions made by the DefStrip utility result
+in a useful TeX macro file. The DefStrip utility is of little
+help here since it does not understand the macros. Thus it is
+expected that programmers take on the task of preparing macro
+files in Occam format. In most cases, anyone who programs TeX
+macros at an intermediate level will find it an easy task to
+put a macro file in Occam format. Beware that a good deal of
+testing and a bit of cleverness is usually necessary to assure
+that the Occam formatting does the job desired and in the most
+efficient way.
+
diff --git a/macros/generic/occam/Occam94-old/sample.dir/Kohler-aud.sty b/macros/generic/occam/Occam94-old/sample.dir/Kohler-aud.sty
new file mode 100644
index 0000000000..439e0f1d4a
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/sample.dir/Kohler-aud.sty
@@ -0,0 +1,493 @@
+
+ %^% RESOURCEamspptSimple ;
+ % Assumes AmSTeX(version) loaded, but NOT AmSppt.sty
+ % These macros are intentionally simple-minded and have
+ % simple syntax; this permits easy alteration (TeX macros are usually
+ % very devious). Don't hesitate to make alterations,
+ % but in that case rename this file!
+ %% This file will become an %_
+ %% auxilliary macros file named
+ %% Kohler.sty
+ %% needed by the .tex file: Kohler.sty
+ %% Date: 29 June, 1994
+ %% Contact: Martine, email: sectop@matups.matups.fr
+
+ %^%% DefStrip apparatus:
+ %% Master posting 1994 on ftp matups.matups.fr
+ %% DO NOT ALTER DEFSTRIP SIGNS <percent>^ or <percent>_
+ %% UNLESS YOU UNDERSTAND THEM!
+ \let\Def\def \let\gDef\gdef \let\Let\let
+ \def\gLet{\global\let} \let\Font\font
+ \input auditor.tex %% comment out to suppress audit function. %_
+
+ %%% Avoid double input
+ %%
+ \bgroup
+ \catcode`\!=12
+ \ifx\auxmacros\relax
+ \immediate\write16{}%
+ \message{ !!! auxmacros already defined !!!}
+ \gdef\auxmacros{\endinput}%
+ \else \global\let\auxmacros\relax
+ \fi
+ \egroup
+ \auxmacros
+
+ \catcode`\@=11
+
+ %%% The following macros will make you call upon auxiliary files
+ %% when needed. %_
+ \bgroup
+ \catcode`\!=12 %_
+ \gDef\Acc{%\show\Acc
+ \errmessage{ !!! You need to input RESOURCEamsAcc.tex !!!}\end
+ }%_
+ \gDef\amsCD{%
+ \errmessage{ !!! You need to input RESOURCEamsCD.tex !!!}\end
+ }%_
+ \gDef\gLinefigure{%
+ \errmessage{ !!! You need to input RESOURCEfig.tex !!!}\end
+ }%_
+ \egroup
+
+ %^%%% Input following as needed
+ %%% or better append them to a copy of this file.
+ %%% before using the DefStrip utility to clean up
+ % \input RESOURCEamsAcc.tex
+ % \input RESOURCEamsAcc.tex
+ % \input RESOURCEamsAcc.tex%_
+
+
+ %%% FONTDEFams stuff defines your fonts;
+ %% depends on your TeX printing system;
+
+ \Font \Bigbf=cmr17 %_
+ %%TimesB scaled 1500
+ \Font \bigbf=cmbx12 %_
+ \Font \biggbf=cmbx12 scaled \magstep 2 %_
+ \Font \bigbxi=cmbxti10 %at 12pt %_
+
+ \Font \textbf=cmb10 %_
+ \Font \bi=TimesBI%cmbti10 %cmbi10 %_
+ \Font \smc=cmcsc10 % %_
+
+ \Font \smallrm=cmr9 %_
+ \Font \smallbf=cmbx9 %=cmb9 %_
+ \Font \smallit=cmti9 %_
+ %\Font \smallbi=cmbti9 %rare %_
+ %\Font \smallsmc=cmcsc9 %rare %_
+
+ \Font \foliofont=cmr10 %_
+
+ %\Font \ss=cmss10 %_
+ %\Font \ssb=cmssbx10 %_
+ %\Font \ssi=cmssi10 %_
+ %\Font \ssbi=cmssbi10 %rare %_
+
+ %\def \bi{\textbf}
+
+ %\Def \Smc#1{{\smc #1}}%_
+ \Def \Bbd#1{{\Bbb #1}}%_
+ \Def \Calig#1{{\Cal #1}}%_
+ \Def \Frak#1{{\frak #1}}%_
+ %\Def \Bold#1{{\bold #1}}%_
+
+ %%% Improve following
+ %\Def \Smallfonts {\def\rm{\smallrm} %_
+ %\Def\it{\smallit}\def\bf{\smallbf}%_
+ % \def\smc{\smallsmc}}%_
+ %\Def \Smallfonts {\eightpoint}%_
+ \Def \Smallfonts {\relax}%_
+
+ \Def \Titlefont {\bigbf}%_
+ \Def \Authorfont {\smc}%_
+ \Def \Headingfont {\bf}%_
+ \Def \Subheadingfont {\bf}%_
+ \Def \Theoremfont {\smc}%_
+ \Def \TheoremTextfont{\it}%_
+ \Def \Prooffont {\smc}%_
+ \Def \Remarkfont {\smc}%_
+ \Def \Diagramfont {\smc}%_
+ \Def \Captionfont{\it}%_
+
+
+ % Font macros
+
+ \long\def \It #1{{\it{#1}\unskip\/}}%_
+
+ \Def \Bi #1{{bi{#1}\unskip\/}}%_
+
+ \Def \Bold #1{{\bold #1}}%_
+ \Def \BF #1{{\bf{#1}\unskip}}%_
+
+ \Def \Bf #1{%
+ {\ifmmode \let\this\Bold
+ \else \let\this\BF \fi
+ \this {#1}}}%
+ %% in math, transcoder provides surrounding brackets,
+ %% in case of preceding accent, so one superfluous layer here? %_
+
+ % \Def\Bbb#1{{\relaxnext@\ifmmode\let\next\Bbb@\else
+ % \def\next{
+ % \Err@{Use \string\Bbb\space only in mathmode}}\fi
+ % \next{#1}}}%_
+
+ \Def \Smc#1{{\smc{#1}\unskip}}%_
+
+ %\def \leftAdmin{\begingroup\mathsurround=0 pt$}%_
+ %\def \rightAdmin{$\endgroup}%_
+
+ \Def \Admin #1{\begingroup\mathsurround=0 pt
+ \leavevmode%p222-3: \hskip -\lastskip for \unskip
+ \ifmmode\hbox{$\roman{{#1}}$}\else$\roman{{#1}}$\fi
+ \endgroup}%
+ %%{{}} prevents misinterpretation of naked numbers %_
+
+ \Def \Rm #1{{\text{\rm\kern 1pt #1\kern .5pt}}}%
+ %%outer {} for SwtCD %_
+
+ \Def \Displaystyle {\displaystyle}%_
+
+ %%% Logical formatting
+ %%
+
+ %mild revision of an AmSTeX definition
+ \Def \endheading{\cr \egroup \egroup \egroup \nobreak\unvbox
+ \headingbox@ \nobreak\medskip\nobreak}%_
+
+ \Def \Medskip{\vskip 6pt plus 10pt minus 2pt}%_
+
+ \Def \Medbreak{\par \ifdim \lastskip <\bigskipamount \removelastskip
+ \penalty -100\Medskip \fi}%_
+
+ \newif\ifAfterHead
+
+ \Def \hRule{}%%=\hrule for diagnosis %_
+
+ \everypar={\global\AfterHeadfalse}%_
+
+ %% \Title block begins
+\newskip\TitleLineskip
+ \TitleLineskip=4pt
+ \def \DeepCr{\unskip\hfil\egroup\par\hfil\bgroup}%_
+ \def \\#1{%
+ \def\test{#1}%
+ \ifx \test\space\def\this{\DeepCr}\else\def\this{\DeepCr #1}\fi
+ \this}
+ \Def \Title{\goodbreak
+ \ifdim\pagetotal>.70\pagegoal
+ \def\this{\vfill\eject}
+ \else\def\this{}\fi \this
+ \vbox\bgroup\Titlefont\def\cr{\DeepCr}
+ \parindent=0 pt\parskip= 0 pt
+ \Titlefont\baselineskip=\fontdimen6\font
+ \lineskip=\TitleLineskip%
+ \lineskiplimit=\baselineskip%
+ \advance\lineskiplimit by -1ex %
+ \hbox to 0pt{}\vskip15pt plus 15pt\bigskip
+ \bgroup \hfil}
+ \def \endTitle {\unskip\hfil\egroup\par \egroup\medskip}
+ %% end of \Title block %_
+
+ %% \Author block begins
+ \newskip\AuthorLineskip
+ \AuthorLineskip=5pt plus 5pt
+ \Def \Author{\nobreak\vskip 20Pt plus 10pt minus 5pt\nobreak
+ \vbox\bgroup\Authorfont\def\cr{\DeepCr}
+ \parindent=0 pt\parskip= 0 pt
+ \Titlefont\baselineskip=\fontdimen6\font
+ \advance\baselineskip by \AuthorLineskip%
+ \bgroup \hfil}%
+ \def \endAuthor {\unskip\hfil\egroup\par \egroup\medskip}%_
+
+ %\Def \Heading{\redefine\headingfont{\Headingfont}\heading}%_
+ %ams ppt sty, not yet used
+ %\Def \endHeading{\endheading \redefine\headingfont{\smc}}%_
+
+ \Def \BoldItemTags{\def\ItemStyle{\Bold}}%_
+ \Def \PlainItemTags{\def\ItemStyle{\Rm}}%_
+ \Def \ItemStyle{\Bold}%_
+ \Def \Item #1{\ifAfterHead\def\this{\nobreak\hRule\nobreak}%\vskip1pt
+ \else\def\this{\smallskip}\fi
+ \ifhmode\else\nointerlineskip\fi
+ \this{\parskip=4pt\noindent
+ \hbox{$\let\bf\relax
+ \ItemStyle{{#1}}$}\enskip}\AfterHeadfalse}%_
+
+ \Def \Itemitem #1{\itemitem{\hbox{$\def\let\relax\let\bf\relax%
+ \ItemStyle{\show\bf{#1}}$}}}%_
+
+ %\def \Item #1{\item{\def\Bf{}\hbox{$\Bold{{#1}}$}}}%_
+ %%simpler def with snugness to heading above
+ % \Def \Itemitem #1{\itemitem{\def\Bf{}\hbox{$\Bold{{#1}}$}}}%
+ %%The \Bf kill necessitated by some nightmare in AmSTeX?? %_
+
+ \Def \Subheading #1{\SubheadingBoldPar{#1}\AfterHeadtrue}%_
+
+ \Def \SubheadingA #1{\SubheadingBoldNopar{#1}\AfterHeadfalse}%_
+
+ \Def \SubheadingB #1{\SubheadingIndBoldNopar{#1}\AfterHeadfalse}%_
+
+ \Def \SubheadingC #1{\SubheadingRmNopar{#1}\AfterHeadfalse}%_
+
+ \edef\everymathholder{\noexpand\AfterHeadfalse\the\everymath}%
+ \expandafter\everymath\expandafter{\everymathholder}%_
+
+ \Def \SubheadingBoldPar #1{%
+ \ifAfterHead\def\this{\nobreak\hRule\nobreak}%
+ \else\def\this{\goodbreak\vskip 10pt plus 2pt\goodbreak
+ \vbox to 0pt{\vss}\smallskip\nobreak}\fi\this
+ \nobreak\noindent{\unskip\bf#1\hfill}\nobreak\vskip0pt
+ \nobreak
+ }%_
+
+ \Def \SubheadingBoldNopar #1{%
+ \ifAfterHead\def\this{\nobreak \hRule\nobreak}%
+ \else\def\this{\Medbreak}\fi
+ \this\vbox to 0pt{\vss}%
+ \vskip 4pt\nobreak\nointerlineskip
+ {\parskip=0pt\noindent\unskip\bf\ignorespaces#1\unskip.\enskip}}%
+ %%\nointerlineskip is nec! %_
+
+ \Def \SubheadingIndBoldNopar #1{\ifAfterHead
+ \def\this{\nobreak \hRule\nobreak}%
+ \else\def\this{\Medbreak}\fi
+ \this\vbox to 0pt{\vss}%
+ \vskip 4pt\nobreak\nointerlineskip
+ {\parskip=0pt\noindent\unskip\indent\bf#1\unskip.\enskip}}%
+ %%\nointerlineskip is nec! %_
+
+ \Def \SubheadingRmNopar #1{%
+ \ifAfterHead\def\this{\nobreak\hRule\nobreak}%
+ \else\let\this\goodbreak\medskip\fi
+ \this\nobreak\noindent{\rm #1\unskip.}\enskip}%
+ %%changeable! %_
+
+ %\Def \Theoremfont{\bf}%_
+ \Def \Theorem #1{\goodbreak\bigskip\par\noindent\Theoremfont #1.
+ \hskip 2pt plus 1pt minus 1pt
+ \begingroup\it
+ \everymath={\ifdim\mathsurround=0pt\def\this{}%
+ \else\def\this{\kern1.5pt}\fi\this}%
+ }%_
+
+ \Def \endTheorem {\endgroup \rm \goodbreak \smallskip}%_
+
+ \Def \Proof#1{\goodbreak \medskip
+ \par\noindent \Prooffont #1\hskip .7pt:\hskip 3pt\rm}%_
+
+ %% A Box for the Quod est demonstrandum:
+\Def\qedbox{\hbox{\vbox{
+ \hrule width0.2cm height0.2pt
+ \hbox to 0.2cm{\vrule height 0.2cm width 0.2pt
+ \hfil\vrule height0.2cm width 0.2pt}
+ \hrule width0.2cm height 0.2pt}\kern1pt}}%_
+
+ %% Typing in \qed makes the qedbox right justified:
+\Def\qed{\ifmmode\qedbox
+ \else\unskip\ \hglue0mm\hfill\qedbox\medskip
+ \goodbreak\fi}%_
+
+ \Def \endProof{\qed\goodbreak\vskip10pt}
+
+ \Def \Remark#1{\medskip \goodbreak\par\noindent{\Remarkfont #1.}}%_
+
+ \Def \endRemark{\medskip \goodbreak}%_
+
+ \Def \Example#1{\Remark {#1}}%_
+ \Def \endExample{\medskip \goodbreak}%_
+
+ \Def \Definition#1{\Remark {#1}}%_
+ \Def \endDefinition{\medskip \goodbreak}%_
+
+ \Def \Cite#1{{\rm\cite{#1}}}%_
+
+ \Def \cite#1{\cite@#1,\endcite@}%_
+ \Def \cite@@#1,{#1}%_
+ \Def \cite@#1,#2\endcite@{\def\temp{#2}%
+ \ifx\temp\empty\relax
+ \def \temp{{\bf[#1]}}%
+ \else\relax
+ \def\temp{{[\bf #1,\rm\ \cite@@#2]}}%
+ \fi\temp}%_
+
+ \def \Benchmark { }
+ \Def \References#1{\begingroup \leftskip=25 pt \parskip=4 pt plus 2 pt
+ \goodbreak \hbox to 1 pt{} \vskip 15 pt plus 10 pt minus 5 pt
+ \centerline{\Headingfont #1}%
+ \frenchspacing \Smallfonts \def \Benchmark{\Refmark}%
+ \def \Refmark##1##2{\par\noindent \llap {##1{##2}\kern 12 pt}\kern 0pt}%
+ \nobreak\vskip 8pt \nobreak}%
+ %%##1##2 secretly is \Cite ##2 %_
+
+ \Def \endReferences {~\unskip\par\endgroup \medskip\goodbreak}%_
+
+
+ \Def \Footnote #1#2{\plainfootnote{#1}{#2}}%_
+
+ %\hbox nec for AMS!!! not Plain
+
+ %Symbols macros
+
+ \Def \preXbox{\hbox{$
+ \vcenter{\hbox{
+ \vrule\vbox to 6.7 pt{
+ \hrule \vfil \hbox to 12 pt{
+ \hfil}%
+ \vfil\hrule}%
+ \vrule}}\hskip 4pt%
+ $}}%_
+
+ \def \Xbox{\raise -.25pt\hbox{\preXbox}}%
+ \def \Nonsense {{~\unskip \kern-3.5 pt %
+ \hbox{\mathsurround=0 pt\Xbox \kern -16.5 pt $>\kern-3pt<$}}}%_
+
+ \Def \Blackbox
+ {\leavevmode\hskip .3pt \vbox{\hrule height 6.9pt
+ \hbox{\hskip 4.5pt}}\hskip .5pt}%
+
+ \Def \<{{$\mathsurround= 0 pt\raise 1.4
+ pt\hbox{$\scriptscriptstyle
+ \langle \kern -1 pt \langle\hskip 2 pt $}$}}%_
+
+ \Def \>{{\mathsurround= 0 pt$\hskip 2 pt \raise 1.4
+ pt\hbox{$\scriptscriptstyle
+ \rangle \kern -1 pt \rangle$}$}}%_
+
+ \Def \Matrix #1{\matrix#1\endmatrix}%_
+
+ \Def \amsMatrix #1\endamsMatrix{\matrix#1\endmatrix}%_
+
+ \Def \amsCases #1\endamsCases{\cases#1\endcases}%_
+
+ %\TagsOnRight
+
+ \def \tagform@#1{\hbox{\rm\Pretag\ignorespaces#1\unskip\Posttag}}%
+ \def \Pretag{(}%
+ \def \Posttag{)}%
+ \def \Eqno #1$${\def\Pretag{}\def\Posttag{}%
+ \tag\Admin{#1}$$}%
+ %^%% too subtle for auditor.tex %_
+
+ \Def \Multline#1\endMultline#2$${\def\Pretag{}\def
+ \Posttag{}\def\Eqno{}
+ \multline#1\endmultline\tag\Admin{#2\hbox to 1sp{}}$$}%_
+
+ \Def \bigMidvert{\kern4pt \big \vert \kern4pt}%_
+
+ \Def \Midvert{\kern3pt \vert \kern3pt}%_
+
+ \Def \Sharp {\mathord{\#}}%_
+
+ \Def \bigConnectedsum {\mathop{\#}\limits}%_
+
+ \Def \Coprod {\mathop{\raise 1.2pt \hbox{$\coprod$}}\limits}%_
+
+ \Def \Lim {\lim\limits}%_
+
+ \Def \Lbrack {{$[\![$}}%_
+
+ \Def \Rbrack {{$]\!]$}}%_
+
+
+ %%% Binomial coef trick macros mentioned in Sweet-teX manual (rare)
+ \Def \Rparen {\right )}%_
+ \Def \Lparen {\futurelet\next \Lptaupe}%
+ \def \Lptaupe{\ifx \next ^ \let\this\LLparen
+ \else \let\this\LLLparen \fi\this}%
+ \def \LLparen {\left ( \Atop}%
+ \def \Atop ^#1_#2{{#1\atop#2}}%
+ \def \LLLparen {\left (}%_
+
+
+ %^%%%%%%%%%%%%%%%% Accents were here%_
+
+ \Def \Cdot{\mathbin{\raise .4 ex \hbox to 3pt {\hss\bf .\hss}}}%_
+
+ \Def \llonguparrow{\bigg\uparrow}%_
+
+ \Def \llongdownarrow{\bigg\downarrow}%_
+
+ %\def \Limgadget #1{\mathrel {\kern-2p\mathop
+ % {\kern3pt #1\kern3pt}\limits}}
+ %%no; redo correctly to replace following? %_
+
+ \Def \llongrightarrow{\kern1pt\mathop
+ {\kern0pt\longrightarrow\kern1pt}\limits}%_
+
+ \Def\llongleftarrow
+ {\kern-2pt\mathop{\kern3pt\longleftarrow\kern3pt}\limits}%_
+
+ \Def \llongtwoheadrarrow {\kern-2pt
+ \mathop{\kern3pt\longrightarrow \kern-14pt
+ \longrightarrow\kern3pt}\limits}%_
+
+ \Def \llongleftrightarrow {\kern-2pt
+ \mathop{\kern3pt\longleftrightarrow\kern3pt}\limits}%_
+
+ \Def \llongmapsto {\kern-2pt
+ \mathop{\kern3pt\longmapsto\kern3pt}\limits}%_
+
+ \Def \rarrow{\rightarrow}%_
+ \Def \larrow{\leftarrow}%_
+
+ \def\Matrix#1{\matrix #1 \endmatrix}
+ %tabs inactivated too! %_
+
+ %^%%%%%%%%%%%%%%%%%%%%%%%%%% CD macros were here%_
+
+ \Def\Trademark{\hbox{\Admin{{}^{\scriptscriptstyle TM}}}}%_
+
+ \Def \AmS{{\textfontii A}\kern -.1667em\lower .5ex\hbox {%
+ \textfontii M}\kern -.125em{\textfontii S}}%_
+
+ %\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
+ % T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+ \Def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox
+ {\smc a}\kern-.15em\TeX}}%_
+
+ \Def \Enskip{{\hskip 4pt plus3pt minus2pt}}%_
+
+ \def\Undef{\Nonsense}
+
+ %The following correspond to rare Sweet-teX symbols,
+ %and will produce a X'ed box on your TeX printout
+ %until something better is devised
+ \Def\Bigasterisk{\Undef}%_
+ \Def\Control{\Undef}%_
+ \Def\llongrightarrowtail{\Undef}%_
+ \Def\llongswarrow{\Undef}%_
+ \Def\llongsearrow{\Undef}%_
+ \Def\llongnwarrow{\Undef}%_
+ \Def\llongnearrow{\Undef}%_
+ \Def\llongtwoheadrightarrow{\mathbin
+ {{\longrightarrow} \kern -1850\mu {\rightarrow}}}%_
+
+ \Def \Longeq {\mathop{=\kern-5pt=}\limits}%_
+
+ \Def\Break{\break}%_
+
+ \output{\plainoutput} %%% change if amsppt.sty used
+ \headline{\hss}
+
+ \ifx\undefined\eightpoint
+ \Def\eightpoint{}
+ \fi %_
+
+\catcode`\@=13
+
+
+\Def\dim{\text{\,dim\,}}
+\Def\ch{\text{\,ch\,}}
+\Def\Td{\text{Td}}
+\Def\max{\text{\,max\,}}
+\Def\Pf{\text{\,Pf\,}}
+\Def\End{\text{\,End\,}}
+\Def\loc{\text{\,loc\,}}
+\Def\vol {\text{\,vol\,}}
+\Def\Tr {\text{\,Tr\,}}
+
+
+\endinput
+
diff --git a/macros/generic/occam/Occam94-old/sample.dir/Kohler-ori.sty b/macros/generic/occam/Occam94-old/sample.dir/Kohler-ori.sty
new file mode 100644
index 0000000000..a3009632ad
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/sample.dir/Kohler-ori.sty
@@ -0,0 +1,247 @@
+ % RESOURCEamspptSimple ;
+ % Assumes AmSTeX(version2) loaded, but NOT AmSppt.sty
+ % These macros are intentionally simple minded and have
+ % simple syntax; this permits easy alteration (TeX macros are usually
+ % very devious). Don't hesitate to make alterations,
+ % but in that case rename this file!
+
+ %%% avoid double input
+
+ %avoid double input
+ \bgroup
+ \catcode`\!=12
+ \ifx\RESOURCEams\relax
+ \immediate\write16{}%
+ \message{ !!! RESOURCEams macros already defined !!!}
+ \gdef\RESOURCEams{\endinput}%
+ \else \global\let\RESOURCEams\relax
+ \fi
+ \egroup
+ \RESOURCEams
+
+ \catcode`\@=11
+
+ %%% The following macros will make you call upon auxiliary files
+ %% when needed.
+ \bgroup
+ \catcode`\!=12
+ \gdef\Acc{%\show\Acc%
+ \errmessage{ !!! You need to input RESOURCEamsAcc.tex !!!}\end
+ }
+ \gdef\amsCD{%
+ \errmessage{ !!! You need to input RESOURCEamsCD.tex !!!}\end
+ }
+ \gdef\gLinefigure{%
+ \errmessage{ !!! You need to input RESOURCEfig.tex !!!}\end
+ }
+ \egroup
+
+ %%% Font macros
+ %%
+
+ \def\Bf#1{{\bf#1}}
+
+ \def \Bi #1{{\bi{#1}\unskip\/}}
+
+ \def \Admin #1{\begingroup\mathsurround=0 pt
+ \leavevmode%p222-3: \hskip -\lastskip for \unskip
+ \ifmmode\hbox{$\roman{{#1}}$}\else$\roman{{#1}}$\fi
+ \endgroup }%{{}} prevents misinterpretation of naked numbers
+
+ %%% Logical formatting
+ %%
+
+ \font \titlefont=cmbx10 scaled 1200
+ \long\def\Title#1\endTitle{\heading\titlefont#1\endheading}
+
+\long\def\Author#1\endAuthor{\heading\smc #1\endheading}
+
+\def\Subheading{\medskip\goodbreak\subheading}
+\let\SubheadingA\Subheading
+\let\SubheadingB\Subheading
+\let\SubheadingC\Subheading
+
+ \let \Theorem\proclaim
+ \let \endTheorem\endproclaim
+
+ %\let\Proof\demo %% make substitution by hand
+ %\let\endProof\enddemo
+
+ \def\Proof{\medskip\goodbreak\noindent
+ \hbox{\it Proof.\kern 1em}\ignorespaces}
+
+ %% A Box for the Quod est demonstrandum:
+ \def\qedbox{\hbox{\vbox{
+ \hrule width0.2cm height0.2pt
+ \hbox to 0.2cm{\vrule height 0.2cm width 0.2pt
+ \hfil\vrule height0.2cm width 0.2pt}
+ \hrule width0.2cm height 0.2pt}\kern1pt}}
+
+ %% Typing in \qed makes the qedbox right justified:
+ \def\qed{\ifmmode\qedbox
+ \else\unskip\ \hglue0mm\hfill\qedbox\medskip
+ \goodbreak\fi}
+
+ \def \Remark#1{\medskip \goodbreak\par\noindent{\smc #1.}}
+ \def \endRemark{\medskip \goodbreak}
+
+ \def \Example#1{\Remark {#1}}
+ \def \endExample{\medskip \goodbreak}
+
+ \def \Definition#1{\Remark {#1}}
+ \def \endDefinition{\medskip \goodbreak}
+
+ \def\ItemStyle{\bold}%
+ \def \Item #1{\smallskip
+ \ifhmode\else\nointerlineskip\fi
+ {\parskip=4pt\noindent
+ \hbox{$\def\let\relax\let\bf\relax\ItemStyle{{#1}}$}\enskip}}
+
+ \def \Itemitem #1{\itemitem{\hbox{$\def\let\relax\let\bf\relax%
+ \ItemStyle{#1}$}}}
+
+ \def \Benchmark { }
+ \def \References#1{\begingroup \leftskip=25 pt \parskip=4 pt plus 2 pt
+ \goodbreak \hbox to 1 pt{} \vskip 15 pt plus 10 pt minus 5 pt
+ \centerline{\bf #1}
+ \frenchspacing \def \Benchmark{\Refmark }
+ \def \Refmark##1\cite ##2{%
+ \par\noindent \llap{\null\cite{##2}\quad}\kern 0pt}
+ \nobreak\vskip 8pt \nobreak}
+
+ \def \endReferences {~\unskip\par\endgroup \medskip\goodbreak }
+
+ \def \Footnote #1#2{\plainfootnote{#1}{#2}}
+
+ %Symbols macros
+
+ \def \preXbox{\hbox{$
+ \vcenter{\hbox{
+ \vrule\vbox to 6.7 pt{
+ \hrule \vfil \hbox to 12 pt{
+ \hfil}%
+ \vfil\hrule}%
+ \vrule}}\hskip 4pt%
+ $}}
+
+ \def \Xbox{\raise -.25pt\hbox{\preXbox}}
+
+ \def \Nonsense {{~\unskip \kern-3.5 pt %
+ \hbox{\mathsurround=0 pt\Xbox \kern -16.5 pt $>\kern-3pt<$}}}
+
+ \def \Blackbox
+ {\leavevmode\hskip .3pt \vbox{\hrule height 6.9pt
+ \hbox{\hskip 4.5pt}}\hskip .5pt}%
+
+ \def \<{{$\mathsurround= 0 pt\raise 1.4
+ pt\hbox{$\scriptscriptstyle
+ \langle \kern -1 pt \langle\hskip 2 pt $}$}}
+
+ \def \>{{\mathsurround= 0 pt$\hskip 2 pt \raise 1.4
+ pt\hbox{$\scriptscriptstyle
+ \rangle \kern -1 pt \rangle$}$}}
+
+ \def \Matrix #1{\matrix#1\endmatrix}
+
+ \def \amsMatrix #1\endamsMatrix{\matrix#1\endmatrix}
+
+ \def\amsCases #1\endamsCases{\cases#1\endcases}
+
+ \def\tagform@#1{\hbox{\rm\Pretag\ignorespaces#1\unskip\Posttag}}
+ \def\Pretag{(}
+ \def\Posttag{)}
+
+ \def\Eqno #1$${\def\Pretag{}\def\Posttag{}
+ \tag"\Admin{#1}"$$}
+
+ \def \Multline#1\endMultline#2$${\def\Pretag{}\def\Posttag{}
+ \def\Eqno{}\multline#1\endmultline\tag"\Admin{#2\hbox to 1sp{}}"$$}
+
+ \def \bigMidvert{\kern4pt \big \vert \kern4pt}
+
+ \def \Midvert{\kern3pt \vert \kern3pt}
+
+ \def \Sharp {\mathord{\#}}
+
+ \def \bigConnectedsum {\mathop{\#}\limits}
+
+ \def \Coprod {\mathop{\raise 1.2pt \hbox{$\coprod$}}\limits}
+
+ \def \Lim {\lim\limits}
+
+ \def \Lbrack {{$[\![$}}
+
+ \def \Rbrack {{$]\!]$}}
+
+ %%% Binomial coef trick macros mentioned in Sweet-teX manual (rare)
+ %%
+ \def \Rparen {\right ) }
+ \def \Lparen {\futurelet\next \Lptaupe}
+ \def\Lptaupe{\ifx \next ^ \let\this\LLparen
+ \else \let\this\LLLparen \fi\this}
+ \def\LLparen {\left ( \Atop }
+ \def \Atop ^#1_#2{{#1\atop#2}}
+ \def\LLLparen {\left (}
+
+ %%%%%%%%%%%%%%%% Accents were here
+
+ \def \circleover #1{\overset\circ\to {#1}}
+
+ \def \Cdot{\mathbin{\raise .4 ex \hbox to 3pt {\hss\bf .\hss}}}
+
+ \def \llonguparrow{\bigg\uparrow }
+
+ \def \llongdownarrow{\bigg\downarrow}
+
+ \def \llongrightarrow{\kern 1pt\mathop
+ {\kern0pt\longrightarrow\kern1pt}\limits}
+
+ \def \llongleftarrow{\kern-2pt\mathop
+ {\kern3pt\longleftarrow\kern3pt}\limits}
+
+ \def \llongtwoheadrarrow {\kern-2pt
+ \mathop{\kern3pt\longrightarrow \kern-14pt
+ \longrightarrow\kern3pt}\limits}
+
+ \def \llongleftrightarrow {\kern-2pt
+ \mathop{\kern3pt\longleftrightarrow\kern3pt}\limits}
+
+ \def \llongmapsto {\kern-2pt
+ \mathop{\kern3pt\longmapsto\kern3pt}\limits}
+
+
+ %%%%%%%%%%%%%%%%% CD macros were here
+
+ \def\Trademark{\hbox{\Admin{{}^{\scriptscriptstyle TM}}}}
+
+ \def \AmS{{\textfontii A}\kern -.1667em\lower .5ex\hbox {\textfontii
+ M}\kern -.125em{\textfontii S}}
+
+ \def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\smc a}\kern-.15em
+ \TeX}}
+
+ \def\Undef{\Nonsense }
+
+ %The following correspond to rare Sweet-teX symbols,
+ %and will produce a X'ed box on your TeX printout
+ %until something better is devised
+ \def\Bigasterisk{\Undef}
+ \def\Control{\Undef}
+ \def\llongrightarrowtail{\Undef}
+ \def\llongswarrow{\Undef }
+ \def\llongsearrow{\Undef }
+ \def\llongnwarrow{\Undef }
+ \def\llongnearrow{\Undef }
+ \def\llongtwoheadrightarrow{\mathbin
+ {{\longrightarrow} \kern -1850\mu {\rightarrow}}}
+
+ \def \Longeq {\mathop{=\kern-5pt=}\limits }
+
+%%%% 4 lines in case cmex pointsizes missing
+ \font\eightex=cmex10 at 8pt \skewchar\eightex='60
+ \font\sevenex=cmex10 at 7pt \skewchar\sevenex='60
+ \font\sixex=cmex10 at 6pt \skewchar\sixex='60
+ \tenpoint
+
+ \catcode`\@=13 %active
+
diff --git a/macros/generic/occam/Occam94-old/sample.dir/Kohler.sty b/macros/generic/occam/Occam94-old/sample.dir/Kohler.sty
new file mode 100644
index 0000000000..bfac833af1
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/sample.dir/Kohler.sty
@@ -0,0 +1,277 @@
+
+ %% auxilliary macros file named
+ %% Kohler.sty
+ %% needed by the .tex file: Kohler.sty
+ %% Date: 29 June, 1994
+ %% Contact: Martine, email: sectop@matups.matups.fr
+
+ %%% Avoid double input
+ %%
+ \bgroup
+ \catcode`\!=12
+ \ifx\auxmacros\relax
+ \immediate\write16{}%
+ \message{ !!! auxmacros already defined !!!}
+ \gdef\auxmacros{\endinput}%
+ \else \global\let\auxmacros\relax
+ \fi
+ \egroup
+ \auxmacros
+
+ \catcode`\@=11
+
+ %%% The following macros will make you call upon auxiliary files
+ %% when needed. %
+ \bgroup
+ \catcode`\!=12 %
+ \egroup
+
+ %%% FONTDEFams stuff defines your fonts;
+ %% depends on your TeX printing system;
+
+ %%TimesB scaled 1500
+ \font \bigbf=cmbx12 %
+
+ \font \smc=cmcsc10 % %
+
+ %\Font \smallbi=cmbti9 %rare %
+ %\Font \smallsmc=cmcsc9 %rare %
+
+ %\Font \ss=cmss10 %
+ %\Font \ssb=cmssbx10 %
+ %\Font \ssi=cmssi10 %
+ %\Font \ssbi=cmssbi10 %rare %
+
+ %\def \bi{\textbf}
+
+ %\Def \Smc#1{{\smc #1}}%
+ %\Def \Bold#1{{\bold #1}}%
+
+ %%% Improve following
+ %\Def \Smallfonts {\def\rm{\smallrm} %
+ %\Def\it{\smallit}\def\bf{\smallbf}%
+ % \def\smc{\smallsmc}}%
+ %\Def \Smallfonts {\eightpoint}%
+ \def \Smallfonts {\relax}%
+
+ \def \Titlefont {\bigbf}%
+ \def \Authorfont {\smc}%
+ \def \Headingfont {\bf}%
+ \def \Theoremfont {\smc}%
+ \def \Prooffont {\smc}%
+ \def \Remarkfont {\smc}%
+
+ % Font macros
+
+ \long\def \It #1{{\it{#1}\unskip\/}}%
+
+ \def \Bold #1{{\bold #1}}%
+
+ % \Def\Bbb#1{{\relaxnext@\ifmmode\let\next\Bbb@\else
+ % \def\next{
+ % \Err@{Use \string\Bbb\space only in mathmode}}\fi
+ % \next{#1}}}%
+
+ %\def \leftAdmin{\begingroup\mathsurround=0 pt$}%
+ %\def \rightAdmin{$\endgroup}%
+
+ \def \Admin #1{\begingroup\mathsurround=0 pt
+ \leavevmode%p222-3: \hskip -\lastskip for \unskip
+ \ifmmode\hbox{$\roman{{#1}}$}\else$\roman{{#1}}$\fi
+ \endgroup}%
+ %%{{}} prevents misinterpretation of naked numbers %
+
+ %%% Logical formatting
+ %%
+
+ \newif\ifAfterHead
+
+ \def \hRule{}%%=\hrule for diagnosis %
+
+ \everypar={\global\AfterHeadfalse}%
+
+ %% \Title block begins
+\newskip\TitleLineskip
+ \TitleLineskip=4pt
+ \def \DeepCr{\unskip\hfil\egroup\par\hfil\bgroup}%
+ \def \\#1{%
+ \def\test{#1}%
+ \ifx \test\space\def\this{\DeepCr}\else\def\this{\DeepCr #1}\fi
+ \this}
+ \def \Title{\goodbreak
+ \ifdim\pagetotal>.70\pagegoal
+ \def\this{\vfill\eject}
+ \else\def\this{}\fi \this
+ \vbox\bgroup\Titlefont\def\cr{\DeepCr}
+ \parindent=0 pt\parskip= 0 pt
+ \Titlefont\baselineskip=\fontdimen6\font
+ \lineskip=\TitleLineskip%
+ \lineskiplimit=\baselineskip%
+ \advance\lineskiplimit by -1ex %
+ \hbox to 0pt{}\vskip15pt plus 15pt\bigskip
+ \bgroup \hfil}
+ \def \endTitle {\unskip\hfil\egroup\par \egroup\medskip}
+ %% end of \Title block %
+
+ %% \Author block begins
+ \newskip\AuthorLineskip
+ \AuthorLineskip=5pt plus 5pt
+ \def \Author{\nobreak\vskip 20Pt plus 10pt minus 5pt\nobreak
+ \vbox\bgroup\Authorfont\def\cr{\DeepCr}
+ \parindent=0 pt\parskip= 0 pt
+ \Titlefont\baselineskip=\fontdimen6\font
+ \advance\baselineskip by \AuthorLineskip%
+ \bgroup \hfil}%
+ \def \endAuthor {\unskip\hfil\egroup\par \egroup\medskip}%
+
+ %\Def \Heading{\redefine\headingfont{\Headingfont}\heading}%
+ %ams ppt sty, not yet used
+ %\Def \endHeading{\endheading \redefine\headingfont{\smc}}%
+
+ \def \ItemStyle{\Bold}%
+ \def \Item #1{\ifAfterHead\def\this{\nobreak\hRule\nobreak}%\vskip1pt
+ \else\def\this{\smallskip}\fi
+ \ifhmode\else\nointerlineskip\fi
+ \this{\parskip=4pt\noindent
+ \hbox{$\let\bf\relax
+ \ItemStyle{{#1}}$}\enskip}\AfterHeadfalse}%
+
+ %\def \Item #1{\item{\def\Bf{}\hbox{$\Bold{{#1}}$}}}%
+ %%simpler def with snugness to heading above
+ % \Def \Itemitem #1{\itemitem{\def\Bf{}\hbox{$\Bold{{#1}}$}}}%
+ %%The \Bf kill necessitated by some nightmare in AmSTeX?? %
+
+ \def \Subheading #1{\SubheadingBoldPar{#1}\AfterHeadtrue}%
+
+ \edef\everymathholder{\noexpand\AfterHeadfalse\the\everymath}%
+ \expandafter\everymath\expandafter{\everymathholder}%
+
+ \def \SubheadingBoldPar #1{%
+ \ifAfterHead\def\this{\nobreak\hRule\nobreak}%
+ \else\def\this{\goodbreak\vskip 10pt plus 2pt\goodbreak
+ \vbox to 0pt{\vss}\smallskip\nobreak}\fi\this
+ \nobreak\noindent{\unskip\bf#1\hfill}\nobreak\vskip0pt
+ \nobreak
+ }%
+
+ %\Def \Theoremfont{\bf}%
+ \def \Theorem #1{\goodbreak\bigskip\par\noindent\Theoremfont #1.
+ \hskip 2pt plus 1pt minus 1pt
+ \begingroup\it
+ \everymath={\ifdim\mathsurround=0pt\def\this{}%
+ \else\def\this{\kern1.5pt}\fi\this}%
+ }%
+
+ \def \endTheorem {\endgroup \rm \goodbreak \smallskip}%
+
+ \def \Proof#1{\goodbreak \medskip
+ \par\noindent \Prooffont #1\hskip .7pt:\hskip 3pt\rm}%
+
+ %% A Box for the Quod est demonstrandum:
+\def\qedbox{\hbox{\vbox{
+ \hrule width0.2cm height0.2pt
+ \hbox to 0.2cm{\vrule height 0.2cm width 0.2pt
+ \hfil\vrule height0.2cm width 0.2pt}
+ \hrule width0.2cm height 0.2pt}\kern1pt}}%_
+
+ %% Typing in \qed makes the qedbox right justified:
+\def\qed{\ifmmode\qedbox
+ \else\unskip\ \hglue0mm\hfill\qedbox\medskip
+ \goodbreak\fi}%_
+
+ \def \endProof{\qed\goodbreak\vskip10pt}
+
+
+ \def \Remark#1{\medskip \goodbreak\par\noindent{\Remarkfont #1.}}%
+
+ \def \Definition#1{\Remark {#1}}%
+ \def \endDefinition{\medskip \goodbreak}%
+
+ \def \cite#1{\cite@#1,\endcite@}%
+ \def \cite@@#1,{#1}%
+ \def \cite@#1,#2\endcite@{\def\temp{#2}%
+ \ifx\temp\empty\relax
+ \def \temp{{\bf[#1]}}%
+ \else\relax
+ \def\temp{{[\bf #1,\rm\ \cite@@#2]}}%
+ \fi\temp}%
+
+ \def \Benchmark { }
+ \def \References#1{\begingroup \leftskip=25 pt \parskip=4 pt plus 2 pt
+ \goodbreak \hbox to 1 pt{} \vskip 15 pt plus 10 pt minus 5 pt
+ \centerline{\Headingfont #1}%
+ \frenchspacing \Smallfonts \def \Benchmark{\Refmark}%
+ \def \Refmark##1##2{\par\noindent \llap {##1{##2}\kern 12 pt}\kern 0pt}%
+ \nobreak\vskip 8pt \nobreak}%
+ %%##1##2 secretly is \Cite ##2 %
+
+ \def \endReferences {~\unskip\par\endgroup \medskip\goodbreak}%
+
+ %\hbox nec for AMS!!! not Plain
+
+ %Symbols macros
+
+ \def \Xbox{\raise -.25pt\hbox{\preXbox}}%
+ \def \Nonsense {{~\unskip \kern-3.5 pt %
+ \hbox{\mathsurround=0 pt\Xbox \kern -16.5 pt $>\kern-3pt<$}}}%
+
+ \def \Blackbox
+ {\leavevmode\hskip .3pt \vbox{\hrule height 6.9pt
+ \hbox{\hskip 4.5pt}}\hskip .5pt}%
+
+ \def \<{{$\mathsurround= 0 pt\raise 1.4
+ pt\hbox{$\scriptscriptstyle
+ \langle \kern -1 pt \langle\hskip 2 pt $}$}}%
+
+ \def \>{{\mathsurround= 0 pt$\hskip 2 pt \raise 1.4
+ pt\hbox{$\scriptscriptstyle
+ \rangle \kern -1 pt \rangle$}$}}%
+
+ %\TagsOnRight
+
+ \def \tagform@#1{\hbox{\rm\Pretag\ignorespaces#1\unskip\Posttag}}%
+ \def \Pretag{(}%
+ \def \Posttag{)}%
+ \def \Eqno #1$${\def\Pretag{}\def\Posttag{}%
+ \tag\Admin{#1}$$}%
+
+ \def \Multline#1\endMultline#2$${\def\Pretag{}\def
+ \Posttag{}\def\Eqno{}
+ \multline#1\endmultline\tag\Admin{#2\hbox to 1sp{}}$$}%
+
+ %\def \Limgadget #1{\mathrel {\kern-2p\mathop
+ % {\kern3pt #1\kern3pt}\limits}}
+ %%no; redo correctly to replace following? %
+
+ \def \llongrightarrow{\kern1pt\mathop
+ {\kern0pt\longrightarrow\kern1pt}\limits}%
+
+ \def\Matrix#1{\matrix #1 \endmatrix}
+ %tabs inactivated too! %
+
+ %\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
+ % T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+ \def\Undef{\Nonsense}
+
+ \output{\plainoutput} %%% change if amsppt.sty used
+ \headline{\hss}
+
+ \ifx\undefined\eightpoint
+ \def \eightpoint{}
+ \fi %
+
+\catcode`\@=13
+
+ \def \dim{\text{\,dim\,}}
+ \def \ch{\text{\,ch\,}}
+ \def \Td{\text{Td}}
+ \def \max{\text{\,max\,}}
+ \def \Pf{\text{\,Pf\,}}
+ \def \End{\text{\,End\,}}
+ \def \loc{\text{\,loc\,}}
+ \def \vol {\text{\,vol\,}}
+ \def \Tr {\text{\,Tr\,}}
+
+\endinput
+
diff --git a/macros/generic/occam/Occam94-old/sample.dir/Kohler.tex b/macros/generic/occam/Occam94-old/sample.dir/Kohler.tex
new file mode 100644
index 0000000000..9ba9d3e171
--- /dev/null
+++ b/macros/generic/occam/Occam94-old/sample.dir/Kohler.tex
@@ -0,0 +1,1169 @@
+
+%\input amstex
+%\input amsppt.sty
+
+\input Kohler.sty
+
+ \hsize= 14truecm
+
+\Title
+Analytic torsion forms on torus fibrations
+\endTitle
+\bigskip
+\bigskip
+
+\Author
+Kai K{\"O}HLER
+\endAuthor
+\vskip 20mm
+
+{
+{\noindent\smc abstract} : \eightpoint We construct
+analytic torsion forms on holomorphic Torus
+fibrations, which are not necessarily K{\"a}hler
+fibrations. This is done by doubly transgressing the
+top Chern class. Also we establish a corresponding
+double transgression formula and an anomaly formula.
+}
+
+
+\Subheading {0. Introduction} The purpose of this
+paper is to construct analytic torsion forms for torus
+fibrations, which are not necessarily K{\"a}hler
+fibrations. These forms are needed to construct direct
+images in the hermitian $K$-theory, which was
+developped by Gillet and Soul\'e \cite{GS1} in the
+context of Arakelov geometry.
+
+Let $\pi :M\rightarrow B$ be a holomorphic submersion
+with compact basis $B$, compact fibres $Z$ and a
+K{\"a}hler metric $g^{TZ}$ on the fibres. Let $\xi $
+be a holomorphic vector bundle on $M$, equipped with a
+hermitian metric $h^{\xi }$. Then one could try to
+define analytic torsion forms $T$ associated to $\pi
+$, i.e. real forms on $B$, sums of forms of type
+$(p,p)$, defined modulo~$\partial $- and $\overline
+\partial $-coboundaries. They have to satisfy a
+particular double transgression formula and when the
+metrics $g^{TZ}$ and $h^{\xi }$ change, they have to
+change in a special way to make the forms ``natural''
+in Arakelov geometry. They must not depend on metrics
+on $B$, and their component in degree zero should be
+the logarithm of the ordinary Ray-Singer torsion
+\cite{RS}.
+
+Such forms were first constructed by Bismut, Gillet
+and Soul\'e \cite{BGS2, Th.2.20} for locally
+K{\"a}hler fibrations and $H^{*}(Z_{b},\xi
+\vert_{Z_{b}})=0\enskip \forall b\in B$. Gillet and
+Soul\'e \cite{GS2} and after them Faltings \cite{F}
+suggested definitions for more general cases. Then
+Bismut and the author gave in \cite{BK} an explicit
+construction of torsion forms $T$ for K{\"a}hler
+fibrations with $\dim H^{*}(Z_{b},\xi
+\vert_{Z_{b}})=\text{const. on }B$. $T$ satisfies the
+double transgression formula
+$$
+{\overline \partial \partial \over 2\pi i}T=
+\ch\big(H^{*}(Z,\xi \vert_{Z}),h^{H^{*}(Z,\xi
+\vert_{Z})}\big)
+ -\displaystyle \int
+_{Z}\Td(TZ,g^{TZ})\ch(\xi ,h^{\xi })
+\Eqno (0.0)$$
+and for two pairs of metrics $(g_{0}^{TZ},h_{0}^{\xi
+})$ and $(g_{1}^{TZ},h_{1}^{\xi })$,
+ $T$ satisfies the anomaly formula
+$$\Multline
+T(g_{1}^{TZ},h_{1}^{\xi })-T(g_{0}^{TZ},h_{0}^{\xi })
+ =\widetilde {\ch}(H^{*}(Z,\xi
+\vert_{Z}),h_{0}^{H^{*}(Z,\xi
+\vert_{Z})},h_{1}^{H^{*}(Z,\xi \vert_{Z})}) \\
+-\displaystyle \int _{Z}\left(\widetilde
+{\Td}(TZ,g_{0}^{TZ},g_{1}^{TZ})
+ \ch(\xi ,h^{\xi
+}_{0})+\Td(TZ,g_{1}^{TZ})\widetilde {\ch}(\xi
+,h_{0}^{\xi },h_{1}^{\xi })\right)
+\endMultline
+\Eqno (0.1)$$
+modulo $\partial $- and $\overline \partial
+$-coboundaries. Here $\int _{Z}$ denotes the integral
+along the fibres, $\Td$ and $\ch$ are the Chern-Weil
+forms associated to the corresponding holomorphic
+hermitian connections and $\widetilde {\Td}$ and
+$\widetilde {\ch}$ denote Bott-Chern forms as
+constructed in \cite{BGS1, {\S }1f}.
+
+In this paper, we shall construct analytic torsion
+forms $T$ in the following situation: consider a
+holomorphic hermitian vector bundle $\pi
+:(E^{1,0},g^{E})\rightarrow B$ on a compact complex
+manifold. Let $\Lambda $ be a lattice, spanning the
+underlying real bundle $E$ of $E^{1,0}$, so that local
+sections of $\Lambda $ are holomorphic sections of
+$E^{1,0}$. Then the fibration $E/\Lambda \rightarrow
+B$ is a holomorphic torus fibration which is not
+necessarily flat as a complex fibration.
+
+In this situation, $H^{*}(Z,{\Cal O}_{Z})=\Lambda
+^{*}E^{*0,1}$. Classically, the formula
+$$
+\ch(\Lambda ^{*}E^{*0,1})={c_{\max}\over \Td}(E^{0,1})
+\Eqno (0.2)
+$$
+holds on the cohomological level (see e.g. \cite{H,
+Th.10.11}). If one assumes supplementary that the
+volume of the fibres $Z$ is equal to 1, (0.2) holds
+also on the level of forms for the associated
+Chern-Weil forms. Thus, (0.1) suggests that $T$ should
+satisfy
+$$
+{\overline \partial \partial \over 2\pi i}T(E/\Lambda
+,g^{E})={c_{\max}\over \Td}(E^{0,1},g^{E})\enskip
+\enskip .\Eqno (0.3)
+$$
+
+For two hermitian structures $g_{0}^{E}$ and
+$g_{1}^{E}$ on $E$, one should find the following
+anomaly formula
+$$
+T(E/\Lambda ,g_{1}^{E})-T(E/\Lambda ,g_{0}^{E})
+=\widetilde
+{\Td^{-1}}(g_{0}^{E},g_{1}^{E})c_{\max}(g_{0}^{E})+%'
+\Td^{-1}(g_{1}^{E})\widetilde
+{\ch}(g_{0}^{E},g_{1}^{E})\enskip . \Eqno (0.4)
+$$
+
+In this paper, such a $T$ will be constructed by
+explicitly doubly transgressing the top Chern class of
+$E^{0,1}$, which was proven to be 0 in cohomology by
+Sullivan \cite{S}.
+
+Our method is closely following an article of Bismut
+and Cheeger \cite{BC}, in which they investigate eta
+invariants on real {\Blackbox}{\Blackbox} $(2n,{\Bbb
+Z})$ vector bundles. In this article, they are
+considering a quotient of a Riemannian vector bundle
+by a lattice bundle. Then they found a Fourier
+decomposition of the infinite dimensional bundle of
+sections on the fibres $Z$, which allowed them to
+transgress the Euler class explicitly via an
+Eisenstein series $\gamma $, i.e.
+$$
+d\gamma =\Pf\left({\Omega ^{E}\over 2\pi
+}\right)\enskip \enskip ,$$
+where $\Pf$ denotes the Pfaffian and $\Omega ^{E}$ the
+curvature.
+
+The case considered here is a bit more sophisticated
+because not only the metric but also the complex
+structure has not to have any direct relation with the
+flat structure. It turns out that the right choice for
+the holomorphic structure on $E^{0,1}$ is not, as in
+\cite{BK}, the by the metric induced structure, but an
+exotic holomorphic structure canonically induced by
+the flat structure on $E$ and the holomorphic
+structure on $E^{1,0}$.
+
+We want to emphasize that here, as in \cite{BC}, the
+use of certain formulas in the Mathai-Quillen calculus
+\cite{MQ} is crucial. The formulas which we are using
+were established by Bismut, Gillet and Soul\'e in
+\cite{BGS5}.
+
+\Subheading {I. Definitions} Let $\pi
+:E^{1,0}\rightarrow B$ be a $n$-dimensional
+holomorphic vector bundle on a compact complex
+manifold $B$, with underlying real bundle $E$. Assume
+a lattice bundle $\Lambda \subset E$, spanning the
+realisation of $E^{1,0}$, so that a local section of
+$\Lambda $ induces a holomorphic section of $E^{1,0}$.
+Let $M$ be the total space of the fibration $E/\Lambda
+$, where the fibre $Z_{x}$ over a point $x\in B$ is
+given by the torus $E_{x}/\Lambda _{x}$. We call $J$
+the different complex structures acting on $E$, $TM$
+or $TB$ with $J\circ J=-1$.
+
+Let $E^{*}$ be the dual bundle to $E$, equipped with
+the complex structure
+$$
+(J\mu )(\lambda ):=\mu (J\lambda )\enskip \enskip
+\enskip \forall \mu \in E^{*}\enskip ,\enskip \enskip
+\lambda \in E\enskip \enskip . \Eqno (1.0)
+$$
+
+In the same way, one defines $T^{*}B$ and $T^{*}M$. We
+get
+$$E^{1,0}=\lbrace \lambda \in E\otimes {\Bbb C}\vert
+J\lambda =i\lambda \rbrace \enskip \enskip , \Eqno
+(1.1)
+$$
+$$
+E^{0,1}=\lbrace \lambda \in E\otimes {\Bbb C}\vert
+J\lambda =-i\lambda \rbrace \enskip \enskip , \Eqno
+(1.2)
+$$
+and similar equations for $E^{*\,1,0}$, $E^{*\,0,1}$,
+$T^{1,0}M$, $T^{0,1}M$, etc.
+
+
+For $\lambda \in E$, we define
+$$
+ \lambda ^{1,0}:={\textstyle {1\over 2}}(\lambda
+-iJ\lambda )\enskip \enskip \enskip \text{and}\enskip
+\enskip \enskip \lambda ^{0,1}:={\textstyle {1\over
+2}}(\lambda +iJ\lambda )\enskip \enskip , \Eqno (1.3)
+$$
+and in the same manner maps $E^{*}\rightarrow
+E^{*\,1,0}$, $TB\rightarrow T^{1,0}B$, etc. Let
+$\Lambda ^{*}\in E^{*}$ be the dual lattice bundle
+$$
+ \Lambda ^{*}:=\lbrace \mu \in E^{*}\vert \mu (\lambda
+)\in 2\pi {\Bbb Z}\enskip \forall \lambda \in \Lambda
+\rbrace \enskip \enskip . \Eqno (1.4)
+$$
+We set $\Lambda ^{1,0}:=\lbrace \lambda ^{1,0}\vert
+\lambda \in \Lambda \rbrace $, similar for $\Lambda
+^{0,1}$, $\Lambda ^{*\,1,0}$ and $\Lambda ^{*\,0,1}$.
+Also we fix a Hermitian metric $g^{E}=\left \langle
+\enskip ,\enskip \right \rangle $ on $E$, i.e. a
+Riemannian metric with the property
+$$
+ \left \langle J\lambda ,J\eta \right \rangle =\left
+\langle \lambda ,\eta \right \rangle \enskip \enskip
+\forall \lambda ,\eta \in E\enskip \enskip . \Eqno
+(1.5)
+$$
+This induces a Hermitian metric canonically on
+$E^{*}$. We assume the volumes of the fibres $Z$ of
+$M$ to be equal to $1$.
+
+\Subheading {II. Some connections} Now one finds
+several canonical connections on $E$. First, the
+lattices $\Lambda $ and $\Lambda ^{*}$ induce
+(compatible) flat connections $\nabla $ on $E$ and
+$E^{*}$ by $\nabla \lambda :=0$ for all local sections
+ $\lambda $ of $\Lambda $ (resp. $\nabla \mu :=0$ for
+$\mu \in \Gamma ^{\text{loc}}(\Lambda )$). We shall
+always use the same symbol for a connection on
+$E^{1,0}$, its conjugate on $E^{0,1}$, its realisation
+on $E$ and by duality induced connections on
+$E^{*\,1,0}$, $E^{*\,0,1}$ and $E^{*}$.
+
+Generally, the connection $\nabla $ is not compatible
+with the complex structure $J$ (i.e. $\nabla
+J\mathbin{\not =}0$), so it does not extend to
+$E^{1,0}$. $\nabla $ induces a splitting
+$$
+ TM=\pi ^{*}E\oplus T^{H}M \Eqno (2.0)
+$$
+of the tangent space of $M$.
+
+\Theorem {Proposition} $T^{H}M$ is a complex
+subbundle of $TM$.\endTheorem
+
+\Proof {Proof} At a point $(x,\Sigma \alpha
+_{i}\lambda _{i})\in M$, $x\in B$, $\alpha _{i}\in
+{\Bbb R}$, $\lambda _{i}\in \Lambda _{x}$, $T^{H}M$ is
+equal to the image of the homomorphism
+$$
+ \Sigma \alpha _{i}\,T_{x}\lambda
+_{i}\,:\,TB\llongrightarrow TM\enskip \enskip .
+$$
+The latter commutes with $J$ by the holomorphy
+condition on $\Lambda $. Thus, $T^{H}M$ is invariant
+by $J$.\qed
+
+The horizontal lift of $Y\in TB$ to $T^{H}M$ will be
+denoted by $Y^{H}$. Let $\overline \partial ^{E}$ be
+the Dolbeault operator on $E^{1,0}$. Now one can use
+$\nabla $ to construct a canonical holomorphic
+connection $\nabla ^{h}$ on $E^{1,0}$, not depending
+on the metric; furthermore, we will see that $\nabla
+^{h}$ induces a canonical holomorphic structure
+$\overline \partial ^{\overline E}$ on $E^{*\,0,1}$
+with the property
+$$
+\overline \partial ^{\overline E}\mu ^{0,1}=0\enskip
+\enskip \enskip \forall \mu \in \Lambda ^{*}\enskip
+\enskip . \Eqno (2.1)
+$$
+
+Let us denote by $\nabla '\lambda $, $\nabla ''\lambda
+$ the restrictions of $\nabla .\lambda :TB\otimes
+{\Bbb C}\llongrightarrow E\otimes {\Bbb C}$ to
+$T^{1,0}B$ and $T^{0,1}B$ (we will use the same
+convention for all connections and for $\End(E\otimes
+{\Bbb C})$-valued one forms on $B$).
+
+\Theorem {Lemma 1} $\nabla '$ maps $\Gamma
+(E^{1,0})$ into $\Gamma (T^{1,0}B\otimes E^{1,0})$.
+The connection on $E^{1,0}$
+$$
+ \nabla ^{h}:=\nabla '+\overline \partial ^{E} \Eqno
+(2.2)
+$$
+is a holomorphic connection. Its curvature $(\nabla
+^{h})^{2}$ is a $(1,1)$-form.
+
+The dual connection on $E^{*}$ satisfies
+$$
+ \nabla ^{h''}\mu ^{0,1}=0\enskip \enskip \forall
+\lambda \in \Lambda ^{*}\enskip \enskip ; \Eqno (2.3)
+$$
+hence it induces a canonical holomorphic structure
+$\overline \partial ^{\overline E}$ on $E^{*\,0,1}$,
+depending only on the flat structure on $E$ and the
+holomorphic structure on $E^{1,0}$.\endTheorem
+
+\Proof {Proof} The lift of $\nabla $ to $M$ is given
+by
+$$
+ (\pi ^{*}\nabla )_{Y^{H}}Z=[Y^{H},Z]\enskip \enskip
+\forall Z\in \Gamma (TZ)\cong \Gamma (TE),Y\in \Gamma
+(TB)\enskip \enskip , \Eqno (2.4)
+$$
+in particular
+$$
+(\pi ^{*}\nabla )_{Y^{H\,1,0}}(\pi ^{*}\lambda
+^{1,0})=[Y^{H^{1,0}},\pi ^{*}\lambda ^{1,0}]\enskip
+\enskip \forall \lambda \in \Gamma (E)\enskip \enskip
+. \Eqno (2.5)
+$$
+The r.h.s. of (2.5) takes values in $T^{1,0}Z$, hence
+$\nabla '$ maps in fact $E^{1,0}$ to $E^{1,0}$ (this
+is equivalent to the equation
+$$
+ \nabla _{JY}J=J\nabla _{Y}J\enskip \enskip \forall
+Y\in TB\enskip \enskip )\enskip . \Eqno (2.6)
+$$
+This proves the first part of the Lemma. Now one
+computes for $\mu \in \Gamma ^{\text{loc}}(\Lambda
+^{*})$, $\lambda \in \Gamma ^{\text{loc}}(\Lambda )$
+$$\Multline
+ 0=\overline \partial (\mu (\lambda ))=(\nabla
+^{h''}\mu ^{0,1})(\lambda ^{0,1})+(\nabla ^{h''}\mu
+^{1,0})(\lambda ^{1,0})\\
+ +\mu ^{0,1}(\nabla ^{h''}\lambda ^{0,1})+\mu
+^{1,0}(\nabla ^{h''}\lambda ^{1,0})\enskip
+.\endMultline
+\Eqno (2.7)$$
+By condition, $\nabla ^{h''}\lambda ^{1,0}=0$; also
+$0=\nabla ''\mu =\nabla ''\mu ^{1,0}+\nabla ''\mu
+^{0,1}$, so
+$$\Multline
+ 0=-\overline \partial (\mu ^{0,1}(\lambda ^{1,0}))
+ =(-\nabla ''\mu ^{0,1})(\lambda ^{1,0})+\mu
+^{0,1}(-\nabla ''\lambda ^{1,0})\\
+ =(\nabla ^{h''}\mu ^{1,0})(\lambda ^{1,0})+\mu
+^{0,1}(\nabla ^{h''}\lambda ^{0,1})\enskip .
+\endMultline
+ \Eqno (2.8)$$
+
+This proves the second part of the Lemma.\qed
+
+In fact, one could simply verify that $\nabla ^{h}$ is
+just the ``complexification'' of $\nabla $
+$$
+ \nabla ^{h}=\nabla -{\textstyle {1\over 2}}J\nabla J
+\Eqno (2.9)
+$$
+both on $E$ and $E^{*}$.
+
+The metric $\left \langle \cdot ,\cdot \right \rangle
+$ induces an isomorphism of real vector bundles
+\hbox{${\frak i}:E\rightarrow E^{*}$,} so that ${\frak
+i}\circ J=-J\circ {\frak i}$.
+
+\Definition {Definition} Let $\nabla ^{\overline E}$
+be the hermitian holomorphic connection on
+$E^{*\,0,1}$ associated to the canonical holomorphic
+structure in Lemma~1. We denote by ${}^{t}\theta
+^{*}:TB\otimes {\Bbb C}\rightarrow \End(E^{*}\otimes
+{\Bbb C})$ the one-form given by
+$$
+ {}^{t}\theta ^{*}:=\nabla -\nabla ^{\overline E}
+\Eqno (2.10)
+$$
+and by $\vartheta $ the one-form on $B$ with
+coefficients in $\End(E^{*})$
+$$
+ \vartheta _{Y}:={\frak i}^{-1}\nabla {\frak
+i}\enskip \enskip \forall Y\in TB\enskip \enskip .
+\Eqno (2.11)
+$$\endDefinition
+ $\nabla ^{\overline E}$ should not be confused with
+the hermitian holomorphic connection on $E^{1,0}$
+associated to its original holomorphic structure,
+which we shall not use in this article.
+
+The transposed of ${}^{t}\theta ^{*}$ with respect to
+the natural pairing $E\otimes E^{*}\rightarrow {\Bbb
+R}$ will be denoted by $\theta ^{*}$, thus
+$$
+({}^{t}\theta ^{*}\mu )(\lambda )=\mu (\theta
+^{*}\lambda )\enskip \enskip \forall \mu \in
+E^{*}\enskip ,\enskip \enskip \lambda \in E\enskip
+\enskip . \Eqno (2.12)
+$$
+The duals of ${}^{t}\theta ^{*}$ and $\theta ^{*}$
+will be denoted by ${}^{t}\theta $ and $\theta $. This
+notation is chosen to be compatible with the notation
+in \cite{BC}. By definition, ${}^{t}\theta ^{*}$
+satisfies
+$$\aligned
+{}^{t}\theta ^{*}{}'' & :E\otimes {\Bbb
+C}\llongrightarrow E^{1,0}\enskip \enskip , \\
+{}^{t}\theta ^{*}{}' &: E\otimes {\Bbb
+C}\llongrightarrow E^{0,1}\enskip \enskip .
+\endaligned \Eqno (2.13)
+$$
+Notice that the connection $\nabla +{\Cal V}$ on
+$E^{*}$ is just the pullback of $\nabla $ by the
+isomorphism ${\frak i}^{-1}$.
+
+\Theorem {Lemma 2} The hermitian connection $\nabla
+^{\overline E}$ on $E^{*\,0,1}$ is given by
+$$
+ \nabla ^{\overline E}=(\nabla +\vartheta )'+\overline
+\partial ^{\overline E}=\nabla ^{h}+\vartheta '\enskip
+\enskip . \Eqno (2.14)
+$$
+Its curvature on $E^{*\,0,1}$ is given by
+$$
+\Omega ^{\overline E}= \overline \partial ^{\overline
+E}\vartheta '\enskip \enskip , \Eqno (2.15)
+$$
+and it is characterized by the equation
+$$
+\left \langle (\Omega ^{\overline E}+\theta \theta
+^{*})\mu ,\nu \right \rangle =i\partial \overline
+\partial \left \langle \mu ,J\nu \right \rangle
+\enskip \enskip \forall \mu ,\nu \in \Gamma
+^{\loc}(\Lambda ^{*})\enskip \enskip . \Eqno (2.16)
+$$\endTheorem
+
+\Proof {Proof} The first part is classical, but we
+shall give a short proof to illustrate our notations.
+For all $\mu \in \Gamma ^{\loc}(\Lambda ^{*})$, $\nu
+\in \Gamma (E^{*})$
+$$
+\overline \partial \left \langle \mu ^{0,1},\nu
+^{1,0}\right \rangle
+ =\overline \partial (({\frak i}^{-1}\mu )(\nu
+^{1,0}))=({\frak i}^{-1}\mu )((\nabla +\vartheta
+)''\nu ^{1,0})\enskip \enskip ; \Eqno (2.17)
+$$
+but also
+$$
+\overline \partial \left \langle \mu ^{0,1},\nu
+^{1,0}\right \rangle
+ =\left \langle \mu ^{0,1},\nabla ^{\overline
+E}{}''\nu ^{1,0}\right \rangle =({\frak i}^{-1}\mu
+)(\nabla ^{\overline E}{}''\nu ^{1,0})\enskip \enskip
+, \Eqno (2.18)
+$$
+hence $(\nabla +\vartheta )'=\nabla ^{\overline E}{}'$
+on $E^{*0,1}$. To see the second part, one calculates
+for $\mu ,\nu \in \Gamma ^{\loc}(\Lambda ^{*})$
+$$\aligned
+\partial \overline \partial \left \langle \mu
+^{0,1},\nu ^{1,0}\right \rangle &=\left \langle
+\nabla ^{\overline E}{}'\mu ^{0,1},\nabla ^{\overline
+E}{}''\nu ^{1,0}\right \rangle +\left \langle \mu
+^{0,1},\nabla ^{\overline E}{}'\nabla ^{\overline
+E}{}''\nu ^{1,0}\right \rangle \\
+ &= \left \langle \nabla ^{\overline E}{}'\mu
+,\nabla ^{\overline E}{}''\nu \right \rangle +\left
+\langle \mu ^{0,1},\Omega ^{\overline E}\nu
+^{1,0}\right \rangle \\
+ &= -\left \langle {}^{t}\theta ''{}^{t}\theta
+^{*}{}'\mu ,\nu \right \rangle - \left \langle \Omega
+^{\overline E}\mu ^{0,1},\nu ^{1,0}\right \rangle
+\enskip \enskip ; \endaligned
+\Eqno (2.19)$$
+but also
+$$
+\partial \overline \partial \left \langle \mu
+^{1,0},\nu ^{0,1}\right \rangle =\left \langle
+{}^{t}\theta '{}^{t}\theta ^{*}{}''\mu ,\nu \right
+\rangle +\left \langle \Omega ^{\overline E}\mu
+^{0,1},\nu ^{1,0}\right \rangle \enskip \enskip .
+\Eqno (2.20)$$
+Taking the difference and using (2.13), one finds
+$$\aligned
+i\partial \overline \partial \left \langle \mu ,J\nu
+\right \rangle &=\partial \overline \partial \left
+\langle \mu ^{1,0},\nu ^{0,1}\right \rangle -\partial
+\overline \partial \left \langle \mu ^{0,1},\nu
+^{1,0}\right \rangle \\
+ & = \left \langle \Omega ^{\overline E}\mu
+,\nu \right \rangle +\left \langle ({}^{t}\theta
+'{}^{t}\theta ^{*}{}''+{}^{t}\theta ''{}^{t}\theta
+^{*}{}'),\mu ,\nu \right \rangle \\
+ & = \left \langle (\Omega ^{\overline
+E}+{}^{t}\theta {}^{t}\theta ^{*})\mu ,\nu \right
+\rangle \enskip \enskip .
+\endaligned \Eqno (2.21)$$
+
+Notice that $i\partial \overline \partial \left
+\langle \mu ,J\nu \right \rangle = \overline
+{i\partial \overline \partial \left \langle \mu ,J\nu
+\right \rangle }$ is in fact a real form.\qed
+
+\Subheading {III. Computation of the Levi-Civita
+superconnection} The analytic torsion forms of a
+fibration are defined using a certain superconnection,
+acting on the infinite dimensional bundle of forms on
+the fibres. In this section, this superconnection will
+be investigated for the torus fibration $\smallmatrix
+M\\\pi \,\downarrow \\B\endsmallmatrix$.
+
+Let $F:=\Gamma (Z,\Lambda T^{*\,0,1}Z)$ be the
+infinite dimensional bundle on $B$ with the
+antiholomorphic forms on $Z$ as fibres. By using the
+holomorphic hermitian connection $\nabla ^{\overline
+E}$ on $E^{*\,0,1}$, one can define a connection
+$\widetilde \nabla $ on $F$ setting
+$$
+ \widetilde \nabla _{Y}h:=(\pi _{*}\nabla ^{\overline
+E})_{Y^{H}}h\enskip \enskip \forall Y\in \Gamma
+(TB)\enskip ,\enskip \enskip h\in \Gamma (B,F)\enskip
+\enskip . \Eqno (3.0)
+$$
+
+The metric $\left \langle \enskip ,\enskip \right
+\rangle $ on $E$ induces a metric on $Z$. Then $F$ has
+a natural $TZ\otimes {\Bbb C}$ Clifford module
+structure, given by the actions of
+$$
+c(Z^{1,0}):=\sqrt 2 {\frak i}(Z^{1,0})\Lambda \enskip
+\enskip \text{and}\enskip \enskip c(Z^{0,1}):=-\sqrt
+2\iota _{Z^{0,1}}\enskip \enskip \enskip \forall z\in
+TZ\enskip \enskip . \Eqno (3.1)
+$$
+ $\iota _{Z^{0,1}}$ denotes here interior
+multiplication. Clearly $$c(Z)c(Z')+c(Z')c(Z)=-2\left
+\langle Z,Z'\right \rangle \enskip \forall Z,Z'\in
+TZ\otimes {\Bbb C}\enskip \enskip .\Eqno (3.3)$$
+
+ Let $\overline \partial ^{Z}$, $\overline \partial
+^{Z*}$ be the Dolbeault operator and its dual on $Z$,
+and let
+$$
+ D:=\overline \partial ^{Z}+\overline \partial ^{Z*}
+\Eqno (3.3)
+$$
+denote the Dirac operator action on $F$. In fact, for
+an orthonormal basis $(e_{i})$ of $TZ\otimes {\Bbb C}$
+and the hermitian connection $\nabla ^{Z}$ on $Z$
+$$
+ D={1\over \sqrt 2} \sum c(e_{i})\nabla
+^{Z}_{e_{i}}\enskip \enskip . \Eqno (3.4)
+$$
+
+A form $\mu =\mu ^{1,0}+\mu ^{0,1}\in \Lambda ^{*}$
+can be identified with a ${\Bbb R}/2\pi {\Bbb
+Z}$-valued function on $Z$. In particular, the ${\Bbb
+C}$-valued function $e^{i\mu }$ is welldefined on $Z$.
+Then one finds the analogue of Theorem~2.7 in
+\cite{BC}.
+
+\Theorem {Lemma 3} For $x\in B$, $F_{x}$ has the
+orthogonal decomposition in Hilbert spaces
+$$
+ F_{x} = \bigoplus\limits _{\mu \in \Lambda ^{*}_{x}}
+\Lambda E_{x}^{*\,0,1}\otimes \lbrace e^{i\mu }\rbrace
+\enskip \enskip . \Eqno (3.5)
+$$
+
+For $\mu \in \Lambda ^{*}_{x}$, $\alpha \in \Lambda
+\,E_{x}^{*\,0,1}$, $D$ acts on $\Lambda
+\,E_{x}^{*\,0,1}\otimes \lbrace e^{i\mu }\rbrace $ as
+$$
+ D(\alpha \otimes e^{i\mu })={ic({\frak i}^{-1}\mu
+)\over \sqrt 2}\alpha \otimes e^{i\mu } \Eqno (3.6)
+$$
+and
+$$
+ D^{2}(\alpha \otimes e^{i\mu })={\textstyle {1\over
+2}} \left \vert \mu \right \vert ^{2}\alpha \otimes
+e^{i\mu }\enskip \enskip . \Eqno (3.7)
+$$\endTheorem
+
+\Proof {Proof} The first part of the lemma is standard
+Fourier analysis, using that $\text{vol}(\Lambda )=1$.
+The second part is obtained by calculating
+$$\aligned
+\overline \partial ^{Z}(\alpha \otimes e^{i\mu
+^{1,0}})&=0\enskip ,\enskip \enskip \enskip \overline
+\partial ^{Z}(\alpha \otimes e^{i'\mu ^{0,1}})=i\,\mu
+^{0,1}\wedge \alpha \otimes e^{i\mu ^{0,1}}\enskip ,\\
+\overline \partial ^{*\,Z}(\alpha \otimes e^{i\mu
+^{0,1}})&=0\enskip ,\enskip \enskip \enskip
+\overline \partial ^{Z\,*}(\alpha \otimes e^{i\mu
+^{1,0}})=-i\,\iota _{{\frak i}^{-1}\mu ^{1,0}}\alpha
+\otimes e^{i\mu ^{1,0}}\enskip , .
+\endaligned
+\Eqno (3.8)$$
+\qed
+
+Now one can determine the action of $\widetilde
+\nabla $ with respect to this splitting. Define a
+connection on the infinite dimensional bundle
+$C^{\infty }(Z,{\Bbb C})$ by setting
+$$
+ \nabla ^{\infty }_{Y}f:=Y^{H}.f\enskip \enskip
+\forall Y\in TB\enskip ,\enskip \enskip f\in C^{\infty
+}(Z,{\Bbb C})\enskip \enskip .
+\Eqno (3.9)$$
+
+\Theorem {Lemma 3.10} The connection $\widetilde
+\nabla $ acts on $F=\Lambda E^{*\,0,1}\otimes
+C^{\infty }(Z,{\Bbb C})$ as
+$$
+ \widetilde \nabla =\nabla ^{\overline E}\otimes
+1+1\otimes \nabla ^{\infty }\enskip \enskip ; \Eqno
+(3.10)
+$$
+hence it acts on local sections of $\Lambda
+E^{*\,0,1}\otimes \lbrace e^{i\mu }\rbrace $ for $\mu
+\in \Gamma ^{\loc}(\Lambda ^{*})$ as $\nabla
+^{E}\otimes 1$. In particular,
+$$
+\widetilde \nabla ^{2}=\Omega ^{\overline E}\otimes
+1\enskip \enskip . \Eqno (3.11)
+$$\endTheorem
+
+\Proof {Proof} This is obvious because $\mu $ is a
+flat local section.
+
+\Definition {Definition} The superconnection $A_{t}$
+on $\smallmatrix F\\\downarrow \\B\endsmallmatrix$,
+depending on $t\in {\Bbb R}$, $t\geq 0$, given by
+$$
+ A_{t}:=\widetilde \nabla +\sqrt tD \Eqno (3.12)
+$$
+is called the Levi-Civita
+superconnection.\endDefinition
+
+In fact, this definition is the analogue to the
+Definition~2.1 in \cite{BGS2}; the torsion term
+appearing there vanishes in the case mentioned here.
+By Lemma~3 and Lemma~4, it is clear that $A^{2}_{t}$
+acts on $\Lambda E^{*\,0,1}\otimes \lbrace e^{i\mu
+}\rbrace $, $\mu \in \Gamma ^{\loc}(\Lambda ^{*})$, as
+$$
+A^{2}_{t}=(\nabla ^{\overline E}+i\sqrt {{t\over
+2}}c({\frak i}^{-1}\mu ))^{2}\otimes 1\enskip \enskip
+. \Eqno (3.13)
+$$
+\Subheading {IV. A transgression of the top Chern
+class}
+
+In this section, a form $\vartheta $ on $B$ will be
+constructed using the superconnection $A_{t}$, which
+transgresses the top Chern class $c_{n}({-\Omega
+^{\overline E}\over 2\pi i})$ of $E^{0,1}$. $\vartheta
+$, divided by the Todd class, will define the torsion
+form in section V. We will use the Mathai-Quillen
+calculus \cite{MQ}, in its version described and used
+by \cite{BGS5}. Mathai and Quillen observed that for
+$A\in \End(E)$ skew and invertible and $\Pf(A)$ its
+Pfaffian, the forms $\Pf(A) (A^{-1})^{k}$ are
+polynomial functions in $A$, so they can be extended
+to arbitrary skew elements of $\End(E)$. An
+endomorphism $A\in \End(E^{0,1})$, i.e. $A\in \End(E)$
+with $J \circ A = A \circ J$, may be turned into a
+skew endomorphism of $E \otimes {\Bbb C}$ by replacing
+$$
+ A \mapsto {\textstyle {1\over 2}} (A-A^{*}) +
+{\textstyle {1\over 2}} iJ(A+A^{*})\,\,.\Eqno (4.0)
+$$
+That means, $A$ is replaced by the operator which acts
+on $E^{1,0}$ as $-A^{*}$ and on $E^{0,1}$ as $A$. This
+is the convention of \cite{BGS5, p. 288} adapted to
+the fact that we are handling with $E^{0,1}$ and not
+with $E^{1,0}$. The same conventions will be applied
+to $\End(TM)$.
+
+With $I_{\overline E} \in \End(E^{0,1})$ the identity
+map, we consider at $Y\in E$ and $b\in {\Bbb R}$
+$$
+ \alpha _{t} := \text{det}_{T^{0,1} E}\left({-\pi
+^{*}\Omega ^{\overline E}\over 2\pi i} - b
+I_{\overline E}\right) e^{-t({ \left \vert Y\right
+\vert \over 2} + (\pi ^{*} \Omega ^{\overline E}-2\pi
+b J)^{-1})} \Eqno (4.1)
+$$
+by antisymmetrization as a form on the total space of
+$E$.
+\Definition {Definition} Let $\widetilde \beta _{t}
+\in \Lambda T^{*}B$ be the form
+$$
+ \widetilde \beta _{t}:= \sum _{\mu \in \Lambda ^{*}}
+({\frak i}^{-1}\mu )^{*} {\partial \over \partial
+b}\Big\vert_{b=0} \alpha _{t} \Eqno (4.2)
+$$
+and $\beta _{t} \in \Lambda T^{*}B$ be the form
+$$
+ \beta _{t} := \sum _{\mu \in \Lambda ^{*}} ({\frak
+i}^{-1}\mu )^{*} \alpha _{t}\vert_{b=0}\,\,.\Eqno
+(4.3)
+$$
+\endDefinition
+The geometric meaning of $\beta _{t}$ will become
+clear in the proof of Lemma 8. We recall that $\theta
+^{*} = \nabla ^{\overline E} - \nabla $ on $E$, hence
+for $\mu \in \Gamma ^{\loc}(\Lambda ^{*})$
+$$
+ \nabla ^{\overline E}({\frak i}^{-1}\mu ) = -\theta
+{\frak i}^{-1}\mu \Eqno (4.4)
+$$
+and one obtains
+$$
+ ({\frak i}^{-1}\mu )^{*} (\pi ^{*} \Omega ^{\overline
+E} - 2\pi bJ)^{-1} = {\textstyle {1\over 2}} \left
+\langle {\frak i}^{-1}\mu , \theta ^{*}(\Omega
+^{\overline E} - 2\pi bJ)^{-1} \theta {\frak
+i}^{-1}\mu \right \rangle \,\,.\Eqno (4.5)
+$$
+Hence one obtains
+\Theorem {Lemma 5} $\widetilde \beta _{t}$ is given
+by
+$$
+ \widetilde \beta _{t} = {\partial \over \partial
+b}\Big\vert_{b=0} \text{det}_{E^{0,1}} \left({-\Omega
+^{\overline E}\over 2\pi i} - bI_{\overline E}\right)
+\sum _{\mu \in \Lambda ^{*}} e^{-{t\over 2} \left
+\langle {\frak i}^{-1}\mu ,(1+\theta ^{*} (\Omega
+^{\overline E}-2\pi bJ)^{-1}\theta ){\frak i}^{-1}\mu
+\right \rangle } \Eqno (4.6)
+$$
+and
+$$
+ \widetilde \beta _{t} = {\partial \over \partial
+b}\Big\vert_{b=0} {\text{det}_{E^{0,1}}({-\Omega
+^{\overline E}\over 2\pi i} - bI_{\overline E})\over
+\text{det}^{1/2}_{E}(1+\theta ^{*}(\Omega ^{\overline
+E} -2\pi bJ)^{-1}\theta )} \sum _{\lambda \in \Lambda
+} e^{-{1\over 2t}\left \langle \lambda ,(1+\theta
+^{*}(\Omega ^{\overline E} -2\pi bJ)^{-1}\theta
+)\lambda \right \rangle } \,\,.\Eqno (4.7)
+$$
+It has the asymptotics
+$$
+ \widetilde \beta _{t} = - c_{n-1} \left({-\Omega
+^{\overline E}\over 2\pi i}\right) + {\Cal
+O}_{t\nearrow \infty }(e^{-t}) \Eqno (4.8)
+$$
+for $t\nearrow \infty $ and
+$$
+ \widetilde \beta _{t} = -(2\pi t)^{-n} c_{n-1}
+\left({-\Omega ^{\overline E}-\theta \theta ^{*}\over
+2\pi i}\right) + {\Cal O}_{t\searrow 0}(e^{-{1\over
+t}}) \Eqno (4.9)
+$$
+for $t\searrow 0$.
+\endTheorem
+\Proof {Proof} The second equation follows by the
+Poisson summation formula (recall $\vol(\Lambda ) =
+1$). The first asymptotic (4.8) is clear. The second
+asymptotic (4.9) may be proved by using formula (1.40)
+in \cite{BC}, which is obtained by a nontrivial result
+on Brezinians in \cite{Ma, pp. 166-167}. One finds
+$$
+ \aligned
+{\text{det}_{E^{0,1}}({-\Omega ^{\overline E}\over
+2\pi i} - bI_{\overline E})\over
+\text{det}^{1/2}_{E}(1+\theta ^{*}(\Omega ^{\overline
+E} -2\pi bJ)^{-1}\theta )}
+&=
+{(-1)^{n} \Pf({\Omega ^{\overline E}\over 2\pi
+}-bJ)\over \text{det}^{1/2}_{E}(1+\theta ^{*}(\Omega
+^{\overline E} -2\pi bJ)^{-1}\theta )}\\
+&=
+(-1)^{n} \Pf \left({-\Omega ^{\overline E}-\theta
+\theta ^{*}\over 2\pi }-bJ\right) \\
+&=
+\text{det}_{E^{0,1}}\left({-\Omega ^{\overline E}-
+\theta \theta ^{*}\over 2\pi i} - bI_{\overline
+E}\right)\,\,.\endaligned\Eqno (4.10)
+$$
+\qed
+In the same manner one obtains
+\Theorem {Lemma 6} $\beta _{t}$ is given by
+$$
+ \beta _{t} = \text{det}_{E^{0,1}} \left({-\Omega
+^{\overline E}\over 2\pi i}\right) \sum _{\mu \in
+\Lambda ^{*}} e^{-{t\over 2} \left \langle {\frak
+i}^{-1} \mu ,(1+\theta ^{*} \Omega ^{\overline
+E-1}\theta ){\frak i}^{-1}\mu \right \rangle } \Eqno
+(4.10)
+$$
+and
+$$
+\beta _{t} =(2\pi t)^{-n}
+{\text{det}_{E^{0,1}}({-\Omega ^{\overline E}\over
+2\pi i})\over \text{det}_{E}^{1/2}(1+\theta ^{*}\Omega
+^{\overline E-1}\theta )} \sum _{\lambda \in \Lambda }
+e^{-{1\over 2t}\left \langle \lambda ,(1+\theta
+^{*}\Omega ^{\overline E-1}\theta )\lambda \right
+\rangle }\,\,.\Eqno (4.11)
+$$
+It has the asymptotics
+$$
+ \beta _{t} = c_{n} \left({-\Omega ^{\overline E}\over
+2\pi i}\right) + {\Cal O}_{t\nearrow \infty
+}(e^{-t})\Eqno (4.12)
+$$
+for $t\nearrow \infty $ and for $t\searrow 0$
+$$
+ \beta _{t} = (2\pi t)^{-n} c_{n} \left({-\Omega
+^{\overline E}-\theta \theta ^{*}\over 2\pi i}\right)
++ {\Cal O}_{t\searrow 0}(e^{-{1\over t}})\,\,.\Eqno
+(4.13)
+$$
+\endTheorem
+We define the Epstein $\zeta $-function for $s >n$
+$$
+ \zeta (s) := - {1\over \Gamma (s)} \displaystyle \int
+^{\infty }_{0} t^{s-1} \left(\widetilde \beta _{t} +
+c_{n-1}\big({-\Omega ^{\overline E}\over 2\pi i}\big)
+\right) dt\,\,.\Eqno (4.14)
+$$
+Classically, $\zeta $ has a holomorphic continuation
+to $0[E]$. Hence we may define
+\Definition {Definition} Let $\vartheta $ be the
+form on $B$
+$$
+ \vartheta := \zeta '(0)\,\,.\Eqno (4.15)
+$$
+\endDefinition
+Then $\vartheta $ transgresses the top Chern class :
+\Theorem {Theorem 7} $\vartheta $ permits the
+double-transgression formula
+$$
+ {\overline \partial \partial \over 2\pi i} \vartheta
+= c_{n} \left({-\Omega ^{\overline E}\over 2\pi
+i}\right)\,\,.\Eqno (4.16)
+$$
+\endTheorem
+\Proof {Proof} By \cite{BGS5, Th. 3.10}, one knows
+that
+$$
+ - t {\partial \over \partial t} \alpha
+_{t}\big\vert_{b=0} = {\overline \partial \partial
+\over 2\pi i} {\partial \over \partial
+b}\Big\vert_{b=0} \alpha _{t}\,\,.\Eqno (4.17)
+$$
+The minus sign occuring here contrary to \cite{BGS5}
+is caused by the different sign of $J = -i
+I_{\overline E}$ in our formulas.
+
+We define $\beta ^{0}$ by $\beta _{t} = t^{-n} \beta
+^{0} + {\Cal O}_{t\searrow 0}(e^{-1/t})$ as in Lemma
+6. Then one obtains for $s > n$
+$$
+ \Multline
+ {\overline \partial \partial \over 2\pi i} \zeta (s)
+= {1\over \Gamma (s)} \displaystyle \int ^{\infty
+}_{0} t^{s} {\partial \beta _{t}\over \partial t} dt\\
+ = {1\over \Gamma (s)} \displaystyle \int ^{1}_{0}
+t^{s} {\partial \over \partial t} (\beta _{t}-t^{-n}
+\beta ^{0})dt - {n\over \Gamma (s)} \displaystyle \int
+^{1}_{0} t^{s-1-n} \beta ^{0} dt + {1\over \Gamma (s)}
+\displaystyle \int ^{\infty }_{1} t^{s} {\partial
+\over \partial t} \beta _{t} dt\\
+ = {1\over \Gamma (s)} \displaystyle \int ^{1}_{0}
+t^{s} {\partial \over \partial t} (\beta _{t}-t^{-n}
+\beta ^{0})dt + {1\over \Gamma (s)} {n\over n-s} \beta
+^{0} + {1\over \Gamma (s)} \displaystyle \int
+^{\infty }_{1} t^{s} {\partial \over \partial t} \beta
+_{t} dt\endMultline \Eqno (4.18)
+$$
+and hence for the holomorphic continuation of $\zeta $
+to 0
+$$
+ {\overline \partial \partial \over 2\pi i} \zeta
+'(0) = \lim_{t\nearrow \infty } \beta _{t} = c_{n}
+\left({-\Omega ^{\overline E}\over 2\pi
+i}\right)\,\,.\Eqno (4.19)
+$$
+\qed
+
+
+
+\Subheading { V. The analytic torsion form}
+
+Let $N_{H}$ be the number operator on $B$ acting on
+$\Lambda ^{p} T^{*}B\otimes F$ by multiplication with
+$p$ $\Tr_{s}\bullet $ will denote the supertrace
+$\Tr(-1)^{N_{H}}\bullet $. Let $\varphi $ be the map
+acting on $\Lambda ^{2p}T^{*}B$ by multiplication with
+$(2\pi i)^{-p}$.
+\Theorem {Lemma 8} Up to a cboundary,
+$$
+ \varphi \Tr_{s} N_{H} e^{-A^{2}_{t}} =
+\Td^{-1}\left({-\Omega ^{\overline E}\over 2\pi
+i}\right) \widetilde \beta _{t}\,\,,\Eqno (5.0)
+$$
+where $\Td^{-1}$ denotes the inverse of the Todd
+genus.
+\endTheorem
+\Proof {Proof} Define a form $\widehat \alpha _{t}$
+on the total space of $E$ with value
+$$
+ \widehat \alpha _{t} := \varphi \Tr_{s} N_{H}
+\exp\left(-(\nabla ^{\overline E} + i \sqrt {{t\over
+2}} c(\lambda ))^{2}\right)\Eqno (5.1)
+$$
+at $\lambda \in E$. Then one observes
+$$
+ \varphi \Tr_{s} N_{H} e^{-A^{2}_{t}} = \sum _{\mu
+\in \Lambda ^{*}} ({\frak i}^{-1}\mu )^{*} \widehat
+\alpha _{t}\,\,.\Eqno (5.2)
+$$
+But one knows that
+$$
+ \widehat \alpha _{t} = {\partial \over \partial
+b}\Big\vert_{b=0} \Td^{-1} \left({-\pi ^{*} \Omega
+^{\overline E}\over 2\pi i} - b I_{E}\right) \alpha
+_{t}\Eqno (5.3)
+$$
+by \cite{BGS5, Proof of Th. 3.3}. The result follows.
+\qed
+
+Now we define the analytic torsion form $T(M, \left
+\langle i\right \rangle )$ in \cite{BK} via the $\zeta
+$-function to $\varphi \Tr_{s} N_{H} e^{-A^{2}_{t}}$,
+modulo $\partial -$ and $\overline \partial
+-$coboundaries.
+\Definition {Definition} The analytic torsion form
+$T(M, g^{E})$ is defined by
+$$
+ T(M, g^{E}) := \Td^{-1}\left({-\Omega ^{\overline
+E}\over 2\pi i}\right) \vartheta \,\,.\Eqno (5.4)
+$$
+\endDefinition
+In particular, we deduce from Theorem 7
+$$
+ {\overline \partial \partial \over 2\pi i} T(M,
+g^{E}) = \left({c_{n}\over \Td}\right) \left({-\Omega
+^{\overline E}\over 2\pi i}\right) \,\,\,\,.\Eqno
+(5.5)
+$$
+Now we shall investigate the dependence of $T$ on the
+metric $g^{E}$. For a charactersitic class $\phi $,
+we shall denote by $\phi (g^{E})$ its evaluation for
+the hermitian holomorphic connection $ \nabla ^{E}$ on
+$E^{0,1}$ with respect to $\overline \partial $. For
+two Hermitian metrics $g^{E}_{0}, g^{E}_{1}$ on $E$,
+let $\widetilde \phi (g^{E}_{0}, g^{E}_{1})$ denote
+the axiomatically defined Bott-Chern classes of
+\cite{BGS1, Sect. 1f)}. $\widetilde \phi $ is living
+in the space of sums of $(p,p)$-forms modulo $\partial
+-$ and $\overline \partial -$coboundaries. It has the
+following property
+$$
+ {\overline \partial \partial \over 2\pi i}\widetilde
+\phi (g^{E}_{0}, g^{E}_{1}) = \phi (g^{E}_{1}) -
+\phi (g^{E}_{0})\,\,.\Eqno (5.6)
+$$
+\Theorem {Theorem 9} Let $g^{E}_{0}, g^{E}_{1}$ be
+two Hermitian metrics on $E$. Then the associated
+analytic torsion forms change by
+$$
+ T(M, g^{E}_{1})-T(M,g^{E}_{0}) =
+\widetilde{\Td^{-1}}(g^{E}_{0}, g^{E}_{1})
+c_{n}(g^{E}_{0}) + \Td^{-1}(g^{E}_{1})
+\widetilde{c_{n}}(g^{E}_{0}, g^{E}_{1})\Eqno (5.7)
+$$
+modulo $\partial -$ and $\overline \partial
+-$coboundaries.
+\endTheorem
+\Proof {Proof} This follow by the uniqueness of the
+Bott-Chern classes. Using (5.5) and the
+characterization of Bott-Chern classes in \cite{BGS1,
+Th. 1.29}, it is clear that
+$$
+ T(M,g^{E}_{0}) - T(M, g^{E}_{1}) =
+\left({\widetilde{c_{n}}\over \Td}\right) (g^{E}_{0},
+g^{E}_{1})\,\,.\Eqno (5.8)
+$$
+The result follows.\qed
+
+\Subheading {VI. The K{\"a}hler condition}
+
+The analytic torsion forms were only constructed in
+\cite{BK} for the case were the fibration is
+K{\"a}hler. That means, there had to exist a
+K{\"a}hler metric on the total space $M$, so that the
+decomposition (2.0) is an orthogonal decomposition.
+Hence it is interesting to see when this happens for
+the case investigated here.
+\Theorem {Lemma 10} The fibration $\smallmatrix
+M\\\downarrow \\B\endsmallmatrix$ is K{\"a}hler iff
+the base $B$ is K{\"a}hler and there exists a falt
+symplectic structure $\omega ^{E}_{0}$ on $E$, which
+is a positive $(1,1)$-form with respect to $J$, i.e.
+$$
+ \alignat 3
+ \text{I)} &\quad\nabla \omega ^{E}_{0} = 0\,, \tag
+6.0\\
+ \text{II)} &\quad \omega ^{E}_{0}(JX,JY) = \omega
+^{E}_{0}(X,Y) &\qquad \forall & \,X,Y \in E \,, \tag
+6.1\\
+ \text{III)} &\quad \omega ^{E}_{0}(X,JX) > 0 &\qquad
+\forall & \,X\in E\,\,. \tag 6.2
+\endalignat
+$$
+\endTheorem
+It follows easily that $\overline \partial ^{\overline
+E}$ is the by the metric and $\overline \partial
+^{\overline E}$ induced holomorphic structure if $M$
+is K{\"a}hler. Thus, $T$ coincides with the torsion
+form in \cite{BK} in this case. Furthermore, $\Omega
+^{\overline E} + \theta \theta ^{*} = 0$, so the
+asymptotic terms in (4.9), (4.13) vanish.
+\Proof {Proof} Let $g$ any Hermitian metric on $TM$,
+so that $g(T^{H}M, TZ) = 0$. Let $\omega := g(\bullet
+,J\bullet )$ be the corresponding K{\"a}hler form. By
+$\omega ^{H}$ and $\omega ^{Z}$ we denote the
+horizontal and the vertical part of $\omega $. Using
+the decomposition (2.0), the condition $d\omega =0$
+splits into four parts :
+\Item {{\bf I)}} For $Y_{1}, Y_{2}, Y_{3} \in TB$
+:
+$$
+ 0 = d\omega (Y^{H}_{1}, Y^{H}_{2}, Y^{H}_{3}) =
+d\omega ^{H} (Y^{H}_{1}, Y^{H}_{2}, Y^{H}_{3})\,,\Eqno
+(6.3)
+$$
+\Item {{\bf II)}} for $Y_{2}, Y_{2} \in TB$, $Z\in
+TZ$ :
+$$
+ 0 = d\omega (Y^{H}_{1}, Y^{H}_{2}, Z) = 2 . \omega
+^{H}(Y^{H}_{1}, Y^{H}_{2})\,,\Eqno (6.4)
+$$
+\Item {{\bf III)}} for $Y\in TB, Z_{1}, Z_{2} \in
+TZ$ :
+$$
+ 0 = d\omega (Y^{H}, Z_{1}, Z_{2}) = (L_{Y^{H}} \omega
+^{Z})(Z_{1}, Z_{2})\,,\Eqno (6.5)
+$$
+\Item {{\bf IV)}} for $Z_{1}, Z_{2}; Z_{3} \in TZ$
+:
+$$
+ 0 = d\omega (Z_{1}, Z_{2},Z_{3}) = d\omega
+^{Z}(Z_{1}, Z_{2}, Z_{3})\,.\Eqno (6.5)
+$$
+Conditions I) and II) just mean that
+$g\vert_{T^{H}M\times T^{H}M}$ is he horizonal lift of
+a K{\"a}hler metric on $B$. If there is a form
+$\omega ^{Z}$ satisfying condition III), then its
+restriction to the zero section of $E$ induces a
+K{\"a}hler form $\omega ^{E}$ on $E$, so that the left
+$\pi ^{*} \omega ^{E}$ satisfies conditions III) and
+IV). Only the following necessary condition remains
+\Item {{\bf III\,\,\alpha )}} There exists a
+Hermitian metric $g^{E}$ on $E$, so that for the
+corresponding K{\"a}hler, form $\omega ^{E}$ and all
+$\lambda _{1}, \lambda _{2}\in \Gamma ^{\loc}(\Lambda
+)$
+$$
+ \omega ^{E}(\lambda _{1},\lambda _{2}) =
+\text{const}\,.\Eqno (6.7)
+$$
+On the other hand, $M$ is clearly K{\"a}hler if this
+condition is satisfied. This proves the Lemma.\qed
+
+\noindent One may also investigate the local
+K{\"a}hler condition as posed in \cite{BGS1},
+\cite{BGS2}. Because $B$ is always locally K{\"a}hler,
+the same proof as above shows
+\Theorem {Lemma 11} The fibration $\smallmatrix
+M\\\downarrow \\B\endsmallmatrix$ is locally
+K{\"a}hler at $x_{0} \in B$ iff there exists locally
+on $B$ at $x_{0}$ a flat symplectic structure $\omega
+^{E}_{0}$ on $E$, so that
+$$
+ \alignat 2
+\text{I)} \qquad &\omega ^{E}_{0}(JX,JY) = \omega
+^{E}_{0}(X,Y) & \qquad \forall &X,Y \in E\,, \tag
+6.8\\
+\text{II)} \qquad & \omega ^{E}_{0}(X,JX) >0 \,\,
+\text{ at } x_{0} & \qquad \forall &X \in
+E_{x_{0}}\,.\tag 6.9
+\endalignat
+$$
+\endTheorem
+
+
+\References {
+References
+}
+\Benchmark
+\cite{BC} J.-M. Bismut and J. Cheeger, {\it
+Transgressed Euler Classes of $SL(2n, {\Bbb Z})$
+vector bundles, adiabatic limits if eta invariants and
+special values of $L$-functions\/}, Ann. Scient. Ec.
+Norm. Sup. 4e s\'erie, t. 25 (1992), 335--391.
+\Benchmark
+\cite{BGS1} J.-M. Bismut, H. Gillet and C. Soul\'e,
+{\it Analytic torsion and holomorphic determinant
+bundles I\/}, Comm. Math. Phys. {\bf 115} (1988),
+49--78.
+\Benchmark
+\cite{BGS2} ---, {\it Analytic torsion and holomorphic
+determinant bundles II\/}, Comm. Math. Phys. {\bf 115}
+(1988), 79--126.
+\Benchmark
+\cite{BGS5} ---, Complex immersions and Arakelov
+geometry, The Grothendieck Festschrift vol. 1,
+Birkh{\"a}user 1990.
+\Benchmark
+\cite{BK} J.-M. Bismut and Kai K{\"o}hler, {\it Higher
+analytic torsion forms for direct images and anomaly
+formulas\/}, J. Alg. Geom. {\bf 1} (1992, 647--684.
+\Benchmark
+\cite{E} P. Epstein, {\it Zur Theoric allg{\Blackbox}
+Zetafunktionen\/}, Math. Ann. {\bf 56} (1903),
+615--644.
+\Benchmark
+\cite{F} G. Faltings, Lectures on the arithmetic
+Riemann-Roch theorem, Princeton 1992.
+\Benchmark
+\cite{GS1} H. Gillet, S. Soul\'e, {\it Characteristic
+classes for algebraic vector bundles with Hermitian
+metrics I, II\/}, Ann. Math. {\bf 131} (1990),
+163--203, 205--238.
+\Benchmark
+\cite{GS2} H. Gillet and C. Soul\'e,{\it Analytic
+torsion and the arithmetic Todd genus\/}, with an
+appendix by D. Zagier, Topology {\bf 30} (1991),
+21--54.
+\Benchmark
+\cite{H} F. Hirzebruch, Tpological Methods in
+Algebraic Geometry, 3. ed. 1978.
+\Benchmark
+\cite{MQ} V. Mathai and D. Quillen, {\it
+Superconnections, Thom classes and equivariant
+differential forms\/}, Topology {\bf 25} (1986),
+85--110.
+\Benchmark
+\cite{RS} D.B. Ray and I.M. Singer, {\it Analytic
+torsion for complex manifolds\/}, Ann. of Math. {\bf
+98} (1973), 154--177.
+\Benchmark
+\cite{S} D. Sullivan, {\it La classe d'Euler r\'eelle
+d'un fibr\'e vectoriel \`a groupe structural
+$SL_{n}(x)$ est nulle\/}, C.R. Acad. Sci. Paris, {\bf
+281}, S\'erie A, (1975), 17--18.
+\Benchmark
+\cite{V} I. Vaisman, Symplectic Geometry and Secondary
+Characteristic Classes, Birkh{\"a}user
+1987.\endReferences
+
+
+
+\end
diff --git a/macros/generic/occam/Occam95.pdf b/macros/generic/occam/Occam95.pdf
new file mode 100644
index 0000000000..4d0d8a8fec
--- /dev/null
+++ b/macros/generic/occam/Occam95.pdf
Binary files differ
diff --git a/macros/generic/occam/PlainEx1/Example.readme b/macros/generic/occam/PlainEx1/Example.readme
new file mode 100644
index 0000000000..5591c08d97
--- /dev/null
+++ b/macros/generic/occam/PlainEx1/Example.readme
@@ -0,0 +1,6 @@
+
+ Here is a routine example where a macro file reduces
+from 19Ko to 6Ko by use of Occam.
+
+ The macro file RESOURCESimple.occ is maintained in
+Occam format to make this weeding process convenient. \ No newline at end of file
diff --git a/macros/generic/occam/PlainEx1/RESOURCESimple.occ b/macros/generic/occam/PlainEx1/RESOURCESimple.occ
new file mode 100644
index 0000000000..aa4f61ea95
--- /dev/null
+++ b/macros/generic/occam/PlainEx1/RESOURCESimple.occ
@@ -0,0 +1,648 @@
+ %^%% RESOURCESimple simplified macro file for Sweet-teX 1985--
+ %% Composes typing as transcoded in default mode.
+ %% Use with Plain TeX.
+ %% Includes includes FONTDEF stuff.
+ %% Occam formatted for minimization.
+ %% Last update: 7-94
+ %% Author L. Siebenmann <ftp ftp.math.u-psud.fr>
+ %% Documentation after \endinput.
+ %% This file will become an %_
+ %% auxiliary macros file
+ %% derived from RESOURCESimple.occ
+ %% named <macro-file-name>
+ %% needed by the ".tex" typescript: <typescript-name>
+ %% Date: ????
+ %% Contact: ????, email: ????
+
+ %^% This version is in Occam format
+ %% and includes FONTDEF.tex%_
+
+ %^% This file is formatted by LS, 7-94
+ %% for use of the DefStrip utility posted on the CTAN archives
+ %% (master posting 1994 on ftp ftp.math.u-psud.fr)
+ %% DO NOT ALTER DEFSTRIP SIGNS %^, %_ , %%^_
+ %% UNLESS YOU UNDERSTAND THEM!
+ \let\Def\def \let\gDef\gdef \let\Let\let
+ \def\gLet{\global\let} \let\Font\font
+ \let\Mathchardef\mathchardef\let\Newsymbol\newsymbol
+ \let\MATHchardef\mathchardef\let\NEWsymbol\newsymbol
+ \input auditor.tex %% keep auditor.tex available
+ %% comment out above line to suppress audit function. %_
+
+ %%% Avoid double input of these macros
+ %%
+ \bgroup
+ \catcode`\!=12
+ \ifx\auxmacros\relax
+ \immediate\write16{}%
+ \message{ !!! auxmacros already defined !!!}
+ \gdef\auxmacros{\endinput}%
+ \else \global\let\auxmacros\relax
+ \fi
+ \egroup
+ \auxmacros
+
+ %^%%% avoid double input of Sweet-teX macros
+ \bgroup
+ \catcode`\!=12
+ \ifx\RESOURCE\relax
+ \immediate\write16{}%
+ \message{ !!! Sweet-teX RESOURCE macros already defined !!!}
+ \gdef\RESOURCE{\endinput}%
+ \else \global\let\RESOURCE\relax
+ \fi
+ \egroup
+ \RESOURCE %_
+
+\catcode`\@=11
+
+ \newcount\Ht
+ %¬% pg121; Height register, used in Linefigure & accents %_
+ \newcount\Wd
+ %^% Width %_
+
+ %^%% FONTDEF stuff defines your fonts;
+ %% depends on your TeX printing system;
+ %
+ % FONFDEF/lcd file for Sweet-teX. These are lowest common denominator
+ % settings; please adapt by enriching the font palate with whatever
+ % you happen to have and like!
+ %
+ \ifx\FONTDEF\undefined
+ \let\FONTDEF\relax
+ \else
+ \errmessage{ FONTDEF stuff already loaded\string!}
+ \expandafter\endinput
+ \fi %_
+
+ \def\cm{cm}
+ %\def\cm{dm} %% alternatives...
+ %\def\cm{dc}
+
+ \Font\bigbf=\cm bx12 %_
+
+ \Font \smallrm=\cm r7 %_
+ \Font \smallbf=\cm bx7 %_
+ \Font\tenbi=\cm bxti10 %TimesBI %cmbi10 %_
+ \Font \tensmc=\cm csc10 %_
+
+ \Font\foliofont=\cm r10 %_
+ %^\font\tenrm=\cm r10
+ %% restore \cmr10 for messages %_
+
+
+ \Def \bi{\tenbi}
+ %\def \bi{\bf}%_
+
+ \Def\smc{\tensmc }
+ %\def \smc{\bf}%_
+
+ \Def \Bbd#1{{\bf #1}}%_
+ \Def \Calig#1{{\cal #1}}%_
+ \Def \Cal#1{{\cal #1}}%_
+ \Def \Frak#1{{\bf #1}}%_
+
+ \Def \Smallfonts {}%_
+
+ \Def \Titlefont {\bigbf}%_
+ \Def \Authorfont {\bf}%_
+ \Def \Headingfont {\bf}%_
+ \Def \Subheadingfont {\bf}%_
+ \Def \Theoremfont {\bf}%_
+ \Def \TheoremTextfont {\bf}%_
+ \Def \Prooffont {\it}%_
+ \Def \Remarkfont {\bf}%_
+ \Def \Diagramfont {\bf}%_
+ \Def \Captionfont{\it}%_
+
+
+ %^%% Font macros %_
+
+ \Def\rm{\everymath={}\fam0\tenrm}%_
+ %^% allows \rm inside \Theorem
+ %% becomes difficult for amsTeX %_
+
+ %^\def\bf{\everymath={}\fam \bffam \tenbf}%_
+
+ %^% Various alternatives for italic
+ %\def \It #1 \endIt{{\it #1\/}}
+ %\def \It #1{{\it{\unskip#1}\unskip\/}}
+ %% now no double spaces; fault: space forced before (or use \unskip in typing)
+ %% also \Bi \Bf, \Smc
+ %\def \It #1{{\it{#1}\unskip\/}}
+ %%_
+
+ \long
+ \def \It #1{{\it
+ \ifdim\mathsurround=0pt
+ \else\advance\mathsurround by 1.2pt \fi\ignorespaces
+ #1\unskip\/}}
+ %^% Provided mathsurround is being used at all, gives better
+ %% spacing of math in (bold-)italic; also in \Theorem %_
+
+ %^%\def \Bi #1 \endIt{{\bi #1\/}}%_
+ %^%\def \Bi #1{{\bi{#1}\unskip\/}}%_
+ \Def \Bi #1{{\bi
+ \ifdim\mathsurround=0pt
+ \else\advance\mathsurround by 1.2pt \fi\ignorespaces
+ #1\unskip\/}}%_
+
+ \Def \Bf #1{{\bf#1\unskip}}%_
+
+ \Def \Smc#1{{\smc#1\unskip}}%_
+
+ \Def \Admin #1{\begingroup\mathsurround=0 pt
+ \leavevmode
+ %% p222-3:~ then \hskip -\lastskip for \unskip
+ \ifmmode\hbox{$\rm #1$\relax}\else$\rm #1$\relax\fi
+ \endgroup}
+ %% \relax's anticipate mathsurround mechanisms %_
+
+ \Def \Rm #1{\hbox{\kern 1pt \rm #1\kern 1pt}}%_
+
+ \Def\Displaystyle {\displaystyle}%_
+
+
+ %^%% Logical formatting %_
+
+ \Def\Medskip{\medskip}%_
+
+ %^%% \Title block begins%_
+ \newskip\TitleLineskip
+ \TitleLineskip=4pt
+ \def \DeepCr{\unskip\hfil\egroup\par\hfil\bgroup}%
+ \def \\#1{%
+ \def\test{#1}%
+ \ifx \test\space
+ \def\this{\DeepCr}\else\def\this{\DeepCr #1}%
+ \fi
+ \this}%
+ \Def \Title{\goodbreak
+ \ifdim\pagetotal>.70\pagegoal
+ \def\this{\vfill\eject}
+ \else\def\this{}\fi \this
+ \vbox\bgroup\Titlefont\def\cr{\DeepCr}%
+ \parindent=0 pt\parskip= 0 pt
+ \baselineskip=\fontdimen6\font
+ \lineskip=\TitleLineskip%
+ \lineskiplimit=\baselineskip%
+ \advance\lineskiplimit by -1ex %
+ \hbox to 0pt{}\vskip15pt plus 15pt\bigskip
+ \bgroup \hfil}
+ \def \endTitle {\unskip\hfil\egroup\par \egroup\medskip}
+ %^%% \Title block ends%_
+
+ \newskip\AuthorLineskip
+ \AuthorLineskip=5pt plus 5pt
+ \Def\Author{\nobreak\vskip 20Pt plus 10pt minus 5pt\nobreak
+ \vbox\bgroup\let\cr\DeepCR\let\\\DeepCR
+ \parindent=0 pt\parskip= 0 pt
+ \Authorfont\baselineskip=\fontdimen6\font
+ \advance\baselineskip by \AuthorLineskip
+ \bgroup \hfil}%_
+
+ \Def \endAuthor {\unskip\hfil\egroup\par \egroup\medskip}%_
+
+ \Def \Heading#1{\hbox{}\hfil \goodbreak \bigskip \medskip
+ \centerline{\Headingfont #1}}%_
+
+ \Def \Subheading#1{\medskip\bigskip \goodbreak
+ \par \noindent {\Subheadingfont #1.}%
+ \nobreak \vskip 3pt \nobreak}%_
+
+ \Def \SubheadingA#1{\medskip \goodbreak \par
+ {\Subheadingfont #1.}\quad}%_
+
+ \Def \SubheadingB#1{\medskip \goodbreak \par
+ {\Subheadingfont\quad #1.}\quad}%_
+
+ \Def \SubheadingC#1{\medskip \goodbreak \par
+ {\bi\quad #1.}\quad}%_
+
+ \Def \Remark#1{\bigskip \goodbreak
+ \par\noindent{\Remarkfont #1.}}%_
+
+ \Def \endRemark{\medskip \goodbreak}%_
+
+ \Def \Example#1{\Remark {#1}}%_
+ \Def \endExample{\medskip \goodbreak}%_
+
+ \Def \Definition#1{\Remark {#1}}%_
+ \Def \endDefinition{\medskip \goodbreak}%_
+
+ \Def \Theorem #1{\goodbreak\bigskip\par\noindent\Theoremfont #1.
+ \hskip 2pt plus 1pt minus 1pt
+ \begingroup\it
+ \everymath={\ifdim\mathsurround=0pt\def\this{}
+ \else\def\this{\kern1.5pt}\fi\this}
+ }%_
+
+ \Def \endTheorem {\endgroup \rm \goodbreak \smallskip}%_
+
+ \Def \Proof#1{\goodbreak \medskip
+ \par\noindent \Prooffont #1\hskip .7pt:\hskip 3pt\rm}%_
+
+ \Def \endProof{\qed\goodbreak\vskip10pt}%_
+
+ %^% A Box for the Quod est demonstrandum: %_
+ \Def\qedbox{\hbox{\vbox{
+ \hrule width0.2cm height0.2pt
+ \hbox to 0.2cm{\vrule height 0.2cm width 0.2pt
+ \hfil\vrule height0.2cm width 0.2pt}
+ \hrule width0.2cm height 0.2pt}\kern1pt}}%_
+
+ %^% Typing in \qed makes the qedbox right justified: %_
+ \Def\qed{\ifmmode\qedbox
+ \else\unskip\ \hglue0mm\hfill\qedbox\medskip
+ \goodbreak\fi}%_
+
+ \Def\Endphase {}%_
+
+ \def \Benchmark { }
+ \Def \References#1{\begingroup \leftskip=25 pt
+ \parskip=4 pt plus 2 pt
+ \goodbreak \hbox to 1 pt{}%
+ \vskip 15 pt plus 10 pt minus 5 pt
+ \centerline{\Headingfont #1}%
+ \frenchspacing \Smallfonts \def \Benchmark{\Refmark}%
+ \def \Refmark##1##2{\par\noindent \llap {##1{##2}\kern 12 pt}\kern 0pt}%
+ \nobreak\vskip 8pt \nobreak}
+ %##1##2 secretly is \Cite ##2 %_
+
+ \Def \endReferences {~\unskip\par\endgroup \medskip\goodbreak}%_
+
+ \Def \Phantom{}%_
+ \Def\NoLineFigureBoxes {\gdef \Phantom{\phantom}}%_
+ \Def\LineFigureBoxes {\gdef \Phantom{}}%_
+
+ \catcode`\w=\active \catcode`\h=\active
+ \Def \Linefigure{\begingroup \catcode`\w=\active
+ \catcode`\h=\active \def w{30 }\def h{12}\preLinefigure}%
+ \def\preLinefigure[#1*#2]_{%
+ \Wd=#1\Ht=#2\catcode`\w=11 \catcode`\h=11 \LLinefigure}
+ \catcode`\w=11 \catcode`\h=11 %_
+
+ \Def \LLinefigure#1{%
+ \setbox1=\hbox{#1}%
+ \Phantom
+ %% make \phantom for final printing; empty meaning before!!!!
+ {\hskip 0 pt\hbox{\mathsurround=0 pt$%
+ \vcenter{\hbox{%
+ \vrule \vbox to \Ht pt{%
+ \hrule \vfil \hbox to \Wd pt{%
+ \hfil\unhbox1\hss}%
+ \vfil\hrule}%
+ \vrule}}\hskip 0 pt
+ $\relax}}%
+ \endgroup}% stray spaces would make this mushy %_
+
+ \Def\OldTexturesLinefigure[#1*#2scaled#3]_#4{%
+ \dimen1=#1 pc\dimen2=#2 pc
+ \divide\dimen1 by 1000 \multiply\dimen1 by #3
+ \divide\dimen2 by 1000 \multiply\dimen2 by #3
+ \noindent\hbox{\mathsurround=0 pt$%
+ \vcenter{\hbox{%
+ \vbox to \dimen2{%
+ \vfil \hbox to \dimen1{%
+ \special{picture #4 scaled #3}\hfil}%
+ }%
+ }}%
+ $\relax}}%_
+
+ \Def\TexturesLinefigure{\OldTexturesLinefigure}%_
+
+ \Let\gLinefigure\TexturesLinefigure %_
+
+
+ \Def \metaDiagram#1#2@{%
+ \def\SetHt##1{\def\test{##1}\def\Test{h} \ifx \test\Test \Ht=40
+ \else \Ht=##1 \fi}%
+ \SetHt{#1}\goodbreak\midinsert\vskip -8pt
+ \vbox to \Ht pt{\vfil \noindent\hfil\Diagramfont#2 \hfil}%
+ \vskip-8pt\endinsert}%_
+
+ \Def \Diagram#1{\metaDiagram#1@}%_
+
+ \Def \vDiagram#1{%
+ \Diagram{#1\hfill\hfill\vfil\vskip -\baselineskip}}%
+ %% note restored parens %_
+
+ \Def \AutoMetaDiagram#1#2@{\goodbreak\midinsert
+ \offinterlineskip\vbox to 0pt{}
+ %\vskip-1.5\abovedisplayskip %% adjust -1.5?
+ \line{\hfil #1\hfil}%
+ \vskip\bigskipamount
+ \line{\hfil\Diagramfont #2\hfil}%
+ %\vskip-1.5\belowdisplayskip
+ \endinsert}%_
+
+ \Def \AutoDiagram#1{\AutoMetaDiagram#1@}%_
+
+
+ \Def \Footnote #1#2{\footnote{\raise.4ex\hbox{\Admin{
+ #1}}}{\Smallfonts #2}} %% \Smallfonts problematic here
+ %% \scriptstyle? %_
+
+ \Def\BoldItemTags{\def\ItemStyle{\bf}}%_
+ \Def\PlainItemTags{\def\ItemStyle{\rm}}%_
+ \Def\ItemStyle{\bf}%_
+
+ %^\Def \Item #1{\item {$\bf {{#1}} $\relax}}%_
+ \Def \Item #1{%
+ \smallskip\nointerlineskip{\parskip=4pt\noindent
+ {\def\Bf{}\hbox{$\ItemStyle #1$\relax}}\enskip}}%_
+
+ %^\Def \Itemitem #1{\itemitem {$\bf {{#1}} $\relax}}%_
+ \Def \Itemitem #1{\itemitem{\def\Bf{}\hbox
+ {$\ItemStyle #1$\relax}}}%_
+
+ \Def \Cite#1{{\rm\cite{#1}}}%_
+
+ \Def \cite#1{\cite@#1,\endcite@}%_
+ \Def \cite@@#1,{#1}%_
+ \Def \cite@#1,#2\endcite@{\def\temp{#2}%
+ \ifx\temp\empty\relax
+ \def \temp{{\bf[#1]}}%
+ \else\relax
+ \def\temp{{[\bf #1,\rm\ \cite@@#2]}}%
+ \fi\temp}%_
+
+
+ %^%%% Symbols macros %
+
+ \def\,{\ifmmode\mskip \thinmuskip\else\hskip1pt\fi }%_
+
+ \Def \@{\char '100}%_
+
+ \Def \preXbox{\hbox{$
+ \vcenter{\hbox{%
+ \vrule\vbox to 6.7 pt{%
+ \hrule \vfil \hbox to 12 pt{%
+ \hfil}%
+ \vfil\hrule}%
+ \vrule}}\hskip 4pt
+ $\relax}}%_
+
+ \Def \Xbox{\raise -.25pt\hbox{\preXbox}}%_
+
+ \Def \Nonsense {{~\unskip \kern-3.5 pt \mathsurround=0 pt
+ \hbox{\Xbox \kern -16.5 pt $>\kern-3pt<$\relax}}}%_
+
+ \Def \Blackbox
+ {\leavevmode\hskip .3pt \vbox{%
+ \hrule height 6.9pt\hbox{\hskip 4.5pt}}\hskip .5pt}%_
+
+ \Def \Eqno #1$${\eqno \Admin{#1}$$\relax}%_
+ \Def \Rparen {\right )}%_
+
+ \Def \bigMidvert{\kern4pt \big \vert \kern4pt}%_
+
+ \Def \Midvert{\kern3pt \vert \kern3pt}%_
+
+ \Def\lvert{\left\vert}% defaults %_
+ \Def\rvert{\right\vert}%_
+ \Def\lVert{\left\Vert}%_
+ \Def\rVert{\right\Vert}%_
+
+ \def \proseSharp {{\mathsurround=0pt\kern1pt
+ \hbox{$\vcenter{\hbox{$\scriptstyle
+ \# $\relax}\vskip.7pt}$\relax}\kern1pt}}
+ \def \mathSharp {\mathord{\#}}
+ \Def\Sharp{\ifmmode\expandafter\mathSharp\else
+ \expandafter\proseSharp\fi}%_
+
+ \Def \bigConnectedsum {\mathop{\#}\limits}%_
+
+ %^\Def \Cup{\bigcup}%_
+ %^\Def \Cap{\bigcap}%_
+
+ \Def\littlecup{\mathchoice%{}
+ {\scriptstyle\cup}
+ {\scriptstyle\cup}
+ {\scriptscriptstyle\cup}
+ {\scriptscriptstyle\cup}
+ }%_
+
+ \Def\littlecap{\mathchoice%{}
+ {\scriptstyle\cap}
+ {\scriptstyle\cap}
+ {\scriptscriptstyle\cap}
+ {\scriptscriptstyle\cap}
+ }%_
+
+ \Def \Otimes{\mathbin{\kern-2pt\raise 1.2pt
+ \hbox{\mathsurround\z@$\scriptstyle \otimes$\relax}\kern-2pt}}%_
+
+ \Def \Oplus{\mathbin{\kern-2pt\raise 1.2pt
+ \hbox{\mathsurround=0pt$\scriptstyle \oplus$\relax}\kern-2pt}}%_
+
+ \Def \Amalg{\mathbin{\raise .5pt
+ \hbox{$\scriptstyle \amalg$\relax}}}%_
+
+ \Def\Circ {\mathchoice%
+ {\hbox{\raise .8pt
+ \hbox{\mathsurround=2pt$\scriptstyle \circ$\relax}}}
+ {\hbox{\raise .8pt
+ \hbox{\mathsurround=2pt$\scriptstyle \circ$\relax}}}
+ {\hbox{\raise .5pt
+ \hbox{\mathsurround=.7pt$\scriptscriptstyle \circ$\relax}}}
+ {\hbox{\raise .5pt
+ \hbox{\mathsurround=.7pt$\scriptscriptstyle \circ$\relax}}}
+ }
+ %\def \Circ {\hbox{\kern-1pt\raise 1pt
+ % \hbox{$\scriptstyle \circ$\relax}\kern-1pt}}
+ %\def \Circ {\circ}
+ %_
+
+ \Def \Coprod {\mathop{\raise 1.2pt
+ \hbox{\mathsurround=0pt$\coprod$\relax}}}%_
+
+ \Def \Lim {\lim\limits}%_
+
+ \Def \Lbrack {{\mathsurround=0pt$[\![$\relax}}%_
+
+ \Def \Rbrack {{\mathsurround=0pt$]\!]$\relax}}%_
+
+ \Def \Smash#1{\vbox to 0 pt{%
+ \vss\hbox{\mathsurround=0pt${#1}$\relax}\vss}}%_
+
+ %% The following tentative macros for accents
+ %% will misbehave in subscript position
+ %% and also with unslanted characters.
+ %% In such cases resort to other pre-existing macros.
+ \Def \Acc{\relax\expandafter}%_
+
+ \Def\swthat{\raise -1.1 ex\hbox{%
+ \mathsurround=0pt$\widehat{}$\relax}}%_
+ \Def\swttilde{\raise -1.2 ex\hbox{%
+ \mathsurround=0pt$\widetilde{}$\relax}}%_
+ \Def \overdot{{\raise .2 ex \hbox to 0pt {\hss\bf\smash{.}\hss}}}%_
+ \Def \overcircle{{\raise .1 ex \hbox to 0pt
+ {\mathsurround=0pt$\scriptscriptstyle\hss\circ\hss$\relax}}}%_
+
+ \Def \Mathaccent#1#2{{\mathsurround=0 pt %% E.g. #1=\widehat
+ \setbox4=\hbox{$\vphantom{#2}$\relax}
+ \Ht=\ht4 %% pg120, understood unit sp
+ \setbox5=\hbox{${#1}$\relax}
+ \setbox6=\hbox{${#2}$\relax}
+ \setbox7=\hbox to .5\wd6{}
+ \copy7\kern .1\Ht sp\raise\Ht sp\hbox{\copy5}\kern-.1\Ht sp
+ %% some missing sp 1-93 (unnecessary?)
+ \copy7\llap{\box6}
+ }}%_
+ %^% italic test or other needed; oops, index height slightly raised
+ %% extra braces 9-90
+ %_
+
+
+ \Def \Overdot #1{\Mathaccent {\overdot} {#1}}%_
+
+ \Def \Overcircle #1{\Mathaccent {\overcircle} {#1}}%_
+
+ \Def \SwtHat #1{\Mathaccent {\swthat} {#1}}%_
+
+ \Def \SwtTilde #1{\Mathaccent {\swttilde} {#1}}%_
+
+ \Def\SwtCheck #1{%
+ \ifmmode \check{#1}%
+ \else \v {#1}%
+ \fi}%_
+
+ \Def \ChOline#1{\setbox1=\hbox{\mathsurround=0pt${#1}$\relax}%
+ \ifdim \wd1 > 7pt
+ \kern .15\ht1 \kern .9 pt
+ \overline {\kern -.15\ht1 \kern -.9 pt#1\kern-.9 pt}%
+ \kern .9 pt
+ \else
+ \ifdim \wd1 > 4pt
+ \kern .3\ht1
+ \overline {\kern -.3\ht1 {#1}}%
+ \else
+ \kern .3\ht1 \kern-.9 pt
+ \overline {\kern -.3\ht1 \kern .9 pt{#1}\kern .9 pt }%
+ \kern-.9 pt
+ \fi
+ \fi}%_
+
+
+ \Def \ChUline#1{%
+ {\kern .5pt \underline {\kern -.5pt#1\kern-2.2pt}\kern1.3pt}
+ }%% single underline for char %_
+
+ \Def \Uuline#1{\closerunderline{.9pt}{\closerunderline {-.3pt}{#1}}}
+ %% close dble underline
+ \Def \ChUuline#1{
+ {\kern .5pt \Uuline {\kern -.5pt#1\kern-2.2pt}\kern1.3pt}
+ }%% double underline for char %_
+
+ \Def \Cdot{\mathbin{\raise .4 ex \hbox to 0pt {\hss\bf .\hss}}}%_
+
+ \Def \llonguparrow{\bigg\uparrow}%_
+ \Def \llongdownarrow{\bigg\downarrow}%_
+
+ %^\Def \Limgadget #1 {\mathrel
+ %{\kern-2p\mathop{\kern3pt #1\kern3pt}\limits}}
+ %% no; redo correctly to replace following?
+ %_
+
+ \Def \llongrightarrow {\kern-2pt\mathop
+ {\kern3pt\longrightarrow\kern3pt}\limits}%_
+
+ \Def \llongleftarrow{\kern-2pt\mathop
+ {\kern3pt\longleftarrow\kern3pt}\limits}%_
+
+ \Def \llongtwoheadrarrow {\kern-2pt
+ \mathop{\kern3pt\longrightarrow
+ \kern-14pt \longrightarrow\kern3pt}\limits}%_
+
+ \Def \llongleftrightarrow {\kern-2pt
+ \mathop{\kern3pt\longleftrightarrow\kern3pt}\limits}%_
+
+ \Def \llongmapsto {\kern-2pt
+ \mathop{\kern3pt\longmapsto\kern3pt}\limits}%_
+
+ \Def\rarrow{\rightarrow}%_
+ \Def\larrow{\leftarrow}%_
+
+ \Def\ProseBullet{{\mathsurround=0pt$\bullet$\relax}}%_
+
+ \Def\Bullet{\ifmmode\let\this\bullet
+ \else\let\this\ProseBullet\fi\this}%_
+
+ \Def\Trademark{\hbox{\Admin{{}^{\scriptscriptstyle TM}}}}%_
+
+ \Def\LaTeX{{\rm L\kern-.34em
+ \raise.47ex\hbox{\mathsurround=0pt
+ $\scriptstyle\rm A$\relax}\kern-.15em \TeX}}
+ %% here 7pt A not \sc a %_
+
+ \Def \AmS{{\tensy A}\kern -.1667em\lower .5ex\hbox {\tensy
+ M}\kern -.125em{\tensy S}}%_
+
+ \Def \AmSTeX{\AmS-\TeX}%_
+
+ \Def \Enskip{{\hskip 4pt plus3pt minus2pt}}%_
+
+ \Def\Matrix#1{\matrix{#1}}%_
+
+ \Def\Undef{\Nonsense}%_
+ %^% The following correspond to rare Sweet-teX symbols,
+ %% and will produce a X'ed box on your TeX printout
+ %% until something better is devised %_
+ \Def\Bigasterisk{\Undef}%_
+ \Def\Control{\Undef}%_
+ \Def\llongrightarrowtail{\Undef}%_
+ \Def\llongswarrow{\Undef}%_
+ \Def\llongsearrow{\Undef}%_
+ \Def\llongnwarrow{\Undef}%_
+ \Def\llongnearrow{\Undef}%_
+ \Def\llongtwoheadrightarrow{\mathbin
+ {{\longrightarrow} \kern -1850\mu {\rightarrow}}}%_
+
+ \Def\complement{\Undef}%_
+
+ \Def\Break{\break}%_
+
+
+\catcode`\@=12
+
+ \endinput
+
+ %%^_
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%% RESOURCE.tex documentation
+
+ The typogaphy afforded by default is in effect an informal
+"preprint style" that has the minimal virtue of being easy to
+change, whereas TeX macros are usually very devious. It is best to
+make changes and enhancements through a personal style file to
+be loaded after RESOURCE.tex.
+
+ Sweet-teX typing is readily adapted to the sophisticated
+typography of monograph styles, for example to osudeG.sty whose
+master posting is on ftp shape.mps.ohio-state.edu [128.146.7.200].
+Such adaptation should not necessitate any alteration of
+RESOURCE.tex, provided one takes care to load the monograph
+style after RESOURCE.tex. An model adaptation is provided with
+the posting of osudeG.sty on ftp ftp.math.u-psud.fr. The order of
+loading is then plain.tex, RESOURCE.tex, osudeG.sty, mymacros.sty.
+
+ If alteration of RESOURCE.tex proves truly necessary please
+rename it! One sound motive for such alteration is to produce a
+simple submission to a journal that proposes to rework your typescript
+using its own TeX methods. See a posting about Journal submission on
+ftp ftp.math.u-psud.fr and an appendix to the Sweet-teX manual
+(versions >= 0.98).
+
+ If one attempts to read RESOURCE.tex a second time, it is bypassed.
+This means that if you incorporate RESOURCE.tex in a format, then
+whenever RESOURCE.tex is updated, then the format must be recompiled
+to take account of the update.
+
+ Sweet-teX macros tend to begin with a capital. Unfortunately a
+few of Knuth's (involving doubling of arrows etc.) do also.
+
+
+
+
diff --git a/macros/generic/occam/PlainEx1/newton.sty b/macros/generic/occam/PlainEx1/newton.sty
new file mode 100644
index 0000000000..ee5e8135de
--- /dev/null
+++ b/macros/generic/occam/PlainEx1/newton.sty
@@ -0,0 +1,212 @@
+ %% auxiliary macros file
+ %% derived from RESOURCESimple.occ
+ %% named newton.sty
+ %% needed by the ".tex" typescript: newton.tex
+ %% Date: 1986
+ %% Contact: ????, email: ????
+
+ %%% Avoid double input of these macros
+ %%
+ \bgroup
+ \catcode`\!=12
+ \ifx\auxmacros\relax
+ \immediate\write16{}%
+ \message{ !!! auxmacros already defined !!!}
+ \gdef\auxmacros{\endinput}%
+ \else \global\let\auxmacros\relax
+ \fi
+ \egroup
+ \auxmacros
+
+\catcode`\@=11
+
+ \newcount\Ht %% pg121; Height register, used in Linefigure & accents
+ \newcount\Wd %% Width
+
+ \def\cm{cm}
+ %\def\cm{dm} %% alternatives...
+ %\def\cm{dc}
+
+ \font \bigbf=\cm bx12 %
+
+ \font \tenbi=\cm bxti10 %TimesBI %cmbi10 %
+ \font \tensmc=\cm csc10 %
+
+ \def \bi{\tenbi}
+ %\def \bi{\bf}%
+
+ \def \smc{\tensmc }
+ %\def \smc{\bf}%
+
+ \def \Bbd#1{{\bf #1}}%
+ \def \Cal#1{{\cal #1}}%
+
+ \def \Smallfonts {}%
+
+ \def \Titlefont {\bigbf}%
+ \def \Authorfont {\bf}%
+ \def \Headingfont {\bf}%
+ \def \Subheadingfont {\bf}%
+ \def \Theoremfont {\bf}%
+ \def \Prooffont {\it}%
+ \def \Remarkfont {\bf}%
+ \def \Diagramfont {\bf}%
+
+ \def \rm{\everymath={}\fam0\tenrm}%
+
+ \long
+ \def \It #1{{\it
+ \ifdim\mathsurround=0pt
+ \else\advance\mathsurround by 1.2pt \fi\ignorespaces
+ #1\unskip\/}}
+
+ \def \Bi #1{{\bi
+ \ifdim\mathsurround=0pt
+ \else\advance\mathsurround by 1.2pt \fi\ignorespaces
+ #1\unskip\/}}%
+
+ \def \Admin #1{\begingroup\mathsurround=0 pt
+ \leavevmode
+ %% p222-3:~ then \hskip -\lastskip for \unskip
+ \ifmmode\hbox{$\rm #1$\relax}\else$\rm #1$\relax\fi
+ \endgroup}
+ %% \relax's anticipate mathsurround mechanisms %
+
+ \def \Rm #1{\hbox{\kern 1pt \rm #1\kern 1pt}}%
+
+ \newskip\TitleLineskip
+ \TitleLineskip=15pt plus 5pt
+ \def \DeepCR{\unskip\hfil
+ \egroup\par\hfil\bgroup\ignorespaces}%
+
+ \def \Title{\goodbreak
+ \ifdim\pagetotal>.70\pagegoal
+ \def\this{\vfill\eject}
+ \else\def\this{}\fi \this
+ \vbox\bgroup\let\cr\DeepCR\let\\\DeepCR
+ \parindent=0 pt\parskip= 0 pt
+ \Titlefont\baselineskip=\fontdimen6\font
+ \advance\baselineskip by \TitleLineskip
+ \null\vskip22pt plus 15pt
+ \bgroup \hfil}%
+
+ \def \endTitle {\unskip\hfil\egroup\par \egroup\medskip}%
+
+ \newskip\AuthorLineskip
+ \AuthorLineskip=5pt plus 5pt
+ \def \Author{\nobreak\vskip 20Pt plus 10pt minus 5pt\nobreak
+ \vbox\bgroup\let\cr\DeepCR\let\\\DeepCR
+ \parindent=0 pt\parskip= 0 pt
+ \Authorfont\baselineskip=\fontdimen6\font
+ \advance\baselineskip by \AuthorLineskip
+ \bgroup \hfil}%
+
+ \def \endAuthor {\unskip\hfil\egroup\par \egroup\medskip}%
+
+ \def \Subheading#1{\medskip\bigskip \goodbreak
+ \par \noindent {\Subheadingfont #1.}%
+ \nobreak \vskip 3pt \nobreak}%
+
+ \def \Remark#1{\bigskip \goodbreak
+ \par\noindent{\Remarkfont #1.}}%
+
+ \def \endRemark{\medskip \goodbreak}%
+
+ \def \Theorem #1{\goodbreak\bigskip\par\noindent\Theoremfont #1.
+ \hskip 2pt plus 1pt minus 1pt
+ \begingroup\it
+ \everymath={\ifdim\mathsurround=0pt\def\this{}
+ \else\def\this{\kern1.5pt}\fi\this}
+ }%
+
+ \def \endTheorem {\endgroup \rm \goodbreak \smallskip}%
+
+ \def \Proof#1{\goodbreak \medskip
+ \par\noindent \Prooffont #1\hskip .7pt:\hskip 3pt\rm}%
+
+ \def \endProof{\qed\goodbreak\vskip10pt}%
+
+ \def \qedbox{\hbox{\vbox{
+ \hrule width0.2cm height0.2pt
+ \hbox to 0.2cm{\vrule height 0.2cm width 0.2pt
+ \hfil\vrule height0.2cm width 0.2pt}
+ \hrule width0.2cm height 0.2pt}\kern1pt}}%
+
+ \def \qed{\ifmmode\qedbox
+ \else\unskip\ \hglue0mm\hfill\qedbox\medskip
+ \goodbreak\fi}%
+
+ \def \Endphase {}%
+
+ \def \Benchmark { }
+ \def \References#1{\begingroup \leftskip=25 pt
+ \parskip=4 pt plus 2 pt
+ \goodbreak \hbox to 1 pt{}%
+ \vskip 15 pt plus 10 pt minus 5 pt
+ \centerline{\Headingfont #1}%
+ \frenchspacing \Smallfonts \def \Benchmark{\Refmark}%
+ \def \Refmark##1##2{\par\noindent \llap {##1{##2}\kern 12 pt}\kern 0pt}%
+ \nobreak\vskip 8pt \nobreak}
+ %##1##2 secretly is \Cite ##2 %
+
+ \def \endReferences {~\unskip\par\endgroup \medskip\goodbreak}%
+
+ \def\preLinefigure[#1*#2]_{%
+ \Wd=#1\Ht=#2\catcode`\w=11 \catcode`\h=11 \LLinefigure}
+ \catcode`\w=11 \catcode`\h=11 %
+
+ \def \metaDiagram#1#2@{%
+ \def\SetHt##1{\def\test{##1}\def\Test{h} \ifx \test\Test \Ht=40
+ \else \Ht=##1 \fi}%
+ \SetHt{#1}\goodbreak\midinsert\vskip -8pt
+ \vbox to \Ht pt{\vfil \noindent\hfil\Diagramfont#2 \hfil}%
+ \vskip-8pt\endinsert}%
+
+ \def \Diagram#1{\metaDiagram#1@}%
+
+ \def \vDiagram#1{\Diagram{#1\hfill\hfill\vfil\vskip -\baselineskip}}%
+ %% note restored parens %
+
+ \def \Footnote #1#2{\footnote{\raise.4ex\hbox{\Admin{
+ #1}}}{\Smallfonts #2}} %% \Smallfonts problematic here
+ %% \scriptstyle? %
+
+ \def \ItemStyle{\bf}%
+
+ \def \Item #1{%
+ \smallskip\nointerlineskip{\parskip=4pt\noindent
+ {\def\Bf{}\hbox{$\ItemStyle #1$\relax}}\enskip}}%
+
+ \def \Cite#1{{\rm\cite{#1}}}%
+
+ \def \cite#1{\cite@#1,\endcite@}%
+ \def \cite@@#1,{#1}%
+ \def \cite@#1,#2\endcite@{\def\temp{#2}%
+ \ifx\temp\empty\relax
+ \def \temp{{\bf[#1]}}%
+ \else\relax
+ \def\temp{{[\bf #1,\rm\ \cite@@#2]}}%
+ \fi\temp}%
+
+ \def\,{\ifmmode\mskip \thinmuskip\else\hskip1pt\fi }%
+
+ \def \Eqno #1$${\eqno \Admin{#1}$$\relax}%
+
+ \def \bigMidvert{\kern4pt \big \vert \kern4pt}%
+
+ \def \proseSharp {{\mathsurround=0pt\kern1pt
+ \hbox{$\vcenter{\hbox{$\scriptstyle
+ \# $\relax}\vskip.7pt}$\relax}\kern1pt}}
+ \def \mathSharp {\mathord{\#}}
+ \def \Sharp{\ifmmode\expandafter\mathSharp\else
+ \expandafter\proseSharp\fi}%
+
+ \def \Lim {\lim\limits}%
+
+ \def \llongrightarrow {\kern-2pt\mathop
+ {\kern3pt\longrightarrow\kern3pt}\limits}%
+
+\catcode`\@=12
+
+ \endinput
+
diff --git a/macros/generic/occam/PlainEx1/newton.tex b/macros/generic/occam/PlainEx1/newton.tex
new file mode 100644
index 0000000000..5e5e084523
--- /dev/null
+++ b/macros/generic/occam/PlainEx1/newton.tex
@@ -0,0 +1,1281 @@
+
+%%% newton.tex
+
+%Sem. Bourbaki / A. Marin / 1986
+%The following is for Plain TeX
+%Save this Sweet-Write file as "Text only" file ...'
+%Then transcode to Bourbaki/ Marin0-3.tex using...'
+
+\input newton.sty %% after export
+%\input RESOURCESimple.occ %% during export
+
+\magnification=1200 %adjust! %for print run only
+\hsize=15truecm %for print
+%\vsize=480 pt %for print
+\nopagenumbers
+
+
+\headline{\ifnum \pageno>1 \hss\raise -5pt
+\hbox{\tenrm
+670-\folio}\hss\fi}
+\widowpenalty=5000
+\emergencystretch=20pt
+
+\csname Francais\endcsname %%Ok of not there
+
+\par \noindent S\'eminaire BOURBAKI\hfill
+Novembre 1986 \break
+\Admin {19^{e}} ann\'ee, 1986-87, \Admin {n^{o} 670}
+\vskip 35pt plus 5pt minus 5pt
+
+\Title
+--- G\'eom\'etrie des polyn\^omes ---\\
+Co\^ut global moyen de la m\'ethode de Newton
+\endTitle \medskip
+\Author
+(d'apr\`es M. Shub et S. Smale)
+\endAuthor \vskip 20pt plus 5pt minus 5pt
+\Author
+par Alexis MARIN
+\endAuthor \vskip 25pt plus 5pt minus 5pt
+%
+
+ La suite $1,\enskip 3/2,\enskip 17/12,\enskip
+\dots{}\,\,$ d\'efinie par $x_{0}=1$ et la relation de
+r\'ecurrence $x_{n+1}={\textstyle {1\over
+2}}(x_{n}+2/x_{n})$ converge tr\`es rapidement vers
+$\sqrt 2 $. Le troisi\`eme terme $x_{3}=577/408\sim
+1,414215\,\dots{}$ poss\`ede d\'ej\`a les six premiers
+chiffres du d\'eveloppement d\'ecimal de $\sqrt 2\sim
+1,414213\,\dots{}$ alors que $x_{2}=17/12\sim
+1,416\,\dots{} $ n'en avait que trois. Cette suite,
+connue des Babyloniens, est produite par la {\it
+m\'ethode de Newton\/}. Pour approcher une solution
+d'une \'equation $f(x)=0$, o\`u $f$ est de classe
+$C^{2}$, Newton prend une {\it valeur initiale\/}
+$x_{0}$ et, it\'erant l'application $x\mapsto
+N_{f}(x)=x-f(x)/f'(x)$, il engendre la suite $x_{n}=
+N_{f}^{n}(x_{0})$. (Notez que $N_{f}(x)={\textstyle
+{1\over 2}}(x+2/x)$ si $f(x)=x^{2}-2$.) Les points
+fixes de $N=N_{f}$ sont les z\'eros de $f$, et puisque
+$N'=ff''/(f')^{2}$, un {\it z\'ero simple\/} $w$ de
+$f$ (i.e. $f(w)=0\mathbin{\not =}f'(w))$ est un {\it
+point fixe superattractif\/} de $N$ (i.e. $N(w)=w$ et
+$N'(w)=0)$, en particulier il y a une constante $K$ et
+un voisinage $V$ de $w$ dont tout point $x$ v\'erifie
+$ \left \vert N(x)-w\right \vert \leq K \left \vert
+x-w\right \vert ^{2}$. Cette {\it convergence
+quadratique\/} explique le ``doublement de
+pr\'ecision'' \`a chaque it\'eration observ\'e
+ci-dessus.
+
+ Cependant, si $x_{0}$ n'est pas suffisamment proche
+d'une racine de $f$, la suite de Newton peut avoir un
+comportement chaotique ou s'accumuler sur un cycle, ce
+dernier ph\'enom\`ene se produisant dans un ouvert de
+l'espace $P_{d}$ des polyn\^omes de degr\'e $d$, d\`es
+le degr\'e 3, et ce pour un ouvert de valeurs
+initiales. Pour trouver une bonne valeur initiale, on
+peut explorer syst\'ematiquement le domaine de $f $,
+mais le co\^ut d'un tel balayage est prohibitif; on
+pr\'ef\`ere {\it tirer au sort\/} une valeur initiale,
+et it\'erer quatre ou cinq fois l'application de
+Newton; avec un peu de chance, la valeur de $f$ sur
+le dernier it\'er\'e est pratiquement nulle, sinon on
+relance les d\'es \dots{} . L'exp\'erience confirme
+que, sauf pour les polyn\^omes pathologiques et {\it
+rares\/}, les joueurs de d\'es sont gagnants.
+
+ Pour justifier cette pratique, il faut munir les
+espaces de poly\-n\^omes et de valeurs initiales d'une
+mesure de probabilit\'e. Smale consid\`ere l'espace
+$$
+ P_{d}(1)=\left \lbrace
+p(v)=v^{d}+a_{d-1}v^{d-1}+\dots{}+a_{0}\enskip
+\bigMidvert \enskip a_{i}\in {\Bbd C}\,,\enskip \left
+\vert a_{i}\right \vert \leq 1\right \rbrace
+$$
+ muni de la mesure de Lebesgue $\mu $ sur les
+coefficients, normalis\'ee par $\mu (P_{d}(1))=1$. On
+ne perd rien \`a se limiter \`a $P_{d}(1)$ car, pour
+tout polyn\^ome $q$ de degr\'e $d>1$, il existe $a$ et
+$b$ positifs avec $p(v)=aq(bv)$ dans $P_{d}(1)$;
+d'autre part (voir 5.4), les racines de $p\in
+P_{d}(1)$ sont de module inf\'erieur \`a 2.
+Connaissant $p(v_{0})$ et $p'(v_{0})$, Smale a un
+crit\`ere pour savoir si, partant de $v_{0}$, la
+m\'ethode de Newton converge quadratiquement
+(\Cite{Sm5}, cf. {\S }6). Il vient de montrer
+(\Cite{Sm6}) que, si pour un polyn\^ome $p$ de
+$P_{d}(1)$ la moyenne du nombre de tirages dans le
+disque $\lbrace \left \vert v\right \vert \leq
+3\rbrace $ pour obtenir une valeur initiale $v_{0}$
+v\'erifiant son crit\`ere est sup\'erieur \`a $n$
+alors $p$ se trouve dans un ensemble exceptionnel
+${\Cal E}_{n,d}$ de mesure born\'ee par $(\Rm
+{constante})(d^{5}/n)$. Dans \Cite{ShSm1}, il y
+avait un r\'esultat dans le m\^eme sens, mais sans
+crit\`ere permettant de savoir si on a gagn\'e (cf.
+2.3).
+
+ D\`es 1976, lors de ses travaux d'\'economie
+math\'ematique (\Cite{Sm1}), puis avec Hirsch
+(\Cite{HiSm}), Smale avait introduit des {\it
+m\'ethodes de Newton glo\-bales\/} (cf. {\S }{\S }3 et
+5) n'ayant qu'une convergence lin\'eaire mais dont le
+co\^ut global peut \^etre estim\'e plus finement. En
+1981, il d\'egageait une jolie d\'emonstration du
+th\'eor\`eme de d'Alembert-Gauss (\Cite{Sm2} et {\S
+}3) et prouvait le r\'esultat suivant: {\it Pour
+tout $0<\mu <1$, il y a un ensemble exceptionnel
+$U_{d}(\mu )$ de mesure $\mu $ dans $P_{d}(1)$ tel
+que, pour tout $p$ hors de $U_{d}(\mu )$, une
+m\'ethode de Newton glo\-bale partant de $v_{0}=0$
+fournit en moins de $(100(d+2))^{9}/\mu ^{7}$
+it\'erations\/} une valeur \`a partir de laquelle le
+``doublement de pr\'ecision'' \`a chaque it\'eration
+de Newton se produit. En 1983 avec Shub (\Cite{ShSm1}
+et \Cite{ShSm2}), il introduit des m\'ethodes d'ordre
+sup\'erieur (dont chaque it\'eration n\'ecessite le
+calcul de $\log{d}$ d\'eriv\'ees de $p$ si $p\in
+P_{d}(1)$). Partant d'un point $v_{0}$ pris au hasard
+sur un cercle de grand rayon, Shub et Smale obtiennent
+un bon z\'ero approch\'e en $N_{d}(\mu )$ it\'erations
+o\`u $N_{d}(\mu )$ cro\^\i t lin\'eairement en $d$ :
+$$
+ N_{d}(\mu ) = L_{1}d\,( \left \vert \log\mu
+\right \vert /\mu )^{1+1/\log{d}}+ L_{2}\enskip
+\enskip \Rm {avec}\enskip \enskip
+20>L_{1}>L_{2}\enskip \enskip ,
+$$
+et ils estiment le nombre d'op\'erations
+arithm\'etiques n\'ecessaires. En 1984, dans un
+survol (\Cite{Sm4}) o\`u, {\it sans pr\'etendre
+produire des algorithmes rivalisant avec ceux
+couramment utilis\'es\/}, il cherche \`a expliquer
+pourquoi {\it les algorithmes efficaces de l'analyse
+sont rapides en moyenne\/} bien qu'ils pi\'etinent
+sur des cas d\'eg\'en\'er\'es, et il d\'ecrit une
+m\'ethode glo\-bale du premier ordre qui permet de
+retrouver avec de meilleures bornes la plupart des
+r\'esultats de \Cite{ShSm1} et \Cite{ShSm2} en
+n'ayant besoin \`a chaque it\'eration de n'\'evaluer
+que $p$ et $p'$ (cf. {\S }4).
+
+ Le grand avantage de la m\'ethode de Newton sur les
+autres proc\'ed\'es de r\'esolution approch\'ee d'une
+\'equation d'une variable r\'eelle (dichotomie,
+s\'ecante, \dots{}) est qu'elle s'applique en toute
+dimension et m\^eme dans un Banach, ce qui permet de
+traiter des \'equations fonctionnelles (\Cite{KA},
+chap. 18). Renegar a \'etendu aux syst\`emes de $n$
+\'equations polynomiales en $n$ inconnues complexes
+les r\'esultats de Shub-Smale \Cite{R1}, et \Cite{Sm6}
+contient des r\'esultats valables dans un Banach.
+
+ Dans le cas d'un polyn\^ome d'une variable complexe,
+l'application de Newton a une extension rationnelle
+$(x,p)\mapsto N_{p}(x)$ \`a la sph\`ere de Gauss $S$~:
+ La m\'ethode de Newton est un algorithme {\it
+purement it\'eratif rationnel\/} et l'on peut se
+demander s'il existe un autre algorithme purement
+it\'eratif rationnel $G : S\times P_{d}
+\llongrightarrow S$ qui soit de plus
+\Bi{g\'en\'eriquement convergent }, i.e.
+$$
+ \lbrace (x,p)\in S\times P_{d}\enskip \bigMidvert
+\enskip G_{p}^{n}(x)\enskip \,\Rm {ne converge pas
+vers une racine de}\,\enskip p\rbrace
+$$
+est de mesure nulle. Pour $d>3$, la th\`ese de
+McMullen (\Cite{McM}) r\'epond: ``non''. Ceci
+n'arr\^eta pas Shub et Smale: avec la conjugaison
+complexe en plus des op\'erations arithm\'etiques, ils
+ont construit un algorithme purement it\'eratif
+g\'en\'eriquement convergent pour les syst\`emes de
+$n$ polyn\^omes en $n$variables complexes, et, pour
+$n=1$, un tel algorithme qui, pr\`es des racines, est
+la m\'ethode de Newton (\Cite{ShSm3} et {\S }7).
+
+ D'autre part, Dantzig (cf. \Cite{Sm3}) avait
+conjectur\'e que: $\rho (m,n)$ {\it le nombre moyen
+d'it\'erations n\'ecessaires pour r\'esoudre par la
+m\'e\-thode du simplexe un probl\`eme lin\'eaire \`a
+$m$ contraintes et $n$ variables est, pour $m$
+fix\'e, lin\'eaire en\/} $n$. En 1982, Smale
+r\'esolvait par les m\^emes m\'ethodes ce fameux
+probl\`eme; il donne une fonction $K(\varepsilon ,m)$
+telle que, pour tout $\varepsilon >0$,\enskip $\rho
+(m,n)\leq Kn^{\varepsilon }$ (\Cite{Sm3}). Depuis,
+des algorithmes polynomiaux en $m$ et $n$ ont \'et\'e
+trouv\'es (\Cite{R2}, \Cite{Sm6}).
+
+ Tous ces r\'esultats illustrent l'int\'er\^et de
+l'introduction d'id\'ees \'el\'ementaires de topologie
+et de r\'esultats g\'en\'eraux comme le th\'eor\`eme
+de la vari\'et\'e stable dans les probl\`emes concrets
+de calcul (cf. \Cite{Sh} et {\S }7).
+
+ Dans cet expos\'e, je me limiterai aux polyn\^omes
+d'une variable complexe.
+
+ Mes remerciements vont \`a J.J.~Risler qui m'a
+convaincu d'\'etudier les travaux de Smale pour son
+s\'eminaire, ainsi qu'\`a L. Guillou pour ses
+commentaires perspicaces sur ce texte.
+
+
+\Subheading {1. M\'ethode de Newton, chaos, et non
+convergence g\'en\'erique}
+%
+ Si un polyn\^ome r\'eel $f(t) = \prod _{i=1}^{d}
+(t-x_{i})$ a toutes ses racines r\'eelles et
+distinctes, il en est de m\^eme de sa d\'eriv\'ee
+$f'(t)=d\prod _{j=1}^{d-1}(t-c_{j})$, et z\'eros et
+points critiques alternent
+$x_{1}<c_{1}<x_{2}<\dots{}<x_{d}$ dans ${\Bbd R}$.
+Soit $f$ un tel polyn\^ome de degr\'e $d\geq 3$ et
+notons $N=N_{f}$. Pour l'orbite $\lbrace
+t_{n}=N^{n}(t)\rbrace $ d'un point $t$, il y a trois
+possibilit\'es:
+\Item {1)} $t_{n}$ converge vers un point fixe de
+$N$ (un z\'ero de $f$);
+\Item {2)} $t_{n}$ n'est pas d\'efini pour
+$n>n_{0}$ car $t_{n_{0}}$ est un point critique;
+\Item {3)} $t_{n}$ est d\'efini pour tout $n$, mais
+ne converge pas.
+\medskip\nobreak
+ Soit $S_{1}$, $S_{2}$, $S_{3}$ la partition
+correspondante de ${\Bbd R}$. Comme les points fixes
+$x_{i}$ de $N$ sont attractifs ($ \left \vert
+N'(x_{i})\right \vert =0<1$), $S_{1}$ est ouvert.
+Soient $b_{1},\dots{},b_{d}$ les bandes
+$]c_{i-1},c_{i}[$ \enskip (ici $c_{0}=-\infty $ et
+$c_{d}=+\infty $). Un coup d'oeil \`a la figure~1 nous
+assure que $N$ envoie des points proches des $c_{i}$
+dans $b_{1}$ ou $b_{d}$ et que $S_{1}$ contient ces
+deux bandes, donc $S_{2}$ est disjoint de $\overline
+S_{3}$, et $S_{3}$ est un ferm\'e invariant par $N$
+inclus dans $b_{2}\cup \dots{}\cup b_{d-1}$.
+
+
+
+\Diagram {{140}\hfill \raise 0 pt \hbox{Figure 1}
+\hfill \hfill Figure 2\hfill }
+
+ Soit $\Omega $ l'espace des suites infinies en les
+symboles $b_{2},\dots{},b_{d-1}$ muni de la topologie
+produit; le d\'ecalage $D$ agit sur $\Omega $.
+L'application $h:S_{3}\rightarrow \Omega $ d\'efinie
+par $N^{n}(x)\in h(b)_{n}$ est continue et envoie le
+syst\`eme dynamique $(S_{3},N)$ dans $(\Omega ,D)$.
+
+\Theorem {Th\'eor\`eme 1.1 \Rm {(Barna, Saari et
+Urenho \Cite{Ba}, \Cite{SU})}} Si le polyn\^ome
+$f$ de degr\'e $d\geq 3$ a tous ses z\'eros r\'eels
+et distincts, alors $S_{3}$ est un Cantor de mesure
+nulle, l'application $h$ est surjective et toute
+orbite p\'eriodique non constante de $D$ se rel\`eve
+en une orbite de $h$ de m\^eme p\'eriode, les orbites
+constantes se relevant en des orbites de p\'eriode
+2.\endTheorem
+
+\Proof {D\'emonstration} Pour $1<i<d$, soit $\beta
+_{i}=\,\,]e_{i},f_{i}[$ la composante connexe de
+$x_{i}$ dans $S_{1}$, alors $S_{3}\subset B = \bigcup
+\left \lbrace b_{i}\setminus \beta _{i} \bigMidvert
+1<i<d\right \rbrace $ et $N$ \'echange $e_{i}$ et
+$f_{i}$ (cf. Figure~2).
+
+ Comme $\Lim_{t\rightarrow c_{i}}N'(t) = -\infty $ et
+ $N'(x_{i})=0$, l'\'equation
+ $$N'(x)=-a^{2} \Eqno (*)$$
+a au moins une solution dans chacun des $2d-2$
+intervalles de $B$ et il n'y a qu'une solution par
+intervalle car \Admin {(*)} est de degr\'e $2d-2$,
+donc $N'$ est strictement monotone sur chaque
+intervalle sur lequel elle est n\'egative, en
+particulier croissante sur $]c_{i-1},e_{i}]$ et
+d\'ecroissante sur $[f_{i},c_{i}[$. Par un calcul
+astucieux (\Cite{Ba}, p.202-206), Barna obtient
+$N'(e_{i})<-1$ et $N'(f_{i})<-1$; donc $N$ est
+dilatante sur $B$, et a fortiori sur $S_{3}\subset B$.
+Comme $S_{3}$ est invariant, sa mesure doit \^etre
+nulle. Le reste du th\'eor\`eme est facile.
+\endProof
+
+ Dans \Cite{SU} et \Cite{HM}, on trouvera d'autres
+informations sur la dynamique de $N$. Hurley et
+Martin ont aussi observ\'e que si $T_{f}$ est une
+application $C^{2}$ d\'efinie dans le compl\'ementaire
+d'un ensemble fini $J$, tendant vers l'infini pr\`es
+de $J$ et dont les points fixes sont attractifs, alors
+deux points fixes cons\'ecutifs sont s\'epar\'es par
+une asymptote du graphe de $T_{f}$, et $T_{f}$
+pr\'esente le m\^eme chaos que $N_{f}$.
+
+ Le th\'eor\`eme de Barna reste vrai s'il y a des
+racines multiples. En ce cas, comme $S_{2}$ est
+d\'enombrable, la mesure de ${\Bbd R}\setminus S_{1}$
+est nulle, ce qui semble donner raison aux joueurs.
+Cependant, pour tout $d>2$, il y a des polyn\^omes $p$
+de degr\'e $d$ avec $p''(0)=0$ et
+$p(0)=-p'(0)\mathbin{\not =}0\mathbin{\not
+=}p(1)=p'(1)$ et donc pour lesquels $\lbrace
+0,1\rbrace $ est un cycle superattractif d'ordre 2 de
+$N$ (par exemple \hskip 1pt \Footnote{(\dag
+)}{D'apr\`es le th\'eor\`eme de Barna, un tel
+polyn\^ome a des racines complexes.} le polyn\^ome
+$p(z)={\textstyle {1\over 2}}z^{3}-z+1$). Tout
+polyn\^ome $q$ proche de $p$ poss\`ede un cycle
+attractif d'ordre $2$. Il s'en suit que {\it la
+m\'ethode de Newton n'est pas un algorithme
+g\'en\'eriquement convergent\/}.
+
+ La dynamique holomorphe donne d'autres informations
+sur les orbites de $N$ (voir \Cite{Sm4}, \Cite{DH} et
+\Cite{F}).
+
+
+
+
+
+\Subheading {2. Les m\'ethodes d'Euler-Newton, un
+crit\`ere au but de convergence}
+%
+ Soient $p : {\Bbd C}\rightarrow {\Bbd C}$ un
+polyn\^ome et $v$ un point r\'egulier de $p$ (i.e.
+$p'(v)\mathbin{\not =}0$); il y a, d\'efini au
+voisinage de $z=p(v)$, un unique inverse \`a droite de
+$p$ envoyant $z$ sur $v$, notons le $p_{v}^{-1}$, de
+rayon de convergence $r_{v}$ en $v$. Notons
+$D_{v}=D(z,r_{v})$. Si $r_{v}> \left \vert z\right
+\vert $, Euler calcule une racine $w$ de $p$ gr\^ace
+au d\'eveloppement de Taylor de $p_{v}^{-1}$ en $z$ :
+$$
+ w = p_{v}^{-1}(0) = p_{v}^{-1}(z-z)
+ = \displaystyle \sum _{n=0}^{\infty } {1\over n!}\,
+\left \lbrace {d^{n}\over dz^{n}}p_{v}^{-1 }\right
+\rbrace _{z}\,(-z)^{n } \Eqno (2.1)
+$$
+ Le calcul des termes de (2.1) co\^utant de plus en
+plus cher, Euler pr\'ef\`ere tronquer cette s\'erie
+\`a l'ordre $k$ et it\'erer l'application $v\mapsto
+E_{k}(v)$ ainsi obtenue. Remarquons que
+$E_{1}(v)=v-p(v)/p'(v)$ est l'application de Newton.
+
+\Theorem {Proposition 2.1 \Rm {(\Cite{ShSm1},
+\Cite{Sm4})}} Pour chaque $k$, il y a une
+constante $c_{k}<1$ telle que si $w$ est une racine
+simple de $p$ et $v_{0}\in p_{w}^{-1}(c_{k}D_{w})$,
+alors pour tout $n$ l'it\'er\'e
+$v_{n}=E_{k}^{n}(v_{0})$ est dans
+$p_{w}^{-1}(D_{w})$, la suite $v_{n}$ converge vers
+$w$, et
+$$
+ \left \vert p(v_{n})\right \vert \leq
+b^{(k+1)^{n}-1} \left \vert p(v_{0})\right \vert
+\enskip \enskip ,\enskip \enskip \Rm {o\`u }\enskip
+\enskip \enskip b= \left \vert p(v_{0})\right \vert
+/c_{k}r_{w}<1\enskip .
+$$
+La suite $c_{k}$ est croissante, tend vers $(2-\sqrt
+2)/4$ quand $k\rightarrow \infty $, et
+$$
+ c_{1} = 1/9 < c_{2} < 1/8 < c_{3} < 1/7 < c_{4} <
+(2-\sqrt 2)/4 < 1/6\enskip \enskip .
+$$\endTheorem
+ Un \Bi{bon z\'ero approch\'e } (pour la m\'ethode
+d'Euler d'ordre $k$) est un $v_{0}$ auquel on peut
+appliquer la proposition 2.1. Nous ne d\'emontrerons
+et n'utiliserons 2.1 qu'avec $k=1$. Pour $k>1$, voir
+\Cite{ShSm1, \Rm {p.115-121}}.
+
+\Remark {Remarque 2.2} La connaissance de $r_{w}$
+est inaccessible \`a un observateur en $v=v_{0}$; {\it
+on peut cependant minorer $r_{w}$ par $\rho _{p}$ le
+module de la plus petite valeur critique\/}, qui peut
+s'estimer \`a l'aide du discri\-mi\-nant. Le
+crit\`ere obtenu a peu d'int\'er\^et du point de vue
+num\'erique, car le calcul du discriminant co\^ute
+trop cher; il sera cependant utile pour donner des
+estim\'ees probabilistes.\endRemark
+
+\Theorem {Proposition 2.3 \Rm {(\Cite{ShSm1})}} Soit
+$D$ le disque unit\'e; la probabilit\'e dans $D\times
+P_{d}(1)$ pour que $v_{0}$ dans $D$ soit un bon
+z\'ero approch\'e d'un polyn\^ome $p$ de $P_{d}(1)$
+est minor\'ee par $c/d^{5}$ avec $c>4\cdot
+10^{-4}$.\endTheorem
+
+\Proof {Preuve de 2.3} Un point $z$ est une valeur
+critique de $p$ si et seulement si le polyn\^ome $p-z$
+est de discriminant z\'ero. Comme le discriminant
+${\Cal D} : P_{d}\rightarrow {\Bbd C}$ est de degr\'e
+$d-1$ en le terme constant, on a, en posant ${\Cal
+E}_{d}(\rho )=\lbrace p\in P_{d}(1)\bigMidvert \rho
+_{p}<\rho \rbrace $, le lemme suivant:
+
+\Theorem {Lemme 2.4} La mesure de ${\Cal E}_{d}(\rho
+)$ est major\'ee par $(d-1)\rho ^{2}$. \endProof
+\endTheorem
+
+ Comme le produit des racines de $p$ est $a_{0}$, un
+polyn\^ome $p$ de $P_{d}(1)$ (qui v\'erifie $ \left
+\vert a_{0}\right \vert \leq 1$) a une racine $w$ dans
+$D$. Si de plus $p$ est hors de ${\Cal E}_{d}(\rho )$
+pour un $\rho >0$, $w$ est un z\'ero simple et $ \left
+\vert p'(w)\right \vert \leq 1+2+\dots{}+d
+={\textstyle {1\over 2}} d(d+1)$; donc, gr\^ace au
+th\'eor\`eme du quart (cf. \Cite{O},~p.\,\,3), le
+disque $D'$ centr\'e en $w$ et de rayon $r=\rho
+/18d(d+1)$ est inclus dans $ p_{w}^{-1}(1/9D_{w})$, et
+donc constitu\'e de bons z\'eros approch\'es. L'aire
+de $D\cap D'$ est sup\'erieure \`a $\sigma =r^{2}\sqrt
+{1-r^{2}/4}$\enskip \enskip (cf. Figure~3). Soit
+$0<\mu <1$. En prenant $\rho =\sqrt {\mu /(d-1)}$
+dans 2.4, la probabilit\'e cherch\'ee est minor\'ee
+par
+${1\over \raise .5pt\hbox{$\pi $}}\int _{0}^{1}\sigma
+(\mu )d\mu \geq c/d^{5}$. \endProof
+
+
+
+\vDiagram{ {75}\hskip\parindent Figure 3}
+
+
+
+\Remark {Notations 2.5} Le polyn\^ome $p$ \'etant
+fix\'e et $v$ r\'egulier pour $p$, on pose: $\beta
+(v)= \left \vert p(v)/p'(v)\right \vert $, $\gamma
+(v)= \left \vert p^{(k)}(v)/k!\,p'(v)\right \vert
+^{1/k-1}$ et $\alpha (v)=\beta (v)\gamma (v)$. Si
+l'on a besoin de pr\'eciser $p$, on \'ecrit $\beta
+(v,p)$, $\gamma (v,p)$, $\alpha (v,p)$.\endRemark
+
+\Proof {D\'emonstration de 2.1 lorsque $k=1$}
+Calculons $p(v_{1})$ par la s\'erie de Taylor de $p$
+en $v=v_{0}$; comme $k=1$, $v_{1}-v=\beta (v)$ et les
+deux premiers termes s'annulent, les autres \'etant
+major\'es par $ \left \vert p(v)\right \vert (\alpha
+(v))^{k-1}$ d'o\`u le
+
+\Theorem {Lemme 2.6} Si $v$ est r\'egulier pour
+$p$ et $\alpha (v)<\alpha $, alors $ \left \vert
+p(v_{1})\right \vert <{\alpha \over 1-\alpha } \left
+\vert p(v)\right \vert $. \endProof \endTheorem
+
+\Theorem {Lemme 2.7} Si $v$ est r\'egulier pour
+$p$, alors $\alpha (v)<4 \left \vert p(v)\right \vert
+/r_{v}$.\endTheorem
+
+\Proof {D\'emonstration de 2.7} Comme $p$ est
+l'inverse de la fonction univalente
+$p_{v}^{-1}:D_{v}\rightarrow {\Bbd C}$, les
+coefficients $a_{k}$ de son d\'eveloppement de Taylor
+en $v$ sont born\'es par un th\'eor\`eme de L{\"o}wner
+(\Cite{H},~p.\,\,137):
+ $$
+ \left \vert a_{k}\right \vert \leq B_{k} \left
+\vert a_{i}\right \vert ^{k}r_{v}^{k-1} \enskip
+\enskip \enskip \enskip \Rm {o\`u}
+ \enskip \enskip \enskip \enskip B_{k} = 2^{k
+}{1\cdot 3\,\dots{}(2k-1) \over 1\cdot
+2\,\dots{}k\cdot (k+1)} \leq 4^{k-1}
+$$
+d'o\`u le lemme. \endProof
+
+ Sous les hypoth\`eses de 2.1, comme $r_{v}>r_{w}-
+\left \vert p(v)\right \vert $, on d\'eduit de ces
+deux lemmes $ \left \vert p(v)\right \vert \leq A
+\left \vert p(v)\right \vert ^{2}$ o\`u $A \left \vert
+p(v)\right \vert <b$. D'autre part, comme sur
+$D(0,r_{w}/9)$ les inverses $p_{v}^{-1}$ et
+$p_{w}^{-1}$ co\"\i ncident, et $$
+ \left \vert v_{1}-v\right \vert = \left \vert
+p(v)/p'(v)\right \vert \leq r_{w}\,/\,9 \left \vert
+p'(v)\right \vert \leq r_{v}\,/\,8 \left \vert
+p'(v)\right \vert <r_{v}\,/\,4 \left \vert p'(v)\right
+\vert \enskip \enskip ,
+$$
+le th\'eor\`eme du quart assure que $v_{1}$ est dans
+$p_{w}^{-1}(D_{w})$. Donc, par r\'ecurrence, $ \left
+\vert p(v_{n+1})\right \vert ^{2}<A \left \vert
+p(v_{n})\right \vert ^{2}$ avec $A \left \vert
+p(v_{0})\right \vert <b$, d'o\`u la proposition.
+\endProof
+
+
+\Subheading {3. Le th\'eor\`eme de d'Alembert-Gauss,
+une m\'ethode de Newton globale}
+%
+ L'ensemble $\Sigma $ des valeurs critiques d'un
+polyn\^ome $p$ de degr\'e $d>0$ est fini ($ \left
+\vert \Sigma \right \vert \leq d-1$); comme $p$ est
+une application ouverte, il y a un $v$ tel que le
+rayon $R_{z}=\lbrace tz\enskip \vert \enskip 0<t\leq
+1\rbrace $ ($z=p(v)$) \'evite $\Sigma $ (cf.
+Figure~4); le point $v$ est donc r\'egulier,
+$p_{v}^{-1}$ se prolonge analytiquement \`a un
+voisinage de $R_{z}$ et $w=\Lim_{t\rightarrow 0}
+p_{v}^{-1}(tz)$
+est une racine de $p$. Par des majorations faciles,
+on peut obtenir un ensemble de $d$ points de grand
+module contenant un tel $v$: cette d\'emonstration est
+constructive. Elle conduisit Smale (\Cite{Sm2}) \`a
+\'etendre $p_{v}^{-1}$ \`a des secteurs angulaires.
+
+
+
+\vDiagram{ {50}Figure 4 \hfill Figure 5 }
+
+
+
+
+ L'\Bi{\'etroitesse } $e(v)$ (relativement \`a $p$)
+d'un point $v$ non racine de $p$ est le plus grand
+$\theta \geq 0$ tel que $p_{v}^{-1}$ se prolonge au
+secteur:
+ $$ W(z,\theta ) = \lbrace z'\in {\Bbd
+C}\enskip \bigMidvert \enskip \left \vert \Rm
+{Arg}(z'/z)\right \vert <\theta \rbrace $$
+(rappelons que $z=p(v)$ et convenons que
+$W(z,0)=\lbrace z\rbrace $ (cf. \Cite{G})).
+
+\Theorem {Th\'eor\`eme 3.1} Il y a des constantes
+$M$ et $L$ d\'ependant de $\theta $ ($L>0<M<1$)
+telles que, pour $1-M\leq K<1$ et $v_{0}$ un point
+d'\'etroitesse $\theta >0$ relativement \`a un
+polyn\^ome non constant $p$, et si l'on note
+$t_{i}=K^{i}p(v_{0})$ la suite $v_{i}$ d\'efinie par:
+$$
+ v_{i} = N_{p-t_{i}}(v_{i-1}) =
+v_{i-1}-{p(v_{i-1})-t_{i} \over p'(v_{i-1})}
+\Eqno ({\Sharp})
+$$
+converge vers une racine de $p$. De plus:
+$$
+ \left \vert p(v_{n})\right \vert \leq K^{n}(1+L)
+\left \vert p(v_{0})\right \vert \Eqno
+({\Sharp}{\Sharp})
+$$
+$M=\sin\theta /(24+\sin\theta )$ et $L={2\over 3}M$
+conviennent.\endTheorem
+\penalty -1000
+\Theorem {Corollaire 3.2} Soit $p$ un polyn\^ome de
+ $P_{d}(1)$ et $\varepsilon >0$. Si $v_{0}$ est un
+point d'\'etroitesse $\theta >0$ et de module $R>1$,
+et $v_{n}$ est la suite d\'efinie par ({\Sharp})
+avec $K=1-M$, alors, si $n\geq N(d,\theta
+,R,\varepsilon )$, on a $ \left \vert p(v_{n})\right
+\vert \leq \varepsilon $, o\`u $N(d,\theta
+,R,\varepsilon )=K_{1}d+K_{2}+K_{3}\log(1/\varepsilon
+)$ avec $K_{1}=K_{3}\log{R}$,\,\,
+$K_{2}=K_{3}\log{R(1+L)\over R-1}$ et $K_{3} =
+{1\over \left \vert \log(1-M)\right \vert }<{1\over
+M}$.
+\endProof \endTheorem
+
+\Proof {D\'emonstration de 3.1} Posons
+$z_{n}=p(v_{n})$, $r_{n}=r_{v_{n}}$ et
+$D_{n}=D(t_{n},t_{n}\sin\theta )$. Comme $t_{n}=K^{n}
+\left \vert p(v_{0})\right \vert $, l'in\'egalit\'e
+({\Sharp}{\Sharp}) suit de:
+\medskip\nobreak
+\Item {{\bf (a_{n})} } $ \left \vert
+z_{n}-t_{n}\right \vert \leq L \left \vert t_{n}\right
+\vert $.
+\medskip\nobreak
+ \Admin {(a_{0})} est vraie car $t_{0}=z_{0}$. De
+\Admin {(a_{n})}, il vient:
+\medskip\nobreak
+\Item {{\bf (b_{n})}} $ \left \vert
+z_{n}-t_{n+1}\right \vert \leq \left \vert
+z_{n}-t_{n}\right \vert + \left \vert
+t_{n}-t_{n+1}\right \vert \leq (L+M) \left \vert
+t_{n}\right \vert $.
+\medskip\nobreak
+ Comme $D_{n}$ est inclus dans $W(t_{0},\theta )$ (cf.
+Figure~5), on tire de \Admin {(a_{n})} et \Admin
+{(b_{n})} :
+$$
+ r_{n}\geq \left \vert t_{n}\right \vert \sin\theta -
+\left \vert z_{n}-t_{n}\right \vert \geq (\sin\theta
+-L) \left \vert t_{n}\right \vert \geq J \left \vert
+z_{n}-t_{n+1}\right \vert \enskip \enskip ,
+$$
+o\`u $J = (\sin\theta -L)/(L+M)$. Supposons
+$$
+ J>4 \enskip \enskip . \Eqno (*)
+$$
+Les lemmes 2.6 et 2.7 appliqu\'es au polyn\^ome
+$p-t_{n+1}$ donnent:
+$$
+ \left \vert z_{n+1}-t_{n+1}\right \vert \leq
+{ 4 \left \vert z_{n}-t_{n+1}\right \vert ^{2} \over
+r_{n}-4 \left \vert z_{n}-t_{n+1}\right \vert } \leq
+I \left \vert t_{n+1}\right \vert \enskip \enskip ,
+$$
+o\`u $I=4(L+M)/M(J-4)$. Donc, si de plus
+$$
+ I<\sin\theta \enskip \enskip , \Eqno (*')
+$$
+le point $z_{n+1}$ est dans $W(z_{0},\theta )$, et si
+enfin
+$$
+ I<L\enskip \enskip , \Eqno (*'')
+$$
+la condition \Admin {(a_{n+1})} est v\'erifi\'ee. Que
+les valeurs de $M$ et $L$ donn\'ees dans 3.1
+v\'erifient les hypoth\`eses (*) n'est plus qu'un
+exercice de calcul.~\endProof
+%\input RESOURCE% for test run
+%\input Bourbaki/Marin0-3% for final run
+
+\Subheading {4. Les algorithmes probabilistes}
+%
+ Soit $S_{R}$ le cercle $\lbrace v\,\,\bigMidvert \,\,
+\left \vert v\right \vert =R\rbrace $ muni de la
+mesure de Lebesgue normalis\'ee par $\mu (S_{R})=1$.
+Soit $p$ un polyn\^ome de $P_{d}(1)$ et posons
+$E_{R}(\theta )=\lbrace v\in S_{R}\bigMidvert e(v)\leq
+\theta \rbrace $; on \'etablira au {\S }5 la:
+
+\Theorem {Proposition 4.1} L'ensemble $E_{R}(\theta )$
+est inclus dans la r\'eunion de $2(d-1)$ arcs de
+$S_{R}$ chacun de mesure: ${1\over \pi d}\left
+\lbrack \theta +2\arcsin{1\over R-1}\right \rbrack
+$.\endTheorem
+
+On notera $\mu _{\theta ,R}$ la somme de leur mesure.
+
+\Theorem {Algorithme $ {\Cal A}(\theta ,R)$ 4.2 \Rm
+{(\Cite{Sm4})}} {\rm
+Soit $p$ un polyn\^ome de $P_{d}(1)$ et $\varepsilon
+>0$. Les constantes $M$,\enskip \enskip $K=1-M$, et
+$N$ (d\'ependant de $d$, $\theta $, $R$, et
+$\varepsilon $) \'etant celles de 3.2, proc\'eder
+comme suit:}
+\Item {1^{\circ }} Choisir au hasard un $v_{0}$ sur
+ $S_{R}$.
+\Item {2^{\circ }} Calculer $v_{N}$ en it\'erant
+$N$ fois (3.1).
+\Item {3^{\circ }} Si $ \left \vert
+p(v_{N})\right \vert \leq \varepsilon $ fin; sinon
+retourner au \Admin {1^{\circ }}.
+
+\par \noindent {\rm La moyenne du nombre de cycles
+dans cet algorithme est major\'ee par} $t = t_{\theta
+,R} = 1/(1-\mu _{\theta ,R})$. \qed \endTheorem
+
+
+\Subheading {Quelques valeurs num\'eriques}
+\vskip-12pt
+$$\matrix{
+ & & & M& t& tK_{1}& tK_{2}& tK_{3} \Endphase \cr
+ R = 3,& \theta = \pi /12& : & 1/94& 6& 615&
+231& 560 \Endphase \cr
+R = 6,& \theta = \pi /6& : & 1/49& 2,44& 212& 24&
+119 \Endphase \cr
+}$$
+
+ Lorsque, pour $R$ donn\'e, on cherche \`a minorer
+$tK_{1}$, l'optimum semble \^etre autour de $R=8$ et
+$\theta =7\pi /36$ et est assez stable (Pour $6\leq
+R\leq 16$,\enskip $tK_{1}$ varie entre 206 et 223.)
+Assez paradoxalement, il est plus \'economique de
+partir d'une grande valeur initiale (cf. {\S }5).
+
+ Si vous ne faites pas confiance au hasard, soit
+$k=2(d-1)\,\ell \,\,t_{\theta ,R}$ un entier avec
+$\ell >1$. Placez alors $k$ points \'egalement
+r\'epartis sur $S_{R}$. Comme $E_{k}(\theta )$ est
+dans une r\'eunion de $2(d-1)$ arcs, il ne peut
+contenir plus de $T_{k}=2(d-1)+k\mu _{\theta ,R}$ de
+ces points. Tirant au sort les valeurs initiales dans
+cette urne de $k$ points, on est s\^ur que
+l'algorithme 4.2 n'a pas plus de $T_{k}$ cycles; la
+moyenne du nombre de tirages est major\'ee par
+$t_{k}=t_{\theta ,k}\,\ell /(\ell -1)$. Le choix de
+$\ell $ est affaire de go\^ut: un grand $\ell $
+am\'eliore la moyenne, mais recule la barri\`ere de
+s\'ecurit\'e $T_{k}$.
+
+
+\Theorem {Th\'eor\`eme 4.3} Soit $0<\mu <1$. Il y
+a une fonction $N(\mu ,d)$ telle que, si
+$R=1+4d^{\,2}/\pi \mu $ et $(v_{0},p)$ est hors d'un
+ensemble exceptionnel de mesure $\mu $ dans
+$S_{R}\times P_{d}(1)$, il suffit, partant de $v_{0}$
+et fixant $\theta ={\textstyle {1\over 2}}\pi \mu $
+de $N(\mu ,d)$ it\'erations de la formule \Admin
+{3.1({\Sharp})} pour obtenir un bon z\'ero approch\'e
+de $p$. On a :
+$$
+ N(\mu ,d) = K_{1}(\mu )(d+{\textstyle {\textstyle
+{1\over 2}}}) {\log(1/\mu )+ K_{2}( d) \over \mu } +
+K_{3}(d)
+$$
+o\`u $K_{1}$ est croissante,
+$$
+ 15,2\leq K_{1}(\mu )\leq 25\enskip \enskip ,
+\enskip \enskip \enskip \enskip \enskip
+K_{1}(1/4)<15,5<K_{1}(1/2)<18\enskip \enskip ,
+$$$$
+ (d+{\textstyle {1\over
+2}})K_{2}=3\log{d}+\log(36/\pi )\enskip ,\enskip
+\enskip \Rm { {\it et\/}}
+ \enskip \enskip K_{3}(d)=2/3+K_{1}\pi
+/4d^{2}\enskip \enskip .
+$$\endTheorem
+
+\Proof {D\'emonstration de 4.3} La mesure des
+$(v_{0},p)$ tels que, soit $\rho _{p}<\rho $, soit
+$e_{p}(v_{0})<\theta $, est major\'ee par
+$$
+ \mu = (d-1)\rho ^{2}+{2(d-1)\over \pi d} \left
+\lbrack \theta +2\arcsin{1\over R-1}\right \rbrack
+\enskip \enskip .
+$$
+{\smc }Il suffit de poser $\rho =\sqrt \mu /d$ et
+d'appliquer 3.2 avec $\varepsilon =\rho /9$, et, pour
+$\theta $ et $R$, les valeurs donn\'ees dans 4.3.
+\endProof
+
+
+
+\Subheading {5. La g\'eom\'etrie des polyn\^omes \Rm
+{(cf. \Cite{ShSm1})}}
+%
+ Une id\'ee naturelle pour trouver un z\'ero d'un
+polyn\^ome $p$ est de minimiser la fonction r\'eelle
+$g(v)={\textstyle {1\over 2}} \left \vert p(v)\right
+\vert ^{2}$ en descendant le long des lignes de
+gradient. Or, $X(v)=\Rm {grad}g(v)=\overline
+{p'(v)}p(v)$ est colin\'eaire au champ de Newton
+$n(v)=p(v)/p'(v)$ ($X(v)= \left \vert p'(v)\right
+\vert ^{2}n(v)$) et donc $X$ a m\^emes courbes
+int\'egrales que l'\'equation diff\'erentielle de
+Newton $v'=-n(v)$. La m\'ethode d'Euler, avec le pas
+1 pour r\'esoudre cette \'equation diff\'erentielle,
+produit la m\^eme it\'eration que la m\'ethode de
+Newton. Remarquons aussi que, comme
+$p'(v)n(v)=p(v)=z$, le polyn\^ome $p$ envoie son champ
+de Newton sur le champ radial du but. Donc les lignes
+de gradient que nous cherchons \`a descendre sont
+aussi les feuilles du feuilletage ${\Cal F}_{p}$,
+pr\'eimage par $p$ des rayons de ${\Bbd C}$ \`a savoir
+les courbes que Smale suivait dans sa d\'emonstration
+du th\'eor\`eme fondamental de l'alg\`ebre. Dans
+\Cite{Sm2} (et aussi \Cite{ShSm1}), Smale avait suivi
+ces lignes de gradient de plus pr\`es en relaxant le
+pas de la m\'ethode d'Euler, i.e. en it\'erant
+$v\mapsto v-hp(v)/p'(v)$ o\`u $0<h<1$.
+
+ De mani\`ere imag\'ee, si le graphe de $g$ est une
+montagne que l'on cherche \`a descendre, au lieu \`a
+chaque pas de viser le refuge attendu, Smale
+\Cite{Sm2} vise une \'etape interm\'ediaire, disons
+\`a mi-distance. La m\'ethode du {\S }3 (\Cite{Sm4})
+est plus s\^ure: avant de partir, on d\'etermine
+toutes ses \'etapes, ce qui permet d'\'eviter de
+mauvais embranchements aux cols. Pour expliquer le
+paradoxe du {\S }4, on peut dire que, de plus haut, la
+vue permet de distinguer la vall\'ee principale des
+vall\'ees secondaires et donc on peut faire un
+meilleur plan de route.
+
+ Le feuilletage ${\Cal F}_{p}$, orient\'e par $X$, a
+des singularit\'es de deux types (cf. Figure~6): des
+sources aux racines de $p$ et des selles de singe \`a
+$m-1$ pattes aux points critiques de multiplicit\'e
+$m$ et de valeur critique non nulle
+($0=p'(c)=\dots{}=p^{(m-1)}(c)$ et
+$p(c)p^{(m)}(c)\mathbin{\not =}0$). Soit $\Gamma
+(p)$ la r\'eunion des vari\'et\'es instables des
+points critiques de ${\Cal F}_{p}$; c'est un arbre
+plong\'e dans ${\Bbd C}$, \Bi{l' arbre de Shub-Smale
+du polyn\^ome } $p$. Posons $\Gamma (p)^{+}$
+l'union de $\Gamma (p)$ et des vari\'et\'es stables
+des singularit\'es de type selle (\'eventuellement
+multiples) de ${\Cal F}_{p}$. Les composantes de
+$\Gamma (p)^{+}/\Gamma (p)$ {\it sont en nombre
+inf\'erieur ou \'egal \`a\/} $2(d-1)$ (ce maximum est
+atteint quand les racines de $p$ sont simples, les
+points critiques sont de multiplicit\'e 2 et n'ont pas
+de liaisons entre eux dans ${\Cal F}_{p}$).
+
+
+
+\vDiagram{ {66}Figure 6}
+
+
+
+
+\Remark {Remarque 5.1} Les arbres plong\'es dans
+${\Bbd C}$ qui peuvent se r\'ealiser comme arbres de
+Shub-Smale d'un polyn\^ome peuvent \^etre facilement
+d\'etermin\'es et, \`a l'aide des arbres de
+Shub-Smale, on peut {\it param\'etrer les polyn\^omes
+par leurs valeurs critiques\/} (cf. \Cite{M} et
+\Cite{STW}).\endRemark
+
+\Theorem {Lemme 5.2 \Rm {(Gauss)}} Soit $p$ un
+polyn\^ome dont toutes les racines sont \`a
+l'int\'erieur d'un cercle $S$, alors le champ de
+Newton est transverse \`a $S$.\endTheorem
+
+\Theorem {Corollaire 5.3} Soit $S$ un cercle
+contenant dans son int\'erieur tous les z\'eros d'un
+polyn\^ome $p$, alors:
+\Item {(i)} l'arbre $\Gamma (p)$ est dans
+l'int\'erieur de $S$;
+\Item {(ii)} $\Gamma (p)^{+}\cap S$ contient au plus
+ $2(d-1)$ points. \endProof \endTheorem
+
+\Theorem {Lemme 5.4} Soit $p$ un polyn\^ome de
+$P_{d}(1)$, $R\geq 2$, $S_{R}$ le cercle $ \left
+\vert v\right \vert =R$ et $v_{1}$, $v_{2}$ deux
+points de $S_{R}$. Alors :
+\medskip
+\Item {(i)} $p(v_{i})$ est non nul;
+\medskip
+\Item {(ii)} $\displaystyle d \left \vert \Rm
+{Arg}{v_{1}\over v_{2}}\right \vert - 2\Rm
+{arcsin}{1\over R-1}\leq \left \vert \Rm
+{Arg}{p(v_{1})\over p(v_{2})}\right \vert \leq $
+ $$\leq d \left \vert \Rm {Arg}{v_{1}\over
+v_{2}}\right \vert + 2\Rm {arcsin}{1\over R-1}\enskip
+\enskip .$$
+\endTheorem
+\Proof {D\'emonstration de 4.1} Soit $R\geq 2$ et
+$p$ dans $P_{d}(1)$; remarquons qu'un point $v_{0}$ de
+$S_{R}$ est dans $E_{R}(\theta )$ si et seulement s'il
+y a un $v'$ dans $S_{R}\cap \Gamma (p)^{+}$ avec $~
+\left \vert \Rm {Arg}(p(v)/p(v')\right \vert <\theta
+$. D'apr\`es 5.4(i) et 5.2, ${\Cal F}_{p}$ est
+transverse \`a $S_{R}$ et l'un des arcs limit\'es par
+$v$ et $v'$ sur $S_{R}$ a tous ses points $u$
+v\'erifiant $ \left \vert \Rm {Arg}(p(u)/p(v')\right
+\vert <\theta $. La proposition~4.1 suit alors de
+l'in\'egalit\'e de gauche dans 5.4~(ii). \endProof
+
+
+
+
+
+
+
+\Diagram {{75}\hfill Figure 7 \hfill \hfill Figure 8
+\hfill }
+\Proof {D\'emonstration de 5.2 (voir Figure 7)}
+Soient $w_{i}$ les racines de $p$ et soit $v$ sur
+$S$. On a:
+$$
+ \left \vert n(v)\right \vert ^{^{-2}}v\overline n(v)
+= v\,{p'(v)\over p(v)} = \sum _{i=1}^{d }{v\over
+v-w_{i}}\enskip \enskip .
+$$
+Or, comme $w_{i}$ est int\'erieur \`a $S$, on a $\Rm
+{Re}(v(\overline {v-w_{i}}))>0$; donc $\Rm {Re}(
+v/(v-w_{i}))>0$ et $\Rm {Re}( v\,\,\overline n(v))>0$.
+ \endProof
+
+\Proof {D\'emonstration de 5.4 (voir Figure 8)} Soit
+$p(v)=v^{d}+a_{1}v^{d-1}+\dots{}+a_{d}$ pour $ \left
+\vert v_{j}\right \vert =R$. On a:
+$$
+ \left \vert 1-{p(v_{j})\over v_{j}^{d}}\right
+\vert \leq \sum _{i=1}^{d }{ \left \vert
+a_{i}\right \vert \over \left \vert v_{j}\right \vert
+^{d}} < {1\over \left \vert v_{j}\right \vert
+}\,\,{1\over 1-1/ \left \vert v_{j}\right \vert }
+ = {1\over R-1} \leq 1
+$$
+car $R\geq 2$, d'o\`u (i); et pour (ii):
+$$
+ \left \vert \Rm {Arg}{p(v_{1})\over p(v_{2})} -
+\Rm {Arg}\left({v_{1}\over v_{2}}\right)^{d} \right
+\vert
+ = \Rm {Arg} \left \vert {p(v_{1})\over
+v_{1}^{d}}\,{v_{2}^{d}\over p(v_{2})}\right \vert
+\leq
+$$$$
+\hfil \leq \left \vert \Rm {Arg}{p(v_{1})\over
+v_{1}^{d}}\right \vert + \left \vert \Rm
+{Arg}{p(v_{2})\over v_{2}^{d}}\right \vert
+ \leq 2\Rm {arcsin}{1\over R-1}\enskip \enskip
+\enskip .
+$$ \endProof
+
+
+\Subheading {6. Un crit\`ere de convergence
+calculable en $\Headingfont v_{0}$}
+%
+ Soit $v$ un point r\'egulier d'un polyn\^ome $p$. En
+2.5, on a d\'efini $\alpha (v,p)=\beta (v,p)\gamma
+(v,p)$ o\`u $\beta (v,p)$ est la norme du vecteur de
+Newton $p(v)/p'(v)$, alors que le calcul de $\gamma
+(v)$ n\'ecessite la connaissance de toutes les
+d\'eriv\'ees de $p$ en $v$. La proposition suivante
+permet de majorer $\gamma (v)$ (et donc $\alpha (v)$)
+en n'ayant \`a \'evaluer que $p$ et $p'$ en $v$:
+
+\Theorem {Proposition 6.1 \Rm {(\Cite{Sm5},
+\Cite{Sm6})}} Soit $\varphi (r)=1+\dots{}+r^{d}$
+et $p(v)=a_{0}+a_{1}v+\dots{}+a_{d}v^{d}$ un
+polyn\^ome de degr\'e $d$, alors :
+$$
+\gamma (v,p) \leq {\left \Vert p\right \Vert (\varphi
+'( \left \vert v\right \vert ))^{2}\over \left \vert
+p'(v)\right \vert \varphi ( \left \vert v\right \vert
+)}\enskip \enskip ,\enskip \enskip \enskip \Rm {o\`u
+}\enskip \enskip \enskip \left \Vert p\right \Vert =
+\Rm {Max} \left \vert a_{i}\right \vert \enskip
+\enskip .
+$$\endTheorem
+
+\Theorem {Th\'eor\`eme 6.2 \Rm {(\Cite{Sm5})}} Soit
+$p$ un polyn\^ome et $v_{0}$ un point r\'egulier tel
+que $\alpha (v_{0},p)<3-2\sqrt 2$, alors la suite de
+Newton $v_{n+1}=v_{n}-p(v_{n})/p'(v_{n})$ converge
+vers une racine de $p$. De plus, il y a une
+bijection croissante $K:\left \lbrack \right
+.0,3-2\sqrt 2\left \lbrack \right . \llongrightarrow
+ [0,1[$ telle que: \enskip Si $\alpha
+(v_{0},p)<\alpha $, alors $\left \Vert
+v_{n+1}-v_{n}\right \Vert \leq K(\alpha
+)^{2^{n}-1}\left \Vert v_{1}-v_{0}\right \Vert $ et
+$\alpha _{0}=K^{-1}({\textstyle {1\over
+2}})>0,14$.\endTheorem
+
+ Pour $p$ dans $P_{d}(1)$, le nombre $\alpha (0,p)$
+est major\'e par $ \left \vert a_{0}\right \vert /
+\left \vert a_{1}\right \vert ^{2}$ qui est
+ind\'ependant de $d$. Ainsi, {\it l'ensemble des
+polyn\^omes de $P_{d}(1)$, dont la suite de Newton
+partant de z\'ero converge, a une mesure minor\'ee
+ind\'ependamment de\/} $d$.
+
+
+\Proof {D\'emonstration de 6.1} En majorant les
+coefficients de $p$ par $\left \Vert p\right \Vert $,
+on obtient $ \left \vert p^{(k)}(v)/k!\right \vert
+\leq \left \Vert p\right \Vert \varphi ^{(k)}( \left
+\vert v\right \vert )/k!$, d'o\`u en faisant $k=1$ on
+obtient $\left \Vert p\right \Vert \varphi '( \left
+\vert v\right \vert )/ \left \vert p'(v)\right \vert
+\geq 1$. Un jeu sur les coefficients du bin\^ome
+(\Cite{Sm6}, p.12-14) permet d'\'etablir que $\alpha
+(r,\varphi )\leq 1$ pour tout $r\geq 0$, d'o\`u
+$$
+ \left \vert p^{(k)}(v)/k!\right \vert \leq \left
+\Vert p\right \Vert \varphi ^{(k)}( \left \vert
+v\right \vert )/k! \leq \left \Vert p\right \Vert
+(\varphi '( \left \vert v\right \vert ))^{k}/(\varphi
+( \left \vert v\right \vert ))^{k-1}\enskip \enskip
+,\enskip \Rm {et}
+$$$$
+ \gamma (v,p) \leq \sup _{k>1}\left \lbrack
+\left \Vert p\right \Vert (\varphi '( \left \vert
+v\right \vert ))^{k}\over \left \vert p'(v)\right
+\vert (\varphi ( \left \vert v\right \vert ))^{k-1}
+\right \rbrack ^{1/k-1}\leq \,{\varphi '\over \varphi
+} \,\,\sup _{k>1}\left \lbrack \left \Vert p\right
+\Vert \varphi '\over \left \vert p'\right \vert
+\right \rbrack ^{1/k-1}\enskip \enskip .
+$$
+\par \noindent Le dernier supr\'emum est atteint pour
+$k=2$, d'o\`u la proposition. \endProof
+
+\Proof {D\'emonstration de 6.2} Pour $0\leq t<\gamma
+^{-1}$, soit $\psi $ la fonction $\psi (t)={1\over
+1-\gamma t}-2\gamma t+\alpha -1$; comme en 2.6, on
+\'etablit que, pour $\left \Vert v-v_{0}\right \Vert
+\leq t\gamma ^{-1} $ on a:
+ $$ \left \vert p(v_{0})\over p'(v_{0})\right \vert
+\leq {\psi (0)\over -\psi '(0)}\enskip \enskip
+\enskip ,\enskip \enskip \enskip \Rm {et}\enskip
+\enskip \enskip
+ \left \vert p''(v)\over p'(v_{0})\right \vert
+\leq {\psi ''(t)\over -\psi '(0)}\enskip \enskip
+\enskip .$$
+
+
+ Kantorovitch (\Cite{KA}, th\'eor\`eme 3, p.234) nous
+dit que, si $\psi (t)=0$ a une racine dans $\left
+[0,\gamma ^{-1}\right [\,$, alors la suite $v_{n}$
+converge vers une racine $w$ de $p$, que la suite de
+Newton $t_{n}$ de $\psi $ partant de $t_{0}=0$
+converge vers la plus petite racine $t_{*}$ de $\psi
+(t)=0$ et $ \left \vert v_{n+1}-v_{n}\right \vert \leq
+t_{n+1}-t_{n}$.
+
+ Il ne reste plus qu'\`a estimer $t_{n+1}-t_{n}$ pour
+obtenir les majorations du th\'eor\`eme 6.2.
+\endProof
+
+\Remark {Remarques}
+%
+\par \noindent Comme Kantorovitch \'enonce son
+th\'eor\`eme dans un Banach, le th\'eor\`eme~6.2 est
+valable pour une fonction analytique d\'efinie sur un
+Banach (il en est bien s\^ur de m\^eme pour 6.1).
+
+\par \noindent Smale d\'emontre 6.2 plus directement
+en majorant \`a chaque it\'eration de Newton les
+quantit\'es $\beta $ et $\gamma $. N'utilisant pas le
+th\'eor\`eme de Kantorovitch, cette approche se
+g\'en\'eralise aux m\'ethodes d'ordre sup\'erieur
+(\Cite{C}).\endRemark
+
+
+
+\Subheading {7. Un algorithme g\'en\'eriquement
+convergent \Rm {(\Cite{ShSm3})}}
+%
+ Soit $G_{d}$ l'ouvert de $P_{d}$ form\'e des
+polyn\^omes $p(v)=a_{0}+a_{1}v+\dots{} +a_{d}v^{d}$
+ayant leurs racines et leurs points critiques
+distincts: $P_{d}\setminus G_{d}$ \'etant
+alg\'ebrique, $G_{d}$ est un ouvert dense de mesure
+pleine. Soient $p$ dans $G_{d}$ et $v$ dans la
+sph\`ere de Gauss $S={\Bbd C}\cup \infty $.
+D\'efinissons alors:
+$$
+k_{p}(v)={\varphi ( \left \vert v\right \vert ) \left
+\vert p'(v)\right \vert ^{2}\over 2(\varphi '( \left
+\vert v\right \vert ))^{2} \left \vert p(v)\right
+\vert \left \Vert p\right \Vert }\enskip \enskip ,
+h_{p}(v)=\Rm {Min}(1,k_{p}(v))\enskip \enskip , $$
+et $T_{p}(v)=v-h_{p}(v)p(v)/p'(v)$ \enskip (o\`u
+$\varphi $ et $\left \Vert p\right \Vert $ sont
+d\'efinis au {\S }6).
+
+ Les points fixes de $T_{p}$ sont les racines et les
+points critiques de $p$. L'application $\widetilde T
+: S\times G_{d}\rightarrow S$ ainsi d\'efinie est
+continue et $C^{\infty }$ pr\`es des points critiques
+de $p$. Quand $p$ est fix\'e par le contexte, nous
+\'ecrirons $T$ au lieu de $T_{p}$.
+
+\Remark {Remarque} Les formules ci-dessus
+d\'efinissent une application continue $S\times
+P_{d}\rightarrow S$, mais si $p$ a des racines
+multiples, cette application n'est pas lisse pr\`es
+des racines multiples. Remarquons d'autre part que
+l'application de Newton $\widetilde N : S\times
+P_{d}\rightarrow S$ n'est pas continue (en $P_{d}$)
+aux racines multiples, car quand le polyn\^ome varie,
+un point critique se rapprochant d'une racine voit son
+image passer brusquement de l'infini \`a cette
+racine.\endRemark
+
+{\bf }\Theorem {Th\'eor\`eme 7.1} Pour tout $p$ de
+$G_{d}$, il y a un ferm\'e $V_{p}$ de mesure nulle
+dans $S$ tel que, pour tout $v$ hors de $V_{p}$ la
+suite des it\'er\'es $T^{k}(v)$, $k\geq 0$, converge
+vers un z\'ero de $p$.
+
+ De plus, $T$ est la m\'ethode de Newton dans un
+voisinage de chaque racine de $p$.\endTheorem
+
+\Theorem {Proposition 7.2} Soit $p$ dans $G_{d}$ et
+ $c$ un point critique de $p$, alors
+ $$V^{s}(c)=\lbrace v\bigMidvert T^{k}(v)\rightarrow
+c\enskip \enskip \Rm {quand}\enskip \enskip
+k\rightarrow \infty \rbrace $$
+est un ferm\'e de mesure nulle dans $S$.\endTheorem
+
+\Proof {D\'emonstration de 7.2} Comme le jacobien de
+$T$ est presque partout non nul, il suffit de montrer
+qu'un voisinage de $c$ dans $V^{s}(c)$ est de mesure
+nulle. Comme $T$ est lisse au voisinage de $c$, il
+suffit, selon le th\'eor\`eme de la vari\'et\'e stable
+(\Cite{HPS}), de prouver que $T'(c)$ est hyperbolique
+(en effet ce th\'eor\`eme impliquera alors que
+$V^{s}(c)$ est, pr\`es de $c$, un arc lisse). On a
+$$T'(c)(V) = V-\lambda \overline V\enskip \enskip
+\enskip ,\enskip \enskip \enskip \Rm {o\`u}\enskip
+\enskip \enskip
+ \lambda = {p(c)\,\overline p''(c)\,\varphi ( \left
+\vert c\right \vert )\over 2\left(\varphi '( \left
+\vert c\right \vert )\right)^{2}\left \Vert p\right
+\Vert \left \vert p(c)\right \vert }\enskip \enskip
+\enskip .$$
+Les valeurs propres de $T'(c)$ sont donc $1\pm \left
+\vert \lambda \right \vert $; or, comme on a
+\break$\varphi (r)\varphi ''(r)\leq 2(\varphi
+'(r))^{2}$,
+ $$ \left \vert \lambda \right \vert \leq { \left
+\vert p''(c)\right \vert \over \left \Vert p\right
+\Vert }\,\,{1\over \varphi ''( \left \vert c\right
+\vert )} \leq 1\enskip \enskip .$$
+\endProof
+
+\Proof {D\'emonstration de 7.1} Posons $V_{p}=\bigcup
+\left \lbrace V^{s}(c)\bigMidvert p'(c)=0\right
+\rbrace $. Soit $v$ hors de $V_{p}$ et
+$v_{n}=T^{n}(v)$, alors $p'(v)\mathbin{\not =}0$ et
+comme, d'apr\`es 6.1, $k(v)<{\textstyle {1\over
+2}}\alpha (v)$, on obtient par une majoration analogue
+\`a celle de 2.6~:
+ $$ \left \vert p(v_{n+1})\right \vert \leq
+h(v_{n}) \left \vert p(v_{n})\right \vert < \left
+\vert p(v_{n})\right \vert \enskip \enskip \enskip ,
+$$
+o\`u l'application continue $h : {\Bbd C}\rightarrow
+[0,1]$ n'est nulle qu'aux points critiques de $p$.
+
+ Comme $v$ n'est dans aucun des $V^{s}(c)$, cela
+implique que la suite d\'ecroissante $ \left \vert
+p(v_{n})\right \vert $ tend vers z\'ero et $v_{n}$
+tend vers une racine de $p$ (deux racines de $p$ ne
+peuvent \^etre adh\'erentes \`a $v_{n}$ puisque, comme
+$T$ co\"\i ncide avec l'application de Newton pr\`es
+des racines de $p$, ces derni\`eres sont des points
+fixes attractifs de $T$).\endProof
+
+
+\References {
+Bibliographie
+}
+%
+\Benchmark
+\Cite{Ba} {\smc B. Barna}, {\it Uber Divergenzpunkte
+des Newtonshe Verfahrens zur Bestimmung von
+W{\"u}rzeln algebraischer Gleichungen III\/}{\smc ,}
+Publ. Math. Debrecen {\bf 8} (1961), 193-207.
+\Benchmark
+\Cite{C} {\smc J. Curry}, {\it On zero finding methods
+of higher order from data at one point\/}, MSRI
+Berkeley (1986).
+\Benchmark
+\Cite{DH} {\smc A. Douady and J.H. Hubbard}, {\it On
+the dynamics of polynomial like mappings\/}, Ann.
+Sci. E.N.S., 4e s\'erie, {\bf t.18} (1985), 287-343.
+\Benchmark
+\Cite{F} {\smc J.-P. Francoise}, {\it Estimations
+uniformes pour les domaines de convergence de la
+m\'ethode de Newton\/}, S\'eminaire de G\'eom\'etrie
+Alg\'ebrique R\'eelle (J.J. Risler), Publ. Univ. Paris
+VII, {\bf 24} (1986).
+\Benchmark
+\Cite{G} {\smc O. Gabber}, {\it Diverses interventions
+au S\'eminaire Bourbaki\/}, tradition orale.
+\Benchmark
+\Cite{H} {\smc W. Hayman}, ``Multivalent functions'',
+Cambridge Univ. Press, Cambridge, 1958.
+\Benchmark
+\Cite{HPS} {\smc M. Hirsch, C. Pugh and M. Shub}, {\it
+Invariant manifolds\/}, Lectures Notes in Math. {\bf
+583} (1977), Springer, New-York.
+\Benchmark
+\Cite{HM} {\smc M. Hurley and C. Martin}, {\it
+Newton's algorithm and chaotic dynamical systems\/},
+SIAM J. Math. Anal. {\bf 15} (1984), 238-252.
+\Benchmark
+\Cite{Ka} {\smc L. Kantorovich et G. Akilov}, Analyse
+fonctionnelle, {\bf t.2}, Editions MIR, Moscou, 1981.
+\Benchmark
+\Cite{McM} {\smc C. McMullen}, ``Families of
+Rationals Maps and Iterative Root-Finding
+Algorithms'', Ph. D., Harvard Univ., Mai 1985, \`a
+para\^\i tre.
+\Benchmark
+\Cite{M} {\smc A. Marin}, {\it Les arbres de
+Shub-Smale\/}, S\'eminaire de G\'eom\'etrie
+alg\'ebrique r\'eelle (J.J. Risler), Publ. Univ. Paris
+VII {\bf 24} (1986).
+\Benchmark
+\Cite{O} {\smc J. Oesterl\'e}, {\it D\'emonstration de
+la conjecture de Bieberbach\/}, expos\'e \Admin
+{n^{o}649} du S\'eminaire Bourbaki (juin 1985).
+\Benchmark
+\Cite{R1} {\smc J. Renegar}, {\it On the efficiency of
+Newton's method in approximating all zeros of a system
+of complex polynomials\/}, \`a para\^\i tre dans
+Mathematics of Operations Research.
+\Benchmark
+\Cite{R2} {\smc J. Renegar}, {\it A polynomial-time
+algorithm based on Newton's method for linear
+programming\/}, MSRI Berkeley (1986).
+\Benchmark
+\Cite{SU} {\smc D. Saari and J. Urenko}, {\it Newton's
+method, circle maps and chaotic motions\/}, Amer.
+Math. Monthly {\bf 91} (1984), 3-17.
+\Benchmark
+\Cite{Sh} {\smc M. Shub}, {\it The geometry and
+topology of dynamical systems, and algorithms for
+numerical problems\/}, notes pr\'epar\'ees pour des
+conf\'erences donn\'ees \`a D.D.A, Universit\'e de
+Peking, Bejing, Chine, Ao\^ut-Septembre 1983.
+\Benchmark
+\Cite{{\bf ShSm1\&2}} {\smc M. Shub and S. Smale},
+{\it Computational complexity on the geometry of
+polynomials and a theory of cost\/}, PartI, Ann. Sci.
+E.N.S. ({\bf 4}) {\bf t.18} (1985), 107-161; Part II,
+SIAM J. Computing {\bf 15} (1986), 145-161.
+\Benchmark
+\Cite{ShSm3} {\smc M. Shub and S. Smale}, {\it On the
+existence of generally convergent algorithms\/},
+Jour. of Complexity {\bf 2} (1986), 2-11.
+\Benchmark
+\Cite{STW} {\smc M. Shub, D. Tischler and R.
+Williams}, {\it The Newtonian graph of a complex
+polynomial\/}, soumis \`a SIAM J. of Math. Analysis.
+\Benchmark
+\Cite{Sm1} {\smc S. Smale}, {\it A Convergent process
+of price adjustment and global Newton methods\/}, J.
+Math. Econom. {\bf 3} (1976), 107-120.
+\Benchmark
+\Cite{Sm2} {\smc S. Smale}, {\it The fundamental
+theorem of algebra and complexity theory\/}, Bull.
+Amer. Math. Soc. {\bf 4} (1981), 107-120.
+\Benchmark
+\Cite{Sm3} {\smc S. Smale}, {\it The Problem of the
+average speed of the simplex method\/}, in
+``Mathematical Programming: the state of the Art, Bonn
+1982'' (editors Bachem et al.), Springer, 1983.
+\Benchmark
+\Cite{Sm4} {\smc S. Smale}, {\it On the efficiency of
+algorithms of analysis\/}, Bull. Amer. Math. Soc.
+{\bf 13} (1985), 87-121.
+\Benchmark
+\Cite{Sm5} {\smc S. Smale}, {\it Newton's method
+estimates from data at one point\/}, \`a para\^\i tre
+dans: Proceedings of a Conference at Laramie in Honor
+of Gail S. Young, Springer New York (1986).
+\Benchmark
+\Cite{Sm6} {\smc S. Smale}, {\it Algorithms for
+solving equations\/}, MSRI Berkeley, 1986 (texte
+\'ecrit pour le congr\`es mondial de Berkeley).
+\endReferences
+\bigskip
+\goodbreak
+
+
+ Vous trouverez de nombreuses autres r\'ef\'erences
+dans les bibliographies de \Cite{Sm2}, \Cite{Sm4},
+\Cite{Sm6}; en plus, \Cite{Sm6} contient une
+discussion de l'\'etat actuel des probl\`emes pos\'es
+dans \Cite{Sm2} et \Cite{Sm4}.
+
+
+
+\medskip
+\vfill
+\leftskip = .55 \hsize
+\parindent=0pt \parskip=0pt
+\def \Par{\nobreak\par}
+ Alexis MARIN
+ \nobreak\vskip 1.5pt \nobreak\Par
+ UA 1169 du CNRS\Par
+ Universit\'e Paris-Sud\Par
+ Math\'ematiques, b\^at 425\Par
+ 91405 ORSAY\Par
+
+\vfill
+\vfill
+\eject
+\end
diff --git a/macros/generic/occam/PlainEx2/W.sty b/macros/generic/occam/PlainEx2/W.sty
new file mode 100644
index 0000000000..8f366dec57
--- /dev/null
+++ b/macros/generic/occam/PlainEx2/W.sty
@@ -0,0 +1,196 @@
+
+%% The following are macros extracted from harvmac.tex
+%% to make an ad hoc header file for <FILENAME>
+%% See ftp://xxx.lanl.gov for original of harvmac.tex
+%%%%%%%%%%%%%%%%%% tex macros for preprints, cm version %%%%%%%%%%%%%%
+% (P. Ginsparg, last updated 9/91)
+
+%%% apple lw parameters by default
+ \def \unredoffs{}%
+
+ \newbox\leftpage
+ \newdimen\fullhsize
+ \newdimen\hstitle
+ \newdimen\hsbody
+ \tolerance=1000\hfuzz=2pt
+
+\catcode`\@=11
+
+ \def \usedBIGans{}%% sic! %
+
+ \magnification=1200
+ %% Adjust:
+ \unredoffs %% set predefined offsets
+ %% but maybe adjust:
+ %\voffset=0truein
+ %\hoffset=0truein
+ \edef\tfontsize{scaled\magstep3}%
+ \def \abstractfont{\tenpoint}%
+ \baselineskip=16pt plus 2pt minus 1pt
+ \hsbody=\hsize \hstitle=\hsize
+ %% take default values for unreduced format
+
+\newcount\yearltd\yearltd=\year\advance\yearltd by -1900%
+
+ \def \Title#1#2{\nopagenumbers
+ \abstractfont\hsize=\hstitle\rightline{#1}%
+ \vskip 1in\centerline{\titlefont #2}
+ \abstractfont\vskip .5in\pageno=0}%
+
+ \def \Date#1{\vfill\leftline{#1}\tenpoint
+ \supereject\global\hsize=\hsbody%
+ \footline={\hss\tenrm\folio\hss}}% restores pagenumbers%
+
+% use \nolabels to get rid of eqn, ref, and fig labels in draft mode
+\def\nolabels{\def\wrlabeL##1{}\def\eqlabeL##1{}\def\reflabeL##1{}}
+\nolabels
+
+% tagged sec numbers
+\global\newcount\secno \global\secno=0
+\global\newcount\meqno \global\meqno=1%
+
+ \def \newsec#1{\global\advance\secno by1\message{(\the\secno. #1)}%
+ \global\subsecno=0
+ \eqnres@t\noindent{\bf\the\secno. #1}%
+ \writetoca{{\secsym} {#1}}\par\nobreak\medskip\nobreak}%
+
+ \def \eqnres@t{\xdef\secsym{\the\secno.}%
+ \global\meqno=1\bigbreak\bigskip}%
+
+ \xdef\secsym{}%
+
+ \global\newcount\subsecno \global\subsecno=0%
+
+ \def \eqn#1#2{\xdef #1{(\secsym
+ \the\meqno)}\writedef{#1\leftbracket#1}%
+ \global\advance\meqno by1$$#2\eqno#1\eqlabeL#1$$}%
+
+%% Footnotes
+ \newskip\footskip\footskip14pt plus 1pt minus 1pt
+ %% sets footnote baselineskip
+ \def \footnotefont{\ninepoint}
+ \def\f@t#1{\footnotefont #1\@foot}
+ \def\f@@t{\baselineskip\footskip\bgroup
+ \footnotefont\aftergroup\@foot\let\next}
+ \setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}%
+%
+ \global\newcount\ftno \global\ftno=0
+ \def \foot{\global\advance\ftno by1\footnote{$^{\the\ftno}$}}%
+
+ \def \footatend{}%
+
+%% References
+%
+% \ref\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the refs on a separate page, \listrefs
+%
+\global\newcount\refno \global\refno=1
+\newwrite\rfile
+ \def \nref#1{\xdef#1{[\the\refno]}\writedef{#1\leftbracket#1}%
+ \ifnum\refno=1\immediate\openout\rfile=refs.tmp\fi
+ \global\advance\refno by1\chardef\wfile=\rfile\immediate
+ \write\rfile{\noexpand\item{#1\ }%
+ \reflabeL{#1\hskip.31in}\pctsign}\findarg}
+ %
+ % horrible hack to sidestep tex \write limitation
+ % FRAGILE!!!
+ \def\findarg#1#{\begingroup\obeylines\newlinechar=`\^^M\pass@rg}
+ {\obeylines\gdef\pass@rg#1{\writ@line\relax #1^^M\hbox{}^^M}%
+ \gdef\writ@line#1^^M{\expandafter\toks0\expandafter{\striprel@x #1}%
+ \edef\next{\the\toks0}\ifx\next\em@rk\let\next=\endgroup\else\ifx\next\empty%
+ \else\immediate\write\wfile{\the\toks0}\fi\let\next=\writ@line\fi\next\relax}}
+ \def\striprel@x#1{} \def\em@rk{\hbox{}}%
+ %
+
+ \def \ref{[\the\refno]\nref}%
+
+ \def \listrefs{\footatend\vfill
+ \supereject\immediate\closeout\rfile\writestoppt
+ \baselineskip=14pt\centerline
+ {{\bf References}}\bigskip{\frenchspacing
+ \parindent=20pt\escapechar=` \input refs.tmp
+ \vfill\eject}\nonfrenchspacing}%
+
+ \def \xref{\expandafter\xr@f}\def\xr@f[#1]{#1}%
+
+ \def \refs#1{\count255=1[\r@fs #1{\hbox{}}]}
+ \def\r@fs#1{\ifx\und@fined#1\message{reflabel \string#1 is undefined.}%
+ \nref#1{need to supply reference \string#1.}\fi%
+ \vphantom{\hphantom{#1}}\edef\next{#1}\ifx\next\em@rk\def\next{}%
+ \else\ifx\next#1\ifodd\count255\relax\xref#1\count255=0\fi%
+ \else#1\count255=1\fi\let\next=\r@fs\fi\next}%
+
+%% Files
+
+\newwrite\lfile
+
+{\escapechar-1\xdef\pctsign{\string\%}\xdef\leftbracket{\string\{}
+ \xdef\rightbracket{\string\}}\xdef\numbersign{\string\#}}%
+
+ \def \writestoppt{}%
+ \def \writedef#1{}%
+
+\newwrite\tfile
+
+ \def \writetoca#1{}%
+
+\catcode`\@=12 % at signs are no longer letters
+
+ %%% Fonts 10pt, Title, 9pt
+
+ %% Stop frivolous math family waste
+ \let \TextFontInMathBad\undefined
+ \def\TextWarning{\ifmmode\TextFontInMathBad\fi}
+
+ % Unpleasantness in calling in abstract and title fonts
+
+ %%% Title fonts
+
+ \font\titlerm=cmr10 \tfontsize
+ \def \titlefont{\textfont0=\titlerm
+ \def\rm{\fam0\titlerm}%
+ \rm
+ }%
+
+ %%% Tenpoint Fonts
+ %
+ \def \tenpoint{%
+ \def\rm{\fam0\tenrm}%
+ \rm
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont\bffam=\tenbf
+ \def\bf{\fam\bffam\tenbf}%
+ \def\it{\TextWarning\tenit}%
+ \def\sl{\TextWarning\tensl}%
+ }%
+
+ %%% Ninepoint Fonts
+ \font\sixrm=cmr6%
+ \font\ninei=cmmi9 \skewchar\ninei='177
+ \font\sixi=cmmi6 \skewchar\ninei='177
+ \font\ninesy=cmsy9 \skewchar\ninesy='60
+ \font\sixsy=cmsy6 \skewchar\sixsy='60
+
+ \font\ninerm=cmr9 %
+
+ \def \ninepoint{%
+ \textfont0=\ninerm
+ \def\rm{\fam0\ninerm}%
+ \rm
+ \def\it{\TextWarning\nineit}%
+ \def\sl{\TextWarning\ninesl}%
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ }%
+
+ %% Hyphenation exceptions
+
+\hyphenation{anom-aly anom-alies coun-ter-term coun-ter-terms}
+
+ \def \Tr{{\rm Tr}}%
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/occam/PlainEx2/W.tex b/macros/generic/occam/PlainEx2/W.tex
new file mode 100644
index 0000000000..05d0af917e
--- /dev/null
+++ b/macros/generic/occam/PlainEx2/W.tex
@@ -0,0 +1,1362 @@
+%Paper: ftp://xxx.lanl.gov//hep-th/9411102
+%From: WITTEN@sns.ias.edu
+%Date: 14 Nov 1994 22:09:04 -0400 (EDT)
+
+ %\input harvmac.tex %% leading % added for Occam
+ %\input harvmac.occ %% line added for Occam processing
+ \input W.sty %% line added for Occam
+
+ %% header simplified by Occam
+ %% original header about 1600 bytes
+ \def \underarrow#1{\vbox{\ialign{##\crcr$\hfil\displaystyle
+ {#1}\hfil$\crcr\noalign{\kern1pt
+ \nointerlineskip}$\longrightarrow$\crcr}}}
+ % use of underarrow A~~~\underarrow{a}~~~B
+
+ \overfullrule=0pt
+
+ \def \tilde{\widetilde}%
+ \def \bar{\overline}%
+
+ %% no further changes for Occam
+
+\Title{hep-th/9411102, IASSNS-HEP-94-96}
+{\vbox{\centerline{MONOPOLES AND FOUR-MANIFOLDS}}}
+\smallskip
+\centerline{Edward Witten}
+\smallskip
+\centerline{\it School of Natural Sciences, Institute for Advanced Study}
+\centerline{\it Olden Lane, Princeton, NJ 08540, USA}\bigskip
+\baselineskip 18pt
+
+\medskip
+
+\noindent
+%write abstract here
+Recent developments in the understanding of $N=2$ supersymmetric Yang-Mills
+theory in four dimensions suggest a new point of view about Donaldson
+theory of four manifolds: instead of defining four-manifold invariants
+by counting $SU(2)$ instantons, one can define equivalent four-manifold
+invariants by counting solutions of a non-linear equation with an
+abelian gauge group. This is a ``dual'' equation in which the gauge
+group is the dual of the maximal torus of $SU(2)$.
+The new viewpoint suggests many new results about
+the Donaldson invariants.
+\Date{November, 1994}
+%text of paper
+
+\newsec{Introduction}
+\nref\witten{E. Witten, ``Topological Quantum Field Theory,'' Commun. Math.
+Phys. {\bf 117} (1988) 353.}
+For some years now it has been known that Donaldson theory is equivalent
+to a quantum field theory, in fact, a twisted version of $N=2$ supersymmetric
+Yang-Mills theory \witten.
+The question therefore arises of whether this viewpoint
+is actually useful for computing Donaldson invariants \ref\doninv{S. Donaldson,
+``Polynomial Invariants For Smooth Four-Manifolds,'' Topology, {\bf 29}
+(1990) 257.} or understanding
+their properties.
+
+\nref\floer{A. Floer, ``An Instanton Invariant For 3-Manifolds,''
+Commun. Math. Phys. {\bf 118} 215.}
+One standard physical technique is to cut and sum over
+physical states. In the context of Donaldson theory, such methods
+have been extensively developed by mathematicians,
+starting with the work of Floer \floer.
+So far, despite substantial efforts,
+the physical reformulation has not given any essentially new insight
+about these methods.
+
+Another approach to using physics to illuminate Donaldson theory
+starts with the fact that the $N=2$ gauge theory is
+asymptotically free; therefore, it is weakly coupled in the ultraviolet
+and strongly coupled in the infrared. Since the Donaldson invariants
+-- that is, the correlation functions of the twisted theory -- are metric
+independent, they can be computed in the ultraviolet or the infrared,
+as one wishes. Indeed, the weak coupling in the
+ultraviolet is used to show that the quantum field theory correlation
+functions do coincide with the Donaldson invariants.
+
+\nref\newwitten{E. Witten, ``Supersymmetric Yang-Mills Theory On A
+Four-Manifold,'' J. Math. Phys. {\bf 35} (1994) 5101.}
+If one could
+understand the infrared behavior of the $N=2$ theory, one might get
+a quite different description and, perhaps, a quite different way to
+compute the Donaldson invariants. Until recently, this line of thought was
+rather hypothetical for general four-manifolds
+since the infrared behavior of $N=2$ super Yang-Mills
+theory in the strong coupling region was unknown.
+Previous work along these lines was therefore limited to K\"ahler manifolds,
+where one can reduce the discussion to the $N=1$ theory, whose infrared
+behavior was known. This led to an almost complete determination \newwitten\
+of the Donaldson invariants of K\"ahler manifolds with $H^{2,0}\not= 0$.
+
+\nref\sw{N. Seiberg and E. Witten, ``Electric-Magnetic Duality,
+Monopole Condensation, And Confinement In $N=2$ Supersymmetric
+Yang-Mills Theory,'' Nucl. Phys. {\bf B426} (1994) 19,
+``Monopoles, Duality, And Chiral Symmetry
+Breaking In $N=2$ Supersymmetric QCD,'' hep-th/9408099,
+to appear in Nucl. Phys. B.}
+\nref\seiberg{N. Seiberg, ``The Power Of Holomorphy -- Exact Results
+In $4d$ SUSY Field Theories,'' hep-th/9408013.}
+The purpose of the present paper is to exploit recent work by Seiberg
+and the author
+\sw\ in which the infrared behavior of the $N=2$ theory was
+determined using methods somewhat akin to methods that have shed light
+on various $N=1$ theories (for a survey see \seiberg).
+The answer turned out to be quite surprising: the
+infrared limit of the $N=2$ theory in the ``strongly coupled'' region
+of field space is equivalent to a weakly coupled theory of abelian
+gauge fields coupled to ``monopoles.'' The monopole theory is
+dual to the original theory in the sense that, for instance, the
+gauge group is the dual of the maximal torus of the original gauge group.
+
+
+\nref\km{P. Kronheimer and T. Mrowka, ``Recurrence Relations And
+Asymptotics For Four-Manifold Invariants,'' Bull. Am. Math. Soc. {\bf 30}
+(1994) 215, ``Embedded Surfaces And The Structure Of Donaldson's
+Polynomial Invariants,'' preprint (1994).}
+\nref\arg{P. Argyres and A. Faraggi, ``The Vacuum Structure And Spectrum
+Of $N=2$ Supersymmetric $SU(N)$ Gauge Theory,'' hep-th/9411057.}
+\nref\yank{A. Klemm, W. Lerche, S. Yankielowicz, and S. Theisen,
+``Simple Singularities and $N=2$ Supersymmetric Yang-Mills Theory,''
+hep-th/9411048.}
+Since the dual theory is weakly coupled in the infrared,
+everything is computable in that region, and
+in particular for gauge group $SU(2)$,
+one does get an alternative formulation of the usual Donaldson
+invariants. Instead of computing the Donaldson invariants by counting
+$SU(2)$ instanton solutions, one can obtain the same invariants
+by counting the solutions of the dual equations, which involve
+$U(1)$ gauge fields and monopoles.\foot{In this paper, we only consider
+Donaldson theory with
+gauge group $SU(2)$ or $SO(3)$, but an analogous dual description
+by abelian gauge fields and monopoles will hold for
+any compact Lie group, the gauge group of the dual theory being always
+the dual of the maximal torus of the original gauge group. For example,
+most of the results needed to write the precise monopole equations for
+$SU(N)$ have been obtained recently \refs{\arg,\yank}.}
+
+This formulation makes manifest various properties of the Donaldson
+invariants. For instance, one can get new proofs of some of the
+classic results of Donaldson theory; one gets
+a new description of the basic classes of Kronheimer and Mrowka \km, and some
+new results about them; one gets a new understanding
+of the ``simple type'' condition for four-manifolds;
+one finds new types of vanishing theorems
+that severely limit the behavior of Donaldson theory on manifolds
+that admit a metric of positive scalar curvature;
+and one gets a complete determination of the Donaldson invariants
+of K\"ahler manifolds with $H^{2,0}\not= 0$, eliminating the
+assumptions made in \newwitten\ about the canonical divisor.
+
+It should be possible to justify
+directly the claims sketched in this paper about the consequences
+of the monopole equations even if the relation to Donaldson theory
+is difficult to prove. The reformulation may make the problems
+look quite different
+as the gauge group is abelian and the most relevant moduli spaces
+are zero dimensional.
+{}From a physical point of view the dual description via monopoles and abelian
+gauge fields should be simpler than the microscopic $SU(2)$ description
+since in the renormalization group sense
+it arises by ``integrating out the irrelevant degrees of freedom.''
+
+
+\nref\vw{C. Vafa and E. Witten, ``A Strong Coupling Test Of $S$-Duality,''
+hep-th/9408074, to appear in Nucl. Phys. B.}
+\nref\om{C. Montonen and D. Olive, Phys. Lett. {\bf B72} (1977) 117;
+P. Goddard, J. Nuyts, and D. Olive, Nucl. Phys. {\bf B125} (1977) 1.}
+\nref\sen{A. Sen, ``Strong-Weak Coupling Duality In Four Dimensional
+String Theory,'' hep-th/9402002.}
+The monopole equations are close cousins of equations studied in section two
+of \vw; the reason for the analogy is that in each case one is studying
+$N=2$ theories of hypermultiplets coupled to vector multiplets.
+The investigation in \vw\ dealt with microscopic Montonen-Olive duality
+\refs{\om,\sen}, while the duality in Donaldson theory \sw\ is a sort of
+phenomenological analog of this.
+
+
+The monopole equations, definition of four-manifold invariants,
+and relation to Donaldson theory are stated
+in section two of this paper. Vanishing theorems are used in section three
+to deduce some basic properties. Invariants
+of K\"ahler
+manifolds are computed in section four.
+A very brief sketch of the origin in physics
+is in section five. A fuller account of the contents of section five
+will appear elsewhere \ref\nsw{N. Seiberg and E. Witten, to appear.}.
+
+
+
+
+\newsec{The Monopole Equations}
+
+Let $X$ be an oriented, closed four-manifold on which we pick a Riemannian
+structure with metric tensor $g$.
+$\Lambda^pT^*X$, or simply $\Lambda^p$,
+will denote the bundle of real-valued $p$-forms,
+and $\Lambda^{2,\pm}$ will be the sub-bundle of $\Lambda^2$ consisting
+of self-dual or anti-self-dual forms.
+
+The monopole equations relevant to $SU(2)$ or $SO(3)$
+Donaldson theory can be described
+as follows. If $w_2(X)=0$,
+then $X$ is a spin manifold and one can pick
+positive and negative spin bundles
+$S^+$ and $S^-$, of rank two. (If there is more than one spin structure,
+the choice of a spin structure will not matter as we will ultimately
+sum over twistings by line bundles.) In that case, introduce a complex line
+bundle $L$; the data in the monopole equation will be a connection $A$
+on $L$ and a section $M$ of $S^+\otimes L$. The curvature two-form
+of $A$ will
+be called $F$ or $F(A)$; its self-dual and anti-self-dual
+projections will be called $F^+$ and $F^-$.
+
+If $X$ is not spin, the $S^{\pm}$ do not exist,
+but their projectivizations ${\bf P}S^{\pm}$ do exist (as bundles with fiber
+isomorphic to ${\bf CP}^1$). A ${\rm Spin}_c$ structure (which exists
+on any oriented four-manifold \ref\hirz{F. Hirzebruch and H. Hopf,
+``Felder von Flachenelementen in 4-dimensionalen Mannigfaltigkeiten,''
+Math. Annalen {\bf 136} (1958) 156.})
+can be described as a choice of
+a rank two complex vector bundle, which we write as $S^+\otimes L$,
+whose projectivization is isomorphic to ${\bf P}S^+$. In this situation, $L$
+does not exist as a line bundle, but $L^2$ does\foot{One might
+be tempted to call this bundle $L$ and write the ${\rm Spin}_c$
+bundle as $S^+\otimes L^{1/2}$; that amounts to assigning magnetic
+charge $1/2$ to the monopole and seems unnatural physically.};
+the motivation for
+writing the ${\rm Spin}_c$ bundle as $S^+\otimes L$ is that the tensor
+powers of this bundle obey isomorphisms suggested by the notation.
+For instance, $(S^+\otimes L)^{\otimes 2}\cong L^2\otimes(\Lambda^0\oplus
+\Lambda^{2,+})$.
+The data of the monopole equation
+are now a section $M$ of $S^+\otimes L$ and a connection on $S^+\otimes L$
+that projects to the Riemannian connection on ${\bf P}S^+$. The symbol
+$F(A)$ will now denote $1/2$ the trace of the curvature form of $S^+\otimes L$.
+
+Since $L^2$ is an ordinary line bundle, one has an integral
+cohomology class
+$x=-c_1(L^2)\in H^2(X,{\bf Z})$. (The minus sign makes some
+later formulas come out in a standard form.) Note that $x$ reduces modulo two
+to $w_2(X)$; in particular, if $w_2(X)=0$, then $L$ exists as a line
+bundle and $x=-2c_1(L)$.
+
+To write the monopole equations, recall that $S^+$ is symplectic or
+pseudo-real, so that
+if $M$ is a section of $S^+\otimes L$, then the complex conjugate $\bar M$
+is a section of $S^+\otimes L^{-1}$. The product $M\otimes \bar M$
+would naturally lie in $(S^+\otimes L)\otimes (S^+\otimes L^{-1})\cong
+\Lambda^0\oplus\Lambda^{2,+}$.
+$F^{+}$ also takes values in $\Lambda^{2,+}$ making it possible to
+write the following equations.
+Introduce Clifford matrices $\Gamma_i$
+(with anticommutators $\{\Gamma_i,\Gamma_j\}=2g_{ij}$), and
+set $\Gamma_{ij}={1\over 2}[\Gamma_i,\Gamma_j]$. Then
+the equations are\foot{
+To physicists the connection form $A$ on a unitary line bundle is
+real; the covariant derivative is $d_A=d+iA$ and the curvature is
+$F=dA$ or in components $F_{ij}=\partial_iA_j-\partial_jA_i$.}
+\eqn\noneq{\eqalign{F^+_{ij}&=-{i\over 2}\bar M\Gamma_{ij}M \cr
+ \sum_i\Gamma^iD_iM & = 0.\cr}}
+In the second equation, $\sum_i\Gamma^iD_i$ is the Dirac operator
+$D$ that maps sections of $S^+\otimes L$ to sections of $S^-\otimes L$.
+We will sometimes abbreviate the first as $F^+=(M\bar M)^+$.
+Alternatively,
+if positive spinor indices are written $A,B,C$, and
+negative spinor indices as $A',B',C'$,
+\foot{Spinor indices are raised and lowered using the invariant
+tensor in $\Lambda^2 S^+$. In components, if $M^A=(M^1,M^2)$,
+then $M_A= (-M_2,M_1)$. One uses the same operation in interpreting
+$\bar M$ as a section of $S^+\otimes L$, so $\bar M^A=(\bar M^2,-\bar M^1)$.
+Also $F_{AB}={1\over 4}F_{ij}\Gamma^{ij}_{AB}$.}
+the equations can be written
+\eqn\indeq{\eqalign{F_{AB}& = {i\over 2}\left(M_A\bar M_B+M_B\bar M_A\right)\cr
+ D_{AA'}M^A & = 0.\cr}}
+
+As a first step in understanding these equations, let us work out
+the virtual dimension of the moduli space ${\cal M}$
+of solutions of the
+equations up to gauge transformation.
+The linearization of the monopole equations fits into
+an elliptic complex
+\eqn\pindeq{0\to \Lambda^0\underarrow{s}\Lambda^1
+\oplus (S^+\otimes L)\underarrow{t}\Lambda^{2,+}
+\oplus (S^-\otimes L) \to 0.}
+Here $t$ is the linearization of the monopole equations, and $s$
+is the map from zero forms to deformations in $A,M$ given by the infinitesimal
+action of the gauge group. Since we wish to work with real operators
+and determine the real dimension
+of ${\cal M}$, we temporarily think of $S^\pm\otimes L$ as
+real vector bundles (of rank four).
+Then an elliptic operator
+\eqn\pxxx{T:\Lambda^1\oplus(S^+\otimes L)\to \Lambda^0\oplus \Lambda^{2,+}
+\oplus (S^-\otimes L)}
+is defined by $T=s^*\oplus t$.
+The virtual dimension of the moduli space is given by the index of $T$.
+By dropping terms in $T$ of order zero,
+$T$ can be deformed to the direct sum of the operator $d+d^*$
+\foot{What is meant here is of course a projection of the $d+d^*$ operator
+to self-dual forms.}
+from $\Lambda^1$ to $\Lambda^0\oplus \Lambda^{2,+}$ and the Dirac
+operator from $S^+\otimes L$ to $S^-\otimes L$.
+The index of $T$ is
+the index of $d+d^*$ plus twice what is usually called the index of the Dirac
+operator; the factor of two comes from looking at $S^{\pm}\otimes L$
+as real bundles of twice the dimension.
+Let $\chi$ and $\sigma$ be the Euler
+characteristic and signature of $X$. Then the index of $d+d^*$ is
+$-(\chi+\sigma)/2$, while twice the Dirac index is $-\sigma/4+c_1(L)^2$.
+The virtual dimension of the moduli space is the sum of these or
+\eqn\hurf{W= -{2\chi+3\sigma\over 4} +c_1(L)^2.}
+
+When this number is negative, there are generically no solutions of
+the monopole equations. When $W=0$, that is, when $x=-c_1(L^2)=-2c_1(L)$ obeys
+\eqn\burf{x^2=2\chi+3\sigma,}
+then the virtual dimension is zero and the moduli space generically
+consists of a finite set of points $P_{i,x}$, $i=1\dots t_x$.
+With each such point, one can associate
+a sign $\epsilon_{i,x}=\pm 1$ -- the sign of the determinant of $T$ as we
+discuss momentarily.
+Once this is done, define for each $x$ obeying \burf\ an integer $n_x$ by
+\eqn\gurofo{n_x=\sum_i\epsilon_{i,x}.}
+We will see later that
+$n_x=0$ -- indeed, the moduli space is empty -- for all but finitely many $x$.
+Under certain conditions that we will discuss in a moment, the $n_x$
+are topological invariants.
+
+Note that $W=0$ if and only if the index of the Dirac operator
+is
+\eqn\inxxon{\Delta={\chi+\sigma\over 4}.}
+In particular, $\Delta$ must be an integer to have non-trivial $n_x$.
+Similarly, $\Delta$ must be integral for the Donaldson invariants
+to be non-trivial (otherwise $SU(2)$ instanton moduli space is odd
+dimensional).
+
+
+For the sign of the determinant of $T$ to make sense one must trivialize
+the determinant line of $T$. This can be done by deforming $T$ as above
+to the direct sum of $d+d^*$ and the Dirac operator. If the Dirac operator,
+which naturally has a non-trivial {\it complex} determinant line, is regarded
+as a real operator, then its determinant line is naturally trivial -- as a
+complex line has a natural orientation. The $d+d^*$ operator is
+independent of $A$ and $M$ (as the gauge group is abelian), and its
+deterinant line is trivialized once and for all by picking an orientation
+of $H^1(X,{\bf R})\oplus H^{2,+}(X,{\bf R})$. Note that this is the
+same data needed by Donaldson
+\ref\donor{S. Donaldson, ``The Orientation Of Yang-Mills Moduli
+Spaces And Four-Manifold Topology,'' J. Diff. Geom. {\bf 26} (1987) 397.}
+to orient instanton moduli spaces for $SU(2)$;
+this is an aspect of the relation between the two theories.
+
+If one replaces $L$ by $L^{-1}$, $A$ by $-A$, and $M$ by $\bar M$, the
+monopole equations are invariant, but the trivialization of the
+determinant line is multiplied by $(-1)^\delta$ with $\delta$ the Dirac
+index. Hence the invariants for $L$ and $L^{-1}$ are related by
+\eqn\pixxx{n_{-x}=(-1)^\Delta n_x.}
+
+For $W<0$, the moduli space is generically empty. For $W>0$ one can
+try, as in Donaldson theory, to define topological invariants that involve
+integration over the moduli space. Donaldson theory does not detect those
+invariants at least in known situations.
+We will see in section three that even when $W>0$, the
+moduli space is empty for almost all $x$.
+
+
+\bigskip
+\noindent{\it Topological Invariance}
+
+In general, the number of solutions
+of a system of equations
+weighted by the sign of the determinant of the operator analogous to $T$
+ is always a topological invariant if a suitable compactness
+holds.
+If as in the case at hand one has a gauge invariant system of equations, and
+one wishes to count gauge orbits of solutions up to gauge transformations,
+then one requires (i) compactness; and (ii) free action
+of the gauge group on the space of solutions.
+
+
+Compactness fails if a field or its derivatives can go to
+infinity.
+The Weitzenbock formula used in section three to discuss vanishing
+theorems indicates that these phenomena
+do not occur for the monopole equations.
+To explain the contrast with Donaldson theory, note that
+for $SU(2)$ instantons
+compactness fails precisely
+\ref\uhl{K. Uhlenbeck, ``Removable Singularities In Yang-Mills Fields,''
+Commun. Math. Phys. {\bf 83} (1982) 11.}
+because an instanton can shrink to zero size. This is
+possible because (i) the equations are conformally invariant, (ii) they
+have non-trivial solutions on a flat ${\bf R}^4$, and (iii) embedding
+such a solution, scaled to very small size,
+on any four-manifold gives a highly localized approximate
+solution of the instanton equations (which can sometimes
+\ref\taubes{C. H. Taubes, ``Self-Dual Yang-Mills Connections Over
+Non-Self-Dual 4-Manifolds,'' J. Diff. Geom. {\bf 19} (1982) 517.}
+be perturbed to
+an exact solution). The monopole equations by contrast
+are scale invariant but
+(as follows immediately from the Weitzenbock formula) they have
+no non-constant $L^2$ solutions on flat ${\bf R}^4$ (or after dimensional
+reduction on flat ${\bf R}^n$ with $1\leq n \leq 3$).
+So there is no analog for the monopole equations of the phenomenon
+where an instanton shrinks to zero size.
+
+On the other hand, an obstruction does arise, just as in Donaldson
+theory (in what follows we imitate some arguments in
+\ref\dono{S. Donaldson, ``Irrationality And The $h$-Cobordism
+Conjecture,'' J. Diff. Geom. {\bf 26} (1987) 141.})
+from the question of whether the gauge group acts freely on the
+space of solutions of the monopole equations. The only way for the gauge
+group to fail to act freely is that there might be a solution with $M=0$,
+in which case a constant gauge transformation acts trivially.
+A solution with $M=0$ necessarily has $F^+=0$, that is, it is an abelian
+instanton.
+
+Since $F/2\pi$ represents the first Chern class of the line bundle $L$,
+it is integral; in particular if $F^+=0$ then $F/2\pi$ lies in the intersection
+of the integral lattice in $H^2(X,{\bf R})$ with the anti-self-dual subspace
+$H^{2,-}(X,{\bf R})$.
+As long as $b_2^+\geq 1$, so that the self-dual part of $H^2(X,{\bf R})$ is
+non-empty, the intersection of the anti-self-dual part and the integral
+lattice generically consists only of the zero vector.
+ In this case,
+for a generic metric on $X$, there are no abelian instantons (except for
+$x=0$, which we momentarily exclude) and $n_x $ is well-defined.
+
+
+To show that the $n_x$ are topological invariants, one must further show
+that any two generic metrics on $X$ can be joined by a path along which
+there is never an abelian instanton. As in Donaldson theory, this can
+fail if $b_2^+=1$. In that case, the self-dual part
+of $H^2(X,{\bf R})$ is one dimensional, and in a generic
+one parameter family of metrics on $X$, one may meet a metric for
+which there is an abelian instanton. When this occurs, the $n_x$ can jump.
+Let us analyze how this happens, assuming for simplicity that $b_1=0$.
+Given $b_1=0$ and
+$b_2{}^+=1$, one has $W=0$ precisely if the index of the Dirac
+equation is 1. Therefore, there is generically a single solution $M_0$
+of the Dirac equation $DM=0$.
+
+The equation $F^+(A)=0$ cannot be obeyed for a generic metric on $X$,
+but we want to look at the behavior near a special metric for which it does
+have a solution.
+ Consider a one parameter family of metrics parametrized
+by a real parameter $\epsilon$, such that at $\epsilon=0$ the
+self-dual subspace in $H^2(X,{\bf R})$ crosses a ``wall''
+and a solution $A_0$ of
+$F^+(A)=0$ appears. Hence for $\epsilon=0$, we can solve the monopole
+equations with $A=A_0, \,M=0$. Let us see what happens to this solution
+when $\epsilon $ is very small but non-zero. We set $M=mM_0$, with $m$
+a complex number, to obey $DM=0$, and we write $A=A_0+\epsilon \delta A$.
+The equation $F^+(A)-(M\bar M)^+=0$ becomes
+\eqn\nurk{F^+(A_0)+(d\delta A)^+-|m|^2 (M_0\bar M_0)^+=0.}
+As the cokernel of $A\to F^+(A)$
+is one dimensional, $\delta A$ can be chosen
+to project the left hand side of equation \nurk\ into a one dimensional
+subspace. (As $b_1=0$, this can be done in a unique way up to a gauge
+transformation.)
+The remaining equation looks near $\epsilon=0$ like
+\eqn\modlik{c \epsilon - \,m\bar m=0}
+with $c$ a constant.
+The $\epsilon$ term on the left comes from the fact that $F^+(A_0)$ is
+proportional to $\epsilon$.
+
+Now we can see what happens for $\epsilon\not= 0$ to the solution that
+at $\epsilon=0$ has $A=A_0$, $M=M_0$.
+Depending on the sign of $c$,
+there is a solution for $m$, uniquely
+determined up to gauge transformation, for $\epsilon>0$ and no solution
+for $\epsilon<0$, or vice-versa. Therefore $n_x$ jumps by $\pm 1$, depending
+on the sign of $c$,
+in passing through $\epsilon=0$.
+To compare this precisely to the similar behavior of Donaldson
+theory, one would also need to understand the
+role of the $u$ plane, discussed in section five.
+
+The trivial abelian instanton with $x=0$ is an exception to the
+above discussion,
+since it cannot be removed by perturbing the metric. To define $n_0$,
+perturb the equation $F_{AB}={i\over 2}(M_A\bar M_B+M_B\bar M_A)$
+to
+\eqn\hinnoc{F_{AB}={i\over 2}(M_A\bar M_B+M_B\bar M_A)-p_{AB},}
+with $p$ a self-dual
+harmonic two-form; with this perturbation, the gauge group acts
+freely on the solution space.
+Then define $n_0$ as the number of gauge orbits of solutions of the
+perturbed equations
+weighted by sign in the usual way. This is invariant under continuous
+deformations of $p$ for $p\not=0$;
+as long as $b_2^+>1$, so that
+the space of possible $p$'s is connected, the integer $n_0$ defined
+this way is a topological invariant.
+
+The perturbation just
+pointed out will be used later in the case that $p$ is the real part
+of a holomorphic two-form to compute the invariants of K\"ahler manifolds
+with $b_2^+>1$. It probably has other applications; for instance, the
+case that $p$ is a symplectic form is of interest.
+
+\bigskip
+\noindent{\it Relation To Donaldson Theory}
+
+With an appropriate restriction on $b_2^+$, the $n_x$ have
+(by an argument sketched in section five) a relation to the Donaldson
+invariants that will now be stated.
+
+Let us recall that in $SU(2)$ Donaldson theory, one wishes to compute
+the integrals or expectation values of certain cohomology classes
+or quantum field operators: for every Riemann surface
+(or more generally every
+two-dimensional homology cycle) $\Sigma$ in $X$, one has an operator
+$I(\Sigma)$ of dimension (or $R$ charge or
+ghost number) two; there is one additional
+operator ${\cal O}$, of dimension four.
+For every value of the instanton number, one computes the expectation value
+of a suitable product of these operators by integration over instanton
+moduli space using a recipe due to Donaldson, or by evaluating a suitable
+quantum field theory correlation function as in \witten.
+It is natural to organize this data in the form of a generating function
+\eqn\jurn{\left\langle
+\exp\left(\sum_a\alpha_aI(\Sigma_a)+\lambda {\cal O}\right)
+\right\rangle,}
+summed over instanton numbers; here
+the $\Sigma_a$ range over a basis of $H_2(X,{\bf R})$ and $\lambda,
+\,\alpha_a$ are complex numbers.
+
+Let $v= \sum_a\alpha_a[\Sigma_a]$,
+with $[\Sigma_a]$ the cohomology class that is Poincar\'e dual to $\Sigma_a$.
+So for instance $v^2=\sum_{a,b}\alpha_a\alpha_b\,\,\Sigma_a\cdot\Sigma_b$
+(here $\Sigma_a\cdot \Sigma_b$ is the intersection number of $\Sigma_a$ and
+$\Sigma_b$), and for any $x\in H^2(X,{\bf Z})$, $v\cdot x=\sum_a\alpha_a
+(\Sigma_a,x)$. Let as before $\Delta=(\chi+\sigma)/4$.
+
+A four-manifold is said to be of simple type if the generating function
+in \jurn\ is annihilated by $\partial^2/\partial\lambda^2-4$; all known
+simply-connected four-manifolds with $b_2^+>1$ have this property.
+The relation of the simple type condition to physics is discussed in
+section five.
+I claim that for manifolds of simple type
+\eqn\jimmo{\eqalign{\left
+\langle\exp\left(\sum_a\alpha_aI(\Sigma_a)+\lambda {\cal O}\right)
+\right\rangle = 2^{1+{1\over 4}(7\chi+11\sigma)}&\left(\exp\left(
+{v^2\over 2}+2\lambda\right)
+\sum_x
+n_x e^{v\cdot x}\right.\cr&\left.
+ +i^{\Delta} \exp\left(-{v^2\over 2}-2\lambda\right)\sum_xn_x
+e^{-iv\cdot x}\right).\cr}}
+That the expression is real follows from \pixxx.
+
+As sketched in section five, this formula is a sort of corollary of the
+analysis of $N=2$ supersymmetric Yang-Mills theory in \sw. Here I will
+just make a few remarks:
+
+(1) The structure in \jimmo\ agrees with the general form
+proved by Kronheimer and Mrowka \km.
+The classes $x\in H^2(X,{\bf Z})$ such that $n_x\not= 0$ are the basic
+classes in their terminology. From the properties by which $x$ and $n_x$
+were defined, we have that $x$ is congruent to $w_2(X)$ modulo 2 and
+that $x^2=2\chi+3\sigma$. The first assertion is a result of Kronheimer
+and Mrowka and the second was conjectured by them.
+
+
+
+(2) The prefactor $2^{1+{1\over 4}(7\chi+11\sigma)}$ has the following
+origin, as in \newwitten. One factor of two comes because, even though the
+center of $SU(2)$ acts trivially on the $SU(2)$ instanton moduli space,
+the Donaldson invariants are usually defined without dividing by two.
+The remaining factor of $2^{{1\over 4}(7\chi+11\sigma)}$ is a $c$-number
+renormalization factor that arises in comparing the microscopic $SU(2)$
+theory to the dual description with monopoles.
+(In \nsw\ a more general function of the form
+$e^{a(u)\chi+b(u)\sigma}$ that arises on the complex $u$ plane will be
+calculated.) Some coefficients in the formula such as the $7/4$ and $11/4$
+were fixed in \newwitten\ to agree with
+calculations of special cases of Donaldson invariants.
+
+
+(3) Most fundamentally, in the above formula, the first term, that is
+\eqn\kdn{\exp\left({v^2\over 2}+2\lambda\right)
+\sum_xn_x e^{v\cdot x},}
+is the contribution from one vacuum at $u=\Lambda^2$, and the second
+term,
+\eqn\hkn{i^\Delta \exp\left(-{v^2\over 2}-2\lambda\right)\sum_xn_x
+e^{-iv\cdot x},}
+is the contribution of a second vacuum at $u=-\Lambda^2$.
+These terms are analogous to the two terms in equation (2.66) of \newwitten.
+The factor of $i^\Delta$ arises, as there, because
+of a global anomaly in the discrete symmetry that exchanges the two
+vacua. This factor
+can be written in the form $e^{a\chi+b\sigma}$ and so means
+that the two vacua have different values
+of the renormalization mentioned in the last paragraph. The
+replacement of $e^{v\cdot x}$ in the first vacuum by $e^{-iv\cdot x}$
+in the second is likewise determined by the symmetries, as in \newwitten,
+and can be seen microscopically.
+For a general simple compact gauge group, the analogous sum will have
+$h$ terms ($h$ the dual Coxeter number) associated with $h$ vacua.
+
+(4) This formula generalizes as follows for the case that the
+gauge group is $SO(3)$ rather than $SU(2)$. Consider an
+$SO(3)$ bundle $E$ with, say, $ w_2(E)=z$.
+Define a generating functional of correlation functions
+summed over bundles with
+ all values of the first Pontryagin class
+but fixed $w_2$. Pick an integral lift of $w_2(X)$, and, using
+the fact that the $x$'s are congruent to $w_2(X)$ mod two, let $x'$ be
+such that $2x'=x+ w_2(X)$. Then $w_2(E)\not= 0$ modifies
+the derivation of \jimmo\ only by certain minus signs that
+appear in the duality transformation that relates the microscopic
+and macroscopic descriptions; the result is
+\eqn\himmo{
+\eqalign{
+\left\langle\exp\left(\sum_a\alpha_aI(\Sigma_a)+\lambda {\cal O}\right)
+\right\rangle_z
+=& 2^{1+{1\over 4}(7\chi+11\sigma)}\left(\exp({v^2\over 2}+2\lambda)
+\sum_x(-1)^{x'\cdot z}
+n_x e^{v\cdot x} \right.\cr &\left.
++i^{\Delta-z^2} \exp(-{v^2\over 2}-2\lambda)\sum_x
+(-1)^{x'\cdot z
+}n_xe^{-iv\cdot x}\right).\cr}}
+The replacement of $i^\Delta$ by $i^{\Delta-z^2}$ arises, as in equation
+(2.79) of \newwitten\ (where $w_2(E)$ is written as $x$),
+because the global anomaly has an extra term that depends on $z$.
+(Note that as $z$ is defined modulo two, $z^2$ is well-defined modulo four.)
+The factor of $(-1)^{x'\cdot z}$ was obtained in \km\ for manifolds
+of simple type and in \newwitten\ for K\"ahler manifolds.
+If the integral lift of $w_2(X)$ used in defining $x'$
+is shifted by $w_2(X)\to w_2(X)+2y$, then \himmo\
+is multiplied by $(-1)^{y\cdot z}$. The reason for this factor
+is that \himmo\ is reproducing the conventional Donaldson invariants,
+whose sign depends on the orientation of the instanton moduli spaces.
+A natural orientation \donor\ depends on an integral lift of $w_2(X)$
+and transforms as \himmo\ does if this lift is changed.
+
+(5) For K\"ahler manifolds with $b_2^+>1$, the quantities entering in \jimmo\
+will be completely computed in section four.
+We will find that, letting $\eta$ be a holomorphic two-form, the sum in \jimmo\
+can be interpreted as a sum over factorizations $\eta=\alpha\beta$
+with $\alpha$ and $\beta$ holomorphic sections of $K^{1/2}\otimes L^{\pm 1}$.
+Each such factorization contributes $\pm 1$ to $n_x$ with
+$x=-2c_1(L)$ provided $x^2=c_1(K)^2$; the contribution is $+1$ or $-1$
+according to a formula computed at the end of section four.
+
+\bigskip
+\noindent{\it Imitating Arguments From Donaldson Theory}
+
+Apart from relating Donaldson theory to the monopole equations,
+one can simply try to adapt familiar arguments about Donaldson theory
+to the monopole equations. We have already seen some examples.
+
+As another example, consider Donaldson's theorem \doninv\
+asserting that the Donaldson invariants vanish for a connected sum $X\# Y$
+of four-manifolds $X$ and $Y$ which each have $b_2{}^+>0$. The theorem
+is proved by considering a metric on $X\# Y$
+in which $X$ and $Y$ are joined by
+a long neck of the form ${\bf S}^3\times I$, with $I$ an interval in ${\bf R}$.
+Take the metric on the neck to be the product of the standard metric
+on ${\bf S}^3$ and a metric that assigns length $t$ to $I$, and consider
+the monopole equations on this space. For $t\to \infty$, any solution
+of the monopole equations will vanish in the neck because of the positive
+scalar curvature of ${\bf S}^3$ (this follows from the Weitzenbock
+formula of the next section).
+This lets one define a $U(1)$ action on the moduli space ${\cal M}$
+(analogous to the $SO(3)$ action used by Donaldson)
+by gauge transforming the solutions on $Y$ by a constant gauge transformation,
+leaving fixed the data on $X$. A fixed point of this $U(1)$ action
+would be a solution for which $M$ vanishes on $X$ or on $Y$. But
+as $X$ and $Y$ both have $b_2{}^+>0$, there is no such solution if
+generic metrics are used on the two sides. A zero dimensional moduli
+space with a free $U(1)$ action is empty, so the basic invariants would
+be zero for such connected sums. (A free $U(1)$ action also leads
+to vanishing of the higher invariants.)
+Since we will see in section four
+that the invariants are non-zero for K\"ahler manifolds
+(analogous to another basic result of Donaldson), one gets a proof
+directly from the monopole equations and independent of the equivalence to
+Donaldson theory that algebraic surfaces do not have connected
+sum decompositions with $b_2^+>0$ on both sides.
+
+If one considers instead a
+situation with $b_2^+$ positive for $X$ but zero for $Y$, there will
+be fixed points consisting of solutions with $M=0$ on $Y$, and one will get
+a formula expressing invariants of $X\# Y$ in terms
+of invariants of $X$ and elementary data concerning $Y$.
+
+\newsec{Vanishing Theorems}
+
+Some of the main properties of the monopole equations
+can be
+understood by means of vanishing theorems. The general strategy in
+deriving such vanishing theorems is quite standard, but as in section two
+of \vw, some unusual cancellations (required by the Lorentz invariance
+of the underlying untwisted theory) lead to unusually strong results.
+
+If we set $s=F^+-M\bar M$, $k=DM$,
+then a small calculation gives
+\eqn\highor{\eqalign{\int_Xd^4x\sqrt g\left({1\over 2}|s|^2+|k|^2\right)
+=\int_Xd^4x\sqrt g&\left({1\over 2}|F^+|^2+g^{ij}D_iM^AD_j\bar M_A \right.
+\cr & \left.+{1\over 2}|M|^4
++{1\over 4}R|M|^2\right) .\cr}} Here $g$ is the metric of $X$, $R$ the scalar
+curvature, and $d^4x\sqrt g$ the Riemannian measure.
+A salient feature here is that a term $F_{AB}M^A\bar M{}^B$, which appears
+in either $|s|^2 $ or $|k|^2$, cancels in the sum.
+This sharpens the implications of the formula, as we will see.
+One can also consider the effect here of the perturbation in \hinnoc;
+the sole effect of this is to replace
+${1\over 2}|M|^4$ in \highor\ by
+\eqn\bihor{\int_Xd^4x\sqrt g\left(
+F^+\wedge p+\sum_{A,B}\left|{1\over 2}(M_A\bar M_B+M_B\bar M_A)-p_{AB}\right|^2
+\right).}
+The second term is non-negative, and the first is simply the intersection
+pairing
+\eqn\juhor{2\pi c_1(L)\cdot [p].}
+
+An obvious inference from \highor\ is that if $X$ admits a metric
+whose scalar curvature is positive,
+then for such a metric any solution
+of the monopole equations must have $M=0$ and $F^+=0$. But
+if $b_2{}^+>0$, then after a generic small perturbation of the metric
+(which will preserve the fact that the scalar curvature is positive),
+there are no abelian solutions of $F^+=0$ except flat connections.
+Therefore,
+for such manifolds and metrics, a solution of the monopole equations
+is a flat connection with $M=0$. These too can be eliminated
+using the perturbation in \hinnoc.\foot{
+Flat connections can only arise if $c_1(L)$ is torsion; in that case,
+$c_1(L)\cdot [p]=0$. The vanishing argument
+therefore goes through, the modification in \highor\ being that which
+is indicated in \bihor.}
+Hence a four-manifold
+for which $b_2^+>0$ and $n_x\not= 0$ for some $x$
+does not admit a metric of
+positive scalar curvature.
+
+We can extend this to determine the possible four-manifolds $X$ with $b_2^+>0$,
+some $n_x\not= 0$, and a metric of {\it non-negative}
+scalar curvature.\foot{If $b_2^+=1$, the $n_x$ are not all topological
+invariants, and we interpret the hypothesis to mean that with at least
+one sign of the perturbation in \hinnoc, the $n_x$ are not all zero.}
+If $X$ obeys those conditions, then for any metric of $R\geq 0$,
+any basic class $x$ is in $H^{2,-}$ modulo torsion
+(so that $L$ admits a connection
+with $F^+=0$, enabling \highor\ to vanish);
+in particular if $x$ is not torsion then $x^2<0$.
+Now consider the effect of the perturbation \hinnoc. As $x\in H^{2,-}$,
+\juhor\ vanishes; hence if $R\geq 0$, $R$ must
+be zero, $M$
+must be covariantly constant and $(M\bar M)^+=p$ (from \bihor).
+For $ M$ covariantly constant,
+$(M\bar M)^+=p$ implies
+that $p$ is covariantly constant also; but for all $p\in H^{2,+}$
+to be covariantly constant implies that $X$ is K\"ahler with $b_2^+=1$
+or is hyper-K\"ahler. Hyper-K\"ahler metrics certainly have $R=0$,
+and there are examples of metrics with $R=0$
+on K\"ahler manifolds with $b_2^+=1$ \ref\lebrun{C. LeBrun, ``Scalar-Flat
+K\"ahler Metrics On Blown-Up Ruled Surfaces,'' J. Reine Angew
+Math. {\bf 420} (1991) 161.}.
+
+As an example,
+for a K\"ahler manifold with $b_2^+\geq 3$, the canonical divisor
+$K$ always arises as a basic class, as we will see in section four, so
+except in the hyper-K\"ahler case,
+such manifolds do not admit a metric of non-negative
+scalar curvature.
+
+Even if the scalar curvature is not positive, we can get an explicit
+bound from \highor\ showing that there are only finitely many basic classes.
+Since
+\eqn\gegor{\int_Xd^4x\sqrt g\left({1\over 2}|M|^4+{1\over 4}R|M|^2\right)
+\geq -{1\over 32}\int_Xd^4x\sqrt g R^2,}
+it follows from \highor, even if we throw away the term $|D_iM|^2$,
+that
+\eqn\egor{\int_Xd^4x\sqrt g |F^+|^2\leq {1\over 16}\int_Xd^4x\sqrt g R^2.}
+On the other hand, basic classes correspond to line bundles
+$L$ with $c_1(L)^2=(2\chi+3\sigma)/4$, or
+\eqn\negor{{1\over (2\pi)^2}\int d^4x\sqrt g\left(|F^+|^2-|F^-|^2\right)
+ ={2\chi+3\sigma\over 4}.}
+Therefore, for a basic class both $I^+=\int d^4x\sqrt g |F^+|^2$
+and $I^-=\int d^4x\sqrt g |F^-|^2$ are bounded. For a given metric,
+there are only finitely
+many isomorphism classes of line bundles
+admitting connections with given bounds on both $I^+$ and $I^-$, so
+the set of basic classes is finite. This is a result
+proved by Kronheimer and Mrowka with their definition of the basic classes.
+
+The basic classes correspond, as indicated in section three,
+to line bundles on which
+the moduli space of solutions of the monopole equations is of zero virtual
+dimension.
+We can analyze in a similar way components of the moduli space of positive
+dimension. Line bundles $L$ such that $c_1(L)^2<(2\chi+3\sigma)/4$ are not
+of much interest in that connection, since for such line bundles the
+moduli space has negative virtual dimension and is generically empty.
+But if $c_1(L)^2>(2\chi+3\sigma)/4$, then \negor\ is simply replaced by
+the stronger bound
+\eqn\unegor{{1\over (2\pi)^2}\int d^4x\sqrt g\left(|F^+|^2-|F^-|^2\right)
+ >{2\chi+3\sigma\over 4}.}
+The set of isomorphism classes of line bundles admitting a connection
+obeying this inequality as well as \egor\ is once again finite.
+So we conclude that for any given metric on $X$, the set of isomorphism
+classes of line bundles for which
+the moduli space is non-empty and of non-negative virtual dimension
+is finite; for a generic metric on $X$, there are only finitely many
+non-empty components of the moduli space.
+
+For further consequences of \highor, we turn to a basic case in the study of
+four-manifolds: the case that $X$ is K\"ahler.
+
+\newsec{Computation On K\"ahler Manifolds}
+
+If $X$ is K\"ahler and spin, then $S^+\otimes L$ has a decomposition
+$S^+\otimes L\cong (K^{1/2}\otimes L)\oplus (K^{-1/2}\otimes L)$,
+where $K$ is the canonical bundle and $K^{1/2}$ is a square root.
+If $X$ is K\"ahler but not spin, then $S^+\otimes L$, defined as before,
+has a similar decomposition where now $K^{1/2}$ and $L$ are not defined
+separately and $K^{1/2}\otimes L$ is characterized
+as a square root of the line bundle $K\otimes L^2$.
+
+We denote the components of $M$ in $K^{1/2}\otimes L$ and
+in $K^{-1/2}\otimes L$ as $\alpha$ and $-i\bar \beta$, respectively.
+The equation $F^+(A)=M\bar M$ can now be decomposed
+\eqn\juffy{\eqalign{F^{2,0} & = \alpha\beta \cr
+ F_\omega^{1,1} & =-{\omega\over 2}
+ \left(|\alpha|^2-|\beta|^2\right)\cr
+ F^{0,2} & =\bar\alpha\bar\beta.\cr}}
+Here $\omega$ is the K\"ahler form and $F_\omega^{1,1}$ is the $(1,1)$
+part of $F^+$.
+\highor\ can be rewritten
+\eqn\nohighor{\eqalign{\int_Xd^4x\sqrt g\left({1\over 2}|s|^2+|k|^2\right)
+=\int_Xd^4x\sqrt g & \left({1\over 2}|F^+|^2
++g^{ij}D_i\bar\alpha D_j\alpha+g^{ij}D_i\bar\beta
+D_j\beta\right.\cr & \left. +{1\over 2}(|\alpha|^2+|\beta|^2)^2
++{1\over 4}R(|\alpha|^2+|\beta|^2)\right) .\cr}}
+
+The right hand side of \nohighor\ is not manifestly non-negative (unless
+$R\geq 0$), but the fact that it is equal to the left hand side shows that
+it is non-negative and zero precisely for solutions of the monopole
+equations. Consider the operation
+\eqn\pohighor{\eqalign{A & \to A\cr
+ \alpha & \to \alpha \cr
+ \beta & \to -\beta.\cr}}
+This is not a symmetry of the monopole equations. But it is a symmetry
+of the right hand side of \nohighor. Therefore, given a zero of the right
+hand side of \nohighor\ -- that is, a solution of the monopole equations --
+the operation \pohighor\ gives another zero of the right hand side of
+\nohighor\ -- that is, another solution of the monopole equations.
+So, though not a symmetry of the monopole equations, the transformation
+\pohighor\ maps solutions of those equations to other solutions.
+
+Given that any solution of \juffy\ is mapped to another solution by
+\pohighor, it follows that such a solution has
+\eqn\tohighor{0=F^{2,0}=F^{0,2}=\alpha\beta=\bar\alpha\bar\beta.}
+Vanishing of $F^{0,2}$ means that the connection $A$ defines a holomorphic
+structure on $L$.
+The basic classes (which are first Chern classes of $L$'s that are such that
+\juffy\ has a solution) are therefore of type $(1,1)$ for any K\"ahler
+structure
+on $X$, a severe constraint.
+
+
+Vanishing of $\alpha\beta$ means that $\alpha=0$
+or $\beta=0$. If $\alpha=0$, then the Dirac equation for $M$ reduces
+to
+\eqn\jipp{\bar\partial_A \beta=0,}
+where $\bar\partial_A$ is the $\bar\partial $ operator on $L$. Similarly,
+if $\beta=0$, then the Dirac equation gives
+\eqn\ipp{\bar\partial_A\alpha= 0.}
+
+Knowing that either $\alpha$ or $\beta$ is zero, we can deduce which it is.
+Integrating the $(1,1)$ part of \juffy\ gives
+\eqn\jippo{{1\over 2\pi}\int_X\omega\wedge F=-{1\over 4\pi}\int_X\omega\wedge
+\omega\left(|\alpha|^2-|\beta|^2\right).}
+The left hand side of \jippo\ is a topological invariant which can be
+interpreted as
+\eqn\ippo{J= [\omega]\cdot c_1(L).}
+The condition that there are no non-trivial abelian instantons is
+that $J$ is non-zero; we only wish to consider metrics for which this
+is so. If $J<0$, we must have $\alpha\not= 0$, $\beta=0$, and if
+$J>0$, we must have $\alpha=0$, $\beta\not= 0$.
+
+The equation that we have not considered so far is the $(1,1)$ part of \juffy.
+This equation can be interpreted
+as follows. Suppose for example that we are in the situation with $\beta=0$.
+The space of connections $A$
+and sections $\alpha$ of $K^{1/2}\otimes L$
+can be interpreted as a symplectic manifold,
+the symplectic structure being defined by
+\eqn\defby{\eqalign{\langle\delta_1A,\delta_2A\rangle & =\int_X\omega
+ \wedge \delta_1A\wedge\delta_2 A\cr
+ \langle \delta_1\alpha,\delta_2\alpha
+\rangle & =-i\int_X\omega\wedge\omega
+\left(\delta_1\overline \alpha\delta_2\alpha-\delta_2\bar \alpha
+\delta_1\alpha\right).\cr}}
+On this symplectic manifold acts the group of $U(1)$ gauge transformations.
+The moment map $\mu$ for this action is the quantity that appears in the
+$(1,1)$ equation that we have not yet exploited, that is
+\eqn\hefby{ \mu\omega= F_\omega^{1,1}+\omega|\alpha|^2.}
+By analogy with many similar problems, setting
+to zero the moment map and dividing by the group of $U(1)$ gauge
+transformations
+should be
+equivalent to dividing by the complexification of the group of gauge
+transformations.\foot{In such comparisons of symplectic and complex quotients,
+one usually needs a stability condition on the complex side.
+In the present case, this is the condition discussed in
+connection with \ippo.} In the present case, the complexification of the
+group of gauge transformations acts by $\alpha\to t\alpha$,
+$\bar\partial_A\to t\bar\partial_At^{-1}$, where $t$ is a map from
+$X$ to ${\bf C}^*$.
+
+Conjugation by $t$ has the effect of identifying any two $A$'s that
+define the same complex structure on $L$. This can be done almost
+uniquely: the ambiguity is that conjugation by a constant $t$ does
+not change $A$. Of course, a gauge transformation by
+a constant $t$ rescales
+$\alpha$ by a constant. The result therefore, for $J<0$, is that the moduli
+space of solutions of the monopole equations is the moduli space of
+pairs consisting of a complex structure on $L$ and a non-zero
+holomorphic section, defined
+up to scaling, of $K^{1/2}\otimes L$. For $J>0$, it is instead
+$\beta$ that is non-zero, and $K^{1/2}\otimes L$ is replaced by
+$K^{1/2}\otimes L^{-1}$.
+
+This result can be stated particularly nicely if $X$ has $b_1=0$.
+Then the complex structure on $L$, assuming that it exists, is unique.
+The moduli space of solutions of the monopole equations is
+therefore simply a complex projective space, ${\bf P}H^0(X,K^{1/2}\otimes L)$
+or ${\bf P}H^0(X,K^{1/2}\otimes L^{-1})$, depending on the sign of $J$.
+
+\bigskip
+\noindent{\it Identifying The Basic Classes}
+
+We would now like to identify the basic classes.
+The above description of the moduli space gives considerable information:
+basic classes are of the form $x=-2c_1(L)$, where $L$ is such that
+$J<0$ and $H^0(X,K^{1/2}\otimes L)$ is non-empty, or $J>0$
+and $H^0(X,K^{1/2}\otimes L^{-1})$ is non-empty. This, however,
+is not a sharp result.
+
+That is closely related to the fact that the moduli spaces ${\bf P}H^0(X,
+K^{1/2}\otimes L^{\pm 1})$ found above very frequently have a dimension
+bigger than the ``generic'' dimension of the moduli space as predicted
+by the index theorem. In fact, K\"ahler metrics
+are far from being generic. In case the expected dimension
+is zero, one would have always $n_x>0$ if the moduli spaces behaved
+``generically'' (given the complex orientation, an isolated point on the
+moduli space would always contribute $+1$ to $n_x$; this is a special
+case of a discussion below). Since the $n_x$
+are frequently negative (as in the examples of Kronheimer
+and Mrowka or equation (2.66) of \newwitten), moduli spaces of
+non-generic dimension must appear.
+
+When the moduli space has greater than the generically expected dimension,
+one can proceed by integrating over
+the bosonic and fermionic collective
+coordinates in the path integral. This gives a result that can be
+described topologically: letting $T$ be the operator that arises in linearizing
+the monopole equations, the cokernel of $T$ is a vector bundle $V$
+(the ``bundle of antighost zero modes'') over the moduli space ${\cal M}$;
+its Euler class integrated over ${\cal M}$ is the desired $n_x$.
+
+Alternatively, one can perturb the equations to more generic ones.
+We use the same perturbation as before.
+For a K\"ahler manifold $X$, the condition $b_2^+>1$ is equivalent
+to $H^{2,0}(X)\not= 0$, so we can pick a non-zero holomorphic two-form
+$\eta$.\foot{In \newwitten, where essentially the same perturbation
+was made, the two-form was called $\omega$, but
+here we reserve that name for the K\"ahler form.}
+We perturb the monopole equations \juffy\
+to
+\eqn\ojuffy{\eqalign{F^{2,0} & = \alpha\beta -\eta\cr
+ F_\omega^{1,1} & = -\omega\left(|\alpha|^2-|\beta|^2\right)\cr
+ F^{0,2} & =\bar\alpha\bar\beta-\bar\eta,\cr}}
+leaving unchanged the Dirac equation for $M$.
+
+It suffices to consider the case that the first Chern class of $L$
+is of type $(1,1)$, since the unperturbed moduli space vanishes otherwise.
+That being so, we have
+\eqn\ijuffy{0=\int_XF^{2,0}\wedge\bar\eta=\int_XF^{0,2}\wedge \eta.}
+Using this, one finds that \nohighor\ generalizes to
+\eqn\onohighor{\eqalign{\int_Xd^4x\sqrt g\left({1\over 2}|s|^2+|k|^2\right)
+=\int_Xd^4x &\left({1\over 2}
+|F^+|^2+g^{ij}D_i\bar\alpha D_j\alpha+g^{ij}D_i\bar\beta
+D_j\beta\right.\cr & \left.
+ +{1\over 2}(|\alpha|^2-|\beta|^2)^2+{2}|\alpha\beta-\eta|^2
++{R\over 4}(|\alpha|^2+|\beta|^2)\right) .\cr}}
+We can now make an argument of a sort we have already seen: the transformation
+\eqn\hoggy{\eqalign{A & \to A\cr
+ \alpha & \to \alpha \cr
+ \beta & \to -\beta \cr
+ \eta & \to -\eta, \cr}}
+though not a symmetry of \ojuffy, is a symmetry of the right hand side of
+\onohighor. As solutions of \ojuffy\ are the same as zeroes of the right
+hand side of \onohighor, we deduce that the solutions of \ojuffy\ with
+a two-form $\eta$ are transformed by \hoggy\ to the solutions with $-\eta$.
+The terms in \ojuffy\ even or odd under the transformation must therefore
+separately vanish, so
+any solution of \ojuffy\ has
+\eqn\goggy{0= F^{0,2}=F^{2,0}=\alpha\beta-\eta.}
+The condition $F^{0,2}=0$ means that the connection still defines
+a holomorphic structure on $L$.
+
+The condition
+\eqn\jipoggy{ \alpha\beta =\eta}
+gives our final criterion for determining the basic classes: they are
+of the form
+$x=-2c_1(L)$ where, for any choice of $\eta\in H^0(X,K)$, one has
+a factorization $\eta=\alpha\beta$ with
+holomorphic sections $\alpha$ and $\beta$ of $K^{1/2}\otimes L^{\pm 1}$,
+and $x^2=c_1(K)^2$.
+
+To make this completely explicit, suppose
+the divisor of $\eta$ is a union of irreducible
+components $C_i$ of multiplicity $r_i$.
+Thus the canonical divisor is
+\eqn\rufu{c_1(K)=\sum_ir_i[C_i],}
+where $[C_i]$ denotes the cohomology class that is
+Poincar\'e dual to the curve $C_i$.
+The existence of the factorization $\eta=\alpha\beta$
+means that the divisor of $K^{1/2}\otimes L$ is
+\eqn\jufu{c_1(K^{1/2}\otimes L)=\sum_is_i[C_i],}
+where $s_i$ are integers with $0\leq s_i\leq r_i$.
+The first Chern class of $L$ is therefore
+\eqn\tufu{c_1(L)=\sum_i(s_i-{1\over 2}r_i)[C_i].}
+And the basic classes are of the form $x=-2c_1(L)$ or
+\eqn\pufu{x=-\sum_i(2s_i-r_i)[C_i].}
+
+An $x$ of this form is is of type $(1,1)$ and congruent to $c_1(K)$
+modulo two, but may not obey $x^2=c_1(K)^2$.
+It is actually possible to prove using the Hodge index theorem
+that for $x$ as above, $x^2\leq c_1(K)^2$.\foot{Such an argument
+was pointed out by D. Morrison.} This is clear from the monopole
+equations: perturbed to $\eta\not=0$, these equations have
+ at most isolated solutions
+(from the isolated factorization $\eta=\alpha\beta$) and not a moduli
+space of solutions of positive dimension. So for K\"ahler manifolds,
+the non-empty perturbed moduli spaces are at most of dimension zero; invariants
+associated with monopole moduli spaces of higher dimension vanish.
+
+Our final conclusion about the basic classes, then, is that they
+are classes of the form \pufu\ such that $x^2=c_1(K)^2$.
+Each factorization $\eta=\alpha\beta$ contributes
+$\pm 1$ to $n_x$ with the corresponding $x$.
+Since several factorizations might give the same $x$, cancellations
+may be possible, making it possible to write the invariant in
+the Kronheimer-Mrowka form, with a shorter list of basic classes.
+Such cancellations can be effectively found since the signs of the various
+contributions are computed below. In any event the classes $x=\pm K$
+arise only from $s_i=0$ or $s_i=r_i$, respectively, and so always
+arise as basic classes with $n_x=\pm 1$.
+\foot{G. Tian and S.-T. Yau, P. Kronheimer and T. Mrowka, D. Morrison,
+and R. Friedman and J. Morgan pointed out that it actually follows
+from these conditions (or related arguments)
+that if $X$ is a minimal surface of general
+type, then the only basic classes are $\pm K$ (so that $K$ is a differentiable
+invariant up to sign). Indeed, according to Lemma 4 in \ref\kodaira{
+K. Kodaira, ``Pluricanonical Systems On Algebraic Surfaces Of General
+Type,'' J. Math. Soc. Japan {\bf 20} (1968) 170.}, on such a surface, if
+$K={\cal O}(C_1)\otimes {\cal O}(C_2)$
+with non-zero effective divisors $C_1,C_2$, then $C_1\cdot C_2>0$.
+This means that a factorization $\eta=\alpha\beta$ with $\alpha,\beta$
+sections of $K^{1/2}\otimes L^{\pm 1}$ and $x^2=c_1(K)^2$
+implies that $K^{1/2}\otimes L^{\pm 1}$ is trivial with one choice of sign,
+and hence that $x=\pm c_1(K)$.}
+
+\bigskip
+\noindent{\it Comparison To Previous Results}
+
+Let us compare these statements to previous results. The main case considered
+in \newwitten\ was that in which the $C_i$ were disjoint
+with multiplicities $r_i=1$. The allowed values of the $s_i$ are
+then $0$ and 1, so the basic classes are
+\eqn\ppufu{x_{\vec \rho}=\sum_i\rho_i[C_i],}
+with each $\rho_i=\pm 1$, as claimed in \newwitten.
+Notice that all of these classes have $x_{\vec\rho}^2=c_1(K)^2$.
+
+The most important case in which the $r_i$ are not all one is the case
+of an elliptic surface with multiple fibers. A fiber of multiplicity $n$
+appears in the canonical divisor with weight $r=n-1$. For elliptic
+surfaces, one has $C_i\cdot C_j=0$ for all $i,j$,
+so the classes in \pufu\ actually do all have
+$x^2=c_1(K)^2=0$. The formulas of
+Kronheimer and Mrowka for the Donaldson invariants of these surfaces show
+that the basic classes, in their sense,
+are indeed the classes given in \pufu.
+
+
+
+
+\bigskip
+\noindent{\it Determination Of The Sign}
+
+To complete this story, we must compute, for each factorization,
+the sign of $\det T$.
+Let us first explain in an abstract setting the strategy that will be
+used.
+Suppose that $E$ and $F$ are real vector spaces of equal even dimension
+with given complex structures, and $T:E\to F$ is an invertible linear map that
+commutes with the complex structure. Then $\det T$ is naturally
+defined as an element of $\det F\otimes \det E^{-1}$.
+If $\det E$ and $\det F$ are trivialized using the complex orientations of $E$
+and $F$, then $\det T>0$ roughly because the complex structure gives a pairing
+of eigenvalues. If $T$ {\it reverses} the complex structures then
+the sign of $\det T$ is $(-1)^w$ with $w=\dim_{\bf C}E$. For instance,
+by reversing the complex structure of $E$ one could reduce to the case
+in which $T$ preserves the complex structures, but reversing the complex
+structure of $E$ multiplies its orientation by $(-1)^w$.
+
+One can combine the two cases as follows. Suppose that $T$ preserves
+the complex structures but is not invertible. Let $T':E\to F$
+be a map that reverses the complex structures and maps ${\rm ker}\,T$
+invertibly to $F/T(E)$. Then for small real $\epsilon$ (of any sign)
+the sign of $\det(T\oplus \epsilon T')$ is $(-1)^w$ where now
+$w={\rm dim}_{\bf C}{\rm ker}\,T$. The same formula holds if
+$U$ and $V$ are vector bundles,
+$E=\Gamma(U)$, $F=\Gamma(V)$, $T:E\to F$
+is an elliptic operator with zero index, $T'$ is a sufficiently mild
+perturbation, and $\det (T+\epsilon T')$ is
+understood as the Ray-Singer-Quillen
+determinant.
+
+Our problem is of this form with $T$ understood as the linearization
+of the monopole equations at $\eta=0$ and $T'$ as the correction
+proportional to $\eta$ (which enters the linearization because of the shift
+it induces in $\alpha$ or $\beta$).
+As in \pxxx, one has $U=\Lambda^1\oplus (S^+\otimes L)$,
+with $S^+\otimes L$ now regarded as a real vector bundle of rank four.
+If $J<0$ (so $\beta=0$ for $\eta=0$), then
+give $U$ a complex structure that acts naturally on
+$S^+\otimes L$ and multiplies $\Lambda^{0,1}$ and $\Lambda^{1,0}$ by
+$i$ and $-i$, respectively. Likewise
+give $V=\Lambda^0\oplus\Lambda^{2,+}\oplus (S^-\otimes L)$
+a complex structure that acts naturally on $S^-\otimes L$; multiplies
+$\Lambda^{0,2}$ and $\Lambda^{2,0}$ by $i$ and $-i$; and exchanges the
+$(1,1)$ part of $\Lambda^{2,+}$ with $\Lambda^0$.
+Then $T$ preserves the
+complex structures on these bundles and $T'$ reverses them.
+
+The sign of the contribution to $n_x$ from a factorization $\eta=\alpha\beta$
+is therefore $(-1)^w$ with $w={\rm dim}_{\bf C}{\rm \ker}\,T$.
+The kernel of $T$ can be described as follows. There is an exact
+sequence
+\eqn\immo{0\to {\cal O}\underarrow{\alpha}K^{1/2}\otimes L\to R\to 0,}
+with some sheaf $R$. The kernel of $T$ has the same dimension as
+$H^0(X,R)$, as explained below. So the sign of the contribution to $n_x$
+is
+\eqn\uddu{(-1)^{{\rm dim}\,H^0(X,R)}.}
+If instead $J>0$, so the unperturbed solution has $\alpha=0$, $\beta\not=0$,
+then first of all we reverse the complex structures on $S^\pm\otimes L$;
+this multiplies the determinant by $(-1)^\Delta$ where $\Delta=-\sigma/8
++c_1(L)^2/2=(\chi+\sigma)/4$ is the Dirac index. The rest of
+the discussion goes through with
+\immo\ replaced by
+\eqn\dimmo{0\to {\cal O}\underarrow{\beta}K^{1/2}\otimes L^{-1}
+\to \tilde R\to 0,}
+so the sign is
+\eqn\duddu{(-1)^{\Delta+{\rm dim}\,H^0(X,\tilde R)}.}
+(It can be verified using the classification of surfaces that \uddu\
+and \duddu\ are equal.)
+With these signs, \jimmo\ becomes completely explicit: the sum in \jimmo\ is
+a sum over factorizations $\eta=\alpha\beta$; each such factorization
+determines a class $x$ and contributes to $n_x$ an amount $\pm 1$
+as just determined.
+
+Before justifying the claim about $\ker T$, let us
+check that the sign just determined agrees with what has been computed
+by other methods. Suppose as in \newwitten\ that the divisor of $\eta$
+is a union of disjoint smooth curves $C_i$. Then $R$ is a sum of
+sheaves $R_i$ supported on $C_i$; $R_i$ is trivial if $s_i$
+(defined in \jufu) is 0 and is isomorphic to a spin bundle of $C_i$
+(determined by $\eta $ and independent of the factorization $\eta=\alpha\beta$)
+if $s_i=1$.
+Let $t_i=1$ if this spin bundle is even, that is, if ${\rm dim}\,H^0(C_i,R_i)$
+is even, and $-1$ if it is odd. Then \uddu\ becomes
+\eqn\nurfo{(-1)^{{\rm dim}\,H^0(X,R)}=\prod_{i|s_i=1} t_i.}
+This is the result claimed in equation (2.66)
+of \newwitten. One can similarly check that \jimmo\ when evaluated
+with the signs given above agrees with the formulas of Kronheimer
+and Mrowka for Donaldson invariants of elliptic surfaces with multiple
+fibers.
+
+It remains to justify the claimed structure of $\ker\, T$. Suppose, for
+instance, that
+we are linearizing around a solution with $\beta=0$, $\alpha\not= 0$.
+Let $\delta A$, $\delta \alpha$, and $\delta \beta$ denote
+first order variations of $A,\alpha,$ and $\beta$. The argument
+that proves the vanishing theorem shows that for $\delta A,\delta\alpha,
+\delta\beta$ to be annihilated by $T$, one must
+have $\alpha\delta\beta=0$ and hence $\delta\beta=0$. The remaining
+equations can be written
+\eqn\remeq{\eqalign{\bar\partial \,\,\delta A^{0,1} & = 0 \cr
+ i\delta A^{0,1}\alpha +\bar\partial_A\delta\alpha & = 0.
+\cr}}
+One must divide the space of solutions of \remeq\ by solutions that arise
+from complex gauge transformations of $A,\alpha$.
+If $\delta A^{0,1}=0$, then the second equation says that $\delta\alpha
+\in H^0(X, K^{1/2}\otimes L)$; however, upon dividing by complex
+gauge transformations (which include rescalings of $\alpha$ by a constant)
+we should regard $\delta\alpha$ as an element of $H^0(X,K^{1/2}\otimes L)/
+{\bf C}\alpha$. The first equation says that $\delta A^{0,1}$ defines
+an element of $H^1(X,{\cal O})$, and the second equation says that
+multiplication by $\alpha$ maps this element to zero in $H^1(X,K^{1/2}\otimes
+L)$. So if ${\rm ker}\,\alpha$ is the kernel of
+$H^1(X,{\cal O})\underarrow{\alpha}H^1(X,K^{1/2}\otimes L)$, then there
+is an exact sequence
+\eqn\imoc{0\to H^0(X,K^{1/2}\otimes L)/{\bf C}\alpha
+\to {\rm ker}\,T\to {\rm ker}\,\alpha\to
+0.}
+This can be compared to the exact sequence
+\eqn\nimoc{0\to H^0(X,K^{1/2}\otimes L)/{\bf C}\alpha
+\to H^0(X,R)\to {\rm ker}\,\alpha\to
+0}
+that comes from \immo. Comparison of these sequences shows
+that ${\rm ker}\,T$ and $H^0(X,R)$ have the same dimension,
+as asserted above; one should be able to identify these spaces canonically.
+
+\newsec{A Short Sketch Of The Physics}
+
+To sketch the relation of these ideas to quantum field theory,
+let us first recall the analysis of $N=2$ supersymmetric Yang-Mills
+theory in \sw. To begin with we work on flat ${\bf R}^4$.
+It has long been known that this theory has a family of quantum vacuum
+states parametrized by a complex variable $u$, which corresponds
+to the four dimensional class in Donaldson theory. For $u\to\infty$,
+the gauge group is spontaneously broken down to the maximal torus,
+the effective coupling is small, and everything can be computed
+using asymptotic freedom. For small $u$, the effective coupling is strong.
+Classically, at $u=0$, the full $SU(2)$ gauge symmetry is restored.
+But the classical approximation is not valid near $u=0$.
+
+Quantum mechanically, as explained in \sw, the $u$ plane turns out to
+parametrize a family of elliptic curves,
+\foot{If $SU(2)$ is replaced by
+a Lie group of rank $r$, elliptic curves are replaced
+by abelian varieties of rank $r$; the analog of
+the simple type condition is that the commutative
+algebra of operators obtained by evaluating the Chern classes of the universal
+bundle at a point in a four-manifold has a spectrum consisting of $h$
+points ($h$, which is $N$ for $SU(N)$, is the dual Coxeter number of the
+Lie group) where these varieties degenerate maximally.}
+in fact, the modular curve
+of the group $\Gamma(2)$. The family can be described by the equation
+\eqn\urmo{y^2=(x^2-\Lambda^4)(x-u),}
+where $\Lambda$ is the analog of a parameter that often goes by the same
+name in the theory of strong interactions. (The fact that $\Lambda\not= 0$
+means that the quantum theory does not have the conformal invariance
+of the classical theory.)
+The curve \urmo\ is smooth for generic $u$, but degenerates to
+a rational curve for $u=\Lambda^2,-\Lambda^2$, or $\infty$. Near each
+degeneration, the theory becomes weakly coupled, and everything is calculable,
+if the right variables are used. At $u=\infty$, the weak coupling is
+(by asymptotic freedom) in terms of the original field
+variables. Near $u=\pm \Lambda^2$
+a magnetic monopole (or a dyon, that is a particle carrying both
+electric and magnetic charge) becomes massless; the light degrees
+of freedom are the monopole or dyon and a dual photon or $U(1)$ gauge
+boson. In terms of the dyon and dual photon, the theory is weakly
+coupled and controllable near $u=\pm \Lambda^2$.
+
+Notice that quantum mechanically on flat ${\bf R}^4$,
+the full $SU(2)$ gauge symmetry is never restored. The only really
+exceptional behavior that
+occurs anywhere is that magnetically charged particles
+become massless.
+
+Now, for any $N=2$ supersymmetric field theory, a standard twisting
+procedure \witten\ gives a topological field theory. In many cases,
+these topological field theories are related to the counting of
+solutions of appropriate equations. For instance, the procedure,
+applied to the underlying $SU(2)$ gauge theory, gives Donaldson theory
+(that is, the problem of counting $SU(2)$ instantons); applied to
+the quantum theory near $u=\pm \Lambda^2$, it gives the problem of
+counting the solutions of the monopole
+equations; applied at a generic point on the $u$ plane, it gives, roughly,
+the problem of counting {\it abelian} instantons.
+
+Now let us apply this experience, to work
+on a general oriented four-manifold $X$.
+The structure of the argument is analogous to the heat kernel proof
+of the index theorem, in which one considers the trace of the heat kernel
+$\Tr (-1)^Fe^{-tH}$. This is independent of $t$ but can be evaluated
+in different ways for $t\to 0$ or for $t\to \infty$;
+for small $t$, one sees local geometry and gets
+a cohomological formula, while for large $t$, one gets a description
+in terms of the physical ground states (harmonic spinors).
+
+In the four-manifold problem, letting $g$ be any Riemannian
+metric on $X$, we consider the one parameter family of metrics $g_t=tg$,
+with $t>0$. Correlation functions of the twisted topological field
+theory are metric independent and so independent of $t$.
+For $t\to 0$, using asymptotic freedom,
+the classical description becomes valid,
+and one recovers Donaldson's definition of four-manifold invariants
+from the $N=2 $ theory. In particular, for four-manifolds on which
+there are no abelian instantons, the main contribution comes from
+$u=0$ where for small $t$ one computes in the familiar fashion
+with the full $SU(2)$ gauge theory.
+
+What happens for large $t$? Once the scale of the four-manifold
+is much greater than $1/\Lambda$, the good description is in terms of
+the degrees of freedom of the vacuum states on ${\bf R}^4$. At first
+sight, it might appear that the answer will come by integration over
+the $u$ plane. That is apparently so for some classes of problems.
+
+However, for four-manifolds with $b_2^+>1$, one can show
+that the contribution of any region of the $u$ plane bounded away
+from $u=\pm \Lambda^2$ vanishes as a power of $t$ for $t\to \infty$.
+This is roughly because in the abelian theory that prevails away
+from $u=\pm \Lambda^2$, there are too many fermion zero modes
+and no sufficiently efficient way to lift
+them. (It is not clear if the gap in the
+argument for non-K\"ahler manifolds with $b_2^+=3$ is significant,
+or could be removed with a more precise treatment.)
+
+Under the above condition on $b_2^+$, a contribution that survives
+for $t\to\infty$ can therefore come only from a neighborhood of
+$u=\pm \Lambda^2$ that shrinks to zero as $t$ grows. The contribution
+from this region does survive for $t\to \infty$; it can be computed
+using the monopole equations since those are the relevant equations
+in the topologically twisted theory near $u=\pm \Lambda^2$.
+In computing a correlation function of operators of the twisted theory
+near $u=\pm \Lambda^2$, one can expand all operators of the microscopic
+theory in terms of operators of successively higher dimension in the
+macroscopic, monopole theory.
+
+For $u$, the most relevant term (that is, the term of lowest dimension)
+is the $c$-number $u=\Lambda^2$ or $u=-\Lambda^2$.
+The simple type condition -- which asserts that $u$ is semi-simple
+with a spectrum consisting of two points -- arises when one may
+replace $u$ by this $c$-number. For the operator
+related to the two-dimensional classes of Donaldson theory, the most
+relevant term is again a $c$-number,
+measuring the first Chern class of the dual line bundle $L$ of the monopole
+problem. Keeping only these terms, since the operators are replaced
+by $c$-numbers, correlation
+functions can be computed by simply
+counting solutions weighted by the sign of the fermion determinant; only zero
+dimensional moduli spaces contribute. Upon fixing the normalizations
+by comparing to known special cases, one arrives at \jimmo.
+
+This in fact appears to be justified since as usual in such
+problems operators of higher
+dimension give contributions that vanish as negative powers of $t$.
+This would give a quantum field theory proof that
+all oriented four-manifolds with $b_2^+>3$ are of simple type.
+If, however, higher terms in the expansion of the operators survive
+on some four-manifolds with $b_2^+>3$, the consequences would be as follows.
+Then the higher monopole invariants of $W\not= 0$ can be detected in
+Donaldson theory, and \jimmo\ will be replaced by a more general
+formula involving the expansion near $u=\pm \Lambda^2$ of some of the
+functions computed in \sw. The number $s$ of higher terms that one would have
+to keep in the expansion would be one half
+the maximum value of $W$ that contributes. $u$ will still have a spectrum
+consisting of two points, but instead of $u^2-\Lambda^4=0$, one would
+get $(u^2-\Lambda^4)^{s+1}=0$. Such a situation has in fact been
+analyzed by Kronheimer and Mrowka.
+
+\listrefs
+\end
diff --git a/macros/generic/occam/PlainEx2/harvmac.occ b/macros/generic/occam/PlainEx2/harvmac.occ
new file mode 100644
index 0000000000..f108b9cc9c
--- /dev/null
+++ b/macros/generic/occam/PlainEx2/harvmac.occ
@@ -0,0 +1,571 @@
+ %^
+ %%%% harvmac.occ
+ %% is a shrinkable version of harvmac.tex (from ftp://xxx.lanl.gov).
+ %% This file was formatted by LS, March 1995, lcs@topo.math.u-psud.fr
+ %% for use with the Occam utility
+ %% (master posting 1994 on ftp ftp.math.u-psud.fr)
+ %
+ %%% DO NOT ALTER "OCCAM" SIGNS <percent>^, <percent>_ , etc.
+ %% UNLESS YOU UNDERSTAND THEM!
+ \let\DDef\def \let\Def\def \let\gDef\gdef
+ \let\Let\let \def\gLet{\global\let}%
+ \let\Font\font \let\FFont\font
+ \let\Mathchardef\mathchardef\let\Newsymbol\newsymbol
+ \let\MATHchardef\mathchardef\let\NEWsymbol\newsymbol
+ \input auditor.tex %% keep auditor.tex available
+ %% comment out above line to suppress audit function.
+ %
+ %%% Remarks on the Occam formatting of harvmac.tex
+ %% ---" big typ"e choice assumed and prechosen.
+ %% --- Slight printer differences ignored.
+ %% --- Reference macros \ref, \nref very fragile
+ %% --- Volume reduction 15 ko to 6ko is typical
+ %% --- You can easils do still better by simplifying the mss.
+ %%%_
+
+%^ A comment for the shrunken macro file: %_
+%% The following are macros extracted from harvmac.tex
+%% to make an ad hoc header file for <FILENAME>
+%% See ftp://xxx.lanl.gov for original of harvmac.tex
+%%%%%%%%%%%%%%%%%% tex macros for preprints, cm version %%%%%%%%%%%%%%
+% (P. Ginsparg, last updated 9/91)
+%^ if confused, type `b' in response to query
+%---------------------------------------------------------------------%
+%_
+%^% site dependent options:
+%% \unredoffs and \redoffs define horizontal and vertical offsets
+%% respectively for unreduced and reduced modes. \speclscape defines
+%% the \special{} call that sets printer to landscape (sideways) mode.
+%% from standard set below, leave uncommented as appropriate or redefine
+%_
+%^%% next 400dpi
+%\def\unredoffs{} \def\redoffs{\voffset=-.31truein\hoffset=-.48truein}
+%\def\speclscape{\special{landscape}}%_
+
+%%% apple lw parameters by default
+ \Def\unredoffs{}%_
+ \Def\redoffs{\voffset=-.31truein \hoffset=-.59truein}%%_
+ \Def\speclscape{\special{ps: landscape}}%
+ %% above special for dvips ?? %_
+
+%^%% qms lasergrafix:
+%\def\unredoffs{} \def\redoffs{\voffset=-.4truein\hoffset=.125truein}
+%\def\speclscape{\special{qms: landscape}}
+%_
+%^%% saclay A4 paper:
+%\def\unredoffs{\hoffset-.14truein\voffset-.2truein}
+%\def\redoffs{\voffset=-.45truein\hoffset=-.21truein}
+%\def\speclscape{\special{landscape}}
+%---------------------------------------------------------------------%
+%_
+
+ \newbox\leftpage
+ \newdimen\fullhsize
+ \newdimen\hstitle
+ \newdimen\hsbody
+ \tolerance=1000\hfuzz=2pt
+
+ %^
+ \def\fontflag{cm} %% never used
+ %_
+
+\catcode`\@=11
+
+%#^
+\Def\usedLITTLEans{}%_
+\Def\usedBIGans{}%% sic! %_
+%#_
+
+%^ % This allows us to modify PLAIN macros.
+\def\bigans{b }
+\def\answ{b }
+\message{ big or little pointsize (b/l)? }\read-1 to\answ
+\ifx
+ \answ\bigans\message{(This will come out unreduced.}%
+ \usedBIGans
+ %_
+ %/^\usedBIGans
+ \magnification=1200
+ %% Adjust:
+ \unredoffs %% set predefined offsets
+ %% but maybe adjust:
+ %\voffset=0truein
+ %\hoffset=0truein
+ \edef\tfontsize{scaled\magstep3}%#_
+ \FFont\authorfont=cmcsc10 %#_
+ \DDef\abstractfont{\tenpoint}%#_
+ \DDef\lspace{{}}%#_
+ \DDef\lbspace{{}}%% $$\lbspace...$$ %#_
+ \baselineskip=16pt plus 2pt minus 1pt
+ \hsbody=\hsize \hstitle=\hsize
+ %% take default values for unreduced format
+ %/_
+ %^
+ \fi
+ \ifx \answ\bigans
+ \else
+ \usedLITTLEans
+ %_
+ %/^\usedLITTLEans
+ \message{(This will be reduced.} \let\l@r=L
+ \magnification=1000\baselineskip=16pt plus 2pt minus 1pt
+ \redoffs %% set predefined offsets
+ %% but maybe adjust:
+ %\voffset=-.31truein
+ %\hoffset=-.59truein
+ %% above sample for dvips and apple laserwriter
+ \vsize=7truein
+ \hstitle=8truein\hsbody=4.75truein
+ \fullhsize=10truein\hsize=\hsbody
+ \edef\tfontsize{scaled\magstep4}%#_
+ \FFont\authorfont=cmcsc10 scaled \magstep1 %#_
+ \DDef\lspace{\qquad}%#_
+ \DDef\lbspace{\hskip-.2in}%% $$\lbspace...$$ %#_
+ %
+\output={\ifnum\pageno=0 %%% This is the HUTP version
+ \shipout\vbox{\speclscape{\hsize\fullhsize\makeheadline}
+ \hbox to \fullhsize{\hfill\pagebody\hfill}}\advancepageno
+ \else
+ \almostshipout{\leftline{\vbox{\pagebody\makefootline}}}\advancepageno
+ \fi}
+\def\almostshipout#1{\if L\l@r \count1=1 \message{[\the\count0.\the\count1]}
+ \global\setbox\leftpage=#1 \global\let\l@r=R
+ \else \count1=2
+ \shipout\vbox{\speclscape{\hsize\fullhsize\makeheadline}
+ \hbox to\fullhsize{\box\leftpage\hfil#1}} \global\let\l@r=L\fi}
+%/_
+%^
+\fi
+%---------------------------------------------------------------------
+%_
+
+\newcount\yearltd\yearltd=\year\advance\yearltd by -1900%_
+
+\Def\HUTP#1#2{\Title{HUTP-\number\yearltd/A#1}{#2}}%_
+
+\Def\Title#1#2{\nopagenumbers
+ \abstractfont\hsize=\hstitle\rightline{#1}%
+ \vskip 1in\centerline{\titlefont #2}
+ \abstractfont\vskip .5in\pageno=0}%_
+
+\Def\Date#1{\vfill\leftline{#1}\tenpoint
+ \supereject\global\hsize=\hsbody%
+ \footline={\hss\tenrm\folio\hss}}% restores pagenumbers%_
+
+% use following instead of \Date on the preliminary draft,
+% puts date/time on each page in big mode, writes labels in margins
+\Def\draft{\draftmode\Date{\draftdate}}%_
+\Def\draftmode{\message{ DRAFTMODE }%
+ \def\draftdate{{\rm preliminary draft:
+ \number\month/\number\day/\number\yearltd\ \ \hourmin}}%
+ \headline={\hfil\draftdate}\writelabels
+ \baselineskip=20pt plus 2pt minus 2pt
+ {\count255=\time\divide\count255 by 60 \xdef\hourmin{\number\count255}
+ \multiply\count255 by-60\advance\count255 by\time
+ \xdef\hourmin{\hourmin:\ifnum\count255<10 0\fi\the\count255}}}%_
+
+\Def\writelabels{\def\wrlabeL##1{\leavevmode\vadjust{\rlap{\smash%
+{\line{{\escapechar=` \hfill\rlap{\sevenrm\hskip.03in\string##1}}}}}}}%
+\def\eqlabeL##1{{\escapechar-1\rlap{\sevenrm\hskip.05in\string##1}}}%
+\def\reflabeL##1{\noexpand\llap{%
+ \noexpand\sevenrm\string\string\string##1}}}%_
+
+% use \nolabels to get rid of eqn, ref, and fig labels in draft mode
+\def\nolabels{\def\wrlabeL##1{}\def\eqlabeL##1{}\def\reflabeL##1{}}
+\nolabels
+
+% tagged sec numbers
+\global\newcount\secno \global\secno=0
+\global\newcount\meqno \global\meqno=1%_
+
+\DDef\newsec#1{\global\advance\secno by1\message{(\the\secno. #1)}%
+ %^\ifx\answ\bigans \vfill\eject
+ %\else \bigbreak\bigskip \fi %if desired %_
+ \global\subsecno=0
+ \eqnres@t\noindent{\bf\the\secno. #1}%
+ \writetoca{{\secsym} {#1}}\par\nobreak\medskip\nobreak}%#_
+
+ \Def\eqnres@t{\xdef\secsym{\the\secno.}%
+ \global\meqno=1\bigbreak\bigskip}%_
+
+ \Def\sequentialequations{\def\eqnres@t{\bigbreak}}%_
+
+ \xdef\secsym{}%_
+
+ \global\newcount\subsecno \global\subsecno=0%_
+
+\Def\subsec#1{\global\advance\subsecno by1
+ \message{(\secsym\the\subsecno. #1)}
+ \ifnum\lastpenalty>9000\else\bigbreak\fi
+ \noindent{\it\secsym\the\subsecno. #1}\writetoca{\string\quad
+ {\secsym\the\subsecno.} {#1}}\par\nobreak\medskip\nobreak}%_
+
+\Def\appendix#1#2{\global\meqno=1
+ \global\subsecno=0\xdef\secsym{\hbox{#1.}}
+ \bigbreak\bigskip\noindent{\bf Appendix #1. #2}\message{(#1. #2)}
+ \writetoca{Appendix {#1.} {#2}}\par\nobreak\medskip\nobreak}%_
+
+% \eqn\label{a+b=c} gives displayed equation, numbered
+% consecutively within sections.
+% \eqnn and \eqna define labels in advance (of eqalign?)
+%
+\Def\eqnn#1{\xdef #1{(\secsym
+ \the\meqno)}\writedef{#1\leftbracket#1}%
+ \global\advance\meqno by1\wrlabeL#1}%_
+\Def\eqna#1{\xdef #1##1{\hbox{$(\secsym\the\meqno##1)$}}
+ \writedef{#1\numbersign1\leftbracket#1{\numbersign1}}%
+ \global\advance\meqno by1\wrlabeL{#1$\{\}$}}%_
+\Def\eqn#1#2{\xdef #1{(\secsym
+ \the\meqno)}\writedef{#1\leftbracket#1}%
+ \global\advance\meqno by1$$#2\eqno#1\eqlabeL#1$$}%_
+
+%% Footnotes
+ \newskip\footskip\footskip14pt plus 1pt minus 1pt
+ %% sets footnote baselineskip
+ \Def\footnotefont{\ninepoint}
+ \def\f@t#1{\footnotefont #1\@foot}
+ \def\f@@t{\baselineskip\footskip\bgroup
+ \footnotefont\aftergroup\@foot\let\next}
+ \setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}%_
+%
+ \global\newcount\ftno \global\ftno=0
+ \Def\foot{\global\advance\ftno by1\footnote{$^{\the\ftno}$}}%_
+
+%
+\newwrite\ftfile
+ %% say \footend to put footnotes at end
+ %% will cause problems if \ref used inside
+ %% \foot, instead use \nref before
+\Def\footend{\def\foot{\global\advance\ftno by1\chardef\wfile=\ftfile
+ $^{\the\ftno}$\ifnum\ftno=1\immediate\openout\ftfile=foots.tmp\fi%
+ \immediate\write\ftfile{\noexpand\smallskip%
+ \noexpand\item{f\the\ftno:\ }\pctsign}\findarg}%
+ \def\footatend{\vfill\eject\immediate\closeout\ftfile{\parindent=20pt
+ \centerline{\bf Footnotes}\nobreak\bigskip\input foots.tmp }}}%_
+ \Def\footatend{}%_
+
+%% References
+%
+% \ref\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the refs on a separate page, \listrefs
+%
+\global\newcount\refno \global\refno=1
+\newwrite\rfile
+\Def\nref#1{\xdef#1{[\the\refno]}\writedef{#1\leftbracket#1}%
+ \ifnum\refno=1\immediate\openout\rfile=refs.tmp\fi
+ \global\advance\refno by1\chardef\wfile=\rfile\immediate
+ \write\rfile{\noexpand\item{#1\ }%
+ \reflabeL{#1\hskip.31in}\pctsign}\findarg}
+ %
+ % horrible hack to sidestep tex \write limitation
+ % FRAGILE!!!
+ \def\findarg#1#{\begingroup\obeylines\newlinechar=`\^^M\pass@rg}
+ {\obeylines\gdef\pass@rg#1{\writ@line\relax #1^^M\hbox{}^^M}%
+ \gdef\writ@line#1^^M{\expandafter\toks0\expandafter{\striprel@x #1}%
+ \edef\next{\the\toks0}\ifx\next\em@rk\let\next=\endgroup\else\ifx\next\empty%
+ \else\immediate\write\wfile{\the\toks0}\fi\let\next=\writ@line\fi\next\relax}}
+ \def\striprel@x#1{} \def\em@rk{\hbox{}}%_
+ %
+
+\Def\ref{[\the\refno]\nref}%_
+
+\Def\lref{\begingroup\obeylines\lr@f}
+ \def\lr@f#1#2{\gdef#1{\ref#1{#2}}\endgroup\unskip}%_
+
+\Def\semi{;\hfil\break}%_
+
+\Def\addref#1{\immediate\write\rfile{\noexpand\item{}#1}}
+ %now unnecessary%_
+
+\Def\listrefs{\footatend\vfill
+ \supereject\immediate\closeout\rfile\writestoppt
+ \baselineskip=14pt\centerline
+ {{\bf References}}\bigskip{\frenchspacing
+ \parindent=20pt\escapechar=` \input refs.tmp
+ \vfill\eject}\nonfrenchspacing}%_
+
+\Def\startrefs#1{\immediate\openout\rfile=refs.tmp\refno=#1}%_
+
+\Def\xref{\expandafter\xr@f}\def\xr@f[#1]{#1}%_
+
+\Def\refs#1{\count255=1[\r@fs #1{\hbox{}}]}
+ \def\r@fs#1{\ifx\und@fined#1\message{reflabel \string#1 is undefined.}%
+ \nref#1{need to supply reference \string#1.}\fi%
+ \vphantom{\hphantom{#1}}\edef\next{#1}\ifx\next\em@rk\def\next{}%
+ \else\ifx\next#1\ifodd\count255\relax\xref#1\count255=0\fi%
+ \else#1\count255=1\fi\let\next=\r@fs\fi\next}%_
+
+ %% Figures
+ %
+\Def\figures{\centerline{{\bf Figure Captions}}\medskip\parindent=40pt%
+ \def\fig##1##2{\medskip\item{Fig.~##1. }##2}}%_
+
+% this is ugly, but moore insists
+ \newwrite\ffile\global
+ \newcount\figno \global\figno=1
+\Def\fig{fig.~\the\figno\nfig}%_
+
+\Def\nfig#1{\xdef#1{fig.~\the\figno}%
+ \writedef{#1\leftbracket fig.\noexpand~\the\figno}%
+ \ifnum\figno=1
+ \immediate\openout\ffile=figs.tmp
+ \fi
+ \chardef\wfile=\ffile%
+ \immediate\write\ffile{\noexpand\medskip\noexpand
+ \item{Fig.\ \the\figno. }
+ \reflabeL{#1\hskip.55in}\pctsign}%
+ \global\advance\figno by1\findarg}%_
+
+\Def\listfigs{\vfill\eject\immediate\closeout\ffile{\parindent40pt
+ \baselineskip14pt\centerline{{\bf Figure Captions}}\nobreak\medskip
+ \escapechar=` \input figs.tmp\vfill\eject}}%_
+
+\Def\xfig{\expandafter\xf@g}\def\xf@g fig.\penalty\@M\ {}%_
+\Def\figs#1{figs.~\f@gs #1{\hbox{}}}%
+\def\f@gs#1{\edef\next{#1}%
+ \ifx\next\em@rk
+ \def\next{}
+ \else
+ \ifx\next#1\xfig #1
+ \else
+ #1
+ \fi
+ \let\next=\f@gs
+ \fi\next}%_
+
+%% Files
+
+\newwrite\lfile
+
+{\escapechar-1\xdef\pctsign{\string\%}\xdef\leftbracket{\string\{}
+ \xdef\rightbracket{\string\}}\xdef\numbersign{\string\#}}%_
+
+\Def\writedefs{\immediate\openout
+ \lfile=labeldefs.tmp \def\writedef##1{%
+ \immediate\write\lfile{\string\def\string##1\rightbracket}}}%_
+
+\Def\writestop{\def\writestoppt{\immediate\write\lfile
+ {\string\pageno \the\pageno
+ \string\startrefs\leftbracket\the\refno\rightbracket
+ \string\def\string\secsym\leftbracket\secsym\rightbracket
+ \string\secno\the\secno\string\meqno\the\meqno
+ }\immediate\closeout\lfile}}%_
+
+\Def\writestoppt{}%_
+\Def\writedef#1{}%_
+
+\Def\seclab#1{\xdef #1{\the\secno}%
+ \writedef{#1\leftbracket#1}\wrlabeL{#1=#1}}%_
+\Def\subseclab#1{\xdef #1{\secsym\the\subsecno}%
+ \writedef{#1\leftbracket#1}\wrlabeL{#1=#1}}%_
+
+\newwrite\tfile
+
+\Def\writetoca#1{}%_
+
+\Def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
+ % use this to write file with table of contents%_
+
+\Def\writetoc{\immediate\openout\tfile=toc.tmp
+ \def\writetoca##1{{\edef\next{\write\tfile{\noindent ##1
+ \string\leaderfill {\noexpand\number\pageno} \par}}\next}}}
+% and this lists table of contents on second pass%_
+
+\Def\listtoc{\centerline{\bf Contents}\nobreak
+ \medskip{\baselineskip=12pt
+ \parskip=0pt\catcode`\@=11
+ \input toc.tex \catcode`\@=12 \bigbreak\bigskip}}%_
+
+\catcode`\@=12 % at signs are no longer letters
+
+ %%% Fonts 10pt, Title, 9pt
+ %^% The font loading has been rearranged to suit Occam%_
+
+ %% Stop frivolous math family waste
+ \let\TextFontInMathBad\undefined
+ \def\TextWarning{\ifmmode\TextFontInMathBad\fi}
+
+ % Unpleasantness in calling in abstract and title fonts
+
+ %%% Title fonts
+ %#/^\TitlepointMathTest
+ \font\titlerms=cmr7 \tfontsize
+ \font\titlermss=cmr5 \tfontsize
+ \font\titlei=cmmi10 \tfontsize\relax \skewchar\titlei='177
+ \font\titleis=cmmi7 \tfontsize\relax \skewchar\titleis='177
+ \font\titleiss=cmmi5 \tfontsize\relax \skewchar\titleiss='177
+ \font\titlesy=cmsy10 \tfontsize\relax \skewchar\titlesy='60
+ \font\titlesys=cmsy7 \tfontsize\relax \skewchar\titlesys='60
+ \font\titlesyss=cmsy5 \tfontsize\relax \skewchar\titlesyss='60
+ %#/_
+ %^
+ \DDef \TitlepointMathTest{\relax}%
+ %% diagnostic that never survives%#_
+ %_
+
+ \font\titlerm=cmr10 \tfontsize
+ \Def\titlefont{\textfont0=\titlerm
+ \def\rm{\fam0\titlerm}%
+ \rm
+ %#/^\TitlepointMathTest
+ \textfont0=\titlerm \scriptfont0=\titlerms
+ \scriptscriptfont0=\titlermss
+ \textfont1=\titlei \scriptfont1=\titleis
+ \scriptscriptfont1=\titleiss
+ \textfont2=\titlesy \scriptfont2=\titlesys
+ \scriptscriptfont2=\titlesyss
+ %#/_
+ %#^
+ \everymath{\TitlepointMathTest}%
+ %#_
+ }%_
+
+ %^
+ \ifx\answ\bigans
+ \else
+ %_
+ %/^\usedLITTLEans
+ %%% Abstract fonts
+ %
+ \font\bigit=cmti10 scaled \magstep1
+ \font\abssl=cmsl10 scaled \magstep1
+ \font\absrm=cmr10 scaled\magstep1 \relax\textfont0=\absrm
+ \font\absrms=cmr7 scaled\magstep1 \relax\scriptfont0=\absrms
+ \font\absrmss=cmr5 scaled\magstep1 \relax\scriptscriptfont0=\absrmss
+ \font\absi=cmmi10 scaled\magstep1
+ \relax\skewchar\absi='177\textfont1=\absi
+ \font\absis=cmmi7 scaled\magstep1
+ \relax\skewchar\absis='177\scriptfont1=\absis
+ \font\absiss=cmmi5 scaled\magstep1
+ \relax\skewchar\absiss='177\scriptscriptfont1=\absiss
+ \font\abssy=cmsy10 scaled\magstep1
+ \relax\skewchar\abssy='60\textfont2=\abssy
+ \font\abssys=cmsy7 scaled\magstep1
+ \relax\skewchar\abssys='60\scriptfont2=\abssys
+ \font\abssyss=cmsy5 scaled\magstep1
+ \relax\skewchar\abssyss='60\scriptscriptfont2=\abssyss
+ \font\absbf=cmbx10 scaled\magstep1
+ %
+ \def\abstractfont{\def\rm{\fam0\absrm}% switch to abstract font
+ %
+ \textfont\itfam=\bigit
+ \def\it{\fam\itfam\bigit}%
+ \textfont\slfam=\abssl \def\sl{\fam\slfam\abssl}%
+ \textfont\bffam=\absbf \def\bf{\fam\bffam\absbf}\rm}%
+ %/_
+ %^
+\fi
+ %_
+
+ %%% Tenpoint Fonts
+ %
+\Def\tenpoint{%
+ \def\rm{\fam0\tenrm}%
+ \rm
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont\bffam=\tenbf
+ \def\bf{\fam\bffam\tenbf}%
+ \def\it{\TextWarning\tenit}%
+ \def\sl{\TextWarning\tensl}%
+ }%_
+
+ %%% Ninepoint Fonts
+ %#/^\NinepointMathTest
+ \font\sixrm=cmr6%
+ \font\ninei=cmmi9 \skewchar\ninei='177
+ \font\sixi=cmmi6 \skewchar\ninei='177
+ \font\ninesy=cmsy9 \skewchar\ninesy='60
+ \font\sixsy=cmsy6 \skewchar\sixsy='60
+ %#/_
+ %^
+ \DDef\NinepointMathTest{\relax}%
+ %% diagnostic only%#_
+ %_
+
+ %^% Autonomous 9pt prose fonts
+ %% \ninerm also math%_
+ \font\ninerm=cmr9 %_
+ \Font\nineit=cmti9 %_
+ \Font\ninesl=cmsl9 %_
+
+ \Def\ninepoint{%
+ \textfont0=\ninerm
+ \def\rm{\fam0\ninerm}%
+ \rm
+ \def\it{\TextWarning\nineit}%
+ \def\sl{\TextWarning\ninesl}%
+ %#/^\NinepointMathTest
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ %#/_
+ %#^
+ \everymath{\NinepointMathTest}%
+ %#_
+ }%_
+
+
+ %% Hyphenation exceptions
+
+\hyphenation{anom-aly anom-alies coun-ter-term coun-ter-terms}
+
+\Def\noblackbox{\overfullrule=0pt}%_
+
+\Def\inv{^{\raise.15ex\hbox{${\scriptscriptstyle -}$}\kern-.05em 1}}%_
+\Def\dup{^{\vphantom{1}}}%_
+\Def\Dsl{\,\raise.15ex\hbox{/}\mkern-13.5mu D}
+ %this one can be subscripted%_
+\Def\dsl{\raise.15ex\hbox{/}\kern-.57em\partial}%_
+\Def\del{\partial}%_
+\Def\Psl{\dsl}%_
+\Def\tr{{\rm tr}}%_
+\Def\Tr{{\rm Tr}}%_
+
+\font\bigit=cmti10 scaled \magstep1
+\Def\biglie{\hbox{\bigit\$}} %pound sterling%_
+
+\Def\boxeqn#1{\vcenter{\vbox{\hrule\hbox{\vrule\kern3pt\vbox{\kern3pt
+ \hbox{${\displaystyle #1}$}\kern3pt}\kern3pt\vrule}\hrule}}}%_
+\Def\mbox#1#2{\vcenter{\hrule \hbox{\vrule height#2in
+ \kern#1in \vrule} \hrule}} %e.g. \mbox{.1}{.1}%_
+
+%^ matters of taste%_
+%^\Def\tilde{\widetilde}%_
+%^\Def\bar{\overline}%_
+%^\Def\hat{\widehat}%_
+
+% some sample definitions
+\Def\CAG{{\cal A/\cal G}}%_
+\Def\CO{{\cal O}} % curly letters%_
+\Def\CA{{\cal A}}%_
+\Def\CC{{\cal C}}%_
+\Def\CF{{\cal F}}%_
+\Def\CG{{\cal G}}%_
+\Def\CL{{\cal L}}%_
+\Def\CH{{\cal H}}%_
+\Def\CI{{\cal I}}%_
+\Def\CU{{\cal U}}%_
+\Def\CB{{\cal B}}%_
+\Def\CR{{\cal R}}%_
+\Def\CD{{\cal D}}%_
+\Def\CT{{\cal T}}%_
+\Def\e#1{{\rm e}^{^{\textstyle#1}}}%_
+\Def\grad#1{\,\nabla\!_{{#1}}\,}%_
+\Def\gradgrad#1#2{\,\nabla\!_{{#1}}\nabla\!_{{#2}}\,}%_
+\Def\ph{\varphi}%_
+\Def\psibar{\overline\psi}%_
+\Def\om#1#2{\omega^{#1}{}_{#2}}%_
+\Def\vev#1{\langle #1 \rangle}%_
+\Def\lform{\hbox{$\sqcup$}\llap{\hbox{$\sqcap$}}}%_
+\Def\darr#1{\raise1.5ex\hbox{$\leftrightarrow$}\mkern-16.5mu #1}%_
+\Def\lie{\hbox{\it\$}} %pound sterling%_
+\Def\ha{{1\over2}}%_
+\Def\half{{\textstyle{1\over2}}} %puts a small half in a displayed eqn%_
+\Def\roughly#1{\raise.3ex\hbox{$#1$\kern-.75em\lower1ex\hbox{$\sim$}}}%_
+
+%^
+\AuditDepth{**}%_
+\endinput \ No newline at end of file
diff --git a/macros/generic/occam/PlainEx2/harvmac.tex b/macros/generic/occam/PlainEx2/harvmac.tex
new file mode 100644
index 0000000000..e223d269c0
--- /dev/null
+++ b/macros/generic/occam/PlainEx2/harvmac.tex
@@ -0,0 +1,327 @@
+%%%%%%%%%%%%%%%%%% tex macros for preprints, cm version %%%%%%%%%%%%%%
+% (P. Ginsparg, last updated 9/91)
+% if confused, type `b' in response to query
+%
+%---------------------------------------------------------------------%
+%% site dependent options:
+%% \unredoffs and \redoffs define horizontal and vertical offsets
+%% respectively for unreduced and reduced modes. \speclscape defines
+%% the \special{} call that sets printer to landscape (sideways) mode.
+%% from standard set below, leave uncommented as appropriate or redefine
+%
+%%% next 400dpi
+%\def\unredoffs{} \def\redoffs{\voffset=-.31truein\hoffset=-.48truein}
+%\def\speclscape{\special{landscape}}
+%
+%%% apple lw
+\def\unredoffs{} \def\redoffs{\voffset=-.31truein\hoffset=-.59truein}
+\def\speclscape{\special{ps: landscape}}
+%
+%%% qms lasergrafix:
+%\def\unredoffs{} \def\redoffs{\voffset=-.4truein\hoffset=.125truein}
+%\def\speclscape{\special{qms: landscape}}
+%
+%%% saclay A4 paper:
+%\def\unredoffs{\hoffset-.14truein\voffset-.2truein}
+%\def\redoffs{\voffset=-.45truein\hoffset=-.21truein}
+%\def\speclscape{\special{landscape}}
+%
+%---------------------------------------------------------------------%
+%
+\newbox\leftpage
+\newdimen\fullhsize
+\newdimen\hstitle
+\newdimen\hsbody
+\tolerance=1000\hfuzz=2pt\def\fontflag{cm}
+%
+\catcode`\@=11 % This allows us to modify PLAIN macros.
+\def\bigans{b }
+\message{ big or little (b/l)? }\read-1 to\answ
+%
+\ifx\answ\bigans\message{(This will come out unreduced.}
+\magnification=1200\unredoffs\baselineskip=16pt plus 2pt minus 1pt
+\hsbody=\hsize \hstitle=\hsize %take default values for unreduced format
+%
+\else\message{(This will be reduced.} \let\l@r=L
+\magnification=1000\baselineskip=16pt plus 2pt minus 1pt \vsize=7truein
+\redoffs \hstitle=8truein\hsbody=4.75truein\fullhsize=10truein\hsize=\hsbody
+%
+\output={\ifnum\pageno=0 %%% This is the HUTP version
+ \shipout\vbox{\speclscape{\hsize\fullhsize\makeheadline}
+ \hbox to \fullhsize{\hfill\pagebody\hfill}}\advancepageno
+ \else
+ \almostshipout{\leftline{\vbox{\pagebody\makefootline}}}\advancepageno
+ \fi}
+\def\almostshipout#1{\if L\l@r \count1=1 \message{[\the\count0.\the\count1]}
+ \global\setbox\leftpage=#1 \global\let\l@r=R
+ \else \count1=2
+ \shipout\vbox{\speclscape{\hsize\fullhsize\makeheadline}
+ \hbox to\fullhsize{\box\leftpage\hfil#1}} \global\let\l@r=L\fi}
+\fi
+%---------------------------------------------------------------------
+%
+\newcount\yearltd\yearltd=\year\advance\yearltd by -1900
+\def\HUTP#1#2{\Title{HUTP-\number\yearltd/A#1}{#2}}
+\def\Title#1#2{\nopagenumbers\abstractfont\hsize=\hstitle\rightline{#1}%
+\vskip 1in\centerline{\titlefont #2}\abstractfont\vskip .5in\pageno=0}
+%
+\def\Date#1{\vfill\leftline{#1}\tenpoint\supereject\global\hsize=\hsbody%
+\footline={\hss\tenrm\folio\hss}}% restores pagenumbers
+%
+% use following instead of \Date on the preliminary draft,
+% puts date/time on each page in big mode, writes labels in margins
+\def\draft{\draftmode\Date{\draftdate}}
+\def\draftmode{\message{ DRAFTMODE }\def\draftdate{{\rm preliminary draft:
+\number\month/\number\day/\number\yearltd\ \ \hourmin}}%
+\headline={\hfil\draftdate}\writelabels\baselineskip=20pt plus 2pt minus 2pt
+ {\count255=\time\divide\count255 by 60 \xdef\hourmin{\number\count255}
+ \multiply\count255 by-60\advance\count255 by\time
+ \xdef\hourmin{\hourmin:\ifnum\count255<10 0\fi\the\count255}}}
+% use \nolabels to get rid of eqn, ref, and fig labels in draft mode
+\def\nolabels{\def\wrlabeL##1{}\def\eqlabeL##1{}\def\reflabeL##1{}}
+\def\writelabels{\def\wrlabeL##1{\leavevmode\vadjust{\rlap{\smash%
+{\line{{\escapechar=` \hfill\rlap{\sevenrm\hskip.03in\string##1}}}}}}}%
+\def\eqlabeL##1{{\escapechar-1\rlap{\sevenrm\hskip.05in\string##1}}}%
+\def\reflabeL##1{\noexpand\llap{\noexpand\sevenrm\string\string\string##1}}}
+\nolabels
+%
+% tagged sec numbers
+\global\newcount\secno \global\secno=0
+\global\newcount\meqno \global\meqno=1
+%
+\def\newsec#1{\global\advance\secno by1\message{(\the\secno. #1)}
+%\ifx\answ\bigans \vfill\eject \else \bigbreak\bigskip \fi %if desired
+\global\subsecno=0\eqnres@t\noindent{\bf\the\secno. #1}
+\writetoca{{\secsym} {#1}}\par\nobreak\medskip\nobreak}
+\def\eqnres@t{\xdef\secsym{\the\secno.}\global\meqno=1\bigbreak\bigskip}
+\def\sequentialequations{\def\eqnres@t{\bigbreak}}\xdef\secsym{}
+%
+\global\newcount\subsecno \global\subsecno=0
+\def\subsec#1{\global\advance\subsecno by1\message{(\secsym\the\subsecno. #1)}
+\ifnum\lastpenalty>9000\else\bigbreak\fi
+\noindent{\it\secsym\the\subsecno. #1}\writetoca{\string\quad
+{\secsym\the\subsecno.} {#1}}\par\nobreak\medskip\nobreak}
+%
+\def\appendix#1#2{\global\meqno=1\global\subsecno=0\xdef\secsym{\hbox{#1.}}
+\bigbreak\bigskip\noindent{\bf Appendix #1. #2}\message{(#1. #2)}
+\writetoca{Appendix {#1.} {#2}}\par\nobreak\medskip\nobreak}
+%
+% \eqn\label{a+b=c} gives displayed equation, numbered
+% consecutively within sections.
+% \eqnn and \eqna define labels in advance (of eqalign?)
+%
+\def\eqnn#1{\xdef #1{(\secsym\the\meqno)}\writedef{#1\leftbracket#1}%
+\global\advance\meqno by1\wrlabeL#1}
+\def\eqna#1{\xdef #1##1{\hbox{$(\secsym\the\meqno##1)$}}
+\writedef{#1\numbersign1\leftbracket#1{\numbersign1}}%
+\global\advance\meqno by1\wrlabeL{#1$\{\}$}}
+\def\eqn#1#2{\xdef #1{(\secsym\the\meqno)}\writedef{#1\leftbracket#1}%
+\global\advance\meqno by1$$#2\eqno#1\eqlabeL#1$$}
+%
+% footnotes
+\newskip\footskip\footskip14pt plus 1pt minus 1pt %sets footnote baselineskip
+\def\footnotefont{\ninepoint}\def\f@t#1{\footnotefont #1\@foot}
+\def\f@@t{\baselineskip\footskip\bgroup\footnotefont\aftergroup\@foot\let\next}
+\setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}
+%
+\global\newcount\ftno \global\ftno=0
+\def\foot{\global\advance\ftno by1\footnote{$^{\the\ftno}$}}
+%
+%say \footend to put footnotes at end
+%will cause problems if \ref used inside \foot, instead use \nref before
+\newwrite\ftfile
+\def\footend{\def\foot{\global\advance\ftno by1\chardef\wfile=\ftfile
+$^{\the\ftno}$\ifnum\ftno=1\immediate\openout\ftfile=foots.tmp\fi%
+\immediate\write\ftfile{\noexpand\smallskip%
+\noexpand\item{f\the\ftno:\ }\pctsign}\findarg}%
+\def\footatend{\vfill\eject\immediate\closeout\ftfile{\parindent=20pt
+\centerline{\bf Footnotes}\nobreak\bigskip\input foots.tmp }}}
+\def\footatend{}
+%
+% \ref\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the refs on a separate page, \listrefs
+%
+\global\newcount\refno \global\refno=1
+\newwrite\rfile
+%
+\def\ref{[\the\refno]\nref}
+\def\nref#1{\xdef#1{[\the\refno]}\writedef{#1\leftbracket#1}%
+\ifnum\refno=1\immediate\openout\rfile=refs.tmp\fi
+\global\advance\refno by1\chardef\wfile=\rfile\immediate
+\write\rfile{\noexpand\item{#1\ }\reflabeL{#1\hskip.31in}\pctsign}\findarg}
+% horrible hack to sidestep tex \write limitation
+\def\findarg#1#{\begingroup\obeylines\newlinechar=`\^^M\pass@rg}
+{\obeylines\gdef\pass@rg#1{\writ@line\relax #1^^M\hbox{}^^M}%
+\gdef\writ@line#1^^M{\expandafter\toks0\expandafter{\striprel@x #1}%
+\edef\next{\the\toks0}\ifx\next\em@rk\let\next=\endgroup\else\ifx\next\empty%
+\else\immediate\write\wfile{\the\toks0}\fi\let\next=\writ@line\fi\next\relax}}
+\def\striprel@x#1{} \def\em@rk{\hbox{}}
+%
+\def\lref{\begingroup\obeylines\lr@f}
+\def\lr@f#1#2{\gdef#1{\ref#1{#2}}\endgroup\unskip}
+%
+\def\semi{;\hfil\break}
+\def\addref#1{\immediate\write\rfile{\noexpand\item{}#1}} %now unnecessary
+%
+\def\listrefs{\footatend\vfill\supereject\immediate\closeout\rfile\writestoppt
+\baselineskip=14pt\centerline{{\bf References}}\bigskip{\frenchspacing%
+\parindent=20pt\escapechar=` \input refs.tmp\vfill\eject}\nonfrenchspacing}
+%
+\def\startrefs#1{\immediate\openout\rfile=refs.tmp\refno=#1}
+%
+\def\xref{\expandafter\xr@f}\def\xr@f[#1]{#1}
+\def\refs#1{\count255=1[\r@fs #1{\hbox{}}]}
+\def\r@fs#1{\ifx\und@fined#1\message{reflabel \string#1 is undefined.}%
+\nref#1{need to supply reference \string#1.}\fi%
+\vphantom{\hphantom{#1}}\edef\next{#1}\ifx\next\em@rk\def\next{}%
+\else\ifx\next#1\ifodd\count255\relax\xref#1\count255=0\fi%
+\else#1\count255=1\fi\let\next=\r@fs\fi\next}
+%
+\def\figures{\centerline{{\bf Figure Captions}}\medskip\parindent=40pt%
+\def\fig##1##2{\medskip\item{Fig.~##1. }##2}}
+%
+% this is ugly, but moore insists
+\newwrite\ffile\global\newcount\figno \global\figno=1
+%
+\def\fig{fig.~\the\figno\nfig}
+\def\nfig#1{\xdef#1{fig.~\the\figno}%
+\writedef{#1\leftbracket fig.\noexpand~\the\figno}%
+\ifnum\figno=1\immediate\openout\ffile=figs.tmp\fi\chardef\wfile=\ffile%
+\immediate\write\ffile{\noexpand\medskip\noexpand\item{Fig.\ \the\figno. }
+\reflabeL{#1\hskip.55in}\pctsign}\global\advance\figno by1\findarg}
+%
+\def\listfigs{\vfill\eject\immediate\closeout\ffile{\parindent40pt
+\baselineskip14pt\centerline{{\bf Figure Captions}}\nobreak\medskip
+\escapechar=` \input figs.tmp\vfill\eject}}
+%
+\def\xfig{\expandafter\xf@g}\def\xf@g fig.\penalty\@M\ {}
+\def\figs#1{figs.~\f@gs #1{\hbox{}}}
+\def\f@gs#1{\edef\next{#1}\ifx\next\em@rk\def\next{}\else
+\ifx\next#1\xfig #1\else#1\fi\let\next=\f@gs\fi\next}
+%
+\newwrite\lfile
+{\escapechar-1\xdef\pctsign{\string\%}\xdef\leftbracket{\string\{}
+\xdef\rightbracket{\string\}}\xdef\numbersign{\string\#}}
+\def\writedefs{\immediate\openout\lfile=labeldefs.tmp \def\writedef##1{%
+\immediate\write\lfile{\string\def\string##1\rightbracket}}}
+%
+\def\writestop{\def\writestoppt{\immediate\write\lfile{\string\pageno%
+\the\pageno\string\startrefs\leftbracket\the\refno\rightbracket%
+\string\def\string\secsym\leftbracket\secsym\rightbracket%
+\string\secno\the\secno\string\meqno\the\meqno}\immediate\closeout\lfile}}
+%
+\def\writestoppt{}\def\writedef#1{}
+%
+\def\seclab#1{\xdef #1{\the\secno}\writedef{#1\leftbracket#1}\wrlabeL{#1=#1}}
+\def\subseclab#1{\xdef #1{\secsym\the\subsecno}%
+\writedef{#1\leftbracket#1}\wrlabeL{#1=#1}}
+%
+\newwrite\tfile \def\writetoca#1{}
+\def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
+% use this to write file with table of contents
+\def\writetoc{\immediate\openout\tfile=toc.tmp
+ \def\writetoca##1{{\edef\next{\write\tfile{\noindent ##1
+ \string\leaderfill {\noexpand\number\pageno} \par}}\next}}}
+% and this lists table of contents on second pass
+\def\listtoc{\centerline{\bf Contents}\nobreak\medskip{\baselineskip=12pt
+ \parskip=0pt\catcode`\@=11 \input toc.tex \catcode`\@=12 \bigbreak\bigskip}}
+%
+\catcode`\@=12 % at signs are no longer letters
+%
+% Unpleasantness in calling in abstract and title fonts
+\edef\tfontsize{\ifx\answ\bigans scaled\magstep3\else scaled\magstep4\fi}
+\font\titlerm=cmr10 \tfontsize \font\titlerms=cmr7 \tfontsize
+\font\titlermss=cmr5 \tfontsize \font\titlei=cmmi10 \tfontsize
+\font\titleis=cmmi7 \tfontsize \font\titleiss=cmmi5 \tfontsize
+\font\titlesy=cmsy10 \tfontsize \font\titlesys=cmsy7 \tfontsize
+\font\titlesyss=cmsy5 \tfontsize \font\titleit=cmti10 \tfontsize
+\skewchar\titlei='177 \skewchar\titleis='177 \skewchar\titleiss='177
+\skewchar\titlesy='60 \skewchar\titlesys='60 \skewchar\titlesyss='60
+%
+\def\titlefont{\def\rm{\fam0\titlerm}% switch to title font
+\textfont0=\titlerm \scriptfont0=\titlerms \scriptscriptfont0=\titlermss
+\textfont1=\titlei \scriptfont1=\titleis \scriptscriptfont1=\titleiss
+\textfont2=\titlesy \scriptfont2=\titlesys \scriptscriptfont2=\titlesyss
+\textfont\itfam=\titleit \def\it{\fam\itfam\titleit}\rm}
+%
+\font\authorfont=cmcsc10 \ifx\answ\bigans\else scaled\magstep1\fi
+%
+\ifx\answ\bigans\def\abstractfont{\tenpoint}\else
+\font\abssl=cmsl10 scaled \magstep1
+\font\absrm=cmr10 scaled\magstep1 \font\absrms=cmr7 scaled\magstep1
+\font\absrmss=cmr5 scaled\magstep1 \font\absi=cmmi10 scaled\magstep1
+\font\absis=cmmi7 scaled\magstep1 \font\absiss=cmmi5 scaled\magstep1
+\font\abssy=cmsy10 scaled\magstep1 \font\abssys=cmsy7 scaled\magstep1
+\font\abssyss=cmsy5 scaled\magstep1 \font\absbf=cmbx10 scaled\magstep1
+\skewchar\absi='177 \skewchar\absis='177 \skewchar\absiss='177
+\skewchar\abssy='60 \skewchar\abssys='60 \skewchar\abssyss='60
+%
+\def\abstractfont{\def\rm{\fam0\absrm}% switch to abstract font
+\textfont0=\absrm \scriptfont0=\absrms \scriptscriptfont0=\absrmss
+\textfont1=\absi \scriptfont1=\absis \scriptscriptfont1=\absiss
+\textfont2=\abssy \scriptfont2=\abssys \scriptscriptfont2=\abssyss
+\textfont\itfam=\bigit \def\it{\fam\itfam\bigit}\def\footnotefont{\tenpoint}%
+\textfont\slfam=\abssl \def\sl{\fam\slfam\abssl}%
+\textfont\bffam=\absbf \def\bf{\fam\bffam\absbf}\rm}\fi
+%
+\def\tenpoint{\def\rm{\fam0\tenrm}% switch back to 10-point type
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\textfont\itfam=\tenit \def\it{\fam\itfam\tenit}\def\footnotefont{\ninepoint}%
+\textfont\bffam=\tenbf \def\bf{\fam\bffam\tenbf}\def\sl{\fam\slfam\tensl}\rm}
+%
+\font\ninerm=cmr9 \font\sixrm=cmr6 \font\ninei=cmmi9 \font\sixi=cmmi6
+\font\ninesy=cmsy9 \font\sixsy=cmsy6 \font\ninebf=cmbx9
+\font\nineit=cmti9 \font\ninesl=cmsl9 \skewchar\ninei='177
+\skewchar\sixi='177 \skewchar\ninesy='60 \skewchar\sixsy='60
+%
+\def\ninepoint{\def\rm{\fam0\ninerm}% switch to footnote font
+\textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+\textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+\textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+\textfont\itfam=\ninei \def\it{\fam\itfam\nineit}\def\sl{\fam\slfam\ninesl}%
+\textfont\bffam=\ninebf \def\bf{\fam\bffam\ninebf}\rm}
+%
+%---------------------------------------------------------------------
+%
+\def\noblackbox{\overfullrule=0pt}
+\hyphenation{anom-aly anom-alies coun-ter-term coun-ter-terms}
+%
+\def\inv{^{\raise.15ex\hbox{${\scriptscriptstyle -}$}\kern-.05em 1}}
+\def\dup{^{\vphantom{1}}}
+\def\Dsl{\,\raise.15ex\hbox{/}\mkern-13.5mu D} %this one can be subscripted
+\def\dsl{\raise.15ex\hbox{/}\kern-.57em\partial}
+\def\del{\partial}
+\def\Psl{\dsl}
+\def\tr{{\rm tr}} \def\Tr{{\rm Tr}}
+\font\bigit=cmti10 scaled \magstep1
+\def\biglie{\hbox{\bigit\$}} %pound sterling
+\def\lspace{\ifx\answ\bigans{}\else\qquad\fi}
+\def\lbspace{\ifx\answ\bigans{}\else\hskip-.2in\fi} % $$\lbspace...$$
+\def\boxeqn#1{\vcenter{\vbox{\hrule\hbox{\vrule\kern3pt\vbox{\kern3pt
+ \hbox{${\displaystyle #1}$}\kern3pt}\kern3pt\vrule}\hrule}}}
+\def\mbox#1#2{\vcenter{\hrule \hbox{\vrule height#2in
+ \kern#1in \vrule} \hrule}} %e.g. \mbox{.1}{.1}
+% matters of taste
+%\def\tilde{\widetilde} \def\bar{\overline} \def\hat{\widehat}
+%
+% some sample definitions
+\def\CAG{{\cal A/\cal G}} \def\CO{{\cal O}} % curly letters
+\def\CA{{\cal A}} \def\CC{{\cal C}} \def\CF{{\cal F}} \def\CG{{\cal G}}
+\def\CL{{\cal L}} \def\CH{{\cal H}} \def\CI{{\cal I}} \def\CU{{\cal U}}
+\def\CB{{\cal B}} \def\CR{{\cal R}} \def\CD{{\cal D}} \def\CT{{\cal T}}
+\def\e#1{{\rm e}^{^{\textstyle#1}}}
+\def\grad#1{\,\nabla\!_{{#1}}\,}
+\def\gradgrad#1#2{\,\nabla\!_{{#1}}\nabla\!_{{#2}}\,}
+\def\ph{\varphi}
+\def\psibar{\overline\psi}
+\def\om#1#2{\omega^{#1}{}_{#2}}
+\def\vev#1{\langle #1 \rangle}
+\def\lform{\hbox{$\sqcup$}\llap{\hbox{$\sqcap$}}}
+\def\darr#1{\raise1.5ex\hbox{$\leftrightarrow$}\mkern-16.5mu #1}
+\def\lie{\hbox{\it\$}} %pound sterling
+\def\ha{{1\over2}}
+\def\half{{\textstyle{1\over2}}} %puts a small half in a displayed eqn
+\def\roughly#1{\raise.3ex\hbox{$#1$\kern-.75em\lower1ex\hbox{$\sim$}}}
diff --git a/macros/generic/occam/PlainEx2/harvtst.doc b/macros/generic/occam/PlainEx2/harvtst.doc
new file mode 100644
index 0000000000..db5134f2f3
--- /dev/null
+++ b/macros/generic/occam/PlainEx2/harvtst.doc
@@ -0,0 +1,170 @@
+
+
+ %%%%% harvtst.doc
+
+
+HARVTST.DIR CONTENTS AND DOCUMENTATION:
+
+harvmac.occ 20K
+harvmac.tex 20K
+harvtst.doc 2K
+W.sty 6K
+W.tex 68K
+witten94.tex 68K
+
+Other tools needed (from Occam)
+
+auditor.tex 18K
+defstrip
+occam.spc
+
+This is a sample application of the Occam utility.
+
+A) INPUT files were
+ --- harvmac.tex Paul Ginsparg's preprint macro package based on
+Plain TeX and designed for physics preprints.
+ --- witten.tex a preprint of Edward Witten, posted in November 1994
+on Ginsparg's preprint server tp://xxx.lanl.gov.
+
+B) OUTPUT files were:
+ --- W.sty essentially a subset of those macros in harvmac.tex
+that are needed in witten.tex
+ --- W.tex essentially witten.tex with unused macros eliminated
+from the header; there is no change at all in the body of the article.
+
+C) TOOL files (from the Occam distribution) were:
+--- auditor.tex TeX utility
+--- "defstrip" TeX utility currently a Mac QUEDM macro package.
+--- harvmac.occ a version of harvmac.tex in Occam format as
+described in occam.spc and below. This file would normally be
+supplied by the macro file's author, since it should be carefully
+prepared, and can serve all users of harvmac.tex
+
+ The aim is to to get (C) from (A) + (B). What good is that?
+--- If a publisher wants to use macros from harvmac.tex
+but is not familiar with that package, then use of W.sty
+will save him time.
+--- W.sty is so simple and small (10% of the whole or less than
+average sales tax in the 1990's) that it can be archived with
+W.tex; then future changes to harvmac.tex will not cause
+disruption.
+
+ Here is the transformation recipe.
+
+ --- Make a copy WW.sty of harvmac.occ and append the macro
+header of witten94.tex to it. Save witten94.tex as W.tex after
+replacing its header by
+
+ ------------
+
+ %Paper: ftp://xxx.lanl.gov//hep-th/9411102
+ %From: WITTEN@sns.ias.edu
+ %Date: 14 Nov 1994 22:09:04 -0400 (EDT)
+
+ \input WW.sty %% unsimplified style file
+ %\input W.sty %% simplified style file
+ %% input one of two
+
+ \Title{hep-th/9411102, IASSNS-HEP-94-96}
+ etc.
+
+ ------------------------
+
+ --- append to WW.sty format, the header macros of
+witten94.tex at the end, formatting as as occam.spc
+indicates, namely as follows:
+
+ ------------------------
+
+\Def\underarrow#1{\vbox{\ialign{##\crcr$\hfil\displaystyle
+ {#1}\hfil$\crcr\noalign{\kern1pt
+ \nointerlineskip}$\longrightarrow$\crcr}}}%_
+ % use of underarrow
+ %A~~~\underarrow{a}~~~B
+ \newcount\figno \figno=0
+
+ \Def\fig#1#2#3{%
+ \par\begingroup\parindent=0pt\leftskip=1cm
+ \rightskip=1cm\parindent=0pt
+ \baselineskip=11pt
+ \global\advance\figno by 1
+ \midinsert
+ \epsfxsize=#3
+ \centerline{\epsfbox{#2}}%
+ \vskip 12pt
+ {\bf Fig. \the\figno:} #1\par
+ \endinsert\endgroup\par
+ }%_
+
+ \Def\figlabel#1{\xdef#1{\the\figno}}%_
+ \Def\encadremath#1{\vbox{\hrule\hbox{\vrule\kern8pt\vbox{\kern8pt
+ \hbox{$\displaystyle #1$}\kern8pt}
+ \kern8pt\vrule}\hrule}}%_
+
+ \overfullrule=0pt
+
+ %macros
+ %
+ \Def\tilde{\widetilde}%_
+ \Def\bar{\overline}%_
+ \Def\np#1#2#3{Nucl. Phys. {\bf B#1} (#2) #3}%_
+ \Def\pl#1#2#3{Phys. Lett. {\bf #1B} (#2) #3}%_
+ \Def\prl#1#2#3{Phys. Rev. Lett.{\bf #1} (#2) #3}%_
+ \Def\physrev#1#2#3{Phys. Rev. {\bf D#1} (#2) #3}%_
+ \Def\ap#1#2#3{Ann. Phys. {\bf #1} (#2) #3}%_
+ \Def\prep#1#2#3{Phys. Rep. {\bf #1} (#2) #3}%_
+ \Def\rmp#1#2#3{Rev. Mod. Phys. {\bf #1} (#2) #3}%_
+ \Def\cmp#1#2#3{Comm. Math. Phys. {\bf #1} (#2) #3}%_
+ \Def\mpl#1#2#3{Mod. Phys. Lett. {\bf #1} (#2) #3}%_
+ \Def\Lam#1{\Lambda_{#1}}%_
+ \Def\pf{{\rm Pf ~}}%_
+ \Font\zfont = cmss10 %scaled \magstep1 %_
+ \Font\litfont = cmr6 %_
+ \Font\fvfont=cmr5 %_
+ \Def\bigone{\hbox{1\kern -.23em {\rm l}}}%_
+ \Def\ZZ{\hbox{\zfont Z\kern-.4emZ}}%_
+ \Def\half{{\litfont {1 \over 2}}}%_
+ \Def\mx#1{m_{\hbox{\fvfont #1}}}%_
+ \Def\gx#1{g_{\hbox{\fvfont #1}}}%_
+ \Def\gG{{\cal G}}%_
+ \Def\lamlam#1{\langle S_{#1}\rangle}%_
+ \Def\CM{{\cal M}}%_
+ \Def\Re{{\rm Re ~}}%_
+ \Def\Im{{\rm Im ~}}%_
+ \Def\lfm#1{\medskip\noindent\item{#1}}%_
+
+ ------------------------
+
+Headers like this usually contain a high proportion unused macros.
+This example is no exception.
+
+ --- compose under Plain TeX the file W.tex. Note that the file
+auditor.tex is called to examine which macros of WW.sty
+are really used.
+
+ --- "defstrip" the file WW.sty in the presence of the resulting list
+of macros audit.lst. (The "defstrip" macros currently operate under
+QEDM; ultimately "defstrip" will be a TeX utility and TeX will replace
+QEDM.) The result is a simplified macro file; call it output1. Put
+output1 back through "defstrip" once to get output2. The second pass
+gains an extra 10% of compactness and perfect tidyness; it uses
+the file audit.lst as modified by the first pass; beware that
+audit.lst is changing slightly as some * become # but one can
+always get back to the original by changing all # to *. Save the final
+output as W.sty. In general, the number of passes needed is the number
+of stars on the final macro \ITERATIONCOUNTER in audit.lst.
+
+
+ --- change the header of W.tex to input W.sty rather than WW.sty:
+
+ %\input WW.sty
+ \input W.sty
+
+Then compose the file W.tex under Plain TeX, checking that the
+printed result is unchanged.
+
+ --- the (tiny!) shrunken form of the header material from
+witten94.tex can now be restored to the header of W.tex; it is indeed
+best to separate the Ginsparg macros from IAS macros.
+
+
diff --git a/macros/generic/occam/PlainEx2/witten94.tex b/macros/generic/occam/PlainEx2/witten94.tex
new file mode 100644
index 0000000000..dbfc175bcd
--- /dev/null
+++ b/macros/generic/occam/PlainEx2/witten94.tex
@@ -0,0 +1,1402 @@
+%Paper: ftp://xxx.lanl.gov//hep-th/9411102
+%From: WITTEN@sns.ias.edu
+%Date: 14 Nov 1994 22:09:04 -0400 (EDT)
+
+
+\input harvmac
+\def\underarrow#1{\vbox{\ialign{##\crcr$\hfil\displaystyle
+{#1}\hfil$\crcr\noalign{\kern1pt
+\nointerlineskip}$\longrightarrow$\crcr}}}
+% use of underarrow
+%A~~~\underarrow{a}~~~B
+\newcount\figno
+\figno=0
+\def\fig#1#2#3{
+\par\begingroup\parindent=0pt\leftskip=1cm\rightskip=1cm\parindent=0pt
+\baselineskip=11pt
+\global\advance\figno by 1
+\midinsert
+\epsfxsize=#3
+\centerline{\epsfbox{#2}}
+\vskip 12pt
+{\bf Fig. \the\figno:} #1\par
+\endinsert\endgroup\par
+}
+\def\figlabel#1{\xdef#1{\the\figno}}
+\def\encadremath#1{\vbox{\hrule\hbox{\vrule\kern8pt\vbox{\kern8pt
+\hbox{$\displaystyle #1$}\kern8pt}
+\kern8pt\vrule}\hrule}}
+
+\overfullrule=0pt
+
+%macros
+%
+\def\tilde{\widetilde}
+\def\bar{\overline}
+\def\np#1#2#3{Nucl. Phys. {\bf B#1} (#2) #3}
+\def\pl#1#2#3{Phys. Lett. {\bf #1B} (#2) #3}
+\def\prl#1#2#3{Phys. Rev. Lett.{\bf #1} (#2) #3}
+\def\physrev#1#2#3{Phys. Rev. {\bf D#1} (#2) #3}
+\def\ap#1#2#3{Ann. Phys. {\bf #1} (#2) #3}
+\def\prep#1#2#3{Phys. Rep. {\bf #1} (#2) #3}
+\def\rmp#1#2#3{Rev. Mod. Phys. {\bf #1} (#2) #3}
+\def\cmp#1#2#3{Comm. Math. Phys. {\bf #1} (#2) #3}
+\def\mpl#1#2#3{Mod. Phys. Lett. {\bf #1} (#2) #3}
+%
+\def\Lam#1{\Lambda_{#1}}
+\def\pf{{\rm Pf ~}}
+\font\zfont = cmss10 %scaled \magstep1
+\font\litfont = cmr6
+\font\fvfont=cmr5
+\def\bigone{\hbox{1\kern -.23em {\rm l}}}
+\def\ZZ{\hbox{\zfont Z\kern-.4emZ}}
+\def\half{{\litfont {1 \over 2}}}
+\def\mx#1{m_{\hbox{\fvfont #1}}}
+\def\gx#1{g_{\hbox{\fvfont #1}}}
+\def\gG{{\cal G}}
+\def\lamlam#1{\langle S_{#1}\rangle}
+\def\CM{{\cal M}}
+\def\Re{{\rm Re ~}}
+\def\Im{{\rm Im ~}}
+\def\lfm#1{\medskip\noindent\item{#1}}
+
+\Title{hep-th/9411102, IASSNS-HEP-94-96}
+{\vbox{\centerline{MONOPOLES AND FOUR-MANIFOLDS}}}
+\smallskip
+\centerline{Edward Witten}
+\smallskip
+\centerline{\it School of Natural Sciences, Institute for Advanced Study}
+\centerline{\it Olden Lane, Princeton, NJ 08540, USA}\bigskip
+\baselineskip 18pt
+
+\medskip
+
+\noindent
+%write abstract here
+Recent developments in the understanding of $N=2$ supersymmetric Yang-Mills
+theory in four dimensions suggest a new point of view about Donaldson
+theory of four manifolds: instead of defining four-manifold invariants
+by counting $SU(2)$ instantons, one can define equivalent four-manifold
+invariants by counting solutions of a non-linear equation with an
+abelian gauge group. This is a ``dual'' equation in which the gauge
+group is the dual of the maximal torus of $SU(2)$.
+The new viewpoint suggests many new results about
+the Donaldson invariants.
+\Date{November, 1994}
+%text of paper
+
+\newsec{Introduction}
+\nref\witten{E. Witten, ``Topological Quantum Field Theory,'' Commun. Math.
+Phys. {\bf 117} (1988) 353.}
+For some years now it has been known that Donaldson theory is equivalent
+to a quantum field theory, in fact, a twisted version of $N=2$ supersymmetric
+Yang-Mills theory \witten.
+The question therefore arises of whether this viewpoint
+is actually useful for computing Donaldson invariants \ref\doninv{S. Donaldson,
+``Polynomial Invariants For Smooth Four-Manifolds,'' Topology, {\bf 29}
+(1990) 257.} or understanding
+their properties.
+
+\nref\floer{A. Floer, ``An Instanton Invariant For 3-Manifolds,''
+Commun. Math. Phys. {\bf 118} 215.}
+One standard physical technique is to cut and sum over
+physical states. In the context of Donaldson theory, such methods
+have been extensively developed by mathematicians,
+starting with the work of Floer \floer.
+So far, despite substantial efforts,
+the physical reformulation has not given any essentially new insight
+about these methods.
+
+Another approach to using physics to illuminate Donaldson theory
+starts with the fact that the $N=2$ gauge theory is
+asymptotically free; therefore, it is weakly coupled in the ultraviolet
+and strongly coupled in the infrared. Since the Donaldson invariants
+-- that is, the correlation functions of the twisted theory -- are metric
+independent, they can be computed in the ultraviolet or the infrared,
+as one wishes. Indeed, the weak coupling in the
+ultraviolet is used to show that the quantum field theory correlation
+functions do coincide with the Donaldson invariants.
+
+\nref\newwitten{E. Witten, ``Supersymmetric Yang-Mills Theory On A
+Four-Manifold,'' J. Math. Phys. {\bf 35} (1994) 5101.}
+If one could
+understand the infrared behavior of the $N=2$ theory, one might get
+a quite different description and, perhaps, a quite different way to
+compute the Donaldson invariants. Until recently, this line of thought was
+rather hypothetical for general four-manifolds
+since the infrared behavior of $N=2$ super Yang-Mills
+theory in the strong coupling region was unknown.
+Previous work along these lines was therefore limited to K\"ahler manifolds,
+where one can reduce the discussion to the $N=1$ theory, whose infrared
+behavior was known. This led to an almost complete determination \newwitten\
+of the Donaldson invariants of K\"ahler manifolds with $H^{2,0}\not= 0$.
+
+\nref\sw{N. Seiberg and E. Witten, ``Electric-Magnetic Duality,
+Monopole Condensation, And Confinement In $N=2$ Supersymmetric
+Yang-Mills Theory,'' Nucl. Phys. {\bf B426} (1994) 19,
+``Monopoles, Duality, And Chiral Symmetry
+Breaking In $N=2$ Supersymmetric QCD,'' hep-th/9408099,
+to appear in Nucl. Phys. B.}
+\nref\seiberg{N. Seiberg, ``The Power Of Holomorphy -- Exact Results
+In $4d$ SUSY Field Theories,'' hep-th/9408013.}
+The purpose of the present paper is to exploit recent work by Seiberg
+and the author
+\sw\ in which the infrared behavior of the $N=2$ theory was
+determined using methods somewhat akin to methods that have shed light
+on various $N=1$ theories (for a survey see \seiberg).
+The answer turned out to be quite surprising: the
+infrared limit of the $N=2$ theory in the ``strongly coupled'' region
+of field space is equivalent to a weakly coupled theory of abelian
+gauge fields coupled to ``monopoles.'' The monopole theory is
+dual to the original theory in the sense that, for instance, the
+gauge group is the dual of the maximal torus of the original gauge group.
+
+
+\nref\km{P. Kronheimer and T. Mrowka, ``Recurrence Relations And
+Asymptotics For Four-Manifold Invariants,'' Bull. Am. Math. Soc. {\bf 30}
+(1994) 215, ``Embedded Surfaces And The Structure Of Donaldson's
+Polynomial Invariants,'' preprint (1994).}
+\nref\arg{P. Argyres and A. Faraggi, ``The Vacuum Structure And Spectrum
+Of $N=2$ Supersymmetric $SU(N)$ Gauge Theory,'' hep-th/9411057.}
+\nref\yank{A. Klemm, W. Lerche, S. Yankielowicz, and S. Theisen,
+``Simple Singularities and $N=2$ Supersymmetric Yang-Mills Theory,''
+hep-th/9411048.}
+Since the dual theory is weakly coupled in the infrared,
+everything is computable in that region, and
+in particular for gauge group $SU(2)$,
+one does get an alternative formulation of the usual Donaldson
+invariants. Instead of computing the Donaldson invariants by counting
+$SU(2)$ instanton solutions, one can obtain the same invariants
+by counting the solutions of the dual equations, which involve
+$U(1)$ gauge fields and monopoles.\foot{In this paper, we only consider
+Donaldson theory with
+gauge group $SU(2)$ or $SO(3)$, but an analogous dual description
+by abelian gauge fields and monopoles will hold for
+any compact Lie group, the gauge group of the dual theory being always
+the dual of the maximal torus of the original gauge group. For example,
+most of the results needed to write the precise monopole equations for
+$SU(N)$ have been obtained recently \refs{\arg,\yank}.}
+
+This formulation makes manifest various properties of the Donaldson
+invariants. For instance, one can get new proofs of some of the
+classic results of Donaldson theory; one gets
+a new description of the basic classes of Kronheimer and Mrowka \km, and some
+new results about them; one gets a new understanding
+of the ``simple type'' condition for four-manifolds;
+one finds new types of vanishing theorems
+that severely limit the behavior of Donaldson theory on manifolds
+that admit a metric of positive scalar curvature;
+and one gets a complete determination of the Donaldson invariants
+of K\"ahler manifolds with $H^{2,0}\not= 0$, eliminating the
+assumptions made in \newwitten\ about the canonical divisor.
+
+It should be possible to justify
+directly the claims sketched in this paper about the consequences
+of the monopole equations even if the relation to Donaldson theory
+is difficult to prove. The reformulation may make the problems
+look quite different
+as the gauge group is abelian and the most relevant moduli spaces
+are zero dimensional.
+{}From a physical point of view the dual description via monopoles and abelian
+gauge fields should be simpler than the microscopic $SU(2)$ description
+since in the renormalization group sense
+it arises by ``integrating out the irrelevant degrees of freedom.''
+
+
+\nref\vw{C. Vafa and E. Witten, ``A Strong Coupling Test Of $S$-Duality,''
+hep-th/9408074, to appear in Nucl. Phys. B.}
+\nref\om{C. Montonen and D. Olive, Phys. Lett. {\bf B72} (1977) 117;
+P. Goddard, J. Nuyts, and D. Olive, Nucl. Phys. {\bf B125} (1977) 1.}
+\nref\sen{A. Sen, ``Strong-Weak Coupling Duality In Four Dimensional
+String Theory,'' hep-th/9402002.}
+The monopole equations are close cousins of equations studied in section two
+of \vw; the reason for the analogy is that in each case one is studying
+$N=2$ theories of hypermultiplets coupled to vector multiplets.
+The investigation in \vw\ dealt with microscopic Montonen-Olive duality
+\refs{\om,\sen}, while the duality in Donaldson theory \sw\ is a sort of
+phenomenological analog of this.
+
+
+The monopole equations, definition of four-manifold invariants,
+and relation to Donaldson theory are stated
+in section two of this paper. Vanishing theorems are used in section three
+to deduce some basic properties. Invariants
+of K\"ahler
+manifolds are computed in section four.
+A very brief sketch of the origin in physics
+is in section five. A fuller account of the contents of section five
+will appear elsewhere \ref\nsw{N. Seiberg and E. Witten, to appear.}.
+
+
+
+
+\newsec{The Monopole Equations}
+
+Let $X$ be an oriented, closed four-manifold on which we pick a Riemannian
+structure with metric tensor $g$.
+$\Lambda^pT^*X$, or simply $\Lambda^p$,
+will denote the bundle of real-valued $p$-forms,
+and $\Lambda^{2,\pm}$ will be the sub-bundle of $\Lambda^2$ consisting
+of self-dual or anti-self-dual forms.
+
+The monopole equations relevant to $SU(2)$ or $SO(3)$
+Donaldson theory can be described
+as follows. If $w_2(X)=0$,
+then $X$ is a spin manifold and one can pick
+positive and negative spin bundles
+$S^+$ and $S^-$, of rank two. (If there is more than one spin structure,
+the choice of a spin structure will not matter as we will ultimately
+sum over twistings by line bundles.) In that case, introduce a complex line
+bundle $L$; the data in the monopole equation will be a connection $A$
+on $L$ and a section $M$ of $S^+\otimes L$. The curvature two-form
+of $A$ will
+be called $F$ or $F(A)$; its self-dual and anti-self-dual
+projections will be called $F^+$ and $F^-$.
+
+If $X$ is not spin, the $S^{\pm}$ do not exist,
+but their projectivizations ${\bf P}S^{\pm}$ do exist (as bundles with fiber
+isomorphic to ${\bf CP}^1$). A ${\rm Spin}_c$ structure (which exists
+on any oriented four-manifold \ref\hirz{F. Hirzebruch and H. Hopf,
+``Felder von Flachenelementen in 4-dimensionalen Mannigfaltigkeiten,''
+Math. Annalen {\bf 136} (1958) 156.})
+can be described as a choice of
+a rank two complex vector bundle, which we write as $S^+\otimes L$,
+whose projectivization is isomorphic to ${\bf P}S^+$. In this situation, $L$
+does not exist as a line bundle, but $L^2$ does\foot{One might
+be tempted to call this bundle $L$ and write the ${\rm Spin}_c$
+bundle as $S^+\otimes L^{1/2}$; that amounts to assigning magnetic
+charge $1/2$ to the monopole and seems unnatural physically.};
+the motivation for
+writing the ${\rm Spin}_c$ bundle as $S^+\otimes L$ is that the tensor
+powers of this bundle obey isomorphisms suggested by the notation.
+For instance, $(S^+\otimes L)^{\otimes 2}\cong L^2\otimes(\Lambda^0\oplus
+\Lambda^{2,+})$.
+The data of the monopole equation
+are now a section $M$ of $S^+\otimes L$ and a connection on $S^+\otimes L$
+that projects to the Riemannian connection on ${\bf P}S^+$. The symbol
+$F(A)$ will now denote $1/2$ the trace of the curvature form of $S^+\otimes L$.
+
+Since $L^2$ is an ordinary line bundle, one has an integral
+cohomology class
+$x=-c_1(L^2)\in H^2(X,{\bf Z})$. (The minus sign makes some
+later formulas come out in a standard form.) Note that $x$ reduces modulo two
+to $w_2(X)$; in particular, if $w_2(X)=0$, then $L$ exists as a line
+bundle and $x=-2c_1(L)$.
+
+To write the monopole equations, recall that $S^+$ is symplectic or
+pseudo-real, so that
+if $M$ is a section of $S^+\otimes L$, then the complex conjugate $\bar M$
+is a section of $S^+\otimes L^{-1}$. The product $M\otimes \bar M$
+would naturally lie in $(S^+\otimes L)\otimes (S^+\otimes L^{-1})\cong
+\Lambda^0\oplus\Lambda^{2,+}$.
+$F^{+}$ also takes values in $\Lambda^{2,+}$ making it possible to
+write the following equations.
+Introduce Clifford matrices $\Gamma_i$
+(with anticommutators $\{\Gamma_i,\Gamma_j\}=2g_{ij}$), and
+set $\Gamma_{ij}={1\over 2}[\Gamma_i,\Gamma_j]$. Then
+the equations are\foot{
+To physicists the connection form $A$ on a unitary line bundle is
+real; the covariant derivative is $d_A=d+iA$ and the curvature is
+$F=dA$ or in components $F_{ij}=\partial_iA_j-\partial_jA_i$.}
+\eqn\noneq{\eqalign{F^+_{ij}&=-{i\over 2}\bar M\Gamma_{ij}M \cr
+ \sum_i\Gamma^iD_iM & = 0.\cr}}
+In the second equation, $\sum_i\Gamma^iD_i$ is the Dirac operator
+$D$ that maps sections of $S^+\otimes L$ to sections of $S^-\otimes L$.
+We will sometimes abbreviate the first as $F^+=(M\bar M)^+$.
+Alternatively,
+if positive spinor indices are written $A,B,C$, and
+negative spinor indices as $A',B',C'$,
+\foot{Spinor indices are raised and lowered using the invariant
+tensor in $\Lambda^2 S^+$. In components, if $M^A=(M^1,M^2)$,
+then $M_A= (-M_2,M_1)$. One uses the same operation in interpreting
+$\bar M$ as a section of $S^+\otimes L$, so $\bar M^A=(\bar M^2,-\bar M^1)$.
+Also $F_{AB}={1\over 4}F_{ij}\Gamma^{ij}_{AB}$.}
+the equations can be written
+\eqn\indeq{\eqalign{F_{AB}& = {i\over 2}\left(M_A\bar M_B+M_B\bar M_A\right)\cr
+ D_{AA'}M^A & = 0.\cr}}
+
+As a first step in understanding these equations, let us work out
+the virtual dimension of the moduli space ${\cal M}$
+of solutions of the
+equations up to gauge transformation.
+The linearization of the monopole equations fits into
+an elliptic complex
+\eqn\pindeq{0\to \Lambda^0\underarrow{s}\Lambda^1
+\oplus (S^+\otimes L)\underarrow{t}\Lambda^{2,+}
+\oplus (S^-\otimes L) \to 0.}
+Here $t$ is the linearization of the monopole equations, and $s$
+is the map from zero forms to deformations in $A,M$ given by the infinitesimal
+action of the gauge group. Since we wish to work with real operators
+and determine the real dimension
+of ${\cal M}$, we temporarily think of $S^\pm\otimes L$ as
+real vector bundles (of rank four).
+Then an elliptic operator
+\eqn\pxxx{T:\Lambda^1\oplus(S^+\otimes L)\to \Lambda^0\oplus \Lambda^{2,+}
+\oplus (S^-\otimes L)}
+is defined by $T=s^*\oplus t$.
+The virtual dimension of the moduli space is given by the index of $T$.
+By dropping terms in $T$ of order zero,
+$T$ can be deformed to the direct sum of the operator $d+d^*$
+\foot{What is meant here is of course a projection of the $d+d^*$ operator
+to self-dual forms.}
+from $\Lambda^1$ to $\Lambda^0\oplus \Lambda^{2,+}$ and the Dirac
+operator from $S^+\otimes L$ to $S^-\otimes L$.
+The index of $T$ is
+the index of $d+d^*$ plus twice what is usually called the index of the Dirac
+operator; the factor of two comes from looking at $S^{\pm}\otimes L$
+as real bundles of twice the dimension.
+Let $\chi$ and $\sigma$ be the Euler
+characteristic and signature of $X$. Then the index of $d+d^*$ is
+$-(\chi+\sigma)/2$, while twice the Dirac index is $-\sigma/4+c_1(L)^2$.
+The virtual dimension of the moduli space is the sum of these or
+\eqn\hurf{W= -{2\chi+3\sigma\over 4} +c_1(L)^2.}
+
+When this number is negative, there are generically no solutions of
+the monopole equations. When $W=0$, that is, when $x=-c_1(L^2)=-2c_1(L)$ obeys
+\eqn\burf{x^2=2\chi+3\sigma,}
+then the virtual dimension is zero and the moduli space generically
+consists of a finite set of points $P_{i,x}$, $i=1\dots t_x$.
+With each such point, one can associate
+a sign $\epsilon_{i,x}=\pm 1$ -- the sign of the determinant of $T$ as we
+discuss momentarily.
+Once this is done, define for each $x$ obeying \burf\ an integer $n_x$ by
+\eqn\gurofo{n_x=\sum_i\epsilon_{i,x}.}
+We will see later that
+$n_x=0$ -- indeed, the moduli space is empty -- for all but finitely many $x$.
+Under certain conditions that we will discuss in a moment, the $n_x$
+are topological invariants.
+
+Note that $W=0$ if and only if the index of the Dirac operator
+is
+\eqn\inxxon{\Delta={\chi+\sigma\over 4}.}
+In particular, $\Delta$ must be an integer to have non-trivial $n_x$.
+Similarly, $\Delta$ must be integral for the Donaldson invariants
+to be non-trivial (otherwise $SU(2)$ instanton moduli space is odd
+dimensional).
+
+
+For the sign of the determinant of $T$ to make sense one must trivialize
+the determinant line of $T$. This can be done by deforming $T$ as above
+to the direct sum of $d+d^*$ and the Dirac operator. If the Dirac operator,
+which naturally has a non-trivial {\it complex} determinant line, is regarded
+as a real operator, then its determinant line is naturally trivial -- as a
+complex line has a natural orientation. The $d+d^*$ operator is
+independent of $A$ and $M$ (as the gauge group is abelian), and its
+deterinant line is trivialized once and for all by picking an orientation
+of $H^1(X,{\bf R})\oplus H^{2,+}(X,{\bf R})$. Note that this is the
+same data needed by Donaldson
+\ref\donor{S. Donaldson, ``The Orientation Of Yang-Mills Moduli
+Spaces And Four-Manifold Topology,'' J. Diff. Geom. {\bf 26} (1987) 397.}
+to orient instanton moduli spaces for $SU(2)$;
+this is an aspect of the relation between the two theories.
+
+If one replaces $L$ by $L^{-1}$, $A$ by $-A$, and $M$ by $\bar M$, the
+monopole equations are invariant, but the trivialization of the
+determinant line is multiplied by $(-1)^\delta$ with $\delta$ the Dirac
+index. Hence the invariants for $L$ and $L^{-1}$ are related by
+\eqn\pixxx{n_{-x}=(-1)^\Delta n_x.}
+
+For $W<0$, the moduli space is generically empty. For $W>0$ one can
+try, as in Donaldson theory, to define topological invariants that involve
+integration over the moduli space. Donaldson theory does not detect those
+invariants at least in known situations.
+We will see in section three that even when $W>0$, the
+moduli space is empty for almost all $x$.
+
+
+\bigskip
+\noindent{\it Topological Invariance}
+
+In general, the number of solutions
+of a system of equations
+weighted by the sign of the determinant of the operator analogous to $T$
+ is always a topological invariant if a suitable compactness
+holds.
+If as in the case at hand one has a gauge invariant system of equations, and
+one wishes to count gauge orbits of solutions up to gauge transformations,
+then one requires (i) compactness; and (ii) free action
+of the gauge group on the space of solutions.
+
+
+Compactness fails if a field or its derivatives can go to
+infinity.
+The Weitzenbock formula used in section three to discuss vanishing
+theorems indicates that these phenomena
+do not occur for the monopole equations.
+To explain the contrast with Donaldson theory, note that
+for $SU(2)$ instantons
+compactness fails precisely
+\ref\uhl{K. Uhlenbeck, ``Removable Singularities In Yang-Mills Fields,''
+Commun. Math. Phys. {\bf 83} (1982) 11.}
+because an instanton can shrink to zero size. This is
+possible because (i) the equations are conformally invariant, (ii) they
+have non-trivial solutions on a flat ${\bf R}^4$, and (iii) embedding
+such a solution, scaled to very small size,
+on any four-manifold gives a highly localized approximate
+solution of the instanton equations (which can sometimes
+\ref\taubes{C. H. Taubes, ``Self-Dual Yang-Mills Connections Over
+Non-Self-Dual 4-Manifolds,'' J. Diff. Geom. {\bf 19} (1982) 517.}
+be perturbed to
+an exact solution). The monopole equations by contrast
+are scale invariant but
+(as follows immediately from the Weitzenbock formula) they have
+no non-constant $L^2$ solutions on flat ${\bf R}^4$ (or after dimensional
+reduction on flat ${\bf R}^n$ with $1\leq n \leq 3$).
+So there is no analog for the monopole equations of the phenomenon
+where an instanton shrinks to zero size.
+
+On the other hand, an obstruction does arise, just as in Donaldson
+theory (in what follows we imitate some arguments in
+\ref\dono{S. Donaldson, ``Irrationality And The $h$-Cobordism
+Conjecture,'' J. Diff. Geom. {\bf 26} (1987) 141.})
+from the question of whether the gauge group acts freely on the
+space of solutions of the monopole equations. The only way for the gauge
+group to fail to act freely is that there might be a solution with $M=0$,
+in which case a constant gauge transformation acts trivially.
+A solution with $M=0$ necessarily has $F^+=0$, that is, it is an abelian
+instanton.
+
+Since $F/2\pi$ represents the first Chern class of the line bundle $L$,
+it is integral; in particular if $F^+=0$ then $F/2\pi$ lies in the intersection
+of the integral lattice in $H^2(X,{\bf R})$ with the anti-self-dual subspace
+$H^{2,-}(X,{\bf R})$.
+As long as $b_2^+\geq 1$, so that the self-dual part of $H^2(X,{\bf R})$ is
+non-empty, the intersection of the anti-self-dual part and the integral
+lattice generically consists only of the zero vector.
+ In this case,
+for a generic metric on $X$, there are no abelian instantons (except for
+$x=0$, which we momentarily exclude) and $n_x $ is well-defined.
+
+
+To show that the $n_x$ are topological invariants, one must further show
+that any two generic metrics on $X$ can be joined by a path along which
+there is never an abelian instanton. As in Donaldson theory, this can
+fail if $b_2^+=1$. In that case, the self-dual part
+of $H^2(X,{\bf R})$ is one dimensional, and in a generic
+one parameter family of metrics on $X$, one may meet a metric for
+which there is an abelian instanton. When this occurs, the $n_x$ can jump.
+Let us analyze how this happens, assuming for simplicity that $b_1=0$.
+Given $b_1=0$ and
+$b_2{}^+=1$, one has $W=0$ precisely if the index of the Dirac
+equation is 1. Therefore, there is generically a single solution $M_0$
+of the Dirac equation $DM=0$.
+
+The equation $F^+(A)=0$ cannot be obeyed for a generic metric on $X$,
+but we want to look at the behavior near a special metric for which it does
+have a solution.
+ Consider a one parameter family of metrics parametrized
+by a real parameter $\epsilon$, such that at $\epsilon=0$ the
+self-dual subspace in $H^2(X,{\bf R})$ crosses a ``wall''
+and a solution $A_0$ of
+$F^+(A)=0$ appears. Hence for $\epsilon=0$, we can solve the monopole
+equations with $A=A_0, \,M=0$. Let us see what happens to this solution
+when $\epsilon $ is very small but non-zero. We set $M=mM_0$, with $m$
+a complex number, to obey $DM=0$, and we write $A=A_0+\epsilon \delta A$.
+The equation $F^+(A)-(M\bar M)^+=0$ becomes
+\eqn\nurk{F^+(A_0)+(d\delta A)^+-|m|^2 (M_0\bar M_0)^+=0.}
+As the cokernel of $A\to F^+(A)$
+is one dimensional, $\delta A$ can be chosen
+to project the left hand side of equation \nurk\ into a one dimensional
+subspace. (As $b_1=0$, this can be done in a unique way up to a gauge
+transformation.)
+The remaining equation looks near $\epsilon=0$ like
+\eqn\modlik{c \epsilon - \,m\bar m=0}
+with $c$ a constant.
+The $\epsilon$ term on the left comes from the fact that $F^+(A_0)$ is
+proportional to $\epsilon$.
+
+Now we can see what happens for $\epsilon\not= 0$ to the solution that
+at $\epsilon=0$ has $A=A_0$, $M=M_0$.
+Depending on the sign of $c$,
+there is a solution for $m$, uniquely
+determined up to gauge transformation, for $\epsilon>0$ and no solution
+for $\epsilon<0$, or vice-versa. Therefore $n_x$ jumps by $\pm 1$, depending
+on the sign of $c$,
+in passing through $\epsilon=0$.
+To compare this precisely to the similar behavior of Donaldson
+theory, one would also need to understand the
+role of the $u$ plane, discussed in section five.
+
+The trivial abelian instanton with $x=0$ is an exception to the
+above discussion,
+since it cannot be removed by perturbing the metric. To define $n_0$,
+perturb the equation $F_{AB}={i\over 2}(M_A\bar M_B+M_B\bar M_A)$
+to
+\eqn\hinnoc{F_{AB}={i\over 2}(M_A\bar M_B+M_B\bar M_A)-p_{AB},}
+with $p$ a self-dual
+harmonic two-form; with this perturbation, the gauge group acts
+freely on the solution space.
+Then define $n_0$ as the number of gauge orbits of solutions of the
+perturbed equations
+weighted by sign in the usual way. This is invariant under continuous
+deformations of $p$ for $p\not=0$;
+as long as $b_2^+>1$, so that
+the space of possible $p$'s is connected, the integer $n_0$ defined
+this way is a topological invariant.
+
+The perturbation just
+pointed out will be used later in the case that $p$ is the real part
+of a holomorphic two-form to compute the invariants of K\"ahler manifolds
+with $b_2^+>1$. It probably has other applications; for instance, the
+case that $p$ is a symplectic form is of interest.
+
+\bigskip
+\noindent{\it Relation To Donaldson Theory}
+
+With an appropriate restriction on $b_2^+$, the $n_x$ have
+(by an argument sketched in section five) a relation to the Donaldson
+invariants that will now be stated.
+
+Let us recall that in $SU(2)$ Donaldson theory, one wishes to compute
+the integrals or expectation values of certain cohomology classes
+or quantum field operators: for every Riemann surface
+(or more generally every
+two-dimensional homology cycle) $\Sigma$ in $X$, one has an operator
+$I(\Sigma)$ of dimension (or $R$ charge or
+ghost number) two; there is one additional
+operator ${\cal O}$, of dimension four.
+For every value of the instanton number, one computes the expectation value
+of a suitable product of these operators by integration over instanton
+moduli space using a recipe due to Donaldson, or by evaluating a suitable
+quantum field theory correlation function as in \witten.
+It is natural to organize this data in the form of a generating function
+\eqn\jurn{\left\langle
+\exp\left(\sum_a\alpha_aI(\Sigma_a)+\lambda {\cal O}\right)
+\right\rangle,}
+summed over instanton numbers; here
+the $\Sigma_a$ range over a basis of $H_2(X,{\bf R})$ and $\lambda,
+\,\alpha_a$ are complex numbers.
+
+Let $v= \sum_a\alpha_a[\Sigma_a]$,
+with $[\Sigma_a]$ the cohomology class that is Poincar\'e dual to $\Sigma_a$.
+So for instance $v^2=\sum_{a,b}\alpha_a\alpha_b\,\,\Sigma_a\cdot\Sigma_b$
+(here $\Sigma_a\cdot \Sigma_b$ is the intersection number of $\Sigma_a$ and
+$\Sigma_b$), and for any $x\in H^2(X,{\bf Z})$, $v\cdot x=\sum_a\alpha_a
+(\Sigma_a,x)$. Let as before $\Delta=(\chi+\sigma)/4$.
+
+A four-manifold is said to be of simple type if the generating function
+in \jurn\ is annihilated by $\partial^2/\partial\lambda^2-4$; all known
+simply-connected four-manifolds with $b_2^+>1$ have this property.
+The relation of the simple type condition to physics is discussed in
+section five.
+I claim that for manifolds of simple type
+\eqn\jimmo{\eqalign{\left
+\langle\exp\left(\sum_a\alpha_aI(\Sigma_a)+\lambda {\cal O}\right)
+\right\rangle = 2^{1+{1\over 4}(7\chi+11\sigma)}&\left(\exp\left(
+{v^2\over 2}+2\lambda\right)
+\sum_x
+n_x e^{v\cdot x}\right.\cr&\left.
+ +i^{\Delta} \exp\left(-{v^2\over 2}-2\lambda\right)\sum_xn_x
+e^{-iv\cdot x}\right).\cr}}
+That the expression is real follows from \pixxx.
+
+As sketched in section five, this formula is a sort of corollary of the
+analysis of $N=2$ supersymmetric Yang-Mills theory in \sw. Here I will
+just make a few remarks:
+
+(1) The structure in \jimmo\ agrees with the general form
+proved by Kronheimer and Mrowka \km.
+The classes $x\in H^2(X,{\bf Z})$ such that $n_x\not= 0$ are the basic
+classes in their terminology. From the properties by which $x$ and $n_x$
+were defined, we have that $x$ is congruent to $w_2(X)$ modulo 2 and
+that $x^2=2\chi+3\sigma$. The first assertion is a result of Kronheimer
+and Mrowka and the second was conjectured by them.
+
+
+
+(2) The prefactor $2^{1+{1\over 4}(7\chi+11\sigma)}$ has the following
+origin, as in \newwitten. One factor of two comes because, even though the
+center of $SU(2)$ acts trivially on the $SU(2)$ instanton moduli space,
+the Donaldson invariants are usually defined without dividing by two.
+The remaining factor of $2^{{1\over 4}(7\chi+11\sigma)}$ is a $c$-number
+renormalization factor that arises in comparing the microscopic $SU(2)$
+theory to the dual description with monopoles.
+(In \nsw\ a more general function of the form
+$e^{a(u)\chi+b(u)\sigma}$ that arises on the complex $u$ plane will be
+calculated.) Some coefficients in the formula such as the $7/4$ and $11/4$
+were fixed in \newwitten\ to agree with
+calculations of special cases of Donaldson invariants.
+
+
+(3) Most fundamentally, in the above formula, the first term, that is
+\eqn\kdn{\exp\left({v^2\over 2}+2\lambda\right)
+\sum_xn_x e^{v\cdot x},}
+is the contribution from one vacuum at $u=\Lambda^2$, and the second
+term,
+\eqn\hkn{i^\Delta \exp\left(-{v^2\over 2}-2\lambda\right)\sum_xn_x
+e^{-iv\cdot x},}
+is the contribution of a second vacuum at $u=-\Lambda^2$.
+These terms are analogous to the two terms in equation (2.66) of \newwitten.
+The factor of $i^\Delta$ arises, as there, because
+of a global anomaly in the discrete symmetry that exchanges the two
+vacua. This factor
+can be written in the form $e^{a\chi+b\sigma}$ and so means
+that the two vacua have different values
+of the renormalization mentioned in the last paragraph. The
+replacement of $e^{v\cdot x}$ in the first vacuum by $e^{-iv\cdot x}$
+in the second is likewise determined by the symmetries, as in \newwitten,
+and can be seen microscopically.
+For a general simple compact gauge group, the analogous sum will have
+$h$ terms ($h$ the dual Coxeter number) associated with $h$ vacua.
+
+(4) This formula generalizes as follows for the case that the
+gauge group is $SO(3)$ rather than $SU(2)$. Consider an
+$SO(3)$ bundle $E$ with, say, $ w_2(E)=z$.
+Define a generating functional of correlation functions
+summed over bundles with
+ all values of the first Pontryagin class
+but fixed $w_2$. Pick an integral lift of $w_2(X)$, and, using
+the fact that the $x$'s are congruent to $w_2(X)$ mod two, let $x'$ be
+such that $2x'=x+ w_2(X)$. Then $w_2(E)\not= 0$ modifies
+the derivation of \jimmo\ only by certain minus signs that
+appear in the duality transformation that relates the microscopic
+and macroscopic descriptions; the result is
+\eqn\himmo{
+\eqalign{
+\left\langle\exp\left(\sum_a\alpha_aI(\Sigma_a)+\lambda {\cal O}\right)
+\right\rangle_z
+=& 2^{1+{1\over 4}(7\chi+11\sigma)}\left(\exp({v^2\over 2}+2\lambda)
+\sum_x(-1)^{x'\cdot z}
+n_x e^{v\cdot x} \right.\cr &\left.
++i^{\Delta-z^2} \exp(-{v^2\over 2}-2\lambda)\sum_x
+(-1)^{x'\cdot z
+}n_xe^{-iv\cdot x}\right).\cr}}
+The replacement of $i^\Delta$ by $i^{\Delta-z^2}$ arises, as in equation
+(2.79) of \newwitten\ (where $w_2(E)$ is written as $x$),
+because the global anomaly has an extra term that depends on $z$.
+(Note that as $z$ is defined modulo two, $z^2$ is well-defined modulo four.)
+The factor of $(-1)^{x'\cdot z}$ was obtained in \km\ for manifolds
+of simple type and in \newwitten\ for K\"ahler manifolds.
+If the integral lift of $w_2(X)$ used in defining $x'$
+is shifted by $w_2(X)\to w_2(X)+2y$, then \himmo\
+is multiplied by $(-1)^{y\cdot z}$. The reason for this factor
+is that \himmo\ is reproducing the conventional Donaldson invariants,
+whose sign depends on the orientation of the instanton moduli spaces.
+A natural orientation \donor\ depends on an integral lift of $w_2(X)$
+and transforms as \himmo\ does if this lift is changed.
+
+(5) For K\"ahler manifolds with $b_2^+>1$, the quantities entering in \jimmo\
+will be completely computed in section four.
+We will find that, letting $\eta$ be a holomorphic two-form, the sum in \jimmo\
+can be interpreted as a sum over factorizations $\eta=\alpha\beta$
+with $\alpha$ and $\beta$ holomorphic sections of $K^{1/2}\otimes L^{\pm 1}$.
+Each such factorization contributes $\pm 1$ to $n_x$ with
+$x=-2c_1(L)$ provided $x^2=c_1(K)^2$; the contribution is $+1$ or $-1$
+according to a formula computed at the end of section four.
+
+\bigskip
+\noindent{\it Imitating Arguments From Donaldson Theory}
+
+Apart from relating Donaldson theory to the monopole equations,
+one can simply try to adapt familiar arguments about Donaldson theory
+to the monopole equations. We have already seen some examples.
+
+As another example, consider Donaldson's theorem \doninv\
+asserting that the Donaldson invariants vanish for a connected sum $X\# Y$
+of four-manifolds $X$ and $Y$ which each have $b_2{}^+>0$. The theorem
+is proved by considering a metric on $X\# Y$
+in which $X$ and $Y$ are joined by
+a long neck of the form ${\bf S}^3\times I$, with $I$ an interval in ${\bf R}$.
+Take the metric on the neck to be the product of the standard metric
+on ${\bf S}^3$ and a metric that assigns length $t$ to $I$, and consider
+the monopole equations on this space. For $t\to \infty$, any solution
+of the monopole equations will vanish in the neck because of the positive
+scalar curvature of ${\bf S}^3$ (this follows from the Weitzenbock
+formula of the next section).
+This lets one define a $U(1)$ action on the moduli space ${\cal M}$
+(analogous to the $SO(3)$ action used by Donaldson)
+by gauge transforming the solutions on $Y$ by a constant gauge transformation,
+leaving fixed the data on $X$. A fixed point of this $U(1)$ action
+would be a solution for which $M$ vanishes on $X$ or on $Y$. But
+as $X$ and $Y$ both have $b_2{}^+>0$, there is no such solution if
+generic metrics are used on the two sides. A zero dimensional moduli
+space with a free $U(1)$ action is empty, so the basic invariants would
+be zero for such connected sums. (A free $U(1)$ action also leads
+to vanishing of the higher invariants.)
+Since we will see in section four
+that the invariants are non-zero for K\"ahler manifolds
+(analogous to another basic result of Donaldson), one gets a proof
+directly from the monopole equations and independent of the equivalence to
+Donaldson theory that algebraic surfaces do not have connected
+sum decompositions with $b_2^+>0$ on both sides.
+
+If one considers instead a
+situation with $b_2^+$ positive for $X$ but zero for $Y$, there will
+be fixed points consisting of solutions with $M=0$ on $Y$, and one will get
+a formula expressing invariants of $X\# Y$ in terms
+of invariants of $X$ and elementary data concerning $Y$.
+
+\newsec{Vanishing Theorems}
+
+Some of the main properties of the monopole equations
+can be
+understood by means of vanishing theorems. The general strategy in
+deriving such vanishing theorems is quite standard, but as in section two
+of \vw, some unusual cancellations (required by the Lorentz invariance
+of the underlying untwisted theory) lead to unusually strong results.
+
+If we set $s=F^+-M\bar M$, $k=DM$,
+then a small calculation gives
+\eqn\highor{\eqalign{\int_Xd^4x\sqrt g\left({1\over 2}|s|^2+|k|^2\right)
+=\int_Xd^4x\sqrt g&\left({1\over 2}|F^+|^2+g^{ij}D_iM^AD_j\bar M_A \right.
+\cr & \left.+{1\over 2}|M|^4
++{1\over 4}R|M|^2\right) .\cr}} Here $g$ is the metric of $X$, $R$ the scalar
+curvature, and $d^4x\sqrt g$ the Riemannian measure.
+A salient feature here is that a term $F_{AB}M^A\bar M{}^B$, which appears
+in either $|s|^2 $ or $|k|^2$, cancels in the sum.
+This sharpens the implications of the formula, as we will see.
+One can also consider the effect here of the perturbation in \hinnoc;
+the sole effect of this is to replace
+${1\over 2}|M|^4$ in \highor\ by
+\eqn\bihor{\int_Xd^4x\sqrt g\left(
+F^+\wedge p+\sum_{A,B}\left|{1\over 2}(M_A\bar M_B+M_B\bar M_A)-p_{AB}\right|^2
+\right).}
+The second term is non-negative, and the first is simply the intersection
+pairing
+\eqn\juhor{2\pi c_1(L)\cdot [p].}
+
+An obvious inference from \highor\ is that if $X$ admits a metric
+whose scalar curvature is positive,
+then for such a metric any solution
+of the monopole equations must have $M=0$ and $F^+=0$. But
+if $b_2{}^+>0$, then after a generic small perturbation of the metric
+(which will preserve the fact that the scalar curvature is positive),
+there are no abelian solutions of $F^+=0$ except flat connections.
+Therefore,
+for such manifolds and metrics, a solution of the monopole equations
+is a flat connection with $M=0$. These too can be eliminated
+using the perturbation in \hinnoc.\foot{
+Flat connections can only arise if $c_1(L)$ is torsion; in that case,
+$c_1(L)\cdot [p]=0$. The vanishing argument
+therefore goes through, the modification in \highor\ being that which
+is indicated in \bihor.}
+Hence a four-manifold
+for which $b_2^+>0$ and $n_x\not= 0$ for some $x$
+does not admit a metric of
+positive scalar curvature.
+
+We can extend this to determine the possible four-manifolds $X$ with $b_2^+>0$,
+some $n_x\not= 0$, and a metric of {\it non-negative}
+scalar curvature.\foot{If $b_2^+=1$, the $n_x$ are not all topological
+invariants, and we interpret the hypothesis to mean that with at least
+one sign of the perturbation in \hinnoc, the $n_x$ are not all zero.}
+If $X$ obeys those conditions, then for any metric of $R\geq 0$,
+any basic class $x$ is in $H^{2,-}$ modulo torsion
+(so that $L$ admits a connection
+with $F^+=0$, enabling \highor\ to vanish);
+in particular if $x$ is not torsion then $x^2<0$.
+Now consider the effect of the perturbation \hinnoc. As $x\in H^{2,-}$,
+\juhor\ vanishes; hence if $R\geq 0$, $R$ must
+be zero, $M$
+must be covariantly constant and $(M\bar M)^+=p$ (from \bihor).
+For $ M$ covariantly constant,
+$(M\bar M)^+=p$ implies
+that $p$ is covariantly constant also; but for all $p\in H^{2,+}$
+to be covariantly constant implies that $X$ is K\"ahler with $b_2^+=1$
+or is hyper-K\"ahler. Hyper-K\"ahler metrics certainly have $R=0$,
+and there are examples of metrics with $R=0$
+on K\"ahler manifolds with $b_2^+=1$ \ref\lebrun{C. LeBrun, ``Scalar-Flat
+K\"ahler Metrics On Blown-Up Ruled Surfaces,'' J. Reine Angew
+Math. {\bf 420} (1991) 161.}.
+
+As an example,
+for a K\"ahler manifold with $b_2^+\geq 3$, the canonical divisor
+$K$ always arises as a basic class, as we will see in section four, so
+except in the hyper-K\"ahler case,
+such manifolds do not admit a metric of non-negative
+scalar curvature.
+
+Even if the scalar curvature is not positive, we can get an explicit
+bound from \highor\ showing that there are only finitely many basic classes.
+Since
+\eqn\gegor{\int_Xd^4x\sqrt g\left({1\over 2}|M|^4+{1\over 4}R|M|^2\right)
+\geq -{1\over 32}\int_Xd^4x\sqrt g R^2,}
+it follows from \highor, even if we throw away the term $|D_iM|^2$,
+that
+\eqn\egor{\int_Xd^4x\sqrt g |F^+|^2\leq {1\over 16}\int_Xd^4x\sqrt g R^2.}
+On the other hand, basic classes correspond to line bundles
+$L$ with $c_1(L)^2=(2\chi+3\sigma)/4$, or
+\eqn\negor{{1\over (2\pi)^2}\int d^4x\sqrt g\left(|F^+|^2-|F^-|^2\right)
+ ={2\chi+3\sigma\over 4}.}
+Therefore, for a basic class both $I^+=\int d^4x\sqrt g |F^+|^2$
+and $I^-=\int d^4x\sqrt g |F^-|^2$ are bounded. For a given metric,
+there are only finitely
+many isomorphism classes of line bundles
+admitting connections with given bounds on both $I^+$ and $I^-$, so
+the set of basic classes is finite. This is a result
+proved by Kronheimer and Mrowka with their definition of the basic classes.
+
+The basic classes correspond, as indicated in section three,
+to line bundles on which
+the moduli space of solutions of the monopole equations is of zero virtual
+dimension.
+We can analyze in a similar way components of the moduli space of positive
+dimension. Line bundles $L$ such that $c_1(L)^2<(2\chi+3\sigma)/4$ are not
+of much interest in that connection, since for such line bundles the
+moduli space has negative virtual dimension and is generically empty.
+But if $c_1(L)^2>(2\chi+3\sigma)/4$, then \negor\ is simply replaced by
+the stronger bound
+\eqn\unegor{{1\over (2\pi)^2}\int d^4x\sqrt g\left(|F^+|^2-|F^-|^2\right)
+ >{2\chi+3\sigma\over 4}.}
+The set of isomorphism classes of line bundles admitting a connection
+obeying this inequality as well as \egor\ is once again finite.
+So we conclude that for any given metric on $X$, the set of isomorphism
+classes of line bundles for which
+the moduli space is non-empty and of non-negative virtual dimension
+is finite; for a generic metric on $X$, there are only finitely many
+non-empty components of the moduli space.
+
+For further consequences of \highor, we turn to a basic case in the study of
+four-manifolds: the case that $X$ is K\"ahler.
+
+\newsec{Computation On K\"ahler Manifolds}
+
+If $X$ is K\"ahler and spin, then $S^+\otimes L$ has a decomposition
+$S^+\otimes L\cong (K^{1/2}\otimes L)\oplus (K^{-1/2}\otimes L)$,
+where $K$ is the canonical bundle and $K^{1/2}$ is a square root.
+If $X$ is K\"ahler but not spin, then $S^+\otimes L$, defined as before,
+has a similar decomposition where now $K^{1/2}$ and $L$ are not defined
+separately and $K^{1/2}\otimes L$ is characterized
+as a square root of the line bundle $K\otimes L^2$.
+
+We denote the components of $M$ in $K^{1/2}\otimes L$ and
+in $K^{-1/2}\otimes L$ as $\alpha$ and $-i\bar \beta$, respectively.
+The equation $F^+(A)=M\bar M$ can now be decomposed
+\eqn\juffy{\eqalign{F^{2,0} & = \alpha\beta \cr
+ F_\omega^{1,1} & =-{\omega\over 2}
+ \left(|\alpha|^2-|\beta|^2\right)\cr
+ F^{0,2} & =\bar\alpha\bar\beta.\cr}}
+Here $\omega$ is the K\"ahler form and $F_\omega^{1,1}$ is the $(1,1)$
+part of $F^+$.
+\highor\ can be rewritten
+\eqn\nohighor{\eqalign{\int_Xd^4x\sqrt g\left({1\over 2}|s|^2+|k|^2\right)
+=\int_Xd^4x\sqrt g & \left({1\over 2}|F^+|^2
++g^{ij}D_i\bar\alpha D_j\alpha+g^{ij}D_i\bar\beta
+D_j\beta\right.\cr & \left. +{1\over 2}(|\alpha|^2+|\beta|^2)^2
++{1\over 4}R(|\alpha|^2+|\beta|^2)\right) .\cr}}
+
+The right hand side of \nohighor\ is not manifestly non-negative (unless
+$R\geq 0$), but the fact that it is equal to the left hand side shows that
+it is non-negative and zero precisely for solutions of the monopole
+equations. Consider the operation
+\eqn\pohighor{\eqalign{A & \to A\cr
+ \alpha & \to \alpha \cr
+ \beta & \to -\beta.\cr}}
+This is not a symmetry of the monopole equations. But it is a symmetry
+of the right hand side of \nohighor. Therefore, given a zero of the right
+hand side of \nohighor\ -- that is, a solution of the monopole equations --
+the operation \pohighor\ gives another zero of the right hand side of
+\nohighor\ -- that is, another solution of the monopole equations.
+So, though not a symmetry of the monopole equations, the transformation
+\pohighor\ maps solutions of those equations to other solutions.
+
+Given that any solution of \juffy\ is mapped to another solution by
+\pohighor, it follows that such a solution has
+\eqn\tohighor{0=F^{2,0}=F^{0,2}=\alpha\beta=\bar\alpha\bar\beta.}
+Vanishing of $F^{0,2}$ means that the connection $A$ defines a holomorphic
+structure on $L$.
+The basic classes (which are first Chern classes of $L$'s that are such that
+\juffy\ has a solution) are therefore of type $(1,1)$ for any K\"ahler
+structure
+on $X$, a severe constraint.
+
+
+Vanishing of $\alpha\beta$ means that $\alpha=0$
+or $\beta=0$. If $\alpha=0$, then the Dirac equation for $M$ reduces
+to
+\eqn\jipp{\bar\partial_A \beta=0,}
+where $\bar\partial_A$ is the $\bar\partial $ operator on $L$. Similarly,
+if $\beta=0$, then the Dirac equation gives
+\eqn\ipp{\bar\partial_A\alpha= 0.}
+
+Knowing that either $\alpha$ or $\beta$ is zero, we can deduce which it is.
+Integrating the $(1,1)$ part of \juffy\ gives
+\eqn\jippo{{1\over 2\pi}\int_X\omega\wedge F=-{1\over 4\pi}\int_X\omega\wedge
+\omega\left(|\alpha|^2-|\beta|^2\right).}
+The left hand side of \jippo\ is a topological invariant which can be
+interpreted as
+\eqn\ippo{J= [\omega]\cdot c_1(L).}
+The condition that there are no non-trivial abelian instantons is
+that $J$ is non-zero; we only wish to consider metrics for which this
+is so. If $J<0$, we must have $\alpha\not= 0$, $\beta=0$, and if
+$J>0$, we must have $\alpha=0$, $\beta\not= 0$.
+
+The equation that we have not considered so far is the $(1,1)$ part of \juffy.
+This equation can be interpreted
+as follows. Suppose for example that we are in the situation with $\beta=0$.
+The space of connections $A$
+and sections $\alpha$ of $K^{1/2}\otimes L$
+can be interpreted as a symplectic manifold,
+the symplectic structure being defined by
+\eqn\defby{\eqalign{\langle\delta_1A,\delta_2A\rangle & =\int_X\omega
+ \wedge \delta_1A\wedge\delta_2 A\cr
+ \langle \delta_1\alpha,\delta_2\alpha
+\rangle & =-i\int_X\omega\wedge\omega
+\left(\delta_1\overline \alpha\delta_2\alpha-\delta_2\bar \alpha
+\delta_1\alpha\right).\cr}}
+On this symplectic manifold acts the group of $U(1)$ gauge transformations.
+The moment map $\mu$ for this action is the quantity that appears in the
+$(1,1)$ equation that we have not yet exploited, that is
+\eqn\hefby{ \mu\omega= F_\omega^{1,1}+\omega|\alpha|^2.}
+By analogy with many similar problems, setting
+to zero the moment map and dividing by the group of $U(1)$ gauge
+transformations
+should be
+equivalent to dividing by the complexification of the group of gauge
+transformations.\foot{In such comparisons of symplectic and complex quotients,
+one usually needs a stability condition on the complex side.
+In the present case, this is the condition discussed in
+connection with \ippo.} In the present case, the complexification of the
+group of gauge transformations acts by $\alpha\to t\alpha$,
+$\bar\partial_A\to t\bar\partial_At^{-1}$, where $t$ is a map from
+$X$ to ${\bf C}^*$.
+
+Conjugation by $t$ has the effect of identifying any two $A$'s that
+define the same complex structure on $L$. This can be done almost
+uniquely: the ambiguity is that conjugation by a constant $t$ does
+not change $A$. Of course, a gauge transformation by
+a constant $t$ rescales
+$\alpha$ by a constant. The result therefore, for $J<0$, is that the moduli
+space of solutions of the monopole equations is the moduli space of
+pairs consisting of a complex structure on $L$ and a non-zero
+holomorphic section, defined
+up to scaling, of $K^{1/2}\otimes L$. For $J>0$, it is instead
+$\beta$ that is non-zero, and $K^{1/2}\otimes L$ is replaced by
+$K^{1/2}\otimes L^{-1}$.
+
+This result can be stated particularly nicely if $X$ has $b_1=0$.
+Then the complex structure on $L$, assuming that it exists, is unique.
+The moduli space of solutions of the monopole equations is
+therefore simply a complex projective space, ${\bf P}H^0(X,K^{1/2}\otimes L)$
+or ${\bf P}H^0(X,K^{1/2}\otimes L^{-1})$, depending on the sign of $J$.
+
+\bigskip
+\noindent{\it Identifying The Basic Classes}
+
+We would now like to identify the basic classes.
+The above description of the moduli space gives considerable information:
+basic classes are of the form $x=-2c_1(L)$, where $L$ is such that
+$J<0$ and $H^0(X,K^{1/2}\otimes L)$ is non-empty, or $J>0$
+and $H^0(X,K^{1/2}\otimes L^{-1})$ is non-empty. This, however,
+is not a sharp result.
+
+That is closely related to the fact that the moduli spaces ${\bf P}H^0(X,
+K^{1/2}\otimes L^{\pm 1})$ found above very frequently have a dimension
+bigger than the ``generic'' dimension of the moduli space as predicted
+by the index theorem. In fact, K\"ahler metrics
+are far from being generic. In case the expected dimension
+is zero, one would have always $n_x>0$ if the moduli spaces behaved
+``generically'' (given the complex orientation, an isolated point on the
+moduli space would always contribute $+1$ to $n_x$; this is a special
+case of a discussion below). Since the $n_x$
+are frequently negative (as in the examples of Kronheimer
+and Mrowka or equation (2.66) of \newwitten), moduli spaces of
+non-generic dimension must appear.
+
+When the moduli space has greater than the generically expected dimension,
+one can proceed by integrating over
+the bosonic and fermionic collective
+coordinates in the path integral. This gives a result that can be
+described topologically: letting $T$ be the operator that arises in linearizing
+the monopole equations, the cokernel of $T$ is a vector bundle $V$
+(the ``bundle of antighost zero modes'') over the moduli space ${\cal M}$;
+its Euler class integrated over ${\cal M}$ is the desired $n_x$.
+
+Alternatively, one can perturb the equations to more generic ones.
+We use the same perturbation as before.
+For a K\"ahler manifold $X$, the condition $b_2^+>1$ is equivalent
+to $H^{2,0}(X)\not= 0$, so we can pick a non-zero holomorphic two-form
+$\eta$.\foot{In \newwitten, where essentially the same perturbation
+was made, the two-form was called $\omega$, but
+here we reserve that name for the K\"ahler form.}
+We perturb the monopole equations \juffy\
+to
+\eqn\ojuffy{\eqalign{F^{2,0} & = \alpha\beta -\eta\cr
+ F_\omega^{1,1} & = -\omega\left(|\alpha|^2-|\beta|^2\right)\cr
+ F^{0,2} & =\bar\alpha\bar\beta-\bar\eta,\cr}}
+leaving unchanged the Dirac equation for $M$.
+
+It suffices to consider the case that the first Chern class of $L$
+is of type $(1,1)$, since the unperturbed moduli space vanishes otherwise.
+That being so, we have
+\eqn\ijuffy{0=\int_XF^{2,0}\wedge\bar\eta=\int_XF^{0,2}\wedge \eta.}
+Using this, one finds that \nohighor\ generalizes to
+\eqn\onohighor{\eqalign{\int_Xd^4x\sqrt g\left({1\over 2}|s|^2+|k|^2\right)
+=\int_Xd^4x &\left({1\over 2}
+|F^+|^2+g^{ij}D_i\bar\alpha D_j\alpha+g^{ij}D_i\bar\beta
+D_j\beta\right.\cr & \left.
+ +{1\over 2}(|\alpha|^2-|\beta|^2)^2+{2}|\alpha\beta-\eta|^2
++{R\over 4}(|\alpha|^2+|\beta|^2)\right) .\cr}}
+We can now make an argument of a sort we have already seen: the transformation
+\eqn\hoggy{\eqalign{A & \to A\cr
+ \alpha & \to \alpha \cr
+ \beta & \to -\beta \cr
+ \eta & \to -\eta, \cr}}
+though not a symmetry of \ojuffy, is a symmetry of the right hand side of
+\onohighor. As solutions of \ojuffy\ are the same as zeroes of the right
+hand side of \onohighor, we deduce that the solutions of \ojuffy\ with
+a two-form $\eta$ are transformed by \hoggy\ to the solutions with $-\eta$.
+The terms in \ojuffy\ even or odd under the transformation must therefore
+separately vanish, so
+any solution of \ojuffy\ has
+\eqn\goggy{0= F^{0,2}=F^{2,0}=\alpha\beta-\eta.}
+The condition $F^{0,2}=0$ means that the connection still defines
+a holomorphic structure on $L$.
+
+The condition
+\eqn\jipoggy{ \alpha\beta =\eta}
+gives our final criterion for determining the basic classes: they are
+of the form
+$x=-2c_1(L)$ where, for any choice of $\eta\in H^0(X,K)$, one has
+a factorization $\eta=\alpha\beta$ with
+holomorphic sections $\alpha$ and $\beta$ of $K^{1/2}\otimes L^{\pm 1}$,
+and $x^2=c_1(K)^2$.
+
+To make this completely explicit, suppose
+the divisor of $\eta$ is a union of irreducible
+components $C_i$ of multiplicity $r_i$.
+Thus the canonical divisor is
+\eqn\rufu{c_1(K)=\sum_ir_i[C_i],}
+where $[C_i]$ denotes the cohomology class that is
+Poincar\'e dual to the curve $C_i$.
+The existence of the factorization $\eta=\alpha\beta$
+means that the divisor of $K^{1/2}\otimes L$ is
+\eqn\jufu{c_1(K^{1/2}\otimes L)=\sum_is_i[C_i],}
+where $s_i$ are integers with $0\leq s_i\leq r_i$.
+The first Chern class of $L$ is therefore
+\eqn\tufu{c_1(L)=\sum_i(s_i-{1\over 2}r_i)[C_i].}
+And the basic classes are of the form $x=-2c_1(L)$ or
+\eqn\pufu{x=-\sum_i(2s_i-r_i)[C_i].}
+
+An $x$ of this form is is of type $(1,1)$ and congruent to $c_1(K)$
+modulo two, but may not obey $x^2=c_1(K)^2$.
+It is actually possible to prove using the Hodge index theorem
+that for $x$ as above, $x^2\leq c_1(K)^2$.\foot{Such an argument
+was pointed out by D. Morrison.} This is clear from the monopole
+equations: perturbed to $\eta\not=0$, these equations have
+ at most isolated solutions
+(from the isolated factorization $\eta=\alpha\beta$) and not a moduli
+space of solutions of positive dimension. So for K\"ahler manifolds,
+the non-empty perturbed moduli spaces are at most of dimension zero; invariants
+associated with monopole moduli spaces of higher dimension vanish.
+
+Our final conclusion about the basic classes, then, is that they
+are classes of the form \pufu\ such that $x^2=c_1(K)^2$.
+Each factorization $\eta=\alpha\beta$ contributes
+$\pm 1$ to $n_x$ with the corresponding $x$.
+Since several factorizations might give the same $x$, cancellations
+may be possible, making it possible to write the invariant in
+the Kronheimer-Mrowka form, with a shorter list of basic classes.
+Such cancellations can be effectively found since the signs of the various
+contributions are computed below. In any event the classes $x=\pm K$
+arise only from $s_i=0$ or $s_i=r_i$, respectively, and so always
+arise as basic classes with $n_x=\pm 1$.
+\foot{G. Tian and S.-T. Yau, P. Kronheimer and T. Mrowka, D. Morrison,
+and R. Friedman and J. Morgan pointed out that it actually follows
+from these conditions (or related arguments)
+that if $X$ is a minimal surface of general
+type, then the only basic classes are $\pm K$ (so that $K$ is a differentiable
+invariant up to sign). Indeed, according to Lemma 4 in \ref\kodaira{
+K. Kodaira, ``Pluricanonical Systems On Algebraic Surfaces Of General
+Type,'' J. Math. Soc. Japan {\bf 20} (1968) 170.}, on such a surface, if
+$K={\cal O}(C_1)\otimes {\cal O}(C_2)$
+with non-zero effective divisors $C_1,C_2$, then $C_1\cdot C_2>0$.
+This means that a factorization $\eta=\alpha\beta$ with $\alpha,\beta$
+sections of $K^{1/2}\otimes L^{\pm 1}$ and $x^2=c_1(K)^2$
+implies that $K^{1/2}\otimes L^{\pm 1}$ is trivial with one choice of sign,
+and hence that $x=\pm c_1(K)$.}
+
+\bigskip
+\noindent{\it Comparison To Previous Results}
+
+Let us compare these statements to previous results. The main case considered
+in \newwitten\ was that in which the $C_i$ were disjoint
+with multiplicities $r_i=1$. The allowed values of the $s_i$ are
+then $0$ and 1, so the basic classes are
+\eqn\ppufu{x_{\vec \rho}=\sum_i\rho_i[C_i],}
+with each $\rho_i=\pm 1$, as claimed in \newwitten.
+Notice that all of these classes have $x_{\vec\rho}^2=c_1(K)^2$.
+
+The most important case in which the $r_i$ are not all one is the case
+of an elliptic surface with multiple fibers. A fiber of multiplicity $n$
+appears in the canonical divisor with weight $r=n-1$. For elliptic
+surfaces, one has $C_i\cdot C_j=0$ for all $i,j$,
+so the classes in \pufu\ actually do all have
+$x^2=c_1(K)^2=0$. The formulas of
+Kronheimer and Mrowka for the Donaldson invariants of these surfaces show
+that the basic classes, in their sense,
+are indeed the classes given in \pufu.
+
+
+
+
+\bigskip
+\noindent{\it Determination Of The Sign}
+
+To complete this story, we must compute, for each factorization,
+the sign of $\det T$.
+Let us first explain in an abstract setting the strategy that will be
+used.
+Suppose that $E$ and $F$ are real vector spaces of equal even dimension
+with given complex structures, and $T:E\to F$ is an invertible linear map that
+commutes with the complex structure. Then $\det T$ is naturally
+defined as an element of $\det F\otimes \det E^{-1}$.
+If $\det E$ and $\det F$ are trivialized using the complex orientations of $E$
+and $F$, then $\det T>0$ roughly because the complex structure gives a pairing
+of eigenvalues. If $T$ {\it reverses} the complex structures then
+the sign of $\det T$ is $(-1)^w$ with $w=\dim_{\bf C}E$. For instance,
+by reversing the complex structure of $E$ one could reduce to the case
+in which $T$ preserves the complex structures, but reversing the complex
+structure of $E$ multiplies its orientation by $(-1)^w$.
+
+One can combine the two cases as follows. Suppose that $T$ preserves
+the complex structures but is not invertible. Let $T':E\to F$
+be a map that reverses the complex structures and maps ${\rm ker}\,T$
+invertibly to $F/T(E)$. Then for small real $\epsilon$ (of any sign)
+the sign of $\det(T\oplus \epsilon T')$ is $(-1)^w$ where now
+$w={\rm dim}_{\bf C}{\rm ker}\,T$. The same formula holds if
+$U$ and $V$ are vector bundles,
+$E=\Gamma(U)$, $F=\Gamma(V)$, $T:E\to F$
+is an elliptic operator with zero index, $T'$ is a sufficiently mild
+perturbation, and $\det (T+\epsilon T')$ is
+understood as the Ray-Singer-Quillen
+determinant.
+
+Our problem is of this form with $T$ understood as the linearization
+of the monopole equations at $\eta=0$ and $T'$ as the correction
+proportional to $\eta$ (which enters the linearization because of the shift
+it induces in $\alpha$ or $\beta$).
+As in \pxxx, one has $U=\Lambda^1\oplus (S^+\otimes L)$,
+with $S^+\otimes L$ now regarded as a real vector bundle of rank four.
+If $J<0$ (so $\beta=0$ for $\eta=0$), then
+give $U$ a complex structure that acts naturally on
+$S^+\otimes L$ and multiplies $\Lambda^{0,1}$ and $\Lambda^{1,0}$ by
+$i$ and $-i$, respectively. Likewise
+give $V=\Lambda^0\oplus\Lambda^{2,+}\oplus (S^-\otimes L)$
+a complex structure that acts naturally on $S^-\otimes L$; multiplies
+$\Lambda^{0,2}$ and $\Lambda^{2,0}$ by $i$ and $-i$; and exchanges the
+$(1,1)$ part of $\Lambda^{2,+}$ with $\Lambda^0$.
+Then $T$ preserves the
+complex structures on these bundles and $T'$ reverses them.
+
+The sign of the contribution to $n_x$ from a factorization $\eta=\alpha\beta$
+is therefore $(-1)^w$ with $w={\rm dim}_{\bf C}{\rm \ker}\,T$.
+The kernel of $T$ can be described as follows. There is an exact
+sequence
+\eqn\immo{0\to {\cal O}\underarrow{\alpha}K^{1/2}\otimes L\to R\to 0,}
+with some sheaf $R$. The kernel of $T$ has the same dimension as
+$H^0(X,R)$, as explained below. So the sign of the contribution to $n_x$
+is
+\eqn\uddu{(-1)^{{\rm dim}\,H^0(X,R)}.}
+If instead $J>0$, so the unperturbed solution has $\alpha=0$, $\beta\not=0$,
+then first of all we reverse the complex structures on $S^\pm\otimes L$;
+this multiplies the determinant by $(-1)^\Delta$ where $\Delta=-\sigma/8
++c_1(L)^2/2=(\chi+\sigma)/4$ is the Dirac index. The rest of
+the discussion goes through with
+\immo\ replaced by
+\eqn\dimmo{0\to {\cal O}\underarrow{\beta}K^{1/2}\otimes L^{-1}
+\to \tilde R\to 0,}
+so the sign is
+\eqn\duddu{(-1)^{\Delta+{\rm dim}\,H^0(X,\tilde R)}.}
+(It can be verified using the classification of surfaces that \uddu\
+and \duddu\ are equal.)
+With these signs, \jimmo\ becomes completely explicit: the sum in \jimmo\ is
+a sum over factorizations $\eta=\alpha\beta$; each such factorization
+determines a class $x$ and contributes to $n_x$ an amount $\pm 1$
+as just determined.
+
+Before justifying the claim about $\ker T$, let us
+check that the sign just determined agrees with what has been computed
+by other methods. Suppose as in \newwitten\ that the divisor of $\eta$
+is a union of disjoint smooth curves $C_i$. Then $R$ is a sum of
+sheaves $R_i$ supported on $C_i$; $R_i$ is trivial if $s_i$
+(defined in \jufu) is 0 and is isomorphic to a spin bundle of $C_i$
+(determined by $\eta $ and independent of the factorization $\eta=\alpha\beta$)
+if $s_i=1$.
+Let $t_i=1$ if this spin bundle is even, that is, if ${\rm dim}\,H^0(C_i,R_i)$
+is even, and $-1$ if it is odd. Then \uddu\ becomes
+\eqn\nurfo{(-1)^{{\rm dim}\,H^0(X,R)}=\prod_{i|s_i=1} t_i.}
+This is the result claimed in equation (2.66)
+of \newwitten. One can similarly check that \jimmo\ when evaluated
+with the signs given above agrees with the formulas of Kronheimer
+and Mrowka for Donaldson invariants of elliptic surfaces with multiple
+fibers.
+
+It remains to justify the claimed structure of $\ker\, T$. Suppose, for
+instance, that
+we are linearizing around a solution with $\beta=0$, $\alpha\not= 0$.
+Let $\delta A$, $\delta \alpha$, and $\delta \beta$ denote
+first order variations of $A,\alpha,$ and $\beta$. The argument
+that proves the vanishing theorem shows that for $\delta A,\delta\alpha,
+\delta\beta$ to be annihilated by $T$, one must
+have $\alpha\delta\beta=0$ and hence $\delta\beta=0$. The remaining
+equations can be written
+\eqn\remeq{\eqalign{\bar\partial \,\,\delta A^{0,1} & = 0 \cr
+ i\delta A^{0,1}\alpha +\bar\partial_A\delta\alpha & = 0.
+\cr}}
+One must divide the space of solutions of \remeq\ by solutions that arise
+from complex gauge transformations of $A,\alpha$.
+If $\delta A^{0,1}=0$, then the second equation says that $\delta\alpha
+\in H^0(X, K^{1/2}\otimes L)$; however, upon dividing by complex
+gauge transformations (which include rescalings of $\alpha$ by a constant)
+we should regard $\delta\alpha$ as an element of $H^0(X,K^{1/2}\otimes L)/
+{\bf C}\alpha$. The first equation says that $\delta A^{0,1}$ defines
+an element of $H^1(X,{\cal O})$, and the second equation says that
+multiplication by $\alpha$ maps this element to zero in $H^1(X,K^{1/2}\otimes
+L)$. So if ${\rm ker}\,\alpha$ is the kernel of
+$H^1(X,{\cal O})\underarrow{\alpha}H^1(X,K^{1/2}\otimes L)$, then there
+is an exact sequence
+\eqn\imoc{0\to H^0(X,K^{1/2}\otimes L)/{\bf C}\alpha
+\to {\rm ker}\,T\to {\rm ker}\,\alpha\to
+0.}
+This can be compared to the exact sequence
+\eqn\nimoc{0\to H^0(X,K^{1/2}\otimes L)/{\bf C}\alpha
+\to H^0(X,R)\to {\rm ker}\,\alpha\to
+0}
+that comes from \immo. Comparison of these sequences shows
+that ${\rm ker}\,T$ and $H^0(X,R)$ have the same dimension,
+as asserted above; one should be able to identify these spaces canonically.
+
+\newsec{A Short Sketch Of The Physics}
+
+To sketch the relation of these ideas to quantum field theory,
+let us first recall the analysis of $N=2$ supersymmetric Yang-Mills
+theory in \sw. To begin with we work on flat ${\bf R}^4$.
+It has long been known that this theory has a family of quantum vacuum
+states parametrized by a complex variable $u$, which corresponds
+to the four dimensional class in Donaldson theory. For $u\to\infty$,
+the gauge group is spontaneously broken down to the maximal torus,
+the effective coupling is small, and everything can be computed
+using asymptotic freedom. For small $u$, the effective coupling is strong.
+Classically, at $u=0$, the full $SU(2)$ gauge symmetry is restored.
+But the classical approximation is not valid near $u=0$.
+
+Quantum mechanically, as explained in \sw, the $u$ plane turns out to
+parametrize a family of elliptic curves,
+\foot{If $SU(2)$ is replaced by
+a Lie group of rank $r$, elliptic curves are replaced
+by abelian varieties of rank $r$; the analog of
+the simple type condition is that the commutative
+algebra of operators obtained by evaluating the Chern classes of the universal
+bundle at a point in a four-manifold has a spectrum consisting of $h$
+points ($h$, which is $N$ for $SU(N)$, is the dual Coxeter number of the
+Lie group) where these varieties degenerate maximally.}
+in fact, the modular curve
+of the group $\Gamma(2)$. The family can be described by the equation
+\eqn\urmo{y^2=(x^2-\Lambda^4)(x-u),}
+where $\Lambda$ is the analog of a parameter that often goes by the same
+name in the theory of strong interactions. (The fact that $\Lambda\not= 0$
+means that the quantum theory does not have the conformal invariance
+of the classical theory.)
+The curve \urmo\ is smooth for generic $u$, but degenerates to
+a rational curve for $u=\Lambda^2,-\Lambda^2$, or $\infty$. Near each
+degeneration, the theory becomes weakly coupled, and everything is calculable,
+if the right variables are used. At $u=\infty$, the weak coupling is
+(by asymptotic freedom) in terms of the original field
+variables. Near $u=\pm \Lambda^2$
+a magnetic monopole (or a dyon, that is a particle carrying both
+electric and magnetic charge) becomes massless; the light degrees
+of freedom are the monopole or dyon and a dual photon or $U(1)$ gauge
+boson. In terms of the dyon and dual photon, the theory is weakly
+coupled and controllable near $u=\pm \Lambda^2$.
+
+Notice that quantum mechanically on flat ${\bf R}^4$,
+the full $SU(2)$ gauge symmetry is never restored. The only really
+exceptional behavior that
+occurs anywhere is that magnetically charged particles
+become massless.
+
+Now, for any $N=2$ supersymmetric field theory, a standard twisting
+procedure \witten\ gives a topological field theory. In many cases,
+these topological field theories are related to the counting of
+solutions of appropriate equations. For instance, the procedure,
+applied to the underlying $SU(2)$ gauge theory, gives Donaldson theory
+(that is, the problem of counting $SU(2)$ instantons); applied to
+the quantum theory near $u=\pm \Lambda^2$, it gives the problem of
+counting the solutions of the monopole
+equations; applied at a generic point on the $u$ plane, it gives, roughly,
+the problem of counting {\it abelian} instantons.
+
+Now let us apply this experience, to work
+on a general oriented four-manifold $X$.
+The structure of the argument is analogous to the heat kernel proof
+of the index theorem, in which one considers the trace of the heat kernel
+$\Tr (-1)^Fe^{-tH}$. This is independent of $t$ but can be evaluated
+in different ways for $t\to 0$ or for $t\to \infty$;
+for small $t$, one sees local geometry and gets
+a cohomological formula, while for large $t$, one gets a description
+in terms of the physical ground states (harmonic spinors).
+
+In the four-manifold problem, letting $g$ be any Riemannian
+metric on $X$, we consider the one parameter family of metrics $g_t=tg$,
+with $t>0$. Correlation functions of the twisted topological field
+theory are metric independent and so independent of $t$.
+For $t\to 0$, using asymptotic freedom,
+the classical description becomes valid,
+and one recovers Donaldson's definition of four-manifold invariants
+from the $N=2 $ theory. In particular, for four-manifolds on which
+there are no abelian instantons, the main contribution comes from
+$u=0$ where for small $t$ one computes in the familiar fashion
+with the full $SU(2)$ gauge theory.
+
+What happens for large $t$? Once the scale of the four-manifold
+is much greater than $1/\Lambda$, the good description is in terms of
+the degrees of freedom of the vacuum states on ${\bf R}^4$. At first
+sight, it might appear that the answer will come by integration over
+the $u$ plane. That is apparently so for some classes of problems.
+
+However, for four-manifolds with $b_2^+>1$, one can show
+that the contribution of any region of the $u$ plane bounded away
+from $u=\pm \Lambda^2$ vanishes as a power of $t$ for $t\to \infty$.
+This is roughly because in the abelian theory that prevails away
+from $u=\pm \Lambda^2$, there are too many fermion zero modes
+and no sufficiently efficient way to lift
+them. (It is not clear if the gap in the
+argument for non-K\"ahler manifolds with $b_2^+=3$ is significant,
+or could be removed with a more precise treatment.)
+
+Under the above condition on $b_2^+$, a contribution that survives
+for $t\to\infty$ can therefore come only from a neighborhood of
+$u=\pm \Lambda^2$ that shrinks to zero as $t$ grows. The contribution
+from this region does survive for $t\to \infty$; it can be computed
+using the monopole equations since those are the relevant equations
+in the topologically twisted theory near $u=\pm \Lambda^2$.
+In computing a correlation function of operators of the twisted theory
+near $u=\pm \Lambda^2$, one can expand all operators of the microscopic
+theory in terms of operators of successively higher dimension in the
+macroscopic, monopole theory.
+
+For $u$, the most relevant term (that is, the term of lowest dimension)
+is the $c$-number $u=\Lambda^2$ or $u=-\Lambda^2$.
+The simple type condition -- which asserts that $u$ is semi-simple
+with a spectrum consisting of two points -- arises when one may
+replace $u$ by this $c$-number. For the operator
+related to the two-dimensional classes of Donaldson theory, the most
+relevant term is again a $c$-number,
+measuring the first Chern class of the dual line bundle $L$ of the monopole
+problem. Keeping only these terms, since the operators are replaced
+by $c$-numbers, correlation
+functions can be computed by simply
+counting solutions weighted by the sign of the fermion determinant; only zero
+dimensional moduli spaces contribute. Upon fixing the normalizations
+by comparing to known special cases, one arrives at \jimmo.
+
+This in fact appears to be justified since as usual in such
+problems operators of higher
+dimension give contributions that vanish as negative powers of $t$.
+This would give a quantum field theory proof that
+all oriented four-manifolds with $b_2^+>3$ are of simple type.
+If, however, higher terms in the expansion of the operators survive
+on some four-manifolds with $b_2^+>3$, the consequences would be as follows.
+Then the higher monopole invariants of $W\not= 0$ can be detected in
+Donaldson theory, and \jimmo\ will be replaced by a more general
+formula involving the expansion near $u=\pm \Lambda^2$ of some of the
+functions computed in \sw. The number $s$ of higher terms that one would have
+to keep in the expansion would be one half
+the maximum value of $W$ that contributes. $u$ will still have a spectrum
+consisting of two points, but instead of $u^2-\Lambda^4=0$, one would
+get $(u^2-\Lambda^4)^{s+1}=0$. Such a situation has in fact been
+analyzed by Kronheimer and Mrowka.
+
+\listrefs
+\end
diff --git a/macros/generic/occam/auditor.tex b/macros/generic/occam/auditor.tex
new file mode 100644
index 0000000000..20b40cf983
--- /dev/null
+++ b/macros/generic/occam/auditor.tex
@@ -0,0 +1,598 @@
+
+ %% auditor.tex of 6-94 (alpha)
+ %% "audits macro use"
+ %% By laurent siebenmann, lcs@topo.math.u-psud.fr (comments please!)
+ %% Used mostly for Plain and amstex; LaTeX use not debugged.
+ %% Documentation after endinput.
+ %% Alpha posting on ftp ftp.math.u-psud.fr in pub/TeX/Occam.dir
+ %% auditor.tex is part of the Occam system for macro management.
+ %% But it can also be used alone.
+
+ \ifx\undefined\auditortex\def\auditortex{}
+ \else
+ \immediate\write16{}%
+ \errmessage{%
+ The auditor.tex macro \noexpand\Def already loaded\string!}%
+ \EX@\endinput
+ \fi
+
+ \chardef\auditAt=\catcode`\@
+ \catcode`\@=11
+
+ %%temporarily suppress Plain's logging of allocations
+ \let\auditorwlog@ld\wlog
+ \def\wlog#1{\relax}
+
+ \def\WrSc@{\immediate\write16}
+ \def\WrOut@{\immediate\write\unusedout@}
+
+ \WrSc@{}%
+ \WrSc@{%
+ *** The auditor.tex macro-auditing system}%
+ \WrSc@{%
+ *** is being installed for a test run of your typescript.}%
+ \WrSc@{%
+ *** Its report will appear after typesetting.}%
+ \WrSc@{%
+ *** See documentation in auditor.tex.}%
+ \WrSc@{%
+ *** Hit return to get audit.}%
+ \WrSc@{%
+ *** Hit \space x \space and return to typeset without audit.}%
+ \def\temp{\par}%
+ \read16 to \YourChoice
+ %\def\YourChoice{\par}%%%%%%%%%% comment out?
+ \ifx\YourChoice\temp
+ \def\Modify@Audit{}%
+ \else
+ \def\Modify@Audit{\let\Def\def \let\gDef\gdef \let\Let\let
+ \def\gLet{\global\let}\let\The@Audit@\relax}%
+ \WrSc@{%
+ *** Auditor apparatus switched off\string.}%
+ \fi
+ \WrSc@{}%
+
+
+ \newwrite \unusedout@
+ \newtoks\temptoks@
+ \newtoks\nibbletoks@
+ \newtoks\resttoks@
+ \newtoks\deftoks@
+ \newtoks\mactoks@
+ \newtoks\unusedtoks@
+ \newtoks\AuditDepth
+
+ \let\EX@\expandafter
+
+ \def\Nibbl@#1#2\endNibbl@{\nibbletoks@{#1}\resttoks@{#2}}
+
+ \def\gobble#1{}
+
+ \def\WrDef@#1{\EX@
+ \ifx\csname\string_%
+ \string#1\string_\endcsname\@Used
+ \else
+ \EX@\global\EX@\let\csname\string_%
+ \string#1\string_\endcsname\@Defed
+ \edef\@tmp@{\global
+ \noexpand\deftoks@{\the\deftoks@\noexpand#1}}%
+ \@tmp@
+ \fi
+ }
+
+ \def\WrDDef@#1{\EX@
+ \ifx\csname\string_%
+ \string#1\string_\endcsname\@Used
+ \else
+ \EX@\global\EX@\let\csname\string_%
+ \string#1\string_\endcsname\@DDefed
+ \edef\@tmp@{\global
+ \noexpand\deftoks@{\the\deftoks@\noexpand#1}}%
+ \@tmp@
+ \fi
+ }
+
+ \def\@UsedMathSym{@UsedMathSym}
+ \newtoks\Def@toks@
+ \newtoks\Def@@toks@
+ \newtoks\Font@toks@
+ \newtoks\Mathchar@toks@
+ \newtoks\MATHchar@toks@
+ \newtoks\MATHchars@toks@
+
+\def\Deff@{%
+ \edef\@tmp@ {\@d@f\the\Def@toks@ {%\noexpand
+ \global\let \EX@\noexpand\csname\string_%
+ \EX@\string\the\nibbletoks@\string_\endcsname
+ \noexpand\@Used
+ \the\Def@@toks@ }}%
+ \@tmp@
+ \EX@\WrDef@\the\nibbletoks@
+ }
+
+\def\DDeff@{%
+ \edef\@tmp@ {\@d@f\the\Def@toks@ {%\noexpand
+ \global\let \EX@\noexpand\csname\string_%
+ \EX@\string\the\nibbletoks@\string_\endcsname
+ \noexpand\@Used
+ \the\Def@@toks@ }}%
+ \@tmp@
+ \EX@\WrDDef@\the\nibbletoks@
+ }
+
+ \def\Def#1#{\Def@toks@{#1}%
+ \Nibbl@#1\endNibbl@\let\@d@f\def
+ \afterassignment\Deff@\Def@@toks@
+ }
+
+ \def\DDef#1#{\Def@toks@{#1}%
+ \Nibbl@#1\endNibbl@\let\@d@f\def
+ \afterassignment\DDeff@\Def@@toks@
+ }
+
+ \def\gDef#1#{\Def@toks@{#1}%
+ \Nibbl@#1\endNibbl@\let\@d@f\gdef
+ \afterassignment\Deff@\Def@@toks@
+ }
+
+ %% \Let \gLet require two *macros* following, without =
+ %% Only then enhances \let
+ \def\Let#1#2{%
+ \EX@\Def\EX@#1\EX@{#2}%
+ }
+ \def\gLet#1#2{%
+ \EX@\gDef\EX@#1\EX@{#2}%
+ }
+
+ \def\WrMATHchardef@{%
+ \EX@\edef\the\MATHchar@toks@{%
+ \noexpand\ifx
+ \csname\string_\EX@\string\the\MATHchar@toks@\string_\endcsname
+ \noexpand\@UsedMathSym
+ \noexpand\else
+ \global\MATHchars@toks@\noexpand\EX@{%
+ \noexpand\the\MATHchars@toks@\the\MATHchar@toks@}%
+ \global\let\csname\string_\EX@\string\the\MATHchar@toks@\string_\endcsname
+ \noexpand\@UsedMathSym
+ \noexpand\fi
+ \csname \EX@\string\the\MATHchar@toks@\string_\endcsname}
+ %\EX@\show\the\MATHchar@toks@
+ }
+
+ \def\MATHchardef#1{\MATHchar@toks@{#1}%
+ %\showthe\MATHchar@toks@
+ \afterassignment\WrMATHchardef@
+ \EX@\mathchardef\csname \string#1\string_\endcsname}
+
+ \def\AfterMathchardef@{%
+ \edef\@@temp@{%
+ \noexpand\Def\the\Mathchar@toks@{%
+ \csname \EX@\string\the\Mathchar@toks@\string_\endcsname}}
+ %\show\@@temp@
+ \@@temp@}
+
+ \def\Mathchardef#1{\Mathchar@toks@{#1}%
+ \afterassignment\AfterMathchardef@
+ \EX@\mathchardef\csname \string#1\string_\endcsname}
+
+ %%% \Newsymbol, \NEWsymbol for \newsymbol of amssym.def
+ \def\Newsymbol#1#2#3#4#5{\let\next@\relax
+ \ifnum#2=\@ne\let\next@\msafam@\else
+ \ifnum#2=\tw@\let\next@\msbfam@\fi\fi
+ \Mathchardef#1="#3\next@#4#5}
+
+ \def\NEWsymbol#1#2#3#4#5{\let\next@\relax
+ \ifnum#2=\@ne\let\next@\msafam@\else
+ \ifnum#2=\tw@\let\next@\msbfam@\fi\fi
+ \MATHchardef#1="#3\next@#4#5}
+
+ \def\@F@nt@{\edef\@@temp@{%
+ \noexpand\Def\the\Font@toks@{%
+ \csname \EX@\string\the\Font@toks@\string_\endcsname}}%
+ \@@temp@}
+
+ \def\Font#1{\Font@toks@{#1}\afterassignment\@F@nt@
+ \EX@\font\csname \string#1\string_\endcsname}
+
+ \def\@FF@nt@{\edef\@@temp@{%
+ \noexpand\DDef\the\Font@toks@{%
+ \csname \EX@\string\the\Font@toks@\string_\endcsname}}%
+ \@@temp@}
+
+ \def\FFont#1{\Font@toks@{#1}\afterassignment\@FF@nt@
+ \EX@\font\csname \string#1\string_\endcsname}
+
+ \def\Loop@#1\Repeat@{%
+ \def\Iterate@{#1\EX@\Iterate@\fi}%
+ \Iterate@}
+
+ \bgroup\catcode`\%=12
+ \global\def\Pct@{ %% }\egroup
+
+ \def\WriteToToks@{\edef\@tmp@{\global\noexpand
+ \unusedtoks@{\the\unusedtoks@\the\nibbletoks@}}%
+ \@tmp@}
+
+ %\def\@Defed{@Defed}
+ %\def\@Used{@Used}
+ \def\@Used{\WrOut@{ \the\nibbletoks@}}%
+ \def\@Defed{\WrOut@{ *\the\nibbletoks@}\WriteToToks@}%
+ \def\@DDefed{\WrOut@{ **\the\nibbletoks@}\WriteToToks@}%
+ \let\@Filler\relax
+ \def\@Tail{@Tail}
+
+ \def\List@M@cs{%
+ \Loop@
+ %\message{ x }
+ \EX@\Nibbl@\the\deftoks@\@Tail\endNibbl@
+ \deftoks@\resttoks@ %\showthe\resttoks@
+ \edef\@Temp@{\EX@\noexpand\csname\string_%
+ \EX@\string\the\nibbletoks@\string_\endcsname}%
+ \EX@\let\EX@\@Temp\@Temp@ %
+ %% \@Temp is x-equal and let-equal to
+ %% \@Defed or \@DDefed or \@Used or \@Filler or @
+ %\showthe\nibbletoks@
+ %\show\@Temp@
+ %\show\@Temp
+ \EX@
+ \ifx \the\nibbletoks@\@Tail
+ %% exit if next token \@Tail
+ \else
+ \@Temp %% write appropriate stuff to file and log
+ \Repeat@
+ }
+
+ \newtoks\hrct@
+
+
+ {\catcode`\#=12\gdef\StringSharp{\string#}}
+
+ \def\The@Audit@{%\show\patience
+ \def\AuditSheet@{audit.lst}
+ %%%
+ \count255=\time\divide\count255 by 60\relax
+ \edef\temp@{\the\count255}
+ \multiply\count255 by -60\relax
+ \advance\count255 by \time
+ \immediate\openout\unusedout@ \AuditSheet@
+ \WrOut@{\Pct@ auditor.tex output, date
+ \the\day-\the\month-\the\year,
+ time \temp@\string:\the\count255.}%
+ \WrOut@{}
+ \edef\@temp@{\the\MATHchars@toks@}\def\empty{}%
+ \ifx\@temp@\empty\else
+ \WrOut@{\Pct@ Math characters defined via \noexpand\MATHchardef }
+ \WrOut@{\Pct@ or \noexpand\NEWsymbol and really used were\string:}
+ \WrOut@{\the\MATHchars@toks@}
+ \WrOut@{\Pct@ Beware lack of wordwrap\string!}
+ \WrOut@{}
+ \fi
+ \WrOut@{\Pct@ Macros (if any) defined by \string\Def, \string\Let, etc.}%
+ \WrOut@{\Pct@ are listed in order defined\string:}
+ \WrOut@{\Pct@ *Unused* macros among these are marked by * or \StringSharp.}%
+ \WrOut@{\Pct@ And **, ***, etc. indicate nesting (hence delayed action).}%
+ \WrSc@{}%
+ \WrOut@{}%
+ \List@M@cs
+ %\showthe\unusedtoks@
+ %\showthe\deftoks@
+ \def\empty{}%
+ \edef\@tmp@{\the\unusedtoks@}%
+ \ifx\@tmp@\empty
+ \EX@\def\EX@\@tmp@\EX@{\the\deftoks@}%
+ \ifx\@tmp@\empty
+ \WrSc@{*** No macros have been defined via \string\Def,
+ \string\Let, etc.}%
+ \else
+ \WrSc@{*** All macros defined via \string\Def,
+ \string\Let, etc. have been used.}%
+ \fi
+ \else
+ \WrSc@{*** The following macros defined via \string\Def,
+ \string\Let, etc. have not been used\string;}%
+ \WrSc@{%
+ *** --- you can probably delete their definitions\string:}%
+ \WrSc@{*** }%
+ \WrSc@{***** \the\unusedtoks@}%
+ \fi
+ \edef\@tmp@{\the\MATHchars@toks@}%
+ \ifx\@tmp@\empty\else
+ \WrSc@{ }%
+ \WrSc@{*** The following math chars defined by \noexpand\MATHchardef}%
+ \WrSc@{*** or \noexpand\NEWsymbol are really used\string:}%
+ \WrSc@{***** \the\MATHchars@toks@}%
+ \fi
+ \WrSc@{}%
+ \WrSc@{*** See the file \string"\AuditSheet@\string" for details.}%
+ \WrSc@{*** See the DefStrip utility for cleanup.}%
+ \WrOut@{}
+ \WrOut@{\the\AuditDepth\noexpand\ITERATIONCOUNTER}
+ \WrOut@{\Pct@ PLEASE iterate ***defstrip macro of QUEDM }
+ \WrOut@{\Pct@ until asterisks disappear from iteration counter line.}
+ \WrOut@{\Pct@ Name successive output files output1, output2, ...}
+ }
+
+ \ifx\undefined\@@end
+ \let\audprim@end@\end
+ \def\end{\The@Audit@\audprim@end@}
+ \else %%% LaTeX
+ \let\audprim@end@\@@end
+ \def\@@end{\The@Audit@\audprim@end@}
+ \fi
+
+ \Modify@Audit
+
+ \let\wlog\auditorwlog@ld
+ \catcode`\@=\auditAt
+
+ %\let\DDef\Def
+
+ \endinput %% comment out for tests
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end code
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% begin tests
+
+ \input amssym.def
+ \input amssym.occ
+
+$\digamma\digamma\varkappa$
+
+\Font\cmr cmr10 scaled 1500
+%\cmr
+
+\end
+
+ %\catcode`\@=11
+
+
+ %\documentstyle{article} %% LaTeX only
+ %\begin{document} %% LaTeX only
+ %\let\Def\def
+ %\let\Let\let
+
+ \Def\Rm#1{\mathop{\fam0#1}}
+
+ \Def \End {\Rm {End}}
+ \Def \Hom {\Rm {Hom}}
+ \Def \ind {\Rm {ind}}
+ \Def \Re {\Rm {Re}}
+ \Def \Tr {\Rm {Tr}}
+ \Def \rk {\Rm {rk}}
+ \Def \rg {\Rm {rg}}
+ \Def \Td {\Rm{Td}}
+ \Def \ch {\Rm{ch}}
+ \Def \T{\Rm{T}}
+ \Def \R{\Rm{R}}
+ \Def \e{\Rm{e}}
+ \Def \odd {\Rm{odd}}
+ \Def \even {\Rm{even}}
+ \Def \Ker {\Rm{Ker}}
+ \Def \id {\Rm{id}}
+ \Def \Pf {\Rm{Pf}}
+
+ \gDef\filler{filler}
+ \gLet\Filler\filler
+
+ %\Filler
+
+ \Font\myfont=cmr10 at 11.5pt
+ %\myfont
+
+ $\End
+ %\Hom
+ \ind
+ \Re
+ \Tr
+ \rk
+ \rg
+ \Td
+ \ch
+ \T
+ \R
+ \e
+ %\odd
+ %\even
+ \Ker
+ \id
+ \Pf $
+
+ \end{document}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end tests
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% begin doc
+
+
+DOCUMENTATION FOR auditor.tex.
+
+
+ Warnings : These macros are not bulletproof. I believe no such
+macros could be bulletproof. But in practice that should be of
+no importance; hopefully, any significant annoyances will be
+routinely reported and remedied. Use of this alpha version
+with an imbricated format like LaTeX is probably for hardened
+texperts only. Plain and AmSTeX seem to respond well.
+
+ INSTRUCTIONS.
+
+ Suppose you have a macro file x.sty used for typesetting the
+typescript x.tex. The aim is to find out, quickly and easily,
+which of the macro definitions in x.sty are necessary to typeset
+x.tex.
+
+ 1) Modify a *copy* of x.sty to x-occ.sty by altering
+definitions as follows:
+
+ (a) replace \def by \Def for definitions of macros you suspect
+ might be unused in x.tex. Similarly use \gDef in place
+ of \gdef or \global\def.
+
+ (b) similarly replace \mathchardef by \Mathchardef, and so forth
+ as indicated in the list of currently possible substitutions
+ indicated in occam.spc.
+
+Provisional Warnings:
+ --- Do not modify \def's or \let's within other definitions.
+This would be pointless and perhaps dangerous. Be ready to
+revert to \def or \let if trouble ensues.
+ --- Avoid "\outer" and "\long" macros; also \alloc@
+
+ (c) Place the lines
+
+ %%% auditor.tex audits use of macros in a typescript.
+ \input auditor.tex %% Keep this file available to TeX!
+
+at the head of x-occ.sty. (Watch the order!)
+
+ 2) Modify x.tex temporarily replacing
+
+ \input x.sty by \input x-occ.sty
+
+in the header. Typeset as usual. The audit should now proceed
+with an explanatory dialog.
+
+ 3) If there is trouble in step 2), repeat it choosing (by
+dialog) to compose *without* an audit. There should be no
+change from the original behavior of x.tex. Correct any
+misbehavior --- probably arising from a malformation in
+x-occ.sty. Sometimes, here and there in x-occ.sty, one has to
+change \Def back to \def etc.
+
+ 4) Delete the unused definitions in another copy of x.sty, say
+x-min.sty. The list in the "audit.lst" output file is designed to
+make this easy, in fact so easy that a utility called "defstrip" can
+do the job automatically. Then replace x-occ.sty by x-min.sty in
+the header of x.tex. Typeset x.tex and check a proof copy.
+
+ 5) You can now send x.tex and x-min.sty to a colleague or
+publisher, without burdening him/her with useless macros present in
+x.sty.
+
+
+
+
+IMPROVEMENTS CURRENT AND FUTURE
+ A) In all, the list of prepared macros is currently (July
+1994):
+
+ \Def, \Let, \gDef, \gLet, \Font, \Mathchardef, \Newsymbol
+
+Unless the contrary is indicated, each is to be used in analogy
+with \Def replacing in x.sty a corresponding uncapitalized TeX
+primitive.
+
+ [Exception: \newsymbol (from amssym.def) is *not*
+primitive; it is used copiously for declaration of symbols from
+the AmS math fonts msam and msbm, as in amssym.tex.]
+
+ When the file amssym.tex is \input, huge numbers of math
+characters are defined via \newsymbol but only few are used. In
+this case it is appropriate to use variants \MATHchardef,
+\NEWsymbol. which signal math characters only if they are used
+--- and *not* if they are unused. For this, try temporarily
+replacing
+
+ \input amssym.tex
+
+in x-occ.sty (after \input auditor.tex please) by
+
+ \input amssym.occ
+
+where amssym.occ is obtained from amssym.tex by replacing
+\newsymbol by \NEWsymbol; then you get a list of the symbols really
+needed in x.tex.
+
+ In using \Let and \gLet, avoid macros with parameters and
+note that the condition that the second argument be a macro is
+often not satisfied. Do not use = in the syntax.
+
+ \Let, \gLet, and \Font tend to be troublesome; while
+\Mathchardef, \MATHchardef, \Newsymbol, \NEWsymbolseem tend to
+be troublefree.
+
+ The usefullness of the above list can be stretched by the
+user. For example, before \Font was introduced
+
+\font\myfont=cmr10 scaled 11.5pt
+
+would have been replaced by
+
+ \font\myfont@=cmr10 at 11.5pt \Def\myfont{\myfont@}
+
+to report use of \myfont.
+
+ In many formats, user definitions are made via macros not
+available in Plain TeX; for example, \define and \redefine in
+AmSTeX. In practice, they can usually be replaced by \Def for
+the audit. But the programmer may want to invent new macros,
+say \Define and \Redefine for AmSTeX.
+ (B) In case x.sty is of permanent interest, it is a good idea
+to begin to use x-occ.sty instead of x.sty after commenting
+out the line \input auditor.tex and replacing it by something
+like
+
+ %% Audit.tex apparatus
+ \let\Def\def \let\gDef\gdef \let\Let\let
+ \let\Font\font \def\gLet{\global\let}
+ \let\Mathchardef\mathchardef %% extend as necessary
+ % \input auditor.tex %% comment out to suppress audit function
+
+This will make steps (1) to (4) superfluous for your next
+typescript y.tex.
+
+ (C) DefStrip automates the generation of x-min.sty.
+(auditor.tex plus DefStrip make up the "Occam" utility.)
+Its starting materials are "x-occ.sty" plus the "list audit.lst"
+of unused macros provided by auditor.tex. This depends on a
+special arrangement of x-occ.sty described in occam.spc.
+
+ Ultimately, an auxiliary ".tex" program "defstrip.tex"
+will rewrite x-occ.sty omitting the inused definitions. This
+auxiliary program resembles the "docstrip" utility of LaTeX
+fame.
+
+ At the present time defstrip.tex is unavailable. But there
+exists a QUEDM script called Auditor-QUEDM-Macros; QUEDM is a
+editor with convenient "macro" (=composite command) capabilities
+that is available on Macintosh computers at prices as low as $60
+The instructions for Auditor-QUEDM-Macros are found in
+defstrip.hlp.
+
+
+ *** How "auditor.tex" functions or fails to function.
+
+ "auditor.tex" prefixes a reporting device to the expansion
+of macros defined by \Def; this device reports the use of the
+macro by defining a tell-tale auxilliary macro that is then
+polled after typesetting. But it may cause strange behavior or
+even stop TeX.
+
+ As has been mentioned auditor.tex is not bullet-proof. Any
+change whatever in the expansion of a macro can in principle
+alter its behavior. For example TeX can use \ifx and many other
+means to examine the expansion of a macro; it can detect any
+tampering with definitions.
+
+
+ *** The "watchman" mechanism.
+
+ This mechanism is capable of deleting any collection of
+lines of a macro file in response to the non-use of a single
+macro called the "watchman". This "watchman" may be a macro that
+is specially defined for the purpose. The mechanism is
+definitely only for macro files carefully formatted for Occam.
+This mechanism is more powerful but more cumbersome than that
+for \Def etc. It is still to be implemented.
+
+
+CAVEAT LaTeX : LaTeX environments tend to define their user
+macros locally; indeed their definitions are not set up while
+the macro file x.sty is being read but when the environment is
+entered. Thus the modus operandi indicated above is suspect.
+However, normally, the meanings assigned upon entering the
+environment are stored in macros whose name involves @ ; these
+are possibly the macros to spy on with \Def etc. Alternatively,
+the "watchman" mechanism may prove effective. The cleanup based
+on audit.lst is then still a delicate matter requiring texpert
+attention. Further, LaTeX's fragility must be attended to...
+
+
diff --git a/macros/generic/occam/defstrip.hlp b/macros/generic/occam/defstrip.hlp
new file mode 100644
index 0000000000..2691b39397
--- /dev/null
+++ b/macros/generic/occam/defstrip.hlp
@@ -0,0 +1,56 @@
+ Part of the Occam utility.
+ Laurent Siebenmann<lcs@topo.math.u-psud.fr>
+ Master posting 1994, ftp ftp.math.u-psud.fr
+
+
+ June 1994 alpha version
+
+ *************************************************
+ ******
+ ****** DefStrip-QUEDM-Macros Help
+ ******
+ *************************************************
+
+ PURPOSE OF THESE MACROS.
+
+ The main purpose is to use a file "audit.lst" derived from
+audit.tex, and a TeX macro file, x-aud.sty say, in the
+"Occam" format (defined in occam.spc) to derive a new
+simplified ".tex" macro file in which selected unwanted material is
+suppressed. This material is designated by "audit.lst" in
+conjunction with internal formating involving %^, %_, \Def, \Let,
+\gDef, \gLet, \Font, and some others. The user macro
+***defstrip governs this function.
+
+ The secondary purpose is to remove Occam formatting.
+The macro **aud-to-tex governs this function.
+
+
+ DIRECTIONS FOR USE.
+
+ Put together into one folder a copy of DefStrip-QUEDM-Macros
+macro file, the file audit.lst, and the macro file to be simplified.
+
+ Open the DefStrip-QUEDM-Macros macro file. If it is not
+visible, launch QUEDM using it.
+
+ Open the TeX macro file under QUEDM and *activate* its window.
+Then launch the macro ***defstrip from the QUEDM macros menu.
+
+ An audit.lst window will now open and much activity will be
+seen. Finally, a cleaned-up version of the ".tex" macro file will
+appear in a window called "output".
+
+ Only the ***help, ***defstrip, and **aud-to-tex macros
+from the QUEDM macros menu should be launched
+by the user. The others are subroutines.
+
+ See occam.spc for further details, and occam.pub for an
+overview.
+
+
+POSSIBLE PROBLEMS....(please report bugs to to author)
+
+
+
+
diff --git a/macros/generic/occam/occam.pub b/macros/generic/occam/occam.pub
new file mode 100644
index 0000000000..1fef5aee33
--- /dev/null
+++ b/macros/generic/occam/occam.pub
@@ -0,0 +1,272 @@
+ Part of the Occam utility. Laurent Siebenmann
+<lcs@topo.math.u-psud.fr>
+ Master posting 1994, ftp ftp.math.u-psud.fr
+
+Title: Occam.pub (1994--)
+This Text file has beem assimilated in a longer article
+corresponding to a talk at EuroTeX 95, Papendal, Netherlands.
+The extended article is posted ".dvi" form as
+Occam95.dvi.
+
+ ****************************************************
+ ****** OCCAM'S RAZOR AND MACRO MANAGEMENT
+ ****** (a text abstract)
+ ****** Laurent Siebenmann
+ ****** lcs@topo.math.u-psud.fr
+ ****************************************************
+
+THE APHORISM:
+
+
+ entia non sunt multiplicanda praeter necessitudinem
+
+ entities should not be multiplied beyond necessity
+
+ William of Occam 1285-1349(?)
+
+Occam's Razor is the aphorism quoted!
+Experts believe that Occam did not formulate it in
+exactly these famous words, but rather as
+
+ What can be done with fewer assumptions is done in
+ vain with more.
+
+or
+
+ Plurality is not to be assumed without necessity.
+
+The term Principle of Parcimony is also used for the
+Razor. At this European congress, let me remind you that
+Occam worked successively in Cambridge, Avignon, and
+M"unich.}
+
+ THE SOFTWARE:
+ --- occam.pub
+ --- auditor.tex
+ --- DefStrip-QUEDM-Cmds (Macintosh only)
+ --- defstrip.hlp help file for above
+ --- occam.spc specifications for source macro files to be minimized
+ --- defstrip.tex (is mere wishful thinking in summer 1995)
+
+MASTER POSTING in 1994:
+ --- ftp ftp.math.u-psud.fr
+directory pub/TeX/defstrip.dir/ }
+
+ Have you ever felt guilty about burdening a friend
+with macros that are not really necessary for composing
+your typescript? I certainly have; and would ideally
+like to follow Knuth's example of using macro files
+which define exactly what is necessary for a document
+and nothing more.
+
+ However, pruning a macro file that has served for
+another purpose is a pain. Most of us respond to this
+pain by adopting a rather messy maximalist approach in
+which all the macros that have a geneology related to
+the necessary macros are transmitted.
+
+ But there is another approach! One can seek
+efficient mechanisms to ease the task of weeding out
+unnecessary macros.
+
+ One such mechanism is auditor.tex, which sets up
+a list of names of those macros of macro file that turn
+out to be *unnecessary* in a given typescript.
+
+ A complementary tool is the utility DefStrip which
+combines a specially arranged version of the macro file
+to be "cleaned up" with the list of unused macros
+provided by auditor.tex to delete the unneeded macros
+listed together with some related material.
+
+ Ultimately, DefStrip will hopefully be a ".tex"
+program "defstrip.tex" resembling the "docstrip.cmd"
+utility of LaTeX fame. At the present time, there exists
+instead a QUEDM script called DefStrip-QUEDM-Macros;
+QUEDM is a editor with convenient "macro" (=composite
+command) capabilities that is available on Macintosh
+computers.
+
+ DefStrip and Auditor together make up a system
+called "Occam".
+
+ Let us consider two plausible examples of use of
+the Occam system. Only the first has proved genuinely
+useful thus far.
+
+ (A) Weeding out one's personal macro files
+
+Many TeX users build up a cumulative personal macro file
+through composing many articles with TeX. A time
+inevitably comes when it is embarrassing, cumbersome, or
+confusing to submit the whole macro file along with the
+article. The Occam system makes the pruning of the macro
+file painless. It is advisable to tidy up the total
+macro file and maintain it in "Occam" format\footnote{
+The extension distinguishing this format is usually
+".occ" for "audit".} as explained in "occam.spc"; then
+and only then will "auditor.tex" and DefStrip collaborate
+to *automatically* produce a minimal version of the
+macro file suitable for the article at hand.
+
+ (B) Autonomous and archival electronic ".tex"
+postings.
+
+ Suppose that one proposes to post in electronic
+".tex" form an article prepared using a more or less
+standard package such as the "harvmac.tex" macro package
+of Paul Ginsparg for Plain TeX. (The alternative ".dvi"
+form undeniably convenient, but also less flexible; for
+instance the ".tex" version can be reformatted to be read
+in comfort on any computer screen whereas a ".dvi"
+version often does not have an small enough text width.)
+Such a macro package is not immune to alteration with
+time, and unfortunately the principles of upward
+compatibility are just pious hopes, not laws.
+Consequently, one is well-advised to post, along with
+the article the macros necessary to compile it ---
+especially if modifications to the macros have been
+used. Unfortunately, the "harvmac.tex" macros are as
+voluminous as a 10 page article. This is an unfortunate
+obstacle to electronic posting of ".tex" typescripts.
+
+ The solution proposed is to have a version
+"harvmac.occ" of the "harvmac.tex" macros set out in a
+form designed for use with Occam. Then the necessary
+macros for a given article can quickly be extracted from
+the total package to make the total posting both compact
+and archival.
+
+ This is illustrated in the Occam distribution for a
+famous article of Edward Witten posted electronically in
+November 1994. The resulting archival posting (Plain
+based) requires only 6 Ko of macros rather than the
+original 20 Ko. The 68 Ko body of the article is
+untouched.
+
+ Recently "harvmac.tex" has been enhanced by inputting
+the hyper-reference macros "hyperbasics.tex" macros of
+Tanmoy Bhattacharya and the new name is "lanlmac.tex".
+The example will shortly be enhanced to cover this
+development.
+
+ The archival nature of TeX postings minimized using
+Occam still depends on Knuth's Plain format being
+archival. Plain probably will be at least upwards
+compatible in the best sense. However, the article (or a
+book, say) could perhaps be made archival on the scale
+of many decades by subjecting the Plain macros to Occam
+discipline; this incidentally seems necessary to realize
+best economy. The article would then have its own
+format built with initex. This may seem needlessly
+radical to an English speaking user. But I consider
+bootstrapping from initex the best approach for fully
+archival ".tex" postings where other languages are
+concerned.
+
+ There are many macro packages that might benefit from
+being put in Occam format. The picture macro package of
+LaTeX is an example; interestingly these macros run on
+Plain. The "amssym.tex" math symbol definition package
+for AmS fonts is another; it defines several hundred
+control sequences of which precious few are used in any
+given article. These two will also be included in ".occ"
+form in the Occam distribution.
+
+ Would it be reasonable to convert AmSTeX into a
+Plain macro package in ".occ" format, much as it has been
+converted by the AmS into a LaTeX package? This
+involves `repealing' AmSTeX's status as a full-fledged
+format. In particular the AmS-Plain package would have
+no influence outside of math mode.
+
+ In the long term, the formatting of a macro package
+for use with Occam will be the responsibility of the
+author of the package. Clearly this will catch on only
+if Occam performs well and becomes very stable.
+
+
+AFTERTHOUGHTS
+
+ Occam as presently realized does not make much sense
+in the LaTeX world. The LaTeX group is building official
+macro modules that cover all needs and are universally
+available. I suspect this will require continuing
+exponential growth of the LaTeX project, of the
+computers that run LaTeX, and of the of the time
+invested by LaTeX users.
+
+ I may be wrong. Occam is nevertheless to some extent
+my remedy for this real or imaginary catastrophic malady
+of LaTeX. Don Knuth seems to have had similar
+premonitions. I like to repeat what he said on the
+occasion of the 10th anniversary celebration of TeX
+82.
+
+ Suppose you were allowed to rewrite all
+the world's literature; should you try to put it all
+into the same format? I~doubt it. I~tend to think such
+unification is a dream that's not going to work.
+
+ [TUGboat, vol~13 (1992), page 424]
+
+ The happiest outcome would be for both approaches
+to work well. If this comes about, I expect the "look
+and feel" of Plain and LaTeX to steadily diverge.
+
+ Bootstrapping on initex as mentioned above seems to
+have a parallel in classical programming, namely the use
+of assembly language --- whereas the LaTeX approach is
+parallel to the use of a big and constantly evolving
+interpreter.
+
+ Occam's razor was one of the guiding principles of
+scientific thought for several hundred years before the
+coming of age of computers. I suspect the philosophy of
+Aristotle or Descartes is far more likely to appeal to
+computer scientists. One might go so far as to say that
+Occam's razor has by now been discarded --- indeed,
+object oriented programming consciously cultivates the
+art of multiplication of entities, and this sort of
+thing is to be found in of LaTeX commands such as
+\newheading. What can the minimalism of Occam's razor
+offer TeX users at this late date? Probably just a few
+things.
+
+ (a) Friendliness to human beings. Unnecessary
+entities that cost a microprocessor only a fraction of a
+second can cost the human mind a significant amount of
+time.
+
+ (b) Extra storage space and computing power. Both
+are in a period of exponential growth. But so is the
+TeX related software we use. Where performance in a
+fixed task is concerned, these growths may even cancel
+one another. When this happens, the old-fashioned
+minimalism of Occam's razor can help derive pleasure and
+profit from progress.
+
+ In summary, Occam is a TeX application offering
+possible new direction in programming for Plain TeX,
+and an answer to the most debilitating problem of Plain
+TeX, namely the confusion and incoherence that come
+from continual macro additions. Naturally, for this
+weakness, I have a quotation from Leslie Lamport (1995).
+
+
+ Because Plain TeX is fixed, it seems
+likely that the Plain TeX community will fragment into
+numerous small islands in a sea of incompatibility.
+
+
+ Lamport's answer in his LaTeX is to
+systematize indefinite growth with constantly improving
+infrastructure, whereas Occam's answer is to prune the
+macro collection to restore simplicity to every
+document.
+
+
+ Laurent Siebenmann
+ <lcs@topo.math.u-psud.fr>
+
+
diff --git a/macros/generic/occam/occam.spc b/macros/generic/occam/occam.spc
new file mode 100644
index 0000000000..fc9b01db1d
--- /dev/null
+++ b/macros/generic/occam/occam.spc
@@ -0,0 +1,415 @@
+Part of the Occam utility.
+Laurent Siebenmann <lcs@topo.math.u-psud.fr>
+Master posting 1994, ftp ftp.math.u-psud.fr
+Alpha version 6-94 subject to change.
+
+
+ ====== Occam Syntax and Specifications ======
+
+ Occam is a system for extracting from a large macro file
+exactly those macros required by a given typescript. Its
+active parts are auditor.tex that determines which macros
+are necessary, and DefStrip a utility to deletes unnecessary
+macros.
+
+ The first created DefStrip utility is a QUEDM script; QUEDM
+is a editor with macro capabilities that is available on
+Macintosh computers. (Hopefully a version of this utility
+which is a ".tex" program like auditor.tex will follow in due
+time; it would be very analogous to the LaTeX "docstrip.cmd"
+utility.)
+
+(I) About the QUEDM Version of Summer 1994 (preliminary)
+
+ The Occam syntax is for TeX macro files. Its purpose is to let
+the "DefStrip" utility delete selected lines of the file with the
+help of a list audit.lst of "unused" control sequences (mostly
+macros).
+
+ These lines come in blocks of roughly two sorts:
+
+ (a) Material that is to be unconditionally deleted.
+
+ (b) Blocks surrounding lines beginning (modulo spaces) with
+one of:
+
+ \Def (variant of \def)
+ \gDef (variant of \gdef or \global\def)
+ \Let (variant of \let)
+ \gLet (variant of \global\let)
+ \Font (variant of \font)
+ \Mathchardef (variant of \mathchardef)
+ \Newsymbol (variant of \newsymbol)
+
+This list may be extended. A particular such block is to be deleted
+precisely if the macro name is designated in an external list called
+"audit.lst". output by the TeX utility "auditor.tex".
+
+
+MAIN SPECIFICATIONS of the Occam syntax.
+
+ ASCII (7-bit) text files only. No tab characters please.
+
+ The names of macro files conforming to this syntax should
+involve the suffix "aud" in some form if at all possible. For
+example, "x.sty" might become "x-aud.sty" or "x.occ", say
+"x-aud.sty" for future reference.
+
+ See internal documentation of "audit.tex" to generate a
+list of macros in "x-aud.sty" that are unnecessary in a
+given typesetting job "x.tex".
+
+ In x-aud.sty, the lines
+
+ %^ This file is formatted by <programmer>, <date>, <email>
+ % for use of the Occam utility posted on the CTAN archives
+ % (master posting 1994 on ftp ftp.math.u-psud.fr)
+ %% DO NOT ALTER "OCCAM" SIGNS <percent>^ or <percent>_ , ^_
+ %% UNLESS YOU UNDERSTAND THEM!
+ \let\Def\def \let\gDef\gdef \let\Let\let
+ \def\gLet{\global\let} \let\Font\font
+ \let\Mathchardef\mathchardef\let\Newsymbol\newsymbol
+ \let\MATHchardef\mathchardef\let\NEWsymbol\newsymbol
+ % \input auditor.tex %% keep auditor.tex available
+ %% comment out above line to suppress audit function. %_
+
+should appear in the header.
+
+ Two composite symbols %^ and %_ are employed to
+designate possible deletions. On its line %^ is always
+preceeded by spaces only (zero or more); similarly %_ is
+always followed by spaces only.
+
+ (A) Unconditionally deleted material:
+
+ %%^_ <delete me>
+
+Everything from %%^_ to the end of file is then deleted.
+To delete just a segment use
+
+ %^ <delete me> %_
+
+The deleted material can span many lines, but must include no
+blank line. We have just seen a block of such material above!
+Note that it may well contain \Def etc. but not %^, %_.
+
+ The unconditional deletions will occur in the order
+described, and before conditional deletions are considered.
+
+
+ (B) Conditionally deleted material:
+
+ \Def \somemacro<maybe delete me>%_
+
+may cause deletion of the block of lines beginning with \Def
+etc. and ending with %_. This material is really deleted
+precisely if the macro \somemacro is marked for deletion in
+the the file "audit.lst".
+
+ The material <maybe delete me> must contain no blank line nor %^,
+%_, \Def etc; but it is otherwise arbitrary; in particular, macro
+arguments, comments, and auxiliary definitions are OK.
+
+ Along with this material some additional preceding material
+is deleted, namely contiguous preceeding lines (if any) that (a)
+are nonempty and (b) contain no %_ (but \Def etc; are allowed).
+Typically, such preceeding material might be comments or commands
+"owned" by the macro being deleted. For example the whole block
+
+ %_
+ \ifx\undefined\eightpoint
+ \Def\eightpoint{}
+ \fi %_
+
+will be deleted precisely in case \eightpoint is marked as unused
+in audit.lst. (The first %_ could be replaced by a blank line.)
+
+ Note that %_ is not really a closing delimiter since it can
+exist in arbitrary numbers without belonging to a matching pair.
+For another example, consider:
+
+ \Def\amacro ...%_
+ \newtoks\btoks %_
+ \Def\cmacro ...%_
+
+Here, the the first two %_ prevent \newtoks\btoks being deleted
+--- in all circumstances.
+
+ The example
+
+ \Def\amacro ...
+ \Def\bmacro ...%_
+
+is incorrect because the block beginning with \Def\amacro ...
+contains \Def\bmacro.
+
+ There is a second type of conditional deletion. Suppose
+\amacro is not used and is so designated in audit.lst. It
+often occurs that several *disjoint* blocks of lines should be
+deleted along with \amacro. These blocks should be
+designated as follows:
+
+ %/^\amacro
+ <stuff>
+ %/_
+
+\amacro is called the sentinel (watchman).
+The sentinel's line %/^... must contain nothing more than
+%/^\amacro and blank space. The initial and terminal
+lines will vanish along with <stuff>.
+
+IN SUMMARY: the blocks %^...%_ are unconditionally deleted,
+while a block signalled by \Def, \gDef, etc. with the help of
+%_ and/or blank lines is deleted or not according as the macro
+following \Def etc. is marked for deletion in "audit.lst".
+Similarly for blocks with sentinel macro. None of these blocks
+for conditional or unconditional deletion is allowed to contain
+an empty line nor any extraneous %^,%_,%/^,%/_,%%^_,\Def,
+\gDef, etc. The blocks introduced by \Def, \gDef, etc. include
+material extending backward as far as (but not including) a
+preceding line that is blank or terminated by one of %_,%/_. No
+such extension for blocks introduced by %^, %/^ is allowed ---
+nor would it be helpful.
+
+ Beyond these primary deletions, the utility DefStrip
+performs a few auxiliary tasks:
+
+ --- All remaining \Def, \gDef, etc. are converted to \def,
+\global\def, etc.. Also, if a remaining %_ is alone on its line
+(spaces ignored), the whole line disappears. And each remaining %_
+*not* alone on its line becomes % (this is the only deletion that
+can affect a line that survives.)
+
+ --- any empty line sequence (usually created by the deletion of
+blocks of lines) is reduced to a single empty line.
+
+ --- Residual appearances in x-aud.sty of macros marked for
+deletion in audit.lst will be marked by %%[VESTIGE] (on a new
+following line). They should be considered a failure of the current
+Occam format".
+
+ Users may find the vestiges mentioned above hard to deal with.
+(Can they simply be deleted?) Thus programmers should attempt to
+set up "Occam" formatting so as to assure that vestiges
+never occur; for their part, users should report vestiges to the
+programmers along with the involved audit.lst file from
+auditor.tex.
+
+ It is the programmer's or the user's responsibility to
+assure that the deletions made by the DefStrip utility result
+in a useful TeX macro file. The DefStrip utility is of little
+help here since it does not understand the macros. Thus it is
+expected that programmers take on the task of preparing macro
+files in Occam format. In most cases, anyone who programs TeX
+macros at an intermediate level will find it an easy task to
+put a macro file in Occam format. Beware that a good deal of
+testing and a bit of cleverness is usually necessary to assure
+that the Occam formatting does the job desired and in the most
+efficient way.
+
+
+ ---------------------------------
+
+
+ The following is documentation for additions made in 1995.
+Example 2 (with harvmac.occ) illustrates these features.
+
+EXPLANATIONS AND EXTRAPOLATIONS.
+
+ (a) Unnecessary macros nested within macros can also be be
+eliminated. Currently this is is achieved quite trivially by making
+several passes through the "defstrip" utility and the example below
+is conveniently explained in terms of several passes. However, the
+TeX version of "defstrip" will almost certainly reduce this to a
+single pass; the audit.tex utility already acts in a single pass.)
+
+ Here is a generic "example". The original
+macro file contains:
+
+\def\MACRO{<stuff1>%
+ <stuff2>
+ \def\macro{<stuff3>}%
+ <stuff4>
+ <stuff5>}
+
+An Occam formatted version is:
+
+\Def\MACRO{<stuff1>%#_
+ <stuff2>
+ \DDef\macro{<stuff3>}%
+ <stuff4>%#_
+ <stuff5>}%_
+
+ In relation to audit.tex, the macro \DDef behaves much like \Def
+except that the associated tag distinguishing unused macros in
+audit.lst is ** in place of *.
+
+ Note that if \MACRO is unused then the whole block
+vanishes.
+
+ Suppose not. Then, on first pass of the macro file through
+"defstrip", \DDef is converted to \Def. There is an accounting
+procedure set up in audit.lst in terms of * and #. First off all **
+become *# (and *** would become *## if there were any, etc.).
+At the close of the first pass the marks %#_ in WW.sty are
+converted %_; at the same time the file audit.lst undergoes changes
+** ==> *# ==> #* and * ==> #\, i.e. asterisks move right or die on
+backslash. On the second pass through "defstrip", one is treating:
+
+\def\MACRO{<stuff1>%_
+ <stuff2>
+ \Def\macro{<stuff3>}%
+ <stuff4>%_
+ <stuff5>}%
+
+and in response to an entry #*\macro in audit.lst
+"defstrip" will conditionally delete the block
+
+ <stuff2>
+ \Def\macro{<stuff3>}%
+ <stuff4>%_
+
+i.e this block is deleted precisely if \macro is not "used".
+(Only a programmer can guess whether this elimination is
+safe!)
+
+ (b) Often one wants to delete other material along with the
+block surrounding \macro; for that, the following "sentinel"
+approach mentioned elsewhere is useful. The provisional
+syntax for a block to be eliminated with \MACRO is
+
+%/^\MACRO
+<stuff 6>
+%/_
+
+and for \macro it would be
+
+%#/^\macro
+<stuff 6>
+%#/_.
+
+It is OK to use _ in place of /_ in the above syntax;
+But not ^ in place of /^ since that would give an
+unconditional deletion.
+
+ (c) There is also a notion of nested *un*conditional
+deletion useful for deleting nested diagnostic macros as
+in (d) below. The syntax is:
+
+%#^
+<stuff6>
+%#_
+
+ (d) For text fonts, \Font works reasonably well. But it
+fails badly for math font systems. The latter are
+particularly difficult to minimize because TeX seems not to
+readily indicate which fonts it is using for math. At a
+given pointsize the following \everymath device is used in
+harvmac.occ; it manages to tell whether math mode has been
+called.
+
+ %%% Title fonts
+ %#/^\TitlepointMathTest
+ \font\titlerms=cmr7 \tfontsize
+ \font\titlermss=cmr5 \tfontsize
+ \font\titlei=cmmi10 \tfontsize\relax \skewchar\titlei='177
+ \font\titleis=cmmi7 \tfontsize\relax \skewchar\titleis='177
+ \font\titleiss=cmmi5 \tfontsize\relax \skewchartitleiss='177
+ \font\titlesy=cmsy10 \tfontsize\relax \skewchar\titlesy='60
+ \fonttitlesys=cmsy7 \tfontsize\relax \skewchar\titlesys='60
+ \font\titlesyss=cmsy5 \tfontsize\relax \skewchar\titlesyss='60
+ %#/_
+ %^
+ \DDef \TitlepointMathTest{\relax}
+ %% a diagnostic that never survives%_
+ %% note the peculiar nesting: %#^ would be illegal.
+ %% The nesting below is the other way about.
+ %_
+
+ \font\titlerm=cmr10 \tfontsize
+ \Def\titlefont{\textfont0=\titlerm
+ \def\rm{\fam0\titlerm}%
+ \rm
+ %#^\TitlepointMathTest
+ \textfont0=\titlerm \scriptfont0=\titlerms
+ \scriptscriptfont0=\titlermss
+ \textfont1=\titlei \scriptfont1=\titleis
+ \scriptscriptfont1=\titleiss
+ \textfont2=\titlesy \scriptfont2=\titlesys
+ \scriptscriptfont2=\titlesyss
+ %#_
+ %#^
+ \everymath{\TitlepointMathTest}%
+ %#_
+ }%_
+
+For witten94.tex this device allowed suppression of the math
+system at title pointsize, an appreciable saving.
+\TitlepointMathTest is a diagnostic macro that in no event
+will survive. Nevertheless it controls the inclusion
+or omission of two separated code segments.
+
+ Essentially all the features of the Occam syntax so far
+mentioned are put to work in these few lines so it is worth
+pausing to think about it all.
+
+ (e) This test piece has caused second thoughts about the
+policy of systematically notifying the user of "vestigeal"
+macros remaining in the pruned macro file, i.e. unused macros
+that remain in W.tex but whose definitions have been deleted
+by "defstrip"; it can be helpful to stumble on an undefined
+macro with a suggestive name. The notification will be
+probably be in some sense optional.
+
+ (f) It is perhaps unwise to wring the last unused font out of
+an article's font system --- as that may interfere with
+revision. However, ridiculously wasteful font systems abound,
+and the problem of analysing math font use is in principle
+challenging. Below I venture to point out two approaches that
+were *not* employed in harvmac.occ. Are there others worth
+trying?
+
+ (i) To test whether a given math font is really used,
+replace it by a math font with no characters \nullmath and look
+for missing character complaints by TeX. This approach is
+powerful but clumsy and slow because a huge .log file must
+examined.
+
+ Here is a construction via initex:
+
+ \font\nullmath=\nullfont
+ \fontdimen23\nullmath=1pt \skewchar\nullmath='60
+ \input plain\dump
+
+Second construction: *create* font "empty" beforehand
+as a .dvi file.
+
+ \font\nullmath=empty at 1 pt
+ \fontdimen23\nullmath=1pt \skewchar\nullmath='60
+
+Making do otherwise:
+
+ \ifx\undefined\nullmath \font\nullmath=logo10 at 1 pt \fi
+ \fontdimen23\nullmath=1pt \skewchar\nullmath='60
+
+This last way is easy but not perfect as logo has a few
+characters. (Math fonts are formally required to have up to
+23 dimensions).
+
+ (ii) To discover whether any math font \myfont is needed,
+examine the ".dvi" file. A list of the used fonts from the .dvi
+file (.tfm names and sizes) can then be assimilated first off by
+audit.tex and used to decide whether \myfont should bear an
+asterisk in audit.lst. Then the power of \ffont to eliminate math
+(and other) fonts would be comparable to the power of \Def to
+eliminate unused macros. Perfection seems never attainable: in
+principle, one can use a font without it showing up in output to
+the .dvi!.
+
+
+NATURAL THINGS THAT ARE NOT (YET) IN PLACE
+ --- nesting beyond depth two is not yet supported. The only
+problem is to program for all levels at once.
+ --- at depth two, \FFont and \DDef exist, but \LLet and others do
+not yet exist.
+
diff --git a/macros/generic/ofs/README b/macros/generic/ofs/README
new file mode 120000
index 0000000000..f02823b706
--- /dev/null
+++ b/macros/generic/ofs/README
@@ -0,0 +1 @@
+readme.ofs \ No newline at end of file
diff --git a/macros/generic/ofs/changes.txt b/macros/generic/ofs/changes.txt
new file mode 100644
index 0000000000..0d6104d6bc
--- /dev/null
+++ b/macros/generic/ofs/changes.txt
@@ -0,0 +1,58 @@
+
+2001/08/24 OFS released
+2001/08/27 \ifknownfam added
+ files allfonts.tex, allfonts.sty added
+2001/08/30 \dots and \ldotp definitions added in ofsdef.tex
+2001/09/10 a little changes in comments
+ readme.ofs released
+2001/11/15 Bug removing: \warnT <-> \warnF in ofs.tex
+ macros in ofsdoc.tex work now with PDFTeX version 14
+2002/06/10 Bug in a35.tex fixed: pgk.. -> pbk.. (one Bookman metric).
+ ofs.tex: \savefontid + \restorefontid added.
+ ofsmtdef.tex: new file for MathTimes support included.
+2002/06/18 ofsmtdef.tex: bugfix \mathcode`=="2244 -> \mathcode`=="3244
+2002/06/26 ofs.tex: bug in \savefontid fixed: \relax added after fontmetric
+2002/10/27 ofs.tex: The (Variant) in \loadtextfam introduced
+ \addcmd introduced
+ \def\relax{} in \setfosize macro added
+ \ifx\sgfamily\newfamily added in \setfontfamily
+ ofs.sty: \addcmd introduced
+ ofsdef.tex: The (Variants) for Times+Helvetica added.
+ a35.tex: The (Variants) added.
+ ofscatal.tex: a new macro package ofscatal.tex introduced
+ ofsdoc.tex,ps,pdf: The documentation upgraded.
+2003/02/25 ofs.sty: \setfonts sets catcode of "-" (bug fixed by Z. Wagner)
+ ofsdoc-e.tex,ps,pdf: (English documentation) released
+ ofsdoc.tex,ps,pdf: little corrections
+2003/03/27 ofsmtdef.tex: \skewchar settings, if Times then mtmi loaded
+ ofsdef.tex: \skewchar settings, warning for bad \fomenc added
+2004/02/* ofs for plain very improved: \loadingenc,
+ \modifyenc, \modifydef, \modifylist,
+ \registerenc, \ofshexbox, \ofshexboxdef,
+ \defaultextraenc, \extraenc, \tryloadenc,
+ \knownfam, \registeredfam, \knownchar,
+ \printaccentwarn, \printcharacterwarn, \characterdel, \accentdel,
+ support for EC fonts for plain added,
+ support for 8c encoding added,
+ you can re-declare declared font family,
+ \sum, \int, \prod in displaystyle redefined in PS math. encoding.
+ The interactive ofstest.tex macro introduced,
+ Czech documentation upgraded.
+2004/03/12 ofs-8c.tex: \text.. prefixes added to math names from plain.
+2004/03/13 ofs.tex: \characterdef does not re-define macros,
+ \tryloadenc is called from \loadtextfam
+ \showfonts + \listfamilies reimplemented
+ ofs-{8z,8t,8c,6s}.tex: changes according to new \characterdef
+ slido.tex: changes according to new \characterdef
+2004/05/12 ofs.tex: many new features (see ofs.tex or ofsdoc.tex)
+ ofsdef.tex: upgraded
+ ofsdoc.tex: upgraded
+ ofsdoc-e.tex: upgraded
+ many ofs-<encoding>.tex files added
+ a117.tex, amsfn.tex, mtfn.tex, txfn.tex, pantyk.tex added
+ ofsmtdef.tex is only wrapper file to mtfn.tex
+2004/05/20 ofs.tex: \catcode`\|=12 set temporary to avoid ConTeXt conflict
+2006/03/30 ofs.tex: \restorefontid: {} -> \begingroup\endgroup because
+ {} makes empty \hbox in math mode.
+2010/02/10 pantyk.tex corrected
+
diff --git a/macros/generic/ofs/doc/ofsdoc-e.pdf b/macros/generic/ofs/doc/ofsdoc-e.pdf
new file mode 100644
index 0000000000..32cf716e5f
--- /dev/null
+++ b/macros/generic/ofs/doc/ofsdoc-e.pdf
Binary files differ
diff --git a/macros/generic/ofs/doc/ofsdoc-e.tex b/macros/generic/ofs/doc/ofsdoc-e.tex
new file mode 100644
index 0000000000..1c7669c441
--- /dev/null
+++ b/macros/generic/ofs/doc/ofsdoc-e.tex
@@ -0,0 +1,2394 @@
+% A documentation for OFS package (pseudo English, sorry)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% July 2001 Petr Olsak
+
+\magnification\magstephalf % use plain or csplain
+
+\headline={\llap{\tt May 2004}\hfil See the ofsdoc.tex for Czech version
+ of this documentation.\global\headline={\hfil}}
+
+\hoffset=4pc
+\voffset=1pc
+\hsize=31.6pc
+\vsize=49pc
+\raggedbottom
+\parindent=15pt
+\emergencystretch=2em
+
+\font\smallbf=csb10 at7pt
+\font\smalltt=cstt8
+\font\smallit=csti8
+\font\smallrm=csr8
+\font\titulfont=\fontname\tenbf\space scaled\magstep4
+\font\bigbf=\fontname\tenbf\space scaled\magstep1
+
+\def\Red{}
+\def\Black{}
+\def\Blue{}
+\def\Green{}
+\def\beglink#1{}
+\def\endlink{}
+\def\aimlink#1{}
+
+\def\uv#1{``#1''}
+
+\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%%
+\ifnum\pdfoutput>0
+
+\ifx \pdfstartlink\undefined %%% PDFTeX version <= 13
+ \let\pdfstartlink=\pdfannotlink
+\fi
+
+\def\beglink#1{% % Zaèátek textu odkazu, #1 je klíè odkazu
+ \Green \pdfstartlink height9pt depth3pt
+ attr{/Border[0 0 0]} goto name{#1}\relax}
+\def\endlink{\pdfendlink\Black}
+
+\def\aimlink#1{% % Místo cíle odkazu, #1 je klíè odkazu
+ \expandafter\ifx \csname aim:#1\endcsname \relax
+ \expandafter\gdef \csname aim:#1\endcsname {}%
+ \vbox to0pt{\vss\hbox{\pdfdest name{#1} fith}\kern15pt}%
+ \fi
+}
+\def\pdfsetcmykcolor#1{\special{PDF:#1 k}}
+\def\Red{\leavevmode\pdfsetcmykcolor{0.1 0.9 0.9 0}}
+\def\Black{\leavevmode\pdfsetcmykcolor{0 0 0 1}}
+\def\Green{\leavevmode\pdfsetcmykcolor{0.9 0.1 0.9 .3}}
+\def\Blue{\leavevmode\pdfsetcmykcolor{0.9 0.9 0.1 0}}
+
+\pdfcompresslevel=9
+\pdfinfo{/Author (Petr Olsak)
+ /CreationDate (July 2001)
+ /ModDate (May 2004)
+ /Creator (TeX)
+ /Producer (pdfTeX)
+ /Title (OFS: Olsak's Font System)
+ /Subject (Documentation)
+ /Keywords (TeX, fonts)
+}
+
+\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%%
+
+
+\def\PLAIN #1:{{\smallbf \Red PLAINTEX\Black\if|#1|\else\space#1\fi}:}
+\def\LATEX #1:{{\smallbf \Red LATEX\Black \if|#1|\else\space#1\fi}:}
+\def\OBA #1:{{\smallbf \Red PLAINTEX+LATEX\Black \if|#1|\else\space#1\fi}:}
+
+\newcount\secnum \newcount\subsecnum
+
+\def\sec #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip
+ \vskip2\baselineskip
+ \subsecnum=0 \advance\secnum by1
+ \noindent{\bigbf\llap{\the\secnum.\quad}#1}\par\nobreak\medskip}
+\def\subsec #1\par{\removelastskip\bigskip
+ \advance\subsecnum by1
+ \noindent{\bf \llap{\aimlink{\the\secnum.\the\subsecnum}%
+ \the\secnum.\the\subsecnum.\quad}#1}\par\nobreak\medskip}
+\def\title #1\par{\vglue2\baselineskip
+ \centerline{\titulfont #1}\vskip2\baselineskip}
+
+\def\LaTeX{La\TeX}
+
+\catcode`<=13
+\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}}
+\def\,{\thinspace}
+
+{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
+\def\begtt{\medskip\bgroup \setverb \catcode`@=0 \activespace
+ \parindent=0pt \catcode`\"=12
+ \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1}
+ \obeylines \startverb}
+{\catcode`\|=0 \catcode`\\=12
+|gdef|startverb#1\endtt{|tt#1|egroup|medskip|testpar}}
+\long\def\testpar#1{\ifx\par#1\else\noindent\fi#1}
+
+\catcode`"=13
+\def"{\hbox\bgroup\setverb\activespace\tt\readverb}
+\def\readverb #1"{#1\egroup}
+
+\def\begitems{\medskip\bgroup \catcode`*=13 }
+{\catcode`*=13 \gdef*{\item{$\bullet$}}}
+\def\enditems{\medskip\egroup}
+
+\newwrite\indout
+\immediate\openout\indout=\jobname.ind
+\def\inl[#1]{\strut
+ \write\indout{\noexpand\indexentry{#1}{\the\pageno}}%
+ \vadjust{\vbox to0pt{\vss
+ \hbox to\hsize{\llap{{\aimlink{#1}\smalltt\Blue\char`\\ #1%
+ \ifx\extratext\empty\else\space\extratext\fi\Black}%
+ \kern2pt\quad}\strut\hfil}%
+ \hrule height0pt}}\def\extratext{}}
+\def\inll[#1 #2]{\def\extratext{#2}\inl[#1]}
+\def\indexentry #1#2{\expandafter \ifx \csname ind:#1\endcsname \relax
+ \expandafter \def \csname ind:#1\endcsname {#2}%
+ \else
+ \expandafter \edef \csname ind:#1\endcsname {%
+ \csname ind:#1\endcsname, #2}%
+ \fi
+}
+\def\pg[#1]{\csname ind:#1\endcsname}
+
+\chardef\back=`\\
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\title OFS: The Ol\v s\'ak's Font System
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The OFS is a \TeX{} macro for managing large sets of fonts. You can
+select the appropriate fonts comfortably by the names from font
+catalog used by a font foundry. It means you don't have to remember short
+names of tfm files and/or short names of NFSS font families. The user
+interface of this macro is the same in \LaTeX{} and in plain but there
+are two independent implementations of this macro: first and more
+elaborate: based only on plain macros; second: based on NFSS macros
+for \LaTeX{} users.
+
+If a text in this documentation is applicable only for the plain\TeX{}
+version of the OFS then the text is introduced by the word \PLAIN:.
+If a text is applicable only for OFS version based on NFSS then it is
+introduced by the word \LATEX:.
+
+After the OFS macro is loaded, the following message is printed:
+
+\begtt
+@PLAIN: OFS (Olsak's Font System) based on plain initialized. @char`<ver.>
+@LATEX: OFS (Olsak's Font System) based on NFSS initialized. @char`<ver.>
+\endtt
+Main features of the OFS:
+
+\begitems
+* The user interface is the same for plain and for \LaTeX.
+* You can use the "\fontusage" command which displays a short description
+ of OFS macros in terminal and in the log file.
+* You can use the real font names from font catalog.
+* You can use the font divided into two \TeX{} metrics (basic and
+ extended tfm) and they seem from the user's point of view to be only one
+ font. This is useful for fonts with more than 256 characters if you
+ don't want to use Omega.
+* You can choose the \TeX{} internal encoding of fonts for your
+ language in the beginning of your document. This feature is commonly used
+ for Czech and Slovak languages: there are \TeX{} fonts which encode
+ the alphabets of these languages by Cork (T1 encoding) or by
+ ISO-8859-2 (IL2 encoding). T1 font encoding is common in LaTeX
+ world, whereas IL2 encoding is widely used in the Czech and Slovak
+ \TeX{} community.
+* The OFS defines the language of declaration files. These files
+ define mapping of full names of fonts to \PLAIN: tfm
+ names or \LATEX: NFSS short names of the font families.
+* \PLAIN: You can use individual variants of fonts in an indepent manner
+ in similar way as in NFSS (family, size, encoding, variant).
+* \PLAIN: You can declare different fonts for different sizes
+ in the declaration files (usable for Computer Modern family first
+ of all).
+* \PLAIN: The OFS includes support of the math fonts manipulation
+ when the PostScript fonts and/or fonts at different sizes are
+ used.
+* Interactive macro "ofstex.tex" enables printing the paragraph samples
+ in the chosen font families, printing the font table, font registers,
+ samples of the mathematic and the lists of characters, including
+ their \TeX\ sequences. All to do is to write "tex ofstest [allfonts]"
+ or "csplain ofstest [allfonts]" on the command line and to follow
+ the orders on the terminal.
+\enditems
+
+\sec The font families
+%%%%%%%%%%%%%%%%%%%%%%
+
+The most current font families have the four commonly used variants:
+normal: ("\rm"), bold ("\bf"), italic ("\it")
+and bold italic ("\bi")\inll[rm \back bf \back it \back bi].
+These variants are called \uv{standard variants} in OFS.
+After the font family is activated by "\setfonts" command (see
+bellow), you can use the commands "\rm", "\bf", "\it" a "\bi"
+as a variant switches for the current font family. The first three
+commands are well known in plain and the fourth command switches into
+BoldItalic variant and it is introduced in the OFS.
+
+Additional \uv{nonstandard variants} can be declared in some font families
+and vice versa some \uv{standard variants} can be missing in
+other font families. Only the "\rm" variant has to be present in all
+families.
+
+The original names of fonts can be a little different from the names mentioned
+above in some font families but the font switches names "\rm", "\bf",
+"\it", "\bi" can be unchanged. For example the family Helvetica has
+the variant \uv{Oblique}, but we are still using the "\it" switch
+for this variant.
+
+If you want to use the font switches from another font families
+at the same time, these switches can be declared by the "\fontdef"
+command (see bellow).
+
+The font families are declared in the declaration files. These files
+have the similar meaning in the plain\TeX{} as {\tt fd} files in NFSS. The
+recommended suffix for the files are \PLAIN:~{\tt tex} (they map the
+family names to \TeX{} metrics) or \LATEX: {\tt sty} (they map the
+family names to the NFSS short family names). These files can include
+more than one font family declaration. The names of these files are
+chosen in order to you can recognize which families are declared
+here. Examples:
+
+\begtt
+@PLAIN: @LATEX:
+sjannon.tex, sjannon.sty ... the big Jannon family by stormtype.com
+a35.tex, a35.sty ... the basic 35 fonts by Adobe
+\endtt
+
+The user chooses from these files only such files needed by his/her
+document and writes the names of these files into the header of
+the document. For more simplicity, \uv{global} files
+include the \PLAIN: "\input" or \LATEX: the "\RequirePackage"
+command for the single declaration files. Examples:
+
+\begtt
+skatalog.tex, skatalog.sty ... all fonts by stormtype.com
+allfonts.tex, allfonts.sty ... all fonts at your TeX installation
+\endtt
+
+\sec The user interface
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsec The header
+%%%%%%%%%%%%%%%%%%
+
+For example, let us suppose that we will use fonts from Jannon and
+DynaGrotesk family by Storm Type Foundry. Their
+declaration files are included in the "storm" directory. You can get
+the \TeX{} metrics plus the OFS macro package from
+"www.cstug.cz/stormtype". You can buy the real fonts from Storm Type
+Foundry. See "www.stormtype.com" for more details.
+We need to use
+\PLAIN: "sjannon.tex", "sdynamo.tex";
+or \LATEX: "sjannon.sty", "sdynamo.sty".
+declaration files. The first letter "s"
+in their file name means that the fonts are made
+by Storm Type Foundry. We can use the following line in the header of
+our document:
+
+\begtt
+@PLAIN: \input ofs [sjannon, sdynamo] % space before "[" is necessary
+@LATEX: \usepackage [sjannon,sdynamo]{ofs}
+\endtt
+
+Now we can use the families declared in "sjannon" and "sdynamo"
+declaration files.
+The "\showfonts"\inl[showfonts] command writes a list of available
+families on terminal and to a log file. In the above case, the
+"\showfonts" lists the following text:
+
+\begtt
+OFS (l.1): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+sjannon.tex:
+ [JannonAntikva/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonText/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonCaps/] \rm, \bf, \it, \bi
+sdynamo.tex:
+ [DynaGroteskDXE/] \rm, \bf, \it, \bi
+ [DynaGroteskRXE/] \rm, \bf, \it, \bi
+ [DynaGroteskLXE/] \rm, \bf, \it, \bi
+ ... <next 15 families of DynaGrotesk> ...
+\endtt
+
+The first 6 families are declared in OFS internally (you need not write
+any declaration file to use them). The next families are declared in
+specified declaration files.
+
+Beside each family are listed option switches. The first
+four switches set \uv{standard variants}. If a standard
+variant is not available then a dash sign is listed instead of
+the switch. The fifth and any other switches correspond to the
+\uv{nonstandard variants}, if these exists. For example,
+the JannonAntikva and JannonText families have the extra variants
+medium and medium-italic ("\mr" and "\mi" switches are used here).
+
+If you use the "\fontusage"\inl[fontusage] command, then short
+description of OFS use is printed to the terminal and into the log file.
+
+We mentioned the header in the form:
+
+\begtt
+@PLAIN: \input ofs [<file>, <file>, ...]
+@LATEX: \usepackage [<file>,<file>,...]{ofs}
+\endtt
+%
+Instead of the header of this type you can also include definition
+files directly. In such case, the "ofs.tex"
+or "ofs.sty" do not have to be explicitly mentioned:
+
+\begtt
+@PLAIN: \input <file> \input <file> ...
+@LATEX: \usepackage {<file>} \usepackage {<file>} ...
+\endtt
+%
+Example:
+
+\begtt
+@PLAIN: \input sjannon \input sdynamo
+@LATEX: \usepackage {sjannon} \usepackage {sdynamo}
+\endtt
+%
+We don't recommend to mix the both variants of the header (in \LaTeX{}
+specially).
+
+\subsec The {\tt\back setfonts} command
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Let us suppose\inl[setfonts]
+that the "sjannon" and "sdynamo"
+declaration files were given in the header for the next examples.
+For example,
+the command:
+
+\begtt
+\setfonts [JannonText/12pt]
+\endtt
+%
+sets the switches "\rm", "\bf", "\it", "\bi", "\mr" and "\mi".
+These switches set variants of the JannonText family to
+12pt font size.
+
+The current variant used before "\setfonts" command is saved, but the
+family/size parameters of the current font are changed by this
+command. For example, if the BoldItalic variant for the TimesRoman was a
+current then the BoldItalic of JannonText family of size 12pt is
+current font set by "\setfonts [JannonText/12pt]". If the new family
+has the current variant switch undeclared then the "\rm" variant is
+used.
+
+The "\setfonts" makes all changes locally, so that \TeX{} returns to
+the previous font and font family after the group is ended.
+
+The parameters of the "\setfonts[<FamName>/<size>]" command can be empty:
+the "\setfonts[<FamName>/]" switches to the new font family but keeps
+the current font size and the "\setfonts[/<size>]" changes the font
+size for all corresponded variant switches but keeps the current
+family unchanged. The command "\setfonts[/]" is syntactically correct
+but without any effect.
+
+The CMRoman/10pt is default <FamName>/<size> after OFS for plain\TeX{}
+is initialized.
+
+The parameter <FamName>, unless not empty has to be the same as the
+name of a family listed by the "\showfonts". This parameter is case
+sensitive. If the parameter does not match any font family from given
+declaration files, the "\setfonts" command acts the same as the
+"\showfonts" command: all available families are listed. Thus, you can
+use the "\setfonts [?/]" with the same effect as the
+"\showfonts".
+
+\LATEX: The <FamName> parameter can be not only the \uv{long-named}
+font family from "\showfonts" list, but the short name from NFSS can
+be used too. For example, the "\setfonts[Times/]" and the
+"\setfonts[ptm/]" has the same effect in \LaTeX.
+
+\OBA:
+The parameter <size> can be written in more ways:
+
+\begitems
+* <number> \dots{} example: "12", "17.4",
+* <number><unit> \dots{} example: "12pt", "17.4pt", "10dd",
+* "at"<number><unit> \dots{} example: "at12pt", "at17.4pt", "at10dd",
+* "scaled"<integer> \dots{} example: "scaled1200", "scaled\magstep3",
+* "mag"<decimal number> \dots{} example: "mag1.2", "mag.7", "mag2.0".
+\enditems
+
+The first three possibilities have the same meaning. The keyword "at" is
+optional and if you omit the keyword and the unit, the "at<number>pt"
+is used. We can use the "true.." unit if we need not the relative unit
+associated by current "\magnification" factor: for example:
+"17truept". If the "at" keyword is present then the unit can't be
+omitted---it means: "at12" is not correct, but
+"at12pt" or simply "12" are correct values.
+
+The "scaled" keyword has the same meaning as in \TeX{} primitive
+"\font". For example, if the design size of the font is
+"10pt" (this is a common value) then "scaled1200" is the same as
+"at12pt".
+
+The last possibility (keyword "mag") is a new feature in OFS.
+The new font size is calculated from the current font size by
+multiplying by <decimal number>.
+For example, by the command "\setfonts[/12pt]" followed by "\setfonts[/mag2.]"
+the current font size is changed to 24\,pt.
+The decimal point is required in the <decimal number>.
+Another example:
+
+\begtt
+\def\small{\setfonts[/mag.7]}
+The text {\small is smaller \small and smaller \small and more smaller}
+and the normal size is used here.
+\endtt
+
+Note: the <size> parameter in "\setfonts" command changes only the
+font size but not the "\baselineskip". The user has to do the
+"\baselineskip" setting by another way.
+\LATEX: The "\setfonts" sets the "\baselineskip" to the current value
+stored in NFSS. It means that if you want to change the
+"\baselineskip" register for your goal, you have to do it
+{\it after} "\setfonts" command in \LaTeX{}.
+
+You can set only one variant of a font family (not the whole family) by
+the "\setfonts" command. This is done if the ``"-<variant>"'' is appended
+to the <FamName> parameter. In such case, the switches of the current
+family are not changed and only the new font is set. The
+<variant> means the name of variant switch here. Examples:
+
+\begtt
+\setfonts [JannonText-it/12] ..... sets the italics of the JannonText
+ at 12 pt as the current font.
+ The \rm, \bf, etc. are unchanged
+\setfonts [JannonText-rm/] ....... sets the normal variant of the
+ JannonText at the current size.
+\setfonts [CMTypeWriter-sl/] ..... sets the cmsltt font as the current
+ font at the current size.
+\endtt
+
+You can omit the family name even if the "-<variant>" is present.
+The actual family is substituted in such case. Examples:
+
+\begtt
+\setfonts [JannonText/12]
+\setfonts [-bf/17] ... variant Bold of JannonText, size 17pt.
+ Selectors \rm, \bf, \it and \bi keeps its
+ original meaning: they switches between
+ variants of JannonText in 12pt size. For
+ example, the next command \setfonts[Times/]
+ sets the Times family in 12pt size.
+BUT:
+\setfonts [/17]\bf ... variant Bold of current family, size 17pt.
+ Selectors \rm, \bf, \it and \bi switches
+ in 17pt size now.
+\endtt
+
+\LATEX: The text above about the keeping of original
+meaning of variant switches is not true in \LaTeX{} because it may
+break the NFSS philosophy. Thus, the commands
+"\setfonts [-bf/17]" and "\setfonts [/17]\bf" has the same meaning in
+\LaTeX.
+
+
+\subsec The commands {\tt\back fontdef} and {\tt\back addcmd}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The "\fontdef"\inl[fontdef] command declares a new font switch.
+
+\begtt
+\fontdef \<fontswitch> [<FamName>/<size>]
+\endtt
+%
+This declaration is roughly similar to
+
+\begtt
+\gdef \<fontswitch> {\setfonts [<FamName>/<size>]}
+\endtt
+
+\PLAIN: If the ``"-<variant>"'' is appended in <FamName> and the
+parameter <size> is not empty and it is not specified by "mag" keyword
+then the new declared control sequence "\<fontswitch>" is not a macro
+but it is implemented by "\global\font\<fontswitch>".
+It is called \uv{fixed font} in an~OFS terminology.
+The user can implement his/her native "\<fontswitch>" by "\fontdef"
+without a knowledge about "tfm" filename.
+
+\LATEX: The declared "\<fontswitch>" is always implemented as a macro
+including the "\setfonts" command. The reason is that the user access
+to native "\<fontswitch>" is not simply possible in NFSS.
+
+\OBA:
+You can type the exclamation mark \uv{!} instead of <FamName> and the
+family current in the moment the "\fontdef" command was used is substituted.
+On the other hand the empty <FamName> means that the family current in the moment
+the "\<fontswitch>" command was used is substituted. You can use the
+exclamation mark \uv{!} instead of <size> parameter with the same meaning.
+Examples:
+
+\begtt
+\setfonts [JannonAntikva/]
+\fontdef \small [/7] % \small = \setfonts [/7pt]
+\fontdef \sffam [DynaGroteskR/] % \sffam = \setfonts [DynagroteskR/]
+\fontdef \bigf [Times/17] % \bigf = \setfonts [Times/17pt]
+\fontdef \ttfam [Courier/] % \ttfam = \setfonts [Courier/]
+\fontdef \mylogo [Times-rm/mag.8] % \mylogo = \setfonts [Times-rm/mag.8]
+ % the fontsize will be always
+ % 0.8 times of the current size.
+\fontdef \timbf [Times-bf/12] % \timbf = fixed-font, the same as:
+ % \global\font\timbf=ptmb8z at12pt
+\fontdef \jansmall [!/7] % \jansmall=\setfonts[JannonAntikva/7]
+\fontdef \janbi [!-bi/17] % \janbi = fixed-font, the same as:
+ % \global\font\janbi=sjnbi8z at17pt
+\fontdef \tt [Courier-rm/!] % \tt = fixed-font, the same as
+ % \global\font\tt=pcrr8u at10pt
+\endtt
+
+The declaration of the "\<fontswitch>" by "\fontdef" command is global
+but the "\<fontswitch>" itself has a local effect in the place where it is
+used.
+
+Since OFS version Oct.~2002, the "\addcmd"\inl[addcmd] command is
+supported, which makes possible to concentrate whole font
+management in one place. The format of "\addcmd" is:
+
+\begtt
+\addcmd \<fontswitch> {<commands>}
+\endtt
+%
+The meaning is same as
+
+\begtt
+\def\<fontswitch> {<the original meaning of fontswitch><commands>}
+\endtt
+%
+You can include new <commands> into the original content of the macro
+"\<fontswitch>". The control sequence "\<fontswitch>" has to be
+defined as a macro without parameters or as unexpandable control
+sequence (by "\font", "\chardef" etc.) before "\addcmd" is used.
+The "\addcmd" redefines "\<fontswitch>" as a macro without parameters in
+all cases. You can apply "\addcmd" on the same "\<fontswitch>"
+more than once.
+
+Examples:
+
+\begtt
+\setfonts [JannonText/]
+\fontdef \footnotefont [!/7]
+\addcmd \footnotefont {\rm \baselineskip=9pt \relax}
+\fontdef \sectionfont [!/12]
+\addcmd \sectionfont {\bf \let\it=\bi}
+\endtt
+
+\subsec Test of a family name existence
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\PLAIN:
+ You are able to test the font family declaration in your own marcos,
+ it means whether the font is loaded from the file of declarations.
+ The sequence "\knownfam <FamilyName>? \iftrue"\inl[knownfam]
+ is used for such test.
+ This sequence expands to "\iftrue", if the font family is declared
+ otherwise expands to "\iffalse". The parameter <FamilyName> has to be
+ brought in without the variant specification.
+
+\OBA: By reason of the backward compatibility with the older version of OFS
+ the "\ifknownfam [<FamilyName>]"\inl[ifknownfam] does the same as
+ "\knownchar" macro.
+ Since the version Feb.~2004 of the OFS for plain it is recommended
+ to use "\knownfam", because of correct alignment of the primitives
+ "\if*", "\else", "\fi". La\TeX\ user can define "\knownfam" quite easily.
+
+\subsec \LATEX: OFS and NFSS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This section is intended only for \LaTeX{} users.
+The command\inl[OFSfamily]
+
+\begtt
+\OFSfamily [<FamName>]
+\endtt
+%
+converts the long family name to internal short NFSS family name.
+For example
+
+\begtt
+\OFSfamily [Times]
+\endtt
+%
+expands to "ptm". The macro works only on expand processor level thus
+we don't get the error message if the <FamName> is not known. The
+"\OFSfamily" expands to the text ``"unknown"'' in such case.
+If you are using the "\OFSfamily" in your macro files and the
+NFSS try to substitute the "unknown" family then you can be sure that
+some misspelling occurs in <FamName> parameter or the required family
+is not known.
+
+The example:
+
+\begtt
+\usepackage [sjannon, sdynamo] {ofs}
+\edef\rmdefault {\OFSfamily [JannonAntikva]}
+\edef\sfdefault {\OFSfamily [DynaGroteskR]}
+\edef\ttdefault {\OFSfamily [Courirer]}
+\endtt
+
+The meaning of the macros "\rmdefault", "\sfdefault", "\ttdefault" is
+described in the NFSS documentation.
+
+OFS defines the command\inl[OFSfamilydefault]
+
+\begtt
+\OFSfamilydefault [<FamName>]
+\endtt
+%
+which sets the basic family of the whole document. This family is used
+in the plain text and in the chapter headers etc. too (if the used class
+file is made by common \LaTeX{} conventions). The command
+"\OFSfamilydefault" internally does:
+
+\begtt
+\edef\familydefault {\OFSfamily [<FamName>]}
+\endtt
+%
+and moreover it also cares for the case of the unknown <FamName>.
+If the <FamName> is not known then the list of the supported families is
+printed.
+
+\subsec The font encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: The font encoding switching is the subject to the NFSS and OFS
+defines nothing more (i.e., packages "fontenc" and "inputenc"
+work as expected).
+
+\PLAIN (to the end of this section):
+OFS sets the font encoding into CSfonts encoding by default.
+If you need to use fonts encoded in another encoding (T1 by Cork,
+for example) then you write "\def\fotenc{8t}"\inl[fotenc]
+before the OFS is included and OFS will operate the fonts with this encoding.
+The name ``"8t"'' is an example of T1 encoding.
+
+You can even switch the encoding inside the document:
+
+\begtt
+\def\fotenc{8z} \setfonts[/] ... fonts in CSfont encoding
+\def\fotenc{8t} \setfonts[/] ... fonts in encoding by Cork
+\endtt
+
+Moreover there are tools in OFS for correct macros expansion,
+that are dependent upon the font encoding (for example "\v", "\'", "\ae").
+
+By default, OFS set "\loadingenc=0"\inl[loadingenc],
+which means, that font encoding change nor the command "\setfonts" does not
+change of the macros of the type "\v", "\ae". These macros hold their
+original \hbox{plain} meaning. Such a feature will welcome plain users,
+who dislikes too inteligent packages.
+
+But, if the document starts with "\loadingenc=1", for example:
+
+\begtt
+\input ofs [a35,sjannon] \loadingenc=1
+\endtt
+%
+then \TeX{} checks during every run of the "\setfont" command,
+whether all necessary files named "ofs-<encoding>.tex" are loaded.
+These files contain macro definitions dependent on the preset font encoding.
+If these files are not loaded, \TeX{} loads them during the run of "\setfonts".
+More informations on this topic can be found in the sections~\beglink{3.3}3.3\endlink{}
+to~\beglink{3.5}3.5\endlink.
+
+The OFS package contains three basic files with macros definitions dependent
+on the encoding: "ofs-8z.tex", "ofs-8t.tex" and "ofs-8c.tex". If you use another
+font encoding, you can create a new similar file. Commands "\accentdef"
+and "\characterdef" used in these files are described in details in the
+\beglink{3.4}section~3.4\endlink.
+
+\subsec The fonts in mathematics
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: OFS for \LaTeX{} does nothing with the issue of math fonts.
+You need to use some \LaTeX{} package or build on the capabilities of NFSS.
+
+\PLAIN (to the end of this section):
+The command "\setfonts" and the control sequences declared by "\fontdef"
+switch fonts in text mode only. Until you use the
+"\setmath" command, all text between dollars is in Computer Modern in
+10\,pt/7\,pt/5\,pt sizes (text/index/index of index).
+
+The "\setmath"\inl[setmath] command has the following syntax:
+
+\begtt
+\setmath [<text size>/<index size>/<indexindex size>]
+\endtt
+%
+The parameters set sizes of mathematical fonts and they
+have same syntax as in the "\setfonts" command.
+The keyword "mag" means the magnification to the size of
+the current textual font. The empty parameter means the following
+substitution:
+
+\begitems
+* text size: "mag1.0"
+* index size: "mag0.7"
+* indexindex size: "mag0.5"
+\enditems
+
+It means that "\setmath[//]" has the same effect as
+"\setmath[mag1./mag.7/mag.5]". The
+"\setsimplemath"\inl[setsimplemath]
+command is defined in OFS as the equivalent of the
+"\setmath[//]" command.
+
+The "\setmath" sets the mathematical fonts depending on the values of the
+macros "\fomenc" and "\mathversion". The "\fomenc"\inl[fomenc] means the
+mathematical encoding and the "\mathversion" means
+the version of the math-families set.
+
+Mathematical encoding is set by the value of the macro
+"\fomenc".\inl[fomenc].
+There exist following possibilities:
+
+\begitems
+* If the default value "\def\fomenc{PS}" (PostScript fonts) is used
+ then "\setmath" sets the
+ italic from the current font family as a mathematical italic ("\fam1").
+ It uses "\rm" from the current font family for
+ digits and a some other symbols. The variant selectors
+ "\rm", "\it", "\bf" and "\bi" work in math mode too.
+%
+ Moreover, when "\def\fomenc{PS}" is used then the math symbols from "\fam2" and Greek
+ symbols (originally located in "\fam1") are used from PostScript
+ Symbol font. This font is much better visual compatible with most
+ Postscript fonts than the Computer Modern symbols. Other symbols (e.\,g.,~big operators
+ and big braces) stay in Computer Modern font because unfortunately
+ there is no common alternative for these glyphs.
+
+* If "\def\fomenc{CM}" is used then "\setmath" command keeps the Computer Modern
+ fonts in math formulae. It sets only the desired sizes given in the
+ parameters.
+
+* It is possible to use "\def\fomenc{AMS}" after loading the file "amsfn.tex".
+ Mathematic symbols are the same as while using "CM", but in addition
+ you can use all mathematics symbols from~AMS\TeX{}.
+
+* After loading the file "txfn.tex", you can use two new encodings:
+ "\def\fomenc{TX}" or "\def\fomenc{PX}".
+ In both cases the free TXfonts are used for mathematics, they are compatible
+ with the font families Times and Helvetica. If you choose the value "TX" then
+ pure TXfonts are used for all mathematic symbols, whereas
+ the value "PX" means that TXfonts
+ are going to be combined with italics and with the basic fontface of the actual
+ font family (similar to "PS" encoding). OFS supports all control sequences
+ of the mathematic symbols, as is mentioned in the TXfonts reference. There are
+ all symbols from the AMS\TeX{} and many more there. There are
+ hunderts sybols from TXfonts.
+
+* After loading the file "mtfn.tex", it is possible to use "\def\fomenc{MT}".
+ Mathematics will contain italics and basic fontface of the actual font family
+ as well. And it will be combined with the characters of the commercial version
+ of the mathematics fonts MathTimes.
+\enditems
+
+OFS supports two versions of math formulae as default: normal and
+bold version. The user can define another versions---see
+\beglink{3.6}section 3.6\endlink.
+The current version is set by the contents
+of the "\mathversion"\inl[mathversion]
+macro. You can say "\def\mathversion{normal}" or "\def\mathversion{bold}"
+before "\setmath" command. The "normal" version is used as
+default. Examples:
+
+\begtt
+\setmath [//] $formula$ % formula in "normal" version
+$\def\mathversion{bold}\setmath[//] formula$ % formula in "bold" version
+\endtt
+
+\sec The inside of OFS for insiders
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: All auxiliary macros of OFS are defined in "ofs.sty" file with
+the name "\ofs@macroname" in order to avoid the confusion with other
+style files. The macros used in declaration files have the name
+"\OFSmacroname". Moreover OFS defines user-level macros "\fontdef", "\showfonts",
+"\fontusage", "\rm", "\bf", "\it" and "\bi".
+
+\PLAIN: All auxiliary macros of OFS are defined in "ofs.tex" file and
+they are listed in index at the end of this document. The convention
+with the~"@" character is not used because I personally hate this character in
+macro names.
+
+\subsec Debugging
+%%%%%%%%%%%%%%%%%
+
+\LATEX: Use the standard NFSS package "tracefnt" for tracing purposes.
+
+\medskip
+\PLAIN: There are four commands for tracing OFS:
+\begitems
+* "\nofontmessages"\inl[nofontmessages] sets no tracing info.
+* "\logfontmessages"\inl[logfontmessages] sets the tracing info to log file only.
+* "\displayfontmessages"\inl[displayfontmessages] sets the tracing
+ info to log file and to terminal.
+* "\detailfontmessages"\inl[detailfontmessages] sets the detailed
+ tracing info to log and to terminal (all "\font" primitives are traced).
+\enditems
+The "\logfontmessages" is initialized by default.
+
+The warnings about unaccessible characters or encodings are always displayed
+on the terminal and they are written into the log file. If you want log output only,
+you can write "\let\displaymessage=\wlog"\inl[displaymessage],
+because OFS uses this sequence for displaying messages on the terminal.
+
+\subsec The robust and fragile commands
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: \LaTeX{}2e has its conventions to define robust commands.
+The command "\setfonts" and the "\<fontswitches>" declared by
+"\fontdef" are robust, of course. They can be used in texts for table
+of contents, indexes etc.
+
+\PLAIN (to the end of this section):
+Plain\TeX{} does not solve the problem of fragile commands and its
+users have their own solutions without any standardization. One
+solution is used in OFS.
+
+What is a fragile command? We sometimes need to send some part of
+text to auxiliary file (for table of contents, index, etc.). We
+are doing it by "\write" primitive and in second run of \TeX{} this
+file is "\input"-ted. The problem is that the "\write" primitive prints
+the text to the file after all macro expansions and it may cause
+problems. For example, if the font switch is implemented as a
+complicated macro and it is used in "\write" parameter then the macro
+is stored in the file after its expansion.
+The error can occurs in most cases during the "\input" of such file.
+We say that the \uv{fragile}
+command was used in "\write" parameter and that this command
+\uv{was got spilt} in auxiliary file.
+
+If the (potentially) fragile command defined in OFS is being
+sent to the file then the
+following message is printed on the terminal and to the log file during the
+"\input" of the file:
+
+\begtt
+ERROR !! The fragile command in the toc/ind/aux or similar file.
+You can solve this problem by the following steps:
+1. Remove the auxiliary file with this command.
+2. Include the following macro code into your document header:
+ \let\orishipout=\shipout
+ \def\shipout#1#2{\setbox0=#1{#2}\bgroup
+ \let\expandaction=\noexpand \orishipout\box0 \egroup}
+3. Run TeX on your document again and again...
+See the OFS documentation for more info.
+! The fragile command in auxiliary file
+\endtt
+
+You can follow this hint to remove the problem.
+
+The detail explanation of this behavior follows. The "\setfonts" and
+other (potentially) fragile macros are implemented in OFS by the
+following way:
+
+\begtt
+\def\macro {%
+ \ifx\expandaction\noexpand
+ \noexpand\macro
+ \else
+ \csname fragilecommand!\endcsname
+ <the macro code>
+ \fi
+}
+\endtt
+
+If "\expandaction"\inl[expandaction] does not have the meaning
+"\noexpand" then the "\else" part of the macro
+code is performed. The
+"\csname fragilecommand!\endcsname"\inl[fragilecommand!]
+expands to "\fragilecomand!" and this text occurs in auxiliary file.
+If this file is included in next \TeX{} run then the
+"\fragilecomand"\inl[fragilecommand]
+runs and this command prints the
+message with the hint mentioned above.
+
+If the user follows the hint then the "\expandaction"
+has the meaning of "\noexpand" when the "\shipout" is active
+(it means during the no-immediate "\write" parameter expansion).
+The "\macro" expands to "\macro" and this text is stored in
+auxiliary file.
+
+The "\shipout" is not re-defined in OFS by default---only a suggestion
+is printed if fragile command in the "\write" parameter occurs. The
+reason is that a plain\TeX{}
+user may have his/her own redefinitions of "\output" routine or
+"\shipout" primitive thus OFS for plain does not do any redefinitions at
+this level itself. Unlike \LaTeX{} users the plain user needs exactly
+to know how his macros work.
+
+The code above illustrate the definition of an abstract macro
+"\macro". The similar code is used for the following actual macros in
+OFS: "\setfonts" (\beglink{2.2}section~2.2\endlink),
+"\setmath" (\beglink{2.7}section~2.7\endlink),
+"\<fontswitches>" declared by "\fontdef"
+macro (\beglink{2.3}section~2.3\endlink),
+"\setextrafont", "\printcharacter", "\printaccent"
+(\beglink{3.4}section~3.4\endlink),
+"\accentabove" and "\accentbelow" (\beglink{3.6}section~3.6\endlink).
+If you use the hint above then these macros become \uv{robust}
+in \LaTeX{} sense of this word.
+
+\subsec Declaration files
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: The declaration files for OFS are common \LaTeX{} style files
+which includes mapping from long family names to NFSS family names
+of one or more font families. These NFSS families are declared in
+common~"fd" files. Use NFSS documentation to create "fd" files.
+You can use the following commands in the OFS declaration files:
+
+\begitems
+* "\OFSprocessoptions"\inl[OFSprocessoptions]:
+ This macro is undefined by default but it has the meaning "\relax"
+ during "ofs.sty" file is scanned and its options are included.
+ You can test by "\ifx" the value of this control sequence in order
+ to skip the "\RequirePackage{ofs}".
+* "\OFSextraencoding {<extra encoding>}"\inl[OFSextraencoding]:
+ The macro stores the <extra encoding> into memory and does
+ "\input {<extra encoding>ini.def}".
+ We assume that the corresponding definitions for <extra encoding>
+ are included in this file. See "se1ini.def". This file includes the
+ declarations for extra encoding SE1 for fonts by Storm Type Foundry.
+ If the "<extra encoding>ini.def" file was included already it is not
+ included again. Attention: use uppercase letters for <extra encoding>
+ parameter but use lowercase letters in filename.
+* "\OFSputfamlist {<text>}"\inl[OFSputfamlist]:
+ The macro adds the <text> into the list of family names.
+ This list is printed by "\showfonts" command or if unknown family is
+ used in "\setfonts".
+* "\OFSdeclarefamily [<FamName>] {<NFSS-name>}"\inl[OFSdeclarefamily]
+ This macro does an actual mapping from <FamName> (long family name)
+ to the <NFSS-name> (short NFSS family name). Moreover, it stores the
+ line about this family name to the list of family names which is
+ printed by "\showfonts" command.
+* "\OFSnormalvariants"\inl[OFSnormalvariants]:
+ This macro stores the list of standard switches
+ "\rm,"~"\bf," "\it," "\bi" into the list of family names which is
+ printed by "\showfonts" command.
+\enditems
+
+\PLAIN (to the end of this section):
+The declaration files have the extension "tex" and we assume that there is
+a locking code in them so that the file will not be read twice.
+If the "ofs.tex" is not included already then it have to be included at the
+begin of declaration file.
+
+You have to define the mapping from long family names to "tfm" names in
+the declaration files. You can use the following commands:
+
+\begitems
+* "\protectreading <filename><space>"\inl[protectreading] ---
+ the flag about the <file> reading is saved in the memory.
+ If the command is run with the same parameter once more,
+ the "\endinput" is executed. It means
+ that next declarations are protected against the multiple reading.
+* "\ofsputfamlist {<text>}"\inl[ofsputfamlist]:
+ The macro adds the <text> into the list of family names.
+ This list is printed by "\showfonts" command or if unknown family is
+ used in "\setfonts".
+* "\ofsdeclarefamily [<FamName>] {<commands>}"\inl[ofsdeclarefamily]:
+ This macro declares the new font family with the name <FamName>.
+ The <FamName> is stored into the list of family names which is
+ printed by "\showfonts" command. If this family is used by
+ "\setfonts" then the <commands> are performed. We assume that the
+ <commands> include "\loadtextfam" command and (zero or more)
+ "\newvariant" commands.
+* "\loadtextfam"\inl[loadtextfam]:
+ This macro loads four fonts with given metrics. See below for the syntax and
+ the detail explanation of this command.
+* "\newvariant<digit> \<switch> (<Variant>) <space> <metric>;<extra-enc>;"\inl[newvariant]:
+ \null\space This macro sets the \uv{nonstandard} variant for given font family.
+ See below for the detail explanation of this command.
+* "\modifyenc <encoding>:<identifier>;"\inl[modifyenc] --- the exceptions
+ are added with respect to the basic encoding, see~\beglink{3.5}section~3.5\endlink.
+* "\fosize"\inl[fosize]:
+ The information about the actual font size of the last selected font
+ family is stored in this macro. The value of this macro can be in
+ one of the two forms: "at<dimen>" or "scaled<number>". This depends
+ on the form of <size> parameter given in "\setfonts" command.
+* "\fotenc"\inl[fotenc]:
+ The actual encoding is stored in this macro. The common values are:
+ "8z" for encoding by CS-fonts (by ISO-8859-2) or "8t" for encoding
+ by Cork. The part of "tfm" name (where encoding is specified)
+ is recommended for values of "\fotenc" macro.
+ If "\fotenc" is undefined at the time of OFS is initializing, the
+ OFS makes "\def\fotenc{8z}" else the "\fotenc" is unchanged.
+* "\extranec"\inl[extraenc] --- macro, that stores the information
+ about the extra encoding. This information is copied from the parameter
+ <extra-enc>, that is located in the "\laodatextfam" command.
+* "\defaultextraenc"\inl[defaultextraenc] --- if you redefine this macro, the
+ extra encoding of the basic families and the families from~"a35.tex" can be
+ changed. The default value of this macro is "8c".
+* "\setfontshook"\inl[setfontshook]:
+ This macro is called from "\setfonts" macro before <commands> from
+ "\ofsdeclarefamily" are performed.
+* "\registertfm <symbolic name> <from>-<to> <real metric>"\inl[registertfm]:
+ You can declare different "tfm" names for different font sizes.
+ See \beglink{3.7}section~3.7\endlink{} for more details.
+* "\registerenc <FamilyName>: <encoding> <space>"\inl[registerenc]
+ --- enables the limitation of usage the font families only for
+ certain encodings. See~\beglink{3.9}section~3.9\endlink.
+\enditems
+
+The "\loadtextfam" command used in declaration files
+has the following syntax:
+
+\begtt
+\loadtextfam (<Variant-rm>) <space> <metric-rm>;%
+ (<Variant-bf>) <space> <metric-bf>;%
+ (<Variant-it>) <space> <metric-it>;%
+ (<Variant-bi>) <space> <metric-bi>;<extra-enc>;%
+\endtt
+%
+The percent characters at the ends of lines here mean that no spaces are
+allowed after semicolons.
+You can save the long name of the used variant by "(<Variant-..>)" parameter.
+This name us used only when the OFS is traced by "\logfontmessages" or
+others commands. The parameters ``"(<Variant-..>) <space>"'' are optional.
+If this parameter is omitted then default value is stored:
+"rm: ()", "bf: (Bold)", "it: (Italic)", "bi: (BoldItalic)".
+
+The parameters <metric-..> are the names of the "tfm" files for the
+appropriate variants. The "\loadtextfam"\inl[loadtextfam]
+does roughly the following work:
+
+\begtt
+\font\tenrm=<metric-rm> \fosize
+\font\tenbf=<metric-bf> \fosize
+\font\tenit=<metric-it> \fosize
+\font\tenbi=<metric-bi> \fosize
+\endtt
+%
+We assume that all <metric-..> parameters are written with the
+"\fotenc" macro in order to make the switching to others
+encodings possible.
+
+The <extra-enc> parameter is the name of the extra encoding. If this
+parameter is non-empty then the "\loadtextfam" command redefines
+temporally the "\fotenc" macro: "\def\fotenc{<extra-enc>}" and it
+expands all parameters <metric-rm>, <metric-bf>, <metric-it> and
+<metric-bi> again. The results of these expansions are stored into
+memory. They are the \uv{extra metrics} connected to the
+\uv{basic metrics}.
+If the <extra-enc> parameter is empty then there are no
+\uv{extra metrics} connected to \uv{basic metrics}.
+One can use a macro which can need the access
+to the extra metric concerned to the basic metric of the current font.
+The macro for "\euro" character is the good example of these needs.
+
+Some <metric-..> (except of <metric-rm>) can be omitted. When the
+<metric-XX> is empty then the "\loadtextfam" command
+does roughly the following work:
+
+\begtt
+\def\tenXX{\message{WARNING: the needed font variant is missings}}
+\endtt
+%
+It means that if the user needs the omitted variant then the message
+is printed to the log file and to the terminal and no font change is done.
+
+The "\setfonts"\inl[setfonts] command does not change the meaning of
+the macros "\rm", "\bf", "\it" and "\bi". It only changes the font
+switches "\tenrm", "\tenbf", "\tenit",\inll[tenrm \back tenbf \back tenit]
+and "\tenbi" respectively\inl[tenbi]. The first three font switches are known in
+plain and the last one is introduced in OFS.
+The macros "\rm", "\bf", "\it" and "\bi" store the information about
+last selected variant into control sequence "\currentvariant"\inl[currentvariant].
+This information has the form of the letter "M" (for "\rm"), "F" (for "\bf"),
+"T" (for "\it") and "I" (for "\bi"). It is stored by
+"\let\currentvariant=<letter>"
+because this code is not expanded. Thus we need not to implement a
+special \uv{robust} code to the macros for variant switches.
+
+Note that the "\loadtextfam" command sets the font switches
+"\tenrm", "\tenbf", "\tenit" and "\tenbi" to the fonts of arbitrary
+size given by the contents of the "\fosize" macro. The word ``"ten"''
+in names of font switches is used only for the historical reasons and it does
+not mean that the font is loaded at 10\,pt size.
+
+You can object that the repetitive calls of "\setfonts" runs the
+font loading on the four fonts in given font family again and again.
+This can be time consuming operation. But you are not right. \TeX{}
+stores the font information from font loading in its internal memory
+and if the "\font" primitive is applied again to the same font then
+\TeX{} uses the information stored before and it needs not to load the
+font again.
+
+If "\loadingenc>0"\inl[loadingenc] the command "\loadtextfam" reads
+the file "ofs-\fotenc.tex" before fonts loading.
+If the parameter <extra-enc> is non-empty, it loads moreover the file
+"ofs-<extra-enc>.tex". These files are read only once. Empty lines
+and ends of lines are ignored during reading. Reading is performed inside the
+group. The character categories are locally set in accordance to
+plain\TeX{} (and~"\catcode`@=11"). The "\globaldefs=1" is set. It means,
+that all macros and values from the file "ofs-<encoding>.tex" are
+defined globally.
+That does not matter, because newly loaded encoding files do not conflict
+with the previous ones (see the commands "\characterdef" and "\accentdef"
+in~\beglink{3.4}section~3.4\endlink). It does not matter at all, if there
+are loaded more files, than is necessary at a given instant. It is not wise
+to read the encoding file repeatedly, when the command "{...\setfonts...}"
+is executed. This is the reason of the global definition.
+If the user dislikes the global predefined macros (he/she wants to add the
+article into the proceedings, where such a predefined macros can collide with
+other articles), he lets the "\loadingenc=0". In this case, the
+declaration files have to be loaded manually by "\input" command at
+the beginning of the article.
+
+You can declare a nonstandard variant in <commands> of the
+"\ofsdeclarefamily" by the "\newvariant"\inl[newvariant] command.
+The "\newvariant" command does roughly the following:
+
+\begtt
+\font\ten<switch>=<metric> \fosize
+\def \<switch> {\let\currentvariant=<digit> \ten<switch>}
+\endtt
+%
+Moreover the "\newvariant" stores the \uv{extended metric}
+connected to the \uv{basic metric} if the <extra-enc> is not empty.
+
+If the OFS needs to return to the last \uv{nonstandard variant} then
+it does it by the value of the "\currentvariant". If the new family
+has the \uv{nonstandard variant} with the same <digit> as a previous
+family then this variant is used and OFS does not switch to the "\rm"
+variant. You can declare the variants of various families but the
+similar \uv{type} with the same <digit>.
+There are only ten digits thus we can distinguish only ten different
+\uv{types} of \uv{nonstandard variants}.
+
+The macro "\setfonts" can change the meaning of the macros
+"\loadtextfam" and "\newvariant" if the
+"-<variant>" is specified in <FamName> parameter of "\setfonts".
+It is sufficient to load only one font in such case but not the whole
+family. If the ``"-<variant>"'' is \uv{standard} then "\newvariant" is
+redefined so that it do nothing and "\loadtextfam" is redefined in
+order to load only one font of the variant specified.
+If the "-<variant>" is is \uv{nonstandard} then "\loadtextfam" do
+nothing and "\newvariant" loads the font only if it loads the variant
+specified.
+
+We describe the operations of "\setfonts [<FamName>/<size>]"\inl[setfonts]
+command here in detail. This command calculates and defines the
+"\fosize" macro by the <size> parameter. If the <FamName> is not empty
+and the "-<variant>" is not given then "\setfonts" performs
+"\def\currentfamily{<FamName>}"\inl[currentfamily]. On the other hand,
+if the <FamName> is empty then the "\currentfamily" is used for
+restoring the family name. If the "-<variant>" is given then
+"\setfonts" redefines the "\loadtextfam" and "\newvariant" macros at
+the temporary time. This behavior is described in previous paragraph.
+Then the "\setfonts" runs "\setfontshook" and <commands>
+specified as a parameter of "\ofsdeclarefamily" of the
+appropriate <FamName>. It also runs macro "\runmodifylist"\inl[runmodifylist],
+that at certain circumstances sets the exceptions from the chosen encodings
+(see~\beglink{3.5}section~3.5\endlink). Finally the "\setfonts" runs
+"\ignorespaces" at the end of its run in order to ignoring the possibly
+forgotten space after ``"]"''.
+
+\subsec The font encoding and the character declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\PLAIN: You can use the macro "\setextrafont"\inl[setextrafont] to
+switch to the extra metric of the current font. If the extra metric
+connected to the metric of current font is stored in \TeX{} memory (by
+"\loadtexfam" or "\newvariant" command) then "\setextrafont" do roughly
+the following work:
+
+\begtt
+\font\extrafont=<extra metric connected to the current metric> \extrafont@inl[extrafont]
+\endtt
+
+\LATEX: You can use the macro "\setextrafont" to switch to the extra
+encoding declared by "\OFSextraencoding" command. If this encoding is
+declared then "\setextrafont" do roughly
+the following work:
+
+\begtt
+\fontencoding{<extra encoding>}\selectfont
+\endtt
+
+\OBA:
+If you need to print the character from extra metric/encoding from
+slot of <number> position then you can use the macro
+"\extchar <number>"\inl[extchar].
+
+\PLAIN (to the end of this section):
+You can use the commands "\characterdef" and "\accentdef" to declare
+the macros which depend on font encoding. See the "ofs-8t.tex" and
+"ofs-8z.tex" for a good illustration.
+
+The "\characterdef"\inl[characterdef] has the following syntax:
+
+\begtt
+\characterdef \<sequence> <encoding> <space> <number>
+% example:
+\characterdef \promile 8z 141
+% or
+\characterdef \<sequence> <encoding> <space> {<commands>}
+% example:
+\characterdef \promile 8t {\%\char24 }
+\characterdef \promile * {\vrule height1ex width1ex\relax}
+ % in another encodings
+\endtt
+
+If the current encoding is the same as <encoding> then "\<sequence>"
+will expand to the token of category~12 with the code <number>
+or it expands to the <commands>.
+All work is done at expand processor level when "\<sequence>" is used.
+You can declare the same "\<sequence>"
+for more encodings, see the "\promile" declarations in previous examples:
+
+\begtt
+\def\fotenc{8z} \promile % expands to the token with the code 141
+\def\fotenc{8t} \promile % expands to the commands \%\char24
+\endtt
+
+Moreover you can simply declare the access to the extra encoding:
+
+\begtt
+\characterdef \euro 8z 134
+\characterdef \euro 6s 37
+
+\def\fotenc{8z} \euro % expands to the token of the code 134
+\def\fotenc{8t} \euro % expands to: {\setextrafont <token with 37 code>}
+\endtt
+
+The second example is working only if the extra metric connected to
+the current metric exists (see "\loadtextfam" and "\newvariant" commands)
+and the extra metric has the "6s" encoding. If this is not valid then
+the "\euro" prints the warning about inaccessibility of the "\euro"
+character to the terminal and to the log file.
+
+Now, we explain the behavior of the "\characterdef"ed macros
+in more details. The "\characterdef" command defines
+the "\<sequence>" as "\printcharacter{<sequence>}",\inl[printcharacter]
+it means that "\promile" expands to "\printcharacter{promile}" and "\euro" to
+"\printcharacter{euro}" in our examples.
+If you use the "\characterdef" twice to the same "\<sequence>" then it
+does not matter because the definition is still the same.
+Moreover, "\characterdef" defines the special macro
+"\<sequence>:-<encoding>" in order to this macro expands to the
+token of given <number> code or to the given <commands>.
+The more work is done by the "\printcharacter" macro.
+This macro checks if the "\<sequence>:-\fotenc" is defined.
+If it is true then "\printcharacter" expands to the contents of this
+macro. Else "\printcharacter" checks if the extra metric is connected
+to the current font. If it is true then "\printcharacter" checks if the
+"\<sequence>:-<extra-enc>" is defined where <extra-enc> is the
+encoding of the extra metric. If it is true then
+"\printcharacter" expands to
+{\hbadness=1110\par}
+
+\begtt
+{\setextrafont \<sequence>:-<extra-enc>}
+\endtt
+%
+If all attempts fail then the "\printcharacter" try to print the default character
+independent on encoding. It means, the "\printcharacter" checks if the
+"\<sequence>:-*" is defined and if true, it expands to this macro.
+
+If this is false then the "\printcharacterwarn{<sekvence>}"
+is run.\inl[printcharacterwarn]
+The implicit value of this macro prints out a warning, that the
+character <sequence> is not available. It is printed on the
+terminal and into the log file.
+No character is printed to "dvi" output.
+
+If we want to omit the warning printing, we can redefine the
+"\printcharacterwarn" for example by following way:
+
+\begtt
+\def\printcharacterwarn #1{?(#1)?}
+\endtt
+
+The "\characterdef" does not redefine the defined control
+sequences since the version OFS Mar. 2004. It defines only sequences,
+that have the meaning "\undefined" or "\relax". Otherwise
+(and also if the sequence is not defined by previous "\characterdef")
+it prints the warning, that the definition is ignored.
+The reason is that the encoding files declares by "\characterdef" command
+enormous amount of new control sequences. But the programmer
+have not to know all of them. It is possible, that he/she uses the same name
+for his/her own macro. In this case, the "\characterdef" keeps the macro
+defined by the programmer and lets the appropriate character unaccessible.
+You have to write "\let\<sequence>=\relax" befor of the "\characterdef" command
+if it is really necessary to redefine some control sequences
+(this procedure is needed for macros dependent on the encoding and
+defined in plain\TeX).
+
+The macro "\safelet"\inl[safelet] has been added into OFS for the same reasons.
+It acts similar to "\let", but resists to redefine the predefined control
+sequences. The warning is printed by "\safeletwarn"\inl[safeletwarn]
+macro instead of redefinition.
+
+You can use "\accentdef"\inl[accentdef] command to declaration of the
+accent macros "\'", "\v", etc. depend on encoding.
+This command has the following syntax:
+
+\begtt
+\accentdef \<sequence> <char> <optional space> <encoding> <space> <number>
+% example:
+\accentdef \v E 8z 204 % Ecaron
+\accentdef \v e 8z 233 % ecaron
+% or
+\accentdef \<sequence> <char> <optional space> <encoding> <space> {<commands>}
+% example:
+\accentdef \v * 8z {\accent20 } % default caron in 8z
+\accentdef \v * * {\blackbox } % default caron
+\endtt
+
+If the current encoding is the same as <encoding> then "\<sequence>"
+followed by <char> expands to the token of category~12 with the code
+<number> or to the <commands>. This work is done at expand processor
+level. If the declared <char> is "*" then the "\<sequence>"
+expands to the token of given <number> code or to the
+given <commands> in the case of the
+actual <char> does not match with all declared <chars>.
+
+The possibility of the use of the extra metric is the same in
+"\accentdef"-ed macros as in the "\characterdef"-ed macros.
+
+Now, we explain the functionality of the "\accentdef"-ed macros
+in more details. The "\accentdef" command defines the "\<sequence>"
+as a macro with one non separated parameter~"#1" which expands to the
+"\printaccent{<sequence>}{#1}"\inl[printaccent]. For example, "\v E"
+expands to "\printaccent{v}{E}". Moreover, "\accentdef" defines the
+macro "\<sequence>:<char>:-<encoding>" in order to this macro expands to the
+token of given <number> code or to the given <commands>.
+The more work is done by the "\printaccent" macro.
+This command checks if the "\<sequence>:<char>:-\fotenc" is
+defined. If it is true then "\printaccent" expands to the contents of
+this macro. Else the "\printaccent" checks if the extra metric is connected
+to the current font. If it is true and if this extra metric has
+<extra-enc> encoding then "\printaccent" checks if the
+"\<sequence>:<char>:-<extra-enc>" is defined. If it is true then
+"\printaccent" expands to "{\setextrafont \<sequence>:<char>:-<extra-enc>}".
+Else "\printaccent" checks if the macros "\<sequence>:*:-\fotenc"
+and "\<sequence>:*:-<extra-enc>" are defined in this order.
+If the first one is defined then "\printaccent" expands to this macro
+and appends the <char>. If only the second one is defined then
+"\printaccent" expands to:
+
+\begtt
+{\setextrafont \<sequence>:*:-<extra-enc> <normalfont> <char>}
+\endtt
+%
+where <normalfont> is the font switch to the current font at the start
+of "\printaccent" macro. If all attempts fail so far then
+"\printaccent" try to use the macros "\<sequence>:<char>:-*"
+or "\<sequence>:*:-* <char>" in this order. If all the previous commands
+fail, the "\printaccentwarn{<sequence>}{<character>}"\inl[printaccentwarn] is run.
+The default value of this macro prints out on the terminal and into the log
+file the warning about the unaccessibility of the accented character
+and no character is printed on "dvi" output.
+
+Note that the character from extra metric inside the word breaks the
+kerning around this character and breaks the possibility of
+hyphenation of this word. It is extremely recommended that a basic
+metric encodes all alphabet used in current language in order to
+minimize switching to extra metric. For example, the "8t" and
+"8z" encodings are good choice as basic metric for Czech and Slovak
+languages.
+
+If we want to take out predeclared character\inl[characterdel]
+(see so called <exceptions> in the next section), we can use the
+commands"\characterdel" and "\accentdel".\inl[accentdel]
+These commands have to have the same parameters like "\characterdef" and
+"\accentdef" respectively and they take out the command definition
+"\<sequence>:-<encoding>" and "\<sequence>:<char>:-<encoding>"
+respectively.
+
+%The last part of this section is applied to the example of the inteligent
+%"\Uppercase" definition:
+%
+%\begtt
+%\def\Uppercase #1{\bgroup
+% \let\expandaction=\noexpand % \euro stays unchanged
+%
+% \u{g} unchanged as well
+% \def\ss{SS}\def\l{\L}\def\o{\O}\def\ae{\AE}\def\oe{\OE}%
+% \edef\tmp{#1}\expandafter
+% \egroup \expandafter\uppercase\expandafter{\tmp}%
+%} % \uppercase changes \u{g} to \u{G}.
+%\endtt
+
+\subsec \PLAIN: Macro files dependent on the encoding and encoding exceptions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Commands "\characterdef" and "\accentdef" described in the previous
+section redefines macros dependent on the encoding ("\v", "\ae", etc.).
+In this section, we are going to describe the conception of placement
+these macros.
+
+Macros declarations by means of "\characterdef" and "\accentdef"
+have to be written into the files called "ofs-<encoding>.tex"
+(so called~{\it encoding files\/}). The command "\loadtextfam" (called
+from the "\setfonts" macro) reads these declarations from these files while
+"\loadingenc=1"\inl[loadingenc] is set.
+
+Every encoding contains its own basic set of characters and accented types.
+This set is registered in the encoding file by the
+"\characterdef" and "\accentdef" commands. Particular font families can contain
+some additional characters or some characters can be missing in reference
+to that basic set. These exceptions are declared by means of the command
+"\modifydef"\inl[modifydef]:
+
+\begtt
+\modifydef <encoding>:<identifier>; {<exceptions>}
+\endtt
+%
+The <exceptions> contain the commands "\characterdef", "\accentdef",
+"\characterdel" and "\accentdel". The "\*del" commands have to contain
+the the same value of the character in the argument as in basic encoding set.
+If any character has to be redefined, the commands "\*del" and "\*def" corresponding
+to this character must be written one after another.
+
+The command "\modifyenc"\inl[modifyenc] used in the pearameter of the
+"\ofsdeclarefamily" macro is a ``link to <exceptions>''. You can mark
+by "\modifyenc" command that the family
+contains <exceptions> with respect to the basic encoding set.
+The command has following notation:
+
+\begtt
+\modifyenc <encoding>:<identifier>;%
+\endtt
+%
+You can list more of one command for every font family
+(these commands can contain different <encoding> as well).
+Nothing is done, if this command links to <exceptions>, that were not
+yet declared.
+
+An example of the exceptions declaration "8z:csfonts" can be
+found in the file "ofs-8z.tex" and links to them are used in families "CM*"
+in the file "ofsdef.tex".
+
+Commands "\modifyenc" are run at each "\setfonts". As the matter of fact
+these commands only stores their parameters into so called ``list of links''
+(to the macro "\newmodifylist"\inl[newmodifylist]). At each start of the "\setfonts",
+the new list of links is created. The "\modifyenc" command stores its
+parameter into this list
+only if <encoding> is equal to "\fotenc" or "\extraenc". The exception handling provides
+the command "\runmodifylist" that is run on the end of the "\setfonts" command.
+Its activity is an object of the next paragraphs.
+
+The macro "\runmodifylist"\inl[runmodifylist] compares the ``list of links''
+of the previous family ("\modifylist"\inl[modifylist]) with the ``list
+of links'' of the newly
+set family ("\newmodifylist"). The "\runmodifylist" finishes its activity,
+if both lists are the same or "\modifylist" has the meaning "\relax".
+Otherwise, the setting of exceptions is run: At first, meanings of
+"\characterdef"$\leftrightarrow$"\characterdel" and
+"\accentdef"$\leftrightarrow$"\accentdel" are exchanged and "\modifylist" is run.
+In other words, the macros dependent on the encoding are returned
+to the initial state (without exceptions). During this activity,
+the deleting of the character is ignored,
+if the character was declared immediatelly before
+(see the rule about character redefinition above).
+Next, the command "\runmodifylist" returns
+the "\characterdef" and "\accentdef" into the initial state and run "\newmodifylist".
+All the redefinitions, that takes place during this activity, are just local.
+The mechanism of two lists ensures, that for example:
+
+\begtt
+\setfonts [Family1/] ... \setfonts [Family2/] ...
+\endtt
+%
+the exceptions of the actual encoding will be correctly set even
+for the Family2, eventhough the Family1 has another set of exceptions
+than Family2.
+
+The control sequence "\modifylist" has the meaning of the empty
+macro after the OFS startup. The macro programmer can set
+"\let\modifylist=\relax" to override every set of exceptions.
+Note, that declaration commands "\modifydef" store <exceptions> into the memory
+and execute them in order to define all declared sequences corresponding to
+"\printcharacter" and "\printaccent" respectively. It means, that every
+control sequence from all exceptions is defined (the message {\tt undefined
+control sequence} is not displayed). Moreover OFS has perfect view whether the
+control sequence is available or not in the actual family. The macro programmer
+can then redefine macros "\print*warn".
+
+The command "\modifydef" slightly changes commands
+"\accentdef", "\accentdel", etc. for a temporary time and then
+it executes the
+<exceptions>. The control sequence "\skipfirststep"\inl[skipfirststep] forbids the
+execution of the macros in the <exceptions> during the activity of "\modifydef".
+It acts just like "\relax", but during the execution of the <exceptions> by means
+of "\modifydef" the whole part of <exceptions> behind this sequence is omited.
+
+Identifiers "<encoding>:lccodes" and "<encoding>:ienc" are reserved for usage
+in the macros out of OFS. OFS does not consider the setting of the characters
+"\lccode", "\uccode". A macro package taking care of these values can properly
+define commands "\lccodes"\inl[lccodes] and "\lccodesloop" and runs
+"\csname <encoding>:lccodes\endcsname". These above mentioned commands are
+not defined in OFS at all.\inl[lccodesloop]
+The declarations "<encoding>:lccodes" are loceted in the files "ofs-8t.tex" and
+"ofs-8z.tex", eventhough they are not used in OFS. It bears upon the text
+fonts encoding. An example of "<encoding>:lccodes" usage is placed in the
+macro called "lang.tex". Macro "inec.tex" uses "<encoding>:ienc". More
+informations can be found in the appropriate documentation.
+{\hbadness=1617 \par}
+
+The declarations of the most commonly used exceptions are written directly
+into the encoding files. The declarations of the less usual exceptions
+(related only to some font families) can be written behind "\endinput"
+of the declaration files.
+You can use a command "\modifyread"\inl[modifyread]
+in <commands> of "\ofsdeclarefamily":
+
+\begtt
+\modifyread <filename>;%
+\endtt
+%
+This command reads the file from the first apperance
+of the sequence "\modifytext"\inl[modifytext], but only if
+the "\loadingenc" is positive. It is suitable to place the "\modifytext"
+sequence behind "\endinput", so the "\modifyread" command
+reads only that part of the file, which has not been read before.
+Assigning is global during the reading, the empty lines and
+ends of lines are omited. The file is not loaded repeatedly.
+
+This command gives you chance to concentrate the font families
+declarations and encoding exceptions declarations into the single file.
+\TeX\ reads the exceptions in the time it needs them, so the \TeX\ memory
+is spared. An example is placed in the file "slido.tex".
+
+OFS offers testing macro as well, whether the control sequence corresponds
+to the character, that is available in the font or not:\inl[knownchar]
+
+\begtt
+\knownchar <character or accent+character>? \iftrue character is available
+ \else character is unavailable or undefined \fi
+% example:
+\def\tryeuro{\knownchar \euro? \iftrue \euro \else Euro\fi}
+\endtt
+
+
+\subsec The auxiliary macros for accents and characters
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+You can declare the default accents in OFS\inl[accentabove]
+not only by the "\accent"
+primitive but by the macros "\accentabove" and "\accentbelow" too.
+The syntax follows:\inl[accentbelow]
+
+\begtt
+\accentabove {<accent char>}{<vertical skip>}{<base char>}
+\accentbelow {<accent char>}{<vertical skip>}{<base char>}
+\endtt
+
+The "\accentabove" command put the <accent char> above the
+<base char> with the <vertical skip> between them. The "\accentbelow"
+command does the same work, but put the <accent char> below the
+<base char>. In both cases characters are placed on the joint vertical axis
+and if the font is slanted then this axis is slanted too. The width of
+the resulting character is derived from the width of the <base char>
+only. The macros are implemented by the "\vbox", "\vtop" and "\halign"
+primitives with the calculation of the (possibly) slanted axis.
+
+The accented characters for accent above are commonly designed in the
+height 1\,ex for most fonts. It means, that placing such character by
+"\accentabove" command needs the "-1ex" compensation:
+
+\begtt
+\accentabove {<accent char>}{-1ex}{<base char>}
+\endtt
+
+In such case, the "\accentabove" has the same behavior as the "\accent"
+primitive. The difference is that you can compose more than one accent
+by "\accentabove" and "\accentbelow" macros. You can try:
+
+\begtt
+\it \accentabove {.}{.1ex}{\accentabove {,}{.1ex}{\v A}}
+\endtt
+
+\PLAIN:
+Unfortunately, the declaration macro "\accentdef" is not able to
+declare a macros which construct more than two accents. Moreover, the
+first accent has to be to join to the <base char> as one compact
+character in the font. If you needs more accents then you can use the
+macros "\accentabove" and "\accentbelow" directly in the document.
+
+\PLAIN:
+Since the version OFS Feb. 2004, the macro "\ofshexbox"\inl[ofshexbox]
+is available. It acts very similar to the plain one "\mathhexbox",
+furthermore it can set the font in accordance to actual version.
+You can declare the family of four metrics by means of the
+command "\ofshexboxdef"\inl[ofshexboxdef]:
+
+\begtt
+\ofshexboxdef <family>{<metrics-rm>}{<metrics-bf>}{<metrics-it>}{<metrics-bi>}
+% example:
+\ofshexboxdef 2 {cmsy}{cmbsy10}{cmsy}{cmbsy10} % an examle
+\endtt
+%
+The command "\ofshexbox <family><hexa-code>" prints out the requested
+character. Its font is one of four declared ones and its size is defined by
+the command "\fosize". The font choice depends on the actual version. If the
+version is different than "\bf", "\it", "\bi", the <metrics-rm> is used.
+
+OFS declares only <family> = 2 by default, because plain uses
+only "\mathhexbox2..". The purpose of this macro was to define characters
+"\S", "\dag", "\ddag", "\P" for CMfonts/CSfonts. The way of the definition
+has to be independent on actual setting of mathematical fonts, but dependent
+on actual size and version. See the file "ofs-8z.tex".
+
+We can easily define the "\euro" symbol by means of "\ofshexbox" for
+every font encoding, where it is unavailable:
+
+\begtt
+\ofshexboxdef {TS1}{tcrm1000}{tcbx1000}{tcti1000}{tcbi1000}
+\characterdef \euro * {\ofshexbox{TS1}BF}
+\endtt
+
+\subsec \PLAIN: The fonts in mathematics (the second apperance)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The user interface to the math fonts was described in
+\beglink{2.7}section 2.7\endlink. Now, it is the time to describe the principles of
+math fonts in detail.
+
+The "\setmath"\inl[setmath] command calculates the text, index and
+indexindex sizes from its parameters.
+The results are stored into
+macros "\textfosize"\inl[textfosize],
+"\scriptfosize" and "\scriptscriptfosize"\inl[scriptfosize].
+The values are in the form
+"at<dimen>" or "scaled<number>" depending on
+the format of the parameters.\inl[scriptscriptfosize]
+Then the "\setmath" runs the macro
+"\mathfonts".\inl[mathfonts]
+You can define the math fonts loading here but some
+conventions are recommended, see below.
+If the macro "\setmath" is run for the first time or the value "\fomenc"
+has been changed, then the "\setmath"
+runs the macro "\mathchars".\inl[mathchars]
+You can define the math encoding by the
+"\matchcode", "\mathchardef" etc. primitives here but some conventions
+are recommended, see below. The OFS serves the default values of the
+"\mathfonts" and "\mathchars" macros, see below.
+
+You can load a whole math family (text, index and indexindex size of
+one font) in "\mathfonts" macro by the
+"\loadmathfam"\inl[loadmathfam] command. This command has the
+following syntax possibilities:
+
+\begtt
+%% % font is declared by::
+\loadmathfam <family>[/<metrics>] % metrics
+\loadmathfam <family>[-<version>/] % actual family version
+\loadmathfam <family>[<switch>/] % textual font switch
+\loadmathfam <family>[X<switch>/] % extending switch metrics
+\endtt
+%
+Examples:
+
+\begtt
+\loadmathfam 0[tenrm/] % metrics is in accordance to the switch \tenrm
+\loadmathfam 5[-bi/] % actual text family metrics, version bi
+\newmathfam \symbfam
+\loadmathfam \symbfam [/psyr] % psyr metrics
+\newmathfam \extitfam
+\loadmathfam \extitfam [Xtenit/] % extending metrics for tenit switch
+\endtt
+%
+This example shows, that the textual font with the "\tenrm" font
+switch is used for math family~0. In the family~5, fonts are initiated
+just like in the case of "\setfonts [-bi/]". A new family "\symbfam"
+is declared as well. Fonts of the metric "psyr" are initiated into it.
+
+There exist a slight difference between usage of "\loadmathfam 5[tenbi/]" and
+"\loadmathfam 5[-bi/]" command. In the first case, OFS finds out a metrics
+of the "\tenbi" switch and the same metrics is then used for
+all font sizes. The only modification is done by the key word "at<dimen>".
+The other case means, that different sizes can use different metrics, but only if
+such a font ability is declared (see \beglink{3.8}section~3.8\endlink).
+
+The new family was in the example declared by means of the
+"\newmathfam"\inl[newmathfam]. It is an alternative commnd to~"\newfam".
+The reason for such a solution is evident. The plain macro "\newfam" is
+defined as "\outer" one. It means that it is not possible to use it inside
+any definition. Moreover the macro "\newmathfam" is local, so it spares some
+place for user families, than plain one "\newfam".
+New mathematical families are in the basic mathematical encodings
+defided exactly by "\chardef". The command
+"\lastfam=<number>"\inl[lastfam] sets the maximal
+used value. Such a structure guarantees, that user can use "\newmathfam" later on
+and the new family numbers are alocated with numbers greater than "\lastfam".
+
+Lets check out the the principle of the "\loadmathfam" macro activity. This macro
+finds out a metrics, that corresponds to a given parameter. Next, the primitive "\font"
+is executed three times:
+
+\begtt
+\font \<name>-Mt = <metric> \textfosize
+\font \<name>-Ms = <metric> \scriptfosize
+\font \<name>-Mss = <metric> \scriptscriptfosize
+\textfont <math fam> = \<name>-Mt
+\scriptfont <math fam> = \<name>-Ms
+\scriptscriptfont <math fam> = \<name>-Mss
+\endtt
+%
+Nevertheless <name> is the text of the parameter "\loadmathfam", that
+declares metrics (switch, version or metrics).
+
+The <name> is generated as name of the <fontswitch> or the name of the
+<metric> if only the <metric> is given as parameter of the "\loadmathfam".
+
+The fonts of math family 3 are loaded without of the size changes
+of index and indexindex fonts in plain\TeX. If you need this
+feature then you can use the prefix "\noindexsize"\inl[noindexsize]
+before "\loadmathfam". The macro "\loadmathfam" loads all three fonts
+at the same "\textfosize" size. Example:
+
+\begtt
+\noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+\endtt
+
+OFS defines four different macros for math font loading. Look at
+"ofsdef.tex" file for these definitions. Which of these four macros is
+used depends on the contents of macros "\fomenc" and "\mathversion"
+We assume two possibilities of "\fomenc": "CM" or "PS" and two
+possibilities of "\mathversion": "normal" and "bold".
+OFS defines two macros with mathcodes. Which macro is used depends on
+the contents of the macro "\fomenc". The list of these macros follows:
+
+\begitems
+* "\loadCMnormalmath"\inl[loadCMnormalmath]
+ --- loads CM fonts in \uv{normal} version.
+* "\loadCMboldmath"\inl[loadCMboldmath]
+ --- loads CM fonts in \uv{bold} version.
+* "\loadPSnormalmath"\inl[loadPSnormalmath]
+ --- loads PostScript fonts in \uv{normal} version.
+* "\loadPSboldmath"\inl[loadPSboldmath]
+ --- loads PostScript fonts in \uv{bold} version.
+* "\setCMmathchars"\inl[setCMmathchars]
+ --- keeps the mathcodes from plain.
+* "\setPSmathchars"\inl[setPSmathchars]
+ --- sets the mathcodes in order to some characters
+ are used from Symbol font.
+\enditems
+
+OFS sets the following defaults in the "ofsdef.tex" file:
+
+\begtt
+\ifx \fomenc\undefined \def\fomenc{PS}\fi
+\def\mathversion{normal}
+\def\defaultmathfonts{\csname load\fomenc\mathversion math\endcsname}@inl[defaultmathfonts]
+\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}@inl[defaultmathchars]
+\def\mathfonts{\defaultmathfonts}
+\def\mathchars{\defaultmathchars}
+\endtt
+
+It is possible to add the another math families to the list of loaded
+math families in "\loadmath" and "\mathchars" macros. You can do it, for example, by the
+following code:
+
+The example how to add the Euler fraktur from AMS follows:
+
+\begtt
+\input amsfn % here are declared metrics eufm and eufb
+\addcmd\mathfonts{\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{b}\fi
+ \newmathfam\frakfam \loadmathfam\frakfam [/euf\tmpa]}
+\def\frak#1{{\fam\frakfam#1}}
+\endtt
+%
+Another examples of mathematical families declaration are located
+in files "amsfn.tex", "txfn.tex" and "mtfn.tex". These files define
+the implicit groups of the mathematical fonts for "AMS", "TX", "PX", "MT"
+encodings. Finally they also contain comments (including examples), how to
+load additional font families by means of the command "\addcmd".
+
+I would like to load all OFS font declarations in the~ini\TeX\ (see the Ok\TeX\ project),
+but I want to spare the \TeX\ memory as much as possible too. So I suggest not to load
+the large definitions containing declarations of mathematical fonts encodings by means
+of "\mathchardef", etc. immediately, but during the first use in the document.
+So the OFS version Apr. 2004 contains redefined macro "\setPSmathchars":
+
+\begtt
+\def\setPSmathchars{\mathencread ofs-ps;}
+\endtt
+%
+The command "\mathencread <file>;"\inl[mathencread] loads the encoding
+commands included in the file <file.tex>. The file "ofs-ps.tex" contains encoding
+commands for "PS" encoding, "ofs-ams.tex" contains encoding
+commands for "AMS" encoding, etc.
+
+The files "ofs-ps.tex", "ofs-tx.tex" etc. contain encoding commands
+``packed'' into groups and defined by the "\mathencdef"\inl[mathencdef]
+command. By default, this command acts this way: ``define, run and forget''. Such a model
+spares the memory, but a disadvantage of its procedure is, that during repeated
+changes, encoding files are read over and over again. Mostly it does not matter at all,
+because the mathematical encoding is the same for the whole document.
+If this model is for somebody not suitable, the solution can be found in the macros
+"\mathencread" and "\mathencdef". They can be redefined by the way, that
+the files are read only once and during new execution of "\mathchars",
+encoding commands are read out of remembered macros.
+
+The command "\mathencread <file>;" works in group. The catcodes
+are set in accordance to plain\TeX\ ("\catcode`@=11" excluded) and the
+"<file>.tex" is read. The "\globaldefs=1" are during the reading, the empty lines
+and ends of lines are ignored. The commands "\mathencdef" run and forget defined
+macros after group enclosure. It means, that these macros run the "\mathchardef"
+commands in the sense of local settings.
+
+Let us explain an ensurance of restoring the delault values during
+switching between mathematical encodings. The command "\setmath"
+runs the macro "\mathcharsback"\inl[mathcharsback] in a time instant
+before "\mathchars". It serves the restoring of the mathematical
+encoding to the default state in accordance to plain\TeX{}.
+This macro is set to "\relax" by default, because the mathematical
+encoding is set in accordance to plain\TeX{}.
+If the command "\set<fomenc>mathchars" changes the values preset in
+the plain\TeX{}, it should also define the "\mathcharsback" macro.
+A procedure of setting the values into the initial
+state have to be stored in it.
+A command "\mathencread ofs-cm;" can be used in the macro
+"\mathcharsback", because the file "ofs-cm.tex" contains declarations
+of the mathematical encoding in accordance to plain\TeX{}.
+
+If we insist on declaring our own mathematical encodings (different
+from preprepared "PS", "CM", "AMS" etc.), the next principle has to be
+fullfiled: in all versions of mathematical fonts (normal/bold/etc.) should be
+set the numbers of the mathematical families by the same way
+and ended by the same "\lastfam". Such a principle is necessary, because
+after the version switching, the macro "\mathchars" is not run again.
+It is not recomended to change especially the family numbers, that are linked
+with the macro "\set<encoding>mathchars".
+
+Let us now descibe another macros, that helps us with the mathematical
+encoding declaration.
+Macro "\hex"\inl[hex] converts a number to a singledigit hexadeximal
+number. The usage of such a macro can be found in the files "ofs-ps.tex",
+"ofs-tx.tex", etc.
+
+You can define the control sequences which are working in both: text
+mode and math mode. You can use the
+"\safemathchardef"\inl[safemathchardef] macro instead
+"\mathchardef" primitive in "\mathchars" macro for this purpose:
+
+\begtt
+\safemathchardef \<sequence> <number>
+\endtt
+
+If the "\<sequence>" is not defined then "\safemathchardef" does the
+same work as "\mathchardef" primitive. If the "\<sequence>" is defined
+(we assume that this definition is used in text mode) then
+"\safemathchardef" saves the meaning of "\<sequence>" in
+"\T<sequence>", it performs "\mathchardef \M<sequence> = <number>"
+and it defines "\<sequence>" by the following way:
+
+\begtt
+\def \<sequence> {\ifmmode \expandafter \M<sequence>
+ \else \expandafter \T<sequence> \fi}
+\endtt
+%
+Now, the "\<sequence>" works in both: text and math mode.
+If the "\safemathchardef" is applied on the same "\<sequence>"
+repetitively, then the second and another use of "\safemathchardef"
+does nothing.
+
+We assume that all declarations of characters in text mode are
+performed before the first use of "\setmath" and that the
+"\safemathchardef" macros are used in "\mathchars" macro.
+
+The "\safemathaccentdef"\inl[safemathaccentdef] performs similar as
+"\safemathchardef". Only the "\mathaccentdef"\inl[mathaccentdef]
+macro is used instead
+"\mathchardef" primitive. This macro does roughly the following:
+
+\begtt
+\def \<sequence> {\mathaccent<number> }
+\endtt
+
+If you do not want to declare the whole new math family for only one
+character or a few characters (the number of math families is
+restricted to~16 for one formula in \TeX) then you can use the
+"\pickmathfont"\inl[pickmathfont] macro. This macro has the following
+syntax:
+
+\begtt
+\pickmathfont {<metric>}{<text>}
+% example:
+\mathbin {\pickmathfont {psybo}{\char"C4}}
+\endtt
+%
+The "\pickmathfont" command uses the "\font" primitive with the given
+<metric> and it prints the <text> in this font. The result is an atom
+of type Ord in the math list. The appropriate size is set
+(text/index/indexindex) because the "\mathchoice" primitive is used by
+"\pickmathfont" macro and the "\font" is loaded three times for each size.
+
+\subsec The different metrics for different sizes of font
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: This problem is solved in NFSS, see the syntax of the "fd"
+files in NFSS documentation. OFS for \LaTeX{} does no more things.
+
+\PLAIN (to the end of this section):
+There exist special font families (Computer Modern, for instance)
+where the different metrics are used for the different font sizes.
+This feature is implemented in OFS too. The <metric> parameter of the
+commands "\loadtextfam", "\loadmathfam" and "\pickmathfont" can be
+only the <symbolic name> and not the name of "tfm" file exactly.
+In such case, the <real metric> is calculated from the font size and
+from the data stored by a set of "\registertfm"\inl[registertfm]
+commands. The
+"\registertfm" has a following syntax:
+
+\begtt
+\registertfm <symbolic name> <space> <from>-<to> <space> <real metric> <space>
+\endtt
+
+The <from> and <to> parameters have to include the unit and they
+declares the interval of sizes with the following property: if the
+desired size of font is in interval <from>-<to> then the <real metric>
+is used instead the <symbolic name>. You need to use more
+"\registertfm" commands to the same <symbolic name> in order to use different
+<real metric> for different <from>-<to> intervals.
+The <from>-<to> interval is closed interval (including the boundary
+values) but the next "\registertfm" has a precedence over previous
+one. Then you can construct the non closed intervals by the choose of
+the right order of "\registertfm" commands. See the "ofsdef.tex" file
+for an example.
+
+If the both parameters <from> and <to> are empty then the
+<real metric> is used when the "scaled" keyword is given in desired
+font size or if desired font size does not lie in any declared
+interval. You can use the "*" symbol in <to> parameter---it
+means the infinity.
+
+The command "\registertfm <name> <space> - <space> - <space>"
+erases the previous registrations for a given <name>. Moreover, it marks
+<name> as an unavailable font. OFS then acts, as if the corresponding
+variant has not been declared at all. It gives us a possibility to mark
+nonexisting variants of a declared family, but only for certain encodings
+(see "cmssbxti" in the file "ofsdef.tex").
+
+The parameters <symbolic name> and <real metric> are expanded during
+the command "\registertfm" is working. Thus the "\fotenc"
+macro should not be used in these parameters. But you can use an "\edef"
+construction if necessary.
+
+The macro "\registerECfont"\inl[registerECfont] is an abbreviation
+of the repeated execution of the command "\registertfm" to all EC fonts
+sizes between "0500" up to "3583".
+The macro "\registerECTTfont"\inl[registerECTTfont] is an abbreviation
+for sizes "0800" do "3583", that are used for the typewriter fonts.
+Definitions and usage of these macros are located in the file "ofsdef.tex".
+Macros can be used for another fonts as well. But they have to have similarly
+scaled sizes like EC fonts (LH fonts with Russian alphabet or the fonts
+derived from CM~super).
+
+\subsec The limitations of usage the font family for certain encodings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: The usage of a family in a given encoding is dependent on the
+existence of "fd" file. It is all controlled by NFSS.
+
+\PLAIN (to the end of this section):
+The OFS version Feb.~2004 introduces a command
+"\registerenc"\inl[registerenc]. This command limits the usage of a declared font
+family only for a certain encoding. If the user writes "\setfonts" and
+requires the family in an unregistered encoding, the OFS prints out a
+warning on the terminal and does not switch to the requested family.
+It avoids an attempt to loading a nonexisting font metrics. The
+command "\registerenc" has two parameters.
+
+\begtt
+\registerenc <FamilyName>: <encoding><space>
+\registerenc Times: 8t % example
+\registerenc Times: 8z % Times is registered for two encodings
+\endtt
+%
+If the family is not registered for any encoding, OFS then suggests, that
+it is available in every encoding (dingbats fonts for example).
+
+The family usage is limited for a certain encoding by
+"\registerenc" in declaration files. The user can add another
+encoding by the command "\registerenc". The command
+"\registerenc <FamilyName>: * " means, that the family is available
+for arbitrary encodings.
+
+The parameter <FamilyName> can remain empty. In such case,
+the "\registerenc" uses the family declared in the last
+command "\ofsdeclarefamily".
+
+It is possible to find out, whether the family is registered
+for actual value of the "\fotenc":\inl[registeredfam]
+
+\vbox \bgroup
+\begtt
+\registeredfam <Family Name>? \iftrue
+ Family has the \fotenc registered or any encoding is enabled
+ or is not declared at all.
+ \else Family has registered the encoding,
+ but \fotenc is not among them
+ \fi
+\endtt \egroup
+
+If "\setfonts[<FamilyName>/]" is run for an undeclared family or for a family
+with unavailable encoding then OFS prints out a warning on the terminal and
+returns the "\setfontsOK"\inl[setfontsOK] with the value "\undefined".
+The "\setfontsOK" has asigned the value "\relax", whenever the font is successfully
+set.
+
+
+\sec The license
+%%%%%%%%%%%%%%%%
+
+The OFS package may be used by everybody without any license fees.
+Everybody can re-distribute this package, if no changes in files
+"readme.ofs", "ofs.tex", "ofsdef.tex", "ofs.sty", "ofs-8z.tex",
+"ofs-8t.tex", "a35.tex", "a35.sty", "ofsdoc.tex", "ofsdoc-e.tex",
+"ofsmtdef.tex" are done and
+all these files are included in the re-distribution. Only
+the author has a right to change these files and to change
+version of this package. If you need to change the content of any
+file mentioned above, you have to rename it. This package is
+distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY.
+
+\bigskip
+Prague 08/16/2001 \hfill the author: Petr Ol\v s\'ak
+\bigskip
+
+\sec History
+%%%%%%%%%%%%
+
+\noindent
+8/16/2001 --- the first version introduced
+
+\noindent
+10/24/2002 --- some petty changes realized in documentation,
+considering the changes in the version OFS Oct.~2002.
+The command "\addcmd" has been added. The optional
+parameters "(<Variant>)" in the command "\loadtextfam"
+were enabled.
+
+\bigskip
+\noindent
+12/29/2002: the English documentation in the file "ofsdoc-e.tex" is
+written. This is more or less the translation of the Czech original
+documentation from the file "ofsdoc.tex". Sorry for my poor English.
+
+I want to say a word of thanks to Mat\v ej Cepl (www.ceplovi.cz)
+who has made a proofreading of this English version.
+
+\bigskip
+\noindent
+2/10/2004 --- All modifications consider only OFS for plain:
+
+\def\bod{\hangindent=1.2em \hangafter=1 \noindent + }
+
+\bod Handling the macro declarations dependent on encoding has been
+ improved as well as the exception declarations and registering of the
+ encoding for a chosen family.
+ See~\beglink{3.5}section~3.5\endlink{} and \beglink{3.9}section~3.9\endlink.
+
+\bod Added the possibility to redefine the family (by the additional loading
+ the declaring file, that modifies the properties of the default families).
+
+\bod Declaration of CMRoman, CMSans and CMTypewriter for 8t encoding
+ by means of EC fonts.
+
+\bod Added the support for extended encoding 8c.
+
+\bod Modified the declaration of the mathematical encoding called PS.
+ "\int", "\sum" and "\prod" produces greater characters
+ in the display mode.
+
+\bod Defined a macro "\ofshexbox" and "\ofshexboxdef".
+
+\bod A new version of the interactive macro "ofstest.tex".
+
+\bod Introduced the directory "\examples/". There will be continuously added
+ the exaples of OFS usage there.
+
+\noindent
+3/12/2004 --- OFS for plain:
+
+\bod Encoding files are read directly from the "\loadtextfam".
+ That means the possibility to place the mapping metrics into the
+ encoding files by means of the command "\registerenc"
+ (I will use this ability for LANG).
+
+\bod "\characterdef" respects predefined macro an does not redefines it.
+
+\bod "\showfonts" reimplemented. It spares the memory and time, when
+ operates with the large font lists. Warning: if you have used macros,
+ that plays upon the internal macro "\listfamilies", this will not
+ operate any more. Since this version is not the obsolete "ofscatal.tex"
+ functional too. Instead of it is possible to use "ofstest.tex".
+
+\bod "ofstest.tex" modified. It operates with the newly imlemented list of
+ families "\ofslistfamilies".
+
+\noindent
+4/2/2004 --- "\plaincatcodes" added before reading the files
+"ofs-<encoding>.tex".
+
+\bod "\safelet" and "\protectreading" introduced.
+
+\bod The space behind the <character> in the "\accentdef" is optional.
+
+\bod Added the option "\loadmathfam <family>[-<version>/]". The
+ declaration for mathematical encodings "CM", "PS", "AMS",
+ "TX", "PX", "MT" has been extended and remade.
+
+\bod English documentation upgraded. Thaks to Tom\'a\v s Kom\'arek.
+
+
+\sec Index of macros defined in OFS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This index includes only the pointers to the pages where the macro is
+introduced (not only mentioned). The macro name is written in the
+margin on that place. The index is generated after first run of
+\TeX{}.
+
+The internal or auxiliary macros in "ofs.tex" are listed here too
+but they are not mentioned in the text, thus they have no pointer to
+the page in this index. Only a short comment is appended here. The
+version of OFS ({\smallbf PLAIN} or {\smallbf LATEX}) is listed near
+the each macro name in this index.
+
+\bigskip
+\immediate\closeout\indout
+\input \jobname.ind
+
+\begingroup
+\let\tt=\smalltt \let\it=\smallit \let\rm=\smallrm \rm
+\baselineskip=10.3pt
+
+\def\inr #1 #2 #3;{\noindent{\tt
+ \expandafter \ifx \csname ind:#2\endcsname \relax
+ \back#1%
+ \else
+ \beglink{#2}\back#1\endlink
+ \fi}\quad
+ #3 \quad\pg[#2]\par}
+\def\\#1 #2;{\inr #1 #1 #2;}
+\def\pl{{\sevenrm (PLAIN)}}
+\def\la{{\sevenrm (LATEX)}}
+\def\oba{{\sevenrm (PLAIN+LATEX)}}
+
+\\accentabove \pl\vadjust{\nobreak};
+\par\nobreak
+\\accentbelow \pl;
+\\accentdef \pl;
+\\accentdel \pl;
+\\accentdefori \unskip, {\tt\back accentdelori} \pl~internal,
+ stores the default macro purport;
+\\accentnodef \pl~internal, {\tt\back def\back <macro>\#1%
+ \char`\{\back printaccent\char`\{<macro>\char`\}\char`\{\#1\char`\}\char`\}};
+\\addcmd \oba;
+\inr bf rm \oba;
+\inr bi rm \oba;
+\\bifam \pl~internal, math family for BoldItalic;
+\\calculatemetricfile \pl~internal, defines {\tt\back metricfile}
+ by fontsize;
+\\catcodesloop \pl~internal, sets the character categ. according to a given num.;
+\\characterdef \pl;
+\\characterdel \pl;
+\\characterdefori \unskip, {\tt\back characterdelori} \pl~internal,
+ stores default macro purport;
+\\characternodef \pl~internal, {\tt\back def\back <macro>%
+ \char`\{\back printcharacter\char`\{<macro>\char`\}\char`\}};
+\\currentfamily \pl;
+\\currentfomenc \pl~internal, the name of last used math. encoding;
+\\currentvariant \pl;
+\\declaredfamily \pl~internal, contains the name of the last declared family;
+\\defaultextraenc \pl;
+\\defaultmathchars \pl;
+\\defaultmathfonts \pl;
+\\defpttotmpa \pl~internal, does {\tt\back def\back tmpa\char`\{pt\char`\}},
+ if the unit is omited;
+\\detailfontmessages \pl;
+\\displayfontmessages \pl;
+\\displaymessage \pl~internal;
+\\docharacterdef \pl~internal, for use of {\tt\back characterdef} macro;
+\\doextchar \pl~internal, for use of {\tt\back extchar} macro;
+\\dosafemathdef \pl~internal, for use of {\tt\back safemath*def} macros;
+\\donumbercharacterdef \pl~internal, for use of {\tt\back characterdef} macro;
+\\endOFSmacro \pl~internal, the reading of {\tt[<file>, ...]}
+ after {\tt\back input ofs};
+\\expandaction \pl;
+\\extchar \oba;
+\\extraenc \pl;
+\\extrafont \pl;
+\\fontdef \oba;
+\\fontloadmessage \pl~internal, the tracing of {\tt\back font} primitives;
+\\fontmessage \pl~internal, three values: nothing,
+ {\tt\back wlog} or {\tt\back displaymessage};
+\\fontprefix \pl~internal, two values: nothing or {\tt\back global};
+\\fontusage \oba;
+\\fosize \pl;
+\\fomenc \pl;
+\\fotenc \pl;
+\\fragilecommand \pl;
+\\fragilecommand! \pl;
+\\hex \pl;
+\\ifknownfam \oba;
+\\isunitpresent \pl~internal, solves the case of empty unit;
+\inr it rm \oba;
+\\knownchar pl;
+\\knownfam pl;
+\\lastfam pl;
+\\lccodes \unskip, {\tt\back lccodesloop} \pl;
+\\loadCMboldmath \pl;
+\\loadCMnormalmath \pl;
+\\loadingenc \pl;
+\\loadmathfam \pl;
+\\loadPSboldmath \pl;
+\\loadPSnormalmath \pl;
+\\loadtextfam \pl;
+\\logfontmessages \pl;
+\\mathaccentdef \pl;
+\\mathchars \pl;
+\\mathcharsback \pl;
+\\mathencdef \pl;
+\\mathencread \pl;
+\\mathfonts \pl;
+\\mathversion \pl;
+\\metricfile \pl~internal, the metric name if {\tt\back font}
+primitive is used;
+\\metrictmpa \pl~internal, expands to the metric of {\tt\back tmpa} font;
+\\modifydef \pl;
+\\modifyenc \pl;
+\\modifylist \pl;
+\\modifyread \pl;
+\\newfamily \pl~auxiliary, the given family name;
+\\newmathfam \pl;
+\\newmodifylist \pl;
+\\newvariant \pl;
+\\nofontmessages \pl;
+\\noindexsize \pl;
+\\noPT \pl~internal, removes {\tt pt} from~{\tt\back the<dimen>} [TBN, pg.~80];
+\\ofsaddenctolist \pl~internal, adds parameter into the list {\tt\back newmodifylist};
+\\OFSdeclarefamily \la;
+\\ofsdeclarefamily \pl;
+\\OFSextraencoding \la;
+\\OFSfamily \la;
+\\OFSfamilydefault \la;
+\\ofshexbox \pl;
+\\ofshexboxdef \pl;
+\\ofsinput \pl~internal, reads file with {\tt\back globaldefs=1}, ignores endlinechars;
+\\ofslistfamilies \pl~internal, family list for {\tt\back showfonts};
+\\ofslistfamily \pl~internal, envokes the family in {\tt\back listfamilies};
+\\ofslistvariants \pl~internal, text for listing of variants to the log;
+\\ofslisttext \pl~interní, envokes the text in {\tt\back listfamilies};
+\\ofsloadfont \pl~internal, loads one font;
+\\ofsloadfontori \pl~internal, loads one font;
+\\ofsmeaning \pl~internal, removes the word {\tt letter}/{\tt character}
+ from {\tt \back meaning};
+\\ofsmessageheader \pl~internal, header of the messages;
+\\OFSnormalvariants \la;
+\\OFSprocessoptions \la;
+\\OFSputfamlist \la;
+\\ofsputfamlist \pl;
+\\ofsremovefromlist \pl~internal, erases the family from the list;
+\\OFSversion \oba~internal, date and version of OFS;
+\\orifosize \pl~auxiliary, saves {\tt\back fosize} value;
+\\origTeX \pl~internal, original definition of \TeX{} logo;
+\\oriloadfam \pl~auxiliary, saves {\tt loadtextfam} value;
+\\pickmathfont \pl;
+\\plaincatcodes \pl~internal, sets the chars categories according to plain\TeX{};
+\\printaccent \pl;
+\\printaccentwarn \pl;
+\\printcharacter \pl;
+\\printcharacterwarn \pl;
+\\processOFSoption \pl~internal, for use of {\back endOFSmacro};
+\\protectreading \pl;
+\\readfamvariant \pl~internal, checks if the variant is given;
+\\readfirsttoken \pl~internal, returns the first token of text separed
+by {\tt:\back end};
+\\readfosize \pl~internal, inserts the {\tt\back fosize} value to
+ {\tt\back dimen0};
+\\readmag \pl~internal, calculates {\tt\back fosize} if
+ {\tt mag}<decimal number> is given;
+\\readOFSoptions \pl~internal, for use of {\tt\back endOFSmacro};
+\\readothertokens \pl~internal, returns the second and other tokens to
+{\tt:\back end};
+\\readsixdigits \pl~internal, for rounding algorithm;
+\\registeredfam \pl;
+\\registerECfont \pl;
+\\registerECTTfont \pl;
+\\registerenc \pl;
+\\registertfm \pl;
+\\restorefontid \pl~internal, restores font name, see {\tt\back savefontid};
+\\rm \oba;
+\\runmodifylist \pl;
+\\safelet \pl;
+\\safeletwarn \pl;
+\\safemathaccentdef \pl;
+\\safemathchardef \pl;
+\\savefontid \pl~internal, saves font name for Overfull messages;
+\\savetokenname \pl~internal, similar to {\tt\back string} without backslash;
+\\scriptfosize \pl;
+\\scriptscriptfosize \pl;
+\\separeofsvariant \pl~internal, separes the "(<Variant>)" in {\tt\back loadtextfam};
+\\setextrafont \oba;
+\\setCMmathchars \pl;
+\\setfonts \oba;
+\\setfontshook \pl;
+\\setfontsOK \pl;
+\\setfontfamily \pl~internal, {\tt\back setfonts},
+ if variant is not given;
+\\setfosize \pl~internal, calculate the value of {\tt\back fosize};
+\\setmath \pl;
+\\setPSmathchars \pl;
+\\setsimplemath \pl;
+\\setsinglefont \pl~internal, {\tt\back setfonts},
+ if the variant is given;
+\\setsinglefontname \pl~internal, removes the possible "at<dimen>" from <metric>;
+\\sgfamily \pl~internal, the information about the family name;
+\\sgvariant \pl~internal, the information about the variant;
+\\showfonts \oba;
+\\singlefont \pl~internal;
+\\singlefontname \pl~internal, removes the {\tt at<dimen>} from metric name;
+\\skipfirststep \pl;
+\\slantcorrection \pl~internal, for use of
+ {\tt\back accentabove} and {\tt\back accentbelow};
+\\storeofsvariant \pl~internal, separes optional parameter of {\tt\back loadtextfam};
+\\switchdeftodel \pl~internal, switches {\tt\back accent/characterdef}
+ with~{\tt\back *del};
+\\tenbi \pl;
+\inr tenbf tenrm \pl;
+\inr tenit tenrm \pl;
+\\tenrm \pl;
+\\testOFSoptions \pl~internal, for use of {\tt\back endOFSmacro};
+\\testtfmsize \pl~internal, for use of {\tt\back registertfm} macro;
+\\testtfmsizeat \pl~internal, the auxiliary value of {\tt\back testtfmsize};
+\\testtfmsizescaled \pl~internal, the auxiliary value of {\tt\back testtfmsize};
+\\textfosize \pl;
+\\tryloadenc \pl~internal, loads encoding files;
+\\tmpa \oba~temporary;
+\\tmpb \oba~temporary;
+\\tmpc \pl~temporary;
+\\warnmissingfont \pl~internal, message about missing variant;
+\\warnM \unskip, {\tt\back warnF}, {\tt\back warnT}, {\tt\back warnI},
+\pl~internal, message about missing variant;
+\\warnunregistered \pl~internal, print out, disabled encoding of a chosen family;
+
+\endgroup
+
+\sec References
+%%%%%%%%%%%%%%%
+
+\noindent \hangindent=2\parindent
+[TBN] Petr Ol\v s\'ak {\it \TeX{}book naruby}, Konvoj
+1.~ed. 1997 (ISBN 80-7302-007-6),
+2.~ed. 2001 (ISBN 80-85615-64-9), Brno, 466 pages.
+Czech language.
+PDF version of this book is free available on
+{\tt http://math.feld.cvut.cz/olsak/tbn.html}.
+
+
+\end
+
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/doc/ofsdoc.pdf b/macros/generic/ofs/doc/ofsdoc.pdf
new file mode 100644
index 0000000000..f6707b23b8
--- /dev/null
+++ b/macros/generic/ofs/doc/ofsdoc.pdf
Binary files differ
diff --git a/macros/generic/ofs/doc/ofsdoc.tex b/macros/generic/ofs/doc/ofsdoc.tex
new file mode 100644
index 0000000000..6d6fe9e42b
--- /dev/null
+++ b/macros/generic/ofs/doc/ofsdoc.tex
@@ -0,0 +1,2402 @@
+% A documentation for OFS package
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% July 2001 Petr Olsak
+% February 2004
+
+% See the ofsdoce.tex for English version of this documentation
+
+\chyph % pou¾ijte csplain
+
+\headline={\llap{\tt May 2004}\hfil See the ofsdoc-e.tex for English version
+ of this documentation.\global\headline={\hfil}}
+
+\magnification\magstephalf
+
+\hoffset=4pc
+\voffset=1pc
+\hsize=31.6pc
+\vsize=49pc
+\raggedbottom
+\parindent=15pt
+\emergencystretch=2em
+
+\font\smallbf=csb10 at7pt
+\font\smalltt=cstt8
+\font\smallit=csti8
+\font\smallrm=csr8
+\font\titulfont=\fontname\tenbf\space scaled\magstep4
+\font\bigbf=\fontname\tenbf\space scaled\magstep1
+
+\def\Red{}
+\def\Black{}
+\def\Blue{}
+\def\Green{}
+\def\beglink#1{}
+\def\endlink{}
+\def\aimlink#1{}
+
+\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%%
+\ifnum\pdfoutput>0
+
+\ifx \pdfstartlink\undefined %%% PDFTeX version <= 13
+ \let\pdfstartlink=\pdfannotlink
+\fi
+
+\def\beglink#1{% % Zaèátek textu odkazu, #1 je klíè odkazu
+ \Green \pdfstartlink height9pt depth3pt
+ attr{/Border[0 0 0]} goto name{#1}\relax}
+\def\endlink{\pdfendlink\Black}
+
+\def\aimlink#1{% % Místo cíle odkazu, #1 je klíè odkazu
+ \expandafter\ifx \csname aim:#1\endcsname \relax
+ \expandafter\gdef \csname aim:#1\endcsname {}%
+ \vbox to0pt{\vss\hbox{\pdfdest name{#1} fith}\kern15pt}%
+ \fi
+}
+\def\pdfsetcmykcolor#1{\special{PDF:#1 k}}
+\def\Red{\leavevmode\pdfsetcmykcolor{0.1 0.9 0.9 0}}
+\def\Black{\leavevmode\pdfsetcmykcolor{0 0 0 1}}
+\def\Green{\leavevmode\pdfsetcmykcolor{0.9 0.1 0.9 .3}}
+\def\Blue{\leavevmode\pdfsetcmykcolor{0.9 0.9 0.1 0}}
+
+\pdfcompresslevel=9
+\pdfinfo{/Author (Petr Olsak)
+ /CreationDate (July 2001)
+ /ModDate (March 2004)
+ /Creator (TeX)
+ /Producer (pdfTeX)
+ /Title (OFS: Olsak's Font System)
+ /Subject (Documentation)
+ /Keywords (TeX, fonts)
+}
+
+\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%%
+
+
+\def\PLAIN #1:{{\smallbf \Red PLAIN\Black\if|#1|\else\space#1\fi}:}
+\def\LATEX #1:{{\smallbf \Red LATEX\Black \if|#1|\else\space#1\fi}:}
+\def\OBA #1:{{\smallbf \Red PLAIN+LATEX\Black \if|#1|\else\space#1\fi}:}
+
+\newcount\secnum \newcount\subsecnum
+
+\def\sec #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip
+ \vskip2\baselineskip
+ \subsecnum=0 \advance\secnum by1
+ \noindent{\bigbf\llap{\the\secnum.\quad}#1}\par\nobreak\medskip}
+\def\subsec #1\par{\removelastskip\bigskip
+ \advance\subsecnum by1
+ \noindent{\bf \llap{\aimlink{\the\secnum.\the\subsecnum}%
+ \the\secnum.\the\subsecnum.\quad}#1}\par\nobreak\medskip}
+\def\title #1\par{\vglue2\baselineskip
+ \centerline{\titulfont #1}\vskip2\baselineskip}
+
+\def\LaTeX{La\TeX}
+
+\catcode`<=13
+\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}}
+\def\,{\thinspace}
+
+{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
+\def\begtt{\medskip\bgroup \setverb \catcode`@=0 \activespace
+ \parindent=0pt \catcode`\"=12
+ \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1}
+ \obeylines \startverb}
+{\catcode`\|=0 \catcode`\\=12
+|gdef|startverb#1\endtt{|tt#1|egroup|medskip|testpar}}
+\long\def\testpar#1{\ifx\par#1\else\noindent\fi#1}
+
+\catcode`"=13
+\def"{\hbox\bgroup\setverb\activespace\tt\readverb}
+\def\readverb #1"{#1\egroup}
+
+\def\begitems{\medskip\bgroup \catcode`*=13 }
+{\catcode`*=13 \gdef*{\item{$\bullet$}}}
+\def\enditems{\medskip\egroup}
+
+\newwrite\indout
+\immediate\openout\indout=\jobname.ind
+\def\inl[#1]{\strut
+ \write\indout{\noexpand\indexentry{#1}{\the\pageno}}%
+ \vadjust{\vbox to0pt{\vss
+ \hbox to\hsize{\llap{{\aimlink{#1}\smalltt\Blue\char`\\ #1%
+ \ifx\extratext\empty\else\space\extratext\fi\Black}%
+ \kern2pt\quad}\strut\hfil}%
+ \hrule height0pt}}\def\extratext{}}
+\def\inll[#1 #2]{\def\extratext{#2}\inl[#1]}
+\def\indexentry #1#2{\expandafter \ifx \csname ind:#1\endcsname \relax
+ \expandafter \def \csname ind:#1\endcsname {#2}%
+ \else
+ \expandafter \edef \csname ind:#1\endcsname {%
+ \csname ind:#1\endcsname, #2}%
+ \fi
+}
+\def\pg[#1]{\csname ind:#1\endcsname}
+
+\chardef\back=`\\
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title OFS: Ol¹ákùv fontový systém
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+OFS je makro, které umo¾ní pøehlednì
+v~\TeX{}u vybírat rodiny fontù, jejich¾ názvy jsou v~souladu s~názvy
+z~písmového katalogu. Toto makro je z~u¾ivatelského
+pohledu stejné v~plainu i \LaTeX{}u. Výklad pou¾ití OFS bude tedy
+spoleèný pro obì skupiny u¾ivatelù. Pokud nìkterý text platí jen
+pro csplain (a podobné formáty), bude uveden slovem \PLAIN: a pokud
+je text urèen pro u¾ivatele \LaTeX{}u2e, je uveden slovem \LATEX:.
+
+Pod skupinu \PLAIN: patøí nejen csplain, plain a odvozené formáty, ale
+té¾ dnes u¾ nepou¾ívaný \LaTeX2.09 bez NFSS. Pod skupinu \LATEX: bychom
+mohli zaøadit v¹echny formáty, které pracují s~NFSS~2, pøedev¹ím tedy
+\LaTeX 2e.
+
+Po zavedení pøíslu¹ných maker v~záhlaví dokumentu (viz ní¾e) se na
+terminálu mimo jiné objeví:
+
+\begtt
+@PLAIN: OFS (Olsak's Font System) based on plain initialized. @char`<verze>
+@LATEX: OFS (Olsak's Font System) based on NFSS initialized. @char`<verze>
+\endtt
+Výhody OFS:
+
+\begitems
+* Sjednocuje rozhraní pro u¾ivatele \LaTeX{}u i plainu.
+* Pomocí pøíkazu "\fontusage" dostaneme na terminál a do logu struènou
+ informaci o~pou¾ití maker z~OFS.
+* Umo¾òuje pracovat se skuteènými názvy písmových rodin tak,
+ jak jsou uvedeny v~písmovém katalogu a tím
+ nenutí u¾ivatele si kromì tìchto názvù pamatovat je¹tì
+ interní zkratky pou¾ité v~NFSS nebo v~názvech metrik fontù.
+* Umo¾ní pracovat s~fontem rozlo¾eným do dvou metrik
+ (základní a roz¹iøující) jakoby se jednalo o~jediný font.
+* Umo¾ní na zaèátku dokumentu vybrat oblíbené kódování základní
+ metriky, jsou-li metriky pøipraveny v~rùzných kódováních
+ (typicky kódování IL2 a T1).
+* Definuje rozhraní pro vytváøení pomocných souborù, které
+ obsahují konverzní informace mezi \uv{dlouhými názvy} fontù
+ z~katalogu a \PLAIN: názvy metrik
+ nebo \LATEX: zkratkami pou¾ívanými v~NFSS.
+* \PLAIN: Umo¾òuje podobnou nezávislost výbìru jednotlivých
+ parametù fontù, jako NFSS v~\LaTeX{}u.
+* \PLAIN: Definuje deklaraèní pøíkazy pro podchycení kódování fontù.
+* \PLAIN: Je mo¾né pro rùzné velikosti registrovat rùzné metriky, co¾
+ vyu¾ijeme zejména u~rodiny Computer Modern.
+* \PLAIN: Obsahuje nástroje na pou¾ití PostScriptových fontù
+ i v~matematické sazbì.
+* Interaktivní makro "ofstest.tex" umo¾ní tisknout vzorky odstavcù ve
+ zvolených písmových rodinách, tisknout tabulky fontù, katalogy fontù,
+ vzorky matematické sazby a seznamy znakù ve fontech vèetnì jejich
+ \TeX{}ových sekvencí. Staèí napsat na pøíkazový øádek
+ "tex ofstest [allfonts]" nebo "csplain ofstest [allfonts]"
+ a øídit se pokyny na terminálu.
+\enditems
+
+
+\sec Èlenìní písmových rodin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makro OFS vychází z~toho, ¾e vìt¹ina dnes dodávaných písmových rodin
+obsahuje ètyøi øezy: základní ("\rm"), tuèný ("\bf"), kurzívu ("\it"),
+a tuènou kurzívu ("\bi")\inll[rm \back bf \back it \back bi].
+Tìmto øezùm budeme øíkat \uv{standardní varianty}.
+Po zavedení rodiny pøíkazem "\setfonts" (viz ní¾e) lze pak
+pøepínat pomocí "\rm", "\bf", "\it" a "\bi" mezi variantami v~dané
+rodinì. První tøi uvedené pøepínaèe jsou známé z~plainu
+(v~\LaTeX{}u pøetrvávají z~dob za¹lé slávy LaTeXu2.09)
+a ètvrtý pøepíná do varianty BoldItalic.
+
+Nìkteré rodiny mohou deklarovat pøepínaèe dal¹ích
+\uv{nadstandardních variant} a u~nìkterých rodin naopak
+mù¾e chybìt i nìkterá ze standardních variant.
+
+Varianty v~nìkterých rodinách se mírnì li¹í od zde uvedených
+názvù pro standardní varianty. Místo tuèného písma mù¾e být
+tøeba pøítomno jen polotuèné a místo kurzívy tøeba sklonìné písmo.
+Pøepínaèe "\rm", "\bf", "\it" a "\bi" zùstávají pokud mo¾no
+zachovány, tak¾e by nás nemìlo vyvést z~rovnováhy, ¾e v~nìkteré rodinì
+tøeba "\it" pøepíná do sklonìného písma a ne do kurzívy.
+
+Pokud chceme souèasnì pracovat s~dal¹ími pøepínaèi fontù jiné rodiny
+(napøíklad "\tt" pro strojopis), je mo¾né takové pøepínaèe deklarovat pomocí
+pøíkazu "\fontdef".
+
+Èlenìní fontù do rodin je deklarováno v~souborech, které
+mají v~plainu podobný význam, jako {\tt fd} (Font Definition) soubory
+z~\LaTeX{}u. Doporuèená pøípona souboru je pro plain {\tt tex} a
+pro \LaTeX{} {\tt sty}. Tìmto souborùm budeme øíkat \uv{deklaraèní soubory}.
+Podle názvu deklaraèních souborù by mìlo být u¾ivateli zøejmé, které rodiny
+jsou v~nìm deklarovány. Pøíklady:
+
+\begtt
+@PLAIN: @LATEX:
+sjannon.tex, sjannon.sty ... souhrnná rodina Jannon ze Støe¹ovic
+a35.tex, a35.sty ... základní skupina 35 fontù od Adobe
+\endtt
+
+Vidíme, ¾e deklaraèní soubory (na rozdíl od {\tt fd} souborù z~\LaTeX{}u)
+obsahují obvykle definice více souvisejících rodin. Mezi tìmito
+soubory u¾ivatel vybírá ty, které bude potøebovat a uvede jejich jména
+pøi zavedení makra OFS v~záhlaví svého dokumentu.
+Aby mìl u¾ivatel zjednodu¹enou práci, zakládáme obvykle té¾ souhrné
+soubory, které obsahují "\input" nebo "\RequirePackage" na jednotlivé
+deklaraèní soubory:
+
+\begtt
+skatalog.tex, skatalog.sty ... v¹echny fonty ze Støe¹ovic
+allfonts.tex, allfonts.sty ... v¹echny fonty na TeXové instalaci
+\endtt
+
+
+\sec U¾ivatelské pøíkazy
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsec Zavedení OFS
+%%%%%%%%%%%%%%%%%%%%
+
+Pro pøíklad pøedpokládejme, ¾e budeme chtít pracovat
+s~fonty ze souhrnné rodiny Jannon a
+DynaGrotesk. Proto¾e se jedná o~rodiny ze Støe¹ovické písmolijny od pana
+©torma, najdeme odpovídající deklaraèní soubory v~adresáøi
+"storm". Na Internetu je získáme spoleènì s~makrem OFS
+napøíklad na "www.cstug.cz/stormtype".
+Souhrnné rodiny Jannon a Dyna\-Grotesk jsou deklarovány v~tìchto souborech:
+\PLAIN: "sjannon.tex", "sdynamo.tex";
+\LATEX: "sjannon.sty", "sdynamo.sty".
+Písmeno "s" na zaèátku názvù znamená,
+¾e fonty pocházejí ze Støe¹ovické písmolijny. Jména tìchto souborù bez
+pøípony je nutné uvést v~hranaté závorce pøi zavedení makra OFS takto:
+
+\begtt
+@PLAIN: \input ofs [sjannon, sdynamo] % mezera pøed "[" je nutná!
+@LATEX: \usepackage [sjannon, sdynamo] {ofs}
+\endtt
+
+Dále mù¾eme pracovat s~rodinami, které jsou obsa¾eny v~souhrnných
+rodinách Jannon a DynaGrotesk.
+Napí¹eme-li do dokumentu pøíkaz "\showfonts"\inl[showfonts],
+zobrazí se na \hbox{terminál} (a~zapí¹e do logu) seznam názvù jednotlivých
+rodin, které dále mù¾eme pou¾ívat. Po zavedení "sjannon" a
+"sdynamo", jak bylo uvedeno vý¹e, zobrazí pøíkaz "\showfonts" tento seznam:
+
+\begtt
+OFS (l.1): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+sjannon.tex:
+ [JannonAntikva/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonText/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonCaps/] \rm, \bf, \it, \bi
+sdynamo.tex:
+ [DynaGroteskDXE/] \rm, \bf, \it, \bi
+ [DynaGroteskRXE/] \rm, \bf, \it, \bi
+ [DynaGroteskLXE/] \rm, \bf, \it, \bi
+ ... <a dal¹ích 15 rodin DynaGrotesk> ...
+\endtt
+
+Prvních 6 rodin (oznaèené jako defaults) je definováno v~OFS.
+Teprve dal¹í rodiny jsou deklarovány v~pou¾itých souborech.
+
+Vedle názvù rodin jsou uvedeny pøepínaèe variant, které pro danou
+rodinu mù¾eme pou¾ít. První ètyøi pøepínaèe jsou pro standardní
+varianty a pokud v~nìkteré rodinì taková varianta není pøístupná,
+je zde na místì odpovídajícího pøepínaèe pomlèka.
+Pátý a pøípadnì dal¹í pøepínaèe se vztahují k~pøípadným nadstandardním
+variantám. Zde napøíklad rodina Helvetica má navíc pøepínaèe
+pro varianty \uv{Narrow} a rodiny Jannon mají pøepínaèe pro
+varianty \uv{Medium}.
+
+Napí¹eme-li do dokumentu pøíkaz "\fontusage"\inl[fontusage],
+zobrazí se na terminál a
+do logu struèná informace o~pou¾ití pøíkazù z~balíku OFS.
+
+Kromì vý¹e uvedeného zpùsobu zavedení:
+
+\begtt
+@PLAIN: \input ofs [<soubor>, <soubor>, ...]
+@LATEX: \usepackage [<soubor>, <soubor>, ...] {ofs}
+\endtt
+%
+existuje je¹tì mo¾nost pøímo zavést po¾adované soubory. Pak není nutné
+v~dokumentu explicitnì zavádìt soubor "ofs.tex" resp. "ofs.sty":
+
+\begtt
+@PLAIN: \input <soubor> \input <soubor> ...
+@LATEX: \usepackage {<soubor>} \usepackage {<soubor>} ...
+\endtt
+%
+Pøíklad:
+
+\begtt
+@PLAIN: \input sjannon \input sdynamo
+@LATEX: \usepackage {sjannon} \usepackage {sdynamo}
+\endtt
+%
+Nedoporuèuje se (zvlá¹tì v~\LaTeX{}u) oba tyto zpùsoby zavedení
+makra OFS míchat.
+
+
+\subsec Pøíkaz {\tt\back setfonts}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+V~dal¹ích pøíkladech pøedpokládáme,\inl[setfonts]
+¾e jsme zavedli pouze potøebné
+rodiny, napøíklad ze souborù {\tt sjannon} a {\tt sdynamo}.
+Nyní tøeba po pou¾ití pøíkazu
+
+\begtt
+\setfonts [JannonText/12pt]
+\endtt
+%
+lze pøepínat do jednotlivých variant této rodiny JannonText ve
+velikosti 12pt. Je mo¾né pou¾ít pøepínaèe
+"\rm", "\bf", "\it", a "\bi" a speciálnì pro tuto
+rodinu je¹tì "\mr" a "\mi".
+
+Pøíkaz "\setfonts [<JménoRodiny>/<velikost>]"
+pøepíná do nové rodiny a ctí
+naposledy zapnutou variantu.
+Pokud pøed tímto pøíkazem
+byla zapnutá tøeba varianta BoldItalic, pak po tomto pøíkazu zùstává
+zapnutá tato varianta i v~nové rodinì.
+Pokud v nové rodinì naposledy zapnutá
+varianta neexistuje, pøepíná se do "\rm". Tato varianta musí být
+deklarována v~ka¾dé rodinì.
+
+Pøíkaz "\setfonts" vymezuje v¹echny zmìny pouze
+lokálnì. Po ukonèení skupiny se sazba vrací k~rodinì a variantì, která
+byla aktuální pøi zahájení skupiny.
+
+Parametry pøíkazu "\setfonts" mohou být prázdné:
+"\setfonts [<JménoRodiny>/]" pøepne do nové
+rodiny a ctí naposledy nastavenou velikost a
+"\setfonts [/<velikost>]" nastaví novou velikost
+a ponechá aktuálnì vybranou rodinu. Po inicializaci OFS je (pro
+pøípad pou¾ití prázdného parametru) defaultnì nastavena rodina
+"CMRoman" a velikost 10\,pt. Pøíkaz "\setfonts [/]"
+je syntakticky korektní, ale neudìlá kromì zápisu
+do logu vùbec nic.
+
+Parametr <JménoRodiny>, je-li uveden, musí pøesnì odpovídat jménu
+rodiny podle seznamu známých rodin (viz nahoøe pøíkaz "\showfonts").
+Je tøeba dodr¾ovat malá a velká písmena a celé jméno psát bez mezer.
+Pokud se tento parametr neshoduje s~¾ádnou známou rodinou, vypí¹e \TeX{}
+varování a pøipojí seznam v¹ech známých rodin. Tak¾e napøíklad
+"\setfonts [?/]" lze pou¾ít se stejným efektem,
+jako pøíkaz "\showfonts".
+
+\LATEX: <JménoRodiny> mù¾e být nejen jméno podle seznamu známých rodin
+(dlouhý název), ale je dovoleno pou¾ít i zkratku z~NFSS. Tak¾e
+napøíklad "\setfonts [Times/]" a "\setfonts [ptm/]" je v~\LaTeX{}u toté¾.
+
+\OBA:
+Parametr <velikost> má tyto mo¾nosti:
+
+\begitems
+* <èíslo> .... napø. "12", "17.4",
+* <èíslo><jednotka> .... napø. "12pt", "17.4pt", "10dd",
+* "at"<èíslo><jednotka> .... napø. "at12pt", "at17.4pt", "at10dd",
+* "scaled"<celé èíslo> .... napø. "scaled1200", "scaled\magstep3",
+* "mag"<desetinné èíslo> .... napø. "mag1.2", "mag.7", "mag2.0".
+\enditems
+
+První tøi mo¾nosti se významovì shodují. Klíèové slovo "at" je
+nepovinné a není-li uvedeno ani "at" ani jednotka, doplní se
+automaticky "at<èíslo>pt". Font se zavede pøesnì v~po¾adované
+velikosti. Samozøejmì pøi globálním "\magnification" celého dokumentu
+se jedná o~relativní a nikoli absolutní rozmìry, pokud nepou¾ijeme
+jednotku uvozenou slovem "true" (napø. "17truept").
+Jestli¾e pí¹eme klíèové slovo "at", nesmíme vynechat jednotku.
+Nesprávnì: "at12", správnì: "at12pt" nebo jenom "12".
+
+Ètvrtá mo¾nost ("scaled") je shodná s~pou¾itím slova "scaled" pøi zavádìní
+fontu pomocí primitivu "\font". Napø. "scaled1200" je font, jeho¾ základní
+velikost je pronásobena koeficientem 1,2. Je-li základní velikost
+fontu 10\,pt (co¾ je obvyklé), pak je "scaled1200" shodné s~"at12pt".
+
+Poslední mo¾nost ("mag") pronásobí aktuální velikost fontù daným
+koeficientem. Na rozdíl od "scaled" se tedy vztahuje k~aktuální
+velikosti a nikoli k~základní velikosti fontu. Je-li nejprve pou¾ito
+tøeba "\setfonts[/12]" a v~zápìtí "\setfonts[/mag2.]", rodina fontù
+bude nyní sázena ve velikosti 24\,pt. Pøíklad:
+
+\begtt
+\def\small{\setfonts[/mag.7]}
+Text {\small je men¹í \small a men¹í \small a je¹tì men¹í} a tady je
+zase v normální velikosti.
+\endtt
+
+Upozornìní: Zmìna velikosti fontù pomocí "\setfonts" nijak nemìní
+vzdálenost úèaøí ("\baselineskip"). To si musí u¾ivatel nastavit sám.
+
+Pomocí "\setfonts" mù¾eme nastavit nejen celou rodinu (to ovlivní
+pøepínaèe variant "\rm", "\bf", "\it", "\bi" a pøípadnì dal¹í), ale také
+jen zvolenou variantu v~dané rodinì. V~takovém pøípadì
+"\setfonts" nemìní význam pøepínaèù variant ani aktuální
+velikost ostatních fontù. Pøi specifikaci varianty je nutno
+v~parametru "\setfonts" za název rodiny napsat znak mínus následovaný
+zkratkou pro variantu. Pøíklady:
+
+\begtt
+\setfonts [JannonText-it/12] ..... nastaví kurzívu dané rodiny ve
+ velikosti 12pt
+\setfonts [JannonText-rm/] ....... nastaví základní øez dané rodiny
+ v aktuální velikosti.
+\setfonts [CMTypeWriter-sl/] ..... nastaví základní variantu \sl
+ v aktuální velikosti.
+\endtt
+
+I~pøi specifikaci varianty je mo¾né v~parametru vynechat název rodiny,
+pak se pou¾ije aktuální rodina. Napøíklad
+
+\begtt
+\setfonts [JannonText/12]
+\setfonts [-bf/17] ... varinata Bold JannonText, velikost 17pt.
+ Pøepínaèe \rm, \bf, \it a \bi zùstanou
+ nezmìnìny, v tomto pøíkladì pøepínají
+ JannonText ve velikosti 12pt.
+ Následné pou¾ití tøeba \setfonts [Times/]
+ nastaví rodinu Times ve velikosti 12pt.
+ALE:
+\setfonts [/17]\bf ... Varinata Bold aktuální rodiny, velikost 17pt.
+ Pøepínaèe \rm, \bf, \it a \bi nyní
+ pøepínají ve velikosti 17pt. Aktuální
+ velikost fontù je nyní 17pt.
+\endtt
+
+\LATEX: Co zde bylo øeèeno o~ponechání významu pøepínaèù variant
+pøi specifikování varianty v~\LaTeX{}u není pravda,
+proto¾e by to naru¹ilo logiku NFSS.
+V~\LaTeX{}u tedy je "\setfonts [-bf/17]" zcela shodné
+s~pøíkazy "\setfonts [/17]\bf".
+
+
+\subsec Pøíkazy {\tt\back fontdef} a {\tt\back addcmd}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pøíkaz "\fontdef"\inl[fontdef] umo¾òuje deklarovat nové fontové pøepínaèe.
+
+\begtt
+\fontdef \<pøepínaè> [<JménoRodiny>/<velikost>]
+\endtt
+%
+Tato deklarace se zhruba shoduje s{}
+
+\begtt
+\gdef \<pøepínaè> {\setfonts [<JménoRodiny>/<velikost>]}
+\endtt
+
+\PLAIN: Pokud je specifikována rodina vèetnì varianty a
+parametr <velikost> není prázdný ani není zadán pomocí klíèového slova
+"mag", pak "\<pøepínaè>" není implementován jako makro obsahující
+"\setfonts", ale jedná se o nativní pøepínaè fontu implementovaný
+pomocí "\global\font\<pøepínaè>" (tzv.~fixed font).
+Tak mù¾e u¾ivatel deklarovat vlastní nativní pøepínaè
+fontu bez znalosti názvu metriky.
+
+\LATEX: Deklarovaný pøepínaè je ve v¹ech pøípadech implementován jako
+makro obsahující "\setfonts". Pøístup k~nativním pøepínaèùm je pøed
+u¾ivatelem v~NFSS skryt.
+
+\OBA:
+Místo jména rodiny mù¾e být uveden vykøièník.
+Pak se doplní jméno rodiny aktuální v~místì pøíkazu
+"\fontdef". Na druhé stranì, pokud je jméno rodiny prázdné,
+pak se jméno rodiny doplní podle aktuální rodiny
+v~místì pou¾ití deklarovaného pøepínaèe. Analogická vlastnost platí
+pro parametr <velikost>. Pøíklady:
+
+\begtt
+\setfonts [JannonAntikva/]
+\fontdef \small [/7] % \small = \setfonts [/7pt]
+\fontdef \sffam [DynaGroteskR/] % \sffam = \setfonts [DynagroteskR/]
+\fontdef \velky [Times/17] % \velky = \setfonts [Times/17pt]
+\fontdef \ttfam [Courier/] % \ttfam = \setfonts [Courier/]
+\fontdef \mylogo [Times-rm/mag.8] % \mylogo = \setfonts [Times-rm/mag.8]
+ % velikost fontu bude v¾dy rovna
+ % 0.8 násobku aktuální velikosti.
+\fontdef \timbf [Times-bf/12] % \timbf = fixed-font pøepínaè, jako:
+ % \global\font\timbf=ptmb8z at12pt
+\fontdef \jansmall [!/7] % \jansmall=\setfonts[JannonAntikva/7]
+\fontdef \janbi [!-bi/17] % \janbi = fixed-font pøepínaè, jako:
+ % \global\font\janbi=sjnbi8z at17pt
+\fontdef \tt [Courier-rm/!] % \tt = fixed-font pøepínaè, jako
+ % \global\font\tt=pcrr8u at10pt
+\endtt
+
+Pøíkaz "\fontdef" deklaruje pøepínaè globálnì, ov¹em tento pøepínaè je
+sám o~sobì lokální. Jinými slovy "\global\fontdef\jmeno" je toté¾ jako
+"\fontdef\jmeno", ale pøepínaè "\jmeno" nastaví font (nebo celou
+rodinu) jen lokálnì.
+
+Od verze OFS Oct.~2002 je podporován pøíkaz
+"\addcmd"\inl[addcmd], který umo¾ní spoleènì s~pøíkazem "\fontdef"
+soustøedit problematiku fontù do jediného místa v souboru maker.
+Pøíkaz má formát:
+
+\begtt
+\addcmd \<pøepínaè> {<pøíkazy>}
+\endtt
+%
+a chová se, jako "\def\<pøepínaè> {<pùvodní význam pøepínaèe> <pøíkazy>}".
+Pomocí "\addcmd" tedy mù¾eme \uv{roz¹íøit} obsah makra "\<pøepínaè>"
+o~dal¹í pøíkazy. Sekvence "\<pøepínaè>" musí být (pøed pou¾itím
+"\addcmd") definována jako makro bez parametrù nebo musí být
+ve významu neexpandované kontrolní sekvence deklarované napøíklad
+pomocí "\font", "\chardef" apod. Po pou¾ití "\addcmd" je sekvence
+"\<pøepínaè>" definována v¾dy jako makro bez parametru. Opakované
+pou¾ití "\addcmd" na stejný "\<pøepínaè>" je mo¾né.
+
+Pøíklad pou¾ití:
+
+\begtt
+\setfonts [JannonText/]
+\fontdef \footnotefont [!/7]
+\addcmd \footnotefont {\rm \baselineskip=9pt \relax}
+\fontdef \sectionfont [!/12]
+\addcmd \sectionfont {\bf \let\it=\bi}
+\endtt
+
+
+\subsec Test pøítomnosti rodiny
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\PLAIN: Ve svých makrech mù¾eme testovat, zda je rodina fontù deklarovaná,
+tj.~zda je naètena její deklarace z~deklaraèního souboru. Pou¾ijeme
+k~tomu konstrukci "\knownfam <JménoRodiny>? \iftrue", která expanduje
+na "\iftrue", pokud je rodina deklarovaná a na "\iffalse", pokud
+deklarovaná není. Parametr <JménoRodiny> musíme uvést bez specifikace varianty.
+
+\OBA: Z dùvodù zpìtné kompatibility se star¹í verzí OFS~dìlá stejnou práci jako
+"\knownchar" makro "\ifknownfam [<JménoRodiny>]"\inl[ifknownfam].
+V~OFS pro plain se ale
+od verze Feb.~2004 doporuèuje pou¾ívat "\knownfam", proto¾e to udr¾uje
+správnì spárované primitivy "\if*", "\else", "\fi". La\TeX{}ový u¾ivatel
+si mù¾e "\knownfam" snadno definovat.
+
+\subsec \LATEX: Propojení OSF s~NFSS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Tato sekce je urèena pouze pro \LaTeX{}isty. Pøíkaz\inl[OFSfamily]
+
+\begtt
+\OFSfamily [<JménoRodiny>]
+\endtt
+%
+konvertuje dlouhý název rodiny podle katalogu na interní název rodiny
+zanesený do NFSS. Napøíklad
+
+\begtt
+\OFSfamily [JannonText]
+\endtt
+%
+expanduje na "sjng". Makro pracuje jen na úrovni expandprocesoru,
+proto nedostaneme pøi pøeklepu v~názvu rodiny chybové hlá¹ení.
+Pøi neexistující rodinì makro expanduje na text "unknown".
+Pou¾ijeme-li napøíklad "\OFSfamily" ve svých stylových souborech
+a zpozorujeme, ¾e se NFSS sna¾í substituovat rodinu "unknown",
+mù¾eme si být jisti, ¾e máme pøeklep v~názvu rodiny nebo nemáme
+správnì pou¾ité "\usepackage".
+
+Pøíklad pou¾ití:
+
+\begtt
+\usepackage [sjannon, sdynamo] {ofs}
+\edef\rmdefault {\OFSfamily [JannonAntikva]}
+\edef\sfdefault {\OFSfamily [DynaGroteskR]}
+\edef\ttdefault {\OFSfamily [Courirer]}
+\endtt
+
+Význam maker "\rmdefault", "\sfdefault", "\ttdefault" je popsán
+v~dokumentaci NFSS.
+
+Dále OFS definuje pøíkaz\inl[OFSfamilydefault]
+
+\begtt
+\OFSfamilydefault [<JménoRodiny>]
+\endtt
+%
+který nastaví základní rodinu celého dokumentu. Tato rodina se v~pøíslu¹ných
+velikostech a variantách objeví nejen v~textu, ale i v~záhlaví
+kapitol, sekcí a podobnì (jsou-li makra v~pou¾itém class souboru udìlána
+rozumnì). Pøíkaz internì provede
+
+\begtt
+\edef\familydefault {\OFSfamily [<JménoRodiny>]}
+\endtt
+%
+s~tím, ¾e navíc o¹etøí pøípad neexistující rodiny chybovým hlá¹ením
+s~výpisem v¹ech aktuálnì dostupných rodin.
+
+
+\subsec Kódování fontù
+%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Pøepínání mezi kódováním fontù probíhá zcela v~re¾ii NFSS. OFS
+v~této vìci nepøidává nic nového.
+
+\PLAIN (a¾ do konce sekce):
+Implicitnì se pøedpokládá kódování CSfontù. Pokud ale potøebujeme
+pou¾ít fonty napøíklad v kódování T1, pak pou¾ijeme
+"\def\fotenc{8t}"\inl[fotenc]
+a OFS bude pracovat s~fonty v~tomto kódování.
+
+Mù¾eme dokonce uvnitø dokumentu pøepínat:
+
+\begtt
+\def\fotenc{8z} \setfonts[/] ... fonty v kódování CSfontù
+\def\fotenc{8t} \setfonts[/] ... fonty v kódování podle Corku.
+\endtt
+
+Kromì toho OFS obsahuje nástroje, aby makra závislá na kódování
+fontù (napøíklad "\v", "\'", "\ae") expandovala správnì
+na znak ve zvoleném kódování.
+Implicitnì je v~OFS nastaveno "\loadingenc=0"\inl[loadingenc],
+co¾ znamená, ¾e zmìnou kódování fontù ani pøíkazem "\setfonts" se
+nemìní makra typu "\v", "\ae". Tato makra si ponechají svùj
+originální význam z~\hbox{plainu}. To uvítají ortodoxní plainisté,
+kteøí nemají rádi, kdy¾ má pou¾itý balíèek zbyteènì velkou inteligenci.
+
+Je-li ale na zaèátku dokumentu uvedeno "\loadingenc=1", napøíklad:
+
+\begtt
+\input ofs [a35,sjannon] \loadingenc=1
+\endtt
+%
+pak pøi ka¾dém pøíkazu "\setfonts" si \TeX{} zkontroluje, zda má
+naèteny v¹echny potøebné soubory se jménem "ofs-<kódování>.tex".
+Tyto soubory obsahují pøedefinování maker závislých na nastaveném kódování fontù.
+Pokud tyto soubory naèteny nejsou, \TeX{} je bìhem "\setfonts"
+naète. Podrobnìji viz sekce~\beglink{3.3}3.3\endlink{} a¾
+\beglink{3.5}3.5\endlink.
+
+Balíèek OFS obsahuje tøi soubory s~deklaracemi maker závislými na
+kódování: "ofs-8z.tex", "ofs-8t.tex" a "ofs-8c.tex". Pøi pou¾ití jiného kódování
+fontù si mù¾ete vytvoøit dal¹í soubor analogického názvu.
+Pøíkazy "\accentdef" a "\characterdef" pou¾ívané v~tìchto
+souborech jsou podrobnì vysvìtleny v~\beglink{3.4}sekci~3.4\endlink.
+
+
+\subsec Fonty v~matematice
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: OFS pro \LaTeX{} vùbec neøe¹í otázku fontù pro matematiku.
+Je potøeba vyu¾ít nabídku mo¾ností NFSS.
+
+\PLAIN (a¾ do konce sekce):
+Pøíkaz "\setfonts" a pøepínaèe deklarované pomocí "\fontdef"
+pøepínají jen písmo v~textovém re¾imu.
+Pokud nepou¾ijeme pøíkaz "\setmath", zùstává v¹e,
+co je ve vstupním souboru mezi dolary, vyti¹tìno v~Computer
+Modern ve velikostech 10\,pt/7\,pt/5\,pt (velikost:
+základní/indexová/indexindexová). To nemusí být v¾dy ¾ádoucí.
+
+Pøíkaz "\setmath" má tento tvar:\inl[setmath]
+
+\begtt
+\setmath [<základní velikost>/<indexová velikost>/<indexindexová velikost>]
+\endtt
+%
+V~parametrech pøíkazu dáváme najevo, v~jakých velikostech chceme matematické
+fonty nastavit. Je mo¾né pou¾ít libovolný zápis velikosti, jako
+u~pøíkazu "\setfonts". Je-li pou¾ita mo¾nost "mag<èíslo>", je
+velikost vypoèítána jako <èíslo> krát velikost aktuálního
+textového fontu. Je-li parametr prázdný, doplní se takto:
+
+\begitems
+* základní velikost --- "mag1.0"
+* indexová velikost --- "mag0.7"
+* indexindexová velikost --- "mag0.5"
+\enditems
+
+Tak¾e "\setmath [//]" udìlá toté¾ jako
+"\setmath [mag1./mag.7/mag.5]". OFS definuje makro
+"\setsimplemath"\inl[setsimplemath] jako "\setmath [//]".
+
+Pøíkaz "\setmath" nastaví matematické fonty podle
+aktuální situace. Jeho èinnost závisí na obsahu maker
+"\fomenc" a "\mathversion".
+
+Matematické kódování je urèeno hodnotou makra
+"\fomenc".\inl[fomenc]
+Existují tyto mo¾nosti:
+
+\begitems
+* Implicitní hodnota je "\def\fomenc{PS}" (PostScript-Symbol).
+ Pøíkaz "\setmath" pak
+ pøevezme kurzívu aktuální rodiny a pou¾ije ji jako matematickou
+ kurzívu. Dále pøevezme základní variantu aktuální rodiny a pou¾ije ji
+ pro èíslice a dal¹í symboly, které jsou psány i v~matematice jako
+ "\rm". Standardní pøepínaèe variant "\rm", "\it", "\bf" a "\bi"
+ zaènou pøepínat do odpovídajících fontù i v~matematické sazbì.
+ %
+ Pøi "\def\fomenc{PS}" se navíc chybìjící matematické znaky,
+ které obvykle nejsou pøítomny v~PostScriptových fontech
+ (napøíklad písmena øecké abecedy), nahradí z~Post\-Script\-ového fontu
+ Symbol. Tento font se toti¾ ke vìt¹inì
+ PostScriptovým písmùm hodí daleko lépe ne¾ Computer Modern. Ostatní
+ znaky (napøíklad zvìt¹ující závorky a velké operátory) zùstávájí
+ v~Computer Modern.
+
+* Je-li "\def\fomenc{CM}" (Computer Modern), pak "\setmath" ponechá
+ matematickým vzoreèkùm Computer Modern fonty, jen se pøípadnì
+ pøizpùsobí po¾adované velikosti.
+
+* Po zavedení souboru "amsfn.tex" je mo¾né pou¾ít "\def\fomenc{AMS}".
+ Matematika se pak chová stejnì jako pøi "CM", ale navíc jsou k~dispozici
+ ve¹keré symboly z~AMS\TeX{}u.
+
+* Po zavedení souboru "txfn.tex" mù¾eme pou¾ít dvì nová kódování:
+ "\def\fomenc{TX}" nebo "\def\fomenc{PX}".
+ V obou pøípadech se pro matematiku pou¾ijí
+ volnì dostupné TXfonty, které vycházejí z øezù rodin Times a
+ Helvetica. Pøi hodnotì "TX" se v~matematice pou¾ijí výhradnì
+ TXfonty, zatímco pøi hodnotì "PX" budou TXfonty kombinovány
+ s~kurzívou a základním øezem aktuální textové rodiny fontù (podobnì
+ jako pøi kódování "PS"). OFS podporuje v¹echny kontrolní sekvence na
+ matematické symboly podle manuálu k TXfontùm. Jsou zde ve¹ekré
+ symboly z AMS\TeX{}u a mnoho dal¹ích. Symbolù z TXfontù je nìkolik stovek.
+ {\hbadness=1015\par}
+
+* Po zavedení souboru "mtfn.tex" je mo¾né pou¾ít
+ "\def\fomenc{MT}". Matematika bude obsahovat kurzívu a základní øez
+ aktuální rodiny fontù kombinovanou se znaky~komerèní verze
+ matematických fontù MathTimes.
+\enditems
+
+Podobnì jako v~NFSS jsou podporovány dvì verze vzoreèkù: normal a
+bold. Po¾adovaná verze se nastavuje v~makru "\mathversion"\inl[mathversion]
+pomocí "\def\mathversion{normal}" nebo "\def\mathversion{bold}".
+Makro "\setmath" pak pøizpùsobí zavedení matematických fontù po¾adované
+verzi. Implicitnì je nastaveno "\def\mathversion{normal}".
+Nastavení "\mathversion" je potøeba provést pøed vyvoláním pøíkazu
+"\setmath". Pøíklady:
+
+\begtt
+\setmath [//] $vzoreèek$ % vzoreèek je ve verzi "normal"
+$\def\mathversion{bold}\setmath[//] vzoreèek$ % vzoreèek ve verzi "bold"
+\endtt
+
+
+\sec Jak je to udìláno, aneb pohled do hloubky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: V¹echna makra, která jsou jen pomocná, jsou ve stylu "ofs.sty"
+definována se jménem "\ofs@jménomakra", aby nedo¹lo ke zmatení s~jinými
+styly. Makra, která se pou¾ívají v~deklaraèních souborech, mají název
+"\OFSjménomakra". Dále styl definuje u¾ivatelské pøíkazy "\setfonts",
+"\fontdef", "\showfonts", "\fontusage", a pøedefinovává pøepínaèe
+"\rm", "\bf", "\it", "\bi".
+
+\PLAIN: V¹echna makra definovaná v~"ofs.tex" jsou uvedena v~rejstøíku na
+konci tohoto dokumentu. Pøi návrhu názvù maker jsem nevyu¾il konvenci
+se znakem "@", proto¾e tento znak v~názvech maker osobnì nenávidím.
+
+
+\subsec Výpisy do logu
+%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Pro trasování makra NFSS se pou¾ije balíèek "tracefnt".
+
+\PLAIN: Pokud nìkoho ru¹í pøi èastém pøepínání rodin fontù pøíkazem
+"\setfonts" výpisy v~logu, mù¾e pou¾ít pøíkaz
+"\nofontmessages"\inl[nofontmessages].
+Pokud naopak chceme tyto výpisy vidìt i na terminálu, pi¹me
+"\displayfontmessages"\inl[displayfontmessages]. Implicitnì je zapnut výpis
+pouze do logu pøíkazem "\logfontmessages"\inl[logfontmessages].
+Pokud chceme pøesnì vidìt, které metriky fontù se zavádìjí primitivním
+pøíkazem "\font", pou¾ijeme "\detailfontmessages"\inl[detailfontmessages].
+
+Varování o~nepøístupných znacích nebo kódováních se v¾dy vypisují na
+terminál i do logu. Chceme-li je mít jen v~logu, mù¾eme napsat
+"\let\displaymessage=\wlog"\inl[displaymessage], proto¾e tato sekvence
+je v~OFS pou¾ívána na zobrazení zpráv na terminál.
+
+
+\subsec Robustní a køehké pøíkazy
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: \LaTeX{}2e má zavedené postupy na definování robustních
+pøíkazù. Význam tìchto pojmù je vysvìtlen v~dokumentaci k~\LaTeX{}u.
+Pøíkaz "\setfonts" a pøepínaèe deklarované pomocí "\fontdef" jsou
+samozøejmì definovány jako robustní, tak¾e se mohou vyskytovat
+v~textech pro obsahy, rejsøíky apod. bez toho, aby zpùsobily obtí¾e.
+
+\PLAIN (a¾ do konce sekce):
+Makro plainu problematiku køehkých pøíkazù neøe¹í
+a u¾ivatelé plainu, pokud narazí na tento problém, pou¾ívají rùzná svá
+vlastní øe¹ení, která nejsou standardizována. Jedno takové øe¹ení je i
+v~OFS.
+
+Nejprve struènì naznaèíme, v~èem spoèívá problém s~køehkými pøíkazy.
+Obèas potøebujeme (pro generování obsahu, rejstøíku apod.) poslat
+nìjaký text do pomocného souboru (primitivem "\write"), aby byl tento
+soubor v~zápìtí (pøi dal¹ím zpracování \TeX{}em) znovu naèten.
+Problém je, ¾e primitiv "\write" zapí¹e do souboru text po expanzi
+maker, co¾ nemusí v¾dy vyhovovat. Pokud je napøíklad fontový pøepínaè
+implementován jako slo¾ité makro a je pou¾it v~textu zpracovaném
+primitivem "\write", v~souboru se objeví celé makro po expanzi.
+Pøi opìtovném naètení takového souboru dojde vìt¹inou k~havárii;
+øíkáme, ¾e byl pou¾it køehký (fragile) pøíkaz v~textu posílaném do
+souboru a v~souboru se nám tento pøíkaz \uv{rozsypal}.
+
+Pokud se dostane (potenciálnì) køehký pøíkaz z~maker OFS do souboru,
+pak se pøi novém naètení takového souboru automaticky pøi havárii
+zobrazí na terminálu a v~logu návod jak postupovat, aby se u¾ivatel
+tohoto problému zbavil. Text návodu po pøekladu do èe¹tiny vypadá
+takto:
+
+\begtt
+CHYBA !! køehký pøíkaz v toc/ind/aux nebo podobném souboru.
+Tento problém mù¾ete øe¹it následujícími kroky:
+1. Vyma¾te pomocný soubor s tímto køehkým pøíkazem.
+2. Vlo¾te následující kód do záhlaví svého dokumentu:
+ \let\orishipout=\shipout
+ \def\shipout#1#2{\setbox0=#1{#2}\bgroup
+ \let\expandaction=\noexpand \orishipout\box0 \egroup}
+3. Znovu TeXujte svùj dokument nejménì dvakrát za sebou.
+Dal¹í informace najdete v dokumentaci k OFS.
+\endtt
+
+Vysvìtlíme si, jak je to udìláno. Makro, které mù¾e v~parametru
+primitivu "\write" pùsobit potí¾e, je v~OFS definováno zhruba takto:
+
+\begtt
+\def\makro {%
+ \ifx\expandaction\noexpand
+ \noexpand\makro
+ \else
+ \csname fragilecommand!\endcsname
+ <vlastní kód makra>
+ \fi
+}
+\endtt
+
+Pokud se nenastaví "\expandaction"\inl[expandaction]
+na hodnotu "\noexpand", pak se
+provede èást kódu za "\else". Proto¾e pøíkaz
+"\csname fragilecommand!\endcsname"\inl[fragilecommand!]
+není definován, realizuje se v~hlavním procesoru jako "\relax"
+[TBN, strana 349]. Pøi expanzi primitivem "\write" se do souboru
+zapí¹e "\fragilecommand!". Pøi dal¹ím ètení soboru se spustí pøíkaz
+"\fragilecommand"\inl[fragilecommand],
+který vypí¹e na terminál ji¾ zmínìnou nápovìdu.
+
+Jestli¾e u¾ivatel pou¾ije kód z~nápovìdy v~záhlaví svého dokumentu,
+pak v~dobì èinnosti primitivu "\shipout" (tj.~v~dobì, kdy expandují
+argumenty primitivù "\write") je nastaveno "\let\expandaction=\noexpand".
+V~makru "\makro" se provede první èást pøed "\else", tak¾e do souboru
+se zapí¹e jen "\makro". To je pøesnì to, co potøebujeme.
+
+V~OFS není kód, který pøedefinovává "\shipout", pøímo zahrnut. Místo
+toho pouze doporuèíme u¾ivateli, aby to udìlal sám. U¾ivatel plainu toti¾
+potøebuje mít vìci pod vlastní kontrolou a nemìl by asi dùvìru k~makru,
+které bez jeho vìdomí pøedefinuje tak zásadní vìc, jako je primitiv
+"\shipout". Také je mo¾né, ¾e u¾ivatel plainu pou¾ije na rùzné èásti
+textu ve svých makrech "\edef" a potøebuje vìdìt, ¾e je v~takovém
+pøípadì vhodné nejpve nastavit "\let\expandaction=\noexpand".
+
+Podobnì jako zde v~ukázce definice pøíkazu "\makro" jsou
+v~OFS definovány
+pøíkazy "\setfonts" (\beglink{2.2}sekce~2.2\endlink),
+"\setmath" (\beglink{2.7}sekce~2.7\endlink),
+"\setextrafont", "\printcharacter", "\printaccent"
+(\beglink{3.4}sekce~3.4\endlink),
+"\accentabove", "\accentbelow" a "\ofshexbox" (\beglink{3.6}sekce~3.6\endlink).
+Po pou¾ití kódu z~nápovìdy se tato makra stávají \uv{robustními}
+v~\LaTeX{}ovém smyslu tohoto slova.
+
+
+\subsec Deklaraèní soubory
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Deklaraèní soubory v~\LaTeX{}u jsou bì¾né stylové soubory,
+které shrnují nìkolik rodin fontù ve smyslu NFSS. Tyto rodiny jsou
+deklarovány bì¾ným zpùsobem ve~"fd" souborech. V~deklaraèních souborech
+je mo¾no pou¾ít následující pøíkazy:
+
+\begitems
+* "\OFSprocessoptions"\inl[OFSprocessoptions]
+ --- má vìt¹inou hodnotu "\undefined". Pokud ale
+ je stylový soubor naèítán ze souboru "ofs.sty" jako parametr,
+ má "\OFSprocessoptions" hodnotu "\relax". Test na tuto
+ sekvenci pou¾íváme v~záhlaví stylového souboru, abychom vynachali
+ \LaTeX{}ovské "\RequirePackage{ofs}", pokud to není potøeba (a
+ pouze by to zlobilo).
+* "\OFSextraencoding {<roz¹iøující kódování>}"\inl[OFSextraencoding]
+ --- Toto makro si poznamená do pamìti <roz¹iøující kódování> a
+ provede "\input {<roz¹iøující kódování>ini.def}".
+ Pøedpokládá se, ¾e tam jsou odpovídající definice pro
+ <roz¹iøující kódování>, viz napøíklad soubor "se1ini.def", který obsahuje
+ deklarace pro roz¹iøující kódování SE1 fontù ze Støe¹ovické písmolijny.
+ Pokud u¾ byl soubor "<roz¹iøující kódování>ini.def" naèten, makro jej
+ nenaèítá znovu. Pozor: <roz¹iøující kódování> je nutno psát
+ velkými písmeny, aèkoli v~názvu souboru musí být naopak tato písmena malá.
+* "\OFSputfamlist {<text>}"\inl[OFSputfamlist]
+ --- vlo¾í <text> do seznamu rodin, který
+ se vypisuje pøi "\showfonts" nebo pøi neznámé rodinì.
+* "\OFSdeclarefamily [<JménoRodiny>] {<NFSS-jméno>}"\inl[OFSdeclarefamily]
+ --- poznamená si
+ do pamìti, ¾e <JménoRodiny> je ve skuteènosti <NFSS-jméno>.
+ Tato pamì» se vyu¾ije napøíklad v~pøíkazu "\OFSfamily".
+ Navíc zanese <JménoRodiny> do seznamu rodin vypisovaném pøi
+ "\showfonts".
+* "\OFSnormalvariants"\inl[OFSnormalvariants]
+ --- do textu, který se vypisuje pøi "\showfonts"
+ nebo pøi neznámé rodinì vlo¾í, seznam standardních pøepínaèù,
+ tj.~"\rm,"~"\bf,"~"\it,"~"\bi".
+\enditems
+
+\PLAIN (a¾ do konce sekce):
+Deklaraèní soubory mají pøíponu "tex" a pøedpokládá se o~nich,
+¾e mají pojistku proti opakovanému naètení. Pokud není je¹tì naèten
+soubor "ofs.tex", je nutno jej pøed dal¹í èinností naèíst. Rovnì¾ je
+vhodné zde naèíst soubor definic znakù podle pou¾itých kódování
+(viz~\beglink{3.4}sekce~3.4\endlink).
+
+V~deklaraèním souboru je nutno vytvoøit vazbu mezi názvy rodin a pou¾itými
+metrikami. K~tomu se pou¾ívají následující pøíkazy:
+
+\begitems
+* "\protectreading <soubor><mezera>"\inl[protectreading] --- poznamená
+ si do pamìti, ¾e je pøeèten <soubor>. Pokud je pøíkaz se stejným
+ parametrem èten podruhé, provede "\endinput", tak¾e následující deklarace jsou
+ chránìny proti vícenásobnému ètení.
+* "\ofsputfamlist {<text>}"\inl[ofsputfamlist]
+ --- vlo¾í <text> do seznamu rodin, který
+ se vypisuje pøi "\showfonts" nebo pøi neznámé rodinì.
+* "\ofsdeclarefamily [<JménoRodiny>] {<pøíkazy>}"\inl[ofsdeclarefamily]
+ --- deklarace nové
+ rodiny se jménem <JménoRodiny>. Toto jméno se zanese do seznamu
+ známých rodin vypisovaných pomocí "\showfonts". Pokud se tato rodina
+ pou¾ije pøi "\setfonts", pak se provedou <pøíkazy>. Mezi <pøíkazy> se
+ pou¾ije právì jeden pøíkaz "\loadtextfam", který zavede fonty dané
+ rodiny do pamìti \TeX{}u.
+* "\loadtextfam"\inl[loadtextfam]
+ --- Zavede ètyøi fonty s~danými metrikami. Tento pøíkaz vy¾aduje
+ podrobnìj¹í vysvìtlení, které je vèetnì parametrù pøíkazu uvedeno ní¾e.
+* "\newvariant<èíslice> \<pøepínaè> (<Varianta>) <mezera> <metrika>;<extra-enc>;"\inl[newvariant]
+ \null\penalty0 --- Dekla\-ruje nový pøepínaè varianty.
+ Podrobnìj¹í vysvìtlení je uvedeno ní¾e.
+* "\modifyenc <kódování>:<identifikátor>;"\inl[modifyenc] --- pøidání
+ výjimek vzhledem k~základnímu kódování, viz~\beglink{3.5}sekce~3.5\endlink.
+* "\fosize"\inl[fosize]
+ --- makro, které uchovává informaci o~aktuální velikosti
+ fontù v~naposledy vybrané rodinì. Obsah "\fosize" mù¾e mít dvì
+ podoby: "at<dimen>" nebo "scaled<number>" podle toho, jaký tvar
+ parametru <velikost> byl pou¾it v~pøíkazu "\setfonts".
+* "\fotenc"\inl[fotenc]
+ --- makro, které uchovává informaci o~aktuálním kódování.
+ Nejèastìj¹í mo¾nosti jsou "\def\fotenc{8z}" (kódování podle CS-fontù) nebo
+ "\def\fotenc{8t}" (kódování podle Corku). Je-li pøi naètení souboru
+ "ofs.tex" makro "\fotenc" u¾ známé, ponechá se beze zmìny, jinak se
+ definuje jako "8z".
+* "\extranec"\inl[extraenc]
+ --- makro, které uchovává informaci o~roz¹iøujícím kódování.
+ Tuto informaci tam kopíruje z~parametru <extra-enc> makro "\laodatextfam".
+* "\defaultextraenc"\inl[defaultextraenc]
+ --- makro, jeho¾ pøedefinováním mù¾eme zmìnit roz¹iøující kódování základních
+ rodin a rodin z~"a35.tex". Výchozí hodnota makra~"8c".
+* "\setfontshook"\inl[setfontshook]
+ --- makro, které se spustí v¾dy pøi èinnosti pøíkazu "\setfonts"
+ tìsnì pøed tím, ne¾ jsou vykonány <pøíkazy> z~"\ofsdeclarefamily".
+* "\registertfm <jméno> <od>-<do> <skuteèná metrika>"\inl[registertfm]
+ --- umo¾òuje pracovat pøi rùzných velikostech fontù s~rùznými
+ metrikami. Podrobnosti viz \beglink{3.8}sekce~3.8\endlink.
+* "\registerenc <JménoRodiny>: <kódování> <mezera>"\inl[registerenc]
+ --- umo¾òuje omezit pou¾ití rodiny fontù jen pro vymezená
+ kódování. Podrobnosti viz \beglink{3.9}sekce~3.9\endlink.
+\enditems
+
+Pøíkaz "\loadtextfam" pou¾ívaný v deklaraèních
+souborech mezi <pøíkazy> makra "\ofsdeclarefamily" má parametry:
+
+\begtt
+\loadtextfam (<Varianta-rm>) <mezera> <metrika-rm>;%
+ (<Varianta-bf>) <mezera> <metrika-bf>;%
+ (<Varianta-it>) <mezera> <metrika-it>;%
+ (<Varianta-bi>) <mezera> <metrika-bi>;<extra-enc>;%
+\endtt
+%
+Procenta na koncích øádkù v této ukázce oznaèují, ¾e za støedníky nemá
+být mezera.
+Údaje "(<Varianta-XX>)" slou¾í jako komentáøe o variantách zapisované do
+logu a je mo¾no je kompletnì vèetnì závorek a <mezery> vynechat (tøeba jen
+nìkteré). Ve verzích OFS do Sep~2002 nebyl tento parametr vùbec
+podporován. Pøi vynechání tohoto parametru se pøedpokládají
+následující implicitní hodnoty: "rm: ()", "bf: (Bold)",
+"it: (Italic)", "bi: (BoldItalic)".
+
+Údaje <metrika-XX> odpovídají názvùm metrik, které se pro uvedené
+varianty fontù makrem "\loadtextfam" zavedou. Makro zhruba provede toto:
+
+\begtt
+\font\tenrm=<metrika-rm> \fosize
+\font\tenbf=<metrika-bf> \fosize
+\font\tenit=<metrika-it> \fosize
+\font\tenbi=<metrika-bi> \fosize
+\endtt
+%
+Pøedpokládá se, ¾e v¹echny <metriky-XX> jsou
+v~deklaraèním souboru napsány tak, ¾e
+obsahují makro "\fotenc". %\inl[fotenc]
+Tím je zaruèena zmìna názvu metriky pøi
+pøechodu na jiné kódování (tj. pøi pøedefinování makra "\fotenc").
+
+Koneènì údaj <extra-enc> udává název extra kódování. Pokud je tento parametr
+neprázdný, pak "\loadtextfam" provede na pøechodnou dobu
+"\def\fotenc{<extra-enc>}" a znovu expanduje
+parametry <metrika-rm>, <metrika-bf>, <metrika-it> a <metrika-bi>.
+Výsledky tìchto expanzí si poznamená do pamìti. Jedná se o~roz¹iøující
+metriky k~základním metrikám. Je-li parametr <extra-enc> prázdný,
+poznámka o roz¹iøujících metrikách se nekoná.
+Kdy¾ pak nìjaké makro pro pøístup ke speciálnímu znaku tuto
+metriku potøebuje, objeví se na terminálu varování, ¾e aktuálnì
+zvolená metrika nemá roz¹iøující variantu.
+
+Nìkteré metriky v~pøíkazu "\loadtextfam" s výjimkou <metrika-rm>
+mohou být vynechány. Je-li napøíklad prázdný parametr
+<metrika-XX>, pak se zhruba provede
+\begtt
+\def\tenXX{\message{varování o neexistující variantì na terminálu}}
+\endtt
+%
+tak¾e pøi pøechodu na takovou variantu se objeví na terminálu
+a v~logu hlá¹ení o~ne\-existující variantì a font se nezmìní.
+
+Pøíkaz "\setfonts"\inl[setfonts]
+nemìní význam maker "\rm", "\bf", "\it" a "\bi",
+ale mìní význam pøepínaèù fontù "\tenrm", "\tenbf", "\tenit" a "\tenbi".
+Dìlá to navíc zprostøedkovanì tím, ¾e spustí <pøíkazy> deklarované pro
+po¾adovanou rodinu v~"\ofsdeclarefamily" a mezi tìmito <pøíkazy>
+se vyskytuje pøíkaz "\loadtextfam".
+
+Makra "\rm", "\bf", "\it", resp. "\bi" pou¾ívají fontové pøepínaèe
+"\tenrm", "\tenbf", "\tenit",\inll[tenrm \back tenbf \back tenit]
+resp. "\tenbi". První tøi jsou známy z~plainu
+a ètvrtý\inl[tenbi] je zaveden novì.
+Navíc makra "\rm", "\bf", "\it" a "\bi" ukládají
+do kontrolní sekvence "\currentvariant"\inl[currentvariant]
+informaci o~naposledy aktivované variantì. Tato informace má podobu
+písmene ("M", "F", "T", resp. "I"), proto¾e jedinì konstrukce
+"\let\currentvariant=<písmeno>" je odolná vùèi expanzi. ©lo o~to, aby
+makra pøepínaèù variant byla robustní i bez pøedefinování "\shipout".
+
+V¹imneme si, ¾e "\loadtextfam" nastavuje pøepínaèe
+"\tenrm", "\tenbf", "\tenit" a "\tenbi"
+na fonty v~libovolné velikosti. Èiní tak podle aktuální
+hodnoty makra "\fosize", které mìní makro "\setfonts" podle toho, jak
+je zadán parametr <velikost>.
+Slovo {\clqq"ten"\crqq} v~názvech fontových pøepínaèù tedy
+nemusí znamenat, ¾e se jedná o~font ve velikosti 10\,pt. Pova¾ujme
+tyto názvy za historické a z~hlediska OFS mo¾ná trochu
+kuriózní. Není pøitom nutné pro pøepínaèe textových fontù vymý¹let
+názvy nové.
+
+Nìkdo mù¾e namítnout, ¾e opakované pou¾ívání makra "\setfonts" v¾dy
+znovu a znovu spou¹tí ètveøici pøíkazù "\font", co¾ mù¾e zpùsobit
+vìt¹í nároky na pamì» a èas. Není to pravda, proto¾e \TeX{} si eviduje
+interní tabulku u¾ zavedených metrik a pøi opakovaném pou¾ití
+primitivu "\font" na stejnou metriku se u¾ neobtì¾uje metriku vùbec
+otevírat. Jen inicializuje pøíslu¹ný fontový pøepínaè asi stejnì rychle,
+jako by se to provedlo pomocí "\let".
+
+Pøíkaz "\loadtextfam" je¹tì pøed zavedením fontù naète
+pøi "\loadingenc>0"\inl[loadingenc]
+soubor "ofs-\fotenc.tex". Pøi neprázdném parametru <extra-enc>
+navíc naète soubor "ofs-<extra-enc>.tex".
+Tyto soubory jsou èteny jen jednou a v dobì ètení jsou
+ignorovány prázdné øádky, konce øádkù. Ètení probíhá uvnitø
+skupiny, kde jsou pro jistotu lokálnì nastaveny
+kategorie znakù podle plain\TeX{}u (a~"\catcode`@=11")
+a je nastaveno "\globaldefs=1", tj.~v¹echna
+pøedefinování ze souboru "ofs-<kódování>.tex" se provedou globálnì.
+To nám nevadí, proto¾e novì naètené kódovací soubory nejsou v~konfliktu
+s~pøedchozími (viz vlastnosti pøíkazù "\characterdef" a "\accentdef"
+v~\beglink{3.4}sekci~3.4\endlink). Naètení vìt¹ího mno¾ství tìchto
+souborù ne¾ je v~dané chvíli potøeba, rovnì¾ neohrozí funkcionalitu
+maker závislých na kódování. Dùvod globální definice je v~tom, ¾e
+není vhodné, aby pøi opakovaném "{...\setfonts...}" musel být
+kódovací soubor naèítán neustále znovu a znovu.
+
+Pokud u¾ivateli vadí, ¾e je pøedefinování maker globální
+(chce napøíklad svùj èlánek zaøadit do sborníku, kde by
+pøedefinování mohlo vadit jiným èlánkùm), pak ponechá "\loadingenc=0" a
+musí naèíst soubory s~deklaracemi maker manuálnì pomocí
+"\input" na zaèátku èlánku. V~takovém pøípadì se provede
+deklarace jen lokálnì.
+
+V~parametru <pøíkazy> makra "\ofsdeclarefamily" se mù¾e deklarovat
+nadstandardní varianta rodiny pomocí pøíkazu "\newvariant".\inl[newvariant]
+Tento pøíkaz provede:
+
+\begtt
+\font\ten<pøepínaè>=<metrika> \fosize
+\def \<pøepínaè> {\let\currentvariant=<èíslice> \ten<pøepínaè>}
+\endtt
+%
+Dále pøíkaz "\newvariant" zanese do pamìti informaci o~pøípadné
+roz¹iøující metrice podle <ext-enc>.
+
+Pokud OFS potøebuje dodr¾et pøi pøechodu na novou rodinu naposledy
+zvolenou nadstandardní variantu, èiní tak podle hodnoty
+"\currentvariant". Pokud tedy nová rodina má deklarovánu
+nadstandardní variantu pod stejnnou <èíslicí>, bude pou¾ita tato
+varianta a OFS nebude pøepínat do defaultní varianty "\rm".
+Je proto vhodné deklarovat varianty rùzných rodin ale
+\uv{stejného typu} pod stejnou <èíslicí>.
+Z principu vìci vidíme, ¾e v~OFS existuje omezení v~poètu
+nadstandardních variant jedné rodiny na maximálnì 10.
+To by nemìlo vadit, proto¾e kdykoli mù¾eme rozdìlit rozsáhlou
+rodinu na více rodin (napøíklad ©tormovy rodiny DynamoGrotesk).
+
+Makro "\setfonts" mù¾e mìnit význam maker "\loadtextfam" a
+"\newvariant". Udìlá to právì tehdy, kdy¾ je v parametru <Rodina>
+specifikovaná varianta. V takovém pøípadì staèí zavést jeden font a
+není potøeba zavádìt celou rodinu. Pøi specifikaci standardní varianty
+"\newvariant" nebude dìlat nic a "\loadtextfam" zavede jediný font.
+Pøi specifikaci nadstandardní varianty "\loadtextfam" nebude dìlat nic
+a "\newvariant" zavede font jen tehdy, pokud se jedná o font
+specifikované varianty.
+
+Na závìr této sekce si podrobnìji vysvìtlíme èinnost
+pøíkazu "\setfonts".\inl[setfonts]
+Tento pøíkaz \uv{vypoèítá} a definuje podle parametru <velikost> hodnotu
+makra "\fosize". Dále pøi neprázdném pamaretru <JménoRodiny> a pøi
+neuvedení varianty tento pøíkaz provede
+"\def\currentfamily{<JménoRodiny>}"\inl[currentfamily],
+zatímco pøi prázdném parametru
+hod\-notu z~"\currentfamily" pouze pou¾ije.
+Je-li v~parametrech uvedena varianta
+rodiny, pozmìní "\setfonts" na pøechodnou dobu makra "\loadtextfam" a
+"\newvariant" tak, aby místo
+celé rodiny fontù byl zaveden jen jeden font. Dále spustí
+"\setfontshook" a pak <pøíkazy> z~odpovídajícího "\ofsdeclarefamily".
+Potom vrátí hodnoty maker
+"\loadtextfam" a "\newvariant" do pùvodního stavu, pokud byly
+tyto hodnoty mìnìny. Nakonec spustí makro
+"\runmodifylist"\inl[runmodifylist], které nastaví za jistých okolností
+výjimky ze zvoleného kódování (podrobnìji viz~\beglink{3.5}sekci~3.5\endlink).
+Koneènì pøíkaz "\setfonts" spustí "\ignorespaces", aby pøípadná
+zapomenutá mezera za závorkou~\clqq"]"\crqq nebyla v~horizonálním módu
+vyti¹tìna.
+
+
+\subsec Kódování fontù a deklarace znakù
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\PLAIN: Pro pøepínání do roz¹iøující metriky slou¾í makro
+"\setextrafont"\inl[setextrafont].
+Toto makro se podívá, zda k~aktuálnímu fontu existuje v~pamìti poznámka
+o~roz¹iøující metrice (viz pøíkaz "\loadtextfam" a "\newvariant"
+\beglink{3.3}v~pøedchozí sekci\endlink).
+Pokud taková poznámka existuje, pøíkaz "\setextrafont" provede zhruba toto:
+
+\begtt
+\font\extrafont=<roz¹iøující metrika ve velikosti základní metriky> \extrafont@inl[extrafont]
+\endtt
+
+\LATEX: Pro pøepínání do roz¹iøujícího kódování, které je deklarováno
+pøíkazem "\OFSextraencoding", slou¾í (stejnì jako v plainu)
+makro "\setextrafont". Toto makro se podívá, zda bylo
+roz¹iøující kódování deklarováno, a pokud ano, provede zhruba toto:
+
+\begtt
+\fontencoding{<roz¹iøující kódování>}\selectfont
+\endtt
+
+\OBA: Chceme-li vytisknout z~roz¹iøující metriky (roz¹iøujícího
+kódování) nìjaký znak s~kódem <èíslo>, je mo¾né pou¾ít
+makro "\extchar <èíslo>"\inl[extchar].
+
+\PLAIN (a¾ do konce sekce):
+Pro definice maker závislých na aktuálním kódování
+je mo¾né v~OFS pou¾ít dva deklaraèní pøíkazy:
+"\characterdef" a "\accentdef". První z~nich\inl[characterdef]
+má tyto parametry:
+
+\begtt
+\characterdef \<sekvence> <kódování> <mezera> <èíslo>
+% pøíklad:
+\characterdef \promile 8z 141
+% nebo
+\characterdef \<sekvence> <kódování> <mezera> {<pøíkazy>}
+% pøíklad:
+\characterdef \promile 8t {\%\char24 }
+\characterdef \promile * {\vrule height1ex width1ex\relax}
+ % in another encodings
+\endtt
+
+V~prvním pøípadì se bude "\<sekvence>" pøi aktuálním kódování fontù
+shodném s~<kódováním> expandovat na token kategorie 12 s~kódem
+rovným <èíslu>. V~druhém pøípadì "\<sekvence>" expanduje pøi
+shodnosti <kódování> na <pøíkazy>. V¹e probìhne na úrovni
+expand procesoru. Pokud pou¾ijeme oba vý¹e zmínìné pøíklady
+pro definici "\promile", pak platí:
+
+\begtt
+\def\fotenc{8z} \promile % expanduje na znak s kódem 141
+\def\fotenc{8t} \promile % expanduje na pøíkazy \%\char24
+\endtt
+
+Mimoto je mo¾né deklarovat pøístup k~roz¹íøenému kódování, pokud je
+toto kódování specifikováno jako parametr <extra-enc> v~pøíkazu
+"\loadtextfam". Pøíklad:
+
+\begtt
+\characterdef \euro 8z 134
+\characterdef \euro 6s 37
+
+\def\fotenc{8z} \euro % expanduje na znak s kódem 134
+\def\fotenc{8t} \euro % expanduje na: {\setextrafont znak s kódem 37}
+\endtt
+
+V~tomto pøíkladì se pøi "\def\fotenc{8t}" mù¾e stát, ¾e aktuální font
+nemá poznámku o~roz¹iøující metrice, nebo má poznámku o~roz¹iøující
+metrice jiné ne¾ "6s". Pak "\euro" vypí¹e varování na terminál
+o~nedostupnosti znaku "\euro".
+
+Vysvìtlíme nyní podrobnìji, jak makra deklarovaná pomocí
+"\characterdef" fungují. Pøíkaz "\characterdef"
+definuje "\<sekvenci>"
+jako "\printcharacter{<sekvence>}"\inl[printcharacter],
+tak¾e napøíklad "\promile" expanduje nejprve na "\printcharacter{promile}".
+a "\euro" na "\printcharacter{euro}".
+Pokud se "\characterdef" pou¾ije opakovanì na stejnou "\<sekvenci>",
+pak se v¾dy znovu definuje stejnì, tak¾e nedochází ke ztrátì pøedchozí
+informace. Kromì toho ale "\characterdef" definuje dal¹í makro
+"\<sekvence>:-<kódování>" tak, ¾e toto makro expanduje na znak se
+specifikovaným kódem nebo na <pøíkazy>. Dal¹í inteligence je schována
+v~pøíkazu "\printcharacter". Ten ovìøí, zda je definováno makro
+"\<sekvence>:-\fotenc". Pokud ano, expanduje na obsah tohoto makra.
+Jinak ovìøí, zda existuje poznámka o~roz¹iøující metrice vzta¾ená
+k~aktuálnímu fontu. Pokud ano, zjistí kódování této roz¹iøující
+metriky <extra-enc> a podívá se, zda je definováno makro
+"\<sekvence>:-<extra-enc>". Pokud ano, expanduje na
+
+\begtt
+{\setextrafont \<sekvence>:-<extra-enc>}
+\endtt
+%
+Pokud se stále nepodaøilo realizovat po¾adovaný znak,
+pokusí se vytisknout defaultní znak nezávislý na kódování
+"\<sekvence>:-*". Pokud ani to není mo¾né,
+spustí se "\printcharacterwarn{<sekvence>}".\inl[printcharacterwarn]
+Implicitní hodnota tohoto makra vypí¹e varování
+o~nedostupném znaku <sekvence> na terminál a do logu a do výstupu
+nevytiskne nic.
+
+Chceme-li se vyhnout výpisu varování, mù¾eme "\printcharacterwarn"
+pøedefinovat, tøeba takto:
+
+\begtt
+\def\printcharacterwarn #1{?(#1)?}
+\endtt
+
+Od verze OFS Mar. 2004 "\characterdef" odmítá pøedefinovat u¾
+definované kontrolní sekvence. Definuje pouze sekvence, které mají
+zatím význam "\undefined" nebo "\relax". V jiném pøípadì (a pokud není
+sekvence u¾ pomocí "\characterdef" definována) vypí¹e
+varování o ignorované definici do log souboru. Dùvod tohoto opatøení
+je ten, ¾e kódovací soubory deklarují obrovské mno¾ství nových
+kontrolních sekvencí pomocí "\characterdef", a pøitom programátor
+maker nemusí v¹echny znát. Mù¾e se tedy stát, ¾e pou¾ije pro své vlastní makro
+stejné jméno. V takovém pøípadì "\characterdef" respektuje makro
+definované programátorem a pøíslu¹ný znak ponechá nepøístupný.
+Pokud potøebujeme pomocí "\characterdef" skuteènì nìkteré
+kontrolní sekvence pøedefinovat (u~maker závislých na kódování z~plainu to je
+nutné), pak musíme pøed pou¾itím "\characterdef" napsat
+"\let\<sekvence>=\relax".
+
+Ze~stejných dùvodù bylo do OFS pøidáno makro "\safelet"\inl[safelet],
+které se chová jako "\let", ale odmítá pøedefinovat u¾ definované
+kontrolní sekvence. Místo toho pouze vypí¹e varování, definované
+v~makru "\safeletwarn"\inl[safeletwarn].
+
+Kromì deklarace znakù pomocí "\characterdef" je k~dispozici mo¾nost
+deklarace akcentových pøíkazù prostøednictvím
+"\accentdef"\inl[accentdef], který má
+tyto parametry:
+
+\begtt
+\accentdef \<sekvence> <znak> <nepovinná mezera> <kódování> <mezera> <èíslo>
+% Pøíklad:
+\accentdef \v E 8z 204 % Ecaron
+% nebo
+\accentdef \<sekvence> <znak> <nep. mezera> <kódování> <mezera> {<pøíkazy>}
+% Pøíklad:
+\accentdef \v * 8z {\accent20 } % default caron in 8z
+\accentdef \v * * {\blackbox } % default caron
+\endtt
+
+Pokud je aktuální kódování fontù toto¾né s~<kódováním>, pak "\<sekvence>"
+následovaná znakem <znak> expanduje na token kategorie 12 s~kódem
+<èíslo>, respektive expanduje na <pøíkazy>. To v¹e se dìje jen na
+úrovni expand procesoru. Pokud je pøi deklaraci
+pomocí "\accentdef" jako <znak> uvedena hvìzdièka, pak se deklarované
+<pøíkazy> nebo kód <èíslo> pou¾ije v¾dy, kdy¾ znak následující
+"\<sekvenci>" není nikde prostøednictvím "\accentdef"
+deklarován. Jedná se tedy o~defaultní realizaci akcentu, pokud ve
+fontu neexistuje pøímo akcentovaný znak.
+
+Kromì toho mají akcenty deklarované pomocí "\accentdef" stejnou
+inteligenci týkající se mo¾nosti vyu¾ití roz¹iøující metriky, jako
+znaky deklarované v~"\characterdef".
+
+Vysvìtlíme si nyní podrobnìji, jak akcenty deklarované pomocí
+"\accentdef" fungují. Pøíkaz "\accentdef"
+definuje "\<sekvenci>" jako makro s~jedním neseparovaným parametrem
+"#1", které v~první øadì expanduje
+na "\printaccent{<sekvence>}{#1}"\inl[printaccent],
+tak¾e napøíklad "\v E" expanduje na "\printaccent{v}{E}". Dále
+"\accentdef" definuje makro "\<sekvence>:<znak>:-<kódování>" jako znak
+s~daným kódem <èíslo> nebo jako <pøíkazy>. Dal¹í práci udìlá
+pøíkaz "\printaccent". Tento pøíkaz zjistí, zda je definováno makro
+"\<sekvence>:<znak>:-\fotenc". Pokud ano, expanduje na toto makro.
+Pokud ne, tak si ovìøí, zda je k~aktuálnímu fontu poznamenána
+roz¹iøující metrika a zjistí její kódování <extra-enc>. Jestli¾e je
+definováno makro "\<sekvence>:<znak>:-<extra-enc>", pak se expanduje na
+"{\setextrafont \<sekvence>:<znak>:-<extra-enc>}". Pokud zatím v¹e
+selhalo, zkusí "\printaccent" postupnì zjistit, zda jsou definována
+makra "\<sekvence>:*:-\fotenc" a "\<sekvence>:*:-<extra-enc>". Pokud je
+definováno první z~nich, expanduje a pøipojí na konec expanze <znak>.
+Pokud je definováno jen druhé z~nich, expanduje na
+
+\begtt
+{\setextrafont \<sekvence>:*:-<extra-enc> <normalfont> <znak>}
+\endtt
+%
+kde <normalfont> oznaèuje pøepínaè do aktuálního fontu. Jestli¾e
+dosud v¹e selhalo, pokusí se je¹tì o~realizaci akcentu nezávislého na
+kódování, tj.~pokusí se tisknout "\<sekvence>:<znak>:-*" nebo koneènì
+"\<sekvence>:*:-* <znak>". Teprve kdy¾ i toto selhalo,
+spustí se "\printaccentwarn{<sekvence>}{<znak>}".\inl[printaccentwarn]
+Implicitní hodnota tohoto makra vypí¹e se na terminál a do
+logu varování o~nedostupnosti akcentovaného znaku a do výstupu
+nevytiskne nic.
+
+Je tøeba si uvìdomit, ¾e pøechod ke znaku v~roz¹iøující metrice uvnitø
+slova znamená ztrátu vyrovnávacího kernu kolem tohoto znaku a
+nemo¾nost pou¾ít na takové slovo vzory dìlení slov. Proto doporuèujeme
+pou¾ít základní metriku kódovanou tak, aby pøechod na roz¹iøující
+metriku byl jen výjimeèný. Pro èeský a slovenský jazyk jsou v~tomto smyslu
+vhodná kódování "8z" i "8t", proto¾e obì zahrnují kompletní èeskou a
+slovenskou abecedu.
+
+Chceme-li odstranit u¾ deklarovaný znak\inl[characterdel]
+(viz té¾ tzv.~<výjimky> v~následující sekci), mù¾eme pou¾ít pøíkazy
+"\characterdel" a "\accentdel".\inl[accentdel]
+Tyto pøíkazy mají stejné parametry
+jako "\characterdef" resp. "\accentdef" a odstraní definici pøíkazu
+"\<sekvence>:-<kódování>" resp. "\<sekvence>:<znak>:-<kódování>".
+
+%Na závìr této sekce uvedeme pøíklad definice inteligentního
+%"\Uppercase":
+%
+%\begtt
+%\def\Uppercase #1{\bgroup
+% \let\expandaction=\noexpand % \euro zùstane po expanzi bez zmìny
+% % \u{g} taky zùstane beze zmìny
+% \def\ss{SS}\def\l{\L}\def\o{\O}\def\ae{\AE}\def\oe{\OE}%
+% \edef\tmp{#1}\expandafter
+% \egroup \expandafter\uppercase\expandafter{\tmp}%
+%} % \uppercase promìní \u{g} na \u{G}. O to ¹lo.
+%\endtt
+
+
+\subsec \PLAIN: Soubory maker závislých na kódování a výjimky z~kódování
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pøíkazy "\characterdef" a "\accentdef" popsané v~pøedchozí sekci
+pøedefinovávají makra závislá na kódování ("\v", "\ae", atd.). V~této
+sekci popí¹eme koncepci, kam tato makra zapisovat, aby OFS pøi
+"\loadingenc=1" udr¾ovalo konzistentní definice tìchto maker
+v~závislosti na zvoleném kódování a na mno¾inì výjimek
+pou¾ité rodiny fontù.
+
+Deklarace maker pomocí "\characterdef" a "\accentdef"
+se zapisují do souborù s~názvem "ofs-<kódování>.tex" (tzv.~{\it
+kódovacích souborù\/}),
+proto¾e pøíkaz "\loadtextfam" (volaný z~makra "\setfonts")
+tyto deklarace pøi nastaveném "\loadingenc=1"\inl[loadingenc] odtud ète.
+
+Ka¾dé kódování má svou základní sadu znakù a akcentovaných písmen.
+Tato sada je v~kódovacím souboru zanesena pomocí pøíkazù
+"\characterdef" a "\accentdef". Vzhledem k této základní sadì mohou
+jednotlivé rodiny fontù obsahovat nìjaké znaky navíc nebo naopak nìjaké
+znaky mohou chybìt. Tyto výjimky se deklarují
+pomocí pøíkazu "\modifydef"\inl[modifydef] takto:
+
+\begtt
+\modifydef <kódování>:<identifikátor>; {<výjimky>}
+\endtt
+%
+Pøitom <výjimky> obsahují pøíkazy "\characterdef", "\accentdef",
+"\characterdel" a "\accentdel". Pøíkazy "\*del" musejí obsahovat
+v~argumentu hodnotu znaku podle základní sady daného kódování.
+Pokud má být nìjaký znak vzhledem k základní sadì pøedefinován, musejí
+pøíkazy "\*del" a "\*def" k tomuto znaku následovat tìsnì za sebou.
+
+V parametru pøíkazu "\ofsdeclarefamily" mù¾eme pomocí \uv{odkazu na
+<výjimky>} pøíkazem "\modifyenc"\inl[modifyenc]
+vyznaèit, ¾e daná rodina obsahuje vzhledem k~základní sadì kódování
+odpovídající <výjimky>. Pøíkaz má tvar:
+
+\begtt
+\modifyenc <kódování>:<identifikátor>;%
+\endtt
+%
+Takových pøíkazù mù¾e být pro ka¾dou rodinu fontù uvedeno více
+(a samozøejmì tyto pøíkazy mohou obsahovat rùzná <kódování>).
+Odkazuje-li tento pøíkaz na <výjimky>, které je¹tì
+nebyly deklarovány, neprovede se nic.
+
+Pøíklad deklarace výjimek kódování "8z:csfonts" najdete v~souboru
+"ofs-8z.tex" a odkazy na nì pak najdete u~rodin "CM*"
+v~souboru "ofsdef.tex".
+
+Pøíkazy "\modifyenc" jsou spu¹tìny pøi ka¾dém "\setfonts". Ve
+skuteènosti tyto pøíkazy pouze ukádají do tzv.~{\it seznamu odkazù}
+(do makra "\newmodifylist"\inl[newmodifylist])
+své parametry. Pøi startu "\setfonts" se zakládá prázdný seznam odkazù.
+"\modifyenc" ukládá do tohoto seznamu svùj parametr jen tehdy, pokud
+<kódování> je rovno "\fotenc" nebo "\extraenc". Vlastní práci
+(nastavení výjimek) provede a¾ pøíkaz "\runmodifylist", který je spu¹tìn
+na konci "\setfonts" a jeho¾ èinnost si nyní podrobnì popí¹eme.
+
+Makro "\runmodifylist"\inl[runmodifylist] porovná seznam
+odkazù na výjimky pøedchozí rodiny ("\modifylist"\inl[modifylist])
+se seznamem odkazù novì nastavené rodiny ("\newmodifylist"). Pokud jsou oba seznamy
+stejné nebo "\modifylist" má význam "\relax", pak "\runmodifylist"
+ukonèí èinnost. Jinak se pustí do nastavení výjimek. Nejprve prohodí významy
+"\characterdef"$\leftrightarrow$"\characterdel" a
+"\accentdef"$\leftrightarrow$"\accentdel" a spustí "\modifylist"
+Jinými slovy vrátí stav maker vázaných na
+kódování do výchozího stavu. Pøi této èinnosti je ignorováno mazání
+znaku, pokud tìsnì pøed tím byl znak deklarován (viz pravidlo
+o~pøedefinování znaku na zaèátku této sekce). Pak pøíkaz "\runmodifylist"
+vrátí "\characterdef" a "\accentdef" do pùvodního stavu a spustí
+"\newmodifylist". Ve¹kerá pøedefinování, která se pøi této èinnosti provádìjí,
+jsou jen lokální. Mechanismus dvou seznamù odkazù zaruèuje,
+¾e napøíklad pøi
+
+\begtt
+\setfonts [Rodina1/] ... \setfonts [Rodina2/] ...
+\endtt
+%
+budou správnì nastaveny výjimky aktuálního kódování i pro
+Rodinu2, aèkoli Rodina1 má jinou mno¾inu výjimek ne¾
+Rodina2.
+
+Kontrolní sekvence "\modifylist" má po inicializaci OFS význam
+prázdného makra. Programátor maker mù¾e pou¾ít
+"\let\modifylist=\relax" a tím potlaèí ve¹keré nastavování výjimek.
+
+Poznamenejme je¹tì, ¾e deklaraèní pøíkazy "\modifydef" nejen¾e ukládají
+<výjimky> do pamìti, ale projdou také
+jejich obsah a definují v¹echny zde deklarované sekvence jako odpovídající
+"\printcharacter" resp. "\printaccent". Tím máme zaruèeno, ¾e ka¾dá
+kontrolní sekvence ze v¹ech výjimek je definována (nedojde ke zprávì
+{\tt undefined control sequence}) a navíc OFS má
+dokonalý pøehled o tom, zda je v~aktuální rodinì tato kontrolní
+sekvence pou¾itelná nebo nikoli. Tvùrce maker si pak mù¾e podle
+potøeby pøedefinovat makra "\print*warn".
+
+Pøíkaz "\modifydef" prochází <výjimky> tak, ¾e na pøechodnou dobu
+pozmìní pøíkazy "\accentdef", "\accentdel", atd. a <výjimky> spustí.
+Pokud nechceme, aby se makra ve <výjimkách> spou¹tìla u¾ v~dobì
+èinnosti "\modifydef", uvedeme pøed tato makra sekvenci
+"\skipfirststep".\inl[skipfirststep]
+Ta se chová jako "\relax", ale pøi spou¹tìní
+<výjimek> pøíkazem "\modifydef" zpùsobí, ¾e v¹e za touto sekvencí a¾
+do konce <výjimek> bude pøeskoèeno.
+
+Identifikátory "<kódování>:lccodes" a "<kódování>:ienc" jsou rezervovány
+pro pou¾ití mimo OFS v~dal¹ích makrech. OFS napøíklad vùbec neøe¹í nastavení
+"\lccode", "\uccode" znakù podle pou¾itého kódování. Makro, které
+se o toto stará, mù¾e vhodnì definovat pøíkazy "\lccodes"\inl[lccodes]
+a "\lccodesloop"
+a spustí "\csname <kódování>:lccodes\endcsname". OFS uvedené pøíkazy
+vùbec nedefinuje.\inl[lccodesloop]
+Deklarace "<kódování>:lccodes" jsou uvedeny
+v~souborech "ofs-8t.tex" a "ofs-8z.tex" aèkoli nejsou v OFS vyu¾ity,
+proto¾e to souvisí s~kódováním textových fontù. Pøíklad pou¾ití
+"<kódování>:lccodes" je v makru "lang.tex" a makro "inec.tex"
+pou¾ívá "<kódování>:ienc". V dokumentaci~k tìmto makrùm je
+øeèeno více.
+
+Deklarace nejèastìji pou¾ívaných výjimek se zapisují pøímo do
+kódovacích souborù. Deklarace ménì obvyklých výjimek (vztahujících se
+jen na urèité rodiny fontù) mù¾eme psát za "\endinput" deklaraèních
+souborù. Mezi <pøíkazy> makra "\ofsdeclarefamily" pak
+pou¾ijeme pøíkaz\inl[modifyread]
+
+\begtt
+\modifyread <jméno souboru>;%
+\endtt
+%
+Tento pøíkaz pøi kladném "\loadingenc" naète daný soubor
+od výskytu sekvence "\modifytext"\inl[modifytext].
+Tuto sekvenci je vhodné umístit za "\endinput", aby "\modifyread"
+pøeèetl tu èást souboru, která zatím nebyla ètena.
+Pøiøazení je v dobì ètení globální a ignorují se konce
+øádkù a prázdné øádky. Opakovanì se soubor nenaèítá.
+
+Díky tomuto pøíkazu mù¾eme soustøedit deklarace rodin fontù a
+deklarace výjimek z~kódování do spoleèného souboru. Výjimky
+\TeX{} pøeète a¾ v dobì, kdy to potøebuje. ©etøí se tím pamì» \TeX{}u.
+Pøíklad pou¾ití je v~souboru "slido.tex".
+
+OFS nabízí také testovací
+makro, zda kontrolní sekvence odpovídá znaku, který je ve fontu
+pøístupný èi nikoli:\inl[knownchar]
+
+\begtt
+\knownchar <znak nebo akcent+znak>? \iftrue znak je pøístupný
+ \else znak je nepøístupný nebo nedefinovaný \fi
+% pøíklad:
+\def\tryeuro{\knownchar \euro? \iftrue \euro \else Euro\fi}
+\endtt
+
+
+\subsec Pomocná makra pro akcenty a znaky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pro pohodlné deklarování defaultních akcentù jsou v~OFS\inl[accentabove]
+pøipravena dvì makra: "\accentabove" a "\accentbelow",
+která se pou¾ívají takto:\inl[accentbelow]
+
+\begtt
+\accentabove {<znak akcentu>}{<vertikální mezera>}{<základní znak>}
+\accentbelow {<znak akcentu>}{<vertikální mezera>}{<základní znak>}
+\endtt
+
+Pøíkaz "\accentabove" resp. "\accentbelow" pøisadí
+<znak akcentu> nad resp. pod <základní znak>, pøièem¾ mezi tìmito
+znaky bude <vertikální mezera>. Oba znaky budou na spoleèné vertikální
+ose a pøi sklonìném písmu na spoleèné sklonìné ose. ©íøka výsledného
+slo¾eného znaku je odvozena od ¹íøky základního znaku. Makra jsou
+implementována jako "\vbox" resp. "\vtop" spoleènì s~"\halign" a
+s~výpoètem usazení na pøípadnì sklonìné ose.
+
+Znaky pro akcent nahoøe jsou ve fontech vesmìs kresleny ve vý¹ce
+odpovídající základnímu znaku o~vý¹ce 1\,ex. Proto usazení
+takového akcentu vy¾aduje kompenzaci:
+
+\begtt
+\accentabove {<znak akcentu>}{-1ex}{<základní znak>}
+\endtt
+
+V~tomto pøípadì se akcent umístí naprosto stejnì, jako pøi pou¾ití
+primitivu "\accent". Na rozdíl od tohoto primitivu ale makra
+"\accentabove" a "\accentbelow" umo¾nují vzájemné skládání,
+èím¾ mù¾eme dosáhnout nìkolikanásobného akcentu. Vyzkou¹ejte:
+
+\begtt
+\it \accentabove {.}{.1ex}{\accentabove {,}{.1ex}{\v A}}
+\endtt
+
+\PLAIN:
+Bohu¾el, makra deklarovaná pomocí "\accentdef" nejsou uzpùsobena na
+více ne¾ dvojí akcent. Navíc dvojí akcent je mo¾ný jen
+v~tom pøípadì, ¾e se vnitøní akcent
+se základním znakem realizuje jako jediný znak. Pokud potøebujeme
+vícenásobný akcent, mù¾eme v¾dy pou¾ít pøímo v~textu makro
+"\accentabove" nebo "\accentbelow".
+
+\PLAIN:
+Od verze OFS Feb. 2004 je k dispozici makro
+"\ofshexbox"\inl[ofshexbox], které pracuje podobnì jako
+plainové "\mathhexbox", ale navíc dovede nastavit font podle
+aktuální varianty. Nejprve pomocí pøíkazu
+"\ofshexboxdef"\inl[ofshexboxdef] nastavíme \uv{rodinu} ètyø metrik:
+
+\begtt
+\ofshexboxdef <rodina>{<metrika-rm>}{<metrika-bf>}{<metrika-it>}{<metrika-bi>}
+\ofshexboxdef 2 {cmsy}{cmbsy10}{cmsy}{cmbsy10} % napøíklad takto
+\endtt
+%
+Pak pøíkaz "\ofshexbox <rodina><hexa-kód>" vytiskne znak s~<hexa-kódem>
+z jednoho ze ètyø deklarovaných fontù a v aktuální velikosti "\fosize"
+Volba fontu závisí na aktuální variantì. Pokud je varianta jiná ne¾
+"\bf", "\it", "\bi", pou¾ije se <metrika-rm>. OFS implicitnì deklaruje
+jen <rodinu> = 2, proto¾e plain pou¾ívá jen "\mathhexbox2..".
+Cílem tohoto makra bylo definovat pro CMfonty/CSfonty znaky
+"\S", "\dag", "\ddag", "\P" zpùsobem, který je nezávislý na aktuálním
+nastavení matematických fontù, ale je závislý na aktuální velikosti a
+variantì. Viz soubor "ofs-8z.tex".
+
+Pomocí "\ofshexbox" mù¾eme snadno definovat napøíklad symbol
+"\euro" pro v¹echna kódování fontù, ve kterých je tento
+symbol nepøítupný:
+
+\begtt
+\ofshexboxdef {TS1}{tcrm1000}{tcbx1000}{tcti1000}{tcbi1000}
+\characterdef \euro * {\ofshexbox{TS1}BF}
+\endtt
+
+
+\subsec \PLAIN: Fonty v~matematice podruhé
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Nastal èas podrobnìji vysvìtlit èinnost pøíkazu "\setmath"\inl[setmath].
+Ten pøevezme parametry a vypoèítá z~nich
+základní\inl[textfosize],
+indexovou a index-indexovou velikost fontù. Výsledky ulo¾í do maker
+"\textfosize"\inl[scriptfosize],
+"\scriptfosize" a "\scriptscriptfosize". V~nich jsou
+údaje o~velikosti ulo¾eny ve tvaru
+"at<dimen>" nebo "scaled<èíslo>"\inl[scriptscriptfosize]
+podobnì jako v~makru "\fosize". Pak pøíkaz "\setmath" spustí makro
+"\mathfonts"\inl[mathfonts].
+V~nìm se pøedpokládá zavedení a nastavení
+matematických fontù.
+Pokud je "\setmath" spu¹tìno poprvé nebo pokud do¹lo ke zmìnì
+hodnoty "\fomenc", tak "\setmath" je¹tì spustí
+makro "\mathchars"\inl[mathchars].
+Tam se obvykle nastavují kódy matematických znakù pomocí
+"\mathcode", "\mathchardef" a pøíbuzných primitivù.
+Makra "\mathfonts" a "\mathchars" mají sice v~OFS svou
+implicitní hodnotu, ale zku¹ený u¾ivatel je mù¾e podle své
+potøeby mìnit.
+
+Pro pohodlné zavádìní a nastavování matematických fontù je pøipraveno
+makro "\loadmathfam"\inl[loadmathfam],
+které se pou¾ívá v~definici makra "\mathfonts".
+Makro "\loadmathfam" má tyto mo¾nosti parametrù:
+
+\begtt
+%% % font je deklarován:
+\loadmathfam <rodina>[/<metrika>] % metrikou
+\loadmathfam <rodina>[-<varianta>/] % variantou aktuální rodiny
+\loadmathfam <rodina>[<pøepínaè>/] % pøepínaèem textového fontu
+\loadmathfam <rodina>[X<pøepínaè>/] % roz¹iøující metrikou pøepínaèe
+\endtt
+%
+Pøíklady:
+
+\begtt
+\loadmathfam 0[tenrm/]% metrika podle pøepínaèe \tenrm
+\loadmathfam 5[-bi/]% metrika z akuální textové rodiny, varianta bi
+\newmathfam \symbfam
+\loadmathfam \symbfam [/psyr]% metrika psyr
+\newmathfam \extitfam
+\loadmathfam \extitfam [Xtenit/]% roz¹iøující metrika k pøepínaèi tenit
+\endtt
+%
+V~pøíkladì jsou do rodiny 0 zavedeny fonty stejné, jako v~aktuálním
+textovém fontu "\tenrm". V~rodinì 5 jsou zavedeny fonty
+jako pøi~"\setfonts [-bi/]".
+Dále je deklarována nová rodina "\symbfam",
+do které jsou zavedeny fonty z~metriky "psyr".
+
+Existuje nepatrný rozdíl napø.~mezi pou¾itím pøíkazu "\loadmathfam 5[tenbi/]"
+a "\loadmathfam 5[-bi/]". V~prvním pøípadì OFS zjistí metriku
+k~pøepínaèi "\tenbi" a tuto metriku pou¾ije ve v¹ech velikostech
+stejnou pouze modifikovanou klíèovým slovem "at<dimen>".
+Ve druhém pøípadì se mù¾e pro rùzné velikosti pou¾ít rùzná metrika,
+pokud je tato vlastnost pro danou variantu fontu
+deklarována (viz~\beglink{3.8}sekce~3.8\endlink).
+
+Pro deklaraci nové
+rodiny se v pøíkladu pou¾ila alternativa k~"\newfam" s~názvem
+"\newmathfam"\inl[newmathfam],
+proto¾e makro "\newfam" z~plainu je definováno jako "\outer"
+a nelze je tedy pou¾ít uvnitø definice. Navíc makro
+"\newmathfam" pracuje lokálnì a tudí¾ ¹etøí více místa pro u¾ivatelské
+rodiny ne¾ plainovské "\newfam".
+V~deklaracích základních matematických kódování se nové matematické
+rodiny definují pøímo pomocí "\chardef" a je tam pomocí pøíkazu
+"\lastfam=<èíslo>"\inl[lastfam]
+nastavena maximální pou¾itá hodonta. To zaruèí, ¾e u¾ivatel mù¾e
+pozdìji pou¾ít "\newmathfam" a zaène alokovat dal¹í
+rodiny s~èísly tìsnì vìt¹ími ne¾ "\lastfam".
+
+Popí¹eme nyní princip èinnosti makra "\loadmathfam". Toto makro
+zjistí metriku, která odpovídá zadanému parametru.
+Pak provede tøikrát primitiv "\font" zhruba takto:
+
+\begtt
+\font \<název>-Mt = <metrika> \textfosize
+\font \<název>-Ms = <metrika> \scriptfosize
+\font \<název>-Mss = <metrika> \scriptscriptfosize
+\textfont <rodina> = \<název>-Mt
+\scriptfont <rodina> = \<název>-Ms
+\scriptscriptfont <rodina> = \<název>-Mss
+\endtt
+%
+Pøitom <název> je text parametru "\loadmathfam", který deklaruje
+metriku (pøepínaè, varianta nebo metrika).
+
+Fonty matematické rodiny~3 jsou v~plain\TeX{}u obvykle zavedeny bez
+zmen¹ování pro indexy a indexy indexù. Pokud po¾adujeme
+pøi zavádìní matematické rodiny
+nezmen¹ovat fonty pro indexy, uvedeme tìsnì pøed "\loadmathfam"
+prefix "\noindexsize"\inl[noindexsize].
+Makro "\loadmathfam" pak zavede font jen ve velikosti "\textfosize"
+a pou¾ije ho i pro indexovou a indexindexovou velikost.
+Pøíklad:
+
+\begtt
+\noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+\endtt
+
+OFS definuje v~souboru "ofsdef.tex" pro zavádìní matematických fontù
+ètyøi rùzná makra. Ta se pou¾ijí podle toho, zda je "\fomenc"
+nastaveno na "CM" nebo "PS" a "\mathversion" na "normal" nebo "bold".
+Dále OFS definuje dvì makra s~deklaracemi matematických kódù,
+která se pou¾ijí podle aktuálnì nastavené hodnoty "\fomenc".
+
+\begitems
+* "\loadCMnormalmath"\inl[loadCMnormalmath]
+ --- zavede CM fonty ve verzi \uv{normal}.
+* "\loadCMboldmath"\inl[loadCMboldmath]
+ --- zavede CM fonty ve verzi \uv{bold}.
+* "\loadPSnormalmath"\inl[loadPSnormalmath]
+ --- zavede PostScriptové fonty ve verzi \uv{normal}.
+* "\loadPSboldmath"\inl[loadPSboldmath]
+ --- zavede PostScriptové fonty ve verzi \uv{bold}.
+* "\setCMmathchars"\inl[setCMmathchars]
+ --- ponechá matematické kódy z~plainu.
+* "\setPSmathchars"\inl[setPSmathchars]
+ --- nastaví matematické kódy tak, aby se nahradily
+ nìkteré znaky z~fontu Symbol.
+\enditems
+
+Dále je v~OFS implicitnì nastaveno:
+
+\begtt
+\ifx \fomenc\undefined \def\fomenc{PS}\fi
+\def\mathversion{normal}
+\def\defaultmathfonts{\csname load\fomenc\mathversion math\endcsname}@inl[defaultmathfonts]
+\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}@inl[defaultmathchars]
+\def\mathfonts{\defaultmathfonts}
+\def\mathchars{\defaultmathchars}
+\endtt
+
+Je mo¾né pøidávat k~implicitnì nastaveným matematickým fontùm
+dal¹í matematické rodiny (v~terminologii NFSS matematické abecedy)
+pozmìnìním maker "\mathfonts" a pøípadnì "\mathchars".
+Ní¾e je pøíklad pøidání fraktury z~Eulerových fontù od AMS:
+
+\begtt
+\input amsfn % tam je deklarována metrika eufm a eufb
+\addcmd\mathfonts{\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{b}\fi
+ \newmathfam\frakfam \loadmathfam\frakfam [/euf\tmpa]}
+\def\frak#1{{\fam\frakfam#1}}
+\endtt
+
+Dal¹í pøíklady deklarací matematických rodin
+jsou uvedeny v~souborech "amsfn.tex",
+"txfn.tex" a "mtfn.tex". Soubory definují výchozí skupiny
+matematických fontù pro kódování "AMS", "TX", "PX", "MT".
+Na konci tìchto souborù jsou komentáøe vèetnì ukázek, jaké
+doplòující rodiny fontù je mo¾no pomocí "\addcmd" zavést.
+
+Proto¾e chci umo¾nit naètení v¹ech fontových deklarací OFS
+v~ini\TeX{}u (viz projekt Ok\TeX{}), ale pøitom ¹etøit pokud
+mo¾no pamìtí \TeX{}u, rozhodl jsem se nenaèítat rozsáhlé definice
+obsahující deklarace kódování matematických fontù pomocí
+"\mathchardef" atd. okam¾itì, ale a¾ v dobì, kdy to u¾ivatel
+v dokumentu skuteènì potøebuje.
+Proto jsem od verze OFS Apr. 2004 pøedefinoval napøíklad makro
+"\setPSmathchars" takto:
+
+\begtt
+\def\setPSmathchars{\mathencread ofs-ps;}
+\endtt
+%
+Pøíkaz "\mathencread <soubor>;"\inl[mathencread]
+naète kódovací pøíkazy ze souboru
+<soubor.tex>. Napø. v~souboru "ofs-ps.tex" jsou kódovací pøíkazy pro
+kódování "PS", v~"ofs-ams.tex" jsou kódovací pøíkazy pro kódování
+"AMS"~atd.
+
+V~souborech "ofs-ps.tex", "ofs-tx.tex" atd.
+jsou kódovací pøíkazy \uv{baleny} do skupin a
+definovány pøíkazem "\mathencdef"\inl[mathencdef]. Tento pøíkaz
+pracuje implicitnì jako \uv{definuj, spus» a zapomeò}. Tento model
+¹etøí pamì», ale pøi èastých zmìnách matematického kódování budou
+kódovací soubory èteny opakovanì znovu. To vìt¹inou nevadí, proto¾e
+vìt¹inou bývá pro celý dokument nastaveno jediné matematické kódování.
+Pokud ale tento model nìkomu nevyhovuje, mù¾e si jako cvièení zkusit
+pøedefinovat "\mathencread" a "\mathencdef" tak, aby se soubory èetly
+jen jednou a pøi opakovaném spu¹tìní "\mathchars" se kódovací pøíkazy
+èetly ze zapamatovaných maker.
+
+Pøíkaz "\mathencread <soubor>;" zalo¾í skupinu, ve které pro jistotu
+nastaví kategorie v¹ech znakù podle plain\TeX{}u
+(s~výjimkou "\catcode`@=11") a pøeète "<soubor>.tex".
+Pøi ètení je "\globaldefs=1" a ignorují se konce øádkù a prázdné øádky.
+Rovnì¾ je ignorováno makro "\protectreading", tak¾e soubor mù¾e být
+èten opakovanì. Pøíkazy "\mathencdef" spustí a zapomenou
+nadefinovaná makra a¾ po uzavøení skupiny,
+tak¾e tato makra spou¹tí pøíkazy "\mathchardef" atd. u¾ jen
+s~lokálními pøiøazeními.
+
+Vysvìtlíme, jak je zaji¹tìno obnovování výchozích hodnot
+pøi pøepínání mezi matematickými kódováními.
+Pøíkaz "\setmath" spou¹tí tìsnì pøed "\mathchars" makro
+"\mathcharsback"\inl[mathcharsback], aby uvedl matematické kódování
+do výchozího stavu podle plain\-\TeX{}u.
+Toto makro má implicitnì význam
+"\relax", proto¾e implicitnì je matematické kódování
+podle plain\TeX{}u nastaveno.
+Mìní-li ale pøíkaz "\set<fomenc>mathchars" hodnoty nastavené
+v~plain\TeX{}u, mìl by také definovat makro
+"\mathcharsback", do kterého ulo¾í postup, jak
+vrátit nastavení do pùvodního stavu.
+V definici makra "\mathcharsback" mù¾eme mimo jiné pou¾ít
+pøíkaz "\mathencread ofs-cm;", proto¾e v~souboru "ofs-cm.tex"
+jsou ulo¾eny deklarace metamatického kódování podle plain\TeX{}u
+
+Pokud si budeme deklarovat vlastní matematická kódování (rùzná od
+pøipravených "PS", "CM", "AMS" atd.), pak je potøeba myslet na
+následující zásadu: ve v¹ech verzích matematických fontù
+(normal/bold/atd.) by mìla být èísla matematických rodin alokována
+stejnì a ukonèena stejným "\lastfam", proto¾e makro "\mathchars" se po
+pøepnutí do jiné verze nespou¹tí znovu. Zvlá¹tì nesmíme mìnit
+èísla tìch rodin, na které se odvoláváme v~makru
+"\set<kódování>mathchars".
+
+Nyní popí¹eme dal¹í makra ulehèující deklaraci matematického kódování.
+Makro "\hex"\inl[hex]
+konvertuje èíslo na jednociferné hexadecimální
+èíslo. Vyu¾ití tohoto makra najdeme v~souborech "ofs-ps.tex",
+"ofs-tx.tex" a dal¹ích.
+
+Pro definování sekvencí, které budou pracovat v textovém i
+matematickém módu souèasnì, slou¾í makro
+"\safemathchardef"\inl[safemathchardef].
+Toto makro má stejný zpùsob pou¾ití, jako primitivní "\mathchardef":
+
+\begtt
+\safemathchardef \<sekvence> <èíslo>
+\endtt
+
+Pokud není "\<sekvence>" v~okam¾iku pou¾ití "\safemathchardef"
+definována, pøíkaz pracuje zcela stejnì jako "\mathchardef".
+Pokud ale je "\<sekvence>" u¾ definována, ulo¾í pøíkaz
+"\safemathchardef" její význam do "\T<sekvence>", dále provede
+"\mathchardef \M<sekvence> = <èíslo>" a koneènì "\<sekvenci>"
+pøedefinuje následujícím zpùsobem:
+
+\begtt
+\def \<sekvence> {\ifmmode \expandafter \M<sekvence>
+ \else \expandafter \T<sekvence> \fi}
+\endtt
+%
+Od této chvíle "\<sekvence>" pracuje v textovém i matematickém módu.
+Pro pøípad opakovaného pou¾ití "\safemathchardef" na stejnou
+"\<sekvenci>" makro kontroluje, zda u¾ není definována "\M<sekvence>".
+Pokud ano, pak "\safemathchardef" neprovede nic.
+
+Je potøeba, aby byly soubory s~pøíkazy "\characterdef"
+naèteny pøed prvním pou¾itím "\setmath". Pak lze v~rámci
+"\setmath" (pøesnìji v~makru "\mathchars") pou¾ít
+"\safemathchardef" na pøedefinování nìkterých sekvencí,
+které byly døíve deklarovány pomocí "\characterdef". Tyto sekvence pak
+budou pracovat v textovém i matematickém módu.
+
+Naprosto stejnì, jako "\safemathchardef" pracuje pøíkaz
+"\safemathaccentdef"\inl[safemathaccentdef].
+Pouze místo primitivu "\mathchardef" pou¾ije
+makro "\mathaccentdef"\inl[mathaccentdef],
+které pøeète za "\<sekvencí>" "<èíslo>" separované mezerou
+a provede:
+
+\begtt
+\def \<sekvence> {\mathaccent<èíslo> }
+\endtt
+
+Pokud nechceme deklarovat novou matematickou rodinu pro nìkolik
+málo znakù (poèet matematických rodin je toti¾ v~\TeX{}u
+omezen na 16), mù¾eme pou¾ít makro
+"\pickmathfont"\inl[pickmathfont], které má tyto
+parametry:
+
+\begtt
+\pickmathfont {<metrika>}{<text>}
+% pøíklad pou¾ití:
+\mathbin {\pickmathfont {psybo}{\char"C4}}
+\endtt
+%
+Makro "\pickmathfont" pou¾ije primitiv "\font" na specifikovanou
+<metriku> a v~tomto fontu zapí¹e <text>, který v~matematickém seznamu
+tvoøí atom typu Ord. Dùle¾ité je, ¾e je pou¾it font v~odpovídající
+velikosti (základní, indexová, indexindexová), tak¾e to vypadá, jako
+by byl pou¾ita nová matematická rodina fontù. Pøitom to není pravda,
+proto¾e "\pickmathfont" je implementován pomocí primitivu "\mathchoice".
+Pou¾ití pøíkazu "\pickmathfont" najdeme v~souboru "ofsdef.tex"
+v~definici makra "\setPSmathchars".
+
+
+
+\subsec Registrování metrik pro rùzné velikosti
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Registrování rùzných metrik pro rùzné velikosti se dìlá
+ve~"fd" souborech a je to dokonale vyøe¹eno v~NFSS.
+
+\PLAIN (a¾ do konce sekce):
+Existují speciální rodiny fontù (napøíklad Computer Modern), kde se
+pro rùzné velikosti fontù pou¾ívají rùzné metriky. I~tato vlastnost je
+implementována v~OFS. Dosud jsme zatajili, ¾e v~parametrech pøíkazù
+"\loadtextfam", "\loadmathfam" a "\pickmathfont" je mo¾né místo názvù
+metrik uvést smy¹lené <jméno>, které je registrováno pøíkazem
+"\registertfm"\inl[registertfm].
+V~takovém pøípadì se skuteèná metrika pro zavedení primitivem "\font"
+vypoèítá z~po¾adované velikosti fontu a z~údajù, které byly zadány
+pomocí skupiny pøíkazù "\registertfm". Upøesníme nyní parametry
+pøíkazu "\registertfm":
+
+\begtt
+\registertfm <jméno> <mezera> <od>-<do> <mezera> <skuteèná metrika> <mezera>
+\endtt
+
+Parametry <od> a <do> musejí obsahovat jednotku a vymezují uzavøený
+interval, pro který platí: jestli¾e je po¾adovaná velikost fontu
+ve tvaru "at"<dimen> a souèasnì <dimen> le¾í
+v~intervalu "<od>-<do>", pak se místo <jména> pou¾ije
+"<skuteèná metrika> at<dimen>".
+Pøíkaz "\registertfm" je potøeba pro vymezení rùzných
+intervalù pou¾ít opakovanì na stejné <jméno>.
+Aèkoli jsou intervaly "<od>-<do>" uzavøené, pozdìji
+deklarovaný interval má pøednost pøed døíve deklarovaným, tak¾e nakonec
+je kladná reálná osa rozdìlena na polouzavøené intervaly. Pøíklad
+pou¾ití je v~souboru "ofsdef.tex".
+
+Jsou-li oba parametry <od> a <do> prázdné, je pøíkazem "\registertfm"
+deklarována metrika, která se pou¾ije pøi specifikaci velikosti pomocí
+"scaled<èíslo>" nebo v~pøípadì, kdy <dimen> nele¾í v~¾ádném
+specifikovaném intervalu. Hvìzdièka místo parametru <do> znaèí
+\uv{nekoneènou velikost}.
+
+Pøíkaz "\registertfm <jméno> <mezera> - <mezera> - <mezera>"
+vyma¾e z~pamìti pøedchozí registrace pro dané <jméno> a navíc vyznaèí
+<jméno> jako nepøístupný font. OFS se pak chová stejnì, jakoby odpovídající
+varianta nebyla vùbec deklarována. Dává nám to
+mo¾nost vyznaèit neexistující varianty deklarované rodiny
+jen pro nìkterá kódování (viz napøíklad "cmssbxti"
+v~souboru "ofsdef.tex").
+
+Parametry <jméno> a <skuteèná metrika> se expandují v~okam¾iku
+èinnosti pøíkazu "\registertfm". Není proto obvyklé v~nich pou¾ívat
+makro "\fotenc". Nicménì toto makro mù¾eme v~uvedených parametrech
+pou¾ít, pokud zahrneme potøebnou skupinu pøíkazù "\registertfm"
+do vlastního makra a toto makro spustíme opakovanì pro rùzné
+hodnoty "\fotenc".
+
+Makro "\registerECfont"\inl[registerECfont]
+je zkratkou za opakované pou¾ití pøíkazu
+"\registertfm" na v¹echny velikosti EC fontù od "0500"
+a¾ po "3583". Stejnì makro
+"\registerECTTfont"\inl[registerECTTfont]
+je zkratkou pro velikosti EC fontù od "0800" do "3583" pou¾ívané pro
+strojopis. Definice a pou¾ití tìchto maker najdeme v souboru
+"ofsdef.tex". Makra mù¾eme pou¾ít i na jiné fonty, které mají stejnì
+odstupòované velikosti jako EC fonty (napø. LH fonty s~azbukou nebo
+fonty odvozené z~CM-super).
+
+
+\subsec Omezení pou¾ití rodiny fontù pro urèitá kódování
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Pou¾ití rodiny v~daném kódování je závislé na existenci
+"fd" souboru, tj.~v¹e je v~re¾ii NFSS.
+
+\PLAIN (a¾ do konce sekce):
+OFS od verze Feb.~2004 zavádí pøíkaz "\registerenc",\inl[registerenc]
+kterým mù¾eme omezit pou¾ití deklarované rodiny fontù
+jen pro vymezená kódování.
+Pokud pak u¾ivatel napí¹e "\setfonts" a vy¾aduje rodinu
+v~neregistrovaném kódování, OFS vypí¹e varování na obrazovku
+a vùbec do po¾adované rodiny nepøepne. Tím se vyhne pokusu zavést
+pravdìpodobnì neexistující metriky fontù. Pøíkaz "\registerenc"
+má dva parametry:
+
+\begtt
+\registerenc <JménoRodiny>: <kódování><mezera>
+\registerenc Times: 8t % napøíklad
+\registerenc Times: 8z % nyní má Times registrována dvì kódování
+\endtt
+
+Pokud nemá rodina registrováno ¾ádné kódování, pak OFS pøedpokládá, ¾e
+je pou¾itelná v~jakémkoli kódování (napøíklad fonty znaèek).
+
+V~deklaraèních souborech tedy mù¾eme pomocí "\registerenc" omezit
+pou¾ití rodiny jen na vymezená kódování. U¾ivatel ale mù¾e
+pøíkazem "\registerenc" pøidat k~rodinì dal¹í povolené kódování. Nebo
+také mù¾e naznaèit, ¾e rodina má povoleno libovolné kódování
+pøíkazem "\registerenc <JménoRodiny>: * ".
+
+Abychom v~deklaraèních souborech nemuseli opisovat <JménoRodiny>, mù¾e
+být tento parametr prázdný. V~takovém pøípadì "\registerenc" pou¾ije
+rodinu z~posledního pøíkazu "\ofsdeclarefamily".
+
+Ve svých makrech se mù¾ete zeptat, zda je rodina pro aktuální hodnotu
+"\fotenc" registrovaná:\inl[registeredfam]
+
+\vbox \bgroup
+\begtt
+\registeredfam <JménoRodiny>? \iftrue
+ Rodina má \fotenc registrováno nebo má povoleno jakékoli kódování
+ nebo vùbec není deklarována.
+\else Rodina má registována kódování, ale \fotenc mezi nimi není.
+\fi
+\endtt \egroup
+
+Pokud spustíme "\setfonts[<JménoRodiny>/]" pro nedeklarovanou rodinu
+nebo pro rodinu s~nedovoleným kódováním,
+pak OFS napí¹e varování na terminál a vrátí "\setfontsOK"\inl[setfontsOK]
+jako "\undefined". Po úspì¹ném nastavení fontu má sekvence
+"\setfontsOK" hodnotu "\relax".
+
+
+\sec Licence
+%%%%%%%%%%%%
+
+Balíèek OFS mù¾e pou¾ívat kdokoli bez licenèních poplatkù. Kdokoli jej
+rovnì¾ mù¾e distribuovat, pokud nezmìní obsah souboru "readme.ofs"
+"ofs.tex", "ofsdef.tex", "ofs.sty", "ofs-8z.tex",
+"ofs-8t.tex", "a35.tex", "a35.sty", "ofsdoc.tex", "ofsdoce-e.tex",
+"ofsmtdef.tex" a
+v¹echny tyto soubory budou v distribuci pøítomny.
+Právo na zmìnu tìchto souborù a
+tím zmìnu verzí zùstává výhradnì autorovi. Pokud potøebujete zmìnit
+obsah nìkterého z~uvedených souborù, nazvìte jej jinak. Balíèek je
+poskytován s~pøáním, aby byl u¾iteèný, ale BEZ JAKÉKOLI ZÁRUKY.
+
+\bigskip
+V~Praze dne 16. 8. 2001 \hfill autor: Petr Ol¹ák
+
+
+\sec Historie
+%%%%%%%%%%%%%
+
+\noindent
+16. 8. 2001 --- uvedena první verze
+
+\noindent
+24. 10. 2002 --- provedeny drobné úpravy respekutjící zmìny
+ve verzi OFS Oct.~2002.
+V této verzi byl pøidán pøíkaz "\addcmd" a byly
+umo¾nìny nepovinné parametry
+"(<Varianta>)" v pøíkazu "\loadtextfam".
+
+\noindent
+10. 2. 2004 --- V¹echny úpravy se týkají jen OFS pro plain:
+
+\def\bod{\hangindent=1.2em \hangafter=1 \noindent + }
+
+\bod Vylep¹ena manipulace s deklaracemi maker
+závislých na kódování, deklarace výjimek a registrování kódování pro
+zvolenou rodinu.
+Viz~\beglink{3.5}sekce~3.5\endlink{} a \beglink{3.9}sekce~3.9\endlink.
+
+\bod Pøidána mo¾nost pøedefinování rodiny (napø. dodateèným naètením
+souboru deklaraèního souboru, který modifikuje vlastnosti implicitních rodin).
+
+\bod Deklarace CMRoman, CMSans a CMTypewriter pro kódování 8t
+pou¾itím EC fontù.
+
+\bod Pøidána podpora roz¹iøujícího kódování 8c.
+
+\bod Upravena deklarace matematického kódování PS, aby "\int",
+"\sum" a "\prod" pracovaly v~display módu s~vìt¹ími znaky.
+
+\bod Definováno makro "\ofshexbox" a "\ofshexboxdef".
+
+\bod Novì zveøejnìno interaktivní makro "ofstest.tex".
+
+\bod Zaveden adresáø "examples/", kde prùbì¾nì budu dávat
+pøíklady pou¾ití OFS.
+
+\noindent
+12. 3. 2004 --- OFS pro plain:
+
+\bod Kódovací soubory jsou èteny pøímo z "\loadtextfam".
+Tím je umo¾nìno dávat do kódovacích souborù mapování metrik pøíkazem
+"\registerenc" (vyu¾iju pro LANG).
+
+\bod "\characterdef" respektuje definované makro a nepøedefinuje jej.
+
+\bod Reimplementováno "\showfonts". Nyní ¹etøí výraznì pamì» i èas na
+rozsáhlých seznamech fontù. Pozor: pokud jste mìli makra vyu¾ívající
+interní makro "\listfamilies", pak toto pøestane
+fungovat. Napø. nefunguje od této verze zastaralé "ofscatal.tex".
+Místo nìj je mo¾no pou¾ít "ofstest.tex"
+
+\bod Modifikováno "ofstest.tex", aby pracovalo s novou implementací
+seznamu rodin "\ofslistfamilies".
+
+\noindent
+2. 4. 2004 --- pøidáno "\plaincatcodes" pøed ètením souborù "ofs-<kódování>.tex".
+
+\bod Zavedeno "\safelet" a "\protectreading".
+
+\bod Mezera za <znakem> v "\accentdef" je nepovinná.
+
+\bod Pøidána mo¾nost "\loadmathfam <rodina>[-<varianta>/]" a roz¹íøena
+a pøepracována deklarace pro matematická kódování "CM", "PS", "AMS",
+"TX", "PX", "MT".
+
+
+\sec Rejstøík v¹ech maker definovaných v~OFS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Rejstøík obsahuje odkazy pouze na místa v~textu, kde je k~makru
+vysvìtlující komentáø. V~tom místì je té¾ uveden pro snadnìj¹í orientaci
+název makra v~levém okraji. V~rejstøíku nejsou odkazy na
+v¹echny zmínky o~makru v~textu. Rejstøík je správnì vygenerován hned
+po prvním prùchodu zpracování tohoto dokumentu pøíkazem "csplain ofsdoc".
+
+Nìkterá makra definovaná v~"ofs.tex" jsou interní nebo pomocná
+a není o~nich zmínka v~textu. Pak odkaz na stranu zámìrnì chybí a je
+pøipojena jen krátká poznámka o~takovém makru. Rovnì¾ jsou pøipojeny
+poznámky o~tom, zda je makro pou¾ito ve verzi pro
+{\smallbf PLAIN} nebo {\smallbf LATEX}.
+
+
+\bigskip
+\immediate\closeout\indout
+\input \jobname.ind
+
+\begingroup
+\let\tt=\smalltt \let\it=\smallit \let\rm=\smallrm \rm
+\baselineskip=10.3pt
+
+\def\inr #1 #2 #3;{\noindent{\tt
+ \expandafter \ifx \csname ind:#2\endcsname \relax
+ \back#1%
+ \else
+ \beglink{#2}\back#1\endlink
+ \fi}\quad
+ #3 \quad\pg[#2]\par}
+\def\\#1 #2;{\inr #1 #1 #2;}
+\def\pl{{\sevenrm (PLAIN)}}
+\def\la{{\sevenrm (LATEX)}}
+\def\oba{{\sevenrm (PLAIN+LATEX)}}
+
+\\accentabove \pl;
+\par\nobreak
+\\accentbelow \pl;
+\\accentdef \pl;
+\\accentdel \pl;
+\\accentdefori \unskip, {\tt\back accentdelori} \pl~interní,
+ udr¾ují pùvodní význam maker;
+\\accentnodef \pl~interní, {\tt\back def\back <makro>\#1%
+ \char`\{\back printaccent\char`\{<makro>\char`\}\char`\{\#1\char`\}\char`\}};
+\\addcmd \oba;
+\inr bf rm \oba;
+\inr bi rm \oba;
+\\bifam \pl~interní, matematická rodina pro BoldItalic;
+\\calculatemetricfile \pl~interní, definuje {\tt\back metricfile}
+ podle velikosti;
+\\catcodesloop \pl~interní, nastaví kategorie znakù v cyklu podle daného èísla;
+\\characterdef \pl;
+\\characterdel \pl;
+\\characterdefori \unskip, {\tt\back characterdelori} \pl~interní,
+ udr¾ují pùvodní význam maker;
+\\characternodef \pl~interní, {\tt\back def\back <makro>%
+ \char`\{\back printcharacter\char`\{<makro>\char`\}\char`\}};
+\\currentfamily \pl;
+\\currentfomenc \pl~interní, jméno naposledy pou¾itého matemat. kódování;
+\\currentvariant \pl;
+\\declaredfamily \pl~interní, obsahuje jméno naposledy deklarované rodiny;
+\\defaultextraenc \pl;
+\\defaultmathchars \pl;
+\\defaultmathfonts \pl;
+\\defpttotmpa \pl~interní, udìlá {\tt\back def\back tmpa\char`\{pt\char`\}},
+ pokud chybí jednotka;
+\\detailfontmessages \pl;
+\\displayfontmessages \pl;
+\\displaymessage \pl;
+\\docharacterdef \pl~interní, pro potøeby makra {\tt\back characterdef};
+\\doextchar \pl~interní, pro potøeby makra {\tt\back extchar};
+\\dosafemathdef \pl~interní, pro potøeby maker {\tt\back safemath*def};
+\\donumbercharacterdef \pl~interní, pro potøeby makra {\tt\back characterdef};
+\\endOFSmacro \pl~interní, mo¾nost ètení {\tt[<file>, ...]} za
+ {\tt\back input ofs};
+\\expandaction \pl;
+\\extchar \oba;
+\\extraenc \pl;
+\\extrafont \pl;
+\\fontdef \oba;
+\\fontloadmessage \pl~interní, výpis informace o~provedení {\tt\back font};
+\\fontmessage \pl~interní, støídá hodnoty nic,
+ {\tt\back wlog} a {\tt\back displaymessage};
+\\fontprefix \pl~interní, støídá hodnotu nic a {\tt\back global};
+\\fontusage \oba;
+\\fosize \pl;
+\\fomenc \pl;
+\\fotenc \pl;
+\\fragilecommand \pl;
+\\fragilecommand! \pl;
+\\hex \pl;
+\\ifknownfam \oba;
+\\isunitpresent \pl~interní, øe¹í pøípad absence jednotky;
+\inr it rm \oba;
+\\knownchar pl;
+\\knownfam pl;
+\\lastfam pl;
+\\lccodes \unskip, {\tt\back lccodesloop} \pl;
+\\loadCMboldmath \pl;
+\\loadCMnormalmath \pl;
+\\loadingenc \pl;
+\\loadmathfam \pl;
+\\loadPSboldmath \pl;
+\\loadPSnormalmath \pl;
+\\loadtextfam \pl;
+\\logfontmessages \pl;
+\\mathaccentdef \pl;
+\\mathchars \pl;
+\\mathcharsback \pl;
+\\mathencdef \pl;
+\\mathencread \pl;
+\\mathfonts \pl;
+\\mathversion \pl;
+\\metricfile \pl~interní, jméno metriky pøi pou¾ití {\tt\back font};
+\\metrictmpa \pl~interní, expanduje na metriku fontu {\tt\back tmpa};
+\\modifydef \pl;
+\\modifyenc \pl;
+\\modifylist \pl;
+\\modifyread \pl;
+\\newfamily \pl~pøechodné, zadané jméno rodiny;
+\\newmathfam \pl;
+\\newmodifylist \pl;
+\\newvariant \pl;
+\\nofontmessages \pl;
+\\noindexsize \pl;
+\\noPT \pl~interní, odstraní {\tt pt} z~{\tt\back the<dimen>} [TBN, str.~80];
+\\ofsaddenctolist \pl~interní, pøidá parametr do seznamu {\tt\back newmodifylist};
+\\OFSdeclarefamily \la;
+\\ofsdeclarefamily \pl;
+\\OFSextraencoding \la;
+\\OFSfamily \la;
+\\OFSfamilydefault \la;
+\\ofshexbox \pl;
+\\ofshexboxdef \pl;
+\\ofsinput \pl~interní, ète soubor pøi {\tt\back globaldefs=1}, ignoruje konce øádkù;
+\\ofslistfamilies \pl~interní, seznam rodin pro {\tt\back showfonts};
+\\ofslistfamily \pl~interní, uvozuje rodinu v {\tt\back listfamilies};
+\\ofslistvariants \pl~interní, text pro výpis variant do logu;
+\\ofslisttext \pl~interní, uvozuje text v {\tt\back listfamilies};
+\\ofsloadfont \pl~interní, zavede jeden font;
+\\ofsloadfontori \pl~interní, zavede jeden font;
+\\ofsmeaning \pl~interní, vykostí z~výstupu {\tt \back meaning} slovo
+ {\tt letter}/{\tt character};
+\\ofsmessageheader \pl~interní, hlavièka hlá¹ení do logu a na terminál;
+\\OFSnormalvariants \la;
+\\OFSprocessoptions \la;
+\\OFSputfamlist \la;
+\\ofsputfamlist \pl;
+\\ofsremovefromlist \pl~interní, odstraní rodinu ze seznamu;
+\\OFSversion \oba~interní, datum verze makra;
+\\orifosize \pl~pøechodné, podr¾í hodnotu {\tt\back fosize};
+\\origTeX \pl~interní, originální definice loga \TeX;
+\\oriloadfam \pl~pøechodné, podr¾í hodnotu {\tt loadtextfam};
+\\pickmathfont \pl;
+\\plaincatcodes \pl~interní, nastaví kategorie znakù podle plain\TeX{}u;
+\\printaccent \pl;
+\\printaccentwarn \pl;
+\\printcharacter \pl;
+\\printcharacterwarn \pl;
+\\processOFSoption \pl~interní, pro potøeby makra {\back endOFSmacro};
+\\protectreading \pl;
+\\readfamvariant \pl~interní, testuje, zda je zadána varianta rodiny;
+\\readfirsttoken \pl~interní, vrátí první token textu ukonèeného {\tt:\back end};
+\\readfosize \pl~interní, vlo¾í hodnotu {\tt\back fosize}
+ do {\tt\back dimen0};
+\\readmag \pl~interní, poèítá {\tt\back fosize}, je-li dáno
+ {\tt mag}<desetinné èíslo>;
+\\readOFSoptions \pl~interní, pro potøeby makra {\tt\back endOFSmacro};
+\\readothertokens \pl~interní, vrátí druhý a dal¹í tokeny a¾ po {\tt:\back end};
+\\readsixdigits \pl~interní, vyu¾ito pro zaokrouhlování;
+\\registeredfam \pl;
+\\registerECfont \pl;
+\\registerECTTfont \pl;
+\\registerenc \pl;
+\\registertfm \pl;
+\\restorefontid \pl~interní, obnovení jména fontu, viz {\tt\back savefontid};
+\\rm \oba;
+\\runmodifylist \pl;
+\\safelet \pl;
+\\safeletwarn \pl;
+\\safemathaccentdef \pl;
+\\safemathchardef \pl;
+\\savefontid \pl~interní, pro udr¾ení jména fontu ve výpisech Overfull;
+\\savetokenname \pl~interní, nìco jako {\tt\back string} bez backslashe;
+\\scriptfosize \pl;
+\\scriptscriptfosize \pl;
+\\separeofsvariant \pl~interní, separace nepovinného parametru
+ {\tt\back loadtextfam};
+\\setextrafont \oba;
+\\setCMmathchars \pl;
+\\setfonts \oba;
+\\setfontshook \pl;
+\\setfontsOK \pl;
+\\setfontfamily \pl~interní, {\tt\back setfonts},
+ pokud není dána varianta;
+\\setfosize \pl~interní, vypoèítá hodnotu {\tt\back fosize};
+\\setmath \pl;
+\\setPSmathchars \pl;
+\\setsimplemath \pl;
+\\setsinglefont \pl~interní, {\tt\back setfonts},
+ pokud je dána varianta;
+\\setsinglefontname \pl~interní, vykostí z názvu metriky pøípadné "at<dimen>";
+\\sgfamily \pl~interní, pro ulo¾ení informace o~rodinì;
+\\sgvariant \pl~interní, pro ulo¾ení informace o~variantì;
+\\showfonts \oba;
+\\singlefont \pl;
+\\singlefontname \pl~interní, odstraní {\tt at<dimen>} z~názvu metriky;
+\\skipfirststep \pl;
+\\slantcorrection \pl~interní, pro potøeby
+ {\tt\back accentabove} a {\tt\back accentbelow};
+\\storeofsvariant \pl~interní, separace nepovinného parametru
+ u~{\tt\back loadtextfam};
+\\switchdeftodel \pl~interní, prohodí {\tt\back accent/characterdef}
+ s~{\tt\back *del};
+\\tenbi \pl;
+\inr tenbf tenrm \pl;
+\inr tenit tenrm \pl;
+\\tenrm \pl;
+\\testOFSoptions \pl~interní, pro potøeby makra {\tt\back endOFSmacro};
+\\testtfmsize \pl~interní, pro potøeby {\tt\back registertfm};
+\\testtfmsizeat \pl~interní, pøechodná hodnota {\tt\back testtfmsize};
+\\testtfmsizescaled \pl~interní, pøechodná hodnota {\tt\back testtfmsize};
+\\textfosize \pl;
+\\tryloadenc \pl~interní, naète kódovací soubory;
+\\tmpa \oba~pøechodné;
+\\tmpb \oba~pøechodné;
+\\tmpc \pl~pøechodné;
+\\warnmissingfont \pl~interní, výpis o~chybìjící variantì;
+\\warnM \unskip, {\tt\back warnF}, {\tt\back warnT}, {\tt\back warnI}
+\pl~interní, výpis o~chybìjící standardní variantì;
+\\warnunregistered \pl~interní, výpis o~nedovoleném kódování zvolené rodiny;
+
+\endgroup
+
+\sec Reference
+
+\noindent \hangindent=2\parindent
+[TBN] Petr Ol¹ák {\it \TeX{}book naruby}, Konvoj
+1.~vyd. 1997 (ISBN 80-7302-007-6),
+2.~vyd. 2001 (ISBN 80-85615-64-9), Brno, 466 stran.
+PDF verze knihy je volnì k~dispozici na
+{\tt http://math.feld.cvut.cz/olsak/tbn.html}.
+
+
+
+\end
+
+
+
diff --git a/macros/generic/ofs/doc/papers/eurotex2003-ofs.pdf b/macros/generic/ofs/doc/papers/eurotex2003-ofs.pdf
new file mode 100644
index 0000000000..8b2c08b442
--- /dev/null
+++ b/macros/generic/ofs/doc/papers/eurotex2003-ofs.pdf
Binary files differ
diff --git a/macros/generic/ofs/doc/papers/eurotex2003-ofs.tex b/macros/generic/ofs/doc/papers/eurotex2003-ofs.tex
new file mode 100644
index 0000000000..1a6601da37
--- /dev/null
+++ b/macros/generic/ofs/doc/papers/eurotex2003-ofs.tex
@@ -0,0 +1,1089 @@
+
+\chyph % use csplain
+
+\newcount\firstpage \firstpage=1
+\newcount\numpages \numpages=14
+
+\def\addcmd #1#2{\expandafter\def\expandafter\tmpa\expandafter{#1}%
+ \def\tmpb{#1}%
+ \ifx\tmpa\tmpb % the #1 is not a macro
+ \expandafter\let\csname \string#1-original\endcsname =#1%
+ \expandafter\def\expandafter #1\expandafter{%
+ \csname\string#1-original\endcsname #2}%
+ \else % the #1 is a macro
+ \expandafter\def\expandafter #1\expandafter{#1#2}%
+ \fi}
+
+
+\input ofs [ffonts] % Charter je ve skupinì free fonts
+
+\setfonts [Charter/10pt] % výchozí rodina
+\setmath[//] % inicializace matematiky
+\fontdef\tt [CMTypewriter/mag1.1] % strojopis, korekce støední vý¹ky
+\fontdef\verbtt [CMTypewriter-rm/8] % strojopis pro display ukázky
+\fontdef\small [!/9] % zmen¹ení pro abstrakt a záhlaví
+\addcmd \small {\baselineskip11pt \rm \def\mathversion{normal}\setmath[//]}
+\fontdef\fontsekce [!/12] % pro nadpisy sekcí
+\addcmd \fontsekce {\bf \let\it=\bi \def\mathversion{bold}\setmath[//]}
+\fontdef\fonttitul [!-bf/14.4] % titul
+
+\hsize=12,2cm
+\vsize=19,3cm
+\hoffset=63pt
+\voffset=43pt
+\parindent=14pt
+
+\lineskiplimit=-10pt
+\raggedbottom
+
+\exhyphenpenalty=10000
+\widowpenalty=10000
+\clubpenalty=10000
+
+\showboxdepth=10 \showboxbreadth=50
+
+\def\starthead{\global\headline=
+ {\small \ifodd\pageno \hfil \thetitul \headspace \the\pageno
+ \else \the\pageno \headspace \theauthor \hfil \fi}}
+\headline={\hfil\starthead}
+\def\headspace{\hskip2.5em\relax}
+\def\makeheadline{\vbox to0pt{\vskip-25pt
+ \line{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip}
+\footline={\setfonts[/7]\setmath[//]\baselineskip=9pt
+ \vbox{\hbox{\copytext}\hbox{\copykonvoj}}\hfil
+ \global\footline={}}
+\def\lastpage{\advance\firstpage by\numpages \advance\firstpage by-1
+ \the\firstpage}
+
+\def\copytext{Euro\TeX{} 2003}
+\def\copykonvoj{}
+
+\newcount\subnum
+
+\def\kap #1\par{\advance\subnum by1
+ \removelastskip %\goodbreak
+ \vskip17pt plus2pt minus1pt\noindent{\fontsekce
+ \ifnum\subnum>1 \the\subnum\enspace\enspace\fi #1}%
+ \par\nobreak\vskip11pt plus2pt minus1pt
+ \everypar{\setbox0=\lastbox \everypar={}}}
+\def\reference {\subnum=-1 \kap Reference\par \small}
+\def\bib{\par\advance\subnum by1 \leftskip=\parindent
+ \noindent\llap{\the\subnum.\enspace}\ignorespaces}
+
+\let\orifootnote=\footnote
+\newcount\footnotenum
+\def\footnote#1{\global\advance\footnotenum by1
+ \orifootnote{$\setmath[//]^\the\footnotenum$}{\small
+ \hangindent=\parindent #1\par}}
+\def\footnoterule{\kern-3pt \hrule width 2cm \kern2.6pt }
+
+\def\titul #1 \par{\def\thetitul{#1}\pageno=\firstpage
+ \centerline{\fonttitul #1}\vskip20pt\relax}
+\def\autor #1 \par{\def\theauthor{#1}
+ \centerline{#1}\vskip10pt\relax}
+\def\institut #1 \par{\centerline{\small #1}}
+\def\email #1 \par{\centerline{\small Email: \tt #1}\vskip20pt\relax}
+\def\abstrakt {\bgroup \small
+ \leftskip=3em \rightskip=3em
+ \noindent{\bf Abstract:}\enspace}
+\def\endabstrakt {\par\egroup\bigskip}
+\def\url#1{{\tt#1}}
+
+\def\begitems{\medskip\bgroup\catcode`\*=13 \narrower}
+\def\enditems{\par\egroup\medskip}
+{\catcode`\*=13 \gdef*{\par\noindent\llap{$\bullet$\kern.6em }\ignorespaces}
+\gdef\numerate{% \numerate napsat tìsnì za \begitems
+ \def*{\par\advance\itemnum by1\noindent
+ \llap{\bf\the\itemnum.\kern.6em }\ignorespaces}}}
+
+
+\font\mflogo=logo10 % METAFONT logo
+\font\boldsy=cmbsy10 at12pt % Tuèné \CS, \AMS.
+\font\bboldsy=cmbsy10 scaled\magstep2 % Tuèné \CS v titulu
+
+\def\CS{$\cal C\kern-.1667em\lower.5ex\hbox{$\cal S$}\kern-.075em $}
+\def\bCS{{\boldsy C\kern-.1667em\lower.5ex\hbox{S}\kern-.04em}}
+\def\CSTeX{\CS\TeX}
+\def\CSTUG{\CS TUG}
+\def\CSfont{\CS\kern.1em font}
+\def\csplain{\CS\kern.1em plain} \let\CSplain=\csplain
+\def\mf{{\mflogo META}\-{\mflogo FONT}}
+\def\mp{{\mflogo META}\-{\mflogo POST}}
+\def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
+\def\twoe{$2_{\textstyle\varepsilon}$}
+\def\LaTeXe{\LaTeX\thinspace\twoe}
+\def\cslatex{\CS\kern.05em\LaTeX} \let\CSLaTeX=\cslatex
+\def\twoe{$2_{\textstyle\varepsilon}$}
+\def\LaTeXe{\LaTeX\thinspace\twoe}
+\def\AMS{$\cal A\kern-.166em\lower.5ex\hbox{$\cal M$}\kern-.075em S$}
+\def\bAMS{{\boldsy A\kern-.166em\lower.5ex\hbox{M}\kern-.075em S}}
+\def\ps{Post\-Script}
+\def\SLT{S\kern-0.025em\lower.5ex\hbox{L}\kern-.2emT}
+\def\DOS{\hbox{DOS}}
+
+%% Definice verbatim prostøedí %% !verb.
+\catcode`\"=13
+\def"{\hbox\bgroup\let"=\egroup\setverb\tt}
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
+\def\begtt{\medskip\bgroup
+ \nobreak\setverb \parskip=0pt %\parindent=0pt
+ \catcode`\"=12\catcode`\~=13 \obeylines
+ \baselineskip=10pt
+ \let\tt=\verbtt \startverb}
+{\catcode`\|=0 \catcode`\\=12
+ |gdef|startverb#1\endtt{%
+ |tt#1|nobreak|egroup|penalty0|medskip|scannexttoken}}
+{\obeyspaces\gdef {\ }}
+\long\def\scannexttoken#1{\ifx#1\par\else\noindent#1\fi}
+
+\def\citeref #1 #2 {\expandafter\def\csname cit:#1\endcsname{#2}}
+\citeref wwwstorm 1
+\citeref pismolijna 2
+\citeref stormtex 3
+\citeref slido 4
+\citeref ofsftp 5
+\citeref ofsdoc 6
+\citeref stormcl 7
+\citeref berry 8
+\def\cite#1{\expandafter\ifx \csname cit:#1\endcsname\relax
+ \message{Warning: cite{#1} is not defined}[??]%
+ \else [\csname cit:#1\endcsname]\fi}
+
+%-------------------------------------------------------------------------
+
+This version of the paper is only draft! It waits to Petr Sojka's corrections.
+\bigskip
+
+\titul The font management with the OFS
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\autor Petr Ol\v s\'ak, Petr Sojka
+
+\institut Faculty of Electro Engineering CVUT, Prague,
+ Faculty of Informatics MU, Brno
+
+\email petr@olsak.net, sojka@fi.muni.cz
+
+\abstrakt
+
+The widely used New Font Selection System (NFSS) has its pros and cons.
+To have uniform platform for large font set management and selection for
+both plain and \LaTeX\ users, and to extend the possibilities
+of the NFSS, an Ol\v{s}\'ak's Font System (OFS) has been designed
+and implemented.
+
+The user interface of this macro is the same for plain and
+\LaTeX, with two independent implementations. First implementation
+is based on plain.tex macros only; the second one for \LaTeX\ users
+is implemented as an additional layer over NFSS macros, and is
+slightly less elaborate (support for math font families is missing).
+
+The main features of the system:
+
+\begitems
+* The OFS defines declarative language to define the mapping from
+ the original full names of fonts to the tfm names (in plain) or
+ to NFSS short names of the font families (in \LaTeX).
+ The user do not need to remember the short names of tfm files
+ and/or the short names of NFSS font families. This allows for
+ user-defined logical font markup: one can use the real font
+ (foundry) names from font (catalog).
+* The user of the OFS can use a font separated into two \TeX{} metrics
+ (basic and extended tfm). The font is from the user perspective seen
+ as one font only. The mapping works even for fonts with more than 256
+ characters (if one does not want to kern between all characters).
+* One can choose the \TeX{} internal encoding of fonts for your
+ language at the beginning of your document. This feature is commonly
+ used for Czech and Slovak languages: there are \TeX{} fonts which
+ encode the alphabets of these languages by Cork (T1 encoding) or by
+ ISO-8859-2 (IL2 encoding), or even others.
+* There are at least four independent parameters of fonts
+ (family, size, encoding, variant). Possibility to switch one
+ font parameter independently on the others is important under
+ plain.tex where NFSS is not implemented.
+* The OFS for plain includes the support of the math fonts manipulation
+ when the PostScript fonts and/or fonts at the different sizes are used.
+* One can use the "\fontusage" command which lists the short usage
+ about OFS macros on the screen and to the log file.
+* The "\showfonts" macro lists all available font families
+ on the screen and to the log file.
+* One can print the short catalogue of the all installed fonts by
+ using "\input ofscatal.tex".
+\enditems
+
+The macro is available at ftp://math.feld.cvut.cz/pub/olsak/ofs .
+The declaration and support OFS files for all of the fonts offered
+by the Storm Type Foundry (www.stormtype.com), and e.g. MathTimes
+fonts have been created. The macro is in use by CSTUG users since 2001.
+The English documentation (in addition to the current
+Czech one) will be released in January 2003.
+
+The full paper will discuss in detail the features of OFS listed
+above, will give examples of usage and pros and cons over current
+macro packages for font switching and handling in \TeX{}.
+
+\endabstrakt
+
+
+\kap Historical notes, plain\TeX{} and \LaTeX{} version of OFS
+
+In 2000, Petr Ol\v s\'ak got whole set of fonts from Storm Type Foundry
+(made by Franti\v sek \v Storm) in order to make the \TeX{} support for
+these fonts. The number of fonts was very large (many hundreds) and the
+names used in Typo-catalog was a bit different from pfb file names and
+they was {\it very} different from new tfm names used in \TeX{} support
+because these names follow the Karl Berry's recommendation~\cite{berry}.
+
+There was a presumption that the user will want to choose individual
+fonts and to make his/her own font collections for document
+design. The simple solution like "\usepackage{times}" is not possible
+because the user have to choose the sans serif variants, serif
+variants etc. from a big offer by Storm Type Foundry. There are big
+number of such combinations---we are not able to support a style file
+for each such combination. Moreover, there are a great font collection
+for titles and posters in \v Storm's package. The conclusion is: the user
+needs to manage with individual fonts with the same names as in
+Typo-catalog provided by Storm Type Foundry. The usage of tfm names or
+short names for font families provided by NFSS are not acceptable at
+user level. The support for managing of large sets of fonts
+implemented at macro level is needed. This was an inspiration of OFS.
+
+The OFS was written by Petr Ol\v s\'ak primary for plain\TeX{} because he
+is a plain\TeX{} user. He never used \LaTeX{} nor NFSS. Thus the
+first version of OFS was usable only in plain\TeX{} environment
+without NFSS. This version substitutes some features solved in NFSS
+already: an independency of encoding/size/family/variant font
+setting at user level, declaration of encoding-de\-pendent commands,
+more comfortable declaration of math fonts (but plain\TeX{} approach of
+math fonts declarations is kept because this is more understandable for
+plain\TeX{} users than NFSS approach).
+
+The \LaTeX{} users asked the similar environment as OFS for
+plain\TeX{} after OFS for plain was released. This was a reason why
+Petr Ol\v s\'ak made the same user environment of OFS for \LaTeX{} (but
+never used it:-).
+This work was done by totally different macro code because the NFSS
+features was used in this situation. The OFS for \LaTeX{} is only the
+new macro level over NFSS. Roughly speaking, the OFS for
+\LaTeX{} implements only the dictionary from long names of fonts used
+in Font-catalog to the short family names used in NFSS and defines
+the same ``user level environment'' as in OFS for plain\TeX{}.
+
+Because the OFS for plain\TeX{} is more powerful and includes more
+interesting subjects in its implementation, we will describe only the
+plain\TeX{} version of OFS in this paper.
+
+The OFS macro is released with \TeX{}-like license. It means, that the
+names of the files and its content cannot be changed if this macro is
+re-distributed. Only Petr Ol\v s\'ak can do changes.
+There are no more restrictions for distributors and there are no
+restrictions for users.
+
+The macro is released in~\cite{ftpofs} and the same version
+is included in \TeX{} support of fonts from Storm Type
+Foundry~\cite{stormtex}. The \TeX{} font metrics and fd files
+are included in this support. The real fonts (implemented in pfb files)
+are not free. If you take up your interest
+in these fonts you have to buy them. See~\cite{wwwstorm} for more details.
+One family called Lido is offered as free for non-commercial use
+by Storm Type Foundry. There is the special \TeX{} support only for
+this family~\cite{slido} including the OFS.
+
+The first release of OFS macro (September 2000) had only Czech
+documentation. The English version of the documentation was released
+in February 2003 with help of Mat\v ej Cepl. The concept of OFS was not
+changed since its first release and Petr Ol\v s\'ak does not plan any changes
+to the future. He is ready only to remove bugs, if any occur.
+
+The documentation can be found at the same place as the OFS macro.
+It is a bit more technical than this paper.
+
+
+\kap Basics of user environment
+%------------------------------
+
+The user environment is the same in both: OFS for plain\TeX{} and
+\LaTeX{}. Of course, you have to include the OFS macro in plain\TeX{}
+by little bit different way:
+
+\begtt
+\input ofs [fonts, collections]
+\endtt
+%
+than in \LaTeX{}:
+
+\begtt
+\usepackage [fonts, collections] {ofs}
+\endtt
+%
+All other user-level commands have the same syntax and meaning.
+
+You can use the command "\fontusage". This command prints to the
+terminal and to the log file the basic usage of OFS:
+
+\begtt
+$ tex ofs \\fontusage
+This is TeX, Version 3.14159 (Web2C 7.3beta5)
+(/usr/local/share/texmf/tex/csplain/ofs.tex
+OFS (Olsak's Font System) based on plain initialized. <Oct. 2002>
+(/usr/local/share/texmf/tex/csplain/ofsdef.tex))
+\fontusage: ============== Olsak's Font System, usage: =================
+\input ofs [sjannon, sdynamo, a35] ... for example
+\showfonts ... shows all loaded font families (by previous \input)
+\setfonts [Family/] ... local switch to the new family, after this, the
+ \rm, \bf, \it, bi will switch to the variants. The current size is used.
+\setfonts [/size] ... local switch to the new size of fonts, the family is
+ not changed. The "size" has the following possible formats:
+ at<dimen> ... the same as \font\something=file at<dimen>
+ <dimen> ... the same as at<dimen>
+ <number> ... the same as at<number>pt
+ scaled<number> ... the same as \font\something=file scaled<number>
+ mag<decimal-number> fonts will be magnified by given coefficient
+ depend on current size of the fonts.
+\setfonts [Family/size] ... switch to the new family at given size
+\setfonts [Family-vr/] ... switch to the specified font, the current size
+ is used. The "vr" is acronym for variant (bf for example).
+\setfonts [Family-vr/size] ... switch to the specified font.
+\fontdef\name [Family/size] ... same as \gdef\name{\setfonts[Family/size]}
+ The "Family" or "size" parameter may be empty.
+\fontdef\name [Family-vr/size] ... \name is fixed-font switch iff:
+ "size" is no empty and no mag<dec-number>.
+ Fixed-font switch "\name" is implemented as \global\font\name=file.
+\setmath [size/size/size] ... set math it/rm as current it/rm + use PS Symbol
+\nofontmessages, \logfontmessages, \displayfontmessages, \detailfontmessages
+ ... the levels of log.
+*
+\endtt
+
+The "\showfonts" prints the used font collections. You can include the
+OFS macro without additional font collections in square brackets (it means
+use only "\input ofs"). The basic font collection is initialised in
+such situation:
+
+\begtt
+*\showfonts
+OFS (l.0): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+\endtt
+%
+The family names are printed in square brackets here and followed by varinat
+switches usable for such font family.
+
+The basic fonts from Computer Moder family (by Donald Knuth) are
+collected into three families here: "CMRoman", "CMSans" and
+"CMTypewriter". This is sel explanatory. Note that the common
+varinat "BoldItalic" ("\bi") is missing in "CMSans" and
+"CMTypewriter". On the other hand the
+``special'' variant "\sl" (slanted) is available in
+"CMRoman" and "CMTypewriter" families.
+
+The declaration of another families are stored in ``declaration
+files'' (the extension "tex" is used in OFS for plain\TeX{} and "sty"
+in OFS for \LaTeX{}. It is recommended to manage the file
+"allfonts.tex" in all \TeX{} distribution. This file includes the
+"\input"s to the declaration files of all fonts installed in such
+distribution. The "allfonts.tex" file may look like:
+
+\begtt
+$ cat `kpsewhich allfonts.tex`
+%%% All OFS families declared on this TeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Petr Olsak
+\input a35 % PostScript 35
+\input ffonts % Another free fonts
+\input btfonts % Bitstream fonts
+\input skatalog % Stromtype foundry, 89 families
+\endtt
+%
+When we write "$ tex allfonts \\showfonts \\end | less", we get the
+listing of all font families available on \TeX{} distribution. This
+listing includes cca three hundred font families on the computer of
+one of the author of this article. He need not remember the tfm file
+names of thousands of fonts. The part of the listing follows:
+
+\begtt
+OFS (l.0): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+a35.tex:
+ [AvantGarde/] \rm, \bf, \it, \bi
+ [Bookman/] \rm, \bf, \it, \bi
+ [NewCentury/] \rm, \bf, \it, \bi
+ [Palatino/] \rm, \bf, \it, \bi
+ [ZapfChancery/] \rm, - , \it, -
+ [ZapfDingbats/] \rm, - , - , -
+ [Symbol/] \rm, - , \it, -
+ffonts.tex:
+ [Charter/] \rm, \bf, \it, \bi
+...
+sjannon.tex:
+ [JannonAntikva/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonText/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonCaps/] \rm, \bf, \it, \bi
+...
+sdynamo.tex:
+...
+ [DynaGroteskLE/] \rm, \bf, \it, \bi
+ [DynaGroteskD/] \rm, \bf, \it, \bi
+ [DynaGroteskR/] \rm, \bf, \it, \bi
+...
+stitul.tex:
+ [Alcoholica/] \rm, \bf, \it, -
+ [Monarchia/] \rm, \bf, - , -
+ [MonarchiaText/] \rm, \bf, - , -
+ [Clichee/] \rm, \bf, \it, \bi
+ [Regula/] \rm, - , \it, -
+ [Splendid/] \rm, \bf, \it, - , \script, \sans
+ [Cobra/] \rm, \bf, - , -
+ [ExcelScript/] \rm, - , - , - , \ext
+ [ExcelScriptText/] \rm, - , - , - , \ext
+ [Zeppelin/] \rm, \bf, - , - , \lr, \coll
+ [Negro/] \rm, - , - , -
+ [Farao/] \rm, \bf, - , - , \kr, \coll
+...
+slido.tex:
+ [Lido/] \rm, \bf, \it, \bi, \crm, \cbf
+\endtt
+
+If you need recall what the special variant switches means
+("\mr" and "\mi" in JannonText family, for instance), you can try
+to switch to this family and look to the log file
+(or to the terminal if "\displayfontmessages" is set):
+
+\begtt
+*\displayfontmessages \setfonts [JannonText/]
+OFS (l.0): Font family JannonText at10pt (enc=8z) activated:
+OFS (l.0): \rm () \bf (Bold) \it (Italic) \bi (BoldItalic)
+OFS (l.0): \mr (Medium) \mi (MediumItalic)
+*
+\endtt
+
+Aha, "\mr" means MediumItalic variant of JannonText family.
+The "\it" means sometimes "Italic" variant and sometimes "Oblique"
+variant. You can try:
+
+\begtt
+*\setfonts[Helvetica/]
+OFS (l.0): Font family Helvetica at10pt (enc=8z) activated:
+OFS (l.0): \rm () \bf (Bold) \it (Oblique) \bi (BoldOblique)
+OFS (l.0): \nrm (Narrow) \nbf (NarrowBold) \nit (NarrowItalic)
+ \nbi (NarrowBoldItalic)
+*
+\endtt
+
+The declaration file name is mentioned in the listing of all families
+(see above). For example the file "a35.tex" declares the font families
+from standard PostScript ``35 fonts collection'' from Adobe (no all
+ten families are declared here because three families of them are
+declared in basic OFS font collection).
+
+You can write "\input a35" instead of "\input ofs [a35]". The second
+alternative is recommended if more font collections are used together,
+for example: "\input ofs [a35, sdynamo, slido]". You can use
+
+\begtt
+\input ofs [allfonts]
+\endtt
+%
+(or simply "\input allfonts") in your document
+if all font collections are needed or if you need not use the
+names of individual font collections.
+
+OFS provides the printing of simple font catalog. For example, you can
+write on your command line:
+
+\begtt
+$ pdfcsplain ofscatal [sjannon, sdynamo, stitul] ; acroread ofscatal.pdf
+\endtt
+
+
+\kap The setfonts command
+
+You can select the font family and/or font size by "\setfonts"
+command. Two parameters are separated by slash in square brackets.
+The first parameter is the font family name and the second one is the
+font size. If one of the parameters is missing then this aspect stay
+unchanged. After the font family is selected, you can use the variant
+switches. Most common switches are "\rm", "\bf", "\it", "\bi", but
+another switches can be available for some font family. See the
+listing produced by "\showfonts" for more detail.
+
+The "\setfonts" command keeps the variant from previous family
+unchanged after setting of the new family if the current variant is
+available in new font family. If not then the "\rm" variant is
+initialized. All families have to support at least the "\rm" variant.
+
+Examples:
+
+\begtt
+\setfonts [JannonText/10.5] % the normal font
+\setfonts [/14]\bf % used for titles
+\setfonts [/8]\rm % for footnotes
+\setfonts [DynagroteskR/]\it % for citations
+\setfonts [CMTypewriter/] % monospaced font
+ % if you use \setfonts [CMTypewriter/] when
+ % it is active then Typewriter italics is used.
+\endtt
+
+The main advantage is that you can use the same names of font families
+as in Typo-catalog and you need not remember the cryptical names of tfm
+files or abbreviations of family names in NFSS.
+
+If the family name is not present in the internal OFS dictionary
+(perhaps misspelling) then "\setfonts" command prints warning plus
+all available families to log and to the terminal (the same as the
+"\showfonts" command).
+
+The font size can be specified as decimal number without unit
+(the unit "pt" is appended automatically) or you can type number with
+arbitrary \TeX{} unit ("mm" for example). Moreover you can use the
+keyword "scaled" before number with the same meaning as in "\font"
+primitive. OFS introduces the new keyword "mag" followed by decimal
+number (decimal point is required). This number denotes the fraction
+for the current font size. For example:
+
+\begtt
+\def\smaller{\setfonts [/mag0.8]}
+This text is {\smaller typeset by small \smaller and more small
+\smaller and more more small characters} and the normal size is used
+here.
+\endtt
+%
+yields to:
+
+\medskip
+\def\smaller{\setfonts [/mag0.8]}
+This text is {\smaller typeset by small \smaller and more small
+\smaller and more more small characters} and the normal size is used
+here.
+\medskip
+
+We can use this feature in \LaTeX{} logo, for example:
+
+\begtt
+\def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
+\endtt
+
+This solution works in titles (the raised A is bod in this situation),
+in normal text, footnotes, italics etc and in all font families.
+This feature is not implemented in NFSS thus the \LaTeX{} logo has its
+A implemented as superscript math font in \LaTeX{} kernel. I mean that
+this is not a best idea.
+
+The another usage of mag keyword is to make a corrections of not
+perfectly the same visual ex height of used font. This problem arises
+if you combine the CMTypewriter family with some common PostScript
+font families for instance. The CMTypewriter font seems to be smaller
+if you use exactly the same design size. This is no problem:
+you can define "\tt" as "\setfonts [CMTypewriter/mag1.1]" and the ex
+height is balanced. This definition works in all sizes and font
+variants.
+
+The NFSS keeps another aspect of fonts: the font weight. The main reason of
+this feature is to boldify all text (in titles, for example) including
+its italics part. I decided that this feature is not needed in OFS
+because plain user can define titles in the following way:
+
+\begtt
+\def\chapterfont {\setfonts[/14]\bf \let\it=\bi}
+\endtt
+%
+Moreover you can simply define the macros which keeps more than five
+aspects (NFSS keeps exactly five aspects). You can find the examples
+in \TeX{} support of \v Storm's font where the big Dynagrotesk family implements
+the special font selector which keeps the level of ``condensation of
+the font'' in addition to the weight, variant (normal/italics), size
+and encoding.
+
+You can declare you own font-switches in OFS by "\fontdef" command.
+The code "\fontdef\fontswitch [Family/size]" declares the
+"\fontswitch" similar as "\gdef\fontswitch{\setfonts[Family/size]}".
+Example:
+
+\begtt
+\input ofs [ffonts] % font Charter is in free fonts
+\setfonts [Charter/10pt] % default family
+\fontdef\tt [CMTypewriter/mag1.1] % monospaced font
+\fontdef\verbtt [CMTypewriter/8] % monospaced font in verbatim
+\fontdef\headfont [Charter/9] % the font+size for headers
+\endtt
+
+It would be more convenient to write the word ``Charter'' only once
+(this word seems to be redundant in declaration of "\headfont"). But the
+macro code "\fontdef \headfont [/9]" cannot work everywhere because the
+"\headfont" can be used for headers in output routine and this header have
+to be in Charter every time, no in CMTypewriter, if CMTypewriter family
+is the current when output routine is called out.
+
+You can solve this problem by using the ``"!"''
+character for the family parameter in "\fontdef". This character is
+substituted by the current family in the time of "\fontdef" declaration:
+
+\begtt
+\fontdef\headfont [!/9] \addcmd\small {\rm} % the font for headers
+\endtt
+%
+Moreover the "\addcmd" is used here. This command adds the additional
+code to the macro "\headfont" thus, the example above has the same effect
+as:
+
+\begtt
+\gdef\headfont {\setfonts[Charter/9]\rm} % the font for headers
+\endtt
+%
+but the word Charter is not used here. Now, you can change the default
+family only on one place and the new default family will be used in
+headers too.
+
+The whole font declaration for your plain\TeX{} document can be
+localized in one place in your macro code and it can be look
+like the following code:
+
+\begtt
+\input ofs [ffonts] % font Charter is in free fonts
+\setfonts [Charter/10pt] % default family
+\fontdef \tt [CMTypewriter/mag1.1] % monospaced font
+\fontdef \verbtt [CMTypewriter-rm/8] % monospaced font in verbatim
+\fontdef \headfont [!/9] \addcmd \headfont {\rm}
+\fontdef \abstractfont [!/9] \addcmd \abstractfont {\baselineskip11pt\rm}
+\fontdef \sectionfont [!/12] \addcmd \sectionfont {\bf \let\it=\bi}
+\fontdef \titlefont [!-bf/14.4] % for the title of the document
+\endtt
+
+If the ``"-vs"'' (where "\vs" is the variant switch) is used in
+parameter of "\fontdef" or "\setfonts" then the whole family is not
+initialized but only the single font is used as the current font.
+The "\fontdef\name" is the equivalent of "\global\font\name" in such
+situation. This convention is used in the example above for title font
+because no variant switches is used in text of
+title.
+
+
+\kap Font encoding
+%-----------------
+
+OFS for plain\TeX{}%
+ \footnote{OFS for \LaTeX{} does not solve font encoding,
+ use NFSS tools for font encoding manipulation}
+initializes the CSfont encoding by default.
+This does no matter for English users because CSfonts have absolutely
+the same encoding(s) as Computer Modern in slots 0 to 127.
+The users of T1 encoded fonts have to set the default font encoding by
+the code: "\def\fotenc{8t}" before OFS is loaded. The macro "\fotenc"
+includes a part of used metric file names. If this macro is not
+defined then OFS define it as "8z"---it means CSfont encoding.
+
+If "\fotenc" has the value "8z" then the families "CMRoman",
+"CMTypewriter" and "CMSans" will work with CSfonts and the font
+metrics with "8z" encoding is used for another font families. If
+"\fotenc" is set to "8t" then DC fonts are used in "CMRoman",
+"CMTypewriter" and "CMSans" families. The EC fonts can be used instead
+DC fonts, but you have to write the declaration file for OFS and for
+EC fonts. This file does not exist now, sorry.
+
+Theoretically, you can switch between encoding inside the
+document but this is not common used practice:
+
+\begtt
+\input ofs
+\setfonts [Times/] text 1 % used metric: ptmr8z, CSfont encoding
+\def\fotenc{8t}
+\setfonts [/] text 2 % used metric: ptmr8t, T1 encoding
+\endtt
+%
+If you are using another font encoding with metric names "*8x" (for
+example) then you can do "\def\fotenc{8x}". No problem.
+
+You can find the files "ofs-8z.tex" and "ofs-8t.tex" in OFS
+package. The accents declaration and another encoding-dependent macros
+are included here. By default, no of these files is read, it means
+that the accent macros keep its original meaning from plain\TeX{}.
+You can use "\input" of one of these files or "\input" both files
+(there are no conflicts in these files). Assume that both files are
+read. Then accent macros (such as "\v", "\'" etc.) followed by
+a character expands to the new character code of CSfonts
+(if "\fotenc" is "8z") or to the new code of T1 encoding
+(if "\fotenc" is "8t"). Another encoding dependent macros (such as
+"\promile") work in the chosen encoding by "\fotenc".
+
+We can look into the parts of "ofs-8z.tex" and "ofs-8t.tex" files:
+
+\begtt
+%%% Default accents in CM
+\accentdef \` * 8z {\accent 18 } % grave
+\accentdef \' * 8z {\accent 19 } % acute
+\accentdef \v * 8z {\accent 20 } % caron
+\accentdef \u * 8z {\accent 21 } % breve
+...
+%%% Standard characters in plain (redefined here)
+\def\aa{\r a}
+\def\AA{\r A}
+\characterdef \i 8z 16
+\characterdef \j 8z 17
+\characterdef \SS 8z {SS}
+\characterdef \AE 8z 29
+...
+%%% Extra characters from CS fonts
+\characterdef \promile 8z 141
+\characterdef \varhyphen 8z 156
+\characterdef \flqq 8z 158
+\characterdef \frqq 8z 159
+\characterdef \clqq 8z 254
+\characterdef \crqq 8z 255
+...
+%%% Accented letters from CS fonts
+\accentdef \` A 8z 152
+\accentdef \' A 8z 193
+\accentdef \" A 8z 196
+\accentdef \` a 8z 184
+\accentdef \' a 8z 225
+...
+%%% Default accents in Cork
+\accentdef \` * 8t {\accent 0 }
+\accentdef \' * 8t {\accent 1 }
+\accentdef \^ * 8t {\accent 2 }
+\accentdef \~ * 8t {\accent 3 }
+\accentdef \" * 8t {\accent 4 }
+...
+%%% Standard characters in plain (redefined here)
+\def\aa{\r a}
+\def\AA{\r A}
+\characterdef \i 8t 25
+\characterdef \j 8t 26
+\characterdef \SS 8t 223
+\characterdef \AE 8t 198
+...
+\characterdef \promile 8t {\%\char 24 }
+\characterdef \textpertenthousand 8t {\%\char 24\char 24 }
+...
+%%% Accented letters from T1 encoding
+\accentdef \. i 8t `\i
+\accentdef \u A 8t 128
+\accentdef \k A 8t 129
+\accentdef \' C 8t 130
+\accentdef \v C 8t 131
+...
+\endtt
+
+This example is self explanatory and illustrates the language for
+accents and encoding-dependent macro declarations. You can find more
+information in documentation~\cite{ofsdoc}.
+
+The \LaTeX{} user can be familiar with the commands with similar
+meaning: "\DeclareTextSymbol", "\DeclareTextComposite", etc.
+
+OFS calculates with the possibility of existence of a special metric
+with extra characters (such us "\euro"). Each basic metric can be
+connected with such ``extra metric'' to the couple. These couples are
+used in \TeX{} support of Storm Type Foundry because these fonts have
+more than 256 characters. There is prepared an extra metric "*6s"
+for each basic metric "*8z" or "*8t" in \TeX{} support of \v Storm's
+fonts. The "*6s"-encoding specific macros are declared in
+"stormenc.tex" by "\accentdef" and "\characterdef" commands. If the
+current metric has declared an extra metric and user calls the
+macro declared by "\characterdef" or "\accentdef" and this macro is
+not declared for current encoding but only for the encoding of the
+extra metric then the extra metric is temporary used without any user
+intervene. Example:
+
+\begtt
+\characterdef \euro 6s 136
+Now the \euro{} works in all fonts with extra metric *6s
+\endtt
+
+
+
+\kap Declaration files
+%---------------------
+
+Look into "a35.tex" now for an example of language of
+the declaration files:
+
+\begtt
+%%% Times, Helvetica, Courier is in OFS defaults
+
+\ofsdeclarefamily [AvantGarde] {% -------------------- AvantGarde
+ \loadtextfam (Book) pagk\fotenc;% \rm
+ (Demi) pagd\fotenc;% \bf
+ (BookOblique) pagko\fotenc;% \it
+ (DemiOblique) pagdo\fotenc;;% \bi
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\ofsdeclarefamily [NewCentury] {% -------------------- NewCenturySchlbk
+ \loadtextfam (Roman) pncr\fotenc;% \rm
+ pncb\fotenc;% \bf
+ pncri\fotenc;% \it
+ pncbi\fotenc;;% \bi
+ \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}%
+}
+...
+\endtt
+%
+The mapping between font family names and metric files is defined
+here.%
+\footnote{OFS for \LaTeX{} uses other declaration files:
+ the mapping between family names and NFSS short names
+ are defined here.
+}
+Each family declares four metrics for four common variants "\rm",
+"\bf", "\it" and "\bi". Empty parameter means that the variant
+is missing. The metric names are saved by "\fotenc" macro in order
+to possibility of changing the used encoding. The extra metric can be
+written before the last semicolon (not used in this example).
+The commands from parameter of the "\ofsdeclarefamily" are processed
+when "\setfonts" is used. You can see the alternative definition of
+\TeX{} logo for each family in "a35.tex" file on order to optimize the
+visual aspect of this logo.
+
+The optional parameters of "\loadtextfam" macro is written in brackets
+and these parameters declares mapping of short variant switches and
+the full variant names printed to the log and terminal. For example,
+BookOblique is a "\it" variant in AvantGarde font family. If the
+common name is used (Bold/Italics/BoldItalics) then this parameter can
+be missing (see NewCentury family, for instance).
+
+How the special variants are declared? Look into the file
+"sjannon.tex", for example:
+
+\begtt
+\ofsdeclarefamily [JannonAntikva] {% -------- Jannon Antikva
+ \loadtextfam sjnr\fotenc;%
+ sjnb\fotenc;%
+ sjnri\fotenc;%
+ sjnbi\fotenc;6s;%
+ \newvariant2 \mr (Medium) sjnm\fotenc;6s;%
+ \newvariant3 \mi (MediumItalic) sjnmi\fotenc;6s;%
+}
+\ofsdeclarefamily [JannonText] {% ------------ Jannon Text
+ \loadtextfam sjnrg\fotenc;%
+ sjnbg\fotenc;%
+ sjnrig\fotenc;%
+ sjnbig\fotenc;6s;%
+ \newvariant2 \mr (Medium) sjnmg\fotenc;6s;%
+ \newvariant3 \mi (MediumItalic) sjnmig\fotenc;6s;%
+}
+...
+\endtt
+%
+Note that there is declared the extra metric with~"6s" encoding here.
+See the documentation~\cite{ofsdoc} for more information.
+
+How the "CMRoman" etc. families are declared? These families have two
+special subjects. First: the metrics file names do not include the "8z" or
+"8t" acronym for encoding. Second: the different metrics are used
+for different font sizes. Both problems are solved by the OFS command
+"\registertfm" (see the "ofsdef.tex" file):
+
+\begtt
+\registertfm cmr8z - csr10 % metric for all sizes
+\registertfm cmr8z 0pt-6pt csr5
+\registertfm cmr8z 6pt-7pt csr6
+\registertfm cmr8z 7pt-8pt csr7
+\registertfm cmr8z 8pt-9pt csr8
+\registertfm cmr8z 9pt-10pt csr9
+\registertfm cmr8z 10pt-12pt csr10
+\registertfm cmr8z 12pt-17pt csr12
+\registertfm cmr8z 17pt-* csr17
+...
+\registertfm cmr8t - dcr10 % metris for all sizes
+...
+\ofsdeclarefamily [CMRoman] {% ------------ Computer Modern Roman
+ \loadtextfam cmr\fotenc;%
+ cmbx\fotenc;%
+ cmti\fotenc;%
+ cmbxti\fotenc;;%
+ \newvariant8 \sl (Slanted) cmsl\fotenc;;%
+}
+\endtt
+
+
+\kap Math fonts
+%--------------
+
+The math fonts are collected in math families (three fonts
+per one family)
+by "\textfont", "\scriptfont" and "\scriptscriptfont" primitives. The
+math families with number 0, 1, 2, 3 have special meaning in math
+typesetting. The declaration of new math family by \TeX{} primitives
+is not too comfortable. Plain\TeX{} user can declare the new math
+family by OFS macro "\loadmathfam". This command will be described
+below.
+
+Plain\TeX{} user have to initialize the math fonts in OFS by
+"\setmath" command. The math fonts are in the same state as declared
+in plain\TeX{} macro until the "\setmath" command is used. It means
+that the Computer Modern at 10/7/5 pt size are used.
+The "\setmath" command have three parameters in square brackets
+separated by slashes. These parameters means the
+text/script/scriptscript size of the math fonts. The empty parameter
+means that the mag1.0/mag.7/mag.5 (relatively to the current size of
+textual font) is substituted:
+
+\begtt
+\setmath [//] is the same as \setmath [mag1.0/mag.7/mag.5]
+\endtt
+
+The "\setmath" command calculates the needed sizes from given
+parameters and starts the "\mathfonts" macro followed by macro
+"\mathchars". The plain\TeX{} user can define these macros in
+his own opinion but OFS gives the reasonable default values of these
+macros. These macros run the variant part of the code depend on the
+values of the "\fomenc" and "\mathversion" macros.
+
+If "\def\fomenc{PS}" is used (it is default value in OFS) then "\setmath"
+initializes math fonts by the following way: math italic is loaded
+from text italics of the current text font family, family~0 is loaded
+from "\rm" variant of the current family. The math symbols are loaded
+(if it is possible) from common PostScript font Symbol. The rest
+(what is not included in Symbol font) is realized from Computer Modern
+fonts. The math encoding is redefined (by "\mathchardef" etc. primitives)
+for many symbols in order we keep the accessibility of all math
+characters declared in plain\TeX{}. For example the lower letter greek
+characters are loaded from the slanted variant of PostScript Symbol font.
+
+If you use "\def\fomenc{CM}" then "\setmath" loads the math fonts from
+Computer Modern family and does not change the math encoding.
+In this case, the "\setmath[//]" command only sets the actual sizes of these fonts
+depend on current text font size.
+
+If you buy the MathTimes family, you can "\input" the "ofsmtdef.tex"
+file (this is a part of OFS package) and you can use "\def\fomenc{MT}".
+Then the "\setmath" command loads the math italics from current "\it"
+font and family~0 from current "\rm" font. Moreover, it loads the
+MathTimes fonts for all math symbols. Unlike "\def\fotens{PS}" mode
+there is no ``rest'': no symbols needs to be realized from Computer
+Modern family.
+
+You can control the math families collection loaded by "\setmath" by
+the value of "\mathversion" macro. OFS declares two
+math families collections: "\def\mathversion{normal}"
+and "bold". You can declare more collections if you need it.
+The "bold" collection is the same as "normal", but bold variants of
+italics, family~0 and math symbols (if accessible) are loaded.
+
+The example from "ofsdef.tex" file illustrates the language of
+declarations of the math fonts:
+
+\begtt
+\def\defaultmathfonts{\csname load\fomenc\mathversion math\endcsname}
+\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}
+\def\mathfonts{\defaultmathfonts}
+\def\mathchars{\defaultmathchars
+ \let\mathchars=\relax % to protect the twice math-setting
+}
+\def\loadPSnormalmath{%
+ \loadmathfam 0[tenrm/]% Actual Roman font
+ \loadmathfam 1[tenit/]% Actual Italic font
+ \loadmathfam 2[/cmsy]% Standard symbols from CM
+ \noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+ \chardef\itfam=1 \chardef\bifam=5
+ \loadmathfam \bffam [tenbf/]% Actual Bold font
+ \loadmathfam \bifam [tenbi/]% Actual Bold Italic
+ \newmathfam\symbfam
+ \loadmathfam \symbfam [/psyr]% PostScript Symbol
+ \newmathfam\symbofam
+ \loadmathfam \symbofam [/psyro]% PostScript Symbol Oblique
+}
+\def\loadPSboldmath{%
+ \loadmathfam 0[tenbf/]% Actual Bold font
+ \loadmathfam 1[tenbi/]% Actual Bold-Italic font
+...
+}
+\def\loadCMnormalmath{%
+ \loadmathfam 0[/cmr8z]% Roman font
+ \loadmathfam 1[/cmmi]% Math Italic font
+ \loadmathfam 2[/cmsy]% Standard symbols from CM
+ \noindexsize\loadmathfam 3[/cmex10]% Standard extra symbols from CM
+...
+}
+\def\loadCMboldmath{%
+ \loadmathfam 0[/cmbx8z]% Roman font
+ \loadmathfam 1[/cmmib10]% Math Italic font
+...
+}
+\def\setPSmathchars{%
+ \fontmessage{\ofsmessageheader Math codes are set for PS encoding}%
+ \mathcode`\,="602C
+ \mathcode`\.="002E
+ \delcode`\<="\hex\symbfam E130A
+ \delcode`\>="\hex\symbfam F130B
+ \delcode`\|="\hex\symbfam 7C30C
+ \edef\langle{\delimiter"4\hex\symbfam E130A }%
+ \edef\rangle{\delimiter"5\hex\symbfam F130B }%
+ \mathchardef\alpha "0\hex\symbofam 61
+ \mathchardef\beta "0\hex\symbofam 62
+ \mathchardef\gamma "0\hex\symbofam 67
+...
+}
+\endtt
+
+If you need to add next math families (math alphabets in NFSS
+terminology) then you can use the cod similar as the following:
+
+\begtt
+\def\mathfonts{\defaultmathfonts
+ \newmathfam\bbfam
+ \loadmathfam \bbfam [/bbold12]% Dvojitá vertikální kresba
+ \def\bb{\fam\bbfam}%
+}
+\def\mathchars{\defaultmathchars
+ \mathchardef\balpha "0\hex\bbfam 0B
+ \mathchardef\bbeta "0\hex\bbfam 0C
+ ...
+}
+\endtt
+
+We re-write the example from section~3 in order to support the math
+typesetting:
+
+\begtt
+\input ofs [ffonts] % font Charter is in free fonts
+\setfonts [Charter/10pt] % default family
+\setmath[//] % math initialisation
+\fontdef\tt [CMTypewriter/mag1.1] % monospaced font
+\fontdef\verbtt [CMTypewriter-rm/8] % monospaced font in verbatim
+\fontdef\headfont [!/9] % running heads
+\addcmd \headfont {\baselineskip11pt\rm\def\mathversion{normal}\setmath[//]}
+\fontdef\sectionfont [!/12] % section font
+\addcmd \sectionfont {\bf \let\it=\bi \def\mathversion{bold}\setmath[//]}
+\fontdef\titlefont [!-bf/14.4] % for the title of the document
+\endtt
+
+The math fonts works in all sizes in our virtual example. The math
+formulae are in bold variant and in right size in section headers.
+
+\reference
+
+\bib \url{www.stormtype.com}
+
+\bib \url{www.pismolijna.cz},
+
+\bib \url{www.cstug.cz/stormtype}.
+
+\bib \url{www.cstug.cz/stormtype/slido.html}.
+
+\bib \url{ftp://math.feld.cvut.cz/pub/olsak/ofs}.
+
+\bib Petr Ol¹ák. {\it OFS: Ol¹ákùv fontový systém}. 2001.
+ The English documentation is in files "ofsdoc-e.tex", "ofsdoc-e.pdf"
+
+\bib Petr Ol¹ák. {\it Jak \TeX{} k~fontùm ze Støe¹ovic pøi¹el}. Bulletin
+ of CSTUG, number 4/2001, pp~153--180.
+
+\bib Karl Berry. {\it Fontname}, March 1999. The documentation is included
+ in {\tt web2c} \TeX, file {\tt fontname.texi}, {\tt fontname.pdf}
+
+
+\bye
+
diff --git a/macros/generic/ofs/doc/papers/ofs-slt.pdf b/macros/generic/ofs/doc/papers/ofs-slt.pdf
new file mode 100644
index 0000000000..01cd04b831
--- /dev/null
+++ b/macros/generic/ofs/doc/papers/ofs-slt.pdf
Binary files differ
diff --git a/macros/generic/ofs/doc/papers/ofs-slt.tex b/macros/generic/ofs/doc/papers/ofs-slt.tex
new file mode 100644
index 0000000000..ffee32f695
--- /dev/null
+++ b/macros/generic/ofs/doc/papers/ofs-slt.tex
@@ -0,0 +1,1004 @@
+\chyph % pou¾ijte csplain
+
+% Pøimlovám se k tomu nepøeznaèkovávat èlánek do LaTeXu
+% Na èlánku toti¾ demonstruji vlastnosti OFS a opírám se
+% o OFS z plainu. Pøechod na LaTeX se zachováním tìchto vlastností
+% by nebyl jednoduchý. Mù¾ete rozbalit metriky
+% a virtuální fonty k Charteru (pøilo¾ený charter8z.zip) do
+% pracovního adresáøe a zpracovat csplainem na instalaci TeXu,
+% která obsahuje OFS. Pøed spu¹tìním dvips je pak potøeba doplnit
+% do psfonts.map ètyøi øádky uvedené v souboru mapfile. Mù¾ete mì také
+% informovat o tom, na kterých stránkách se dokument bude ve sborníku
+% nacházet, já opravím údaj \firstpage, zplainuji to, zdvipsuji a
+% po¹lu obratem zpátky.
+
+\newcount\firstpage \firstpage=79
+\newcount\numpages \numpages=14
+
+\def\addcmd #1#2{\expandafter\def\expandafter\tmpa\expandafter{#1}%
+ \def\tmpb{#1}%
+ \ifx\tmpa\tmpb % the #1 is not a macro
+ \expandafter\let\csname \string#1-original\endcsname =#1%
+ \expandafter\def\expandafter #1\expandafter{%
+ \csname\string#1-original\endcsname #2}%
+ \else % the #1 is a macro
+ \expandafter\def\expandafter #1\expandafter{#1#2}%
+ \fi}
+
+\input ofs [ffonts] % Charter je ve skupinì free fonts
+\setfonts [Charter/10pt] % výchozí rodina
+\setmath[//] % inicializace matematiky
+\fontdef\tt [CMTypewriter/mag1.1] % strojopis, korekce støední vý¹ky
+\fontdef\verbtt [CMTypewriter-rm/8] % strojopis pro display ukázky
+\fontdef\small [!/9] % zmen¹ení pro abstrakt a záhlaví
+\addcmd \small {\baselineskip11pt \rm \def\mathversion{normal}\setmath[//]}
+\fontdef\fontsekce [!/12] % pro nadpisy sekcí
+\addcmd \fontsekce {\bf \let\it=\bi \def\mathversion{bold}\setmath[//]}
+\fontdef\fonttitul [!-bf/14.4] % titul
+
+\hsize=12,2cm
+\vsize=19,3cm
+\hoffset=63pt
+\voffset=43pt
+\parindent=14pt
+
+\lineskiplimit=-10pt
+\raggedbottom
+
+\exhyphenpenalty=10000
+\widowpenalty=10000
+\clubpenalty=10000
+
+\showboxdepth=10 \showboxbreadth=50
+
+\def\starthead{\global\headline=
+ {\small \ifodd\pageno \hfil \thetitul \headspace \the\pageno
+ \else \the\pageno \headspace \theauthor \hfil \fi}}
+\headline={\hfil\starthead}
+\def\headspace{\hskip2.5em\relax}
+\def\makeheadline{\vbox to0pt{\vskip-25pt
+ \line{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip}
+\footline={\setfonts[/7]\setmath[//]\baselineskip=9pt
+ \vbox{\hbox{\copytext}\hbox{\copykonvoj}}\hfil
+ \global\footline={}}
+\def\lastpage{\advance\firstpage by\numpages \advance\firstpage by-1
+ \the\firstpage}
+
+\def\copytext{Jan Kasprzak, Petr Sojka (editoøi): \SLT~2002 -- sborník
+ semináøe o~Linuxu a \TeX{}u, str. \the\firstpage--\lastpage, 2002.}
+\def\copykonvoj{\copyright~Konvoj, CSTUG, CZLUG 2002}
+
+\newcount\subnum
+
+\def\kap #1\par{\advance\subnum by1
+ \removelastskip %\goodbreak
+ \vskip17pt plus2pt minus1pt\noindent{\fontsekce
+ \ifnum\subnum>1 \the\subnum\enspace\enspace\fi #1}%
+ \par\nobreak\vskip11pt plus2pt minus1pt
+ \everypar{\setbox0=\lastbox \everypar={}}}
+\def\reference {\subnum=-1 \kap Reference\par \small}
+\def\bib{\par\advance\subnum by1 \leftskip=\parindent
+ \noindent\llap{\the\subnum.\enspace}\ignorespaces}
+
+\let\orifootnote=\footnote
+\newcount\footnotenum
+\def\footnote#1{\global\advance\footnotenum by1
+ \orifootnote{$\setmath[//]^\the\footnotenum$}{\small
+ \hangindent=\parindent #1\par}}
+\def\footnoterule{\kern-3pt \hrule width 2cm \kern2.6pt }
+
+\def\titul #1 \par{\def\thetitul{#1}\pageno=\firstpage
+ \centerline{\fonttitul #1}\vskip20pt\relax}
+\def\autor #1 \par{\def\theauthor{#1}
+ \centerline{#1}\vskip10pt\relax}
+\def\institut #1 \par{\centerline{\small #1}}
+\def\email #1 \par{\centerline{\small Email: \tt #1}\vskip20pt\relax}
+\def\abstrakt #1\par{\bgroup \small
+ \leftskip=3em \rightskip=3em
+ \noindent{\bf Abstrakt:}\enspace #1\par \egroup\bigskip}
+\def\url#1{{\tt#1}}
+
+\font\mflogo=logo10 % METAFONT logo
+\font\boldsy=cmbsy10 at12pt % Tuèné \CS, \AMS.
+\font\bboldsy=cmbsy10 scaled\magstep2 % Tuèné \CS v titulu
+
+\def\CS{$\cal C\kern-.1667em\lower.5ex\hbox{$\cal S$}\kern-.075em $}
+\def\bCS{{\boldsy C\kern-.1667em\lower.5ex\hbox{S}\kern-.04em}}
+\def\CSTeX{\CS\TeX}
+\def\CSTUG{\CS TUG}
+\def\CSfont{\CS\kern.1em font}
+\def\csplain{\CS\kern.1em plain} \let\CSplain=\csplain
+\def\mf{{\mflogo META}\-{\mflogo FONT}}
+\def\mp{{\mflogo META}\-{\mflogo POST}}
+\def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
+\def\twoe{$2_{\textstyle\varepsilon}$}
+\def\LaTeXe{\LaTeX\thinspace\twoe}
+\def\cslatex{\CS\kern.05em\LaTeX} \let\CSLaTeX=\cslatex
+\def\twoe{$2_{\textstyle\varepsilon}$}
+\def\LaTeXe{\LaTeX\thinspace\twoe}
+\def\AMS{$\cal A\kern-.166em\lower.5ex\hbox{$\cal M$}\kern-.075em S$}
+\def\bAMS{{\boldsy A\kern-.166em\lower.5ex\hbox{M}\kern-.075em S}}
+\def\ps{Post\-Script}
+\def\SLT{S\kern-0.025em\lower.5ex\hbox{L}\kern-.2emT}
+\def\DOS{\hbox{DOS}}
+
+%% Definice verbatim prostøedí %% !verb.
+\catcode`\"=13
+\def"{\hbox\bgroup\let"=\egroup\setverb\tt}
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
+\def\begtt{\medskip\bgroup
+ \nobreak\setverb \parskip=0pt %\parindent=0pt
+ \catcode`\"=12\catcode`\~=13 \obeylines
+ \baselineskip=10pt
+ \let\tt=\verbtt \startverb}
+{\catcode`\|=0 \catcode`\\=12
+ |gdef|startverb#1\endtt{%
+ |tt#1|nobreak|egroup|penalty0|medskip|scannexttoken}}
+{\obeyspaces\gdef {\ }}
+\long\def\scannexttoken#1{\ifx#1\par\else\noindent#1\fi}
+
+\def\citeref #1 #2 {\expandafter\def\csname cit:#1\endcsname{#2}}
+\citeref pismolijna 1
+\citeref ofsftp 2
+\citeref ofsdoc 3
+\citeref stormcl 4
+\def\cite#1{\expandafter\ifx \csname cit:#1\endcsname\relax
+ \message{Warning: cite{#1} is not defined}[??]%
+ \else [\csname cit:#1\endcsname]\fi}
+
+%-------------------------------------------------------------------------
+
+\titul Makro OFS
+ %%%%%%%%%
+
+\autor Petr Ol¹ák
+
+\institut Elektrotechnická fakulta ÈVUT, Praha
+
+\email olsak@math.feld.cvut.cz
+
+\abstrakt
+ OFS (Ol¹ákùv fontový systém) je balíèek TeXových maker, který
+ umo¾ní získat vìt¹í pøehled nad rozsáhlými kolekcemi fontù a umo¾ní
+ s~nimi pomìrnì snadnou manipulaci. Balík byl vyvinut pro získání
+ pøehledu nad fonty z~Typokatalogu Støe¹ovické písmolijny~\cite{pismolijna}.
+ Na základì poptávky \LaTeX{}ových u¾ivatelù byl balík
+ napsán je¹tì jednou pro \LaTeX, kde vyu¾ívá NFSS a pokou¹í se je
+ tro¹ièku vylep¹it. Základní u¾ivatelské pøíkazy OFS jsou pak v~obou
+ prostøedích (plain i \LaTeX) stejné. Na pøedná¹ce pøedvedu pou¾ití
+ OFS na u¾ivatelské i konfiguraèní úrovni.
+
+\kap Úvodem
+%----------
+
+Makro OFS jsem si napsal hlavnì proto, abych se vyznal ve stovkách
+fontù, které pocházely ze Støe¹ovické písmolijny a pro které jsem
+pøed rokem udìlal \TeX{}ovou podporu. Proto¾e jsem plainista, ¹lo mi
+hlavnì o~to udìlat makro co nejvíce srozumitelné u¾ivateli plainu,
+který potøebuje pøesnì vìdìt, co to makro dìlá. Tento po¾adavek
+napøíklad \LaTeX{}ové NFSS nesplòuje.
+
+Pozdìji se zaèali o~OFS zajímat té¾ nìkteøí u¾ivatelé \LaTeX{}u. To¾
+jsem se pøemohl a pokusil OFS napsat je¹tì jednou, tentokrát pod
+\LaTeX{}em s~vyu¾itím~NFSS. Cílem tohoto pøepsání bylo hlavnì to, aby
+se u¾ivatelské pøíkazy pro vyhledávání a pøepínání rodin fontù
+zcela shodovaly v~\LaTeX{}ové verzi s~verzí plainovou. \LaTeX{}ová
+verze pøesto umí podstatnì ménì vìcí, ne¾ plainová, proto¾e pokud by
+mìla umìt v¹e, musel bych NFSS zcela odmítnout a fontový modul
+\LaTeX{}u si napsat po svém. Tím bych ale popøel \LaTeX{} jako
+takový, tak¾e jsem zùstal u~respektování principù NFSS. Vìci, které
+se v~NFSS dají dìlat velmi tì¾ko, jsem radìji nedìlal.
+
+Z~tìchto dùvodù jsem se v~\LaTeX{}u nepou¹tìl ani do podpory
+matematických fontù. Koncepce matematiky v~NFSS mi pøipadá jako
+plainistovi ponìkud nesrozumitelná. Navíc velké kolekce fontù, které byly
+hlavní motivací OFS, jsou vìt¹inou textové. Pokud chce nìkdo
+pou¾ít matematickou sadu fontù v~\LaTeX{}u, pou¾ije
+"\usepackage{styl}" a ten styl je k~té matematické sadì vìt¹inou
+dodáván. Nepova¾oval jsem tedy øe¹ení matematiky
+v~\LaTeX{}u za prioritní. Na druhou stranu matematické rodiny v~plainu
+se pomocí OFS doplòují a zavádìjí ve v¹ech velikostech velmi
+elegantnì. Vìøím, ¾e alespoò nìjakému plainistovi (kromì mì) se toto
+øe¹ení bude hodit.
+
+Makro OFS jsem zveøejnil na \cite{ofsftp} pod \TeX-like licencí,
+tj. je volnì k~mání, ale zmìny pod stejným názvem nesmí dále ¹íøit nikdo
+jiný, ne¾ autor. Do \TeX{}ových distribucí jsem makro zatím
+neprosadil, proto¾e bohu¾el chybí anglická dokumentace. Domnívám se,
+¾e kdyby anglická dokumentace byla, nebyl by se zaøazením do \TeX{}ových
+distribucí problém a makro by mohlo vyu¾ít daleko více lidí. Bohu¾el,
+nejsem v~angliètinì natolik zdatný, abych tento problém rychle pøekonal.
+Pro leto¹ní letní prázdniny jsem sice plánoval, ¾e se pokusím anglickou
+dokumentaci napsat, jen¾e pøi¹la voda\dots
+
+K~OFS existuje samozøejmì èeská dokumentace~\cite{ofsdoc} podrobì
+popisující chování makra. Navíc jsem se o~OFS zmínil u¾ v~èlánku
+o~\TeX{}ové podpoøe ©tormových fontù~\cite{stormcl}. Dovolil jsem si
+zde pøesto znovu k~tomuto tématu vrátit. Nechci být nyní
+tak technicky exaktní, jako v~manuálu~\cite{ofsdoc}, ale zase mám zde
+více místa k~rozepsání mo¾ností makra, ne¾ jsem mìl ve
+èlánku~\cite{stormcl}, který byl pøedev¹ím o~©tormových fontech.
+
+
+\kap Základy u¾ivatelského rozhraní
+%----------------------------------
+
+U¾ivatelské rozhraní je shodné v~\LaTeX{}ové verzi OFS i
+v~plainové s~výjimkou snad zavedení makra OFS, které v~plainu
+provedeme jednodu¹e pomocí "\input ofs [kolekce, fontù]", zatímco
+v~záhlaví \LaTeX{}ového dokumentu pí¹eme
+"\usepackage [kolekce, fontù] {ofs}".
+
+Abych v~tomto textu nemusel ka¾dou chvíli vìtvit svùj výklad na situaci
+vhodnou pro plain a pro \LaTeX{}, rozhodl jsem se zde pøedpokládat, ¾e
+pracujeme pouze s~plainem (napøíklad s~\csplain{}em).
+\LaTeX{}ový u¾ivatel si bude muset dohledat specifika verze OFS pro
+svùj formát v~dokumentaci~\cite{ofsdoc}.
+
+\bigskip
+
+Pøíkazem "\fontusage" dostaneme na terminál a do logu základní
+informace o~u¾ivatelských pøíkazech:
+
+\begtt
+$ tex ofs \\fontusage
+This is TeX, Version 3.14159 (Web2C 7.3beta5)
+(/usr/local/share/texmf/tex/csplain/ofs.tex
+OFS (Olsak's Font System) based on plain initialized. <Oct. 2002>
+(/usr/local/share/texmf/tex/csplain/ofsdef.tex))
+\fontusage: ============== Olsak's Font System, usage: =================
+\input ofs [sjannon, sdynamo, a35] ... for example
+\showfonts ... shows all loaded font families (by previous \input)
+\setfonts [Family/] ... local switch to the new family, after this, the
+ \rm, \bf, \it, bi will switch to the variants. The current size is used.
+\setfonts [/size] ... local switch to the new size of fonts, the family is
+ not changed. The "size" has the following possible formats:
+ at<dimen> ... the same as \font\something=file at<dimen>
+ <dimen> ... the same as at<dimen>
+ <number> ... the same as at<number>pt
+ scaled<number> ... the same as \font\something=file scaled<number>
+ mag<decimal-number> fonts will be magnified by given coefficient
+ depend on current size of the fonts.
+\setfonts [Family/size] ... switch to the new family at given size
+\setfonts [Family-vr/] ... switch to the specified font, the current size
+ is used. The "vr" is acronym for variant (bf for example).
+\setfonts [Family-vr/size] ... switch to the specified font.
+\fontdef\name [Family/size] ... same as \gdef\name{\setfonts[Family/size]}
+ The "Family" or "size" parameter may be empty.
+\fontdef\name [Family-vr/size] ... \name is fixed-font switch iff:
+ "size" is no empty and no mag<dec-number>.
+ Fixed-font switch "\name" is implemented as \global\font\name=file.
+\setmath [size/size/size] ... set math it/rm as current it/rm + use PS Symbol
+\nofontmessages, \logfontmessages, \displayfontmessages, \detailfontmessages
+ ... the levels of log.
+*
+\endtt
+
+Vidíme, ¾e pøíkaz "\showfonts" nám uká¾e kolekce fontù. Pokud jsme
+nepou¾ili \uv{previous "\input"}, dopadne základní kolekce
+(implementovaná pøímo uvnitø OFS) takto:
+
+\begtt
+*\showfonts
+OFS (l.0): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+\endtt
+
+Názvy fontových rodin jsou zde uvedeny v~hranatých závorkách a vedle jsou
+uvedeny pøepínaèe variant, které pro danou rodinu je mo¾né pou¾ít.
+
+Vidíme, ¾e nejbì¾nìj¹í textové fonty Computer Modern jsou zaneseny
+v~OFS do tøí rodin "CMRoman", "CMSans" a "CMTypewriter". Myslím, ¾e
+netøeba dodávat, co to znamená. V~rodinách "CMSans" a "CMTypewriter"
+není k~dispozici jinak obvyklá varianta "BoldItalic", pro kterou je
+vyhrazen pøepínaè "\bi". V~rodinì "CMTypewriter" nenajdeme ani
+pøepínaè "\bf" pro tuènou variantu, ale zato mù¾eme pou¾ít
+\uv{nadstandardní} variantu "\sl" (slanted), která je k~dispozici i
+v~rodinì "CMRoman".
+
+%OFS také pøímo pracuje s~rodinami "Times", "Helvetica" a
+%"Courier".
+%Rodina "Helvetica" má kromì bì¾ných variant je¹tì varianty
+%zú¾ené, napøíklad "\nbf" znamená "NarrowBold". Pokud písmová rodina
+%nemá skuteènou kurzívu, ale jen sklonìnou variantu, je pøesto tato
+%varianta vymezena pøepínaèem "\it".
+%Vìt¹ina písmových rodin toti¾
+%dodr¾uje \uv{logiku ètyø variant}, pro které jsou v~OFS vyhrazeny
+%právì pøepínaèe "\rm", "\bf", "\it", "\bi".
+
+Deklarace dal¹ích písmových rodin jsou zaná¹eny do deklaraèních
+souborù s~pøíponou "tex"%
+\footnote{V \LaTeX{}ovém OFS se jedná o~pøíponu {\tt sty}.}.
+V~ka¾dém distribuci \TeX{}u
+doporuèuji udr¾ovat soubor volající v¹echny deklaraèní soubory
+"allfonts.tex". Napøíklad na mém poèítaèi vypadá tento soubor takto:
+
+\begtt
+$ cat `kpsewhich allfonts.tex`
+%%% All OFS families declared on this TeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Petr Olsak
+\input a35 % PostScript 35
+\input ffonts % Another free fonts
+\input btfonts % Bitstream fonts
+\input skatalog % Stromtype foundry, 89 families
+\endtt
+%
+Kdy¾ tedy napí¹u "$ tex allfonts \\showfonts \\end | less"~, dostanu
+na svém poèítaèi výpis zhruba tøí set písmových rodin, ka¾dá obvykle
+ve ètyøech variantách. Dùle¾ité je, ¾e se v tom vyznám a nemusím
+vzpomínat, jak se která metrika jmenuje. Následuje jen èást výpisu.
+
+\begtt
+OFS (l.0): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+a35.tex:
+ [AvantGarde/] \rm, \bf, \it, \bi
+ [Bookman/] \rm, \bf, \it, \bi
+ [NewCentury/] \rm, \bf, \it, \bi
+ [Palatino/] \rm, \bf, \it, \bi
+ [ZapfChancery/] \rm, - , \it, -
+ [ZapfDingbats/] \rm, - , - , -
+ [Symbol/] \rm, - , \it, -
+ffonts.tex:
+ [Charter/] \rm, \bf, \it, \bi
+...
+sjannon.tex:
+ [JannonAntikva/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonText/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonCaps/] \rm, \bf, \it, \bi
+...
+sdynamo.tex:
+...
+ [DynaGroteskLE/] \rm, \bf, \it, \bi
+ [DynaGroteskD/] \rm, \bf, \it, \bi
+ [DynaGroteskR/] \rm, \bf, \it, \bi
+...
+stitul.tex:
+ [Alcoholica/] \rm, \bf, \it, -
+ [Monarchia/] \rm, \bf, - , -
+ [MonarchiaText/] \rm, \bf, - , -
+ [Clichee/] \rm, \bf, \it, \bi
+ [Regula/] \rm, - , \it, -
+ [Splendid/] \rm, \bf, \it, - , \script, \sans
+ [Cobra/] \rm, \bf, - , -
+ [ExcelScript/] \rm, - , - , - , \ext
+ [ExcelScriptText/] \rm, - , - , - , \ext
+ [Zeppelin/] \rm, \bf, - , - , \lr, \coll
+ [Negro/] \rm, - , - , -
+ [Farao/] \rm, \bf, - , - , \kr, \coll
+...
+slido.tex:
+ [Lido/] \rm, \bf, \it, \bi, \crm, \cbf
+\endtt
+
+Ve výpisu je uveden i \TeX{}ový soubor, kde se deklarace odpovídajících
+rodin skuteènì nachází. Vidíme tedy, ¾e "a35.tex" u¾ obsahuje
+deklarace rodin, ale napøíklad soubor "skatalog.tex" zøejmì obsahuje jen dal¹í
+"\input sjannon", "\input sdynamo", "\input stitul" atd.
+Kdy¾ si pro svùj dokument vyberu tøeba rodiny "JannonText",
+"DynaGroteskR" a "Farao", pak místo toho, abych psal
+
+\begtt
+\input ofs [allfonts]
+\endtt
+%
+si vystaèím~s
+\begtt
+\input ofs [sjannon, sdynamo, stitul]
+\endtt
+%
+co¾ zpùsobí naèítání podstatnì ménì souborù s~deklaracemi fontových rodin.
+
+Pokud potøebuji vìdìt, jak ty fonty vypadají, napí¹u napøíklad:
+
+\begtt
+$ pdfcsplain ofscatal [sjannon, sdynamo, stitul] ; acroread ofscatal.pdf
+\endtt
+%
+Soubor "ofscatal.tex", který vytvoøí katalog, byl zaøazen do balíku
+OFS od verze~"Oct 2002".
+
+\kap Pøepínaè rodin a velikostí
+
+Hlavním pøíkazem OFS na u¾ivatelské úrovni je "\setfonts". Jedná se
+pøedev¹ím o~pøepínaè rodin, viz výpis "\fontusage" v~pøedchozí sekci.
+Pøepínaè má dva parametry v~hranaté závorce oddìlené lomítkem. Prvním
+parametrem je název rodiny a druhým po¾adovaná velikost fontù. Pokud
+nìkterý parametr chybí, pøepínaè nebude jeho nastavení mìnit. Pøepínaè
+samozøejmì funguje lokálnì ve skupinách, jako bývá u~fontových
+pøepínaèù obvyklé. Po pøepnutí rodiny pracují pøepínaèe variant
+(obvykle "\rm", "\bf", "\it", "\bi") pro novou rodinu. Varianta se po
+pøepnutí rodiny inicializuje stejná, jako byla pøed pøepnutím,
+tj. jsme-li zrovna v~kurzívì rodiny Times a pøepneme do Helveticy,
+zùstáváme ve variantì "\it" rodiny Helvetica, tj. sklonìné
+písmo. Pokud ale pøi pøepnutí rodiny aktuální varianta v~nové rodinì
+neexistuje, inicializuje se varianta "\rm", kterou musí obsahovat
+ka¾dá rodina.
+
+Pøíklady
+
+\begtt
+\setfonts [JannonText/10.5] % nastavím na zaèátku dokumentu
+\setfonts [/14]\bf % napøíklad pro nadpisy
+\setfonts [/8]\rm % pro poznámky pod èarou
+\setfonts [DynagroteskR/]\it % tøeba pro citáty
+\setfonts [CMTypewriter/] % pro strojopis.
+ % tento pøepínaè napø. v kurzívì nastaví automaticky
+ % variantu kurzíva-strojopis.
+\endtt
+
+Výhodou tedy je, ¾e si nemusím pamatovat názvy matrik (v~\LaTeX{}u pak
+nesrozumitelné zkratky rodin pou¾ívané v~NFSS), ale pí¹u název rodiny
+do dokumentu stejným zpùsobem, jak jej vidím v~písmovém katalogu.
+Pokud udìlám v~názvu rodiny pøeklep (tøeba nedodr¾ím velká a malá
+písmena), pøíkaz "\setfonts" spustí "\showfonts", tj. na obrazovce
+a v~logu vidím seznam v¹ech rodin, které mohu pou¾ít.
+
+Velikost fontù mohu nastavit pøímo udáním v~jednotce "pt", nebo
+pøipsáním jiné jednotky (napø. "mm"), nebo jako u~primitivu "\font"
+pomocí slova "scaled" (koeficient zvìt¹ení se vá¾e k~základní
+velikosti fontu) a koneènì i pomocí zcela nového prefixu "mag", který
+udává zvìt¹ení vzhledem ke zrovna pou¾ité velikosti fontù, napøíklad:
+
+\begtt
+\def\maly{\setfonts [/mag0.8]}
+stanu se {\maly men¹ím a {\maly men¹ím a {\maly je¹tì men¹ím}}}
+a u¾ jsem se z toho dostal.
+\endtt
+%
+dopadne takto:
+
+\medskip
+\def\maly{\setfonts[/mag0.8]}
+stanu se {\maly men¹ím a {\maly men¹ím a {\maly je¹tì men¹ím}}} a
+u¾ jsem se z~toho dostal.
+\medskip
+
+Prefix "mag" pro velikost vyu¾ijeme napøíklad v~logu \LaTeX{}, které
+jsem si v~plainu definoval jako
+
+\begtt
+\def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
+\endtt
+%
+a funguje to v~nadpisech (je tam tuèné vyvý¹ené A~odpovídající
+velikosti) i v~poznámkách pod èarou. V~\LaTeX{}u samotném mají toto
+logo definováno tak, ¾e se pro vyvý¹ené A~pou¾ije font v~indexové
+velikosti. No jo, zde jim to náhodou prochází, ale co kdyby se
+(napøíklad v~jiném v~logu) hodilo pro nìkteré písmeno pou¾ít
+velikost "mag.8", která není jako indexová velikost pou¾ita?
+Bez OFS bychom to pak dìlali dost obtí¾nì, proto¾e NFSS nám øe¹ení
+nenabízí.
+
+Dal¹ím vyu¾itím prefixu "mag" je mo¾nost korigovat nestejné støední
+vý¹ky písma. Napøíklad v~tomto sborníku je pro strojopis pou¾it
+"CMTypewriter". Pokud si v¹imnete v~jiných pøíspìvcích, ne¾ tento,
+vidíte, ¾e uvnitø odstavcù ten strojopis s~fontem Charter moc nesedí, proto¾e
+strojopis má men¹í støední vý¹ku písma. Staèí ale pro pøepínaè "\tt"
+pou¾ít "\setfonts [CMTypewriter/mag1.1]", a støední vý¹ka je
+v~lati. To vidíme napøíklad v~tomto pøíspìvku.
+A~funguje to vèetnì zmen¹ených variant, které jsou
+v~pøíspìvcích pro \SLT{} pou¾ity v~abstaktu, poznámce pod èarou,
+nebo tøeba v~údaji \uv{Email}, uvedeném v~záhlaví pøíspìvku.
+
+Pøíkaz "\setfonts" mù¾e obsahovat i specifikaci varianty (viz výpis
+pøíkazu "\fontusage"). Pak se u¾ nejedná o~pøepínaè rodiny, ale fontu
+samotného. V~takovém pøípadì pøepínaè "\setfonts" neovlivní pøepínaèe
+variant "\rm", "\bf" a dal¹ích, ale nastaví jen po¾adovaný jediný
+font. Napøíklad pro nadpisy by ¹lo psát "\setfonts[-bf/14]" místo
+"\setfonts[/14]\bf", ale museli bychom mít jistotu, ¾e v~nadpisu
+nepou¾ijeme pøepínaè varianty, proto¾e ten by vrátil font do velikosti
+aktuální rodiny. Tou velikostí je tøeba 10pt.
+
+Abychom v~nadpisu mohli pou¾ít pøepínaè "\it", a pøitom se dostali do
+varianty "\bi" (co¾ je ¾ádoucí), je potøeba pøepínaè fontu v~makru
+pro nadpis naprogramovat zhruba takto:
+
+\begtt
+\def\nadpis #1{{\setfonts[/14]\bf \let\it=\bi #1}}
+\endtt
+%
+Kvùli tomuto jednoduchému obratu, který zvládne snad ka¾dý plainista,
+jsem se rozhodl nekomplikovat jádro OFS podobným zpùsobem jako NFSS a
+nezavádìt tedy dal¹í \uv{nezávislou souøadnici} popisující duktus fontu.
+Pro speciální rodiny fontù (jako je tøeba rodina
+"DynaGrotesk") jsem ale snadno pomocí doplòujících maker vytvoøil
+pøepínaè, který respektuje je¹tì o~jednu \uv{nezávislou souøadnici}
+více, ne¾ zvládá NFSS. V~tomto pøípadì to nebyl jen duktus, ale
+i stupeò zú¾ení písma. Navíc tento pøepínaè doká¾e \uv{poskakovat} po
+jednotkách vpøed a vzad podél zvolené souøadnice. To také NFSS
+nezvládá.
+
+Èasto se hodí vytváøet zkratky pro pøepínaèe rodin. K~tomu slou¾í
+makro "\fontdef\pøepínaè[Rodina/velikost]", které funguje podobnì,
+jako pou¾ití konstrukce "\gdef\pøepínaè{\setfonts[Rodina/velikost]}".
+V~záhlaví tohoto dokumentu mám napøíklad uvedeno:
+
+\begtt
+\input ofs [ffonts] % Charter je ve skupinì free fonts
+\setfonts [Charter/10pt] % výchozí rodina
+\fontdef\tt [CMTypewriter/mag1.1] % strojopis, korekce støední vý¹ky
+\fontdef\verbtt [CMTypewriter/8] % strojopis pro display ukázky
+\fontdef\small [Charter/9] % zmen¹ení pro abstrakt a záhlaví
+\endtt
+
+Mo¾ná ètenáøe napadne, ¾e jsem nemusel psát podruhé slovo "Charter"
+v~deklaraci pøepínaèe "\small". Pøi kompletní zmìnì základní rodiny
+dokumentu na jinou bych pak mohl zmìnit slovo "Charter" jen na
+jediném místì (u~pøíkazu "\setfonts") a byl bych hotov.
+Bohu¾el, vynechání rodiny v~pøíkazu "\small" vede
+k~problémùm, proto¾e tento pøíkaz je pou¾it v~záhlaví dokumentu,
+tj. ~v~"\output" rutinì. Pokud zde neuvedeme explicitnì rodinu, dìdí se
+rodina aktuálnì pou¾itá, která ov¹em mù¾e být jakákoli, proto¾e
+"\output" rutina je vyvolávaná z~rùzných míst pøi zpracování
+dokumentu. Mít záhlaví jednou strojopisem a podruhé Charterem podle
+toho, odkud byla "\output" rutina zavolána, je samozøejmì ne¾ádoucí.
+
+Tento problém se dá øe¹it \uv{vykøièníkovou} konvencí, kterou umí
+zpracovat pøíkaz "\fontdef":
+
+\begtt
+\fontdef\small [!/9] \addcmd\small {\rm} % pro abstrakt a záhlaví
+\endtt
+%
+Vykøièník je nahrazen aktuální rodinou u¾ v~dobì èinnosti pøíkazu
+"\fontdef", nikoli tedy a¾ v~dobì provádìní pøepínaèe. V~"\output"
+rutinì se musíme je¹tì postarat o~potlaèení dìdiènosti aktuální
+varianty. Proto jsem pou¾il je¹tì pøíkaz "\addcmd" (zaveden novì od
+verze OFS "Oct 2002"), který k~existujícímu makru pøidá dal¹í pøíkazy
+na jeho konec. Celá deklarace fontù v~tomto dokumentu tedy vypadá
+zhruba takto:
+
+\begtt
+\input ofs [ffonts] % Charter je ve skupinì free fonts
+\setfonts [Charter/10pt] % výchozí rodina
+\fontdef\tt [CMTypewriter/mag1.1] % strojopis, korekce støední vý¹ky
+\fontdef\verbtt [CMTypewriter-rm/8] % strojopis pro display ukázky
+\fontdef\small [!/9]
+\addcmd \small {\baselineskip11pt\rm} % zmen¹ení pro abstrakt a záhlaví
+\fontdef\fontsekce [!/12]
+\addcmd \fontsekce {\bf \let\it=\bi} % pro nadpisy sekcí
+\fontdef\fonttitul [!-bf/14.4] % v titulu nebudeme pøepínat varianty
+\endtt
+
+Povedlo se tedy ve¹keré aktivity související s~výbìrem fontù
+soustøedit na jedno místo dokumentu bez nutnosti pou¾ívat názvy
+metrik.
+
+
+\kap Kódování fontù
+%------------------
+
+OFS pro plain implicitnì pracuje v~kódování \CSfont{}ù, ale mù¾ete
+jej pøepnout do jiného kódování.
+\footnote{OFS pro \LaTeX{} pøenechává starost o~kódování zcela na~NFSS.}
+
+Základem informace o~kódování v~OFS pro plain je makro "\fotenc",
+které má implicitnì hodnotu "8z". To znamená, ¾e rodiny "CMRoman",
+"CMTypewriter" a "CMSans" budou pracovat s~\CSfont{}y.
+Kdyby u¾ivatel nastavil "\def\fotenc{8t}", zaèalo by OFS pracovat
+v~pøípadì tìchto rodin s~DC nebo EC fonty. Jaké je technické pozadí
+vysvìtlíme v~následující sekci.
+
+Vìt¹ina metrik \ps{}ových fontù má varianty "*8t" (pro
+kódování podle Corku) a "*8z" (pro kódování podle \CSfont{}ù).
+Makro "\fotenc" tedy musí obsahovat koncovku metrik, které chceme
+pou¾ít. Tím volíme kódování. Pøíklad:
+
+\begtt
+\input ofs
+\setfonts [Times/] text 1 % metrika: ptmr8z, tj. kódování CSfontù
+\def\fotenc{8t}
+\setfonts [/] text 2 % metrika: ptmr8t tj. kódování podle Corku
+\endtt
+%
+Máte-li své fonty v~nìjakém dal¹ím kódování a koncovky metrik máte
+s~názvy tøeba "*8x", pak není problém napsat "\def\fotenc{8x}"
+a mù¾ete zaèít pou¾ívat své vlastní metriky.
+
+Pokud pou¾íváte kódování podle Corku, doporuèuji definovat makro
+"\fotenc" jako "8t" pøed zavedením makra OFS. Pøi pou¾ití slo¾itìji
+deklarovaných rodin se to hodí.
+
+V~balíku OFS jsou soubory "ofs-8z.tex" a "ofs-8t.tex", ve kterých je
+deklarace akcentù a nìkterých na kódování závislých maker, jako
+napøíklad "\promile". Implicitnì není naèten ani jeden z~tìchto
+souborù, tj.~jsou respektována makra pro akcenty z~originálního
+plainu, která expandují na "\accent" podle kódování CMfontù.
+
+Pokud je toto chování nevyhovující, mù¾ete naèíst pomocí "\input"
+jeden nebo oba dva vý¹e zmínìné soubory (v~libovolném poøadí -- jejich
+definice se nehádají). Pokud naètete oba soubory, pak makra pro
+akcenty expandují na znaky podle kódování, které je aktuálnì nastaveno
+v~makru "\fotenc" ("8z" nebo "8t").
+
+Podívejme se do souborù "ofs-8z.tex" a "ofs-8t.tex" (výraznì kráceno):
+
+\begtt
+%%% Default accents in CM
+\accentdef \` * 8z {\accent 18 } % grave
+\accentdef \' * 8z {\accent 19 } % acute
+\accentdef \v * 8z {\accent 20 } % caron
+\accentdef \u * 8z {\accent 21 } % breve
+...
+%%% Standard characters in plain (redefined here)
+\def\aa{\r a}
+\def\AA{\r A}
+\characterdef \i 8z 16
+\characterdef \j 8z 17
+\characterdef \SS 8z {SS}
+\characterdef \AE 8z 29
+...
+%%% Extra characters from CS-fonts
+\characterdef \promile 8z 141
+\characterdef \varhyphen 8z 156
+\characterdef \flqq 8z 158
+\characterdef \frqq 8z 159
+\characterdef \clqq 8z 254
+\characterdef \crqq 8z 255
+...
+%%% Accented letters from CS fonts
+\accentdef \` A 8z 152
+\accentdef \' A 8z 193
+\accentdef \" A 8z 196
+\accentdef \` a 8z 184
+\accentdef \' a 8z 225
+...
+%%% Default accents in Cork
+\accentdef \` * 8t {\accent 0 }
+\accentdef \' * 8t {\accent 1 }
+\accentdef \^ * 8t {\accent 2 }
+\accentdef \~ * 8t {\accent 3 }
+\accentdef \" * 8t {\accent 4 }
+...
+%%% Standard characters in plain (redefined here)
+\def\aa{\r a}
+\def\AA{\r A}
+\characterdef \i 8t 25
+\characterdef \j 8t 26
+\characterdef \SS 8t 223
+\characterdef \AE 8t 198
+...
+\characterdef \promile 8t {\%\char 24 }
+\characterdef \textpertenthousand 8t {\%\char 24\char 24 }
+...
+%%% Accented letters from Cork encoding
+\accentdef \. i 8t `\i
+\accentdef \u A 8t 128
+\accentdef \k A 8t 129
+\accentdef \' C 8t 130
+\accentdef \v C 8t 131
+...
+\endtt
+
+Myslím, ¾e syntaxe a význam pøíkazù "\characterdef" a "\accentdef" je
+v~této ukázce samovysvìtlující. Pokud ne, odkazuji ètenáøe do
+dokumentace~\cite{ofsdoc}, která do posledního detailu (vèetnì popisu
+jednotlivých fází expanze) vysvìtluje èinnost tìchto pøíkazù.
+
+\LaTeX{}ovému u¾ivateli to mù¾e pøipomínat pøíkazy
+"\DeclareTextSymbol" a "\DeclareTextComposite" a jim podobné, které
+dìlají zhruba toté¾ (jen ponìkud komplikovanìji, nepøehlednìji a
+tì¾kopádnìji).
+
+OFS také poèítá s~mo¾ností, ¾e nìkteré znaky jsou pøidány do extra
+fontu, který s~pùvodním fontem vytváøí uspoøádanou dvojici. Takové
+dvojice metrik jsou pou¾ity napøíklad pro fonty ©tormovy písmolijny,
+proto¾e obsahují více ne¾ 256 znakù. Pøitom by bylo ¹koda nìkteré
+znaky nevyu¾ít. Ke ka¾dé metrice tìchto fontù ("*8z" i "*8t") je
+pøiøazena extra metrika "*6s", obsahující zbylé znaky.
+Pomocí "\characterdef" a "\accentdef" mù¾eme deklarovat pøítomnost
+tìchto znakù v~kódování "6s" (viz soubor "stormenc.tex"). Pokud
+aktuální metrika má k~sobì extra font v~kódování "6s" a je po¾adován
+znak z~tohoto fontu, OFS jej automaticky \uv{vyloví} pomocí
+pøechodného pøepnutí na extra metriku.
+
+
+\kap Deklarace rodin
+%-------------------
+
+Podívejme se nyní do souboru "a35.tex", který deklaruje rodiny pro
+základních 35 \ps{}ových fontù (kráceno):
+
+\begtt
+%%% Times, Helvetica, Courier is in OFS defaults
+
+\ofsdeclarefamily [AvantGarde] {% -------------------- AvantGarde
+ \loadtextfam (Book) pagk\fotenc;%
+ (Demi) pagd\fotenc;%
+ (BookOblique) pagko\fotenc;%
+ (DemiOblique) pagdo\fotenc;;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\ofsdeclarefamily [NewCentury] {% -------------------- NewCenturySchlbk
+ \loadtextfam (Roman) pncr\fotenc;%
+ pncb\fotenc;%
+ pncri\fotenc;%
+ pncbi\fotenc;;%
+ \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}%
+}
+...
+\endtt
+
+Zde je tedy deklarováno zobrazení mezi názvy rodin a metrikami.%
+\footnote{
+ V~OFS pro \LaTeX{} takové soubory neexistují; tam se pouze
+ deklaruje zobrazení mezi (dlouhými) názvy rodin v~OFS a zkratkami
+ rodin v~NFSS.
+}
+Ka¾dá rodina má ètyøi povinné metriky (pro bì¾né ètyøi
+varianty). Metriky jsou zapsány pomocí "\fotenc", aby fungovalo
+pøepínání kódování. Mezi pøedposledním a posledním støedníkem mù¾e být
+uvedeno extra kódování, pokud je font rozlo¾en do dvou metrik (v~tomto
+pøíkladì není). Pøíkazy uvedené v~parametru "\ofsdeclarefamily" se
+provedou pøi ka¾dém pøepnutí rodiny pøíkazem "\setfonts".
+V~ukázce tam máme alternativní definice loga "\TeX", aby toto logo pìknì
+vypadalo v~ka¾dém fontu.
+
+Od verze OFS "Oct 2002" je pøidána mo¾nost pou¾ít nepovinné parametry
+v~argumentech pøíkazu "\loadtextfam". Tyto parametry pí¹eme do kulaté
+závorky a znaèí název varianty, pokud je odli¹ný od bì¾ného názvu.
+Tato informace se pou¾ije v logu a pøi tisku katalogu.
+
+Podívejme se je¹tì do souboru "sjannon.tex" z~podpory ©tormových fontù
+(výpis je zde neúplný):
+
+\begtt
+\ofsdeclarefamily [JannonAntikva] {% -------- Jannon Antikva
+ \loadtextfam sjnr\fotenc;%
+ sjnb\fotenc;%
+ sjnri\fotenc;%
+ sjnbi\fotenc;6s;%
+ \newvariant2 \mr (Medium) sjnm\fotenc;6s;%
+ \newvariant3 \mi (MediumItalic) sjnmi\fotenc;6s;%
+}
+\ofsdeclarefamily [JannonText] {% ------------ Jannon Text
+ \loadtextfam sjnrg\fotenc;%
+ sjnbg\fotenc;%
+ sjnrig\fotenc;%
+ sjnbig\fotenc;6s;%
+ \newvariant2 \mr (Medium) sjnmg\fotenc;6s;%
+ \newvariant3 \mi (MediumItalic) sjnmig\fotenc;6s;%
+}
+...
+\endtt
+%
+Vidíme, ¾e navíc je zde deklarována extra metrika v~kódování~"6s" a ¾e
+se zde deklarují doplòující pøepínaèe variant "\mr" a "\mi" mimo
+základní ètyøi varianty. Podrobnìj¹í vysvìtlení pou¾itých pøíkazù
+ètenáø opìt najde v~dokumentaci~\cite{ofsdoc}.
+
+Jak jsou pomocí expanze "\fotenc" mapovány metriky \CSfont{}ù
+resp. DC~fontù, které v~názvech koncovku "8z" ani "8t" nemají?
+To souvisí rovnì¾ s~tím, ¾e tyto fonty mají pro rùzné velikosti rùzné
+metriky. V~deklaraèních souborech je pak tento problém vyøe¹en
+zpùsobem \uv{dvì mouchy jednou ranou} (viz soubor "ofsdef.tex"):
+
+\begtt
+\registertfm cmr8z - csr10 % metrika pro v¹echny velikosti
+\registertfm cmr8z 0pt-6pt csr5
+\registertfm cmr8z 6pt-7pt csr6
+\registertfm cmr8z 7pt-8pt csr7
+\registertfm cmr8z 8pt-9pt csr8
+\registertfm cmr8z 9pt-10pt csr9
+\registertfm cmr8z 10pt-12pt csr10
+\registertfm cmr8z 12pt-17pt csr12
+\registertfm cmr8z 17pt-* csr17
+...
+\registertfm cmr8t - dcr10 % metrika pro v¹echny velikosti
+...
+\ofsdeclarefamily [CMRoman] {% ------------ Computer Modern Roman
+ \loadtextfam cmr\fotenc;%
+ cmbx\fotenc;%
+ cmti\fotenc;%
+ cmbxti\fotenc;;%
+ \newvariant8 \sl (Slanted) cmsl\fotenc;;%
+}
+\endtt
+%
+Centrálním pøíkazem je zde makro "\registertfm", které mapuje
+neexistující metriky formálnì vytvoøené pomocí expanze "\fotenc" do
+skuteèných metrik. Toto makro také umí registrovat rùzné metriky
+pro rùzné velikosti. Pokud tedy budeme chtít font daný pomocí
+"\setfonts[CMRoman-rm/12.5]", vyvolá se pøi "\fotenc"
+s~hodnotou "8z" metrika "csr12 at12.5pt". \uv{Metrika pro v¹echny
+velikosti} se pou¾ije v~pøípadì, ¾e je velikost fontu deklarovaná
+s~\hbox{prefixem} "scaled", tak¾e "\setfonts[CMRoman-rm/scaled1250]" vyvolá
+metriku "csr10 scaled1250". Ztrácíte-li pøehled o~tom, jaká metrika se
+ve skuteènosti pou¾ila, mù¾ete zapnout logovací pøepínaè
+"\detailfontmessages".
+
+Podíváte-li se do souboru "ofsdef.tex" podrobnìji, mù¾ete si v¹imnout, ¾e
+jsem metriky rodiny "CMRoman" a dal¹ích "CM"~rodin pro kódování~"8t" ponìkud
+odbyl. Registroval jsem je jako metriky DC fontù bez støídání metrik pro
+rùzné velikosti. Nechtìlo se mi to toti¾ vypisovat a nevìdìl jsem, zda
+u¾ivatel tohoto kódování radìji nepou¾ije EC fonty místo DC fontù.
+Ve zmínìném souboru jsou pøíklady, jak by se ta deklarace mìla
+provést. Pokud ji nìkdo dopí¹e (napøíklad pro DC i EC fonty do zvlá¹tních
+souborù), rád ji do balíku OFS zaøadím. Osobnì ale fonty kódované
+v~"8t" nepou¾ívám, tak¾e mì zatím nic nemotivuje to udìlat.
+
+
+\kap Matematické fonty
+%---------------------
+
+Ka¾dý plainista ví, ¾e fonty pro matematiku se sdru¾ují do matematických
+rodin obsahující font pro základní, indexovou a index-indexovou
+velikost. Rovnì¾ ví, ¾e první ètyøi matematické rodiny (s~èíslem 0 a¾~3)
+jsou s~\TeX{}em jistým zpùsobem pevnì významovì svázány a dal¹í rodiny
+se dají deklarovat.
+
+Aby plainista pøi deklarování matematických rodin nemusel psát tøikrát
+za sebou "\font" a potom je¹tì
+"\textfont\rodina=...", "\scriptfont...", atd, je v~OFS k~tomu
+vytvoøena zkratka "\loadmathfam", jak uká¾u za chvíli.
+
+Inicializaci matematických fontù v~OFS pro plain provedeme pomocí
+pøíkazu "\setmath". Dokud tento pøíkaz nepou¾ijeme, jsou matematické
+fonty ve stavu, jak je inicializoval plain. Ve tøech parametrech
+pøíkazu "\setmath" (oddìlených lomítky) dáváme najevo, jakou chceme
+základní velikost, jakou pro indexy a jakou pro indexy
+indexù. Jsou-li tyto parametry prázdné, je pou¾ito relativní zmen¹ení
+podle aktuální velikosti textového fontu pomocí prefixu "mag" takto:
+
+\begtt
+\setmath [//] je toté¾ jako \setmath [mag1.0/mag.7/mag.5]
+\endtt
+
+Pøíkaz "\setmath" vypoèítá po¾adované velikosti a startuje makro pro
+zavedení fontù "\mathfonts". Dále tento pøíkaz startuje makro pro
+inicializaci matematického kódování "\mathchars". Tato makra si mù¾e
+plainista definovat jak chce, nicménì vìt¹inou vyu¾ije ji¾
+pøipravených maker "\defaultmathfonts" a "\defaultmathchars", která
+jsou udìlána tak, ¾e spou¹tìjí rùzné varianty kódu podle hodnoty maker
+"\fomenc" a "\mathversion".
+
+Pøi "\def\fomenc{PS}" (imlicitní hodnota: PostScriptové fonty) se zavedou
+fonty tak, ¾e matematická kurzíva se ztoto¾ní s~aktuální textovou
+kurzívou a podobnì rodina~0 pro èíslice a textové symboly zùstává
+nastavena podle aktuální textové rodiny varianty "\rm".
+Matematické symboly se berou
+(pokud to je mo¾né) z~bì¾nì dostupného \ps{}ového fontu
+"Symbol". Zbytek (napø. natahovací závorky) pak zùstává v~Computer
+Modern. Matematické kódování je pro tuto situaci výraznì
+pozmìnìno obvyklými primitivy "\mathchardef" a podobnými, aby byly
+dosa¾itelné v¹echny znaky plainu. Napøíklad pro øecká písmena musela být
+zavedena nová rodina se sklonìným fontem "Symbol" a pøíkazy typu "\alpha" jsou
+pøekódovány z~pùvodní matematické rodiny~1 na tuto novou rodinu.
+
+Nastavíte-li "\def\fomenc{CM}", pak pøíkaz "\setmath" zavede
+stejné matematické fonty z~rodiny Computer Modern, jako
+v~plainu. Pøíkaz "\setmath[//]" pak pouze aktualizuje velikosti tìchto fontù
+podle velikosti aktuálního textového fontu.
+
+Nakoupíte-li fonty MathTimes, dále naètete soubor "ofsmtdef.tex" (souèástí
+OFS od verze "Jun. 2002") a definujete "\def\fomenc{MT}", pak pøíkaz
+"\setmath" zavede kurzívu a rodinu~0 stejnì jako pøi
+"\def\fomenc{PS}", ale navíc pou¾ije pro {\it v¹echny\/} symboly vèetnì
+natahovacích závorek fonty MathTimes.
+
+Kromì hodnoty "\fomenc" se pøíkaz "\setmath" vìtví i vzhledem
+k~hodnotì makra "\mathversion". Implicitnì OFS poèítá se dvìma
+hodnotami tohoto mak\-ra: "\def\mathversion{normal}" nebo "bold".
+Pøi verzi "bold" jsou naèteny do matematických rodin tuèné alternativy
+fontù, pokud to jde. V¹e názornì vysvìtlí pohled do souboru
+"ofsdef.tex":
+
+\begtt
+\def\defaultmathfonts{\csname load\fomenc\mathversion math\endcsname}
+\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}
+\def\mathfonts{\defaultmathfonts}
+\def\mathchars{\defaultmathchars
+ \let\mathchars=\relax % to protect the twice math-setting
+}
+\def\loadPSnormalmath{%
+ \loadmathfam 0[tenrm/]% Actual Roman font
+ \loadmathfam 1[tenit/]% Actual Italic font
+ \loadmathfam 2[/cmsy]% Standard symbols from CM
+ \noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+ \chardef\itfam=1 \chardef\bifam=5
+ \loadmathfam \bffam [tenbf/]% Actual Bold font
+ \loadmathfam \bifam [tenbi/]% Actual Bold Italic
+ \newmathfam\symbfam
+ \loadmathfam \symbfam [/psyr]% PostScript Symbol
+ \newmathfam\symbofam
+ \loadmathfam \symbofam [/psyro]% PostScript Symbol Oblique
+}
+\def\loadPSboldmath{%
+ \loadmathfam 0[tenbf/]% Actual Bold font
+ \loadmathfam 1[tenbi/]% Actual Bold-Italic font
+...
+}
+\def\loadCMnormalmath{%
+ \loadmathfam 0[/cmr8z]% Roman font
+ \loadmathfam 1[/cmmi]% Math Italic font
+ \loadmathfam 2[/cmsy]% Standard symbols from CM
+ \noindexsize\loadmathfam 3[/cmex10]% Standard extra symbols from CM
+...
+}
+\def\loadCMboldmath{%
+ \loadmathfam 0[/cmbx8z]% Roman font
+ \loadmathfam 1[/cmmib10]% Math Italic font
+...
+}
+\def\setPSmathchars{%
+ \fontmessage{\ofsmessageheader Math codes are set for PS encoding}%
+ \mathcode`\,="602C
+ \mathcode`\.="002E
+ \delcode`\<="\hex\symbfam E130A
+ \delcode`\>="\hex\symbfam F130B
+ \delcode`\|="\hex\symbfam 7C30C
+ \edef\langle{\delimiter"4\hex\symbfam E130A }%
+ \edef\rangle{\delimiter"5\hex\symbfam F130B }%
+ \mathchardef\alpha "0\hex\symbofam 61
+ \mathchardef\beta "0\hex\symbofam 62
+ \mathchardef\gamma "0\hex\symbofam 67
+...
+}
+\endtt
+
+Chceme-li pøidat nìjaké dal¹í matematické rodiny (v~terminologii NFSS
+matematické abecedy), pak mù¾eme postupovat tøeba takto:
+
+\begtt
+\def\mathfonts{\defaultmathfonts
+ \newmathfam\bbfam
+ \loadmathfam \bbfam [/bbold12]% Dvojitá vertikální kresba
+ \def\bb{\fam\bbfam}%
+}
+\def\mathchars{\defaultmathchars
+ \mathchardef\balpha "0\hex\bbfam 0B
+ \mathchardef\bbeta "0\hex\bbfam 0C
+ ...
+}
+\endtt
+
+Pøíklad z~konce sekce~3 nyní obohatíme o~mo¾nost práce
+s~matematikou v~libovolných velikostech:
+
+\begtt
+\input ofs [ffonts] % Charter je ve skupinì free fonts
+\setfonts [Charter/10pt] % výchozí rodina
+\setmath[//] % inicializace matematiky
+\fontdef\tt [CMTypewriter/mag1.1] % strojopis, korekce støední vý¹ky
+\fontdef\verbtt [CMTypewriter-rm/8] % strojopis pro display ukázky
+\fontdef\small [!/9] % zmen¹ení pro abstrakt a záhlaví
+\addcmd \small {\baselineskip11pt \rm \def\mathversion{normal}\setmath[//]}
+\fontdef\fontsekce [!/12] % pro nadpisy sekcí
+\addcmd \fontsekce {\bf \let\it=\bi \def\mathversion{bold}\setmath[//]}
+\fontdef\fonttitul [!-bf/14.4] % titul
+\endtt
+
+Nyní i v~abstraktech, poznámkách pod èarou a záhlavích je matematika
+ve v¹ech velikostech v¹ech mo¾ných indexù zmen¹ená odpovídajícím
+zpùsobem. Pokud by se matematika mìla pou¾ít v~názvu sekce, pak bude
+také tuèná a správnì veliká.
+
+
+\reference
+
+\bib \url{www.pismolijna.cz}, \url{www.cstug.cz/stormtype}.
+
+\bib \url{ftp://math.feld.cvut.cz/pub/olsak/ofs}.
+
+\bib Petr Ol¹ák. {\it OFS: Ol¹ákùv fontový systém}. 2001.
+ Dokumentace k~balíku je v~souborech "ofsdoc.tex", "ofsdoc.pdf".
+
+\bib Petr Ol¹ák. {\it Jak \TeX{} k~fontùm ze Støe¹ovic pøi¹el}. Zpravodaj
+ Èeskoslovenského sdru¾ení u¾ivatelù \TeX{}u, 4/2001, pp~153--180.
+
+\bye
+
diff --git a/macros/generic/ofs/latex/decl/a35.sty b/macros/generic/ofs/latex/decl/a35.sty
new file mode 100644
index 0000000000..1e7d8edc5c
--- /dev/null
+++ b/macros/generic/ofs/latex/decl/a35.sty
@@ -0,0 +1,25 @@
+%%% OSF-style file, see ofsdoc.tex for more details
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Jul 2001 Petr Olsak
+
+% See ofsdoc.tex manual for more details.
+% This file is a part of OFS macro package by Petr Olsak.
+
+\ifx\OFSprocessoptions\undefined
+ \ProvidesPackage {a35}
+ \RequirePackage {ofs}
+\fi
+
+\OFSputfamlist {a35.sty:}
+
+\OFSdeclarefamily [AvantGarde] {pag} \OFSnormalvariants
+\OFSdeclarefamily [Bookman] {pbk} \OFSnormalvariants
+\OFSdeclarefamily [NewCentury] {pnc} \OFSnormalvariants
+\OFSdeclarefamily [Palatino] {ppl} \OFSnormalvariants
+\OFSdeclarefamily [ZapfChancery] {pzc}
+\OFSputfamlist {\string\rm, \space- , \string\it, \space -}
+\OFSdeclarefamily [ZapfDingbats] {pzd}
+\OFSputfamlist {\string\rm, \space- , \space- , \space -}
+\OFSdeclarefamily [Symbol] {psy}
+\OFSputfamlist {\string\rm, \space- , \string\it, \space -}
+
diff --git a/macros/generic/ofs/latex/decl/allfonts.sty b/macros/generic/ofs/latex/decl/allfonts.sty
new file mode 100644
index 0000000000..a18d554ae7
--- /dev/null
+++ b/macros/generic/ofs/latex/decl/allfonts.sty
@@ -0,0 +1,20 @@
+% This file may be used by OFS (Olsak Font System)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\OFSprocessoptions\undefined
+ \ProvidesPackage {allfonts}
+ \RequirePackage {ofs}
+\fi
+
+% The contents of this file is depend on the fonts installed in your TeX
+% system. If you install some fonts supported by OFS (or you write
+% the OFS support yourself), add the \RequirePackage {<package>}
+% in the following list:
+
+\RequirePackage{a35}
+
+% example:
+% \RequirePackage {skatalog}
+% after you install the fonts from Storm Type Foundry.
+%
+% See ofsdoc.tex for more information about OFS.
diff --git a/macros/generic/ofs/latex/ofs.sty b/macros/generic/ofs/latex/ofs.sty
new file mode 100644
index 0000000000..6bac96bbc5
--- /dev/null
+++ b/macros/generic/ofs/latex/ofs.sty
@@ -0,0 +1,301 @@
+
+%%% OFS: Olsak's Font System based on NFSS + LaTeX macros
+%%% Jul 2001 Petr Olsak
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% see ofsdoc.tex for more details
+
+\NeedsTeXFormat{LaTeX2e} % I don't like LaTeX, the plain macro is more clean.
+ % See the variant of my macros ofs.tex for plain.
+ % But, some users ask for LaTeX style files :-((
+
+%\ProvidesPackage{ofs}[2001/07/01 OFS based on NFSS]
+%\ProvidesPackage{ofs}[2002/10/24 OFS based on NFSS]
+% \addcmd added
+\ProvidesPackage{ofs}[2003/02/25 OFS based on NFSS]
+% \setfonts {\bgroup \catcode`\-=12 ... by Z. Wagner added
+
+\def\OFSversion{Oct. 2002}
+\typeout{OFS (Olsak's Font System) based on NFSS initialized.
+ <\OFSversion>}
+
+%%%% \fontusage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bgroup \catcode`\#=12
+ \catcode`\{=12 \catcode`}=12 \catcode`\X=1 \catcode`\Z=2
+ \catcode`\^^M=14 \catcode`\ =12 \catcode`\|=0\catcode`\\=12%
+|gdef|fontusageX
+|begingroup
+|typeoutX%---------------------------------------------------------------
+\fontusage: ============ Olsak's Font System, usage: ===============^^J
+\usepackage [sjannon, sdynamo] {ofs} ... for example^^J
+\showfonts ... shows all loaded font families (by previous \usepackage)^^J
+\setfonts [Family/] ... local switch to the new family, after this, the^^J
+ \rm, \bf, \it, bi will switch to the variants. The current size is used.^^J
+\setfonts [/size] ... local switch to the new size of fonts, the family is^^J
+ not changed. The "size" has the following possible formats:^^J
+ at<dimen> ... the same as \font\something=file at<dimen>^^J
+ <dimen> ... the same as at<dimen>^^J
+ <number> ... the same as at<number>pt^^J
+ scaled<number> ... the same as \font\something=file scaled<number>^^J
+ mag<decimal-number> fonts will be magnified by given coefficient^^J
+ depend on current size of the fonts.^^J
+\setfonts [Family/size] ... switch to the new family at given size^^J
+\setfonts [Family-vr/] ... switch to the specified font, the current size^^J
+ is used. The "vr" is two-letter acronym for variants: rm, bf, it, bi.^^J
+\setfonts [Family-vr/size] ... switch to the specified font.^^J
+\fontdef\name [Family/size] ... same as \gdef\name{\setfonts[Family/size]}^^J
+ The "Family" or "size" parameter may be empty.^^J
+\OFSfamily [Family] ... expands to internal NFSS family name.^^J
+\OFSfamilydefault [Family] ... same as \edef\familydefault{\OFSfamily[Family]}
+Z%-----------------------------------------------------------------------
+|endgroup
+Z
+|egroup
+
+
+%%%% \rm, \bf, \it, bi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bi{\fontseries{b}\fontshape{it}\selectfont}
+\def\bf{\fontseries{b}\fontshape{n}\selectfont}
+\def\it{\fontseries{m}\fontshape{it}\selectfont}
+\def\rm{\fontseries{m}\fontshape{n}\selectfont}
+\def\bfdefault{b}
+
+%%%% Macros used in declaration files %%%%%%%%%%%%%%%%%%
+
+\def\ofs@listfamilies{}
+\def\ofs@messageheader{OFS (l.\the\inputlineno): }
+\def\ofs@unknownfam{undefined}
+
+\def\OFSdeclarefamily [#1] #2{%
+ \OFSputfamlist {^^J \space\space[#1/]}%
+ \expandafter \gdef\csname ofs-fam:#1\endcsname {#2}%
+ \expandafter \gdef\csname ofs-fam:#2\endcsname {#2}%
+ \bgroup
+ \count2=18
+ \def\tmpa ##1{\if:##1\let\tmpa=\relax
+ \else\advance\count2 by-1 \fi\tmpa}\tmpa #1:%
+ \def\tmpa {\ifnum\count2>0 \advance\count2 by-1 \OFSputfamlist{ }%
+ \else\let\tmpa=\relax \fi\tmpa}\tmpa
+ \egroup
+}
+\def\OFSfamily [#1]{%
+ \expandafter \ifx\csname ofs-fam:#1\endcsname \relax
+ \ofs@unknownfam
+ \else \csname ofs-fam:#1\endcsname
+ \fi
+}
+\def\OFSfamilydefault [#1]{%
+ \edef\tmpa{\OFSfamily[#1]}%
+ \ifx\tmpa\ofs@unknownfam
+ \typeout{\ofs@messageheader WARNING. The family is not set.^^J
+ The family name [#1] is not known in the list:
+ \ofs@listfamilies}%
+ \else
+ \edef\familydefault{\tmpa}%
+ \fi
+}
+\def\OFSputfamlist #1{%
+ \xdef\ofs@listfamilies {\ofs@listfamilies #1}%
+}
+\def\OFSextraencoding #1{%
+ \expandafter \ifx \csname ofs-enc:#1\endcsname \relax
+ \edef\ofs@extraencoding{#1}%
+ \lowercase{\input{#1ini.def}}\relax
+ \expandafter \def \csname ofs-enc:#1\endcsname {}%
+ \fi
+}
+\def\OFSnormalvariants{\OFSputfamlist{%
+ \string\rm, \string\bf, \string\it, \string\bi}}
+
+%%%% Defaults %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\OFSputfamlist {^^Jdefaults:}
+\OFSdeclarefamily [CMRoman] {cmr} \OFSnormalvariants
+\OFSputfamlist {, \string\sl}
+
+\OFSdeclarefamily [CMSans] {cmss}
+\OFSputfamlist {\string\rm, \string\bf, \string\it, \space-}
+
+\OFSdeclarefamily [CMTypewriter] {cmtt}
+\OFSputfamlist {\string\rm, \space- , \string\it, \space- , \string\sl}
+
+\OFSdeclarefamily [Times] {ptm} \OFSnormalvariants
+
+\OFSdeclarefamily [Helvetica] {phv} \OFSnormalvariants
+\OFSputfamlist{, \string\nrm, \string\nbf, \string\nit, \string\nbi}
+
+\OFSdeclarefamily [Courier] {pcr} \OFSnormalvariants
+
+\def\sl{\fontseries{m}\fontshape{sl}\selectfont}
+\def\nrm{\fontseries{mc}\fontshape{n}\selectfont}
+\def\nbf{\fontseries{bc}\fontshape{n}\selectfont}
+\def\nit{\fontseries{mc}\fontshape{it}\selectfont}
+\def\nbi{\fontseries{bc}\fontshape{it}\selectfont}
+
+
+%%%% \showfonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\showfonts{\typeout{\ofs@messageheader
+ The list of known font families:\ofs@listfamilies}}
+
+%%%% \setfonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\setfonts {\bgroup \catcode`\-=12 \ofs@setfonts}
+\def\ofs@setfonts [#1/#2]{\egroup \OFSsetfonts{#1}{#2}}
+\DeclareRobustCommand \OFSsetfonts [2]{%
+ \edef\tmpa{#1}\expandafter \ofs@readfamvariant\tmpa--:%
+ \ifx\famvariant\empty
+ \ofs@setfontfamily [#1/#2]%
+ \else
+ \ofs@setsinglefont [#1/#2]%
+ \fi
+ \ignorespaces
+}
+\def\ofs@readfamvariant #1-#2-#3:{\def\tmpb{#1}\def\famvariant{#2}}
+
+\def\ofs@setfontfamily [#1/#2]{%
+ \if |#1|\else
+ \edef\tmpa{\OFSfamily[#1]}%
+ \ifx\tmpa\ofs@unknownfam
+ \typeout{\ofs@messageheader WARNING. The family is not set.^^J
+ The family name [#1/] is not known in the list:
+ \ofs@listfamilies}%
+ \else
+ \fontfamily{\tmpa}%
+ \fi
+ \fi
+ \if |#2|\else
+ \edef\tmpa{#2}\expandafter\ofs@readfontsize \tmpa:%
+ \fontsize{\tmpa}{\f@baselineskip}%
+ \fi
+ \ofs@selectfont
+}
+\let\ofs@selectfont=\selectfont
+
+\def\ofs@setsinglefont [#1-#2/#3]{%
+ \let\ofs@selectfont=\relax
+ \ofs@setfontfamily [#1/#3]\let\ofs@selectfont=\selectfont
+ \csname #2\endcsname
+}
+\def\ofs@readfontsize #1#2:{\if a#1\ofs@readfontsizeat #1#2:%
+ \else \if s#1\ofs@readfontsizescaled #1#2:%
+ \else \if m#1\ofs@readfontsizemag #1#2..:%
+ \fi\fi\fi
+}
+\def\ofs@readfontsizeat at#1:{\def\tmpa{#1}}
+\def\ofs@readfontsizescaled scaled#1:{\dimen0=0.01pt \dimen0=#1\dimen0
+ \edef\tmpa{\the\dimen0}}
+\def\ofs@readfontsizemag mag#1.#2.#3:{\dimen0=\f@size pt
+ \if|#2|\if|#3|%
+ \errmessage{OFS: "mag" need the decimal parameter with decimal point}%
+ \fi\fi
+ \dimen0 =#1.#2 \dimen0
+ \advance\dimen0 by7sp % rounding to three digits after decimal point
+ \ifdim\dimen0<10pt \edef\tmpa{+\the\dimen0}\else \edef\tmpa{\the\dimen0}\fi
+ \dimen0 =\expandafter \ofs@readsixdigits \tmpa :::::|pt
+ \edef\tmpa{\the\dimen0}%
+}
+\def\ofs@readsixdigits #1#2#3#4#5#6#7#8#9|{%
+ \if:#5#1#2\else\if:#6#1#2#3\else\if:#7#1#2#3#4\else
+ \if:#8#1#2#3#4#5\else#1#2#3#4#5#6\fi\fi\fi\fi
+}
+
+%%%% \fontdef %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fontdef #1[#2/#3]{\def\tmpc{!}%
+ \edef\tmpa{#3}\ifx \tmpa\tmpc \edef\tmpa{\f@size}\fi
+ \edef\tmpb{#2}\expandafter \ofs@readfamvariant\tmpb--:%
+ \ifx \tmpb\tmpc
+ \ifx\famvariant\empty
+ \xdef #1{\noexpand\setfonts [\f@family/\tmpa]}%
+ \else
+ \xdef #1{\noexpand\setfonts [\f@family-\famvariant/\tmpa]}%
+ \fi
+ \else
+ \xdef #1{\noexpand\setfonts [#2/\tmpa]}%
+ \fi
+}
+
+%%%% \ifknownfam %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif \ifofs@familypresent
+
+\def\ifknownfam [#1]{%
+ \expandafter \ifx\csname ofs-fam:#1\endcsname \relax
+ \expandafter \ofs@familypresentfalse
+ \else
+ \expandafter \ofs@familypresenttrue
+ \fi
+ \ifofs@familypresent
+}
+
+%%%% \addcmd %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\addcmd #1#2{\expandafter\def\expandafter\tmpa\expandafter{#1}%
+ \def\tmpb{#1}%
+ \ifx\tmpa\tmpb % the #1 is not a macro
+ \expandafter\let\csname \string#1-original\endcsname =#1%
+ \expandafter\def\expandafter #1\expandafter{%
+ \csname\string#1-original\endcsname #2}%
+ \else % the #1 is a macro
+ \expandafter\def\expandafter #1\expandafter{#1#2}%
+ \fi
+}
+
+%%%% Extra encoding %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\setextrafont{\ifx\ofs@extraencoding\undefined
+ \typeout{\ofs@messageheader WARNING. Extra encoding is no declared by
+ \string\OFSextraencoding.}%
+ \else \fontencoding{\ofs@extraencoding}\selectfont \fi
+}
+\def\extchar{\afterassignment\ofs@doextchar \chardef\tmpa=}
+\def\ofs@doextchar{{\setextrafont\tmpa}}
+
+
+%%%% Accents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\DeclareRobustCommand \accentabove [3]{%
+ \def\tmpa{#3}%
+ \ifx \tmpa\empty #1\else
+ \leavevmode\vbox{%
+ \setbox0=\hbox{#3}\setbox2=\hbox{#1}%
+ \dimen0=\ht0 \advance\dimen0 by\dp2 \advance\dimen0 by#2\relax
+ \offinterlineskip
+ \halign {##\cr
+ \hidewidth\slantcorrection{\dimen0}\box2 \hidewidth\cr
+ \noalign{\kern#2}\box0 \cr}}%
+ \fi
+}
+\DeclareRobustCommand \accentbelow [3]{%
+ \def\tmpa{#3}%
+ \ifx \tmpa\empty #1\else
+ \leavevmode\vtop{%
+ \setbox0=\hbox{#3}\setbox2=\hbox{#1}%
+ \dimen0=-\dp0 \advance\dimen0 by-\ht2 \advance\dimen0 by-#2\relax
+ \offinterlineskip
+ \halign {##\cr \box0 \cr\noalign{\kern#2}%
+ \hidewidth \slantcorrection{\dimen0}%
+ \dimen0=\dp2 \ifdim\dimen0<.2ex \dimen0=.2ex \fi
+ \vbox to\dimen0{\hbox{\box2}\vss}\hidewidth\cr}}%
+ \fi
+}
+\def\slantcorrection #1{\dimen0=#1\relax
+ \dimen0 =\strip@pt \fontdimen1\the\font \dimen0
+ \kern 2\dimen0
+}
+
+
+%%%% Options = OFS-style files %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\OFSprocessoptions=\relax
+\DeclareOption *{\input{\CurrentOption.sty}}
+\ProcessOptions\relax
+\let\OFSprocessoptions=\undefined
+
+
+
+
diff --git a/macros/generic/ofs/readme.ofs b/macros/generic/ofs/readme.ofs
new file mode 100644
index 0000000000..12b204039f
--- /dev/null
+++ b/macros/generic/ofs/readme.ofs
@@ -0,0 +1,104 @@
+
+The OFS Macro - Olsak's Font System
+===================================
+
+Files:
+------
+readme.ofs ... this file
+ofsdoc-e.tex, pdf, ps ... documentation (English)
+ofsdoc.tex, pdf, ps ... documentation (Czech language)
+ofs.tex ... the OFS macro for plain
+ofsdef.tex ... default declaration file (for plain)
+ofs-8z.tex, ofs-8t.tex ... encodings declaration files (for plain)
+ofs-<encoding>.tex ... another encodings declaration files (for plain)
+ofstest.tex ... interactive macro to print samples,
+ font catalogues, tables etc.
+a35.tex ... declaration file for standard 35 fonts
+ by Adobe (for plain)
+a117.tex ... declaration file for standard 117 Adobe fonts
+ofs.sty ... the OFS macro for LaTeX
+a35.sty ... declaration file for standard 35 fonts
+ by Adobe (for LaTeX)
+amsfn.tex ... math declaration file for AMS fonts
+mtfn.tex, txfn.tex ... math declaration files for MathTimes and TXfonts
+ofs-slt.tex,ps,pdf ... the article about OFS from SLT 2002 proceedings
+examples/ ... directory with examples for OFS (for plain)
+storm/ ... new declaration files for Storm fonts support
+
+License:
+-------
+
+The OFS package may be used by everybody without any licension fees.
+Everybody can re-distribute this package, if no changes in files
+"readme.ofs", "ofs.tex", "ofsdef.tex", "ofs.sty", "ofs-8z.tex",
+"ofs-8t.tex", "a35.tex", "a35.sty", "ofsdoc.tex", "ofsdoc-e.tex",
+are done and all these files are included in the new
+distribution. Only the author has a right to change of these files and
+to change of version of this package. If you need to change the
+contents of some file mentioned above, you have to rename it. This
+package is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY.
+
+Prague 08/16/2001 Petr Olsak
+ the author
+
+The master source of this package maintained by author:
+-------------------------------------------------------
+
+ftp://math.feld.cvut.cz/pub/olsak/ofs/
+
+Bug report will be welcome on:
+olsak@math.feld.cvut.cz
+
+.............................................................................
+
+
+Makro OFS - Olsakuv Fontovy system
+==================================
+
+Soubory:
+-------
+readme.ofs ... tento soubor
+ofsdoc.tex, pdf, ps ... dokumentace (cesky)
+ofsdoc-e.tex, pdf, ps ... dokumentace (anglicky)
+ofs.tex ... makro OFS pro plain
+ofsdef.tex ... defaultni deklaracni soubor (pro plain)
+ofs-8z.tex, ofs-8t.tex ... deklaracni soubory kodovani (pro plain)
+ofs-<kodovani>.tex ... dalsi deklaracni soubory kodovani (pro plain)
+ofstest.tex ... interaktivni makro na tisk vzorku, fontovych
+ katalogu, tabulek atd.
+a35.tex ... deklaracni soubor pro standardnich 35 fontu
+ od Adobe pritomnych v kazdem RIPu (pro plain)
+a117.tex ... deklaracni soubor pro standardnich 117 Adobe fontu
+ofs.sty ... makro OFS pro LaTeX
+a35.sty ... deklaracni soubor pro standardnich 35 fontu
+ od Adobe pritomnych v kazdem RIPu (pro LaTeX)
+amsfn.tex ... deklarace matematiky pro AMS fonty
+mtfn.tex, txfn.tex ... deklarace matematiky pro MathTimes a TX fonty
+ofs-slt.tex,ps,pdf ... clanek o OFS ze sborniku SLT 2002
+examples/ ... adresar s priklady pro OFS (pro plain)
+storm/ ... nove deklaracni soubory pro Stormovy fonty
+
+Licence:
+-------
+
+Balicek OFS muze pouzivat kdokoli bez licencnich poplatku. Kdokoli je
+rovnez muze distribuovat, pokud nezmeni obsah zadneho ze souboru
+"readme.ofs", "ofs.tex", "ofsdef.tex", "ofs.sty", "ofs-8z.tex",
+"ofs-8t.tex", "a35.tex", "a35.sty", "ofsdoc.tex", "ofsdoc-e.tex" a
+vsechny tyto soubory budou v distribuci pritomny.
+Pravo na zmenu uvedenych souboru a tim zmenu verzi zustava vyhradne
+autorovi. Pokud potrebujete zmenit obsah nektereho z uvedenych
+souboru, nazvete jej jinak. Balicek je poskytovan s pranim,
+aby byl uzitecny, ale BEZ JAKEKOLI ZARUKY.
+
+V Praze dne 16. 8. 2001 autor: Petr Olsak
+
+
+Tento balicek je autorem udrzovan na URL:
+-----------------------------------------
+
+ftp://math.feld.cvut.cz/pub/olsak/ofs/
+
+Prpominky a upozorneni na chyby jsou vitany na:
+olsak@math.feld.cvut.cz
diff --git a/macros/generic/ofs/tex/decl/a117.tex b/macros/generic/ofs/tex/decl/a117.tex
new file mode 100644
index 0000000000..cdca5aba8f
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/a117.tex
@@ -0,0 +1,223 @@
+% The file a117.tex (C) Petr Olsak, Jan 2004
+% 117 standard PostScript fonts (level 3) from Adobe declared for OFS macro
+
+% After "\input a117", you can use
+%
+% \showfonts ... to show the loaded fontfamilies on terminal
+% \fontusage ... to show the usage of new TeX macros on terminal
+% \input ofs-8z ... macros for spec. characters and accented sequences
+%
+% See ofsdoc.tex manual for more details.
+% This file is a part of OFS macro package by Petr Olsak.
+
+\ifx \ofsdeclarefamily\undefined \input ofs \fi
+\protectreading a117.tex % This is part of OFS package
+
+\input a35 % 35 standard PostScript fonts (level 2)
+
+\ofsputfamlist {^^Ja117.tex:}
+
+\ofsdeclarefamily [AlbertusMT] {% -------------------- AlbertusMT
+ \loadtextfam () pabr\fotenc;%
+ ;%
+ (Italic) pabri\fotenc;%
+ ;;%
+ \newvariant0 \lr (Light) pabl\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [AntiqueOlive] {% ------------------ AntiqueOlive
+ \loadtextfam (Roman) paor\fotenc;%
+ (Bold) paob\fotenc;%
+ (Italic) paori\fotenc;%
+ ;;%
+ \newvariant4 \kr (Compact) paoc\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Bodoni] {% ------------------------ Bodoni
+ \loadtextfam () pbdr\fotenc;%
+ (Bold) pbdb\fotenc;%
+ (Italic) pbdri\fotenc;%
+ (BoldItalic) pbdri\fotenc;;%
+ \newvariant4 \kr (Poster) pbdp\fotenc;;%
+ \newvariant6 \crm (PosterCompressed) pbdpc\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Carta] {% ------------------------- Carta
+ \loadtextfam rpcar;%
+ ;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Clarendon] {% --------------------- Clarendon
+ \loadtextfam () pcdr\fotenc;%
+ (Bold) pcdb\fotenc;%
+ ;%
+ ;;%
+ \newvariant0 \lr (Light) pcdl\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [CooperBlack] {% ------------------ CooperBlack
+ \loadtextfam () pcbr\fotenc;%
+ ;%
+ (Italic) pcbri\fotenc;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Copperplate] {% ------------------ Copperplate
+ \loadtextfam (ThirtyTwoBC) pcpr\fotenc;%
+ (ThirtyThreeBC) pcpb\fotenc;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Coronet] {% ----------------------- Coronet
+ \loadtextfam (Regular) pcor\fotenc;%
+ ;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Eurostile] {% --------------------- Eurostile
+ \loadtextfam () peur\fotenc;%
+ (Bold) peub\fotenc;%
+ ;%
+ ;;%
+ \newvariant8 \erm (ExtendedTwo) peurx\fotenc;;%
+ \newvariant9 \ebf (BoldExtendedTwo) peubx\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [GillSans] {% ---------------------- GillSans
+ \loadtextfam () pgsr\fotenc;%
+ (Bold) pgsb\fotenc;%
+ (Italic) pgsri\fotenc;%
+ (BoldItalic) pgsbi\fotenc;;%
+ \newvariant0 \lr (Light) pgsl\fotenc;;%
+ \newvariant1 \li (LightItalic) pgsli\fotenc;;%
+ \newvariant4 \kr (ExtraBold) pgsbx\fotenc;;%
+ \newvariant6 \crm (Condensed) pgsrc\fotenc;;%
+ \newvariant7 \cbf (BoldCondensed) pgsbc\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Goudy] {% ------------------------- Goudy
+ \loadtextfam () pgyr\fotenc;%
+ (Bold) pgyb\fotenc;%
+ (Italic) pgyri\fotenc;%
+ (BoldItalic) pgybi\fotenc;;%
+ \newvariant4 \kr (ExtraBold) pgybx\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [HelveticaCondensed] {% ------------ HelveticaCondensed
+ \loadtextfam () phvrc\fotenc;%
+ (Bold) phvbc\fotenc;%
+ (Oblique) phvoc\fotenc;%
+ (BoldObl) phvboc\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [JoannaMT] {% ---------------------- JoannaMT
+ \loadtextfam () pjmr\fotenc;%
+ (Bold) pjmb\fotenc;%
+ (Italic) pjmri\fotenc;%
+ (BoldItalic) pjmbi\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [LetterGothic] {% ------------------ LetterGothic
+ \loadtextfam () plgr\fotenc;%
+ (Bold) plgb\fotenc;%
+ (Slanted) plgrs\fotenc;%
+ (BoldSlanted) plgbs\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [LubalinGraph] {% ------------------ LubalinGraph
+ \loadtextfam (Book) plrb\fotenc;%
+ (Demi) plrd\fotenc;%
+ (BookOblique) plrbo\fotenc;%
+ (DemiOblique) plrdo\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Marigold] {% ---------------------- Marigold
+ \loadtextfam () pmrr\fotenc;%
+ ;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [MonaLisa] {% ---------------------- MonaLisa
+ \loadtextfam (Recut) pmlr\fotenc;%
+ ;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Optima] {% ------------------------ Optima
+ \loadtextfam () popr\fotenc;%
+ (Bold) popb\fotenc;%
+ (Italic) popri\fotenc;%
+ (BoldItalic) popbi\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Oxford] {% ------------------------ Oxford
+ \loadtextfam () poxr\fotenc;%
+ ;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [StempelGaramond] {% --------------- StempelGaramond
+ \loadtextfam (Roman) psgr\fotenc;%
+ (Bold) psgb\fotenc;%
+ (Italic) psgri\fotenc;%
+ (BoldItalic) psgbi\fotenc;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Tekton] {% ------------------------ Tekton
+ \loadtextfam () ptkr\fotenc;%
+ ;%
+ ;%
+ ;;%
+}
+\registerenc: 8z
+
+\ofsdeclarefamily [Univers] {% ----------------------- Univers
+ \loadtextfam () punr\fotenc;%
+ (Bold) punb\fotenc;%
+ (Oblique) punro\fotenc;%
+ (BoldOblique) punbo\fotenc;;%
+ \newvariant0 \lr (Light) punl\fotenc;;%
+ \newvariant1 \li (LightOblique) punlo\fotenc;;%
+ \newvariant4 \crm (Condensed) punc\fotenc;;%
+ \newvariant5 \cbf (CondensedBold) puncb\fotenc;;%
+ \newvariant6 \cit (CondensedOblique) punco\fotenc;;%
+ \newvariant7 \cbi (CondensedBoldOblique) puncbo\fotenc;;%
+ \newvariant8 \ebf (BoldExt) punbx\fotenc;;%
+ \newvariant9 \ebi (BoldExtObl) punbxo\fotenc;;%
+}
+\registerenc: 8z
+
+\endinput
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/decl/a35.tex b/macros/generic/ofs/tex/decl/a35.tex
new file mode 100644
index 0000000000..88bef46c0d
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/a35.tex
@@ -0,0 +1,95 @@
+% The file a35.tex (C) Petr Olsak, Jun 2001
+% 35 standard PostScript fonts from Adobe declared for OFS macro
+
+% After "\input a35", you can use
+%
+% \showfonts ... to show the loaded fontfamilies on terminal
+% \fontusage ... to show the usage of new TeX macros on terminal
+% \input ofs-8z ... macros for spec. characters and accented sequences
+%
+% See ofsdoc.tex manual for more details.
+% This file is a part of OFS macro package by Petr Olsak.
+
+\ifx \ofsdeclarefamily\undefined \input ofs \fi
+\protectreading a35.tex % This is part of OFS package
+
+\ofsputfamlist {^^Ja35.tex:}
+
+%%% Times, Helvetica, Courier is in OFS defaults
+
+\ofsdeclarefamily [AvantGarde] {% -------------------- AvantGarde
+ \loadtextfam (Book) pagk\fotenc;%
+ (Demi) pagd\fotenc;%
+ (BookOblique) pagko\fotenc;%
+ (DemiOblique) pagdo\fotenc;\defaultextraenc;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\ofsdeclarefamily [Bookman] {% ----------------------- Bookman
+ \loadtextfam (Light) pbkl\fotenc;%
+ (Demi) pbkd\fotenc;%
+ (LightItalic) pbkli\fotenc;%
+ (DemiItalic) pbkdi\fotenc;\defaultextraenc;%
+ \def\TeX{T\kern-.14em\lower.4ex\hbox{E}\kern-.125emX}%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\ofsdeclarefamily [NewCentury] {% -------------------- NewCenturySchlbk
+ \loadtextfam (Roman) pncr\fotenc;%
+ pncb\fotenc;%
+ pncri\fotenc;%
+ pncbi\fotenc;\defaultextraenc;%
+ \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\ofsdeclarefamily [Palatino] {% ---------------------- Palatino
+ \loadtextfam (Roman) pplr\fotenc;%
+ pplb\fotenc;%
+ pplri\fotenc;%
+ pplbi\fotenc;\defaultextraenc;%
+ \def\TeX{T\kern-.1667em\lower.3333ex\hbox{E}\kern-.125emX}%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+%%% The variants of \TeX macros above
+%%% was developed by Ivo Jancik
+
+\ofsdeclarefamily [ZapfChancery] {% ------------------ ZapfChancery
+ \loadtextfam (MediumItalic) pzcmi\fotenc;%
+ ;%
+ (MediumItalic) pzcmi\fotenc;%
+ ;\defaultextraenc;%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\ofsdeclarefamily [ZapfDingbats] {% ------------------ ZapfDingbats
+ \loadtextfam pzdr;%
+ ;%
+ ;%
+ ;;%
+}
+\ofsdeclarefamily [Symbol] {% ------------------------ Symbol
+ \loadtextfam psyr;%
+ ;%
+ (Slanted) psyro;% slanted geometrically
+ ;;%
+}
+\endinput
+
diff --git a/macros/generic/ofs/tex/decl/allfonts.tex b/macros/generic/ofs/tex/decl/allfonts.tex
new file mode 100644
index 0000000000..c45ae0fb45
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/allfonts.tex
@@ -0,0 +1,14 @@
+% This file may be used by OFS (Olsak Font System)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The contents of this file is depend on the fonts installed in your TeX
+% system. If you install some fonts supported by OFS (or you write
+% the OFS support yourself), add the \input <file> in the following list:
+
+\input a35
+
+% example:
+% \input skatalog
+% after you install the fonts from Storm Type Foundry.
+%
+% See ofsdoc.tex for more information about OFS.
diff --git a/macros/generic/ofs/tex/decl/amsfn.tex b/macros/generic/ofs/tex/decl/amsfn.tex
new file mode 100644
index 0000000000..c369007214
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/amsfn.tex
@@ -0,0 +1,134 @@
+% OFS: AMS fonts, declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+%% see more info at the end of this file
+
+\protectreading amsfn.tex % This is part of OFS package
+
+\def\loadAMSnormalmath{%
+ \loadCMnormalmath
+ \chardef\msamfam 8
+ \loadmathfam \msamfam [/msam]% MSAM, symbols from ASMTeX
+ \chardef\msbmfam 9
+ \loadmathfam \msbmfam [/msbm]% MSBM, symbols from AMSTeX
+ \lastfam =9
+}
+\def\loadAMSboldmath{%
+ \loadCMboldmath
+ \chardef\msamfam 8
+ \loadmathfam \msamfam [/msam]% MSAM, symbols from ASMTeX
+ \chardef\msbmfam 9
+ \loadmathfam \msbmfam [/msbm]% MSBM, symbols from AMSTeX
+ \lastfam =9
+}
+\def\setAMSmathchars{\mathencread ofs-ams;}
+
+\def\registerAMSfonts #1 {%
+ \registertfm #1 - #110 %
+ \registertfm #1 0pt-6pt #15 %
+ \registertfm #1 6pt-7pt #16 %
+ \registertfm #1 7pt-8pt #17 %
+ \registertfm #1 8pt-9pt #18 %
+ \registertfm #1 9pt-10pt #19 %
+ \registertfm #1 10pt-* #110 %
+}
+\registerAMSfonts msam %
+\registerAMSfonts msbm %
+\registerAMSfonts eufm %
+\registerAMSfonts eufb %
+\registerAMSfonts eurm %
+\registerAMSfonts eurb %
+\registerAMSfonts eusm %
+\registerAMSfonts eusb %
+
+\registertfm cmbsy - - % reset
+\registerAMSfonts cmbsy %
+\registertfm cmex - - % reset
+\registerAMSfonts cmex %
+\registertfm cmmib - - % reset
+\registerAMSfonts cmmib %
+
+\registertfm euex - euex10 %
+\registertfm euex 0pt-8pt euex7 %
+\registertfm euex 8pt-9pt euex8 %
+\registertfm euex 9pt-10pt euex9 %
+\registertfm euex 10pt-* euex10 %
+
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+You can use all AMS symbol sequences together with CM fonts in
+math formulae after:
+
+\input amsfn
+\def\fomenc{AMS}
+\setmath[//]
+
+You can add the Euler Fraktur to the math fonts by the following
+commands (before \setmath command):
+
+\addcmd\mathfonts {\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{m}\fi
+ \newmathfam\frakfam \loadmathfam\frakfam [/euf\tmpa]}
+\def\frak#1{{\fam\frakfam#1}}
+
+You can add the Euler Script to the math fonts:
+
+\addcmd\mathfonts {\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{m}\fi
+ \newmathfam\scriptfam \loadmathfam\scriptfam [/eus\tmpa]}
+\def\script#1{{\fam\scriptfam#1}}
+
+You can add the Euler Upright italic to the math fonts:
+
+\addcmd\mathfonts {\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{m}\fi
+ \newmathfam\upitfam \loadmathfam\upitfam [/eur\tmpa]}
+\def\upright#1{{\fam\upitfam#1}}
+
+You can replace standard CM operators \sum, \int, etc. by the
+operators from Euler extension font by the following commands:
+
+\addcmd\mathfonts{\newmathfam\euexfam \loadmathfam\euexfam [/euex]}
+\addcmd\mathchars{%
+ \mathchardef \ointop "1\hex\euexfam 48
+ \mathchardef \sum "1\hex\euexfam 50
+ \mathchardef \prod "1\hex\euexfam 51
+ \mathchardef \intop "1\hex\euexfam 52
+ \mathchardef \uprod "1\hex\euexfam 60
+ \edef \lbrace {\delimiter "4266\hex\euexfam 08 }%
+ \edef \rbrace {\delimiter "5267\hex\euexfam 09 }%
+ \let\{=\lbrace
+ \let\}=\rbrace
+ \mathchardef \letfharpoonup "3\hex\euexfam 18
+ \mathchardef \leftharpoondown "3\hex\euexfam 19
+ \mathchardef \rightharpoonup "3\hex\euexfam 1A
+ \mathchardef \rightharpoondown "3\hex\euexfam 1B
+ \mathchardef \leftarrow "3\hex\euexfam 20
+ \mathchardef \rightarrow "3\hex\euexfam 21
+ \mathchardef \leftrightarrow "3\hex\euexfam 24
+ \mathchardef \nearrow "3\hex\euexfam 25
+ \mathchardef \searrow "3\hex\euexfam 26
+ \mathchardef \Leftarrow "3\hex\euexfam 28
+ \mathchardef \Rightarrow "3\hex\euexfam 29
+ \mathchardef \Leftrightarrow "3\hex\euexfam 2C
+ \mathchardef \nwarrow "3\hex\euexfam 2D
+ \mathchardef \swarrow "3\hex\euexfam 2E
+ \mathchardef \infty "0\hex\euexfam 31
+ \edef \uparrow {\delimiter "3\hex\euexfam 22378 }%
+ \edef \downarrow {\delimiter "3\hex\euexfam 23379 }%
+ \edef \Uparrow {\delimiter "3\hex\euexfam 2A37E }%
+ \edef \Downarrow {\delimiter "3\hex\euexfam 2B37F }%
+ \edef \updownarrow {\delimiter "3\hex\euexfam 6C33F }%
+ \edef \Updownarrow {\delimiter "3\hex\euexfam 6D377 }%
+}
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/decl/mtfn.tex b/macros/generic/ofs/tex/decl/mtfn.tex
new file mode 100644
index 0000000000..85c742c3d2
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/mtfn.tex
@@ -0,0 +1,83 @@
+% This file declares the MathTimes fonts using OFS macros
+% See ofsdoc.tex (OFS -- Olsak's Font System) for more details
+% Remember that the MathTimes fonts is non free package.
+
+\protectreading mtfn.tex % This is part of OFS package
+
+\def\Timestext{Times}
+\def\iftimes{\ifx\currentfamily\Timestext}
+
+\def\loadMTnormalmath{%
+ \loadmathfam 0[-rm/]% Actual Roman font
+ \iftimes
+ \fontmessage { \space\space MathTimes used for MathItalics}%
+ \defaultskewchar=45
+ \loadmathfam 1[/mtmi]% MathTimes italic font for variables
+ \else
+ \fontmessage { \space\space \currentfamily-it used for MathItalics}%
+ \loadmathfam 1[-it/]% Actual Italic font for variables
+ \fi
+ \defaultskewchar=48
+ \loadmathfam 2[/mtsyn]% Symbols from MathTimes
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/mtex]% Extra symbols from MathTimes
+ \chardef\mtifam 4
+ \defaultskewchar=45
+ \loadmathfam \mtifam [/mtmi]% MathTimes italic (for greek)
+ \defaultskewchar=-1
+ \chardef \itfam 5
+ \loadmathfam \itfam [-it/]% Actual Italic
+ \chardef \bffam 6
+ \loadmathfam \bffam [-bf/]% Actual Bold font
+ \chardef \bifam 7
+ \loadmathfam \bifam [-bi/]% Actual Bold Italic font
+ \chardef \gufam 8
+ \loadmathfam \gufam [/mtgu]% MathTimes greek unslanted
+ \chardef \scrfam 9
+ \loadmathfam \scrfam [/mtms]% MathTimes script
+ \lastfam =9
+ \let\ttfam=\undefined
+}
+\def\loadMTboldmath{%
+ \loadmathfam 0[-bf/]% Actual Bold font
+ \iftimes
+ \fontmessage { \space\space MathTimes used for bold MathItalics}%
+ \defaultskewchar=45
+ \loadmathfam 1[/mtmib]% MathTimes Bold-Italic font
+ \else
+ \fontmessage { \space\space \currentfamily-bi used for bold MathItalics}%
+ \loadmathfam 1[-bi/]% Actual Bold-Italic font
+ \fi
+ \defaultskewchar=48
+ \loadmathfam 2[/mtsyb]% Bold symbols from MathTimes
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/mtexb]% Extra bold symbols from MathTimes
+ \chardef\bffam=0
+ \chardef \mtifam 4
+ \defaultskewchar=45
+ \loadmathfam \mtifam [/mtmib]% MathTimes bold italic (for greek)
+ \defaultskewchar=-1
+ \chardef\itfam 5 \chardef\bifam 5
+ \loadmathfam \bifam [-bi/]% Actual Bold Italic font
+ \chardef \itfam 6
+ \loadmathfam \bffam [-bf/]% Actual Bold font
+ \chardef \gufam 8
+ \loadmathfam \gufam [/mtgub]% MathTimes greek bold unslanted
+ \chardef \scrfam 9
+ \loadmathfam \scrfam [/mtmsb]% MathTimes script bold
+ \lastfam =9
+ \let\ttfam=\undefined
+}
+\def\setMTmathchars{\mathencread ofs-mt;}
+
+\def\cal{\fam\scrfam}
+
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/decl/ofsmtdef.tex b/macros/generic/ofs/tex/decl/ofsmtdef.tex
new file mode 100644
index 0000000000..4e1a31bdd4
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/ofsmtdef.tex
@@ -0,0 +1,15 @@
+% This is only wrapper file to mtfn.tex (for backward compatibility)
+
+\input mtfn.tex
+
+\endinput
+
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/decl/pantyk.tex b/macros/generic/ofs/tex/decl/pantyk.tex
new file mode 100644
index 0000000000..3710a57dc7
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/pantyk.tex
@@ -0,0 +1,127 @@
+% The file pantyk.tex (C) Petr Olsak, May 2004
+% Polish Antykwa ... OFS declaration file
+
+% After "\input pantyk", you can use
+%
+% \showfonts ... to show the loaded fontfamilies on terminal
+% \fontusage ... to show the usage of new TeX macros on terminal
+
+\ifx \ofsdeclarefamily\undefined \input ofs \fi
+\protectreading pantyk.tex % This is part of OFS package
+
+\ofsputfamlist {^^Jpantyk.tex:}
+
+\ofsdeclarefamily [AntykwaTorunska] {% --------------- AntykwaTorunska
+ \loadtextfam (Regular) \nowackienc-anttr;%
+ (Bold) \nowackienc-anttb;%
+ (Italic) \nowackienc-anttri;%
+ (BoldItalic) \nowackienc-anttbi;8x;%
+ \newvariant0 \lr (Light) \nowackienc-anttl;8x;%
+ \newvariant1 \li (LightItalic) \nowackienc-anttli;8x;%
+ \newvariant2 \mr (Medium) \nowackienc-anttm;8x;%
+ \newvariant3 \mi (MediumItalic) \nowackienc-anttmi;8x;%
+ \modifyenc 8z:antt;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\registerenc: 7t \registerenc: 8t \registerenc: 8q \registerenc: 8z
+\registerenc: 8y \registerenc: 7k
+\registerenc: 6a \registerenc: 6t \registerenc: 6c \registerenc: 8v
+
+\ofsdeclarefamily [AntykwaTorunskaCaps] {% ------- AntykwaTorunskaCaps
+ \loadtextfam (Regular) \nowackienc-anttrcap;%
+ (Bold) \nowackienc-anttbcap;%
+ (Italic) \nowackienc-anttricap;%
+ (BoldItalic) \nowackienc-anttbicap;8x;%
+ \newvariant0 \lr (Light) \nowackienc-anttlcap;8x;%
+ \newvariant1 \li (LightItalic) \nowackienc-anttlicap;8x;%
+ \newvariant2 \mr (Medium) \nowackienc-anttmcap;8x;%
+ \newvariant3 \mi (MediumItalic) \nowackienc-anttmicap;8x;%
+ \modifyenc 8z:antt;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\registerenc: 7t \registerenc: 8t \registerenc: 8q \registerenc: 8z
+\registerenc: 8y \registerenc: 7k
+\registerenc: 6a \registerenc: 6t \registerenc: 6c \registerenc: 8v
+
+\ofsdeclarefamily [AntykwaTorunskaCond] {% ------- AntykwaTorunskaCond
+ \loadtextfam (Regular) \nowackienc-anttcr;%
+ (Bold) \nowackienc-anttcb;%
+ (Italic) \nowackienc-anttcri;%
+ (BoldItalic) \nowackienc-anttcbi;8x;%
+ \newvariant0 \lr (Light) \nowackienc-anttcl;8x;%
+ \newvariant1 \li (LightItalic) \nowackienc-anttcli;8x;%
+ \newvariant2 \mr (Medium) \nowackienc-anttcm;8x;%
+ \newvariant3 \mi (MediumItalic) \nowackienc-anttcmi;8x;%
+ \modifyenc 8z:antt;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\registerenc: 7t \registerenc: 8t \registerenc: 8q \registerenc: 8z
+\registerenc: 8y \registerenc: 7k
+\registerenc: 6a \registerenc: 6t \registerenc: 6c \registerenc: 8v
+
+\ofsdeclarefamily [AntykwaTorunskaCondCaps] {% ---- AntykwaTorunskaCondCaps
+ \loadtextfam (Regular) \nowackienc-anttcrcap;%
+ (Bold) \nowackienc-anttcbcap;%
+ (Italic) \nowackienc-anttcricap;%
+ (BoldItalic) \nowackienc-anttcbicap;8x;%
+ \newvariant0 \lr (Light) \nowackienc-anttclcap;8x;%
+ \newvariant1 \li (LightItalic) \nowackienc-anttclicap;8x;%
+ \newvariant2 \mr (Medium) \nowackienc-anttcmcap;8x;%
+ \newvariant3 \mi (MediumItalic) \nowackienc-anttcmicap;8x;%
+ \modifyenc 8z:antt;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\registerenc: 7t \registerenc: 8t \registerenc: 8q \registerenc: 8z
+\registerenc: 8y \registerenc: 7k
+\registerenc: 6a \registerenc: 6t \registerenc: 6c \registerenc: 8v
+
+
+% Janusz Nowacki uses non standard tfm names. We need
+% to define a conversion table:
+
+\def\nowackienc{\csname nowacki:\fotenc\endcsname}
+\def\nowackidef#1 #2 {\expandafter \def \csname nowacki:#1\endcsname{#2}}
+
+\nowackidef 7t rm % CM fonts
+\nowackidef 8t ec % EC fonts
+\nowackidef 8q qx % polish QX
+\nowackidef 8z cs % czech CSfonts
+\nowackidef 8y texansi % Y&Y
+\nowackidef 7k wncy % wncyr fonts
+\nowackidef 6a t2a % cyrillic-t2a
+\nowackidef 6t t2b % cyrillic-t2b
+\nowackidef 6c t2c % cyrillic-t2c
+\nowackidef 8v t5 % vietnamese
+\nowackidef 8x exp % expert
+
+% The expert fonts are the same for Caps and Normal:
+
+\registertfm exp-anttrcap - exp-anttr
+\registertfm exp-anttbcap - exp-anttb
+\registertfm exp-anttricap - exp-anttri
+\registertfm exp-anttbicap - exp-anttbi
+\registertfm exp-anttlcap - exp-anttl
+\registertfm exp-anttlicap - exp-anttli
+\registertfm exp-anttmcap - exp-anttm
+\registertfm exp-anttmicap - exp-anttmi
+
+\registertfm exp-anttcrcap - exp-anttcr
+\registertfm exp-anttcbcap - exp-anttcb
+\registertfm exp-anttcricap - exp-anttcri
+\registertfm exp-anttcbicap - exp-anttcbi
+\registertfm exp-anttclcap - exp-anttcl
+\registertfm exp-anttclicap - exp-anttcli
+\registertfm exp-anttcmcap - exp-anttcm
+\registertfm exp-anttcmicap - exp-anttcmi
+
+\ofsdeclarefamily [AntykwaPoltawskiego] {% --------------- AntykwaPoltawskiego
+ \loadtextfam (Regular) antpr;%
+ (Bold) antpb;%
+ (Italic) antpri;%
+ (BoldItalic) antpbi;;%
+ \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
+}
+\registerenc: 8q
+
+
+\endinput
diff --git a/macros/generic/ofs/tex/decl/txfn.tex b/macros/generic/ofs/tex/decl/txfn.tex
new file mode 100644
index 0000000000..eb17ae6dd1
--- /dev/null
+++ b/macros/generic/ofs/tex/decl/txfn.tex
@@ -0,0 +1,262 @@
+% OFS: TX fonts, declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+%% see end of this file for more informations
+
+\protectreading txfn.tex % This is part of OFS package
+
+\ofsputfamlist {^^Jtxfn.tex:}
+
+\ofsdeclarefamily [TXRoman] {% ---------- TX fonts: Times Roman
+ \loadtextfam (Upright) txr\fotenc;%
+ txb\fotenc;%
+ txi\fotenc;%
+ txbi\fotenc;8c;%
+ \newvariant6 \sl (Slanted) txsl\fotenc;8c;%
+ \newvariant7 \bsl (BoldSlanted) txbsl\fotenc;8c;%
+ \newvariant8 \csc (Cap+SmallCap) txsc\fotenc;8c;%
+ \newvariant9 \bcsc (BoldCap+SmallCap) txbsc\fotenc;8c;%
+ \def\TeX{T\kern-.1667em\lower.3333ex\hbox{E}\kern-.125emX}%
+}
+\registerenc: 8t
+
+\ofsdeclarefamily [TXSans] {% ---------- TX fonts: Helvetica
+ \loadtextfam (Upright) txss\fotenc;%
+ txbss\fotenc;%
+ (Slanted) txsssl\fotenc;%
+ (BoldSlanted) txbsssl\fotenc;8c;%
+ \newvariant8 \csc (Cap+SmallCap) txsssc\fotenc;8c;%
+ \newvariant9 \bcsc (BoldCap+SmallCap) txbsssc\fotenc;8c;%
+ \def\TeX{T\kern-.12em\lower.4ex\hbox{E}\kern-0.09emX}%
+}
+\registerenc: 8t
+
+\ofsdeclarefamily [TXTypewriter] {% ------ TX fonts: Typewriter
+ \loadtextfam (Upright) txtt\fotenc;%
+ txbtt\fotenc;%
+ (Slanted) txttsl\fotenc;%
+ (BoldSlanted) txbttsl\fotenc;8c;%
+ \newvariant8 \csc (Cap+SmallCap) txttsc\fotenc;8c;%
+ \newvariant9 \bcsc (BoldCap+SmallCap) txbttsc\fotenc;8c;%
+ \let\TeX=\origTeX
+}
+\registerenc: 8t
+
+\registertfm txr8t - t1xr %
+\registertfm txb8t - t1xb %
+\registertfm txi8t - t1xi %
+\registertfm txbi8t - t1xbi %
+\registertfm txsl8t - t1xsl %
+\registertfm txbsl8t - t1xbsl %
+\registertfm txsc8t - t1xsc %
+\registertfm txbsc8t - t1xbsc %
+
+\registertfm txss8t - t1xss %
+\registertfm txbss8t - t1xbss %
+\registertfm txsssl8t - t1xsssl %
+\registertfm txbsssl8t - t1xbsssl %
+\registertfm txsssc8t - t1xsssc %
+\registertfm txbsssc8t - t1xbsssc %
+
+\registertfm txtt8t - t1xtt %
+\registertfm txbtt8t - t1xbtt %
+\registertfm txttsl8t - t1xttsl %
+\registertfm txbttsl8t - t1xbttsl %
+\registertfm txttsc8t - t1xttsc %
+\registertfm txbttsc8t - t1xbttsc %
+
+\registertfm txr8c - tcxr %
+\registertfm txb8c - tcxb %
+\registertfm txi8c - tcxi %
+\registertfm txbi8c - tcxbi %
+\registertfm txsl8c - tcxsl %
+\registertfm txbsl8c - tcxbsl %
+\registertfm txsc8c - tcxr %
+\registertfm txbsc8c - tcxb %
+
+\registertfm txss8c - tcxss %
+\registertfm txbss8c - tcxbss %
+\registertfm txsssl8c - tcxsssl %
+\registertfm txbsssl8c - tcxbsssl %
+\registertfm txsssc8c - tcxss %
+\registertfm txbsssc8c - tcxbss %
+
+\registertfm txtt8c - tcxtt %
+\registertfm txbtt8c - tcxbtt %
+\registertfm txttsl8c - tcxttsl %
+\registertfm txbttsl8c - tcxbttsl %
+\registertfm txttsc8c - tcxtt %
+\registertfm txbttsc8c - tcxbtt %
+
+\def\loadTXnormalmath{%
+ \loadmathfam 0[/txr]% Roman font
+ \defaultskewchar=128
+ \loadmathfam 1[/txmi]% Math Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/txsy]% Standard symbols
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/txex]% Standard extra symbols
+ \chardef\itfam 4
+ \loadmathfam \itfam [/txi]% Text Italic
+ \chardef\bffam 5
+ \loadmathfam \bffam [/txb]% Bold font
+ \chardef\bifam 6
+ \loadmathfam \bifam [/txbi]% Bold Italic
+ \chardef\msamfam 7
+ \loadmathfam \msamfam [/txsya]% MSAM, symbols from ASMTeX
+ \chardef\msbmfam 8
+ \loadmathfam \msbmfam [/txsyb]% MSBM, symbols from AMSTeX
+ \chardef\txsycfam 9
+ \loadmathfam \txsycfam [/txsyc]% New symbols from TX fonts
+ \chardef\txmiafam 10
+ \loadmathfam \txmiafam [/txmia]% Upright math italic
+ \chardef\txexafam 11
+ \loadmathfam \txexafam [/txexa]% Extra extra symbols
+ \let\slfam\undefined \let\ttfam\undefined
+ \lastfam =11 % four families for user
+}
+\def\loadTXboldmath{%
+ \loadmathfam 0[/txb]% Roman font
+ \defaultskewchar=127
+ \loadmathfam 1[/txbmi]% Math Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/txbsy]% Standard symbols
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/txbex]% Standard extra symbols
+ \chardef\itfam 4
+ \loadmathfam \itfam [/txbi]% Text Italic
+ \chardef\msamfam 7
+ \loadmathfam \msamfam [/txbsya]% MSAM, symbols from ASMTeX
+ \chardef\msbmfam 8
+ \loadmathfam \msbmfam [/txbsyb]% MSBM, symbols from AMSTeX
+ \chardef\txsycfam 9
+ \loadmathfam \txsycfam [/txbsyc]% New symbols from TX fonts
+ \chardef\txmiafam 10
+ \loadmathfam \txmiafam [/txbmia]% Upright math italic
+ \chardef\txexafam 11
+ \loadmathfam \txexafam [/txbexa]% Extra extra symbols
+ \chardef\bffam=0 \let\bifam=\itfam
+ \let\slfam\undefined \let\ttfam\undefined
+ \lastfam =11 % needs to be the same as in normalmath
+}
+\def\loadPXnormalmath{%
+ \loadmathfam 0[-rm/]% Roman font
+ \loadmathfam 1[-it/]% Math Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/txsy]% Standard symbols
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/txex]% Standard extra symbols
+ \chardef\mifam 4
+ \loadmathfam \mifam [/txmi]% Math Italic (greek symbols)
+ \chardef\bffam 5
+ \loadmathfam \bffam [-bf/]% Bold font
+ \chardef\bifam 6
+ \loadmathfam \bifam [-bi/]% Bold Italic
+ \chardef\msamfam 7
+ \loadmathfam \msamfam [/txsya]% MSAM, symbols from ASMTeX
+ \chardef\msbmfam 8
+ \loadmathfam \msbmfam [/txsyb]% MSBM, symbols from AMSTeX
+ \chardef\txsycfam 9
+ \loadmathfam \txsycfam [/txsyc]% New symbols from TX fonts
+ \chardef\txmiafam 10
+ \loadmathfam \txmiafam [/txmia]% Upright math italic
+ \chardef\txexafam 11
+ \loadmathfam \txexafam [/txexa]% Extra extra symbols
+ \chardef\rmsyfam 12
+ \loadmathfam \rmsyfam [/txr]% TX Roman font (for uppercase greek)
+ \let\slfam\undefined \let\ttfam\undefined
+ \lastfam =12 % three families for user
+}
+\def\loadPXboldmath{%
+ \loadmathfam 0[-bf/]% Roman font
+ \loadmathfam 1[-bi/]% Math Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/txbsy]% Standard symbols
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/txbex]% Standard extra symbols
+ \chardef\mifam 4
+ \loadmathfam \mifam [/txbmi]% Math Italic (greek symbols)
+ \chardef\msamfam 7
+ \loadmathfam \msamfam [/txbsya]% MSAM, symbols from ASMTeX
+ \chardef\msbmfam 8
+ \loadmathfam \msbmfam [/txbsyb]% MSBM, symbols from AMSTeX
+ \chardef\txsycfam 9
+ \loadmathfam \txsycfam [/txbsyc]% New symbols from TX fonts
+ \chardef\txmiafam 10
+ \loadmathfam \txmiafam [/txbmia]% Upright math italic
+ \chardef\txexafam 11
+ \loadmathfam \txexafam [/txbexa]% Extra extra symbols
+ \chardef\rmsyfam 12
+ \loadmathfam \rmsyfam [/txb]% TX Roman font (for uppercase greek)
+ \chardef\bffam=0 \chardef\bifam=1
+ \let\slfam\undefined \let\ttfam\undefined
+ \lastfam =12 % needs to be the same as in normalmath
+}
+\def\setTXmathchars{%
+ \mathencread ofs-ams;%
+ \mathencread ofs-tx;%
+}
+\def\setPXmathchars{%
+ \mathencread ofs-px;%
+ \mathencread ofs-ams;%
+ \mathencread ofs-tx;%
+ \addcmd \mathcharsback {\mathencread ofs-cm;}%
+}
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+After:
+
+\input txfn
+
+the new text families TXRoman, TXSans and TXTypewriter
+are declared and new math encodings TX and PX are declared.
+
+TXRoman: the same as Times, but more variants \sl, \bsl, \csc and
+ \bcsc are defined and extension font is used from TXfonts
+ (all text-companion symbols are available).
+TXSans: the same as Helvetica, but more variants \csc and \bcsc
+ are defined and extension font is used from TXfonts.
+TXTypewriter: Special typewriter-like family from TXfonts.
+
+TX: TXfonts will be used in all families of math fonts.
+PX: fam0 (roman) will be the same as current text roman variant,
+ fam1 (math-italic) will be the same as current text italic,
+ other math symbols will be used from TXfonts.
+
+Control sequences of all TX symbols (many hunderds) are available
+in math mode after \setmath[//] if \def\fomenc{TX} or
+\def\fomenc{PX} is used. See TX documentation for more information
+about names of these sequences and symbols shapes.
+
+Not all possible math alphabets are allocated. For example, typewriter
+and slanted variants are not allocated by default in order to keep the
+space of math families. You can add math alphabets by hand:
+
+* Sans serif bold slanted variant for math (usable for vectors):
+
+\addcmd\mathfonts {\newmathfam\vecfam \loadmathfam\vecfam [/txbsssl]}
+\addcmd\mathchars {\def\vec##1{{\fam\vecfam##1}}}
+
+* \sl variant for math (I don't know how it is usable):
+
+\addcmd\mathfonts {\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{}\fi
+ \newmathfam\slfam \loadmathfam\slfam [/tx\tmpa sl]}
+
+* \tt variant for math (I don't know how it is usable):
+
+\addcmd\mathfonts {\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{}\fi
+ \newmathfam\ttfam \loadmathfam\ttfam [/tx\tmpa tt]}
+
+See end of amsfn.tex file for more examples of math alphabets
+(Euler Fraktur, Euler Script etc.).
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6a.tex b/macros/generic/ofs/tex/enc/ofs-6a.tex
new file mode 100644
index 0000000000..ea20bc0400
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6a.tex
@@ -0,0 +1,259 @@
+% OFS: Declaration of Cyrrilic T2A encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mar 2004 Petr Olsak
+
+% 6a = T2A encoding
+
+\protectreading ofs-6a.tex % This is part of OFS package
+
+\accentdef \` * 6a {\accent 0}
+\accentdef \' * 6a {\accent 1}
+\accentdef \^ * 6a {\accent 2}
+\accentdef \~ * 6a {\accent 3}
+\accentdef \" * 6a {\accent 4}
+\accentdef \H * 6a {\accent 5}
+\accentdef \r * 6a {\accent 6}
+\accentdef \v * 6a {\accent 7}
+\accentdef \u * 6a {\accent 8}
+\accentdef \= * 6a {\accent 9}
+\accentdef \. * 6a {\accent 10}
+\accentdef \f * 6a {\accent 18}
+\accentdef \C * 6a {\accent 19}
+\accentdef \U * 6a {\accent 20}
+\accentdef \b * 6a {\accentbelow {\char9}{.15ex}}
+\accentdef \c * 6a {\accentbelow {\char11}{0pt}}
+\accentdef \d * 6a {\accentbelow {.}{.1ex}}
+\accentdef \k * 6a {\accentbelow {\char12}{0pt}}
+
+\let\promile=\relax
+\characterdef \promile 6a {\%\char 24 }
+\characterdef \pertenthousand 6a {\%\char 24\char 24 }
+
+\characterdef \textendash 6a 21
+\characterdef \cyrdash 6a 22
+\characterdef \textemdash 6a 22
+\characterdef \textcompwordmark 6a 23
+\characterdef \textvisiblespace 6a 32
+\characterdef \textdollar 6a 36
+\characterdef \textless 6a 60
+\characterdef \textgreater 6a 62
+\characterdef \textbackslash 6a 92
+\characterdef \textasciicircum 6a 94
+\characterdef \textunderscore 6a 95
+\characterdef \textbraceleft 6a 123
+\characterdef \textbar 6a 124
+\characterdef \textbraceright 6a 125
+\characterdef \textasciitilde 6a 126
+\characterdef \textnumero 6a 157
+\characterdef \textcurrency 6a 158
+\characterdef \textsection 6a 159
+\characterdef \textquotedbl 6a 34
+\characterdef \textquoteleft 6a 96
+\characterdef \textquoteright 6a 39
+\characterdef \textquotedblleft 6a 16
+\characterdef \textquotedblright 6a 17
+\characterdef \quotedblbase 6a 189
+\characterdef \CYRpalochka 6a 13
+\characterdef \cyrlangle 6a 14
+\characterdef \cyrrangle 6a 15
+\characterdef \guillemotleft 6a 190
+\characterdef \guillemotright 6a 191
+\characterdef \dotlessi 6a 25
+\characterdef \dotlessj 6a 26
+
+\let\i=\dotlessi \let\j=\dotlessj
+\accentdef \. i 6a `\i
+\accentdef \` i 6a {\accent0 \i}
+\accentdef \` {\i} 6a {\accent0 \i}
+\accentdef \' i 6a {\accent1 \i}
+\accentdef \' {\i} 6a {\accent1 \i}
+\accentdef \^ i 6a {\accent2 \i}
+\accentdef \^ {\i} 6a {\accent2 \i}
+\accentdef \" i 6a {\accent4 \i}
+\accentdef \" {\i} 6a {\accent4 \i}
+
+\characterdef \CYRA 6a 192
+\characterdef \cyra 6a 224
+\characterdef \CYRB 6a 193
+\characterdef \cyrb 6a 225
+\characterdef \CYRV 6a 194
+\characterdef \cyrv 6a 226
+\characterdef \CYRG 6a 195
+\characterdef \cyrg 6a 227
+\characterdef \CYRD 6a 196
+\characterdef \cyrd 6a 228
+\characterdef \CYRE 6a 197
+\characterdef \cyre 6a 229
+\characterdef \CYRZH 6a 198
+\characterdef \cyrzh 6a 230
+\characterdef \CYRZ 6a 199
+\characterdef \cyrz 6a 231
+\characterdef \CYRI 6a 200
+\characterdef \cyri 6a 232
+\characterdef \CYRISHRT 6a 201
+\characterdef \cyrishrt 6a 233
+\characterdef \CYRK 6a 202
+\characterdef \cyrk 6a 234
+\characterdef \CYRL 6a 203
+\characterdef \cyrl 6a 235
+\characterdef \CYRM 6a 204
+\characterdef \cyrm 6a 236
+\characterdef \CYRN 6a 205
+\characterdef \cyrn 6a 237
+\characterdef \CYRO 6a 206
+\characterdef \cyro 6a 238
+\characterdef \CYRP 6a 207
+\characterdef \cyrp 6a 239
+\characterdef \CYRR 6a 208
+\characterdef \cyrr 6a 240
+\characterdef \CYRS 6a 209
+\characterdef \cyrs 6a 241
+\characterdef \CYRT 6a 210
+\characterdef \cyrt 6a 242
+\characterdef \CYRU 6a 211
+\characterdef \cyru 6a 243
+\characterdef \CYRF 6a 212
+\characterdef \cyrf 6a 244
+\characterdef \CYRH 6a 213
+\characterdef \cyrh 6a 245
+\characterdef \CYRC 6a 214
+\characterdef \cyrc 6a 246
+\characterdef \CYRCH 6a 215
+\characterdef \cyrch 6a 247
+\characterdef \CYRSH 6a 216
+\characterdef \cyrsh 6a 248
+\characterdef \CYRSHCH 6a 217
+\characterdef \cyrshch 6a 249
+\characterdef \CYRHRDSN 6a 218
+\characterdef \cyrhrdsn 6a 250
+\characterdef \CYRERY 6a 219
+\characterdef \cyrery 6a 251
+\characterdef \CYRSFTSN 6a 220
+\characterdef \cyrsftsn 6a 252
+\characterdef \CYREREV 6a 221
+\characterdef \cyrerev 6a 253
+\characterdef \CYRYU 6a 222
+\characterdef \cyryu 6a 254
+\characterdef \CYRYA 6a 223
+\characterdef \cyrya 6a 255
+\characterdef \CYRGUP 6a 128
+\characterdef \cyrgup 6a 160
+\characterdef \CYRGHCRS 6a 129
+\characterdef \cyrghcrs 6a 161
+\characterdef \CYRDJE 6a 130
+\characterdef \cyrdje 6a 162
+\characterdef \CYRTSHE 6a 131
+\characterdef \cyrtshe 6a 163
+\characterdef \CYRSHHA 6a 132
+\characterdef \cyrshha 6a 164
+\characterdef \CYRZHDSC 6a 133
+\characterdef \cyrzhdsc 6a 165
+\characterdef \CYRZDSC 6a 134
+\characterdef \cyrzdsc 6a 166
+\characterdef \CYRLJE 6a 135
+\characterdef \cyrlje 6a 167
+\characterdef \CYRYI 6a 136
+\characterdef \cyryi 6a 168
+\characterdef \CYRKDSC 6a 137
+\characterdef \cyrkdsc 6a 169
+\characterdef \CYRKBEAK 6a 138
+\characterdef \cyrkbeak 6a 170
+\characterdef \CYRKVCRS 6a 139
+\characterdef \cyrkvcrs 6a 171
+\characterdef \CYRAE 6a 140
+\characterdef \cyrae 6a 172
+\characterdef \CYRNDSC 6a 141
+\characterdef \cyrndsc 6a 173
+\characterdef \CYRNG 6a 142
+\characterdef \cyrng 6a 174
+\characterdef \CYRDZE 6a 143
+\characterdef \cyrdze 6a 175
+\characterdef \CYROTLD 6a 144
+\characterdef \cyrotld 6a 176
+\characterdef \CYRSDSC 6a 145
+\characterdef \cyrsdsc 6a 177
+\characterdef \CYRUSHRT 6a 146
+\characterdef \cyrushrt 6a 178
+\characterdef \CYRY 6a 147
+\characterdef \cyry 6a 179
+\characterdef \CYRYHCRS 6a 148
+\characterdef \cyryhcrs 6a 180
+\characterdef \CYRHDSC 6a 149
+\characterdef \cyrhdsc 6a 181
+\characterdef \CYRDZHE 6a 150
+\characterdef \cyrdzhe 6a 182
+\characterdef \CYRCHVCRS 6a 151
+\characterdef \cyrchvcrs 6a 183
+\characterdef \CYRCHRDSC 6a 152
+\characterdef \cyrchrdsc 6a 184
+\characterdef \CYRIE 6a 153
+\characterdef \cyrie 6a 185
+\characterdef \CYRSCHWA 6a 154
+\characterdef \cyrschwa 6a 186
+\characterdef \CYRNJE 6a 155
+\characterdef \cyrnje 6a 187
+\characterdef \CYRYO 6a 156
+\characterdef \cyryo 6a 188
+\characterdef \CYRII 6a 73
+\characterdef \cyrii 6a 105
+\characterdef \CYRJE 6a 74
+\characterdef \cyrje 6a 106
+\characterdef \CYRQ 6a 81
+\characterdef \cyrq 6a 113
+\characterdef \CYRW 6a 87
+\characterdef \cyrw 6a 119
+
+\accentdef \" \CYRE 6a 156
+\accentdef \" \cyre 6a 188
+\accentdef \U \CYRI 6a 201
+\accentdef \U \cyri 6a 233
+\accentdef \" \CYRII 6a 136
+\accentdef \" \cyrii 6a 168
+\accentdef \c \CYRZ 6a 134
+\accentdef \c \cyrz 6a 166
+\accentdef \k \CYRS 6a 145
+\accentdef \k \cyrs 6a 177
+\accentdef \U \CYRU 6a 146
+\accentdef \U \cyru 6a 178
+
+%%% lccodes, uccodes:
+
+\modifydef 6a:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodesloop ^^a0^^bc^^80% from \cyrgup to \cyryo, first cap: \CYRGUP
+ \lccodesloop ^^e0^^ff^^c0% from \cyra to \cyrya, first cap: \CYRA
+ \def\lccodesback {\zerolccodes ^^80^^ff}%
+}
+
+
+%%% The CM font metric mapping:
+
+\registerECfont cmr6a larm %
+\registerECfont cmbx6a labx %
+\registerECfont cmti6a lati %
+\registerECfont cmbxti6a labi %
+\registerECfont cmsl6a lasl %
+\registerECfont cmbxsl6a labl %
+
+\registerECfont cmss6a lass %
+\registerECfont cmssbx6a lasx %
+\registerECfont cmssi6a lasi %
+\registerECfont cmssbxti6a laso %
+
+\registerECTTfont cmtt6a latt %
+\registerECTTfont cmitt6a lait %
+\registerECTTfont cmsltt6a last %
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6c.tex b/macros/generic/ofs/tex/enc/ofs-6c.tex
new file mode 100644
index 0000000000..f3a2ff2230
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6c.tex
@@ -0,0 +1,249 @@
+% OFS: Declaration of Cyrrilic T2A encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mar 2004 Petr Olsak
+
+% 6c = T2C encoding
+
+\protectreading ofs-6c.tex % This is part of OFS package
+
+\accentdef \` * 6c {\accent 0}
+\accentdef \' * 6c {\accent 1}
+\accentdef \^ * 6c {\accent 2}
+\accentdef \~ * 6c {\accent 3}
+\accentdef \" * 6c {\accent 4}
+\accentdef \H * 6c {\accent 5}
+\accentdef \r * 6c {\accent 6}
+\accentdef \v * 6c {\accent 7}
+\accentdef \u * 6c {\accent 8}
+\accentdef \= * 6c {\accent 9}
+\accentdef \. * 6c {\accent 10}
+\accentdef \f * 6c {\accent 18}
+\accentdef \C * 6c {\accent 19}
+\accentdef \U * 6c {\accent 20}
+\accentdef \b * 6c {\accentbelow {\char9}{.15ex}}
+\accentdef \c * 6c {\accentbelow {\char11}{0pt}}
+\accentdef \d * 6c {\accentbelow {.}{.1ex}}
+\accentdef \k * 6c {\accentbelow {\char12}{0pt}}
+
+\let\promile=\relax
+\characterdef \promile 6c {\%\char 24 }
+\characterdef \pertenthousand 6c {\%\char 24\char 24 }
+
+\characterdef \textendash 6c 21
+\characterdef \cyrdash 6c 22
+\characterdef \textemdash 6c 22
+\characterdef \textcompwordmark 6c 23
+\characterdef \textvisiblespace 6c 32
+\characterdef \textdollar 6c 36
+\characterdef \textless 6c 60
+\characterdef \textgreater 6c 62
+\characterdef \textbackslash 6c 92
+\characterdef \textasciicircum 6c 94
+\characterdef \textunderscore 6c 95
+\characterdef \textbraceleft 6c 123
+\characterdef \textbar 6c 124
+\characterdef \textbraceright 6c 125
+\characterdef \textasciitilde 6c 126
+\characterdef \textnumero 6c 157
+\characterdef \textcurrency 6c 158
+\characterdef \textsection 6c 159
+\characterdef \textquotedbl 6c 34
+\characterdef \textquoteleft 6c 96
+\characterdef \textquoteright 6c 39
+\characterdef \textquotedblleft 6c 16
+\characterdef \textquotedblright 6c 17
+\characterdef \quotedblbase 6c 189
+\characterdef \CYRpalochka 6c 13
+\characterdef \cyrlangle 6c 14
+\characterdef \cyrrangle 6c 15
+\characterdef \guillemotleft 6c 190
+\characterdef \guillemotright 6c 191
+\characterdef \dotlessi 6c 25
+\characterdef \dotlessj 6c 26
+
+\let\i=\dotlessi \let\j=\dotlessj
+\accentdef \. i 6c `\i
+\accentdef \` i 6c {\accent0 \i}
+\accentdef \` {\i} 6c {\accent0 \i}
+\accentdef \' i 6c {\accent1 \i}
+\accentdef \' {\i} 6c {\accent1 \i}
+\accentdef \^ i 6c {\accent2 \i}
+\accentdef \^ {\i} 6c {\accent2 \i}
+\accentdef \" i 6c {\accent4 \i}
+\accentdef \" {\i} 6c {\accent4 \i}
+
+\characterdef \CYRA 6c 192
+\characterdef \cyra 6c 224
+\characterdef \CYRB 6c 193
+\characterdef \cyrb 6c 225
+\characterdef \CYRV 6c 194
+\characterdef \cyrv 6c 226
+\characterdef \CYRG 6c 195
+\characterdef \cyrg 6c 227
+\characterdef \CYRD 6c 196
+\characterdef \cyrd 6c 228
+\characterdef \CYRE 6c 197
+\characterdef \cyre 6c 229
+\characterdef \CYRZH 6c 198
+\characterdef \cyrzh 6c 230
+\characterdef \CYRZ 6c 199
+\characterdef \cyrz 6c 231
+\characterdef \CYRI 6c 200
+\characterdef \cyri 6c 232
+\characterdef \CYRISHRT 6c 201
+\characterdef \cyrishrt 6c 233
+\characterdef \CYRK 6c 202
+\characterdef \cyrk 6c 234
+\characterdef \CYRL 6c 203
+\characterdef \cyrl 6c 235
+\characterdef \CYRM 6c 204
+\characterdef \cyrm 6c 236
+\characterdef \CYRN 6c 205
+\characterdef \cyrn 6c 237
+\characterdef \CYRO 6c 206
+\characterdef \cyro 6c 238
+\characterdef \CYRP 6c 207
+\characterdef \cyrp 6c 239
+\characterdef \CYRR 6c 208
+\characterdef \cyrr 6c 240
+\characterdef \CYRS 6c 209
+\characterdef \cyrs 6c 241
+\characterdef \CYRT 6c 210
+\characterdef \cyrt 6c 242
+\characterdef \CYRU 6c 211
+\characterdef \cyru 6c 243
+\characterdef \CYRF 6c 212
+\characterdef \cyrf 6c 244
+\characterdef \CYRH 6c 213
+\characterdef \cyrh 6c 245
+\characterdef \CYRC 6c 214
+\characterdef \cyrc 6c 246
+\characterdef \CYRCH 6c 215
+\characterdef \cyrch 6c 247
+\characterdef \CYRSH 6c 216
+\characterdef \cyrsh 6c 248
+\characterdef \CYRSHCH 6c 217
+\characterdef \cyrshch 6c 249
+\characterdef \CYRHRDSN 6c 218
+\characterdef \cyrhrdsn 6c 250
+\characterdef \CYRERY 6c 219
+\characterdef \cyrery 6c 251
+\characterdef \CYRSFTSN 6c 220
+\characterdef \cyrsftsn 6c 252
+\characterdef \CYREREV 6c 221
+\characterdef \cyrerev 6c 253
+\characterdef \CYRYU 6c 222
+\characterdef \cyryu 6c 254
+\characterdef \CYRYA 6c 223
+\characterdef \cyrya 6c 255
+\characterdef \CYRPHK 6c 128
+\characterdef \cyrphk 6c 160
+\characterdef \CYRTETSE 6c 129
+\characterdef \cyrtetse 6c 161
+\characterdef \CYRTDSC 6c 130
+\characterdef \cyrtdsc 6c 162
+\characterdef \CYRGHK 6c 131
+\characterdef \cyrghk 6c 163
+\characterdef \CYRSHHA 6c 132
+\characterdef \cyrshha 6c 164
+\characterdef \CYRRDSC 6c 133
+\characterdef \cyrrdsc 6c 165
+\characterdef \CYRRTICK 6c 134
+\characterdef \cyrrtick 6c 166
+\characterdef \CYRABHDZE 6c 135
+\characterdef \cyrabhdze 6c 167
+\characterdef \CYRMDSC 6c 136
+\characterdef \cyrmdsc 6c 168
+\characterdef \CYRKDSC 6c 137
+\characterdef \cyrkdsc 6c 169
+\characterdef \CYRLDSC 6c 138
+\characterdef \cyrldsc 6c 170
+\characterdef \CYRKHCRS 6c 139
+\characterdef \cyrkhcrs 6c 171
+\characterdef \CYRLHK 6c 140
+\characterdef \cyrlhk 6c 172
+\characterdef \CYRNDSC 6c 141
+\characterdef \cyrndsc 6c 173
+\characterdef \CYRMHK 6c 142
+\characterdef \cyrmhk 6c 174
+\characterdef \CYRNHK 6c 143
+\characterdef \cyrnhk 6c 175
+\characterdef \CYROTLD 6c 144
+\characterdef \cyrotld 6c 176
+\characterdef \CYRABHCH 6c 145
+\characterdef \cyrabhch 6c 177
+\characterdef \CYRABHCHDSC 6c 146
+\characterdef \cyrabhchdsc 6c 178
+\characterdef \CYRSEMISFTSN 6c 147
+\characterdef \cyrsemisftsn 6c 179
+\characterdef \CYRISHRTDSC 6c 148
+\characterdef \cyrishrtdsc 6c 180
+\characterdef \CYRHDSC 6c 149
+\characterdef \cyrhdsc 6c 181
+\characterdef \CYRDZHE 6c 150
+\characterdef \cyrdzhe 6c 182
+\characterdef \CYRABHHA 6c 151
+\characterdef \cyrabhha 6c 183
+\characterdef \CYRCHRDSC 6c 152
+\characterdef \cyrchrdsc 6c 184
+\characterdef \CYRNLHK 6c 153
+\characterdef \cyrnlhk 6c 185
+\characterdef \CYRSCHWA 6c 154
+\characterdef \cyrschwa 6c 186
+\characterdef \CYRRHK 6c 155
+\characterdef \cyrrhk 6c 187
+\characterdef \CYRYO 6c 156
+\characterdef \cyryo 6c 188
+\characterdef \CYRII 6c 73
+\characterdef \cyrii 6c 105
+\characterdef \CYRJE 6c 74
+\characterdef \cyrje 6c 106
+\characterdef \CYRQ 6c 81
+\characterdef \cyrq 6c 113
+\characterdef \CYRDZE 6c 83
+\characterdef \cyrdze 6c 115
+\characterdef \CYRW 6c 87
+\characterdef \cyrw 6c 119
+
+\accentdef \" \CYRE 6c 156
+\accentdef \" \cyre 6c 188
+\accentdef \U \CYRI 6c 201
+\accentdef \U \cyri 6c 233
+\accentdef \k \CYRABHCH 6c 201
+\accentdef \k \cyrabhch 6c 233
+
+%% lccodes, uccodes:
+
+\modifydef 6c:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodesloop ^^a0^^bc^^80% from \cyrgup to \cyryo, first cap: \CYRGUP
+ \lccodesloop ^^e0^^ff^^c0% from \cyra to \cyrya, first cap: \CYRA
+ \def\lccodesback {\zerolccodes ^^80^^ff}%
+}
+
+
+%%% The CM font metric mapping:
+
+\registerECfont cmr6c lcrm %
+\registerECfont cmbx6c lcbx %
+\registerECfont cmti6c lcti %
+\registerECfont cmbxti6c lcbi %
+\registerECfont cmsl6c lcsl %
+\registerECfont cmbxsl6c lcbl %
+
+\registerECfont cmss6c lcss %
+\registerECfont cmssbx6c lcsx %
+\registerECfont cmssi6c lcsi %
+\registerECfont cmssbxti6c lcso %
+
+\registerECTTfont cmtt6c lctt %
+\registerECTTfont cmitt6c lcit %
+\registerECTTfont cmsltt6c lcst %
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6k.tex b/macros/generic/ofs/tex/enc/ofs-6k.tex
new file mode 100644
index 0000000000..4014e4d2e4
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6k.tex
@@ -0,0 +1,202 @@
+% OFS: Declaration of Cyrrilic T2A encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mar 2004 Petr Olsak
+
+% 6k = Koi8 encoding + Computer Modern
+
+\protectreading ofs-6k.tex % This is part of OFS package
+
+\accentdef \` * 6k {\accent 18 } % grave
+\accentdef \' * 6k {\accent 19 } % acute
+\accentdef \v * 6k {\accent 20 } % caron
+\accentdef \u * 6k {\accent 21 } % breve
+\accentdef \= * 6k {\accent 22 } % macron
+\accentdef \r * 6k {\accent 23 } % ring
+\accentdef \^ * 6k {\accent 94 } % circumflex
+\accentdef \. * 6k {\accent 95 } % dot-accent
+\accentdef \H * 6k {\accent 125 } % hungar-umlaut
+\accentdef \~ * 6k {\accent 126 } % tilde
+\accentdef \" * 6k {\accent 127 } % dieresis
+\accentdef \c * 6k {\accentbelow {\char24}{0pt}} % cedilla
+\accentdef \k * 6k {\accentbelow {\char157}{0pt}} % ogonek
+\accentdef \m * 6k {\accentbelow {,}{.1ex}} % comma-accent
+\accentdef \b * 6k {\accentbelow {\char22}{.15ex}} % underscore
+\accentdef \d * 6k {\accentbelow {.}{.1ex}} % dot below
+
+\def\aa{\r a}
+\def\AA{\r A}
+
+\characterdef \dotlessi 6k 16
+\characterdef \dotlessj 6k 17
+\let\i=\dotlessi \let\j=\dotlessj
+
+\accentdef \" i 6k {\accent 127 \dotlessi}
+\accentdef \" {\i} 6k {\accent 127 \dotlessi}
+
+\let\SS=\relax \let\AE=\relax \let\OE=\relax \let\O=\relax
+\characterdef \SS 6k {SS}
+\characterdef \AE 6k 29
+\characterdef \OE 6k 30
+\characterdef \O 6k 31
+
+\let\ss=\relax \let\ae=\relax \let\oe=\relax \let\o=\relax
+\characterdef \ss 6k 25
+\characterdef \ae 6k 26
+\characterdef \oe 6k 27
+\characterdef \o 6k 28
+\characterdef \ellipsis 6k {\dots}
+
+\let\elqq=\relax \let\erqq=\relax \let\elq=\relax \let\erq=\relax
+\characterdef \elqq 6k 92
+\characterdef \erqq 6k 34
+\characterdef \elq 6k `\`
+\characterdef \erq 6k `\'
+
+\characterdef \exclamdown 6k 60
+\characterdef \questiondown 6k 62
+
+\characterdef \CYRA 6k 225
+\characterdef \CYRB 6k 226
+\characterdef \CYRV 6k 247
+\characterdef \CYRG 6k 231
+\characterdef \CYRD 6k 228
+\characterdef \CYRE 6k 229
+\characterdef \CYRYO 6k 179
+\characterdef \CYRZH 6k 246
+\characterdef \CYRZ 6k 250
+\characterdef \CYRI 6k 233
+\characterdef \CYRISHRT 6k 234
+\characterdef \CYRK 6k 235
+\characterdef \CYRL 6k 236
+\characterdef \CYRM 6k 237
+\characterdef \CYRN 6k 238
+\characterdef \CYRO 6k 239
+\characterdef \CYRP 6k 240
+\characterdef \CYRR 6k 242
+\characterdef \CYRS 6k 243
+\characterdef \CYRT 6k 244
+\characterdef \CYRU 6k 245
+\characterdef \CYRF 6k 230
+\characterdef \CYRH 6k 232
+\characterdef \CYRC 6k 227
+\characterdef \CYRCH 6k 254
+\characterdef \CYRSH 6k 251
+\characterdef \CYRSHCH 6k 253
+\characterdef \CYRHRDSN 6k 255
+\characterdef \CYRERY 6k 249
+\characterdef \CYRSFTSN 6k 248
+\characterdef \CYREREV 6k 252
+\characterdef \CYRYU 6k 224
+\characterdef \CYRYA 6k 241
+\characterdef \cyra 6k 193
+\characterdef \cyrb 6k 194
+\characterdef \cyrv 6k 215
+\characterdef \cyrg 6k 199
+\characterdef \cyrd 6k 196
+\characterdef \cyre 6k 197
+\characterdef \cyryo 6k 163
+\characterdef \cyrzh 6k 214
+\characterdef \cyrz 6k 218
+\characterdef \cyri 6k 201
+\characterdef \cyrishrt 6k 202
+\characterdef \cyrk 6k 203
+\characterdef \cyrl 6k 204
+\characterdef \cyrm 6k 205
+\characterdef \cyrn 6k 206
+\characterdef \cyro 6k 207
+\characterdef \cyrp 6k 208
+\characterdef \cyrr 6k 210
+\characterdef \cyrs 6k 211
+\characterdef \cyrt 6k 212
+\characterdef \cyru 6k 213
+\characterdef \cyrf 6k 198
+\characterdef \cyrh 6k 200
+\characterdef \cyrc 6k 195
+\characterdef \cyrch 6k 222
+\characterdef \cyrsh 6k 219
+\characterdef \cyrshch 6k 221
+\characterdef \cyrhrdsn 6k 223
+\characterdef \cyrery 6k 217
+\characterdef \cyrsftsn 6k 216
+\characterdef \cyrerev 6k 220
+\characterdef \cyryu 6k 192
+\characterdef \cyrya 6k 209
+
+\modifydef 6k:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodesloop ^^c0^^df^^e0%
+ \lccodes ^^a3^^b3%
+ \def\lccodesback {\zerolccodes ^^c0^^ff%
+ \zerolccodes ^^a3^^a3%
+ \zerolccodes ^^b3^^b3}%
+}
+
+\registertfm cmr6k - kcr10 %
+\registertfm cmr6k 0pt-6pt kcr5 %
+\registertfm cmr6k 6pt-7pt kcr6 %
+\registertfm cmr6k 7pt-8pt kcr7 %
+\registertfm cmr6k 8pt-9pt kcr8 %
+\registertfm cmr6k 9pt-10pt kcr9 %
+\registertfm cmr6k 10pt-12pt kcr10 %
+\registertfm cmr6k 12pt-17pt kcr12 %
+\registertfm cmr6k 17pt-* kcr17 %
+
+\registertfm cmbx6k - kcbx10 %
+\registertfm cmbx6k 0pt-6pt kcbx5 %
+\registertfm cmbx6k 6pt-7pt kcbx6 %
+\registertfm cmbx6k 7pt-8pt kcbx7 %
+\registertfm cmbx6k 8pt-9pt kcbx8 %
+\registertfm cmbx6k 9pt-10pt kcbx9 %
+\registertfm cmbx6k 10pt-12pt kcbx10 %
+\registertfm cmbx6k 12pt-* kcbx12 %
+
+\registertfm cmti6k - kcti10 %
+\registertfm cmti6k 0pt-8pt kcti7 %
+\registertfm cmti6k 8pt-9pt kcti8 %
+\registertfm cmti6k 9pt-10pt kcti9 %
+\registertfm cmti6k 10pt-12pt kcti10 %
+\registertfm cmti6k 12pt-17pt kcti12 %
+\registertfm cmti6k 17pt-* kcti17 %
+
+\registertfm cmbxti6k - kcbxti10 %
+\registertfm cmbxti6k 0pt-12pt kcbxti10 %
+\registertfm cmbxti6k 12pt-17pt kcbxti12 %
+\registertfm cmbxti6k 17pt-* kcbxti17 %
+
+\registertfm cmsl6k - kcsl10 %
+\registertfm cmsl6k 0pt-6pt kcsl5 %
+\registertfm cmsl6k 6pt-7pt kcsl6 %
+\registertfm cmsl6k 7pt-8pt kcsl7 %
+\registertfm cmsl6k 8pt-9pt kcsl8 %
+\registertfm cmsl6k 9pt-10pt kcsl9 %
+\registertfm cmsl6k 10pt-12pt kcsl10 %
+\registertfm cmsl6k 12pt-17pt kcsl12 %
+\registertfm cmsl6k 17pt-* kcsl17 %
+
+\registertfm cmbxsl6k - kcbxsl10 %
+\registertfm cmsltt6k - kcsltt10 %
+
+\registertfm cmss6k - kcss10 %
+\registertfm cmss6k 0pt-9pt kcss8 %
+\registertfm cmss6k 9pt-10pt kcss9 %
+\registertfm cmss6k 10pt-12pt kcss10 %
+\registertfm cmss6k 12pt-17pt kcss12 %
+\registertfm cmss6k 17pt-* kcss17 %
+
+\registertfm cmssbx6k - kcssbx10 %
+
+\registertfm cmssi6k - kcssi10 %
+\registertfm cmssi6k 0pt-9pt kcssi8 %
+\registertfm cmssi6k 9pt-10pt kcssi9 %
+\registertfm cmssi6k 10pt-12pt kcssi10 %
+\registertfm cmssi6k 12pt-17pt kcssi12 %
+\registertfm cmssi6k 17pt-* kcssi17 %
+
+\registertfm cmtt6k - kctt10 %
+\registertfm cmtt6k 0pt-9pt kctt8 %
+\registertfm cmtt6k 9pt-10pt kctt9 %
+\registertfm cmtt6k 10pt-12pt kctt10 %
+\registertfm cmtt6k 12pt-* kctt12 %
+
+\registertfm cmitt6k - kcitt10 %
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6s.tex b/macros/generic/ofs/tex/enc/ofs-6s.tex
new file mode 100644
index 0000000000..2f41493fd2
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6s.tex
@@ -0,0 +1,358 @@
+% Encoding definition of fonts by Storm Type Foundry
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Jun 2001 Petr Olsak
+% Feb 2004
+
+% See stormtex.html and ofsdoc.tex manuals for more details.
+
+\ifx \characterdef \undefined \input ofs \fi
+\protectreading ofs-6s.tex % This is part of OFS package
+
+\ifx \characterdef \undefined \input ofs \fi
+
+\fontmessage {\ofsmessageheader
+ Characters + accents of fonts by Storm Type Foundry defined.}
+
+%% Extra encoding, characters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\characterdef \onesuperior 6s 1
+\characterdef \twosuperior 6s 2
+\characterdef \threesuperior 6s 3
+\characterdef \textleq 6s 4
+\characterdef \textneq 6s 5
+\characterdef \textgeq 6s 6
+\characterdef \textpm 6s 7
+\characterdef \onequarter 6s 8
+\characterdef \onehalf 6s 9
+\characterdef \threequarters 6s 10
+\characterdef \fraction 6s 11
+\characterdef \degree 6s 12
+\characterdef \brokenbar 6s 13
+\characterdef \fullbar 6s 124
+\characterdef \textsum 6s 16
+
+\characterdef \textOmega 6s 17
+\characterdef \textminus 6s 0
+\characterdef \textmu 6s 19
+\characterdef \textDelta 6s 20
+\characterdef \textneg 6s 21
+\characterdef \textinfty 6s 22
+\characterdef \textradical 6s 23
+\characterdef \textbackslash 6s 92
+\characterdef \textbraceleft 6s 123
+\characterdef \textbraceright 6s 125
+\characterdef \textless 6s 60
+\characterdef \textgreater 6s 62
+\characterdef \texttimes 6s 14
+\characterdef \textdiv 6s 15
+
+\characterdef \quotedbl 6s 34
+\characterdef \asciicircum 6s 94
+\characterdef \underscore 6s 95
+\characterdef \asciitilde 6s 126
+\characterdef \periodcentered 6s 127
+
+\characterdef \ordfeminine 6s 24
+\characterdef \ordmasculine 6s 25
+
+\characterdef \vargrave 6s 26
+\characterdef \varacute 6s 27
+\characterdef \varcaron 6s 28
+\characterdef \varcircumflex 6s 29
+\characterdef \varbreve 6s 30
+\characterdef \varring 6s 31
+\characterdef \varmacron 6s 35
+\characterdef \vardotaccent 6s 36
+\characterdef \varhungarumlaut 6s 37
+\characterdef \varogonek 6s 38
+\characterdef \varcedilla 6s 39
+\characterdef \vartilde 6s 40
+\characterdef \vardieresis 6s 41
+\characterdef \commaaccent 6s 42
+
+\characterdef \euro 6s 136 \let\Euro=\euro
+
+\characterdef \franc 6s 137
+\characterdef \cent 6s 168
+\characterdef \yen 6s 169
+
+\characterdef \varv 6s 18 % This character has a bad internal
+ % Type1 name: pi, sometimes it looks
+ % as pi, sometimes as varv :-(
+\characterdef \ligct 6s 128
+\characterdef \ligst 6s 129
+\characterdef \ligft 6s 130
+\characterdef \longst 6s 131
+\characterdef \longs 6s 132
+\characterdef \florin 6s 134
+
+\characterdef \dag 6s 160
+\characterdef \ddag 6s 161
+\characterdef \textbullet 6s 162
+\characterdef \paragraph 6s 163
+\characterdef \ellipsis 6s 164
+\characterdef \trademark 6s 165
+\let\copyright=\relax
+\characterdef \copyright * {\ofscopyright}
+\characterdef \copyright 6s 166
+\characterdef \registered 6s 167
+\characterdef \currency 6s 168 % Does not work in Storm fonts
+
+\characterdef \varzero 6s 48
+\characterdef \varone 6s 49
+\characterdef \vartwo 6s 50
+\characterdef \varthree 6s 51
+\characterdef \varfour 6s 52
+\characterdef \varfive 6s 53
+\characterdef \varsix 6s 54
+\characterdef \varseven 6s 55
+\characterdef \vareight 6s 56
+\characterdef \varnine 6s 57
+
+\characterdef \Eth 6s 144
+\characterdef \eth 6s 176
+\characterdef \Thorn 6s 145
+\characterdef \thorn 6s 177
+\characterdef \IJ 6s 156
+\characterdef \ij 6s 188
+\characterdef \O 6s 216
+\characterdef \o 6s 248
+
+%%% Extra encoding, accented letters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\accentdef \~ A 6s 195
+\accentdef \= A 6s 196
+\accentdef \r A 6s 197
+\accentdef \~ a 6s 227
+\accentdef \= a 6s 228
+\accentdef \r a 6s 229
+\accentdef \^ C 6s 198
+\accentdef \. C 6s 199
+\accentdef \^ c 6s 230
+\accentdef \. c 6s 231
+\accentdef \= d 6s 135
+\accentdef \` E 6s 200
+\accentdef \u E 6s 201
+\accentdef \^ E 6s 202
+\accentdef \= E 6s 203
+\accentdef \. E 6s 193
+\accentdef \` e 6s 232
+\accentdef \u e 6s 233
+\accentdef \^ e 6s 234
+\accentdef \= e 6s 235
+\accentdef \. e 6s 225
+\accentdef \u G 6s 154
+\accentdef \^ G 6s 218
+\accentdef \. G 6s 219
+\accentdef \c G 6s 220
+\accentdef \u g 6s 186
+\accentdef \^ g 6s 250
+\accentdef \. g 6s 251
+\accentdef \c g 6s 252
+\accentdef \' g 6s 185
+\accentdef \^ H 6s 222
+\accentdef \= H 6s 223
+\accentdef \^ h 6s 254
+\accentdef \= h 6s 255
+\accentdef \. I 6s 157
+\accentdef \` I 6s 204
+\accentdef \~ I 6s 205
+\accentdef \= I 6s 206
+\accentdef \" I 6s 207
+\accentdef \k I 6s 208
+\accentdef \. i 6s `\i
+\accentdef \` i 6s 236
+\accentdef \~ i 6s 237
+\accentdef \= i 6s 238
+\accentdef \" i 6s 239
+\accentdef \k i 6s 240
+\accentdef \^ J 6s 155
+\accentdef \^ j 6s 187
+\accentdef \c K 6s 215
+\accentdef \c k 6s 247
+\accentdef \c L 6s 158
+\accentdef \. L 6s 159
+\accentdef \c l 6s 190
+\accentdef \. l 6s 191
+\accentdef \~ N 6s 209
+\accentdef \c N 6s 214
+\accentdef \m n 6s 184
+\accentdef \~ n 6s 241
+\accentdef \c n 6s 246
+\accentdef \` O 6s 210
+\accentdef \= O 6s 211
+\accentdef \u O 6s 212
+\accentdef \~ O 6s 213
+\accentdef \` o 6s 242
+\accentdef \= o 6s 243
+\accentdef \u o 6s 244
+\accentdef \~ o 6s 245
+\accentdef \c R 6s 147
+\accentdef \c r 6s 179
+\accentdef \m S 6s 221
+\accentdef \^ S 6s 148
+\accentdef \m s 6s 253
+\accentdef \^ s 6s 180
+\accentdef \= T 6s 140
+\accentdef \m T 6s 141
+\accentdef \= t 6s 172
+\accentdef \m t 6s 173
+\accentdef \= U 6s 142
+\accentdef \u U 6s 143
+\accentdef \^ U 6s 149
+\accentdef \k U 6s 150
+\accentdef \~ U 6s 151
+\accentdef \` U 6s 217
+\accentdef \= u 6s 174
+\accentdef \u u 6s 175
+\accentdef \^ u 6s 181
+\accentdef \k u 6s 182
+\accentdef \~ u 6s 183
+\accentdef \` u 6s 249
+\accentdef \^ W 6s 192
+\accentdef \^ w 6s 224
+\accentdef \^ Y 6s 194
+\accentdef \" Y 6s 146
+\accentdef \^ y 6s 226
+\accentdef \" y 6s 178
+
+%%% Extra characters from StormL2Encoding (no present in 8z standard)
+
+\modifydef 8z:storm; {%
+ \characterdef \degree 8z 176
+ \characterdef \euro 8z 134
+ \characterdef \trademark 8z 136
+ \characterdef \copyright 8z 137
+ \characterdef \registered 8z 138
+ \characterdef \flq 8z 142
+ \characterdef \frq 8z 143
+ \characterdef \clq 8z 154
+ \characterdef \crq 8z 155
+ \characterdef \ligct 8z 145
+ \characterdef \ligst 8z 146
+ \characterdef \ligft 8z 147
+ \characterdef \longst 8z 148
+ \characterdef \longs 8z 149
+ \characterdef \varv 8z 144
+ \characterdef \florin 8z 151
+}
+
+%%% Differences between StormT1Encoding and standard T1 encoding %%%%%
+
+\modifydef 8t:storm;{%
+ \characterdel \promile 8t {\%\char 24 }
+ \characterdef \promile 8t 24 % the "perzero" is missing in Storm fonts
+ \characterdel \textpertenthousand 8t {\%\char 24\char 24 }
+ \characterdel \dotlessj 8t 26
+ \characterdef \varv 8t 26 % dotlessj is missing in Storm fonts
+}
+\modifydef 6s:noligs; {%
+ \characterdel \ligct 6s 128
+ \characterdel \ligst 6s 129
+ \characterdel \ligft 6s 130
+}
+
+\modifydef 6s:vardigits;{%
+ \characterdef \vardigits * {\setextrafont}
+}
+
+%%% The \CAP? macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% variant accents for capital letters
+
+\def\CAP#1{\csname CAP\string#1\endcsname}
+\def\CAPdef #1 {\expandafter\def\csname CAP\string#1\endcsname}
+
+\def\CAPv {\aboveCAP \varcaron \v}
+\def\CAPu {\aboveCAP \varbreve \u}
+\def\CAPr {\aboveCAP \varring \r}
+\def\CAPH {\aboveCAP \varhungarumlaut \H}
+\CAPdef ` {\aboveCAP \vargrave \`}
+\CAPdef ' {\aboveCAP \varacute \'}
+\CAPdef = {\aboveCAP \varmacron \=}
+\CAPdef ^ {\aboveCAP \varcircumflex \^}
+\CAPdef . {\aboveCAP \vardotaccent \.}
+\CAPdef " {\aboveCAP \vardieresis \"}
+\CAPdef ~ {\aboveCAP \vartilde \~}
+
+\def\aboveCAP #1#2{%
+ \ifx\expandaction\noexpand
+ \noexpand\aboveCAP \noexpand#1\noexpand#2%
+ \else
+ \csname fragilecommand!\endcsname
+ \setbox2=\hbox{X}\dimen4=\ht2
+ \setbox0=\hbox{#1}\dimen0=\ht0 \advance\dimen0 by-.2ex
+ \ifdim\dimen4>\dimen0 \def\tmpa{#2}%
+ \else \def\tmpa{\accentabove {#1}{-\dimen4}}%
+ \fi \expandafter \tmpa
+ \fi
+}
+
+%%% \stmath sets some math characters from extra encoding %%%%%%
+
+% use in this order: \setfonts [Family/] \stmath \setmath[//]
+
+\def\stmath{\ifx\extraenc\stextraenc
+ \def\mathfonts{\defaultmathfonts
+ \csname st\mathversion math\endcsname}%
+ \def\mathchars{\defaultmathchars \stmathchars \let\mathchars=\relax}%
+ \else \displaymessage{\ofsmessageheader WARNING.
+ No extra enc 6s defined. \noexpand\stmath ignored.}%
+ \fi
+}
+\def\stextraenc{6s}
+
+\def\stnormalmath{%
+ \newmathfam \Xrmfam
+ \loadmathfam \Xrmfam [Xtenrm/]%
+}
+\def\stboldmath{%
+ \newmathfam \Xrmfam
+ \loadmathfam \Xrmfam [Xtenbf/]%
+}
+\def\stmathchars{%
+ \mathcode`\- "2\hex\Xrmfam 00
+ \mathcode`\< "3\hex\Xrmfam 3C
+ \mathcode`\> "3\hex\Xrmfam 3E
+ %
+ \edef\lbrace{\delimiter"4\hex\Xrmfam 7B308 }\let\{=\lbrace
+ \edef\vert {\delimiter"2\hex\Xrmfam 7C30C }\let\|=\vert
+ \edef\rbrace{\delimiter"5\hex\Xrmfam 7D309 }\let\}=\rbrace
+ %
+ \mathchardef \leq "3\hex\Xrmfam 04 \let\le=\leq
+ \mathchardef \neq "3\hex\Xrmfam 05 \let\ne=\neq
+ \mathchardef \geq "3\hex\Xrmfam 06 \let\ge=\geq
+ \mathchardef \neg "3\hex\Xrmfam 15 \let\lnot=\neg
+ \mathchardef \pm "2\hex\Xrmfam 07
+ \mathchardef \times "2\hex\Xrmfam 0E
+ \mathchardef \div "2\hex\Xrmfam 0F
+ \mathchardef \infty "2\hex\Xrmfam 16
+ %
+ \safemathchardef \onesuperior "\hex\Xrmfam 01
+ \safemathchardef \twosuperior "\hex\Xrmfam 02
+ \safemathchardef \threesuperior "\hex\Xrmfam 03
+ \safemathchardef \onequarter "\hex\Xrmfam 08
+ \safemathchardef \onehalf "\hex\Xrmfam 09
+ \safemathchardef \threequarters "\hex\Xrmfam 0A
+ \safemathchardef \fraction "\hex\Xrmfam 0B
+ \mathchardef \dagger "2\hex\Xrmfam A0
+ \mathchardef \ddagger "2\hex\Xrmfam A1
+ \safemathchardef \dag "\hex\Xrmfam A0
+ \safemathchardef \ddag "\hex\Xrmfam A1
+ \let\bullet=\textbullet
+ \safemathchardef \bullet "2\hex\Xrmfam A2
+}
+
+%%% eof
+
+\endinput %%% the following macros will be included in LANG style files
+
+%%% Macros for quotes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\singleuv#1{\clq#1\crq}
+\def\doubleuv#1{\clqq#1\crqq}
+\def\singlefuv#1{\frq#1\flq}
+\def\doublefuv#1{\frqq#1\flqq}
+\let\uv=\doubleuv
+\let\fuv=\doublefuv
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6t.tex b/macros/generic/ofs/tex/enc/ofs-6t.tex
new file mode 100644
index 0000000000..ef3c0b0541
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6t.tex
@@ -0,0 +1,242 @@
+% OFS: Declaration of Cyrrilic T2A encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mar 2004 Petr Olsak
+
+% 6t = T2B encoding
+
+\protectreading ofs-6t.tex % This is part of OFS package
+
+\accentdef \` * 6t {\accent 0}
+\accentdef \' * 6t {\accent 1}
+\accentdef \^ * 6t {\accent 2}
+\accentdef \~ * 6t {\accent 3}
+\accentdef \" * 6t {\accent 4}
+\accentdef \H * 6t {\accent 5}
+\accentdef \r * 6t {\accent 6}
+\accentdef \v * 6t {\accent 7}
+\accentdef \u * 6t {\accent 8}
+\accentdef \= * 6t {\accent 9}
+\accentdef \. * 6t {\accent 10}
+\accentdef \f * 6t {\accent 18}
+\accentdef \C * 6t {\accent 19}
+\accentdef \U * 6t {\accent 20}
+\accentdef \b * 6t {\accentbelow {\char9}{.15ex}}
+\accentdef \c * 6t {\accentbelow {\char11}{0pt}}
+\accentdef \d * 6t {\accentbelow {.}{.1ex}}
+\accentdef \k * 6t {\accentbelow {\char12}{0pt}}
+
+\let\promile=\relax
+\characterdef \promile 6t {\%\char 24 }
+\characterdef \pertenthousand 6t {\%\char 24\char 24 }
+
+\characterdef \textendash 6t 21
+\characterdef \cyrdash 6t 22
+\characterdef \textemdash 6t 22
+\characterdef \textcompwordmark 6t 23
+\characterdef \textvisiblespace 6t 32
+\characterdef \textdollar 6t 36
+\characterdef \textless 6t 60
+\characterdef \textgreater 6t 62
+\characterdef \textbackslash 6t 92
+\characterdef \textasciicircum 6t 94
+\characterdef \textunderscore 6t 95
+\characterdef \textbraceleft 6t 123
+\characterdef \textbar 6t 124
+\characterdef \textbraceright 6t 125
+\characterdef \textasciitilde 6t 126
+\characterdef \textnumero 6t 157
+\characterdef \textcurrency 6t 158
+\characterdef \textsection 6t 159
+\characterdef \textquotedbl 6t 34
+\characterdef \textquoteleft 6t 96
+\characterdef \textquoteright 6t 39
+\characterdef \textquotedblleft 6t 16
+\characterdef \textquotedblright 6t 17
+\characterdef \quotedblbase 6t 189
+\characterdef \CYRpalochka 6t 13
+\characterdef \cyrlangle 6t 14
+\characterdef \cyrrangle 6t 15
+\characterdef \guillemotleft 6t 190
+\characterdef \guillemotright 6t 191
+\characterdef \dotlessi 6t 25
+\characterdef \dotlessj 6t 26
+
+\let\i=\dotlessi \let\j=\dotlessj
+\accentdef \. i 6t `\i
+\accentdef \` i 6t {\accent0 \i}
+\accentdef \` {\i} 6t {\accent0 \i}
+\accentdef \' i 6t {\accent1 \i}
+\accentdef \' {\i} 6t {\accent1 \i}
+\accentdef \^ i 6t {\accent2 \i}
+\accentdef \^ {\i} 6t {\accent2 \i}
+\accentdef \" i 6t {\accent4 \i}
+\accentdef \" {\i} 6t {\accent4 \i}
+
+\characterdef \CYRA 6t 192
+\characterdef \cyra 6t 224
+\characterdef \CYRB 6t 193
+\characterdef \cyrb 6t 225
+\characterdef \CYRV 6t 194
+\characterdef \cyrv 6t 226
+\characterdef \CYRG 6t 195
+\characterdef \cyrg 6t 227
+\characterdef \CYRD 6t 196
+\characterdef \cyrd 6t 228
+\characterdef \CYRE 6t 197
+\characterdef \cyre 6t 229
+\characterdef \CYRZH 6t 198
+\characterdef \cyrzh 6t 230
+\characterdef \CYRZ 6t 199
+\characterdef \cyrz 6t 231
+\characterdef \CYRI 6t 200
+\characterdef \cyri 6t 232
+\characterdef \CYRISHRT 6t 201
+\characterdef \cyrishrt 6t 233
+\characterdef \CYRK 6t 202
+\characterdef \cyrk 6t 234
+\characterdef \CYRL 6t 203
+\characterdef \cyrl 6t 235
+\characterdef \CYRM 6t 204
+\characterdef \cyrm 6t 236
+\characterdef \CYRN 6t 205
+\characterdef \cyrn 6t 237
+\characterdef \CYRO 6t 206
+\characterdef \cyro 6t 238
+\characterdef \CYRP 6t 207
+\characterdef \cyrp 6t 239
+\characterdef \CYRR 6t 208
+\characterdef \cyrr 6t 240
+\characterdef \CYRS 6t 209
+\characterdef \cyrs 6t 241
+\characterdef \CYRT 6t 210
+\characterdef \cyrt 6t 242
+\characterdef \CYRU 6t 211
+\characterdef \cyru 6t 243
+\characterdef \CYRF 6t 212
+\characterdef \cyrf 6t 244
+\characterdef \CYRH 6t 213
+\characterdef \cyrh 6t 245
+\characterdef \CYRC 6t 214
+\characterdef \cyrc 6t 246
+\characterdef \CYRCH 6t 215
+\characterdef \cyrch 6t 247
+\characterdef \CYRSH 6t 216
+\characterdef \cyrsh 6t 248
+\characterdef \CYRSHCH 6t 217
+\characterdef \cyrshch 6t 249
+\characterdef \CYRHRDSN 6t 218
+\characterdef \cyrhrdsn 6t 250
+\characterdef \CYRERY 6t 219
+\characterdef \cyrery 6t 251
+\characterdef \CYRSFTSN 6t 220
+\characterdef \cyrsftsn 6t 252
+\characterdef \CYREREV 6t 221
+\characterdef \cyrerev 6t 253
+\characterdef \CYRYU 6t 222
+\characterdef \cyryu 6t 254
+\characterdef \CYRYA 6t 223
+\characterdef \cyrya 6t 255
+\characterdef \CYRGDSCHCRS 6t 128
+\characterdef \cyrgdschcrs 6t 160
+\characterdef \CYRGHCRS 6t 129
+\characterdef \cyrghcrs 6t 161
+\characterdef \CYRGDSC 6t 130
+\characterdef \cyrgdsc 6t 162
+\characterdef \CYRGHK 6t 131
+\characterdef \cyrghk 6t 163
+\characterdef \CYRSHHA 6t 132
+\characterdef \cyrshha 6t 164
+\characterdef \CYRZHDSC 6t 133
+\characterdef \cyrzhdsc 6t 165
+\characterdef \CYRDELTA 6t 134
+\characterdef \cyrdelta 6t 166
+\characterdef \CYRABHDZE 6t 135
+\characterdef \cyrabhdze 6t 167
+\characterdef \CYRLJE 6t 136
+\characterdef \cyrlje 6t 168
+\characterdef \CYRKDSC 6t 137
+\characterdef \cyrkdsc 6t 169
+\characterdef \CYRLDSC 6t 138
+\characterdef \cyrldsc 6t 170
+\characterdef \CYRKHK 6t 139
+\characterdef \cyrkhk 6t 171
+\characterdef \CYRLHK 6t 140
+\characterdef \cyrlhk 6t 172
+\characterdef \CYRNDSC 6t 141
+\characterdef \cyrndsc 6t 173
+\characterdef \CYRNG 6t 142
+\characterdef \cyrng 6t 174
+\characterdef \CYRNHK 6t 143
+\characterdef \cyrnhk 6t 175
+\characterdef \CYROTLD 6t 144
+\characterdef \cyrotld 6t 176
+\characterdef \CYRSACRS 6t 145
+\characterdef \cyrsacrs 6t 177
+\characterdef \CYRUSHRT 6t 146
+\characterdef \cyrushrt 6t 178
+\characterdef \CYRY 6t 147
+\characterdef \cyry 6t 179
+\characterdef \CYRHHCRS 6t 148
+\characterdef \cyrhhcrs 6t 180
+\characterdef \CYRHDSC 6t 149
+\characterdef \cyrhdsc 6t 181
+\characterdef \CYRHHK 6t 150
+\characterdef \cyrhhk 6t 182
+\characterdef \CYRCHLDSC 6t 151
+\characterdef \cyrchldsc 6t 183
+\characterdef \CYRCHRDSC 6t 152
+\characterdef \cyrchrdsc 6t 184
+\characterdef \CYRNJE 6t 153
+\characterdef \cyrnje 6t 185
+\characterdef \CYRSCHWA 6t 154
+\characterdef \cyrschwa 6t 186
+\characterdef \CYREPS 6t 155
+\characterdef \cyreps 6t 187
+\characterdef \CYRYO 6t 156
+\characterdef \cyryo 6t 188
+\characterdef \CYRII 6t 73
+\characterdef \cyrii 6t 105
+\characterdef \CYRJE 6t 74
+\characterdef \cyrje 6t 106
+\characterdef \CYRQ 6t 81
+\characterdef \cyrq 6t 113
+\characterdef \CYRDZE 6t 83
+\characterdef \cyrdze 6t 115
+\characterdef \CYRW 6t 87
+\characterdef \cyrw 6t 119
+
+\accentdef \" \CYRE 6a 156
+\accentdef \" \cyre 6a 188
+\accentdef \U \CYRI 6a 201
+\accentdef \U \cyri 6a 233
+\accentdef \U \CYRU 6a 146
+\accentdef \U \cyru 6a 178
+
+%%% lccodes, uccodes:
+
+\modifydef 6t:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodesloop ^^a0^^bc^^80% from \cyrgup to \cyryo, first cap: \CYRGUP
+ \lccodesloop ^^e0^^ff^^c0% from \cyra to \cyrya, first cap: \CYRA
+ \def\lccodesback {\zerolccodes ^^80^^ff}%
+}
+
+
+%%% The CM font metric mapping:
+
+\registerECfont cmr6t lbrm %
+\registerECfont cmbx6t lbbx %
+\registerECfont cmti6t lbti %
+\registerECfont cmbxti6t lbbi %
+\registerECfont cmsl6t lbsl %
+\registerECfont cmbxsl6t lbbl %
+
+\registerECfont cmss6t lbss %
+\registerECfont cmssbx6t lbsx %
+\registerECfont cmssi6t lbsi %
+\registerECfont cmssbxti6t lbso %
+
+\registerECTTfont cmtt6t lbtt %
+\registerECTTfont cmitt6t lbit %
+\registerECTTfont cmsltt6t lbst %
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6x.tex b/macros/generic/ofs/tex/enc/ofs-6x.tex
new file mode 100644
index 0000000000..ffdd3c0818
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6x.tex
@@ -0,0 +1,289 @@
+% OFS: Declaration of Cyrrilic T2A encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mar 2004 Petr Olsak
+
+% 6x = X2 encoding
+
+\protectreading ofs-6x.tex % This is part of OFS package
+
+\accentdef \` * 6a {\accent 0}
+\accentdef \' * 6a {\accent 1}
+\accentdef \^ * 6a {\accent 2}
+\accentdef \~ * 6a {\accent 3}
+\accentdef \" * 6a {\accent 4}
+\accentdef \H * 6a {\accent 5}
+\accentdef \r * 6a {\accent 6}
+\accentdef \v * 6a {\accent 7}
+\accentdef \u * 6a {\accent 8}
+\accentdef \= * 6a {\accent 9}
+\accentdef \. * 6a {\accent 10}
+\accentdef \f * 6a {\accent 18}
+\accentdef \C * 6a {\accent 19}
+\accentdef \U * 6a {\accent 20}
+\accentdef \b * 6a {\accentbelow {\char9}{.15ex}}
+\accentdef \c * 6a {\accentbelow {\char11}{0pt}}
+\accentdef \d * 6a {\accentbelow {.}{.1ex}}
+\accentdef \k * 6a {\accentbelow {\char12}{0pt}}
+
+\let\promile=\relax
+\characterdef \promile 6a {\%\char 24 }
+\characterdef \pertenthousand 6a {\%\char 24\char 24 }
+
+\characterdef \textendash 6x 21
+\characterdef \cyrdash 6x 22
+\characterdef \textemdash 6x 22
+\characterdef \textcompwordmark 6x 23
+\characterdef \textvisiblespace 6x 32
+\characterdef \textdollar 6x 36
+\characterdef \textless 6x 60
+\characterdef \textgreater 6x 62
+\characterdef \textbackslash 6x 92
+\characterdef \textasciicircum 6x 94
+\characterdef \textunderscore 6x 95
+\characterdef \textbraceleft 6x 123
+\characterdef \textbar 6x 124
+\characterdef \textbraceright 6x 125
+\characterdef \textasciitilde 6x 126
+\characterdef \textnumero 6x 157
+\characterdef \textcurrency 6x 158
+\characterdef \textsection 6x 159
+\characterdef \textquotedbl 6x 34
+\characterdef \textquoteleft 6x 96
+\characterdef \textquoteright 6x 39
+\characterdef \textquotedblleft 6x 16
+\characterdef \textquotedblright 6x 17
+\characterdef \quotedblbase 6x 189
+\characterdef \CYRpalochka 6x 13
+\characterdef \cyrlangle 6x 14
+\characterdef \cyrrangle 6x 15
+\characterdef \guillemotleft 6x 190
+\characterdef \guillemotright 6x 191
+
+\accentdef \. i 6a `\i
+
+\characterdef \CYRA 6x 192
+\characterdef \cyra 6x 224
+\characterdef \CYRB 6x 193
+\characterdef \cyrb 6x 225
+\characterdef \CYRV 6x 194
+\characterdef \cyrv 6x 226
+\characterdef \CYRG 6x 195
+\characterdef \cyrg 6x 227
+\characterdef \CYRD 6x 196
+\characterdef \cyrd 6x 228
+\characterdef \CYRE 6x 197
+\characterdef \cyre 6x 229
+\characterdef \CYRZH 6x 198
+\characterdef \cyrzh 6x 230
+\characterdef \CYRZ 6x 199
+\characterdef \cyrz 6x 231
+\characterdef \CYRI 6x 200
+\characterdef \cyri 6x 232
+\characterdef \CYRISHRT 6x 201
+\characterdef \cyrishrt 6x 233
+\characterdef \CYRK 6x 202
+\characterdef \cyrk 6x 234
+\characterdef \CYRL 6x 203
+\characterdef \cyrl 6x 235
+\characterdef \CYRM 6x 204
+\characterdef \cyrm 6x 236
+\characterdef \CYRN 6x 205
+\characterdef \cyrn 6x 237
+\characterdef \CYRO 6x 206
+\characterdef \cyro 6x 238
+\characterdef \CYRP 6x 207
+\characterdef \cyrp 6x 239
+\characterdef \CYRR 6x 208
+\characterdef \cyrr 6x 240
+\characterdef \CYRS 6x 209
+\characterdef \cyrs 6x 241
+\characterdef \CYRT 6x 210
+\characterdef \cyrt 6x 242
+\characterdef \CYRU 6x 211
+\characterdef \cyru 6x 243
+\characterdef \CYRF 6x 212
+\characterdef \cyrf 6x 244
+\characterdef \CYRH 6x 213
+\characterdef \cyrh 6x 245
+\characterdef \CYRC 6x 214
+\characterdef \cyrc 6x 246
+\characterdef \CYRCH 6x 215
+\characterdef \cyrch 6x 247
+\characterdef \CYRSH 6x 216
+\characterdef \cyrsh 6x 248
+\characterdef \CYRSHCH 6x 217
+\characterdef \cyrshch 6x 249
+\characterdef \CYRHRDSN 6x 218
+\characterdef \cyrhrdsn 6x 250
+\characterdef \CYRERY 6x 219
+\characterdef \cyrery 6x 251
+\characterdef \CYRSFTSN 6x 220
+\characterdef \cyrsftsn 6x 252
+\characterdef \CYREREV 6x 221
+\characterdef \cyrerev 6x 253
+\characterdef \CYRYU 6x 222
+\characterdef \cyryu 6x 254
+\characterdef \CYRYA 6x 223
+\characterdef \cyrya 6x 255
+\characterdef \CYRGUP 6x 128
+\characterdef \cyrgup 6x 160
+\characterdef \CYRGHCRS 6x 129
+\characterdef \cyrghcrs 6x 161
+\characterdef \CYRGDSC 6x 130
+\characterdef \cyrgdsc 6x 162
+\characterdef \CYRGHK 6x 131
+\characterdef \cyrghk 6x 163
+\characterdef \CYRSHHA 6x 132
+\characterdef \cyrshha 6x 164
+\characterdef \CYRZHDSC 6x 133
+\characterdef \cyrzhdsc 6x 165
+\characterdef \CYRZDSC 6x 134
+\characterdef \cyrzdsc 6x 166
+\characterdef \CYRABHDZE 6x 135
+\characterdef \cyrabhdze 6x 167
+\characterdef \CYRYI 6x 136
+\characterdef \cyryi 6x 168
+\characterdef \CYRKDSC 6x 137
+\characterdef \cyrkdsc 6x 169
+\characterdef \CYRKBEAK 6x 138
+\characterdef \cyrkbeak 6x 170
+\characterdef \CYRKHK 6x 139
+\characterdef \cyrkhk 6x 171
+\characterdef \CYRLHK 6x 140
+\characterdef \cyrlhk 6x 172
+\characterdef \CYRNDSC 6x 141
+\characterdef \cyrndsc 6x 173
+\characterdef \CYRNG 6x 142
+\characterdef \cyrng 6x 174
+\characterdef \CYRNHK 6x 143
+\characterdef \cyrnhk 6x 175
+\characterdef \CYROTLD 6x 144
+\characterdef \cyrotld 6x 176
+\characterdef \CYRSDSC 6x 145
+\characterdef \cyrsdsc 6x 177
+\characterdef \CYRUSHRT 6x 146
+\characterdef \cyrushrt 6x 178
+\characterdef \CYRY 6x 147
+\characterdef \cyry 6x 179
+\characterdef \CYRYHCRS 6x 148
+\characterdef \cyryhcrs 6x 180
+\characterdef \CYRHDSC 6x 149
+\characterdef \cyrhdsc 6x 181
+\characterdef \CYRHHK 6x 150
+\characterdef \cyrhhk 6x 182
+\characterdef \CYRCHLDSC 6x 151
+\characterdef \cyrchldsc 6x 183
+\characterdef \CYRCHRDSC 6x 152
+\characterdef \cyrchrdsc 6x 184
+\characterdef \CYRIE 6x 153
+\characterdef \cyrie 6x 185
+\characterdef \CYRSCHWA 6x 154
+\characterdef \cyrschwa 6x 186
+\characterdef \CYREPS 6x 155
+\characterdef \cyreps 6x 187
+\characterdef \CYRYO 6x 156
+\characterdef \cyryo 6x 188
+\characterdef \CYRAE 6x 65
+\characterdef \cyrae 6x 97
+\characterdef \CYRDJE 6x 66
+\characterdef \cyrdje 6x 98
+\characterdef \CYRTSHE 6x 67
+\characterdef \cyrtshe 6x 99
+\characterdef \CYRABHCH 6x 68
+\characterdef \cyrabhch 6x 100
+\characterdef \CYRABHCHDSC 6x 69
+\characterdef \cyrabhchdsc 6x 101
+\characterdef \CYRKVCRS 6x 70
+\characterdef \cyrkvcrs 6x 102
+\characterdef \CYRKHCRS 6x 71
+\characterdef \cyrkhcrs 6x 103
+\characterdef \CYRLDSC 6x 72
+\characterdef \cyrldsc 6x 104
+\characterdef \CYRII 6x 73
+\characterdef \cyrii 6x 105
+\characterdef \CYRJE 6x 74
+\characterdef \cyrje 6x 106
+\characterdef \CYRLJE 6x 75
+\characterdef \cyrlje 6x 107
+\characterdef \CYRMDSC 6x 76
+\characterdef \cyrmdsc 6x 108
+\characterdef \CYRNJE 6x 77
+\characterdef \cyrnje 6x 109
+\characterdef \CYRABHHA 6x 78
+\characterdef \cyrabhha 6x 110
+\characterdef \CYRPHK 6x 79
+\characterdef \cyrphk 6x 111
+\characterdef \CYRRDSC 6x 80
+\characterdef \cyrrdsc 6x 112
+\characterdef \CYRQ 6x 81
+\characterdef \cyrq 6x 113
+\characterdef \CYRTDSC 6x 82
+\characterdef \cyrtdsc 6x 114
+\characterdef \CYRDZE 6x 83
+\characterdef \cyrdze 6x 115
+\characterdef \CYRTETSE 6x 84
+\characterdef \cyrtetse 6x 116
+\characterdef \CYRDZHE 6x 85
+\characterdef \cyrdzhe 6x 117
+\characterdef \CYRCHVCRS 6x 86
+\characterdef \cyrchvcrs 6x 118
+\characterdef \CYRW 6x 87
+\characterdef \cyrw 6x 119
+\characterdef \CYRYAT 6x 88
+\characterdef \cyryat 6x 120
+\characterdef \CYRBYUS 6x 89
+\characterdef \cyrbyus 6x 121
+\characterdef \CYRIZH 6x 90
+\characterdef \cyrizh 6x 122
+\characterdef \CYRDELTA 6x 28
+\characterdef \cyrdelta 6x 29
+\characterdef \CYRNLHK 6x 30
+\characterdef \cyrnlhk 6x 31
+
+\accentdef \" \CYRE 6x 156
+\accentdef \" \cyre 6x 188
+\accentdef \U \CYRI 6x 201
+\accentdef \U \cyri 6x 233
+\accentdef \" \CYRII 6x 136
+\accentdef \" \cyrii 6x 168
+\accentdef \c \CYRZ 6x 134
+\accentdef \c \cyrz 6x 166
+\accentdef \k \CYRS 6x 145
+\accentdef \k \cyrs 6x 177
+\accentdef \U \CYRU 6x 146
+\accentdef \U \cyru 6x 178
+\accentdef \k \CYRABHCH 6x 69
+\accentdef \k \cyrabhch 6x 101
+
+%%% lccodes, uccodes:
+
+\modifydef 6x:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodesloop ^^a0^^bc^^80% from \cyrgup to \cyryo, first cap: \CYRGUP
+ \lccodesloop ^^e0^^ff^^c0% from \cyra to \cyrya, first cap: \CYRA
+ \def\lccodesback {\zerolccodes ^^80^^ff}%
+}
+
+
+%%% The CM font metric mapping:
+
+\registerECfont cmr6x rxrm %
+\registerECfont cmbx6x rxbx %
+\registerECfont cmti6x rxti %
+\registerECfont cmbxti6x rxbi %
+\registerECfont cmsl6x rxsl %
+\registerECfont cmbxsl6x rxbl %
+
+\registerECfont cmss6x rxss %
+\registerECfont cmssbx6x rxsx %
+\registerECfont cmssi6x rxsi %
+\registerECfont cmssbxti6x rxso %
+
+\registerECTTfont cmtt6x rxtt %
+\registerECTTfont cmitt6x rxit %
+\registerECTTfont cmsltt6x rxst %
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-6y.tex b/macros/generic/ofs/tex/enc/ofs-6y.tex
new file mode 100644
index 0000000000..dd0dc44a85
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-6y.tex
@@ -0,0 +1,258 @@
+% OFS: Declaration of Cyrrilic T2A encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mar 2004 Petr Olsak
+
+% 6y = LCY encoding (Computer Modern + Cyrrilic)
+
+\protectreading ofs-6y.tex % This is part of OFS package
+
+\accentdef \" * 6y {\accent 127}
+\accentdef \' * 6y {\accent 19}
+\accentdef \. * 6y {\accent 95}
+\accentdef \= * 6y {\accent 22}
+\accentdef \^ * 6y {\accent 94}
+\accentdef \` * 6y {\accent 18}
+\accentdef \~ * 6y {\accent 126}
+\accentdef \H * 6y {\accent 125}
+\accentdef \u * 6y {\accent 21}
+\accentdef \v * 6y {\accent 20}
+\accentdef \r * 6y {\accent 23}
+\accentdef \b * 6y {\accentbelow {\char22}{.15ex}} % underscore
+\accentdef \d * 6y {\accentbelow {.}{.1ex}} % dot below
+
+\def\aa{\r a}
+\def\AA{\r A}
+
+\let\SS=\relax \let\AE=\relax \let\OE=\relax \let\O=\relax
+\let\ss=\relax \let\ae=\relax \let\oe=\relax \let\o=\relax
+\characterdef \AE 6y 29
+\characterdef \OE 6y 30
+\characterdef \O 6y 31
+\characterdef \ae 6y 26
+\characterdef \dotlessi 6y 16
+\characterdef \dotlessj 6y 17
+\characterdef \oe 6y 27
+\characterdef \o 6y 28
+\characterdef \ss 6y 25
+\characterdef \textemdash 6y 124
+\characterdef \textendash 6y 123
+\characterdef \textexclamdown 6y 60
+\characterdef \textquestiondown 6y 62
+\characterdef \textquotedblleft 6y 92
+\characterdef \textquotedblright 6y `\"
+\characterdef \textquoteleft 6y `\`
+\characterdef \textquoteright 6y `\'
+
+\characterdef \Lslash 6y {\plainL}
+\characterdef \lslash 6y {\char32l}
+
+\let\i=\dotlessi \let\j=\dotlessj
+\let\L=\Lslash \let\l=\lslash
+
+\characterdef \CYRA 6y 128
+\characterdef \CYRB 6y 129
+\characterdef \CYRV 6y 130
+\characterdef \CYRG 6y 131
+\characterdef \CYRD 6y 132
+\characterdef \CYRE 6y 133
+\characterdef \CYRZH 6y 134
+\characterdef \CYRZ 6y 135
+\characterdef \CYRI 6y 136
+\characterdef \CYRISHRT 6y 137
+\characterdef \CYRK 6y 138
+\characterdef \CYRL 6y 139
+\characterdef \CYRM 6y 140
+\characterdef \CYRN 6y 141
+\characterdef \CYRO 6y 142
+\characterdef \CYRP 6y 143
+\characterdef \CYRR 6y 144
+\characterdef \CYRS 6y 145
+\characterdef \CYRT 6y 146
+\characterdef \CYRU 6y 147
+\characterdef \CYRF 6y 148
+\characterdef \CYRH 6y 149
+\characterdef \CYRC 6y 150
+\characterdef \CYRCH 6y 151
+\characterdef \CYRSH 6y 152
+\characterdef \CYRSHCH 6y 153
+\characterdef \CYRHRDSN 6y 154
+\characterdef \CYRERY 6y 155
+\characterdef \CYRSFTSN 6y 156
+\characterdef \CYREREV 6y 157
+\characterdef \CYRYU 6y 158
+\characterdef \CYRYA 6y 159
+\characterdef \cyra 6y 160
+\characterdef \cyrb 6y 161
+\characterdef \cyrv 6y 162
+\characterdef \cyrg 6y 163
+\characterdef \cyrd 6y 164
+\characterdef \cyre 6y 165
+\characterdef \cyrzh 6y 166
+\characterdef \cyrz 6y 167
+\characterdef \cyri 6y 168
+\characterdef \cyrishrt 6y 169
+\characterdef \cyrk 6y 170
+\characterdef \cyrl 6y 171
+\characterdef \cyrm 6y 172
+\characterdef \cyrn 6y 173
+\characterdef \cyro 6y 174
+\characterdef \cyrp 6y 175
+\characterdef \cyrr 6y 224
+\characterdef \cyrs 6y 225
+\characterdef \cyrt 6y 226
+\characterdef \cyru 6y 227
+\characterdef \cyrf 6y 228
+\characterdef \cyrh 6y 229
+\characterdef \cyrc 6y 230
+\characterdef \cyrch 6y 231
+\characterdef \cyrsh 6y 232
+\characterdef \cyrshch 6y 233
+\characterdef \cyrhrdsn 6y 234
+\characterdef \cyrery 6y 235
+\characterdef \cyrsftsn 6y 236
+\characterdef \cyrerev 6y 237
+\characterdef \cyryu 6y 238
+\characterdef \cyrya 6y 239
+\characterdef \CYRYO 6y 240
+\characterdef \cyryo 6y 241
+\characterdef \CYRGUP 6y 242
+\characterdef \cyrgup 6y 243
+\characterdef \CYRIE 6y 244
+\characterdef \cyrie 6y 245
+\characterdef \CYRII 6y 246
+\characterdef \cyrii 6y 247
+\characterdef \CYRYI 6y 248
+\characterdef \cyryi 6y 249
+\characterdef \CYRUSHRT 6y 250
+\characterdef \cyrushrt 6y 251
+\characterdef \cyrdash 6y 196
+\characterdef \textcurrency 6y 197
+\characterdef \textnumero 6y 252
+\characterdef \guillemotleft 6y 253
+\characterdef \guillemotright 6y 254
+\characterdef \quotedblbase 6y 255
+
+\accentdef \" \CYRE 6y 240
+\accentdef \" \cyre 6y 241
+\accentdef \U \CYRI 6y 137
+\accentdef \U \cyri 6y 169
+\accentdef \" \CYRII 6y 248
+\accentdef \" \cyrii 6y 249
+\accentdef \U \CYRU 6y 250
+\accentdef \U \cyru 6y 251
+
+\modifydef 6y:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodes ^^80^^a0
+ \lccodes ^^81^^a1
+ \lccodes ^^82^^a2
+ \lccodes ^^83^^a3
+ \lccodes ^^84^^a4
+ \lccodes ^^85^^a5
+ \lccodes ^^86^^a6
+ \lccodes ^^87^^a7
+ \lccodes ^^88^^a8
+ \lccodes ^^89^^a9
+ \lccodes ^^8a^^aa
+ \lccodes ^^8b^^ab
+ \lccodes ^^8c^^ac
+ \lccodes ^^8d^^ad
+ \lccodes ^^8e^^ae
+ \lccodes ^^8f^^af
+ \lccodes ^^90^^e0
+ \lccodes ^^91^^e1
+ \lccodes ^^92^^e2
+ \lccodes ^^93^^e3
+ \lccodes ^^94^^e4
+ \lccodes ^^95^^e5
+ \lccodes ^^96^^e6
+ \lccodes ^^97^^e7
+ \lccodes ^^98^^e8
+ \lccodes ^^99^^e9
+ \lccodes ^^9a^^ea
+ \lccodes ^^9b^^ab
+ \lccodes ^^9c^^ec
+ \lccodes ^^9d^^ed
+ \lccodes ^^9e^^ee
+ \lccodes ^^9f^^ef
+ \lccodes ^^f0^^f1
+ \lccodes ^^f2^^f3
+ \lccodes ^^f4^^f5
+ \lccodes ^^f6^^f7
+ \lccodes ^^f8^^f9
+ \lccodes ^^fa^^fb
+ \def\lccodesback {\zerolccodes^^80^^ff}%
+}
+
+\registertfm cmr6y - lhr10 %
+\registertfm cmr6y 0pt-6pt lhr5 %
+\registertfm cmr6y 6pt-7pt lhr6 %
+\registertfm cmr6y 7pt-8pt lhr7 %
+\registertfm cmr6y 8pt-9pt lhr8 %
+\registertfm cmr6y 9pt-10pt lhr9 %
+\registertfm cmr6y 10pt-12pt lhr10 %
+\registertfm cmr6y 12pt-17pt lhr12 %
+\registertfm cmr6y 17pt-* lhr17 %
+
+\registertfm cmbx6y - lhbx10 %
+\registertfm cmbx6y 0pt-6pt lhbx5 %
+\registertfm cmbx6y 6pt-7pt lhbx6 %
+\registertfm cmbx6y 7pt-8pt lhbx7 %
+\registertfm cmbx6y 8pt-9pt lhbx8 %
+\registertfm cmbx6y 9pt-10pt lhbx9 %
+\registertfm cmbx6y 10pt-12pt lhbx10 %
+\registertfm cmbx6y 12pt-* lhbx12 %
+
+\registertfm cmti6y - lhti10 %
+\registertfm cmti6y 0pt-8pt lhti7 %
+\registertfm cmti6y 8pt-9pt lhti8 %
+\registertfm cmti6y 9pt-10pt lhti9 %
+\registertfm cmti6y 10pt-12pt lhti10 %
+\registertfm cmti6y 12pt-17pt lhti12 %
+\registertfm cmti6y 17pt-* lhti17 %
+
+\registertfm cmbxti6y - lhbxti10 %
+\registertfm cmbxti6y 0pt-12pt lhbxti10 %
+\registertfm cmbxti6y 12pt-17pt lhbxti12 %
+\registertfm cmbxti6y 17pt-* lhbxti17 %
+
+\registertfm cmsl6y - lhsl10 %
+\registertfm cmsl6y 0pt-6pt lhsl5 %
+\registertfm cmsl6y 6pt-7pt lhsl6 %
+\registertfm cmsl6y 7pt-8pt lhsl7 %
+\registertfm cmsl6y 8pt-9pt lhsl8 %
+\registertfm cmsl6y 9pt-10pt lhsl9 %
+\registertfm cmsl6y 10pt-12pt lhsl10 %
+\registertfm cmsl6y 12pt-17pt lhsl12 %
+\registertfm cmsl6y 17pt-* lhsl17 %
+
+\registertfm cmbxsl6y - lhbxsl10 %
+\registertfm cmsltt6y - lhsltt10 %
+
+\registertfm cmss6y - lhss10 %
+\registertfm cmss6y 0pt-9pt lhss8 %
+\registertfm cmss6y 9pt-10pt lhss9 %
+\registertfm cmss6y 10pt-12pt lhss10 %
+\registertfm cmss6y 12pt-17pt lhss12 %
+\registertfm cmss6y 17pt-* lhss17 %
+
+\registertfm cmssbx6y - lhssbx10 %
+
+\registertfm cmssi6y - lhssi10 %
+\registertfm cmssi6y 0pt-9pt lhssi8 %
+\registertfm cmssi6y 9pt-10pt lhssi9 %
+\registertfm cmssi6y 10pt-12pt lhssi10 %
+\registertfm cmssi6y 12pt-17pt lhssi12 %
+\registertfm cmssi6y 17pt-* lhssi17 %
+
+\registertfm cmtt6y - lhtt10 %
+\registertfm cmtt6y 0pt-9pt lhtt8 %
+\registertfm cmtt6y 9pt-10pt lhtt9 %
+\registertfm cmtt6y 10pt-12pt lhtt10 %
+\registertfm cmtt6y 12pt-* lhtt12 %
+
+\registertfm cmitt6y - lhitt10 %
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-8c.tex b/macros/generic/ofs/tex/enc/ofs-8c.tex
new file mode 100644
index 0000000000..8106f46d89
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-8c.tex
@@ -0,0 +1,332 @@
+% OFS: Declaration of TS1 extra encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Feb 2004 Petr Olsak
+
+% See ofsdoc.tex manual for more details.
+
+\protectreading ofs-8c.tex % This is part of OFS package
+
+\ifx \characterdef \undefined \input ofs \fi
+
+\fontmessage {\ofsmessageheader
+ Extra characters + accents of 8c encoding defined.}
+
+\accentdef \capitalgrave * 8c {\accent0 }
+\accentdef \capitalacute * 8c {\accent1 }
+\accentdef \capitalcircumflex * 8c {\accent2 }
+\accentdef \capitaltilde * 8c {\accent3 }
+\accentdef \capitaldieresis * 8c {\accent4 }
+\accentdef \capitalhungarumlaut * 8c {\accent5 }
+\accentdef \capitalring * 8c {\accent6 }
+\accentdef \capitalcaron * 8c {\accent7 }
+\accentdef \capitalbreve * 8c {\accent8 }
+\accentdef \capitalmacron * 8c {\accent9 }
+\accentdef \capitaldotaccent * 8c {\accent10 }
+\accentdef \t * 8c {\accent26 }
+\accentdef \capitaltie * 8c {\accent27 }
+\accentdef \newtie * 8c {\accent28 }
+\accentdef \capitalnewtie * 8c {\accent29 }
+
+% the \text... prefix is used only for names where math-character
+% with the same name is defined in plain.tex
+
+\characterdef \capitalcompwordmark 8c 23
+\characterdef \ascendercompwordmark 8c 31
+\characterdef \quotestraightbase 8c 13
+\characterdef \quotestraightdblbase 8c 18
+\characterdef \twelveudash 8c 21
+\characterdef \threequartersemdash 8c 22
+\characterdef \textleftarrow 8c 24
+\characterdef \textrightarrow 8c 25
+\characterdef \blank 8c 32
+\characterdef \dollar 8c 36
+\characterdef \quotesingle 8c 39
+\characterdef \asteriskcentered 8c 42
+\characterdef \dblhyphen 8c 45
+\characterdef \fractionsolidus 8c 47
+\characterdef \textlangle 8c 60
+\characterdef \textminus 8c 61
+\characterdef \textrangle 8c 62
+\characterdef \mho 8c 77
+\characterdef \bigcircle 8c 79
+\characterdef \ohm 8c 87
+\characterdef \lbrackdbl 8c 91
+\characterdef \rbrackdbl 8c 93
+\characterdef \textuparrow 8c 94
+\characterdef \textdownarrow 8c 95
+\characterdef \asciigrave 8c 96
+\characterdef \born 8c 98
+\characterdef \divorced 8c 99
+\characterdef \died 8c 100
+\characterdef \leaf 8c 108
+\characterdef \married 8c 109
+\characterdef \musicalnote 8c 110
+\characterdef \tildelow 8c 126
+\characterdef \dblhyphenchar 8c 127
+\characterdef \asciibreve 8c 128
+\characterdef \asciicaron 8c 129
+\characterdef \acutedbl 8c 130
+\characterdef \gravedbl 8c 131
+\let\dag=\relax \let\ddag=\relax
+\characterdef \dag 8c 132
+\characterdef \ddag 8c 133
+\characterdef \bardbl 8c 134
+\characterdef \perthousand 8c 135
+\characterdef \textbullet 8c 136
+\characterdef \celsius 8c 137
+\characterdef \dollaroldstyle 8c 138
+\characterdef \centoldstyle 8c 139
+\characterdef \florin 8c 140
+\characterdef \colonmonetary 8c 141
+\characterdef \won 8c 142
+\characterdef \naira 8c 143
+\characterdef \guarani 8c 144
+\characterdef \peso 8c 145
+\characterdef \lira 8c 146
+\characterdef \recipe 8c 147
+\characterdef \interrobang 8c 148
+\characterdef \interrobangdown 8c 149
+\characterdef \dong 8c 150
+\characterdef \trademark 8c 151
+\characterdef \pertenthousand 8c 152
+\characterdef \pilcrow 8c 153
+\characterdef \baht 8c 154
+\characterdef \numero 8c 155
+\characterdef \discount 8c 156
+\characterdef \estimated 8c 157
+\characterdef \openbullet 8c 158
+\characterdef \servicemark 8c 159
+\characterdef \lquill 8c 160
+\characterdef \rquill 8c 161
+\characterdef \cent 8c 162
+\characterdef \sterling 8c 163
+\characterdef \currency 8c 164
+\characterdef \yen 8c 165
+\characterdef \brokenbar 8c 166
+\characterdef \section 8c 167
+\characterdef \asciidieresis 8c 168
+\let\copyright=\relax
+\characterdef \copyright * {\ofscopyright}
+\characterdef \copyright 8c 169
+\characterdef \ordfeminine 8c 170
+\characterdef \copyleft 8c 171
+\characterdef \textlnot 8c 172
+\characterdef \circledP 8c 173
+\characterdef \registered 8c 174
+\characterdef \asciimacron 8c 175
+\characterdef \degree 8c 176
+\characterdef \textpm 8c 177
+\characterdef \twosuperior 8c 178
+\characterdef \threesuperior 8c 179
+\characterdef \asciiacute 8c 180
+\characterdef \textmu 8c 181 % micro sign
+\characterdef \paragraph 8c 182
+\characterdef \periodcentered 8c 183
+\characterdef \referencemark 8c 184
+\characterdef \onesuperior 8c 185
+\characterdef \ordmasculine 8c 186
+\characterdef \textsurd 8c 187
+\characterdef \onequarter 8c 188
+\characterdef \onehalf 8c 189
+\characterdef \threequarters 8c 190
+\characterdef \euro 8c 191
+\characterdef \texttimes 8c 214
+\characterdef \textdiv 8c 246
+
+%%% Commands:
+
+\characterdef \circled 8c {\aftergroup\circledcmd}
+\characterdef \capitalcedilla 8c {\aftergroup\capitalcedillacmd}
+\characterdef \capitalogonek 8c {\aftergroup\capitalogonekcmd}
+
+\def \circledcmd #1{{%
+ \ooalign{%
+ \hfil \raise .07ex\hbox {#1}\hfil \crcr
+ {\setextrafont\char 79}% '117 = "4F
+ }%
+}}
+\def \capitalcedillacmd #1{{\ooalign{\null#1\crcr
+ \hidewidth{\setextrafont\char11}\hidewidth}}}
+\def \capitalogonekcmd #1{{\ooalign{\null#1\crcr
+ \hidewidth\setextrafont{\char12}\hidewidth}}}
+
+%%% Extensions / reductions
+
+\modifydef 8c:vardigits;{%
+ \characterdef \vardigits * {\setextrafont}
+ \characterdef \zerooldstyle 8c 48
+ \characterdef \oneoldstyle 8c 49
+ \characterdef \twooldstyle 8c 50
+ \characterdef \threeoldstyle 8c 51
+ \characterdef \fouroldstyle 8c 52
+ \characterdef \fiveoldstyle 8c 53
+ \characterdef \sixoldstyle 8c 54
+ \characterdef \sevenoldstyle 8c 55
+ \characterdef \eightoldstyle 8c 56
+ \characterdef \nineoldstyle 8c 57
+}
+\modifydef 8c:poor;{%
+ \characterdel \capitalcompwordmark 8c 23
+ \characterdel \ascendercompwordmark 8c 31
+ \characterdel \twelveudash 8c 21
+ \characterdel \textleftarrow 8c 24
+ \characterdel \textrightarrow 8c 25
+ \characterdel \blank 8c 32
+ \characterdel \asteriskcentered 8c 42
+ \characterdel \dblhyphen 8c 45
+ \characterdel \fractionsolidus 8c 47
+ \characterdel \textlangle 8c 60
+ \characterdel \textminus 8c 61
+ \characterdel \textrangle 8c 62
+ \characterdel \mho 8c 77
+ \characterdel \bigcircle 8c 79
+ \characterdel \ohm 8c 87
+ \characterdel \lbrackdbl 8c 91
+ \characterdel \rbrackdbl 8c 93
+ \characterdel \textuparrow 8c 94
+ \characterdel \textdownarrow 8c 95
+ \characterdel \asciigrave 8c 96
+ \characterdel \born 8c 98
+ \characterdel \divorced 8c 99
+ \characterdel \died 8c 100
+ \characterdel \leaf 8c 108
+ \characterdel \married 8c 109
+ \characterdel \musicalnote 8c 110
+ \characterdel \dblhyphenchar 8c 127
+ \characterdel \asciibreve 8c 128
+ \characterdel \textbullet 8c 136
+ \characterdel \dollaroldstyle 8c 138
+ \characterdel \centoldstyle 8c 139
+ \characterdel \colonmonetary 8c 141
+ \characterdel \won 8c 142
+ \characterdel \naira 8c 143
+ \characterdel \guarani 8c 144
+ \characterdel \peso 8c 145
+ \characterdel \lira 8c 146
+ \characterdel \recipe 8c 147
+ \characterdel \interrobang 8c 148
+ \characterdel \interrobangdown 8c 149
+ \characterdel \dong 8c 150
+ \characterdel \pertenthousand 8c 152
+ \characterdel \pilcrow 8c 153
+ \characterdel \baht 8c 154
+ \characterdel \numero 8c 155
+ \characterdel \discount 8c 156
+ \characterdel \estimated 8c 157
+ \characterdel \openbullet 8c 158
+ \characterdel \servicemark 8c 159
+ \characterdel \lquill 8c 160
+ \characterdel \rquill 8c 161
+ \characterdel \copyleft 8c 171
+ \characterdel \circledP 8c 173
+ \characterdel \referencemark 8c 184
+ \characterdel \textsurd 8c 187
+ \characterdel \euro 8c 191
+ \characterdel \circled 8c {\aftergroup\circledcmd}
+ %
+ \accentdel \t * 8c 26
+ \accentdel \capitaltie * 8c 27
+ \accentdel \newtie * 8c 28
+ \accentdel \capitalnewtie * 8c 29
+}
+
+% For LaTeX name space compatibility:
+
+\let \textcapitalcompwordmark \capitalcompwordmark
+\let \textascendercompwordmark \ascendercompwordmark
+\let \textquotestraightbase \quotestraightbase
+\let \textquotestraightdblbase \quotestraightdblbase
+\let \texttwelveudash \twelveudash
+\let \textthreequartersemdash \threequartersemdash
+\let \textblank \blank
+\let \textdollar \dollar
+\let \textquotesingle \quotesingle
+\let \textasteriskcentered \asteriskcentered
+\let \textdblhyphen \dblhyphen
+\let \textfractionsolidus \fractionsolidus
+\let \textzerooldstyle \zerooldstyle
+\let \textoneoldstyle \oneoldstyle
+\let \texttwooldstyle \twooldstyle
+\let \textthreeoldstyle \threeoldstyle
+\let \textfouroldstyle \fouroldstyle
+\let \textfiveoldstyle \fiveoldstyle
+\let \textsixoldstyle \sixoldstyle
+\let \textsevenoldstyle \sevenoldstyle
+\let \texteightoldstyle \eightoldstyle
+\let \textnineoldstyle \nineoldstyle
+\let \textmho \mho
+\let \textbigcircle \bigcircle
+\let \textohm \ohm
+\let \textlbrackdbl \lbrackdbl
+\let \textrbrackdbl \rbrackdbl
+\let \textasciigrave \asciigrave
+\let \textborn \born
+\let \textdivorced \divorced
+\let \textdied \died
+\let \textleaf \leaf
+\let \textmarried \married
+\let \textmusicalnote \musicalnote
+\let \texttildelow \tildelow
+\let \textdblhyphenchar \dblhyphenchar
+\let \textasciibreve \asciibreve
+\let \textasciicaron \asciicaron
+\let \textacutedbl \acutedbl
+\let \textgravedbl \gravedbl
+\let \textdagger \dag
+\let \textdaggerdbl \ddag
+\let \textbardbl \bardbl
+\let \textperthousand \perthousand
+\let \textcelsius \celsius
+\let \textdollaroldstyle \dollaroldstyle
+\let \textcentoldstyle \centoldstyle
+\let \textflorin \florin
+\let \textcolonmonetary \colonmonetary
+\let \textwon \won
+\let \textnaira \naira
+\let \textguarani \guarani
+\let \textpeso \peso
+\let \textlira \lira
+\let \textrecipe \recipe
+\let \textinterrobang \interrobang
+\let \textinterrobangdown \interrobangdown
+\let \textdong \dong
+\let \texttrademark \trademark
+\let \textpertenthousand \pertenthousand
+\let \textpilcrow \pilcrow
+\let \textbaht \baht
+\let \textnumero \numero
+\let \textdiscount \discount
+\let \textestimated \estimated
+\let \textopenbullet \openbullet
+\let \textservicemark \servicemark
+\let \textlquill \lquill
+\let \textrquill \rquill
+\let \textcent \cent
+\let \textsterling \sterling
+\let \textcurrency \currency
+\let \textyen \yen
+\let \textbrokenbar \brokenbar
+\let \textsection \section
+\let \textasciidieresis \asciidieresis
+\let \textcopyright \copyright
+\let \textordfeminine \ordfeminine
+\let \textcopyleft \copyleft
+\let \textcircledP \circledP
+\let \textregistered \registered
+\let \textasciimacron \asciimacron
+\let \textdegree \degree
+\let \texttwosuperior \twosuperior
+\let \textthreesuperior \threesuperior
+\let \textasciiacute \asciiacute
+\let \textparagraph \paragraph
+\let \textperiodcentered \periodcentered
+\let \textreferencemark \referencemark
+\let \textonesuperior \onesuperior
+\let \textordmasculine \ordmasculine
+\let \textonequarter \onequarter
+\let \textonehalf \onehalf
+\let \textthreequarters \threequarters
+\let \texteuro \euro
+
+\endinput
+
diff --git a/macros/generic/ofs/tex/enc/ofs-8t.tex b/macros/generic/ofs/tex/enc/ofs-8t.tex
new file mode 100644
index 0000000000..75946ad162
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-8t.tex
@@ -0,0 +1,251 @@
+% OFS: Declaration of Cork (alias T1) encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Jun 2001 Petr Olsak
+% Feb 2004
+
+% See ofsdoc.tex manual for more details.
+
+\protectreading ofs-8t.tex % This is part of OFS package
+
+\fontmessage {\ofsmessageheader
+ Characters + accents of 8t encoding defined.}
+
+%%% Default accents
+
+\accentdef \` * 8t {\accent 0 }
+\accentdef \' * 8t {\accent 1 }
+\accentdef \^ * 8t {\accent 2 }
+\accentdef \~ * 8t {\accent 3 }
+\accentdef \" * 8t {\accent 4 }
+\accentdef \H * 8t {\accent 5 }
+\accentdef \r * 8t {\accent 6 }
+\accentdef \v * 8t {\accent 7 }
+\accentdef \u * 8t {\accent 8 }
+\accentdef \= * 8t {\accent 9 }
+\accentdef \. * 8t {\accent 10 }
+\accentdef \c * 8t {\accentbelow {\char11}{0pt}}
+\accentdef \k * 8t {\accentbelow {\char12}{0pt}}
+\accentdef \m * 8t {\accentbelow {,}{.1ex}}
+\accentdef \b * 8t {\accentbelow {\char9}{.15ex}}
+\accentdef \d * 8t {\accentbelow {.}{.1ex}}
+
+%%% Standard characters in plain (redefined here)
+
+\def\aa{\r a}
+\def\AA{\r A}
+
+\characterdef \dotlessi 8t 25
+\characterdef \dotlessj 8t 26
+\let\i=\dotlessi \let\j=\dotlessj
+
+\let\SS=\relax \let\AE=\relax \let\OE=\relax \let\O=\relax
+\characterdef \SS 8t 223
+\characterdef \AE 8t 198
+\characterdef \OE 8t 215
+\characterdef \O 8t 216
+
+\let\ss=\relax \let\ae=\relax \let\oe=\relax \let\o=\relax
+\characterdef \ss 8t 255
+\characterdef \ae 8t 230
+\characterdef \oe 8t 247
+\characterdef \o 8t 248
+
+%%% Extra characters from Cork encoding
+
+\let\promile=\relax
+\characterdef \promile 8t {\%\char 24 }
+\characterdef \pertenthousand 8t {\%\char 24\char 24 }
+
+\characterdef \Eth 8t 208
+\characterdef \NG 8t 141
+\characterdef \Thorn 8t 222
+\characterdef \eth 8t 240
+\characterdef \ng 8t 173
+\characterdef \thorn 8t 254
+\characterdef \Lslash 8t 138 \let\L=\Lslash
+\characterdef \lslash 8t 170 \let\l=\lslash
+
+\let\flqq=\relax \let\frqq=\relax \let\flq=\relax \let\frq=\relax
+\characterdef \flqq 8t 19
+\characterdef \frqq 8t 20
+\characterdef \flq 8t 14
+\characterdef \frq 8t 15
+
+\let\clqq=\relax \let\crqq=\relax \let\clq=\relax \let\crq=\relax
+\characterdef \clqq 8t 18
+\characterdef \crqq 8t 16
+\characterdef \clq 8t 13
+\characterdef \crq 8t `\`
+
+\let\elqq=\relax \let\erqq=\relax \let\elq=\relax \let\erq=\relax
+\characterdef \elqq 8t 16
+\characterdef \erqq 8t 17
+\characterdef \elq 8t `\`
+\characterdef \erq 8t `\'
+
+\characterdef \asciicircum 8t `\^
+\characterdef \asciitilde 8t `\~
+\characterdef \textbackslash 8t `\\
+\characterdef \fullbar 8t `\|
+\characterdef \textbraceleft 8t `\{
+\characterdef \textbraceright 8t `\}
+\characterdef \textcompwordmark 8t 23
+\characterdef \exclamdown 8t 189
+\characterdef \questiondown 8t 190
+\characterdef \textgreater 8t `\>
+\characterdef \textless 8t `\<
+\characterdef \section 8t 159
+\characterdef \sterling 8t 191
+\characterdef \underscore 8t 95
+\characterdef \quotedbl 8t 34
+
+\let\pound=\sterling
+\let\S=\section
+
+%%% Accented letters from Cork encoding
+
+\accentdef \. i 8t `\i
+\accentdef \u A 8t 128
+\accentdef \k A 8t 129
+\accentdef \' C 8t 130
+\accentdef \v C 8t 131
+\accentdef \v D 8t 132
+\accentdef \v E 8t 133
+\accentdef \k E 8t 134
+\accentdef \u G 8t 135
+\accentdef \' L 8t 136
+\accentdef \v L 8t 137
+\accentdef \' N 8t 139
+\accentdef \v N 8t 140
+\accentdef \H O 8t 142
+\accentdef \' R 8t 143
+\accentdef \v R 8t 144
+\accentdef \' S 8t 145
+\accentdef \v S 8t 146
+\accentdef \c S 8t 147
+\accentdef \v T 8t 148
+\accentdef \c T 8t 149
+\accentdef \H U 8t 150
+\accentdef \r U 8t 151
+\accentdef \" Y 8t 152
+\accentdef \' Z 8t 153
+\accentdef \v Z 8t 154
+\accentdef \. Z 8t 155
+\accentdef \. I 8t 157
+\accentdef \= d 8t 158
+\accentdef \u a 8t 160
+\accentdef \k a 8t 161
+\accentdef \' c 8t 162
+\accentdef \v c 8t 163
+\accentdef \v d 8t 164
+\accentdef \v e 8t 165
+\accentdef \k e 8t 166
+\accentdef \u g 8t 167
+\accentdef \' l 8t 168
+\accentdef \v l 8t 169
+\accentdef \' n 8t 171
+\accentdef \v n 8t 172
+\accentdef \H o 8t 174
+\accentdef \' r 8t 175
+\accentdef \v r 8t 176
+\accentdef \' s 8t 177
+\accentdef \v s 8t 178
+\accentdef \c s 8t 179
+\accentdef \v t 8t 180
+\accentdef \c t 8t 181
+\accentdef \H u 8t 182
+\accentdef \r u 8t 183
+\accentdef \" y 8t 184
+\accentdef \' z 8t 185
+\accentdef \v z 8t 186
+\accentdef \. z 8t 187
+\accentdef \` A 8t 192
+\accentdef \' A 8t 193
+\accentdef \^ A 8t 194
+\accentdef \~ A 8t 195
+\accentdef \" A 8t 196
+\accentdef \r A 8t 197
+\accentdef \c C 8t 199
+\accentdef \` E 8t 200
+\accentdef \' E 8t 201
+\accentdef \^ E 8t 202
+\accentdef \" E 8t 203
+\accentdef \` I 8t 204
+\accentdef \' I 8t 205
+\accentdef \^ I 8t 206
+\accentdef \" I 8t 207
+\accentdef \~ N 8t 209
+\accentdef \` O 8t 210
+\accentdef \' O 8t 211
+\accentdef \^ O 8t 212
+\accentdef \~ O 8t 213
+\accentdef \" O 8t 214
+\accentdef \` U 8t 217
+\accentdef \' U 8t 218
+\accentdef \^ U 8t 219
+\accentdef \" U 8t 220
+\accentdef \' Y 8t 221
+\accentdef \` a 8t 224
+\accentdef \' a 8t 225
+\accentdef \^ a 8t 226
+\accentdef \~ a 8t 227
+\accentdef \" a 8t 228
+\accentdef \r a 8t 229
+\accentdef \c c 8t 231
+\accentdef \` e 8t 232
+\accentdef \' e 8t 233
+\accentdef \^ e 8t 234
+\accentdef \" e 8t 235
+\accentdef \` i 8t 236
+\accentdef \` {\i} 8t 236
+\accentdef \' i 8t 237
+\accentdef \' {\i} 8t 237
+\accentdef \^ i 8t 238
+\accentdef \^ {\i} 8t 238
+\accentdef \" i 8t 239
+\accentdef \" {\i} 8t 239
+\accentdef \~ n 8t 241
+\accentdef \` o 8t 242
+\accentdef \' o 8t 243
+\accentdef \^ o 8t 244
+\accentdef \~ o 8t 245
+\accentdef \" o 8t 246
+\accentdef \` u 8t 249
+\accentdef \' u 8t 250
+\accentdef \^ u 8t 251
+\accentdef \" u 8t 252
+\accentdef \' y 8t 253
+
+%%% Times etc.:
+
+\modifydef 8t:losschars; {%
+ \characterdel \dotlessj 8t 26
+ \characterdel \promile 8t {\%\char 24 }
+ \characterdel \NG 8t 141
+ \characterdel \ng 8t 173
+}
+\modifydef 8t:ienc; {% For \ienc, see iencdoc.tex
+ \skipfirststep
+ \csname 8t:losschars\endcsname
+}
+\modifydef 8t:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodesloop ^^a0^^bc^^80% from a-breve to ij, first cap: A-breve
+ \lccodesloop ^^e0^^ff^^c0% from a-grave to ss, first cap: A-grave
+ \def\lccodesback {\zerolccodes ^^80^^ff}%
+}
+
+\endinput %%% the following macros will be included in LANG style files
+
+%%% Macros for quotes
+
+\def\singleuv#1{\clq#1\crq}
+\def\doubleuv#1{\clqq#1\crqq}
+\def\singlefuv#1{\frq#1\flq}
+\def\doublefuv#1{\frqq#1\flqq}
+\def\singleauv#1{\elq#1\erq}
+\def\doubleauv#1{\elqq#1\erqq}
+\let\uv=\doubleuv
+\let\fuv=\doublefuv
+\let\auv=\doubleauv
+
diff --git a/macros/generic/ofs/tex/enc/ofs-8x.tex b/macros/generic/ofs/tex/enc/ofs-8x.tex
new file mode 100644
index 0000000000..ec2ca3e981
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-8x.tex
@@ -0,0 +1,229 @@
+% Encoding definition of expert encoding of AntykwaTorunska
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% May 2004 Petr Olsak
+
+% See stormtex.html and ofsdoc.tex manuals for more details.
+
+\protectreading ofs-8x.tex % This is part of OFS package
+
+\characterdef \minusalt 8x 1
+\characterdef \plusalt 8x 2
+\characterdef \equalalt 8x 3
+\characterdef \dividealt 8x 4
+\characterdef \multiplyalt 8x 5
+\characterdef \plusminusalt 8x 6
+\characterdef \minusplusalt 8x 7
+\characterdef \lessalt 8x 8
+\characterdef \greateralt 8x 9
+\characterdef \greaterequalaltpl 8x 10
+\characterdef \lessequalaltpl 8x 11
+\characterdef \textminusplus 8x 12
+\characterdef \textless 8x 13
+\characterdef \textgreater 8x 14
+\characterdef \textlessequal 8x 15
+\characterdef \textgreaterequal 8x 16
+\characterdef \lessequalalt 8x 17
+\characterdef \greaterequalalt 8x 18
+\characterdef \dotlessisuperior 8x 19
+\characterdef \onehalf 8x 20
+\characterdef \onequarter 8x 21
+\characterdef \onethird 8x 22
+\characterdef \oneeighth 8x 23
+\characterdef \threeeighths 8x 24
+\characterdef \fiveeighths 8x 25
+\characterdef \seveneighths 8x 26
+\characterdef \threequarters 8x 27
+\characterdef \twothirds 8x 28
+\characterdef \ligfj 8x 29
+\characterdef \ligffj 8x 30
+\characterdef \ligst 8x 33
+\characterdef \ligct 8x 34
+\characterdef \ligTh 8x 35
+\characterdef \dollarsuperior 8x 36
+\characterdef \parenleftsuperior 8x 40
+\characterdef \parenrightsuperior 8x 41
+\characterdef \commasuperior 8x 44
+\characterdef \hyphensuperior 8x 45
+\characterdef \periodsuperior 8x 46
+\characterdef \fraction 8x 47
+\characterdef \zerosuperior 8x 48
+\characterdef \onesuperior 8x 49
+\characterdef \twosuperior 8x 50
+\characterdef \threesuperior 8x 51
+\characterdef \foursuperior 8x 52
+\characterdef \fivesuperior 8x 53
+\characterdef \sixsuperior 8x 54
+\characterdef \sevensuperior 8x 55
+\characterdef \eightsuperior 8x 56
+\characterdef \ninesuperior 8x 57
+\characterdef \sterlingsuperior 8x 91
+\characterdef \yensuperior 8x 92
+\characterdef \dotaccentsuperior 8x 95
+\characterdef \asuperior 8x 97
+\characterdef \bsuperior 8x 98
+\characterdef \csuperior 8x 99
+\characterdef \dsuperior 8x 100
+\characterdef \esuperior 8x 101
+\characterdef \fsuperior 8x 102
+\characterdef \hsuperior 8x 104
+\characterdef \isuperior 8x 105
+\characterdef \lsuperior 8x 108
+\characterdef \msuperior 8x 109
+\characterdef \nsuperior 8x 110
+\characterdef \osuperior 8x 111
+\characterdef \rsuperior 8x 114
+\characterdef \ssuperior 8x 115
+\characterdef \tsuperior 8x 116
+\characterdef \centsuperior 8x 124
+\characterdef \florinsuperior 8x 125
+\characterdef \euro 8x 128
+\characterdef \eurosuperior 8x 129
+\characterdef \zeronumr 8x 130
+\characterdef \onenumr 8x 131
+\characterdef \twonumr 8x 132
+\characterdef \threenumr 8x 133
+\characterdef \fournumr 8x 134
+\characterdef \fivenumr 8x 135
+\characterdef \sixnumr 8x 136
+\characterdef \sevennumr 8x 137
+\characterdef \eightnumr 8x 138
+\characterdef \ninenumr 8x 139
+\characterdef \zerodnom 8x 140
+\characterdef \onednom 8x 141
+\characterdef \twodnom 8x 142
+\characterdef \threednom 8x 143
+\characterdef \fourdnom 8x 144
+\characterdef \fivednom 8x 145
+\characterdef \sixdnom 8x 146
+\characterdef \sevendnom 8x 147
+\characterdef \eightdnom 8x 148
+\characterdef \ninednom 8x 149
+\characterdef \zeroinferior 8x 150
+\characterdef \oneinferior 8x 151
+\characterdef \twoinferior 8x 152
+\characterdef \threeinferior 8x 153
+\characterdef \fourinferior 8x 154
+\characterdef \fiveinferior 8x 155
+\characterdef \sixinferior 8x 156
+\characterdef \seveninferior 8x 157
+\characterdef \eightinferior 8x 158
+\characterdef \nineinferior 8x 159
+\characterdef \equivasymptotic 8x 160
+\characterdef \equivalence 8x 161
+\characterdef \precedes 8x 162
+\characterdef \precedesequal 8x 163
+\characterdef \lessmuch 8x 164
+\characterdef \greatermuch 8x 165
+\characterdef \follows 8x 166
+\characterdef \followsequal 8x 167
+\characterdef \element 8x 168
+\characterdef \owner 8x 169
+\characterdef \propersubset 8x 170
+\characterdef \reflexsubset 8x 171
+\characterdef \propersuperset 8x 172
+\characterdef \reflexsuperset 8x 173
+\characterdef \arrowsouthwest 8x 174
+\characterdef \arrowsoutheast 8x 175
+\characterdef \arrownorthwest 8x 176
+\characterdef \arrownortheast 8x 177
+\characterdef \arrowleft 8x 178
+\characterdef \arrowright 8x 179
+\characterdef \arrowboth 8x 180
+\characterdef \arrowup 8x 181
+\characterdef \arrowdown 8x 182
+\characterdef \arrowdblleft 8x 183
+\characterdef \arrowdblright 8x 184
+\characterdef \arrowdblup 8x 185
+\characterdef \arrowdbldown 8x 186
+\characterdef \arrowdblboth 8x 187
+\characterdef \arrowlefttophalf 8x 188
+\characterdef \arrowrighttophalf 8x 189
+\characterdef \arrowleftbothalf 8x 190
+\characterdef \arrowrightbothalf 8x 191
+\characterdef \similar 8x 192
+\characterdef \asymptoticallyequal 8x 193
+\characterdef \union 8x 194
+\characterdef \intersection 8x 195
+\characterdef \unionmulti 8x 196
+\characterdef \unionsq 8x 197
+\characterdef \intersectionsq 8x 198
+\characterdef \subsetsqequal 8x 199
+\characterdef \supersetsqequal 8x 200
+\characterdef \openbullet 8x 201
+\characterdef \circleminus 8x 202
+\characterdef \circleplus 8x 203
+\characterdef \circledivide 8x 204
+\characterdef \circlemultiply 8x 205
+\characterdef \circledot 8x 206
+\characterdef \circlecopyrt 8x 207
+\characterdef \diamondmath 8x 208
+\characterdef \asteriskmath 8x 209
+\characterdef \latticetop 8x 210
+\characterdef \perpendicular 8x 211
+\characterdef \turnstileleft 8x 212
+\characterdef \turnstileright 8x 213
+\characterdef \floorleft 8x 214
+\characterdef \floorright 8x 215
+\characterdef \ceilingleft 8x 216
+\characterdef \ceilingright 8x 217
+\characterdef \textlangle 8x 218
+\characterdef \textrangle 8x 219
+\characterdef \dblverticalbar 8x 220
+\characterdef \arrowupdndbl 8x 221
+\characterdef \arrowupdn 8x 222
+\characterdef \universal 8x 223
+\characterdef \existential 8x 224
+\characterdef \wreathproduct 8x 225
+\characterdef \club 8x 226
+\characterdef \spade 8x 227
+\characterdef \heart 8x 228
+\characterdef \diamond 8x 229
+\characterdef \logicaland 8x 230
+\characterdef \logicalor 8x 231
+\characterdef \triangle 8x 232
+\characterdef \triangleinv 8x 233
+\characterdef \triangleright 8x 234
+\characterdef \triangleleft 8x 235
+\characterdef \proportional 8x 236
+\characterdef \arrowhookleft 8x 237
+\characterdef \arrowhookright 8x 238
+\characterdef \flat 8x 239
+\characterdef \vector 8x 240
+\characterdef \tie 8x 241
+\characterdef \nabla 8x 242
+\characterdef \dollarinferior 8x 243
+\characterdef \euroinferior 8x 244
+\characterdef \sterlinginferior 8x 245
+\characterdef \yeninferior 8x 246
+\characterdef \centinferior 8x 247
+\characterdef \parenleftinferior 8x 248
+\characterdef \periodinferior 8x 249
+\characterdef \hypheninferior 8x 250
+\characterdef \commainferior 8x 251
+\characterdef \parenrightinferior 8x 252
+\characterdef \trademark 8x 253
+\characterdef \estimated 8x 254
+
+\modifydef 8z:antt; {%
+ \characterdef \degree 8z 176
+ \characterdef \euro 8z 134
+ \characterdef \trademark 8z 136
+ \characterdef \copyright 8z 137
+ \characterdef \registered 8z 138
+ \characterdef \flq 8z 142
+ \characterdef \frq 8z 143
+ \characterdef \clq 8z 154
+ \characterdef \crq 8z 155
+ \characterdef \longs 8z 149
+ \characterdef \florin 8z 151
+ \accentdel \c T 8z 222
+ \accentdel \c t 8z 189
+}
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-8z.tex b/macros/generic/ofs/tex/enc/ofs-8z.tex
new file mode 100644
index 0000000000..1fc65b8c72
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-8z.tex
@@ -0,0 +1,362 @@
+% OFS: Declaration of CS-fonts encoding
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Jun 2001 Petr Olsak
+% Feb 2004
+
+% See ofsdoc.tex manual for more details.
+
+\ifx \characterdef \undefined \input ofs \fi
+\protectreading ofs-8z.tex % This is part of OFS package
+
+\fontmessage {\ofsmessageheader
+ Characters + accents of 8z encoding defined.}
+
+%%% Default accents
+
+\accentdef \` * 8z {\accent 18 } % grave
+\accentdef \' * 8z {\accent 19 } % acute
+\accentdef \v * 8z {\accent 20 } % caron
+\accentdef \u * 8z {\accent 21 } % breve
+\accentdef \= * 8z {\accent 22 } % macron
+\accentdef \r * 8z {\accent 23 } % ring
+\accentdef \^ * 8z {\accent 94 } % circumflex
+\accentdef \. * 8z {\accent 95 } % dot-accent
+\accentdef \H * 8z {\accent 125 } % hungar-umlaut
+\accentdef \~ * 8z {\accent 126 } % tilde
+\accentdef \" * 8z {\accent 127 } % dieresis
+\accentdef \c * 8z {\accentbelow {\char24}{0pt}} % cedilla
+\accentdef \k * 8z {\accentbelow {\char157}{0pt}} % ogonek
+\accentdef \m * 8z {\accentbelow {,}{.1ex}} % comma-accent
+\accentdef \b * 8z {\accentbelow {\char22}{.15ex}} % underscore
+\accentdef \d * 8z {\accentbelow {.}{.1ex}} % dot below
+
+%%% Standard characters in plain (redefined here)
+
+\def\aa{\r a}
+\def\AA{\r A}
+
+\characterdef \dotlessi 8z 16
+\characterdef \dotlessj 8z 17
+\let\i=\dotlessi \let\j=\dotlessj
+
+\accentdef \" i 8z {\accent 127 \dotlessi}
+\accentdef \" {\i} 8z {\accent 127 \dotlessi}
+
+\let\SS=\relax \let\AE=\relax \let\OE=\relax \let\O=\relax
+\characterdef \SS 8z {SS}
+\characterdef \AE 8z 29
+\characterdef \OE 8z 30
+\characterdef \O 8z 31
+
+\let\ss=\relax \let\ae=\relax \let\oe=\relax \let\o=\relax
+\characterdef \ss 8z 25
+\characterdef \ae 8z 26
+\characterdef \oe 8z 27
+\characterdef \o 8z 28
+\characterdef \ellipsis 8z {\dots}
+
+%%% Characters available only in math fonts
+
+%\characterdef \dag 8z {\ofshexbox279}
+%\characterdef \ddag 8z {\ofshexbox27A}
+%\characterdef \section 8z {\ofshexbox278}
+%\characterdef \paragraph 8z {\ofshexbox27B}
+% defined as single characters in 8z by Z. Wagner
+
+%%% Extra characters from CS-fonts
+
+\let\promile=\relax
+\characterdef \promile 8z 141
+\characterdef \varhyphen 8z 156
+
+\let\flqq=\relax \let\frqq=\relax
+\characterdef \flqq 8z 158
+\characterdef \frqq 8z 159
+
+\let\clqq=\relax \let\crqq=\relax
+\characterdef \clqq 8z 254
+\characterdef \crqq 8z 255
+\characterdef \clq 8z `\,
+\characterdef \crq 8z `\`
+
+\let\elqq=\relax \let\erqq=\relax \let\elq=\relax \let\erq=\relax
+\characterdef \elqq 8z 92
+\characterdef \erqq 8z 34
+\characterdef \elq 8z `\`
+\characterdef \erq 8z `\'
+
+\characterdef \exclamdown 8z 60
+\characterdef \questiondown 8z 62
+
+%%% Extra characters defined in XL2Encoding vector by Z. Wagner
+
+\let\dag=\relax \let\ddag=\relax
+\characterdef \dag 8z 129
+\characterdef \ddag 8z 130
+
+\characterdef \section 8z 167 \let\S=\section
+\characterdef \paragraph 8z 133 \let\P=\paragraph
+\characterdef \ellipsis 8z 128
+\characterdef \textbullet 8z 131
+\characterdef \sterling 8z 132 \let\pound=\sterling
+\characterdef \currency 8z 164
+\characterdef \Lslash 8z 163 \let\L=\Lslash
+\characterdef \lslash 8z 179 \let\l=\lslash
+\characterdef \Eth 8z 208
+\characterdef \eth 8z 240
+\characterdef \texttimes 8z 215
+\characterdef \textdiv 8z 247
+
+%%% Accented letters from CS fonts
+
+\accentdef \` A 8z 152
+\accentdef \' A 8z 193
+\accentdef \" A 8z 196
+\accentdef \` a 8z 184
+\accentdef \' a 8z 225
+\accentdef \" a 8z 228
+\accentdef \v C 8z 200
+\accentdef \v c 8z 232
+\accentdef \v D 8z 207
+\accentdef \v d 8z 239
+\accentdef \' E 8z 201
+\accentdef \v E 8z 204
+\accentdef \' e 8z 233
+\accentdef \v e 8z 236
+\accentdef \' I 8z 205
+\accentdef \' i 8z 237
+\accentdef \' {\i} 8z 237
+\accentdef \v L 8z 165
+\accentdef \' L 8z 197
+\accentdef \v l 8z 181
+\accentdef \' l 8z 229
+\accentdef \v N 8z 210
+\accentdef \v n 8z 242
+\accentdef \' O 8z 211
+\accentdef \^ O 8z 212
+\accentdef \" O 8z 214
+\accentdef \' o 8z 243
+\accentdef \^ o 8z 244
+\accentdef \" o 8z 246
+\accentdef \' R 8z 192
+\accentdef \v R 8z 216
+\accentdef \' r 8z 224
+\accentdef \v r 8z 248
+\accentdef \v S 8z 169
+\accentdef \v s 8z 185
+\accentdef \v T 8z 171
+\accentdef \v t 8z 187
+\accentdef \r U 8z 217
+\accentdef \' U 8z 218
+\accentdef \" U 8z 220
+\accentdef \r u 8z 249
+\accentdef \' u 8z 250
+\accentdef \" u 8z 252
+\accentdef \' Y 8z 221
+\accentdef \' y 8z 253
+\accentdef \v Z 8z 174
+\accentdef \v z 8z 190
+
+%%% Accented letters added in XL2Encoding vector by Z. Wagner
+
+\accentdef \k A 8z 161
+\accentdef \^ A 8z 194
+\accentdef \u A 8z 195
+\accentdef \k a 8z 177
+\accentdef \^ a 8z 226
+\accentdef \u a 8z 227
+\accentdef \' C 8z 198
+\accentdef \c C 8z 199
+\accentdef \' c 8z 230
+\accentdef \c c 8z 231
+\accentdef \k E 8z 202
+\accentdef \" E 8z 203
+\accentdef \k e 8z 234
+\accentdef \" e 8z 235
+\accentdef \^ I 8z 206
+\accentdef \^ i 8z 238
+\accentdef \^ {\i} 8z 238
+\accentdef \' N 8z 209
+\accentdef \' n 8z 241
+\accentdef \H O 8z 213
+\accentdef \H o 8z 245
+\accentdef \' S 8z 166
+\accentdef \c S 8z 170
+\accentdef \' s 8z 182
+\accentdef \c s 8z 186
+\accentdef \c T 8z 222
+\accentdef \c t 8z 189
+\accentdef \H U 8z 219
+\accentdef \H u 8z 251
+\accentdef \' Z 8z 172
+\accentdef \. Z 8z 175
+\accentdef \' z 8z 188
+\accentdef \. z 8z 191
+
+%%% Accents uavailable in CSfonts
+
+%%% Characters unavailable in CSfonts :-(
+
+\modifydef 8z:csfont; {%
+ % available in 8c:
+ \characterdel \dag 8z 129
+ \characterdel \ddag 8z 130
+ \characterdel \section 8z 167
+ \characterdel \paragraph 8z 133
+ \characterdel \textbullet 8z 131
+ \characterdel \texttimes 8z 215
+ \characterdel \sterling 8z 132
+ \characterdel \currency 8z 164
+ \characterdel \textdiv 8z 247
+ % unavailable in 8c nor 8z:
+ \characterdel \Eth 8z 208
+ \characterdel \eth 8z 240
+ % unavailable in 8c, we can re-define these characters:
+ \characterdel \Lslash 8z 163
+ \characterdef \Lslash 8z {\plainL}
+ \characterdel \lslash 8z 179
+ \characterdef \lslash 8z {\char32l}
+ \characterdel \ellipsis 8z 128
+ \characterdef \ellipsis 8z {\dots}
+ % accents:
+ \accentdel \k A 8z 161
+ \accentdel \^ A 8z 194
+ \accentdel \u A 8z 195
+ \accentdel \k a 8z 177
+ \accentdel \^ a 8z 226
+ \accentdel \u a 8z 227
+ \accentdel \' C 8z 198
+ \accentdel \c C 8z 199
+ \accentdel \' c 8z 230
+ \accentdel \c c 8z 231
+ \accentdel \k E 8z 202
+ \accentdel \" E 8z 203
+ \accentdel \k e 8z 234
+ \accentdel \" e 8z 235
+ \accentdel \^ I 8z 206
+ \accentdel \^ i 8z 238
+ \accentdel \^ ^^10 8z 238
+ \accentdel \' N 8z 209
+ \accentdel \' n 8z 241
+ \accentdel \H O 8z 213
+ \accentdel \H o 8z 245
+ \accentdel \' S 8z 166
+ \accentdel \c S 8z 170
+ \accentdel \' s 8z 182
+ \accentdel \c s 8z 186
+ \accentdel \c T 8z 222
+ \accentdel \c t 8z 189
+ \accentdel \H U 8z 219
+ \accentdel \H u 8z 251
+ \accentdel \' Z 8z 172
+ \accentdel \. Z 8z 175
+ \accentdel \' z 8z 188
+ \accentdel \. z 8z 191
+}
+
+%%%% Cross for polish L is in TT fonts unavalable:
+
+\modifydef 8z:nocrossL; {%
+ \characterdel \Lslash 8z 163
+ \characterdel \lslash 8z 179
+ \characterdef \spacechar 8z 32
+}
+
+%%% Times etc.:
+
+\modifydef 8z:badaccents; {%
+ \accentdel \k A 8z 161
+ \accentdel \u A 8z 195
+ \accentdel \k a 8z 177
+ \accentdel \u a 8z 227
+ \accentdel \' C 8z 198
+ \accentdel \c C 8z 199
+ \accentdel \' c 8z 230
+ \accentdel \c c 8z 231
+ \accentdel \k E 8z 202
+ \accentdel \k e 8z 234
+ \accentdel \' N 8z 209
+ \accentdel \' n 8z 241
+ \accentdel \H O 8z 213
+ \accentdel \H o 8z 245
+ \accentdel \' S 8z 166
+ \accentdel \c S 8z 170
+ \accentdel \' s 8z 182
+ \accentdel \c s 8z 186
+ \accentdel \c T 8z 222
+ \accentdel \c t 8z 189
+ \accentdel \H U 8z 219
+ \accentdel \H u 8z 251
+ \accentdel \' Z 8z 172
+ \accentdel \. Z 8z 175
+ \accentdel \' z 8z 188
+ \accentdel \. z 8z 191
+ %
+ \characterdel \dotelssj 8z 17
+ \characterdel \texttimes 8z 215
+ \characterdel \textdiv 8z 247
+}
+
+%%%
+
+\modifydef 8z:ienc; {% For \ienc, see iencdoc.tex
+ \skipfirststep
+ \csname 8z:badaccents\endcsname
+ \csname 8z:csfonts\endcsname
+}
+
+\modifydef 8z:lccodes; {% For \setlang, see langdoc.tex
+ \skipfirststep
+ \lccodes ^^e1^^c1% a-acute
+ \lccodes ^^e4^^c4% a-diaeresis
+ \lccodes ^^e8^^c8% c-caron
+ \lccodes ^^ef^^cf% d-caron
+ \lccodes ^^e9^^c9% e-acute
+ \lccodes ^^ec^^cc% e-caron
+ \lccodes ^^ed^^cd% i-acute
+ \lccodes ^^e5^^c5% l-acute
+ \lccodes ^^b5^^a5% l-caron
+ \lccodes ^^f2^^d2% n-caron
+ \lccodes ^^f3^^d3% o-acute
+ \lccodes ^^f4^^d4% o-circumflex
+ \lccodes ^^f6^^d6% o-diaeresis
+ \lccodes ^^e0^^c0% r-acute
+ \lccodes ^^f8^^d8% r-caron
+ \lccodes ^^b9^^a9% s-caron
+ \lccodes ^^bb^^ab% t-caron
+ \lccodes ^^fa^^da% u-acute
+ \lccodes ^^f9^^d9% u-ring
+ \lccodes ^^fc^^dc% u-diaeresis
+ \lccodes ^^fd^^dd% y-acute
+ \lccodes ^^be^^ae% z-caron
+ \lccodes ^^b1^^a1% a-ogonek
+ \lccodes ^^e2^^c2% a-circumflex
+ \lccodes ^^e3^^c3% a-breve
+ \lccodes ^^e6^^c6% c-acute
+ \lccodes ^^e7^^c7% c-cedilla
+ \lccodes ^^ea^^ca% e-ogonek
+ \lccodes ^^eb^^cb% e-dieresis
+ \lccodes ^^ee^^ce% i-circumflex
+ \lccodes ^^f1^^d1% n-acute
+ \lccodes ^^f5^^d5% o-hungarumlaut
+ \lccodes ^^b6^^a6% s-acute
+ \lccodes ^^ba^^aa% s-cedilla
+ \lccodes ^^de^^bd% t-cedilla
+ \lccodes ^^fb^^db% u-hungarumlaut
+ \lccodes ^^bc^^ac% z-acute
+ \lccodes ^^bf^^af% z-dotaccatcent
+ \def\lccodesback {\zerolccodes^^80^^ff}%
+}
+
+\endinput %%% the following macros will be included in LANG style files
+
+%%% Macros for quotes
+
+\def\doubleuv#1{\clqq#1\crqq}
+\def\doublefuv#1{\frqq#1\flqq}
+\def\doubleauv#1{\elqq#1\erqq}
+\def\singleauv#1{\elq#1\erq}
+\let\uv=\doubleuv
+\let\fuv=\doublefuv
+\let\auv=\doubleauv
+
diff --git a/macros/generic/ofs/tex/enc/ofs-ams.tex b/macros/generic/ofs/tex/enc/ofs-ams.tex
new file mode 100644
index 0000000000..1398da632e
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-ams.tex
@@ -0,0 +1,237 @@
+% OFS: AMS fonts, math encoding declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+\protectreading ofs-ams.tex % This is part of OFS package
+
+\mathencdef\MSAMmathchars{%
+ \fontmessage{\ofsmessageheader Math symbols are set for AMS encoding.}%
+ \mathchardef\boxdot "2\hex\msamfam 00
+ \mathchardef\boxplus "2\hex\msamfam 01
+ \mathchardef\boxtimes "2\hex\msamfam 02
+ \mathchardef\square "0\hex\msamfam 03
+ \mathchardef\blacksquare "0\hex\msamfam 04
+ \mathchardef\centerdot "2\hex\msamfam 05
+ \mathchardef\lozenge "0\hex\msamfam 06
+ \mathchardef\blacklozenge "0\hex\msamfam 07
+ \mathchardef\circlearrowright "3\hex\msamfam 08
+ \mathchardef\circlearrowleft "3\hex\msamfam 09
+ \mathchardef\rightleftharpoons "3\hex\msamfam 0A
+ \mathchardef\leftrightharpoons "3\hex\msamfam 0B
+ \mathchardef\boxminus "2\hex\msamfam 0C
+ \mathchardef\Vdash "3\hex\msamfam 0D
+ \mathchardef\Vvdash "3\hex\msamfam 0E
+ \mathchardef\vDash "3\hex\msamfam 0F
+ \mathchardef\twoheadrightarrow "3\hex\msamfam 10
+ \mathchardef\twoheadleftarrow "3\hex\msamfam 11
+ \mathchardef\leftleftarrows "3\hex\msamfam 12
+ \mathchardef\rightrightarrows "3\hex\msamfam 13
+ \mathchardef\upuparrows "3\hex\msamfam 14
+ \mathchardef\downdownarrows "3\hex\msamfam 15
+ \mathchardef\upharpoonright "3\hex\msamfam 16
+ \let\restriction\upharpoonright
+ \mathchardef\downharpoonright "3\hex\msamfam 17
+ \mathchardef\upharpoonleft "3\hex\msamfam 18
+ \mathchardef\downharpoonleft "3\hex\msamfam 19
+ \mathchardef\rightarrowtail "3\hex\msamfam 1A
+ \mathchardef\leftarrowtail "3\hex\msamfam 1B
+ \mathchardef\leftrightarrows "3\hex\msamfam 1C
+ \mathchardef\rightleftarrows "3\hex\msamfam 1D
+ \mathchardef\Lsh "3\hex\msamfam 1E
+ \mathchardef\Rsh "3\hex\msamfam 1F
+ \mathchardef\rightsquigarrow "3\hex\msamfam 20
+ \mathchardef\leftrightsquigarrow "3\hex\msamfam 21
+ \mathchardef\looparrowleft "3\hex\msamfam 22
+ \mathchardef\looparrowright "3\hex\msamfam 23
+ \mathchardef\circeq "3\hex\msamfam 24
+ \mathchardef\succsim "3\hex\msamfam 25
+ \mathchardef\gtrsim "3\hex\msamfam 26
+ \mathchardef\gtrapprox "3\hex\msamfam 27
+ \mathchardef\multimap "3\hex\msamfam 28
+ \mathchardef\therefore "3\hex\msamfam 29
+ \mathchardef\because "3\hex\msamfam 2A
+ \mathchardef\doteqdot "3\hex\msamfam 2B
+ \let\Doteq\doteqdot
+ \mathchardef\triangleq "3\hex\msamfam 2C
+ \mathchardef\precsim "3\hex\msamfam 2D
+ \mathchardef\lesssim "3\hex\msamfam 2E
+ \mathchardef\lessapprox "3\hex\msamfam 2F
+ \mathchardef\eqslantless "3\hex\msamfam 30
+ \mathchardef\eqslantgtr "3\hex\msamfam 31
+ \mathchardef\curlyeqprec "3\hex\msamfam 32
+ \mathchardef\curlyeqsucc "3\hex\msamfam 33
+ \mathchardef\preccurlyeq "3\hex\msamfam 34
+ \mathchardef\leqq "3\hex\msamfam 35
+ \mathchardef\leqslant "3\hex\msamfam 36
+ \mathchardef\lessgtr "3\hex\msamfam 37
+ \mathchardef\backprime "0\hex\msamfam 38
+ \mathchardef\risingdotseq "3\hex\msamfam 3A
+ \mathchardef\fallingdotseq "3\hex\msamfam 3B
+ \mathchardef\succcurlyeq "3\hex\msamfam 3C
+ \mathchardef\geqq "3\hex\msamfam 3D
+ \mathchardef\geqslant "3\hex\msamfam 3E
+ \mathchardef\gtrless "3\hex\msamfam 3F
+ \mathchardef\sqsubset "3\hex\msamfam 40
+ \mathchardef\sqsupset "3\hex\msamfam 41
+ \mathchardef\vartriangleright "3\hex\msamfam 42
+ \mathchardef\vartriangleleft "3\hex\msamfam 43
+ \mathchardef\trianglerighteq "3\hex\msamfam 44
+ \mathchardef\trianglelefteq "3\hex\msamfam 45
+ \mathchardef\bigstar "0\hex\msamfam 46
+ \mathchardef\between "3\hex\msamfam 47
+ \mathchardef\blacktriangledown "0\hex\msamfam 48
+ \mathchardef\blacktriangleright "3\hex\msamfam 49
+ \mathchardef\blacktriangleleft "3\hex\msamfam 4A
+ \mathchardef\vartriangle "3\hex\msamfam 4D
+ \mathchardef\blacktriangle "0\hex\msamfam 4E
+ \mathchardef\triangledown "0\hex\msamfam 4F
+ \mathchardef\eqcirc "3\hex\msamfam 50
+ \mathchardef\lesseqgtr "3\hex\msamfam 51
+ \mathchardef\gtreqless "3\hex\msamfam 52
+ \mathchardef\lesseqqgtr "3\hex\msamfam 53
+ \mathchardef\gtreqqless "3\hex\msamfam 54
+ \mathchardef\Rrightarrow "3\hex\msamfam 56
+ \mathchardef\Lleftarrow "3\hex\msamfam 57
+ \mathchardef\veebar "2\hex\msamfam 59
+ \mathchardef\barwedge "2\hex\msamfam 5A
+ \mathchardef\doublebarwedge "2\hex\msamfam 5B
+ \mathchardef\angle "0\hex\msamfam 5C
+ \mathchardef\measuredangle "0\hex\msamfam 5D
+ \mathchardef\sphericalangle "0\hex\msamfam 5E
+ \mathchardef\varpropto "3\hex\msamfam 5F
+ \mathchardef\smallsmile "3\hex\msamfam 60
+ \mathchardef\smallfrown "3\hex\msamfam 61
+ \mathchardef\Subset "3\hex\msamfam 62
+ \mathchardef\Supset "3\hex\msamfam 63
+ \mathchardef\Cup "2\hex\msamfam 64
+ \let\doublecup\Cup
+ \mathchardef\Cap "2\hex\msamfam 65
+ \let\doublecap\Cap
+ \mathchardef\curlywedge "2\hex\msamfam 66
+ \mathchardef\curlyvee "2\hex\msamfam 67
+ \mathchardef\leftthreetimes "2\hex\msamfam 68
+ \mathchardef\rightthreetimes "2\hex\msamfam 69
+ \mathchardef\subseteqq "3\hex\msamfam 6A
+ \mathchardef\supseteqq "3\hex\msamfam 6B
+ \mathchardef\bumpeq "3\hex\msamfam 6C
+ \mathchardef\Bumpeq "3\hex\msamfam 6D
+ \mathchardef\lll "3\hex\msamfam 6E
+ \let\llless\lll
+ \mathchardef\ggg "3\hex\msamfam 6F
+ \let\gggtr\ggg
+ \edef\ulcorner{\delimiter "4\hex\msamfam 70\hex\msamfam 70 }%
+ \edef\urcorner{\delimiter "5\hex\msamfam 71\hex\msamfam 71 }%
+ \mathchardef\circledS "0\hex\msamfam 73
+ \mathchardef\pitchfork "3\hex\msamfam 74
+ \mathchardef\dotplus "2\hex\msamfam 75
+ \mathchardef\backsim "3\hex\msamfam 76
+ \mathchardef\backsimeq "3\hex\msamfam 77
+ \edef\llcorner{\delimiter "4\hex\msamfam 78\hex\msamfam 78 }%
+ \edef\lrcorner{\delimiter "5\hex\msamfam 79\hex\msamfam 79 }%
+ \mathchardef\complement "0\hex\msamfam 7B
+ \mathchardef\intercal "2\hex\msamfam 7C
+ \mathchardef\circledcirc "2\hex\msamfam 7D
+ \mathchardef\circledast "2\hex\msamfam 7E
+ \mathchardef\circleddash "2\hex\msamfam 7F
+ \mathchardef\rhd "2\hex\msamfam 42
+ \mathchardef\lhd "2\hex\msamfam 43
+ \mathchardef\unrhd "2\hex\msamfam 44
+ \mathchardef\unlhd "2\hex\msamfam 45
+}
+\mathencdef\MSBMmathchars {%
+ \mathchardef\lvertneqq "3\hex\msbmfam 00
+ \mathchardef\gvertneqq "3\hex\msbmfam 01
+ \mathchardef\nleq "3\hex\msbmfam 02
+ \mathchardef\ngeq "3\hex\msbmfam 03
+ \mathchardef\nless "3\hex\msbmfam 04
+ \mathchardef\ngtr "3\hex\msbmfam 05
+ \mathchardef\nprec "3\hex\msbmfam 06
+ \mathchardef\nsucc "3\hex\msbmfam 07
+ \mathchardef\lneqq "3\hex\msbmfam 08
+ \mathchardef\gneqq "3\hex\msbmfam 09
+ \mathchardef\nleqslant "3\hex\msbmfam 0A
+ \mathchardef\ngeqslant "3\hex\msbmfam 0B
+ \mathchardef\lneq "3\hex\msbmfam 0C
+ \mathchardef\gneq "3\hex\msbmfam 0D
+ \mathchardef\npreceq "3\hex\msbmfam 0E
+ \mathchardef\nsucceq "3\hex\msbmfam 0F
+ \mathchardef\precnsim "3\hex\msbmfam 10
+ \mathchardef\succnsim "3\hex\msbmfam 11
+ \mathchardef\lnsim "3\hex\msbmfam 12
+ \mathchardef\gnsim "3\hex\msbmfam 13
+ \mathchardef\nleqq "3\hex\msbmfam 14
+ \mathchardef\ngeqq "3\hex\msbmfam 15
+ \mathchardef\precneqq "3\hex\msbmfam 16
+ \mathchardef\succneqq "3\hex\msbmfam 17
+ \mathchardef\precnapprox "3\hex\msbmfam 18
+ \mathchardef\succnapprox "3\hex\msbmfam 19
+ \mathchardef\lnapprox "3\hex\msbmfam 1A
+ \mathchardef\gnapprox "3\hex\msbmfam 1B
+ \mathchardef\nsim "3\hex\msbmfam 1C
+ \mathchardef\ncong "3\hex\msbmfam 1D
+ \mathchardef\diagup "0\hex\msbmfam 1E
+ \mathchardef\diagdown "0\hex\msbmfam 1F
+ \mathchardef\varsubsetneq "3\hex\msbmfam 20
+ \mathchardef\varsupsetneq "3\hex\msbmfam 21
+ \mathchardef\nsubseteqq "3\hex\msbmfam 22
+ \mathchardef\nsupseteqq "3\hex\msbmfam 23
+ \mathchardef\subsetneqq "3\hex\msbmfam 24
+ \mathchardef\supsetneqq "3\hex\msbmfam 25
+ \mathchardef\varsubsetneqq "3\hex\msbmfam 26
+ \mathchardef\varsupsetneqq "3\hex\msbmfam 27
+ \mathchardef\subsetneq "3\hex\msbmfam 28
+ \mathchardef\supsetneq "3\hex\msbmfam 29
+ \mathchardef\nsubseteq "3\hex\msbmfam 2A
+ \mathchardef\nsupseteq "3\hex\msbmfam 2B
+ \mathchardef\nparallel "3\hex\msbmfam 2C
+ \mathchardef\nmid "3\hex\msbmfam 2D
+ \mathchardef\nshortmid "3\hex\msbmfam 2E
+ \mathchardef\nshortparallel "3\hex\msbmfam 2F
+ \mathchardef\nvdash "3\hex\msbmfam 30
+ \mathchardef\nVdash "3\hex\msbmfam 31
+ \mathchardef\nvDash "3\hex\msbmfam 32
+ \mathchardef\nVDash "3\hex\msbmfam 33
+ \mathchardef\ntrianglerighteq "3\hex\msbmfam 34
+ \mathchardef\ntrianglelefteq "3\hex\msbmfam 35
+ \mathchardef\ntriangleleft "3\hex\msbmfam 36
+ \mathchardef\ntriangleright "3\hex\msbmfam 37
+ \mathchardef\nleftarrow "3\hex\msbmfam 38
+ \mathchardef\nrightarrow "3\hex\msbmfam 39
+ \mathchardef\nLeftarrow "3\hex\msbmfam 3A
+ \mathchardef\nRightarrow "3\hex\msbmfam 3B
+ \mathchardef\nLeftrightarrow "3\hex\msbmfam 3C
+ \mathchardef\nleftrightarrow "3\hex\msbmfam 3D
+ \mathchardef\divideontimes "2\hex\msbmfam 3E
+ \mathchardef\varnothing "0\hex\msbmfam 3F
+ \mathchardef\nexists "0\hex\msbmfam 40
+ \mathchardef\Finv "0\hex\msbmfam 60
+ \mathchardef\Game "0\hex\msbmfam 61
+ \mathchardef\mho "0\hex\msbmfam 66
+ \mathchardef\eth "0\hex\msbmfam 67
+ \mathchardef\eqsim "3\hex\msbmfam 68
+ \mathchardef\beth "0\hex\msbmfam 69
+ \mathchardef\gimel "0\hex\msbmfam 6A
+ \mathchardef\daleth "0\hex\msbmfam 6B
+ \mathchardef\lessdot "2\hex\msbmfam 6C
+ \mathchardef\gtrdot "2\hex\msbmfam 6D
+ \mathchardef\ltimes "2\hex\msbmfam 6E
+ \mathchardef\rtimes "2\hex\msbmfam 6F
+ \mathchardef\shortmid "3\hex\msbmfam 70
+ \mathchardef\shortparallel "3\hex\msbmfam 71
+ \mathchardef\smallsetminus "2\hex\msbmfam 72
+ \mathchardef\thicksim "3\hex\msbmfam 73
+ \mathchardef\thickapprox "3\hex\msbmfam 74
+ \mathchardef\approxeq "3\hex\msbmfam 75
+ \mathchardef\succapprox "3\hex\msbmfam 76
+ \mathchardef\precapprox "3\hex\msbmfam 77
+ \mathchardef\curvearrowleft "3\hex\msbmfam 78
+ \mathchardef\curvearrowright "3\hex\msbmfam 79
+ \mathchardef\digamma "0\hex\msbmfam 7A
+ \mathchardef\varkappa "0\hex\msbmfam 7B
+ \mathchardef\Bbbk "0\hex\msbmfam 7C
+ \mathchardef\hslash "0\hex\msbmfam 7D
+ \mathchardef\hbar "0\hex\msbmfam 7E
+ \mathchardef\backepsilon "3\hex\msbmfam 7F
+}
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-cm.tex b/macros/generic/ofs/tex/enc/ofs-cm.tex
new file mode 100644
index 0000000000..478bfe7ae6
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-cm.tex
@@ -0,0 +1,285 @@
+% OFS: CM fonts, math encoding declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+\protectreading ofs-cm.tex % This is part of OFS package
+
+\mathencdef\doPLAINmathchars {%
+ \fontmessage{\ofsmessageheader Math codes are reset by plainTeX.}%
+ \mathcode`\ ="8000
+ \mathcode`\!="5021
+ \mathcode`\'="8000
+ \mathcode`\(="4028
+ \mathcode`\)="5029
+ \mathcode`\*="2203
+ \mathcode`+="202B
+ \mathcode`\,="613B
+ \mathcode`\-="2200
+ \mathcode`\.="013A
+ \mathcode`\/="013D
+ \mathcode`\:="303A
+ \mathcode`\;="603B
+ \mathcode`\<="313C
+ \mathcode`\=="303D
+ \mathcode`\>="313E
+ \mathcode`\?="503F
+ \mathcode`\[="405B
+ \mathcode`\\="026E
+ \mathcode`\]="505D
+ \mathcode`\_="8000
+ \mathcode`\{="4266
+ \mathcode`\|="026A
+ \mathcode`\}="5267
+ %
+ \delcode`\(="028300
+ \delcode`\)="029301
+ \delcode`\[="05B302
+ \delcode`\]="05D303
+ \delcode`\<="26830A
+ \delcode`\>="26930B
+ \delcode`\/="02F30E
+ \delcode`\|="26A30C
+ \delcode`\\="26E30F
+ %
+ \mathchardef\alpha="010B
+ \mathchardef\beta="010C
+ \mathchardef\gamma="010D
+ \mathchardef\delta="010E
+ \mathchardef\epsilon="010F
+ \mathchardef\zeta="0110
+ \mathchardef\eta="0111
+ \mathchardef\theta="0112
+ \mathchardef\iota="0113
+ \mathchardef\kappa="0114
+ \mathchardef\lambda="0115
+ \mathchardef\mu="0116
+ \mathchardef\nu="0117
+ \mathchardef\xi="0118
+ \mathchardef\pi="0119
+ \mathchardef\rho="011A
+ \mathchardef\sigma="011B
+ \mathchardef\tau="011C
+ \mathchardef\upsilon="011D
+ \mathchardef\phi="011E
+ \mathchardef\chi="011F
+ \mathchardef\psi="0120
+ \mathchardef\omega="0121
+ \mathchardef\varepsilon="0122
+ \mathchardef\vartheta="0123
+ \mathchardef\varpi="0124
+ \mathchardef\varrho="0125
+ \mathchardef\varsigma="0126
+ \mathchardef\varphi="0127
+ \mathchardef\Gamma="7000
+ \mathchardef\Delta="7001
+ \mathchardef\Theta="7002
+ \mathchardef\Lambda="7003
+ \mathchardef\Xi="7004
+ \mathchardef\Pi="7005
+ \mathchardef\Sigma="7006
+ \mathchardef\Upsilon="7007
+ \mathchardef\Phi="7008
+ \mathchardef\Psi="7009
+ \mathchardef\Omega="700A
+ %
+ \mathchardef\aleph="0240
+ \def\hbar{{\mathchar'26\mkern-9muh}}
+ \mathchardef\imath="017B
+ \mathchardef\jmath="017C
+ \mathchardef\ell="0160
+ \mathchardef\wp="017D
+ \mathchardef\Re="023C
+ \mathchardef\Im="023D
+ \mathchardef\partial="0140
+ \mathchardef\infty="0231
+ \mathchardef\prime="0230
+ \mathchardef\emptyset="023B
+ \mathchardef\nabla="0272
+ \def\surd{{\mathchar"1270}}
+ \mathchardef\top="023E
+ \mathchardef\bot="023F
+ \def\angle{{\vbox{\ialign{$\m@th\scriptstyle####$\crcr
+ \not\mathrel{\mkern14mu}\crcr
+ \noalign{\nointerlineskip}
+ \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}
+ \mathchardef\triangle="0234
+ \mathchardef\forall="0238
+ \mathchardef\exists="0239
+ \mathchardef\neg="023A \let\lnot=\neg
+ \mathchardef\flat="015B
+ \mathchardef\natural="015C
+ \mathchardef\sharp="015D
+ \mathchardef\clubsuit="027C
+ \mathchardef\diamondsuit="027D
+ \mathchardef\heartsuit="027E
+ \mathchardef\spadesuit="027F
+ %
+ \mathchardef\coprod="1360
+ \mathchardef\bigvee="1357
+ \mathchardef\bigwedge="1356
+ \mathchardef\biguplus="1355
+ \mathchardef\bigcap="1354
+ \mathchardef\bigcup="1353
+ \mathchardef\intop="1352 \def\int{\intop\nolimits}
+ \mathchardef\prod="1351
+ \mathchardef\sum="1350
+ \mathchardef\bigotimes="134E
+ \mathchardef\bigoplus="134C
+ \mathchardef\bigodot="134A
+ \mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
+ \mathchardef\bigsqcup="1346
+ \mathchardef\smallint="1273
+ %
+ \mathchardef\triangleleft="212F
+ \mathchardef\triangleright="212E
+ \mathchardef\bigtriangleup="2234
+ \mathchardef\bigtriangledown="2235
+ \mathchardef\wedge="225E \let\land=\wedge
+ \mathchardef\vee="225F \let\lor=\vee
+ \mathchardef\cap="225C
+ \mathchardef\cup="225B
+ \mathchardef\ddagger="227A
+ \mathchardef\dagger="2279
+ \mathchardef\sqcap="2275
+ \mathchardef\sqcup="2274
+ \mathchardef\uplus="225D
+ \mathchardef\amalg="2271
+ \mathchardef\diamond="2205
+ \mathchardef\bullet="220F
+ \mathchardef\wr="226F
+ \mathchardef\div="2204
+ \mathchardef\odot="220C
+ \mathchardef\oslash="220B
+ \mathchardef\otimes="220A
+ \mathchardef\ominus="2209
+ \mathchardef\oplus="2208
+ \mathchardef\mp="2207
+ \mathchardef\pm="2206
+ \mathchardef\circ="220E
+ \mathchardef\bigcirc="220D
+ \mathchardef\setminus="226E
+ \mathchardef\cdot="2201
+ \mathchardef\ast="2203
+ \mathchardef\times="2202
+ \mathchardef\star="213F
+ %
+ \mathchardef\propto="322F
+ \mathchardef\sqsubseteq="3276
+ \mathchardef\sqsupseteq="3277
+ \mathchardef\parallel="326B
+ \mathchardef\mid="326A
+ \mathchardef\dashv="3261
+ \mathchardef\vdash="3260
+ \mathchardef\nearrow="3225
+ \mathchardef\searrow="3226
+ \mathchardef\nwarrow="322D
+ \mathchardef\swarrow="322E
+ \mathchardef\Leftrightarrow="322C
+ \mathchardef\Leftarrow="3228
+ \mathchardef\Rightarrow="3229
+ \def\neq{\not=}
+ \let\ne=\neq
+ \mathchardef\leq="3214 \let\le=\leq
+ \mathchardef\geq="3215 \let\ge=\geq
+ \mathchardef\succ="321F
+ \mathchardef\prec="321E
+ \mathchardef\approx="3219
+ \mathchardef\succeq="3217
+ \mathchardef\preceq="3216
+ \mathchardef\supset="321B
+ \mathchardef\subset="321A
+ \mathchardef\supseteq="3213
+ \mathchardef\subseteq="3212
+ \mathchardef\in="3232
+ \mathchardef\ni="3233
+ \let\owns=\ni
+ \mathchardef\gg="321D
+ \mathchardef\ll="321C
+ \mathchardef\not="3236
+ \mathchardef\leftrightarrow="3224
+ \mathchardef\leftarrow="3220
+ \let\gets=\leftarrow
+ \mathchardef\rightarrow="3221
+ \let\to=\rightarrow
+ \mathchardef\mapstochar="3237
+ \def\mapsto{\mapstochar\rightarrow}
+ \mathchardef\sim="3218
+ \mathchardef\simeq="3227
+ \mathchardef\perp="323F
+ \mathchardef\equiv="3211
+ \mathchardef\asymp="3210
+ \mathchardef\smile="315E
+ \mathchardef\frown="315F
+ \mathchardef\leftharpoonup="3128
+ \mathchardef\leftharpoondown="3129
+ \mathchardef\rightharpoonup="312A
+ \mathchardef\rightharpoondown="312B
+ %
+ \def\Relbar{\mathrel=}
+ \mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
+ \mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
+ \def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
+ \def\models{\mathrel|\joinrel=}
+ \def\Longrightarrow{\Relbar\joinrel\Rightarrow}
+ \def\longrightarrow{\relbar\joinrel\rightarrow}
+ \def\longleftarrow{\leftarrow\joinrel\relbar}
+ \def\Longleftarrow{\Leftarrow\joinrel\Relbar}
+ \def\longmapsto{\mapstochar\longrightarrow}
+ \def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
+ \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
+ \def\iff{\;\Longleftrightarrow\;}
+ %
+ \mathchardef\ldotp="613A % ldot as a punctuation mark
+ \mathchardef\cdotp="6201 % cdot as a punctuation mark
+ \mathchardef\colon="603A % colon as a punctuation mark
+ \def\ldots{\mathinner{\ldotp\ldotp\ldotp}}
+ \def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
+ \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
+ \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
+ \def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
+ \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}
+ %
+ \def\acute{\mathaccent"7013 }
+ \def\grave{\mathaccent"7012 }
+ \def\ddot{\mathaccent"707F }
+ \def\tilde{\mathaccent"707E }
+ \def\bar{\mathaccent"7016 }
+ \def\breve{\mathaccent"7015 }
+ \def\check{\mathaccent"7014 }
+ \def\hat{\mathaccent"705E }
+ \def\vec{\mathaccent"017E }
+ \def\dot{\mathaccent"705F }
+ \def\widetilde{\mathaccent"0365 }
+ \def\widehat{\mathaccent"0362 }
+ %
+ \def\lmoustache{\delimiter"437A340 }% top from (, bottom from )
+ \def\rmoustache{\delimiter"537B341 }% top from ), bottom from (
+ \def\lgroup{\delimiter"4\hex\bffam 2833A }% extensible ( with sharper tips
+ \def\rgroup{\delimiter"5\hex\bffam 2933B }% extensible ) with sharper tips
+ \def\arrowvert{\delimiter"26A33C }% arrow without arrowheads
+ \def\Arrowvert{\delimiter"26B33D }% double arrow without arrowheads
+ \def\bracevert{\delimiter"\hex\ttfam 7C33E }% the vertical bar that extends braces
+ \def\Vert{\delimiter"26B30D }\let\|=\Vert
+ \def\vert{\delimiter"26A30C }
+ \def\uparrow{\delimiter"3222378 }
+ \def\downarrow{\delimiter"3223379 }
+ \def\updownarrow{\delimiter"326C33F }
+ \def\Uparrow{\delimiter"322A37E }
+ \def\Downarrow{\delimiter"322B37F }
+ \def\Updownarrow{\delimiter"326D377 }
+ \def\backslash{\delimiter"26E30F }% for double coset G\backslash H
+ \def\rangle{\delimiter"526930B }
+ \def\langle{\delimiter"426830A }
+ \def\rbrace{\delimiter"5267309 }\let\}=\rbrace
+ \def\lbrace{\delimiter"4266308 }\let\{=\lbrace
+ \def\rceil{\delimiter"5265307 }
+ \def\lceil{\delimiter"4264306 }
+ \def\rfloor{\delimiter"5263305 }
+ \def\lfloor{\delimiter"4262304 }
+}
+\endinput
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-mt.tex b/macros/generic/ofs/tex/enc/ofs-mt.tex
new file mode 100644
index 0000000000..a10b15cf1c
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-mt.tex
@@ -0,0 +1,122 @@
+% OFS: MathTime fonts, math encoding declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+\protectreading ofs-mt.tex % This is part of OFS package
+
+\mathencdef\MTmathchars {%
+ \fontmessage{\ofsmessageheader Math codes are set for MT encoding}%
+ \mathcode`\,="602C
+ \mathcode`\.="002E
+ \mathchardef\ldotp="602E
+ \mathcode`\/="002F
+ \mathcode`\<="3\hex\mtifam 3C
+ \mathcode`\>="3\hex\mtifam 3E
+ \mathcode`+="2243
+ \mathcode`=="3244
+ %
+ \def\tmpa{8z}\ifx\fotenc\tmpa
+ \mathaccentdef \acute "7013
+ \mathaccentdef \bar "7016
+ \mathaccentdef \breve "7015
+ \mathaccentdef \check "7014
+ \mathaccentdef \ddot "707F
+ \mathaccentdef \dot "705F
+ \mathaccentdef \grave "7012
+ \mathaccentdef \hat "705E
+ \mathaccentdef \tilde "707E
+ \else
+ \mathaccentdef \acute "7001
+ \mathaccentdef \bar "7009
+ \mathaccentdef \breve "7008
+ \mathaccentdef \check "7007
+ \mathaccentdef \ddot "7004
+ \mathaccentdef \dot "700A
+ \mathaccentdef \grave "7000
+ \mathaccentdef \hat "7002
+ \mathaccentdef \tilde "7003
+ \fi
+ \mathaccentdef \vec "0245
+ %
+ \mathchardef\alpha "0\hex\mtifam 0B
+ \mathchardef\beta "0\hex\mtifam 0C
+ \mathchardef\gamma "0\hex\mtifam 0D
+ \mathchardef\delta "0\hex\mtifam 0E
+ \mathchardef\epsilon "0\hex\mtifam 0F
+ \mathchardef\zeta "0\hex\mtifam 10
+ \mathchardef\eta "0\hex\mtifam 11
+ \mathchardef\theta "0\hex\mtifam 12
+ \mathchardef\iota "0\hex\mtifam 13
+ \mathchardef\kappa "0\hex\mtifam 14
+ \mathchardef\lambda "0\hex\mtifam 15
+ \mathchardef\mu "0\hex\mtifam 16
+ \mathchardef\nu "0\hex\mtifam 17
+ \mathchardef\xi "0\hex\mtifam 18
+ \mathchardef\pi "0\hex\mtifam 19
+ \mathchardef\rho "0\hex\mtifam 1A
+ \mathchardef\sigma "0\hex\mtifam 1B
+ \mathchardef\tau "0\hex\mtifam 1C
+ \mathchardef\upsilon "0\hex\mtifam 1D
+ \mathchardef\phi "0\hex\mtifam 1E
+ \mathchardef\chi "0\hex\mtifam 1F
+ \mathchardef\psi "0\hex\mtifam 20
+ \mathchardef\omega "0\hex\mtifam 21
+ \mathchardef\varepsilon "0\hex\mtifam 22
+ \mathchardef\vartheta "0\hex\mtifam 23
+ \mathchardef\varpi "0\hex\mtifam 24
+ \mathchardef\varrho "0\hex\mtifam 25
+ \mathchardef\varsigma "0\hex\mtifam 26
+ \mathchardef\varphi "0\hex\mtifam 27
+ %
+ \mathchardef\Gamma "0\hex\gufam 47
+ \mathchardef\Delta "0\hex\gufam 44
+ \mathchardef\Theta "0\hex\gufam 27
+ \mathchardef\Lambda "0\hex\gufam 4C
+ \mathchardef\Xi "0\hex\gufam 58
+ \mathchardef\Pi "0\hex\gufam 50
+ \mathchardef\Sigma "0\hex\gufam 53
+ \mathchardef\Upsilon "0\hex\gufam 57
+ \mathchardef\Phi "0\hex\gufam 28
+ \mathchardef\Psi "0\hex\gufam 29
+ \mathchardef\Omega "0\hex\gufam 32
+ %
+ \mathchardef\imath "0\hex\mtifam 7B
+ \mathchardef\jmath "0\hex\mtifam 7C
+ %
+ \mathchardef\partial "0\hex\mtifam 40
+ \mathchardef\star "2\hex\mtifam 3F
+ \mathchardef\ell "0\hex\mtifam 60
+ \mathchardef\wp "0\hex\mtifam 7D
+ \mathchardef\flat "0\hex\mtifam 5B
+ \mathchardef\frown "3\hex\mtifam 5F
+ \mathchardef\smile "3\hex\mtifam 5E
+ \mathchardef\lhook "3\hex\mtifam 2C
+ \mathchardef\rhook "3\hex\mtifam 2D
+ \mathchardef\natural "0\hex\mtifam 5C
+ \mathchardef\sharp "0\hex\mtifam 5D
+ \mathchardef\leftharpoonup "3\hex\mtifam 28
+ \mathchardef\leftharpoondown "3\hex\mtifam 29
+ \mathchardef\rightharpoonup "3\hex\mtifam 2A
+ \mathchardef\rightharpoondown "3\hex\mtifam 2B
+ %
+ \mathchardef\triangleleft "2247
+ \mathchardef\triangleright "2246
+ \def\tmpa{8z}\ifx\fotenc\tmpa
+ \mathchardef\ddagger "2082
+ \mathchardef\dagger "2081
+ \fi
+ \def\lgroup{\delimiter"4\hex\bffam 2833A }% extensible ( with sharper tips
+ \def\rgroup{\delimiter"5\hex\bffam 2933B }% extensible ) with sharper tips
+ \def\bracevert{\delimiter"\hex\ttfam 7C33E }% the vertical bar that extends braces
+ %
+ \def\mathcharsback{\mathencread ofs-cm;}%
+}
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-ps.tex b/macros/generic/ofs/tex/enc/ofs-ps.tex
new file mode 100644
index 0000000000..0d358ffca2
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-ps.tex
@@ -0,0 +1,207 @@
+% OFS: PS fonts + math encoding declaration for \def\fomenc{PS}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+\protectreading ofs-ps.tex % This is part of OFS package
+
+\mathencdef\PSmathchars {%
+ \fontmessage{\ofsmessageheader Math codes are set for PS encoding.}%
+ \mathcode`\,="602C
+ \mathcode`\.="002E
+ \mathchardef\ldotp="602E
+ \mathcode`\/="002F
+ \mathcode`\-="2\hex\symbfam 2D
+ \mathcode`\<="3\hex\symbfam 3C
+ \mathcode`\>="3\hex\symbfam 3E
+ \mathcode`\|="0\hex\symbfam 7C
+ %
+ \delcode`\<="\hex\symbfam E130A
+ \delcode`\>="\hex\symbfam F130B
+ \delcode`\|="\hex\symbfam 7C30C
+ %
+ \edef\langle{\delimiter"4\hex\symbfam E130A }%
+ \edef\rangle{\delimiter"5\hex\symbfam F130B }%
+ \edef\lbrace{\delimiter"4\hex\symbfam 7B308 }\let\{=\lbrace
+ \edef\vert {\delimiter"2\hex\symbfam 7C30C }\let\|=\vert
+ \edef\rbrace{\delimiter"5\hex\symbfam 7D309 }\let\}=\rbrace
+ % \bffam, \ttfam can be allocated with non-plain values
+ \def\lgroup{\delimiter"4\hex\bffam 2833A }% extensible ( with sharper tips
+ \def\rgroup{\delimiter"5\hex\bffam 2933B }% extensible ) with sharper tips
+ \def\bracevert{\delimiter"\hex\ttfam 7C33E }% the vertical bar that extends braces
+ %
+ \def\tmpa{8z}\ifx\fotenc\tmpa
+ \mathaccentdef \acute "7013
+ \mathaccentdef \bar "7016
+ \mathaccentdef \breve "7015
+ \mathaccentdef \check "7014
+ \mathaccentdef \ddot "707F
+ \mathaccentdef \dot "705F
+ \mathaccentdef \grave "7012
+ \mathaccentdef \hat "705E
+ \mathaccentdef \tilde "707E
+ \else
+ \mathaccentdef \acute "7001
+ \mathaccentdef \bar "7009
+ \mathaccentdef \breve "7008
+ \mathaccentdef \check "7007
+ \mathaccentdef \ddot "7004
+ \mathaccentdef \dot "700A
+ \mathaccentdef \grave "7000
+ \mathaccentdef \hat "7002
+ \mathaccentdef \tilde "7003
+ \fi
+ \let\vec=\overrightarrow % rightarrow accent is not present in Symbol
+ %
+ \mathchardef\alpha "0\hex\symbofam 61
+ \mathchardef\beta "0\hex\symbofam 62
+ \mathchardef\gamma "0\hex\symbofam 67
+ \mathchardef\delta "0\hex\symbofam 64
+ \mathchardef\epsilon "0\hex\symbofam 65
+ \mathchardef\zeta "0\hex\symbofam 7A
+ \mathchardef\eta "0\hex\symbofam 68
+ \mathchardef\theta "0\hex\symbofam 71
+ \mathchardef\iota "0\hex\symbofam 69
+ \mathchardef\kappa "0\hex\symbofam 6B
+ \mathchardef\lambda "0\hex\symbofam 6C
+ \mathchardef\mu "0\hex\symbofam 6D
+ \mathchardef\nu "0\hex\symbofam 6E
+ \mathchardef\xi "0\hex\symbofam 78
+ \mathchardef\pi "0\hex\symbofam 70
+ \mathchardef\rho "0\hex\symbofam 72
+ \mathchardef\sigma "0\hex\symbofam 73
+ \mathchardef\tau "0\hex\symbofam 74
+ \mathchardef\upsilon "0\hex\symbofam 75
+ \mathchardef\phi "0\hex\symbofam 66
+ \mathchardef\chi "0\hex\symbofam 63
+ \mathchardef\psi "0\hex\symbofam 79
+ \mathchardef\omega "0\hex\symbofam 77
+ \let\varepsilon \epsilon
+ \let\vartheta \theta
+ \mathchardef\varpi "0\hex\symbofam 76
+ \let\varrho \rho
+ \let\varsigma \sigma
+ \let\varphi \phi
+ \mathchardef\Gamma "0\hex\symbfam 47
+ \mathchardef\Delta "0\hex\symbfam 44
+ \mathchardef\Theta "0\hex\symbfam 51
+ \mathchardef\Lambda "0\hex\symbfam 4C
+ \mathchardef\Xi "0\hex\symbfam 58
+ \mathchardef\Pi "0\hex\symbfam 50
+ \mathchardef\Sigma "0\hex\symbfam 53
+ \mathchardef\Upsilon "0\hex\symbfam A1
+ \mathchardef\Phi "0\hex\symbfam 46
+ \mathchardef\Psi "0\hex\symbfam 59
+ \mathchardef\Omega "0\hex\symbfam 57
+ %
+ \mathchardef\aleph "0\hex\symbfam C0
+ \def\tmpa{8z}\ifx\fotenc\tmpa
+ \mathchardef\imath "0110
+ \else
+ \mathchardef\imath "0169
+ \fi
+ \mathchardef\Re "0\hex\symbfam C2
+ \mathchardef\Im "0\hex\symbfam C1
+ \mathchardef\partial "0\hex\symbfam B6
+ \mathchardef\infty "0\hex\symbfam A5
+ \mathchardef\emptyset "0\hex\symbfam C6
+ \mathchardef\nabla "0\hex\symbfam D1
+ \mathchardef\bot "0\hex\symbfam 5E
+ \mathchardef\forall "0\hex\symbfam 22
+ \mathchardef\exists "0\hex\symbfam 24
+ \mathchardef\neg "0\hex\symbfam D8 \let\lnot \neg
+ \mathchardef\clubsuit "0\hex\symbfam A7
+ \mathchardef\diamondsuit "0\hex\symbfam A8
+ \mathchardef\heartsuit "0\hex\symbfam A9
+ \mathchardef\spadesuit "0\hex\symbfam AA
+ %
+ \mathchardef\intopinternal "1\hex\symbfam F2
+ \mathchardef\prodinternal "1\hex\symbfam D5
+ \mathchardef\suminternal "1\hex\symbfam E5
+ %
+ \def\intop {\mathop{\let\oriop=\intopinternal
+ \mathpalette\setop{\char"F2}\kern.06em}}%
+ \def\prod {\mathop{\let\oriop=\prodinternal
+ \mathpalette\setop{\char"F2}}}%
+ \def\sum {\mathop{\let\oriop=\suminternal
+ \mathpalette\setop{\char"E5}}}%
+ \def\setop ##1##2{\ifx##1\displaystyle % Bigger \int, \prod, \sum
+ \vcenter{\hbox{\bigsymbofont##2}}% % in \displaystyle
+ \else ##1\oriop\fi}
+ %
+ \mathchardef\wedge "2\hex\symbfam D9 \let\land \wedge
+ \mathchardef\vee "2\hex\symbfam DA \let\lor \vee
+ \mathchardef\cap "2\hex\symbfam C7
+ \mathchardef\cup "2\hex\symbfam C8
+ \def\tmpa{8z}\ifx\fotenc\tmpa
+ \mathchardef\ddagger "2082
+ \mathchardef\dagger "2081
+ \fi
+ \mathchardef\bullet "2\hex\symbfam B7
+ \mathchardef\div "2\hex\symbfam B8
+ \mathchardef\oslash "2\hex\symbfam C6
+ \mathchardef\otimes "2\hex\symbfam C4
+ \mathchardef\oplus "2\hex\symbfam C5
+ \mathchardef\pm "2\hex\symbfam B1
+ \mathchardef\cdot "2\hex\symbfam D7
+ \mathchardef\ast "2\hex\symbfam 2A
+ \mathchardef\times "2\hex\symbfam B4
+ \let\star \ast
+ %
+ \mathchardef\propto "3\hex\symbfam B5
+ \mathchardef\mid "3\hex\symbfam EF
+ \mathchardef\Leftrightarrow "3\hex\symbfam DB
+ \mathchardef\Leftarrow "3\hex\symbfam DC
+ \mathchardef\Rightarrow "3\hex\symbfam DE
+ \mathchardef\neq "3\hex\symbfam B9 \let\ne \neq
+ \mathchardef\leq "3\hex\symbfam A3 \let\le \leq
+ \mathchardef\geq "3\hex\symbfam B3 \let\ge \geq
+ \mathchardef\approx "3\hex\symbfam BB
+ \mathchardef\supset "3\hex\symbfam C9
+ \mathchardef\subset "3\hex\symbfam CC
+ \mathchardef\supseteq "3\hex\symbfam CA
+ \mathchardef\subseteq "3\hex\symbfam CD
+ \mathchardef\in "3\hex\symbfam CE
+ \mathchardef\ni "3\hex\symbfam 27 \let\owns \ni
+ \mathchardef\leftrightarrow "3\hex\symbfam AB
+ \mathchardef\leftarrow "3\hex\symbfam AC \let\gets \leftarrow
+ \mathchardef\rightarrow "3\hex\symbfam AE \let\to \rightarrow
+ \mathchardef\sim "3\hex\symbfam 7E
+ \mathchardef\simeq "3\hex\symbfam 40
+ \mathchardef\perp "3\hex\symbfam 5E
+ \mathchardef\equiv "3\hex\symbfam BA
+ %
+ \def\longrightarrow{\mathrel{\smash{\mathchar"200}}\joinrel\mathchar"3221 }%
+ \def\longleftarrow{\mathchar"3220\joinrel\mathrel{\smash{\mathchar"200}}}%
+ \def\Longrightarrow{\mathrel{\pickmathfont{cmr8z}=}\joinrel\mathchar"3229 }%
+ \def\Longleftarrow{\mathchar"3228\joinrel\mathrel{\pickmathfont{cmr8z}=}}%
+ \def\mapsto{\mapstochar\mathchar"3221 }%
+ \def\longleftrightarrow{\mathchar"3220\joinrel\mathchar"3221 }%
+ \def\Longleftrightarrow{\mathchar"3228\joinrel\mathchar"3229 }%
+ \def\rightarrowfill{$\mathsurround0pt\smash{\mathchar"200}\mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu\smash{\mathchar"200}\mkern-2mu$}\hfill
+ \mkern-7mu\mathchar"221$}%
+ \def\leftarrowfill{$\mathsurround0pt\mathchar"220\mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu\smash{\mathchar"200}\mkern-2mu$}\hfill
+ \mkern-7mu\smash{\mathchar"200}$}%
+ %
+ % The following characters are not present im psyr:
+ %
+ \def\jmath{{\pickmathfont{cmmi}{\char"7C}}}%
+ \def\ell{{\pickmathfont{cmmi}{\char"60}}}%
+ \def\wp{{\pickmathfont{cmmi}{\char"7D}}}%
+ \def\flat{{\pickmathfont{cmmi}{\char"5B}}}%
+ \def\natural{{\pickmathfont{cmmi}{\char"5C}}}%
+ \let\sharp \natural
+ \def\triangleleft{\mathbin{\pickmathfont{cmmi}{\char"2F}}}%
+ \def\triangleright{\mathbin{\pickmathfont{cmmi}{\char"2E}}}%
+ \def\smile{\mathrel{\pickmathfont{cmmi}{\char"5E}}}%
+ \def\frown{\mathrel{\pickmathfont{cmmi}{\char"5F}}}%
+ \def\leftharpoonup{\mathrel{\pickmathfont{cmmi}{\char"28}}}%
+ \def\leftharpoondown{\mathrel{\pickmathfont{cmmi}{\char"29}}}%
+ \def\rightharpoonup{\mathrel{\pickmathfont{cmmi}{\char"2A}}}%
+ \def\rightharpoondown{\mathrel{\pickmathfont{cmmi}{\char"2B}}}%
+ %
+ \def\mathcharsback{\mathencread ofs-cm;}%
+}
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-px.tex b/macros/generic/ofs/tex/enc/ofs-px.tex
new file mode 100644
index 0000000000..e464f080f7
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-px.tex
@@ -0,0 +1,98 @@
+% OFS: TX fonts + math encoding declaration for \def\fomenc{PX}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+\protectreading ofs-px.tex % This is part of OFS package
+
+\mathencdef\PXmathchars {%
+ \fontmessage{\ofsmessageheader Math codes are set for PX encoding.}%
+ \mathcode`\, "602C
+ \mathcode`\. "002E
+ \mathchardef\ldotp "602E
+ \mathcode`\/ "002F
+ \mathcode`\< "3\hex\mifam 3C
+ \mathcode`\> "3\hex\mifam 3E
+ %
+ \mathchardef\alpha "0\hex\mifam 0B
+ \mathchardef\beta "0\hex\mifam 0C
+ \mathchardef\gamma "0\hex\mifam 0D
+ \mathchardef\delta "0\hex\mifam 0E
+ \mathchardef\epsilon "0\hex\mifam 0F
+ \mathchardef\zeta "0\hex\mifam 10
+ \mathchardef\eta "0\hex\mifam 11
+ \mathchardef\theta "0\hex\mifam 12
+ \mathchardef\iota "0\hex\mifam 13
+ \mathchardef\kappa "0\hex\mifam 14
+ \mathchardef\lambda "0\hex\mifam 15
+ \mathchardef\mu "0\hex\mifam 16
+ \mathchardef\nu "0\hex\mifam 17
+ \mathchardef\xi "0\hex\mifam 18
+ \mathchardef\pi "0\hex\mifam 19
+ \mathchardef\rho "0\hex\mifam 1A
+ \mathchardef\sigma "0\hex\mifam 1B
+ \mathchardef\tau "0\hex\mifam 1C
+ \mathchardef\upsilon "0\hex\mifam 1D
+ \mathchardef\phi "0\hex\mifam 1E
+ \mathchardef\chi "0\hex\mifam 1F
+ \mathchardef\psi "0\hex\mifam 20
+ \mathchardef\omega "0\hex\mifam 21
+ \mathchardef\varepsilon "0\hex\mifam 22
+ \mathchardef\vartheta "0\hex\mifam 23
+ \mathchardef\varpi "0\hex\mifam 24
+ \mathchardef\varrho "0\hex\mifam 25
+ \mathchardef\varsigma "0\hex\mifam 26
+ \mathchardef\varphi "0\hex\mifam 27
+ %
+ \mathchardef\Gamma "0\hex\rmsyfam 00
+ \mathchardef\Delta "0\hex\rmsyfam 01
+ \mathchardef\Theta "0\hex\rmsyfam 02
+ \mathchardef\Lambda "0\hex\rmsyfam 03
+ \mathchardef\Xi "0\hex\rmsyfam 04
+ \mathchardef\Pi "0\hex\rmsyfam 05
+ \mathchardef\Sigma "0\hex\rmsyfam 06
+ \mathchardef\Upsilon "0\hex\rmsyfam 07
+ \mathchardef\Phi "0\hex\rmsyfam 08
+ \mathchardef\Psi "0\hex\rmsyfam 09
+ \mathchardef\Omega "0\hex\rmsyfam 0A
+ %
+ \mathchardef\imath "0\hex\mifam 7B
+ \mathchardef\jmath "0\hex\mifam 7C
+ \mathchardef\ell "0\hex\mifam 60
+ \mathchardef\wp "0\hex\mifam 7D
+ \mathchardef\partial "0\hex\mifam 40
+ \mathchardef\flat "0\hex\mifam 5B
+ \mathchardef\natural "0\hex\mifam 5C
+ \mathchardef\sharp "0\hex\mifam 5D
+ \mathchardef\triangleleft "2\hex\mifam 2F
+ \mathchardef\triangleright "2\hex\mifam 2E
+ \mathchardef\star "2\hex\mifam 3F
+ \mathchardef\smile "3\hex\mifam 5E
+ \mathchardef\frown "3\hex\mifam 5F
+ \mathchardef\leftharpoonup "3\hex\mifam 28
+ \mathchardef\leftharpoondown "3\hex\mifam 29
+ \mathchardef\rightharpoonup "3\hex\mifam 2A
+ \mathchardef\rightharpoondown "3\hex\mifam 2B
+ \mathchardef\lhook "3\hex\mifam 2C
+ \mathchardef\rhook "3\hex\mifam 2D
+ \mathchardef\ldotp "6\hex\mifam 3A
+ %
+ \def\acute {\mathaccent"0\hex\rmsyfam 13 }%
+ \def\grave {\mathaccent"0\hex\rmsyfam 12 }%
+ \def\ddot {\mathaccent"0\hex\rmsyfam 7F }%
+ \def\tilde {\mathaccent"0\hex\rmsyfam 7E }%
+ \def\bar {\mathaccent"0\hex\rmsyfam 16 }%
+ \def\breve {\mathaccent"0\hex\rmsyfam 15 }%
+ \def\check {\mathaccent"0\hex\rmsyfam 14 }%
+ \def\hat {\mathaccent"0\hex\rmsyfam 5E }%
+ \def\vec {\mathaccent"0\hex\mifam 7E }%
+ \def\dot {\mathaccent"0\hex\rmsyfam 5F }%
+}
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/enc/ofs-tx.tex b/macros/generic/ofs/tex/enc/ofs-tx.tex
new file mode 100644
index 0000000000..b9d184569d
--- /dev/null
+++ b/macros/generic/ofs/tex/enc/ofs-tx.tex
@@ -0,0 +1,357 @@
+% OFS: TX fonts, math encoding declaration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Apr. 2004 Petr Olsak
+
+\protectreading ofs-tx.tex % This is part of OFS package
+
+\mathencdef\TXSYCmathchars {%
+ \fontmessage{\ofsmessageheader Math symbols are set for TX encoding.}%
+ \mathchardef\mappedfromchar "3\hex\txsycfam 00
+ \def\mappedfrom{\leftarrow\mappedfromchar}%
+ \def\longmappedfrom{\longleftarrow\mappedfromchar}%
+ \mathchardef\Mapstochar "3\hex\txsycfam 01
+ \def\Mapsto{\Mapstochar\Rightarrow}%
+ \def\Longmapsto{\Mapstochar\Longrightarrow}%
+ \mathchardef\Mappedfromchar "3\hex\txsycfam 02
+ \def\Mappedfrom{\Leftarrow\Mappedfromchar}%
+ \def\Longmappedfrom{\Longleftarrow\Mappedfromchar}%
+ \mathchardef\mmapstochar "3\hex\txsycfam 03
+ \def\mmapsto{\mmapstochar\rightarrow}%
+ \def\longmmapsto{\mmapstochar\longrightarrow}%
+ \mathchardef\mmappedfromchar "3\hex\txsycfam 04
+ \def\mmappedfrom{\leftarrow\mmappedfromchar}%
+ \def\longmmappedfrom{\longleftarrow\mmappedfromchar}%
+ \mathchardef\Mmapstochar "3\hex\txsycfam 05
+ \def\Mmapsto{\Mmapstochar\Rightarrow}%
+ \def\Longmmapsto{\Mmapstochar\Longrightarrow}%
+ \mathchardef\Mmappedfromchar "3\hex\txsycfam 06
+ \def\Mmappedfrom{\Leftarrow\Mmappedfromchar}%
+ \def\Longmmappedfrom{\Longleftarrow\Mmappedfromchar}%
+ \mathchardef\medcirc "2\hex\txsycfam 07
+ \mathchardef\medbullet "2\hex\txsycfam 08
+ \mathchardef\varparallel "3\hex\txsycfam 09
+ \mathchardef\varparallelinv "3\hex\txsycfam 0A
+ \mathchardef\nvarparallel "3\hex\txsycfam 0B
+ \mathchardef\nvarparallelinv "3\hex\txsycfam 0C
+ \mathchardef\colonapprox "3\hex\txsycfam 0D
+ \mathchardef\colonsim "3\hex\txsycfam 0E
+ \mathchardef\Colonapprox "3\hex\txsycfam 0F
+ \mathchardef\Colonsim "3\hex\txsycfam 10
+ \mathchardef\doteq "3\hex\txsycfam 11
+ \mathchardef\multimapinv "3\hex\txsycfam 12
+ \mathchardef\multimapboth "3\hex\txsycfam 13
+ \mathchardef\multimapdot "3\hex\txsycfam 14
+ \mathchardef\multimapdotinv "3\hex\txsycfam 15
+ \mathchardef\multimapdotboth "3\hex\txsycfam 16
+ \mathchardef\multimapdotbothA "3\hex\txsycfam 17
+ \mathchardef\multimapdotbothB "3\hex\txsycfam 18
+ \mathchardef\VDash "3\hex\txsycfam 19
+ \mathchardef\VvDash "3\hex\txsycfam 1A
+ \mathchardef\cong "3\hex\txsycfam 1B
+ \mathchardef\preceqq "3\hex\txsycfam 1C
+ \mathchardef\succeqq "3\hex\txsycfam 1D
+ \mathchardef\nprecsim "3\hex\txsycfam 1E
+ \mathchardef\nsuccsim "3\hex\txsycfam 1F
+ \mathchardef\nlesssim "3\hex\txsycfam 20
+ \mathchardef\ngtrsim "3\hex\txsycfam 21
+ \mathchardef\nlessapprox "3\hex\txsycfam 22
+ \mathchardef\ngtrapprox "3\hex\txsycfam 23
+ \mathchardef\npreccurlyeq "3\hex\txsycfam 24
+ \mathchardef\nsucccurlyeq "3\hex\txsycfam 25
+ \mathchardef\ngtrless "3\hex\txsycfam 26
+ \mathchardef\nlessgtr "3\hex\txsycfam 27
+ \mathchardef\nbumpeq "3\hex\txsycfam 28
+ \mathchardef\nBumpeq "3\hex\txsycfam 29
+ \mathchardef\nbacksim "3\hex\txsycfam 2A
+ \mathchardef\nbacksimeq "3\hex\txsycfam 2B
+ \mathchardef\neq "3\hex\txsycfam 2C
+ \let\ne=\neq
+ \mathchardef\nasymp "3\hex\txsycfam 2D
+ \mathchardef\nequiv "3\hex\txsycfam 2E
+ \mathchardef\nsim "3\hex\txsycfam 2F
+ \mathchardef\napprox "3\hex\txsycfam 30
+ \mathchardef\nsubset "3\hex\txsycfam 31
+ \mathchardef\nsupset "3\hex\txsycfam 32
+ \mathchardef\nll "3\hex\txsycfam 33
+ \mathchardef\ngg "3\hex\txsycfam 34
+ \mathchardef\nthickapprox "3\hex\txsycfam 35
+ \mathchardef\napproxeq "3\hex\txsycfam 36
+ \mathchardef\nprecapprox "3\hex\txsycfam 37
+ \mathchardef\nsuccapprox "3\hex\txsycfam 38
+ \mathchardef\npreceqq "3\hex\txsycfam 39
+ \mathchardef\nsucceqq "3\hex\txsycfam 3A
+ \mathchardef\nsimeq "3\hex\txsycfam 3B
+ \mathchardef\notin "3\hex\txsycfam 3C
+ \mathchardef\notni "3\hex\txsycfam 3D
+ \let\notowns=\notni
+ \mathchardef\nSubset "3\hex\txsycfam 3E
+ \mathchardef\nSupset "3\hex\txsycfam 3F
+ \mathchardef\nsqsubseteq "3\hex\txsycfam 40
+ \mathchardef\nsqsupseteq "3\hex\txsycfam 41
+ \mathchardef\coloneqq "3\hex\txsycfam 42
+ \mathchardef\eqqcolon "3\hex\txsycfam 43
+ \mathchardef\coloneq "3\hex\txsycfam 44
+ \mathchardef\eqcolon "3\hex\txsycfam 45
+ \mathchardef\Coloneqq "3\hex\txsycfam 46
+ \mathchardef\Eqqcolon "3\hex\txsycfam 47
+ \mathchardef\Coloneq "3\hex\txsycfam 48
+ \mathchardef\Eqcolon "3\hex\txsycfam 49
+ \mathchardef\strictif "3\hex\txsycfam 4A
+ \mathchardef\strictfi "3\hex\txsycfam 4B
+ \mathchardef\strictiff "3\hex\txsycfam 4C
+ \mathchardef\invamp "2\hex\txsycfam 4D
+ \edef\lbag{\delimiter "4\hex\txsycfam 4E\hex\txexafam 30 }%
+ \edef\rbag{\delimiter "5\hex\txsycfam 4F\hex\txexafam 31 }%
+ \mathchardef\Lbag "4\hex\txsycfam 50
+ \mathchardef\Rbag "5\hex\txsycfam 51
+ \mathchardef\circledless "3\hex\txsycfam 52
+ \mathchardef\circledgtr "3\hex\txsycfam 53
+ \mathchardef\circledwedge "2\hex\txsycfam 54
+ \mathchardef\circledvee "2\hex\txsycfam 55
+ \mathchardef\circledbar "2\hex\txsycfam 56
+ \mathchardef\circledbslash "2\hex\txsycfam 57
+ \mathchardef\lJoin "3\hex\txsycfam 58
+ \mathchardef\rJoin "3\hex\txsycfam 59
+ \mathchardef\Join "3\hex\txsycfam 5A
+ \let\lrJoin=\Join
+ \mathchardef\openJoin "3\hex\txsycfam 5B
+ \mathchardef\lrtimes "3\hex\txsycfam 5C
+ \mathchardef\opentimes "3\hex\txsycfam 5D
+ \mathchardef\Diamond "0\hex\txsycfam 5E
+ \mathchardef\Diamondblack "0\hex\txsycfam 5F
+ \mathchardef\nplus "2\hex\txsycfam 60
+ \mathchardef\nsqsubset "3\hex\txsycfam 61
+ \mathchardef\nsqsupset "3\hex\txsycfam 62
+ \mathchardef\dashleftarrow "3\hex\txsycfam 63
+ \mathchardef\dashrightarrow "3\hex\txsycfam 64
+ \let\dasharrow\dashrightarrow
+ \mathchardef\dashleftrightarrow "3\hex\txsycfam 65
+ \mathchardef\leftsquigarrow "3\hex\txsycfam 66
+ \mathchardef\ntwoheadrightarrow "3\hex\txsycfam 67
+ \mathchardef\ntwoheadleftarrow "3\hex\txsycfam 68
+ \mathchardef\boxast "2\hex\txsycfam 69
+ \mathchardef\boxbslash "2\hex\txsycfam 6A
+ \mathchardef\boxbar "2\hex\txsycfam 6B
+ \mathchardef\boxslash "2\hex\txsycfam 6C
+ \mathchardef\Wr "2\hex\txsycfam 6D
+ \mathchardef\lambdaslash "0\hex\txsycfam 6E
+ \mathchardef\lambdabar "0\hex\txsycfam 6F
+ \mathchardef\varclubsuit "0\hex\txsycfam 70
+ \mathchardef\vardiamondsuit "0\hex\txsycfam 71
+ \mathchardef\varheartsuit "0\hex\txsycfam 72
+ \mathchardef\varspadesuit "0\hex\txsycfam 73
+ \mathchardef\Nearrow "3\hex\txsycfam 74
+ \mathchardef\Searrow "3\hex\txsycfam 75
+ \mathchardef\Nwarrow "3\hex\txsycfam 76
+ \mathchardef\Swarrow "3\hex\txsycfam 77
+ \mathchardef\Top "0\hex\txsycfam 78
+ \mathchardef\Bot "0\hex\txsycfam 79
+ \mathchardef\Perp "3\hex\txsycfam 79
+ \mathchardef\leadstoext "3\hex\txsycfam 7A
+ \mathchardef\leadsto "3\hex\txsycfam 7B
+ \mathchardef\sqcupplus "2\hex\txsycfam 7C
+ \mathchardef\sqcapplus "2\hex\txsycfam 7D
+ \edef\llbracket{\delimiter "4\hex\txsycfam 7E\hex\txexafam 12 }%
+ \edef\rrbracket{\delimiter "5\hex\txsycfam 7F\hex\txexafam 13 }%
+ \mathchardef\boxright "3\hex\txsycfam 80
+ \mathchardef\boxleft "3\hex\txsycfam 81
+ \mathchardef\boxdotright "3\hex\txsycfam 82
+ \mathchardef\boxdotleft "3\hex\txsycfam 83
+ \mathchardef\Diamondright "3\hex\txsycfam 84
+ \mathchardef\Diamondleft "3\hex\txsycfam 85
+ \mathchardef\Diamonddotright "3\hex\txsycfam 86
+ \mathchardef\Diamonddotleft "3\hex\txsycfam 87
+ \mathchardef\boxRight "3\hex\txsycfam 88
+ \mathchardef\boxLeft "3\hex\txsycfam 89
+ \mathchardef\boxdotRight "3\hex\txsycfam 8A
+ \mathchardef\boxdotLeft "3\hex\txsycfam 8B
+ \mathchardef\DiamondRight "3\hex\txsycfam 8C
+ \mathchardef\DiamondLeft "3\hex\txsycfam 8D
+ \mathchardef\DiamonddotRight "3\hex\txsycfam 8E
+ \mathchardef\DiamonddotLeft "3\hex\txsycfam 8F
+ \mathchardef\Diamonddot "0\hex\txsycfam 90
+ \mathchardef\circleright "3\hex\txsycfam 91
+ \mathchardef\circleleft "3\hex\txsycfam 92
+ \mathchardef\circleddotright "3\hex\txsycfam 93
+ \let\circledotright\circleddotright
+ \mathchardef\circleddotleft "3\hex\txsycfam 94
+ \let\circledotleft\circleddotleft
+ \mathchardef\multimapbothvert "3\hex\txsycfam 95
+ \mathchardef\multimapdotbothvert "3\hex\txsycfam 96
+ \mathchardef\multimapdotbothBvert "3\hex\txsycfam 97
+ \mathchardef\multimapdotbothAvert "3\hex\txsycfam 98
+}
+\mathencdef\TXMIAmathchars {%
+ \mathchardef\alphaup "0\hex\txmiafam 0B
+ \mathchardef\betaup "0\hex\txmiafam 0C
+ \mathchardef\gammaup "0\hex\txmiafam 0D
+ \mathchardef\deltaup "0\hex\txmiafam 0E
+ \mathchardef\epsilonup "0\hex\txmiafam 0F
+ \mathchardef\zetaup "0\hex\txmiafam 10
+ \mathchardef\etaup "0\hex\txmiafam 11
+ \mathchardef\thetaup "0\hex\txmiafam 12
+ \mathchardef\iotaup "0\hex\txmiafam 13
+ \mathchardef\kappaup "0\hex\txmiafam 14
+ \mathchardef\lambdaup "0\hex\txmiafam 15
+ \mathchardef\muup "0\hex\txmiafam 16
+ \mathchardef\nuup "0\hex\txmiafam 17
+ \mathchardef\xiup "0\hex\txmiafam 18
+ \mathchardef\piup "0\hex\txmiafam 19
+ \mathchardef\rhoup "0\hex\txmiafam 1A
+ \mathchardef\sigmaup "0\hex\txmiafam 1B
+ \mathchardef\tauup "0\hex\txmiafam 1C
+ \mathchardef\upsilonup "0\hex\txmiafam 1D
+ \mathchardef\phiup "0\hex\txmiafam 1E
+ \mathchardef\chiup "0\hex\txmiafam 1F
+ \mathchardef\psiup "0\hex\txmiafam 20
+ \mathchardef\omegaup "0\hex\txmiafam 21
+ \mathchardef\varepsilonup "0\hex\txmiafam 22
+ \mathchardef\varthetaup "0\hex\txmiafam 23
+ \mathchardef\varpiup "0\hex\txmiafam 24
+ \mathchardef\varrhoup "0\hex\txmiafam 25
+ \mathchardef\varsigmaup "0\hex\txmiafam 26
+ \mathchardef\varphiup "0\hex\txmiafam 27
+ %
+ \mathchardef\varg "0\hex\txmiafam 31
+ \mathchardef\vary "0\hex\txmiafam 32
+ \mathchardef\varv "0\hex\txmiafam 33
+ \mathchardef\varw "0\hex\txmiafam 34
+ %
+ \mathchardef\varBbbk "0\hex\txmiafam AB
+}
+\mathencdef\TXEXAmathchars {%
+ \mathchardef\bignplus "1\hex\txexafam 00
+ \mathchardef\bigsqcupplus "1\hex\txexafam 02
+ \mathchardef\bigsqcapplus "1\hex\txexafam 04
+ \mathchardef\bigsqcap "1\hex\txexafam 06
+ \mathchardef\oiintop "1\hex\txexafam 08
+ \def\oiint{\oiintop\nolimits}
+ \mathchardef\ointctrclockwiseop "1\hex\txexafam 0A
+ \def\ointctrclockwise{\ointctrclockwiseop\nolimits}
+ \mathchardef\ointclockwiseop "1\hex\txexafam 0C
+ \def\ointclockwise{\ointclockwiseop\nolimits}
+ \mathchardef\sqintop "1\hex\txexafam 0E
+ \def\sqint{\sqintop\nolimits}
+ \mathchardef\varprod "1\hex\txexafam 10
+ %\edef\llbracket{\delimiter "4\hex\txsycfam 7E\hex\txexafam 12 }%
+ %\edef\rrbracket{\delimiter "5\hex\txsycfam 7F\hex\txexafam 13 }%
+ \mathchardef\brecext "0\hex\txexafam 20
+ \mathchardef\iintop "1\hex\txexafam 21
+ \def\iint{\iintop\nolimits}
+ \mathchardef\iiintop "1\hex\txexafam 23
+ \def\iiint{\iiintop\nolimits}
+ \mathchardef\iiiintop "1\hex\txexafam 25
+ \def\iiiint{\iiiintop\nolimits}
+ \mathchardef\idotsintop "1\hex\txexafam 27
+ \def\idotsint{\idotsintop\nolimits}
+ \mathchardef\oiiintop "1\hex\txexafam 29
+ \def\oiiint{\oiiintop\nolimits}
+ \mathchardef\varointctrclockwiseop "1\hex\txexafam 2B
+ \def\varointctrclockwise{\varointctrclockwiseop\nolimits}
+ \mathchardef\varointclockwiseop "1\hex\txexafam 2D
+ \def\varointclockwise{\varointclockwiseop\nolimits}
+ \mathchardef\fintop "1\hex\txexafam 3E
+ \def\fint{\fintop\nolimits}
+ \mathchardef\oiintctrclockwiseop "1\hex\txexafam 40
+ \def\oiintctrclockwise{\oiintctrclockwiseop\nolimits}
+ \mathchardef\varoiintclockwiseop "1\hex\txexafam 42
+ \def\varoiintclockwise{\varoiintclockwiseop\nolimits}
+ \mathchardef\oiintclockwiseop "1\hex\txexafam 48
+ \def\oiintclockwise{\oiintclockwiseop\nolimits}
+ \mathchardef\varoiintctrclockwiseop "1\hex\txexafam 4A
+ \def\varoiintctrclockwise{\varoiintctrclockwiseop\nolimits}
+ \mathchardef\oiiintctrclockwiseop "1\hex\txexafam 44
+ \def\oiiintctrclockwise{\oiiintctrclockwiseop\nolimits}
+ \mathchardef\varoiiintclockwiseop "1\hex\txexafam 46
+ \def\varoiiintclockwise{\varoiiintclockwiseop\nolimits}
+ \mathchardef\oiiintclockwiseop "1\hex\txexafam 4C
+ \def\oiiintclockwise{\oiiintclockwiseop\nolimits}
+ \mathchardef\varoiiintctrclockwiseop "1\hex\txexafam 4E
+ \def\varoiiintctrclockwise{\varoiiintctrclockwiseop\nolimits}
+ \mathchardef\sqiintop "1\hex\txexafam 50
+ \def\sqiint{\sqiintop\nolimits}
+ \mathchardef\sqiiintop "1\hex\txexafam 52
+ \def\sqiiint{\sqiiintop\nolimits}
+}
+\mathencdef\TXmathmacros {%
+ \def\lgroup{\delimiter"4\hex\bffam 2833A }% extensible ( with sharper tips
+ \def\rgroup{\delimiter"5\hex\bffam 2933B }% extensible ) with sharper tips
+ \def\bracevert{\delimiter"\hex\ttfam 7C33E }% the vertical bar that extends braces
+ \let\ori@joinrel=\joinrel
+ \def\joinrel{\mathrel{\mkern-2.5mu}}% -3mu in plain TeX
+ %
+ \def\varmathbb ##1{% \varmathbb {ABC..} use bb symbols from txmia
+ \ifx\expandaction\noexpand
+ \noexpand\varmathbb{##1}%
+ \else
+ \csname fragilecommand!\endcsname
+ \bgroup
+ \count2=`A \count3="0\hex\txmiafam 81
+ \loop \mathcode \count2=\count3 \relax
+ \csname ifnum\endcsname \count2<`Z
+ \advance\count2 by1 \advance\count3 by1 \repeat
+ ##1%
+ \egroup
+ \fi
+ }%
+ \def\mathfrak ##1{{\fam\txmiafam ##1}}%
+ %
+ \def\ori@not=\not
+ \def\not ##1{% % \not\XXX expands to \notXXX or \nXXX or \mathchar"3236 \XXX
+ \ifx ##1=\ne\else
+ \ifx ##1<\nless\else
+ \ifx ##1>\ngtr\else
+ \runtxnot ##1\fi\fi\fi
+ }%
+ \def\runtxnot {\ifx\expandaction\noexpand \noexpand\not
+ \else \csname fragilecommand!\endcsname
+ \expandafter \trytxnot
+ \fi
+ }%
+ \def\trytxnot ##1{\savetokenname ##1\tmpa
+ \expandafter \ifx \csname n\tmpa\endcsname \relax
+ \expandafter \ifx \csname not\tmpa\endcsname \relax
+ \mathchar"3236 \expandafter \expandafter \expandafter ##1%
+ \else
+ \csname not\tmpa\endcsname
+ \fi
+ \else
+ \csname n\tmpa\endcsname
+ \fi
+ }%
+ % re-definitions of math versions of \ddots, \vdots
+ \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
+ \kern6\p@\hbox{$\m@th.$}\hbox{$\m@th.$}\hbox{$\m@th.$}}}%
+ \def\ddots{\mathinner{\mkern1mu\raise7\p@
+ \vbox{\kern7\p@\hbox{$\m@th.$}}\mkern2mu
+ \raise4\p@\hbox{$\m@th.$}\mkern2mu\raise\p@\hbox{$\m@th.$}\mkern1mu}}%
+ % re-definition of \root macro
+ \let\ori@r@@t=\r@@t
+ \def\r@@t##1##2{\setbox\z@\hbox{$\m@th##1\sqrt{##2}$}\dimen@\ht\z@
+ \advance\dimen@-\dp\z@
+ \mkern6mu\raise.68\dimen@\copy\rootbox \mkern-9mu\box\z@}%
+ % re-definitions of \downbracefill, \upbracefill to use \bracext from txexa
+ \let\ori@downbracefill=\downbracefill \let\ori@upbracefill=\upbracefill
+ \def\downbracefill{$\m@th
+ \braceld\mkern-1mu\cleaders\hbox{$\mkern-.5mu\bracext\mkern-.5mu$}\hfill\mkern-1mu%
+ \braceru\bracelu
+ \mkern-1mu\cleaders\hbox{$\mkern-.5mu\bracext\mkern-.5mu$}\hfill\mkern-1mu\bracerd$}%
+ \def\upbracefill{$\m@th
+ \bracelu\mkern-1mu\cleaders\hbox{$\mkern-.5mu\bracext\mkern-.5mu$}\hfill\mkern-1mu%
+ \bracerd\braceld
+ \mkern-1mu\cleaders\hbox{$\mkern-.5mu\bracext\mkern-.5mu$}\hfill\mkern-1mu\braceru$}%
+ \def\mathcharsback{%
+ \let\joinrel \ori@joinrel
+ \let\not \ori@not
+ \let\r@@t \ori@r@@t
+ \let\downbracefill \ori@downbracefill
+ \let\upbracefill \ori@upbracefill}%
+}
+\endinput
+
+
+
+
+
+
+
diff --git a/macros/generic/ofs/tex/ofs.tex b/macros/generic/ofs/tex/ofs.tex
new file mode 100644
index 0000000000..89e03f87f4
--- /dev/null
+++ b/macros/generic/ofs/tex/ofs.tex
@@ -0,0 +1,1184 @@
+%%%% OFS: Olsak's Font System based on plain macros
+%%%% Jun 2001 Petr Olsak
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%% See the ofsdoc.tex for more details
+
+\ifx\setfonts\undefined\else \expandafter\endOFSmacro \fi
+
+%\def\OFSversion{Nov. 2001} % First version released
+%\def\OFSversion{Jun. 2002} % The \savefontid \restorefontid added
+%\def\OFSversion{Oct. 2002} % The (Variant) in \loadtextfam introduced
+ % \addcmd introduced
+ % \def\relax{} in \setfosize macro added
+ % \ifx\sgfamily\newfamily added in \setfontfamily
+%\def\OFSversion{Feb. 2004} % The encoding-dependend macros improved
+ % -- see new section 3.5 in ofsdoc.tex
+ % \bigsymbofont used for \fomenc PS in ofsdef.tex
+ % \ofshexbox introduced
+ % \registerenc introduced
+ % Fam-var: "var" can be in in arbitrary catcode
+ % \ofsremovefromlist introduced
+%\def\OFSversion{Mar. 2004} % \characterdef keeps sequences defined already
+ % \tryloadenc is called from \loadtextfam now
+ % \listfamilies re-implemented -> \ofslistfamilies
+\def\OFSversion{May 2004} % \ofscopyright defined in ofsdef.tex
+ % \plaincatcodes defined and used in \input ofs-*
+ % \safelet introduced
+ % space not required after <char> in \accentdef
+ % \showfonts lists only registered families
+ % \loadmathfam allows [-<variant>/] parameter
+ % \registertfm <name> - - introduced
+ % \lastfam + \mathencread + \mathencdef introduced
+ % \protectreading introduced
+
+%%%% Basic settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newlinechar=`^^J
+\def\ofslistfamilies{}
+
+\message{OFS (Olsak's Font System) based on plain initialized.
+ <\OFSversion>}
+\def\fosize{at10pt} % default font size
+\def\currentfamily{CMRoman} % default font family
+\ifx\fotenc\undefined \def\fotenc{8z}\fi % default font encoding
+\def\extraenc{} % default extra encoding
+
+\chardef\bifam=5 % \slfam=5, but it is not usuall math. family
+
+\def\rm {\fam0 \let\currentvariant M\tenrm}
+\def\bf {\fam\bffam \let\currentvariant F\tenbf}
+\def\it {\fam\itfam \let\currentvariant T\tenit}
+\def\bi {\fam\bifam \let\currentvariant I\tenbi} \let\tenbi=\relax
+\let\currentvariant=M
+
+%%%% The \fontusage macro %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bgroup \catcode`\#=12
+ \catcode`\{=12 \catcode`}=12 \catcode`\X=1 \catcode`\Z=2
+ \catcode`\^^M=14 \catcode`\ =12 \catcode`\|=0\catcode`\\=12
+|gdef|fontusageX
+|begingroup
+|immediate|write16X%---------------------------------------------------
+\fontusage: ============== Olsak's Font System, usage: =================^^J
+\input ofs [sjannon, sdynamo, a35] \loadingenc=1 ... for example^^J
+\showfonts ... shows all loaded font families (by previous \input)^^J
+\setfonts [Family/] ... local switch to the new family, after this, the^^J
+ \rm, \bf, \it, bi will switch to the variants. The current size is used.^^J
+\setfonts [/size] ... local switch to the new size of fonts, the family is^^J
+ not changed. The "size" has the following possible formats:^^J
+ at<dimen> ... the same as \font\something=file at<dimen>^^J
+ <dimen> ... the same as at<dimen>^^J
+ <number> ... the same as at<number>pt^^J
+ scaled<number> ... the same as \font\something=file scaled<number>^^J
+ mag<decimal-number> fonts will be magnified by given coefficient^^J
+ depend on current size of the fonts.^^J
+\setfonts [Family/size] ... switch to the new family at given size^^J
+\setfonts [Family-bf/size] ... switch to the specified font.^^J
+\fontdef\name [Family/size] ... same as \gdef\name{\setfonts[Family/size]}^^J
+ The "Family" or "size" parameter may be empty.^^J
+\fontdef\name [Family-vr/size] ... \name is fixed-font switch iff:^^J
+ "size" is no empty and no mag<dec-number>.^^J
+ Fixed-font switch "\name" is implemented as \global\font\name=file.^^J
+\setmath [size/size/size] ... set math it/rm as current it/rm + use PS Symbol^^J
+\nofontmessages, \logfontmessages, \displayfontmessages, \detailfontmessages^^J
+ ... the levels of log.
+Z%-----------------------------------------------------------------------
+|endgroup
+Z
+|egroup
+
+
+%%%% The fragile/robust story %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bgroup \catcode`\#=12 \catcode`\|=0 \catcode`\\=12
+|gdef|fragilecommand{%
+ |begingroup
+ |def|spc{|space|space|space|space|space}%
+ |message
+ { ERROR !! The fragile command in the toc/ind/aux or similar file.^^J
+ You can solve this problem by the following steps:^^J
+ 1. Remove the auxiliary file with this command.^^J
+ 2. Include the following macro code into your document header:^^J
+ |spc \let\orishipout=\shipout^^J
+ |spc \def\shipout#1#2{\setbox0=#1{#2}\bgroup^^J
+ |spc |spc \let\expandaction=\noexpand \orishipout\box0 \egroup}^^J
+ 3. TeX your document again and again...^^J
+ See the OFS documentation for more info.^^J}%
+ |errmessage{The fragile command in auxiliary file}%
+ |endgroup
+}
+|egroup
+
+\edef\tmpc{\the\catcode`\|}\catcode`\|=12 %% ConTeXt sets \catcode`\|=13
+% but we need it nonactive because of \if|#2| constructions below.
+
+%%%% The macros used in declaration files %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\ofsputfamlist #1{%
+ \expandafter \gdef\expandafter \ofslistfamilies
+ \expandafter{\ofslistfamilies \ofslisttext{#1}}%
+}
+\def\ofsdeclarefamily [#1] #2{%
+ \expandafter \ifx \csname fam!.#1\endcsname \relax \else
+ \ofsremovefromlist {#1}\fi
+ \expandafter \gdef \csname fam!.#1\endcsname {#2}%
+ \expandafter\expandafter\expandafter \gdef
+ \expandafter\expandafter\expandafter \ofslistfamilies
+ \expandafter\expandafter\expandafter {\expandafter\ofslistfamilies
+ \expandafter \ofslistfamily \csname fam!.#1\endcsname}%
+ \edef\declaredfamily{#1}%
+}
+% \ofslistfamilies includes (without spaces):
+% \ofslisttext {text1} \ofslistfamily \fam!.Family1 \ofslistfamily \fam!.Family2
+% ... etc. \ofslisttext {text2} \ofslistfamily \fam!.Family ... etc.
+
+\def\loadtextfam #1;#2;#3;#4;#5;{\tryloadenc{#5}%
+ \def\ofslistvariants{}%
+ \ofsloadfont {\currentfamily-rm}{tenrm}{#1}{M}{#5}{}%
+ \ofsloadfont {\currentfamily-bf}{tenbf}{#2}{F}{#5}{Bold}%
+ \ofsloadfont {\currentfamily-it}{tenit}{#3}{T}{#5}{Italic}%
+ \ofsloadfont {\currentfamily-bi}{tenbi}{#4}{I}{#5}{BoldItalic}%
+ \fontmessage{\ofsmessageheader\ofslistvariants}%
+ \def\ofslistvariants{}%
+}
+\def\savefontid #1{% % The font identifier is stored in TeX by
+ % the last \font primitive used for this font
+ \expandafter \gdef % but I need to store the first one.
+ \csname fn:\expandafter\fontname\csname#1\endcsname\endcsname{#1}%
+}
+\def\restorefontid #1{\expandafter
+ \ifx \csname fn:\expandafter\fontname\csname#1\endcsname\endcsname \relax
+ \else
+ \begingroup \expandafter \font \csname
+ \csname fn:\expandafter\fontname\csname#1\endcsname\endcsname
+ \endcsname =\fontname\csname#1\endcsname\relax \endgroup
+ \fi
+}
+\def\ofsloadfont #1#2#3#4#5#6{% #1:famname #2:seqname, #3:(variant) file,
+ \if|#3|\fontprefix % #4:variant, #5:extraenc, #6: defaultvar
+ \missingofsvariant #1;#2;#4;%
+ \else
+ \separeofsvariant #1;#2;#3;#4;#5;#6;%
+ \fi
+}
+\def\missingofsvariant #1-#2;#3;#4;{%
+ \expandafter\let \csname #3\expandafter \endcsname
+ \csname warn#4\endcsname
+ \expandafter\let \csname var!.the#4\endcsname = \relax
+ \expandafter\let \csname fm:-#2\endcsname = \relax
+}
+\def\separeofsvariant #1-#2;#3;#4#5;#6;#7;#8;{%
+ \if(#4%
+ \storeofsvariant #1-#2;#3;#4#5;#6;#7;%
+ \else
+ \expandafter \ifx \csname reg!.#4#5\endcsname \empty
+ \missingofsvariant #1-#2;#3;#6;%
+ \else
+ \ifx \userfontname#3\else
+ \edef\ofslistvariants {\ofslistvariants
+ \space \expandafter\string\csname#2\endcsname\space (#8)}%
+ \fi
+ \expandafter \def \csname fm:-#2\endcsname {#4#5}% formal metric
+ \ofsloadfontori {#1-#2}{#3}{#4#5}{#6}{#7}%
+ \fi\fi
+}
+\def\storeofsvariant #1-#2;#3;(#4) #5;#6;#7;{%
+ \expandafter \ifx \csname reg!.#5\endcsname \empty
+ \missingofsvariant #1-#2;#3;#6;%
+ \else
+ \ifx \userfontname#3\else
+ \edef\ofslistvariants{\ofslistvariants
+ \space \expandafter\string\csname#2\endcsname\space (#4)}%
+ \fi
+ \expandafter \def \csname fm:-#2\endcsname {#5}% formal metric
+ \ofsloadfontori {#1-#2}{#3}{#5}{#6}{#7}%
+ \fi
+}
+\def\ofsloadfontori #1#2#3#4#5{% #1:famname #2:seqname, #3:file,
+ % #4: variant-letter #5: extraenc
+ \calculatemetricfile {#3}\fosize
+ \fontprefix \expandafter\font\csname #1/\fosize\endcsname
+ =\metricfile\fosize\relax
+ \savefontid{#1/\fosize}%
+ \fontprefix \expandafter \let \csname #2\expandafter\endcsname
+ \csname #1/\fosize\endcsname
+ \fontloadmessage{#2}{\metricfile\fosize}%
+ \expandafter\edef \csname var!.the#4\endcsname {%
+ \csname #2\endcsname}%
+ \if|#5|\else
+ \let\tmpa=\fotenc \edef\fotenc{#5}%
+ \calculatemetricfile {#3}\fosize
+ \let\fotenc=\tmpa
+ \fontprefix \expandafter \edef
+ \csname eXfont!.\fontname \csname #2\endcsname\endcsname
+ {\metricfile\fosize}%
+ \fontprefix \expandafter \edef
+ \csname eXenc!.\fontname \csname #2\endcsname\endcsname {#5}%
+ \fi
+}
+\def\fontprefix{} % on another place will be: \let\fontprefix=\global
+
+\def\newvariant #1 #2(#3) #4;#5;{% #1:number #2:\sequence, #3:comment
+ \savetokenname #2\tmpb % #4:file, #5:extraenc
+ \edef\ofslistvariants {\ofslistvariants \space \string#2 (#3)}%
+ \ofsloadfontori {\currentfamily-\tmpb}{ten\tmpb}{#4}{#1}{#5}%
+ \edef #2{\let\currentvariant #1%
+ \expandafter\noexpand \csname ten\tmpb\endcsname}%
+ \expandafter\let \csname var!.the#1\endcsname =#2%
+}
+\def\registertfm #1 #2-#3 #4 {%
+ \if -#4\relax
+ \expandafter \def \csname reg!.#1\endcsname {}%
+ \else
+ \expandafter \ifx \csname reg!.#1\endcsname \relax
+ \expandafter \def \csname reg!.#1\endcsname {}\fi
+ \let\testtfmsize=\relax
+ \def\tmpa{*}\def\tmpb{#3}%
+ \ifx \tmpa\tmpb \def\tmpb{\maxdimen}\fi
+ \expandafter \edef \csname reg!.#1\endcsname {%
+ \csname reg!.#1\endcsname \testtfmsize #2-\tmpb:#4 }%
+ \fi
+}
+\def\addcmd #1#2{\expandafter\def\expandafter\tmpa\expandafter{#1}%
+ \def\tmpb{#1}%
+ \ifx\tmpa\tmpb % the #1 is not a macro
+ \expandafter\let\csname \string#1-original\endcsname =#1%
+ \expandafter\def\expandafter #1\expandafter{%
+ \csname\string#1-original\endcsname #2}%
+ \else % the #1 is a macro
+ \expandafter\def\expandafter #1\expandafter{#1#2}%
+ \fi
+}
+
+%%%% Logging %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\displaymessage{\immediate\write16 }
+\def\ofsmessageheader{OFS (l.\the\inputlineno): }
+
+\def\displayfontmessages{\let\fontmessage=\displaymessage
+ \def\fontloadmessage##1##2{}}
+\def\logfontmessages{\let\fontmessage=\wlog
+ \def\fontloadmessage##1##2{}}
+\def\nofontmessages{\def\fontmessage##1{}\def\fontloadmessage##1##2{}}
+\def\detailfontmessages{\displayfontmessages
+ \def\fontloadmessage##1##2{\displaymessage{\ofsmessageheader
+ \space\space \ifx\fontprefix\global\string\global\fi\string\font
+ \csname##1\endcsname= ##2}}}
+\logfontmessages % default OFS logging
+
+%%%% \showfonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\showfonts{\bgroup \def\displaymessage{\immediate\write16 }%
+ \displaymessage{\ofsmessageheader
+ The list of known font families (encoding \fotenc):}\ofslistfamilies
+ \egroup
+}
+\def\ofslistfamily #1{%
+ \bgroup
+ \def\tmpa ##1!.##2/{##2}%
+ \edef\tmpa{\expandafter\tmpa\string #1/}%
+ \registeredfam\tmpa?\iftrue
+ \edef\tmpc {[\tmpa/]}%
+ \count2=21
+ \def\tmpa ##1{\if:##1\else\advance\count2 by-1 \expandafter\tmpa\fi}%
+ \expandafter\tmpa \tmpc:%
+ \def\tmpa {\ifnum\count2>0 \advance\count2 by-1 \edef\tmpc{\tmpc\space}%
+ \expandafter \tmpa\fi}\tmpa
+ \def\loadtextfam ##1;##2;##3;##4;##5;{%
+ \if|##1|\edef\tmpc{\tmpc\space\space- }%
+ \else \edef\tmpc{\tmpc\space\string\rm}\fi
+ \if|##2|\edef\tmpc{\tmpc, \space- }%
+ \else \edef\tmpc{\tmpc, \string\bf}\fi
+ \if|##3|\edef\tmpc{\tmpc, \space- }%
+ \else \edef\tmpc{\tmpc, \string\it}\fi
+ \if|##4|\edef\tmpc{\tmpc, \space- }%
+ \else \edef\tmpc{\tmpc, \string\bi}\fi}
+ \def\newvariant ##1 ##2(##3) ##4;##5;{\edef\tmpc{\tmpc, \string##2}}%
+ \def\modifyread ##1;{}
+ #1%
+ \displaymessage{ \space\space\tmpc}%
+ \fi
+ \egroup
+}
+\def\ofslisttext #1{\if^^J\readfirsttoken #1:\end
+ \immediate\write16{\readothertokens #1:\end}%
+ \else \displaymessage{#1}\fi}
+
+\def\ofsremovefromlist #1{% removes family #1 from \ofslistfamilies
+ \edef\act{\def\noexpand\tmpa
+ ####1\noexpand\ofslistfamily
+ \expandafter\noexpand\csname fam!.#1\endcsname
+ ####2^^X{\gdef\noexpand\ofslistfamilies{####1####2}}}\act
+ \expandafter \tmpa\ofslistfamilies^^X%
+ \expandafter \let \csname ffe?#1:\endcsname =\relax
+ \fontmessage{\ofsmessageheader The family [#1/] is redeclared.}%
+}
+
+%%%% Auxiliary macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\warnmissingfont #1#2{%
+ \ifx\expandaction\noexpand
+ \expandafter \noexpand \csname ten#1\endcsname
+ \else
+ \csname fragilecommand!\endcsname
+ \displaymessage{\ofsmessageheader WARNING.
+ Variant #2-#1 is unknown. No font is set.}%
+ \fi
+}
+\def\warnM{\warnmissingfont {rm}\currentfamily}
+\def\warnT{\warnmissingfont {it}\currentfamily}
+\def\warnF{\warnmissingfont {bf}\currentfamily}
+\def\warnI{\warnmissingfont {bi}\currentfamily}
+
+\def\setfosize #1#2#3:{\if a#2\def#1{#2#3}%
+ \else\if s#2\let\tmpc=\relax \def\relax{}\edef#1{#2#3}\let\relax=\tmpc%
+ \else\if m#2\expandafter\readfosize\fosize:%
+ \readmag #2#3..:#1%
+ \else\isunitpresent #2#3.?\edef#1{at#2#3\tmpa}%
+ \fi \fi \fi}
+\def\readfosize #1{%
+ \if a#1\def\tmpc t##1:{\dimen0=##1\relax}%
+ \else \if s#1\def\tmpc caled##1:{\dimen0=.01pt
+ {\def\relax{}\xdef\tmpc{##1}}\dimen0=\tmpc\dimen0\relax}%
+ \else \errmessage{OFS: readfosize: something wrong??}%
+ \fi\fi \tmpc
+}
+\def\readmag mag#1.#2.#3:#4{%
+ \if|#2|\if|#3|%
+ \errmessage{OFS: "mag" needs the decimal parameter with decimal point}%
+ \fi\fi
+ \dimen0 =#1.#2 \dimen0
+ \advance\dimen0 by7sp % rounding to three digits after decimal point
+ \ifdim\dimen0<10pt \edef\tmpa{+\the\dimen0}\else \edef\tmpa{\the\dimen0}\fi
+ \dimen0 =\expandafter \readsixdigits \tmpa :::::|pt
+ \edef#4{at\the\dimen0}%
+}
+\def\readsixdigits #1#2#3#4#5#6#7#8#9|{%
+ \if:#5#1#2\else\if:#6#1#2#3\else\if:#7#1#2#3#4\else
+ \if:#8#1#2#3#4#5\else#1#2#3#4#5#6\fi\fi\fi\fi
+}
+\def\isunitpresent #1.#2?{\bgroup
+ \if |#2|\afterassignment\defpttotmpa \count2=#1.:%
+ \else \afterassignment\defpttotmpa \count2=0#2:\fi
+}
+\def\defpttotmpa #1.:{\if|#1|\gdef\tmpa{pt}\else\gdef\tmpa{}\fi\egroup}
+
+\def\savetokenname #1#2{%
+ \edef\tmpa{\escapechar=\the\escapechar}%
+ \escapechar=-1
+ \edef#2{\string#1\expandafter}\tmpa \relax
+}
+\def\readfamvariant #1-#2-#3:{\def\tmpb{#1}\def\famvariant{#2}}
+\long\def\readfirsttoken #1#2:\end{#1}
+\long\def\readothertokens #1#2:\end{#2}
+% TBN, page 80
+{\catcode`p=12 \catcode`t=12
+ \gdef\noPT #1pt{#1}}
+
+\def\calculatemetricfile #1#2{% #1: name or metric file, #2: fosize
+ \expandafter \ifx \csname reg!.#1\endcsname \relax
+ \edef\metricfile{#1 }%
+ \else
+ \let\metricfile=\empty
+ \expandafter \readfosize #2:% \dimen0 = fosize
+ \if s\expandafter \readfirsttoken #2:\end
+ \let\testtfmsize=\testtfmsizescaled
+ \else
+ \let\testtfmsize=\testtfmsizeat
+ \fi
+ \csname reg!.#1\endcsname
+ \ifx \metricfile\empty
+ \let\testtfmsize=\testtfmsizescaled
+ \csname reg!.#1\endcsname
+ \ifx \metricfile\empty
+ \displaymessage {\ofsmessageheader WARNING.
+ The name "#1" is not registered for size #2.}%
+ \edef\metricfile{#110 }%
+ \fi\fi\fi
+}
+\def\testtfmsizeat #1-#2:#3 {%
+ \if|#1|\else
+ \ifdim #1>\dimen0 \else\ifdim #2<\dimen0 \else
+ \def\metricfile{#3 }%
+ \fi\fi\fi
+}
+\def\testtfmsizescaled #1-#2:#3 {%
+ \if|#1|\def\metricfile{#3 }\fi
+}
+\def\metrictmpa{\expandafter\singlefontname
+ \fontname\expandafter\tmpa\space:}
+
+\def\singlefontname #1 #2:{#1}
+\def\ofsmeaning #1 #2 {the}
+
+%%%% The \setfonts macro %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\setfonts [#1/#2]{%
+ \ifx\expandaction\noexpand
+ \noexpand\setfonts [#1/#2]%
+ \else
+ \csname fragilecommand!\endcsname
+ \let\setfontsOK=\relax
+ \edef\tmpa{#1}\expandafter \readfamvariant\tmpa--:%
+ \ifx\famvariant\empty
+ \if|#1|\let\tmpa=\currentfamily \else\def\tmpa{#1}\fi
+ \registeredfam \tmpa?\iftrue
+ \def\newmodifylist{}%
+ \setfontfamily [#1/#2]%
+ \ifx\setfontsOK\relax \runmodifylist \fi
+ \else \warnunregistered\tmpa \let\setfontsOK=\undefined
+ \fi
+ \else
+ \if|#2|\ifx\tmpb\empty
+ \let\tmpb=\relax \csname\famvariant\endcsname
+ \fi\fi
+ \ifx\tmpb\relax \else
+ \registeredfam \tmpb?\iftrue
+ \def\newmodifylist{}%
+ \edef\userfontname{singlefont}%
+ \setsinglefont [\tmpb-\famvariant/#2]%
+ \ifx\setfontsOK\relax \runmodifylist \fi
+ \else \warnunregistered\tmpb \let\setfontsOK=\undefined
+ \fi\fi\fi
+ \ignorespaces
+ \fi
+}
+\def\setfontfamily [#1/#2]{%
+ \if|#1|\let\newfamily=\currentfamily
+ \else \edef\newfamily{#1}\fi
+ \if|#2|\else \setfosize\fosize #2:\fi
+ \expandafter\ifx \csname fam!.\newfamily\endcsname \relax
+ \displaymessage{\ofsmessageheader WARNING. No font family is set.^^J%
+ The family name [\newfamily/] is not known in the list:}\ofslistfamilies
+ \let\setfontsOK=\undefined
+ \else
+ \let\currentfamily=\newfamily
+ \fontmessage{\ofsmessageheader Font family
+ \currentfamily\space\fosize \space (enc=\fotenc) activated:}%
+ \def\tmpa##1{\expandafter \let \csname var!.the##1\endcsname \relax}%
+ \tmpa0\tmpa1\tmpa2\tmpa3\tmpa4\tmpa5\tmpa6\tmpa7\tmpa8\tmpa9%
+ \setfontshook
+ \csname fam!.\newfamily\endcsname
+ \ifx \ofslistvariants \empty \else
+ \fontmessage{\ofsmessageheader\ofslistvariants}\fi
+ % restoring current variant:
+ \ifx G\currentvariant
+ \ifx \sgfamily\newfamily \if |#2|\else
+ \setsinglefont[\sgfamily-\sgvariant/#2]%
+ \fi
+ \else \tenrm
+ \fi
+ \else
+ \expandafter
+ \ifx \csname var!.\expandafter\ofsmeaning\meaning
+ \currentvariant\endcsname \relax
+ \tenrm
+ \else
+ \csname var!.\expandafter\ofsmeaning\meaning
+ \currentvariant\endcsname
+ \fi\fi\fi
+}
+
+\def\setsinglefont [#1-#2/#3]{%
+ \edef\newfamily{#1}%
+ \expandafter\savetokenname \csname#2\endcsname \sgvariant
+ \ifx\newfamily\empty \let\newfamily=\currentfamily \fi
+ \edef\tmpa{#3}%
+ \let\orifosize=\fosize
+ \let\oriloadfam=\loadtextfam
+ \let\orinewvariant=\newvariant
+ \ifx\tmpa\empty \let\tmpa=\fosize
+ \else \expandafter\setfosize\expandafter\fosize\tmpa:%
+ \fi
+ \expandafter\ifx \csname fam!.\newfamily\endcsname \relax
+ \displaymessage{\ofsmessageheader WARNING. No font is set.^^J%
+ The family name [\newfamily/] is not known in the list:}\ofslistfamilies
+ \let\setfontsOK=\undefined
+ \else
+ \fontmessage{\ofsmessageheader Loading single font
+ \newfamily-#2 \fosize \space (enc=\fotenc).}%
+ \expandafter\savetokenname \csname rm\endcsname \tmpa
+ \ifx\sgvariant\tmpa
+ \def\loadtextfam ##1;##2;##3;##4;##5;{\tryloadenc{##5}%
+ \ofsloadfont {\newfamily-rm}{\userfontname}{##1}{M}{##5}{}}%
+ \fi
+ \expandafter\savetokenname \csname bf\endcsname \tmpa
+ \ifx\sgvariant\tmpa
+ \def\loadtextfam ##1;##2;##3;##4;##5;{\tryloadenc{##5}%
+ \ofsloadfont {\newfamily-bf}{\userfontname}{##2}{F}{##5}{}}%
+ \fi
+ \expandafter\savetokenname \csname it\endcsname \tmpa
+ \ifx\sgvariant\tmpa
+ \def\loadtextfam ##1;##2;##3;##4;##5;{\tryloadenc{##5}%
+ \ofsloadfont {\newfamily-it}{\userfontname}{##3}{T}{##5}{}}%
+ \fi
+ \expandafter\savetokenname \csname bi\endcsname \tmpa
+ \ifx\sgvariant\tmpa
+ \def\loadtextfam ##1;##2;##3;##4;##5;{\tryloadenc{##5}%
+ \ofsloadfont {\newfamily-bi}{\userfontname}{##4}{I}{##5}{}}%
+ \fi
+ \ifx\loadtextfam\oriloadfam
+ \def\loadtextfam ##1;##2;##3;##4;##5;{\tryloadenc{##5}}%
+ \def\newvariant ##1 ##2(##3) ##4;##5;{\savetokenname ##2\tmpa
+ \ifx \tmpa\sgvariant
+ \ofsloadfont {\newfamily-\tmpa}{\userfontname}{##4}{##1}{##5}{}%
+ \fi}%
+ \else
+ \def\newvariant ##1 ##2(##3) ##4;##5;{}%
+ \fi
+ \fontprefix \expandafter \let \csname \userfontname \endcsname =\relax
+ \setfontshook
+ \csname fam!.\newfamily\endcsname
+ \expandafter \ifx \csname \userfontname \endcsname \relax
+ \displaymessage{\ofsmessageheader WARNING.
+ Variant \newfamily-\sgvariant\space is unknown.
+ No font is set.}%
+ \let\setfontsOK=\undefined
+ \else
+ \csname \userfontname \endcsname
+ \let\sgfamily=\newfamily
+ \let\currentvariant=G%
+ \fi
+ \fi
+ \let\fosize=\orifosize
+ \let\loadtextfam=\oriloadfam
+ \let\orinewvariant=\newvariant
+}
+\let\orifosize=\relax \let\oriloadfam=\relax \let\orinewvariant=\relax
+\let\newfamily=\relax \let\sgfamily=\relax \let\sgvariant=\relax
+
+\def\fontdef #1[#2/#3]{\def\tmpc{!}%
+ \edef\tmpa{#3}%
+ \ifx\tmpa\tmpc \let\tmpa=\fosize \fi
+ \edef\tmpb{#2}\expandafter \readfamvariant\tmpb--:%
+ \ifx\tmpb\tmpc \let\tmpb=\currentfamily \fi
+ \ifx\famvariant\empty
+ \fontmessage{\ofsmessageheader Define \string#1
+ as \noexpand\setfonts[\tmpb/\tmpa].}%
+ \xdef #1{\noexpand\setfonts [\tmpb/\tmpa]}%
+ \else
+ \ifx\tmpa\empty \def\tmpa{mag1.0}\fi
+ \expandafter \if m\expandafter \readfirsttoken \tmpa:\end
+ \fontmessage{\ofsmessageheader Define \string#1
+ as \noexpand\setfonts[\tmpb-\famvariant/\tmpa].}%
+ \xdef #1{\noexpand\setfonts [\tmpb-\famvariant/\tmpa]}%
+ \else
+ \ifx\tmpb\empty
+ \fontmessage{\ofsmessageheader Define \string#1
+ as \noexpand\setfonts[-\famvariant/\tmpa].}%
+ \xdef #1{\noexpand\setfonts [-\famvariant/\tmpa]}%
+ \else
+ \registeredfam \tmpb?\iftrue
+ \fontmessage{\ofsmessageheader Define \string#1
+ as fixed font [\tmpb-\famvariant/\tmpa].}%
+ {\let\fontprefix=\global \let\tmpc=\tmpa
+ \savetokenname #1\userfontname
+ \setsinglefont [\tmpb-\famvariant/\tmpc]}%
+ \else
+ \warnunregistered \tmpb
+ \displaymessage{ \space \string\fontdef\string#1
+ [#2/#3] ignored. \string#1=\string\nullfont}%
+ \global\let #1=\nullfont
+ \fi\fi\fi\fi
+}
+
+
+%%%% \knownfam \registeredfam \knownchar %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\knownfam #1?#2{% usage: \knownfam Times? \iftrue ...\else...\fi
+ \expandafter\ifx \csname fam!.#1\endcsname \relax
+ \csname iffalse\expandafter\endcsname
+ \else
+ \csname iftrue\expandafter\endcsname
+ \fi
+}
+\def\ifknownfam [#1]{\knownfam #1?!} % for bacward compatibility
+
+\def \registeredfam #1?#2{% usage: \registeredfam Times?\iftrue...\else...\fi
+ \expandafter \ifx\csname ffe?#1:\endcsname \relax
+ \def\tmpc{iftrue}%
+ \else \edef\act{\def\noexpand\tmpc####1 \fotenc,####2^^X%
+ {\def\noexpand\tmpc{####2}}}\act
+ \edef\act{\noexpand\tmpc \space
+ \csname ffe?#1:\expandafter\endcsname, \fotenc,^^X}\act
+ \ifx\tmpc\empty \def\tmpc{iffalse}%
+ \else \def\tmpc{iftrue}\fi
+ \fi \csname\tmpc\endcsname
+}
+\def\knownchar #1?#2{% usage: \knownchar \euro? \iftrue...\else...\fi
+ \if u\expandafter \readfirsttoken \meaning #1:\end % undefined
+ \let\tmpa=\relax \let\tmpb=\relax
+ \else
+ {\def\printcharacterwarn##1{\relax}\def\printcharacteraccent##1##2{\relax}%
+ \def\setextrafont{}\xdef\tmpa{#1}\gdef\tmpb{\relax}}%
+ \fi
+ \ifx \tmpa\tmpb \csname iffalse\expandafter\endcsname \else
+ \csname iftrue\expandafter\endcsname \fi
+}
+
+
+%%%% Extra encodings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\setextrafont{%
+ \ifx\expandaction\noexpand
+ \noexpand\setextrafont
+ \else
+ \csname fragilecommand!\endcsname
+ \expandafter \ifx \csname eXfont!.\fontname\the\font\endcsname \relax
+ \expandafter\let\expandafter\tmpa \the\font
+ \displaymessage{\ofsmessageheader WARNING.
+ \string\setextrafont: No extra metric for \metrictmpa.}%
+ \else
+ \font\extrafont=\csname eXfont!.\fontname\the\font\endcsname
+ \relax
+ \fontloadmessage{extrafont}%
+ {\csname eXfont!.\fontname\the\font\endcsname}%
+ \extrafont
+ \fi
+ \fi
+}
+\let\currentextrafont=\relax
+
+\def\characterdef #1#2#3 {\relax \savetokenname #1\tmpa
+ \edef \tmpb{\noexpand\printcharacter {\tmpa}}%
+ \expandafter \ifx \csname\tmpa\endcsname \relax \let#1=\tmpb \fi
+ \let\tmpc=\tmpa
+ \edef \tmpa {\tmpa:-#2#3}%
+ \ifx #1\tmpb \else
+ \expandafter \ifx \csname\tmpa\endcsname \relax
+ \fontmessage{\ofsmessageheader "\string#1" is
+ defined already, \noexpand\characterdef ignored.}%
+ \fi\fi
+ \futurelet \tmpb \docharacterdef
+}
+\def\characterdel #1#2#3 {\relax \savetokenname #1\tmpa
+ \ifx\tmpc\tmpa \else
+ \expandafter \let \csname\tmpa:-#2#3\endcsname =\relax \fi
+ \let\tmpc=\relax
+ \def \tmpa {tmpa}%
+ \futurelet \tmpb \docharacterdef
+}
+\def\characternodef #1#2#3 {\relax \savetokenname #1\tmpa
+ \edef \tmpb{\noexpand\printcharacter {\tmpa}}%
+ \expandafter \ifx \csname\tmpa\endcsname \relax \let#1=\tmpb \fi
+ \edef \tmpa {tmpa}%
+ \futurelet \tmpb \docharacterdef
+}
+\def\docharacterdef {%
+ \ifx\tmpb\bgroup
+ \afterassignment \ignorespaces
+ \expandafter \def \csname \tmpa \expandafter\endcsname
+ \else
+ \afterassignment \donumbercharacterdef
+ \uccode`\^^@=
+ \fi
+}
+{\catcode`\^^@=12
+\gdef\donumbercharacterdef {%
+ \uppercase{\expandafter \def\csname \tmpa\endcsname {^^@}}%
+ \uccode`\^^@=0
+}}
+\def\printcharacter #1{%
+ \ifx\expandaction\noexpand
+ \expandafter\noexpand \csname #1\endcsname
+ \else
+ \expandafter\ifx\csname #1:-\fotenc\endcsname \relax
+ \expandafter \ifx \csname eXfont!.\fontname\the\font\endcsname \relax
+ \expandafter\ifx\csname #1:-*\endcsname \relax
+ \printcharacterwarn{#1}%
+ \else \csname #1:-*\endcsname
+ \fi
+ \else
+ \expandafter \ifx \csname
+ #1:-\csname eXenc!.\fontname\the\font\endcsname
+ \endcsname \relax
+ \expandafter\ifx\csname #1:-*\endcsname \relax
+ \printcharacterwarn{#1}%
+ \else \csname #1:-*\endcsname
+ \fi
+ \else
+ {\expandafter \setextrafont \csname
+ #1:-\csname eXenc!.\fontname\the\font\endcsname \endcsname}%
+ \fi
+ \fi
+ \else
+ \csname #1:-\fotenc\endcsname
+ \fi
+ \fi
+}
+\def\printcharacterwarn #1{%
+ \csname fragilecommand!\expandafter\endcsname
+ % \printcharacter may be first token in \halign data
+ \expandafter\def\expandafter\tmpa\expandafter{\currentfamily}%
+ \displaymessage{\ofsmessageheader WARNING.
+ Command \expandafter\noexpand\csname#1\endcsname
+ is unavailable in \tmpa.}%
+}
+
+\def\extchar{\afterassignment\doextchar \chardef\tmpc=}
+\def\doextchar{{\setextrafont\tmpc}}
+
+\def\accentdef #1#2#3#4 {\relax \savetokenname #1\tmpa
+ \edef #1##1{\noexpand\printaccent {\tmpa}{##1}}%
+ \if *#2\edef \tmpa {\tmpa:#2--#3#4}%
+ \else \edef \tmpa {\tmpa:#2:-#3#4}%
+ \fi
+ \futurelet \tmpb \docharacterdef
+}
+\def\accentdel #1#2#3#4 {\relax \savetokenname #1\tmpa
+ \if *#2\expandafter \let \csname\tmpa:#2--#3#4\endcsname =\relax
+ \else \expandafter \let \csname\tmpa:#2:-#3#4\endcsname =\relax
+ \fi
+ \def \tmpa {tmpa}%
+ \futurelet \tmpb \docharacterdef
+}
+\def\accentnodef #1#2#3#4 {\relax \savetokenname #1\tmpa
+ \edef #1##1{\noexpand\printaccent {\tmpa}{##1}}%
+ \edef \tmpa {tmpa}%
+ \futurelet \tmpb \docharacterdef
+}
+\def\printaccent #1#2{%
+ \ifx\expandaction\noexpand
+ \expandafter\noexpand \csname #1\endcsname {#2}%
+ \else
+ \expandafter \ifx \csname #1:#2:-\fotenc\endcsname \relax
+ \expandafter \ifx \csname eXfont!.\fontname\the\font\endcsname\relax
+ \expandafter \ifx \csname #1:*--\fotenc\endcsname \relax
+ \expandafter \ifx \csname #1:#2:-*\endcsname \relax
+ \expandafter \ifx \csname #1:*--*\endcsname \relax
+ \printaccentwarn{#1}{#2}%
+ \else
+ \if ^^X#2^^X\csname #1:*--*\endcsname {}%
+ \else \csname #1:*--*\endcsname #2%
+ \fi
+ \fi
+ \else \csname #1:#2:-*\endcsname
+ \fi
+ \else
+ \if ^^X#2^^X\csname #1:*--\fotenc\endcsname {}%
+ \else \csname #1:*--\fotenc\endcsname #2%
+ \fi
+ \fi
+ \else
+ \expandafter \ifx \csname
+ #1:#2:-\csname eXenc!.\fontname\the\font\endcsname
+ \endcsname \relax
+ \expandafter \ifx \csname #1:*--\fotenc\endcsname \relax
+ \expandafter \ifx \csname
+ #1:*--\csname eXenc!.\fontname\the\font\endcsname
+ \endcsname \relax
+ \expandafter \ifx \csname #1:#2:-*\endcsname \relax
+ \expandafter \ifx \csname #1:*--*\endcsname \relax
+ \printaccentwarn{#1}{#2}%
+ \else
+ \if ^^X#2^^X\csname #1:*--*\endcsname {}%
+ \else \csname #1:*--*\endcsname #2%
+ \fi
+ \fi
+ \else \csname #1:#2:-*\endcsname
+ \fi
+ \else
+ \expandafter \let \expandafter \tmpb \the\font
+ {\if ^^X#2^^X\expandafter \setextrafont \csname
+ #1:*--\csname eXenc!.\fontname\tmpb\endcsname
+ \endcsname \tmpb {}%
+ \else \expandafter \setextrafont \csname
+ #1:*--\csname eXenc!.\fontname\tmpb\endcsname
+ \endcsname \tmpb #2%
+ \fi}%
+ \fi
+ \else
+ \if ^^X#2^^X\csname #1:*--\fotenc\endcsname {}%
+ \else \csname #1:*--\fotenc\endcsname #2%
+ \fi
+ \fi
+ \else
+ {\expandafter \setextrafont \csname
+ #1:#2:-\csname eXenc!.\fontname\the\font\endcsname
+ \endcsname}%
+ \fi
+ \fi
+ \else
+ \csname #1:#2:-\fotenc\endcsname
+ \fi
+ \fi
+}
+\def\printaccentwarn #1#2{%
+ \csname fragilecommand!\expandafter\endcsname
+ % \printaccent may be first token in \halign data
+ \expandafter\def\expandafter\tmpa\expandafter{\currentfamily}%
+ \displaymessage{\ofsmessageheader WARNING.
+ Accent \expandafter\string\csname#1\endcsname{#2}
+ is unavailable in \tmpa.}%
+}
+\def\accentabove #1#2#3{%
+ \ifx\expandaction\noexpand
+ \noexpand\accentabove {#1}{#2}{#3}%
+ \else
+ \csname fragilecommand!\endcsname
+ \if ^^X#3^^X#1\else
+ \leavevmode\vbox{%
+ \setbox0=\hbox{#3}\setbox2=\hbox{#1}%
+ \dimen0=\ht0 \advance\dimen0 by\dp2 \advance\dimen0 by#2\relax
+ \offinterlineskip
+ \halign {##\cr
+ \hidewidth\slantcorrection{\dimen0}\box2 \hidewidth\cr
+ \noalign{\kern#2}\box0 \cr}}%
+ \fi\fi
+}
+\def\accentbelow #1#2#3{%
+ \ifx\expandaction\noexpand
+ \noexpand\accentbelow {#1}{#2}{#3}%
+ \else
+ \csname fragilecommand!\endcsname
+ \if ^^X#3^^X#1\else
+ \leavevmode\vtop{%
+ \setbox0=\hbox{#3}\setbox2=\hbox{#1}%
+ \dimen0=-\dp0 \advance\dimen0 by-\ht2 \advance\dimen0 by-#2\relax
+ \offinterlineskip
+ \halign {##\cr \box0 \cr\noalign{\kern#2}%
+ \hidewidth \slantcorrection{\dimen0}%
+ \dimen0=\dp2 \ifdim\dimen0<.2ex \dimen0=.2ex \fi
+ \vbox to\dimen0{\hbox{\box2}\vss}\hidewidth\cr}}%
+ \fi\fi
+}
+\def\slantcorrection #1{\dimen0=#1\relax
+ \dimen0 =\expandafter \noPT\the\fontdimen1\the\font \dimen0
+ \kern 2\dimen0
+}
+
+%%%% \modifyenc, \modifydef, \tryloadenc, \registerenc %%%%%%%%%%%%%%
+ %% news in version Feb. 2004
+\newcount\loadingenc \loadingenc=0
+
+\def\modifyenc #1:#2;{\def\tmpa{#1}% encoding
+ \ifx\tmpa\fotenc \ofsaddenctolist #1:#2;\fi
+ \ifx\tmpa\extraenc \ofsaddenctolist #1:#2;\fi
+}
+\def\ofsaddenctolist #1;{\expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter \newmodifylist
+ \expandafter\expandafter\expandafter {\expandafter \newmodifylist
+ \csname #1\expandafter\endcsname}}
+\def\modifylist{} \def\newmodifylist{}
+
+\def\modifydef #1;#2{%
+ \expandafter \def \csname#1\endcsname {#2}%
+ \let\characterdef=\characternodef \let\accentdef=\accentnodef
+ \let\characterdel=\characternodef \let\accentdel=\accentnodef
+ \def\skipfirststep##1\relax\empty\empty{}%
+ #2\relax\empty\empty
+ \let\characterdef=\characterdefori \let\accentdef=\accentdefori
+ \let\characterdel=\characterdelori \let\accentdel=\accentdelori
+ \let\skipfirststep=\relax
+ \ignorespaces
+}
+\def\modifyread #1;{%
+ \ifnum\loadingenc>0
+ \expandafter \ifx \csname m:>#1\endcsname \relax
+ \fontmessage{\ofsmessageheader \string\modifyread:
+ file read from \string\modifytext}%
+ {\plaincatcodes \catcode`@=11 \endlinechar=-1 \globaldefs=1
+ \def\tmpa ##1\modifytext{}%
+ \expandafter \tmpa \input #1
+ \expandafter \gdef \csname m:>#1\endcsname {}}%
+ \fi\fi
+}
+\def\tryloadenc #1{\edef\extraenc{#1}%
+ \ifnum\loadingenc>0
+ \ofsinput ofs-\fotenc.tex
+ \ifx\extraenc\empty \else \ofsinput ofs-\extraenc.tex \fi
+ \fi
+}
+\def\runmodifylist {%
+ \ifx \modifylist\relax \else
+ \ifx \modifylist\newmodifylist \else
+ \let\tmpc=\relax
+ \switchdeftodel \modifylist
+ \switchdeftodel \newmodifylist
+ \let \modifylist=\newmodifylist
+ \fi
+ \fi
+}
+\def\switchdeftodel{%
+ \let\tmpa=\characterdef \let\characterdef=\characterdel \let\characterdel=\tmpa
+ \let\tmpa=\accentdef \let\accentdef=\accentdel \let\accentdel=\tmpa
+}
+\let\characterdefori=\characterdef
+\let\characterdelori=\characterdel
+\let\accentdefori=\accentdef
+\let\accentdelori=\accentdel
+\let\skipfirststep=\relax
+
+\def\registerenc #1:#2#3 {%
+ \edef\tmpa{#1}\ifx\tmpa\empty \edef\tmpa{\declaredfamily}\fi
+ \if*#2\expandafter \let \csname ffe?\tmpa:\endcsname =\relax
+ \else \expandafter \edef \csname ffe?\tmpa:\endcsname {%
+ \expandafter\ifx \csname ffe?\tmpa:\endcsname\relax
+ \else \csname ffe?\tmpa:\endcsname, \fi#2#3}%
+ \fi
+}
+\def\warnunregistered #1{\displaymessage{\ofsmessageheader WARNING.
+ Unregistered enc \fotenc\space for #1. No font is set.^^J
+ \space Use \noexpand\registerenc #1: \fotenc\space\space
+ if you have got appropriate tfm's.}}
+
+%%%% \plaincatcodes, \safelet, \protectreading %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\plaincatcodes {\catcode`\\0\catcode`\{1\catcode`\}2%
+ \catcode`\$3\catcode`\&4\catcode`\^^M5\catcode`\#6%
+ \catcode`\^7\catcode`\_8\catcode`\ 10\catcode`\~13%
+ \catcode`\^^I10\catcode`\%14\catcode`!12\catcode`"12%
+ \catcodesloop '.{12}\catcodesloop 0@{12}\catcodesloop AZ{11}%
+ \catcode`[12\catcode`]12\catcode``12\catcodesloop az{11}%
+ \catcode`|12\relax
+}
+\def\catcodesloop #1#2#3{\countdef\tmpa2 \chardef\tmpb\tmpa
+ \tmpa=`#1\relax
+ \loop
+ \catcode\tmpa=#3\relax
+ \ifnum\tmpa <`#2 \advance\tmpa by1
+ \repeat
+ \tmpa=\tmpb % original value of \count2
+}
+\def\safelet #1{\ifx#1\undefined
+ \expandafter \let \expandafter #1%
+ \else \ifx#1\relax
+ \expandafter\expandafter\expandafter \let
+ \expandafter\expandafter\expandafter #1%
+ \else
+ \def\tmpa{\let\tmpa}\safeletwarn#1%
+ \expandafter\expandafter\expandafter \tmpa
+ \fi\fi
+}
+\def\safeletwarn #1{\displaymessage{\ofsmessageheader WARNING.
+ \noexpand#1 is defined already, \noexpand \safelet does nothing.}}
+
+\def\protectreading #1 {\expandafter
+ \ifx \csname f:>#1\endcsname \relax
+ \expandafter \def \csname f:>#1\endcsname {}%
+ \else \expandafter \endinput
+ \fi
+}
+\def\ofsinput #1 {\expandafter
+ \ifx \csname f:>#1\endcsname \relax
+ {\plaincatcodes \catcode`@=11 \endlinechar=-1 \globaldefs=1 \input #1
+ \let\tmpa \relax
+ \expandafter \gdef \csname f:>#1\endcsname {}}\fi
+}
+
+%%%% Math %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\loadmathfam #1[#2/#3]{% #1: fam, [#2/#3]: basic font [switch/file]
+ % basic font is used in three sizes: \textfosize, \scriptfosize,
+ % \scsriptscriptfosize. The basic font is given by its font-switch
+ % (control sequence without backslash) XOR its filename.
+ \relax
+ \ifnum #1<16
+ \if |#2|\edef\tmpa{#3}\edef\tmpb{#3}%
+ \else
+ \edef\tmpb{#2}%
+ \edef \tmpa {\expandafter \readfirsttoken \tmpb:\end}%
+ \if -\tmpa
+ \expandafter \ifx \csname fm:\tmpb\endcsname \relax
+ \expandafter \ifx \csname fv:\tmpb\endcsname \empty % -bi => -bf
+ \displaymessage{\ofsmessageheader WARNING. loadmathfam:
+ no "\tmpb" in "\currentfamily", I try "-bf".}%
+ \def\tmpb{-bf}%
+ \fi\fi
+ \expandafter \ifx \csname fm:\tmpb\endcsname \relax
+ \ofsmissingmathfont {no "\tmpb" in "\currentfamily"}%
+ \else
+ \edef\tmpa {\csname fm:\tmpb\endcsname}%
+ \fi
+ \else
+ \if X\tmpa
+ \edef\tmpa {\expandafter\readothertokens\tmpb:\end}%
+ \if s\expandafter\expandafter\expandafter \readfirsttoken
+ \expandafter \meaning \csname \tmpa \endcsname:\end
+ \expandafter \ifx \csname eXfont!.\fontname
+ \csname\tmpa\endcsname \endcsname \relax
+ \ofsmissingmathfont {"\tmpa" has no extra metric}%
+ \else \edef \tmpa {\csname eXfont!.\fontname
+ \csname\tmpa\endcsname \endcsname \space}%
+ \edef\tmpa{\expandafter\singlefontname\tmpa:}% gobble at<dimen>
+ \fi
+ \else
+ \ofsmissingmathfont {"\tmpa" is no font selector}%
+ \fi
+ \else
+ \if s\expandafter\expandafter\expandafter \readfirsttoken
+ \expandafter \meaning \csname #2\endcsname:\end
+ \edef\tmpa{\expandafter\fontname\csname#2\endcsname\space}%
+ \edef\tmpa{\expandafter\singlefontname\tmpa:}% gobble at<dimen>
+ \else
+ \ofsmissingmathfont {"\tmpb" is no font selector}%
+ \fi\fi\fi\fi
+ \calculatemetricfile \tmpa \textfosize
+ \expandafter\font \csname\tmpb-Mt\endcsname
+ =\metricfile\textfosize \relax \restorefontid{\tmpb-Mt}%
+ \fontloadmessage{\tmpb-Mt}{\metricfile\textfosize
+ \space\space (fam:\string#1\if#1\relax=\the#1\fi)}%
+ \ifx \noindexsize \relax
+ \expandafter \let \csname\tmpb-Mss\expandafter\endcsname
+ \csname\tmpb-Mt\endcsname
+ \expandafter \let \csname\tmpb-Ms\expandafter\endcsname
+ \csname\tmpb-Mt\endcsname
+ \else
+ \calculatemetricfile \tmpa \scriptfosize
+ \expandafter\font \csname\tmpb-Ms\endcsname
+ =\metricfile\scriptfosize \relax \restorefontid{\tmpb-Ms}%
+ \fontloadmessage{\tmpb-Ms}{\metricfile\scriptfosize
+ \space\space (fam:\string#1\if#1\relax=\the#1\fi)}%
+ \calculatemetricfile \tmpa \scriptscriptfosize
+ \expandafter\font \csname\tmpb-Mss\endcsname
+ =\metricfile\scriptscriptfosize \relax \restorefontid{\tmpb-Mss}%
+ \fontloadmessage{\tmpb-Mss}{\metricfile\scriptscriptfosize
+ \space\space (fam:\string#1\if#1\relax=\the#1\fi)}%
+ \fi
+ \textfont #1=\csname\tmpb-Mt\endcsname
+ \scriptfont #1=\csname\tmpb-Ms\endcsname
+ \scriptscriptfont #1=\csname\tmpb-Mss\endcsname
+ \else
+ \displaymessage{\ofsmessageheader WARNING.
+ \noexpand\loadmathfam \string#1[#2/#3] ignored (\string#1 >= 16).}%
+ \fi
+ \def\noindexsize {\let\noindexsize \relax}%
+}
+\def\ofsmissingmathfont #1{%
+ \displaymessage{\ofsmessageheader WARNING.
+ loadmathfam: #1, \csname fm:-rm\endcsname\space used.}%
+ \edef\tmpa{\csname fm:-rm\endcsname}%
+ \def\tmpb{-rm}%
+}
+\expandafter\def \csname fm:-rm\endcsname {cmr10}
+\expandafter\def \csname fv:-bi\endcsname {}
+
+\def\noindexsize {\let\noindexsize \relax}
+\def\hex#1{\ifcase#10\or1\or2\or3\or4\or5\or6\or7\or8\or9\or
+ A\or B\or C\or D\or E\or F\else0\fi}%
+\def\newmathfam #1{\advance\lastfam by1 \chardef #1=\lastfam\relax}
+\countdef\lastfam=18
+
+\def\setmath [#1/#2/#3]{%
+ \ifx\expandaction\noexpand
+ \noexpand\setmath [#1/#2/#3]%
+ \else
+ \csname fragilecommand!\endcsname
+ \if|#1|\def\tmpa{mag1.0}\else\edef\tmpa{#1}\fi
+ \expandafter \setfosize \expandafter \textfosize \tmpa:%
+ \if|#2|\def\tmpa{mag0.7}\else\edef\tmpa{#2}\fi
+ \expandafter \setfosize \expandafter \scriptfosize \tmpa:%
+ \if|#3|\def\tmpa{mag0.5}\else\edef\tmpa{#3}\fi
+ \expandafter \setfosize \expandafter \scriptscriptfosize \tmpa:%
+ \fontmessage{\ofsmessageheader \noexpand\setmath
+ [\textfosize/\scriptfosize/\scriptscriptfosize]
+ (enc=\fomenc, version=\mathversion)}%
+ \mathfonts
+ \ifx \currentfomenc\fomenc \else
+ \mathcharsback \let\mathcharsback=\relax
+ \mathchars \let\currentfomenc=\fomenc
+ \fi
+ \ignorespaces
+ \fi
+}
+\def\setsimplemath{\setmath[//]} % for backward compatibility
+
+\def\safemathchardef{\dosafemathdef\mathchardef}
+\def\safemathaccentdef{\dosafemathdef\mathaccentdef}
+
+\def\dosafemathdef #1#2{\relax
+ \ifx #2\undefined \expandafter #1\expandafter#2%
+ \else
+ \savetokenname #2\tmpb
+ \expandafter \ifx \csname M\tmpb\endcsname \relax
+ \expandafter \let \csname T\tmpb\endcsname =#2%
+ \edef #2{\noexpand\ifmmode \noexpand\expandafter
+ \expandafter\noexpand \csname M\tmpb\endcsname
+ \noexpand\else \noexpand\expandafter
+ \expandafter\noexpand \csname T\tmpb\endcsname
+ \noexpand\fi}%
+ \expandafter #1\csname M\tmpb
+ \expandafter\expandafter\expandafter\endcsname
+ \else \mathchardef \tmpb
+ \fi\fi
+}
+\def\mathaccentdef #1{\def\tmpa{\edef#1{\mathaccent\the\tmpb\space}}%
+ \afterassignment \tmpa \mathchardef\tmpb
+}
+
+
+\def\pickmathfont #1#2{% We need "=" in \Long/right/left/arrow macros
+ \mathchoice % but we need not allocate new mathfam
+ {\hbox{\calculatemetricfile{#1}\textfosize
+ \font\tmpa=\metricfile \textfosize \tmpa#2%
+ \fontloadmessage{tmpa}{\metricfile\textfosize
+ \space\space\space T: {\noexpand\tmpa#2}}}}%
+ {\hbox{\calculatemetricfile{#1}\textfosize
+ \font\tmpa=\metricfile \textfosize \tmpa#2%
+ \fontloadmessage{tmpa}{\metricfile\textfosize
+ \space\space\space D: {\noexpand\tmpa#2}}}}%
+ {\hbox{\calculatemetricfile{#1}\scriptfosize
+ \font\tmpa=\metricfile \scriptfosize \tmpa#2%
+ \fontloadmessage{tmpa}{\metricfile\scriptfosize
+ \space\space\space S: {\noexpand\tmpa#2}}}}%
+ {\hbox{\calculatemetricfile{#1}\scriptscriptfosize
+ \font\tmpa=\metricfile \scriptscriptfosize \tmpa#2%
+ \fontloadmessage{tmpa}{\metricfile\scriptscriptfosize
+ \space\space\space SS: {\noexpand\tmpa#2}}}}%
+}
+\def\ofshexbox#1#2#3{%
+ \ifx\expandaction\noexpand
+ \noexpand \ofshexbox{#1}#2#3%
+ \else
+ \csname fragilecommand!\endcsname
+ {\ifx F\currentvariant \def\tmpa{#1:-bf!}%
+ \else \ifx T\currentvariant \def\tmpa{#1:-it!}%
+ \else \ifx I\currentvariant \def\tmpa{#1:-bi!}%
+ \else \def\tmpa{#1:-rm!}\fi\fi\fi
+ \expandafter \ifx \csname\tmpa\endcsname \relax
+ \displaymessage{\ofsmessageheader WARNING.
+ \string\ofsboxhex#1#2#3: fam#1 is undeclared,
+ use \string\ofshexboxdef}%
+ \else
+ \expandafter \calculatemetricfile \csname\tmpa\endcsname \fosize
+ \font\fn=\metricfile\fosize \relax
+ \fontloadmessage{fn}{\metricfile\fosize \space\space(ofshexbox)}%
+ \fn
+ \fi \char"#2#3}%
+ \fi}
+
+\def\ofshexboxdef #1#2#3#4#5{%
+ \expandafter\def\csname #1:-rm!\endcsname {#2}%
+ \expandafter\def\csname #1:-bf!\endcsname {#3}%
+ \expandafter\def\csname #1:-it!\endcsname {#4}%
+ \expandafter\def\csname #1:-bi!\endcsname {#5}%
+}
+\def\mathencread#1;{\ofsinput #1.tex \global \expandafter
+ \let \csname f:>#1.tex\endcsname=\relax}
+\def\mathencdef#1{\aftergroup\runplusforget \aftergroup#1\gdef#1}
+\def\runplusforget#1{#1\global\let#1=\relax}
+
+\catcode`\|=\tmpc\relax % original catcode of |
+
+%%% default math sizes:
+\def\textfosize{at10pt}
+\def\scriptfosize{at7pt} \def\scriptscriptfosize{at5pt}
+
+%%%% \endOFSmacro : reads [options] after \input ofs %%%%%%%%%%%%%%%%
+
+\def\endOFSmacro {\expandafter \futurelet \expandafter
+ \tmpa \expandafter \testOFSoptions \endinput}
+\def\testOFSoptions {\ifx [\tmpa \expandafter \readOFSoptions \fi}
+\def\readOFSoptions [#1]{\let\next=\processOFSoption \next #1,^^X,}
+\def\processOFSoption #1,{\if ^^X#1\let\next=\relax
+ \else \input #1 \fi \next}
+
+
+%%%% Default text + math families %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input ofsdef
+
+%%%% End of OFS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\endOFSmacro
diff --git a/macros/generic/ofs/tex/ofsdef.tex b/macros/generic/ofs/tex/ofsdef.tex
new file mode 100644
index 0000000000..c207308e2c
--- /dev/null
+++ b/macros/generic/ofs/tex/ofsdef.tex
@@ -0,0 +1,414 @@
+% OFS: The default text families + math families
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Jun 2001 Petr Olsak
+
+% You cannot \input this file because this file is \inputted automatically.
+% See ofsdoc.tex for more details
+
+\ifx\ofsdeclarefamily\undefined
+ \errmessage{You can't \string\input\space the file ofssdef.tex
+ directly from your document%
+ }
+ \endinput \fi
+
+\protectreading ofsdef.tex % This is part of OFS package
+
+%%% Computer Roman family %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\defaultextraenc{8c} % You can re-define this macro before
+ % \setfonts in order to change
+ % extra encoding of default families
+
+\ofsputfamlist {^^Jdefaults:}
+
+\ofsdeclarefamily [CMRoman] {% ------------ Computer Modern Roman
+ \loadtextfam cmr\fotenc;%
+ cmbx\fotenc;%
+ cmti\fotenc;%
+ cmbxti\fotenc;\defaultextraenc;%
+ \newvariant8 \sl (Slanted) cmsl\fotenc;\defaultextraenc;%
+ \newvariant9 \bxsl (BoldSlanted) cmbxsl\fotenc;\defaultextraenc;%
+ \modifyenc 8z:csfont;%
+}
+\registerenc: 8z \registerenc: 8t
+\registerenc: 6a
+
+\ofsdeclarefamily [CMSans] {% ------------- Computer Modern Sans Serif
+ \loadtextfam cmss\fotenc;%
+ cmssbx\fotenc;%
+ cmssi\fotenc;%
+ cmssbxti\fotenc;\defaultextraenc;%
+ \modifyenc 8z:csfont;%
+}
+\registerenc: 8z \registerenc: 8t
+\registerenc: 6a
+
+\ofsdeclarefamily [CMTypewriter] {% ------- Computer Modern Typewriter
+ \loadtextfam cmtt\fotenc;%
+ cmttbx\fotenc;%
+ cmitt\fotenc;%
+ cmttbxti\fotenc;\defaultextraenc;%
+ \newvariant8 \sl (Slanted) cmsltt\fotenc;\defaultextraenc;%
+ \modifyenc 8z:csfont;%
+ \modifyenc 8z:nocrossL;%
+}
+\registerenc: 8z \registerenc: 8t
+\registerenc: 6a
+
+
+%%%% Math fonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\registertfm cmsy - cmsy10
+\registertfm cmsy 0pt-6pt cmsy5
+\registertfm cmsy 6pt-7pt cmsy6
+\registertfm cmsy 7pt-8pt cmsy7
+\registertfm cmsy 8pt-9pt cmsy8
+\registertfm cmsy 9pt-10pt cmsy9
+\registertfm cmsy 10pt-* cmsy10
+
+\registertfm cmmi - cmmi10
+\registertfm cmmi 0pt-6pt cmmi5
+\registertfm cmmi 6pt-7pt cmmi6
+\registertfm cmmi 7pt-8pt cmmi7
+\registertfm cmmi 8pt-9pt cmmi8
+\registertfm cmmi 9pt-10pt cmmi9
+\registertfm cmmi 10pt-12pt cmmi10
+\registertfm cmmi 12pt-* cmmi12
+
+%%%% CSfonts (encoding: 8z) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\registertfm cmr8z - csr10
+\registertfm cmr8z 0pt-6pt csr5
+\registertfm cmr8z 6pt-7pt csr6
+\registertfm cmr8z 7pt-8pt csr7
+\registertfm cmr8z 8pt-9pt csr8
+\registertfm cmr8z 9pt-10pt csr9
+\registertfm cmr8z 10pt-12pt csr10
+\registertfm cmr8z 12pt-17pt csr12
+\registertfm cmr8z 17pt-* csr17
+
+\registertfm cmbx8z - csbx10
+\registertfm cmbx8z 0pt-6pt csbx5
+\registertfm cmbx8z 6pt-7pt csbx6
+\registertfm cmbx8z 7pt-8pt csbx7
+\registertfm cmbx8z 8pt-9pt csbx8
+\registertfm cmbx8z 9pt-10pt csbx9
+\registertfm cmbx8z 10pt-12pt csbx10
+\registertfm cmbx8z 12pt-* csbx12
+
+\registertfm cmti8z - csti10
+\registertfm cmti8z 0pt-8pt csti7
+\registertfm cmti8z 8pt-9pt csti8
+\registertfm cmti8z 9pt-10pt csti9
+\registertfm cmti8z 10pt-12pt csti10
+\registertfm cmti8z 12pt-17pt csti12
+\registertfm cmti8z 17pt-* csti17
+
+\registertfm cmbxti8z - csbxti10
+\registertfm cmbxti8z 0pt-12pt csbxti10
+\registertfm cmbxti8z 12pt-17pt csbxti12
+\registertfm cmbxti8z 17pt-* csbxti17
+
+\registertfm cmsl8z - cssl10
+\registertfm cmsl8z 0pt-6pt cssl5
+\registertfm cmsl8z 6pt-7pt cssl6
+\registertfm cmsl8z 7pt-8pt cssl7
+\registertfm cmsl8z 8pt-9pt cssl8
+\registertfm cmsl8z 9pt-10pt cssl9
+\registertfm cmsl8z 10pt-12pt cssl10
+\registertfm cmsl8z 12pt-17pt cssl12
+\registertfm cmsl8z 17pt-* cssl17
+
+\registertfm cmbxsl8z - csbxsl10
+\registertfm cmsltt8z - cssltt10
+
+\registertfm cmss8z - csss10
+\registertfm cmss8z 0pt-9pt csss8
+\registertfm cmss8z 9pt-10pt csss9
+\registertfm cmss8z 10pt-12pt csss10
+\registertfm cmss8z 12pt-17pt csss12
+\registertfm cmss8z 17pt-* csss17
+
+\registertfm cmssbx8z - csssbx10
+
+\registertfm cmssi8z - csssi10
+\registertfm cmssi8z 0pt-9pt csssi8
+\registertfm cmssi8z 9pt-10pt csssi9
+\registertfm cmssi8z 10pt-12pt csssi10
+\registertfm cmssi8z 12pt-17pt csssi12
+\registertfm cmssi8z 17pt-* csssi17
+
+\registertfm cmtt8z - cstt10
+\registertfm cmtt8z 0pt-9pt cstt8
+\registertfm cmtt8z 9pt-10pt cstt9
+\registertfm cmtt8z 10pt-12pt cstt10
+\registertfm cmtt8z 12pt-* cstt12
+
+\registertfm cmitt8z - csitt10
+
+%%% unavailable in cm*8z :-(
+
+\registertfm cmssbxti8z - -
+\registertfm cmttbx8z - -
+\registertfm cmttbxti8z - -
+
+
+%%%% EC fonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\registerECfont #1 #2 {%
+ \registertfm #1 - #21000
+ \registertfm #1 0pt-6pt #20500
+ \registertfm #1 6pt-7pt #20600
+ \registertfm #1 7pt-8pt #20700
+ \registertfm #1 8pt-9pt #20800
+ \registertfm #1 9pt-10pt #20900
+ \registertfm #1 10pt-10.95pt #21000
+ \registertfm #1 10.95pt-12pt #21095
+ \registertfm #1 12pt-14.4pt #21200
+ \registertfm #1 14.4pt-17.28pt #21440
+ \registertfm #1 17.28pt-20.74pt #21728
+ \registertfm #1 20.74pt-24.88pt #22074
+ \registertfm #1 24.88pt-29.86pt #22488
+ \registertfm #1 29.86pt-35.83pt #22986
+ \registertfm #1 35.83pt-* #23583
+}
+\def\registerECTTfont #1 #2 {%
+ \registertfm #1 - #21000
+ \registertfm #1 0pt-9pt #20800
+ \registertfm #1 9pt-10pt #20900
+ \registertfm #1 10pt-10.95pt #21000
+ \registertfm #1 10.95pt-12pt #21095
+ \registertfm #1 12pt-14.4pt #21200
+ \registertfm #1 14.4pt-17.28pt #21440
+ \registertfm #1 17.28pt-20.74pt #21728
+ \registertfm #1 20.74pt-24.88pt #22074
+ \registertfm #1 24.88pt-29.86pt #22488
+ \registertfm #1 29.86pt-35.83pt #22986
+ \registertfm #1 35.83pt-* #23583
+}
+
+\registerECfont cmr8t ecrm
+\registerECfont cmbx8t ecbx
+\registerECfont cmti8t ecti
+\registerECfont cmbxti8t ecbi
+\registerECfont cmsl8t ecsl
+\registerECfont cmbxsl8t ecbl
+
+\registerECfont cmss8t ecss
+\registerECfont cmssbx8t ecsx
+\registerECfont cmssi8t ecsi
+\registerECfont cmssbxti8t ecso
+
+\registerECTTfont cmtt8t ectt
+\registerECTTfont cmitt8t ecit
+\registerECTTfont cmsltt8t ecst
+
+\registertfm cmttbx8t - -
+\registertfm cmttbxti8t - -
+
+\registerECfont cmr8c tcrm
+\registerECfont cmbx8c tcbx
+\registerECfont cmti8c tcti
+\registerECfont cmbxti8c tcbi
+\registerECfont cmsl8c tcsl
+\registerECfont cmbxsl8c tcbl
+
+\registerECfont cmss8c tcss
+\registerECfont cmssbx8c tcsx
+\registerECfont cmssi8c tcsi
+\registerECfont cmssbxti8c tcso
+
+\registerECTTfont cmtt8c tctt
+\registerECTTfont cmitt8c tcit
+\registerECTTfont cmsltt8c tcst
+
+
+%%%% Times, Helvetica, Courier %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\setfontshook {\let\TeX=\origTeX}
+\let\origTeX=\TeX
+\let\plainL=\L % used in ofs-8z.tex
+
+\ofsdeclarefamily [Times] {% -------------- Times Roman
+ \loadtextfam (Roman) ptmr\fotenc;%
+ ptmb\fotenc;%
+ ptmri\fotenc;%
+ ptmbi\fotenc;\defaultextraenc;%
+ \def\TeX{T\kern-.1667em\lower.3333ex\hbox{E}\kern-.125emX}%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\ofsdeclarefamily [Helvetica] {% ---------- Helvetica
+ \loadtextfam phvr\fotenc;%
+ phvb\fotenc;%
+ (Oblique) phvro\fotenc;%
+ (BoldOblique) phvbo\fotenc;\defaultextraenc;%
+ \newvariant0 \nrm (Narrow) phvr\fotenc n;;%
+ \newvariant1 \nbf (NarrowBold) phvb\fotenc n;;%
+ \newvariant2 \nit (NarrowOblique) phvro\fotenc n;;%
+ \newvariant3 \nbi (NarrowBoldOblique) phvbo\fotenc n;;%
+ \def\TeX{T\kern-.12em\lower.4ex\hbox{E}\kern-0.09emX}%
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\registertfm phvr8zn - phvrn8z %% There is a bug in cspsfonts:
+\registertfm phvb8zn - phvbn8z %% standard metric name: phvr8zn
+\registertfm phvro8zn - phvron8z %% real metric name: phvrn8z
+\registertfm phvbo8zn - phvbon8z
+
+\ofsdeclarefamily [Courier] {% ------------ Courier
+ \loadtextfam pcrr\fotenc;%
+ pcrb\fotenc;%
+ (Oblique) pcrro\fotenc;%
+ (BoldOblique) pcrbo\fotenc;\defaultextraenc;%
+ \let\TeX=\origTeX
+ \modifyenc 8z:badaccents;%
+ \modifyenc 8t:losschars;%
+ \modifyenc 8c:poor;%
+}
+\registerenc: 8z \registerenc: 8t
+
+\registertfm pcrr8z - pcrr8u
+\registertfm pcrb8z - pcrb8u
+\registertfm pcrro8z - pcrro8u
+\registertfm pcrbo8z - pcrbo8u
+
+
+%%%% Math families %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\loadPSnormalmath{%
+ \loadmathfam 0[-rm/]% Actual Roman font
+ \loadmathfam 1[-it/]% Actual Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/cmsy]% Standard symbols from CM
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+ \chardef\symbfam 4
+ \loadmathfam \symbfam [/psyr]% PostScript Symbol
+ \chardef\symbofam 5
+ \loadmathfam \symbofam [/psyro]% PostScript Symbol Oblique
+ \chardef\bffam 6
+ \loadmathfam \bffam [-bf/]% Actual Bold font
+ \chardef\bifam 7
+ \loadmathfam \bifam [-bi/]% Actual Bold Italic
+ \lastfam = 7
+ \chardef\itfam 1
+ \let\slfam\undefined \let\ttfam\undefined
+ \setfosize \tmpa mag1.44:%
+ \font \bigsymbofont=psyr \tmpa% Big variant for \displaysize
+ \fontloadmessage{bigsymbofont}{psyr\space\tmpa}%
+}
+\def\loadPSboldmath{%
+ \loadmathfam 0[-bf/]% Actual Bold font
+ \loadmathfam 1[-bi/]% Actual Bold-Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/cmbsy]% Bold symbols from CM
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+ \chardef\symbfam 4
+ \loadmathfam \symbfam [/psyr]% PostScript Symbol
+ \chardef\symbofam 5
+ \loadmathfam \symbofam [/psyro]% PostScript Symbol Oblique
+ \lastfam = 7 % needs to be the same as in normal version
+ \chardef\itfam 1
+ \chardef\bifam 1
+ \chardef\bffam 0
+ \let\slfam\undefined \let\ttfam\undefined
+ \setfosize \tmpa mag1.44:%
+ \font \bigsymbofont=psyr \tmpa% Big variant for \displaysize
+ \fontloadmessage{bigsymbofont}{psyr\space\tmpa}%
+}
+\def\loadCMnormalmath{%
+ \loadmathfam 0[/cmr8z]% Roman font
+ \defaultskewchar=128
+ \loadmathfam 1[/cmmi]% Math Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/cmsy]% Standard symbols from CM
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/cmex]% Standard extra symbols from CM
+ \chardef\itfam 4
+ \noindexsize\loadmathfam \itfam [/cmti\fotenc]% Text Italic
+ \chardef\slfam 5
+ \noindexsize\loadmathfam \slfam [/cmsl\fotenc]% Slanted
+ \chardef\bffam 6
+ \loadmathfam \bffam [/cmbx\fotenc]% Bold font
+ \chardef\ttfam 7
+ \noindexsize\loadmathfam \ttfam [/cmtt\fotenc]% TypeWriter
+ \lastfam =7
+}
+\def\loadCMboldmath{%
+ \loadmathfam 0[/cmbx8z]% Roman font
+ \defaultskewchar=127
+ \loadmathfam 1[/cmmib]% Math Italic font
+ \defaultskewchar=48
+ \loadmathfam 2[/cmbsy]% Standard symbols from CM
+ \defaultskewchar=-1
+ \noindexsize\loadmathfam 3[/cmex]% Standard extra symbols from CM
+ \chardef\itfam 4
+ \noindexsize\loadmathfam \itfam [/cmbxti\fotenc]% Text Italic
+ \chardef\slfam 5
+ \noindexsize\loadmathfam \slfam [/cmbxsl\fotenc]% Slanted
+ \chardef\bffam 6
+ \loadmathfam \bffam [/cmbx\fotenc]% Bold font
+ \chardef\ttfam 7
+ \noindexsize\loadmathfam \ttfam [/cmtt\fotenc]% TypeWriter
+ \lastfam =7
+}
+\def\setPSmathchars{\mathencread ofs-ps;}
+\let\setCMmathchars=\relax % We need not do any work
+
+%% No size differences in standard CM fonts:
+
+\registertfm cmbsy - cmbsy10
+\registertfm cmex - cmex10
+\registertfm cmmib - cmmib10
+
+%%%% Math defaults %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx \fomenc\undefined \def\fomenc{PS}\fi
+\def\mathversion{normal}
+\def\defaultmathfonts{%
+ \expandafter \ifx \csname load\fomenc\mathversion math\endcsname \relax
+ \message{\ofsmessageheader WARNING:
+ \string\fomenc=\fomenc\space -- undeclared font-set,
+ I use \string\def\string\fomenc{PS}}
+ \def\fomenc{PS}%
+ \fi
+ \csname load\fomenc\mathversion math\endcsname}
+\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}
+\let\mathcharsback=\relax
+\def\mathfonts{\defaultmathfonts}
+\def\mathchars{\defaultmathchars}
+
+%%%% \ofshexbox is more intelligent alternative to \mathhexbox
+
+\ofshexboxdef 2 {cmsy}{cmbsy10}{cmsy}{cmbsy10}
+ % only fam2 is declared because only \mathhexbox2.. is used in plain
+
+\def\ofscopyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\ofshexbox20D}}}
+
+
+%%%% \dots macro (is defined via math mode in original plain) %%%%
+
+\def\dots{.% this dot may be kerned with previous character and it
+ \ifmmode % protects the \dots macro in \halign data
+ \mathinner{\ldotp\ldotp}%
+ \else
+ \ifdim\fontdimen3\font=0pt % may be non-proporcional font
+ ..%
+ \else
+ \kern.5\fontdimen2\font
+ .\kern.5\fontdimen2\font
+ .\kern.5\fontdimen2\font
+ \fi\fi
+}
+
+\endinput
+
diff --git a/macros/generic/ofs/tex/ofstest.tex b/macros/generic/ofs/tex/ofstest.tex
new file mode 100644
index 0000000000..e3a38d3240
--- /dev/null
+++ b/macros/generic/ofs/tex/ofstest.tex
@@ -0,0 +1,811 @@
+%% This file does many tests with fonts installed in OFS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% February 2004 Petr Olsak
+% April 2004
+
+% You can print probe-texts or tables of fonts of choosen families.
+% The interactive mode is activated if you type on command prompt:
+
+% Usage: tex ofstest [file1, file2, ...]
+% or: csplain ofstest [file1, file2, ...]
+% or: tex ofstest
+% * <enter>
+%
+% and follow the notices on the screen.
+%
+% You can \input this macro in your document.
+% The interactive mode is disabled automatically in this situation. Example:
+%
+% \input ofstest [a35]
+% \cfam Times \tables \text \mixed
+% \cfam Courier \tables \text \mixed
+% \end
+
+{\nopagenumbers} % usage: tex ofstest [a35] or csplain ofstest [a35]
+
+\ifx\setfonts\undefined \input ofs \relax \fi
+
+\ifx\protectreading\undefined
+ \errmessage{Sorry, I need the OFS version <May 2004> at least.}
+\endinput \fi
+
+\let\displaymessage=\wlog
+
+\loadingenc=1
+
+\let\stmath=\relax
+
+\ifx\chyph\undefined
+ \def\textlang{en}
+ \def\fotenc{8t}
+\else
+ \chyph
+ \def\textlang{cz}
+ \def\fotenc{8z}
+\fi
+
+\fontdef\rmfont [CMRoman-rm/10]
+\fontdef\itfont [CMRoman-it/10]
+\fontdef\boldfont [CMRoman-bf/10]
+\fontdef\nttfont [CMTypewriter-rm/10]
+\fontdef\lttfont [Courier-rm/7pt]
+
+\parindent=10pt
+\emergencystretch=3em
+\advance\hoffset by22mm
+
+\hsize=143mm
+
+\lineskiplimit=-5pt
+
+\headline={\lttfont \spaceskip=0pt
+ OFS test \csname datum:\textlang\endcsname \ \dotfill \ \the\pageno}
+\footline={}
+
+%%% Main loop of the program
+
+\def\runtest {\versiontext \testinteractive \readfamily \onestep}
+
+\def\testinteractive{\ifnum\inputlineno=0 \else \let\readfamily=\relax
+ \let\onestep=\relax \let\trydeclare=\relax \fi}
+
+\def\onestep {
+ \message{^^J*** What to do with family \thisfamily\space?^^J
+ \space\space\space (type command or \string\help): }
+ \read-1 to \command
+ \if \relax \expandafter\expandafter\expandafter \noexpand
+ \expandafter \readfirsttoken \command:\end
+ \else \expandafter \def\expandafter \command
+ \expandafter {\expandafter \cfam \command}
+ \fi
+ \ifx \thisfamily\astik
+ \def\loopcommands{}
+ \expandafter \pickuploopcommands \command ^^X
+ \ifx \loopcommands\empty \else
+ \bgroup
+ \def\ofslistfamily ##1{%
+ \def\tmpa ####1!.####2/{\def\thisfamily{####2}}%
+ \expandafter\tmpa\string##1/%
+ \loopcommands\relax
+ }%
+ \def\ofslisttext ##1{\if^^J\readfirsttoken ##1:\end
+ \edef\fromfile{\readothertokens ##1:\end}%
+ \else \edef\fromfile{##1}\fi}
+ \ofslistfamilies
+ \egroup
+ \fi
+ \fi
+ \command \relax
+ \onestep
+}
+\long\def\pickuploopcommands #1#2^^X{%
+ \ifx \list #1 \addloopcommand #1 \fi
+ \ifx \table #1 \addloopcommand #1 \fi
+ \ifx \text #1 \addloopcommand #1 \fi
+ \ifx \mixed #1 \addloopcommand #1 \fi
+ \ifx \math #1 \addloopcommand #1 \fi
+ \ifx \abet #1 \addloopcommand #1 \fi
+ \ifx \chars #1 \addloopcommand #1 \fi
+ \ifx \all #1 \addloopcommand #1 \fi
+ \def\tmpa{#2}
+ \let\next=\pickuploopcommands
+ \ifx \tmpa\empty \def\next^^X{}\fi
+ \ifx \tmpa\space \def\next ##1^^X{}\fi
+ \next #2^^X
+}
+\def\addloopcommand #1{\expandafter\def
+ \expandafter\loopcommands \expandafter{\loopcommands#1}}
+
+%%% \cfam
+
+\def\thisfamily{*}
+
+\def\readfamily {\message{^^J*** Type family name without brackets (or ? or *): }
+ \read-1 to \response
+ \expandafter \testfirsttoken \response ^^X
+ \if \noexpand\nextchar \relax \let\nextread=\readfamily
+ \ifx\nextchar\par \showfonts \hint \fi
+ \expandafter \response \expandafter \relax
+ \else \expandafter \reset \response \to\thisfamily
+ \expandafter \testfamily \fi
+ \nextread
+}
+\def\testfamily {
+ \knownfam \thisfamily? \iftrue \let\nextread=\relax
+ \else \ifx\thisfamily\onequestion \showfonts \hint
+ \let\nextread=\readfamily
+ \else \ifx\thisfamily\astik
+ \let\nextread=\relax
+ \else \message{ ... Sorry, unknown family.^^J
+ ... use exactly upper/lower letters^^J} \hint
+ \let\nextread=\readfamily
+ \fi \fi \fi
+}
+\def\nreadfamily #1 {\edef\tmpa{#1}%
+ \ifx\tmpa\onequestion \help
+ \else
+ \knownfam #1? \iftrue \edef\thisfamily{#1}
+ \else \ifx\tmpa\astik \edef\thisfamily{#1}\else
+ \message{ ... Sorry, unknown family "#1".^^J}\fi \fi \fi
+}
+\def\cfam{\let\interact=\readfamily \let\nointeract=\nreadfamily
+ \futurelet \nextchar \donextchar}
+
+\def\donextchar {\if \noexpand\nextchar \relax
+ \expandafter \interact
+ \else \expandafter \nointeract \fi}
+
+\def\reset #1 \to #2{\def#2{#1}}
+
+\def\testfirsttoken{\futurelet \nextchar \ignorerest}
+\long\def\ignorerest #1^^X{}
+
+\let\famlist=\showfonts
+
+\def\onequestion{?} \def\astik{*}
+\def\hint{\immediate\write16
+ { ... you can read more declaration files by \string\decl}}
+
+%%% Help texts
+
+\def\help {\message{commands:^^J
+ \noexpand\list ..... List all variants of the family \thisfamily^^J
+ \string \table(s) . Tables of all variants of the family \thisfamily^^J
+ \noexpand\abet ..... One line alphabet/digits sample for each variant^^J
+ \noexpand\chars .... Print list of available characters including TeX sequences^^J
+ \noexpand\text ..... One paragraph in all variants of the family \thisfamily^^J
+ \noexpand\mixed .... Paragraph with fonts combined from
+ \string\rm, \string\bf, \string\it \space and \string\bi^^J
+ \noexpand\math ..... Mathematics text combined by fonts from \thisfamily^^J
+ \noexpand\all ...... The same as \noexpand\list \noexpand\table \noexpand\abet
+ \noexpand\chars \noexpand\text \noexpand\mixed \noexpand\math^^J
+ \noexpand\setsize .. Set size of fonts (current size is "\fosize")^^J
+ \noexpand\cfam ..... Change current family^^J
+ FamName ... The same as \noexpand\cfam FamName^^J
+ \noexpand\rem ...... Remove current family or family given in parameter from \string\famlist^^J
+ -----------------------------^^J
+ \noexpand\famlist .. Show list of all declared families (the same as \string\showfonts)^^J
+ \noexpand\decl ..... Input next declaration file^^J
+ \noexpand\remdecl .. Remove all families of given declaration file from famlist^^J
+ \noexpand\help ..... This text^^J
+ \noexpand\morehelp . Show more help information^^J
+ \noexpand\fontusage \space The help screen of the OFS^^J
+ \noexpand\end ...... End of this session
+}}
+\def\morehelp {\message{
+ You can type the group of commands on the one "command" prompt.^^J
+ For example: \noexpand\list\noexpand\tables\noexpand\text \end^^J
+ -- program lists all variants, prints tables and texts and exits.^^J
+ ---------------------------^^J
+ If the family is choosen as * then the commands^^J
+ \string\list, \string\table, \string\abet, \string\text,
+ \string\mixed, \string\math^^J
+ will be applied to all families actually declared. Others^^J
+ commands will be run only once after the loop over families is done.^^J
+ ---------------------------^^J
+ The commands
+ \string\cfam, \string\setsize, \string\decl, \string\rem, \string\remdecl^^J
+ can be typed alone (interactive dialog will be started)^^J
+ OR with one parameter separed by space or endline (no dialog is used)^^J
+ Example: \noexpand\cfam Times \noexpand\setsize 12pt \string\table^^J
+ ---------------------------^^J
+ You can type other TeX commands on the "command" prompt.^^J
+ Examples: \string\def\string\fotenc{8t} (another font encoding,
+ current: "\fotenc")^^J
+ \space\space \baselineskip 11pt (another baselineskip,
+ current: "\the\baselineskip")^^J
+ \space\space \string\def\string\fomenc{CM} (another math enconding,
+ current: "\fomenc")^^J
+ \space\space \string\def\string\textlang{en} (another language of samples,
+ current: "\textlang")^^J
+ \space\space \noexpand\notables (the \noexpand\all command will not
+ print tables)
+}}
+\def\versiontext {\message{This is ofstest macro, version <May. 2004>}}
+
+\def\notables {\let\table=\relax}
+
+%%% \list
+
+\def\list {\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \gdef\newmodifylist{}
+ \message{^^J [\thisfamily/\fosize], encoding: \fotenc, variants:}
+ {\let\modifyenc=\ofsaddenctolist \def\modifyread ##1;{}\scanvariants \listvariant }
+ \expandafter \ifx \csname ffe?\thisfamily:\endcsname \relax
+ \immediate\write16 { \space\space All font encodings are allowed.
+ \ifx\eenc\empty\else Extra: \eenc.\fi}
+ \else
+ \immediate\write16 { \space\space Registered font encodings:
+ \csname ffe?\thisfamily:\endcsname.
+ \ifx\eenc\empty\else Extra: \eenc.\fi}
+ \fi
+ \ifx\newmodifylist\empty \else
+ \immediate\write16 { \space\space Modifications: { \modlist}}
+ \fi
+ \else \warnaboutskip {list}
+ \fi \fi
+}
+\def\listvariant {%
+ \calculatemetricfile \fontfile\fosize
+ \if|\eenc|\else
+ {\edef\fotenc{\eenc}
+ \calculatemetricfile \fontfile \fosize
+ \xdef\efontfile{\metricfile}}
+ \fi
+ \immediate\write16{ \space\space
+ \texvariant\space (\fontvariant) \space\space\space\metricfile\fosize
+ \if|\eenc|\else \space + \efontfile\fosize\fi}
+}
+
+\def\scanvariants #1{%
+ {\let\loadtextfam=\testloadtextfam
+ \let\newvariant=\testnewvariant
+ \let\addtoenc=\ofsaddenctolist
+ \def\runvariant{%
+ \expandafter \ifx \csname reg!.\fontfile\endcsname \empty
+ \else #1\fi}
+ \csname fam!.\thisfamily\endcsname
+ \expandafter \gdef\expandafter \newmodifylist\expandafter {\newmodifylist}%
+ \escapechar=-1
+ \expandafter \savelist \meaning \newmodifylist^^X}
+}
+\def\testloadtextfam #1;#2;#3;#4;#5;{\tryloadenc{#5}%
+ \if|#1|\else \savevariant {}#1;\rm {#5} \runvariant \fi
+ \if|#2|\else \savevariant {Bold}#2;\bf {#5} \runvariant \fi
+ \if|#3|\else \savevariant {Italic}#3;\it {#5} \runvariant \fi
+ \if|#4|\else \savevariant {BoldItalic}#4;\bi {#5} \runvariant \fi
+}
+\def\testnewvariant #1#2#3(#4) #5;#6;{%
+ \def\texvariant{\string #2}\def\fontvariant{#4}%
+ \def\fontfile{#5}\edef\eenc{#6}%
+ \runvariant}
+
+\let\oriloadtextfam=\loadtextfam
+\let\orinewvariant=\newvariant
+
+\def\savevariant #1#2#3;#4#5{\def\texvariant{\string #4}\xdef\eenc{#5}%
+ \if(#2 \savethisvariant #2#3;\else \savethisvariant (#1) #2#3;\fi}
+\def\savethisvariant (#1) #2;{\def\fontvariant{#1}\def\fontfile{#2}}
+
+\def\savelist #1->#2^^X{\gdef\modlist{#2}}
+
+\def\warnaboutskip #1{\wlog {The \noexpand\fotenc "\fotenc"
+ is unregistered in \thisfamily.
+ \expandafter\noexpand\csname#1\endcsname skipped.}}
+
+%%% \setsize
+
+\def\isetsize {\message{%
+ *** Type the new font size (in OFS fortmat)^^J
+ \space\space\space (Examples: "12", "12pt", "4mm", "scaled1200", "mag1.2"): }
+ \read -1 to\response
+ \expandafter \ifx \response\par \else
+ \expandafter \reset \response \to\response
+ \expandafter \setfosize \expandafter \fosize \response:\fi}
+
+\def\setsize {\let\interact=\isetsize
+ \def\nointeract ##1 {\setfosize\fosize ##1:}
+ \futurelet \nextchar \donextchar}
+
+%%% \decl
+
+\def\declare {\message{^^J*** Type declaration file name (allfonts for example): }
+ \read-1 to \infile
+ \input \infile
+}
+\def\ndeclare #1 {\input #1
+ \ifx \thisfamily\onequestion \expandafter \readfamily \fi
+}
+\def\decl {\let\interact=\declare \let\nointeract=\ndeclare
+ \futurelet \nextchar \donextchar}
+
+\let\trydeclare=\declare
+
+\def\rundeclare {\versiontext \testinteractive \trydeclare \readfamily \onestep}
+
+
+%%% \rem
+
+\def\removecode {\ifx\removefamily\astik
+ \message{ ... Sorry, you cannot remove * (all) families.^^J
+ ... use \noexpand\cfam to declare the family name^^J
+ ... use \noexpand\undecl to remove more families.^^J
+ ... use \noexpand\remove FamilyName to remove FamilyName}
+ \else \doremovefam \fi
+}
+\def\doremovefam {
+ \knownfam \removefamily? \iftrue
+ \edef\act{\def\noexpand\tmpa
+ ####1\noexpand\ofslistfamily
+ \expandafter\noexpand\csname fam!.\removefamily\endcsname
+ ####2^^X{\gdef\noexpand\ofslistfamilies{####1####2}}}\act
+ \expandafter \tmpa\ofslistfamilies^^X%
+ \global \expandafter \let \csname fam!.\removefamily\endcsname = \relax
+ \message{ ... \removefamily\space is removed from declaration famlist}
+ \ifx\removefamily\thisfamily \def\thisfamily{*} \fi
+ \ifx\removefamily\savefamily \def\savefamily{*} \fi
+ \else
+ \message{ ... Sorry, the family \removefamily\space is not declared^^J}
+ \fi
+}
+\def\rem {\def\interact{\edef\removefamily{\thisfamily}\removecode}
+ \def\nointeract ##1 {\def\removefamily{##1}\removecode}
+ \futurelet \nextchar \donextchar
+}
+
+
+%%% \remdecl
+
+\def\remdeclcode {%
+ \ifx\response\defaultstext \def\thisdecl{defaults:}
+ \else \edef\thisdecl{\response.tex:}
+ \fi
+ \bgroup
+ \def\ofslisttext ##1##2\ofslisttext{\if^^J\readfirsttoken ##1:\end
+ \edef\tmpa{\readothertokens ##1:\end}%
+ \else \edef\tmpa{##1}\fi
+ \ifx\tmpa\thisdecl ##2\def\ofslisttext ####1####2^^X{}\fi
+ \ofslisttext}
+ \def\ofslistfamily ##1{\def\tmpa ####1!.####2/{####2}%
+ \edef\removefamily{\expandafter\tmpa\string ##1/}%
+ \doremovefam}
+ \expandafter \ofslistfamilies \expandafter \ofslisttext
+ \expandafter {\thisdecl}%
+ \message { ... Sorry, the \thisdecl\space is not present
+ in declaration list}\ofslisttext{}^^X%
+ \egroup
+}
+\def\defaultstext{defaults}
+
+\def\iremdeclcode {\message{%
+ *** What part of famlist should be removed ?^^J
+ \space\space\space (type "defaults" or declaration file name without ".tex"): }
+ \read-1 to\response
+ \expandafter \ifx \response\par \else
+ \expandafter \reset \response \to\response
+ \remdeclcode
+ \fi
+}
+\def\remdecl {\let\interact=\iremdeclcode
+ \def\nointeract ##1 {\def\response{##1}\remdeclcode}
+ \futurelet \nextchar \donextchar
+}
+
+%%% \text
+
+\def\text{\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \expandafter \ifx \csname ffe?\thisfamily:\endcsname \relax
+ \warnaboutnontext \text
+ \else
+ \message{^^J} \message{ [\thisfamily/\fosize]:}
+ \scanvariants \runtext
+ \fi
+ \else \warnaboutskip {text}
+ \fi\fi
+}
+\def\runtext {%
+ \message{\texvariant\space text}
+ \calculatemetricfile \fontfile \fosize
+ {\let\loadtextfam=\oriloadtextfam
+ \let\newvariant=\orinewvariant
+ \setfonts [\thisfamily/]
+ \font\ttfont=cmtt10 \fosize\relax
+ \bgroup \let\string=\egroup \texvariant
+ {\escapechar=-1 \xdef\tmp{\texvariant}}
+ \fontdef\fn [\thisfamily-\tmp/!] \fn
+ \nofontmessages
+ \startparagraph 1 \indent \csname text:\textlang\endcsname
+ \medskip\penalty-200}}
+
+\def\actualfont #1{{\def\texvariant{rm} \xdef\act{%
+ \noexpand\fontdef \noexpand #1[\thisfamily-\texvariant/!]}}
+ \act #1}
+
+\def\startparagraph #1{\par
+ \ifdim\fontdimen3\the\font=0pt \raggedright \fi
+ \ifdim\fontdimen2\the\font=0pt \rightskip=0pt plus \hsize\fi
+ \noindent\llap {\lttfont \vtop{\hsize=5cm
+ \noindent\hfill\thisfamily
+ \if1#1\space\texvariant\fi
+ \if2#1\space(\fomenc)\break \null\hfill
+ \mathsizes \vskip-\baselineskip \else
+ \if3#1\else \break \null\hfill \thesize/\theskip
+ \vskip-\baselineskip\fi\fi
+ }\kern12pt}\ignorespaces
+}
+\def\theskip{\the\baselineskip}
+\def\thesize{\expandafter\ignoreat\fosize:}
+\def\ignoreat at#1:{#1}
+\def\mathsizes{[%
+ \expandafter\ignoreat\textfosize:/%
+ \expandafter\ignoreat\scriptfosize:/%
+ \expandafter\ignoreat\scriptscriptfosize:]}
+
+\def\famplusvariant{\thisfamily\if|\fontvariant|\else-\fontvariant\fi}
+
+%%% \abet
+
+\def\abet {\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \removelastskip
+ \message{^^J} \message{ [\thisfamily/\fosize]:}
+ \noindent{\lttfont [\thisfamily/\thesize] (enc: \fotenc),
+ declared in
+ \ifx\fromfile\undefined \findfromfile \else \fromfile\fi}\par
+ \scanvariants \runabet
+ \medskip \penalty-200
+ \else \warnaboutskip {abet}
+ \fi\fi
+}
+\def\runabet {%
+ \message{\texvariant\space abet}
+ \calculatemetricfile \fontfile \fosize
+ {{\escapechar=-1 \xdef\tmp{\texvariant}}
+ \fontdef\fn [\thisfamily-\tmp/!] \fn
+ \hbox{\llap{\lttfont (\fontvariant) \texvariant\kern12pt}%
+ \csname abet:\textlang\endcsname}
+}}
+\def\findfromfile {\bgroup
+ \def\fromfile{??}%
+ \def\ofslisttext ##1{\if^^J\readfirsttoken ##1:\end
+ \edef\fromfile{\readothertokens ##1:\end}%
+ \else \edef\fromfile{##1}\fi}%
+ \def\ofslistfamily ##1{\expandafter
+ \ifx \csname fam!.\thisfamily\endcsname ##1%
+ \def\tmpa####1^^X{}%
+ \expandafter \tmpa
+ \fi}%
+ \ofslistfamilies^^X\fromfile
+ \egroup
+}
+\def\all {\list \abet \chars \table \text \mixed \math \vfil\break}
+
+\def\chars {\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \expandafter \ifx \csname ffe?\thisfamily:\endcsname \relax
+ \warnaboutnontext \chars
+ \else
+ \message{^^J} \message{ [\thisfamily/]: \string\chars}
+ \bgroup
+ \setfonts[\thisfamily-rm/]
+ \let\characterdef=\listcharacter
+ \let\characterdel=\characternodef
+ \let\accentdef=\listaccent
+ \let\accentdel=\accentnodef
+ \def\modifydef##1;##2{}
+ \def\protectreading##1 {}
+ \let\printcharacterwarn=\boxik
+ \let\printaccentwarn=\boxikdbl
+ \raggedright \rightskip=0pt plus 10em
+ \noindent \llap{\lttfont \thisfamily~(\fotenc)\kern12pt}%
+ \expandafter \let\csname enc:ofs-\fotenc\endcsname =\relax
+ {\def\par{}\endlinechar=-1 \input ofs-\fotenc.tex }
+ \if |\extraenc|\else \par
+ \noindent \llap{\lttfont Extra metric~(\extraenc)\kern12pt}%
+ \expandafter \let\csname enc:ofs-\extraenc\endcsname =\relax
+ {\def\par{}\endlinechar=-1 \input ofs-\extraenc.tex }
+ \fi
+ \ifx\newmodifylist\empty \else \par
+ {\escapechar=-1 \expandafter \savelist \meaning \newmodifylist^^X}
+ \noindent \llap{\lttfont Modifications\kern12pt}%
+ {\lttfont\char`\{\ \modlist\char`\}} \newmodifylist
+ \fi
+ \medskip \penalty-200
+ \egroup \fi
+ \else \warnaboutskip {chars}
+ \fi \fi
+}
+\def\listcharacter #1#2#3 {\def\tmpa{#2#3}%
+% \message{\string#1}%
+ \ifx\tmpa\astik \hbox{\lttfont \string#1:}~{\print#1{}{}}\spc \fi
+ \ifx\tmpa\fotenc \hbox{\lttfont \string#1:}~{\print#1{}{}}\spc \fi
+ \ifx\tmpa\extraenc \hbox{\lttfont \string#1:}~{\print#1{}{}}\spc \fi
+ \def\tmpa{tmpa}\futurelet \tmpb \docharacterdef}
+\def\print #1{{\savetokenname#1\tmpb\global\let\tmpb=\tmpb}\printcharacter{\tmpb}}
+\def\listaccent #1#2#3#4 {\def\tmpa{#3#4}%
+% \message{\string#1 \string#2}%
+ \ifx\tmpa\astik \hbox{\lttfont \string#1~\string#2:}~{#1 #2{}{}}\spc \fi
+ \ifx\tmpa\fotenc \hbox{\lttfont \string#1~\string#2:}~{#1 #2{}{}}\spc \fi
+ \ifx\tmpa\extraenc \hbox{\lttfont \string#1~\string#2:}~{#1 #2{}{}}\spc \fi
+ \def\tmpa{tmpa}\futurelet \tmpb \docharacterdef}
+\def\boxik#1{\lower1.7pt\vbox{\hrule\hbox{\vrule height6pt depth2pt
+ \kern.2em\lttfont?\kern.2em\vrule}\hrule}}
+\def\boxikdbl#1#2{\boxik.}
+\def\spc{\hskip.8em\relax}
+
+%%% \mixed \math
+
+\def\mixed{\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \expandafter \ifx \csname ffe?\thisfamily:\endcsname \relax
+ \warnaboutnontext \mixed
+ \else
+ \message{^^J} \message{ [\thisfamily/\fosize]: mixed text}
+ {\setfonts [\thisfamily/]
+ \nofontmessages
+ \startparagraph 0 \noindent
+ \csname mix:\textlang\endcsname
+ \medskip\penalty-200}
+ \fi
+ \else \warnaboutskip {mixed}
+ \fi \fi
+}
+\def\math{\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \expandafter \ifx \csname ffe?\thisfamily:\endcsname \relax
+ \warnaboutnontext \math
+ \else
+ {\setfonts [\thisfamily/]
+ \def\mathfonts{\defaultmathfonts}
+ \def\mathchars{\defaultmathchars \let\mathchars=\relax}
+ \stmath \setmath[//] \lineskiplimit=-.5pt
+ \message{^^J} \message{ [\thisfamily/\fosize]
+ (\string\fomenc: \fomenc) \mathsizes: math text}
+ \nofontmessages
+ \startparagraph 2 \noindent
+ \ifx\vecfam\undefined \else \def\bi{\fam\vecfam}\fi
+ \ifx\msbmfam\undefined \def\N{{\bf N}}\else \def\N{{\fam\msbmfam N}}\fi
+ \ifx\varmathbb\undefined \else \def\N{\varmathbb{N}}\fi
+ \delimiterfactor=950
+ \csname math:\textlang\endcsname
+ \medskip\penalty-200}
+ \fi
+ \else \warnaboutskip {math}
+ \fi \fi
+}
+\def\psenc{PS}
+
+\def\warnaboutnontext #1{%
+ \message{ [\thisfamily/] is probably non text font, \string#1 skipped.^^J
+ \space\space (The family has no registered text encodings.)}%
+}
+
+
+%%% \table
+
+\def\table{\ifx\thisfamily\astik \else
+ \registeredfam \thisfamily? \iftrue
+ \message{^^J} \message{ [\thisfamily/\fosize]:}
+ \scanvariants \runtable
+ \else \warnaboutskip {table}
+ \fi \fi
+}
+\let\tables=\table
+
+\def\runtable {\onetable
+ \if |\eenc|\else {\edef\fotenc{\eenc}\onetable} \fi}
+
+\def\onetable{
+ \calculatemetricfile \fontfile \fosize
+ \vfil\break
+ \noindent
+ {\rmfont Table of {\boldfont \famplusvariant},
+ \hfil\break E\ifx\fotenc\eenc xtra e\fi ncoding: \fotenc,
+ fontfile: {\nttfont\metricfile\fosize},\hfil\break
+ command: {\nttfont \string\selectfont [\thisfamily/\fosize]\texvariant
+ \ifx\fotenc\eenc \string\setextrafont\fi}}\par
+ \message{\texvariant\space \ifx\fotenc\eenc ex-\fi table}
+ {\font \fn=\metricfile\fosize\relax \fn \knuthstable}
+ \vfil\break
+}
+
+%% Z Knuthova testfont:
+
+\newcount\mm \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+\def\oct#1{\hbox{\rmfont'{}\kern-.2em\itfont#1\/\kern.05em}} % octal constant
+\def\hexx#1{\hbox{\nttfont"#1}} % hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \mm=\n \divide\mm by 64 \xdef\0{\the\mm}%
+ \multiply\mm by-64 \advance\mm by\n \divide\mm by 8 \xdef\1{\the\mm}}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}} % \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hexx{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\newif\ifskipping
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \mm=\n \divide\mm 16 \chardef\next=\mm
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \mm=\1 \advance\mm 1 \xdef\1{\the\mm}
+ \chartline \evenline}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\knuthstable{$$\global\n=0
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hexx 8&&\hexx 9&&\hexx A&&\hexx B&
+ &\hexx C&&\hexx D&&\hexx E&&\hexx F&\cr\egroup$$\par}
+\def\:{\setbox0=\hbox{\char\n}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
+
+%%% texts in various languages
+
+\def\langdef #1 {\expandafter\def \csname#1\endcsname}
+
+\characternodef \textbullet * 0
+\characternodef \ellipsis * 0
+\characternodef \fullbar * 0
+\characternodef \brokenbar * 0
+\characternodef \onequarter * 0
+\characternodef \onehalf * 0
+\characternodef \threequarters * 0
+\characternodef \trademark * 0
+\characternodef \registered * 0
+\characternodef \ligct * 0
+\characternodef \ligst * 0
+\characternodef \ligft * 0
+\characternodef \longs * 0
+\characternodef \longst * 0
+\characternodef \sterling * 0
+\characternodef \euro * 0
+\characternodef \franc * 0
+\characternodef \cent * 0
+\characternodef \yen * 0
+\characternodef \degree * 0
+\characternodef \vardigits * 0
+\characternodef \textbraceleft * 0
+\characternodef \textbraceright * 0
+
+
+\langdef datum:cz {\the\day.~\the\month. \the\year}
+
+\langdef datum:en {\the\year/\the\month/\the\day}
+
+\langdef text:cz {%
+ Tento text je naps\'an p\'ismem \famplusvariant \space
+ za pou\v zit\'i \TeX{}ov\-sk\'e metriky
+ {\ttfont \fontname\fn}. V\v s\'imejme si m\'en\v e
+ obvykl\'ych slov, jako je slovo \v s\v tast\-n\'y (p\'ismeno \v t uprost\v red slova),
+ nebo t\v reba slovensk\'e ko\v lko. V\v e\v rme, \v ze v\'ysledn\'y text p\r ujde nejen
+ p\v re\v c\'ist, ale bude i typograficky pokud mo\v zno v~po\v r\'adku. Tak\'e je t\v reba
+ \clqq sledovat chov\'an\'i\crqq{} na\v sich \clqq{}uvozovek\crqq. A~co takhle \frqq
+ francouzsk\'e uvozovky po \v cesk\'em zp\r usobu\flqq?
+ \par
+ 0123456789,
+ \knownchar\vardigits? \iftrue{\vardigits 0123456789}, \fi
+ ligatury: fi, fl, ffi, ffl, --, ---,
+ kerny: Tel, T\v el, T\'el, VLTAVA.
+
+ Znaky: \dag, \ddag, \textbullet,
+ \P, \ellipsis,
+ \textbraceleft, \fullbar, \brokenbar, \textbraceright,
+ \onequarter, \onehalf, \threequarters,
+ \trademark, \copyright, \registered,
+ \ligct, \ligst, \ligft, \longs, \longst,
+ \S, \sterling, \euro, \franc, \cent,
+ \yen, \degree C.
+ \par\nobreak\medskip
+ {\spaceskip=.3em minus .2em \relax
+ \'A \'a \"A \"a \v C \v c \v D \v d \'E \'e \v E \v e \'I \'i \'L \'l \v L \v l \v N \v n \'O \'o \^O \^o \"O \"o \v R \v r \'R \'r
+ \v S \v s \v T \v t \'U \'u \r U \r u \"U~\"u~\'Y~\'y~\v Z~\v z.}
+}
+\langdef text:en {%
+ This text is written by the font \famplusvariant.
+ The \TeX{} font metric {\ttfont \fontname\fn} is used here.
+ Notice how this font looks in the current paragraph.
+ We try to write somethink in ``english quotes''.
+ Digits: 0123456789, {\vardigits 0123456789}
+ ligatures: fi, fl, ffi, ffl, --, ---,
+ kerning: Te, Ti, AVA.
+
+ Characters: \dag, \ddag, \textbullet,
+ \P, \ellipsis,
+ \textbraceleft, \fullbar, \brokenbar, \textbraceright,
+ \onequarter, \onehalf, \threequarters,
+ \trademark, \copyright, \registered,
+ \ligct, \ligst, \ligft, \longs, \longst,
+ \S, \pound, \euro, \franc, \cent,
+ \yen, \degree C.
+}
+\langdef abet:cz {%
+ ABCDEOPQRSVWXYZ 0123456789 \&\%?!-\v Z\v z\v s\v c\v e\'a\'e\v t\r u,
+ acbdefghijklmnopqrstuvwxyz%
+}
+\langdef abet:en {%
+ ABCDEOPQRSVWXYZ 0123456789 \&\%?!- ``--'' ---:
+ acbdefghijklmnopqrstuvwxyz%
+}
+\langdef mix:cz {%
+ {\bf P\v r\'iklad.} Nyn\'i zjist\'ime, zda je mo\v zn\'e kombinovat z\'akladn\'i \v rez s~tu\v cn\'ym
+ (resp. polotu\v cn\'ym) \v rezem a s~kurz\'ivou
+ v~rodin\v e p\'isma {\it\thisfamily}. Pro vyzna\v cov\'an\'i je vhodn\'e pou\v z\'it {\it kurz\'ivu\/} a
+ u\v z m\'en\v e {\bf tu\v cnou variantu} a prakticky v\r ubec se nehod\'i pou\v z\'it
+ {\bi tu\v cnou a sklon\v enou variantu}.
+ Zcela nevhodn\'e je vyzna\v covat podtr\v zen\'im nebo prostrk\'an\'im.
+ To lid\'e s~dobr\'ym vychov\'an\'im ned\v elaj\'i.
+ {\it Vyzna\v cen\'i m\'a b\'yt takov\'e, aby p\v ri \v cten\'i bylo vyzna\v cen\'e m\'isto z\v reteln\v e
+ odli\v sn\'e, ale p\v ri pohledu z~d\'alky z\r ustal text odstavce stejnom\v ern\v e \v sed\'y.}
+ Tomu nejl\'epe vyhovuje kurz\'iva, ale ne ve v\v sech rodin\'ach p\'isma je zda\v ril\'a
+ kuz\'iva k~dispozici.
+}
+\langdef mix:en {%
+ {\bf Example.} We try to combine the normal variant with the bold
+ (semibold) and italic variants in the font family {\it\thisfamily}.
+ The best selection to mark the text is the {\it italic}, not so good
+ one is the {\bf bold variant} and somewhat unsuitable
+ one is the {\bi bold italic variant}. The marking of the text by
+ underline or by letter spacing is totally unsiutable.
+ {\it The marked text have to be good distinguised while reading
+ but if you look at the paragraph from more distance the best is to
+ view the uniform-gray area.} The best solution of this task is to
+ use the italic, if this variant is ready in used font family.
+}
+\langdef math:cz {%
+ {\bf Pozn\'amka.} Funkci Gamma v bod\v e $x$ zna\v c\'ime $\Gamma(x)$ a
+ po\v c\'it\'ame ji podle vzorce:
+ $$ \Gamma(x) = \int_0^\infty e^{-t} t^{x-1} {\rm d}t \quad (x>0).$$
+ Speci\'aln\v e pro $x=n\in\N$ je $\Gamma(n) = (n-1)\,!$ a pro
+ $\alpha\in(0,1)$ je
+ $$ \Gamma(\alpha)\,\Gamma(1-\alpha) = {\pi \over \sin \pi \alpha}.$$
+ {\bf Definice.} Nech\v t $\bi A$ je \v ctvercov\'a matice s~$n$ sloupci a
+ \v r\'adky a s~prvky $a_{i,j}$. Pak \v c\'islo
+ $$ \mathop{\rm det}{\bi A} = \left|{\bi A}\right| =
+ \sum_{\Pi=(j_1,j_2,\ldots,j_n)} \mathop{\rm sgn}\Pi\cdot
+ a_{1,j_1}\,a_{2,j_2}\cdots a_{n,j_n} $$
+ naz\'yv\'ame {\it determinantem\/} matice $\bi A$.
+}
+\langdef math:en {%
+ {\bf Notice.} The value of the function Gamma in the real
+ number~$x$ can be calculaded by:
+ $$ \Gamma(x) = \int_0^\infty e^{-t} t^{x-1} {\rm d}t \quad (x>0).$$
+ Especially, for $n\in\N$ is $\Gamma(n) = (n-1)\,!$ and for
+ $\alpha\in(0,1)$ is
+ $$ \Gamma(\alpha)\,\Gamma(1-\alpha) = {\pi \over \sin \pi \alpha}.$$
+ {\bf Definition.} Let $\bi A$ is a square matrix with $n$ columns
+ and rows and with elements $a_{i,j}$. The number
+ $$ \mathop{\rm det}{\bi A} = \left|{\bi A}\right| =
+ \sum_{\Pi=(j_1,j_2,\ldots,j_n)} \mathop{\rm sgn}\Pi\cdot
+ a_{1,j_1}\,a_{2,j_2}\cdots a_{n,j_n} $$
+ is called {\it determinant\/} of the matrix $\bi A$.
+}
+
+%%% Brackets after \input ofstest
+
+\def\processOFSoption #1,{\if ^^X#1\let\next=\runtest
+ \else \input #1 \fi \next}
+\def\testOFSoptions {\ifx [\tmpa \expandafter \readOFSoptions
+ \else \expandafter \rundeclare \fi}
+
+\endOFSmacro
+
diff --git a/macros/generic/olsak-misc/README b/macros/generic/olsak-misc/README
new file mode 100644
index 0000000000..821a7b7d40
--- /dev/null
+++ b/macros/generic/olsak-misc/README
@@ -0,0 +1,30 @@
+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
+<May 2019> ... qrcode: bug fixed
+
+License:
+-------
+All files mentioned here are in Public domain.
+
diff --git a/macros/generic/olsak-misc/booklet.tex b/macros/generic/olsak-misc/booklet.tex
new file mode 100644
index 0000000000..1afeede5d9
--- /dev/null
+++ b/macros/generic/olsak-misc/booklet.tex
@@ -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
diff --git a/macros/generic/olsak-misc/cnv-pu.tex b/macros/generic/olsak-misc/cnv-pu.tex
new file mode 100644
index 0000000000..5eae55609c
--- /dev/null
+++ b/macros/generic/olsak-misc/cnv-pu.tex
@@ -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@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
+
+
+
+
+
+
+
diff --git a/macros/generic/olsak-misc/cnv-word.tex b/macros/generic/olsak-misc/cnv-word.tex
new file mode 100644
index 0000000000..5a8f3e13a5
--- /dev/null
+++ b/macros/generic/olsak-misc/cnv-word.tex
@@ -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
+
+
+
+
+
+
+
+
+
diff --git a/macros/generic/olsak-misc/cnv.tex b/macros/generic/olsak-misc/cnv.tex
new file mode 100644
index 0000000000..006cfabf14
--- /dev/null
+++ b/macros/generic/olsak-misc/cnv.tex
@@ -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>}
+
+=======================================================
diff --git a/macros/generic/olsak-misc/eparam.tex b/macros/generic/olsak-misc/eparam.tex
new file mode 100644
index 0000000000..8c7a22664d
--- /dev/null
+++ b/macros/generic/olsak-misc/eparam.tex
@@ -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
diff --git a/macros/generic/olsak-misc/fun-coffee.tex b/macros/generic/olsak-misc/fun-coffee.tex
new file mode 100644
index 0000000000..0bdd053c2d
--- /dev/null
+++ b/macros/generic/olsak-misc/fun-coffee.tex
@@ -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
+}}
diff --git a/macros/generic/olsak-misc/openclose.tex b/macros/generic/olsak-misc/openclose.tex
new file mode 100644
index 0000000000..2b024dad4b
--- /dev/null
+++ b/macros/generic/olsak-misc/openclose.tex
@@ -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
diff --git a/macros/generic/olsak-misc/qrcode.tex b/macros/generic/olsak-misc/qrcode.tex
new file mode 100644
index 0000000000..4385efb3e2
--- /dev/null
+++ b/macros/generic/olsak-misc/qrcode.tex
@@ -0,0 +1,2871 @@
+% qrcode.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak <petr@olsak.net> Jul. 2015
+
+% This macro qrcode.tex is (roughly speaking) a copy of qrcode.sty
+% macro by Anders Hendrickson <ahendric@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@i
+\newcount\qr@j
+\newcount\qr@a
+\newcount\qr@b
+\newcount\qr@c
+
+\def\theqr@i{\the\qr@i}
+\def\theqr@j{\the\qr@j}
+
+\def\@relax{\relax}%
+
+\def\preface@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@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@getstringlength#1{%
+ \bgroup
+ \qr@a=0%
+ \xdef\thestring{#1}%
+ \expandafter\qr@stringlength@recursive\expandafter(\thestring\relax\relax)%
+ \xdef\qr@stringlength{\the\qr@a}%
+ \egroup
+}%
+
+\def\qr@stringlength@recursive(#1#2){%
+ \def\testi{#1}%
+ \ifx\testi\@relax
+ %we are done.
+ \let\qr@next=\relax%
+ \else
+ \advance\qr@a by 1%
+ \def\qr@next{\qr@stringlength@recursive(#2)}%
+ \fi
+ \qr@next
+}%
+
+\def\qr@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@padatfront#1#2{%
+ % #1 = macro containing text to pad
+ % #2 = desired number of characters
+ % Pads a number with initial zeros.
+ \qr@getstringlength{#1}%
+ \qr@a=\qr@stringlength\relax%
+ \advance\qr@a by 1\relax%
+ \qr@for \i = \qr@a to #2 by 1
+ {\g@preface@macro{#1}{0}}%
+}
+
+\qr@a=-1\relax%
+\def\qr@savehexsymbols(#1#2){%
+ \advance\qr@a by 1\relax%
+ \expandafter\def\csname qr@hexchar@\the\qr@a\endcsname{#1}%
+ \expandafter\edef\csname qr@hextodecimal@#1\endcsname{\the\qr@a}%
+ \ifnum\qr@a=15\relax
+ %Done.
+ \let\qr@next=\relax%
+ \else
+ \def\qr@next{\qr@savehexsymbols(#2)}%
+ \fi%
+ \qr@next%
+}%
+\qr@savehexsymbols(0123456789abcdef\relax\relax)%
+
+\def\qr@decimaltobase#1#2#3{%
+ % #1 = macro to store result
+ % #2 = decimal representation of a positive integer
+ % #3 = new base
+ \bgroup
+ \edef\qr@newbase{#3}%
+ \gdef\qr@base@result{}%
+ \qr@a=#2\relax%
+ \qr@decimaltobase@recursive%
+ \xdef#1{\qr@base@result}%
+ \egroup
+}
+\def\qr@decimaltobase@recursive{%
+ \qr@b=\qr@a%
+ \divide\qr@b by \qr@newbase\relax
+ \multiply\qr@b by -\qr@newbase\relax
+ \advance\qr@b by \qr@a\relax%
+ \divide\qr@a by \qr@newbase\relax%
+ \ifnum\qr@b<10\relax
+ \edef\newdigit{\the\qr@b}%
+ \else
+ \edef\newdigit{\csname qr@hexchar@\the\qr@b\endcsname}%
+ \fi
+ \edef\qr@argument{{\noexpand\qr@base@result}{\newdigit}}%
+ \expandafter\g@preface@macro\qr@argument%
+ \ifnum\qr@a=0\relax
+ \relax
+ \else
+ \expandafter\qr@decimaltobase@recursive
+ \fi
+}
+
+\long\def\isnextchar#1#2#3{\begingroup\toks0={\endgroup#2}\toks1={\endgroup#3}%
+ \let\tmp=#1\futurelet\next\isnextcharA
+}
+\def\isnextcharA{\the\toks\ifx\tmp\next0\else1\fi\space}
+
+\long\def\xaddto#1#2{\expandafter\xdef\expandafter#1\expandafter{#1#2}}
+\let\g@addto@macro=\xaddto
+
+\def\qr@decimaltohex[#1]#2#3{%
+ % #1 (opt.) = number of hex digits to create
+ % #2 = macro to store result
+ % #3 = decimal digits to convert
+ \qr@decimaltobase{#2}{#3}{16}%
+ \qr@padatfront{#2}{#1}%
+}
+
+\def\qr@decimaltobinary[#1]#2#3{%
+ % #1 (opt.) = number of bits to create
+ % #2 = macro to store result
+ % #3 = decimal digits to convert
+ \qr@decimaltobase{#2}{#3}{2}%
+ \qr@padatfront{#2}{#1}%
+}
+
+\qr@for \i = 0 to 15 by 1%
+ {%
+ \qr@decimaltohex[1]{\qr@hexchar}{\the\i}%
+ \qr@decimaltobinary[4]{\qr@bits}{\the\i}%
+ \expandafter\xdef\csname qr@b2h@\qr@bits\endcsname{\qr@hexchar}%
+ \expandafter\xdef\csname qr@h2b@\qr@hexchar\endcsname{\qr@bits}%
+ }%
+
+\def\qr@binarytohex[#1]#2#3{%
+ % #1 (optional) = # digits desired
+ % #2 = macro to save to
+ % #3 = binary string (must be multiple of 4 bits)
+ \def\test@i{#1}%
+ \ifx\test@i\@relax%
+ %No argument specified
+ \def\qr@desireddigits{0}%
+ \else
+ \def\qr@desireddigits{#1}%
+ \fi
+ \gdef\qr@base@result{}%
+ \edef\qr@argument{(#3\relax\relax\relax\relax\relax)}%
+ \xa\qr@binarytohex@int\qr@argument%
+ \qr@padatfront{\qr@base@result}{\qr@desireddigits}%
+ \xdef#2{\qr@base@result}%
+}
+\def\qr@binarytohex@int(#1#2#3#4#5){%
+ % #1#2#3#4 = 4 bits
+ % #5 = remainder, including \relax\relax\relax\relax\relax terminator
+ \def\test@i{#1}%
+ \ifx\test@i\@relax%
+ %Done.
+ \def\qr@next{\relax}%
+ \else%
+ \xdef\qr@base@result{\qr@base@result\csname qr@b2h@#1#2#3#4\endcsname}%
+ \def\qr@next{\qr@binarytohex@int(#5)}%
+ \fi%
+ \qr@next%
+}
+
+\def\qr@hextobinary[#1]#2#3{%
+ % #1 (optional) = # bits desired
+ % #2 = macro to save to
+ % #3 = hexadecimal string
+ \bgroup
+ \def\test@i{#1}%
+ \ifx\test@i\@relax%
+ %No argument specified
+ \def\qr@desireddigits{0}%
+ \else
+ \def\qr@desireddigits{#1}%
+ \fi
+ \gdef\qr@base@result{}%
+ \edef\qr@argument{(#3\relax\relax)}%
+ \xa\qr@hextobinary@int\qr@argument%
+ \qr@padatfront{\qr@base@result}{\qr@desireddigits}%
+ \xdef#2{\qr@base@result}%
+ \egroup
+}
+\def\qr@hextobinary@int(#1#2){%
+ % #1 = hexadecimal character
+ % #2 = remainder, including \relax\relax terminator
+ \def\test@@i{#1}%
+ \ifx\test@@i\@relax%
+ %Done.
+ \def\qr@next{\relax}%
+ \else%
+ \xdef\qr@base@result{\qr@base@result\csname qr@h2b@#1\endcsname}%
+ \def\qr@next{\qr@hextobinary@int(#2)}%
+ \fi%
+ \qr@next%
+}
+
+\def\qr@hextodecimal#1#2{%
+ \edef\qr@argument{#2}%
+ \xa\qr@a\xa=\xa\number\xa"\qr@argument\relax%
+ \edef#1{\the\qr@a}%
+}
+
+\def\qr@hextodecimal#1#2{%
+ % #1 = macro to store result
+ % #2 = hexadecimal representation of a positive integer
+ \bgroup
+ \qr@a=0\relax%
+ \edef\qr@argument{(#2\relax)}%
+ \xa\qr@hextodecimal@recursive\qr@argument%
+ \xdef#1{\the\qr@a}%
+ \egroup
+}
+\def\qr@hextodecimal@recursive(#1#2){%
+ % #1 = first hex char
+ % #2 = remainder
+ \advance \qr@a by \csname qr@hextodecimal@#1\endcsname\relax%
+ \edef\testii{#2}%
+ \ifx\testii\@relax%
+ %Done.
+ \let\qr@next=\relax%
+ \else
+ %There's at least one more digit.
+ \multiply\qr@a by 16\relax
+ \edef\qr@next{\noexpand\qr@hextodecimal@recursive(#2)}%
+ \fi%
+ \qr@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@letterspace
+ \catcode`\^^M=13 \qr@setMtoJ
+ \ifx\mubytein\undefined \else \mubytein=0 \fi
+}
+{\lccode`\?=`\ \lowercase{\gdef\qr@letterspace{?}}}
+{\catcode`\^^M=13 \gdef\qr@setMtoJ{\def^^M{^^J}}}
+
+\def\qr@creatematrix#1{%
+ \expandafter\gdef\csname #1\endcsname##1##2{%
+ \csname #1@##1@##2\endcsname
+ }%
+}%
+
+\def\qr@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@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@matrixentry#1#2#3{%
+ % #1 = matrix name
+ % #2 = row number
+ % #3 = column number
+ \csname #1@#2@#3\endcsname%
+}%
+
+\def\qr@createsquareblankmatrix#1#2{%
+ \qr@creatematrix{#1}%
+ \xa\gdef\csname #1@numrows\endcsname{#2}%
+ \xa\gdef\csname #1@numcols\endcsname{#2}%
+ \qr@for \i = 1 to #2 by 1%
+ {\qr@for \j = 1 to #2 by 1%
+ {\qr@storetomatrix{#1}{\the\i}{\the\j}{\@blank}}}%
+}%
+
+\def\qr@numberofrowsinmatrix#1{%
+ \csname #1@numrows\endcsname%
+}%
+
+\def\qr@numberofcolsinmatrix#1{%
+ \csname #1@numcols\endcsname%
+}%
+
+\def\qr@setnumberofrows#1#2{%
+ \xa\xdef\csname #1@numrows\endcsname{#2}%
+}%
+
+\def\qr@setnumberofcols#1#2{%
+ \xa\xdef\csname #1@numcols\endcsname{#2}%
+}%
+
+\newdimen\qrdesiredheight
+\newdimen\qrmodulesize
+
+\def\qr@link#1#2{\hbox{\pdfstartlink height\ht0 depth0pt \qr@border
+ user{/Subtype/Link/A <</Type/Action/S/URI/URI(#1)>>}\relax #2\pdfendlink}%
+}
+\def\qr@border{\expandafter\ifx \csname kv:qrborder\endcsname\relax \else
+ attr{/C[\kv{qrborder}] /Border[0 0 .6]}\fi
+}
+
+\def\qr@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@creatematrix{#1}%
+ \expandafter\xdef\csname #1@numrows\endcsname{#2}%
+ \expandafter\xdef\csname #1@numcols\endcsname{#2}%
+ \gdef\qr@literalmatrix@tokens{#3}%
+ \qr@for \i = 1 to #2 by 1%
+ {\qr@for \j = 1 to #2 by 1%
+ {\expandafter\qr@createliteralmatrix@int\expandafter(\qr@literalmatrix@tokens)%
+ \qr@estoretomatrix{#1}{\the\i}{\the\j}{\qr@entrytext}%
+ }%
+ }%
+}
+\def\qr@createliteralmatrix@int(#1#2){%
+ \def\qr@entrytext{#1}%
+ \gdef\qr@literalmatrix@tokens{#2}%
+}
+
+\qr@createliteralmatrix{finderpattern}{8}{%
+ \qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@white@fixed%
+ \qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed%
+}%
+
+\qr@createliteralmatrix{alignmentpattern}{5}{%
+ \qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@black@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@black@fixed\qr@white@fixed\qr@black@fixed%
+ \qr@black@fixed\qr@white@fixed\qr@white@fixed\qr@white@fixed\qr@black@fixed%
+ \qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed\qr@black@fixed%
+}%
+
+\def\qr@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@createduplicatematrix#1#2{%
+ % #1 = name of copy
+ % #2 = original matrix to be copied
+ \qr@creatematrix{#1}%
+ \qr@for \i = 1 to \qr@numberofrowsinmatrix{#2} by 1%
+ {\qr@for \j = 1 to \qr@numberofcolsinmatrix{#2} by 1%
+ {\qr@copymatrixentry{#2}{\the\i}{\the\j}{#1}{\the\i}{\the\j}%
+ }%
+ }%
+ \qr@setnumberofrows{#1}{\qr@numberofrowsinmatrix{#2}}%
+ \qr@setnumberofcols{#1}{\qr@numberofcolsinmatrix{#2}}%
+}%
+
+\def\qr@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@i}{#2}%
+ \qr@for \sourcei=1 to 8 by 1%
+ {\setcounter{qr@j}{#3}%
+ \qr@for \sourcej=1 to 8 by 1%
+ {\qr@copymatrixentry{finderpattern}{\the\sourcei}{\the\sourcej}%
+ {#1}{\theqr@i}{\theqr@j}%
+ \addtocounter{qr@j}{#5}%
+ }%
+ \addtocounter{qr@i}{#4}%
+ }%
+}%
+
+\def\qr@placefinderpatterns#1{%
+ % #1=matrix name
+ \qr@placefinderpattern@int{#1}{1}{1}{1}{1}%
+ \qr@placefinderpattern@int{#1}{\qr@numberofrowsinmatrix{#1}}{1}{-1}{1}%
+ \qr@placefinderpattern@int{#1}{1}{\qr@numberofcolsinmatrix{#1}}{1}{-1}%
+}%
+
+\def\qr@placetimingpatterns#1{%
+ %Set \endingcol to n-8.
+ \qr@a=\qr@size\relax%
+ \advance\qr@a by -8\relax%
+ \edef\endingcol{\the\qr@a}%
+ \qr@for \j = 9 to \endingcol by 1%
+ {\ifodd\j\relax%
+ \qr@storetomatrix{#1}{7}{\the\j}{\qr@black@fixed}%
+ \qr@storetomatrix{#1}{\the\j}{7}{\qr@black@fixed}%
+ \else%
+ \qr@storetomatrix{#1}{7}{\the\j}{\qr@white@fixed}%
+ \qr@storetomatrix{#1}{\the\j}{7}{\qr@white@fixed}%
+ \fi%
+ }%
+}%
+
+\def\qr@placealignmentpattern@int#1#2#3{%
+ % Work on matrix #1.
+ % Write an alignment pattern into the matrix, centered on (#2,#3).
+ \qr@a=#2\relax%
+ \advance\qr@a by -2\relax%
+ \qr@b=#3\relax%
+ \advance\qr@b by -2\relax%
+ \setcounter{qr@i}{\the\qr@a}%
+ \qr@for \i=1 to 5 by 1%
+ {\setcounter{qr@j}{\the\qr@b}%
+ \qr@for \j=1 to 5 by 1%
+ {\qr@copymatrixentry{alignmentpattern}{\the\i}{\the\j}%
+ {#1}{\theqr@i}{\theqr@j}%
+ \stepcounter{qr@j}%
+ }%
+ \stepcounter{qr@i}%
+ }%
+}%
+
+\newif\ifqr@incorner%
+\def\qr@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@k stores k,
+ % * \qr@alignment@firstskip stores how far between the 1st and 2nd row/col, &
+ % * \qr@alignment@generalskip stores how far between each subsequent row/col.
+ \xa\ifnum\qr@k>0\relax
+ %There will be at least one alignment pattern.
+ %N.B. k cannot equal 1.
+ \xa\ifnum\qr@k=2\relax
+ % 2*2-3 = exactly 1 alignment pattern.
+ \qr@a=7\relax
+ \advance\qr@a by \qr@alignment@firstskip\relax
+ \xdef\qr@target@ii{\the\qr@a}%
+ \qr@placealignmentpattern@int{#1}{\qr@target@ii}{\qr@target@ii}%
+ \else
+ % k is at least 3, so the following loops should be safe.
+ \xdef\qr@target@ii{7}%
+ \qr@for \ii = 1 to \qr@k by 1%
+ {\ifcase\ii\relax%
+ \relax% \ii should never equal 0.
+ \or
+ \xdef\qr@target@ii{7}% If \ii = 1, we start in row 7.
+ \or
+ %If \ii = 2, we add the firstskip.
+ \qr@a=\qr@target@ii\relax%
+ \advance\qr@a by \qr@alignment@firstskip\relax%
+ \xdef\qr@target@ii{\the\qr@a}%
+ \else
+ %If \ii>2, we add the generalskip.
+ \qr@a=\qr@target@ii\relax%
+ \advance\qr@a by \qr@alignment@generalskip\relax%
+ \xdef\qr@target@ii{\the\qr@a}%
+ \fi
+ \qr@for \jj = 1 to \qr@k by 1%
+ {\ifcase\jj\relax%
+ \relax% \jj should never equal 0.
+ \or
+ \xdef\qr@target@jj{7}% If \jj=1, we start in row 7.
+ \or
+ %If \jj=2, we add the firstskip.
+ \qr@a=\qr@target@jj\relax%
+ \advance\qr@a by \qr@alignment@firstskip%
+ \xdef\qr@target@jj{\the\qr@a}%
+ \else
+ %If \jj>2, we add the generalskip.
+ \qr@a=\qr@target@jj\relax%
+ \advance\qr@a by \qr@alignment@generalskip%
+ \xdef\qr@target@jj{\the\qr@a}%
+ \fi
+ \qr@incornerfalse%
+ \ifnum\ii=1\relax
+ \ifnum\jj=1\relax
+ \qr@incornertrue
+ \else
+ \ifnum\qr@k=\jj\relax
+ \qr@incornertrue
+ \fi
+ \fi
+ \else
+ \xa\ifnum\qr@k=\ii\relax
+ \ifnum\jj=1\relax
+ \qr@incornertrue
+ \fi
+ \fi
+ \fi
+ \ifqr@incorner
+ \relax
+ \else
+ \qr@placealignmentpattern@int{#1}{\qr@target@ii}{\qr@target@jj}%
+ \fi
+ }% ends \qr@for \jj
+ }% ends \qr@for \ii
+ \fi
+ \fi
+}%
+
+\def\qr@placedummyformatpatterns#1{%
+ \qr@for \j = 1 to 9 by 1%
+ {\ifnum\j=7\relax%
+ \else%
+ \qr@storetomatrix{#1}{9}{\the\j}{\qr@format@square}%
+ \qr@storetomatrix{#1}{\the\j}{9}{\qr@format@square}%
+ \fi%
+ }%
+ \setcounter{qr@j}{\qr@size}%
+ \qr@for \j = 1 to 8 by 1%
+ {\qr@storetomatrix{#1}{9}{\theqr@j}{\qr@format@square}%
+ \qr@storetomatrix{#1}{\theqr@j}{9}{\qr@format@square}%
+ \addtocounter{qr@j}{-1}%
+ }%
+ %Now go back and change the \qr@format@square in (n-8,9) to \qr@black@fixed.
+ \addtocounter{qr@j}{1}%
+ \qr@storetomatrix{#1}{\theqr@j}{9}{\qr@black@fixed}%
+}%
+
+\def\qr@placedummyversionpatterns#1{%
+ \xa\ifnum\qr@version>6\relax
+ %Must include version information.
+ \global\qr@i=\qr@size%
+ \global\advance\qr@i by -10\relax%
+ \qr@for \i = 1 to 3 by 1%
+ {\qr@for \j = 1 to 6 by 1%
+ {\qr@storetomatrix{#1}{\theqr@i}{\the\j}{\qr@format@square}%
+ \qr@storetomatrix{#1}{\the\j}{\theqr@i}{\qr@format@square}%
+ }%
+ \stepcounter{qr@i}%
+ }%
+ \fi
+}%
+
+\def\qr@writebit(#1#2)#3{%
+ % #3 = matrix name
+ % (qr@i,qr@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@datatowrite{#2}%
+ \ifnum#1=1
+ \qr@storetomatrix{#3}{\theqr@i}{\theqr@j}{\qr@black}%
+ \else
+ \qr@storetomatrix{#3}{\theqr@i}{\theqr@j}{\@white}%
+ \fi
+}%
+
+\newif\ifqr@rightcol
+\newif\ifqr@goingup
+
+\def\qr@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@i}{\qr@numberofrowsinmatrix{#1}}%
+ \setcounter{qr@j}{\qr@numberofcolsinmatrix{#1}}%
+ \qr@rightcoltrue%
+ \qr@goinguptrue%
+ \edef\qr@argument{{#1}(#2\relax\relax\relax)}%
+ \xa\qr@writedata@hex@recursive\qr@argument%
+}%
+
+\def\qr@writedata@hex@recursive#1(#2#3#4){%
+ % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc.
+ % (qr@i,qr@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@hextobinary[8]{\bytetowrite}{#2#3}%
+ \xdef\qr@datatowrite{\bytetowrite\relax}% %Add terminating "\relax"
+ \qr@writedata@recursive{#1}% %This function actually writes the 8 bits.
+ \edef\qr@argument{{#1}(#4)}%
+ \xa\def\xa\go\xa{\xa\qr@writedata@hex@recursive\qr@argument}% %Call self to write the next bit.
+ \fi
+ \go
+}%
+
+\def\qr@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@i}{\qr@numberofrowsinmatrix{#1}}%
+ \setcounter{qr@j}{\qr@numberofcolsinmatrix{#1}}%
+ \qr@rightcoltrue
+ \qr@goinguptrue
+ \edef\qr@datatowrite{#2\relax}%
+ \qr@writedata@recursive{#1}%
+}%
+
+\def\@@blank{\@blank}%
+
+\def\qr@writedata@recursive#1{%
+ % #1 = matrix name
+ % (qr@i,qr@j) = position to write in (LaTeX counters)
+ % \qr@datatowrite contains the bits to be written, plus '\relax' as an end-of-file marker
+ \xa\let\xa\squarevalue\csname #1@\theqr@i @\theqr@j\endcsname%
+ \ifx\squarevalue\@@blank
+ %Square is blank, so write data in it.
+ \xa\qr@writebit\xa(\qr@datatowrite){#1}%
+ %The \qr@writebit macro not only writes the first bit of \qr@datatowrite into the matrix,
+ %but also removes the bit from the 'bitstream' of \qr@datatowrite.
+ \fi
+ %Now adjust our position in the matrix.
+ \ifqr@rightcol
+ %From the right-hand half of the two-bit column, we always move left. Easy peasy.
+ \addtocounter{qr@j}{-1}%
+ \qr@rightcolfalse
+ \else
+ %If we're in the left-hand column, things are harder.
+ \ifqr@goingup
+ %First, suppose we're going upwards.
+ \ifnum\qr@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@j}{1}%
+ \addtocounter{qr@i}{-1}%
+ \qr@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@j}{-1}%
+ \qr@goingupfalse
+ \qr@rightcoltrue
+ \fi
+ \else
+ %Now, suppose we're going downwards.
+ \xa\ifnum\qr@size>\qr@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@j}{1}%
+ \addtocounter{qr@i}{1}%
+ \qr@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@j}{-1}%
+ \qr@rightcoltrue
+ \qr@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@j=7\relax%
+ \setcounter{qr@j}{6}%
+ \fi
+ \fi
+ %Now check whether there are any more bits to write.
+ \ifx\qr@datatowrite\@relax
+ % \qr@datatowrite is just `\relax', so we're done.
+ \let\nexttoken=\relax
+ \relax
+ \else
+ % Write some more!
+ \def\nexttoken{\qr@writedata@recursive{#1}}%
+ \fi
+ \nexttoken
+}%
+
+\def\qr@writeremainderbits#1{%
+ % #1 = name of a matrix that has been prepared and partly filled.
+ % (qr@i,qr@j) = position to write in LaTeX counters
+ \xa\ifnum\qr@numremainderbits>0\relax
+ \def\qr@datatowrite{}%
+ \qr@for \i = 1 to \qr@numremainderbits by 1%
+ {\g@addto@macro{\qr@datatowrite}{0}}%
+ \g@addto@macro{\qr@datatowrite}{\relax}% terminator
+ \qr@writedata@recursive{#1}%
+ \fi
+}%
+
+\newif\ifqr@cellinmask
+
+\def\qr@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@parsemaskingfunction{%
+ % Compute mod(\themaski+\themaskj,2)%
+ \qr@a=\maski%
+ \advance\qr@a by \maskj%
+ \qr@b=\qr@a%
+ \divide\qr@b by 2%
+ \multiply\qr@b by 2%
+ \advance\qr@a by -\qr@b%
+ \edef\qr@maskfunctionresult{\the\qr@a}%
+ }%
+ \or
+ %Case 1: horizontal stripes
+ \def\qr@parsemaskingfunction{%
+ % Compute mod(\themaski,2)%
+ \ifodd\maski\relax%
+ \def\qr@maskfunctionresult{1}%
+ \else%
+ \def\qr@maskfunctionresult{0}%
+ \fi%
+ }%
+ \or
+ %Case 2: vertical stripes
+ \def\qr@parsemaskingfunction{%
+ % Compute mod(\themaskj,3)%
+ \qr@a=\maskj%
+ \divide\qr@a by 3%
+ \multiply\qr@a by 3%
+ \advance\qr@a by -\maskj%
+ \edef\qr@maskfunctionresult{\the\qr@a}%
+ }%
+ \or
+ %Case 3: diagonal stripes
+ \def\qr@parsemaskingfunction{%
+ % Compute mod(\themaski+\themaskj,3)%
+ \qr@a=\maski%
+ \advance\qr@a by \maskj%
+ \qr@b=\qr@a%
+ \divide\qr@b by 3%
+ \multiply\qr@b by 3%
+ \advance\qr@b by -\qr@a%
+ \edef\qr@maskfunctionresult{\the\qr@b}%
+ }%
+ \or
+ %Case 4: wide checkerboard
+ \def\qr@parsemaskingfunction{%
+ % Compute mod(floor(\themaski/2) + floor(\themaskj/3),2) %
+ \qr@a=\maski%
+ \divide\qr@a by 2%
+ \qr@b=\maskj%
+ \divide\qr@b by 3%
+ \advance\qr@a by \qr@b%
+ \qr@b=\qr@a%
+ \divide\qr@a by 2%
+ \multiply\qr@a by 2%
+ \advance\qr@a by -\qr@b%
+ \edef\qr@maskfunctionresult{\the\qr@a}%
+ }%
+ \or
+ %Case 5: quilt
+ \def\qr@parsemaskingfunction{%
+ % Compute mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) %
+ \qr@a=\maski%
+ \multiply\qr@a by \maskj%
+ \qr@b=\qr@a%
+ \qr@c=\qr@a%
+ \divide\qr@a by 2%
+ \multiply\qr@a by 2%
+ \advance\qr@a by -\qr@c% (result will be -mod(i*j,2), which is negative.)
+ \divide\qr@b by 3%
+ \multiply\qr@b by 3%
+ \advance\qr@b by -\qr@c% (result will be -mod(i*j,3), which is negative.)
+ \advance\qr@a by \qr@b% (result is negative of what's in the spec.)
+ \edef\qr@maskfunctionresult{\the\qr@a}%
+ }%
+ \or
+ %Case 6: arrows
+ \def\qr@parsemaskingfunction{%
+ % Compute mod( mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) %
+ \qr@a=\maski%
+ \multiply\qr@a by \maskj%
+ \qr@b=\qr@a%
+ \qr@c=\qr@a%
+ \multiply\qr@c by 2% % \qr@c equals 2*i*j.
+ \divide\qr@a by 2%
+ \multiply\qr@a by 2%
+ \advance\qr@c by -\qr@a% Now \qr@c equals i*j + mod(i*j,2).
+ \divide\qr@b by 3%
+ \multiply\qr@b by 3%
+ \advance\qr@c by -\qr@b% (Now \qr@c equals mod(i*j,2) + mod(i*j,3).
+ \qr@a=\qr@c%
+ \divide\qr@a by 2%
+ \multiply\qr@a by 2%
+ \advance\qr@c by-\qr@a%
+ \edef\qr@maskfunctionresult{\the\qr@c}%
+ }%
+ \or
+ %Case 7: shotgun
+ \def\qr@parsemaskingfunction{%
+ % Compute mod( mod(\themaski+\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) %
+ \qr@a=\maski%
+ \advance\qr@a by \maskj% %So \qr@a = i+j
+ \qr@b=\maski%
+ \multiply\qr@b by \maskj% %So \qr@b = i*j
+ \qr@c=\qr@a%
+ \advance\qr@c by \qr@b% So \qr@c = i+j+i*j
+ \divide\qr@a by 2%
+ \multiply\qr@a by 2%
+ \advance\qr@c by -\qr@a% So \qr@c = mod(i+j,2) + i*j
+ \divide\qr@b by 3%
+ \multiply\qr@b by 3%
+ \advance\qr@c by -\qr@b% So \qr@c = mod(i+j,2) + mod(i*j,3)
+ \qr@a=\qr@c%
+ \divide\qr@c by 2%
+ \multiply\qr@c by 2%
+ \advance\qr@a by -\qr@c%
+ \edef\qr@maskfunctionresult{\the\qr@a}%
+ }%
+ \fi
+}%
+
+\def\qr@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@parsemaskingfunction must have been set by a call to \qr@setmaskingfunction
+ \qr@parsemaskingfunction
+ \xa\ifnum\qr@maskfunctionresult=0\relax
+ \qr@cellinmasktrue
+ \else
+ \qr@cellinmaskfalse
+ \fi
+}%
+
+\newcount\maski
+\newcount\maskj
+
+\def\qr@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@createduplicatematrix{#2}{#1}%
+ \qr@setmaskingfunction{#3}%
+ \setcounter{maski}{-1}%
+ \qr@for \i = 1 to \qr@size by 1%
+ {\stepcounter{maski}%
+ \setcounter{maskj}{-1}%
+ \qr@for \j = 1 to \qr@size by 1%
+ {\stepcounter{maskj}%
+ \qr@checkifcellisinmask
+ \ifqr@cellinmask
+ \qr@checkifcurrentcellcontainsdata{#2}%
+ \ifqr@currentcellcontainsdata
+ \qr@flipcurrentcell{#2}%
+ \fi
+ \fi
+ }%
+ }%
+}%
+
+\newif\ifqr@currentcellcontainsdata
+\qr@currentcellcontainsdatafalse
+
+\def\@@white{\@white}%
+\def\@@black{\qr@black}%
+
+\def\qr@checkifcurrentcellcontainsdata#1{%
+ % #1 = name of matrix
+ \qr@currentcellcontainsdatafalse
+ \xa\ifx\csname #1@\the\i @\the\j\endcsname\@@white
+ \qr@currentcellcontainsdatatrue
+ \fi
+ \xa\ifx\csname #1@\the\i @\the\j\endcsname\@@black
+ \qr@currentcellcontainsdatatrue
+ \fi
+}%
+
+\def\qr@flipped@black{\qr@black}%
+\def\qr@flipped@white{\@white}%
+
+\def\qr@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@storetomatrix{#1}{\the\i}{\the\j}{\qr@flipped@black}%
+ \else
+ \qr@storetomatrix{#1}{\the\i}{\the\j}{\qr@flipped@white}%
+ \fi
+}%
+
+\def\qr@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@mask@selected.
+ \qr@createduplicatematrix{originalmatrix}{#1}%
+ \qrmessage{<Applying Mask 0...}%
+ \qr@applymask{originalmatrix}{#1}{0}%
+ \qrmessage{done. Calculating penalty...}%
+ \qr@evaluatemaskpenalty{#1}%
+ \xdef\currentbestpenalty{\qr@penalty}%
+ \qrmessage{penalty is \qr@penalty>^^J}%
+ \gdef\currentbestmask{0}%
+ \qr@for \i = 1 to 7 by 1%
+ {\qrmessage{<Applying Mask \the\i...}%
+ \qr@applymask{originalmatrix}{currentmasked}{\the\i}%
+ \qrmessage{done. Calculating penalty...}%
+ \qr@evaluatemaskpenalty{currentmasked}%
+ \qrmessage{penalty is \qr@penalty>^^J}%
+ \xa\xa\xa\ifnum\xa\qr@penalty\xa<\currentbestpenalty\relax
+ %We found a better mask.
+ \xdef\currentbestmask{\the\i}%
+ \qr@createduplicatematrix{#1}{currentmasked}%
+ \xdef\currentbestpenalty{\qr@penalty}%
+ \fi
+ }%
+ \xdef\qr@mask@selected{\currentbestmask}%
+ \qrmessage{<Selected Mask \qr@mask@selected>^^J}%
+}%
+
+\def\qr@Ni{3}%
+\def\qr@Nii{3}%
+\def\qr@Niii{40}%
+\def\qr@Niv{10}%
+\def\@fiveones{11111}%
+\def\@fivezeros{11111}%
+\def\@twoones{11}%
+\def\@twozeros{00}%
+\def\@finderA{00001011101}%
+\def\@finderB{10111010000}%
+\def\@finderB@three{1011101000}%
+\def\@finderB@two{101110100}%
+\def\@finderB@one{10111010}%
+\def\@finderB@zero{1011101}%
+\newif\ifstringoffive
+\def\addpenaltyiii{%
+ \addtocounter{penaltyiii}{\qr@Niii}%
+}%
+\newcount\totalones
+\newcount\penaltyi
+\newcount\penaltyii
+\newcount\penaltyiii
+\newcount\penaltyiv
+\def\qr@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@black{1}\def\@white{0}%
+ \def\qr@black@fixed{1}\def\qr@white@fixed{0}%
+ \def\qr@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@for \i=1 to \qr@size by 1%
+ {\def\lastfive{z}% %The z is a dummy, that will be removed before any testing.
+ \stringoffivefalse
+ \def\lasttwo@thisrow{z}% %The z is a dummy.
+ \def\lasttwo@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@finderB@at{0}%
+ \qr@for \j=1 to \qr@size by 1%
+ {\edef\newbit{\qr@matrixentry{#1}{\the\i}{\the\j}}%
+ %
+ % LASTFIVE CODE FOR PENALTY 1
+ % First, add the new bit to the end.
+ \xa\g@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@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@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@Nii penalty points.
+ % We do not need to run this test in the last row.
+ \xa\ifnum\xa\i\xa<\qr@size\relax
+ \xa\g@addto@macro\xa\lasttwo@thisrow\xa{\newbit}%
+ %Compute \iplusone
+ \qr@a=\i\relax%
+ \advance\qr@a by 1%
+ \edef\iplusone{\the\qr@a}%
+ %
+ \edef\nextrowbit{\qr@matrixentry{#1}{\iplusone}{\the\j}}%
+ \xa\g@addto@macro\xa\lasttwo@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@thisrow
+ \removefirsttoken\lasttwo@nextrow
+ \ifx\lasttwo@thisrow\@twoones
+ \ifx\lasttwo@nextrow\@twoones
+ \addtocounter{penaltyii}{\qr@Nii}%
+ \fi
+ \else
+ \ifx\lasttwo@thisrow\@twozeros
+ \ifx\lasttwo@nextrow\@twozeros
+ \addtocounter{penaltyii}{\qr@Nii}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ % LASTNINE CODE FOR PENALTY 3
+ % First, add the new bit to the end.
+ \xa\g@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@size=\j\relax%
+ % Last column. Any of the following should count:
+ % 1011101 (\@finderB@zero)
+ % 10111010 (\@finderB@one)
+ % 101110100 (\@finderB@two)
+ % 1011101000 (\@finderB@three)
+ % 10111010000 (\@finderB)
+ \ifx\lastnine\@finderB
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@three
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@two
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@one
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@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@finderB@at to \j+4.
+ \qr@a=\j\relax%
+ \advance\qr@a by 4%
+ \xdef\ignore@finderB@at{\the\qr@a}%
+ \else
+ \ifx\lastfive\@finderB% %Matches 1011101 0000.
+ \xa\ifnum\ignore@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@for \j=1 to \qr@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@finderB@at{0}%
+ \qr@for \i=1 to \qr@size by 1%
+ {\edef\newbit{\qr@matrixentry{#1}{\the\i}{\the\j}}%
+ %
+ % LASTFIVE CODE FOR PENALTY 1
+ % First, add the new bit to the end.
+ \xa\g@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@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@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@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@size=\i\relax%
+ % Last column. Any of the following should count:
+ % 1011101 (\@finderB@zero)
+ % 10111010 (\@finderB@one)
+ % 101110100 (\@finderB@two)
+ % 1011101000 (\@finderB@three)
+ % 10111010000 (\@finderB)
+ \ifx\lastnine\@finderB
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@three
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@two
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@one
+ \addpenaltyiii
+ \else
+ \removefirsttoken\lastnine
+ \ifx\lastnine\@finderB@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@finderB@at to \i+4.
+ \qr@a=\i\relax%
+ \advance\qr@a by 4%
+ \xdef\ignore@finderB@at{\the\qr@a}%
+ \else
+ \ifx\lastfive\@finderB% %Matches 1011101 0000.
+ \xa\ifnum\ignore@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@a=\totalones\relax
+ \multiply\qr@a by 20\relax
+ \qr@b=\qr@size\relax
+ \multiply\qr@b by \qr@size\relax
+ \qr@c=10\relax
+ \multiply\qr@c by \qr@b\relax
+ \advance\qr@a by -\qr@c\relax
+ \ifnum\qr@a<0\relax
+ \multiply\qr@a by -1\relax
+ \fi
+ \divide\qr@a by \qr@b\relax
+ \setcounter{penaltyiv}{\the\qr@a}%
+ %
+ %CALCULATE TOTAL PENALTY
+ \qr@a=\the\penaltyi\relax%
+ \advance\qr@a by \the\penaltyii\relax%
+ \advance\qr@a by \the\penaltyiii\relax%
+ \advance\qr@a by \the\penaltyiv\relax%
+ \edef\qr@penalty{\the\qr@a}%
+}%
+
+\def\removefirsttoken#1{%
+ %Removes the first token from the macro named in #1.
+ \edef\qr@argument{(#1)}%
+ \xa\removefirsttoken@int\qr@argument%
+ \xdef#1{\removefirsttoken@result}%
+}%
+\def\removefirsttoken@int(#1#2){%
+ \def\removefirsttoken@result{#2}%
+}%
+
+\def\qr@writeformatstring#1#2{%
+ % #1 = matrix name
+ % #2 = binary string representing the encoded and masked format information
+ \setcounter{qr@i}{9}%
+ \setcounter{qr@j}{1}%
+ \edef\qr@argument{{#1}(#2\relax)}%
+ \xa\qr@writeformatA@recursive\qr@argument
+ %
+ \setcounter{qr@i}{\qr@numberofrowsinmatrix{#1}}%
+ \setcounter{qr@j}{9}%
+ \xa\qr@writeformatB@recursive\qr@argument
+}%
+
+\def\qr@writeformatA@recursive#1(#2#3){%
+ % #1 = matrix name
+ % #2 = first bit of string
+ % #3 = rest of bitstream
+ % (qr@i,qr@j) = current (valid) position to write (in LaTeX counters)
+ \def\formattowrite{#3}%
+ \ifnum#2=1\relax
+ \qr@storetomatrix{#1}{\theqr@i}{\theqr@j}{\qr@black@format}%
+ \else
+ \qr@storetomatrix{#1}{\theqr@i}{\theqr@j}{\qr@white@format}%
+ \fi
+ % Now the tricky part--moving \i and \j to their next positions.
+ \ifnum\qr@j<9\relax
+ %If we're not yet in column 9, move right.
+ \stepcounter{qr@j}%
+ \ifnum\qr@j=7\relax
+ %But we skip column 7!
+ \stepcounter{qr@j}%
+ \fi
+ \else
+ %If we're in column 9, we move up.
+ \addtocounter{qr@i}{-1}%
+ \ifnum\qr@i=7\relax
+ %But we skip row 7!
+ \addtocounter{qr@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@i<1
+ \let\nexttoken=\relax
+ \else
+ \def\nexttoken{\qr@writeformatA@recursive{#1}(#3)}%
+ \fi
+ \nexttoken
+}%
+
+\def\qr@writeformatB@recursive#1(#2#3){%
+ % #1 = matrix name
+ % #2 = first bit of string
+ % #3 = rest of bitstream
+ % (qr@i,qr@j) = current (valid) position to write (in LaTeX counters)
+ \def\formattowrite{#3}%
+ \ifnum#2=1\relax
+ \qr@storetomatrix{#1}{\theqr@i}{\theqr@j}{\qr@black@format}%
+ \else
+ \qr@storetomatrix{#1}{\theqr@i}{\theqr@j}{\qr@white@format}%
+ \fi
+ % Now the tricky part--moving counters i and j to their next positions.
+ \qr@a=\qr@size%
+ \advance\qr@a by -6\relax%
+ \ifnum\qr@a<\qr@i\relax
+ %If we're not yet in row n-6, move up.
+ \addtocounter{qr@i}{-1}%
+ \else
+ \ifnum\qr@a=\qr@i\relax
+ %If we're actually in row n-6, we jump to position (9,n-7).
+ \setcounter{qr@i}{9}%
+ %Set counter j equal to \qr@size-7.
+ \global\qr@j=\qr@size\relax%
+ \global\advance\qr@j by -7\relax%
+ \else
+ %Otherwise, we must be in row 9.
+ %In this case, we move right.
+ \stepcounter{qr@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@size<\qr@j\relax
+ \let\nexttoken=\relax
+ \else
+ \def\nexttoken{\qr@writeformatB@recursive{#1}(#3)}%
+ \fi
+ \nexttoken
+}%
+
+\def\qr@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@version>6\relax
+ %Move to position (n-8,6).
+ \setcounter{qr@i}{\qr@size}\relax%
+ \addtocounter{qr@i}{-8}\relax%
+ \setcounter{qr@j}{6}%
+ \edef\qr@argument{{#1}(#2\relax)}%
+ \xa\qr@writeversion@recursive\qr@argument
+ \fi
+}%
+
+\def\qr@writeversion@recursive#1(#2#3){%
+ % #1 = matrix name
+ % #2 = first bit of string
+ % #3 = rest of bitstream
+ % (qr@i,qr@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@a=\qr@size\relax%
+ \advance\qr@a by -10\relax%
+ \edef\topline{\the\qr@a}%
+ %
+ \ifnum#2=1\relax
+ \qr@storetomatrix{#1}{\theqr@i}{\theqr@j}{\qr@black@format}%
+ \qr@storetomatrix{#1}{\theqr@j}{\theqr@i}{\qr@black@format}%
+ \else
+ \qr@storetomatrix{#1}{\theqr@i}{\theqr@j}{\qr@white@format}%
+ \qr@storetomatrix{#1}{\theqr@j}{\theqr@i}{\qr@white@format}%
+ \fi
+ % Now the tricky part--moving counters i and j to their next positions.
+ \addtocounter{qr@i}{-1}%
+ \xa\ifnum\topline>\qr@i\relax
+ %We've overshot the top of the region.
+ %We need to move left one column and down three.
+ \addtocounter{qr@j}{-1}%
+ \addtocounter{qr@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@j<1\relax
+ \let\nexttoken=\relax
+ \else
+ \def\nexttoken{\qr@writeversion@recursive{#1}(#3)}%
+ \fi
+ \nexttoken
+}%
+\newcount\qr@hexchars
+
+\def\qr@string@binarytohex#1{%
+ \qr@binarytohex{\qr@hex@result}{#1}%
+}%
+
+\def\qr@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@codetext{4}% %This means `binary'
+ %
+ %Next, the character count.
+ \qr@getstringlength{\plaintext}%
+ %Set \charactercountlengthinhex to \qr@charactercountbits@byte/4%
+ \qr@a=\qr@charactercountbits@byte\relax%
+ \divide \qr@a by 4\relax%
+ \edef\charactercountlengthinhex{\the\qr@a}%
+ \qr@decimaltohex[\charactercountlengthinhex]{\charactercount}{\qr@stringlength}%
+ \xa\g@addto@macro\xa\qr@codetext\xa{\charactercount}%
+ %
+ %Now comes the actual data.
+ \edef\qr@argument{(,\plaintext\relax\relax\relax)}%
+ \xa\qr@encode@ascii@recursive\qr@argument%
+ %
+ %Now the terminator.
+ \g@addto@macro\qr@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@hexchars}{0}%
+ \qr@getstringlength{\qr@codetext}%
+ \setcounter{qr@hexchars}{\qr@stringlength}%
+ %Set \qr@numpaddingcodewords equal to \qr@totaldatacodewords - hexchars/2.
+ \qr@a=-\qr@hexchars\relax
+ \divide\qr@a by 2\relax
+ \advance\qr@a by \qr@totaldatacodewords\relax
+ \edef\qr@numpaddingcodewords{\the\qr@a}%
+ %
+ \xa\ifnum\qr@numpaddingcodewords<0%
+ \edef\ds{ERROR: Too much data! Over by \qr@numpaddingcodewords bytes.}\show\ds%
+ \fi%
+ \xa\ifnum\qr@numpaddingcodewords>0%
+ \qr@for \i = 2 to \qr@numpaddingcodewords by 2%
+ {\g@addto@macro{\qr@codetext}{ec11}}%
+ \xa\ifodd\qr@numpaddingcodewords\relax%
+ \g@addto@macro{\qr@codetext}{ec}%
+ \fi%
+ \fi%
+}%
+
+\def\qr@encode@ascii@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@addto@macro\qr@codetext{#1}%
+ \else%
+ % Another character to translate.
+ \edef\asciicode{\number`#2}%
+ \qr@decimaltohex[2]{\newhexcodes}{\asciicode}%
+ \edef\qr@argument{(#1\newhexcodes,#3)}%
+ %\show\qr@argument
+ \xa\qr@encode@ascii@recursive\qr@argument%
+ \fi%
+}%
+
+\def\qr@splitcodetextintoblocks{%
+ \setcounter{qr@i}{0}%
+ \qr@for \j = 1 to \qr@numshortblocks by 1%
+ {\stepcounter{qr@i}%
+ \qr@splitoffblock{\qr@codetext}{\theqr@i}{\qr@shortblock@size}%
+ }%
+ \xa\ifnum\qr@numlongblocks>0\relax%
+ \qr@for \j = 1 to \qr@numlongblocks by 1%
+ {\stepcounter{qr@i}%
+ \qr@splitoffblock{\qr@codetext}{\theqr@i}{\qr@longblock@size}%
+ }%
+ \fi%
+}%
+
+\def\qr@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@for \i = 1 to #3 by 1%
+ {\edef\qr@argument{{#2}(#1)}%
+ \xa\qr@splitoffblock@int\qr@argument%
+ }%
+}%
+
+\def\qr@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@codetext{#4}%
+}%
+
+\def\qr@createerrorblocks{%
+ \qr@for \ii = 1 to \qr@numblocks by 1%
+ {\qrmessage{<Making error block \the\ii>}%
+ \FX@generate@errorbytes{\csname datablock@\the\ii\endcsname}{\qr@num@eccodewords}%
+ \xa\xdef\csname errorblock@\the\ii\endcsname{\FX@errorbytes}%
+ }%
+}%
+
+\def\qr@interleave{%
+ \setcounter{qr@i}{0}%
+ \def\qr@interleaved@text{}%
+ \qrmessage{<Interleaving datablocks of length \qr@shortblock@size\space and \qr@longblock@size: }%
+ \qr@for \ii = 1 to \qr@shortblock@size by 1%
+ {\qr@for \jj = 1 to \qr@numblocks by 1%
+ {\qr@writefromblock{datablock}{\the\jj}%
+ }%
+ \qrmessage{\the\ii,}%
+ }%
+ %The long blocks are numbered \qr@numshortblocks+1, \qr@numshortblocks+2, ..., \qr@numblocks.
+ \qr@a=\qr@numshortblocks\relax%
+ \advance\qr@a by 1\relax%
+ \qr@for \jj = \qr@a to \qr@numblocks by 1%
+ {\qr@writefromblock{datablock}{\the\jj}}%
+ \xa\ifnum\qr@numlongblocks>0\relax%
+ \qrmessage{\qr@longblock@size.>}%
+ \else
+ \qrmessage{.>}%
+ \fi
+ \qrmessage{<Interleaving errorblocks of length \qr@num@eccodewords: }%
+ \qr@for \ii = 1 to \qr@num@eccodewords by 1%
+ {\qrmessage{\the\ii,}%
+ \qr@for \jj = 1 to \qr@numblocks by 1%
+ {\qr@writefromblock{errorblock}{\the\jj}%
+ }%
+ }%
+ \qrmessage{.><Interleaving complete.>}%
+}%
+
+\def\qr@writefromblock#1#2{%
+ % #1 = either 'datablock' or 'errorblock'
+ % #2 = block number, in {1,...,\qr@numblocks}%
+ \edef\qr@argument{(\csname #1@#2\endcsname\relax\relax\relax)}%
+ \xa\qr@writefromblock@int\qr@argument
+ \xa\xdef\csname #1@#2\endcsname{\qr@writefromblock@remainder}%
+}%
+
+\def\qr@writefromblock@int(#1#2#3){%
+ % #1#2 = first byte (in hex) of text, which will be written to \qr@interleaved@text
+ % #3 = remainder, including \relax\relax\relax terminator.
+ \g@addto@macro{\qr@interleaved@text}{#1#2}%
+ \qr@writefromblock@intint(#3)%
+}%
+
+\def\qr@writefromblock@intint(#1\relax\relax\relax){%
+ \xdef\qr@writefromblock@remainder{#1}%
+}%
+\let\xa=\expandafter
+
+\def\preface@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@leadingcoeff
+\def\qr@testleadingcoeff(#1#2){%
+ % Tests whether the leading digit of #1#2 is 1.
+ \ifnum#1=1\relax
+ \qr@leadingcoefftrue
+ \else
+ \qr@leadingcoefffalse
+ \fi
+}%
+
+\def\qr@polynomialdivide#1#2{%
+ \edef\qr@numerator{#1}%
+ \edef\qr@denominator{#2}%
+ \qr@divisiondonefalse%
+ \xa\xa\xa\qr@oneroundofdivision\xa\xa\xa{\xa\qr@numerator\xa}\xa{\qr@denominator}%
+}%
+
+\def\@qr@empty{}%
+\def\qr@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@testleadingcoeff(#1)%
+ \ifqr@leadingcoeff
+ \qr@xorbitstrings{#1}{#2}%
+ \ifqr@xorfailed
+ %If xor failed, that means our #1 was already the remainder!
+ \qr@divisiondonetrue
+ \edef\theremainder{#1}%
+ \else
+ %xor succeeded. We need to recurse.
+ \xa\xa\xa\edef\xa\xa\xa\qr@numerator\xa\xa\xa{\xa\qr@stripleadingzero\xa(\xorresult)}%
+ \fi
+ \else
+ \xa\def\xa\qr@numerator\xa{\qr@stripleadingzero(#1)}%
+ \ifx\qr@numerator\@qr@empty
+ \qr@divisiondonetrue
+ \def\theremainder{0}%
+ \fi
+ \fi
+ \ifqr@divisiondone
+ \relax
+ \else
+ \xa\qr@oneroundofdivision\xa{\qr@numerator}{#2}%
+ \fi
+}%
+
+\def\qr@stripleadingzero(0#1){#1}%Strips off a leading zero.
+
+\newif\ifqr@xorfailed% This flag will trigger when #2 is longer than #1.
+
+\def\qr@xorbitstrings#1#2{%
+ % #1 = bitstring
+ % #2 = bitstring no longer than #1
+ \qr@xorfailedfalse
+ \edef\qr@argument{(,#1\relax\relax)(#2\relax\relax)}%
+ \xa\qr@xorbitstrings@recursive\qr@argument
+ %\qr@xorbitstrings@recursive(,#1\relax\relax)(#2\relax\relax)%
+}%
+
+\def\qr@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@xorbit@saveresult(#1#2#3)%
+ \else
+ %Problem! The second string was longer than the first.
+ \qr@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@xorbit@saveresult(#1#2#3)%
+ \else
+ % Yes, #4 still has something to XOR. Do the task.
+ \ifnum#2=#4\relax
+ \qr@xorbitstrings@recursive(#1%
+ 0,#3)(#5)%
+ \else
+ \qr@xorbitstrings@recursive(#1%
+ 1,#3)(#5)%
+ \fi
+ \fi
+ \fi
+}%
+
+\def\qr@xorbit@saveresult(#1\relax\relax){%
+ %Strips off the extra '\relax'es at the end.
+ \def\xorresult{#1}%
+}%
+
+\newif\ifqr@divisiondone
+\def\dodivision#1#2{%
+ \qr@divisiondonefalse
+ \dodivision@recursive{#1}{#2}%
+}%
+
+\def\BCHcode#1{%
+ \edef\formatinfo{#1}%
+ \def\formatinfopadded{\formatinfo 0000000000}%
+ \def\qr@divisor{10100110111}%
+ \qr@divisiondonefalse
+ \qr@polynomialdivide{\formatinfopadded}{\qr@divisor}%
+ %
+ \qr@getstringlength{\theremainder}%
+ %Run loop from stringlength+1 to 10.
+ \qr@a=\qr@stringlength\relax%
+ \advance\qr@a by 1\relax%
+ \qr@for \i = \qr@a to 10 by 1%
+ {\preface@macro{\theremainder}{0}%
+ \xdef\theremainder{\theremainder}%
+ }%
+ \edef\BCHresult{\formatinfo\theremainder}%
+}%
+
+\def\qr@formatmask{101010000010010}%
+
+\def\qr@encodeandmaskformat#1{%
+ \BCHcode{#1}%
+ \qr@xorbitstrings{\BCHresult}{\qr@formatmask}%
+ \edef\qr@format@bitstring{\xorresult}%
+}%
+
+\def\qr@Golaycode#1{%
+ % #1 = 6-bit version number
+ \edef\qr@versioninfo{#1}%
+ \def\qr@versioninfopadded{\qr@versioninfo 000000000000}% %Append 12 zeros.
+ \def\qr@divisor{1111100100101}%
+ \qr@divisiondonefalse
+ \qr@polynomialdivide{\qr@versioninfopadded}{\qr@divisor}%
+ %
+ \qr@getstringlength{\theremainder}%
+ %Run loop from stringlength+1 to 12.
+ \qr@a=\qr@stringlength\relax%
+ \advance\qr@a by 1\relax%
+ \qr@for \i = \qr@a to 12 by 1%
+ {\preface@macro{\theremainder}{0}%
+ \xdef\theremainder{\theremainder}%
+ }%
+ \edef\Golayresult{\qr@versioninfo\theremainder}%
+}%
+\def\F@result{}%
+
+\def\qr@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@xor@result{}%
+ \edef\qr@argument{(#2\relax\relax)(#3\relax\relax)}%
+ \xa\qr@xorbitstring@recursive\qr@argument%
+ \edef#1{\qr@xor@result}%
+}%
+\def\qr@xorbitstring@recursive(#1#2)(#3#4){%
+ \edef\testi{#1}%
+ \ifx\testi\@relax%
+ %Done.
+ \let\qr@next=\relax%
+ \else
+ \if#1#3\relax
+ \g@addto@macro{\qr@xor@result}{0}%
+ \else
+ \g@addto@macro{\qr@xor@result}{1}%
+ \fi
+ \edef\qr@next{\noexpand\qr@xorbitstring@recursive(#2)(#4)}%
+ \fi
+ \qr@next
+}
+
+\def\F@addchar@raw#1#2{%
+ %Add two hexadecimal digits using bitwise xor
+ \qr@hextobinary[4]{\summandA}{#1}%
+ \qr@hextobinary[4]{\summandB}{#2}%
+ \qr@xorbitstring{\F@result}{\summandA}{\summandB}%
+ \qr@binarytohex[1]{\F@result}{\F@result}%
+}%
+
+\def\canceltwos#1{%
+ \edef\qr@argument{(#1\relax\relax)}%
+ \xa\canceltwos@int\qr@argument%
+}%
+
+\def\canceltwos@int(#1#2){%
+ \xa\canceltwos@recursion(,#1#2)%
+}%
+
+\def\canceltwos@recursion(#1,#2#3){%
+ \def\testii{#2}%
+ \ifx\testii\@relax
+ %Cancelling complete.
+ \striptworelaxes(#1#2#3)%
+ %Now \F@result contains the answer.
+ \else
+ \relax
+ \ifnum#2=2\relax
+ \canceltwos@recursion(#10,#3)%
+ \else
+ \canceltwos@recursion(#1#2,#3)%
+ \fi
+ \fi
+}%
+
+\def\striptworelaxes(#1\relax\relax){%
+ \gdef\F@result{#1}%
+}%
+
+\qr@for \i = 0 to 15 by 1%
+ {\qr@decimaltohex[1]{\qr@tempa}{\the\i}%
+ \qr@for \j = 0 to 15 by 1%
+ {\qr@decimaltohex[1]{\qr@tempb}{\the\j}%
+ \F@addchar@raw\qr@tempa\qr@tempb
+ \xa\xdef\csname F@addchar@\qr@tempa\qr@tempb\endcsname{\F@result}%
+ }%
+ }%
+
+\def\F@addchar#1#2{%
+ \xa\def\xa\F@result\xa{\csname F@addchar@#1#2\endcsname}%
+}%
+
+\def\F@addstrings#1#2{%
+ \edef\qr@argument{(,#1\relax\relax)(#2\relax\relax)}%
+ \xa\F@addstrings@recursion\qr@argument%
+}%
+
+\def\F@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@result{#1}%
+ \else
+ \ifx\testiv\@relax
+ %The second string is over.
+ \striptworelaxes(#1#2#3)%
+ %Now \F@result contains the answer.
+ \else
+ %We continue to add.
+ \F@addchar{#2}{#4}%
+ \edef\qr@argument{(#1\F@result,#3)(#5)}%
+ \xa\F@addstrings@recursion\qr@argument%
+ \fi
+ \fi
+}%
+\gdef\F@stripleadingzero(0#1){\edef\F@result{#1}}%
+
+\qr@i=0%
+\def\poweroftwo{1}%
+\qr@for \i = 1 to 254 by 1%
+ {\global\advance\qr@i by1%
+ \qr@a=\poweroftwo\relax
+ \multiply\qr@a by 2\relax
+ \edef\poweroftwo{\the\qr@a}%
+ %\show\poweroftwo
+ \qr@decimaltohex[2]{\poweroftwo@hex}{\poweroftwo}%
+ \xa\ifnum\poweroftwo>255\relax
+ %We need to bitwise add the polynomial represented by 100011101, i.e. 0x11d.
+ \F@addstrings{\poweroftwo@hex}{11d}% %Now it should start with 0.
+ \xa\F@stripleadingzero\xa(\F@result)% %Now it should be two hex digits.
+ \edef\poweroftwo@hex{\F@result}% %Save the hex version.
+ \qr@hextodecimal{\poweroftwo}{\F@result}%
+ \fi
+ \xdef\poweroftwo{\poweroftwo}%
+ \xa\xdef\csname F@twotothe@\theqr@i\endcsname{\poweroftwo@hex}%
+ \xa\xdef\csname F@logtwo@\poweroftwo@hex\endcsname{\theqr@i}%
+ }%
+\xa\xdef\csname F@twotothe@0\endcsname{01}%
+\xa\xdef\csname F@logtwo@01\endcsname{0}%
+
+\def\F@twotothe#1{%
+ \xa\xdef\xa\F@result\xa{\csname F@twotothe@#1\endcsname}%
+}%
+\def\F@logtwo#1{%
+ \xa\xdef\xa\F@result\xa{\csname F@logtwo@#1\endcsname}%
+}%
+
+\def\@zerozero{00}%
+
+\def\F@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@result
+ \edef\argA{#1}%
+ \edef\argB{#2}%
+ \ifx\argA\@zerozero
+ \def\F@result{00}%
+ \else
+ \ifx\argB\@zerozero
+ \def\F@result{00}%
+ \else
+ \xa\F@logtwo\xa{\argA}%
+ \edef\logA{\F@result}%
+ \xa\F@logtwo\xa{\argB}%
+ \edef\logB{\F@result}%
+ \xa\qr@a\xa=\logA\relax% \qr@a = \logA
+ \xa\advance\xa\qr@a\logB\relax% \advance \qr@a by \logB
+ \ifnum\qr@a>254\relax%
+ \advance\qr@a by -255\relax%
+ \fi%
+ \xa\F@twotothe\xa{\the\qr@a}%
+ % Now \F@result contains the product, as desired.
+ \fi
+ \fi
+}%
+
+\def\F@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@result
+ \edef\argA{#1}%
+ \edef\argB{#2}%
+ \ifx\argA\@zerozero
+ \def\F@result{00}%
+ \else
+ \ifx\argB\@zerozero
+ \def\F@result{00}%
+ \else
+ \xa\F@logtwo\xa{\argA}%
+ \edef\logA{\F@result}%
+ \xa\F@logtwo\xa{\argB}%
+ \edef\logB{\F@result}%
+ \xa\qr@a\xa=\logA\relax% \qr@a = \logA
+ \xa\advance\xa\qr@a\logB\relax% \advance \qr@a by \logB
+ \ifnum\qr@a>254\relax%
+ \advance\qr@a by -255\relax%
+ \fi%
+ \xa\F@twotothe\xa{\the\qr@a}%
+ % Now \F@result contains the product, as desired.
+ \fi
+ \fi
+}%
+
+\def\FX@getstringlength#1{%
+ %Count number of two-character coefficients
+ \setcounter{qr@i}{0}%
+ \xdef\qr@argument{(#1\relax\relax\relax)}%
+ \xa\FX@stringlength@recursive\qr@argument%
+ \xdef\stringresult{\arabic{qr@i}}%
+}%
+
+\def\FX@stringlength@recursive(#1#2#3){%
+ \def\testi{#1}%
+ \ifx\testi\@relax
+ %we are done.
+ \else
+ \stepcounter{qr@i}%
+ %\showthe\c@qr@i
+ \qr@stringlength@recursive(#3)%
+ \fi
+}%
+
+\newif\ifFX@leadingcoeff@zero
+\def\FX@testleadingcoeff(#1#2#3){%
+ % Tests whether the leading coefficient of the hex-string #1#2#3 is '00'.
+ \edef\FX@leadingcoefficient{#1#2}%
+ \FX@leadingcoeff@zerofalse
+ \ifx\FX@leadingcoefficient\@zerozero
+ \FX@leadingcoeff@zerotrue
+ \fi
+}%
+
+\newif\ifFX@divisiondone
+
+\newcount\qr@divisionsremaining %Keep track of how many divisions to go!
+\def\FX@polynomialdivide#1#2{%
+ \edef\FX@numerator{#1}%
+ \edef\denominator{#2}%
+ \qr@getstringlength\FX@numerator%
+ \setcounter{qr@divisionsremaining}{\qr@stringlength}%
+ \qr@getstringlength\denominator%
+ \addtocounter{qr@divisionsremaining}{-\qr@stringlength}%
+ \addtocounter{qr@divisionsremaining}{2}%
+ \divide\qr@divisionsremaining by 2\relax% %2 hex chars per number
+ \FX@divisiondonefalse%
+ \xa\xa\xa\FX@polynomialdivide@recursive\xa\xa\xa{\xa\FX@numerator\xa}\xa{\denominator}%
+}%
+
+\def\FX@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@testleadingcoeff(#1)%
+ \ifFX@leadingcoeff@zero%
+ %Leading coefficient is zero, so remove it.
+ \xa\def\xa\FX@numerator\xa{\FX@stripleadingzero(#1)}%
+ \else%
+ %Leading coefficient is nonzero, and contained in \FX@leadingcoefficient
+ \FX@subtractphase{#1}{#2}{\FX@leadingcoefficient}%
+ \ifFX@subtract@failed%
+ %If subtraction failed, that means our #1 was already the remainder!
+ \FX@divisiondonetrue%
+ \edef\theremainder{#1}%
+ \else%
+ %xor succeeded. We need to recurse.
+ \xa\xa\xa\edef\xa\xa\xa\FX@numerator\xa\xa\xa{\xa\FX@stripleadingzero\xa(\FX@subtraction@result)}%
+ \fi%
+ \fi%
+ \addtocounter{qr@divisionsremaining}{-1}%
+ \ifnum\qr@divisionsremaining=0\relax
+ %Division is done!
+ \FX@divisiondonetrue%
+ \edef\theremainder{\FX@numerator}%
+ \relax%
+ \else%
+ \xa\FX@polynomialdivide@recursive\xa{\FX@numerator}{#2}%
+ \fi%
+}%
+
+\def\FX@stripleadingzero(00#1){#1}%Strips off a single leading zero of F_256.
+
+\newif\ifFX@subtract@failed% This flag will trigger when #2 is longer than #1.
+
+\def\FX@subtractphase#1#2#3{%
+ % #1 = bitstring
+ % #2 = bitstring no longer than #1
+ % #3 = leading coefficient
+ \FX@subtract@failedfalse%
+ \edef\qr@argument{(,#1\relax\relax\relax)(#2\relax\relax\relax)(#3)}%
+ \xa\FX@subtract@recursive\qr@argument%
+}%
+
+\def\FX@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@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@subtract@failedtrue
+ \def\FX@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@subtract@saveresult(#1#2#3#4)%
+ \else
+ % Yes, #5#6 still has something to XOR. Do the task.
+ \F@multiply{#5#6}{#8}% Multiply by the factor 'a'.
+ \F@addstrings{#2#3}{\F@result}% Subtract. (We're in characteristic two, so adding works.)
+ \edef\qr@argument{(#1\F@result,#4)(#7)(#8)}%
+ \xa\FX@subtract@recursive\qr@argument%
+ \fi
+ \fi
+}%
+
+\def\FX@subtract@saveresult(#1\relax\relax\relax){%
+ %Strips off the three extra '\relax'es at the end.
+ \def\FX@subtraction@result{#1}%
+}%
+
+\def\FX@creategeneratorpolynomial#1{%
+ % #1 = n, the number of error codewords desired.
+ % We need to create \prod_{j=0}^{n-1} (x-2^j).
+ \edef\FX@generator@degree{#1}%
+ \def\FX@generatorpolynomial{01}% Initially, set it equal to 1.
+ \setcounter{qr@i}{0}%
+ \FX@creategenerator@recursive%
+ %The result is now stored in \FX@generatorpolynomial
+}%
+
+\def\FX@creategenerator@recursive{%
+ % \c@qr@i contains the current value of i.
+ % \FX@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@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@generatorpolynomial 00}% This is f(x) * x
+ \edef\summandB{00\FX@generatorpolynomial}% This is f(x), with a 0x^{i+1} in front.
+ \F@twotothe{\theqr@i}%
+ \edef\theconstant{\F@result}%
+ \FX@subtractphase{\summandA}{\summandB}{\theconstant}%
+ %This calculates \summandA + \theconstant * \summandB
+ %and stores the result in \FX@subtraction@result
+ \edef\FX@generatorpolynomial{\FX@subtraction@result}%
+ \stepcounter{qr@i}%
+ \xa\ifnum\FX@generator@degree=\qr@i\relax%
+ %We just multiplied by (x-2^{n-1}), so we're done.
+ \relax%
+ \else%
+ %We need to do this again!
+ \xa%
+ \FX@creategenerator@recursive%
+ \fi%
+}%
+
+\def\FX@generate@errorbytes#1#2{%
+ % #1 = datastream in hex
+ % #2 = number of error correction bytes requested
+ \edef\numerrorbytes{#2}%
+ \xa\FX@creategeneratorpolynomial\xa{\numerrorbytes}%
+ \edef\FX@numerator{#1}%
+ \qr@for \i = 1 to \numerrorbytes by 1%
+ {\g@addto@macro\FX@numerator{00}}% %One error byte means two hex codes.
+ \FX@polynomialdivide{\FX@numerator}{\FX@generatorpolynomial}%
+ \edef\FX@errorbytes{\theremainder}%
+}%
+\newif\ifqr@versionmodules
+
+\def\qr@level@char#1{%
+ \xa\ifcase#1
+ M\or L\or H\or Q\fi}%
+
+\newif\ifqr@versiongoodenough
+\def\qr@choose@best@version#1{%
+ % \qr@desiredversion = user-requested version
+ % \qr@desiredlevel = user-requested error-correction level
+ \edef\qr@plaintext{#1}%
+ \qr@getstringlength{\qr@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@versiongoodenoughfalse%
+ \gdef\qr@bestversion{0}%
+ \gdef\qr@bestlevel{0}%
+ \ifnum\qr@desiredversion=0\relax
+ \qr@a=1\relax
+ \else
+ \qr@a=\qr@desiredversion\relax
+ \fi
+ \qr@for \i=\qr@a to 40 by 1
+ {\edef\qr@version{\the\i}%
+ \global\qr@versiongoodenoughfalse
+ \qr@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@a = \j\relax
+ \divide \qr@a by 2\relax
+ \multiply \qr@a by 4\relax
+ \advance \qr@a by 1\relax
+ \advance \qr@a by -\j\relax
+ \edef\qr@level{\the\qr@a}%
+ \ifnum\qr@desiredlevel=\qr@a\relax
+ \global\qr@versiongoodenoughtrue
+ \fi
+ \ifqr@versiongoodenough
+ \qr@calculate@capacity{\qr@version}{\qr@level}%
+ \xa\xa\xa\ifnum\xa\qr@truecapacity\xa<\qr@stringlength\relax
+ %Too short
+ \relax
+ \else
+ %Long enough!
+ \xdef\qr@bestversion{\qr@version}%
+ \xdef\qr@bestlevel{\qr@level}%
+ \global\i=40%
+ \fi
+ \fi
+ }%
+ }%
+ \edef\qr@version{\qr@bestversion}%
+ \edef\qr@level{\qr@bestlevel}%
+ \xa\ifnum\qr@desiredversion>0\relax
+ \ifx\qr@bestversion\qr@desiredversion\relax
+ %No change from desired version.
+ \else
+ %Version was increased
+ \qrmessage{<Requested QR version '\qr@desiredversion' is too small for desired text.}%
+ \qrmessage{Version increased to '\qr@bestversion' to fit text.>^^J}%
+ \fi
+ \fi
+ \ifx\qr@bestlevel\qr@desiredlevel\relax
+ %No change in level.
+ \else
+ \qrmessage{<Error-correction level increased from \qr@level@char{\qr@desiredlevel}}%
+ \qrmessage{to \qr@level@char{\qr@bestlevel} at no cost.>^^J}%
+ \fi
+}%
+
+\def\qr@calculate@capacity#1#2{%
+ \edef\qr@version{#1}%
+ \edef\qr@level{#2}%
+ %Calculate \qr@size, the number of modules per side.
+ % The formula is 4\qr@version+17.
+ \qr@a=\qr@version\relax%
+ \multiply\qr@a by 4\relax%
+ \advance\qr@a by 17\relax%
+ \xdef\qr@size{\the\qr@a}%
+ %
+ % Calculate \qr@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@version / 7 ), except that k=0 for version 1.
+ \xa\ifnum\qr@version=1\relax%
+ \def\qr@k{0}%
+ \else%
+ \qr@a=\qr@version\relax
+ \divide \qr@a by 7\relax
+ \advance\qr@a by 2\relax
+ \edef\qr@k{\the\qr@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@a=\qr@size\relax
+ \multiply\qr@a by 2\relax
+ \advance\qr@a by 160\relax
+ \xa\ifnum\qr@k=0\relax\else
+ %\qr@k is nonzero, hence at least 2, so we continue to add 25(k^2-3)-10(k-2).
+ \qr@b=\qr@k\relax
+ \multiply\qr@b by \qr@k\relax
+ \advance\qr@b by -3\relax
+ \multiply\qr@b by 25\relax
+ \advance\qr@a by \qr@b\relax
+ \qr@b=\qr@k\relax
+ \advance\qr@b by -2\relax
+ \multiply\qr@b by 10\relax
+ \advance\qr@a by -\qr@b\relax
+ \fi
+ \edef\qr@numfunctionpatternmodules{\the\qr@a}%
+ %
+ %Calculate the number of version modules, either 36 or 0.
+ \xa\ifnum\qr@version>6\relax
+ \qr@versionmodulestrue
+ \def\qr@numversionmodules{36}%
+ \else
+ \qr@versionmodulesfalse
+ \def\qr@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@numdatacodewords;
+ %the leftover bits are \qr@numremainderbits.
+ \qr@a=\qr@size\relax
+ \multiply \qr@a by \qr@size\relax
+ \advance \qr@a by -\qr@numfunctionpatternmodules\relax
+ \advance \qr@a by -31\relax% % There are 31 format modules.
+ \advance \qr@a by -\qr@numversionmodules\relax
+ \qr@b=\qr@a\relax
+ \divide \qr@a by 8\relax
+ \edef\qr@numdatacodewords{\the\qr@a}%
+ \multiply\qr@a by 8\relax
+ \advance \qr@b by -\qr@a\relax
+ \edef\qr@numremainderbits{\the\qr@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@version<10\relax
+ \def\qr@charactercountbytes@byte{1}%
+ \def\qr@charactercountbits@byte{8}%
+ \else
+ \def\qr@charactercountbytes@byte{2}%
+ \def\qr@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@totaldatacodewords.
+ % The following macro sets \qr@numblocks and \qr@num@eccodewords
+ % based on Table 9 of the QR specification.
+ \qr@settableix
+ \qr@a = -\qr@numblocks\relax
+ \multiply \qr@a by \qr@num@eccodewords\relax
+ \advance\qr@a by \qr@numdatacodewords\relax
+ \edef\qr@totaldatacodewords{\the\qr@a}%
+ \advance\qr@a by -\qr@charactercountbytes@byte\relax%Subtract character count
+ \advance\qr@a by -1\relax% Subtract 1 byte for the 4-bit mode indicator and the 4-bit terminator at the end.
+ \edef\qr@truecapacity{\the\qr@a}%
+}
+
+\def\qr@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@version{#1}%
+ \edef\qr@level{#2}%
+ %
+ \qr@calculate@capacity{\qr@version}{\qr@level}%
+ %The capacity-check code sets the following:
+ % * \qr@size
+ % * \qr@k
+ % * \ifqr@versionmodules
+ % * \qr@numversionmodules
+ % * \qr@numdatacodewords
+ % * \qr@numremainderbits
+ % * \qr@charactercountbits@byte
+ % * \qr@charactercountbytes@byte
+ % * \qr@numblocks (via \qr@settableix)
+ % * \qr@num@eccodewords (via \qr@settableix)
+ % * \qr@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@a = \qr@size\relax
+ \advance\qr@a by -13\relax
+ \multiply\qr@a by 2\relax
+ \qr@b = \qr@k\relax
+ \advance \qr@b by -1\relax
+ \divide\qr@a by \qr@b\relax
+ \advance\qr@a by 3\relax
+ \divide\qr@a by 4\relax
+ \multiply\qr@a by 2\relax
+ \edef\qr@alignment@generalskip{\the\qr@a}%
+ %
+ %Now set \qr@alignment@firstskip to (\qr@size-13)-(\qr@k-2)*\qr@alignment@generalskip %
+ \qr@a = \qr@k\relax
+ \advance\qr@a by -2\relax
+ \multiply\qr@a by -\qr@alignment@generalskip\relax
+ \advance\qr@a by \qr@size\relax
+ \advance\qr@a by -13\relax
+ \edef\qr@alignment@firstskip{\the\qr@a}%
+ %
+ %
+ %
+ % Our \qr@totaldatacodewords bytes of data are broken up as evenly as possible
+ % into \qr@numblocks datablocks; some may be one byte longer than others.
+ % We set \qr@shortblock@size to floor(\qr@totaldatacodewords / \qr@numblocks)
+ % and \qr@numlongblocks to mod(\qr@totaldatacodewords , \qr@numblocks).
+ \qr@a=\qr@totaldatacodewords\relax
+ \divide\qr@a by \qr@numblocks\relax
+ \edef\qr@shortblock@size{\the\qr@a}%
+ \multiply\qr@a by -\qr@numblocks\relax
+ \advance\qr@a by \qr@totaldatacodewords\relax
+ \edef\qr@numlongblocks{\the\qr@a}%
+ %
+ %Set \qr@longblock@size to \qr@shortblock@size+1.
+ \qr@a=\qr@shortblock@size\relax
+ \advance\qr@a by 1\relax
+ \edef\qr@longblock@size{\the\qr@a}%
+ %
+ %Set \qr@numshortblocks to \qr@numblocks - \qr@numlongblocks
+ \qr@b=\qr@numblocks\relax
+ \advance\qr@b by -\qr@numlongblocks\relax
+ \edef\qr@numshortblocks{\the\qr@b}%
+}%
+
+\def\qr@settableix@int(#1,#2){%
+ \edef\qr@numblocks{#1}%
+ \edef\qr@num@eccodewords{#2}%
+}%
+
+\def\qr@settableix{%
+\xa\ifcase\qr@level\relax
+ %00: Level 'M', medium error correction
+ \edef\tempdata{(%
+ \ifcase\qr@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@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@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@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@settableix@int\tempdata
+}%
+
+\def\@qr@M{M}\def\@qr@z{0}%
+\def\@qr@L{L}\def\@qr@i{1}%
+\def\@qr@H{H}\def\@qr@ii{2}%
+\def\@qr@Q{Q}\def\@qr@iii{3}%
+\def\qr@setlevel#1{%
+ \edef\qr@level@selected{#1}%
+ \ifx\qr@level@selected\@qr@M
+ \edef\qr@desiredlevel{0}%
+ \fi
+ \ifx\qr@level@selected\@qr@L
+ \edef\qr@desiredlevel{1}%
+ \fi
+ \ifx\qr@level@selected\@qr@H
+ \edef\qr@desiredlevel{2}%
+ \fi
+ \ifx\qr@level@selected\@qr@Q
+ \edef\qr@desiredlevel{3}%
+ \fi
+ \ifx\qr@level@selected\@qr@z
+ \edef\qr@desiredlevel{0}%
+ \fi
+ \ifx\qr@level@selected\@qr@i
+ \edef\qr@desiredlevel{1}%
+ \fi
+ \ifx\qr@level@selected\@qr@ii
+ \edef\qr@desiredlevel{2}%
+ \fi
+ \ifx\qr@level@selected\@qr@iii
+ \edef\qr@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@setlevel{\kv{level}}%
+ \edef\qr@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@i
+}
+\def\qrcode@i#1{\xdef\qretext{#1}\gdef\qrtext{#1}\egroup
+ \qrcode@int
+ \xprncodesave
+ \endgroup
+}
+
+\def\qrcode@int{%
+ \qrmessage{<QR code requested for "\qretext" in version
+ \qr@desiredversion-\qr@level@char{\qr@desiredlevel}.>^^J}%
+ %First, choose the version and level.
+ %Recall that \qr@choose@best@version sets \qr@version and \qr@level.
+ \xa\qr@choose@best@version\xa{\qretext}%
+ \if1\kv{qr-final}%
+ \qr@setversion{\qr@version}{\qr@level}%
+ \qrcode@int@new
+ \else
+ \qrmodulesize=\qrdesiredheight%
+ \divide\qrmodulesize by \qr@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@int@new{%
+ \qrbeginhook
+ \qr@createsquareblankmatrix{newqr}{\qr@size}%
+ \qr@placefinderpatterns{newqr}%
+ \qr@placetimingpatterns{newqr}%
+ \qr@placealignmentpatterns{newqr}%
+ \qr@placedummyformatpatterns{newqr}%
+ \qr@placedummyversionpatterns{newqr}%
+ \qrmessage{<Calculating QR code for "\qretext" in
+ version \qr@version-\qr@level@char{\qr@level}.>^^J}%
+ \xa\qr@encode@binary\xa{\qretext}%
+ \qr@splitcodetextintoblocks
+ \qr@createerrorblocks
+ \qr@interleave
+ \qrmessage{<Writing data...}%
+ \qr@writedata@hex{newqr}{\qr@interleaved@text}%
+ \qrmessage{done.>^^J}%
+ \qr@writeremainderbits{newqr}%
+ \qr@chooseandapplybestmask{newqr}%
+ \qr@decimaltobinary[2]{\level@binary}{\qr@level}%
+ \qr@decimaltobinary[3]{\mask@binary}{\qr@mask@selected}%
+ \edef\formatstring{\level@binary\mask@binary}%
+ \qrmessage{<Encoding and writing format string...}%
+ \xa\qr@encodeandmaskformat\xa{\formatstring}%
+ \qr@writeformatstring{newqr}{\qr@format@bitstring}%
+ \qrmessage{done.>^^J}%
+ \qrmessage{<Encoding and writing version information...}%
+ \qr@decimaltobinary[6]{\version@binary}{\qr@version}%
+ \qr@Golaycode{\version@binary}%
+ \qr@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@black{1}\let\qr@black@fixed=\qr@black \let\qr@black@format=\qr@black
+ \def\@white{0}\let\qr@white@fixed=\@white \let\qr@white@format=\@white
+ \qr@for \i = 1 to \qr@size by 1
+ {\qr@for \j = 1 to \qr@size by 1
+ {\xdef\qrdata{\qrdata\qr@matrixentry{#1}{\the\i}{\the\j}}}}%
+ \xdef\qrdata{{\qr@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@i=0 \qr@j=0 \let\next=\qrrestoreB
+ \hbox\bgroup\padd \qrrestoreB #2%
+ \if1\kv{qr-link}\qr@link{\qretext}{\box0}\fi
+}
+\def\qrrestoreB#1{\advance \qr@j by1
+ \ifx1#1\vrule height\qrmodulesize width\qrmodulesize\else \kern\qrmodulesize\fi
+ \ifnum\qr@size=\qr@j \vrule height\qrmodulesize width 0pt \padd\egroup \advance\qr@i by1
+ \ifnum\qr@size=\qr@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)
+Sep. 2018 \isnextchar processed in group
+May 2019 strut included for case of empty line (bug fixed)
diff --git a/macros/generic/olsak-misc/scanbase.tex b/macros/generic/olsak-misc/scanbase.tex
new file mode 100644
index 0000000000..327cc14c84
--- /dev/null
+++ b/macros/generic/olsak-misc/scanbase.tex
@@ -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
diff --git a/macros/generic/olsak-misc/scancsv.tex b/macros/generic/olsak-misc/scancsv.tex
new file mode 100644
index 0000000000..aa1ce26825
--- /dev/null
+++ b/macros/generic/olsak-misc/scancsv.tex
@@ -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.
+
diff --git a/macros/generic/olsak-misc/seplist.tex b/macros/generic/olsak-misc/seplist.tex
new file mode 100644
index 0000000000..0eac4d541a
--- /dev/null
+++ b/macros/generic/olsak-misc/seplist.tex
@@ -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.
diff --git a/macros/generic/olsak-misc/xmlparser.tex b/macros/generic/olsak-misc/xmlparser.tex
new file mode 100644
index 0000000000..0d540f9d05
--- /dev/null
+++ b/macros/generic/olsak-misc/xmlparser.tex
@@ -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@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 &lt; 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@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 &lt; 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; &gt; &amp; (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
+ }
+
+-------------------------------------------------------
+
diff --git a/macros/generic/path/path-doc.pdf b/macros/generic/path/path-doc.pdf
new file mode 100644
index 0000000000..f88f3d8dfd
--- /dev/null
+++ b/macros/generic/path/path-doc.pdf
Binary files differ
diff --git a/macros/generic/path/path-doc.tex b/macros/generic/path/path-doc.tex
new file mode 100644
index 0000000000..9f28e3674e
--- /dev/null
+++ b/macros/generic/path/path-doc.tex
@@ -0,0 +1,146 @@
+\documentclass[pagesize=auto, fontsize=11pt, DIV=9]{scrartcl}
+
+\usepackage{fixltx2e}
+\usepackage{etex}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+\usepackage{hologo}
+\usepackage{microtype}
+\usepackage{hyperref}
+
+\newcommand*{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}
+\newcommand*{\bmail}[1]{\href{mailto:#1}{\texttt{<#1>}}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
+\makeatletter
+\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
+\makeatother
+\newcommand*{\env}[1]{\texttt{#1}}
+
+\addtokomafont{title}{\rmfamily}
+\deffootnote{1em}{0.5em}{\textsuperscript{\thefootnotemark}}
+
+\title{The \pkg{path} package\thanks{This manual corresponds to \pkg{path.sty}~v3.03b, dated~22 July 1997.}}
+\author{Philip Taylor\thanks{The Computer Centre\newline RHBNC, University of London\newline Egham Hill\newline Egham, Surrey TW20 0EX, ENGLAND\newline Tel: +44 1784 443172\newline Fax: +44 1784 434348\newline\mail{P.Taylor@Vms.Rhbnc.Ac.Uk}}}
+\date{22 July 1997}
+
+
+\begin{document}
+
+\maketitle
+
+\noindent
+Computer filenames, host names, and e-mail
+addresses tend to be long strings that
+cause line breaking problems for \TeX\@.
+Sometimes rather long strings are
+encountered, such as:
+%
+\begin{verbatim}
+ mighty-mouse-gw.scrc.symbolics.com
+\end{verbatim}
+%
+This file defines a macro, \verb+\path|...|+, similar to \LaTeX's
+\verb+\verb|...|+ macro, that sets the text in the typewriter font,
+allowing hyphen-less line breaks at punctuation characters. The macro
+\verb+\pathafterhook+ is expanded after the work of \verb+\path|...|+ is
+done.
+
+The default set of punctuation characters is
+defined as
+%
+\begin{verbatim}
+ \discretionaries |~!@$%^&*()_+`-=#{"}[]:;'<>,.?\/|
+\end{verbatim}
+%
+However, you can change it as needed, for
+example
+%
+\begin{verbatim}
+ \discretionaries +@%!.+
+\end{verbatim}
+%
+would assign to it the set \verb+@ % ! .+ which
+commonly occur in electronic mail addresses.
+
+The delimiter characters surrounding the
+arguments to \cmd{\discretionaries} and \cmd{\path}
+will normally be a punctuation character not
+found in the argument, and not otherwise
+significant to \TeX\@. In particular, backslash
+cannot be used as a delimiter. In the rare
+event that this is required, set
+%
+\begin{verbatim}
+ \specialpathdelimiterstrue
+\end{verbatim}
+%
+This practice is not recommended, because \TeX\ %
+then runs about four times slower while it is
+typesetting \verb+\path\...\+ requests.
+\cmd{\specialpathdelimitersfalse} is the normal
+setting.
+
+This file may be used in \hologo{plainTeX} or \hologo{AmSTeX}
+by
+%
+\begin{verbatim}
+ \input path.sty
+\end{verbatim}
+%
+and in \LaTeX\ by
+%
+\begin{verbatim}
+ \usepackage {path}
+\end{verbatim}
+
+The \texttt{checksum} field above, if present, contains
+a CRC-16 checksum as the first value, followed
+by the equivalent of the standard UNIX \texttt{wc} (word
+count) utility output of lines, words, and
+characters. This is produced by Robert
+Solovay's \texttt{checksum} utility.
+
+
+\section*{The \cmd{\path} Macro}
+
+An early prototype of this code which was developed by Nelson~H.~F.
+Beebe \bmail{beebe@math.utah.edu} used a recursive macro to peel off one
+character at a time, then with a nest of \verb+\ifx+ statements, test for
+each punctuation character, and if one is found, insert discretionary
+linebreaks in the form of \cmd{\-} or \verb+\penalty0+\@. While this usually works,
+it is not entirely satisfactory, because the nested \verb+\ifx+ statements
+are ugly, and the recursion can exhaust \TeX's macro stack for
+arguments longer than about 30~characters.
+
+A second version by NHFB built upon the ideas used by the \LaTeX\ %
+\verb+\verb|...|+ macro; this was mostly successful, but was flawed by its
+inability to handle at least the three characters \verb+^ [ ]+, by loss of
+use of \texttt{@} for naming internal private macros, and by its inability to
+allow the set of characters at which breaks are permissible.
+
+The problem was then passed off to Philip Taylor, who wrote this third
+version which fully solves the problem. Phil therefore gets the
+author credit in the file header above. [Gee, thanks~! $**$ Phil]
+
+
+\minisec{Revision history (reverse time order):}
+
+\medskip
+
+\noindent
+\begin{tabular}{@{} p{0.14\linewidth} @{} p{0.86\linewidth} @{}}
+ \multicolumn{2}{@{}l@{}}{3.03b [22-Jul-1997]} \\
+ Summary: & No code changes. An out-of-date example removed, the syntax for \LaTeXe\ changed to ``\verb+\usepackage {path}+'', and the ``checksum'' comments modified to indicate that the checksum is not necessarily present. The initial opening brace re-positioned to align with the matching closing brace, and the inner closing brace re-positioned to align with the inner opening brace. A check made to ensure that no \textsf{\textlangle tab\textrangle} characters are present. \\[\bigskipamount]
+ \multicolumn{2}{@{}l@{}}{3.03a [22-Jul-1997]} \\
+ Summary: & No code changes from V3.03; e-mail addresses, telephone numbers, etc.\ amended to reflect current situation. Checksum removed. \\[\bigskipamount]
+ \multicolumn{2}{@{}l@{}}{3.03 [03-Dec-1991]} \\
+ Problem: & A \verb+\path|...|+ entry in a \LaTeX\ index is set with an preceding blank line. \\
+ Solution: & Add \cmd{\leavevmode} before \verb+\hbox{}+; without it, an extra blank line gets typeset before every invocation of \cmd{\path} in a \LaTeX\ \env{theindex} environment. \\
+ Diagnosis: & To avoid hyphenation, the expansion of \cmd{\path} starts with an \verb+\hbox{}+ (c.\,f.\ the \TeX book, p.~454); \LaTeX\ indices are basically set in vertical mode, with each index entry a paragraph in its own right; when an \verb+\hbox {}+ is encountered in vmode, it is typeset in vmode, and \TeX\ continues; the first real character is encountered, and \TeX\ enters unrestricted horizontal mode. The \verb+\hbox {}+ and the first character are therefore on separate lines, separated by \cmd{\baselineskip}. \\[\bigskipamount]
+ \multicolumn{2}{@{}l@{}}{3.02 [23-Oct-1991 13:45:12]} \\
+ \multicolumn{2}{@{}l@{}}{First released version.}
+\end{tabular}
+
+\end{document}
diff --git a/macros/generic/path/path.sty b/macros/generic/path/path.sty
new file mode 100644
index 0000000000..74b662956f
--- /dev/null
+++ b/macros/generic/path/path.sty
@@ -0,0 +1,351 @@
+%%% @TeX-style-file
+%%% {
+%%% author = "Philip Taylor",
+%%% version = "3.05",
+%%% date = "7 April 2011",
+%%% time = "15:59:31 BST",
+%%% filename = "path.sty",
+%%% license = "Unlimited copying and redistribution of this
+%%% file are permitted as long as this file is
+%%% not modified. Modifications are permitted,
+%%% but only if the resulting file is not named
+%%% path.sty regardless of case",
+%%% address = "c/o The Hellenic Institute
+%%% Royal Holloway, University of London
+%%% Egham Hull, Egham
+%%% Surrey TW20 0EX
+%%% United Kingdom",
+%%% telephone = "Tel: +44 1622 820 735",
+%%% email = "P.Taylor@Rhul.Ac.Uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "file name, filename, path name, pathname,
+%%% discretionary, discretionaries",
+%%% supported = "yes",
+%%% docstring = {Computer filenames, host names, and e-mail
+%%% addresses tend to be long strings that
+%%% cause line breaking problems for TeX.
+%%% Sometimes rather long strings are
+%%% encountered, such as:
+%%%
+%%% mighty-mouse-gw.scrc.symbolics.com
+%%%
+%%% This file defines a macro, \path|...|,
+%%% similar to LaTeX's \verb|...| macro, that
+%%% sets the text in the typewriter font,
+%%% allowing hyphen-less line breaks at
+%%% punctuation characters.
+%%%
+%%% The default set of punctuation characters is
+%%% defined as
+%%%
+%%% \discretionaries |~!@$%^&*()_+`-=#{"}[]:;'<>,.?\/|
+%%%
+%%% However, you can change it as needed, for
+%%% example
+%%%
+%%% \discretionaries +@%!.+
+%%%
+%%% would assign to it the set @ % ! . which
+%%% commonly occur in electronic mail addresses.
+%%%
+%%% The delimiter characters surrounding the
+%%% arguments to \discretionaries and \path
+%%% will normally be a punctuation character not
+%%% found in the argument, and not otherwise
+%%% significant to TeX. In particular, backslash
+%%% cannot be used as a delimiter. In the rare
+%%% event that this is required, set
+%%%
+%%% \specialpathdelimiterstrue
+%%%
+%%% This practice is not recommended, because TeX
+%%% then runs about four times slower while it is
+%%% typesetting \path\...\ requests.
+%%% \specialpathdelimitersfalse is the normal
+%%% setting.
+%%%
+%%% This file may be used in Plain TeX or AmSTeX
+%%% by
+%%%
+%%% \input path.sty
+%%%
+%%% and in LaTeX by
+%%%
+%%% \usepackage {path}
+%%%
+%%% The checksum field above, if present, contains
+%%% a CRC-16 checksum as the first value, followed
+%%% by the equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.
+%%% }
+%%% }
+%%% ====================================================================
+
+% ======================================================================
+%
+% The \path Macro
+%
+% An early prototype of this code which was developed by Nelson H. F.
+% Beebe <beebe@math.utah.edu> used a recursive macro to peel off one
+% character at a time, then with a nest of \ifx statements, test for
+% each punctuation character, and if one is found, insert discretionary
+% linebreaks in the form of \- or \penalty0. While this usually works,
+% it is not entirely satisfactory, because the nested \ifx statements
+% are ugly, and the recursion can exhaust TeX's macro stack for
+% arguments longer than about 30 characters.
+%
+% A second version by NHFB built upon the ideas used by the LaTeX
+% \verb|...| macro; this was mostly successful, but was flawed by its
+% inability to handle at least the three characters ^ [ ], by loss of
+% use of @ for naming internal private macros, and by its inability to
+% allow the set of characters at which breaks are permissible.
+%
+% The problem was then passed off to Philip Taylor, who wrote this third
+% version which fully solves the problem. Phil therefore gets the
+% author credit in the file header above. [Gee, thanks ! ** Phil]
+%
+% Revision history (reverse time order):
+%
+% 3.05 [7-Apr-2011]
+% Summary: Use \path instead of \ATcode to save the catcode of @.
+% Expand \pathafterhook after \path's work is done.
+%
+% 3.04 [incorporated as part of Eplain]
+%
+% 3.03b [22-Jul-1997]
+% Summary: No code changes. An out-of-date example removed, the syntax
+% for LaTeX2e changed to "\usepackage {path}", and the "checksum"
+% comments modified to indicate that the checksum is not necessarily
+% present. The initial opening brace re-positioned to align
+% with the matching closing brace, and the inner closing brace
+% re-positioned to align with the inner opening brace. A check made
+% to ensure that no <tab> characters are present.
+%
+% 3.03a [22-Jul-1997]
+% Summary: No code changes from V3.03; e-mail addresses, telephone numbers,
+% etc. amended to reflect current situation. Checksum removed.
+%
+% 3.03 [03-Dec-1991]
+% Problem: A \path|...| entry in a LaTeX index is set with an
+% preceding blank line.
+% Solution: Add \leavevmode before \hbox{}; without it, an extra blank
+% line gets typeset before every invocation of \path in a
+% LaTeX theindex environment.
+% Diagnosis: To avoid hyphenation, the expansion of \path starts with
+% an \hbox{} (c.f. the TeXbook, p. 454); LaTeX indices are
+% basically set in vertical mode, with each index entry a
+% paragraph in its own right; when an \hbox {} is
+% encountered in vmode, it is typeset in vmode, and TeX
+% continues; the first real character is encountered, and
+% TeX enters unrestricted horizontal mode. The \hbox {} and
+% the first character are therefore on separate lines,
+% separated by \baselineskip.
+%
+% 3.02 [23-Oct-1991 13:45:12]
+% First released version.
+% ======================================================================
+
+\immediate \write 16 {This is path.sty, Version 3.05 <7-Apr-2011>}
+
+%%% The use of `\path' as a temporary control sequence is a kludge, but
+%%% it's a reasonably simple way to accomplish making @ a letter (to
+%%% provide ``concealed'' control sequences) without overwriting something
+%%% (without an `@' in its name) that might already be defined.
+
+\edef \path {\the \catcode `\@}%
+\catcode `\@ = 11
+\let \oldc@tcode = \path
+
+%%% Make commercial-at a letter to provide concealed control sequences
+
+\catcode `\@ = 11
+
+%%% and then declare two \count variables with concealed names
+
+\newcount \c@tcode
+\newcount \c@unter
+
+%%% and a boolean variable with an open name, to specify the nature of
+%%% the delimiters which will be associated with the \path command
+
+\newif \ifspecialpathdelimiters
+
+%%% If desired, you can define \pathafterhook to take
+
+\let \pathafterhook = \relax
+
+%%% We need to define control sequences which expand to both
+%%% active and passive spaces ...
+
+\begingroup
+\catcode `\ = 10
+\gdef \passivesp@ce { }
+\catcode `\ = 13\relax%
+\gdef\activesp@ce{ }%
+\endgroup
+
+%%% \discretionaries will define a macro \discr@ti@n@ri@s which will
+%%% make every character between the first and final <delim> a
+%%% discretionary breakpoint.
+
+\def \discretionaries %%% <delim> <chars> <delim>
+ % start a group (ended in \discr@ti@naries ),
+ % make every character (apart from space) active,
+ % then transfer control to \discr@tionaries ...
+ {\begingroup
+ \c@tcodes = 13
+ \discr@tionaries
+ }
+
+%%% \discr@tionaries will receive as parameter the initial <delim>
+%%% which will delimit the set of discretionaries; this <delim>
+%%% will be active.
+
+\def \discr@tionaries #1%%% <delim>
+ % knowing the initial <delim>, define \discr@ti@naries with a
+ % delimited parameter structure, the final delimiter being
+ % the second instance of <delim>
+ {\def \discr@ti@naries ##1#1%%% <chars> <delim>
+ % \discr@ti@naries will receive as parameter the set of
+ % characters which are to be made discretionaries; it ends the
+ % group and then defines \discr@ti@n@ries, a tail-recursive
+ % macro, which will quietly process each of the
+ % discretionaries in turn ...
+ {\endgroup
+ \def \discr@ti@n@ries ####1%%% <char> or <delim>
+ % by checking to see if it has reached the end of the
+ % list, i.e. comparing its parameter with the known final
+ % <delim> ...
+ {\if \noexpand ####1\noexpand #1%
+ % if they match, there is no more to do ...
+ \let \n@xt = \relax
+ \else
+ % otherwise the character becomes active and is
+ % defined as a discretionary with the three texts
+ % <self> <empty> <self>, thus suppressing true
+ % hyphenation; the macro then prepares to process
+ % the next character.
+ \catcode `####1 = 13
+ \def ####1{\discretionary
+ {\char `####1}{}{\char `####1}}%
+ \let \n@xt = \discr@ti@n@ries
+ \fi
+ % here either tail recursion occurs, if there are more
+ % characters to process, or tail recursion ceases if all
+ % have been exhausted
+ \n@xt
+ }%
+ % of course, none of this must take place during the \stress
+ % {call} of \discretionaries; execution is deferred until
+ % another macro such as \path calls the concealed action
+ % macro \discr@ti@n@ri@s; we therefore define this macro to
+ % have the desired effect.
+ \def \discr@ti@n@ri@s {\discr@ti@n@ries ##1#1}%
+ }%
+ % and finally invoke \discr@ti@naries to process the set of
+ % discretionary characters; it will take everything up to the
+ % second instance of <delim> as its parameter (and therefore as the
+ % set of characters to be processed).
+ \discr@ti@naries
+ }
+
+%%% \path, which is the user interface to \p@th, first checks
+%%% to see whether \specialpathdelimiters is <true> or <false>;
+%%% if <true>, it needs to take special action to ensure that
+%%% \stress {all} characters (apart from <space>) are acceptable
+%%% as delimiters; this is very time-consuming, and should be
+%%% avoided if at all possible. It also defines \endp@th, to
+%%% close the appropriate number of groups, and finally transfers
+%%% control to \p@th
+
+\def \path
+ {\ifspecialpathdelimiters
+ \begingroup
+ \c@tcodes = 12
+ \def \endp@th {\endgroup \endgroup \pathafterhook}%
+ \else
+ \def \endp@th {\endgroup \pathafterhook}%
+ \fi
+ \p@th
+ }
+
+%%% \p@th, which has essentially the same syntax as \discretionaries,
+%%% expects to be followed by a <delim>, a <path>, and a second instance
+%%% of <delim>; it will typeset <path> in the \tt font with hyphenation
+%%% inhibited --- breaks (but not true hyphenation) are allowed at any
+%%% or all of the special characters which have
+%%% previously been declared as \discretionaries.
+
+\def \p@th #1%%% <delim>
+ % it starts by opening a group (ended in \p@@th) ...
+ % switches to \tt, and inhibits hyphenation;
+ % allows breaks at \discretionaries; saves the
+ % catcode of the initial <delim>, because if it has also been
+ % declared within \discretionaries, the initial and final <delim>
+ % won't match (which would be a disaster); \c@tcode is overloaded,
+ % but there is no conflict that I can detect ...
+ % invokes \discr@ti@n@ri@s to render active the set of special
+ % characters which have previously been declared as
+ % \discretionaries; each of these characters will expand to a real
+ % \discretionary, with replacement texts <self> <null> <self>; and
+ % re-instates the catcode of the initial <delim>.
+ {\begingroup
+ \tt
+ \c@tcode = \catcode `#1
+ \discr@ti@n@ri@s
+ \catcode `\ = \active
+ \expandafter \edef \activesp@ce {\passivesp@ce \hbox {}}%
+ \catcode `#1 = \c@tcode
+ % it next defines an inner macro \p@@th with delimited parameter
+ % structure, the final delimiter being the same as the initial
+ % delimiter which it has itself received as #1.
+ \def \p@@th ##1#1% <chars> <delim>
+ % Within \p@@th,
+ % permissible breakpoints are specified,
+ % the path is typeset,
+ % and the group(s) ended.
+ {\leavevmode \hbox {}##1%
+ \endp@th
+ }%
+ \p@@th
+ }
+
+%%% \c@tcodes expects to be followed by the r-h-s of a numeric
+%%% assignment optionally including the assignment operator; it saves
+%%% the value of the r-h-s in \c@tcode, and invokes \c@tc@des.
+
+\def \c@tcodes {\afterassignment \c@tc@des \c@tcode}
+
+%%% \c@tc@des uses the value saved in \c@tcode, and assigns it to the
+%%% \catcode of all characters with the single exception of <space>,
+%%% which retains its normal catcode of 10; on exit, every single
+%%% character apart from <space> will have the catcode which followed
+%%% \c@tcodes. The code is optimised to avoid unnecessary usage of
+%%% save-stack space.
+
+\def \c@tc@des
+ {\c@unter = 0
+ \loop
+ \ifnum \catcode \c@unter = \c@tcode
+ \else
+ \catcode \c@unter = \c@tcode
+ \fi
+ \ifnum \c@unter < 255
+ \advance \c@unter by 1
+ \repeat
+ \catcode `\ = 10
+ }
+
+%%% We restore the original catcode of commercial-at
+
+\catcode `\@ = \oldc@tcode
+
+%%% Define a default set of discretionary break characters
+%%% to include all punctuation characters except vertical
+%%% bar
+
+\discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|
+
+\endinput
diff --git a/macros/generic/pdf-trans/example.pdf b/macros/generic/pdf-trans/example.pdf
new file mode 100644
index 0000000000..de3c6de707
--- /dev/null
+++ b/macros/generic/pdf-trans/example.pdf
@@ -0,0 +1,3635 @@
+%PDF-1.5
+%ÐÔÅØ
+12 0 obj <<
+/Length 2332
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F53 14.944 Tf 28.346 301.848 Td [(box)-525(tra)]TJ
+ET
+1 0 0 1 83.265 301.848 cm
+q 1 0 0 -1 0 9.318 cm
+q 1.0 0.8 0.0 rg
+1 0 0 1 -83.265 -301.848 cm
+BT
+/F53 14.944 Tf 83.265 301.848 Td [(N)]TJ
+ET
+1 0 0 1 91.111 301.848 cm
+ Q 1 0 0 1 7.846 0 cm
+Q 1 0 0 1 7.846 0 cm
+1 0 0 1 -91.111 -301.848 cm
+BT
+/F53 14.944 Tf 91.111 301.848 Td [(sfo)]TJ
+ET
+1 0 0 1 114.648 301.848 cm
+q 0.96593 -0.25882 0.25882 0.96593 3.923 4.659 cm 1 0 0 1 -3.923 -4.659 cm
+q 1.0 0.8 0.0 rg
+1 0 0 1 -114.648 -301.848 cm
+BT
+/F53 14.944 Tf 114.648 301.848 Td [(R)]TJ
+ET
+1 0 0 1 122.493 301.848 cm
+ Q 1 0 0 1 7.846 0 cm
+Q 1 0 0 1 7.846 0 cm
+1 0 0 1 -122.493 -301.848 cm
+BT
+/F53 14.944 Tf 122.493 301.848 Td [(mation)]TJ
+ET
+1 0 0 1 169.567 301.848 cm
+q -1 0 0 1 7.846 0 cm
+q 1.0 0.8 0.0 rg
+1 0 0 1 -169.567 -301.848 cm
+BT
+/F53 14.944 Tf 169.567 301.848 Td [(S)]TJ
+ET
+1 0 0 1 177.412 301.848 cm
+ Q 1 0 0 1 7.846 0 cm
+Q 1 0 0 1 7.846 0 cm
+1 0 0 1 -177.412 -301.848 cm
+BT
+/F53 14.944 Tf 185.258 301.848 Td [(in)]TJ
+ET
+1 0 0 1 208.794 301.848 cm
+q 0.7 g
+1 0 0 1 -208.794 -301.848 cm
+BT
+/F53 14.944 Tf 208.794 301.848 Td [(pdf-trans.tex)]TJ
+ET
+1 0 0 1 310.787 301.848 cm
+ Q 1 0 0 1 101.992 0 cm
+1 0 0 1 -282.441 -132.361 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -28.346 -169.487 cm
+BT
+/F52 59.7758 Tf 28.346 169.487 Td [(g)]TJ
+ET
+1 0 0 1 58.234 169.487 cm
+EMC Q 1 0 0 1 29.888 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -29.888 0 cm 0 -11.623 29.888 38.240 re S [2 2] 1 d 0 0 m 29.888 0 l S EMC Q
+1 0 0 1 -58.234 -169.487 cm
+BT
+/F53 7.9701 Tf 66.603 169.487 Td [(before)]TJ
+ET
+1 0 0 1 28.346 104.894 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -28.346 -104.894 cm
+BT
+/F52 59.7758 Tf 28.346 104.894 Td [(g)]TJ
+ET
+1 0 0 1 58.234 104.894 cm
+EMC Q 1 0 0 1 29.888 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -29.888 0 cm 0 -11.623 29.888 38.240 re S [2 2] 1 d 0 0 m 29.888 0 l S EMC Q
+1 0 0 1 -58.234 -104.894 cm
+BT
+/F53 7.9701 Tf 66.603 104.894 Td [(after)]TJ
+ET
+1 0 0 1 58.234 40.302 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -29.888 0 cm 0 -11.623 29.888 38.240 re S [2 2] 1 d 0 0 m 29.888 0 l S EMC Q
+1 0 0 1 -58.234 -40.302 cm
+BT
+/F53 7.9701 Tf 66.603 40.302 Td [(bounding)-525(box)]TJ
+ET
+1 0 0 1 439.37 28.346 cm
+q 0 1 -1 0 0 0 cm
+1 0 0 1 -439.37 -28.346 cm
+BT
+/F53 7.9701 Tf 439.37 28.346 Td [(P.Jackowski@gust.org.pl)]TJ
+ET
+1 0 0 1 439.37 28.346 cm
+Q 1 0 0 1 0 0 cm
+endstream
+endobj
+21 0 obj <<
+/Length 1012
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q -1 0 0 1 59.776 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxflipx)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxflipx)]TJ
+ET
+endstream
+endobj
+27 0 obj <<
+/Length 1012
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0 0 -1 0 29.987 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxflipy)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxflipy)]TJ
+ET
+endstream
+endobj
+33 0 obj <<
+/Length 1020
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q -1 0 0 -1 59.776 29.987 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxflipxy)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxflipxy)]TJ
+ET
+endstream
+endobj
+39 0 obj <<
+/Length 1013
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0 0 -1 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -53.233 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxflipbase)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxflipbase)]TJ
+ET
+endstream
+endobj
+45 0 obj <<
+/Length 1004
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -53.233 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134bboxtrans)-525({<trans>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134bboxtrans)-525(\134boxflipbase)]TJ
+ET
+endstream
+endobj
+51 0 obj <<
+/Length 1044
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0 0 -1 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134cboxtrans)-525({<trans>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134cboxtrans)-525(\134boxflipbase)]TJ
+ET
+endstream
+endobj
+58 0 obj <<
+/Length 1065
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0 0 1 8.504 5.669 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxtranslate)-525({<dimexpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxtranslate)-525({3mm}{2mm})]TJ
+ET
+endstream
+endobj
+64 0 obj <<
+/Length 1040
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0 1 -1 0 53.233 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 16.704 0 cm
+Q 1 0 0 1 76.479 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -76.479 0 cm 0 0.0 76.479 59.776 re S [2 2] 1 d 0 0 m 76.479 0 l S EMC Q
+1 0 0 1 -244.303 -198.425 cm
+BT
+/F52 119.5517 Tf 244.303 198.425 Td [(a)]TJ/F53 9.9626 Tf -215.957 -152.146 Td [(\134boxrevolveleft)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrevolveleft)]TJ
+ET
+endstream
+endobj
+70 0 obj <<
+/Length 1047
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0 -1 1 0 23.246 59.776 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 16.704 0 cm
+Q 1 0 0 1 76.479 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -76.479 0 cm 0 0.0 76.479 59.776 re S [2 2] 1 d 0 0 m 76.479 0 l S EMC Q
+1 0 0 1 -244.303 -198.425 cm
+BT
+/F52 119.5517 Tf 244.303 198.425 Td [(a)]TJ/F53 9.9626 Tf -215.957 -152.146 Td [(\134boxrevolveright)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrevolveright)]TJ
+ET
+endstream
+endobj
+76 0 obj <<
+/Length 1060
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.82214 -0.56927 0.56927 0.82214 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxrotate)-525({<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrotate)-525({394.7})]TJ
+ET
+endstream
+endobj
+82 0 obj <<
+/Length 1186
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.82709 -0.56209 0.56209 0.82709 59.776 53.233 cm 1 0 0 1 -59.776 -53.233 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxrotatexy)-525({<angle>}{<dimexpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrotatexy)-525({34.2}{\134wd)-525(\134transbox)-525(}{\134ht)-525(\134transbox)-525(})]TJ
+ET
+endstream
+endobj
+88 0 obj <<
+/Length 1080
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.0 -1.0 1.0 0.0 29.888 14.994 cm 1 0 0 1 -29.888 -14.994 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxrotatec)-525({<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrotatec)-525({90})]TJ
+ET
+endstream
+endobj
+95 0 obj <<
+/Length 1089
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.82806 0.56064 -0.56064 0.82806 29.845 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 32.6 0 cm
+Q 1 0 0 1 92.375 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -92.375 0 cm 0 -19.249 92.375 96.842 re S [2 2] 1 d 0 0 m 92.375 0 l S EMC Q
+1 0 0 1 -260.199 -198.425 cm
+BT
+/F52 119.5517 Tf 260.199 198.425 Td [(a)]TJ/F53 9.9626 Tf -231.853 -152.146 Td [(\134boxrotatebbl)-525({<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrotatebbl)-525({-34.1})]TJ
+ET
+endstream
+endobj
+101 0 obj <<
+/Length 1097
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.82709 0.56209 -0.56209 0.82709 29.922 -33.599 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 32.652 0 cm
+Q 1 0 0 1 92.427 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -92.427 0 cm 0 -52.825 92.427 96.854 re S [2 2] 1 d 0 0 m 92.427 0 l S EMC Q
+1 0 0 1 -260.251 -198.425 cm
+BT
+/F52 119.5517 Tf 260.251 198.425 Td [(a)]TJ/F53 9.9626 Tf -231.905 -152.146 Td [(\134boxrotatebbr)-525({<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxrotatebbr)-525({-34.2})]TJ
+ET
+endstream
+endobj
+107 0 obj <<
+/Length 1041
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0.0 0.2717 1 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxslantx)-525({<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxslantx)-525({15.2})]TJ
+ET
+endstream
+endobj
+113 0 obj <<
+/Length 1041
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0.4727 0.0 1 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxslanty)-525({<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxslanty)-525({25.3})]TJ
+ET
+endstream
+endobj
+119 0 obj <<
+/Length 1086
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0.46631 0.26794 1 6.229 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 20.493 0 cm
+Q 1 0 0 1 80.268 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -80.268 0 cm 0 -23.246 80.268 104.353 re S [2 2] 1 d 0 0 m 80.268 0 l S EMC Q
+1 0 0 1 -248.092 -198.425 cm
+BT
+/F52 119.5517 Tf 248.092 198.425 Td [(a)]TJ/F53 9.9626 Tf -219.746 -152.146 Td [(\134boxslantbbl)-525({<angle>}{<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxslantbbl)-525({15}{25})]TJ
+ET
+endstream
+endobj
+125 0 obj <<
+/Length 1091
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1 0.46631 0.26794 1 6.229 -27.874 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 20.493 0 cm
+Q 1 0 0 1 80.268 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -80.268 0 cm 0 -51.12 80.268 104.353 re S [2 2] 1 d 0 0 m 80.268 0 l S EMC Q
+1 0 0 1 -248.092 -198.425 cm
+BT
+/F52 119.5517 Tf 248.092 198.425 Td [(a)]TJ/F53 9.9626 Tf -219.746 -152.146 Td [(\134boxslantbbr)-525({<angle>}{<angle>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxslantbbr)-525({15}{25})]TJ
+ET
+endstream
+endobj
+132 0 obj <<
+/Length 1060
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.75 0 0 1.0 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -14.944 0 cm
+Q 1 0 0 1 44.832 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -44.832 0 cm 0 -23.246 44.832 76.479 re S [2 2] 1 d 0 0 m 44.832 0 l S EMC Q
+1 0 0 1 -212.655 -198.425 cm
+BT
+/F52 119.5517 Tf 212.655 198.425 Td [(a)]TJ/F53 9.9626 Tf -184.309 -152.146 Td [(\134boxscalex)-525({<numexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscalex)-525({75})]TJ
+ET
+endstream
+endobj
+138 0 obj <<
+/Length 1039
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.0 0 0 0.75 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -17.434 59.776 57.359 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxscaley)-525({<numexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscaley)-525({75})]TJ
+ET
+endstream
+endobj
+144 0 obj <<
+/Length 1055
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 29.888 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -89.664 0 cm 0 -17.434 89.664 57.359 re S [2 2] 1 d 0 0 m 89.664 0 l S EMC Q
+1 0 0 1 -257.487 -198.425 cm
+BT
+/F52 119.5517 Tf 257.487 198.425 Td [(a)]TJ/F53 9.9626 Tf -229.141 -152.146 Td [(\134boxscalexy)-525({<numexpr>}{<numexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134cboxtransoff)-525(\134boxscalexy)-525({150}{75})]TJ
+ET
+endstream
+endobj
+150 0 obj <<
+/Length 1060
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.75 0 0 0.75 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxscale)-525({<numexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134bboxtransoff)-525(\134boxscale)-525({75})]TJ
+ET
+endstream
+endobj
+156 0 obj <<
+/Length 1074
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.64967 0 0 1.0 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -20.941 0 cm
+Q 1 0 0 1 38.835 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -38.835 0 cm 0 -23.246 38.835 76.479 re S [2 2] 1 d 0 0 m 38.835 0 l S EMC Q
+1 0 0 1 -206.658 -198.425 cm
+BT
+/F52 119.5517 Tf 206.658 198.425 Td [(a)]TJ/F53 9.9626 Tf -178.312 -152.146 Td [(\134boxscalexto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscalexto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+2 0 obj <<
+/Type /ObjStm
+/N 100
+/First 810
+/Length 8900
+>>
+stream
+1 0 3 54 4 108 5 161 6 214 7 268 10 309 8 336 11 446 16 595
+19 638 17 662 20 773 22 922 25 965 23 989 26 1100 28 1249 31 1292 29 1317
+32 1428 34 1577 37 1620 35 1647 38 1758 40 1907 43 1950 41 1975 44 2086 46 2235
+49 2278 47 2303 50 2414 53 2563 56 2606 54 2634 57 2745 59 2894 62 2937 60 2967
+63 3078 65 3227 68 3270 66 3301 69 3412 71 3561 74 3604 72 3629 75 3740 77 3889
+80 3932 78 3959 81 4070 83 4219 86 4262 84 4288 87 4399 90 4548 93 4591 91 4619
+94 4730 96 4879 99 4922 97 4950 100 5063 102 5213 105 5258 103 5284 106 5398 108 5548
+111 5593 109 5619 112 5733 114 5883 117 5928 115 5956 118 6070 120 6220 123 6265 121 6293
+124 6408 127 6558 130 6603 128 6629 131 6744 133 6894 136 6939 134 6965 137 7080 139 7230
+142 7275 140 7302 143 7417 145 7567 148 7612 146 7637 149 7752 151 7902 154 7947 152 7975
+% 1 0 obj
+<< /Type /OCG /Name (box content before) >>
+% 3 0 obj
+<< /Type /OCG /Name (box outline before) >>
+% 4 0 obj
+<< /Type /OCG /Name (box content after) >>
+% 5 0 obj
+<< /Type /OCG /Name (box outline after) >>
+% 6 0 obj
+<< /Type /OCG /Name (final bounding box) >>
+% 7 0 obj
+<< /S /GoTo /D [8 0 R /Fit] >>
+% 10 0 obj
+(pdf-trans.tex)
+% 8 0 obj
+<<
+/Type /Page
+/Contents 12 0 R
+/Resources 11 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 15 0 R
+>>
+% 11 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F53 13 0 R /F52 14 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 16 0 obj
+<< /S /GoTo /D [17 0 R /Fit] >>
+% 19 0 obj
+(\\boxflipx)
+% 17 0 obj
+<<
+/Type /Page
+/Contents 21 0 R
+/Resources 20 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 15 0 R
+>>
+% 20 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 22 0 obj
+<< /S /GoTo /D [23 0 R /Fit] >>
+% 25 0 obj
+(\\boxflipy)
+% 23 0 obj
+<<
+/Type /Page
+/Contents 27 0 R
+/Resources 26 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 15 0 R
+>>
+% 26 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 28 0 obj
+<< /S /GoTo /D [29 0 R /Fit] >>
+% 31 0 obj
+(\\boxflipxy)
+% 29 0 obj
+<<
+/Type /Page
+/Contents 33 0 R
+/Resources 32 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 15 0 R
+>>
+% 32 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 34 0 obj
+<< /S /GoTo /D [35 0 R /Fit] >>
+% 37 0 obj
+(\\boxflipbase)
+% 35 0 obj
+<<
+/Type /Page
+/Contents 39 0 R
+/Resources 38 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 15 0 R
+>>
+% 38 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 40 0 obj
+<< /S /GoTo /D [41 0 R /Fit] >>
+% 43 0 obj
+(\\bboxtrans)
+% 41 0 obj
+<<
+/Type /Page
+/Contents 45 0 R
+/Resources 44 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 15 0 R
+>>
+% 44 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 46 0 obj
+<< /S /GoTo /D [47 0 R /Fit] >>
+% 49 0 obj
+(\\cboxtrans)
+% 47 0 obj
+<<
+/Type /Page
+/Contents 51 0 R
+/Resources 50 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 52 0 R
+>>
+% 50 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 53 0 obj
+<< /S /GoTo /D [54 0 R /Fit] >>
+% 56 0 obj
+(\\boxtranslate)
+% 54 0 obj
+<<
+/Type /Page
+/Contents 58 0 R
+/Resources 57 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 52 0 R
+>>
+% 57 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 59 0 obj
+<< /S /GoTo /D [60 0 R /Fit] >>
+% 62 0 obj
+(\\boxrevolveleft)
+% 60 0 obj
+<<
+/Type /Page
+/Contents 64 0 R
+/Resources 63 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 52 0 R
+>>
+% 63 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 65 0 obj
+<< /S /GoTo /D [66 0 R /Fit] >>
+% 68 0 obj
+(\\boxrevolveright)
+% 66 0 obj
+<<
+/Type /Page
+/Contents 70 0 R
+/Resources 69 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 52 0 R
+>>
+% 69 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 71 0 obj
+<< /S /GoTo /D [72 0 R /Fit] >>
+% 74 0 obj
+(\\boxrotate)
+% 72 0 obj
+<<
+/Type /Page
+/Contents 76 0 R
+/Resources 75 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 52 0 R
+>>
+% 75 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 77 0 obj
+<< /S /GoTo /D [78 0 R /Fit] >>
+% 80 0 obj
+(\\boxrotatexy)
+% 78 0 obj
+<<
+/Type /Page
+/Contents 82 0 R
+/Resources 81 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 52 0 R
+>>
+% 81 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 83 0 obj
+<< /S /GoTo /D [84 0 R /Fit] >>
+% 86 0 obj
+(\\boxrotatec)
+% 84 0 obj
+<<
+/Type /Page
+/Contents 88 0 R
+/Resources 87 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 89 0 R
+>>
+% 87 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 90 0 obj
+<< /S /GoTo /D [91 0 R /Fit] >>
+% 93 0 obj
+(\\boxrotatebbl)
+% 91 0 obj
+<<
+/Type /Page
+/Contents 95 0 R
+/Resources 94 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 89 0 R
+>>
+% 94 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 96 0 obj
+<< /S /GoTo /D [97 0 R /Fit] >>
+% 99 0 obj
+(\\boxrotatebbr)
+% 97 0 obj
+<<
+/Type /Page
+/Contents 101 0 R
+/Resources 100 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 89 0 R
+>>
+% 100 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 102 0 obj
+<< /S /GoTo /D [103 0 R /Fit] >>
+% 105 0 obj
+(\\boxslantx)
+% 103 0 obj
+<<
+/Type /Page
+/Contents 107 0 R
+/Resources 106 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 89 0 R
+>>
+% 106 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 108 0 obj
+<< /S /GoTo /D [109 0 R /Fit] >>
+% 111 0 obj
+(\\boxslanty)
+% 109 0 obj
+<<
+/Type /Page
+/Contents 113 0 R
+/Resources 112 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 89 0 R
+>>
+% 112 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 114 0 obj
+<< /S /GoTo /D [115 0 R /Fit] >>
+% 117 0 obj
+(\\boxslantbbl)
+% 115 0 obj
+<<
+/Type /Page
+/Contents 119 0 R
+/Resources 118 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 89 0 R
+>>
+% 118 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 120 0 obj
+<< /S /GoTo /D [121 0 R /Fit] >>
+% 123 0 obj
+(\\boxslantbbr)
+% 121 0 obj
+<<
+/Type /Page
+/Contents 125 0 R
+/Resources 124 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 126 0 R
+>>
+% 124 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 127 0 obj
+<< /S /GoTo /D [128 0 R /Fit] >>
+% 130 0 obj
+(\\boxscalex)
+% 128 0 obj
+<<
+/Type /Page
+/Contents 132 0 R
+/Resources 131 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 126 0 R
+>>
+% 131 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 133 0 obj
+<< /S /GoTo /D [134 0 R /Fit] >>
+% 136 0 obj
+(\\boxscaley)
+% 134 0 obj
+<<
+/Type /Page
+/Contents 138 0 R
+/Resources 137 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 126 0 R
+>>
+% 137 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 139 0 obj
+<< /S /GoTo /D [140 0 R /Fit] >>
+% 142 0 obj
+(\\boxscalexy)
+% 140 0 obj
+<<
+/Type /Page
+/Contents 144 0 R
+/Resources 143 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 126 0 R
+>>
+% 143 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 145 0 obj
+<< /S /GoTo /D [146 0 R /Fit] >>
+% 148 0 obj
+(\\boxscale)
+% 146 0 obj
+<<
+/Type /Page
+/Contents 150 0 R
+/Resources 149 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 126 0 R
+>>
+% 149 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 151 0 obj
+<< /S /GoTo /D [152 0 R /Fit] >>
+% 154 0 obj
+(\\boxscalexto)
+% 152 0 obj
+<<
+/Type /Page
+/Contents 156 0 R
+/Resources 155 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 126 0 R
+>>
+endstream
+endobj
+163 0 obj <<
+/Length 1053
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.0 0 0 0.50778 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -11.804 59.776 38.835 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxscaleyto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscaleyto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+170 0 obj <<
+/Length 1093
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.64967 0 0 0.47072 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -20.941 0 cm
+Q 1 0 0 1 38.835 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -38.835 0 cm 0 -10.942 38.835 36 re S [2 2] 1 d 0 0 m 38.835 0 l S EMC Q
+1 0 0 1 -206.658 -198.425 cm
+BT
+/F52 119.5517 Tf 206.658 198.425 Td [(a)]TJ/F53 9.9626 Tf -178.312 -152.146 Td [(\134boxscalexyto)-525({<dimxpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscalexyto)-525({.5in+.1cm}{1in/2})]TJ
+ET
+endstream
+endobj
+176 0 obj <<
+/Length 1055
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.0 0 0 0.72952 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -16.958 59.776 55.793 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxscalehtto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscalehtto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+182 0 obj <<
+/Length 1056
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.0 0 0 1.67061 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -38.835 59.776 127.767 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxscaledpto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxscaledpto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+188 0 obj <<
+/Length 1084
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.64967 0 0 0.64967 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -20.941 0 cm
+Q 1 0 0 1 38.835 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -38.835 0 cm 0 -15.102 38.835 49.687 re S [2 2] 1 d 0 0 m 38.835 0 l S EMC Q
+1 0 0 1 -206.658 -198.425 cm
+BT
+/F52 119.5517 Tf 206.658 198.425 Td [(a)]TJ/F53 9.9626 Tf -178.312 -152.146 Td [(\134boxuniscalexto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxuniscalexto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+194 0 obj <<
+/Length 1084
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.50778 0 0 0.50778 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -29.422 0 cm
+Q 1 0 0 1 30.353 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -30.353 0 cm 0 -11.804 30.353 38.835 re S [2 2] 1 d 0 0 m 30.353 0 l S EMC Q
+1 0 0 1 -198.177 -198.425 cm
+BT
+/F52 119.5517 Tf 198.177 198.425 Td [(a)]TJ/F53 9.9626 Tf -169.831 -152.146 Td [(\134boxuniscaleyto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxuniscaleyto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+200 0 obj <<
+/Length 1086
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0.72952 0 0 0.72952 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -16.168 0 cm
+Q 1 0 0 1 43.608 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -43.608 0 cm 0 -16.958 43.608 55.793 re S [2 2] 1 d 0 0 m 43.608 0 l S EMC Q
+1 0 0 1 -211.431 -198.425 cm
+BT
+/F52 119.5517 Tf 211.431 198.425 Td [(a)]TJ/F53 9.9626 Tf -183.085 -152.146 Td [(\134boxuniscalehtto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxuniscalehtto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+207 0 obj <<
+/Length 1086
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.67061 0 0 1.67061 0 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 40.086 0 cm
+Q 1 0 0 1 99.862 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -99.862 0 cm 0 -38.835 99.862 127.767 re S [2 2] 1 d 0 0 m 99.862 0 l S EMC Q
+1 0 0 1 -267.685 -198.425 cm
+BT
+/F52 119.5517 Tf 267.685 198.425 Td [(a)]TJ/F53 9.9626 Tf -239.339 -152.146 Td [(\134boxuniscaledpto)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxuniscaledpto)-525({.5in+.1cm})]TJ
+ET
+endstream
+endobj
+213 0 obj <<
+/Length 1108
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.09485 0 0 1.48184 0 -11.476 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 5.67 0 cm
+Q 1 0 0 1 65.445 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -65.445 0 cm 0 -45.923 65.445 113.330 re S [2 2] 1 d 0 0 m 65.445 0 l S EMC Q
+1 0 0 1 -233.269 -198.425 cm
+BT
+/F52 119.5517 Tf 233.269 198.425 Td [(a)]TJ/F53 9.9626 Tf -204.923 -152.146 Td [(\134boxextscale)-525({<dimexpr>}{<dimexpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxextscale)-525({2mm}{5mm}{8mm})]TJ
+ET
+endstream
+endobj
+219 0 obj <<
+/Length 1113
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.42264 0 0 1.11192 0 -30.845 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 25.264 0 cm
+Q 1 0 0 1 85.039 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -85.039 0 cm 0 -56.693 85.039 85.039 re S [2 2] 1 d 0 0 m 85.039 0 l S EMC Q
+1 0 0 1 -252.863 -198.425 cm
+BT
+/F52 119.5517 Tf 252.863 198.425 Td [(a)]TJ/F53 9.9626 Tf -224.517 -152.146 Td [(\134boxextscaleto)-525({<dimexpr>}{<dimexpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxextscaleto)-525({3cm}{1cm}{2cm})]TJ
+ET
+endstream
+endobj
+225 0 obj <<
+/Length 1101
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 1.28453 0 0 1.37064 -8.504 -5.557 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxexts)-525({<dimexpr>}{<dimexpr>}{<dimexpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxexts)-525({3mm}{3mm}{5mm}{5mm})]TJ
+ET
+endstream
+endobj
+231 0 obj <<
+/Length 1074
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -54.106 45.923 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -173.493 -244.348 cm
+BT
+/F52 119.5517 Tf 173.493 244.348 Td [(g)]TJ
+ET
+1 0 0 1 233.269 244.348 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 11.338 -45.923 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -76.784 0 cm 0 0.0 76.784 116.164 re S [2 2] 1 d 0 0 m 76.784 0 l S EMC Q
+1 0 0 1 -244.607 -198.425 cm
+BT
+/F52 119.5517 Tf 244.607 198.425 Td [(a)]TJ/F53 9.9626 Tf -216.261 -152.146 Td [(\134boxextents)-525({<dimexpr>}{<dimexpr>}{<dimexpr>}{<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxextents)-525({2mm}{4mm}{6mm}{8mm})]TJ
+ET
+endstream
+endobj
+236 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [0 0 31.181 31.181]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 237 0 R
+/Length 284
+>>
+stream
+1 0 0 1 0 8.504 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 0 -317.48 cm
+BT
+/F52 119.5517 Tf 0 317.48 Td [(g)]TJ
+ET
+1 0 0 1 59.776 317.48 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+endstream
+endobj
+239 0 obj <<
+/Length 896
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+q
+1 0 0 1 -59.776 -8.504 cm
+/Fm1 Do
+Q
+1 0 0 1 -28.594 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -31.181 0 cm 0 -8.504 31.181 31.181 re S [2 2] 1 d 0 0 m 31.181 0 l S EMC Q
+1 0 0 1 -199.005 -198.425 cm
+BT
+/F52 119.5517 Tf 199.005 198.425 Td [(a)]TJ/F53 9.9626 Tf -170.659 -152.146 Td [(\134boxxformspec)-525(resources{/Foo)-525(/Bar})-525(\134boxxform)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxxformspec)-525(resources{\134the)-525(\134pdfpageresources)-525(})-525(\134boxxform)-525(\134boxresizeto)-525({11mm}{8mm}{3mm})]TJ
+ET
+endstream
+endobj
+246 0 obj <<
+/Length 1057
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 0 cm
+q 0 -8.504 59.776 31.181 re W n
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+Q 1 0 0 1 59.776 0 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -8.504 59.776 31.181 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxclip)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxclip)-525(\134boxresizeto)-525({}{8mm}{3mm})]TJ
+ET
+endstream
+endobj
+252 0 obj <<
+/Length 1027
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -77.709 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -149.89 -198.425 cm
+BT
+/F52 119.5517 Tf 149.891 198.425 Td [(g)]TJ
+ET
+1 0 0 1 209.666 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -41.843 0 cm 0 -23.246 41.843 76.479 re S [2 2] 1 d 0 0 m 41.843 0 l S EMC Q
+1 0 0 1 -209.666 -198.425 cm
+BT
+/F52 119.5517 Tf 209.666 198.425 Td [(a)]TJ/F53 9.9626 Tf -181.32 -152.146 Td [(\134boxmoveleft)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxmoveleft)-525({.3\134wd)-525(\134transbox)-525(})]TJ
+ET
+endstream
+endobj
+258 0 obj <<
+/Length 1031
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -41.843 0 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -185.756 -198.425 cm
+BT
+/F52 119.5517 Tf 185.756 198.425 Td [(g)]TJ
+ET
+1 0 0 1 245.532 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -77.709 0 cm 0 -23.246 77.709 76.479 re S [2 2] 1 d 0 0 m 77.709 0 l S EMC Q
+1 0 0 1 -245.532 -198.425 cm
+BT
+/F52 119.5517 Tf 245.532 198.425 Td [(a)]TJ/F53 9.9626 Tf -217.186 -152.146 Td [(\134boxmoveright)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxmoveright)-525({.3\134wd)-525(\134transbox)-525(})]TJ
+ET
+endstream
+endobj
+264 0 obj <<
+/Length 1047
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 -23.246 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -175.179 cm
+BT
+/F52 119.5517 Tf 167.823 175.179 Td [(g)]TJ
+ET
+1 0 0 1 227.599 175.179 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 0 23.246 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -46.492 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxlower)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxlower)-525({\134dp)-525(\134transbox)-525(})]TJ
+ET
+endstream
+endobj
+270 0 obj <<
+/Length 1043
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 23.246 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -221.671 cm
+BT
+/F52 119.5517 Tf 167.823 221.671 Td [(g)]TJ
+ET
+1 0 0 1 227.599 221.671 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 0 -23.246 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 0.0 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxraise)-525({<dimexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxraise)-525({\134dp)-525(\134transbox)-525(})]TJ
+ET
+endstream
+endobj
+276 0 obj <<
+/Length 1028
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q /OC /OC1 BDC 2 Tr 0.7 g
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 167.823 198.425 Td [(g)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC2 BDC 0.3 G 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -59.776 -14.993 cm
+q /OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg
+1 0 0 1 -167.823 -183.432 cm
+BT
+/F52 119.5517 Tf 167.823 183.432 Td [(g)]TJ
+ET
+1 0 0 1 227.599 183.432 cm
+EMC Q 1 0 0 1 59.776 0 cm
+q /OC /OC4 BDC 1.0 0.6 0.0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 0 14.993 cm
+q /OC /OC5 BDC 0.7 0.0 0.0 RG 1 0 0 1 -59.776 0 cm 0 -38.24 59.776 76.479 re S [2 2] 1 d 0 0 m 59.776 0 l S EMC Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxbaselineat)-525({<numexpr>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxbaselineat)-525({50})]TJ
+ET
+endstream
+endobj
+283 0 obj <<
+/Length 657
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(og)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+q 0 0 1 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S 0 0 .8 RG [2 2]1 d 0 0 m 59.776 0 l S Q
+1 0 0 1 -94.326 -11.761 cm
+q .3 w 0 G 0 0 .3 0 k 0 0.0 128.877 53.510 re B Q
+1 0 0 1 -133.273 -186.664 cm
+BT
+/F53 9.9626 Tf 137.562 229.033 Td [(\134boxsh->\134boxshow->\134hbox)]TJ 0 -11.955 Td [(wd)-525(60.0pt)]TJ 0 -11.956 Td [(ht)-525(53.43292pt)]TJ 0 -11.955 Td [(dp)-525(23.33313pt)]TJ/F52 119.5517 Tf 90.037 5.258 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxinfo)-1050(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxinfo)-525(\134boxsh)]TJ
+ET
+endstream
+endobj
+289 0 obj <<
+/Length 464
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(og)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+q 0 1 0 RG 1 0 0 1 -59.776 0 cm 0 -23.246 59.776 76.479 re S [1 1]0 d 0 0 m 59.776 0 l S Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxshow)-525({<gsspec>}{<gsspec>}{<gsspec>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxshow)-525({0)-525(1)-525(0)-525(RG}{[1)-525(1]0)-525(d}{})]TJ
+ET
+endstream
+endobj
+295 0 obj <<
+/Length 655
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(og)]TJ
+ET
+1 0 0 1 227.599 198.425 cm
+q 1 0 0 RG 1 J
+-11.955 -23.246 m 2.989 -23.246 l
+-47.821 -23.246 m -62.765 -23.246 l
+-11.955 53.233 m 2.989 53.233 l
+-47.821 53.233 m -62.765 53.233 l
+-59.776 -11.291 m -59.776 -26.235 l
+-59.776 41.278 m -59.776 56.222 l
+0 -11.291 m 0 -26.235 l
+0 41.278 m 0 56.222 l
+S Q
+1 0 0 1 -227.599 -198.425 cm
+BT
+/F52 119.5517 Tf 227.599 198.425 Td [(a)]TJ/F53 9.9626 Tf -199.253 -152.146 Td [(\134boxmarkers)-525({<dimexpr>}{<dimexpr>}{<gsspec>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxmarkers)-525({-12pt}{3pt}{1)-525(0)-525(0)-525(RG)-525(1)-525(J})]TJ
+ET
+endstream
+endobj
+301 0 obj <<
+/Length 534
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q 3 w .7 0 0 rg 1 .8 0 RG 0 -31.75 76.784 93.487 re B Q
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 176.327 198.425 Td [(g)-71(a)]TJ/F53 9.9626 Tf -147.981 -152.146 Td [(\134boxpath)-525({<gsspec>}{<paintop>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxpath)-525({3)-525(w)-525(.7)-525(0)-525(0)-525(rg)-525(1)-525(.8)-525(0)-525(RG}{B}\134bboxtrans)-525({\134boxextscale)-525({3mm}{3mm}{3mm}}\134boxmoveright)-525({3mm})]TJ
+ET
+endstream
+endobj
+307 0 obj <<
+/Length 668
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q 3 w .7 0 0 rg 1 .8 0 RG
+0 11.339 m
+0 82.149 l 0 93.487 11.339 93.487 y
+65.445 93.487 l
+76.784 93.487 76.784 82.149 y
+76.784 11.339 l
+76.784 0.0 65.445 0.0 y 11.339 0.0 l
+0 0.0 0 11.339 y 0 11.339 l
+h B Q
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 176.327 230.175 Td [(g)]TJ 68.28 -31.75 Td [(a)]TJ/F53 9.9626 Tf -216.261 -152.146 Td [(\134boxroundpath)-525({<dimexpr>}{<gsspec>}{<paintop>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxroundpath)-525({4mm}{3)-525(w)-525(.7)-525(0)-525(0)-525(rg)-525(1)-525(.8)-525(0)-525(RG}{B}\134boxextent)-525({3mm})]TJ
+ET
+endstream
+endobj
+157 0 obj <<
+/Type /ObjStm
+/N 100
+/First 886
+/Length 9383
+>>
+stream
+155 0 158 150 161 195 159 223 162 338 165 488 168 533 166 562 169 677 171 827
+174 872 172 901 175 1016 177 1166 180 1211 178 1240 181 1355 183 1505 186 1550 184 1581
+187 1696 189 1846 192 1891 190 1922 193 2037 195 2187 198 2232 196 2264 199 2379 202 2529
+205 2574 203 2606 206 2721 208 2871 211 2916 209 2944 212 3059 214 3209 217 3254 215 3284
+218 3399 220 3549 223 3594 221 3618 224 3733 226 3883 229 3928 227 3955 230 4070 232 4220
+235 4265 237 4294 233 4432 238 4547 241 4725 244 4770 242 4794 245 4909 247 5059 250 5104
+248 5132 251 5247 253 5397 256 5442 254 5471 257 5586 259 5736 262 5781 260 5806 263 5921
+265 6071 268 6116 266 6141 269 6256 271 6406 274 6451 272 6481 275 6596 278 6746 281 6791
+279 6815 282 6930 284 7080 287 7125 285 7149 288 7264 290 7414 293 7459 291 7486 294 7601
+296 7751 299 7796 297 7820 300 7935 302 8085 305 8130 303 8159 306 8274 308 8424 311 8469
+% 155 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 158 0 obj
+<< /S /GoTo /D [159 0 R /Fit] >>
+% 161 0 obj
+(\\boxscaleyto)
+% 159 0 obj
+<<
+/Type /Page
+/Contents 163 0 R
+/Resources 162 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 164 0 R
+>>
+% 162 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 165 0 obj
+<< /S /GoTo /D [166 0 R /Fit] >>
+% 168 0 obj
+(\\boxscalexyto)
+% 166 0 obj
+<<
+/Type /Page
+/Contents 170 0 R
+/Resources 169 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 164 0 R
+>>
+% 169 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 171 0 obj
+<< /S /GoTo /D [172 0 R /Fit] >>
+% 174 0 obj
+(\\boxscalehtto)
+% 172 0 obj
+<<
+/Type /Page
+/Contents 176 0 R
+/Resources 175 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 164 0 R
+>>
+% 175 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 177 0 obj
+<< /S /GoTo /D [178 0 R /Fit] >>
+% 180 0 obj
+(\\boxscaledpto)
+% 178 0 obj
+<<
+/Type /Page
+/Contents 182 0 R
+/Resources 181 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 164 0 R
+>>
+% 181 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 183 0 obj
+<< /S /GoTo /D [184 0 R /Fit] >>
+% 186 0 obj
+(\\boxuniscalexto)
+% 184 0 obj
+<<
+/Type /Page
+/Contents 188 0 R
+/Resources 187 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 164 0 R
+>>
+% 187 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 189 0 obj
+<< /S /GoTo /D [190 0 R /Fit] >>
+% 192 0 obj
+(\\boxuniscaleyto)
+% 190 0 obj
+<<
+/Type /Page
+/Contents 194 0 R
+/Resources 193 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 164 0 R
+>>
+% 193 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 195 0 obj
+<< /S /GoTo /D [196 0 R /Fit] >>
+% 198 0 obj
+(\\boxuniscalehtto)
+% 196 0 obj
+<<
+/Type /Page
+/Contents 200 0 R
+/Resources 199 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 201 0 R
+>>
+% 199 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 202 0 obj
+<< /S /GoTo /D [203 0 R /Fit] >>
+% 205 0 obj
+(\\boxuniscaledpto)
+% 203 0 obj
+<<
+/Type /Page
+/Contents 207 0 R
+/Resources 206 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 201 0 R
+>>
+% 206 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 208 0 obj
+<< /S /GoTo /D [209 0 R /Fit] >>
+% 211 0 obj
+(\\boxextscale)
+% 209 0 obj
+<<
+/Type /Page
+/Contents 213 0 R
+/Resources 212 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 201 0 R
+>>
+% 212 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 214 0 obj
+<< /S /GoTo /D [215 0 R /Fit] >>
+% 217 0 obj
+(\\boxextscaleto)
+% 215 0 obj
+<<
+/Type /Page
+/Contents 219 0 R
+/Resources 218 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 201 0 R
+>>
+% 218 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 220 0 obj
+<< /S /GoTo /D [221 0 R /Fit] >>
+% 223 0 obj
+(\\boxexts)
+% 221 0 obj
+<<
+/Type /Page
+/Contents 225 0 R
+/Resources 224 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 201 0 R
+>>
+% 224 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 226 0 obj
+<< /S /GoTo /D [227 0 R /Fit] >>
+% 229 0 obj
+(\\boxextents)
+% 227 0 obj
+<<
+/Type /Page
+/Contents 231 0 R
+/Resources 230 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 201 0 R
+>>
+% 230 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 232 0 obj
+<< /S /GoTo /D [233 0 R /Fit] >>
+% 235 0 obj
+(\\boxxformspec)
+% 237 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 233 0 obj
+<<
+/Type /Page
+/Contents 239 0 R
+/Resources 238 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 240 0 R
+>>
+% 238 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/XObject << /Fm1 236 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 241 0 obj
+<< /S /GoTo /D [242 0 R /Fit] >>
+% 244 0 obj
+(\\boxclip)
+% 242 0 obj
+<<
+/Type /Page
+/Contents 246 0 R
+/Resources 245 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 240 0 R
+>>
+% 245 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 247 0 obj
+<< /S /GoTo /D [248 0 R /Fit] >>
+% 250 0 obj
+(\\boxmoveleft)
+% 248 0 obj
+<<
+/Type /Page
+/Contents 252 0 R
+/Resources 251 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 240 0 R
+>>
+% 251 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 253 0 obj
+<< /S /GoTo /D [254 0 R /Fit] >>
+% 256 0 obj
+(\\boxmoveright)
+% 254 0 obj
+<<
+/Type /Page
+/Contents 258 0 R
+/Resources 257 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 240 0 R
+>>
+% 257 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 259 0 obj
+<< /S /GoTo /D [260 0 R /Fit] >>
+% 262 0 obj
+(\\boxlower)
+% 260 0 obj
+<<
+/Type /Page
+/Contents 264 0 R
+/Resources 263 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 240 0 R
+>>
+% 263 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 265 0 obj
+<< /S /GoTo /D [266 0 R /Fit] >>
+% 268 0 obj
+(\\boxraise)
+% 266 0 obj
+<<
+/Type /Page
+/Contents 270 0 R
+/Resources 269 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 240 0 R
+>>
+% 269 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 271 0 obj
+<< /S /GoTo /D [272 0 R /Fit] >>
+% 274 0 obj
+(\\boxbaselineat)
+% 272 0 obj
+<<
+/Type /Page
+/Contents 276 0 R
+/Resources 275 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 277 0 R
+>>
+% 275 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 278 0 obj
+<< /S /GoTo /D [279 0 R /Fit] >>
+% 281 0 obj
+(\\boxinfo)
+% 279 0 obj
+<<
+/Type /Page
+/Contents 283 0 R
+/Resources 282 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 277 0 R
+>>
+% 282 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 284 0 obj
+<< /S /GoTo /D [285 0 R /Fit] >>
+% 287 0 obj
+(\\boxshow)
+% 285 0 obj
+<<
+/Type /Page
+/Contents 289 0 R
+/Resources 288 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 277 0 R
+>>
+% 288 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 290 0 obj
+<< /S /GoTo /D [291 0 R /Fit] >>
+% 293 0 obj
+(\\boxmarkers)
+% 291 0 obj
+<<
+/Type /Page
+/Contents 295 0 R
+/Resources 294 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 277 0 R
+>>
+% 294 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 296 0 obj
+<< /S /GoTo /D [297 0 R /Fit] >>
+% 299 0 obj
+(\\boxpath)
+% 297 0 obj
+<<
+/Type /Page
+/Contents 301 0 R
+/Resources 300 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 277 0 R
+>>
+% 300 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 302 0 obj
+<< /S /GoTo /D [303 0 R /Fit] >>
+% 305 0 obj
+(\\boxroundpath)
+% 303 0 obj
+<<
+/Type /Page
+/Contents 307 0 R
+/Resources 306 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 277 0 R
+>>
+% 306 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 308 0 obj
+<< /S /GoTo /D [309 0 R /Fit] >>
+% 311 0 obj
+(\\boxedgypath)
+endstream
+endobj
+313 0 obj <<
+/Length 626
+>>
+stream
+.5 w 1 j 1 J
+BT
+/F52 119.5517 Tf 28.346 198.425 Td [(Y)83(o)]TJ
+ET
+1 0 0 1 167.823 198.425 cm
+q 3 w .7 0 0 rg 1 .8 0 RG
+0 11.339 m
+0 82.149 l 11.339 93.487 l
+65.445 93.487 l
+76.784 82.149 l
+76.784 11.339 l
+65.445 0.0 l 11.339 0.0 l
+0 11.339 l 0 11.339 l
+h B Q
+1 0 0 1 -167.823 -198.425 cm
+BT
+/F52 119.5517 Tf 176.327 230.175 Td [(g)]TJ 68.28 -31.75 Td [(a)]TJ/F53 9.9626 Tf -216.261 -152.146 Td [(\134boxedgypath)-525({<dimexpr>}{<gsspec>}{<paintop>})-525(<box>)]TJ/F53 7.9701 Tf 0 -17.933 Td [(\134boxedgypath)-525({4mm}{3)-525(w)-525(.7)-525(0)-525(0)-525(rg)-525(1)-525(.8)-525(0)-525(RG}{B}\134boxextent)-525({3mm})]TJ
+ET
+endstream
+endobj
+318 0 obj <<
+/Length 1769
+>>
+stream
+BT
+/F53 7.9701 Tf 28.346 301.848 Td [(Each)-525(transformation)-525(expands)-525(to)-525(<box>)-525(\050\134hbox)-525(in)-525(most)-525(cases\051.)]TJ 0 -11.955 Td [(Each)-525(transformation)-525(must)-525(be)-525(followed)-525(by)-525(a)-525(<box>.)]TJ 0 -23.91 Td [(<box>)-525(states)-525(for)-525(any)-525(kind)-525(of)-525(T)]TJ 124.135 -1.716 Td [(E)]TJ 3.138 1.716 Td [(X)-525(box;)-525(\134hbox,)-525(\134vbox,)-525(\134vtop,)-525(\134box,)-525(\134copy)]TJ -127.273 -11.955 Td [(<trans>)-525(is)-525(a)-525(list)-525(of)-525(box)-525(transformations)]TJ 0 -11.955 Td [(<dimexpr>)-525(states)-525(for)-525(dimen)-525(in)-525(eTeX)-525(form)]TJ 0 -11.956 Td [(<numexpr>)-525(states)-525(for)-525(integer)-525(in)-525(eTeX)-525(form)]TJ 0 -11.955 Td [(<angle>)-525(is)-525(an)-525(integer)-525(or)-525(float-like)-525(string)]TJ 0 -11.955 Td [(<gsspec>)-525(is)-525(a)-525(literal)-525(pdf)-525(content)-525(stream)]TJ 0 -11.955 Td [(<paintop>)-525(means)-525(pdf)-525(painting)-525(operator)-525(\050S,)-525(f,)-525(B,)-525(W...\051)]TJ 0 -23.911 Td [(Some)-525(extra)-525(macros:)]TJ 0 -11.955 Td [(\134tobp)-525({<dimexpr>})-525(returns)-525(PDF)-525(dimen)-525(\050big)-525(points)-525(with)-525(no)-525(unit\051)]TJ 0 -11.955 Td [(\134enablebpround)-1050(makes)-525(\134tobp)-1050(rounding)-525(to)-525(\134pdfdecimaldigits)-1050(\050equivalent)-525(to)-525(\134roundbp)-525(\051)]TJ 0 -11.955 Td [(\134setbpround)-525({<0..4>})-525(makes)-525(\134tobp)-1050(rounding)-525(to)-525(<0..4>)-525(digits)-525(\050equivalent)-525(to)-525(\134roundbpto)-525({<0..4>}\051)]TJ 0 -11.955 Td [(\134disablebpround)-1050(turns)-525(off)-525(rounding)-525(\050equivalent)-525(to)-525(\134asbp)-525(\051)]TJ 0 -23.911 Td [(See)-525(the)-525(code)-525(for)-525(more.)]TJ
+ET
+endstream
+endobj
+323 0 obj <<
+/Length1 1685
+/Length2 20919
+/Length3 0
+/Length 22604
+>>
+stream
+%!PS-AdobeFont-1.0: LMRoman10-Regular 2.004
+%%CreationDate: 7th October 2009
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).
+% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG.
+% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki
+% from GUST (http://www.gust.org.pl).
+% This work is released under the GUST Font License.
+% For the most recent version of this license see
+% This work has the LPPL maintenance status `maintained'.
+% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki.
+% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file.
+% ADL: 806 194 0
+%%EndComments
+FontDirectory/LMRoman10-Regular known{/LMRoman10-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(2.004)readonly def
+/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def
+/FullName(LMRoman10-Regular)readonly def
+/FamilyName(LMRoman10)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch false def
+/ItalicAngle 0 def
+/UnderlinePosition -146 def
+/UnderlineThickness 40 def
+end readonly def
+/FontName /OZGODD+LMRoman10-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 89 /Y put
+dup 97 /a put
+dup 103 /g put
+dup 111 /o put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-430 -290 1417 1127}readonly def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª%9.ì¬>XJ‘ٚмD â"e?¤¸€›&¤oLH:]~•n¦X%„lþÞ¹”­ÏôdQ@ãa~M~EAËŸV.U‚›MØ€ª¾")éJŸ¢Y§4Ò›º‘º UËêC9¼¿ù2Îÿò–"\ªºÜ¡w¥Ô1·rlxؽØнtÿùŒaÂAÙ*Ó`¢†ËJpÁ¿äŒ¥?ü‹(ä›:øE(ùqÞÚUé[‰s½ 
+wšÃM•ˆÏ‘¤s¾u¢IÐC'žƒêµÑØú93ó|Y@TÛ‚—EìÛÂè—k$:™mGzR›†g»?·x= w;•*E ›¡ëJ²úM8Í›,õuøàý²èZmYË
+þâøµÙ`Š”n›ë¿.Ë£†ýî/J
+E:– €ÉB³Oà÷/g^Mj9Z6ñ¬ïF脨0 B‰KBÕˆ[—°GÓO¿rEÞ÷µå
+°Ž:G(,æ fÔë‚Ë[MÆÜ]l¾n™ ±ô¨uEäÖÓì~0¿Rø÷š‡tö›»^¤S Pêþ–¿jÀòw¨£Wv6ä™ò!¦Ýé¬
+­Ðï‘1²nC22OÕœQµS ê³tyóžn”åG
+ óýµ¾Œ}=_÷Ž¨ÊóÎnŽW?^è‚2I·=>œÄÃ
+,|K93¼¬ðQÒbÖ¸Z×¹pu ÐÖòPÛ«%ÃFùj`(¡m-¦>¥Ã…À¨?.ȧåþŸ¼ßÍŠJ:fÜœR–ß[›’zB5Ö§@ºØ›ŒèÎNˆH]·Se'Ñ>xœMš¾ýµøX-Ñ…p^¿A.‘ŠŸöº5Ïf˧|¢‚ÏáÔËýÒ>V<Vå“ò¤ ¯¡~.# ™–öSÉÿÄü¼àO<eêÏÀPYƒ•f7/!vÛ>8
+A”q–ÖUø3’΄x}³_=Øó>}×MX|¯]rÚ›qÓ0¹“õÏÛP&5s68}
+´/•úãûVDP:V?®3
+×䫦˸72} â;6Ù±*$¹2fpî ,ÑyCPܨCª†0q§¸gâ¿{­ø@P+Ï
+_¿±ë±„w©É<»Ú©9Sð¥®É¹sz¥Î¦½Ûx-Í)žë”,û0”}¯ õOÔç°RX‡ Š*y9Ä;ñy‰^@E€9žeÁìgTó=ÄjÑf•*š…{—ù-Ÿç X„ˆÚ ¯c&$E¸ëkD/{J°:•ÎUgÇ’àÑŠaŸ;5[S¶Ã(Q4¬Ð¿‡‘?1
+Ê —”t:ò"h}¹Ï͈›
+ Pðjd÷PéÞ’ïLgB/舘9u]‚×ýÖ¶ýv
+‘4lNÓ=u9²::>R%à7~Ó‡I®w®^ap}â­ÛB;g¯£w+K“±´D¿Ð§íZjÀ!èRèø²{Õî¸(²º¨?ÑÖš¶õ9VžLšöȼ#°ï¤ °•bè(cöÀ«êÌ£m¬Ã 
+`§• 99Ýw py3_<á…ÂÜëñJe*Ó¨™_°è|IúbÕƒaƒJÆÀ!zʇÁÖ.­¶hÞJ±Œ¶¥ Å;j”³f|ï ŸõõºÓ}!‹75û}Q|4JþÆ4\—¼26ϳx&ç&£Ý§å´{æ°~[±d£6e´5lN,Žn܆IÅè ÅãάÔIï…ÖŽµ®
+ȃ«ddáaÓç6øOÙL@›»ß,A‘Ú…œ¡â-Ò_/ì¨åßÔ€D^ªYyÒ òQÛ|•Àž‰êfêÜ3Ó`}·Ff1‚*ñºï³æ
+¶\¹»ëÔ¥bl&ðR©]eÙBíTãjhÖ“)Z›¡2=Þ ÛmÑ(aÚáiÁo <wˆp Í3F`=®ÔR5Ý?FLÚ=Çä°4`zÿˆ÷<\Þ2ÃÖ ²Öšº–g>9“8¹ˆ#Nž–è_-®8—ÏeÈ8–õ4ìi›±,3õ ”Î,›šlz÷ˆ">ûØgV2GÛTà¸zÏ´¨s<o<Ðÿ Îí•‘û6m.Ö]TÞæ#nFI
+õfÉE{ýŸ¢`lÃÀtC}õñ³aâ¨ý¦·ºF”øìmÂ/ÞQor2Ž^¨P*¶.߶İU íg)ÀD.¶)tƶú)GÃHü¡á¥_‘™ ¤Ýôžçp=þ0ü?ÓQÒ.EÿRÊ^ÕÌŒùz_„®j¨Œ¤µ ñ(N| ÒŠÜÃäo*Cðù¶þlOv&[ȇS’µ5KÓÜ»‹[’¾¯rðAñ}U´›óÑ'›·¥Ì±©Ú¯^yÕ­}«•ži@@¼çÚ ÷•Ý<Õ´ƽÌ~é¿â˜oòb ÃËÌ{'ÙaŽ¢în7D×£DöUN ª"²/™`&­Ä Æv­Yx†Ž##R"@£ˆäÒ$ñ‘‚ºz5ê•(DßIöÅ2Ô)åÈo‰Ñæ—üáµaÌ©UÝcB;ö±DY·Æ‘¿d¾Ù>\¡Xí|›ùaXFî6n;åH¿-Äl!žž
+ͺ¬¡¥°'p»òíæ¨:öZé*‰h=Î>ÅæìhâÜ s¯Ýø5áô(ÛçNpBvcFìáí¨{Œ$o‰ ë"ÑÆý±qB¯ Œ VZ¶Û*â»;­|wxÅ;&†r'ƒWØe›Ìu<)êÀÃû–j¥ÞÕ"Ú*^ß@š>ëW5a~w§§p Í8¶+ˉ«s,ÎE&ôð+¾ÇwæÊeÉõ“­ð=¤Šû…aü.q
+Ÿ!ªR'ë 0XŽžúÖÙÜ¢¶ºÉVëŒÒÌúØ€èË7㦨 ojš*žÿñ SEš ‚ÔÀã&¯wýS*6•1ÄóŠV厄ÑçG Ç8˜ž“ßÏã}î5øHé)P
+®ˆ…–Ð&*¶%$”2ÜrÛ,¬¼(íØ»'wûÇA@ù Ó¤Ö}n?œb’~6¢ä¦óNuLØê%qι-<ÙJš+Äš{à¸ñ{µF#ß ½wHMw¿3W!ÿûU¤Øy»\¾×mIoèYhŒ2ùH´} FF丽mõr(ÄKs÷&N_€ÎÄÿ!87L›gÄGJ‡#«g=“ÚG®£9¥©ì@ÍžE*“Lå¹—:ß×ì–d˜v©ÅëjÍèÕ™"UÈ'I7,Ú"¯Ax :=)Á N•ÐñœšB߉nHQöP
+&«ÈIÿð閟“Ëßu„Î~/™tG”÷éoxÕØ2ëOI¥å'Ï9ž­MñðÛ³†›tÂ72##n€š¾‘=¬J\<Ɖ\â'j?r+/l,ËTVó"ß ¾ª(è;\”]ûž¢Éµù,CŸÜYªÈªÔ7QAc3
+5M¬ 9B<i PІ c VÛ=”žÏè/{QÜRgÂÅ.ôéZŽ„º KÔ¦¿ׯ´¡ûVÔlÞµ®}û·?Ñ Ÿ†èHøIQßßI!a¨Üã‚FS*Ê›@ ¡{õt8”©w^M&¾Ún=÷
+zÒ‚ÙC`P•UíÖó¯§uF o5©†Ežý×f©?ï©dÊ`%ó\ÙPZ!²ÀœRÞØÚNKŠT¤Æ@ÔzøiHDÐ
+øÆ_!óé%ºêó*Úx“¬xÓ„\ü„O±Ú¦=Â48V1ºç‹5((!0s<[·CRØ$¶›-Î
+†­…µˆ§D›@À/ÑôŒâ6©õ¡åŽ€—Þb<6´ÍN}M›ê¢ð‰¾$«ÃÊæH¶šEys ¦¾¾ë>Ø÷Ü-ŒÆ¡ýEàsÂcú §ŸÛR*×^ººuJë—/ž„7¸œªdøw9k¨8 DmÖ™fœ·ks»gïÁcyKx0};uk‚–+xÐSu+ОÓ%Œm¤­0`x{1êº]HzSå#ÐÉ
+瘀Wù…éÀÛŸ-„yÌK¸ºíXȹ*RÔàï‹Œc)ŸW
+ëóZ*ãðz&/\„‡&´# O‡„QÎþ¯¤•ì
+t­¾ˆ ŽNFbï
+ò!TMåÝƬ`’ûüƒô3*]·ÿ…¬àò^Ï0£É‰>zµ(ç!¨,Û–Ï+×àìµÛr!ê& •Cs«fÌB ß;c5}ƒÃÇ ÝȦEI5㌪:"T· ªyê'ͤî'M© IîóÏløF—þîño"¿0”SŸª¼gw¦Hý¹™8oahÄÑh…¥‰ôÒÃ~´Fe; ,U¹F¥Dm)ÓÒ úB{Á‡wÁÛ[ ËûœŠ•˜ZqæzRÆ-WS³©Uÿ¾ž¿KÚŇå˜7HrˆµXwwÍÙN/&þáµS‚¦+5úÆ$ód  Ÿ3Îä^Ix_ß$¬*]Ö4å0½üĘ›Õì¢Oªaa±ÿÒ*1Áÿ’êÚÜ%(1.äOpy»Z‡‘J£žoÇ-†$áü¥Kµwô´Ò2¨ºj
+eÄúÿ#&´'à4Üuçç—µ=ëTžÃ­ã»èèO“£°už<r_‰4Ù5 V“¾ˆI :ee‚ËÁÙ ™1ߪþõ82çä-¬,*žqârÓ‡ :LÛ“ûaõ‚VYèT¨=No¶å¶_{ÂÚvó mìò rµŽ¨S{Ûãõ 7.µ‚¬”í[êü"ÇPu*kQñ ¢. âW¾’L .ž¼7„z(P»¸ÿ>9‹¼ð)&÷|9­²—½]5ÙŠZ“öϯ*§ê-ô¯ÒÙ´nGcº5þKV×JÓ™þìºÕLfC^‘€¢é±è y·H{¢Ëx`â
+^Uª1pP
+¶Ôexèä8ÿÄæµ ¸D·>XdTç{£Rs¢@Iƒn\‹ÚïYõyµ‰†T‚>SwÈ,ÎÙPšõ“ËË{ &$Ö¢ø2vBÛ¨[ô!ÉGp³eß?Áæ<зõ8r ”ÄÄ7Ópð8謄ºÈ~£K%VÙ>¨eNXÑSEÌÈÜÐ(cŸˆH á–LjJ¤¥ÒôÝL?›^ê°¢ãx>´²)ÿ¶SÝ7wÑXÈr4ÕYG–v\½ÞŽ,vb",¾XyN‡ß·øêK¨ñýä³É,ë“PËßµ_ÖV—ÿ …ý9½ßv ¦¶/ÕÿT¶ð¿#t+•Gº—²°â:A™ùþäè/ž¢^¼Ã`u…å
+ • ëÑ šðŽ#ÚNtßÎQPwït 1Žd€oì5ª¤ÌAnÎ/ý¼2ˆñäˆÞÌ“Y}Yëú?ð¸+˜Êš´ó$&
+KU9”NÛìÄ´¸ÔF ekATÉ!µú/¹0Sºb TؘQ,=0]A2y<ß°Pôß·™uêÐà56ÄY;«¹ßÔeÌED„ͧ5·Rž_ +Ïߧ²®ëRÒBD‹udd Ç$î
+f÷1¤?~…ö@Ï¥çø½Ç¦EðŽ6²Ãx$ÔÀ#3«šÝKv]ôéÓÛÝz-õ³9 /êK,HƒÒZOÖ:ç%$+ìÕ"
+Ñ(”¥Ó£1]æûP\Á–4é¡T0K…ÝÕíËlˆ¤dŠ@#V‰’“ê`KÉ:ý ½(¶…âåÓŒzï|¶Ø™ÎTb”"MIòô>}RäBéPò¢ºL׿V¦¡ ì`ÉE¢ÅDûÃ,¤$?˜,žÀ“×ùgpÇ4™¬
+ü>%ý;z6§>€ùE²Ipì`xå ·§0, qpðÀ*œqC×"ÏÀ†wb'©À§X£–}âo“ë|¸¡A5ªò¸ˆ¸vǧ7  $Zqé˶?²ènU‰Á·laX/4W »ãKâçÝÅ!ñÒ”Ó†žÝ94Ã8å?§rV/ ›>ª”*]H–žÊ5¾``˜•<­è ¨rkln,\"­JÌ8¦HUæa“§ÅÝp´Ä¾ÁKä)”cÃ-RÙîÇÝÿcµ5»FÌò8ó”ø½r'›Ã°ÒŽ÷ý%ídÕjR»b ):RÊe0:´'Zô92îâAWl“—àSE²—$Äk¼b V—>Q¸‚Á7…R;"ß €¹Jb)Ý«*Ï“­®òç°RŠ.]îõp@¸Ï^¯Äv«„…Ú|³Eù Êõ„°Ô¯¶PLV Å.¬4ò¯ížB·övëØ^_!ú \Ý0_Uy‰U
+æ×̆Kx»ØÉ:ÈyЛ„w.
+Žì-€üg£Ñi;›Â‡«ÌËëZ6é •(k ]¾FžÑQÄ9»×º•U÷ ¿Î9ÿɾä{†ÏÚJï’£ÏÇɦý!ñªßöu Ôô²ì;[ž5Lþ .ö!R™ù+C˜ú.lá󘬺½µÞïÿôÞnÐÛyGÿ#È`ÂÏÜ«µæBŠÐ6²c¿ï|Í”}lþè£,&ÆþwÀâJ!i)‹6dZi¹„#Ý JßTîìâšSróbû;<$+F˜À"šúïj‰&¹O2 V@oN£ ) þfX +§kžè’_5žÅ¼@$B»£;&cÕdEoÐé­8 w„µ5®ms¾cf;ë%×~ZÛÚ.4+B…X2¾†µ,6$N
++0¹ýgKµmËSùy#a#ˆº5Hs\HÍG¿–Î1â[x‚' W†­UTn¥î¥Áe©«·"‹¶Ñÿ«Y¬&UÃýÕ–„i™|ÞÑ\h$?~®&Ájà«?¹Úÿ÷~âô/Ü
+†|bå4Ñ_T„0Z€\Ís÷GfMºÉ2·w¾åÎ;o¡«…¬Äò>,’yÍY–P6´˜Rq{ÎûògÒO™ÒJÉÕÆŽö¯¢fГZ91Q ú±-ãÿïN±Áy)Å&çì@÷¸}Xô÷$vu²9F¥ŒŠÛXÃë—¢k9:˜VžYüz3©ó˜Æß±ÏÈHK7ŠÔŒß¶EÿΔV¨ó,øÏ Ì=èá‹Ë9™#Ê­¨(a=ÌЂ÷/‹¯ôOc—¦Rr*S\Á6„XwŸF–…ÔqmYu®Ã},Êf,üfM®±x>•I¶ç’±û¥:ÿï”ý4+Ænl±ú†$’c;fU‹:zû§+FM ;ÎgÜÍNsù(†“rk±àÓÃîSUÜõL陼æB\j äò¥Ei¥c@©c£3tÛ ÞfƒPeUXˆý~ƒpzÏ8ý
+JÔµùñ?WD{‹'K„»Rohù2©jÃ-*á®=kÙÈvF"— ï@ÿˆ+¡‡P÷óϘ«pJÙ Åÿ<¹ÓÄ Äö£Íð ÛÔè6%Á+œO„¬%/…Zw,[ˆ„ ”ùÈà$ïf ªÆAV¼³ë æûþX|Ä&öøM¸JT’ÁW ÝïàÚy¼¹ é×ëÓD–oðzHz|qx÷OLÛ˜­è²j,=ÃDÝ1U&Ø@oc²ÎÐsÅö‘ošðÅõɸ¯æp8–r“>§Â‹1‚*©Üt¤óKgÈç`®ùѯˆ¿ËD¿Dr)»Ä}%7Äï®’ ì
+½Â¤giJò2?•`v¯Ýú¾œÄj-¦ª>3 EE‡ñÞK7ÑYÐÿEÍĨ…%wŸ7T(®ªu)[ãdôÿ­ÜµûÕ‘Ê|‘§Ú³>zb`^ePšŽÖy¨ššŽ–^iÀ‡ÇûǧßÅS'ìÏ[¢¢±ìg‹³´_¾½Iˆµ¬ýq±]Ó:ß¹>KW¿÷Kn­9×è}ê%F¢S’;šéÂ2¡$ÑqÂ"•ºÍ—L‹Ø_Ë
+Ñühµ°½!8 d%ý»õNýÅÓJDž>™?ßÜ"ÌÀ2ã‹^ÄuíºpfÞz0{ó<0!£ÃÒõ®“„}&§»Ù$C%m„â™IfG]$0ÈëŽFÖkªí7”«£¹ôšãÏEžòfÐO»Ðt
+o"Vš›ÙB¡<ò,"øLH°~_sr%¸A8¹YµÝ9úøjºa^iæâå(
+°0™zÌh
+f¨iîÞ{Œä¡‡‰¶Q oníê^nؽѣv’RNÊc‘j*ÄjÏáGðV%U ES¶@W¦éG'M52bD‚Ä“i¦œ¡¤lż~h»_¼d3oÛõÿmì; U56¯¡«U@÷/<åϾ© èŽ;qÌ.¬ ·?o$Üã9¥—Awbfª^)¸èì|ê‘Q»>Ë‹‹T‰HhÒ•õDãüö~¥ámä¶+Ùn p(¦ÖABº‡PèÒ5GÝÚpOÔm£kêÀ}òDàPͶÃÖ°üÂEü•ôH?í€BKÍxly±ZùÅ4ŸIB
+K:áq ÞIW15U=?æ
+Ey@îr?•c¯·S¦£ÄßùºS²ÆóFP烩ìAN :lSük•é5«ÉU¸Iõ”Xó‡` Ì]€K97߆Pt£D&ÕpÍ­à@›$‹R7Ž~Ìè.Âx^ÐÀ©ðQNE,Q0b¢uýOH–¥„J¥Ï¬åžÚ”Ó»%›(á,"_l 2“|ŒÛÒÏH
+­§Co±aÈàÐÓø=m¢{±ôŽÂ (5¢å¡ÄZÃÚ½d%8ó Ü‹`al´4ÍçCo¾]gß©ZÅËW‚po!kJóR9t7ˆ­Nv‚d ¿Î²i²·D·qBüÆõ=–°§¡TÙW~¶íûŸyæ ü8ßµYÃ"
+›”à¾ùÔ}!Rz;€‡…Ê15`ïåÇþ.þ‘Ä)
+5¨ðjsaàc^÷ŽâR*)A‡dä๠/f¿‹(Ì‚Rénu6ä.V-€2
+Ù?÷?‚
+ÑÆa[Qˆ¸>C§Y##©Z~Z¸]£ZJ
+}’Pò‚îù‰0B5%¦üÆ'·²KKˆ©#˜GˆGìë®”ú6lMH!T£À–±Æyu¢Úh¿­RžaYŽÎZ©vˆ$[ˆÅ‹.‚†š U,˜\íƒ*•„Å„´Á™‡€ˆضòr„Mù,­€­QFJÖøˉ,ØT@fÿ¸‹¢îNÔ$l _[›=žÉrÕ™ U—+C]ë<ŒOÏì‰XC»ýGÍa)²ýŸódË|Ü:»‰Ë´®{ŠíܽôWƒ_3½ë¬¹nêDÓ]E­üÒ–ø/ß[|˜…H™½±9k”‡1ç¹Ý´áèmo
+Ìe©à™d{ÉQÛT‰Û§,$4-hµÈˆ´éYt6]òn‘# ;KÿSí¶ ¡`ºÇX³ µlÎÞ7óqgûϢ̚ó•¢Çtµƒ F6¬Ýºb•ŸBŽ¹f]Mõ­€ùÃWÊŽ$$X[4˜,W¢´A¼ÛèÏ)É„‡kï÷Züe”{DŸ#G®¤ ÿ’@ë¦Û¤;¢ö$¥ŸâÝpús7ÚÍ%ª­‚y»ÄüÓµÛ7ˆ çqÌÀ~.Þ;DÍDÃü ¨v5ÿ’ñŽ?çð$í¨TÔâÚƒ{/`’AjæÌ-o@˃‡!ŒÙNñ'„zH¶Hý eÖqôž½ÁI€M5ŸS L±â;?Øòlö<¹^â’ˆñÛù¢[m"ýðøƒ³ÈS6$êˆAxì†?XOú¿­:*0‚ÝuƒþKÀ££IHl
+ô`ix:ƒî
+Á§Äeù>—ìÌ g¹ÿÐ6’¹W¦ÃXã›ßŽ«;0ÍO“0Nž µ]ÔØIwC p„놌I‡"*\ðunE÷¾°jD*u.¢*òi1<ù=b¾Ÿ?!"Å+¿²YCË}«‚Ä´2ž\ÿŠ°òéÕÏUÔ&ïÚ ÷•Ý<Õ´ƽÌ~é¿â˜ú0¢(;Xhpþe]cmã,ILj®ÄÃßùœôX#
+BùÖô2XÃ.-"p\fÅAéKfµÎЭÓ±…Õ|P?#> §QOA»ev‹`˜oÍúù8n"í¦ÂZˆÄ‰{¹¿ÎÍéåðuúˆv’²SHãöûú÷1;¥‰ÀÝl¨†=.ìPýÜ×?.(æ:ÆéN÷³£¶+]è3PB»ëÈÜñ“Ê=@å3sY',Hï/Ptl£²n&’ +¨ùßÈcÅ¡ÏU.×.xÉ[s' ŽÇúMvö€·†×ó‘Í‘¶".ˆÀ¼ÿf ˆœ{G¬Vd¼µ§c¸°dK÷åµ{@$»°“…sXõŠ@Iº¥pù[—® Å{²EZÞªÁÁ!_¦âÑä¤\̾˜Ÿ%<2ü.]È–=§©2e­¾ò²7dúû ¸…½ÕvU[L×c€:æy[#¯V«- ÿ‹Ïß1/Àübô´ØÙMÅÒ_Ô”qÛ¹¸’=°’9J ië].}Ó {:Ü«`­væÌ¥æåCw¥ÛuȤ÷l›mÙ<äÜÓ;ƒc©sn†PÏ©¦ÅÖRÓƒh…7ç7*íÇ°ú±°™{6tƒÒÈÀÔNaÎâíêôj[Q®Î„ÅàKk^¹âP÷S¾Ã§Óº¶2 ·µRÿ¸Ÿê"Ð*æ38HÉaL>Í›N›s?»®~r<&h·ã„ ¥«HƒÈ&_¦4õB€FXÓ
+[Þ)Áï&ó^?4J@9QÒ.>¹Œï`¢¹Î\Abo+á3Ÿ(þ«Ê r*Kßv‰“‚ø^¥Öeö¾ýGÃÒÐIzó‡<,LJÁñ›’:7ýçÄ;k°ÈÊM Öù4¯v¥IÓ˜}å¦Ù‹¬¡;ͽù@=þÁò7ã‹Èá›P*à½:ûÎÓôÈí¡FNKh"°ê›coS÷·_ÇTr@ã‰Y ¹Ø-lZ¿5µXcN›5´®¶·/0F€eÑ¢«ñ­42Lññሜ#¹±Ô©o>¬]âŸôæñN€ bkˆÛÎI›í8ð4(gAcü½ v"ÖysÅWX…2GMž›…+ÿ—Ê0ìõßTÃÙ—ŒðLƒUâ_ü¬ÅFæðÌמc
+{¹NÔÝ0z—ßÄÂ> ΂IäÁm¤?yÔÈÎlŒŸŒkÓº ˆ×DZ |k6ÖIYýi±vçÿÙ’Ó*Ê: DX^U¯Ùh_d’©8¦*õ<SH6,a}`º6xÈ![ŸT-{øIÂÁ#%X¾“ÏÕIâ¿#W ÑziAÄàQЖÌ@é1¾°tªž2»ú6“ÃN1 ROv­ÃÛÿeîkP\’.{÷ᕪ} ÇVbCD‹"-W¸êë3ðyÆÅæ½z ¤èdÚ1ƒ,ã´dˆxÊì£?5ñ{Á6U¹ãTÉüœ^ÇD™ùP’l¼Dœx‹B~Ó÷ÇÕ?±ºÂæc"î}?ô¦V.*Ä ø¦g· þ¯ˆ¾mÁ‘£ûZÞóýk"†ür@õmE[ É@Ñ­ãÄHŠíÅ
+Ž£°9|ªÎKE †¸™ê¨xp€€_‡Ð¸lwÈV,¤<þ[*£Óu¥1«=çI÷DÒhû;1°×„M}õ½LXEKÄQ£Û‘ Z a’'ÎÛ†ºÏsñ#j"˜H¥ãýœ«.Å­fYÙæäëÓT©€¥9¦ªÒÑíaX÷­ÆΩ·´\§¯µz¥6 ÎI»Ó¯~nh§u²WÑ|µ–Š8Lo\‹äºYæI·ê?
+Ižðú =Wœð¡•f?û:5þÄ"$àŽ00ÅsÒAb—ð •jaÉ>ÁZÌŽåô}‡ PM‘ùNðT§þû¬f»{¹·ÄK‰ÑAlíJÉ=/Uª,ؽÙïäEiò¡<äbp}â­ÛB;g¯£w+K“±´D¿Ð¦>öÜ+dhNP£"þb[Çѯ·§ížÙ±C¯^þŸñt<5z úMÝYš8³ã‘8Su"´󧃿GK53ÀZòßÚ—<$¶rB‰ÆÈ*~8ŽÓb!â9ƒ Ñ)ÈafÍ~2|Qåë]}®Çÿ]í
+Y0
+´h+%Øû»Oüä{;ãhq¡vÁPúŽ³ìù»ÞŠÿˆLœÑ¸4Úà7€í #sÄ»]^3½™%1íóZ0Ï×(ñˆY/
+‚ 
+°ý3ÿ¢lb‚üŸ>êlmÉÐë¾K0ø¼¼¨Û.6º™f›ë*Ï¡7 qh– ím!¬¨ûôZÌ­Yb5_½–{ý 1¿Ö²R©Ýq•¥ÏŽóó¤4–µöPG-«-’|¤mcF{ŽT<ôšÚUñòp¢§’ Ó…á«yƒ”
+X¯DDqŠ5sís‚àÁ€dŒ+`˜¢s«ùe$8_€\F&HPn‡Í…èLTä|DŠ°îÌËÆï}Áü½Ù5všâ±ê@)ÇÈ{Ðy‰Zy)>øFë}çkàÓo¢ñÃ@m>šÝ ê]½I]Qô» ¾ÿ`d ´Êøü`"-ÐÑY’5ãçÔA—Ž8ÖÉ?ÑWñkÑϽQ‚„Õ&èÖ>7û'Ÿ1‘rã€4ªÇ˜KôD¬^«þô¸ùòµô.97`)A¯ZgsN–Þbj÷°åqzk=¢ú؆·gÍUQ—0ž´S¸hyßá[ðKNR|pnBYù“bTˆ!Œ¤‹Æˆû)œë0¨©•Ÿ7I‘ ­ð
+ó­]bEd5rÇAõ&áÎ'µà¹VÔà”Saê”é™À\ÿ`q­©jÂ( ›´é‘;ÅiÒF¾·tzŒ/AרGá…z@çˆVÙ ÃóÆeä»Ù¾"6)-rùEÖ1Ñ:€,·¶Ù`¨aƒúª¦I•´1 z›1œ8Ô"vÁ1–+ÌW(Ö[xo‚ ºøg¢š†çÏb:ïF|‡  è\¦®iaçÞnTr»`7.Lš™<ÎÉÐŽ{2²f¤Š{™77¾hìbAzaSÏš²ðNœ%o¥+A" ŸÂ)Þ9ó“çÕ (Æ3º7XÂf
+[ mÒ¡ú4XÓŒÒèQ”vƒàTó¹z“äU<†Ùß1Ä*b¿ kkñ瓺Ÿ»8øt¶¾02KÅ_Œçð$%´"™êsý4itþY5ZË™k¯|ÏŽq²_Æ0P–&yÄ”Ô$¨y7á“(ëk_hy…פœ~éÐH¾¬
+Ì¥-úù
+ꔼLŒ ãj„£}—û/Ìz¤vÿÙÛ02O5ãôËìiœ#’ÌB é®Òm-û18ˆ
+`ωj ÷žê%EØ[zú¢.ƒ“¦ŠG"ΖxlÂ(ÝkÚ›OˆÜ"M2ŸBÖ Îg¼‘v»oµ-i“He=M¬$Jï» óD×ê¾q÷ÇBW@IÜ ófžkë‹*¼˜·ÛOQY¤Ç} jÂÂûÖ8p³ŽA
+ÑuñÖϱ¶Òj¢Cwvêoî”ù»¹¤ëËEº~šgñaê‡[Šé]LÑü¡·°"r2æþäaKÞ ù¨GI ‚î-~–ºÊad–<:¡Ž÷®+Øà&Ž`•ƒ‰Ó%ëä”`e\!â-T œ‘QZÈêbÆx—9Rd‹ã¬´+ìm[] Êñ˜Ël
+Oë‰æŽ´ñBJîÍéT+ñ &OF Œ=½B:²ÏåQ6*zšˆÍáÜ$y:v•P?Þ)C$ÿ M“¯[ 2°öà¬9G¢”]íÕn`$âM*þ²ýC˜–çÂrûž˜W5lNÎßÊ®tY =Ò fÜyn¨ÒE=e¨ÉU%oÒJ.B·b…” ’ÎÃ0~™¤¡D¯$†z
+º ¿k¼[€µëAiAßS57³<yC…¬$ Úù4êé5_ugk!Õ2«eÝ}B0±âoèb*2#øèUop/²õ¶5ÎE˜CºäÌ#%ÝVËÙ´±ÁšgÍ’ï+ûíÁë9`HñÎûRù:iöùª%d<–q´2œG… ôßo‚“xSd¥ùôbÏ ÂÉzs¼©&‡‹r^µ²0¢¹ p†;_ÑÖͬ›š­X­¿[ú17¹ôsîÈ¥‡·võ—rHt!/ÍÚL—r#˜ <½"+Uœ÷“q±¤7>qf=ˆŽ|ºæ’Xc·Ô+¢ææw¹\Š“”úævD Œñ²¦á¹‚{V¦#èb¦›âJN’%“¸Ñ&zVœÍq_å¨ÙŽk»½@T2R—ÙãrÒãŽZÈ…Â3 âUïÚ¿-ÃH¬
+æwgž/b £èüö6f“VáŸïÇhE0׃»
+) ptq xî÷
+ W¨Ø~úûB‰ìWx@¥ ^Ð’;¦î¥·5ÐÖ.A„,±ä¢T˜Næ&†ÇÖѺ­íä>G}~á„h¬ö‘9>j:ߘ<é•$ô#Xù‡Vl+ŒƒÙy#Œ,wŽe£ÃUã@°ŒîÊ/ ` Ú –ÄãÖó’jäÚØ’>âN€Ö…„X&¿³\Û*‚À°ÑN…Ù-þs6Wº|!
+v$—“|E¹«§Ùøû¢)¸uL“•˜•(~ÉìÖF†³.n°ðìCÉ4E“ãHaäÔz#å½®a&$qN“Gëv±¯¿ î÷é²ëþáõ¡xãW·Ð®7ŸºÝ‚qNê1q¼Ò)&¾Le ÖÐÑ«PêÜiáxÅ+_´j´`ïáy#¬<q
+˼2Ó‡¥6ÄZñÄü '}¢ÍAHÌ•G|†/ßR Z´ˆ:2·ÒÖ>7K#W]©¥üuˆBž5Ö½3­¯&ñ,Ü¢âÞ‰W¶âú¨Øxe*L¯Ñùë'Ñö€^·E²Û;<W÷tŽËèDÏ%m˜íL\
+#-ßW 2mü*EQW±¿Y^£áI)]¸»e×ð6·£oëÔ‰À䲄ÿ£2³Ô3ê0ð«Ïf&dšoMm%ª×‡–:¹Û‰¼àÁùʹætb±ÇÆç™1«&ÄqêzEŽ¶bË°¥‡,'×·M¶*Ȭ>-‰áì!©B˜#ðƒØÝ@Ã3íGŮǚà[› ×é—¡-ÁDÿiŇúR)œM°CA§ºt]=óÝ Z°(òê¤3ÄYœÒ7¯øE€dþš{)RÔDh—“:|ü`û=ëÒC f‹=L|Ö–65Ÿnæ¼2þeŽßƒ7ªÓæ`ðR_Oô˜(•‚
+´} ë][¾ewÚyÿFX2UË[Ø0½låÂq°‚߃ýãÔ®ßF(ÕûêlõmSF¶¶ÁÚØÞâð2Bû 5æ91<V¸!ÅWz¾“s©¦àg Âi´ç|´í˜Y=U4¨Ì!áfW9]Ä~¶€9O~ë‹8¹˜ ? Ê`¢åz£qøÂyÔÒ >ÓÆK ƒ_̤ÎÙH4G’yîò—¡ÆÎ]¢ú‚j€l x¶ ü[y•±V
+†^rM?½»»·±+±ì*£¥nóŸü×በoeh=ùbV)+°ƒ™g? Ç_Ûèå)GI›¥†Žº¹¢~ÔDJø°MµÏüå[ù¸¤1ˆ¯Ë“ Œ%ƒÄ]ˆK±–-Þéñ„'Êañýpø@ï"XTÍöÇÇæ’<ÁI pÀè;mxäÿö*7ÁNôþAo³¹ÄT½Wtªû#5”˜Š/ÌÙüê^ÄÞ„-ä7Ãõÿ=owq1àïÇú‘Òé«k>ÕVœ\Vs¸‚
+
+}à‚z¾Û«½²Ð6q£üÁ^4÷aðþâ„À#&´'à4Üuçç—µ=ëT˜q„b‘Õw6¤EI#Ô´²$¼&Äì7<¡æÑÀ#Éã8j>[]†îÏÊsÎ:ä^`saá8®½ÚDèѪšËÔtízg–€=@ýëRBÕN`X—út\¯C8À*ßHTª‰žÎFvØŠªSÑbÐ?$؃ÝÖ‰iï¶È(w^®ÚsÒR–i¶!ã ѽ„Ð •Lù%*DCî̯VãÙ®Ê+‹Ž¬6= us mëÜ¿…ˆ"*"\õ(`ˆî½­µc’ª;ý!ÇG‚sZy½%úݪ³ «K’xæRÂóÿ±W‹Ÿömx×8ú…üEL##oô¶`êE?ìÍ
+õŒûÝ]63Œ°ìô ¢7ÚTijŠñª¹—ëyEPnÙˆLŽ„áÑÁ_§@ ú°Á›{lj;øãmË» ?ÈÆjãÙo\6ßKüAiã÷”þ1XkELÏÞ°ñ1²p!øÚP=V0ÒŠSÎÔ…Úß öŠùç6¬Úh¯Ô‡ù­ßÖh¼ùÙÊRÛoîS˜˜x!$íeñGÖò1´a¯B#UÄ–X³§qŠÎ\r><r°±˜q˜u.]]éÆþè=§;]x+ÿ­|žçDäÕxý;OH3(@5ÊFÖ¦Ú
+Ê‹‘§hJë#Ôõ<1>»»p­Xà“X #"Yˆ
+";”ó~h*¨Eœf'`AL@@C䃜øÉmT¨±«ª[<„Ø•9 ³ñ­Õx¡ù[ôôbPóGy}õ€Ú
+Oûò %ß÷†Í#ŒV©¼ Íaµa¤ }ï–Ò}=d€=éÉå´E †ŽÃçi†³AT°áW·¶bO=° ÿFW÷Ñ'¢N¶›JÜ­Äž%úA¬Ò0±àÎvâ‰Ä.«°ö —­D%ÒÖE((
+‚h‰ç^gŽÓ™›Cm;h6ºUüÚ'ÚåELFMöÿ]ÝlSLLÚ™Mºù•G³é%‰ËÝÍŽØ¥ÿ† ˜ÝìÏy.„¢µ3ó}Á¬çy
+·¹$ñ¾«Ÿ`Ú,@ï…¾Y~ TöšÈEzЇ¡“·ºTsØòƒ@÷×''.M”WØ¡é7´|@'º§}]|J4êHÏŽ>Ìš&y…¤CÍ‹¯' ¯©ÃjNœ¶.ò=[˜7‘Å©áËê…²µ
+.‚ïU]Eüå…%i#ùŠpÞP6½œTÞÚm‚ÚÍlQT¢Øð¶~¸añ´Ì¡,ô²Húð‰$2œG £›ŽìF!PHk_1æ.È,ÃÇœ<>v ƒyÅH‚§û[XÑG1|Áw7‡ƒH‚˜ÞóüûrßdnU £žs± l¬(³@’ØŒsC§ef ±ˆµ3䀶z5lŽ=Rq1ó‘nX7A)ð£Ü
+ A­W)ÇþTkO˜$3 P5»Å@î½ÉtfÿŽõÛªa’¨öŸWh£›ZËç×ùgcØ’GÈ_) L0 
+n B ëúfïyà¿­´ ¿¾/mBô,T|p¿V7öÕämð±m3giùž’<84_¯‘å¼³èðÞh.©ëäÝ.JÊ4[´§±'ö)î¾o¬r·=‘þ
+Ïhr&
+ €…a$»h~©˜bÞ=Ö8w ]“›Ðœ}r®[‰®Ìòfd
+ã<¤CÕ™Àx‚þÞKt3Õ*Œ¡ëÄès‡¬âôÓ Nó00¬¶è]ä²±[“·ºËy¬%ózNMýY@Çš†Ø…ˆ0ÝPÔ ÿ(Ëóå\ÍŠ t{—ZÌ(HK›êÕ a[•…ï„,qÔáhv¿yjõ èïºæmÏ&¶ñ¢ _[Ùéð$:%ሲb©·¯kSã¹÷¤è¾HЉíý×Ú`l€~ ËE{äRrÕ»†ÅV+qùÂéÂüƒ œþ[4 Æ¥œ¢ˆ8
+—ùî -6v··1Uð‹¤ŸÊ[¶.^ñS#DfJVüОÍj[âbeåë$ö\(Ð7&gkAf´9b†ŽúåÉbGwFÉ&u3X·Õ~._å¸ËéÔø›/(ÕˆpÖ’ÀvæX„jÀžÉß«Ý8+bÎv!ƒ[—’:šŒ®~§`0pßo3TkY„fƒ\ã]<³eØɬÊTš/[ò‘óø㺩"“]Ì3aÎ∧§MÍuJŽLšŒ’ÕŒ\ 4ﮣ²{ÄÊ/VÁ‘PmÆA›{ƒ±Œ­{‘»1JÃ¥(^†X8ijŒ$ uŠsdŸâ…Ö6|JG0 eq®‡µ” o4…¹ñuÉ1‡½¸ž"r2_/èöCCâøÕÉ–:BFhö¡ÜîSÔ)YŸe+ý¿l4–rýg(ªø ^:¬4uÄf¤öLümnÞp˜c¤5«Ñh2†=±“=Æya†»ß]ç蛞€Ø^K917ï˜ó¥sÄ¡lûáó‹#¬@Nc7œ¿=5'I±Å±ê¢c­¨ffÒœ—í¶
+endstream
+endobj
+325 0 obj <<
+/Length1 2689
+/Length2 28048
+/Length3 0
+/Length 30737
+>>
+stream
+%!PS-AdobeFont-1.0: LMMono10-Regular 2.004
+%%CreationDate: 7th October 2009
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).
+% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG.
+% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki
+% from GUST (http://www.gust.org.pl).
+% This work is released under the GUST Font License.
+% For the most recent version of this license see
+% This work has the LPPL maintenance status `maintained'.
+% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki.
+% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file.
+% ADL: 778 222 0
+%%EndComments
+FontDirectory/LMMono10-Regular known{/LMMono10-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(2.004)readonly def
+/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def
+/FullName(LMMono10-Regular)readonly def
+/FamilyName(LMMono10)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch true def
+/ItalicAngle 0 def
+/UnderlinePosition -167 def
+/UnderlineThickness 69 def
+end readonly def
+/FontName /CDHRCQ+LMMono10-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 66 /B put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 74 /J put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 87 /W put
+dup 88 /X put
+dup 97 /a put
+dup 64 /at put
+dup 98 /b put
+dup 92 /backslash put
+dup 123 /braceleft put
+dup 125 /braceright put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 99 /c put
+dup 58 /colon put
+dup 44 /comma put
+dup 100 /d put
+dup 101 /e put
+dup 56 /eight put
+dup 102 /f put
+dup 53 /five put
+dup 52 /four put
+dup 103 /g put
+dup 62 /greater put
+dup 104 /h put
+dup 45 /hyphen put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 60 /less put
+dup 109 /m put
+dup 110 /n put
+dup 57 /nine put
+dup 111 /o put
+dup 49 /one put
+dup 112 /p put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 46 /period put
+dup 43 /plus put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 59 /semicolon put
+dup 55 /seven put
+dup 54 /six put
+dup 47 /slash put
+dup 116 /t put
+dup 51 /three put
+dup 50 /two put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 48 /zero put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-451 -316 731 1016}readonly def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª%9.ì¬>XJ‘ٚмD â"e?¤¸€›&¤oLH:]~•n¦X%„lþÞ¹”­ÏôdQ@ãa~M~EAËŸV.U‚›MØ€ª¾")éJŸ¢Y§4Ò›º‘º UËêC9¼¿ù2Îÿò–"\ªºÜ¡w¥Ô1·rlxؽØнtÿùŒaÂAÙ*Ó`¢†ËJpÁ¿Z+—¢TXêÀ{˜¸ñ«ÉÔ‰ßZ4
+œ3<¥¯@žRî¥bš¨[‹ž£s¢Šilk˜Ð`LØ®_/É{ªS”µ&ÚQµR`øSZC^
+ª>\•¿rénóÜÙ±M0/¬ÞT*fáv×XòA္í Ý-wúÙrÒËOœ±
+
+ºïeýJÍ&^VÂ-ó/gvDgPgç Õ²,ÍA·¬*-äˆ7püS˜¦+zZxU×)\<äQ˜AÆÙ6Z›*G@†„áó ç²n‰Z·' pÓEøŠT¶ Úô”pܹÍÅ9´Hò]Ycð}’vÃefP×m›£m¦˜õ¶ ¾q|?TC[OÝzÏ¡;^3¦Øщ!'ÔXÒ³S‹|cª"¢2ÑóÛÇ¢
+ó|!èf±´Lý¦8QR«Ž•j¿’Ï'òÌj([ûI’Š¡¯ŒÿMÃæ¤TY[Òèy
+J¢oø4ŽÆ!‰´"—†ŠÒĈkâ:¡ƒ=*RÁŸ†•©~z¸ ú˜Ù·ÐÛýéBÊp`³¶,€6ñ`GݪÇ1ßÕÅmF4AÞÂØòì“"wFeN×>Ò{~ÝB€ÔµCí"³–mÂèÄw·Qº‹–˜šÑ„~¹„_xE©¢6KÙNÝÛEÎXx;D5qRäœþ¥4˜´¨÷œz¨{$õzÄìø“›‚#û¼“qÑÖrë;¹WÍ>="aª›?s)i•Í˜Ã^U°®ÒwgijqäÃ×ï£öjÓdA"öÑ` N¼É°j.?N z§¼ñyìXο~¼;0¬Šë°šÇ1^`ÊÕ›K;4‘F¾¹6
+nŽZ0.Ϲµñùrñké^a3R !ÁA§žDþ eqðtð|ÁªÁß)Lþì
+­Çä„WKÔäÐP.îɪPÎáAG§H6nôõ­cÀñ!P7…äõ¢Rrôûî0Œï¤PÈ—d¿D
+¿ ÆçÉЧÆ-lÿ@§Ü'äÀ"@>>*^Þ×L›ï= ‚Ãi4½îbé”JD>l“lÆíŽv\‡“å2؈®{ä×K×Ñî¸ ‰F¶Z ?ÜBÜ7ÿ”b¾=@}½ˆç×¾\Rè=©º(Ñ—ç9Á¡ìpv¿Ìôœ}eÉÕf27è)püÀ2®Ò¢ý-”î y.v_WUðãñ˜òg§Ã·ŸšlÂ4í8 Æ¥œ¢ˆ8
+(‘-ó3ßà]Üvû•ã¸ÀmcŽúc¥PŽÄÖô?H~Jk0§9læ„>Wÿ›5LËê¥nMÏ1¾ú’©ßvÄôœ\ø¿‹šÞ=ÄVœÓœê=(¶"ŠŽ:–xxó>Ë
+‹]4nŒŸÇ¾Åi­÷0ùÚo¹½µ¬ö‚Ý鑬‹T—….¼ª#•†U€åñ€Æ<Ð9Ó™±ÙÄ ‹Þ•=Ý•¥TæJ¿T!ý3µbéU´ë#'0?'›-DîÜd*³‚©Ë Ãûñ¥ãÂâD/(Z Þ'ggS‡ÊˆÓâ$ÄðŒ=Bô»ŸÔÛEÞ^~ÐnP>¹ÐQ>Àü¾eHA #‡WúÁhäè!©iÓaÃ&t>¶,DBq’L‰á€Ídغ° ‘õz¤‚.º—Ll¦wd?¾ÄʈnØÝÊ?© o)XBvú|PÆE PúÐÁ‹VN¶ &£íå¿@%G¦Yíà Ô›ßý®¹…jFÓYûN]
+zgªVDêúÓØ……‡1ç¹YŠ(?ç…; ûúš+Y~ò#°ç“”rc°IKº±€J·C÷Á|UAÉLâ3™Mãœ{:EÄÒ˜ÒóL˜ëiš¯UG¤š¡êKÒ×EB5ôº(•,Ÿ2ÕbýÁb-ø×bès'„
+üMÔ[FùWëJ €Î52*ú¿0ܮЪšy[è…n‚ ºøg¢š†çÏb:ïF|‡ ©«G“Ä M}Bg"Mu|ìõT3¹Öö»¬üÉfe-I”8[ µßœÞã}>p/%õæ×½'Öä”þâÎ{¼»xˆTãú•{i¾ßQ¾HJo¡² y»5lg ã½~ñˤr' M*3"/™¤t
+Š½Òß=1î’£}<ÜTöÔ£äzS",¿0°o²`묮A-u&Åõ\C$#/_ðáVƒ ƒi£ÝBâ/XQÐØiLo¥f{åÒ_ÿ.i’,Il´ïçðQ= J¡ªØvÕÚúÒxq œOÉŸ–š l
+f!½h™ÕY?1—"<›Ëv+Àíé†Ð ?hÀËÅ!4j‡¢<>«'ðÆÕù¨»Y¨Fô®5ôXxµXî±&ä‹1{Á€2©ó©þ6`©l-žÄÇòÕõ5®“h.½|ÕÒõw-°hEÛ´bÂGò×5Šb™µ÷|×Ë ®AYÌþw=š^öb}¼›¦·).Kp”ú¤‹åUË ÈçbÔ)¶L6 ^²¶ä
+41œgB¼¿¢Â"³ÑÇåR·Õ_ìhð@‰¹¦ƒ¾ÄbÄ×õ/òxWì;2¤GPj¼ÃÆIî!†>LBmäXC©„ÑÃk!!íf9ù˜‘ÜÚpþ
+]£;^{j@<ÉXû„
+[ÌÙÇÝSCKô¨xÿ
+Öã鿯„Ý*Jómïÿ2hpÉí~df—:ï ú}Ñÿ#þæ
+aa:tõÓk×$€¹6TÅìâ«
+Õì \T݈!'­gM÷7›¸ ¹%ô¡—‘có£d8+PkáŒ3MíL§-¥,{¦)8iu$ CžYóã뺑˜ØðYÈ—(‚VçÙ¡ŠUDì0³ØУò1jž]“í[eŽeÊ2‘ÆçZa™¿÷JlÐN€þŒèü$3#ê•6`êròXä
+Á_­`Ðð>vðú:,Ï ×èÇžÕVfûkà7ª.± ¥tôHRYn8D¹NA#ó0è~áß”¹nX5ÔåFa>«A[KV6÷óeÙeÒȤzYbÌA?Cn–º(E„R—¥\„`à.2 )ã,øv­o,ªò"#{t1jÓϨ9£òrjÿ:. &Xäív愲ÓzE¨ n¨ì“cÄInˆeZ誽:rà"hiIl|æ¹A綞Üù¥lxjbΠ4Å̯VÂ/SÕîÑÿÆzi°1ûG´÷|´åå·'§„c—wù6Ìk’"ÓÑ<çÌ–,µË¡¬¤]ÏNên½Í$5GØ,°à9³˜¨rZ…oÙ•^ÿLß JΟ²‹±1ðb”´S
+B–óé°ÔéÞ¿:|ÚyqapÅê}·vßgœ ×z²N‚0Í›©%*`;>•ë…j…Óv/zZx:>¶‹Ò8²peW5¶ˆ}Ž>ÆÞ‚*¾^Œ†ëZ_Û–XÂê60½Â»“ýwàzÄá‘n•È,-GnØ‹ç™d Wô¹ËÌ­ÿh³ù¨[¯ùðS¿Û(qÇ1=‹œµ
+à:î•-¿üßÀQx6Œ„fG ÎχáAáØ&ê‚ó3£{wx0\™ ÔÏV0$MÕ‘z 50>Á‚8%¿./\&¼²ï%‘ÏVõX"îþ ôWúwÀjÓÜhá5:#UϘÝPèJKîHÉÄþ?[°H‚”B•]Vû¨7ƒÈÛí\]ëç†/»Þ–FûCì‹?~ ™3£\º."wœßÒȼx`$!³gx“æÞ5Øþu7@¦‹¾ É&ý}Ì"g5šlÉeó¿êmWmÙÅs@"‹WZq… ÏÔµ½ iPégãÐãs-ƒ'i—ô?ýd‡ÉôS÷¨¡ÉŒÈ~„ô’TÎ&ò¸ÒI >‰RÜ&þ¨B5Œ¦ÈÄr8~S@pv)‚n˜]èœ^ su¹^ÁLt•àrÌi3tPpyiŒ§¹¨!®|¯€ >o‚9•(ï…Äþ5Xä1Ïiø_
+˜ÄåFb]Õe< –·ç†Eáõ¬z‚ôdÏ)¦ ¤Þ®?üAÞ:1 íªÙ:@ÅbmÙG‚è,u>°Þ€ÛVâŽ7¸¡åê:H€Åàéìí!D°¹"WŽ^ýɬ7^¼À4±èv@ˆm•R©8ö|ÝP!^ pçÿ}ºæmeÎýZ ø$£jù2šÑ|[¦ûúáþ¹GE N¾h<o·›Aþý¹ȯÑëÂJ„©ìïjÂÙÊ°æL^lSšW)š‰]Ü/ÖòváÁø7±Ù¶»šÒEGVcŒŒ$ž½{ŽõÙ—⟾0ô »ƒ=º7€ÓŸƒnPùÔÞ°´ò!<"«Œ_$,‹9©æM娉ÛúB3R<ÑX:bBÛ"3µ ˜¾©¹s™]ÎÎ9:\ Õ¢žþ¢½ÖËaÕ\øÛ‡­DB³µ [eKR?fQøßÍ—å2±Â Ó‚ëŽì)‚34( ô&¹R%0ŠÀöçaÉF¦H °<àýÉDÔÿ£ÌÏ·£1‹ét˳"Ÿ2ЙµÝûÌ ,Èk±V uS·È· ûÁR¹¾v„ Ói]* >¬b …´ÀÆ7î)uv–Ãñ31ó³DÆ’dÌü.ŸE’b®±=“èD#eRy´¡ÁG»F‚¦)õ;Â-ŽÁÄÕdÕÏH9>S9¾ÛjÞCa7Y¶}OëÊZ‘ýܬ B­¥‡sí éüúTeÂËrCU‰X½lGÍ)¾Åª3­~ž@˜Äª=”¬K©ò´¸éYè‡|–¢„ŸÚÛ3,æÃô†‚‰éñµâž] ¹w„¹Y–B‡¶
+·ÏÐp;Æ‹Œ„aß ‚‚­ðNÕÂ&BÚÙKã«TZ«9â ]'Òírqñlä‚faZÌ(¼ÆšˆFWãbq69±@Ím¹ëèl…(g»ˆ`³6GŒ5æHŽ»¡‘ûý¿;QÓ‘g©>aý›A=¶yûO¹N°ý…¡•^ùƒ`o]Xûkÿo%æ>Mr5r1%ý¦¤]›Lbþ”r0ŒÝáGMÛ~v4¢À“É+¬I¿º
+TDˆÓ!àÀÕYUëô¬ßB}ؼíý]õ;cŸtÖ5$/ œÀ/í_`õÉ—}‚pɆ˜0ÞçB1ä¾&&`ó3!®ÏxbfO
+Þr^¿Û6R­ƒG¢f §
+ˆ!é¥X×ÊîÓÀë ß槷$0×Þοèч’ÔO9ìi?¾¹ †_N†&J(Ç9ÿ
+blYÞÂ@k_ ÕÑÈ}Ÿ‹¿:(„zþŠ™Ì1œÇ«6¶»}Y…a•ãÛHiÅ7GÈ(ÊŸì"ÒX©÷Ï1ƒ 'Šå>Z5h`ð|nI«äYN7½ÀÀv‰4ŒB£go/P ²ØÏJù6?4þ
+NÌ—~ R3Ú¬ïÓÆ‹UûD0 •Nâ ³Nà(`:§HÛŠ5à\+êr£ÝD#8SMdçìgØV“O§¾C†TU=
+;•™¦ý{÷­éׇçÔ¼uî
+´³†d3êaÐG¢åÐÑ>d¥‚,ãwl.˜eÑvYð9;4ç,æ€,¦ƒ±# WaAT|°õ“†4 ŸšÏ›((6î7¯v
+£É‰${åÛu±h10\ZCíq*˽ý·0Ú†ÉÊ I!ügþô6€uœV¬Çâ&Ì´q¿(þj¦ŠïÄIÖòÅlj]r³©ÙSƒ‡Í3ÈÍ0ŒCkdÊò"½–â<Ù\ÛÜfÊ Ÿ¥Ú •Bœ×,½ôêãÕºíìÖ¡”æ/¢¤‰÷ñh?ûÅܺÍ˨
+4Ò¿tc¥üÝâZ›„ÛT)œ\_VÝiçcPs¶MÀ¼˜äâìn­kð¬;[( ôs¦+Jí¾‹b ÍxúÌ׊¹b¾CTëíP„ŠÔ¡ÑnÛ¸ËFg±ÉÈy^†››v[¾+n9å;Yßh›‘ Ú
+ 1‰L<M¸Ï']gþg2çN×`ºP/áÕW’Xßï4Kn‚:±Ô ²:ŒE[æïG¸çà€ŸÄ-¸×_Ð÷D¡G
+zgªVDêÿÙŽçÊéò„M»ÜŠÿ°Þ´I=+îßìÆ Ÿ³NÞܾC˜»ç¾fw¾á,OýCm«rGQ<¬ÁËa3XäOGT¤?ˆK@ë
+ˆêq½-·A0 P Ïî}èÍïv·—Fß‘Uh™ø§þƒpKm¦ë|-ñÉi³äÚa¾±†…8!5§Ñª?9½”òÍÿˆs0Ñ»Òâe”„+‘©®¿!¦µë„çÐ… Tªþ‡ò@1qáÀä–B7ÙÄ€yÜ?Q:þûªi‘Å5²Ü:”
+~­ˆGçôüL£ÜZÈ3Ä° „ftÑ+­Ó»@
+_ö¨‘µX7hŠùè…m}ÑYì"æ‚U]@œ›ù_ðú˜Š÷‰áÚxR¾–Ô 1÷¹#ðQ¡ü AºßgÜ+èYt裬ªT5n²ùm0.ø‘<k¶îá”è×?¼ ³ßMhš•L”I<øÇ4@§Hôü¼¹ˆE»ã3§ÑÝí÷m'Áe³»+3Ú?¤A¢9£W»ÔGÛ'‘«2ʼ?¯¥‹P‰ý[XJI÷«¥æêõ‚Ý6ÁÒ‘fÍŦXî-ÝßÝ%·’‘x ãeÜ® ýÊ.{îQÈ4+Š[F ñsB³ìBóë³D.` Êø¾º„õ “*Vy±ÌdÇÃé›O"l‹úƒÛgyk>;T8‹§QjçY&ú
+œ‚,]¸¤ÎxhŸ˜d•áó´â’Q©ÄýÓ%Fgf²Ù8]`ëèµIÄ“.°˜C‹ü†?,2®‡€ÁŠ tÚT«Ê®ÂDŸ@Ж XW –%Z•ÔlOι&ÆÒ7õ/ýwÊOQz¹GôfÖ¦±ÇÌ”ƒì Wt![–‘¸|c»ž#˜ÆîføWâÄ×tœ«×Óš“‘
+¾ì<­ŸJ‘ºwaÛ`ð±uMÌâÔsKÎF
+¤3×p%Ó¼[«Rë´,ÃëÛä+0p±®¬äüO0Çld¿â‹¹sÐSØÓ¦…’¥jÀTéªO=ûËå·–ÝðifãÜæHÀiÉð§ë]›‚
+?¶ ±™š^ûµL‹<s_mbcý˜ã¤ëˆÈ–Ó˜õ"‡<M“‰Ý÷bÎ… ³÷lç'‡ Vݬí“Á$1ÿ'@Úv—]D¦­  …ló‰{JL- !í˜1«½ibùÒÚžh¤VÞFY‚ŸA=¿kõ£’5!¯p//·8.êݺ³oÛ|`"¼Å£¦Ù I>xnK/£è¿ Ô­÷bqìGOªZÀ_
+ÉiC&W3é8¨F˜Yû˜'GÖˆ[V~R8,¢ šç`éèÔÚ×Z‰‡.èfù’6ðý°dðžq(ö®Š(2OšWà©ä˜XáÌ)Ý$bc˜ ç£ ¾¢;¥„l7€¥ß6W‹8÷
+÷‡F|ÕI²IçWG¬Y^Š}ªQÆ“œ1¬<vŽÆk`“šl¨ærVúW¬Îår°Ò\F€Ìé+g‘až‘ˆÿ¢îÎêµ ^p ï™Ô ³ª>¼ü;š©ÛaûçÀøÏÝZœèä)9•Ðß?¥2N>ÅÖìhÑq5fø­ÑbÞ¢g}B–Ð Ôò|J?ðÑJ†uì9`«ˆš°Þ”`ÿdZ… 5²gøw&ZNPðÃìêãLƶq~‹yJ²Ûýß:‰dŒd9©¿Oò&Z8Ïi¶»•’Õü?ÝäÎÃœµ’Í-öéeÍhšÐØoUÛ£GìðH)~3Êæ×"¾pŒŸÒ¶‡½-„«VœZüLÒBxº"† õa8â*2oÁå¡3Ê¢^¹S¡Ôçúò¶Œ9©Üê~Úój³¾'E’p}µÑôH4ðá¾X5‘GZ~hTE…õYÂb¦M£5ï¤ÊT‘È k:PŸXó‡` Ì]€K97߆P#îõÛ|Íébœ BL}A?þ°]gùcØ€gipн©‚Ûþ퀾t$o¸ VóYçÛ®¨J–n¿·žþ9Ï6xR0ª=©Ä UNŽhwI¹!N‹‹ËlG™t¬ˆ£­J¸_HvARK?ÀUù†:&áøÜiÍlcÀ+~Bï\l¤ÞNüCG¤ãS@ø4}¶'y‚¼©yÎæùŘ‹fúA§Ö-ZqyÐ%˜0b:.Q-)Ü€Š¸þ‡<ŠÜV ²;СPúõo¢Ïˆñ´Ñõá.‹fSzÍÆWÎò(¼.ʨ3@m÷f˜ÁCˆj)§ˆ³$h5˜–“ŠênGÕ'ý᪷K\1†ˆØ9À€èäR´š®û/…é-!(s&ò¡F‚Y+ü"Q)@úí²UAX0’è
+AJHÞY`£‘¼jr·áLçf_WcË5
+ïZUÖ¤„§ziö Ud/ä7«$R–…Åwô@87›;OSŠ›K= ÎnÓÊS$¤Þ-QO H>©¬9¡kFpWØS|ߧ÷9¼S<÷hI=8[ìݼ*Òµ&ÆÍU´'µ$¯Á¢©0ȲáS„ý€›‡am)V(òg†ÖRgð-RžqC™ÿÚ2TæwÐ Ÿ/ô×
+ØñªÝo³OU°U K¡?yê xqªÿ{„¨²³® ´˜¨§.pâÁäúŸ855+aÍOŸìiL°BýÛ3tp™#*-ˆF>§5¨¡‡–ÓÐ;¡U¡ÞüéÅÊ1sr
+¬±ª}}aYèÙòkœÆ~~ ¬üÑ°GyILPYXÒ[È ^iŽiÇ=¥V/ÎBÿ×9\¤[–j̓U½@':¹†ø`!ã°æ0¤9û-ÊÎMÛA°î‰;l4nðmg$îžbð¬>†Þåê'ʨ§(ñ ½^ÌSü^©›^ïÊbY}áúî–ƶ)þ,xº‡Ê‘³¥ð2;æ2¸O\ï7$Ê Y¢Æk²=½æ{<`Ã-ì™/¾$ÊŸ”ù°/;)k
+ñ€fòP³ŒªÐžO:cdÒµØQ¾ìFqµ!‚êpi,l›sÉU8·ýÿuÍ5—’=µA:ñâB«V£bfâçUÿ˜kę˳ԃ}\aD-zãT?>ÅÃIÒ L´éû`*!³—H™¤ÈøÍoÝ~-·;ä#€Ù`v\Ÿ:0J’¾ˆÆ°ÆMnèF…Vmœ‘*Í´zìãùxnG9ˆ‘ÄHFnó!ïâÂõZ]½n/ªŒš
+¥5.!Ñâ:˜Ÿ¢'Ÿk§rž
++ HËJFi3Ýí S÷Òò†D==h•p¶Mù0›‡òlü£]‰K͸P°×'¿ô:²&k]HqŸŠ[„©ÂÄbÖp—#Ÿf/Xõë‰KéÛØ«QŠC•ß4µƒ¥]V]0Ñn×&b‚mšef‡ƒpN€&Ò3ê©”²aœ|ó
+°È¿œlœ’Føßú-!sËáG<Fí` ¿–M™¬–Ï‚ÚQ¡ä>>jvèÆ.R¾ Köž#ªúµÉÐϾV"Žß¡¤ðpQÓQz–0žÔ¨x;ÃwI×íô³ˆº"Œù%Y´úUHÏã&m°àˆô½DÃyïÏé(4öáÇ
+ p5T˜a¨¶Õvpƒ?‚ÔÆz3\C±¶ü•ej¾Ï"HN»PE¢Ñ)®˜â!+ËSEÔ3í#÷°¹§AK n¬ÎŸmkî©ÿ8Å_Íüù¿‡U mquÞîz55šì˜kAú ”¸ÅÎ9…°Ùz°ca]\«aViW®®nÖÈ
+ùê“ð.Ÿ_jb3"EÃΑa<¿˜6Lׂϣüd:©qÈÖËFÓ© Š#pôÛ •ÞŸ|º+riYHeéE>›nò'†}œùT›;Zçn>º(é¤%òTiO4ºH•îÇ
+ôióP¸ï… >M«(±]þ¤—KõÆxÞÑÚÉ·°ó4Š\•5@«UÖ&R–NcæwK° ϼ½/žîÌ£|l€õÉ1cÂ"1
+»v™×ý5Âû†iŒ\WW'fVeÈŠÓŽë¬:åËϦ8nVšˆ±Šˆ‡šÔð³øú{
+‚³»[ •NpxÞ>1Ø®eùêUúˆ2ŒñL«ÂÒhÈ3¾±üž­šWŸ\Á¾'~óBœë‹èÔ•d§˜ðp´]H‰&³cp-í¸’,ÎkÝ•²ì4LÓÔÓ¦‹‹úM„±^]zA£Ý&;ÐðEH[nFáC#öݯ/Q&!>c¾²
+†8ÐU»¢q¤ïÏš"×äF-‹†*Õ2çV²f§Þä¡`­ÎkÑÐÞõn×½£.Éì–b4¨ÅÃinr­\«\¨~zf“·nÖm+cxë§õË [ݦ%¢mÍR@qªå ZÍË!c™b™ú%çS•ª¢Ï0¢€Z¼;Ý9=[![˜ØÜ£9²oìû3Ô—ŠB*ZíU8Ô`ÓÛÂv’ä ¤°ÙÉ`«p™jô1SÓœ¥
+Ó.õµ®1~Èæ>ù7íû~öžiB¥ÃˆÞƒÝ'—¤3 ‚i3 $¤äò ³
+œq¨Â>¢áëÂçÖ÷æ,°âÏs¯ëožc §‚ ‰Í-ñ
+pŠ#Î9úŸ-ºU=7c]ÚQk|ðRÿüy²Î¾Ø3Ãꆿc²NwÆÁ g]§'qcuɘX™ß[ï*µò' áMæSë¼’{” ¸û´T1j ™]©)L¾{#‘À-{¿|eâø“˜ =¼\Tàè+©Ælr·)³hø™¼
+_¹F3Èê—Ÿ›¸w¥³îºèåe#xªl¨O
+ѼFlD–†3”‚ª7…âÖ*7j!Oöz>d¢7¼†QOiR†/ q6áákA~´¦$Êk ¸ÈF:]Ö?pü†bС¬ƒj;ií¦ $­ørN8&Áo
+¤KÁ„-vÄ«hG4gÀu?ß
+:ñ‡Ç+›åñž-—wqmXUî\Ä">¬pÛDüçÀJ::°D‚0Äa3v})˜°z ©Mºæ ɸíê£i>ÌpqþëNåÖAüõ^bK ¶Û9»ÁôÑI0^mD.}‹X
+Ìú ²Ï$#ÂM19ð ¬Ö$o¦†ãñ<½o¶q€ï®èCw~fñBÒÉKçâA@ú£©ðSqÂI)å|¸
+öÛ$3Ö_ #•6ˆPBÒHÏÏy<
+´‘ü¼ÖWuý̯‘ú¹$—ÿ%霱gYtƒN¯FeÁð¼§ðµ3€Ýj[–íî˜n½žÃ@hlZå”+
+êÐ:´…ô=Öiéö×:>Ê­|%¥ÖhÌWám2}RÓuÆhWÇQm™Ý±p¡gúë_Ï
+„äÝÂ2Ú0oo)Ä4rý̲m{M%ckF¤î\©šÔÕùuÍŠÛäj±µ1—'ì]CÝ)u 7ÌŒÀTn<‰-‹šÂA9pûc­‚dp=pXr§xð¨;¹?zS–907>rf.99Åè6ˆ-óiØl?¡>žžE4¬/šZ%ºp4Ú7‡|'«vì-(†5Õ Í–CÉ]æ6np‚¾oà°BI¤„ 8íµ†«Í¦£)û]E›~lfhQDêK'1ÝÅ4BÈà…,w\)`j<,sC‰¹â-›«—Q  ‹ž‘úÆ£•p_sõÄÓ³zÞ‡À:-Ñ>¾ŽT›¯By²{â>%Ø'Á´ùL»jÑr¯<z¥Í/²0%è`žàãDW&'TôÙ(ö`'¦fþ²¼—²]_Ü9ÓƒÒT-ù¨ºè±¹^Dé#%”KèÎBÞ¤ Læ©xk€»ÏH–ØR ¨"w=çW&‚?·á”8v¸Üö°,£ËE÷W¶Êfe`²)žÊfi"Bu¬]DÌ!-H¾ª]ø f9d®;ÈRÅד{s+x씿’IF‘¶UËœˆ™j'äC[ØžnÖµˆ‹´íàë‘ß?âÖ!›yòy^Ķå*t‘øÞdM¤¥u®·ÑhÄ+H
+*òõñÂ.<[¨Ämþ “ü¨ÊÖ½,q +¢yÆIa‹âÙ±á ì© fð—_=þ)©Tfô‹8ëã;±·Fÿu`‘eײí*I•àƒb+6Þÿ᦭€+JŒÄ°Õwj#Ñÿ›Á%Ng`øÒ8^®-΋É- &§ÞÚoàŸ}ߟ-æjf^ì³NÂâ­?Bg8O½8å]yQþ™¨<6HÉ6ÅGÍ yk OÜÊ?üXõGóm“IN] ôcË´¡VaÄàÂŒ´…öˆJ{V«µöúrÚ½o å)pPH¯½ÒjòÙ‰UŸßW³Êÿ.Ÿ9THПŠåÄG*¶6÷¼ìêðbºåäœg“Bf«°õ¯ .(ûiF½ÙZ÷ìL?ŸM&AIÛwD©–ƒêÝM@ba]Q`’šXsþ«5]½æU+mÁÝXÐ"¨qB%3e"PR쬆u¸nYÊ-{¢€Ίç‘íÇGò«9§6^Ðó0O¤uwE}l>q¢#~mì H9_“^äîr%BOÜÏöû’±,°®;'=¶çQõ ðËnÜ+ƒÑ^èS¥ß¯™#—þÎßšŒPž\Ñv„pØ¡6 ¶k!Àfê‰ÁY3å ×n !µÕ¢Ru|Kx“ݘpÿév‰PÄÕÛ,°g%i„O‡›ÃÆ÷AÄ”8¡ÜêÏorÞÖ6?•ˆ%f‰Ù{*¯‚&ªÂ]›šsoøßá<Àkã CNä,`@vVî3”FBs¹w°´ñeQ?{ÓÒø5Ô…3i¸­à±Žýç…‰;^ý`£7©ñ˜Càe=
+zN}5½t]â™B(£^‰ÄÕ† +¯œÅ8Ókóσו؀¤òû²ØuQΆÔâÛvðeúÊ¿dH ÁcRLüSõ[u½ã}ûûåÛüÅ­K.ÞÕÃË3
+=j!ª`T?4p¾ß½EÍóOˆ§½’o•£¯¿¡šƒ‡ˆæ'/Çò9)‘¶¸ïà'`24ɧ“=bîYh &Y»õĨñR.Bq૆ßeXôßä±Ù¸ÅÎus( ^6âî‹Ó4ÑÃøk®hÐÏÔPÎ;/âP•”–‚§à—ÔR áƒË¼ˆ.~îîåÒD|»Óçn8ŠSéËL`9Pã©&°0¹ÁÖ¡Âíû°4hl!s(Á'HX
+ò" ©Õ´d(øKâŠÀnÏ‘ñ³¤jguü»Dc1Çí'h|GÁ€O!Ækïã‚RddœRþ¸º¢,LoÐ@Û½Ø4˜.#> î‘YU&…x•´‡q3§IíùAð&zÜñØ=ªS™þ£*å`ÕpEòµ×W½Š€œ
+Á¯g±6V‘[£í§)¬íbŒ™H í´¼Üé9®´(MÆêªüy[[VО"•“a#¡L m¦ÿÐxƒ£$ÝŽ/Œ&™ÝKÂøXš#>hm¾Ã}Ì1µv¼“#•ÌoœÊ¶÷LÆ–¹zØ—¹¯?ë
+N§c.ÕO%Ž*y¨É%Qµa}‹8‰‹•ðWt¦ÃSCâ®nuÞ`/vìKÞ7Bµg$Ïì&Ћp¼Š
+PIXîX?…ÿ1³&ZßE1 n¶«ù7÷SêXØól©ùÙųáÏ …M“õ<d}ŒÒÎj£¢áE†“zÂj7¶ÆnIL€ÏE9¿Öøª¡;®ÿø,óTülëm¡¾¡®}j‹qpn†¾ºkÚlà ³møVÜ> ´‚jW”H«,@Oˆú¦™”Vx|—Y•‚,«àMÎý&5Ž°á!´¯¤0õüiƒû-iZʧê¨B½¨?ªH™’σ
+rÄúô'Ö¼/£Š¤D=‰êß4Èw¾§¹îÈØ­Û“ô˜ôç ü6
+ Ïj•Ž£Ô…%) /4†ˆF!îr·Í¢ºöà¯7Ït÷OLÛ˜d@à‚”'SÊsJ„Ê=Y"âŽæÀ0ÊÂú)–~OÔÝ`ÖXê– ÖB¶JÑHº#ô‰ê„Žù”80èÚ{XÆÍì 1Æ-“ˆN q/ÕÖ‘gI¢?דŽŠè²ï.9R>§ànÕ=h,µm¢Þ?näÓ%4‚Únrº{´)©2/KÛ˜òQ-`£IøWE%dn"ÁçC
+Wn²GãW‡¦a2ZPqˆ -8²ó´Ñ•A¨?DZ¶ö²Z,ƒšÞµðQd'Ô×h>·Í ôCiÅ«v3ÔÕ¶íõ($Ð=誂'–‚ék[Þ6‘W`ÑBMwº²SÚíéIêöw,HF3ßçà„>PsŸ Ê:òIÏSШÅL–%ÄùŒÇ‰bqÕwŸM/v¾Ôx–‘_Eî›óq<­h§Ø{Ýüdšý¶yn<½c59=‡èëï6|q•ÐP@ÈÊVÙ¥çqðVu±Þ’À%­TœòKÁ6×Îç¨B_ðÜ\Ž=“Å?£­u³™ªw0­‚Ý€%´¶×^™Y^cv =ï¢köàõvX;øÿ¥† ‚ÅäÄ—í”Pñu¢Þ0
+-Œàw¦¥À¶WWɦÑËÄWªêÏ¡š3‰°mµß÷„à¥Ø;Î\P†¹&sæä”›5ÐŽm<=ñÖ–nK!ÕÇÖt4‰>ñù«t¢ëô"’¢…ðgö\FŠµ†ü‚>Œƒ©¼ 9½Óà5Òl3£ ¤Çz½l&¿iظ÷ “'”jkŒÌÄüÖ P%DöjH0Ÿ™rüa
+^ë¼Fðsÿ¿4x–ÂÁ‹ûÄI©=‹°qu¾‰wXŒ >`YÄ>GáúÒ-<Óa5y†À`éYžý:5¦¥B9^69­¤<¦ðìR»‚²h"Сµ!áÄj€Fäj…")i´©rU§RN©éW«5æ¬áPdAæÖúšÛ©Ÿå×22Íû€ü„TaÚºþ#
+)šØ5RT'±V 0ÖË7B¿‰@$¥õ`@X?6Šuj^Z€
+±·„„ ¹aÛ¥3ø½‡F-¬ÇNòxVÄGä<\?8Dߥ÷$¼–òÚæ[
+or`uÁ ¬$÷žm0:’.‡b
+…ëš½ß1e‰Éݨ †7%–„t'aSuH3¬ÌvFáQÃ幪MqlpÕŒû ?*m¦Pâ/vY0ÜbjýŽîã'4ô_ûE]2™=ø„#gÍöhKW8^
+µYµk+A¬h'Ðuí©…Ø¡âmvB|/­Òÿ.бW0Õf³H„ÊÛ‡a ±fÿÉ î~Js®TeÝ6ÑÎeÕA‹ŠëÅÆÔ6u×îȵؓ*Ô¡Õ>–ÉŸ:óê| ýYžY `!º
+jͽÔpø$Y”cÕeÊ·}EH3~î¢ñÒô5:9ÚÝ®Õ8ø3ht8ÈE,ÐyÐ’`}¥Õ07ˆÍ‡hyø6~‘Í73@t=Ì­öâã¦3l¤ñˆ3fp`¶Jh Ÿ`oeÞ¯Y8Ê€ýš–B(‚MžpÊíч>ö
+&·jzúLÙ­ô&%sˆRPJÿ¢îp5¢zÝsœA´ÿT%Ö¾•!…I'?1­#g/5Þi&=Œ„9ÓsG1)«Ç̯#êÖ‹ ž’
+&$›¬’±‰ѤˆŽd• ®ÚôI£îôÞ3gøB·ôNéýo‰™8Îç4T©¤|}€ßý§/©² ‘ܺ}®„¹×줇µÔÁ?Æ¡^vÄ'Ч$6Áݬm2¶%,Ћ•èU^E~ª)9z ìÙ‰ÓhQ“L…tC4ða ¦·w¯Æ¯u½ë³Û׃o0š¹ ËX¦0{(Ÿ2ÆŒŒdž÷aÎ óý¢Ž•"#”g+iuö¡ŽÂt¬+NR\×kcùU?ýÆ%Ž¨bØOÍÛ-å»äLAÍ—·jÕ?Iz‘ÅÒ5Áê”âR½ïÎ<C›‹\²ƒï×àƒ
+endstream
+endobj
+332 0 obj <<
+/Producer (pdfTeX-1.40.14)
+/Creator (TeX)
+/CreationDate (D:20140125010020+01'00')
+/ModDate (D:20140125010020+01'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/W32TeX) kpathsea version 6.1.1)
+>> endobj
+314 0 obj <<
+/Type /ObjStm
+/N 75
+/First 646
+/Length 8842
+>>
+stream
+309 0 312 115 317 265 316 380 320 518 322 658 324 1016 326 1250 319 1740 321 1811
+14 2173 13 2340 15 2506 52 2610 89 2715 126 2823 164 2935 201 3047 240 3159 277 3271
+315 3383 327 3463 328 3573 329 3662 330 3727 310 3798 304 3872 298 3960 292 4048 286 4136
+280 4224 273 4312 267 4400 261 4488 255 4576 249 4664 243 4752 234 4840 228 4928 222 5016
+216 5104 210 5192 204 5280 197 5368 191 5456 185 5544 179 5632 173 5720 167 5808 160 5896
+153 5984 147 6072 141 6160 135 6248 129 6336 122 6424 116 6512 110 6600 104 6688 98 6775
+92 6859 85 6942 79 7025 73 7108 67 7191 61 7274 55 7357 48 7440 42 7523 36 7606
+30 7689 24 7772 18 7855 9 7937 331 8005
+% 309 0 obj
+<<
+/Type /Page
+/Contents 313 0 R
+/Resources 312 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 315 0 R
+>>
+% 312 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F52 14 0 R /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 317 0 obj
+<<
+/Type /Page
+/Contents 318 0 R
+/Resources 316 0 R
+/MediaBox [0 0 467.717 340.157]
+/Parent 315 0 R
+>>
+% 316 0 obj
+<<
+/Properties << /OC1 1 0 R /OC2 3 0 R /OC3 4 0 R /OC4 5 0 R /OC5 6 0 R>>
+/Font << /F53 13 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+% 320 0 obj
+[750 611.1 277.8 472 277.8 500 277.8 277.8 500 555.5 444.5 555.5 444.5 305.5 500 555.5 277.8 305.5 527.8 277.8 833.3 555.5 500]
+% 322 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+% 324 0 obj
+<<
+/Type /FontDescriptor
+/FontName /OZGODD+LMRoman10-Regular
+/Flags 4
+/FontBBox [-430 -290 1417 1127]
+/Ascent 682
+/CapHeight 682
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/Y/a/g/o)
+/FontFile 323 0 R
+>>
+% 326 0 obj
+<<
+/Type /FontDescriptor
+/FontName /CDHRCQ+LMMono10-Regular
+/Flags 4
+/FontBBox [-451 -316 731 1016]
+/Ascent 624
+/CapHeight 624
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/B/D/E/F/G/J/N/P/R/S/T/W/X/a/at/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/f/five/four/g/greater/h/hyphen/i/k/l/less/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 325 0 R
+>>
+% 319 0 obj
+<<
+/Type /Encoding
+/Differences [89/Y 97/a 103/g 111/o]
+>>
+% 321 0 obj
+<<
+/Type /Encoding
+/Differences [40/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less 62/greater 64/at 66/B 68/D/E/F/G 74/J 78/N 80/P 82/R/S/T 87/W/X 91/bracketleft/backslash/bracketright 97/a/b/c/d/e/f/g/h/i 107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright]
+>>
+% 14 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /OZGODD+LMRoman10-Regular
+/FontDescriptor 324 0 R
+/FirstChar 89
+/LastChar 111
+/Widths 320 0 R
+/Encoding 319 0 R
+>>
+% 13 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /CDHRCQ+LMMono10-Regular
+/FontDescriptor 326 0 R
+/FirstChar 40
+/LastChar 125
+/Widths 322 0 R
+/Encoding 321 0 R
+>>
+% 15 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 327 0 R
+/Kids [8 0 R 17 0 R 23 0 R 29 0 R 35 0 R 41 0 R]
+>>
+% 52 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 327 0 R
+/Kids [47 0 R 54 0 R 60 0 R 66 0 R 72 0 R 78 0 R]
+>>
+% 89 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 327 0 R
+/Kids [84 0 R 91 0 R 97 0 R 103 0 R 109 0 R 115 0 R]
+>>
+% 126 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 327 0 R
+/Kids [121 0 R 128 0 R 134 0 R 140 0 R 146 0 R 152 0 R]
+>>
+% 164 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 327 0 R
+/Kids [159 0 R 166 0 R 172 0 R 178 0 R 184 0 R 190 0 R]
+>>
+% 201 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 327 0 R
+/Kids [196 0 R 203 0 R 209 0 R 215 0 R 221 0 R 227 0 R]
+>>
+% 240 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 328 0 R
+/Kids [233 0 R 242 0 R 248 0 R 254 0 R 260 0 R 266 0 R]
+>>
+% 277 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 328 0 R
+/Kids [272 0 R 279 0 R 285 0 R 291 0 R 297 0 R 303 0 R]
+>>
+% 315 0 obj
+<<
+/Type /Pages
+/Count 2
+/Parent 328 0 R
+/Kids [309 0 R 317 0 R]
+>>
+% 327 0 obj
+<<
+/Type /Pages
+/Count 36
+/Parent 329 0 R
+/Kids [15 0 R 52 0 R 89 0 R 126 0 R 164 0 R 201 0 R]
+>>
+% 328 0 obj
+<<
+/Type /Pages
+/Count 14
+/Parent 329 0 R
+/Kids [240 0 R 277 0 R 315 0 R]
+>>
+% 329 0 obj
+<<
+/Type /Pages
+/Count 50
+/Kids [327 0 R 328 0 R]
+>>
+% 330 0 obj
+<<
+/Type /Outlines
+/First 9 0 R
+/Last 310 0 R
+/Count 49
+>>
+% 310 0 obj
+<<
+/Title 311 0 R
+/A 308 0 R
+/Parent 330 0 R
+/Prev 304 0 R
+>>
+% 304 0 obj
+<<
+/Title 305 0 R
+/A 302 0 R
+/Parent 330 0 R
+/Prev 298 0 R
+/Next 310 0 R
+>>
+% 298 0 obj
+<<
+/Title 299 0 R
+/A 296 0 R
+/Parent 330 0 R
+/Prev 292 0 R
+/Next 304 0 R
+>>
+% 292 0 obj
+<<
+/Title 293 0 R
+/A 290 0 R
+/Parent 330 0 R
+/Prev 286 0 R
+/Next 298 0 R
+>>
+% 286 0 obj
+<<
+/Title 287 0 R
+/A 284 0 R
+/Parent 330 0 R
+/Prev 280 0 R
+/Next 292 0 R
+>>
+% 280 0 obj
+<<
+/Title 281 0 R
+/A 278 0 R
+/Parent 330 0 R
+/Prev 273 0 R
+/Next 286 0 R
+>>
+% 273 0 obj
+<<
+/Title 274 0 R
+/A 271 0 R
+/Parent 330 0 R
+/Prev 267 0 R
+/Next 280 0 R
+>>
+% 267 0 obj
+<<
+/Title 268 0 R
+/A 265 0 R
+/Parent 330 0 R
+/Prev 261 0 R
+/Next 273 0 R
+>>
+% 261 0 obj
+<<
+/Title 262 0 R
+/A 259 0 R
+/Parent 330 0 R
+/Prev 255 0 R
+/Next 267 0 R
+>>
+% 255 0 obj
+<<
+/Title 256 0 R
+/A 253 0 R
+/Parent 330 0 R
+/Prev 249 0 R
+/Next 261 0 R
+>>
+% 249 0 obj
+<<
+/Title 250 0 R
+/A 247 0 R
+/Parent 330 0 R
+/Prev 243 0 R
+/Next 255 0 R
+>>
+% 243 0 obj
+<<
+/Title 244 0 R
+/A 241 0 R
+/Parent 330 0 R
+/Prev 234 0 R
+/Next 249 0 R
+>>
+% 234 0 obj
+<<
+/Title 235 0 R
+/A 232 0 R
+/Parent 330 0 R
+/Prev 228 0 R
+/Next 243 0 R
+>>
+% 228 0 obj
+<<
+/Title 229 0 R
+/A 226 0 R
+/Parent 330 0 R
+/Prev 222 0 R
+/Next 234 0 R
+>>
+% 222 0 obj
+<<
+/Title 223 0 R
+/A 220 0 R
+/Parent 330 0 R
+/Prev 216 0 R
+/Next 228 0 R
+>>
+% 216 0 obj
+<<
+/Title 217 0 R
+/A 214 0 R
+/Parent 330 0 R
+/Prev 210 0 R
+/Next 222 0 R
+>>
+% 210 0 obj
+<<
+/Title 211 0 R
+/A 208 0 R
+/Parent 330 0 R
+/Prev 204 0 R
+/Next 216 0 R
+>>
+% 204 0 obj
+<<
+/Title 205 0 R
+/A 202 0 R
+/Parent 330 0 R
+/Prev 197 0 R
+/Next 210 0 R
+>>
+% 197 0 obj
+<<
+/Title 198 0 R
+/A 195 0 R
+/Parent 330 0 R
+/Prev 191 0 R
+/Next 204 0 R
+>>
+% 191 0 obj
+<<
+/Title 192 0 R
+/A 189 0 R
+/Parent 330 0 R
+/Prev 185 0 R
+/Next 197 0 R
+>>
+% 185 0 obj
+<<
+/Title 186 0 R
+/A 183 0 R
+/Parent 330 0 R
+/Prev 179 0 R
+/Next 191 0 R
+>>
+% 179 0 obj
+<<
+/Title 180 0 R
+/A 177 0 R
+/Parent 330 0 R
+/Prev 173 0 R
+/Next 185 0 R
+>>
+% 173 0 obj
+<<
+/Title 174 0 R
+/A 171 0 R
+/Parent 330 0 R
+/Prev 167 0 R
+/Next 179 0 R
+>>
+% 167 0 obj
+<<
+/Title 168 0 R
+/A 165 0 R
+/Parent 330 0 R
+/Prev 160 0 R
+/Next 173 0 R
+>>
+% 160 0 obj
+<<
+/Title 161 0 R
+/A 158 0 R
+/Parent 330 0 R
+/Prev 153 0 R
+/Next 167 0 R
+>>
+% 153 0 obj
+<<
+/Title 154 0 R
+/A 151 0 R
+/Parent 330 0 R
+/Prev 147 0 R
+/Next 160 0 R
+>>
+% 147 0 obj
+<<
+/Title 148 0 R
+/A 145 0 R
+/Parent 330 0 R
+/Prev 141 0 R
+/Next 153 0 R
+>>
+% 141 0 obj
+<<
+/Title 142 0 R
+/A 139 0 R
+/Parent 330 0 R
+/Prev 135 0 R
+/Next 147 0 R
+>>
+% 135 0 obj
+<<
+/Title 136 0 R
+/A 133 0 R
+/Parent 330 0 R
+/Prev 129 0 R
+/Next 141 0 R
+>>
+% 129 0 obj
+<<
+/Title 130 0 R
+/A 127 0 R
+/Parent 330 0 R
+/Prev 122 0 R
+/Next 135 0 R
+>>
+% 122 0 obj
+<<
+/Title 123 0 R
+/A 120 0 R
+/Parent 330 0 R
+/Prev 116 0 R
+/Next 129 0 R
+>>
+% 116 0 obj
+<<
+/Title 117 0 R
+/A 114 0 R
+/Parent 330 0 R
+/Prev 110 0 R
+/Next 122 0 R
+>>
+% 110 0 obj
+<<
+/Title 111 0 R
+/A 108 0 R
+/Parent 330 0 R
+/Prev 104 0 R
+/Next 116 0 R
+>>
+% 104 0 obj
+<<
+/Title 105 0 R
+/A 102 0 R
+/Parent 330 0 R
+/Prev 98 0 R
+/Next 110 0 R
+>>
+% 98 0 obj
+<<
+/Title 99 0 R
+/A 96 0 R
+/Parent 330 0 R
+/Prev 92 0 R
+/Next 104 0 R
+>>
+% 92 0 obj
+<<
+/Title 93 0 R
+/A 90 0 R
+/Parent 330 0 R
+/Prev 85 0 R
+/Next 98 0 R
+>>
+% 85 0 obj
+<<
+/Title 86 0 R
+/A 83 0 R
+/Parent 330 0 R
+/Prev 79 0 R
+/Next 92 0 R
+>>
+% 79 0 obj
+<<
+/Title 80 0 R
+/A 77 0 R
+/Parent 330 0 R
+/Prev 73 0 R
+/Next 85 0 R
+>>
+% 73 0 obj
+<<
+/Title 74 0 R
+/A 71 0 R
+/Parent 330 0 R
+/Prev 67 0 R
+/Next 79 0 R
+>>
+% 67 0 obj
+<<
+/Title 68 0 R
+/A 65 0 R
+/Parent 330 0 R
+/Prev 61 0 R
+/Next 73 0 R
+>>
+% 61 0 obj
+<<
+/Title 62 0 R
+/A 59 0 R
+/Parent 330 0 R
+/Prev 55 0 R
+/Next 67 0 R
+>>
+% 55 0 obj
+<<
+/Title 56 0 R
+/A 53 0 R
+/Parent 330 0 R
+/Prev 48 0 R
+/Next 61 0 R
+>>
+% 48 0 obj
+<<
+/Title 49 0 R
+/A 46 0 R
+/Parent 330 0 R
+/Prev 42 0 R
+/Next 55 0 R
+>>
+% 42 0 obj
+<<
+/Title 43 0 R
+/A 40 0 R
+/Parent 330 0 R
+/Prev 36 0 R
+/Next 48 0 R
+>>
+% 36 0 obj
+<<
+/Title 37 0 R
+/A 34 0 R
+/Parent 330 0 R
+/Prev 30 0 R
+/Next 42 0 R
+>>
+% 30 0 obj
+<<
+/Title 31 0 R
+/A 28 0 R
+/Parent 330 0 R
+/Prev 24 0 R
+/Next 36 0 R
+>>
+% 24 0 obj
+<<
+/Title 25 0 R
+/A 22 0 R
+/Parent 330 0 R
+/Prev 18 0 R
+/Next 30 0 R
+>>
+% 18 0 obj
+<<
+/Title 19 0 R
+/A 16 0 R
+/Parent 330 0 R
+/Prev 9 0 R
+/Next 24 0 R
+>>
+% 9 0 obj
+<<
+/Title 10 0 R
+/A 7 0 R
+/Parent 330 0 R
+/Next 18 0 R
+>>
+% 331 0 obj
+<<
+/Type /Catalog
+/Pages 329 0 R
+/Outlines 330 0 R
+/OCProperties << /OCGs [1 0 R 3 0 R 4 0 R 5 0 R 6 0 R] /D << /Order [1 0 R 3 0 R 4 0 R 5 0 R 6 0 R] /OFF [3 0 R 5 0 R] >> >>
+>>
+endstream
+endobj
+333 0 obj <<
+/Type /XRef
+/Index [0 334]
+/Size 334
+/W [1 3 1]
+/Root 331 0 R
+/Info 332 0 R
+/ID [<02687FF66C85E65BD608D421CB9F5F4C> <02687FF66C85E65BD608D421CB9F5F4C>]
+/Length 1670
+>>
+stream
+
+
+
+
+endstream
+endobj
+startxref
+136749
+%%EOF
diff --git a/macros/generic/pdf-trans/example.tex b/macros/generic/pdf-trans/example.tex
new file mode 100644
index 0000000000..99e0dab7d0
--- /dev/null
+++ b/macros/generic/pdf-trans/example.tex
@@ -0,0 +1,228 @@
+%%% Self-documented example of pdf-trans.tex usage (pdfTeX)
+%%% P.Jackowski@gust.org.pl
+
+\input pdf-trans
+
+\pdfdecimaldigits=3
+\pdfcompresslevel=0 % to see what is happening
+
+% Some configuration
+% \enablefractangle % float angles support (deafult)
+% \disablefractangle % integer only (old behaviour)
+% \enablebpround % round \pdfliteral dimens to \pdfdecimanligits (default)
+% \disablebpround % disable rounding (old behaviour)
+% \let\tobp\roundfixedbp % calculate \pdfliteral dimens with fixed precision (risky)
+\setbpround\pdfdecimaldigits % fix rounding precision (speed-up things)
+
+\font\F=qx-lmr10 at 120pt
+\font\f=qx-lmr10 at 60pt
+\font\T=qx-lmtt10 at 15pt
+\font\tt=qx-lmtt10 at 10pt
+\font\ttt=qx-lmtt10 at 8pt
+
+\pdfpagewidth=165mm
+\pdfpageheight=120mm
+\pdfhorigin=10mm
+\pdfvorigin=10mm
+\hsize=\dimexpr\pdfpagewidth-2\pdfhorigin
+\vsize=\dimexpr\pdfpageheight-2\pdfvorigin
+
+\parindent=0pt
+\nopagenumbers
+
+\ifx\pdfminorversion\undefined
+ \pdfoptionpdfminorversion=5
+\else
+ \pdfminorversion=5
+\fi
+
+\def\saveobjnum#1{\expandafter\edef\csname objnum:#1\endcsname{\the\pdflastobj\space 0 R}}
+\def\objnum#1{\csname objnum:#1\endcsname}
+\immediate\pdfobj{<< /Type /OCG /Name (box content before) >>}\saveobjnum{1}
+\immediate\pdfobj{<< /Type /OCG /Name (box outline before) >>}\saveobjnum{2}
+\immediate\pdfobj{<< /Type /OCG /Name (box content after) >>}\saveobjnum{3}
+\immediate\pdfobj{<< /Type /OCG /Name (box outline after) >>}\saveobjnum{4}
+\immediate\pdfobj{<< /Type /OCG /Name (final bounding box) >>}\saveobjnum{5}
+
+\edef\pdfpagerc{/Properties << /OC1 \objnum{1} /OC2 \objnum{2} /OC3 \objnum{3} /OC4 \objnum{4} /OC5 \objnum{5}>>}
+\expandafter\pdfpageresources\expandafter{\pdfpagerc}
+\edef\pdfcatalogoc{%
+/OCProperties
+<<
+ /OCGs [\objnum{1} \objnum{2} \objnum{3} \objnum{4} \objnum{5}]
+ /D << /Order [\objnum{1} \objnum{2} \objnum{3} \objnum{4} \objnum{5}]
+ /OFF [\objnum{2} \objnum{4}]
+ >>
+>>}
+\expandafter\pdfcatalog\expandafter{\pdfcatalogoc}% \pdfcatalog expands anyway
+
+\newbox\qbox
+
+\def\defaultgs{\pdfliteral direct{.5 w 1 j 1 J}}
+
+\def\boxbe{\boxshow{/OC /OC2 BDC 0.3 G} {[2 2] 1 d}{EMC} \boxgs{/OC /OC1 BDC 2 Tr 0.7 g}{EMC}}
+\def\boxaf{\boxshow{/OC /OC4 BDC 1.0 0.6 0.0 RG}{[2 2] 1 d}{EMC} \boxgs{/OC /OC3 BDC 2 Tr 1.0 0.8 0.0 rg}{EMC}}
+\def\boxbb{\boxshow{/OC /OC5 BDC 0.7 0.0 0.0 RG}{[2 2] 1 d}{EMC}}
+
+\def\bookmark#1{%
+ \pdfoutline goto page\pageno {/Fit}{\getbookmark#1\relax}}
+
+\def\getbookmark#1#2\relax{\string\\\expandafter\gobbleone\string#1}
+\def\gobbleone#1{}
+
+\def\test/#1/#2/{%
+ \bookmark{#2}\defaultgs
+ \vbox to4cm{\vss
+ Yo\boxbe\copy\qbox\kern-\wd\qbox
+ \boxbb#1\boxaf\copy\qbox a}\vfill
+ {\tt\detokenize{#2 <box>}}\medskip{\ttt\detokenize{#1}}\eject}
+
+\def\rawtest/#1/#2/{%
+ \bookmark{#2}\defaultgs
+ \vbox to4cm{\vss
+ Yo#1\copy\qbox a}\vfill
+ {\tt\detokenize{#2 <box>}}\medskip{\ttt\detokenize{#1}}\eject}
+
+%%%
+
+\T\defaultgs
+
+box tra\boxflipy\boxgs{1.0 0.8 0.0 rg}{}\hbox{N}%
+sfo\boxrotatec{15}\boxgs{1.0 0.8 0.0 rg}{}\hbox{R}%
+mation\boxflipx\boxgs{1.0 0.8 0.0 rg}{}\hbox{S} in
+\boxgs{0.7 g}{}\hbox{pdf-trans.tex}
+
+\vskip0pt plus 4fil
+\setbox\qbox\hbox{\f g}
+\ttt
+\leavevmode\boxbe\copy\qbox \quad before
+\vfil
+\leavevmode\boxaf\copy\qbox \quad after
+\vfil
+\leavevmode\boxbb\boxphantom\copy\qbox \quad bounding box
+
+\line{\hfill\boxrevolveleft\boxsmash\hbox{P.Jackowski@gust.org.pl}}
+\pdfoutline goto page\pageno {/Fit}{pdf-trans.tex}
+
+\eject
+
+%%%
+
+\F\setbox\qbox\hbox{g}
+
+\test/\boxflipx /\boxflipx/
+\test/\boxflipy /\boxflipy/
+\test/\boxflipxy /\boxflipxy/
+\test/\boxflipbase/\boxflipbase/
+\test/\bboxtrans\boxflipbase/\bboxtrans{<trans>}/
+\test/\cboxtrans\boxflipbase/\cboxtrans{<trans>}/
+
+\test/\boxtranslate{3mm}{2mm}/\boxtranslate{<dimexpr>}{<dimexpr>}/
+
+\test/\boxrevolveleft /\boxrevolveleft/
+\test/\boxrevolveright/\boxrevolveright/
+
+\test/\boxrotate{394.7}/\boxrotate{<angle>}/
+\test/\boxrotatexy{34.2}{\wd\transbox}{\ht\transbox}
+ /\boxrotatexy{<angle>}{<dimexpr>}{<dimexpr>}/
+\test/\boxrotatec{90}/\boxrotatec{<angle>}/
+
+\test/\boxrotatebbl{-34.1}/\boxrotatebbl{<angle>}/
+%\test/\boxrotatebbl{-34.2}/\boxrotatebbl{<angle>}/
+\test/\boxrotatebbr{-34.2}/\boxrotatebbr{<angle>}/
+
+\test/\boxslantx{15.2} /\boxslantx{<angle>}/
+\test/\boxslanty{25.3} /\boxslanty{<angle>}/
+%\test/\boxslantxy{15}{25} /\boxslantxy{<angle>}{<angle>}/
+
+\test/\boxslantbbl{15}{25}/\boxslantbbl{<angle>}{<angle>}/
+\test/\boxslantbbr{15}{25}/\boxslantbbr{<angle>}{<angle>}/
+
+\test/\boxscalex{75} /\boxscalex{<numexpr>}/
+\test/\boxscaley{75} /\boxscaley{<numexpr>}/
+\test/\cboxtransoff\boxscalexy{150}{75}/\boxscalexy{<numexpr>}{<numexpr>}/
+\test/\bboxtransoff\boxscale{75} /\boxscale{<numexpr>}/
+
+\test/\boxscalexto{.5in+.1cm} /\boxscalexto{<dimexpr>}/
+\test/\boxscaleyto{.5in+.1cm} /\boxscaleyto{<dimexpr>}/
+\test/\boxscalexyto{.5in+.1cm}{1in/2}/\boxscalexyto{<dimxpr>}{<dimexpr>}/
+\test/\boxscalehtto{.5in+.1cm}/\boxscalehtto{<dimexpr>}/
+\test/\boxscaledpto{.5in+.1cm}/\boxscaledpto{<dimexpr>}/
+
+\test/\boxuniscalexto{.5in+.1cm} /\boxuniscalexto{<dimexpr>}/
+\test/\boxuniscaleyto{.5in+.1cm} /\boxuniscaleyto{<dimexpr>}/
+\test/\boxuniscalehtto{.5in+.1cm}/\boxuniscalehtto{<dimexpr>}/
+\test/\boxuniscaledpto{.5in+.1cm}/\boxuniscaledpto{<dimexpr>}/
+
+\test/\boxextscale{2mm}{5mm}{8mm}/\boxextscale{<dimexpr>}{<dimexpr>}{<dimexpr>}/
+\test/\boxextscaleto{3cm}{1cm}{2cm}/\boxextscaleto{<dimexpr>}{<dimexpr>}{<dimexpr>}/
+
+\test/\boxexts{3mm}{3mm}{5mm}{5mm}
+ /\boxexts{<dimexpr>}{<dimexpr>}{<dimexpr>}{<dimexpr>}/
+
+\test/\boxextents{2mm}{4mm}{6mm}{8mm}
+ /\boxextents{<dimexpr>}{<dimexpr>}{<dimexpr>}{<dimexpr>}/
+
+% obsolete
+%\test/\boxresizeto{}{3cm}{2cm}
+% /\boxresizeto{<dimexpr>}{<dimexpr>}{<dimexpr>}/
+%\test/\boxresize{-3mm}{}{-2mm} /\boxresize{<dimexpr>}{<dimexpr>}{<dimexpr>}/
+
+\test/\boxxformspec resources{\the\pdfpageresources} \boxxform\boxresizeto{11mm}{8mm}{3mm}
+ /\boxxformspec resources{/Foo /Bar} \boxxform/
+
+\test/\boxclip\boxresizeto{}{8mm}{3mm} /\boxclip/
+
+\test/\boxmoveleft{.3\wd\transbox}/\boxmoveleft{<dimexpr>}/
+\test/\boxmoveright{.3\wd\transbox}/\boxmoveright{<dimexpr>}/
+\test/\boxlower{\dp\transbox}/\boxlower{<dimexpr>}/
+\test/\boxraise{\dp\transbox}/\boxraise{<dimexpr>}/
+\test/\boxbaselineat{50}/\boxbaselineat{<numexpr>}/
+
+% \rawtest/\boxphantom /\boxphntom/
+\rawtest/\boxinfo\boxsh/\boxinfo/
+\rawtest/\boxshow{0 1 0 RG}{[1 1]0 d}{}
+ /\boxshow{<gsspec>}{<gsspec>}{<gsspec>}/
+% \rawtest/\boxsh/\boxsh/
+\rawtest/\boxmarkers{-12pt}{3pt}{1 0 0 RG 1 J}/\boxmarkers{<dimexpr>}{<dimexpr>}{<gsspec>}/
+
+\rawtest/\boxpath{3 w .7 0 0 rg 1 .8 0 RG}{B}\bboxtrans{\boxextscale{3mm}{3mm}{3mm}}\boxmoveright{3mm}
+ /\boxpath{<gsspec>}{<paintop>}/
+\rawtest/\boxroundpath{4mm}{3 w .7 0 0 rg 1 .8 0 RG}{B}\boxextent{3mm}
+ /\boxroundpath{<dimexpr>}{<gsspec>}{<paintop>}/
+\rawtest/\boxedgypath{4mm}{3 w .7 0 0 rg 1 .8 0 RG}{B}\boxextent{3mm}
+ /\boxedgypath{<dimexpr>}{<gsspec>}{<paintop>}/
+
+%%%
+
+\ttt
+Each transformation expands to <box> (\string\hbox\ in most cases).\par
+Each transformation must be followed by a <box>.\bigskip
+
+<box> states for any kind of \TeX\ box; \string\hbox,
+ \string\vbox,
+ \string\vtop,
+ \string\box,
+ \string\copy\par
+
+<trans> is a list of box transformations \par
+<dimexpr> states for dimen in eTeX form \par
+<numexpr> states for integer in eTeX form \par
+<angle> is an integer or float-like string \par
+<gsspec> is a literal pdf content stream \par
+<paintop> means pdf painting operator (S, f, B, W...)\par
+
+\bigskip
+
+Some extra macros:\par
+\def\type#1{{\detokenize{#1}}}
+\type{\tobp{<dimexpr>}} returns PDF dimen (big points with no unit) \par
+\type{\enablebpround} makes \type{\tobp} rounding to \type{\pdfdecimaldigits} (equivalent to \type{\roundbp}) \par
+\type{\setbpround{<0..4>}} makes \type{\tobp} rounding to <0..4> digits (equivalent to \type{\roundbpto{<0..4>}}) \par
+\type{\disablebpround} turns off rounding (equivalent to \type{\asbp}) \par
+
+
+\bigskip
+See the code for more.
+
+\end
diff --git a/macros/generic/pdf-trans/pdf-trans.tex b/macros/generic/pdf-trans/pdf-trans.tex
new file mode 100644
index 0000000000..870e1dacb9
--- /dev/null
+++ b/macros/generic/pdf-trans/pdf-trans.tex
@@ -0,0 +1,1500 @@
+%%% A set of macros for various transformations of TeX boxes.
+%%% (bases on plain and pdf(e)TeX primitives)
+%
+% Version: 2.4
+% Author: Pawe{\l} Jackowski (P.Jackowski@gust.org.pl)
+% Public Domain
+%
+% The macro provides a bunch of TeX box transformations. It was initially
+% inspired by trans.tex (BOP, bop@bop.com.pl), remade to work with pdf(e)TeX.
+%
+% Files:
+% pdf-trans.tex
+% example.tex
+%
+% History:
+% 05.2004, v1.0b
+% * first embryo
+% 11.2004, v1.0
+% * modified, released
+% 08.2005, v2.0
+% * general rework;
+% - fraction-based trigonometry
+% - pdfliteral dimensions rounding
+% - some other small changes
+% 09.2005, v2.1
+% * some adds;
+% - \setbpround <0..4> sets pdf dimen rounding precision
+% - \boxgobble <box> macro swallows <box> and returns \hbox{}
+% 10.2005, v2.2
+% * rework;
+% - \bboxtrans vs \cboxtrans switches
+% - \boxext* stuff; yet another scaling approach
+%
+% 10.2013, v2.3
+% * nasty bug in \roundbponce; a sign was dropped when the number
+% had no integer part (-0.99234 was rounded to 0.99). In current
+% implementation small negative numbers might be rounded to -0.0
+% (minus sign remains)
+% * \roundbponce renamed to \round:bp:once
+%
+% 01.2014, v2.4
+% * some rework on pdf unit related macros
+% - \t@bp renamed to \asbp as pretty useful converter to big points (with no rounding)
+% - new macro \roundbpto{0..4}{<dimexpr>} rounds #2 to #1 digits
+% - \roundbp now always rounds to \pdfdecimaldigits
+% - \enablebpround, \disablebpround and \setbpround now redefine \tobp:
+% - \enablebpround makes \tobp equivalent to \roundbp
+% - \disablebpround makes \tobp equivalent to \asbp
+% - \setbpround{0..4} makes \tobp equivalent to \roundbpto{#1}
+% - removed \romannumeral from csnames, decimal digits used instead
+% - removed \big:p@ints
+
+
+\def\starttrans{%
+ \xdef\endtrans{%
+ \catcode`\noexpand\@=\the\catcode`\@
+ \catcode`\noexpand\:=\the\catcode`\:
+ }\catcode`\@=11 \catcode`\:=11 }
+
+\starttrans
+
+% Each transformation macro defined below expands to (h)box. Thus, can be used
+% whenever (h)box can. Each must be followed by the box that is to be
+% transformed. This scheme allows to cumulate transformations, that are applied
+% from right to left. For instance,
+% \boxrotatebb{30}\boxscale{300}\hbox{Aqq}
+% first enlarges boxed `Aqq' three times, then rotates it 30 degrees. Thanks
+% to \transboxcheck trick (see below), \copy and \box can be used as well as
+% \hbox, \vbox, \vtop. However, the consequence is that the transformed box
+% can't be void (\boxinfo definition is an exception here). \transbox register
+% contains the box being transformed.
+
+\newbox\transbox
+
+% Whenever we perform relative dimension scaling, a number provided as a macro
+% parameter is divided by \transfactor. Default is percentage (ie. 75 -> 0.75).
+% One may notice, that we often perform the same operation (ie. division)
+% several times instead of defining \transfactor as a float-like string. In
+% example, if there are two dimens, \X and \Y, and both are to be scaled by
+% 0.23, we always say `\numexpr\X*23/\transfactor' and
+% `\numexpr\Y*23/\transfactor' instead of 0.23\X 0.23\Y. In some cases it gives
+% significant preciseness improvement.
+
+\newcount\transfactor
+\transfactor=100
+
+% plus some internal variables
+
+\newdimen\trans:dim
+\newdimen\trans:dim:a
+\newdimen\trans:dim:b
+\newdimen\trans:dim:c
+\newdimen\trans:dim:d
+
+\newcount\trans:count
+
+\def\trans:def{}
+\def\trans:def:a{}
+\def\trans:def:b{}
+\def\trans:def:c{}
+\def\trans:def:d{}
+
+% Here the main trick starts. Each macro usually expands to \hbox\bgroup...,
+% defines \transboxtodo procedure, assigns the following box, then performs
+% \transboxtodo and ends with \egroup. If the box being transformed is generic
+% `\hbox{', TeX finishes the assignment just after opening `{', while the box being
+% assigned (\transbox) is still void. Thus, we check \ifvoid\transbox, and if
+% so, we put \transboxtodo on \aftergroup stack to let TeX finish box
+% assignment. Obviously it crashes, if one tries to transform a void box.
+% So, if you see 'Missing } inserted' error, you are probably trying to transform
+% a void box. You can use \boxinfo to check the situation.
+
+\def\transboxini{%
+ \afterassignment\transboxcheck
+ \setbox\transbox}
+
+\def\transboxcheck{%
+ \ifvoid\transbox
+ \expandafter\aftergroup
+ \fi\transboxtodo}
+
+% When some macro changes box dimensions directly (i.e. \ht\transbox=0pt),
+% we may need to be sure that transformed box behaves like \hbox.
+
+\def\transhboxini{%
+ \afterassignment\transhboxcheck
+ \setbox\transbox}
+
+\def\transhboxcheck{%
+ \ifvoid\transbox
+ \expandafter\aftergroup\expandafter\transhboxwrap
+ \else
+ \expandafter\transhboxwrap
+ \fi}
+
+\def\transhboxwrap{%
+ \ifvbox\transbox
+ \setbox\transbox\hbox{\box\transbox}%
+ \fi
+ \transboxtodo}
+
+\long\def\transboxdef#1\transboxend{%
+ \bgroup\def\transboxtodo{#1\egroup}\transboxini}
+
+\long\def\transhboxdef#1\transboxend{%
+ \bgroup\def\transboxtodo{#1\egroup}\transhboxini}
+
+% Sometimes we need to keep bounding box untouched and transform box content
+% only (or vice versa). Each transformation that affects both the bounding box
+% (via resizing \ht|\wd|\dp) and the box content itself (via \pdfliteral)
+% checks \iftransbbox and \iftranscbox flags. No practical reasons to affect
+% \boxrotatebb by this feature, however.
+
+\newif\iftransbbox
+\newif\iftranscbox
+\transbboxtrue
+\transcboxtrue
+
+\long\def\transbcboxdef#1\transbboxdef#2\transcboxdef#3\transboxend{%
+ \bgroup\edef\transboxtodo{%
+ \unexpanded{#1}%
+ \iftransbbox\unexpanded{#2}\fi
+ \iftranscbox\unexpanded{#3}\else\box\transbox\fi
+ \egroup}\transhboxini}
+
+\def\bboxtranson{%
+ \hbox\bgroup\transbboxtrue
+ \def\transboxtodo{\box\transbox\egroup}\transboxini}
+
+\def\bboxtransoff{%
+ \hbox\bgroup\transbboxfalse
+ \def\transboxtodo{\box\transbox\egroup}\transboxini}
+
+\def\cboxtranson{%
+ \hbox\bgroup\transcboxtrue
+ \def\transboxtodo{\box\transbox\egroup}\transboxini}
+
+\def\cboxtransoff{%
+ \hbox\bgroup\transcboxfalse
+ \def\transboxtodo{\box\transbox\egroup}\transboxini}
+
+\long\def\bboxtrans#1{\iftranscbox\cboxtransoff#1\cboxtranson\else#1\fi}
+\long\def\cboxtrans#1{\iftransbbox\bboxtransoff#1\bboxtranson\else#1\fi}
+
+% User-defined operation on \transbox. Remember, that \transboxcheck assumes
+% initially void \transbox, so #1 should contain something like \box\tranbox,
+% \unvbox\tranbox, \setbox\transbox\voidb@x etc.
+
+\def\hboxtrans{\hbox\transboxdef}
+\def\vboxtrans{\vbox\transboxdef}
+\def\vtoptrans{\vtop\transboxdef}
+\let\boxtrans\hboxtrans
+
+% flip
+
+\def\boxflipx{%
+ \hbox\transboxdef
+ \savebp\trans:def\wd\transbox
+ \pdfliteral{q -1 0 0 1 \trans:def\space 0 cm}%
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxflipy{%
+ \hbox\transboxdef
+ \savebp\trans:def\wd\transbox
+ \pdfliteral{q 1 0 0 -1 0 \tobp{\ht\transbox-\dp\transbox} cm}%
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxflipxy{%
+ \hbox\transboxdef
+ \savebp\trans:def\wd\transbox
+ \pdfliteral{q -1 0 0 -1 \trans:def\space \tobp{\ht\transbox-\dp\transbox} cm}%
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\let\boxflip\boxflipxy
+
+% \boxflipy plus \ht\transbox <-> \dp\transbox exchange
+
+\def\boxflipbase{%
+ \hbox\transbcboxdef
+ \transbboxdef
+ \trans:dim=\ht\transbox
+ \ht\transbox=\dp\transbox
+ \dp\transbox=\trans:dim
+ \transcboxdef
+ \pdfliteral{q 1 0 0 -1 0 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+% scale by factor
+
+\def\boxscalexy#1#2{%
+ \hbox\transbcboxdef
+ \transbboxdef
+ \wd\transbox=\dimexpr\wd\transbox*(#1)/\transfactor\relax
+ \ht\transbox=\dimexpr\ht\transbox*(#2)/\transfactor\relax
+ \dp\transbox=\dimexpr\dp\transbox*(#2)/\transfactor\relax
+ \transcboxdef
+ \edef\trans:def:a{\fdivide{#1}\transfactor}%
+ \edef\trans:def:b{\fdivide{#2}\transfactor}%
+ \pdfliteral{q \trans:def:a\space 0 0 \trans:def:b\space 0 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxscale#1{\boxscalexy{#1}{#1}}
+\def\boxscalex#1{\boxscalexy{#1}\transfactor}
+\def\boxscaley#1{\boxscalexy\transfactor{#1}}
+\let\boxscalez\boxscale
+
+% scale to dimen
+
+\def\boxscaleto#1#2#3#4{%
+ \hbox\transbcboxdef
+ \trans:dim:a=\dimexpr#1\relax
+ \trans:dim:b=\dimexpr#2\relax
+ \trans:dim:c=\dimexpr#3\relax
+ \trans:dim:d=\dimexpr#4\relax
+ \transbboxdef
+ \wd\transbox=\dimexpr\wd\transbox*\trans:dim:a/\trans:dim:b\relax
+ \ht\transbox=\dimexpr\ht\transbox*\trans:dim:c/\trans:dim:d\relax
+ \dp\transbox=\dimexpr\dp\transbox*\trans:dim:c/\trans:dim:d\relax
+ \transcboxdef
+ \edef\trans:def:a{\fdivide\trans:dim:a\trans:dim:b}%
+ \edef\trans:def:b{\fdivide\trans:dim:c\trans:dim:d}%
+ \pdfliteral{q \trans:def:a\space 0 0 \trans:def:b\space 0 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxscalexyto#1#2{\boxscaleto{#1}{\wd\transbox}{#2}{\ht\transbox+\dp\transbox}}
+\def\boxscalexto#1{\boxscaleto{#1}{\wd\transbox}{1sp}{1sp}}
+\def\boxscaleyto#1{\boxscaleto{1sp}{1sp}{#1}{\ht\transbox+\dp\transbox}}
+\def\boxscalehtto#1{\boxscaleto{1sp}{1sp}{#1}{\ht\transbox}}
+\def\boxscaledpto#1{\boxscaleto{1sp}{1sp}{#1}{\dp\transbox}}
+\let\boxscalewdto\boxscalexto
+
+% scale \wd|\ht|\dp to dimen, others uniformly
+
+\def\boxuniscaleto#1#2{%
+ \hbox\transbcboxdef
+ \trans:dim:a=\dimexpr#1\relax
+ \trans:dim:b=\dimexpr#2\relax
+ \transbboxdef
+ \wd\transbox=\dimexpr\wd\transbox*\trans:dim:a/\trans:dim:b\relax
+ \ht\transbox=\dimexpr\ht\transbox*\trans:dim:a/\trans:dim:b\relax
+ \dp\transbox=\dimexpr\dp\transbox*\trans:dim:a/\trans:dim:b\relax
+ \transcboxdef
+ \edef\trans:def:a{\fdivide\trans:dim:a\trans:dim:b}%
+ \pdfliteral{q \trans:def:a\space 0 0 \trans:def:a\space 0 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxuniscalexto#1{\boxuniscaleto{#1}{\wd\transbox}}
+\def\boxuniscaleyto#1{\boxuniscaleto{#1}{\ht\transbox+\dp\transbox}}
+\def\boxuniscalehtto#1{\boxuniscaleto{#1}{\ht\transbox}}
+\def\boxuniscaledpto#1{\boxuniscaleto{#1}{\dp\transbox}}
+\let\boxuniscalewdto\boxuniscalexto
+
+% yet another scaling approach; extend \wd|\ht|\dp do dimen, scale accordingly
+
+\def\boxextscaleto#1#2#3{%
+ \hbox\transbcboxdef
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\dimexpr#1\relax
+ \trans:dim:c=\dimexpr\ht\transbox+\dp\transbox\relax
+ \trans:dim:d=\dimexpr#2+#3\relax
+ \trans:dim=\dp\transbox
+ \transbboxdef
+ \wd\transbox=\trans:dim:b
+ \ht\transbox=\dimexpr#2\relax
+ \dp\transbox=\dimexpr#3\relax
+ \transcboxdef
+ \edef\trans:def:a{\fdivide\trans:dim:b\trans:dim:a}%
+ \edef\trans:def:b{\fdivide\trans:dim:d\trans:dim:c}%
+ \savebp\trans:def:c\dimexpr-\dp\transbox+(\dp\transbox+\ht\transbox)*\trans:dim/\trans:dim:c\relax
+ \pdfliteral{q \trans:def:a\space 0 0 \trans:def:b\space 0 \trans:def:c\space cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxextscale#1#2#3{\boxextscaleto{\wd\transbox+#1}{\ht\transbox+#2}{\dp\transbox+#3}}
+
+% resizing; the result may be different for hboxes and vboxes;
+% since we have \boxextscaleto plus \iftransbbox and \iftranscbox flags,
+% the following two macros are obsolete by now
+
+\def\boxresizeto#1#2#3{%
+ \hbox\transboxdef
+ \ifx\relax#1\relax\else \wd\transbox=\dimexpr#1\relax \fi
+ \ifx\relax#2\relax\else \ht\transbox=\dimexpr#2\relax \fi
+ \ifx\relax#3\relax\else \dp\transbox=\dimexpr#3\relax \fi
+ \box\transbox
+ \transboxend}
+
+\def\boxresize#1#2#3{%
+ \hbox\transboxdef
+ \ifx\relax#1\relax\else \wd\transbox=\dimexpr\wd\transbox+#1\relax \fi
+ \ifx\relax#2\relax\else \ht\transbox=\dimexpr\ht\transbox+#2\relax \fi
+ \ifx\relax#3\relax\else \dp\transbox=\dimexpr\dp\transbox+#3\relax \fi
+ \box\transbox
+ \transboxend}
+
+% extents; to keep things consistent for negative extents, \dp\transbox becomes 0pt
+
+\def\boxextents#1#2#3#4{% <left> <right> <top> <bottom>
+ \hbox\transboxdef
+ \kern\dimexpr#1\relax
+ \vbox{%
+ \kern\dimexpr#3\relax
+ \box\transbox
+ \kern\dimexpr#4\relax
+ }%
+ \kern\dimexpr#2\relax
+ \transboxend}
+
+\def\boxhextent#1#2{\boxextents{#1}{#2}\z@\z@}
+\def\boxvextent#1#2{\boxextents\z@\z@{#1}{#2}}
+\def\boxextent#1{\boxextents{#1}{#1}{#1}{#1}}
+
+% and yet another approach; append extents to box content
+
+\def\boxexts#1#2#3#4{% <left> <right> <top> <bottom>
+ \hbox\transboxdef
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\dimexpr\trans:dim:a+#1+#2\relax
+ \trans:dim:c=\dimexpr\ht\transbox+\dp\transbox\relax
+ \trans:dim:d=\dimexpr\trans:dim:c+#3+#4\relax
+ \edef\trans:def:a{\fdivide\trans:dim:b\trans:dim:a}%
+ \edef\trans:def:b{\fdivide\trans:dim:d\trans:dim:c}%
+ \savebp\trans:def:c-\dimexpr#1\relax
+ \savebp\trans:def:d\dimexpr-#4+(#3+#4)*\dp\transbox/\trans:dim:c\relax
+ \pdfliteral{q \trans:def:a\space 0 0 \trans:def:b\space
+ \trans:def:c\space \trans:def:d\space cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxhext#1#2{\boxexts{#1}{#2}\z@\z@}
+\def\boxvext#1#2{\boxexts\z@\z@{#1}{#2}}
+\def\boxext#1{\boxexts{#1}{#1}{#1}{#1}}
+
+% raw translation
+
+\def\boxtranslate#1#2{%
+ \hbox\transboxdef
+ \pdfliteral{q 1 0 0 1 \tobp{#1} \tobp{#2} cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+% heuristic rotation by 90 degrees (left and right variants)
+
+\def\boxrevolveleft{%
+ \hbox\transbcboxdef
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\ht\transbox
+ \transbboxdef
+ \wd\transbox=\dimexpr\ht\transbox+\dp\transbox\relax
+ \ht\transbox=\trans:dim:a
+ \dp\transbox=\z@
+ \transcboxdef
+ \pdfliteral{q 0 1 -1 0 \tobp{\trans:dim:b} 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxrevolveright{%
+ \hbox\transbcboxdef
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\dp\transbox
+ \transbboxdef
+ \wd\transbox=\dimexpr\ht\transbox+\dp\transbox\relax
+ \ht\transbox=\trans:dim:a
+ \dp\transbox=\z@
+ \transcboxdef
+ \pdfliteral{q 0 -1 1 0 \tobp{\trans:dim:b} \tobp{\trans:dim:a} cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\let\boxrevolvepi\boxflipxy
+
+% clockwise rotation relative to base point
+
+\def\boxrotate#1{%
+ \hbox\transboxdef
+ \floatsincos\trans:def:a\trans:def:b{#1}%
+ \pdfliteral{q \trans:def:b\space
+ \negbp\trans:def:a\space % clockwise
+ \trans:def:a\space % vs anti clockwise
+ \trans:def:b\space
+ 0 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+% clockwise rotation relative to base point translated (x,y)
+
+\def\boxrotatexy#1#2#3{%
+ \hbox\transboxdef
+ \floatsincos\trans:def:a\trans:def:b{#1}%
+ \savebp\trans:def:c\dimexpr#2\relax
+ \savebp\trans:def:d\dimexpr#3\relax
+ \pdfliteral{q \trans:def:b\space
+ \negbp\trans:def:a\space
+ \trans:def:a\space
+ \trans:def:b\space
+ \trans:def:c\space
+ \trans:def:d\space cm
+ 1 0 0 1 \negbp\trans:def:c\space
+ \negbp\trans:def:d\space cm}% ?
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\def\boxrotatec#1{\boxrotatexy{#1}{\wd\transbox/2}{(\ht\transbox-\dp\transbox)/2}}
+\def\boxrotatell#1{\boxrotatexy{#1}\z@{-\dp\transbox}}
+\def\boxrotatelr#1{\boxrotatexy{#1}{\wd\transbox}{-\dp\transbox}}
+\def\boxrotateul#1{\boxrotatexy{#1}\z@{\ht\transbox}}
+\def\boxrotateur#1{\boxrotatexy{#1}{\wd\transbox}{\ht\transbox}}
+
+% bbox-wise rotation (left and right variants)
+
+\newif\ifbboxright
+
+\def\box:rotate:bb#1{%
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\ht\transbox
+ \trans:dim:c=\dp\transbox
+ \trans:dim:d=\dimexpr\ht\transbox+\dp\transbox\relax
+ \trans:count=\reducetrigangle{#1}\fractperiod\relax
+ \ifcase\fracttrigfourth\trans:count\relax
+ \fr@ct:sin:cos:i\trans:def:a\trans:def:b\trans:count
+ \wd\transbox=\dimexpr\fr@ct:mul\trans:dim:a\trans:def:b
+ +\fr@ct:mul\trans:dim:d\trans:def:a\relax
+ \ht\transbox=\dimexpr\fr@ct:mul\trans:dim:b\trans:def:b\relax
+ \dp\transbox=\dimexpr\fr@ct:mul\trans:dim:a\trans:def:a
+ +\fr@ct:mul\trans:dim:c\trans:def:b\relax
+ \savebp\trans:def:c=\dimexpr\fr@ct:mul\trans:dim:c\trans:def:a\relax
+ \or
+ \fr@ct:sin:cos:ii\trans:def:a\trans:def:b\trans:count
+ \wd\transbox=\dimexpr-\fr@ct:mul\trans:dim:a\trans:def:b
+ +\fr@ct:mul\trans:dim:d\trans:def:a\relax
+ \ht\transbox=\dimexpr-\fr@ct:mul\trans:dim:c\trans:def:b\relax
+ \dp\transbox=\dimexpr-\fr@ct:mul\trans:dim:b\trans:def:b
+ +\fr@ct:mul\trans:dim:a\trans:def:a\relax
+ \savebp\trans:def:c=\dimexpr-\fr@ct:mul\trans:dim:a\trans:def:b
+ +\fr@ct:mul\trans:dim:c\trans:def:a\relax
+ \or
+ \fr@ct:sin:cos:iii\trans:def:a\trans:def:b\trans:count
+ \wd\transbox=\dimexpr-\fr@ct:mul\trans:dim:a\trans:def:b
+ -\fr@ct:mul\trans:dim:d\trans:def:a\relax
+ \ht\transbox=\dimexpr-\fr@ct:mul\trans:dim:a\trans:def:a
+ -\fr@ct:mul\trans:dim:c\trans:def:b\relax
+ \dp\transbox=\dimexpr-\fr@ct:mul\trans:dim:b\trans:def:b\relax
+ \savebp\trans:def:c=\dimexpr-\fr@ct:mul\trans:dim:a\trans:def:b
+ -\fr@ct:mul\trans:dim:b\trans:def:a\relax
+ \or
+ \fr@ct:sin:cos:iv\trans:def:a\trans:def:b\trans:count
+ \wd\transbox=\dimexpr\fr@ct:mul\trans:dim:a\trans:def:b
+ -\fr@ct:mul\trans:dim:d\trans:def:a\relax
+ \ht\transbox=\dimexpr\fr@ct:mul\trans:dim:b\trans:def:b
+ -\fr@ct:mul\trans:dim:a\trans:def:a\relax
+ \dp\transbox=\dimexpr\fr@ct:mul\trans:dim:c\trans:def:b\relax
+ \savebp\trans:def:c=\dimexpr-\fr@ct:mul\trans:dim:b\trans:def:a\relax
+ \fi
+ \ifbboxright
+ \trans:dim:d=\dimexpr\fr@ct:mul\trans:dim:a\trans:def:a\relax
+ \ht\transbox=\dimexpr\ht\transbox+\trans:dim:d\relax
+ \dp\transbox=\dimexpr\dp\transbox-\trans:dim:d\relax
+ \savebp\trans:def:d\trans:dim:d
+ \else
+ \def\trans:def:d{0}%
+ \fi
+ \edef\trans:def:a{\fr@ct:div\trans:def:a}%
+ \edef\trans:def:b{\fr@ct:div\trans:def:b}%
+ \pdfliteral{q \trans:def:b\space
+ \negbp\trans:def:a\space
+ \trans:def:a\space
+ \trans:def:b\space
+ \trans:def:c\space
+ \trans:def:d\space cm}%
+ \savebp\trans:def=\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}}
+
+\def\boxrotatebbl#1{%
+ \hbox\transboxdef
+ \bboxrightfalse
+ \box:rotate:bb{#1}%
+ \transboxend}
+
+\def\boxrotatebbr#1{%
+ \hbox\transboxdef
+ \bboxrighttrue
+ \box:rotate:bb{#1}%
+ \transboxend}
+
+% the default is left variant
+
+\bboxrightfalse
+
+\def\boxrotatebb#1{%
+ \hbox\transboxdef
+ \box:rotate:bb{#1}%
+ \transboxend}
+
+% slanting; \boxslantx{<x>}\boxslanty{<y>} is NOT equivalent to \boxslantxy{<x>}{<y>}
+
+\def\boxslant#1#2{%
+ \hbox\transboxdef
+ \fractsincos\trans:def:a\trans:def:b{#1}%
+ \fractsincos\trans:def:c\trans:def:d{#2}%
+ \edef\trans:def:a{\fdivide\trans:def:a\trans:def:b}%
+ \edef\trans:def:c{\fdivide\trans:def:c\trans:def:d}%
+ \pdfliteral{q 1 \trans:def:c\space \trans:def:a\space 1 0 0 cm}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+\let\boxslantxy\boxslant
+\def\boxslantx#1{\boxslant{#1}{0}} % not \z@!!
+\def\boxslanty#1{\boxslant{0}{#1}}
+
+% bounding box wise slanting (left and right variant)
+
+\def\box:slant:bb#1#2{%
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\ht\transbox
+ \trans:dim:c=\dp\transbox
+ \trans:dim:d=\dimexpr\ht\transbox+\dp\transbox\relax
+ \trans:count=\reducetrigangle{#1}{2*\fractfourth}\relax
+ \ifcase\fracttrigfourth\trans:count\relax
+ \fr@ct:sin:cos:i\trans:def:a\trans:def:b\trans:count
+ \wd\transbox=\dimexpr\trans:dim:a+\trans:dim:d*\trans:def:a/\trans:def:b\relax
+ \savebp\trans:def:c=\dimexpr\trans:dim:c*\trans:def:a/\trans:def:b\relax
+ \or
+ \fr@ct:sin:cos:ii\trans:def:a\trans:def:b\trans:count
+ \wd\transbox=\dimexpr\trans:dim:a-\trans:dim:d*\trans:def:a/\trans:def:b\relax
+ \savebp\trans:def:c=\dimexpr-\trans:dim:b*\trans:def:a/\trans:def:b\relax
+ \fi
+ \edef\trans:def{\fdivide\trans:def:a\trans:def:b}%
+ \trans:count=\reducetrigangle{#2}{2*\fractfourth}\relax
+ \ifcase\fracttrigfourth\trans:count\relax
+ \fr@ct:sin:cos:i\trans:def:a\trans:def:b\trans:count
+ \ht\transbox=\dimexpr\trans:dim:b+\trans:dim:a*\trans:def:a/\trans:def:b\relax
+ \or
+ \fr@ct:sin:cos:ii\trans:def:a\trans:def:b\trans:count
+ \dp\transbox=\dimexpr\trans:dim:c-\trans:dim:a*\trans:def:a/\trans:def:b\relax
+ \fi
+ \ifbboxright
+ \trans:dim:d=\dimexpr-\trans:dim:a*\trans:def:a/\trans:def:b\relax
+ \ht\transbox=\dimexpr\ht\transbox+\trans:dim:d\relax
+ \dp\transbox=\dimexpr\dp\transbox-\trans:dim:d\relax
+ \savebp\trans:def:d\trans:dim:d
+ \else
+ \def\trans:def:d{0}%
+ \fi
+ \edef\trans:def:a{\fdivide\trans:def:a\trans:def:b}%
+ \pdfliteral{q 1
+ \trans:def:a\space
+ \trans:def\space
+ 1
+ \trans:def:c\space
+ \trans:def:d\space cm}%
+ \savebp\trans:def=\wd\transbox
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}}
+
+\def\boxslantbbl#1#2{%
+ \hbox\transboxdef
+ \bboxrightfalse
+ \box:slant:bb{#1}{#2}%
+ \transboxend}
+
+\def\boxslantbbr#1#2{%
+ \hbox\transboxdef
+ \bboxrighttrue
+ \box:slant:bb{#1}{#2}%
+ \transboxend}
+
+\def\boxslantbb#1#2{%
+ \hbox\transboxdef
+ \box:slant:bb{#1}{#2}%
+ \transboxend}
+
+\def\boxslantbbx#1{\boxslantbb{#1}{0}} % not \z@!!
+\def\boxslantbby#1{\boxslantbb{0}{#1}}
+\def\boxslantbbry#1{\boxslantbbr{0}{#1}}
+\def\boxslantbbly#1{\boxslantbbl{0}{#1}}
+
+% on-fly conversion to XObject (\pdfxform)
+
+\def\boxxform{%
+ \hbox\transboxdef
+ \immediate\pdfxform\transbox
+ \pdfrefxform\pdflastxform
+ \transboxend}
+
+\def\boxxformspec#1\boxxform{%
+ \hbox\transboxdef
+ \immediate\pdfxform#1\transbox
+ \pdfrefxform\pdflastxform
+ \transboxend}
+
+% Some previous version of pdftrans had \boxclip defined as \boxpath{}{W n}. This didn't
+% work properly since \boxpath restores the graphic state before placing the box itself
+% (see below).
+
+% clipping
+
+\def\boxclip{%
+ \hbox\transboxdef
+ \savebp\trans:def\wd\transbox
+ \pdfliteral{q 0 \tobp{-\dp\transbox} \trans:def\space
+ \tobp{\ht\transbox+\dp\transbox} re W n}%
+ \box\transbox
+ \pdfliteral{Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+% up and down
+
+\def\boxraise#1{%
+ \hbox\transboxdef
+ \raise\dimexpr#1\relax\box\transbox
+ \transboxend}
+
+\def\boxlower#1{%
+ \hbox\transboxdef
+ \lower\dimexpr#1\relax\box\transbox
+ \transboxend}
+
+\let\boxbaselineup\boxlower
+\let\boxbaselinedown\boxraise
+
+\def\boxbaselineat#1{% baseline at #1 of the total box vdim
+ \hbox\transboxdef
+ \lower\dimexpr(\ht\transbox+\dp\transbox)*(#1)/\transfactor-\dp\transbox\relax
+ \box\transbox
+ \transboxend}
+
+\def\boxmoveleft#1{%
+ \vbox\transboxdef
+ \moveleft\dimexpr#1\relax\box\transbox
+ \transboxend}
+
+\def\boxmoveright#1{%
+ \vbox\transboxdef
+ \moveright\dimexpr#1\relax\box\transbox
+ \transboxend}
+
+% rule-like spec of the box size (risky hack)
+
+\def\b@x:rule#1#2#{%
+ #1\transboxdef
+ \setbox0\hbox{\vrule width\wd\transbox height\ht\transbox depth\dp\transbox #2}%
+ \wd\transbox=\wd0
+ \ht\transbox=\ht0
+ \dp\transbox=\dp0
+ \box\transbox
+ \transboxend#1}
+
+\def\hboxr{\b@x:rule\hbox}
+\def\vboxr{\b@x:rule\vbox}
+\def\vtopr{\b@x:rule\vtop}
+\let\boxr\hboxr
+
+% reboxing; restore box natural dimensions (without shrink or stretch).
+
+\def\revbox{%
+ \vbox\transboxdef
+ \unvbox\transbox
+ \transboxend}
+
+\def\revtop{%
+ \vtop\transboxdef
+ \unvbox\transbox
+ \transboxend}
+
+\def\rehbox{%
+ \hbox\transboxdef
+ \unhbox\transbox
+ \transboxend}
+
+% just wrap
+
+\def\hboxwrap{%
+ \hbox\transboxdef
+ \box\transbox
+ \transboxend}
+
+\def\vboxwrap{%
+ \vbox\transboxdef
+ \box\transbox
+ \transboxend}
+
+\def\vtopwrap{%
+ \vtop\transboxdef
+ \box\transbox
+ \transboxend}
+
+% show boxes
+
+\def\boxshow#1#2#3{%
+ \hbox\transboxdef
+ \savebp\trans:def:a\wd\transbox
+ \savebp\trans:def:b\dimexpr\ht\transbox+\dp\transbox\relax
+ \savebp\trans:def:c\dp\transbox
+ \box\transbox
+ \pdfliteral{%
+ q #1
+ 1 0 0 1 \negbp\trans:def:a\space 0 cm
+ 0 \negbp\trans:def:c\space \trans:def:a\space \trans:def:b\space re S
+ #2
+ 0 0 m
+ \trans:def:a\space 0 l S #3 Q}%
+ \transboxend}
+
+\def\boxsh{\boxshow{0 0 1 RG}{0 0 .8 RG [2 2]1 d}{}}
+
+% box painted according to graphic state parameters (ie. on layer).
+
+\def\boxgs#1#2{%
+ \hbox\transboxdef
+ \pdfliteral{q #1}%
+ \savebp\trans:def\wd\transbox
+ \box\transbox
+ \pdfliteral{#2 Q 1 0 0 1 \trans:def\space 0 cm}%
+ \transboxend}
+
+% markers around the box
+
+\def\boxmarkers#1#2#3{%
+ \hbox\transboxdef
+ \copy\transbox
+ \trans:dim:a=\dimexpr#1\relax
+ \trans:dim:b=\dimexpr#2\relax
+ \pdfliteral{q #3}%
+ \savebp\trans:def-\dp\transbox
+ \box:markers:h
+ \savebp\trans:def\ht\transbox
+ \box:markers:h
+ \savebp\trans:def-\wd\transbox
+ \box:markers:v
+ \savebp\trans:def\z@
+ \box:markers:v
+ \pdfliteral{S Q}%
+ \setbox\transbox\box\voidb@x
+ \transboxend}
+
+\def\box:markers:h{%
+ \savebp\trans:def:a\trans:dim:a
+ \savebp\trans:def:b\trans:dim:b
+ \pdfliteral{%
+ \trans:def:a\space\trans:def\space m \trans:def:b\space\trans:def\space l}%
+ \savebp\trans:def:a\dimexpr-\wd\transbox-\trans:dim:a\relax
+ \savebp\trans:def:b\dimexpr-\wd\transbox-\trans:dim:b\relax
+ \pdfliteral{%
+ \trans:def:a\space\trans:def\space m \trans:def:b\space\trans:def\space l}}
+
+\def\box:markers:v{%
+ \savebp\trans:def:a\dimexpr-\dp\transbox-\trans:dim:a\relax
+ \savebp\trans:def:b\dimexpr-\dp\transbox-\trans:dim:b\relax
+ \pdfliteral{%
+ \trans:def\space \trans:def:a\space m \trans:def\space \trans:def:b\space l}%
+ \savebp\trans:def:a\dimexpr\ht\transbox+\trans:dim:a\relax
+ \savebp\trans:def:b\dimexpr\ht\transbox+\trans:dim:b\relax
+ \pdfliteral{%
+ \trans:def\space \trans:def:a\space m \trans:def\space \trans:def:b\space l}}
+
+% for sake of compatibility...
+
+\def\boxm#1#2{\boxmarkers{#1}{#2}{}}
+\let\boxmarks\boxmarkers
+
+% simple phantom
+
+\def\boxphantom{%
+ \hbox\transboxdef
+ \hbox to\wd\transbox
+ {\vrule width\z@ height\ht\transbox depth\dp\transbox\hss}%
+ \transboxend}
+
+% simple smash
+
+\def\boxsmash{%
+ \hbox\transhboxdef
+ \wd\transbox=\z@
+ \ht\transbox=\z@
+ \dp\transbox=\z@
+ \box\transbox
+ \transboxend}
+
+\def\hboxsmash{%
+ \hbox\transhboxdef
+ \wd\transbox=\z@
+ \box\transbox
+ \transboxend}
+
+\def\vboxsmash{%
+ \vbox\transhboxdef
+ \ht\transbox=\z@
+ \dp\transbox=\z@
+ \box\transbox
+ \transboxend}
+
+\def\boxgobble{%
+ \hbox\transboxdef
+% \global\setbox\transbox=\box\voidb@x
+ \transboxend}
+
+% say something about the following box (this one can be followed void box)
+
+\def\box:about#1{%
+ \hbox\bgroup
+ \def\transboxtodo{%
+ \trans:dim:a=\wd\transbox
+ \trans:dim:b=\ht\transbox
+ \trans:dim:c=\dp\transbox
+ \box\transbox
+ \hbox to\z@{\hss
+ \hbox to\trans:dim:a{\hss
+ \lower\trans:dim:c\vbox to\z@{\vss
+ \vbox to\dimexpr\trans:dim:b+\trans:dim:c{\vss\tt
+ #1\vbox{\vskip1ex
+ \halign{\hskip1ex plus 1fil####&####\hskip1ex plus 1fil\cr
+ \trans:def\span\cr
+ wd & \the\trans:dim:a\cr
+ ht & \the\trans:dim:b\cr
+ dp & \the\trans:dim:c\cr}%
+ \vskip1ex
+ }%
+ \vss}%
+ }%
+ \hss}%
+ }%
+ \egroup}\def\trans:def{}\def\trans:def:a{}\box:@bout}
+
+\def\box:@bout#1{%
+ \ifcase
+ \ifx#1\hbox 0 \else
+ \ifx#1\vbox 1 \else
+ \ifx#1\vtop 2 \else
+ \ifx#1\box 3 \else
+ \ifx#1\copy 4 \else 5 \fi\fi\fi\fi\fi
+ \edef\trans:def{\trans:def\string\hbox}\expandafter\transboxini\or
+ \edef\trans:def{\trans:def\string\vbox}\expandafter\transboxini\or
+ \edef\trans:def{\trans:def\string\vtop}\expandafter\transboxini\or
+ \edef\trans:def{\trans:def\string\box}\expandafter\boxabout:register\or
+ \edef\trans:def{\trans:def\string\copy}\expandafter\boxabout:register\or
+ \ifx#1\trans:def:a\errmessage{`#1' is not a box}\fi\let\trans:def:a#1% endless loop otherwise
+ \edef\trans:def{\trans:def\string#1->}\expandafter\expandafter\expandafter\box:@bout\fi
+ #1}
+
+\def\boxabout:register#1{%
+ \let\trans:def:a#1%
+ \afterassignment\boxabout:r@gister\trans:count}
+
+\def\boxabout:r@gister{%
+ \edef\trans:def{\trans:def\the\trans:count\space
+ (\ifvoid\trans:count void\else
+ \ifhbox\trans:count hbox\else
+ \ifvbox\trans:count vbox\fi\fi\fi)}%
+ \afterassignment\transboxtodo
+ \setbox\transbox\trans:def:a\trans:count}
+
+\def\boxinfo{\box:about{\boxpath{.3 w 0 G 0 0 .3 0 k}{B}}}
+\def\boxabout#1{\box:about{\boxgs{#1}{}}}
+
+% paint box path as a background of the box
+
+\def\boxpath#1#2{%
+ \hbox\transboxdef
+ \savebp\trans:def:a\wd\transbox
+ \savebp\trans:def:b\dimexpr\ht\transbox+\dp\transbox\relax
+ \savebp\trans:def:c\dp\transbox
+ \pdfliteral{q #1
+ 0
+ \negbp\trans:def:c\space
+ \trans:def:a\space
+ \trans:def:b\space re #2 Q}%
+ \box\transbox
+ \transboxend}
+
+\def\boxroundpath#1#2#3{%
+ \hbox\transboxdef
+ \savebp\trans:def:a\wd\transbox
+ \savebp\trans:def:b\ht\transbox
+ \savebp\trans:def:c\dp\transbox
+ \trans:dim:d=\dimexpr#1\relax
+ \savebp\trans:def:d\trans:dim:d
+ \pdfliteral{q #2}%
+ \pdfliteral{0 \trans:def:d\space m}%
+ \savebp\trans:def\dimexpr\ht\transbox-\trans:dim:d \relax
+ \pdfliteral{%
+ 0 \trans:def\space l 0 \trans:def:b\space \trans:def:d\space \trans:def:b\space y}%
+ \savebp\trans:def\dimexpr\wd\transbox-\trans:dim:d \relax
+ \pdfliteral{\trans:def\space \trans:def:b\space l}%
+ \savebp\trans:def\dimexpr\ht\transbox-\trans:dim:d \relax
+ \pdfliteral{%
+ \trans:def:a\space \trans:def:b\space \trans:def:a\space \trans:def\space y}%
+ \savebp\trans:def\dimexpr\dp\transbox-\trans:dim:d \relax
+ \pdfliteral{\trans:def:a\space \negbp\trans:def\space l}%
+ \savebp\trans:def\dimexpr\wd\transbox-\trans:dim:d \relax
+ \pdfliteral{%
+ \trans:def:a\space \negbp\trans:def:c\space \trans:def\space \negbp\trans:def:c\space y
+ \trans:def:d\space \negbp\trans:def:c\space l}%
+ \savebp\trans:def\dimexpr\dp\transbox-\trans:dim:d \relax
+ \pdfliteral{%
+ 0 \negbp\trans:def:c\space 0 \negbp\trans:def\space y 0 \trans:def:d\space l}%
+ \pdfliteral{h #3 Q}%
+ \box\transbox
+ \transboxend}
+
+\def\boxedgypath#1#2#3{%
+ \hbox\transboxdef
+ \savebp\trans:def:a\wd\transbox
+ \savebp\trans:def:b\ht\transbox
+ \savebp\trans:def:c\dp\transbox
+ \trans:dim:d=\dimexpr#1\relax
+ \savebp\trans:def:d\trans:dim:d
+ \pdfliteral{q #2}%
+ \pdfliteral{0 \trans:def:d\space m}%
+ \savebp\trans:def\dimexpr\ht\transbox-\trans:dim:d \relax
+ \pdfliteral{0 \trans:def\space l \trans:def:d\space \trans:def:b\space l}%
+ \savebp\trans:def\dimexpr\wd\transbox-\trans:dim:d \relax
+ \pdfliteral{\trans:def\space \trans:def:b\space l}%
+ \savebp\trans:def\dimexpr\ht\transbox-\trans:dim:d \relax
+ \pdfliteral{\trans:def:a\space \trans:def\space l}%
+ \savebp\trans:def\dimexpr\dp\transbox-\trans:dim:d \relax
+ \pdfliteral{\trans:def:a\space \negbp\trans:def\space l}%
+ \savebp\trans:def\dimexpr\wd\transbox-\trans:dim:d \relax
+ \pdfliteral{\trans:def\space \negbp\trans:def:c\space l
+ \trans:def:d\space \negbp\trans:def:c\space l}%
+ \savebp\trans:def\dimexpr\dp\transbox-\trans:dim:d \relax
+ \pdfliteral{0 \negbp\trans:def\space l 0 \trans:def:d\space l}%
+ \pdfliteral{h #3 Q}%
+ \box\transbox
+ \transboxend}
+
+% obsolete
+
+\let\boxsquarepath\boxedgypath
+
+%%% ARITHMETIC
+
+% some shortcuts
+
+\def\expandnumberafter#1#2{\expandafter#1\expandafter{\number#2}}
+
+\def\expandtwonumbersafter#1#2#3{%
+ \expandafter#1\expandafter
+ {\number#2\expandafter}\expandafter
+ {\number#3}}
+
+\def\expandthreenumbersafter#1#2#3#4{%
+ \expandafter#1\expandafter
+ {\number#2\expandafter}\expandafter
+ {\number#3\expandafter}\expandafter
+ {\number#4}}
+
+\def\expandnumexprafter#1#2{\expandafter#1\expandafter{\number\numexpr#2}}
+
+\def\expandtwonumexprafter#1#2#3{%
+ \expandafter#1\expandafter
+ {\number\numexpr#2\expandafter}\expandafter
+ {\number\numexpr#3}}
+
+\def\expandthreenumexprafter#1#2#3#4{%
+ \expandafter#1\expandafter
+ {\number\numexpr#2\expandafter}\expandafter
+ {\number\numexpr#3\expandafter}\expandafter
+ {\number\numexpr#4}}
+
+\def\expanddimexprafter#1#2{\expandafter#1\expandafter{\the\dimexpr#2}}
+
+% Whenever we write a dimen into PDF code, we need to convert it from TeX units
+% to Postscript big points. We handle that as precise as possible, using the
+% fact that eTeX handles 64bit numbers as temporary results of expressions such
+% as A*B/C. A is dimension in points, B is \pt:f@ctor and C is \bp:f@ctor. Note
+% that factor 100pt/100bp is more precise than 1pt/1bp or 10pt/10bp, but NOT
+% less precise than 1000pt/1000bp. Thus, 100 is the optimum.
+
+\edef\pt:f@ctor{\number\dimexpr100pt} % NOT \dimexpr100\p@!
+\edef\bp:f@ctor{\number\dimexpr100bp} %
+
+\begingroup
+ \catcode`\P=12
+ \catcode`\T=12
+ \lccode`P=`p
+ \lccode`T=`t
+ \lowercase{\gdef\with@ut:pt#1PT{#1}}
+\endgroup
+
+\def\withoutpt{\expandafter\with@ut:pt}
+\def\negbp#1{\withoutpt\the\dimexpr-#1pt\relax}
+\def\asbp#1{\withoutpt\the\dimexpr#1*\pt:f@ctor/\bp:f@ctor\relax}
+
+% If we assume that \pdfdecimaldigits never exceeds possible range (0..4),
+% we can implement PDF dimens rounding in the following way:
+
+% \def\roundbp#1{%
+% \expandafter\expandafter
+% \csname r@und:bp:\the\pdfdecimaldigits\expandafter\endcsname
+% \expandafter\with@ut:pt\the\dimexpr(#1)*\pt:f@ctor/\bp:f@ctor\relax0000\relax}
+% or with less \expandafters
+\def\roundbp#1{%
+ \expandafter\r@undbp\the\dimexpr(#1)*\pt:f@ctor/\bp:f@ctor\relax0000\relax}
+\def\r@undbp{%
+ \csname r@und:bp:\the\pdfdecimaldigits\expandafter\endcsname
+ \with@ut:pt}
+
+\expandafter\def\csname r@und:bp:0\endcsname #1.#2#3\relax{\number\numexpr#1#2/10\relax}
+\expandafter\def\csname r@und:bp:1\endcsname #1.#2#3#4\relax{\round:bp:once{#1}{#2#3}\relax}
+\expandafter\def\csname r@und:bp:2\endcsname #1.#2#3#4#5\relax{\round:bp:once{#1}{#2#3#4}\relax}
+\expandafter\def\csname r@und:bp:3\endcsname #1.#2#3#4#5#6\relax{\round:bp:once{#1}{#2#3#4#5}\relax}
+\expandafter\def\csname r@und:bp:4\endcsname #1.#2#3#4#5#6#7\relax{\round:bp:once{#1}{#2#3#4#5#6}\relax}
+
+\def\round:bp:once#1#2{%
+ % 15.10.2013: that is wrong! that drops minus sign in case -0.xxxx
+ %\number\numexpr#1\ifnum#1<0-\else+\fi
+ %(\m@ne+\expandafter\r@und:bp:once\number\numexpr1#2/10\relax}
+ % that works but may produce -0.0
+ \ifnum#11<0-\number\numexpr-\else\number\numexpr\fi
+ #1+(\m@ne+\expandafter\r@und:bp:once\number\numexpr1#2/10\relax}
+ % 21.01.2014: but both rounds 0.9995bp to 0.999, while they should to 1.0,
+ % but this is a cost of bp<->pt conversion
+
+\def\r@und:bp:once#1#2\relax{#1)\relax\ifnum#2>0.#2\fi}
+
+% To change rounding digits and speed-up a little one may say \setbpround 0..4
+
+\def\set:bp:rounder#1#2{% 0..4
+ \expandafter\edef\csname #1:\the\numexpr#2\relax\endcsname##1{%
+ \unexpanded{\expandafter\expandafter\expandafter}\expandafter\noexpand
+ \csname r@und:bp:\the\numexpr#2\relax\endcsname
+ \unexpanded{\expandafter\with@ut:pt\the}%
+ \dimexpr(##1)*\unexpanded{\pt:f@ctor/\bp:f@ctor}\relax0000\relax}}
+
+\set:bp:rounder{roundbpto}{0}
+\set:bp:rounder{roundbpto}{1}
+\set:bp:rounder{roundbpto}{2}
+\set:bp:rounder{roundbpto}{3}
+\set:bp:rounder{roundbpto}{4}
+
+\def\roundbpto#1{\csname roundbpto:#1\endcsname}
+
+\def\enablebpround{\let\tobp\roundbp}
+\def\disablebpround{\let\tobp\asbp}
+\def\setbpround#1{\expandafter\let\expandafter\tobp\csname roundbpto:\the\numexpr#1\relax\endcsname}
+
+% By default, \tobp respects \pdfdecimaldigits
+
+\enablebpround
+
+% save rounded to macro
+
+\def\savebp#1{%
+ \def\s@vebp{%
+ \edef#1{\tobp{\bp:dim@n}}}%
+ \afterassignment\s@vebp\bp:dim@n}
+
+\newdimen\bp:dim@n
+
+% Lets play with basic arithmetic operations. To make things consistent, each
+% function expands to \numexpr|\dimexpr, even if could be easily expanded to
+% digits. This approach ensures predictable behaviour whenever a \function is
+% followed by \expandafter or \relax. To avoid evaluating the same expressions
+% twice or more, each function expands its parameters before performing the
+% final operation. This scheme makes temporary macros reusable.
+
+% absolute value
+
+\def\absint{\expandnumexprafter\absoluteint}
+\def\absoluteint#1{\numexpr\ifnum#1<\z@-\fi#1}
+\def\absdim{\expanddimexprafter\absolutedim}
+\def\absolutedim#1{\dimexpr\ifdim#1<\z@-\fi#1}
+
+% Various approaches to integer division:
+% floor(a/b) -- the largest integer LOWER than a/b
+% ceil(a/b) -- the lowest integer HIGHER than a/b
+% int(a/b) -- the integer part (floor for a/b>=0 and ceil for a/b<0)
+% nint(a/b) -- rounding (the nearest integer)
+
+\def\expanddivisionafter#1#2#3{%
+ \expandnumexprafter#1{#2/#3}{#2}{#3}}
+
+\def\divfloor{\expandtwonumexprafter\dividefloor}
+\def\dividefloor{\expanddivisionafter\divide:fl@@r}
+\def\divide:fl@@r#1#2#3{%
+ \numexpr#1%
+ \ifcase\ifnum#2<0 \ifnum#3<0 1 \else 0 \fi
+ \else \ifnum#3<0 1 \else 0 \fi \fi
+ \ifnum\numexpr#1*#3>#2-\@ne\fi\or
+ \ifnum\numexpr#1*#3<#2-\@ne\fi\fi}
+
+\def\divceil{\expandtwonumexprafter\divideceil}
+\def\divideceil{\expanddivisionafter\divide:c@il}
+\def\divide:c@il#1#2#3{%
+ \numexpr#1%
+ \ifcase\ifnum#2<0 \ifnum#3<0 1 \else 0 \fi
+ \else \ifnum#3<0 1 \else 0 \fi \fi
+ \ifnum\numexpr#1*#3<#2+\@ne\fi\or
+ \ifnum\numexpr#1*#3>#2+\@ne\fi\fi}
+
+\def\divint{\expandtwonumexprafter\divideint}
+\def\divideint{\expanddivisionafter\divide:int}
+\def\divide:int#1#2#3{%
+ \numexpr#1%
+ \ifcase\ifnum#2<0 \ifnum#3<0 3 \else 1 \fi
+ \else \ifnum#3<0 2 \else 0 \fi \fi
+ \ifnum\numexpr#1*#3>#2-\@ne\fi\or
+ \ifnum\numexpr#1*#3<#2+\@ne\fi\or
+ \ifnum\numexpr#1*#3>#2+\@ne\fi\or
+ \ifnum\numexpr#1*#3<#2-\@ne\fi\fi}
+
+\def\divnint{\expandtwonumexprafter\dividenint}
+\def\dividenint#1#2{\numexpr#1/#2}
+
+% modulo
+
+\def\mod{\expandtwonumexprafter\modulo}
+\def\modulo{\expanddivisionafter\do:m@dulo}
+\def\do:m@dulo#1#2#3{\numexpr#2-#3*\divide:fl@@r{#1}{#2}{#3}\relax}
+
+% If we don't divide (by) negative numbers, the following macros works
+% a bit faster.
+
+\def\divfloorpos{\expandtwonumexprafter\dividefloorpos}
+\def\dividefloorpos{\expanddivisionafter\divide:fl@@r:pos}
+\def\divide:fl@@r:pos#1#2#3{\numexpr#1\ifnum\numexpr#1*#3>#2-\@ne\fi}
+
+\def\divceilpos{\expandtwonumexprafter\divideceilpos}
+\def\divideceilpos{\expanddivisionafter\divide:c@il:pos}
+\def\divide:c@il:pos#1#2#3{\numexpr#1\ifnum\numexpr#1*#3<#2+\@ne\fi}
+
+\let\divintpos\divfloorpos
+\let\divideintegerpos\dividefloorpos
+
+\def\modpos{\expandtwonumexprafter\modulopos}
+\def\modulopos{\expanddivisionafter\modulo:p@s}
+\def\modulo:p@s#1#2#3{\numexpr#2-#3*\divide:fl@@r:pos{#1}{#2}{#3}\relax}
+
+% One sticky problem in all the division related macros above... We always
+% check if some rounding is present using the formula
+% \divident/\divisor*\divisor <=> \divident
+% It works fine if one say (2\maxdimen)/\maxdimen, but arithmetic overflow
+% occurs for (2\maxdimen)/(\maxdimen+1) or (2\maxdimen)/2. Thus, can be used
+% for reasonably small numbers.
+
+% Having an integer division we can round float-like strings
+
+\def\floatround#1{\divnint{\dimexpr#1pt}\p@}
+\def\floatfloor#1{\divfloor{\dimexpr#1pt}\p@}
+\def\floatceil#1{\divceil{\dimexpr#1pt}\p@}
+\def\floatint#1{\divint{\dimexpr#1pt}\p@}
+\def\floatnint#1{\divnint{\dimexpr#1pt}\p@}
+
+% Now lets implement integer by integer division with float-like result. The
+% following approach is quite fast and precise enough for most practical
+% purposes, but resulting floats are limited to \maxdimen expressed in points
+% (16383.99998).
+
+\def\fdivide{\expandtwonumexprafter\flo@t:divide}
+\def\flo@t:divide#1#2{\withoutpt\the\dimexpr\numexpr#1*\p@/#2\relax sp\relax}
+
+% Note, that \fdivide produce a float-like string that can be used as a factor
+% preceding a dimen (i.e \hsize=\fdivide{2}{7}\hsize). For sake of preciseness
+% however, internally we always use \dimexpr\hsize*2/7 in such cases (see
+% pdftrans.tex).
+
+% Yet another approach to division with float-like result. \divfloat produce a
+% float-like string with fixed precision. There is still numeric overflow risk
+% mentioned above. No preciseness and result limitation, however.
+
+\def\divfloat{% <divisor> <divident> <preciseness>
+ \expandthreenumexprafter\dividefloat}
+
+\def\dividefloat#1#2#3{%
+ \expandnumberafter\divide:flo@t % \absoluteint returns \numexpr
+ {\absoluteint{\divideint{#1}{#2}}}{#1}{#2}{#3}}
+
+\def\divide:flo@t#1#2#3{% it is not enough to check the sign of #1
+ \ifnum#2<0 \ifnum#3>0 -\fi\else
+ \ifnum#2>0 \ifnum#3<0 -\fi\fi\fi
+ #1.\expandthreenumexprafter\divide:fl@@t
+ {#1}{\absoluteint{#2}}{\absoluteint{#3}}}
+
+\def\divide:fl@@t#1#2#3{%
+ \expandnumexprafter\divide:flo@t:modulo{#2-#1*#3}{#3}}
+
+\def\divide:flo@t:modulo#1#2{%
+ \ifnum#1<214748365
+ \expandtwonumbersafter\divide:flo@t:result{#10}{#2\expandafter}%
+ \else
+ \expandtwonumexprafter\divide:flo@t:modulo{#1/2}{#2/2\expandafter}%
+ \fi}
+
+\def\divide:flo@t:result#1#2#3{%
+ \ifnum#3>1
+ \expandtwonumexprafter\divide:flo@t:repeat
+ {#3-\@ne}{\dividefloorpos{#1}{#2}\expandafter}%
+ \else
+ \number\divide:flo@t:last{#1}{#2}\relax
+ \expandafter\gobbletwo
+ \fi{#1}{#2}}
+
+\def\divide:flo@t:repeat#1#2#3#4{%
+ #2\expandnumexprafter\divide:flo@t:modulo{#3-#2*#4}{#4}{#1}}
+
+\newcount\floatprecision
+\floatprecision=6
+
+\def\roundlast{\let\divide:flo@t:last\dividenint}
+\def\floorlast{\let\divide:flo@t:last\divideint}
+\roundlast
+
+% One may say \let\tobp\roundfixedbp to enable alternative (fixed) rounding.
+
+\def\tofixedbp#1{\divfloat{\dimexpr#1}\b@\floatprecision}
+\def\roundfixedbp#1{\divfloat{\dimexpr#1}\b@\pdfdecimaldigits}
+
+% And now comes a real challenge -- trigonometry. In the first approach, values
+% of trigonometric functions were predefined for angles of range 0..90. Real
+% angle values were not supported. Now things are a bit slower, but much more
+% precise. In particular, we handle real angles values. The trigonometry
+% implementation is excerpted from trans.tex and originally was inspired by
+% mf.web. The clue is that any angle value (not only integer) can be
+% represented as a series of predefined ,,coins''. Trigonometric functions can
+% be then recursively calculated as follows:
+%
+% sin(a+b) = sin(a)cos(b) + sin(b)cos(a)
+% cos(a+b) = cos(a)cos(b) - sin(a)sin(b)
+%
+% Big thanks for BOP team for encourage.
+
+\def\fractdegree#1{\numexpr16*\dimexpr#1pt} % 2^20sp = 16pt = 1degree
+\edef\fractfactor{\number\numexpr\maxdimen+\@ne} % 2^30
+\edef\fractfourth{\number\numexpr90*\fractdegree\@ne} % 90 degrees
+\edef\fractperiod{\number\numexpr4*\fractfourth} % 360 degrees
+
+\def\reducefractangle#1{% reduce to 0..#2
+ \expandnumberafter\reduce:fr@ct:angle{\fractdegree{#1}}}
+
+\def\reduce:fr@ct:angle#1#2{%
+ \ifnum#1<0
+ \numexpr#2-\modpos{-#1}{#2}\relax
+ \else
+ \modpos{#1}{#2}%
+ \fi}
+
+% For sake of backward compatibility we leave a hook for integer angles
+
+\def\reduceintangle#1#2{%
+ \expandtwonumexprafter\reduce:int:@ngle{#1}{#2/\fractdegree\@ne}}
+
+\def\reduce:int:@ngle#1#2{\fractdegree{\reduce:fr@ct:angle{#1}{#2}}}
+
+\def\enablefractangle{\let\reducetrigangle\reducefractangle}
+\def\disablefractangle{\let\reducetrigangle\reduceintangle}
+\enablefractangle
+
+% some macro shortcuts
+
+\def\fracttrigfourth#1{% returns 0..3 (quarter)
+ \dividefloorpos{#1}\fractfourth}
+
+\def\fr@ct:mul#1#2{#1*#2/\fractfactor}
+\def\fr@ct:div#1{\fdivide{#1}\fractfactor}
+
+% constant fractions
+
+\def\fr@ct:angle#1{\ifcase\numexpr#1\relax
+62914560\or % 60
+47185920\or % 45
+31457280\or % 30
+16777216\or % 2^4
+ 8388608\or % 2^3
+ 4194304\or % 2^2
+ 2097152\or % 2^1
+ 1048576\or % 2^0
+ 524288\or % 2^-1
+ 262144\or % 2^-2
+ 131072\or % 2^-3
+ 65536\or % 2^-4
+ 32768\or % 2^-5
+ 16384\or % 2^-6
+ 8192\or % 2^-7
+ 4096\or % 2^-8
+ 2048\or % 2^-9
+ 1024\or % 2^-10
+ 512\or % 2^-11
+ 256\or % 2^-12
+ 128\or % 2^-13
+ 64\or % 2^-14
+ 32\or % 2^-15
+ 16\or % 2^-16
+ 8\or % 2^-17
+ 4\or % 2^-18
+ 2\or % 2^-19
+ 1\fi}% 2^-20
+
+\def\fr@ct:sin#1{\ifcase\numexpr#1\relax
+929887697\or % 60
+759250125\or % 45
+536870912\or % 30
+295963357\or % 2^4
+149435979\or % 2^3
+ 74900443\or % 2^2
+ 37473049\or % 2^1
+ 18739379\or % 2^0
+ 9370046\or % 2^-1
+ 4685068\or % 2^-2
+ 2342539\or % 2^-3
+ 1171270\or % 2^-4
+ 585635\or % 2^-5
+ 292818\or % 2^-6
+ 146409\or % 2^-7
+ 73204\or % 2^-8
+ 36602\or % 2^-9
+ 18301\or % 2^-10
+ 9151\or % 2^-11
+ 4575\or % 2^-12
+ 2288\or % 2^-13
+ 1144\or % 2^-14
+ 572\or % 2^-15
+ 286\or % 2^-16
+ 143\or % 2^-17
+ 71\or % 2^-18
+ 36\or % 2^-19
+ 18\fi}% 2^-20
+
+\def\fr@ct:cos#1{\ifcase\numexpr#1\relax
+ 536870912\or % 60
+ 759250125\or % 45
+ 929887697\or % 30
+1032146887\or % 2^4
+1063292242\or % 2^3
+1071126243\or % 2^2
+1073087729\or % 2^1
+1073578288\or % 2^0
+1073700939\or % 2^-1
+1073731603\or % 2^-2
+1073739269\or % 2^-3
+1073741185\or % 2^-4
+1073741664\or % 2^-5
+1073741784\or % 2^-6
+1073741814\or % 2^-7
+1073741822\or % 2^-8
+1073741823\or % 2^-9
+1073741824\or % 2^-10
+1073741824\or % 2^-11
+1073741824\or % 2^-12
+1073741824\or % 2^-13
+1073741824\or % 2^-14
+1073741824\or % 2^-15
+1073741824\or % 2^-16
+1073741824\or % 2^-17
+1073741824\or % 2^-18
+1073741824\or % 2^-19
+1073741824\fi}% 2^-20
+
+% I like \ifcase...\or...\fi acting as arrays because of its readability.
+% For sake of speed however, we say:
+
+\trans:count=0
+\loop
+ \expandafter\edef\csname
+ fractangle:\the\trans:count\endcsname{\fr@ct:angle\trans:count}
+ \expandafter\edef\csname
+ fractsinvalue:\the\trans:count\endcsname{\fr@ct:sin\trans:count}
+ \expandafter\edef\csname
+ fractcosvalue:\the\trans:count\endcsname{\fr@ct:cos\trans:count}
+ \ifnum\trans:count<27
+ \advance\trans:count by1
+\repeat
+\def\fr@ct:angle#1{\csname fractangle:\number#1\endcsname}
+\def\fr@ct:sin#1{\csname fractsinvalue:\number#1\endcsname}
+\def\fr@ct:cos#1{\csname fractcosvalue:\number#1\endcsname}
+
+% Here the main loop starts.
+
+\def\fracttrig#1{% <angle> -> <sine> <cosine> <command>
+ \expandnumexprafter\fr@ct:trig{\reducetrigangle{#1}\fractperiod}}
+
+\def\fr@ct:trig#1{%
+ \csname fr@ct:trig:\romannumeral\fracttrigfourth{#1}+\@ne\endcsname
+ {#1}}
+
+\def\fr@ct:trig:i#1#2#3{% <angle> <sine> <cosine>
+ \expandthreenumexprafter\fr@ct:trig:cont{#1}{#2}{#3}\z@}
+
+\def\fr@ct:trig:ii#1#2#3{%
+ \expandthreenumexprafter\fr@ct:trig:cont{#1-\fractfourth}{#3}{-#2}\z@}
+
+\def\fr@ct:trig:iii#1#2#3{%
+ \expandthreenumexprafter\fr@ct:trig:cont{#1-2*\fractfourth}{-#2}{-#3}\z@}
+
+\def\fr@ct:trig:iv#1#2#3{%
+ \expandthreenumexprafter\fr@ct:trig:cont{#1-3*\fractfourth}{-#3}{#2}\z@}
+
+\def\fr@ct:trig:cont#1#2#3#4{% <angle> <sine> <cosine> <index>
+ \ifcase
+ \ifnum#1>0 \ifnum#1<\fr@ct:angle{#4} 0 \else 1 \fi \else 2 \fi
+ \expandafter\fr@ct:trig:cont\expandafter
+ {\number#1\expandafter}\expandafter
+ {\number#2\expandafter}\expandafter
+ {\number#3\expandafter}\expandafter
+ {\number\numexpr#4+\@ne\expandafter}\or
+ \expandafter\fr@ct:trig:cont\expandafter
+ {\number\numexpr#1-\fr@ct:angle{#4}\expandafter}\expandafter
+ {\number\numexpr\fr@ct:mul{#2}{\fr@ct:cos{#4}}%
+ +\fr@ct:mul{#3}{\fr@ct:sin{#4}}\expandafter}\expandafter
+ {\number\numexpr\fr@ct:mul{#3}{\fr@ct:cos{#4}}%
+ -\fr@ct:mul{#2}{\fr@ct:sin{#4}}\expandafter}\expandafter
+ {\number\numexpr#4+\@ne\expandafter}\or
+ \fracttrigend{#2}{#3}\fi}
+
+% ...and finally, execute the next command with two first parameters being
+% scaled sine and cosine.
+
+\def\fracttrigend#1#2\fi#3{\fi#3{#1}{#2}}
+
+\def\fractsincos#1#2#3{\fracttrig{#3}\z@\fractfactor\fr@ct:sin:cos#1#2}
+\def\fr@ct:sin:cos#1#2#3#4{\def#3{#1}\def#4{#2}}
+
+% In pdftrans we use the following shortcuts
+
+\def\fr@ct:sin:cos:i#1#2#3{\fr@ct:trig:i{#3}\z@\fractfactor\fr@ct:sin:cos#1#2}
+\def\fr@ct:sin:cos:ii#1#2#3{\fr@ct:trig:ii{#3}\z@\fractfactor\fr@ct:sin:cos#1#2}
+\def\fr@ct:sin:cos:iii#1#2#3{\fr@ct:trig:iii{#3}\z@\fractfactor\fr@ct:sin:cos#1#2}
+\def\fr@ct:sin:cos:iv#1#2#3{\fr@ct:trig:iv{#3}\z@\fractfactor\fr@ct:sin:cos#1#2}
+
+\def\floatsincos#1#2#3{\fracttrig{#3}\z@\fractfactor\flo@t:sin:c@s#1#2}
+\def\flo@t:sin:c@s#1#2#3#4{%
+ \edef#3{\fr@ct:div{#1}}%
+ \edef#4{\fr@ct:div{#2}}}
+
+\endtrans
+\endinput
diff --git a/macros/generic/petri-nets/COPYING b/macros/generic/petri-nets/COPYING
new file mode 100644
index 0000000000..60549be514
--- /dev/null
+++ b/macros/generic/petri-nets/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/generic/petri-nets/ChangeLog b/macros/generic/petri-nets/ChangeLog
new file mode 100644
index 0000000000..556338e519
--- /dev/null
+++ b/macros/generic/petri-nets/ChangeLog
@@ -0,0 +1,88 @@
+2006-03-02 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndraw.sty: fixed the detection of pdfLaTeX using ifpdf.sty, as
+ suggested by Jesús Cerquides <cerquide@maia.ub.es>
+
+2002-12-06 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndraw.tex: changed the default size of arrowheads.
+ Added macros to save/show nets.
+
+ * pndraw.sty: improved pdfLaTeX support.
+
+ * pn2pdf, pndoc.tex: updated w.r.t. the changes in pndraw.sty
+
+2002-10-14 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndoc.tex: corrected some typos.
+
+2002-10-12 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndoc.tex: updated
+
+ * pndraw.tex: added macro \pst to prefix PSTricks's commands
+
+ * pndraw.sty: included support for pdfLaTeX
+
+2001-11-26 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * the position of round nodes labels now uses the \labelsep
+ parameter.
+
+2001-08-28 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * changed the definition of \choice so it draws a square.
+
+ * added reference pages to the documentation.
+
+2001-06-11 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndraw.tex: ficed a bug on stores when changing \placesize
+ (thanks to André Steenveld).
+
+2001-06-07 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndraw.tex: moved the expansion of \everynet just before the
+ first net commands.
+
+ * pndraw.tex: changed option $ for links to / since $ causes
+ problems.
+
+2001-06-05 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndoc.tex: added a remark about DVI viewers.
+
+ * pndoc.tex: corrected a few typos.
+
+2001-06-04 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndraw.tex: added more options to nodes.
+
+ * pndoc.tex: updated for the new features.
+
+2001-06-02 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * pndraw.tex: added macros \link (\arc becomes a shortcut)
+ \store, \module and \source asked by André Steenveld.
+
+ * pndraw.tex: added macro \nodessize.
+
+2001-06-02 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * bug fixed: pndraw.aux
+ (thanks to Denis Girou)
+
+ * pndoc.tex: added some words about the compatibility with
+ graphics and graphicx packages, corrected some typos.
+ (thanks to Denis Girou)
+
+2001-05-28 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * Released on CTAN
+
+2001-04-01 Franck Pommereau <pommereau@univ-paris12.fr>
+
+ * Added forgotten \Rscope and \Lscope to pntext.sty
+
+2001-03-16 Franck Pommereau <pommereau@univ-paris12.fr>
+ * First release
diff --git a/macros/generic/petri-nets/README b/macros/generic/petri-nets/README
new file mode 100644
index 0000000000..c775039863
--- /dev/null
+++ b/macros/generic/petri-nets/README
@@ -0,0 +1,19 @@
+This is Petri-nets: a set of (La)TeX packages for works about Petri nets
+and related models. Read pndoc.pdf for installation and usage.
+
+ petrinets (C) 1999-2000 Franck Pommereau (pommereau@univ-paris12.fr).
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or any
+later version (see file COPYING).
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
diff --git a/macros/generic/petri-nets/pn2pdf b/macros/generic/petri-nets/pn2pdf
new file mode 100644
index 0000000000..c42f9c38f3
--- /dev/null
+++ b/macros/generic/petri-nets/pn2pdf
@@ -0,0 +1,211 @@
+#!/usr/bin/perl
+
+## This file is part of the Petri-nets packages. See file README for
+## copyright notice.
+
+use strict;
+use Digest::MD5 qw(md5_hex);
+use Getopt::Long;
+
+##
+## read options
+##
+
+Getopt::Long::Configure ("bundling");
+
+my $keep = 0;
+my $force = 0;
+my $verbose = 0;
+
+GetOptions ("k|keep" => \$keep,
+ "f|force" => \$force,
+ "v|verbose" => \$verbose,
+ "t|test" => \&Test,
+ "d|delete" => \&Delete,
+ "b|batch" => \&Batch,
+ "h|help" => \&Help);
+
+&Help if scalar @ARGV > 1;
+
+##
+## Global variables
+##
+
+my $figure = shift @ARGV;
+my $basename = $figure; $basename =~ s/\.pn$//;
+my $jobname = $basename; $jobname =~ s/-fig\d+$//;
+my $data = "";
+my %sum;
+
+##
+## Load checksums
+##
+
+if (-f "$jobname.sum") {
+ open SUM, "$jobname.sum"
+ or &Error ("could not open $jobname.sum -- $!");
+ while (<SUM>) {
+ next unless /^(.+)\s+(.+)$/;
+ $sum{$1} = $2;
+ }
+ close SUM;
+}
+
+##
+## Get preamble
+##
+
+if (-f "$jobname.pre") {
+ # read the existing preamble
+ my @lines;
+ open PRE, "$jobname.pre"
+ or &Error ("could not open $jobname.sum -- $!");
+ @lines = <PRE>;
+ close PRE;
+ $data .= join "", @lines;
+} else {
+ # create a new preamble
+ open TEX, "$jobname.tex"
+ or &Error ("could not open $jobname.tex -- $!");
+ while (<TEX>) {
+ $data .= $_;
+ last if /\\begin\{document\}/;
+ }
+ close TEX;
+ $data =~ s/(\\begin\{document\}).*$/$1\n/;
+ $data .= "\\pagestyle\{empty\}\n";
+ # save it
+ open PRE, ">$jobname.pre"
+ or &Error ("could not create $jobname.sum -- $!");
+ print PRE $data;
+ close PRE;
+}
+
+##
+## Read the figure
+##
+
+{
+ my $pre = 1;
+ open TEX, $figure or &Error ("could not open $figure -- $!");
+ open PRE, ">>$jobname.pre"
+ or &Error ("could not append $jobname.pre -- $!");
+ while (<TEX>) {
+ $pre = 0 if /^\\begin\{petrinet\}/;
+ print PRE if $pre;
+ $data .= $_;
+ }
+ close TEX;
+ close PRE;
+}
+
+##
+## Generate the EPDF
+##
+
+if (&SumChanged ($figure, "$data") or $force or (! -f "$basename.pdf")) {
+ open TEX, ">$basename.tex"
+ or &Error ("could not create file $basename.tex -- $!\n");
+ print TEX "$data\\end\{document\}\n";
+ close TEX;
+ system "latex", "$basename.tex";
+ system "dvips", "-E", "-Ppdf", "-o", "$basename.eps", "$basename";
+ system "epstopdf", "$basename.eps";
+}
+
+unlink ("$basename.tex", "$basename.log", "$basename.aux",
+ "$basename.dvi", "$basename.eps", "$basename.pn") unless $keep;
+
+##
+## Save checksums
+##
+
+open SUM, ">$jobname.sum"
+ or die "pn2pdf: could not create file $jobname.sum -- $!\n";
+foreach my $file (sort keys %sum) {
+ print SUM "$file $sum{$file}\n";
+}
+close SUM;
+
+exit 0;
+
+##
+## Sub programs
+##
+
+sub Help {
+ print <<"EOF";
+Usage: pn2pdf [OPTIONS]
+Create EPDF files for Petri net figures.
+
+ FIGURE process FIGURE
+ -b, --batch FILE process the commands in FILE
+ -k, --keep keep temporary files
+ -f, --force force the rendering of all pictures
+ -t, --test FILES create FILES for test purpose
+ -d, --delete FILES delete FILES (may be patterns)
+ -h, --help display this help and exit
+
+Report bugs to <pommereau\@univ-paris12.fr>
+EOF
+ exit 0; }
+
+sub Error {
+ foreach my $line (@_) {
+ warn "pn2pdf: $line\n";
+ }
+ exit 1;
+}
+
+sub Verbose {
+ return unless $verbose;
+ foreach my $line (@_) {
+ warn "[pn2pdf] $line\n";
+ }
+}
+
+sub SumChanged {
+ my ($file, $lines) = @_;
+ my $md5 = md5_hex ($lines);
+ if ($md5 eq $sum{$file}) {
+ return 0;
+ } else {
+ $sum{$file} = $md5;
+ return 1;
+ }
+}
+
+sub Test {
+ foreach my $file (@ARGV) {
+ open FILE, ">$file" or &Error ("could not create $file -- $!");
+ close FILE;
+ }
+ exit 0;
+}
+
+sub Delete {
+ foreach my $pattern (@ARGV) {
+ unlink glob $pattern unless $keep;
+ }
+ exit 0;
+}
+
+sub Batch {
+ my @lines;
+ foreach my $file (@ARGV) {
+ $file =~ s/(\.[a-z]{3})?$/.bpn/i;
+ open FILE, $file or &Error ("could not open $file -- $!");
+ while (<FILE>) {
+ next unless /^pn2pdf\s/;
+ s/^pn2pdf\s/pn2pdf --keep / if $keep;
+ s/^pn2pdf\s/pn2pdf --force / if $force;
+ s/^pn2pdf\s/pn2pdf --verbose / if $verbose;
+ push @lines, $_;
+ }
+ close FILE;
+ }
+ foreach (@lines) {
+ system $_;
+ }
+ exit 0;
+}
diff --git a/macros/generic/petri-nets/pndoc.pdf b/macros/generic/petri-nets/pndoc.pdf
new file mode 100644
index 0000000000..c5c05bc6e4
--- /dev/null
+++ b/macros/generic/petri-nets/pndoc.pdf
Binary files differ
diff --git a/macros/generic/petri-nets/pndoc.tex b/macros/generic/petri-nets/pndoc.tex
new file mode 100644
index 0000000000..eb75ee734e
--- /dev/null
+++ b/macros/generic/petri-nets/pndoc.tex
@@ -0,0 +1,1234 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\documentclass[11pt]{article}
+
+\usepackage{pnets}
+
+\catcode`\|=\active
+\def|{\verb|}
+
+%%
+%%
+
+\begin{document}
+
+\title{Petri-nets packages}
+\author{Franck Pommereau (pommereau@univ-paris12.fr)}
+\date{Last update: \pnversion}
+\maketitle
+
+\begin{abstract}\noindent
+This paper describes Petri-nets, a set of \TeX/\LaTeX{} packages about
+Petri nets and related models. One package allows to draw Petri-nets
+in PostScript or PDF documents. One other defines macros related to
+PBC, M-nets and \bpn{} models. A last package just gathers together
+the two previous.
+\end{abstract}
+
+\begin{small}
+\tableofcontents
+\end{small}
+
+%%
+%%
+
+\section{Introduction}
+
+Petri-nets is a set of packages which I use to write my papers about
+Petri nets and related models (essentially: PBC, M-nets and \bpn). It
+features three packages: one for drawing net, one other which defines
+additional macros for textual purpose (like the name ``\bpn'') and a
+last one for both purposes. The first package has been designed with a
+precise goal: saving me a lot of work when I have to draw nets. This
+goal explains some choices I did: typesetting labels in math mode by
+default, ending commands with the line, etc. I feel this results in an
+intuitive and high-level way to define Petri nets, but if you have
+ideas to improve this, don't hesitate to contact me. The text command
+package is more classical and if it saves also a lot of typing, its
+main goal is to ensure uniform notations.
+
+All these packages may evolve and grow up and if you (or I) feel that
+a feature is missing, you can send me an e-mail explaining your needs
+(\TeX{} code is welcome too). Notice that I don't pretend being a
+specialist in Petri nets and I'm only used to work on three or four
+models; so I may ignore particular things in particular models. This
+may explain some missing features.
+
+%%
+%%
+
+\subsection{Installation}
+
+The last version of the package may be downloaded on the web at the
+URL {\it http:/\slash www.univ-paris12.fr\slash lacl\slash
+pommereau\slash petrinets.tar.gz\/}, a copy should be available on
+{\it CTAN\slash macros\slash generic\slash petri-nets}; the
+distribution contains the following files:
+
+\begin{itemize}
+\item |pnets.tex| is the main \TeX{} package;
+\item |pnets.sty| is its \LaTeX{} counterpart;
+\item |pndraw.tex| and |pndraw.sty| are the \TeX{} and \LaTeX{}
+ sub-packages for drawing nets;
+\item |pntext.tex| and |pntext.sty| are the \TeX{} and \LaTeX{}
+ sub-packages for text commands;
+\item |pnversion.tex| defines macro |\pnversion|;
+\item |pndoc.ps|, |pndoc.pdf| and |pndoc.tex| are the present paper
+ and its source;
+\item |COPYING| is the text of the GNU GPL;
+\item |ChangeLog| collects all changes done to Petri-nets;
+\item |README| is a short introduction text;
+\item |pn2pdf| is a Perl script used to produce PDF files with
+ pdf\LaTeX.
+\end{itemize}
+
+In order to have Petri-nets working, you need to copy files |pnets.*|,
+|pndraw.*|, |pntext.*| and |pnversion.tex| in a place where \TeX{}
+will be able to find them. This can be somewhere in the default search
+path (see your local \TeX{} documentation) or in a directory included
+in your |TEXINPUT| environment variable.
+
+Packages from Petri-nets have been developed and tested with
+te\TeX-1.0.2 for Linux. \TeX{} packages should work with any \TeX{}
+version greater than or equal to 3 (my version is 3.14159, Web2C
+7.3.7). \LaTeX{} packages have been designed for \LaTeX$2_\varepsilon$
+so you may experiment troubles with an older version.
+
+In order to typeset symbols for classical sets of numbers (\setN,
+\setR, etc.) Petri-nets uses fonts from AMS. So you must have package
+|amsfonts| installed for \LaTeX{} or fonts |bbm| for \TeX{} (I think
+these conditions are more or less equivalent).
+
+The drawing basis are provided by package PSTricks, my version is
+PST97 but I used only macros described in the manual of version 0.93a
+so I hope it should work with it.
+
+Using PSTricks has an important consequence: actual drawings are done
+in PostScript, so, you may not see them directly from the DVI viewer
+(at least not correctly); additionally, you must use a PostScript
+driver in order to produce your final document (for example, dvips
+works well). Some support to produce PDF documents with pdf{\LaTeX} is
+provided (see section~\ref{sec:pdf}).
+
+PSTricks conflicts with packages |color|, |graphics| and |graphicx|,
+Petri-nets thus inherits this conflict. If you wish to use them
+together, you should first load package |pstcol|, then Petri-nets and
+at last, |color|, |graphics| or |graphicx|. The following is quoted
+from PSTricks' |README|:
+
+\begin{quote}
+To use the standard `|color|' package (which is available both for
+plain \TeX{} and \LaTeX) with PSTricks, you must load the `|pstcol|'
+extra package written by David Carlisle, which interface the two
+packages, loading them in the right order, and overriding some small
+parts of PSTricks to allow it to use the `|color|' package system for
+specifying color. We {\it strongly\/} recommend that you use this way
+today.
+
+\LaTeX{} users must also take care that the `|pstcol|' package is
+required in place of the `|pstricks|' one if the `|graphics|' or
+`|graphicx|' package is also loaded.
+\end{quote}
+
+If you wish to produce PDF files using pdf{\LaTeX}, you also need to
+copy the script |pn2pdf| in a directory from which it can be executed.
+This script requires a working Perl with the packages |Digest::MD5|
+and |Getopt::Long| installed. Moreover, the script calls the following
+programs: |latex|, |dvips| and |epstopdf| which must be installed on
+your system (there should be not problem for the first two). In order
+to include the PDF pictures, the package |graphicx| is used (in this
+case, it does not lead to any conflict since PSTricks is not loaded
+when running pdf\LaTeX). Finally, the package |ifpdf| is used to
+detect whether a document is compiled using \LaTeX{} or pdf\LaTeX.
+This package should be thus installed.
+
+You can test your installation by recompiling the present manual which
+is written in \LaTeX. If it compiles successfully, this means that
+Petri-nets and PSTricks have been found by \TeX. If one file is not
+found, \TeX{} will complain, giving the file name. Then, running dvips
+will ensure that the PostScript headers of PSTricks can be found. You
+may also test the PDF support by producing the PDF version of this
+manual, see section~\ref{sec:pdf} for the way to proceed.
+
+If you successfully use Petri-nets under another configuration, feel
+free to send me an e-mail at {\it pommereau@univ-paris12.fr}. You may
+also send bug reports or comments, they are welcome. Of course, bug
+fixes are welcome too.
+
+%%
+%%
+
+\subsection{Loading the packages}
+
+From \TeX, you can load the package with |\input pnets|, from \LaTeX,
+you should put |\usepackage{pnets}| in the preamble of your document.
+Since you may want to use only the drawing macros, you can use
+|\input pndraw| or from \LaTeX: |\usepackage{pndraw}|. Similarly, in
+order to load only text commands, you can use |\input pntext| or
+|\usepackage{pntext}|.
+
+Both packages define a macro |\pnversion| which gives the date of the
+last update of the package. The date is given as a triple of numbers
+of the form |year-month-day|.
+
+%%
+%%
+
+\subsection{Things to do, known bugs and problems}
+
+In order to draw additional labels at the right position, |pndraw| has
+to perform some time consuming floating point computing. I plane in
+the future to perform this directly in PostScript, in order to speed-up
+\TeX{} compilation stage.
+
+Only transitions are allowed to change their size according to their
+inner label, it may be nice to have this feature for the other
+nodes. But it's may be a little bit difficult or quite ugly for some
+nodes.
+
+I also could add looping arcs. This is useless for Petri nets but it
+would allow one to use the packages for other purposes, like drawing
+automata.
+
+The PDf pictures are clipped to the bounding box of the corresponding
+net. I've seen on the newsgroups that there exists a solution, but it
+was written in German which I can't read.
+
+When one looks at a PDF document using Acrobat Reader, small blur
+points appear at the top-right and bottom-left corners of the Petri
+nets. This comes from two white points added in order to force dvips
+to produce the right bounding box when a net is generated alone in an
+EPS file. So, this is a bug of Acrobat Reader rather than one of
+Petri-nets.
+
+In a late future, I'd like to make the package independent of
+PSTricks, so it would be more portable (but maybe less powerful).
+
+%%
+%%
+
+\subsection{Legal stuff}
+
+Petri-nets is {\copyright} 2002 Franck Pommereau ({\it
+pommereau@univ-paris12.fr\/}).
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the {\it GNU General Public License\/} as
+published by the Free Software Foundation; either version 2 of the
+License, or any later version (see file |COPYING|).
+
+This program is distributed in the hope that it will be useful, but
+{\it without any warranty\/}; without even the implied warranty of
+{\it merchantability\/} or {\it fitness for a particular purpose}.
+See the {\it GNU General Public License\/} for more details.
+
+You should have received a copy of the {\it GNU General Public
+License\/} along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+%%
+%%
+
+\subsection{Contributors}
+
+I am very grateful to all the persons who contributed to my work, in
+particular:
+
+\begin{quote}
+Denis Girou,
+Hanna Klaudel,
+Andr\'e Steenveld.
+\end{quote}
+
+%%
+%%
+
+\section{Text commands: package {\tt pntext}}
+
+This section lists the commands defined in package |pntext|, they are
+all available from \TeX{} as well as from \LaTeX.
+
+\paragraph{Math sets.}
+%
+Command |\mathset{A}| produces symbol \mathset{A} (and of course it
+works for any text). Shortcuts are defined: |\setN| for |\mathset{N}|
+and similarly for |\setZ|, |\setQ|, |\setR| and |\setC|.
+
+\paragraph{Status of places.}
+%
+Commands |\iplace|, |\eplace| and |\xplace| produce respectively
+characters \iplace, \eplace{} and \xplace. Command |\placestatus{n}|
+typesets character \placestatus{n} (in the case you would like a new
+place type).
+
+\paragraph{Operators for communication.}
+%
+Synchronization operator (\sy) is available through command |\sy|, in
+math mode, this command is surrounded by additional white space as
+usual for binary operators. Similar operators are |\rs| for
+restriction and |\tie| for asynchronous links. Scoping is available
+with commands |\lscope| and |\rscope| which produce respectively a
+left and a right double bracket, you may also use |\scope{A}{N}| to
+produce \scope{A}{N}.
+
+If you use |\lscope| (resp. |\rscope|) without the corresponding
+|\rscope| (resp. |\lscope|) in the same equation or array cell, \TeX{}
+will complain about some missing |\right| (resp. |\left|). In order to
+close (resp. open) a scope without drawing the bracket, you may use
+macro |\Rscope| (resp. |\Lscope|).
+
+\paragraph{Choice.}
+%
+Choice operator \choice{} is produced with command |\choice|. In math
+mode, it behaves like any binary operator.
+
+\paragraph{\bpn.}
+%
+The logo of \bpn{} is typeset using command |\bpn|. A \bpn{} keyword
+(say \bpnkw{program}) is typeset with |\bpnkw{program}| and for a
+non-terminal in the syntax (say \bpnnt{scope}) you may use
+|\bpnnt{scope}|. Function \mnet{} is defined as |\mnet|.
+
+\paragraph{Sets of values and variables.}
+%
+\Var{} and \Val{} are typeset using commands |\Var| and |\Val|. They
+are better to use than directly the text they typeset because they
+adjust their spacing in math mode: compare ``$Var$'' with ``$\Var$''.
+
+\paragraph{To be continued\dots}
+
+%%
+%%
+
+\section{Drawing nets: package {\tt pndraw}}
+
+%%
+%%
+
+\subsection{Some words about PSTricks}
+
+Reading PSTricks manual could be a good idea, but if you don't want
+to, you should know a few things about it in order to use Petri-nets
+successfully.
+
+In PSTricks, any point is designated by two coordinates in a grid,
+centered on a reference point which has coordinates $(0,0)$. The
+figure~\ref{axis} shows an example.
+
+\begin{figure}[t]
+\begin{center}
+\begin{petrinet}(-1.5,-1.5)(5.5,3.5)
+\pst\psgrid[subgriddiv=1,griddots=10](-1,-1)(5,3)
+\pst\psline{->}(0,-1.5)(0,3.5)
+\pst\psline{->}(-1.5,0)(5.5,0)
+\pst\psdot(4,2)
+\pst\rput[br](4,2){$(4,2)$}
+\pst\psdot(0,0)
+\pst\rput[br](0,0){$(0,0)$}
+\pst\psdot(2.5,-.5)
+\pst\rput[l](2.5,-.5){$\,(2.5,-.5)$}
+\end{petrinet}
+\end{center}
+\caption{The Cartesian coordinate system.}
+\label{axis}
+\end{figure}
+
+The distance from the origin $(0,0)$ to a point $(x,y)$ depends on
+three parameters. |units| is a global scale, if |unit=1.2cm|, $(4,2)$
+becomes an abbreviation for $(4 \times 1.2\hbox{ cm}, 2 \times
+1.2\hbox{ cm})$. There's also |xunit| and |yunit| which act
+respectively only on horizontal or vertical scale; for example, if
+|xunit=20pt| and |yunit=1in|, $(4,2)$ stands for $(4 \times 20\hbox{
+pt}, 2 \times 1\hbox{ in})$. As you can see on these short examples,
+|unit|, |xunit| and |yunit| can be affected any value which is a valid
+\TeX{} |dimen| (or \LaTeX{} length).
+
+The default value for all these three parameters is 1~cm; to change
+it, you can use the |\psset| command as in |\psset{unit=.5cm}| or in a
+combined way as in |\psset{xunit=1cm,yunit=2cm}|.
+
+Since coordinates are formed as a comma separated couple of numbers,
+you {\it must not\/} use comma as decimal separator here: |(4.5,2.3)|
+is correct but |(4,5,2,3)| is not.
+
+Sometime you'll be asked to give an angle value as a macro parameter.
+In Petri-nets, angles are measured in degrees; they can be given as a
+numerical value or with a one/two letter(s) code as shown in the
+figure~\ref{angles}. Of course, when you specify an angle by its
+numerical value, you can use any number, even negative, and not only
+one of the eight values shown on figure~\ref{angles}.
+
+\begin{figure}[t]
+\begin{center}
+\begin{petrinet}[unit=2cm](-2,-1.3)(2,1.3)
+\pst\pscircle(0,0){1}%
+{\count0=0 %
+ \loop %
+ \ifnum\count0<360 %
+ \uput{.95}[\the\count0]{\the\count0}(0,0){\bf--}%
+ \advance\count0 by 45 %
+ \repeat}
+\pst\uput{1.1}[0](0,0){$0=r$}
+\pst\uput{1.1}[45](0,0){$45=tr/rt$}
+\pst\uput{1.1}[90](0,0){$90=t$}
+\pst\uput{1.1}[135](0,0){$135=tl/lt$}
+\pst\uput{1.1}[180](0,0){$180=l$}
+\pst\uput{1.1}[225](0,0){$225=bl/lb$}
+\pst\uput{1.1}[270](0,0){$270=b$}
+\pst\uput{1.1}[315](0,0){$315=br/rb$}
+\end{petrinet}
+\caption{Translation from angle values to letter code. $r$ is for {\it
+right}, $t$ for {\it top}, $l$ for {\it left\/} and $b$ for {\it
+bottom}.}
+\label{angles}
+\end{center}
+\end{figure}
+
+The macro |\psset| is used to change PSTricks default parameters, it
+takes one argument which is a comma-separated list of |name=value|
+pairs. For example, |pndraw.tex| itself uses:
+%
+\begin{verbatim}
+\psset{linewidth=.5pt,
+ doublesep=.5pt,
+ labelsep=2pt}
+\end{verbatim}
+
+As you can see, blank spaces before a |name| are ignored. You already
+know how to change units, some additional |name|s should be useful for
+Petri-nets:
+
+\begin{itemize}
+\item |linewidth| is the default width for {\it any\/} line drawn by
+ PSTricks;
+\item |doubleline| can be |true| or |false|, when set to |true|, any
+ line drawn is doubled;
+\item |doublesep| is the distance between the two lines of a doubled
+ line;
+\item |labelsep| is the distance between an arc and its label(s);
+\item |linecolor| is the color used to draw lines, it can be, for
+ example, |black|, |darkgray|, |gray|, |lightgray|, |white|,
+ |red|, |blue|, |green|, |cyan|, |magenta| or |yellow|;
+\item |fillcolor| is the color used to fill shapes; you can use for it
+ the same colors as for |linecolor|.
+\end{itemize}
+
+PSTricks recognizes many other parameters and you should refer to its
+manual for all the details.
+
+%%
+%%
+
+\subsection{Beginning and ending nets}
+
+To begin a net, just type |\beginnet| for \TeX{} or |\begin{petrinet}|
+under \LaTeX; both this commands are expecting two pairs of
+coordinates to give the bottom-left and up-right extrema of the net.
+
+For example, |\begin{petrinet}(-1,-2)(5,3)| starts a net which should
+extend in the rectangular area, which we call the {\it bounding box},
+delimited by $(-1,-2)$ at the lower left corner and $(5,3)$ at the
+upper right. These coordinates are sensitive to current values of
+|unit|, |xunit| and |yunit|.
+
+The real effect of these two pairs is to fix the size of the bounding
+box which carry the net drawn (it is actually a |\hbox| set in
+horizontal mode but who cares?). If some parts of the net extends
+outside of the declared bounding box, it will be drawn outside and
+that's all. In other words, the bounding box announced just reserves
+room for the net and the drawing itself is invisible to \TeX. This
+allows you to lies about the real dimension of your drawings: you can
+declare a bigger or a smaller bounding box, if you want more or less
+white space around your nets. This behaviour is different when running
+pdf\LaTeX, see the section~\ref{sec:pdf} for details.
+
+Before to give the coordinates of the bounding box for a net, you can
+give optional parameters inside square brackets. These parameters are
+interpreted as PSTricks options which are applied to the following net
+and stay local to it. For example, if we have |unit=1cm| before
+starting a net, command |\begin{petrinet}[unit=2cm](0,0)(1,1)| starts
+a net with |unit=2cm| for its bounding box and any coordinate given
+inside the net. But as the net ends, the previous value of |unit| is
+restored.
+
+In order to have bounding boxes drawn in your nets: you may use
+command |\showbb|, optionally followed by bracketed options. For the
+figure~\ref{fig:nodes example}, I added |\showbb| at the beginning of
+the net. The starred version of |\showbb| fills the background and so,
+command |\showbb*[fillcolor=red]| draws a filled red rectangle over
+the bounding box.
+
+To end the drawing, you should use |\endnet| or |\end{petrinet}| (did
+you guess?). All macros between these two ones are interpreted as
+PSTricks or Petri-nets commands. In the following, we call a {\it
+net\/} all the stuff inclosed between |\begin{petrinet}| and
+|\end{petrinet}| (if you use \LaTeX). One point has to be remembered:
+inside a net, the end of line has a special meaning because it is used
+to end most Petri-nets drawing commands. So if you want to use
+commands spread over several lines, you have to end every line but the
+last with a comment (|%|). Also notice that if you call the |\psset|
+command inside a net, its effect will remain local to this particular
+net.
+
+If you wish something to be done every time a net begins, you may set
+token list |\everynet| to what you want to be inserted between command
+|\begin{petrinet}| and your drawing commands. For example, with
+|\everynet={\small}|, all the following nets will be set in small
+types.
+
+Except for beginning and ending nets, all the macros are the same
+under \TeX{} or \LaTeX.
+
+%%
+%%
+
+\subsection{Drawing nodes}
+
+The available node shapes are places, transitions, modules, sources
+and stores, which are drawn in figure~\ref{fig:nodes}. They are
+produced with the macros |\place|, |\trans|, |\module|, |\source| and
+|\store| respectively. Their size is controlled with the dimensions
+|\placesize|, |\transsize|, |\modulesize|, |\sourcesize| and
+|\storesize| respectively. For instance, |\transsize=8mm| sets the
+size of transitions to |8mm|; |\nodessize{5mm}| sets the size of {\it
+all\/} the nodes to |5mm|.
+
+\begin{figure}
+\begin{center}
+\begin{petrinet}[xunit=2cm](-.5,-.5)(4.5,1)
+\place{place}(0,0) p
+\label"{t}place\strut
+\trans{trans}(1,0) t
+\label"{t}transition\strut
+\module{module}(2,0) m
+\label"{t}module\strut
+\source{source}(3,0) s
+\label"{t}source\strut
+\store{store}(4,0) labels are ignored for stores
+\label"{t}store\strut
+\end{petrinet}
+\end{center}
+\caption{The nodes available in Petri-nets.}
+\label{fig:nodes}
+\end{figure}
+
+Creating a node is possible using the command
+``node\{name\}$(x,y)$label'' where:
+%
+\begin{itemize}
+\item ``node'' is one of the above node commands;
+\item ``name'' is the name of this node which should be unique for a
+ given net (if not, the new node overwrites the old one). This
+ name is case sensitive and should not contain any special
+ characters (as |$|, |\|, etc.); %$
+\item ``$(x,y)$'' are the coordinates of the node's center;
+\item ``label'' is the text to typeset inside the node, it
+ extends until the end of the line. This label is silently
+ discarded for stores.
+\end{itemize}
+
+For instance, the nodes in figure~\ref{fig:nodes} where drawn with the
+commands:
+%
+\begin{verbatim}
+\place{place}(0,0) p
+\trans{trans}(1,0) t
+\module{module}(2,0) m
+\source{source}(3,0) s
+\store{store}(4,0) labels are ignored for stores
+\end{verbatim}
+
+By default, labels are typeset in math mode, if you wish a label
+typeset in text mode, add option |"| after the node command. Notice
+that any space after the coordinates of the node is part of the label,
+it has no importance in math mode but in text mode it leads to a label
+which starts with a white space. Option |=| sets double-line mode and
+so the node is drawn with doubled lines. Option |!| sets the line
+width to 2pt so the node appears thicker than usually. PSTricks
+options may be given between square brackets, for instance adding
+|[linecolor=red,linewidth=1pt]| leads to a red node with 1pt lines.
+
+For transitions, an additional option |*| may be used in order to have
+the boundaries of the transition adjusted to the label typeset inside.
+By default, the size of a node is fixed and the label overlaps outside
+if too long, for transitions with option |*|, the size is just fine.
+
+\subsubsection{Additional labels}
+
+You can give additional outer labels to a node. Each label is typeset
+using the macro%
+%
+\footnote{For \LaTeX, this means that the well known cross-referencing
+macro {\tt\string\label} is not available inside a {\tt petrinet}
+environment. But outside, it works as usual.}
+%
+|\label| which has two arguments: the first is an angle indication and
+the second, which extends until the end of the line, is the text to
+typeset. The angle indication is a numeric value or a code as
+explained earlier. Option |"| explained above is also available for
+additional labels (and should be given just after |\label|).
+
+Before I give an example, let me explain a useful parameter for
+typesetting label: the token list |\everylabel| is expanded before any
+label is typeset. For example, command |\everylabel={\scriptstyle}|
+leads to typeset all the following labels in script style. This works
+for really any label, not only for nodes labels. If |\everylabel| is
+set inside a net, its effect will remain local to this net.
+
+The figure~\ref{fig:nodes example} has been typeset using the
+following commands:
+%
+\begin{verbatim}
+\begin{petrinet}[xunit=2cm](-.5,-.5)(2.5,.5)
+\showbb
+\place{p1}(0,0) \bullet
+\trans*="{t}(1,0)~transition~
+ \label"{70}more text
+\place!{p2}(2,0)
+ \label{r} \left\{ % I can type multi-line
+ {\textstyle 1, 2, 3 \atop % labels, thanks to comments.
+ \textstyle 4, 5, 6} \right\}
+\end{petrinet}
+\end{verbatim}
+
+\begin{figure}
+\begin{center}
+\begin{petrinet}[xunit=2cm](-.5,-.5)(2.5,.5)
+\showbb
+\place{p1}(0,0) \bullet
+\trans*="{t}(1,0)~transition~
+ \label"{70}more text
+\place!{p2}(2,0)
+ \label{r} \left\{ % I can type multi-line
+ {\textstyle 1, 2, 3 \atop % labels, thanks to comments.
+ \textstyle 4, 5, 6} \right\}
+\end{petrinet}
+\caption{Example of nodes. In the PDF, nets is clipped to its bounding
+ box, see section~\ref{sec:pdf}. }
+\label{fig:nodes example}
+\end{center}
+\end{figure}
+
+You may notice that the net is not well centered, it extends more on
+the right. This is because I declared a bounding box of $(-.5,-.5)$ to
+$(2.5,.5)$ while in fact, the label of the right-most place extends on
+the right, outside of the bounding box (which is made visible by the
+macro |\showbb|).
+
+%%
+%%
+
+\subsubsection{Free text}
+
+Another kind of node is unboxed text. The macro |\text| is similar to
+|\trans*| but without border. Like for other nodes, the text is
+typeset in math mode and it can be added outer labels with the macro
+|\label|.
+
+This macro knows only the option |"| which has the usual meaning.
+
+%%
+%%
+
+\subsection{Linking nodes}
+
+You can draw links between two arbitrary nodes. The package won't
+check if requested links are valid from Petri nets point of view, so
+you can draw an arc between two places for instance. Basically, macro
+|\link| has three parameters: the name of the starting node, that of
+the ending node, and the text to typeset on the link (which extends
+until the end of the line). You can add optional parameters, before
+the first node name:
+%
+\begin{itemize}
+\item options inside square brackets are PSTricks options, as usual;
+\item a real number, between 0 and 1, enclosed in angle brackets ({\it
+ e.g.}, |<.3>|) can be used to specify the position of the label,
+ between starting and ending nodes. Value 0 stands for ``on
+ the starting node'' while 1 means ``on the ending node''; the
+ default value is $.5$ ({\it i.e.}, on the middle of the link);
+\item the characters |^|, |_| or |*| may be used to specify the side of
+ the link where the label is typeset. For an link which extends
+ from the left to the right, |^| means ``above'', |_| means
+ ``below'' and |*| means ``over''. If nothing is specified, the
+ label is placed above the link;
+\item the options |"|, |=| and |!| have their usual meanings;
+\item arrowheads and such can be specified between two signs |/|.
+ The available values are shown in the figure~\ref{fig:arrows},
+ default is no arrow.
+\end{itemize}
+
+\begin{figure}
+\begin{center}
+\catcode`\|=12
+\begin{petrinet}[yunit=6mm](-.6,-.3)(8,15.3)
+\pst\catcode`\|=12
+\text{caption}(3,15)\rlap{none (default)}
+ \text"{t}(0,15){\tt -}
+ \text{l}(1,15)
+ \text{r}(2,15)
+ \link/-/{l}{r}
+\text{caption}(3,14)\rlap{arrowheads}
+ \text"{t}(0,14){\tt <->}
+ \text{l}(1,14)
+ \text{r}(2,14)
+ \link/<->/{l}{r}
+\text{caption}(3,13)\rlap{reverse arrowheads}
+ \text"{t}(0,13){\tt >-<}
+ \text{l}(1,13)
+ \text{r}(2,13)
+ \link/>-</{l}{r}
+\text{caption}(3,12)\rlap{double arrowheads}
+ \text"{t}(0,12){\tt <{}<->{}>}
+ \text{l}(1,12)
+ \text{r}(2,12)
+ \link/<<->>/{l}{r}
+\text{caption}(3,11)\rlap{reverse double arrowheads}
+ \text"{t}(0,11){\tt >{}>-<{}<}
+ \text{l}(1,11)
+ \text{r}(2,11)
+ \link/>>-<</{l}{r}
+\text{caption}(3,10)\rlap{T-bar flush to endpoints}
+ \text"{t}(0,10){\tt |-|}
+ \text{l}(1,10)
+ \text{r}(2,10)
+ \link/|-|/{l}{r}
+\text{caption}(3,9)\rlap{T-bar centred on endpoints}
+ \text"{t}(0,9){\tt |*-|*}
+ \text{l}(1,9)
+ \text{r}(2,9)
+ \link/|*-|*/{l}{r}
+\text{caption}(3,8)\rlap{square brackets}
+ \text"{t}(0,8){\tt [-]}
+ \text{l}(1,8)
+ \text{r}(2,8)
+ \link/[-]/{l}{r}
+\text{caption}(3,7)\rlap{rounded brackets}
+ \text"{t}(0,7){\tt (-)}
+ \text{l}(1,7)
+ \text{r}(2,7)
+ \link/(-)/{l}{r}
+\text{caption}(3,6)\rlap{circles centred on endpoints}
+ \text"{t}(0,6){\tt o-o}
+ \text{l}(1,6)
+ \text{r}(2,6)
+ \link/o-o/{l}{r}
+\text{caption}(3,5)\rlap{circles flush to endpoints}
+ \text"{t}(0,5){\tt oo-oo}
+ \text{l}(1,5)
+ \text{r}(2,5)
+ \link/oo-oo/{l}{r}
+\text{caption}(3,4)\rlap{disks centred on endpoints}
+ \text"{t}(0,4){\tt *-*}
+ \text{l}(1,4)
+ \text{r}(2,4)
+ \link/*-*/{l}{r}
+\text{caption}(3,3)\rlap{disks flush to endpoints}
+ \text"{t}(0,3){\tt **-**}
+ \text{l}(1,3)
+ \text{r}(2,3)
+ \link/**-**/{l}{r}
+\text{caption}(3,2)\rlap{extended rounded ends}
+ \text"{t}(0,2){\tt c-c}
+ \text{l}(1,2)
+ \text{r}(2,2)
+ \link/c-c/{l}{r}
+\text{caption}(3,1)\rlap{flush rounded ends}
+ \text"{t}(0,1){\tt cc-cc}
+ \text{l}(1,1)
+ \text{r}(2,1)
+ \link/cc-cc/{l}{r}
+\text{caption}(3,0)\rlap{extended square ends}
+ \text"{t}(0,0){\tt C-C}
+ \text{l}(1,0)
+ \text{r}(2,0)
+ \link/C-C/{l}{r}
+\end{petrinet}
+\end{center}
+\caption{The different types of links termination. They can be freely
+mixed.}
+\label{fig:arrows}
+\end{figure}
+
+The order in which you use these options has no importance, provided
+that all options are given before the starting node. Additionally, if
+you use contradicting options, only the last used is taken into
+account. For instance, the two following lines are equivalent:
+
+|\link_[linecolor=gray,linewidth=5pt]*<.2>^[linewidth=1pt]|
+
+|\link^<.2>[linecolor=gray,linewidth=1pt]|.
+
+To draw curved links, you should use PSTricks' |arcangle| option which
+is an angle in degrees (you cannot use a letter code here), measuring
+the deviation from a straight line between nodes, at the starting and
+at the ending of the link. Try, it's easy.
+
+To change the appearance of the arrowhead, you must change PSTricks'
+parameters |arrowsize|, |arrowlength| and |arrowinset|. Petri-nets
+uses the following:
+%
+\begin{verbatim}
+\psset{arrowlength=1.4,
+ arrowinset=0,
+ arrowsize=2pt 2}
+\end{verbatim}
+%
+I wont explain how it works, just try, it's easy too. (Or read the
+manual of PSTricks where all the details are given.)
+
+%%
+%%
+
+\subsubsection{Additional labels}
+
+Like for nodes, links can be added more labels. This is also made with
+the macro |\label|, but here, its syntax is like for the macro
+|\link|, except that you must not specify the starting and ending
+nodes (but the options of |\link| are available).
+
+%%
+%%
+
+\subsubsection{Arcs}
+
+Since links are almost always draw with a single arrowhead at the end
+(and then called {\it arcs\/}), a shortcut is provided: the macro
+|\arc| may be used instead of |\link/->/|.
+
+%%
+%%
+
+\section{Tips, tricks and troubleshooting}
+
+\paragraph{Nets as macro arguments.}
+%
+If you try to define a net inside the argument of a macro, you will
+have an error. For instance, the code
+%
+\begin{verbatim}
+\centerline{\begin{petrinet}(0,0)(1,1)
+\place{p}(0,0) p
+\trans{t}(1,1) t
+\arc{p}{t}
+\arc{t}{p}
+\end{petrinet}}
+\end{verbatim}
+%
+produces an error such as:
+%
+\begin{verbatim}
+! Argument of \net:place:draw has an extra }.
+<inserted text>
+ \par
+l.11 \end{petrinet}}
+\end{verbatim}
+
+The reason is that the macro |\centerline| reads all the net and treat
+the end of lines as spaces. Similar things occur with the other
+characters which are considered in a special way inside nets. The
+right way to produce the desired effect is to use the macro
+|\savenet|:
+%
+\begin{verbatim}
+\savenet
+\begin{petrinet}(0,0)(1,1)
+\place{p}(0,0) p
+\trans{t}(1,1) t
+\arc{p}{t}
+\arc{t}{p}
+\end{petrinet}
+\centerline{\shownet}
+\end{verbatim}
+%
+the form |\savenet\begin{petrinet}| works as well and from plain
+{\TeX} you should use the form |\savenet\beginnet|. After one
+|\savenet| you may even use |\shownet| several times in order to
+duplicate the saved net.
+
+\paragraph{Error messages.}
+%
+Sometimes, you'll get an error message such as:
+
+\begin{verbatim}
+! Argument of \net:place:draw has an extra }.
+<inserted text>
+ \par
+l.785 \place{i3}(2,0) i_3
+
+?
+\end{verbatim}
+
+This usually means that the error was just before the line for which
+\TeX{} complains (here line 785 which is correct). And usually, this
+error is an omission of one of the arguments of a drawing macro.
+
+Another kind of message occurs quite often:
+
+\begin{verbatim}
+PSTricks error. See User's Guide for further information.
+ Type H <return> for immediate help.
+! Graphics parameter `rcangle' not defined..
+\@pstrickserr ... immediate help.}\errmessage {#1}
+ \endgroup
+l.794 \arc[rcangle=30]
+ {ab2}{i3} \bullet
+?
+\end{verbatim}
+
+This is because on line 794, you misspelled the word ``arcangle'',
+giving ``rcangle'' instead. This error is detected by PSTricks since
+bracketed arguments are sent verbatim to it.
+
+In general, since the package |pndraw| uses a lot of tricks in order
+to read the arguments of the commands, you should not trust too much
+the error messages: just look at the line indicated in the message and
+seek for a mistake in it or in the lines before. (Actually, this
+advice can be used for almost any error message issued by \LaTeX\dots)
+
+\paragraph{Drawing commands on multiple lines.}
+%
+Inside a net, label arguments are delimited by the end of the line. To
+type an argument which extends on more than one line, you should end
+each line but the last with a comment~|%|.
+
+\paragraph{Empty node.}
+%
+If you want to draw ``floating'' arcs, {\it i.e.}, arcs wich are not
+attached to a place or a transition, you just can anchor them on empty
+texts: the following net is depicted in the figure~\ref{empty text}.
+
+\begin{verbatim}
+\begin{petrinet}(0,0)(2,0)
+\text{from}(0,0)
+\text{to}(2,0)
+\arc{from}{to}
+\end{petrinet}
+\end{verbatim}
+
+\begin{figure}[t]
+\begin{center}
+\begin{petrinet}(-.2,-.2)(2.2,.2)
+\text{from}(0,0)
+\text{to}(2,0)
+\arc{from}{to}
+\end{petrinet}
+\end{center}
+\caption{An arc anchored on empty texts}
+\label{empty text}
+\end{figure}
+
+\paragraph{Text mode labels.}
+%
+Take care of the interaction between |\everylabel| and the option |"|
+which typesets a label in text mode. For example, setting
+|\everylabel{\scriptstyle}| leads to an error every time a text mode
+label is typeset because |\scriptstyle| is a math command. So you
+should prefer the longer but safer form: |\everylabel{\ifmmode|\hskip
+0pt|\scriptstyle|\hskip 0pt|\else|\hskip 0pt|\scriptsize|\hskip
+0pt|\fi}|.
+
+\paragraph{Labels at the wrong position.}
+%
+If the additional labels of a node appear centered on it instead of
+outside, this may come from the way you visualize your document. DVI
+viewers usually do not interpret correctly all of the PostScript
+commands used by PSTricks. Trying a PostScript viewer (GhostView is
+certainly a good choice) may solve your problem.
+
+\paragraph{To be continued\dots}
+
+%%
+%%
+
+\section{Producing PDF documents}
+\label{sec:pdf}
+
+The {\LaTeX} version of |pndraw| provides some support for pdf{\LaTeX}
+through the Perl script |pn2pdf| included in the archive. The usage is
+quite automated, even completely if you run |pdflatex| with the option
+|--shell|. If you don't want to enable this option, run first
+|pdflatex|, then run |pn2pdf| |-b| |document| (assuming your file is
+called |document.tex|) and finally run |pdflatex| again.\footnote{This
+process was different in the previous version of the package!} Using
+the option |--shell| simply allows |pdflatex| to run |pn2pdf| for you.
+
+Several files are produced by these different runs. You may never see
+most of them since they are deleted when the become useless. {\it Take
+care that none of your files uses one of these names otherwise it will
+be overwrote or deleted!}
+%
+\begin{itemize}
+\item |document.sum| is used to remember some information in order
+ to avoid recreating pictures if not necessary.
+\item |document.|$d$ is created and deleted for test purpose when the
+ option |--shell| has been used, $d$ is the date when |pdflatex|
+ was started, as produced by the macros
+ |\the\year\the\month\the\day\the\time| (in the current document,
+ it leads to \the\year\the\month\the\day\the\time).
+\item |document.bpn| is created when |pdflatex| is run without the
+ option |--shell|, it contains the directives for producing the
+ figures with |pn2pdf -b|.
+\item |document.pre| is used by |pn2pdf| in order to remember the
+ commands (like |\psset|) issued outside of |petrinets|
+ environments.
+\item |document-fig|$n$|.pn|, |document-fig|$n$|.tex|,
+ |document-fig|$n$|.aux|,\\ |document-fig|$n$|.dvi|,
+ |document-fig|$n$|.log|, |document-fig|$n$|.eps| are created
+ during the generation of |document-fig|$n$|.pdf| which contains
+ the rendering of the $n$th net of the document.
+\end{itemize}
+%
+The files |document-fig|$n$|.pdf| should not be deleted before the
+final document is produced since they are included from |pdflatex|. If
+they are not found, a warning is issued during the compilation.
+
+There is several important things you should notice:
+%
+\begin{enumerate}
+\item Everything outside of the bounding box of a net is
+ cropped during the creation of the PDF picture. So, take care to
+ check how your picture is rendered (using |\showbb| for
+ instance).
+\item Only one pass of {\LaTeX} is made on each figure. If you need to
+ several passes, you may run |pn2pdf| manually, with the options
+ |-f| and |-k| (see below).
+\item {\LaTeX} and {pdf\LaTeX} do not always produce identical
+ rendering of the same document. However, Petri-nets pictures
+ should be the same since they are always typeset by \LaTeX.
+\end{enumerate}
+
+To conclude, here is a summary of the ways to run |pn2pdf|:
+%
+\begin{itemize}
+\item |pn2pdf document-fig|$n$|.pn|\\
+ generate |pn2pdf document-fig|$n$|.pdf|
+\item the option |-f| or |--force| may be used to force the creation
+ of PDF files even if their source did not change.
+\item |pn2pdf -t FILES| or |pn2pdf --test FILES|\\
+ used by {pdf\LaTeX} in order to check is the option |--shell|
+ was used or not.
+\item |pn2pdf -b document| or |pn2pdf --batch document|\\
+ reads the file |document.bpn| in order to produce the figures.
+\item |pn2pdf -d FILES| or |pn2pdf --delete FILES|\\
+ deletes |FILES| (which may be patterns like |*.aux|), this is
+ use by |pdflatex| in order to remove some temporary files.
+\item the option |-k| or |--keep| prevents |pn2pdf| from deleting the
+ temporary files.
+\item the option |-h| or |--help| prints a short help and exit.
+\end{itemize}
+
+%%
+%%
+
+\newpage
+\appendix
+
+\section{Reference pages}
+
+\subsection{Text commands: package {\tt pntext}}
+
+\begin{center}
+\begin{tabular}{l@{\qquad}l}
+|\bpn| & \bpn \\
+|\bpnkw{key-word}| & \bpnkw{key-word} \\
+|\bpnnt{non-terminal}| & \bpnnt{non-terminal} \\
+|\choice| & \choice \\
+|\eplace| & \eplace \\
+|\iplace| & \iplace \\
+|\lscope| & $\lscope\Rscope$ \\
+|\Lscope| & invisible version of |\lscope| \\
+|\mathset{A}| & \mathset{A} \\
+|\mnet| & \mnet \\
+|\placestatus{d}| & \placestatus{d} \\
+|\pnversion| & \pnversion{} (current version) \\
+|\rs| & \rs \\
+|\rscope| & $\Lscope\rscope$ \\
+|\Rscope| & invisible version of |\rscope| \\
+|\scope{a}{N}| & $\scope{a}{N}$ \\
+|\setC| & \setC \\
+|\setN| & \setN \\
+|\setQ| & \setQ \\
+|\setR| & \setR \\
+|\setZ| & \setZ \\
+|\sy| & \sy \\
+|\tie| & \tie \\
+|\Val| & \Val \\
+|\Var| & \Var \\
+|\xplace| & \xplace \\
+\end{tabular}
+\end{center}
+
+\subsection{Drawing command: package {\tt pndraw}}
+
+\def\n{$\hookleftarrow$}
+\def\<{$\displaystyle\big\langle$}
+\def\>{$\displaystyle\big\rangle$}
+\newenvironment{options}{\\[5pt]\begin{tabular}{@{\qquad}ll}}{\end{tabular}}
+
+The parts placed between angle brackets \<$\cdots$\> are the optional
+ones, the others are mandatory. Symbol \n{} denotes the end of the
+line.
+
+\begin{itemize}
+\item |\arc|\<|^_*"=![|options|]<|pos|>|\>|{|node1|}{|node2|}|\<label\>\n\\
+Draws a labelled arc between node1 and node2.
+\begin{options}
+|^| & label above the arc (default)\\
+|_| & label below the arc \\
+|*| & label over the arc \\
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+|<|pos|>| & position of the label ($0 \leq {}$pos${}\leq 1$) \\
+\end{options}
+%
+\item |\beginnet|\<|[|options|]|\>$(x_1,y_1)(x_2,y_2)$\n\\
+ |\begin{petrinet}|\<|[|options|]|\>$(x_1,y_1)(x_2,y_2)$\n\\
+Begins a net whose bounding box is defined by $(x_1,y_1)$ as
+bottom left corner and $(x_2,y_2)$ at top right corner.
+\begin{options}
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\endnet|\\
+ |\end{petrinet}|\\
+Ends a net.
+%
+\item |\everylabel={|\<tokens\>|}|\\
+Expands tokens each time a label is typeset.
+%
+\item |\everynet={|\<tokens\>|}|\\
+Expands tokens each time a net is started.
+%
+\item |\label|\<|"{|pos|}|label\>\n\\
+ |\label|\<|"<|pos|>|label\>\n\\
+Draws an additional label for a node (first line) or a link (second
+line).
+\begin{options}
+|"| & label in text mode \\
+|{|pos|}| & position of the label, an angle (in degrees) \\
+ & or a corner code (t,l,b,r,tl,tr,bl,br) \\
+|<|pos|>| & position of the label ($0 \leq$ pos $\leq 1$)\\
+\end{options}
+%
+\item |\link|\<|^_*"=![|options|]<|pos|>/|arrow|/|\>|{|node1|}{|node2|}|\<label\>\n\\
+Draws a labelled link between node1 and node2.
+\begin{options}
+|^| & label above the arc (default) \\
+|_| & label below the arc \\
+|*| & label over the arc \\
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+|<|pos|>| & position of the label ($0 \leq {}$pos${}\leq 1$) \\
+|/|arrow|/| & arrows specifications (see the figure~\ref{fig:arrows} \\
+\end{options}
+%
+\item |\module|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\
+Draws a labelled module centered on $(x,y)$.
+\begin{options}
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\modulesize=|dimen\\
+Sets the size of the modules.
+%
+\item |\nodessize{|dimen|}|\\
+Sets the size of all nodes.
+%
+\item |\place|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\
+Draws a labelled place centered on $(x,y)$.
+\begin{options}
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\placesize=|dimen\\
+Sets the size of the places.
+%
+\item |\psset{|name|=|value\<|,...|\>|}|\\
+Sets PSTricks options.
+\begin{options}
+|arcangle=|angle & angle at the ends of links \\
+|arrowinset=|real & size of arrowheads insets \\
+|arrowlength=|real & length of arrowheads \\
+|arrowsize=|dim integer & size of arrowheads \\
+|doubleline=|boolean & double lines on/off \\
+|doublesep=|dim & distance between double lines \\
+|fillcolor=|color & background color \\
+|labelsep=|dim & distance between labels and nodes \\
+|linecolor=|color & lines color \\
+|linewidth=|dim & lines thickness \\
+|unit=|dim & global scale \\
+|xunit=|dim & horizontal scale \\
+|yunit=|dim & vertical scale\\
+\end{options}
+%
+\item |\savenet|\\
+Just before the beginning of a net: saves it without displaying it.
+%
+\item |\showbb|\<|*[|options|]|\>\n\\
+Draws the bounding box of a net.
+\begin{options}
+|*| & background filled \\
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\shownet|\\
+Displays the last net saved by |\savenet|.
+%
+\item |\source|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\
+Draws a labelled source centered on $(x,y)$.
+\begin{options}
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\sourcesize=|dimen\\
+Sets the size of sources.
+%
+\item |\store|\<|"=![|options|]|\>|{|name|}|$(x,y)$\n\\
+Draws a store centered on $(x,y)$.
+\begin{options}
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\storesize=|dimen\\
+Sets the size of stores.
+%
+\item |\text|\<|"|\>|{|name|}|$(x,y)$\<label\>\n\\
+Draws an unboxed labelled node centered on $(x,y)$.
+\begin{options}
+|"| & label in text mode \\
+\end{options}
+%
+\item |\trans|\<|*"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\
+Draws a labelled transition centered on $(x,y)$.
+\begin{options}
+|*| & automatic size \\
+|"| & label in text mode \\
+|=| & double line \\
+|!| & thick line \\
+|[|options|]| & PSTricks options \\
+\end{options}
+%
+\item |\transsize=|dimen\\
+Sets the size of transitions.
+\end{itemize}
+
+\end{document}
diff --git a/macros/generic/petri-nets/pndraw.sty b/macros/generic/petri-nets/pndraw.sty
new file mode 100644
index 0000000000..5d9c82585f
--- /dev/null
+++ b/macros/generic/petri-nets/pndraw.sty
@@ -0,0 +1,152 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\ProvidesPackage{pndraw}
+
+\newenvironment{petrinet}{\beginnet}{\endnet}
+
+%%
+%% running standard LaTeX
+%%
+
+\usepackage{ifpdf}
+
+\ifpdf
+ \relax
+\else
+ \input pndraw.tex
+ \endinput
+\fi
+
+%%
+%% running pdfLaTeX
+%%
+
+\message{ ** Petri-nets / draw commands ** }
+
+\input pnversion
+
+\usepackage{graphicx}
+
+\newcounter{pncount}
+\setcounter{pncount}{1}
+
+\catcode`\:=11
+
+%%
+%% check for write18
+%%
+
+\begingroup
+ \edef\test{\jobname.\the\year\the\month\the\day\the\time}
+ \immediate\write18{pn2pdf --test \test}
+ \IfFileExists\test{
+ \global\def\pnpdf:run ##1{\immediate\write18{pn2pdf ##1}}
+ \pnpdf:run{--delete \test}
+ }{
+ \newwrite\pnpdf:batch
+ \immediate\openout\pnpdf:batch=\jobname.bpn
+ \global\def\pnpdf:run ##1{\immediate\write\pnpdf:batch{pn2pdf ##1}}
+ \AtEndDocument{\pnpdf:run{--delete \jobname.bpn}}
+ }
+\endgroup
+
+\let\pnpdf:warn=\relax
+
+\newwrite\pnpdf:stream
+
+\def\pnpdf:open:always{%
+ \edef\pnpdf:file{\jobname-fig\thepncount.pn}%
+ \immediate\openout\pnpdf:stream=\pnpdf:file
+ \global\let\pnpdf:open=\relax}
+\global\let\pnpdf:open=\pnpdf:open:always
+
+\def\pnpdf:write #1{\pnpdf:open
+ \immediate\write\pnpdf:stream{#1}}
+
+\begingroup
+ \catcode`|=0
+ \catcode`[=1
+ \catcode`]=2
+ \catcode`\{=12
+ \catcode`\}=12
+ \catcode`\\=12
+ |long|gdef|pnpdf:read #1\end{petrinet}[|pnpdf:write[#1]|end[petrinet]]
+|endgroup
+
+{\catcode`\^^M=\active %
+\gdef\pnpdf:catcodes{\bgroup %
+ \catcode`\{=12 \catcode`\}=12 \catcode`\$=12 %
+ \catcode`\&=12 \catcode`\#=12 \catcode`\^=12 %
+ \catcode`\%=12 \catcode`\ =12 \catcode`\_=12 %
+ \catcode`\~=12 \catcode`\\=12 \catcode`\^^M=\active \def^^M{^^J}}}
+
+{\catcode`\%=12 \catcode`\!=14 \catcode`\^^M=\active !
+ \gdef\beginnet{\pnpdf:write{\string\begin{petrinet}\string%}!
+ \catcode`\^^M=\active\let^^M=\relax !
+ \pnpdf:catcodes\pnpdf:read}}
+
+\def\show:net:always{%
+ \IfFileExists{\jobname-fig\thepncount.pdf}%
+ {\includegraphics{\jobname-fig\thepncount.pdf}}%
+ {\message{<missing \jobname-fig\thepncount.pdf>}%
+ \global\def\pnpdf:warn{\typeout{^^J*** Run "pn2pdf
+ --batch \jobname.bpn" in order to build the
+ figures^^J}}}}
+
+\def\endnet{\egroup
+ \pnpdf:write{\string\end{petrinet}}%
+ \immediate\closeout\pnpdf:stream
+ \global\let\pnpdf:open=\pnpdf:open:always
+ \pnpdf:run{\jobname-fig\thepncount.pn}%
+ \show:net\addtocounter{pncount}{1}}
+
+\let\show:net=\show:net:always
+\def\savenet{\global\def\show:net{\global\let\show:net\show:net:always}}
+
+\def\shownet{\addtocounter{pncount}{-1}\show:net:always
+ \addtocounter{pncount}{1}}
+
+\def\everynet{\begingroup\afterassignment\endgroup\toks0}
+\def\everylabel{\begingroup\afterassignment\endgroup\toks0}
+\def\psset #1{}
+\def\nodessize #1{}
+\def\placesize{\begingroup\afterassignment\endgroup\dimen0}
+\def\transsize{\begingroup\afterassignment\endgroup\dimen0}
+\def\storesize{\begingroup\afterassignment\endgroup\dimen0}
+\def\modulesize{\begingroup\afterassignment\endgroup\dimen0}
+\def\sourcesize{\begingroup\afterassignment\endgroup\dimen0}
+
+\AtBeginDocument{
+ \def\everynet{\bgroup\afterassignment\everynet:next\toks0}
+ \def\everynet:next{\pnpdf:write{\string\everynet{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\everylabel{\bgroup\afterassignment\everylabel:next\toks0}
+ \def\everylabel:next{\pnpdf:write{\string\everylabel{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\psset{\bgroup\afterassignment\psset:next\toks0}
+ \def\psset:next{\pnpdf:write{\string\psset{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\nodessize{\bgroup\afterassignment\nodessize:next\toks0}
+ \def\nodessize:next{\pnpdf:write{\string\nodessize{\expandafter
+ \noexpand\the\toks0}}\egroup}
+ \def\placesize{\bgroup\afterassignment\placesize:next\dim0}
+ \def\placesize:next{\edef\command{{\string\placesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\transsize{\bgroup\afterassignment\transsize:next\dim0}
+ \def\transsize:next{\edef\command{{\string\transsize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\storesize{\bgroup\afterassignment\storesize:next\dim0}
+ \def\storesize:next{\edef\command{{\string\storesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\modulesize{\bgroup\afterassignment\modulesize:next\dim0}
+ \def\modulesize:next{\edef\command{{\string\modulesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}
+ \def\sourcesize{\bgroup\afterassignment\sourcesize:next\dim0}
+ \def\sourcesize:next{\edef\command{{\string\sourcesize=\the\dim0}}%
+ \expandafter\pnpdf:write\command}}
+
+\AtEndDocument{\pnpdf:run{--delete \jobname.pre}
+ \pnpdf:warn}
+
+\catcode`\:=12
diff --git a/macros/generic/petri-nets/pndraw.tex b/macros/generic/petri-nets/pndraw.tex
new file mode 100644
index 0000000000..9433a4b719
--- /dev/null
+++ b/macros/generic/petri-nets/pndraw.tex
@@ -0,0 +1,623 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\message{ ** Petri-nets / draw commands ** }
+\input pnversion
+
+\input pstricks
+\input pst-node
+
+\let\pst=\relax
+
+\catcode`\:=11
+
+%%
+%% option parsing facilities
+%%
+
+\def\expandonce{\expandafter\noexpand}
+
+\outer\def\newopt #1#2{% group/character (+ params and body)
+ \expandafter\ifx\csname setcode:#1\endcsname\relax
+ \expandafter\edef\csname setcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=12 \relax}%
+ \expandafter\edef\csname resetcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=\the\catcode`#2 \relax}%
+ \else
+ \expandafter\edef\csname setcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=12 \relax
+ \expandafter\expandonce\csname setcode:#1\endcsname}%
+ \expandafter\edef\csname resetcode:#1\endcsname{%
+ \noexpand\catcode`\string#2=\the\catcode`#2 \relax
+ \expandafter\expandonce\csname resetcode:#1\endcsname}%
+ \fi
+ \edef\newopt:name{opt:#1\string#2}%
+ \expandafter\expandafter\def\csname\newopt:name\endcsname}
+
+\def\getopt #1#2{% group/macro to run after getting options
+ \def\getopt:end{\csname resetcode:#1\endcsname #2}%
+ \begingroup
+ \edef\getopt:group{opt:#1}%
+ \csname setcode:#1\endcsname
+ \nextopt}
+
+\let\endopt=\endgroup
+
+\def\nextopt{\begingroup
+ \futurelet\next\getopt:next}
+
+\def\getopt:next{\ifcat\next\string*%
+ \aftergroup\getopt:run
+ \else
+ \aftergroup\getopt:end
+ \fi \endgroup}
+
+\def\getopt:run #1{\edef\getopt:name{\getopt:group\string#1}%
+ \expandafter\csname\getopt:name\endcsname}
+
+%%
+%% misc setup
+%%
+
+% pstrick tunning
+\psset{unit=1cm,
+ xunit=1cm,
+ yunit=1cm,
+ linewidth=.5pt,
+ doublesep=.5pt,
+ dimen=iner,
+ labelsep=2pt,
+ arcangle=0,
+ arrowlength=1.4,
+ arrowinset=0,
+ arrowsize=2pt 2}
+
+% nodes sizes
+\newdimen\placesize
+\newdimen\transsize
+\newdimen\storesize
+\newdimen\modulesize
+\newdimen\sourcesize
+
+\def\nodessize #1{%
+ \placesize = #1
+ \transsize = #1
+ \storesize = #1
+ \modulesize = #1
+ \sourcesize = #1
+ \relax}
+
+\nodessize{5mm}
+
+% something to run before when a new net
+\newtoks\everynet \everynet={}
+
+% something to run before typesetting labels
+\newtoks\everylabel \everylabel={}
+
+%%
+%% begin/end a net
+%%
+
+\newopt{net}[#1]{\psset{#1}\nextopt}
+\newopt{net}(#1)(#2){\pspicture(#1)(#2)%
+ \def\net:bottom:left{#1}\def\net:top:right{#2}%
+ % adds white points in order to setup bounding box for a possible
+ % `dvips -E'
+ \rput(#1){{\white\vrule width 1sp height 1sp depth 0sp}}%
+ \rput(#2){{\white\vrule width 1sp height 1sp depth 0sp}}%
+ \the\everynet}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\beginnet{\leavevmode\hbox\bgroup%
+ \let\place=\net:place%
+ \let\trans=\net:trans%
+ \let\store=\net:store%
+ \let\module=\net:module%
+ \let\source=\net:source%
+ \let\text=\net:text%
+ \let\link=\net:link%
+ \let\arc=\net:arc%
+ \let\label=\net:label%
+ \let\showbb=\net:showbb%
+ \def\net:s{empty}%
+ \catcode`\^^M=\active\let^^M=\relax%
+ \getopt{net}\relax}}
+
+\let\begin:net=\beginnet
+
+\def\endnet{\endpspicture\endopt\egroup
+ \global\let\beginnet=\begin:net}
+
+\newbox\net:box
+
+\def\save:net\leavevmode{\global\setbox\net:box}
+
+\def\savenet{\def\beginnet{\expandafter\save:net\begin:net}}
+
+\def\shownet{{\setbox0\copy\net:box\unhbox0}}
+
+%%
+%% globally used for labels
+%%
+
+\def\net:math #1\net:endmath{$#1$}
+
+%%
+%% draws net bounding box
+%%
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:showbb #1^^M{% options (if any)
+ {\psframe#1(\net:bottom:left)(\net:top:right)}}}
+
+%%
+%% places
+%%
+
+\newopt{net:place}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:place}={\psset{doubleline=true}\nextopt}
+\newopt{net:place}!{\psset{linewidth=2pt,linecolor=black}\nextopt}
+\newopt{net:place}[#1]{\psset{#1}\nextopt}
+
+\def\net:place{\getopt{net:place}\net:place:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:place:draw #1(#2,#3)#4^^M{% options/name/x/y/label
+ \global\edef\net:x{#2}%
+ \global\edef\net:y{#3}%
+ \global\def\net:s{circle}%
+ \cnode(#2,#3){.5\placesize}{#1}%
+ \rput(#2,#3){\hbox{\net:math\the\everylabel #4\net:endmath}}\endopt}}
+
+%%
+%% source
+%%
+
+\def\net:source{\getopt{net:trans}\net:source:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:source:draw #1(#2,#3)#4^^M{% name/x/y/label
+ \placesize=\sourcesize \transsize=\sourcesize%
+ \place[dimen=outer]#1(#2,#3)
+ \trans #1(#2,#3)#4
+ \endopt}}
+
+%%
+%% transitions
+%%
+
+\newopt{net:trans}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:trans}={\psset{doubleline=true}\nextopt}
+\newopt{net:trans}!{\psset{linewidth=2pt,linecolor=black}\nextopt}
+\newopt{net:trans}*{\let\net:trans:draw\net:trans:draw:rectangle
+ \nextopt}
+\newopt{net:trans}[#1]{\psset{#1}\nextopt}
+
+\def\net:trans{\let\net:trans:draw\net:trans:draw:square
+ \getopt{net:trans}\net:trans:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:trans:draw:square #1(#2,#3)#4^^M{% name/x/y/label
+ \global\edef\net:x{#2}\global\edef\net:y{#3}\global\def\net:s{square}%
+ \rput(#2,#3){\rnode{#1}{\psframebox[framesep=-\pslinewidth]{%
+ \hbox to \transsize{\hss\vbox to \transsize{\vss}}}}}%
+ \rput(#2,#3){\hbox{\net:math\the\everylabel #4\net:endmath}}\endopt}}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:trans:draw:rectangle #1(#2,#3)#4^^M{% options/name/x/y/label
+ \global\edef\net:x{#2}\global\edef\net:y{#3}\global\def\net:s{rectangle}%
+ {\setbox0=\hbox{\net:math\the\everylabel #4\net:endmath}\dimen0=\ht0 %
+ \advance\dimen0 by \dp0 \advance\dimen0 by 4pt %
+ \global\edef\net:h{\the\dimen0}\dimen0=\wd0 %
+ \advance\dimen0 by 4pt \global\edef\net:w{\the\dimen0}}%
+ \rput(#2,#3){\rnode{#1}{\psframebox[framesep=2pt]{%
+ \hbox{\net:math\the\everylabel #4\net:endmath}}}}\endopt}}
+
+%%
+%% module
+%%
+
+\def\net:module{\getopt{net:trans}\net:module:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:module:draw #1(#2,#3)#4^^M{% name/x/y/label
+ \psclip{\rput(#2,#3){\rnode{#1}{\psframebox[framesep=-\pslinewidth]{%
+ \hbox to \modulesize{\hss\vbox to \modulesize{\vss}}}}}}%
+ \pscustom{\moveto(#2,#3)%
+ \rlineto(-.2\modulesize,-.2\modulesize)%
+ \movepath(.5\modulesize,-.3\modulesize)}%
+ \endpsclip%
+ \transsize=\modulesize\trans #1(#2,#3)#4
+ \endopt}}
+
+%%
+%% store
+%%
+
+\def\net:store{\getopt{net:place}\net:store:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:store:draw #1(#2,#3)#4^^M{% name/x/y/label
+ \placesize=\storesize%
+ \psclip{\cnode(#2,#3){.5\placesize}{ }}%
+ \pscustom{\moveto(#2,#3)%
+ \rlineto(.5\storesize,.5\storesize)%
+ \rlineto(-\storesize,-\storesize)%
+ \stroke\moveto(#2,#3)%
+ \rlineto(.5\storesize,-.5\storesize)%
+ \rlineto(-\storesize,\storesize)}%
+ \endpsclip%
+ \place #1(#2,#3)
+ \endopt}}
+
+%%
+%% free text
+%%
+
+\newopt{net:text}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:text}[#1]{\psset{#1}\nextopt}
+
+\def\net:text{\getopt{net:text}\net:text:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:text:draw #1(#2,#3)#4^^M{% options/name/x/y/label
+ \global\edef\net:x{#2}\global\edef\net:y{#3}%
+ \global\def\net:s{rectangle}%
+ {\setbox0=\hbox{\net:math\the\everylabel #4\net:endmath}\dimen0=\ht0 %
+ \advance\dimen0 by \dp0 \advance\dimen0 by 4pt %
+ \global\edef\net:h{\the\dimen0}\dimen0=\wd0 %
+ \advance\dimen0 by 4pt \global\edef\net:w{\the\dimen0}}%
+ \rput(#2,#3){\rnode{#1}{\hbox{\net:math\the\everylabel %
+ #4\net:endmath}}}\endopt}}
+
+%%
+%% links
+%%
+
+\newopt{net:link}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+\newopt{net:link}^{\def\net:link:put{\aput}\nextopt}
+\newopt{net:link}_{\def\net:link:put{\bput}\nextopt}
+\newopt{net:link}*{\def\net:link:put{\lput*}\nextopt}
+\newopt{net:link}={\psset{doubleline=true}\nextopt}
+\newopt{net:link}!{\psset{linewidth=2pt,linecolor=black}\nextopt}
+\newopt{net:link}<#1>{\def\net:link:pos{(#1)}\nextopt}
+\newopt{net:link}[#1]{\psset{#1}\nextopt}
+\newopt{net:link}/#1/{\def\net:link:arrows{{#1}}\nextopt}
+
+\def\net:link{\def\net:link:put{\aput}\def\net:s{link}%
+ \def\net:link:arrows{{-}}%
+ \def\net:link:pos{(.5)}\def\net:link:opt{}%
+ \getopt{net:link}\net:link:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:link:draw #1#2#3^^M{% from/to/label
+ \expandafter\ncarc\net:link:arrows{#1}{#2}%
+ \expandafter\net:link:put\net:link:pos{%
+ \hbox{\net:math\the\everylabel #3\net:endmath}}\endopt}}
+
+\def\net:arc{\link/->/}
+
+%%
+%% additional labels
+%%
+
+% calls the right label macro
+
+\newopt{net:label}"{\let\net:math\relax \let\net:endmath\relax \nextopt}
+
+\def\net:label{\getopt{net:label}\net:label:call}
+
+\def\net:label:call{\edef\net:label:shape{net:label:\net:s}%
+ \expandafter\csname\net:label:shape\endcsname}
+
+% if no node or link has been drawn, we just ignore the label
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:empty #1^^M{}}
+
+% calculates angle which can be an integer, one or two letters.
+
+\def\net:setangle #1{\relax
+ \expandafter\ifx\csname net:angle:#1\endcsname\relax
+ \edef\net:angle{#1}%
+ \else\edef\net:angle{\csname net:angle:#1\endcsname}\fi}
+
+\def\net:angle:r{0}
+\def\net:angle:tr{45} \let\net:angle:rt=\net:angle:tr
+\def\net:angle:t{90}
+\def\net:angle:tl{135} \let\net:angle:lt=\net:angle:tl
+\def\net:angle:l{180}
+\def\net:angle:bl{225} \let\net:angle:lb=\net:angle:b
+\def\net:angle:b{270}
+\def\net:angle:br{315} \let\net:angle:rb=\net:angle:br
+
+% for a circle
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:circle #1#2^^M{% pos/text
+ \net:setangle{#1}%
+ \advance\placesize by \labelsep%
+ \uput{.5\placesize}[\net:angle](\net:x,\net:y){%
+ \hbox{\net:math\the\everylabel #2\net:endmath}}\endopt}}
+
+% for a square
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:square #1#2^^M{% pos/text
+ \net:setangle{#1}%
+ \begingroup \dimen0=\net:angle pt%
+ \loop \ifdim\dimen0<-45pt \advance\dimen0 by 90pt \repeat%
+ \loop \ifdim\dimen0>45pt \advance\dimen0 by -90pt \repeat%
+ \edef\tmp{\expandafter\clear\the\dimen0}%
+ \cossin\cos\sin\tmp%
+ \realdiv\tmp=\sin/\cos%
+ \realmul\tmp=\tmp*\tmp%
+ \realadd\tmp=1+\tmp%
+ \realsqrt\tmp\tmp%
+ \realmul\tmp=.65*\tmp%
+ \uput{\tmp\transsize}[\net:angle](\net:x,\net:y){%
+ \hbox{\net:math\the\everylabel #2\net:endmath}}\endgroup\endopt}}
+
+% for a rectangle
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:rectangle #1#2^^M{% pos/text
+ \net:setangle{#1}%
+ \begingroup \dimen0=\net:angle pt%
+ \loop \ifdim\dimen0<0pt \advance\dimen0 by 360pt \repeat%
+ \loop \ifdim\dimen0>360pt \advance\dimen0 by -360pt \repeat%
+ \ifdim\dimen0>180pt \advance\dimen0 by -180pt \fi%
+ \ifdim\dimen0>90pt \advance\dimen0 by -180pt \dimen0=-\dimen0 \fi%
+ \edef\tmp{\expandafter\clear\the\dimen0}%
+ \cossin\cos\sin\tmp%
+ \edef\w{\expandafter\clear\net:w}%
+ \edef\h{\expandafter\clear\net:h}%
+ \realmul\w=.4*\w% the test below is done using \w, this gives it a
+ \realmul\h=.6*\h% greater importance so is is balanced here.
+ \realmul\ww=\w*\w%
+ \realmul\hh=\h*\h%
+ \realadd\d=\ww+\hh%
+ \realsqrt\d\d%
+ \realmul\dcos=\cos*\d%
+ \ifdim\dcos pt < \w pt %
+ \realdiv\tmp=\h/\sin%
+ \else%
+ \realdiv\tmp=\w/\cos%
+ \fi%
+ \realmul\tmp=1.5*\tmp%
+ \uput{\tmp pt}[\net:angle](\net:x,\net:y){%
+ \hbox{\net:math\the\everylabel #2\net:endmath}}\endgroup\endopt}}
+
+% for a link
+
+\def\net:label:link{\getopt{net:angle}\net:label:link:draw}
+
+{\catcode`\^^M=\active \let^^M=\relax %
+\global\def\net:label:link:draw #1^^M{% from/to/label
+ \expandafter\net:link:put\net:link:pos{%
+ \hbox{\net:math\the\everylabel #1\net:endmath}}\endopt\endopt}}
+
+%%
+%% trigonometric and real number stuff
+%%
+
+% absolute value
+
+\def\realabs #1=|#2|{{%
+ \dregA=#2pt
+ \ifdim \dregA<0pt
+ \dregA=-\dregA
+ \fi
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% add two reals
+
+\def\realadd #1=#2+#3{{%
+ \dregA=#2pt
+ \dregB=#3pt
+ \advance\dregA by\dregB
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% substract two reals
+
+\def\realsub #1=#2-#3{%
+ \realadd#1=#2+{-#3}}
+
+% multiply two reals
+
+\def\realmul #1=#2*#3{{%
+ \dregA=#2pt
+ \dregA=#3\dregA
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% divide two reals
+
+\def\realdiv #1=#2/#3{{%
+ \dregA=#2pt\cregA=\dregA
+ \dregA=#3pt\cregB=\dregA
+ \intdiv\res=\cregA/\cregB
+ \global\edef\tmptrigoA{\res}}%
+ \edef#1{\tmptrigoA}}
+
+% radians -> degrees
+
+\def\todeg #1#2{% #1=deg(#2)
+ \realmul#1=#2*{180}%
+ \realdiv#1=#1/{3.14159265359}}
+
+% degrees -> radian
+
+\def\torad #1#2{% #1=rad(#2)
+ \realmul#1=#2*{3.14159265359}%
+ \realdiv#1=#1/{180}}
+
+% cosinus and sinus
+
+\def\cossin #1#2#3{{% #1=cos(#3) #2=sin(#3)
+ \dregA=#3pt
+ % be sure \dregA is in [-180,180]
+ \loop
+ \ifdim\dregA<-180pt
+ \advance\dregA by 360pt
+ \repeat
+ \loop
+ \ifdim\dregA>180pt
+ \advance\dregA by -360pt
+ \repeat
+ % let's go
+ \ifdim\dregA<-90pt
+ \advance\dregA by 90pt
+ \edef\tmptrigoA{\expandafter\clear\the\dregA}%
+ \torad\rad\tmptrigoA
+ \cordic\negsin\cos\rad
+ \global\edef\tmptrigoA{\cos}%
+ \global\edef\tmptrigoB{-\negsin}%
+ \else\ifdim\dregA>90pt
+ \advance\dregA by -90pt
+ \edef\tmptrigoA{\expandafter\clear\the\dregA}%
+ \torad\rad\tmptrigoA
+ \cordic\sin\negcos\rad
+ \global\edef\tmptrigoA{-\negcos}%
+ \global\edef\tmptrigoB{\sin}%
+ \else
+ \edef\tmptrigoA{\expandafter\clear\the\dregA}%
+ \torad\rad\tmptrigoA
+ \cordic\cos\sin\rad
+ \global\edef\tmptrigoA{\cos}%
+ \global\edef\tmptrigoB{\sin}%
+ \fi\fi}%
+ \edef#1{\tmptrigoA}\edef#2{\tmptrigoB}}
+
+% square root
+
+\def\realsqrt #1#2{{% #1=(#2)^{-1/2}
+ \edef\a{#2}%
+ \edef\an{#2}%
+ \loop
+ \realdiv\anA=\a/\an
+ \realadd\anB=\an+\anA
+ \realdiv\anA=\anB/2
+ \realsub\err=\an-\anA
+ \dregA=\err pt
+ \ifdim \dregA>0.0001pt
+ \edef\an{\anA}%
+ \repeat
+ \global\edef\tmptrigoA{\anA}}%
+ \edef#1{\tmptrigoA}}
+
+%% internal stuff
+
+\newdimen\dregA \newdimen\dregB % \newdimen\dregC
+%\newdimen\dregD \newdimen\dregE \newdimen\dregF
+
+\newcount\cregA \newcount\cregB \newcount\cregC
+\newcount\cregD \newcount\cregE % \newcount\cregF
+
+% arrays of numbers
+
+\def\setarray #1[#2]=#3{\expandafter
+ \edef\csname#1[#2]\endcsname{#3}}
+
+\def\getarray #1=#2[#3]{\edef\tmptrigoA{#2[#3]}%
+ \edef#1{\expandafter\csname\tmptrigoA\endcsname}}
+
+% remove trailing `pt'
+
+{\catcode`\p=12 \catcode`\t=12
+\global\def\clear #1pt{#1}}
+
+% divide two integers
+
+\def\intdiv #1=#2/#3{{%
+ \cregA=#2%
+ \cregB=#3%
+ \ifnum\cregB<0
+ \cregA=-\cregA
+ \cregB=-\cregB
+ \fi
+ \cregD=1
+ \ifnum\cregA<0
+ \cregA=-\cregA
+ \cregD=-1
+ \fi
+ \cregC=\cregA\divide\cregC by\cregB
+ \cregE=\cregC\multiply\cregE by\cregB
+ \advance\cregA by-\cregE
+ \cregE=-1
+ \loop
+ \advance\cregE by1
+ \ifnum\cregE<16
+ \multiply\cregC by2
+ \multiply\cregA by2
+ \ifnum\cregA<\cregB\else
+ \advance\cregC by1
+ \advance\cregA by-\cregB
+ \fi
+ \repeat
+ \divide\cregB by2
+ \ifnum\cregA<\cregB
+ \advance\cregC by1
+ \fi
+ \ifnum\cregD<0
+ \cregC=-\cregC
+ \fi
+ \dregA=\cregC sp
+ \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}%
+ \edef#1{\tmptrigoA}}
+
+% cordic algorithm to compute cos and sin
+
+\def\cordic #1#2#3{{% #1=cos(#3) #2=sin(#3) with #3 \in [-\pi/2,\pi/2]
+ % prepared values
+ \setarray e[0]={.785398163397448}%
+ \setarray e[1]={.463647609000806}%
+ \setarray e[2]={.244978663126864}%
+ \setarray e[3]={.124354994546761}%
+ \setarray e[4]={.0624188099959574}%
+ \setarray e[5]={.0312398334302683}%
+ \setarray e[6]={.0156237286204768}%
+ \setarray e[7]={.00781234106010111}%
+ \setarray e[8]={.00390623013196697}%
+ \setarray e[9]={.00195312251647882}%
+ \setarray e[10]={.000976562189559319}%
+ \setarray e[11]={.000488281211194898}%
+ \setarray e[12]={.000244140620149362}%
+ \setarray e[13]={.00012207031189367}%
+ % init
+ \def\xn{.607252935032446}%
+ \def\yn{0}%
+ \edef\zn{#3}%
+ \cregA=0
+ \cregB=1
+ % cordic loop
+ \loop
+ \realdiv\xtmp=\yn/\cregB
+ \realdiv\ytmp=\xn/\cregB
+ \getarray\ztmp=e[\the\cregA]%
+ \dregA=\zn pt
+ \ifdim\dregA<0pt
+ \realadd\xn=\xn+\xtmp
+ \realsub\yn=\yn-\ytmp
+ \realadd\zn=\zn+\ztmp
+ \else
+ \realsub\xn=\xn-\xtmp
+ \realadd\yn=\yn+\ytmp
+ \realsub\zn=\zn-\ztmp
+ \fi
+ \ifnum\cregA<13
+ \advance\cregA by1
+ \multiply\cregB by2
+ \repeat
+ % terminating
+ \global\edef\tmptrigoA{\xn}\global\edef\tmptrigoB{\yn}}%
+ \edef#1{\tmptrigoA}\edef#2{\tmptrigoB}}
+
+%%
+%% end
+%%
+
+\catcode`\:=12
diff --git a/macros/generic/petri-nets/pnets.sty b/macros/generic/petri-nets/pnets.sty
new file mode 100644
index 0000000000..5949538e4d
--- /dev/null
+++ b/macros/generic/petri-nets/pnets.sty
@@ -0,0 +1,7 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\ProvidesPackage{pnets}
+
+\usepackage{pntext}
+\usepackage{pndraw}
diff --git a/macros/generic/petri-nets/pnets.tex b/macros/generic/petri-nets/pnets.tex
new file mode 100644
index 0000000000..7e5e26203e
--- /dev/null
+++ b/macros/generic/petri-nets/pnets.tex
@@ -0,0 +1,5 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\input pntext
+\input pndraw
diff --git a/macros/generic/petri-nets/pntext.sty b/macros/generic/petri-nets/pntext.sty
new file mode 100644
index 0000000000..1f337cfe5d
--- /dev/null
+++ b/macros/generic/petri-nets/pntext.sty
@@ -0,0 +1,70 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\ProvidesPackage{pntext}
+
+\typeout{ ** Petri-nets / text commands ** }
+
+% numbers sets
+
+\usepackage{amsfonts}
+
+\newcommand{\mathset}[1]{\relax\ifmmode\mathbb #1\else$\mathbb #1$\fi}
+\newcommand{\setN}{\mathset{N}}
+\newcommand{\setZ}{\mathset{Z}}
+\newcommand{\setQ}{\mathset{Q}}
+\newcommand{\setR}{\mathset{R}}
+\newcommand{\setC}{\mathset{C}}
+
+% places status
+
+\newcommand{\placestatus}[1]{{\sf #1}}
+\newcommand{\eplace}{\placestatus{e}}
+\newcommand{\iplace}{\placestatus{i}}
+\newcommand{\xplace}{\placestatus{x}}
+
+% synchronisation, restriction and tie
+
+\newcommand{\sy}{\relax
+ \ifmmode\mathop{\bf sy}\else{\bf sy}\fi}
+\newcommand{\rs}{\relax
+ \ifmmode\mathop{\bf rs}\else{\bf rs}\fi}
+\newcommand{\tie}{\relax
+ \ifmmode\mathop{\bf tie}\else{\bf tie}\fi}
+
+% scoping
+
+\newcommand{\lscope}{\relax
+ \ifmmode\left[\mskip -2.05\thinmuskip\left[\else$\lscope$\fi}
+\newcommand{\Lscope}{\relax\ifmmode\left.\left.\fi}
+\newcommand{\rscope}{\relax
+ \ifmmode\right]\mskip -2.05\thinmuskip\right]\else$\rscope$\fi}
+\newcommand{\Rscope}{\relax\ifmmode\right.\right.\fi}
+\newcommand{\scope}{} % just to test its existence
+\def\scope #1#2{\relax
+ \ifmmode\lscope#1:#2\rscope\else$\lscope#1:#2\rscope$\fi}
+
+% choice operator
+
+\newcommand{\choice}{\relax\ifmmode
+ \mathop{\raise -.2ex\hbox{$\Box$}}\else{\raise -.2ex\hbox{$\Box$}}\fi}
+
+% B(PB)^2 logo
+
+\newcommand{\bpn}{\mbox{B(PN)$^2$}}
+
+% B(PN)^2 syntax
+
+\newcommand{\bpnkw}[1]{{\bf #1}} % keyword
+\newcommand{\bpnnt}[1]{{\sf #1}} % non-terminal
+
+% Mnet mapping function
+
+\newcommand{\mnet}{\mbox{\sf Mnet}}
+
+% Var and Val
+
+\newcommand{\Val}{\relax\ifmmode{V\mskip-1.6\thinmuskip al}%
+ \else{\it Val}\fi}
+\newcommand{\Var}{\relax\ifmmode{V\mskip-1.5\thinmuskip ar}%
+ \else{\it Var}\fi}
diff --git a/macros/generic/petri-nets/pntext.tex b/macros/generic/petri-nets/pntext.tex
new file mode 100644
index 0000000000..17e477c00d
--- /dev/null
+++ b/macros/generic/petri-nets/pntext.tex
@@ -0,0 +1,75 @@
+% This file is part of the Petri-nets packages. See file README for
+% copyright notice.
+
+\message{ ** Petri-nets / text commands ** }
+\input pnversion
+
+% math sets
+
+\newfam\setfam \def\setfont{\fam\setfam\tenset}
+\font\tenset=bbm10 \font\sevenset=bbm7 \font\fiveset=bbm5
+\textfont\setfam=\tenset
+\scriptfont\setfam=\sevenset
+\scriptscriptfont\setfam=\fiveset
+
+\def\mathset #1{{\setfont #1}}
+\def\setN{{\setfont N}}
+\def\setZ{{\setfont Z}}
+\def\setQ{{\setfont Q}}
+\def\setR{{\setfont R}}
+\def\setC{{\setfont C}}
+
+% places status
+
+\def\placestatus #1{{\ss #1}}
+\def\eplace{\placestatus{e}}
+\def\iplace{\placestatus{i}}
+\def\xplace{\placestatus{x}}
+
+% synchronisation, restriction and tie
+
+\def\sy{\relax
+ \ifmmode\mathop{\bf sy}\else{\bf sy}\fi}
+\def\rs{\relax
+ \ifmmode\mathop{\bf rs}\else{\bf rs}\fi}
+\def\tie{\relax
+ \ifmmode\mathop{\bf tie}\else{\bf tie}\fi}
+
+% scoping
+
+\def\lscope{\relax
+ \ifmmode\left[\mskip -2.05\thinmuskip\left[\else$\lscope$\fi}
+\def\Lscope{\relax\ifmmode\left.\left.\fi}
+\def\rscope{\relax
+ \ifmmode\right]\mskip -2.05\thinmuskip\right]\else$\scope$\fi}
+\def\Rscope{\relax\ifmmode\right.\right.\fi}
+\def\scope #1#2{\lscope#1:#2\rscope}
+
+% choice operator
+
+\def\choice{\relax\ifmmode
+ \mathbin{\mathpalette\choicebody{}}%
+ \else${\choice}$\fi}
+
+\def\choicebody #1#2{\vcenter{\hrule
+ \hbox{\vrule$#1\phantom{*}$\vrule}\vss\hrule}}
+
+% B(PB)^2 logo
+
+\def\bpn{\hbox{B(PN)$^2$}}
+
+% B(PN)^2 syntax
+
+\def\bpnkw #1{{\bf #1}} % keyword
+\def\bpnnt #1{{\ss #1}} % non-terminal
+
+% Mnet mapping function
+
+\def\mnet{\hbox{\sf Mnet}}
+
+% Var and Val
+
+\def\Val{\relax\ifmmode{V\mskip-1.6\thinmuskip al}%
+ \else{\it Val}\fi}
+\def\Var{\relax\ifmmode{V\mskip-1.5\thinmuskip ar}%
+ \else{\it Var}\fi}
diff --git a/macros/generic/petri-nets/pnversion.tex b/macros/generic/petri-nets/pnversion.tex
new file mode 100644
index 0000000000..70a068282d
--- /dev/null
+++ b/macros/generic/petri-nets/pnversion.tex
@@ -0,0 +1 @@
+\def\pnversion{2006-03-02}
diff --git a/macros/generic/plainpkg/README b/macros/generic/plainpkg/README
new file mode 100644
index 0000000000..3f1f51eaff
--- /dev/null
+++ b/macros/generic/plainpkg/README
@@ -0,0 +1,46 @@
+
+ README for the `plainpkg' package
+ (C) Uwe Lueck 2012/09/20
+
+
+`plainpkg.tex' provides a "minimal" method for making "generic"
+packages, combining `maybeload' functionality, fallback definitions
+for \ProvidesPackage and \RequirePackage, and handling of arbitrary
+(multiple) "private letters" in nested package files. The
+documentation contains a central reference for making and using
+"generic" packages based on `plainpkg.tex'.
+
+REQUIRED PACKAGES: stacklet (catcodes bundle)
+
+RELATED PACKAGES: miniltx, maybeload, catoptions, pcatcode
+ (amsrefs), texapi; readprov
+
+KEYWORDs: macro programming, package management
+
+LICENSE:
+
+The package file `plainpkg.tex' and the documentation files
+`plainpkg-doc.pdf' and `plainpkg-doc.tex' can be redistributed and/or
+modified under the terms of the LaTeX Project Public License;
+either version 1.3c of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+There is NO WARRANTY, indeed this is still somewhat experimental.
+
+The `plainpkg' package is author-maintained in the sense of
+the license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/generic/plainpkg/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/generic/plainpkg.tds.zip
+
+Please report bugs, problems, and suggestions via
+
+ http://www.contact-ednotes.sty.de.vu
+
+
diff --git a/macros/generic/plainpkg/SrcFILEs.txt b/macros/generic/plainpkg/SrcFILEs.txt
new file mode 100644
index 0000000000..67624485ab
--- /dev/null
+++ b/macros/generic/plainpkg/SrcFILEs.txt
@@ -0,0 +1,9 @@
+
+ *File List*
+ plainpkg.tex 2012/09/19 v0.4a plain package management
+plainpkg-doc.tex 2012/09/19 -- documenting plainpkg.tex
+ ***********
+
+ List made at 2012/09/19, 18:35
+ from script file srcfiles.tex
+
diff --git a/macros/generic/plainpkg/docsrc/plainpkg-doc.tex b/macros/generic/plainpkg/docsrc/plainpkg-doc.tex
new file mode 100644
index 0000000000..882dce5ac4
--- /dev/null
+++ b/macros/generic/plainpkg/docsrc/plainpkg-doc.tex
@@ -0,0 +1,282 @@
+\ProvidesFile{plainpkg-doc.tex}[2012/09/19 documenting plainpkg.tex]
+\title{\pkg{\huge plainpkg}\\---\\%%%Rudimentary Package Management
+% without \LaTeX\thanks{This document describes
+ a ``Minimal" Method\\for Making ``Generic" Packages\thanks{%
+ This document describes
+ \file{plainpkg.tex}'s %% 2012/08/24
+ version~\textcolor{blue}{\UseVersionOf{plainpkg.tex}}
+ as of~\textcolor{blue}{\UseDateOf{plainpkg.tex}}.}}
+% \listfiles %% 2012/09/16
+% \RequirePackage{inputtrc}\dotracinginputs
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \renewcommand*{\mdSectionLevelOne}{\string\subsection}
+ \renewcommand*{\mdJobName}{plainpkg}
+ \MakeJobDoc[tex]{21}%% 2012/08/25
+ {\SectionLevelTwoParseInput} }
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+% \ReadFileInfos{plainpkg} %% 2012/09/16 Fehler, wird wohl schon
+ %% durch fifinddo via stacklet aufgerufen.
+\MDkeywords{Macro programming, package management}
+\newcommand*{\plpkg}[1]{\pkg{plainpkg} #1ackage}
+\newcommand*{\plpkgpkg}{\plpkg p}
+\newcommand*{\Plpkgpkg}{\plpkg P}
+\sloppy
+\begin{document}
+\maketitle
+\begin{MDabstract}
+'plainpkg.tex' provides some rudimentary \LaTeX-like package
+management for ``generic" packages: \
+(i)\enspace a (rather arbitrary) implementation of
+\LaTeX's `\ProvidesFile' (support for \ctanpkgref{readprov}), \
+(ii)\enspace an implementation of \LaTeX's `\ProvidesPackage'
+that, in addition to (i), avoids loading twice, \
+(iii)\enspace a simple implementation of \LaTeX's `\RequirePackage' %% P 2012/09/19
+to allow nesting of package files with and without \LaTeX\ \ and \
+%% <- 2012/08/25
+(iv)\enspace loading 'stacklet.sty' for managing private letters
+with nested package files. \ Also,
+(v)\enspace a rather experimental `\ifltx' is provided indicating
+whether the format is \LaTeX---or \CtanPkgRef{miniltx}{miniltx.tex}
+has been loaded earlier~... \
+A by-product is \ (vi)\enspace the helper `\withcsname' for
+`csname' constructs. %% rm. \ 2012/09/19
+%% 2012/09/19:
+The documentation also introduces a notion of ``\plpkgpkg s"
+for a central explanation of how to make and work with ``generic"
+packages based on 'plainpkg'.
+
+\MDaddtoabstract{Related Packages}
+\ctanpkgref{miniltx}, \ctanpkgref{maybeload};
+\ctanpkgref{catoptions},\\\null\qquad 'pcatcode' from \ctanpkgref{amsrefs},
+\ctanpkgref{texapi}
+%% 2012/09/19:
+\MDaddtoabstract{Required Packages} 'stacklet.sty' from
+\ctanpkgref{catcodes} bundle
+\end{MDabstract}
+% \newpage
+\tableofcontents
+\section{Purpose and Usage}
+\label{sec:pu}
+\subsection{Purpose}
+'plainpkg.tex' in the first instance is a tool for \TeX\ macro packages
+to work with \LaTeX\ as well as with Plain \TeX, perhaps even with other
+\TeX\ formats.
+When \LaTeX\ seems to be missing, a definition for `\ProvidesPackage'
+is provided that avoids loading such a package a second time.
+Earlier (in the \ctanpkgref{dowith} package), I tried to ``hide"
+the `\ProvidesPackage' command when it was not defined,
+the original motive was to have that command somewhere so
+its version information can be accessed by the \ctanpkgref{readprov} package.
+As such ``generic" packages often use private \LaTeX\ internals,
+I thought that 'plainpkg' also should offer a stack for handling category
+codes of `@' in nested package files. Rather than providing such a stack
+in `plainpkg.tex', I use the more general 'stacklet.sty', because I
+have used different ``private letters" in other nested package files
+that \emph{require \LaTeX}, so such stacks should be accessible
+\emph{without} 'plainpkg'.
+%
+% Details, including why a mere document author should consider it,
+% are following.
+
+\subsection{Installing: How and Why}
+The file `plainpkg.tex' is provided ready, like `stacklet.sty'
+(\ctanpkgref{catcodes} bundle), installation only requires
+putting both somewhere where \TeX\ finds them
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf}
+
+\subsection{Features}
+\label{sec:feat}
+Besides providing 'stacklet''s features---see the 'catcodes' bundle
+documentation in `catcodes.pdf'---and a fallback definition
+|\ProvidesPackage| for running without \LaTeX, some |\withcsname|,
+a conditional |\ifltx| as well as
+fallback definitions for |\RequirePackage| and |\ProvidesFile|
+are provided---see implementation sections for details.
+
+\subsection{Loading `plainpkg.tex'}
+\label{sec:load}
+`plainpkg.tex' may be loaded by |\input plainpkg| or---with \LaTeX---by
+|\input{plainpkg}|. However, in a document source file this is useful only
+when so-called ``weak \plpkgpkg s" according to Section~\ref{sec:plpkg}
+are loaded additionally. With \LaTeX, the only effect will be that
+`\withcsname' works and that the 'stacklet' package is loaded.
+So if you just want to have the 'stacklet' functionality of support for
+private letters in nested package files, you better use
+|\RequirePackage{stacklet}| or |\usepackage{stacklet}| directly.
+The latter still is a little strange---it may be helpful for private
+letters other than `@' in a \LaTeX\ document, or with ``weak 'stacklet'
+packages," a notion that I have not introduced yet.
+
+\subsection{Notion and Usage of ``\Plpkgpkg s"}
+\label{sec:plpkg}
+The main purpose of the present section is to have a central
+reference for all ``generic" packages based on 'plainpkg',
+to avoid repeating details in the documentation of each single
+package of that kind.
+
+\subsubsection{The Notion: ``Strong" and ``Weak \Plpkgpkg s"}
+\label{sec:not}
+I introduce the notion of ``\strong{\plpkgpkg s}" for ``generic" packages
+based on 'plainpkg.tex' and requiring it.
+\begin{description}
+ \item[Strong \plpkgpkg s] (i)~have filename extension |.sty|
+ \ and \ (ii)~contain |\input plainpkg|.
+ \item[Weak \plpkgpkg s] do not load `plainpkg.tex',
+ but their \emph{documentation} says that they must be loaded
+ \emph{after} `plainpkg.tex' has been loaded.
+ They have filename extension |.sty| as well.
+\end{description}
+\emph{My} \plpkgpkg s will also contain \ |\ProvidesPackage{<pkg>}[<ver>]| \
+(\mbox{after} `\input plpkgpkg').
+A package loading `plainpkg.tex' and \emph{not} containing `\ProvidesPackage'
+may work and be called a ``\plpkgpkg", but the usefulness of such a
+practice, hmm, is in some sense discussed in Section~\ref{sec:load}.
+
+``Weak" \plpkgpkg s are just an idea that came to my mind when I thought
+about the present documentation, at present I prefer \emph{strong}
+\plpkgpkg s, I do not want to explain usage of weak \plpkgpkg s.
+
+I like to place the `\input plainpkg' ``right-adjusted" in the
+plain text file hoping this way the file information of the next
+\cs{Provides\dots} line is not overlooked.
+
+\subsubsection{How to Load a \Plpkgpkg}
+For loading a \plpkgpkg\ `<generic>.sty' from within some file <loading>,
+we have the following cases:
+\begin{description}
+ \item[from within the \LaTeX\ document preamble] of <loading>:\\
+ |\usepackage{<generic>}|\footnote{$\dots$ or even
+ &\RequirePackage{<generic>} \dots}
+ \item[not intended for \LaTeX:] |\input <generic>.sty|
+ \item[possibly with \LaTeX (``generic"):] |\Require{<generic>}|\\---and
+ `plainpkg.tex' should have been loaded before,\\
+ \strong{recommendation:} <loading> a \plpkgpkg\ `<lodyng>.sty' itself.
+\end{description}
+\strong{Note:}\quad The optional argument as in
+|\RequirePackage{<generic>}[<date>]| is \strong{not supported} (at present)!
+
+\subsubsection{How to Make a \Plpkgpkg}
+% \subsubsection{What a \Plpkgpkg\ Must Contain}
+% For what a \plpkgpkg\ \emph{must} contain,
+% ---see Section~\ref{sec:not}.
+Section~\ref{sec:not} tells what rather is \emph{required} for a
+\plpkgpkg, and Section~\ref{sec:may} summarizes what additionally
+\emph{works} in a \plpkgpkg, due to 'plainpkg''s \emph{features.}
+
+\subsubsection{What a \Plpkgpkg\ May Contain}
+\label{sec:may}
+A \plpkgpkg\ may contain
+\begin{itemize}
+ \item |\ProvidesPackage|, |\RequirePackage|
+ (without optional argument),
+ \item |\ifltx|, and |\withcsname|;
+ \item 'stacklet' commands properly paired:
+ for each ``private letter" <char>, place
+ \begin{itemize}
+ \item |\PushCatMakeLetter\<char>| above its first use
+ and place
+ \item |\PopLetterCat\<char>| after the last use, above `\endinput'.
+ \item If <char> is `@',
+ |\PushCatMakeLetterAt| and |\PopLetterCatAt| are recommended instead.
+ \end{itemize}
+\end{itemize}
+
+% \subsubsection{Implications}
+% See Section~\ref{sec:feat} for what is available besides the
+% specific features advertised for some \plpkgpkg.
+%
+\subsubsection{Other ``\pkg{plainpkg} Files"}
+As 'plainpkg' also provides a fallback definition for
+|\ProvidesFile|, another notion could be that of a
+``\pkg{plainpkg} file" <file> that \
+(i)~has an arbitrary filename extension, \
+(ii)~is loaded by |\input <file>| or, with \LaTeX, |\input{<file>}|
+\ and \
+(iii)~may contain what is allowed according to Section~\ref{sec:may},
+apart from `\ProvidesPackage'.
+As an obvious example, all the document source files such as `<part>.tex'
+may start with `\ProvidesFile', or certain `.def' files could be
+considered ``\pkg{plainpkg} files."
+
+% \subsection{More PU\dots}
+% \begin{enumerate} %% 2012/08/24
+% \item
+% `plainpkg.tex' should be loaded by
+% % \[|\input plainpkg|\]
+% \[\cs{input plainpkg}\]
+% starting a file <generic> for Plain~\TeX\ or that should be
+% independent of a \TeX\ format (basically based on `plain.tex').
+% \item
+% Below that line, such a file may contain
+% \begin{enumerate}
+% \item a \LaTeX\ |\ProvidesFile| or |\ProvidesPackage|
+% command (purpose: accessible by '\ctanpkgref{readprov}.sty'),
+% \item commands from the 'stacklet' package managing
+% private letters with nested packages,
+% \item |\RequirePackage<args>|,
+% \item |\ifltx| indicating running under \LaTeX\ or with
+% \CtanPkgRef{miniltx}{miniltx.tex}.
+% However, something may fail when 'miniltx.tex'
+% is loaded \emph{after} 'plainpkg.tex'.
+% In this case, `\ifltx' at least indicates
+% what \emph{format} is used.
+% \end{enumerate}
+% \item
+% When <generic> is some `<generig>.sty' also intended to
+% work as a \LaTeX\ package, 'plainpkg' will at least ensure
+% that the 'stacklet' commands in <generic> work.
+% \item
+% (Such) <generic> `<generig>.sty' files should be loaded by
+% \[|\RequirePackage{generig}|\]
+% ---\emph{not} \qtd{\cs{input <generig>.sty}}---to ensure that,
+% under \LaTeX, %% 2012/09/16
+% \[`\ProvidesPackage{generig}'\]
+% works properly and to avoid multiple loading. %% 2012/09/16
+% \item
+% \emph{Without} \LaTeX, |\ProvidesPackage| also stops reading
+% the rest of the file when it has been loaded earlier.
+% Thus it is a replacement for \ctanpkgref{maybeload}.
+% \end{enumerate}
+
+% \setcounter{section}{-1}
+\section{Comparison with 'miniltx' and 'maybeload'}
+% Packages based on 'plainpkg' can and should employ `\ProvidesPackage'
+% and `\RequirePackage' even without \LaTeX. In the latter situation,
+% however, their definitions
+Without \LaTeX, the definitions of `\ProvidesPackage' and `\RequirePackage'
+are by no means copies from \LaTeX, as they are in \ctanpkgref{miniltx}.
+Rather, \cs{Provides}\-\code{Package} will work like \ctanpkgref{maybeload}'s
+`\thisfileis'.---\pkg{maybeload} was made for ``\LaTeX," too,
+according to its comment. But that rather was
+pre\mbox{-}$2_{\varepsilon}$ \LaTeX. 'plainpkg' might also have been called
+``\pkg{maybeload2e}", as we are essentially combining 'maybeload''s functionality
+with fall-back support for \LaTeXe's basic package commands.
+But of course, that name would not reflect loading 'stacklet',
+whose purpose also has been to have as little as possible
+above `\ProvidesPackage'.
+
+\section{The Package File}
+\subsection{Header---Bootstrapping and Legalese}
+The first line is for Section~\ref{sec:once}.
+Next I want to have \cs{Provides\textellipsis} info at the top
+of the file, but such a command hasn't been defined yet.
+`\def\filename' etc. could be bad as well, overriding `\filedate'
+of a package that loads 'plainpkg.tex'.
+\input{plainpkg.doc}
+
+\end{document}
+
+VERSION HISTORY
+
+2012/08/22 for v0.1 very first
+2012/08/24 for v0.3 \thanks supplemented
+2012/08/25 "installing" sec. -> `plainpkg.tex',
+ adjusted \HeaderLines, abstract extended,
+ TOC on \newpage, explaining top lines,
+ mentioning \ifltx
+2012/08/26 LaTeX -> \LaTeX; doc. grammar fix
+2012/09/19 different title, moving documentation here
+ from package file and reworking it,
+ changing doc structure, abstract mod.
diff --git a/macros/generic/plainpkg/docsrc/srcfiles.tex b/macros/generic/plainpkg/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..8a07a31a36
--- /dev/null
+++ b/macros/generic/plainpkg/docsrc/srcfiles.tex
@@ -0,0 +1,12 @@
+\ProvidesFile{srcfiles.tex}[2012/08/22 file infos -> SrcFILEs.txt]
+\RequirePackage{nicefilelist,myfilist}
+\EmptyFileList %%% [readprov.sty,myfilist.sty]
+%% packages:
+\ReadFileInfos{plainpkg}
+%% documentation:
+\ReadFileInfos{plainpkg-doc}
+%% documentation settings and auxiliaries:
+% \ReadPackageInfos{fifinddo,makedoc,niceverb}
+% \ReadFileInfos{makedoc.cfg,mdoccorr.cfg,srcfiles}
+\ListInfos[SrcFILEs.txt]
+
diff --git a/macros/generic/plainpkg/plainpkg-doc.pdf b/macros/generic/plainpkg/plainpkg-doc.pdf
new file mode 100644
index 0000000000..fbd1b2a3be
--- /dev/null
+++ b/macros/generic/plainpkg/plainpkg-doc.pdf
Binary files differ
diff --git a/macros/generic/plainpkg/plainpkg.tex b/macros/generic/plainpkg/plainpkg.tex
new file mode 100644
index 0000000000..d56b8848a0
--- /dev/null
+++ b/macros/generic/plainpkg/plainpkg.tex
@@ -0,0 +1,153 @@
+ \ifx\plainpkginfo\undefined
+ \gdef\plainpkginfo{\ProvidesFile{%
+ %
+ plainpkg.tex} [%
+ 2012/09/19 v0.4a plain package management]}
+%%
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Purpose and Usage ==
+%% ... of the file `plainpkg.tex' is described in Section~\ref{sec:pu}
+%% of the documentation file `plainpkg-doc.pdf' generated from
+%% `plainpkg-doc.tex' (... in case somebody is reading the plain
+%% text of `plainpkg.tex').
+%%
+%% == Avoiding Being Loaded Twice ==
+%% \label{sec:once}
+%% Continuing the first conditional:
+ \else
+%% Keeping the `\endinput' \emph{outside} the conditional:
+ \expandafter \endinput
+ \fi
+%% The earlier idea to close the conditional more below
+%% conflicted with avoiding `\input stacklet' under 'readprov'.
+%%
+%% == \cs{global} ==
+%% A funny idea of my earlier 'makedoc' in the 'nicetext' bundle
+%% was that its macro definitions should be \emph{local},
+%% for \emph{preprocessing} documentation files---results
+%% being written to files. Well, but when `makedoc.sty' loads
+%% the present `plainpkg.tex', the latter's definitions should
+%% \emph{last}. Therefore, v0.4 renders all definitions \emph{global}.
+%% I.e., `\def' is replaced by `\gdef', `\edef' by `\xdef',
+%% and `\let' assignments are prefixed with `\global'.
+%%
+%% == A Tool for \cs{csname} ==
+%% \label{sec:withcs}
+%% |\withcsname<cmd>| is a little helper with `\csname'
+%% that will be used by 'stacklet' as well. Usage actually should be
+%% about as
+%% \[`\withcsname\<letters> <chars>\endcsname'\]
+%% or
+%% \[`\withcsname\<letters><non-letter-char><chars>\endcsname'\]
+%% (but better don't expect that `@' were a non-letter-char!\@) %% 2012/08/27
+%% or
+%% \[`\withcsname\<non-letter><chars>\endcsname'\]
+%% (tokenization~...)
+%% and should result in a sequence of two tokens---in
+%% %% <- fixed 2012/08/27 ->
+%% the \ctanpkgref{dowith} notation---
+%% \[?<letters>\,?<chars>\quad \mbox{or}\quad
+%% ?<letters>\,?<non-letter-char><chars>\]
+%% or\quad ?<non-letter>\,?<chars> ...
+ \gdef\withcsname#1{\expandafter#1\csname}
+%% 2012/08/27 I realize that from the three files I made this weekend
+%% ('plainpkg.tex', 'stacklet.sty', 'actcodes.sty'),
+%% a single ?`withcsname' token appears in macro replacement
+%% ``texts" ('actcodes' doesn't use it at all)---wondering
+%% whether I should remove it TODO---however,
+%% it improves readability of the files.
+%%
+%% == \cs{Provides\dots}, \cs{ifltx} ==
+\ifx\ProvidesPackage\undefined
+%% ... or can it be `\relax', cf. concern in 'german.sty'?
+%%
+%% We expect that |\ProvidesFile| and |\ProvidesPackage|
+%% are used with the trailing ``optional" argument:
+ \gdef\ProvidesFile#1[#2]{\wlog{#1 #2}}
+%% |\ProvidesPackage| gets \ctanpkgref{maybeload} functionality.
+%% v0.2 aims at saving a few tokens. And we form a token name
+%% containing an `@' without changing its `\catcode'.
+ \xdef\ProvidesPackage#1{%
+ \noexpand\withcsname
+ \withcsname\noexpand @providespkg\endcsname %% ` ' v0.3
+ ver@#1.sty\endcsname{#1}} %% .sty v0.3
+%% ... so `\ProvidesPackage{<chars>}' should result in %% P 2012/09/15
+%% \[\!\!\!\!?`withcsname'\,?`@providespkg'\,\textsf{in}\sb{k}\sp*(`ver@'<chars>)\,
+%% ?`endcsname'\,.`{'\,\textsf{in}\sb{k}\sp*(<chars>)\,.`}'\!\]
+%% where $\textsf{in}\sb{k}\sp*(\chi)$ is the tokenization of $\chi$
+%% with current `\catcode' function $k$; and this should further result in
+%% \[?`@providespkg'\,?`ver@<chars>'\,.`{'\,\textsf{in}\sb{k}\sp*(<chars>)\,.`}'\]
+% \show\ProvidesPackage
+%% The first tokens of the next code line result in
+%% ?`gdef'\,?`@providespkg': %% gdef 2012/09/19
+ \withcsname\gdef @providespkg\endcsname#1#2[#3]{% %% ` ' v0.3
+ \ifx#1\relax \ProvidesFile{#2.sty}[#3]%
+ \xdef#1{#3}%
+%% ... like \LaTeX, while 'maybeload' consumes less memory.
+ \else \expandafter \endinput
+ \fi }
+%% Moreover, if `\ProvidesPackage' has not been defined before,
+%% neither \LaTeX\ is present nor \ctanpkgref{miniltx} has been
+%% loaded, so |\ifltx| is rendered `\iffalse'
+%% (the construction ensures proper skipping by the outer
+%% conditional, and `\ifltx' rather than `\iflatex' alludes to
+%% considering 'miniltx' and to our worries):
+ \global \expandafter \let \expandafter
+ \ifltx \csname iffalse\endcsname
+%% If `\ProvidesPackage' has been defined, how come?
+%% Not from 'plainpkg.tex' which is not loaded twice.
+%% Rather from \LaTeX\ or 'miniltx':
+\else
+ \global \withcsname \let ifltx\expandafter\endcsname %% 2012/08/26
+ \csname iftrue\endcsname
+\fi
+%% Now `\ProvidesFile' for 'plainpkg.tex' can be executed:
+\plainpkginfo
+%%
+%% == \cs{RequirePackage} ==
+%% Without \LaTeX\, ...
+\ifltx \else %% 2012/08/25
+%% |\RequirePackage| simply is ...
+ \gdef\RequirePackage#1{\input #1.sty}
+\fi
+%%
+%% == \cs{catcode} Stacks ==
+%% ... (for private letters) are provided by 'stacklet.sty' ...
+\RequirePackage{stacklet}
+%%
+%% == Leaving and \acro{HISTORY} ==
+\endinput
+%% VERSION HISTORY
+v0.1 2012/08/22 very first
+v0.2 2012/08/23 refinements with \csname
+v0.3 2012/08/24 \oncsname -> \withcsname;
+ loading `stacklet.sty' with LaTeX;
+ doc. extended
+ 2012/08/25 doc. "installing" mv. here;
+ aligning first conditional + label, \ifltx
+ 2012/08/26 explaining \withcsname;
+ corrected second \ifltx;
+ bug fix "ver@#1.sty"!!!
+ 2012/08/27 account for `@' being letter; doc. fix
+ remark on keeping \withcsname
+v0.4 2012/08/27 \global
+ 2012/09/15 doc. was \Providespackage
+ 2012/09/16 doc: endorsing \RequirePackage more clearly
+ 2012/09/17 bug fix: \def\plain... -> \gdef\plain...
+ (for local makedoc processing)
+ STORED SEPARATELY
+v0.4a 2012/09/19 moving documentation outside, \label..., ?gdef
diff --git a/macros/generic/pmat/pmat.pdf b/macros/generic/pmat/pmat.pdf
new file mode 100644
index 0000000000..521a36f935
--- /dev/null
+++ b/macros/generic/pmat/pmat.pdf
Binary files differ
diff --git a/macros/generic/pmat/pmat.sty b/macros/generic/pmat/pmat.sty
new file mode 100644
index 0000000000..7fab07ab56
--- /dev/null
+++ b/macros/generic/pmat/pmat.sty
@@ -0,0 +1,180 @@
+%%
+%% pmat.sty, version 0.1
+%%
+%% Tom\'as Oliveira e Silva, January 1996
+%%
+%% Partitioned matrix code. Works under TeX and LaTeX (all versions)
+%% Unfortunately, the syntax of pmat is much closer to that of TeX
+%% than to that of LaTeX.
+%%
+%
+% Avoid loading this file more than once
+%
+\expandafter\ifx\csname pmat@iter\endcsname\relax\else\endinput\fi
+%
+% Make @ a letter
+%
+\expandafter\edef\csname pmat@catcode\endcsname
+ {\catcode`\string @=\the\catcode`\@}
+\catcode`\@=11
+%
+% How to select the dash shape
+% cross (A): horizontal and vertical dash lines cross each other
+% nocross (B): horizontal and vertical dash lines do not cross each other
+%
+\def\pmatcross{\def\pmat@hdash{\pmat@hdashA}\def\pmat@vdash{\pmat@vdashA}}
+\def\pmatnocross{\def\pmat@hdash{\pmat@hdashB}\def\pmat@vdash{\pmat@vdashB}}
+\pmatcross %The default
+%
+% Debug flag
+%
+\newif\ifpmat@debug\pmat@debugfalse
+%
+% Extra facilities are provided under LaTeX2e
+%
+\ifx\ProvidesPackage\undefined\else
+ \ProvidesPackage{pmat}[1996/01/01 v0.1]
+ \DeclareOption{debug}{\pmat@debugtrue}%Undocumented feature
+ \DeclareOption{cross}{\pmatcross}
+ \DeclareOption{nocross}{\pmatnocross}
+ \ProcessOptions
+\fi
+%
+% Debug code. If enabled it draws a bounding box around each matrix entry.
+%
+\ifpmat@debug
+ \def\pmat@hidehrule#1#2{\kern-#1%
+ \hrule height#1 depth#2 \kern-#2}
+ \def\pmat@hidevrule#1#2{\kern-#1{\dimen0=#1%
+ \advance\dimen0 by#2\vrule width\dimen0}\kern-#2}
+ \def\pmat@makeblankbox#1#2{\hbox{\lower\dp0\vbox{\pmat@hidehrule{#1}{#2}%
+ \kern-#1 \hbox to \wd0{\pmat@hidevrule{#1}{#2}%
+ \raise\ht0\vbox to #1{}%
+ \lower\dp0\vtop to #1{}%
+ \hfil\pmat@hidevrule{#2}{#1}}%
+ \kern-#1\pmat@hidehrule{#2}{#1}}}}
+\fi
+%
+% All pmat internal parameters can be accessed/changed externaly through
+% the macros \pmatget and \pmatset (to hide the names of the parameters).
+% Currently there are 7 parameters defined:
+%
+% 0 pmat@dashwidth ------- length of one dash ``unit''
+% 1 pmat@dashheight ------ thickness of the dash lines
+% 2 pmat@minlinegap ------ the minimum gap between lines
+% 3 pmat@mincolumngap ---- the minimum gap between columns
+% 4 pmat@minentrywidth --- minimum width of each entry of the matrix
+% 5 pmat@minentryheight -- minimum height of each entry of the matrix
+% 6 pmat@minentrydepth --- minimum depth of each entry of the matrix
+%
+\newdimen\pmat@dashwidth\pmat@dashwidth=2.88pt
+\newdimen\pmat@dashheight\pmat@dashheight=.36pt
+\newdimen\pmat@minlinegap\pmat@minlinegap=2pt
+\newdimen\pmat@mincolumngap\pmat@mincolumngap=8pt
+\newdimen\pmat@minentrywidth\pmat@minentrywidth=0pt
+\newdimen\pmat@minentryheight\pmat@minentryheight=6pt
+\newdimen\pmat@minentrydepth\pmat@minentrydepth=1.5pt
+%% 2.88 and .36pt correspond to an integral number of pixels at
+%% 400dpi and 600 dpi.
+%% minentrydepth+0.5(minlinegap+dashheight) should be smaller than dashwidth
+\def\pmatget#1{\ifcase#1\pmat@dashwidth\or\pmat@dashheight\or
+ \pmat@minlinegap\or\pmat@mincolumngap\or\pmat@minentrywidth\or
+ \pmat@minentryheight\or\pmat@minentrydepth\fi}
+\def\pmatset#1#2{\ifcase#1\pmat@dashwidth=#2\or\pmat@dashheight=#2\or
+ \pmat@minlinegap=#2\or\pmat@mincolumngap=#2\or\pmat@minentrywidth=#2\or
+ \pmat@minentryheight=#2\or\pmat@minentrydepth=#2\fi}
+%
+% Some useful macros
+%
+\def\pmat@roundup#1{\advance\dimen#1 by \pmat@dashwidth
+ \advance\dimen#1 by -1sp
+ \divide\dimen#1 by \pmat@dashwidth
+ \multiply\dimen#1 by \pmat@dashwidth}
+\def\pmat@normalizebox#1{\setbox0=\hbox{#1}%
+ \ifdim\wd0>\pmat@minentrywidth
+ \dimen0=\wd0\else\dimen0=\pmat@minentrywidth\fi
+ \ifdim\ht0>\pmat@minentryheight
+ \dimen2=\ht0\else\dimen2=\pmat@minentryheight\fi
+ \ifdim\dp0>\pmat@minentrydepth
+ \dimen4=\dp0\else\dimen4=\pmat@minentrydepth\fi
+ \advance\dimen0 by.5\pmat@mincolumngap\advance\dimen0 by\pmat@dashheight
+ \advance\dimen2 by.5\pmat@minlinegap\advance\dimen2 by.5\pmat@dashheight
+ \advance\dimen4 by.5\pmat@minlinegap\advance\dimen4 by.5\pmat@dashheight
+ \pmat@roundup0\advance\dimen0 by-\wd0\pmat@roundup2\pmat@roundup4%
+ \hbox{\vrule width 0pt height\dimen2 depth\dimen4%
+ \kern.5\dimen0%
+ \ifpmat@debug
+ \copy0\kern-\wd0\pmat@makeblankbox{0pt}{0.1pt}%
+ \else
+ \box0%
+ \fi
+ \kern.5\dimen0}}
+\def\pmat@hdashA{\cleaders\hbox to \pmat@dashwidth{\hss\vrule
+ width .5\pmat@dashwidth height .5\pmat@dashheight depth .5\pmat@dashheight
+ \hss}\hfill}
+\def\pmat@hdashB{\cleaders\hbox to \pmat@dashwidth{\vrule
+ width .25\pmat@dashwidth height .5\pmat@dashheight depth .5\pmat@dashheight
+ \hss\vrule
+ width .25\pmat@dashwidth height .5\pmat@dashheight depth .5\pmat@dashheight
+ }\hfill}
+\def\pmat@vdashA{\cleaders\vbox to \pmat@dashwidth{\vss\hrule
+ width \pmat@dashheight height .5\pmat@dashwidth depth 0pt\vss}\vfill}
+\def\pmat@vdashB{\cleaders\vbox to \pmat@dashwidth{\hrule
+ width \pmat@dashheight height .25\pmat@dashwidth depth 0pt\vss\hrule
+ width \pmat@dashheight height .25\pmat@dashwidth depth 0pt}\vfill}
+\def\pmat@iter#1{\ifx#1\end\let\next=\relax\else
+ \let\next=\pmat@iter\edef\pmat@arg{#1\pmat@arg}%
+ \edef\pmat@omit{\omit\hfil&\pmat@omit}\fi\next}
+\def\pmat@build#1{\let\pmat@arg=\empty\def\pmat@omit{\omit\hfil\cr}%
+ \pmat@iter#1\end}
+\def\pmat@nextitem#1#2\end{\def\pmat@arg{#2}%\message{(#1)}
+ \global\setbox3=\hbox{\kern\wd0\if#1|\kern-.5\pmat@dashheight
+ \copy2\kern-.5\pmat@dashheight\fi\unhbox3}}
+%
+% The main pmat macros
+%
+\def\pmat#1#2#3{\def\pmat@delimL{#1}\pmat@build{#2}\def\pmat@delimR{#3}%
+ \setbox0=\hbox{$\left#1 TEST \right#3$}%To test delimiters
+ \setbox0=\vbox\bgroup\offinterlineskip\tabskip=0pt%
+ \everycr{}\def\-{\noalign{\penalty 1}}%
+ \halign\bgroup&\hfil\pmat@normalizebox{$##$}\hfil\cr}
+\def\endpmat{\pmat@omit
+ \egroup\egroup
+ \dimen0=\ht0\advance\dimen0 by\dp0%
+ \setbox2=\vbox to \dimen0{\kern.5\pmat@dashwidth
+ \pmat@vdash\kern.5\pmat@dashwidth}%
+ \ht2=\ht0\dp2=\dp0%
+ \setbox4=\hbox to \wd0{\kern.5\pmat@dashwidth
+ \pmat@hdash\kern.5\pmat@dashwidth}%
+ \ht4=0pt\dp4=0pt%
+ \setbox0=\vbox{\offinterlineskip\unvbox0%
+ \global\setbox1=\vbox{}%
+ \setbox0=\lastbox
+%% Unpack and process last hbox of alignment (generated by \pmat@omit)
+ \setbox0=\hbox{\unhbox0\unskip
+ \setbox0=\lastbox
+ \global\setbox3=\hbox{\kern\wd0}%
+ \loop
+ \unskip\setbox0=\lastbox
+ \ifhbox0\expandafter\pmat@nextitem\pmat@arg-\end\repeat}%
+%% Place dashed lines where requested between the lines of the alignment
+ \loop
+ \skip0=\lastskip\unskip
+ \ifnum\lastpenalty>0\unpenalty\global\setbox1=\vbox{\copy4\unvbox1}\fi
+ \setbox0=\lastbox
+ \ifhbox0\global\setbox1=\vbox{\box0\unvbox1}\repeat}%
+% \delimmiterfactor=975
+% \delimitershortfall=2pt
+ \left\pmat@delimL
+ \dimen0=\wd3\vcenter{\hbox{\kern-.4\pmat@dashwidth
+ \raise-\dp1\box3\kern-\dimen0\box1\kern-.4\pmat@dashwidth}}%
+ \right\pmat@delimR
+}
+%
+% restore catcode of @
+%
+\pmat@catcode
+%
+% That's all, folks!
+%
+\endinput
diff --git a/macros/generic/pmat/pmat.tex b/macros/generic/pmat/pmat.tex
new file mode 100644
index 0000000000..63a97d2b30
--- /dev/null
+++ b/macros/generic/pmat/pmat.tex
@@ -0,0 +1,156 @@
+\documentclass[a4paper]{article}
+\usepackage{pmat}
+
+\begin{document}
+
+\title{The \texttt{pmat} package to typeset partitioned matrices}
+\author{Tom\'as Oliveira e Silva \\[4pt] Universidade de Aveiro \\
+ Aveiro, Portugal \\[8pt] email: \texttt{tos@inesca.pt}}
+\date{January 1, 1996}
+\maketitle
+
+This document is a very short description of the \texttt{pmat} package,
+version $0.1$. The \texttt{pmat} package provides the macros \verb+\pmat+
+and \verb+\endpmat+ to typeset partitioned matrices, and it works under
+\TeX\ and under \LaTeX\ (any version). Under \LaTeX\ it is possible to replace
+\verb+\pmat+ and \verb+\endpmat+ by \verb+\begin{pmat}+ and \verb+\end{pmat}+,
+respectively.
+
+The \verb+\pmat+ macro takes three arguments. The first one is a left
+delimiter (the thing you put immediately after a \verb+\left+ command).
+The last one is a right delimiter (the thing you put immediately after a
+\verb+\right+ command). As usual, a delimiter may be omitted by using a dot
+(.). The middle argument specifies the dashed vertical lines that are to be
+placed between columns of the matrix. This argument must contain exactly $n-1$
+characters, where $n$ is the number of columns of the matrix. If a character
+is a \verb+|+ then a dashed vertical line will be placed between the
+appropriate columns. Otherwise, no dashed line will be placed between those
+columns (we recommend the use of the character dot (.) in these cases) . The
+format of the entries of the partitioned matrix follows the conventions of
+plain \TeX, i.e., entries are separated by a \verb+&+ (just like in \LaTeX),
+but lines are separated by a \verb+\cr+ (instead of the \verb+\\+ used in
+\LaTeX). All entries are typeset in math mode (in \verb+\textstyle+). For
+technical reasons, a \verb+\cr+ must also be placed at the end of the last
+line. The placement of horizontal dashed lines is done with the command
+\verb+\-+, which must be placed immediately after the command \verb+\cr+. For
+example, the code
+\begin{verbatim}
+\[
+ \begin{pmat}[{.|}]
+ a_{11} & a_{12} & b_{11} \cr
+ a_{21} & a_{22} & b_{21} \cr\-
+ c_{11} & c_{12} & d_{11} \cr
+ \end{pmat}
+\]
+\end{verbatim}
+produces the matrix
+\[
+ \begin{pmat}[{.|}]
+ a_{11} & a_{12} & b_{11} \cr
+ a_{21} & a_{22} & b_{21} \cr\-
+ c_{11} & c_{12} & d_{11} \cr
+ \end{pmat}
+\]
+
+There are two macros that can be used to modify the shape of the crossings
+between horizontal and vertical dash lines. The first one, \verb+\pmatcross+,
+makes horizontal and vertical dash lines to cross. (It is the default.) The
+other, \verb+\pmatnocross+, makes the lines not to cross. Under \LaTeX2e, the
+first one can be made the default (it already is) by passing the option
+\verb+cross+ to the package, and the second one can be made the default by
+passing the option \verb+nocross+ to the package. The difference between the
+two forms can be examined in the following example (before the second
+\verb+\begin{pmat}+ we have put a \verb+\pmatnocross+)
+\[
+ \begin{pmat}[{.|}]
+ a_{11} & a_{12} & b_{11} \cr
+ a_{21} & a_{22} & b_{21} \cr\-
+ c_{11} & c_{12} & d_{11} \cr
+ \end{pmat}
+ \qquad\qquad
+ \pmatnocross\begin{pmat}[{.|}]
+ a_{11} & a_{12} & b_{11} \cr
+ a_{21} & a_{22} & b_{21} \cr\-
+ c_{11} & c_{12} & d_{11} \cr
+ \end{pmat}
+\]
+
+There are seven internal parameters that control the inner workings of the
+\verb+pmat+ macros. To hide their names they can only be accessed or changed
+through the macros \verb+\pmatget+ and \verb+\pmatset+. The \verb+\pmatget+
+macro takes one argument, the number of the parameter (from 0 to 6). It
+``returns'' the current value of that parameter. The \verb+\pmatset+ macro
+takes two arguments, the number of the parameter, and its new value. All
+parameters are dimensions, so do not forget to put a unit of length (such as
+\verb+mm+) after its numerical value. The seven parameters are the following:
+\begin{description}
+ \item[0] This parameter controls the length of a dash ``unit''. All
+ horizontal and vertical dash lines have a length that is an integer
+ multiple of this parameter. Its default value is \verb+2.88pt+.
+ \item[1] This parameter controls the thickness of the dash lines. Its
+ default value is \verb+0.36pt+.
+ \item[2] This parameter controls the minimum distance between two lines. Its
+ default value is \verb+2pt+.
+ \item[3] This parameter controls the minimum distance between two columns.
+ Its default value is \verb+8pt+.
+ \item[4] This parameter controls the minimum width of each entry of the
+ matrix. Its default value is \verb+0pt+.
+ \item[5] This parameter controls the minimum height of each entry of the
+ matrix. Its default value is \verb+6pt+.
+ \item[6] This parameter controls the minimum depth of each entry of the
+ matrix. Its default value is \verb+1.5pt+.
+\end{description}
+Due to the way lengths are quantized, to avoid larger than strictly necessary
+gaps between lines the values of $[5]+([1]+[2])/2$ and $[6]+([1]+[2])/2$
+should be smaller but close to a multiple of $[0]$. (A number inside square
+brackets refers to the corresponding parameter.) For example, the code
+\begin{verbatim}
+\[
+ \pmatset{1}{0.72pt}
+ \pmatset{0}{2\pmatget{1}}
+ \pmatset{5}{0pt}
+ \pmatset{6}{0pt}
+ \begin{pmat}[{||}]
+ A_{11} & A_{12} & A_{13} \cr\-
+ A_{21} & A_{22} & A_{23} \cr\-
+ A_{31} & A_{32} & A_{33} \cr
+ \end{pmat}
+\]
+\end{verbatim}
+produces the matrix
+\[
+ \pmatset{1}{0.72pt}
+ \pmatset{0}{2\pmatget{1}}
+ \pmatset{5}{0pt}
+ \pmatset{6}{0pt}
+ \begin{pmat}[{||}]
+ A_{11} & A_{12} & A_{13} \cr\-
+ A_{21} & A_{22} & A_{23} \cr\-
+ A_{31} & A_{32} & A_{33} \cr
+ \end{pmat}
+\]
+
+For a uniform look of the document all matrices, partitioned and not
+partitioned, should be typeset using the \verb+pmat+ macros.
+
+\bigskip
+{\bfseries Possible future improvements:} Instead of quantizing the height and
+depth of each entry separately, maybe their sum should be quantized. Perhaps
+the minimum height and depth of each entry should depend upon the current font
+size.
+
+\bigskip
+\hrule height 1pt
+\[
+ \begin{pmat}[{|}]
+ \mathbf{A} & \mathbf{B} \cr\-
+ \mathbf{C} & \mathbf{D} \cr
+ \end{pmat} = \begin{pmat}[{.|}]
+ -k_1 & -k_2\sqrt{1-k^2_1} & \sqrt{(1-k^2_1)(1-k^2_2)} \cr
+ \sqrt{1-k^2_1} & -k_1k_2 & k_1\sqrt{1-k^2_2} \cr\-
+ 0 & \sqrt{1-k^2_2} & k_2 \cr
+ \end{pmat}
+\]
+
+
+\end{document}
diff --git a/macros/generic/pmat/readme b/macros/generic/pmat/readme
new file mode 100644
index 0000000000..1e82e933a5
--- /dev/null
+++ b/macros/generic/pmat/readme
@@ -0,0 +1,11 @@
+The pmat package can be used to typeset partitioned matrices in
+TeX, LaTeX, and LaTeX2e. I hope it will be useful to you. Please
+let me know of any suggestions for improvement, general comments,
+etc. My e-mail address is tos@inesca.pt
+
+The package is provided "as is". The files pmat.tex, pmat.sty and
+readme (this file) should be copied together. These files are
+freeware. You should not change them in any way, nor use them in
+a commercial product without prior concent.
+
+Tom\'as Oliveira e Silva
diff --git a/macros/generic/poormanlog/README b/macros/generic/poormanlog/README
new file mode 100644
index 0000000000..fc5f096fdc
--- /dev/null
+++ b/macros/generic/poormanlog/README
@@ -0,0 +1,145 @@
+DOCUMENTATION OF POORMANLOG (v0.04, 2019/02/17)
+===========================
+
+(see License at bottom of this file)
+
+The poormanlog.tex file has no dependencies. It provides (expandable)
+macros for base 10 logarithms and powers of 10 with a bit less than 9
+digits of precision (\PMLogZ and \PMPowTen), but its main use will be
+in conjunction with xintexpr.sty, as it provides to the latter
+functions log10() and pow10() and does on-demand modification of the
+power operators ** or ^ to compute according to pow10(y*log10(x)).
+
+This usage will become obsolete when xintexpr will natively implement
+in arbitrary precision the log10() and pow10() functions.
+
+The file can be used with Plain TeX (\input poormanlog) or as a
+regular LaTeX package.
+
+
+Example (with Plain TeX)
+------------------------
+
+ \input xintexpr.sty
+ \input poormanlog.tex
+
+ \xinteval{log10(3.14159265), pow10(2.71828183)}
+
+ \poormanloghack{**}
+
+ \xinteval{3.14159265**2.71828183}
+
+ \poormanloghack{^}
+
+ \xinteval{3.14159265^2.71828183}
+
+ \bye
+
+
+User interface
+--------------
+
+\PMLogZ{#1} expands in two steps.
+
+input: #1 is a mantissa ddddddddd (it may be an f-expandable macro)
+ with exactly 9 digits (the first one must not be zero)
+output: 9 digits xxxxxxxxx such that log10(d.dddddddd) is about 0.xxxxxxxxx
+
+It seems from testing that absolute error is not much more than 1 unit in
+the last place, and result differs from rounded mathematical value by at
+most 1 unit in the 9th digit. (attention not rigorously proven).
+
+\PMPowTen{#1} expands in two steps.
+
+input: #1 is (or expands to) exactly 9 digits ddddddddd representing
+ 0.ddddddddd
+output: 9 digits xxxxxxxxx, first one not zero,
+ such that 10^0.ddddddddd is about x.xxxxxxxx
+
+It seems from testing that absolute error is less than 2 units in
+the last place, and result differs from rounded mathematical value by at
+most 2 units in the 9th digit. (attention not rigorously proven).
+
+\PoorManLogBaseTen{#1}
+
+ in presence of xintfrac this will accept input as recognized by xintfrac
+ and produce the logarithm in base 10 with an error (believed to be at
+ most) about 1 unit in the 9th (i.e. last) fractional digit.
+
+ xintfrac may be loaded before or after.
+
+\PoorManPowerOfTen{#1}
+
+ in presence of package xintfrac this will accept input as recognized by
+ xintfrac and produce the 10^#1 with 9 digits of float precision, with an
+ error (believed to be) at most 2 units in the last place. Of course for
+ this the input must be precise enough to have 9 fractional digits of
+ **fixed point** precision.
+
+ xintfrac may be loaded before or after.
+
+\PoorManPower{#1}{#2}
+
+ in presence of package xintfrac computes #1 to the power #2
+
+ xintfrac may be loaded before or after.
+
+log10()
+
+ the log10() function is made available, if xintexpr.sty is loaded, for
+ usage within \xinteval and \xintfloateval. If a log10() function is
+ already defined in xintexpr it will not be overwritten
+
+ xintexpr may be loaded before or after.
+
+pow10()
+
+ pow10() function is made available, if xintexpr.sty is loaded, for usage
+ within \xinteval and \xintfloateval. If a pow10() function is already
+ defined in xintexpr it will not be overwritten
+
+ xintexpr may be loaded before or after.
+
+modification of ** or ^ operators in \xintexpr and \xintfloatexpr
+
+ \poormanloghack{**}
+ \poormanloghack{^}
+
+ They will now use pow10(y*log10(x)) formula to compute x to the power y
+
+ Of course this means drop of precision, but allows non-integer exponents.
+ (half-integer exponents are already accepted in \xintfloatexpr natively).
+
+ ** xintexpr must have been loaded before **
+
+Example with LaTeX :
+
+ \documentclass{article}
+ \usepackage{xintexpr}
+ \usepackage{poormanlog}% makes log10() and pow10() available
+ \poormanloghack{**} % modifies ** operator
+ \begin{document}
+ \xinteval{3.14159265**2.71828183, log10(3.14159265), pow10(2.71828)}
+ \end{document}
+
+
+LICENSE
+-------
+
+Copyright (C) 2019, Jean-Francois Burnol.
+
+This Work may be distributed and/or modified under the conditions of the
+LaTeX Project Public License version 1.3c. This version of this license
+is in
+
+ <http://www.latex-project.org/lppl/lppl-1-3c.txt>
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+This Work has the LPPL maintenance status `author-maintained'.
+
+The Author of this Work is Jean-Francois Burnol.
+
+This Work consists of files poormanlog.tex, poormanlog.sty and the
+README.
diff --git a/macros/generic/poormanlog/poormanlog.sty b/macros/generic/poormanlog/poormanlog.sty
new file mode 100644
index 0000000000..c740360e98
--- /dev/null
+++ b/macros/generic/poormanlog/poormanlog.sty
@@ -0,0 +1,17 @@
+%% poormanlog.sty v0.04, 2019/02/17
+%%
+%% Copyright (C) 2019, Jean-Francois Burnol
+%%
+%% This Work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License version 1.3c.
+%%
+%% This Work has the LPPL maintenance status `author-maintained'.
+%%
+%% The Author of this Work is Jean-Francois Burnol.
+%%
+%% This Work consists of files poormanlog.tex, poormanlog.sty and
+%% the accompanying README
+%%
+\ProvidesPackage{poormanlog}[2019/02/17 v0.04 log and powers with 9 digits (JFB)]
+\input{poormanlog.tex}% see README file for user documentation
+\endinput
diff --git a/macros/generic/poormanlog/poormanlog.tex b/macros/generic/poormanlog/poormanlog.tex
new file mode 100644
index 0000000000..e29c208901
--- /dev/null
+++ b/macros/generic/poormanlog/poormanlog.tex
@@ -0,0 +1,421 @@
+%% poormanlog.tex v0.04, 2019/02/17
+%%
+%% Copyright (C) 2019, Jean-Francois Burnol
+%%
+%% This Work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License version 1.3c.
+%%
+%% This Work has the LPPL maintenance status `author-maintained`.
+%%
+%% The Author of this Work is Jean-Francois Burnol (jfbu AT free DOT fr)
+%%
+%% This Work consists of files poormanlog.tex, poormanlog.sty and the
+%% README
+%%
+%% ************ BARELY TESTED ****************
+%% >>>>>>> WARNING FOR LACK OF TIME I HAVE NOT YET VALIDATED FULLY <<<<<
+%% >>>>>>> NOR HAVE I MADE PRECISE ESTIMATES. USE AT YOUR OWN RISK <<<<<
+%% (bug reports welcome)
+%% ************ BARELY TESTED ****************
+%
+% Package macro private prefix: \PML@
+%
+% SEE README FOR USER DOCUMENTATION
+%
+\ifx\numexpr\JFBUundefined
+ \message{**** poormanlog requires e-TeX **** LOADING ABORTED ****}%
+\endinput\fi
+%
+% CATCODES (AND AUXILIARIES FOR PLAIN TEX)
+%
+\expandafter\edef\csname @tempa\endcsname
+{%
+ \catcode0 \the\catcode0 %
+ \catcode`\noexpand\_ \the\catcode`\_ %
+ \catcode`\noexpand\^ \the\catcode`\^ %
+ \catcode`\noexpand\: \the\catcode`\: %
+ \catcode`\noexpand\* \the\catcode`\* %
+ \catcode`\noexpand\@ \the\catcode`\@ %
+}%
+\catcode`\@ 11 %
+\if1\ifx\@namedef\JFBUundefined1\else\ifx\@namedef\relax1\else0\fi\fi
+ \def\@namedef#1{\expandafter\def\csname #1\endcsname}%
+ \def\@nameuse#1{\csname #1\endcsname}%
+\fi
+\long\def\@gobble#1{}%
+%
+% TABLES
+%
+% The algorithm for \PMLogZ is the reverse engineering of the one I did
+% for \PMPowTen. I had an other approach for log10 initially but it was
+% less accurate than what testings of \PMPowTen showed. The same accuracy, even
+% slightly better, was then obtain with \PMLogZ by imitating the latter
+% algorithm (the original was faster but achieved only about 6ulp max error,
+% although most of the time the result was correct up to +2 or -2,
+% the present one appears to achieve not much worse than 1ulp maximal error).
+%
+% method of CORDIX type combined with usage of \numexpr "scaling" operations
+%
+\@namedef{PML@1@10}{}%
+\@namedef{PML@1@9}{*1349157701/1071674055}%
+\@namedef{PML@1@8}{*946017331/596896583}%
+\@namedef{PML@1@7}{*495834591/248505967}%
+\@namedef{PML@1@6}{*870020383/346361353}%
+\@namedef{PML@1@5}{*1499219281/474094764}%
+\@namedef{PML@1@4}{*1978893117/497075477}%
+\@namedef{PML@1@3}{*368683859/73562101}%
+\@namedef{PML@1@2}{*1295603161/205339263}%
+\@namedef{PML@1@1}{*1268797901/159732192}%
+\@namedef{PML@1@0}{*10}%
+%
+\@namedef{PML@P1@10}{}%
+\@namedef{PML@P1@9}{*1071674055/1349157701}%
+\@namedef{PML@P1@8}{*596896583/946017331}%
+\@namedef{PML@P1@7}{*248505967/495834591}%
+\@namedef{PML@P1@6}{*346361353/870020383}%
+\@namedef{PML@P1@5}{*474094764/1499219281}%
+\@namedef{PML@P1@4}{*497075477/1978893117}%
+\@namedef{PML@P1@3}{*73562101/368683859}%
+\@namedef{PML@P1@2}{*205339263/1295603161}%
+\@namedef{PML@P1@1}{*159732192/1268797901}%
+\@namedef{PML@P1@0}{/10}%
+%
+\@namedef{PML@2@12}{*1759219355/1983514284}%
+\@namedef{PML@2@11}{*1038555297/1159316503}%
+\@namedef{PML@2@10}{*1446048050/1598130251}%
+\@namedef{PML@2@9}{*200795995/219705814}%
+\@namedef{PML@2@8}{*19701438/21342313}%
+\@namedef{PML@2@7}{*699035545/749721341}%
+\@namedef{PML@2@6}{*342419462/363593499}%
+\@namedef{PML@2@5}{*262151601/275592401}%
+\@namedef{PML@2@4}{*643237001/669488001}%
+\@namedef{PML@2@3}{*909207215/936896697}%
+\@namedef{PML@2@2}{*14850599/15150601}%
+\@namedef{PML@2@1}{*119401199/120601201}%
+\@namedef{PML@2@0}{}%
+\@namedef{PML@2@-1}{*120601201/119401199}%
+\@namedef{PML@2@-2}{*15150601/14850599}%
+\@namedef{PML@2@-3}{*936896697/909207215}%
+\@namedef{PML@2@-4}{*669488001/643237001}%
+\@namedef{PML@2@-5}{*275592401/262151601}%
+\@namedef{PML@2@-6}{*363593499/342419462}%
+\@namedef{PML@2@-7}{*749721341/699035545}%
+\@namedef{PML@2@-8}{*21342313/19701438}%
+\@namedef{PML@2@-9}{*219705814/200795995}%
+\@namedef{PML@2@-10}{*1598130251/1446048050}%
+\@namedef{PML@2@-11}{*1159316503/1038555297}%
+\@namedef{PML@2@-12}{*1983514284/1759219355}%
+%
+%\@namedef{PML@3@9}{*166909427/168418392}%
+%\@namedef{PML@3@8}{*233438999/235314001}%
+%\@namedef{PML@3@7}{*921380630/927852921}%
+\@namedef{PML@3@6}{*92333611/92889278}%
+\@namedef{PML@3@5}{*957602399/962402401}%
+\@namedef{PML@3@4}{*1871252999/1878753001}%
+\@namedef{PML@3@3}{*739112555/741333222}%
+\@namedef{PML@3@2}{*2997001/3003001}%
+\@namedef{PML@3@1}{*11994001/12006001}%
+\@namedef{PML@3@0}{}%
+\@namedef{PML@3@-1}{*12006001/11994001}%
+\@namedef{PML@3@-2}{*3003001/2997001}%
+\@namedef{PML@3@-3}{*741333222/739112555}%
+\@namedef{PML@3@-4}{*1878753001/1871252999}%
+\@namedef{PML@3@-5}{*962402401/957602399}%
+\@namedef{PML@3@-6}{*92889278/92333611}%
+%\@namedef{PML@3@-7}{*927852921/921380630}%
+%\@namedef{PML@3@-8}{*235314001/233438999}%
+%\@namedef{PML@3@-9}{*168418392/166909427}%
+%
+\@namedef{PML@4@5}{*47988001/48012001}%
+\@namedef{PML@4@4}{*74985001/75015001}%
+\@namedef{PML@4@3}{*399940003/400060003}%
+\@namedef{PML@4@2}{*299970001/300030001}%
+\@namedef{PML@4@1}{*1199940001/1200060001}%
+\@namedef{PML@4@0}{}%
+\@namedef{PML@4@-1}{*1200060001/1199940001}%
+\@namedef{PML@4@-2}{*300030001/299970001}%
+\@namedef{PML@4@-3}{*400060003/399940003}%
+\@namedef{PML@4@-4}{*75015001/74985001}%
+\@namedef{PML@4@-5}{*48012001/47988001}%
+%%
+%%
+%% LOG IN BASE 10 : \the\numexpr\PML@ ddddddddd.\relax
+%%
+%% Exactly 9 digits representing d.dddddddd, first one at least 1.
+%% Goal is to compute log10(d.dddddddd) with 9 digits
+%%
+\def\PML@#1.{\expandafter\PML@a\the\numexpr#1/100000.#1.}%
+\def\PML@a#1.{\expandafter\PML@ai
+ \the\numexpr
+ \ifnum#1>2817 %
+ \ifnum#1>5622 %
+ \ifnum#1>7078 \ifnum#1>8912 10\else 9\fi
+ \else 8%
+ \fi
+ \else
+ \ifnum#1>3547 \ifnum#1>4466 7\else 6\fi
+ \else 5%
+ \fi
+ \fi
+ \else
+ \ifnum#1>1412 %
+ \ifnum#1>1777 \ifnum#1>2238 4\else 3\fi
+ \else 2%
+ \fi
+ \else
+ \ifnum#1>1121 1\else 0\fi
+ \fi
+ \fi
+ .%
+}%
+\def\PML@ai #1.#2.%
+ {\expandafter\PML@b\the\numexpr#2\@nameuse{PML@1@#1}.%
+ )*774923109/1784326399+#100000000}%
+%
+\def\PML@b#1.{\expandafter\PML@bi\the\numexpr#1/1000000.#1.}%
+\def\PML@bi#1.{\expandafter\PML@bii
+ \the\numexpr
+ \ifnum#1>994 %
+ \ifnum#1>1056 %
+ \ifnum#1>1088 %
+ \ifnum#1>1110 \ifnum#1>1121 12\else 11\fi
+ \else \ifnum#1>1099 10\else 9\fi
+ \fi
+ \else
+ \ifnum#1>1066 \ifnum#1>1077 8\else 7\fi
+ \else 6%
+ \fi
+ \fi
+ \else
+ \ifnum#1>1024 %
+ \ifnum#1>1035 \ifnum#1>1045 5\else 4\fi
+ \else 3%
+ \fi
+ \else
+ \ifnum#1>1004 \ifnum#1>1014 2\else 1\fi
+ \else 0%
+ \fi
+ \fi
+ \fi
+ \else
+ \ifnum#1>936 %
+ \ifnum#1>965 %
+ \ifnum#1>974 \ifnum#1>984 -1\else -2\fi
+ \else -3%
+ \fi
+ \else
+ \ifnum#1>945 \ifnum#1>955 -4\else -5\fi
+ \else -6%
+ \fi
+ \fi
+ \else
+ \ifnum#1>908 %
+ \ifnum#1>918 \ifnum#1>927 -7\else -8\fi
+ \else -9%
+ \fi
+ \else
+ \ifnum#1>890 \ifnum#1>899 -10\else -11\fi
+ \else -12%
+ \fi
+ \fi
+ \fi
+ \fi
+ .%
+}%
+\def\PML@bii#1.#2.%
+ {\expandafter\PML@c\the\numexpr#2\@nameuse{PML@2@#1}.+#10000000}%
+%
+\def\PML@c#1.%
+ {\expandafter\PML@ci\the\numexpr#1/1000000-1000.#1.}%
+\def\PML@ci#1.#2.%
+ {\expandafter\PML@d\the\numexpr#2\@nameuse{PML@3@#1}.+#1000000}%
+%
+\def\PML@d#1.%
+ {\expandafter\PML@di\the\numexpr#1/100000-10000.#1.}%
+\def\PML@di#1.#2.%
+ {\expandafter\PML@e\the\numexpr#2\@nameuse{PML@4@#1}-1000000000.+#100000}%
+% we have reached
+% x = 1 + t/10^9 represented by t
+% log(x) represented by 10^9 times (t/10^9 (2.10^9 - t)/2.10^9)
+\def\PML@e #1.{(#1*(2000000000-#1)/2000000000+}%
+%%
+%%
+%% POWER OF TEN : \the\numexpr\PML@Pa ddddddddd.\relax
+%%
+%% Exactly 9 digits in input representing number 0.ddddddddd
+%% Goal is to compute 10^0.ddddddddd with 9 digits.
+%%
+\def\PML@Pa#1#2{\expandafter\PML@Pai\the\numexpr#1#2/10.#1#2}%
+\def\PML@Pai#1.#2.{%
+ \expandafter\PML@Pb\the\numexpr(#2-#100000000)*2079839159/90326267.%
+ \@nameuse{PML@P1@#1}%
+}%
+% problem with minus sign interfering with token count so simply fetch all
+% the -#1 is to re-use constants already defined for log
+\def\PML@Pb#1.{\expandafter\PML@Pbi\the\numexpr-#1/100000000.#1.}%
+\def\PML@Pbi#1.#2.%
+ {\expandafter\PML@Pc\the\numexpr#2+#100000000.\@nameuse{PML@2@#1}}%
+% \pm 0.00d, d at most 5, 8 digits integer N for N/10^10
+\def\PML@Pc#1.{\expandafter\PML@Pci\the\numexpr-#1/10000000.#1.}%
+\def\PML@Pci#1.#2.%
+ {\expandafter\PML@Pd\the\numexpr#2+#10000000.\@nameuse{PML@3@#1}}%
+% \pm 0.000d, d at most 5, 7 digits
+\def\PML@Pd#1.{\expandafter\PML@Pdi\the\numexpr-#1/1000000.#1.}%
+\def\PML@Pdi#1.#2.%
+ {\expandafter\PML@Pe\the\numexpr#2+#1000000.\@nameuse{PML@4@#1}}%
+% \pm 0.0000d, d at most 5, 6 digits integer N for N/10^10
+% exp of that must fit in 10 digits, and there will be leading 1, hence
+% only 9 digits available for fitting x + x^2/2, x = Ne-10
+% so we must compute via numexpr
+% 10^9*x*(1+x/2) = 10^9*N/10^10*(2.10^10+ N)/2.10^10
+% with N in absolute value at most 500000.
+% N*(2.10^9+N/10)/2.10^10 which is about N/10
+\def\PML@Pe#1.{(1000000000+#1*(200000000+#1/100)/2000000000)}%
+%%
+%%
+%% BASIC USER INTERFACE : \PMLogZ, \PMPowTen
+%%
+% Another way of inserting leading zeros is found in xint source code,
+% maybe faster. "Z" is for reminding that output has leading zeros.
+\def\PMLogZ#1%
+{%
+ \romannumeral-`0\expandafter\@gobble
+ % \PML@ never gives something negative, hopefully...
+ \the\numexpr1000000000+\expandafter\PML@\romannumeral-`0#1.\relax
+}%
+\def\PMPowTen#1{\the\numexpr\expandafter\PML@Pa\romannumeral-`0#1.\relax}%
+%%
+%%
+%% ADD-ONS TO XINTFRAC : \PoorManLogBaseTen{#1}, \PoorManPowerOfTen{#1}
+%% and \PoorManPower{#1}{#2}
+%% Does not matter if xintfrac loaded before or after.
+%%
+\def\PoorManLogBaseTen{\romannumeral0\poormanlogbaseten}%
+\def\poormanlogbaseten #1%
+ {\expandafter\PML@logbaseten\romannumeral0\XINTinfloat[9]{#1}}%
+\def\PML@logbaseten#1[#2]%
+{%
+ \xintiiadd{\xintDSx{-9}{\the\numexpr#2+8\relax}}{\the\numexpr\PML@#1.}%
+ [-9]%
+}%
+%
+\def\PoorManPowerOfTen{\the\numexpr\poormanpoweroften}%
+\def\poormanpoweroften #1%
+ {\expandafter\PML@powoften\romannumeral0\xintraw{#1}}%
+\catcode`\_ 11 %
+\def\PML@powoften#1{%
+ \xint_UDzerominusfork
+ #1-\PML@powoften@zero
+ 0#1\PML@powoften@neg
+ 0-\PML@powoften@pos
+ \krof #1%
+}%
+\catcode`\_ 8 %
+\def\PML@powoften@zero 0{1\relax}%/1[0]
+\def\PML@powoften@pos#1[#2]{%
+ \expandafter\PML@powoften@pos@a\romannumeral0\xintround{9}{#1[#2]}.%
+}%
+\def\PML@powoften@pos@a#1.#2.{\PML@Pa#2.\expandafter[\the\numexpr-8+#1]}%
+\def\PML@powoften@neg#1[#2]{%
+ \expandafter\PML@powoften@neg@a\romannumeral0\xintround{9}{#1[#2]}.%
+}%
+\def\PML@powoften@neg@a#1.#2.{\ifnum#2=0 \xint_afterfi{1\relax/1[#1]}\else
+ \expandafter\expandafter\expandafter
+ \PML@Pa\expandafter\@gobble\the\numexpr2000000000-#2.%
+ \expandafter[\the\numexpr-9+#1\expandafter]\fi
+}%
+%
+\def\PoorManPower#1#2% #1**#2
+{%
+ \PoorManPowerOfTen{\xintMul{#2}{\PoorManLogBaseTen{#1}}}%
+}%
+%%
+%% ADD-ONS TO XINTEXPR :
+%%
+%% log10(), pow10()
+%%
+%% Does not matter if xintexpr loaded before or after.
+%%
+\catcode`\_ 11 \catcode`\: 11 %
+\unless\ifcsname XINT_expr_func_log10\endcsname
+\@namedef{XINT_expr_func_log10}#1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\PoorManLogBaseTen{\XINT_expr_unlock #3}\endcsname
+}%
+\fi
+\unless\ifcsname XINT_flexpr_func_log10\endcsname
+\expandafter\let\csname XINT_flexpr_func_log10\expandafter\endcsname
+ \csname XINT_expr_func_log10\endcsname
+\fi
+%
+\unless\ifcsname XINT_expr_func_pow10\endcsname
+\@namedef{XINT_expr_func_pow10}#1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\PoorManPowerOfTen{\XINT_expr_unlock #3}\endcsname
+}%
+\fi
+\unless\ifcsname XINT_flexpr_func_pow10\endcsname
+\expandafter\let\csname XINT_flexpr_func_pow10\expandafter\endcsname
+ \csname XINT_expr_func_pow10\endcsname
+\fi
+%%
+%% On-demand modification of ** or ^ operators in \xintexpr and \xintfloatexpr
+%%
+\catcode`\* 11 \catcode0 12 %
+%
+\def\poormanloghack**{%
+\def\XINT_expr_op_** ##1%
+{%
+ \expandafter \XINT_expr_until_**_a
+ \expandafter ##1\romannumeral`^^@\expandafter\XINT_expr_getnext
+}%
+\def\XINT_expr_until_**_a ##1{%
+\def\XINT_expr_until_**_a ####1####2%
+{%
+ \xint_UDsignfork
+ ####2{\expandafter \XINT_expr_until_**_a \expandafter ##1%
+ \romannumeral`^^@##1}%
+ -{\XINT_expr_until_**_b ####1####2}%
+ \krof
+}}\expandafter\XINT_expr_until_**_a\csname XINT_expr_op_-ix\endcsname
+\def\XINT_expr_until_**_b ##1##2##3##4%
+{%
+ \ifnum ##2>\XINT_expr_precedence_**
+ \xint_afterfi
+ {\expandafter \XINT_expr_until_**_a \expandafter ##1%
+ \romannumeral`^^@\csname XINT_expr_op_##3\endcsname {##4}}%
+ \else
+ \xint_afterfi
+ {\expandafter ##2\expandafter ##3%
+ \csname .=\XINT:NEhook:two
+ \PoorManPower{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname
+ }%
+ \fi
+}%
+\let\XINT_flexpr_op_** \XINT_expr_op_**
+\let\XINT_flexpr_until_**_a\XINT_expr_until_**_a
+\let\XINT_flexpr_until_**_b\XINT_expr_until_**_b
+}%
+\catcode`\^ 11 \catcode`\* 7 %
+\def\poormanloghack^{%
+\def\XINT_expr_until_^_b ##1##2##3##4%
+{%
+ \ifnum ##2>\XINT_expr_precedence_^
+ \xint_afterfi
+ {\expandafter \XINT_expr_until_^_a \expandafter ##1%
+ \romannumeral`**@\csname XINT_expr_op_##3\endcsname {##4}}%
+ \else
+ \xint_afterfi
+ {\expandafter ##2\expandafter ##3%
+ \csname .=\XINT:NEhook:two
+ \PoorManPower{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname
+ }%
+ \fi
+}%
+\let\XINT_flexpr_until_^_b\XINT_expr_until_^_b
+}%
+\@tempa
+\def\poormanloghack#1{\csname poormanloghack#1\endcsname}%
+\endinput
diff --git a/macros/generic/poster/Changes b/macros/generic/poster/Changes
new file mode 100644
index 0000000000..7a71aa42f8
--- /dev/null
+++ b/macros/generic/poster/Changes
@@ -0,0 +1,7 @@
+poster.tex --------
+1.1 2010-05-13 - change license to lppl (hv)
+ - update documentation (hv)
+ - new LaTeX style file (hv)
+
+1.0 13 May 1993 - Added "\PosterPage".
+0.93 11 Feb 1993 - First stable release.
diff --git a/macros/generic/poster/Makefile b/macros/generic/poster/Makefile
new file mode 100644
index 0000000000..b8a81b8daa
--- /dev/null
+++ b/macros/generic/poster/Makefile
@@ -0,0 +1,71 @@
+
+# `Makefile' for `pst-3dplot.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = poster
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+ GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+# if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+# if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+# makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+# makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+# $(basename $<).glo
+# bibtex $(basename $<)
+ $(LATEX) poster1.tex && $(LATEX) poster1.tex && dvips poster1 && ps2pdf poster1.ps
+ tex poster2.tex && dvips poster2 && ps2pdf poster2.ps
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .Roessler .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+ $(RM) poster?.tex poster?.dvi poster?.aux poster?.ps poster?.log
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro ~/Links/dvips-local/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/macros/generic/poster/README b/macros/generic/poster/README
new file mode 100644
index 0000000000..6950343262
--- /dev/null
+++ b/macros/generic/poster/README
@@ -0,0 +1,9 @@
+Save the files poster.sty|tex in a directory, which is part of your
+local TeX tree.
+Then do not forget to run texhash to update this tree.
+For more information see the documentation of your LATEX distribution
+on installing packages into your LATEX distribution or the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+
diff --git a/macros/generic/poster/poster-doc.pdf b/macros/generic/poster/poster-doc.pdf
new file mode 100644
index 0000000000..444393db83
--- /dev/null
+++ b/macros/generic/poster/poster-doc.pdf
Binary files differ
diff --git a/macros/generic/poster/poster-doc.tex b/macros/generic/poster/poster-doc.tex
new file mode 100644
index 0000000000..2d1dcb3f75
--- /dev/null
+++ b/macros/generic/poster/poster-doc.tex
@@ -0,0 +1,365 @@
+%% BEGIN poster.doc
+%%
+%% Documentation for poster.tex/poster.sty.
+
+
+\documentclass[12pt]{article}
+\usepackage [T1]{fontenc}
+\usepackage{mathpazo,url}
+\usepackage{poster}
+\let\Pfv\fileversion
+\begin{filecontents}{poster1.tex}
+%% BEGIN poster1.tex
+%%
+%% Sample for poster.tex/poster.sty.
+%% Run with LaTeX, with or without the NFSS.
+%% You might have problems with missing fonts.
+%%
+%% See below if using A4 paper.
+
+\documentclass[dvips,a4paper]{article}
+
+\usepackage{poster,wasysym,geometry}
+
+\mag\magstep5 % Magnification of 1.2^5 (roughly 2.5)
+ % Use "true" dimensions below for magnified values.
+
+\begin{document}
+
+\begin{Poster}[vcenter=true,hcenter=true]
+\setlength{\fboxsep}{.8truein}%
+\setlength{\fboxrule}{.1truein}%
+\fbox{\begin{minipage}{11.1truein}
+
+\begin{center}
+ \bf ON SOME \boldmath$\Pi$-HEDRAL SURFACES IN QUASI-QUASI SPACE
+\end{center}
+\begin{center}
+ CLAUDE HOPPER, Omnius University
+\end{center}
+
+There is at present a school of mathematicians which holds that the
+explosive growth of jargon within mathematics is a deplorable trend. It
+is our purpose in this note to continue the work of
+Redheffer~\cite{redheffer} in showing how terminology itself can lead to
+results of great elegance.
+
+I first consolidate some results of Baker~\cite{baker} and
+McLelland~\cite{mclelland}. We define a class of connected snarfs as
+follows: $S_\alpha=\Omega(\gamma_\beta)$. Then if
+$B=(\otimes,\rightarrow,\theta)$ is a Boolean left subideal, we have:
+$$
+\nabla S_\alpha=\int\int\int_{E(\Omega)}
+B(\gamma_{\beta_0},\gamma_{\beta_0})\,d\sigma d\phi d\rho
+-\frac{19}{51}\Omega.
+$$
+Rearranging, transposing, and collecting terms, we have:
+$\Omega=\Omega_0$.
+
+The significance of this is obvious, for if $\{S_\alpha\}$ be a class of
+connected snarfs, our result shows that its union is an utterly
+disjoint subset of a $\pi$-hedral surface in quasi-quasi space.
+
+We next use a result of Spyrpt~\cite{spyrpt} to derive a property of
+wild cells in door topologies. Let $\xi$ be the null operator on a door
+topology, $\Box$, which is a super-linear space. Let $\{P_\gamma\}$ be
+the collection of all nonvoid, closed, convex, bounded, compact,
+circled, symmetric, connected, central, $Z$-directed, meager sets in
+$\Box$. Then $P=\cup P_\gamma$ is perfect. Moreover, if $P\neq\phi$,
+then $P$ is superb.
+
+\smallskip
+{\it Proof.} The proof uses a lemma due to
+Sriniswamiramanathan~\cite{srinis}. This states that any unbounded
+fantastic set it closed. Hence we have
+$$
+\Rightarrow P\sim\xi(P_\gamma)-\textstyle\frac{1}{3}.
+$$
+
+After some manipulation we obtain
+$$
+\textstyle\frac{1}{3}=\frac{1}{3}
+$$
+I have reason to believe~\cite{russell} that this implies $P$ is perfect.
+If $P\neq\phi$, $P$ is superb. Moreover, if $\Box$ is a $T_2$ space, $P$
+is simply superb. This completes the proof.
+
+Our final result is a generalization of a theorem of Tz, and
+encompasses some comments on the work of Beaman~\cite{beaman} on the
+Jolly function.
+
+Let $\Omega$ be any $\pi$-hedral surface in a semi-quasi space. Define
+a nonnegative, nonnegatively homogeneous subadditive linear functional
+$f$ on $X\supset\Omega$ such that $f$ violently suppresses $\Omega$.
+Then $f$ is the Jolly function.
+
+\smallskip
+{\it Proof.} Suppose $f$ is not the Jolly function. Then
+$\{\Lambda,\mbox{@},\xi\}\cap\{\Delta,\Omega,\Rightarrow\}$ is void. Hence
+$f$ is morbid. This is a contradiction, of course. Therefore, $f$ is
+the Jolly function. Moreover, if $\Omega$ is a circled husk, and
+$\Delta$ is a pointed spear, then $f$ is uproarious.
+
+\small
+\begin{center}
+\bf References
+\end{center}
+\def\thebibliography#1{%
+ \list
+ {\bf\arabic{enumi}.}{\settowidth\labelwidth{\bf #1.}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\begin{thebibliography}{9}
+\bibitem{redheffer}
+R. M. Redheffer, A real-life application of mathematical symbolism,
+this {\it Magazine}, 38 (1965) 103--4.
+\bibitem{baker}
+J. A. Baker, Locally pulsating manifolds, East Overshoe Math. J., 19
+(1962) 5280--1.
+\bibitem{mclelland}
+J. McLelland, De-ringed pistons in cylindric algebras,
+Vereinigtermathematischerzeitung f\"ur Zilch, 10 (1962) 333--7.
+\bibitem{spyrpt}
+Mrowclaw Spyrpt, A matrix is a matrix is a matrix, Mat. Zburp., 91
+(1959) 28--35.
+\bibitem{srinis}
+Rajagopalachari Sriniswamiramanathan, Some expansions on the Flausgloten
+Theorem on locally congested lutches, J. Math. Soc., North Bombay, 13
+(1964) 72--6.
+\bibitem{russell}
+A. N. Whitehead and B. Russell, Principia Mathematica, Cambridge
+University Press, 1925.
+\bibitem{beaman}
+J. Beaman, Morbidity of the Jolly function, Mathematica Absurdica, 117
+(1965) 338--9.
+\end{thebibliography}
+\end{minipage}}%
+\end{Poster}
+
+\end{document}
+%% END poster1.tex%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\end{filecontents}
+\begin{filecontents}{poster2.tex}
+%% BEGIN poster2.tex
+%%
+%% A sample file for poster.tex/poster.sty. Makes a banner.
+%% Use Plain TeX (or add preamble and use LaTeX)
+
+\input poster
+
+\special{landscape} % This works with Rokicki's dvips
+
+% ptmr should be name of the PostScript Times-Roman font:
+% 8in is a good size for this font, but might not work with other fonts.
+% You can use a Computer Modern font, if you are prepared to make a big
+% font bitmap.
+
+\font\bigroman=ptmr at 8in
+\bigroman
+
+\poster[vcenter=true,landscape=true]{Happy}
+
+\end
+%% END poster2.tex%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\end{filecontents}
+
+% Now adjust for different paper size:
+\newdimen\mydim
+\mydim=\paperwidth
+\advance\mydim-8.5in
+\divide\mydim 2
+\advance\oddsidemargin \mydim
+\advance\evensidemargin \mydim
+\mydim=\paperheight
+\advance\mydim-11in
+\divide\mydim 2
+\advance\topmargin \mydim
+
+%% OTHER
+
+% Short meta (works in verbatim. Can't use < for other purposes.
+\catcode`\<=13 \def<#1>{{\rm\it #1\/}} % <meta> (works in verbatim)
+
+% Short verbatim.
+\catcode`\"=13
+\def"{\verb"}
+
+\catcode`\@=12 % In case I'm using AmS-LaTeX
+
+\title{Documentation\thanks{Documentation revised by Herbert Vo\ss} for poster.tex:\\[5pt]
+ \small Posters and banners with generic \TeX, v. \Pfv}
+\author{Timothy Van Zandt\\ \url{tvz@Princeton.EDU}}
+\date{\today}
+
+\begin{document}
+
+\maketitle
+\begin{abstract}
+"poster.tex/poster.sty" contains the macro
+\begin{verbatim}
+ \poster{<stuff>}
+\end{verbatim}
+for making posters and banners. <stuff> is processed in restricted horizontal
+mode (i.e., "\hbox" or ``LR-mode'') and is then printed on as many sheets of
+paper as are needed. You can then construct the poster or banner by trimming
+and piecing together the sheets of paper.
+\end{abstract}
+\clearpage
+\tableofcontents
+\clearpage
+
+\section{Introduction}
+You can also write
+\begin{verbatim}
+ \Poster <stuff>\endPoster
+\end{verbatim}
+and \LaTeX\ users can write
+\begin{verbatim}
+ \begin{Poster} <stuff> \end{Poster}
+\end{verbatim}
+
+\section{Details}
+\begin{itemize}
+\item Use a "\vbox" or \LaTeX's "minipage" or "\parbox" in <stuff> if you want
+to include vertical mode material. For more help with LR-boxes, see
+"fancybox.sty", available from archives everywhere.
+
+\item Don't worry about margins, headers or footers; "\poster" ignores output
+routines entirely.
+
+\item <stuff> can contain "\catcode" changes, such as verbatim environments.
+\end{itemize}
+
+If you want to use your regular output routines, and have "poster.tex" print
+out each page of your document as a poster, then instead put the command
+\begin{verbatim}
+ \PosterPage
+\end{verbatim}
+towards the beginning of your document, or in the \LaTeX\ preamble. Each page
+is printed without its margins, but with the headers and footers, if any. (You
+can print out your whole dissertation on $8\times 10$-feet pages.) With
+"\PosterPage", you do not have to worry about LR-boxes.
+
+Whichever method you use, it is up to you to make everything big. The easiest
+way is to set \TeX's "\mag" parameters (to an integer equal to 1000 times the
+magnification factor, or to "\magstephalf", or to "\magstep"<n>, where <n> is
+1,$\ldots$,5). You may need to generate big bitmaps if using bitmapped fonts
+(e.g., \TeX's usual Metafont fonts), rather than scalable outline fonts (e.g.,
+PostScript fonts). Using "\magstep"<n> minimizes the need for extra bitmaps.
+
+\section{Parameter}
+ "\poster", "\Poster" and "\PosterPage" use the following parameters:
+\begin{center}
+ \def\arraystretch{1.1}
+ \begin{tabular}{lll}
+ {\em Parameter} & {\em Value} & {\em Default}\\[2pt]
+ "paperwidth" & <dim> & "8.5in"\\
+ "paperheight" & <dim> & "11in"\\
+ "imagewidth" & <dim> & "7.5in"\\
+ "imageheight" & <dim> & "10in"\\
+ "landscape" & "true"/"false" & "false"\\
+ "hcenter" & "true"/"false" & "false"\\
+ "vcenter" & "true"/"false" & "false"\\
+ "crop" & "none"/"corners"/"full" & "corners"\\
+ "clip" & "none"/"pstricks" & "none"
+ \end{tabular}
+\end{center}
+
+You can include parameter changes as a list of "<key>=<value>" pairs in an
+optional argument to "\poster", "\Poster" or "\PosterPage", enclosed in square
+brackets. E.g.,
+\begin{verbatim}
+ \poster[clip=pstricks,hcenter=true]{foo}
+\end{verbatim}
+No extraneous spaces, please.
+
+You can also redefine the parameters using "\def" or "\LaTeX"'s
+"\renewcommand". For parameter "foo", you should redefine "\POSTERfoo". E.g.,
+the next example is like the last one:
+\begin{verbatim}
+ \def\POSTERclip{pstricks}
+ \def\POSTERhcenter{true}
+ \poster{foo}
+\end{verbatim}
+This is mainly of interest when developing your own custom "\poster" command
+or "poster.tex" file.
+
+Here are some comments on the parameters:
+\begin{itemize}
+\item
+Don't adjust the "paper" and "image" dimensions for your document's
+magnification (and don't use \TeX's "true" dimensions). "poster.tex" does this
+for you. (That is, set the "page" and "image" dimensions to the actual values
+you want for the output.)
+
+\item
+Most printers cannot print right up to the edge of the paper. That is why the
+"imagewidth" and "imageheight" should be smaller than the "paperwidth" and
+"paperheight". The default values are good for printing on 8.5in by 11in paper
+in portrait mode with one-half inch margins.
+
+\item
+Setting "landscape" to "true" is just a convenient way to switch the "height"
+and "width" parameters. You still have to take care of printing your document
+in landscape mode. E.g., with Rokicki's "dvips", use
+\begin{verbatim}
+ \special{landscape}
+\end{verbatim}
+For other dvi driver's, consult the documentation.
+
+\item
+Setting "hcenter" and "vcenter" to "true" causes the image to be centered
+horizontally and vertically, respectively, in the total number of pages that
+are printed. E.g., when "vcenter" is "true", extra space is added to the top
+of the first row of pages and to the bottom of the last row of pages.
+
+\item
+The "crop" parameter controls the crop marks, to help you trim each page to
+size. When "crop" equals "full", you get crop marks along the full length of
+all four sides.
+
+\item
+Setting "clip" to "pstricks" causes each page to be clipped to the size of the
+image (rather than having the image overlap in the margins on each page), but
+this only works if you have loaded the PSTricks package.
+\end{itemize}
+
+\section{Examples}
+The file "poster1.tex" contains the following sample of a framed poster with a
+whole page of text:
+\begin{verbatim}
+ \documentclass{article}
+ \usepackage{poster}
+ \mag\magstep5 % Magnification of 1.2^5 (roughly 2.5)
+ % Use `true' dimensions below for magnified values.
+
+ \begin{document}
+
+ \begin{Poster}[vcenter=true,hcenter=true]
+ \setlength{\fboxsep}{.8truein}%
+ \setlength{\fboxrule}{.1truein}%
+ \fbox{\begin{minipage}{11.1truein}
+ <stuff>
+ \end{minipage}}%
+ \end{Poster}
+
+ \end{document}
+\end{verbatim}
+
+The file "poster2.tex" contain the following sample of a banner in landscape
+mode. "ptmr" is meant to be the name of the Times-Roman PostScript font, if
+your dvi driver supports such a thing.
+\begin{verbatim}
+ \font\bigroman=ptmr at 7.5in
+ \bigroman
+ \poster[vcenter=true,landscape=true]{Animals}
+\end{verbatim}
+
+
+\end{document}
+%%
+%% END poster.doc
+
diff --git a/macros/generic/poster/poster.sty b/macros/generic/poster/poster.sty
new file mode 100644
index 0000000000..550b73e5c3
--- /dev/null
+++ b/macros/generic/poster/poster.sty
@@ -0,0 +1,8 @@
+%% $Id: poster.sty 319 2010-05-15 09:06:19Z herbert $
+\ProvidesPackage{poster}[2010/05/13 package wrapper for
+ poster.tex (hv)]
+\input{poster.tex}
+\ProvidesFile{poster.tex}
+ [\filedate\space v\fileversion\space `poster' (tvz,hv)]
+\endinput
+
diff --git a/macros/generic/poster/poster.tex b/macros/generic/poster/poster.tex
new file mode 100644
index 0000000000..0265818b9c
--- /dev/null
+++ b/macros/generic/poster/poster.tex
@@ -0,0 +1,349 @@
+%% BEGIN poster.tex/poster.sty
+%%
+%%
+%% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% DESCRIPTION:
+%% poster.tex/poster.sty contains a macro for making posters and banners
+%% with TeX. It is compatible with most TeX macro packages, including Plain
+%% TeX, LaTeX, AmSTeX, and Ams-LaTeX. The only special requirement is that
+%% your printer not be bothered by text that lies off the page. This is
+%% true of most printers, including laser printers and PostScript printers.
+%%
+%% COPYING:
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% CODE:
+% These macros use TeX primitives, plus the Plain TeX commands:
+% \dimen@, \dimen@i, \count@, \newcount, \newtoks,
+%
+% Check if file is loaded, announce file on terminal, and take care of @:
+%
+\def\fileversion{1.1}
+\def\filedate{10/05/15}
+\csname PosterLoaded\endcsname
+\let\PosterLoaded\endinput
+
+\message{\space\space v\fileversion\space\space\filedate\space\space <tvz>}
+
+\edef\TheAtCode{\the\catcode`\@}
+\catcode`\@=11
+
+\newbox\@posterbox
+\newbox\poster@savedbox
+\newbox\poster@cropbox
+
+\def\POSTERpaperheight{11in}
+\def\POSTERpaperwidth{8.5in}
+\def\POSTERimageheight{10in}
+\def\POSTERimagewidth{7.5in}
+\def\POSTERlandscape{false}
+\def\POSTERclip{none}
+\def\POSTERcrop{corners}
+\def\POSTERvcenter{false}
+\def\POSTERhcenter{false}
+
+\def\poster@set#1[#2]{%
+ \poster@@set#2,=\@nil,%
+ #1}
+\def\poster@@set#1=#2,{%
+ \ifx\@nil#2\else
+ \expandafter\ifx\csname POSTER#1\endcsname\relax
+ \errmessage{Poster parameter `#1' not defined}%
+ \else
+ \expandafter\edef\csname POSTER#1\endcsname{#2}%
+ \fi
+ \expandafter\poster@@set
+ \fi}
+
+\def\poster@true{true}
+
+\def\poster{%
+ \begingroup
+ \futurelet\next\poster@i}
+\def\poster@i{%
+ \ifx\next[%
+ \expandafter\poster@set
+ \fi
+ \poster@ii}
+\def\poster@ii{%
+ \afterassignment\poster@iii
+ \setbox\@posterbox=\hbox}
+\def\poster@iii{\aftergroup\poster@iv}
+\def\poster@iv{%
+ \setbox\@posterbox=\hbox{\raise\dp\@posterbox\box\@posterbox}%
+ \poster@savepage
+ \poster@magtonum
+ \ifx\POSTERlandscape\poster@true \poster@landscape \fi
+ \poster@hoffsets
+ \poster@voffsets
+ \ifx\POSTERvcenter\poster@true \poster@vcenter \fi
+ \ifx\POSTERhcenter\poster@true \poster@hcenter \fi
+ \poster@makecropbox
+ \count\z@=\z@
+ \poster@vloop
+ \endgroup}
+
+\def\Poster{%
+ \begingroup
+ \futurelet\next\Poster@i}
+\def\Poster@i{%
+ \ifx\next[%
+ \expandafter\poster@set
+ \fi
+ \Poster@ii}
+\def\Poster@ii{%
+ \setbox\@posterbox=\hbox\bgroup\ignorespaces}
+\def\endPoster{\egroup\poster@iv}
+
+\def\PosterPage{\futurelet\next\PosterPage@i}
+\def\PosterPage@i{%
+ \ifx\next[%
+ \expandafter\poster@set
+ \fi
+ \PosterPage@ii}
+\def\PosterPage@ii{%
+ \count2=\z@
+ \let\poster@trueshipout\shipout
+ \let\shipout\poster@pageshipout}
+\def\poster@pageshipout{%
+ \begingroup
+ \global\advance\count2\@ne
+ \def\poster@swapcounters{%
+ \count@=\count2
+ \count2=\count1
+ \count1=\count\z@
+ \count\z@=\count@}%
+ \let\poster@savepage\relax
+ \let\shipout\poster@trueshipout
+ \setbox\@posterbox\box\voidb@x
+ \afterassignment\poster@@pageshipout
+ \setbox\@posterbox}
+\def\poster@@pageshipout{%
+ \ifvoid\@posterbox\aftergroup\poster@iv\else\poster@iv\fi}
+\let\poster@swapcounters\relax
+
+% Save current contents of page in case it contains \special's:
+\def\poster@savepage{%
+ \begingroup
+ \global\setbox\poster@savedbox\box\voidb@x
+ \output{\global\setbox\poster@savedbox\box\@cclv}%
+ \par\hbox{}\penalty-10000
+ \endgroup
+ \ifvoid\poster@savedbox\else
+ \dp\poster@savedbox\z@
+ \ht\poster@savedbox\z@
+ \wd\poster@savedbox\z@
+ \fi}
+
+% \poster@mag set to decimal value of \mag.
+\def\poster@magtonum{%
+ \ifnum\mag=1000
+ \def\poster@mag{}%
+ \else
+ \count@=10000000
+ \divide\count@\mag
+ \advance\count@ by 200000000
+ \expandafter\poster@@magtonum\the\count@
+ \fi
+ \dimen@=2000pt
+ \divide\dimen@\mag
+ \edef\poster@cropwidth{\number\dimen@ sp }}
+
+\def\poster@@magtonum#1#2#3#4#5#6#7#8#9{%
+ \count@ #2#3#4#5\relax
+ \edef\poster@mag{\the\count@.#6#7#8#9}}
+
+\def\poster@landscape{%
+ \let\next\POSTERpaperheight
+ \let\POSTERpaperheight\POSTERpaperwidth
+ \let\POSTERpaperwidth\next
+ \let\next\POSTERimageheight
+ \let\POSTERimageheight\POSTERimagewidth
+ \let\POSTERimagewidth\next}
+
+% \dimen@ii set to imageheight
+\def\poster@voffsets{%
+ \dimen@\POSTERimageheight\relax
+ \dimen@ii=\poster@mag\dimen@
+ \voffset=\POSTERpaperheight\relax
+ \advance\voffset-\dimen@
+ \divide\voffset 2
+ \ifdim\voffset<\z@
+ \voffset\z@
+ \fi
+ \dimen@=\poster@mag\voffset
+ \edef\poster@vmargin{\number\dimen@ sp }%
+ \advance\voffset-1in
+ \voffset=\poster@mag\voffset}
+
+% \dimen@i set to imagewidth
+\def\poster@hoffsets{%
+ \dimen@\POSTERimagewidth\relax
+ \dimen@i=\poster@mag\dimen@
+ \hoffset=\POSTERpaperwidth\relax
+ \advance\hoffset-\dimen@
+ \divide\hoffset 2
+ \ifdim\hoffset<\z@
+ \hoffset=\z@
+ \fi
+ \dimen@=\poster@mag\hoffset
+ \edef\poster@hmargin{\number\dimen@ sp }%
+ \advance\hoffset-1in
+ \hoffset=\poster@mag\hoffset}
+
+% Center vertically
+\def\poster@vcenter{%
+ \count@=\ht\@posterbox
+ \divide\count@\dimen@ii
+ \dimen@=\the\count@\dimen@ii
+ \advance\dimen@-\ht\@posterbox
+ \ifdim\dimen@<-.1pt
+ \advance\count@ 1
+ \fi
+ \setbox\@posterbox=\hbox{\vbox to \the\count@\dimen@ii{%
+ \vss\box\@posterbox\vss}}}
+
+% Center horizontally
+\def\poster@hcenter{%
+ \count@=\wd\@posterbox
+ \divide\count@\dimen@i
+ \dimen@=\the\count@\dimen@i
+ \advance\dimen@-\wd\@posterbox
+ \ifdim\dimen@<-.1pt
+ \advance\count@ 1
+ \fi
+ \setbox\@posterbox=\hbox to \the\count@\dimen@i{%
+ \hss\box\@posterbox\hss}}
+
+% Print rows:
+\def\poster@vloop{%
+ \ifdim\ht\@posterbox>.1pt
+ \ifdim\ht\@posterbox<\dimen@ii
+ \dimen@ii=\ht\@posterbox
+ \poster@makecropbox
+ \fi
+ \advance\count\z@ 1
+ \count1=\z@
+ \dimen@=\wd\@posterbox
+ \poster@hloop
+ \dimen@=\ht\@posterbox
+ \advance\dimen@-\dimen@ii
+ \ht\@posterbox\dimen@
+ \expandafter\poster@vloop
+ \fi}
+
+% Print columns.
+% \dimen@ is used as scratch to keep track of remaining width.
+\def\poster@hloop{%
+ \ifdim\dimen@>.1pt
+ \advance\count1 by 1
+ \begingroup
+ \ifdim\dimen@<\dimen@i
+ \dimen@i=\dimen@
+ \poster@makecropbox
+ \fi
+ \poster@swapcounters
+ \poster@shipout
+ \endgroup
+ \advance\dimen@-\dimen@i
+ \expandafter\poster@hloop
+ \fi}
+
+% Shipout, aligning everything at the top-left corner:
+\def\poster@shipout{%
+ \shipout\hbox{%
+ \ifvoid\poster@savedbox\else\box\poster@savedbox\fi
+ \csname beginposterclip@\POSTERclip\endcsname
+ \lower\ht\@posterbox\hbox to\z@{%
+ \advance\dimen@-\wd\@posterbox
+ \kern\dimen@
+ \copy\@posterbox
+ \hss}%
+ \csname endposterclip@\POSTERclip\endcsname
+ \copy\poster@cropbox}}%
+
+% clip=pstricks
+\def\beginposterclip@pstricks{%
+ \expandafter\ifx\csname @pstrickserr\endcsname\relax
+ \errmessage{%
+ You must load PSTricks to use poster.tex's clip=pstricks option!}%
+ \global\let\beginposterclip@pstricks\relax
+ \else
+ \gdef\beginposterclip@pstricks{\beginposterclip@@pstricks}%
+ \gdef\endposterclip@pstricks{\pstVerb{currentpoint initclip moveto}}%
+ \beginposterclip@@pstricks
+ \fi}
+
+\let\endposterclip@pstricks\relax
+
+\def\beginposterclip@@pstricks{%
+ \pst@Verb{%
+ /mtrxc CM def
+ \tx@STV
+ CP translate
+ newpath
+ 0 0 moveto
+ \pst@number\dimen@i 0 rlineto
+ 0 \pst@number\dimen@ii neg rlineto
+ \pst@number\dimen@i neg 0 rlineto
+ closepath
+ clip
+ newpath
+ 0 0 moveto
+ mtrxc setmatrix}}
+
+\def\poster@makecropbox{%
+ \setbox\poster@cropbox=\hbox{\csname postercrop@\POSTERcrop\endcsname}%
+ \ht\poster@cropbox=\z@
+ \dp\poster@cropbox=\z@
+ \wd\poster@cropbox=\z@}
+
+\def\postercrop@corners{%
+ \vtop{%
+ \hbox{%
+ \kern -\poster@hmargin
+ \vrule height \poster@cropwidth width \poster@hmargin
+ \kern -\poster@cropwidth
+ \vrule height \poster@vmargin width \poster@cropwidth
+ \kern \dimen@i
+ \vrule height \poster@vmargin width \poster@cropwidth
+ \kern -\poster@cropwidth
+ \vrule height \poster@cropwidth width \poster@hmargin}%
+ \nointerlineskip
+ \vskip\dimen@ii
+ \hbox{%
+ \kern -\poster@hmargin
+ \vrule height \z@ depth \poster@cropwidth width \poster@hmargin
+ \kern -\poster@cropwidth
+ \vrule height \z@ depth \poster@vmargin width \poster@cropwidth
+ \kern \dimen@i
+ \vrule height \z@ depth \poster@vmargin width \poster@cropwidth
+ \kern -\poster@cropwidth
+ \vrule height \z@ depth \poster@cropwidth width \poster@hmargin}}}%
+
+\def\postercrop@full{%
+ \begingroup
+ \hbox to\z@{%
+ \advance\dimen@ii\poster@vmargin
+ \kern -\poster@cropwidth
+ \vrule height \poster@vmargin depth \dimen@ii width \poster@cropwidth
+ \kern \dimen@i
+ \vrule height \poster@vmargin depth \dimen@ii width \poster@cropwidth
+ \hss}%
+ \kern -\poster@hmargin
+ \vtop{%
+ \advance\dimen@i \poster@hmargin
+ \advance\dimen@i \poster@hmargin
+ \kern-\poster@cropwidth
+ \hrule height \poster@cropwidth width \dimen@i
+ \kern\dimen@ii
+ \hrule height \z@ depth \poster@cropwidth width \dimen@i}%
+ \endgroup}
+
+\catcode`\@=\TheAtCode\relax
+\endinput
+%%
+%% END poster.tex
diff --git a/macros/generic/poster/poster1.pdf b/macros/generic/poster/poster1.pdf
new file mode 100644
index 0000000000..0faf29a7a8
--- /dev/null
+++ b/macros/generic/poster/poster1.pdf
Binary files differ
diff --git a/macros/generic/poster/poster2.pdf b/macros/generic/poster/poster2.pdf
new file mode 100644
index 0000000000..e26c53b98e
--- /dev/null
+++ b/macros/generic/poster/poster2.pdf
Binary files differ
diff --git a/macros/generic/proofs/taylor/QED.sty b/macros/generic/proofs/taylor/QED.sty
new file mode 100644
index 0000000000..bdf443cee1
--- /dev/null
+++ b/macros/generic/proofs/taylor/QED.sty
@@ -0,0 +1,731 @@
+\message{<Paul Taylor's right-justified end-of-proof mark, 24 June 1995>}
+%%========================================================================
+%************************************************************************%
+%* *%
+%* Maybe you already have a \qed macro to put a little square *%
+%* on the right hand side at the end of a mathematical proof? *%
+%* *%
+%* IT'S PROBABLY MINE! *%
+%* *%
+%* Please compare yours with \parag@pushright below. *%
+%* *%
+%* This new file is compatible, it fixes the bugs, has extra *%
+%* features, and is maintained and portable. Please use it! *%
+%* *%
+%* NEW FEATURE \WillHandleQED and \HandleQED for environments *%
+%* which do not give access to the right hand side of the page. *%
+%* *%
+%* Now also available: \DefineStandardTheorems or *%
+%* \usepackage[define-standard-theorems]{QED} *%
+%* *%
+%************************************************************************%
+%========================================================================%
+
+% COPYRIGHT (C) 1993-6 Paul Taylor, Department of Computer Science,
+% Queen Mary & Westfield College, London E1 4NS.
+% You may use this file for any purpose. You may copy it on condition that
+% you do so in exactly the form in which it was supplied, make no charge
+% for the copy and impose the same conditions on the recipient.
+% This software is supplied ``as is'' without warranty, express or implied,
+% including but not limited to merchantability and fitness for any particular
+% purpose. No liability is accepted by the author, Queen Mary and Westfield
+% College, Imperial College or any third party for any direct or consequential
+% damages, however caused.
+% In all cases you must keep several backup versions of your files in a place
+% to which your machine cannot write, and you must check documents visually
+% before submitting the final version to a publisher or expensive printer.
+
+% WARNING: If you use this with Frank Mittlebach's "theorem.sty" you
+% MUST load theorem first, then QED, then do the \newtheorem commands.
+
+% Authoritative version: /pub/tex/contrib/pt/proofs/QED.sty
+% by anonymous FTP from: ftp.dcs.qmw.ac.uk
+% also CTAN: macros/generic/proofs/taylor/QED.sty
+% author/maintained by: Dr Paul Taylor <pt@dcs.qmw.ac.uk>
+
+% WARNING: This file replaces some of the functions of "Paul.sty"
+% and MUST NOT be used with it as serious conflicts will arise.
+
+%=========================================================================
+
+% USER INTERFACE AND EXAMPLES (see also OPTIONS below)
+
+% LaTeX2e \usepackage options: see \DeclareOption commands below
+% theorems-as-commands roman-theorems italic-theorems
+% auto-QED explicit-QED number-theorems dont-number-theorems
+% black-square open-square
+
+% \begin{Proof} ... \end{Proof}
+% or \Proof ... \endProof
+% or \Proof ... \endproof
+% or \Proof ... \qed also \QED \QEF and \QEI
+
+% WARNING: \qed which doesn't follow \Proof will not print the square.
+
+% Each properly nested Proof/endProof pair gets a single
+% \qedsymbol at the end, on the far right hand side.
+% Unfortunately, this may still be in the wrong place
+% if the proof ends with a display or itemisation.
+% To solve this, \qed may be put *inside* the last substantive
+% environment; the \qedsymbol will be put at that point
+% (the visual end) and suppressed at the logical end of proof.
+
+% Examples:
+% \begin{Proof} \begin{Proof}
+% ... ...
+% \begin{eqnarray} \begin{itemize}
+% ... &=& ... \\ \item ...
+% .. &=& ... &\qed \item ... \qed
+% \end{eqnarray} \end{itemize}
+% \end{Proof} \end{Proof}
+% also works with $$...$$ and \[...\] displays, including fleqn.sty.
+
+% Unfortunately some environments, such as picture, do not allow this at all.
+% See the section "centering environments" below for the mechanism for
+% passing \qed to such an environment for special processing.
+
+% In fact \qed will only work in those environments which provide access to
+% the right hand side of the page. In other words, wherever you think
+% "\hfill\square" ought to work then \qed will; of course it is just because
+% that naive method doesn't work that this macro file is needed at all.
+% The macro was designed to solve the problem in the case of "unrestricted
+% horizontal mode" (ie at the end of a paragraph); it also works in $$
+% displays by pretending to be an equation number. In most other cases it
+% basically does "\hfill\square" or "\hfill$\square$" and hopes for the best.
+
+% If you have to put \qed outside the environment, it may be appropriate to
+% put \vskip-\baselineskip before it, unless of course this would over-print.
+% There is, however, still a danger that TeX will break the page here.
+% This seems to be unavoidable if the environment ends with a \penalty.
+
+% The eqnarray example above does not in fact work: if you try it you'll
+% get "! Paragraph ended before \llap was complete" with LaTeX in a mess.
+% This is a very common place where you might want to put the end of proof
+% mark, and I also consider that the fourth column should be available for
+% "reasons" for equational steps. The following substitute for \eqnarray
+% allows this, whilst being compatible with automatic numbering. I have
+% proposed it to Rainer Sch\"opf for inclusion in LaTeX. If you want to
+% use it, please copy it to another file rather than uncommenting it here.
+% Don't forget to use \makeatletter or put it in a documentstyle (.sty) file.
+%
+% \def\eqnarray{\stepcounter{equation}\let\@currentlabel\theequation
+% \global\@eqnswtrue\m@th\global\@eqcnt\z@\tabskip\@centering\let\\\@eqncr
+% $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering$\displaystyle
+% \tabskip\z@{##}$&\global\@eqcnt\@ne\hskip 2\arraycolsep \hfil${##}$\hfil
+% &\global\@eqcnt\tw@\hskip2\arraycolsep$\displaystyle\tabskip\z@{##}$\hfil
+% \tabskip\@centering&%
+% \global\@eqcnt\thr@@\hbox to\z@\bgroup\hss##%*** instead of "\llap{##}"
+% \tabskip\z@\cr}%
+% \def\@@eqncr{\let\@tempa\relax
+% \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &}%
+% \or\def\@tempa{&}\else\@eqnswfalse%*** instead of "\else\def\@tempa{&}"
+% \fi\@tempa\if@eqnsw\@eqnnum\stepcounter{equation}\fi
+% \egroup%*** added, to match \bgroup in fourth cell of preamble
+% \global\@eqnswtrue\global\@eqcnt\z@\cr}
+
+% Why can't we do all of this with \endProof? Because by that stage
+% the damage has been done: the environments, paragraphs or
+% displays have already been closed and their \hbox'es added
+% to the current vertical list, and cannot be removed for
+% alteration if this is the current page.
+
+% Even if you don't need to put \qed inside an inner environment
+% to avoid a blank line, it's still a good idea to do so, because
+% otherwise it's possible that intervening end-of-environment
+% material may allow TeX to put the mark on the next page.
+
+% This file may be called QED.sty, QED.tex, qed.sty or qed.tex.
+% It may be loaded using \input, \usepackage or as a \documentstyle option,
+% as it is careful to handle the \catcode of @ appropriately.
+
+% If you don't use theorem.sty, this file instead provides options to use
+% commands to begin theorems, instead of enclosing them in environments,
+% and to suppress numbering and italicisation. A rudimentary version of
+% \newtheorem for plain TeX is also implemented (always using commands
+% rather than environments).
+
+% At the end of the file some useful \newtheorem
+% commands are listed but not executed.
+
+% NB \Theorem\Proof\endProof\qed will print the second square, whereas
+% \begin{Theorem}\end{Theorem}\begin{Proof}\end{Proof}\qed will not.
+
+%=========================================================================
+% Make @ letter, saving its old code to restore at the end of this file.
+% Look for this towards the end of the file if you think something's missing!
+% "plain.tex" defines \lq as a synonym for back quote (character constant);
+% I use it to avoid corruption when sending TeX files by email via BITNET.
+\edef\qedrestoreat{\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@}%%
+\catcode\lq\@=11
+
+% in LaTeX, \protect the user commands;
+% in plain TeX, ensure that it is defined.
+\ifx\protect\undefined\let\protect\relax\fi
+
+%=========================================================================
+
+% OPTIONS
+
+% These are the user commands.
+
+\def\qed{\protect\@qed{$\qedsymbol$}}% suppressible printing of \qedsymbol
+% \pushright takes an argument, which it always prints
+% it is (re)defined by \WillHandleQED and \UnHandleQED below (12.4.94)
+
+% theoremata in Euclid needed proof: "which was to be shown"
+\def\QED{\protect\@qed{{\rm Q.E.D.}}}% "quod erat demonstrandum"
+
+% but problemata needed construction: "which was to be found"
+\def\QEI{\protect\@qed{{\rm Q.E.I.}}}% "quod erat inveniendum"
+
+% alternatively: "which was to be done/made"
+\def\QEF{\protect\@qed{{\rm Q.E.F.}}}% "quod erat faciendum"
+
+% a LaTeX environment
+\def\Proof{\protect\@Proof}\def\endProof{\protect\@endProof}%
+\let\proof\Proof\let\endproof\endProof
+
+
+% These are the user-settable parameters.
+
+% The actual (maths) symbol used by \qed
+\def\qedsymbol{\square}% PLEASE NOTE: this is in the AMS symbols font.
+%\def\qedsymbol{\blacksquare}% use one of these instead
+%\def\qedsymbol{\hbox{\rm Q.E.D.}}% if you prefer
+%\def\qedsymbol{\dashv}% this is what the Journal of Symbolc Logic likes.
+
+% This is the text used by \Proof.
+% A new paragraph is begun without indentation.
+% Change it to {\kern\parindent\sc D\'emonstration: } if you like.
+\def\TheWordProof{\bf Proof\enskip}
+
+% This is the font command used for the text of proofs
+\def\ProofFont{}
+
+% The command \AutoQEDtrue causes a \qed in \end{Theorem}, so you do
+% \begin{Theorem} ... \begin{Proof} ... \end{Proof} \end{Theorem}
+% but if you omit the proof, the statement gets a little square at the end.
+\newif\ifAutoQED\AutoQEDfalse
+
+% The remaining options are redundant with theorem.sty
+% so are not defined if this has been loaded.
+\newif\ifNumberResults
+\ifx\theorem@style\undefined
+ %
+ % How to print the name (#1), number (#2) and attribution (#3) of a theorem.
+ \NumberResultstrue
+ % If the number (#2) is absent, "\unskip" removes the
+ % unwanted space "\ " from before it (16 Feb 1993).
+ \def\TheoremHeader#1#2#3{\bf #1\ifNumberResults\ #2\unskip\fi#3}
+ %
+ % This is the font command used for the text of theorem enunciations
+ % change to {\rm} or {\small} if you like.
+ \def\TheoremFont{\it}
+ %
+ % The command \NumberResultsfalse will suppress theorem numbering.
+ %
+ % The command \TheoremsAsCommands will allow you to write
+ % \Theorem instead of \begin{Theorem} ... \end{Theorem}.
+ % In this case italicisation is suppressed by default.
+ % To do this with theorem.sty would involve rewriting the substyles.
+ %
+ % WARNING: if you subsequently redefine \TheoremFont, and use the command
+ % instead of the environment, the font will remain in force afterwards!
+\fi
+
+% The document style option "theorems-as-commands" will allow you to
+% write \Theorem instead of \begin{Theorem} ... \end{Theorem}.
+% Moved here from further down. 10 Jan 1994
+\def\TheoremsAsCommands{%
+ \def\TheoremFont{}% suppress italicised theorems.
+ \def\begin@theorem##1{%
+ \par\removelastskip\smallskip
+ \save@set@qed % enable \qed
+ \noindent{##1}% the name
+ %\TheoremFont % italicise at your own risk!
+ }%
+ \def\@endtheorem{\ifAutoQED\qed\fi\restore@qed}%
+}%
+
+\expandafter\let\csname ds@theorems-as-commands\endcsname\TheoremsAsCommands
+
+%=========================================================================
+% If you already have a macro called \qed, \endproof or \pushright
+% which is laid out in a similar way to the following two definitions
+% (but with \hbox@pushright incorporated) then it is almost certainly
+% my code, which has been copied anonymously via numerous people since
+% my Cambridge PhD thesis in August 1986. Belated acknowledgements to
+% Chris Thompson of the Cambridge University Computing Service for his
+% help with my early attempts at TeX, in particular this problem.
+
+% The complexity of the macro necessary to get a little box on the
+% right-hand-side at the end of a proof is amazing. It really does
+% have to be this long! Otherwise you're liable to get it at the
+% beginning of the next line, or even on the next page.
+
+\def\parag@pushright#1{{% set up
+ \parfillskip=0pt % so \par doesnt push \square to left
+ \widowpenalty=10000 % so we dont break the page before \square
+ \displaywidowpenalty=10000 % ditto
+ \finalhyphendemerits=0 % TeXbook exercise 14.32
+ %
+ % horizontal
+ %\leavevmode % not needed since we now only use it in hmode
+ \hbox@pushright % this used to be incorporated
+ #1% % the end-of-proof mark (or whatever)
+ %
+ % vertical
+ \par}}% % build paragraph with the above parameters
+
+\def\hbox@pushright{% horizontal
+ \unskip % remove previous space or glue
+ \nobreak % don't break lines
+ \hfil % ragged right if we spill over
+ \penalty50 % discouragement to do so
+ \hskip.2em % ensure some space
+ \null % anchor the following \hfill
+ \hfill % push \square to right
+}%
+
+% Ideally \endProof should do all this. We should be able to add the symbol
+% to the last line after the paragraph, display or whatever other structure
+% has been completed and we've returned to vertical mode. This isn't possible
+% on the current page (outer vmode) because \lastbox doesn't work there.
+
+% But \ifinner is true inside a \vbox, \vadjust or \insert (LaTeX \parbox,
+% minipage, figure or table), and in these circumstances we can use \lastbox.
+% We would have to strip & restore glue & penalties (\insert, \mark and \write
+% are obstacles to this) to get access to the last line (box), which may
+% still not have the correct baseline. We could check its natural width
+% against the page width, but if we re-set it, centering and (right)
+% justification might be disturbed. Is this worth the trouble?
+\def\vbox@pushright#1{\expandafter\message % (2 Jan 1994)
+ {QED.sty could be improved in this case (line \the\inputlineno): please ask}%
+ \page@pushright{#1}}%
+
+% Using this method the Proof environment could be implemented by collecting
+% the entire proof in its own \vbox, modifying that and \unvbox'ing it to the
+% current page. This approach may lead to the following problems:
+% (i) footnotes, floats, marginpars, labels and index items may be lost;
+% (ii) overflow of TeX's main memory, especially if \end{Proof} is missing;
+% (iii) I don't know how page-breaking would be handled.
+
+%========================================================================
+
+% Switch to enable/suppress \qedsymbol; since suppression may be done
+% within a nested scope it must be global, so we do our own save/restore
+% in a symbol which is local to the Proof environment.
+% On first use, we check to see whether an obsolete version of Paul.sty
+% is around, and complain loudly if it is, because they interfere seriously.
+
+\newif\if@qed\@qedfalse
+\def\save@set@qed{\check@pt@sty@v\let\saved@ifqed\if@qed\global\@qedtrue}%
+\def\restore@qed{\global\let\if@qed\saved@ifqed}
+
+% prefer proofs with statements if possible - hence \penalty700
+% the only essential part of this is \save@set@qed
+\def\@Proof{%
+ \par\removelastskip\smallskip\penalty700
+ \save@set@qed
+ \noindent\ProofFont{\TheWordProof\enskip}%
+}%
+
+\def\@endProof{%
+ \qed\restore@qed
+ \penalty-700 \smallskip
+}
+
+\def\@qed#1{\check@pt@fm@thm
+\if@qed % have we already done \qed?
+ \global\@qedfalse\pushright{#1}% - no - do it now, but not again
+\else\ifhmode\ifinner\else\par\fi\fi% - yes - just end paragraph, if any
+\fi}
+
+% \pushright{text} always prints its argument, on the far right, in text mode
+\def\@pushright#1{%
+ \ifvmode
+ \ifinner\vbox@pushright{#1}% vertical mode (see comments above)
+ \else \page@pushright{#1}%
+ \fi
+ \else\ifmmode\maths@pushright{\hbox{#1}}% maths (force a text argument)
+ \else\ifinner\hbox@pushright{#1}% inside an \hbox
+ \else\parag@pushright{#1}% in a paragraph
+ \fi \fi \fi
+}% (22 Feb 1993) removed extra {} which would destroy our \] below
+
+% In the \hbox and maths cases we are really at the mercy of the environment.
+% Assuming that we have $\qed$ simply embedded in a paragraph, the horizontal
+% processing by \hbox@pushright will at least make sure that the square isn't
+% at the beginning of the line, but we can't stop it being on the next page.
+% However it is more likely that the reason why we're in maths mode is that
+% we're inside an eqnarray or similar, in which case \hfill will do its best
+% to put the square on the right of the available space. (See \vadjust below.)
+\def\maths@pushright#1{%
+ \ifinner
+ \hbox@pushright{#1}%
+ \else
+ \eqno#1% use TeX's right equation number feature (\eqno) within $$.
+ \def\]{$$\ignorespaces}% suppress LaTeX's error checking (HACK!)
+ \fi
+}% (22 Feb 1993) removed extra {} which would destroy our \] above
+
+% outer vertical mode (the current page)
+% There's very little we can do in these circumstances!
+% Penalties still allow the page to be broken.
+% If the user has put negative glue in, leave it alone. (15 Feb 1994)
+\def\page@pushright#1{% 18 Jan 1994
+ %\unpenalty % ineffective
+ \skip@\lastskip
+ \ifdim\skip@>\z@
+ \unskip % remove \parskip, but only (15 Feb 1994) if it's positive
+ \else\skip@\z@\relax
+ \fi
+ %\unpenalty % TeX won't let me do this
+ \dimen@\baselineskip
+ \advance\dimen@-\prevdepth % save \prevdepth to make a strut
+ \nobreak % don't break the page here
+ \nointerlineskip
+ \hbox to\hsize{%
+ \setbox\z@\null
+ \ifdim\dimen@>\z@\ht\z@\dimen@\fi % simulate \baselineskip
+ \box\z@
+ \hfill
+ #1}%
+ \vskip\skip@ % replace old \parskip
+}%
+
+% An idea that didn't work: see TeXbook p188. (16 Feb 1993)
+% Use \predisplaysize to find out the width of the previous box,
+% in the case where it has already been completed.
+% But this can only be used inside displays ($$), and a display in
+% vertical mode begins a paragraph first, so we end up with
+% \predisplaysize=\parindent+2em whatever happened in the previous
+% paragraph.
+
+% Another idea: it may be worth trying \vadjust, if only to insert \nobreak.
+% The problem with this is that if we are too deeply nested in horizontal
+% or maths lists, the adjustment may not be able to find its way out to the
+% enclosing vertical list. In the case of array-like environments, it will
+% appear (assuming it manages to get out) after the current row of the array.
+
+%===========================================================================
+% We have to add to the theorem environments the commands to enable \qed.
+% This is done by re-defining \@thm#1#2.
+% Note that Mittelbach's theorem.sty re-defines \@thm and \@endtheorem, so
+% that must be loaded before us, otherwise our changes will get over-written
+% and \qed will never be enabled.
+% Paul.sty didn't use this method of gaining control inside a theorem,
+% whereas it did define \qed and \pushright, so here is the one place
+% where we can check for it.
+
+\ifx\nonqed@thm\undefined % otherwise double loading causes a loop 22 Feb 1993
+ \let\nonqed@thm\@thm % save original
+ \let\nonqed@endthm\@endtheorem
+\fi
+
+\def\@thm{\save@set@qed\nonqed@thm}%
+\def\@endtheorem{\ifAutoQED\qed\fi\restore@qed\nonqed@endthm}%
+
+%===========================================================================
+% "CENTERING" ENVIRONMENTS -
+% those which don't give their contents access to the right hand side
+% of the page, such as center, picture, ... (12 April 1994)
+
+% Each individual environment (both the standard ones and those defined
+% by the user) needs to co-operate in order to make \qed and \pushright work.
+% It is not the business of this package to rewrite LaTeX in this way,
+% but the following mechanism may be inserted in to other environments.
+% - put \WillHandleQED in the \begin part of the environment definition;
+% then if a \qed occurs in the body of the environment it is stored
+% in \QEDbox until...
+% - \HandleQED anywhere in the \end part of the environment definition
+% (even inside dollars, braces or another environment) prints it.
+%
+% For example:
+% \newenvironment{qedpicture}%
+% {\begin{picture}\WillHandleQED}%
+% {\put(0,0){\HandleQED}\end{picture}}
+%
+% To make this compatible with *not* loading QED.sty,
+% add the following to macro files which use \WillHandleQED and \HandleQED:
+% \ifx\WillHandleQED\undefined
+% \let\WillHandleQED\relax
+% \let\HandleQED\relax
+% \let\UnHandleQED\relax % if you use it
+% \let\QEDbox\voidb@x % must have \makeatletter here!
+% \fi
+%
+% \UnHandleQED restores normal processing; this may be useful for
+% the minipage environment, which has its own notion of "right hand side"
+% of the page.
+%
+% The width of the saved \qed is available for testing as \wd\QEDbox
+
+\newbox\qed@box % the box in which to save \qed for special handling
+
+\def\WillHandleQED{\relax
+\ifx\HandleQED\nohandle@qed
+ % no enclosing environment has declared \WillHandleQED
+ \def\pushright{\global\setbox\qed@box\hbox}% \qed will be saved
+ \let\QEDbox\qed@box % point at the right box
+ \def\HandleQED{\unhbox\QEDbox}% print it
+ \aftergroup\check@handle@qed % check that this really gets done
+\else
+ % an enclosing environment already wants to catch \qed
+ % \HandleQED doesn't print anything - let the saved \qed pass through
+ \let\QEDbox\voidb@x % by pointing at an empty box
+\fi}
+
+\def\nohandle@qed{%
+\errhelp{One of them is missing: see QED.sty.}%
+\errmessage{This environment uses \string\WillHandleQED\space and
+\string\HandleQED\space incorrectly}}
+
+\def\check@handle@qed{\relax
+\ifvoid\qed@box\else\expandafter\nohandle@qed\fi}
+
+\def\UnHandleQED{%
+\let\HandleQED\nohandle@qed
+\let\QEDbox\voidb@x
+\def\pushright{\protect\@pushright}}%
+
+\UnHandleQED
+
+%===========================================================================
+% Check for obsolete versions and clashes of this and other macro files.
+% Why do I do this? Because of those people who complain to me that
+% something doesn't work but refuse to read the manual, and those
+% who refuse to update their software, and then publish papers with
+% commutative diagrams full of the bugs which I fixed several years ago.
+
+\def\obsolete@pt@version#1{\errhelp={%
+% *****************************************************************
+% * The master version is available by *
+ Anonymous FTP ftp.dcs.qmw.ac.uk /pub/tex/contrib/pt/tex/#1}%*
+% *****************************************************************
+\errmessage{You have an obsolete version of #1 - please get a new one}}%
+
+% First check QED.sty
+%\ifnum\year>1996 \obsolete@pt@version{QED.sty}\fi
+
+% If theorem.sty hasn't been loaded, arrange to check it again in \@qed.
+% And check (then) whether you've actually defined \square.
+% changed 2 June 1993: don't define it now, as that would confuse amssymb.sty
+\ifx\theorem@style\undefined
+ \def\check@pt@fm@thm{\relax
+ \ifx\square\undefined
+ \gdef\square{\bigcirc
+ \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}%
+ \errmessage{\string\square\space is an AMS symbol}%
+ \global\let\square\bigcirc}%
+ \fi
+ \ifx\theorem@style\undefined
+ \global\let\check@pt@fm@thm\relax
+ \else\errhelp={The macros \@thm and \@endtheorem need to be re-defined.}%
+ \errmessage{QED.sty must be loaded AFTER theorem.sty but before
+ using \string\newtheorem}%
+ \fi
+ \global\let\check@pt@fm@thm\relax
+ }%
+\else
+ \def\check@pt@fm@thm{%
+ \ifx\square\undefined
+ \def\square{\bigcirc
+ \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}%
+ \errmessage{\string\square\space is an AMS symbol}%
+ \global\let\square\bigcirc}%
+ \fi
+ \global\let\check@pt@fm@thm\relax
+ }%
+\fi
+
+% Check for Paul.sty, which SERIOUSLY conflicts with this file.
+% and also for version 2 or version 3 of commutative diagrams.
+\def\check@pt@sty@v{%
+ \relax
+ \ifx\@@begintheorem\undefined
+ \else\message{*** QED.sty and the old Paul.sty seriously conflict! ***}%
+ \obsolete@pt@version{Paul.sty}%
+ \fi
+ \ifx\execHorizontalMap\undefined
+ \gdef\obsolete@pt@version##1{}% it's no longer needed
+ \else\global\let\di@gr@m\diagram
+ \gdef\diagram{\obsolete@pt@version{diagrams.tex}\di@gr@m}%
+ \fi
+ \global\let\check@pt@sty@v\relax
+}%
+
+%===========================================================================
+
+% Define some standard ``theorem'' types.
+
+\def\DefineStandardTheorems{%
+%
+% First set up uniform numbering in LaTeX;
+% don't use this in plain TeX because this usage of \newcommand is not
+% supported and we have already done by hand what it would do in LaTeX,
+% viz to define the macro \theResult and the count \c@Result.
+\relax\ifx\@@thm\undefined
+ \newtheorem{Result}{Result}[subsection]%
+ \@addtoreset{Result}{section}%
+ \ifx\chapter\undefined\else\@addtoreset{Result}{chapter}\fi
+\fi
+%
+\let\theUnnumbered\relax\countdef\c@Unnumbered255 \def\p@Unnumbered{}%
+\let\DefineStandardTheorems\relax
+%
+\newtheorem{Answer}[Result]{Answer}%
+\newtheorem{Answers}[Result]{Answers}%
+\newtheorem{Conjecture}[Result]{Conjecture}%
+\newtheorem{Construction}[Result]{Construction}%
+\newtheorem{Convention}[Unnumbered]{Convention}%
+\newtheorem{Corollary}[Result]{Corollary}%
+\newtheorem{Counterexample}[Result]{Counterexample}%
+\newtheorem{Definition}[Result]{Definition}%
+\newtheorem{Example}[Result]{Example}%
+\newtheorem{Examples}[Result]{Examples}%
+\newtheorem{Exercise}[Result]{Exercise}%
+\newtheorem{Exercises}[Result]{Exercises}%
+\newtheorem{Fact}[Result]{Fact}%
+\newtheorem{Facts}[Result]{Facts}%
+\newtheorem{Lemma}[Result]{Lemma}%
+\newtheorem{NB}[Unnumbered]{NB}%
+\newtheorem{Notation}[Result]{Notation}%
+\newtheorem{Note}[Unnumbered]{Note}%
+\newtheorem{Observation}[Result]{Observation}%
+\newtheorem{Observations}[Result]{Observations}%
+\newtheorem{Problem}[Result]{Problem}%
+\newtheorem{Proposition}[Result]{Proposition}%
+\newtheorem{PS}[Unnumbered]{PS}%
+\newtheorem{Remark}[Result]{Remark}%
+\newtheorem{Question}[Result]{Question}%
+\newtheorem{Questions}[Result]{Questions}%
+\newtheorem{Theorem}[Result]{Theorem}%
+\newtheorem{Thesis}[Result]{Thesis}%
+\newtheorem{Warning}[Result]{Warning}%
+}
+
+%===========================================================================
+% Interaction with LaTeX2e (2 Jan 1994)
+
+\ifx\newtheorem\undefined\else\ifx\ProvidesPackage\undefined
+ \message{^^J^^J}%
+ \message{****************************************************************}%
+ \message{! ***** You are using an obsolete implementation of LaTeX ******}%
+ \message{* A new version - called LaTeX2e - has been available from TeX *}%
+ \message{* FTP archives such as ftp.tex.ac.uk, ftp.uni-stuttgart.de and *}%
+ \message{* pip.shsu.edu since December 1993. It incorporates NFSS2 (the *}%
+ \message{* Mittelbach-Schoepf New Font Selection Scheme) but is reverse *}%
+ \message{* compatible with LaTeX versions 2.09 and is now the standard. *}%
+ \message{****************************************************************}%
+ \message{^^J^^J}%
+\else
+ \ProvidesPackage{QED}[1996/06/24 right-justified end-of-proof mark]%
+ %\ProvidesFile{QED.sty}% I don't understand what this is for
+ \DeclareOption{roman-theorems}{\def\TheoremFont{\rm}}%
+ \DeclareOption{italic-theorems}{\def\TheoremFont{\it}}%
+ \DeclareOption{theorems-as-commands}{\TheoremsAsCommands}%
+ \DeclareOption{auto-QED}{\AutoQEDtrue}%
+ \DeclareOption{explicit-QED}{\AutoQEDfalse}%
+ \DeclareOption{number-theorems}{\NumberResultstrue}%
+ \DeclareOption{dont-number-theorems}{\NumberResultsfalse}%
+ \DeclareOption{black-square}{\def\qedsymbol{\blacksquare}}%
+ \DeclareOption{open-square}{\def\qedsymbol{\square}}%
+ \DeclareOption{define-standard-theorems}{\DefineStandardTheorems}%
+ \ProcessOptions
+\fi\fi
+
+%===========================================================================
+% If Mittelbach's theorem.sty is loaded, skip the rest of the file.
+\ifx\theorem@style\undefined\else\qedrestoreat\expandafter\endinput\fi
+%===========================================================================
+
+% Allow the user to suppress italicisation and numbering.
+
+% The following two macros are called by LaTeX to begin a theorem
+% respectively with and without an optional (``attribution'') argument.
+% It is clear from latex.tex that they are intended to be customised.
+% The code common to the two has been taken out as \begin@theorem and
+% \TheoremHeader. Of these, the former is re-defined by \TheoremsAsCommands.
+
+\def\@opargbegintheorem#1#2#3{\begin@theorem{\TheoremHeader{#1}{#2}{ (#3)} }}
+
+\def\@begintheorem#1#2{\begin@theorem{\TheoremHeader{#1}{#2}{} }}
+
+\def\begin@theorem#1{%
+ \trivlist\item[\hskip\labelsep {#1}]% % LaTeX likes this method.
+ \TheoremFont % Italicise the enunciation
+ \ifx\ProofFont\empty\def\ProofFont{\rm}\fi % but not any nested proof.
+ }%
+
+
+%%% Here's what LaTeX (92/1/14) does:
+%%%% RmS 91/08/14 Moved \it after \item to make it work with NFSS
+%%\def\@begintheorem#1#2{\trivlist \item[\hskip \labelsep{\bf #1\ #2}]\it}
+%%\def\@opargbegintheorem#1#2#3{\trivlist
+%% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]\it}
+%%\def\@endtheorem{\endtrivlist}
+
+
+
+%===========================================================================
+% If we're running under LaTeX, skip the rest of the file.
+\ifx\newtheorem\undefined\else\qedrestoreat\expandafter\endinput\fi
+%===========================================================================
+
+% This implements a rudimentary version of \newtheorem for plain TeX.
+% Only the unattributed theorems and the
+% declarations \newtheorem{Theorem}[Result]{Theorem} and
+% \newtheorem{Convention}[Unnumbered]{Convention} are supported.
+% The numbering is based on the counts \chapternumber, \sectionnumber
+% and \subsectionnumber, which it is up to you to define with \newcount.
+% It's also up to you to reset \c@Result at the beginning of each section.
+
+% Form the number: (chapter).(section).(subsection).(#1)
+% where any of the first three parts which is zero
+% negative or undefined is omitted.
+\def\ther@sult#1{%
+\ifx\chapternumber\undefined\else
+ \ifnum\chapternumber>0 \number\chapternumber.\fi\fi
+\ifx\sectionnumber\undefined\else
+ \ifnum\sectionnumber>0 \number\sectionnumber.\fi\fi
+\ifx\subsectionnumber\undefined\else
+ \ifnum\subsectionnumber>0 \number\subsectionnumber.\fi\fi
+\expandafter\number\csname c@#1\endcsname}%
+
+% plain version of LaTeX's \@thm
+\def\plain@thm#1#2{% #1=counter, #2=text
+ \save@set@qed
+ \expandafter\advance\csname c@#1\endcsname1
+ \@begintheorem{#2}{\csname the#1\endcsname}%
+}%
+
+% Rudimentary \newtheorem
+\def\newtheorem#1[#2]#3{% #1=command, #2=counter, #3=text
+ %
+ % \def\#1{\plain@thm{#2}{#3}}
+ \expandafter\def\csname #1\endcsname{\plain@thm{#2}{#3}}%
+ %
+ % \def\end#1{\@endtheorem}
+ \expandafter\def\csname end#1\endcsname{\@endtheorem}%
+ %
+ % if \c@#2 is not defined
+ % \newcount\c@#2
+ % \def\the#2{\ther@sult{#2}}
+ \expandafter\ifx\csname c@#2\endcsname\relax
+ \expandafter\expandafter\csname newcount\endcsname
+ \csname c@#2\endcsname
+ \expandafter\def\csname the#2\endcsname{\ther@sult{#2}}%
+ \fi
+}%
+
+\TheoremsAsCommands
+
+\qedrestoreat\endinput
+
+%===========================================================================
+% BUGS
+% \item\qed\end{letterlist} puts the square above the item label.
+
+% ! You can't use `\unskip' in vertical mode.
+% from \qed in a paragraph on its own.
diff --git a/macros/generic/proofs/taylor/prooftree-doc.dvi b/macros/generic/proofs/taylor/prooftree-doc.dvi
new file mode 100644
index 0000000000..b126e590c2
--- /dev/null
+++ b/macros/generic/proofs/taylor/prooftree-doc.dvi
Binary files differ
diff --git a/macros/generic/proofs/taylor/prooftree-doc.pdf b/macros/generic/proofs/taylor/prooftree-doc.pdf
new file mode 100644
index 0000000000..ef5cc8c0bb
--- /dev/null
+++ b/macros/generic/proofs/taylor/prooftree-doc.pdf
Binary files differ
diff --git a/macros/generic/proofs/taylor/prooftree-doc.tex b/macros/generic/proofs/taylor/prooftree-doc.tex
new file mode 100644
index 0000000000..a4ed2959b4
--- /dev/null
+++ b/macros/generic/proofs/taylor/prooftree-doc.tex
@@ -0,0 +1,198 @@
+\documentstyle{article}
+\input prooftree
+\title{Build proof tree for Natural Deduction, Sequent Calculus, etc.}
+\author{Paul Taylor\\
+Department of Computing,\\
+Imperial College,\\
+London SW7 2BZ\\
++44 71 589 5111 {\em ext\/} 5057\\
+{\tt<pt@doc.ic.ac.uk>}}
+\def\X{x}
+\let\imp\Rightarrow
+\def\T{{\rm t\!t}}\def\F{{\rm f\!f}}
+\def\P#1{p#1}%
+\def\Q#1{q#1}%
+\def\E#1#2{\exists#2.\X_{#2}={#1}}
+\def\A#1#2{\exists#1.\left(\left(\E{#1}{#2}\right)\land\Q{#1}\right)}
+\def\B#1#2{\forall#1.\left(\left(\E{#1}{#2}\right)\imp\P{#1}\right)}
+\def\C#1#2{\exists#1.\P{#1}\land\left(\left(\left(\E{#1}{#2}\right)\land\Q{#1}\right)\right)}
+\overfullrule0pt
+\begin{document}
+\maketitle
+Using my Proof Tree macros, you can produce
+{\small
+$$\begin{prooftree}
+\[ \[ [(\A y n)\land(\B w n)]_\alpha
+ \andelim1
+ \A y n
+ \]
+ \kern-26em
+ \[ \[ \[ \[ \[ [(\A y n)\land(\B w n)]_\alpha
+ \andelim2 \shiftright60pt
+ \B w n
+ \]
+ \allelim
+ (\E y n)\imp\P y
+ \]
+ \[
+ [(\E y n)\land\Q y]_\beta
+ \andelim1
+ \E y n
+ \]
+ \impelim \shiftright50pt
+ \P y
+ \]
+ \kern-25pt
+ [(\E y n)\land\Q y]_\beta
+ \andintro
+ \P y\land((\E y n)\land\Q y)
+ \]
+ \existsintro
+ \C z n
+ \]
+ \existselim\beta
+ \C z n
+\]
+\impintro\alpha
+(\A yn)\land(\B w n)\imp(\C z n)
+\end{prooftree}$$}
+using the \TeX\ or \LaTeX\ code
+\begin{verbatim}
+\input prooftree
+$$
+\begin{prooftree}
+\[ \[ [(\A y n)\land(\B w n)]_\alpha
+ \andelim1
+ \A y n
+ \]
+ \kern-26em
+ \[ \[ \[ \[ \[ [(\A y n)\land(\B w n)]_\alpha
+ \andelim2 \shiftright60pt
+ \B w n
+ \]
+ \allelim
+ (\E y n)\imp\P y
+ \]
+ \[
+ [(\E y n)\land\Q y]_\beta
+ \andelim1
+ \E y n
+ \]
+ \impelim \shiftright50pt
+ \P y
+ \]
+ \kern-25pt
+ [(\E y n)\land\Q y]_\beta
+ \andintro
+ \P y\land((\E y n)\land\Q y)
+ \]
+ \existsintro
+ \C z n
+ \]
+ \existselim\beta
+ \C z n
+\]
+\impintro\alpha
+(\A yn)\land(\B w n)\imp(\C z n)
+\end{prooftree}$$
+\end{verbatim}
+
+
+
+In fact the commands \verb/\allintro/, {\it etc.,} are not primitive;
+the basic form is
+\begin{verbatim}
+\[
+ A\quad
+ B
+\justifies
+ A \land B
+\thickness=0.08em
+\shiftright 2em
+\using
+ {\land}{\cal I}
+\]
+\end{verbatim}
+which gives
+$$\begin{prooftree}
+ A\quad
+ B
+\justifies
+ A \land B
+\thickness=0.08em
+\shiftright 2em
+\using
+ {\land}{\cal I}
+\end{prooftree}$$
+The hypotheses may themselves be proof trees (enclosed in
+\verb/\[/\ldots\verb/\]/)
+and the purpose of the macros is to adjust
+the length of the horizontal ``deduction'' line. When the hypotheses
+are proof trees, suitable space is put between them, but of course
+this must be supplied by hand for simple formulae. The \verb/\thickness/
+and \verb/\shiftright/ commands are, of course, optional; they apply to
+the horizontal line and to the positioning of the conclusion relative to
+it. For a double line, use \verb/\Justifies/ instead of \verb/\justifies/.
+
+Notice the overloading of the \verb/\[/\ldots\verb/\]/; the outermost proof
+tree must be enclosed with \verb/\begin{prooftree}/ and \verb/\end{prooftree}/
+or \verb/\prooftree/ and \verb/\endprooftree/.
+
+To get a vertical string of dots instead of the proof rule, do
+\begin{verbatim}
+\[
+ [A]
+\using
+ \pi
+\proofdotseparation=1.2ex
+\proofdotnumber=4
+\leadsto
+ B
+\]
+\end{verbatim}
+to get
+\prooftree
+ [A]
+\using
+ \pi
+\proofdotseparation=1.2ex
+\proofdotnumber=4
+\leadsto
+ B
+\endprooftree
+
+All of of the keywords except \verb/\prooftree/ and \verb/\endprooftree/
+are optional and may appear in any order. They may also be combined in
+\verb/\newcommand/s, for example
+\begin{verbatim}
+\newcommand\Cut{\using\sf cut\thickness.08em\justifies}
+\end{verbatim}
+with the abbreviation
+\begin{verbatim}
+\[ A \vdash B \qquad
+ B \vdash C
+ \Cut
+ A \vdash C
+\]
+\end{verbatim}
+
+\verb/\thickness/ specifies the breadth of the rule in any units, although
+font-relative units such as ex or em are preferable.
+It may optionally be followed by =.
+\verb/\proofrulebreadth=.08em/ or \verb/\setlength\proofrulebreadth{.08em}/
+may also be used either in place of \verb/\thickness/ or globally; the
+default is 0.04em. \verb/\proofdotseparation/ and \verb/\proofdotnumber/
+control the size of the string of dots.
+
+If proof trees and formulae are mixed, some explicit spacing is needed,
+but don't put anything to the left of the left-most (or the right of
+the right-most) hypothesis, or put it in braces, because this will cause
+the indentation to be lost.
+
+By default the conclusion is centered wrt the left-most and right-most
+immediate hypotheses (not their proofs); \verb/\shiftright/ or
+\verb/\shiftleft/ moves it relative to this position.
+(Not sure about this specification or how
+it should affect spreading of proof tree.)
+
+\end{document} \ No newline at end of file
diff --git a/macros/generic/proofs/taylor/prooftree.sty b/macros/generic/proofs/taylor/prooftree.sty
new file mode 120000
index 0000000000..7d6ff36ab3
--- /dev/null
+++ b/macros/generic/proofs/taylor/prooftree.sty
@@ -0,0 +1 @@
+prooftree.tex \ No newline at end of file
diff --git a/macros/generic/proofs/taylor/prooftree.tex b/macros/generic/proofs/taylor/prooftree.tex
new file mode 100644
index 0000000000..abb7d44864
--- /dev/null
+++ b/macros/generic/proofs/taylor/prooftree.tex
@@ -0,0 +1,347 @@
+\message{<Paul Taylor's Proof Trees, 2 August 1996>}
+%% Build proof tree for Natural Deduction, Sequent Calculus, etc.
+%% WITH SHORTENING OF PROOF RULES!
+%% Paul Taylor, begun 10 Oct 1989
+%% *** THIS IS ONLY A PRELIMINARY VERSION AND THINGS MAY CHANGE! ***
+%%
+%% 2 Aug 1996: fixed \mscount and \proofdotnumber
+%%
+%% \prooftree
+%% hyp1 produces:
+%% hyp2
+%% hyp3 hyp1 hyp2 hyp3
+%% \justifies -------------------- rulename
+%% concl concl
+%% \thickness=0.08em
+%% \shiftright 2em
+%% \using
+%% rulename
+%% \endprooftree
+%%
+%% where the hypotheses may be similar structures or just formulae.
+%%
+%% To get a vertical string of dots instead of the proof rule, do
+%%
+%% \prooftree which produces:
+%% [hyp]
+%% \using [hyp]
+%% name .
+%% \proofdotseparation=1.2ex .name
+%% \proofdotnumber=4 .
+%% \leadsto .
+%% concl concl
+%% \endprooftree
+%%
+%% Within a prooftree, \[ and \] may be used instead of \prooftree and
+%% \endprooftree; this is not permitted at the outer level because it
+%% conflicts with LaTeX. Also,
+%% \Justifies
+%% produces a double line. In LaTeX you can use \begin{prooftree} and
+%% \end{prootree} at the outer level (however this will not work for the inner
+%% levels, but in any case why would you want to be so verbose?).
+%%
+%% All of of the keywords except \prooftree and \endprooftree are optional
+%% and may appear in any order. They may also be combined in \newcommand's
+%% eg "\def\Cut{\using\sf cut\thickness.08em\justifies}" with the abbreviation
+%% "\prooftree hyp1 hyp2 \Cut \concl \endprooftree". This is recommended and
+%% some standard abbreviations will be found at the end of this file.
+%%
+%% \thickness specifies the breadth of the rule in any units, although
+%% font-relative units such as "ex" or "em" are preferable.
+%% It may optionally be followed by "=".
+%% \proofrulebreadth=.08em or \setlength\proofrulebreadth{.08em} may also be
+%% used either in place of \thickness or globally; the default is 0.04em.
+%% \proofdotseparation and \proofdotnumber control the size of the
+%% string of dots
+%%
+%% If proof trees and formulae are mixed, some explicit spacing is needed,
+%% but don't put anything to the left of the left-most (or the right of
+%% the right-most) hypothesis, or put it in braces, because this will cause
+%% the indentation to be lost.
+%%
+%% By default the conclusion is centered wrt the left-most and right-most
+%% immediate hypotheses (not their proofs); \shiftright or \shiftleft moves
+%% it relative to this position. (Not sure about this specification or how
+%% it should affect spreading of proof tree.)
+%
+% global assignments to dimensions seem to have the effect of stretching
+% diagrams horizontally.
+%
+%%==========================================================================
+
+\def\introrule{{\cal I}}\def\elimrule{{\cal E}}%%
+\def\andintro{\using{\land}\introrule\justifies}%%
+\def\impelim{\using{\Rightarrow}\elimrule\justifies}%%
+\def\allintro{\using{\forall}\introrule\justifies}%%
+\def\allelim{\using{\forall}\elimrule\justifies}%%
+\def\falseelim{\using{\bot}\elimrule\justifies}%%
+\def\existsintro{\using{\exists}\introrule\justifies}%%
+
+%% #1 is meant to be 1 or 2 for the first or second formula
+\def\andelim#1{\using{\land}#1\elimrule\justifies}%%
+\def\orintro#1{\using{\lor}#1\introrule\justifies}%%
+
+%% #1 is meant to be a label corresponding to the discharged hypothesis/es
+\def\impintro#1{\using{\Rightarrow}\introrule_{#1}\justifies}%%
+\def\orelim#1{\using{\lor}\elimrule_{#1}\justifies}%%
+\def\existselim#1{\using{\exists}\elimrule_{#1}\justifies}
+
+%%==========================================================================
+
+\newdimen\proofrulebreadth \proofrulebreadth=.05em
+\newdimen\proofdotseparation \proofdotseparation=1.25ex
+\newdimen\proofrulebaseline \proofrulebaseline=2ex
+\newcount\proofdotnumber \proofdotnumber=3
+\let\then\relax
+\def\hfi{\hskip0pt plus.0001fil}
+\mathchardef\squigto="3A3B
+%
+% flag where we are
+\newif\ifinsideprooftree\insideprooftreefalse
+\newif\ifonleftofproofrule\onleftofproofrulefalse
+\newif\ifproofdots\proofdotsfalse
+\newif\ifdoubleproof\doubleprooffalse
+\let\wereinproofbit\relax
+%
+% dimensions and boxes of bits
+\newdimen\shortenproofleft
+\newdimen\shortenproofright
+\newdimen\proofbelowshift
+\newbox\proofabove
+\newbox\proofbelow
+\newbox\proofrulename
+%
+% miscellaneous commands for setting values
+\def\shiftproofbelow{\let\next\relax\afterassignment\setshiftproofbelow\dimen0 }
+\def\shiftproofbelowneg{\def\next{\multiply\dimen0 by-1 }%
+\afterassignment\setshiftproofbelow\dimen0 }
+\def\setshiftproofbelow{\next\proofbelowshift=\dimen0 }
+\def\setproofrulebreadth{\proofrulebreadth}
+
+%=============================================================================
+\def\prooftree{% NESTED ZERO (\ifonleftofproofrule)
+%
+% first find out whether we're at the left-hand end of a proof rule
+\ifnum \lastpenalty=1
+\then \unpenalty
+\else \onleftofproofrulefalse
+\fi
+%
+% some space on left (except if we're on left, and no infinity for outermost)
+\ifonleftofproofrule
+\else \ifinsideprooftree
+ \then \hskip.5em plus1fil
+ \fi
+\fi
+%
+% begin our proof tree environment
+\bgroup% NESTED ONE (\proofbelow, \proofrulename, \proofabove,
+% \shortenproofleft, \shortenproofright, \proofrulebreadth)
+\setbox\proofbelow=\hbox{}\setbox\proofrulename=\hbox{}%
+\let\justifies\proofover\let\leadsto\proofoverdots\let\Justifies\proofoverdbl
+\let\using\proofusing\let\[\prooftree
+\ifinsideprooftree\let\]\endprooftree\fi
+\proofdotsfalse\doubleprooffalse
+\let\thickness\setproofrulebreadth
+\let\shiftright\shiftproofbelow \let\shift\shiftproofbelow
+\let\shiftleft\shiftproofbelowneg
+\let\ifwasinsideprooftree\ifinsideprooftree
+\insideprooftreetrue
+%
+% now begin to set the top of the rule (definitions local to it)
+\setbox\proofabove=\hbox\bgroup$\displaystyle % NESTED TWO
+\let\wereinproofbit\prooftree
+%
+% these local variables will be copied out:
+\shortenproofleft=0pt \shortenproofright=0pt \proofbelowshift=0pt
+%
+% flags to enable inner proof tree to detect if on left:
+\onleftofproofruletrue\penalty1
+}
+
+%=============================================================================
+% end whatever box and copy crucial values out of it
+\def\eproofbit{% NESTED TWO
+%
+% various hacks applicable to hypothesis list
+\ifx \wereinproofbit\prooftree
+\then \ifcase \lastpenalty
+ \then \shortenproofright=0pt % 0: some other object, no indentation
+ \or \unpenalty\hfil % 1: empty hypotheses, just glue
+ \or \unpenalty\unskip % 2: just had a tree, remove glue
+ \else \shortenproofright=0pt % eh?
+ \fi
+\fi
+%
+% pass out crucial values from scope
+\global\dimen0=\shortenproofleft
+\global\dimen1=\shortenproofright
+\global\dimen2=\proofrulebreadth
+\global\dimen3=\proofbelowshift
+\global\dimen4=\proofdotseparation
+\global\count255=\proofdotnumber
+%
+% end the box
+$\egroup % NESTED ONE
+%
+% restore the values
+\shortenproofleft=\dimen0
+\shortenproofright=\dimen1
+\proofrulebreadth=\dimen2
+\proofbelowshift=\dimen3
+\proofdotseparation=\dimen4
+\proofdotnumber=\count255
+}
+
+%=============================================================================
+\def\proofover{% NESTED TWO
+\eproofbit % NESTED ONE
+\setbox\proofbelow=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofover
+$\displaystyle
+}%
+%
+%=============================================================================
+\def\proofoverdbl{% NESTED TWO
+\eproofbit % NESTED ONE
+\doubleprooftrue
+\setbox\proofbelow=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofoverdbl
+$\displaystyle
+}%
+%
+%=============================================================================
+\def\proofoverdots{% NESTED TWO
+\eproofbit % NESTED ONE
+\proofdotstrue
+\setbox\proofbelow=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofoverdots
+$\displaystyle
+}%
+%
+%=============================================================================
+\def\proofusing{% NESTED TWO
+\eproofbit % NESTED ONE
+\setbox\proofrulename=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofusing
+\kern0.3em$
+}
+
+%=============================================================================
+\def\endprooftree{% NESTED TWO
+\eproofbit % NESTED ONE
+% \dimen0 = length of proof rule
+% \dimen1 = indentation of conclusion wrt rule
+% \dimen2 = new \shortenproofleft, ie indentation of conclusion
+% \dimen3 = new \shortenproofright, ie
+% space on right of conclusion to end of tree
+% \dimen4 = space on right of conclusion below rule
+ \dimen5 =0pt% spread of hypotheses
+% \dimen6, \dimen7 = height & depth of rule
+%
+% length of rule needed by proof above
+\dimen0=\wd\proofabove \advance\dimen0-\shortenproofleft
+\advance\dimen0-\shortenproofright
+%
+% amount of spare space below
+\dimen1=.5\dimen0 \advance\dimen1-.5\wd\proofbelow
+\dimen4=\dimen1
+\advance\dimen1\proofbelowshift \advance\dimen4-\proofbelowshift
+%
+% conclusion sticks out to left of immediate hypotheses
+\ifdim \dimen1<0pt
+\then \advance\shortenproofleft\dimen1
+ \advance\dimen0-\dimen1
+ \dimen1=0pt
+% now it sticks out to left of tree!
+ \ifdim \shortenproofleft<0pt
+ \then \setbox\proofabove=\hbox{%
+ \kern-\shortenproofleft\unhbox\proofabove}%
+ \shortenproofleft=0pt
+ \fi
+\fi
+%
+% and to the right
+\ifdim \dimen4<0pt
+\then \advance\shortenproofright\dimen4
+ \advance\dimen0-\dimen4
+ \dimen4=0pt
+\fi
+%
+% make sure enough space for label
+\ifdim \shortenproofright<\wd\proofrulename
+\then \shortenproofright=\wd\proofrulename
+\fi
+%
+% calculate new indentations
+\dimen2=\shortenproofleft \advance\dimen2 by\dimen1
+\dimen3=\shortenproofright\advance\dimen3 by\dimen4
+%
+% make the rule or dots, with name attached
+\ifproofdots
+\then
+ \dimen6=\shortenproofleft \advance\dimen6 .5\dimen0
+ \setbox1=\vbox to\proofdotseparation{\vss\hbox{$\cdot$}\vss}%
+ \setbox0=\hbox{%
+ \advance\dimen6-.5\wd1
+ \kern\dimen6
+ $\vcenter to\proofdotnumber\proofdotseparation
+ {\leaders\box1\vfill}$%
+ \unhbox\proofrulename}%
+\else \dimen6=\fontdimen22\the\textfont2 % height of maths axis
+ \dimen7=\dimen6
+ \advance\dimen6by.5\proofrulebreadth
+ \advance\dimen7by-.5\proofrulebreadth
+ \setbox0=\hbox{%
+ \kern\shortenproofleft
+ \ifdoubleproof
+ \then \hbox to\dimen0{%
+ $\mathsurround0pt\mathord=\mkern-6mu%
+ \cleaders\hbox{$\mkern-2mu=\mkern-2mu$}\hfill
+ \mkern-6mu\mathord=$}%
+ \else \vrule height\dimen6 depth-\dimen7 width\dimen0
+ \fi
+ \unhbox\proofrulename}%
+ \ht0=\dimen6 \dp0=-\dimen7
+\fi
+%
+% set up to centre outermost tree only
+\let\doll\relax
+\ifwasinsideprooftree
+\then \let\VBOX\vbox
+\else \ifmmode\else$\let\doll=$\fi
+ \let\VBOX\vcenter
+\fi
+% this \vbox or \vcenter is the actual output:
+\VBOX {\baselineskip\proofrulebaseline \lineskip.2ex
+ \expandafter\lineskiplimit\ifproofdots0ex\else-0.6ex\fi
+ \hbox spread\dimen5 {\hfi\unhbox\proofabove\hfi}%
+ \hbox{\box0}%
+ \hbox {\kern\dimen2 \box\proofbelow}}\doll%
+%
+% pass new indentations out of scope
+\global\dimen2=\dimen2
+\global\dimen3=\dimen3
+\egroup % NESTED ZERO
+\ifonleftofproofrule
+\then \shortenproofleft=\dimen2
+\fi
+\shortenproofright=\dimen3
+%
+% some space on right and flag we've just made a tree
+\onleftofproofrulefalse
+\ifinsideprooftree
+\then \hskip.5em plus 1fil \penalty2
+\fi
+}
+
+%==========================================================================
+% IDEAS
+% 1. Specification of \shiftright and how to spread trees.
+% 2. Spacing command \m which causes 1em+1fil spacing, over-riding
+% exisiting space on sides of trees and not affecting the
+% detection of being on the left or right.
+% 3. Hack using \@currenvir to detect LaTeX environment; have to
+% use \aftergroup to pass \shortenproofleft/right out.
+% 4. (Pie in the sky) detect how much trees can be "tucked in"
+% 5. Discharged hypotheses (diagonal lines).
diff --git a/macros/generic/psbox/TrashMe.tex b/macros/generic/psbox/TrashMe.tex
new file mode 100644
index 0000000000..31c164b272
--- /dev/null
+++ b/macros/generic/psbox/TrashMe.tex
@@ -0,0 +1,92 @@
+% This collection of files was produced with CERN psbox package
+% To decompose and tex it:
+%-save this with a filename CONTAINING ONLY LETTERS and a .TEX
+% extension (say, JOINTFIL.TEX), in some uncrowded directory;
+%-make sure you can \input psbox.tex (version>=1.3);
+% (else ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/, then get
+% and tex the file psboxall.tex; more info in psbREAD.ME)
+%-tex JOINTFIL.TEX using Plain, or LaTeX, or whatever is needed by
+% the first file in the joining (after splitting JOINTFIL.TEX into
+% it's constituents, TeX will try to process it as it stands).
+\input psbox.tex
+\splitfile{\jobname}
+\let\autojoin=\relax
+%Beginning-Of-File-Named:psbREAD.ME
+% PSBOX READ-ME
+% -------------
+% WHAT IS IT:
+% psbox is a set of machine-independent TeX macros to
+% 1) allow (Encapsulated) PostScript figure inclusion in all versions
+% of TeX (Plain, LaTeX) on all machines using a PostScript printer
+% 2) facilitate the communication (e-mail, ftp, ...) of all the files
+% (text, macros, figs) needed to reproduce a TeX document by grouping
+% them together into a single, TeXable file.
+%
+% HOW TO GET IT TO WORK:
+% 1) get the file psboxall.tex by one of the following ways:
+% -from outside CERN: ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/
+% -(if all else fails) send me a mail (orloff@surya11.cern.ch);
+% 2) tex psboxall.tex: this will produce a complete documentation dvi and a
+% set of files, including the raw macros named psbox.tex;
+% 3) adapt your psbox.tex to your system by uncommenting the appropriate
+% %\psfor...-line at the end of the file;
+% 4) put it in your TeX Inputs directory
+%
+% MAJOR COMMANDS:
+% \psbox{fname.eps}
+% makes a box having the right size to enclose the figure fname.eps;
+% \psboxto(xdim;ydim){fn.eps}
+% makes a box of the given size and rescales fn.eps so that it just fits;
+% \psboxto(\hsize;0pt){fn.eps}
+% has the maximal width & a height computed from a uniformal rescaling;
+% \centinsert{\pscaption{\psbox{fn.eps}}{Fig 1: the caption...}}
+% recommended way to include a graphics between 2 paragraphs;
+% \begin{figure}[hbt]\begin{center}\mbox{\psbox{fn.eps}}\caption{Fig 1:}
+% \end{figure}
+% recommended way in LaTeX;
+% \autojoin
+% makes a single file called psbjoint.tex containing the currently tex'd
+% file plus all the files (macros & figs) included since the \input of
+% psbox.tex. Texing psbjoint.tex will split it into all these files with
+% their original names (so think of PC's:12345678.123!!) and tex the
+% first one (generally the one that issued \autojoin).
+%Beginning-Of-File-Named:psboxOK.tex
+ PSBOX ANTI-bug report form
+ --------------------------
+From:
+To: orloff@surya11.cern.ch (Jean Orloff)
+Subject: psbox ANIT-BUG
+
+PSBOX has been checked to work in the following environment:
+
+MACHINE TEX TEX->PS PRINTER/PREVIEWER
+------- --- ------- -----------------
+Macintosh*.* TeXtures*.* Apple LaserWriter (ALW)
+" OzTeX 1.3 ALW
+UniX workst: TeX 3.14t3 dvips 5.47 ALW
+ SUN4 " " ALW
+ NeXT " " Preview
+" dvialw ALW
+IBM370(VM/CMS) TeX3.14/CMS1.3 DVItoPS ALW
+" " dvips 5.483 ALW
+DOS PC emTeX dvips GhostScript
+
+If your system is not listed here but nevertheless works fine, please
+add in a line, fill in the detailed form below and send it to me.
+
+YOU Name:
+ Email:
+PSBOX version no:
+ source:
+MACHINE type: (NeXT, Mac LC,...)
+ Operating system:
+TEX name:
+ version:
+TEX->PS name: (dvips, TeXtures,...)
+ version:
+DRAWING program: (Adobe Illustrator, xfig,...)
+ version:
+PRINTER type:
+version of PostScript used:
+PREVIEW for postscript (if any): (ghostscript,...)
+
diff --git a/macros/generic/psbox/box.ps b/macros/generic/psbox/box.ps
new file mode 100644
index 0000000000..c40021b123
--- /dev/null
+++ b/macros/generic/psbox/box.ps
@@ -0,0 +1,229 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator:Adobe Illustrator(TM) 3.0
+%%For: (pascal) (ducul)
+%%Title: (box.ps)
+%%CreationDate: (8/5/92) (18:13)
+%%DocumentProcessColors: Black
+%%DocumentFonts: Helvetica-Oblique
+%%+ Times-Roman
+%%DocumentProcSets: Adobe_Illustrator_1.1 0 0
+%%DocumentSuppliedProcSets: Adobe_Illustrator_1.1 0 0
+%%BoundingBox:84 365 299 484
+%%ColorUsage: Black&White
+%%TemplateBox:288 360 288 360
+%%TileBox: 0 0 538 781
+%%DocumentPreview: Macintosh_Pic
+%%EndComments
+%%BeginProcSet:Adobe_Illustrator_1.1 0 0
+% Copyright (C) 1987-1990 Adobe Systems Incorporated.
+% All Rights Reserved.
+% Adobe Illustrator is a trademark of Adobe Systems Incorporated.
+/Adobe_Illustrator_1.1 dup 100 dict def load begin
+/Version 0 def
+/Revision 0 def
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bdef
+/xdef {exch def} bdef
+% graphic state operators
+/_K {3 index add neg dup 0 lt {pop 0} if 3 1 roll} bdef
+/_k /setcmybcolor where
+{/setcmybcolor get} {{1 sub 4 1 roll _K _K _K setrgbcolor pop} bind} ifelse def
+/g {/_b xdef /p {_b setgray} def} bdef
+/G {/_B xdef /P {_B setgray} def} bdef
+/k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef
+/K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef
+/d /setdash ldef
+/_i currentflat def
+/i {dup 0 eq {pop _i} if setflat} bdef
+/j /setlinejoin ldef
+/J /setlinecap ldef
+/M /setmiterlimit ldef
+/w /setlinewidth ldef
+% path construction operators
+/_R {.25 sub round .25 add} bdef
+/_r {transform _R exch _R exch itransform} bdef
+/c {_r curveto} bdef
+/C /c ldef
+/v {currentpoint 6 2 roll _r curveto} bdef
+/V /v ldef
+/y {_r 2 copy curveto} bdef
+/Y /y ldef
+/l {_r lineto} bdef
+/L /l ldef
+/m {_r moveto} bdef
+% error operators
+/_e [] def
+/_E {_e length 0 ne {gsave 0 g 0 G 0 i 0 J 0 j 1 w 10 M [] 0 d
+/Courier 20 0 0 1 z [0.966 0.259 -0.259 0.966
+_e 0 get _e 2 get add 2 div _e 1 get _e 3 get add 2 div] e _f t T grestore} if} bdef
+/_fill {{fill} stopped
+{/_e [pathbbox] def /_f (ERROR: can't fill, increase flatness) def n _E} if} bdef
+/_stroke {{stroke} stopped
+{/_e [pathbbox] def /_f (ERROR: can't stroke, increase flatness) def n _E} if} bdef
+% path painting operators
+/n /newpath ldef
+/N /n ldef
+/F {p _fill} bdef
+/f {closepath F} bdef
+/S {P _stroke} bdef
+/s {closepath S} bdef
+/B {gsave F grestore S} bdef
+/b {closepath B} bdef
+% text block construction and painting operators
+/_s /ashow ldef
+/_S {(?) exch {2 copy 0 exch put pop dup false charpath currentpoint _g setmatrix
+_stroke _G setmatrix moveto 3 copy pop rmoveto} forall pop pop pop n} bdef
+/_A {_a moveto _t exch 0 exch} bdef
+/_L {0 _l neg translate _G currentmatrix pop} bdef
+/_w {dup stringwidth exch 3 -1 roll length 1 sub _t mul add exch} bdef
+/_z [{0 0} bind {dup _w exch neg 2 div exch neg 2 div} bind {dup _w exch neg exch neg} bind] def
+/z {_z exch get /_a xdef /_t xdef /_l xdef exch findfont exch scalefont setfont} bdef
+/_g matrix def
+/_G matrix def
+/_D {_g currentmatrix pop gsave concat _G currentmatrix pop} bdef
+/e {_D p /t {_A _s _L} def} bdef
+/r {_D P /t {_A _S _L} def} bdef
+/a {_D /t {dup p _A _s P _A _S _L} def} bdef
+/o {_D /t {pop _L} def} bdef
+/T {grestore} bdef
+% group construction operators
+/u {} bdef
+/U {} bdef
+% font construction operators
+/Z {findfont begin currentdict dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall /FontName exch def dup length 0 ne
+{/Encoding Encoding 256 array copy def 0 exch {dup type /nametype eq
+{Encoding 2 index 2 index put pop 1 add} {exch pop} ifelse} forall} if pop
+currentdict dup end end /FontName get exch definefont pop} bdef
+end
+%%EndProcSet
+%%EndProlog
+%%BeginSetup
+Adobe_Illustrator_1.1 begin
+n
+%%BeginEncoding: _Helvetica-Oblique Helvetica-Oblique
+[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+]/_Helvetica-Oblique/Helvetica-Oblique Z
+%%EndEncoding
+%%BeginEncoding: _Times-Roman Times-Roman
+[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+]/_Times-Roman/Times-Roman Z
+%%EndEncoding
+%%EndSetup
+u
+0.5 g
+0 G
+0 i 0 J 1 j 1 w 4 M [3 2 ]0 d
+%%Note:
+297 366 m
+297 483 L
+86 483 L
+86 366 L
+297 366 L
+b
+191.5 424.5 m
+B
+U
+u
+1 g
+0 j 0.3 w []0 d
+191.5 365.9999 m
+249.7652 365.9999 297.0001 392.1918 297.0001 424.5 c
+297.0001 456.8082 249.7652 483.0001 191.5 483.0001 c
+133.2347 483.0001 85.9999 456.8082 85.9999 424.5 c
+85.9999 392.1918 133.2347 365.9999 191.5 365.9999 c
+b
+191.5 424.5 m
+B
+U
+u
+u
+u
+0 g
+1 w
+/_Helvetica-Oblique 10 12 0 2 z
+[1 0 0 1 212 445]e
+(Postscript box:)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 2 z
+[1 0 0 1 212 433]e
+()t
+(Sometimes surrounded)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 0 z
+[1 0 0 1 138.0166 409]e
+( by a T)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 0 z
+[1 0 0 1 171.6728 406]e
+(E)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 0 z
+[1 0 0 1 179.0029 409]e
+(X box:)t
+T
+U
+U
+U
+0 G
+1 j [3 2 ]0 d
+226 448 m
+276 448 l
+S
+[]0 d
+225.5 410.5 m
+275.5 410.5 l
+S
+%%PageTrailer
+%%Trailer
+_E end
+%%EOF
diff --git a/macros/generic/psbox/ls-lr b/macros/generic/psbox/ls-lr
new file mode 100644
index 0000000000..fa45c230d4
--- /dev/null
+++ b/macros/generic/psbox/ls-lr
@@ -0,0 +1,8 @@
+-rw-r--r-- 1 1192 1000 3717 Nov 18 17:13 TrashMe.tex
+-rw-r--r-- 1 1192 1000 7028 Nov 18 17:14 box.ps
+-rw-r--r-- 1 1192 1000 1948 Nov 18 17:13 psbREAD.ME
+-rw-r--r-- 1 1192 1000 22507 Nov 18 17:13 psbox.tex
+-rw-r--r-- 1 1192 1000 1048 Nov 18 17:13 psboxOK.tex
+-rw-r--r-- 1 1192 1000 53953 Nov 18 17:13 psboxall.tex
+-rw-r--r-- 1 1192 1000 19895 Nov 18 17:13 psbsamp.tex
+-rw-r--r-- 1 1192 1000 642 Nov 18 17:13 psbug.tex
diff --git a/macros/generic/psbox/psbREAD.ME b/macros/generic/psbox/psbREAD.ME
new file mode 100644
index 0000000000..be159af8ce
--- /dev/null
+++ b/macros/generic/psbox/psbREAD.ME
@@ -0,0 +1,38 @@
+% PSBOX READ-ME
+% -------------
+% WHAT IS IT:
+% psbox is a set of machine-independent TeX macros to
+% 1) allow (Encapsulated) PostScript figure inclusion in all versions
+% of TeX (Plain, LaTeX) on all machines using a PostScript printer
+% 2) facilitate the communication (e-mail, ftp, ...) of all the files
+% (text, macros, figs) needed to reproduce a TeX document by grouping
+% them together into a single, TeXable file.
+%
+% HOW TO GET IT TO WORK:
+% 1) get the file psboxall.tex by one of the following ways:
+% -from outside CERN: ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/
+% -(if all else fails) send me a mail (orloff@surya11.cern.ch);
+% 2) tex psboxall.tex: this will produce a complete documentation dvi and a
+% set of files, including the raw macros named psbox.tex;
+% 3) adapt your psbox.tex to your system by uncommenting the appropriate
+% %\psfor...-line at the end of the file;
+% 4) put it in your TeX Inputs directory
+%
+% MAJOR COMMANDS:
+% \psbox{fname.eps}
+% makes a box having the right size to enclose the figure fname.eps;
+% \psboxto(xdim;ydim){fn.eps}
+% makes a box of the given size and rescales fn.eps so that it just fits;
+% \psboxto(\hsize;0pt){fn.eps}
+% has the maximal width & a height computed from a uniformal rescaling;
+% \centinsert{\pscaption{\psbox{fn.eps}}{Fig 1: the caption...}}
+% recommended way to include a graphics between 2 paragraphs;
+% \begin{figure}[hbt]\begin{center}\mbox{\psbox{fn.eps}}\caption{Fig 1:}
+% \end{figure}
+% recommended way in LaTeX;
+% \autojoin
+% makes a single file called psbjoint.tex containing the currently tex'd
+% file plus all the files (macros & figs) included since the \input of
+% psbox.tex. Texing psbjoint.tex will split it into all these files with
+% their original names (so think of PC's:12345678.123!!) and tex the
+% first one (generally the one that issued \autojoin).
diff --git a/macros/generic/psbox/psbox.tex b/macros/generic/psbox/psbox.tex
new file mode 100644
index 0000000000..b666251327
--- /dev/null
+++ b/macros/generic/psbox/psbox.tex
@@ -0,0 +1,649 @@
+%
+% %%%%%%% %%%%% %%%%%% %%%%% % %
+% % % % % % % % % %
+% % % % % % % % % %
+% %%%%%%% %%%%% %%%%%% % % %
+% % % % % % % % %
+% % % % % % % % %
+% % %%%%%% %%%%%% %%%%% % %
+%
+% By Jean Orloff
+% Comments & suggestions by e-mail: ORLOFF@surya11.cern.ch
+% No modification of this file allowed if not e-sent to me.
+%
+% WHAT IS IT:
+% psbox is a set of machine-independent TeX macros to
+% 1) allow (Encapsulated) PostScript figure inclusion in all versions
+% of TeX (Plain, LaTeX) on all machines using a PostScript printer
+% 2) facilitate the communication (e-mail, ftp, ...) of all the files
+% (text, macros, figs) needed to reproduce a TeX document by grouping
+% them together into a single, TeXable file.
+% For more info, get the file pub/TeX/psbox/PSBOXALL.TEX by anonymous
+% ftp from cs.nyu.edu(=128.122.140.24)
+%
+% History:
+% 1.34 \readfilename=final fix for all filename scans; try \psforptips
+% 1.33: corrects \psnewinput for LaTeX (still fails if fname=a{b}c)
+% 1.32: corrects \psfordvialw and adds .TEX to PSBOXALL(!)
+% 1.31: adds \psfordvialw(?)
+% 1.30: adds \splitfile & \joinfiles for multi-file management
+% 1.24: fix error handling & add \psonlyboxes
+% 1.22: makes \drawingBox \global for use in Phyzzx
+% 1.21: accepts %%BoundingBox: (atend)
+% 1.20: tries to add \psfordvitps for the TeXPS package.
+% 1.10: adds \psforoztex, error handling...
+%2345678 1 2345678 2 2345678 3 2345678 4 2345678 5 2345678 6 2345678 7 23456789
+%
+% Checking version no to avoid multiple loadings
+\def\temp{1.34}%
+\let\tempp=\relax
+\expandafter\ifx\csname psboxversion\endcsname\relax
+ \message{PSBOX(\temp) loading}%
+\else
+ \ifdim\temp cm>\psboxversion cm
+ \message{PSBOX(\temp) loading}%
+ \else
+ \message{PSBOX(\psboxversion) is already loaded: I won't load
+ PSBOX(\temp)!}%
+ \let\temp=\psboxversion
+ \let\tempp=\endinput
+ \fi
+\fi
+\tempp
+\let\psboxversion=\temp
+\catcode`\@=11
+% Every macro likes a little privacy...
+%
+%Trying to tame the variety of \special commands for Postscript: the
+% universal internal command \PSspeci@l##1##2 takes ##1 to be the
+% filename and ##2 to be the integer scale factor*1000 (as for usual
+% TeX \scale commands)
+%
+\def\psfortextures{% For TeXtures on the Macintosh
+%-----------------
+\def\PSspeci@l##1##2{%
+\special{illustration ##1\space scaled ##2}%
+}}%
+\def\psfordvitops{% For the DVItoPS converter on IBM mainframes
+%----------------
+\def\PSspeci@l##1##2{%
+\special{dvitops: import ##1\space \the\drawingwd \the\drawinght}%
+}}%
+\def\psfordvips{% For DVIPS converter on VAX, UNIX and PC's
+%--------------
+\def\PSspeci@l##1##2{%
+% \special{/@scaleunit 1000 def}% never read dox without trying!
+\d@my=0.1bp \d@mx=\drawingwd \divide\d@mx by\d@my% BUG! for large \drawingwd
+\special{PSfile=##1\space llx=\psllx\space lly=\pslly\space%
+urx=\psurx\space ury=\psury\space rwi=\number\d@mx
+}}}%
+\def\psforoztex{% For the OzTeX shareware on the Macintosh
+%--------------
+\def\PSspeci@l##1##2{%
+\special{##1 \space
+ ##2 1000 div dup scale
+ \number-\psllx\space \number-\pslly\space translate
+}}}%
+\def\psfordvitps{% From the UNIX TeXPS package, vers.>3.12
+%---------------
+% Convert a dimension into the number \psn@sp (in scaled points)
+\def\psdimt@n@sp##1{\d@mx=##1\relax\edef\psn@sp{\number\d@mx}}
+\def\PSspeci@l##1##2{%
+% psfig.psr contains the def of "startTexFig": if you can locate it
+% and include the correct pathname, it should work
+\special{dvitps: Include0 "psfig.psr"}% contains def of "startTexFig"
+\psdimt@n@sp{\drawingwd}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\drawinght}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psllx bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\pslly bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psurx bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psury bp}
+\special{dvitps: Literal "\psn@sp\space startTexFig\space"}
+\special{dvitps: Include1 "##1"}
+\special{dvitps: Literal "endTexFig\space"}
+}}%
+\def\psfordvialw{% Try for dvialw, a UNIX public domain
+%---------------
+\def\PSspeci@l##1##2{
+\special{language "PostScript",
+position = "bottom left",
+literal " \psllx\space \pslly\space translate
+ ##2 1000 div dup scale
+ -\psllx\space -\pslly\space translate",
+include "##1"}
+}}%
+\def\psforptips{% For MS-DOS; LUOMA@brandeis.bitnet
+%---------------
+\def\PSspeci@l##1##2{{
+\d@mx=\psurx bp
+\advance \d@mx by -\psllx bp
+\divide \d@mx by 1000\multiply\d@mx by \xscale
+\incm{\d@mx}
+\let\tmpx\dimincm
+\d@my=\psury bp
+\advance \d@my by -\pslly bp
+\divide \d@my by 1000\multiply\d@my by \xscale
+\incm{\d@my}
+\let\tmpy\dimincm
+\d@mx=-\psllx bp
+\divide \d@mx by 1000\multiply\d@mx by \xscale
+\d@my=-\pslly bp
+\divide \d@my by 1000\multiply\d@my by \xscale
+\at(\d@mx;\d@my){\special{ps:##1 x=\tmpx, y=\tmpy}}
+}}}%
+\def\psonlyboxes{% Draft-like behaviour if none of the others works
+%---------------
+\def\PSspeci@l##1##2{%
+\at(0cm;0cm){\boxit{\vbox to\drawinght
+ {\vss\hbox to\drawingwd{\at(0cm;0cm){\hbox{({\tt##1})}}\hss}}}}
+}}%
+\def\psloc@lerr#1{%
+\let\savedPSspeci@l=\PSspeci@l%
+\def\PSspeci@l##1##2{%
+\at(0cm;0cm){\boxit{\vbox to\drawinght
+ {\vss\hbox to\drawingwd{\at(0cm;0cm){\hbox{({\tt##1}) #1}}\hss}}}}
+\let\PSspeci@l=\savedPSspeci@l% restore normal output for other figs!
+}}%
+%\def\psfor... add your own!
+%
+% Some common defs
+%
+\newread\pst@mpin
+\newdimen\drawinght\newdimen\drawingwd
+\newdimen\psxoffset\newdimen\psyoffset
+\newbox\drawingBox
+\newcount\xscale \newcount\yscale \newdimen\pscm\pscm=1cm
+\newdimen\d@mx \newdimen\d@my
+\newdimen\pswdincr \newdimen\pshtincr
+\let\ps@nnotation=\relax
+{\catcode`\|=0 |catcode`|\=12 |catcode`|%=12 |catcode`~=12
+|catcode`#=12 |catcode`*=14
+|xdef|backslashother{\}*
+|xdef|percentother{%}*
+|xdef|tildeother{~}*
+|xdef|sharpother{#}*
+}%
+% useful to display special chars in \tt; fails for \,#,%
+\def\R@moveMeaningHeader#1:->{}%
+\def\uncatcode#1{%
+\edef#1{\expandafter\R@moveMeaningHeader\meaning#1}}%
+%
+\def\execute#1{#1}% NOT stupid: cs in #1 are then identified BEFORE execution
+\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex
+\def\executeinspecs#1{%
+\execute{\begingroup\let\do\psm@keother\dospecials\catcode`\^^M=9#1\endgroup}}%
+\def\@mpty{}%
+% \if\matchin#1#2<=> \iftrue if #1 contains #2, <=>\iffalse otherwise:
+% \if\matchexpin: idem, but #1 & #2 are first fully expanded (no \if
+% inside!)
+% \tmpa & \tmpb contain what's before and after the occurence of #2
+\def\matchexpin#1#2{
+ \fi%
+%\message{(#1>#2)}
+ \edef\tmpb{{#2}}%
+ \expandafter\makem@tchtmp\tmpb%
+ \edef\tmpa{#1}\edef\tmpb{#2}%
+ \expandafter\expandafter\expandafter\m@tchtmp\expandafter\tmpa\tmpb\endm@tch%
+ \if\match%
+}%
+\def\matchin#1#2{%
+ \fi%
+ \makem@tchtmp{#2}%
+ \m@tchtmp#1#2\endm@tch%
+ \if\match%
+}%
+\def\makem@tchtmp#1{\def\m@tchtmp##1#1##2\endm@tch{%
+ \def\tmpa{##1}\def\tmpb{##2}\let\m@tchtmp=\relax%
+ \ifx\tmpb\@mpty\def\match{YN}%
+ \else\def\match{YY}\fi%
+}}%
+% converts any dimen in cm, with 1E-4 cm precision
+\def\incm#1{{\psxoffset=1cm\d@my=#1
+ \d@mx=\d@my
+ \divide\d@mx by \psxoffset
+ \xdef\dimincm{\number\d@mx.}
+ \advance\d@my by -\number\d@mx cm
+ \multiply\d@my by 100
+ \d@mx=\d@my
+ \divide\d@mx by \psxoffset
+ \edef\dimincm{\dimincm\number\d@mx}
+ \advance\d@my by -\number\d@mx cm
+ \multiply\d@my by 100
+ \d@mx=\d@my
+ \divide\d@mx by \psxoffset
+ \xdef\dimincm{\dimincm\number\d@mx}
+}}%
+%
+% \ReadPSize{PSfilename} reads the dimensions of a PostScript drawing
+% and stores it in \drawinght(wd)
+\newif\ifNotB@undingBox
+\newhelp\PShelp{Proceed: you'll have a 5cm square blank box instead of
+your graphics (Jean Orloff).}%
+\def\s@tsize#1 #2 #3 #4\@ndsize{
+ \def\psllx{#1}\def\pslly{#2}%
+ \def\psurx{#3}\def\psury{#4}% needed by a crazyness of dvips!
+ \ifx\psurx\@mpty\NotB@undingBoxtrue% this is not a valid one!
+ \else
+ \drawinght=#4bp\advance\drawinght by-#2bp
+ \drawingwd=#3bp\advance\drawingwd by-#1bp
+% !Units related by crazy factors as bp/pt=72.27/72 should be BANNED!
+ \fi
+ }%
+\def\sc@nBBline#1:#2\@ndBBline{\edef\p@rameter{#1}\edef\v@lue{#2}}%
+\def\g@bblefirstblank#1#2:{\ifx#1 \else#1\fi#2}%
+{\catcode`\%=12
+\xdef\B@undingBox{%%BoundingBox}}%
+%% is not a true comment in PostScript, even if % is!
+\def\ReadPSize#1{
+ \readfilename#1\relax
+ \let\PSfilename=\lastreadfilename
+ \openin\pst@mpin=#1\relax
+ \ifeof\pst@mpin \errhelp=\PShelp
+ \errmessage{I haven't found your postscript file (\PSfilename)}%
+ \psloc@lerr{was not found}%
+ \s@tsize 0 0 142 142\@ndsize
+ \closein\pst@mpin
+ \else
+% each entry in \GlobalInputList should be unique
+ \if\matchexpin{\GlobalInputList}{, \lastreadfilename}%
+ \else\xdef\GlobalInputList{\GlobalInputList, \lastreadfilename}%
+ \immediate\write\psbj@inaux{\lastreadfilename,}%
+ \fi%
+ \loop
+ \executeinspecs{\catcode`\ =10\global\read\pst@mpin to\n@xtline}%
+ \ifeof\pst@mpin
+ \errhelp=\PShelp
+ \errmessage{(\PSfilename) is not an Encapsulated PostScript File:
+ I could not find any \B@undingBox: line.}%
+ \edef\v@lue{0 0 142 142:}%
+ \psloc@lerr{is not an EPSFile}%
+ \NotB@undingBoxfalse
+ \else
+ \expandafter\sc@nBBline\n@xtline:\@ndBBline
+ \ifx\p@rameter\B@undingBox\NotB@undingBoxfalse
+ \edef\t@mp{%
+ \expandafter\g@bblefirstblank\v@lue\space\space\space}%
+ \expandafter\s@tsize\t@mp\@ndsize
+ \else\NotB@undingBoxtrue
+ \fi
+ \fi
+ \ifNotB@undingBox\repeat
+ \closein\pst@mpin
+ \fi
+\message{#1}%
+}%
+%
+% \psboxto(xdim;ydim){psfilename}: you specify the dimensions and
+% TeX uniformly scales to fit the largest one. If xdim=0pt, the
+% scale is fully determined by ydim and vice versa.
+% Notice: psboxes are a real vboxes; couldn't take hbox otherwise all
+% indentation and all cr's would be interpreted as spaces (hugh!).
+%
+\def\psboxto(#1;#2)#3{\vbox{%
+ \ReadPSize{#3}%
+ \advance\pswdincr by \drawingwd
+ \advance\pshtincr by \drawinght
+ \divide\pswdincr by 1000
+ \divide\pshtincr by 1000
+ \d@mx=#1
+ \ifdim\d@mx=0pt\xscale=1000
+ \else \xscale=\d@mx \divide \xscale by \pswdincr\fi
+ \d@my=#2
+ \ifdim\d@my=0pt\yscale=1000
+ \else \yscale=\d@my \divide \yscale by \pshtincr\fi
+ \ifnum\yscale=1000
+ \else\ifnum\xscale=1000\xscale=\yscale
+ \else\ifnum\yscale<\xscale\xscale=\yscale\fi
+ \fi
+ \fi
+ \divide\drawingwd by1000 \multiply\drawingwd by\xscale
+ \divide\drawinght by1000 \multiply\drawinght by\xscale
+ \divide\psxoffset by1000 \multiply\psxoffset by\xscale
+ \divide\psyoffset by1000 \multiply\psyoffset by\xscale
+ \global\divide\pscm by 1000
+ \global\multiply\pscm by\xscale
+ \multiply\pswdincr by\xscale \multiply\pshtincr by\xscale
+ \ifdim\d@mx=0pt\d@mx=\pswdincr\fi
+ \ifdim\d@my=0pt\d@my=\pshtincr\fi
+ \message{scaled \the\xscale}%
+ \hbox to\d@mx{\hss\vbox to\d@my{\vss
+ \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{%
+ \kern-\psyoffset
+ \PSspeci@l{\PSfilename}{\the\xscale}%
+ \vss}\hss\ps@nnotation}%
+ \global\wd\drawingBox=\the\pswdincr
+ \global\ht\drawingBox=\the\pshtincr
+ \global\drawingwd=\pswdincr
+ \global\drawinght=\pshtincr
+ \baselineskip=0pt
+ \copy\drawingBox
+ \vss}\hss}%
+ \global\psxoffset=0pt
+ \global\psyoffset=0pt
+ \global\pswdincr=0pt
+ \global\pshtincr=0pt % These are local to one figure
+ \global\pscm=1cm %should not be necessary
+}}%
+%
+% \psboxscaled{scalefactor*1000}{PSfilename} allows to bypass the
+% rounding errors of TeX integer divisions for situations where the
+% TeX box should fit the original BoundingBox with a precision
+% better
+% than 1/1000.
+%
+\def\psboxscaled#1#2{\vbox{%
+ \ReadPSize{#2}%
+ \xscale=#1
+ \message{scaled \the\xscale}%
+ \divide\pswdincr by 1000 \multiply\pswdincr by \xscale
+ \divide\pshtincr by 1000 \multiply\pshtincr by \xscale
+ \divide\psxoffset by1000 \multiply\psxoffset by\xscale
+ \divide\psyoffset by1000 \multiply\psyoffset by\xscale
+ \divide\drawingwd by1000 \multiply\drawingwd by\xscale
+ \divide\drawinght by1000 \multiply\drawinght by\xscale
+ \global\divide\pscm by 1000
+ \global\multiply\pscm by\xscale
+ \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{%
+ \kern-\psyoffset
+ \PSspeci@l{\PSfilename}{\the\xscale}%
+ \vss}\hss\ps@nnotation}%
+ \advance\pswdincr by \drawingwd
+ \advance\pshtincr by \drawinght
+ \global\wd\drawingBox=\the\pswdincr
+ \global\ht\drawingBox=\the\pshtincr
+ \global\drawingwd=\pswdincr
+ \global\drawinght=\pshtincr
+ \baselineskip=0pt
+ \copy\drawingBox
+ \global\psxoffset=0pt
+ \global\psyoffset=0pt
+ \global\pswdincr=0pt
+ \global\pshtincr=0pt % These are local to one figure
+ \global\pscm=1cm
+}}%
+%
+% \psbox{PSfilename} makes a TeX box having the minimal size to
+% enclose the picture
+\def\psbox#1{\psboxscaled{1000}{#1}}%
+%------------------------------------------------------
+% \joinfiles file1, file2, ...n \into joinedfilename .
+% makes one file out of many
+% \splitfile joinedfilename
+% the opposite
+\newif\ifn@teof\n@teoftrue
+\newif\ifc@ntrolline
+\newif\ifmatch
+\newread\j@insplitin
+\newwrite\j@insplitout
+\newwrite\psbj@inaux
+\immediate\openout\psbj@inaux=psbjoin.aux
+\immediate\write\psbj@inaux{\string\joinfiles}%
+\immediate\write\psbj@inaux{\jobname,}%
+%
+% INPUT REDEFINITION
+%
+% works if #1 is a single character
+\def\toother#1{\ifcat\relax#1\else\expandafter%
+ \toother@ux\meaning#1\endtoother@ux\fi}%
+\def\toother@ux#1 #2#3\endtoother@ux{\def\tmp{#3}%
+ \ifx\tmp\@mpty\def\tmp{#2}\let\next=\relax%
+ \else\def\next{\toother@ux#2#3\endtoother@ux}\fi%
+\next}%
+%
+% \readfilename defs:
+%
+\let\readfilenamehook=\relax
+\def\re@d{\expandafter\re@daux}% spares typing 10 \expandafter's...
+\def\re@daux{\futurelet\nextchar\stopre@dtest}%
+\def\re@dnext{\xdef\lastreadfilename{\lastreadfilename\nextchar}%
+ \afterassignment\re@d\let\nextchar}%
+\def\stopre@d{\egroup\readfilenamehook}%
+\def\stopre@dtest{%
+ \ifcat\nextchar\relax\let\nextread\stopre@d
+ \else
+ \ifcat\nextchar\space\def\nextread{%
+ \afterassignment\stopre@d\chardef\nextchar=`}%
+ \else\let\nextread=\re@dnext
+ \toother\nextchar
+ \edef\nextchar{\tmp}%
+ \fi
+ \fi\nextread}%
+\def\readfilename{\bgroup%
+ \let\\=\backslashother \let\%=\percentother \let\~=\tildeother
+ \let\#=\sharpother \xdef\lastreadfilename{}%
+ \re@d}%
+%
+% redefines \input using \readfilename
+%
+\xdef\GlobalInputList{\jobname}%
+\def\psnewinput{%
+ \def\readfilenamehook{% each entry in \GlobalInputList should be unique
+ \if\matchexpin{\GlobalInputList}{, \lastreadfilename}%
+ \else\xdef\GlobalInputList{\GlobalInputList, \lastreadfilename}%
+ \immediate\write\psbj@inaux{\lastreadfilename,}%
+ \fi%
+ \ps@ldinput\lastreadfilename\relax%
+ \let\readfilenamehook=\relax%
+ }\readfilename%
+}%
+\expandafter\ifx\csname @@input\endcsname\relax % then Plain
+ \immediate\let\ps@ldinput=\input\def\input{\psnewinput}%
+\else
+ \immediate\let\ps@ldinput=\@@input
+ \def\@@input{\psnewinput}%
+\fi%
+%
+\def\nowarnopenout{%
+ \def\warnopenout##1##2{%
+ \readfilename##2\relax
+ \message{\lastreadfilename}%
+ \immediate\openout##1=\lastreadfilename\relax}}%
+\def\warnopenout#1#2{%
+ \readfilename#2\relax
+ \def\t@mp{TrashMe,psbjoin.aux,psbjoint.tex,}\uncatcode\t@mp
+ \if\matchexpin{\t@mp}{\lastreadfilename,}%
+ \else
+ \immediate\openin\pst@mpin=\lastreadfilename\relax
+ \ifeof\pst@mpin
+ \else
+ \errhelp{If the content of this file is so precious to you, abort (ie
+press x or e) and rename it before retrying.}%
+ \errmessage{I'm just about to replace your file named \lastreadfilename}%
+ \fi
+ \immediate\closein\pst@mpin
+ \fi
+ \message{\lastreadfilename}%
+ \immediate\openout#1=\lastreadfilename\relax}%
+% % will have an unusual catcode below; use * instead
+%\vbox
+{\catcode`\%=12\catcode`\*=14
+\gdef\splitfile#1{*
+ \readfilename#1\relax
+ \immediate\openin\j@insplitin=\lastreadfilename\relax
+ \ifeof\j@insplitin
+ \message{! I couldn't find and split \lastreadfilename!}*
+ \else
+ \immediate\openout\j@insplitout=TrashMe
+ \message{< Splitting \lastreadfilename\space into}*
+ \loop
+ \ifeof\j@insplitin
+ \immediate\closein\j@insplitin\n@teoffalse
+ \else
+ \n@teoftrue
+ \executeinspecs{\global\read\j@insplitin to\spl@tinline\expandafter
+ \ch@ckbeginnewfile\spl@tinline%Beginning-Of-File-Named:%\endcheck}*
+ \ifc@ntrolline
+ \else
+ \toks0=\expandafter{\spl@tinline}*
+ \immediate\write\j@insplitout{\the\toks0}*
+ \fi
+ \fi
+ \ifn@teof\repeat
+ \immediate\closeout\j@insplitout
+ \fi\message{>}*
+}*
+\gdef\ch@ckbeginnewfile#1%Beginning-Of-File-Named:#2%#3\endcheck{*
+ \def\t@mp{#1}*
+ \ifx\@mpty\t@mp
+ \def\t@mp{#3}*
+ \ifx\@mpty\t@mp
+ \global\c@ntrollinefalse
+ \else
+ \immediate\closeout\j@insplitout
+ \warnopenout\j@insplitout{#2}*
+ \global\c@ntrollinetrue
+ \fi
+ \else
+ \global\c@ntrollinefalse
+ \fi}*
+\gdef\joinfiles#1\into#2{*
+ \message{< Joining following files into}*
+ \warnopenout\j@insplitout{#2}*
+ \message{:}*
+ {*
+ \edef\w@##1{\immediate\write\j@insplitout{##1}}*
+\w@{% This collection of files was produced with CERN psbox package}*
+\w@{% To decompose and tex it:}*
+\w@{%-save this with a filename CONTAINING ONLY LETTERS and a .TEX}*
+\w@{% extension (say, JOINTFIL.TEX), in some uncrowded directory;}*
+\w@{%-make sure you can \string\input\space psbox.tex (version>=1.3);}*
+\w@{% (else ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/, then get}*
+\w@{% and tex the file psboxall.tex; more info in psbREAD.ME)}*
+\w@{%-tex JOINTFIL.TEX using Plain, or LaTeX, or whatever is needed by}*
+\w@{% the first file in the joining (after splitting JOINTFIL.TEX into}*
+\w@{% it's constituents, TeX will try to process it as it stands).}*
+\w@{\string\input\space psbox.tex}*
+\w@{\string\splitfile{\string\jobname}}*
+\w@{\string\let\string\autojoin=\string\relax}*
+}*
+ \expandafter\tre@tfilelist#1, \endtre@t
+ \immediate\closeout\j@insplitout
+ \message{>}*
+}*
+\gdef\tre@tfilelist#1, #2\endtre@t{*
+ \readfilename#1\relax
+ \ifx\@mpty\lastreadfilename
+ \else
+ \immediate\openin\j@insplitin=\lastreadfilename\relax
+ \ifeof\j@insplitin
+ \errmessage{I couldn't find file \lastreadfilename}*
+ \else
+ \message{\lastreadfilename}*
+ \immediate\write\j@insplitout{%Beginning-Of-File-Named:\lastreadfilename}*
+ \executeinspecs{\global\read\j@insplitin to\oldj@ininline}*
+ \loop
+ \ifeof\j@insplitin\immediate\closein\j@insplitin\n@teoffalse
+ \else\n@teoftrue
+ \executeinspecs{\global\read\j@insplitin to\j@ininline}*
+ \toks0=\expandafter{\oldj@ininline}*
+ \let\oldj@ininline=\j@ininline
+ \immediate\write\j@insplitout{\the\toks0}*
+ \fi
+ \ifn@teof
+ \repeat
+ \immediate\closein\j@insplitin
+ \fi
+ \tre@tfilelist#2, \endtre@t
+ \fi}*
+}%
+% To be put at the end of a file, for making a tar-like file containing
+% everything it used.
+\def\autojoin{%
+ \immediate\write\psbj@inaux{\string\into{psbjoint.tex}}%
+ \immediate\closeout\psbj@inaux
+ \expandafter\joinfiles\GlobalInputList\into{psbjoint.tex}%
+}%
+%----------------------------------------------------------------
+% Annotations & Captions etc...
+%
+%
+% \centinsert{anybox} is just a centered \midinsert, but is included as
+% people barely use the original inserts from TeX.
+%
+\def\centinsert#1{\midinsert\line{\hss#1\hss}\endinsert}%
+\def\psannotate#1#2{\vbox{%
+ \def\ps@nnotation{#2\global\let\ps@nnotation=\relax}#1}}%
+\def\pscaption#1#2{\vbox{%
+ \setbox\drawingBox=#1
+ \copy\drawingBox
+ \vskip\baselineskip
+ \vbox{\hsize=\wd\drawingBox\setbox0=\hbox{#2}%
+ \ifdim\wd0>\hsize
+ \noindent\unhbox0\tolerance=5000
+ \else\centerline{\box0}%
+ \fi
+}}}%
+% for compatibility with older versions, but \psfig is a bad name!
+%\def\psfig#1#2#3{\pscaption{\psannotate{#1}{#2}}{#3}}
+%\def\psfigurebox#1#2#3{\pscaption{\psannotate{\psbox{#1}}{#2}}{#3}}
+%
+% \at(#1;#2)#3 puts #3 at #1-higher and #2-right of the current
+% position without moving it (to be used in annotations).
+\def\at(#1;#2)#3{\setbox0=\hbox{#3}\ht0=0pt\dp0=0pt
+ \rlap{\kern#1\vbox to0pt{\kern-#2\box0\vss}}}%
+%
+% \gridfill(ht;wd) makes a 1cm*1cm grid of ht by wd whose lower-left
+% corner is the current point
+\newdimen\gridht \newdimen\gridwd
+\def\gridfill(#1;#2){%
+ \setbox0=\hbox to 1\pscm
+ {\vrule height1\pscm width.4pt\leaders\hrule\hfill}%
+ \gridht=#1
+ \divide\gridht by \ht0
+ \multiply\gridht by \ht0
+ \gridwd=#2
+ \divide\gridwd by \wd0
+ \multiply\gridwd by \wd0
+ \advance \gridwd by \wd0
+ \vbox to \gridht{\leaders\hbox to\gridwd{\leaders\box0\hfill}\vfill}}%
+%
+% Useful to measure where to put annotations
+\def\fillinggrid{\at(0cm;0cm){\vbox{%
+ \gridfill(\drawinght;\drawingwd)}}}%
+%
+% \textleftof\anybox: Sample text\endtext
+% inserts "Sample text" on the left of \anybox ie \vbox, \psbox.
+% \textrightof is the symmetric (not documented, too uggly)
+% Welcome any suggestion about clean wraparound macros from
+% TeXhackers reading this
+%
+\def\textleftof#1:{%
+ \setbox1=#1
+ \setbox0=\vbox\bgroup
+ \advance\hsize by -\wd1 \advance\hsize by -2em}%
+\def\textrightof#1:{%
+ \setbox0=#1
+ \setbox1=\vbox\bgroup
+ \advance\hsize by -\wd0 \advance\hsize by -2em}%
+\def\endtext{%
+ \egroup
+ \hbox to \hsize{\valign{\vfil##\vfil\cr%
+\box0\cr%
+\noalign{\hss}\box1\cr}}}%
+%
+% \frameit{\thick}{\skip}{\anybox}
+% draws with thickness \thick a box around \anybox, leaving \skip of
+% blank around it. eg \frameit{0.5pt}{1pt}{\hbox{hello}}
+% \boxit{\anybox} is a shortcut.
+\def\frameit#1#2#3{\hbox{\vrule width#1\vbox{%
+ \hrule height#1\vskip#2\hbox{\hskip#2\vbox{#3}\hskip#2}%
+ \vskip#2\hrule height#1}\vrule width#1}}%
+\def\boxit#1{\frameit{0.4pt}{0pt}{#1}}%
+%
+%
+\catcode`\@=12 % cs containing @ are unreachable
+%
+% CUSTOMIZE YOUR DEFAULT DRIVER:
+% Uncomment the line corresponding to your TeX system:
+%\psfortextures% For TeXtures on the Macintosh
+%\psforoztex % For OzTeX shareware on the Macintosh
+%\psfordvitops % For the DVItoPS converter for TeX on IBM mainframes
+ \psfordvips % For DVIPS converter on VAX and UNIX
+%\psfordvitps % For dvitps from TeXPS package under UNIX
+%\psfordvialw % For dvialw, UNIX public domain
+%\psonlyboxes % Blank Boxes (when all else fails).
diff --git a/macros/generic/psbox/psboxOK.tex b/macros/generic/psbox/psboxOK.tex
new file mode 100644
index 0000000000..d774910dc4
--- /dev/null
+++ b/macros/generic/psbox/psboxOK.tex
@@ -0,0 +1,39 @@
+ PSBOX ANTI-bug report form
+ --------------------------
+From:
+To: orloff@surya11.cern.ch (Jean Orloff)
+Subject: psbox ANIT-BUG
+
+PSBOX has been checked to work in the following environment:
+
+MACHINE TEX TEX->PS PRINTER/PREVIEWER
+------- --- ------- -----------------
+Macintosh*.* TeXtures*.* Apple LaserWriter (ALW)
+" OzTeX 1.3 ALW
+UniX workst: TeX 3.14t3 dvips 5.47 ALW
+ SUN4 " " ALW
+ NeXT " " Preview
+" dvialw ALW
+IBM370(VM/CMS) TeX3.14/CMS1.3 DVItoPS ALW
+" " dvips 5.483 ALW
+DOS PC emTeX dvips GhostScript
+
+If your system is not listed here but nevertheless works fine, please
+add in a line, fill in the detailed form below and send it to me.
+
+YOU Name:
+ Email:
+PSBOX version no:
+ source:
+MACHINE type: (NeXT, Mac LC,...)
+ Operating system:
+TEX name:
+ version:
+TEX->PS name: (dvips, TeXtures,...)
+ version:
+DRAWING program: (Adobe Illustrator, xfig,...)
+ version:
+PRINTER type:
+version of PostScript used:
+PREVIEW for postscript (if any): (ghostscript,...)
+
diff --git a/macros/generic/psbox/psboxall.tex b/macros/generic/psbox/psboxall.tex
new file mode 100644
index 0000000000..e0df77711c
--- /dev/null
+++ b/macros/generic/psbox/psboxall.tex
@@ -0,0 +1,1434 @@
+% This text was produced with psbox's \joinfiles. You should:
+%-save this with a filename CONTAINING ONLY LETTERS
+% (say, PSBOXALL.TEX), in some uncrowded directory;
+%-tex PSBOXALL.TEX using Plain TeX.
+% You will get 6 files:
+% psbox.tex (the macros),
+% psbsamp.tex (the dox & sample file)
+% psbREAD.ME (a quick overview)
+% box.ps (a stupid sample PostScript dawing)
+% psbugs.tex (a sample bug report file)
+% psboxOK.tex {an anti-bug report file: please send if satisfied!)
+% and furthermore do the equivalent of TeXing psbsamp.tex.
+%Beginning-Of-File-Named:psbox.tex
+%
+% %%%%%%% %%%%% %%%%%% %%%%% % %
+% % % % % % % % % %
+% % % % % % % % % %
+% %%%%%%% %%%%% %%%%%% % % %
+% % % % % % % % %
+% % % % % % % % %
+% % %%%%%% %%%%%% %%%%% % %
+%
+% By Jean Orloff
+% Comments & suggestions by e-mail: ORLOFF@surya11.cern.ch
+% No modification of this file allowed if not e-sent to me.
+%
+% WHAT IS IT:
+% psbox is a set of machine-independent TeX macros to
+% 1) allow (Encapsulated) PostScript figure inclusion in all versions
+% of TeX (Plain, LaTeX) on all machines using a PostScript printer
+% 2) facilitate the communication (e-mail, ftp, ...) of all the files
+% (text, macros, figs) needed to reproduce a TeX document by grouping
+% them together into a single, TeXable file.
+% For more info, get the file pub/TeX/psbox/PSBOXALL.TEX by anonymous
+% ftp from cs.nyu.edu(=128.122.140.24)
+%
+% History:
+% 1.34 \readfilename=final fix for all filename scans; try \psforptips
+% 1.33: corrects \psnewinput for LaTeX (still fails if fname=a{b}c)
+% 1.32: corrects \psfordvialw and adds .TEX to PSBOXALL(!)
+% 1.31: adds \psfordvialw(?)
+% 1.30: adds \splitfile & \joinfiles for multi-file management
+% 1.24: fix error handling & add \psonlyboxes
+% 1.22: makes \drawingBox \global for use in Phyzzx
+% 1.21: accepts %%BoundingBox: (atend)
+% 1.20: tries to add \psfordvitps for the TeXPS package.
+% 1.10: adds \psforoztex, error handling...
+%2345678 1 2345678 2 2345678 3 2345678 4 2345678 5 2345678 6 2345678 7 23456789
+%
+% Checking version no to avoid multiple loadings
+\def\temp{1.34}%
+\let\tempp=\relax
+\expandafter\ifx\csname psboxversion\endcsname\relax
+ \message{PSBOX(\temp) loading}%
+\else
+ \ifdim\temp cm>\psboxversion cm
+ \message{PSBOX(\temp) loading}%
+ \else
+ \message{PSBOX(\psboxversion) is already loaded: I won't load
+ PSBOX(\temp)!}%
+ \let\temp=\psboxversion
+ \let\tempp=\endinput
+ \fi
+\fi
+\tempp
+\let\psboxversion=\temp
+\catcode`\@=11
+% Every macro likes a little privacy...
+%
+%Trying to tame the variety of \special commands for Postscript: the
+% universal internal command \PSspeci@l##1##2 takes ##1 to be the
+% filename and ##2 to be the integer scale factor*1000 (as for usual
+% TeX \scale commands)
+%
+\def\psfortextures{% For TeXtures on the Macintosh
+%-----------------
+\def\PSspeci@l##1##2{%
+\special{illustration ##1\space scaled ##2}%
+}}%
+\def\psfordvitops{% For the DVItoPS converter on IBM mainframes
+%----------------
+\def\PSspeci@l##1##2{%
+\special{dvitops: import ##1\space \the\drawingwd \the\drawinght}%
+}}%
+\def\psfordvips{% For DVIPS converter on VAX, UNIX and PC's
+%--------------
+\def\PSspeci@l##1##2{%
+% \special{/@scaleunit 1000 def}% never read dox without trying!
+\d@my=0.1bp \d@mx=\drawingwd \divide\d@mx by\d@my% BUG! for large \drawingwd
+\special{PSfile=##1\space llx=\psllx\space lly=\pslly\space%
+urx=\psurx\space ury=\psury\space rwi=\number\d@mx
+}}}%
+\def\psforoztex{% For the OzTeX shareware on the Macintosh
+%--------------
+\def\PSspeci@l##1##2{%
+\special{##1 \space
+ ##2 1000 div dup scale
+ \number-\psllx\space \number-\pslly\space translate
+}}}%
+\def\psfordvitps{% From the UNIX TeXPS package, vers.>3.12
+%---------------
+% Convert a dimension into the number \psn@sp (in scaled points)
+\def\psdimt@n@sp##1{\d@mx=##1\relax\edef\psn@sp{\number\d@mx}}
+\def\PSspeci@l##1##2{%
+% psfig.psr contains the def of "startTexFig": if you can locate it
+% and include the correct pathname, it should work
+\special{dvitps: Include0 "psfig.psr"}% contains def of "startTexFig"
+\psdimt@n@sp{\drawingwd}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\drawinght}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psllx bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\pslly bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psurx bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psury bp}
+\special{dvitps: Literal "\psn@sp\space startTexFig\space"}
+\special{dvitps: Include1 "##1"}
+\special{dvitps: Literal "endTexFig\space"}
+}}%
+\def\psfordvialw{% Try for dvialw, a UNIX public domain
+%---------------
+\def\PSspeci@l##1##2{
+\special{language "PostScript",
+position = "bottom left",
+literal " \psllx\space \pslly\space translate
+ ##2 1000 div dup scale
+ -\psllx\space -\pslly\space translate",
+include "##1"}
+}}%
+\def\psforptips{% For MS-DOS; LUOMA@brandeis.bitnet
+%---------------
+\def\PSspeci@l##1##2{{
+\d@mx=\psurx bp
+\advance \d@mx by -\psllx bp
+\divide \d@mx by 1000\multiply\d@mx by \xscale
+\incm{\d@mx}
+\let\tmpx\dimincm
+\d@my=\psury bp
+\advance \d@my by -\pslly bp
+\divide \d@my by 1000\multiply\d@my by \xscale
+\incm{\d@my}
+\let\tmpy\dimincm
+\d@mx=-\psllx bp
+\divide \d@mx by 1000\multiply\d@mx by \xscale
+\d@my=-\pslly bp
+\divide \d@my by 1000\multiply\d@my by \xscale
+\at(\d@mx;\d@my){\special{ps:##1 x=\tmpx, y=\tmpy}}
+}}}%
+\def\psonlyboxes{% Draft-like behaviour if none of the others works
+%---------------
+\def\PSspeci@l##1##2{%
+\at(0cm;0cm){\boxit{\vbox to\drawinght
+ {\vss\hbox to\drawingwd{\at(0cm;0cm){\hbox{({\tt##1})}}\hss}}}}
+}}%
+\def\psloc@lerr#1{%
+\let\savedPSspeci@l=\PSspeci@l%
+\def\PSspeci@l##1##2{%
+\at(0cm;0cm){\boxit{\vbox to\drawinght
+ {\vss\hbox to\drawingwd{\at(0cm;0cm){\hbox{({\tt##1}) #1}}\hss}}}}
+\let\PSspeci@l=\savedPSspeci@l% restore normal output for other figs!
+}}%
+%\def\psfor... add your own!
+%
+% Some common defs
+%
+\newread\pst@mpin
+\newdimen\drawinght\newdimen\drawingwd
+\newdimen\psxoffset\newdimen\psyoffset
+\newbox\drawingBox
+\newcount\xscale \newcount\yscale \newdimen\pscm\pscm=1cm
+\newdimen\d@mx \newdimen\d@my
+\newdimen\pswdincr \newdimen\pshtincr
+\let\ps@nnotation=\relax
+{\catcode`\|=0 |catcode`|\=12 |catcode`|%=12 |catcode`~=12
+|catcode`#=12 |catcode`*=14
+|xdef|backslashother{\}*
+|xdef|percentother{%}*
+|xdef|tildeother{~}*
+|xdef|sharpother{#}*
+}%
+% useful to display special chars in \tt; fails for \,#,%
+\def\R@moveMeaningHeader#1:->{}%
+\def\uncatcode#1{%
+\edef#1{\expandafter\R@moveMeaningHeader\meaning#1}}%
+%
+\def\execute#1{#1}% NOT stupid: cs in #1 are then identified BEFORE execution
+\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex
+\def\executeinspecs#1{%
+\execute{\begingroup\let\do\psm@keother\dospecials\catcode`\^^M=9#1\endgroup}}%
+\def\@mpty{}%
+% \if\matchin#1#2<=> \iftrue if #1 contains #2, <=>\iffalse otherwise:
+% \if\matchexpin: idem, but #1 & #2 are first fully expanded (no \if
+% inside!)
+% \tmpa & \tmpb contain what's before and after the occurence of #2
+\def\matchexpin#1#2{
+ \fi%
+%\message{(#1>#2)}
+ \edef\tmpb{{#2}}%
+ \expandafter\makem@tchtmp\tmpb%
+ \edef\tmpa{#1}\edef\tmpb{#2}%
+ \expandafter\expandafter\expandafter\m@tchtmp\expandafter\tmpa\tmpb\endm@tch%
+ \if\match%
+}%
+\def\matchin#1#2{%
+ \fi%
+ \makem@tchtmp{#2}%
+ \m@tchtmp#1#2\endm@tch%
+ \if\match%
+}%
+\def\makem@tchtmp#1{\def\m@tchtmp##1#1##2\endm@tch{%
+ \def\tmpa{##1}\def\tmpb{##2}\let\m@tchtmp=\relax%
+ \ifx\tmpb\@mpty\def\match{YN}%
+ \else\def\match{YY}\fi%
+}}%
+% converts any dimen in cm, with 1E-4 cm precision
+\def\incm#1{{\psxoffset=1cm\d@my=#1
+ \d@mx=\d@my
+ \divide\d@mx by \psxoffset
+ \xdef\dimincm{\number\d@mx.}
+ \advance\d@my by -\number\d@mx cm
+ \multiply\d@my by 100
+ \d@mx=\d@my
+ \divide\d@mx by \psxoffset
+ \edef\dimincm{\dimincm\number\d@mx}
+ \advance\d@my by -\number\d@mx cm
+ \multiply\d@my by 100
+ \d@mx=\d@my
+ \divide\d@mx by \psxoffset
+ \xdef\dimincm{\dimincm\number\d@mx}
+}}%
+%
+% \ReadPSize{PSfilename} reads the dimensions of a PostScript drawing
+% and stores it in \drawinght(wd)
+\newif\ifNotB@undingBox
+\newhelp\PShelp{Proceed: you'll have a 5cm square blank box instead of
+your graphics (Jean Orloff).}%
+\def\s@tsize#1 #2 #3 #4\@ndsize{
+ \def\psllx{#1}\def\pslly{#2}%
+ \def\psurx{#3}\def\psury{#4}% needed by a crazyness of dvips!
+ \ifx\psurx\@mpty\NotB@undingBoxtrue% this is not a valid one!
+ \else
+ \drawinght=#4bp\advance\drawinght by-#2bp
+ \drawingwd=#3bp\advance\drawingwd by-#1bp
+% !Units related by crazy factors as bp/pt=72.27/72 should be BANNED!
+ \fi
+ }%
+\def\sc@nBBline#1:#2\@ndBBline{\edef\p@rameter{#1}\edef\v@lue{#2}}%
+\def\g@bblefirstblank#1#2:{\ifx#1 \else#1\fi#2}%
+{\catcode`\%=12
+\xdef\B@undingBox{%%BoundingBox}}%
+%% is not a true comment in PostScript, even if % is!
+\def\ReadPSize#1{
+ \readfilename#1\relax
+ \let\PSfilename=\lastreadfilename
+ \openin\pst@mpin=#1\relax
+ \ifeof\pst@mpin \errhelp=\PShelp
+ \errmessage{I haven't found your postscript file (\PSfilename)}%
+ \psloc@lerr{was not found}%
+ \s@tsize 0 0 142 142\@ndsize
+ \closein\pst@mpin
+ \else
+% each entry in \GlobalInputList should be unique
+ \if\matchexpin{\GlobalInputList}{, \lastreadfilename}%
+ \else\xdef\GlobalInputList{\GlobalInputList, \lastreadfilename}%
+ \immediate\write\psbj@inaux{\lastreadfilename,}%
+ \fi%
+ \loop
+ \executeinspecs{\catcode`\ =10\global\read\pst@mpin to\n@xtline}%
+ \ifeof\pst@mpin
+ \errhelp=\PShelp
+ \errmessage{(\PSfilename) is not an Encapsulated PostScript File:
+ I could not find any \B@undingBox: line.}%
+ \edef\v@lue{0 0 142 142:}%
+ \psloc@lerr{is not an EPSFile}%
+ \NotB@undingBoxfalse
+ \else
+ \expandafter\sc@nBBline\n@xtline:\@ndBBline
+ \ifx\p@rameter\B@undingBox\NotB@undingBoxfalse
+ \edef\t@mp{%
+ \expandafter\g@bblefirstblank\v@lue\space\space\space}%
+ \expandafter\s@tsize\t@mp\@ndsize
+ \else\NotB@undingBoxtrue
+ \fi
+ \fi
+ \ifNotB@undingBox\repeat
+ \closein\pst@mpin
+ \fi
+\message{#1}%
+}%
+%
+% \psboxto(xdim;ydim){psfilename}: you specify the dimensions and
+% TeX uniformly scales to fit the largest one. If xdim=0pt, the
+% scale is fully determined by ydim and vice versa.
+% Notice: psboxes are a real vboxes; couldn't take hbox otherwise all
+% indentation and all cr's would be interpreted as spaces (hugh!).
+%
+\def\psboxto(#1;#2)#3{\vbox{%
+ \ReadPSize{#3}%
+ \advance\pswdincr by \drawingwd
+ \advance\pshtincr by \drawinght
+ \divide\pswdincr by 1000
+ \divide\pshtincr by 1000
+ \d@mx=#1
+ \ifdim\d@mx=0pt\xscale=1000
+ \else \xscale=\d@mx \divide \xscale by \pswdincr\fi
+ \d@my=#2
+ \ifdim\d@my=0pt\yscale=1000
+ \else \yscale=\d@my \divide \yscale by \pshtincr\fi
+ \ifnum\yscale=1000
+ \else\ifnum\xscale=1000\xscale=\yscale
+ \else\ifnum\yscale<\xscale\xscale=\yscale\fi
+ \fi
+ \fi
+ \divide\drawingwd by1000 \multiply\drawingwd by\xscale
+ \divide\drawinght by1000 \multiply\drawinght by\xscale
+ \divide\psxoffset by1000 \multiply\psxoffset by\xscale
+ \divide\psyoffset by1000 \multiply\psyoffset by\xscale
+ \global\divide\pscm by 1000
+ \global\multiply\pscm by\xscale
+ \multiply\pswdincr by\xscale \multiply\pshtincr by\xscale
+ \ifdim\d@mx=0pt\d@mx=\pswdincr\fi
+ \ifdim\d@my=0pt\d@my=\pshtincr\fi
+ \message{scaled \the\xscale}%
+ \hbox to\d@mx{\hss\vbox to\d@my{\vss
+ \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{%
+ \kern-\psyoffset
+ \PSspeci@l{\PSfilename}{\the\xscale}%
+ \vss}\hss\ps@nnotation}%
+ \global\wd\drawingBox=\the\pswdincr
+ \global\ht\drawingBox=\the\pshtincr
+ \global\drawingwd=\pswdincr
+ \global\drawinght=\pshtincr
+ \baselineskip=0pt
+ \copy\drawingBox
+ \vss}\hss}%
+ \global\psxoffset=0pt
+ \global\psyoffset=0pt
+ \global\pswdincr=0pt
+ \global\pshtincr=0pt % These are local to one figure
+ \global\pscm=1cm %should not be necessary
+}}%
+%
+% \psboxscaled{scalefactor*1000}{PSfilename} allows to bypass the
+% rounding errors of TeX integer divisions for situations where the
+% TeX box should fit the original BoundingBox with a precision
+% better
+% than 1/1000.
+%
+\def\psboxscaled#1#2{\vbox{%
+ \ReadPSize{#2}%
+ \xscale=#1
+ \message{scaled \the\xscale}%
+ \divide\pswdincr by 1000 \multiply\pswdincr by \xscale
+ \divide\pshtincr by 1000 \multiply\pshtincr by \xscale
+ \divide\psxoffset by1000 \multiply\psxoffset by\xscale
+ \divide\psyoffset by1000 \multiply\psyoffset by\xscale
+ \divide\drawingwd by1000 \multiply\drawingwd by\xscale
+ \divide\drawinght by1000 \multiply\drawinght by\xscale
+ \global\divide\pscm by 1000
+ \global\multiply\pscm by\xscale
+ \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{%
+ \kern-\psyoffset
+ \PSspeci@l{\PSfilename}{\the\xscale}%
+ \vss}\hss\ps@nnotation}%
+ \advance\pswdincr by \drawingwd
+ \advance\pshtincr by \drawinght
+ \global\wd\drawingBox=\the\pswdincr
+ \global\ht\drawingBox=\the\pshtincr
+ \global\drawingwd=\pswdincr
+ \global\drawinght=\pshtincr
+ \baselineskip=0pt
+ \copy\drawingBox
+ \global\psxoffset=0pt
+ \global\psyoffset=0pt
+ \global\pswdincr=0pt
+ \global\pshtincr=0pt % These are local to one figure
+ \global\pscm=1cm
+}}%
+%
+% \psbox{PSfilename} makes a TeX box having the minimal size to
+% enclose the picture
+\def\psbox#1{\psboxscaled{1000}{#1}}%
+%------------------------------------------------------
+% \joinfiles file1, file2, ...n \into joinedfilename .
+% makes one file out of many
+% \splitfile joinedfilename
+% the opposite
+\newif\ifn@teof\n@teoftrue
+\newif\ifc@ntrolline
+\newif\ifmatch
+\newread\j@insplitin
+\newwrite\j@insplitout
+\newwrite\psbj@inaux
+\immediate\openout\psbj@inaux=psbjoin.aux
+\immediate\write\psbj@inaux{\string\joinfiles}%
+\immediate\write\psbj@inaux{\jobname,}%
+%
+% INPUT REDEFINITION
+%
+% works if #1 is a single character
+\def\toother#1{\ifcat\relax#1\else\expandafter%
+ \toother@ux\meaning#1\endtoother@ux\fi}%
+\def\toother@ux#1 #2#3\endtoother@ux{\def\tmp{#3}%
+ \ifx\tmp\@mpty\def\tmp{#2}\let\next=\relax%
+ \else\def\next{\toother@ux#2#3\endtoother@ux}\fi%
+\next}%
+%
+% \readfilename defs:
+%
+\let\readfilenamehook=\relax
+\def\re@d{\expandafter\re@daux}% spares typing 10 \expandafter's...
+\def\re@daux{\futurelet\nextchar\stopre@dtest}%
+\def\re@dnext{\xdef\lastreadfilename{\lastreadfilename\nextchar}%
+ \afterassignment\re@d\let\nextchar}%
+\def\stopre@d{\egroup\readfilenamehook}%
+\def\stopre@dtest{%
+ \ifcat\nextchar\relax\let\nextread\stopre@d
+ \else
+ \ifcat\nextchar\space\def\nextread{%
+ \afterassignment\stopre@d\chardef\nextchar=`}%
+ \else\let\nextread=\re@dnext
+ \toother\nextchar
+ \edef\nextchar{\tmp}%
+ \fi
+ \fi\nextread}%
+\def\readfilename{\bgroup%
+ \let\\=\backslashother \let\%=\percentother \let\~=\tildeother
+ \let\#=\sharpother \xdef\lastreadfilename{}%
+ \re@d}%
+%
+% redefines \input using \readfilename
+%
+\xdef\GlobalInputList{\jobname}%
+\def\psnewinput{%
+ \def\readfilenamehook{% each entry in \GlobalInputList should be unique
+ \if\matchexpin{\GlobalInputList}{, \lastreadfilename}%
+ \else\xdef\GlobalInputList{\GlobalInputList, \lastreadfilename}%
+ \immediate\write\psbj@inaux{\lastreadfilename,}%
+ \fi%
+ \ps@ldinput\lastreadfilename\relax%
+ \let\readfilenamehook=\relax%
+ }\readfilename%
+}%
+\expandafter\ifx\csname @@input\endcsname\relax % then Plain
+ \immediate\let\ps@ldinput=\input\def\input{\psnewinput}%
+\else
+ \immediate\let\ps@ldinput=\@@input
+ \def\@@input{\psnewinput}%
+\fi%
+%
+\def\nowarnopenout{%
+ \def\warnopenout##1##2{%
+ \readfilename##2\relax
+ \message{\lastreadfilename}%
+ \immediate\openout##1=\lastreadfilename\relax}}%
+\def\warnopenout#1#2{%
+ \readfilename#2\relax
+ \def\t@mp{TrashMe,psbjoin.aux,psbjoint.tex,}\uncatcode\t@mp
+ \if\matchexpin{\t@mp}{\lastreadfilename,}%
+ \else
+ \immediate\openin\pst@mpin=\lastreadfilename\relax
+ \ifeof\pst@mpin
+ \else
+ \errhelp{If the content of this file is so precious to you, abort (ie
+press x or e) and rename it before retrying.}%
+ \errmessage{I'm just about to replace your file named \lastreadfilename}%
+ \fi
+ \immediate\closein\pst@mpin
+ \fi
+ \message{\lastreadfilename}%
+ \immediate\openout#1=\lastreadfilename\relax}%
+% % will have an unusual catcode below; use * instead
+%\vbox
+{\catcode`\%=12\catcode`\*=14
+\gdef\splitfile#1{*
+ \readfilename#1\relax
+ \immediate\openin\j@insplitin=\lastreadfilename\relax
+ \ifeof\j@insplitin
+ \message{! I couldn't find and split \lastreadfilename!}*
+ \else
+ \immediate\openout\j@insplitout=TrashMe
+ \message{< Splitting \lastreadfilename\space into}*
+ \loop
+ \ifeof\j@insplitin
+ \immediate\closein\j@insplitin\n@teoffalse
+ \else
+ \n@teoftrue
+ \executeinspecs{\global\read\j@insplitin to\spl@tinline\expandafter
+ \ch@ckbeginnewfile\spl@tinline%Beginning-Of-File-Named:%\endcheck}*
+ \ifc@ntrolline
+ \else
+ \toks0=\expandafter{\spl@tinline}*
+ \immediate\write\j@insplitout{\the\toks0}*
+ \fi
+ \fi
+ \ifn@teof\repeat
+ \immediate\closeout\j@insplitout
+ \fi\message{>}*
+}*
+\gdef\ch@ckbeginnewfile#1%Beginning-Of-File-Named:#2%#3\endcheck{*
+ \def\t@mp{#1}*
+ \ifx\@mpty\t@mp
+ \def\t@mp{#3}*
+ \ifx\@mpty\t@mp
+ \global\c@ntrollinefalse
+ \else
+ \immediate\closeout\j@insplitout
+ \warnopenout\j@insplitout{#2}*
+ \global\c@ntrollinetrue
+ \fi
+ \else
+ \global\c@ntrollinefalse
+ \fi}*
+\gdef\joinfiles#1\into#2{*
+ \message{< Joining following files into}*
+ \warnopenout\j@insplitout{#2}*
+ \message{:}*
+ {*
+ \edef\w@##1{\immediate\write\j@insplitout{##1}}*
+\w@{% This collection of files was produced with CERN psbox package}*
+\w@{% To decompose and tex it:}*
+\w@{%-save this with a filename CONTAINING ONLY LETTERS and a .TEX}*
+\w@{% extension (say, JOINTFIL.TEX), in some uncrowded directory;}*
+\w@{%-make sure you can \string\input\space psbox.tex (version>=1.3);}*
+\w@{% (else ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/, then get}*
+\w@{% and tex the file psboxall.tex; more info in psbREAD.ME)}*
+\w@{%-tex JOINTFIL.TEX using Plain, or LaTeX, or whatever is needed by}*
+\w@{% the first file in the joining (after splitting JOINTFIL.TEX into}*
+\w@{% it's constituents, TeX will try to process it as it stands).}*
+\w@{\string\input\space psbox.tex}*
+\w@{\string\splitfile{\string\jobname}}*
+\w@{\string\let\string\autojoin=\string\relax}*
+}*
+ \expandafter\tre@tfilelist#1, \endtre@t
+ \immediate\closeout\j@insplitout
+ \message{>}*
+}*
+\gdef\tre@tfilelist#1, #2\endtre@t{*
+ \readfilename#1\relax
+ \ifx\@mpty\lastreadfilename
+ \else
+ \immediate\openin\j@insplitin=\lastreadfilename\relax
+ \ifeof\j@insplitin
+ \errmessage{I couldn't find file \lastreadfilename}*
+ \else
+ \message{\lastreadfilename}*
+ \immediate\write\j@insplitout{%Beginning-Of-File-Named:\lastreadfilename}*
+ \executeinspecs{\global\read\j@insplitin to\oldj@ininline}*
+ \loop
+ \ifeof\j@insplitin\immediate\closein\j@insplitin\n@teoffalse
+ \else\n@teoftrue
+ \executeinspecs{\global\read\j@insplitin to\j@ininline}*
+ \toks0=\expandafter{\oldj@ininline}*
+ \let\oldj@ininline=\j@ininline
+ \immediate\write\j@insplitout{\the\toks0}*
+ \fi
+ \ifn@teof
+ \repeat
+ \immediate\closein\j@insplitin
+ \fi
+ \tre@tfilelist#2, \endtre@t
+ \fi}*
+}%
+% To be put at the end of a file, for making a tar-like file containing
+% everything it used.
+\def\autojoin{%
+ \immediate\write\psbj@inaux{\string\into{psbjoint.tex}}%
+ \immediate\closeout\psbj@inaux
+ \expandafter\joinfiles\GlobalInputList\into{psbjoint.tex}%
+}%
+%----------------------------------------------------------------
+% Annotations & Captions etc...
+%
+%
+% \centinsert{anybox} is just a centered \midinsert, but is included as
+% people barely use the original inserts from TeX.
+%
+\def\centinsert#1{\midinsert\line{\hss#1\hss}\endinsert}%
+\def\psannotate#1#2{\vbox{%
+ \def\ps@nnotation{#2\global\let\ps@nnotation=\relax}#1}}%
+\def\pscaption#1#2{\vbox{%
+ \setbox\drawingBox=#1
+ \copy\drawingBox
+ \vskip\baselineskip
+ \vbox{\hsize=\wd\drawingBox\setbox0=\hbox{#2}%
+ \ifdim\wd0>\hsize
+ \noindent\unhbox0\tolerance=5000
+ \else\centerline{\box0}%
+ \fi
+}}}%
+% for compatibility with older versions, but \psfig is a bad name!
+%\def\psfig#1#2#3{\pscaption{\psannotate{#1}{#2}}{#3}}
+%\def\psfigurebox#1#2#3{\pscaption{\psannotate{\psbox{#1}}{#2}}{#3}}
+%
+% \at(#1;#2)#3 puts #3 at #1-higher and #2-right of the current
+% position without moving it (to be used in annotations).
+\def\at(#1;#2)#3{\setbox0=\hbox{#3}\ht0=0pt\dp0=0pt
+ \rlap{\kern#1\vbox to0pt{\kern-#2\box0\vss}}}%
+%
+% \gridfill(ht;wd) makes a 1cm*1cm grid of ht by wd whose lower-left
+% corner is the current point
+\newdimen\gridht \newdimen\gridwd
+\def\gridfill(#1;#2){%
+ \setbox0=\hbox to 1\pscm
+ {\vrule height1\pscm width.4pt\leaders\hrule\hfill}%
+ \gridht=#1
+ \divide\gridht by \ht0
+ \multiply\gridht by \ht0
+ \gridwd=#2
+ \divide\gridwd by \wd0
+ \multiply\gridwd by \wd0
+ \advance \gridwd by \wd0
+ \vbox to \gridht{\leaders\hbox to\gridwd{\leaders\box0\hfill}\vfill}}%
+%
+% Useful to measure where to put annotations
+\def\fillinggrid{\at(0cm;0cm){\vbox{%
+ \gridfill(\drawinght;\drawingwd)}}}%
+%
+% \textleftof\anybox: Sample text\endtext
+% inserts "Sample text" on the left of \anybox ie \vbox, \psbox.
+% \textrightof is the symmetric (not documented, too uggly)
+% Welcome any suggestion about clean wraparound macros from
+% TeXhackers reading this
+%
+\def\textleftof#1:{%
+ \setbox1=#1
+ \setbox0=\vbox\bgroup
+ \advance\hsize by -\wd1 \advance\hsize by -2em}%
+\def\textrightof#1:{%
+ \setbox0=#1
+ \setbox1=\vbox\bgroup
+ \advance\hsize by -\wd0 \advance\hsize by -2em}%
+\def\endtext{%
+ \egroup
+ \hbox to \hsize{\valign{\vfil##\vfil\cr%
+\box0\cr%
+\noalign{\hss}\box1\cr}}}%
+%
+% \frameit{\thick}{\skip}{\anybox}
+% draws with thickness \thick a box around \anybox, leaving \skip of
+% blank around it. eg \frameit{0.5pt}{1pt}{\hbox{hello}}
+% \boxit{\anybox} is a shortcut.
+\def\frameit#1#2#3{\hbox{\vrule width#1\vbox{%
+ \hrule height#1\vskip#2\hbox{\hskip#2\vbox{#3}\hskip#2}%
+ \vskip#2\hrule height#1}\vrule width#1}}%
+\def\boxit#1{\frameit{0.4pt}{0pt}{#1}}%
+%
+%
+\catcode`\@=12 % cs containing @ are unreachable
+%
+% CUSTOMIZE YOUR DEFAULT DRIVER:
+% Uncomment the line corresponding to your TeX system:
+%\psfortextures% For TeXtures on the Macintosh
+%\psforoztex % For OzTeX shareware on the Macintosh
+%\psfordvitops % For the DVItoPS converter for TeX on IBM mainframes
+ \psfordvips % For DVIPS converter on VAX and UNIX
+%\psfordvitps % For dvitps from TeXPS package under UNIX
+%\psfordvialw % For dvialw, UNIX public domain
+%\psonlyboxes % Blank Boxes (when all else fails).
+%Beginning-Of-File-Named:TrashMe
+%\nowarnopenout
+\splitfile{\jobname}%
+\let\autojoin=\relax
+%Beginning-Of-File-Named:psbsamp.tex
+% psbsamp.tex V-1.3: a sample use of the psbox macros from Plain TeX.
+%2345678 1 345678 2 345678 3 345678 4 345678 5 345678 6 345678 7 3456789
+%
+\input psbox.tex % 'told you it was necessary!
+%
+%
+% These are just to get a mini verbatim:
+ \def\\{\hbox{$\backslash$}}%
+ \edef\{{\hbox{$\{$}}%
+ \edef\}{\hbox{$\}$}}%
+\def\section#1{\ifnum\pageno=1\else\vfil\break\fi
+ \centerline{\frameit{1pt}{2pt}{\frameit{0.5pt}{3pt}{\hbox{#1}}}}%
+ \nobreak\medskip}%
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}%
+%
+%
+\line{\hfil
+\frameit{1pt}{2pt}{\frameit{0.5pt}{3pt}{\hbox{PS}}}
+\frameit{1pt}{2pt}{\frameit{0.5pt}{3pt}{\hbox{BOX}}}
+\hfil \llap{V-\psboxversion, by Jean Orloff}}
+\line{\sevenrm e-mail: ORLOFF @ SURYA11.CERN.CH\hfil
+Updates available by anonymous ftp from:
+cs.nyu.edu:pub/tex/psbox/%;\hfil noa.huji.ac.il
+}
+\bigbreak
+\section{Crash Overview}
+{\def\nl{\hfil\break}\parindent=0pt\parskip=3ptplus3pt\def\im{\parindent=1cm}
+WHAT IS IT:\nl
+psbox is a set of machine-independent TeX macros to:
+{\im
+\item{1)\ }allow (Encapsulated) PostScript figure inclusion in all versions
+ of TeX (Plain, LaTeX) on all machines using a PostScript printer
+
+\item{2)\ }facilitate the communication (e-mail, ftp, ...) of all the files
+ (text, macros, figs) needed to reproduce a TeX document by grouping
+ them together into a single, TeXable file.
+
+\bigskip
+\noindent HOW TO GET IT TO WORK:
+\item{1)\ }get the file psboxall.tex by one of the following ways:\nl
+ -from outside CERN: ftp cs.nyu.edu(=128.122.140.24):pub/tex/psbox/\nl
+ -(if all else fails) send me a mail (orloff@surya11.cern.ch);
+\item{2)\ }tex psboxall.tex: this will produce a complete documentation
+dvi and a
+ set of files, including the raw macros named psbox.tex;
+\item{3)\ }adapt your psbox.tex to your system by uncommenting the appropriate
+ {\tt\%\\psfor...}-line at the end of the file;
+\item{4)\ }put it in your TeX Inputs directory
+}
+
+\bigskip
+MAJOR COMMANDS:
+
+\def\tag#1{\noindent\hbox{\tt #1\hss}\nl\hangindent1cm}
+\tag{\\psbox\{fname.eps\}}
+ makes a box having the right size to enclose the figure fname.eps;
+
+\tag{\\psboxto(xdim;ydim)\{fn.eps\}}
+ makes a box of the given size and rescales fn.eps so that it just fits;
+
+\tag{\\psboxto(\\hsize;0pt)\{fn.eps\}}
+ has the maximal width \& a height computed from a uniformal rescaling;
+
+\tag{\\centinsert\{\\pscaption\{\\psbox\{fn.eps\}\}\{Fig 1: the
+caption...\}\}}
+ recommended way to include a graphics between 2 paragraphs;
+
+\tag{\\begin\{figure\}[hbt]\\begin\{center\}\\mbox\{\\psbox\{fn.eps\}\}\\caption\{Fig
+1:\} \\end\{figure\}}
+ recommended way in LaTeX;
+
+\tag{\\autojoin}
+ makes a single file called psbjoint.tex containing the currently tex'd
+ file plus all the files (macros \& figs) included since the \\input of
+ psbox.tex. Texing psbjoint.tex will split it into all these files with
+ their original names (so think of PC's:12345678.123!!) and tex the
+ first one (generally the one that issued \\autojoin).
+
+}
+\vfill\break
+\section{Introduction}
+\TeX{} and PostScript have become de-facto standards for
+producing scientific papers and figures. The reason for this perhaps
+lies in the success of electronic mail within the scientific
+community as both standards produce text files that easily propagate by
+e-mail and yet produce machine-independent result when printed from any
+computer on any PostScript printer\footnote{*}{You might think of
+sending directly the PostScript description of the whole document, but
+this would mean sending 15 times more caracters and moreover
+forbidding your correspondant to make any correction to the
+manuscript.}. Recently, these standards have been further sanctified in
+the Physics community with the advent of electronic ``Bulletin Boards"
+which spread like crazy and whose very existence precisely relies on
+such standards.
+
+In this rapidly evolving and modernish landscape, the
+inclusion of figures into papers still remains a dark spot: it is
+relatively uneasy and, worse, essentially non-universal. The purpose of the
+{\tt psbox} macros is to try and correct for this.
+
+To start with, let us show how to use the macros for including
+Encapsulated PostScript graphics-File (EPSF) into any \TeX\ document
+(Plain \TeX, Plain-based macros like Harvmac, Phyzzx,... or \LaTeX).
+To get this to work, you first need to produce an EPSF. This
+is different from a usual PostScript file. (For instance, with CERN's
+package PAW/HIGZ, the output device specified in the metafile is -111
+for simple postscript and -113 for EPSF). You can always check whether
+you succeeded by looking at your EPSF: it should start with {\tt\%!}
+and somewhere contain a line like:
+$$
+\hbox{\tt\%\%BoundingBox: llx lly urx ury\hfil}
+$$
+where llx \& lly (urx \& ury) are the positive integer coordinates of
+the lower-left (upper-right) corners of the smallest rectangle enclosing
+your graphics. If all else fails, you still have the opportunity of
+adding such a line by hand: you might then want to know that
+coordinates are given in ``Big Points'' (1in=72bp)%
+\footnote{**}{%
+Not to be confused with ``Points'' (1in=72.27pt): inventing units
+related by such crazy factors as 72.27/72 definitely is a perverse and
+deeply immoral sport!}
+from the bottom left
+corner of the printed page. You can always visualize the corresponding
+{\tt\%\%BoundingBox} using {\tt\\boxit} (see below). Once you have a
+good EPSF, you should save it in the same directory as the \TeX{}
+file in which you want to insert your graphics.
+
+Now you're ready for inserting. Here is how to do:
+\item{1)} Check you have a copy of the file {\tt psbox.tex} somewhere on
+ your system. If you don't, get it by ``anonymous ftp'' from the site
+ {\tt cs.nyu.edu}. In the directory pub/tex/psbox, you will find a file
+ called {\tt psboxall.tex} which is an ``archive'' containing the macros,
+ this documentation, a sample PostScript figure, etc... Just ``{\tt get}''
+ it by ftp, tex it on your system, and you will see how an archive splits
+ into it's original files.
+\item{2)} make sure the uncommented line at the end of the {\tt psbox.tex}
+ file corresponds to your particular way of translating \TeX{}
+ output into PostScript:
+$$\vbox{\halign{\tt\\ps#\hfil&\qquad#\hfil\cr
+fortextures& for TeXtures on the Macintosh\cr
+foroztex& for OzTeX shareware soft on the Macintosh\cr
+fordvitops& for IBM mainframes dvi to postscript converter DVITOPS\cr
+fordvips& for Unix, PC and VAX dvi to postscript converter DVIPS\cr
+%fordvitps& for dvitps from the TeXPS package under UNIX.\cr
+fordvialw& for Unix free converter (part GNU software)\cr
+onlyboxes& for poor people without any of these\cr
+}}
+$$
+\item{3)} in the
+ beginning of your \TeX{} file, type {\tt\\input psbox.tex}
+ in order to load the relevant \TeX{} macros;
+
+
+If you get the wrong postscript
+converter, you will just get extremely white(!) figures but the
+formatting of your text will be exactly the same.
+Now you can get your graphics where you want in the text by
+just typing:
+$$
+\hbox{\tt\$\$\\psbox\{box.ps\}\$\$}
+$$
+And this is what you get:
+$$
+\psbox{box.ps}
+$$
+The {\tt\\psbox\{EPSFilename\}} macro makes a \TeX{} \\vbox
+having the right size to contain the graphics and issues a \\special
+command for the postscript printer to put the EPSF graphics at the
+right place.
+
+\section{Scalings}
+You can moreover use Postscript to resize your graphics. This can be
+done via the {\tt\\psboxto} macro: here you
+specify the dimensions and \TeX{} uniformly scales the graphics to fit
+entirely in the given box. For instance
+$$\eqalign{\hbox{\tt\$\$}
+&\hbox{\tt\\boxit\{\\psboxto(3cm;7cm)\{box.ps\}\}}\cr
+&\hbox{\tt\\boxit\{\\psboxto(7cm;3cm)\{box.ps\}\}\$\$}\cr}
+$$
+gives
+$$
+\boxit{\psboxto(3cm;7cm){box.ps}}
+\boxit{\psboxto(7cm;3cm){box.ps}}
+$$
+(we have here materialized the \TeX boxes by the
+{\tt\\boxit\{anybox\}} command which can be useful for
+boxing not only psboxes, but any kind of text boxes. To
+control the thickness of the line and to have some white space
+between your box and it's framing, you can use
+{\tt\\frameit\{LineThickness\} \{WhiteSpaceThickness\} \{\\anybox\}}).
+
+If you specify one zero dimension in {\tt\\psboxto}, you get a box
+proportional to the natural one for your drawing, but with the scale
+specified by the non-zero dimension: $$\eqalign{\hbox{\tt\$\$}
+&\hbox{\tt\\boxit\{\\psboxto(3cm;0cm)\{box.ps\}\}}\cr
+&\hbox{\tt\\boxit\{\\psboxto(0cm;3cm)\{box.ps\}\}\$\$}\cr} $$ yields
+$$ \boxit{\psboxto(3cm;0cm){box.ps}} \boxit{\psboxto(0cm;3cm){box.ps}}
+$$
+Altenatively, you can specify a scale factor%
+\footnote{*}{This way
+you can be sure to get exactly the same size for the \TeX{} and EPSF
+box: with {\tt\\psboxto}, you can have the \TeX box 1/1000 too large
+because of rounding errors unavoidable for compatibility reasons}
+($\times1000$ in the usual \TeX{} way):
+$$\hbox{\tt\\psboxscaled\{250\}\{box.ps\}:}\psboxscaled{250}{box.ps}
+$$
+On certain occasions, the way PostScript computes it's BoundingBox may
+may be too conservative: the box turns out to be too large because of
+some invisible control point lying outside the visual bounding box.
+For most purposes, this won't harm. Certain perfectionists will
+nevertheless appreciate the possibility of correcting the bounding
+box by specifying an offset ({\tt\\psxoffset, \\psyoffset})
+for the lower left corner and incrementing the width and height
+({\tt\\pswdincr, \\pshtincr}) of the graphics. For instance,
+$$\hbox{\tt\\psxoffset=1cm\\psyoffset=20pt\\pswdincr=1cm\\pshtincr=20pt}
+$$
+will {\bf raise} the figure by 12pt, shift it to the right by
+0.3cm and change it's size so that it still fits. These dimensions
+get reset after each use of {\tt\\psbox...} so
+you should type this just before the one you want to modify. These
+dimensions also get scaled together with the figure if you later
+decide to
+use {\tt\\psboxto or \\psboxscaled}:
+$$
+\psxoffset=1cm\psyoffset=20pt
+\pswdincr=1cm\pshtincr=20pt
+\boxit{\psboxscaled{1200}{box.ps}}\kern2cm
+\psxoffset=1cm\psyoffset=20pt
+\pswdincr=1cm\pshtincr=20pt
+\boxit{\psboxto(3cm;0cm){box.ps}}
+$$
+Since a {\tt\\psbox} is a true \TeX box, nothing prevents you to have
+\psboxto(0cm;1em){box.ps} it in the middle of a line..(?) More
+seriously, if you want your graphics to be as large as possible, you
+can type
+$$\hbox{\tt\$\$\\psboxto(\\hsize;0cm)\{box.ps\}\$\$}
+$$
+which gives
+$$\psboxto(\hsize;0cm){box.ps}
+$$
+
+\section{Annotations}
+For certain figures, you might want to add something on top of the
+graphics (eg. a greek letter to name an axis, or other math symbols
+you use in the text). This is what
+{\tt\\psannotate\{\\psbox...\}\{annotation\}} was made for. For
+instance if you type
+$$\hbox{\tt\$\$%
+\\psannotate\{\\psboxto(10cm;3cm)\{box.ps\}\}%
+\{\\fillinggrid\\at(3\\pscm;1\\pscm)\{A sample at.\}\}\$\$}
+$$
+you get
+$$\psannotate{\psboxto(10cm;3cm){box.ps}} {\fillinggrid
+\at(3\pscm;1\pscm){A sample at.}}
+$$
+This example displays the 2 possible annotations:
+\item{-}{\tt\\at((xdim;ydim)\{annotation text\}} will place {\tt
+annotation text} xdim to the right of, and ydim higher than the
+current point without actually moving it (this may prove useful in
+other circumstances). The dimensions may be expressed in any valid
+\TeX{} unit, but here we used {\tt\\pscm} meaning scaled centimeters
+in order for the annotation to keep the same relative position inside
+the figure, whatever rescaling you might do later on.
+
+\item{-}{\tt\\fillinggrid}: in order to help you in the tedious task
+of determining the position of your annotations, you can use
+{\tt\\fillinggrid} as one particular annotation. This will produce a
+1\\pscm by 1\\pscm grid that roughly fills your figure. You will of
+course have to delete these in your final document\footnote{*} {To
+suppress all these grids at once in your final document, you may type
+{\tt\\let\\fillinggrid=\\relax} just after the line where you
+{\tt\\input psbox.tex}.}.
+
+\section{Figure Environment For Plain\TeX}
+If you have many large figures, the probability that \TeX{}
+barks at you about ``overfull or underfull vbox...'' becomes
+significant, because you give it a hard time trying to cut pages
+into a document that has many large unbreakable units. To
+overcome this problem, La\TeX{} users simply have to type:\hfil\break
+{\tt\\begin\{figure\}[hbt]\hfil\break
+\\begin\{center\}\\mbox\{\\psbox...\}\\end\{center\}\hfil\break
+\\caption\{Some caption\}\hfil\break \\end\{figure\}\hfil\break}
+In Plain\TeX{} you should use
+{\tt\\centinsert\{\\psbox...\}} instead of {\tt\$\$\\psbox...\$\$}.
+This will get your graphics precisely where you typed it except if
+there is not enough room in the current page, in which case you'll get
+it on top of the next one.
+
+However, you will then probably want to have a caption, in case your
+graphics and explanatory text get separated. You should then
+use {\tt\\pscaption\{\\psbox...\}\{caption\}}, for instance
+$$\vbox{\hsize=10cm\tt\hbox{
+\\centinsert\{%
+ \\pscaption\{%
+ \\psannotate\{%
+ \\psboxto(6cm;0cm)\{box.ps\}\}\{%
+}
+\hbox{\qquad\\fillinggrid\\at(3\\pscm;1\\pscm)\{A sample at.\}\}\}\{%
+ Figure 1: this is ...
+\}\}
+}}
+$$
+in order to get:
+\centinsert{
+ \pscaption{
+ \psannotate{
+ \psboxto(6cm;0cm){box.ps}}{
+ \fillinggrid\at(3\pscm;1\pscm){A sample at.}}}{%
+ Figure 1: this is probably the most stupid caption I can think of
+ but it can still be useful for illustrative purposes.
+}}%
+If your caption is short, it will automatically get centered:
+$$\pscaption{\psboxto(3cm;0cm){box.ps}}{\bf Figure 327.}
+$$
+When typing in the commands for catpion, annotations, etc, you may end
+up with long lines which you don't know how to break (a line break is
+essentially a space in \TeX, remember?). If you don't want these
+spurious spaces to sneek in your text, you should simply add \%{} just
+before the line break.
+
+\section{Multiple Files Management}
+Suppose you now have a few figures together with a paper, plus your favorite
+macros and reference files. You want to communicate the fruits of your hard
+work to the entire world, but you don't want to send ten separate files to
+each collaborator/potentially interested scientist. So you create a "master"
+file containing (you hope) all the files needed to re\TeX{} your paper. The
+receiver will also have to do some electronic cutting and pasting. Very
+quickly, it starts being a nuisance for everybody to assemble and disassemble
+a large file into it's constituents. This is why I thought the following
+macros might prove handy:
+
+\item{a.}{\tt\\joinfiles filename1, filename2, ..., filenamen \\into%
+\{JOINTFIL.TEX\}}\hfil\break
+joins several files into a big one that can be split later on. Since
+the goal here is universality, you should remember that PC's still form
+the majority of personal computers, and they like filenames of the form
+12345678.123 where you can only replace digits by a letter (no
+*,\&,\$,', etc...), without distinction between upper-case and
+lower-case. So, if you want portability, save your texts as
+{\tt12345678.tex} and your figures as {\tt12345678.eps} (ie. no
+empty extensions): this will save you from later troubles!
+The file {\tt JOINTFIL.TEX} has a header explaining how to split
+it (see below) and is in fact auto-splittable. Namely, you just have to
+run \TeX, or \LaTeX{} depending of what is required by the first file in
+the list. This should first split the file and then tex it while
+including properly the figures. You can edit the ``archive'' {\tt
+JOINTFIL.TEX}, for instance to change the header, or to modify the names
+under which files will be stored when split. For this you may need to
+know that each file in the archive has a header line containing it's
+name, eg:\hfil\break
+{\tt\%Beginning-Of-File-Named:box.ps}.
+
+\item{b.} {\tt\\autojoin}:\hfil\break
+since it is painful to remember the list of all figure's names, you can
+generate a joint file called {\tt psbjoint.tex} by simply typing
+{\tt\\autojoin} close to the end (ie. after all {\tt\\psbox...} and
+{\tt\\input ...} have been issued) of the file you want to tex. This
+will first close and then read in a file called {\tt psbjoin.aux} that is
+always generated automatically and that basically contains the list of
+all your inclusions (both figures and macro files {\tt\\input}ted). If
+you never say {\tt\\autojoin}, the file {\tt psbjoin.aux} will
+nevertheless be created and will by the end of the day contain the list
+of files needed for your texing session. This list will appear as an
+incomplete {\tt\\joinfiles}-command, which you can complete and tex to
+do the joining. Notice: all these macro and figure files do not need to
+be in the same directory to be found. If \TeX{} is able to find them
+for {\tt\\input} or {\tt\\psbox} (because they are in some directory
+named {\tt TeX Inputs} or pointed at by an environment variable {\tt
+TEXINPUTS}), it will be able to join them too. Unix users should resist
+the temptation of specifying explicit path in filenames (eg: {\tt
+../../TeX/mymacros.tex}): this makes their \TeX{} files non-portable.
+They should rather add an entry in their {\tt TEXINPUTS} list of paths.
+
+\item{c.}{\tt\\splitfile\{JOINTFIL.TEX\}}\hfil\break
+splits {\tt JOINTFIL.TEX} into it's constituents. Anything before the
+first {\tt\%Beginning-Of-File-Named:} line is trashed into a special
+file called {\tt TrashMe}: never store precious info in such a file
+anyhow! You may fear what happens if one of the constituent-file
+names coincides with a previoulsy existing file on your disk. Does it
+silently replace it? Well, no, relax, all output produced by these
+macros use {\tt\\warnopenout} instead of the standard {\tt\\openout},
+which will give you a chance to break precisely in this case. Notice
+{\tt\\warnopenout} is sometimes too cautious: it can warn you before
+erasing a file that doesn't exist! This is because a file with the same
+name exists in some directory \TeX{} is searching in for input files,
+but relax, it will only write files in the same directory as {\tt
+JOINTFIL.TEX}. Finally,
+notice you can say {\tt\\splitfile \{\\jobname\}} in which case you will
+split the very file that issued such a command (this is in fact what
+makes the output of {\tt\\joinfiles} auto-splittable). However,
+watchout: {\tt\\jobname} has peculiar and machine-dependent
+definition. It gives the name of the file currently texed MINUS it's
+{\tt.tex} extension if it has one (and on most machines, minus any
+extension your filename could have). So, \TeX{} will not
+be able to read in from the file named {\tt\\jobname} (without
+extension). But it always tries to read in {\tt\\jobname.tex} (in fact,
+on IBM \& VAX machines, it doesn't even try to read {\tt\\jobname}
+without extension). This mess explains the
+precaution taken in the header of a joint file, reproduced below:
+{\obeylines\tt\def
+{\hfil\break}
+\% This collection of files was produced with CERN psbox package
+\% To decompose and tex it:
+\%-save this with a filename CONTAINING ONLY LETTERS and a .TEX
+\% extension (say, JOINTFIL.TEX), in some uncrowded directory;
+\%-make sure you can \string\input\space psbox.tex (version>=1.3);
+\% (else ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/, then get
+\% and tex the file psboxall.tex; more info in psbREAD.ME)
+\%-tex JOINTFIL.TEX using Plain, or LaTeX, or whatever is needed by
+\% the first file in the joining (after splitting JOINTFIL.TEX into
+\% it's constituents, TeX will try to process it as it stands).
+\\input psbox.tex
+\\splitfile\{\\jobname\}
+\\let\\autojoin\\=\\relax
+}
+\joinfiles psbREAD.ME, psboxOK.tex\into{TrashMe}
+\section{Errors}
+\message{RELAX!!!
+The following error messages should not frighten you, they are
+intentional tests. Just continue and see what comes out!}
+If \TeX{} cannot find the file you specified, you will get the following
+output:
+$$\psbox{in_exist.ps}$$
+On the other hand, an existing file which is not EPSF will produce:
+$$\psbox{psbsamp.tex}$$
+\autojoin
+\bye
+%Beginning-Of-File-Named:box.ps
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator:Adobe Illustrator(TM) 3.0
+%%For: (pascal) (ducul)
+%%Title: (box.ps)
+%%CreationDate: (8/5/92) (18:13)
+%%DocumentProcessColors: Black
+%%DocumentFonts: Helvetica-Oblique
+%%+ Times-Roman
+%%DocumentProcSets: Adobe_Illustrator_1.1 0 0
+%%DocumentSuppliedProcSets: Adobe_Illustrator_1.1 0 0
+%%BoundingBox:84 365 299 484
+%%ColorUsage: Black&White
+%%TemplateBox:288 360 288 360
+%%TileBox: 0 0 538 781
+%%DocumentPreview: Macintosh_Pic
+%%EndComments
+%%BeginProcSet:Adobe_Illustrator_1.1 0 0
+% Copyright (C) 1987-1990 Adobe Systems Incorporated.
+% All Rights Reserved.
+% Adobe Illustrator is a trademark of Adobe Systems Incorporated.
+/Adobe_Illustrator_1.1 dup 100 dict def load begin
+/Version 0 def
+/Revision 0 def
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bdef
+/xdef {exch def} bdef
+% graphic state operators
+/_K {3 index add neg dup 0 lt {pop 0} if 3 1 roll} bdef
+/_k /setcmybcolor where
+{/setcmybcolor get} {{1 sub 4 1 roll _K _K _K setrgbcolor pop} bind} ifelse def
+/g {/_b xdef /p {_b setgray} def} bdef
+/G {/_B xdef /P {_B setgray} def} bdef
+/k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef
+/K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef
+/d /setdash ldef
+/_i currentflat def
+/i {dup 0 eq {pop _i} if setflat} bdef
+/j /setlinejoin ldef
+/J /setlinecap ldef
+/M /setmiterlimit ldef
+/w /setlinewidth ldef
+% path construction operators
+/_R {.25 sub round .25 add} bdef
+/_r {transform _R exch _R exch itransform} bdef
+/c {_r curveto} bdef
+/C /c ldef
+/v {currentpoint 6 2 roll _r curveto} bdef
+/V /v ldef
+/y {_r 2 copy curveto} bdef
+/Y /y ldef
+/l {_r lineto} bdef
+/L /l ldef
+/m {_r moveto} bdef
+% error operators
+/_e [] def
+/_E {_e length 0 ne {gsave 0 g 0 G 0 i 0 J 0 j 1 w 10 M [] 0 d
+/Courier 20 0 0 1 z [0.966 0.259 -0.259 0.966
+_e 0 get _e 2 get add 2 div _e 1 get _e 3 get add 2 div] e _f t T grestore} if} bdef
+/_fill {{fill} stopped
+{/_e [pathbbox] def /_f (ERROR: can't fill, increase flatness) def n _E} if} bdef
+/_stroke {{stroke} stopped
+{/_e [pathbbox] def /_f (ERROR: can't stroke, increase flatness) def n _E} if} bdef
+% path painting operators
+/n /newpath ldef
+/N /n ldef
+/F {p _fill} bdef
+/f {closepath F} bdef
+/S {P _stroke} bdef
+/s {closepath S} bdef
+/B {gsave F grestore S} bdef
+/b {closepath B} bdef
+% text block construction and painting operators
+/_s /ashow ldef
+/_S {(?) exch {2 copy 0 exch put pop dup false charpath currentpoint _g setmatrix
+_stroke _G setmatrix moveto 3 copy pop rmoveto} forall pop pop pop n} bdef
+/_A {_a moveto _t exch 0 exch} bdef
+/_L {0 _l neg translate _G currentmatrix pop} bdef
+/_w {dup stringwidth exch 3 -1 roll length 1 sub _t mul add exch} bdef
+/_z [{0 0} bind {dup _w exch neg 2 div exch neg 2 div} bind {dup _w exch neg exch neg} bind] def
+/z {_z exch get /_a xdef /_t xdef /_l xdef exch findfont exch scalefont setfont} bdef
+/_g matrix def
+/_G matrix def
+/_D {_g currentmatrix pop gsave concat _G currentmatrix pop} bdef
+/e {_D p /t {_A _s _L} def} bdef
+/r {_D P /t {_A _S _L} def} bdef
+/a {_D /t {dup p _A _s P _A _S _L} def} bdef
+/o {_D /t {pop _L} def} bdef
+/T {grestore} bdef
+% group construction operators
+/u {} bdef
+/U {} bdef
+% font construction operators
+/Z {findfont begin currentdict dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall /FontName exch def dup length 0 ne
+{/Encoding Encoding 256 array copy def 0 exch {dup type /nametype eq
+{Encoding 2 index 2 index put pop 1 add} {exch pop} ifelse} forall} if pop
+currentdict dup end end /FontName get exch definefont pop} bdef
+end
+%%EndProcSet
+%%EndProlog
+%%BeginSetup
+Adobe_Illustrator_1.1 begin
+n
+%%BeginEncoding: _Helvetica-Oblique Helvetica-Oblique
+[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+]/_Helvetica-Oblique/Helvetica-Oblique Z
+%%EndEncoding
+%%BeginEncoding: _Times-Roman Times-Roman
+[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+]/_Times-Roman/Times-Roman Z
+%%EndEncoding
+%%EndSetup
+u
+0.5 g
+0 G
+0 i 0 J 1 j 1 w 4 M [3 2 ]0 d
+%%Note:
+297 366 m
+297 483 L
+86 483 L
+86 366 L
+297 366 L
+b
+191.5 424.5 m
+B
+U
+u
+1 g
+0 j 0.3 w []0 d
+191.5 365.9999 m
+249.7652 365.9999 297.0001 392.1918 297.0001 424.5 c
+297.0001 456.8082 249.7652 483.0001 191.5 483.0001 c
+133.2347 483.0001 85.9999 456.8082 85.9999 424.5 c
+85.9999 392.1918 133.2347 365.9999 191.5 365.9999 c
+b
+191.5 424.5 m
+B
+U
+u
+u
+u
+0 g
+1 w
+/_Helvetica-Oblique 10 12 0 2 z
+[1 0 0 1 212 445]e
+(Postscript box:)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 2 z
+[1 0 0 1 212 433]e
+()t
+(Sometimes surrounded)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 0 z
+[1 0 0 1 138.0166 409]e
+( by a T)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 0 z
+[1 0 0 1 171.6728 406]e
+(E)t
+T
+U
+U
+u
+u
+/_Times-Roman 12 12 0 0 z
+[1 0 0 1 179.0029 409]e
+(X box:)t
+T
+U
+U
+U
+0 G
+1 j [3 2 ]0 d
+226 448 m
+276 448 l
+S
+[]0 d
+225.5 410.5 m
+275.5 410.5 l
+S
+%%PageTrailer
+%%Trailer
+_E end
+%%EOF
+%Beginning-Of-File-Named:psbREAD.ME
+% PSBOX READ-ME
+% -------------
+% WHAT IS IT:
+% psbox is a set of machine-independent TeX macros to
+% 1) allow (Encapsulated) PostScript figure inclusion in all versions
+% of TeX (Plain, LaTeX) on all machines using a PostScript printer
+% 2) facilitate the communication (e-mail, ftp, ...) of all the files
+% (text, macros, figs) needed to reproduce a TeX document by grouping
+% them together into a single, TeXable file.
+%
+% HOW TO GET IT TO WORK:
+% 1) get the file psboxall.tex by one of the following ways:
+% -from outside CERN: ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/
+% -(if all else fails) send me a mail (orloff@surya11.cern.ch);
+% 2) tex psboxall.tex: this will produce a complete documentation dvi and a
+% set of files, including the raw macros named psbox.tex;
+% 3) adapt your psbox.tex to your system by uncommenting the appropriate
+% %\psfor...-line at the end of the file;
+% 4) put it in your TeX Inputs directory
+%
+% MAJOR COMMANDS:
+% \psbox{fname.eps}
+% makes a box having the right size to enclose the figure fname.eps;
+% \psboxto(xdim;ydim){fn.eps}
+% makes a box of the given size and rescales fn.eps so that it just fits;
+% \psboxto(\hsize;0pt){fn.eps}
+% has the maximal width & a height computed from a uniformal rescaling;
+% \centinsert{\pscaption{\psbox{fn.eps}}{Fig 1: the caption...}}
+% recommended way to include a graphics between 2 paragraphs;
+% \begin{figure}[hbt]\begin{center}\mbox{\psbox{fn.eps}}\caption{Fig 1:}
+% \end{figure}
+% recommended way in LaTeX;
+% \autojoin
+% makes a single file called psbjoint.tex containing the currently tex'd
+% file plus all the files (macros & figs) included since the \input of
+% psbox.tex. Texing psbjoint.tex will split it into all these files with
+% their original names (so think of PC's:12345678.123!!) and tex the
+% first one (generally the one that issued \autojoin).
+%Beginning-Of-File-Named:psbug.tex
+ PSBOX bug-report form
+ ---------------------
+From:
+To: orloff@surya11.cern.ch (Jean Orloff)
+Subject: psbox BUG
+
+YOU Name:
+ Email:
+PSBOX version no:
+ source:
+MACHINE type: (NeXT, Mac LC,...)
+ Operating system:
+TEX name:
+ version:
+TEX->PS name: (dvips, TeXtures,...)
+ version:
+DRAWING program: (Adobe Illustrator, xfig,...)
+ version:
+PRINTER type:
+ PostScript version:
+PREVIEW for postscript (if any): (ghostscript,...)
+
+Command(s) incriminated: (\psbox,\splitfile,...)
+Problem description:
+
+
+
+
+Log (TeX, TeX->PS, Printer) file(s) where you got insulted:
+
+%Beginning-Of-File-Named:psboxOK.tex
+ PSBOX ANTI-bug report form
+ --------------------------
+From:
+To: orloff@surya11.cern.ch (Jean Orloff)
+Subject: psbox ANIT-BUG
+
+PSBOX has been checked to work in the following environment:
+
+MACHINE TEX TEX->PS PRINTER/PREVIEWER
+------- --- ------- -----------------
+Macintosh*.* TeXtures*.* Apple LaserWriter (ALW)
+" OzTeX 1.3 ALW
+UniX workst: TeX 3.14t3 dvips 5.47 ALW
+ SUN4 " " ALW
+ NeXT " " Preview
+ " dvialw ALW
+IBM370(VM/CMS) TeX3.14/CMS1.3 DVItoPS ALW
+" " dvips 5.483 ALW
+DOS PC emTeX dvips GhostScript
+
+If your system is not listed here but nevertheless works fine, please
+add in a line, fill in the detailed form below and send it to me.
+
+YOU Name:
+ Email:
+PSBOX version no:
+ source:
+MACHINE type: (NeXT, Mac LC,...)
+ Operating system:
+TEX name:
+ version:
+TEX->PS name: (dvips, TeXtures,...)
+ version:
+DRAWING program: (Adobe Illustrator, xfig,...)
+ version:
+PRINTER type:
+ version of PostScript used:
+PREVIEW for postscript (if any): (ghostscript,...)
diff --git a/macros/generic/psbox/psbsamp.tex b/macros/generic/psbox/psbsamp.tex
new file mode 100644
index 0000000000..112a3ef6de
--- /dev/null
+++ b/macros/generic/psbox/psbsamp.tex
@@ -0,0 +1,428 @@
+% psbsamp.tex V-1.3: a sample use of the psbox macros from Plain TeX.
+%2345678 1 345678 2 345678 3 345678 4 345678 5 345678 6 345678 7 3456789
+%
+\input psbox.tex % 'told you it was necessary!
+%
+%
+% These are just to get a mini verbatim:
+ \def\\{\hbox{$\backslash$}}%
+ \edef\{{\hbox{$\{$}}%
+ \edef\}{\hbox{$\}$}}%
+\def\section#1{\ifnum\pageno=1\else\vfil\break\fi
+ \centerline{\frameit{1pt}{2pt}{\frameit{0.5pt}{3pt}{\hbox{#1}}}}%
+ \nobreak\medskip}%
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}%
+%
+%
+\line{\hfil
+\frameit{1pt}{2pt}{\frameit{0.5pt}{3pt}{\hbox{PS}}}
+\frameit{1pt}{2pt}{\frameit{0.5pt}{3pt}{\hbox{BOX}}}
+\hfil \llap{V-\psboxversion, by Jean Orloff}}
+\line{\sevenrm e-mail: ORLOFF @ SURYA11.CERN.CH\hfil
+Updates available by anonymous ftp from:
+cs.nyu.edu:pub/tex/psbox/%;\hfil noa.huji.ac.il
+}
+\bigbreak
+\section{Crash Overview}
+{\def\nl{\hfil\break}\parindent=0pt\parskip=3ptplus3pt\def\im{\parindent=1cm}
+WHAT IS IT:\nl
+psbox is a set of machine-independent TeX macros to:
+{\im
+\item{1)\ }allow (Encapsulated) PostScript figure inclusion in all versions
+ of TeX (Plain, LaTeX) on all machines using a PostScript printer
+
+\item{2)\ }facilitate the communication (e-mail, ftp, ...) of all the files
+ (text, macros, figs) needed to reproduce a TeX document by grouping
+ them together into a single, TeXable file.
+
+\bigskip
+\noindent HOW TO GET IT TO WORK:
+\item{1)\ }get the file psboxall.tex by one of the following ways:\nl
+ -from outside CERN: ftp cs.nyu.edu(=128.122.140.24):pub/tex/psbox/\nl
+ -(if all else fails) send me a mail (orloff@surya11.cern.ch);
+\item{2)\ }tex psboxall.tex: this will produce a complete documentation
+dvi and a
+ set of files, including the raw macros named psbox.tex;
+\item{3)\ }adapt your psbox.tex to your system by uncommenting the appropriate
+ {\tt\%\\psfor...}-line at the end of the file;
+\item{4)\ }put it in your TeX Inputs directory
+}
+
+\bigskip
+MAJOR COMMANDS:
+
+\def\tag#1{\noindent\hbox{\tt #1\hss}\nl\hangindent1cm}
+\tag{\\psbox\{fname.eps\}}
+ makes a box having the right size to enclose the figure fname.eps;
+
+\tag{\\psboxto(xdim;ydim)\{fn.eps\}}
+ makes a box of the given size and rescales fn.eps so that it just fits;
+
+\tag{\\psboxto(\\hsize;0pt)\{fn.eps\}}
+ has the maximal width \& a height computed from a uniformal rescaling;
+
+\tag{\\centinsert\{\\pscaption\{\\psbox\{fn.eps\}\}\{Fig 1: the
+caption...\}\}}
+ recommended way to include a graphics between 2 paragraphs;
+
+\tag{\\begin\{figure\}[hbt]\\begin\{center\}\\mbox\{\\psbox\{fn.eps\}\}\\caption\{Fig
+1:\} \\end\{figure\}}
+ recommended way in LaTeX;
+
+\tag{\\autojoin}
+ makes a single file called psbjoint.tex containing the currently tex'd
+ file plus all the files (macros \& figs) included since the \\input of
+ psbox.tex. Texing psbjoint.tex will split it into all these files with
+ their original names (so think of PC's:12345678.123!!) and tex the
+ first one (generally the one that issued \\autojoin).
+
+}
+\vfill\break
+\section{Introduction}
+\TeX{} and PostScript have become de-facto standards for
+producing scientific papers and figures. The reason for this perhaps
+lies in the success of electronic mail within the scientific
+community as both standards produce text files that easily propagate by
+e-mail and yet produce machine-independent result when printed from any
+computer on any PostScript printer\footnote{*}{You might think of
+sending directly the PostScript description of the whole document, but
+this would mean sending 15 times more caracters and moreover
+forbidding your correspondant to make any correction to the
+manuscript.}. Recently, these standards have been further sanctified in
+the Physics community with the advent of electronic ``Bulletin Boards"
+which spread like crazy and whose very existence precisely relies on
+such standards.
+
+In this rapidly evolving and modernish landscape, the
+inclusion of figures into papers still remains a dark spot: it is
+relatively uneasy and, worse, essentially non-universal. The purpose of the
+{\tt psbox} macros is to try and correct for this.
+
+To start with, let us show how to use the macros for including
+Encapsulated PostScript graphics-File (EPSF) into any \TeX\ document
+(Plain \TeX, Plain-based macros like Harvmac, Phyzzx,... or \LaTeX).
+To get this to work, you first need to produce an EPSF. This
+is different from a usual PostScript file. (For instance, with CERN's
+package PAW/HIGZ, the output device specified in the metafile is -111
+for simple postscript and -113 for EPSF). You can always check whether
+you succeeded by looking at your EPSF: it should start with {\tt\%!}
+and somewhere contain a line like:
+$$
+\hbox{\tt\%\%BoundingBox: llx lly urx ury\hfil}
+$$
+where llx \& lly (urx \& ury) are the positive integer coordinates of
+the lower-left (upper-right) corners of the smallest rectangle enclosing
+your graphics. If all else fails, you still have the opportunity of
+adding such a line by hand: you might then want to know that
+coordinates are given in ``Big Points'' (1in=72bp)%
+\footnote{**}{%
+Not to be confused with ``Points'' (1in=72.27pt): inventing units
+related by such crazy factors as 72.27/72 definitely is a perverse and
+deeply immoral sport!}
+from the bottom left
+corner of the printed page. You can always visualize the corresponding
+{\tt\%\%BoundingBox} using {\tt\\boxit} (see below). Once you have a
+good EPSF, you should save it in the same directory as the \TeX{}
+file in which you want to insert your graphics.
+
+Now you're ready for inserting. Here is how to do:
+\item{1)} Check you have a copy of the file {\tt psbox.tex} somewhere on
+ your system. If you don't, get it by ``anonymous ftp'' from the site
+ {\tt cs.nyu.edu}. In the directory pub/tex/psbox, you will find a file
+ called {\tt psboxall.tex} which is an ``archive'' containing the macros,
+ this documentation, a sample PostScript figure, etc... Just ``{\tt get}''
+ it by ftp, tex it on your system, and you will see how an archive splits
+ into it's original files.
+\item{2)} make sure the uncommented line at the end of the {\tt psbox.tex}
+ file corresponds to your particular way of translating \TeX{}
+ output into PostScript:
+$$\vbox{\halign{\tt\\ps#\hfil&\qquad#\hfil\cr
+fortextures& for TeXtures on the Macintosh\cr
+foroztex& for OzTeX shareware soft on the Macintosh\cr
+fordvitops& for IBM mainframes dvi to postscript converter DVITOPS\cr
+fordvips& for Unix, PC and VAX dvi to postscript converter DVIPS\cr
+%fordvitps& for dvitps from the TeXPS package under UNIX.\cr
+fordvialw& for Unix free converter (part GNU software)\cr
+onlyboxes& for poor people without any of these\cr
+}}
+$$
+\item{3)} in the
+ beginning of your \TeX{} file, type {\tt\\input psbox.tex}
+ in order to load the relevant \TeX{} macros;
+
+
+If you get the wrong postscript
+converter, you will just get extremely white(!) figures but the
+formatting of your text will be exactly the same.
+Now you can get your graphics where you want in the text by
+just typing:
+$$
+\hbox{\tt\$\$\\psbox\{box.ps\}\$\$}
+$$
+And this is what you get:
+$$
+\psbox{box.ps}
+$$
+The {\tt\\psbox\{EPSFilename\}} macro makes a \TeX{} \\vbox
+having the right size to contain the graphics and issues a \\special
+command for the postscript printer to put the EPSF graphics at the
+right place.
+
+\section{Scalings}
+You can moreover use Postscript to resize your graphics. This can be
+done via the {\tt\\psboxto} macro: here you
+specify the dimensions and \TeX{} uniformly scales the graphics to fit
+entirely in the given box. For instance
+$$\eqalign{\hbox{\tt\$\$}
+&\hbox{\tt\\boxit\{\\psboxto(3cm;7cm)\{box.ps\}\}}\cr
+&\hbox{\tt\\boxit\{\\psboxto(7cm;3cm)\{box.ps\}\}\$\$}\cr}
+$$
+gives
+$$
+\boxit{\psboxto(3cm;7cm){box.ps}}
+\boxit{\psboxto(7cm;3cm){box.ps}}
+$$
+(we have here materialized the \TeX boxes by the
+{\tt\\boxit\{anybox\}} command which can be useful for
+boxing not only psboxes, but any kind of text boxes. To
+control the thickness of the line and to have some white space
+between your box and it's framing, you can use
+{\tt\\frameit\{LineThickness\} \{WhiteSpaceThickness\} \{\\anybox\}}).
+
+If you specify one zero dimension in {\tt\\psboxto}, you get a box
+proportional to the natural one for your drawing, but with the scale
+specified by the non-zero dimension: $$\eqalign{\hbox{\tt\$\$}
+&\hbox{\tt\\boxit\{\\psboxto(3cm;0cm)\{box.ps\}\}}\cr
+&\hbox{\tt\\boxit\{\\psboxto(0cm;3cm)\{box.ps\}\}\$\$}\cr} $$ yields
+$$ \boxit{\psboxto(3cm;0cm){box.ps}} \boxit{\psboxto(0cm;3cm){box.ps}}
+$$
+Altenatively, you can specify a scale factor%
+\footnote{*}{This way
+you can be sure to get exactly the same size for the \TeX{} and EPSF
+box: with {\tt\\psboxto}, you can have the \TeX box 1/1000 too large
+because of rounding errors unavoidable for compatibility reasons}
+($\times1000$ in the usual \TeX{} way):
+$$\hbox{\tt\\psboxscaled\{250\}\{box.ps\}:}\psboxscaled{250}{box.ps}
+$$
+On certain occasions, the way PostScript computes it's BoundingBox may
+may be too conservative: the box turns out to be too large because of
+some invisible control point lying outside the visual bounding box.
+For most purposes, this won't harm. Certain perfectionists will
+nevertheless appreciate the possibility of correcting the bounding
+box by specifying an offset ({\tt\\psxoffset, \\psyoffset})
+for the lower left corner and incrementing the width and height
+({\tt\\pswdincr, \\pshtincr}) of the graphics. For instance,
+$$\hbox{\tt\\psxoffset=1cm\\psyoffset=20pt\\pswdincr=1cm\\pshtincr=20pt}
+$$
+will {\bf raise} the figure by 12pt, shift it to the right by
+0.3cm and change it's size so that it still fits. These dimensions
+get reset after each use of {\tt\\psbox...} so
+you should type this just before the one you want to modify. These
+dimensions also get scaled together with the figure if you later
+decide to
+use {\tt\\psboxto or \\psboxscaled}:
+$$
+\psxoffset=1cm\psyoffset=20pt
+\pswdincr=1cm\pshtincr=20pt
+\boxit{\psboxscaled{1200}{box.ps}}\kern2cm
+\psxoffset=1cm\psyoffset=20pt
+\pswdincr=1cm\pshtincr=20pt
+\boxit{\psboxto(3cm;0cm){box.ps}}
+$$
+Since a {\tt\\psbox} is a true \TeX box, nothing prevents you to have
+\psboxto(0cm;1em){box.ps} it in the middle of a line..(?) More
+seriously, if you want your graphics to be as large as possible, you
+can type
+$$\hbox{\tt\$\$\\psboxto(\\hsize;0cm)\{box.ps\}\$\$}
+$$
+which gives
+$$\psboxto(\hsize;0cm){box.ps}
+$$
+
+\section{Annotations}
+For certain figures, you might want to add something on top of the
+graphics (eg. a greek letter to name an axis, or other math symbols
+you use in the text). This is what
+{\tt\\psannotate\{\\psbox...\}\{annotation\}} was made for. For
+instance if you type
+$$\hbox{\tt\$\$%
+\\psannotate\{\\psboxto(10cm;3cm)\{box.ps\}\}%
+\{\\fillinggrid\\at(3\\pscm;1\\pscm)\{A sample at.\}\}\$\$}
+$$
+you get
+$$\psannotate{\psboxto(10cm;3cm){box.ps}} {\fillinggrid
+\at(3\pscm;1\pscm){A sample at.}}
+$$
+This example displays the 2 possible annotations:
+\item{-}{\tt\\at((xdim;ydim)\{annotation text\}} will place {\tt
+annotation text} xdim to the right of, and ydim higher than the
+current point without actually moving it (this may prove useful in
+other circumstances). The dimensions may be expressed in any valid
+\TeX{} unit, but here we used {\tt\\pscm} meaning scaled centimeters
+in order for the annotation to keep the same relative position inside
+the figure, whatever rescaling you might do later on.
+
+\item{-}{\tt\\fillinggrid}: in order to help you in the tedious task
+of determining the position of your annotations, you can use
+{\tt\\fillinggrid} as one particular annotation. This will produce a
+1\\pscm by 1\\pscm grid that roughly fills your figure. You will of
+course have to delete these in your final document\footnote{*} {To
+suppress all these grids at once in your final document, you may type
+{\tt\\let\\fillinggrid=\\relax} just after the line where you
+{\tt\\input psbox.tex}.}.
+
+\section{Figure Environment For Plain\TeX}
+If you have many large figures, the probability that \TeX{}
+barks at you about ``overfull or underfull vbox...'' becomes
+significant, because you give it a hard time trying to cut pages
+into a document that has many large unbreakable units. To
+overcome this problem, La\TeX{} users simply have to type:\hfil\break
+{\tt\\begin\{figure\}[hbt]\hfil\break
+\\begin\{center\}\\mbox\{\\psbox...\}\\end\{center\}\hfil\break
+\\caption\{Some caption\}\hfil\break \\end\{figure\}\hfil\break}
+In Plain\TeX{} you should use
+{\tt\\centinsert\{\\psbox...\}} instead of {\tt\$\$\\psbox...\$\$}.
+This will get your graphics precisely where you typed it except if
+there is not enough room in the current page, in which case you'll get
+it on top of the next one.
+
+However, you will then probably want to have a caption, in case your
+graphics and explanatory text get separated. You should then
+use {\tt\\pscaption\{\\psbox...\}\{caption\}}, for instance
+$$\vbox{\hsize=10cm\tt\hbox{
+\\centinsert\{%
+ \\pscaption\{%
+ \\psannotate\{%
+ \\psboxto(6cm;0cm)\{box.ps\}\}\{%
+}
+\hbox{\qquad\\fillinggrid\\at(3\\pscm;1\\pscm)\{A sample at.\}\}\}\{%
+ Figure 1: this is ...
+\}\}
+}}
+$$
+in order to get:
+\centinsert{
+ \pscaption{
+ \psannotate{
+ \psboxto(6cm;0cm){box.ps}}{
+ \fillinggrid\at(3\pscm;1\pscm){A sample at.}}}{%
+ Figure 1: this is probably the most stupid caption I can think of
+ but it can still be useful for illustrative purposes.
+}}%
+If your caption is short, it will automatically get centered:
+$$\pscaption{\psboxto(3cm;0cm){box.ps}}{\bf Figure 327.}
+$$
+When typing in the commands for catpion, annotations, etc, you may end
+up with long lines which you don't know how to break (a line break is
+essentially a space in \TeX, remember?). If you don't want these
+spurious spaces to sneek in your text, you should simply add \%{} just
+before the line break.
+
+\section{Multiple Files Management}
+Suppose you now have a few figures together with a paper, plus your favorite
+macros and reference files. You want to communicate the fruits of your hard
+work to the entire world, but you don't want to send ten separate files to
+each collaborator/potentially interested scientist. So you create a "master"
+file containing (you hope) all the files needed to re\TeX{} your paper. The
+receiver will also have to do some electronic cutting and pasting. Very
+quickly, it starts being a nuisance for everybody to assemble and disassemble
+a large file into it's constituents. This is why I thought the following
+macros might prove handy:
+
+\item{a.}{\tt\\joinfiles filename1, filename2, ..., filenamen \\into%
+\{JOINTFIL.TEX\}}\hfil\break
+joins several files into a big one that can be split later on. Since
+the goal here is universality, you should remember that PC's still form
+the majority of personal computers, and they like filenames of the form
+12345678.123 where you can only replace digits by a letter (no
+*,\&,\$,', etc...), without distinction between upper-case and
+lower-case. So, if you want portability, save your texts as
+{\tt12345678.tex} and your figures as {\tt12345678.eps} (ie. no
+empty extensions): this will save you from later troubles!
+The file {\tt JOINTFIL.TEX} has a header explaining how to split
+it (see below) and is in fact auto-splittable. Namely, you just have to
+run \TeX, or \LaTeX{} depending of what is required by the first file in
+the list. This should first split the file and then tex it while
+including properly the figures. You can edit the ``archive'' {\tt
+JOINTFIL.TEX}, for instance to change the header, or to modify the names
+under which files will be stored when split. For this you may need to
+know that each file in the archive has a header line containing it's
+name, eg:\hfil\break
+{\tt\%Beginning-Of-File-Named:box.ps}.
+
+\item{b.} {\tt\\autojoin}:\hfil\break
+since it is painful to remember the list of all figure's names, you can
+generate a joint file called {\tt psbjoint.tex} by simply typing
+{\tt\\autojoin} close to the end (ie. after all {\tt\\psbox...} and
+{\tt\\input ...} have been issued) of the file you want to tex. This
+will first close and then read in a file called {\tt psbjoin.aux} that is
+always generated automatically and that basically contains the list of
+all your inclusions (both figures and macro files {\tt\\input}ted). If
+you never say {\tt\\autojoin}, the file {\tt psbjoin.aux} will
+nevertheless be created and will by the end of the day contain the list
+of files needed for your texing session. This list will appear as an
+incomplete {\tt\\joinfiles}-command, which you can complete and tex to
+do the joining. Notice: all these macro and figure files do not need to
+be in the same directory to be found. If \TeX{} is able to find them
+for {\tt\\input} or {\tt\\psbox} (because they are in some directory
+named {\tt TeX Inputs} or pointed at by an environment variable {\tt
+TEXINPUTS}), it will be able to join them too. Unix users should resist
+the temptation of specifying explicit path in filenames (eg: {\tt
+../../TeX/mymacros.tex}): this makes their \TeX{} files non-portable.
+They should rather add an entry in their {\tt TEXINPUTS} list of paths.
+
+\item{c.}{\tt\\splitfile\{JOINTFIL.TEX\}}\hfil\break
+splits {\tt JOINTFIL.TEX} into it's constituents. Anything before the
+first {\tt\%Beginning-Of-File-Named:} line is trashed into a special
+file called {\tt TrashMe}: never store precious info in such a file
+anyhow! You may fear what happens if one of the constituent-file
+names coincides with a previoulsy existing file on your disk. Does it
+silently replace it? Well, no, relax, all output produced by these
+macros use {\tt\\warnopenout} instead of the standard {\tt\\openout},
+which will give you a chance to break precisely in this case. Notice
+{\tt\\warnopenout} is sometimes too cautious: it can warn you before
+erasing a file that doesn't exist! This is because a file with the same
+name exists in some directory \TeX{} is searching in for input files,
+but relax, it will only write files in the same directory as {\tt
+JOINTFIL.TEX}. Finally,
+notice you can say {\tt\\splitfile \{\\jobname\}} in which case you will
+split the very file that issued such a command (this is in fact what
+makes the output of {\tt\\joinfiles} auto-splittable). However,
+watchout: {\tt\\jobname} has peculiar and machine-dependent
+definition. It gives the name of the file currently texed MINUS it's
+{\tt.tex} extension if it has one (and on most machines, minus any
+extension your filename could have). So, \TeX{} will not
+be able to read in from the file named {\tt\\jobname} (without
+extension). But it always tries to read in {\tt\\jobname.tex} (in fact,
+on IBM \& VAX machines, it doesn't even try to read {\tt\\jobname}
+without extension). This mess explains the
+precaution taken in the header of a joint file, reproduced below:
+{\obeylines\tt\def
+{\hfil\break}
+\% This collection of files was produced with CERN psbox package
+\% To decompose and tex it:
+\%-save this with a filename CONTAINING ONLY LETTERS and a .TEX
+\% extension (say, JOINTFIL.TEX), in some uncrowded directory;
+\%-make sure you can \string\input\space psbox.tex (version>=1.3);
+\% (else ftp cs.nyu.edu(=128.122.140.24):pub/TeX/psbox/, then get
+\% and tex the file psboxall.tex; more info in psbREAD.ME)
+\%-tex JOINTFIL.TEX using Plain, or LaTeX, or whatever is needed by
+\% the first file in the joining (after splitting JOINTFIL.TEX into
+\% it's constituents, TeX will try to process it as it stands).
+\\input psbox.tex
+\\splitfile\{\\jobname\}
+\\let\\autojoin\\=\\relax
+}
+\joinfiles psbREAD.ME, psboxOK.tex\into{TrashMe}
+\section{Errors}
+\message{RELAX!!!
+The following error messages should not frighten you, they are
+intentional tests. Just continue and see what comes out!}
+If \TeX{} cannot find the file you specified, you will get the following
+output:
+$$\psbox{in_exist.ps}$$
+On the other hand, an existing file which is not EPSF will produce:
+$$\psbox{psbsamp.tex}$$
+\autojoin
+\bye
diff --git a/macros/generic/psbox/psbug.tex b/macros/generic/psbox/psbug.tex
new file mode 100644
index 0000000000..dd53df064a
--- /dev/null
+++ b/macros/generic/psbox/psbug.tex
@@ -0,0 +1,30 @@
+ PSBOX bug-report form
+ ---------------------
+From:
+To: orloff@surya11.cern.ch (Jean Orloff)
+Subject: psbox BUG
+
+YOU Name:
+ Email:
+PSBOX version no:
+ source:
+MACHINE type: (NeXT, Mac LC,...)
+ Operating system:
+TEX name:
+ version:
+TEX->PS name: (dvips, TeXtures,...)
+ version:
+DRAWING program: (Adobe Illustrator, xfig,...)
+ version:
+PRINTER type:
+PostScript version:
+PREVIEW for postscript (if any): (ghostscript,...)
+
+Command(s) incriminated: (\psbox,\splitfile,...)
+Problem description:
+
+
+
+
+Log (TeX, TeX->PS, Printer) file(s) where you got insulted:
+
diff --git a/macros/generic/randomlist/Makefile b/macros/generic/randomlist/Makefile
new file mode 100644
index 0000000000..06d3905dce
--- /dev/null
+++ b/macros/generic/randomlist/Makefile
@@ -0,0 +1,57 @@
+base=randomlist
+default: package doc doc-fr test test-fr # package ou class
+final: package doc-final doc-fr-final test test-fr
+
+package: $(base).sty
+$(base).sty: $(base).ins $(base).dtx
+ tex '\nonstopmode \input $(base).ins'
+
+class: $(base).cls
+$(base).cls: $(base).ins $(base).dtx
+ tex '\nonstopmode \input $(base).ins'
+
+doc:
+ latex '\nonstopmode \input $(base).dtx'
+ dvips $(base)
+ ps2pdf $(base).ps $(base).pdf
+ rm $(base).dvi $(base).ps
+
+doc-final:
+ latex '\nonstopmode \input $(base).dtx'
+ latex '\nonstopmode \input $(base).dtx'
+ makeindex -s gind.ist -o $(base).ind $(base).idx
+ makeindex -s gglo.ist -o $(base).gls $(base).glo
+ latex '\nonstopmode \input $(base).dtx'
+ dvips $(base)
+ ps2pdf $(base).ps $(base).pdf
+ rm $(base).dvi $(base).ps
+
+doc-fr: $(base)-doc-fr.pdf
+$(base)-doc-fr.pdf: $(base)-doc-fr.tex
+ latex '\nonstopmode \input $(base)-doc-fr'
+ dvips $(base)-doc-fr
+ ps2pdf $(base)-doc-fr.ps $(base)-doc-fr.pdf
+ rm $(base)-doc-fr.dvi $(base)-doc-fr.ps
+
+doc-fr-final:
+ latex '\nonstopmode \input $(base)-doc-fr'
+ latex '\nonstopmode \input $(base)-doc-fr'
+ makeindex -s gind.ist -o $(base)-doc-fr.ind $(base)-doc-fr.idx
+ latex '\nonstopmode \input $(base)-doc-fr'
+ dvips $(base)-doc-fr
+ ps2pdf $(base)-doc-fr.ps $(base)-doc-fr.pdf
+ rm $(base)-doc-fr.dvi $(base)-doc-fr.ps
+
+test: randomlist.tex test.tex testtex.tex
+ pdflatex '\nonstopmode \input test.tex'
+ etex '\nonstopmode \input testtex.tex'
+ pdftex '\nonstopmode \input testtex.tex'
+
+test-fr: randomlist.tex test-fr.tex
+ pdflatex '\nonstopmode \input test-fr.tex'
+
+clean:
+ rm -rf *~ *.aux *.dvi *.ps *.glo *.gls *.idx *.ilg *.ind *.log *.out *.tmp *.toc
+
+zip:
+ cd .. ; zip $(base).zip randomlist/$(base).dtx randomlist/$(base).ins randomlist/$(base).pdf randomlist/$(base).tex randomlist/$(base).sty randomlist/README.txt randomlist/Makefile randomlist/comets.dat randomlist/pupils.dat randomlist/pythagoras.dat randomlist/test.tex randomlist/test.pdf randomlist/test-fr.tex randomlist/test-fr.pdf randomlist/testtex.tex randomlist/testtex.pdf; mv $(base).zip randomlist/
diff --git a/macros/generic/randomlist/README.txt b/macros/generic/randomlist/README.txt
new file mode 100644
index 0000000000..a06c3a5be7
--- /dev/null
+++ b/macros/generic/randomlist/README.txt
@@ -0,0 +1,46 @@
+___________________________________
+
+ The
+ randomelist package
+ v1.2
+
+ 2016/07/13
+___________________________________
+
+Maintainers: Jean-Côme Charpentier & Christian Tellechea
+E-mails : jean-come.charpentier@wanadoo.fr
+ unbonpetit@openmailbox.org
+ Comments, bug reports and suggestions are welcome.
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+The main aim of package randomlist is to work on list, especially with
+random operation. The hidden aim is to build personnal collection of
+exercices with different data for each pupils.
+
+In order to build such exercices, some features about databases and
+about loops are necessary.
+
+randomlist works under (La)eTeX, pdf(La)TeX, Xe(La)TeX, and
+lua(La)TeX. TeX without eTeX primitives don't work since some eTeX
+primitives are used.
+
+----------------------------------------------------------------------
+
+Le but premier de cette extension est de pouvoir travailler sur des
+listes, en particulier avec des opérations aléatoires. Le but caché
+est de réaliser une collection personnelle d'exercices avec
+différentes données pour chaque élève.
+
+Certaines fonctionnalités sur les base de données et les boucles vont
+être nécessaires pour construire de tels exercices.
+
+randomlist fonctionne sous La)eTeX, pdf(La)TeX, Xe(La)TeX et
+lua(La)TeX. TeX sans les primitives eTeX ne fonctionnera pas puisque
+certaines primitives eTeX sont utilisées.
+
+ Jean-Côme Charpentier
+ Christian Tellechea
+
diff --git a/macros/generic/randomlist/comets.dat b/macros/generic/randomlist/comets.dat
new file mode 100644
index 0000000000..8f659c997e
--- /dev/null
+++ b/macros/generic/randomlist/comets.dat
@@ -0,0 +1,22 @@
+| Comet | Discover |Year |Period |
+%------------------------------------------------------------------
+| 1P/Halley | Halley |1758 | 76.09 |
+| 2P/Encke | Encke |1786 | 3.30 |
+| 3D/Biela | Biela |1826 | 6.62 |
+| 4P/Faye | Faye |1843 | 7.55 |
+| 5D/Brorsen | Brorsen |1846 | 5.46 |
+| 6P/d'Arrest | d'Arrest |1851 | 6.54 |
+| 7P/Pons-Winnecke | Pons \& Winnecke |1819 | 6.36 |
+| 8P/Tuttle | Tuttle |1858 | 13.58 |
+| 9P/Tempel | Tempel |1867 | 5.52 |
+| 10P/Tempel | Tempel |1873 | 5.38 |
+| 11P/Tempel-Swift-LINEAR | Tempel, Swift \& LINEAR |1869 | 6.37 |
+| 12P/Pons-Brooks | Pons \& Brooks |1812 | 70.85 |
+| 13P/Olbers | Olbers |1815 | 69.5 |
+| 14P/Wolf | Wolf |1884 | 8.74 |
+| 15P/Finlay | Finlay |1886 | 6.50 |
+| 16P/Brooks | Brooks |1889 | 6.14 |
+| 17P/Holmes | Holmes |1892 | 6.89 |
+| 18D/Perrine-Mrkos | Perrine \& Mrkos |1896 | |
+| 19P/Borrelly | Borrelly |1904 | 6.85 |
+| 20D/Westphal | Westphal |1852 | 61.8 |
diff --git a/macros/generic/randomlist/pupils.dat b/macros/generic/randomlist/pupils.dat
new file mode 100644
index 0000000000..2f1cdb5abf
--- /dev/null
+++ b/macros/generic/randomlist/pupils.dat
@@ -0,0 +1,25 @@
+Name,FirstName,Result
+Aho,Alfred,A
+Babbage,Charles,A
+Chaitin,Gregory,B
+Dijkstra,Edsger,A
+Eckert,John Preper,B
+Floyd,Robert,B
+G\"odel,Kurt,A
+Huffman,David,B
+Ichbiah, Jean,A
+Joshi,Aravind,C
+Knuth,Donald,C
+Lovelace,Ada,A
+Moore,Gordon,A
+Neumann (Von),John,A
+Ouserhout,John,B
+Pascal,Blaise,A
+Ritchie,Dennis,C
+Shannon,Claude,C
+Thompson,Ken,A
+Ullman,Jeffrey,B
+Vixie,Paul,B
+Wall,Larry,B
+Yao, Adrew Chi-Chih,C
+Zuse,Konrad,C \ No newline at end of file
diff --git a/macros/generic/randomlist/pythagoras.dat b/macros/generic/randomlist/pythagoras.dat
new file mode 100644
index 0000000000..5b69b3302c
--- /dev/null
+++ b/macros/generic/randomlist/pythagoras.dat
@@ -0,0 +1,100 @@
+119,120,169
+108,144,180
+153,104,185
+144,130,194
+133,156,205
+120,182,218
+105,208,233
+180,112,212
+171,140,221
+160,168,232
+147,196,245
+132,224,260
+115,252,277
+209,120,241
+200,150,250
+189,180,261
+176,210,274
+161,240,289
+144,270,306
+125,300,325
+104,330,346
+240,128,272
+231,160,281
+220,192,292
+207,224,305
+192,256,320
+175,288,337
+156,320,356
+135,352,377
+112,384,400
+280,102,298
+273,136,305
+264,170,314
+253,204,325
+240,238,338
+225,272,353
+208,306,370
+189,340,389
+168,374,410
+145,408,433
+120,442,458
+315,108,333
+308,144,340
+299,180,349
+288,216,360
+275,252,373
+260,288,388
+243,324,405
+224,360,424
+203,396,445
+180,432,468
+155,468,493
+128,504,520
+352,114,370
+345,152,377
+336,190,386
+325,228,397
+312,266,410
+297,304,425
+280,342,442
+261,380,461
+240,418,482
+217,456,505
+192,494,530
+162,532,557
+136,570,586
+105,608,617
+391,120,409
+384,160,416
+375,200,425
+364,240,436
+351,280,449
+336,320,464
+319,360,481
+300,400,500
+297,440,521
+256,480,544
+231,520,569
+204,560,596
+175,600,625
+144,640,656
+111,680,689
+432,126,450
+425,168,457
+416,210,466
+405,252,477
+392,294,490
+377,336,505
+360,378,522
+341,420,541
+320,462,562
+297,504,585
+272,546,610
+245,588,637
+216,630,666
+185,672,697
+152,714,730
+117,756,765
+475,132,493
+468,176,500 \ No newline at end of file
diff --git a/macros/generic/randomlist/randomlist.dtx b/macros/generic/randomlist/randomlist.dtx
new file mode 100644
index 0000000000..d62192fd45
--- /dev/null
+++ b/macros/generic/randomlist/randomlist.dtx
@@ -0,0 +1,2468 @@
+% \iffalse
+%
+%% randomlist.dtx
+%% Copyleft 2013-2017 J.-C. Charpentier & C. Tellechea
+%
+%% Packages `randomlist' to use with (La)eTeX
+%% Copyleft (L) 2013-2017 Jean-C\^ome Charpentier & Christian Tellechea.
+% \fi
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% \iffalse
+%<*driver>
+\documentclass[a4paper, 12pt]{ltxdoc}
+\errorcontextlines=10
+
+\makeatletter
+\renewenvironment{theglossary}{%
+ \glossary@prologue
+ \GlossaryParms \let\item\@idxitem \ignorespaces}%
+{}
+\makeatother
+\GlossaryPrologue{%
+ \newpage
+ \section*{Change history}
+ \markboth{{Change history}}{{Change history}}%
+}
+\DisableCrossrefs
+%\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{kpfonts}
+\usepackage[a4paper, left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
+\usepackage{array}
+\usepackage{fvrb-ex}
+\fvset{frame=lines,xrightmargin=0.5\linewidth}
+\usepackage{makeidx}
+\usepackage{randomlist}
+\usepackage[USenglish]{babel}
+\usepackage{hyperref}
+
+\pagestyle{plain}
+\makeindex
+\title{%
+ Package \package{randomlist}\\Tools for data base, table and random
+ writting-reading}
+\author{%
+ Jean-Côme Charpentier\thanks{\ttfamily
+ jean-come.charpentier@wanadoo.fr}
+ \and
+ Christian Tellechea\thanks{\ttfamily unbonpetit@openmailbox.org}
+}
+\newcommand*\pgm[1]{\texttt{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\newcommand*\package[1]{\texttt{#1}}
+\newcommand*\class[1]{\texttt{#1}}
+\newcommand*\option[1]{\texttt{#1}}
+\newcommand*\key[1]{\texttt{#1}}
+\newcommand*\Key[1]{\texttt{#1}\index{#1=\texttt{#1}}}
+\newcommand*\environ[1]{\texttt{#1}}
+\newcommand*\Environ[1]{\texttt{#1}\index{#1=\texttt{#1}}}
+\makeatletter
+\edef\quotechar{\string!}
+\edef\actualchar{\string=}
+\edef\verbatimchar{\string+}
+\def\SpecialPageIndex#1{%
+ \immediate\write\@indexfile{%
+ \string\indexentry{\expandafter\@gobble\string#1\actualchar
+ \string\verb\quotechar*\verbatimchar\string#1\verbatimchar|hyperpage}%
+ {\number\c@page}%
+ }%
+}
+\makeatother
+\newcommand*\Cmd[1]{\texttt{\string#1}\SpecialPageIndex{#1}}
+
+\begin{document}
+\maketitle
+\newpage
+\setcounter{tocdepth}{3}
+\tableofcontents
+\newpage
+\section{Overview}
+The main aim of package \package{randomlist} is to work on list,
+especially with random operation. The hidden aim is to build
+personnal collection of exercices with different data for each
+pupils. In order to build such exercices, some features about
+databases are necessary.
+
+In ``randomlist'', the word ``List'' must be understound with two
+meanings:
+\begin{itemize}
+\item itemize and enumerate \LaTeX{} environments;
+\item list as in computer science.
+\end{itemize}
+In fact, lists as in computer are not really lists: they are
+arrays. Some commands allow to deal with these data structures as
+queues, other commands as stacks and another commands as arrays.
+
+\section{Array, queue, stack, or list?}
+The package give the name ``list'' to the main data structure. First,
+we have to declare a new list with command \Cmd{\NewList}. There is
+nothing special about this command. It has a mandatory argument: the
+name of the list.
+
+Nearly any name is possible. However, don't use hyphen and number at
+the end of the name. For instance \texttt{mylist-1} isn't a good idea
+(\texttt{mylist*1} is a good one). Don't use fragile commands and
+special characters. However you can use commands inside list names.
+
+\subsection{Create, erase and show list}
+You can't create an already existing list. For instance, the code:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \NewList{MyList}
+ \NewList{MyList}
+\end{Verbatim}
+give the error message:
+\begin{Verbatim}[frame=none]
+ ! Package randomlist Error: List MyList already exists.
+\end{Verbatim}
+If you want erase a list, use the command \Cmd{\ClearList}.
+
+You can't create a list \key{namelist} if the macro \cmd{\namelist}
+exists. For instance the code:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \NewList{def}
+\end{Verbatim}
+give the error message:
+\begin{Verbatim}[frame=none]
+ ! Package randomlist Error: Command \def already exists.
+\end{Verbatim}
+
+\medskip
+As you can see, the source is between horizontal rules and flush
+right. The result is flush left. When the result isn't an error
+message, source and result are side by side.
+
+For the next commands we must be able to see the state of list. The
+package \package{randomlist} offers the \Cmd{\ShowList} command which
+allows to see the whole list. When a list is just created, it is empty,
+so the \cmd{\ShowList} command shows it like that (source is typeseted
+at the right side and result is showed at the left side):\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\subsection{Writing and reading in a list}
+Once a list is created, you can write values and, after that, read
+values.
+
+In fact, these lists can behaves like queues, stacks, or arrays
+according to the used command. There are four kinds of command:
+\begin{itemize}
+\item Insert;
+\item Extract;
+\item Set;
+\item Get.
+\end{itemize}
+\goodbreak
+Each one has four variants to reach some position in the list:
+\begin{itemize}
+\item First;
+\item Last;
+\item Index (without prefix);
+\item Random.
+\end{itemize}
+Thus we have the commands:
+\begin{center}
+ \begin{tabular}{*{4}{>{\ttfamily\textbackslash}l}}
+ InsertFirstItem & ExtractFirstItem & SetFirstItem & GetFirstItem
+ \\
+ InsertLastItem & ExtractLastItem & SetLastItem & GetLastItem
+ \\
+ InsertItem & ExtractItem & SetItem & GetItem
+ \\
+ InsertRandomItem & ExtractRandomItem & SetRandomItem & GetRandomItem
+ \end{tabular}
+\end{center}
+
+Each one has also a ``List'' variant which acts on several items. That
+is, we have these commands: \cmd{\InsertList}, \cmd{\ExtractList},
+\cmd{\SetList}, and \cmd{\GetList}. There is also a command
+\Cmd{\CopyList} which is a shortcut for a special \cmd{\SetList}.
+
+Finally, we have \cmd{\ShiftList} which is somewhere quiet special: it
+creates empty items or destroy items by shifting inside a list. This
+macro is rather for internal operation but you can use it. The syntax is:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \ShiftList{<list>}{<start>}{<nb>}
+\end{Verbatim}
+
+When \texttt{<nb>} is positive, then items from index \texttt{<start>}
+are right shifted. That is, index $n$ becomes index $n+\mathtt{nb}$
+and index from \texttt{<start>} to
+$\text{\texttt{<start>}}+\text{\texttt{<nb>}}-1$ are empty.
+
+When \texttt{<nb>} is negative, then items starting from the end of
+the list are left shifted and \texttt{<nb>} items (from index
+\texttt{start}) disappear.
+
+Usually, you don't need \Cmd{\ShiftList}: the other commands,
+especially \cmd{\ExtractList} and \Cmd{\InsertList} are enough.
+
+\subsubsection{Insert commands}
+\paragraph[\string\InsertFirstItem]{\cmd{\InsertFirstItem}}
+\Cmd{\InsertFirstItem} writes a value at the beginning of a list and
+shift other values to the end of the list. This command has two
+arguments: the list name and the value to insert. For
+example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertFirstItem{MyList}{First value}
+ \ShowList{MyList}
+ \InsertFirstItem{MyList}{Second value}
+ \ShowList{MyList}
+ \InsertFirstItem{MyList}{Third value}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+As you can see, the list is in the reverse order than the user
+one. With \cmd{\InsertFirstItem}, list behaves like stack.
+
+The value written in the list can be nearly anything. For
+instance:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertFirstItem{MyList}{{two}{groups}}
+ \InsertFirstItem{MyList}{\textbf{text}}
+ \InsertFirstItem{MyList}{special^}
+ \InsertFirstItem{MyList}{end}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\InsertLastItem]{\cmd{\InsertLastItem}}
+\Cmd{\InsertLastItem} is like \cmd{\InsertFirstItem} but the insertion
+is made at the end of the list. As for the previous command, it takes
+two arguments: the list name and the value to insert. The previous
+example give:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{{two}{groups}}
+ \InsertLastItem{MyList}{\textbf{text}}
+ \InsertLastItem{MyList}{special^}
+ \InsertLastItem{MyList}{end}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+With this command, the list behaves as queue.
+
+\paragraph[\string\InsertItem]{\cmd{\InsertItem}}
+\Cmd{\InsertItem} is like \cmd{\InsertFirstItem} but the insertion
+is made to a specified position of the list. With this command, the list
+behaves as an array.
+
+The index starts from zero and if the list has $n$ elements then the
+index can't be greater than $n$. When a value is inserted in position
+$k$, then the previous values from $k$ to $n-1$ are shifted one
+position to the right.
+
+\cmd{\InsertItem} takes three arguments: the list name, the position
+and the value. Here is an example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{first}
+ \InsertLastItem{MyList}{\textbf{second}}
+ \InsertLastItem{MyList}{special^}
+ \InsertLastItem{MyList}{end}
+ \ShowList{MyList}
+ \InsertItem{MyList}{2}{\textbf{insert!}}
+ \InsertItem{MyList}{2}{\textbf{other!}}
+ \InsertItem{MyList}{6}{real end}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+As you can see, when the two values is inserted at position~2, the
+value \texttt{special\textasciicircum} is shifted from position~2 to
+position~4. Moreover, it's possible to insert a value to the
+nonexistent position $n$ when the length of the list is $n$: it's the
+only one possibility to specify a nonexistent index.
+
+\paragraph[\string\InsertRandfomItem]{\cmd{\InsertRandomItem}}
+This is the first command which use random numbers. We will see later
+how to manage random numbers themselves.
+
+\Cmd{\InsertRandomItem} command works as the \cmd{\InsertItem} one
+but the position is selected randomly by \TeX{}. Then there is only two
+arguments: the list name and the value to insert. Here is an example:
+\RLsetrandomseed 1\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertRandomItem{MyList}{first}
+ \InsertRandomItem{MyList}{second}
+ \InsertRandomItem{MyList}{third}
+ \InsertRandomItem{MyList}{fourth}
+ \InsertRandomItem{MyList}{fifth}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\InsertList]{\cmd{\InsertList}}
+\Cmd{\InsertList} allows to do in one shot what the \cmd{\InsertItem}
+can do in several ones. The principle of this command is to insert all
+the items of a list inside a second one. You have to give three
+arguments: the list which receive, the index to start insertion, and
+the list to insert. For instance:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \NewList{OtherList}
+ \InsertLastItem{MyList}{first in M}
+ \InsertLastItem{MyList}{fourth in M}
+ \InsertLastItem{MyList}{fifth in M}
+ \InsertLastItem{OtherList}{second in O}
+ \InsertLastItem{OtherList}{third in O}
+ \InsertList{MyList}{1}{OtherList}
+ \ShowList{MyList}
+ \ShowList{OtherList}
+\end{SideBySideExample}
+\par\medskip
+
+As you can see, the second list is unchanged after operation.
+
+Package \package{randomlist} checks that both lists exists and that
+index is compatible with list. Otherwise an error message will be
+raised.
+
+It's possible to insert an empty list:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \NewList{OtherList}
+ \InsertLastItem{MyList}{first}
+ \InsertLastItem{MyList}{second}
+ \InsertLastItem{MyList}{third}
+ \InsertList{MyList}{1}{OtherList}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\subsubsection{Extract commands}
+\paragraph[\string\ExtractFirstItem]{\cmd{\ExtractFirstItem}}
+The four commands \cmd{\Extract...Item} are the inverse one of the
+four commands \cmd{\Insert...Item}.
+
+\Cmd{\ExtractFirstItem} extract the first value of a list and store it
+in a macro. The other elements of the list are shifted left (the list
+length decreases by one). This command takes two argument: the list
+name and the macro name where the value is stored. The last argument
+is just the name of the macro, \emph{i.e.} the macro name without the
+backslash. For example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \ExtractFirstItem{MyList}{MyMacro}
+ The first element was ``\MyMacro''.
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+When you extract an element from a list, the list length decreases by
+one. It explains why it's forbidden to extract an element from an
+empty list. If you try it,
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \NewList{MyList}
+ \ExtractFirstItem{MyList}{MyMacro}
+\end{Verbatim}
+you have the error message:
+\begin{Verbatim}[frame=none]
+ ! Package randomlist Error: List MyList is empty.
+\end{Verbatim}
+
+\paragraph[\string\ExtractLastItem]{\cmd{\ExtractLastItem}}
+\Cmd{\ExtractLastItem} behaves like \cmd{\ExtractFirstItem} but the
+element extracted is the last one. Thus there is no shifting, there is
+just a decrementation of the list length.
+
+Here is an example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \ExtractLastItem{MyList}{MyMacro}
+ The last element was ``\MyMacro''.
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\ExtractItem]{\cmd{\ExtractItem}}
+\Cmd{\ExtractItem} behaves like \cmd{\ExtractFirstItem} but the
+element extracted is the one indicated by its index. The command takes
+three argument: the list name, the index of element to extract, the
+macro used to store the element extracted. Don't forget that indexes
+start from zero. Here is an example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \ExtractItem{MyList}{2}{MyMacro}
+ The third element was ``\MyMacro''.
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+There isn't anything special. The length of the list decreases by one
+and elements are shifted accordingly to the extracted one.
+
+\paragraph[\string\ExtractRandomItem]{\cmd{\ExtractRandomItem}}
+\Cmd{\ExtractRandomItem} works like the previous
+\cmd{\ExtractItem}. Here, the index is selected randomly by the
+computer. Then there are only two arguments: the list name and the
+macro to store the extracted element:\par\medskip
+
+\RLsetrandomseed 3
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \ExtractRandomItem{MyList}{MyMacro}
+ ``\MyMacro'' was extracted.
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+Even the extraction is made on a random index, it's forbidden to
+extract something from an empty list. Then, the code:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \NewList{MyList}
+ \ExtractRandomItem{MyList}{MyMacro}
+\end{Verbatim}
+gives the usual error message:
+\begin{Verbatim}[frame=none]
+ ! Package randomlist Error: List MyList is empty.
+\end{Verbatim}
+
+\paragraph[\string\ExtractList]{\cmd{\ExtractList}}
+The commands \cmd{\Extract...Item} extract one item and store it in a
+macro. With the command \Cmd{\ExtractList} we can extract several
+items and put them in a list. \cmd{\ExtractList} asks for four
+arguments:
+\begin{enumerate}
+\item the main list;
+\item the starting index;
+\item the ending index;
+\item the list which receive extracted values.
+\end{enumerate}
+Here is an example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \NewList{OtherList}
+ \InsertLastItem{MyList}{first}
+ \InsertLastItem{MyList}{second}
+ \InsertLastItem{MyList}{third}
+ \InsertLastItem{MyList}{fourth}
+ \InsertLastItem{MyList}{fifth}
+ \InsertLastItem{MyList}{sixth}
+ \ExtractList{MyList}{2}{4}{OtherList}
+
+ \ShowList{MyList}
+ \ShowList{OtherList}
+\end{SideBySideExample}
+\par\medskip
+
+Obviously, \package{randomlist} checks list and indexes. You can have
+the start index and the last index equals. In this case,
+\cmd{\ExtractList} behaves like \cmd{\ExtractItem} but the extracted
+value is put in a list rather than in a macro:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \NewList{OtherList}
+ \InsertLastItem{MyList}{first}
+ \InsertLastItem{MyList}{second}
+ \InsertLastItem{MyList}{third}
+ \InsertLastItem{MyList}{fourth}
+ \InsertLastItem{MyList}{fifth}
+ \InsertLastItem{MyList}{sixth}
+ \ExtractList{MyList}{2}{2}{OtherList}
+
+ \ShowList{MyList}
+ \ShowList{OtherList}
+\end{SideBySideExample}
+\par\medskip
+
+\subsubsection{Set commands}
+\paragraph[\string\SetFirstItem]{\cmd{\SetFirstItem}}
+The commands \cmd{\Set...Item} modify the existing values of
+list. \Cmd{\SetFirstItem} modify the first value.\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \SetFirstItem{MyList}{\LaTeX}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+If a list is empty, there is the classic error message about empty
+list.
+
+\paragraph[\string\SetLastItem]{\cmd{\SetLastItem}}
+\Cmd{\SetLastItem} acts like \cmd{\SetFirstItem} but at the end of the
+list.
+
+\paragraph[\string\SetItem]{\cmd{\SetItem}}
+\Cmd{\SetItem} acts like the previous commands. It takes three
+arguments: the list name, the index, the new value:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \SetItem{MyList}{2}{quiet}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+If the index doesn't exist, an error message is showed. Code:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \SetItem{MyList}{4}{isn't it?}
+\end{Verbatim}
+gives the error message:
+\begin{Verbatim}[frame=none]
+ ! Package randomlist Error: Index 4 is greater than last index of list MyList.
+\end{Verbatim}
+
+\paragraph[\string\SetRandomItem]{\cmd{\SetRandomItem}}
+\Cmd{\SetRandomItem} acts like the previous one but the index is
+selected randomly. The list must be non empty. Here is an
+example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \InsertLastItem{MyList}{\TeX}
+ \InsertLastItem{MyList}{is}
+ \InsertLastItem{MyList}{really}
+ \InsertLastItem{MyList}{very}
+ \InsertLastItem{MyList}{powerful}
+ \SetRandomItem{MyList}{snap!}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\SetList]{\cmd{\SetList}}
+Insert value one by one inside a list could be tiresome especially if
+you have many values. Package \package{randomlist} allows to insert
+many items in a row using the macro \Cmd{\SetList}. Items are
+separated with comma. For instance:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \SetList{MyList}{\TeX, is, very,
+ powerful}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+As you can see, spaces aren't discarded. A more satisfactory
+presentation would be:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \SetList{MyList}{\TeX,is,very,%
+ powerful}
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\CopyList]{\cmd{\CopyList}}
+Copy a list in another one. Both lists must exists: this command don't
+create list since only \cmd{\NewList} can do that. Here is an
+example:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \NewList{OtherList}
+ \SetList{MyList}{\TeX,is,very,%
+ powerful}
+ \CopyList{MyList}{OtherList}
+ \ShowList{OtherList}
+\end{SideBySideExample}
+\par\medskip
+
+\subsubsection{Get commands}
+\paragraph[\string\GetFirstItem]{\cmd{\GetFirstItem}}
+The \cmd{\get...list} look for a value in a list. They don't change
+the list. The index must exist elsewhere an error message will be
+show. That is, for first, last, and random variant, list must be non
+empty.
+
+\Cmd{\GetFirstItem} put the first value of a list into a macro. The
+arguments of the command are: the list name, the macro:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \SetList{MyList}{\TeX,is,so,cute}
+ \GetFirstItem{MyList}{MyMacro}
+ The first element is ``\MyMacro''
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\GetLastItem]{\cmd{\GetLastItem}}
+\Cmd{\GetLastItem} acts like \cmd{\GetFirstItem} but give the last value.
+
+\paragraph[\string\GetItem]{\cmd{\GetItem}}
+\Cmd{\GetItem} acts like the previous one but give the value of the
+element $k$ where $k$ is the second argument. Pay attention that
+indexes start from zero. Then the index $k$ maps to the $k+1$st
+element of the list.\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \SetList{MyList}{\TeX,is,so,cute}
+ \GetItem{MyList}{2}{MyMacro}
+ The third element is ``\MyMacro''
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+Package \package{randomlist} offers an other syntax to access to an
+item: \cmd{\<namelist>[<index>]}. Thus, we can write the previous
+example like that:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \SetList{MyList}{\TeX,is,so,cute}
+ The third element is ``\MyList[2]''
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\GetRandomItem]{\cmd{\GetRandomItem}}
+\Cmd{\GetRandomItem} give the value of a randomly selected element of a
+list.\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \SetList{MyList}{\TeX,is,so,cute}
+ \GetRandomItem{MyList}{MyMacro}
+ The random element is ``\MyMacro''
+
+ \ShowList{MyList}
+\end{SideBySideExample}
+\par\medskip
+
+\paragraph[\string\GetList]{\cmd{\GetList}}
+\Cmd{\GetList} builds a sub-list. Arguments are those of
+\cmd{\ExtractList}, that is, the read list, the first index, the last
+index, and the written list.\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{MyList}
+ \NewList{OtherList}
+ \SetList{MyList}{X1,X2,X3,X4,X5,X6}
+ \GetList{MyList}{2}{4}{OtherList}
+ \ShowList{MyList}
+ \ShowList{OtherList}
+\end{SideBySideExample}
+\par\medskip
+
+Contrary to what \cmd{\ExtractItem} do, \cmd{\GetList} don't modify
+the source list.
+
+\section{Database}
+\subsection{Simple database}
+Package \package{randomlist} offers some features about databases. In
+fact that was the first aim of this package: to be able to product one
+assignment for one pupil (with all assignments different).
+
+For \package{randomlist} a database is a list. For instance the next
+example shows an usual list which is used as a database. We'll see
+later real databases with records and fields. For now, our
+database has records and each record has one single field: the name
+and first name of our pupils. In order to parse all entries of
+database \package{randomlist} offers the commands
+\cmd{\ForEach...Item}. These command extract one by one all the
+elements of a list and typeset, for each element, its third
+argument. Second argument give the macro name where element is stored.
+For these commands, the macro name is given without the
+backslash. Depending how the extraction is made, we have the three
+commands: \Cmd{\ForEachFirstItem}, \cmd{\ForEachLastItem}, and
+\cmd{\ForEachRandomItem}. In fact, the readind is made with an
+extraction but, as the work is made in a group, after the
+\cmd{\ForEach...} command, the list is restored.
+
+\subsubsection[\protect\texttt{\protect\textbackslash ForEachFirstItem}]{\cmd{\ForEachFirstItem}}
+
+\begin{SideBySideExample}
+ \NewList{Pupils}
+ \SetList{Pupils}{Alfred Aho,%
+ Charles Babbage,Gregory Chaintin,%
+ Edsger Dijkstra}
+ \ForEachFirstItem{Pupils}{Name}{%
+ Test for \Name\par
+ blah blah blah\dots\par\smallskip
+ }
+\end{SideBySideExample}
+\par\medskip
+
+\subsubsection[\protect\texttt{\protect\textbackslash ForEachLastItem}]{\cmd{\ForEachLastItem}}
+\Cmd{\ForEachLastItem} acts like \cmd{\ForEachFirstItem} but the
+reading is made in reverse order:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{Pupils}
+ \SetList{Pupils}{Alfred Aho,%
+ Charles Babbage,Gregory Chaintin,%
+ Edsger Dijkstra}
+ \ForEachLastItem{Pupils}{Name}{%
+ Test for \Name\par
+ blah blah blah\dots\par\smallskip
+ }
+\end{SideBySideExample}
+\par\medskip
+
+\subsubsection[\protect\texttt{\protect\textbackslash ForEachRandomItem}]{\cmd{\ForEachRandomItem}}
+\Cmd{\ForEachRandomItem} acts like the previous commands but the
+reading is made randomly. In the next example, we can see that the
+list is restored after the command
+\cmd{\ForEachRandomItem}:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{Pupils}
+ \SetList{Pupils}{Alfred Aho,%
+ Charles Babbage,Gregory Chaintin,%
+ Edsger Dijkstra}
+ \ForEachRandomItem{Pupils}{Name}{%
+ Test for \Name\par
+ blah blah blah\dots\par\smallskip
+ }
+ \ShowList{Pupils}
+\end{SideBySideExample}
+\par\medskip
+
+You can put a command \cmd{\ForEach} inside another one. There is no
+limits (but the stacks of \TeX{}):\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{L-Man}
+ \NewList{L-Woman}
+ \SetList{L-Man}{Alfred,Charles,Gregory}
+ \SetList{L-Woman}{Ada,Grace,Adele}
+ \ForEachRandomItem{L-Man}{Man}{%
+ \ForEachRandomItem{L-Woman}{Woman}{%
+ \Man{} and \Woman{} are computer
+ scientists\par
+ }
+ }
+\end{SideBySideExample}
+\par\medskip
+
+Actually, there is a bug that don't allow fragile commands inside
+lists when they are read with \cmd{\ForEach...Item} commands. I hope
+that the next version of \package{randomlist} will fix this!
+
+\subsection{Database with fields}
+Each record of a database is read as a set of fields. In fact it's a
+sequence of groups. \package{randomlist} allow to read each field with
+the macro \Cmd{\ReadFieldItem}. In order to make life easy,
+\package{randomlist} allow to read whole database from files with the
+command \Cmd{\ReadFileList}.
+
+This command read a field in a record and store it in a macro. It
+takes three arguments: a whole record or a macro containing the whole
+record, the rank of the field (starting zero), and a macro to store
+the value of this field. For instance:\par\medskip
+
+\begin{SideBySideExample}
+ \def\record{{ein}{un}{one}}
+ \ReadFieldItem{\record}{0}{Zahl}
+ \ReadFieldItem{\record}{1}{Nombre}
+ \ReadFieldItem{\record}{2}{Number}
+ \Nombre\ French, \Zahl\ German,
+ and \Number\ English.
+\end{SideBySideExample}
+\par\medskip
+
+If there are less fields than the indicating rank then an
+error message is raised:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \def\record{{ein}{un}{one}}
+ \ReadFieldItem{\record}{3}{Stuff}
+\end{Verbatim}
+give the error message:
+\begin{Verbatim}[frame=none]
+ ! Package randomlist Error: There aren't enough fields in the record.
+\end{Verbatim}
+Remember that fields are numbered starting from zero!
+
+Obviously, the power of \Cmd{\ReadFieldItem} comes with list and real
+database. For instance:\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{Languages}
+ \SetList{Languages}{{France}{un},%
+ {Germany}{ein},{England}{one}}
+ \ForEachFirstItem{Languages}{Unit}{%
+ \ReadFieldItem{\Unit}{0}{Country}%
+ \ReadFieldItem{\Unit}{1}{Number}%
+ You say ``\Number'' in \Country.\par
+ }
+\end{SideBySideExample}
+\par\medskip
+
+It's not very handy to write a whole database inside a \LaTeX{}
+source. \package{randomlist} allows to load a data base reading a
+extern file. For that, there is the command \Cmd{\ReadFileList}. This
+command takes two mandatory arguments: the name of the database and
+the name of the file.
+
+The file \texttt{pythagoras.dat} (page~\pageref{file-pythagoras})
+shows 100~lines of three numbers separated by comma. When this file is
+read, the data base contains 100~records with three fields. That is,
+by default, \package{randomlist} read CSV files (Comma Separated
+Values).\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{Pyth}
+ \ReadFileList{Pyth}{pythagoras.dat}
+ \GetItem{Pyth}{10}{triple}
+ \ReadFieldItem{\triple}{0}{triplea}
+ \ReadFieldItem{\triple}{1}{tripleb}
+ Do you know that
+ $\sqrt{\triplea^2+\tripleb^2}$ is an
+ integer?
+\end{SideBySideExample}
+\par\medskip
+
+\NewList{Pyth}
+\ReadFileList{Pyth}{pythagoras.dat}
+\GetItem{Pyth}{10}{triple}
+\ReadFieldItem{\triple}{0}{triplea}
+\ReadFieldItem{\triple}{1}{tripleb}
+\ReadFieldItem{\triple}{2}{triplec}
+To those who check the triple page~\pageref{file-pythagoras}, don't
+forget that the 10th rank maps with line number~11, that is,
+``\texttt{\triplea,\tripleb,\triplec}''. Moreover, you have the result
+to the operation : $\sqrt{\triplea^2+\tripleb^2}=\triplec$.
+
+A file could have any structure. In particular, it could have one or
+several title lines. It's the case for the file \texttt{pupils.dat}
+(page~\pageref{file-pupils}) where the first line is obviously a title
+line. You have just to extract this or these lines to obtain a
+``classical'' database.\par\medskip
+
+\begin{SideBySideExample}
+ \NewList{Class}
+ \ReadFileList{Class}{pupils.dat}
+ \ExtractFirstItem{Class}{NULL}
+ \GetRandomItem{Class}{pupil}
+ \ReadFieldItem{\pupil}{0}{Name}
+ \ReadFieldItem{\pupil}{1}{FName}
+ \ReadFieldItem{\pupil}{2}{Note}
+ Your child \Name{} \FName{} has
+ \Note{} this term. This is
+ \if A\Note very \fi
+ \if C\Note not \fi
+ good.
+\end{SideBySideExample}
+\par\medskip\noindent
+Processing this way, you have got a database with real datas (no title
+data).
+
+The file could be in another format than CSV. In fact, you can define
+a field separator (comma by default) and a string delimiter (double
+quote by default) which allow to put a field separator inside a
+field.
+%The syntax isn't very rich. Unlike real CSV file, there isn't
+%the syntax \texttt{""} to obtain a single \texttt{"} (or with an other
+%field separator).
+To indicate other symbols than comma and double
+quote, the command \cmd{\ReadFileList} accept an optional argument
+which declare the field separator and the string encloser by two
+characters.
+
+For instance, the file \texttt{comets.dat} (see page~
+\pageref{file-comets}) has ``\texttt{\string|}'' as field
+separator. Therefore, the calling syntax becomes:\par\medskip
+
+\begingroup
+\catcode`\|=12
+\begin{SideBySideExample}
+ \NewList{Comets}
+ \ReadFileList[|"]{Comets}{comets.dat}
+ \ExtractFirstItem{Comets}{NULL}
+ \ExtractFirstItem{Comets}{NULL}
+ \GetRandomItem{Comets}{comet}
+ \ReadFieldItem{\comet}{1}{Name}
+ \ReadFieldItem{\comet}{2}{Discover}
+ \ReadFieldItem{\comet}{3}{Year}
+ \ReadFieldItem{\comet}{4}{Period}
+ The comet \Name{} was discovered by
+ \Discover{} in \Year{}.
+ \unless\ifx\Period\empty
+ Its period is \Period{} years.
+ \fi
+\end{SideBySideExample}
+\endgroup
+\par\medskip
+
+Observe that we have two ``title lines'' to discard. As each line
+begins by a field separator, the first field of each record is
+empty. Thus we extract field starting one (not zero). We test if a
+period is empty because of 18D/Perrine-Mrkos comet.
+
+\subsection{Tricks, things, and other matters}
+\subsubsection{Random number}
+In the package \package{randomlist}, the (pseudo) random numbers are
+processed by the macro \Cmd{\RLuniformdeviate}\texttt{\{<n>\}\{<macro>\}}
+(choose a random integer number between 0 and $\text{\key{n}}-1$ and
+store it in |\<macro>|) and \Cmd{\RLsetrandomseed} (set the seed).
+
+When you say nothing, the seed is calculated with the current date
+(year, month, day, hour and minute). That is, if you run
+\texttt{latex} twice with a delay greater than one minute, you will
+have two different results. Sometime, it's what you want, sometime
+it's annoying.
+
+Under \LaTeX{}, you can set the seed with the package option
+\texttt{seed} with the syntax:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \usepackage[seed=<value>]{randomlist}
+\end{Verbatim}
+where \texttt{<value>} is an integer value. If \texttt{<value>} is
+zero then the seed is calculated using actual time, year, month and
+day.
+
+Under \TeX{} you have to use the command \Cmd{\RLsetrandomseed} to
+give the seed value. As for the option, with a zero value, the seed is
+calculated using actual time, year, month and day. The syntax is
+simple:
+\begin{Verbatim}[xrightmargin=0pt,xleftmargin=0.5\linewidth]
+ \RLsetrandomseed{<value>}
+\end{Verbatim}
+Of course, this command is available under \LaTeX{}.
+
+\subsubsection{Loop}
+For complex material with several databases, it could be useful to use
+external loop such \cmd{\foreach} from \package{pgffor} package or
+\cmd{\multido} from \package{multido} package. In fact, this is a good
+idea but not the best! These commands (\cmd{\foreach} and
+\cmd{\multido}) work inside a group at each loop. With
+\package{randomlist} that doesn't work everytime since lists are
+restored at each loop. For example, you can't extract element of a
+list.
+
+It is possible to read the list with \cmd{\Get...Item}. In this case,
+you should probably use the command \Cmd{\CountList} to know the size
+of a list. This command takes two arguments: the list name and a macro
+to store the number of elements. As usual you give only the name of
+the macro (without the backslash). The big difference between extract
+and get is that with random reading, you can avoid to have twice (or
+more) the same element.
+
+A real example is too long to be inserted here. We give only the code
+source. The file \texttt{.tex} and the result \texttt{.pdf} are part
+of the package distribution. In this example, we use two databases:
+one for the pupils and the other one for the pythagorean triples. As
+we read randomly the pythagorean triples and as we won't the same test
+for two pupils, then we don't use the external loop described in the
+latter paragraph.
+
+\VerbatimInput[gobble=0, frame=none, numbers=left, xleftmargin=0pt,
+ xrightmargin=0pt]{test.tex}
+
+Be careful! When we extract triples inside the loop, we must be sure
+that there is more triples than pupils elsewhere an error about an
+empty list is raised.
+
+Lines 15, 16, 17 read the data bases and extract the title line from
+\texttt{pupils.dat}. After that, we enter in the main loop (lines~18
+to~60).
+
+At the beginning of the loop, we read the fields for the pupil (name,
+first name and note) and the three fields of the pythagorean triple
+(lines~20 to~26). It's here that we extract randomly a triple. Since
+it's an extraction, another pupil will have another triple.
+
+Lines 27 to 39 typeset the test and lines 40 to 59 typeset the answer
+to the test. We test the note of the pupil to decide the type of
+exercise: Pythagorean theorem to find the hypotenuse (easy) or
+Pythagorean theorem to find a side (less easy).
+
+\subsubsection{Internal}
+You can access directly to a list. It's not recommended but\dots
+
+If the list name is \texttt{LName} (pay attention to the letter case),
+then the length of the list is \cmd{\LName-len} and the $n$th element
+of the list (starting from zero) is \cmd{\LName-$n$}. When an element
+is a record with several fields, those fields are inside braces. For
+example the first element of list \texttt{Triples} (see last example)
+is: \cmd{\Triples-0}~$=$~\texttt{\{119\}\{120\}\{169\}}. As you can
+see, inside a list, the characters for separator field and for string
+delimiter don't exist.
+
+The authors don't see any situation where knowing internal is
+important. If some users have good idea about it then writing to the
+authors will be an appreciate initiative!
+
+\section{\LaTeX{} Lists}
+Package \package{randomlist} offers two other special commands which
+allow to build random lists.
+
+The first one is \Cmd{\RandomItemizeList} which build an itemize list
+with random placement of items. Each item is a group.\par\medskip
+
+\RLsetrandomseed{1}
+\begin{SideBySideExample}
+ \LaTeX{} is:
+ \RandomItemizeList
+ {magical}
+ {logical}
+ {practical}
+ {clinical}
+ {cynical}
+\end{SideBySideExample}
+\par\medskip
+
+The second command is for enumerate list. It is
+\Cmd{\RandomEnumerateList} and it acts like the previous
+one:\par\medskip
+
+\RLsetrandomseed{2}
+\begin{SideBySideExample}
+ \LaTeX{} is:
+ \RandomEnumerateList
+ {magical}
+ {logical}
+ {practical}
+ {clinical}
+ {cynical}
+\end{SideBySideExample}
+\par\medskip
+
+
+\newpage
+\newgeometry{left=4cm, right=2cm, top=2cm, bottom=2cm}
+\section{Package \package{randomlist} code}
+\DocInput{randomlist.dtx}
+\newpage
+\newgeometry{left=2cm, right=2cm, top=2cm, bottom=2cm}
+\PrintChanges
+\PrintIndex
+\newpage
+\appendix
+\fvset{gobble=0,frame=none,numbers=left,xleftmargin=0pt,xrightmargin=0pt}
+\section{File \texttt{pythagoras.dat}}
+\label{file-pythagoras}
+This file contains Pythagorean triples which have three digits. There
+isn't all these triple. In fact the triple are built with the famous
+formula $(u^2-v^2,2uv,u^2+v^2)$ with $u$ and $v$ positive integers
+such $u>v$. Here are only the hundred first triples with three
+digits.
+
+\VerbatimInput{pythagoras.dat}
+\newpage
+\section{File \texttt{pupils.dat}}
+\label{file-pupils}
+This file shows a first line which isn't a data line.
+
+\VerbatimInput{pupils.dat}
+\newpage
+\section{File \texttt{comets.dat}}
+\label{file-comets}
+This file use lines which aren't data lines and weird separator.
+
+\VerbatimInput{comets.dat}
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v0.1}{2013/05/03}{%
+% First release
+% }
+% \changes{v0.1a}{2013/05/06}{%
+% Fix bug about braces.
+% }
+% \changes{v0.1b}{2013/05/10}{%
+% Add \cmd{\initrandomlist}.
+% }
+% \changes{v1.0}{2015/12/27}{%
+% randomlist completly rewritten.
+% }
+% \changes{v1.1}{2016/01/16}{%
+% Tons of improvements due to Christian Tellechea.
+% }
+% \changes{v1.2}{2016/07/13}{%
+% First public release.
+% }
+% \changes{v1.3}{2017/09/11}{%
+% Random operations are \global.
+% }
+% \CheckSum{0}
+% \iffalse
+%<*latex>
+% \fi
+% \subsection{\LaTeX's wrapper}
+% \subsubsection{Introduction}
+% We start with release number and date.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{randomlist}
+ [2017/09/11 v1.3 Package for random list (JCC, CT)]
+% \end{macrocode}
+% \LaTeX's wrapper has the possibility to use option. There is only
+% one option: the seed one. It requires the \package{(x)keyval} package.
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+\DeclareOptionX{seed}{\gdef\RL@seed{#1}}
+\ExecuteOptions{seed=0}
+\ProcessOptionsX
+% \end{macrocode}
+% We can now call the real randomlist code!
+% \begin{macrocode}
+\input{randomlist}
+% \end{macrocode}
+% \subsubsection{\LaTeX{} lists}
+% Obviously, \LaTeX{} lists are useful only with \LaTeX{}!
+% \begin{macro}{\RandomItemizeList}
+% Build an itemize list with random placement of items.
+% \begin{macrocode}
+\NewList{*RandomList*}
+\def\RandomItemizeList{%
+ \def\RL@Type{itemize}%
+ \ClearList{*RandomList*}%
+ \@ifnextchar\bgroup{\@randomlist}{\@@randomlist}%
+}
+\long\def\@randomlist#1{%
+ \InsertRandomItem{*RandomList*}{#1}%
+ \@ifnextchar\bgroup{\@randomlist}{\@@randomlist}%
+}
+\def\@@randomlist{%
+ \long\edef\RL@body{\noexpand\begin{\RL@Type}}%
+ \RLfor \RL@var = 0 to \RL@lenof{*RandomList*}-1 \do{%
+ \long\edef\RL@body{%
+ \unexpanded\expandafter{\RL@body}%
+ \unexpanded\expandafter{%
+ \expandafter\item \csname *RandomList*-\RL@var\endcsname
+ }%
+ }%
+ }%
+ \long\edef\RL@body{\unexpanded\expandafter{\RL@body}\noexpand\end{\RL@Type}}%
+ \RL@body
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RandomEnumerateList}
+% Like |randomitemize| but for enumerate list.
+% \begin{macrocode}
+\newcommand*\RandomEnumerateList{%
+ \def\RL@Type{enumerate}
+ \ClearList{*RandomList*}%
+ \@ifnextchar\bgroup{\@randomlist}{\@@randomlist}
+}
+% \end{macrocode}
+% \end{macro}
+% That's all for the \LaTeX's wrapper!
+% \iffalse
+%</latex>
+%<*tex>
+% \fi
+% \subsection{\TeX{} code}
+% At the beginning, we have to deal with multiple call and |@|'s
+% catcode.
+% \begin{macrocode}
+\csname RandomListLoaded\endcsname
+\let\RandomListLoaded\endinput
+\edef\RLAtCatcode{\the\catcode`\@}
+\catcode`\@=11
+% \end{macrocode}
+% If we aren't under \LaTeX{} then we need some \LaTeX{}
+% commands. It's just a copy of \LaTeX{}$2\epsilon$ code.
+% \begin{macrocode}
+\ifx\@ifnextchar\@undefined
+% \end{macrocode}
+% Definition of |\@ifnextchar|.
+% \begin{macrocode}
+ \long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+ \def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+ \def\:{\let\@sptoken= } \: %
+ \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}
+\fi
+% \end{macrocode}
+% Definition of |\PackageError| and some \LaTeX{} functions when
+% running under \TeX{}.
+% \begin{macrocode}
+\ifx\PackageError\@undefined
+ \long\def\@firstoftwo#1#2{#1}
+ \long\def\@secondoftwo#1#2{#2}
+ \def\@nnil{\@nil}%
+ \alloc@7\write\chardef\sixt@@n\@unused
+ \def\typeout#1{\immediate\write\@unused{#1}}%
+ \def\@spaces{\space\space\space\space}
+ \def\PackageError#1#2#3{%
+ \begingroup
+ \newlinechar`\^^J
+ \edef\RL@temp{#3}%
+ \expandafter\errhelp\expandafter{\RL@temp}%
+ \typeout{%
+ #1 error. \space See User's Manual for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{#2}%
+ \endgroup
+ }
+\fi
+% \end{macrocode}
+% We check if we work with an engine which contain at least
+% e\TeX{}.
+% \begin{macrocode}
+\ifx\numexpr\@undefined
+ \begingroup
+ \newlinechar`\^^J
+ \errhelp{Run under etex, pdftex, xetex, luatex, ... but not under
+ tex}%
+ \typeout{%
+ randomlist error. \space See User's Manual for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{You can't use randomlist under tex without etex extension.}%
+ \endgroup
+\fi
+% \end{macrocode}
+% \begin{macro}{\@gobble}
+% Redefine |\@gobble| if needed.
+% \begin{macrocode}
+\ifx\@gobble\@undefined
+ \long\def\@gobble#1{}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@addtomacro}
+% We needs to add some code to some macros sometimes.
+% \begin{macrocode}
+\def\RL@addtomacro#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@ifempty}
+% Test if something is empty. Execute code according to the answer.
+% \begin{macrocode}
+\def\RL@ifempty#1{%
+ \ifcat\relax\detokenize{#1}\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% PDF\LaTeX, and X$_\mathrm{E}$\TeX know the primitives
+% |\pdfsetrandomseed| and |\pdfuniformedeviate| but lua\TeX{} didn't
+% know those primitives. Then we have to process ``by hand''!
+% \begin{macro}{\RLsetrandomseed}
+% We define the macro which give the initial seed. If the argument is
+% zero, the value is a mixture of actual time, day, month and year. If
+% the argument is nonzero, we process a new randomseed.
+%
+% The actual random number is stored in |\RL@random|.
+% \begin{macrocode}
+\newcount\RL@random
+\newcount\RL@random@a
+\newcount\RL@random@b
+\def\RLsetrandomseed#1{%
+ \ifnum#1=0
+ \global\RL@random \numexpr \time + \year * \month * \day \relax
+ \else
+ \global\RL@random \numexpr \ifnum#1<0 -\fi#1 \relax
+ \fi
+}
+% \end{macrocode}
+% If |\RL@seed| exists -- that is, if we run under \LaTeX{} -- we process
+% the seed (option of \LaTeX{} package). Otherwise, we use the zero
+% value.
+% \begin{macrocode}
+\ifx\RL@seed\@undefined
+ \RLsetrandomseed{0}
+\else
+ \RLsetrandomseed{\RL@seed}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@nextrand}
+% Process the next random number using Linear Congruentiel Generator
+% with Shrage's metthod.
+% \begin{macrocode}
+\def\RL@nextrand{%
+% \end{macrocode}
+% Use the LCG with :
+% \[x_{n+1} = 7^5 \times x_n \pmod{2^{31}-1}.\]
+% For that we take:
+% \begin{itemize}
+% \item $7^5=16807$;
+% \item $2^{31}-1 = 2147483647$;
+% \item $q = \mathrm{E}\left(\frac{2^{31}-1}{7^5}\right)=127773$;
+% \item $r = 2^{31}-1 \pmod{7^5} = 2836$.
+% \end{itemize}
+% Then:
+% \[x_{n+1} = 7^5(x_n \pmod{q}) - r\times\mathrm{E}\left(\frac{x_n}{q}\right).\]
+% If $x_{n+1} < 0$ then $x_{n+1} = x_{n+1} + 2^{31}-1$
+% \begin{macrocode}
+ \global\RL@random@a=\RL@random
+ \global\divide\RL@random@a 127773
+ \global\RL@random@b=\RL@random@a
+ \global\multiply\RL@random@a -2836
+ \global\multiply\RL@random@b -127773
+ \global\advance\RL@random\RL@random@b
+ \global\multiply\RL@random 16807
+ \global\advance\RL@random\RL@random@a
+% \end{macrocode}
+% If random number is negative add $2^{31}-1$.
+% \begin{macrocode}
+ \ifnum\RL@random<0
+ \global\advance\RL@random 2147483647
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RLuniformdeviate}
+% Use |\RL@nextrand| to calculate a random integer between 0
+% (inclusive) and |#1| (exclusive). Store the result in macro |#2|.
+% \begin{macrocode}
+\def\RLuniformdeviate#1#2{%
+% \end{macrocode}
+% Compute the next random number |\RL@random|.
+% \begin{macrocode}
+ \RL@nextrand
+% \end{macrocode}
+% Compute $|\RL@random| \pmod{\mathtt{\string#1}}$.
+% \begin{macrocode}
+ \global\RL@random@a=\RL@random
+ \global\RL@random@b=\RL@random
+ \global\divide\RL@random@a \numexpr#1\relax
+ \global\RL@random@b \numexpr\RL@random@b - \RL@random@a * (#1)\relax
+ \expandafter\edef\csname #2\endcsname{\number\RL@random@b}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Introduction and first commands}
+% \begin{macro}{\@ifIsList}
+% Test if a list exists and then executes true code or false code. For
+% that the list of list names is stored inside the token register
+% |\@ListOfList|. Each name is separed to the next one by a ``|\sep|''
+% markup.
+% \begin{macrocode}
+\newtoks\@ListOfList
+% \end{macrocode}
+% |\@ifIsList| test if the list |#1| exists. If yes then it executes the
+% next argument else it executes the third argument. Test must be
+% executed on an expanded argument.
+% \begin{macrocode}
+\def\@ifIsList#1{%
+ \expandafter\@ifIsList@\expandafter{#1}%
+}
+\def\@ifIsList@#1{%
+ \def\@@ifIsList##1#1\sep##2\@@ifIsList{%
+ \csname @\ifx\empty##2\empty second\else first\fi oftwo\endcsname
+ }%
+ \expandafter\@@ifIsList\the\@ListOfList#1\sep\@@ifIsList
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@lenof}
+% Shortcut allowing to get the len of a list
+% \begin{macrocode}
+\def\RL@lenof#1{\csname #1-len\endcsname}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@ifIsListNotEmpty}
+% Test if a list exist and isn't empty. If double yes then it executes
+% the second argument else it executes the third one.
+% \begin{macrocode}
+\newif\if@EmptyListFound
+\def\@ifIsListNotEmpty#1{%
+ \global\@EmptyListFoundfalse
+ \@ifIsList{#1}{%
+ \ifnum\RL@lenof{#1}=0
+ \global\@EmptyListFoundtrue
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+ \@secondoftwo
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@NoListError}
+% Error for an unexisting list or an empty list.
+% \begin{macrocode}
+\def\@NoListError#1{%
+ \if@EmptyListFound
+ \@EmptyListError{#1}%
+ \global\@EmptyListFoundfalse
+ \else
+ \PackageError{randomlist}%
+ {List #1 doesn't exist}%
+ {Maybe you mistyped the list name?}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@EmptyListError}
+% Error for an empty list.
+% \begin{macrocode}
+\def\@EmptyListError#1{%
+ \if@EmptyListFound
+ \PackageError{randomlist}%
+ {List #1 is empty}%
+ {Ask yourself why this list is empty.}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@OutOfRangeError}
+% Error for index out of range.
+% \begin{macrocode}
+\def\@OutOfRangeError#1#2{%
+ \PackageError{randomlist}%
+ {Index #2 is greater than last index of list #1}%
+ {There aren't enough elements in the list.}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@nameldef}
+% |\long| version of |\@namedef|.
+% \begin{macrocode}
+\long\def\RL@nameldef#1{%
+ \long\expandafter\def\csname #1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@nameledef}
+% All the macros in \package{randomlist} are long ones. It's
+% useless for now since there isn't argument but it's a precaution
+% for the future.
+%
+% |\long| version of |\@nameedef|.
+% \begin{macrocode}
+\long\def\RL@nameledef#1{%
+ \long\expandafter\edef\csname #1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@namelgdef}
+% |\long| version of |\@namegdef|.
+% \begin{macrocode}
+\long\def\RL@namelgdef#1{%
+ \long\expandafter\gdef\csname #1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@namelxdef}
+% |\long| version of |\@namexdef|.
+% \begin{macrocode}
+\long\def\RL@namelxdef#1{%
+ \long\expandafter\xdef\csname #1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@let}
+% |\let| between two macros (with just the names)
+% \begin{macrocode}
+\def\RL@let#1#2{%
+ \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RLfor}
+% Loop without group. Syntax is |\RLfor<var>=<begin>to<end>\do|
+% \begin{macrocode}
+\long\def\RL@doafterfi#1\fi{\fi#1}
+\def\RLfor#1=#2to#3\do{%
+% \end{macrocode}
+% Set the variable.
+% \begin{macrocode}
+ \edef#1{\number\numexpr#2}%
+% \end{macrocode}
+% Set |\RL@sgncomp| to |<+| or |>-| if variable is greater or less
+% than end
+% \begin{macrocode}
+ \edef\RL@sgncomp{\ifnum#1<\numexpr#3\relax>+\else<-\fi}%
+% \end{macrocode}
+% Call auxiliary macro with five parameters:
+% \begin{macrocode}
+ \expandafter\RLfor@i
+% \end{macrocode}
+% First argument (sub-recursive macro name build with the <variable>
+% name).
+% \begin{macrocode}
+ \csname RLfor@ii@\string#1\expandafter\endcsname\expandafter
+% \end{macrocode}
+% Second argument (max).
+% \begin{macrocode}
+ {\number\numexpr#3\expandafter}%
+% \end{macrocode}
+% Third and fourth arguments since |\RL@sgncomp| is ``|<+|'' or ``|>-|''.
+% \begin{macrocode}
+ \RL@sgncomp
+% \end{macrocode}
+% fifth argument (variable name).
+% \begin{macrocode}
+ #1%
+}
+% \end{macrocode}
+% Auxiliary macro:
+% \begin{itemize}
+% \item |#1| recursive macro name (like |\RLfor@ii@<var>|;
+% \item |#2| max integer;
+% \item |#3| ``|<|'' or ``|>|'';
+% \item |#4| ``|+|'' or ``|-|'' (incrementation or decrementation);
+% \item |#5| variable name;
+% \item |#6| code to execute.
+% \end{itemize}
+% \begin{macrocode}
+\long\def\RLfor@i#1#2#3#4#5#6{%
+% \end{macrocode}
+% Define the recursive submacro.
+% \begin{macrocode}
+ \def#1{%
+% \end{macrocode}
+% While <var> isn't greater than max
+% \begin{macrocode}
+ \unless\ifnum#5#3#2\relax
+% \end{macrocode}
+% In order to have a tail recursion.
+% \begin{macrocode}
+ \RL@doafterfi{%
+% \end{macrocode}
+% Execute the loop code.
+% \begin{macrocode}
+ #6%
+% \end{macrocode}
+% Increment <variable> by one.
+% \begin{macrocode}
+ \edef#5{\number\numexpr#5#41\relax}%
+% \end{macrocode}
+% And repeat.
+% \begin{macrocode}
+ #1%
+ }%
+ \fi
+ }%
+% \end{macrocode}
+% submacro recursive call.
+% \begin{macrocode}
+ #1%
+}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{General list commands}
+% \begin{macro}{\NewList}
+% The main structure is the list. A list |L| is a collection of macros
+% |L-<n>| where |<n>| is an index (starting from zero) and a macro
+% |L-len| which store the len of the list, i.e. the last index plus
+% one.
+%
+% When a new list is created, its name is stored in |@ListOfList|. A
+% macro is also created for accessing data.
+% \begin{macrocode}
+\def\NewList#1{%
+ \@ifIsList{#1}{%
+% \end{macrocode}
+% If a list with the same name exists then raise an error.
+% \begin{macrocode}
+ \PackageError{randomlist}%
+ {List #1 already exists}%
+ {Use \string\ClearList.}%
+ }%
+ {%
+% \end{macrocode}
+% When a list |MyName| is created, the macros |\MyName| and
+% |\MyName-len| are created and there will be macros |\MyName-<n>| to
+% store data. Then \package{randomlist} prohibit the name |MyName| for
+% a list if the macro |\MyName| already exists.
+% \begin{macrocode}
+ \ifcsname #1\endcsname
+ \PackageError{randomlist}%
+ {Command \csname#1\endcsname already exists}%
+ {Creating list #1 defines a \csname#1\endcsname command.}%
+ \else
+% \end{macrocode}
+% If everything is fine, create the len macro which store the len of
+% the list (starting with 0);
+% \begin{macrocode}
+ \RL@nameldef{#1-len}{0}%
+% \end{macrocode}
+% append the list name to the list of names |\@ListOfList|;
+% \begin{macrocode}
+ \@ListOfList\expandafter{\the\@ListOfList#1\sep}%
+% \end{macrocode}
+% and create the |\Mylist[<index>]| macro.
+% \begin{macrocode}
+ \expandafter\def\csname #1\endcsname[##1]{%
+% \end{macrocode}
+% If index is to big, the macro is |\relax| (a sort of undefined
+% without error).
+% \begin{macrocode}
+ \ifnum##1>\csname#1-len\endcsname
+ \relax
+ \else
+ \csname #1-##1\endcsname
+ \fi
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ClearList}
+% |\ClearList| erases a list. It sets the length to zero. There is no
+% need to erase all the |\Mylist-<index>| macros.
+% \begin{macrocode}
+\def\ClearList#1{%
+ \@ifIsList{#1}{%
+% \end{macrocode}
+% Clear the list if it exists.
+% \begin{macrocode}
+ \RL@nameldef{#1-len}{0}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CopyList}
+% Copy list |#1| in list |#2|.
+% \begin{macrocode}
+\def\CopyList#1#2{%
+ \@ifIsList{#1}{%
+ \@ifIsList{#2}{%
+ \RL@let{#2-len}{#1-len}%
+ \ifnum\RL@lenof{#1}>0
+ \RLfor\RL@iter=0 to \RL@lenof{#1}-1 \do{%
+ \RL@let{#2-\RL@iter}{#1-\RL@iter}%
+ }%
+ \fi
+ }%
+ {\@NoListError{#2}}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\InsertList}
+% Insert List |#3| to the list |#1| starting at index |#2|.
+% \begin{macrocode}
+\def\InsertList#1#2#3{%
+ \@ifIsList{#1}{%
+ \@ifIsList{#3}{%
+ \ifnum #2>\RL@lenof{#1}
+ \@OutOfRangeError{#1}{#2}%
+ \else
+ \ShiftList{#1}{#2}{\RL@lenof{#3}}%
+ \ifnum\RL@lenof{#3}>0
+ \RLfor\RL@iter=0 to \RL@lenof{#3}-1 \do{%
+ \RL@let{#1-\number\numexpr\RL@iter+#2}{#3-\RL@iter}%
+ }%
+ \fi
+ \fi
+ }%
+ {\@NoListError{#3}}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ShowList}
+% Macro for debugging purpose. First we declare some scratch count
+% registers.
+% \begin{macrocode}
+\newcount\RL@counti
+\newcount\RL@countii
+\newcount\RL@countiii
+\def\ShowList#1{%
+% \end{macrocode}
+% We show a list only if this list exists!
+% \begin{macrocode}
+ \@ifIsList{#1}{%
+ \ifhmode\par\noindent\fi
+% \end{macrocode}
+% Typeset |BEGIN{MyList}|. As we typeset braces, we have to use
+% ttfamily, then put the material inside a group.
+% \begin{macrocode}
+ \begingroup
+ \ifdefined\ttfamily\ttfamily\else\tt\fi
+ BEGIN\detokenize{{#1}}
+% \end{macrocode}
+% Typeset the number of elements.
+% \begin{macrocode}
+ (\ifcase\RL@lenof{#1}
+ empty list%
+ \or
+ 1 element%
+ \else
+ \RL@lenof{#1} elements%
+ \fi)\par
+% \end{macrocode}
+% Loop to typeset element one after one.
+% \begin{macrocode}
+ \ifnum\RL@lenof{#1}>0
+ \parindent=1em
+ \RLfor\RL@iter=0 to \RL@lenof{#1}-1 \do {%
+ #1[\RL@iter] = \expandafter\RL@meaning\csname
+ #1-\RL@iter\endcsname
+ \par
+ }%
+ \fi
+% \end{macrocode}
+% Typeset |END{MyList}|.
+% \begin{macrocode}
+ \noindent
+ END\detokenize{{#1}}\par
+ \endgroup
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RL@meaning}
+% Like \TeX{} primitive |\meaning| without prefix |(\long) macro:->|:
+% \begin{macrocode}
+\def\RL@meaning#1{\expandafter\RL@meaningi\meaning#1}
+\expandafter\def\expandafter\RL@meaningi\expandafter#\expandafter1\string>{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CountList}
+% Count the number of elements in the list |#1|. Store it in |#2|.
+% \begin{macrocode}
+\def\CountList#1#2{%
+ \@ifIsList{#1}%
+ {\RL@nameledef{#2}{\RL@lenof{#1}}}%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Writing and reading list commands}
+% \begin{macro}{\ShiftList}
+% Shift the elements of a list left or right. The syntax is:
+%
+% |\ShiftList{list name}{start}{shift}|
+%
+% where |start| is the first index to shift and |shift| the number of
+% shifting. If |shift| is positive, it is a right shift. If |shitf| is
+% negative, it is a left shift.
+% \begin{macrocode}
+\def\ShiftList#1#2#3{%
+ \@ifIsList{#1}%
+ {%
+% \end{macrocode}
+% No action if |shift| is zero!
+% \begin{macrocode}
+ \unless\ifnum#3=0
+% \end{macrocode}
+% If |<start>| is negative, raise an error.
+% \begin{macrocode}
+ \ifnum\numexpr#2<0
+ \PackageError{randomlist}%
+ {Negative index number}%
+ {Index must be equal or greater than 0}%
+ \else
+% \end{macrocode}
+% If |<start>| is greater than the lists length, raise an error.
+% \begin{macrocode}
+ \ifnum\numexpr#2>\RL@lenof{#1}\relax
+ \PackageError{randomlist}%
+ {Index \number\numexpr #2\relax\space too big
+ (<=\RL@lenof{#1})}%
+ {Index must be equal or smaller than length of
+ the list}%
+ \else
+% \end{macrocode}
+% Here we have $0 \leq |<start>| \leq |len|(|<list>|)$.
+%
+% If |<shift>| is positive, we process a right shifting: it's alway
+% possible.
+% \begin{macrocode}
+ \ifnum\numexpr#3>0
+ \RLfor\RL@iter = \RL@lenof{#1} to #2 \do{%
+ \RL@let{#1-\number\numexpr\RL@iter+#3}{#1-\RL@iter}%
+ }%
+% \end{macrocode}
+% Empty the items out of shift part.
+% \begin{macrocode}
+ \RLfor\RL@iter = #2 to #2 + #3 - 1 \do{%
+ \RL@nameldef{#1-\RL@iter}{}%
+ }%
+ \else
+ \ifnum-#3>\numexpr#2\relax
+% \end{macrocode}
+% If the negative shifting is to big for index |#2| then raise an error.
+% \begin{macrocode}
+ \PackageError{randomlist}%
+ {Negative shift to big}%
+ {When negative, shift must not be greater than index}%
+ \else
+% \end{macrocode}
+% Elsewhere, process the left shifting.
+% \begin{macrocode}
+ \RLfor\RL@iter=#2 to \RL@lenof{#1} \do{%
+ \RL@let{#1-\number\numexpr\RL@iter+#3}{#1-\RL@iter}%
+ }%
+ \fi
+ \fi
+% \end{macrocode}
+% Set the list length for both positive and negative shifting.
+% \begin{macrocode}
+ \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1} + #3}%
+ \fi\fi\fi
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\InsertLastItem}
+% Add an element |#2| at the end of the list |#1|.
+% \begin{macrocode}
+\long\def\InsertLastItem#1#2{%
+ \@ifIsList{#1}
+ {%
+ \RL@nameldef{#1-\RL@lenof{#1}}{#2}%
+ \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1}+1}%
+ }
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\InsertFirstItem}
+% Add an element |#2| at the beginning of the list |#1|. For that,
+% shift right all the element and then put |#3| at |L[0]|.
+% \begin{macrocode}
+\long\def\InsertFirstItem#1#2{%
+ \InsertItem{#1}{0}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\InsertItem}
+% Add an element |#3| at the position |#2| of the list |#1|. For that,
+% pass from |L[0]| to |L[#2-1]| then shift right from |L[#2]| to
+% |L[len]| and finally put |#3| at |L[#2]|. To do this, we must have
+% |#2| $\geq$ |L-len|.
+% \begin{macrocode}
+\long\def\InsertItem#1#2#3{%
+ \@ifIsList{#1}%
+ {%
+ \ShiftList{#1}{#2}{1}%
+ \RL@nameldef{#1-#2}{#3}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\InsertRandomItem}
+% Insert element |#2| in a random position of list |#1|.
+% \begin{macrocode}
+\long\def\InsertRandomItem#1#2{%
+ \@ifIsList{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}+1}{RL@temp}%
+ \InsertItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ExtractFirstItem}
+% Extract the first element of list |#1| and store it in |#2|.
+% \begin{macrocode}
+\def\ExtractFirstItem#1#2{%
+ \@ifIsList{#1}%
+ {%
+ \ExtractItem{#1}{0}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ExtractLastItem}
+% Extract the last element of list |#1| and store it in |#2|.
+% \begin{macrocode}
+\def\ExtractLastItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RL@let{#2}{#1-\number\numexpr\RL@lenof{#1}-1}%
+ \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1}-1}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ExtractItem}
+% Extract the element at the position |#2| of the list |#1| and store
+% it in |#3|.
+% \begin{macrocode}
+\def\ExtractItem#1#2#3{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RL@let{#3}{#1-#2}%
+ \ShiftList{#1}{#2+1}{-1}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ExtractRandomItem}
+% Extract element in a random position of list |#1| and store it in |#2|.
+% \begin{macrocode}
+\def\ExtractRandomItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
+ \ExtractItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ExtractList}
+% |ExtractList| extract a list from a list. There are four arguments:
+% \begin{itemize}
+% \item |#1| is the list from which the extraction is made;
+% \item |#2| is the starting index of extraction;
+% \item |#3| is the ending index of extraction;
+% \item |#4| is the list which receive the extracted list.
+% \end{itemize}
+% \begin{macrocode}
+\def\ExtractList#1#2#3#4{%
+% \end{macrocode}
+% In order to do something, |#1| and |#2| must be lists, and indexes
+% |#2| and |#3| must be inside list |#1|.
+% \begin{macrocode}
+ \@ifIsList{#1}{%
+ \@ifIsList{#4}{%
+ \ifnum#2<\RL@lenof{#1}%
+ \ifnum#3<\RL@lenof{#1}%
+ \ifnum#2>#3\relax
+% \end{macrocode}
+% If $\text{start} > \text{end}$ we build an empty list.
+% \begin{macrocode}
+ \RL@nameldef{#4-len}{0}%
+ \else
+% \end{macrocode}
+% If $\text{start} \leq \text{end}$ we build a real extracted list. We
+% have to be careful because |\ExtractItem| uses the loop variable
+% |\RL@iter|. Then we use another loop variable.
+% \begin{macrocode}
+ \RLfor\RL@iterextract=0 to #3 - #2 \do{%
+ \RL@let{#4-\RL@iterextract}{#1-#2}%
+ \ExtractItem{#1}{#2}{RL@temp}%
+ }%
+ \RL@nameledef{#4-len}{\number\numexpr #3 - #2 + 1}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#3}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#2}%
+ \fi
+ }%
+ {\@NoListError{#4}}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\GetFirstItem}
+% Get the first element of list |#1| and store it in |#2|.
+% \begin{macrocode}
+\def\GetFirstItem#1#2{%
+ \GetItem{#1}{0}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\GetLastItem}
+% Get the last element of list |#1| and store it in |#2|.
+% \begin{macrocode}
+\def\GetLastItem#1#2{%
+ \GetItem{#1}{\number\numexpr\RL@lenof{#1}-1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\GetItem}
+% Get the element of rank |#2| of list |#1| and store it in |#3|.
+% \begin{macrocode}
+\def\GetItem#1#2#3{%
+ \@ifIsListNotEmpty{#1}
+ {%
+ \ifnum\numexpr\RL@lenof{#1}-1-#2<0
+ \@OutOfRangeError{#1}{#2}%
+ \else
+ \RL@let{#3}{#1-#2}%
+ \fi
+ }
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\GetRandomItem}
+% Get element in a random position of list |#1| and store it in |#2|.
+% \begin{macrocode}
+\def\GetRandomItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
+ \GetItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\GetList}
+% |\GetList| copy a sub-list from a list. There are four arguments:
+% \begin{itemize}
+% \item |#1| is the list from which the reading is made;
+% \item |#2| is the starting index of extraction;
+% \item |#3| is the ending index of extraction;
+% \item |#4| is the list which receive the readen items.
+% \end{itemize}
+% \begin{macrocode}
+\def\GetList#1#2#3#4{%
+% \end{macrocode}
+% In order to do something, |#1| and |#2| must be lists, and indexes
+% |#2| and |#3| must be inside list |#1|.
+% \begin{macrocode}
+ \@ifIsList{#1}{%
+ \@ifIsList{#4}{%
+ \ifnum#2<\RL@lenof{#1}%
+ \ifnum#3<\RL@lenof{#1}%
+ \ifnum#2>#3\relax
+% \end{macrocode}
+% If $\text{start} > \text{end}$ we build an empty list.
+% \begin{macrocode}
+ \RL@nameldef{#4-len}{0}%
+ \else
+% \end{macrocode}
+% If $\text{start} \leq \text{end}$ we build a real extracted list.
+% \begin{macrocode}
+ \RLfor\RL@iter=#2 to #3 \do{%
+ \RL@let{#4-\number\numexpr \RL@iter - #2}{#1-\RL@iter}%
+ }%
+ \RL@nameledef{#4-len}{\number\numexpr #3 - #2 + 1}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#3}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#2}%
+ \fi
+ }%
+ {\@NoListError{#4}}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetFirstItem}
+% Set the first element of list |#1| with value |#2|.
+% \begin{macrocode}
+\long\def\SetFirstItem#1#2{%
+ \SetItem{#1}{0}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetLastItem}
+% Set the last element of list |#1| with value |#2|.
+% \begin{macrocode}
+\long\def\SetLastItem#1#2{%
+ \SetItem{#1}{\number\numexpr\RL@lenof{#1}-1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetItem}
+% Set the |#2| element of list |#1| with value |#3|.
+% \begin{macrocode}
+\long\def\SetItem#1#2#3{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \ifnum\numexpr\RL@lenof{#1}-1-#2<0
+ \@OutOfRangeError{#1}{#2}%
+ \else
+ \RL@nameldef{#1-#2}{#3}%
+ \fi
+ }%
+ {\@NoListError{#1}}%%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetRandomItem}
+% Set element in a random position of list |#1| with value |#2|.
+% \begin{macrocode}
+\long\def\SetRandomItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
+ \SetItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetList}
+% |\SetList| allow to give multiple values to a list. This function
+% acts like a repetition of |\InsertLastItem|.
+% \begin{macrocode}
+\def\SetList#1#2{%
+ \@ifIsList{#1}%
+ {%
+ \ClearList{#1}%
+ \def\RL@name{#1}%
+ \RL@setlist#2,\@nil,%
+ }%
+ {\@NoListError{#1}}%
+}
+\long\def\RL@setlist#1,{%
+ \def\RL@arg{#1}%
+ \unless\ifx\RL@arg\@nnil
+ \InsertLastItem{\RL@name}{#1}%
+ \expandafter\RL@setlist
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Loop on list}
+% \begin{macro}{\ForEachFirstItem}
+% |\ForEachFirstItem| typesets |#3| for each element of the list |#1|
+% extracting the actual first element (stored in |#2|).
+% \begin{macrocode}
+\long\def\ForEachFirstItem#1#2#3{%
+ \begingroup
+ \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
+ \ExtractFirstItem{#1}{#2}%
+ #3%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ForEachLastItem}
+% |\ForEachLastItem| typesets |#3| for each element of the list |#1|
+% extracting the actual last element (stored in |#2|).
+% \begin{macrocode}
+\long\def\ForEachLastItem#1#2#3{%
+ \begingroup
+ \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
+ \ExtractLastItem{#1}{#2}%
+ #3%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ForEachRandomItem}
+% |\ForEachRandomItem| typesets |#3| for each element of the list |#1|
+% extracting randomly an element (stored in |#2|).
+% \begin{macrocode}
+\long\def\ForEachRandomItem#1#2#3{%
+ \begingroup
+ \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
+ \ExtractRandomItem{#1}{#2}%
+ #3%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Database}
+% \begin{macro}{\ReadFieldItem}
+% Macro |\ReadFieldItem| read a field in a record.
+%
+% A record is a sequence of groups, each group is a field.
+% \begin{itemize}
+% \item |#1| is the record (sequence of groups;
+% \item |#2| is the index of item (starting at zero);
+% \item |#3| is the macro name which store the field.
+% \end{itemize}
+% \begin{macrocode}
+\long\def\ReadFieldItem#1#2#3{%
+% \end{macrocode}
+% Store the field's index.
+% \begin{macrocode}
+ \RL@counti #2\relax
+% \end{macrocode}
+% Call the recursive macro
+% \begin{macrocode}
+ \expandafter\RL@ReadFieldItem#1\@nil
+% \end{macrocode}
+% Store the result in macro |\#3|.
+% \begin{macrocode}
+ \expandafter\let\csname#3\endcsname\RL@temp
+}
+% \end{macrocode}
+% In fact the first recusive call check for a left brace. A record
+% must contain at least one field otherwise an error message is
+% raised.
+% \begin{macrocode}
+\long\def\RL@ReadFieldItem{%
+ \@ifnextchar\bgroup{\RL@@ReadFieldItem}{\RL@@ReadFieldItemError}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\RL@@ReadFieldItem#1{%
+ \ifnum\RL@counti=\z@
+ \def\RL@temp{#1}%
+ \expandafter\RL@@ReadFieldItemEnd
+ \else
+ \advance\RL@counti \m@ne
+ \expandafter\RL@ReadFieldItem
+ \fi
+}
+\long\def\RL@@ReadFieldItemEnd#1\@nil{}
+\long\def\RL@@ReadFieldItemError#1\@nil{%
+ \PackageError{randomlist}%
+ {There aren't enough fields in the record}%
+ {Pay attention that field number starts from zero.}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ReadFileList}
+% First, we look for special delimiters for fields and strings. By
+% default, the delimiter for fields is the comma and the delimiter for
+% string is the double quote.
+% \begin{macrocode}
+\def\RL@SetDelimiters#1#2#3\@nil{%
+% \end{macrocode}
+% \begin{itemize}
+% \item argument |#1| is the field separator;
+% \item argument |#2| is the string delimiter;
+% \item argument |#3| is the remainder to ignore.
+% \end{itemize}
+% \begin{macrocode}
+ \def\RL@markstrings##1{%
+ \let\RL@accu\empty
+ \expandafter\RL@markstrings@i##1#2\@nil#2%
+ \let##1=\RL@accu
+ }%
+ \def\RL@markstrings@i##1#2##2#2{%
+ \RL@addtomacro\RL@accu{##1}%
+ \def\RL@current{##2}%
+ \unless\ifx\@nnil\RL@current
+ \RL@addtomacro\RL@accu{\RL@string{##2}}%
+ \expandafter\RL@markstrings@i
+ \fi
+ }%
+ \def\RL@unmarkstrings##1{%
+ \let\RL@accuA\empty
+ \expandafter\RL@unmarkstrings@i##1\RL@string\@nil
+ \let##1=\RL@accuA
+ }%
+ \def\RL@unmarkstrings@i##1\RL@string##2{%
+ \RL@addtomacro\RL@accuA{##1}%
+ \def\RL@current{##2}%
+ \unless\ifx\@nnil\RL@current
+ \RL@ifempty{##2}%
+ {\RL@addtomacro\RL@accuA{#2}}%
+ {\RL@addtomacro\RL@accuA{##2}}%
+ \expandafter\RL@unmarkstrings@i
+ \fi
+ }%
+ \def\RL@parsefields##1{%
+ \let\RL@accu\empty
+ \expandafter\RL@parsefields@i##1#1\@nil#1%
+ \let##1=\RL@accu
+ }%
+ \def\RL@parsefields@i##1#1{%
+ \def\RL@current{##1}%
+ \unless\ifx\@nnil\RL@current
+ \RL@unmarkstrings\RL@current
+ \RL@removefirstspaces\RL@current
+ \RL@removelastspaces \RL@current
+ \expandafter\RL@addtomacro\expandafter\RL@accu\expandafter
+ {\expandafter{\RL@current}}%
+ \expandafter\RL@parsefields@i
+ \fi
+ }%
+}
+% \end{macrocode}
+% The macro |\ReadFileList| uses a handle for the reading file. it
+% needs also a macro to detect |\par|
+% \begin{macrocode}
+\newread\RL@hdle
+\def\@ppar{\par}
+% \end{macrocode}
+% At first, |\ReadFileList| check for an optionnal argument giving
+% delimiters. By default, delimiters are comma for field separator and
+% double quote for string delimiter.
+% \begin{macrocode}
+\def\ReadFileList{\@ifnextchar[{\@ReadFileList}{\@ReadFileList[,"]}}
+% \end{macrocode}
+% \begin{itemize}
+% \item |#1| contains the delimiters;
+% \item |#2| is the data base name;
+% \item |#3| is the file name.
+% \end{itemize}
+% \begin{macrocode}
+\def\@ReadFileList[#1]#2#3{%
+ \openin \RL@hdle = #3
+ \ifeof\RL@hdle
+ \PackageError{randomlist}%
+ {File #3 doesn't exist}%
+ {Verify its name, its extension, its location, its permissions.}%
+ \else
+% \end{macrocode}
+% If the optionnal argument is empty then raise an error and take the
+% comma and the double quote instead.
+% \begin{macrocode}
+ \RL@ifempty{#1}%
+ {%
+ \PackageError{randomlist}
+ {Optional argument empty: [,"] inserted}
+ {Do not leave an optional argument empty}%
+ \RL@SetDelimiters,"\@nil
+ }
+% \end{macrocode}
+% Else add double quote to for security.
+% \begin{macrocode}
+ {\RL@SetDelimiters#1"\@nil}%
+% \end{macrocode}
+% The main loop read each line of the file. Don't process anything if
+% the line is empty (it could be the very end of the file).
+% \begin{macrocode}
+ \loop
+ \read\RL@hdle to \RL@buffer
+ \unless\ifx\RL@buffer\@ppar
+% \end{macrocode}
+% Mark the string
+% \begin{macrocode}
+ \RL@markstrings\RL@buffer
+% \end{macrocode}
+% and process the fields.
+% \begin{macrocode}
+ \RL@parsefields\RL@buffer
+% \end{macrocode}
+% Save current record with fields, that is, with sequence of groups.
+% \begin{macrocode}
+ \def\RL@accuA{\InsertLastItem{#2}}%
+ \expandafter\RL@accuA\expandafter{\RL@buffer}%
+ \fi
+ \ifeof\RL@hdle\else
+ \repeat
+ \fi
+}
+% \end{macrocode}
+% Check for a heading space.
+% \begin{macrocode}
+\def\RL@ifspacefirst#1{%
+ \RL@ifspacefirst@i#1A \@nil
+}
+\expandafter\def\expandafter\RL@ifspacefirst@i
+ \expandafter#\expandafter1\space#2\@nil{%
+ \RL@ifempty{#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+% Remove all spaces at the start of argument (macro).
+\def\RL@removefirstspaces#1{%
+ \expandafter\RL@ifspacefirst\expandafter{#1}
+ {\expandafter\removefistspace@i#1\@nil#1}
+ {}%
+}
+\expandafter\def\expandafter\removefistspace@i\space#1\@nil#2{%
+ \def#2{#1}%
+ \RL@removefirstspaces#2%
+}
+% \end{macrocode}
+% \begin{macrocode}
+% Store |^^00|'s catcode
+\edef\RL@restorecatcodezero{\catcode0=\number\catcode0\relax}
+% \end{macrocode}
+% then set this catcode to other catcode.
+% \begin{macrocode}
+% puis le modifie à 12.
+\catcode0=12
+% \end{macrocode}
+% Remove all heading and trailing spaces of argument (macro).
+% \begin{macrocode}
+\def\RL@removelastspaces#1{%
+ \expandafter\def\expandafter#1\expandafter{%
+ \romannumeral\expandafter
+ \RL@removelastspaces@i\expandafter\relax#1^^00 ^^00\@nil
+ }%
+}
+\def\RL@removelastspaces@i#1 ^^00{\RL@removelastspaces@ii#1^^00}
+\def\RL@removelastspaces@ii#1^^00#2\@nil{%
+ \RL@ifspacefirst{#2}
+ {\RL@removelastspaces@i#1^^00 ^^00\@nil}
+ {\expandafter\z@\@gobble#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+% Restore |^^00|'s catcode.
+\RL@restorecatcodezero
+% \end{macrocode}
+% \end{macro}
+% At the very end of the package, we restore the |@|'s catcode.
+% \begin{macrocode}
+\catcode`\@=\RLAtCatcode\relax
+% \end{macrocode}
+% \iffalse
+%</tex>
+% \fi
diff --git a/macros/generic/randomlist/randomlist.ins b/macros/generic/randomlist/randomlist.ins
new file mode 100644
index 0000000000..d065cc9fbd
--- /dev/null
+++ b/macros/generic/randomlist/randomlist.ins
@@ -0,0 +1,37 @@
+%%
+%% This file generates files required to use package randomlist.
+%% At your command prompt write
+%%
+%% tex randomlist.ins
+%%
+%%
+%% (l) 2015 Jean-Côme Charpentier
+%%
+%% This file is distributed under the terms of the LaTeX Project Public
+%% License from CTAN archives in directory macros/latex/base/lppl.txt.
+%% Either version 1.3 or, at your option, any later version.
+%%
+\input docstrip
+\preamble
+\endpreamble
+
+\usedir{.}
+\keepsilent
+\askforoverwritefalse
+%
+% generate package
+%
+\generate{
+ \file{randomlist.sty}{\from{randomlist.dtx}{latex}}
+ \file{randomlist.tex}{\from{randomlist.dtx}{tex}}
+}
+
+\Msg{*}
+\Msg{* You probably need to move created `.sty'}
+\Msg{* files into a directory searched by TeX.}
+\Msg{*}
+\Msg{* And don't forget to refresh your filename database}
+\Msg{* if your TeX distribution uses such a database.}
+\Msg{*}
+
+\endbatchfile
diff --git a/macros/generic/randomlist/randomlist.pdf b/macros/generic/randomlist/randomlist.pdf
new file mode 100644
index 0000000000..e8082464b0
--- /dev/null
+++ b/macros/generic/randomlist/randomlist.pdf
Binary files differ
diff --git a/macros/generic/randomlist/randomlist.sty b/macros/generic/randomlist/randomlist.sty
new file mode 100644
index 0000000000..da72a3f65f
--- /dev/null
+++ b/macros/generic/randomlist/randomlist.sty
@@ -0,0 +1,67 @@
+%%
+%% This is file `randomlist.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% randomlist.dtx (with options: `latex')
+%%
+%% randomlist.dtx
+%% Copyleft 2013-2017 J.-C. Charpentier & C. Tellechea
+%% Packages `randomlist' to use with (La)eTeX
+%% Copyleft (L) 2013-2017 Jean-C\^ome Charpentier & Christian Tellechea.
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{randomlist}
+ [2017/09/11 v1.3 Package for random list (JCC, CT)]
+\RequirePackage{xkeyval}
+\DeclareOptionX{seed}{\gdef\RL@seed{#1}}
+\ExecuteOptions{seed=0}
+\ProcessOptionsX
+\input{randomlist}
+\NewList{*RandomList*}
+\def\RandomItemizeList{%
+ \def\RL@Type{itemize}%
+ \ClearList{*RandomList*}%
+ \@ifnextchar\bgroup{\@randomlist}{\@@randomlist}%
+}
+\long\def\@randomlist#1{%
+ \InsertRandomItem{*RandomList*}{#1}%
+ \@ifnextchar\bgroup{\@randomlist}{\@@randomlist}%
+}
+\def\@@randomlist{%
+ \long\edef\RL@body{\noexpand\begin{\RL@Type}}%
+ \RLfor \RL@var = 0 to \RL@lenof{*RandomList*}-1 \do{%
+ \long\edef\RL@body{%
+ \unexpanded\expandafter{\RL@body}%
+ \unexpanded\expandafter{%
+ \expandafter\item \csname *RandomList*-\RL@var\endcsname
+ }%
+ }%
+ }%
+ \long\edef\RL@body{\unexpanded\expandafter{\RL@body}\noexpand\end{\RL@Type}}%
+ \RL@body
+}
+\newcommand*\RandomEnumerateList{%
+ \def\RL@Type{enumerate}
+ \ClearList{*RandomList*}%
+ \@ifnextchar\bgroup{\@randomlist}{\@@randomlist}
+}
+\endinput
+%%
+%% End of file `randomlist.sty'.
diff --git a/macros/generic/randomlist/randomlist.tex b/macros/generic/randomlist/randomlist.tex
new file mode 100644
index 0000000000..74a6d26422
--- /dev/null
+++ b/macros/generic/randomlist/randomlist.tex
@@ -0,0 +1,682 @@
+%%
+%% This is file `randomlist.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% randomlist.dtx (with options: `tex')
+%%
+%% randomlist.dtx
+%% Copyleft 2013-2017 J.-C. Charpentier & C. Tellechea
+%% Packages `randomlist' to use with (La)eTeX
+%% Copyleft (L) 2013-2017 Jean-C\^ome Charpentier & Christian Tellechea.
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\csname RandomListLoaded\endcsname
+\let\RandomListLoaded\endinput
+\edef\RLAtCatcode{\the\catcode`\@}
+\catcode`\@=11
+\ifx\@ifnextchar\@undefined
+ \long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+ \def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+ \def\:{\let\@sptoken= } \: %
+ \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}
+\fi
+\ifx\PackageError\@undefined
+ \long\def\@firstoftwo#1#2{#1}
+ \long\def\@secondoftwo#1#2{#2}
+ \def\@nnil{\@nil}%
+ \alloc@7\write\chardef\sixt@@n\@unused
+ \def\typeout#1{\immediate\write\@unused{#1}}%
+ \def\@spaces{\space\space\space\space}
+ \def\PackageError#1#2#3{%
+ \begingroup
+ \newlinechar`\^^J
+ \edef\RL@temp{#3}%
+ \expandafter\errhelp\expandafter{\RL@temp}%
+ \typeout{%
+ #1 error. \space See User's Manual for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{#2}%
+ \endgroup
+ }
+\fi
+\ifx\numexpr\@undefined
+ \begingroup
+ \newlinechar`\^^J
+ \errhelp{Run under etex, pdftex, xetex, luatex, ... but not under
+ tex}%
+ \typeout{%
+ randomlist error. \space See User's Manual for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{You can't use randomlist under tex without etex extension.}%
+ \endgroup
+\fi
+\ifx\@gobble\@undefined
+ \long\def\@gobble#1{}
+\fi
+\def\RL@addtomacro#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+\def\RL@ifempty#1{%
+ \ifcat\relax\detokenize{#1}\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\newcount\RL@random
+\newcount\RL@random@a
+\newcount\RL@random@b
+\def\RLsetrandomseed#1{%
+ \ifnum#1=0
+ \global\RL@random \numexpr \time + \year * \month * \day \relax
+ \else
+ \global\RL@random \numexpr \ifnum#1<0 -\fi#1 \relax
+ \fi
+}
+\ifx\RL@seed\@undefined
+ \RLsetrandomseed{0}
+\else
+ \RLsetrandomseed{\RL@seed}
+\fi
+\def\RL@nextrand{%
+ \global\RL@random@a=\RL@random
+ \global\divide\RL@random@a 127773
+ \global\RL@random@b=\RL@random@a
+ \global\multiply\RL@random@a -2836
+ \global\multiply\RL@random@b -127773
+ \global\advance\RL@random\RL@random@b
+ \global\multiply\RL@random 16807
+ \global\advance\RL@random\RL@random@a
+ \ifnum\RL@random<0
+ \global\advance\RL@random 2147483647
+ \fi
+}
+\def\RLuniformdeviate#1#2{%
+ \RL@nextrand
+ \global\RL@random@a=\RL@random
+ \global\RL@random@b=\RL@random
+ \global\divide\RL@random@a \numexpr#1\relax
+ \global\RL@random@b \numexpr\RL@random@b - \RL@random@a * (#1)\relax
+ \expandafter\edef\csname #2\endcsname{\number\RL@random@b}%
+}%
+\newtoks\@ListOfList
+\def\@ifIsList#1{%
+ \expandafter\@ifIsList@\expandafter{#1}%
+}
+\def\@ifIsList@#1{%
+ \def\@@ifIsList##1#1\sep##2\@@ifIsList{%
+ \csname @\ifx\empty##2\empty second\else first\fi oftwo\endcsname
+ }%
+ \expandafter\@@ifIsList\the\@ListOfList#1\sep\@@ifIsList
+}
+\def\RL@lenof#1{\csname #1-len\endcsname}
+\newif\if@EmptyListFound
+\def\@ifIsListNotEmpty#1{%
+ \global\@EmptyListFoundfalse
+ \@ifIsList{#1}{%
+ \ifnum\RL@lenof{#1}=0
+ \global\@EmptyListFoundtrue
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+ \@secondoftwo
+}
+\def\@NoListError#1{%
+ \if@EmptyListFound
+ \@EmptyListError{#1}%
+ \global\@EmptyListFoundfalse
+ \else
+ \PackageError{randomlist}%
+ {List #1 doesn't exist}%
+ {Maybe you mistyped the list name?}%
+ \fi
+}
+\def\@EmptyListError#1{%
+ \if@EmptyListFound
+ \PackageError{randomlist}%
+ {List #1 is empty}%
+ {Ask yourself why this list is empty.}%
+}
+\def\@OutOfRangeError#1#2{%
+ \PackageError{randomlist}%
+ {Index #2 is greater than last index of list #1}%
+ {There aren't enough elements in the list.}%
+}
+\long\def\RL@nameldef#1{%
+ \long\expandafter\def\csname #1\endcsname
+}
+\long\def\RL@nameledef#1{%
+ \long\expandafter\edef\csname #1\endcsname
+}
+\long\def\RL@namelgdef#1{%
+ \long\expandafter\gdef\csname #1\endcsname
+}
+\long\def\RL@namelxdef#1{%
+ \long\expandafter\xdef\csname #1\endcsname
+}
+\def\RL@let#1#2{%
+ \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname
+}
+\long\def\RL@doafterfi#1\fi{\fi#1}
+\def\RLfor#1=#2to#3\do{%
+ \edef#1{\number\numexpr#2}%
+ \edef\RL@sgncomp{\ifnum#1<\numexpr#3\relax>+\else<-\fi}%
+ \expandafter\RLfor@i
+ \csname RLfor@ii@\string#1\expandafter\endcsname\expandafter
+ {\number\numexpr#3\expandafter}%
+ \RL@sgncomp
+ #1%
+}
+\long\def\RLfor@i#1#2#3#4#5#6{%
+ \def#1{%
+ \unless\ifnum#5#3#2\relax
+ \RL@doafterfi{%
+ #6%
+ \edef#5{\number\numexpr#5#41\relax}%
+ #1%
+ }%
+ \fi
+ }%
+ #1%
+}
+\def\NewList#1{%
+ \@ifIsList{#1}{%
+ \PackageError{randomlist}%
+ {List #1 already exists}%
+ {Use \string\ClearList.}%
+ }%
+ {%
+ \ifcsname #1\endcsname
+ \PackageError{randomlist}%
+ {Command \csname#1\endcsname already exists}%
+ {Creating list #1 defines a \csname#1\endcsname command.}%
+ \else
+ \RL@nameldef{#1-len}{0}%
+ \@ListOfList\expandafter{\the\@ListOfList#1\sep}%
+ \expandafter\def\csname #1\endcsname[##1]{%
+ \ifnum##1>\csname#1-len\endcsname
+ \relax
+ \else
+ \csname #1-##1\endcsname
+ \fi
+ }%
+ \fi
+ }%
+}
+\def\ClearList#1{%
+ \@ifIsList{#1}{%
+ \RL@nameldef{#1-len}{0}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\CopyList#1#2{%
+ \@ifIsList{#1}{%
+ \@ifIsList{#2}{%
+ \RL@let{#2-len}{#1-len}%
+ \ifnum\RL@lenof{#1}>0
+ \RLfor\RL@iter=0 to \RL@lenof{#1}-1 \do{%
+ \RL@let{#2-\RL@iter}{#1-\RL@iter}%
+ }%
+ \fi
+ }%
+ {\@NoListError{#2}}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\InsertList#1#2#3{%
+ \@ifIsList{#1}{%
+ \@ifIsList{#3}{%
+ \ifnum #2>\RL@lenof{#1}
+ \@OutOfRangeError{#1}{#2}%
+ \else
+ \ShiftList{#1}{#2}{\RL@lenof{#3}}%
+ \ifnum\RL@lenof{#3}>0
+ \RLfor\RL@iter=0 to \RL@lenof{#3}-1 \do{%
+ \RL@let{#1-\number\numexpr\RL@iter+#2}{#3-\RL@iter}%
+ }%
+ \fi
+ \fi
+ }%
+ {\@NoListError{#3}}%
+ }%
+ {\@NoListError{#1}}%
+}
+\newcount\RL@counti
+\newcount\RL@countii
+\newcount\RL@countiii
+\def\ShowList#1{%
+ \@ifIsList{#1}{%
+ \ifhmode\par\noindent\fi
+ \begingroup
+ \ifdefined\ttfamily\ttfamily\else\tt\fi
+ BEGIN\detokenize{{#1}}
+ (\ifcase\RL@lenof{#1}
+ empty list%
+ \or
+ 1 element%
+ \else
+ \RL@lenof{#1} elements%
+ \fi)\par
+ \ifnum\RL@lenof{#1}>0
+ \parindent=1em
+ \RLfor\RL@iter=0 to \RL@lenof{#1}-1 \do {%
+ #1[\RL@iter] = \expandafter\RL@meaning\csname
+ #1-\RL@iter\endcsname
+ \par
+ }%
+ \fi
+ \noindent
+ END\detokenize{{#1}}\par
+ \endgroup
+ }%
+ {\@NoListError{#1}}%
+}
+\def\RL@meaning#1{\expandafter\RL@meaningi\meaning#1}
+\expandafter\def\expandafter\RL@meaningi\expandafter#\expandafter1\string>{}
+\def\CountList#1#2{%
+ \@ifIsList{#1}%
+ {\RL@nameledef{#2}{\RL@lenof{#1}}}%
+ {\@NoListError{#1}}%
+}
+\def\ShiftList#1#2#3{%
+ \@ifIsList{#1}%
+ {%
+ \unless\ifnum#3=0
+ \ifnum\numexpr#2<0
+ \PackageError{randomlist}%
+ {Negative index number}%
+ {Index must be equal or greater than 0}%
+ \else
+ \ifnum\numexpr#2>\RL@lenof{#1}\relax
+ \PackageError{randomlist}%
+ {Index \number\numexpr #2\relax\space too big
+ (<=\RL@lenof{#1})}%
+ {Index must be equal or smaller than length of
+ the list}%
+ \else
+ \ifnum\numexpr#3>0
+ \RLfor\RL@iter = \RL@lenof{#1} to #2 \do{%
+ \RL@let{#1-\number\numexpr\RL@iter+#3}{#1-\RL@iter}%
+ }%
+ \RLfor\RL@iter = #2 to #2 + #3 - 1 \do{%
+ \RL@nameldef{#1-\RL@iter}{}%
+ }%
+ \else
+ \ifnum-#3>\numexpr#2\relax
+ \PackageError{randomlist}%
+ {Negative shift to big}%
+ {When negative, shift must not be greater than index}%
+ \else
+ \RLfor\RL@iter=#2 to \RL@lenof{#1} \do{%
+ \RL@let{#1-\number\numexpr\RL@iter+#3}{#1-\RL@iter}%
+ }%
+ \fi
+ \fi
+ \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1} + #3}%
+ \fi\fi\fi
+ }%
+ {\@NoListError{#1}}%
+}
+\long\def\InsertLastItem#1#2{%
+ \@ifIsList{#1}
+ {%
+ \RL@nameldef{#1-\RL@lenof{#1}}{#2}%
+ \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1}+1}%
+ }
+ {\@NoListError{#1}}%
+}
+\long\def\InsertFirstItem#1#2{%
+ \InsertItem{#1}{0}{#2}%
+}
+\long\def\InsertItem#1#2#3{%
+ \@ifIsList{#1}%
+ {%
+ \ShiftList{#1}{#2}{1}%
+ \RL@nameldef{#1-#2}{#3}%
+ }%
+ {\@NoListError{#1}}%
+}
+\long\def\InsertRandomItem#1#2{%
+ \@ifIsList{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}+1}{RL@temp}%
+ \InsertItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\ExtractFirstItem#1#2{%
+ \@ifIsList{#1}%
+ {%
+ \ExtractItem{#1}{0}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\ExtractLastItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RL@let{#2}{#1-\number\numexpr\RL@lenof{#1}-1}%
+ \RL@nameledef{#1-len}{\number\numexpr\RL@lenof{#1}-1}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\ExtractItem#1#2#3{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RL@let{#3}{#1-#2}%
+ \ShiftList{#1}{#2+1}{-1}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\ExtractRandomItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
+ \ExtractItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\ExtractList#1#2#3#4{%
+ \@ifIsList{#1}{%
+ \@ifIsList{#4}{%
+ \ifnum#2<\RL@lenof{#1}%
+ \ifnum#3<\RL@lenof{#1}%
+ \ifnum#2>#3\relax
+ \RL@nameldef{#4-len}{0}%
+ \else
+ \RLfor\RL@iterextract=0 to #3 - #2 \do{%
+ \RL@let{#4-\RL@iterextract}{#1-#2}%
+ \ExtractItem{#1}{#2}{RL@temp}%
+ }%
+ \RL@nameledef{#4-len}{\number\numexpr #3 - #2 + 1}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#3}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#2}%
+ \fi
+ }%
+ {\@NoListError{#4}}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\GetFirstItem#1#2{%
+ \GetItem{#1}{0}{#2}%
+}
+\def\GetLastItem#1#2{%
+ \GetItem{#1}{\number\numexpr\RL@lenof{#1}-1}{#2}%
+}
+\def\GetItem#1#2#3{%
+ \@ifIsListNotEmpty{#1}
+ {%
+ \ifnum\numexpr\RL@lenof{#1}-1-#2<0
+ \@OutOfRangeError{#1}{#2}%
+ \else
+ \RL@let{#3}{#1-#2}%
+ \fi
+ }
+ {\@NoListError{#1}}%
+}
+\def\GetRandomItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
+ \GetItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\GetList#1#2#3#4{%
+ \@ifIsList{#1}{%
+ \@ifIsList{#4}{%
+ \ifnum#2<\RL@lenof{#1}%
+ \ifnum#3<\RL@lenof{#1}%
+ \ifnum#2>#3\relax
+ \RL@nameldef{#4-len}{0}%
+ \else
+ \RLfor\RL@iter=#2 to #3 \do{%
+ \RL@let{#4-\number\numexpr \RL@iter - #2}{#1-\RL@iter}%
+ }%
+ \RL@nameledef{#4-len}{\number\numexpr #3 - #2 + 1}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#3}%
+ \fi
+ \else
+ \@OutOfRangeError{#1}{#2}%
+ \fi
+ }%
+ {\@NoListError{#4}}%
+ }%
+ {\@NoListError{#1}}%
+}
+\long\def\SetFirstItem#1#2{%
+ \SetItem{#1}{0}{#2}%
+}
+\long\def\SetLastItem#1#2{%
+ \SetItem{#1}{\number\numexpr\RL@lenof{#1}-1}{#2}%
+}
+\long\def\SetItem#1#2#3{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \ifnum\numexpr\RL@lenof{#1}-1-#2<0
+ \@OutOfRangeError{#1}{#2}%
+ \else
+ \RL@nameldef{#1-#2}{#3}%
+ \fi
+ }%
+ {\@NoListError{#1}}%%
+}
+\long\def\SetRandomItem#1#2{%
+ \@ifIsListNotEmpty{#1}%
+ {%
+ \RLuniformdeviate{\RL@lenof{#1}}{RL@temp}%
+ \SetItem{#1}{\RL@temp}{#2}%
+ }%
+ {\@NoListError{#1}}%
+}
+\def\SetList#1#2{%
+ \@ifIsList{#1}%
+ {%
+ \ClearList{#1}%
+ \def\RL@name{#1}%
+ \RL@setlist#2,\@nil,%
+ }%
+ {\@NoListError{#1}}%
+}
+\long\def\RL@setlist#1,{%
+ \def\RL@arg{#1}%
+ \unless\ifx\RL@arg\@nnil
+ \InsertLastItem{\RL@name}{#1}%
+ \expandafter\RL@setlist
+ \fi
+}
+\long\def\ForEachFirstItem#1#2#3{%
+ \begingroup
+ \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
+ \ExtractFirstItem{#1}{#2}%
+ #3%
+ }%
+ \endgroup
+}
+\long\def\ForEachLastItem#1#2#3{%
+ \begingroup
+ \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
+ \ExtractLastItem{#1}{#2}%
+ #3%
+ }%
+ \endgroup
+}
+\long\def\ForEachRandomItem#1#2#3{%
+ \begingroup
+ \RLfor \RL@var = 0 to \RL@lenof{#1}-1 \do{%
+ \ExtractRandomItem{#1}{#2}%
+ #3%
+ }%
+ \endgroup
+}
+\long\def\ReadFieldItem#1#2#3{%
+ \RL@counti #2\relax
+ \expandafter\RL@ReadFieldItem#1\@nil
+ \expandafter\let\csname#3\endcsname\RL@temp
+}
+\long\def\RL@ReadFieldItem{%
+ \@ifnextchar\bgroup{\RL@@ReadFieldItem}{\RL@@ReadFieldItemError}%
+}
+\long\def\RL@@ReadFieldItem#1{%
+ \ifnum\RL@counti=\z@
+ \def\RL@temp{#1}%
+ \expandafter\RL@@ReadFieldItemEnd
+ \else
+ \advance\RL@counti \m@ne
+ \expandafter\RL@ReadFieldItem
+ \fi
+}
+\long\def\RL@@ReadFieldItemEnd#1\@nil{}
+\long\def\RL@@ReadFieldItemError#1\@nil{%
+ \PackageError{randomlist}%
+ {There aren't enough fields in the record}%
+ {Pay attention that field number starts from zero.}%
+}
+\def\RL@SetDelimiters#1#2#3\@nil{%
+ \def\RL@markstrings##1{%
+ \let\RL@accu\empty
+ \expandafter\RL@markstrings@i##1#2\@nil#2%
+ \let##1=\RL@accu
+ }%
+ \def\RL@markstrings@i##1#2##2#2{%
+ \RL@addtomacro\RL@accu{##1}%
+ \def\RL@current{##2}%
+ \unless\ifx\@nnil\RL@current
+ \RL@addtomacro\RL@accu{\RL@string{##2}}%
+ \expandafter\RL@markstrings@i
+ \fi
+ }%
+ \def\RL@unmarkstrings##1{%
+ \let\RL@accuA\empty
+ \expandafter\RL@unmarkstrings@i##1\RL@string\@nil
+ \let##1=\RL@accuA
+ }%
+ \def\RL@unmarkstrings@i##1\RL@string##2{%
+ \RL@addtomacro\RL@accuA{##1}%
+ \def\RL@current{##2}%
+ \unless\ifx\@nnil\RL@current
+ \RL@ifempty{##2}%
+ {\RL@addtomacro\RL@accuA{#2}}%
+ {\RL@addtomacro\RL@accuA{##2}}%
+ \expandafter\RL@unmarkstrings@i
+ \fi
+ }%
+ \def\RL@parsefields##1{%
+ \let\RL@accu\empty
+ \expandafter\RL@parsefields@i##1#1\@nil#1%
+ \let##1=\RL@accu
+ }%
+ \def\RL@parsefields@i##1#1{%
+ \def\RL@current{##1}%
+ \unless\ifx\@nnil\RL@current
+ \RL@unmarkstrings\RL@current
+ \RL@removefirstspaces\RL@current
+ \RL@removelastspaces \RL@current
+ \expandafter\RL@addtomacro\expandafter\RL@accu\expandafter
+ {\expandafter{\RL@current}}%
+ \expandafter\RL@parsefields@i
+ \fi
+ }%
+}
+\newread\RL@hdle
+\def\@ppar{\par}
+\def\ReadFileList{\@ifnextchar[{\@ReadFileList}{\@ReadFileList[,"]}}
+\def\@ReadFileList[#1]#2#3{%
+ \openin \RL@hdle = #3
+ \ifeof\RL@hdle
+ \PackageError{randomlist}%
+ {File #3 doesn't exist}%
+ {Verify its name, its extension, its location, its permissions.}%
+ \else
+ \RL@ifempty{#1}%
+ {%
+ \PackageError{randomlist}
+ {Optional argument empty: [,"] inserted}
+ {Do not leave an optional argument empty}%
+ \RL@SetDelimiters,"\@nil
+ }
+ {\RL@SetDelimiters#1"\@nil}%
+ \loop
+ \read\RL@hdle to \RL@buffer
+ \unless\ifx\RL@buffer\@ppar
+ \RL@markstrings\RL@buffer
+ \RL@parsefields\RL@buffer
+ \def\RL@accuA{\InsertLastItem{#2}}%
+ \expandafter\RL@accuA\expandafter{\RL@buffer}%
+ \fi
+ \ifeof\RL@hdle\else
+ \repeat
+ \fi
+}
+\def\RL@ifspacefirst#1{%
+ \RL@ifspacefirst@i#1A \@nil
+}
+\expandafter\def\expandafter\RL@ifspacefirst@i
+ \expandafter#\expandafter1\space#2\@nil{%
+ \RL@ifempty{#1}%
+}
+\def\RL@removefirstspaces#1{%
+ \expandafter\RL@ifspacefirst\expandafter{#1}
+ {\expandafter\removefistspace@i#1\@nil#1}
+ {}%
+}
+\expandafter\def\expandafter\removefistspace@i\space#1\@nil#2{%
+ \def#2{#1}%
+ \RL@removefirstspaces#2%
+}
+\edef\RL@restorecatcodezero{\catcode0=\number\catcode0\relax}
+\catcode0=12
+\def\RL@removelastspaces#1{%
+ \expandafter\def\expandafter#1\expandafter{%
+ \romannumeral\expandafter
+ \RL@removelastspaces@i\expandafter\relax#1^^00 ^^00\@nil
+ }%
+}
+\def\RL@removelastspaces@i#1 ^^00{\RL@removelastspaces@ii#1^^00}
+\def\RL@removelastspaces@ii#1^^00#2\@nil{%
+ \RL@ifspacefirst{#2}
+ {\RL@removelastspaces@i#1^^00 ^^00\@nil}
+ {\expandafter\z@\@gobble#1}%
+}
+\RL@restorecatcodezero
+\catcode`\@=\RLAtCatcode\relax
+\endinput
+%%
+%% End of file `randomlist.tex'.
diff --git a/macros/generic/randomlist/test-fr.pdf b/macros/generic/randomlist/test-fr.pdf
new file mode 100644
index 0000000000..3bcc3eab06
--- /dev/null
+++ b/macros/generic/randomlist/test-fr.pdf
Binary files differ
diff --git a/macros/generic/randomlist/test-fr.tex b/macros/generic/randomlist/test-fr.tex
new file mode 100644
index 0000000000..5df70c0b06
--- /dev/null
+++ b/macros/generic/randomlist/test-fr.tex
@@ -0,0 +1,62 @@
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[a4paper, margin=2.5cm, noheadfoot]{geometry}
+\usepackage{amsmath}
+\usepackage[seed=1]{randomlist}
+\usepackage[french]{babel}
+
+\pagestyle{empty}
+\setlength{\parindent}{0pt}
+
+\NewList{Eleves}
+\NewList{Triplets}
+
+\begin{document}
+\ReadFileList{Eleves}{pupils.dat}
+\ExtractFirstItem{Eleves}{NULL} % retire la ligne de titre
+\ReadFileList{Triplets}{pythagoras.dat}
+\ForEachFirstItem{Eleves}{Eleve}
+{%
+ \ReadFieldItem{\Eleve}{0}{Nom}
+ \ReadFieldItem{\Eleve}{1}{Prenom}
+ \ReadFieldItem{\Eleve}{2}{Note}
+ \ExtractRandomItem{Triplets}{Triplet}
+ \ReadFieldItem{\Triplet}{0}{Tripleta}
+ \ReadFieldItem{\Triplet}{1}{Tripletb}
+ \ReadFieldItem{\Triplet}{2}{Tripletc}
+ \begin{center}
+ \fbox{\huge\bfseries Devoir pour \Nom{} \Prenom}
+ \end{center}
+ \textbf{Exercise} \par
+ \if A\Note
+ La diagonale d'un rectangle fait \Tripletc\,cm et un des côtés de
+ ce rectangle fait \Tripleta\,cm. Quelle est la longueur de l'autre
+ côté du rectangle ?
+ \else
+ Calculer la longueur de la diagonale d'un rectangle de
+ \Tripleta\,cm sur \Tripletb\,cm.
+ \fi
+ \newpage
+ \begin{center}
+ \fbox{\huge\bfseries Corrigé du devoir de \Nom{} \Prenom}
+ \end{center}
+ \textbf{Exercise} \par
+ \if A\Note
+ Il faut utiliser le théorème de Pythagore. On a :
+ \[\text{diagonale}^2=\text{côté}_1^2+\text{côté}_2^2.\]
+ Donc :
+ \[\Tripletc^2=\Tripleta^2+\text{côté}_2^2\]
+ et donc :
+ \[\text{côté}_2=\sqrt{\Tripletc^2-\Tripleta^2} = \Tripletb.\]
+ \else
+ Avec le théorème de Pythagore, on a :
+ \[\text{diagonale}^2=\text{côté}_1^2+\text{côté}_2^2.\]
+ Here:
+ \[\text{diagonale}^2=\Tripleta^2+\Tripletb^2\]
+ and then
+ \[\text{diagonale}=\sqrt{\Tripleta^2+\Tripletb^2} = \Tripletc.\]
+ \fi
+ \newpage
+}
+\end{document}
diff --git a/macros/generic/randomlist/test.pdf b/macros/generic/randomlist/test.pdf
new file mode 100644
index 0000000000..83db987eda
--- /dev/null
+++ b/macros/generic/randomlist/test.pdf
Binary files differ
diff --git a/macros/generic/randomlist/test.tex b/macros/generic/randomlist/test.tex
new file mode 100644
index 0000000000..7e6f65519c
--- /dev/null
+++ b/macros/generic/randomlist/test.tex
@@ -0,0 +1,61 @@
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[a4paper, margin=2.5cm, noheadfoot]{geometry}
+\usepackage{amsmath}
+\usepackage[seed=1]{randomlist}
+
+\pagestyle{empty}
+\setlength{\parindent}{0pt}
+
+\NewList{Pupils}
+\NewList{Triples}
+
+\begin{document}
+\ReadFileList{Pupils}{pupils.dat}
+\ExtractFirstItem{Pupils}{NULL} % extract title line
+\ReadFileList{Triples}{pythagoras.dat}
+\ForEachFirstItem{Pupils}{Pupil}
+{%
+ \ReadFieldItem{\Pupil}{0}{Name}
+ \ReadFieldItem{\Pupil}{1}{FName}
+ \ReadFieldItem{\Pupil}{2}{Note}
+ \ExtractRandomItem{Triples}{Triple}
+ \ReadFieldItem{\Triple}{0}{Triplea}
+ \ReadFieldItem{\Triple}{1}{Tripleb}
+ \ReadFieldItem{\Triple}{2}{Triplec}
+ \begin{center}
+ \fbox{\huge\bfseries Test for \Name{} \FName}
+ \end{center}
+ \textbf{Exercise} \par
+ \if A\Note
+ The diagonal of a rectangle is \Triplec~in and a side of this
+ rectangle is \Triplea~in. What is the length of the other side of
+ the rectangle?
+ \else
+ Find the length of the diagonal of a rectangle that is \Triplea~in
+ by \Tripleb~in.
+ \fi
+ \newpage
+ \begin{center}
+ \fbox{\huge\bfseries Answer to the test for \Name{} \FName}
+ \end{center}
+ \textbf{Exercise} \par
+ \if A\Note
+ Use Pythagorean theorem. We have:
+ \[\text{diag}^2=\text{side1}^2+\text{side2}^2.\]
+ Here:
+ \[\Triplec^2=\Triplea^2+\text{side2}^2\]
+ and then
+ \[\text{side2}=\sqrt{\Triplec^2-\Triplea^2} = \Tripleb.\]
+ \else
+ Use Pythagorean theorem. We have:
+ \[\text{diag}^2=\text{side1}^2+\text{side2}^2.\]
+ Here:
+ \[\text{diag}^2=\Triplea^2+\Tripleb^2\]
+ and then
+ \[\text{diag}=\sqrt{\Triplea^2+\Tripleb^2} = \Triplec.\]
+ \fi
+ \newpage
+}
+\end{document}
diff --git a/macros/generic/randomlist/testtex.pdf b/macros/generic/randomlist/testtex.pdf
new file mode 100644
index 0000000000..50a4e60d9c
--- /dev/null
+++ b/macros/generic/randomlist/testtex.pdf
Binary files differ
diff --git a/macros/generic/randomlist/testtex.tex b/macros/generic/randomlist/testtex.tex
new file mode 100644
index 0000000000..a03c876897
--- /dev/null
+++ b/macros/generic/randomlist/testtex.tex
@@ -0,0 +1,96 @@
+\hsize=\dimexpr 21cm-2in \relax
+\vsize=\dimexpr 29.7cm-2in \relax
+\parindent 0pt
+
+\font\xviibf=cmbx17
+\font\xivbf=cmbx14
+\font\xivtt=cmtt14
+
+\def\cmd#1{{\tentt \string#1}}
+\def\Cmd#1{{\xivtt \string#1}}
+\def\Par{\par\medskip}
+\newcount\cntsection
+\def\section#1{%
+ \par\bigskip
+ \advance \cntsection by 1
+ {\xivbf \the\cntsection.\ #1}
+ \par\medskip
+}
+
+\input randomlist
+
+%%% begin document %%%
+
+\centerline{\xviibf Torture test for pdftex and etex}
+\par\vskip10mm
+
+\section{Test for \Cmd{\NewList} (and \Cmd{\ShowList})}
+
+\NewList{MyList}
+\ShowList{MyList}
+
+\section{Tests for \Cmd{\Insert...}}
+
+With \cmd{\InsertFirstItem}
+\InsertFirstItem{MyList}{first}
+\InsertFirstItem{MyList}{second}
+\InsertFirstItem{MyList}{third}
+\InsertFirstItem{MyList}{fourth}
+\ShowList{MyList}
+\Par
+
+We test \cmd{\ClearList} since we'll use it many times:
+\ClearList{MyList}
+\ShowList{MyList}
+\Par
+
+With \cmd{\InsertLastItem}
+\InsertLastItem{MyList}{first}
+\InsertLastItem{MyList}{second}
+\InsertLastItem{MyList}{third}
+\InsertLastItem{MyList}{fourth}
+\ShowList{MyList}
+\ClearList{MyList}
+\Par
+
+With \cmd{\InsertItem} with indexes 0, 0, 2, 1
+\InsertItem{MyList}{0}{first}
+\InsertItem{MyList}{0}{second}
+\InsertItem{MyList}{2}{third}
+\InsertItem{MyList}{1}{fourth}
+\ShowList{MyList}
+\ClearList{MyList}
+\Par
+
+\RLsetrandomseed{3}
+With \cmd{\InsertRandomItem} (seed = 3)
+\InsertRandomItem{MyList}{first}
+\InsertRandomItem{MyList}{second}
+\InsertRandomItem{MyList}{third}
+\InsertRandomItem{MyList}{fourth}
+\ShowList{MyList}
+\ClearList{MyList}
+\Par
+
+\vfill\break
+With \cmd{\InsertList}
+\NewList{OtherList}
+\InsertLastItem{MyList}{first of Mylist}
+\InsertLastItem{MyList}{second of Mylist}
+\InsertLastItem{MyList}{third of Mylist}
+\InsertLastItem{MyList}{fourth of Mylist}
+\InsertLastItem{OtherList}{first of Otherlist}
+\InsertLastItem{OtherList}{second of Otherlist}
+\InsertLastItem{OtherList}{third of Otherlist}
+\InsertLastItem{OtherList}{fourth of Otherlist}
+\ShowList{MyList}
+\ShowList{OtherList}
+Insertion at index 2
+\InsertList{MyList}{2}{OtherList}
+\ShowList{MyList}
+\ShowList{OtherList}
+\ClearList{MyList}
+\ClearList{OtherList}
+\Par
+
+\bye
diff --git a/macros/generic/realcalc/readme b/macros/generic/realcalc/readme
new file mode 100644
index 0000000000..aa152337fb
--- /dev/null
+++ b/macros/generic/realcalc/readme
@@ -0,0 +1,39 @@
+realcalc.tex
+
+(Copyright) Frank Buchholz, Jan. 1993
+e-mail: buchholz@lusty.informatik.uni-dortmund.de
+
+Real arithmetic with big values and high precision.
+Calculations are done with 9 decimal digits.
+Usable with TeX and LaTeX.
+
+Files:
+ readme This file
+ realcalc.tex You have to \input realcalc.tex to use it.
+ realdemo.tex Demo with LaTeX.
+ realtest.tex Demo with TeX (Type \test\bye after the prompt)
+
+Installation:
+ Put the file realcalc.tex where your TeX looks for inputs.
+ Name a copy realcalc.sty to use as a LaTeX style option,
+ or create a file realcalc.sty with the lines:
+ \input realcalc.tex
+ \endinput
+
+Documentation:
+ Use following command to extract the documentation:
+ grep %% realcalc.tex
+
+COPYING:
+ Copying of part or all of this file is allowed under the following
+ conditions only:
+ (1) You may freely distribute unchanged copies of the files. You have
+ to include this file when you do so.
+ (2) You may modify a renamed copy of the files, but only for personal
+ use or use within an organization.
+ (3) You may copy fragments from the files, for personal use or for
+ distribution, as long as credit is given where credit is due.
+
+ You are NOT ALLOWED to take money for the distribution or use of
+ this file or modified versions or fragments thereof, except for
+ a nominal charge for copying etc.
diff --git a/macros/generic/realcalc/realcalc.tex b/macros/generic/realcalc/realcalc.tex
new file mode 100644
index 0000000000..be46167fc4
--- /dev/null
+++ b/macros/generic/realcalc/realcalc.tex
@@ -0,0 +1,581 @@
+%% realcalc.tex
+%%
+%% (C) Frank Buchholz, Jan. 1993
+%% e-mail: buchholz@lusty.informatik.uni-dortmund.de
+% User documentation: All lines starting with two %
+% Try grep to extract these lines.
+%%
+%% Real arithmetic with big values and high precision.
+%% Calculations are done with 9 decimal digits.
+%% Usable with TeX and LaTeX.
+%%
+%% Parameter:
+%%
+%% <macro> Macro, witch catches the result.
+%% <value> String or macro witch expands to a value in the range
+%% from -2147483647.999999999 to 2147483647.999999999
+%% <precision> Number from 0 to 9
+%%
+%% Functions:
+%%
+
+% Don't read this file twice
+\ifx\Radd\undefined \else \endinput \fi
+
+% Make "@" be a letters
+\chardef\catamp=\the\catcode`\@
+\catcode`@=11
+
+\def\@Rversion{Version 1.0, Jan. 1993}
+\message{`Real arithmetic', \@Rversion (C) Frank Buchholz}
+
+% Allocation of temporary registers
+\newcount\@ta
+\newcount\@tb
+%
+\newcount\@xs % Sign of 1st value
+\newcount\@xi % Integer part of 1st value
+\newcount\@xf % Fractional part of 1st value
+%
+\newcount\@ys % Sign of 2nd value
+\newcount\@yi % Integer part of 2nd value
+\newcount\@yf % Fractional part of 2nd value
+%
+\newcount\@mil \@mil=1000000000 % 10^9
+%
+\countdef\@xa240
+\countdef\@xb241
+\countdef\@xc242
+\countdef\@xd243
+\countdef\@xe244
+\countdef\@ya245
+\countdef\@yb246
+\countdef\@yc247
+\countdef\@yd248
+\countdef\@ye249
+\let\@f=\@tb
+\let\@product=\@ta
+
+\chardef\@zero=0
+
+%% \Radd<macro><value><value> Addition
+\def\Radd#1#2#3{\@callc\@Radd#1{#2}{#3}}
+
+%% \Rsub<macro><value><value> Subtraction
+\def\Rsub#1#2#3{\@callc\@Radd#1{#2}{-#3}}
+
+\def\@Radd#1#2.#3.#4\relax#5.#6.#7\relax{%
+ % #1 Macro, witch gets the result
+ % #2 integer part of 1st value
+ % #3 fractional part of 1st value
+ % #4 dummy to swallow everthing after the 2nd '.'
+ % #5 integer part of 2nd value
+ % #6 fractional part of 2nd value
+ % #7 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#2}{#3}%
+ \@readvalue\@ys\@yi\@yf{#5}{#6}%
+ %
+ % Add integer parts
+ \@ta=\@xi \advance\@ta\@yi%
+ %
+ % Add fractional parts if they are not zero
+ \ifnum\@xf=\@zero%
+ \ifnum\@yf=\@zero%
+ \@tb=\@zero%
+ \else%
+ \@longadd%
+ \fi%
+ \else%
+ \@longadd%
+ \fi%
+ %
+ % Store result
+ \@store#1\@ta\@tb%
+}
+
+\def\@longadd{%
+ % Propagate sign to fractional parts
+ \multiply\@xf\@xs \multiply\@yf\@ys%
+ %
+ % Add fractional parts
+ \@tb=\@xf \advance\@tb\@yf%
+ %
+ % Calculate carry
+ \ifnum\@tb<\@zero%
+ \ifnum\@tb<-\@mil \advance\@ta -\@ne \advance\@tb\@mil \fi%
+ \else%
+ \ifnum\@tb<\@mil \else \advance\@ta \@ne \advance\@tb-\@mil \fi%
+ \fi%
+}
+
+%% \Rmul<macro><value><value> Multiplication
+\def\Rmul#1#2#3{\@callc\@Rmul#1{#2}{#3}}
+
+\def\@Rmul#1#2.#3.#4\relax#5.#6.#7\relax{%
+ % #1 Macro, witch gets the result
+ % #2 integer part of 1st value
+ % #3 fractional part of 1st value
+ % #4 dummy to swallow everthing after the 2nd '.'
+ % #5 integer part of 2nd value
+ % #6 fractional part of 2nd value
+ % #7 dummy to swallow everthing after the 2nd '.'
+ %
+ % How to do real multiplications:
+ % Split values in various parts
+ % x y = 1234 567890 . 123 456 789
+ % -> xa xb xc xd xe
+ % -> ya yb yc yd ye
+ % Do 21 (!) integer multiplications if there are any fractional parts
+ % r = x * Y
+ % -> r = xi*yi
+ % + (xa*yc + xa*yc )*10^3
+ % + (xa*yd + xd*ya )*10^-0
+ % + (xa*ye + xe*ya + xb*yc + xc*yb)*10^-3
+ % + (xb*yd + xd*yb + xc*yc )*10^-6
+ % + (xb*ye + xe*yb + xc*yd + xd*yc)*10^-9
+ % + (xc*ye + xe*yc + xd*yd )*10^-12
+ % + (xd*ye + xe*yd )*10^-15
+ % + (xe*ye )*10^-18
+ %
+ % -> r = ((((( xe*ye / 1000
+ % + xd*ye + xe*yd ) / 1000
+ % + xc*ye + xe*yc + xd*yd ) / 1000
+ % + xb*ye + xe*yb + xc*yd + xd*yc ) / 1000
+ % + xb*yd + xd*yb + xc*yc ) / 1000
+ % + xa*ye + ye*xa + xb*yc + xc*yb ) / 1000
+ % + xa*yd + xd*ya + (xa*yc + ya*xc)*1000 + xi*yi
+ % The last three digigs are saved just before the divisions.
+ %
+ % Init
+ %
+ \@readvalue\@xs\@xi\@xf{#2}{#3}%
+ \@readvalue\@ys\@yi\@yf{#5}{#6}%
+ %
+ % Sign
+ \multiply\@xi\@xs%
+ \multiply\@yi\@ys%
+ \multiply\@xs\@ys%
+ %
+ \@product=\@zero%
+ %
+ \ifnum\@xf=\@zero%
+ \ifnum\@yf=\@zero%
+ % No fractional parts
+ \edef\@frac{000000000} % digits of fractional part
+ \else%
+ \@longmul % Long multiplication
+ \fi%
+ \else%
+ \@longmul % Long multiplication
+ \fi%
+ %
+ % Multiply integer parts
+ \count@=\@xi \multiply\count@\@yi%
+ \advance\@product\count@%
+ %
+ % Sign
+ \multiply\@product\@xs%
+ %
+ % Store result
+ \edef#1{\number\@product.\@frac}%
+}
+
+% Do long multiplication
+\def\@longmul{%
+ % Split values in pieces
+ \@f=1000000%
+ \count@=\@xi%
+ \divide\count@\@f \@xa=\count@%
+ \multiply\count@-\@f \advance\count@\@xi \@xb=\count@%
+ \count@=\@xf%
+ \divide\count@\@f \@xc=\count@%
+ \multiply\count@-\@f \advance\count@\@xf%
+ \@f=1000%
+ \@xe=\count@%
+ \divide\count@\@f \@xd=\count@%
+ \multiply\count@-\@f \advance\count@\@xe \@xe=\count@%
+ %
+ \@f=1000000%
+ \count@=\@yi%
+ \divide\count@\@f \@ya=\count@%
+ \multiply\count@-\@f \advance\count@\@yi \@yb=\count@%
+ \count@=\@yf%
+ \divide\count@\@f \@yc=\count@%
+ \multiply\count@-\@f \advance\count@\@yf%
+ \@f=1000%
+ \@ye=\count@%
+ \divide\count@\@f \@yd=\count@%
+ \multiply\count@-\@f \advance\count@\@ye \@ye=\count@%
+ %
+ \edef\@frac{} % digits of fractional part
+ %
+ \@mul ee \relax\@shift % 10^-18
+ \@mul de ed \relax\@shift % 10^-15
+ \@mul ce ec dd \relax\@shift % 10^-12
+ \@mul be eb cd dc \relax\@saveshift % 10^-9
+ \@mul bd db cc \relax\@saveshift % 10^-6
+ \@mul ae ea bc cb \relax\@saveshift % 10^-3
+ \multiply\@xa\@f \multiply\@xc\@f % 10^3
+ \@mul ad da ac ca \relax%
+}
+
+\def\@mul#1#2#3{%
+ \count@=\csname @x#1\endcsname%
+ \multiply\count@\csname @y#2\endcsname%
+ \advance\@product\count@%
+ %
+ \ifx#3\relax%
+ \let\next=\relax%
+ \else%
+ \let\next=\@mul%
+ \fi%
+ \next#3%
+}
+
+\def\@shift{%
+ \divide\@product\@f%
+}
+
+\def\@saveshift{%
+ % Save rightmost digits
+ \count@=\@product%
+ \divide\@product\@f%
+ \multiply\@product\@f%
+ \advance\count@-\@product%
+ \advance\count@\@f%
+ \edef\@frac{\expandafter\@ignorenext\number\count@\@frac}%
+ %
+ \divide\@product\@f%
+}
+
+%% \Rdiv<macro><value><value> Division
+\def\Rdiv#1#2#3{\@callc\@Radd#1{#2}{#3}}
+
+\def\@Rdiv#1#2.#3.#4\relax#5.#6.#7\relax{%
+ % #1 Macro, witch gets the result
+ % #2 integer part of 1st value
+ % #3 fractional part of 1st value
+ % #4 dummy to swallow everthing after the 2nd '.'
+ % #5 integer part of 2nd value
+ % #6 fractional part of 2nd value
+ % #7 dummy to swallow everthing after the 2nd '.'
+ %
+ \message{Error: Rdiv not ready}
+ %
+ \@readvalue\@xs\@xi\@xf{#2}{#3}%
+ \@readvalue\@ys\@yi\@yf{#5}{#6}%
+ %
+ \ifnum\@yi=\@zero
+ \@xi=\@zero
+ \else
+ \divide\@xi\@yi
+ \fi
+ %
+ \@store#1\@xi\@xf%
+}
+
+%% \Rneg<macro><value> Negation
+\def\Rneg#1#2{%
+ % Expand the value and split it into the integer and the fractional part
+ \edef\next{\noexpand\@Rneg\noexpand#1#2..\noexpand\relax}%
+ \next%
+}
+
+\def\@Rneg#1#2.#3.#4\relax{
+ % #1 Macro, witch gets the result
+ % #2 Integer part of value
+ % #3 Fractional part of value
+ % #4 Remaining tokens
+ %
+ \@readvalue\@xs\@xi\@xf{#2}{#3}%
+ %
+ % Change sign
+ \multiply\@xi-\@ne%
+ \multiply\@xf-\@xs%
+ %
+ % Store result
+ \@store#1\@xi\@xf%
+}
+
+%%
+%% \Rtrunc<macro><precision><value> Truncate value to specified precision
+\def\Rtrunc#1#2#3{%
+ % Expand parameter and split the value into the integer and fractional part
+ \edef\next{\noexpand\@Rtrunc\noexpand#1#2#3..\noexpand\relax}%
+ \next%
+}
+
+\def\@Rtrunc#1#2#3.#4.#5\relax{%
+ % #1 Macro, witch gets the result
+ % #2 Number of decimal places
+ % #3 Integer part of value
+ % #4 Fractional part of value
+ % #5 dummy to swallow everthing after the 2nd '.'
+ %
+ \count@=#2%
+ \edef\next{\empty}%
+ \ifnum\count@>\@zero%
+ \expandafter\@@Rtrunc#4000000000\relax%
+ \fi%
+ \edef#1{#3\next}%
+}
+
+\def\@@Rtrunc#1#2#3#4#5#6#7#8#9{%
+ % #1...#9 fractional part, padded with trailing zeros
+ \edef\next{.#1%
+ \ifnum\count@>1 #2\fi%
+ \ifnum\count@>2 #3\fi%
+ \ifnum\count@>3 #4\fi%
+ \ifnum\count@>4 #5\fi%
+ \ifnum\count@>5 #6\fi%
+ \ifnum\count@>6 #7\fi%
+ \ifnum\count@>7 #8\fi%
+ \ifnum\count@>8 #9\fi%
+ }%
+ \@swallow%
+}
+
+%%
+%% \Rifle<value><value> Test v1 < v2
+\def\Rifle#1#2{\@callb\@Rifle{#1}{#2}}
+
+\def\@Rifle#1.#2.#3\relax#4.#5.#6\relax{%
+ % #1 integer part of 1st value
+ % #2 fractional part of 1st value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ % #4 integer part of 2nd value
+ % #5 fractional part of 2nd value
+ % #6 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ \@readvalue\@ys\@yi\@yf{#4}{#5}%
+ %
+ \ifnum\@xs<\@ys%
+ \Rtesttrue%
+ \else%
+ \ifnum\@xs>\@ys%
+ \Rtestfalse%
+ \else%
+ \Rtestfalse%
+ \ifnum\@xi<\@yi \Rtesttrue \fi%
+ \ifnum\@xi=\@yi%
+ \multiply\@xf\@xs \multiply\@yf\@ys%
+ \ifnum\@xf<\@yf \Rtesttrue \fi%
+ \fi%
+ \fi%
+ \fi%
+ %
+ \ifRtest%
+}
+
+%% \Rifeq<value><value> Test v1 = v2
+\def\Rifeq#1#2{\@callb\@Rifeq{#1}{#2}}
+
+\def\@Rifeq#1.#2.#3\relax#4.#5.#6\relax{%
+ % #1 integer part of 1st value
+ % #2 fractional part of 1st value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ % #4 integer part of 2nd value
+ % #5 fractional part of 2nd value
+ % #6 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ \@readvalue\@ys\@yi\@yf{#4}{#5}%
+ %
+ \Rtestfalse%
+ \ifnum\@xi=\@yi\ifnum\@xf=\@yf \Rtesttrue \fi\fi%
+ \ifRtest%
+}
+
+%% \Rifgt<value><value> Test v1 > v2
+\def\Rifgt#1#2{\@callb\@Rifgt{#1}{#2}}
+
+\def\@Rifgt#1.#2.#3\relax#4.#5.#6\relax{%
+ % #1 integer part of 1st value
+ % #2 fractional part of 1st value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ % #4 integer part of 2nd value
+ % #5 fractional part of 2nd value
+ % #6 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ \@readvalue\@ys\@yi\@yf{#4}{#5}%
+ %
+ \ifnum\@xs>\@ys%
+ \Rtesttrue%
+ \else%
+ \ifnum\@xs<\@ys%
+ \Rtestfalse%
+ \else%
+ \Rtestfalse%
+ \ifnum\@xi>\@yi \Rtesttrue \fi%
+ \ifnum\@xi=\@yi%
+ \multiply\@xf\@xs \multiply\@yf\@ys%
+ \ifnum\@xf>\@yf \Rtesttrue \fi%
+ \fi%
+ \fi%
+ \fi%
+ %
+ \ifRtest%
+}
+
+%% \Rifneg<value> Test v < 0
+\def\Rifneg#1{\@calla\@Rifneg{#1}}
+
+\def\@Rifneg#1.#2.#3\relax{%
+ % #1 Integer part of value
+ % #2 Fractional part of value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ %
+ \ifnum\@xs<0 \Rtesttrue \else \Rtestfalse \fi%
+ \ifRtest%
+ }
+
+%% \Rifzero<value> Test v = 0
+\def\Rifzero#1{\@calla\@Rifzero{#1}}
+
+\def\@Rifzero#1.#2.#3\relax{%
+ % #1 Integer part of value
+ % #2 Fractional part of value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ %
+ \Rtestfalse%
+ \ifnum\@xi=\@zero \ifnum\@xf=\@zero \Rtesttrue \fi \fi%
+ \ifRtest%
+}
+
+%% \Rifpos<value> Test v >= 0
+%% Take care to have a corresponding \fi
+\def\Rifpos#1{\@calla\@Rifpos{#1}}
+
+\def\@Rifpos#1.#2.#3\relax{%
+ % #1 Integer part of value
+ % #2 Fractional part of value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ %
+ \ifnum\@xs<0 \Rtestfalse \else \Rtesttrue \fi%
+ \ifRtest%
+}
+
+%% \Rifint<value> Test v is an integer value
+%% Take care to have a corresponding \fi
+\def\Rifint#1{\@calla\@Rifint{#1}}
+
+\def\@Rifint#1.#2.#3\relax{%
+ % #1 Integer part of value
+ % #2 Fractional part of value
+ % #3 dummy to swallow everthing after the 2nd '.'
+ %
+ \@readvalue\@xs\@xi\@xf{#1}{#2}%
+ %
+ \ifnum\@xf=0 \Rtesttrue \else \Rtestfalse \fi%
+ \ifRtest%
+}
+
+% Utility macros
+
+\def\@calla#1#2{%
+ % #1 Macro to call
+ % #2 Value
+ % Expand the value and split them into the integer and the fractional part
+ \edef\next{\noexpand#1#2..\noexpand\relax}%
+ \next%
+}
+
+\def\@callb#1#2#3{%
+ % #1 Macro to call
+ % #2 1st value
+ % #3 2nd value
+ % Expand the values and split them into the integer and the fractional parts
+ \edef\next{\noexpand#1#2..\noexpand\relax#3..\noexpand\relax}%
+ \next%
+}
+
+\def\@callc#1#2#3#4{%
+ % #1 Macro to call
+ % #2 Macro, witch gets the result
+ % #3 1st value
+ % #4 2nd value
+ % Expand the values and split them into the integer and the fractional parts
+ \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax#4..\noexpand\relax}%
+ \next%
+}
+
+%% \ifRtest ... \else ... \fi Re-execute the last test
+\newif\ifRtest
+
+%
+% Read value
+%
+\def\@readvalue#1#2#3#4#5{%
+ % #1 macro to catch the sign ( -1 or 1 )
+ % #2 macro to catch the integer part (maybe negative)
+ % #3 macro to catch the fractional part (positive)
+ % #4.#5 value
+ %
+ % Regular expression [-...d]d...["."[d...]]
+ % Attention: There has to be at least one digit between "-" and "."!
+ %
+ % Integer part
+ \if !#4! #2=\@zero \else #2=#4 \fi%
+ %
+ % Sign
+ \ifnum#2<\@zero #1=-\@ne \else #1=\@ne \fi%
+ \ifnum#2=\@zero \ifnum #4#5<\@zero #1=-\@ne \fi \fi%
+ %
+ % Fractional part
+ \if !#5!%
+ #3=\@zero%
+ \else%
+ \@@setcount@#5000000000\relax%
+ #3=\count@%
+ \fi%
+}
+
+% Set count@ to fractional part with trailing zeros
+\def\@@setcount@#1#2#3#4#5#6#7#8#9{%
+ % #1...#9 fractional part, padded with '0'
+ \count@=#1#2#3#4#5#6#7#8#9%
+ \@swallow%
+}
+
+% Swallow everything up to next \relax
+\def\@swallow#1\relax{}
+
+%
+% Store result
+%
+\def\@store#1#2#3{%
+ % #1 marcro to catch the result
+ % #2 counter with integer part (maybe negative)
+ % #3 counter with fractional part (maybe negative}
+ %
+ % Sign
+ \edef#1{}%
+ \count@=#3%
+ \ifnum\count@<\@zero%
+ \count@=-\count@%
+ \ifnum#2=\@zero%
+ \edef#1{-}%
+ \fi%
+ \fi%
+ %
+ % Pad fractional part with leading zeros
+ \advance\count@\@mil%
+ %
+ % Store result
+ \edef#1{#1\number#2.\expandafter\@ignorenext\number\count@}%
+}
+
+% Ignore next token
+\def\@ignorenext#1{}
+
+% Restore catcode of "@"
+\catcode`\@=\catamp
diff --git a/macros/generic/realcalc/realdemo.tex b/macros/generic/realcalc/realdemo.tex
new file mode 100644
index 0000000000..fb4022cca1
--- /dev/null
+++ b/macros/generic/realcalc/realdemo.tex
@@ -0,0 +1,6 @@
+\documentstyle[]{article}
+\input{realcalc}
+\begin{document}
+\input{realtest}
+\test
+\end{document}
diff --git a/macros/generic/realcalc/realtest.tex b/macros/generic/realcalc/realtest.tex
new file mode 100644
index 0000000000..7b3a95ef45
--- /dev/null
+++ b/macros/generic/realcalc/realtest.tex
@@ -0,0 +1,291 @@
+% realcalc.tex
+%
+% (C) Frank Buchholz, Jan. 1993
+% e-mail: buchholz@lusty.informatik.uni-dortmund.de
+%%
+%% Type \test\bye
+%%
+
+\input realcalc
+
+% Test
+
+\catcode`@=11
+
+\def\traceon{%
+ \tracingonline \@ne
+ \tracincommands \tw@
+ \tracingstats \tw@
+ \tracingpages \@ne
+ \tracingoutput \@ne
+ \tracinglostchars \@ne
+ \tracingmacros \tw@
+ \tracingparagraphs \@ne
+ \tracingrestores \@ne
+ \showboxbreadth \maxdimen
+ \showboxdepth \maxdimen
+}
+
+\def\traceoff{%
+ \tracingonline \@zero
+ \tracingcommands \@zero
+ \tracingstats \@zero
+ \tracingpages \@zero
+ \tracingoutput \@zero
+ \tracinglostchars \@zero
+ \tracingmacros \@zero
+ \tracingparagraphs \@zero
+ \tracingrestores \@zero
+ \showboxbreadth \maxdimen
+ \showboxdepth \maxdimen
+}
+
+\errorstopmode
+
+\let\sl=\showlists
+\let\st=\showthe
+\let\s=\show
+\def\e{\par \vfill \supereject}
+
+\def\test{%
+ \message{Test REALCALC.TEX \@Rversion:}
+ Test REALCALC.TEX \@Rversion\par\medskip
+ \testadd\medskip
+ \testsub\medskip
+ \testmul\medskip
+ \testdiv\medskip
+ \testneg\medskip
+ \testtrunc\medskip
+ \testifle\medskip
+ \testifeq\medskip
+ \testifgt\medskip
+ \testifneg\medskip
+ \testifzero\medskip
+ \testifpos\medskip
+ \testifint\medskip
+}
+
+\def\testadd{%
+ \message{Radd}
+ Test: Radd\par
+ \def\a{1234.5678}
+ \def\b{4321.8765}
+ \Radd\r{123456789.987654321}{4321.123456789}
+ \r={123461111.111111110}\par
+ \Radd\r\a\b \r={5556.4443}\par
+ \Radd\r{-\a}\b \r={3087.3087}\par
+ \Radd\r\a{-\b} \r={-3087.3087}\par
+ \Radd\r{-\a}{-\b} \r={-5556.4443}\par
+}
+
+\def\testsub{%
+ \message{Rsub}
+ Test: Rsub\par
+ \def\a{1234.5678}
+ \def\b{4321.8765}
+ \Rsub\r\a{-\b} \r={5556.4443}\par
+ \Rsub\r{-\a}{-\b} \r={3087.3087}\par
+ \Rsub\r\a\b \r={-3087.3087}\par
+ \Rsub\r{-\a}\b \r={-5556.4443}\par
+}
+
+\def\testmul{%
+ \message{Rmul}
+ Test: Rmul\par
+ \def\a{1234}
+ \def\b{4321}
+ \Rmul\r{\a}{\b} \Rtrunc\r0\r \r={5332114}\par
+ \Rmul\r{-\a}{\b} \Rtrunc\r0\r \r={-5332114}\par
+ \Rmul\r{\a}{-\b} \Rtrunc\r0\r \r={-5332114}\par
+ \Rmul\r{-\a}{-\b} \Rtrunc\r0\r \r={5332114}\par
+ \Rmul\r\a0 \Rtrunc\r0\r \r={0}\par
+ \Rmul\r0\a \Rtrunc\r0\r \r={0}\par
+ \Rmul\r00 \Rtrunc\r0\r \r={0}\par
+ \Rmul\r\a1 \Rtrunc\r0\r \r={\a}\par
+ \Rmul\r1\a \Rtrunc\r0\r \r={\a}\par
+ \Rmul\r11 \Rtrunc\r0\r \r={1}\par
+ \Rmul\r\a{-1} \Rtrunc\r0\r \r={-\a}\par
+ \Rmul\r{-1}\a \Rtrunc\r0\r \r={-\a}\par
+ \Rmul\r{-1}{-1} \Rtrunc\r0\r \r={1}\par
+
+ \Rmul\r{46340.123456789}{10.123456789}\r={469122.2374}\par
+ \Rmul\r{46340.123456789}{1}\r={46340.123456789}\par
+ \Rmul\r{46340.123456789}{100}\r={4634012.3456789}\par
+ \Rmul\r{0.5}{0.5} \r={0.25}\par
+ \Rmul\r\r\r \r={0.0625}\par
+ \Rmul\r\r\r \r={0.00390625}\par
+ \Rmul\r\r\r \r={0.000015258}\par
+ \Rmul\r\r\r \r={0}\par
+ \Rmul\r{1.6}{1.6} \r={2.56}\par
+ \Rmul\r\r\r \r={6.5536}\par
+ \Rmul\r\r\r \r={42.94967296}\par
+ \Rmul\r\r\r \r={1844.674407}\par
+ \Rmul\r\r\r \r={3402823.669}\par
+}
+
+\def\testdiv{%
+ \message{Rdiv}
+ Test: Rdiv\par
+ not ready\par
+}
+
+\def\testneg{%
+ \message{Rneg}
+ Test: Rneg\par
+ -\ 0 = \Rneg\r{0}\r\par
+ -\ -1 = \Rneg\r{-1}\r\par
+ -\ 1 = \Rneg\r{1}\r\par
+ -\ 0.5 = \Rneg\r{0.5}\r\par
+ -\ -0.5 = \Rneg\r{-0.5}\r\par
+ -\ -1234.5678 = \Rneg\r{-1234.5678}\r\par
+ -\ 1234.5678 = \Rneg\r{1234.5678}\r\par
+}
+
+\def\testtrunc{%
+ \message{Rtrunc}
+ Test: Rtrunc\par
+ \def\a{12345.123456789012345}
+ 0:\ \Rtrunc\r0\a\r\ \Rtrunc\r00\r\par
+ 1:\ \Rtrunc\r1\a\r\ \Rtrunc\r10\r\par
+ 2:\ \Rtrunc\r2\a\r\ \Rtrunc\r20\r\par
+ 3:\ \Rtrunc\r3\a\r\ \Rtrunc\r30\r\par
+ 4:\ \Rtrunc\r4\a\r\ \Rtrunc\r40\r\par
+ 5:\ \Rtrunc\r5\a\r\ \Rtrunc\r50\r\par
+ 6:\ \Rtrunc\r6\a\r\ \Rtrunc\r60\r\par
+ 7:\ \Rtrunc\r7\a\r\ \Rtrunc\r70\r\par
+ 8:\ \Rtrunc\r8\a\r\ \Rtrunc\r80\r\par
+ 9:\ \Rtrunc\r9\a\r\ \Rtrunc\r90\r\par
+}
+
+\def\testifle{%
+ \message{Rifle}
+ Test: Rifle\par
+ 0 $<$ 0 \Rifle{0}{0} fehler\else ok\fi\par
+ 0 $<$ 1 \Rifle{0}{1} ok\else fehler\fi\par
+ 1 $<$ 0 \Rifle{1}{0} fehler\else ok\fi\par
+ 1 $<$ 1 \Rifle{1}{1} fehler\else ok\fi\par
+ 1 $<$ 2 \Rifle{1}{2} ok\else fehler\fi\par
+ 2 $<$ 1 \Rifle{2}{1} fehler\else ok\fi\par
+ 0 $<$ -1 \Rifle{0}{-1} fehler\else ok\fi\par
+ -1 $<$ 0 \Rifle{-1}{0} ok\else fehler\fi\par
+ -1 $<$ -1 \Rifle{-1}{-1} fehler\else ok\fi\par
+ -1 $<$ -2 \Rifle{-1}{-2} fehler\else ok\fi\par
+ -2 $<$ -1 \Rifle{-2}{-1} ok\else fehler\fi\par
+
+ 1 $<$ 1.2 \Rifle{1}{1.2} ok\else fehler\fi\par
+ 1.2 $<$ 1 \Rifle{1.2}{1} fehler\else ok\fi\par
+ -1 $<$ -1.2 \Rifle{-1}{-1.2} fehler\else ok\fi\par
+ -1.2 $<$ -1 \Rifle{-1.2}{-1} ok\else fehler\fi\par
+
+ 0.1 $<$ 0.1 \Rifle{0.1}{0.1} fehler\else ok\fi\par
+ 0.1 $<$ 0.2 \Rifle{0.1}{0.2} ok\else fehler\fi\par
+ 0.2 $<$ 0.1 \Rifle{0.2}{0.1} fehler\else ok\fi\par
+ -0.1 $<$ -0.2 \Rifle{-0.1}{-0.2} fehler\else ok\fi\par
+ -0.1 $<$ -0.1 \Rifle{-0.1}{-0.1} fehler\else ok\fi\par
+ -0.2 $<$ -0.1 \Rifle{-0.2}{-0.1} ok\else fehler\fi\par
+}
+
+\def\testifeq{%
+ \message{Rifeq}
+ Test: Rifeq\par
+ 0 = 0 \Rifeq{0}{0} ok\else fehler\fi\par
+ 0 = 1 \Rifeq{0}{1} fehler\else ok\fi\par
+ 1 = 0 \Rifeq{1}{0} fehler\else ok\fi\par
+ 1 = 1 \Rifeq{1}{1} ok\else fehler\fi\par
+ 1 = 2 \Rifeq{1}{2} fehler\else ok\fi\par
+ 2 = 1 \Rifeq{2}{1} fehler\else ok\fi\par
+ 0 = -1 \Rifeq{0}{-1} fehler\else ok\fi\par
+ -1 = 0 \Rifeq{-1}{0} fehler\else ok\fi\par
+ -1 = -1 \Rifeq{-1}{-1} ok\else fehler\fi\par
+ -1 = -2 \Rifeq{-1}{-2} fehler\else ok\fi\par
+ -2 = -1 \Rifeq{-2}{-1} fehler\else ok\fi\par
+
+ 1 = 1.2 \Rifeq{1}{1.2} fehler\else ok\fi\par
+ 1.2 = 1 \Rifeq{1.2}{1} fehler\else ok\fi\par
+ -1 = -1.2 \Rifeq{-1}{-1.2} fehler\else ok\fi\par
+ -1.2 = -1 \Rifeq{-1.2}{-1} fehler\else ok\fi\par
+
+ 0.1 = 0.1 \Rifeq{0.1}{0.1} ok\else fehler\fi\par
+ 0.1 = 0.2 \Rifeq{0.1}{0.2} fehler\else ok\fi\par
+ 0.2 = 0.1 \Rifeq{0.2}{0.1} fehler\else ok\fi\par
+ -0.1 = -0.2 \Rifeq{-0.1}{-0.2} fehler\else ok\fi\par
+ -0.1 = -0.1 \Rifeq{-0.1}{-0.1} ok\else fehler\fi\par
+ -0.2 = -0.1 \Rifeq{-0.2}{-0.1} fehler\else ok\fi\par
+}
+
+\def\testifgt{%
+ \message{Rifgt}
+ Test: Rifgt\par
+ 0 $>$ 0 \Rifgt{0}{0} fehler\else ok\fi\par
+ 0 $>$ 1 \Rifgt{0}{1} fehler\else ok\fi\par
+ 1 $>$ 0 \Rifgt{1}{0} ok\else fehler\fi\par
+ 1 $>$ 1 \Rifgt{1}{1} fehler\else ok\fi\par
+ 1 $>$ 2 \Rifgt{1}{2} fehler\else ok\fi\par
+ 2 $>$ 1 \Rifgt{2}{1} ok\else fehler\fi\par
+ 0 $>$ -1 \Rifgt{0}{-1} ok\else fehler\fi\par
+ -1 $>$ 0 \Rifgt{-1}{0} fehler\else ok\fi\par
+ -1 $>$ -1 \Rifgt{-1}{-1} fehler\else ok\fi\par
+ -1 $>$ -2 \Rifgt{-1}{-2} ok\else fehler\fi\par
+ -2 $>$ -1 \Rifgt{-2}{-1} fehler\else ok\fi\par
+
+ 1 $>$ 1.2 \Rifgt{1}{1.2} fehler\else ok\fi\par
+ 1.2 $>$ 1 \Rifgt{1.2}{1} ok\else fehler\fi\par
+ -1 $>$ -1.2 \Rifgt{-1}{-1.2} ok\else fehler\fi\par
+ -1.2 $>$ -1 \Rifgt{-1.2}{-1} fehler\else ok\fi\par
+
+ 0.1 $>$ 0.1 \Rifgt{0.1}{0.1} fehler\else ok\fi\par
+ 0.1 $>$ 0.2 \Rifgt{0.1}{0.2} fehler\else ok\fi\par
+ 0.2 $>$ 0.1 \Rifgt{0.2}{0.1} ok\else fehler\fi\par
+ -0.1 $>$ -0.2 \Rifgt{-0.1}{-0.2} ok\else fehler\fi\par
+ -0.1 $>$ -0.1 \Rifgt{-0.1}{-0.1} fehler\else ok\fi\par
+ -0.2 $>$ -0.1 \Rifgt{-0.2}{-0.1} fehler\else ok\fi\par
+}
+
+\def\testifneg{%
+ \message{Rifneg}
+ Test: Rifneg\par
+ 0: \Rifneg{0} fehler\else ok\fi\par
+ 0.5: \Rifneg{0.5} fehler\else ok\fi\par
+ .5: \Rifneg{.5} fehler\else ok\fi\par
+ 1: \Rifneg{1} fehler\else ok\fi\par
+ -0: \Rifneg{-0} fehler\else ok\fi\par
+ -0.5: \Rifneg{-0.5} ok\else fehler\fi\par
+ -1: \Rifneg{-1} ok\else fehler\fi\par
+}
+
+\def\testifzero{%
+ \message{Rifzero}
+ Test: Rifzero\par
+ 0: \Rifzero{0} ok\else fehler\fi\par
+ 0.5: \Rifzero{0.5} fehler\else ok\fi\par
+ .5: \Rifzero{.5} fehler\else ok\fi\par
+ 1: \Rifzero{1} fehler\else ok\fi\par
+ -0: \Rifzero{-0} ok\else fehler\fi\par
+ -0.5: \Rifzero{-0.5} fehler\else ok\fi\par
+ -1: \Rifzero{-1} fehler\else ok\fi\par
+}
+
+\def\testifpos{%
+ \message{Rifpos}
+ Test: Rifpos\par
+ 0: \Rifpos{0} ok\else fehler\fi\par
+ 0.5: \Rifpos{0.5} ok\else fehler\fi\par
+ .5: \Rifpos{.5} ok\else fehler\fi\par
+ 1: \Rifpos{1} ok\else fehler\fi\par
+ -0: \Rifpos{-0} ok\else fehler\fi\par
+ -0.5: \Rifpos{-0.5} fehler\else ok\fi\par
+ -1: \Rifpos{-1} fehler\else ok\fi\par
+}
+
+\def\testifint{%
+ \message{Rifint}
+ Test: Rifint\par
+ 0: \Rifint{0} ok\else fehler\fi\par
+ -0: \Rifint{-0} ok\else fehler\fi\par
+ 1: \Rifint{1} ok\else fehler\fi\par
+ -1: \Rifint{-1} ok\else fehler\fi\par
+ 0.5: \Rifint{0.5} fehler\else ok\fi\par
+ -0.5: \Rifint{-0.5} fehler\else ok\fi\par
+ 1.5: \Rifint{1.5} fehler\else ok\fi\par
+ -1.5: \Rifint{-1.5} fehler\else ok\fi\par
+}
diff --git a/macros/generic/rlepsf/read.me b/macros/generic/rlepsf/read.me
new file mode 100644
index 0000000000..77c5e5f051
--- /dev/null
+++ b/macros/generic/rlepsf/read.me
@@ -0,0 +1,12 @@
+The two other files in this directory are :
+
+rlepsf.tex (size 6503)
+
+--- a macro package for use with epsf.tex which allows postscript
+labels in an eps file to be replaced by TeX labels and
+
+rlepsdoc.ps (size 207198)
+
+--- the corresponding postscript documentation file.
+
+Colin Rourke (email cpr@maths.warwick.ac.uk) 16-12-96
diff --git a/macros/generic/rlepsf/rlepsdoc.ps b/macros/generic/rlepsf/rlepsdoc.ps
new file mode 100644
index 0000000000..a43139b7b8
--- /dev/null
+++ b/macros/generic/rlepsf/rlepsdoc.ps
@@ -0,0 +1,6208 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.58 Copyright 1986, 1994 Radical Eye Software
+%%Title: rlepsdoc.dvi
+%%CreationDate: Mon Dec 16 20:42:39 1996
+%%Pages: 9
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSCommandLine: C:\TEX\DVIPS.EXE rlepsdoc
+%DVIPSParameters: dpi=600, compressed, comments removed
+%DVIPSSource: TeX output 1996.12.16:2041
+%%BeginProcSet: texc.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
+/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
+gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
+add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
+/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
+dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
+adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
+idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin @defspecial
+
+ (MTG set-up) pop userdict /MTGdict 99 dict put MTGdict begin /Mshow
+{[ MTGdict /rllist get aload length 2 add -1 roll currentpoint transform
+] MTGdict /rllist 3 2 roll put} def /findlabel {/sought exch def /MTGx
+3 index def /MTGy 2 index def aload length 3 idiv dup 0 eq {pop} {{2
+index sought eq {/MTGy exch def /MTGx exch def pop} {pop pop pop} ifelse}
+repeat} ifelse exch MTGx exch sub exch MTGy exch sub idtransform translate
+} def end
+
+@fedspecial end TeXDict begin
+39158280 55380996 1095 600 600 (/TEX/TEMP/rlepsdoc.dvi)
+@start /Fa 31 124 df<EB0780EB1FC0133F137FEBFF805A3803FE00485A485AEA1FE0
+485A48C7FC12FE5A12F05A121064B82B>19 D<EA01E0EA07F0EA0FF8121FA61207120013
+F0A2120113E0120313C01207EA0F80EA1F005A127E5A5A5A12600D1A6EB81A>39
+D<EC03FC91381FFF80027F13C091B512E0903903FC07F0903907E003F890390FC001FCEB
+1F00013E13001420EB7C70EB78F81501EBF87813F0A29038F8F803D9FFF013F8EB7FE090
+393FC007F0EB1F0090C7EA0FE0ED1FC0ED3F80ED7F00ECFFFE4913F815E0497F90380007
+F8EC01FC6E7EA381A5120C003E5B007F5C5AA21403485C5A00F0495A4A5A6C495A4A5A00
+7C495A267F01FFC7FC383FFFFC6C13F0000713C0D801FEC8FC263978B62B>51
+D<EE03C01607A24C7EA2161FA2163F167FA216FFA25DA2ED03DF1507169F150F161F151E
+83153C160F157815F815F0140115E0EC03C0A2EC0780A2EC0F005C141E143E143C4A8002
+7FB5FC91B6FCA25B903903E000075C495AA249C7FCA2131E133E133C137C5B486C810007
+150FB5D8C001B512F05DA21480343B7BBA3E>65 D<0107B612FCEFFF808418F0903B000F
+F0003FF8EF07FC021F6E7E4BEB00FFA2F07F80023F153F4B15C0A2181F147F4B15E0A314
+FF92C8FCA349163F5CA219C013034A157FA3010717804A15FFA21900010F5D4A5DA24D5A
+131F4A4A5AA24D5A013F5E4A4A5A173F4D5A017F4BC7FC4A495A4C5AEE0FF001FFEC3FE0
+4A48B45AB8C8FC16FC16F093C9FC3B387BB73F>68 D<0107B8FCA318FE903A000FF00007
+1700021F157E5D183EA2023F153C5DA3147F5DEE03C00407137C02FFEC80781500180016
+0F4992C7FC4A5B5E16FF49B55AA4903907FC00FC4A137CA3010F14785CA216F8011F5C5C
+93C8FCA2133F5CA3137F5CA313FFA2B67EA438387BB737>70 D<0107B500F090B512C05F
+A39026000FF0C7383FF80019C0021F93C7FC4B147EEF01F84D5A023F4A5A4B495A4DC8FC
+177E027F5C4B485A4C5AEE07C002FFEB1F804B48C9FC167E5E49495A9138FE07FC150F15
+1F0103497EECFC7F9138FDF9FFECFFF14913E103C07F15004A137F4948805C4A6D7EA201
+1F141F4A80A2160F013F815C707EA2017F14034A80A2160101FF8191C7487FB500FE013F
+13FCA25EA242387BB741>75 D<902607FFFC923803FFFC61A261D9000F93381FFC008102
+1F163F021E5F197B19F7143E023C923801E7F0A2F003CF027CED078FDA787F5EF00F0F19
+1F02F8151E02F0033C5BA2F0783F130102E003F05BEF01E0DB3F80147F0103ED03C002C0
+94C7FCEF07804D485A13070280021E5BA2EF3C01010F157802005E92381FC0F0180349EC
+C1E0011EDAC3C05BA29338C78007133E013CDACF005B16DE180F017CEB0FFC01785F5E01
+F84A131F1201D807FC4A5CB500E0021FB57E16C0168015074E387BB74B>77
+D<0107B612F817FF18C018E0903B000FF0003FF0021FEC0FF8EF03FC5DEF01FE143FA25D
+A2147F17035DA214FFEF07FC92C7FC18F849150F18F04AEC1FE0EF3FC00103ED7F809338
+01FF004AEB0FFE91B612F817E049158004F8C7FC02F8C9FC130FA25CA2131FA25CA2133F
+A25CA2137FA25CA213FFA291CAFCB512FEA437387BB739>80 D<0003B812F85A18F0A226
+0FFC00EB801F01E0150749EC0003484816E0495AA2003E5CA2003C010315C0A2007C5C12
+780207140700F81780485CA2C7000F91C7FCA25DA2141FA25DA2143FA25DA2147FA25DA2
+14FFA292C9FCA25BA25CA21303A25CA21307A2130F003FB512FEA4353772B63C>84
+D<14FCEB03FF010F138E013FEBFF80EB7F87EBFE0348487E48486C1300485A120F5B001F
+5C485A1401A2D87F805BA2140312FF01005BA21407A248ECF0301678020F13F816F0EC1F
+E0A2EC3FE1007F017F13E0ECFFE3D83F8314C0391FFFE7FF6C01C313806C010113003900
+FC007C252578A32B>97 D<EC3F80903801FFF0010713F8011F13FC90383FC07EEBFF0048
+4813FE3803FC01EA07F813F0D80FE013FC001F14F89038C00060003F1400A2485AA312FF
+90C8FCA45AA3150C151E007F143E157C90388001F8003FEB07F0391FE03FE06CB512806C
+1400000113F838007FC01F2578A327>99 D<16FE157FA316FC1503A316F8A21507A216F0
+A2150FA216E0A2151FA216C014FC903803FF3F010F13BF013FEBFF80EB7F87EBFE034848
+7E48486C1300485A120F5B001F5C485A1401A2D87F805BA2140312FF01005BA21407A248
+ECF0301678020F13F816F0EC1FE0A2EC3FE1007F017F13E0ECFFE3D83F8314C0391FFFE7
+FF6C01C313806C010113003900FC007C273A78B82B>I<EC3F80903801FFE0010F13F849
+13FCEB7FC09038FF007ED801FC133E485A485A000F147E4848137C15FC393FC001F8140F
+48B512E015C0150014F0D8FF80C7FC90C8FCA55AA2007F140C151E153E6C147C90388001
+F8391FC007F09038E03FE06CB51280000314006C13F838003FC01F2578A327>I<ED07E0
+ED1FF8ED3FFCED7FFE15FCEC01FD15F9140316FCA2913807F0F01600A3140F5DA4141F5D
+A3011FB512E05BA39039003F8000A3147F92C7FCA45C5CA413015CA413035CA41307A25C
+A3130F5CA4495AA35C121EEA3F3FD87FBFC8FCA2EAFFBE137E485AEA7FF85B6C5AEA0F80
+274B82B91A>I<EC07E0EC3FF891387FFE7049B512FC903803F83F903807F01F90380FE0
+0F90391FC007F8EB3F80137FEBFF0016F0485A150F12034914E0A2151F12074914C0A215
+3FA2491480A2157FA2EDFF0000035B6D5A00015B9038FC1FFE6CB5FC7FEB1FF9903807E1
+FCEB00011403A25DA21407001E5C123F387F800F4A5A00FF495A49485A484848C7FC387F
+FFFE6C13F86C13E0000390C8FC26357DA327>I<EB07F0EA03FFA35CEA001FA35CA3133F
+5CA3137F91C8FCA35B5BEC0FE0EC3FFC0001EBFFFE90B6FC9138F07F80ECC03F48138014
+005B5B485AA25B157F000F15005BA25D001F5C5B14015D123FD98003130CEDF81E163E00
+7F0107133C010013F0167C167848ECE0F848ECE1F0EDE3E015FF486D13C06E13000070EB
+007C273A7AB82B>I<14F0EB01F813031307A3EB03F0EB01C090C7FCAB137C48B4FC0007
+13805A381F9FC0EA1E0FEA3E1F123C1278A2EAF83F00F01380137F00E0130012005B5BA2
+12015B12035BA200071318EBF03C147C000F137813E014F814F013C1EBC3E0EBC7C013FF
+6C13803803FE00EA00F816387AB61A>I<150EED3F80157FA31600A2151C92C7FCABEC1F
+80EC7FE049487E497FEB07E390380FC1FC1481EB1F01133E1403133C017C5B1378EB7007
+13005DA2140FA25DA2141FA25DA2143FA25DA2147FA292C7FCA25CA25CA21301A25CA213
+03001E5B123F387F87F0138F00FF5B495A38FE7F80D87FFFC8FC13FC6C5AEA0FC0214883
+B61A>I<EB07F0EA03FFA3485BEA001FA35CA3133F5CA3137F91C8FCA35B5B151FED7FC0
+0001ECFFE0EBFC03EC07E1EC0F830003EB1F0F9038F83E1F147C14F82607F9F013C0EBF3
+E09039F7C00F00D9FF80C7FC4848C8FC6D7E14E014F84813FE13C3EBC0FF80003F80D980
+3F13C0ED81E0EC7F83007FEC03C01300A2ED07805A48EC0F006E5A15FE486D5A6E5A0070
+EB03E0233A7AB827>I<EB0FE0EA07FFA314C0EA003FA31480A2137FA21400A25BA25BA2
+1201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA25BA2127FA21303EB
+0780EAFF0F140012FEA2131EA2133E5BEA7FF8123F6C5AEA07C0133A7AB815>I<D801F0
+017FEB03F83C07FC03FFC00FFF260FFE0FD9F03F7F486C486DB57E3D3E7F3F03F9FC1FE0
+3C3C3FFC01FFF00F02F814E0007801F014C002E01480D97FC0140000F801805B12F00200
+5B48480103141FC660495CA200010207143F61495C187F0003020F92C7FCA2494AEBFF03
+9538FE07800007021F150F050114004902C013FC61000F023F151EF0F83E4902805C725A
+18FF4991C75BF07FC06CC7001C021FC7FC41257AA345>I<D801F013FE3A07FC03FFC026
+0FFE0F7F261FFF3F7F3A1E7F7F07F8393C3FFC0314F8007C13F0007813E0EB7FC000F813
+8012F0140048481307C65D5BA20001140F5E5B151F00035DA249013F13C0EE81E0000715
+83037F13C04914031607000F1680ED7E0F49EC1F00163EED7FFE496D5AED1FF06CC7EA07
+C02B257AA32F>I<EC3F80903801FFF0010713FC011F7F90383FC0FF9039FF007F804848
+133F4848EB1FC0485A5B4848EB0FE0121F49131F123FA2485AA2153F00FF15C090C7FCA2
+157F16805AEDFF00A24A5A5D007F495A14074A5A393F801FC0391FE07F806CB5C7FC6C13
+FC000113F038007F80232578A32B>I<903907C007E090391FF01FF890393FF87FFE496C
+B5FC903AF9FDF83F809039F0FFE01F03C013C04848EB800F030013E0EBE1FE1203EBC1FC
+A20183141FEA00035CA20107143F17C05CA2010F147F17805CEEFF00131F5E15015E013F
+495A6E485A4B5A9138FC3FC049B55A4BC7FCEC1FF8EC07E049C9FCA25BA21201A25BA212
+03A25B387FFFE0B5FCA32B3480A32B>I<3901F003F03907FC0FFC390FFE3FFE486C487E
+3A1E7FFC1F80393E3FF00F003CEBE03F007C147F007813C0EB7F8000F8150000F0130015
+3C484890C7FCC6FC5BA21201A25BA21203A25BA21207A25BA2120FA25BA35BA26CC9FC21
+257AA323>114 D<14FE903807FF80011F13C04913E090387F03F0EBFE01EBFC033801F8
+07A3000314E0EC03C06DC7FCEBFF8014F014FC6C13FFA26C14806D13C0131F1301EB003F
+000C131F123F5A481480A348EB3F00485B14FE387E03FC387FFFF8001F13E06C5BD801FE
+C7FC1C257AA322>I<EB03C0EB07E0130FA2131FA214C0A2133FA21480A2137FA21400A2
+007FB5FCB6FC14FEA23801FE00A25BA21203A25BA21207A25BA2120FA25BA2121FA2EBC0
+0C141E003F133E143CEB807C147814F8EB81F0EB83E0EB87C0381FFF806C13006C5AEA01
+F8183479B21C>I<137C48B414F000076D487E481403381F9FC0D81E0F1307D83E1F5C12
+3C1278150FD8F83F5C00F01380137F00E0EB001F00005D5B5B153F00015D5BA2157F0003
+92C7FC491403EE0780EDFF0F03FE1300A214015E0203131ED9FC07133E2601FE1F5B6CB5
+EA7FFC6D486C5A90393FF81FF090390FE007C029257AA32D>I<01FC1307D803FFEB1FC0
+48EB803F5A261F9FC013E0EA1E0FEA3E1F003C141F0078140F16C0D8F83F130700F01380
+137F00E01300000015805B5B150F000115005BA25D0003141E5B5DA2157C157815F84A5A
+01FC5B000113039038FE0FC06CB55A6D90C7FCEB1FFCEB07F023257AA327>I<007FB612
+FEB7FCA216FC270479972B>123 D E /Fb 1 3 df<0060166000F816F06C1501007E1503
+6CED07E06C6CEC0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A017E495A6D49
+5A6D6C485A6D6C485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E5A6E5AA24A
+7E4A7EECFDF8903801F8FC903803F07E49487E49486C7E49486C7E49486C7E017E6D7E49
+6D7E48486D7E4848147E4848804848EC1F804848EC0FC048C8EA07E0007EED03F0481501
+481500006016602C2C73AC47>2 D E /Fc 1 7 df<15301578B3A8007FB812F8B912FCA2
+6C17F8C80078C8FCB3A5007FB812F8B912FCA26C17F8363A7BB741>6
+D E /Fd 5 114 df<EC3FC0903801FFF0010713FC011F13FF903A3FC07F803C903AFF00
+3FC07C4848011F1378484814E04848130F49ECF0F8000F020713F0484814F14915E0003F
+15FBA24848ECFFC081178000FF160090C7FC5EA25E485DA31507150F007F141FED7FFC6C
+6C01FD133C9038C003F9271FE03FE1137C6CB538C0FFF86C9138007FF0000101F8EB3FE0
+26003FC0EB0F802E257DA336>11 D<147E903803FF80010F13C7013FEBFFC0EB7F83EBFE
+0148487E484814804848137F120F5B001F1500485A5DA248485BA2140112FF01005BA214
+03A248ECF80C161E0207133E163CEC0FF0A2007E011F1378007F133F6C01FF13F801C3EB
+F9F03A1FFFF3FFE06C13C10003018013803A00FC003F0027257DA32D>97
+D<EB3F80EA1FFFA391C7FCC6FCA35BA21201A25BA21203A25BA21207A25B14FE390FF3FF
+8090B512E015F0EC07F8381FFC039038F801FC13F0EBE000484813FEA25BA2007F1301A2
+1300A248130315FC5AA2140715F85AEC0FF0A215E0EC1FC0143F6C1480007EEB7F00007F
+13FE383F83FC381FFFF06C5B6C1380D800FCC7FC1F3A7DB824>I<EC3FC0903801FFF001
+0713FC011F13FE90383FC07FEBFF00484813FF48485AEA07F813F0D80FE013FE001F14FC
+9038C000F8003F1400A2485AA312FF90C8FCA45AA31506150F007F141F153E6C6C13FCEC
+03F8391FE01FF06CB512C06C1400000113FC38003FC020257DA324>I<027E1360903903
+FF81E0010F13C7013FEBEFC090387F83FFEBFE0148487E484814804848137F120F5B001F
+1500485AA25D48485BA300FF130101005BA31403485CA314074A5AA2007E131F007F133F
+6CEBFFE013C36CB5FC6C13DF0003EB9FC03800FC1F1300143F5DA3147F92C7FCA35C5C90
+387FFFF8A423347DA326>113 D E /Fe 2 51 df<13075B133FEA03FFB5FCA3EAFC7F12
+00B3AC007FB5FCA4182A7AA924>49 D<EB7F803803FFF0000F13FC4813FFD83F01138039
+7C007FC0007E133FB4EB1FE01380EC0FF0A31407EA7F00001C130FC7FC15E0141FA2EC3F
+C01580EC7F0014FE495A495A495A495AEB1F8049C7FC017E13F05BEA01F03903E001E0EA
+07C0EA0F8048B5FC5A5AB6FC15C0A31C2A7CA924>I E /Ff 10 122
+df<EC07F8EC3FFF91B512C001038090270FF80FF013F0903A1FE007F80190277FC003FC
+13E09039FF0001FE485A0003913800FF034916C048481587000F178049147F001F168F48
+481600179F179E007F16BE4915FCA25F00FF5E5B5F5FA4127F16FF5D003F5C6D130F001F
+91393FBFC1E06D9038FF1FE1270FF807FC13E36CB539F00FFFC00001DAC00713806C6CD9
+00031300D91FF0EB00FC34297DA73A>11 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80
+EA1F000B0B798A19>58 D<121FEA3F80EA7FC0EAFFE0A313F0A2127F123F121F1200A412
+0113E0A2120313C01207A2EA0F80A2EA1F00123E127E123C12180C1D798A19>I<EC1F80
+ECFFE00103EBF8F0010FEBFDF890391FE0FFFC90383FC03F90387F001F01FE5C0001140F
+485A48485CA2485A001F141F5E485AA2153F007F5D5BA2157F00FF5D5BA215FFEE03C090
+C7FCA24A130703FE13806C13031407D9800FEB0F00003F131FD9C03F5B3A1FE0FEFF3E3A
+0FFFFC7FFC6CEBF03F00019038C01FF83A007F0007E02A297DA730>97
+D<EB0FF0EA0FFF5C5AA2EA007F6D5AA2137FA25CA213FFA291C8FCA25AA25BA21203A25B
+EC1F800007EB7FF09038FDFFF890B512FEECE0FF48EB807F9039FE003F805B4914C0121F
+49131F5BED3FE0123FA25BA2007F147F16C05BA215FF00FF158090C7FCA24A1300A25D48
+13035D1407007E5C007F495A4A5A6C6C485A4A5A261FC1FFC7FC380FFFFC6C5B000113E0
+6C6CC8FC23407DBE27>I<EC07F0EC7FFE49B5FC0107148090390FF80FC090393FE01FE0
+90387F803F9038FF007F485A120349EBFFC0485A000FEC7F8049EB3F00001F1408484890
+C7FCA3127F5BA312FF5BA590C9FC6C15C06DEB01E015031507003FEC0FC06DEB3F806C6C
+EBFE00390FF80FFC6CB512F0000114C06C91C7FCEB1FF023297DA727>I<EE07F8ED07FF
+17F05DA2ED003FEE1FE0A2163FA217C0A2167FA21780A216FFA21700A25DA25EEC1F81EC
+FFE3010313FB010FEBFFFCEB1FE090383FC03F90387F001F01FE5C0001140F485A485A5E
+485A001F141FA248485CA2153F127F495CA2157F12FF495CA215FFEE83C090C71303A24A
+130717806CEB03FE1407D9800FEB0F00003F131FD9C03F5B3A1FE0FEFF3E3A0FFFFC7FFC
+6CEBF03F00019038C01FF83A007F0007E02D407DBE2F>I<91381F80069138FFE03E0103
+EBF8FE010FEBFDFC90381FE0FF90383FC03F90387F001F01FE14F80001140F485A485A16
+F0485A121F151F484814E0A3007F143F4914C0A300FF147F491480A315FF90C71300A35C
+6C495A1407EB800F003F131F6D485A381FE0FF6CB5FC6C13F70001EBC7F838007F071300
+140F5DA3141F5DA3143F5DA2147F013FB51280A2491400A2273A7DA729>113
+D<D903F0137C90391FFE01FF90267FFF0713C090B5008F13E03A01F81FDF873B03F00FFE
+07F0D807C0141FD80F80EBFC3F010013F848157F121E003E02F013E0123C007C011FEB3F
+C0EE0F00C749C7FCA2143F5DA3147F5DA314FF000F91380003C0EA3FC0127F01C1140700
+FF16804A130F01C3EC1F0001835C496C137ED8FC0F5C3A7C1FBF83F83A7FFF3FFFF0263F
+FE0F13C0261FF8075B2707E000FCC7FC2C297DA734>120 D<133FD9FFC0EB01C0486DEB
+07F0486D130F3807C7F8D80F83141FD81F0315E0EA1E07123E003C153FD87C0F15C00078
+5BA2D8F81F147F4A14801200133F4A13FF1700137F5C5D01FF5C1400A21503485D5BA215
+075EA2150F6C6C131F4B5AEC807F90387FC1FF6DB5FC6D5C0107139F903801FE1F90C712
+3F5EA2D801E0137FD807F05C486C13FF001F92C7FC4A5A4A5AEBF0075D9038E01FF09038
+803FE09038C0FF806CB5C8FC6C13FC000113F038007F802C3B7FA72D>I
+E /Fg 8 117 df<143F903801FFC00107EBE38049EBFFE0EB3FC1EB7F809038FF007F48
+4814C05B0003143F485A000F15805B001F147FA248481400A25D127F495BA2140112FF01
+805BA21403161E010013F8A20207133E163C6CEB0FF0021F137C023F1378383F807F02FF
+13F83A1FC1FBF9F03A0FFFF3FFE06C13C16C018013803A00FC003E00272978A72E>97
+D<EE3FC0ED1FFF1780A31500EE7F00A25EA25EA21501A25EA21503A25EA21507A25E143F
+903801FFCF010713EF49EBFFE0EB3FC1EB7F809038FF007F48485C5B0003143F485A000F
+5D5B001F147FA2484891C7FCA25D127F495BA2140112FF01805BA21403161E010013F8A2
+0207133E163C6CEB0FF0021F137C023F1378383F807F02FF13F83A1FC1FBF9F03A0FFFF3
+FFE06C13C16C018013802700FC003EC7FC2A4078BE2E>100 D<EC1FC0ECFFF801077F01
+1F7F90383FE07F90387F803F3A01FF001F804848130F485A49131F48481400121F495B00
+3F147E4A5A397FC01FF890B55AB612C04AC7FC14E00180C8FCA390C9FCA61506150F6C5C
+5D6D137E003F495A391FC007F89038E03FE06CB55A000391C7FC6C13F838003FC0212977
+A72A>I<143C14FEEB01FFA25B14FEA2EB01FCEB00F01400AC133EEBFF80000313C04813
+E013C7EA0F87381F07F0121EEA3E0F003C13E0127CEA781F14C012F8133F00001380A213
+7F1400A25B5B12015BA21203EBF81EA21207EBF03E143C120FEBE07C147814F8EBE1F038
+07E3E0EBFFC06C13806C1300EA007C183E7ABC1C>105 D<01F8EB1FC0D803FEEBFFF026
+07FF8313FC4801877F90389FCFE03A1F0FDF80FF001E9038FE007F003E5B003C5B131F00
+7C5B00785BA226F83FC05B5E00005BA2017F13015E1400A24913035E5B150700015D030F
+133C4914E0A20003021F137CEEC0785B17F00007158117E0491483EEC7C092380FFF8049
+15006F5AD80380EB01F82E297AA733>110 D<EC0FE0EC7FFC49B5FC0107148090391FF0
+3FC090393FC01FE090397F800FF09038FF0007485A484814F812075B120F484814FCA248
+5AA2ED0FF8127F5BA2151F00FF15F05BA2ED3FE0A216C090C7127F16806CECFF006D5A5D
+003F495A6D485A391FE01FF0390FF07FC06CB55A6C49C7FCC613F8EB3FC0262978A72E>
+I<EC7F80903801FFE0010713F84913FCEB3FC0EC007E137E9038FE01FE13FCA20001EB03
+FC140115F8EC006001FF130014F014FE806C14C015E07F011F13F01307EB007F141F140F
+001F1307EA3F80387FC0031407D8FF8013E0A2140F010013C000F8EB1F80007C133F007F
+EBFF00383FFFFC6C5B000713E0C690C7FC1F297AA725>115 D<EB01C0EB07E0A2130FA4
+131F5CA3133F5CA3137F91C7FCA2007FB51280B6FC1500A2C648C7FC12015BA312035BA3
+12075BA3120F5BA3121F5BA3003F131E1380143E143C007F137CEB007814F8495AA2495A
+383F0FC0EBFF806C90C7FCEA0FFCEA03F0193A78B81E>I E /Fh
+3 52 df<131C137CEA01FC12FFA312FE1200B3A7387FFFFCA416247BA321>49
+D<EA01FE3807FFC0001F13F04813F8387E0FFC387C03FEEAFF01A2EB00FFA2147F127E00
+1813FFC7FCA214FE1301EB03FC14F8EB07F0EB0FE0EB1F80EB3F00137E13F83801F00FEA
+03E03807C01F380F801EEA1E00383FFFFE5AB5FC14FCA318247CA321>I<137F3801FFE0
+000713F8487F381F81FEEA3F006D7EA26D7E1380001F5BEA0E00C75A1301495A495AEBFF
+E0148014F0EB01FC6D7E147F1580EC3FC0A2127EB4FCA3EC7F80A2007EEBFF00387F01FE
+6CB45A6C5B000713E0C690C7FC1A257DA321>I E /Fi 22 120 df<B7D8C07FB612E0A6
+D8003F90C8001FEB8000B3A392B8FCA692C8121FB3A5B7D8C07FB612E0A64B3E7DBD52>
+72 D<B712F0A6D8003F90C9FCB3AB187EA418FE18FCA41701A31703A2EF07F8170F171F
+173F177FEE01FF160FB9FCA218F0A4373E7DBD3F>76 D<B66C91B612E081A2818181D800
+3F6D9139003F800081A2818202BF7F029F7FA2028F7F02877F02837F02817FA202807F6F
+7F6F7F6F7F83816F7F6F7F6F7F6F7FA27013807013C07013E07013F0A27013F87013FC70
+13FE7013FF7113BFA27113FF838383A283838384A28484848484B612E08484197F193FA2
+4B3E7DBD52>78 D<B87E17FCEFFF8018F08418FE28003FFE00017FDC003F7F050F7F717F
+A2717FA285A761A25F614D5B4D5B4D90C8FC4CB45A91B75A18F018C095C9FC18C09126FE
+000F7F04037F707F707F717EA3717EA685A5F207809638C00FC0A283F1E01FB7008002F0
+138071EBF83F7190B512008305005C063F13F8CB000113E04A3F7DBD4E>82
+D<B7D8C001B61280A6D8003F90C9007EC7FCB3B3A319FE6D5FA2816D16014E5A6D7F4E5A
+6D6D4A5A6D01F8143F6D01FEECFFC091277FFFC00F5B6E90B6C8FC020F15FC02035D0200
+15E0031F1480030101F8C9FC493F7DBD50>85 D<903803FFC0013F13FC90B6FC000315C0
+4881D9FE037F000F9038007FF8001F6E7E6D80151FA26F7EA26C5AA26C5AEA01F0C7000F
+B5FC0103B6FC131F90B7FC000314EF48EBF80F4813C0481300485A485A5B12FF5BA46D5B
+007F5C4B13806C6C90B512FE9038FF07FB6CEBFFF36C14E1000314C0C6EC003FD91FF890
+C7FC2F2B7DA933>97 D<EC7FF0903807FFFE011FEBFF80017F14E090B612F048EBF03F48
+01C013F848010013FC48147F485AA2485AA2007FEC3FF85BED1FF000FFEC07C092C7FCAA
+127F7FA36C6C147EA26C6C14FE6C15FC6CEB80019138E003F86C9038FC0FF0C690B512E0
+6D14C0011F14800107EBFE009038007FF0272B7DA92E>99 D<EE0FF8ED0FFFA6ED007F16
+3FAEECFFE0010713FC013F13FF4914FF48B7FC48EBF01F48EBC00348EB0001497F001F15
+7F485AA2127F5BA312FFAA127FA37F123FA26C6C14FF5D6C6C497F6CD9800FEBFFE06CEB
+F03F6C90B7FC7E013F497E010F13F8010101C0EBC00033407DBE3A>I<ECFFF0010713FE
+011F6D7E017F8090B67E489038E07FF0489038801FF848496C7E484880001F14075B003F
+6E7EA2485A6F1380A212FF90B7FCA501F8C9FCA5127FA27F123FEE1F806C7E163F6C6C15
+006C6D5B6C9038E001FE6C9038FC07FC6C90B55A013F5C6D14C0010391C7FC9038007FF8
+292B7DA930>I<EC03FF023F13C091B512E0010314F0010F14F849133F90393FF87FFCEB
+7FF014E0EBFFC0A25A9138803FF8ED1FF0ED0FE092C7FCA9B612E0A6000101C0C7FCB3AA
+007FEBFFC0A626407DBF20>I<903A03FF800FF0013F9038F83FF890B538FEFFFC4891B5
+12FE12074813013A1FFC007FF349133F003FEDFBFC4990381FF9F8007FEDFC00A8003F5D
+6D133F001F5D6D137F6CB448485A6C90B55A4892C7FC5DD81FBF13F80103138090CAFC7F
+123F7F7F6CB6FC16F016FC16FF6C16806C16C017E0A2001F16F05A397FE0000349903800
+7FF800FF151F49140FA46D141F007F16F06D143F6C6CEC7FE001FCEB01FF271FFF800F13
+C0000790B612006C5DC615F8013F14E0010101FCC7FC2F3D7DA834>I<EBFF80B5FCA612
+077EAEED0FFC92387FFF800281B512E0028780028F80EC9FE09139BF803FFCECFE004A6D
+7E5C5CA25CA25CB3A3B60007B512F8A6353F7DBE3A>I<EA01F8EA07FE487E481380A248
+13C0A66C1380A26C13006C5AEA01F8C8FCA7EB7F80B5FCA612077EB3A9B512FCA616407C
+BF1E>I<EBFF80B5FCA612077EAF92381FFFFEA6DB07FCC7FC4B5AED3FF0ED7FC04B5A02
+8190C8FCEC83FEEC8FFCEC9FF0ECBFF814FF818181A202F77F02E77F02C37F02817F1480
+6F7E826F7E151F6F7E836F7F6F7FB5D8FE0FEBFFC0A6323F7DBE37>107
+D<EBFF80B5FCA612077EB3B3ADB512FEA6173F7CBE1E>I<9027FF800FFCEC7FE0B5903B
+7FFF8003FFFC0281B5D8E00F13FF0287DAF03F80028F6E4880DA9FE0ECFF079129BF803F
+FDFC017F0007D9FE00EBFFF06C496D496C7F4A5D4A5DA24A92C7FCA24A5CB3A3B60007B5
+D8F83FEBFFC0A652297DA857>I<9039FF800FFCB590387FFF800281B512E0028780028F
+80EC9FE09139BF803FFC0007EBFE006C496D7E5C5CA25CA25CB3A3B60007B512F8A63529
+7DA83A>I<EC7FF0903803FFFE011FEBFFC0017F14F090B67E489038E03FFC489038800F
+FE48496C7E48486D138048486D13C0A2003F16E0497F007F16F0A400FF16F8AA007F16F0
+A46C6C4913E0A2001F16C06C6C4913806D5B6C6D4813006C9038E03FFE6C90B55A6C6C14
+F0011F14C0010791C7FC9038007FF02D2B7DA934>I<9038FF07FCB5EA1FFF4A13C04A13
+E091B512F0ECFC7F9138F8FFF800075B6C5BA25CED7FF0A2ED3FE0ED0F804AC7FCB3A2B6
+7EA625297DA82B>114 D<90381FFC1E48B512FE12075A5A383FF00FEBC001387F800090
+C7FC48147EA27F7F6D90C7FC13FEEBFFF86C13FF15E06C80816C806C800003806C15806C
+7E010714C0EB001F1403007C130000FC147F153F7EA26C15806D137FA201E0EBFF009038
+FC07FE90B5FC5D15F0D8F87F13C026F00FFEC7FC222B7DA929>I<EB0FC0A6131FA4133F
+A2137FA213FF5A5A5A001FEBFFFEB6FCA50003EBC000B2153FA8157F6CEBE07EA26CEBF0
+FC14FF6D13F86D13F0010F13C001011300203B7EB929>I<B53CFC3FFFFC07FFFEA60003
+D9E0019039C0003F806C6E16006E6E5B6C187E836E4815FE017F5F6E48EBF801013F5F17
+FC6E481403011F02EF5CDAFF0FEBFE076D02C75C17FF039F140F6D02835C03FF149F6D02
+015C18DF18FF6D496C91C7FCA26D496D5AA36E486D5AA26E486D5AA36E486D5AA26E486D
+5A47287EA74C>119 D E /Fj 61 126 df<147814FC1301A449B4FC011F13E0017F13F8
+48B512FE4880000F158016C04815E0393FF1FC7F01C1EB1FF0EA7F810101EB0FF812FF12
+FE151FA400FFEC0FF00181EB07E0D87FC1EB03C001E190C7FCEA3FF913FF7E6CEBFFC06C
+14F06C80C614FE013F7F010F1480010114C0A202FC13E0153FED1FF0001E140F003FEC07
+F8EA7F81D8FFC11303A41381150716F0007F140F01C1131F01E1EB3FE0D83FF1137F6CB6
+12C016806C15006C5C6C5CC614F0013F13C0D907FEC7FCEB01FCA51300147825477BBE30
+>36 D<D803C0EB01E0D80FF01303486C497E487E150F487E4B5AB5FC5E486C133FA25E15
+7FA24BC7FCB5FC5D387FFE01A2D83FFC5B1403EA1FF86C48485AEA03C0C75B140FA25D14
+1FA24A5AA25D147FA292C8FC5CA2495AA25C1303A25C1307A290390FF001E0ED07F84A48
+7E011F497EA24A487E133FA24948481380163F14005BA25B1201A2484814FF6F13005B12
+076F5A5B6F5A6C486D5A0001EC01E029477DBE30>I<143E147FEB01FF5BEB07FEEB0FFC
+EB1FF0EB3FE0EB7FC0EBFF8014005A485A5B12075B485AA2485AA3485AA3485AA412FF90
+C7FCAD7F127FA46C7EA36C7EA36C7EA26C7E7F12037F6C7E7E1480EB7FC0EB3FE0EB1FF0
+EB0FFCEB07FEEB03FF7FEB007F143E184771BE30>40 D<127C12FE6C7E7F6C7E6C7EEA0F
+F86C7E6C7E6C7E7E1480EB7FC0133F14E0131FEB0FF0A2EB07F8A3EB03FCA3EB01FEA414
+FF7FAD5B14FEA4EB03FCA3EB07F8A3EB0FF0A2EB1FE0133F14C0137FEBFF8014005A485A
+485A485AEA3FF0485A485A5B48C7FC127C184778BE30>I<14E0EB03F8A7003CEC078000
+7FEC1FC0D8FFC3EB7FE001E313FFEBFBFB90B6FC6C15C0001F15006C5C000314F8C614E0
+013F138090B512E0000314F8000F14FE4880007F15C0B712E0EBFBFBEBE3F801C3137FD8
+7F03EB1FC0003CEC0780000091C7FCA7EB00E023277AAE30>I<EA07C0EA1FF0EA3FF813
+FCEA7FFEA213FFA37EA27E1207C6FC13FE1201A2EA03FC120FEA3FF8EAFFF013E013C013
+80EA7E001238101A708C30>44 D<007FB612F0A2B712F8A36C15F0A225077B9E30>I<EA
+0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F800D0D6F8C30>I<14FE903807FF
+C0497F013F13F8497F90B57E4880480183138049C6FC4848EB7FC04848EB3FE049131F00
+1F15F049130FA24848EB07F8A2491303007F15FCA448C7EA01FEAD6D1303007F15FCA36D
+1307003F15F8A26D130F001F15F06D131FA26C6CEB3FE0A26C6CEB7FC06C6CEBFF80EBFF
+836C90B512006C5C6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>48
+D<EB01E0497EA21307A2130F131F133F137F13FF1203123FB5FCA313EF138FEA7E0F1200
+B3AE003FB512FC4814FEB6FCA37E6C14FC1F3977B830>I<EB0FFC90383FFF8090B512F0
+0003804814FE4880481580383FF81FD9E00113C048486C13E049133F00FF15F06D131F15
+0F16F81507A26C5A6CC7FC120CC8FCA2150F16F0A2151F16E0153FED7FC0EDFF805C1600
+4A5A4A5AEC1FF84A5A4A5A4A5A495B4990C7FC495A495AEB3FF0495A495A485B48903800
+03F04848EB07F8485AEA1FF048B6FCB7FCA47E6C15F025397BB830>I<EB03FF011F13E0
+017F13F848B512FE48804815804815C014013A1FF8007FE0153FED1FF0150FA36C5A6C5A
+D80180131FC813E0153FA2ED7FC0EC01FF020F13800107B51200495B5D5D8115FF6D1480
+D9000113C09138007FE0ED1FF0ED0FF81507ED03FCA216FE1501A2121E123F487E486C13
+03A216FC150749EB0FF86D131F6C6CEB7FF09039FE01FFE06CB6FC6C15C06C15806CECFE
+00000114F86C6C13E0010790C7FC273A7CB830>I<EC07FE4A7EA25C5CA25C8114FE1301
+14FC1303EB07F8A2EB0FF0A2EB1FE0EB3FC0A2EB7F8013FF1400485AA2485A12075B485A
+121F5B485AA2485A12FF90B7FC1780A56C1600C86CC7FCA9027FB5FC91B61280A56E1400
+29397DB830>I<000FB612804815C05AA4168001C0C8FCADEBC3FF01CF13C090B512F015
+FC81811680D9FE0313C0EBF00049EB7FE049133F6C48EB1FF06CC7120FC8FC16F81507A3
+121EEA7F80A2487E150F16F0151F49EB3FE0A26C6CEBFFC06D5A263FFC0F138090B61200
+6C5C6C5C00035C6C14E06C6C1380D90FFCC7FC25397BB730>I<EC0FF8EC7FFE49B51280
+010714C0011F14E04914F05B9039FFF81FF848EBE00F48EB801F1400485A485A49EB0FF0
+485AED03C0484890C7FC5BA2127F9038807FC0903887FFF8019F13FEB7FC168016C016E0
+028113F09038FC003F01F0EB1FF849130FED07FC5B49130316FE1501A3127FA37F123F15
+036D14FC001F14077F000FEC0FF86D131FD807FEEB7FF09039FF81FFE06C90B512C06C15
+806C15006D5B011F13F8010713E001011380273A7CB830>I<127EB712FC16FEA516F890
+C7EA1FF0153FED7FE0007E15C0C8EAFF804A13004A5AA24A5A4A5AA24A5A5D143F5D147F
+5D14FF92C7FC5B5C13035CA213075CA2130F5CA3131F5CA5133F5CAA6D5A6DC8FC273A7C
+B830>I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C04815E014013A1FF8003F
+F04848EB1FF849130F491307007F15FC491303A56C6CEB07F86D130F6C6CEB1FF06D133F
+D80FFEEBFFE06CB612C0000115006C5C013F13F8497F90B57E0003ECFF8048018313C03A
+0FFC007FE0D81FF0EB1FF04848EB0FF8491307007F15FC49130300FF15FE90C71201A66D
+1303007F15FC6D13076C6CEB0FF86D131FD81FFCEB7FF09038FF01FF6C90B512E06C15C0
+6C1580C6ECFE006D5B010F13E0010190C7FC273A7CB830>I<EA0F80EA3FE0EA7FF0A2EA
+FFF8A5EA7FF0A2EA3FE0EA0F80C7FCADEA0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3F
+E0EA0F800D276FA630>58 D<16F01503ED07F8151F157FEDFFF014034A13C0021F138091
+383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FC
+EA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D
+7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500
+252F7BB230>60 D<007FB7FCA2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A3
+6C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13
+F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED
+3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A903801FFF0495B010F138049
+90C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E127825
+2F7BB230>I<147F4A7E497FA3497FA414F701077FA4010F7F14E3A4011F7FA314C1A201
+3F7FA41480017F7FA401FF80EC007FA391B5FC4881A548819038FC001FA448486D7EA226
+7FFF80B5FCB500C11480A56C0180140029397DB830>65 D<91387F803C903903FFF07E49
+13FC011FEBFEFE4913FF5B90B6FC48EBF07F48EB801F48EB000F5B484813075B48481303
+A2485A15015B127F5BED00FC160012FF90C9FCAB7FA2127FA216FC6DEB01FE123F7FA26C
+7E15036C6C14FC7F6C6CEB07F86D130F6C9038801FF06CEBF07F6C90B512E06D14C06D14
+806D1400010713FC6D13F09038007FC0273A7CB830>67 D<003FB512E04814FCB67E6F7E
+826C816C812603FC007F153FED0FFC6F7E150382816F1380A2167F17C0A2163FA317E016
+1FAB163F17C0A3167F178016FFA24B1300A24B5A15074B5A153FEDFFF8003FB65A485DB7
+5A5E93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A57ED803FCC7127FA8EE3F
+0093C7FCA2157E15FFA490B6FCA7EBFC00A4157E92C8FCA4EE0FC0EE1FE0A9007FB7FCB8
+FCA56C16C02B387EB730>I<003FB712C04816E0B8FCA37E7ED801FEC7121FA8EE0FC093
+C7FCA3ED1F804B7EA490B6FCA79038FE003FA46F5A92C8FCAD383FFFFC487FB5FCA37E6C
+5B2B387FB730>I<02FF13F00103EBC1F8010F13F1013F13FF5B90B6FC5A14E048EB807F
+3907FE003F49131F485A150F485A5B123F491307A2127F5B6F5A92C8FC12FF90CAFCA84A
+B5FC4A14805CA21380007F7F6E140091380007F87F003F140FA27F121F7F000F141F7F6C
+6C133F7F6C6C137F6CEBC1FF91B5FC7E7F7F010F13F70103EBC3F0010090C8FC293A7DB8
+30>I<3B3FFF803FFF80486D4813C0B512E0A36C13C06C496C13803B03F8000FF0004B5A
+153F4B5A5E4BC7FC5C4A5A5D4A5A140F4A5A5D4A5A147F4A5A92C8FC01F97F13FB90B57E
+81A28114EFECC7F8148381140101FE7FEBFC0081497F826F7EA26F7EA26F7E1507821503
+823B3FFF8007FFC0486D4813E0B56C5AA36C497E6C496C13C02B387FB730>75
+D<383FFFFC487FB6FCA36C5B6C5BD801FEC9FCB3AEEE1F80EE3FC0A9003FB7FC5AB8FCA3
+7E6C16802A387EB730>I<003FB57E4814F0B612FC15FF826C816C812603FC017FEC003F
+6F7E150F1507821503A515075E150F151F4B5AEC01FF90B65A5E5E93C7FCA28282EBFC01
+6E6C7E151F82150FA9EEF1F8EEF3FCA43A3FFFC007FB4801E0EBFFF8B512F0816F13F06C
+496C13E06C49EB7FC0C9EA1F002E397FB730>82 D<90390FF803C090397FFF07E048B512
+C74814FF5A5A5A383FF80FEBE0034848C6FC49137FA248C7123FA2151FA46DEB0FC0007F
+91C7FC7F7FEA3FF8EBFFC06C13FC6CEBFFC06C14F06C14FC6C806C6C7F010F1480010014
+C0140F020013E0ED3FF0151FA2ED0FF8A2007E1407B4FCA56D130F16F06D131F6DEB3FE0
+01F8137F9039FF01FFC091B5FC168016005DD8FC7F13F8011F13E0D878011380253A7BB8
+30>I<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C7EA212017FA26C7EA2
+6D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7EA26E7EA26E7EA26E7E
+A26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED0FF0A2ED07F8A21503
+A2ED01F0150025477BBE30>92 D<1307EB1FC0EB7FF03801FFFC487F000FEBFF80003F14
+E04814F0D8FFFD13F8EBF07FEBC01FEB800F397E0003F00038EB00E01D0E77B730>94
+D<EB1FFC48B57E4814E0000F14F84880814880D9F0077F14016E7F157F6C486D7E151FEA
+0780C8FCEC0FFF0103B5FC131F90B6FC1203120F5A48EBF81F48130013F0EAFFC05B90C7
+FCA2153FA26D137F6C6C13FF6D5AD9F80FEBFFC06CB712E07EA26C14E7000314836C49C6
+13C026003FE090C7FC2B2A7CA830>97 D<EA3FFE487EB5FCA37E7EC6FCA94AB4FC020F13
+C0023F13F091B57E828282ECFE0FDAF00313804AC6FC4AEB7FC05C91C7EA3FE0161FA217
+F0160FA8161FA217E06E133FA26EEB7FC016FF6E4813806E5ADAFC0F130091B55A5E5E5E
+D97F3F5BD93E0F138090260003FCC7FC2C3980B730>I<ECFFC0010713F8011F7F017F13
+FF90B612805A4815C048138048485AEA1FF85B4848EB7F80A24848EB1E004990C7FCA212
+FFA290C9FCA77F127FA26DEB0FC06C6CEB1FE07F6C7E6DEB3FC06CB4137F6CEBE0FF91B5
+12806C1500C65C6D5B011F5B010713E001011380232A7AA830>I<913803FFE04A7F5CA3
+8080EC000FA9EB07FC90381FFF8F017F13EF90B6FC12035AA2481303381FFC0049137F48
+48133F49131F4848130FA25B12FFA290C7FCA87F127F151F7F6C6C133F157F6C6C13FFEB
+FC01260FFF07EBFFC091B612E06C16F07E6C14EF6C6C01CF13E06D010713C0D907F8C8FC
+2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E488048158048018113C0390F
+FC007F4848EB3FE049131F484814F049130F127F5B16F800FF140790B6FCA616F090C9FC
+7F127F7FED03F06C6CEB07F87F6C7E6C6C130F01FFEB1FF06CEBE07F6C90B512E06C15C0
+6C1580013F14006D5B010713F8010013C0252A7CA830>I<157F913803FFC0020F13E002
+3F13F04A13F891B5FC5B159F903803FE1F9138FC0FF00107EB07E09138F803C092C7FCA6
+003FB612C04815E0B7FCA46C15C0260007F8C7FCB3A7003FB6FC481580B712C0A36C1580
+6C150025397DB830>I<D903FC13FE903A1FFF87FF80017F90B512C090B712E05A5A5A26
+0FFE07EB9FC0D9F801131F48486CEB870049EB7F80003F8149133FA66D137F001F5D6D13
+FF6C6C4890C7FCEBFE076CB55A485C5D485C5D01DF1380D9C3FCC8FC01C0C9FCA37F6CB5
+12F015FF6C15C04815F048818248819038E0001FD87F80EB01FF90C8FC48ED7F805A163F
+A46C157F6C6CECFF006D5BD83FF0EB07FE01FF137F6C90B55A6C5D6C5D000115C06C6C91
+C7FC011F13FC010113C02B3E7DA730>I<EA3FFE487EB5FCA37E7EC6FCA9EC01FE91380F
+FFC0023F7F91B57E82A282ECFE0F9138F803FE14E0ECC001A21480A21400B3003F9039FC
+0FFFF8486D4813FCB614FEA36C01FE14FC6C496C13F82F3880B730>I<EB01F0497E497E
+497EA56D5A6D5A6D5A90C9FCA7381FFFFC487F5AA37E7EEA0001B3A7003FB612E04815F0
+B7FCA37E6C15E024397AB830>I<EC03E0EC07F0EC0FF8EC1FFCA5EC0FF8EC07F0EC03E0
+91C7FCA790B512F84814FCA57EEB0003B3B3A31407003F14F8EA7F80140FD8FFC013F014
+1FEC7FE090B512C06C148015006C5B6C5B000713F0C613C01E4E7CB830>I<EA7FFC487E
+A5127F1200AA0207B512804A14C04A14E0A36E14C06E14809139007FC0004B5A4A90C7FC
+4A5A4A5A4A5A4A5A4A5A4A5A14FF90B57EA28181ECF7FC14E3ECC1FEEC81FF02007F4913
+7F6F7E826F7E150F6F7E3B7FFFF81FFFE0B56C4813F017F8A317F06C496C13E02D387FB7
+30>I<387FFFFCB57EA57EEA0001B3B3A6007FB612F8B712FCA56C15F826387BB730>I<02
+FE13FE3A7FE3FF03FFB6008F7F03DF7F92B57EA36C010FEB0FF0D807FE13FE9039FC07FC
+07A201F813F8A301F013F0B3D87FFF01FF13FFB5008F018F1380A56C0107010713003128
+81A730>I<EC01FE3A3FFE0FFFC0267FFF3F7FB77E82A26C816CEBFE0FC69038F803FE14
+E0ECC001A21480A21400B3003F9039FC0FFFF8486D4813FCB614FEA36C01FE14FC6C496C
+13F82F2880A730>I<49B4FC010F13E0013F13F8497F90B57E0003ECFF80A248010113C0
+3A0FFC007FE04848EB3FF049131F4848EB0FF8491307007F15FC491303A348C7EA01FEA8
+6D1303007F15FCA26D1307003F15F86D130F6D131F6C6CEB3FF06C6CEB7FE09038FF01FF
+6C90B512C06C15806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>I<4AB4FC
+263FFE0F13C0267FFF3F13F0B77E82826C816CEBFE0FC6D9F00313804AC6FC4AEB7FC05C
+91C7EA3FE0161FA217F0160FA8161FA217E06E133FA26EEB7FC016FF6E4813806E5ADAFC
+0F130091B55A5E5E5E023F5B020F1380DA03FCC7FC91C9FCAC003F13FC487FB6FCA36C5B
+6C5B2C3C80A730>I<D903FE13FC90390FFFC1FE013F13F190B512FD4814FF5A5A481381
+9038FE003FD81FF8131F4848130F49130748481303A25B150112FF90C7FCA77FA2127F6D
+130315076C7E6D130F6C6C131F6D137F390FFF81FF6C90B5FC7E7E6C14F96D13F1011F13
+C1903803FE0190C7FCAC92B512FC4A14FEA56E14FC2F3C7DA730>I<ED07F83A3FFFC03F
+FE486DB5FCB500E3148002EF14C091B6FC7E6CECFC7FD8001F9038E03F8015809238000E
+004A90C7FC5CA25CA25CA35CAE003FB512FE4880B77EA36C92C7FC6C5C2A287EA730>I<
+90381FFC1E48B512BF000714FF5A5A5A5AEBF00738FF800190C7FC5AA36C147E6D90C7FC
+EA7FF0EBFFC06C13FE6CEBFFC06C14F0000380C680011F7F9038007FFF02031380140000
+7EEC3FC0B4FC151FA27F153F7F6DEB7F809038FC03FF90B61200A25D5D00FD14F0D8FC7F
+13C026780FFEC7FC222A79A830>I<EB07C0497E131FA9003FB612E04815F0B7FCA46C15
+E026001FE0C7FCAFED01F8ED03FCA5150702F013F8130F9138F80FF0ECFC1F6DB512E0A2
+6D14C06D14806DEBFE00EC7FF8EC1FE026337EB130>I<D83FFEEB7FFC486C497EB55AA3
+6C7F6C147FC61401B3A31503A21507EC800F9139C07FFFF86DB612FC17FE7FA26D01FD13
+FC010701F013F801010180C7FC2F2880A630>I<3B3FFFC07FFF80486DB512C0B500F114
+E0A36C01E014C06C496C13803B01FC0007F0006D130F00005DA26D131F6D5CA3EC803F01
+3F5CA2ECC07F011F91C7FCA26E5A010F5BA3903807F1FCA4903803FBF8A214FF6D5BA36D
+5BA26E5A6E5A2B277EA630>I<3B3FFFE03FFFE0486D4813F0B515F8A36C16F06C496C13
+E0D807F0C7EA7F00A26D5C00035DA63A01FC1FC1FCEC3FE1EC7FF1A400009038FFF9F8A2
+14FD01FE13FBA4D97EF85BA2017F13FFA2ECF07FA2013F5CA2ECE03F6D486C5A2D277FA6
+30>I<3A3FFF81FFFE4801C37FB5FCA37E6C01815B26007F8090C7FCEC81FE90383FC3FC
+EB1FE3ECF7F86DB45A6D5B7F5D6D5B7F6EC8FC5C81497F5B81903807F7F090380FE7F8EB
+1FE3ECC1FC90383F81FE90387F80FF4A7E4980007F6DB5FCB500C1148014E3A314C16C01
+80140029277DA630>I<3B3FFFC07FFF80486DB512C0B500F114E0A36C01E014C06C496C
+13803B01FE0007F00012006D495AA27F6E485A133FA2ECC03F011F5CA214E0010F49C7FC
+A2EB07F015FEA2EB03F85DA2EB01F914FD5D130014FF6E5AA36E5AA36E5AA2143F5DA314
+7F92C8FCEA0780381FE0FF5CEA3FF1EBF3FC13C7495AEBFFF07E5C5C6C90C9FC6C5AEA01
+F82B3C7EA630>I<001FB612FC4815FE5AA416FC903980001FF8ED3FF0ED7FE0EDFFC04A
+13806C48481300C7EA0FFE4A5A4A5A4A5A4A5A495B495B4990C7FC495A495A495A495A49
+48137E48018013FF4890C7FC485A485A485A485A48B7FCB8FCA56C15FE28277DA630>I<
+ED1FFC913801FFFE1407141F5CA24A13FC9138FFF000158092C7FCB35BA2EB07FE137F38
+7FFFFCB55A5C14C014F0806C7FC66C7E1307EB01FFA27FB38115F091387FFFFC6E13FEA2
+80140714019138001FFC27477CBE30>I<EA7FF8B57E14E014F880807E38000FFF13017F
+B381A2EC7FE015FE91383FFFFC6E13FE801403140F5C4A13FC91387FFE0015E0ECFF80A2
+92C7FCB35B130F387FFFFEB5FC5C5C14E01480D87FF8C8FC27477CBE30>125
+D E /Fk 75 125 df<9239FF8003F8020F9038E03FFE027F01F8B5FC49B500FD14804990
+3900FFFC7F90260FF8019038F0FFC04948485BD93FE05CEB7FC0D9FF805C0200ED7F806F
+EC3F0048486D90C8FCADB97EA4D801FEC790C8FCB3AC486C497FB5D8F83FEBFF80A43A40
+7FBF35>11 D<ED7FC091380FFFF0023F13FC91B57E01031300D90FF8133F494813FF4948
+481380EB7FC0EBFF801400A2485A6F1300163C93C7FCA9EE7F80B8FCA43901FE00018116
+7FB3AA486CECFFC0B5D8FC3F13FFA430407FBF33>I<133E137F13FFA25A5AEA07FE13FC
+EA0FF8EA1FF013E0EA3F80EA7F00127E5A1278123010116EBE2D>19
+D<B7FCA520057AB52D>22 D<121FEA3F80EA7FC0EAFFE0A9EA7FC0ABEA3F80ABEA1F00AB
+120EC7FCA8121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B4179C019>33
+D<001FEB07C0393F800FE0397FC01FF039FFE03FF8A301F013FCA2007F131F003F130F00
+1F13070000EB003CA40001147C491378A2000314F84913F000071301A2390F8003E0A239
+1F0007C0003EEB0F80007E131F003CEB0F00001813061E1D7DBE2D>I<121FEA3F80EA7F
+C0EAFFE0A313F0A2127F123F121F1200A4120113E0A2120313C01207A2EA0F80A2EA1F00
+123E127E123C12180C1D79BE19>39 D<147814F8EB01F0EB03E0EB07C0130FEB1F801400
+5B137E137C13FC485AA2485AA212075BA2120F5B121FA25BA2123FA390C7FC5AA612FEB3
+A2127FA67E7FA3121FA27FA2120F7F1207A27F1203A26C7EA26C7E137C137E7F7F1480EB
+0FC01307EB03E0EB01F0EB00F81478155A78C323>I<12F07E127C7E7E7F6C7E12077F6C
+7E12017F6C7EA2137EA2137F7FA21480131F14C0A2130FA214E0A3130714F0A6EB03F8B3
+A2EB07F0A614E0130FA314C0A2131FA21480133F1400A25B137EA25BA2485A5B1203485A
+5B120F485A90C7FC123E5A5A5A155A7BC323>I<121FEA3F80EA7FC0EAFFE0A313F0A212
+7F123F121F1200A4120113E0A2120313C01207A2EA0F80A2EA1F00123E127E123C12180C
+1D798A19>44 D<B512FEA717077F961E>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80
+EA1F000B0B798A19>I<ED0180ED03C01507A21680150FA216005DA2151E153EA2153C15
+7CA2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E143EA2143C147C
+A2147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E133EA25BA21378
+13F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2123C127CA21278
+12F8A25A1260225B7BC32D>I<EB01FE90380FFFC0013F13F0497F9038FF03FC3901FC00
+FE4848137F4848EB3F8049131F000F15C04848EB0FE0A3003F15F0A2491307007F15F8A6
+00FF15FCB3A2007F15F8A56C6CEB0FF0A3001F15E0A36C6CEB1FC0A26C6CEB3F806C6CEB
+7F006C6C13FE3900FF03FC6DB45A6D5B010F13C0D901FEC7FC263F7DBC2D>I<147014F0
+1303130F133FEA07FFB5FCA213DFEAF81F1200B3B3AA497EB612FEA41F3D79BC2D>I<EB
+07F890383FFF8090B512E00003803907F03FFC390FC00FFE391F0003FF003E6D1380A248
+6D13C01278007FEC7FE0EAFFC07FED3FF0A56C5A6C5A000EC7FCC8FCED7FE0A3EDFFC0A2
+16804A13005C5D4A5A4A5A5D4A5A4A5A4A5A4AC7FC5CEB01F8495A495A494813F0495A49
+C7FC133E49EB01E05B485A485A4848130348B6FC5AA25A4815C0B7FCA4243D7CBC2D>I<
+EB07FC90383FFF8090B512E03901F80FF83903E007FC48486C7E48486C7ED81F001480EB
+C00001F014C0123F7FA56C5A6C48148038038001C7FC16005C5D4A5A5DEC1FF0EC7FE090
+381FFFC092C7FC8115E09038000FF0EC07FC6E7E6E7E16806E13C0A216E0157FA216F0A2
+120FEA3FC0487E487EA316E0A215FF4914C06C5AD900011380123E003F491300391FC007
+FE390FF80FFC0003B512F06C14C06C6C90C7FCEB0FF8243F7CBC2D>I<151F5DA25D5DA2
+5C5CA25C5CA25C143EA25C147814F8495A5C1303495A5C130F495A131E133E5BA25B485A
+A2485A5B1207485A90C7FC5A123E123C127C5AB8FCA4C700011300AB4A13800103B6FCA4
+283E7EBD2D>I<000C1403D80F80131F01F813FF90B6FC5D5D5D5D15C092C7FC14FCEB7F
+E090C9FCABEB01FC90380FFF80013F13E0497F9038FE07FC9038F803FE9038E001FF497E
+ED7F804914C090C7FCC8FCED3FE0A316F0A4121FEA7FC012FF7FA316E05B157F6CC713C0
+1278007CECFF806C1500003F5B6C6C485A6C6C485A3907F01FF86CB512E06C14806C6C48
+C7FCEB0FF0243F7CBC2D>I<EC1FC0ECFFF801037F90380FF03F90381FC01F90393F800F
+8090387F001F01FEEB7FC0484813FF485AA2485A120FA24848EB7F80ED1E0092C7FC123F
+A25B127F14FE9038C3FFC001C713F0D8FFCF7F9038DF03FC9038FC01FE496C7E81491480
+16C049133F16E0A35B16F0A5127FA6123F16E0A26C7E16C0157F000F15807F0007ECFF00
+6C6C5B6C6C485A3900FE07F890387FFFF06D5B010F1380D903FCC7FC243F7CBC2D>I<12
+3C123EEA3F8090B612FCA416F85A16F016E016C0007CC712070078EC0F8016005D153E48
+143C157C5D4A5AC75B14034A5A5D140F4AC7FCA2143EA2147E147C14FCA213015C1303A3
+1307A3130F5CA3131FA5133FAB6D5AEB078026407BBD2D>I<EB03FC90381FFF80017F13
+E09038FE07F83901F001FC48486C7E4848137F48487FED1F8048C7FC16C0150F5AA27FA2
+7F151F6D148001F8133F6C6C140001FF5BEC80FE6CEBE1FCECF3F86CEBFFF06C5C6C1480
+6C80013F7F6D13F8017F7F90B57ED803F87F48486C1380260FE01F13C048487ED9800313
+E0003F7F90C7127F007EEC3FF0151F00FE140F5A1507A21503A46C15E0007E1407007F15
+C0150F6C6C14806C6C131F6DEB3F006C6C13FE3903FC03FC6CB55A6C6C13E0011F1380D9
+03FCC7FC243F7CBC2D>I<EB03FCEB1FFF4913C09038FE07F048486C7E48486C7E3807F0
+00000F804848137FA2003F158049133F007F15C0A312FF16E0A516F0A6127F157FA2123F
+A26C6C13FFA26C6C5AA26C6C5A3903FC0FBF6CB5123F26007FFE13E0EB3FFCEB07F090C7
+FC16C0157FA3D807801480EA1FE0486CEBFF00A25D14015D4A5A49485A381F800F4A5A39
+0FE07FC06CB5C7FC6C5BC613F8EB3FC0243F7CBC2D>I<121FEA3F80EA7FC0EAFFE0A5EA
+7FC0EA3F80EA1F00C7FCB1121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2779A6
+19>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FCB1121EEA3F80EA7FC012
+FFA213E0A3127F123F121F1201A4120313C0A312071380120FA2EA1F00121E123E5A123C
+12180B3979A619>I<ED0F80A34B7EA34B7EA34B7EA34B7EA34A7F15EFA2913803CFFE15
+C7A291380787FF1583A2020F801501A2021F80EC1E00A2023E80023C137FA2027C800278
+133FA202F8804A131FA20101814A130FA249B67EA349819138800003A2010F8291C77EA2
+4982011E80A2013E82013C157FA2017C8201FC153F487E2607FF80ECFFFCB500F8013FEB
+FFF8A43D417DC044>65 D<B712FEEEFFC017F883C69039E0000FFF6D4801031380040013
+C0EF7FE018F0173F18F8171F18FCA3170F171FA318F8173F18F0177F18E0EFFFC0040313
+804C1300EE3FFC91B612F017C017F817FE913AC00003FF80040013C0EF7FE0EF3FF0EF1F
+F818FC170F18FE1707A218FFA718FE170FA2EF1FFCEF3FF8A2EFFFF04C13E0496C010713
+C0B912005F17F01780383E7EBD40>I<DB3FF0130E913803FFFE020F9038FF801E023FEC
+E03E913AFFF807F07E010390388000FC4948C7EA7EFED90FF8141FD93FF0140F49481407
+495A4A14034890C812015A484815005B000F177EA2485A183E123F5BA2007F171EA25BA2
+00FF1700AC127F181E7FA2123FA27F001F173E183C6C7E187C000717787F6C6C16F86CEE
+01F06C6D15E06E14036D6CEC07C06D6CEC0F80D90FF8EC1F00D907FE143E6D6C6C13FC01
+009038F807F8023FB55A020F14C0020349C7FC9138003FF037427BBF42>I<B712FEEEFF
+C017F017FCC69039F0001FFF6D4801037F04007FEF3FE0717E717E717E717E1701847113
+80A219C0187F19E0A2183F19F0A519F8AB19F0A5F07FE0A219C0A218FF19804D1300A24D
+5A4D5AA2EF1FF84D5A4D5A933801FF80496C011F90C7FCB812FC5F17C04CC8FC3D3E7EBD
+45>I<B912F0A4C69038F000016D48EB001FEF07F817031701A21700A31878A4041E7FA5
+95C7FC163EA2167E16FE150391B5FCA4ECE0031500167E163EA2041EEB0780A3F00F00A3
+93C7FCA260181EA2183EA3187E18FE6017011707171F496C14FFB9FC60A3393E7EBD3E>
+I<B912C0A4C69038F000036D48EB007FEF1FE0170F1707A21703A21701A5EF00F0163CA4
+1800A2167CA316FC150391B5FCA4ECE0031500167CA3163CA693C8FCAD497EB612FCA434
+3E7EBD3B>I<B6D8F01FB512FEA4C601F0C7381FFE006D486E5AB3A591B7FCA402E0C712
+0FB3A7496C4A7EB6D8F01FB512FEA43F3E7EBD44>72 D<B612FCA439007FF8006D5AB3B3
+B0497EB612FCA41E3E7FBD21>I<B600F090387FFFFEA4C601F0C7001F13C06D48DA07FC
+C7FC6018E04D5A4D5A4DC8FC177E5F4C5A4C5A4C5A4C5A4C5A4CC9FC167E5E4B5A4B5A4B
+5A150F4B7E4B7E157F4B7E02E17F14E39138E7EFFFECEFC7DAFF837F03037F4A7E4A6C7F
+4A804A137F4A6D7E83161F707E8382707F8482707F84177F717E84171F717E8485496C4A
+13E0B6D8F001B61280A4413E7EBD47>75 D<B500F091387FFFFEA28080C66C6C020313C0
+050013006E157E6F143C137B8101797F13786E7E81143F6E7E81140F6E7E82806E7F8280
+6F7E826F7E151F826F7E8117806F13C0816F13E017F0167FEE3FF817FC161FEE0FFE17FF
+827013BC18FC8282A2177F173FA2171F170F1707A201FC1503486C15013807FF80B500FC
+1400187CA2183C3F3E7EBD44>78 D<B712FCEEFF8017F017FCC69039F0001FFE6D48EB03
+FF04001380EF7FC018E0EF3FF0A2EF1FF8A318FCA718F8A3EF3FF0A2EF7FE018C0EFFF80
+04031300EE1FFE91B65A17F0178004FCC7FC02E0C9FCB3A4497EB612F0A4363E7EBD3E>
+80 D<B712E016FEEEFFC017F0C69039F0007FF86D48EB07FE707E707F707F717EA2717E
+A284A760A24D5AA24D5A4C5B4C90C7FC4C5AEE7FF891B65A17C094C8FC17C0DAE0007FEE
+3FF8EE0FFC831607707EA2707FA684A61906190F18E082191F496CEC7FF0B600F0ECF81E
+94383FFC3E94381FFFFC050713F8CA000113F09438001FC040407EBD43>82
+D<D903FC131C90381FFF80017FEBF03C48B5EAF87C3A03FC03FEFC3907F0007F4848131F
+4848130F49130748C712035A1501007E140012FEA2167CA27E163CA27F7F6D14006C7E13
+FCEBFF806C13F8ECFF806C14F86C14FE6C806C15C06C15E06C15F0133F010714F8D9007F
+13FC14079138007FFE151F1507150316FF8100F080A3167FA27EA36C157E16FE7E16FC6C
+14016D14F86DEB03F001F0130701FCEB0FE03AFDFF803FC0D8F87FB51280D8F01FEBFE00
+D8E00713F89038007FC028427BBF33>I<003FB91280A4D9F800EBF00301C090397FE000
+7F48C7ED1FC0007E170FA2007C1707A300781703A548EF01E0A5C892C7FCB3B04B7E010F
+B7FCA43B3D7DBC42>I<B600F090387FFFFEA4C601F0C7000313C06D4802001300187E18
+3CB3B3A3013F167C18788018F8011F5E6E1401010F5E010715036E4A5A6D6C140F6D6C4A
+5A6D6D49C7FC6E6C13FE91391FF807FC6EB512F0020314C0DA007F90C8FCED0FF83F407E
+BD44>I<B66CB6D8C00FB5FCA400039026F0000101F0C713F06C01C06D01C0EC3FC06CF2
+1F807215006E147F017F191E846E023F153E013F193C84177F6D6C60A24D7E6D6C60A24C
+7F6E02E7140101076104037F6E02C314036D61040714800380018114076D6119C04CC6FC
+6D01C04CC7FCA2041EEB7FE0DA7FE0161EA2043E14F0DBF03C013F133E023F173C047C14
+F8DBF878011F137C021F177804F814FC6F48010F13F8020F5F19FEDBFDE01307DA07FF6F
+5AA24C7F6E5FA34C7F6E5FA293C8FC6E94C8FCA24B81037E157EA2037C153E033C153C58
+407EBD5D>87 D<007FB5D8F00FB512E0A4C66CD98001EBF800D91FFCC713C06E6EC7FC01
+0F153E6D6C5CA26D6D5B6D6D5B16016D6D485A03F05B027F13076E6C485AA26E6C48C8FC
+EDFE1E020F133E6E6C5A16786E13F86E5B5E8082157F6F7EA26F7E4B7EA24B7E92B5FC03
+FB7FDA01F17FEC03E103E07F4A487FED807F020F6D7EEC1F00021E6D7E023E804A130F70
+7E5C4A6D7F01016E7F495A4A6D7F010782010F157F011F6F7ED97FE0812603FFF8ECFFFE
+B500FE010FEBFFFEA43F3E7EBD44>I<B600E00107B51280A4C601FCC70001EBF0006D48
+9138007F80013F94C7FC6D6C153E606D6C15786E15F86D5E6D6D1301606D6D13036F495A
+6D5E6F130F027F92C8FC6E6C5B6F131E021F143E6F5B140F6E6C5B5F6E1381EEC1E06E13
+C3EEE7C0806FB45A94C9FC815E151F6F5AB3A34B7E021FB512FEA4413E7FBD44>I<EAFF
+FCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>91 D<486C1360486C13F03907E001F801
+C013F0390F8003E0391F0007C0A2003EEB0F80A2003C1400007C5B0078131EA200F8133E
+48133CA439FF803FE001C013F001E013F801F013FCA2007F131FA3393FE00FF8391FC007
+F0390F8003E01E1D75BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>I<EA
+0180EA03C0EA07E013C0EA0F80EA1F00A2123EA2123C127C1278A212F85AA4EAFF8013C0
+13E013F0A2127FA3EA3FE0EA1FC0EA0F800C1D7ABE19>96 D<EB1FF890B5FC000314C000
+0F14F0391FE01FF8EC07FC486C6C7E14016E7EA2826C48137F6C5A0003C7FCC8FCA2EC01
+FF49B5FC130F137F3901FFE07F00071300EA0FF8485A485A485A5B12FF90C7EB8780A315
+FFA27F007F5B6D5A3B3FE007BFCF009039F01F1FFF260FFFFE5B6CEBFC0F00019038F007
+F83A007F8003E0292A7DA82D>I<13FE12FFA4120712031201B015FF020F13E0023F13F8
+91B57E9039FFFC03FFDAF000138002C0137F4AEB3FC091C7EA1FE05BEE0FF0A217F81607
+A217FCAB17F8160FA217F0161F6D15E0163F6E14C06EEB7F80903AFBF001FF009039F9FC
+07FE9039F07FFFFC6E13F0D9E00F13C0C7D801FEC7FC2E407FBE33>I<49B4FC010F13E0
+013F13F84913FE4848C67EEA03FC4848481380EA0FF0A2EA1FE0A248486C1300157E007F
+141892C7FC5B12FFAB6C7EA36C6CEB03C0A26C6C130716806C6C130F6C6CEB1F006CB413
+3E6CEBC07E6CEBFFF8013F5B010F13C0D901FEC7FC222A7DA828>I<ED01FE15FFA41507
+15031501B0EB01FE90380FFFC1013F13F190B512FD48EB80FF3903FE001FD807F8130F48
+481307001F1403491301123F5B127FA25B12FFAB127FA27F123FA26C6C130315076C6C13
+0F6C6C497E6C6C4913802701FF01FD13FC6CEBFFF96D13E1011F1381903A03FC01FC002E
+407DBE33>I<EB01FE90380FFFC0013F13F090B57E48EB03FC3903FC01FE48486C7E4848
+EB7F805B001FEC3FC0485A151F127F16E05BA2B7FCA40180C8FCA6127F7FA2123F6DEB01
+E0121F6D1303000F15C06C6C13076DEB0F806CB4EB1F00C6EBC07E6DB45A011F5B010713
+E0010090C7FC232A7EA828>I<EC07F0EC7FFC49487E497FEB0FF8D91FE11380EB3FC1EB
+7F81A2EBFF016E130048147E4990C7FCADB6FCA4D801FEC8FCB3AC487EB6FCA421407EBF
+1C>I<167C903903FC01FF90381FFF87017F01EF138090B612BF3A01FE07FE3F3903F801
+FC00079138FE1F003A0FF000FF0E93C7FC497F001F81A7000F92C7FC6D5BA26C6C485A00
+035C3901FE07F848B55A485C019F1380D983FCC8FC48CAFCA27FA27F7F6CB512E015FE6F
+7E6C15E06C814881000F813A1FE0001FFED83F801303007F140190C87E5A4881A46C5D6C
+5D6D13016C6C495A6D1307D81FF8EB1FF8D807FEEB7FE06CB65AC692C7FC011F13F80103
+13C0293D7EA82D>I<13FE12FFA4120712031201B0EDFF80020713E0021F13F84A7F9138
+7E07FE9138F801FF9038FFE0005CEE7F805C91C7FCA35BB3A4486CECFFC0B5D8FC3F13FF
+A4303F7EBE33>I<EA01F0487E487E487EA56C5A6C5A6C5AC8FCAB13FE127FA412071203
+1201B3AA487EB512F8A4153E7EBD19>I<143E147FECFF804913C0A56D1380EC7F00143E
+91C7FCABEC3FC0EB3FFFA41300147F143FB3B3A3121EEA7F80EAFFC0EC7F80A2ECFF00A2
+EB81FE387F83FC6CB45A6C13E06C1380D801FCC7FC1A5186BD1C>I<13FE12FFA4120712
+031201B14AB512C0A49139007FFC00ED3FE016804BC7FC15FC4A5A4A5A4A5A4A5A4A5A4A
+C8FC4A7E4A7E90B5FC81ECDFF0EC8FF8140F496C7E496C7E1401816E7F157F826F7E151F
+826F7E82486C497EB539F87FFFF0A42C3F7FBE30>I<13FE12FFA4120712031201B3B3AF
+487EB512FCA4163F7EBE19>I<D801FCD9FF80EB3FE000FF01079039E001FFF8021FD9F8
+0713FE4A6D487F91287E07FE1F817F0007903CF801FF3E007FC02703FDE0000178133F6C
+B4485C047F6E7E4A5C91C75BA3495DB3A4486C4A6C497EB5D8FC3FD9FF0FB512C0A44A28
+7EA74D>I<D801FCEBFF8000FF010713E0021F13F84A7F91387E07FE00079038F801FF39
+03FDE0006CB45AEE7F805C91C7FCA35BB3A4486CECFFC0B5D8FC3F13FFA430287EA733>
+I<14FF010713E0011F13F8017F13FE9038FF81FF3A01FC003F804848EB1FC04848EB0FE0
+4848EB07F0001F15F8491303003F15FCA24848EB01FEA400FF15FFA9007F15FEA36C6CEB
+03FCA36C6CEB07F8000F15F06D130F6C6CEB1FE06C6CEB3FC03A01FF81FF803A007FFFFE
+006D5B010F13F0010090C7FC282A7EA82D>I<01FE13FF00FF010F13E0023F13F891B57E
+9039FFFC07FF0003D9F00113806CEBC0004AEB7FC091C7EA3FE05BEE1FF0A2EE0FF8A317
+FC1607A9160F17F8A2161F17F0A26DEC3FE0167F6EEBFFC06E481380DAF00313009138FC
+0FFE9039FE7FFFFC6E13F0020F13C0DA01FEC7FC91C9FCAC487EB512FCA42E3A7FA733>
+I<D901FE131E90390FFFC03E013F13E090B512F8489038C0FC7E48EB003E4848EB1FFE48
+48130F48481307491303485A1501127F5BA212FF5BA97F127FA36C7E15036C7E15076C6C
+130F6C6C131F6C6C137F3901FF81FD6CEBFFF96D13E1011F1381903803FC0190C7FCAC4B
+7E92B512FCA42E3A7DA730>I<3901FC07E000FFEB1FF8EC7FFE14FF9038FDF9FF000713
+F13803FFE16C13C11481EC80FEEC00381500A35BB3A3487EB6FCA420287FA724>I<9038
+3FC0E03801FFF9000713FF121F383FC03FEB000F007E130714035A1401A27EA26C90C7FC
+13C0EA7FFCEBFFE014F86C13FE6CEBFF806C14C0000314E0C6FC011F13F01300EC1FF814
+0F00F0130714036C1301A37E15F06C13036C13079038800FE09038E01FC090B5128000FB
+140000F013FC38E01FE01D2A7DA824>I<133CA6137CA413FCA21201A212031207121FB6
+12C0A4D803FCC7FCB3EC01E0A99038FE03C01201EBFF076CEB8F8090387FFF006D5A6D5A
+EB03F01B397EB723>I<01FEEC7F8000FFEC3FFFA4000714010003800001157FB3A416FF
+A25DA25D6C6C4913C04B13E0903A7FC03F7FFF90383FFFFC6D13F8010713E00100018013
+0030297EA733>I<B539F01FFFE0A40007D9000713006C48EB01FC00015D6D5C7E5EEC80
+03017F5CA2ECC007013F5CA26D6C48C7FCA26E5A010F131EA2ECF83E0107133CA26D6C5A
+A2ECFEF801015BA214FF6D5BA26E5AA36E5AA36EC8FCA22B287EA630>I<B500C3B53807
+FFF8A42907FE003FF00113C06C48903A1FE0007F006D010F143E000181183C6D167C6C6F
+1378151F028015F8017F6E5B153D02C01401013F02FE5B157802E01403011F02FF5BEDF0
+7F02F01407010FED87809138F1E03F02F9148F010703CFC7FC9138FBC01F02FF14DF6D15
+FEED800FA26D5DED0007A26D5D4A1303A2027E5C027C1301023C5C3D287EA642>I<B539
+F87FFFF0A400019039C01FFE006CEC0FF0017F14C0D93FE05B011F49C7FC14F090380FF8
+3E01075B6D6C5A14FE6D6C5A6D5B5D147F143F816E7E143F4A7E4A7EECFBFEEB01F19038
+03E1FFD907C07F157F49486C7ED91F007F496D7E49130F48488000079038801FFEB539C0
+7FFFF8A42D277FA630>I<B539F01FFFE0A40007D9000713006C48EB01FC00015D6D5C6C
+5DA2EC8003017F5C14C0013F495AA2ECE00F011F91C7FCA290380FF01EA2ECF83E010713
+3CA2ECFC7C01031378A26D6C5AA214FF6D5BA36E5AA26E5AA36EC8FCA2141EA2143E143C
+A2147C001C1378007F13F85CEAFF80EB81E01383EB87C0495AEA7E3FD87FFFC9FC6C5AEA
+1FF8EA07E02B3A7EA630>I<001FB61280A4D9F003130001C05BEB800749485A001E5C00
+3E495A143F4A5A003C5C14FF495B92C7FC495AEA0007495A5C011FEB0780EB3FF014E0EB
+7FC013FF481380EC000F5A485A49140048485B121F48485B495B007FEB03FFB7FCA42127
+7EA628>I<B812F0A42C0480992D>I<BE12C0A45A0480995B>I E
+/Fl 62 128 df<EC03FE91381FFF8091B57E010380903907FC07F090381FF0034948487E
+90387FC00F1480EBFF00A2485A6F5AED008093C7FCA8ED03F8B7FCA43901FE001F1507B3
+A7000381267FFFF0B512E0A42B3A7FB92F>12 D<B612F8A51D057AB02A>22
+D<14F01301EB03E0EB07C0EB0F80131FEB3F00137EA25B485AA2485AA212075B120F5BA2
+121FA25B123FA390C7FC5AA5127E12FEB2127E127FA57E7FA3121F7FA2120FA27F12077F
+1203A26C7EA26C7E137EA27FEB1F80130FEB07C0EB03E0EB01F01300145279BC21>40
+D<12F07E127C7E7E7F6C7E6C7EA26C7E6C7EA26C7EA27F137E137F7FA21480A2131F14C0
+A3130F14E0A5130714F0B214E0130FA514C0131FA31480133FA21400A25B137E13FE5BA2
+485AA2485A485AA2485A485A90C7FC123E5A5A5A14527BBC21>I<121EEA7F8012FF13C0
+A213E0A3127F121F1201A31203A213C0A212071380120FEA1F00A2123E5A123812180B1A
+7A8917>44 D<B512FCA716077F941C>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A
+7A8917>I<EB03F8EB1FFF017F13C090B57E3901FE0FF03903F803F848486C7E48486C7E
+49137E001F147FA2003F158049133FA2007F15C0A500FF15E0B3007F15C0A5003F15806D
+137FA2001F1500A26C6C13FEA26C6C485A6C6C485AEBFE0FC6B512E06D5B011F90C7FCEB
+03F823397DB62A>48 D<14E013011307131F13FFB5FCA3131F1200B3B3A5497E007FB512
+F8A41D377AB62A>I<EB0FF0EB7FFE48B57E000780390FC07FF0391F801FF8393E000FFC
+1407488000781303007F80486C7E13C01680A3806C5A6CC7FC000C5BC7FC1600A25C5D14
+075D4A5A5D4A5A4A5A4A5A92C7FC14FE495A495A495A495A495A9138800780EB3F00137E
+5B4848EB0F00EA03E0485A48485B90B6FC5A5A5AB65AA421377CB62A>I<EB07F8EB3FFF
+90B512C03901FC1FF03903E007F8D807C07F48486C7EA2D81FE07F6D7EA213F8A213F05C
+EA0FE0D803805BC7FC4A5AA24A5A5D4A5AEC7FC090381FFF804AC7FC6E7E15E09038000F
+F0EC07FC6E7E6E7E16808016C0157FA216E0A2121EEA7F80A2487EA316C015FF49148038
+7E000116006C495A6C6C485A390FF00FF86CB55A000114C06C6C90C7FCEB0FF823397DB6
+2A>I<15F81401A214031407A2140F141FA2143FA2147F14FB14F31301EB03E314C31307
+EB0F83A2EB1F03131E133E137C137813F8EA01F013E01203EA07C0A2EA0F8013005A123E
+123C127C5AB712F8A4C73807F800A94A7E0107B512F8A425387EB72A>I<000C140C000F
+143C9038F003FC90B5FC5D5D5D158092C7FC14FC14E090C9FCA9EB07F8EB1FFE90387FFF
+8090B57E9038FC1FF09038F007F8EBC00301807F6E7E130081C8FCA21680A5123E127F48
+7EA31600A2495A485C1278007C495A7E003F495A6C6C485A390FE03FE06CB512806C91C7
+FCC613FCEB1FE021397CB62A>I<EC3FC0903801FFF0010713FC90381FE07E90383F801F
+90387E000F49EB3F800001147F484813FF485AA2485AED7F004848133E92C7FC123FA348
+5A14FE903883FF80018F13E0D8FF9F7F9038BE07FCEBFC01496C7E497F49EB7F80A249EB
+3FC0A316E05BA4127FA5123F16C07F121FED7F80A26C6C14005D6C6C5B6C6C485A3901FE
+07F86CB55A6D13C0011F90C7FCEB03FC23397DB62A>I<123C123EEA3F8090B612E0A448
+15C0A216801600007CC7121E0078143E5D5D485C14014A5A5DC712074A5A4AC7FC141E14
+3E5CA25CA213015C1303A213075C130FA3131FA25CA2133FA5137FAA6D5A010EC8FC233A
+7BB72A>I<EB03F8EB1FFF017F13C09038FC0FF03901F803F83903E001FC000713004913
+7E120F49137F001F80A47FA26D5B6D137E01FC13FE6C6C5B9038FF81F86C13C3ECF7F06C
+EBFFC06C5C6C91C7FC6D13C06D7F4913F848B57ED803F87F48486C7E260FE01F13804848
+7E263F800313C0497E48EB007F007EEC3FE000FE141F48140FA21507A46C15C0007E140F
+127FED1F806C6CEB3F006C6C5BD80FF013FE3907FC07FC6CB512F0C65C013F1380D907FC
+C7FC23397DB62A>I<EB03F8EB1FFF017F13C03901FE07E03903F803F048486C7E48486C
+7E001F8049137E003F147FA248481480153F12FF16C0A516E0A5157F127FA36C6C13FFA2
+6C6C5A000F5B6C6C5A3903FC0FBF6CB5123F6C01FE13C0EB3FF8EB0FE090C7FCED7F80A3
+1600EA0F80486C5B486C5B4A5AA24A5A49485A49485A6C48485A9038C07F806CB5C7FC6C
+13FC00015B38003FC023397DB62A>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCAF
+121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A237AA217>I<007FB812F8B912FCA26C17F8
+CCFCAE007FB812F8B912FCA26C17F836167B9E41>61 D<153C157EA315FFA34A7FA34A7F
+A34A7F15BFA2020F7F151FA2021F7FEC1E0FA24A6C7EA34A6C7EA34A6C7EA349486C7FA3
+49486D7EA349486D7E91B6FCA24981A249C7EA1FF8011E140FA2013E81013C1407A2017C
+8101781403A201F88182487ED80FFE4A1380B500E090B6FCA4383B7DBA3F>65
+D<9239FF8001C0020F13F0027FEBFC0349B61207499038C03F8F903A0FFE000FDFD91FF8
+EB03FFD93FE07F49487F4948147F4890C8123F485A4848151FA24848150F121F49150712
+3F5BA2007F1603A35B00FF93C7FCAC127F6DED03C0A3123FA26D1507001F17807F000F16
+0F6C6C1600A26C6C5D6C6C153E6C6D143C6D6C147C6D6C5CD91FF8EB03F0D90FFE495A90
+3A03FFC03FC06D90B5C7FC6D6C13FC020F13F002001380323C7BB93D>67
+D<B812FEA40001903880000F6CED01FF82838383A283A404F013801707A494C7FC1501A2
+1503150F91B5FCA4EC800F15031501A2030014F0A4EF01E0A21600A31703A218C01707A2
+170F171F173F17FF481507B91280A434387EB739>69 D<B812FEA40001903880000F6CED
+01FF82838383A283A41880EEF007A494C7FCA21501A21503150F91B5FCA4EC800F150315
+01A21500A693C8FCAB487FB612E0A431387EB737>I<9239FF8001C0020F13F0027FEBFC
+0349B61207499038C03F8F903A0FFE000FDFD91FF8EB03FFD93FE07F49487F4948147F48
+90C8123F485A4848151FA24848150F121F491507123F5BA2007F1603A35B00FF93C7FCAB
+4BB6FC127F7FA292C713C0003F167F7FA2121F7F120F6C7EA26C7E6C7E6C6D14FF6D7E6D
+6C5BD91FF85BD90FFEEB07EF903A03FFC01FC76D90B512836D6CEBFE00020F01F8130002
+001380383C7BB942>I<B61280A40001EBC0006C5BB3B3AA487FB61280A419387EB71E>
+73 D<B6D88007B51280A400019026C00001EBF0006C496D13804DC7FC5F4C5A4C5A4C5A
+4C5A4C5A4CC8FC167E5E4B5A4B5A4B5A4B5A4B5A4BC9FC5D4B7E02817F148302877F028F
+7FEC9F3F9138BE1FF802FC7FECF80F4A6C7E02E07F4A7E4A6C7F6F7FA2707E707EA2707E
+707E831607707E8482707F8484486D497FB6D8800FEBFFE0A43B387EB741>75
+D<B500C092380FFFFC6E5DA300016D92383FFE006C60A2D9F7F8157BA2D9F3FC15F3A3D9
+F1FEEC01E3A3D9F0FFEC03C3A26E6CEB0783A36E6CEB0F03A36E6C131EA26E6C133CA36E
+6C1378A36E6C13F0A2913901FE01E0A3913900FF03C0A392387F8780A292383FCF00A3ED
+1FFEA36F5AA26F5A487ED807FE4C7EB527F003F003B512FCA3ED01E046387DB74D>77
+D<B500C00103B512C0A28080C69239001FF8006EEC07E06E6E5A8013F7EBF3FF8113F101
+F07F81147F6E7E6E7E81140F6E7E81806E138016C06E13E0157FED3FF016F8151FED0FFC
+16FE1507ED03FF6F138317C381EE7FE317F3163FEE1FFB17FF828282A28282A2177F173F
+487ED807FE151FB500F0140F1707A217033A387EB73F>I<B712E016FC16FF17C00001D9
+80007F6CED1FF0707E707E707EA2707EA21880A81800A24C5AA24C5A4C5A4C5AEEFFE091
+B65A94C7FC16FC16E00280C9FCB3487FB67EA431387EB739>80 D<B77E16F816FE707E00
+01D9800113E06C9138003FF0EE0FF8707E707EA2707EA284A695C7FCA24C5AA24C5A4C5A
+EE3FF04BB45A91B612804CC8FC16F816FE91388003FF030013C0167F707E707EA2707EA6
+83A5F001E017FEA21607486DECFF03B66C6C14C070138770EBFF8083CA001F1300EF03FC
+3B3A7EB73E>82 D<90390FF001C0EB7FFE48B512834814E73907F80FFF380FE00148487E
+4848137F90C7123F48141FA2007E140F12FE1507A36C1403A37F6D90C7FC6C7E7F13FF6C
+13F014FF6C14E06C14F86C806C80C680013F14801307D9007F13C01407020013E0157F15
+3FED1FF0150F12F0A21507A37EA216E07E150F6C15C06C141F6D14806D133F01F0EB7F00
+9038FE01FE00F8B55A486C13F0D8E00F13C0010190C7FC243C7BB92F>I<003FB812F0A4
+D9F001EB003FD87F80ED07F801001503007E1601007C1600A218781278A400F8177C4817
+3CA4C71600B3AC4A7F011FB612F0A436377DB63D>I<B6D88003B512C0A4000101C0C738
+1FF8006C49EC07E0715AB3B11707017F5E80A2013F150F6E92C7FC011F5D6E143E010F5D
+6D6C14FC6D6C495A6DB4EB07F06D9038C01FE0023FB51280020F49C8FC020313F8913800
+7FC03A3A7EB73F>I<B5D8FE03B5D8F801B51280A40003902780000FFEC7383FF8006C90
+C76C48EC0FE0745AA26C6D6D6C5DA36D6C6E4AC7FCA36D6C496D131EA36E496D133E011F
+037F143CA26E011F6D137C010FDA1E3F1478A26E013E6D13F80107DA3C1F5CA26E017CEB
+F8010103DA780F5CA26E16036D9126F007FC5BA36D903B81E003FE0780A391297FC3C001
+FF0FC8FCA3DA3FE7159E4C7EA203FF15FE6E90C76C5AA36E486E5AA36E486E5AA36E486E
+5AA36E486E5AA3513A7EB756>87 D<003FB7FCA49039FE0007FE01F0130F01C05C49495A
+90C7FC003E4A5A007E147F007C5D4B5AA24A5B00785B93C7FC4A5AA24A5AC7121F5D4A5A
+A24A5A14FF5D495BA24990C8FC5B5C495AEE0780495A133F5C495AA2495A48150F5C4890
+C7FCA24848EC1F00120F495C485A5E48485C007F140349131FB8FCA429387BB733>90
+D<EAFFF8A4EAF000B3B3B3B3EAFFF8A40D5178BC17>I<EAFFF8A4EA0078B3B3B3B3EAFF
+F8A40D517FBC17>93 D<EB1FF890B5FC000314C04880390FE01FF8001FEB07FCEBF00381
+1401816C487E6C5A0001C7FCC8FCA249B5FC131F137F3803FFE04848C6FCEA1FF8EA3FE0
+485AA2485A90C7131EA35CA26D5AEA7FC0EBE00F3A3FF03F7FFC391FFFFE3F6C01FC13F8
+00039038F01FF03A007F8007C027267EA42A>97 D<EA01FC12FFA4120F1203AFEC07F8EC
+3FFE91B57E90B612E09138F03FF09138800FF8EC0007496D7E4980150182A2811780AA17
+00A25D5EA26D495AA26D495A6E485A9039F7E03FE001F3B55A01E091C7FC9038C03FFCC7
+EA0FF0293A7EB82F>I<EB03FC90381FFF80017F13E048B512F03903FE03F8D807F813FC
+380FF007A2EA1FE0EA3FC0EC03F8007FEB01F0EC004049130012FFAA6C7EA3003F141E7F
+001F143E6D133C6C6C137C6C6C13F83903FF03F06CEBFFE06C6C13C0011F1300EB07F81F
+267DA425>I<ED0FE0EC07FFA4EC007F151FAFEB07F8EB3FFF90B512DF4814FF3803FE03
+3807F8004848137F4848133F003F141F5B127FA25BA212FFAA127F7FA2123F6D133F001F
+147F6C6C13FF6D4813F82607FE07EBFF800001B512DF6C149F90383FFE1FD90FF0EBC000
+293A7DB82F>I<EB07F8EB1FFF017F13C048B512E03903FC0FF03907F807F8390FF003FC
+381FE00115FEEA3FC01400007F14FF5BA2B7FCA40180C7FCA6127F7FA2003F140F7F001F
+141F6C6C131E6D133E6C6C137C3903FF81F8C6EBFFF06D13E0011F1380903803FC002026
+7EA425>I<EC1F80903801FFE0010713F85B90383FE7FCEB7FC71487EBFF07EA01FEEC03
+F80003EB01F049C7FCACB512FCA4D803FCC7FCB3A8487EB512FCA41E3A7EB91A>I<ED03
+E090390FF00FF890393FFC3FFC90B5127F000314FD3907F81FF1390FF00FF0D9E0071378
+001FECF800EBC003003F80A7001F5CEBE007000F5CEBF00F6C6C485A90B55A4891C7FCEB
+3FFC380E0FF0001EC9FC121FA37F90B512C06C14F815FE6CECFF806C15C0000F15E04815
+F0393FC0007F4848130F90C7EA07F812FE1503A46C14076C6CEB0FF06C6CEB1FE06D133F
+3A0FFC01FF806CB61200000114FC6C6C13F0010790C7FC26377EA42A>I<EA01FC12FFA4
+120F1203AFEC07F8EC1FFE91387FFF8091B57E9039FDF03FE09038FFC01F02807FEC000F
+A25BA25BB3A2486C80B500F0B512C0A42A397DB82F>I<EA01E0EA07F8A2487EA46C5AA2
+EA01E0C8FCAAEA01FC12FFA412071203B3A71207B512E0A413387EB717>I<EA01FC12FF
+A412071203B0913807FFFEA4020113C04BC7FC5DEC03F04A5A4A5A4A5A4AC8FC147EEBFD
+FE90B5FCA28181EC3FE013FE496C7E496C7E1407816E7E1401816E7F6F7EA2486C14F0B5
+00E1B51280A429397FB82C>107 D<EA01FC12FFA412071203B3B3AA487EB512F0A41439
+7EB817>I<2703F803FCEB07F800FFD91FFFEB3FFE027F01C0B57E91B500E180903CF9F0
+3FF3E07FE03C0FFBE01FF7C03F3C03FF800FFF001F6F6E7E02005B495CA2495CB3A2486C
+6E80B500F0B500E1B512C0A442247DA347>I<3903F807F800FFEB1FFE91387FFF8091B5
+7E9039F9F03FE0390FFBC01F2603FF807FEC000FA25BA25BB3A2486C80B500F0B512C0A4
+2A247DA32F>I<EB03FE90381FFFC0017F13F090B57E3901FE03FC3903F800FE4848137F
+4848EB3F804848EB1FC0A2003F15E049130F007F15F0A300FF15F8A9007F15F0A36C6CEB
+1FE0A2001F15C06C6CEB3F806D137F6C6CEBFF003903FE03FEC6B512F86D5B011F13C0D9
+03FEC7FC25267EA42A>I<3901FC07F800FFEB3FFE91B57E90B612E09138F03FF0000790
+38801FF86CEB000F496D7E498015038281A2178081A94B1300A34B5AA26D495A150F6D5C
+6E485A9138E07FE091B55A01FC91C7FCEC3FFCEC0FF091C9FCAA487EB512F0A429347EA3
+2F>I<3803F83F00FFEBFFC001F913F013FB9038FFCFF80007138F7E140F9038FE07F0EC
+03E0EC008015005BB3487EB512FCA41D247FA321>114 D<EBFF87000313EF000F13FF5A
+EA3F80387E003F805A80A27EA26C90C7FC13E06CB4FC14E06C13F8806C7F00077F000114
+806C7E010313C0EB007F00F0133F141F140F7EA27EEC1F807E6C133F9038C07F00EBFFFE
+5C00F113F038E07F801A267DA421>I<1378A513F8A41201A212031207120F121FB6FCA4
+D807F8C7FCB0EC0780A8140FD803FC1300A2EBFE1E3801FFFE6C5BEB3FF0EB0FC019337E
+B121>I<D801FCEB07F000FFEB03FFA4000FEB003F0003140FB3A2151FA3153F0001147F
+6DEBFFFC6D48EBFFC06CEBFFEF6D138F011F130FD907F8EBE0002A257DA32F>I<B538C0
+7FFEA43A07FE001FF06C48EB0FC016806C7E16006D5B6C141EA2EC803E017F133CA26D6C
+5AA2ECE0F8011F5BA214F1010F5B14FB01075BA214FF6D5BA26D90C7FCA36D5AA3147CA2
+27247EA22C>I<B53A8FFFF87FFFA42607FC009038800FF8037FEB07E01203033F14C06D
+14C00001027F1480A26C6C9138E00F0015FFA2D97F81EBF01E15E7A2D93FC36D5A15C302
+E3147CD91FE7EBFC78158102F714F8D90FFF6D5A150016FF6D5D4A137FA201035D4A133F
+A26D486D5AA36D486DC7FC38247EA23D>I<B500E1B5FCA40001018013E06C6EC7FC017F
+137EECC07C6D6C5A90381FE1F014F190380FFBE06DB45A6D5BA26D90C8FC7F816E7E14FF
+497F497FECEFF8EB07C790380F87FC90381F03FE140190383E00FF017E80D801FE6D7E00
+074A7EB50083EBFF80A429237FA22C>I<B538C07FFEA43A07FE001FF06C48EB0FC06D14
+8000011500A26D5B6C141E1480017F5BA2ECC07C013F1378A26D6C5AA214F1010F5BA214
+FB01075B14FF6D5BA36D90C7FCA26D5AA3147CA21478A214F85CA21301007E5B130300FF
+5B1307495A49C8FCEA7A3FEA7FFE6C5AEA1FF0EA0FC027347EA22C>I<B81280A4290480
+972A>123 D<001C131C007F137F39FF80FF80A5397F007F00001C131C190978B72A>127
+D E /Fm 35 122 df<913801FFF0021F13FC91B57E010380010F158049018013C090383F
+FC00D97FF014E049485A4813C0A2481380A26F13C0EE7F80EE3F0093C7FCA5EE1FE0B8FC
+A60003EB800181B3A5007FD9FC1F13FFA6303A7EB936>12 D<131EEB3F80EB7FC013FF48
+13E05A5A5A14C05A481300485AEAFFF8EA7FE01380003EC7FC121813116DB930>19
+D<141F143F147F14FC1301EB03F8EB07F0EB0FE0EB1FC0133FEB7F80A2EBFF00485AA212
+035B12075B120FA2485AA3123F5BA3127FA25BA312FFB0127FA37FA2123FA37F121FA36C
+7EA212077F12037F1201A26C7EEB7F80A2EB3FC0131FEB0FE0EB07F0EB03F8EB01FC1300
+147F143F141F185278BC26>40 D<127812FC127E7E7F6C7E6C7E6C7E6C7E7F6C7EA26C7E
+EB7F80A214C0133F14E0131F14F0A2EB0FF8A314FC1307A314FEA21303A314FFB014FEA3
+1307A214FCA3130F14F8A3EB1FF0A214E0133F14C0137F1480A2EBFF00485AA2485A5B48
+5A485A485A485A90C7FC127E5A127818527BBC26>I<EA0FC0EA1FE0EA3FF0EA7FF8EAFF
+FCA6EA7FF8EA3FF0EA1FE0EA0FC0C7FCA8EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8
+EA3FF0EA1FE0EA0FC00E247AA31B>58 D<ED03F04B7EA24B7EA34B7EA24B7EA24B7FA392
+B57EA24A80A215FB02038015F102078015E115E0020F80EDC07F021F80ED803FA2023F80
+4B7E4A81027E7F02FE81A24A7F0101824A7F49B77EA34982A2498202C0C7FC177F011F82
+4A143F013F8291C87EA24983B500FC0107B612C0A642397DB849>65
+D<DB3FFEEB01E00203B5EAE003023FECF80791B6EAFE0F0103EDFF9F4916FF011F49C6FC
+4901E0131F4990C71207D9FFFC80484914004801E0157F5A4849153F4A151F5A91C9120F
+5A5B007F1707A35B00FF94C7FCAC127F6DEE07E0A3123F7F6C170F6E16C06C171F806C6D
+ED3F807E6C01F8ED7F006C6DEC01FE6DB44A5A6D01E0EB0FF86D01FEEB7FF0010790B65A
+6D5E010093C7FC023F14FC020314F0DA003F90C8FC3B3A7BB846>67
+D<B87E17F817FF18C018F08428007FFC000713FE9338007FFF051F13807113C017037113
+E019F08319F8187F19FC183F19FEA519FFAB19FEA419FC187FA219F818FF19F04D13E05F
+4D13C0051F1380057F1300933807FFFEB95A18F018C095C7FC17F8178040387CB74A>I<
+DB3FFEEB03C00207B5EAC007023FECF80F91B6EAFC1F0103EDFF3F010F16FF49EBFC0049
+01C0133F4990C7120FD9FFFC14034801F080484980485B48177F4A153F4890C9FC181F5A
+5B007F170FA35B00FF94C8FCAB047FB61280127F7FA3123F6DDA0007EBC0007EA26C7F80
+7E6C7F6C7F6C13FC6DB45C6D01C05B6D01FC90B5FC6D90B7FC0103167F0100EDFE3F023F
+ECFC0F0207ECF001DA003F90C9FC413A7BB84C>71 D<B600FE011FB512C0A626007FFCC7
+000190C7FC4D5A4D5AEF1FF04D5A4D5A4D5A4C90C8FC4C5AEE0FF84C5A4C5A4C5A4C5A4B
+90C9FCED07FC150F4B7E4B7E4B7F92B5FC91B67E838315F303E17F03C17F03807F9138FE
+007F4A6D7E84707F82707F84707F82707F84717E83717F85717FB600FE90B612E0A64338
+7CB74C>75 D<B77EA626007FFCC9FCB3A7EF0FC0A4171F1880A3173FA3177FA2EFFF005E
+5E5E161F167FB9FCA25FA432387DB73A>I<B500FE041FB512E06E5EA36F5DA2C66C6D92
+B5EAC000A2017E6DEC01FBA36E6CEC03F3A26E6CEC07E3A26E6CEC0FC3A36E6CEC1F83A2
+6E6CEC3F03A36E6D137EA26E6D13FCA26E9038E001F8A392397FF003F0A292393FF807E0
+A392391FFC0FC0A292390FFE1F80A2923907FF3F00A36F13FEA26F5BA26F5BA3705AB603
+07B612E0EE3FE0A3EE1FC0EE0F8053387CB75C>I<B712FCEEFFE017FC17FF8418E02800
+7FFC000F7F04017F707F177F84173F84A760177F604D5A4C5B040F5B91B75A95C8FC17FC
+17F017FC9139FC007FFEEE1FFF707F8284A2707FA584A5F101E09538F803F0A282B600FE
+ECFC07709038FF0FE07113FF7114C071148005071400CBEA7FFC44397CB749>82
+D<903907FF8007013FEBF01F90B5EAFC3F48ECFF7F00075D5A381FFE019038F8001F4848
+130748487F81497F12FF82A26D80A27F7F01FE91C7FCEBFFE06C13FF15F015FF6C15C06C
+81826C15FC6C8112016C81013F1580130F010015C0140FEC007F030F13E0150381007C80
+12FC167FA37E17C07E6D14FF6D15806D5B01FC4913009039FFC01FFE91B55A5E485DD8FC
+3F5CD8F80F148027E0007FF8C7FC2B3A7BB836>I<003FB912C0A6267FFC00D9F80313E0
+01F0150001C0163F49161F90C7150FA3007E1707A448EF03F0A5C892C7FCB3A9010FB77E
+A63C377DB643>I<EB0FFF90B512E0000314F84814FE4880261FF80F7F02037F486C6C7F
+80A26F7EA26C5AA26C5A3903C00FFFD80007B5FC133F48B6FC120748EBE07F481300EA3F
+FC485A5B12FF5BA46D13FF007F497F6D48EBFFE0383FFE0F6CB7FC6C149F6C140F0001EB
+FC0326003FE0C8FC2B277DA52F>97 D<13FFB5FCA6120F7EAC913801FFC0021F13F8027F
+13FE91B6FC1780DAFE0713C0DAF00113E09139C0007FF05C91C7EA3FF8A217FC161FA217
+FEAA17FCA2163F17F8A26EEB7FF06EEBFFE0ECF001DAFC0F13C091B6128001F9ECFE00D9
+F07F5BD9E01F13F0C7000390C7FC2F3A7DB836>I<903801FFC0010F13F8013F13FE90B6
+FC4815804801C013C048130048484813E0EA1FFCA2EA3FF8A2007F6D13C05BED7F8000FF
+EC1E0092C7FCA96C7EA36C6CEB03F0A26C6C13076C6C14E0EC800F6C9038F03FC0000190
+B512806C15006D5B010F13F8010113C024277DA52B>I<EE3FC0ED3FFFA6150381AC9038
+03FF81011F13F9017F90B5FC48B7FC5A48EBE07F48EB000F48487F491301485AA2127F5B
+A212FFAA127FA27F123F5D6C6C5B4B13E06CB44913FE6C01C0B5FC6C90B6FC7E6C6C13F9
+011F13E10103903801FE002F3A7DB836>I<903803FF80011F13F0017F13FC90B57E0003
+8048018313804848C613C049EB7FE0001F143F484814F0151F127F4914F8150F12FF90B6
+FCA501F0C8FCA5127F7FA2003FEC01F87F001F14036C6C14F03907FF800F6C9038F03FE0
+6C90B512C06C1580013FEBFE00010F13F8010113C025277DA52C>I<903A07FF803F8001
+3F9038F1FFC090B712E04816F05A48010313DF380FFC00001F15FF4990387FEFE0003FED
+F380EEF000A6001F5D6D13FF000F5D2607FF035B6C90B5C7FC485C5DD80FBF13F0018713
+800180C9FC487EA213F090B512FEEDFFC06C15F882826C816C1680000F16C05A5A277FE0
+000713E04848130049147F163FA36D147F007F16C06D14FFD83FF8010313806CB4011F13
+006C90B55A6C5D000115F0D8003F1480010301F8C7FC2C377EA430>103
+D<13FFB5FCA6120F7EACEDFFE0020313F8020F7F023F7F4A7FDAFF071380ECF80302F014
+C04A7E14C01480A31400B2B5D8F83F13FEA62F397CB836>I<EA03F0487E487E487E487E
+A66C5A6C5A6C5A6C5AC8FCA713FFB5FCA6120F7EB3A5B512F8A6153A7DB91A>I<13FFB5
+FCA6120F7EAD92387FFFE0A6EEE0004B5A4A90C7FC4A5AEC0FFC4A5AEC3FE04A5A4A7E81
+A2818181ECDFFF140F01FE806E7F6E7F806E7F826F7E6F7EB539F07FFFF8A62D397DB833
+>107 D<13FFB5FCA6120F7EB3B3A7B512F8A615397DB81A>I<01FFD93FF0EB07FEB52601
+FFFE90383FFFC002076D90B57E021F0283804A02C780DA7F819039EFF03FFCDAFE009038
+FFC01F000701F803007F6C496D48130F4A5C4A5CA34A5CB2B5D8FE1FB500C3B512F8A64D
+257DA452>I<D801FEEBFFE000FF010313F8020F7F023F7F4A7FDAFF0713809038FFF803
+000F01F014C06C497E14C01480A31400B2B5D8F83F13FEA62F257CA436>I<903801FFC0
+010F13F8013F13FE90B67E48814801807F3A07FE003FF048486D7E48486D7EA2003F8149
+1307007F81A300FF1680AA007F1600A36C6C495AA2001F5D6D131F6C6C495A6C6C6CB45A
+6C90B55AC615806D91C7FC010F13F8010113C029277DA530>I<9039FF01FFC0B5001F13
+F8027F13FE91B6FC1780DAFE0F13C0DAF00313E00007D9C00013F05C91C7EA7FF8A2EE3F
+FCA3EE1FFEAAEE3FFCA3EE7FF8A26EEBFFF06E4813E0ECF003DAFC0F13C091B61280EEFE
+006E5B021F13F0020390C7FC91C9FCA9B512F8A62F357DA436>I<3901FE1FE000FFEB3F
+FC4A7E91B5FC90B6128002FB13C014E3000F13C37E148302811380A202801300EC003C92
+C7FCB1B512FEA622257DA428>114 D<90387FF8780003B512F85A121F5AEBE01F387F80
+07EB0003481301A3138001E0C7FC13FF14F86C13FF15806C14E06C14F06C14F87E000114
+FC6C7E010313FEEB001F1407007C130300FC13017EA27EEC03FC13C09038F01FF890B512
+F015E015C000FC140038F03FF81F277DA526>I<EB1F80A5133FA4137FA213FFA25A5A5A
+001FEBFFF0B6FCA50003EB8000B015FCA714816CEBC1F814E36CEBFFF06D13E06D13C06D
+1380903803FE001E357EB326>I<01FFEC3FC0B5EB3FFFA6000F14036C80B35DA25D4B13
+E06C4A13FEECC07F6C90B6FC6C14FD6D13F96D13E10107903801FE002F267CA436>I<B5
+00F0B539C07FFF80A60003903C8007FE0007E00002C0150F6C6F5C5D02E0151F6C04805B
+6E48143F017F03C090C7FC5D02F8017F5B013FEDE07EDAFC7F14FE011F90397E3FF0FC15
+FE9139FEFC1FF1010FEDF9F802FF14FB6D496CB45AA24B7E6D5EA26D496C5BA24B7E6D5E
+A26E486C90C8FCA26EC7127E41247EA346>119 D<B539F803FFFCA600039039C0007F00
+6C157E6E13FE6C5DECF001017F5CECF803013F5CECFC07A2011F5CECFE0F010F5CECFF1F
+6D5C15BF6D91C7FC15FFA26D5BA26D5BA26E5AA26E5AA26E5AA35DA25D383F803FD87FC0
+90C8FC5C38FFE07E14FE38FC01FC1303495A387E1FF0387FFFE06C5B6C90C9FC6C5AEA03
+F02E357EA333>121 D E /Fn 27 127 df<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA
+3FC0EA0F000C0C718B2B>46 D<151E153E157FA215FFA2EC01FEA2EC03FCA2EC07F8A215
+F0140FA2EC1FE0A2EC3FC0A21580147FA2ECFF00A2495AA2495AA25C1307A2495AA2495A
+A25C133FA2495AA249C7FCA2485AA25B1203A2485AA2485AA25B121FA2485AA2485AA248
+C8FCA25AA2127CA220407BB82B>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA
+0F00C7FCAB120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C2371A22B>58
+D<EC7F80903803FFE0010F13F8497F017F7F90B6FC4815804813C03A07FE003FC09038FC
+0FFF380FF03F48484813E049B5FCEA3FC15B4914F0007FEBF83F397E0FF01FECE00F00FE
+EBC007131F12FCEC8003A6ECC00712FE010F14E0007EEBE00FECF01F3A7F07F83FC0003F
+90B5FC018314806D1400D81FC05B6D6C5A6C6C6C5A3A07FC0FE7E09039FE001FF03903FF
+C07F6C90B5FC6C15E06D14C0011F14806DEBFE00010313F89038007FC024327DB12B>64
+D<EBFFF8000313FF4814C04814F0488081A29038F00FFE390FE003FF8038038000C7127F
+010FB5FC90B6FC1203120F5A5A4813E0EBF800EAFFC090C7FCA25CA26D5A6C6C5AEBF03F
+6CB612FC16FE7E7E6CEBFE7F0001EBF83F3A007FC00FFC27237DA22B>97
+D<EA7FFC487EA5127F1201A8EC07FCEC3FFF91B5128090B612E016F0A216F89138F83FFC
+ECC00F91388007FEEC000349130116FFA281A75D16FE6D130314809138C007FCECE00F91
+38F83FF891B5FC16F016E016C049148091383FFE003900FC07F8283281B12B>I<903803
+FFE0011F13F8017F7F48B57E48805A5A381FFE019038F800FE485A491338484890C7FC5B
+12FF90C9FCA67F153F6C6CEB7F80A26C7E6D13FF261FFC011300EBFF836CEBFFFE6C5C6C
+5C6C5C6C6C5B011F1380D903FEC7FC21237BA22B>I<EC1FFF4A1380A580EC007FA8EB1F
+F0EB7FFE48B6FC5A5A5A5AEBFC0F383FF00349C6FC485A157F5B12FF90C7FCA77F007F14
+FFA26D5A6C6C5A6D5A381FFC1F90B612FE6C15FF7E7E6C497E38007FF890391FE03FFE28
+327DB12B>I<EB03FE90381FFFC0017F13F048B57E4880488048804801031380EBF80048
+48EB7FC05B4848133F4914E0B7FCA616C00180C8FCED0FC06C6CEB1FE07F6C6C133F6D14
+C0D81FFE137F3A0FFFC0FF8091B5FC6C150000015C6C5C013F5B010F13E0010190C7FC23
+237DA22B>I<EC03FCEC1FFF027F138049B5FC4914C05B5BECFC7F90391FF03F809138E0
+1F0092C7FCA5007FB512FEB7FCA56C5C26001FE0C7FCB3A3007FB512F8B67EA56C5C2232
+7EB12B>I<ED07E090390FF83FF890393FFE7FFC90B6FC4815FE5A5A4814FD9039FC1FF9
+FC3A1FF007FCF8D9E0031300003F80EBC001A5EBE003001F5CEBF007390FFC1FF890B5FC
+5D5D485C5D4AC7FCEBCFF801C0C8FC13FC6CB512E015FC15FF4815C04815E016F0397FC0
+003F90C7EA07F800FE1403ED01FC481400A46C1401D87F80EB07F801E0131FD83FFCEBFF
+F090B6FC6C15E06C15C000031500C614FC013F13F00107138027377EA32B>I<EA7FFC48
+7EA5127F1201A8EC07FCEC3FFF91B512C090B67EA282A29138F81FF8ECE00FEC80071400
+A25BB03B7FFFF83FFFE0B56C4813F0A56C496C13E02C3281B12B>I<EB03C0EB0FF0A249
+7EA36D5AA2EB03C090C9FCA7383FFFF0487FA57EEA0007B3A3007FB6FCB71280A56C1500
+21337BB22B>I<EA7FF0487EA5127F1201A891383FFFF816FC5CA38016F8913807FC004A
+5A4A5A4A5A4A5A4A5A01F990C7FCEBFBFE13FF8081A2EC9FC0EC1FE0496C7EEBFC07496C
+7E8114016E7E157F3A7FFFC1FFFCB500E113FE14E3A314E16C01C113FC27327FB12B>
+107 D<387FFFF8B57EA57EEA0003B3B2007FB612E0B712F0A56C15E024327DB12B>I<3A
+7FC1F803F09039E7FE0FFCB6EA3FFE157F92B5FC7E17803A07FE1FFC3F9039F80FF01FA2
+01F013E0A201E013C0B03B7FFE1FFC3FF8023F137FB501FE13FCA3D87FFE01FC13F8021F
+133F2E2382A22B>I<397FFC07FC39FFFE3FFF91B512C090B67EA2827E00019038F81FF8
+ECE00FEC80071400A25BB03B7FFFF83FFFE0B56C4813F0A56C496C13E02C2381A22B>I<
+EB07F8EB3FFF90B512C04880488048804880391FFC0FFE393FF003FF497E48486C138049
+137FA200FF15C090C7123FA76D137F007F15806D13FFA26C6C481300EBF8076C6C485A6C
+B55A6C5C6C5C6C5C6C5C013F90C7FCEB07F822237CA22B>I<397FFC07FC39FFFE3FFF91
+B5128090B612E016F0A26C15F800019038F83FFCECC00F91388007FEEC000349130116FF
+A281A75D16FE6D130314809138C007FCECE00F9138F83FF891B5FC16F016E016C0491480
+91383FFE00EC07F891C8FCAB387FFFF8B57EA56C5B283581A22B>I<3A7FFF803FC0B538
+C1FFF002C713FC14DF91B512FEA27ED8003F13E3ED81FCECFE019138FC00704A13005CA2
+5CA25CAC007FB512F8B67EA56C5C27237FA22B>114 D<90387FFCF00003B512F8120F5A
+5A5AA238FFC00FEB00075AEC03F06C90C7FC13F0387FFFC014FC6CEBFF806C14C0000714
+F0000114F8D8001F13FCEB007FEC07FE007E1301B41300A27FEBC0019038F00FFC90B5FC
+15F8A215F015C000FD140038783FF81F237AA22B>I<133F497EA9007FB512FEB7FCA56C
+5C26007F80C7FCAB150FED3FC0A5157F02C01380013F13FF02E1130091B5FC6D5B5D6D5B
+6D5B010113C06D6CC7FC222D7EAC2B>I<3A7FFC01FFF0486C487FA5007F7F0001EB0007
+B2150F151F6D13FF91B612E06C16F0A27F7F6D13F70107010313E02C2381A22B>I<3A7F
+FF03FFF8B5008713FCA56C010313F83A03F8007F000001147EA26D13FE00005CA3EBFE01
+017E5BA2EB7F03013F5BA21487011F5BA214CF010F5BA214FF6D5BA46D90C7FCA26D5A6D
+5A26237EA22B>I<3A7FFF81FFFE14C3B514FFA36C15FE14813A07E00007E0A56C6CEB0F
+C0A2147FECFF8FA3D801F1EBCF8013F9A215DF14F713FB00001500A301FF13FF14E3A201
+7F5BA214C314C190383F80FC28237FA22B>I<3A3FFF07FFF048138F16F8A316F06C1307
+3A007F03F000EB3F87EC8FE090381FCFC0EB0FFF6D5B92C7FC6D5A13016D5A130180497E
+5B8190380FCFC090381F8FE0EB3F87EC03F0017E7F9038FE01FC3A7FFF07FFF8B5128702
+8F13FCA3028713F86C130726237EA22B>I<90383C01C09038FE03E03901FF07F048130F
+000F133F48EBFFE04814C0A2481480D8FFCF1300EB0FFC00FE5B387C07F0383803C01C0E
+79B12B>126 D E /Fo 32 122 df<EA0780EA0FE0EA1FF0123FA5121F120F1200A21201
+13E0120313C012071380120FEA1F005A123E12FC5A5A12600C1A7B8917>44
+D<ED01F01503A21507150FED1FE0153FA2157F15FF5C4A13C015DFEC079F140FEC1F1F14
+3E91383C3F80147814F8EB01F0EB03E0EB07C09138807F00130FEB1F00133E5B137801F8
+13FE485A485A485A5B120F4848485A123E5A007FB612FCA3B712F8C73807F800A4140FA2
+5DA3141F010FB512E05BA326387CB72A>52 D<EA03C0120713F090B612FC5A16F8A216F0
+5A16E016C0003EC7EA0F80003CEC1F00153E007C5C00785C4A5A5D481303C7485A4A5A4A
+C7FC143E5CA25C495A13035C1307495AA2131F5C133F49C8FCA25BA25B1201A212035BA2
+1207A3485AA5121F5BA26C5AEA0780263A75B72A>55 D<13F0EA03F8EA07FC120FA413F8
+EA07F0EA03C0C7FCAF121EEA3F80EA7FC012FFA41380EA7F00123C0E2379A217>58
+D<160F5E5E83167FA216FFA25D835DA25DA25D707EED1F3F151E153E153C157C03787FED
+F81F15F0140115E002038015C00207130F1580140F15004A80141E023E1307143C5CA291
+B67EA25BA2903903C00003A24948808249C7FCA2131EA2498282137C13FED807FF4A7FB5
+00E0017FEBFF80A393B61200393B7DBA3F>65 D<DB07FC130792397FFF800F4AB5EAE01E
+020FECF83E913A3FFE01FC7E913A7FE0007EFE902601FF80131F4990C7120FD907FC15FC
+4948140749481403495A495A494814014890C813F85A49150012075B120F4916F0121FA2
+485A1800A2485AA512FF5BA5EF0780A2127FA2170F18006D5D003F161E173E001F163C6D
+157C000F5E6D5D6C6C14016C6C4A5A6C6CEC0FC06C6D495AD97FE0017FC7FC90393FFC01
+FC010FB512F001035C010091C8FCEC1FF8383C77B93D>67 D<017FB8FCA401009038C000
+0F17014BEB007F183FA2181FA25B92C8FC181EA2EE01E0A249EC03C05CA204071300A216
+0F01074A5A4A137F91B6FCA490260FFC0090C7FC4A133F82A2180F181E011F141E5C183C
+A293C7FC187C013F16785C18F8EF01F0A21703017F15074AEC0FE0171F177F01FF913807
+FFC0B9FCA21880A238387EB739>69 D<017FB512E0A290B612C0A20100EBC000A25DA55B
+92C7FCA55B5CA513075CA5130F5CA5131F5CA5133F5CA5137F5CA313FFB612C0A423387E
+B71E>73 D<017FB5D8C001B512C05FA3010001C0C7EBF800F07F804B027EC7FC604D5A4D
+5AEF07C049ED1F8092C748C8FC177E5FEE01F0EE07E0494A5A4A495A4CC9FC167EED01F8
+4B7E010713074A487E151F4B7E92B5FCDAFDF97F90380FFFF103E07F15804B6C7E5C4A6D
+7E495A4A6D7E83160F831607013F814A7F84828482017F824A147F848401FF4B7EB6D8C0
+07EBFFE0A215805E42387EB741>75 D<017FB512F85EA290B6FC010001C0C8FCA25DA55B
+92C9FCA55B5CA513075CA5130F5CA3EF01E0EF03C0131F5CA2EF0780A3013F150F4A1500
+5FA25F177E017F15FE4A13011603EE0FFC01FF147FB8FCA25FA233387EB735>I<90267F
+FFE00307B5FC6F17FE61610100F0FE00193FDAF7F85E197BA219F3DAF3FC15F70101EE01
+E702E35FF003C7F00787ECE1FEF00F0F130302C1031E5BA2DAC0FF143CA2F0781F13074A
+03F05B6F7EEF01E0EF03C0193F010FED07809126003FC05DEF0F00A2171EDB1FE0147F49
+5D011E605F5FED0FF0DCF1E013FF133E013CDAF3C091C7FCA26FB45AA24D5A137C01784A
+5C150301FC5CD807FF4A1303B500F80203B512FE16F0150102F001E05D50387DB74D>I<
+B6D88003B512C0A400010180C7383FF800EF0FE091C86C5A60A3170F5A4993C7FCA45F12
+0749151EA4173E120F49153CA4177C121F491578A417F8123F495DA44C5AA216035F1607
+001F5E160F4CC8FC6C6C143E167E6C6C5C6C6C495A6C6CEB07E03A00FFC03FC06DB55A01
+1F49C9FC010713F8010013803A3A75B73F>85 D<007FB591387FFFF019E0A2B6FC000101
+C091380FFE006C49EC07F0715A6E5D4D5A137F4DC7FCA26E141E173E013F153C177C1778
+6E14F85F011F14015F4C5A804C5A130F4CC8FC5E6E131E163E0107143C167C16786E13F8
+01035C4B5AA24B5A14FF6D495A150F93C9FC5D159E6D13BE15BC15FC5D5D147F5DA25DA2
+6E5AA292CAFCA2141E3C3A76B73F>I<007FB548B500FC90B512E0A2B6484A4814C014FE
+00039026C0000F90C7381FFC006C90C7D807FCEC07F0636E6E5D6C03035EA250C7FCA204
+07151EA26E496C5C137F4C5DA2043D5DA26E01796D485A133F04F84A5A5E030115074C5D
+0303150F02F04901C090C8FC011F0107017F5B0480141E030F153E0400143C4B157CDAF8
+1EECE078033E15F8010F013C013F5B18E14B5DA24BECE3C002FC15F3902607FDE090381F
+F780A2DAFFC002FFC9FCA24B5CA292C75B6D150F4A5DA24A5DA24A5D010115074A5DA24A
+5D533A76B756>I<ECFFC0010713F0011F13FC017F13FFD9FE0013806DEB7FC048143F16
+E0151FA25B6C5A132090C7FCA2EC3FFF0103B5FC011F14C09038FFF83F4813803807FE00
+D80FF8137F485A48481480485A49148FA215FF00FF151E5C007F5B5C6D48133C3A3FF03F
+7FFC261FFFFC13F86C9038F83FF0000301E013E0C69038000F8028267DA42A>97
+D<ECFF80010313F0010F13FC013F13FE9038FF807E48EB00FF3803FC01120713F8EA0FF0
+001F14FE9038E000FC003F1420491300127FA212FF5BAA157C127F6D13F815F0383FE001
+391FF003E0390FFC0FC06CB512806CEBFE00C613F8EB3FC020267AA425>99
+D<14FF010713E0011F7F4913FC9038FF83FE3801FE0148486C7E48487F485A1680485A12
+3FA2485A90B6FCA2B71200A20180C8FCA590C9FCA37F153E127F5D6C6C13786D13F8391F
+F003F0390FFC07E06CB51280000191C7FC38007FFCEB1FE021267BA425>101
+D<ED0FE0ED7FF8913801FFFC140791381FF3FEEC3FC3EC7F839138FF07FC49130302FE13
+F80103EB01F04AC7FCA213075CA5130F5CA30003B512F0A2485CA226001FE0C7FCA4133F
+5CA5137F5CA513FF91C8FCA55A5BA31203B512FCA4273A7EB91A>I<14FE137FA4130713
+035CA513075CA5130F5CA2ED0FF0ED7FFE02F1B5FCD91FF714809139EFC07FC09138FF00
+3F5C14F8A2495A5CA25CA2167F137F4A1480A416FF13FF91C71300A45D5A495CA3000314
+03B500F8B512F8A24A14F0A22D397EB82F>104 D<14F0EB03FC130714FEA2130F14FC13
+0714F8EB01E090C7FCAAEB07F0EA03FFA314E0EA003F131FA3133F14C0A5137F1480A513
+FF1400A55A5BA31203387FFFF0B5FCA214E017387EB717>I<14FE137FA4130713035CA5
+13075CA5130F5CA392381FFFF0A2131F14E092380FFE0016F016C04B5A013F017FC7FCEC
+C0FCECC1F8ECC3F0ECCFC0ECDFE0EB7FFF81A28114E7EC87FCEBFF0301FE7F1401818082
+00016E7E5B6F7EA20003EC7FF8B500F1B51280A214E1A22C397FB82C>107
+D<14FE137FA41307130314FCA5130714F8A5130F14F0A5131F14E0A5133F14C0A5137F14
+80A513FF1400A55A5BA31203387FFFF8B512F0A317397EB817>I<90270FE00FF0EB0FF0
+D803FFD97FFEEB7FFE4801E1B548B5FC02E702871480913CCFC07FCFC07FC03D003FDF00
+3FDF003F02FE14FED91FF814F8A249485C4A5CA24A5CA3017F027F147F4A4A1480A501FF
+02FF14FF91C790C71300A5484A5C494A5CA3000302031403B500F8B500F8B512F8A24A4A
+14F0A245247EA347>I<90390FE00FF0D803FFEB7FFE4801E1B5FC02E714809139CFC07F
+C03A003FDF003F14FEEB1FF8A2495A5CA25CA2167F137F4A1480A416FF13FF91C71300A4
+5D5A495CA300031403B500F8B512F8A24A14F0A22D247EA32F>I<EC7FC0903803FFF001
+0F13FC4913FFD97FC013809039FE003FC04848131F4848EB0FE0485A000FEC07F05B001F
+15F8485AA2127FA249130F12FFA416F090C7121FA216E0A2ED3FC0A26CEC7F806D140000
+3F5C6D485A391FE003F8390FF81FF06CB55A6C1480C649C7FCEB1FF025267BA42A>I<90
+380FE0FC3903FFE3FF4801EF138091B512C0ECDF7F38003FFCA2EB1FF802F01380013FEB
+3F00ECE00892C7FC5CA3137F5CA513FF91C8FCA55A5BA31203B512FCA422247FA321>
+114 D<903803FC1C90380FFFBC013F13FC90B5FC3801FC033903F801F8EBF000485AA312
+0F15F06D130013FEEBFFF06C13FC14FF6C14806C14C06C14E0133F010F13F0EB007F141F
+003C130F1407A3007E14E0A2140F007F14C09038801F80EBC07FB5EAFE0000FB5B00F113
+F038E03F801E267DA421>I<130FA45B131EA2133EA2137E13FE5B12011207120F007FB5
+1280A2B61200A2D807F8C7FCA4120F5BA5121F5BA5003F133C13C0A4147C007F13781380
+14F86C6C5A13C1EBE3E06CB45A6C5B6C90C7FCEA01F8193379B121>I<01FE14FE007F14
+7F00FF14FFA24914FC00071407A200031403150712074914F8A4150F120F4914F0A4151F
+121F4914E0A3153FA2003F147F49EBFFC0A2001F5B020713E0D9E01F13FF6CB57E6C01FC
+13FE6C13F026007FC01300282579A32F>I<B538E07FFFA43A07FE001FF06C48EB0FC016
+8016006D131E12015DA25D6D13F86C5C14015D14835D90387F8780A2028FC7FC14CFEB3F
+DE14FE5CA25C131F5C5CA25C130F5CA2282479A22C>I<B53BC7FFFC3FFF801487A2028F
+495A2607FC009039800FF800037FEB07E000035FA26003FF49C7FCA26D48EBC01E12014A
+5C15DF02075C01FF139F6C010F6D5A151F91391F0FE1E0141E023EEBE3C002BC13F3D97F
+FCEBF78002F813FF4A6C90C8FCA202E05BA2D93FC05B150302805BA202005B7F011E6D5A
+392479A23D>I<48B538C0FFFEA43B000FFC003FE06D48EB1F8017006E131E5E13035E16
+F86E5B010113015E4B5A14FF4B5A7F4BC7FC5D159EEC7FBE15BC15F8A25D143F5DA25D14
+1F5D92C8FCA2141EA25C147C147814F8003F5B48485A130300FF5B495A011FC9FCEAFE7F
+EA7FFC5B6C5AEA0F802F3480A22C>121 D E /Fp 10 118 df<DB1FF8EB03804AB5FC02
+0FECE007023FECF00F913AFFF803FC1F499038C0007E010790C7EA1F3FD90FFCEC0FFF49
+4880D93FE0804948804948805A4890C9127F4848163FA24848161FA2485A180F123F5BA2
+007F1707A35B00FF94C7FCAC127F6DEE0780A3123FA26D160F001F1800A26C7E606C6C16
+1E183E6C6C163C6C6D157C6C17786D6C15F86D6C4A5AD91FF84A5A6D6C4A5A6DB4EC1F80
+010101C049C7FC6D9038FC01FE023FB512F8020F14E0020114809126001FF8C8FC39427A
+BF47>67 D<B712F016FF17C017F8C69039F0003FFC6D48EB07FF04017F707F717E717EA2
+717EA284A760A24D5AA24D5A4D5A4C5B040790C8FCEE3FFC91B65A17C05F17E09139E000
+7FF0EE1FFC707E707E82707FA2707FA684A6F101809538F003C0A2177FF0F807496C023F
+1480B600F0ECFC0F94381FFE1F71B5120005035BCB5BF00FF042407CBD49>82
+D<B81280A42703FE000113C00001EC003F161F160F1607A21603A392381E01E0A493C7FC
+153EA215FE90B5FCA4EBFE00153EA2031E1378A317F0A292C7FCA21601A217E016031607
+160F161F000315FFB8FC17C0A32D2F7DAE33>101 D<B512FCA4000313006C5AB3B3487E
+B512FCA4162F7DAE1B>105 D<B500FC90387FFFC0A4000390C7383FFC006C4815E01780
+4CC7FC16FC4B5A4B5A4B5A4B5A4B5A4BC8FC157E5D4A5A4A5A4A7E140F4A7EEC7FFE14FF
+9038FFF9FF02F07F4A7FECC07F4A6C7E4A6C7E5B6F7E6F7E8215036F7E6F7FA2707E707E
+8383486C81B500FC90B512E0A4332F7DAE3A>107 D<B512FEA4000390C8FC6C5AB3A516
+0FA4161F161EA3163EA2167E16FE150115030003EC1FFCB7FCA4282F7DAE2F>I<D8FFFE
+91B512C07F8080000192380FFC006EEB03F06E6D5AA2EBEFF8EBE7FC8013E3EBE1FF01E0
+1380A2EC7FC0EC3FE015F0141FEC0FF8EC07FCA2EC03FEEC01FFA26E1381ED7FC116E115
+3FED1FF1ED0FF9A2ED07FDED03FFA28181167FA2163F161F487ED80FFC140FB500C01307
+1603A21601322F7DAE38>110 D<EC1FF891B5FC010714E0498090393FF00FFC90397FC0
+03FE49C77E4848EC7F804848EC3FC04848EC1FE04848EC0FF0A24848EC07F8A24848EC03
+FCA2007F16FEA2491401A200FF16FFAA6C6CEC03FEA3003F16FC6D1407A2001F16F86C6C
+EC0FF06D141F000716E06C6CEC3FC06C6CEC7F806C6CECFF0090397FC003FE90393FF00F
+FC010FB512F06D5C010091C7FCEC1FF830317BAF3A>I<B612F015FF16C016F03A03FE00
+0FFC0001EC03FE6F7E81707EA283A55FA24CC7FC5D4B5AED0FFC90B612F016C093C8FC16
+C09039FE003FE06F7E150F6F7EA26F7EA582A4EF01E016FFA2486C6D1383B500FCECC7C0
+6F13FF043F1380040F1300C9EA01FC33307DAE37>114 D<B500FC90B512C0A4000390C7
+380FFC006C48EC03F0705AB3AB000015036D5D16076D5D6E130F6D6C49C7FC6D6C5B6D6C
+137E903907FC03FC6DB512F001005C023F1380DA07FCC8FC32307DAE38>117
+D E /Fq 13 121 df<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA
+07E01010698F3F>46 D<903803FFF0013F13FE48B612C04815F048814815FE824882A290
+26FE003F7F03077F15016F7F6C48147F707E6C5AC9121FA3ED0FFF0207B5FC91B6FC1307
+133F90B7FC12035A5A48EC001F4813E091C7FCEA7FFC5BEAFFE0A25BA2163FA27F167F6C
+6C14FF6D130301FE010F7F273FFF807FEBFFFE6C90B7FC18FF7E7E6C15E76C15876C6CD9
+FE0113FE011F9038F0003F010390C9FC38367AB43F>97 D<387FFFE0A2B57EA57EA2EA00
+3FACED03FE92381FFFC092B512F802F38002F78091B77E84A284DBF80F7FDBE0037FED80
+0092C76C7E4A143F4A6E7E4A140F844A80A2831980A283A85FA319006E5CA26E4A5AA26E
+141F4D5A6E4A5A92388001FFDBE0035BDBF81F5B92B6FC606095C7FC02F75C02F314F8D9
+1FE05C010F013F138090C7D807FCC8FC394A7FC83F>I<EC07FE91387FFFC049B512F801
+0780011F14FF4915804915C090B7FC4816E048D9FC0713F048EBF0019139C0007FF84849
+EB3FFC4848C7121F5B003FED0FFE5B491407127F17FF5BB9FCA717FEA201E0C9FCA36C7E
+A36C6CEC01FE7F6C6CEC03FF7F6C6D5B806C01F0EB0FFE6C01FC131F6C9039FFC07FFC92
+B512F87E6D15F0011F15E06D15C001031500010014FC021F13F00203138030367AB43F>
+101 D<EE7FC0923807FFF8031F7F037F7F4AB6FC4A15805C5CA24A138791383FFE07DBF8
+0313004A486C5A705A4B90C7FCA9003FB712F85AB87EA56C5EA2C7D87FE0C8FCB3AF003F
+B712C04882B87EA56C5E6C5E314A7CC93F>I<DA0FF8EB1FF0DA7FFFEBFFFC0103B500E3
+7F4991B6FC011F17805B5B90B9FCA248D9F80F01F1130048D9E00313E14A6CEBE07C4849
+6C6DC7FC91C7127F49143F000F82A249141FA56D143FA200075E6D147F6E13FF6C6D485B
+6E5A6CD9F80F5B6C90B65A5A94C8FC485D5E16F05ED9FC7F90C9FCEC0FF891CBFCA37FEB
+FF206C90B512FCEEFFC06C16F84816FF488348834883488349C700077FD83FF89138007F
+FC49151F4848ED07FE49150348486F7EA390CAFCA46D5DA26C6C4B5A01F0150F6D151FD8
+3FFEED7FFC261FFFC0903803FFF86C01FC013F5B91B7FC6C5F000117806C94C7FC6D5D01
+1F15F8010315C0D9007F49C8FC020713E039517DB33F>I<EC0F80EC3FE04A7EA24A7EA5
+6E5AA26E5AEC0F8091C9FCAA003FB512F0A24880A57EA2C7121FB3AF007FB712F817FCB8
+FCA57E17F82E4A77C93F>105 D<007FB512F8A2B67EA57EA2C7120FB3B3B3007FB81280
+A2B912C0A56C1780A232497AC83F>108 D<ED03FE3B7FFFE01FFFC092B512F8B500F380
+02F78091B77E84A26C83DBF80F7FD8003FD9E0037FED800092C76C7E4A143F4A6E7E4A14
+0F844A80A2831980A283A85FA319006E5CA26E4A5AA26E141F4D5A6E4A5A92388001FFDB
+E0035BDBF81F5B92B6FC606095C7FC02F75C02F314F802F05C033F1380DB07FCC8FC92CA
+FCB1007FB512F8A2B67EA56C5CA2394F7FB33F>112 D<EE03FF267FFFFE011F13E0B591
+B512F0DAFF0314F84B14FC151F4B14FE5D92B6FC6CEDFE1FD8000314F09338C00FFC1680
+9239FE0007F84B90C7FC5D5DA25D5DA35DA392C9FCB2007FB7FCB87E83A55F6C93C7FC37
+347DB33F>114 D<903A01FFF80F80011FEBFF1F90B712C012035A5A5A5AA248EB001F01
+F81303D8FFE07F497F5BA36DEC7F80A201F091C7FCEA7FFCEBFFE06CEBFF806C14FC6CEC
+FF806C15F06C15FCC681011F8001031580D9001F14C0DA007F13E01503030013F0D83F80
+147F007FED1FF8487E160F7FA27F161F7F6DEC7FF001FF14FFDAC00F13E091B6FC17C017
+8017005E6D5C011F14F0D87E071480277C007FFCC7FC2D3677B43F>I<14FE1301497EAD
+003FB712FC5AB87EA56C5EA2D8000390C9FCB3A2171EEF7F80EFFFC0A55E158018806D5C
+6F5A6F4813006D9038F83FFE92B5FC6E5C5F6E5C6E5C6E5C6E91C7FC020113FC9138003F
+E032437DC13F>I<003FB548B512F0038314F84802C714FCA56C028314F8030114F03C00
+0FFC003FE00001074A5A6D6C495A6E5A6D018190C7FC6DEB83FE91387FC7FC15E76EB45A
+6E5B6E5B805E6E5B806E90C8FC5C4A7F824A7F5C4A7FEDE7F891383FC7FCEC7FC39138FF
+81FEED01FF496D7F4948137F494880707E49486D7E494880003FB590B512FC48028114FE
+B615FFA56C17FE6C020014FC38337DB23F>120 D E /Fr 25 118
+df<93381FFF800307B512F0037F800203B67E020F81023F814AD9E0077F494848C66C7F
+4901F85B4901E0497F49495B495B92C7FC5B4A4A7F017F6F5B5CA3715B715B7190C7FC71
+5A94C9FCA70403B512F0BAFCA7C66C48C7120783B3B3A2007FB5D8FE03B612F0A744547D
+D34C>12 D<150FED3F80157FEC01FF1407143F0103B5FC48B6FCB7FCA5EBFC3FEAFE00C7
+FCB3B3B3A2003FB812C0A7324E77CD45>49 D<EC3FFF0103B512F0011F14FE017F6E7E90
+B712E0000316F8488248018080271FFC001F7F48480107148001FE6D14C0486C010014E0
+807013F0B56C7F18F882A218FCA2826C5BA26C90C7FC6C5A6C5AD801E05CC9FC18F8A34C
+13F0A24C13E018C093B5128018005D4B5B17F84B5B4B5B5F4B5B4B48C7FC4B5AEDFFF04A
+5B4A5B4A90C8FC4A48EB01FC4A5A15F04A48EB03F84A5A4A5A4990C7FCEB03FC49481407
+495A494815F04948141F49B7FC90B8FC5A5A5A4817E05A5A5AB9FCA318C0A4364E79CD45
+>I<91380FFFC091B512FE0103ECFFC0010F15F0013F15FC49819026FFF8077F48D9C000
+14804890C76C13C0486F13E080486D15F06E7F486D15F8A4805CA25E6C17F05C6C5B6C49
+4913E0C690C7FC90C814C093B512804B14005F4B5B030F5B037F5B027FB512C05F04FCC7
+FC82EEFFC017F0DA000713FC030113FF6F14807013C07013E018F07013F8A218FC7013FE
+A3D801F016FFEA07FCEA1FFF487F487FA2B57EA318FEA35E4A15FC7E4A4913F891C714F0
+6C485C6C4816E06CB46C48B512C06CD9F80714806C90B712006C16FC6C5E013F15E0010F
+1580010102FCC7FCD9001F1380384F7ACD45>I<B812F0A7D8000749C7FCB3B3B3AEB812
+F0A72C527CD134>73 D<B912F8F0FFE019FEF1FFC01AF01AFC1AFFD8000701FCC7003F80
+060380060080073F7F737F878587A2737FA288A899C8FCA34F5BA2634F5BA2077F5B96B5
+5A06031480063F91C9FC92B812FC1AF01AC04FCAFC85869226FC000114E0DD003F7F727F
+727F727F727FA27280A37280A487A587A575EB0F80F51FC0A28773153F8773ED7F80B800
+E08173ECC1FF7391B5120007035D735D736C5C080F14E0CE003F138062537CD167>82
+D<91383FFFC00103B512FC011FECFF80017F15E090B712F8488248D9E0037F4849C67F6E
+013F7F486D6D7F707FA2707FA284826C5B6C5B6C5B6C90C7FC90C8FCA3033FB5FC020FB6
+FC91B7FC1307133F4914C348B5EAF80348148048EBFE004813F8485B485B485B5CB5FC91
+C7FCA45EA26E5B7E6E497F6C6D017F13FF6C6D48B612F89126FC0FFE14FC6C90B55A0003
+EDF07F6C4B7E6C6CEC800F011F9026FC000313F8010101E090C8FC3E387CB643>97
+D<EB1FFCB5FCA71203C6FCB3A2EE3FFC0303B512C0031F14F0037F14FC02FDB7FC91B87E
+0480809226FC001F7F03F001077F03C06D7F5D92C76C7F4A828385A3721380A41AC0AD1A
+80A395B5FC1A00A261A24D5B806F495B6F495B03F0495B6F013F5B9126F7FF01B55A02E3
+90B6C7FC02C05D4A6C14F8DA001F14E0490107148090C8D87FF8C8FC42547CD24C>I<91
+3803FFF0023F13FF91B612E0010315F8010F814981017F9038C01FFF90B5C66C13804801
+FC5B48494913C05C5A485BA2485BA2486F1380701300486F5A4A6D5A93C8FCA2B5FCAD7E
+80A27EA26EEC0FE07E171F6C6D15C06C6D143F18806C6D147F6C01FFECFF006C9138C003
+FE6D9038F80FFC6D90B55A010F5D6D5D01011580D9003F49C7FC020313E033387BB63D>
+I<943801FFC0040FB5FCA7EE003F170FB3A2913807FF80027F13F849B6FC010715CF011F
+15EF4992B5FC49EBE03F90B5EA00074801FC130148496D7E484980484980A2485BA25AA2
+5A5CA3B5FCAD7EA46C7FA37E6E5C6C5E6C6D91B5FC5E6C6D4914F06C01FE010FECFFC06C
+9038FFC07F6D90B8FC011F15DF6D151F010314FC010014F0020F010049C7FC42547BD24C
+>I<913803FFE0023F13FE91B612C0010381010F15F84981017F01C07F903AFFFE003FFF
+4849010F138048496D13C0484915E048814A15F048815C486F13F8A25A5C18FC177FB5FC
+A291B7FCA518F80280C9FCA57EA280A27EA26E15F86CEE01FC17036C7F6C6DEC07F86C6D
+140F6EEC1FF06C6DEC3FE06C6C01C0137F6D9039FC03FFC06D90B6120001075D010115F8
+6D6C14E0021F1480020001F8C7FC36387CB63F>I<923803FF80037F13E00203B512F802
+0F80023F8091B6FC499038FE3FFF4913F04949481380491380A2491300495AA270130049
+5A705A705AEE03F093C8FCACB712F0A7C66C48C9FCB3B3A3007FB67EA731547CD32A>I<
+91260FFFE0EB1FE091B539FE01FFF00103DAFF8713F8010F92B512FC013F17FE5B90B512
+01489026F8003F131F48496D138F48496D13CFF0C7FC48EFE3F84A6DEBE1E0F0E0004883
+A86C5FA26E5B6C5FA26C6D495B6C6D4990C7FC6C9039FF01FFFE6D90B55A90B75A4816E0
+01FB1580D803F84AC8FC020F13E049CBFC487EA37F7F6D7E91B612E017FF6C17E018F818
+FE6C8319806C18C06D17E090B9FC000318F0120F4818F84890C87E01FC15074848030113
+FC00FFEE007F5B183FA46D167F007F18F86D16FF6C6C4B13F06D5D6C01C0020F13E06C01
+F0023F13C06C9026FF8007B51280000191B6EAFE006C5F013F16F001071680010003FCC7
+FC020714803F4F7DB545>I<EB1FFCB5FCA71203C6FCB3A2933807FF80047F13F04BB512
+FC030714FF4B81033F8192267FE03F7F9238FF800F9126FDFE0080DAFFF87F5D4B814B7F
+A25DA292C7FCA35CB3AAB6D8FE03B612F8A745537CD24C>I<133FEBFFC0000313F0487F
+487FA2487FA86C5BA26C5B6C5BC613C0013FC7FC90C8FCAAEB1FFCB5FCA712017EB3B3A2
+B612F8A71D547BD327>I<EB1FFCB5FCA71203C6FCB3A30403B512FEA79326007FF0C7FC
+4D5A4C5B04075B4C48C8FC4C5A4C5A4C5A4B485A4B13804B90C9FC4B5AED3FFC157F4B7E
+02FD7F91B6FC838383A203DF7F038F7F03077F4A6C7F14FC6F7F6F80707FA2707F707F70
+7F707FA2707F707F7080A2B6D8FC07ECFFC0A742537CD249>107
+D<EB1FFCB5FCA712017EB3B3B3ADB612FCA71E537BD227>I<D91FFC902607FF80EC1FFE
+B5027F01F049B512C04BB500FC010714F0030702FF011F14FC4B6F4880033F6FB7FC9226
+7FE03F01E10180809226FF800F9039E3FE003F00039026FDFE00DAF7F881C6D9FFF86DD9
+FFE07F4B5E4B4C814B6D91C77EA24B5DA292C75CA34A5EB3AAB6D8FE03B6D8F80FB612E0
+A76B367BB574>I<D91FFC903807FF80B5027F13F04BB512FC030714FF4B81033F819226
+7FE03F7F9238FF800F00039026FDFE0080C6D9FFF87F5D4B814B7FA25DA292C7FCA35CB3
+AAB6D8FE03B612F8A745367CB54C>I<EDFFF0021FEBFF80027F14E00103B612FC498101
+1F6F7E49D9C03F7F90277FFE00077F49486D7F4801F001007F488348496E7E48496E7EA2
+481880A248496E13C0A34818E0A4B517F0AB6C18E0A46C18C06E5CA26C1880A26C6D4A13
+006C5F6E14FF6C6D495B6C6D495B6C6D495B90277FFFC03F5B011F90B612806D93C7FC01
+0315FC010015F0021F1480020101F8C8FC3C387CB645>I<D91FFCEB3FFCB50103B512C0
+031F14F0037F14FC02FDB7FC91B87E0480809226FC003F7F000102F06D7F6C02C06D7F4B
+7F92C76C7F4A828385A2831A80A47213C0AD95B51280A44D1400A2615F616E5C6F495B6F
+5D03F0013F5B6F495BDBFF01B55A93B6C7FC4A5D6F14F8031F14E0030714809226007FF8
+C8FC93CAFCAFB612FEA7424D7CB54C>I<90393FF803FEB590380FFFC0033F13F04B13FC
+92B57E14F99139FBFE3FFFDBF87F13800003EBFFF0C614E015C0A21580A24B6C1300705A
+4A6D5A705A93C8FCA35CB3A8B7FCA731367CB539>114 D<903A01FFF00780011FEBFF1F
+90B7FC5A12075A48EB003F01F813074848130148487F49147FA200FF153FA27FA27F01FC
+91C7FCEBFF8014FCECFFF06C14FF16C06C15F06C8116FE6C816C1680000116C07E013F15
+E0010F15F013001407DA003F13F81503007E140000FE157F163F7E161F7FA26D15F0A26D
+143F6D15E06D147F01FE903801FFC09026FFC00F138091B612005E01BF5C011F14F0D8FC
+0714C027F0007FFCC7FC2D387CB636>I<147FA65CA45BA35BA25BA25B5B5B5B90B5FC12
+03000F91B5FCB8FCA6C66C90C8FCB3A7EE0FE0AA161F6D018013C0A2163F6D9038C07F80
+9238F0FF006DEBFFFE7F6D14F801005C023F5B020790C7FC2B4D7ECB35>I<D91FFEED7F
+F8B50203B5FCA70003ED000FC61603B3AC5FA25FA25FA2017F5D6E91B512FE6DDA01FDEB
+FFF89238E00FF96D90B512F16D15E16D15C1010115016D6C13FC020701E0ECC00045377C
+B54C>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%Papersize: a4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 295 541 a Fr(Instructions)47 b(for)e(using)h(the)h(macro)c(pac)
+l(k)-8 b(age)46 b Fq(rlepsf.tex)1540 740 y Fp(Colin)34
+b(R)m(ourke)1451 900 y Fo(Mathematics)27 b(Institute)1451
+1000 y(Univ)n(ersit)n(y)i(of)e(W)-7 b(arwic)n(k)1405
+1100 y(Co)n(v)n(en)n(try)g(,)28 b(CV4)g(7AL,)g(UK)1218
+1225 y(Email:)57 b Fn(cpr@maths.warwick.ac.uk)956 1325
+y Fo(www:)f Fn(http://www.maths.warwick.ac.uk/~cpr/)480
+1595 y Fm(Abstract)480 1793 y Fl(This)34 b(set)h(of)f(instructions)g
+(is)g(a)h(cut-do)n(wn)e(v)n(ersion)h(of)g([1].)57 b(The)34
+b(follo)n(wing)h(topics)480 1893 y(are)28 b(co)n(v)n(ered)h(here:)468
+2040 y(\(1\))84 b(Including)21 b Fn(.eps)f Fl(\014les)h(in)f(a)h
+Fn(tex)f Fl(or)g Fn(latex)g Fl(do)r(cumen)n(t)f(with)h(the)g(macro)g
+(pac)n(k)-5 b(age)660 2140 y Fn(epsf.tex)468 2287 y Fl(\(2\))84
+b(Relab)r(elling)41 b Fn(.eps)f Fl(\014les)g(in)f(a)h
+Fn(tex)f Fl(or)g Fn(latex)h Fl(do)r(cumen)n(t)e(using)h(the)h(macro)660
+2387 y(pac)n(k)-5 b(age)29 b Fn(rlepsf.tex)468 2535 y
+Fl(\(3\))84 b(Adding)28 b(lab)r(els)h(using)f(the)g(pac)n(k)-5
+b(age)29 b Fn(labelfig.tex)480 2745 y Fm(AMS)j(Classi\014cation)j(n)m
+(um)m(b)s(ers)83 b Fl(Primary:)h(00-01,)29 b(00-02,)f(68-00,)h(68-01)
+480 2893 y(Secondary:)85 b(51-00,)28 b(51-01,)h(55-00,)g(55-01,)f
+(57-00,)h(57-01)480 3103 y Fm(Keyw)m(ords:)85 b Fl(Graphics,)28
+b Fn(tex)p Fl(,)h Fn(latex)p Fl(,)f(eps)g(\014les,)h(lab)r(elling,)h
+(relab)r(elling)300 3386 y Fr(In)l(tro)t(duction)300
+3592 y Fk(The)25 b(macro)g(pac)m(k)-5 b(age)27 b Fj(rlespsf.tex)22
+b Fk(is)j(an)g(extension)h(of)g(the)f(Ro)s(c)m(kiki{Kn)m(uth)h(pac)m(k)
+-5 b(age)300 3701 y Fj(epsf.tex)27 b Fk([RoKn].)41 b(It)30
+b(allo)m(ws)g(the)g(p)s(ostscript)f(lab)s(els)h(in)g(an)f
+Fj(.eps)f Fk(\014le)i(to)g(b)s(e)f(replaced)300 3810
+y(b)m(y)k Fj(tex)e Fk(lab)s(els.)48 b(This)32 b(means)g(that)h(y)m(ou)g
+(can)g(dra)m(w)f(y)m(our)h(\014gure)f(in)h(an)m(y)g(dra)m(wing)f(pro-)
+300 3919 y(gram)27 b(whic)m(h)g(is)g(capable)h(of)g Fj(eps)e
+Fk(output)h(\(or)h(ev)m(en)g(dra)m(w)f(the)g(\014gure)g(\\b)m(y)g
+(hand"\))g(using)300 4028 y(dumm)m(y)g(p)s(ostscript)j(lab)s(els,)h
+(whic)m(h)f(are)h(then)f(replaced)h(b)m(y)f(the)h(correct)g
+Fj(tex)f Fk(lab)s(els.)300 4185 y(Section)c(1)g(giv)m(es)h(a)e(brief)g
+(in)m(tro)s(duction)h(to)g Fj(epsf.tex)p Fk(;)f(section)h(2)g(giv)m(es)
+h(instructions)e(for)300 4294 y(using)g Fj(rlepsf.tex)e
+Fk(and)i(section)i(3)f(is)g(an)g(o)m(v)m(erview)h(of)f(the)g(Sieb)s
+(enmann{S)m(\023)-43 b(eroul)24 b(pac)m(k-)300 4403 y(age)34
+b Fj(labelfig.tex)c Fk(whic)m(h)j(allo)m(ws)h Fj(tex)f
+Fk(lab)s(els)g(to)h(b)s(e)e(sup)s(erimp)s(osed)e(on)j(an)g(existing)300
+4512 y Fj(.eps)c Fk(\014le)i(and)e(in)i(particular)f(ma)m(y)g(b)s(e)g
+(used)f(in)i(conjunction)f(with)g Fj(rlepsf.tex)p Fk(.)300
+4732 y Fi(Note)91 b Fk(The)37 b(pac)m(k)-5 b(age)39 b
+Fj(rlepsf.tex)c Fk(can)j(only)g(b)s(e)f(used)f(in)i(systems)e(emplo)m
+(ying)i(the)300 4841 y(Rokic)m(ki{Kn)m(uth)d Fj(dvips)d
+Fk(con)m(v)m(erter.)52 b(\(This)33 b(is)h(the)g(standard)f(con)m(v)m
+(erter)i(normally)e(in-)300 4950 y(stalled)e(with)f(Unix)h(or)f(IbmPC)e
+Fj(tex)h Fk(instalations.\))1837 5168 y(1)p eop
+%%Page: 2 2
+2 1 bop 300 541 a Fr(1)137 b(Including)46 b Fq(.eps)f
+Fr(\014les)g(in)h(a)f Fq(tex)h Fr(do)t(cumen)l(t)300
+794 y Fk(This)33 b(section)h(is)f(a)h(brief)f(in)m(tro)s(duction)g(to)h
+(the)g(macro)f(pac)m(k)-5 b(age)35 b Fj(epsf.tex)c Fk([3].)51
+b(Com-)300 903 y(plete)23 b(detailed)f(instructions)g(are)g(giv)m(en)h
+(at)f(the)g(start)h(of)f([3],)i(m)m(y)d(purp)s(ose)f(here)i(is)g
+(merely)300 1012 y(to)31 b(publicise)f(this)h(pac)m(k)-5
+b(age)32 b(and)e(particularly)h(to)g(sho)m(w)f(ho)m(w)g(easy)h(it)g(is)
+g(to)g(use.)3151 977 y Fh(1)300 1265 y Fi(Loading)j Fj(epsf.tex)300
+1495 y Fk(Y)-8 b(ou)31 b(need)f(the)h(\014le)f Fj(epsf.tex)e
+Fk(and)i(the)g(line)300 1687 y Fj(\\input)46 b(epsf)300
+1857 y Fk(somewhere)29 b(in)h(y)m(our)h(\014le)f(near)g(the)h(b)s
+(eginning.)300 2028 y(\(In)k Fj(latex)f Fk(y)m(ou)h(can)h(alternativ)m
+(ely)i(load)e Fj(epsf)e Fk(b)m(y)h(adding)g(it)h(to)g(y)m(our)f
+Fj(\\usepackage)300 2137 y Fk(command;)e(y)m(ou)h(need)g(to)g(mak)m(e)g
+(a)g(cop)m(y)h(of)e Fj(epsf.tex)f Fk(renamed)g(as)i Fj(epsf.sty)e
+Fk(to)i(do)300 2246 y(this.)41 b(Note)31 b(that)g(this)g(is)f
+Fg(inste)-5 b(ad)41 b Fk(of)31 b(inserting)f(the)h(line)f
+Fj(\\input)47 b(epsf)p Fk(.\))300 2417 y(Both)31 b(\014les)f
+Fj(epsf.tex)e Fk(and)h Fj(epsf.sty)f Fk(are)i(usually)g(installed)h
+(with)f Fj(tex)f Fk(installations.)300 2670 y Fi(Using)35
+b Fj(epsf.tex)300 2900 y Fk(If)d(y)m(our)h(\014gure)f(is)h(the)g
+Fj(.eps)e Fk(\014le)i(called)h(sa)m(y)f Fj(spheres.eps)d
+Fk(then)j(to)g(insert)g(the)g(\014gure)300 3009 y(in)d(y)m(our)g
+(\014le)h(y)m(ou)g(merely)e(t)m(yp)s(e)300 3201 y Fj
+(\\epsfbox{spheres.eps})300 3371 y Fk(whic)m(h)f(will)h(paste)g(the)f
+(\014gure)g(in)m(to)h(y)m(our)g(\014le)f(at)h(the)g(curren)m(t)f(p)s
+(oin)m(t.)40 b(T)-8 b(o)29 b(displa)m(y)g(it)g(y)m(ou)300
+3480 y(w)m(ould)h(t)m(yp)s(e)h(for)f(example:)300 3672
+y Fj(\\centerline{\\epsfbox{sph)o(eres)o(.eps)o(}})300
+3843 y Fk(These)36 b(instructions)h(will)f(insert)h(the)f(\014gure)g
+(at)h(its)g(natural)g(size.)60 b(But)36 b(y)m(ou)h(can)g(also)300
+3952 y(rescale)32 b(it)f(to)g(an)m(y)f(desired)g(size)h(v)m(ery)g
+(easily)-8 b(.)43 b(The)29 b(line)300 4143 y Fj
+(\\centerline{\\epsfxsize)42 b(4.4truein\\epsfbox{spher)o(es.e)o(ps}})
+300 4314 y Fk(will)37 b(displa)m(y)f(the)h(\014gure)e(but)h(with)g
+(width)g(scaled)h(to)g(4.4)g(inc)m(hes)g(\(and)f(heigh)m(t)h(scaled)300
+4423 y(appropriately)d(to)h(preserv)m(e)f(the)g(shap)s(e)f(of)h(the)g
+(\014gure\).)51 b(A)34 b(similar)f(command)e Fj(\\eps-)300
+4532 y(fysize)26 b Fk(will)i(scale)g(using)g(heigh)m(t)g(as)g(the)f
+(measure.)39 b(Figure)28 b(1)g(w)m(as)g(inserted)f(in)g(this)h(\014le)
+300 4641 y(b)m(y)i(using)g(this)g(command.)p 300 4754
+1200 4 v 302 4815 a Fh(1)345 4850 y Fl(The)35 b Fn(epsf.tex)f
+Fl(pac)n(k)-5 b(age)36 b(can)f(only)g(b)r(e)g(used)g(with)f(the)g
+(Rokic)n(ki{Kn)n(uth)h Fn(dvips)g Fl(con)n(v)n(erter)300
+4950 y(normally)28 b(installed)h(with)e(Unix)i(or)f(IbmPC)f
+Fn(tex)h Fl(instalations.)1837 5168 y Fk(2)p eop
+%%Page: 3 3
+3 2 bop 555 2277 a @beginspecial 0 @llx 0 @lly 314 @urx
+213 @ury 2893 @rwi @setspecial
+%%BeginDocument: spheres.eps
+%Magnification: 1.00
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+-29.0 370.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+ /DrawSplineSection {
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ /xa x1 x2 x1 sub 0.666667 mul add def
+ /ya y1 y2 y1 sub 0.666667 mul add def
+ /xb x3 x2 x3 sub 0.666667 mul add def
+ /yb y3 y2 y3 sub 0.666667 mul add def
+ x1 y1 lineto
+ xa ya xb yb x3 y3 curveto
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+n 0 792 m 0 0 l 612 0 l 612 792 l cp clip
+ 0.06000 0.06000 sc
+15.000 slw
+% Arc
+gs n 1474.5 2941.1 503.9 129.5 54.2 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3917.5 2864.1 531.8 126.8 51.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 4684.5 4949.1 428.8 135.4 41.8 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1989.6 4767.1 518.0 128.9 56.7 arcn
+gs col-1 s gr
+ gr
+
+7.500 slw
+% Arc
+gs n 3932.9 3297.7 490.0 -176.2 147.6 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1443.1 3345.0 448.2 -27.9 112.2 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1493.1 3388.2 401.8 -4.0 89.9 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1470.2 2848.1 702.8 132.7 52.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1948.5 5190.3 465.9 -104.9 24.0 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1969.8 5150.0 450.9 -68.7 -5.1 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 4704.1 5252.5 455.2 179.1 138.4 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 4716.5 4809.5 645.6 135.8 45.5 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 2882.4 3347.0 127.4 -73.3 105.2 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3327.6 3443.8 191.9 -64.9 35.4 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1810.2 3262.9 135.0 -79.8 46.0 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 2164.5 3174.5 114.5 -90.3 67.1 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3197.7 3435.0 131.7 -80.7 71.7 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3923.9 2738.5 737.2 126.6 47.3 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 2437.1 3189.7 137.9 -70.1 78.7 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1341.5 4003.8 262.6 -104.9 -54.5 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1494.0 4450.6 383.3 -123.2 -83.3 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1604.8 4240.9 169.8 95.3 20.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1934.5 4466.2 186.9 134.3 28.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 1965.1 4617.9 186.2 137.0 31.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3080.6 5329.9 698.8 -161.2 175.5 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 2033.7 4665.6 722.3 138.9 61.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3991.4 5542.1 378.3 -47.1 3.5 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3823.2 5459.5 190.0 -63.1 37.4 arc
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 4168.6 5472.4 729.6 -159.8 179.4 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 3237.8 5259.8 257.1 -135.6 158.3 arcn
+gs col-1 s gr
+ gr
+
+% Arc
+gs n 2855.4 5231.8 215.5 -129.3 149.9 arcn
+gs col-1 s gr
+ gr
+
+15.000 slw
+% Ellipse
+n 1449 3355 312 312 0 360 DrawEllipse gs col-1 s gr
+
+% Ellipse
+n 3919 3305 335 335 0 360 DrawEllipse gs col-1 s gr
+
+% Ellipse
+n 4694 5240 313 313 0 360 DrawEllipse gs col-1 s gr
+
+% Ellipse
+n 1964 5175 316 316 0 360 DrawEllipse gs col-1 s gr
+
+7.500 slw
+% Polyline
+gs clippath
+993 3118 m 1102 3173 l 979 3176 l 1137 3213 l 1150 3154 l cp clip
+n 674 3075 m 1129 3180 l gs col-1 s gr gr
+
+% arrowhead
+n 993 3118 m 1102 3173 l 979 3176 l col-1 s
+% Polyline
+gs clippath
+2793 3077 m 2739 3188 l 2734 3065 l 2702 3224 l 2760 3236 l cp clip
+n 2829 2750 m 2734 3215 l gs col-1 s gr gr
+
+% arrowhead
+n 2793 3077 m 2739 3188 l 2734 3065 l col-1 s
+% Polyline
+gs clippath
+4383 3062 m 4259 3067 l 4366 3004 l 4211 3051 l 4228 3108 l cp clip
+n 4739 2925 m 4234 3075 l gs col-1 s gr gr
+
+% arrowhead
+n 4383 3062 m 4259 3067 l 4366 3004 l col-1 s
+% Polyline
+gs clippath
+1369 4338 m 1486 4299 l 1401 4389 l 1538 4302 l 1506 4252 l cp clip
+n 1089 4550 m 1509 4285 l gs col-1 s gr gr
+
+% arrowhead
+n 1369 4338 m 1486 4299 l 1401 4389 l col-1 s
+% Polyline
+gs clippath
+1494 5360 m 1617 5365 l 1506 5419 l 1665 5386 l 1653 5328 l cp clip
+n 1039 5485 m 1644 5360 l gs col-1 s gr gr
+
+% arrowhead
+n 1494 5360 m 1617 5365 l 1506 5419 l col-1 s
+% Polyline
+gs clippath
+3140 5467 m 3185 5351 l 3199 5475 l 3221 5314 l 3161 5306 l cp clip
+n 3119 5845 m 3189 5325 l gs col-1 s gr gr
+
+% arrowhead
+n 3140 5467 m 3185 5351 l 3199 5475 l col-1 s
+% Polyline
+gs clippath
+4889 5725 m 4848 5607 l 4939 5692 l 4851 5556 l 4801 5589 l cp clip
+n 5054 5925 m 4834 5585 l gs col-1 s gr gr
+
+% arrowhead
+n 4889 5725 m 4848 5607 l 4939 5692 l col-1 s
+% Polyline
+gs clippath
+4611 3518 m 4495 3473 l 4619 3458 l 4458 3438 l 4450 3498 l cp clip
+n 5569 3605 m 4469 3470 l gs col-1 s gr gr
+
+% arrowhead
+n 4611 3518 m 4495 3473 l 4619 3458 l col-1 s
+% Polyline
+gs clippath
+5203 4829 m 5125 4925 l 5148 4804 l 5080 4951 l 5135 4976 l cp clip
+n 5669 3750 m 5114 4950 l gs col-1 s gr gr
+
+% arrowhead
+n 5203 4829 m 5125 4925 l 5148 4804 l col-1 s
+% Open spline
+gs 15.000 slw
+n 1414.0 3670.0 m 1411.5 3935.0 l
+ 1411.5 3935.0 1409.0 4200.0 1689.0 4357.5 DrawSplineSection
+ 1689.0 4357.5 1969.0 4515.0 1989.0 4690.0 DrawSplineSection
+ 2009.0 4865.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 2279.0 5225.0 m 2604.0 5195.0 l
+ 2604.0 5195.0 2929.0 5165.0 3346.5 5305.0 DrawSplineSection
+ 3346.5 5305.0 3764.0 5445.0 4089.0 5415.0 DrawSplineSection
+ 4414.0 5385.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 3814.0 3630.0 m 3636.5 3845.0 l
+ 3636.5 3845.0 3459.0 4060.0 3534.0 4167.5 DrawSplineSection
+ 3609.0 4275.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 3729.0 4340.0 m 3784.0 4357.5 l
+ 3784.0 4357.5 3839.0 4375.0 3864.0 4217.5 DrawSplineSection
+ 3864.0 4217.5 3889.0 4060.0 3796.5 3990.0 DrawSplineSection
+ 3704.0 3920.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 3529.0 3850.0 m 3444.0 3850.0 l
+ 3444.0 3850.0 3359.0 3850.0 3294.0 4097.5 DrawSplineSection
+ 3294.0 4097.5 3229.0 4345.0 3391.5 4427.5 DrawSplineSection
+ 3391.5 4427.5 3554.0 4510.0 3674.0 4307.5 DrawSplineSection
+ 3794.0 4105.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 3879.0 3985.0 m 3961.5 3887.5 l
+ 3961.5 3887.5 4044.0 3790.0 4024.0 3710.0 DrawSplineSection
+ 4004.0 3630.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 1584.0 3655.0 m 1694.0 3832.5 l
+ 1694.0 3832.5 1804.0 4010.0 2031.5 3985.0 DrawSplineSection
+ 2031.5 3985.0 2259.0 3960.0 2429.0 4077.5 DrawSplineSection
+ 2429.0 4077.5 2599.0 4195.0 2676.5 4137.5 DrawSplineSection
+ 2754.0 4080.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 1734.0 3510.0 m 1849.0 3622.5 l
+ 1849.0 3622.5 1964.0 3735.0 2271.5 3757.5 DrawSplineSection
+ 2271.5 3757.5 2579.0 3780.0 2709.0 3802.5 DrawSplineSection
+ 2709.0 3802.5 2839.0 3825.0 2831.5 3902.5 DrawSplineSection
+ 2824.0 3980.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 2449.0 4040.0 m 2499.0 4007.5 l
+ 2499.0 4007.5 2549.0 3975.0 2774.0 4022.5 DrawSplineSection
+ 2774.0 4022.5 2999.0 4070.0 2886.5 4402.5 DrawSplineSection
+ 2886.5 4402.5 2774.0 4735.0 2519.0 4887.5 DrawSplineSection
+ 2264.0 5040.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 2379.0 4120.0 m 2319.0 4212.5 l
+ 2319.0 4212.5 2259.0 4305.0 2356.5 4477.5 DrawSplineSection
+ 2356.5 4477.5 2454.0 4650.0 2301.5 4780.0 DrawSplineSection
+ 2149.0 4910.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 4664.0 4925.0 m 4709.0 4755.0 l
+ 4709.0 4755.0 4754.0 4585.0 4706.5 4307.5 DrawSplineSection
+ 4706.5 4307.5 4659.0 4030.0 4839.0 3952.5 DrawSplineSection
+ 4839.0 3952.5 5019.0 3875.0 5114.0 4040.0 DrawSplineSection
+ 5114.0 4040.0 5209.0 4205.0 5084.0 4402.5 DrawSplineSection
+ 5084.0 4402.5 4959.0 4600.0 4909.0 4782.5 DrawSplineSection
+ 4859.0 4965.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs 7.500 slw
+n 1894.0 3360.0 m 2101.5 3302.5 l
+ 2101.5 3302.5 2309.0 3245.0 2694.0 3420.0 DrawSplineSection
+ 2694.0 3420.0 3079.0 3595.0 3301.5 3572.5 DrawSplineSection
+ 3524.0 3550.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 1264.0 3765.0 m 1264.0 4002.5 l
+ 1264.0 4002.5 1264.0 4240.0 1526.5 4382.5 DrawSplineSection
+ 1526.5 4382.5 1789.0 4525.0 1809.0 4630.0 DrawSplineSection
+ 1829.0 4735.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 1494.0 3795.0 m 1516.5 3995.0 l
+ 1516.5 3995.0 1539.0 4195.0 1821.5 4342.5 DrawSplineSection
+ 1821.5 4342.5 2104.0 4490.0 2114.0 4602.5 DrawSplineSection
+ 2124.0 4715.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 2414.0 5100.0 m 2696.5 5070.0 l
+ 2696.5 5070.0 2979.0 5040.0 3366.5 5185.0 DrawSplineSection
+ 3366.5 5185.0 3754.0 5330.0 4004.0 5295.0 DrawSplineSection
+ 4254.0 5260.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 2389.0 5380.0 m 2636.5 5342.5 l
+ 2636.5 5342.5 2884.0 5305.0 3301.5 5450.0 DrawSplineSection
+ 3301.5 5450.0 3719.0 5595.0 4044.0 5577.5 DrawSplineSection
+ 4369.0 5560.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs 15.000 slw
+n 1764.0 3280.0 m 2091.5 3202.5 l
+ 2091.5 3202.5 2419.0 3125.0 2766.5 3295.0 DrawSplineSection
+ 2766.5 3295.0 3114.0 3465.0 3361.5 3445.0 DrawSplineSection
+ 3609.0 3425.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs 7.500 slw
+n 1839.0 3125.0 m 2146.5 3057.5 l
+ 2146.5 3057.5 2454.0 2990.0 2784.0 3160.0 DrawSplineSection
+ 2784.0 3160.0 3114.0 3330.0 3281.5 3297.5 DrawSplineSection
+ 3449.0 3265.0 l gs col-1 s gr
+ gr
+
+/Times-Italic ff 150.00 scf sf
+499 3085 m
+gs 1 -1 sc (S) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+581 3127 m
+gs 1 -1 sc (2) col-1 sh gr
+/Times-Italic ff 150.00 scf sf
+866 5550 m
+gs 1 -1 sc (S) col-1 sh gr
+/Times-Italic ff 150.00 scf sf
+5066 6090 m
+gs 1 -1 sc (S) col-1 sh gr
+/Symbol ff 150.00 scf sf
+927 4620 m
+gs 1 -1 sc (a) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+1031 4673 m
+gs 1 -1 sc (2) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+956 5610 m
+gs 1 -1 sc (3) col-1 sh gr
+/Symbol ff 150.00 scf sf
+3019 5970 m
+gs 1 -1 sc (a) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+3124 6037 m
+gs 1 -1 sc (3) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+5142 6149 m
+gs 1 -1 sc (4) col-1 sh gr
+/Times-Italic ff 150.00 scf sf
+4796 2962 m
+gs 1 -1 sc (S) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+4878 3030 m
+gs 1 -1 sc (1) col-1 sh gr
+/Times-Italic ff 150.00 scf sf
+5637 3705 m
+gs 1 -1 sc (S) col-1 sh gr
+/Symbol ff 135.00 scf sf
+2808 2677 m
+gs 1 -1 sc (a) col-1 sh gr
+/Times-Roman ff 120.00 scf sf
+2913 2729 m
+gs 1 -1 sc (1) col-1 sh gr
+$F2psEnd
+rs
+%%EndDocument
+ @endspecial 1532 2441 a Fl(Figure)29 b(1:)37 b(from)27
+b([4])300 2661 y Fr(2)137 b(Relab)t(elling)43 b Fq(.eps)i
+Fr(\014les)h(using)f Fq(rlepsf.tex)300 2897 y Fk(The)38
+b(macro)f(pac)m(k)-5 b(age)40 b Fj(rlespsf.tex)35 b Fk(is)k(an)f
+(extension)g(of)g Fj(epsf.tex)p Fk(.)62 b(It)38 b(allo)m(ws)i(the)300
+3006 y(p)s(ostscript)28 b(lab)s(els)h(in)f(the)g Fj(.eps)g
+Fk(\014le)g(to)h(b)s(e)f(replaced)h(b)m(y)g Fj(tex)e
+Fk(lab)s(els.)40 b(This)28 b(means)f(that)300 3115 y(y)m(ou)22
+b(can)h(dra)m(w)f(y)m(our)g(\014gure)f(in)h(an)m(y)g(dra)m(wing)g
+(program)f(whic)m(h)h(is)g(capable)h(of)f Fj(eps)f Fk(output)300
+3224 y(\(or)31 b(ev)m(en)g(dra)m(w)f(the)h(\014gure)e(\\b)m(y)i
+(hand"\))f(using)g(dumm)m(y)d(p)s(ostscript)k(lab)s(els,)f(whic)m(h)h
+(are)300 3333 y(then)f(replaced)h(b)m(y)f(the)h(correct)g
+Fj(tex)f Fk(lab)s(els.)300 3569 y Fi(Loading)k Fj(rlepsf.tex)300
+3787 y Fk(Y)-8 b(ou)31 b(need)f(b)s(oth)g(the)g(\014les)h
+Fj(epsf.tex)d Fk(and)h Fj(rlepsf.tex)f Fk(and)i(the)g(line)300
+3969 y Fj(\\input)46 b(rlepsf)300 4132 y Fk(somewhere)c(in)h(y)m(our)g
+(\014le)g(near)g(the)g(b)s(eginning.)78 b(Do)44 b Fg(not)53
+b Fk(also)44 b(t)m(yp)s(e)f Fj(\\input)j(epsf)300 4241
+y Fk(\(if)33 b(y)m(ou)g(already)g(ha)m(v)m(e)h(this)e(line)h(then)f
+(edit)h(it)g(to)h Fj(\\input)46 b(rlepsf)p Fk(\).)g(This)31
+b(is)i(b)s(ecause)300 4350 y Fj(rlepsf.tex)19 b Fk(loads)i
+Fj(epsf.tex)f Fk(automatically)j(so)e(it)h(should)f(not)g(b)s(e)g
+(loaded)h(separately)-8 b(.)300 4514 y(\(In)27 b Fj(latex)f
+Fk(y)m(ou)i(can)f(alternativ)m(ely)j(load)e Fj(rlepsf)e
+Fk(b)m(y)h(adding)g(it)h(to)g(y)m(our)f Fj(\\usepackage)300
+4623 y Fk(command|y)m(ou)32 b(need)h(a)h(cop)m(y)g(of)f
+Fj(rlesps.tex)e Fk(renamed)h(to)i Fj(rlepsf.sty)p Fk(,)e(and)h(y)m(ou)
+300 4732 y(also)44 b(need)e Fj(epsf.tex)e Fk(for)j(this.)77
+b(Note)44 b(that)f(this)g(is)g Fg(inste)-5 b(ad)53 b
+Fk(of)43 b(inserting)g(the)g(line)300 4841 y Fj(\\input)j(rlepsf)p
+Fk(.)38 b(Also)26 b(note)h(that)f(the)g(pac)m(k)-5 b(age)28
+b Fj(rlepsf)c Fk(includes)i(the)g(pac)m(k)-5 b(age)28
+b Fj(epsf)p Fk(,)300 4950 y(whic)m(h)i(should)f(not)i(b)s(e)f(loaded)h
+(separately)-8 b(.\))1837 5168 y(3)p eop
+%%Page: 4 4
+4 3 bop 300 541 a Fi(Using)35 b Fj(rlepsf.tex)300 729
+y Fk(Dra)m(w)f(y)m(our)g(\014gure)f(in)g(an)m(y)h(dra)m(wing)g(program)
+e(and)h(use)g(\\dumm)m(y")f(lab)s(els,)j(ie)f(c)m(ho)s(ose)300
+838 y(lab)s(els)g(whic)m(h)g(are)h(simple)e(strings)h(but)f(whic)m(h)h
+(remind)e(y)m(ou)j(of)f(the)g(correct)i(lab)s(el;)g(for)300
+947 y(example)41 b(y)m(ou)h(could)f(t)m(yp)s(e)h Fj(babcq2)e
+Fk(to)i(stand)f(for)g(the)h(lab)s(el)2583 923 y(\026)2586
+947 y Ff(babcq)2795 914 y Fe(2)2845 947 y Fk(.)74 b(No)m(w)42
+b(exp)s(ort)300 1057 y(y)m(our)33 b(\014gure)f(as)h(an)g(encapsulated)g
+(p)s(ostscript)f(\()p Fj(eps)p Fk(\))h(\014le.)48 b(Place)34
+b(y)m(our)f Fj(eps)e Fk(\014le)i(inside)300 1166 y(a)27
+b Fj(\\relabelbox)45 b(...)i(\\endrelabelbox)p Fk(.)35
+b(Insert)27 b(the)g Fj(eps)f Fk(\014le)g(exactly)j(as)e(usual)f(with)
+300 1275 y Fj(epsf.tex)34 b Fk(as)i(explained)g(in)f(the)h(last)h
+(section.)58 b(T)m(yp)s(e)36 b(y)m(our)f(relab)s(elling)i(instructions)
+300 1384 y(after)j(the)f Fj(\\epsfbox{..})d Fk(command.)64
+b(A)40 b(t)m(ypical)g(relab)s(elling)g(instruction)f(\(for)h(the)300
+1493 y(dumm)m(y)27 b(lab)s(el)k(suggested)g(ab)s(o)m(v)m(e\))h(is:)300
+1651 y Fj(\\relabel)46 b({babcq2}{$\\bar)d(babcq^2$})300
+1797 y Fk(There)30 b(are)h(three)f(\(re\)lab)s(elling)i(macros:)300
+1955 y Fj(\\relabel)46 b({)p Fk(pslab)s(el)p Fj(}{)p
+Fk(T)-8 b(eX)29 b(lab)s(el)p Fj(})300 2064 y(\\adjustrelabel)44
+b(<)9 b Ff(dx)g Fj(,)g Ff(dy)j Fj(>)48 b({)p Fk(pslab)s(el)p
+Fj(}{)p Fk(T)-8 b(eX)30 b(lab)s(el)p Fj(})300 2173 y(\\extralabel)45
+b(<)9 b Ff(x)g Fj(,)g Ff(y)j Fj(>)47 b({)p Fk(extra)31
+b(lab)s(el)p Fj(})300 2331 y(\\relabel)24 b Fk(uses)i(the)h(p)s
+(osition)g(of)f(the)h(dumm)m(y)d(ps)h(lab)s(el)i(for)g(the)f(new)g
+Fj(tex)g Fk(lab)s(el)h(\(whic)m(h)300 2440 y(can)h(b)s(e)f(an)m(y)i
+Fj(tex)e Fk(output\).)40 b(The)27 b(new)g(lab)s(el)i(is)f(p)s
+(ositioned)g(with)f(same)h(reference)g(p)s(oin)m(t)300
+2549 y(\(left-hand)g(end)f(of)h(baseline\))h(as)f(the)g(dumm)m(y)d(ps)i
+(lab)s(el.)40 b(Usually)28 b(this)g(means)e(that)j(the)300
+2658 y(new)38 b(lab)s(el)g(p)s(osition)g(is)g(p)s(erfect,)i(but)d(if)h
+(it)h(needs)f(adjusting)f(then)h Fj(\\adjustrelabel)300
+2767 y Fk(can)32 b(b)s(e)e(used)h(to)h(adjust)e(the)i(p)s(osition)f(b)m
+(y)40 b(\()p Ff(dx;)15 b(dy)s Fk(\))9 b(.)45 b Fj(\\extralabel)28
+b Fk(allo)m(ws)33 b(extra)f Fj(tex)300 2876 y Fk(lab)s(els)g(to)h(b)s
+(e)e(inserted.)46 b(The)32 b(p)s(ositions)41 b Ff(x;)15
+b(y)44 b Fk(are)32 b(measured)f(from)f(the)j(b)s(ottom)e(righ)m(t-)300
+2985 y(hand)d(corner)g(of)h(the)g(diagram)f(\(so)38 b
+Ff(x)g Fk(is)28 b(t)m(ypically)j(negativ)m(e\)!)42 b(The)29
+b(re/extra-lab)s(elling)300 3095 y(instructions)g(can)h(b)s(e)f(giv)m
+(en)h(in)f(an)m(y)h(order)f(and)f(an)m(y)i Fj(tex)f Fk(dimensions)e
+(can)j(b)s(e)f(used)f(for)300 3204 y Ff(x;)15 b(y)s(;)g(dx;)g(dy)d
+Fk(.)300 3349 y(Preview)41 b(the)h(diagram)f(\(with)g(ghostview,)k
+(gsview)d(or)f(some)g(similar)g(ps)f(preview)m(er\))300
+3458 y(after)28 b(inserting)f(the)g Fj(\\relabel)e Fk(instructions)i
+(but)f(b)s(efore)h(inserting)g(the)g Fj(\\extralabel)300
+3568 y Fk(instructions.)39 b(Decide)27 b(if)e(the)h(\014gure)f(needs)g
+(scaling)i(and)e(if)g(so)h(c)m(ho)s(ose)h(the)e(scaled)i(width)300
+3677 y(or)c(heigh)m(t.)39 b(Decide)23 b(whic)m(h)g(lab)s(els)f(need)h
+(adjusting)f(\(if)h(an)m(y\))g(and)f(measure)f(the)i(p)s(ositions)300
+3786 y(of)36 b(an)m(y)g(extra)g(lab)s(els)g(whic)m(h)f(are)h(needed)f
+(from)f(the)i(b)s(ottom)f(righ)m(t.)57 b(Add)34 b(the)i(appro-)300
+3895 y(priate)42 b(scaling)i(command)39 b(to)k(the)f
+Fj(\\epsfbox)e Fk(command)g(as)i(explained)g(in)g(the)g(last)300
+4004 y(section.)f(Edit)28 b(the)h Fj(\\relabel)d Fk(instructions)i
+(whic)m(h)g(need)g(adjusting)g(in)m(to)h Fj(\\adjustre-)300
+4113 y(label)35 b Fk(instructions)i(inserting)g(appropriate)f
+Fj(<)9 b Ff(dx)g Fj(,)g Ff(dy)j Fj(>)37 b Fk(and)f(add)g(the)h
+Fj(\\extralabel)300 4222 y Fk(instructions.)300 4368
+y(Preview)e(again)i(and)d(mak)m(e)h(an)m(y)h(\014nal)f(adjustmen)m(ts)f
+(to)h(the)h(v)-5 b(arious)35 b(v)-5 b(ariables.)56 b(This)300
+4477 y(all)36 b(sounds)d(complicated,)38 b(but)c(it)h(is)g(in)g(fact)h
+(v)m(ery)f(straigh)m(tforw)m(ard)h(and)e(the)h(amoun)m(t)300
+4586 y(of)c(adjustmen)m(t)e(is)h(usually)g(minimal.)300
+4732 y(The)h(result)g(is)g(a)h(b)s(o)m(x)f(with)g(the)g(same)g
+(dimensions)f(as)h(the)h(original)g(epsfb)s(o)m(x)f(but)f(with)300
+4841 y(new)e Fj(tex)f Fk(lab)s(els.)40 b(This)28 b(can)h(then)f(b)s(e)f
+(inserted)h(in)g Fj($$)47 b(...)g($$)28 b Fk(or)g Fj(\\centerline{)45
+b(...)300 4950 y(})30 b Fk(for)g(displa)m(y)-8 b(,)31
+b(or)g(com)m(bined)e(with)h(other)h(b)s(o)m(xes)g(to)g(form)e(a)h
+(larger)h(displa)m(y)-8 b(.)1837 5168 y(4)p eop
+%%Page: 5 5
+5 4 bop 300 541 a Fk(Here)32 b(is)g(a)h(sp)s(eci\014c)f(example.)45
+b(This)31 b(is)h(the)g(co)s(de)g(for)g(relab)s(elling)h(\014gure)e(2,)i
+(whic)m(h)f(w)m(as)300 650 y(dra)m(wn)e(using)f Fj(xfig)h
+Fk(and)f(exp)s(orted)h(as)h(an)f Fj(eps)g Fk(\014le.)300
+877 y Fj(\\centerline{\\relabelbox\\)o(smal)o(l)300 986
+y(\\epsfxsize)45 b(3.5truein)g(\\epsfbox{KDiag.eps})300
+1095 y(\\relabel)h({c}{$c$})300 1204 y(\\adjustrelabel)e(<-2pt,)i(0pt>)
+h({a}{$a$})300 1313 y(\\relabel)f({b}{$b$})300 1422 y(\\adjustrelabel)e
+(<-1pt,)i(0pt>)h({b1}{$b$})300 1532 y(\\adjustrelabel)d(<-1pt,)i(-1pt>)
+g({bb}{$\\bar)f(b$})300 1641 y(\\relabel)h({bb1}{$\\bar)e(b$})300
+1750 y(\\relabel)i({bc}{$b\\bar)e(c$})300 1859 y(\\relabel)i
+({ba}{$\\bar)f(ba$})300 1968 y(\\relabel)h({cq2}{$cq^2$})300
+2077 y(\\relabel)g({babcq2}{$\\bar)d(babcq^2$})300 2186
+y(\\relabel{\(cq2\)2}{$\(cq^2\))o(^2$})300 2295 y(\\relabel)j
+({ba2bcq}{$\\bar)d(b\\bar)k(a^2bcq$})300 2404 y(\\relabel)f
+({babqbabq2}{$\\bar)d(b\\bar)j(abq\\bar)g(b\\bar)g(abq^2$})300
+2513 y(\\relabel)g({where)g(q=babc)g(etc}{where)f($q=\\bar)h(b\\bar)g
+(abc$)h(and)300 2622 y(unlabelled)e(regions)h(carry)g($q^3$,)g($a^2$)h
+(or)g($c^3$})300 2732 y(\\extralabel)e(<-1.7truein,)f(2.15truein>)h
+({$\\pm$})300 2841 y(\\endrelabelbox})810 4786 y
+(MTG takes control) pop /MTGsavestate save def /p /show load def MTGdict
+begin gsave /rllist [] def /save {false} def /restore {pop} def /show
+{Mshow} def /ashow {Mshow pop pop} def /widthshow {Mshow pop pop pop}
+def /awidthshow {Mshow 5 {pop} repeat} def /xshow {pop Mshow} def /yshow
+{pop Mshow} def /xyshow {pop Mshow} def /cshow {Mshow pop} def /kshow
+{Mshow pop} def
+ 810
+4786 a 810 4786 a
+/a {moveto} bind def
+ 810 4786 a @beginspecial 0 @llx 0 @lly
+261 @urx 220 @ury 2301 @rwi @setspecial
+%%BeginDocument: KDiag.eps
+%Magnification: 1.00
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+-226.0 461.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+ /DrawSplineSection {
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ /xa x1 x2 x1 sub 0.666667 mul add def
+ /ya y1 y2 y1 sub 0.666667 mul add def
+ /xb x3 x2 x3 sub 0.666667 mul add def
+ /yb y3 y2 y3 sub 0.666667 mul add def
+ x1 y1 lineto
+ xa ya xb yb x3 y3 curveto
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+n 0 792 m 0 0 l 612 0 l 612 792 l cp clip
+ 0.06000 0.06000 sc
+15.000 slw
+% Ellipse
+n 6091 4979 280 582 0 360 DrawEllipse gs col-1 s gr
+
+% Polyline
+n 4331 4952 m 4766 4952 l gs col-1 s gr
+% Polyline
+n 4336 4947 m 4556 4657 l gs col-1 s gr
+% Polyline
+n 4566 4657 m 4766 4952 l 4551 5232 l 4351 4957 l gs col-1 s gr
+% Polyline
+n 4381 6617 m 4656 6932 l 4816 6597 l 4386 6612 l gs col-1 s gr
+% Polyline
+n 7881 4707 m 7881 5042 l 7606 4862 l 7891 4707 l gs col-1 s gr
+% Polyline
+n 7271 4327 m 7341 4502 l gs col-1 s gr
+% Polyline
+n 7041 4722 m 6936 4922 l gs col-1 s gr
+% Polyline
+n 7291 5177 m 7216 5362 l gs col-1 s gr
+% Polyline
+n 7701 4732 m 7781 4852 l gs col-1 s gr
+% Polyline
+n 7816 4877 m 7961 4882 l gs col-1 s gr
+% Polyline
+n 7776 4907 m 7696 5012 l gs col-1 s gr
+% Polyline
+n 4706 4747 m 4591 4842 l gs col-1 s gr
+% Polyline
+n 4401 4762 m 4491 4857 l gs col-1 s gr
+% Polyline
+n 4546 4897 m 4546 5027 l gs col-1 s gr
+% Polyline
+n 4611 5052 m 4706 5147 l gs col-1 s gr
+% Polyline
+n 4511 5067 m 4416 5152 l gs col-1 s gr
+% Polyline
+n 4586 6532 m 4601 6702 l gs col-1 s gr
+% Polyline
+n 4671 6737 m 4811 6822 l gs col-1 s gr
+% Polyline
+n 4581 6752 m 4481 6857 l gs col-1 s gr
+% Polyline
+n 7121 6267 m 7276 6247 l gs col-1 s gr
+7.500 slw
+% Polyline
+gs clippath
+6169 4432 m 6047 4406 l 6167 4372 l 6005 4378 l 6007 4438 l cp clip
+n 6156 4402 m 6021 4407 l gs col-1 s gr gr
+
+% arrowhead
+n 6169 4432 m 6047 4406 l 6167 4372 l col-1 s
+% Polyline
+gs clippath
+5938 4550 m 5861 4647 l 5883 4525 l 5817 4674 l 5872 4698 l cp clip
+n 5891 4582 m 5851 4672 l gs col-1 s gr gr
+
+% arrowhead
+n 5938 4550 m 5861 4647 l 5883 4525 l col-1 s
+% Polyline
+gs clippath
+5846 4890 m 5816 5010 l 5786 4890 l 5786 5052 l 5846 5052 l cp clip
+n 5816 4932 m 5816 5037 l gs col-1 s gr gr
+
+% arrowhead
+n 5846 4890 m 5816 5010 l 5786 4890 l col-1 s
+% Polyline
+gs clippath
+5863 5208 m 5868 5331 l 5806 5224 l 5851 5380 l 5909 5363 l cp clip
+n 5851 5272 m 5876 5357 l gs col-1 s gr gr
+
+% arrowhead
+n 5863 5208 m 5868 5331 l 5806 5224 l col-1 s
+% Polyline
+gs clippath
+6150 5593 m 6032 5553 l 6155 5533 l 5993 5521 l 5989 5581 l cp clip
+n 6006 5552 m 6141 5562 l gs col-1 s gr gr
+
+% arrowhead
+n 6150 5593 m 6032 5553 l 6155 5533 l col-1 s
+% Polyline
+gs clippath
+6251 5417 m 6317 5312 l 6308 5436 l 6359 5282 l 6302 5263 l cp clip
+n 6301 5362 m 6326 5287 l gs col-1 s gr gr
+
+% arrowhead
+n 6251 5417 m 6317 5312 l 6308 5436 l col-1 s
+% Polyline
+gs clippath
+6408 4877 m 6372 4995 l 6348 4874 l 6340 5035 l 6400 5038 l cp clip
+n 6371 5022 m 6376 4922 l gs col-1 s gr gr
+
+% arrowhead
+n 6408 4877 m 6372 4995 l 6348 4874 l col-1 s
+% Polyline
+gs clippath
+6311 4533 m 6322 4656 l 6255 4553 l 6308 4706 l 6364 4686 l cp clip
+n 6331 4682 m 6286 4552 l gs col-1 s gr gr
+
+% arrowhead
+n 6311 4533 m 6322 4656 l 6255 4553 l col-1 s
+% Open spline
+gs 15.000 slw
+n 4551.0 4657.0 m 4553.5 4487.0 l
+ 4553.5 4487.0 4556.0 4317.0 4896.0 4324.5 DrawSplineSection
+ 4896.0 4324.5 5236.0 4332.0 5236.0 4552.0 DrawSplineSection
+ 5236.0 4552.0 5236.0 4772.0 5533.5 4772.0 DrawSplineSection
+ 5831.0 4772.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 4541.0 5247.0 m 4543.5 5429.5 l
+ 4543.5 5429.5 4546.0 5612.0 4891.0 5612.0 DrawSplineSection
+ 4891.0 5612.0 5236.0 5612.0 5238.5 5399.5 DrawSplineSection
+ 5238.5 5399.5 5241.0 5187.0 5528.5 5187.0 DrawSplineSection
+ 5816.0 5187.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 5921.0 5452.0 m 5706.0 5452.0 l
+ 5706.0 5452.0 5491.0 5452.0 5493.5 5839.5 DrawSplineSection
+ 5493.5 5839.5 5496.0 6227.0 5161.0 6409.5 DrawSplineSection
+ 4826.0 6592.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 4661.0 6952.0 m 4673.5 7072.0 l
+ 4673.5 7072.0 4686.0 7192.0 5943.5 7192.0 DrawSplineSection
+ 5943.5 7192.0 7201.0 7192.0 7198.5 6337.0 DrawSplineSection
+ 7198.5 6337.0 7196.0 5482.0 6723.5 5472.0 DrawSplineSection
+ 6251.0 5462.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 6356.0 4752.0 m 6608.5 4752.0 l
+ 6608.5 4752.0 6861.0 4752.0 6978.5 4809.5 DrawSplineSection
+ 6978.5 4809.5 7096.0 4867.0 7351.0 4867.0 DrawSplineSection
+ 7606.0 4867.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 6361.0 5202.0 m 6808.5 5199.5 l
+ 6808.5 5199.5 7256.0 5197.0 7488.5 5399.5 DrawSplineSection
+ 7488.5 5399.5 7721.0 5602.0 7923.5 5479.5 DrawSplineSection
+ 7923.5 5479.5 8126.0 5357.0 8008.5 5207.0 DrawSplineSection
+ 7891.0 5057.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 6241.0 4477.0 m 6743.5 4477.0 l
+ 6743.5 4477.0 7246.0 4477.0 7546.0 4292.0 DrawSplineSection
+ 7546.0 4292.0 7846.0 4107.0 8008.5 4204.5 DrawSplineSection
+ 8008.5 4204.5 8171.0 4302.0 8023.5 4502.0 DrawSplineSection
+ 7876.0 4702.0 l gs col-1 s gr
+ gr
+
+% Open spline
+gs n 5926.0 4487.0 m 5688.5 4494.5 l
+ 5688.5 4494.5 5451.0 4502.0 5313.5 4264.5 DrawSplineSection
+ 5313.5 4264.5 5176.0 4027.0 4496.0 4037.0 DrawSplineSection
+ 4496.0 4037.0 3816.0 4047.0 3796.0 5099.5 DrawSplineSection
+ 3796.0 5099.5 3776.0 6152.0 4078.5 6384.5 DrawSplineSection
+ 4381.0 6617.0 l gs col-1 s gr
+ gr
+
+/Times-Roman ff 180.00 scf sf
+6036 4327 m
+gs 1 -1 sc (c) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+5541 5027 m
+gs 1 -1 sc (bc) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+5911 5307 m
+gs 1 -1 sc (b) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+6071 5732 m
+gs 1 -1 sc (a) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+6361 5417 m
+gs 1 -1 sc (bb) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+6441 5017 m
+gs 1 -1 sc (ba) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+7241 4702 m
+gs 1 -1 sc (cq2) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+6936 5092 m
+gs 1 -1 sc (babcq2) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+4156 6012 m
+gs 1 -1 sc (babqbabq2) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+5791 6522 m
+gs 1 -1 sc (ba2bcq) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+7536 6072 m
+gs 1 -1 sc (\(cq2\)2) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+5921 4682 m
+gs 1 -1 sc (b1) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+3956 7642 m
+gs 1 -1 sc (where q=babc etc) col-1 sh gr
+/Times-Roman ff 180.00 scf sf
+6366 4642 m
+gs 1 -1 sc (bb1) col-1 sh gr
+$F2psEnd
+rs
+%%EndDocument
+ @endspecial 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (c) findlabel
+ 2910
+4786 a 9 w Fd(c)2910 4786 y
+grestore
+ 2910 4786 a 2910 4786 a
+/a {} def
+ 2910
+4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (a) findlabel
+ 2910 4786 a -9 w Fd(a)2910 4786 y
+grestore
+
+2910 4786 a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (b) findlabel
+ 2910
+4786 a 9 w Fd(b)2910 4786 y
+grestore
+ 2910 4786 a 2910 4786 a
+/a {} def
+ 2910
+4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (b1) findlabel
+ 2910 4786 a Fd(b)2910 4786 y
+grestore
+ 2910
+4786 a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (bb) findlabel
+ 2910 4786
+a 2907 4773 a Fl(\026)2910 4795 y Fd(b)2910 4786 y
+grestore
+ 2910
+4786 a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (bb1) findlabel
+ 2910 4786
+a 2916 4765 a Fl(\026)2919 4786 y Fd(b)2910 4786 y
+grestore
+ 2910
+4786 a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (bc) findlabel
+ 2910 4786
+a 9 w Fd(b)m Fl(\026)-39 b Fd(c)2910 4786 y
+grestore
+ 2910 4786
+a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (ba) findlabel
+ 2910 4786 a 2916
+4765 a Fl(\026)2919 4786 y Fd(ba)2910 4786 y
+grestore
+ 2910 4786
+a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (cq2) findlabel
+ 2910 4786 a 9 w
+Fd(cq)2996 4752 y Fh(2)2910 4786 y
+grestore
+ 2910 4786 a 2910 4786
+a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (babcq2) findlabel
+ 2910 4786 a 2916 4765 a Fl(\026)2919
+4786 y Fd(babcq)3113 4752 y Fh(2)2910 4786 y
+grestore
+ 2910 4786
+a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get ((cq2)2) findlabel
+ 2910 4786 a 9 w
+Fl(\()p Fd(cq)3029 4752 y Fh(2)3067 4786 y Fl(\))3100
+4752 y Fh(2)2910 4786 y
+grestore
+ 2910 4786 a 2910 4786 a
+/a {} def
+ 2910
+4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (ba2bcq) findlabel
+ 2910 4786 a 2916 4765 a Fl(\026)2919
+4786 y Fd(b)q Fl(\026)c Fd(a)3000 4752 y Fh(2)3038 4786
+y Fd(bcq)2910 4786 y
+grestore
+ 2910 4786 a 2910 4786 a
+/a {} def
+ 2910 4786
+a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (babqbabq2)
+findlabel
+ 2910 4786 a 2916 4765 a Fl(\026)2919 4786
+y Fd(b)q Fl(\026)g Fd(abq)3074 4765 y Fl(\026)3077 4786
+y Fd(b)p Fl(\026)g Fd(abq)3234 4752 y Fh(2)2910 4786
+y
+grestore
+ 2910 4786 a 2910 4786 a
+/a {} def
+ 2910 4786 a 2910 4786 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (where q=babc etc)
+findlabel
+ 2910
+4786 a Fl(where)37 b Fd(q)26 b Fl(=)3312 4765 y(\026)3315
+4786 y Fd(b)q Fl(\026)-43 b Fd(a)o(bc)38 b Fl(and)28
+b(unlab)r(elled)h(regions)f(carry)38 b Fd(q)4626 4752
+y Fh(3)4673 4786 y Fl(,)f Fd(a)4778 4752 y Fh(2)4853
+4786 y Fl(or)g Fd(c)5001 4752 y Fh(3)2910 4786 y
+grestore
+ 2910
+4786 a 1899 3496 a Fc(\006)2910 4786 y
+(MTG signs off) pop grestore end /restore {restore} bind def MTGsavestate
+restore
+ 2910 4786 a 1532
+4950 a Fl(Figure)29 b(2:)37 b(from)27 b([5])1837 5168
+y Fk(5)p eop
+%%Page: 6 6
+6 5 bop 300 541 a Fi(Remarks)92 b Fk(\(1\))g(The)33 b
+Fj(\\relabelbox)45 b(...)i(\\endrelabelbox)29 b Fk(forms)j(a)i
+Fj(tex)f Fk(group;)300 650 y(th)m(us)e(the)h(instruction)g
+Fj(\\small)e Fk(whic)m(h)h(sets)i(the)e(new)h(lab)s(els)g(in)f(smaller)
+g(t)m(yp)s(e)h(remains)300 759 y(lo)s(cal)g(to)f(this)f(group)g(and)g
+(do)s(es)g(not)g(a\013ect)i(the)f(subsequen)m(t)e(text.)300
+930 y(\(2\))92 b(If)41 b(the)h Fj(eps)e Fk(\014le)i(has)f(t)m(w)m(o)i
+(or)e(more)g(lab)s(els)h(the)f(same,)j(then)d(only)h(one)g(will)g(b)s
+(e)300 1040 y(replaced.)60 b(Therefore)36 b(it)h(is)f(necessary)h(to)h
+(use)e(di\013eren)m(t)h(dumm)m(y)c(lab)s(els)k(ev)m(en)g(if)g(y)m(ou)
+300 1149 y(wish)c(the)g(\014nal)g(lab)s(els)h(to)g(b)s(e)f(the)h(same.)
+49 b(In)33 b(the)h(ab)s(o)m(v)m(e)g(example)g(the)f(dumm)m(y)e(lab)s
+(els)300 1258 y Fj(b)40 b Fk(and)g Fj(b1)g Fk(w)m(ere)i(b)s(oth)e
+(replaced)h(b)m(y)49 b Ff(b)h Fk(and)40 b(the)h(dummies)d
+Fj(bb)i Fk(and)g Fj(bb1)g Fk(w)m(ere)h(b)s(oth)300 1367
+y(replaced)31 b(b)m(y)791 1343 y(\026)794 1367 y Ff(b)9
+b Fk(.)300 1538 y(\(3\))92 b(The)33 b(macros)g(are)h(sensitiv)m(e)h(to)
+g(spaces.)51 b(Be)34 b(careful)g(to)g(lea)m(v)m(e)i(a)e(space)h(after)f
+(the)300 1647 y Fj(<)9 b Ff(dx)g Fj(,)g Ff(dy)j Fj(>)30
+b Fk(adjustmen)m(t)g(but)f(not)i(b)s(et)m(w)m(een)g(the)f
+Fj({)p Fk(pslab)s(el)p Fj(})g Fk(and)g(the)g Fj({)p Fk(T)-8
+b(eX)31 b(lab)s(el)p Fj(})p Fk(.)300 1819 y(\(4\))92
+b(All)28 b(the)g(existing)h(ps)d(lab)s(els)i(are)g(deleted)g(from)e
+(the)i Fj(eps)f Fk(digram,)g(whether)g(or)h(not)300 1928
+y(instructions)34 b(for)g(relab)s(elling)g(are)h(giv)m(en.)52
+b(Th)m(us)33 b(y)m(ou)h(can)h(use)e(the)h(macros)g(to)h(relab)s(el)300
+2037 y(an)40 b(existing)h(diagram)f(b)m(y)g(c)m(ho)s(osing)h(the)g
+(appropriate)f(subset)g(of)g(lab)s(els)h(to)g(replace.)300
+2146 y(Ho)m(w)m(ev)m(er)29 b(if)e(y)m(ou)g(w)m(an)m(t)h(to)g(replace)g
+(t)m(w)m(o)g(or)f(more)f(ps)h(lab)s(els,)h(whic)m(h)e(are)i(the)f
+(same,)g(then)300 2255 y(y)m(ou)j(ha)m(v)m(e)g(to)g(use)f
+Fj(\\extralabel)d Fk(to)k(replace)g(the)g(one\(s\))g(whic)m(h)f(do)g
+(not)g(get)h(relab)s(elled)300 2364 y(at)36 b(the)f(\014rst)f(attempt.)
+55 b(\(Alternativ)m(ely)38 b(if)d(y)m(ou)h(kno)m(w)f(ho)m(w)g(to)h
+(\014nd)d(the)j(lab)s(els)f(in)g(the)300 2473 y Fj(eps)24
+b Fk(\014le|lo)s(ok)i(for)f(strings)g(enclosed)h(in)e(round)g(brac)m(k)
+m(ets|then)i(y)m(ou)g(can)f(edit)h(the)f Fj(eps)300 2582
+y Fk(\014le)30 b(to)i(mak)m(e)e(the)h(rep)s(eated)f(lab)s(els)h
+(di\013eren)m(t.\))300 2753 y(\(5\))92 b(The)38 b(output)g(will)h(not)f
+(view)h(correctly)h(on)e(a)h(dvi)f(view)m(er)h(whic)m(h)f(will)h(t)m
+(ypically)300 2863 y(sho)m(w)33 b(the)h(new)f(lab)s(els)h(sup)s(erimp)s
+(osed)c(at)35 b(the)e(b)s(ottom)g(righ)m(t-hand)h(corner.)50
+b(Ho)m(w)m(ev)m(er)300 2972 y(those)31 b(pro)s(duced)e(b)m(y)h
+Fj(\\extralabel)d Fk(will)k(b)s(e)f(sho)m(wn)f(correctly)j(p)s
+(ositioned.)300 3226 y Fi(Health)38 b(w)m(arning)90 b
+Fk(The)34 b(pac)m(k)-5 b(age)37 b Fj(rlepsf.tex)31 b
+Fk(is)k(still)h(under)d(dev)m(elopmen)m(t.)53 b(The)300
+3335 y(presen)m(t)40 b(v)m(ersion)g(is)f(a)h(\\b)s(eta)g(test")h(v)m
+(ersion.)69 b(It)39 b(has)h(b)s(een)e(thoroughly)i(tested)g(with)300
+3444 y Fj(xfig)25 b Fk(and)g(Adob)s(e)h(Illusrator)g(output)f(and)h
+(also)h(with)e(`hand-dra)m(wn')g(\014gures.)39 b(Ho)m(w)m(ev)m(er)300
+3553 y(b)s(efore)h(committing)g(an)m(y)h(time)f(to)h(using)f(the)g(pac)
+m(k)-5 b(age,)46 b(test)41 b(it)g(with)f(a)h(simple)e(test)300
+3662 y(\014gure)30 b(to)h(c)m(hec)m(k)h(that)f(it)g(will)f(w)m(ork)h
+(prop)s(erly)e(with)h(y)m(our)g(c)m(hosen)h(dra)m(wing)g(program.)300
+4041 y Fr(3)137 b(Relab)t(elling)43 b Fq(.eps)i Fr(\014les)h(using)f
+Fq(labelfig.tex)300 4295 y Fk(The)c(macro)h(pac)m(k)-5
+b(age)44 b Fj(labelfig.tex)39 b Fk([6])k(allo)m(ws)g
+Fj(tex)e Fk(lab)s(els)h(to)h(b)s(e)e(sup)s(erimp)s(osed)300
+4405 y(on)m(to)e(an)m(y)f(picture,)h(or)f(in)f(fact)i(on)m(to)f(an)m(y)
+g(b)s(o)m(x.)63 b(Essen)m(tially)39 b(this)e(is)h(a)g(sophisticated)300
+4514 y(v)m(ersion)h(of)f(the)h Fj(\\extralabel)c Fk(facilit)m(y)40
+b(in)e Fj(rlepsf.tex)e Fk(and)h(indeed)h(y)m(ou)h(can)f(com-)300
+4623 y(bine)j(the)g(t)m(w)m(o)h(metho)s(ds|replace)f(the)g(con)m(v)m
+(enien)m(t)i(ps)e(lab)s(els)g(b)m(y)g Fj(tex)f Fk(lab)s(els)h(using)300
+4732 y Fj(rlepsf.tex)p Fk(|then)21 b(add)i(extra)i(lab)s(els)f(using)g
+Fj(labelfig.tex)p Fk(,)e(see)j(the)f(example)g(giv)m(en)300
+4841 y(b)s(elo)m(w.)40 b(The)29 b(sophistication)h(comes)e(from)g(the)g
+(fact)i(that)f(the)g(new)g(lab)s(els)f(attac)m(hed)j(b)m(y)300
+4950 y Fj(labelfig.tex)26 b Fk(are)k(giv)m(en)g(using)f(\\scalable")j
+(co)s(ordinates,)e(ie)g(co)s(ordinates)g(whic)m(h)g(are)1837
+5168 y(6)p eop
+%%Page: 7 7
+7 6 bop 300 541 a Fk(\014xed)30 b(to)h(the)f(picture)g(and)g(scale)i
+(with)e(it;)h(moreo)m(v)m(er)f(y)m(ou)h(can)g(sup)s(erimp)s(ose)c(a)k
+(temp)s(o-)300 650 y(rary)g(grid)g(o)m(v)m(er)i(the)f(picture)f(in)g
+(order)g(to)h(read)g(o\013)g(the)f(co)s(ordinates)h(of)g(the)g(new)f
+(lab)s(el)300 759 y(p)s(ositions.)300 914 y(There)i(is)h(excellen)m(t)j
+(do)s(cumen)m(tation)c(in)h(the)g(\014le)g Fj(labelfig.tex)d
+Fk(b)s(oth)i(as)h(commen)m(ts)300 1023 y(near)c(the)g(b)s(eginning)g
+(and)f(as)i(an)f(app)s(ended)e(do)s(cumen)m(t;)h(for)h(full)g(details)h
+(on)f(using)g(the)300 1132 y(pac)m(k)-5 b(age,)34 b(see)f(this)e(do)s
+(cumen)m(tation.)45 b(Here)33 b(w)m(e)f(shall)g(just)f(giv)m(e)i(an)f
+(o)m(v)m(erview)h(together)300 1241 y(with)d(an)g(example)g(of)h(use.)
+300 1456 y Fi(Loading)j Fj(labelfig.tex)300 1659 y Fk(Y)-8
+b(ou)31 b(need)f(the)h(\014le)f Fj(labelfig.tex)d Fk(and)j(the)g(line)
+300 1829 y Fj(\\input)46 b(labelfig)300 1983 y Fk(somewhere)29
+b(in)h(y)m(our)h(\014le)f(near)g(the)h(b)s(eginning.)300
+2198 y Fi(Using)k Fj(labelfig.tex)300 2402 y Fk(Place)24
+b(y)m(our)f(\014gure)f(in)h(an)g Fj(\\AffixLabels{)44
+b(...)j(})22 b Fk(command)f(preceeded)i(b)m(y)f(a)i Fj(\\Show-)300
+2511 y(Grid)29 b Fk(command,)g(eg:)300 2680 y Fj(\\ShowGrid)300
+2789 y(\\AffixLabels{\\epsfbox{fi)o(gure)o(.eps)o(}})300
+2944 y Fk(No)m(w)35 b(preview)f(the)h(\014gure.)51 b(The)34
+b(\014gure)g(will)h(b)s(e)e(sho)m(wn)h(with)g(a)44 b(10)23
+b Fb(\002)g Fk(10)44 b(grid)34 b(sup)s(er-)300 3053 y(imp)s(osed)c(o)m
+(v)m(er)i(it.)45 b(Read)31 b(o\013)h(the)f(co)s(ordinates)i(of)e(the)h
+(p)s(ositions)f(where)g(y)m(ou)h(w)m(an)m(t)g(the)300
+3162 y(lab)s(els)f(and)e(then)h(construct)h(a)g(lab)s(el)g(list)g(of)f
+(the)h(form:)300 3332 y Fj(\\SetLabels)300 3441 y(\()9
+b Ff(x)409 3455 y Fe(1)459 3441 y Fj(*)g Ff(y)561 3455
+y Fe(1)610 3441 y Fj(\))47 b(first)g(label)f(\\\\)300
+3550 y(\()9 b Ff(x)409 3564 y Fe(2)459 3550 y Fj(*)g
+Ff(y)561 3564 y Fe(2)610 3550 y Fj(\))47 b(second)f(label)h(\\\\)300
+3659 y(...)300 3768 y(\\endSetLabels)300 3923 y Fk(whic)m(h)29
+b(should)f(come)i(b)s(efore)f(the)g Fj(\\Showgrid)p Fk(.)38
+b(Y)-8 b(ou)30 b(can)f(pre\014x)g(the)g(co)s(ordinates)h(with)300
+4032 y(extra)g(orien)m(tation)i(commands)27 b(\(suc)m(h)j(as)g
+Fj(\\L)p Fk(\))f(whic)m(h)g(cause)h Fj(labelfig.tex)d
+Fk(to)j(attac)m(h)300 4141 y(the)38 b(new)f(lab)s(els)g(to)i(the)e(giv)
+m(en)i(co)s(ordinate)f(b)m(y)f(particular)h(p)s(oin)m(ts.)62
+b(F)-8 b(or)38 b(example)g Fj(\\L)300 4250 y Fk(means:)h(attac)m(h)32
+b(b)m(y)d(left-hand)h(end)f(of)g(baseline.)42 b(\(The)29
+b(default)h(is)f(cen)m(tre)i(of)f(baseline.\))300 4359
+y(F)-8 b(or)23 b(a)f(complete)g(list)g(of)g(these)h(pre\014x)d
+(commands)g(see)i([6];)k(see)c(also)h(the)f(w)m(ork)m(ed)g(example)300
+4468 y(b)s(elo)m(w.)40 b(Preview)30 b(again.)41 b(When)29
+b(y)m(ou)g(are)h(happ)m(y)e(with)h(the)g(new)g(lab)s(els,)h(commen)m(t)
+e(out)300 4577 y(the)j Fj(\\ShowGrid)c Fk(command)i(to)i(remo)m(v)m(e)g
+(the)f(grid.)300 4732 y(Here)45 b(is)f(a)h(w)m(ork)m(ed)g(example.)82
+b(I)45 b(used)e(b)s(oth)h Fj(rlepsf.tex)d Fk(and)j Fj(labelfig.tex)d
+Fk(to)300 4841 y(relab)s(el)32 b(an)g(existing)h(diagram)e(\(from)g
+([2]\))i(with)e Fj(tex)g Fk(lab)s(els.)45 b(The)31 b(diagram)h(with)f
+(grid)300 4950 y(attac)m(hed)h(is)f(sho)m(wn)e(in)h(\014gure)g(3.)41
+b(The)30 b(commands)e(for)i(displa)m(ying)h(this)f(\014gure)g(w)m(ere:)
+1837 5168 y(7)p eop
+%%Page: 8 8
+8 7 bop 619 1463 a @beginspecial 134 @llx 350 @lly 406
+@urx 457 @ury 2720 @rwi @setspecial
+%%BeginDocument: Closure.eps
+%AI3_ColorUsage: Black&White
+%AI3_TemplateBox: 288 360 288 360
+%AI3_TileBox: 0 0 552 730
+%AI3_DocumentPreview: Macintosh_Pic
+userdict /Adobe_packedarray 5 dict dup begin put
+/initialize % - initialize -
+{
+/packedarray where
+ {
+ pop
+ }
+ {
+ Adobe_packedarray begin
+ Adobe_packedarray
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ userdict 3 1 roll put
+ } forall
+ end
+ } ifelse
+} def
+/terminate % - terminate -
+{
+} def
+/packedarray % arguments count packedarray array
+{
+array astore readonly
+} def
+/setpacking % boolean setpacking -
+{
+pop
+} def
+/currentpacking % - setpacking boolean
+{
+false
+} def
+currentdict readonly pop end
+Adobe_packedarray /initialize get exec
+currentpacking true setpacking
+userdict /Adobe_cmykcolor 4 dict dup begin put
+/initialize % - initialize -
+{
+/setcmykcolor where
+ {
+ pop
+ }
+ {
+ userdict /Adobe_cmykcolor_vars 2 dict dup begin put
+ /_setrgbcolor
+ /setrgbcolor load def
+ /_currentrgbcolor
+ /currentrgbcolor load def
+ Adobe_cmykcolor begin
+ Adobe_cmykcolor
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ end
+ Adobe_cmykcolor begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_cmykcolor eq
+ {
+ end
+ } if
+} def
+/setcmykcolor % cyan magenta yellow black setcmykcolor -
+{
+1 sub 4 1 roll
+3
+ {
+ 3 index add neg dup 0 lt
+ {
+ pop 0
+ } if
+ 3 1 roll
+ } repeat
+Adobe_cmykcolor_vars /_setrgbcolor get exec
+pop
+} def
+/currentcmykcolor % - currentcmykcolor cyan magenta yellow black
+{
+Adobe_cmykcolor_vars /_currentrgbcolor get exec
+3
+ {
+ 1 sub neg 3 1 roll
+ } repeat
+0
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_cshow 3 dict dup begin put
+/initialize % - initialize -
+{
+/cshow where
+ {
+ pop
+ }
+ {
+ userdict /Adobe_cshow_vars 1 dict dup begin put
+ /_cshow % - _cshow proc
+ {} def
+ Adobe_cshow begin
+ Adobe_cshow
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ userdict 3 1 roll put
+ } forall
+ end
+ end
+ } ifelse
+} def
+/terminate % - terminate -
+{
+} def
+/cshow % proc string cshow -
+{
+exch
+Adobe_cshow_vars
+ exch /_cshow
+ exch put
+ {
+ 0 0 Adobe_cshow_vars /_cshow get exec
+ } forall
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_customcolor 5 dict dup begin put
+/initialize % - initialize -
+{
+/setcustomcolor where
+ {
+ pop
+ }
+ {
+ Adobe_customcolor begin
+ Adobe_customcolor
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ Adobe_customcolor begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_customcolor eq
+ {
+ end
+ } if
+} def
+/findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object
+{
+5 packedarray
+} def
+/setcustomcolor % object tint setcustomcolor -
+{
+exch
+aload pop pop
+4
+ {
+ 4 index mul 4 1 roll
+ } repeat
+5 -1 roll pop
+setcmykcolor
+} def
+/setoverprint % boolean setoverprint -
+{
+pop
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_typography_AI3 47 dict dup begin put
+/initialize % - initialize -
+{
+/TZ
+ where
+ {
+ pop
+ }
+ {
+ Adobe_typography_AI3 begin
+ Adobe_typography_AI3
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ Adobe_typography_AI3 begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_typography_AI3 eq
+ {
+ end
+ } if
+} def
+% [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ]
+/modifyEncoding
+{
+ /_tempEncode exch ddef
+
+ % pointer for sequential encodings
+ /_pntr 0 ddef
+
+ {
+ % get bottom object
+ counttomark -1 roll
+ % is it a mark ?
+ dup type dup /marktype eq
+ {
+ % exit
+ pop pop exit
+ }
+ {
+ % ... object ... type ....
+ % insert if a nametype
+ /nametype eq
+ {
+ % insert the name at _pntr and increment pointer
+ _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll
+ put
+ }
+ {
+ % reset _pntr if it's a number
+ /_pntr exch ddef
+ }
+ ifelse
+ }
+ ifelse
+ }
+ loop
+
+ % return the modified encoding
+ _tempEncode
+}
+def
+/TE % Set std platform encoding % (encoding pairs) TE -
+{
+ StandardEncoding 256 array copy modifyEncoding
+ /_nativeEncoding exch def
+} def
+% re-define font
+% expected arguments
+% for 'normal fonts :
+% [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ
+%
+% for cartographic, pictographic, and expert fonts :
+% [ ... number value stream ... /_Symbol/Symbol
+% direction fontScript defaultEncoding TZ
+% for blended fonts w/ default encoding :
+% [ /_AdobeSans_20ULig1XCond-Bold/AdobeSans
+% direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ
+% for blended fonts w/ special encoding :
+% [ ... number value stream ... /_AdobeSans_20ULig1XCond/AdobeSans
+% direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ
+/TZ
+{
+ % set weight vector (if present)
+ dup type /arraytype eq {/_wv exch def} {/_wv 0 def} ifelse
+ % platform dependent coding flag
+ /_useNativeEncoding exch def
+ % pop fontScript & direction
+ pop pop
+
+ % create a new dictionary with length
+ % equal to original dictionary length + 2
+ % copy all the key/value pairs except FID
+ % call makeblended font with the weight values if _wv is an array
+ findfont _wv type /arraytype eq {_wv makeblendedfont} if dup length 2 add dict
+
+ begin
+
+ % copy all the values but the FID
+ % into the new dictionary
+ mark exch
+ {
+ 1 index /FID ne { def } if cleartomark mark
+ }
+ forall
+ % discard last mark
+ pop
+
+ % define FontName
+ /FontName exch def
+
+ % if no re-encoding stream is present
+ % then if the base encoding vector of the font
+ % is the same as StandardEncoding
+ % and the use platform encoding flag is true
+ % then install AI platform encoding
+ % else leave the base encoding in effect
+ counttomark 0 eq
+ {
+ 1 _useNativeEncoding eq
+ {
+ /Encoding _nativeEncoding def
+ }
+ if
+ % clean up
+ cleartomark
+ }
+ {
+ % custom encoding to be done
+ % start off with a copy of the font's standard encoding
+ /Encoding load 256 array copy
+ modifyEncoding /Encoding exch def
+ }
+ ifelse
+ FontName currentdict
+ end
+
+ % register the new font
+ definefont pop
+}
+def
+% text painting operators
+/tr % string tr ax ay string
+{
+_ax _ay 3 2 roll
+} def
+/trj % string trj cx cy fillchar ax ay string
+{
+_cx _cy _sp _ax _ay 6 5 roll
+} def
+/a0
+{
+/Tx % text % textString Tx -
+ {
+ dup
+ currentpoint 3 2 roll
+ tr _psf
+ newpath moveto
+ tr _ctm _pss
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup
+ currentpoint 3 2 roll
+ trj _pjsf
+ newpath moveto
+ trj _ctm _pjss
+ } ddef
+
+} def
+/a1
+{
+/Tx % text % textString Tx -
+ {
+ dup currentpoint 4 2 roll gsave
+ dup currentpoint 3 2 roll
+ tr _psf
+ newpath moveto
+ tr _ctm _pss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup currentpoint 4 2 roll gsave
+ dup currentpoint 3 2 roll
+ trj _pjsf
+ newpath moveto
+ trj _ctm _pjss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+
+} def
+/e0
+{
+/Tx % text % textString Tx -
+ {
+ tr _psf
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj _pjsf
+ } ddef
+} def
+/e1
+{
+/Tx % text % textString Tx -
+ {
+ dup currentpoint 4 2 roll gsave
+ tr _psf
+ grestore 3 1 roll moveto tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup currentpoint 4 2 roll gsave
+ trj _pjsf
+ grestore 3 1 roll moveto tr sp
+ } ddef
+} def
+/i0
+{
+/Tx % text % textString Tx -
+ {
+ tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj jsp
+ } ddef
+} def
+/i1
+{
+W N
+} def
+/o0
+{
+/Tx % text % textString Tx -
+ {
+ tr sw rmoveto
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj swj rmoveto
+ } ddef
+} def
+/r0
+{
+/Tx % text % textString Tx -
+ {
+ tr _ctm _pss
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj _ctm _pjss
+ } ddef
+} def
+/r1
+{
+/Tx % text % textString Tx -
+ {
+ dup currentpoint 4 2 roll currentpoint gsave newpath moveto
+ tr _ctm _pss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup currentpoint 4 2 roll currentpoint gsave newpath moveto
+ trj _ctm _pjss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+} def
+% font operators
+% Binding
+/To % begin text % bindType To -
+{
+ pop _ctm currentmatrix pop
+} def
+/TO % end text % TO -
+{
+ Te _ctm setmatrix newpath
+} def
+% Text paths
+/Tp % begin text path % a b c d tx ty startPt Tp -
+{
+ pop _tm astore pop _ctm setmatrix
+ _tDict begin /W {} def /h {} def
+} def
+/TP % end text path % TP -
+{
+ end
+ iTm 0 0 moveto
+} def
+% Render mode & matrix operators
+/Tr % begin render % render Tr -
+{
+ _render 3 le {currentpoint newpath moveto} if
+ dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse
+ dup /_render exch ddef
+ _renderStart exch get load exec
+} def
+/iTm % internal set text matrix % - iTm - (uses _tm as implicit argument)
+{
+_ctm setmatrix _tm concat 0 _rise translate _hs 1 scale
+} def
+/Tm % set text matrix % a b c d tx ty Tm -
+{
+_tm astore pop iTm 0 0 moveto
+} def
+/Td % translate text matrix % tx ty Td -
+{
+_mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto
+} def
+/Te % end render % - Te -
+{
+ _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse
+ /_render -1 ddef
+} def
+% Attributes
+/Ta % set alignment % alignment Ta -
+{
+pop
+} def
+/Tf % set font name and size % fontname size Tf -
+{
+dup 1000 div /_fScl exch ddef
+exch findfont exch scalefont setfont
+} def
+/Tl % set leading % leading paragraphLeading Tl -
+{
+pop
+0 exch _leading astore pop
+} def
+/Tt % set user tracking % userTracking Tt -
+{
+pop
+} def
+/TW % set word spacing % minSpace optSpace maxSpace TW -
+{
+3 npop
+} def
+/Tw % set computed word spacing % wordSpace Tw
+{
+/_cx exch ddef
+} def
+/TC % set character spacing % minSpace optSpace maxSpace TC -
+{
+3 npop
+} def
+/Tc % set computed char spacing % charSpace Tc -
+{
+/_ax exch ddef
+} def
+/Ts % set super/subscripting (rise) % rise Ts -
+{
+/_rise exch ddef
+currentpoint
+iTm
+moveto
+} def
+/Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti -
+{
+3 npop
+} def
+/Tz % set horizontal scaling % scalePercent Tz -
+{
+100 div /_hs exch ddef
+iTm
+} def
+/TA % set pairwise kerning % autoKern TA -
+ % autoKern = 0 -> no pair kerning
+ % = 1 -> automatic pair kerning
+{
+pop
+} def
+/Tq % set hanging quotes % hangingQuotes Tq -
+ % hangingQuotes = 0 -> no hanging quotes
+ % = 1 -> hanging quotes
+{
+pop
+} def
+% Text Bodies
+/TX {pop} def
+%/Tx % non-justified text % textString Tx -
+%/Tj % justified text % textString Tj -
+/Tk % kern % autoKern kernValue Tk -
+ % autoKern = 0 -> manual kern, = 1 -> auto kern
+ % kernValue = kern value in em/1000 space
+{
+exch pop _fScl mul neg 0 rmoveto
+} def
+/TK % non-printing kern % autoKern kernValue TK -
+{
+2 npop
+} def
+/T* % carriage return & line feed % - T* -
+{
+_leading aload pop neg Td
+} def
+/T*- % carriage return & negative line feed % - T*- -
+{
+_leading aload pop Td
+} def
+/T- % print a discretionary hyphen % - T- -
+{
+_hyphen Tx
+} def
+/T+ % discretionary hyphen hyphen % - T+ -
+{} def
+/TR % reset pattern matrix % a b c d tx ty TR -
+{
+_ctm currentmatrix pop
+_tm astore pop
+iTm 0 0 moveto
+} def
+/TS % special chars % textString justified TS -
+{
+0 eq {Tx} {Tj} ifelse
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_IllustratorA_AI3 61 dict dup begin put
+% initialization
+/initialize % - initialize -
+{
+% 47 vars, but leave slack of 10 entries for custom Postscript fragments
+userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put
+% paint operands
+/_lp /none def
+/_pf {} def
+/_ps {} def
+/_psf {} def
+/_pss {} def
+/_pjsf {} def
+/_pjss {} def
+/_pola 0 def
+/_doClip 0 def
+% paint operators
+/cf currentflat def % - cf flatness
+% typography operands
+/_tm matrix def
+/_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def
+/_renderEnd [null null null null /i1 /i1 /i1 /i1] def
+/_render -1 def
+/_rise 0 def
+/_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention)
+/_ay 0 def % y character spacing
+/_cx 0 def % x word spacing
+/_cy 0 def % y word spacing
+/_leading [0 0] def
+/_ctm matrix def
+/_mtx matrix def
+/_sp 16#020 def
+/_hyphen (-) def
+/_fScl 0 def
+/_cnt 0 def
+/_hs 1 def
+/_nativeEncoding 0 def
+/_useNativeEncoding 0 def
+/_tempEncode 0 def
+/_pntr 0 def
+/_tDict 2 dict def
+% typography operators
+/Tx {} def
+/Tj {} def
+% compound path operators
+/CRender {} def
+% printing
+/_AI3_savepage {} def
+% color operands
+/_gf null def
+/_cf 4 array def
+/_if null def
+/_of false def
+/_fc {} def
+/_gs null def
+/_cs 4 array def
+/_is null def
+/_os false def
+/_sc {} def
+/_i null def
+Adobe_IllustratorA_AI3 begin
+Adobe_IllustratorA_AI3
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+end
+end
+Adobe_IllustratorA_AI3 begin
+Adobe_IllustratorA_AI3_vars begin
+newpath
+} def
+/terminate % - terminate -
+{
+end
+end
+} def
+% definition operators
+/_ % - _ null
+null def
+/ddef % key value ddef -
+{
+Adobe_IllustratorA_AI3_vars 3 1 roll put
+} def
+/xput % key value literal xput -
+{
+dup load dup length exch maxlength eq
+ {
+ dup dup load dup
+ length 2 mul dict copy def
+ } if
+load begin def end
+} def
+/npop % integer npop -
+{
+ {
+ pop
+ } repeat
+} def
+% marking operators
+/sw % ax ay string sw x y
+{
+dup length exch stringwidth
+exch 5 -1 roll 3 index 1 sub mul add
+4 1 roll 3 1 roll 1 sub mul add
+} def
+/swj % cx cy fillchar ax ay string swj x y
+{
+dup 4 1 roll
+dup length exch stringwidth
+exch 5 -1 roll 3 index 1 sub mul add
+4 1 roll 3 1 roll 1 sub mul add
+6 2 roll /_cnt 0 ddef
+{1 index eq {/_cnt _cnt 1 add ddef} if} forall pop
+exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
+} def
+/ss % ax ay string matrix ss -
+{
+4 1 roll
+ { % matrix ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put pop
+ gsave
+ false charpath currentpoint
+ 4 index setmatrix
+ stroke
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+3 npop
+} def
+/jss % cx cy fillchar ax ay string matrix jss -
+{
+4 1 roll
+ { % cx cy fillchar matrix ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put
+ gsave
+ _sp eq
+ {
+ exch 6 index 6 index 6 index 5 -1 roll widthshow
+ currentpoint
+ }
+ {
+ false charpath currentpoint
+ 4 index setmatrix stroke
+ }ifelse
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+6 npop
+} def
+% path operators
+/sp % ax ay string sp -
+{
+ {
+ 2 npop (0) exch
+ 2 copy 0 exch put pop
+ false charpath
+ 2 copy rmoveto
+ } exch cshow
+2 npop
+} def
+/jsp % cx cy fillchar ax ay string jsp -
+{
+ { % cx cy fillchar ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put
+ _sp eq
+ {
+ exch 5 index 5 index 5 index 5 -1 roll widthshow
+ }
+ {
+ false charpath
+ }ifelse
+ 2 copy rmoveto
+ } exch cshow
+5 npop
+} def
+% path construction operators
+/pl % x y pl x y
+{
+transform
+0.25 sub round 0.25 add exch
+0.25 sub round 0.25 add exch
+itransform
+} def
+/setstrokeadjust where
+ {
+ pop true setstrokeadjust
+ /c % x1 y1 x2 y2 x3 y3 c -
+ {
+ curveto
+ } def
+ /C
+ /c load def
+ /v % x2 y2 x3 y3 v -
+ {
+ currentpoint 6 2 roll curveto
+ } def
+ /V
+ /v load def
+ /y % x1 y1 x2 y2 y -
+ {
+ 2 copy curveto
+ } def
+ /Y
+ /y load def
+ /l % x y l -
+ {
+ lineto
+ } def
+ /L
+ /l load def
+ /m % x y m -
+ {
+ moveto
+ } def
+ }
+ {%else
+ /c
+ {
+ pl curveto
+ } def
+ /C
+ /c load def
+ /v
+ {
+ currentpoint 6 2 roll pl curveto
+ } def
+ /V
+ /v load def
+ /y
+ {
+ pl 2 copy curveto
+ } def
+ /Y
+ /y load def
+ /l
+ {
+ pl lineto
+ } def
+ /L
+ /l load def
+ /m
+ {
+ pl moveto
+ } def
+ }ifelse
+% graphic state operators
+/d % array phase d -
+{
+setdash
+} def
+/cf {} def % - cf flatness
+/i % flatness i -
+{
+dup 0 eq
+ {
+ pop cf
+ } if
+setflat
+} def
+/j % linejoin j -
+{
+setlinejoin
+} def
+/J % linecap J -
+{
+setlinecap
+} def
+/M % miterlimit M -
+{
+setmiterlimit
+} def
+/w % linewidth w -
+{
+setlinewidth
+} def
+% path painting operators
+/H % - H -
+{} def
+/h % - h -
+{
+closepath
+} def
+/N % - N -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq {clip /_doClip 0 ddef} if
+ newpath
+ }
+ {
+ /CRender {N} ddef
+ }ifelse
+} def
+/n % - n -
+{N} def
+/F % - F -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq
+ {
+ gsave _pf grestore clip newpath /_lp /none ddef _fc
+ /_doClip 0 ddef
+ }
+ {
+ _pf
+ }ifelse
+ }
+ {
+ /CRender {F} ddef
+ }ifelse
+} def
+/f % - f -
+{
+closepath
+F
+} def
+/S % - S -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq
+ {
+ gsave _ps grestore clip newpath /_lp /none ddef _sc
+ /_doClip 0 ddef
+ }
+ {
+ _ps
+ }ifelse
+ }
+ {
+ /CRender {S} ddef
+ }ifelse
+} def
+/s % - s -
+{
+closepath
+S
+} def
+/B % - B -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq % F clears _doClip
+ gsave F grestore
+ {
+ gsave S grestore clip newpath /_lp /none ddef _sc
+ /_doClip 0 ddef
+ }
+ {
+ S
+ }ifelse
+ }
+ {
+ /CRender {B} ddef
+ }ifelse
+} def
+/b % - b -
+{
+closepath
+B
+} def
+/W % - W -
+{
+/_doClip 1 ddef
+} def
+/* % - [string] * -
+{
+count 0 ne
+ {
+ dup type (stringtype) eq {pop} if
+ } if
+_pola 0 eq {newpath} if
+} def
+% group operators
+/u % - u -
+{} def
+/U % - U -
+{} def
+/q % - q -
+{
+_pola 0 eq {gsave} if
+} def
+/Q % - Q -
+{
+_pola 0 eq {grestore} if
+} def
+/*u % - *u -
+{
+_pola 1 add /_pola exch ddef
+} def
+/*U % - *U -
+{
+_pola 1 sub /_pola exch ddef
+_pola 0 eq {CRender} if
+} def
+/D % polarized D -
+{pop} def
+/*w % - *w -
+{} def
+/*W % - *W -
+{} def
+% place operators
+/` % matrix llx lly urx ury string ` -
+{
+/_i save ddef
+6 1 roll 4 npop
+concat pop
+userdict begin
+/showpage {} def
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[] 0 setdash
+newpath
+0 setgray
+false setoverprint
+} def
+/~ % - ~ -
+{
+end
+_i restore
+} def
+% color operators
+/O % flag O -
+{
+0 ne
+/_of exch ddef
+/_lp /none ddef
+} def
+/R % flag R -
+{
+0 ne
+/_os exch ddef
+/_lp /none ddef
+} def
+/g % gray g -
+{
+/_gf exch ddef
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _gf setgray
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/G % gray G -
+{
+/_gs exch ddef
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _gs setgray
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+/k % cyan magenta yellow black k -
+{
+_cf astore pop
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _cf aload pop setcmykcolor
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/K % cyan magenta yellow black K -
+{
+_cs astore pop
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _cs aload pop setcmykcolor
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+/x % cyan magenta yellow black name gray x -
+{
+/_gf exch ddef
+findcmykcustomcolor
+/_if exch ddef
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _if _gf 1 exch sub setcustomcolor
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/X % cyan magenta yellow black name gray X -
+{
+/_gs exch ddef
+findcmykcustomcolor
+/_is exch ddef
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _is _gs 1 exch sub setcustomcolor
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+% locked object operator
+/A % value A -
+{
+pop
+} def
+currentdict readonly pop end
+setpacking
+% annotate page operator
+/annotatepage
+{
+} def
+Adobe_cmykcolor /initialize get exec
+Adobe_cshow /initialize get exec
+Adobe_customcolor /initialize get exec
+Adobe_typography_AI3 /initialize get exec
+Adobe_IllustratorA_AI3 /initialize get exec
+[
+39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+TE
+%AI3_BeginEncoding: _Symbol Symbol
+[/_Symbol/Symbol 0 0 0 TZ
+%AI3_EndEncoding TrueType
+%AI3_BeginEncoding: _Times-Roman Times-Roman
+[/_Times-Roman/Times-Roman 0 0 1 TZ
+%AI3_EndEncoding TrueType
+0 A
+u
+u
+0 To
+1 0 0 1 247.4954 352.7644 0 Tp
+TP
+0 Tr
+0 O
+0 g
+0 i 0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+/_Times-Roman 11 Tf
+0 Ts
+100 Tz
+0 Tt
+0 TA
+0 0 5 TC
+100 100 200 TW
+0 0 0 Ti
+0 Ta
+0 Tq
+14.5 0 Tl
+0 Tc
+0 Tw
+(figure 26) Tx
+(\r) TX
+TO
+U
+U
+u
+0 R
+0 G
+137.552 403.6548 m
+137.552 424.7835 L
+159.8872 424.7835 L
+159.8872 403.6548 L
+137.552 403.6548 L
+s
+148.7208 414.2199 m
+S
+U
+140.7217 424.7835 m
+S
+140.656 424.6979 m
+144.8871 448.3001 161.7853 450.5698 172.1342 450.5698 c
+172.1342 448.2001 l
+S
+172.1342 442.6001 m
+172.1342 440.2001 l
+S
+172.1342 433.4001 m
+172.1342 394.9999 l
+S
+u
+u
+u
+u
+u
+u
+u
+0 To
+1.1 0 0 1.1 145.5684 412.7616 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Symbol 9.091 Tf
+11.9992 0 Tl
+(a) Tx
+(\r) TX
+TO
+U
+U
+U
+U
+U
+U
+U
+0 R
+0 G
+156.3801 431.5547 m
+166.7448 436.7297 179.5 440.5 188.235 440.5045 c
+188.3425 388.5224 l
+S
+180.8411 443.0001 m
+180.835 446.6449 l
+176.5872 447.5001 159.5871 445.5001 152.7652 434.3384 C
+152.617 433.4341 L
+156.0218 427.7548 L
+156.0349 427.5122 L
+155.9871 426 156.3784 425.9053 156.2652 424.6979 c
+S
+180.8531 435.8001 m
+180.9252 392.6011 l
+S
+148.1797 425.0217 m
+148.3871 426.5 148.9871 427.9 151.7493 429.5359 c
+S
+141.1217 402.9967 m
+145.3529 379.3946 161.9853 378.0104 172.3342 378.0104 c
+172.3342 380.3801 l
+S
+172.3342 385.9801 m
+172.3342 388.3801 l
+S
+156.5801 397.0255 m
+166.9448 391.8505 186.0447 387.1741 188.435 388.0757 c
+S
+181.0411 385.5801 m
+181.035 381.9353 l
+176.7872 381.0801 159.7871 383.0801 152.9652 394.2418 C
+152.817 395.1462 L
+156.2218 400.8255 L
+156.2349 401.068 L
+156.1871 402.5802 156.5784 402.6749 156.4652 403.8823 c
+S
+148.3796 403.5585 m
+148.5871 402.0802 149.1871 400.6802 151.9493 399.0443 c
+S
+u
+237.8524 403.5646 m
+237.8524 424.6934 L
+260.1876 424.6934 L
+260.1876 403.5646 L
+237.8524 403.5646 L
+s
+249.0211 414.1298 m
+S
+U
+241.022 424.6934 m
+S
+240.9563 424.6078 m
+245.1874 448.21 262.0856 450.4797 272.4345 450.4797 c
+272.4345 448.11 l
+S
+272.4345 442.51 m
+272.4345 440.11 l
+S
+272.4345 433.3099 m
+272.4345 394.9098 l
+S
+256.6804 431.4645 m
+267.0451 436.6396 278.5449 438.116 280.9353 437.2144 c
+280.8428 390.6323 l
+S
+290.7353 446.5548 m
+286.4875 447.41 259.8874 445.41 253.0655 434.2483 C
+252.9173 433.3439 L
+256.3221 427.6647 L
+256.3352 427.422 L
+256.2874 425.9099 256.6787 425.8152 256.5655 424.6078 c
+S
+290.7534 446.31 m
+290.8157 381.7767 l
+S
+248.48 424.9316 m
+248.6874 426.4099 249.2874 427.8099 252.0496 429.4458 c
+S
+241.4221 402.9066 m
+245.6532 379.3045 262.2856 377.9203 272.6345 377.9203 c
+272.6345 380.29 l
+S
+272.6345 385.89 m
+272.6345 388.29 l
+S
+256.8804 396.9354 m
+267.2451 391.7604 278.7449 389.884 281.1353 390.7856 c
+S
+290.5354 381.8452 m
+286.2875 380.99 260.0874 382.99 253.2655 394.1517 C
+253.1173 395.056 L
+256.5221 400.7353 L
+256.5352 400.9779 L
+256.4874 402.4901 256.8787 402.5848 256.7655 403.7921 c
+S
+248.68 403.4684 m
+248.8874 401.9901 249.4874 400.5901 252.2496 398.9542 c
+S
+u
+349.3599 403.9938 m
+349.3599 425.1226 L
+371.6951 425.1226 L
+371.6951 403.9938 L
+349.3599 403.9938 L
+s
+360.5287 414.559 m
+S
+U
+352.8638 425.037 m
+357.0949 448.6392 373.7932 453.3089 384.142 453.3089 c
+384.142 450.9392 l
+S
+383.942 442.9392 m
+383.942 440.5392 l
+S
+383.942 433.7391 m
+383.942 395.339 l
+S
+367.188 425.2937 m
+374.395 437.0293 397.6525 441.7452 400.0429 440.8436 c
+400.1503 388.8615 l
+S
+392.6489 443.3392 m
+392.6429 446.984 l
+388.3951 447.8392 365.595 443.2293 359.5731 425.2774 C
+S
+392.661 436.1392 m
+392.733 392.9402 l
+S
+353.0638 404.4213 m
+357.2949 380.8192 373.9932 376.1495 384.342 376.1495 c
+384.342 378.5192 l
+S
+384.142 386.5192 m
+384.142 388.9192 l
+S
+367.388 404.1646 m
+374.595 392.4291 397.8525 387.7132 400.2429 388.6148 c
+S
+392.8489 386.1192 m
+392.8429 382.4744 l
+388.5951 381.6192 365.795 386.2291 359.7731 404.1809 C
+S
+0 To
+1 0 0 1 312.8488 403.9588 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Times-Roman 10 Tf
+0 0 Tl
+(point) Tx
+(\r) TX
+TO
+0 R
+0 G
+206.2508 411.8719 m
+208.8818 414.1739 210.9038 415.7118 214.4728 412.8589 c
+217.7608 410.2279 219.0758 410.8849 222.6928 414.1739 c
+S
+u
+u
+u
+u
+u
+u
+u
+0 To
+1.1 0 0 1.1 246.3457 412.416 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Symbol 9.091 Tf
+11.9992 0 Tl
+(a) Tx
+(\r) TX
+TO
+U
+U
+U
+U
+U
+U
+U
+u
+u
+u
+u
+u
+u
+u
+0 To
+1.1 0 0 1.1 357.6529 413.2452 0 Tp
+TP
+0 Tr
+(a) Tx
+(\r) TX
+TO
+U
+U
+U
+U
+U
+U
+U
+0 R
+0 G
+313.8361 412.9812 m
+316.4671 415.2832 318.4891 416.8212 322.0581 413.9682 c
+325.3461 411.3372 326.6611 411.9942 330.2781 415.2832 c
+S
+0.7 G
+[3 4 ]0 d
+310.772 425.8053 m
+304.8072 428.8292 303 430 275.1154 433.7037 c
+S
+[]0 d
+279.6774 435.0238 m
+274.5352 433.7722 l
+278.5974 430.5775 l
+S
+[3 4 ]0 d
+310.522 402.103 m
+304.5572 399.0792 302.75 398.25 274.8654 394.5463 c
+S
+[]0 d
+279.4274 393.2261 m
+274.2852 394.4777 l
+278.3474 397.6725 l
+S
+0 To
+1 0 0 1 313.2788 419.6832 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Times-Roman 10 Tf
+0 0 Tl
+(triple) Tx
+(\r) TX
+TO
+0 To
+1 0 0 1 311.0066 392.1832 0 Tp
+TP
+0 Tr
+(moves) Tx
+(\r) TX
+TO
+0 R
+0 G
+174.2347 412.2521 m
+172.1651 415.8742 l
+170.4403 412.2521 l
+S
+182.7722 411.814 m
+180.7026 415.436 l
+178.9778 411.814 l
+S
+190.0222 411.814 m
+187.9526 415.436 l
+186.2278 411.814 l
+S
+274.5222 411.314 m
+272.4526 414.936 l
+270.7278 411.314 l
+S
+282.7722 411.064 m
+280.7026 414.686 l
+278.9778 411.064 l
+S
+292.7722 411.064 m
+290.7026 414.686 l
+288.9778 411.064 l
+S
+386.0222 412.064 m
+383.9526 415.686 l
+382.2278 412.064 l
+S
+394.7722 412.314 m
+392.7026 415.936 l
+390.9778 412.314 l
+S
+402.0222 412.314 m
+399.9526 415.936 l
+398.2278 412.314 l
+S
+gsave annotatepage grestore showpage
+Adobe_IllustratorA_AI3 /terminate get exec
+Adobe_typography_AI3 /terminate get exec
+Adobe_customcolor /terminate get exec
+Adobe_cshow /terminate get exec
+Adobe_cmykcolor /terminate get exec
+Adobe_packedarray /terminate get exec
+%%EndDocument
+ @endspecial 615 1463 4 977 v 619 584 2482 1 v 530 704
+a Fk(.8)p 619 681 V 619 779 V 530 900 a(.6)p 619 877
+V 619 975 V 530 1095 a(.4)p 619 1072 V 619 1170 V 530
+1290 a(.2)p 619 1267 V 619 1365 V 3101 1463 4 977 v 619
+486 2482 4 v 867 1463 1 977 v 1080 1539 a(.2)p 1115 1463
+V 1364 1463 V 426 w(.4)p 1612 1463 V 1860 1463 V 427
+w(.6)p 2108 1463 V 2356 1463 V 426 w(.8)p 2605 1463 V
+2853 1463 V 619 1466 2482 4 v 943 1626 a Fl(Figure)28
+b(3:)38 b(from)27 b([2])i(\(dra)n(wn)d(with)i(Adob)r(e)g(Illustrator\))
+300 1900 y Fj(\\centerline{\\ShowGrid)300 2009 y
+(\\AffixLabels{\\epsfbox{Cl)o(osur)o(e.ep)o(s}})o(})300
+2253 y Fk(After)45 b(previewing)g(\014gure)f(3,)49 b(I)c(decided)f(to)i
+(replace)g(the)f(lab)s(els)g(\\triple",)50 b(\\p)s(oin)m(t",)300
+2363 y(\\mo)m(v)m(es")24 b(and)f(\\\014gure)g(26")h(using)f
+Fj(rlepsf.tex)p Fk(,)f(whic)m(h)h(is)g(needed)g(in)g(an)m(y)g(case)i
+(in)d(order)300 2472 y(to)38 b(kill)g(the)g(p)s(ostscript)f(lab)s(els,)
+i(and)e(use)g Fj(labelfig.tex)d Fk(to)k(replace)h(the)e(three)47
+b Ff(\013)9 b Fk('s.)300 2581 y(I)33 b(read)f(o\013)h(the)g(co)s
+(ordinates)h(for)e(the)h(cen)m(tre)h(of)f(the)g(three)42
+b Ff(\013)9 b Fk('s)34 b(as)42 b(\()p Ff(:)p Fk(05)p
+Ff(;)15 b(:)p Fk(6\))9 b(,)46 b(\()p Ff(:)p Fk(42)p Ff(;)15
+b(:)p Fk(6\))9 b(,)300 2690 y(\()p Ff(:)p Fk(83)p Ff(;)15
+b(:)p Fk(6\))39 b(and)27 b(t)m(yp)s(ed)g(the)g Fj(\\SetLabel)e
+Fk(instructions.)39 b(I)27 b(preview)m(ed)g(the)h(\014gure)e(a)i
+(second)300 2799 y(time,)f(made)e(small)g(adjustmen)m(ts)g(to)h(t)m(w)m
+(o)h(of)f(the)g Fj(\\relabels)e Fk(and)h(commen)m(ted)g(out)h(the)300
+2908 y Fj(\\Showgrid)p Fk(.)39 b(The)30 b(result)g(is)h(sho)m(wn)e(in)i
+(\014gure)f(4,)h(and)f(the)g(full)g(set)i(of)e(instructions)h(are)300
+3017 y(as)g(follo)m(ws:)300 3306 y Fj(\\centerline{\045)300
+3415 y(\\small)300 3524 y(\\SetLabels)300 3633 y(\\E\(.05*.6\))45
+b($\\alpha$\\\\)300 3742 y(\\E\(.42*.6\))g($\\alpha$\\\\)300
+3852 y(\\E\(.83*.6\))g($\\alpha$\\\\)300 3961 y(\\endSetLabels)300
+4070 y(\045\\ShowGrid)300 4179 y(\\AffixLabels{\\relabelbox)300
+4288 y(\\epsfbox{Closure.eps})300 4397 y(\\relabel{triple}{triple})300
+4506 y(\\relabel{point}{point})300 4615 y(\\adjustrelabel)f(<2pt,)i
+(0pt>)h({moves}{moves})300 4724 y(\\adjustrelabel)d(<-0.5in,0pt>)g
+({figure)i(26}{Figure)f(\\RClosure:)300 4833 y(figure)h(\\Closure\\)f
+(after)i(relabelling})300 4942 y(\\endrelabelbox}})1837
+5168 y Fk(8)p eop
+%%Page: 9 9
+9 8 bop 619 1463 a
+(MTG takes control) pop /MTGsavestate save def /p /show load def MTGdict
+begin gsave /rllist [] def /save {false} def /restore {pop} def /show
+{Mshow} def /ashow {Mshow pop pop} def /widthshow {Mshow pop pop pop}
+def /awidthshow {Mshow 5 {pop} repeat} def /xshow {pop Mshow} def /yshow
+{pop Mshow} def /xyshow {pop Mshow} def /cshow {Mshow pop} def /kshow
+{Mshow pop} def
+ 619 1463 a 619 1463 a
+/a {moveto} bind def
+ 619 1463 a @beginspecial
+134 @llx 350 @lly 406 @urx 457 @ury 2720 @rwi @setspecial
+%%BeginDocument: Closure.eps
+%AI3_ColorUsage: Black&White
+%AI3_TemplateBox: 288 360 288 360
+%AI3_TileBox: 0 0 552 730
+%AI3_DocumentPreview: Macintosh_Pic
+userdict /Adobe_packedarray 5 dict dup begin put
+/initialize % - initialize -
+{
+/packedarray where
+ {
+ pop
+ }
+ {
+ Adobe_packedarray begin
+ Adobe_packedarray
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ userdict 3 1 roll put
+ } forall
+ end
+ } ifelse
+} def
+/terminate % - terminate -
+{
+} def
+/packedarray % arguments count packedarray array
+{
+array astore readonly
+} def
+/setpacking % boolean setpacking -
+{
+pop
+} def
+/currentpacking % - setpacking boolean
+{
+false
+} def
+currentdict readonly pop end
+Adobe_packedarray /initialize get exec
+currentpacking true setpacking
+userdict /Adobe_cmykcolor 4 dict dup begin put
+/initialize % - initialize -
+{
+/setcmykcolor where
+ {
+ pop
+ }
+ {
+ userdict /Adobe_cmykcolor_vars 2 dict dup begin put
+ /_setrgbcolor
+ /setrgbcolor load def
+ /_currentrgbcolor
+ /currentrgbcolor load def
+ Adobe_cmykcolor begin
+ Adobe_cmykcolor
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ end
+ Adobe_cmykcolor begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_cmykcolor eq
+ {
+ end
+ } if
+} def
+/setcmykcolor % cyan magenta yellow black setcmykcolor -
+{
+1 sub 4 1 roll
+3
+ {
+ 3 index add neg dup 0 lt
+ {
+ pop 0
+ } if
+ 3 1 roll
+ } repeat
+Adobe_cmykcolor_vars /_setrgbcolor get exec
+pop
+} def
+/currentcmykcolor % - currentcmykcolor cyan magenta yellow black
+{
+Adobe_cmykcolor_vars /_currentrgbcolor get exec
+3
+ {
+ 1 sub neg 3 1 roll
+ } repeat
+0
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_cshow 3 dict dup begin put
+/initialize % - initialize -
+{
+/cshow where
+ {
+ pop
+ }
+ {
+ userdict /Adobe_cshow_vars 1 dict dup begin put
+ /_cshow % - _cshow proc
+ {} def
+ Adobe_cshow begin
+ Adobe_cshow
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ userdict 3 1 roll put
+ } forall
+ end
+ end
+ } ifelse
+} def
+/terminate % - terminate -
+{
+} def
+/cshow % proc string cshow -
+{
+exch
+Adobe_cshow_vars
+ exch /_cshow
+ exch put
+ {
+ 0 0 Adobe_cshow_vars /_cshow get exec
+ } forall
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_customcolor 5 dict dup begin put
+/initialize % - initialize -
+{
+/setcustomcolor where
+ {
+ pop
+ }
+ {
+ Adobe_customcolor begin
+ Adobe_customcolor
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ Adobe_customcolor begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_customcolor eq
+ {
+ end
+ } if
+} def
+/findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object
+{
+5 packedarray
+} def
+/setcustomcolor % object tint setcustomcolor -
+{
+exch
+aload pop pop
+4
+ {
+ 4 index mul 4 1 roll
+ } repeat
+5 -1 roll pop
+setcmykcolor
+} def
+/setoverprint % boolean setoverprint -
+{
+pop
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_typography_AI3 47 dict dup begin put
+/initialize % - initialize -
+{
+/TZ
+ where
+ {
+ pop
+ }
+ {
+ Adobe_typography_AI3 begin
+ Adobe_typography_AI3
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ Adobe_typography_AI3 begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_typography_AI3 eq
+ {
+ end
+ } if
+} def
+% [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ]
+/modifyEncoding
+{
+ /_tempEncode exch ddef
+
+ % pointer for sequential encodings
+ /_pntr 0 ddef
+
+ {
+ % get bottom object
+ counttomark -1 roll
+ % is it a mark ?
+ dup type dup /marktype eq
+ {
+ % exit
+ pop pop exit
+ }
+ {
+ % ... object ... type ....
+ % insert if a nametype
+ /nametype eq
+ {
+ % insert the name at _pntr and increment pointer
+ _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll
+ put
+ }
+ {
+ % reset _pntr if it's a number
+ /_pntr exch ddef
+ }
+ ifelse
+ }
+ ifelse
+ }
+ loop
+
+ % return the modified encoding
+ _tempEncode
+}
+def
+/TE % Set std platform encoding % (encoding pairs) TE -
+{
+ StandardEncoding 256 array copy modifyEncoding
+ /_nativeEncoding exch def
+} def
+% re-define font
+% expected arguments
+% for 'normal fonts :
+% [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ
+%
+% for cartographic, pictographic, and expert fonts :
+% [ ... number value stream ... /_Symbol/Symbol
+% direction fontScript defaultEncoding TZ
+% for blended fonts w/ default encoding :
+% [ /_AdobeSans_20ULig1XCond-Bold/AdobeSans
+% direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ
+% for blended fonts w/ special encoding :
+% [ ... number value stream ... /_AdobeSans_20ULig1XCond/AdobeSans
+% direction fontScript defaultEncoding [ w0 w1 ... wn ] TZ
+/TZ
+{
+ % set weight vector (if present)
+ dup type /arraytype eq {/_wv exch def} {/_wv 0 def} ifelse
+ % platform dependent coding flag
+ /_useNativeEncoding exch def
+ % pop fontScript & direction
+ pop pop
+
+ % create a new dictionary with length
+ % equal to original dictionary length + 2
+ % copy all the key/value pairs except FID
+ % call makeblended font with the weight values if _wv is an array
+ findfont _wv type /arraytype eq {_wv makeblendedfont} if dup length 2 add dict
+
+ begin
+
+ % copy all the values but the FID
+ % into the new dictionary
+ mark exch
+ {
+ 1 index /FID ne { def } if cleartomark mark
+ }
+ forall
+ % discard last mark
+ pop
+
+ % define FontName
+ /FontName exch def
+
+ % if no re-encoding stream is present
+ % then if the base encoding vector of the font
+ % is the same as StandardEncoding
+ % and the use platform encoding flag is true
+ % then install AI platform encoding
+ % else leave the base encoding in effect
+ counttomark 0 eq
+ {
+ 1 _useNativeEncoding eq
+ {
+ /Encoding _nativeEncoding def
+ }
+ if
+ % clean up
+ cleartomark
+ }
+ {
+ % custom encoding to be done
+ % start off with a copy of the font's standard encoding
+ /Encoding load 256 array copy
+ modifyEncoding /Encoding exch def
+ }
+ ifelse
+ FontName currentdict
+ end
+
+ % register the new font
+ definefont pop
+}
+def
+% text painting operators
+/tr % string tr ax ay string
+{
+_ax _ay 3 2 roll
+} def
+/trj % string trj cx cy fillchar ax ay string
+{
+_cx _cy _sp _ax _ay 6 5 roll
+} def
+/a0
+{
+/Tx % text % textString Tx -
+ {
+ dup
+ currentpoint 3 2 roll
+ tr _psf
+ newpath moveto
+ tr _ctm _pss
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup
+ currentpoint 3 2 roll
+ trj _pjsf
+ newpath moveto
+ trj _ctm _pjss
+ } ddef
+
+} def
+/a1
+{
+/Tx % text % textString Tx -
+ {
+ dup currentpoint 4 2 roll gsave
+ dup currentpoint 3 2 roll
+ tr _psf
+ newpath moveto
+ tr _ctm _pss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup currentpoint 4 2 roll gsave
+ dup currentpoint 3 2 roll
+ trj _pjsf
+ newpath moveto
+ trj _ctm _pjss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+
+} def
+/e0
+{
+/Tx % text % textString Tx -
+ {
+ tr _psf
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj _pjsf
+ } ddef
+} def
+/e1
+{
+/Tx % text % textString Tx -
+ {
+ dup currentpoint 4 2 roll gsave
+ tr _psf
+ grestore 3 1 roll moveto tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup currentpoint 4 2 roll gsave
+ trj _pjsf
+ grestore 3 1 roll moveto tr sp
+ } ddef
+} def
+/i0
+{
+/Tx % text % textString Tx -
+ {
+ tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj jsp
+ } ddef
+} def
+/i1
+{
+W N
+} def
+/o0
+{
+/Tx % text % textString Tx -
+ {
+ tr sw rmoveto
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj swj rmoveto
+ } ddef
+} def
+/r0
+{
+/Tx % text % textString Tx -
+ {
+ tr _ctm _pss
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ trj _ctm _pjss
+ } ddef
+} def
+/r1
+{
+/Tx % text % textString Tx -
+ {
+ dup currentpoint 4 2 roll currentpoint gsave newpath moveto
+ tr _ctm _pss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+/Tj % justified text % textString Tj -
+ {
+ dup currentpoint 4 2 roll currentpoint gsave newpath moveto
+ trj _ctm _pjss
+ grestore 3 1 roll moveto tr sp
+ } ddef
+} def
+% font operators
+% Binding
+/To % begin text % bindType To -
+{
+ pop _ctm currentmatrix pop
+} def
+/TO % end text % TO -
+{
+ Te _ctm setmatrix newpath
+} def
+% Text paths
+/Tp % begin text path % a b c d tx ty startPt Tp -
+{
+ pop _tm astore pop _ctm setmatrix
+ _tDict begin /W {} def /h {} def
+} def
+/TP % end text path % TP -
+{
+ end
+ iTm 0 0 moveto
+} def
+% Render mode & matrix operators
+/Tr % begin render % render Tr -
+{
+ _render 3 le {currentpoint newpath moveto} if
+ dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse
+ dup /_render exch ddef
+ _renderStart exch get load exec
+} def
+/iTm % internal set text matrix % - iTm - (uses _tm as implicit argument)
+{
+_ctm setmatrix _tm concat 0 _rise translate _hs 1 scale
+} def
+/Tm % set text matrix % a b c d tx ty Tm -
+{
+_tm astore pop iTm 0 0 moveto
+} def
+/Td % translate text matrix % tx ty Td -
+{
+_mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto
+} def
+/Te % end render % - Te -
+{
+ _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse
+ /_render -1 ddef
+} def
+% Attributes
+/Ta % set alignment % alignment Ta -
+{
+pop
+} def
+/Tf % set font name and size % fontname size Tf -
+{
+dup 1000 div /_fScl exch ddef
+exch findfont exch scalefont setfont
+} def
+/Tl % set leading % leading paragraphLeading Tl -
+{
+pop
+0 exch _leading astore pop
+} def
+/Tt % set user tracking % userTracking Tt -
+{
+pop
+} def
+/TW % set word spacing % minSpace optSpace maxSpace TW -
+{
+3 npop
+} def
+/Tw % set computed word spacing % wordSpace Tw
+{
+/_cx exch ddef
+} def
+/TC % set character spacing % minSpace optSpace maxSpace TC -
+{
+3 npop
+} def
+/Tc % set computed char spacing % charSpace Tc -
+{
+/_ax exch ddef
+} def
+/Ts % set super/subscripting (rise) % rise Ts -
+{
+/_rise exch ddef
+currentpoint
+iTm
+moveto
+} def
+/Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti -
+{
+3 npop
+} def
+/Tz % set horizontal scaling % scalePercent Tz -
+{
+100 div /_hs exch ddef
+iTm
+} def
+/TA % set pairwise kerning % autoKern TA -
+ % autoKern = 0 -> no pair kerning
+ % = 1 -> automatic pair kerning
+{
+pop
+} def
+/Tq % set hanging quotes % hangingQuotes Tq -
+ % hangingQuotes = 0 -> no hanging quotes
+ % = 1 -> hanging quotes
+{
+pop
+} def
+% Text Bodies
+/TX {pop} def
+%/Tx % non-justified text % textString Tx -
+%/Tj % justified text % textString Tj -
+/Tk % kern % autoKern kernValue Tk -
+ % autoKern = 0 -> manual kern, = 1 -> auto kern
+ % kernValue = kern value in em/1000 space
+{
+exch pop _fScl mul neg 0 rmoveto
+} def
+/TK % non-printing kern % autoKern kernValue TK -
+{
+2 npop
+} def
+/T* % carriage return & line feed % - T* -
+{
+_leading aload pop neg Td
+} def
+/T*- % carriage return & negative line feed % - T*- -
+{
+_leading aload pop Td
+} def
+/T- % print a discretionary hyphen % - T- -
+{
+_hyphen Tx
+} def
+/T+ % discretionary hyphen hyphen % - T+ -
+{} def
+/TR % reset pattern matrix % a b c d tx ty TR -
+{
+_ctm currentmatrix pop
+_tm astore pop
+iTm 0 0 moveto
+} def
+/TS % special chars % textString justified TS -
+{
+0 eq {Tx} {Tj} ifelse
+} def
+currentdict readonly pop end
+setpacking
+currentpacking true setpacking
+userdict /Adobe_IllustratorA_AI3 61 dict dup begin put
+% initialization
+/initialize % - initialize -
+{
+% 47 vars, but leave slack of 10 entries for custom Postscript fragments
+userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put
+% paint operands
+/_lp /none def
+/_pf {} def
+/_ps {} def
+/_psf {} def
+/_pss {} def
+/_pjsf {} def
+/_pjss {} def
+/_pola 0 def
+/_doClip 0 def
+% paint operators
+/cf currentflat def % - cf flatness
+% typography operands
+/_tm matrix def
+/_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def
+/_renderEnd [null null null null /i1 /i1 /i1 /i1] def
+/_render -1 def
+/_rise 0 def
+/_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention)
+/_ay 0 def % y character spacing
+/_cx 0 def % x word spacing
+/_cy 0 def % y word spacing
+/_leading [0 0] def
+/_ctm matrix def
+/_mtx matrix def
+/_sp 16#020 def
+/_hyphen (-) def
+/_fScl 0 def
+/_cnt 0 def
+/_hs 1 def
+/_nativeEncoding 0 def
+/_useNativeEncoding 0 def
+/_tempEncode 0 def
+/_pntr 0 def
+/_tDict 2 dict def
+% typography operators
+/Tx {} def
+/Tj {} def
+% compound path operators
+/CRender {} def
+% printing
+/_AI3_savepage {} def
+% color operands
+/_gf null def
+/_cf 4 array def
+/_if null def
+/_of false def
+/_fc {} def
+/_gs null def
+/_cs 4 array def
+/_is null def
+/_os false def
+/_sc {} def
+/_i null def
+Adobe_IllustratorA_AI3 begin
+Adobe_IllustratorA_AI3
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+end
+end
+Adobe_IllustratorA_AI3 begin
+Adobe_IllustratorA_AI3_vars begin
+newpath
+} def
+/terminate % - terminate -
+{
+end
+end
+} def
+% definition operators
+/_ % - _ null
+null def
+/ddef % key value ddef -
+{
+Adobe_IllustratorA_AI3_vars 3 1 roll put
+} def
+/xput % key value literal xput -
+{
+dup load dup length exch maxlength eq
+ {
+ dup dup load dup
+ length 2 mul dict copy def
+ } if
+load begin def end
+} def
+/npop % integer npop -
+{
+ {
+ pop
+ } repeat
+} def
+% marking operators
+/sw % ax ay string sw x y
+{
+dup length exch stringwidth
+exch 5 -1 roll 3 index 1 sub mul add
+4 1 roll 3 1 roll 1 sub mul add
+} def
+/swj % cx cy fillchar ax ay string swj x y
+{
+dup 4 1 roll
+dup length exch stringwidth
+exch 5 -1 roll 3 index 1 sub mul add
+4 1 roll 3 1 roll 1 sub mul add
+6 2 roll /_cnt 0 ddef
+{1 index eq {/_cnt _cnt 1 add ddef} if} forall pop
+exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
+} def
+/ss % ax ay string matrix ss -
+{
+4 1 roll
+ { % matrix ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put pop
+ gsave
+ false charpath currentpoint
+ 4 index setmatrix
+ stroke
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+3 npop
+} def
+/jss % cx cy fillchar ax ay string matrix jss -
+{
+4 1 roll
+ { % cx cy fillchar matrix ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put
+ gsave
+ _sp eq
+ {
+ exch 6 index 6 index 6 index 5 -1 roll widthshow
+ currentpoint
+ }
+ {
+ false charpath currentpoint
+ 4 index setmatrix stroke
+ }ifelse
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+6 npop
+} def
+% path operators
+/sp % ax ay string sp -
+{
+ {
+ 2 npop (0) exch
+ 2 copy 0 exch put pop
+ false charpath
+ 2 copy rmoveto
+ } exch cshow
+2 npop
+} def
+/jsp % cx cy fillchar ax ay string jsp -
+{
+ { % cx cy fillchar ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put
+ _sp eq
+ {
+ exch 5 index 5 index 5 index 5 -1 roll widthshow
+ }
+ {
+ false charpath
+ }ifelse
+ 2 copy rmoveto
+ } exch cshow
+5 npop
+} def
+% path construction operators
+/pl % x y pl x y
+{
+transform
+0.25 sub round 0.25 add exch
+0.25 sub round 0.25 add exch
+itransform
+} def
+/setstrokeadjust where
+ {
+ pop true setstrokeadjust
+ /c % x1 y1 x2 y2 x3 y3 c -
+ {
+ curveto
+ } def
+ /C
+ /c load def
+ /v % x2 y2 x3 y3 v -
+ {
+ currentpoint 6 2 roll curveto
+ } def
+ /V
+ /v load def
+ /y % x1 y1 x2 y2 y -
+ {
+ 2 copy curveto
+ } def
+ /Y
+ /y load def
+ /l % x y l -
+ {
+ lineto
+ } def
+ /L
+ /l load def
+ /m % x y m -
+ {
+ moveto
+ } def
+ }
+ {%else
+ /c
+ {
+ pl curveto
+ } def
+ /C
+ /c load def
+ /v
+ {
+ currentpoint 6 2 roll pl curveto
+ } def
+ /V
+ /v load def
+ /y
+ {
+ pl 2 copy curveto
+ } def
+ /Y
+ /y load def
+ /l
+ {
+ pl lineto
+ } def
+ /L
+ /l load def
+ /m
+ {
+ pl moveto
+ } def
+ }ifelse
+% graphic state operators
+/d % array phase d -
+{
+setdash
+} def
+/cf {} def % - cf flatness
+/i % flatness i -
+{
+dup 0 eq
+ {
+ pop cf
+ } if
+setflat
+} def
+/j % linejoin j -
+{
+setlinejoin
+} def
+/J % linecap J -
+{
+setlinecap
+} def
+/M % miterlimit M -
+{
+setmiterlimit
+} def
+/w % linewidth w -
+{
+setlinewidth
+} def
+% path painting operators
+/H % - H -
+{} def
+/h % - h -
+{
+closepath
+} def
+/N % - N -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq {clip /_doClip 0 ddef} if
+ newpath
+ }
+ {
+ /CRender {N} ddef
+ }ifelse
+} def
+/n % - n -
+{N} def
+/F % - F -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq
+ {
+ gsave _pf grestore clip newpath /_lp /none ddef _fc
+ /_doClip 0 ddef
+ }
+ {
+ _pf
+ }ifelse
+ }
+ {
+ /CRender {F} ddef
+ }ifelse
+} def
+/f % - f -
+{
+closepath
+F
+} def
+/S % - S -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq
+ {
+ gsave _ps grestore clip newpath /_lp /none ddef _sc
+ /_doClip 0 ddef
+ }
+ {
+ _ps
+ }ifelse
+ }
+ {
+ /CRender {S} ddef
+ }ifelse
+} def
+/s % - s -
+{
+closepath
+S
+} def
+/B % - B -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq % F clears _doClip
+ gsave F grestore
+ {
+ gsave S grestore clip newpath /_lp /none ddef _sc
+ /_doClip 0 ddef
+ }
+ {
+ S
+ }ifelse
+ }
+ {
+ /CRender {B} ddef
+ }ifelse
+} def
+/b % - b -
+{
+closepath
+B
+} def
+/W % - W -
+{
+/_doClip 1 ddef
+} def
+/* % - [string] * -
+{
+count 0 ne
+ {
+ dup type (stringtype) eq {pop} if
+ } if
+_pola 0 eq {newpath} if
+} def
+% group operators
+/u % - u -
+{} def
+/U % - U -
+{} def
+/q % - q -
+{
+_pola 0 eq {gsave} if
+} def
+/Q % - Q -
+{
+_pola 0 eq {grestore} if
+} def
+/*u % - *u -
+{
+_pola 1 add /_pola exch ddef
+} def
+/*U % - *U -
+{
+_pola 1 sub /_pola exch ddef
+_pola 0 eq {CRender} if
+} def
+/D % polarized D -
+{pop} def
+/*w % - *w -
+{} def
+/*W % - *W -
+{} def
+% place operators
+/` % matrix llx lly urx ury string ` -
+{
+/_i save ddef
+6 1 roll 4 npop
+concat pop
+userdict begin
+/showpage {} def
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[] 0 setdash
+newpath
+0 setgray
+false setoverprint
+} def
+/~ % - ~ -
+{
+end
+_i restore
+} def
+% color operators
+/O % flag O -
+{
+0 ne
+/_of exch ddef
+/_lp /none ddef
+} def
+/R % flag R -
+{
+0 ne
+/_os exch ddef
+/_lp /none ddef
+} def
+/g % gray g -
+{
+/_gf exch ddef
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _gf setgray
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/G % gray G -
+{
+/_gs exch ddef
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _gs setgray
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+/k % cyan magenta yellow black k -
+{
+_cf astore pop
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _cf aload pop setcmykcolor
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/K % cyan magenta yellow black K -
+{
+_cs astore pop
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _cs aload pop setcmykcolor
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+/x % cyan magenta yellow black name gray x -
+{
+/_gf exch ddef
+findcmykcustomcolor
+/_if exch ddef
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _if _gf 1 exch sub setcustomcolor
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/X % cyan magenta yellow black name gray X -
+{
+/_gs exch ddef
+findcmykcustomcolor
+/_is exch ddef
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _is _gs 1 exch sub setcustomcolor
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+% locked object operator
+/A % value A -
+{
+pop
+} def
+currentdict readonly pop end
+setpacking
+% annotate page operator
+/annotatepage
+{
+} def
+Adobe_cmykcolor /initialize get exec
+Adobe_cshow /initialize get exec
+Adobe_customcolor /initialize get exec
+Adobe_typography_AI3 /initialize get exec
+Adobe_IllustratorA_AI3 /initialize get exec
+[
+39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+TE
+%AI3_BeginEncoding: _Symbol Symbol
+[/_Symbol/Symbol 0 0 0 TZ
+%AI3_EndEncoding TrueType
+%AI3_BeginEncoding: _Times-Roman Times-Roman
+[/_Times-Roman/Times-Roman 0 0 1 TZ
+%AI3_EndEncoding TrueType
+0 A
+u
+u
+0 To
+1 0 0 1 247.4954 352.7644 0 Tp
+TP
+0 Tr
+0 O
+0 g
+0 i 0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+/_Times-Roman 11 Tf
+0 Ts
+100 Tz
+0 Tt
+0 TA
+0 0 5 TC
+100 100 200 TW
+0 0 0 Ti
+0 Ta
+0 Tq
+14.5 0 Tl
+0 Tc
+0 Tw
+(figure 26) Tx
+(\r) TX
+TO
+U
+U
+u
+0 R
+0 G
+137.552 403.6548 m
+137.552 424.7835 L
+159.8872 424.7835 L
+159.8872 403.6548 L
+137.552 403.6548 L
+s
+148.7208 414.2199 m
+S
+U
+140.7217 424.7835 m
+S
+140.656 424.6979 m
+144.8871 448.3001 161.7853 450.5698 172.1342 450.5698 c
+172.1342 448.2001 l
+S
+172.1342 442.6001 m
+172.1342 440.2001 l
+S
+172.1342 433.4001 m
+172.1342 394.9999 l
+S
+u
+u
+u
+u
+u
+u
+u
+0 To
+1.1 0 0 1.1 145.5684 412.7616 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Symbol 9.091 Tf
+11.9992 0 Tl
+(a) Tx
+(\r) TX
+TO
+U
+U
+U
+U
+U
+U
+U
+0 R
+0 G
+156.3801 431.5547 m
+166.7448 436.7297 179.5 440.5 188.235 440.5045 c
+188.3425 388.5224 l
+S
+180.8411 443.0001 m
+180.835 446.6449 l
+176.5872 447.5001 159.5871 445.5001 152.7652 434.3384 C
+152.617 433.4341 L
+156.0218 427.7548 L
+156.0349 427.5122 L
+155.9871 426 156.3784 425.9053 156.2652 424.6979 c
+S
+180.8531 435.8001 m
+180.9252 392.6011 l
+S
+148.1797 425.0217 m
+148.3871 426.5 148.9871 427.9 151.7493 429.5359 c
+S
+141.1217 402.9967 m
+145.3529 379.3946 161.9853 378.0104 172.3342 378.0104 c
+172.3342 380.3801 l
+S
+172.3342 385.9801 m
+172.3342 388.3801 l
+S
+156.5801 397.0255 m
+166.9448 391.8505 186.0447 387.1741 188.435 388.0757 c
+S
+181.0411 385.5801 m
+181.035 381.9353 l
+176.7872 381.0801 159.7871 383.0801 152.9652 394.2418 C
+152.817 395.1462 L
+156.2218 400.8255 L
+156.2349 401.068 L
+156.1871 402.5802 156.5784 402.6749 156.4652 403.8823 c
+S
+148.3796 403.5585 m
+148.5871 402.0802 149.1871 400.6802 151.9493 399.0443 c
+S
+u
+237.8524 403.5646 m
+237.8524 424.6934 L
+260.1876 424.6934 L
+260.1876 403.5646 L
+237.8524 403.5646 L
+s
+249.0211 414.1298 m
+S
+U
+241.022 424.6934 m
+S
+240.9563 424.6078 m
+245.1874 448.21 262.0856 450.4797 272.4345 450.4797 c
+272.4345 448.11 l
+S
+272.4345 442.51 m
+272.4345 440.11 l
+S
+272.4345 433.3099 m
+272.4345 394.9098 l
+S
+256.6804 431.4645 m
+267.0451 436.6396 278.5449 438.116 280.9353 437.2144 c
+280.8428 390.6323 l
+S
+290.7353 446.5548 m
+286.4875 447.41 259.8874 445.41 253.0655 434.2483 C
+252.9173 433.3439 L
+256.3221 427.6647 L
+256.3352 427.422 L
+256.2874 425.9099 256.6787 425.8152 256.5655 424.6078 c
+S
+290.7534 446.31 m
+290.8157 381.7767 l
+S
+248.48 424.9316 m
+248.6874 426.4099 249.2874 427.8099 252.0496 429.4458 c
+S
+241.4221 402.9066 m
+245.6532 379.3045 262.2856 377.9203 272.6345 377.9203 c
+272.6345 380.29 l
+S
+272.6345 385.89 m
+272.6345 388.29 l
+S
+256.8804 396.9354 m
+267.2451 391.7604 278.7449 389.884 281.1353 390.7856 c
+S
+290.5354 381.8452 m
+286.2875 380.99 260.0874 382.99 253.2655 394.1517 C
+253.1173 395.056 L
+256.5221 400.7353 L
+256.5352 400.9779 L
+256.4874 402.4901 256.8787 402.5848 256.7655 403.7921 c
+S
+248.68 403.4684 m
+248.8874 401.9901 249.4874 400.5901 252.2496 398.9542 c
+S
+u
+349.3599 403.9938 m
+349.3599 425.1226 L
+371.6951 425.1226 L
+371.6951 403.9938 L
+349.3599 403.9938 L
+s
+360.5287 414.559 m
+S
+U
+352.8638 425.037 m
+357.0949 448.6392 373.7932 453.3089 384.142 453.3089 c
+384.142 450.9392 l
+S
+383.942 442.9392 m
+383.942 440.5392 l
+S
+383.942 433.7391 m
+383.942 395.339 l
+S
+367.188 425.2937 m
+374.395 437.0293 397.6525 441.7452 400.0429 440.8436 c
+400.1503 388.8615 l
+S
+392.6489 443.3392 m
+392.6429 446.984 l
+388.3951 447.8392 365.595 443.2293 359.5731 425.2774 C
+S
+392.661 436.1392 m
+392.733 392.9402 l
+S
+353.0638 404.4213 m
+357.2949 380.8192 373.9932 376.1495 384.342 376.1495 c
+384.342 378.5192 l
+S
+384.142 386.5192 m
+384.142 388.9192 l
+S
+367.388 404.1646 m
+374.595 392.4291 397.8525 387.7132 400.2429 388.6148 c
+S
+392.8489 386.1192 m
+392.8429 382.4744 l
+388.5951 381.6192 365.795 386.2291 359.7731 404.1809 C
+S
+0 To
+1 0 0 1 312.8488 403.9588 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Times-Roman 10 Tf
+0 0 Tl
+(point) Tx
+(\r) TX
+TO
+0 R
+0 G
+206.2508 411.8719 m
+208.8818 414.1739 210.9038 415.7118 214.4728 412.8589 c
+217.7608 410.2279 219.0758 410.8849 222.6928 414.1739 c
+S
+u
+u
+u
+u
+u
+u
+u
+0 To
+1.1 0 0 1.1 246.3457 412.416 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Symbol 9.091 Tf
+11.9992 0 Tl
+(a) Tx
+(\r) TX
+TO
+U
+U
+U
+U
+U
+U
+U
+u
+u
+u
+u
+u
+u
+u
+0 To
+1.1 0 0 1.1 357.6529 413.2452 0 Tp
+TP
+0 Tr
+(a) Tx
+(\r) TX
+TO
+U
+U
+U
+U
+U
+U
+U
+0 R
+0 G
+313.8361 412.9812 m
+316.4671 415.2832 318.4891 416.8212 322.0581 413.9682 c
+325.3461 411.3372 326.6611 411.9942 330.2781 415.2832 c
+S
+0.7 G
+[3 4 ]0 d
+310.772 425.8053 m
+304.8072 428.8292 303 430 275.1154 433.7037 c
+S
+[]0 d
+279.6774 435.0238 m
+274.5352 433.7722 l
+278.5974 430.5775 l
+S
+[3 4 ]0 d
+310.522 402.103 m
+304.5572 399.0792 302.75 398.25 274.8654 394.5463 c
+S
+[]0 d
+279.4274 393.2261 m
+274.2852 394.4777 l
+278.3474 397.6725 l
+S
+0 To
+1 0 0 1 313.2788 419.6832 0 Tp
+TP
+0 Tr
+0 O
+0 g
+/_Times-Roman 10 Tf
+0 0 Tl
+(triple) Tx
+(\r) TX
+TO
+0 To
+1 0 0 1 311.0066 392.1832 0 Tp
+TP
+0 Tr
+(moves) Tx
+(\r) TX
+TO
+0 R
+0 G
+174.2347 412.2521 m
+172.1651 415.8742 l
+170.4403 412.2521 l
+S
+182.7722 411.814 m
+180.7026 415.436 l
+178.9778 411.814 l
+S
+190.0222 411.814 m
+187.9526 415.436 l
+186.2278 411.814 l
+S
+274.5222 411.314 m
+272.4526 414.936 l
+270.7278 411.314 l
+S
+282.7722 411.064 m
+280.7026 414.686 l
+278.9778 411.064 l
+S
+292.7722 411.064 m
+290.7026 414.686 l
+288.9778 411.064 l
+S
+386.0222 412.064 m
+383.9526 415.686 l
+382.2278 412.064 l
+S
+394.7722 412.314 m
+392.7026 415.936 l
+390.9778 412.314 l
+S
+402.0222 412.314 m
+399.9526 415.936 l
+398.2278 412.314 l
+S
+gsave annotatepage grestore showpage
+Adobe_IllustratorA_AI3 /terminate get exec
+Adobe_typography_AI3 /terminate get exec
+Adobe_customcolor /terminate get exec
+Adobe_cshow /terminate get exec
+Adobe_cmykcolor /terminate get exec
+Adobe_packedarray /terminate get exec
+%%EndDocument
+ @endspecial 3101 1463 a
+/a {} def
+ 3101 1463 a 3101 1463 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (triple) findlabel
+ 3101
+1463 a Fl(triple)3101 1463 y
+grestore
+ 3101 1463 a 3101 1463 a
+/a {} def
+
+3101 1463 a 3101 1463 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (point) findlabel
+ 3101 1463 a Fl(p)r(oin)n(t)3101
+1463 y
+grestore
+ 3101 1463 a 3101 1463 a
+/a {} def
+ 3101 1463 a 3101 1463
+a
+gsave /a {moveto} bind def transform MTGdict /rllist get (moves) findlabel
+ 3101 1463 a 18 w Fl(mo)n(v)n(es)3101 1463 y
+grestore
+ 3101 1463
+a 3101 1463 a
+/a {} def
+ 3101 1463 a 3101 1463 a
+gsave /a {moveto} bind def transform MTGdict /rllist get (figure 26)
+findlabel
+ 3101 1463 a -329
+w Fl(Figure)29 b(4:)38 b(\014gure)27 b(3)h(after)g(relab)r(elling)3101
+1463 y
+grestore
+ 3101 1463 a 3101 1463 a
+(MTG signs off) pop grestore end /restore {restore} bind def MTGsavestate
+restore
+ 3101 1463 a 716 895 a
+Fd(\013)864 b(\013)964 b(\013)300 1663 y Fi(Notes)300
+1881 y Fk(\(1\))92 b(The)30 b Fj(\\E)h Fk(commands)d(pre\014xed)i(to)i
+(the)f(co)s(ordinates)g(for)g(the)40 b Ff(\013)9 b Fk('s)32
+b(are)f(orien)m(tation)300 1990 y(commands)24 b(whic)m(h)i(cause)g
+Fj(labelfig.tex)d Fk(to)k(attac)m(h)h(these)f(lab)s(els)f(b)m(y)g
+(their)g(cen)m(tres)h(to)300 2099 y(the)k(p)s(oin)m(t)f(with)g(giv)m
+(en)h(co)s(ordinates)g(\(\\E")h(is)e(for)g(`equator'\).)300
+2263 y(\(2\))92 b(It)34 b(is)h(not)f(recommended)e(to)j(attac)m(h)i
+(the)d(caption)h(to)g(the)g(\014gure)f(as)g(part)g(of)h(the)300
+2372 y(\014gure.)51 b(This)34 b(w)m(as)g(merely)g(done)g(in)g(the)g
+(example)g(b)s(ecause)g(the)g(caption)h(w)m(as)g(part)f(of)300
+2481 y(the)29 b(original)h(\014gure)e(and,)g(if)h(nothing)f(had)g(b)s
+(een)g(substituted,)h(there)f(w)m(ould)h(ha)m(v)m(e)h(b)s(een)300
+2590 y(an)g(unsigh)m(tly)h(blank)f(line)g(at)i(the)e(b)s(ottom)g(of)g
+(the)h(\014gure.)300 2754 y(\(3\))e(The)e Fj(\\SetLabels)45
+b(....)i(\\endSetLabels)24 b Fk(pair)k(forms)e(a)j Fj(tex)e
+Fk(group)g(and)g(I)h(could)300 2863 y(ha)m(v)m(e)36 b(t)m(yp)s(ed)f
+Fj(\\small)f Fk(after)h Fj(\\SetLabels)e Fk(to)i(set)h(the)f(new)g(lab)
+s(els)g(for)g Fj(labelfig.tex)300 2972 y Fk(in)29 b(the)h(correct)g(p)s
+(oin)m(t)f(size)h(without)g(a\013ecting)h(an)m(y)f(other)f(part)g(of)h
+(the)f(text.)42 b(Ho)m(w)m(ev)m(er,)300 3081 y(b)m(y)27
+b(placing)h(the)f Fj(\\small)e Fk(command)g(just)i(after)g(the)h
+Fj(\\centerline{)p Fk(,)c(b)s(oth)j(sets)g(of)g(new)300
+3190 y(lab)s(els)k(w)m(ere)f(set)h(in)f(the)h(correct)g(p)s(oin)m(t)g
+(size.)300 3426 y Fi(References)382 3626 y Fl([1])57
+b Fm(Geometry)34 b(and)g(T)-8 b(op)s(ology)p Fl(,)33
+b Fa(F)-6 b(urther)31 b(topics)g(for)h(authors)p Fl(,)f(Geometry)e(and)
+h(T)-7 b(op)r(ol-)527 3726 y(ogy)g(,)29 b Fn
+(http://www.maths.warwick.ac.uk/gt/info/samples/topics.ps)382
+3854 y Fl([2])57 b Fm(So\014a)28 b(Lam)m(brop)s(oulou)f(and)g(Colin)i
+(Rourk)m(e)p Fl(,)24 b Fa(Markov's)i(the)l(or)l(em)f(in)h(3{manifolds)p
+Fl(,)527 3954 y(T)-7 b(op)r(ology)29 b(and)f(its)g(Applications)g(\(to)
+g(app)r(ear\))g(\(a)n(v)-5 b(ailable)29 b(from)e(m)n(y)g(home)g(page\))
+382 4081 y([3])57 b Fm(T)-8 b(omas)25 b(Rokic)m(ki)j(\(and)d(Donald)h
+(Kn)m(uth\))p Fl(,)c Fa(The)i(macr)l(o)g(p)l(ackage)e
+Fn(epsf.tex)p Fl(,)g(CT)-7 b(AN)382 4208 y([4])57 b Fm(Colin)37
+b(Rourk)m(e)p Fl(,)31 b Fa(A)n(lgorithms)i(to)f(dispr)l(ove)f(the)h
+(Poinc)l(ar)n(\023)-41 b(e)31 b(c)l(onje)l(ctur)l(e)p
+Fl(,)e(T)-7 b(alk)30 b(giv)n(en)h(at)527 4308 y(the)d(G\177)-42
+b(ok)n(o)n(v)-5 b(a)29 b(T)-7 b(op)r(ology)28 b(Conference,)h(Ma)n(y)f
+(1994)h(\(a)n(v)-5 b(ailable)29 b(from)e(m)n(y)g(home)g(page\))382
+4435 y([5])57 b Fm(Colin)40 b(Rourk)m(e)p Fl(,)33 b Fa(Dunc)l(e)h(hats)
+g(and)h(the)e(Kervair)l(e)g(c)l(onje)l(ctur)l(e)p Fl(,)e(P)n(ap)r(ers)i
+(presen)n(ted)f(to)527 4535 y(EC)c(Zeeman,)h(W)-7 b(arwic)n(k)29
+b(\(1988\))e(221{230)i(\(a)n(v)-5 b(ailable)29 b(from)e(m)n(y)g(home)g
+(page\))382 4663 y([6])57 b Fm(Ra)m(y)46 b(S)n(\023)-46
+b(eroul)47 b(and)e(Larry)h(Sieb)s(enmann)p Fl(,)39 b
+Fa(The)h(macr)l(o)g(p)l(ackage)f Fn(labelfig.tex)p Fl(,)527
+4763 y(CT)-7 b(AN)1837 5168 y Fk(9)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/rlepsf/rlepsf.tex b/macros/generic/rlepsf/rlepsf.tex
new file mode 100644
index 0000000000..5e2702703c
--- /dev/null
+++ b/macros/generic/rlepsf/rlepsf.tex
@@ -0,0 +1,167 @@
+%%%%%%%%%%%%%%%%%%%%%% rlepsf.tex %%%%%%%%%%%%%%%%
+% Version 1.0 (beta test)
+%
+% Comments, problems etc to : cpr@maths.warwick.ac.uk
+%
+% Macros to relabel an eps file with TeX labels,
+% written by Michael Greene, with TeX front end
+% written by Colin Rourke.
+%
+% Designed for use with the macro package epsf.tex
+% and dvips converter (written by Rokicki and Knuth)
+% and with eps output from a variety of drawing
+% packages (tested with output from xfig and Adobe
+% Illustrator, and with hand-drawn figures).
+%
+% To use this package type \input rlepsf (in place of
+% the usual \input epsf ). Then place each eps file
+% in a \relabelbox ... \endrelabelbox with relabelling
+% instructions after the \epsfbox{..} .
+%
+% The eps file is called exactly as usual with epsf.tex
+% typical instructions being \epsfbox{filename.eps}
+% and \epsfxsize dimension \epsfbox{filename.eps}
+% (where "dimension" is the required finished width of
+% the diagram).
+%
+% There are three (re)labelling macros:
+%
+% \relabel {pslabel}{TeX label}
+% \adjustrelabel <dx,dy> {pslabel}{TeX label}
+% \extralabel <x,y> {extra label}
+%
+% \relabel uses the ps file position for the new TeX
+% label (which can be any TeX output). The new label
+% is positioned with same reference point (left-hand
+% end of baseline) as the original ps label.
+% \adjustrelabel adjusts the position by dx,dy and
+% is useful for fine tuning the position of the
+% new label. \extralabel allows extra TeX labels to be
+% inserted. The positions x,y are measured from the
+% bottom right-hand corner of the box (so x is typically
+% negative) ! The re/extra-labelling instructions can
+% be given in any order and any TeX dimensions can
+% be used for x,y,dx,dy.
+%
+% The result is a box of dimensions the original epsbox
+% but with new TeX labels. This can then be inserted in
+% $$ ... $$ or \centerline{ ... } for display, or
+% combined with other boxes to form a larger display.
+%
+% The \relabelbox ... \endrelabelbox forms a TeX group;
+% thus instructions for resizing text for the new labels
+% (eg \small ) will remain local to this group.
+%
+% There are two main uses for the package :
+%
+% (1) Creating graphics with TeX labels :
+% Draw the graphic with dummy ps labels (all different and in
+% some common font eg Times-Roman). Then use \relabel 'ling
+% instructions to replace the dummy labels by the genuine TeX
+% labels. Use roughly the same size dummy labels as the final
+% TeX labels and then the position will probably be perfect
+% first time. Adjust the positions if necessary by editing
+% \relabel to \adjustrelabel with appropriate <dx,dy>.
+%
+% (2) Editing the ps labels in an existing eps file to TeX
+% labels :
+% Use \relabel and \adjustrelabel to replace the
+% existing labels. You may have to use \extralabel for
+% some of the new labels (or to edit the eps file to change
+% repeated ps labels to be different), see note (2) below.
+%
+% Notes:
+% (1) All ps labels are removed whether or not
+% instructions for relabelling are given.
+% (2) If the eps file has two or more labels the
+% same, then only one will be replaced. Therefore
+% if you are designing a diagram from scratch then
+% use different temporary ps labels for your labels
+% even if you wish them to finish the same. If
+% you are relabelling an existing eps diagram with TeX
+% labels then use \extralabel's to replace the other
+% label(s) or edit the eps file to change the repeated
+% labels to different ones.
+% (3) The macros are sensitive to extra spaces and
+% the above syntax should be used.
+% (4) The output will not view correctly on a dvi
+% viewer which will typically show the new labels
+% superimposed at the bottom right-hand corner.
+% However those produced by \extralabel will be shown
+% correctly positioned.
+%
+% A typical example of use is appended. More realistic
+% examples are given in the postscript documentation file
+% rlepsdoc.ps. CPR 16-12-96
+%
+%
+\input epsf
+%
+% Initialise for MTG control
+%
+\special{! (MTG set-up) pop userdict /MTGdict 99 dict put MTGdict begin
+ /Mshow {[ MTGdict /rllist get aload length 2 add -1 roll
+ currentpoint transform ] MTGdict /rllist 3 2 roll put} def
+ /findlabel {/sought exch def
+ /MTGx 3 index def /MTGy 2 index def aload length 3 idiv dup 0 eq
+ {pop}
+ {{2 index sought eq
+ {/MTGy exch def /MTGx exch def pop}
+ {pop pop pop}
+ ifelse}
+ repeat}
+ ifelse exch MTGx exch sub exch MTGy exch sub idtransform translate
+ } def
+ end}%
+%
+\def\relabelbox{%
+ \hbox\bgroup%
+ \special{ps:(MTG takes control) pop
+ /MTGsavestate save def /p /show load def MTGdict begin gsave
+ /rllist [] def /save {false} def /restore {pop} def /show {Mshow} def
+ /ashow {Mshow pop pop} def /widthshow {Mshow pop pop pop} def /awidthshow
+ {Mshow 5 {pop} repeat} def /xshow {pop Mshow} def /yshow {pop Mshow} def
+ /xyshow {pop Mshow} def /cshow {Mshow pop} def /kshow {Mshow pop} def}%
+ \special{ps:/a {moveto} bind def}%
+}%
+\def\endrelabelbox{%
+ \special{ps:(MTG signs off) pop grestore end /restore {restore} bind def
+ MTGsavestate restore}\egroup%
+}%
+\def\relabel #1#2 {%
+ \special{ps:/a {} def}%
+ \special{ps:gsave /a {moveto} bind def transform MTGdict /rllist get (#1) findlabel}%
+ \smash{\rlap{#2}}%
+ \special{ps:grestore}%
+}%
+\def\adjustrelabel <#1,#2> #3#4 {%
+ \special{ps:/a {} def}%
+ \special{ps:gsave /a {moveto} bind def transform MTGdict /rllist get (#3) findlabel}%
+ \smash{\rlap{\kern #1 \raise #2\hbox{#4}}}%
+ \special{ps:grestore}%
+}%
+\def\extralabel <#1,#2> #3 {\smash{\rlap{\kern #1 \raise #2\hbox{#3}}}}%
+\endinput
+%
+%%%% Typical example of use :
+%
+\input rlepsf.tex
+The line before the figure.\hfil\break
+\centerline{%
+\relabelbox
+\epsfxsize 3truein \epsfbox {figure1.eps}
+%% Give label size instruction (eg \small) here.
+\adjustrelabel <0pt,1pt> {Ab}{$A^b$}
+\adjustrelabel <-4pt,0pt> {P}{$P$}
+\relabel {Bc}{$B_c$}
+\extralabel <-.3truein,0.3truein> {First extra label}
+\adjustrelabel <1pt,0pt> {IP"}{$\int P''$}
+\adjustrelabel <1pt,0pt> {P'}{$P'$}
+\extralabel <-1.5cm,1.5cm> {Second extra label}
+\endrelabelbox
+}
+The line after the figure.
+
+\bye
+
+ \ No newline at end of file
diff --git a/macros/generic/schemata/Makefile b/macros/generic/schemata/Makefile
new file mode 100644
index 0000000000..b10f10c47b
--- /dev/null
+++ b/macros/generic/schemata/Makefile
@@ -0,0 +1,35 @@
+NAME = schemata
+SHELL = bash
+PWD = $(shell pwd)
+VERS = $(shell ltxfileinfo -v $(NAME).dtx|sed -e 's/^v//')
+LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL)
+UTREE = $(shell kpsewhich --var-value TEXMFHOME)
+all: $(NAME).pdf
+ test -e README.txt && mv README.txt README || exit 0
+$(NAME).pdf: $(NAME).dtx
+ pdflatex -shell-escape -recorder -interaction=batchmode $(NAME).dtx >/dev/null
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+ if [ -f $(NAME).glo ]; then makeindex -q -s gglo.ist -o $(NAME).gls $(NAME).glo; fi
+ if [ -f $(NAME).idx ]; then makeindex -q -s gind.ist -o $(NAME).ind $(NAME).idx; fi
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+clean:
+ rm -f $(NAME).{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc} README.txt
+distclean: clean
+ rm -f $(NAME).{pdf,sty} README
+inst: all
+ mkdir -p $(UTREE)/{tex,source,doc}/generic/$(NAME)
+ cp $(NAME).dtx $(UTREE)/source/generic/$(NAME)
+ cp Makefile $(UTREE)/source/generic/$(NAME)
+ cp $(NAME).sty $(UTREE)/tex/generic/$(NAME)
+ cp $(NAME).pdf $(UTREE)/doc/generic/$(NAME)
+install: all
+ sudo mkdir -p $(LOCAL)/{tex,source,doc}/generic/$(NAME)
+ sudo cp $(NAME).dtx $(LOCAL)/source/generic/$(NAME)
+ sudo cp Makefile $(LOCAL)/source/generic/$(NAME)
+ sudo cp $(NAME).sty $(LOCAL)/tex/generic/$(NAME)
+ sudo cp $(NAME).pdf $(LOCAL)/doc/generic/$(NAME)
+zip: all
+ ln -sf . $(NAME)
+ zip -Drq $(PWD)/$(NAME)-$(VERS).zip $(NAME)/{README,Makefile,$(NAME).{pdf,dtx}}
+ rm $(NAME)
diff --git a/macros/generic/schemata/README b/macros/generic/schemata/README
new file mode 100644
index 0000000000..b3a599bae3
--- /dev/null
+++ b/macros/generic/schemata/README
@@ -0,0 +1,79 @@
+|
+--------:| ----------------------------------------------------------------
+schemata:| Generic package to aid construction of topical categories
+ Author:| Charles P. Schaum
+ E-mail:| charles dot schaum at comcast dot net
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+Short description:
+The schemata package helps the creation of topical outlines that illustrate the breakdown of concepts and categories in academic texts from the late medieval to early modern periods.
+
+Files Distribution
+
+README This file
+schemata.pdf Documentation
+
+Makefile Automates building with GNU make 3.81
+schemata.dtx Documented LaTeX file containing both code and documentation
+
+Installation
+
+Unpack schemata-XX.zip in an appropriate directory.
+
+Note that the instructions below assume that you are using a *nix-
+compatible computer. If that is otherwise, you will need to modify
+these instructions to your needs.
+
+If you have a make utility compatible with GNU make you can type
+
+make inst
+
+to install the package into your $TEXMFHOME tree or
+
+make install
+
+to install the package into your $TEXMFLOCAL tree for all users.
+
+Manually, you can generate the package files. First you generate the
+installer driver, README, and style files, with a preliminary PDF:
+
+pdflatex -shell-escape -recorder -interaction=batchmode schemata.dtx
+
+Next you generate the PDF with a table of contents and all cross-references
+validated, so that the index entries will not move:
+
+pdflatex --recorder --interaction=nonstopmode schemata.dtx
+
+The next commands generate the glossary/index and final pdf file
+
+makeindex -q -s gglo.ist -o schemata.gls schemata.glo
+makeindex -q -s gind.ist -o schemata.ind schemata.idx
+pdflatex --recorder --interaction=nonstopmode schemata.dtx
+pdflatex --recorder --interaction=nonstopmode schemata.dtx
+
+Normally you create the following manual installation directories for user:
+
+$TEXMFHOME/source/generic/schemata dtx file
+$TEXMFHOME/tex/generic/schemata sty file
+$TEXMFHOME/doc/generic/schemata pdf file
+
+and you create the following manual installation directories for local site:
+
+$TEXMFLOCAL/source/generic/schemata dtx file
+$TEXMFLOCAL/tex/generic/schemata sty file
+$TEXMFLOCAL/doc/generic/schemata pdf file
+
+The above environment variables often are /usr/local/texlive/texmf-local for
+$TEXMFLOCAL and ~/texmf for $TEXMFHOME.
+
+Run mktexlsr with the appropriate level of permissions to complete the install.
+
+This packages works with LaTeX and plain TeX.
+
+License
+
+This material is subject to the LaTeX Project Public License:
+http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+
+Happy TeXing!
diff --git a/macros/generic/schemata/schemata.dtx b/macros/generic/schemata/schemata.dtx
new file mode 100644
index 0000000000..ed5e80042c
--- /dev/null
+++ b/macros/generic/schemata/schemata.dtx
@@ -0,0 +1,1968 @@
+% \iffalse meta-comment
+% vim: textwidth=75
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+|
+--------:| ----------------------------------------------------------------
+schemata:| Generic package to aid construction of topical categories
+ Author:| Charles P. Schaum
+ E-mail:| charles dot schaum at comcast dot net
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+
+Short description:
+The schemata package helps the creation of topical outlines that illustrate the breakdown of concepts and categories in academic texts from the late medieval to early modern periods.
+
+Files Distribution
+
+README This file
+schemata.pdf Documentation
+
+Makefile Automates building with GNU make 3.81
+schemata.dtx Documented LaTeX file containing both code and documentation
+
+Installation
+
+Unpack schemata-XX.zip in an appropriate directory.
+
+Note that the instructions below assume that you are using a *nix-
+compatible computer. If that is otherwise, you will need to modify
+these instructions to your needs.
+
+If you have a make utility compatible with GNU make you can type
+
+ make inst
+
+to install the package into your $TEXMFHOME tree or
+
+ make install
+
+to install the package into your $TEXMFLOCAL tree for all users.
+
+Manually, you can generate the package files. First you generate the
+installer driver, README, and style files, with a preliminary PDF:
+
+ pdflatex -shell-escape -recorder -interaction=batchmode schemata.dtx
+
+Next you generate the PDF with a table of contents and all cross-references
+validated, so that the index entries will not move:
+
+ pdflatex --recorder --interaction=nonstopmode schemata.dtx
+
+The next commands generate the glossary/index and final pdf file
+
+ makeindex -q -s gglo.ist -o schemata.gls schemata.glo
+ makeindex -q -s gind.ist -o schemata.ind schemata.idx
+ pdflatex --recorder --interaction=nonstopmode schemata.dtx
+ pdflatex --recorder --interaction=nonstopmode schemata.dtx
+
+Normally you create the following manual installation directories for user:
+
+ $TEXMFHOME/source/generic/schemata dtx file
+ $TEXMFHOME/tex/generic/schemata sty file
+ $TEXMFHOME/doc/generic/schemata pdf file
+
+and you create the following manual installation directories for local site:
+
+ $TEXMFLOCAL/source/generic/schemata dtx file
+ $TEXMFLOCAL/tex/generic/schemata sty file
+ $TEXMFLOCAL/doc/generic/schemata pdf file
+
+The above environment variables often are /usr/local/texlive/texmf-local for
+$TEXMFLOCAL and ~/texmf for $TEXMFHOME.
+
+Run mktexlsr with the appropriate level of permissions to complete the install.
+
+This packages works with LaTeX and plain TeX.
+
+License
+
+This material is subject to the LaTeX Project Public License:
+http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+
+Happy TeXing!
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+--------:| ----------------------------------------------------------------
+schemata:| Generic package to aid construction of topical categories
+ Author:| Charles P. Schaum
+ E-mail:| charles dot schaum at comcast dot net
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+\endpreamble
+\postamble
+
+Copyright (C) 2016 by Charles P. Schaum <charles dot schaum at comcast dot net>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Charles P. Schaum.
+
+This work consists of the file schemata.dtx and a Makefile.
+Running "make" generates the derived files README, schemata.pdf and schemata.sty.
+Running "make inst" installs the files in the user's TeX tree.
+Running "make install" installs the files in the local TeX tree.
+
+\endpostamble
+
+\usedir{tex/generic/schemata}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/generic/schemata}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/generic/schemata}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{schemata.dtx}
+%</driver>
+%<package>\expandafter\ifx\csname newenvironment\endcsname\relax\else
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{schemata}
+%<*package>
+ [2016/01/25 v0.8 generic package to aid construction of topical categories]
+%<package>\fi
+%<*package>
+%</package>
+%<*driver>
+\documentclass[11pt]{ltxdoc}
+\usepackage[textwidth=140mm,textheight=237mm,right=25mm,nohead]{geometry}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{listingsutf8}
+\usepackage[polutonikogreek,american]{babel}
+\newcommand{\gk}[1]{\foreignlanguage{polutonikogreek}{#1}}
+\usepackage{mflogo}
+\usepackage{multicol}
+\usepackage[toc]{multitoc}
+\usepackage[numbered]{hypdoc}
+\usepackage{\jobname}
+\lstset{
+ basicstyle=\ttfamily\small,
+ gobble=2,
+ numbers=left,
+ stepnumber=1,
+ firstnumber=1,
+ numberfirstline=true
+}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{769}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.5}{2013/02/14}{Initial version}
+% \changes{v0.6}{2013/03/10}{Added features}
+% \changes{v0.7}{2013/09/23}{Changed contact info}
+% \changes{v0.8}{2016/01/25}{Rewrote manual; moved to dtxgen}
+%
+% \GetFileInfo{\jobname.dtx}
+% \DoNotIndex{\bgroup, \csname, \DeclareOption, \def, \dimen, \egroup, \else, \endcsname, \endinput, \ExecuteOptions, \expandafter, \fi, \futurelet, \gdef, \hbox, \hfil, \if, \ifcsname, \ifdim, \ifmmode, \ifx, \ignorespaces, \index, \let, \newbox, \newcommand, \newdimen, \newif, \next, \PackageWarning, \ProcessOptions, \relax, \RequirePackage, \setbox, \space, \testchar, \vbox, \vcenter, \vfil, \vskip}
+%
+%\title{\textsf{schemata} --- Generic package to aid construction of topical categories\thanks{This file
+% describes version \fileversion, last revised \filedate.}
+%}
+%\author{Charles P. Schaum\thanks{E-mail: charles dot schaum at comcast dot net}}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+% \begin{abstract}
+% \noindent The \textsf{schemata} package helps the creation of topical outlines that illustrate the breakdown of concepts and categories in academic texts from the late medieval to early modern periods.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% This package emerged from my personal need to typeset diagrams based on seventeenth-century theology books. I chose a ``bare-bones'' approach to make it platform-agnostic and simple to implement.
+%
+% I would recommend that a package like \emph{TikZ}, \textsf{PSTricks}, \MP, or some other powerful solution may have advantages over this one, especially for those seeking a top-to-bottom diagram, such as that in: \textsc{H.~Dembowski}, \emph{Einf{\"u}hrung in die Christologie} (Darmstadt, 1993), 146.
+%
+% Nevertheless, many packages do not handle both open \emph{and} closed braces in a schema without a great amount of manual setup. This package uses math mode to do that, somewhat mimicking how a letterpress typesetter might design schemata for the works of Petrus Ramus, the \emph{Loci Theologici} of Martin Chemnitz, the \emph{Clavis Scripturae Sacrae} of Matthias Flacius Illyricus, and many others.
+% \clearpage
+%
+% \section{Usage}
+%
+% \subsection{Package Options and Loading}
+%
+% This package basically is a ``wrapper'' that takes some of the work out of using \TeX{} math mode to create \emph{schemata} (plural of \gk{t'o sq~hma} or \emph{schema}, meaning \emph{form, shape, appearance, bearing, manner, fashion,} and so on). Such diagrams were used quite frequently to break down a main concept into its component parts and demonstrate the relationship among various components.\\
+%
+% The \textsf{schemata} package can be used with plain \TeX{} and \LaTeX:
+% \begin{quote}
+% \begin{tabular}{ll}
+% Users of \LaTeX{} invoke: & |\usepackage[|\meta{options}|]{schemata}|\\[1ex]
+% Plain \TeX{} users will use: & |\input|\textvisiblespace|schemata.sty|
+% \end{tabular}
+% \end{quote}
+%
+% \subsection{Macro Overview}
+%
+% \DescribeMacro{\DoBraces}
+% \DescribeMacro{\DoBrackets}
+% \DescribeMacro{\DoParens}
+% \LaTeX{} users can choose among three global package options: |braces|, |brackets|, and |parens|. These set the defaults for the ``braces.'' If no options are chosen, the default is |braces|. Plain \TeX{} users get the same results by using \cmd{\DoBraces}, \cmd{\DoBrackets}, and \cmd{\DoParens}. These macros have the same effect as the package options. The default still remains braces, shown by the three examples below:
+% \begin{displaymath}
+% \schema{\schemabox{a}}{\schemabox{b}}\qquad \schema{\schemabox{a}}{\schemabox{b\\c}}\qquad \Schema{0ex}{2.3ex}{\schemabox{a}}{\Schema[close]{0ex}{2.4ex}{\schemabox{b\\c}}{\schemabox{d}}}
+% \end{displaymath}
+% The next three examples use \cmd{\DoBrackets} to get brackets instead:
+% \begin{displaymath}
+% \DoBrackets\schema{\schemabox{a}}{\schemabox{b}}\qquad \schema{\schemabox{a}}{\schemabox{b\\c}}\qquad \Schema{0ex}{2.4ex}{\schemabox{a}}{\Schema[close]{0ex}{2.3ex}{\schemabox{b\\c}}{\schemabox{d}}}
+% \end{displaymath}
+% The next three three use \cmd{\DoParens}:
+% \begin{displaymath}
+% \DoParens\schema{\schemabox{a}}{\schemabox{b}}\qquad \schema{\schemabox{a}}{\schemabox{b\\c}}\qquad \Schema{0ex}{2.4ex}{\schemabox{a}}{\Schema[close]{0ex}{2.3ex}{\schemabox{b\\c}}{\schemabox{d}}}
+% \end{displaymath}
+% All three macros should precede \cmd{\schema} and \cmd{\Schema} within a particular scope, and they remain in force within that scope unless changed. Additionally, \cmd{\DoBraces}, \cmd{\DoBrackets}, and \cmd{\DoParens} can change the style of ``brace'' within a schema. See Section~\ref{sec:multiple}, as well as the trivial example below:
+% \begin{displaymath}
+% \Schema{0ex}{2.4ex}
+% {\schemabox{a}}
+% {\DoParens\Schema[close]{0ex}{2.3ex}
+% {\schemabox{b\\c}}
+% {\schemabox{d}}
+% }
+% \end{displaymath}
+% \begin{lstlisting}
+% \Schema{0ex}{2.4ex}
+% {\schemabox{a}}
+% {\DoParens\Schema[close]{0ex}{2.3ex}
+% {\schemabox{b\\c}}
+% {\schemabox{d}}
+% }
+% \end{lstlisting}
+% \clearpage
+%
+% \DescribeMacro{\schema}
+% A ``simple'' schema has a left-hand side with vertically-centered vertical material, a brace, and a right-hand side with vertically-centered vertical material:
+% \begin{quote}
+% \cmd{\schema}\oarg{type}\marg{left-hand side}\marg{right-hand side}
+% \end{quote}
+% The \meta{left-hand side} and \meta{right-hand side} are vertical material in order to allow a \cmd{\smallskip} or other vertical adjustment as needed.\medskip
+%
+% The \meta{type} of a schema is |open| (to the right) by default: \schema{\SwitchSB\schemabox{a}}{\SwitchSB\schemabox{b\\c}}\medskip
+%
+% Any value of \meta{type} other than |open| makes a ``closed'' schema: \schema[r]{\NudgeSB\SwitchSB\schemabox{b\\c}}{\SwitchSB\schemabox{a}}\medskip
+%
+% In practice, \cmd{\schema} does not nest, so it is only useful for the right-hand ``leaves'' of a large schema. That makes formatting the ``leaves'' faster. Thus the \cmd{\schema} macro is used only in the framed boxes below:\\
+%
+% \leavevmode\hfill\parbox{0.15\textwidth}%
+% {%
+% \Schema{-1ex}{4.2ex}
+% {
+% \schemabox{\dots a}
+% }
+% {
+% \vbox{\noindent%
+% \fbox{\schema{\schemabox{b}}{\SwitchSB\schemabox{c\\d}}}\\[1ex]
+% \fbox{\schema{\schemabox{e}}{\schemabox{f\\g}}
+% }
+% }
+% }
+% }\hfill%
+% \parbox{0.6\textwidth}{Observe how the automatic sizing of \cmd{\schema} changes, depending on the height, depth, and even context of the letters. Avoid \cmd{\schema} if you need multiple copies of an example to look exactly alike. Section~\ref{sec:tweakschema} gives more details on tweaking \cmd{\schema} as needed.}\\\bigskip
+%
+% \DescribeMacro{\Schema}
+% The ``complex'' form of a schema also has a left-hand side with vertically-centered vertical material, a brace, and a right-hand side of vertically-centered vertical material, along with two arguments that adjust the brace:
+% \begin{quote}
+% \cmd{\Schema}\oarg{type}\marg{adjust}\marg{size}\marg{left-hand side}\marg{right-hand side}
+% \end{quote}
+%The \meta{type} is |open| by default. As above, any other \meta{type} except the exact string |open| will make it a ``closed'' schema.
+%
+%Both \meta{adjust} and \meta{size} are dimensions that are expressed best with the unit ``ex.'' This allows for easier scaling of the schema.
+%
+% Set \meta{adjust} to move the brace up (negative value) or down (positive value). Set \meta{size} to be a number of ex nearly equal to the number of lines that the brace should span. The value of \meta{size} is converted into an absolute value.
+%
+% Using \cmd{\Schema} allows one to adjust the brace height and centering manually. This is the only way to work around the way that \cmd{\schema} automatically adjusts for the height of everything on the open side of a brace. This is also the only way to get multiple examples of the same schema or similar schemata to look similar.
+%
+% Admittedly, this method is nothing short of ugly. Perhaps its only redeeming feature is that you can count lines of text to get a rough estimate of adjustments. Yet source texts from the seventeenth century often present schemata that can evade an easy, automatic solution, \emph{e.g.}:
+%
+% \begin{displaymath}
+% \Schema[close]{0ex}{5.1ex}
+% {
+% \Schema{0.1ex}{3.8ex}
+% {
+% \SwitchSB\schemabox{main idea}%
+% }
+% {
+% \schema{\schemabox{part}}{\SwitchSB\NudgeSB\schemabox{detail\\detail}}\smallskip
+% \schema{\schemabox{part}}{\SwitchSB\NudgeSB\schemabox{detail\\detail}}
+% }
+% }
+% {
+% \Schema{0ex}{3.8ex}
+% {
+% \schemabox{synonym}%
+% }
+% {
+% \schema{\schemabox{part}}{\SwitchSB\schemabox{detail\\detail}}\smallskip
+% \schema{\schemabox{part}}{\SwitchSB\schemabox{detail\\detail}}
+% }
+% }
+% \end{displaymath}
+% \clearpage
+%
+% \DescribeMacro{\schemabox}
+% When in a \cmd{\schema} or a \cmd{\Schema}, this box stacks one or more lines of \cmd{\hbox}-enclosed material in a \cmd{\vbox.} It redefines the control sequence |\\| in a manner that terminates the current \cmd{\hbox} and begins a new one, with some options that can be modified (Section~\ref{sec:tweakschema}). Its syntax is:
+% \begin{quote}
+% \cmd{\schemabox}\oarg{width}\marg{text}
+% \end{quote}
+% The \meta{width} of a \cmd{\schemabox} is a dimension, \emph{e.g.}, 3cm. No wrapping (as in a \cmd{\parbox}) takes place. If there are more than one line of text, each line of \meta{text} must be terminated explicitly by |\\|, except the final line. Usually, the first line of a \cmd{\schemabox} inserts a \cmd{\strut} for aesthetic reasons.
+%
+% When \cmd{\schemabox} occurs apart from internal vertical mode, it ignores \meta{width} and merely reproduces \meta{text}. With |\schemabox{blah}| you just get ``\schemabox{blah}.''\\
+%
+% Certainly, one need not use a \cmd{\schemabox}, for example:\\
+% \begin{lstlisting}
+% \def\Box{%
+% \hbox{%
+% \vrule%
+% \vbox to 1cm{\hrule\hbox to 1cm{\hfil}\vfil\hrule}%
+% \vrule%
+% }%
+% }
+% \end{lstlisting}%
+% \def\Box{\hbox{\vrule\vbox to 1cm{\hrule\hbox to 1cm{\hfil}\vfil\hrule}\vrule}}
+% \begin{multicols}{2}[\columnsep=30pt]
+% \hbox{}\bigskip
+% \begin{lstlisting}[firstnumber=8]
+% \schema{\Box}{\Box}
+% \end{lstlisting}
+% \hbox{}\bigskip\bigskip
+% \begin{lstlisting}[firstnumber=9]
+% \schema{\Box}{\Box\Box}
+% \end{lstlisting}
+% \hbox{}\vfil
+% \begin{lstlisting}[firstnumber=10]
+% \Schema{-0.2ex}{0.9cm}
+% {\Box}
+% {
+% \Schema[close]{-0.2ex}{0.9cm}
+% {\Box\hbox{\Box\kern0.2em}}
+% {\Box}
+% }
+% \end{lstlisting}
+% \hbox{}
+% \columnbreak
+% \hbox{}
+% \schema{\Box}{\Box}
+% \hbox{}
+%
+% \schema{\Box}{\Box\Box}
+% \hbox{}
+%
+% \Schema{-0.2ex}{0.9cm}
+% {\Box}
+% {
+% \Schema[close]{-0.2ex}{0.9cm}
+% {\Box\hbox{\Box\kern0.2em}}
+% {\Box}
+% }
+% \end{multicols}
+% Both \cmd{\schema} and \cmd{\Schema} are vertical, so they will stack vertically if invoked sequentially outside of a tabular environment, display math, and so on, that can be used to display schemata horizontally.
+%
+% If one does not use ``ex'' height for \meta{size} in a \cmd{\Schema}, one should specify a \meta{size} slightly less than half the height of the contents. Above, a \meta{size} of 0.9cm suffices for a content of 2cm. Using ``ex'' height is meant to simplify sizing content according to lines of text.
+%
+% A kern of 0.2em was added in the final snippet above to offset an automatic kern of -0.2em added between the left-hand material and the brace in a closed schema. More on that is given under \cmd{\NudgeSB} in the next section.
+% \clearpage
+%
+% \subsection{Romancing the \texttt{\textbackslash schema}}
+% \label{sec:tweakschema}
+%
+% \DescribeMacro{\LCschema}
+% \DescribeMacro{\UCschema}
+% By default, a \cmd{\schemabox} adds a \cmd{\strut} to the first line because it is often the case that the topics in a schema start in some fashion with a capital letter. To have braces in a \cmd{\schema} that are big enough, you need that \cmd{\strut.}
+%
+%If the first letter is not a capital or if the text seems a little off-center, you can turn off this default feature of \cmd{\schemabox} by placing \cmd{\LCschema} immediately before it. \cmd{\LCschema} will prevent all subsequent uses of \cmd{\schemabox} from adding \cmd{\strut} until you restore the default behavior with \cmd{\UCschema}, also best placed before the intended \cmd{\schemabox}.
+%
+% Here is an example where an entire schema is in lowercase, so instead of placing \cmd{\LCschema} and \cmd{\UCschema} before a particular \cmd{\schemabox}, we put the two macros before and after the \cmd{\Schema}:
+%
+% \begin{lstlisting}
+% \LCschema%
+% \Schema{0.1ex}{4.8ex}
+% {\hbox{sensus literalis}}
+% {
+% \schema{\schemabox{sensus\\literalis\\(improprie)}}
+% {\schemabox{ex parallelismo clarior\\
+% ex analogia fidei\\ex evidentia rei}}
+% \smallskip\schemabox{sensus literae}
+% }
+% \UCschema%
+% \end{lstlisting}
+%
+% \noindent The foregoing example produces the following:
+% \begin{displaymath}
+% \LCschema%
+% \Schema{0.1ex}{4.8ex}
+% {\hbox{sensus literalis}}
+% {
+% \schema{\schemabox{sensus\\literalis\\(improprie)}}
+% {\schemabox{ex parallelismo clarior\\
+% ex analogia fidei\\ex evidentia rei}}
+% \smallskip\schemabox{sensus literae}
+% }
+% \UCschema%
+% \end{displaymath}
+%
+% \DescribeMacro{\SwitchSB} The macro \cmd{\SwitchSB} causes a particular \cmd{\schemabox} to do the opposite of whatever \cmd{\LCschema} and \cmd{\UCschema} call for. It should be placed immediately before the \cmd{\schemabox} to be affected and its effect is reset thereafter.
+%
+% Note, however, that mixing lowercase and uppercase-styles of \cmd{\schemabox} may put parts of a schema slightly off-center, meaning that one must \meta{adjust} a \cmd{\Schema} by a tenth of an ex, give or take.
+%
+% Also remember that you can add \cmd{\strut} as needed to make manual adjustments.\\
+%
+% \DescribeMacro{\NudgeSB} The macro \cmd{\NudgeSB} is another ``per-use'' macro that causes a particular \cmd{\schemabox} to add a 0.2em kern at the end of every line of text. This is meant to be used especially with left-hand-side material in a closed \cmd{\schema} or \cmd{\Schema} because they use a -0.2em kern to draw the braces closer to the box. That is because many lines of text in schemata terminate with punctuation. The negative kern is a default way to prevent too much white space.
+%
+% When no punctuation is there and more white space is desired, \cmd{\NudgeSB} gets the text to be the same distance from the brace as the right-hand-side material. \cmd{\NudgeSB} should be placed immediately before the \cmd{\schemabox} to be affected and, like \cmd{\SwitchSB}, it is reset thereafter.
+%
+% \subsection{Tutorial}
+%
+% \subsubsection{Starting Off Basic}
+%
+% So you want to typeset a seventeenth-century schema. You try the following:
+% \begin{multicols}{2}
+% \begin{lstlisting}
+% \schema{a}{b\\c}
+% \end{lstlisting}
+% \parbox{0.8\columnwidth}{\schema{a}{b\\c}}
+% \end{multicols}
+% \noindent That went badly. Then you remember that schemata hold internal vertical material and need something to organize the horizontal text in such a list. This weird \cmd{\schemabox} thing should do:
+% \begin{multicols}{2}
+% \begin{lstlisting}
+% \schema
+% {\schemabox{a}}
+% {\schemabox{b\\c}}
+% \end{lstlisting}
+% \schema
+% {\schemabox{a}}
+% {\schemabox{b\\c}}
+% \end{multicols}
+%
+% \noindent Now we are getting somewhere! The ``big'' side of the schema really should be more than one line high. Otherwise just use inline math mode or text.
+%
+% \subsubsection{\emph{Loci} 101}
+%
+% Let's try a few examples from \emph{Loci Theologici}. We begin with this example, using only the \cmd{\schema} macro:
+%
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \schema
+% {
+% \schemabox{Subjectum theo-\\
+% logi\ae{} est Notitia\\
+% Dei. Considerat\\
+% ergo, Dei, vel}
+% }
+% {
+% \schema
+% {
+% \schemabox{\textsc{Essentiam},}
+% }
+% {
+% \schemabox{Unitate natur\ae{}.\\
+% Trinitate personarum.\\
+% Operibus ad intra.}
+% }
+% \schema
+% {
+% \schemabox{\textsc{Voluntatem},\\
+% manifestatam in\\
+% operibus ad extra;\\
+% ut in}
+% }
+% {
+% \schemabox{Creatione.\\
+% Sustentatione natur\ae{} laps\ae{}.\\
+% Reparatione.\\
+% Conversione.\\
+% Justificatione.\\
+% Sanctificatione \&\\
+% Glorificatione ejusdem.}
+% }
+% }
+% \end{lstlisting}
+%
+% \begin{displaymath}
+% \schema
+% {
+% \schemabox{Subjectum theo-\\
+% logi\ae{} est Notitia\\
+% Dei. Considerat\\
+% ergo, Dei, vel}
+% }
+% {
+% \schema
+% {
+% \schemabox{\textsc{Essentiam},}
+% }
+% {
+% \schemabox{Unitate natur\ae{}.\\
+% Trinitate personarum.\\
+% Operibus ad intra.}
+% }
+% \schema
+% {
+% \schemabox{\textsc{Voluntatem},\\
+% manifestatam in\\
+% operibus ad extra;\\
+% ut in}
+% }
+% {
+% \schemabox{Creatione.\\
+% Sustentatione natur\ae{} laps\ae{}.\\
+% Reparatione.\\
+% Conversione.\\
+% Justificatione.\\
+% Sanctificatione \&\\
+% Glorificatione ejusdem.}
+% }
+% }
+% \end{displaymath}
+% Something is off here. The ``simple'' schema automatically adjusts the brace height to the right-hand side. But that includes the \emph{entire} right-hand side. Moreover, \cmd{\schema} will produce cumulatively larger braces when nesting.
+%
+% We have two ``leaves'' on the right-hand side, so we only have one \cmd{\schema} to change into a \cmd{\Schema}. We also add a \cmd{\smallskip} to separate the ``leaves.'' We change the following two lines above:
+%
+% \begin{lstlisting}
+% \Schema{-1ex}{8.7ex}
+% \end{lstlisting}
+%
+% \begin{lstlisting}[firstnumber=17]
+% }\smallskip
+% \end{lstlisting}
+% \begin{displaymath}
+% \Schema{-1ex}{8.7ex}
+% {
+% \schemabox{Subjectum theo-\\
+% logi\ae{} est Notitia\\
+% Dei. Considerat\\
+% ergo, Dei, vel}
+% }
+% {
+% \schema
+% {
+% \schemabox{\textsc{Essentiam},}
+% }
+% {
+% \schemabox{Unitate natur\ae{}.\\
+% Trinitate personarum.\\
+% Operibus ad intra.}
+% }\smallskip
+% \schema
+% {
+% \schemabox{\textsc{Voluntatem},\\
+% manifestatam in\\
+% operibus ad extra;\\
+% ut in}
+% }
+% {
+% \schemabox{Creatione.\\
+% Sustentatione natur\ae{} %
+% laps\ae{}.\\
+% Reparatione.\\
+% Conversione.\\
+% Justificatione.\\
+% Sanctificatione \&\\
+% Glorificatione ejusdem.}
+% }
+% }
+%\end{displaymath}
+%
+% Now that looks better! We added a \cmd{\smallskip} at the end of the right-hand side material of a \cmd{\schema} to space out the ``leaves.'' That usually is the best practice in spacing out elements. You cannot put \cmd{\smallskip} and the like into a \cmd{\schemabox} in plain \TeX, and usually you want to avoid doing so in the first or last lines of a \cmd{\schemabox} in \LaTeX{} to aid proper centering.
+%
+% Always work from right to left when adjusting the spacing of a schema. Start from the ``leaves'' and work to the ``root.''
+%
+% The \cmd{\Schema} macro requires manual brace adjustment and sizing. Count the lines of text, estimate, then revise. Here we have between eight and nine lines of text from ``\textsc{Essentiam}'' down to ``ut in.'' First set the \meta{size} to |8.5ex| and \meta{adjust} to |0ex|. The large brace will be a little too low. Set \meta{adjust} to |-1ex| to raise the brace about half a line and to lower the left-hand side about half a line, keeping everything centered. Finally, set \meta{size} to |8.7ex| or to taste.
+%
+% \textbf{Changes in \TeX{} distributions can change font metrics and thus, the metrics of your schemata.}
+% \clearpage
+%
+% \subsubsection{Going Big}
+%
+% We begin with the following example, where the \cmd{\Schema} braces all have dummy values of |0ex| \meta{adjust} and |5ex| \meta{size}. Please do not be alarmed at how bad this looks right now!
+%
+% \begin{displaymath}\bgroup\footnotesize%
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{Subjectum \& summa\\
+% univers\ae{} Scriptur\ae{},\\
+% est \textsc{Cognitio} vel}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{\textsc{Dei}, qualis \\ sit, aut}
+% }
+% {
+% \schema
+% {\schemabox{\textsc{Per se}:\\ scilicet.}}
+% {
+% \schemabox{Unus in essentia.}
+% \schemabox{Trinus in personis.}
+% }
+% \schema
+% {\schemabox{Ad hominem\\ quem vel}}
+% {
+% \schemabox{Accusat \& terret, \textsc{Per Legem},\\
+% Consolatur \& erigit, \textsc{Per Evangelium}.\\
+% Salvat, \textsc{Per Christum}.\\
+% Renovat, \textsc{Per Spiritum Sanctum}.\\
+% Sanctificat, \textsc{Per Verbum} \& \textsc{Sacramenta}.\\
+% Castigat, tentat \& exercet, \textsc{Per Crucem}.\\
+% Glorificat \textsc{Per Resurrectionem Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }
+% }
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{\textsc{Hominis},\\ qualis sit}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {\schemabox{\textsc{Per se}:}}
+% {
+% \schemabox{Ante lapsum.}
+% \schema
+% {\schemabox{Post lapsum:}}
+% {
+% \schemabox{Ante Regenerationem \&\\
+% Renovationem S. Sancti.}
+% \schemabox{Post Regenerationem \&\\
+% Renovationem S. Sancti.}
+% }
+% }
+% \Schema{0ex}{5ex}
+% {\schemabox{Ad}}
+% {
+% \schema
+% {\schemabox{\textsc{Deum}}}
+% {
+% \schemabox{P\oe{}nitentia agens, agnitis peccatis \&\\
+% ira Dei cognita \textsc{Ex Lege}.\\
+% Erigens se \textsc{Voce Evangelii}.\\
+% Credens \textsc{In Christum Salvatorem}.\\
+% Non repugnans \textsc{Spiritui Sancto} impellenti.\\
+% Audiens \textsc{Verbum}: \& utens \textsc{Sacramentis}.\\
+% Patienter \& constanter sufferens \textsc{Crucem}.\\
+% Sperans \& expectans glorificationem\\
+% \textsc{In Resurrectione Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }
+% \schema
+% {\schemabox{seipsum ratione}}
+% {\schemabox{Anim\ae{}\\ vel\\ Corporis}}
+% \Schema{0ex}{5ex}
+% {\schemabox{Proximum,}}
+% {
+% \schema
+% {\schemabox{Amicum ra-\\ tione vel}}
+% {
+% \schemabox{Religionis.\\
+% Politic\ae{} \& \OE{}conomic\ae{}.\\
+% Cognationis.\\
+% Agnationis.}
+% }
+% \schemabox{Inimicum.}
+% }
+% }
+% }
+% }\egroup%
+%\end{displaymath}
+% Below we have the code listing for the schema above, wherein you can get the idea of how the example correlates with the source. The code listing breaks at sensible places across pages:\\
+%
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{Subjectum \& summa\\
+% univers\ae{} Scriptur\ae{},\\
+% est \textsc{Cognitio} vel}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{\textsc{Dei}, qualis \\ sit, aut}
+% }
+% \end{lstlisting}
+% \clearpage
+% \begin{lstlisting}[firstnumber=12,basicstyle=\ttfamily\footnotesize]
+% {
+% \schema
+% {\schemabox{\textsc{Per se}:\\ scilicet.}}
+% {
+% \schemabox{Unus in essentia.}
+% \schemabox{Trinus in personis.}
+% }
+% \schema
+% {\schemabox{Ad hominem\\ quem vel}}
+% {
+% \schemabox{Accusat \& terret, \textsc{Per Legem},\\
+% Consolatur \& erigit, \textsc{Per Evangelium}.\\
+% Salvat, \textsc{Per Christum}.\\
+% Renovat, \textsc{Per Spiritum Sanctum}.\\
+% Sanctificat, \textsc{Per Verbum} \& \textsc{Sacramenta}.\\
+% Castigat, tentat \& exercet, \textsc{Per Crucem}.\\
+% Glorificat \textsc{Per Resurrectionem Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }
+% }
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{\textsc{Hominis},\\ qualis sit}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {\schemabox{\textsc{Per se}:}}
+% {
+% \schemabox{Ante lapsum.}
+% \schema
+% {\schemabox{Post lapsum:}}
+% {
+% \schemabox{Ante Regenerationem \&\\
+% Renovationem S. Sancti.}
+% \schemabox{Post Regenerationem \&\\
+% Renovationem S. Sancti.}
+% }
+% }
+% \Schema{0ex}{5ex}
+% {\schemabox{Ad}}
+% {
+% \schema
+% {\schemabox{\textsc{Deum}}}
+% {
+% \schemabox{P\oe{}nitentia agens, agnitis peccatis \&\\
+% ira Dei cognita \textsc{Ex Lege}.\\
+% Erigens se \textsc{Voce Evangelii}.\\
+% Credens \textsc{In Christum Salvatorem}.\\
+% Non repugnans \textsc{Spiritui Sancto} impellenti.\\
+% Audiens \textsc{Verbum}: \& utens \textsc{Sacramentis}.\\
+% Patienter \& constanter sufferens \textsc{Crucem}.\\
+% Sperans \& expectans glorificationem\\
+% \textsc{In Resurrectione Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }
+% \end{lstlisting}
+% \clearpage
+% \begin{lstlisting}[firstnumber=67,basicstyle=\ttfamily\footnotesize]
+% \schema
+% {\schemabox{seipsum ratione}}
+% {\schemabox{Anim\ae{}\\ vel\\ Corporis}}
+% \Schema{0ex}{5ex}
+% {\schemabox{Proximum,}}
+% {
+% \schema
+% {\schemabox{Amicum ra-\\ tione vel}}
+% {
+% \schemabox{Religionis.\\
+% Politic\ae{} \& \OE{}conomic\ae{}.\\
+% Cognationis.\\
+% Agnationis.}
+% }
+% \schemabox{Inimicum.}
+% }
+% }
+% }
+% }
+% \end{lstlisting}
+%
+% First, we add space between the ``leaves'' of the tree. If you do not work from right to left, you will waste time revising the ``leaves'' and ``branches.''
+%
+% \begin{displaymath}\bgroup\footnotesize%
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{Subjectum \& summa\\
+% univers\ae{} Scriptur\ae{},\\
+% est \textsc{Cognitio} vel}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{\textsc{Dei}, qualis \\ sit, aut}
+% }
+% {
+% \schema
+% {\schemabox{\textsc{Per se}:\\ scilicet.}}
+% {
+% \schemabox{Unus in essentia.}\smallskip
+% \schemabox{Trinus in personis.}
+% }\smallskip
+% \schema
+% {\schemabox{Ad hominem\\ quem vel}}
+% {
+% \schemabox{Accusat \& terret, \textsc{Per Legem},\\
+% Consolatur \& erigit, \textsc{Per Evangelium}.\\
+% Salvat, \textsc{Per Christum}.\\
+% Renovat, \textsc{Per Spiritum Sanctum}.\\
+% Sanctificat, \textsc{Per Verbum} \& \textsc{Sacramenta}.\\
+% Castigat, tentat \& exercet, \textsc{Per Crucem}.\\
+% Glorificat \textsc{Per Resurrectionem Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\medskip
+% }
+% \Schema{0ex}{5ex}
+% {
+% \schemabox{\textsc{Hominis},\\ qualis sit}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {\schemabox{\textsc{Per se}:}}
+% {
+% \schemabox{Ante lapsum.}\smallskip
+% \schema
+% {\schemabox{Post lapsum:}}
+% {
+% \schemabox{Ante Regenerationem \&\\
+% Renovationem S. Sancti.}\medskip
+% \schemabox{Post Regenerationem \&\\
+% Renovationem S. Sancti.}\smallskip
+% }\smallskip
+% }
+% \Schema{0ex}{5ex}
+% {\schemabox{Ad}}
+% {
+% \schema
+% {\schemabox{\textsc{Deum}}}
+% {
+% \schemabox{P\oe{}nitentia agens, agnitis peccatis \&\\
+% ira Dei cognita \textsc{Ex Lege}.\\
+% Erigens se \textsc{Voce Evangelii}.\\
+% Credens \textsc{In Christum Salvatorem}.\\
+% Non repugnans \textsc{Spiritui Sancto} impellenti.\\
+% Audiens \textsc{Verbum}: \& utens \textsc{Sacramentis}.\\
+% Patienter \& constanter sufferens \textsc{Crucem}.\\
+% Sperans \& expectans glorificationem\\
+% \textsc{In Resurrectione Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\smallskip
+% \schema
+% {\schemabox{seipsum ratione}}
+% {\schemabox{Anim\ae{}\\ vel\\ Corporis}}\smallskip
+% \Schema{0ex}{5ex}
+% {\schemabox{Proximum,}}
+% {
+% \schema
+% {\schemabox{Amicum ra-\\ tione vel}}
+% {
+% \schemabox{Religionis.\\
+% Politic\ae{} \& \OE{}conomic\ae{}.\\
+% Cognationis.\\
+% Agnationis.}
+% }\smallskip
+% \schemabox{Inimicum.}
+% }
+% }
+% }
+% }\egroup%
+%\end{displaymath}
+%\noindent The following lines, shown with some surrounding context, were changed as a result of adding spaces:
+%
+% \begin{lstlisting}[firstnumber=15,basicstyle=\ttfamily\footnotesize]
+% {
+% \schemabox{Unus in essentia.}\smallskip
+% \schemabox{Trinus in personis.}
+% }\smallskip
+% \end{lstlisting}
+% You can add a \cmd{\smallskip} within a \cmd{\schemabox} in \LaTeX{}, but not in plain \TeX. We have split the text into two boxes to make it format-agnostic. See also how the second \cmd{\smallskip} follows the closing brace of the right-hand side, not the \cmd{\schemabox.}
+% \begin{lstlisting}[firstnumber=29,basicstyle=\ttfamily\footnotesize]
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\medskip
+% \end{lstlisting}
+% Again, the skip comes at the close of a right-hand side.
+% \begin{lstlisting}[firstnumber=39,basicstyle=\ttfamily\footnotesize]
+% {
+% \schemabox{Ante lapsum.}\smallskip
+% \schema
+% {\schemabox{Post lapsum:}}
+% {
+% \schemabox{Ante Regenerationem \&\\
+% Renovationem S. Sancti.}\medskip
+% \schemabox{Post Regenerationem \&\\
+% Renovationem S. Sancti.}\smallskip
+% }\smallskip
+% }
+% \end{lstlisting}
+% In the snippet above, the first skip helps to separate the lone \cmd{\schemabox} from the \cmd{\schema} below it. This illustrates how the internal vertical lists of schemata can contain heterogeneous material. A medium skip is placed between two \cmd{\schemabox}es, which slightly throws off the way the brace spans the boxes. A small skip is put at the end of the last \cmd{\schemabox} to correct that, illustrating that putting skips within a \cmd{\schema} can be tricky. Then a \cmd{\smallskip} is added again at the end of the right-hand side. The skips below generally follow the same pattern.
+% \begin{lstlisting}[firstnumber=65,basicstyle=\ttfamily\footnotesize]
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\smallskip
+% \schema
+% {\schemabox{seipsum ratione}}
+% {\schemabox{Anim\ae{}\\ vel\\ Corporis}}\smallskip
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=80,basicstyle=\ttfamily\footnotesize]
+% }\smallskip
+% \schemabox{Inimicum.}
+% \end{lstlisting}
+%
+% Next we estimate the lines from the top of a \cmd{\Schema} brace to the bottom, e.g., from ``\textsc{Per se}:'' to ``quem vel''. We use those ``ex'' height figures for \meta{size}:\\
+%
+% \begin{displaymath}\bgroup\footnotesize%
+% \Schema{0ex}{23ex}
+% {
+% \schemabox{Subjectum \& summa\\
+% univers\ae{} Scriptur\ae{},\\
+% est \textsc{Cognitio} vel}
+% }
+% {
+% \Schema{-6.4ex}{8.6ex}
+% {
+% \schemabox{\textsc{Dei}, qualis \\ sit, aut}
+% }
+% {
+% \schema
+% {\schemabox{\textsc{Per se}:\\ scilicet.}}
+% {
+% \schemabox{Unus in essentia.}\smallskip
+% \schemabox{Trinus in personis.}
+% }\smallskip
+% \schema
+% {\schemabox{Ad hominem\\ quem vel}}
+% {
+% \schemabox{Accusat \& terret, \textsc{Per Legem},\\
+% Consolatur \& erigit, \textsc{Per Evangelium}.\\
+% Salvat, \textsc{Per Christum}.\\
+% Renovat, \textsc{Per Spiritum Sanctum}.\\
+% Sanctificat, \textsc{Per Verbum} \& \textsc{Sacramenta}.\\
+% Castigat, tentat \& exercet, \textsc{Per Crucem}.\\
+% Glorificat \textsc{Per Resurrectionem Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\medskip
+% }
+% \Schema{0ex}{16ex}
+% {
+% \schemabox{\textsc{Hominis},\\ qualis sit}
+% }
+% {
+% \Schema{0ex}{5ex}
+% {\schemabox{\textsc{Per se}:}}
+% {
+% \schemabox{Ante lapsum.}\smallskip
+% \schema
+% {\schemabox{Post lapsum:}}
+% {
+% \schemabox{Ante Regenerationem \&\\
+% Renovationem S. Sancti.}\medskip
+% \schemabox{Post Regenerationem \&\\
+% Renovationem S. Sancti.}\smallskip
+% }\smallskip
+% }
+% \Schema{0ex}{16ex}
+% {\schemabox{Ad}}
+% {
+% \schema
+% {\schemabox{\textsc{Deum}}}
+% {
+% \schemabox{P\oe{}nitentia agens, agnitis peccatis \&\\
+% ira Dei cognita \textsc{Ex Lege}.\\
+% Erigens se \textsc{Voce Evangelii}.\\
+% Credens \textsc{In Christum Salvatorem}.\\
+% Non repugnans \textsc{Spiritui Sancto} impellenti.\\
+% Audiens \textsc{Verbum}: \& utens \textsc{Sacramentis}.\\
+% Patienter \& constanter sufferens \textsc{Crucem}.\\
+% Sperans \& expectans glorificationem\\
+% \textsc{In Resurrectione Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\smallskip
+% \schema
+% {\schemabox{seipsum ratione}}
+% {\schemabox{Anim\ae{}\\ vel\\ Corporis}}\smallskip
+% \Schema{0ex}{5ex}
+% {\schemabox{Proximum,}}
+% {
+% \schema
+% {\schemabox{Amicum ra-\\ tione vel}}
+% {
+% \schemabox{Religionis.\\
+% Politic\ae{} \& \OE{}conomic\ae{}.\\
+% Cognationis.\\
+% Agnationis.}
+% }\smallskip
+% \schemabox{Inimicum.}
+% }
+% }
+% }
+% }\egroup%
+%\end{displaymath}
+%
+%\noindent The following lines, illustrate our ``ball park'' figures, where we include lines of text and blank lines in the total count:
+%
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{23ex}
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=8,basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{8ex}
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=32,basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{16ex}
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=37,basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{5ex}
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=50,basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{16ex}
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=70,basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{5ex}
+% \end{lstlisting}
+%
+% Next we add the \meta{adjust values} by counting the lines in the direction the brace needs to move, multiplying by two, and making it negative for up and positive for down. Using an editor, e.g., \textsf{texworks} makes this fairly easy. We also adjust the final \meta{size} of the braces. Work from leaves to root.
+%
+% \begin{displaymath}\bgroup\footnotesize%
+% \Schema{-25ex}{20.6ex}
+% {
+% \schemabox{Subjectum \& summa\\
+% univers\ae{} Scriptur\ae{},\\
+% est \textsc{Cognitio} vel}
+% }
+% {
+% \Schema{-6.4ex}{8.5ex}
+% {
+% \schemabox{\textsc{Dei}, qualis \\ sit, aut}
+% }
+% {
+% \schema
+% {\schemabox{\textsc{Per se}:\\ scilicet.}}
+% {
+% \schemabox{Unus in essentia.}\smallskip
+% \schemabox{Trinus in personis.}
+% }\smallskip
+% \schema
+% {\schemabox{Ad hominem\\ quem vel}}
+% {
+% \schemabox{Accusat \& terret, \textsc{Per Legem},\\
+% Consolatur \& erigit, \textsc{Per Evangelium}.\\
+% Salvat, \textsc{Per Christum}.\\
+% Renovat, \textsc{Per Spiritum Sanctum}.\\
+% Sanctificat, \textsc{Per Verbum} \& \textsc{Sacramenta}.\\
+% Castigat, tentat \& exercet, \textsc{Per Crucem}.\\
+% Glorificat \textsc{Per Resurrectionem Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\medskip
+% }
+% \Schema{-13.4ex}{17.4ex}
+% {
+% \schemabox{\textsc{Hominis},\\ qualis sit}
+% }
+% {
+% \Schema{-4.4ex}{5ex}
+% {\schemabox{\textsc{Per se}:}}
+% {
+% \schemabox{Ante lapsum.}\smallskip
+% \schema
+% {\schemabox{Post lapsum:}}
+% {
+% \schemabox{Ante Regenerationem \&\\
+% Renovationem S. Sancti.}\medskip
+% \schemabox{Post Regenerationem \&\\
+% Renovationem S. Sancti.}\smallskip
+% }\smallskip
+% }
+% \Schema{4.2ex}{14.4ex}
+% {\schemabox{Ad}}
+% {
+% \schema
+% {\schemabox{\textsc{Deum}}}
+% {
+% \schemabox{P\oe{}nitentia agens, agnitis peccatis \&\\
+% ira Dei cognita \textsc{Ex Lege}.\\
+% Erigens se \textsc{Voce Evangelii}.\\
+% Credens \textsc{In Christum Salvatorem}.\\
+% Non repugnans \textsc{Spiritui Sancto} impellenti.\\
+% Audiens \textsc{Verbum}: \& utens \textsc{Sacramentis}.\\
+% Patienter \& constanter sufferens \textsc{Crucem}.\\
+% Sperans \& expectans glorificationem\\
+% \textsc{In Resurrectione Carnis}\\
+% \textsc{Ad Vitam \AE{}ternam}.}
+% }\smallskip
+% \schema
+% {\schemabox{seipsum ratione}}
+% {\schemabox{Anim\ae{}\\ vel\\ Corporis}}\smallskip
+% \Schema{2ex}{5.1ex}
+% {\schemabox{Proximum,}}
+% {
+% \schema
+% {\schemabox{Amicum ra-\\ tione vel}}
+% {
+% \schemabox{Religionis.\\
+% Politic\ae{} \& \OE{}conomic\ae{}.\\
+% Cognationis.\\
+% Agnationis.}
+% }\smallskip
+% \schemabox{Inimicum.}
+% }
+% }
+% }
+% }\egroup%
+%\end{displaymath}
+%
+% \noindent We get the following changes, with a few final tweaks:
+%
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \Schema{-25ex}{20.6ex}% Do this one last.
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=8,basicstyle=\ttfamily\footnotesize]
+% \Schema{-6.4ex}{8.5ex}% Do this one first.
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=32,basicstyle=\ttfamily\footnotesize]
+% \Schema{-13.4ex}{17.4ex}% Do this one fifth.
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=37,basicstyle=\ttfamily\footnotesize]
+% \Schema{-4.4ex}{5ex}% Do this one second.
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=50,basicstyle=\ttfamily\footnotesize]
+% \Schema{4.2ex}{14.4ex}% Do this one fourth.
+% \end{lstlisting}
+% \begin{lstlisting}[firstnumber=70,basicstyle=\ttfamily\footnotesize]
+% \Schema{2ex}{5.1ex}% Do this one third.
+% \end{lstlisting}
+%
+% If all your dimensions are in ex height, scaling your (large) schema gets easier. For example, one ex is a different size for different fonts and font sizes:\medskip
+%
+% \hfil\begin{tabular}{cccc}
+% \cmd{\Large} & \cmd{\large} & \cmd{\normalsize} & \cmd{\footnotesize}\\
+% \Large\dimen0=1ex \the\dimen0 & \large\dimen0=1ex \the\dimen0 & \normalsize\dimen0=1ex \the\dimen0 & \footnotesize\dimen0=1ex \the\dimen0\normalsize\\
+% \end{tabular}\hfil
+%
+% \noindent The next example illustrates spacing, adjusting, and \cmd{\DoParens} inside a group scope:
+% \begin{displaymath}
+% \bgroup\scriptsize\DoParens%
+%\Schema{-36.4ex}{15.6ex}
+%{
+% \schemabox{Sacr\ae{}\\ litter\ae{}\\ loquuntur,\\ de}
+%}
+%{
+% \schema
+% {
+% \schemabox{\textsc{Deo}}
+% }
+% {
+% \schemabox{Uno, in Trinitate.\smallskip\\Trino, in unitate.}
+% }
+% \Schema{-17ex}{23.4ex}
+% {
+% \schemabox{\textsc{Dei}\\ \textsc{Operibus}}
+% }
+% {
+% \schema
+% {
+% \schemabox{\textsc{Intra},\\ qu\ae{} sunt\\ divisa, ut}
+% }
+% {
+% \schemabox{\textsc{Patris}, ab \ae{}terno gignere.\\ \textsc{Filii}, ab \ae{}terno genitum esse.\\ \textsc{Spiritus Sancti}, ab utroque\\ ab \ae{}terno procedete.}
+% }
+% \medskip
+% \Schema{-2.6ex}{19.6ex}
+% {
+% \schemabox{\textsc{Extra},\\ qu\ae{} sunt\\ indivisa;\\ tervata\\ tamen\\ cujusque\\ person\ae{}\\ divinitatis\\ sua pro-\\prietate}
+% }
+% {
+% \Schema{-0.8ex}{6.4ex}
+% {
+% \schemabox{Creatione\\ natur\ae{}}
+% }
+% {
+% \schema
+% {
+% \schemabox{Brute ut}
+% }
+% {
+% \schemabox{C\oe{}li} \smallskip \schemabox{Elementorum} \smallskip \schemabox{Mundi}
+% }
+% \smallskip
+% \schema
+% {
+% \schemabox{\gk{logik~hs}, ut}
+% }
+% {
+% \schemabox{Angelorum.} \smallskip \schemabox{Hominum: Ad\ae{},\\ Ev\ae{} \& procreatorum\\ exipsis.}
+% }
+% }
+% \schema
+% {
+% \schemabox{Sustenatione\\ natur\ae{} laps\ae{},}
+% }
+% {
+% \schemabox{Angelorum malorum,} \smallskip \schemabox{Hominum: Ad\ae{}, Ev\ae{}\\ \& procreatorum exipsis.}
+% }
+% \Schema{2.6ex}{8.8ex}
+% {
+% \schemabox{Beneficiis erga\\ Ecclesiam: ea ver-\\ santur aut circa}
+% }
+% {
+% \Schema{2.2ex}{7ex}
+% {
+% \schemabox{Res, ut}
+% }
+% {
+% \schema
+% {
+% \schemabox{Verbum}
+% }
+% {
+% \schemabox{Legis} \smallskip \schemabox{Evangelii} \smallskip \schemabox{Sacramentorum}
+% }
+% \smallskip
+% \schema
+% {
+% \schemabox{Signa vel Veteris\\ vel Novi Testa-\\ mentum ut sunt:}
+% }
+% {
+% \schemabox{Ceremoni\ae{}} \smallskip \schemabox{Miracula}
+% }
+% }
+% \smallskip
+% \Schema{1ex}{5ex}
+% {
+% \schemabox{Personas}
+% }
+% {
+% \schema
+% {
+% \schemabox{Ecclesi\ae{}}
+% }
+% {
+% \schemabox{Universalis} \smallskip \schemabox{Particularis}
+% }
+% \smallskip
+% \schemabox{Politi\ae{} ut Magistratuum}
+% \smallskip
+% \schemabox{\OE{}conomi\ae{} ut privatorum}
+% }
+% }
+% }
+% }
+%}\egroup%
+%\end{displaymath}
+% Next we see some closed schemata. This example merits consideration because it uses not only open schemata but closed ones nested within them. One must use \cmd{\Schema} in that case to prevent the opening braces from being slightly larger than the closing braces.
+% \begin{displaymath}
+% \bgroup\small%
+% \Schema{-1.4ex}{10ex}
+% {
+% \schemabox{Qu\ae{} sit\\ \textsc{Dei}, vel}
+% }
+% {
+% \Schema{-1ex}{5ex}
+% {
+% \schemabox{\textsc{Essentia}, in}
+% }
+% {
+% \vskip1ex\schemabox{Unitate divina,}
+% \medskip
+% \Schema{0ex}{3.4ex}
+% {
+% \schemabox{Tribus perso-\\ nis divinitatis}
+% }
+% {
+% \Schema[close]{0ex}{3.4ex}
+% {
+% \NudgeSB\schemabox{Patre,\\ Filio,\\ Spiritui Sancto}
+% }
+% {
+% \schemabox{\gk{<omoous'iois}\\ \& co\ae{}ternis}
+% }
+% }
+% }
+% \medskip
+% \Schema{-0.2ex}{6.4ex}
+% {
+% \schemabox{\textsc{Voluntas},\\ revelatur in\\ actione, sive}
+% }
+% {
+% \Schema{0ex}{3.4ex}
+% {
+% \schemabox{Universali}
+% }
+% {
+% \Schema[close]{0ex}{3.4ex}
+% {
+% \schemabox{Creationis,\\Sustenationis,\\ Propagationis,}
+% }
+% {
+% \schemabox{rerum creatarum.}
+% }
+% }
+% \medskip
+% \schema
+% {
+% \schemabox{Speciali, in beneficiis\\ erga Ecclesiam, eam}
+% }
+% {
+% \schemabox{Colligendo.\\ Justificando.\\ Conservando.\\
+% Glorificando.}
+% }
+% }
+% }\egroup%
+% \end{displaymath}
+% \clearpage
+% The following listing of the previous example illustrates how one handles closed schemata in this fashion. The macro \cmd{\gk} creates Greek text.
+%
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \Schema{-1.4ex}{10ex}
+% {
+% \schemabox{Qu\ae{} sit\\ \textsc{Dei}, vel}
+% }
+% {
+% \Schema{-1ex}{5ex}
+% {
+% \schemabox{\textsc{Essentia}, in}
+% }
+% {
+% \vskip1ex\schemabox{Unitate divina,}
+% \medskip
+% \Schema{0ex}{3.4ex}
+% {
+% \schemabox{Tribus perso-\\ nis divinitatis}
+% }
+% {
+% \Schema[close]{0ex}{3.4ex}
+% {
+% \NudgeSB\schemabox{Patre,\\ Filio,\\ Spiritui Sancto}
+% }
+% {
+% \schemabox{\gk{<omoous'iois}\\ \& co\ae{}ternis}
+% }
+% }
+% }
+% \medskip
+% \Schema{-0.2ex}{6.4ex}
+% {
+% \schemabox{\textsc{Voluntas},\\ revelatur in\\ actione, sive}
+% }
+% {
+% \Schema{0ex}{3.4ex}
+% {
+% \schemabox{Universali}
+% }
+% {
+% \Schema[close]{0ex}{3.4ex}
+% {
+% \schemabox{Creationis,\\ Sustenationis,\\ Propagationis,}
+% }
+% {
+% \schemabox{rerum creatarum.}
+% }
+% }
+% \medskip
+% \schema
+% {
+% \schemabox{Speciali, in beneficiis\\ erga Ecclesiam, eam}
+% }
+% {
+% \schemabox{Colligendo.\\ Justificando.\\ Conservando.\\
+% Glorificando.}
+% }
+% }
+% }
+% \end{lstlisting}
+% \clearpage
+% Balanced open and closed schemata take the general form below:
+% \begin{quote}\ttfamily
+% \cmd{\Schema}\{\meta{adjust}\}\{\meta{height}\}\\
+% \hbox{}\quad\{\meta{$left_1$}\}\\
+% \hbox{}\quad\{\cmd{\Schema}[close]\{\meta{adjust}\}\{\meta{height}\}\\
+% \hbox{}\qquad\{\meta{$left_2$}\}\\
+% \hbox{}\qquad\{\meta{$right_2$}\}\\
+% \hbox{}\quad\}
+% \end{quote}
+%
+% The result is:
+% \begin{displaymath}
+% \Schema{0ex}{2ex}
+% {\hbox{$left_1$}}{\Schema[close]{0ex}{2ex}
+% {\hbox{$left_2$}}{\hbox{$right_2$}}}
+% \end{displaymath}
+% \medskip
+%
+% Try to produce the following. Everything to the right of the leftmost brace is the RHS of the outermost schema. Everything between the leftmost brace and the rightmost brace is the LHS of the first nested schema, and so on.
+% \begin{displaymath}
+% \Schema{0ex}{5.6ex}
+% {\schemabox{a}}
+% {
+% \Schema[close]{0ex}{5.6ex}
+% {
+% \Schema{0ex}{3.3ex}
+% {\schemabox{b\\c}}
+% {
+% \Schema[close]{0ex}{3.3ex}
+% {\schemabox{f\\g\\h}}
+% {\schemabox{l\\m}}
+% }
+% \Schema{0ex}{3.3ex}
+% {\schemabox{d\\e}}
+% {
+% \Schema[close]{0ex}{3.3ex}
+% {\schemabox{i\\j\\k}}
+% {\schemabox{n\\o}}
+% }
+% }
+% {\schemabox{p}}
+% }
+% \end{displaymath}\medskip
+%
+% If you choose to give up, the listing is below:\\[4ex]
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \Schema{0ex}{5.6ex}
+% {\schemabox{a}}
+% {
+% \Schema[close]{0ex}{5.6ex}
+% {
+% \Schema{0ex}{3.3ex}
+% {\schemabox{b\\c}}
+% {
+% \Schema[close]{0ex}{3.3ex}
+% {\schemabox{f\\g\\h}}
+% {\schemabox{l\\m}}
+% }
+% \Schema{0ex}{3.3ex}
+% {\schemabox{d\\e}}
+% {
+% \Schema[close]{0ex}{3.3ex}
+% {\schemabox{i\\j\\k}}
+% {\schemabox{n\\o}}
+% }
+% }
+% {\schemabox{p}}
+% }
+% \end{lstlisting}
+% \clearpage
+% \subsection{Final features}
+% \label{sec:multiple}
+% This final example illustrates how one can set the width of a \cmd{\schemabox}, and for what sort of use that might be. Below we invoke \cmd{\DoBrackets} after the start of the group containing the right-hand side of the first \cmd{\Schema}.
+% \begin{displaymath}\bgroup\small
+% \Schema{-0.2ex}{14.4ex}
+% {\schemabox{\bfseries Curricula\\\bfseries Texts}}
+% {
+% \DoBrackets%
+% \newbox\mybox\setbox\mybox=\hbox{\bfseries III. Philosophical }%
+% \dimen0=\wd\mybox%
+% \schema
+% {\schemabox[\dimen0]{\bfseries I. General\\Studies}}
+% {\schemabox{1. Collected Works\\2. Encyclopedias}}
+% \smallskip
+% \schema
+% {\schemabox[\dimen0]{\bfseries II. Literary\\Disciplines}}
+% {\schemabox{1. Philology\\
+% 2. Historical Introduction\\
+% 3. Literary Theory\\
+% 4. Application}}
+% \smallskip
+% \schema
+% {\schemabox[\dimen0]{\bfseries III. Philosophical\\Disciplines}}
+% {\schemabox{1. Source Texts\\
+% 2. History of Philosophy\\
+% 3. General Surveys\\
+% 4. Specific Studies}}
+% \smallskip
+% \schema
+% {\schemabox[\dimen0]{\bfseries IV. Historical\\Disciplines}}
+% {\schemabox{1. General Surveys\\
+% 2. Specialized Works}}
+% }\egroup%
+%\end{displaymath}
+%
+% \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
+% \Schema{-0.2ex}{14.4ex}
+% {\schemabox{\bfseries Curricula\\\bfseries Texts}}
+% {
+% \DoBrackets%
+% \newbox\mybox\setbox\mybox=\hbox{\bfseries III. Philosophical }%
+% \dimen0=\wd\mybox%
+% \schema
+% {\schemabox[\dimen0]{\bfseries I. General\\Studies}}
+% {\schemabox{1. Collected Works\\2. Encyclopedias}}
+% \smallskip
+% \schema
+% {\schemabox[\dimen0]{\bfseries II. Literary\\Disciplines}}
+% {\schemabox{1. Philology\\
+% 2. Historical Introduction\\
+% 3. Literary Theory\\
+% 4. Application}}
+% \smallskip
+% \schema
+% {\schemabox[\dimen0]{\bfseries III. Philosophical\\Disciplines}}
+% {\schemabox{1. Source Texts\\
+% 2. History of Philosophy\\
+% 3. General Surveys\\
+% 4. Specific Studies}}
+% \smallskip
+% \schema
+% {\schemabox[\dimen0]{\bfseries IV. Historical\\Disciplines}}
+% {\schemabox{1. General Surveys\\
+% 2. Specialized Works}}
+% }
+%\end{lstlisting}
+% \clearpage
+%\StopEventually{^^A
+% \clearpage\PrintChanges
+% \clearpage\PrintIndex
+%}
+%
+% \section{Implementation}
+%
+% The concept of using math mode to generate schemata was first implemented by me in plain \TeX, then migrated to \LaTeX.
+%
+% \subsection{Package Options and Booleans}
+%
+% \changes{v0.6}{2013/03/10}{Added brackets and parens as well as braces}
+% Three options are implemented, namely, |braces| (the default), |brackets|, and |parens|. Plain \TeX{} does not use options as such, but simply declares braces as the default and allows the user to change that after the file is |\input|.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \catcode`@=11%
+ \def\DoBraces{\let\@schemata@LD\lbrace \let\@schemata@RD\rbrace}%
+ \DoBraces%
+\else
+ \DeclareOption{braces}{\let\@schemata@LD\lbrace \let\@schemata@RD\rbrace}
+ \DeclareOption{brackets}{\let\@schemata@LD\lbrack \let\@schemata@RD\rbrack}
+ \DeclareOption{parens}{\let\@schemata@LD( \let\@schemata@RD)}
+ \ExecuteOptions{braces}
+ \ProcessOptions\relax
+\fi
+% \end{macrocode}
+%
+%Two box registers and two dimen registers are used to analyze the left-hand and right-hand vertical sizes of the boxes in a schema.
+% \changes{v0.8}{2016/01/25}{Renamed box/dimen registers}
+% \begin{macrocode}
+\newbox\@rhs%
+\newbox\@lhs%
+\newdimen\@rheight%
+\newdimen\@lheight%
+% \end{macrocode}
+% \changes{v0.6}{2013/03/10}{Added UC/LC tweaks.}
+% \changes{v0.8}{2016/01/25}{Renamed internal macros}
+% \begin{macrocode}
+\newif\if@schemata@LCBox%
+\newif\if@schemata@SWBox%
+\newif\if@schemata@NudgeBox%
+% \end{macrocode}
+%
+% \subsection {Macros}
+%
+% \begin{macro}{\DoBraces}
+% \changes{v0.6}{2013/03/10}{Added macro}
+% Set the default option for braces.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+\else
+ \newcommand{\DoBraces}{\let\@schemata@LD\lbrace \let\@schemata@RD\rbrace}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\DoBrackets}
+% \changes{v0.6}{2013/03/10}{Added macro}
+% Set the ``branches'' to be brackets.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\DoBrackets{\let\@schemata@LD\lbrack \let\@schemata@RD\rbrack}%
+\else
+ \newcommand{\DoBrackets}{\let\@schemata@LD\lbrack \let\@schemata@RD\rbrack}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\DoParens}
+% \changes{v0.6}{2013/03/10}{Added macro}
+% Set the ``branches'' to be parentheses.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\DoParens{\let\@schemata@LD( \let\@schemata@RD)}%
+\else
+ \newcommand{\DoParens}{\let\@schemata@LD( \let\@schemata@RD)}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LCschema}
+% \changes{v0.6}{2013/03/10}{Added macro}
+% Set global settings to assume lowercase initial text in \cmd{\schemabox}es.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\LCschema{\@schemata@LCBoxtrue}%
+\else
+ \newcommand{\LCschema}{\@schemata@LCBoxtrue}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\UCschema}
+% \changes{v0.6}{2013/03/10}{Added macro}
+% Set global settings to assume uppercase initial text in \cmd{\schemabox}es.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\UCschema{\@schemata@LCBoxfalse}%
+\else
+ \newcommand{\UCschema}{\@schemata@LCBoxfalse}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SwitchSB}
+% \changes{v0.6}{2013/03/10}{Added macro}
+% Flip the UC/LC settings for one \cmd{\schemabox}, which will reset this value on exit.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\SwitchSB{\@schemata@SWBoxtrue}%
+\else
+ \newcommand{\SwitchSB}{\@schemata@SWBoxtrue}%
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NudgeSB}
+% \changes{v0.8}{2016/01/25}{Added macro}
+% Add a kern to the end of each line in a \cmd{\schemabox}. This will be reset on exit from the \cmd{\schemabox}.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\NudgeSB{\@schemata@NudgeBoxtrue}%
+\else
+ \newcommand{\NudgeSB}{\@schemata@NudgeBoxtrue}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \clearpage\noindent
+%
+% \begin{macro}{\schemabox}
+% \changes{v0.8}{2016/01/25}{Added nudge feature; fix errors when not in internal vertical mode}
+% If in internal vertical mode, wrap a stack of left-aligned \cmd{\hbox}es with optional width in a \cmd{\vbox.} This allows the box to be only as wide as needed. The syntax is reminiscent of a one-column tabular. Normally insert a \cmd{\strut} in the first \cmd{\hbox}.
+% \changes{v0.6}{2013/03/10}{Added lowercase tweaks}
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \gdef\schemabox{\futurelet\testchar\@schemabox}
+ \gdef\@schemabox{%
+ \ifx[\testchar
+ \let\next\@@schemabox%
+ \else
+ \let\next\@@schemab@x%
+ \fi
+ \next%
+ }%
+ \gdef\@@schemab@x#1{\@@schemabox[0pt]{#1}}
+ \gdef\@@schemabox[#1]#2{%
+ \ifinner
+ \if@schemata@LCBox
+ \def\@Adj{}%
+ \if@schemata@SWBox\def\@Adj{\strut}\fi
+ \else
+ \def\@Adj{\strut}%
+ \if@schemata@SWBox\def\@Adj{}\fi
+ \fi
+ \if@schemata@NudgeBox
+ \def\@Nudge{\kern0.2em}%
+ \else
+ \def\@Nudge{}%
+ \fi
+ \ifdim#1<1pt
+ \def\\{\@Nudge\egroup\hbox\bgroup\ignorespaces }%
+ \vbox{\hbox\bgroup\@Adj\ignorespaces #2\@Nudge\egroup}%
+ \else
+ \def\\{\hfil\egroup\hbox to #1\bgroup\ignorespaces }%
+ \vbox{\hbox to #1\bgroup\@Adj\ignorespaces #2\hfil\egroup}%
+ \fi
+ \else
+ #2%
+ \fi
+ \@schemata@SWBoxfalse%
+ \@schemata@NudgeBoxfalse%
+ }%
+% \end{macrocode}
+% \clearpage
+% \begin{macrocode}
+\else
+ \newcommand{\schemabox}[2][0pt]{%
+ \ifinner
+ \if@schemata@LCBox
+ \def\@Adj{}%
+ \if@schemata@SWBox\def\@Adj{\strut}\fi
+ \else
+ \def\@Adj{\strut}%
+ \if@schemata@SWBox\def\@Adj{}\fi
+ \fi
+ \if@schemata@NudgeBox
+ \def\@Nudge{\kern0.2em}%
+ \else
+ \def\@Nudge{}%
+ \fi
+ \ifdim#1<1pt
+ \def\\{\@Nudge\egroup\hbox\bgroup\ignorespaces }%
+ \vbox{\hbox\bgroup\@Adj\ignorespaces #2\@Nudge\egroup}%
+ \else
+ \def\\{\hfil\egroup\hbox to #1\bgroup\ignorespaces }%
+ \vbox{\hbox to #1\bgroup\@Adj\ignorespaces #2\hfil\egroup}%
+ \fi
+ \else
+ #2%
+ \fi
+ \@schemata@SWBoxfalse%
+ \@schemata@NudgeBoxfalse%
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \clearpage\noindent
+%
+% \begin{macro}{\schema}
+% This ``simple'' schema vertically centers two boxes of internal vertical material and puts a ``simple'' brace between the boxes based on the height of the box and the options passed to the schema. By default, a schema has a box to the left, an open delimiter, and a box to the right. If any optional argument other than "open" is used, the schema prints a box to the left, a close brace, and a box to the right.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \gdef\schema{\futurelet\testchar\@schema}
+ \gdef\@schema{\ifx[\testchar \let\next\@@schema%
+ \else \let\next\@@schem@ \fi \next}
+ \gdef\@@schem@#1#2{\@@schema[open]{#1}{#2}}
+ \gdef\@@schema[#1]#2#3{%
+ \def\@ption{#1}\def\@pen{open}%
+ \ifx\@ption\@pen
+ \setbox\@rhs=\vbox{#3}%
+ \@rheight=\ht\@rhs%
+ \advance\@rheight\dp\@rhs%
+ \advance\@rheight by 1.44265ex%
+ \hbox{$\vcenter{#2}%
+ \@schemata@lbrace{\@rheight}%
+ \vcenter{#3}$}%
+ \else
+ \setbox\@lhs=\vbox{#2}%
+ \@lheight=\ht\@lhs%
+ \advance\@lheight\dp\@lhs%
+ \advance\@lheight by 1.44265ex%
+ \hbox{$\vcenter{#2}%
+ \kern-0.2em\@schemata@rbrace{\@lheight}%
+ \vcenter{#3}$}%
+ \fi
+ }%
+\else
+ \newcommand{\schema}[3][open]{%
+ \def\@ption{#1}\def\@pen{open}%
+ \ifx\@ption\@pen
+ \setbox\@rhs=\vbox{#3}%
+ \@rheight=\ht\@rhs%
+ \advance\@rheight\dp\@rhs%
+ \advance\@rheight by 1.44265ex%
+ \hbox{$\vcenter{#2}%
+ \@schemata@lbrace{\@rheight}%
+ \vcenter{#3}$}%
+ \else
+ \setbox\@lhs=\vbox{#2}%
+ \@lheight=\ht\@lhs%
+ \advance\@lheight\dp\@lhs%
+ \advance\@lheight by 1.44265ex%
+ \hbox{$\vcenter{#2}%
+ \kern-0.2em\@schemata@rbrace{\@lheight}%
+ \vcenter{#3}$}%
+ \fi
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \clearpage\noindent
+%
+% \begin{macro}{\Schema}
+% This is the general-purpose form of schemata. The arguments include whether it is an open or closed schema, the vertical adjustment of the left-hand side, the size of the brace, and the contents of the left and right-hand sizes. It works the same as above, but requires manual adjustment of the braces.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \gdef\Schema{\futurelet\testchar\@Schema}
+ \gdef\@Schema{\ifx[\testchar \let\next\@@Schema%
+ \else \let\next\@@Schem@ \fi \next}
+ \gdef\@@Schem@#1#2#3#4{\@@Schema[open]{#1}{#2}{#3}{#4}}
+ \gdef\@@Schema[#1]#2#3#4#5{%
+ \def\@ption{#1}%
+ \def\@pen{open}%
+ \dimen0=#2%
+ \ifx\@ption\@pen
+ \hbox{$\vcenter{\vskip1.44265\dimen0#4}%
+ \@schemata@biglbrace{#2}{#3}\vcenter{#5}$}%
+ \else
+ \hbox{$\vcenter{\vskip1.44265\dimen0#4}\kern-0.2em%
+ \@schemata@bigrbrace{#2}{#3}\vcenter{#5}$}%
+ \fi
+ }%
+\else
+ \newcommand{\Schema}[5][open]{%
+ \def\@ption{#1}%
+ \def\@pen{open}%
+ \dimen0=#2%
+ \ifx\@ption\@pen
+ \hbox{$\vcenter{\vskip1.44265\dimen0#4}%
+ \@schemata@biglbrace{#2}{#3}\vcenter{#5}$}%
+ \else
+ \hbox{$\vcenter{\vskip1.44265\dimen0#4}\kern-0.2em%
+ \@schemata@bigrbrace{#2}{#3}\vcenter{#5}$}%
+ \fi
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@schemata@lbrace}
+% \changes{v0.8}{2016/01/25}{Renamed}
+% Draw an on-center brace to the left of a simple box.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\@schemata@lbrace#1{%
+ \ifmmode\left.\vcenter{\vbox to #1{\vfil}}\right\@schemata@LD\fi}
+\else
+ \newcommand{\@schemata@lbrace}[1]{%
+ \ifmmode\left.\vcenter{\vbox to #1{\vfil}}\right\@schemata@LD\fi}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@schemata@rbrace}
+% \changes{v0.8}{2016/01/25}{Renamed}
+% Draw an on-center brace to the right of a simple box.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\@schemata@rbrace#1{%
+ \ifmmode\left\@schemata@RD\vcenter{\vbox to #1{\vfil}}\right.\fi}
+\else
+ \newcommand{\@schemata@rbrace}[1]{%
+ \ifmmode\left\@schemata@RD\vcenter{\vbox to #1{\vfil}}\right.\fi}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \clearpage\noindent
+%
+% \begin{macro}{\@schemata@biglbrace}
+% \changes{v0.8}{2016/01/25}{Renamed; use absolute value of brace size}
+% Draw a vertically-adjustable brace to the left of a complex assortment of boxes.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\@schemata@biglbrace#1#2{%
+ \dimen0=#1%
+ \dimen2=#2%
+ \dimen4=-\dimen2%
+ \ifdim\dimen4>\dimen2\dimen2=\dimen4\fi
+ \ifdim\dimen0<0pt
+ \ifmmode\vcenter{\hbox{$\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@LD%
+ \atop\vbox to -1.44265\dimen0{\vfil}$}}\fi
+ \else
+ \ifmmode\vcenter{\hbox{$\vbox to 1.44265\dimen0{\vfil}%
+ \atop\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@LD$}}\fi
+ \fi
+ }%
+\else
+ \newcommand{\@schemata@biglbrace}[2]{%
+ \dimen0=#1%
+ \dimen2=#2%
+ \dimen4=-\dimen2%
+ \ifdim\dimen4>\dimen2\dimen2=\dimen4\fi
+ \ifdim\dimen0<0pt
+ \ifmmode\vcenter{\hbox{$\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@LD%
+ \atop\vbox to -1.44265\dimen0{\vfil}$}}\fi
+ \else
+ \ifmmode\vcenter{\hbox{$\vbox to 1.44265\dimen0{\vfil}%
+ \atop\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@LD$}}\fi
+ \fi
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \clearpage\noindent
+%
+% \begin{macro}{\@schemata@bigrbrace}
+% \changes{v0.8}{2016/01/25}{Renamed; Use absolute value of brace size}
+% Draw a vertically-adjustable brace to the right of a complex assortment of boxes.
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \def\@schemata@bigrbrace#1#2{%
+ \dimen0=#1%
+ \dimen2=#2%
+ \dimen4=-\dimen2%
+ \ifdim\dimen4>\dimen2\dimen2=\dimen4\fi
+ \ifdim\dimen0<0pt
+ \ifmmode\vcenter{\hbox{$\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@RD%
+ \atop\vbox to -1.44265\dimen0{\vfil}$}}\fi
+ \else
+ \ifmmode\vcenter{\hbox{$\vbox to 1.44265\dimen0{\vfil}%
+ \atop\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@RD$}}\fi
+ \fi
+ }%
+\else
+ \newcommand{\@schemata@bigrbrace}[2]{%
+ \dimen0=#1%
+ \dimen2=#2%
+ \dimen4=-\dimen2%
+ \ifdim\dimen4>\dimen2\dimen2=\dimen4\fi
+ \ifdim\dimen0<0pt
+ \ifmmode\vcenter{\hbox{$\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@RD%
+ \atop\vbox to -1.44265\dimen0{\vfil}$}}\fi
+ \else
+ \ifmmode\vcenter{\hbox{$\vbox to 1.44265\dimen0{\vfil}%
+ \atop\left.%
+ \vbox to 1.44265\dimen2{\vfil}%
+ \right\@schemata@RD$}}\fi
+ \fi
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\expandafter\ifx\csname newenvironment\endcsname\relax
+ \catcode`@=12
+\fi
+% \end{macrocode}
+%\Finale
+\endinput
+%</package>
diff --git a/macros/generic/schemata/schemata.pdf b/macros/generic/schemata/schemata.pdf
new file mode 100644
index 0000000000..39d04c7c3b
--- /dev/null
+++ b/macros/generic/schemata/schemata.pdf
Binary files differ
diff --git a/macros/generic/shade/README b/macros/generic/shade/README
new file mode 100644
index 0000000000..10b6e28bab
--- /dev/null
+++ b/macros/generic/shade/README
@@ -0,0 +1,29 @@
+Copyright 1993, 2011 Peter Schmitt, schmitp7 at univie dot ac dot at
+
+This shade package is released under the LaTeX Project Public License,
+version 1, or (at your option) any later version. It includes this
+README, description.tex, shade.mf, shade.tex, and the derived file
+description.pdf
+
+Version 1 was released March 21, 1993.
+License clarified in 2011.
+
+A `frequently asked question' is for ways to produce shaded boxes.
+
+Since the answers usually (just as recently) point either to PostScript
+\special's, PiCTeX, PSTricks, etc. it seems that a `simpler' and easier to use version
+is not readily available -- though I did not check this.
+
+A small and simple approach to shaded boxes is the use of a special font
+providing shaded rectangles, and some macros which automatically compose the
+desired box from these characters.
+
+Since, of course, the finest shading can be achieved by using single pixels
+for the pattern, the best shading pattern is *device dependent*.
+Furthermore, one generally defined shading pattern would imply the danger,
+that - because of rounding errors - at the boundaries (between two of the
+characters) `lines' would occur, and that the pattern would not look completely
+uniform. Consequently, since different fonts are to be used for different
+printers, the dvi file is *device dependent* in this sense, too, though the
+code - both for the macros and for the metafont description - is device
+independent.
diff --git a/macros/generic/shade/description.pdf b/macros/generic/shade/description.pdf
new file mode 100644
index 0000000000..4b239d81b7
--- /dev/null
+++ b/macros/generic/shade/description.pdf
Binary files differ
diff --git a/macros/generic/shade/description.tex b/macros/generic/shade/description.tex
new file mode 100644
index 0000000000..fde2daa6a6
--- /dev/null
+++ b/macros/generic/shade/description.tex
@@ -0,0 +1,45 @@
+% shade/description.tex
+% see README for licensing and contact information.
+
+\magnification=\magstep1
+\parindent0pt \parskip 3pt
+\input shade.tex
+
+{\tt SHADE} is a \TeX\ tool that can be used to produce shaded boxes
+using neither PostScript nor Pic\TeX.
+
+% The syntax is:
+
+\shade{This text will appear on a shaded background!}
+
+The shading macro first packs its argument into an hbox.
+
+\shade{\vbox{\hsize 5cm
+ \leftskip=0pt plus 1fil\rightskip=0pt plus 1fil
+ \parfillskip=0pt
+ Then it measures the dimensions of this box and produces a
+ shaded box slightly larger then this box, using the font
+ shade produced by {\tt shade.mf}. Finally it
+ puts the box back and overlays it with the shaded box.
+ \par
+ }}
+
+Since the best shading is achieved at the lowest possible resolution,
+the font \shade{SHADE} is {\bf not device independent} --- it uses
+the printer resolution. Therefore the .dvi file is
+{\bf not device independent}, either.
+The macro code, however, {\bf is device independent}.
+This method was used because otherwise shading, and in particular
+the boundaries between two shading characters, could turn out to be not
+completely uniform.
+For the same reason, the font should only be used at its true size.
+
+The {\tt shade} package consists of three main files:
+ {\tt shade.mf, % MetaFont file for shading font
+ shade.tex, % macro file be used with LaTeX, too
+ description.tex. % this file,
+ % which can be processed by TeX as a demo file
+ }
+It was tested with a HP LaserJet II plus.
+
+\bye
diff --git a/macros/generic/shade/shade.mf b/macros/generic/shade/shade.mf
new file mode 100644
index 0000000000..0fc67b3d17
--- /dev/null
+++ b/macros/generic/shade/shade.mf
@@ -0,0 +1,41 @@
+%%% shade/shade.mf
+%%% shade font for use with shade.tex/sty
+%%% see README for licensing and contact information.
+
+mode_setup;
+magnification=1000;
+font_identifier "Shade";
+font_coding_scheme "Shade Style Matrix";
+font_size 10pt#;
+
+%%% a = side of smallest shaded square (3x3 pixels)
+ a#:=(3/pixels_per_inch)*1in#;
+ define_pixels(a);
+%%% greybox produces a shaded rectangle:
+%%% height 2^H*a
+%%% width 2^W*a
+%%% ...
+%%% it consists of WxH `unit squares': .*.
+%%% ...
+%%% its character code is 10*W + H
+%%% i.e., the first digit corresponds to the width and
+%%% the second digit corresponds to the height of the character
+
+def greybox (expr H, W) =
+ HH:=2**H; WW:=2**W;
+ beginchar(10*W+H, WW*a#, HH*a#, 0);
+ pickup pencircle scaled 1;
+ fill (1,1)--(1,3*HH)--(3*WW,3*HH)--(3*WW,1)--cycle;
+ pickup pencircle scaled 2;
+ for x = 0 step 3 until 3*HH : undraw (0,x)--(3*WW,x); endfor;
+ for x = 0 step 3 until 3*WW : undraw (x,0)--(x,3*HH); endfor;
+ endchar;
+ enddef;
+
+%%% produce characters for H and W from 0 to 5
+
+for ww = 0 upto 5 :
+ for hh = 0 upto 5 : greybox (hh,ww); endfor;
+ endfor;
+
+bye;
diff --git a/macros/generic/shade/shade.tex b/macros/generic/shade/shade.tex
new file mode 100644
index 0000000000..b7b01ab809
--- /dev/null
+++ b/macros/generic/shade/shade.tex
@@ -0,0 +1,45 @@
+%%% shade/shade.tex (or shade.sty)
+%%% shade macros for use with shade.mf
+%%% see README for licensing and contact information.
+
+\catcode`\:11
+
+\font\grey:=shade at 10truept
+
+\newbox\shade:box
+\newdimen\fill:boundary
+ \setbox0=\hbox{\grey:\char0\relax}\fill:boundary=\ht0
+\newcount\fill:level \newdimen\fill:size \newdimen\fill:goal
+
+\long\def\shade#1{\leavevmode
+ \setbox\shade:box=\hbox{#1}%
+ \def\shade:column{}\def\shade:row{}%
+ \fill:level=5 \fill:goal=\wd\shade:box
+ \advance\fill:goal by 2\fill:boundary
+ \let\shade:v\relax \Fill: \shade:row\shade:v
+ \fill:level=5
+ \fill:goal=\ht\shade:box \advance\fill:goal by \dp\shade:box
+ \advance\fill:goal by 2\fill:boundary
+ \let\shade:h\relax \Fill: \shade:column\shade:h
+ \fill:goal=\ht\shade:box \advance\fill:goal by \dp\shade:box
+ \setbox0=\vbox to\fill:goal{\offinterlineskip\grey:
+ \def\shade:h##1{%
+ \def\shade:v####1{\char####1##1\relax}%
+ \hbox to \wd\shade:box{\hss\shade:row\hss}}
+ \vss \shade:column \vss
+ }\ht0=\ht\shade:box \dp0=\dp\shade:box
+ \rlap{\box0}\box\shade:box
+ }
+\def\Fill: {\setbox0=\hbox{\grey:\char\fill:level\relax}\fill:size=\ht0
+ \fill:}
+\def\fill: #1#2{%
+ \ifdim \fill:size>\fill:goal
+ \advance\fill:level by-1
+ \ifnum \fill:level>-1 \let \fill:next = \Fill:
+ \else \let \fill:next = \fill:stop \fi
+ \else \edef#1{#1#2\the\fill:level}\advance\fill:goal by -\fill:size
+ \let \fill:next = \fill:
+ \fi \fill:next #1#2}
+\def\fill:stop#1#2{}
+
+\endinput
diff --git a/macros/generic/simplekv/README b/macros/generic/simplekv/README
new file mode 100644
index 0000000000..d612d38b6b
--- /dev/null
+++ b/macros/generic/simplekv/README
@@ -0,0 +1,21 @@
+___________________________________
+
+ L'extension
+ simplekv
+
+ v0.1
+
+ 8 aout 2017
+___________________________________
+
+Authors : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail : unbonpetit@netc.fr (CT)
+ Commentaires, signalements de bugs et
+ suggestions bienvenus
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+A simple key/value system for TeX.
diff --git a/macros/generic/simplekv/simplekv-fr.pdf b/macros/generic/simplekv/simplekv-fr.pdf
new file mode 100644
index 0000000000..797171dd55
--- /dev/null
+++ b/macros/generic/simplekv/simplekv-fr.pdf
Binary files differ
diff --git a/macros/generic/simplekv/simplekv-fr.tex b/macros/generic/simplekv/simplekv-fr.tex
new file mode 100644
index 0000000000..c899feeb73
--- /dev/null
+++ b/macros/generic/simplekv/simplekv-fr.tex
@@ -0,0 +1,271 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est la documentation du package "hlist"
+%
+% Fichier compilé avec pdflatex
+\documentclass[french,a4paper,10pt]{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[margin=2cm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,simplekv}
+\usepackage[scaled=0.8]{luximono}
+\frenchbsetup{og=«,fg=»}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\def\SKV{\texttt{\skvname}\xspace}
+\makeatletter
+\def\code{\expandafter\code@i\string}
+\def\code@i#1{%
+ \begingroup
+ \par\nobreak\medskip\parindent0pt
+ \leftskip.1\linewidth
+ \make@car@active\^^I{\leavevmode\space\space\space\space}%
+ \let\do\@makeother \dospecials
+ \ttfamily\small\@noligs
+ \make@car@active\<{\begingroup$\langle$\itshape}%
+ \make@car@active\>{$\rangle$\endgroup}%
+ \obeylines\obeyspaces
+ \def\code@ii##1#1{##1\par\medbreak\endgroup}%
+ \code@ii
+}
+\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
+
+\newcommand\disable@lig[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\make@car@active[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~}%
+}
+
+\newcommand\exemple{%
+ \begingroup
+ \parskip\z@
+ \exemple@}
+
+\newcommand\exemple@{%
+ \medbreak\noindent
+ \begingroup
+ \let\do\@makeother\dospecials
+ \make@car@active\ { {}}%
+ \make@car@active\^^M{\par\leavevmode}%
+ \make@car@active\^^I{\space\space}%
+ \make@car@active\,{\leavevmode\kern\z@\string,}%
+ \make@car@active\-{\leavevmode\kern\z@\string-}%
+ \make@car@active\>{\leavevmode\kern\z@\string>}%
+ \make@car@active\<{\leavevmode\kern\z@\string<}%
+ \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+ \exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+ \def\@tempa##1#1{\exemple@@@{##1}}%
+ \@tempa
+}
+
+\newcommand\exemple@@@[1]{%
+ \xdef\the@code{#1}%
+ \endgroup
+ \begingroup
+ \fboxrule0.4pt \fboxsep=5pt
+ \let\breakboxparindent\z@
+ \def\bkvz@top{\hrule\@height\fboxrule}%
+ \def\bkvz@bottom{\hrule\@height\fboxrule}%
+ \let\bkvz@before@breakbox\relax
+ \def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
+ \def\bkvz@left{\vrule\@width\fboxrule\kern\fboxsep}%
+ \def\bkvz@right{\kern\fboxsep\vrule\@width\fboxrule}%
+ \breakbox
+ \kern.5ex\relax
+ \begingroup
+ \ttfamily\small\the@code\par
+ \endgroup
+ \kern3pt
+ \hrule height0.1pt width\linewidth depth0.1pt
+ \vskip5pt
+ \newlinechar`\^^M\everyeof{\noexpand}\scantokens{#1}\par
+ \endbreakbox
+ \endgroup
+ \medbreak
+ \endgroup
+}
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+\def\longfrhlstdate@i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\edef\longfrhlstdate{\expandafter\longfrhlstdate@i\skvdate\@nil}
+\def\<#1>{$\langle$\textit{#1}$\rangle$}
+\makeatother
+
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries L'extension pour \TeX/\LaTeX\par \Huge \skvname\par}
+ \bigbreak
+ v \skvver
+ \smallbreak
+ \longfrhlstdate
+ \vskip1.5cm
+ Christian \bsc{Tellechea}\par
+ \texttt{unbonpetit@netc.fr}\par
+ \endgroup
+ \vskip2cm
+ \leftskip=.2\linewidth \rightskip=.2\linewidth \small
+ Cette petite extension est une implémentation d'un système dit à «clé/valeurs» pour \TeX{} ou \LaTeX. Aucune fioriture inutile n'a été codée, elle comporte juste l'essentiel.
+\end{titlepage}
+
+\section{Clés, valeurs}
+Lorsqu'une macro doit recevoir des paramètres dont le nombre n'est pas fixe ou connu, il est commode de procéder par \<clés> et \<valeurs>. Beaucoup d'extensions allant en ce sens existent déjà.
+
+Le but de celle-ci n'est pas de grossir le nombre déjà trop grand de ces extensions, c'est simplement un morceau de l'extension \texttt{hlist} qui a été converti en extension car ce système \<clé>/\<valeurs> est également utilisé par l'extension \texttt{scratch}.\medskip
+
+Voici brièvement les définitions et les limitations des structures mises à disposition :
+
+\begin{itemize}
+ \item une \<clé> est un mot désignant un paramètre; il est formé de préférence avec des caractères de code de catégorie 11 (lettres), 12 (autres caractères sauf la virgule) et 10 (l'espace). On peut cependant y mettre des caractères ayant d'autres codes de catégorie, dans la limitation de ce qui est admis dans la primitive \verb|\detokenize|;
+ \item la syntaxe pour assigner une \<valeur> à une \<clé> est : \hbox{\<clé>=\<valeur>};
+ \item les espaces qui précèdent et qui suivent la \<clé> et la \<valeur> sont ignorés, mais \emph{pas ceux} qui se trouvent à l'intérieur de la \<clé> ou de la \<valeur>;
+ \item une \<valeur> est un \<code> arbitraire;
+ \item si une \<valeur> est entourée d'accolades, ces dernières seront retirées : \verb|<clé>=<valeur>| est donc équivalent à \verb|<clé>={<valeur>}|;
+ \item lorsque plusieurs couples de \<clés>/\<valeurs> doivent être spécifiés, ils sont séparés les uns des autres par des virgules;
+ \item une virgule ne peut figurer dans une \<valeur> que si la virgule est dans un niveau d'accolades; par exemple, \verb|foo=1,5| n'est pas valide car la \<valeur> s'étend jusqu'au 1. Il faudrait écrire \verb|foo={1,5}| pour spécifier une valeur de \verb|1,5|;
+ \item lorsqu'une valeur est entourée de \emph{plusieurs} d'accolades, seul le niveau externe est retiré;
+ \item les \<valeurs> sont stockées \emph{telles qu'elles sont lues} ; en particulier, aucun développement n'est effectué;
+ \item les définitions sont \emph{locales} : par conséquent, toute \<clé> définie ou modifiée dans un groupe est restaurée à son état antérieur à la sortie du groupe;
+ \item des \<clé>/\<valeurs> destinées à une même macro ou à un même usage doivent être regroupées dans un ensemble dont on choisit le nom. Un tel ensemble est appelé \<trousseau>.
+\end{itemize}
+
+\section{Commandes mises à disposition}
+
+\paragraph{La macro \texttt{\char`\\setKVdefault}}
+Cette commande est un préalable à toute utilisation de \<clés> puisqu'elle définit un \<trousseau> contenant des \<clés> et leurs \<valeurs> par défaut.
+
+On écrit
+\begin{center} \verb|\setKVdefault[<trousseau>]{<clé 1>=<valeur 1>,<clé 2>=<valeur 2>,...,<clé i>=<valeur i>}|
+\end{center}
+
+Il faut noter que
+\begin{itemize}
+ \item l'argument entre accolades contenant les \<clés> et les \<valeurs> ne peut pas être vide;
+ \item le nom du \<trousseau>, bien qu'entre crochet, est \emph{obligatoire}, mais il peut être vide bien que cela ne soit pas conseillé;
+ \item si plusieurs \<clés> sont identiques, seule la dernière \<valeur> sera prise en compte;
+ \item les \<valeurs> peuvent être booléennes, auquel cas, elles \emph{doivent} être «\texttt{true}» ou «\texttt{false}» en caractères de catcode 11;
+ \item si une \<valeur> est omise, elle est comprise comme étant «\texttt{true}». Ainsi, écrire
+ \code|\setKVdefault[foo]{mon bool}|
+ est équivalent à
+ \code|\setKVdefault[foo]{mon bool = true}|
+ \item il est \emph{déconseillé} d'exécuter plusieurs fois \verb|\setKVdefault| pour le même \<trousseau>. Si cela est indispensable, il convient de redéfinir \emph{toutes} les \<clés> qui figuraient dans les précédents appels de \verb|\setKVdefault|.
+\end{itemize}
+
+\paragraph{La macro \texttt{\char`\\setKV}}
+Cette macro fonctionne selon les mêmes principes et limitations que \verb|\setKVdefault|, sauf qu'elle redéfinit une ou plusieurs \<clés> dont les \<valeurs> ont précédemment été définies par \verb|\setKVdefault|.
+
+Si une \<clé> n'a pas été prédéfinie par \verb|\setKVdefault|, une erreur sera émise.
+
+\paragraph{La macro \texttt{\char`\\useKV}}
+Cette macro purement développable renvoie la \<valeur> préalablement associée à une \<clé> dans un \<trousseau>:
+\code|\useKV[<trousseau>]{<clé>}|
+
+Il faut noter que
+\begin{itemize}
+ \item si la \<clé> n'a pas été prédéfinie par \verb|\setKVdefault|, une erreur sera émise;
+ \item si la \<clé> est booléenne, le texte «\texttt{true}» ou «\texttt{false}» sera renvoyé;
+ \item il faut 2 développements à \verb|\useKV[<trousseau>]{<clé>}| pour donner la \<valeur> associée à la \<clé>.
+\end{itemize}
+
+\exemple|\setKVdefault[foo]{nombre = 5 , lettres= AB \textit{CD} , mon bool}
+a) \useKV[foo]{nombre}.\qquad b) \useKV[foo]{lettres}.\qquad c) \useKV[foo]{mon bool}.\par
+\setKV[foo]{lettres = X Y Z \textbf{123} }
+a) \useKV[foo]{nombre}.\qquad b) \useKV[foo]{lettres}.\qquad c) \useKV[foo]{mon bool}.|
+
+\paragraph{La macro \texttt{\char`\\useKVdefault}}
+L'exécution de cette macro par \verb|\useKVdefault[<trousseau>]| réinitialise toutes les \<clés> du \<trousseau> aux \<valeurs> qui ont été définies lors de l'exécution \verb|\setKVdefault|.
+
+\paragraph{La macro \texttt{\char`\\ifboolKV}}
+Cette macro permet, selon la valeur d'une \<clé booléenne>, d'exécuter un des deux \<codes> donnés. La syntaxe est
+\code|\ifboolKV[<trousseau>]{<clé>}{<code si "true">}{<code si "false>}|
+
+La macro est purement développable, elle nécessite 2 développements pour donner l'un des deux codes, et exige que la \<clé> soit booléenne sans quoi un message d'erreur est émis.
+
+\paragraph{La macro \texttt{\char`\\showKV}}
+Cette commande écrit dans le fichier \texttt{log} la \<valeur> assignée à une \<clé> d'un \<trousseau>:
+\code|\showKV[<trousseau>]{<clé>}|
+
+Si la \<clé> n'est pas définie, «\texttt{not defined}» est affiché dans le fichier log.
+
+\section{Un exemple d'utilisation}
+Voici comment on pourrait programmer une macro qui affiche un cadre sur une ligne. Pour cela les \<clés> suivantes seront utilisées:
+\begin{itemize}
+ \item le booléen \texttt{inline} qui affichera le cadre dans le texte s'il est vrai et sur une ligne dédié s'il est faux;
+ \item \texttt{left code} et \texttt{right code} qui sont deux codes exécutés avant et après le cadre si le booléen est faux (par défaut : \verb|\hfill| et \verb|\hfill| pour un centrage sur la ligne);
+ \item \texttt{sep} qui est une dimension mesurant la distance entre le texte et le cadre (par défaut \texttt{3pt});
+ \item \texttt{width} qui est la largeur des traits du cadre (par défaut \texttt{0.5pt}).
+\end{itemize}
+
+\exemple|\setKVdefault[frame]{inline , left code = \hfill, right code = \hfill, sep = 3pt, width=0.5pt }
+\newcommand\frametxt[2][]{%
+ \setKV[frame]{#1}% lit les arguments optionnels
+ \ifboolKV[frame]{inline}{}{\par\noindent\useKV[frame]{left code}}%
+ \fboxsep=\useKV[frame]{sep}\relax
+ \fboxrule=\useKV[frame]{width}\relax
+ \fbox{#2}%
+ \ifboolKV[frame]{inline}{}{\useKV[frame]{right code}\null\par}%
+}
+Un essai en ligne par défaut \frametxt{essai} puis un autre \frametxt[sep=5pt,width=2pt]{essai}
+et un dernier \frametxt[sep=0.5pt]{essai}.
+
+\useKVdefault[frame]% revenir au valeurs par défaut
+Un essai centré \frametxt[inline = false]{essai centré}
+un autre fer à gauche \frametxt[left code={}]{essai à gauche}
+un dernier indenté \frametxt[left code=\hskip 5em, right code={}, sep=1pt, width=2pt]{essai indenté}|
+
+
+\section{Le code}
+Le code ci-dessous est l'exact verbatim du fichier \verb|simplekv.tex| :
+
+\lstinputlisting[
+ language=TeX,
+ moretexcs={unless,ifcsname,ifdefined,detokenize,numexpr,dimexpr,glueexpr,unexpanded},
+ basicstyle=\small\ttfamily\color{black!25},
+ identifierstyle=\bfseries\color{white},%
+ backgroundcolor=\color{black!85},
+ keywordstyle=\bfseries\color{orange},
+ commentstyle=\color{cyan!66},
+ columns=fixed,
+ alsoletter={\_},
+ tabsize=2,
+ extendedchars=true,
+ showspaces=false,
+ showstringspaces=false,
+ numbers=left,
+ numberstyle=\tiny\ttfamily\color{black},
+ breaklines=true,
+ prebreak={\hbox{$\rhookswarrow$}},
+ breakindent=3em,
+ breakautoindent=true,
+ xleftmargin=1em,
+ xrightmargin=0pt,
+ lineskip=0pt,
+ numbersep=1em,
+ classoffset=1,
+ alsoletter={\_},
+ morekeywords={setKVdefault,setKV,useKVdefault,useKV,ifboolKV,},
+ keywordstyle=\bfseries\color{red!85!black},
+ classoffset=0,
+ ]{simplekv.tex}
+\end{document} \ No newline at end of file
diff --git a/macros/generic/simplekv/simplekv.sty b/macros/generic/simplekv/simplekv.sty
new file mode 100644
index 0000000000..979276c0a6
--- /dev/null
+++ b/macros/generic/simplekv/simplekv.sty
@@ -0,0 +1,4 @@
+% !TeX encoding = ISO-8859-1
+\input simplekv.tex
+\ProvidesPackage{simplekv}[\skvdate\space v\skvver\space Simple keyval package (CT)]
+\endinput \ No newline at end of file
diff --git a/macros/generic/simplekv/simplekv.tex b/macros/generic/simplekv/simplekv.tex
new file mode 100644
index 0000000000..d4ca63d9eb
--- /dev/null
+++ b/macros/generic/simplekv/simplekv.tex
@@ -0,0 +1,329 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code commenté de l'extension "simplekv"
+%
+% IMPORTANT : pour que les commentaires s'affichent correctement,
+% ouvrir ce fichier avec l'encodage ISO-8859-1
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\skvname {simplekv} %
+\def\skvver {0.1} %
+% %
+\def\skvdate {2017/08/08} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%
+% % http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% --------------------------------------------------------------------
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Christian Tellechea
+% Copyright : Christian Tellechea 2017
+% email: unbonpetit@netc.fr
+% Commentaires, suggestions et signalement de bugs bienvenus !
+% Comments, bug reports and suggestions are welcome.
+% Copyright: Christian Tellechea 2017
+% --------------------------------------------------------------------
+% L'extension simplekv est composée des 5 fichiers suivants :
+% - code : simplekv (.tex et .sty)
+% - manuel en français : simplekv-fr (.tex et .pdf)
+% - fichier lisezmoi : README
+% --------------------------------------------------------------------
+
+\expandafter\edef\csname skv_restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax}
+\catcode`\_11
+
+%################################################
+%################################################
+% Cette macro est équivalente à 0 et sert notamment à stopper le développement
+% de \romannumeral
+\chardef\skv_stop 0
+
+% Définition du quark, notamment inséré à la fin d'une liste pour en reconnaitre
+% la fin et stopper la récursivité
+\def\skv_quark{\skv_quark}
+
+% Voici les macros habituelles de sélection d'arguments
+\long\def\skv_first#1#2{#1}
+\long\def\skv_second#1#2{#2}
+
+% Voici la macro pour 1-développer ou 2-développer le 2e argument (le 1er étant
+% dépouillé des accolades)
+% \skv_exparg{<a>}{<b>} devient <a>{<b>}
+% \skv_eearg{<a>}{<b>} devient <a>{**<b>}
+\long\def\skv_exparg#1#2{\expandafter\skv_exparg_i\expandafter{#2}{#1}}%
+\long\def\skv_eearg#1#2{\expandafter\expandafter\expandafter\skv_exparg_i\expandafter\expandafter\expandafter{#2}{#1}}%
+\long\def\skv_exparg_i#1#2{#2{#1}}
+
+% Et la macro pour 1-développer le 2e argument (le 1er et le 2e argument sont
+% dépouillés des accolades)%
+% \skv_expafter{<a>}{<b>} devient <a><*b>
+\long\def\skv_expafter#1#2{\expandafter\skv_expafter_i\expandafter{#2}{#1}}
+\long\def\skv_expafter_i#1#2{#2#1}
+
+% Enfin, la macro pour former le nom du 2e argument (le 1er est dépouillé des
+% accolades)
+% \skv_argcsname{<a>}{<b>} devient <a>\<b>
+\def\skv_argcsname#1#{\skv_argcsname_i{#1}}
+\def\skv_argcsname_i#1#2{\skv_expafter{#1}{\csname#2\endcsname}}
+
+\def\skv_eaddtomacro#1#2{\skv_exparg{\skv_exparg{\def#1}}{\expandafter#1#2}}
+
+%################################################
+%################ macros de test ################
+%################################################
+% Voici quelques macros à sélection d'arguments pour les tests
+\def\skv_ifcsname#1{\ifcsname#1\endcsname\expandafter\skv_first\else\expandafter\skv_second\fi}
+\long\def\skv_ifx#1{\ifx#1\expandafter\skv_first\else\expandafter\skv_second\fi}
+\long\def\skv_ifempty#1{\skv_exparg\skv_ifx{\expandafter\relax\detokenize{#1}\relax}}
+
+% Ces macros sont utiles pour \skv_removeextremespaces, qui retire les
+% espaces extrêmes de son argument
+% Voir codes 320-324 (http://progtex.fr/wp-content/uploads/2014/09/code.txt)
+% et pages 339-343 de "Apprendre à programmer en TeX"
+\long\def\skv_ifspacefirst#1{\expandafter\skv_ifspacefirst_i\detokenize{#10} \_nil}
+\long\def\skv_ifspacefirst_i#1 #2\_nil{\skv_ifempty{#1}}
+\expandafter\def\expandafter\skv_gobspace\space{}
+\def\skv_removefirstspaces{\romannumeral\skv_removefirstspaces_i}
+\long\def\skv_removefirstspaces_i#1{\skv_ifspacefirst{#1}{\expandafter\skv_removefirstspaces_i\expandafter{\skv_gobspace#1}}{\skv_stop#1}}
+\begingroup
+ \catcode0 12
+ \long\gdef\skv_removelastspaces#1{\romannumeral\skv_removelastspaces_i#1^^00 ^^00\_nil}
+ \long\gdef\skv_removelastspaces_i#1 ^^00{\skv_removelastspaces_ii#1^^00}
+ \long\gdef\skv_removelastspaces_ii#1^^00#2\_nil{\skv_ifspacefirst{#2}{\skv_removelastspaces_i#1^^00 ^^00\_nil}{\skv_stop#1}}
+\endgroup
+\long\def\skv_removeextremespaces#1{%
+ \romannumeral\expandafter\expandafter\expandafter\skv_removelastspaces\expandafter\expandafter\expandafter
+ {\expandafter\expandafter\expandafter\skv_stop\skv_removefirstspaces{#1}}%
+}
+
+%################################################
+%############## système clé/valeur ##############
+%################################################
+% Ceci est le booléen indiquant si la lecture de <clés>=<valeurs> définit les
+% <clés> _par défaut_ ou qu'il s'agit d'une _redéfinition_ des <clés> déjà
+% existantes
+\newif\ifskv_default
+
+% macros chapeau appelant la même macro avec le booléen préalablement défini
+\def\setKVdefault{\skv_defaulttrue\skv_readKV}
+\def\setKV{\skv_defaultfalse\skv_readKV}
+
+% L'argument obligatoire #1 est le nom du <trousseau> et #2 est l'ensemble
+% des <clés>=<valeurs>
+\def\skv_readKV[#1]#2{%
+ \skv_ifempty{#2}
+% Si aucune <clés>=<valeurs> alors qu'on définit les <valeurs> par défaut,
+% message d'erreur et on s'arrête là
+ {\ifskv_default\errmessage{No key/val found, no default key/val defined}\fi}
+% Sinon, initialiser à <vide> la macro \skv_[<trousseau>] uniquement si on
+% créé les <valeurs> par défaut
+ {\ifskv_default\skv_argcsname\let{skv_[#1]}\empty\fi
+% Puis on passe aux choses sérieuses, on va lire un par un tous les éléments
+% <clé>=<valeur> (contenus dans #2) en mettant le quark comme dernier couple
+% pour montrer la fin de la liste
+ \skv_readKV_i[#1]#2,\skv_quark,%
+ }%
+}
+
+\def\skv_readKV_i[#1]#2,{%
+% #2 est le premier couple "<clé>=<valeur>" de la liste qui reste à traiter :
+% tout d'abord, on se débarrasse des espaces extrêmes
+ \skv_eearg{\def\__temp}{\skv_removeextremespaces{#2}}%
+% Si ce qui en résulte est égal au <quark>,
+ \skv_ifx{\__temp\skv_quark}
+% alors, on a fini et on ne fait rien (fin du processus)
+ {}
+% Sinon, si ce qui en résulte est vide (le couple "<clé>=<valeur>" était donc
+% vide ou composé d'un espace)
+ {\skv_ifx{\__temp\empty}
+% On a fini et on ne fait rien (fin du processus)
+ {}
+% dans le cas contraire, on va isoler la <clé> et la <valeur> du couple lu en
+% prenant soin de mettre à la fin "=<quark>" pour se prémunir du cas où
+% "<clé>=<valeur>" ne contient que la "<clé>" et pas de signe "=", ce qui
+% ferait planter la macro à arguments délimités
+ {\expandafter\skv_find_kv\__temp=\skv_quark\_nil[#1]%
+ }%
+% Lorsque la <clé> et la <valeur> est trouvée et stockée, recommencer et aller
+% lire le prochain couple "<clé>=<valeur>"
+ \skv_readKV_i[#1]%
+ }%
+}
+
+% Voici la macro à arguments délimités à qui on a transmis
+% <clé>=<valeur>=<quark> (si <clé>=<valeur> est l'élément lu)
+% ou
+% <clé>=<quark> (si <clé> est seule)
+% et qui va isoler la <clé> de la <valeur>.
+\def\skv_find_kv#1=#2\_nil[#3]{%
+% #1 est ce qui se trouve avant le _premier_ signe "=" et
+% #2 est ce qui se trouve entre le premier signe "=" et le \_nil
+% Pour la <clé>, pas de problème, c'est _obligatoirement_ ce qui est avant le
+% signe "=", que ce signe soit présent dans le couple lu ou pas puisqu'on y a
+% rajouté "=<quark>".
+% On élimine les espaces extrêmes pour obtenir la <clé> définitive stockée dans
+% \__key (il faut 2-développer \skv_removeextremespaces pour qu'elle donne son
+% argument sans espace extrême)
+ \edef\__key{\detokenize\expandafter\expandafter\expandafter{\skv_removeextremespaces{#1}}}%
+% Pour la <valeur>, on lui ôte d'abord les espaces extrêmes
+ \skv_eearg{\def\__val}{\skv_removeextremespaces{#2}}%
+ \skv_ifx{\__val\skv_quark}
+% Si elle est égale au <quark>, alors la <valeur> vaut "true"
+ {\def\__val{true}}%
+% Sinon, ôter "=<quark>" de la fin de l'argument #2, éliminer les espaces
+% extrêmes de ce qui en résulte et stocker le tout dans \__val (tout ceci est
+% effectué par la macro \skv_find_val <valeur>=<quark>)
+ {\skv_find_val#2}%
+% Si on lit les <clés>=<valeurs> par défaut,
+ \ifskv_default
+% assigner à la macro "\skv_[<trousseau>]_<clé>" la <valeur> trouvée
+ \skv_argcsname\let{skv_[#3]_\detokenize\expandafter{\__key}}\__val
+% Puis ajouter à la macro "\skv_[<trousseau>]", qui a été préalablement
+% initialisée à <vide> :
+% \def\skv_[<trousseau>]_<clé>{<valeur>}
+ \skv_argcsname\skv_eaddtomacro{skv_[#3]}%
+ {\expandafter\def\csname skv_[#3]_\detokenize\expandafter{\__key}\expandafter\endcsname\expandafter{\__val}}%
+% C'est selon ce hashage que sont enregistrés les couples <clé>/<valeur> : les
+% <clés> sont contenues dans les noms des macros tandis que les <valeurs> sont
+% les textes de remplacement de ces macros.
+% C'est rapide et simple :
+% a) pour trouver une <valeur> d'après sa <clé>, il suffit de développer la
+% macro \skv_[<trousseau>]_<clé>
+% b) pour redéfinir une <clé>, il suffit de redéfinir cette macro avec la
+% nouvelle <valeur>
+% c) il est facile de vérifier qu'une <clé> existe en vérifiant que la macro
+% associée est définie, la primitive \ifcsname le fait très bien
+% d) en revanche, on ne peut pas faire de recherche _inverse_ de façon
+% pratique : il est en effet plus difficile de trouver la (ou les) <clé>
+% contenant une <valeur> donnée, mais cette limitation n'a pas grande
+% importance ici (je ne sais pas si les autres systèmes de <clé>/<valeur>
+% sont programmés de telle sorte que cela soit simple...)
+% Bref, la macro "\skv_[<trousseau>]" contient donc _toutes_ les définitions
+% des macros définissant les <clés>/<valeurs> _par défaut_ et exécuter
+% "\skv_[<trousseau>]" remet donc toutes les <clés> à leur <valeur> par défaut.
+ \else
+% Dans le cas où on _lit_ des nouvelles <valeurs> pour des <clés>
+ \skv_ifcsname{skv_[#3]_\__key}
+% Si la <clé> existe (ssi la macro "\skv_[<trousseau>]_<clé>" est définie),
+% alors assigner la <valeur> à cette macro
+ {\skv_argcsname\let{skv_[#3]_\__key}\__val}%
+% Sinon, émettre un message d'erreur et ne rien faire de plus
+ {\errmessage{Key "\__key" is not defined: nothing is modified}}%
+ \fi
+}
+
+% Cette macro à qui on a transmis "<valeur>=<quark>" ne garde que <valeur>, en
+% ôte les espaces extrêmes et stocke le résultat dans \__val
+\def\skv_find_val#1=\skv_quark{\skv_eearg{\def\__val}{\skv_removeextremespaces{#1}}}
+
+% Cette macro remet toutes les <clés> à leur <valeurs> par défaut en exécutant
+% la macro "\skv_[<trousseau>]"
+\def\useKVdefault[#1]{%
+ \skv_ifcsname{skv_[#1]}
+ {\csname skv_[#1]\endcsname}
+% Si la macro "\skv_[<trousseau>]" n'existe pas, message d'erreur
+ {\errmessage{Undefined set of keys "#1"}}%
+}
+
+% Cette macro donne la <valeur> correspondant à la <clé> contenue dans #2
+\def\useKV[#1]#2{%
+% Avec \romannumeral, la <valeur> sera obtenue après _2_ développements de
+% \useKV[<trousseau>]{<clé>}
+ \romannumeral\skv_ifempty{#2}
+% Si la <clé> est vide, message d'erreur (il ne peut y avoir de <valeur>
+% associée à une <clé> vide)
+ {\skv_stop\errmessage{Key name missing}}
+ {\skv_ifcsname{skv_[#1]_\skv_removeextremespaces{#2}}
+% Si la macro "\skv_[<trousseau>]_<clé>" existe, 2-développer le \csname pour
+% avoir la <valeur>
+ {\expandafter\expandafter\expandafter\skv_stop\csname skv_[#1]_\skv_removeextremespaces{#2}\endcsname}
+% Sinon, message d'erreur
+ {\skv_stop\errmessage{Key "\skv_removeextremespaces{#2}" not defined}}%
+ }%
+}
+
+% Voici une macro purement développable qui teste si #2 (la <clé> du <trousseau>
+% #1) est égale à "true" ou à "false" et selon l'issue, exécute le 1er ou 2e
+% argument qui suit (arguments appelés <vrai> et <faux>)
+\def\ifboolKV[#1]#2{%
+% Cette macro donnera un des 2 arguments <vrai> ou <faux> en _2_ développements
+% grâce au \romannumeral
+ \romannumeral\skv_ifempty{#2}
+% Si la <clé> est vide, message d'erreur
+ {\skv_stop\errmessage{Key name missing}\skv_second}
+ {\skv_ifcsname{skv_[#1]_\skv_removeextremespaces{#2}}
+% Si la <clé> débarrassée de ses espaces extrêmes existe, tester son contenu
+ {\skv_eearg\ifboolKV_i{\csname skv_[#1]_\skv_removeextremespaces{#2}\endcsname}}
+% Sinon, message d'erreur
+ {\skv_stop\errmessage{Key "\skv_removeextremespaces{#2}" not defined}\skv_second}%
+ }%
+}
+
+% Cette macro teste si #1, qui est une <valeur>, vaut "true" ou "false"
+\def\ifboolKV_i#1{%
+% Tester d'abord si elle vaut "true"
+ \skv_ifargtrue{#1}
+ {\expandafter\skv_stop\skv_first}
+ {\skv_ifargfalse{#1}
+% Puis si elle vaut "false"
+ {\expandafter\skv_stop\skv_second}
+% Si ni l'un ni l'autre, la <valeur> n'est pas un booléen acceptable
+ {\skv_stop\errmessage{Value "#1" is not a valid boolean}\skv_second}%
+ }%
+}
+
+% La macro \skv_ifargtrue{<argument>} teste de façon purement développable si
+% <argument> vaut "true" ou "false".
+% Pour cela, on transmet à \skv_ifargtrue_i l'argument "<argument>true" qui est
+% délimité par \_nil
+\def\skv_ifargtrue#1{\skv_ifargtrue_i#1true\_nil}
+% Dans la macro \skv_ifargtrue_i, l'argument #1 est ce qui se trouve avant
+% "true" dans "<argument>true" :
+% - s'il n'est pas vide, sélectionner l'argument <faux>
+% - s'il est vide, cela signifie que <argument> commence par "true" ; il est
+% donc de la forme "true<autre>"
+% L'argument #2 est ce qui se trouve après "true" dans "true<autre>true",
+% c'est donc "<autre>true".
+% Pour être sûr que <autre> est <vide>, on transmet "<autre>true" à
+% \skv_ifargtrue_ii qui teste si la réunion de ce qui est avant le
+% premier "true" et ce qui est après est <vide>
+\def\skv_ifargtrue_i#1true#2\_nil{\skv_ifempty{#1}{\skv_ifargtrue_ii#2\_nil}\skv_second}
+\def\skv_ifargtrue_ii#1true#2\_nil{\skv_ifempty{#1#2}}
+
+% On procède de même pour tester "false"
+\def\skv_ifargfalse#1{\skv_ifargfalse_i#1false\_nil}
+\def\skv_ifargfalse_i#1false#2\_nil{\skv_ifempty{#1}{\skv_ifargfalse_ii#2\_nil}\skv_second}
+\def\skv_ifargfalse_ii#1false#2\_nil{\skv_ifempty{#1#2}}
+
+\def\showKV[#1]#2{%
+% Ecrire dans le fichier log "Key [<trousseau>]<clé>="
+ \immediate\write-1 {Key [#1]\skv_removeextremespaces{#2}=%
+ \skv_ifcsname{skv_[#1]_\skv_removeextremespaces{#2}}
+% si la <clé> est définie, prendre le \meaning de la macro correspondante
+ {\expandafter\expandafter\expandafter\skv_show\expandafter
+ \meaning\csname skv_[#1]_\skv_removeextremespaces{#2}\endcsname}
+% Sinon, afficher
+ {not defined}%
+ }%
+}
+% Mange ce qui se trouve jusqu'à "->" dans le développement de \meaning
+\def\skv_show#1->{}
+\skv_restorecatcode
+\endinput
+
+Versions :
+ _____________________________________________________________________________
+| Version | Date | Changements |
+|-----------------------------------------------------------------------------|
+| 0.1 | 08/08/2017 | Première version |
+|-----------------------------------------------------------------------------|
diff --git a/macros/generic/systeme/README b/macros/generic/systeme/README
new file mode 100644
index 0000000000..d7310e3496
--- /dev/null
+++ b/macros/generic/systeme/README
@@ -0,0 +1,27 @@
+ L'extension
+ systeme
+
+ v0.32
+
+ 13 janvier 2019
+
+Author : Christian Tellechea
+Email : unbonpetit@netc.fr (CT)
+ Commentaires, signalements de bugs et
+ suggestions bienvenus
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+ R\'esum\'é
+
+Cette extension permet d'entrer un syst\`eme d'\'equations ou
+d'in\'egalit\'es lin\'éaires sous forme intuitive et d'obtenir un
+rendu o\`u les termes et les signes sont align\'es verticalement
+
+----------------------------------------------------------------------
+ Abstract
+
+This package allows you to enter systems of linear equations or
+inequalities in a intuitive way, and produces output where the terms
+and signs are aligned vertically.
diff --git a/macros/generic/systeme/systeme.sty b/macros/generic/systeme/systeme.sty
new file mode 100644
index 0000000000..a86309a80f
--- /dev/null
+++ b/macros/generic/systeme/systeme.sty
@@ -0,0 +1,5 @@
+\def\SYSstyfile{0}
+\RequirePackage{xstring}
+\input systeme.tex
+\ProvidesPackage\SYSname[\SYSdate\space v\SYSver\space Mise en forme de systemes d'equations (CT)]
+\endinput \ No newline at end of file
diff --git a/macros/generic/systeme/systeme.tex b/macros/generic/systeme/systeme.tex
new file mode 100644
index 0000000000..9bda0ef046
--- /dev/null
+++ b/macros/generic/systeme/systeme.tex
@@ -0,0 +1,689 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "systeme"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\SYSname {systeme} %
+\def\SYSver {0.32} %
+% %
+\def\SYSdate {2019/01/13} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Author : Christian Tellechea %
+% Status : Maintained %
+% Email : unbonpetit@netc.fr %
+% Package URL: https://www.ctan.org/pkg/systeme %
+% Bug tracker: https://framagit.org/unbonpetit/systeme/issues %
+% Repository : https://framagit.org/unbonpetit/systeme/tree/master %
+% Copyright : Christian Tellechea 2011-2019 %
+% Licence : Released under the LaTeX Project Public License v1.3c %
+% or later, see http://www.latex-project.org/lppl.txt %
+% Files : 1) systeme.tex %
+% 2) systeme.sty %
+% 3) systeme-fr.tex %
+% 4) systeme-fr.pdf %
+% 5) README %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\unless\ifdefined\SYSstyfile
+ \immediate\write-1 {Package: \SYSname\space\SYSdate\space\space v\SYSver\space\space Saisie naturelle de systemes d'equations}%
+\fi
+
+\expandafter\edef\csname SYS_restorecatcode\endcsname{\catcode\number`\_=\number\catcode`\_\relax}
+\catcode`\_11
+
+\begingroup
+ \catcode`\_8
+ \gdef\SYSunder{_}
+\endgroup
+
+\unless\ifdefined\xstringversion
+ \def\SYS_nextaction{\input xstring.tex\relax}%
+ \expandafter\SYS_nextaction
+\fi
+
+\newtoks\SYS_systemecode
+\newtoks\SYS_systempreamble
+
+\newif\ifSYS_firstterm
+\newif\ifSYS_sortvariable
+\newif\ifSYS_star
+\newif\ifSYS_extracol
+\newif\ifSYS_autonum
+\newif\ifSYS_followautonum
+\newif\ifSYS_constterm
+
+\newcount\SYSeqnum
+
+\long\def\SYS_execarg#1{#1}
+\long\def\SYS_gobtwoargs#1#2{}
+\def\SYS_addtotok#1#2{#1\expandafter{\the#1#2}}
+\def\SYS_expaddtotok#1#2{\xs_exparg{\SYS_addtotok#1}{#2}}
+\def\SYS_addtotab{\SYS_addtotok\SYS_systemecode}
+\def\SYS_cslet#1{\expandafter\let\csname#1\endcsname}
+\def\SYS_letcs#1#2{\expandafter\let\expandafter#1\csname#2\endcsname}
+\def\SYS_firstinlist#1,#2\_nil{#1}
+\def\SYS_removefirstinlist#1,{}
+\def\SYS_ifinstr#1#2{%
+ \def\SYS_ifinstr_i##1#2##2\_nil{\xs_ifempty{##2}\xs_execsecond\xs_execfirst}%
+ \SYS_ifinstr_i#1\__nil#2\_nil
+}
+
+\ifdefined\usepackage\else% on n'utilise pas LaTeX ?
+ \newskip\normalbaselineskip
+ \normalbaselineskip=12pt
+\fi
+
+% définit ce qu'est le séparateur des équations par défaut
+\def\syseqsep{\def\SYS_defaulteqsep}
+\syseqsep{,}
+
+% définit le coefficient pour l'espacement interligne
+\def\syslineskipcoeff{\def\SYS_lineskipcoeff}
+\syslineskipcoeff{1.25}
+
+% définit le signe qui marquera une colonne supplémentaire à droite du tableau
+\def\sysextracolsign{\def\SYS_extracolsign}
+\xs_exparg\sysextracolsign{\string @}% on définit l'arobas avec le bon catcode.
+
+% définit ce qui sera inséré au début et à la fin de la colonne supplémentaire
+\def\syscodeextracol#1#2{\def\SYS_extracolstart{#1}\def\SYS_extracolend{#2}}
+\syscodeextracol{\kern1.5em$}{$}
+
+\def\sysreseteqnum{\global\SYSeqnum0 }
+
+% définit l'autonumérotation
+\def\sysautonum{%
+ \xs_ifstar
+ {\SYS_followautonumtrue\SYS_autonum}
+ {\SYS_followautonumfalse\SYS_autonum}%
+}
+
+\def\SYS_autonum#1{%
+ \xs_ifempty{#1}
+ {\SYS_extracolfalse
+ \SYS_autonumfalse
+ }
+ {\SYS_extracoltrue
+ \SYS_autonumtrue
+ \def\SYS_autonumarg{#1}%
+ }%
+}
+
+% dimension qui sera ajoutée à la hauteur et à la profondeur du strutup ou strutdown
+% inséré à la première et la dernière équation
+\def\SYS_extrastrutdim{1.5pt}
+
+% liste des signes devant être compris comme signe d'égalité séparant les 2 membres de l'équation
+\def\SYS_equalsignlist{<=,>=,=,<,>,\leq,\geq,\leqslant,\geqslant}
+
+\def\sysaddeqsign#1{%
+ \saveexpandmode\expandarg
+ \IfSubStr{\expandafter,\SYS_equalsignlist,}{,#1,}
+ {}
+ {\xs_exparg{\def\SYS_equalsignlist}{\SYS_equalsignlist,#1}}%
+ \restoreexpandmode
+}
+
+% enlève l'item #2 de la sc #1 qui contient une liste
+\def\SYS_removeiteminlist#1#2{%
+ \saveexpandmode\expandarg
+ \IfSubStr{\expandafter,#1,}{,#2,}
+ {\StrSubstitute{\expandafter\_nil\expandafter,#1,\_nil}{,#2,},[#1]%
+ \StrDel#1{\noexpand\_nil,}[#1]%
+ \StrDel#1{,\_nil}[#1]%
+ }%
+ {}%
+ \restoreexpandmode
+}
+
+\def\sysremoveeqsign#1{%
+ \SYS_removeiteminlist\SYS_equalsignlist{#1}%
+ \SYS_removeiteminlist\SYS_equivsignlist{#1}%
+}
+
+% définit le signe d'égalité #1 comme devant être remplacé par #2 lors de l'affichage
+\def\sysequivsign#1#2{%
+ \IfSubStr\SYS_equivsignlist{\noexpand#1,}
+ {}
+ {\xs_exparg{\def\SYS_equivsignlist}{\SYS_equivsignlist#1,}}%
+ \expandafter\def\csname SYS_equivsign_\string#1\endcsname{#2}%
+}
+
+\def\SYS_equivsignlist{}
+
+\sysequivsign{<=}\leq
+\sysequivsign{>=}\geq
+
+% #1 est l'équation courante. La macro la sépare en 2 membres -> \SYS_leftmember et \SYS_rightmember
+% le signe de séparation entre les 2 membres se trouve dans \SYS_currenteqsign
+\def\SYS_splitinmembers#1{%
+ \def\SYS_leftmember{#1}%
+ \let\SYS_currenteqsign\empty
+ \let\SYS_rightmember\empty
+ \xs_exparg\SYS_splitinmembers_i{\SYS_equalsignlist,}% parcourt \SYS_equalsignlist pour séparer en 2 membres
+ \IfSubStr{\expandafter,\SYS_equivsignlist}{\expandafter,\SYS_currenteqsign,}% si le signe est dans la liste des substitutions
+ {\SYS_letcs\SYS_currenteqsign{SYS_equivsign_\detokenize\expandafter{\SYS_currenteqsign}}}% le remplacer
+ {}%
+}
+
+% #1 est la liste des signes d'égalité
+\def\SYS_splitinmembers_i#1{%
+ \xs_ifempty{#1}
+ {}
+ {\IfSubStr\SYS_leftmember{\SYS_firstinlist#1\_nil}% si l'équation contient un des signes
+ {\xs_exparg{\def\SYS_currenteqsign}{\SYS_firstinlist#1\_nil}% sauvagarde le signe
+ \StrBehind\SYS_leftmember\SYS_currenteqsign[\SYS_rightmember]% procède à la séparation
+ \StrBefore\SYS_leftmember\SYS_currenteqsign[\SYS_leftmember]% en deux membres
+ }%
+ {\xs_exparg\SYS_splitinmembers_i{\SYS_removefirstinlist#1}% sinon, recommencer en enlevant le 1er signe
+ }%
+ }%
+}
+
+% analyse une équation et la découpe en termes et signes
+\def\SYS_spliteqinterms#1{%
+ \IfSubStr{\noexpand#1}\SYS_extracolsign% y a t-il un signe de colonne supplémentaire ?
+ {\StrBefore{\noexpand#1}\SYS_extracolsign[\SYS_leftmember]%
+ \StrBehind{\noexpand#1}\SYS_extracolsign[\SYS_rightmember]%
+ \SYS_cslet{SYS_extracol_\SYS_eqnumber}\SYS_rightmember
+ \SYS_extracoltrue
+ }%
+ {\def\SYS_leftmember{#1}%
+ }%
+ \xs_exparg\SYS_splitinmembers{\SYS_leftmember}% trouver les membres de gauche et droite et le signe qui les sépare
+ \xs_ifx{\SYS_currenteqsign\empty}
+ {}%
+ {\SYS_cslet{SYS_eqsign_\SYS_eqnumber}\SYS_currenteqsign}% stocker ce signe s'il existe
+ \IfBeginWith\SYS_leftmember\space
+ {\StrGobbleLeft\SYS_leftmember1[\SYS_leftmember]}
+ {}% pas d'espace pour commencer le membre de gauche
+ \IfBeginWith\SYS_leftmember+% amputer le membre de gauche du premier signe et le stocker temporairement s'il existe et sinon...
+ {\StrSplit\SYS_leftmember1\SYS_currentsign\SYS_leftmember
+ }%
+ {\IfBeginWith\SYS_leftmember-%
+ {\StrSplit\SYS_leftmember1\SYS_currentsign\SYS_leftmember}%
+ {\def\SYS_currentsign{+}}% ce signe est "+"
+ }%
+ \SYS_spliteqinterms_i1%
+ \SYS_cslet{SYS_right_\SYS_eqnumber}\SYS_rightmember
+}
+
+\def\SYS_spliteqinterms_i#1{%
+ \StrPosition\SYS_leftmember+[\SYS_posplus]%
+ \StrPosition\SYS_leftmember-[\SYS_posminus]%
+ \xs_ifnum{\numexpr\SYS_posplus+\SYS_posminus=0 }% il n'y a ni "+" ni "-"
+ {\let\SYS_currentterm\SYS_leftmember% prendre tout ce qui reste
+ \SYS_assignterm% et assigner ce dernier terme avec le dernier signe trouvé
+ }
+ {\edef\SYS_nextsign{\ifnum\SYS_posplus=0 -\else\ifnum\SYS_posminus=0 +\else\ifnum\SYS_posplus<\SYS_posminus+\else-\fi\fi\fi}% décider de ce qu'est le prochain signe
+ \StrBefore\SYS_leftmember\SYS_nextsign[\SYS_currentterm]% prendre ce qu'il y a avant
+ \StrBehind\SYS_leftmember\SYS_nextsign[\SYS_leftmember]% et stocker ce qu'il y a ensuite pour après
+ \SYS_assignterm% assigner ce qu'il y a avant avec le dernier signe trouvé
+ \let\SYS_currentsign\SYS_nextsign% on continue, le prochain signe devient le signe courant
+ \xs_exparg\SYS_spliteqinterms_i{\number\numexpr#1+1}%
+ }%
+}
+
+\def\SYS_assignterm{%
+ \xs_exparg\SYS_findletter{\SYS_currentterm}% trouver le nom de la variable
+ \xs_ifx{\SYS_letterfound\empty}
+ {\SYS_consttermtrue
+ \ifcsname SYS_term_const_\SYS_eqnumber\endcsname% si terme constant déjà rencontré, l'ajouter à celui qui existe
+ \xs_eaddtomacro\SYS_currentsign\SYS_currentterm
+ \expandafter\xs_eaddtomacro\csname SYS_term_const_\SYS_eqnumber\endcsname{\SYS_currentsign}%
+ \else
+ \SYS_cslet{SYS_sign_const_\SYS_eqnumber}\SYS_currentsign% sinon procéder aux assignations
+ \SYS_cslet{SYS_term_const_\SYS_eqnumber}\SYS_currentterm
+ \fi
+ }
+ {\ifcsname SYS_term_\detokenize\expandafter{\SYS_letterfound}_\SYS_eqnumber\endcsname
+ \errmessage{Package systeme Error: l'inconnue "\detokenize\expandafter{\SYS_letterfound}" a deja ete trouvee dans l'équation !}%
+ \fi
+ \ifSYS_sortvariable
+ \SYS_insletter\SYS_letterfound% l'insérer si besoin dans la liste ordonnée des variables
+ \fi
+ \SYS_cslet{SYS_sign_\detokenize\expandafter{\SYS_letterfound}_\SYS_eqnumber}\SYS_currentsign% procéder aux assignations
+ \SYS_cslet{SYS_term_\detokenize\expandafter{\SYS_letterfound}_\SYS_eqnumber}\SYS_currentterm
+ }%
+}
+
+% cherche la première lettre minuscule dans #1
+\def\SYS_findletter#1{%
+ \saveexploremode\exploregroups
+ \StrRemoveBraces{#1}[\SYS_currentfindletter]%
+ \let\SYS_letterfound\empty
+ \SYS_findletter_i
+ \restoreexploremode
+}
+
+\def\SYS_findletter_i{%
+ \StrSplit\SYS_currentfindletter1\SYS_currentchar\SYS_currentfindletter
+ \ifSYS_sortvariable% si le tri auto est activé
+ \ifcat\relax\expandafter\noexpand\SYS_currentchar
+ \let\SYS_nextaction\xs_execsecond% faux si c'est une sc
+ \else
+ \xs_ifnum{\expandafter`\SYS_currentchar<`a }
+ {\let\SYS_nextaction\xs_execsecond% pas une lettre minuscule
+ }
+ {\xs_ifnum{\expandafter`\SYS_currentchar>`z }
+ {\let\SYS_nextaction\xs_execsecond% pas une lettre minuscule
+ }
+ {\SYS_testsubscript% tester s'il y a un indice
+ \let\SYS_nextaction\xs_execfirst
+ }%
+ }%
+ \fi
+ \else
+ \noexploregroups
+ \IfSubStr\SYS_letterlist\SYS_currentchar% ce qui est trouvé est dans la liste ?
+ {\SYS_testsubscript% tester s'il y a un indice après le caractère courant
+ \let\SYS_nextaction\xs_execfirst
+ }%
+ {\let\SYS_nextaction\xs_execsecond
+ }%
+ \exploregroups
+ \fi
+ \SYS_nextaction
+ {\let\SYS_letterfound\SYS_currentchar
+ \IfSubStr\SYS_letterfound\SYSunder\relax{\xs_eaddtomacro\SYS_letterfound{\SYSunder{-1}}}%
+ }%
+ {\xs_ifx{\SYS_currentfindletter\empty}{}{\SYS_findletter_i}%
+ }%
+}
+
+% teste si \SYS_currentfindletter commence par "_" et si oui, rajoute les 2 caractères à \SYS_currentchar et les enlève à \SYS_currentfindletter
+\def\SYS_testsubscript{%
+ \noexploregroups
+ \IfBeginWith\SYS_currentfindletter\SYSunder
+ {\StrGobbleLeft\SYS_currentfindletter1[\SYS_currentletterafter]%
+ \exploregroups
+ \StrRemoveBraces\SYS_currentletterafter[\SYS_currentletterafter]%
+ \IfInteger\SYS_currentletterafter
+ {\xs_ifnum{\SYS_currentletterafter=-1 }
+ {\errmessage{L'indice ne doit pas etre -1.}}
+ {}%
+ }%
+ {\errmessage{L'indice n'est pas un nombre entier !}%
+ }%
+ \xs_eeaddtomacro\SYS_currentchar{\expandafter\SYSunder\expandafter{\number\SYS_currentletterafter}}% Bug 0.31 -> corrigé 0.32: si espace après l'inbdice : supprimé
+ }
+ {}%
+ \exploregroups
+}
+
+% insère l'inconnue dans la sc #1 à sa place dans \SYS_letterlist
+\def\SYS_insletter#1{%
+ \IfSubStr\SYS_letterlist{#1}%
+ {}
+ {\let\SYS_insunknown#1%
+ \StrChar{#1}3[\SYS_insnum]%
+ \StrRemoveBraces\SYS_insnum[\SYS_insnum]%
+ \StrChar{#1}1[\SYS_currentinsletter]%
+ \let\SYS_letterlist_left\empty
+ \let\SYS_letterlist_right\SYS_letterlist
+ \SYS_insletter_i
+ }%
+}
+
+\def\SYS_insletter_i{%
+ \xs_ifx{\SYS_letterlist_right\empty}% l'inconnue viendra à la fin de \SYS_letterlist
+ {\xs_eaddtomacro\SYS_letterlist_left\SYS_insunknown
+ \let\SYS_letterlist\SYS_letterlist_left
+ }
+ {\StrChar\SYS_letterlist_right1[\SYS_currentletter]% la lettre suivante
+ \xs_ifnum{\expandafter`\SYS_currentinsletter>\expandafter`\SYS_currentletter\relax}% lettre pas bonne ?
+ {\StrSplit\SYS_letterlist_right3\SYS_currentletter\SYS_letterlist_right
+ \xs_eaddtomacro\SYS_letterlist_left\SYS_currentletter
+ \SYS_insletter_i
+ }% sinon
+ {\let\SYS_letterlist_right_right\SYS_letterlist_right
+ \let\SYS_letterlist_right_left\empty
+ \SYS_insletter_ii%
+ }%
+ }%
+}
+
+\def\SYS_insletter_ii{%
+ \xs_ifx{\SYS_letterlist_right_right\empty}
+ {\let\SYS_letterlist\SYS_letterlist_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_insunknown
+ }
+ {\StrChar\SYS_letterlist_right_right1[\SYS_currentletter]% la lettre suivante
+ \xs_ifnum{\expandafter`\SYS_currentinsletter<\expandafter`\SYS_currentletter\relax}% est elle une autre ?
+ {\let\SYS_letterlist\SYS_letterlist_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_insunknown
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_right
+ }
+ {\StrChar\SYS_letterlist_right_right3[\SYS_currentsubscript]% le prochain indice
+ \StrRemoveBraces\SYS_currentsubscript[\SYS_currentsubscript]%
+ \xs_ifnum{\SYS_insnum>\SYS_currentsubscript\relax}% est-il le bon, c'est-à-dire trop grand ?
+ {\StrSplit\SYS_letterlist_right_right3\SYS_currentletter\SYS_letterlist_right_right
+ \xs_eaddtomacro\SYS_letterlist_right_left\SYS_currentletter
+ \SYS_insletter_ii
+ }
+ {\let\SYS_letterlist\SYS_letterlist_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_insunknown
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_right
+ }%
+ }%
+ }%
+}
+
+% reconstruit le code du tableau qui sera dans le \halign
+\def\SYS_buildsystem#1#2{% #1=no ligne, #2=no inconnue
+ \StrSplit\SYS_letterlist_tmp3\SYS_currentvariable\SYS_letterlist_tmp
+ \ifcsname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname
+ \xs_eearg\xs_ifx{\csname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname+}% signe + ?
+ {\xs_ifnum{#2=1 }% première variable ?
+ {\xs_gobarg
+ }
+ {\ifSYS_firstterm% premier terme de l'équation ?'
+ \expandafter\xs_gobarg
+ \else
+ \expandafter\SYS_execarg
+ \fi
+ }%
+ }
+ {\xs_ifnum{#2=1 }
+ {\expandafter\def\csname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\expandafter\expandafter\expandafter\endcsname
+ \expandafter\expandafter\expandafter{%
+ \csname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\expandafter\expandafter\expandafter\endcsname
+ \csname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname}%
+ \xs_gobarg
+ }
+ {\SYS_execarg
+ }%
+ }%
+ {%
+ \SYS_addtotab{{}}%
+ \xs_eearg\SYS_addtotab{\csname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname{}}%
+ }%
+ \SYS_firsttermfalse
+ \fi
+ \unless\ifSYS_star
+ \xs_ifnum{#2=1 }
+ {}
+ {\SYS_addtotab&}%
+ \fi
+ \ifcsname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname
+ \xs_eearg\SYS_addtotab{\csname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname}%
+ \fi
+ \unless\ifSYS_star
+ \SYS_addtotab&%
+ \fi
+ \xs_ifnum{#2<\SYS_numberofvariable\relax}
+ {\xs_exparg{\SYS_buildsystem{#1}}{\number\numexpr#2+1}%
+ }
+ {\ifSYS_constterm
+ \ifcsname SYS_sign_const_#1\endcsname% si le terme constant existe dans cette ligne
+ \SYS_addtotab{{}}%
+ \ifSYS_firstterm\else
+ \xs_eearg\SYS_addtotab{\csname SYS_sign_const_#1\endcsname}%
+ \fi
+ \SYS_addtotab{{}}%
+ \unless\ifSYS_star
+ \SYS_addtotab&% Bug 0.31 -> corrigé 0.32
+ \fi
+ \xs_eearg\SYS_addtotab{\csname SYS_term_const_#1\endcsname}%
+ \else
+ \unless\ifSYS_star
+ \SYS_addtotab&% Bug 0.31 -> corrigé 0.32
+ \fi
+ \fi
+ \SYS_addtotab&%
+ \fi
+ \ifcsname SYS_eqsign_#1\endcsname
+ \SYS_addtotab{{}}%
+ \xs_eearg\SYS_addtotab{\csname SYS_eqsign_#1\endcsname{}&}%
+ \xs_eearg\SYS_addtotab{\csname SYS_right_#1\endcsname}%
+ \else
+ \SYS_addtotab&%
+ \fi
+ \saveexploremode\exploregroups
+ \ifcsname SYS_extracol_#1\endcsname
+ \SYS_addtotab&%
+ \expandafter\IfSubStr\csname SYS_extracol_#1\endcsname{**}% le contenu de l'extra col contient-il "**" ?
+ {\SYS_letcs\SYS_autonumarg{SYS_extracol_#1}%
+ \StrSubstitute\SYS_autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS_eqnumber}[\SYS_currentautonum]%
+ \SYS_cslet{SYS_extracol_#1}\SYS_currentautonum
+ \SYS_autonumtrue
+ }%
+ {\expandafter\IfSubStr\csname SYS_extracol_#1\endcsname*% le contenu de l'extra col contient-il "*" ?
+ {\SYS_letcs\SYS_autonumarg{SYS_extracol_#1}%
+ \StrSubstitute\SYS_autonumarg*{\noexpand#1}[\SYS_currentautonum]%
+ \SYS_cslet{SYS_extracol_#1}\SYS_currentautonum
+ \SYS_autonumtrue
+ }%
+ {\ifSYS_autonum
+ \IfSubStr\SYS_autonumarg{**}%
+ {\StrSubstitute\SYS_autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS_eqnumber}[\SYS_currentautonum]}%
+ {\StrSubstitute\SYS_autonumarg*{\noexpand#1}[\SYS_currentautonum]}%
+ \xs_exparg\SYS_addtotab\SYS_currentautonum
+ \fi
+ }%
+ }%
+ \xs_eearg\SYS_addtotab{\csname SYS_extracol_#1\endcsname}%
+ \else% pas d'extra colonne pour cette ligne ?
+ \ifSYS_autonum% mais si il y un autonum
+ \SYS_addtotab&%
+ \IfSubStr\SYS_autonumarg{**}%
+ {\StrSubstitute\SYS_autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS_eqnumber}[\SYS_currentautonum]}%
+ {\StrSubstitute\SYS_autonumarg*{\noexpand#1}[\SYS_currentautonum]}%
+ \xs_exparg\SYS_addtotab\SYS_currentautonum
+ \fi
+ \fi
+ \restoreexploremode
+ \xs_ifnum{#1<\SYS_eqnumber\relax}
+ {\SYS_addtotab\cr
+ \SYS_firsttermtrue
+ \let\SYS_letterlist_tmp\SYS_letterlist
+ \xs_exparg\SYS_buildsystem{\number\numexpr#1+1}{1}%
+ }% fin de l'alignement
+ {\SYS_addtotab{\SYS_strutdown\cr}%
+ }%
+ }%
+}
+
+% ajoute "_{-1}" à tous les tokens de #1 qui n'ont pas un indice
+\def\SYS_scanletterlist#1{%
+ \let\SYS_letterlist\empty
+ \def\SYS_lettersremaining{#1}%
+ \SYS_scanletterlist_i
+}
+
+\def\SYS_scanletterlist_i{%
+ \StrSplit\SYS_lettersremaining1\SYS_currentchar\SYS_lettersremaining
+ \xs_eaddtomacro\SYS_letterlist\SYS_currentchar
+ \IfBeginWith\SYS_lettersremaining\SYSunder
+ {\StrChar\SYS_lettersremaining2[\SYS_currentchar]%
+ \StrRemoveBraces\SYS_currentchar[\SYS_currentchar]%
+ \xs_eeaddtomacro\SYS_letterlist{\expandafter\SYSunder\expandafter{\SYS_currentchar}}%
+ \StrGobbleLeft\SYS_lettersremaining2[\SYS_lettersremaining]%
+ }%
+ {\xs_eaddtomacro\SYS_letterlist{\SYSunder{-1}}%
+ }%
+ \xs_ifx{\SYS_lettersremaining\empty}
+ {}
+ {\SYS_scanletterlist_i}%
+}
+
+\def\sysdelim#1#2{\def\SYS_delim_left{\left#1}\def\SYS_delim_right{\right#2}}
+\sysdelim\{.
+
+\def\systeme{\xs_ifstar{\SYS_startrue\SYS_systeme_i}{\SYS_starfalse\SYS_systeme_i}}
+
+\def\SYS_systeme_i{%
+ \relax\iffalse{\fi\ifnum0=`}\fi
+ \begingroup
+ \mathcode`\,="013B
+ \catcode`\^7
+ \catcode`\_8
+ \expandarg\noexploregroups
+ \setbox0 \hbox{$($}%
+ \edef\SYS_strutup {\vrule depth0pt width0pt height\dimexpr\ht0 +\SYS_extrastrutdim\relax}%
+ \edef\SYS_strutdown{\vrule height0pt width0pt depth\dimexpr\dp0 +\SYS_extrastrutdim\relax}%
+ \SYS_cslet++\SYS_cslet--%
+ \xs_testopt\SYS_systeme_ii{}%
+}
+
+\def\SYS_systeme_ii[#1]{%
+ \xs_ifempty{#1}
+ {\let\SYS_letterlist\empty
+ \SYS_sortvariabletrue
+ }
+ {\SYS_scanletterlist{#1}% ajoute des _{-1} si besoin
+ \SYS_sortvariablefalse
+ }%
+ \SYS_consttermfalse
+ \xs_exparg{\xs_testopt\SYS_systeme_iii}{\SYS_defaulteqsep}%
+}
+
+\def\SYS_systeme_iii[#1]#2{%
+ \def\SYS_systeme_iv##1#1##2\_nil{%
+ \xs_ifempty{##1}
+ {\SYS_addtotab\cr}% on a une ligne vide
+ {\SYS_spliteqinterms{##1}}% analyser l'éq courante
+ \xs_ifempty{##2}% tant qu'il reste des équations
+ {}
+ {\edef\SYS_eqnumber{\number\numexpr\SYS_eqnumber+1}% augmenter de 1 leur nombre
+ \global\advance\SYSeqnum1
+ \SYS_systeme_iv##2\_nil% recommencer avec ce qu'il reste
+ }%
+ }%
+ \global\advance\SYSeqnum1
+ \def\SYS_eqnumber{1}%
+ \ifdefined\SYS_autonumarg
+ \xs_ifx{\SYS_autonumarg\empty}% on initialise que si \SYS_autonumarg est vide
+ {\SYS_extracolfalse
+ \SYS_autonumfalse
+ }
+ {}%
+ \else
+ \SYS_extracolfalse
+ \SYS_autonumfalse
+ \fi
+ \SYS_systeme_iv#2#1\_nil% analyser toutes les équations et en faire des termes et des signes
+ \StrCount\SYS_letterlist\SYSunder[\SYS_numberofvariable]%
+ \SYS_systemecode{}\SYS_systempreamble{}%
+ \xs_exparg\SYS_makesyspreamble{\number\ifSYS_star1\else\SYS_numberofvariable\fi\space}% fabriquer le préambule du \halign
+ \SYS_firsttermtrue
+ \let\SYS_letterlist_tmp\SYS_letterlist
+ \SYS_buildsystem11% construire le système...
+ \ifdefined\SYS_substlist
+ \xs_ifx{\SYS_substlist\empty}
+ {}
+ {\edef\SYS_systemcs{\the\SYS_systemecode}%
+ \SYS_substlist
+ \SYS_systemecode\expandafter{\SYS_systemcs}%
+ }%
+ \fi
+ \csname SYS_\ifmmode execarg\else entermath\fi\endcsname
+ {\SYS_delim_left
+ \vcenter{%
+ \lineskiplimit=0pt
+ \lineskip=0pt
+ \baselineskip\SYS_lineskipcoeff\normalbaselineskip
+ \halign\expandafter\expandafter\expandafter{\expandafter\the\expandafter\SYS_systempreamble\the\SYS_systemecode}%
+ }%
+ \SYS_delim_right
+ }% ...l'afficher en mode math
+ \endgroup
+ \ifnum0=`{\fi\iffalse}\fi
+ \unless\ifSYS_followautonum
+ \ifdefined\SYS_autonumarg
+ \let\SYS_autonumarg\empty% annule la numérotation auto
+ \fi
+ \fi
+}
+
+% Construire le préambule du \halign
+\def\SYS_makesyspreamble#1{%
+ \def\SYS_preamblenum{#1}%
+ \SYS_makesyspreamble_i1%
+}
+
+\def\SYS_makesyspreamble_i#1{%
+ \xs_ifnum{#1<\SYS_preamblenum\relax}% tant qu'il reste des variables
+ {\SYS_addtotok\SYS_systempreamble{\hfil$##$&\hfil$##$&}% une colonne pour le terme et une pour le signe
+ \xs_exparg\SYS_makesyspreamble_i{\number\numexpr#1+1}%
+ }
+ {\ifSYS_constterm
+ \SYS_addtotok\SYS_systempreamble{\hfil$##$&\hfil$##$&}% une colonne pour le terme constant et son signe
+ \fi
+ \SYS_addtotok\SYS_systempreamble{\hfil$##$&$##$&$##$\hfil\null}% ajouter 1 colonne pour le signe = et une pour le terme de droite
+ \ifSYS_extracol
+ \SYS_addtotok\SYS_systempreamble{&\SYS_extracolstart##\SYS_extracolend\hfil\null}% la colonne supplémentaire (pas de mode math)
+ \fi
+ \SYS_addtotok\SYS_systempreamble{\cr\SYS_strutup}% ajouter la fin du préambule et le strut de première ligne
+ }%
+}
+
+\def\SYS_entermath#1{$\relax#1$}
+
+% définit les substitutions à faire dans le tableau avant l'affichage
+\def\syssubstitute{%
+ \unless\ifdefined\SYS_substlist\let\SYS_substlist\empty\fi
+ \SYS_substitute_i
+}
+
+\def\SYS_substitute_i#1{%
+ \xs_ifempty{#1}
+ {}
+ {\xs_addtomacro\SYS_substlist{\StrSubstitute\SYS_systemcs}%
+ \StrChar{\noexpand#1}1[\SYS_currentchar]\StrRemoveBraces\SYS_currentchar[\SYS_currentchar]%
+ \xs_eaddtomacro\SYS_substlist{\expandafter{\expandafter\noexpand\SYS_currentchar}}%
+ \StrChar{\noexpand#1}2[\SYS_currentchar]\StrRemoveBraces\SYS_currentchar[\SYS_currentchar]%
+ \xs_eaddtomacro\SYS_substlist{\expandafter{\expandafter\noexpand\SYS_currentchar}[\SYS_systemcs]}%
+ \xs_exparg\SYS_substitute_i{\SYS_gobtwoargs#1}%
+ }%
+}
+
+% annule les substitutions
+\def\sysnosubstitute{\let\SYS_substlist\empty}
+
+\SYS_restorecatcode
+
+\endinput
+
+######################################################################
+# Historique #
+######################################################################
+
+v0.1 27/02/2011
+ - Première version publique sur le CTAN.
+----------------------------------------------------------------------
+v0.2 08/03/2011
+ - Le premier argument optionnel met en place de nouvelles
+ fonctionnalités.
+ - Possibilité d'avoir des inconnues indicées.
+ - Mise en place d'une colonne supplémentaire et d'une
+ numérotation automatique.
+ - La commande étoilée \systeme* dégrade l'alignement pour ne
+ plus prendre en compte que les signes d'égalité.
+ - Une substitution est possible en fin de traitement, juste
+ avant d'afficher le système.
+----------------------------------------------------------------------
+v0.2a 15/05/2011
+ - Bug corrigé lorsque les termes comportent des accolades.
+----------------------------------------------------------------------
+v0.2b 23/06/2011
+ - La commande \setdelim permet de modifier les délimiteurs
+ extensibles placés de part et d'autre du système.
+----------------------------------------------------------------------
+v0.3 21/12/2013
+ - Un terme constant est permis dans le membre de gauche.
+----------------------------------------------------------------------
+v0.31 01/01/2018
+ - Il manquait un "&" après le terme constant, merci à Thomas Soll
+ de l'avoir signalé.
+----------------------------------------------------------------------
+v0.32 13/01/2019
+ - Correction d'un bug : les espaces étaient pris en compte dans
+ les noms des termes.
+ - Correction d'un bug : si version étoilée et terme constant dans
+ membre de gauche, défaut d'alignement.
+ - Nettoyage du code. \ No newline at end of file
diff --git a/macros/generic/systeme/systeme_fr.pdf b/macros/generic/systeme/systeme_fr.pdf
new file mode 100644
index 0000000000..7d81a5ae88
--- /dev/null
+++ b/macros/generic/systeme/systeme_fr.pdf
Binary files differ
diff --git a/macros/generic/systeme/systeme_fr.tex b/macros/generic/systeme/systeme_fr.tex
new file mode 100644
index 0000000000..657911336d
--- /dev/null
+++ b/macros/generic/systeme/systeme_fr.tex
@@ -0,0 +1,421 @@
+% Documentation de systeme
+\documentclass[10pt,french]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper,margin=3cm,head=12pt,headsep=7mm,footskip=7mm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,amsmath,fancybox,enumitem,systeme,xcolor,amssymb,array,longtable,fancyhdr}
+\renewcommand*\oldstylenums[1]{{\fontfamily{fxlj}\selectfont #1}}
+\usepackage[scaled=0.8]{luximono}
+\usepackage[libertine]{newtxmath}%
+\usepackage[protrusion=true,expansion,final,babel=true]{microtype}
+\fancypagestyle{plain}{%
+ \fancyhead[L]{\small L'extension \bfseries systeme}
+ \fancyhead[C]{}
+ \fancyhead[R]{\scriptsize\slshape\leftmark}
+ \fancyfoot[l]{\tiny Compilé par Christian \textsc{Tellechea}, le \today.}
+ \fancyfoot[c]{}
+ \fancyfoot[r]{\thepage}}
+\renewcommand\headrulewidth{0.4pt}
+
+\makeatletter
+
+\newcommand\make@car@active[2]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~{#2}}%
+}
+
+\newcommand\exemple{%
+ \begingroup
+ \parindent\z@
+ \parskip\z@
+ \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+ \exemple@}
+
+\newcommand\exemple@[2][50]{%
+ \medbreak\noindent
+ \begingroup
+ \let\do\@makeother\dospecials
+ \make@car@active\ { {}}%
+ \make@car@active\^^M{\par\leavevmode}%
+ \make@car@active\,{\leavevmode\kern\z@\string,}%
+ \make@car@active\-{\leavevmode\kern\z@\string-}%
+ \exemple@@{#1}{#2}%
+}
+
+\newcommand\exemple@@[3]{%
+ \def\@tempa##1#3{\exemple@@@{#1}{#2}{##1}}%
+ \@tempa
+}
+
+\newcommand\exemple@@@[3]{%
+ \xdef\the@code{#3}%
+ \endgroup
+ \vskip0.5ex
+ \boxput*(0,1)
+ {\fboxsep\z@
+ \hbox{\colorbox{white}{\leavevmode\kern0.25em{\small\bfseries#2}\kern0.25em}}%
+ }%
+ {\fboxsep5pt
+ \fbox{%
+ $\vcenter{\hsize\dimexpr0.#1\linewidth-\fboxsep-\fboxrule\relax
+ \kern5pt\parskip0pt \ttfamily\small\the@code}%
+ \vcenter{\kern5pt\hsize\dimexpr\linewidth-0.#1\linewidth-\fboxsep-\fboxrule\relax
+ \small\newlinechar`\^^M\everyeof{\noexpand}\scantokens{#3}}$%
+ }%
+ }%
+ \medbreak
+ \endgroup
+}
+
+\newcommand\falseverb[1]{{\ttfamily\detokenize{#1}}}
+
+\long\def\centerverb#1{%
+ \def\centerverb@i##1#1{##1\hfill\null\par\egroup}
+ \bgroup
+ \ttfamily\@noligs
+ \parskip2pt\par\hfill
+ \let\do\@makeother\dospecials
+ \@vobeyspaces
+ \centerverb@i}
+
+\def\longfrdate@i#1/#2/#3\@nil{\number#3\relax\ifnum#3=1 \ier\fi\space\ifcase #2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\def\longfrdate{\expandafter\longfrdate@i\SYSdate\@nil}
+\makeatother
+
+\usepackage{babel}
+\frenchbsetup{StandardLists=true}
+
+\usepackage[plainpages=false,pdfpagelabels,bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=magenta,pdfauthor={Christian TELLECHEA},pdftitle={systeme},pdfsubject={Saisie intuitive de systèmes d'équations},pdfkeywords={systeme},pdfcreator={LaTeX}]{hyperref}
+
+\setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt,label=--}
+
+\begin{document}
+\begin{titlepage}
+ \null\par\vspace{1.5cm}
+ \begin{center}
+ \begin{minipage}{0.75\linewidth}
+ \begin{center}
+ \Huge L'extension pour \TeX{} et \LaTeX{}\normalsize\par
+ \fontsize{50pt}{50pt}\selectfont\bfseries\SYSname\par
+ \par\vspace{5pt}\normalsize
+ v\SYSver\par\vspace{5pt}
+ \longfrdate\par\vspace{35pt}
+ \normalsize Manuel de l'utilisateur
+ \end{center}
+ \end{minipage}
+ \end{center}
+ \vspace{1cm}
+ \begin{center}
+ Christian {\sc Tellechea}\par\small
+ \href{mailto:unbonpetit@netc.fr}{\texttt{\textbf{unbonpetit@netc.fr}}}
+ \end{center}
+ \vspace{2cm}
+ \begin{center}
+ \begin{minipage}{0.8\linewidth}
+ \noindent\hrulefill\par
+ \hfill\textbf{\textit{Résumé}}\hfill{}\medskip\par\small
+ Cette petite extension met en forme des systèmes d'équations ou d'inéquations où les termes et les signes sont alignés verticalement, tout en permettant une saisie quasi naturelle.\par
+ \hrulefill
+ \end{minipage}
+ \end{center}
+ \vspace{2cm}
+ \tableofcontents
+\end{titlepage}
+\pagestyle{plain}
+\parskip5pt minus 1pt
+\parindent0pt
+
+\subsection*{Avant propos}
+Tout a recommencé, comme chaque année lorsque j'enseigne les systèmes d'équations, par un (petit) énervement concernant la difficulté de la saisie pour avoir une mise en forme acceptable. C'est à chaque fois un casse tête et une perte de temps conséquente de se battre avec les tableaux \LaTeX{} pour obtenir \emph{in fine} des systèmes avec un alignement correct, d'où le petit énervement, surtout lorsque, insouciant, on commence à taper ses sujets vers 23h pour le lendemain.
+
+Fort de ce constat, je me suis dit qu'il allait falloir écrire des macros pour être débarrassé de la difficulté de la saisie. Et tant qu'à faire, autant écrire des macros en plain $\varepsilon$\TeX, que tout le monde puisse en profiter\footnote{Enfin, tout le monde, c'est vite dit ! Cette extension n'est pas compatible avec Con\TeX t car, pour une raison que je ne m'explique pas, \href{http://www.ctan.org/tex-archive/macros/latex/contrib/xstring/}{\texttt{\textbf{xstring}}} n'est pas utilisable avec Con\TeX t. Si quelqu'un a une explication (et éventuellement un remède), je lui serais très reconnaissant de me contacter par \href{mailto:unbonpetit@netc.fr}{\texttt{\textbf{email}}} !}. Ces macros sont réunies dans cette petite extension maintenant à peu près fonctionnelle.
+
+\section{Fonctionnalités de l'extension}
+\subsection{La commande \texttt{\textbackslash systeme}}
+Pour l'utiliser l'extension \og systeme\fg{} , il faut écrire :
+\begin{itemize}
+ \item {\color{blue}\verb-input systeme.tex-} lorsqu'on utilise \TeX{} ou pdf\TeX;
+ \item {\color{blue}\verb-\usepackage{systeme}-} dans le préambule lorsqu'on utilise \LaTeX.
+\end{itemize}
+L'extension \href{http://www.ctan.org/tex-archive/macros/latex/contrib/xstring/}{\texttt{\textbf{xstring}}} est requise et est chargée si cela n'a pas été le cas.
+
+La commande principale est \verb-\systeme- dont l'argument obligatoire contient les équations séparées par une virgule :
+
+\exemple{La commande \ttfamily\string\systeme}/Résoudre \systeme{2a-3b+4c=2,
+a+8b+5c=8,
+-a+2b+c=-5}/
+La virgule, qui est le séparateur par défaut, peut être changée en tout autre caractère. Il suffit de placer ce nouveau caractère dans l'argument de la commande \verb-\syseqsep-.
+
+La commande \verb-\systeme- fonctionnera en mode math ou non et donnera un résultat correct si toutes les inconnues se trouvent dans le membre de gauche, le membre de droite étant celui des constantes. Les équations doivent être \emph{développées}, c'est-à-dire que chaque terme est séparé de son voisin par un "+" ou un "-". De plus, les inconnues doivent être des lettres minuscules non accentuées, c'est-à-dire tout caractère de \og\verb-a-\fg{} à \og\verb-z-\fg. Les espaces sont ignorés dans l'argument de la macro \verb|\systeme|.
+
+L'alignement construit sera un tableau précédé d'une accolade et aura les spécificités suivantes :
+\begin{itemize}
+ \item les signes d'égalité ou d'inégalité séparant les deux membres sont alignés;
+ \item les signes "+" ou "-" séparant chaque terme du membre gauche sont alignés;
+ \item chaque terme du membre de gauche se trouve dans une colonne au fer à droite;
+ \item le membre de droite se trouve dans une colonne au fer à gauche;
+ \item les espacements mathématiques entre colonnes seront corrects.
+\end{itemize}
+
+Les inconnues peuvent avoir un indice, sous réserve que celui-ci soit un nombre entier \emph{positif ou nul}\footnote{L'indice $-1$ correspond en interne à une inconnue non indicée. Par conséquent, la présence simultanée dans une même équation d'une inconnue non indicée et de cette inconnue avec l'indice $-1$ provoquera une erreur.} :
+\exemple{Inconnues indicées}/\systeme{4x_1-x_2=3,
+-x_1+5x_2=-1}/
+
+Si une inconnue est manquante dans une équation, la colonne du tableau reste vide :
+\exemple{Inconnues manquantes}/\systeme{a-2b=3,
+b-3c=4,
+-a+4c=-1}/
+
+Le membre de gauche peut contenir un terme constant. Dans ce cas, quel que soit l'endroit où il a été écrit dans ce membre, il sera affiché en dernière position, c'est-à-dire juste avant le signe d'égalité. Si plusieurs termes constants sont dans le membre de gauche, seul le dernier est pris en compte :
+
+\exemple{Terme constant dans le membre de gauche}/\systeme{2x+3y=0,
+x-z+9=0,
+2+3x+5-y-7+z=0}/
+
+On peut également avoir une, plusieurs, ou toutes les équations sans second membre :
+\exemple{Équation sans second membre}/\systeme{2a+3b-c=4,
+b-2c,
+-a+2b+3c}/
+
+Dans l'argument de la commande \verb-\systeme-, lorsque deux virgules se suivent, une équation vide, c'est-à-dire une ligne vide est insérée. Malgré cette facilité, pour augmenter l'espacement vertical entre les équations, il vaut mieux utiliser la commande \verb-\syslineskipcoeff-, voir page~\pageref{espacement.vertical}.
+\exemple{Ligne vide}/\systeme{a-2b=3,,2a+5b=7}/
+
+La commande \verb-\systeme- permet d'utiliser les commandes \og\verb-\+-\fg{} et \og\verb+\-+\fg{} pour échapper \og\verb|+|\fg{} et \og\verb|-|\fg{}, au cas où les coefficients doivent contenir ces signes, pour éviter qu'ils ne soient compris comme la fin d'un terme :
+\exemple{Coefficient contenant une addition ou soustraction}/\systeme{(2\+\sqrt2)x-(1\-\sqrt2)y=1,
+x+(1\+\sqrt2)y=-1}/
+
+Lorsqu'elle est suivie d'une \og\verb-*-\fg{}, la commande \verb-\systeme- est dégradée et n'aligne que les signes d'égalité :
+\exemple{La commande \ttfamily\string\systeme*}/\systeme{3x-4y+z=5,
+5x-3z=1,
+y+z=0}
+
+\systeme*{3x-4y+z=5,
+5x-3z=1,
+y+z=0}/
+
+\subsection{Choix des délimiteurs}
+Par défaut, les délimiteurs extensibles qui se trouvent à gauche et à droite du système sont ``\verb-\{-'' et ``\verb-.-'' et sont placés après les primitives \verb-\left- et \verb-\right-.
+
+On peut modifier ces deux délimiteurs via la commande \verb-\sysdelim<delim gauche><delim droit>- :
+\exemple{Choix des délimiteurs extensibles}/\systeme{2a+3b=5,3a-b=8}
+
+\sysdelim[]\systeme{2a+3b=5,3a-b=8}
+
+\sysdelim.|\systeme{2a+3b=5,3a-b=8}
+
+\sysdelim{(}{\lfloor}\systeme{2a+3b=5,3a-b=8}/
+
+\subsection{Tri des inconnues}
+Quel que soit l'ordre dans lequel sont entrées les inconnues lors de la saisie, elles seront triées par ordre alphabétique à l'affichage, en tenant compte de leur éventuel indice. Un signe "+" ne sera pas affiché lorsqu'il précède le premier terme d'une équation :
+\exemple{Tri des inconnues}/\systeme{2y+x-3z=4,
+z-y+2x=-1,
+-2x+3z-4y=0}
+
+\systeme{y_2+5y_1-x_1=0,
+y_1-x_1+3y_2=4,
+2x_1-y_2-y_1=-1}/
+
+Lorsque les inconnues sont indicées, elles sont classés alphabétiquement puis dans l'ordre croissant de leur indice.
+
+Le tri alphabétique est une facilité mais il peut s'avérer gênant surtout dans les systèmes $4\times4$ où, bien souvent, la 4\ieme{} inconnue est \og$t$\fg{} :
+\exemple{Tri alphabétique indésirable}/\systeme{x+2y-3z+t=0,
+2x-y-z+3t=4,
+2y+3z+4t=-1,
+3x-2z-2t=3}/
+On aimerait bien que l'inconnue $t$ soit en 4\ieme{} position dans toutes les équations. Pour cela, il faut forcer un tri différent du tri alphabétique avec l'argument optionnel de la commande \verb-\systeme-. Cet argument optionnel doit contenir la liste des inconnues, éventuellement indicées, sans aucun espace entre elles, et dans l'ordre où l'on souhaite les voir affichées dans chaque équation.
+
+Ici, on affiche deux fois le même système avec deux ordres différents :
+\exemple{Tri forcé}/\systeme[xyzt]{x+2y-3z+t=0,
+2x-y-z+3t=4,
+2y+3z+4t=-1,
+3x-2z-2t=3}
+
+\systeme[ztyx]{x+2y-3z+t=0,
+2x-y-z+3t=4,
+2y+3z+4t=-1,
+3x-2z-2t=3}/
+
+Cet argument optionnel implique d'autres fonctionnalités, qui, avec le tri forcé vu juste au dessus, se cumulent toutes. Ainsi, lorsque cet argument optionnel existe et n'est pas vide :
+\begin{enumerate}
+ \item les inconnues qui sont contenues dans l'argument optionnel peuvent être autre chose que des lettres minuscules (par exemple \verb-A-, \verb-B-, \verb-\alpha-, etc.) éventuellement indicées :
+ \exemple{Autres inconnues}/\systeme[A\alpha\beta]{%
+ A-\alpha+3\beta=4,
+ 2A+\alpha-\beta=0,
+ -A+3\alpha-2\beta=5}/
+ \item seules les inconnues figurant dans l'argument optionnel sont reconnues dans les équations. Dans l'exemple ci dessous, la lettre $m$ n'est pas comprise comme étant une inconnue :
+ \exemple{Inconnues forcées}/\systeme[xy]{mx-y=3,
+ x-m^2y=-1}/
+\end{enumerate}
+
+\subsection{Inéquations}
+Dans chaque ligne, le signe susceptible de séparer les deux membres d'une équation est l'un de ceux-ci : \verb-=-, \verb-<-, \verb->-, \verb-<=-, \verb->=-, \verb-\leq-, \verb-\geq-, \verb-\leqslant- et \verb-\geqslant-. Les deux derniers ne sont utilisables que si l'extension \href{http://ctan.org/pkg/amssymb}{\texttt{\textbf{amssymb}}} a été chargée.
+
+Les signes \verb-<=- et \verb->=- sont remplacés à l'affichage par \verb-\leq-, \verb-\geq-, qui donnent $\leq$ ou $\geq$.
+\exemple{Inéquations}/\systeme{x+y-2z>4,
+2x-y+z\geq-1,
+3x-2y+z<=3}/
+
+Pour choisir une autre substitution à \og\verb->=-\fg{} ou \og\verb-<=-\fg{} ou pour en créer une pour tout autre signe d'égalité, on doit utiliser la commande :
+\centerverb/\sysequivsign{signe}{substitution}/
+
+Voici le même système où l'on définit la substitution de \og\verb-<=-\fg{} avec \og\verb-\leqslant-\fg{} comme on l'observe à la troisième équation :
+\exemple{Redéfinir une substitution}/\sysequivsign{<=}{\leqslant}
+\systeme{x+y-2z>4,
+2x-y+z\geq-1,
+3x-2y+z<=3}/
+
+\subsection{Nouveaux signes d'égalité}
+Avec la commande \verb-\sysaddeqsign-, on peut créer un nouveau signe susceptible de séparer les deux membres des équations. Il faut écrire :
+\centerverb/\sysaddeqsign{<nouveau signe>}/
+
+Mettons ici que l'on créé le nouveau signe\footnote{La création d'un nouveau signe est possible même si son code de catégorie est actif.} d'égalité \og\verb-~-\fg{} en écrivant :
+\centerverb/\sysaddeqsign{~}/
+
+Puis, mettons que l'on veuille ensuite remplacer ce nouveau signe par \og\verb-\approx-\fg{} dans l'affichage final. On devra écrire :
+\centerverb/\sysequivsign{~}{\approx}/
+
+En voici l'illustration dans cet exemple :
+\exemple{Nouveau signe}/\sysaddeqsign{~}
+\sysequivsign{~}{\approx}
+\systeme{2a+b-c~6,a-4b~4}/
+
+Par la suite, on peut supprimer ce signe ou n'importe quel autre déjà existant il faut utiliser la commande \verb-\sysremoveeqsign- et écrire :
+\centerverb/\sysremoveeqsign{~}/
+
+\subsection{Coefficients décimaux}
+À première vue, la virgule étant utilisée pour séparer les équations, il n'est pas possible d'écrire des coefficients décimaux. On peut spécifier un autre caractère pour séparer les différentes équations avec le second argument optionnel de la commande \verb-\système-. Ici, on prend \og\verb-:-\fg{}\footnote{Ici encore, il est possible de choisir un caractère de code de catégorie actif, comme c'est le cas de \og\string:\fg{} lorsque l'option \og\texttt{frenchb}\fg{} est spécifiée au package \texttt{babel}.} ce qui permet d'écrire des coefficients décimaux. Le comportement de la virgule est redéfini à l'intérieur de la commande \verb-\systeme- de telle sorte qu'elle ne soit pas suivie d'une espace, comme c'est le cas en mode mathématique.
+\exemple{Coefficients décimaux}/\systeme[][:]{1,5x-0,45y=0,7:x-0,8y=1,4}/
+Pour qui veut utiliser la virgule régulièrement dans les coefficients, on peut changer définitivement le séparateur par défaut pour n'importe quel autre caractère que l'on placera dans l'argument de la commande \verb-\syseqsep- et écrire par exemple \og\verb/\syseqsep{:}/\fg{} pour choisir \og\verb-:-\fg.
+
+
+\subsection{Espacement des lignes}\label{espacement.vertical}
+On peut faire varier l'espacement entre les lignes avec la commande \verb-\syslineskipcoeff- dont l'argument est un nombre qui viendra multiplier la valeur de \verb-\baselinskip-. Par défaut, l'argument vaut \verb-1.25-.
+\exemple{Espacement variable}/\systeme{x+2y-z=0,2x-y+z=1,x-3y+2z=1}
+\syslineskipcoeff{1.75}\quad
+\systeme{x+2y-z=0,2x-y+z=1,x-3y+2z=1}/
+
+\subsection{Colonne supplémentaire}
+Lorsqu'une équation comporte le signe \og\verb-@-\fg{}, tout ce qui se trouve à droite de ce caractère sera mis dans une colonne supplémentaire au fer à gauche qui se trouvera à droite du système, en dernière position.
+\exemple{Colonne supplémentaire}/\systeme{x+y=125@L_1,
+x-y=12@L_2}/
+
+Le signe \og\verb-@-\fg{} peut être changé en un autre avec la commande \verb-\sysextracolsign- et on peut écrire par exemple \og\verb/\sysextracolsign{|}/\fg.
+
+Cette colonne supplémentaire n'est \emph{pas} composée en mode mathématique, mais deux codes sont insérées au début et à la fin de cette colonne. Ils sont définis par :\centerverb/\syscodeextracol{<code début>}{<code fin>}/
+Par défaut, on a \verb-\syscodeextracol{\kern1.5em$}{$}- ce qui signifie qu'un espace horizontal d'1.5em est inséré et le \og\verb-$-\fg{} ouvre le mode mathématique au début de la colonne. Enfin, pour le second argument, \og\verb-$-\fg{} termine le mode math à la fin de la colonne.
+
+On va redéfinir ces deux codes pour ne pas se mettre en mode math et mettre un espace de 2.5em :
+\exemple{Personnalisation de la colonne supplémentaire}/\syscodeextracol{\kern2.5em }{}
+\sysextracolsign{|}
+\systeme{x+y=125|somme des deux nombres,
+x-y=12|différence des deux nombres}/
+
+\subsection{Numérotation automatique}
+La colonne supplémentaire peut être utilisée pour y mettre une numérotation automatique. La première façon de procéder est d'indiquer le schéma que doit prendre cette numérotation automatique à la première ligne, sachant que le caractère \og\verb-*-\fg{} déclenche la mise en place de la numérotation automatique et sera remplacé par le numéro de la ligne dans le système. Les autres lignes, même si elles n'ont pas de colonne supplémentaire, porteront un numéro :
+\exemple{Numérotation automatique}/\systeme{x+y-z=3@L_{*},
+2x+y+z=4,
+x-y+2z=0}/
+
+Si on souhaite spécifier explicitement des colonnes supplémentaires aux lignes qui n'en ont pas, la numérotation automatique vient \emph{avant} le contenu explicite des colonnes supplémentaires :
+\exemple{Numérotation automatique}/\systeme{x+y-z=3@L_{*}\quad,
+2x+y+z=4,
+x-y+2z=0}
+
+\systeme{x+y-z=3@L'_{*},
+3x+2y=7@=L_1+L_2,
+3x+y=6@=2L_1+L_3}/
+
+Il est ennuyeux que l'on ne puisse mettre \og\verb-L'_{*}=L_1-\fg{} à la première ligne car la totalité de ce schéma et notamment la partie indésirable \og\verb-L_1-\fg{} serait reproduite aux lignes suivantes. On peut donc spécifier le schéma de numérotation d'une deuxième façon, \emph{avant} d'écrire le système. On utilise la commande \verb-\sysautonum- dont l'argument contient ce schéma.
+\exemple{Numérotation automatique}/\sysautonum{L_{*}}
+\systeme{x+y-z=3,
+2x+y+z=4,
+x-y+2z=0}
+
+\sysautonum{L'_{*}\longleftarrow}
+\systeme{x+y-z=3@L_1,
+3x+2y=7@L_1+L_2,
+3x+y=6@2L_1+L_3}/
+
+Le schéma spécifié avec la commande \verb-\sysautonum- n'est valable \emph{que pour le prochain système} et sera effacé ensuite, sauf si on a écrit une étoile juste après la commande \verb-\sysautonum-, auquel cas le schéma de numérotation se poursuit pour tous les systèmes à venir :
+\exemple{Numérotation automatique persistante}/\sysautonum*{L_{*}}
+\systeme{a+b=4,2a-b=5}
+\quad
+\systeme{x-3y=0,2x+y=1}/
+
+On peut effacer (et donc annuler) le schéma de numérotation automatique en entrant un argument vide : \verb-\sysautonum{}-.
+
+Il existe un compteur global\footnote{Il s'agit d'un compteur \TeX{} portant le doux nom de {\ttfamily\string\SYSeqnum}, accessible via les commandes \TeX{} habituelles, c'est-à-dire qu'on peut le faire précéder de \texttt{\string\number}, \texttt{\string\romannumeral} pour l'afficher.} d'équations accessible de la même façon que le compteur local mais avec \og\verb-**-\fg{}. Voici un exemple de numérotation persistante :
+\exemple{Numérotation globale}/On met en évidence que \number\SYSeqnum{}
+équations ont été écrites jusqu'ici~:
+
+\sysautonum*{\hbox{eq (**)}}
+\systeme{x-y+z=3,
+2x+y+z=1,
+x-z=8}
+
+\systeme{u+w=9,
+v+2w=0,
+u-v=1}/
+
+Il est enfin possible d'utiliser la colonne supplémentaire pour retenir le numéro d'une équation et le rappeler plus tard :
+\exemple{Numérotation globale}/\syscodeextracol{\kern1em}{}
+\systeme{x-y+z=3@\gdef\foo{**}(\textbf{**}),
+ 2x+y+z=1@\gdef\bar{**}(\textbf{**}),
+ x-z=8@\gdef\baz{**}(\textbf{**})}
+
+L'équation \no\foo{} est la première du système,
+\bar{} et \baz{} sont les deux suivantes./
+
+On peut à tout moment réinitialiser le compteur global d'équations à l'aide de \og\verb-\sysreseteqnum-\fg.
+
+\subsection{Substitution post traitement}
+Juste avant l'affichage du système, il est encore possible de substituer dans le code du système tout caractère par un autre\footnote{Plus exactement, toute \emph{suite de tokens} par une autre.}. Pour cela, la commande \verb-\syssubstitute- agit pour tous les systèmes à venir et son argument est fait de caractères allant par paires; le premier étant le caractère à substituer et le second étant ce par quoi il le sera. Les substitutions définies par \verb-\syssubstitute- viennent \emph{s'ajouter} à celles déjà définies.
+
+Dans cet exemple, on entre des coefficients décimaux où le point est le séparateur décimal. On va demander à ce que tous les \og\verb-.-\fg{} soient remplacés par des \og\verb-,-\fg{}. On remplacera aussi l'inconnue $a_1$ par $x_n$, et $a_2$ par $x_{n+1}$, ces 3 substitutions étant faites avec \verb-\syssubstitute{.,{a_1}{x_n}{a_2}{x_{n+1}}}- :
+\exemple{Substitution post traitement}/\syssubstitute{.,{a_1}{x_n}{a_2}{x_{n+1}}}
+\systeme{1.5a_1-0.5a_2=2,1.6a_1-2a_2=0.4}/
+
+La commande \verb-\sysnosubstitute- annule toutes les substitutions précédemment définies.
+
+\section{Liste des commandes}
+Voici la liste de toutes les commandes définies par cette extension :
+\begin{longtable}{>\footnotesize l>\footnotesize p{9cm}}\\\hline
+\hfill\normalsize Commandes\hfill\null &\hfill\normalsize Description\hfill\null\\\hline
+\verb-\systeme{<code système>}-&compose un système d'équations ou d'inéquations\\
+\verb-\sysdelim<delim gauche><delim droit>-&modifie les délimiteurs extensibles placées à gauche et à droite du système\\
+\verb-\syseqsep{<caractère>}-&définit le séparateur par défaut des équations\\
+\verb-\syslineskipcoeff{<coeff>}-&définit le coefficient multiplicateur de \verb-\baselinskip- pour modifier l'espacement vertical des équations\\
+\verb-\+- et \verb|\-|&remplace "+" et "-" lorsqu'on veut éviter d'indiquer un nouveau terme\\
+\verb-\sysequivsign{<signe>}{<substitution>}-&définit ce par quoi un \verb-<signe>- d'égalité doit être remplacé à l'affichage\\
+\verb-\sysaddeqsign{<signe>}-&définit un nouveau signe d'égalité\\
+\verb-\sysremoveeqsign{<signe>}-&supprime un signe d'égalité\\
+\verb-\sysextracolsign{<signe>}-&définit le caractère délimitant la colonne supplémentaire\\
+\verb-\syscodeextracol{<code>}{<code>}-&définit les \verb-<code>- qui seront inséré au début et à la fin de la colonne supplémentaire\\
+\verb-*-&déclenche la numérotation automatique dans la colonne supplémentaire et est remplacé par le numéro de la ligne du système\\
+\verb-**-&dans la colonne supplémentaire, est remplacé par le numéro global de l'équation\\
+\verb-\sysautonum{<code>}-&définit le schéma de la numérotation automatique\\
+\verb-\syssubstitute{<paires de caractères>}-&ajoute des substitutions à faire dans le code du système avant que celui-ci ne soit affiché\\
+\verb-\sysnosubstitute-&supprime toutes les substitutions jusqu'à présent définies\\\hline
+\end{longtable}
+
+Pour finir et rendre les choses compréhensibles, voici un système où les frontières des 7 colonnes (3 inconnues et donc $2\times3+1=7$ colonnes) sont visibles :
+\begin{center}
+ \arraycolsep=0pt
+ \arrayrulewidth=0.1pt
+ $\left\{\begin{array}{|r|r|r|r|r|r|l|}
+ -10x&{}+{}&4y&{}-{}&5z&{}={}&-1\\
+ x&&&{}-{}&7z&{}={}&3\\
+ 2x&{}-{}&y&&&{}={}&0
+ \end{array}\right.$
+\end{center}
+\begin{center}
+\parskip0pt
+$\star$\par
+$\star\quad\star$
+\end{center}
+J'espère que cette extension vous sera utile et surtout que le code ne comporte pas trop de bugs\ldots\ Un \href{mailto:unbonpetit@netc.fr}{\texttt{\textbf{email}}} pour me signaler tout dysfonctionnement, toute proposition d'amélioration ou même tout commentaire sur cette extension sera le bienvenu.\par\medskip\nobreak
+Christian \textsc{Tellechea}
+\end{document} \ No newline at end of file
diff --git a/macros/generic/tables/0README.TAP b/macros/generic/tables/0README.TAP
new file mode 100644
index 0000000000..6307ca9e1d
--- /dev/null
+++ b/macros/generic/tables/0README.TAP
@@ -0,0 +1,41 @@
+-----------------------------------------------------------------------------
+ This file belongs to the TAP package
+-----------------------------------------------------------------------------
+BRIEF DESCRIPTION OF THE CONTENTS
+
+TAP.TEX: a TeX package for typesetting tables; it exploits some possibilities
+ offered by PostScript. The idea of the package was taken from
+ the package TABLES by Michael J. Ferguson, however, the package TAP
+ was re-implemented from scratch.
+
+TAPCV: directory containing TAPCV.AWK (AWK program for translating tables
+ written in extended ASCII format into TeX/TAP form) and
+ a few samples.
+
+TAPDOC: directory containing files necessary for typesetting (TeXing)
+ the documentation; moreover, there are two files, TAPXAMP1.TEX
+ and TAPXAMP2.TEX, demonstrating a technique for constructing
+ ``simple-but-complex'' tables.
+-----------------------------------------------------------------------------
+
+AUTHORS' COORDINATES
+
+Names: Bogu\l{}aw Jackowski, Piotr Pianowski, Piotr Strzelczyk
+Mail: BOP s.c., ul. Piastowska 70, 80-363 Gda\'nsk, Poland
+Email: B.Jackowski@GUST.ORG.PL
+
+-----------------------------------------------------------------------------
+
+All copyrights, copylefts, copyups, copydowns, or whatever you wish to call
+them, concerning all the files in the TAP package are essentially of the
+public domain character. In particular, you are entitled to do with the files
+whatever you wish. If you alter a file, however, please remove the line
+containing the comment:
+
+ `This file belongs to the TAP package'
+
+in order to avoid mess.
+
+-----------------------------------------------------------------------------
+
+END OF THE 0TAP.DOC FILE
diff --git a/macros/generic/termmenu/README b/macros/generic/termmenu/README
new file mode 100644
index 0000000000..9a110bbd12
--- /dev/null
+++ b/macros/generic/termmenu/README
@@ -0,0 +1,80 @@
+termmenu - Terminal-driven menus in TeX
+=======================================
+
+When writing programs, it's often required to present the user with a
+list of options/actions. The user is then expected to select one of
+these options for the program to process.
+
+`termmenu` provides this mechanism for TeX. Using `termmenu` requires
+only `expl3` support, thus the `l3kernel` and `l3packages` are both
+required.
+
+----------------------------------------------------------------------
+
+`termmenu.dtx` may be distributed and/or modified under the conditions
+of the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version. The latest
+version of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+The released version is available from CTAN.
+
+----------------------------------------------------------------------
+
+The development version can be found at
+
+ http://www.github.com/vermiculus/tex-termmenu
+
+for those people who are interested.
+
+Installation
+------------
+
+To install `termmenu`, simply run
+
+ tex termmenu.ins
+
+`termmenu.tex` will be produced. Since it can be run by anything that
+can run `expl3`, I recommend placing it in `tex/generic/termmenu`.
+
+To produce the documentation, run `pdflatex` or
+[`arara`](https://github.com/cereda/arara) on the file as normal.
+
+Usage
+-----
+
+Full documentation is available in `termmenu.pdf`, but using
+`termmenu` is very simple if you're familiar with `expl3` programming:
+
+ \termmenu_new:N \g_demo_termmenu
+
+will create a menu and
+
+ \termmenu_add:Nnnn \g_demo_termmenu { option }
+ { Description text }
+ { \msg_term:n { Actions } }
+
+will add a menu item. The user is prompted with
+
+ \termmenu_get_choice:NN \g_demo_termmenu \l_tmpa_tl
+
+and an action is taken with
+
+ \termmenu_exec:NV \g_demo_termmenu \l_tmpa_tl
+
+The menu itself looks something like this:
+
+ *************************************************
+ * Menu
+ *************************************************
+
+ The following commands are available:
+
+ > option
+ Description text
+
+ \choice=option
+ *************************************************
+ * Actions
+ *************************************************
diff --git a/macros/generic/termmenu/termmenu.dtx b/macros/generic/termmenu/termmenu.dtx
new file mode 100644
index 0000000000..04a279bf81
--- /dev/null
+++ b/macros/generic/termmenu/termmenu.dtx
@@ -0,0 +1,661 @@
+% \iffalse meta-comment
+% arara: clean: { files: [ termmenu.aux, termmenu.glo, termmenu.hd, termmenu.idx, termmenu.ilg, termmenu.ind, termmenu.out ] }
+% arara: pdflatex
+% !arara: makeindex
+% !arara: pdflatex
+% arara: pdflatex
+%
+%%
+%% File: termmenu.dtx Copyright(C) 2015 Sean Allred
+%%
+%% termmenu.dtx may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL),
+%% either version 1.3c of this license or (at your option)
+%% any later version. The latest version of this license is
+%% in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% The released version is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version can be found at
+%%
+%% http://www.github.com/vermiculus/tex-termmenu
+%%
+%% for those people who are interested.
+%%
+%% -----------------------------------------------------------------------
+%%
+%
+%<*driver>
+\documentclass[full]{l3doc}
+%</driver>
+%<*driver|package>
+\def\ExplFileName{termmenu}
+\def\ExplFileVersion{0.2}
+\def\ExplFileDate{2015-05-25}
+\def\ExplFileDescription{Terminal-driven menu support}
+\def\ExplFileExtension{dtx}
+%</driver|package>
+%<*driver>
+\begin{document}
+\renewcommand\partname{Part}
+\DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+% The \textsf{termmenu} package\\ Terminal-driven menu support^^A
+% \thanks{This file describes v\ExplFileVersion,
+% last revised \ExplFileDate.}^^A
+% }
+%
+% \author{^^A
+% Sean Allred\thanks
+% {^^A
+% E-mail:
+% \href{mailto:tex@seanallred.com}
+% {tex@seanallred.com}^^A
+% }^^A
+% }
+%
+% \date{Released \ExplFileDate}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% This module provides simple support for terminal-driven menus in
+% \pkg{expl3}.
+%
+% \paragraph{Example of use}
+% \begin{verbatim}
+% \termmenu_new:N \g_demo_termmenu
+% \termmenu_set_name:Nn \g_demo_termmenu { Demo }
+%
+% \termmenu_add:Nnnn \g_demo_termmenu { d, duck }
+% { Oh,~you~know...~:) }
+% { \msg_term:n { Quack! } }
+%
+% \termmenu_do:N \g_demo_termmenu
+%
+% \bye
+% \end{verbatim}
+% \begin{verbatim}
+% $ pdftex demo.tex
+% *************************************************
+% * Demo
+% *************************************************
+%
+% The following commands are available:
+%
+% > d, duck
+% Oh, you know... :)
+%
+% \choice=d
+% *************************************************
+% * Quack!
+% *************************************************
+% \end{verbatim}
+%
+% \newpage
+% \tableofcontents
+% \section*{Introduction}
+%
+% Menus are effectively documented property lists with a fancy,
+% user-friendly version of \cs{prop_show:N}.
+%
+% \newpage
+%
+% \part{Interface Documentation}
+%
+% \section{Creating and initializing menus}
+%
+% \begin{function}[added = 2015-05-23]{\termmenu_new:N}
+% \begin{syntax}
+% \cs{termmenu_new:N} \meta{menu}
+% \end{syntax}
+% Creates a new \meta{menu} or raises an error if the name is
+% already taken. The declaration is global. Initially, the menu
+% will be empty.
+% \end{function}
+%
+% \begin{function}[added = 2015-05-23]{\termmenu_set_name:Nn}
+% \begin{syntax}
+% \cs{termmenu_set_name:Nn} \meta{menu} \Arg{name}
+% \end{syntax}
+% Give \meta{menu} a human-friendly name. When a menu is being
+% presented, \meta{name} will appear as a title.
+% \end{function}
+%
+% \begin{function}[added = 2015-05-23]{\termmenu_add:Nnnn}
+% \begin{syntax}
+% \cs{termmenu_add:Nnnn} \meta{menu} \Arg{entry} \Arg{help text} \Arg{value}
+% \end{syntax}
+% Insert \meta{entry} into a \meta{menu} and provide \meta{help
+% text}. When a menu is being presented, both \meta{entry} and
+% \meta{help text} will be shown. When \meta{entry} is being used,
+% \meta{value} will be associated with it.
+%
+% To simplify the user experience, \meta{entry} can be a
+% comma-separated list of synonymous options. This can be used to
+% create shortcuts to functionality: instead of always typing out
+% |entry|, the end-user can simply say |o| if something like the
+% following is used:
+% \begin{verbatim}
+% \termmenu_add:Nnnn \g_tmpa_termmenu { o, option } { ... } { ... }
+% \end{verbatim}
+% \end{function}
+%
+% \section{Using menus}
+%
+% To allow for ad-hoc processing, menus are shown and acted upon in
+% four separate phases: display, input, retrieval, insertion.
+%
+% \begin{enumerate}
+% \item The display phase displays the menu to the end-user.
+% \item Then, an input routine is called upon to store information
+% into a specific variable while prompting for a different one.
+% (This is useful to keep the interface clean. The internal
+% variable can be very strange-looking, but the user can see
+% whatever you which them to see.)
+% \item The retrieval phase receives the user's input and looks it up
+% in the list of option synonyms, returning the matching menu entry.
+% \item When the entry has been found, the appropriate value is either
+% returned to the programmer or inserted into the input stream.
+% \end{enumerate}
+%
+% \begin{function}[added = 2015-05-24]{\termmenu_do:NNNNN,
+% \termmenu_do:NNNN,
+% \termmenu_do:NNN,
+% \termmenu_do:NN,
+% \termmenu_do:N}
+% \begin{syntax}
+% \cs{termmenu_do:NNNNN} \meta{menu} \meta{prompt token} \meta{input tl} \meta{entry tl} \meta{value tl}
+% \cs{termmenu_do:NNNN} \meta{menu} \meta{prompt token} \meta{input tl} \meta{entry tl}
+% \cs{termmenu_do:NNN} \meta{menu} \meta{input tl} \meta{value tl}
+% \cs{termmenu_do:NN} \meta{menu} \meta{prompt token}
+% \cs{termmenu_do:N} \meta{menu}
+% \end{syntax}
+% The \cs{termmenu_do:} family of functions are convenience wrappers
+% around the basic display, prompt, and lookup functions.
+% \begin{description}
+% \item[|do:NNNNN|] uses \meta{menu} to prompt the user for \meta{prompt
+% token}, setting their input to \meta{input tl}, setting the
+% matched entry to \meta{entry tl}, and storing the associated value
+% in \meta{value tl}.
+%
+% \item[|do:NNNN|] is the same as |do:NNNNN|, but instead of storing the
+% output in a token list, it is inserted into the input stread.
+%
+% \item[|do:NNN|] is similar to |do:NNNNN|, but does not allow the
+% programmer to set what the user sees as a prompt. Instead, the
+% generic \cs{choice} name is used for \meta{input tl}.
+% Additionally, the associated menu entry is not stored.
+%
+% \item[|do:NN|] is like |do:NNNN|, but does not store either the user's
+% input or its associated menu entry. The only parameter this takes
+% is the \meta{prompt token}.
+%
+% \item[|do:N|] is the simplest way to use a menu. It uses \cs{choice} for
+% the \meta{prompt token} and places the associated value in the
+% input stream.
+% \end{description}
+% \end{function}
+%
+% \section{Input and output}
+%
+% \begin{function}[added = 2015-05-23, updated = 2015-05-24]{\termmenu_prompt:NN, \termmenu_prompt:N}
+% \begin{syntax}
+% \cs{termmenu_prompt:NN} \meta{input tl} \meta{prompt token}
+% \cs{termmenu_prompt:N} \meta{input tl}
+% \end{syntax}
+% Read a value for \meta{input tl} showing \meta{prompt token} to
+% the user. When \meta{prompt token} isn't provided, it defaults to
+% \cs{choice}.
+% \end{function}
+%
+% \begin{variable}[added = 2015-05-23]{\l_termmenu_prompt_tl}
+% This is the message displayed to the user when a menu is
+% presented. The default value is
+% |The~following~commands~are~available:|.
+% \end{variable}
+%
+% \section{Inspection}
+%
+% \begin{function}[added = 2015-05-23]{\termmenu_show:N}
+% \begin{syntax}
+% \cs{termmenu_show:N} \meta{menu}
+% \end{syntax}
+% Show the contents of \meta{menu}. Right now, this is the same as
+% \cs{prop_show:N}.
+% \end{function}
+%
+% \begin{function}[added = 2015-05-23, updated = 2015-05-24]{\termmenu_get_name:NN}
+% \begin{syntax}
+% \cs{termmenu_get_name:NN} \meta{menu} \meta{name tl}
+% \end{syntax}
+% Retrieve the name of \meta{menu} and place it in \meta{name tl}.
+% \end{function}
+%
+% \begin{function}[added = 2015-05-25]{\termmenu_entry:NnN, \termmenu_entry:NVN}
+% \begin{syntax}
+% \cs{termmenu_entry:NnN} \meta{menu} \Arg{option} \meta{entry tl}
+% \end{syntax}
+% Finds the entry that \meta{option} would refer to in \meta{menu}
+% and places it in \meta{entry tl}.
+% \end{function}
+%
+% \begin{function}[added = 2015-05-25]{\termmenu_doc:NnN}
+% \begin{syntax}
+% \cs{termmenu_doc:NnN} \meta{menu} \Arg{entry} \meta{doc tl}
+% \end{syntax}
+% Finds the documentation for \meta{entry} in \meta{menu} and places
+% it in \meta{doc tl}.
+% \end{function}
+%
+% \begin{function}[added = 2015-05-25]{\termmenu_value:NnN, \termmenu_value:NVN}
+% \begin{syntax}
+% \cs{termmenu_value:NnN} \meta{menu} \Arg{entry} \meta{value tl}
+% \end{syntax}
+% Places \meta{menu}'s value for \meta{entry} in \meta{value tl}.
+% \end{function}
+%
+% \section{Internal variables and functions}
+%
+% \begin{variable}[added = 2015-05-23]{\g__termmenu_names_prop}
+% This property list stores the names of each menu. The keys of the
+% property lists are menus (e.g., \cs{g_demo_termmenu}) and the
+% values are their names.
+% \end{variable}
+%
+% \begin{variable}[added = 2015-05-23]{\l__termmenu_spec_tl}
+% Generally speaking, this scratch variable stores lower-level
+% information about a menu (or one of its entries).
+% \end{variable}
+%
+% \begin{variable}[added = 2015-05-23]{\g__termmenu_doc_tl}
+% This scratch variable stores the documentation for an entry. It
+% is necessary because none of |f|, |x|, |o|-type expansions seem to
+% work where they need to. Patches\slash pull requests welcome.
+% ^^A For reference, this place is \cs{termmenu_display:N}.
+% \end{variable}
+%
+% \begin{variable}[added = 2015-05-24]{\l__termmenu_value_tl}
+% This scratch variable stores the value of an entry. It is
+% immediately inserted back into the input stream.
+% \end{variable}
+%
+% \begin{variable}[added = 2015-05-24]{\l__termmenu_tmp_tl}
+% This scratch variable holds values returned by the various |do:|
+% convenience macros. This value serves as a sort of
+% \enquote*{trash bin} to throw away some unwanted values.
+% \end{variable}
+%
+% \begin{variable}[added = 2015-05-24]{\g__termmenu_tmp_tl}
+% This scratch variable is used to help set \meta{tl var} from
+% \cs{termmenu_find:NnN}.
+% \end{variable}
+%
+% \begin{variable}[added = 2015-05-24]{\g__termmenu_opt_bool}
+% This variable is used to signal if the user's input was able to
+% match against a known option.
+% \end{variable}
+%
+% \begin{function}[added = 2015-05-24]{\termmenu_display:N}
+% \begin{syntax}
+% \cs{termmenu_display:N} \meta{menu}
+% \end{syntax}
+% Writes out \meta{menu} to the terminal. No associated actions
+% are performed. If \meta{menu} has a name (i.e., an entry in
+% \cs{__termmenu_names_prop}), print it as well.
+% \end{function}
+%
+% \end{documentation}
+%
+% \newpage
+%
+% \part{Implementation}
+%
+% Before I begin, I want to establish a few definitions:
+% \begin{description}
+% \item[menu] The over-arching data structure that holds (nearly) all
+% related information for a given menu.
+% \item[entry] A full, comma-separated specification of valid
+% inputs for a given menu item.
+% \item[option] A valid input for an entry.
+% \item[value] The associated action for an entry.
+% \item[prompt token] The token read in by \TeX{} on a low level; this
+% token's name is presented to the user in output.
+% \end{description}
+%
+% \begin{implementation}
+%
+% \section{Creation and initialization}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% \begin{macrocode}
+%<@@=termmenu>
+% \end{macrocode}
+%
+% \begin{macro}{\termmenu_new:N, \termmenu_show:N, \termmenu_add:Nnnn}
+% Each menu is implemented as a property list of options mapped
+% to documentation and actions. Each option is a property list
+% key. Since the there is no good way to distinguish between
+% when documentation ends and an associated action begins, the
+% documentation is placed in a group at the head of the key's
+% value.\footnote{This could also be done with sequences, but I
+% consider that unnecessary overhead and complication.}
+% \begin{macrocode}
+\cs_set_eq:NN \termmenu_new:N \prop_new:N
+\cs_set_eq:NN \termmenu_show:N \prop_show:N
+\cs_new_nopar:Nn \termmenu_add:Nnnn
+ { \prop_put:Nnn #1 {#2} { {#3} #4 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Convenience functions}
+%
+% \begin{variable}{\l_@@_tmp_tl, \l_@@_value_tl}
+% These scratch variables are used in the following code. You may
+% be reviewing the code and thing to yourself, \enquote{Wait,
+% couldn't you use just one variable?} Rest assured that you
+% cannot: \cs{termmenu_do:NNNN} uses \cs{l_@@_value_tl} to insert
+% the value code into the input stream. Using the same variable for
+% this would be at best confusing\slash unmaintainble. Besides,
+% \cs{l_@@_tmp_tl} is supposed to be a variable for unwanted values.
+% \begin{macrocode}
+\tl_new:N \l_@@_tmp_tl
+\tl_new:N \l_@@_value_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\termmenu_do:NNNNN,
+% \termmenu_do:NNNN,
+% \termmenu_do:NNN,
+% \termmenu_do:NN,
+% \termmenu_do:N}
+% These functions make menus easier to use by choosing some sane
+% defaults and running through the entire flow. Each of these
+% macros is ultimately based on the most general one,
+% \cs{termmenu_do:NNNNN}. This results in some waste of work, but
+% those extra gets\slash sets pale in comparison to wrapping the
+% menu output, executing whatever the menu entry stands for,
+% \emph{actually waiting for the user to make a choice}, etc.
+% ^^A NNNNN <in menu> <out input> <in prompt> <out entry> <out value>
+% ^^A NNNN <in menu> <out input> <in prompt> <out entry> >>value
+% ^^A NNN <in menu> <out input> <out value>
+% ^^A NN <in menu> <in prompt>
+% ^^A N <in menu>
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_do:NNNNN
+ {
+ \termmenu_display:N #1
+ \termmenu_prompt:NN #2 #3
+ \termmenu_entry:NVN #1 #2 #4
+ \termmenu_value:NVN #1 #4 #5
+ }
+\cs_new_nopar:Nn \termmenu_do:NNNN
+ {
+ \tl_clear:N \l_@@_value_tl
+ \termmenu_do:NNNNN #1 #2 #3 #4 \l_@@_value_tl
+ \tl_use:N \l_@@_value_tl
+ }
+\cs_new_nopar:Nn \termmenu_do:NNN
+ { \termmenu_do:NNNNN #1 #2 \choice \l_@@_tmp_tl #3 }
+\cs_new_nopar:Nn \termmenu_do:NN
+ { \termmenu_do:NNNN #1 \l_@@_tmp_tl #2 \l_@@_tmp_tl }
+\cs_new_nopar:Nn \termmenu_do:N
+ { \termmenu_do:NN #1 \choice }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Retrieving values}
+%
+% \begin{variable}{\l_@@_spec_tl}
+% \cs{l_@@_spec_tl} is used when retrieving data from property
+% lists. It's used quite a bit in the following functions.
+% \begin{macrocode}
+\tl_new:N \l_@@_tmp_tl
+\tl_new:N \l_@@_value_tl
+\tl_new:N \l_@@_spec_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\termmenu_value:NnN, \termmenu_value:NVN}
+% This function retrieves the value for entry |#2| in menu |#1| and
+% places it in |#3|. Remember that the documentation and value are
+% stored together in the property list. Since the documentation is
+% kept in a group, we can use \cs{tl_tail:N} to grab just the
+% desired value.
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_value:NnN
+ {
+ \prop_get:NnN #1 {#2} \l_@@_spec_tl
+ \tl_set:Nf #3 { \tl_tail:N \l_@@_spec_tl } %@todo test expansion
+ }
+\cs_generate_variant:Nn \termmenu_value:NnN { NVN }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Entry documentation}
+%
+%
+% \begin{variable}{\g_@@_doc_tl}
+% This variable stores the help text for an option.
+% \begin{macrocode}
+\tl_new:N \l__termmenu_doc_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\termmenu_doc:NnN}
+% These functions retrieve the help text for entry |#2| in |#1| and
+% place it in |#3|. Keep in mind the structure of
+% \cs{l_@@_names_prop}.
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_doc:NnN
+ {
+ \prop_get:NnN #1 {#2} \l_@@_spec_tl
+ \tl_set:Nf #3 { \tl_head:N \l_@@_spec_tl } %@todo test expansion
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Entry lookup}
+%
+%
+% \begin{variable}{\g_@@_tmp_tl}
+% This scratch variable is used to escape the groups of mapping
+% constructs like \cs{prop_map_inline:Nn}.
+% \begin{macrocode}
+\tl_new:N \g_@@_tmp_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_opt_bool}
+% This scratch variable is used to signal if a suitable option was
+% found when searching for a match based on user input. Since it is
+% used inside two inlined mappings, it is most straightforward for
+% all assignments to be global.
+% \begin{macrocode}
+\bool_new:N \g_@@_opt_bool
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\termmenu_entry:NnN, \termmenu_entry:NVN}
+% Using the menu in |#1|, find a match for |#2| and stick that match
+% in |#3|.
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_entry:NnN
+ {
+ \prop_map_inline:Nn #1
+ {
+% \end{macrocode}
+% If the input value is in the list of synonyms, set our output value
+% to the full list, indicate that we've found a match, and break out
+% of the loop. Note that we use global variables to free ourselves
+% from the confines of the group.
+% \begin{macrocode}
+ \clist_if_in:nnT {##1} {#2}
+ {
+ \tl_gset:Nn \g_@@_tmp_tl {##1}
+ \bool_gset_true:N \g_@@_opt_bool
+ \prop_map_break:
+ }
+ }
+% \end{macrocode}
+% If we haven't set \cs{g_@@_opt_bool} by the time we've finished
+% looking, we never found anything. Set |#3| to \cs{q_no_value} to
+% indicate the lack of a match and reset the value of
+% \cs{g_@@_opt_bool}.
+% \begin{macrocode}
+ \bool_if:NTF \g_@@_opt_bool
+ { \tl_set_eq:NN #3 \g_@@_tmp_tl }
+ { \tl_set:Nn #3 { \q_no_value } }
+ \bool_gset_false:N \g_@@_opt_bool
+ }
+\cs_generate_variant:Nn \termmenu_entry:NnN { NVN }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Retrieving input}
+%
+%
+% \begin{variable}{\l_termmenu_prompt_tl}
+% This public variable contains the text to be used as a prompt when
+% displaying a menu. It is given a reasonable default.
+% \begin{macrocode}
+\tl_new:N \l_termmenu_prompt_tl
+\tl_set:Nn \l_termmenu_prompt_tl
+ { The~following~commands~are~available: }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\termmenu_prompt:NN, \termmenu_prompt:N}
+% This function is a little interesting. In order to keep the
+% end-user's interface clean, we can't simply prompt for the
+% destination variable. Say, if the destination variable were
+% something like \cs{l__some_confusing_variable_name}, this would
+% cause \TeX{} to display that confusing variable name to the
+% end-user as part of the prompt. Instead, we ask for |#2|
+% (starting a new group to avoid clobbering any existing definition)
+% and \TeX{} puts the user's input in |#2|. Now we have to get this
+% value outside the group and into |#1|. The
+% |\expandafter\endgroup| trick works nicely here (and is the
+% official\footnote{\url{http://tex.stackexchange.com/a/246542}} way
+% to do this).
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_prompt:NN
+ {
+ \group_begin:
+ \termmenu_prompt:N #2
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #1 #2
+ }
+\cs_new_nopar:Nn \termmenu_prompt:N
+ { \ior_get_str:NN \c_term_ior #1 }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Names}
+%
+%
+% \begin{variable}{\g_@@_names_prop}
+% Globally define the property list to store menu names.
+% \begin{macrocode}
+\prop_new:N \g_@@_names_prop
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\termmenu_get_name:NN}
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_get_name:NN
+ { \prop_get:NnN \g__termmenu_names_prop {#1} #2 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\termmenu_set_name:Nn}
+% This function names a menu. An entry is placed in
+% \cs{g_@@_names_prop} with the menu |#1| as a key and its name |#2|
+% as the value.
+% \begin{macrocode}
+\cs_new_nopar:Nn \termmenu_set_name:Nn
+ { \prop_put:Nnn \g__termmenu_names_prop {#1} {#2} }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Display}
+%
+%
+%
+% \begin{macro}{\termmenu_display:N}
+% Perhaps the only truly complicated part of this package is this
+% function. Let's generate some new terminal output variants to
+% make our lives easier.
+% \begin{macrocode}
+\cs_generate_variant:Nn \iow_term:n { V }
+\cs_generate_variant:Nn \msg_term:n { V }
+\cs_new_nopar:Nn \termmenu_display:N
+ {
+% \end{macrocode}
+% First, we retrieve the name of the menu. If it does not
+% exist, print a generic \enquote{Menu} header. If it does
+% exist, use the menu's title as the header.
+% \begin{macrocode}
+ \termmenu_get_name:NN #1 \l_@@_spec_tl
+ \quark_if_no_value:NTF \l_@@_spec_tl
+ { \msg_term:n { Menu } }
+ { \msg_term:V \l_@@_spec_tl }
+% \end{macrocode}
+% Display the prompt. Note that \cs{iow_term:n} without an argument
+% will simply output one blank line.
+% \begin{macrocode}
+ \iow_term:n { }
+ \iow_term:V \l_termmenu_prompt_tl
+ \iow_term:n { }
+% \end{macrocode}
+% We want to display each option with its help text in a way that is
+% easy to read.
+% \begin{macrocode}
+ \prop_map_inline:Nn #1
+ {
+% \end{macrocode}
+% For each entry |##1| in the menu |#1|, send wrapped output to the
+% terminal that contains the entry \cs{l_@@_tmp_clist} indented by
+% four spaces, a new line, and the documentation \cs{l_@@_tmp_tl}, all
+% wrapped with a running indent of eight spaces. Note that since we
+% introduce a new line with the |\\| macro in \cs{iow_wrap:nnnN}, we
+% get the first indentation of the documentation for free.
+% \begin{macrocode}
+ \clist_set:Nn \l_@@_tmp_clist {##1}
+ \termmenu_doc:NnN #1 {##1} \l_@@_tmp_tl
+ \iow_wrap:nnnN
+ {
+ \prg_replicate:nn {4} { \iow_char:N \ }
+ > ~ \clist_use:Nn \l_@@_tmp_clist { ,~ } \\
+ \tl_use:N \l_@@_tmp_tl
+ } { \prg_replicate:nn {8} { \ } } { } \iow_term:n
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/macros/generic/termmenu/termmenu.ins b/macros/generic/termmenu/termmenu.ins
new file mode 100644
index 0000000000..7042b88341
--- /dev/null
+++ b/macros/generic/termmenu/termmenu.ins
@@ -0,0 +1,38 @@
+% -*- tex -*-
+%%
+%% Copyright (C) 2015 Sean Allred
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\input l3docstrip.tex \relax
+\keepsilent
+
+\usedir{tex/generic/termmenu}
+
+\generate{
+ \file{termmenu.tex}{
+ \from{termmenu.dtx}{package}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space termmenu.tex}
+\Msg{*}
+\Msg{* To produce the documentation, run the file termmenu.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile
diff --git a/macros/generic/termmenu/termmenu.pdf b/macros/generic/termmenu/termmenu.pdf
new file mode 100644
index 0000000000..decef56323
--- /dev/null
+++ b/macros/generic/termmenu/termmenu.pdf
Binary files differ
diff --git a/macros/generic/tex-ewd/README b/macros/generic/tex-ewd/README
new file mode 100644
index 0000000000..7375812745
--- /dev/null
+++ b/macros/generic/tex-ewd/README
@@ -0,0 +1,19 @@
+TeX-EWD is a set of plain TeX macros that helps typesetting formulas,
+calculational proofs, and programs written in Dijkstra's style. See
+ http://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1300.html
+for the `dot notation', i.e., the style for formulas and proofs, and the book
+ Dijkstra, "A Discipline of Programming", Prentice Hall, 1976
+for the `guarded commands language'.
+
+The file dotnot.tex contains the (generic) macros and hints how to
+use them, the files t1.tex and p0.tex demonstrate their usage.
+
+The macros where testet using TeX-GPC.
+
+This software is licensed to you under the terms of a BSD-style license,
+see bsdlic.txt for details.
+
+Enjoy,
+Wolfgang Helbig helbig@lehre.ba-stuttgart.de
+Stauferst. 22 http://wwwlehre.ba-stuttgart.de/~helbig
+71334 Waiblingen November 2008
diff --git a/macros/generic/tex-ewd/bsdlic.txt b/macros/generic/tex-ewd/bsdlic.txt
new file mode 100644
index 0000000000..873ab29681
--- /dev/null
+++ b/macros/generic/tex-ewd/bsdlic.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2008, Wolfgang Helbig
+All rights reserved.
+
+Redistribution and use with or without modification are permitted
+provided that the following conditions are met:
+
+* Redistributions must retain the above copyright notice, this list
+ of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/macros/generic/tex-ewd/dotnot.tex b/macros/generic/tex-ewd/dotnot.tex
new file mode 100644
index 0000000000..24031e2a42
--- /dev/null
+++ b/macros/generic/tex-ewd/dotnot.tex
@@ -0,0 +1,182 @@
+% These macros are based on plain TeX. Use them to typeset
+% calculational proofs and programs written in what Dijkstra called ``dot
+% notation''. Dijkstra described the proof format in EWD 1300 and
+% the programming language in ``A Discipline of Programming''.
+% Don't hesitate to contact me:
+% Wolfgang Helbig helbig@lehre.ba-stuttgart.de
+% Stauferstr. 22 http://wwwlehre.ba-stuttgart.de/~helbig
+% 71334 Waiblingen November 2008
+
+% Sets and quantified operators
+% The first two parameters are delimited by `: ', they provide the
+% the quantifier and the range. The last parameter defines the term.
+% It is delimited by `\>'. If the range is empty, the two colons will not
+% be separated by space. The quantifier may be empty to give you a set.
+
+\def\<#1: #2: #3\>{\langle #1\;:\if#2\empty\else\;#2\;\fi:\;#3\rangle}
+\let\mx\uparrow % maximum
+\let\mn\downarrow % minimum
+\let\fa\forall % universal quantifier
+\let\ex\exists % existential quantifier
+\let\su\Sigma % sum
+\def\nbr{\#} % number of
+
+% Space surrounding binary operators.
+% The lower the precedence of a operator the more space should surround it.
+% Plain TeX provides \qquad = 36u; \quad = 18u; \; = 5u; \> = 4u; \, = 3u;
+% \!=-3u where one u is em/18.
+
+% logical operators (use mxx for operator xx surrounded by space)
+\let\eq\equiv
+\def\meq{\qquad\eq\qquad} % equivalence surrounded by 36u
+\let\ff\Leftarrow % "follows from"
+\def\mff{\quad\ff\quad} % "follows from" surrounded by 18u
+\let\impl\Rightarrow
+\def\mimpl{\quad\impl\quad} % "implies" surrounded by 18u
+\let\and\land
+\def\mand{\;\,\and\;\,} % "and" surrounded by 9u
+%\let\or\lor
+\def\mor{\;\,\lor\;\,} % "or" surrounded by by 9u
+
+% For most arithmetic operators, we use what plain TeX provides, namely
+% mathrel is surrounded by 5u space (see p. 170 in The TeXbook)
+% mathbin is surrounded by 4u space
+% mathpunct is followed by 3u space
+
+% Plain TeXs classification needs some correction however.
+% ``\mathcode "cfpp'' encodes class, font family and position in the font.
+% Plain TeX treats '*' as a bin operator, we need it as an ordinary symbol.
+\mathcode`\*="0203 % class was 2 (binary)
+
+% Plain TeX treats ':' as a rel operator, we need it as an ordinary symbol.
+\mathcode`\:="003A % class was 3 (relation)
+
+% \div and \mod should be surrounded by very little space, since
+% they have a high precedence
+\def\halfthinneg{\mskip-.5\thinmuskip}
+\def\div{\mathbin{\halfthinneg\hbox{\bf div}\halfthinneg}}
+\def\mod{\mathbin{\halfthinneg\hbox{\bf mod}\halfthinneg}}
+\def\gcd{\hbox{\bf gcd}}
+
+% Indented formulas and proofs
+% A proof is a succession of formula lines and hint lines.
+
+% A formula line has one parameter which is deliminated by \\
+% Use as `\f formula \\'
+\def\f#1\\{\tabalign&&$#1$\cr} % like `\f E=mc^2\\'
+
+% A hint line has two parameters, a relational operator and a hint.
+% Use as `\h\eq {hint why the relation holds}'
+\def\h#1#2{\tabalign&$#1$&&$\{\,$#2$\,\}$\cr} % hint line
+\def\heq#1{\h\eq {#1}} % Abbreviation for `\h\eq {easily seen}'
+
+% A named formula has two parameters: The name, deliminated by
+% `:' and the formula, deliminated by `\\'.
+% Use as `\nf R1: formula \\'
+\def\nf #1:#2\\{\tabalign$#1:$&&$#2$\cr} % like `\nf Einstein: E=mc^2\\'
+
+% A numbered formula is similar, it typesets a parenthesized number at
+% the left side, e.g., `\nrf 1 E=mc^2\\'
+% Use as `\nrf 1 formula \\'
+\def\nrf #1#2\\{\tabalign(#1)&&$#2$\cr} % numbered formula
+
+% To typeset formulas, named formulas, and hints in double columns, use
+% the `d'-versions that take twice as much parameters.
+\def\dnf #1:#2\\#3:#4\\{\tabalign$#1:$&&$#2$&&$#3:$&&$#4$\cr} % named formula
+\def\df#1\\#2\\{\tabalign&&$#1$&&&&$#2$\cr} % double formula
+% Use `\dh \relax \relax = {hint}' for empty left columns
+\def\dh#1#2#3#4{\tabalign&$#1$&&\condhint{#2}&&$#3$&&$\{\,$#4$\,\}$\cr}
+\def\condhint#1{\ifx#1\relax\else$\{\,$#1$\,\}$\fi} % left column empty
+
+% Here are the alignments of (double column) formulas and hint lines.
+\def\+{\tabalign} % we don't want \outer\def
+\def\setcols{\settabs\+\qquad&\quad&\qquad&\hskip .5\hsize\hskip-5em&
+ \qquad&\quad&\qquad&\cr}
+
+% Macros for programs
+% comments are specified as `\co {some text}'
+\def\co#1{\;\{\,#1\,\}} % comment
+\def\cofl#1{\{\,#1\,\}} % comment flush left
+
+% Indententation of a program line is controlled by \& and \decind.
+% \& sets the indentation of the following lines to its current position.
+% \decind decrements the indentation level of the following lines
+\newcount\nskips % holds number of tabstops
+\def\skipn{\ifcase\nskips\def\j{&}\or\def\j{&&}\or\def\j{&&&}
+ \or\def\j{&&&&}\or\def\j{&&&&&}\or\def\j{&&&&&&}\or\def\j{&&&&&&&}
+ \else\def\j{}\fi\j} % skip nskips tabstops
+\def\skipnmone{\global\advance\nskips by -1 \skipn\global\advance\nskips by 1}
+
+% Set a tabstop, succeeding lines will be left aligned to the new tabstop.
+\def\&{$\cleartabs&\global\advance\nskips by 1$}%
+
+% Decrement indentation, succeeding lines will be left aligned to the tabstop
+% preceding the current one.
+\def\decind{$\global\advance\nskips by -1$}
+
+% The active character ^^M (end of line) both formats a program line and
+% deliminates it.
+\def\eatfirst#1{}
+\catcode`\^^M=\active %
+\def\programline#1{\ifx;#1\def\next##1^^M{\+\skipnmone\hfill$;\;$&$##1$\cr^^M}%
+ \else\ifx\eblock#1\def\next{\eblock}%
+ \else\ifx\cofl#1\def\next##1^^M{\+\skipn$\cofl{##1}$\cr^^M}%
+ \else\ifx\od#1\def\next##1^^M{\+\skipnmone\hfill$\rawod$&$##1$\decind\cr^^M}%
+ \else\ifx\FI#1\def\next##1^^M{\+\skipnmone\hfill$\rawfi$&$##1$\decind\cr^^M}%
+ \else\ifx\|#1\def\next##1^^M{\+\skipnmone\hfill$\rawbar\;\;$&$##1$\cr^^M}%
+ \else\ifx\]#1\def\next##1^^M{\+\skipnmone\hfill$]\;$&$##1$&\decind\cr^^M}%
+ \else\def\next##1^^M{\+\skipn$#1##1$\cr^^M}\fi\fi\fi\fi\fi\fi\fi\next}%
+%
+% Enclose a block of program lines between \bblock and \eblock.
+\def\bblock{\doparskip\nskips=0\catcode`\^^M=\active \let^^M=\programline }%
+\def\eblock{\catcode`\^^M=5 \setcols }%
+\catcode`\^^M=5 %
+
+% Identation is controlled automatically be some tokens as follows:
+
+% `\[', `\do', and `\IF' set a tabstop right of them and increment
+% the indent level. The corresponding closing tokens decrement the
+% indent level. The `;', the `|', the \od and the \]| tokens at the
+% beginning of a new line are typeset slightly left of the current
+% identation level.
+
+% Tokens in our programming language
+% block
+\def\[{[\;\&}
+\def\nomenclature#1{\mathbin{\hbox{\bf#1}}\>}
+\def\glocon{\nomenclature{glocon}}
+\def\glovar{\nomenclature{glovar}}
+\def\vircon{\nomenclature{vircon}}
+\def\virvar{\nomenclature{virvar}}
+\def\pricon{\nomenclature{pricon}}
+\def\privar{\nomenclature{privar}}
+\def\]{\;]\decind}
+% primitive initializing statement
+\def\vir{${\bf\ vir }$}
+\def\array{${\bf\ array}$}
+% assignment
+\def\:#1{\mathord{\>\,:\!=\>\,}} % use as `\:='
+% guarded command list
+\def\-#1{\;\;\mathord{\rightarrow}\;\;} % use as '\->'
+\def\|{\;\rawbar\;}
+% if statement
+\def\IF{\rawif\&}
+\def\FI{\;\;\rawfi\decind}
+% do statement
+\def\do{\rawdo\&}
+\def\od{\;\;\rawod\decind}
+
+% internal use
+\def\rawbar{|\hskip -1.4pt]}
+\def\rawdo{\hbox{\bf do}\;\;}
+\def\rawod{\hbox{\bf od}\;\;}
+\def\rawfi{\hbox{\bf fi}\;\;}
+\def\rawif{\hbox{\bf if}\;\;}
+
+% format definitions
+\parindent=0pt
+\parskip=6pt plus 2pt minus 2pt
+\def\unparskip{\vskip-\parskip}
+\def\doparskip{\vskip \parskip}
+\def\bi{\hfil\break\hbox{\qquad}}
+\setcols
diff --git a/macros/generic/tex-ewd/p0.tex b/macros/generic/tex-ewd/p0.tex
new file mode 100644
index 0000000000..0524281185
--- /dev/null
+++ b/macros/generic/tex-ewd/p0.tex
@@ -0,0 +1,463 @@
+% This software is licensed to you under the terms of a BSD-style license,
+% see bsdlic.txt for details.
+\input dotnot
+\headline{\ifnum\count0=1\hfil\else\centerline\title\fi}
+\def\title{A Short Program Whose Construction Isn't}
+\def\out{{\it out:\/}}
+\centerline{\bf \title}
+
+\beginsection Introduction
+
+This is a construction of a {\it Simple Program Whose Proof Isn't},
+as D.~E.~Knuth titled his contribution to {\it Beauty Is Our
+Business, A Birthday Salute to Edsger W. Dijkstra}. Knuth's program
+is module 103 from \TeX. Given integer $n$ it prints a decimal
+fraction that approximates $n/2^{16}$ using just enough digits such
+that the fraction determines $n$ uniquely. Both David Gries (in
+{\it Binary to Decimal, One More Time}) and Knuth presented proofs
+in the same volume that use unique properties of $2^{16}$. But this
+program provides a nontrivial generalization, it complies to the
+requirements for any $q > n \ge 0$. We call it ``\out''.
+
+\beginsection Notation
+
+For program construction, that is developing the program {\it and\/} its
+proof hand in hand, Dijkstra proposed both a notation (see EWD
+1300) and a programming language (see {\it A Discipline Of
+Programming}) that we are going to use here---however, slightly
+modified, blocks are deliminated by $[$ and $]$.
+A dot denotes function application, like ``$f.x$'' for ``$f(x)$''.
+Dot and colon have the same precedence and are left associative;
+e.g., ``$d:hiext.i$'' means ``$(d:hiext).i$''. The precedence is
+higher than that of any other operator, e.g., ``$\neg(d \:= a).R0$''
+means ``$\neg\bigl((d \:= a).R0\bigr)$''.
+
+For expressions $E$, $F$, and $G$ we notate substitution of $E$ by
+$F$ in $G$ as ``$(E \:= F).G$'', e.g.,
+\f (x \:= x+y).(x > 0) \meq x+y > 0\qquad,\hbox{or}\\
+\f \bigl((10+5) \:= 7\bigr).\bigl((10+5) * 2\bigr)\qquad=\qquad 14\qquad.\\
+The last example shows that we don't constraint the
+substituion function to predicates but apply it to any expression,
+in this case to an integer expression, and that we allow any
+expression left of $\:=$, not only program variables.
+
+We denote a conventionally written set $\{t.x \mid r.x\}$ as $\<x :
+r.x : t.x\>$. The three colon separated fields denote the dummy
+variable ($x$), the range of the dummy ($r.x$) and the terms ($t.x$),
+that is the elements of the set. Quantified operators applied to
+a set are written just after the $\langle$, e. g., $\<\mx i : i <
+10 : i\>$ is the maximum integer exceeded by ten, and $\<\nbr i :
+0 \le i < 10 : i\>$ is the number of naturals exceeded by 10.
+
+Throughout this paper, the type of $m$, $n$, $i$, $j$, and $p$ is
+integer and of $q$ positive integer and of $r$ rational. The
+variables $d$ and $a$ are of type integer array with the lower
+bound of its domain being one.
+
+\beginsection Integer Artithmetic
+
+This construction of \out\ is based on
+\proclaim Theorem 0.
+A half open interval of length $j$ contains exactly $j$ integers.
+
+As programmers we all know this theorem for intervals with integral
+end points but its extension to arbitray end points might come as
+a surprise. We'll use the following corollaries in this paper.
+
+\proclaim Corollary 0.
+$m = \< \mx i : i \le p/q : i\>\meq p/q-1 < m \le p/q$
+
+\proclaim Corollary 1.
+$m = \< \mx i : i < p/q : i\>\meq p/q-1 \le m < p/q$
+
+\proclaim Corollary 2.
+$ p\div q = \< \mx i : i*q \le p : i\>$
+
+\proclaim Corollary 3.
+$(p-1)\div q = \< \mx i : i*q < p : i\>$
+
+\beginsection Specification of \out
+
+Given integers $n$, $q$ with $0 \le n < q$, \out\ computes a decimal
+representation of $n/q$. It stores the digits in an array $d$ with
+$d.lob = 1$. For any integer array $a$ with $a.lob=1$ let $a.s$
+be the sum
+\f a.s = \< \su i : a.lob \le i \le a.hib : a.i/10^i\>\\
+
+{\it d.s is close enough to $n/q$\/}:
+\nf R0: (n-1/2)/q \le d.s < (n+1/2)/q\\
+
+{\it The length of $d$ is minimal\/}:
+\nf R1: \< \fa a : a.hib < d.hib : \neg(d \:= a).R0 \>\\
+
+{\it
+If there is more than one approximation that is close enough to
+$n/q$ and yielded by an array of minimal length, $d.s$ is the closest one\/}:
+\nf R2: \<\nbr a : (d \:= a).R0 \mand a.hib = d.hib : a.s \> > 1
+\mimpl |n/q - d.s| \le | n/q - a.s|\\
+
+{\it d contains decimal digits\/}:
+\nf R3: \< \fa i : d.lob \le i \le d.hib : 0 \le d.i < 10\>\\
+
+\beginsection Construction of \out
+
+For brevity, we define expressions that depend implicitly on $d$, the only
+variable in the state space of \out.
+\dnf L: d.hib\\Q: 10^L\!/q\\
+\dnf N: 10^L*d.s\\J: \<r : (n-1/2)*Q \le r < (n+1/2)*Q : r\>\\
+
+We introduced $N$ because it is an integer and $J$ because it is
+a half open interval of length $Q$. They are related to $R0$ by
+\nrf0 R0 \meq N \in J\qquad.\\
+
+For the proof of (0) we observe
+\f R0 \\
+\heq {multiply by $10^L$, definition of $N$ and $Q$}
+\f (n-1/2)*Q \le N < (n+1/2)*Q\\
+\heq {Def. of $J$}
+\f N \in J\\
+
+We construct a loop that starts with an empty array $d$, appends an
+integer to $d$ in each iteration and terminates
+with $R0 \mand R1$.
+
+Applying the Linear Search Theorem to find the minimal length
+we introduce the loop guard
+\nf G0: \< \fa a : a.hib = L : \neg(d \:= a).R0 \>\qquad.\\
+
+Since $N$ is an integer and $J$ depends on $L$ only, not on the entries
+of $d$, (0) lets us conclude
+\f G0 \mff \<\nbr i : i \in J : i\> = 0\qquad.\\
+\filbreak
+To test for $\<\nbr i : i \in J : i\> > 0$, we use a wittness $N$
+that is in $J$ whenever $J$ contains an integer at all. Two candidates for
+$N$ come to mind:
+\df N = \< \mx i : i < (n+1/2)*Q : i\>\\ N = \< \mn i : (n-1/2)*Q\le i : i\>\\
+\df \;\mand\\ \;\mand \\
+\df \<\nbr i : i \in J : i\> = 0\\ \<\nbr i : i \in J : i\> = 0\\
+\dh\eq {arithmetic} \eq {arithmetic}
+\df N < (n-1/2)*Q \\ (n+1/2)*Q \le N \\
+\filbreak
+We decide for the left alternative. It leads to a nondecreasing
+sequence of the intermediate sums $d.s$, and that is equivalent to
+the entries in $d$ being naturals. We take
+
+\nf P0: N = \< \mx i : i < (n+1/2)*Q : i \> \\
+\unparskip
+as a loop invariant and replace $G0$ by the loop guard
+\nf G1: N < (n-1/2)*Q\qquad.\\
+\filbreak
+The program reads---with $E$ chosen such that $wp.``d:hiext.E".P0$ holds:
+\bblock
+ d \vir int \array \:= (1) \co{R1; P0}
+ ;\do G1 \-> d:hiext.E \co{R1; P0} \od
+ \cofl{\neg G1; R1; P0}
+\eblock
+We are going to prove that $P0$ and $R1$ are loop invariants.
+\doparskip
+\dnf P0 \hbox{ is established by the initialization}:\\
+ P0 \hbox{ is maintained}:\\
+\df wp.``d \:= (1)".P0\\
+ wp.``d:hiext.E".P0\\
+\dh\eq {$N, L \:= 0,0$}
+ \eq {choice of $E$}
+\df 0 = \<\mx i : i < (n+1/2)/q : i\>\\
+ true\\
+\heq {Corollary 1}
+\f (n+1/2)/q - 1 \le 0 < (n + 1/2)/q\\
+\heq {$0 \le n$ implies the right $<$}
+\f n+1/2 \le q\\
+\heq {$n$, $q$ are integers}
+\f n < q\\
+\heq {precondition of \out}
+\f true\\
+\doparskip
+\dnf R1\hbox{ is established by the initialization}:\\
+ R1\hbox{ is maintained}:\\
+\df wp.``d \:= (1)".R1\\
+ wp.``d:hiext.E".R1\\
+\dh\eq {$L \:= 0$}
+ \eq {$L \:= L+1$}
+\df \<\fa i : 0 \le i < 0 : \neg(L \:= i).R0 \>\\
+ \< \fa i : 0 \le i < L+1 : \neg(L \:= i).R0 \>\\
+\dh\eq {predicate calculus: empty range of $\fa$}
+ \eq {predicate calculus: split range}
+\df true\\
+ \< \fa i : 0 \le i < L : \neg(L \:= i).R0 \> \mand \neg(L \:= L).R0\\
+\dh {} {} \eq {Def. of $R1$}
+\df \\ R1 \mand \neg R0\\
+\dh{} {} \eq {$R1$ is precondition}
+\df \\ \neg R0\\
+\dh {} {} \ff {construction of $G1$}
+\df \\ G1\\
+\dh {} {} \eq {$G1$ is precondition}
+\df \\ true\\
+
+For the termination proof, we note that $L$ is incremented in each iteration
+and bounded from above:
+\f 10^L < q\\
+\heq {Def. of $Q$, $q > 0$}
+\f Q < 1\\
+\h\ff {$J$ is an half open interval of length $Q$; Theorem 0}
+\f \<\nbr i : i \in J : i\> = 0\\
+\heq {$G1 \mand P0$}
+\f true\\
+
+That finishes the proof of the above program and we are ready to turn to
+\nf R2: \<\nbr a : (d \:= a).R0 \mand a.hib = L : a.s \> > 1
+\mimpl |n/q - d.s| \le | n/q - a.s|\qquad.\\
+
+$R2$'s antecedent reduces to $\<\nbr i : i \in J : i\> > 1$, since
+for any $a$ with $a.hib = L$ the number $a.s*10^L$ is an integer,
+which is contained in $J$ precisely when $(d \:= a).R0$ holds.
+
+$R2$'s consequence is equivalent to
+\f n*Q - 1/2 \le N \le n*Q+1/2\qquad.\\
+Since this condition does not always determine a unique solution
+for $N$, we impose the slightly stronger one constraining $N$ to
+a half open interval of length 1.
+
+\nf R2C: n*Q - 1/2 < N \le n*Q+1/2\qquad.\\
+\filbreak
+$R2C$ looks quite different from $P0$. To avoid appending a "wrong"
+digit according to $P0$, we take a further loop invariant that
+implies the negation of $R2$'s antecedent.
+
+\f \<\nbr i : i \in J : i\> \le 1\\
+\h\ff {$J$ is an half open interval of length $Q$; Theorem 0}
+\nf P1: Q \le 1\\
+
+$P1$ is established by initialization:
+\f wp.``d \:= (1)".P1 \\
+\heq {$Q \:= 1/q$}
+\f 1 \le q\\
+\heq {$0 \le n < q$}
+\f true\\
+
+We calculate guard $G2$ such that $P1$ is maintained:
+\f wp.``d:hiext.E".P1\\
+\heq {$Q \:= 10*Q$}
+\nf G2: 10*Q \le 1\\
+
+With $G2$, the loop might terminate while $G1$ is still true, that is without
+reaching $R0$. In that case, we compute the last digit according to $R2C$.
+
+The program now reads---with $E$ chosen such that $wp.``d:hiext.E".P0$ holds
+and $F$ chosen such that $wp.``d:hiext.F".R2C$ holds:
+
+\bblock
+ d \vir int \array \:= (1) \co{P0\and R1\and P1}
+ ; \do G1 \mand G2 \-> d:hiext.E \co{P0\and R1\and P1} \od
+ \cofl{\neg (G1 \and G2) \and P0 \and R1 \and P1}
+ ; \IF G1 \-> d:hiext.F \co{R2C} \| \neg G1 \-> skip\FI
+ \cofl{R0\and R1\and R2}
+\eblock
+We will prove that the if-statement establishes the postconditions.
+We already have proven that the loop terminates and establishes
+its postconditions. According to the guards of the if-statement,
+our proof takes two cases:
+
+Case zero: The loop terminates with $\neg G1$:
+
+Here the if-statement selects the skip statement. Its predicate
+transformer, $wp.skip$, is the identity function.
+
+$R0$ is reached:
+\df (n-1/2)*Q \le N \\ N < (n+1/2)*Q \\
+\dh\eq {$\neg G1$} \eq {$P0$}
+\df true \\ true \\
+
+$R1$ is reached: $R1$ is a precondition of the if-statement.
+
+$R2$ is reached: $P1$ implies the negation of $R2$'s antecedent
+and is a precondition of the if-statement.
+
+This ends the proof for case zero.
+\filbreak
+Case one: The loop terminates with $G1$:
+
+$R0$ is reached: We show that $R0$ holds in the state after
+``d:hiext.F''.
+\nf R0: (n-1/2)*Q \le N < (n+1/2)*Q\\
+\heq {towards $R2C$}
+\f n*Q -(1/2)*Q \le N < n*Q + (1/2)*Q\\
+\h \ff {$1<Q$, see (**) below; transitiviy of $<$ and $=$}
+\f n*Q -1/2 \le N \le n*Q + 1/2\\
+\heq {$F$ chosen sucht that $R2C$ holds}
+\f true\\
+
+(**)$1<Q$ holds because
+\f wp.``d:hiext.F".(1<Q)\\
+\heq {$Q \:= 10*Q$}
+\f 1 < 10*Q\\
+\heq {Definition of $G2$}
+\f \neg G2\\
+\heq {$G1 \mand (\neg G1 \mor \neg G2)$}
+\f true\\
+
+$R1$ is reached: The proof for the invariance of $R1$ can be taken
+verbatim, since here we have the same preconditions ($G1; R1; P0$).
+
+$R2$ is reached: Its consequence $R2C$ is established by the choice of $F$.
+
+That finishes the proof for $R0$, $R1$, and $R2$. So far, we
+ignored $R3$. In fact, the final value of $d.s$ and $L$ is uniquely
+defined by the other three conditions. But the intermediate values
+of $d.s$ and---equivalently the entries of $d$---are not. We can
+only hope that \out\ delivers decimal digits.
+
+We show $0 \le E < 10$ in the state before
+``$d:hiext.E$'', where $wp.``d:hiext.E".P0$ holds.
+\f wp.``d:hiext.E".P0\\
+\heq {$N, Q \:= 10*N+E, 10*Q$}
+\f 10*N + E = \<\mx i : i < (n+1/2)*10*Q : i \>\\
+\heq {simplify}
+\f E = \<\mx i : i < \bigl((n+1/2)*Q - N\bigr)*10 : i \>\\
+\heq {Corollary 1}
+\f \bigl((n+1/2)*Q - N\bigr)*10 - 1 \le E < \bigl((n+1/2)*Q-N\bigr)*10 \\
+
+We observe:
+\f 0 \le E \\
+\heq {trick, 0 and $E$ are integers}
+\df -1 < E \\
+ E < 10 \\
+\dh\ff {above, left end}
+ \ff {above, right end}
+\df -1 < \bigl((n+1/2)*Q - N\bigr)*10 - 1 \\
+ \bigl((n+1/2)*Q - N\bigr)*10 \le 10 \\
+\dh \eq {simplify}
+ \eq {simplify}
+\df N < (n+1/2)*Q\\
+ (n+1/2)*Q \le N + 1\\
+\dh \eq {$P0$, right end}
+ \eq {$P0$, left end}
+\df true\\
+ true\\
+\filbreak
+So far so good! Now $F$.
+We show $0 \le F < 10$ in the state before
+``$d:hiext.F$'', where $wp.``d:hiext.F".R2C$ holds.
+\f wp.``d:hiext.F".R2C \\
+\heq {$N, Q \:= 10*N+F, 10*Q$}
+\f (n*Q-N)*10 - 1/2 < F \le (n*Q-N)*10 + 1/2\\
+\filbreak
+We observe:
+\df 0 \le F \\
+ F < 10 \\
+\dh \eq {trick, 0 and $F$ are integers}
+ \ff {see above, right end}
+\df -1 < F\\
+ (n*Q-N)*10 + 1/2 < 10\\
+\dh \ff {see above, left end}
+ \eq {heading for $P0$, left end}
+\df -1 \le (n*Q-N)*10 - 1/2\\
+ (n*Q-1)*10 + 1/2 < N*10\\
+\dh \eq {simplify}
+ \ff {$P0$, left end}
+\df -1/2 \le (n*Q-N)*10\\
+ (n*Q-1)*10 + 1/2 < (n+1/2)*Q*10-10\\
+\dh \ff {arithmetic}
+ \eq {simplify}
+\df N < n*Q\\
+ 1/2 < (1/2)*Q*10\\
+\dh\eq {$G1$}
+ \eq {$\neg G2$}
+\df true\\
+ true\\
+\filbreak
+
+Now that \out\ is proved correct---lucky as we are, $R3$ holds---,
+we reduce the expressions to integer arithmetics. We start with
+\nf G2: 10*Q \le 1\\
+\heq {$Q=10^L\!/q$}
+\f 10^{L+1} \le q\\
+\heq {new variable $u$ with invariant $u = 10^{L+1}$}
+\f u \le q\\
+
+The invariant of $u$ is established by $u \:= 10$ and maintained
+by $u \:= 10*u$.
+\filbreak
+Next, we reduce
+\nf G1: N < (n-1/2)*Q \\
+\heq {expand with $q$, reuse $u$}
+\f N*q*10 < (n-1/2)*u\\
+\heq {think positive}
+\f u/2 < n*u - N*q*10\\
+\heq {$u = 10^{L+1}$ is even}
+\f u \div 2 < n*u - N*q*10\\
+\heq {new variable $v$ with invariant $v=n*u-N*q*10$}
+\f u \div 2 < v\\
+\filbreak
+The expressions $n*u$ and $N*q*10$ might take large values. To avoid integer
+overflow, we store their difference in $v$. The invariant of $v$ is established
+by $v \:= 10*n$.
+We calculate $V$ such that $v$'s invariant is maintained by $v \:= V$.
+\f wp.``d:hiext.E; u, v \:= 10*u, V".(v = n*u - N*q*10)\\
+\heq {semantics of the semicolon}
+\f wp.``d:hiext.E".\bigl(wp.``u, v \:= 10*u, V".(v = n*u - N*q*10)\bigr)\\
+\heq {semantics of the assignment}
+\f wp.``d:hiext.E".(V = n*10*u - N*q*10)\\
+\heq {array semantics: $N \:= 10*N+E$}
+\f V = n*10*u - (10*N+E)*q*10\\
+\heq {simplify}
+\f V = (n*u - 10*N*q-E*q)*10\\
+\heq {invariant for $v$}
+\f V = (v-E*q)*10\\
+\filbreak
+Reducing $E$ and $F$ to $\div$ is straight forward by the well
+known Corollary 2 and the slightly less well known Corollary 3.
+
+\dnf E: \<\mx i : i < \bigl((n+1/2)*Q - N\bigr)*10 : i \>\\
+ F: \<\mx i : i \le (n*Q - N)*10 + 1/2 : i \>\\
+\dh= {expand with $q$}
+ = {expand with $q$, reuse $u$}
+\df \<\mx i : i*q < (n+1/2)*10^{L+1} - N*q*10 : i \>\\
+ \<\mx i : i*q \le n*u - N*q*10 + q/2 : i \>\\
+\dh= {reuse $u$}
+ = {reuse $v$}
+\df \<\mx i : i*q < n*u+ u/2 - N*q*10 : i \>\\
+ \<\mx i : i*q \le v + q/2 : i \>\\
+\dh= {reuse $v$ , $u$ is even}
+ = {see (*)}
+\df \<\mx i : i*q < v + u \div 2 : i \>\\
+ \<\mx i : i*q \le v + q \div 2 : i \>\\
+\dh= {Corollary 3}
+ = {Corollary 2}
+\df (v + u \div 2 - 1) \div q\\
+ (v + q \div 2) \div q\\
+\filbreak
+The equation at (*) holds when $q$ is even, since then $q/2 = q \div 2$.
+And when $q$ is odd, we have $q/2 = q \div 2 + 1/2$ and we observe
+\f i*q \le v + q/2\\
+\heq {$q$ is odd}
+\f i*q \le v + q \div 2 + 1/2\\
+\heq {$i*q$ and $v + q \div 2$ are integers}
+\f i*q \le v + q \div 2\\
+\filbreak
+This ends the reduction of \out\ to integer arithmetic and the construction
+of our program.
+\bblock
+ \out\; \[\glocon n, q; \virvar d \co {0 \le n < q}
+; \privar u, v
+; d \vir int \array, u \vir int, v \vir int \:= (1), 10, n*10
+; \do u \div 2 < v \mand u \le q \->\&%
+ d:hiext.\bigl((v + u \div 2 - 1) \div q\bigr)
+ ; u, v \:= 10*u, (v - d.high*q)*10 \decind
+ \od
+; \IF u \div 2 < v \-> d:hiext.\bigl((v + q \div 2) \div q\bigr)
+ \| u \div 2 \ge v \-> skip
+ \FI
+\] \co {R0 \mand R1 \mand R2 \mand R3}
+\eblock
+That's it. The program is only proved correct, not tested. The
+proof and/or the program might contain errors. Please don't hesitate
+to contact me if you found one, or if you know a better way to
+apply Dijkstra's technique to a problem that turned out to be
+surprisingly hard.
+\vfill
+\bi
+Wolfgang Helbig\hfill {\tt helbig@lehre.ba-stuttgart.de}\qquad\bi
+Stauferstr. 22\hfill {\tt wwwlehre.ba-stuttgart.de/\~{}helbig/}\qquad\bi
+71334 Waiblingen\hfill October 2008\qquad\hfill
+\eject
+\end
diff --git a/macros/generic/tex-ewd/t1.tex b/macros/generic/tex-ewd/t1.tex
new file mode 100644
index 0000000000..1f69f36801
--- /dev/null
+++ b/macros/generic/tex-ewd/t1.tex
@@ -0,0 +1,73 @@
+% This software is licensed to you under the terms of a BSD-style license,
+% see bsdlic.txt for details.
+% This file demonstrates usage of the dotnot macros.
+\input dotnot
+\headline{\bf \title}
+\def\title{\centerline{Usage of dotnot}}
+\def\out{\hbox{\it out:\/}}
+
+The greatest common denominator:
+\bblock
+\cofl{m > 0 \land n > 0}
+\[\glocon m, n; \virvar gcd
+ ; \privar i, j
+ ; i \vir int, j \vir int \:= m, n
+ ; \do i \not= j \->\IF i > j \-> i \:= i - j
+ \| j > i \-> j \:= j - i
+ \FI
+ \od
+ ; gcd \vir int \:= i
+\] \co{gcd = \gcd.(n, m)}
+\eblock
+This is the outcome of p0:
+\bblock
+\out\;\[\glocon n, q; \virvar d
+\cofl{0 \le n < q}
+; \privar u, v
+; d \vir int \array, u \vir int, v \vir int \:= (1), 10, n*10
+; \do u \div 2 < v \mand u \le q \->\&%
+ d:hiext.\bigl((v + u \div 2 - 1) \div q\bigr)
+ ; u, v \:= 10*u, (v - d.high*q)*10 \decind
+ \od
+; \IF u \div 2 < v \-> d:hiext.\bigl((v + q \div 2) \div q\bigr)%
+ \| v \le u \div 2 \-> skip % use `%' to combine several input lines
+ % into one output line
+ \FI
+\] \co{\hbox{$d$ contains the decimal digits of $n/q$}}
+\eblock
+An alternative program to compute the greatest common denominator:
+\bblock
+\[\glocon m, n; \virvar gcd
+ ;\privar i, j
+ ;i \vir int, j \vir int \:= m, n
+ ;\do i > j \-> i \:= i - j
+ \| i < j \-> j \:= j - i
+ \od
+ ;gcd \vir int \:= (i + j) \div 2
+\]
+\eblock
+This program computes the next higher permutation of c.
+\bblock
+\[ \glovar c; \privar i,j
+ ; i\vir int \:= c.hib -1;\;\do c.i \ge c.(i+1) \-> i \:= i - 1\od
+ ; j\vir int \:= c.hib;\;\do c.j \le c.i \-> j \:= j-1 \od
+ ; c:swap.(i,j)
+ ; i \:= i+1; j \:= c.hib;
+ ; \do i < j \-> c:swap.(i,j); i,j \:= i+1,j-1 \od
+\]
+\eblock
+And this is the famous Dutch flag program:
+\bblock
+\[ \glovar buck; \glocon n; \privar r, w, b
+ ; r \vir int, w \vir int, b\vir int \:= 1, n,n
+ ; \do w \ge r \-> \[ \glovar buck, r, w, b; \pricon col
+ ; col \vir colour \:= buck.w
+ ; \IF col = red \-> buck:swap.(r,w); r := r+1
+ \| col = white \-> w \:= w-1
+ \| col = blue \-> buck:swap.(w,b); w,b \:= w-1, b-1
+ \FI
+ \]
+ \od
+\]
+\eblock
+\bye
diff --git a/macros/generic/tex-ini-files/README.md b/macros/generic/tex-ini-files/README.md
new file mode 100644
index 0000000000..3a7b94b0bd
--- /dev/null
+++ b/macros/generic/tex-ini-files/README.md
@@ -0,0 +1,56 @@
+# Model TeX format creation files
+
+This bundle provides a collection of model `.ini` files for
+creating TeX formats. These files are commonly used to introduced
+distribution-dependent variations in formats. They are also used
+to allow existing format source files to be used with newer
+engines, for example to adapt the plain e-TeX source file to
+work with XeTeX and LuaTeX.
+
+## Shared configuration
+
+The file `pdftexconfig.tex` contains common settings for pdfTeX
+and LuaTeX, most of which are concerned with direct PDF output.
+This file is designed to be loaded directly by pdfTeX and can
+be parsed by the `luatexconfig.tex` to allow the same settings
+to be used by LuaTeX directly. The format of the file
+`pdftexconfig.tex` is strictly
+
+ <pdfTeX primitive> = <value>
+
+for all non-comment non-blank lines.
+
+The LuaTeX loader recognise the marker control sequence `\dvimode`.
+If this is defined, the loaders will set the format to produce
+DVI file, and otherwise will select direct PDF output. The loader
+will then undefine `\dvimode`.
+
+## History
+
+The use of `.ini` files for building formats has developed over
+some time. The initial versions of the files collected here were
+taken from TeX Live 2015, and thus carry forward long-standing
+behaviours from this system. Initial modifications were made
+to allow for significant changes in LuaTeX primitive support
+between TeX Live 2015 and TeX Live 2016.
+
+The files provided here are designed to work with other support
+files and engines available from late 2015 onward, in particular:
+- pdfTeX v1.40+
+- LuaTeX v0.80+
+- XeTeX v0.99992+
+- LaTeX2e 2015-01-01 onward
+- unicode-data v1.0+
+
+Major changes:
+- 2016-02-27 First version of bundle
+- 2016-04-14 Do not assume e-TeX availability in `pdftexconfig.tex`
+- 2016-04-15 New approach to loading shared pdfTeX/LuaTeX data
+
+A full history of this bundle is available from
+https://github.com/josephwright/tex-ini-files
+
+## Legal
+
+The files provided here were originally written by various
+authors and are all marked as public domain.
diff --git a/macros/generic/tex-ini-files/dvilualatex.ini b/macros/generic/tex-ini-files/dvilualatex.ini
new file mode 100644
index 0000000000..476ee45f45
--- /dev/null
+++ b/macros/generic/tex-ini-files/dvilualatex.ini
@@ -0,0 +1,4 @@
+% tex-ini-files 2016-04-15: dvilualatex.ini
+
+\let\dvimode\relax
+\input lualatex.ini
diff --git a/macros/generic/tex-ini-files/dviluatex.ini b/macros/generic/tex-ini-files/dviluatex.ini
new file mode 100644
index 0000000000..abe93aa343
--- /dev/null
+++ b/macros/generic/tex-ini-files/dviluatex.ini
@@ -0,0 +1,4 @@
+% tex-ini-files 2016-04-15: dvilualatex.ini
+
+\let\dvimode\relax
+\input luatex.ini
diff --git a/macros/generic/tex-ini-files/lualatex.ini b/macros/generic/tex-ini-files/lualatex.ini
new file mode 100644
index 0000000000..1f7a49813a
--- /dev/null
+++ b/macros/generic/tex-ini-files/lualatex.ini
@@ -0,0 +1,19 @@
+% tex-ini-files 2016-04-15: lualatex.ini
+
+% Originally written 2008 by Karl Berry. Public domain.
+
+\input luatexconfig.tex
+
+\begingroup
+ \catcode`\{=1 %
+ \catcode`\}=2 %
+ % Set up job name quoting before latex.ltx
+ % Web2c pdfTeX/XeTeX quote job names containing spaces, but LuaTeX does
+ % not do this at the engine level. The behaviour can be changed using
+ % a callback. Originally this code was loaded via lualatexquotejobname.tex
+ % but that required a hack around latex.ltx: the behaviour has been altered
+ % to allow the callback route to be used directly.
+ \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
+\endgroup
+
+\input latex.ltx
diff --git a/macros/generic/tex-ini-files/luatex.ini b/macros/generic/tex-ini-files/luatex.ini
new file mode 100644
index 0000000000..1a592cf15d
--- /dev/null
+++ b/macros/generic/tex-ini-files/luatex.ini
@@ -0,0 +1,12 @@
+% tex-ini-files 2016-04-15: luatex.ini
+
+% Karl Berry, originally written 2008. Public domain.
+% PDF output by default.
+
+% Must be done first (as needs to 'tidy up')
+\input luatexconfig.tex
+% Activate primitives
+\input luatexiniconfig.tex
+\input load-unicode-data.tex
+\input etex.src
+\dump
diff --git a/macros/generic/tex-ini-files/luatexconfig.tex b/macros/generic/tex-ini-files/luatexconfig.tex
new file mode 100644
index 0000000000..5ad8913b65
--- /dev/null
+++ b/macros/generic/tex-ini-files/luatexconfig.tex
@@ -0,0 +1,69 @@
+% tex-ini-files 2016-04-15: luatexconfig.tex
+
+% Load shared (PDF) settings in LuaTeX
+
+\begingroup
+ \catcode`\{=1 %
+ \catcode`\}=2 %
+ \catcode`\#=6 %
+ % Settings that were primitives
+ % accessed in newer LuaTeX releases via \pdfvariable
+ \def\list{%
+ {compresslevel}%
+ {decimaldigits}%
+ {horigin}%
+ {minorversion}%
+ {objcompresslevel}%
+ {pkresolution}%
+ {vorigin}%
+ }%
+ \def\do#1{%
+ \ifx\relax#1\else
+ \directlua{tex.enableprimitives("", {"pdf#1"})}%
+ \expandafter\do
+ \fi
+ }%
+ % Enable all \pdf... primitives in one go
+ \expandafter\do\list{output}{pageheight}{pagewidth}{variable}\relax
+ % Other required primitives that are not named \pdf...
+ \directlua{tex.enableprimitives("",
+ {"pageheight", "pagewidth", "outputmode"})}%
+ % Newer LuaTeX releases don't have \pdfoutput, etc.:
+ % emulate names where appropriate
+ \ifx\pdfoutput\undefined
+ \global\let\pdfoutput\outputmode
+ \global\let\pdfpageheight\pageheight
+ \global\let\pdfpagewidth\pagewidth
+ \def\do#1{%
+ \ifx\relax#1\else
+ \expandafter\xdef\csname pdf#1\endcsname{\pdfvariable #1}%
+ \expandafter\do
+ \fi
+ }%
+ \expandafter\do\list\relax
+ \fi
+ % The file pdftexconfig.tex contains only <primitive> = <value> lines
+ % so can now be read using the (emulated) primitives
+ % This needs to be global so set \globaldefs for this step
+ \globaldefs=1 %
+ \input{pdftexconfig}%
+ \globaldefs=0 %
+ % Pick up on a request for DVI mode and apply it whilst \pdfoutput is
+ % still defined
+ \ifx\dvimode\relax
+ \global\pdfoutput=0 %
+ \fi
+ \global\let\dvimode\undefined
+ % Clean up all of the globally-allocated names
+ \def\do#1{%
+ \ifx\relax#1\else
+ \global\expandafter\let\csname pdf#1\endcsname\undefined
+ \expandafter\do
+ \fi
+ }%
+ \expandafter\do\list{output}{pageheight}{pagewidth}{variable}\relax
+ \global\let\outputmode\undefined
+ \global\let\pageheight\undefined
+ \global\let\pagewidth\undefined
+ \global\let\dvimode\undefined
+\endgroup
diff --git a/macros/generic/tex-ini-files/pdftexconfig.tex b/macros/generic/tex-ini-files/pdftexconfig.tex
new file mode 100644
index 0000000000..44c25abcbd
--- /dev/null
+++ b/macros/generic/tex-ini-files/pdftexconfig.tex
@@ -0,0 +1,21 @@
+% tex-ini-files 2016-04-15: pdftexconfig.tex
+
+% Load shared (PDF) settings in pdfTeX
+
+% Enable PDF output
+\pdfoutput = 1
+
+% Paper size: dimensions given in absolute terms
+\pdfpageheight = 297 true mm
+\pdfpagewidth = 210 true mm
+
+% Enable PDF 1.5 output and thus more compression
+\pdfminorversion = 5
+\pdfobjcompresslevel = 2
+
+% Low-level settings unlikely ever to need to change
+\pdfcompresslevel = 9
+\pdfdecimaldigits = 3
+\pdfpkresolution = 600
+\pdfhorigin = 1 true in
+\pdfvorigin = 1 true in
diff --git a/macros/generic/tex-ini-files/xelatex.ini b/macros/generic/tex-ini-files/xelatex.ini
new file mode 100644
index 0000000000..ef0432c241
--- /dev/null
+++ b/macros/generic/tex-ini-files/xelatex.ini
@@ -0,0 +1,17 @@
+% tex-ini-files 2016-04-15: xelatex.ini
+
+% Public domain. Originally by Jonathan Kew.
+
+% Primitives in pdftex and luatex, we'll just use macros here.
+% Since we are generating a whatsit, not 100% compatible,
+% but hopefully close enough.
+%
+\begingroup
+ \catcode`\{=1 %
+ \catcode`\}=2 %
+ \catcode`\#=6 %
+ \csname protected\endcsname\gdef\pdfmapfile#1{\special{pdf:mapfile #1}}%
+ \csname protected\endcsname\gdef\pdfmapline#1{\special{pdf:mapline #1}}%
+\endgroup
+
+\input latex.ltx
diff --git a/macros/generic/tex-ini-files/xetex.ini b/macros/generic/tex-ini-files/xetex.ini
new file mode 100644
index 0000000000..717589b469
--- /dev/null
+++ b/macros/generic/tex-ini-files/xetex.ini
@@ -0,0 +1,109 @@
+% tex-ini-files 2016-04-15: xetex.ini
+
+% Public domain. Originally by Jonathan Kew.
+
+%% Disable the \font\preloaded=... entries from plain.tex
+%% as XeTeX is primarily intended for use with other fonts
+\catcode`\{=1 \catcode`\}=2 \catcode`\#=6 \catcode`\^=7 \catcode`\@=11
+
+\scrollmode
+
+% General Unicode set up
+\input load-unicode-data.tex %
+
+% Classes that have always been defined by the XeTeX format
+\input load-unicode-xetex-classes.tex %
+
+% Let etex.src handle things if eTeX is not enabled!
+\ifx\XeTeXinterchartoks\undefined
+\else
+ % basic line-breaking support for CJK etc; override for more sophisticated spacing,
+ % automatic font changes, etc.
+
+ \gdef\xtxHanGlue{\hskip0pt plus 0.1em\relax} % between ideographs
+ \gdef\xtxHanSpace{\hskip0.2em plus 0.2em minus 0.1em\relax} % before/after runs of CJK
+
+ \global\XeTeXinterchartoks 0 1 = {\xtxHanSpace}
+ \global\XeTeXinterchartoks 0 2 = {\xtxHanSpace}
+ \global\XeTeXinterchartoks 0 3 = {\nobreak\xtxHanSpace}
+
+ \global\XeTeXinterchartoks 1 0 = {\xtxHanSpace}
+ \global\XeTeXinterchartoks 2 0 = {\nobreak\xtxHanSpace}
+ \global\XeTeXinterchartoks 3 0 = {\xtxHanSpace}
+
+ \global\XeTeXinterchartoks 1 1 = {\xtxHanGlue}
+ \global\XeTeXinterchartoks 1 2 = {\xtxHanGlue}
+ \global\XeTeXinterchartoks 1 3 = {\nobreak\xtxHanGlue}
+
+ \global\XeTeXinterchartoks 2 1 = {\nobreak\xtxHanGlue}
+ \global\XeTeXinterchartoks 2 2 = {\nobreak\xtxHanGlue}
+ \global\XeTeXinterchartoks 2 3 = {\xtxHanGlue}
+
+ \global\XeTeXinterchartoks 3 1 = {\xtxHanGlue}
+ \global\XeTeXinterchartoks 3 2 = {\xtxHanGlue}
+ \global\XeTeXinterchartoks 3 3 = {\nobreak\xtxHanGlue}
+\fi
+
+\let\s@vef@nt=\font
+\let\preloaded=2
+\def\font{\futurelet\next\d@ntpreload}
+\def\d@ntpreload{\ifx\next\preloaded
+ \let\next\sk@pf@nt
+ \begingroup \catcode`\%=12 \catcode13=12
+ \else
+ \let\next\s@vef@nt
+ \fi \next}
+\lccode1=13
+\lowercase{\def\sk@pf@nt\preloaded=#1^^A{\endgroup}}
+
+\input etex.src
+
+% Restore the \font command and undefine other stuff
+\catcode`\@=11
+\let\font=\s@vef@nt
+\let\d@ntpreload=\und@fined
+\let\sk@pf@nt=\und@fined
+\let\s@vef@nt=\und@fined
+
+%
+% Allocator for \XeTeXintercharclass values, from Enrico Gregorio
+%
+\newcount\xe@alloc@intercharclass % allocates intercharclass
+\xe@alloc@intercharclass=\thr@@ % from 4 (1,2 and 3 are used by CJK, AFAIK)
+\def\xe@alloc@#1#2#3#4#5{\global\advance#1\@ne
+ \xe@ch@ck#1#4#2% make sure there's still room
+ \allocationnumber#1%
+ \global#3#5\allocationnumber
+ \wlog{\string#5=\string#2\the\allocationnumber}}
+\def\xe@ch@ck#1#2#3{%
+ \ifnum#1<#2\else
+ \errmessage{No room for a new #3}%
+ \fi}
+\def\newXeTeXintercharclass{%
+ \xe@alloc@\xe@alloc@intercharclass\XeTeXcharclass\chardef\xe@charclass@boundary}
+
+% The limit for character class has been enlarged from 256 to 4096 since XeTeX 0.99994.
+% So the boundary of character class is changed from 255 to 4095.
+% Primitive \XeTeXinterwordspaceshaping is introduced by XeTeX 0.99994.
+% We can use it as a flag.
+\ifx\XeTeXinterwordspaceshaping\und@fined
+ \chardef\xe@charclass@boundary=\@cclv
+\else
+ \chardef\xe@charclass@boundary=4095 %
+\fi
+
+% Primitives in pdfTeX and LuaTeX, we'll just use macros here.
+% Since we are generating a whatsit, not 100% compatible,
+% but hopefully close enough.
+\protected\def\pdfmapfile#1{\special{pdf:mapfile #1}}
+\protected\def\pdfmapline#1{\special{pdf:mapline #1}}
+
+\catcode`\@=12
+
+\XeTeXuseglyphmetrics=1
+\XeTeXdashbreakstate=1
+
+\errorstopmode
+
+\dump
+\endinput
diff --git a/macros/generic/tex-locale/CHANGES b/macros/generic/tex-locale/CHANGES
new file mode 100644
index 0000000000..5ecdbdb28e
--- /dev/null
+++ b/macros/generic/tex-locale/CHANGES
@@ -0,0 +1,2 @@
+1.0 (2018-08-26):
+ * Initial release
diff --git a/macros/generic/tex-locale/README b/macros/generic/tex-locale/README
new file mode 100644
index 0000000000..6535e9429f
--- /dev/null
+++ b/macros/generic/tex-locale/README
@@ -0,0 +1,32 @@
+Generic TeX Bundle : tex-locale v1.0
+
+Last Modified : 2018-08-26
+
+Author : Nicola Talbot
+
+LaTeX usage: \usepackage{tex-locale}
+
+TeX usage: \input tex-locale
+
+LaTeX code is in tex-locale.sty. Generic TeX code is in tex-locale.tex.
+
+Requirements: tracklang and texosquery. Note that texosquery
+requires the Java Runtime Environment. See the texosquery
+documentation for setup instructions. If you can't enable piped
+shell escape, see the tex-locale documentation for an alternative
+method.
+
+This package uses both tracklang and texosquery to look up the
+locale information from the operating system and provide commands
+that can access locale-dependent information, such as the currency
+symbol and decimal separator.
+
+The LaTeX package tex-locale.sty can additionally load babel or
+polyglossia with the locale's language setting, as well as various other
+packages such as fontspec (XeLaTeX/LuaLaTeX) or fontenc + inputenc.
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/license/lppl1.3 for the details of that license.
+
+http://www.dickimaw-books.com/
+
diff --git a/macros/generic/tex-locale/samples/sample-locale-xe.pdf b/macros/generic/tex-locale/samples/sample-locale-xe.pdf
new file mode 100644
index 0000000000..b5de82c18a
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xe.pdf
Binary files differ
diff --git a/macros/generic/tex-locale/samples/sample-locale-xe.tex b/macros/generic/tex-locale/samples/sample-locale-xe.tex
new file mode 100644
index 0000000000..b64aff8d91
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xe.tex
@@ -0,0 +1,106 @@
+% arara: xetex
+
+% If texosquery.cfg is correctly set up to use texosquery-jre8
+% this should work in restricted mode. The texosquery.cfg
+% default settings require --shell-escape
+
+\font\nimbus="NimbusRoman-Regular" at 10pt
+\font\nimbusbf="NimbusRoman-Bold" at 10pt
+\font\nimbustt="NimbusMonoPS-Regular" at 10pt
+\nimbus
+
+% If \LocaleMain isn't defined, the locale will be obtained
+% from the operating system.
+%\def\LocaleMain{en-GB}
+% \LocaleOther may be a comma-separated list of language tags
+% denoting the other locales required by the document.
+\def\LocaleOther{fr-BE}
+% The above need to be defined before tex-locale.tex is input
+
+\input tex-locale
+
+This is a sample plain XeTeX document that uses
+{\nimbustt tex-locale.tex} and {\nimbustt texosquery} to obtain locale information
+from the operating system.
+
+{\nimbusbf General Information}
+
+OS name: \LocaleOSname.
+OS version: {\nimbustt \LocaleOSversion}.
+OS arch: \LocaleOSarch.
+
+PDF now: {\nimbustt \LocaleNowStamp}.
+Tag: \LocaleOStag.
+
+\ifx\LocaleMainFile\empty
+\else
+ File {\nimbustt \LocaleMainFile} last modified:
+ {\nimbustt \LocaleFileMod}.
+\fi
+
+Main locale: {\nimbustt \LocaleMain} ({\nimbustt \LocaleMainDialect}).
+
+\ForEachTrackedDialect{\thisdialect}{%
+ % Iterate over each tracked dialect.
+ {\nimbusbf \LocaleLanguageTag{\thisdialect}}
+
+ Dialect label: {\nimbustt \thisdialect}.
+ Language name: \LocaleLanguageNativeName{\thisdialect}
+ (\LocaleLanguageName{\thisdialect}).
+ \LocaleIfHasRegionName{\thisdialect}%
+ {%
+ Region name: \LocaleRegionNativeName{\thisdialect}
+ (\LocaleRegionName{\thisdialect})%
+ }%
+ {No region name}.
+ \LocaleIfHasVariantName{\thisdialect}%
+ {%
+ Variant name: \LocaleVariantNativeName{\thisdialect}
+ (\LocaleVariantName{\thisdialect})%
+ }%
+ {No variant name}.
+
+ Full date: \LocaleFullDate{\thisdialect}.
+ Long date: \LocaleLongDate{\thisdialect}.
+ Medium date: \LocaleMediumDate{\thisdialect}.
+ Short date: \LocaleShortDate{\thisdialect}.
+ First day of week: \LocaleFirstDayIndex{\thisdialect}
+ (\LocaleDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}
+ / \LocaleShortDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}).
+
+ Current month: \LocaleMonthName{\thisdialect}{\month} /
+ \LocaleShortMonthName{\thisdialect}{\month}.
+
+ Standalone (display form) first day of week:
+ \LocaleStandaloneDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}
+ / \LocaleStandaloneShortDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}.
+
+ Standalone (display form) current month:
+ \LocaleStandaloneMonthName{\thisdialect}{\month} /
+ \LocaleStandaloneShortMonthName{\thisdialect}{\month}.
+
+ Full time: \LocaleFullTime{\thisdialect}.
+ Long time: \LocaleLongTime{\thisdialect}.
+ Medium time: \LocaleMediumTime{\thisdialect}.
+ Short time: \LocaleShortTime{\thisdialect}.
+
+ Numeric: \LocaleNumericGroupSep{\thisdialect} (group sep)
+ \LocaleNumericDecimalSep{\thisdialect} (decimal sep)
+ \LocaleNumericMonetarySep{\thisdialect} (monetary sep)
+ \LocaleNumericExponent{\thisdialect} (exponent symbol).
+ \LocaleNumericPercent{\thisdialect} (percent symbol).
+ \LocaleNumericPermill{\thisdialect} (permill symbol).
+ \LocaleIfNumericUsesGroup{\thisdialect}{Uses}{Doesn't use}
+ numeric group separator.
+
+ Currency label:
+ \LocaleCurrencyLabel{\thisdialect}
+ (\LocaleCurrencyRegionalLabel{\thisdialect}).
+
+ Currency symbol:
+ \LocaleCurrencySymbol{\thisdialect}
+ (\LocaleCurrencyTeXSymbol{\thisdialect}).
+
+}
+
+\bye
diff --git a/macros/generic/tex-locale/samples/sample-locale-xeltx.pdf b/macros/generic/tex-locale/samples/sample-locale-xeltx.pdf
new file mode 100644
index 0000000000..c2c31f1038
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xeltx.pdf
Binary files differ
diff --git a/macros/generic/tex-locale/samples/sample-locale-xeltx.tex b/macros/generic/tex-locale/samples/sample-locale-xeltx.tex
new file mode 100644
index 0000000000..8f5ce375ef
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xeltx.tex
@@ -0,0 +1,109 @@
+% arara: xelatex
+
+% If texosquery.cfg is correctly set up to use texosquery-jre8
+% this should work in restricted mode. The texosquery.cfg
+% default settings require --shell-escape
+
+\documentclass{article}
+
+\usepackage{tex-locale}
+
+\begin{document}
+
+\section{General Information}
+
+OS name: \LocaleOSname.
+OS version: \texttt{\LocaleOSversion}.
+OS arch: \LocaleOSarch.
+
+PDF now: \texttt{\LocaleNowStamp}.
+Tag: \LocaleOStag.
+
+\ifx\LocaleMainFile\empty
+\else
+ File \texttt{\LocaleMainFile} last modified:
+ \texttt{\LocaleFileMod}.
+\fi
+
+Main locale: \texttt{\LocaleMain} (\texttt{\LocaleMainDialect}).
+
+\newcount\tmpctr
+
+\ForEachTrackedDialect{\thisdialect}{%
+ \section{\LocaleLanguageTag{\thisdialect}}
+
+ Dialect label: \texttt{\thisdialect}.
+ Language name: \LocaleLanguageNativeName{\thisdialect}
+ (\LocaleLanguageName{\thisdialect}).
+ \LocaleIfHasRegionName{\thisdialect}%
+ {%
+ Region name: \LocaleRegionNativeName{\thisdialect}
+ (\LocaleRegionName{\thisdialect})%
+ }%
+ {No region name}.
+ \LocaleIfHasVariantName{\thisdialect}%
+ {%
+ Variant name: \LocaleVariantNativeName{\thisdialect}
+ (\LocaleVariantName{\thisdialect})%
+ }%
+ {No variant name}.
+
+ Full date: \LocaleFullDate{\thisdialect}.
+ Long date: \LocaleLongDate{\thisdialect}.
+ Medium date: \LocaleMediumDate{\thisdialect}.
+ Short date: \LocaleShortDate{\thisdialect}.
+ First day of week: \LocaleFirstDayIndex{\thisdialect}
+ (\LocaleDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}
+ / \LocaleShortDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}).
+
+ Days of the week:%
+ \tmpctr=0\relax
+ \loop
+ \space\LocaleDayName{\thisdialect}{\tmpctr}%
+ \advance\tmpctr by 1
+ \ifnum\tmpctr<7
+ \repeat.
+
+ Short days of the week:%
+ \tmpctr=0\relax
+ \loop
+ \space\LocaleShortDayName{\thisdialect}{\tmpctr}%
+ \advance\tmpctr by 1
+ \ifnum\tmpctr<7
+ \repeat.
+
+ Current month: \LocaleMonthName{\thisdialect}{\month} /
+ \LocaleShortMonthName{\thisdialect}{\month}.
+
+ Standalone (display form) first day of week:
+ \LocaleStandaloneDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}
+ / \LocaleStandaloneShortDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}.
+
+ Standalone (display form) current month:
+ \LocaleStandaloneMonthName{\thisdialect}{\month} /
+ \LocaleStandaloneShortMonthName{\thisdialect}{\month}.
+
+ Full time: \LocaleFullTime{\thisdialect}.
+ Long time: \LocaleLongTime{\thisdialect}.
+ Medium time: \LocaleMediumTime{\thisdialect}.
+ Short time: \LocaleShortTime{\thisdialect}.
+
+ Numeric: \LocaleNumericGroupSep{\thisdialect} (group sep)
+ \LocaleNumericDecimalSep{\thisdialect} (decimal sep)
+ \LocaleNumericMonetarySep{\thisdialect} (monetary sep)
+ \LocaleNumericExponent{\thisdialect} (exponent symbol).
+ \LocaleNumericPercent{\thisdialect} (percent symbol).
+ \LocaleNumericPermill{\thisdialect} (permill symbol).
+ \LocaleIfNumericUsesGroup{\thisdialect}{Uses}{Doesn't use}
+ numeric group separator.
+
+ Currency label:
+ \LocaleCurrencyLabel{\thisdialect}
+ (\LocaleCurrencyRegionalLabel{\thisdialect}).
+
+ Currency symbol:
+ \LocaleCurrencySymbol{\thisdialect}
+ (\LocaleCurrencyTeXSymbol{\thisdialect}).
+
+}
+\end{document}
diff --git a/macros/generic/tex-locale/samples/sample-locale-xeltx2.pdf b/macros/generic/tex-locale/samples/sample-locale-xeltx2.pdf
new file mode 100644
index 0000000000..3bb54c42c7
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xeltx2.pdf
Binary files differ
diff --git a/macros/generic/tex-locale/samples/sample-locale-xeltx2.tex b/macros/generic/tex-locale/samples/sample-locale-xeltx2.tex
new file mode 100644
index 0000000000..fad6ac3800
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xeltx2.tex
@@ -0,0 +1,96 @@
+% arara: xelatex
+\documentclass{article}
+
+\usepackage[other={pt-BR,de-CH-1996,fr-BE},timedata]{tex-locale}
+
+\setmainfont{STIX}
+
+\newcount\tmpctr
+
+\newcommand{\test}{%
+ \section{Document language \languagename\space
+ (\CurrentTrackedLanguageTag)}
+ \subsection{datetime2 commands}
+ \texttt{\string\today}: \today.
+ \texttt{\string\DTMcurrenttime}: \DTMcurrenttime.
+ \subsection{Locale Details}
+ Language: \CurrentLocaleLanguageNativeName.
+ Region: \CurrentLocaleRegionNativeName.
+ \subsection{Dates and Times (Obtained from Java)}
+ Today: \CurrentLocaleDate.
+ Time: \CurrentLocaleTime.
+ First day of the week:
+ \CurrentLocaleStandaloneDayName{\CurrentLocaleFirstDayIndex}
+ (index: \CurrentLocaleFirstDayIndex).
+ Current month:
+ \CurrentLocaleStandaloneMonthName{\month}.
+ \par
+ Days of the week:%
+ \tmpctr=1\relax
+ \loop
+ \space
+ \CurrentLocaleStandaloneDayName
+ {\CurrentLocaleDayIndexFromRegion{\tmpctr}}%
+ \advance\tmpctr by 1
+ \ifnum\tmpctr<8
+ \repeat
+ .
+ \par
+ Full date-time pattern:
+ \texttt{\LocaleGetDialectAttribute{\CurrentTrackedDialect}{fulldatetimefmt}}
+ \par
+ Apply full date-time pattern:
+ \CurrentLocaleApplyDateTimePattern{fulldatetimefmt}{\LocaleDateTimeInfo}
+ \subsection{Numeric}
+ Numeric symbols:
+ \CurrentLocaleNumericGroupSep\ (group separator)
+ \CurrentLocaleDecimalSep\ (decimal separator)
+ \CurrentLocaleMonetarySep\ (monetary separator)
+ \CurrentLocaleExponent\ (exponent)
+ \CurrentLocalePercent\ (percent)
+ \CurrentLocalePermill\ (per mill).
+ \par
+ Uses numeric group separator:
+ \CurrentLocaleIfNumericUsesGroup{yes}{no}.
+ \par
+ Currency symbol: \CurrentLocaleCurrency
+ \par
+ Integer:
+ \texosqueryfmtnumber{\CurrentLocaleIntegerPattern}{123456}{0}{0}
+ \par
+ Decimal:
+ \texosqueryfmtnumber{\CurrentLocaleDecimalPattern}{123456}{78}{0}
+ \par
+ Percentage:
+ \texosqueryfmtnumber{\CurrentLocalePercentPattern}{0}{65}{0}
+ \par
+ Currency:
+ \texosqueryfmtnumber{\CurrentLocaleCurrencyPattern}{1234567}{0}{0}
+}
+
+\renewcommand*{\localedatetimefmt}[1]{\localenopolypunct{#1}}
+
+\begin{document}
+\section{General Information}
+
+OS name: \LocaleOSname.
+OS version: \LocaleOSversion.
+OS arch: \LocaleOSarch.
+
+Default file encoding: \LocaleOScodeset.
+
+The PDF file was last built: \texttt{\LocaleNowStamp}.
+
+The source file was last modified: \texttt{\LocaleFileMod}.
+
+Main locale: \LocaleMain\ (\LocaleMainDialect).
+
+Other locales: \LocaleOther.
+
+\ForEachTrackedLanguage{\thislanguage}
+{%
+ \selectlanguage{\thislanguage}
+ \test
+}
+
+\end{document}
diff --git a/macros/generic/tex-locale/samples/sample-locale-xeltx3.pdf b/macros/generic/tex-locale/samples/sample-locale-xeltx3.pdf
new file mode 100644
index 0000000000..c4f8127b41
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xeltx3.pdf
Binary files differ
diff --git a/macros/generic/tex-locale/samples/sample-locale-xeltx3.tex b/macros/generic/tex-locale/samples/sample-locale-xeltx3.tex
new file mode 100644
index 0000000000..e7039a1ea2
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale-xeltx3.tex
@@ -0,0 +1,64 @@
+% arara: xelatex: {shell: on}
+\documentclass{article}
+
+\usepackage[main={sr-Cyrl-RS},other={en-GB},date=full]{tex-locale}
+
+\LocaleSupportPackageCase
+{\newcommand{\textenglish}[1]{\foreignlanguage{british}{#1}}}% babel
+{% polyglossia
+ \setmainfont{Liberation Serif}
+ \setmonofont{Liberation Mono}
+ \newfontfamily\cyrillicfont{Liberation Serif}
+ \newfontfamily\cyrillicfonttt{Liberation Mono}
+}
+{\newcommand{\textenglish}[1]{#1}}% none
+
+\newcount\tmpctr
+
+\newcommand{\test}{%
+ \section{\textenglish{Document language} \languagename}
+ \subsection{\textenglish{datetime2 commands}}
+ \textenglish{\texttt{\string\today}}: \today.
+ \textenglish{\texttt{\string\DTMcurrenttime}}: \DTMcurrenttime.
+ \subsection{\textenglish{Locale Details}}
+ \textenglish{Language:} \CurrentLocaleLanguageNativeName.
+ \textenglish{Region:} \CurrentLocaleRegionNativeName.
+ \subsection{\textenglish{Dates and Times (Obtained from Java)}}
+ \textenglish{Today:} \CurrentLocaleDate.
+ \textenglish{Time:} \CurrentLocaleTime.
+ \textenglish{First day of the week:}
+ \CurrentLocaleStandaloneDayName{\CurrentLocaleFirstDayIndex}
+ (\textenglish{index:} \CurrentLocaleFirstDayIndex).
+ \textenglish{Current month:}
+ \CurrentLocaleStandaloneMonthName{\month}.
+ \par
+ \textenglish{Days of the week:}%
+ \tmpctr=1\relax
+ \loop
+ \space
+ \CurrentLocaleStandaloneDayName
+ {\CurrentLocaleDayIndexFromRegion{\tmpctr}}%
+ \advance\tmpctr by 1
+ \ifnum\tmpctr<8
+ \repeat
+ .
+ \subsection{\textenglish{Numeric}}
+ \textenglish{Numeric symbols:}
+ \CurrentLocaleNumericGroupSep\ \textenglish{(group separator)}
+ \CurrentLocaleDecimalSep\ \textenglish{(decimal separator)}
+ \CurrentLocaleMonetarySep\ \textenglish{(monetary separator)}
+ \CurrentLocaleExponent\ \textenglish{(exponent)}
+ \CurrentLocalePercent\ \textenglish{(percent)}
+ \CurrentLocalePermill\ \textenglish{(per mill).}
+ \par
+ \textenglish{Uses numeric group separator:
+ \CurrentLocaleIfNumericUsesGroup{yes}{no}.}
+ \par
+ \textenglish{Currency:} \CurrentLocaleCurrency
+}
+
+\begin{document}
+
+\test
+
+\end{document}
diff --git a/macros/generic/tex-locale/samples/sample-locale.pdf b/macros/generic/tex-locale/samples/sample-locale.pdf
new file mode 100644
index 0000000000..91dcabbeb3
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale.pdf
Binary files differ
diff --git a/macros/generic/tex-locale/samples/sample-locale.tex b/macros/generic/tex-locale/samples/sample-locale.tex
new file mode 100644
index 0000000000..4c5050bfc7
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale.tex
@@ -0,0 +1,94 @@
+% arara: pdflatex
+
+% If texosquery.cfg is correctly set up to use texosquery-jre8
+% this should work in restricted mode. The texosquery.cfg
+% default settings require --shell-escape
+
+\documentclass{article}
+
+\usepackage{tex-locale}
+
+\title{Sample Document Illustrating the tex-locale package}
+\author{Nicola Talbot}
+
+\begin{document}
+\maketitle
+
+texosquery version: \texttt{\TeXOSInvokerName\
+\csname ver@texosquery.tex\endcsname}.
+OS name: \LocaleOSname.
+OS version: \LocaleOSversion.
+OS arch: \LocaleOSarch.
+PDF now: \LocaleNowStamp.
+(Compare \verb|\pdfcreationdate|: \pdfcreationdate.)
+Tag: \LocaleOStag.
+Codeset: \LocaleOScodeset.
+
+\ifx\LocaleMainFile\empty
+\else
+ File \texttt{\LocaleMainFile} last modified:
+ \texttt{\LocaleFileMod}.
+\fi
+
+Main locale: \texttt{\LocaleMain} (\texttt{\LocaleMainDialect}).
+
+\ForEachTrackedDialect{\thisdialect}{%
+ \section{\LocaleLanguageTag{\thisdialect}}
+
+ Dialect label: \texttt{\thisdialect}.
+ Language name: \LocaleLanguageNativeName{\thisdialect}
+ (\LocaleLanguageName{\thisdialect}).
+ \LocaleIfHasRegionName{\thisdialect}%
+ {%
+ Region name: \LocaleRegionNativeName{\thisdialect}
+ (\LocaleRegionName{\thisdialect})%
+ }%
+ {No region name}.
+ \LocaleIfHasVariantName{\thisdialect}%
+ {%
+ Variant name: \LocaleVariantNativeName{\thisdialect}
+ (\LocaleVariantName{\thisdialect})%
+ }%
+ {No variant name}.
+
+ Full date: \LocaleFullDate{\thisdialect}.
+ Long date: \LocaleLongDate{\thisdialect}.
+ Medium date: \LocaleMediumDate{\thisdialect}.
+ Short date: \LocaleShortDate{\thisdialect}.
+ First day of week: \LocaleFirstDayIndex{\thisdialect}
+ (\LocaleDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}
+ / \LocaleShortDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}).
+
+ Current month: \LocaleMonthName{\thisdialect}{\month} /
+ \LocaleShortMonthName{\thisdialect}{\month}.
+
+ Standalone (display form) first day of week:
+ \LocaleStandaloneDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}
+ / \LocaleStandaloneShortDayName{\thisdialect}{\LocaleFirstDayIndex{\thisdialect}}.
+
+ Standalone (display form) current month:
+ \LocaleStandaloneMonthName{\thisdialect}{\month} /
+ \LocaleStandaloneShortMonthName{\thisdialect}{\month}.
+
+ Full time: \LocaleFullTime{\thisdialect}.
+ Long time: \LocaleLongTime{\thisdialect}.
+ Medium time: \LocaleMediumTime{\thisdialect}.
+ Short time: \LocaleShortTime{\thisdialect}.
+
+ Numeric: \LocaleNumericGroupSep{\thisdialect} (group sep)
+ \LocaleNumericDecimalSep{\thisdialect} (decimal sep)
+ \LocaleNumericMonetarySep{\thisdialect} (monetary sep)
+ \LocaleNumericExponent{\thisdialect} (exponent symbol).
+ \LocaleNumericPercent{\thisdialect} (percent symbol).
+ \LocaleNumericPermill{\thisdialect} (permill symbol).
+ \LocaleIfNumericUsesGroup{\thisdialect}{Uses}{Doesn't use}
+ numeric group separator.
+
+ Currency label:
+ \LocaleCurrencyLabel{\thisdialect}
+ (\LocaleCurrencyRegionalLabel{\thisdialect}).
+
+ Currency symbol:
+ \LocaleCurrencyTeXSymbol{\thisdialect}.
+}
+\end{document}
diff --git a/macros/generic/tex-locale/samples/sample-locale2.pdf b/macros/generic/tex-locale/samples/sample-locale2.pdf
new file mode 100644
index 0000000000..71ce9ba3c7
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale2.pdf
Binary files differ
diff --git a/macros/generic/tex-locale/samples/sample-locale2.tex b/macros/generic/tex-locale/samples/sample-locale2.tex
new file mode 100644
index 0000000000..ae70de932c
--- /dev/null
+++ b/macros/generic/tex-locale/samples/sample-locale2.tex
@@ -0,0 +1,89 @@
+% arara: pdflatex: {shell: on}
+\documentclass[nswissgerman]{article}
+
+\usepackage[main={locale},other={pt-BR,fr-BE},date=full,time=full,timedata]{tex-locale}
+
+\newcommand{\test}{%
+ \section{Document language \languagename\space
+ (\CurrentTrackedLanguageTag)}
+ \texttt{\string\today}: \today.
+ \texttt{\string\DTMcurrenttime}: \DTMcurrenttime.
+ (Obtained from \texttt{datetime2} package.)
+ \subsection{Locale Details}
+ Language: \CurrentLocaleLanguageNativeName.
+ Region: \CurrentLocaleRegionNativeName.
+ \subsection{Dates and Times (Obtained from Java)}
+ Today: \CurrentLocaleDate.
+ Time: \CurrentLocaleTime.
+ First day of the week:
+ \CurrentLocaleStandaloneDayName{\CurrentLocaleFirstDayIndex}.
+ Current month:
+ \CurrentLocaleStandaloneMonthName{\month}.
+ \par
+ Date pattern:
+ \texttt{\LocaleGetDialectAttribute{\CurrentTrackedDialect}{fulldatefmt}}.
+ \par
+ Apply pattern:
+ \CurrentLocaleApplyDateTimePattern{fulldatefmt}{\LocaleDateTimeInfo}.
+ \par
+ Time pattern:
+ \texttt{\LocaleGetDialectAttribute{\CurrentTrackedDialect}{fulltimefmt}}.
+ \par
+ Apply pattern:
+ \CurrentLocaleApplyDateTimePattern{fulltimefmt}{\LocaleDateTimeInfo}.
+ \subsection{Numeric}
+ Numeric symbols:
+ \CurrentLocaleNumericGroupSep\ (group separator)
+ \CurrentLocaleDecimalSep\ (decimal separator)
+ \CurrentLocaleMonetarySep\ (monetary separator)
+ \CurrentLocaleExponent\ (exponent)
+ \CurrentLocalePercent\ (percent)
+ \CurrentLocalePermill\ (per mill).
+ \par
+ Uses numeric group separator:
+ \CurrentLocaleIfNumericUsesGroup{yes}{no}.
+ \par
+ Currency Symbol: \CurrentLocaleCurrency
+ \par
+ Integer:
+ \texosqueryfmtnumber{\CurrentLocaleIntegerPattern}{123456}{0}{0}
+ \par
+ Decimal:
+ \texosqueryfmtnumber{\CurrentLocaleDecimalPattern}{123456}{78}{0}
+ \par
+ Percentage:
+ \texosqueryfmtnumber{\CurrentLocalePercentPattern}{0}{65}{0}
+ \par
+ Currency:
+ \texosqueryfmtnumber{\CurrentLocaleCurrencyPattern}{1234567}{0}{0}\par
+}
+
+\begin{document}
+\section{General Information}
+
+OS name: \LocaleOSname.
+OS version: \LocaleOSversion.
+OS arch: \LocaleOSarch.
+
+Default file encoding: \LocaleOScodeset.
+
+The PDF file was last built: \texttt{\LocaleNowStamp}.
+
+The source file was last modified: \texttt{\LocaleFileMod}.
+
+Main locale: \LocaleMain\ (\LocaleMainDialect).
+
+Other locales: \LocaleOther.
+
+\test
+
+\selectlocale{de-CH-1996}
+\test
+
+\selectlocale{fr-BE}
+\test
+
+\selectlocale{pt-BR}
+\test
+
+\end{document}
diff --git a/macros/generic/tex-locale/tex-locale.dtx b/macros/generic/tex-locale/tex-locale.dtx
new file mode 100644
index 0000000000..839c8834c0
--- /dev/null
+++ b/macros/generic/tex-locale/tex-locale.dtx
@@ -0,0 +1,9082 @@
+%\iffalse
+% tex-locale.dtx generated using makedtx version 1.2 (c) Nicola Talbot
+% Command line args:
+% -src "tex-locale.sty\Z=>tex-locale.sty"
+% -src "tex-locale.tex\Z=>tex-locale.tex"
+% -src "tex-locale-scripts-enc.def\Z=>tex-locale-scripts-enc.def"
+% -src "tex-locale-encodings.def\Z=>tex-locale-encodings.def"
+% -src "tex-locale-support.def\Z=>tex-locale-support.def"
+% -author "Nicola Talbot"
+% -section "chapter"
+% -doc "tex-locale-manual.tex"
+% tex-locale
+% Created on 2018/8/26 19:14
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2018 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass[report,widecs,inlinetitle]{nlctdoc}
+
+\DeleteShortVerb{|}
+
+\usepackage{metalogo}
+
+\let\orgtheindex\theindex
+\let\orgendtheindex\endtheindex
+\usepackage{imakeidx}
+\usepackage[a4paper,left=1.5in,right=0.5in]{geometry}
+\usepackage[colorlinks,
+ bookmarks,
+ hyperindex=false,
+ pdfauthor={Nicola L.C. Talbot},
+ pdftitle={tex-locale: setup document locale}]{hyperref}
+
+\CheckSum{3313}
+
+\newcommand{\file}[1]{\texttt{#1}}
+
+\doxitem{Option}{option}{package options}
+
+\renewcommand{\nlctdocmarginfmt}{\scriptsize\raggedright}
+\renewcommand\MacroFont{\ttfamily\mdseries}
+
+\renewcommand*{\usage}[1]{\textit{\hyperpage{#1}}}
+\renewcommand*{\main}[1]{\underline{\hyperpage{#1}}}
+\PageIndex
+\setcounter{IndexColumns}{2}
+\newcommand*{\PrintCodeIndex}{%
+ \bgroup
+ \let\theindex\orgtheindex
+ \let\endtheindex\orgendtheindex
+ \PrintIndex
+ \egroup
+}
+\IndexPrologue{%
+\clearpage\phantomsection
+\addcontentsline{toc}{chapter}{Code Index}%
+\chapter*{Code Index}\markboth{Code Index}{Code Index}%
+}
+
+\newenvironment{code}%
+{\begin{flushleft}\ttfamily\obeylines\obeyspaces}
+{\end{flushleft}\ignorespacesafterend}
+
+\makeindex[name=user,title=Main Index,intoc]
+\renewcommand{\iapp}[1]{\index[user]{#1@\appfmt{#1}|hyperpage}}
+\renewcommand{\iterm}[1]{\index[user]{#1|hyperpage}}
+\renewcommand{\ics}[1]{\cs{#1}\index[user]{#1@\protect\cs{#1}|hyperpage}}
+\renewcommand*{\ipkgopt}[2][]{%
+ \ifstrempty{#1}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}|hyperpage}}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}!#1@\pkgoptfmt{#1}|hyperpage}}%
+}
+\renewcommand*{\pkgopt}[2][]{%
+ \pkgoptfmt{#2}\ifstrempty{#1}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}|hyperpage}}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}!#1@\pkgoptfmt{#1}|hyperpage}}%
+}
+\renewcommand*{\isty}[1]{%
+ \index[user]{#1 package@\styfmt{#1} package|hyperpage}}
+
+\newcommand{\attrfmt}[1]{\texttt{#1}}
+
+\newcommand{\attr}[2]{%
+ \attrfmt{#2}%
+ \index[user]{attributes!#1!#2@\protect\attrfmt{#2}}}
+
+\newcommand{\mattr}[2]{%
+ \attr{#1@\protect\meta{#1}}{#2}%
+}
+
+\newcommand{\dattr}[1]{\mattr{dialect}{#1}}
+\newcommand{\rattr}[1]{\mattr{region}{#1}}
+\newcommand{\cattr}[1]{\mattr{currency}{#1}}
+
+\newcommand{\longarg}[1]{\texttt{-{}-#1}}
+\newcommand{\shortarg}[1]{\texttt{-#1}}
+
+\newcommand{\PDFLaTeX}{PDF\LaTeX}
+
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{3}
+
+\begin{document}
+\DocInput{tex-locale.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+%\MakeShortVerb{"}
+%
+%\title{tex-locale v1.0:
+%setup document locale}
+%\author{Nicola L. C. Talbot\\\url{http://www.dickimaw-books.com/}}
+%
+%\date{2018-08-26}
+%\maketitle
+%
+%\begin{abstract}
+%The generic \TeX\ \file{tex-locale.tex} code uses both \sty{tracklang}
+%(at least v1.3.4) and \sty{texosquery} (at least v1.2, but newest
+%version recommended) to look up the locale information from the
+%operating system and provide commands that can access
+%locale-dependent information, such as the currency symbol and
+%numeric separators. This works best with the shell escape when
+%building the document. (Some \hyperref[sec:noshell]{adjustments} are
+%needed to work without the shell escape.) \TeX\ Live 2017 now
+%includes \app{texosquery-jre8} on the restricted list, but the
+%\sty{texosquery} installation needs to be set up to enable this.
+%Set up instructions are in the file \file{texosquery.cfg}, which is
+%distributed with the \sty{texosquery} package. If the application
+%isn't on the restricted list, then you'll need to enable the
+%unrestricted mode, but take care as this mode is insecure.
+%
+%Example plain \XeTeX\ document:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\input locale
+%
+%Currency: \CurrentLocaleCurrency.
+%Date: \CurrentLocaleDate.
+%Time: \CurrentLocaleTime.
+%\bye
+%\end{verbatim}
+%
+%The \LaTeX\ package \file{tex-locale.sty} can additionally load
+%\sty{babel} or \sty{polyglossia} with the locale's language
+%setting, as well as various other
+%packages such as \sty{fontspec} (\XeLaTeX\ or \LuaLaTeX) or
+%\sty{fontenc} and \sty{inputenc}. Packages that provide currency
+%symbols can also be loaded automatically (\sty{textcomp} by default).
+%Example \LaTeX\ document:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage{tex-locale}
+%
+%\begin{document}
+%Currency: \CurrentLocaleCurrency.
+%Date: \CurrentLocaleDate.
+%Time: \CurrentLocaleTime.
+%\end{document}
+%\end{verbatim}
+%\end{abstract}
+%
+%\begin{important}
+%\TeX's restricted mode prohibits the use of quotes in the shell
+%escape for security reasons. This means that if you want the file
+%modification date and you have spaces in your filename you must use
+%the unrestricted mode to allow the filename to be delimited by
+%quotes. In general it's best to avoid spaces in file names.
+%\end{important}
+%
+%
+%\tableofcontents
+%\chapter{Introduction}
+%
+%The \sty{tex-locale} package is designed to set up the document's
+%locale-sensitive information by querying the relevant information
+%from the operating system using \app{texosquery}.
+%\sectionref{sec:generic} describes generic commands that can be used
+%in \LaTeX\ or plain \TeX\ documents. \sectionref{sec:latex}
+%describes the \LaTeX-specific package \file{tex-locale.sty}, which does
+%more than simply input \file{tex-locale.tex}.
+%
+%The generic code \file{tex-locale.tex} requires: \file{tracklang.tex} and
+%\file{texosquery.tex}. The \LaTeX\ package \file{tex-locale.sty}
+%additionally requires: \file{tracklang.sty}, \file{texosquery.sty},
+%\sty{etoolbox}, \sty{xfor}, \sty{ifxetex}, \sty{ifluatex}, \sty{xkeyval}
+%and optionally:
+%\begin{itemize}
+%\item \sty{datetime2} (and associated language modules);
+%\item \sty{textcomp} or \sty{fontawesome};
+%\item \sty{fontspec} or \sty{fontenc}\&\sty{inputenc};
+%\item \sty{polyglossia} or \sty{babel};
+%\item \sty{CJK}, \sty{CJKutf8} or \sty{xeCJK};
+%\item \sty{tracklang-scripts} (provided with \sty{tracklang}).
+%\end{itemize}
+%
+%The \sty{texosquery} package (distributed separately) comes with generic
+%\TeX\ code \file{texosquery.tex}, a simple \LaTeX\ package wrapper
+%\file{texosquery.sty} and a Java application that comes in three
+%variants:
+%\begin{itemize}
+%\item \file{texosquery-jre8.jar}: the full application, requires at
+%least Java 8.
+%\item \file{texosquery.jar}: a slightly cut-down version of the
+%application with less locale support, requires at least Java 7.
+%\item \file{texosquery-jre5.jar}: a significantly reduced version of
+%the application with poor locale support, requires at least Java 5.
+%\emph{Less secure than the other variants.}
+%\end{itemize}
+%The Java~8 variant (\app{texosquery-jre8}) is on \TeX~Live
+%2017's restricted list, so it's possible to use it with
+%the restricted shell escape. The other variants should not be added
+%to the restricted list as old versions of Java are deprecated and
+%considered security risks. In particular, the Java~5 variant's file
+%listing actions are less secure as they allow file listings outside
+%of the current directory path, which the Java~7 and 8 variants
+%prohibit. If you have Java~8 installed, I recommend that you make
+%\app{texosquery-jre8} the default. This can be done by editing the
+%configuration file \file{texosquery.cfg}. See the \sty{texosquery}
+%documentation for further details. (This document assumes
+%\app{texosquery-jre8} in the examples. Substitute the appropriate command if you
+%have a different set up.)
+%
+%\begin{important}
+%MiKTeX users will need to enable piped shell escape with
+%\longarg{enable-pipes} (unless the non-shell escape method described
+%in \sectionref{sec:noshell} is used).
+%\end{important}
+%
+%The information returned by \app{texosquery} has special markup
+%that's converted by \cs{TeXOSQuery} or \cs{TeXOSQueryFromFile}. For
+%example, \ics{fhyn} is used to represent a literal hyphen (category
+%code~12) whereas \ics{thyn} is used for a textual hyphen.
+%For example, if a file name containing a hyphen is returned, the
+%hyphen will be marked as \cs{fhyn}, whereas a date containing a
+%hyphen will use \cs{thyn}.
+%
+%\section{Using the package without the shell escape}
+%\label{sec:noshell}
+%
+%The \sty{tex-locale} package is designed for use with the piped shell escape
+%(preferably the restricted mode for greater security), but it's
+%still possible to use \file{tex-locale.tex} when the shell escape is disabled,
+%although it's less convenient. (You will need at least
+%\sty{texosquery} v1.4 for this method.)
+%
+%First compile your document with the shell escape disabled. The dry
+%run mode will automatically be on, and the \sty{texosquery} command
+%\cs{TeXOSQuery} will simply write the command it would've tried to
+%the transcript. This will be prefixed by \texttt{TeXOSQuery:}
+%
+%For example, suppose the file \texttt{test.tex} contains:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{de-CH-1996,fr-BE}
+%
+%\input locale
+%
+%Currency: \CurrentLocaleCurrency.
+%
+%\bye
+%\end{verbatim}
+%Here the main locale has been explicitly set to
+%\texttt{en-GB} and the other locales have been set to
+%\texttt{de-CH-1996} and \texttt{fr-BE}, so the transcript file
+%\texttt{test.log} will include:
+%\begin{verbatim}
+%TeXOSQuery: texosquery-jre8 -o -r -a -n -N -C -d 'test.tex' -D en-GB
+%-D de-CH-1996 -D fr-BE
+%\end{verbatim}
+%Copy and paste this command into a command prompt or terminal and redirect the
+%output to a file. (Don't include the initial \texttt{TeXOSQuery:}
+%and don't include any line breaks.) For example (omit line break):
+%\begin{verbatim}
+%texosquery-jre8 -o -r -a -n -N -C -d 'test.tex' -D en-GB
+%-D de-CH-1996 -D fr-BE > localesettings.tex
+%\end{verbatim}
+%Then define
+%\begin{definition}[\DescribeMacro\LocaleQueryFile]
+%\cs{LocaleQueryFile}
+%\end{definition}
+%to the file name before loading \sty{tex-locale}:
+%\begin{verbatim}
+%\def\LocaleQueryFile{localesettings}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{de-CH-1996,fr-BE}
+%
+%\input locale
+%
+%Currency: \CurrentLocaleCurrency.
+%
+%\bye
+%\end{verbatim}
+%If you change any of the document settings you'll need to re-run
+%\app{texosquery} to update the query result file.
+%
+%\begin{important}
+%If you want the current date or time, the result files will need to
+%be updated before every document build.
+%\end{important}
+%
+%For example, if the file \texttt{test.tex} is simply:
+%\begin{verbatim}
+%\input locale
+%
+%Today: \CurrentLocaleShortDate.
+%Currency: \CurrentLocaleCurrency.
+%
+%\bye
+%\end{verbatim}
+%Then the document build process would be:
+%\begin{verbatim}
+%texosquery-jre8 -o -r -a -n -N -C -d 'test.tex' -D > testsettings.tex
+%etex '\def\LocaleQueryFile{testsettings}\input test'
+%\end{verbatim}
+%(Replace \app{etex} with \app{pdftex} or \app{xetex}, as required.)
+%
+%\begin{important}
+%If \cs{LocaleQueryFile} is defined and non-empty, the non-shell escape method
+%will automatically be implemented even if the shell escape is actually
+%enabled.
+%\end{important}
+%
+%If you're using \LaTeX\ (\file{tex-locale.sty}), there may be an initial query with
+%\texttt{-b} or \texttt{-C} (or both) before \file{tex-locale.tex} is
+%input. The result of this will also need to be captured in a file.
+%For example:
+%\begin{verbatim}
+%texosquery-jre8 -b -C > localestysettings.tex
+%\end{verbatim}
+%This file name should be provided in the command
+%\begin{definition}[\DescribeMacro\LocaleStyQueryFile]
+%\cs{LocaleStyQueryFile}
+%\end{definition}
+%In this case you only need to update the file if you change the
+%document locales, encoding or engine. (For example, if you change the
+%value of the package options \pkgopt{main}, \pkgopt{other},
+%\pkgopt{support}, \pkgopt{inputenc} or \pkgopt{fontenc}.)
+%
+%\LaTeX\ example:
+%\begin{verbatim}
+%\documentclass{article}
+%\newcommand{\LocaleStyQueryFile}{localestysettings}
+%\newcommand{\LocaleQueryFile}{localesettings}
+%\usepackage[main=en-GB,other={de-CH-1996,fr-BE}]{tex-locale}
+%\begin{document}
+%Currency: \CurrentLocaleCurrency.
+%\end{document}
+%\end{verbatim}
+%
+%\begin{important}
+%Even if the shell escape is on, if \cs{LocaleQueryFile} or
+%\cs{LocaleStyQueryFile} have been set (to a non-empty value),
+%they'll be used instead.
+%\end{important}
+%
+%It's possible to define one but not the other command. For example:
+%\begin{verbatim}
+%\documentclass{article}
+%\newcommand{\LocaleStyQueryFile}{localestysettings}
+%\usepackage[main=en-GB,other={de-CH-1996,fr-BE}]{tex-locale}
+%\begin{document}
+%Currency: \CurrentLocaleCurrency.
+%\end{document}
+%\end{verbatim}
+%This requires the shell escape for the main locale information
+%(used in \file{tex-locale.tex}) but omits the \LaTeX-specific shell
+%escape used in \file{tex-locale.sty}.
+%
+%\section{Encoding}
+%\label{sec:encoding}
+%
+%The default encoding used by \app{texosquery} when writing the
+%results to STDOUT (which are piped in through the shell escape)
+%can be obtained with \longarg{codeset} (from v1.6). For example:
+%\begin{verbatim}
+%texosquery-jre8 --codeset
+%\end{verbatim}
+%The short form of this switch is \shortarg{cs}. So the above is
+%equivalent to
+%\begin{verbatim}
+%texosquery-jre8 -cs
+%\end{verbatim}
+%For example, if the encoding is UTF-8, then this returns
+%\begin{verbatim}
+%UTF\fhyn 8
+%\end{verbatim}
+%
+%There's a similar switch \longarg{codeset-lcs} (from v1.2) that
+%converts the encoding name to lower case and strips hyphens.
+%For example
+%\begin{verbatim}
+%texosquery-jre8 --codeset-lcs
+%\end{verbatim}
+%The short form is \shortarg{C}
+%\begin{verbatim}
+%texosquery-jre8 -C
+%\end{verbatim}
+%For example, if the encoding is UTF-8, then this returns
+%\begin{verbatim}
+%utf8
+%\end{verbatim}
+%(The switches are case-sensitive. The lower case \shortarg{c} has a
+%different meaning.)
+%
+%The document encoding must match the encoding used by
+%\app{texosquery} when the query is made (through \cs{TeXOSQuery} or
+%\cs{TeXOSQueryFromFile}). This is why the \LaTeX\ package
+%\file{tex-locale.sty} makes an initial query with \shortarg{C} so that
+%it can set up the appropriate input encoding when used with the
+%\pkgoptfmt{inputenc=auto} package option. If the document doesn't use
+%this interface, then the encoding needs to be correctly set before
+%the query is made.
+%
+%You have a choice of either changing the document encoding to match
+%the encoding used by \app{texosquery} or by changing
+%\app{texosquery}'s encoding to match all your documents.
+%For example, if your Java runtime environment is set up so that the
+%default file encoding is ISO~8859-1 (Latin-1) but you always use
+%UTF-8 in your source code, then you can instruct \app{texosquery} to
+%use UTF-8 with the \longarg{encoding} option (from v1.6). For example:
+%\begin{verbatim}
+%texosquery-jre8 --encoding UTF-8 -N
+%\end{verbatim}
+%will ensure that the currency symbol is written as a UTF-8
+%character. The short form is \shortarg{enc}. For example:
+%\begin{verbatim}
+%texosquery-jre8 -enc UTF-8 -N
+%\end{verbatim}
+%You can append this option to the definition of
+%\cs{TeXOSInvokerName}. For example:
+%\begin{verbatim}
+%\def\TeXOSInvokerName{texosquery-jre8 -enc UTF-8}
+%\end{verbatim}
+%
+%There are two hooks which, if defined, are used immediately before
+%or immediately after the main query is made in \file{tex-locale.tex}.
+%The hook used before the query is
+%\begin{definition}[\DescribeMacro\localeprequery]
+%\cs{localeprequery}
+%\end{definition}
+%and the hook used after the query is
+%\begin{definition}[\DescribeMacro\localepostquery]
+%\cs{localepostquery}
+%\end{definition}
+%These may start and end a grouping, if required, as the result from
+%the query is given a global assignment, so these may be used to
+%temporarily switch the input encoding just for the query. This is
+%done by \file{tex-locale.sty} if it detects that the document requires
+%\sty{CJKutf8}. In this case it defines the hooks to locally switch
+%the encoding while the CJK characters are read from the query result.
+%
+%In addition to using markup commands like \cs{fhyn} and \cs{thyn},
+%\app{texosquery} also wraps non-ASCII characters in the argument of
+%\cs{fwrp} (which expands to \cs{texosquerynonasciidetokwrap}) and
+%\cs{twrp} (which expands to \cs{texosquerynonasciiwrap}). The
+%expanded versions of these commands may be changed to deal with
+%non-ASCII characters, but in general it's simpler to either use the
+%same encoding as the document or use the hooks to temporarily switch
+%encoding while the information is read.
+%
+%\chapter{Generic Use}
+%\label{sec:generic}
+%
+%The commands available for generic use are defined in
+%\file{tex-locale.tex}. Plain \TeX\ users can load this using \cs{input}:
+%\begin{verbatim}
+%\input locale
+%\end{verbatim}
+%\LaTeX\ users are also able to do this, but are better off loading
+%\file{tex-locale.sty} instead:
+%\begin{verbatim}
+%\usepackage{tex-locale}
+%\end{verbatim}
+%This does more than simply inputting \file{tex-locale.tex} as it also
+%loads other packages as well, such as \sty{babel} or
+%\sty{polyglossia}. See \sectionref{sec:latex} for \LaTeX\ package options.
+%
+%By default \file{tex-locale.tex} assumes that the document locale should
+%match your own locale as identified by your operating system. This
+%means that the same document code will produce different results
+%when compiled in different locations. If you want information for a
+%specific locale, then you need to identify the document's main
+%locale and optionally other locales. For plain \TeX\ users, this
+%means defining \cs{LocaleMain} and \cs{LocaleOther} \emph{before} loading
+%\file{tex-locale.tex}. For \LaTeX\ users, this is done through the
+%package options provided by \file{tex-locale.sty}.
+%
+%\begin{definition}[\DescribeMacro\LocaleMain]
+%\cs{LocaleMain}
+%\end{definition}
+%If this is defined before \file{tex-locale.tex} is input, then this may
+%be defined as the keyword \texttt{locale}:
+%\begin{verbatim}
+%\def\LocaleMain{locale}
+%\end{verbatim}
+%or the relevant language tag. For example:
+%\begin{verbatim}
+%\def\LocaleMain{de-CH-1996}
+%\end{verbatim}
+%The \texttt{locale} keyword indicates that the main locale should be
+%found by querying the operating system (using \app{texosquery}).
+%After \file{tex-locale.tex} has been input, this command will be set to
+%the language tag for the main locale. If \cs{LocaleMain} is undefined before
+%\file{tex-locale.tex} is input, then \texttt{locale} is assumed.
+%
+%\begin{definition}[\DescribeMacro\LocaleOther]
+%\cs{LocaleOther}
+%\end{definition}
+%If this is defined before \file{tex-locale.tex} is input, then this
+%should be a comma-separated list of language tags for the other
+%locales. If \cs{LocaleMain} has been defined to a language tag, the
+%list may also include the keyword \texttt{locale} to indicate the
+%operating system's locale.
+%
+%Note that the generic \file{tex-locale.tex} doesn't load \sty{babel} or
+%\sty{polyglossia}, but it does track each language using
+%\sty{tracklang}'s interface. You can switch to any of these locales
+%using\label{pg:selectlocale}
+%\begin{definition}[\DescribeMacro\selectlocale]
+%\cs{selectlocale}\marg{locale}
+%\end{definition}
+%where \meta{locale} is either a language tag or \sty{tracklang}
+%dialect label. If the locale is unrecognised, an error will occur
+%unless \sty{texosquery}'s dry run mode is on, in which case it will
+%just be a warning.
+%
+%This uses \sty{tracklang}'s
+%\cs{SetCurrentTrackedDialect}\marg{dialect} but additionally, if
+%\cs{selectlanguage} has been defined, it will try to determine the
+%correct label to pass to \ics{selectlanguage}.
+%
+%This means that if you use \LaTeX\ with \file{tex-locale.sty}, which
+%loads \sty{babel} or \sty{polyglossia}, then you don't need to
+%remember, for example, that \texttt{en-GB} has the \sty{babel}
+%dialect label \texttt{british}, and can simply do
+%\begin{verbatim}
+%\selectlocale{en-GB}
+%\end{verbatim}
+%If \cs{selectlanguage} isn't defined, then this command doesn't
+%switch the document language (that is, it doesn't change the
+%hyphenation patterns or \cs{languagename}) but it does allow
+%the \cs{CurrentLocale\ldots} commands (described in \sectionref{sec:currentlocale}) to reflect
+%the change in locale.
+%
+%Here's a plain \XeTeX\ document that sets up three locales for the
+%document. The first (main one) is obtained from the operating system
+%(because \cs{LocaleMain} isn't defined) and the other two are
+%explicitly set by defining \cs{LocaleOther} before \file{tex-locale.tex}
+%is input:
+%\begin{verbatim}
+%\def\LocaleOther{fr-BE,de-CH-1996}
+%
+%\input locale
+%
+%Currency: \CurrentLocaleCurrency.
+%
+%\selectlocale{fr-BE}
+%
+%Currency: \CurrentLocaleCurrency.
+%
+%\selectlocale{de-CH-1996}
+%
+%Currency: \CurrentLocaleCurrency.
+%\bye
+%\end{verbatim}
+%If this document is in a file called \file{test.tex}, then it can be
+%compiled using:
+%\begin{verbatim}
+%pdftex --shell-escape test
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%etex --shell-escape test
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%xetex --shell-escape test
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%luatex --shell-escape test
+%\end{verbatim}
+%(Omit \longarg{shell-escape} if the application given by
+%\cs{TeXOSInvokerName} is on the restricted list.)
+%
+%The equivalent \LaTeX\ document is:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage[other={fr-BE,de-CH-1996}]{tex-locale}
+%
+%\begin{document}
+%Currency: \CurrentLocaleCurrency.
+%
+%\selectlocale{fr-BE}
+%
+%Currency: \CurrentLocaleCurrency.
+%
+%\selectlocale{de-CH-1996}
+%
+%Currency: \CurrentLocaleCurrency.
+%
+%\end{document}
+%\end{verbatim}
+%If this document is in a file called \file{test.tex}, then it can be
+%compiled using:
+%\begin{verbatim}
+%pdflatex --shell-escape test
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%latex --shell-escape test
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%xelatex --shell-escape test
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%lualatex --shell-escape test
+%\end{verbatim}
+%(Again, omit \longarg{shell-escape} if the application given by
+%\cs{TeXOSInvokerName} is on the restricted list.)
+%
+%In the first two cases (\texttt{pdflatex} or \texttt{latex}),
+%\sty{babel} will be loaded (and also \sty{fontenc} and \sty{inputenc}
+%and various other packages). Whereas in the last two cases
+%(\texttt{xelatex} or \texttt{lualatex}),
+%\sty{polyglossia} will be loaded (and also \sty{fontspec} and
+%various other packages). This means that \cs{selectlocale} will also
+%use \cs{selectlanguage} to switch the document language. In the
+%plain \TeX\ version, \cs{languagename} remains undefined.
+%
+%The other difference between the plain \TeX\ and the \LaTeX\
+%examples, is the default output produced by
+%\cs{CurrentLocaleCurrency}. The plain \TeX\ version uses the
+%currency codes (for example, EUR) whereas the \LaTeX\ version uses
+%currency symbols. These differences are described in more detail
+%below.
+%
+%\section{General Information}
+%\label{sec:general}
+%
+%Each invocation of \app{texosquery} requires starting up the
+%Java Virtual Machine, so \file{tex-locale.tex} minimises this overhead by
+%only using a single system call. The \file{tex-locale.sty} \LaTeX\
+%package may need additional information that also requires a
+%\app{texosquery} call before \file{tex-locale.tex} is input. So \LaTeX\
+%users will have at most two system calls to \app{texosquery} when
+%loading \file{tex-locale.sty} whereas plain \TeX\ users will only have a
+%single system call when loading just \file{tex-locale.tex}.
+%
+%Since it's necessary to run \app{texosquery} to obtain all the
+%locale information, \file{tex-locale.tex} uses the opportunity to also
+%fetch more general information that may be of use.
+%
+%\begin{definition}[\DescribeMacro\LocaleOSname]
+%\cs{LocaleOSname}
+%\end{definition}
+%This expands to the operating system name. For example,
+%\texttt{Linux}.
+%
+%\begin{definition}[\DescribeMacro\LocaleOSversion]
+%\cs{LocaleOSversion}
+%\end{definition}
+%This expands to the operating system version. For example,
+%\verb|4.1.13-100.fc21.x86_64|. (Note that the underscore in this
+%case has been detokenized.)
+%
+%\begin{definition}[\DescribeMacro\LocaleOSarch]
+%\cs{LocaleOSarch}
+%\end{definition}
+%This expands to the architecture. For example,
+%\texttt{amd64}.
+%
+%\begin{definition}[\DescribeMacro\LocaleOScodeset]
+%\cs{LocaleOScodeset}
+%\end{definition}
+%This expands to the operating system's default file encoding (or the
+%value of the Java setting \texttt{file.encoding}). This uses
+%\app{texosquery}'s \shortarg{C} switch, which converts the encoding
+%name to lower case and strips the hyphens. (For example, \texttt{UTF-8}
+%is converted to \texttt{utf8}.) If you prefer to use the
+%\shortarg{cs} (or \longarg{codeset}) switch, you can define
+%\begin{definition}[\DescribeMacro\LocaleQueryCodesetParam]
+%\cs{LocaleQueryCodesetParam}
+%\end{definition}
+%to the required switch. For example:
+%\begin{verbatim}
+%\def\LocaleQueryCodesetParam{-cs}
+%\input locale
+%Encoding: \LocaleOScodeset.
+%\bye
+%\end{verbatim}
+%(Note that \cs{codeset} was added to \app{texosquery} v1.6.)
+%
+%\begin{definition}[\DescribeMacro\LocaleOStag]
+%\cs{LocaleOStag}
+%\end{definition}
+%This expands to the operating system's language tag, but note that
+%this doesn't mean that this locale has been tracked (either as the
+%main locale or one of the other document locales). It's for
+%informational purposes only.
+%
+%\begin{definition}[\DescribeMacro\LocaleNowStamp]
+%\cs{LocaleNowStamp}
+%\end{definition}
+%This expands to the current date-time in PDF format. This is like
+%the PDF primitive \ics{pdfcreationdate} (also available with \LuaTeX\
+%through \cs{pdffeedback}). Since \cs{pdfcreationdate} isn't provided
+%by \XeTeX, \cs{LocaleNowStamp} can be used instead if required.
+%
+%You can also obtain the file modification date of the document
+%source file. The file is assumed to be \cs{jobname}\texttt{.tex},
+%but you can choose another instead by first defining
+%\begin{definition}[\DescribeMacro\LocaleMainFile]
+%\cs{LocaleMainFile}
+%\end{definition}
+%before loading \file{tex-locale.tex}. The value should be the file name.
+%For example:
+%\begin{verbatim}
+%\def\LocaleMainFile{mydoc.tex}
+%\input locale
+%\end{verbatim}
+%You can define this command to empty if you don't want the file
+%modification PDF date-stamp. For example:
+%\begin{verbatim}
+%\def\LocaleMainFile{}
+%\input locale
+%\end{verbatim}
+%If the file name contains spaces, you can't use the restricted shell
+%escape and will have to use the less secure unrestricted mode instead.
+%
+%If \cs{LocaleMainFile} is not empty, the modification date can be
+%accessed using
+%\begin{definition}[\DescribeMacro\LocaleFileMod]
+%\cs{LocaleFileMod}
+%\end{definition}
+%For example:
+%\begin{verbatim}
+%\input locale
+%
+%\pdfinfo{
+% /CreationDate (\LocaleNowStamp)
+% /ModDate (\LocaleFileMod)
+%}
+%
+%Now: \LocaleNowStamp.
+%Mod: \LocaleFileMod.
+%
+%\bye
+%\end{verbatim}
+%This command will be empty if the modification date wasn't found.
+%
+%\section{Attributes}
+%\label{sec:attributes}
+%
+%The \file{tex-locale.tex} package stores and references information
+%through the use of attributes. These are set using:
+%\begin{definition}[\DescribeMacro\LocaleSetAttribute]
+%\cs{LocaleSetAttribute}\marg{label}\marg{attribute}\marg{value}
+%\end{definition}
+%and accessed using
+%\begin{definition}[\DescribeMacro\LocaleGetAttribute]
+%\cs{LocaleGetAttribute}\marg{label}\marg{attribute}
+%\end{definition}
+%The \meta{label} identifies the type of information,
+%\meta{attribute} is the attribute's label and \meta{value} is the
+%attribute's value.
+%
+%There are three particular types of identifiers: locales, regions
+%and currencies. For convenience, there are some shortcut commands so
+%you don't need to use the special prefix part of the label.
+%
+%For locales, where \meta{dialect} is the \sty{tracklang} dialect
+%label associated with that locale:
+%\begin{definition}[\DescribeMacro\LocaleSetDialectAttribute]
+%\cs{LocaleSetDialectAttribute}\marg{dialect}\marg{attribute}\marg{value}
+%\end{definition}
+%\begin{definition}[\DescribeMacro\LocaleGetDialectAttribute]
+%\cs{LocaleGetDialectAttribute}\marg{dialect}\marg{attribute}
+%\end{definition}
+%
+%Region attributes are set using:
+%\begin{definition}[\DescribeMacro\LocaleSetRegionAttribute]
+%\cs{LocaleSetRegionAttribute}\marg{region code}\marg{attribute}\marg{value}
+%\end{definition}
+%where \meta{region code} is the ISO territory code (for example,
+%\texttt{GB} or \texttt{CH}).
+%You can fetch a region's attribute value using:
+%\begin{definition}[\DescribeMacro\LocaleGetRegionAttribute]
+%\cs{LocaleGetRegionAttribute}\marg{region code}\marg{attribute}
+%\end{definition}
+%
+%Currency attributes are set using:
+%\begin{definition}[\DescribeMacro\LocaleSetCurrencyAttribute]
+%\cs{LocaleSetCurrencyAttribute}\marg{currency code}\marg{attribute}\marg{value}
+%\end{definition}
+%where \meta{currency code} is the ISO currency code (for example,
+%\texttt{GBP} or \texttt{EUR}).
+%You can fetch a currency's attribute value using:
+%\begin{definition}[\DescribeMacro\LocaleGetCurrencyAttribute]
+%\cs{LocaleGetCurrencyAttribute}\marg{currency code}\marg{attribute}
+%\end{definition}
+%
+%There's a debugging command available that uses \ics{show} to show
+%an attribute's value (or an error if undefined):
+%\begin{definition}[\DescribeMacro\localeshowattribute]
+%\cs{localeshowattribute}\marg{label}\marg{attribute}
+%\end{definition}
+%
+%Again there are shortcuts for the dialect, region and currency attribute groups:
+%\begin{definition}[\DescribeMacro\localeshowdialectattribute]
+%\cs{localeshowdialectattribute}\marg{dialect}\marg{attribute}
+%\end{definition}
+%\begin{definition}[\DescribeMacro\localeshowregionattribute]
+%\cs{localeshowregionattribute}\marg{region code}\marg{attribute}
+%\end{definition}
+%\begin{definition}[\DescribeMacro\localeshowcurrencyattribute]
+%\cs{localeshowcurrencyattribute}\marg{currency code}\marg{attribute}
+%\end{definition}
+%Further details of these and other attribute commands can be found in
+%\sectionref{sec:code.attributes}.
+%
+%For the most part, the attributes are stored and accessed internally
+%by the various commands described in this chapter, so you
+%won't usually need to worry about them. However, you can modify the
+%attributes. For example, the \texttt{de-CH-1996} locale uses an
+%apostrophe \verb|'| as the numeric group separator. This is actually
+%returned by \app{texosquery} as the 0x27 straight apostrophe from
+%the Basic Latin block. This isn't a problem for plain \TeX\ using
+%the default Computer Modern font, as illustrated by the following
+%document:
+%\begin{verbatim}
+%1'234.5
+%\bye
+%\end{verbatim}
+%This uses a curly quote in the resulting 1'234.5. However, changing the font can result in a
+%straight apostrophe instead, as illustrated in this plain \XeTeX\
+%document:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%1'234.5
+%\bye
+%\end{verbatim}
+%This isn't a problem with \XeLaTeX\ if the \sty{fontspec} package is
+%used:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage{fontspec}
+%\setmainfont{NimbusRoman-Regular}
+%
+%\begin{document}
+%1'234.5
+%\end{document}
+%\end{verbatim}
+%
+%So a plain \XeTeX\ user might prefer to change the numeric group
+%separator to the right single quote character ' (0x2019).
+%The numeric group separator is provided by the \dattr{groupsep}
+%dialect attribute. The \sty{tracklang} dialect label corresponding
+%to the \texttt{de-CH-1996} locale is \texttt{nswissgerman}. So the
+%group separator for this dialect can be changed by setting the
+%attribute to the new value using:
+%\begin{code}
+%\cs{LocaleSetDialectAttribute}\{nswissgerman\}\{groupsep\}\{\textquoteright\}
+%\end{code}
+%(See \sectionref{sec:generalattr} to convert a language tag to
+%dialect label.)
+%
+%\subsection{Attribute Lists}
+%\label{sec:attrlists}
+%
+%Some attribute values may be comma-separated lists. You can
+%add a unique item to a list using:
+%\begin{definition}[\DescribeMacro\LocaleAddToAttributeList]
+%\cs{LocaleAddToAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%This will do nothing if the item is already in the list, otherwise
+%it will append \meta{item} to the list. No
+%expansion is performed on \meta{item}. The item may be empty.
+%
+%\begin{definition}[\DescribeMacro\LocaleXpAddToAttributeList]
+%\cs{LocaleXpAddToAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%As above but the first token of \meta{item} is expanded before
+%being added to the list.
+%
+%You can test if an item is in one of those lists using:
+%\begin{definition}[\DescribeMacro\LocaleIfInAttributeList]
+%\cs{LocaleIfInAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%where \meta{item} is the item. This does \meta{true} if
+%\meta{item} is found in the \meta{attribute} list for
+%\meta{label}, otherwise it does \meta{false}. If the attribute
+%hasn't been defined, \meta{false} is done.
+%
+%There's a similar command that expands the first token of
+%\meta{item} before performing the test:
+%\begin{definition}[\DescribeMacro\LocaleIfInAttributeList]
+%\cs{LocaleIfXpInAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%You can iterate over the list using:
+%\begin{definition}[\DescribeMacro\LocaleForEachInAttributeList]
+%\cs{LocaleForEachInAttributeList}\marg{label}\marg{attribute}\marg{cs}\marg{body}
+%\end{definition}
+%This iterates over each element of the list, setting
+%the control sequence \meta{cs} to the current item and performing
+%\meta{body}. Note that this doesn't skip empty items.
+%
+%There are shortcut commands for the dialect, region and currency
+%attributes:
+%
+%\begin{definition}[\DescribeMacro\LocaleAddToDialectAttributeList]
+%\cs{LocaleAddToDialectAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleXpAddToDialectAttributeList]
+%\cs{LocaleXpAddToDialectAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleIfInDialectAttributeList]
+%\cs{LocaleIfInDialectAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleIfInDialectAttributeList]
+%\cs{LocaleIfXpInDialectAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleForEachInDialectAttributeList]
+%\cs{LocaleForEachInDialectAttributeList}\marg{label}\marg{attribute}\marg{cs}\marg{body}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleAddToRegionAttributeList]
+%\cs{LocaleAddToRegionAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleXpAddToRegionAttributeList]
+%\cs{LocaleXpAddToRegionAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleIfInRegionAttributeList]
+%\cs{LocaleIfInRegionAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleIfInRegionAttributeList]
+%\cs{LocaleIfXpInRegionAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleForEachInRegionAttributeList]
+%\cs{LocaleForEachInRegionAttributeList}\marg{label}\marg{attribute}\marg{cs}\marg{body}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleAddToCurrencyAttributeList]
+%\cs{LocaleAddToCurrencyAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleXpAddToCurrencyAttributeList]
+%\cs{LocaleXpAddToCurrencyAttributeList}\marg{label}\marg{attribute}\marg{item}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleIfInCurrencyAttributeList]
+%\cs{LocaleIfInCurrencyAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleIfInCurrencyAttributeList]
+%\cs{LocaleIfXpInCurrencyAttributeList}\marg{label}\marg{attribute}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\LocaleForEachInCurrencyAttributeList]
+%\cs{LocaleForEachInCurrencyAttributeList}\marg{label}\marg{attribute}\marg{cs}\marg{body}
+%\end{definition}
+%
+%\subsection{General Attributes}
+%\label{sec:generalattr}
+%
+%The language tag attribute type \mattr{lang tag}{tagtodialect} is set using
+%\begin{code}
+%\cs{LocaleSetAttribute}\marg{label}\{tagtodialect\}\marg{value}
+%\end{code}
+%and can be accessed using
+%\begin{code}
+%\cs{LocaleGetAttribute}\marg{label}\{tagtodialect\}
+%\end{code}
+%The \meta{label} is a language tag (such as \texttt{de-CH-1996})
+%and the \meta{value} is the associated \sty{tracklang} dialect label
+%(for example, \texttt{nswissgerman}).
+%This attribute is used by \ics{selectlocale} to convert the language
+%tag to the corresponding dialect label.
+%
+%If the time zone information was fetched with \app{texosquery}'s
+%\texttt{-Z} switch, then the time zone IDs will be stored
+%in the time zone \attr{timezone}{id} attribute list that can be fetched with
+%\begin{verbatim}
+%\LocaleGetAttribute{timezone}{id}
+%\end{verbatim}
+%or iterated over using \cs{LocaleForEachInAttributeList}.
+%For example:
+%\begin{verbatim}
+%\def\LocaleIfDateTimePatternsSupported#1#2{#1}
+%
+%\input locale
+%
+%Time zone IDs:
+%
+%\LocaleForEachInAttributeList{timezone}{id}{\ThisId}{\ThisId\endgraf}
+%
+%\bye
+%\end{verbatim}
+%This simply lists all the known time zone identifiers. (Since
+%\cs{LocaleForEachInAttributeList} is a short command,
+%\cs{endgraf} is used to create a paragraph break in the above
+%example.)
+%
+%There are two general currency attribute lists, where the
+%\meta{label} is \texttt{currencies} and the attribute values
+%are \attr{currencies}{official} for the list of official currency codes
+%and \attr{currencies}{regional} for the regional currency codes.
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM,en-GG,fr-BE,nl-BE,de-DE-1996}
+%
+%\input locale
+%
+%Official: \LocaleGetAttribute{currencies}{official}.
+%Regional: \LocaleGetAttribute{currencies}{regional}.
+%
+%\bye
+%\end{verbatim}
+%produces:
+%\begin{quote}
+%Official: GBP,EUR. Regional: GBP,IMP,GGP,EUR.
+%\end{quote}
+%
+%You can iterate over these lists using
+%\cs{LocaleForEachInAttributeList}. For example:
+%\begin{verbatim}
+%% arara: xetex: {shell: on}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM,en-GG,fr-BE,nl-BE,de-DE-1996}
+%
+%\input locale
+%
+%\LocaleForEachInAttributeList{currencies}{regional}{\thiscode}%
+%{\thiscode\ (\LocaleGetCurrencyAttribute{\thiscode}{sym}) }
+%
+%\bye
+%\end{verbatim}
+%which produces:
+%\begin{quote}
+%GBP (\pounds) IMP (M\pounds) GGP (\pounds) EUR (\texteuro)
+%\end{quote}
+%
+%\subsection{Dialect Attributes}
+%\label{sec:dialectattr}
+%
+%The following attributes are associated with dialects and can be set
+%using
+%\begin{code}
+%\cs{LocaleSetDialectAttribute}\marg{dialect}\marg{attribute}\marg{value}
+%\end{code}
+%or fetched with
+%\begin{code}
+%\cs{LocaleGetDialectAttribute}\marg{dialect}\marg{attribute}
+%\end{code}
+%where \meta{dialect} is the \sty{tracklang} dialect label.
+%Known values of \meta{attribute} are listed below.
+%
+%\subsubsection{General Dialect Attributes}
+%\label{sec:dialectgenattr}
+%
+%\begin{itemize}
+%\item\dattr{langtag}: the \meta{value} is the language tag associated with the
+%dialect label \meta{dialect}.
+%\item\dattr{langname}: the \meta{value} is the language name associated with the
+%dialect label \meta{dialect}.
+%\item\dattr{nativelangname}: the \meta{value} is the native language name
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{regionname}: the \meta{value} is the region name associated with the
+%dialect label \meta{dialect}.
+%\item\dattr{nativeregionname}: the \meta{value} is the native region name
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{variantname}: the \meta{value} is the variant name associated with the
+%dialect label \meta{dialect}.
+%\item\dattr{nativevariantname}: the \meta{value} is the native variant name associated with the
+%dialect label \meta{dialect}.
+%\end{itemize}
+%
+%\subsubsection{Dates and Times Dialect Attributes}
+%\label{sec:attrdatetime}
+%
+%The commands described in \sectionref{sec:datetimes} use these attributes.
+%
+%\begin{itemize}
+%\item\dattr{fulldate}: the \meta{value} is the full date associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleFullDate}.)
+%\item\dattr{longdate}: the \meta{value} is the long date associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleLongDate}.)
+%\item\dattr{meddate}: the \meta{value} is the medium date associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleMediumDate}.)
+%\item\dattr{shortdate}: the \meta{value} is the short date associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleShortDate}.)
+%\item\dattr{firstday}: the \meta{value} is the index of the first day of the week associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleFirstDayIndex}.)
+%\item\dattr{fulltime}: the \meta{value} is the full time associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleFullTime}.)
+%\item\dattr{longtime}: the \meta{value} is the long time associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleLongTime}.)
+%\item\dattr{medtime}: the \meta{value} is the medium time associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleMediumTime}.)
+%\item\dattr{shorttime}: the \meta{value} is the short time associated with the
+%dialect label \meta{dialect}. (Used by \ics{LocaleShortTime}.)
+%\item\dattr{fulldatetime}: the \meta{value} is the full date and time
+%associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleFullDateTime}.)
+%\item\dattr{longdatetime}: the \meta{value} is the long date and time
+%associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleLongDateTime}.)
+%\item\dattr{meddatetime}: the \meta{value} is the medium date and time
+%associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleMediumDateTime}.)
+%\item\dattr{shortdatetime}: the \meta{value} is the short date and time
+%associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleShortDateTime}.)
+%\end{itemize}
+%Note that the combined date and time attributes (such as
+%\attrfmt{fulldatetime}) aren't used by
+%\ics{CurrentLocaleDateTime}.
+%
+%\paragraph{Patterns}
+%The following attributes store date or time patterns (see
+%\sectionref{sec:datetimepat}).
+%\begin{itemize}
+%\item\dattr{fulldatefmt}: the \meta{value} is the full date format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{longdatefmt}: the \meta{value} is the long date format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{meddatefmt}: the \meta{value} is the medium date format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{shortdatefmt}: the \meta{value} is the short date format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{fulltimefmt}: the \meta{value} is the full time format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{longtimefmt}: the \meta{value} is the long time format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{medtimefmt}: the \meta{value} is the medium time format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{shorttimefmt}: the \meta{value} is the short time format associated
+%with the dialect label \meta{dialect}.
+%\item\dattr{fulldatetimefmt}: the \meta{value} is the full date time format
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{longdatetimefmt}: the \meta{value} is the long date time format
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{meddatetimefmt}: the \meta{value} is the medium date time format
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortdatetimefmt}: the \meta{value} is the short date time format
+%associated with the dialect label \meta{dialect}.
+%\end{itemize}
+%
+%\paragraph{Day Names}
+%
+%The commands \ics{LocaleDayName}, \ics{LocaleShortDayName},
+%\ics{LocaleStandaloneDayName} and \ics{LocaleStandaloneShortDayName}
+%use these attributes.
+%
+%\begin{itemize}
+%\item\dattr{day.0}: the \meta{value} is the name for day~0 (Monday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{day.1}: the \meta{value} is the name for day~1 (Tuesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{day.2}: the \meta{value} is the name for day~2 (Wednesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{day.3}: the \meta{value} is the name for day~3 (Thursday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{day.4}: the \meta{value} is the name for day~4 (Friday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{day.5}: the \meta{value} is the name for day~5 (Saturday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{day.6}: the \meta{value} is the name for day~6 (Sunday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.0}: the \meta{value} is the short name for day~0 (Monday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.1}: the \meta{value} is the short name for day~1 (Tuesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.2}: the \meta{value} is the short name for day~2 (Wednesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.3}: the \meta{value} is the short name for day~3 (Thursday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.4}: the \meta{value} is the short name for day~4 (Friday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.5}: the \meta{value} is the short name for day~5 (Saturday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{shortday.6}: the \meta{value} is the short name for day~6 (Sunday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.0}: the \meta{value} is the name for day~0 (Monday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.1}: the \meta{value} is the standalone name for day~1 (Tuesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.2}: the \meta{value} is the standalone name for day~2 (Wednesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.3}: the \meta{value} is the standalone name for day~3 (Thursday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.4}: the \meta{value} is the standalone name for day~4 (Friday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.5}: the \meta{value} is the standalone name for day~5 (Saturday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.day.6}: the \meta{value} is the standalone name for day~6 (Sunday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.0}: the \meta{value} is the standalone short name for day~0 (Monday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.1}: the \meta{value} is the standalone short name for day~1 (Tuesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.2}: the \meta{value} is the standalone short name for day~2 (Wednesday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.3}: the \meta{value} is the standalone short name for day~3 (Thursday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.4}: the \meta{value} is the standalone short name for day~4 (Friday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.5}: the \meta{value} is the standalone short name for day~5 (Saturday)
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortday.6}: the \meta{value} is the standalone short name for day~6 (Sunday)
+%associated with the dialect label \meta{dialect}.
+%\end{itemize}
+%
+%\paragraph{Month Names}
+%
+%The commands \ics{LocaleMonthName}, \ics{LocaleShortMonthName},
+%\ics{LocaleStandaloneMonthName} and \ics{LocaleStandaloneShortMonthName}
+%use these attributes.
+%
+%\begin{itemize}
+%\item\dattr{month.1}: the \meta{value} is the name for month~1
+%(January) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.2}: the \meta{value} is the name for month~2
+%(February) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.3}: the \meta{value} is the name for month~3
+%(March) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.4}: the \meta{value} is the name for month~4
+%(April) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.5}: the \meta{value} is the name for month~5
+%(May) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.6}: the \meta{value} is the name for month~6
+%(June) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.7}: the \meta{value} is the name for month~7
+%(July) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.8}: the \meta{value} is the name for month~8
+%(August) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.9}: the \meta{value} is the name for month~9
+%(September) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.10}: the \meta{value} is the name for month~10
+%(October) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.11}: the \meta{value} is the name for month~11
+%(November) associated with the dialect label \meta{dialect}.
+%\item\dattr{month.12}: the \meta{value} is the name for month~12
+%(December) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.1}: the \meta{value} is the short name for month~1
+%(January) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.2}: the \meta{value} is the short name for month~2
+%(February) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.3}: the \meta{value} is the short name for month~3
+%(March) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.4}: the \meta{value} is the short name for month~4
+%(April) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.5}: the \meta{value} is the short name for month~5
+%(May) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.6}: the \meta{value} is the short name for month~6
+%(June) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.7}: the \meta{value} is the short name for month~7
+%(July) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.8}: the \meta{value} is the short name for month~8
+%(August) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.9}: the \meta{value} is the short name for month~9
+%(September) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.10}: the \meta{value} is the short name for month~10
+%(October) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.11}: the \meta{value} is the short name for month~11
+%(November) associated with the dialect label \meta{dialect}.
+%\item\dattr{shortmonth.12}: the \meta{value} is the short name for month~12
+%(December) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.1}: the \meta{value} is the standalone name for month~1
+%(January) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.2}: the \meta{value} is the standalone name for month~2
+%(February) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.3}: the \meta{value} is the standalone name for month~3
+%(March) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.4}: the \meta{value} is the standalone name for month~4
+%(April) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.5}: the \meta{value} is the standalone name for month~5
+%(May) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.6}: the \meta{value} is the standalone name for month~6
+%(June) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.7}: the \meta{value} is the standalone name for month~7
+%(July) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.8}: the \meta{value} is the standalone name for month~8
+%(August) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.9}: the \meta{value} is the standalone name for month~9
+%(September) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.10}: the \meta{value} is the standalone name for month~10
+%(October) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.11}: the \meta{value} is the standalone name for month~11
+%(November) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.month.12}: the \meta{value} is the standalone name for month~12
+%(December) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.1}: the \meta{value} is the standalone short name for month~1
+%(January) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.2}: the \meta{value} is the standalone short name for month~2
+%(February) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.3}: the \meta{value} is the standalone short name for month~3
+%(March) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.4}: the \meta{value} is the standalone short name for month~4
+%(April) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.5}: the \meta{value} is the standalone short name for month~5
+%(May) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.6}: the \meta{value} is the standalone short name for month~6
+%(June) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.7}: the \meta{value} is the standalone short name for month~7
+%(July) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.8}: the \meta{value} is the standalone short name for month~8
+%(August) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.9}: the \meta{value} is the standalone short name for month~9
+%(September) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.10}: the \meta{value} is the standalone short name for month~10
+%(October) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.11}: the \meta{value} is the standalone short name for month~11
+%(November) associated with the dialect label \meta{dialect}.
+%\item\dattr{standalone.shortmonth.12}: the \meta{value} is the standalone short name for month~12
+%(December) associated with the dialect label \meta{dialect}.
+%\end{itemize}
+%
+%\subsubsection{Time Zones}
+%
+%These attributes won't be set if the time zone information wasn't
+%fetched (with \app{texosquery}'s \texttt{-Z} switch). These attributes
+%include the time zone identifier in the
+%attribute label. (The list of known identifiers is stored
+%in the \texttt{timezone} \attr{timezone}{id} attribute.) For example, \texttt{Europe/London} is the
+%identifier for the UK time zone. So the attribute
+%\texttt{timezone.Europe/London.short} is for the short name for that
+%zone (\texttt{GMT}) and \texttt{timezone.Europe/London.shortdst}
+%is for the short daylight saving name for that zone (\texttt{BST}).
+%
+%\begin{itemize}
+%\item\dattr{timezone.\meta{zone}.short}: the \meta{value} is the
+%short name for the zone identified by \meta{zone}
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{timezone.\meta{zone}.long}: the \meta{value} is the
+%long name for the zone identified by \meta{zone}
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{timezone.\meta{zone}.shortdst}: the \meta{value} is the
+%short daylight saving name for the zone identified by \meta{zone}
+%associated with the dialect label \meta{dialect}.
+%\item\dattr{timezone.\meta{zone}.longdst}: the \meta{value} is the
+%long daylight saving name for the zone identified by \meta{zone}
+%associated with the dialect label \meta{dialect}.
+%\end{itemize}
+%
+%\subsubsection{Numeric}
+%\label{sec:attrnum}
+%
+%\begin{itemize}
+%\item\dattr{groupsep}: the \meta{value} is the numeric group
+%separator associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleNumericGroupSep}.)
+%\item\dattr{decsep}: the \meta{value} is the numeric decimal
+%separator associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleNumericDecimalSep}.)
+%\item\dattr{currencysep}: the \meta{value} is the numeric currency
+%separator associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleNumericMonetarySep}.)
+%\item\dattr{exp}: the \meta{value} is the exponent symbol associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleNumericExponent}.)
+%\item\dattr{usesgroup}: the \meta{value} (either 1 or 0) indicates if
+%the number group separator should be used
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleIfNumericUsesGroup}.)
+%\item\dattr{percent}: the \meta{value} is the percentage symbol associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleNumericPercent}.)
+%\item\dattr{permill}: the \meta{value} is the per mill symbol associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleNumericPermill}.)
+%\item\dattr{decfmt}: the \meta{value} is the decimal format associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{CurrentLocaleDecimalPattern}.)
+%\item\dattr{intfmt}: the \meta{value} is the integer format associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{CurrentLocaleIntegerPattern}.)
+%\item\dattr{curfmt}: the \meta{value} is the currency format associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{CurrentLocaleCurrencyPattern}.)
+%\item\dattr{perfmt}: the \meta{value} is the percent format associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{CurrentLocalePercentPattern}.)
+%\item\dattr{currency}: the \meta{value} is the currency code associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleCurrencyLabel}.)
+%\item\dattr{regionalcurrency}: the \meta{value} is the regional currency code
+%associated with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleCurrencyRegionalLabel}.)
+%\item\dattr{currencysym}: the \meta{value} is the currency symbol associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleCurrencySymbol}, if the \attrfmt{currency}
+%attribute isn't \texttt{XXX}.)
+%\item\dattr{currencytex}: the \meta{value} is the \TeX\ code
+%representing the currency symbol associated
+%with the dialect label \meta{dialect}. (Used by
+%\ics{LocaleCurrencyTeXSymbol}, if the \attrfmt{currency}
+%attribute isn't \texttt{XXX}.)
+%\end{itemize}
+%
+%Note that the currency information is also available through
+%the currency attributes \cattr{official}, \cattr{sym} and \cattr{tex}.
+%The dialect attribute allows for a different symbol to be
+%used within the context of a specific dialect. For example,
+%if a country has multiple scripts (such as Latin and Cyrillic)
+%then the dialect currency symbol can reflect a specific script,
+%whereas the currency \cattr{sym} attribute might be in the default
+%script.
+%
+%
+%\subsection{Region Attributes}
+%\label{sec:regionattr}
+%
+%The following attributes are associated with region and can be set
+%using
+%\begin{code}
+%\cs{LocaleSetRegionAttribute}\marg{region code}\marg{attribute}\marg{value}
+%\end{code}
+%or fetched with
+%\begin{code}
+%\cs{LocaleGetRegionAttribute}\marg{region code}\marg{attribute}
+%\end{code}
+%
+%\begin{itemize}
+%\item\rattr{currency}: the regional currency code (for
+%example, \texttt{IMP}).
+%\item\rattr{dialect}: a comma-separated list of the dialects
+%associated with this region. For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{fr-BE,nl-BE}
+%\input locale
+%
+%GB: \LocaleGetRegionAttribute{GB}{dialect}.
+%BE: \LocaleGetRegionAttribute{BE}{dialect}.
+%
+%\bye
+%\end{verbatim}
+%produces: GB: british. BE: belgique,flemish.
+%\end{itemize}
+%
+%
+%\subsection{Currency Attributes}
+%\label{sec:currencyattr}
+%
+%The following attributes are associated with currency and can be set
+%using
+%\begin{code}
+%\cs{LocaleSetCurrencyAttribute}\marg{code}\marg{attribute}\marg{value}
+%\end{code}
+%or fetched with
+%\begin{code}
+%\cs{LocaleGetCurrencyAttribute}\marg{code}\marg{attribute}
+%\end{code}
+%where \meta{code} is the ISO currency code or regional currency
+%code.
+%
+%\begin{itemize}
+%\item\cattr{region}: a comma-separated list of regions that
+%use this currency. If the regional currency code is different from
+%the official ISO currency code, then both codes will have this
+%attribute set. For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM}
+%
+%\input locale
+%
+%GBP: \LocaleGetCurrencyAttribute{GBP}{region}.
+%IMP: \LocaleGetCurrencyAttribute{IMP}{region}.
+%
+%\bye
+%\end{verbatim}
+%produces: GBP: GB,IM. IMP: IM.
+%
+%\item \cattr{official}: the official ISO currency code for
+%\meta{code}. In most cases this will be the same as \meta{code}.
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM}
+%
+%\input locale
+%
+%GBP: \LocaleGetCurrencyAttribute{GBP}{official}.
+%IMP: \LocaleGetCurrencyAttribute{IMP}{official}.
+%
+%\bye
+%\end{verbatim}
+%produces: GBP: GBP. IMP: GBP.
+%
+%\item\cattr{sym}: the currency symbol (using characters, not
+%\TeX\ commands, except for \verb|\$|) for regional currency
+%\meta{code}.
+%
+%\item\cattr{tex}: the currency symbol using \TeX\ code (such
+%as \cs{texosquerycurrencypound}) for regional currency
+%\meta{code}.
+%\end{itemize}
+%
+%\section{Patterns}
+%\label{sec:patterns}
+%
+%The \sty{texosquery} package provides for two types of patterns:
+%date-time and numeric. The date-time patterns may just display a
+%date, or just a time or both. They may or may not include a time
+%zone. The numeric patterns can be used to format integers, decimals,
+%scientific notation, percentages or currency. New patterns can be
+%defined by commands provided in \file{texosquery.tex}. The
+%\sty{tex-locale} package can also fetch the patterns for the document
+%locales so that they can be applied to data in the document
+%to match the current locale.
+%
+%The numeric patterns are fairly easy to use but are tricky to
+%define. The date-time patterns are fairly easy to define but are
+%tricky to use.
+%
+%\subsection{Numeric Patterns}
+%\label{sec:numpatterns}
+%
+%The \sty{texosquery} numeric pattern symbol commands are redefined
+%by \sty{tex-locale} to use the appropriate symbol from the current
+%locale. For example, \ics{texosquerypatfmtgroupsep} is redefined to
+%use \cs{CurrentLocaleNumericGroupSep}. (See the \sty{texosquery}
+%documentation for further details of these pattern commands.)
+%
+%You can access a numeric pattern for a particular locale by querying
+%one of the dialect attributes listed in \sectionref{sec:attrnum}: \dattr{intfmt} (integer pattern),
+%\dattr{decfmt} (decimal pattern), \dattr{curfmt} (currency pattern) or
+%\dattr{perfmt} (percent pattern).
+%
+%These can be accessed explicitly using
+%\begin{definition}
+%\ics{LocaleGetDialectAttribute}\marg{dialect}\marg{attribute}
+%\end{definition}
+%For example:
+%\begin{verbatim}
+%\LocaleGetDialectAttribute{british}{intfmt}
+%\end{verbatim}
+%However it's simpler to use the shortcut commands described in
+%\sectionref{sec:currpat}. For example:
+%\begin{verbatim}
+%\CurrentLocaleIntegerPattern
+%\end{verbatim}
+%
+%A pattern can be used in two ways. If it's simply used in the
+%document, then it just reproduces the pattern specification. For
+%example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\input locale
+%
+%{\tt \CurrentLocaleDecimalPattern}
+%\bye
+%\end{verbatim}
+%This simply produces:
+%\begin{quote}
+%\texttt{\#,\#\#\#,\#\#\#,\#\#0.\#\#\#\#\#\#\#\#\#\#}
+%\end{quote}
+%This can be used for debugging purposes to check the pattern.
+%
+%The second use is to apply the pattern to a number. This is done
+%with \sty{texosquery}'s \cs{texosqueryfmtnumber} command:
+%\begin{definition}
+%\ics{texosqueryfmtnumber}\marg{pattern}\marg{int part}\marg{frac
+%part}\marg{mantissa}
+%\end{definition}
+%where \meta{pattern} is the pattern (defined using
+%\cs{texosquerydefpattern} or fetched with the \app{texosquery}
+%application), \meta{int part} is the integer part, \meta{frac part}
+%is the fractional part and \meta{mantissa} is the exponent part.
+%
+%For example:
+%\begin{verbatim}
+%% arara: xetex: {shell: on}
+%
+%\def\LocaleMain{en-GB}
+%\input locale
+%
+%\texosqueryfmtnumber{\CurrentLocaleIntegerPattern}{12}{34567}{4}
+%
+%\texosqueryfmtnumber{\CurrentLocaleCurrencyPattern}{12345}{67}{0}
+%
+%\texosqueryfmtnumber{\CurrentLocaleDecimalPattern}{123}{4567}{2}
+%
+%\texosqueryfmtnumber{\CurrentLocalePercentPattern}{123}{4567}{2}
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%123,456
+%
+%GBP12,345.67
+%
+%12,345.67
+%
+%1,234,567\%
+%\end{quote}
+%There are some shortcut commands provided, to allow for more
+%convenient code.
+%
+%A numeric pattern can be applied to a numeric value using
+%\begin{definition}[\DescribeMacro\localenumfmt]
+%\cs{localenumfmt}\marg{pattern}\marg{decimal}
+%\end{definition}
+%where \meta{pattern} is the pattern (as for \cs{texosqueryfmtnumber})
+%and \meta{decimal} is the numeric value in the form
+%\meta{int}\texttt{.}\meta{frac}\texttt{E}\meta{mantissa}
+%(where \texttt{.} represents the decimal separator and \texttt{E} represents
+%the exponent separator, regardless of locale). The \texttt{.}\meta{frac} and
+%\texttt{E}\meta{mantissa} parts are optional.
+%
+%The \cs{localenumfmt} command splits up \meta{decimal} into the
+%\meta{int part}, \meta{frac part} and \meta{mantissa} required by
+%\cs{texosqueryfmtnumber}. It then does
+%\begin{code}
+%\meta{fmt cs}\{\cs{texosqueryfmtnumber}\marg{pattern}\marg{int part}\marg{frac part}\marg{mantissa}
+%\end{code}
+%where \meta{fmt cs} is one of:
+%\begin{definition}[\DescribeMacro\localenumfmtneg]
+%\cs{localenumfmtneg}\marg{text}
+%\end{definition}
+%if the \meta{int part} is negative,
+%\begin{definition}[\DescribeMacro\localenumfmtzero]
+%\cs{localenumfmtzero}\marg{text}
+%\end{definition}
+%if the \meta{int part}, \meta{frac part} and \meta{mantissa} are all
+%zero, otherwise
+%\begin{definition}[\DescribeMacro\localenumfmtpos]
+%\cs{localenumfmtpos}\marg{text}
+%\end{definition}
+%These three commands all simply default to just doing \meta{text}.
+%
+%\begin{definition}[\DescribeMacro\localeint]
+%\cs{localeint}\marg{value}
+%\end{definition}
+%This is equivalent to
+%\begin{definition}
+%\cs{localenumfmt}\{\cs{CurrentLocaleIntegerPattern}\}\marg{value}
+%\end{definition}
+%
+%\begin{definition}[\DescribeMacro\localedec]
+%\cs{localedec}\marg{decimal}
+%\end{definition}
+%As above but uses \cs{CurrentLocaleDecimalPattern}.
+%
+%\begin{definition}[\DescribeMacro\localecur]
+%\cs{localecur}\marg{decimal}
+%\end{definition}
+%As above but uses \cs{CurrentLocaleCurrencyPattern}.
+%
+%\begin{definition}[\DescribeMacro\localeper]
+%\cs{localeper}\marg{decimal}
+%\end{definition}
+%As above but uses \cs{CurrentLocalePercentPattern}.
+%
+%The above example can be simplified to:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\input locale
+%
+%\localeint{12.34567E4}
+%
+%\localecur{12345.67}
+%
+%\localedec{123.4567E2}
+%
+%\localeper{123.4567E2}
+%\bye
+%\end{verbatim}
+%This produces the same result as before.
+%
+%As described in \sectionref{sec:currnumsym}, the currency unit can
+%be switched to a symbol by redefining \cs{localecurrchoice}. For
+%example:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR,de-CH-1996}
+%\input locale
+%
+%\def\localecurrchoice#1#2#3#4{#3}
+%
+%en-GB: \localecur{12345.67}
+%
+%\selectlocale{pt-BR}
+%pt-BR: \localecur{12345.67}
+%
+%\selectlocale{de-CH-1996}
+%de-CH-1996: \localecur{12345.67}
+%
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: \pounds 12,345.67
+%
+%pt-BR: R\$ 12.345,67
+%
+%de-CH-1996: SFr. 12'345.67
+%\end{quote}
+%
+%You can define your own pattern using the commands provided by
+%\sty{texosquery}. For example:
+%\begin{verbatim}
+%\texosquerydefpattern{\sinumpattern}{%
+% \sinumfmt
+% {\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\#\#\#\#\#\#\#\#\#}}%
+% {\-\#\#\#\#\#\#\#\#\0\0}%
+%}
+%\end{verbatim}
+%This can then be used with \cs{localenumfmt}. The \sty{texosquery}
+%documentation includes other examples, including a currency pattern
+%that shifts the sign before the currency symbol for negative
+%amounts:
+%\begin{verbatim}
+%\texosquerydefpattern{\curpattern}{%
+%\pmnumfmt
+%{\pcur{\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\0\#\#\#\#\#\#\#\#}}{}}%
+%{\pcur{\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\0\#\#\#\#\#\#\#\#}}{\-}}}
+%\end{verbatim}
+%(No sign is used for positive amounts.)
+%
+%Here's a complete document:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR,de-CH-1996}
+%\input locale
+%
+%\def\localecurrchoice#1#2#3#4{#3}
+%
+%\texosquerydefpattern{\sinumpattern}{%
+% \sinumfmt
+% {\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\#\#\#\#\#\#\#\#\#}}%
+% {\-\#\#\#\#\#\#\#\#\0\0}%
+%}
+%
+%\texosquerydefpattern{\curpattern}{%
+%\pmnumfmt
+%{\pcur{\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\0\#\#\#\#\#\#\#\#}}{}}%
+%{\pcur{\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\0\#\#\#\#\#\#\#\#}}{\-}}}
+%
+%en-GB:
+%\localenumfmt{\sinumpattern}{1.2345E-3}.
+%\localenumfmt{\curpattern}{12345.6}.
+%\localenumfmt{\curpattern}{-12345.6}.
+%\localenumfmt{\curpattern}{0}.
+%
+%\selectlocale{pt-BR}
+%pt-BR:
+%\localenumfmt{\sinumpattern}{1.2345E-3}.
+%\localenumfmt{\curpattern}{12345.6}.
+%\localenumfmt{\curpattern}{-12345.6}.
+%\localenumfmt{\curpattern}{0}.
+%
+%\selectlocale{de-CH-1996}
+%de-CH-1996:
+%\localenumfmt{\sinumpattern}{1.2345E-3}.
+%\localenumfmt{\curpattern}{12345.6}.
+%\localenumfmt{\curpattern}{-12345.6}.
+%\localenumfmt{\curpattern}{0}.
+%
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: 1.2345E$-$03. \pounds 12,345.60. $-$\pounds12,345.60.
+%\pounds0.00.
+%
+%pt-BR: 1,2345E$-$03. R\$12.345,60. $-$R\$12.345,60.
+%R\$0,00.
+%
+%de-CH-1996: 1.2345E$-$03. SFr.12'345.60. $-$SFr.12'345.60.
+%SFr.0.00.
+%\end{quote}
+%
+%Here's a \LaTeX\ alternative that redefines the formatting commands
+%used by \cs{localenumfmt}:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage{color}
+%\usepackage[main={en-GB},other={pt-BR,de-CH-1996}]{tex-locale}
+%\setmainfont{NimbusRoman-Regular}
+%
+%\texosquerydefpattern{\sinumpattern}{%
+% \sinumfmt
+% {\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\#\#\#\#\#\#\#\#\#}}%
+% {\-\#\#\#\#\#\#\#\#\0\0}%
+%}
+%
+%\texosquerydefpattern{\curpattern}{%
+%\pmnumfmt
+%{\pcur{\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\0\#\#\#\#\#\#\#\#}}{}}%
+%{\pcur{\decfmt{\#\,\#\#\#\,\#\#\#\,\#\#\0}{\0\0\#\#\#\#\#\#\#\#}}{\-}}}
+%
+%\renewcommand*{\localenumfmtpos}[1]{\textcolor{green}{#1}}
+%\renewcommand*{\localenumfmtneg}[1]{\textcolor{red}{#1}}
+%\renewcommand*{\localenumfmtzero}[1]{\textbf{#1}}
+%
+%\begin{document}
+%
+%en-GB:
+%\localenumfmt{\sinumpattern}{1.2345E-3}.
+%\localenumfmt{\curpattern}{12345.6}.
+%\localenumfmt{\curpattern}{-12345.6}.
+%\localenumfmt{\curpattern}{0}.
+%
+%\selectlocale{pt-BR}
+%pt-BR:
+%\localenumfmt{\sinumpattern}{1.2345E-3}.
+%\localenumfmt{\curpattern}{12345.6}.
+%\localenumfmt{\curpattern}{-12345.6}.
+%\localenumfmt{\curpattern}{0}.
+%
+%\selectlocale{de-CH-1996}
+%de-CH-1996:
+%\localenumfmt{\sinumpattern}{1.2345E-3}.
+%\localenumfmt{\curpattern}{12345.6}.
+%\localenumfmt{\curpattern}{-12345.6}.
+%\localenumfmt{\curpattern}{0}.
+%\end{document}
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: \textcolor{green}{1.2345E$-$03}.
+%\textcolor{green}{\pounds 12,345.60}.
+%\textcolor{red}{$-$\pounds12,345.60}.
+%\textbf{\pounds0.00}.
+%
+%pt-BR: \textcolor{green}{1,2345E$-$03}.
+%\textcolor{green}{R\$12.345,60}.
+%\textcolor{red}{$-$R\$12.345,60}.
+%\textbf{R\$0,00}.
+%
+%de-CH-1996: \textcolor{green}{1.2345E$-$03}.
+%\textcolor{green}{SFr.12'345.60}.
+%\textcolor{red}{$-$SFr.12'345.60}.
+%\textbf{SFr.0.00}.
+%\end{quote}
+%
+%\subsection{Date-Time Patterns}
+%\label{sec:datetimepat}
+%
+%In addition to providing locale-sensitive strings for the current
+%date-time, the \app{texosquery} application can also provide the
+%locale's pattern that's used to describe how the dates and times
+%should be formatted. Additionally, it can provide time-zone mappings
+%from identifying labels to locale-sensitive names. Both these things
+%require extra overhead and so these functions aren't on by default.
+%
+%You can enable them by defining
+%\begin{definition}[\DescribeMacro\LocaleIfDateTimePatternsSupported]
+%\cs{LocaleIfDateTimePatternsSupported}\marg{true}\marg{false}
+%\end{definition}
+%\emph{before} you input \file{tex-locale.tex}. \LaTeX\ users can use the
+%more convenient \pkgopt{timedata} package option:
+%\begin{verbatim}
+%\usepackage[timedata]{tex-locale}
+%\end{verbatim}
+%Plain \TeX\ users need to define
+%\cs{LocaleIfDateTimePatternsSupported} so that it does the \meta{true}
+%argument and ignores the \meta{false} argument:
+%\begin{verbatim}
+%\def\LocaleIfDateTimePatternsSupported#1#2{#1}
+%\input locale
+%\end{verbatim}
+%
+%If enabled, \sty{tex-locale} will add the \texttt{-M} and \texttt{-Z}
+%switches to the \app{texosquery} command invocation. This will
+%additionally redefine \sty{texosquery}'s pattern format commands
+%(such as \cs{texosqueryfmtpatMMM}) to use the appropriate commands
+%for the current locale. For example, \cs{texosqueryfmtpatMMM}\marg{n} is
+%redefined to use \cs{CurrentLocaleShortMonthName}\marg{n}. (See the
+%\sty{texosquery} documentation for further details on these
+%commands.)
+%
+%If date-time patterns are supported then the current date-time data will be
+%stored in
+%\begin{definition}[\DescribeMacro\LocaleDateTimeInfo]
+%\cs{LocaleDateTimeInfo}
+%\end{definition}
+%This will be empty if date-time patterns aren't supported.
+%
+%The value of this command contains all the information for the current date-time provided
+%in a format that can easily be parsed by date or time patterns.
+%(This is done through \sty{texosquery}'s \ics{texosqueryfmtdatetime}
+%command, which is internally used by
+%\ics{LocaleApplyDateTimePattern}, described below.)
+%For example, \cs{LocaleDateTimeInfo} might be set to
+%\begin{verbatim}
+%{1}{2017}{2017}{3}{12}{4}{85}{26}{4}{7}{1}{19}{19}{7}{7}{16}{39}{136}
+%{{1}{0}{Europe/London}{1}}
+%\end{verbatim}
+%(Line break inserted above for clarity.) See the \sty{texosquery}
+%documentation for details of this syntax.
+%
+%Alternatively you can use \sty{texosquery}'s pattern generator to
+%create your own date-time pattern and explicitly use
+%\cs{texosqueryfmtdatetime}. In which case \cs{LocaleDateTimeInfo}
+%provides a convenient way of applying the pattern to the current
+%date-time. For example:
+%\begin{verbatim}
+%\def\LocaleIfDateTimePatternsSupported#1#2{#1}
+%\def\LocaleMain{en-GB}
+%\input locale
+%
+%\texosquerydefpattern{\pattern}{\%3E \%1d \%3M \%4y \%2H:\%2m:\%2s \%2z}
+%
+%\ifx\LocaleDateTimeInfo\empty
+%\else
+% \expandafter\texosqueryfmtdatetime\expandafter\pattern\LocaleDateTimeInfo
+%\fi
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%Sun 26 Mar 2017 21:38:06 BST
+%\end{quote}
+%(assuming that was the date and time of the document build). The
+%textual elements (\qt{Sun}, \qt{Mar} and \qt{BST}) are obtained from
+%the current locale.
+%
+%If the date-time patterns are supported, you can apply a pattern to
+%a specific date or time using
+%\begin{definition}[\DescribeMacro\LocaleApplyDateTimePattern]
+%\cs{LocaleApplyDateTimePattern}\marg{dialect}\marg{attribute}\marg{data}
+%\end{definition}
+%This uses \sty{texosquery}'s \cs{texosqueryfmtdatetime} command to
+%format a date or time according to a date-time pattern (identified
+%by \meta{attribute}) for the locale identified by \meta{dialect}.
+%The \sty{texosquery} manual provides further details on this
+%command, but essentially the first argument of \cs{texosqueryfmtdatetime}
+%should be a control sequence containing the special pattern markup
+%and the remaining arguments are the date-time data, which are
+%supplied in the \meta{data} argument of \cs{LocaleApplyDateTimePattern}.
+%
+%The \ics{LocaleDateTimeInfo} command will either be empty or set to
+%the correct data for the current date and time. This can be used
+%in the \meta{data} argument. Since \cs{LocaleDateTimeInfo} might be
+%empty, \cs{LocaleApplyDateTimePattern} will first test for this and
+%not try applying the pattern in that case. (Remember that you can
+%also define your own custom date-time patterns, as mentioned in
+%\sectionref{sec:general}.)
+%
+%Note that the \meta{dialect} is used to fetch the pattern data, but
+%the month and day names will be obtained using the
+%\cs{CurrentLocale\ldots} commands described in
+%\sectionref{sec:currdatetime}, which may not match \meta{dialect}.
+%In general it's easiest to use the shortcut
+%\ics{CurrentLocaleApplyDateTimePattern} (\sectionref{sec:currpat}) instead to ensure the
+%pattern matches the current locale.
+%
+%The attributes associated with date-time patterns are listed below
+%(see \sectionref{sec:attrdatetime}).
+%\begin{itemize}
+%\item \dattr{fulldatefmt}: the full date format pattern (as used in
+%\cs{LocaleFullDate}).
+%\item \dattr{longdatefmt}: the long date format pattern (as used in
+%\cs{LocaleLongDate}).
+%\item \dattr{meddatefmt}: the medium date format pattern (as used in
+%\cs{LocaleMediumDate}).
+%\item \dattr{shortdatefmt}: the short date format pattern (as used in
+%\cs{LocaleShortDate}).
+%\item \dattr{fulltimefmt}: the full time format pattern (as used in
+%\cs{LocaleFullTime}).
+%\item \dattr{longtimefmt}: the long time format pattern (as used in
+%\cs{LocaleLongTime}).
+%\item \dattr{medtimefmt}: the medium time format pattern (as used in
+%\cs{LocaleMediumTime}).
+%\item \dattr{shorttimefmt}: the short time format pattern (as used in
+%\cs{LocaleShortTime}).
+%\item \dattr{fulldatetimefmt}: the full date and time format pattern.
+%\item \dattr{longdatetimefmt}: the long date and time format pattern.
+%\item \dattr{meddatetimefmt}: the medium date and time format pattern.
+%\item \dattr{shortdatetimefmt}: the short date and time format pattern.
+%\end{itemize}
+%
+%For example:
+%\begin{verbatim}
+%\def\LocaleIfDateTimePatternsSupported#1#2{#1}
+%\def\LocaleMain{en-GB}
+%
+%\input locale
+%
+%Now:
+%\CurrentLocaleApplyDateTimePattern{fulldatetimefmt}{\LocaleDateTimeInfo}.
+%\bye
+%\end{verbatim}
+%This displays:
+%\begin{quote}
+%Now: Sunday, 26 March 2017 21:12:10 British Summer Time.
+%\end{quote}
+%However, it's simpler to just use:
+%\begin{verbatim}
+%\def\LocaleIfDateTimePatternsSupported#1#2{#1}
+%\def\LocaleMain{en-GB}
+%
+%\input locale
+%
+%\def\localedatechoice#1#2#3#4{#1}
+%\def\localetimechoice#1#2#3#4{#1}
+%
+%Now: \CurrentLocaleDateTime.
+%\bye
+%\end{verbatim}
+%or with \LaTeX:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage[timedata,date=full,time=full,main={en-GB}]{tex-locale}
+%
+%\begin{document}
+%Now: \CurrentLocaleDateTime.
+%\end{document}
+%\end{verbatim}
+%
+%The date-time patterns are therefore more useful when applied to
+%something other that the current date-time. However, it's more
+%complicated to work out the data.
+%
+%For example:
+%\begin{verbatim}
+%\def\LocaleIfDateTimePatternsSupported#1#2{#1}
+%\def\LocaleMain{en-GB}
+%
+%\input locale
+%
+%\CurrentLocaleApplyDateTimePattern{fulldatetimefmt}%
+%{{1}{2017}{2017}{3}{12}{4}{85}{26}{4}{7}{1}{21}{21}{9}{9}{23}{36}{140}%
+%{{1}{0}{Europe/London}{1}}}
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%Sunday, 26 March 2017 21:23:36 British Summer Time.
+%\end{quote}
+%
+%
+%\section{Locale Information}
+%\label{sec:localedata}
+%
+%Information about each locale is fetched for each tracked dialect (the
+%main locale, identified by \cs{LocaleMain}, and the other locales,
+%identified by \cs{LocaleOther}). This information can be accessed
+%using the commands described below, where \meta{dialect} is a
+%\sty{tracklang} dialect label that identifies the locale. There are convenient commands
+%(\cs{CurrentLocale\ldots}) that select the appropriate command with
+%the label provided by the currently selected dialect. (See
+%\sectionref{sec:currentlocale}.)
+%
+%Most of the commands in this package are intended to be used in an
+%expandable context, and so will expand to nothing if the dialect isn't
+%recognised.
+%
+%\begin{definition}[\DescribeMacro\LocaleMainDialect]
+%\cs{LocaleMainDialect}
+%\end{definition}
+%This expands to the main locale's dialect label. For example with:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\input locale
+%\end{verbatim}
+%the main dialect is \texttt{british}.
+%
+%\begin{definition}[\DescribeMacro\LocaleMainRegion]
+%\cs{LocaleMainRegion}
+%\end{definition}
+%This expands to the main locale's region. For example, if the main
+%locale is \texttt{en-GB}, then the main region is \texttt{GB}.
+%
+%\begin{definition}[\DescribeMacro\LocaleLanguageTag]
+%\cs{LocaleLanguageTag}\marg{dialect}
+%\end{definition}
+%Expands to the language tag for the given dialect. For example, if
+%the document locales are set using:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR,fr-BE,de-CH-1996}
+%\input locale
+%\end{verbatim}
+%then
+%\begin{verbatim}
+%\LocaleLanguageTag{british}
+%\end{verbatim}
+%will expand to \texttt{en-GB} and
+%\begin{verbatim}
+%\LocaleLanguageTag{nswissgerman}
+%\end{verbatim}
+%will expand to \texttt{de-CH-1996}.
+%
+%\begin{definition}[\DescribeMacro\LocaleLanguageName]
+%\cs{LocaleLanguageName}\marg{dialect}
+%\end{definition}
+%The name of the language associated with \meta{dialect} provided in
+%the Java virtual machine's default language.
+%
+%\begin{definition}[\DescribeMacro\LocaleLanguageNativeName]
+%\cs{LocaleLanguageNativeName}\marg{dialect}
+%\end{definition}
+%The name of the language associated with \meta{dialect} provided in
+%that language.
+%
+%For example:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR,fr-BE}
+%
+%\input locale
+%
+%en-GB: \LocaleLanguageName{british}.
+%pt-BR: \LocaleLanguageName{brazilian}.
+%fr-BE: \LocaleLanguageName{belgique}.
+%\bye
+%\end{verbatim}
+%For me this produces:
+%\begin{quote}
+%en-GB: English. pt-BR: Portuguese. fr-BE: French.
+%\end{quote}
+%because my operating system's default language is English. If I
+%edit the \app{texosquery-jre8} bash script so that it includes
+%\begin{verbatim}
+%-Duser.language=fr
+%\end{verbatim}
+%in the \app{java} arguments, then the same document will produce:
+%\begin{quote}
+%en-GB: anglais. pt-BR: portugais. fr-BE: fran\c{c}ais.
+%\end{quote}
+%So this isn't necessarily in the same language as the main locale (or
+%any of the other locales tracked in the document). It's in the Java
+%virtual machine's default language. Compare this document with:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR,fr-BE}
+%
+%\input locale
+%
+%en-GB: \LocaleLanguageNativeName{british}.
+%pt-BR: \LocaleLanguageNativeName{brazilian}.
+%fr-BE: \LocaleLanguageNativeName{belgique}.
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: English. pt-BR: portugu\^es. fr-BE: fran\c{c}ais.
+%\end{quote}
+%So in this case each name is displayed according to its own language.
+%
+%There are similar commands for the region and variant.
+%\begin{definition}[\DescribeMacro\LocaleRegionName]
+%\cs{LocaleRegionName}\marg{dialect}
+%\end{definition}
+%The name of the region associated with \meta{dialect} provided in
+%the Java virtual machine's default language. This will be an empty
+%string if the region wasn't supplied.
+%
+%\begin{definition}[\DescribeMacro\LocaleRegionNativeName]
+%\cs{LocaleRegionNativeName}\marg{dialect}
+%\end{definition}
+%The name of the region associated with \meta{dialect} provided in
+%that language. This will be an empty string if the region wasn't supplied.
+%
+%\begin{definition}[\DescribeMacro\LocaleVariantName]
+%\cs{LocaleVariantName}\marg{dialect}
+%\end{definition}
+%The name of the variant associated with \meta{dialect} provided in
+%the Java virtual machine's default language. This will be an empty
+%string if a variant wasn't supplied.
+%
+%\begin{definition}[\DescribeMacro\LocaleVariantNativeName]
+%\cs{LocaleVariantNativeName}\marg{dialect}
+%\end{definition}
+%The name of the variant associated with \meta{dialect} provided in
+%that language. This will be an empty string if a variant wasn't supplied.
+%This may well be the same as \cs{LocaleVariantName} as the variants
+%are often identifiers (such as \texttt{1996} in the case of
+%\texttt{de-CH-1996}) that remain the same in different languages.
+%
+%You can find out if the language name, region name or variant have
+%been set using the commands listed below. In each case,
+%\meta{dialect} is again the dialect label, \meta{true} is the code
+%to do if the condition is true and \meta{false} is the code to do if
+%the condition is false.
+%
+%\begin{definition}[\DescribeMacro\LocaleIfHasLanguageName]
+%\cs{LocaleIfHasLanguageName}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%This tests if the dialect has an associated language name. This will
+%typically be true.
+%
+%\begin{definition}[\DescribeMacro\LocaleIfHasRegionName]
+%\cs{LocaleIfHasRegionName}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%This tests if the dialect has an associated region name. Some
+%language tags don't have regions supplied. For example:
+%\begin{verbatim}
+%\def\LocaleMain{en}
+%\input locale
+%\end{verbatim}
+%In this case, there's no region associated with the main locale.
+%
+%\begin{definition}[\DescribeMacro\LocaleIfHasVariantName]
+%\cs{LocaleIfHasVariantName}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%This tests if the dialect has an associated variant name. For
+%example, there's no variant in \texttt{de-DE} but there is a variant
+%in \texttt{de-DE-1996}.
+%
+%\section{Dates and Times}
+%\label{sec:datetimes}
+%
+%Date and time information is fetched for each tracked dialect.
+%The \file{tex-locale.tex} code doesn't
+%modify \ics{today} (although the \file{tex-locale.sty} \LaTeX\ package
+%can load \sty{datetime2}, which does). Instead, the dates or times
+%for a specific locale can be obtained using the commands listed
+%below. The \meta{dialect} argument indicates the \sty{tracklang}
+%dialect label. See \sectionref{sec:currentlocale} for shortcut
+%commands that select the appropriate command with the label of the
+%currently selected locale.
+%
+%Dates and times are wrapped in a formatting command:
+%\begin{definition}[\DescribeMacro\localedatetimefmt]
+%\cs{localedatetimefmt}\marg{date-time text}
+%\end{definition}
+%By default this simply does its argument. For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%
+%\input locale
+%
+%\def\localedatetimefmt#1{{\it #1}}
+%
+%Date: \LocaleFullDate{british}.
+%
+%\bye
+%\end{verbatim}
+%This displays the date in italic. The \LaTeX\ equivalent is:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage[main=en-GB]{tex-locale}
+%
+%\renewcommand*{\localedatetimefmt}[1]{\textit{#1}}
+%
+%\begin{document}
+%Date: \LocaleFullDate{british}.
+%\end{document}
+%\end{verbatim}
+%
+%\subsection{Dates}
+%\label{sec:localedates}
+%
+%\begin{definition}[\DescribeMacro\LocaleFullDate]
+%\cs{LocaleFullDate}\marg{dialect}
+%\end{definition}
+%This displays the full date for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleLongDate]
+%\cs{LocaleLongDate}\marg{dialect}
+%\end{definition}
+%This displays the long date for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleMediumDate]
+%\cs{LocaleMediumDate}\marg{dialect}
+%\end{definition}
+%This displays the medium date for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleShortDate]
+%\cs{LocaleShortDate}\marg{dialect}
+%\end{definition}
+%This displays the short date for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%
+%\input locale
+%
+%Full: \LocaleFullDate{british}.
+%Long: \LocaleLongDate{british}.
+%Medium: \LocaleMediumDate{british}.
+%Short: \LocaleShortDate{british}.
+%\bye
+%\end{verbatim}
+%In the above, the main locale is explicitly set by defining \cs{LocaleMain}
+%before loading \file{tex-locale.tex}. The \sty{tracklang} package
+%identifies the \texttt{en-GB} locale with the label
+%\texttt{british}.
+%
+%Different locales have different concepts of full, long, medium and
+%short dates. In most cases the short form is numeric and the full
+%form is textual. The medium form may be numeric or it may use an
+%abbreviated month name. The locale provided used by Java may also
+%influence the result. For example, if you are using
+%\app{texosquery-jre8} with \texttt{java.locale.providers} set to
+%\texttt{CLDR,JRE} then the above document will display (assuming
+%today is 2017-03-26):
+%\begin{quote}
+%Full: Sunday, 26 March 2017. Long: 26 March 2017. Medium: 26 Mar
+%2017. Short: 26/03/2017.
+%\end{quote}
+%However, if I instead use the Java 7 version (\file{texosquery.jar})
+%which doesn't support the CLDR, then the above document will
+%display:
+%\begin{quote}
+%Full: Sunday, 26 March 2017. Long: 26 March 2017. Medium:
+%26-Mar-2017. Short: 26/03/17.
+%\end{quote}
+%The CLDR provides more extensive locale support than the JRE. In the
+%case of \texttt{en-GB}, the difference is minor (as shown above),
+%but in some cases a language may be supported in the CLDR but not in
+%the JRE. For example, if in the above document I change the main
+%locale to \texttt{cy-GB} (which maps to the \sty{tracklang dialect
+%label \texttt{GBwelsh}}):
+%\begin{verbatim}
+%\def\LocaleMain{cy-GB}
+%
+%\input locale
+%
+%Full: \LocaleFullDate{GBwelsh}.
+%Long: \LocaleLongDate{GBwelsh}.
+%Medium: \LocaleMediumDate{GBwelsh}.
+%Short: \LocaleShortDate{GBwelsh}.
+%\bye
+%\end{verbatim}
+%then the Java 7 version produces US English dates:
+%\begin{quote}
+%Full: Sunday, March 26, 2017. Long: March 26, 2017. Medium: Mar 26,
+%2017. Short: 3/26/17.
+%\end{quote}
+%This is because Welsh isn't supported by the JRE, but it is
+%supported by the CLDR, so the Java 8 version (\app{texosquery-jre8})
+%does work (provided \texttt{java.locale.providers} is set to
+%\texttt{CLDR,JRE}):
+%\begin{quote}
+%Full: Dydd Sul, 26 Mawrth 2017. Long: 26 Mawrth 2017. Medium: 26
+%Mawrth 2017. Short: 26/03/2017.
+%\end{quote}
+%
+%\subsubsection{Week Days}
+%\label{sec:weekdays}
+%
+%In order to be compatible with \sty{pgfcalendar} (and hence
+%\sty{datetime2}), the \sty{tex-locale} package uses
+%a zero-based indexing where 0 represents Monday, 1 represents
+%Tuesday, etc. If you can't remember the index for a particular day,
+%you can use the following commands:
+%\begin{definition}[\DescribeMacro\dtmMondayIndex]
+%\cs{dtmMondayIndex}
+%\end{definition}
+%This expands to 0, the index for Monday.
+%
+%\begin{definition}[\DescribeMacro\dtmTuesdayIndex]
+%\cs{dtmTuesdayIndex}
+%\end{definition}
+%This expands to 1, the index for Tuesday.
+%
+%\begin{definition}[\DescribeMacro\dtmWednesdayIndex]
+%\cs{dtmWednesdayIndex}
+%\end{definition}
+%This expands to 2, the index for Wednesday.
+%
+%\begin{definition}[\DescribeMacro\dtmThursdayIndex]
+%\cs{dtmThursdayIndex}
+%\end{definition}
+%This expands to 3, the index for Thursday.
+%
+%\begin{definition}[\DescribeMacro\dtmFridayIndex]
+%\cs{dtmFridayIndex}
+%\end{definition}
+%This expands to 4, the index for Friday.
+%
+%\begin{definition}[\DescribeMacro\dtmSaturdayIndex]
+%\cs{dtmSaturdayIndex}
+%\end{definition}
+%This expands to 5, the index for Saturday.
+%
+%\begin{definition}[\DescribeMacro\dtmSundayIndex]
+%\cs{dtmSundayIndex}
+%\end{definition}
+%This expands to 6, the index for Sunday.
+%
+%You can get the day of week name identified by the Monday=0 based
+%index for a particular dialect using
+%\begin{definition}[\DescribeMacro\LocaleDayName]
+%\cs{LocaleDayName}\marg{dialect}\marg{index}
+%\end{definition}
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR}
+%
+%\input locale
+%
+%en-GB: \LocaleDayName{british}{0}.
+%pt-BR: \LocaleDayName{brazilian}{0}.
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: Monday. pt-BR: Segunda-feira.
+%\end{quote}
+%
+%The abbreviated day of week name can be obtained with:
+%\begin{definition}[\DescribeMacro\LocaleShortDayName]
+%\cs{LocaleShortDayName}\marg{dialect}\marg{index}
+%\end{definition}
+%This has the same syntax as the previous command. As with the date
+%commands described in the \hyperref[sec:localedates]{previous
+%section}, the support for the given locale depends on the locale
+%provider used by \app{texosquery}.
+%
+%Some languages have a different form for day of week names when used in a
+%standalone context, such as in a column header. These can be
+%obtained using the commands below, \emph{but only with
+%\app{texosquery-jre8}}. If you are using Java 7 or earlier, these
+%commands will produce identical results to the analogous command
+%above.
+%
+%\begin{definition}[\DescribeMacro\LocaleStandaloneDayName]
+%\cs{LocaleStandaloneDayName}\marg{dialect}\marg{index}
+%\end{definition}
+%The same syntax as above, this produces the standalone day of week
+%name. The abbreviated name is produced with:
+%\begin{definition}[\DescribeMacro\LocaleStandaloneShortDayName]
+%\cs{LocaleStandaloneShortDayName}\marg{dialect}\marg{index}
+%\end{definition}
+%
+%The first day of the week varies according to region. In some
+%locales, Monday is considered the first day of the week (for
+%example, en-GB), but in other locales, Sunday is the first day
+%(for example, pt-BR). You can find out which day of the week is
+%considered the first day using:
+%\begin{definition}[\DescribeMacro\LocaleFirstDayIndex]
+%\cs{LocaleFirstDayIndex}\marg{dialect}
+%\end{definition}
+%This expands to an integer index identifying the day.
+%
+%For example, Monday (0) is the first day of the week in \texttt{en-GB},
+%but Sunday (6) is the first day of the week in \texttt{pt-BR}.
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR}
+%
+%\input locale
+%
+%First day (en-GB): \LocaleFirstDayIndex{british}.
+%First day (pt-BR): \LocaleFirstDayIndex{brazilian}.
+%
+%\bye
+%\end{verbatim}
+%So the above produces:
+%\begin{quote}
+%First day (en-GB): 0. First day (pt-BR): 6.
+%\end{quote}
+%
+%Since it's possible that you may want to use a different indexing
+%system, there are commands provided to convert between them:
+%\begin{definition}[\DescribeMacro\LocaleDayIndexFromZeroMonToOneSun]
+%\cs{LocaleDayIndexFromZeroMonToOneSun}\marg{index}
+%\end{definition}
+%This converts a day index from the Monday=0 based system to the
+%Sunday=1 based system. For example, in Monday=0 indexing then the
+%index 3 represents Thursday. In the Sunday=1 based system, the index
+%5 represents Thursday, so
+%\begin{verbatim}
+%\LocaleDayIndexFromZeroMonToOneSun{3}
+%\end{verbatim}
+%expands to 5.
+%
+%\begin{definition}[\DescribeMacro\LocaleDayIndexFromZeroMonToOneMon]
+%\cs{LocaleDayIndexFromZeroMonToOneMon}\marg{index}
+%\end{definition}
+%This converts a day index from the Monday=0 (Sunday=6) based system to
+%the ISO-8601 Monday=1 (Sunday=7) based system. For example
+%\begin{verbatim}
+%\LocaleDayIndexFromZeroMonToOneMon{3}
+%\end{verbatim}
+%expands to 4.
+%
+%\begin{definition}[\DescribeMacro\LocaleDayIndexFromOneSunToZeroMon]
+%\cs{LocaleDayIndexFromOneSunToZeroMon}\marg{index}
+%\end{definition}
+%This converts a day index from the Sunday=1 based system to the
+%Monday=0 based system. For example
+%\begin{verbatim}
+%\LocaleDayIndexFromOneSunToZeroMon{5}
+%\end{verbatim}
+%expands to 3. (That is, it performs the reverse of
+%\cs{LocaleDayIndexFromZeroMonToOneSun}.)
+%
+%\begin{definition}[\DescribeMacro\LocaleDayIndexFromOneMonToZeroMon]
+%\cs{LocaleDayIndexFromOneMonToZeroMon}\marg{index}
+%\end{definition}
+%This converts a day index from the ISO-8601 Monday=1 (Sunday=7) based system
+%to the Monday=0 (Sunday=6) based system. For example
+%\begin{verbatim}
+%\LocaleDayIndexFromOneMonToZeroMon{4}
+%\end{verbatim}
+%expands to 3. (That is, it performs the reverse of
+%\cs{LocaleDayIndexFromZeroMonToOneMon}.)
+%
+%\begin{definition}[\DescribeMacro\LocaleDayIndexFromRegion]
+%\cs{LocaleDayIndexFromRegion}\marg{dialect}\marg{index}
+%\end{definition}
+%This converts the region's day of the week (starting from 1 for the
+%region's first day) to Monday=0 based indexing. The region is identified by
+%\meta{dialect}. This first uses
+%\cs{LocaleFirstDayIndex}\marg{dialect} to find the
+%1-based first day of week index for the region and then converts it
+%to the Monday=0 based system. An invalid \meta{index} results in
+%\texttt{-1}.
+%
+%For example, the \texttt{en-GB} locale has Monday as the first day
+%of the week. So if the \meta{index} argument is 1
+%\begin{verbatim}
+%\LocaleDayIndexFromRegion{british}{1}
+%\end{verbatim}
+%that indicates Monday. This is then converted to 0 (using
+%\cs{LocaleDayIndexFromOneMonToZeroMon}). If the \meta{index}
+%argument is 7
+%\begin{verbatim}
+%\LocaleDayIndexFromRegion{british}{7}
+%\end{verbatim}
+%that indicates Sunday, so this would be converted to 6.
+%
+%The \texttt{pt-BR} locale has Sunday as the first day of the week.
+%So if the \meta{index} argument is 2
+%\begin{verbatim}
+%\LocaleDayIndexFromRegion{brazilian}{2}
+%\end{verbatim}
+%that indicates Monday. This is
+%converted to 0 (using \cs{LocaleDayIndexFromOneSunToZeroMon}). If
+%the \meta{index} argument is 1
+%\begin{verbatim}
+%\LocaleDayIndexFromRegion{brazilian}{1}
+%\end{verbatim}
+%that indicates Sunday, so this would be converted to 6.
+%
+%\begin{definition}[\DescribeMacro\LocaleDayIndexToRegion]
+%\cs{LocaleDayIndexToRegion}\marg{dialect}\marg{index}
+%\end{definition}
+%This performs the reverse operation. In this case the \meta{index}
+%argument is Monday=0 based and the result is the locale's day index
+%(starting with 1 for the first day of the week).
+%
+%\subsubsection{Month Names}
+%\label{sec:monthnames}
+%
+%The month name for a given locale can be obtained using
+%\begin{definition}[\DescribeMacro\LocaleMonthName]
+%\cs{LocaleMonthName}\marg{dialect}\marg{index}
+%\end{definition}
+%where \meta{dialect} is the \sty{tracklang} dialect label that
+%identifies the locale and \meta{index} is an integer from 1
+%(January) to 12 (December) indicating the month.
+%
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{pt-BR}
+%
+%\input locale
+%
+%en-GB: \LocaleMonthName{british}{1}.
+%pt-BR: \LocaleMonthName{brazilian}{1}.
+%
+%\bye
+%\end{verbatim}
+%produces:
+%\begin{quote}
+%en-GB: January. pt-BR: Janeiro.
+%\end{quote}
+%
+%The abbreviated month name can be obtained using
+%\begin{definition}[\DescribeMacro\LocaleShortMonthName]
+%\cs{LocaleShortMonthName}\marg{dialect}\marg{index}
+%\end{definition}
+%which has the same syntax as the previous command.
+%
+%Some languages have a different form for month names when used in a
+%standalone context, such as in a column header. These can be
+%obtained using the commands below, \emph{but only with
+%\app{texosquery-jre8}}. If you are using Java 7 or earlier, these
+%commands will produce identical results to the analogous command
+%above.
+%
+%\begin{definition}[\DescribeMacro\LocaleStandaloneMonthName]
+%\cs{LocaleStandaloneMonthName}\marg{dialect}\marg{index}
+%\end{definition}
+%The same syntax as above, this produces the standalone month
+%name. The abbreviated name is produced with:
+%\begin{definition}[\DescribeMacro\LocaleStandaloneShortMonthName]
+%\cs{LocaleStandaloneShortMonthName}\marg{dialect}\marg{index}
+%\end{definition}
+%
+%\subsection{Times}
+%\label{sec:localetimes}
+%
+%\begin{definition}[\DescribeMacro\LocaleFullTime]
+%\cs{LocaleFullTime}\marg{dialect}
+%\end{definition}
+%This displays the full time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleLongTime]
+%\cs{LocaleLongTime}\marg{dialect}
+%\end{definition}
+%This displays the long time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleMediumTime]
+%\cs{LocaleMediumTime}\marg{dialect}
+%\end{definition}
+%This displays the medium time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleShortTime]
+%\cs{LocaleShortTime}\marg{dialect}
+%\end{definition}
+%This displays the short time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%As with \hyperref[sec:localedates]{dates}, the results are
+%determined by the locale provider used by \app{texosquery}.
+%For example, the Java 8 variant (\app{texosquery-jre8}) with
+%\texttt{java.locale.providers} set to \texttt{CLDR,JRE} may produce
+%a different result to a variant of \app{texosquery} that only uses
+%the JRE provider.
+%
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%
+%\input locale
+%
+%Full: \LocaleLongTime{british}.
+%Long: \LocaleLongTime{british}.
+%Medium: \LocaleMediumTime{british}.
+%Short: \LocaleShortTime{british}.
+%
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%Full: 13:43:53 BST. Long: 13:43:53 BST. Medium: 13:43:53. Short:
+%13:43.
+%\end{quote}
+%In this particular case there's no difference between using the CLDR
+%and the JRE locale providers, but note that there's no difference in
+%the full and long forms.
+%
+%There are also commands for the combined date and time:
+%\begin{definition}[\DescribeMacro\LocaleFullDateTime]
+%\cs{LocaleFullDateTime}\marg{dialect}
+%\end{definition}
+%This displays the full date and time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleLongDateTime]
+%\cs{LocaleLongDateTime}\marg{dialect}
+%\end{definition}
+%This displays the long date and time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleMediumDateTime]
+%\cs{LocaleMediumDateTime}\marg{dialect}
+%\end{definition}
+%This displays the medium date and time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%\begin{definition}[\DescribeMacro\LocaleShortDateTime]
+%\cs{LocaleShortDateTime}\marg{dialect}
+%\end{definition}
+%This displays the short date and time for the locale identified by \meta{dialect}
+%as provided by \app{texosquery}.
+%
+%
+%\section{Numbers}
+%\label{sec:numbers}
+%
+%Different locales use different symbols to denote the decimal mark
+%or the number group separator when displaying numbers. There are
+%other numeric-related symbols that may also vary according to
+%region, such as the currency symbol, exponent, percent or per mill
+%signs. Since most of these are outside of the Basic Latin set, the
+%examples here use \XeTeX\ with a font that supports those symbols.
+%If you don't have that font installed, you will need to adapt the
+%examples accordingly.
+%
+%As with date and times, the commands describe here need the
+%\sty{tracklang} dialect label that identifies the required locale.
+%See \sectionref{sec:currentlocale} for shortcut commands that
+%automatically select the current locale's dialect label.
+%
+%In general, most of these commands won't need to be used explicitly
+%as it's easier to use a numeric pattern instead (see
+%\sectionref{sec:numpatterns}).
+%
+%\subsection{Numeric Symbols}
+%\label{sec:numsyms}
+%
+%The number group separator for a particular locale can be obtained
+%using:
+%\begin{definition}[\DescribeMacro\LocaleNumericGroupSep]
+%\cs{LocaleNumericGroupSep}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the \sty{tracklang} dialect label
+%representing the locale.
+%
+%You can determine whether or not the locale uses a number group
+%separator using:
+%\begin{definition}[\DescribeMacro\LocaleIfNumericUsesGroup]
+%\cs{LocaleIfNumericUsesGroup}\marg{dialect}\marg{true
+%code}\marg{false code}
+%\end{definition}
+%This does \meta{true code} if the locale identified by \meta{dialect}
+%uses a number group separator otherwise it does \meta{false code}.
+%
+%The decimal mark is obtained using:
+%\begin{definition}[\DescribeMacro\LocaleNumericDecimalSep]
+%\cs{LocaleNumericDecimalSep}\marg{dialect}
+%\end{definition}
+%
+%The monetary separator is often the same as the decimal separator,
+%but isn't always, so there's a separate command for it:
+%\begin{definition}[\DescribeMacro\LocaleNumericMonetarySep]
+%\cs{LocaleNumericMonetarySep}\marg{dialect}
+%\end{definition}
+%
+%The exponent symbol is obtained using:
+%\begin{definition}[\DescribeMacro\LocaleNumericExponent]
+%\cs{LocaleNumericExponent}\marg{dialect}
+%\end{definition}
+%
+%The percent symbol is obtained using:
+%\begin{definition}[\DescribeMacro\LocaleNumericPercent]
+%\cs{LocaleNumericPercent}\marg{dialect}
+%\end{definition}
+%This will typically use \verb|\%| (the percent symbol \%).
+%
+%The per mill symbol is obtained using:
+%\begin{definition}[\DescribeMacro\LocaleNumericPermill]
+%\cs{LocaleNumericPermill}\marg{dialect}
+%\end{definition}
+%This will typically be a character outside the Basic Latin set, so
+%the document will need to support this symbol if required.
+%
+%\subsection{Currencies}
+%\label{sec:currencies}
+%
+%The official currency code (such as \texttt{GBP} or \texttt{USD}) is
+%obtained using:
+%\begin{definition}[\DescribeMacro\LocaleCurrencyLabel]
+%\cs{LocaleCurrencyLabel}\marg{dialect}
+%\end{definition}
+%This first checks if the \dattr{currency} attribute for the given
+%dialect is \texttt{XXX} (which denotes an unknown currency,
+%typically because there's no region associated with \meta{dialect}).
+%If the currency for \meta{dialect} is known (that is, the attribute
+%value isn't \texttt{XXX}), then that currency's official code is
+%produced. If the currency is unknown, then it will try to fallback
+%on the main dialect's currency code if the main dialect has an
+%associated region, otherwise it will fallback on the OS currency
+%code.
+%
+%Remember that with the language tag, you're not restricted to using
+%official languages for a given region. For example, if you're
+%writing in English in Belgium, it's valid to use \texttt{en-BE} as a
+%locale. For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-BE,pt-BR}
+%
+%\input locale
+%
+%en-GB: \LocaleCurrencyLabel{british}.
+%en-BE: \LocaleCurrencyLabel{enBE}.
+%pt-BR: \LocaleCurrencyLabel{brazilian}.
+%
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: GBP. en-BE: EUR. pt-BR: BRL.
+%\end{quote}
+%
+%There are a few currencies that have an unofficial currency code.
+%These are typically currencies pegged to another currency with a
+%fixed exchange rate of 1.0. The
+%official ISO currency code for one
+%region may be the code for the other currency. For example, the Isle
+%of Man currency is the Manx pound, which is kept in parity with
+%pound sterling. The currency code for \texttt{en-IM} is returned as
+%\texttt{GBP} by Java (since IMP has no official recognition in
+%ISO~4217), but \app{texosquery} recognises that this
+%region has an unofficial currency code \texttt{IMP}. This can be
+%obtained using
+%\begin{definition}[\DescribeMacro\LocaleCurrencyRegionalLabel]
+%\cs{LocaleCurrencyRegionalLabel}\marg{dialect}
+%\end{definition}
+%This command is much the same as the previous command in that it
+%will fallback on the main or OS currency code if not known.
+%The dialect attribute \dattr{regionalcurrency} is queried for the
+%required information.
+%For most regions, this command will return the same as
+%\cs{LocaleCurrencyLabel}.
+%
+%For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM,pt-BR}
+%
+%\input locale
+%
+%en-GB: \LocaleCurrencyRegionalLabel{british}.
+%en-IM: \LocaleCurrencyRegionalLabel{isleofmanenglish}.
+%pt-BR: \LocaleCurrencyRegionalLabel{brazilian}.
+%
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: GBP. en-IM: IMP. pt-BR: BRL.
+%\end{quote}
+%If I had used \cs{LocaleCurrencyLabel} instead, the \texttt{en-IM}
+%currency label would've been displayed as GBP.
+%
+%The currency symbol (for example, \$ or \pounds) is obtained using
+%\begin{definition}[\DescribeMacro\LocaleCurrencySymbol]
+%\cs{LocaleCurrencySymbol}\marg{dialect}
+%\end{definition}
+%Except in the case of \$ this will include symbols outside the Basic
+%Latin set. This means that if you use this command in your document,
+%you need to ensure that the document encoding has been set up before
+%\file{tex-locale.tex} is loaded. (The \LaTeX\ \file{tex-locale.sty} package
+%can automatically load \sty{fontspec} or
+%\sty{inputenc} \& \sty{fontenc}, if required.) As with the previous
+%commands, if the currency is unknown it will try to fallback on the
+%main or OS currency. If the \dattr{currencysym} dialect attribute
+%is the same as the currency code, then the \cattr{sym} currency
+%attribute will be used instead.
+%
+%Modifying the above example:
+%\begin{verbatim}
+%\font\nimbus="NimbusRoman-Regular" at 10pt
+%\nimbus
+%
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM,pt-BR}
+%
+%\input locale
+%
+%en-GB: \LocaleCurrencySymbol{british}.
+%en-IM: \LocaleCurrencySymbol{isleofmanenglish}.
+%pt-BR: \LocaleCurrencySymbol{brazilian}.
+%
+%\bye
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%en-GB: \pounds. en-IM: M\pounds. pt-BR: R\$.
+%\end{quote}
+%The \XeLaTeX\ equivalent is:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage[main={en-GB},other={en-IM,pt-BR}]{tex-locale}
+%\setmainfont{NimbusRoman-Regular}
+%
+%\begin{document}
+%en-GB: \LocaleCurrencySymbol{british}.
+%en-IM: \LocaleCurrencySymbol{isleofmanenglish}.
+%pt-BR: \LocaleCurrencySymbol{brazilian}.
+%\end{document}
+%\end{verbatim}
+%
+%Alternatively, you can use:
+%\begin{definition}[\DescribeMacro\LocaleCurrencyTeXSymbol]
+%\cs{LocaleCurrencyTeXSymbol}\marg{dialect}
+%\end{definition}
+%This works in the same way as the previous command, except
+%that it checks the \dattr{currencytex} dialect attribute.
+%If this attribute is the same as the currency code, then
+%the \cattr{tex} currency attribute is used instead.
+%
+%This command uses control sequences instead of the actual currency
+%character. Since both \sty{texosquery} and \sty{tex-locale} are designed
+%for generic \TeX\ use, \sty{texosquery} just performs some limited
+%tests for the existence of common command names (such as \cs{pounds}
+%or \cs{euro}). If it can't find an appropriate command to use, the
+%currency commands simply expand to a textual tag.
+%
+%For example, when \file{texosquery.tex} is input, it checks for the
+%existence of \cs{faGbp} and \cs{pounds}. If one of those commands
+%exist, then \ics{texosquerycurrencypound} is defined to that
+%commands, otherwise it's defined to just \qt{pound}. For the Euro
+%symbol (\ics{texosquerycurrencyeuro}) the code checks for
+%\cs{faEuro}, \cs{texteuro} and \cs{euro}. (See the \sty{texosquery}
+%package for more information about these currency commands.)
+%
+%The \LaTeX\ \file{tex-locale.sty} package will automatically load the
+%\sty{textcomp} package by default. You can switch this to another
+%package (for example, \sty{fontawesome}) using the \pkgopt{symbols}
+%package option (for example, \pkgoptfmt{symbols=fontawesome}).
+%
+%\section{Current Locale}
+%\label{sec:currentlocale}
+%
+%The commands described above mostly require a recognised \sty{tracklang}
+%dialect label in the argument to identify the locale. These labels
+%aren't intuitively obvious. There are some predefined dialect labels
+%that try to be compatible with known \sty{babel} dialects, but
+%neither \sty{babel} nor \sty{polyglossia} provide as much detail
+%about the non-language aspects of the dialect (such as the region or
+%variant). For example, there's no \sty{babel} or \sty{polyglossia}
+%setting for English in the Isle of Man (\texttt{en-IM}). Users need
+%to select the closest matching dialect (\texttt{british} in the case
+%of \texttt{en-IM}). The \sty{tracklang} package also allows an
+%unofficial language and region combination.
+%For example, a document written in English but with the regional information,
+%such as currencies, matching those for Belgium, should be identified
+%with \texttt{en-BE}. This isn't recognised as a predefined
+%\sty{tracklang} dialect, so \sty{tracklang} creates its own dialect
+%label (\texttt{enBE} in this case) when it parses this language tag.
+%
+%This makes it a bit awkward to directly use the above commands and
+%it's most likely that the required dialect will be the currently selected
+%language setting, so \file{tex-locale.tex} provides some convenient
+%wrapper commands, listed below. These \cs{CurrentLocale\ldots} commands are redefined every
+%time the locale is changed (except for \cs{CurrentLocaleDateTime}). For a document that doesn't use
+%\sty{babel} or \sty{polyglossia}, these commands can be reset using
+%\ics{selectlocale} (described on page~\pageref{pg:selectlocale}). If \file{tex-locale.tex} detects
+%any language hooks \cs{captions}\meta{language} (such as
+%\cs{captionsenglish} or \cs{captionsbritish}) then code is added to
+%those hooks to ensure that the locale is switched when the language
+%changes.
+%
+%\TeX's \ics{show} command provides a useful way of checking the
+%current settings. For example:
+%\begin{verbatim}
+%\def\LocaleMain{en-GB}
+%\def\LocaleOther{en-IM,pt-BR}
+%
+%\input locale
+%
+%\show\CurrentLocaleMonthName
+%
+%\selectlocale{en-IM}
+%\show\CurrentLocaleMonthName
+%
+%\selectlocale{pt-BR}
+%\show\CurrentLocaleMonthName
+%
+%\bye
+%\end{verbatim}
+%These cause three interruptions to the \TeX\ build, which look like
+%errors but are the results from each \cs{show} command. In the first
+%case the transcript shows:
+%\begin{verbatim}
+%> \CurrentLocaleMonthName=macro:
+%->\LocaleMonthName {british}.
+%\end{verbatim}
+%I haven't specifically set the locale at this point. At the end of
+%the \file{tex-locale.tex} code, the main locale was automatically
+%selected. So the current locale dialect label is \texttt{british}
+%and \cs{CurrentLocaleMonthName} has been defined as
+%\begin{verbatim}
+%\LocaleMonthName{british}
+%\end{verbatim}
+%Note that there's no check for \cs{languagename} or similar command
+%here. The dialect label is hard-coded into the definition of
+%\cs{CurrentLocaleMonthName}, so it's fully-expandable (unless the
+%month name contains any awkward non-expandable characters, which can
+%occur with \sty{inputenc} and non-ASCII characters).
+%
+%The next instance of \cs{show} produces the following lines in the
+%transcript:
+%\begin{verbatim}
+%> \CurrentLocaleMonthName=macro:
+%->\LocaleMonthName {isleofmanenglish}.
+%\end{verbatim}
+%The command \cs{CurrentLocaleMonthName} was redefined when
+%\verb|\selectlocale{en-IM}| was used.
+%
+%Similarly for the final instance of \cs{show}:
+%\begin{verbatim}
+%> \CurrentLocaleMonthName=macro:
+%->\LocaleMonthName {brazilian}.
+%\end{verbatim}
+%
+%All the commands that are redefined with each instance of \cs{selectlocale}
+%are listed below. Note that \cs{selectlocale} also uses
+%\sty{tracklang}'s \cs{SetCurrentTrackedDialect}, which also defines
+%a set of commands that can be used to identify information about the
+%current dialect. (See the \sty{tracklang} documentation for further
+%details.)
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleLanguageName]
+%\cs{CurrentLocaleLanguageName}
+%\end{definition}
+%This is a shortcut for \ics{LocaleLanguageName}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleLanguageNativeName]
+%\cs{CurrentLocaleLanguageNativeName}
+%\end{definition}
+%This is a shortcut for \ics{LocaleLanguageNativeName}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleRegionName]
+%\cs{CurrentLocaleRegionName}
+%\end{definition}
+%This is a shortcut for \ics{LocaleRegionName}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleRegionNativeName]
+%\cs{CurrentLocaleRegionNativeName}
+%\end{definition}
+%This is a shortcut for \ics{LocaleRegionNativeName}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleVariantName]
+%\cs{CurrentLocaleVariantName}
+%\end{definition}
+%This is a shortcut for \ics{LocaleVariantName}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleVariantNativeName]
+%\cs{CurrentLocaleVariantNativeName}
+%\end{definition}
+%This is a shortcut for \ics{LocaleRegionNativeName}\marg{dialect}.
+%
+%\subsection{Dates and Times}
+%\label{sec:currdatetime}
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleFirstDayIndex]
+%\cs{CurrentLocaleFirstDayIndex}
+%\end{definition}
+%This is a shortcut for \ics{LocaleFirstDayIndex}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleDayIndexFromRegion]
+%\cs{CurrentLocaleDayIndexFromRegion}\marg{index}
+%\end{definition}
+%This is a shortcut for
+%\ics{LocaleDayIndexFromRegion}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleDayName]
+%\cs{CurrentLocaleDayName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleDayName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleShortDayName]
+%\cs{CurrentLocaleShortDayName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleShortDayName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleStandaloneDayName]
+%\cs{CurrentLocaleStandaloneDayName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleStandaloneDayName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleStandaloneShortDayName]
+%\cs{CurrentLocaleStandaloneShortDayName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleStandaloneShortDayName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleMonthName]
+%\cs{CurrentLocaleMonthName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleMonthName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleShortMonthName]
+%\cs{CurrentLocaleShortMonthName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleShortMonthName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleStandaloneMonthName]
+%\cs{CurrentLocaleStandaloneMonthName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleStandaloneMonthName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleStandaloneShortMonthName]
+%\cs{CurrentLocaleStandaloneShortMonthName}\marg{index}
+%\end{definition}
+%This is a shortcut for \ics{LocaleStandaloneShortMonthName}\marg{dialect}\marg{index}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleDate]
+%\cs{CurrentLocaleDate}
+%\end{definition}
+%This is slightly more complicated that the above. It uses
+%\begin{definition}[\DescribeMacro\localedatechoice]
+%\cs{localedatechoice}\marg{full}\marg{long}\marg{medium}\marg{short}
+%\end{definition}
+%to determine whether to use the full date \ics{LocaleFullDate}\marg{dialect},
+%the long date \ics{LocaleLongDate}\marg{dialect},
+%the medium date \ics{LocaleMediumDate}\marg{dialect} or
+%the short date \ics{LocaleShortDate}\marg{dialect}.
+%
+%This command may be defined before \file{tex-locale.tex} is loaded or
+%redefined afterwards. For example, to ensure that
+%\cs{CurrentLocaleDate} uses the medium form:
+%\begin{verbatim}
+%\def\localedatechoice#1#2#3#4{#3}
+%\input locale
+%\end{verbatim}
+%\LaTeX\ users should instead use the \pkgopt{date} package option in
+%the \file{tex-locale.sty} package interface:
+%\begin{verbatim}
+%\usepackage[date=medium]{tex-locale}
+%\end{verbatim}
+%\LaTeX\ users can also redefine the command afterwards. For example:
+%\begin{verbatim}
+%\renewcommand*{\localedatechoice}[4]{#3}
+%\end{verbatim}
+%
+%There is a similar command for the time:
+%\begin{definition}[\DescribeMacro\CurrentLocaleTime]
+%\cs{CurrentLocaleTime}
+%\end{definition}
+%This uses
+%\begin{definition}[\DescribeMacro\localetimechoice]
+%\cs{localetimechoice}\marg{full}\marg{long}\marg{medium}\marg{short}
+%\end{definition}
+%to determine whether to use the full time \ics{LocaleFullTime}\marg{dialect},
+%the long time \ics{LocaleLongTime}\marg{dialect},
+%the medium time \ics{LocaleMediumTime}\marg{dialect} or
+%the short time \ics{LocaleShortTime}\marg{dialect}. As with the date choice, this command
+%may be defined by plain \TeX\ users before \file{tex-locale.tex} is
+%input. \LaTeX\ users should use the \pkgopt{time} package option
+%instead. In both formats, the command may be redefined after
+%\sty{tex-locale} has been loaded.
+%
+%There is also a command for the combined date and time:
+%\begin{definition}[\DescribeMacro\CurrentLocaleDateTime]
+%\cs{CurrentLocaleDateTime}
+%\end{definition}
+%This doesn't use the analogous \cs{LocaleFullDateTime} etc
+%commands, but instead is simply defined as:
+%\begin{code}
+%\cs{CurrentLocaleDate}\cs{space}\cs{CurrentLocaleTime}
+%\end{code}
+%This allows for a mix of date and time styles, reflecting
+%the definitions of \cs{localedatechoice} and \cs{localetimechoice}.
+%
+%If you want a specific style (ignoring \cs{localedatechoice}
+%and \cs{localetimechoice}), you can use the following commands:
+%\begin{definition}[\DescribeMacro\CurrentLocaleFullDate]
+%\cs{CurrentLocaleFullDate}
+%\end{definition}
+%This just uses \cs{LocaleFullDate}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleLongDate]
+%\cs{CurrentLocaleLongDate}
+%\end{definition}
+%This just uses \cs{LocaleLongDate}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleMediumDate]
+%\cs{CurrentLocaleMediumDate}
+%\end{definition}
+%This just uses \cs{LocaleMediumDate}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleShortDate]
+%\cs{CurrentLocaleShortDate}
+%\end{definition}
+%This just uses \cs{LocaleShortDate}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleFullTime]
+%\cs{CurrentLocaleFullTime}
+%\end{definition}
+%This just uses \cs{LocaleFullTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleLongTime]
+%\cs{CurrentLocaleLongTime}
+%\end{definition}
+%This just uses \cs{LocaleLongTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleMediumTime]
+%\cs{CurrentLocaleMediumTime}
+%\end{definition}
+%This just uses \cs{LocaleMediumTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleShortTime]
+%\cs{CurrentLocaleShortTime}
+%\end{definition}
+%This just uses \cs{LocaleShortTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleFullDateTime]
+%\cs{CurrentLocaleFullDateTime}
+%\end{definition}
+%This just uses \cs{LocaleFullDateTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleLongDateTime]
+%\cs{CurrentLocaleLongDateTime}
+%\end{definition}
+%This just uses \cs{LocaleLongDateTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleMediumDateTime]
+%\cs{CurrentLocaleMediumDateTime}
+%\end{definition}
+%This just uses \cs{LocaleMediumDateTime}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleShortDateTime]
+%\cs{CurrentLocaleShortDateTime}
+%\end{definition}
+%This just uses \cs{LocaleShortDateTime}\marg{dialect}.
+%
+%
+%\subsection{Numeric Symbols}
+%\label{sec:currnumsym}
+%
+%The currency for the current locale is similar in construct to the
+%current locale's date and time commands listed above.
+%\begin{definition}[\DescribeMacro\CurrentLocaleCurrency]
+%\cs{CurrentLocaleCurrency}
+%\end{definition}
+%This uses
+%\begin{definition}[\DescribeMacro\localecurrchoice]
+%\cs{localecurrchoice}\marg{label}\marg{regional}\marg{symbol}\marg{\TeX}
+%\end{definition}
+%to determine whether to use \ics{LocaleCurrencyLabel}\marg{dialect},
+%\ics{LocaleCurrencyRegionalLabel}\marg{dialect},
+%\ics{LocaleCurrencySymbol}\marg{dialect} or
+%\ics{LocaleCurrencyTeXSymbol}\marg{dialect}.
+%This can similarly be defined before \file{tex-locale.tex} is input or
+%redefined afterwards. \LaTeX\ users can use the \pkgopt{currency}
+%package option.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleNumericGroupSep]
+%\cs{CurrentLocaleNumericGroupSep}
+%\end{definition}
+%This is a shortcut for \ics{LocaleNumericGroupSep}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleIfNumericUsesGroup]
+%\cs{CurrentLocaleIfNumericUsesGroup}\marg{true code}\marg{false code}
+%\end{definition}
+%This is a shortcut for
+%\ics{LocaleIfNumericUsesGroup}\marg{dialect}\marg{true
+%code}\marg{false code}.
+%
+%The next few commands have a slightly different pattern to the
+%shortcut control sequence name. For brevity, the shortcut command
+%omits the \qt{Numeric} part of the corresponding name.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleDecimalSep]
+%\cs{CurrentLocaleDecimalSep}
+%\end{definition}
+%This is a shortcut for \ics{LocaleNumericDecimalSep}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleMonetarySep]
+%\cs{CurrentLocaleMonetarySep}
+%\end{definition}
+%This is a shortcut for \ics{LocaleNumericMonetarySep}\marg{dialect}.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleExponent]
+%\cs{CurrentLocaleExponent}
+%\end{definition}
+%This is a shortcut for \ics{LocaleNumericExponent}\marg{dialect}.
+%
+%\subsection{Current Locale Patterns}
+%\label{sec:currpat}
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleIntegerPattern]
+%\cs{CurrentLocaleIntegerPattern}
+%\end{definition}
+%This is a convenient shortcut to access the integer pattern for the
+%current dialect.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleDecimalPattern]
+%\cs{CurrentLocaleDecimalPattern}
+%\end{definition}
+%This is a convenient shortcut to access the decimal pattern for the
+%current dialect.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleCurrencyPattern]
+%\cs{CurrentLocaleCurrencyPattern}
+%\end{definition}
+%This is a convenient shortcut to access the currency pattern for the
+%current dialect.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocalePercentPattern]
+%\cs{CurrentLocalePercentPattern}
+%\end{definition}
+%This is a convenient shortcut to access the percent pattern for the
+%current dialect.
+%
+%\begin{definition}[\DescribeMacro\CurrentLocaleApplyDateTimePattern]
+%\cs{CurrentLocaleApplyDateTimePattern}
+%\end{definition}
+%This is a convenient shortcut for
+%\ics{LocaleApplyDateTimePattern}\marg{dialect}.
+%
+%\chapter{\texorpdfstring{\LaTeX}{LaTeX}\ Use}
+%\label{sec:latex}
+%
+%The \sty{tex-locale} package is loaded in \LaTeX\ with the usual
+%\cs{usepackage} syntax:
+%\begin{verbatim}
+%\usepackage{tex-locale}
+%\end{verbatim}
+%This does more than simply input \file{tex-locale.tex}. The options
+%are listed below.
+%
+%\begin{description}
+%\item[\pkgopt{main}=\marg{tag}] This option identifies the main locale for the
+%document. The value should be a valid language tag. If this option
+%is omitted, the main language will be obtained from the Java Runtime
+%Environment, which should match your operating system's default
+%locale. If any languages have already been tracked in your document with
+%\sty{tracklang} prior to loading \sty{tex-locale}, the main
+%language is set to the first tracked dialect. Normally you don't
+%need to explicitly load \sty{tracklang}.
+%
+%\item[\pkgopt{other}=\marg{list}] This option identifies other
+%locales required by the document. The value should be a
+%comma-separated list of language tags or the keyword \pkgoptfmt{locale}
+%to indicate the system's default locale. The value must be grouped
+%to protect any commas from the key=value parser.
+%\begin{important}
+%This option has a cumulative effect.
+%\end{important}
+%
+%\item[\pkgopt{symbols}=\marg{name}] This option identifies the
+%symbol package to automatically load. For example,
+%\pkgoptfmt{symbols=textcomp} or \pkgoptfmt{symbols=fontawesome}. If
+%another package is required, \sty{texosquery}'s currency symbol commands
+%will need to be redefined as appropriate.
+%
+%The keyword \pkgoptfmt{none} indicates that no package is required. The
+%default is \pkgoptfmt{symbols=none} for \XeLaTeX\ or \LuaLaTeX,
+%otherwise it's \pkgoptfmt{symbols=textcomp}.
+%
+%\item[\pkgopt{support}=\marg{value}] This option identifies the
+%language support value. Available values are:
+%\begin{itemize}
+%\item \pkgoptfmt{none}: don't load any language support package;
+%\item \pkgoptfmt{auto}: load \sty{polyglossia} for \XeLaTeX\ or
+%\LuaLaTeX, otherwise load \sty{babel};
+%\item \pkgoptfmt{babel}: load \sty{babel} regardless of the \LaTeX\
+%format;
+%\item \pkgoptfmt{polyglossia}: load \sty{polyglossia} without checking
+%the \LaTeX\ format (but remember that \sty{polyglossia} doesn't work
+%with \PDFLaTeX);
+%\item \pkgoptfmt{cjk}: load CJK support with either \sty{xeCJK}
+%(\XeLaTeX/\LuaLaTeX) or \sty{CJKutf8}. This isn't fully tested, and
+%there's no support for non-UTF encoding.
+%\end{itemize}
+%
+%\item[\pkgopt{fontenc}=\marg{value}] This option indicates whether
+%or not to load the \sty{fontenc} package. The value should be one
+%of: \pkgoptfmt{none} (don't load), \pkgoptfmt{auto} (automatically load
+%with the encoding determined from the language settings), or
+%\meta{option} (indicating the package option to pass to
+%\sty{fontenc}). The default is \pkgoptfmt{fontenc=auto} unless
+%\sty{fontenc} has already been loaded.
+%
+%This option is ignored with \XeLaTeX\ or \LuaLaTeX.
+%
+%\item[\pkgopt{inputenc}=\marg{value}] This option indicates whether
+%or not to load the \sty{inputenc} package. The value should be one
+%of: \pkgoptfmt{none} (don't load), \pkgoptfmt{auto} (automatically load
+%with the encoding determined from the default obtained from
+%\sty{texosquery}), or \meta{option} (indicating the package option
+%to pass to \sty{inputenc}). The default is \pkgoptfmt{inputenc=auto}
+%but \sty{inputenc} won't be loaded if the appropriate encoding can't
+%be determined. Note that loading \sty{inputenc} before the
+%\sty{texosquery} lookup is performed will cause a problem with
+%non-ASCII characters appearing in the result.
+%
+%This option is ignored with \XeLaTeX\ or \LuaLaTeX.
+%
+%\item[\pkgopt{datetime}=\meta{value}] This option indicates whether
+%or not to load the \sty{datetime2} package. The value may be one of:
+%\begin{itemize}
+%\item \pkgoptfmt{false}: don't load \sty{datetime2};
+%\item \pkgoptfmt{iso}: load \sty{datetime2} with the package option
+%\pkgoptfmt{useregional=false} and sets the date-time style to \pkgoptfmt{iso};
+%\item \pkgoptfmt{text}: load \sty{datetime2} with the package option
+%\pkgoptfmt{useregional=text};
+%\item \pkgoptfmt{num} or \pkgoptfmt{numeric}: load \sty{datetime2} with the
+%package option \pkgoptfmt{useregional=numeric};
+%\item \pkgoptfmt{locale}: don't load \sty{datetime2} and set \ics{today}
+%to \ics{CurrentLocaleDate}, if available.
+%\end{itemize}
+%
+%\item[\pkgopt{date}=\meta{value}] This option indicates the
+%preferred date style for \ics{CurrentLocaleDate}. The value may be
+%one of: \pkgoptfmt{full}, \pkgoptfmt{long}, \pkgoptfmt{medium}
+%\pkgoptfmt{short}. This option doesn't affect \ics{today} unless you
+%have used \pkgoptfmt{datetime=locale}.
+%
+%\item[\pkgopt{time}=\meta{value}] This option indicates the
+%preferred time style for \ics{CurrentLocaleTime}. The value may be
+%one of: \pkgoptfmt{full}, \pkgoptfmt{long}, \pkgoptfmt{medium}
+%\pkgoptfmt{short}.
+%
+%\item[\pkgopt{timedate}=\meta{boolean}] This option indicates
+%whether or not to support date and time patterns. (See
+%\sectionref{sec:datetimepat}.)
+%
+%\item[\pkgopt{currency}=\meta{value}] This option indicates the
+%preferred currency style for \ics{CurrentLocaleCurrency}. Available
+%values: \pkgoptfmt{official} (official identifier), \pkgoptfmt{unofficial}
+%unofficial identified, \pkgoptfmt{sym} (the symbol, which may include
+%non-ASCII characters) or \pkgoptfmt{tex} (use the commands provided by
+%\sty{texosquery}). The default is \pkgoptfmt{currency=sym} for
+%\XeLaTeX/\LuaLaTeX\ or \pkgoptfmt{currency=tex} otherwise.
+%
+%\end{description}
+%
+%The \sty{tex-locale} package will use \sty{texosquery} to lookup the
+%default language tag and encoding, and then attempt to load the
+%appropriate encoding and language support packages.
+%
+%For example, consider the following document:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage{tex-locale}
+%\begin{document}
+%Currency: \CurrentLocaleCurrency.
+%\end{document}
+%\end{verbatim}
+%My default locale is \texttt{en-GB} with UTF-8 as the default file
+%encoding, so if I compile this document with \PDFLaTeX, then this is
+%essentially equivalent to:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage[en-GB]{tracklang}
+%\usepackage[T1]{fontenc}
+%\usepackage[utf8]{inputenc}
+%\usepackage[british]{babel}
+%\usepackage[useregional]{datetime2}
+%\begin{document}
+%Currency: \pounds.
+%\end{document}
+%\end{verbatim}
+%(Other dependent packages omitted for clarity.) Whereas if I compile
+%the document with \XeLaTeX, then this is essentially equivalent to:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage[en-GB]{tracklang}
+%\usepackage{fontspec}
+%\usepackage{polyglossia}
+%\setmainlanguage[variant=uk]{english}
+%\usepackage[useregional]{datetime2}
+%\begin{document}
+%Currency: £.
+%\end{document}
+%\end{verbatim}
+%If I still want to use \sty{babel}, then I can enforce this with:
+%\begin{verbatim}
+%\usepackage[support=babel]{tex-locale}
+%\end{verbatim}
+%Or if I don't want \sty{babel} or \sty{polyglossia}:
+%\begin{verbatim}
+%\usepackage[support=none]{tex-locale}
+%\end{verbatim}
+%
+%You can determine which language package was used with:
+%\begin{definition}[\DescribeMacro\LocaleSupportPackageCase]
+%\cs{LocaleSupportPackageCase}\marg{babel}\marg{polyglossia}\marg{neither}
+%\end{definition}
+%If either package has been loaded \ics{selectlocale}\marg{locale}
+%should automatically be implemented when the document language
+%changes, so you can the use the current locale commands described in
+%\sectionref{sec:currentlocale}.
+%
+%Example:
+%\begin{verbatim}
+%\usepackage[main={sr-Cyrl-RS},other={en-GB}]{tex-locale}
+%
+%\LocaleSupportPackageCase
+%{\newcommand{\textenglish}[1]{\foreignlanguage{british}{#1}}}% babel
+%{% polyglossia
+% \setmainfont{Liberation Serif}
+% \newfontfamily\cyrillicfont{Liberation Serif}
+%}
+%{\newcommand{\textenglish}[1]{#1}}% none
+%\end{verbatim}
+%
+%\StopEventually{%
+% \printindex[user]
+% \PrintCodeIndex
+% \PrintChanges
+%}
+%
+%
+%\chapter{The Code}
+%\iffalse
+% \begin{macrocode}
+%<*tex-locale.sty>
+% \end{macrocode}
+%\fi
+%\changes{1.0}{2018-08-26}{Initial release}
+%\section{\LaTeX\ Code (\texttt{tex-locale.sty})}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tex-locale}[2018/08/26 v1.0 (NLCT) localisation support]
+% \end{macrocode}
+%Make life easier by using \sty{etoolbox}:
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+% Also need \sty{xfor} to break out of \cs{@for} loop.
+% \begin{macrocode}
+\RequirePackage{xfor}
+% \end{macrocode}
+%Load \sty{tracklang} using package interface just in case any
+%languages have been passed through the document class options.
+%Require at least v1.3.3 since the dialect label mappings are needed
+%in this file.
+% \begin{macrocode}
+\RequirePackage{tracklang}[2016/11/03]
+% \end{macrocode}
+%If any languages have been tracked, set the main language to the
+%first tracked dialect.
+% \begin{macrocode}
+\AnyTrackedLanguages
+{%
+ \ForEachTrackedDialect{\locale@this@dialect}
+ {
+ \ifx\LocaleMain\undefined
+ \edef\LocaleMain{\GetTrackedLanguageTag{\locale@this@dialect}}
+ \let\@locale@trackedmain\LocaleMain
+ \else
+ \ifx\LocaleOther\undefined
+ \edef\LocaleOther{\GetTrackedLanguageTag{\locale@this@dialect}}
+ \else
+ \edef\LocaleOther{\LocaleOther,\GetTrackedLanguageTag{\locale@this@dialect}}
+ \fi
+ \fi
+ }
+}
+{}
+% \end{macrocode}
+%Need to determine if we're using \XeLaTeX\ or \LuaLaTeX.
+% \begin{macrocode}
+\RequirePackage{ifxetex}
+\RequirePackage{ifluatex}
+% \end{macrocode}
+%\begin{macro}{\@locale@ifxeorlua}
+%Short cut to check if we're using either:
+% \begin{macrocode}
+\ifxetex
+ \newcommand*{\@locale@ifxeorlua}[2]{#1}
+\else
+ \ifluatex
+ \newcommand*{\@locale@ifxeorlua}[2]{#1}
+ \else
+ \newcommand*{\@locale@ifxeorlua}[2]{#2}
+ \fi
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%Need \sty{xkeyval} for key-value interface:
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%
+%Define package options.
+%
+% Each \cs{DeclareOptionX} needs a corresponding \cs{DeclareOption}
+% so that it can be passed as a document class option, so define a
+% command that will implement both.
+%\begin{macro}{\@locale@declareoption}
+% \begin{macrocode}
+\newcommand*{\@locale@declareoption}[2]{%
+ \DeclareOptionX{#1}{#2}%
+ \DeclareOption{#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{main}
+%This option identifies the main locale. This will
+%default to the operating system's locale if not set. The value
+%should be the language tag or the keyword \texttt{locale}.
+% \begin{macrocode}
+\define@key{tex-locale.sty}{main}{%
+% \end{macrocode}
+%If this has already been set in the earlier tracked dialect check,
+%move the original main to the other list.
+% \begin{macrocode}
+ \ifx\@locale@trackedmain\undefined
+ \else
+ \ifx\LocaleOther\undefined
+ \let\LocaleOther\@locale@trackedmain
+ \else
+ \edef\LocaleOther{\@locale@trackedmain,\LocaleOther}%
+ \fi
+ \let\@locale@trackedmain\undefined
+ \fi
+ \def\LocaleMain{#1}%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{other}
+%This option identifies the other locales. The value
+%should be a comma-separated list of language tags or the keyword
+%\texttt{locale}. The value must be grouped to protect any commas
+%from the key-value parser. Note this option has a cumulative
+%effect.
+% \begin{macrocode}
+\define@key{tex-locale.sty}{other}{%
+ \ifx\LocaleOther\undefined
+ \def\LocaleOther{#1}%
+ \else
+ \edef\LocaleOther{\LocaleOther,#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{symbols}
+%This option identifies the symbol package to automatically load.
+%For example, \sty{textcomp} or \texttt{fontawesome}. If another
+%package is required, \sty{texosquery}'s currency symbol commands
+%will need to be redefined as appropriate. The key word \texttt{none}
+%indicates that no package is required. The default is \texttt{none}
+%for \XeLaTeX\ or \LuaLaTeX\ and \sty{textcomp} otherwise.
+%\texttt{textcomp}
+% \begin{macrocode}
+\@locale@ifxeorlua{\def\@locale@symbols{none}}{\def\@locale@symbols{textcomp}}
+\define@key{tex-locale.sty}{symbols}{\def\@locale@symbols{#1}}
+% \end{macrocode}
+%\end{option}
+%
+%To make it easier to add extra support options, assign a numeric
+%value to each option so that \cs{ifcase} can be used. Recognised
+%values: 0 (none), 1 (auto), 2 (babel), 3 (polyglossia), 4 (cjk).
+%\begin{macro}{\@locale@supportopt}
+% \begin{macrocode}
+\newcount\@locale@supportopt
+% \end{macrocode}
+% The default value is auto unless a known language package has
+% already been loaded.
+% \begin{macrocode}
+\@ifpackageloaded{polyglossia}
+{\@locale@supportopt=0\relax}
+{
+ \@ifpackageloaded{babel}
+ {\@locale@supportopt=0\relax}
+ {
+ \@ifpackageloaded{CJK}
+ {\@locale@supportopt=0\relax}
+ {\@locale@supportopt=1\relax}
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{support}
+%This option identifies the language support package.
+% \begin{macrocode}
+\define@choicekey{tex-locale.sty}{support}%
+ [\@locale@support@val\@locale@support@nr]%
+ {none,auto,babel,polyglossia,cjk}
+{\@locale@supportopt=\@locale@support@nr\relax}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{fontspec}
+%This option identifies whether or not to load \sty{fontspec} if
+%\XeLaTeX\ or \LuaLaTeX\ is in use. Defaults to true and is ignored
+%if neither \XeLaTeX\ nor \LuaLaTeX\ are in use.
+% \begin{macrocode}
+\define@boolkey{tex-locale.sty}[@locale@]{fontspec}[true]{}
+\@locale@ifxeorlua{\@locale@fontspectrue}{\@locale@fontspecfalse}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{fontenc}
+%This option identifies whether or not to load \sty{fontenc} if
+%neither \XeLaTeX\ nor \LuaLaTeX\ is in use. The value should be
+%either \pkgoptfmt{none} (don't load) or \pkgoptfmt{auto}
+%(determined from the main language or script) or the option to pass to
+%\sty{fontenc}. If the \pkgoptfmt{auto} option is used but the
+%appropriate encoding can't be determined, \sty{fontenc} won't be
+%loaded. The default value is \pkgoptfmt{auto} unless \sty{fontenc}
+%has already been loaded. This option is ignored if
+% either \XeLaTeX\ or \LuaLaTeX\ are in use.
+% \begin{macrocode}
+\define@key{tex-locale.sty}{fontenc}{%
+ \edef\@locale@fontenc{#1}%
+ \ifdefstring{\@locale@fontenc}{false}{\def\@locale@fontenc{none}}{}%
+}
+\@ifpackageloaded{fontenc}
+{\def\@locale@fontenc{none}}
+{\def\@locale@fontenc{auto}}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{inputenc}
+%This option identifies whether or not to load \sty{inputenc} if
+%neither \XeLaTeX\ nor \LuaLaTeX\ is in use. The value should be
+%either \pkgoptfmt{none} (don't load) or \pkgoptfmt{auto}
+%(determined from the locale's default encoding) or the option to pass to
+%\sty{inputenc}. If the \pkgoptfmt{auto} option is used but the
+%appropriate encoding can't be determined, \sty{inputenc} won't be
+%loaded. The default value is \pkgoptfmt{auto}. This option is ignored if
+% either \XeLaTeX\ or \LuaLaTeX\ are in use. Note that loading
+% \sty{inputenc} before the query is performed will cause a problem
+% with non-ASCII characters appearing in the result.
+% \begin{macrocode}
+\define@key{tex-locale.sty}{inputenc}{%
+ \edef\@locale@inputenc{#1}%
+ \ifdefstring{\@locale@inputenc}{false}{\def\@locale@inputenc{none}}{}%
+}
+\@ifpackageloaded{inputenc}
+{\def\@locale@inputenc{none}}
+{\def\@locale@inputenc{auto}}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@locale@load@dtm}
+%This command is used to load \sty{datetime2}, if required, and setup the style.
+% \begin{macrocode}
+\@ifpackageloaded{datetime2}
+{
+% \end{macrocode}
+% User has already loaded \sty{datetime2}. Assume they have already
+% set their preferred style. (They would also need to have loaded
+% \sty{babel}\slash\sty{polyglossia} before \sty{datetime2}, which
+% rather reduces the point of the \sty{tex-locale} package.)
+% \begin{macrocode}
+ \newcommand\@locale@load@dtm{}
+}
+{
+ \newcommand\@locale@load@dtm{%
+% \end{macrocode}
+% First check if \sty{datetime2} is installed. If it isn't, then
+% default to \pkgopt[locale]{datetime2}.
+% \begin{macrocode}
+ \IfFileExists{datetime2.sty}%
+ {\@locale@load@regional@dtm}%
+ {\@locale@set@today}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@load@regional@dtm}
+%Load \sty{datetime2} with regional settings.
+% \begin{macrocode}
+\newcommand\@locale@load@regional@dtm{%
+ \localedatechoice
+ {%full
+ \PassOptionsToPackage{showdow}{datetime2}%
+ \PassOptionsToPackage{useregional=text}{datetime2}%
+ }%
+ {%long
+ \PassOptionsToPackage{useregional=text}{datetime2}%
+ }%
+ {%medium
+ \PassOptionsToPackage{useregional=text}{datetime2}%
+ }%
+ {%short
+ \PassOptionsToPackage{useregional=numeric}{datetime2}%
+ }%
+ \RequirePackage{datetime2}%
+ \localedatechoice{}{}{\DTMlangsetup*{abbr}}{}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@set@today}
+%Redefine \cs{today}.
+% \begin{macrocode}
+\newcommand*{\@locale@set@today}{%
+% \end{macrocode}
+% If \cs{CurrentLocaleDate} is empty then the query failed, in which
+% case don't change \cs{today}.
+% \begin{macrocode}
+ \ifdefempty\CurrentLocaleDate
+ {}%
+ {%
+ \renewcommand{\today}{\CurrentLocaleDate}%
+ \ForEachTrackedDialect{\locale@this@dialect}
+ {%
+% \end{macrocode}
+%Add to \cs{date}\meta{lang} hook.
+% \begin{macrocode}
+ \SetCurrentTrackedDialect{\locale@this@dialect}%
+ \@TrackLangAddToHook
+ {\renewcommand{\today}{\CurrentLocaleDate}}
+ {date}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{option}{datetime}
+%Provide an option to adjust the date and time settings.
+% \begin{macrocode}
+\define@choicekey{tex-locale.sty}{datetime}%
+ [\@locale@datetime@val\@locale@datetime@nr]%
+ {false,iso,text,num,numeric,locale}
+{%
+ \ifcase\@locale@datetime@nr
+ \def\@locale@load@dtm{}%
+ \or
+ \def\@locale@load@dtm{%
+ \PassOptionsToPackage{useregional=false}{datetime2}%
+ \RequirePackage{datetime2}%
+ \DTMsetstyle{iso}%
+ }%
+ \or
+ \def\@locale@load@dtm{%
+ \@locale@load@regional@dtm
+ }%
+ \or
+ \def\@locale@load@dtm{%
+ \PassOptionsToPackage{useregional=numeric}{datetime2}%
+ \RequirePackage{datetime2}%
+ }%
+ \or
+ \def\@locale@load@dtm{%
+ \PassOptionsToPackage{useregional=numeric}{datetime2}%
+ \RequirePackage{datetime2}%
+ }%
+ \or
+ \def\@locale@load@dtm{\@locale@set@today}%
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{iso}
+%Shortcut for \pkgopt[iso]{datetime2}.
+% \begin{macrocode}
+\@locale@declareoption{iso}{%
+ \def\@locale@load@dtm{%
+ \PassOptionsToPackage{useregional=false}{datetime2}%
+ \RequirePackage{datetime2}%
+ \DTMsetstyle{iso}%
+ }%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{date}
+%Preferred date style for \cs{CurrentLocaleDate}.
+% \begin{macrocode}
+\define@choicekey{tex-locale.sty}{date}%
+[\@locale@date@val\@locale@date@nr]{full,long,medium,short}
+{%
+ \ifcase\@locale@date@nr
+ \def\localedatechoice##1##2##3##4{##1}%
+ \or
+ \def\localedatechoice##1##2##3##4{##2}%
+ \or
+ \def\localedatechoice##1##2##3##4{##3}%
+ \or
+ \def\localedatechoice##1##2##3##4{##4}%
+ \fi
+}
+\newcommand*{\localedatechoice}[4]{#2}%
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{time}
+%Preferred date style for \cs{CurrentLocaleTime}.
+% \begin{macrocode}
+\define@choicekey{tex-locale.sty}{time}%
+[\@locale@time@val\@locale@time@nr]{full,long,medium,short}
+{%
+ \ifcase\@locale@time@nr
+ \def\localetimechoice##1##2##3##4{##1}%
+ \or
+ \def\localetimechoice##1##2##3##4{##2}%
+ \or
+ \def\localetimechoice##1##2##3##4{##3}%
+ \or
+ \def\localetimechoice##1##2##3##4{##4}%
+ \fi
+}
+\newcommand*{\localetimechoice}[4]{#3}%
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{timedata}
+%Determine whether or not to use \texttt{-M} and \texttt{-Z}.
+% \begin{macrocode}
+\define@choicekey{tex-locale.sty}{timedata}%
+[\@locale@timedata@val\@locale@timedata@nr]{true,false}[true]
+{%
+ \ifcase\@locale@timedata@nr
+ \def\LocaleIfDateTimePatternsSupported##1##2{##1}%
+ \or
+ \def\LocaleIfDateTimePatternsSupported##1##2{##2}%
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{currency}
+%Preferred currency style for \cs{CurrentLocaleCurrency}.
+% \begin{macrocode}
+\define@choicekey{tex-locale.sty}{currency}%
+[\@locale@currency@val\@locale@currency@nr]%
+{official,unofficial,sym,tex}
+{%
+ \ifcase\@locale@currency@nr
+ \def\localecurrchoice##1##2##3##4{##1}%
+ \or
+ \def\localecurrchoice##1##2##3##4{##2}%
+ \or
+ \def\localecurrchoice##1##2##3##4{##3}%
+ \or
+ \def\localecurrchoice##1##2##3##4{##4}%
+ \fi
+}
+\@locale@ifxeorlua
+ {\newcommand*{\localecurrchoice}[4]{#3}}
+ {\newcommand*{\localecurrchoice}[4]{#4}}
+% \end{macrocode}
+%\end{option}
+%
+% Process package options. First process any options that have been
+% passed via the document class.
+% \begin{macrocode}
+\@for\CurrentOption:=\@declaredoptions\do{%
+ \ifx\CurrentOption\@empty
+ \else
+ \@expandtwoargs
+ \in@{,\CurrentOption,}{,\@classoptionslist,\@curroptions,}%
+ \ifin@
+ \@use@ption
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Now process options passed to the package:
+% \begin{macrocode}
+\ProcessOptionsX
+% \end{macrocode}
+%
+% Check if \sty{babel} or \sty{polyglossia} have already been loaded
+% (user may have used \pkgopt[babel]{support} or \pkgopt[polyglossia]{support}
+% without realising it's already been loaded). Since
+% \sty{polyglossia} pretends \sty{babel} has been loaded, only
+% \sty{babel} test is required.
+% \begin{macrocode}
+\@ifpackageloaded{babel}
+{%
+ \@locale@supportopt=0\relax
+}
+{}
+% \end{macrocode}
+% If the main language hasn't been set, define it (needed before
+% the generic code is input.)
+% \begin{macrocode}
+\ifx\LocaleMain\undefined
+ \def\LocaleMain{locale}
+\fi
+\ifx\LocaleOther\undefined
+ \def\LocaleOther{}
+\fi
+% \end{macrocode}
+%
+%\begin{macro}{\@locale@postparse@hook}
+%Post-parser hook.
+% \begin{macrocode}
+\newcommand*{\@locale@postparse@hook}{%
+ \input{tex-locale-support.def}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%If symbol support is required, load the package now:
+% \begin{macrocode}
+\ifdefstring{\@locale@symbols}{none}
+{}
+{\RequirePackage{\@locale@symbols}}
+% \end{macrocode}
+%Load \sty{texosquery} using package interface (needs to be done
+%after the symbol support is loaded since \texttt{texosquery.tex}
+%detects some common symbol commands).
+% \begin{macrocode}
+\RequirePackage{texosquery}
+% \end{macrocode}
+%The encoding needs to be set up before the main query in case there
+%are any non-ASCII characters returned by the query (for example,
+%the currency symbol or in month or day names).
+%
+% May need to track all the listed dialects before
+% \texttt{tex-locale.tex} is loaded.
+%\begin{macro}{\@locale@trackall}
+% Track the main language if set.
+% \begin{macrocode}
+\newcommand\@locale@trackall{%
+ \ifdefstring\LocaleMain{locale}%
+ {%
+ \ifx\LocaleOStag\empty
+ \PackageWarning{tex-locale}{Unable to determine locale
+ (check shell escape)}%
+ \else
+ \TrackLanguageTag{\LocaleOStag}%
+ \fi
+ }%
+ {\TrackLanguageTag{\LocaleMain}}%
+% \end{macrocode}
+% Track the other languages.
+% \begin{macrocode}
+ \@for\locale@this@dialect:=\LocaleOther\do{%
+ \ifdefstring\locale@this@dialect{locale}
+ {%
+ \ifx\LocaleOStag\empty
+ \PackageWarning{tex-locale}{Unable to determine locale
+ (check shell escape)}%
+ \else
+ \TrackLanguageTag{\LocaleOStag}%
+ \fi
+ }%
+ {\TrackLanguageTag{\locale@this@dialect}}%
+ }%
+ \let\@locale@trackall\relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@loadinputenc}
+% \begin{macrocode}
+\newcommand{\@locale@loadinputenc}{}
+% \end{macrocode}
+%\end{macro}
+%
+%It may be necessary to use texosquery here to determine the
+%language tag ("-b") and\slash or the codeset ("-C"). It makes more
+%sense to minimise the number of shell escapes, so try to determine
+%what extra information we need here. The required parameters are stored in
+%\cs{@locale@pre@query@params}
+%\begin{macro}{\@locale@pre@query@params}
+% \begin{macrocode}
+\newcommand*\@locale@pre@query@params{}%
+% \end{macrocode}
+%\end{macro}
+%Now we need some commands that will parse the result, depending on
+%the parameters.
+%\begin{macro}{\@locale@pre@query@parsetag}
+%Only the language tag ("-b") is required. The shell escape will
+%only return a single result. \cs{LocaleOStag} will either be set to
+%the language tag, if successful, or will be empty, if in dry run
+%mode.
+% \begin{macrocode}
+\newcommand*\@locale@pre@query@parsetag{%
+ \ifx\LocaleStyQueryFile\undefined
+ \TeXOSQuery{\@locale@result}{\@locale@pre@query@params}%
+ \else
+ \ifx\LocaleStyQueryFile\empty
+ \TeXOSQuery{\@locale@result}{\@locale@pre@query@params}%
+ \else
+ \ifx\TeXOSQueryFromFile\undefined
+ \PackageError{locale}{texosquery too old to support
+ \string\LocaleStyQueryFile. At least v1.4 required}
+ {You need to update your version of texosquery}
+ \def\@locale@result{}%
+ \else
+ \PackageInfo{locale}{Fetching query results from `\LocaleStyQueryFile'}%
+ \TeXOSQueryFromFile{\@locale@result}{\LocaleStyQueryFile}%
+ \fi
+ \fi
+ \fi
+ \edef\LocaleOStag{\@locale@result}%
+}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@pre@query@parsecodeset}
+%Only the codeset ("-C") is required. The shell escape will
+%only return a single result. \cs{LocaleOScodeset} will either be set to
+%the codeset, if successful, or will be empty, if in dry run
+%mode.
+% \begin{macrocode}
+\newcommand*\@locale@pre@query@parsecodeset{%
+ \TeXOSQuery{\@locale@result}{\@locale@pre@query@params}%
+ \edef\LocaleOScodeset{\@locale@result}%
+}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@pre@query@parsetagcodeset}
+%Both the language tag ("-b") and the codeset ("-C") are required.
+%The shell escape will return two arguments.
+% \begin{macrocode}
+\newcommand*\@locale@pre@query@parsetagcodeset{%
+ \def\LocaleOStag{}%
+ \def\LocaleOScodeset{}%
+ \TeXOSQuery{\@locale@result}{\@locale@pre@query@params}%
+ \ifx\@locale@result\@empty
+ \else
+ \edef\LocaleOStag{\expandafter\@firstoftwo\@locale@result}%
+ \edef\LocaleOScodeset{\expandafter\@secondoftwo\@locale@result}%
+ \fi
+}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@pre@query@parse}
+%This will be set to the appropriate command after determining what
+%information is actually required.
+% \begin{macrocode}
+\let\@locale@pre@query@parse\relax
+% \end{macrocode}
+%\end{macro}
+%
+%If \XeLaTeX\ or \LuaLaTeX\ is in use and the \pkgopt{fontspec} option
+%is on, load \sty{fontspec}.
+% \begin{macrocode}
+\@locale@ifxeorlua
+{%
+ \if@locale@fontspec\RequirePackage{fontspec}\fi
+% \end{macrocode}
+%The language tag is needed if \pkgopt[auto]{support}.
+% \begin{macrocode}
+ \ifnum\@locale@supportopt=1\relax
+ \ifdefstring\LocaleMain{locale}
+ {%
+ \def\@locale@pre@query@params{\string-b }%
+ \let\@locale@pre@query@parse\@locale@pre@query@parsetag
+ }%
+ {%
+ \@for\locale@this@dialect:=\LocaleOther\do{%
+ \ifdefstring\locale@this@dialect{locale}
+ {%
+ \def\@locale@pre@query@params{\string-b }%
+ \let\@locale@pre@query@parse\@locale@pre@query@parsetag
+ \@endfortrue
+ }%
+ {}%
+ }%
+ }%
+% \end{macrocode}
+%Perform the shell escape if required.
+% \begin{macrocode}
+ \@locale@pre@query@parse
+ \fi
+}
+{%
+% \end{macrocode}
+%The language tag is needed if \pkgopt[auto]{fontenc}.
+% \begin{macrocode}
+ \ifdefstring{\@locale@fontenc}{auto}
+ {%
+ \ifdefstring\LocaleMain{locale}
+ {%
+ \def\@locale@pre@query@params{\string-b }%
+ \let\@locale@pre@query@parse\@locale@pre@query@parsetag
+ }%
+ {%
+ \@for\locale@this@dialect:=\LocaleOther\do{%
+ \ifdefstring\locale@this@dialect{locale}
+ {%
+ \def\@locale@pre@query@params{\string-b }%
+ \let\@locale@pre@query@parse\@locale@pre@query@parsetag
+ \@endfortrue
+ }%
+ {}%
+ }%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+%The codeset is needed if \pkgopt[auto]{inputenc}.
+%The "-C" (\texttt{-{}-codeset-lcs}) switch is used rather
+%than the "-cs" (\texttt{-{}-codeset}) switch to make it more
+%compatible with \sty{inputenc}.
+% \begin{macrocode}
+ \ifdefstring{\@locale@inputenc}{auto}
+ {%
+ \ifx\@locale@pre@query@params\@empty
+ \let\@locale@pre@query@parse\@locale@pre@query@parsecodeset
+ \else
+ \let\@locale@pre@query@parse\@locale@pre@query@parsetagcodeset
+ \fi
+ \edef\@locale@pre@query@params{\@locale@pre@query@params\string-C}%
+ }%
+ {}%
+% \end{macrocode}
+%Perform the shell escape if required.
+% \begin{macrocode}
+ \@locale@pre@query@parse
+% \end{macrocode}
+% Do we need to load \sty{fontenc}?
+% \begin{macrocode}
+ \ifdefstring{\@locale@fontenc}{none}
+ {}
+ {%
+ \ifdefstring{\@locale@fontenc}{auto}
+ {%
+% \end{macrocode}
+% If \pkgopt[auto]{fontenc}, set up some script to \sty{fontenc} mappings.
+% \begin{macrocode}
+ \input{tex-locale-scripts-enc.def}%
+ \@locale@trackall
+% \end{macrocode}
+% Iterate through all the dialects.
+% \begin{macrocode}
+ \ForEachTrackedDialect{\locale@this@dialect}%
+ {
+ \edef\@locale@lang{\TrackedLanguageFromDialect{\locale@this@dialect}}%
+ \@locale@if@langenc@map{\locale@this@dialect}%
+ {%
+ \edef\@locale@fontenc@opt{%
+ \@locale@get@langenc@map{\locale@this@dialect}}%
+ \expandafter\PassOptionsToPackage\expandafter
+ {\@locale@fontenc@opt}{fontenc}%
+ }%
+ {%
+ \@locale@if@langenc@map{\@locale@lang}%
+ {%
+ \edef\@locale@fontenc@opt{%
+ \@locale@get@langenc@map{\@locale@lang}}%
+ \expandafter\PassOptionsToPackage\expandafter
+ {\@locale@fontenc@opt}{fontenc}%
+ }%
+ {%
+ \edef\@locale@script{\GetTrackedDialectScript{\locale@this@dialect}}%
+ \ifx\@locale@script\empty
+ \edef\@locale@script{\TrackLangGetDefaultScript{\@locale@lang}}%
+ \fi
+ \@locale@if@scriptenc@map{\@locale@script}%
+ {%
+ \edef\@locale@fontenc@opt{%
+ \@locale@get@scriptenc@map{\@locale@script}}%
+ \expandafter\PassOptionsToPackage\expandafter
+ {\@locale@fontenc@opt}{fontenc}%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ \ifx\@locale@fontenc@opt\empty
+ \PackageWarning{tex-locale}{Option `fontenc=auto' failed.
+ Can't determine an appropriate font encoding for dialect(s).
+ (Dialect list: \@tracklang@dialects.)
+ Either set the encoding explicitly or switch to XeLaTeX%
+ }%
+ \else
+ \RequirePackage{fontenc}%
+ \fi
+ }
+ {%
+ \expandafter\PassOptionsToPackage\expandafter{\@locale@fontenc}{fontenc}%
+ \RequirePackage{fontenc}%
+ }
+ }
+% \end{macrocode}
+% Do we need to load \sty{inputenc}? This needs to be done before
+% the main \texttt{tex-locale.tex} shell escape.
+% \begin{macrocode}
+ \ifdefstring{\@locale@inputenc}{none}
+ {}
+ {%
+ \ifdefstring{\@locale@inputenc}{auto}
+ {%
+% \end{macrocode}
+%If the earlier shell escape was successful, \cs{LocaleOScodeset} will be set.
+% \begin{macrocode}
+ \ifx\LocaleOScodeset\empty
+% \end{macrocode}
+%Query failed.
+% \begin{macrocode}
+ \PackageWarning{tex-locale}{Option `inputenc=auto' failed.
+ (Check shell escape.) Default file encoding unavailable}
+ \else
+% \end{macrocode}
+%If the file \cs{LocaleOScodeset}\texttt{.def} exists, then the
+%codeset should hopefully be valid.
+% \begin{macrocode}
+ \IfFileExists{\LocaleOScodeset.def}%
+ {%
+ \renewcommand{\@locale@loadinputenc}{%
+ \RequirePackage{inputenc}%
+ \inputencoding{\LocaleOScodeset}%
+ }
+ \let\@locale@inputenc\LocaleOScodeset
+ }%
+ {%
+% \end{macrocode}
+%May have a different name. Try known encoding mappings.
+% \begin{macrocode}
+ \input{tex-locale-encodings.def}%
+ \@locale@ifhasencmap{\LocaleOScodeset}
+ {
+ \edef\@locale@inputenc{\@locale@getencmap\LocaleOScodeset}
+ \renewcommand{\@locale@loadinputenc}{%
+ \RequirePackage{inputenc}%
+ \inputencoding{\@locale@inputenc}%
+ }
+ }
+ {%
+ \PackageWarning{tex-locale}{Option `inputenc=auto' failed.
+ Don't know how to interpret codeset `\LocaleOScodeset'}%
+ }%
+ }
+ \fi
+ }
+ {%
+ \renewcommand{\@locale@loadinputenc}{%
+ \RequirePackage{inputenc}%
+ \inputencoding{\@locale@inputenc}%
+ }
+ }
+ }
+}
+% \end{macrocode}
+%
+%\begin{macro}{\@locale@loadscripts}
+%Only load \sty{tracklang-scripts} if required.
+% \begin{macrocode}
+\newcommand{\@locale@loadscripts}{%
+ \RequirePackage{tracklang-scripts}%
+ \let\@locale@loadscripts\relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%The \LaTeX\ kernel provides \cs{@thirdofthree} but not
+%\cs{@secondofthree}.
+%\begin{macro}{\@secondofthree}
+% \begin{macrocode}
+\providecommand*{\@secondofthree}[3]{#2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@ifsupportbabelorpoly}
+%\begin{definition}
+%\cs{@locale@ifsupportbabelorpoly}\marg{neither
+%case}\marg{babel case}\marg{polyglossia case}
+%\end{definition}
+%Should \sty{babel} or \sty{polyglossia} be loaded? Initialise to false.
+% \begin{macrocode}
+\newcommand*{\@locale@ifsupportbabelorpoly}[3]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@ifsupportcjk}
+%Should \sty{CJK} be loaded? Initialise to false.
+% \begin{macrocode}
+\newcommand*{\@locale@ifsupportcjk}[2]{#2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@ifsupportpinyin}
+%Should \sty{pinyin} be loaded? Initialise to false.
+% \begin{macrocode}
+\newcommand*{\@locale@ifsupportpinyin}[2]{#2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@cjklist}
+%List of languages supported by \sty{CJK}. This just makes it easier to test the
+%language without multiple conditions.
+% \begin{macrocode}
+\newcommand*{\@locale@cjklist}{}
+\listadd{\@locale@cjklist}{chinese}
+\listadd{\@locale@cjklist}{japanese}
+\listadd{\@locale@cjklist}{korean}
+\listadd{\@locale@cjklist}{thai}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@ifcjk}
+%\begin{definition}
+%\cs{@locale@ifcjk}\marg{language}\marg{true case}\marg{false case}
+%\end{definition}
+%Check if given root language is in the CJK list.
+% \begin{macrocode}
+\newcommand*{\@locale@ifcjk}[1]{%
+ \xifinlist{#1}{\@locale@cjklist}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@iflatinscript}
+%\begin{definition}
+%\cs{@locale@iflatinscript}\marg{dialect}\marg{true case}\marg{false case}
+%\end{definition}
+%Check if given dialect has the script explicitly set to Latn.
+% \begin{macrocode}
+\newcommand*{\@locale@iflatinscript}[1]{%
+ \ifcsstring{@tracklang@script@#1}{Latn}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Should \sty{babel} or \sty{polyglossia} be loaded?
+% \begin{macrocode}
+\ifcase\@locale@supportopt
+% \end{macrocode}
+% No support required.
+% \begin{macrocode}
+\or
+% \end{macrocode}
+% \pkgopt{auto} option.
+% \begin{macrocode}
+ \@locale@trackall
+ \ForEachTrackedDialect{\locale@this@dialect}%
+ {%
+% \end{macrocode}
+% Get root language name.
+% \begin{macrocode}
+ \edef\this@root@lang{\TrackedLanguageFromDialect{\locale@this@dialect}}%
+% \end{macrocode}
+% Is this language in the CJK list?
+% \begin{macrocode}
+ \@locale@ifcjk{\this@root@lang}%
+ {
+ \let\@locale@ifsupportcjk\@firstoftwo
+% \end{macrocode}
+% Is pinyin needed?
+% \begin{macrocode}
+ \@locale@iflatinscript{\locale@this@dialect}%
+ {\let\@locale@ifsupportpinyin\@firstoftwo}%
+ {}
+ }
+ {}
+% \end{macrocode}
+% No point checking for \sty{polyglossia} support if not using
+% \XeLaTeX\ or \LuaLaTeX.
+% \begin{macrocode}
+ \@locale@ifxeorlua
+ {
+ \@locale@ifsupportbabelorpoly
+ {
+% \end{macrocode}
+% Haven't yet determined support for \sty{babel} or \sty{polyglossia}.
+% Does the file \texttt{gloss-}\meta{language}\texttt{.ldf} exist?
+% \begin{macrocode}
+ \IfFileExists{gloss-\this@root@lang.ldf}
+ {
+ \let\@locale@ifsupportbabelorpoly\@thirdofthree
+ }
+ {
+% \end{macrocode}
+% Does the file \meta{language}\texttt{.ldf} exist?
+% \begin{macrocode}
+ \IfFileExists{\this@root@lang.ldf}
+ {\let\@locale@ifsupportbabelorpoly\@secondofthree}
+ {}
+ }
+ }
+% \end{macrocode}
+% Don't bother checking if already determined that \sty{babel} needs
+% to be used.
+% \begin{macrocode}
+ {}
+ {
+% \end{macrocode}
+% Already found one language supported by \sty{polyglossia}. Now
+% check this one.
+% Does the file \texttt{gloss-}\meta{language}\texttt{.ldf} exist?
+% \begin{macrocode}
+ \IfFileExists{gloss-\this@root@lang.ldf}
+ {}
+ {
+% \end{macrocode}
+% No support for this language with \sty{polyglossia}.
+% Does the file \meta{language}\texttt{.ldf} exist?
+% \begin{macrocode}
+ \IfFileExists{\this@root@lang.ldf}
+ {\let\@locale@ifsupportbabelorpoly\@secondofthree}
+ {}
+ }
+ }
+ }
+ {
+% \end{macrocode}
+% Not using \XeLaTeX\ or \LuaLaTeX\ so no \sty{polyglossia} support.
+% Does the file \meta{language}\texttt{.ldf} exist?
+% \begin{macrocode}
+ \IfFileExists{\this@root@lang.ldf}
+ {\let\@locale@ifsupportbabelorpoly\@secondofthree}
+ {}
+ }
+ }
+\or
+% \end{macrocode}
+% \pkgopt{babel} option.
+% \begin{macrocode}
+ \let\@locale@ifsupportbabelorpoly\@secondofthree
+\or
+% \end{macrocode}
+% \pkgopt{polyglossia} option.
+% \begin{macrocode}
+ \let\@locale@ifsupportbabelorpoly\@thirdofthree
+\or
+% \end{macrocode}
+% \pkgopt{cjk} option.
+% \begin{macrocode}
+ \let\@locale@currentiscjk\@secondoftwo
+% \end{macrocode}
+% Is pinyin needed?
+% \begin{macrocode}
+ \ForEachTrackedDialect{\locale@this@dialect}%
+ {%
+ \edef\this@root@lang{\TrackedLanguageFromDialect{\locale@this@dialect}}%
+ \@locale@ifcjk{\this@root@lang}%
+ {
+ \@locale@iflatinscript{\locale@this@dialect}%
+ {\let\@locale@ifsupportpinyin\@firstoftwo}%
+ {}
+ }
+ {}
+ }
+% \end{macrocode}
+%End of case statement
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% Does \sty{CJK} need to be loaded?
+% \begin{macrocode}
+\@locale@ifsupportcjk
+{
+% \end{macrocode}
+% Is UTF-8 support needed?
+% \begin{macrocode}
+ \@locale@ifxeorlua
+ {
+ \RequirePackage{xeCJK}%
+ }
+ {
+ \ifdefstring\@locale@inputenc{utf8}%
+ {%
+ \RequirePackage{CJKutf8}%
+% \end{macrocode}
+% \sty{CJKutf8} automatically loads
+% \sty{inputenc} with the \pkgopt{utf8} option.
+% \begin{macrocode}
+ \renewcommand{\@locale@loadinputenc}{}%
+% \end{macrocode}
+% Need to ensure UTF-8 characters are correctly set up when the
+% query is made.
+% \begin{macrocode}
+ \newcommand*{\localeprequery}{\begin{CJK}{UTF8}{}\makeatletter}
+ \newcommand*{\localepostquery}{\end{CJK}}
+ }%
+ {%
+ \RequirePackage{CJK}%
+% \end{macrocode}
+% Non-UTF encoding. Not implemented as I'm
+% not familiar with these encodings.
+% \begin{macrocode}
+ \PackageWarning{tex-locale}{Unsupported encoding `\@locale@loadinputenc'}%
+ }%
+ }
+% \end{macrocode}
+% Load \sty{pinyin} if needed.
+% \begin{macrocode}
+ \@locale@ifsupportpinyin
+ {\RequirePackage{pinyin}}%
+ {}%
+}
+{}
+% \end{macrocode}
+
+% Load \sty{inputenc} if required.
+% \begin{macrocode}
+\@locale@loadinputenc
+% \end{macrocode}
+%
+%\begin{macro}{\localenopolypunct}
+%Just does its argument (scoped) if \sty{polyglossia} hasn't been
+%loaded. (Made robust if \sty{polyglossia} is loaded.)
+% \begin{macrocode}
+\newcommand{\localenopolypunct}[1]{{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@nopolypunct}
+%Robust form used with \sty{polyglossia}.
+% \begin{macrocode}
+\newrobustcmd{\@locale@nopolypunct}[1]{%
+ {%
+ \@tracklang@ifundef{no\languagename @punctuation}{}%
+ {\csname no\languagename @punctuation\endcsname}%
+ #1%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%Load the generic code.
+% \begin{macrocode}
+\input{tex-locale}
+% \end{macrocode}
+%Load \sty{datetime2} if required:
+% \begin{macrocode}
+\@locale@load@dtm
+% \end{macrocode}
+%
+%\begin{macro}{\LocaleSupportPackageCase}
+%\begin{definition}
+%\cs{LocaleSupportPackageCase}\marg{babel}\marg{polyglossia}\marg{neither}
+%\end{definition}
+%Provide a user-level command to determine whether \sty{babel} or
+%\sty{polyglossia} was used. This doesn't test if \sty{CJK} was
+%loaded, which may have additionally been loaded.
+% \begin{macrocode}
+\@ifpackageloaded{polyglossia}
+{\newcommand{\LocaleSupportPackageCase}[3]{#2}}
+{%
+ \@ifpackageloaded{babel}
+ {\newcommand{\LocaleSupportPackageCase}[3]{#1}}%
+ {\newcommand{\LocaleSupportPackageCase}[3]{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</tex-locale.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tex-locale.tex>
+% \end{macrocode}
+%\fi
+%\section{Generic Code (\texttt{tex-locale.tex})}
+% Does the category code of \verb|@| need changing?
+%\begin{macro}{\@locale@restore@at}
+% \begin{macrocode}
+\ifnum\catcode`\@=11\relax
+ \def\@locale@restore@at{}%
+\else
+ \expandafter\edef\csname @locale@restore@at\endcsname{%
+ \noexpand\catcode`\noexpand\@=\number\catcode`\@\relax
+ }%
+ \catcode`\@=11\relax
+\fi
+% \end{macrocode}
+%\end{macro}
+% First check if this file has already been loaded:
+% \begin{macrocode}
+\ifx\@locale@parse@query\undefined
+\else
+ \@locale@restore@at
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+% Version info.
+% \begin{macrocode}
+\expandafter\def\csname ver@tex-locale.tex\endcsname{2018/08/26 v1.0
+(NLCT) localisation support}
+% \end{macrocode}
+% Load \styfmt{tracklang} and \styfmt{texosquery}:
+% \begin{macrocode}
+\input tracklang
+\input texosquery
+% \end{macrocode}
+%
+%\begin{macro}{\@locale@err}
+% \begin{macrocode}
+\ifx\PackageError\undefined
+ \def\@locale@err#1#2{%
+ \errhelp{#2}%
+ \errmessage{tex-locale: #1}}
+\else
+ \def\@locale@err#1#2{\PackageError{tex-locale}{#1}{#2}}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@warn}
+%Use \sty{tracklang}'s warning to allow all warnings to be switched
+%off at the same time.
+% \begin{macrocode}
+\def\@locale@warn{\@tracklang@pkgwarn{tex-locale}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@info}
+%Information message.
+% \begin{macrocode}
+\ifx\PackageInfo\undefined
+ \def\@locale@info#1{%
+ {%
+ \newlinechar=`\^^J
+ \def\MessageBreak{^^J}%
+ \message{^^Jtex-locale Info: #1^^J}%
+ }%
+ }
+\else
+ \def\@locale@info#1{\PackageInfo{tex-locale}{#1}}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%Check \sty{tracklang} is at least v1.3.4.
+% \begin{macrocode}
+\ifx\@tracklang@pkgwarn\undefined
+ \@locale@err{tracklang version is too old. At least v1.3.4 required}
+ {You need to update tracklang to at least v1.3.4}%
+\fi
+% \end{macrocode}
+%
+%Check \sty{texosquery} is at least v1.4.
+% \begin{macrocode}
+\ifx\@texosquery@argquote\undefined
+ \@locale@err{texosquery version is too old. At least v1.4 required}
+ {You need to update texosquery to at least v1.4}%
+\fi
+% \end{macrocode}
+%
+%\begin{macro}{\LocaleMain}
+%If \cs{LocaleMain} hasn't been defined, define it. This macro
+%stores the language tag of the document's main region or
+%\texttt{locale} to use the OS locale. The default is
+%\texttt{locale}. This is a user-level command so it can be set before loading
+%\file{tex-locale.tex}.
+% \begin{macrocode}
+\ifx\LocaleMain\undefined
+ \def\LocaleMain{locale}
+\fi
+% \end{macrocode}
+%Sanitize just in case.
+% \begin{macrocode}
+\@tracklang@sanitize\LocaleMain
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleOther}
+%If \cs{LocaleOther} hasn't been defined, define it. This macro
+%stores a comma-separated list of language tags or
+%\texttt{locale} for additional regions. The default is empty. This
+%is a user-level command so it can be set before loading
+%\file{tex-locale.tex}.
+% \begin{macrocode}
+\ifx\LocaleOther\undefined
+ \def\LocaleOther{}
+\else
+% \end{macrocode}
+%Sanitize just in case.
+% \begin{macrocode}
+ \@tracklang@sanitize\LocaleOther
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@tag}
+%Command to keep track of the OS locale. This is
+%initialised as empty but will be set if the \sty{texosquery} call
+%is successful.
+% \begin{macrocode}
+\def\@locale@os@tag{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@default}
+%The keyword used to indicate the OS locale.
+% \begin{macrocode}
+\def\@locale@os@default{locale}
+% \end{macrocode}
+%Sanitize since it needs to be compared with \cs{LocaleMain}.
+% \begin{macrocode}
+\@tracklang@sanitize\@locale@os@default
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@unknown@currency}
+%Unknown currency designator.
+% \begin{macrocode}
+\def\@locale@unknown@currency{XXX}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@region}
+%The OS region. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@region{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@groupsep}
+%The OS numeric group sep. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@groupsep{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@decsep}
+%The OS numeric group sep. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@decsep{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@cursep}
+%The OS currency separator. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@cursep{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@exp}
+%The OS exponent symbol. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@exp{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@usesgroup}
+%The OS numeric uses group value. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@usesgroup{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@currencycode}
+%The OS currency code. Initialised as unknown code but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@currencycode{XXX}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@regionalcurrencycode}
+%The OS regional currency code. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@regionalcurrencycode{XXX}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@currencysym}
+%The OS currency symbol. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@currencysym{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@os@currencytex}
+%The OS currency \TeX\ code. Initialised as empty but will be set if the
+%\sty{texosquery} call is successful.
+% \begin{macrocode}
+\def\@locale@os@currencytex{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleMainFile}
+%The document's main file. (The modification date is queried if not
+%empty.) If \cs{jobname} includes double-quotes, these need to be
+%stripped to avoid interfering with the shell-escape (especially in
+%restricted mode).
+% \begin{macrocode}
+\ifx\LocaleMainFile\undefined
+ \edef\LocaleMainFile{\expandafter\texosquerystripquotes{\jobname}.tex}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfDateTimePatternsSupported}
+%The \texttt{-M} and \texttt{-Z} lookup is optional. This may be
+%defined before \file{texosquery.tex} is input.
+% \begin{macrocode}
+\ifx\LocaleIfDateTimePatternsSupported\undefined
+ \def\LocaleIfDateTimePatternsSupported#1#2{#2}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localedatetimefmt}
+%Allow the date/time to be wrapped in a formatting command.
+% \begin{macrocode}
+\def\localedatetimefmt#1{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Setting Command Line Switches}
+%
+%\begin{macro}{\LocaleQueryCodesetParam}
+%\app{texosquery} has two different actions for obtaining the
+%codeset: \texttt{-{}-codeset-lcs} ("-C") and \texttt{-{}-codeset}
+%(-cs). The second returns the codeset name as recognised by Java.
+%The first returns a modified version that's closer
+%to the \sty{inputenc} setting. This macro defaults to using "-C"
+%but may be defined before this file is loaded to use "-cs" instead.
+%(This command isn't used by \file{locale.sty} when determining the
+%input encoding for \sty{inputenc}.)
+% \begin{macrocode}
+\ifx\LocaleQueryCodesetParam\undefined
+ \edef\LocaleQueryCodesetParam{\string-C}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@query@params}
+%It's more efficient to have a single \sty{texosquery} call, but the
+%parameters need to be determined first. (Use short arg with
+%\cs{string} just in case the hyphen character has a special
+%meaning.)
+% \begin{macrocode}
+\edef\@locale@query@params{%
+% \end{macrocode}
+%Since we need to use \sty{texosquery} anyway, may as well look up
+%the OS information at the same time.
+% \begin{macrocode}
+ \string-o \string-r \string-a
+% \end{macrocode}
+% May as well get the PDF date in case we have a TeX format that
+% doesn't provide \ics{pdfcreationdate}.
+% \begin{macrocode}
+ \string-n
+% \end{macrocode}
+% Default locale data (requires \sty{texosquery} v1.2):
+% \begin{macrocode}
+ \string-N
+% \end{macrocode}
+% May as well get the default codeset (requires \sty{texosquery}
+% v1.2). Note that \texttt{locale.sty} may have already found this
+% if the \sty{inputenc} package was automatically loaded.
+% \begin{macrocode}
+ \LocaleQueryCodesetParam\space
+}
+% \end{macrocode}
+%The remaining arguments need to be appended programatically.
+%
+%If the date-time patterns are needed, get the full date-time
+%information.
+% \begin{macrocode}
+\LocaleIfDateTimePatternsSupported
+{%
+ \edef\@locale@query@params{\@locale@query@params \string-M }
+}
+{}
+% \end{macrocode}
+%
+% May as well get the modification date of the document file since
+% we need to make a system call anyway, but only if
+% \cs{LocaleMainFile} isn't empty.
+% \begin{macrocode}
+\ifx\LocaleMainFile\empty
+\else
+ \edef\@locale@query@params{\@locale@query@params
+ \string-d \@texosquery@argquote{\LocaleMainFile}
+ }
+\fi
+% \end{macrocode}
+%The \texttt{-D} switch also requires \sty{texosquery} v1.2.
+%First deal with the main language.
+% \begin{macrocode}
+\ifx\LocaleMain\@locale@os@default
+ \LocaleIfDateTimePatternsSupported
+ {%
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D \string-Z
+ }
+ }
+ {
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D
+ }
+ }
+\else
+ \LocaleIfDateTimePatternsSupported
+ {%
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D \LocaleMain\space\string-Z \LocaleMain\space
+ }
+ }
+ {
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D \LocaleMain\space
+ }
+ }
+\fi
+% \end{macrocode}
+%Iterate through the list of other languages.
+% \begin{macrocode}
+\@tracklang@for\@locale@tag:=\LocaleOther\do{%
+ \ifx\@locale@tag\@locale@os@default
+ \LocaleIfDateTimePatternsSupported
+ {%
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D \string-Z
+ }
+ }
+ {%
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D
+ }
+ }
+ \else
+ \LocaleIfDateTimePatternsSupported
+ {%
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D \@locale@tag\space\string-Z \@locale@tag\space
+ }
+ }
+ {%
+ \edef\@locale@query@params{\@locale@query@params
+ \string-D \@locale@tag\space
+ }
+ }
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{System Call}
+%
+%\begin{macro}{\localeprequery}
+%Allow for a hook immediately before the query.
+% \begin{macrocode}
+\csname localeprequery\endcsname
+% \end{macrocode}
+%\end{macro}
+%
+%Now run \sty{texosquery} unless \cs{LocaleQueryFile} has been
+%defined, in which case use \cs{TeXOSQueryFromFile}
+% \begin{macrocode}
+\ifx\LocaleQueryFile\undefined
+% \end{macrocode}
+% No file provided.
+% \begin{macrocode}
+ \TeXOSQuery{\@locale@result}{\@locale@query@params}
+\else
+ \ifx\LocaleQueryFile\empty
+ \TeXOSQuery{\@locale@result}{\@locale@query@params}
+ \else
+% \end{macrocode}
+%\cs{TeXOSQueryFromFile} was added to \sty{texosquery} v1.4, so
+%check it's available.
+% \begin{macrocode}
+ \ifx\TeXOSQueryFromFile\undefined
+ \@locale@err{texosquery too old to support
+ \string\LocaleQueryFile. At least v1.4 required}
+ {You need to update your version of texosquery}
+ \def\@locale@result{}
+ \else
+ \@locale@info{Fetching query results from `\LocaleQueryFile'}%
+ \TeXOSQueryFromFile{\@locale@result}{\LocaleQueryFile}
+ \fi
+ \fi
+\fi
+% \end{macrocode}
+%Make the result global in case the pre and post query hooks have
+%introduced a local scope.
+% \begin{macrocode}
+\global\let\@locale@result\@locale@result
+% \end{macrocode}
+%
+%\begin{macro}{\localepostquery}
+%Allow for a hook immediately after the query.
+% \begin{macrocode}
+\csname localepostquery\endcsname
+% \end{macrocode}
+%\end{macro}
+%
+%If the result is empty then the query failed (\sty{texosquery} not
+%installed correctly or JRE not installed or shell escape not
+%permitted or dry run mode on). The result now needs to be parsed,
+%but first define some convenient commands that can be used by the
+%parser.
+%
+%\subsection{Attributes}\label{sec:code.attributes}
+%\begin{macro}{\LocaleSetAttribute}
+%\begin{definition}
+%\cs{LocaleSetAttribute}\marg{label}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Provide convenient way of defining attributes. The label depends on
+%the attribute type. For example, it could be the dialect label or
+%the region code.
+% \begin{macrocode}
+\def\LocaleSetAttribute#1#2#3{%
+ \expandafter\def\csname locale@#2@#1\endcsname{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAppToAttribute}
+%\begin{definition}
+%\cs{LocaleAppToAttribute}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Append \meta{value} to this attribute value.
+% \begin{macrocode}
+\def\LocaleAppToAttribute#1#2#3{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\csname locale@#2@#1\expandafter\endcsname
+ \expandafter\expandafter\expandafter{\csname locale@#2@#1\endcsname#3}%
+ }%
+ {\expandafter\def\csname locale@#2@#1\endcsname{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAppToAttribute}
+%\begin{definition}
+%\cs{LocaleXpAppToAttribute}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%As above but expand first token of \meta{value}.
+% \begin{macrocode}
+\def\LocaleXpAppToAttribute#1#2#3{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\csname locale@#2@#1\expandafter\endcsname
+ \expandafter\expandafter\expandafter{%
+ \csname locale@#2@#1\expandafter\endcsname#3}%
+ }%
+ {%
+ \expandafter\def\csname locale@#2@#1\expandafter\endcsname\expandafter{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAddToAttributeList}
+%\begin{definition}
+%\cs{LocaleAddToAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleAddToAttributeList#1#2#3{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \LocaleIfInAttributeList{#1}{#2}{#3}%
+ {}%
+ {\LocaleAppToAttribute{#1}{#2}{,#3}}%
+ }%
+ {\LocaleSetAttribute{#1}{#2}{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAddToAttributeList}
+%\begin{definition}
+%\cs{LocaleXpAddToAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleXpAddToAttributeList#1#2#3{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \LocaleIfXpInAttributeList{#1}{#2}{#3}%
+ {}%
+ {\LocaleXpAppToAttribute{#1}{#2}{\expandafter,#3}}%
+ }%
+ {\expandafter\def\csname locale@#2@#1\expandafter\endcsname\expandafter{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localeshowattribute}
+%Debugging command.
+% \begin{macrocode}
+\def\localeshowattribute#1#2{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \expandafter\show\csname locale@#2@#1\endcsname
+ }%
+ {\@locale@err{Attribute `#2' not defined for `#1'}%
+ {\string\localeshowattribute\space was asked to show this
+ attribute for the given attribute type, but the
+ associated command hasn't been defined}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleProvideAttribute}
+%\begin{definition}
+%\cs{LocaleProvideAttribute}\marg{label}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Only set the attribute if it hasn't already been set for this label.
+% \begin{macrocode}
+\def\LocaleProvideAttribute#1#2#3{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {}%
+ {\LocaleSetAttribute{#1}{#2}{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLetAttribute}
+%\begin{definition}
+%\cs{LocaleLetAttribute}\marg{label}\marg{attribute
+%label}\marg{cs}
+%\end{definition}
+%Set the attribute value to the definition of the control sequence \meta{cs}.
+% \begin{macrocode}
+\def\LocaleLetAttribute#1#2#3{%
+ \expandafter\let\csname locale@#2@#1\endcsname#3%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetAttributeOrDefValue}
+%\begin{definition}
+%\cs{LocaleGetAttributeOrDefValue}\marg{label}\marg{attribute label}\marg{def
+%value}
+%\end{definition}
+%Gets the attribute or the default value if unset.
+% \begin{macrocode}
+\def\LocaleGetAttributeOrDefValue#1#2#3{%
+ \@tracklang@ifundef{locale@#2@#1}%
+ {#3\@locale@undef@action{#1}{#2}}%
+ {\csname locale@#2@#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetAttribute}
+%\begin{definition}
+%\cs{LocaleGetAttribute}\marg{label}\marg{attribute label}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleGetAttribute#1#2{%
+ \LocaleGetAttributeOrDefValue{#1}{#2}{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@undef@action}
+%Action if an undefined attribute is referenced.
+%Does nothing by default but may be redefined for debugging
+%purposes.
+% \begin{macrocode}
+\def\@locale@undef@action#1#2{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasAttribute}\marg{label}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+%Tests if the given attribute has been assigned.
+% \begin{macrocode}
+\def\LocaleIfHasAttribute#1#2#3#4{%
+ \@tracklang@ifundef{locale@#2@#1}%
+ {#4}%
+ {#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleForEachInAttributeList}
+%\begin{definition}
+%\cs{LocaleForEachInAttributeList}\marg{label}\marg{attribute
+%label}\marg{cs}\marg{body}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this iterates
+%over each item in that list, setting \meta{cs} to that item and
+%performing \meta{body}.
+% \begin{macrocode}
+\def\LocaleForEachInAttributeList#1#2#3#4{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \expandafter\@tracklang@for\expandafter#3\expandafter:\expandafter
+ =\csname locale@#2@#1\endcsname\do{#4}%
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfInAttributeList}
+%\begin{definition}
+%\cs{LocaleIfInAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this tests if
+%\meta{item} is in that list.
+% \begin{macrocode}
+\def\LocaleIfInAttributeList#1#2#3#4#5{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \expandafter\let\expandafter\@locale@attrlist\csname locale@#2@#1\endcsname
+ \@tracklang@ifinlist{#3}{\@locale@attrlist}{#4}{#5}%
+ }%
+ {#5}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfXpInAttributeList}
+%\begin{definition}
+%\cs{LocaleIfXpInAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%As above but expands the first token of \meta{item}.
+% \begin{macrocode}
+\def\LocaleIfXpInAttributeList#1#2#3#4#5{%
+ \LocaleIfHasAttribute{#1}{#2}%
+ {%
+ \expandafter\let\expandafter\@locale@attrlist\csname locale@#2@#1\endcsname
+ \expandafter\@tracklang@ifinlist\expandafter{#3}{\@locale@attrlist}{#4}{#5}%
+ }%
+ {#5}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasNonEmptyAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasNonEmptyAttribute}\marg{label}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+%Tests if the given attribute has been assigned a non-empty value.
+% \begin{macrocode}
+\def\LocaleIfHasNonEmptyAttribute#1#2#3#4{%
+ \@tracklang@ifundef{locale@#2@#1}%
+ {#4}%
+ {%
+ \expandafter\ifx\csname locale@#2@#1\endcsname\empty
+ #4%
+ \else
+ #3%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfAttributeEqCs}
+%\begin{definition}
+%\cs{LocaleIfAttributeEqCs}\marg{label}\marg{attribute
+%label}\marg{cs}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value is the same as the definition of the control
+%sequence \meta{cs} to \meta{true} otherwise do false.
+% \begin{macrocode}
+\def\LocaleIfAttributeEqCs#1#2#3#4#5{%
+ \expandafter\ifx\csname locale@#2@#1\endcsname#3%
+ #4%
+ \else
+ #5%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfAttributeEqCsName}
+%\begin{definition}
+%\cs{LocaleIfAttributeEqCsName}\marg{label}\marg{attribute
+%label}\marg{cs name}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value is the same as the definition of the control
+%sequence name \meta{cs name} to \meta{true} otherwise do false.
+% \begin{macrocode}
+\def\LocaleIfAttributeEqCsName#1#2#3#4#5{%
+ \expandafter\ifx
+ \csname locale@#2@#1\expandafter\endcsname
+ \csname #3\endcsname
+ #4%
+ \else
+ #5%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfAttributeEqNum}
+%\begin{definition}
+%\cs{LocaleIfAttributeEqNum}\marg{label}\marg{attribute
+%label}\marg{n}\marg{true}\marg{false}
+%\end{definition}
+%If the numeric attribute value is equal to \meta{n} do \meta{true}
+%otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfAttributeEqNum#1#2#3#4#5{%
+ \LocaleIfHasNonEmptyAttribute{#1}{#2}%
+ {%
+ \expandafter\ifnum\csname locale@#2@#1\endcsname=#3
+ #4%
+ \else
+ #5%
+ \fi
+ }%
+ {#5}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfSameAttributeValues}
+%\begin{definition}
+%\cs{LocaleIfSameAttributeValues}\marg{label}\marg{attribute
+%1}\marg{attribute 2}\marg{true}\marg{false}
+%\end{definition}
+%Tests if two different attributes for the same \meta{label} have
+%matching values.
+% \begin{macrocode}
+\def\LocaleIfSameAttributeValues#1#2#3#4#5{%
+ \expandafter\ifx
+ \csname locale@#2@#1\expandafter\endcsname
+ \csname locale@#3@#1\endcsname
+ #4%
+ \else
+ #5%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localeshowdialectattribute}
+%Debugging command.
+% \begin{macrocode}
+\def\localeshowdialectattribute#1#2{%
+ \localeshowattribute{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleSetDialectAttribute}
+%\begin{definition}
+%\cs{LocaleSetDialectAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Sets dialect attribute.
+% \begin{macrocode}
+\def\LocaleSetDialectAttribute#1#2#3{%
+ \LocaleSetAttribute{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleProvideDialectAttribute}
+%\begin{definition}
+%\cs{LocaleProvideDialectAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Provides dialect attribute.
+% \begin{macrocode}
+\def\LocaleProvideDialectAttribute#1#2#3{%
+ \LocaleProvideAttribute{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLetDialectAttribute}
+%\begin{definition}
+%\cs{LocaleLetDialectAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{cs}
+%\end{definition}
+%Set the dialect attribute value to the definition of the control sequence \meta{cs}.
+% \begin{macrocode}
+\def\LocaleLetDialectAttribute#1#2#3{%
+ \LocaleLetAttribute{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAppToDialectAttribute}
+%\begin{definition}
+%\cs{LocaleAppToDialectAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Append to dialect attribute value.
+% \begin{macrocode}
+\def\LocaleAppToDialectAttribute#1#2#3{%
+ \LocaleAppToAttribute{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAppToDialectAttribute}
+%\begin{definition}
+%\cs{LocaleXpAppToDialectAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Append to dialect attribute value (expand first token of
+%\meta{value}).
+% \begin{macrocode}
+\def\LocaleXpAppToDialectAttribute#1#2#3{%
+ \LocaleXpAppToAttribute{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAddToDialectAttributeList}
+%\begin{definition}
+%\cs{LocaleAddToDialectAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleAddToDialectAttributeList#1#2{%
+ \LocaleAddToAttributeList{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAddToDialectAttributeList}
+%\begin{definition}
+%\cs{LocaleXpAddToDialectAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleXpAddToDialectAttributeList#1#2{%
+ \LocaleXpAddToAttributeList{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetDialectAttribute}
+%\begin{definition}
+%\cs{LocaleGetDialectAttribute}\marg{dialect label}\marg{attribute
+%label}
+%\end{definition}
+%Gets dialect attribute.
+% \begin{macrocode}
+\def\LocaleGetDialectAttribute#1#2{%
+ \LocaleGetAttribute{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetDialectAttributeOrDefValue}
+%\begin{definition}
+%\cs{LocaleGetDialectAttributeOrDefValue}\marg{dialect label}\marg{attribute
+%label}\marg{def value}
+%\end{definition}
+%Gets attribute for given dialect or \meta{def value} if unset.
+% \begin{macrocode}
+\def\LocaleGetDialectAttributeOrDefValue#1#2{%
+ \LocaleGetAttributeOrDefValue{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasDialectAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasDialectAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleIfHasDialectAttribute#1#2{%
+ \LocaleIfHasAttribute{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleForEachInDialectAttributeList}
+%\begin{definition}
+%\cs{LocaleForEachInDialectAttributeList}\marg{label}\marg{attribute
+%label}\marg{cs}\marg{body}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this iterates
+%over each item in that list, setting \meta{cs} to that item and
+%performing \meta{body}.
+% \begin{macrocode}
+\def\LocaleForEachInDialectAttributeList#1#2{%
+ \LocaleForEachInAttributeList{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfInDialectAttributeList}
+%\begin{definition}
+%\cs{LocaleIfInDialectAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this tests if
+%\meta{item} is in that list.
+% \begin{macrocode}
+\def\LocaleIfInDialectAttributeList#1#2{%
+ \LocaleIfInAttributeList{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfXpInDialectAttributeList}
+%\begin{definition}
+%\cs{LocaleIfXpInDialectAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%As above but expands the first token of \meta{item}.
+% \begin{macrocode}
+\def\LocaleIfXpInDialectAttributeList#1#2{%
+ \LocaleIfXpInAttributeList{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasDialectNonEmptyAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasDialectNonEmptyAttribute}\marg{dialect label}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleIfHasDialectNonEmptyAttribute#1#2{%
+ \LocaleIfHasNonEmptyAttribute{#1}{dialect@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfDialectAttributeEqCs}
+%\begin{definition}
+%\cs{LocaleIfDialectAttributeEqCs}\marg{dialect label}\marg{attribute
+%label}\marg{cs}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value for the given dialect is the same as the definition of the control
+%sequence \meta{cs} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfDialectAttributeEqCs#1#2#3{%
+ \LocaleIfAttributeEqCs{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfDialectAttributeEqCsName}
+%\begin{definition}
+%\cs{LocaleIfDialectAttributeEqCsName}\marg{dialect label}\marg{attribute
+%label}\marg{cs name}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value for the given dialect is the same as the definition of the control
+%sequence name \meta{cs name} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfDialectAttributeEqCsName#1#2#3{%
+ \LocaleIfAttributeEqCsName{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfDialectAttributeEqNum}
+%\begin{definition}
+%\cs{LocaleIfDialectAttributeEqNum}\marg{dialect label}\marg{attribute
+%label}\marg{n}\marg{true}\marg{false}
+%\end{definition}
+%If the numeric attribute value for the given dialect is equal to
+%the number \meta{n} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfDialectAttributeEqNum#1#2#3{%
+ \LocaleIfAttributeEqNum{#1}{dialect@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfSameDialectAttributeValues}
+%\begin{definition}
+%\cs{LocaleIfSameDialectAttributeValues}\marg{dialect label}\marg{attribute
+%1}\marg{attribute 2}\marg{true}\marg{false}
+%\end{definition}
+%Tests if two different dialect attributes for the same
+%\meta{dialect label} have
+%matching values.
+% \begin{macrocode}
+\def\LocaleIfSameDialectAttributeValues#1#2#3{%
+ \LocaleIfSameAttributeValues{#1}{dialect@#2}{dialect@#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localeshowregionattribute}
+%Debugging command.
+% \begin{macrocode}
+\def\localeshowregionattribute#1#2{%
+ \localeshowattribute{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleSetRegionAttribute}
+%\begin{definition}
+%\cs{LocaleSetRegionAttribute}\marg{region code}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Sets region attribute.
+% \begin{macrocode}
+\def\LocaleSetRegionAttribute#1#2#3{%
+ \LocaleSetAttribute{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleProvideRegionAttribute}
+%\begin{definition}
+%\cs{LocaleProvideRegionAttribute}\marg{region code}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Provides region attribute.
+% \begin{macrocode}
+\def\LocaleProvideRegionAttribute#1#2#3{%
+ \LocaleProvideAttribute{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLetRegionAttribute}
+%\begin{definition}
+%\cs{LocaleLetRegionAttribute}\marg{region code}\marg{attribute
+%label}\marg{cs}
+%\end{definition}
+%Set the region attribute value to the definition of the control sequence \meta{cs}.
+% \begin{macrocode}
+\def\LocaleLetRegionAttribute#1#2#3{%
+ \LocaleLetAttribute{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAppToRegionAttribute}
+%\begin{definition}
+%\cs{LocaleAppToRegionAttribute}\marg{region code}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Append to region attribute.
+% \begin{macrocode}
+\def\LocaleAppToRegionAttribute#1#2#3{%
+ \LocaleAppToAttribute{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAppToRegionAttribute}
+%\begin{definition}
+%\cs{LocaleXpAppToRegionAttribute}\marg{region code}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Append to region attribute (expand first token of
+%\meta{value}).
+% \begin{macrocode}
+\def\LocaleXpAppToRegionAttribute#1#2#3{%
+ \LocaleXpAppToAttribute{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAddToRegionAttributeList}
+%\begin{definition}
+%\cs{LocaleAddToRegionAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleAddToRegionAttributeList#1#2{%
+ \LocaleAddToAttributeList{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAddToRegionAttributeList}
+%\begin{definition}
+%\cs{LocaleXpAddToRegionAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleXpAddToRegionAttributeList#1#2{%
+ \LocaleXpAddToAttributeList{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetRegionAttribute}
+%\begin{definition}
+%\cs{LocaleGetRegionAttribute}\marg{region code}\marg{attribute
+%label}
+%\end{definition}
+%Gets region attribute.
+% \begin{macrocode}
+\def\LocaleGetRegionAttribute#1#2{%
+ \LocaleGetAttribute{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetRegionAttributeOrDefValue}
+%\begin{definition}
+%\cs{LocaleGetRegionAttributeOrDefValue}\marg{region code}\marg{attribute
+%label}\marg{def value}
+%\end{definition}
+%Gets attribute for given region or \meta{def value} if unset.
+% \begin{macrocode}
+\def\LocaleGetRegionAttributeOrDefValue#1#2{%
+ \LocaleGetAttributeOrDefValue{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasRegionAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasRegionAttribute}\marg{region code}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleIfHasRegionAttribute#1#2{%
+ \LocaleIfHasAttribute{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleForEachInRegionAttributeList}
+%\begin{definition}
+%\cs{LocaleForEachInRegionAttributeList}\marg{label}\marg{attribute
+%label}\marg{cs}\marg{body}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this iterates
+%over each item in that list, setting \meta{cs} to that item and
+%performing \meta{body}.
+% \begin{macrocode}
+\def\LocaleForEachInRegionAttributeList#1#2{%
+ \LocaleForEachInAttributeList{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfInRegionAttributeList}
+%\begin{definition}
+%\cs{LocaleIfInRegionAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this tests if
+%\meta{item} is in that list.
+% \begin{macrocode}
+\def\LocaleIfInRegionAttributeList#1#2{%
+ \LocaleIfInAttributeList{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfXpInRegionAttributeList}
+%\begin{definition}
+%\cs{LocaleIfXpInRegionAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%As above but expands the first token of \meta{item}.
+% \begin{macrocode}
+\def\LocaleIfXpInRegionAttributeList#1#2{%
+ \LocaleIfXpInAttributeList{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasRegionNonEmptyAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasRegionNonEmptyAttribute}\marg{region code}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleIfHasRegionNonEmptyAttribute#1#2{%
+ \LocaleIfHasNonEmptyAttribute{#1}{region@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfRegionAttributeEqCs}
+%\begin{definition}
+%\cs{LocaleIfRegionAttributeEqCs}\marg{region code}\marg{attribute
+%label}\marg{cs}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value for the given region is the same as the definition of the control
+%sequence \meta{cs} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfRegionAttributeEqCs#1#2#3{%
+ \LocaleIfAttributeEqCs{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfRegionAttributeEqCsName}
+%\begin{definition}
+%\cs{LocaleIfRegionAttributeEqCsName}\marg{region code}\marg{attribute
+%label}\marg{cs name}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value for the given region is the same as the definition of the control
+%sequence name \meta{cs name} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfRegionAttributeEqCsName#1#2#3{%
+ \LocaleIfAttributeEqCsName{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfRegionAttributeEqNum}
+%\begin{definition}
+%\cs{LocaleIfRegionAttributeEqNum}\marg{region label}\marg{attribute
+%label}\marg{n}\marg{true}\marg{false}
+%\end{definition}
+%If the numeric attribute value for the given region is equal to
+%the number \meta{n} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfRegionAttributeEqNum#1#2#3{%
+ \LocaleIfAttributeEqNum{#1}{region@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfSameRegionAttributeValues}
+%\begin{definition}
+%\cs{LocaleIfSameRegionAttributeValues}\marg{region code}\marg{attribute
+%1}\marg{attribute 2}\marg{true}\marg{false}
+%\end{definition}
+%Tests if two different region attributes for the same
+%\meta{region code} have matching values.
+% \begin{macrocode}
+\def\LocaleIfSameRegionAttributeValues#1#2#3{%
+ \LocaleIfSameAttributeValues{#1}{region@#2}{region@#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localeshowcurrencyattribute}
+%Debugging command.
+% \begin{macrocode}
+\def\localeshowcurrencyattribute#1#2{%
+ \localeshowattribute{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleSetCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleSetCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Sets currency attribute.
+% \begin{macrocode}
+\def\LocaleSetCurrencyAttribute#1#2#3{%
+ \LocaleSetAttribute{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleProvideCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleProvideCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{attribute value}
+%\end{definition}
+%Provides currency attribute.
+% \begin{macrocode}
+\def\LocaleProvideCurrencyAttribute#1#2#3{%
+ \LocaleProvideAttribute{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLetCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleLetCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{cs}
+%\end{definition}
+%Set the currency attribute value to the definition of the control sequence \meta{cs}.
+% \begin{macrocode}
+\def\LocaleLetCurrencyAttribute#1#2#3{%
+ \LocaleLetAttribute{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAppToCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleAppToCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Append to currency attribute value.
+% \begin{macrocode}
+\def\LocaleAppToCurrencyAttribute#1#2#3{%
+ \LocaleAppToAttribute{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAppToCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleXpAppToCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Append to currency attribute value (expand first token of
+%\meta{value}).
+% \begin{macrocode}
+\def\LocaleXpAppToCurrencyAttribute#1#2#3{%
+ \LocaleXpAppToAttribute{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleAddToCurrencyAttributeList}
+%\begin{definition}
+%\cs{LocaleAddToCurrencyAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleAddToCurrencyAttributeList#1#2{%
+ \LocaleAddToAttributeList{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleXpAddToCurrencyAttributeList}
+%\begin{definition}
+%\cs{LocaleXpAddToCurrencyAttributeList}\marg{label}\marg{attribute
+%label}\marg{value}
+%\end{definition}
+%Adds \meta{value} to this attribute's list (without repetition).
+% \begin{macrocode}
+\def\LocaleXpAddToCurrencyAttributeList#1#2{%
+ \LocaleXpAddToAttributeList{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleGetCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}
+%\end{definition}
+%Gets currency attribute.
+% \begin{macrocode}
+\def\LocaleGetCurrencyAttribute#1#2{%
+ \LocaleGetAttribute{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleGetCurrencyAttributeOrDefValue}
+%\begin{definition}
+%\cs{LocaleGetCurrencyAttributeOrDefValue}\marg{currency code}\marg{attribute
+%label}\marg{def value}
+%\end{definition}
+%Gets attribute for given currency or \meta{def value} if unset.
+% \begin{macrocode}
+\def\LocaleGetCurrencyAttributeOrDefValue#1#2{%
+ \LocaleGetAttributeOrDefValue{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasCurrencyAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasCurrencyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleIfHasCurrencyAttribute#1#2{%
+ \LocaleIfHasAttribute{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleForEachInCurrencyAttributeList}
+%\begin{definition}
+%\cs{LocaleForEachInCurrencyAttributeList}\marg{label}\marg{attribute
+%label}\marg{cs}\marg{body}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this iterates
+%over each item in that list, setting \meta{cs} to that item and
+%performing \meta{body}.
+% \begin{macrocode}
+\def\LocaleForEachInCurrencyAttributeList#1#2{%
+ \LocaleForEachInAttributeList{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfInCurrencyAttributeList}
+%\begin{definition}
+%\cs{LocaleIfInCurrencyAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%Where an attribute value is a comma-separated list, this tests if
+%\meta{item} is in that list.
+% \begin{macrocode}
+\def\LocaleIfInCurrencyAttributeList#1#2{%
+ \LocaleIfInAttributeList{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfXpInCurrencyAttributeList}
+%\begin{definition}
+%\cs{LocaleIfXpInCurrencyAttributeList}\marg{label}\marg{attribute
+%label}\marg{item}\marg{true}\marg{false}
+%\end{definition}
+%As above but expands the first token of \meta{item}.
+% \begin{macrocode}
+\def\LocaleIfXpInCurrencyAttributeList#1#2{%
+ \LocaleIfXpInAttributeList{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasCurrencyNonEmptyAttribute}
+%\begin{definition}
+%\cs{LocaleIfHasCurrencyNonEmptyAttribute}\marg{currency code}\marg{attribute
+%label}\marg{true}\marg{false}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleIfHasCurrencyNonEmptyAttribute#1#2{%
+ \LocaleIfHasNonEmptyAttribute{#1}{currency@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfCurrencyAttributeEqCs}
+%\begin{definition}
+%\cs{LocaleIfCurrencyAttributeEqCs}\marg{currency code}\marg{attribute
+%label}\marg{cs}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value for the given currency is the same as the definition of the control
+%sequence \meta{cs} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfCurrencyAttributeEqCs#1#2#3{%
+ \LocaleIfAttributeEqCs{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfCurrencyAttributeEqCsName}
+%\begin{definition}
+%\cs{LocaleIfCurrencyAttributeEqCsName}\marg{currency code}\marg{attribute
+%label}\marg{cs name}\marg{true}\marg{false}
+%\end{definition}
+%If the attribute value for the given currency is the same as the definition of the control
+%sequence name \meta{cs name} do \meta{true} otherwise do
+%\meta{false}.
+% \begin{macrocode}
+\def\LocaleIfCurrencyAttributeEqCsName#1#2#3{%
+ \LocaleIfAttributeEqCsName{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfCurrencyAttributeEqNum}
+%\begin{definition}
+%\cs{LocaleIfCurrencyAttributeEqNum}\marg{currency label}\marg{attribute
+%label}\marg{n}\marg{true}\marg{false}
+%\end{definition}
+%If the numeric attribute value for the given currency is equal to
+%the number \meta{n} do \meta{true} otherwise do \meta{false}.
+% \begin{macrocode}
+\def\LocaleIfCurrencyAttributeEqNum#1#2#3{%
+ \LocaleIfAttributeEqNum{#1}{currency@#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfSameCurrencyAttributeValues}
+%\begin{definition}
+%\cs{LocaleIfSameCurrencyAttributeValues}\marg{currency code}\marg{attribute
+%1}\marg{attribute 2}\marg{true}\marg{false}
+%\end{definition}
+%Tests if two different currency attributes for the same
+%\meta{currency code} have matching values.
+% \begin{macrocode}
+\def\LocaleIfSameCurrencyAttributeValues#1#2#3{%
+ \LocaleIfSameAttributeValues{#1}{currency@#2}{currency@#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Parser Commands}
+%
+%Define commands that are needed to parse the result.
+%\begin{macro}{\@locale@parse@result}
+%Start parsing the result. There are more than nine arguments, so do
+%this in bits. The first six arguments are: OS name, OS version, OS
+%architecture, PDF date-time, BCP 47 tag for default locale,
+%the default file encoding.
+% \begin{macrocode}
+\def\@locale@parse@result#1#2#3#4#5#6{%
+ \def\LocaleOSname{#1}%
+ \def\LocaleOSversion{#2}%
+ \def\LocaleOSarch{#3}%
+ \def\LocaleNowStamp{#4}%
+ \@locale@parse@default#5% remove outer group
+ \def\LocaleOScodeset{#6}%
+% \end{macrocode}
+% Is date-time pattern support required?
+% \begin{macrocode}
+ \LocaleIfDateTimePatternsSupported
+ {%
+ \let\@locale@next\@locale@parse@datetimeinfo
+ }%
+ {%
+ \def\LocaleDateTimeInfo{}%
+% \end{macrocode}
+% Was a file modification date included?
+% \begin{macrocode}
+ \ifx\LocaleMainFile\empty
+ \def\LocaleFileMod{}%
+ \let\@locale@next\@locale@parse@maindata
+ \else
+ \let\@locale@next\@locale@parse@filemod
+ \fi
+ }%
+ \@locale@next
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datetimeinfo}
+% \begin{macrocode}
+\def\@locale@parse@datetimeinfo#1{%
+ \def\LocaleDateTimeInfo{#1}%
+% \end{macrocode}
+% Was a file modification date included?
+% \begin{macrocode}
+ \ifx\LocaleMainFile\empty
+ \def\LocaleFileMod{}%
+ \let\@locale@next\@locale@parse@maindata
+ \else
+ \let\@locale@next\@locale@parse@filemod
+ \fi
+ \@locale@next
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@default}
+%Parse the result of \texttt{-N}
+% \begin{macrocode}
+\def\@locale@parse@default#1#2#3#4#5#6#7#8#9{%
+ \def\LocaleOStag{#1}%
+% \end{macrocode}
+%Parse (but don't track) tag.
+% \begin{macrocode}
+ \@tracklang@parselangtag{#1}%
+% \end{macrocode}
+%Can now get the region code.
+% \begin{macrocode}
+ \let\@locale@os@region\@TrackLangEnvTerritory
+ \def\@locale@os@groupsep{#2}%
+ \def\@locale@os@decsep{#3}%
+ \def\@locale@os@exp{#4}%
+ \def\@locale@os@usesgroup{#5}%
+ \def\@locale@os@currencycode{#6}%
+ \def\@locale@os@regionalcurrencycode{#7}%
+ \def\@locale@os@currencysym{#8}%
+ \def\@locale@os@currencytex{#9}%
+% \end{macrocode}
+%Provide currency attributes.
+% \begin{macrocode}
+ \LocaleSetRegionAttribute{\@locale@os@region}{currency}{#7}%
+ \LocaleProvideCurrencyAttribute{#7}{official}{#6}%
+ \LocaleProvideCurrencyAttribute{#7}{sym}{#8}%
+ \LocaleProvideCurrencyAttribute{#7}{tex}{#9}%
+ \@locale@parse@default@cursep
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@parse@default@cursep}
+% \begin{macrocode}
+\def\@locale@parse@default@cursep#1{%
+ \def\@locale@os@cursep{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@filemod}
+% \begin{macrocode}
+\def\@locale@parse@filemod#1{%
+ \def\LocaleFileMod{#1}%
+ \@locale@parse@maindata
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@maindata}
+% \begin{macrocode}
+\def\@locale@parse@maindata#1{%
+ \@locale@parse@maindatablock#1% remove outer group
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@maindatablock}
+% \begin{macrocode}
+\def\@locale@parse@maindatablock#1{%
+ \@locale@parse@maindatalocaleblock#1% remove outer group
+ \@locale@parse@dateblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@maindatalocaleblock}
+% \begin{macrocode}
+\def\@locale@parse@maindatalocaleblock#1#2#3#4#5#6#7{%
+ \def\LocaleMain{#1}%
+ \TrackLanguageTag{#1}%
+ \let\LocaleMainDialect\TrackLangLastTrackedDialect
+ \let\@locale@dialect\TrackLangLastTrackedDialect
+% \end{macrocode}
+%Get the region code if provided.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode{3166-1}{\@locale@dialect}%
+ {%
+ \edef\@locale@region{%
+ \TrackedIsoCodeFromLanguage{3166-1}{\@locale@dialect}}%
+ }%
+ {\def\@locale@region{}}%
+ \let\LocaleMainRegion\@locale@region
+ \ifx\LocaleMainRegion\empty
+ \else
+ \LocaleLetRegionAttribute{\LocaleMainRegion}{dialect}{\@locale@dialect}%
+ \fi
+% \end{macrocode}
+%Save language tag. (Provides a convenient mapping from dialect
+%label to tag.)
+% \begin{macrocode}
+ \LocaleSetDialectAttribute{\@locale@dialect}{langtag}{#1}%
+% \end{macrocode}
+%Provide reverse mapping from tag to dialect label.
+% \begin{macrocode}
+ \LocaleLetAttribute{#1}{tagtodialect}{\@locale@dialect}%
+% \end{macrocode}
+%Save display names.
+% \begin{macrocode}
+ \LocaleSetDialectAttribute{\@locale@dialect}{langname}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{nativelangname}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{regionname}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{nativeregionname}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{variantname}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{nativevariantname}{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@otherdatalocaleblock}
+% \begin{macrocode}
+\def\@locale@parse@otherdatalocaleblock#1#2#3#4#5#6#7{%
+ \TrackLanguageTag{#1}%
+ \let\@locale@dialect\TrackLangLastTrackedDialect
+% \end{macrocode}
+%Get the region code if provided.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode{3166-1}{\@locale@dialect}%
+ {%
+ \edef\@locale@region{%
+ \TrackedIsoCodeFromLanguage{3166-1}{\@locale@dialect}}%
+ \ifx\@locale@region\empty
+ \else
+ \LocaleXpAddToRegionAttributeList
+ {\@locale@region}{dialect}{\@locale@dialect}%
+ \fi
+ }%
+ {\def\@locale@region{}}%
+% \end{macrocode}
+%Save language tag.
+% \begin{macrocode}
+ \LocaleSetDialectAttribute{\@locale@dialect}{langtag}{#1}%
+% \end{macrocode}
+%Provide reverse mapping from tag to dialect label.
+% \begin{macrocode}
+ \LocaleLetAttribute{#1}{tagtodialect}{\@locale@dialect}%
+% \end{macrocode}
+%Save attributes.
+% \begin{macrocode}
+ \LocaleSetDialectAttribute{\@locale@dialect}{langname}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{nativelangname}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{regionname}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{nativeregionname}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{variantname}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{nativevariantname}{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@dateblock}
+% \begin{macrocode}
+\def\@locale@parse@dateblock#1{%
+ \@locale@parse@dates#1% remove outer group
+ \@locale@parse@datefmtblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@dates}
+% \begin{macrocode}
+\def\@locale@parse@dates#1#2#3#4#5{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{fulldate}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{longdate}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{meddate}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortdate}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{firstday}{#5}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datefmtblock}
+% \begin{macrocode}
+\def\@locale@parse@datefmtblock#1{%
+ \@locale@parse@datefmts#1% remove outer group
+ \@locale@parse@timeblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datefmts}
+% \begin{macrocode}
+\def\@locale@parse@datefmts#1#2#3#4{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{fulldatefmt}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{longdatefmt}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{meddatefmt}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortdatefmt}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@timeblock}
+% \begin{macrocode}
+\def\@locale@parse@timeblock#1{%
+ \@locale@parse@times#1% remove outer group
+ \@locale@parse@timefmtblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@times}
+% \begin{macrocode}
+\def\@locale@parse@times#1#2#3#4{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{fulltime}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{longtime}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{medtime}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shorttime}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@timefmtblock}
+% \begin{macrocode}
+\def\@locale@parse@timefmtblock#1{%
+ \@locale@parse@timefmts#1% remove outer group
+ \@locale@parse@datetimeblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@timefmts}
+% \begin{macrocode}
+\def\@locale@parse@timefmts#1#2#3#4{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{fulltimefmt}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{longtimefmt}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{medtimefmt}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shorttimefmt}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datetimeblock}
+% \begin{macrocode}
+\def\@locale@parse@datetimeblock#1{%
+ \@locale@parse@datetimes#1% remove outer group
+ \@locale@parse@datetimefmtblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datetimes}
+% \begin{macrocode}
+\def\@locale@parse@datetimes#1#2#3#4{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{fulldatetime}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{longdatetime}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{meddatetime}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortdatetime}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datetimefmtblock}
+% \begin{macrocode}
+\def\@locale@parse@datetimefmtblock#1{%
+ \@locale@parse@datetimefmts#1% remove outer group
+ \@locale@parse@weekdayblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@datetimefmts}
+% \begin{macrocode}
+\def\@locale@parse@datetimefmts#1#2#3#4{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{fulldatetimefmt}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{longdatetimefmt}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{meddatetimefmt}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortdatetimefmt}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@weekdayblock}
+% \begin{macrocode}
+\def\@locale@parse@weekdayblock#1{%
+ \@locale@parse@weekdays#1% remove outer group
+ \@locale@parse@shortweekdayblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@weekdays}
+% \begin{macrocode}
+\def\@locale@parse@weekdays#1#2#3#4#5#6#7{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.0}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.1}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.2}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.3}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.4}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.5}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{day.6}{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@shortweekdayblock}
+% \begin{macrocode}
+\def\@locale@parse@shortweekdayblock#1{%
+ \@locale@parse@shortweekdays#1% remove outer group
+ \@locale@parse@monthblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@shortweekdays}
+% \begin{macrocode}
+\def\@locale@parse@shortweekdays#1#2#3#4#5#6#7{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.0}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.1}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.2}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.3}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.4}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.5}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortday.6}{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@monthblock}
+% \begin{macrocode}
+\def\@locale@parse@monthblock#1{%
+ \@locale@parse@months#1% remove outer group
+ \@locale@parse@shortmonthblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@months}
+% \begin{macrocode}
+\def\@locale@parse@months#1#2#3#4#5#6#7#8#9{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.1}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.2}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.3}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.4}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.5}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.6}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.7}{#7}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.8}{#8}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.9}{#9}%
+% \end{macrocode}
+%Grab the remaining three arguments:
+% \begin{macrocode}
+ \@locale@parse@endmonths
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@endmonths}
+% \begin{macrocode}
+\def\@locale@parse@endmonths#1#2#3{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.10}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.11}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{month.12}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@shortmonthblock}
+% \begin{macrocode}
+\def\@locale@parse@shortmonthblock#1{%
+ \@locale@parse@shortmonths#1% remove outer group
+ \@locale@parse@standalone@weekdayblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@shortmonths}
+% \begin{macrocode}
+\def\@locale@parse@shortmonths#1#2#3#4#5#6#7#8#9{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.1}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.2}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.3}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.4}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.5}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.6}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.7}{#7}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.8}{#8}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.9}{#9}%
+% \end{macrocode}
+%Grab the remaining three arguments:
+% \begin{macrocode}
+ \@locale@parse@endshortmonths
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@endshortmonths}
+% \begin{macrocode}
+\def\@locale@parse@endshortmonths#1#2#3{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.10}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.11}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{shortmonth.12}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@weekdayblock}
+% \begin{macrocode}
+\def\@locale@parse@standalone@weekdayblock#1{%
+ \@locale@parse@standalone@weekdays#1% remove outer group
+ \@locale@parse@standalone@shortweekdayblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@weekdays}
+% \begin{macrocode}
+\def\@locale@parse@standalone@weekdays#1#2#3#4#5#6#7{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.0}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.1}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.2}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.3}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.4}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.5}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.day.6}{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@shortweekdayblock}
+% \begin{macrocode}
+\def\@locale@parse@standalone@shortweekdayblock#1{%
+ \@locale@parse@standalone@shortweekdays#1% remove outer group
+ \@locale@parse@standalone@monthblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@shortweekdays}
+% \begin{macrocode}
+\def\@locale@parse@standalone@shortweekdays#1#2#3#4#5#6#7{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.0}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.1}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.2}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.3}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.4}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.5}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortday.6}{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@monthblock}
+% \begin{macrocode}
+\def\@locale@parse@standalone@monthblock#1{%
+ \@locale@parse@standalone@months#1% remove outer group
+ \@locale@parse@standalone@shortmonthblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@months}
+% \begin{macrocode}
+\def\@locale@parse@standalone@months#1#2#3#4#5#6#7#8#9{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.1}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.2}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.3}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.4}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.5}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.6}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.7}{#7}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.8}{#8}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.9}{#9}%
+% \end{macrocode}
+%Grab the remaining three arguments:
+% \begin{macrocode}
+ \@locale@parse@endstandalone@months
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@endstandalone@months}
+% \begin{macrocode}
+\def\@locale@parse@endstandalone@months#1#2#3{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.10}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.11}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.month.12}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@shortmonthblock}
+% \begin{macrocode}
+\def\@locale@parse@standalone@shortmonthblock#1{%
+ \@locale@parse@standalone@shortmonths#1% remove outer group
+ \@locale@parse@numericblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@standalone@shortmonths}
+% \begin{macrocode}
+\def\@locale@parse@standalone@shortmonths#1#2#3#4#5#6#7#8#9{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.1}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.2}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.3}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.4}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.5}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.6}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.7}{#7}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.8}{#8}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.9}{#9}%
+% \end{macrocode}
+%Grab the remaining three arguments:
+% \begin{macrocode}
+ \@locale@parse@endstandalone@shortmonths
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@endstandalone@shortmonths}
+% \begin{macrocode}
+\def\@locale@parse@endstandalone@shortmonths#1#2#3{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.10}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.11}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{standalone.shortmonth.12}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@numericblock}
+% \begin{macrocode}
+\def\@locale@parse@numericblock#1{%
+ \@locale@parse@numeric#1% remove outer group
+ \@locale@parse@numericfmtblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@numeric}
+% \begin{macrocode}
+\def\@locale@parse@numeric#1#2#3#4#5#6#7#8#9{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{groupsep}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{decsep}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{exp}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{usesgroup}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{currency}{#5}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{regionalcurrency}{#6}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{currencysym}{#7}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{currencytex}{#8}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{currencysep}{#9}%
+% \end{macrocode}
+% Set currency attributes.
+% \begin{macrocode}
+ \LocaleProvideCurrencyAttribute{#6}{official}{#5}%
+ \LocaleProvideCurrencyAttribute{#6}{sym}{#7}%
+ \LocaleProvideCurrencyAttribute{#6}{tex}{#8}%
+ \LocaleAddToAttributeList{currencies}{official}{#5}%
+ \LocaleAddToAttributeList{currencies}{regional}{#6}%
+% \end{macrocode}
+%If this dialect has an associated region, map the region to the
+%currency code.
+% \begin{macrocode}
+ \ifx\@locale@region\empty
+ \else
+ \LocaleProvideRegionAttribute{\@locale@region}{currency}{#6}%
+ \LocaleXpAddToCurrencyAttributeList{#5}{region}{\@locale@region}%
+ \LocaleIfSameDialectAttributeValues{\@locale@dialect}%
+ {regionalcurrency}{currency}%
+ {}%
+ {%
+ \LocaleXpAddToCurrencyAttributeList{#6}{region}{\@locale@region}%
+ }%
+ \fi
+% \end{macrocode}
+%Grab remaining arguments.
+% \begin{macrocode}
+ \@locale@parse@persym
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@parse@persym}
+% \begin{macrocode}
+\def\@locale@parse@persym#1#2{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{percent}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{permill}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@numericfmtblock}
+% \begin{macrocode}
+\def\@locale@parse@numericfmtblock#1{%
+ \@locale@parse@numericfmt#1% remove outer group
+ \LocaleIfDateTimePatternsSupported
+ {\@locale@parse@timezones}%
+ {\@locale@parse@otherdata}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@numericfmt}
+% \begin{macrocode}
+\def\@locale@parse@numericfmt#1#2#3#4{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{decfmt}{#1}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{intfmt}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{curfmt}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{perfmt}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@timezones}
+% \begin{macrocode}
+\def\@locale@parse@timezones#1{%
+ \@locale@parse@timezonemap#1\relax
+ \@locale@parse@otherdata
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@timezonemap}
+% \begin{macrocode}
+\def\@locale@parse@timezonemap#1{%
+ \ifx\relax#1\relax
+ \let\@locale@next\relax
+ \else
+ \@locale@save@timezonemap#1%
+ \let\@locale@next\@locale@parse@timezonemap
+ \fi
+ \@locale@next
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@save@timezonemap}
+% \begin{macrocode}
+\def\@locale@save@timezonemap#1#2#3#4#5{%
+ \LocaleSetDialectAttribute{\@locale@dialect}{timezone.#1.short}{#2}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{timezone.#1.long}{#3}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{timezone.#1.shortdst}{#4}%
+ \LocaleSetDialectAttribute{\@locale@dialect}{timezone.#1.longdst}{#5}%
+ \LocaleAddToAttributeList{timezone}{id}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@otherdata}
+% \begin{macrocode}
+\def\@locale@endparse@result{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@parse@otherdata}
+% \begin{macrocode}
+\def\@locale@parse@otherdata#1{%
+ \ifx\@locale@endparse@result#1\relax
+% \end{macrocode}
+%Finished.
+% \begin{macrocode}
+ \let\@locale@next\relax
+ \else
+ \def\@locale@next{\@locale@parse@otherdata@localeblock#1}%
+ \fi
+ \@locale@next
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@parse@otherdata@localeblock}
+% \begin{macrocode}
+\def\@locale@parse@otherdata@localeblock#1{%
+ \@locale@parse@otherdatalocaleblock#1% remove outer group
+ \@locale@parse@dateblock
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\ifx\@locale@result\empty
+% \end{macrocode}
+%Set defaults.
+% \begin{macrocode}
+ \ifTeXOSQueryDryRun
+ \@locale@warn{Dry run mode on. No data provided by texosquery. Check
+ TeX's shell escape status}%
+ \else
+ \@locale@warn{No data provided by texosquery. Check
+ TeX's shell escape status and texosquery's setup}%
+ \fi
+ \def\LocaleOSname{}%
+ \def\LocaleOSversion{}%
+ \def\LocaleOSarch{}%
+ \def\LocaleNowStamp{}%
+ \def\LocaleOStag{}%
+ \def\LocaleOScodeset{}%
+ \def\LocaleFileMod{}%
+ \def\LocaleMain{}%
+ \def\LocaleMainDialect{}%
+ \def\LocaleMainRegion{}%
+ \def\LocaleDateTimeInfo{}%
+\else
+ \expandafter\@locale@parse@result\@locale@result\@locale@endparse@result
+\fi
+% \end{macrocode}
+%
+%\subsection{Locale User Commands}
+%
+%\begin{macro}{\LocaleLanguageTag}
+%\begin{definition}
+%\cs{LocaleLanguageTag}\marg{dialect}
+%\end{definition}
+%Get the language tag of the given dialect.
+% \begin{macrocode}
+\def\LocaleLanguageTag#1{%
+ \LocaleGetDialectAttribute{#1}{langtag}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\LocaleLanguageName}
+%\begin{definition}
+%\cs{LocaleLanguageName}\marg{dialect}
+%\end{definition}
+%Get the language name of the given dialect according to the OS
+%default language.
+% \begin{macrocode}
+\def\LocaleLanguageName#1{%
+ \LocaleGetDialectAttribute{#1}{langname}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\LocaleLanguageNativeName}
+%\begin{definition}
+%\cs{LocaleLanguageNativeName}\marg{dialect}
+%\end{definition}
+%Get the language name of the given dialect according to that
+%dialect.
+% \begin{macrocode}
+\def\LocaleLanguageNativeName#1{%
+ \LocaleGetDialectAttribute{#1}{nativelangname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleRegionName}
+%\begin{definition}
+%\cs{LocaleRegionName}\marg{dialect}
+%\end{definition}
+%Get the region name of the given dialect according to the OS
+%default language.
+% \begin{macrocode}
+\def\LocaleRegionName#1{%
+ \LocaleGetDialectAttribute{#1}{regionname}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\LocaleRegionNativeName}
+%\begin{definition}
+%\cs{LocaleRegionNativeName}\marg{dialect}
+%\end{definition}
+%Get the region name of the given dialect according to that
+%dialect.
+% \begin{macrocode}
+\def\LocaleRegionNativeName#1{%
+ \LocaleGetDialectAttribute{#1}{nativeregionname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleVariantName}
+%\begin{definition}
+%\cs{LocaleVariantName}\marg{dialect}
+%\end{definition}
+%Get the variant name of the given dialect according to the OS
+%default language.
+% \begin{macrocode}
+\def\LocaleVariantName#1{%
+ \LocaleGetDialectAttribute{#1}{variantname}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\LocaleVariantNativeName}
+%\begin{definition}
+%\cs{LocaleVariantNativeName}\marg{dialect}
+%\end{definition}
+%Get the variant name of the given dialect according to that
+%dialect.
+% \begin{macrocode}
+\def\LocaleVariantNativeName#1{%
+ \LocaleGetDialectAttribute{#1}{nativevariantname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleFullDate}
+%\begin{definition}
+%\cs{LocaleFullDate}\marg{dialect}
+%\end{definition}
+%Get the full date for the given dialect.
+% \begin{macrocode}
+\def\LocaleFullDate#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{fulldate}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLongDate}
+%\begin{definition}
+%\cs{LocaleLongDate}\marg{dialect}
+%\end{definition}
+%Get the long date for the given dialect.
+% \begin{macrocode}
+\def\LocaleLongDate#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{longdate}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleMediumDate}
+%\begin{definition}
+%\cs{LocaleMediumDate}\marg{dialect}
+%\end{definition}
+%Get the medium date for the given dialect.
+% \begin{macrocode}
+\def\LocaleMediumDate#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{meddate}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleShortDate}
+%\begin{definition}
+%\cs{LocaleShortDate}\marg{dialect}
+%\end{definition}
+%Get the short date for the given dialect.
+% \begin{macrocode}
+\def\LocaleShortDate#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{shortdate}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleFirstDayIndex}
+%\begin{definition}
+%\cs{LocaleFirstDayIndex}\marg{dialect}
+%\end{definition}
+%Get the index for the first day of the week for the given dialect.
+%This starts with 0 for Monday to be compatible with
+%\sty{pgfcalendar} (and \sty{datetime2} which similar does this to
+%be compatible with \sty{pgfcalendar}).
+% \begin{macrocode}
+\def\LocaleFirstDayIndex#1{%
+ \LocaleGetDialectAttributeOrDefValue{#1}{firstday}{-1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmMondayIndex}
+% \begin{macrocode}
+\def\dtmMondayIndex{0}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmTuesdayIndex}
+% \begin{macrocode}
+\def\dtmTuesdayIndex{1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmWednesdayIndex}
+% \begin{macrocode}
+\def\dtmWednesdayIndex{2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmThursdayIndex}
+% \begin{macrocode}
+\def\dtmThursdayIndex{3}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmFridayIndex}
+% \begin{macrocode}
+\def\dtmFridayIndex{4}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmSaturdayIndex}
+% \begin{macrocode}
+\def\dtmSaturdayIndex{5}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dtmSundayIndex}
+% \begin{macrocode}
+\def\dtmSundayIndex{6}
+% \end{macrocode}
+%\end{macro}
+%
+%The ISO-8601 standard has day of week indexing starting with
+%1 for Monday. The \sty{datetime} package has day of week indexing
+%starting with 1 for Sunday, so provide convenient ways to convert
+%if necessary.
+%\begin{macro}{\LocaleDayIndexFromZeroMonToOneSun}
+%Convert from \sty{pgfcalendar}'s Monday=0 indexing to
+%\sty{datetime}'s Sunday=1 indexing.
+% \begin{macrocode}
+\def\LocaleDayIndexFromZeroMonToOneSun#1{%
+ \ifcase#1
+ 2% Monday 0 -> 2
+ \or
+ 3% Tuesday 1 -> 3
+ \or
+ 4% Wednesday 2 -> 4
+ \or
+ 5% Thursday 3 -> 5
+ \or
+ 6% Friday 4 -> 6
+ \or
+ 7% Saturday 5 -> 7
+ \or
+ 1% Sunday 6 -> 1
+ \else
+ -1% invalid
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleDayIndexFromZeroMonToOneMon}
+%Convert from \sty{pgfcalendar}'s Monday=0 indexing to
+%ISO-8601's Monday=1 indexing.
+% \begin{macrocode}
+\def\LocaleDayIndexFromZeroMonToOneMon#1{%
+ \ifcase#1
+ 1% Monday 0 -> 1
+ \or
+ 2% Tuesday 1 -> 2
+ \or
+ 3% Wednesday 2 -> 3
+ \or
+ 4% Thursday 3 -> 4
+ \or
+ 5% Friday 4 -> 5
+ \or
+ 6% Saturday 5 -> 6
+ \or
+ 7% Sunday 6 -> 7
+ \else
+ -1% invalid
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleDayIndexFromOneSunToZeroMon}
+%Convert from \sty{datetime}'s Sunday=1 indexing to \sty{pgfcalendar}'s
+%Monday=0 indexing.
+% \begin{macrocode}
+\def\LocaleDayIndexFromOneSunToZeroMon#1{%
+ \ifcase#1
+ % no 0
+ \or
+ 6% Sunday 1 -> 6
+ \or
+ 0% Monday 2 -> 0
+ \or
+ 1% Tuesday 3 -> 1
+ \or
+ 2% Wednesday 4 -> 2
+ \or
+ 3% Thursday 5 -> 3
+ \or
+ 4% Friday 6 -> 4
+ \or
+ 5% Saturday 7 -> 5
+ \else
+ -1% invalid
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleDayIndexFromOneMonToZeroMon}
+%Convert from ISO-8601's Monday=1 indexing to \sty{pgfcalendar}'s
+%Monday=0 indexing.
+% \begin{macrocode}
+\def\LocaleDayIndexFromOneMonToZeroMon#1{%
+ \ifcase#1
+ % no 0
+ \or
+ 0% Monday 1 -> 0
+ \or
+ 1% Tuesday 2 -> 1
+ \or
+ 2% Wednesday 3 -> 2
+ \or
+ 3% Thursday 4 -> 3
+ \or
+ 4% Friday 5 -> 4
+ \or
+ 5% Saturday 6 -> 5
+ \or
+ 6% Sunday 7 -> 6
+ \else
+ -1% invalid
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleDayIndexFromRegion}
+%Convert from the region's day of the week (starting from 1)
+%to \sty{pgfcalendar}'s 0=Monday indexing. The first argument is the
+%dialect label.
+% \begin{macrocode}
+\def\LocaleDayIndexFromRegion#1#2{%
+% \end{macrocode}
+%Get the region's first day of the week.
+% \begin{macrocode}
+ \ifcase\LocaleFirstDayIndex{#1}
+% \end{macrocode}
+%Monday is the first day of the week. That is, the region's using 1=Monday
+%indexing.
+% \begin{macrocode}
+ \LocaleDayIndexFromOneMonToZeroMon{#2}%
+ \or
+% \end{macrocode}
+%Tuesday is the first day of the week. That is, the region's using
+%1=Tuesday indexing. (These mid-week cases are unlikely, but add
+%them for completeness.)
+% \begin{macrocode}
+ \ifnum#2=7 % Monday
+ 0%
+ \else
+ #2%
+ \fi
+ \or
+% \end{macrocode}
+%Wednesday is the first day of the week. That is, the region's using
+%1=Wednesday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ % no 0
+ \or
+ 2% Wednesday 1 -> 2
+ \or
+ 3% Thursday 2 -> 3
+ \or
+ 4% Friday 3 -> 4
+ \or
+ 5% Saturday 4 -> 5
+ \or
+ 6% Sunday 5 -> 6
+ \or
+ 0% Monday 6 -> 0
+ \or
+ 1% Tuesday 7 -> 1
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Thursday is the first day of the week. That is, the region's using
+%1=Thursday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ % no 0
+ \or
+ 3% Thursday 1 -> 3
+ \or
+ 4% Friday 2 -> 4
+ \or
+ 5% Saturday 3 -> 5
+ \or
+ 6% Sunday 4 -> 6
+ \or
+ 0% Monday 5 -> 0
+ \or
+ 1% Tuesday 6 -> 1
+ \or
+ 2% Wednesday 7 -> 2
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Friday is the first day of the week. That is, the region's using
+%1=Friday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ % no 0
+ \or
+ 4% Friday 1 -> 4
+ \or
+ 5% Saturday 2 -> 5
+ \or
+ 6% Sunday 3 -> 6
+ \or
+ 0% Monday 4 -> 0
+ \or
+ 1% Tuesday 5 -> 1
+ \or
+ 2% Wednesday 6 -> 2
+ \or
+ 3% Thursday 7 -> 3
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Saturday is the first day of the week. That is, the region's using
+%1=Saturday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ % no 0
+ \or
+ 5% Saturday 1 -> 5
+ \or
+ 6% Sunday 2 -> 6
+ \or
+ 0% Monday 3 -> 0
+ \or
+ 1% Tuesday 4 -> 1
+ \or
+ 2% Wednesday 5 -> 2
+ \or
+ 3% Thursday 6 -> 3
+ \or
+ 4% Friday 7 -> 4
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Sunday is the first day of the week. That is, the region's using
+%1=Sunday indexing.
+% \begin{macrocode}
+ \LocaleDayIndexFromOneSunToZeroMon{#2}%
+ \else
+ #2%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleDayIndexToRegion}
+%Convert from \sty{pgfcalendar}'s 0=Monday indexing to the region's
+%first day of the week (starting from 1). The first argument is the
+%dialect label.
+% \begin{macrocode}
+\def\LocaleDayIndexToRegion#1#2{%
+% \end{macrocode}
+%Get the region's first day of the week.
+% \begin{macrocode}
+ \ifcase\LocaleFirstDayIndex{#1}
+% \end{macrocode}
+%Monday is the first day of the week. That is, the region's using 1=Monday
+%indexing.
+% \begin{macrocode}
+ \LocaleDayIndexFromZeroMonToOneMon{#2}%
+ \or
+% \end{macrocode}
+%Tuesday is the first day of the week. That is, the region's using
+%1=Tuesday indexing. (These mid-week cases are unlikely, but add
+%them for completeness.)
+% \begin{macrocode}
+ \ifnum#2=0 % Monday
+ 7%
+ \else
+ #2%
+ \fi
+ \or
+% \end{macrocode}
+%Wednesday is the first day of the week. That is, the region's using
+%1=Wednesday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ 6% Monday 0 -> 6
+ \or
+ 7% Tuesday 1 -> 7
+ \or
+ 1% Wednesday 2 -> 1
+ \or
+ 2% Thursday 3 -> 2
+ \or
+ 3% Friday 4 -> 3
+ \or
+ 4% Saturday 5 -> 4
+ \or
+ 5% Sunday 6 -> 5
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Thursday is the first day of the week. That is, the region's using
+%1=Thursday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ 5% Monday 0 -> 5
+ \or
+ 6% Tuesday 1 -> 6
+ \or
+ 7% Wednesday 2 -> 7
+ \or
+ 1% Thursday 3 -> 1
+ \or
+ 2% Friday 4 -> 2
+ \or
+ 3% Saturday 5 -> 3
+ \or
+ 4% Sunday 6 -> 4
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Friday is the first day of the week. That is, the region's using
+%1=Friday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ 4% Monday 0 -> 4
+ \or
+ 5% Tuesday 1 -> 5
+ \or
+ 6% Wednesday 2 -> 6
+ \or
+ 7% Thursday 3 -> 7
+ \or
+ 1% Friday 4 -> 1
+ \or
+ 2% Saturday 5 -> 2
+ \or
+ 3% Sunday 6 -> 3
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Saturday is the first day of the week. That is, the region's using
+%1=Saturday indexing.
+% \begin{macrocode}
+ \ifcase#1
+ 3% Monday 0 -> 3
+ \or
+ 4% Tuesday 1 -> 4
+ \or
+ 5% Wednesday 2 -> 5
+ \or
+ 6% Thursday 3 -> 6
+ \or
+ 7% Friday 4 -> 7
+ \or
+ 1% Saturday 5 -> 1
+ \or
+ 2% Sunday 6 -> 2
+ \else
+ -1% invalid
+ \fi
+ \or
+% \end{macrocode}
+%Sunday is the first day of the week. That is, the region's using
+%1=Sunday indexing.
+% \begin{macrocode}
+ \LocaleDayIndexFromZeroMonToOneSun{#2}%
+ \else
+ #2%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleFullTime}
+%\begin{definition}
+%\cs{LocaleFullTime}\marg{dialect}
+%\end{definition}
+%Get the full time for the given dialect.
+% \begin{macrocode}
+\def\LocaleFullTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{fulltime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLongTime}
+%\begin{definition}
+%\cs{LocaleLongTime}\marg{dialect}
+%\end{definition}
+%Get the long time for the given dialect.
+% \begin{macrocode}
+\def\LocaleLongTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{longtime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleMediumTime}
+%\begin{definition}
+%\cs{LocaleMediumTime}\marg{dialect}
+%\end{definition}
+%Get the medium time for the given dialect.
+% \begin{macrocode}
+\def\LocaleMediumTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{medtime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleShortTime}
+%\begin{definition}
+%\cs{LocaleShortTime}\marg{dialect}
+%\end{definition}
+%Get the short time for the given dialect.
+% \begin{macrocode}
+\def\LocaleShortTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{shorttime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleFullDateTime}
+%\begin{definition}
+%\cs{LocaleFullDateTime}\marg{dialect}
+%\end{definition}
+%Get the full date and time for the given dialect.
+% \begin{macrocode}
+\def\LocaleFullDateTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{fulldatetime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleLongDateTime}
+%\begin{definition}
+%\cs{LocaleLongDateTime}\marg{dialect}
+%\end{definition}
+%Get the long date and time for the given dialect.
+% \begin{macrocode}
+\def\LocaleLongDateTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{longdatetime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleMediumDateTime}
+%\begin{definition}
+%\cs{LocaleMediumDateTime}\marg{dialect}
+%\end{definition}
+%Get the medium date and time for the given dialect.
+% \begin{macrocode}
+\def\LocaleMediumDateTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{meddatetime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleShortDateTime}
+%\begin{definition}
+%\cs{LocaleShortDateTime}\marg{dialect}
+%\end{definition}
+%Get the short date and time for the given dialect.
+% \begin{macrocode}
+\def\LocaleShortDateTime#1{%
+ \localedatetimefmt{\LocaleGetDialectAttribute{#1}{shortdatetime}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleDayName}
+%\begin{definition}
+%\cs{LocaleDayName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the day of week name identified by the index \meta{n} (0 for
+%Monday, 1 for Tuesday, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleDayName#1#2{%
+ \LocaleGetDialectAttribute{#1}{day.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleShortDayName}
+%\begin{definition}
+%\cs{LocaleShortDayName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the abbreviated day of week name identified by the index \meta{n} (0 for
+%Monday, 1 for Tuesday, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleShortDayName#1#2{%
+ \LocaleGetDialectAttribute{#1}{shortday.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleMonthName}
+%\begin{definition}
+%\cs{LocaleMonthName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the month name identified by the index \meta{n} (1 for
+%January, 2 for February, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleMonthName#1#2{%
+ \LocaleGetDialectAttribute{#1}{month.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleShortMonthName}
+%\begin{definition}
+%\cs{LocaleShortMonthName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the month week name identified by the index \meta{n} (1 for
+%January, 2 for February, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleShortMonthName#1#2{%
+ \LocaleGetDialectAttribute{#1}{shortmonth.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Some languages have a different form for month or week day names
+%used in a standalone context, such as in a column header. These are
+%provided with the \cs{LocaleStandalone\ldots} commands defined
+%below. For most languages they will be the same as the above.
+%
+%\begin{macro}{\LocaleStandaloneDayName}
+%\begin{definition}
+%\cs{LocaleStandaloneDayName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the day of week name identified by the index \meta{n} (0 for
+%Monday, 1 for Tuesday, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleStandaloneDayName#1#2{%
+ \LocaleGetDialectAttribute{#1}{standalone.day.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleStandaloneShortDayName}
+%\begin{definition}
+%\cs{LocaleStandaloneShortDayName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the abbreviated day of week name identified by the index \meta{n} (0 for
+%Monday, 1 for Tuesday, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleStandaloneShortDayName#1#2{%
+ \LocaleGetDialectAttribute{#1}{standalone.shortday.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleStandaloneMonthName}
+%\begin{definition}
+%\cs{LocaleStandaloneMonthName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the month week name identified by the index \meta{n} (1 for
+%January, 2 for February, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleStandaloneMonthName#1#2{%
+ \LocaleGetDialectAttribute{#1}{standalone.month.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleStandaloneShortMonthName}
+%\begin{definition}
+%\cs{LocaleStandaloneShortMonthName}\marg{dialect}\marg{n}
+%\end{definition}
+%Gets the month week name identified by the index \meta{n} (1 for
+%January, 2 for February, etc) in the given dialect.
+% \begin{macrocode}
+\def\LocaleStandaloneShortMonthName#1#2{%
+ \LocaleGetDialectAttribute{#1}{standalone.shortmonth.\number#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleNumericGroupSep}
+%\begin{definition}
+%\cs{LocaleNumericGroupSep}\marg{dialect}
+%\end{definition}
+%Gets the numeric group separator for the given dialect.
+% \begin{macrocode}
+\def\LocaleNumericGroupSep#1{%
+ \LocaleGetDialectAttribute{#1}{groupsep}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleNumericDecimalSep}
+%\begin{definition}
+%\cs{LocaleNumericDecimalSep}\marg{dialect}
+%\end{definition}
+%Gets the numeric decimal separator for the given dialect.
+% \begin{macrocode}
+\def\LocaleNumericDecimalSep#1{%
+ \LocaleGetDialectAttribute{#1}{decsep}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleNumericMonetarySep}
+%\begin{definition}
+%\cs{LocaleNumericMonetarySep}\marg{dialect}
+%\end{definition}
+%Gets the numeric monetary separator for the given dialect.
+% \begin{macrocode}
+\def\LocaleNumericMonetarySep#1{%
+ \LocaleGetDialectAttribute{#1}{currencysep}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleNumericExponent}
+%\begin{definition}
+%\cs{LocaleNumericExponent}\marg{dialect}
+%\end{definition}
+%Gets the exponent symbol for the given dialect.
+% \begin{macrocode}
+\def\LocaleNumericExponent#1{%
+ \LocaleGetDialectAttribute{#1}{exp}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleCurrencyLabel}
+%\begin{definition}
+%\cs{LocaleCurrencyLabel}\marg{dialect}
+%\end{definition}
+%Gets the currency label for the given dialect.
+% \begin{macrocode}
+\def\LocaleCurrencyLabel#1{%
+ \LocaleIfDialectAttributeEqCs{#1}{currency}{\@locale@unknown@currency}%
+ {%
+% \end{macrocode}
+%Unknown currency symbol.
+% \begin{macrocode}
+ \ifx\LocaleMainRegion\empty
+ \@locale@os@currencycode
+ \else
+ \LocaleGetDialectAttributeOrDefValue{\LocaleMainDialect}{currency}%
+ {\@locale@os@currencycode}%
+ \fi
+ }%
+ {\LocaleGetDialectAttribute{#1}{currency}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleCurrencyRegionalLabel}
+%\begin{definition}
+%\cs{LocaleCurrencyRegionalLabel}\marg{dialect}
+%\end{definition}
+%Gets the regional currency label for the given dialect.
+% \begin{macrocode}
+\def\LocaleCurrencyRegionalLabel#1{%
+ \LocaleIfDialectAttributeEqCs{#1}{regionalcurrency}%
+ {\@locale@unknown@currency}%
+ {%
+% \end{macrocode}
+%Unknown currency symbol.
+% \begin{macrocode}
+ \ifx\LocaleMainRegion\empty
+ \@locale@os@regionalcurrencycode
+ \else
+ \LocaleGetDialectAttributeOrDefValue{\LocaleMainDialect}{regionalcurrency}%
+ {\@locale@os@regionalcurrencycode}%
+ \fi
+ }%
+ {\LocaleGetDialectAttribute{#1}{regionalcurrency}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleCurrencySymbol}
+%\begin{definition}
+%\cs{LocaleCurrencySymbol}\marg{dialect}
+%\end{definition}
+%Gets the currency symbol for the given dialect. (May have non-ASCII
+%characters.)
+% \begin{macrocode}
+\def\LocaleCurrencySymbol#1{%
+ \LocaleIfDialectAttributeEqCs{#1}{currency}{\@locale@unknown@currency}%
+ {%
+% \end{macrocode}
+%Unknown currency code. Does the main locale have a region?
+% \begin{macrocode}
+ \ifx\LocaleMainRegion\empty
+% \end{macrocode}
+%No main region, try the default OS currency.
+% \begin{macrocode}
+ \ifx\@locale@os@currencysym\empty
+ \LocaleGetDialectAttribute{#1}{currencysym}%
+ \else
+ \@locale@os@currencysym
+ \fi
+ \else
+% \end{macrocode}
+%Try the main dialect attribute.
+% \begin{macrocode}
+ \LocaleGetDialectAttributeOrDefValue{\LocaleMainDialect}{currencysym}%
+ {\LocaleGetDialectAttribute{#1}{currencysym}}%
+ \fi
+ }%
+ {%
+ \LocaleIfSameDialectAttributeValues{#1}%
+ {currency}{currencysym}%
+ {%
+ \LocaleGetCurrencyAttributeOrDefValue
+ {\LocaleGetDialectAttribute{#1}{currency}}{sym}%
+ {\LocaleGetDialectAttribute{#1}{currencysym}}%
+ }%
+ {%
+ \LocaleGetDialectAttribute{#1}{currencysym}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleCurrencyTeXSymbol}
+%\begin{definition}
+%\cs{LocaleCurrencyTeXSymbol}\marg{dialect}
+%\end{definition}
+%Gets the currency symbol for the given dialect. (May include
+%\sty{texosquery} currency control symbols.)
+% \begin{macrocode}
+\def\LocaleCurrencyTeXSymbol#1{%
+ \LocaleIfDialectAttributeEqCs{#1}{currency}{\@locale@unknown@currency}%
+ {%
+% \end{macrocode}
+%Unknown currency code. Does the main locale have a region?
+% \begin{macrocode}
+ \ifx\LocaleMainRegion\empty
+ \ifx\@locale@os@currencytex\empty
+ \LocaleGetDialectAttribute{#1}{currencytex}%
+ \else
+ \@locale@os@currencytex
+ \fi
+ \fi
+ }%
+ {%
+ \LocaleIfSameDialectAttributeValues{#1}%
+ {currency}{currencytex}%
+ {%
+ \LocaleGetCurrencyAttributeOrDefValue
+ {\LocaleGetDialectAttribute{#1}{currency}}{tex}%
+ {\LocaleGetDialectAttribute{#1}{currencytex}}%
+ }%
+ {%
+ \LocaleGetDialectAttribute{#1}{currencytex}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleNumericPercent}
+%\begin{definition}
+%\cs{LocaleNumericPercent}\marg{dialect}
+%\end{definition}
+%Gets the percent symbol for this dialect.
+% \begin{macrocode}
+\def\LocaleNumericPercent#1{%
+ \LocaleGetDialectAttribute{#1}{percent}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleNumericPermill}
+%\begin{definition}
+%\cs{LocaleNumericPermill}\marg{dialect}
+%\end{definition}
+%Gets the permill symbol for this dialect.
+% \begin{macrocode}
+\def\LocaleNumericPermill#1{%
+ \LocaleGetDialectAttribute{#1}{permill}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Patterns}
+%
+%\begin{macro}{\LocaleApplyDateTimePattern}
+%\begin{definition}
+%\cs{LocaleApplyDateTimePattern}\marg{dialect}\marg{attribute}\marg{date-time data}
+%\end{definition}
+% \begin{macrocode}
+\def\LocaleApplyDateTimePattern#1#2#3{%
+ \LocaleIfHasDialectNonEmptyAttribute{#1}{#2}%
+ {%
+% \end{macrocode}
+%The data might be provided with the control sequence
+%\cs{LocaleDateTimeInfo}, which may be empty and will need expanding.
+% \begin{macrocode}
+ \ifx\empty#3\empty
+ \@locale@warn{No date-time data for pattern
+ (attribute `#2', dialect `#1')}%
+ \else
+ \localedatetimefmt
+ {\expandafter\texosqueryfmtdatetime
+ \csname locale@dialect@#2@#1\expandafter\endcsname#3}%
+ \fi
+ }%
+ {%
+ \@locale@warn{No date-time pattern attribute `#2' for dialect `#1'}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%If the date-time patterns are required, the name commands such as
+%\cs{texosqueryfmtpatMMM} need defining
+% \begin{macrocode}
+\LocaleIfDateTimePatternsSupported
+{%
+% \end{macrocode}
+%\begin{macro}{\texosqueryfmtpatMMM}
+%Short month name.
+% \begin{macrocode}
+ \def\texosqueryfmtpatMMM#1{%
+ \CurrentLocaleShortMonthName{#1}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryfmtpatMMMM}
+%Full month name.
+% \begin{macrocode}
+ \def\texosqueryfmtpatMMMM#1{%
+ \CurrentLocaleMonthName{#1}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryfmtpatLLL}
+%Short standalone month name.
+% \begin{macrocode}
+ \def\texosqueryfmtpatLLL#1{%
+ \CurrentLocaleStandaloneShortMonthName{#1}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryfmtpatLLLL}
+%Full standalone month name.
+% \begin{macrocode}
+ \def\texosqueryfmtpatLLLL#1{%
+ \CurrentLocaleStandaloneMonthName{#1}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryfmtpatEEE}
+%Short day of week name.
+% \begin{macrocode}
+ \def\texosqueryfmtpatEEE#1{%
+ \CurrentLocaleShortDayName{\LocaleDayIndexFromOneMonToZeroMon{#1}}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryfmtpatEEEE}
+%Full day of week name.
+% \begin{macrocode}
+ \def\texosqueryfmtpatEEEE#1{%
+ \CurrentLocaleDayName{\LocaleDayIndexFromOneMonToZeroMon{#1}}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerytimezonefmt}
+%Allow the time zone name to be wrapped in a formatting command.
+% \begin{macrocode}
+ \def\texosquerytimezonefmt#1{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryshorttimezone}
+% \begin{macrocode}
+ \def\texosqueryshorttimezone#1{%
+ \texosquerytimezonefmt
+ {\LocaleGetDialectAttribute{\CurrentTrackedDialect}{timezone.#1.short}}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosqueryshortdstzone}
+% \begin{macrocode}
+ \def\texosqueryshortdstzone#1{%
+ \texosquerytimezonefmt
+ {\LocaleGetDialectAttribute{\CurrentTrackedDialect}{timezone.#1.shortdst}}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerylongtimezone}
+% \begin{macrocode}
+ \def\texosquerylongtimezone#1{%
+ \texosquerytimezonefmt
+ {\LocaleGetDialectAttribute{\CurrentTrackedDialect}{timezone.#1.long}}%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerylongdstzone}
+% \begin{macrocode}
+ \def\texosquerylongdstzone#1{%
+ \texosquerytimezonefmt
+ {\LocaleGetDialectAttribute{\CurrentTrackedDialect}{timezone.#1.longdst}}%
+ }
+% \end{macrocode}
+%\end{macro}
+%End of first argument of \cs{LocaleIfDateTimePatternsSupported}.
+%(Do nothing if date-time patterns not required.)
+% \begin{macrocode}
+}
+{}
+% \end{macrocode}
+%
+%Set up the \sty{texosquery} numbering commands to use the current
+%locale symbols.
+%\begin{macro}{\texosquerypatfmtgroupsep}
+% \begin{macrocode}
+\def\texosquerypatfmtgroupsep{\CurrentLocaleNumericGroupSep}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerypatfmtdecsep}
+% \begin{macrocode}
+\def\texosquerypatfmtdecsep{\CurrentLocaleDecimalSep}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerypatfmtcurdecsep}
+% \begin{macrocode}
+\def\texosquerypatfmtcurdecsep{\CurrentLocaleMonetarySep}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerypatfmtexp}
+% \begin{macrocode}
+\def\texosquerypatfmtexp{\CurrentLocaleExponent}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerypatfmtcurrencysign}
+% \begin{macrocode}
+\def\texosquerypatfmtcurrencysign{\CurrentLocaleCurrency}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerypatfmtpercentsign}
+% \begin{macrocode}
+\def\texosquerypatfmtpercentsign{\CurrentLocalePercent}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\texosquerypatfmtpermillsign}
+% \begin{macrocode}
+\def\texosquerypatfmtpermillsign{\CurrentLocalePermill}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Conditionals}
+%\begin{macro}{\LocaleIfNumericUsesGroup}
+%\begin{definition}
+%\cs{LocaleIfNumericUsesGroup}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%Determines if the locale uses numerical group separator. The
+%\texttt{usesgroup} attribute will be 1 for true and 0 for false, so
+%we need a numerical comparison.
+% \begin{macrocode}
+\def\LocaleIfNumericUsesGroup#1{%
+ \LocaleIfDialectAttributeEqNum{#1}{usesgroup}{1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasLanguageName}
+%\begin{definition}
+%\cs{LocaleIfHasLanguageName}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%Determines if the given dialect has a language name.
+% \begin{macrocode}
+\def\LocaleIfHasLanguageName#1{%
+ \LocaleIfHasDialectNonEmptyAttribute{#1}{langname}%
+}
+% \end{macrocode}
+%\end{macro}
+%No need for a separate check for the native version. If it has
+%one, then it will have the other.
+%
+%\begin{macro}{\LocaleIfHasRegionName}
+%\begin{definition}
+%\cs{LocaleIfHasRegionName}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%Determines if the given dialect has a region name.
+% \begin{macrocode}
+\def\LocaleIfHasRegionName#1{%
+ \LocaleIfHasDialectNonEmptyAttribute{#1}{regionname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LocaleIfHasVariantName}
+%\begin{definition}
+%\cs{LocaleIfHasVariantName}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%Determines if the given dialect has a variant name.
+% \begin{macrocode}
+\def\LocaleIfHasVariantName#1{%
+ \LocaleIfHasDialectNonEmptyAttribute{#1}{variantname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Post-Parsing}
+%If this hook has been defined, use it.
+% \begin{macrocode}
+\ifx\@locale@postparse@hook\undefined
+\else
+ \@locale@postparse@hook
+\fi
+% \end{macrocode}
+%
+%\subsection{Initialising Current Locale Commands}
+%These commands are all initialised to do nothing (except for
+%indexes which are initialised to \texttt{-1}), in the event that
+%the dry run mode is on.
+% \begin{macrocode}
+\def\CurrentLocaleLanguageName{}%
+\def\CurrentLocaleLanguageNativeName{}%
+\def\CurrentLocaleRegionName{}%
+\def\CurrentLocaleRegionNativeName{}%
+\def\CurrentLocaleVariantName{}%
+\def\CurrentLocaleVariantNativeName{}%
+\def\CurrentLocaleFirstDayIndex{-1}%
+\def\CurrentLocaleDayIndexFromRegion{-1}%
+\def\CurrentLocaleDayName{}%
+\def\CurrentLocaleShortDayName{}%
+\def\CurrentLocaleStandaloneDayName{}%
+\def\CurrentLocaleStandaloneShortDayName{}%
+\def\CurrentLocaleMonthName{}%
+\def\CurrentLocaleShortMonthName{}%
+\def\CurrentLocaleStandaloneMonthName{}%
+\def\CurrentLocaleStandaloneShortMonthName{}%
+\def\CurrentLocaleFullDate{}%
+\def\CurrentLocaleLongDate{}%
+\def\CurrentLocaleMediumDate{}%
+\def\CurrentLocaleShortDate{}%
+\def\CurrentLocaleFullTime{}%
+\def\CurrentLocaleLongTime{}%
+\def\CurrentLocaleMediumTime{}%
+\def\CurrentLocaleShortTime{}%
+\def\CurrentLocaleFullDateTime{}%
+\def\CurrentLocaleLongDateTime{}%
+\def\CurrentLocaleMediumDateTime{}%
+\def\CurrentLocaleShortDateTime{}%
+\def\CurrentLocaleDate{}%
+\def\CurrentLocaleTime{}%
+\def\CurrentLocaleCurrency{}%
+\def\CurrentLocaleNumericGroupSep{}%
+\def\CurrentLocaleIfNumericUsesGroup{}%
+\def\CurrentLocaleDecimalSep{}%
+\def\CurrentLocaleMonetarySep{}%
+\def\CurrentLocaleExponent{}%
+\def\CurrentLocalePercent{}%
+\def\CurrentLocalePermill{}%
+\def\CurrentLocaleIntegerPattern{}%
+\def\CurrentLocaleDecimalPattern{}%
+\def\CurrentLocaleCurrencyPattern{}%
+\def\CurrentLocalePercentPattern{}%
+\def\CurrentLocaleApplyDateTimePattern{}%
+\def\CurrentTrackedDialect{}%
+% \end{macrocode}
+%
+%\subsection{Switching Locale}
+%\begin{macro}{\@locale@select}
+%Used when a language is changed. The argument is the dialect label.
+% \begin{macrocode}
+\def\@locale@select#1{%
+ \SetCurrentTrackedDialect{#1}%
+ \def\CurrentLocaleLanguageName{\LocaleLanguageName{#1}}%
+ \def\CurrentLocaleLanguageNativeName{\LocaleLanguageNativeName{#1}}%
+ \def\CurrentLocaleRegionName{\LocaleRegionName{#1}}%
+ \def\CurrentLocaleRegionNativeName{\LocaleRegionNativeName{#1}}%
+ \def\CurrentLocaleVariantName{\LocaleVariantName{#1}}%
+ \def\CurrentLocaleVariantNativeName{\LocaleVariantNativeName{#1}}%
+ \def\CurrentLocaleFirstDayIndex{\LocaleFirstDayIndex{#1}}%
+ \def\CurrentLocaleDayIndexFromRegion{\LocaleDayIndexFromRegion{#1}}%
+ \def\CurrentLocaleDayName{\LocaleDayName{#1}}%
+ \def\CurrentLocaleShortDayName{\LocaleShortDayName{#1}}%
+ \def\CurrentLocaleStandaloneDayName{%
+ \LocaleStandaloneDayName{#1}}%
+ \def\CurrentLocaleStandaloneShortDayName{%
+ \LocaleStandaloneShortDayName{#1}}%
+ \def\CurrentLocaleMonthName{\LocaleMonthName{#1}}%
+ \def\CurrentLocaleShortMonthName{\LocaleShortMonthName{#1}}%
+ \def\CurrentLocaleStandaloneMonthName{%
+ \LocaleStandaloneMonthName{#1}}%
+ \def\CurrentLocaleStandaloneShortMonthName{%
+ \LocaleStandaloneShortMonthName{#1}}%
+ \def\CurrentLocaleFullDate{\LocaleFullDate{#1}}%
+ \def\CurrentLocaleLongDate{\LocaleLongDate{#1}}%
+ \def\CurrentLocaleMediumDate{\LocaleMediumDate{#1}}%
+ \def\CurrentLocaleShortDate{\LocaleShortDate{#1}}%
+ \def\CurrentLocaleFullTime{\LocaleFullTime{#1}}%
+ \def\CurrentLocaleLongTime{\LocaleLongTime{#1}}%
+ \def\CurrentLocaleMediumTime{\LocaleMediumTime{#1}}%
+ \def\CurrentLocaleShortTime{\LocaleShortTime{#1}}%
+ \def\CurrentLocaleFullDateTime{\LocaleFullDateTime{#1}}%
+ \def\CurrentLocaleLongDateTime{\LocaleLongDateTime{#1}}%
+ \def\CurrentLocaleMediumDateTime{\LocaleMediumDateTime{#1}}%
+ \def\CurrentLocaleShortDateTime{\LocaleShortDateTime{#1}}%
+ \def\CurrentLocaleDate{%
+ \localedatechoice
+ {\LocaleFullDate{#1}}%
+ {\LocaleLongDate{#1}}%
+ {\LocaleMediumDate{#1}}%
+ {\LocaleShortDate{#1}}%
+ }%
+ \def\CurrentLocaleTime{%
+ \localetimechoice
+ {\LocaleFullTime{#1}}%
+ {\LocaleLongTime{#1}}%
+ {\LocaleMediumTime{#1}}%
+ {\LocaleShortTime{#1}}%
+ }%
+ \def\CurrentLocaleCurrency{%
+ \localecurrchoice
+ {\LocaleCurrencyLabel{#1}}%
+ {\LocaleCurrencyRegionalLabel{#1}}%
+ {\LocaleCurrencySymbol{#1}}%
+ {\LocaleCurrencyTeXSymbol{#1}}%
+ }%
+ \def\CurrentLocaleNumericGroupSep{%
+ \LocaleNumericGroupSep{#1}%
+ }%
+ \def\CurrentLocaleIfNumericUsesGroup{%
+ \LocaleIfNumericUsesGroup{#1}%
+ }%
+ \def\CurrentLocaleDecimalSep{%
+ \LocaleNumericDecimalSep{#1}%
+ }%
+ \def\CurrentLocaleMonetarySep{%
+ \LocaleNumericMonetarySep{#1}%
+ }%
+ \def\CurrentLocaleExponent{%
+ \LocaleNumericExponent{#1}%
+ }%
+ \def\CurrentLocalePercent{%
+ \LocaleNumericPercent{#1}%
+ }%
+ \def\CurrentLocalePermill{%
+ \LocaleNumericPermill{#1}%
+ }%
+ \def\CurrentLocaleIntegerPattern{%
+ \LocaleGetDialectAttribute{#1}{intfmt}%
+ }%
+ \def\CurrentLocaleDecimalPattern{%
+ \LocaleGetDialectAttribute{#1}{decfmt}%
+ }%
+ \def\CurrentLocaleCurrencyPattern{%
+ \LocaleGetDialectAttribute{#1}{curfmt}%
+ }%
+ \def\CurrentLocalePercentPattern{%
+ \LocaleGetDialectAttribute{#1}{perfmt}%
+ }%
+ \def\CurrentLocaleApplyDateTimePattern{%
+ \LocaleApplyDateTimePattern{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide the choice commands:
+%\begin{macro}{\localedatechoice}
+% \begin{macrocode}
+\ifx\localedatechoice\undefined
+ \def\localedatechoice#1#2#3#4{#2}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localetimechoice}
+% \begin{macrocode}
+\ifx\localetimechoice\undefined
+ \def\localetimechoice#1#2#3#4{#3}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localecurrchoice}
+% \begin{macrocode}
+\ifx\localecurrchoice\undefined
+ \def\localecurrchoice#1#2#3#4{#2}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\CurrentLocaleDateTime}
+%Shortcut for date and time.
+% \begin{macrocode}
+\def\CurrentLocaleDateTime{\CurrentLocaleDate\space\CurrentLocaleTime}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide convenient shortcut commands for formatting numbers.
+%These need a bit of help to split the argument on "."
+%and on "E". First provide a general purpose command.
+%
+%\begin{macro}{\localenumfmt}
+%The first argument is the pattern. The second argument is the
+%value.
+% \begin{macrocode}
+\def\localenumfmt#1#2{%
+ \@locale@decfmt#2\empty.0E0\relax
+ \ifnum\@locale@decfmt@int<0
+ \let\@localenum@fmt\localenumfmtneg
+ \else
+ \ifnum\@locale@decfmt@int=0
+ \ifnum\@locale@decfmt@frac=0
+ \ifnum\@locale@decfmt@exp=0
+ \let\@localenum@fmt\localenumfmtzero
+ \else
+ \let\@localenum@fmt\localenumfmtpos
+ \fi
+ \else
+ \let\@localenum@fmt\localenumfmtpos
+ \fi
+ \else
+ \let\@localenum@fmt\localenumfmtpos
+ \fi
+ \fi
+ \@localenum@fmt
+ {%
+ \texosqueryfmtnumber{#1}%
+ {\@locale@decfmt@int}%
+ {\@locale@decfmt@frac}%
+ {\@locale@decfmt@exp}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localenumfmtpos}
+%Wrapper for positive values.
+% \begin{macrocode}
+\def\localenumfmtpos#1{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localenumfmtneg}
+%Wrapper for negative values.
+% \begin{macrocode}
+\def\localenumfmtneg#1{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localenumfmtzero}
+%Wrapper for zero values.
+% \begin{macrocode}
+\def\localenumfmtzero#1{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localeint}
+% \begin{macrocode}
+\def\localeint#1{%
+ \localenumfmt{\CurrentLocaleIntegerPattern}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\localedec}
+% \begin{macrocode}
+\def\localedec#1{%
+ \localenumfmt{\CurrentLocaleDecimalPattern}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localecur}
+% \begin{macrocode}
+\def\localecur#1{%
+ \localenumfmt{\CurrentLocaleCurrencyPattern}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\localeper}
+% \begin{macrocode}
+\def\localeper#1{%
+ \localenumfmt{\CurrentLocalePercentPattern}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@decfmt}
+% \begin{macrocode}
+\def\@locale@decfmt#1.#2E#3\relax{%
+% \end{macrocode}
+%Allow for mantissa present but missing fractional part.
+% \begin{macrocode}
+ \@locale@decfmt@split#1E\empty\relax
+ \ifx\@locale@decfmt@exp\empty
+ \edef\@locale@decfmt@frac{\@locale@gobbleemptytorelax#2\empty\relax}%
+ \edef\@locale@decfmt@exp{\@locale@gobbleemptytorelax#3\empty\relax}%
+ \else
+ \def\@locale@decfmt@frac{0}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@gobbleemptytorelax}
+%Strip everything between \cs{empty} and \cs{relax}
+% \begin{macrocode}
+\def\@locale@gobbleemptytorelax#1\empty#2\relax{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@decfmt@split}
+%Split on "E". (In case "E" but no "." supplied.)
+% \begin{macrocode}
+\def\@locale@decfmt@split#1E#2\empty#3\relax{%
+ \edef\@locale@decfmt@int{\@locale@gobbleemptytorelax#1\empty\relax}%
+ \edef\@locale@decfmt@exp{\@locale@gobbleemptytorelax#2\empty\relax}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Iterate through all languages and add to caption hook.
+% \begin{macrocode}
+\ForEachTrackedDialect{\locale@this@dialect}{%
+ \SetCurrentTrackedDialect{\locale@this@dialect}%
+ \expandafter\@TrackLangAddToHook\expandafter
+ {\expandafter\@locale@select\expandafter{\locale@this@dialect}}
+ {captions}%
+}
+% \end{macrocode}
+%
+%Provide a command to select a language using the \sty{tracklang}
+%dialect label or the language tag.
+%\begin{macro}{\selectlocale}
+% \begin{macrocode}
+\def\selectlocale#1{%
+ \ifx\selectlanguage\undefined
+ \IfTrackedDialect{#1}%
+ {\@locale@select{#1}}%
+ {%
+ \LocaleIfHasAttribute{#1}{tagtodialect}
+ {%
+ \edef\@locale@dialect{\LocaleGetAttribute{#1}{tagtodialect}}%
+ \expandafter\@locale@select\expandafter{\@locale@dialect}%
+ }%
+ {%
+ \ifTeXOSQueryDryRun
+ \@locale@warn{Unknown locale `#1'}%
+ \else
+ \@locale@err{Unknown locale `#1'}%
+ {The argument to \string\selectlocale\space must be either a
+ tracklang dialect label or a tracked dialect language tag}%
+ \fi
+ }%
+ }%
+ \else
+% \end{macrocode}
+% Need to find the correct label to use in \cs{selectlanguage}
+% \begin{macrocode}
+ \IfTrackedDialect{#1}%
+ {%
+ \@locale@select@dialect{#1}%
+ }%
+ {%
+ \LocaleIfHasAttribute{#1}{tagtodialect}
+ {\@locale@select@dialect{\LocaleGetAttribute{#1}{tagtodialect}}}%
+ {%
+ \ifTeXOSQueryDryRun
+ \@locale@warn{Unknown locale `#1'}%
+ \else
+ \@locale@err{Unknown locale `#1'}%
+ {The argument to \string\selectlocale\space must be either a
+ tracklang dialect label or a tracked dialect language tag}%
+ \fi
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@select@dialect}
+%Select language from \sty{tracklang} dialect label.
+% \begin{macrocode}
+\def\@locale@select@dialect#1{%
+ \IfTrackedDialectHasMapping{#1}%
+ {\edef\@locale@dialect{\GetTrackedDialectToMapping{#1}}}%
+ {\edef\@locale@dialect{#1}}%
+% \end{macrocode}
+% Is there a date hook available? (Match the check used by
+% \cs{selectlanguage}.)
+% \begin{macrocode}
+ \@tracklang@ifundef{date\@locale@dialect}%
+ {%
+% \end{macrocode}
+% Try the root language.
+% \begin{macrocode}
+ \edef\@locale@dialect{\TrackedLanguageFromDialect{#1}}%
+% \end{macrocode}
+% Is there a date hook available?
+% \begin{macrocode}
+ \@tracklang@ifundef{date\@locale@dialect}%
+ {%
+ \@locale@warn{Can't determine correct label for
+ \string\selectlanguage\space from tracklang dialect `#1'}%
+ \SetCurrentTrackedDialect{#1}%
+ }%
+ {\expandafter\selectlanguage\expandafter{\@locale@dialect}}%
+ }%
+ {\expandafter\selectlanguage\expandafter{\@locale@dialect}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Select the main locale (but don't try any language change
+%as this might upset \sty{polyglossia} if the fonts haven't been set
+%yet), so use the internal
+%\cs{@locale@select}.
+% \begin{macrocode}
+\ifx\LocaleMainDialect\empty
+\else
+ \expandafter\@locale@select\expandafter{\LocaleMainDialect}
+\fi
+% \end{macrocode}
+%
+%Restore category code for \texttt{@} if necessary.
+% \begin{macrocode}
+\@locale@restore@at
+% \end{macrocode}
+
+%\iffalse
+% \begin{macrocode}
+%</tex-locale.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tex-locale-scripts-enc.def>
+% \end{macrocode}
+%\fi
+%\section{Scripts to \styfmt{fontenc} mappings
+%(\texttt{tex-locale-scripts-enc.def})}
+%\label{sec:locale-scripts-enc.def}
+%Provides mappings from scripts to font encodings. Not all
+%supported. This file is only loaded if the \pkgopt[auto]{fontenc}
+%option is used. The \texttt{@} character is assumed to have
+%category code when this file is input.
+%\begin{macro}{\@locale@scriptenc@map}
+%Maps ISO 15924 script label to \LaTeX\ font encoding name.
+% \begin{macrocode}
+\def\@locale@scriptenc@map#1#2{%
+ \@tracklang@namedef{@locale@scriptenc@map@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@get@scriptenc@map}
+%Get the mapping.
+% \begin{macrocode}
+\def\@locale@get@scriptenc@map#1{%
+ \@tracklang@ifundef{@locale@scriptenc@map@#1}%
+ {}%
+ {\csname @locale@scriptenc@map@#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@if@scriptenc@map}
+%Test if there's a script mapping.
+% \begin{macrocode}
+\def\@locale@if@scriptenc@map#1#2#3{%
+ \@tracklang@ifundef{@locale@scriptenc@map@#1}%
+ {#3}% false
+ {#2}% true
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@langenc@map}
+%Maps tracklang language or dialect labels to \LaTeX\ font encoding name.
+% \begin{macrocode}
+\def\@locale@langenc@map#1#2{%
+ \@tracklang@namedef{@locale@langenc@map@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@if@langenc@map}
+%Test if there's a lang mapping.
+% \begin{macrocode}
+\def\@locale@if@langenc@map#1#2#3{%
+ \@tracklang@ifundef{@locale@langenc@map@#1}%
+ {#3}% false
+ {#2}% true
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@locale@get@langenc@map}
+%Get the mapping.
+% \begin{macrocode}
+\def\@locale@get@langenc@map#1{%
+ \@tracklang@ifundef{@locale@langenc@map@#1}%
+ {}%
+ {\csname @locale@langenc@map@#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Define mappings. Only a few currently supported. It's better to use
+%\sty{fontspec} instead of \sty{fontenc} for non-Latin scripts.
+%
+% Scripts first.
+% \begin{macrocode}
+\@locale@scriptenc@map{Latn}{T1}
+\@locale@scriptenc@map{Latf}{T1}
+\@locale@scriptenc@map{Latg}{T1}
+\@locale@scriptenc@map{Cyrl}{T2A,T2B,T2C}
+% \end{macrocode}
+%Now languages or dialect labels:
+% \begin{macrocode}
+\@locale@langenc@map{vietnamese}{T5}
+\@locale@langenc@map{polish}{OT4}
+\@locale@langenc@map{armenian}{OT6}
+\@locale@langenc@map{greek}{LGR}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tex-locale-scripts-enc.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tex-locale-encodings.def>
+% \end{macrocode}
+%\fi
+%\section{texosquery to \styfmt{inputenc} mappings
+%(\texttt{tex-locale-encodings.def})}
+%Encoding mappings.
+%\begin{macro}{\@locale@newencmap}
+% \begin{macrocode}
+\def\@locale@newencmap#1#2{%
+ \@tracklang@namedef{@locale@encmap@#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@ifhasencmap}
+% \begin{macrocode}
+\def\@locale@ifhasencmap#1#2#3{%
+ \@tracklang@ifundef{@locale@encmap@#1}{#3}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@locale@getencmap}
+% \begin{macrocode}
+\def\@locale@getencmap#1{%
+ \@tracklang@nameuse{@locale@encmap@#1}}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\@locale@newencmap{iso88591}{latin1}
+\@locale@newencmap{iso88592}{latin2}
+\@locale@newencmap{iso88593}{latin3}
+\@locale@newencmap{iso88594}{latin4}
+\@locale@newencmap{iso88595}{latin5}
+\@locale@newencmap{iso88599}{latin9}
+\@locale@newencmap{windows1250}{cp1250}
+\@locale@newencmap{windows1252}{cp1252}
+\@locale@newencmap{windows1257}{cp1257}
+\@locale@newencmap{ibm850}{cp850}
+\@locale@newencmap{ibm852}{cp852}
+\@locale@newencmap{ibm437}{cp437}
+\@locale@newencmap{ibm865}{cp865}
+\@locale@newencmap{usascii}{ascii}
+\@locale@newencmap{xmaccentraleurope}{macce}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tex-locale-encodings.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tex-locale-support.def>
+% \end{macrocode}
+%\fi
+%\section{Language Support Setup}
+%The language support setup performed in \cs{@locale@postparse@hook}.
+%Load \sty{babel} or \sty{polyglossia}.
+% \begin{macrocode}
+\@locale@ifsupportbabelorpoly
+{}
+{%
+% \end{macrocode}
+%(\sty{babel} support.)
+%Set up some extra mappings that aren't in \sty{tracklang} version
+%1.3. There's no intuitive way of testing if a dialect label is
+%provided by \sty{babel}. There's only a test for the root language
+%by checking for the existence of the ldf file, so these are known
+%\sty{babel} options. This means that if there isn't a mapping, the
+%root language will be used instead.
+% \begin{macrocode}
+ \def\@locale@providemap#1#2{%
+ \IfTrackedDialectHasMapping{#1}%
+ {}%
+ {\SetTrackedDialectLabelMap{#1}{#2}}%
+ }%
+ \@locale@providemap{bahasa}{bahasa}%
+ \@locale@providemap{indonesian}{indonesian}%
+ \@locale@providemap{indon}{indon}%
+ \@locale@providemap{bahasam}{bahasam}%
+ \@locale@providemap{malay}{malay}%
+ \@locale@providemap{melayu}{melayu}%
+ \@locale@providemap{USenglish}{USenglish}%
+ \@locale@providemap{american}{american}%
+ \@locale@providemap{UKenglish}{UKenglish}%
+ \@locale@providemap{british}{british}%
+ \@locale@providemap{canadian}{canadian}%
+ \@locale@providemap{australian}{australian}%
+ \@locale@providemap{newzealand}{newzealand}%
+ \@locale@providemap{francais}{francais}%
+ \@locale@providemap{canadien}{canadien}%
+ \@locale@providemap{acadian}{acadian}%
+ \@locale@providemap{austrian}{austrian}%
+ \@locale@providemap{germanb}{germanb}%
+ \@locale@providemap{ngerman}{ngerman}%
+ \@locale@providemap{naustrian}{naustrian}%
+ \@locale@providemap{nswissgerman}{nswissgerman}%
+ \@locale@providemap{swissgerman}{swissgerman}%
+ \@locale@providemap{polutonikogreek}{greek}%
+ \@locale@providemap{nynorsk}{nynorsk}%
+ \@locale@providemap{portuguese}{portuguese}%
+ \@locale@providemap{brazilian}{brazilian}%
+ \@locale@providemap{brazil}{brazil}%
+% \end{macrocode}
+%Work out how to pass the options since we may need to convert a
+%\sty{tracklang} dialect label to a recognised \sty{babel} label.
+% \begin{macrocode}
+ \def\@locale@bbl@options{}%
+ \ForEachTrackedDialect{\this@dialect}%
+ {%
+ \edef\this@root@lang{%
+ \TrackedLanguageFromDialect{\this@dialect}}%
+% \end{macrocode}
+%Is there a language file?
+% \begin{macrocode}
+ \IfFileExists{\this@root@lang.ldf}
+ {%
+% \end{macrocode}
+%Check for Serbian, since we need to know the script.
+% \begin{macrocode}
+ \ifdefstring{\this@root@lang}{serbian}%
+ {%
+ \@locale@loadscripts
+ \IfTrackedDialectIsScriptCs{\this@dialect}%
+ {\TrackLangScriptLatn}%
+ {\def\locale@bbl@dialect{serbian}}%
+ {\def\locale@bbl@dialect{serbianc}}%
+ }%
+ {%
+ \IfFileExists{\this@dialect.ldf}%
+ {%
+ \let\locale@bbl@dialect\this@dialect
+ }%
+ {%
+% \end{macrocode}
+%Do we have a mapping for this dialect label?
+% \begin{macrocode}
+ \IfTrackedDialectHasMapping{\this@dialect}%
+ {%
+ \edef\locale@bbl@dialect{%
+ \GetTrackedDialectToMapping{\this@dialect}}%
+ }%
+ {%
+ \let\locale@bbl@dialect\this@root@lang
+ }%
+ }%
+ }%
+ \SetTrackedDialectLabelMap{\this@dialect}{\locale@bbl@dialect}%
+ \ifx\this@dialect\LocaleMainDialect
+ \ifx\@locale@bbl@options\empty
+ \edef\@locale@bbl@options{main=\locale@bbl@dialect}%
+ \else
+ \edef\@locale@bbl@options{\@locale@bbl@options,%
+ main=\locale@bbl@dialect}%
+ \fi
+ \else
+ \ifx\@locale@bbl@options\empty
+ \edef\@locale@bbl@options{\locale@bbl@dialect}%
+ \else
+ \edef\@locale@bbl@options{\@locale@bbl@options,%
+ \locale@bbl@dialect}%
+ \fi
+ \fi
+ }%
+ {}%
+ }%
+ \ifx\@locale@bbl@options\@empty
+ \ifTeXOSQueryDryRun
+ \@locale@err{Can't determine `babel' package
+ options\MessageBreak (texosquery's dry run mode is on)}{}
+ \else
+ \@locale@err{Can't determine `babel' package
+ options (perhaps the shell escape failed, check
+ `\jobname.log')}{}
+ \fi
+ \else
+ \expandafter\PassOptionsToPackage\expandafter
+ {\@locale@bbl@options}{babel}
+ \RequirePackage{babel}%
+ \fi
+}%
+{%
+% \end{macrocode}
+% (\sty{polyglossia} support).
+% \begin{macrocode}
+% \end{macrocode}
+% Need a way of mapping scripts, regions and variants to known
+% \sty{polyglossia} keys. A lot of these variants aren't official
+% BCP 47 tags.
+% \begin{macrocode}
+ \def\@set@locale@poly@map@script#1#2#3{%
+ \@tracklang@namedef{@local@poly@map@script@#1@#2}{#3}%
+ }
+ \def\@if@locale@poly@map@script#1#2#3#4{%
+ \@tracklang@ifundef{@local@poly@map@script@#1@#2}{#4}{#3}%
+ }
+ \def\@get@locale@poly@map@script#1#2{%
+ \@tracklang@nameuse{@local@poly@map@script@#1@#2}%
+ }
+ \def\@set@locale@poly@map@region#1#2#3{%
+ \@tracklang@namedef{@local@poly@map@region@#1@#2}{#3}%
+ }
+ \def\@if@locale@poly@map@region#1#2#3#4{%
+ \@tracklang@ifundef{@local@poly@map@region@#1@#2}{#4}{#3}%
+ }
+ \def\@get@locale@poly@map@region#1#2{%
+ \@tracklang@nameuse{@local@poly@map@region@#1@#2}%
+ }
+ \def\@set@locale@poly@map@variant#1#2#3{%
+ \@tracklang@namedef{@local@poly@map@variant@#1@#2}{#3}%
+ }
+ \def\@if@locale@poly@map@variant#1#2#3#4{%
+ \@tracklang@ifundef{@local@poly@map@variant@#1@#2}{#4}{#3}%
+ }
+ \def\@get@locale@poly@map@variant#1#2{%
+ \@tracklang@nameuse{@local@poly@map@variant@#1@#2}%
+ }
+ \def\@set@locale@poly@map@sublang#1#2#3{%
+ \@tracklang@namedef{@local@poly@map@sublang@#1@#2}{#3}%
+ }
+ \def\@if@locale@poly@map@sublang#1#2#3#4{%
+ \@tracklang@ifundef{@local@poly@map@sublang@#1@#2}{#4}{#3}%
+ }
+ \def\@get@locale@poly@map@sublang#1#2{%
+ \@tracklang@nameuse{@local@poly@map@sublang@#1@#2}%
+ }
+ \@set@locale@poly@map@region{arabic}{IQ}{locale=mashriq}
+ \@set@locale@poly@map@region{arabic}{SY}{locale=mashriq}
+ \@set@locale@poly@map@region{arabic}{JO}{locale=mashriq}
+ \@set@locale@poly@map@region{arabic}{LB}{locale=mashriq}
+ \@set@locale@poly@map@region{arabic}{PS}{locale=mashriq}
+ \@set@locale@poly@map@region{arabic}{LY}{locale=libya}
+ \@set@locale@poly@map@region{arabic}{DZ}{locale=algeria}
+ \@set@locale@poly@map@region{arabic}{TN}{locale=tunisia}
+ \@set@locale@poly@map@region{arabic}{MA}{locale=morocco}
+ \@set@locale@poly@map@region{arabic}{MR}{locale=mauritania}
+ \@set@locale@poly@map@variant{arabic}{islamic}{calendar=islamic}
+ \@set@locale@poly@map@variant{arabic}{maghrib}{numerals=maghrib}
+ \@set@locale@poly@map@variant{arabic}{abjad}{abjadjimnotail}
+ \@set@locale@poly@map@variant{bengali}{western}{numerals=Western}
+ \@set@locale@poly@map@variant{bengali}{devanagari}{numerals=Devanagari}
+ \@set@locale@poly@map@variant{bengali}{bengali}{numerals=Bengali}
+ \@set@locale@poly@map@region{english}{US}{variant=us}
+ \@set@locale@poly@map@region{english}{GB}{variant=uk}
+ \@set@locale@poly@map@region{english}{AU}{variant=australian}
+ \@set@locale@poly@map@region{english}{NZ}{variant=newzealand}
+ \@set@locale@poly@map@variant{farsi}{western}{numerals=western}
+ \@set@locale@poly@map@variant{farsi}{eastern}{numerals=eastern}
+ \@set@locale@poly@map@region{german}{DE}{variant=german}
+ \@set@locale@poly@map@region{german}{AU}{variant=austrian}
+ \@set@locale@poly@map@region{german}{CH}{variant=swiss}
+ \@set@locale@poly@map@variant{german}{1996}{spelling=new}
+ \@set@locale@poly@map@variant{german}{1901}{spelling=old}
+ \@set@locale@poly@map@script{german}{Latf}{script=fraktur}
+ \@set@locale@poly@map@variant{greek}{monoton}{variant=monotonic}
+ \@set@locale@poly@map@variant{greek}{polyton}{variant=polytonic}
+ \@set@locale@poly@map@variant{greek}{ancient}{variant=ancient}
+ \@set@locale@poly@map@variant{greek}{arabic}{numerals=arabic}
+ \@set@locale@poly@map@variant{hebrew}{arabic}{numerals=arabic}
+ \@set@locale@poly@map@variant{hebrew}{gregorian}{calendar=gregorian}
+ \@set@locale@poly@map@variant{hindi}{western}{numerals=Western}
+ \@set@locale@poly@map@variant{hindi}{devanagari}{numerals=Devanagari}
+ \@set@locale@poly@map@variant{latin}{classic}{variant=classic}
+ \@set@locale@poly@map@variant{latin}{modern}{variant=modern}
+ \@set@locale@poly@map@variant{latin}{medieval}{variant=medieval}
+ \@set@locale@poly@map@sublang{russian}{orv}{spelling=old}
+ \@set@locale@poly@map@variant{russian}{luna1918}{spelling=new}
+ \@set@locale@poly@map@script{serbian}{Latn}{script=Latin}
+ \@set@locale@poly@map@script{serbian}{Cyrl}{script=Cyrillic}
+ \@set@locale@poly@map@variant{syriac}{western}{numerals=western}
+ \@set@locale@poly@map@variant{syriac}{eastern}{numerals=eastern}
+% \end{macrocode}
+% Load polyglossia.
+% \begin{macrocode}
+ \RequirePackage{polyglossia}
+ \ForEachTrackedDialect{\this@dialect}%
+ {%
+ \edef\this@root@lang{%
+ \TrackedLanguageFromDialect{\this@dialect}}%
+ \edef\this@sublang{%
+ \GetTrackedDialectSubLang{\this@dialect}}%
+ \edef\this@region{%
+ \TrackedIsoCodeFromLanguage{3166-1}{\this@dialect}}%
+ \edef\this@script{%
+ \GetTrackedDialectScript{\this@dialect}}%
+ \edef\this@variant{%
+ \GetTrackedDialectVariant{\this@dialect}}%
+% \end{macrocode}
+% Try to determine the options. Check the script mappings.
+% \begin{macrocode}
+ \def\@locale@poly@options{}%
+ \ifx\this@script\empty
+ \else
+ \@if@locale@poly@map@script{\this@root@lang}{\this@script}%
+ {%
+ \edef\@locale@poly@options{%
+ \@get@locale@poly@map@script
+ {\this@root@lang}{\this@script}}%
+ }%
+ {}%
+ \fi
+% \end{macrocode}
+% Check the region mappings.
+% \begin{macrocode}
+ \ifx\this@region\empty
+ \else
+ \@if@locale@poly@map@region{\this@root@lang}{\this@region}%
+ {%
+ \ifx\@locale@poly@options\empty
+ \edef\@locale@poly@options{%
+ \@get@locale@poly@map@region{\this@root@lang}{\this@region}}%
+ \else
+ \edef\@locale@poly@options{\@locale@poly@options,%
+ \@get@locale@poly@map@region{\this@root@lang}{\this@region}}%
+ \fi
+ }%
+ {}%
+ \fi
+% \end{macrocode}
+% Check the sub-language mappings.
+% \begin{macrocode}
+ \ifx\this@sublang\empty
+ \else
+ \@if@locale@poly@map@sublang{\this@root@lang}{\this@sublang}%
+ {%
+ \ifx\@locale@poly@options\empty
+ \edef\@locale@poly@options{%
+ \@get@locale@poly@map@sublang
+ {\this@root@lang}{\this@sublang}}%
+ \else
+ \edef\@locale@poly@options{\@locale@poly@options,%
+ \@get@locale@poly@map@sublang
+ {\this@root@lang}{\this@sublang}}%
+ \fi
+ }%
+ {}%
+ \fi
+% \end{macrocode}
+% Check the variant mappings.
+% \begin{macrocode}
+ \ifx\this@subvariant\empty
+ \else
+ \@if@locale@poly@map@variant{\this@root@lang}{\this@variant}%
+ {%
+ \ifx\@locale@poly@options\empty
+ \edef\@locale@poly@options{%
+ \@get@locale@poly@map@variant
+ {\this@root@lang}{\this@variant}}%
+ \else
+ \edef\@locale@poly@options{\@locale@poly@options,%
+ \@get@locale@poly@map@variant
+ {\this@root@lang}{\this@variant}}%
+ \fi
+ }%
+ {}%
+ \fi
+% \end{macrocode}
+% Set the language using either \cs{setmainlanguage} or
+% \cs{setotherlanguage}.
+% \begin{macrocode}
+ \ifx\this@dialect\LocaleMainDialect
+ \edef\@locale@tmp{\noexpand\setmainlanguage
+ [\@locale@poly@options]{\this@root@lang}}%
+ \else
+ \edef\@locale@tmp{\noexpand\setotherlanguage
+ [\@locale@poly@options]{\this@root@lang}}%
+ \fi
+ \@locale@tmp
+ }%
+% \end{macrocode}
+%Redefine command to temporarily switch off punctuation
+%adjustments. For example, when formatting the date or time.
+% \begin{macrocode}
+ \def\localenopolypunct{\@locale@nopolypunct}%
+}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tex-locale-support.def>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput
diff --git a/macros/generic/tex-locale/tex-locale.ins b/macros/generic/tex-locale/tex-locale.ins
new file mode 100644
index 0000000000..c4bf34fef3
--- /dev/null
+++ b/macros/generic/tex-locale/tex-locale.ins
@@ -0,0 +1,39 @@
+% tex-locale.ins generated using makedtx version 1.2 2018/8/26 19:14
+\input docstrip
+
+\preamble
+
+ tex-locale.dtx
+ Copyright 2018 Nicola Talbot
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3
+ of this license or (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Nicola Talbot.
+
+ This work consists of the files tex-locale.dtx and tex-locale.ins and the derived files tex-locale.sty, tex-locale.tex, tex-locale-scripts-enc.def, tex-locale-encodings.def, tex-locale-support.def.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{tex-locale.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tex-locale.dtx}{tex-locale.sty,package}}
+\file{tex-locale.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tex-locale.dtx}{tex-locale.tex,package}}
+\file{tex-locale-scripts-enc.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tex-locale.dtx}{tex-locale-scripts-enc.def,package}}
+\file{tex-locale-encodings.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tex-locale.dtx}{tex-locale-encodings.def,package}}
+\file{tex-locale-support.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tex-locale.dtx}{tex-locale-support.def,package}}
+}
+
+\endbatchfile
diff --git a/macros/generic/tex-locale/tex-locale.pdf b/macros/generic/tex-locale/tex-locale.pdf
new file mode 100644
index 0000000000..b00854549d
--- /dev/null
+++ b/macros/generic/tex-locale/tex-locale.pdf
Binary files differ
diff --git a/macros/generic/texapi/README b/macros/generic/texapi/README
new file mode 100644
index 0000000000..4a23048bac
--- /dev/null
+++ b/macros/generic/texapi/README
@@ -0,0 +1,25 @@
+This is the README file for the texapi package.
+Author: Paul Isambert.
+E-mail: zappathustra AT free DOT fr
+Comments and suggestions are welcome.
+Date: October 2011.
+
+The package is set of macros to write
+format-independent (and -aware) packages.
+It is, of course, format-independent,
+and requires e-TeX.
+Relevant information can be found in texapi-doc.pdf
+
+Files in this distributions:
+
+texapi.tex => The package (no wrapper files for format, of course).
+texapi-doc.tex => The source of the documentation.
+texapi-doc.pdf => The typeset documentation.
+
+To process the documentation source, you need the
+PiTeX files (available on CTAN) on top of plain TeX
+with LuaTeX at least v.0.6. Non-free fonts are used.
+... err, no actually, don't typeset it, the PiTeX version
+on CTAN is way too old. It'll be updated someday.
+
+Licensing of this package is covered by LPPL.
diff --git a/macros/generic/texapi/texapi-doc.pdf b/macros/generic/texapi/texapi-doc.pdf
new file mode 100644
index 0000000000..c1a196bd7d
--- /dev/null
+++ b/macros/generic/texapi/texapi-doc.pdf
Binary files differ
diff --git a/macros/generic/texapi/texapi-doc.tex b/macros/generic/texapi/texapi-doc.tex
new file mode 100644
index 0000000000..fdc93eebd8
--- /dev/null
+++ b/macros/generic/texapi/texapi-doc.tex
@@ -0,0 +1,1941 @@
+\input pitex % which \input's texapi (and YaX)
+
+\setparameter document:
+ author = "Paul Isambert"
+ title = \texapi
+ pdftitle = TeXapi
+ version = \texapiversion
+ date = "\the\month/\the\day/\the\year"
+ subject = "The TeXapi documentation."
+ display = outlines
+
+\setparameter page:
+ width = 32cm
+ height = 32cm
+ lines = 46
+ hsize = 10cm
+ baselineskip = 14pt
+ left = 10cm
+ top = 5cm
+ parindent = 2em
+
+\setparameter font:
+ command = \mainfont
+ name = "Chaparral Pro"
+ size = 12pt
+ small = 11pt
+ big = 20pt
+
+\setparameter font:
+ command = \tcodefont
+ name = "Lucida Console"
+ size = 9.5pt
+ bold italic = none
+ features = "space = mono"
+
+\setparameter font:
+ command = \cscodefont
+ name = "Lucida Console"
+ size = 8.5pt
+ bold italic = none
+ features = "space = mono"
+
+\def\codefont{%
+ \ifcslist \cscodefont
+ \else \tcodefont\fi}
+\def\tcode#1{{\codefont#1}}%
+
+%
+%
+% OUTPUT
+%
+\newbox\codebox
+\newdimen\sepdim
+\sepdim=1.2pc
+
+\pdfdef\&{&}
+\newdimen\originalvsize
+\originalvsize=\vsize
+
+\output={%
+ \setbox255=\vtop{\unvbox255}
+ \setbox\codebox=\vtop{\unvbox\codebox}
+ \ht255=\baselineskip
+ \ht\codebox=\baselineskip
+ \shipout\vbox{%
+ \vbox to 0pt{%
+ \vss
+ \hbox to \hsize{%
+ \spaceskip .8em plus .6em minus .3em
+ \mainfont\big\sc\descriptiontitle
+ \unless\ifx\bookmarktitle\prevbookmarktitle
+ \passexpanded{\outline0}{\bookmarktitle}%
+ \fi}
+ \kern2\baselineskip}%
+ \hbox{%
+ \box255
+ \kern\sepdim
+ \pdfliteral{
+ q
+ .95 g
+ -3 200 300 -1000 re f
+ Q
+ }
+ \box\codebox
+ }%
+ }
+ \advancepageno
+ \global\let\prevbookmarktitle\bookmarktitle
+ \global\vsize=\originalvsize
+ }
+
+%
+%
+% \cslist
+
+\def\red{\color{.9 0 0}}
+\def\rcom#1{\red{\com#1}}
+\newbox\cslistbox
+\newife\ifexpcs
+\newif\ifcslist
+\newbox\tempbox
+\newdimen\tempdimen
+\newdimen\cswidth
+\newcount\cslistcount
+\def\zilch{\zilch}
+\extraboxspace=1.5pt
+\def\macrobox{\colorbox{.92 .92 .92}}
+\def\definecs#1#2{
+ \quitvmode
+ \hbox to\cswidth{\iffexpcs\macrobox{\unless\ifx#1\zilch\rcom#1\fi}\hfill}%
+ \setcatcodes{/=13}%
+ \scantextokens{#2}%
+ \restorecatcodes
+ }
+\def\longdefinecs#1#2\end{\definecs#1{#2}}
+\def\getwidth#1#2\end{%
+ \bgroup
+ \setbox0=\hbox{\codefont\string#1}%
+ \ifdim\wd0>\cswidth
+ \global\cswidth=\wd0
+ \fi
+ \egroup
+ }
+\def\cslist#1{%
+ \vskip\baselineskip
+ \cslisttrue \cslistcount=0
+ \cswidth=0pt
+ \dofornoempty{#1,}##1,{%
+ \deftrim\temp{##1}%
+ \passexpanded{\iffprefix!}{\temp}
+ {\passexpanded{\removeprefixin!}{\temp}\temp}%
+ \expandafter\getwidth\temp\end
+ }{}%
+%
+ \tempdimen=0pt
+ \dofornoempty{#1,}##1,{%
+ \advance\cslistcount1
+ \deftrim\temp{##1}%
+ \passexpanded{\ifprefix!}{\temp}
+ {\expcstrue\passexpanded{\removeprefixin!}{\temp}\temp}
+ {\expcsfalse}%
+ \setbox\tempbox\hbox{\expandafter\longdefinecs\temp\end\kern\sepdim}%
+ \ifdim\wd\tempbox>\tempdimen
+ \tempdimen=\wd\tempbox
+ \fi
+ }{}%
+%
+ \setbox\cslistbox=\vtop{%
+ \dofornoempty{#1,}##1,{%
+ \deftrim\temp{##1}%
+ \passexpanded{\ifprefix!}{\temp}
+ {\expcstrue\passexpanded{\removeprefixin!}{\temp}\temp}
+ {\expcsfalse}%
+ \llap{\hbox to\tempdimen{\expandafter\longdefinecs\temp\end\hfil}}%
+ }{}%
+ }%
+ \dp\cslistbox=0pt
+ \noindent \box\cslistbox
+ \def\par{%
+ \endgraf
+ \let\par\endgraf
+ \ifnum\prevgraf<\cslistcount
+ \vskip\the\numexpr(\cslistcount-\prevgraf)\baselineskip
+ \fi}%
+ \cslistfalse \ignorespaces
+ }
+%
+\bgroup
+\setcatcodes{/=13}
+\gdef/#1/{\arg{#1}}
+\egroup
+
+\def\true{\arg{true}}
+\def\false{\arg{false}}
+\def\csarg{\arg{csname}}
+\def\comarg{\arg{command}}
+
+
+%
+% EXAMPLES
+%
+
+\newverbatim\example{\codefont\parindent0pt}
+ {\vskip\baselineskip\printverbatim\relax
+ \vskip\baselineskip\removenextindent}
+\newverbatim\Example{}{%
+ \global\setbox\codebox=\vbox{%
+ \parindent0pt
+ \ifvoid\codebox
+ \quitvmode\vrule height \topskip depth 0pt width 0pt
+ \else
+ \dimen0=\dp\codebox
+ \box\codebox
+ \vskip\baselineskip
+ \color{1 1 1}{\hrule width \hsize height 1pt depth 1pt}%
+ \kern-2pt
+ \vskip\baselineskip
+ \prevdepth=\dimen0
+ \fi
+ \let\exampleskip\relax
+ \cslisttrue \codefont
+ \overfullrule=0pt
+ \printverbatim
+ \vskip\baselineskip
+ \mainfont\small
+ \doverbatim
+ }%
+ }
+
+\newblock\description
+ {\getdescriptiontitle}
+ {\penalty-10000\relax}
+
+\def\getdescriptiontitle#1{%
+ \def\bookmarktitle{#1}%
+ \def\descriptiontitle{}%
+ \dofor{#1 }##1 {%
+ \dofor{##1}####1{%
+ \addright\descriptiontitle{\lowercase{####1}\hskip0pt plus 8pt minus 2pt}%
+ }{}%
+ \addright\descriptiontitle{\unskip\spacecs}%
+ }{}%
+ \addright\descriptiontitle{\unskip}%
+ }
+\def\texapi{%
+ {\codefont texapi}%
+ \antigobblespace
+ }
+
+\overfullrule=0pt
+
+
+
+\description{Writing macros with texapi}
+
+\setbox\codebox=\vbox to \hsize{%
+ \small
+ \hfill \vrule height\topskip width0pt Author: \usevalue document : author \par
+ \hfill Version: \usevalue document : version \par
+ \hfill Date: \usevalue document : date \par
+ \vskip\baselineskip
+ \noindent Typeset in Chaparral Pro (Carol Twombly)
+ and Lucida Console\hfil\penalty-10000 (Charles Bigelow and Kris Holmes)
+ with Lua\TeX\ v.\directlua{tex.print(tex.luatexversion/100)}.
+
+ }
+
+The first motivation for this set of macros is selfish:
+after rewriting the same lines over and over and wasting
+so many excruciating (yes!) hours debugging intricate loops
+with one typo, I decided I could use a toolkit containing
+the painful code without errors (hopefully) and use it
+for future packages.
+
+The second motivation is more ambitious: I think it's a pity
+so many packages are written for one format and are thus
+unusable outside it, even though those packages could be useful
+to anybody. This is so, I believe, because a format mixes two
+different things: decisions about typesetting (mainly) and utility macros.
+The former are the essence of a format, whereas the latter are just
+shorthands you can use or not, replace, or ignore completely.
+But the fact is that users of a format tend to use the utility macros
+shipped with it, and thus writes macros that can't be reused elsewhere,
+even though nothing crucial hinges on what utility macros one uses.
+Thus, \texapi aims at providing a good deal of this kind of macros
+whitout relying on any particular format, so that one can write
+code without having to take into account how it will be used.
+Moreover, \texapi is also format-aware, meaning some commands
+are defined differently depending on the format being used,
+and one doesn't have to create as many macros as there are formats.
+
+There is at least one basic assumptions, namely that formats
+should contain plain \TeX's allocation macros. This the case for
+all formats I know.
+
+\vskip\baselineskip
+In what follows, commands have a \macrobox{grey background} when they
+are fully expandable, e.g. they can be used inside \com\csname...\com\endcsname,
+provided you don't use them with unexpandable arguments, of course.
+On the other hand, all unexpandable commands are protected.
+
+Arguments are denoted by \arg{text}, where `text' makes the intended use
+clearer and doesn't denote any particular type of argument, except in
+the case of \comarg, which denotes a control sequence (something expandable,
+actually), and \csarg, which denotes an argument suitable to \com\csname.
+Braces are indicated only when mandatory, but of course they can be used to delimit
+arguments as usual.
+
+\vskip\baselineskip
+Finally, the following may be a useful indication (added in version 1.01).
+
+\vskip-\baselineskip
+\cslist{
+ \texapiversion
+ }
+This a macro that holds \texapi's version number.
+The current version is \texapiversion.
+
+\description/
+
+
+
+\description{Engine and format detection}
+
+\cslist{
+ \texenginenumber
+ }
+This is a \com\chardef'ined number set according to the
+engine used: 0 means e-\TeX, or an unknown engine with
+e-\TeX\ extensions; 1 means Xe\TeX\ (detected because
+\com\XeTeXinterchartoks exists); 2 means pdf\TeX\ (detected
+thanks to \com\pdfstrcmp); 3 means Lua\TeX\ (detected thanks
+to \com\directlua). Numbering here allows one to detect a
+pdf\TeX-based engine with \com\texenginenumber>1. Con\TeX t
+has an equivalent \com\texengine, with pdf\TeX=1 and Xe\TeX=2,
+though.
+
+\cslist{
+ \formatnumber
+ }
+This number does the same with formats. Here, 0 means an unknown
+format, 1 means plain (because \com\fmtname is `\tcode{plain}'),
+2 means eplain (because \com\fmtname is `\tcode{eplain}'),
+3 means Con\TeX t (because there exists an \com\inspectnextoptionalcharacter
+command), 4 means La\TeX2e (because \com\fmtname is `\tcode{LaTeX2e}')
+and 5 means La\TeX3 (because there exists an \com\ExplSyntaxOn command).
+There's no distinction yet between La\TeX3 on top of La\TeX2e and La\TeX3
+as a format per se. Since \com\formatnumber is set only if it doesn't
+already exist, you can write your package with, say, \tcode{code.tex}
+containing the main code and \tcode{code.sty} and \tcode{t-code.tex}
+as wrapper files for La\TeX\ and Con\TeX t respectively, with \com\formatnumber
+already set accordingly.
+
+\Example
+\def\myengine{%
+ \ifcase\texenginenumber
+ e-\or Xe\or pdf\or Lua\fi\TeX
+ }
+\def\myformat{%
+ \ifcase\formatnumber
+ unknown\or plain\or eplain\or
+ ConTeXt\or LaTeX\or LaTeX3\fi
+ }
+This documentation has been typeset
+with \myformat\ under \myengine.
+\Example/
+
+\cslist{
+ \priminput,
+ \primunexpanded
+ }
+Both La\TeX\ and Con\TeX t redefines \com\input, and in Con\TeX t
+\com\unexpanded has not the meaning of the e-\TeX\ primitive. These
+two commands are thus the primitive \com\input and \com\unexpanded
+respectively.
+
+\cslist{
+ \loadmacrofile/file/
+ }
+The behavior of this command depends on \com\formatnumber. The \arg{file}
+should be given without extension, and the following happens: in Con\TeX t,
+\com\usemodule\tcode{[\arg{file}]} is executed, in La\TeX\ \com\RequirePackage\barg{file}
+is used, and in other formats it is simply \com\input\arg{file}\tcode{.tex}.
+This makes sense only with packages that are distributed as described above,
+i.e. with the main code in one file and wrapper files for La\TeX\ and Con\TeX t,
+like Ti\ital{k}Z or \ital{librarian}.
+
+\cslist{
+ \senderror/package//message/
+ }
+This sends an error message according to the format's custom. In \tcode{plain}
+and \tcode{eplain} (and in an unknown format), it produces
+\tcode{\com\errmessage\string{\arg{package} error: \arg{message}\string}}. In
+La\TeX, it produces
+\com\PackageError\barg{package}\barg{message}{\codefont\string{\string}} (no
+help message) and in Con\TeX t \tcode{\com\writestatus\string{\arg{package}
+error\string}}\barg{message} (which is far from Con\TeX t's sophisticated
+communication system but, well...).
+
+\description/
+
+
+
+
+
+
+
+\description{Argument manipulation}
+
+\cslist{
+ !\emptycs,
+ !\spacecs,
+ \spacechar
+ }
+Pretty useful macros whose meaning is clear, but whatever: \com\emptycs is
+an emptily defined command, \com\spacecs expands to a space, and \com\spacechar
+denotes a space, i.e. it is an implicit space and not really a macro.
+
+\cslist{
+ !\gobbleone,
+ !\gobbleoneand/code/
+ }
+Those, as you might imagine, gobble the following argument; the second version
+also excutes \arg{code} afterwards. There are actually nine
+such commands in each case, and they are (for the sake of completeness)
+\com\gobbleone, \com\gobbletwo, \com\gobblethree, \com\gobblefour,
+\com\gobblefive, \com\gobblesix, \com\gobbleseven, \com\gobbleeight\
+(watch out, two \ital{e}'s) and \com\gobblenine for the first version,
+and \com\gobbleoneand, \com\gobbletwoand, \com\gobblethreeand,
+\com\gobblefourand, \com\gobblefiveand, \com\gobblesixand,
+\com\gobblesevenand, \com\gobbleeightand and \com\gobblenineand. Note
+that \com\gobblenineand\arg{code} takes two expansion steps to
+return \arg{code}, instead of only one in the other cases.
+
+\Example
+This is \gobbletwoand{very } uninteresting.
+\Example/
+
+\cslist{
+ !\unbrace/code/
+ }
+This is the kind of command you probably can't see the point of until
+you need it. It returns its \arg{code} untouched, but with outermost
+braces removed if any.
+
+\cslist{
+ !\swapargs/arg1//arg2/,
+ !\swapbraced/arg1//arg2/,
+ !\swapleftbraced/arg1//arg2/,
+ !\swaprightbraced/arg1//arg2/
+ }
+The first of those returns \arg{arg2}\arg{arg1} into the stream, without
+any brace to delimit them.
+On the contrary, \com\swapbraced returns \barg{arg2}\barg{arg1}. And, as
+you might imagine, \com\swapleftbraced returns
+\barg{arg2}\arg{arg1} whereas \com\swaprightbraced returns \arg{arg2}\barg{arg1}.
+
+\cslist{
+ !\passexpanded/arg1//arg2/,
+ !\passexpandednobraces/arg1//arg2/
+ }
+The first one returns \arg{arg1}\barg{arg2 expanded once} and the second
+\arg{arg1}\arg{arg2 expanded once}. It's some sort
+of long \com\expandafter built on \com\swapargs and associates,
+and if \arg{arg1} is a single token it's faster to use \com\expandafter
+itself. It's not a real \com\expandafter, though, since \arg{arg2} is
+expanded to the left of \arg{arg1} and then moved back to its
+right. Which, with e.g. an \com\else as \arg{arg2}, will lead
+to results you probably haven't foreseen and expected.
+If \arg{arg2} is some material you want to turn into a command with
+\com\csname, see \com\passcs below.
+
+\Example
+\def\foo#1#2{\detokenize{(1=#1,2=#2)}}
+\def\bar{two}
+\foo{one}\bar
+\passexpanded{\foo{one}}\bar
+\Example/
+
+\description/
+
+
+
+
+
+
+
+
+
+\description{Defining \& using commands}
+
+\cslist{
+ \defcs\csarg/parameter text/\barg{definition},
+ \edefcs\csarg/parameter text/\barg{definition},
+ \gdefcs\csarg/parameter text/\barg{definition},
+ \xdefcs\csarg/parameter text/\barg{definition}
+ }
+These work exactly like \com\def, \com\edef, \com\gdef
+and \com\xdef, except they define a command with name
+\csarg. The \arg{parameter text} is the usual one,
+and any the space at the beginning is significant. I.e.
+\verb/\defcs{foo}#1{...}/ and \verb/\defcs{foo} #1{...}/
+aren't equivalent at all. Prefixes can be appended as with
+\com\def.
+
+\Example
+\defcs{foo}#1{This is foo: #1.}
+\foo{bar}
+\Example/
+
+
+\cslist{
+ \letcs\csarg\comarg,
+ \lettocs\comarg\csarg,
+ \letcstocs\csarg\csarg
+ }
+These \com\let the first command or command named \csarg\ to
+the meaning of the second one. In both \com\lettocs and \com\letcstocs,
+if the command with name \csarg\ is undefined, it is not let to \com\relax.
+So these are different from \com\let with \com\expandafter's. The \com\letcs
+command can also be used to create an implicit character, of course.
+
+\Example
+\expandafter\let\expandafter\foo
+ \csname undefined\endcsname
+\lettocs\bar{reallyundefined}
+\letcstocs{reallyundefined}{reallyundefined}
+
+Compare this: \meaning\foo,
+and that: \meaning\bar.
+And better yet: \meaning\reallyundefined.
+\Example/
+
+
+\cslist{
+ \addleft\comarg/material/,
+ \addleftcs\csarg/material/,
+ \eaddleft\comarg/material/,
+ \eaddleftcs\csarg/material/
+ }
+This redefines \comarg\ or a command named \csarg\ to
+itself with \arg{material} added at the beginning. The e-variant
+performs an \com\edef so that \arg{material} is fully expanded
+(but not \comarg). The usual prefixes can be appended.
+
+\cslist{
+ \addright\comarg/material/,
+ \addrightcs\csarg/material/,
+ \eaddright\comarg/material/,
+ \eaddrightcs\csarg/material/
+ }
+This is the same thing as above, but the material is added
+at the end. In both the left and right version, the command
+thus redefined should be a simple command working by itself
+(i.e. no argument and no delimiter). In the \csarg\ case,
+no check is performed to ensure that \csarg\ is defined
+(but in the worst case it ends up as \com\relax, because of
+its being called after the implicit \com\def\ (get it?)).
+
+\Example
+\defcs{foo}{bar}
+\addleftcs{foo}{In a }
+\addright\foo{ (how fascinating).}
+\foo
+\Example/
+
+\cslist{
+ !\usecs\csarg,
+ !\usecsafter\csarg,
+ !\passcs/code/\csarg,
+ !\passexpandedcs/code/\csarg,
+ \noexpandcs\csarg,
+ \unexpandedcs\csarg
+ }
+Various ways to use a command with name \csarg:
+\com\usecs performs a simple \com\csname\csarg\com\endcsname\
+(and doesn't even check whether \csarg\ is defined or not, so
+this might relax it a little bit), \com\usecsafter does the equivalent
+of \com\expandafter\com\command, \com\passcs puts \csarg\ as a real
+(unbraced) command after \arg{code}, whereas \com\passexpandedcs passes
+the expansion of the control sequence with name \csarg\ to \arg{code}; \com\noexpandcs and \com\unexpandedcs
+return \csarg\ with a \com\noexpand prefix or its expansion as argument to
+\com\unexpanded\ (\com\primunexpanded, really).
+
+\Example
+\def\bar{whatever} \def\foo#1{[#1]}
+I use it: \usecs{bar},
+I use it after: \usecsafter{foo}\bar,
+and I pass it: \passcs\foo{bar}.
+\Example/
+\Example
+\def\foo{\bar}
+I don't expand it:
+\edef\foobar{\noexpandcs{foo}}%
+\meaning\foobar.
+Or just a little bit:
+\edef\foobar{\unexpandedcs{foo}}%
+\meaning\foobar.
+\Example/
+
+\cslist{
+ !\commandtoname\comarg
+ }
+This returns the name of \comarg, i.e. \comarg\ without its backslash
+(and made of catcode-12 characters, since it's based on \com\string).
+
+\description/
+
+
+
+
+
+
+
+
+
+\description{Tests with commands}
+
+\cslist{
+ !\reverse
+ }
+Conditionals in \texapi\ (not only those on this page) can be prefixed with
+\com\reverse, so that if they're true the \false\ argument is executed (if
+specified), and if they're false, the \true\ argument is executed. So this is
+equivalent to \com\unless, to which \com\reverse defaults (since version
+1.04) in case the following command isn't recognized as a \texapi conditional.
+
+\Example
+\reverse\iffalse
+ Wow, \verb"\reverse" can replace \verb"\unless"!
+ We must be using version 1.04 at least!
+\fi
+\Example/
+
+\cslist{
+ !\ifcommand\comarg\true\false,
+ !\iffcommand\comarg\true
+ }
+This conditional executes \true\ if \comarg\ is defined.
+So it is a straight version of \com\ifdefined. The \com\iff...
+version, like all \texapi's \com\iff..., considers only the
+\true\ case (which becomes the \false\ case if the conditional
+is prefixed with \com\reverse).
+
+\Example
+\ifcommand\TeX{Cool}{Too bad}.
+Nothing: \iffcommand\undefined{Whatever}.
+\Example/
+
+\cslist{
+ !\ifcs\csarg\true\false,
+ !\iffcs\csarg\true
+ }
+Same as above, but with an \com\ifcsname this time.
+It goes without saying that \csarg\ isn't let to \com\relax
+thereafter if it was undefined.
+
+\Example
+\reverse\iffcs{undefined}{This command is undefined.}
+\Example/
+
+\cslist{
+ !\ifemptycommand\comarg\true\false,
+ !\iffemptycommand\comarg\true
+ }
+This is true if \comarg\ is defined with an empty
+definition text, i.e. it is equivalent to \com\emptycs.
+This is not true if \comarg\ takes arguments, though,
+so \com\gobbleone isn't empty in this sense.
+
+\cslist{
+ !\ifemptycs\csarg\true\false,
+ !\iffemptycs\csarg\true
+ }
+Same as above with a command named \csarg.
+
+\Example
+\def\foo{}
+\ifemptycommand\foo{Empty}{Not empty}.
+\reverse\iffemptycs{gobbleone}{It ain't empty}.
+\Example/
+
+
+
+\cslist{
+ !\ifxcs\csarg\comarg\true\false,
+ !\iffxcs\csarg\comarg\true
+ }
+This is true if \csarg\ has the same definition as \comarg,
+or they're both undefined.
+
+\cslist{
+ !\ifxcscs\csarg\csarg\true\false,
+ !\iffxcscs\csarg\csarg\true
+ }
+This is true if both \csarg's have the same definition,
+or they're both undefined.
+
+\Example
+\iffxcs{undefined}\undefinedtoo
+ {Same definitions.}
+\ifxcscs{foo}{TeX}
+ {These are the same}
+ {These are different}.
+\Example/
+
+\description/
+
+
+
+
+
+
+
+
+
+
+\description{Various conditionals}
+
+\cslist{
+ \newife\comarg
+ }
+This defines a conditional like plain \TeX's \verb/\newif/,
+except it takes two arguments (the \true\ and \false\ values)
+instead of an \com\else ... \com\fi structure. Besides,
+this conditional is reversible with \com\reverse, and
+a `double-f\kern1pt' (i.e. \com\iff...) version is also created,
+which takes the \true\ part only. As with
+\verb/\newif/, \comarg\ must begin with \tcode{if}.
+(The \ital{e} means \ital{expandable}, although there's
+nothing more expandable in the conditionals thus constructed
+than in those defined with \verb/\newif/, but anyway.)
+
+\Example
+\newife\iffoo
+\iffoo{There is foo}{There is no foo}.
+\footrue
+\reverse\iffoo{There is no foo}{There is foo}.
+\ifffoo{With three f's in a row}.
+\Example/
+
+\cslist{
+ !\straightenif/\TeX\ conditional//arg/\true\false,
+ !\straighteniff/\TeX\ conditional//arg/\true
+ }
+Apart from \com\ifdefined and \com\ifcsname\ (in the guise
+of \com\ifcommand and \com\ifcs respectively), none of \TeX's
+primitive conditionals are redefined in a straight fashion,
+i.e. with two arguments instead of \com\else ... \com\fi.
+These commands let you use \TeX's conditionals in such a way.
+\arg{\TeX\ conditional} means such a primitive without a
+backslash (so this construction can be used inside real
+conditionals), e.g. \tcode{ifnum} or \tcode{ifvoid}.
+The \arg{arg} is whatever you normally feed to this conditional.
+It is brutally concatenated, and you're the one in charge
+of adding space if needed, as for instance with \tcode{ifnum}.
+Chaos will ensue if you fail to do so. With conditionals that don't
+require anything, e.g. \tcode{iftrue} or \tcode{ifvmode},
+leave \arg{arg} empty (but don't forget it).
+Finally, \true\ and \false\ are executed accordingly, and the
+whole macro can be prefixed with \com\reverse.
+
+\Example
+ % See this space?
+\straightenif{ifnum}{1=1 }{Reality is preserved}
+ {Bad news}.
+\reverse\straighteniff{if}{ab}
+ {Different letters, obviously.}
+\straightenif{iftrue}{}{Good}{Bad}.
+\Example/
+
+\cslist{
+ !\ifwhatever/conditional/\true\false,
+ !\iffwhatever/conditional/\true
+ }
+This command (introduced in v.1.04) takes a \arg{conditional} which is
+either a \TeX\ conditional (normally expecting \com\fi and perhaps \com\else
+before that) or a conditional whose \true\ and \false\ parts are normally
+given as arguments, like those created by \com\newife. In the first case, it
+is equivalent to \com\straightenif, in the second case it is redundant.
+However, it is useful when one is expecting a conditional whose nature is
+unknown. If \arg{conditional} is a \TeX\ conditional, you're in charge of
+adding space if needed, as with \com\straightenif; unlike the latter, though,
+the \com\if... command itself is given as usual (i.e. no need to remove the
+backslash), which also means it cannot be properly nested in a \TeX\
+conditional (unless itself is embedded in \com\straightenif). Finally, if
+\arg{conditional} is an argument-taking conditional, the \tcode{iff} form (in
+case it comes from \texapi) cannot be used, and conditionals poking at the
+next token cannot be used either. The whole macro can be prefixed with
+\com\reverse.
+
+\Example
+ % See this space too?
+\ifwhatever{\ifnum5=5 }{True.}{False.}
+\newife\iftest
+\reverse\iffwhatever\iftest{True too.}
+\Example/
+
+\description/
+
+
+
+
+
+\description{Conditional expressions}
+
+\cslist{
+ !\ifexpression/expression/\true\false,
+ !\iffexpression/expression/\true
+ }
+This (introduced in v.1.04) evaluates \arg{expression}, which is made of
+subexpressions separated by \com& (and) or \com| (or), a subexpression being
+either a conditional or a braced expression, possibly prefixed with \com-
+(not). The `not' operator has precedence over `and', which has precedence over
+`or', braces being used to group evaluation. The conditionals making up the
+expressions are the same as those passed to \com\ifwhatever (which is used
+internally), i.e. \TeX\ conditionals or argument-taking ones. Space is ignored
+at the beginning of an operand, but not at the end, unless the operand is a
+braced expression. However, such a space is often harmless there (if the
+conditional is a \texapi conditional), and sometimes useful (to delimit for
+instance a number in an \com\ifnum, see the example on the right); it should be
+removed in the usual cases (e.g. after \com\ifcat\ \tcode{XY}). The macro can
+be prefixed with \com\reverse.
+
+\Example
+\def\iffibonacci#1{%
+ \ifexpression{%
+ -\ifnum#1<0 & -\ifnum#1>100 &
+ { \ifnum#1=0 | \ifnum#1=1 |
+ \ifnum#1=2 | \ifnum#1=3 |
+ \ifnum#1=5 | \ifnum#1=8 |
+ \ifnum#1=13 | \ifnum#1=21 |
+ \ifnum#1=34 | \ifnum#1=55 |
+ \ifnum#1=89 }
+ }{#1 is a Fibonacci number lower than 100.}
+ {#1 isn't a Fibonnaci number lower than 100.}%
+ }
+
+\iffibonacci{55}
+\Example/
+
+In the example on the right, the first two conditionals (excluding negative
+numbers and numbers lower than 100) are logically useless, but they save time
+(the third subexpression isn't evaluated in case one of the first two is
+true), and they illustrate how negation and grouping work.
+
+
+
+\cslist{
+ !\ifelseif/statements/
+ }
+This (introduced in v.1.04) is a simple way to evaluate successive
+conditionals until one is found true; the \arg{statements} are any number of
+pairs \arg{conditional}\arg{statement}; when the first true \arg{conditional}
+is found, its associated \arg{statement} is executed and the rest is
+discarded. The conditionals there are the same as with \com\ifwhatever. The
+macro can be prefixed with \com\reverse, in which case the statement
+associated with the first false conditional is executed. If no conditional is
+true (or false, if \com\reverse is used), nothing happens; a default case can
+nonetheless be constructed with a last statement whose conditional is
+\com\iftrue (or \com\iffalse with \com\reverse), as illustrated in the example
+on the right. Spaces are ignored.
+
+The construction is the same thing as embedding each conditional into the
+\false\ part of the previous one; however, it is simpler to write and to read.
+
+\Example
+\def\checkanswer#1{%
+ \ifelseif{%
+ {\ifexpression{ \ifstring{#1}{yes} |
+ \ifstring{#1}{true}} }
+ {You agree.}
+ {\ifexpression{ \ifstring{#1}{no} |
+ \ifstring{#1}{false}} }
+ {You disagree.}
+ \iftrue
+ {I don't understand your answer.}}%
+ }
+
++\checkanswer{You bet!}+
+\Example/
+
+
+\cslist{
+ !\afterfi/code/,
+ !\afterdummyfi/code/
+ }
+You shouldn't use these. The first one closes the current conditional and
+executes \arg{code}. The second one lets go one \com\fi and executes
+\arg{code}. So these are kinds of \com\expandafter's when \arg{code} isn't
+just a command. Anything before the incoming \com\fi is gobbled. The reason
+why you should use one or the other should be clear to you, otherwise you'll
+probably be messing with a conditional.
+
+\Example
+\iftrue
+ \afterdummyfi{\afterfi{Here we are.}}
+\else
+ \iffalse
+ Whatever.
+ \fi
+\fi
+\Example/
+
+\description/
+
+
+
+
+
+
+
+
+\description{Poking at what comes next}
+
+\cslist{
+ \skipspace/code/
+ }
+This gobbles any incoming space, if any, and executes \arg{code}.
+Of course it doesn't require there to be any space to work properly.
+(This was called \com\nospace prior to version 1.02.)
+
+\vskip\baselineskip
+
+All the following conditionals can be prefixed with \com\reverse.
+And in case your head's buzzing, their names are quite regular:
+take an \com\if, \com\ifcat or \com\ifx, add `\tcode{next}', and create
+variants by doubling the \tcode{f} and/or adding \tcode{nospace}
+at the end.
+
+\Example
+\skipspace{foo} bar
+\Example/
+
+\cslist{
+ \ifnext/token/\true\false,
+ \iffnext/token/\true,
+ \ifnextnospace/token/\true\false,
+ \iffnextnospace/token/\true
+ }
+These poke at the next token and see whether it
+has the same character code as \arg{token}. In other
+words, an \com\if test is performed between \arg{token}
+and the next token in the input stream. However, neither
+\arg{token} nor the incoming token are expanded, so that
+they can be control sequences and no unwanted expansion
+will occur. Control sequences are all equal according to
+this test (which can very well take an undefined control
+sequence as \arg{token}). The nospace version must be
+pretty clear: the macro discards all incoming spaces until
+it finds a non-space token to test (unfortunately,
+an implicit space and a space character are undistinguishable
+as far as this test (and the next ones) is concerned, so in
+the very unlikely case where an implicit space was waiting
+in the stream, it'll be gobbled in the nospace variant).
+
+\Example
+Here comes \ifnext e{an }{a }e.
+Here comes \reverse\ifnext e{a }{an }b.
+Here comes
+\iffnextnospace\foo{a control sequence: } \TeX.
+\Example/
+
+\cslist{
+ \ifcatnext/token/\true\false,
+ \iffcatnext/token/\true,
+ \ifcatnextnospace/token/\true\false,
+ \iffcatnextnospace/token/\true
+ }
+These are the same as above with an \com\ifcat test
+instead of \com\if. Again, control sequences aren't expanded
+and they all have the same category code.
+
+\Example
+\def\tex{\TeX\iffcatnext a{ }}
+A \tex is a \tex is a \tex.
+\Example/
+
+\cslist{
+ \ifxnext/token/\true\false,
+ \iffxnext/token/\true,
+ \ifxnextnospace/token/\true\false,
+ \iffxnextnospace/token/\true
+ }
+Once again like the previous commands, this time with
+an \com\ifx, i.e. the definitions of control sequences
+are compared, and in case \arg{token} and/or the next
+token are unexpandable thing, both character code and
+category code are compared. So these are performing
+real \com\ifx tests.
+
+\Example
+\def\foo{not \string\TeX}
+\reverse\iffxnextnospace\TeX
+ {The incoming command isn't \string\TeX: } \foo.
+\Example/
+
+\description/
+
+
+
+
+
+
+\description{String manipulation}
+
+\cslist{
+ !\ifstring/string1//string2/\true\false,
+ !\iffstring/string1//string2/\true
+ }
+These return \true\ if the two strings are identical.
+Category codes aren't taken into account when strings
+are compared.
+
+\Example
+Two \ifstring{abc}{abc}{equal}{unequal} strings
+and an \reverse\iffemptystring{something}{unempty} one.
+\Example/
+
+
+\cslist{
+ !\ifemptystring/string/\true\false,
+ !\iffemptystring/string/\true
+ }
+These return \true\ if \arg{string} is empty.
+
+
+
+
+\cslist{
+ \newstring/string/
+ }
+The following operations (\com\ifprefix, \com\removesuffix, etc.)
+aren't fully expandable by default. However, if a string has been
+previously declared with \com\newstring, they magically become
+fully expandable.
+
+So, in what follows, macros aren't marked as expandable, although
+they can be if the preceding condition is fulfilled. Besides, these
+macro aren't \com\protected even though their default behavior would
+require that they be. But you can always append a \com\noexpand to
+an unprotected command, whereas you cannot force the execution of a
+protected one. (This protecting issue is of course totally irrelevant
+for the \com\removeprefixin and \com\removesuffixin commands, which aren't
+expandable by definition and are thus protected.)
+
+
+
+
+\cslist{
+ \ifprefix/prefix//string/\true\false,
+ \iffprefix/prefix//string/\true
+ }
+This test is true if \arg{string} begins with \arg{prefix}.
+Category codes do matter.
+
+\Example
+\newstring{abc}
+\edef\foo{\ifprefix{abc}{abcd}{True}{False}.}
+\edef\bar{\reverse\iffsuffix{abc}{whatever}{No suffix}.}
+\edef\foobar{\ifcontains{abc}{gee}{Yes}{No}.}
+\meaning\foo\par
+\meaning\bar\par
+\meaning\foobar
+\Example/
+
+\cslist{
+ \ifsuffix/suffix//string/\true\false,
+ \iffsuffix/suffix//string/\true
+ }
+True if \arg{string} ends with \arg{suffix}.
+
+\cslist{
+ \ifcontains/string1//string2/\true\false,
+ \iffcontains/string1//string2/\true
+ }
+Finally, this is true if \arg{string2} contains \arg{string1}.
+
+
+\cslist{
+ \removeprefix/prefix//string/,
+ \removesuffix/suffix//string/
+ }
+These return \arg{string} without \arg{prefix} (resp.
+\arg{suffix}). No test is performed to check that
+\arg{string} indeed begins (resp. ends) with \arg{prefix}
+(resp \arg{suffix}), so these macros make sense only after
+the adequate tests.
+
+\cslist{
+ \removeprefixand/prefix//string//code/,
+ \removesuffixand/suffix//string//code/
+ }
+These do the same as the previous one, but feed the
+resulting string to \arg{code}, between braces. Once again,
+no test is performed beforehand.
+
+\cslist{
+ \removeprefixin/prefix//string/\comarg,
+ \removesuffixin/suffix//string/\comarg
+ }
+These define \comarg\ as \arg{string} without \arg{prefix}
+(resp. \arg{suffix}). No test either. Sorry.
+
+\cslist{
+ \splitstringat/string1//string2//code/
+ }
+This cuts \arg{string2} in two at \arg{string1}'s first occurrence
+and passes the two parts as braced arguments to \arg{code}. And,
+again: no test. (This was called \com\splitstring prior to version
+1.02.)
+
+\Example
+\def\record#1 : #2.{%
+ \par\bgroup
+ \it\ifprefix*{#1}{\removeprefix*{#1} [live]}{#1}
+ \egroup
+ (\ifcontains/{#2}{\splitstringat/{#2}{\dodate}}{#2})
+ }
+\def\dodate#1#2{recorded #1, released #2}
+
+A somewhat incomplete list of fantastic
+records by Frank Zappa:
+\record Absolutely Free : 1967.
+\record The Grand Wazoo : 1972.
+\record L\"ather : 1977/1996.
+\record *Make a Jazz Noise Here : 1988/1991.
+\Example/
+
+\description/
+
+
+
+
+
+
+\description{Various things on the same page}
+
+\cslist{
+ \setcatcodes\barg{list}
+ }
+The \arg{list} argument here means comma separated
+\arg{characters}\verb/=/\arg{category code}, with
+an \ital{s} to \ital{characters} because you can
+concatenate them if you want them to share the same
+\arg{category code}. So, as you might have guessed,
+this set all \arg{characters} to characters with
+catcode \arg{category code}. And it also sets
+\com\restorecatcodes accordingly. The changes are
+local. The \verb/#/ character requires a backslash
+(so do braces and the backslash itself, but that's obvious).
+
+\cslist{
+ \restorecatcodes
+ }
+This restores the catcodes of the characters changed
+with the previous command, which is cumulative, i.e.
+\com\restorecatcodes restores catcodes changed by all preceding
+\com\setcatcodes commands, not only the last one. Since
+changes are local, \com\restorecatcodes may be useless in a group
+(and the effect of \com\restorecatcodes itself is local too).
+
+\Example
+\setcatcodes{\\\#\{\}\%=12,\|=0}
+Hey, were're verbatimizing:
+\def\foo#1{\bar{#1}}%
+|restorecatcodes
+\Example/
+
+\Example
+\bgroup
+And now in a group:\par
+\setcatcodes{z=13}
+\defz{ZZZZZZZZZZZZZZZZZZZZZZZZZZ}
+I'm sleeping: z.\par
+\egroup
+And I'm not: z.
+\Example/
+
+
+
+\vskip\baselineskip
+The trimming macros below are adapted from Will Robertson's \tcode{trimspace}
+package. Note that trimming on the right is dangerous for braces:
+\verb"\trimright{{hello} }" and \verb"\trimright{{hello}}" both result in
+\verb"hello", not \verb"{hello}".
+
+
+\cslist{
+ !\trimleft/string/,
+ !\trimright/string/,
+ !\trim/string/
+ }
+These return \arg{string} with one space removed at the beginning
+or end or both. There's no need to check beforehand whether there
+are indeed such spaces.
+
+\Example
++\trim{ bar }+
+\Example/
+
+\cslist{
+ !\passtrimleft/string//code/,
+ !\passtrimright/string//code/,
+ !\passtrim/string//code/
+ }
+These return \arg{string} trimmed of spaces as a braced argument to
+\arg{code}.
+
+\cslist{
+ \deftrimleft\comarg/string/,
+ \deftrimright\comarg/string/,
+ \deftrim\comarg/string/
+ }
+The same thing again, except now those commands define \comarg\
+to \arg{string}, etc.
+
+\Example
+\deftrimleft\foo{ bar }
++\foo+
+\Example/
+
+\description/
+
+
+
+
+
+
+
+\description{While statements}
+
+\cslist{%
+ !\repeatuntil/number//code/
+ }
+This executes \arg{code} \arg{number} times. The \arg{number}
+argument can be a \com\count register, an integer defined with
+\com\chardef, etc., and of course a string of digits. In any case,
+it is really an argument and must be surrounded by braces if it is
+made of more than one token.
+
+\Example
+We have seen \repeatuntil\pageno{I} pages.\par
+\edef\foo{\repeatuntil3{.}}
+\meaning\foo
+\Example/
+
+
+\cslist{
+ !\dowhile/condition//code/
+ }
+This repeats \arg{code} while \arg{condition} is true. The latter
+must be a `straight' \tcode{if}, i.e. either one of \texapi's
+\com\if... or a \com\straightenif\barg{\TeX\ conditional} construction,
+in both cases without the \true\ and \false\ arguments, because \true\ is actually
+\arg{code}, and \false\ would make no sense. Finally, the conditional
+must be a simple \com\if..., not an \com\iff... version. Once again, this
+makes sense: the \ital{if and only if} clause is implicit in a \ital{while}
+statement. If you use an \com\iff..., you'll end up with many empty braces,
+which is harmless unless you're in a context of expansion. You can use \com\reverse
+in \arg{condition}.
+
+\Example
+\newife\ifbreakloop \def\foo{}
+\dowhile{\reverse\ifbreakloop}
+ {\addleft\foo{a}%
+ \passexpanded\iffstring\foo{aaaa}
+ \breaklooptrue}
+\foo
+\Example/
+
+\Example
+\edef\foo{%
+ The inconvenience of iff...:
+ \dowhile{\straighteniff{ifnum}{4=5 }}
+ {whatever}
+ }
+\meaning\foo
+\Example/
+
+
+
+\cslist{
+ \newwhile\comarg/number//transformations//code/
+ }
+The \com\dowhile macro is not very powerful since
+you must generally change something somewhere to make
+it stops, and thus its expandability is somewhat perfunctory.
+That's why there is \com\newwhile. It creates an expandable \comarg\ which takes
+\arg{number} arguments (up to 9, as usual) and repeats \arg{code}
+indefinetely. So, at first sight, it's bad news. But the point
+is \arg{code} is supposed to launch the \com\breakwhile macro below sooner or
+later, i.e. stop the loop. Besides, on each iteration (barring the first), \arg{transformations}
+are applied to the arguments, and this means: the first argument is
+replaced by the first transformation, the second argument by the second
+transformation, etc. So there must be as many transformations as there
+are arguments, transformations themselves being just code that can
+make reference to the arguments. If you don't want to transform an
+argument, just repeat it in the transformation.
+
+\cslist{
+ !\breakwhile/code/
+ }
+This breaks the current while loop and executes \arg{code}, which can make
+reference to the arguments of the loop.
+
+\cslist{
+ !\changewhile/new arguments/
+ }
+This replaces the default \arg{transformations} defined with \com\newwhile
+and passes the \arg{new arguments} for the next iteration. There
+must be as many arguments as required by the loop. The original
+\arg{transformations} remain in force for the next iterations.
+
+\Example
+ % Transformations.
+\newwhile\largestsquare2{\numexpr(#1+1)}{#2}{%
+ \reverse\straighteniff{ifnum}{\numexpr(#1*#1)<#2 }
+ {The largest number whose square
+ is smaller than #2 is
+ \breakwhile{\the\numexpr(#1-1).}}}
+\largestsquare{1}{50}\par
+\largestsquare{1}{200}
+\Example/
+
+
+\description/
+
+
+
+
+\description{For statements on the fly}
+
+\cslist{
+ \dofor/list//parameter text/\barg{definition}/coda/
+ }
+This runs \arg{definition} on each occurrence of
+\arg{parameter text} in \arg{list}. The \arg{parameter text}
+is a real one, hence the braces around \arg{definition}.
+The \arg{coda} is executed if and only if the loop goes
+to its natural end, i.e. it is not terminated by one of
+the commands below. It must be present, even if you don't
+want one (in which case, leave it empty), and it can't make
+any reference to the arguments of the parameter text.
+A loop thus executed is absolutely
+not expandable. You can embed as many loops as you want
+(but don't forget to double the \verb/#/).
+
+\cslist{
+ \dofornoempty
+ }
+This is the same as above, except \arg{definition} is not executed
+when the \ital{first} argument is empty.
+
+
+\cslist{
+ \breakfor/code/
+ }
+This breaks the current loop and executes \arg{code};
+the \arg{coda} of the loop is not executed.
+
+\cslist{
+ \retrieverest/code/
+ }
+This also breaks the loop, but it retrieves the remaining
+arguments in the list and pass them as a braced argument
+to \arg{code}.
+
+\cslist{
+ \pausefor/code/
+ }
+This interrupts the loop and executes \arg{code}; the loop
+being interrupted means you're in the middle of the list, and
+you can process it. Such a pause must be terminated by a
+\com\resumefor if you don't want nasty internal code
+to surface.
+
+\cslist{
+ \resumefor\com\dofor
+ }
+This restarts the current loop. It is necessary to specify
+\com\dofor, because \com\resumefor is more general and is
+used to restart any kind of loop, especially those defined
+with \com\newfor (see next page).
+
+\Example
+\dofor{a,b,c,}#1,{[#1]}{}
+\Example/
+
+\Example
+\dofor{(a=13)(b=3)(c=54)(d=33)(e=22)}(#1=#2){%
+ \straighteniff{ifnum}{#2>50 }
+ {\breakfor{There's a number larger than 50: #1=#2.}}}
+ {No number larger than 50.}
+\Example/
+
+\Example
+\dofornoempty{dd,e,,acb,3,ee4,,,}#1,{%
+ \dofor{#1}##1{[##1]}{}...%
+ }{}
+\Example/
+
+\vskip\baselineskip
+
+The \com\dofor loop does not perform any kind of normalisation
+on the list. I.e. the list must be exactly designed to match
+the parameter text, including spaces and other unwelcome guests.
+
+The \com\dofor macro is useful for straightforward loops used once
+or twice in a document. But for fully fledged total-control
+fully expandable hey-that's-too-cool loops, you should use the
+\com\newfor construction.
+
+
+\description/
+
+
+
+
+
+
+
+
+
+
+
+
+
+\description{For statements: first steps}
+
+\cslist{
+ \newfor\comarg\barg{optional passed arguments},
+ \zilch\kern-4em/parameter text/\barg{definition}[/optional coda/]
+ }
+This creates a recursive \comarg\ that will consume all input
+with structure \arg{parameter text}. Let's forget
+\barg{optional arguments} for a while, since they're optional
+(albeit braced). Let's forget the optional coda as well. So
+it boils down to:
+
+\vskip\baselineskip
+\noindent\com\newfor\comarg\arg{parameter text}\barg{definition}
+\vskip\baselineskip
+
+\noindent so that basically \com\newfor works like \com\def.
+The \arg{parameter text} is a real parameter
+text as with \com\def, just like \barg{definition} is a real
+definition, hence the braces. The only difference is there must
+be at least one argument, because we need something to loop
+upon. I.e. \arg{parameter text} is at least \verb/#1/.
+
+Now you can launch \comarg\ on an argument which is made of as
+many occurrences of \arg{parameter text} as you wish, and on each
+occurrence \arg{definition} will be executed. So you've created
+a loop. And the good news is that this loop is fully expandable.
+
+It is your job to make sure that what is fed to \comarg\ has
+the correct argument structure.
+
+If \arg{coda} is specified, it is executed when the loop ends,
+if it ends naturally, i.e. by exhausting its input, and not
+by some of the loop-breaking commands on the next page. There
+can be no call to arguments of \arg{parameter text} in the
+\arg{coda}, e.g.
+
+\example
+\newfor\foo#1{...}[...#1...]
+\example/
+
+\noindent is impossible. (You'll get raw inner code.) Such
+reference to arguments in the \arg{coda} is possible only
+with passed arguments, as you'll see in two pages
+from here.
+
+(Note that if there's no \arg{coda}, any space will be gobbled
+after \barg{definition}. This is so because I thought it was better
+to be able to write \tcode{[\arg{code}]} after a space, e.g.
+a line end, than to stick it to \barg{definition}, even though
+that brings this little inconvenience, which is probably harmless
+since \com\newfor is very unlikely to end up anywhere in horizontal
+mode, i.e. in a paragraph.)
+
+Macro thus created can be freely embedded into one another.
+
+\Example
+\newfor\foo#1,{(#1)}
+\foo{a,b,c,}
+\Example/
+
+
+\cslist{
+ \newfornoempty
+ }
+The \com\newfornoempty is similar to \com\newfor, except \arg{definition}
+is not executed in the case the \ital{first} argument is empty.
+
+
+\Example
+\newfornoempty\foo(#1,#2){[#1/#2]}
+ [Input exhausted.]
+\edef\bar{\foo{(a,b)(c,d)(,e)(f,)}}
+\meaning\bar
+\Example/
+
+\Example
+\newfor\values#1=#2,{%
+ The value of #1 is #2.\par
+ }
+\def\setvalues#1{%
+ \ifsuffix,{#1}{\values{#1}}
+ {\values{#1,}}%
+ }
+\setvalues{A=12,B=45,}
+\setvalues{C=34}
+\Example/
+
+\Example
+\newstring, % \pdfliteral requires full expansion!
+\def\drawline#1{
+ 0 0 m % Initializes the path
+ \ifsuffix,{#1}{\drawlinefor{#1}}
+ {\drawlinefor{#1,}}
+ } % l = line
+\newfor\drawlinefor#1 #2,{#1 #2 l }[S]% S = draw path
+\pdfliteral{
+ q % kind of PDF \bgroup
+ 1 0 0 RG \drawline{20 10, 40 -15, 100 0,}
+ 0 1 0 RG \drawline{30 -15, 60 10, 130 0}
+ Q} % kind of PDF \egroup
+\Example/
+
+\description/
+
+
+
+
+
+
+
+
+\description{For statements: interruptions}
+\advance\vsize by 2\baselineskip
+
+\noindent (The commands on this page are the same as those
+introduced with \com\dofor; they're explained
+more thoroughly here.)
+
+\cslist{
+ !\breakfor/code/
+ }
+Used inside a loop created with \com\newfor, this
+interrupts it, gobbles the remaining input, and
+executes \arg{code}. If the loop had a \arg{coda},
+it is not executed. Any material between the \com\breakfor
+command and the end of the definition of the loop
+is gobbled. It is especially bad with conditionals,
+so you should use \com\afterfi, or better yet a
+\com\straightenif version.
+
+\Example
+\newfor\foo#1{%
+ \straighteniff{if}{\noexpand#1z}
+ {\breakfor{There is a `z'!}}
+ #1... % This will be gobbled.
+ }[There is no `z'...]
+
+\foo{abcdef}\par
+\foo{abzdef}
+\Example/
+
+\cslist{
+ !\retrieverest/code/
+ }
+This does the same thing as \com\breakfor, i.e. breaks the
+current loop, but it passes the rest of the material initially
+passed to the loop as a braced argument to \arg{code}. Arguments
+in that remaining material
+aren't extracted from their surrounding delimiters, if any.
+
+\Example
+\def\remainder#1{(And `#1' was still to come.)}
+\newfor\foo#1=#2,{%
+ \unless\ifnum#1=#2
+ \afterfi{% Thrilling...
+ \retrieverest{There is a false equation!
+ \remainder}}%
+ \fi}
+\foo{3=3,2=2,451=451,7=4,78=78,9=0,}
+\Example/
+
+
+\cslist{
+ !\pausefor/code/,
+ !\resumefor/loop command/
+ }
+The \com\pausefor command stops the loop and executes \arg{code}.
+That means that you're in the middle of the material being processed and
+you can act on it. It is useful if the material isn't totally
+regular. For instance, a typical Bib\TeX\ entry is a list of
+`\tcode{\arg{field}=\arg{value}}' pairs, with each pair
+terminated by a comma and the \arg{value} either between braces
+or quotes. Thus, you can't have a simple
+
+\example
+\newfor\bibfor#1=#2,{#1...#2}
+\example/{}{}
+
+\noindent to process the entry, because a \arg{value} may be delimited
+by quotes and still contain a comma, and quotes mean nothing to \TeX,
+so the comma will be mistaken for the delimiter. An oversimplified
+solution with \com\pausefor can be seen on the right. The loop actually
+works on the predictable part only (before the equal sign), is interrupted,
+the value is retrieved, and the loop is resumed.
+(Why one would want to process a Bib\TeX\ entry
+with \TeX\ in the first place is a question I can personally answer.)
+
+Once \com\pausefor is used, there must be somewhere down your code
+a \com\resumefor\comarg\ statement, to launch the loop again, otherwise
+you'll end up stumbling on some nasty internal code. It is impossible
+to know (in a perfectly expandable way) the loop we're currently in, hence
+the \comarg\ as a argument to \com\resumefor: it is the loop one wants to
+start again. Yes, it means you can also process the rest of the material
+with another loop, the consequences of which I leave it to you to ponder.
+Passed arguments, if any, should follow \comarg\ after \com\resumefor.
+
+
+\Example
+\newfor\bibfor#1={%
+ \pausefor{\getvalue{#1}}}
+\def\getvalue#1{%
+ \trim{#1}:
+ \ifnextnospace"{\getquotevalue}
+ {\getcommavalue}
+ }
+\def\getquotevalue"#1",{\showvalue{#1}}
+\def\getcommavalue#1,{\showvalue{#1}}
+\def\showvalue#1{%
+ {\it\trim{#1}}.\par\resumefor\bibfor}
+
+\bibfor{
+ Author = {John Doe},
+ Title = "Me, myself and I",
+ Year = 1978,}
+\Example/
+
+\description/
+
+
+
+
+
+
+
+\description{For statements: passed arguments}
+\advance\vsize by \baselineskip
+
+
+Suppose you want to retrieve the largest number in
+a list a numbers. The first example on the right shows
+you how to do so. But this solution won't work
+if you need the loop to be expandable, because there's
+a number assignment.
+
+\Example
+\newcount\largest
+\newfor\findlargest#1,{%
+ \ifnum#1>\largest
+ \largest=#1
+ \fi}
+ [The largest number is \the\largest.]
+
+\findlargest{45,33,1,4844,12,655,}
+\Example/
+
+That's why loops defined with \com\newfor can pass
+arguments from one iteration to the next. The number of those arguments
+are the \barg{optional passed arguments} in the description
+of \com\newfor two pages ago. So, a typical fully-fledged
+use of \com\newfor is:
+
+\example
+\newfor\myloop{2}#3=#4,{...#1...#2...#3...#4...}
+ [...#1...#2...]
+\example/
+
+\noindent which means that \com\myloop takes four arguments,
+two of which are actually passed arguments, the third and the
+four being in the recursive list that \com\myloop runs on.
+Besides, as you can see, passed arguments can appear in
+\arg{coda}.
+Now a call to \com\myloop looks like:
+
+\example
+\myloop{one}{two}{a=1,b=2,...}
+\example/
+
+\noindent where \tcode{one} and \tcode{two} are passed
+arguments. There can be up to 8 passed arguments (since there must
+be at least one argument to loop on), and if there are
+{\it n} of them, numbering of arguments in \arg{parameter text} must
+start at {\it n}+1, as in the above example.
+
+
+\cslist{
+ \passarguments/arg1//arg2/...
+ }
+Passed arguments are automatically retrieved from one iteration
+to the next. However, if you can't change them, they aren't very
+interesting. Hence this command: it passes \arg{arg1}, \arg{arg2}, etc.,
+to the next iteration, replacing the previous ones. There
+must be as many arguments to \com\passarguments as required
+by the loop, even if you don't want to pass new values for
+all (in which case, just pass the previous value).
+Beware: \com\passarguments ends the current iteration, just
+like \com\breakfor,
+and any remaining material in the definition of the loop
+is gobbled.
+
+Thus, the second version of our \com\findlargest command
+works as follows: it takes one harmless passed argument,
+and loops on the following list. Obviously, 45 is larger
+than 0, so it is passed as the new first argument; then,
+33 is not larger than 45, so nothing happen, and 45 is
+implicitly passed again as the first argument, and so
+on and so forth, until finally the \arg{coda} prints
+the largest number in the list. And, as illustrated
+by the \com\edef, everything expands nicely.
+
+\Example
+\newfor\findlargest{1}#2,{%
+ \straighteniff{ifnum}{#2>#1 }
+ {\passarguments{#2}}%
+ }
+ [The largest number is #1.]
+
+\edef\foo{\findlargest{0}{45,33,1,4844,12,655,}}
+\meaning\foo
+\Example/
+
+\description/
+
+
+
+
+
+
+
+
+\description{For statements: examples}
+
+
+Loops created with \com\newfor are somewhat tricky
+to get a hand on, so here are some examples. First
+of all, you might think that it would be nice to
+be able to define a loop whose argument structure
+is defined but not its replacement text, so that you
+can call it on similar lists but with different
+operations. For instance, a generic loop that works
+on all comma-separated lists. You can't do that exactly
+with \com\newfor, but you can easily use passed arguments
+to do something similar, e.g.:
+
+\example
+\newfor\commalist{1}#2,{#1{#2}}
+\commalist\tree{leaf,fruit,twig,}
+\commalist\scale{b minor,f sharp,whatever lydian}
+\example/
+
+\noindent with \com\tree and \com\scale defined to
+process one argument: \com\commalist itself has no real
+definition, and you don't have to bother about passed
+arguments (although you can still use them).
+
+\Example
+\newfor\sortnum{1}#2,{%
+ \subsortnum{#2}{}{#1}%
+ }[Sorted list: #1]
+\newfor\subsortnum{2}#3,{%
+ \straightenif{ifnum}{#1<#3 }
+ {\retrieverest{\passtosortnum{#2#1,#3,}}}
+ {\passarguments{#1}{#2#3,}}%
+ }[\passarguments{#2#1,}]
+\def\passtosortnum#1#2{\passarguments{#1#2}}
+
+\sortnum{}{5,12,-161,3,0,63,22,-45,}
+\Example/
+
+The first example sorts a list of numbers separated
+by commas. The first loop, \com\sortnum, takes a passed
+argument which contains the numbers already sorted (so
+it is empty at the beginning) and it runs on the list
+to be sorted. The second loop, \com\subsortnum, takes
+two passed arguments: the first one is the number under
+investigation, the second one is the list of numbers
+smaller than the number under investigation (so it is
+empty too at the beginning), and it is updated each
+time we find such a number as the third, non-passed
+arguments to \com\subsortnum, which is an element of
+the list of already sorted numbers as preserved in
+\com\sortnum's first passed argument... got that?
+
+Let's follow some iterations. The first call is:
+
+\example
+ % incoming arguments
+\sortnum{}5,12,-161,3,0,63,22,-45,
+\example/
+
+\noindent and it calls
+
+\example
+\subsortnum{5}{}{}
+\example/
+
+\noindent so that \com\subsortnum terminates immediately:
+it has no input. So it calls its coda:
+
+\example
+\passarguments{5,}
+\example/
+
+\noindent (where \tcode{5} is really the first argument following
+the empty second one). Since \com\subsortnum has terminated, this
+call to \com\passarguments is for \com\sortnum, hence the following
+iteration is:
+
+\example
+ % incoming arguments
+\sortnum{5,}12,-161,3,0,63,22,-45,
+--> \subsortnum{12}{}5,
+\example/
+
+\noindent Ah, something new. 12 is larger than 5, so the conditional
+is false. So \com\subsortnum passes the following to itself:
+
+\example
+\passarguments{12}{5,}
+--> \subsortnum{12}{5,}{}
+\example/
+
+\noindent and once again it terminates, hence:
+
+\example
+\passarguments{5,12,} % incoming arguments
+--> \sortnum{5,12,}-161,3,0,63,22,-45,
+ % incoming argument
+--> \subsortnum{-161}{}5,12,
+\example/
+
+\noindent and obviously -161 is smaller than 5, so the rest of the list
+is retrieved with \com\retrieverest and passed as the second argument of
+\com\passtosortnum. Once again, since this terminates \com\subsortnum,
+\com\passarguments in \com\passtosortnum is for \com\sortnum:
+
+\example
+\passtosortnum{-161,5,}{12,}
+ % incoming arguments
+--> \sortnum{-161,5,12,}3,0,63,22,-45,
+ % incoming arguments
+--> \subsortnum{3}{}-161,5,12,
+--> \subsortnum{3}{-161,}5,12,
+--> \passarguments{161,3,5,12,}
+--> \sortnum{-161,3,5,12,}0,63,22,-45,
+...
+\example/
+
+
+\noindent and so on and so forth.
+
+Replace the test with any other one and you
+have a generic sorting function, as in the example
+on the right, which sorts entries alphabetically
+or chronologically. It is possible to make things both
+cleverer and simpler. (The Lua code compares two
+strings, and it could very well have handled the
+\com\year version.)
+
+\Example
+\newfor\sortbooks{2}#3(#4),{%
+ \subsortbooks#1{#3(#4)}{}{#2}
+ }[\bgroup\it#2\egroup]
+\newfor\subsortbooks{3}#4(#5),{%
+ #1#2{#4}{#5}{#3}
+ }[\passarguments#1{#3#2,}]
+
+\def\alpha#1(#2)#3#4#5{%
+ \directlua{
+ if "#1"<"#3" then
+ tex.print("\noexpand\\firstoftwo")
+ else
+ tex.print("\noexpand\\secondoftwo")
+ end}
+ {\retrieverest{%
+ \passtosortbooks\alpha{#5#1(#2),#3(#4),}}}
+ {\passarguments\alpha{#1(#2)}{#5#3(#4),}}
+ }
+\def\year#1(#2)#3#4#5{
+ \straightenif{ifnum}{#2<#4 }
+ {\retrieverest{%
+ \passtosortbooks\year{#5#1(#2),#3(#4),}}}
+ {\passarguments\year{#1(#2)}{#5#3(#4),}}
+ }
+\def\passtosortbooks#1#2#3{\passarguments#1{#2#3}}
+
+\def\books{
+ Oblivion (2004),
+ Infinite Jest (1996),
+ Brief Interviews with Hideous Men (1999),
+ Girl with Curious Hair (1989),
+ The Broom of the System (1987),
+ The Pale King (2011),% No parasitic space!
+ }
+David Foster Wallace's books in alphabetical order:\par
+\passexpanded{\sortbooks\alpha{}}\books \par
+David Foster Wallace's books ordered by date:\par
+\passexpanded{\sortbooks\year{}}\books
+\Example/
+
+\vskip\baselineskip
+
+The next example is a palindrome detector: it returns
+true if the string it is fed is made of a string followed
+by itself reverse (which is not the exact definition of
+a palindrome, which is a string that is its own reverse,
+but we keep things simple).
+
+The first loop, \com\palincount, simply counts the number
+of characters in the string; it also reaccumulates it
+as its second argument, something that could be avoided
+if there was a wrapper macro. Once it is finished, it
+passes the original string along with half the number
+of characters to \com\palincheck, which simply accumulates
+in reverse this number of characters, by decreasing it
+on each iteration. Once this number is exhausted, it
+compares what it has accumulated to what there remains
+to be processed, and if both strings match, the original
+string is a palindrome.
+
+\Example
+\newfor\palincount{2}#3{%
+ \passarguments{\numexpr(#1+1)}{#2#3}%
+ }[\palincheck{\numexpr(#1/2)}{}{#2}]
+\newfor\palincheck{2}#3{%
+ \reverse\straightenif{ifnum}{\numexpr(#1-1)>0 }
+ {\retrieverest{\compare{#3#2}}}
+ {\passarguments{\numexpr(#1-1)}{#3#2}}%
+ }
+\def\compare#1#2{%
+ \ifstring{#1}{#2}{TRUE}{FALSE}%
+ }
+
+\edef\foo{\palincount{0}{}{abcdeffedcba}}
+\edef\bar{\palincount{0}{}{abcdff}}
+\meaning\foo, \meaning\bar
+\Example/
+
+
+\description/
+
+
+\bye
diff --git a/macros/generic/texapi/texapi.tex b/macros/generic/texapi/texapi.tex
new file mode 100644
index 0000000000..2c81e5a729
--- /dev/null
+++ b/macros/generic/texapi/texapi.tex
@@ -0,0 +1,964 @@
+% This is the texapi package.
+% Relevant information can be found in texapi-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: October 2011.
+%
+\ifx\texapialreadyloaded\somethingtotallyundefined
+\else
+ \expandafter\endinput
+\fi
+\let\texapialreadyloaded\relax
+\ifx\eTeXversion\somethingtotallyundefined
+ \errmessage{texapi error: You need eTeX to run this. I quit}
+ \expandafter\endinput
+\fi
+%
+\def\texapiversion{1.04}
+\expandafter\edef\csname pi@restorecatcodes\endcsname{%
+ \catcode`\noexpand\@=\the\catcode`@\relax
+ \catcode`\noexpand\_=\the\catcode`_\relax
+ }
+\catcode`\@=11 \catcode`\_=11
+%
+%
+%
+%
+%
+% ENGINES
+%
+\chardef\texenginenumber=0
+\ifdefined\XeTeXinterchartoks
+ \chardef\texenginenumber=1
+\else
+% LuaTeX doesn't have \pdfstrcmp anymore.
+ \ifdefined\directlua
+ \chardef\texenginenumber=3
+ \else
+ \ifdefined\pdfstrcmp
+ \chardef\texenginenumber=2
+ \fi
+ \fi
+\fi
+%
+%
+%
+%
+% FORMATS
+%
+% It'd be safer if \formatnumber was already
+% defined in a wrapper file for ConTeXt and LaTeX.
+%
+\unless\ifdefined\formatnumber
+ \chardef\formatnumber=0
+ \def\pi@temp{plain}
+ \ifx\fmtname\pi@temp
+ \chardef\formatnumber=1
+ \else
+ \def\pi@temp{eplain}
+ \ifx\fmtname\pi@temp
+ \chardef\formatnumber=2
+ \else
+ % I'm not sure what ConTeXt's doing with \fmtname,
+ % so I make do with this lovely control sequence.
+ \ifdefined\inspectnextoptionalcharacter
+ \chardef\formatnumber=3
+ \else
+ \def\pi@temp{LaTeX2e}
+ \ifx\fmtname\pi@temp
+ \chardef\formatnumber=4
+ \ifdefined\ExplSyntaxOn
+ \chardef\formatnumber=5
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+\fi
+%
+% We need to get some primitives back.
+% More should be done, probably.
+%
+\ifnum\formatnumber=3
+ % ConTeXt
+ \let\priminput\normalinput
+ \let\primunexpanded\normalunexpanded
+ \def\loadmacrofile#1{\usemodule[#1]}
+ \def\senderror#1#2{%
+ \writestatus{#1 error}{#2}%
+ }
+\else
+ \ifnum\formatnumber=4
+ % LaTeX2e
+ \let\priminput\@@input
+ \let\primunexpanded\unexpanded
+ \let\loadmacrofile\RequirePackage
+ \def\senderror#1#2{%
+ \PackageError{#1}{#2}{}%
+ }
+ \else
+ \ifnum\formatnumber=5
+ % LaTeX3
+ % I don't know if this is of any good.
+ % LaTeX3 will either not rename those primitives,
+ % or turn all primitives to error messages (nightmare),
+ % as far as I can see.
+ \expandafter\let\expandafter\priminput\csname tex_input:D\endcsname
+ \expandafter\let\expandafter\primunexpanded\csname etex_unexpanded:D\endcsname
+ \let\loadmacrofile\RequirePackage
+ \def\senderror#1#2{%
+ \PackageError{#1}{#2}{}%
+ }
+ \else
+ % Plain and eplain, or an unknown format.
+ \let\priminput\input
+ \let\primunexpanded\unexpanded
+ \def\loadmacrofile#1{\priminput#1 }
+ \def\senderror#1#2{%
+ \errmessage{#1 error: #2}%
+ }
+ \fi
+ \fi
+\fi
+%
+%
+%
+%
+% INTERNAL UTILITIES
+%
+\def\pdef{\protected\def}
+\def\pi@terminator{\senderror{texapi}{This shouldn't be happening}}
+\long\def\pi@gobbletoterminator#1#2\pi@terminator{#1} % I generally want something to happen after a terminator.
+%
+%
+%
+%
+% ARGUMENTS MANIPULATION
+%
+\long\def\gobbleone#1{} \long\def\gobbletwo#1#2{} \long\def\gobblethree#1#2#3{}
+\long\def\gobblefour#1#2#3#4{} \long\def\gobblefive#1#2#3#4#5{} \long\def\gobblesix#1#2#3#4#5#6{}
+\long\def\gobbleseven#1#2#3#4#5#6#7{} \long\def\gobbleeight#1#2#3#4#5#6#7#8{} \long\def\gobblenine#1#2#3#4#5#6#7#8#9{}
+%
+\long\def\gobbleoneand#1#2{#1} \long\def\gobbletwoand#1#2#3{#1} \long\def\gobblethreeand#1#2#3#4{#1}
+\long\def\gobblefourand#1#2#3#4#5{#1} \long\def\gobblefiveand#1#2#3#4#5#6{#1} \long\def\gobblesixand#1#2#3#4#5#6#7{#1}
+\long\def\gobblesevenand#1#2#3#4#5#6#7#8{#1} \long\def\gobbleeightand#1#2#3#4#5#6#7#8#9{#1}
+\long\def\gobblenineand#1#2#3#4#5#6#7#8#9{\gobbleoneand{#1}}
+%
+\long\def\unbrace#1{#1} \long\def\firstoftwo#1#2{#1} \long\def\secondoftwo#1#2{#2}
+%
+\long\def\swapargs#1#2{#2#1} \long\def\swapbraced#1#2{{#2}{#1}}
+\long\def\swapleftbraced#1#2{{#2}#1} \long\def\swaprightbraced#1#2{#2{#1}}
+%
+\long\def\passexpanded#1#2{\expandafter\swaprightbraced\expandafter{#2}{#1}}
+\long\def\passexpandednobraces#1#2{\expandafter\swapargs\expandafter{#2}{#1}}
+%
+\def\emptycs{} \def\spacecs{ }
+\bgroup
+\def\:{\global\let\spacechar= }\: %
+\egroup
+%
+%
+%
+%
+% COMMAND DEFINITIONS
+%
+% All the \...cs stuff must be \long, because
+% even though \par is (generally) unexpandable
+% it can be \string'ed.
+\long\def\usecs#1{\csname#1\endcsname}
+\long\def\usecsafter#1{\expandafter\expandafter\csname#1\endcsname}
+\long\def\noexpandcs#1{\expandafter\noexpand\csname#1\endcsname}
+\long\def\unexpandedcs#1{\primunexpanded\expandafter\expandafter\expandafter{\csname#1\endcsname}}
+\long\def\passcs#1#2{\expandafter\swapargs\csname#2\endcsname{#1}}
+\long\def\passexpandedcs#1#2{\passcs{\passexpanded{#1}}{#2}}
+\long\def\commandtoname#1{\expandafter\gobbleone\string#1}
+%
+\long\pdef\defcs#1{\expandafter\def \csname#1\endcsname}
+\long\pdef\edefcs#1{\expandafter\edef \csname#1\endcsname}
+\long\pdef\gdefcs#1{\expandafter\gdef \csname#1\endcsname}
+\long\pdef\xdefcs#1{\expandafter\xdef \csname#1\endcsname}
+\long\pdef\letcs#1{\expandafter\let \csname#1\endcsname}
+% If \csname#2\endcsname is undefined,
+% we don't want to set it to \relax.
+\long\pdef\lettocs #1#2{\ifcs{#2}{\expandafter\let\expandafter#1\csname#2\endcsname}{\let#1\somethingtottallyundefined}}
+\long\pdef\letcstocs #1#2{%
+ \ifcs{#2}
+ {\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname#1\endcsname\csname#2\endcsname}
+ {\expandafter\let\csname#1\endcsname\somethingtotallyundefined}%
+ }
+%
+\long\pdef\addleft#1#2{%
+ \edef#1{\primunexpanded{#2}\primunexpanded\expandafter{#1}}%
+ }
+\long\pdef\eaddleft#1#2{%
+ \edef#1{#2\primunexpanded\expandafter{#1}}%
+ }
+\long\pdef\addleftcs#1#2{%
+ \edefcs{#1}{\primunexpanded{#2}\unexpandedcs{#1}}%
+ }
+\long\pdef\eaddleftcs#1#2{%
+ \edefcs{#1}{#2\unexpandedcs{#1}}%
+ }
+\long\pdef\addright#1#2{%
+ \edef#1{\primunexpanded\expandafter{#1}\primunexpanded{#2}}%
+ }
+\long\pdef\eaddright#1#2{%
+ \edef#1{\primunexpanded\expandafter{#1}#2}%
+ }
+\long\pdef\addrightcs#1#2{%
+ \edefcs{#1}{\unexpandedcs{#1}\primunexpanded{#2}}%
+ }
+\long\pdef\eaddrightcs#1#2{%
+ \edefcs{#1}{\unexpandedcs{#1}#2}%
+ }
+%
+%
+%
+% COMMAND TESTING
+%
+%
+\def\reverse#1{%
+ \ifcs{pi@reverse_\commandtoname#1}
+ {\usecs{pi@reverse_\commandtoname#1}}
+ {\unless#1}%
+ }
+%
+\def\pi@ifdef_simple#1#2{%
+ \long\def#1##1{%
+ #2%
+ \expandafter\firstoftwo
+ \else
+ \expandafter\secondoftwo
+ \fi
+ }%
+ \defcs{pi@reverse_\commandtoname#1}{\expandafter\unless#1}%
+ % \iff... version
+ \long\defcs{if\expandafter\gobbletwo\string#1}##1{%
+ #2%
+ \expandafter\unbrace
+ \else
+ \expandafter\gobbleone
+ \fi
+ }%
+ \defcs{pi@reverse_if\expandafter\gobbletwo\string#1}{\passcs{\expandafter\unless}{if\expandafter\gobbletwo\string#1}}%
+ }
+%
+\pi@ifdef_simple\ifcommand{\ifdefined#1}
+\pi@ifdef_simple\ifcs{\ifcsname#1\endcsname}
+\pi@ifdef_simple\ifemptycommand{\ifx#1\emptycs}
+%
+\def\pi@ifdef_onearg#1{%
+ \long\defcs{pi@reverse_\commandtoname#1}##1##2##3{#1{##1}{##3}{##2}}%
+ % This is the \iff... version
+ \long\defcs{if\expandafter\gobbletwo\string#1}##1##2{#1{##1}{##2}{}}%
+ \long\defcs{pi@reverse_if\expandafter\gobbletwo\string#1}##1##2{#1{##1}{}{##2}}%
+ % In many cases, \long is better, otherwise it does no real harm.
+ \long\def#1##1%
+ }
+\pi@ifdef_onearg\ifemptycs{%
+ \ifcs{#1}
+% No point using \ifxcs, that would run useless tests.
+ {\expandafter\ifx\csname#1\endcsname\emptycs
+ \expandafter\firstoftwo
+ \else
+ \expandafter\secondoftwo
+ \fi}
+ \secondoftwo
+ }
+\def\pi@ifdef_twoarg#1{%
+ \long\defcs{pi@reverse_\commandtoname#1}##1##2##3##4{#1{##1}{##2}{##4}{##3}}%
+ \long\defcs{if\expandafter\gobbletwo\string#1}##1##2##3{#1{##1}{##2}{##3}{}}%
+ \long\defcs{pi@reverse_if\expandafter\gobbletwo\string#1}##1##2##3{#1{##1}{##2}{}{##3}}%
+ \long\def#1##1##2%
+ }
+%
+\pi@ifdef_twoarg\ifxcs{%
+ \ifcs{#1}
+ {\expandafter\ifx\csname#1\endcsname#2%
+ \expandafter\firstoftwo
+ \else
+ \expandafter\secondoftwo
+ \fi}
+ {\ifcommand#2\secondoftwo\firstoftwo}
+ }
+%
+\pi@ifdef_twoarg\ifxcscs{%
+ \ifcs{#1}
+ {\ifcs{#2}
+ {\passcs{\expandafter\ifx\csname#1\endcsname}{#2}%
+ \expandafter\firstoftwo\else\expandafter\secondoftwo\fi}
+ {\secondoftwo}}
+ {\ifcs{#2}
+ {\secondoftwo}
+ {\firstoftwo}}
+ }
+%
+%
+%
+%
+% CUSTOM \IF'S
+%
+\pdef\newife#1{%
+ \expandafter\passexpandednobraces\expandafter\pi@newif_strip\expandafter{\expandafter\gobbleone\string#1\pi@terminator}
+ }
+\bgroup
+\uccode`2=`i \uccode`3=`f
+\uppercase{
+ \gdef\pi@newif_strip23#1\pi@terminator{%
+ \pi@newif_def{#1}%
+ }
+ }
+\egroup
+%
+\def\pi@newif_def#1{%
+ \letcs{if#1}\secondoftwo
+ \long\edefcs{pi@reverse_if#1}##1##2{\noexpandcs{if#1}{##2}{##1}}%
+ \edefcs{iff#1}{\noexpandcs{if#1}\noexpand\unbrace\noexpand\gobbleone}%
+ \edefcs{pi@reverse_iff#1}{\noexpandcs{if#1}\noexpand\gobbleone\noexpand\unbrace}%
+ \defcs{#1true}{%
+ \letcs{if#1}\firstoftwo
+ }%
+ \defcs{#1false}{%
+ \letcs{if#1}\secondoftwo
+ }%
+ }
+%
+\long\def\straightenif#1#2{%
+ \usecs{#1}#2%
+ \expandafter\firstoftwo
+ \else
+ \expandafter\secondoftwo
+ \fi
+ }
+\long\def\straighteniff#1#2{%
+ \usecs{#1}#2%
+ \expandafter\unbrace
+ \else
+ \expandafter\gobbleone
+ \fi
+ }
+\long\def\pi@reverse_straightenif#1#2{%
+ \usecs{#1}#2%
+ \expandafter\secondoftwo
+ \else
+ \expandafter\firstoftwo
+ \fi
+ }
+\long\def\pi@reverse_straighteniff#1#2{%
+ \usecs{#1}#2%
+ \expandafter\gobbleone
+ \else
+ \expandafter\unbrace
+ \fi
+ }
+%
+\pi@ifdef_onearg\ifwhatever{%
+ #1%
+ \ifx\pi@ifwhatever_false aa%
+ \pi@ifwhatever_true
+ \else
+ \expandafter\expandafter\expandafter\firstoftwo
+ \fi
+ \else
+ \expandafter\secondoftwo
+ \fi
+ }
+\def\pi@ifwhatever_false#1\fi#2\fi{\secondoftwo}
+\def\pi@ifwhatever_true#1\fi#2\fi{\fi\firstoftwo}
+%
+\pi@ifdef_onearg\ifexpression{%
+ \pi@ifexpression_or#1|\pi@terminator
+ }
+\def\pi@ifexpression_or#1|#2\pi@terminator{%
+ \ifemptystring{#2}
+ {\pi@ifexpression_and#1&\pi@terminator}
+ {\ifexpression{#1}{\firstoftwo}{\pi@ifexpression_removeor#2\pi@terminator}}%
+ }
+\def\pi@ifexpression_and#1&#2\pi@terminator{%
+ \ifemptystring{#2}
+ {\passtrimleft{#1}\pi@ifexpression_not}
+ {\ifexpression{#1}{\pi@ifexpression_removeand#2\pi@terminator}{\secondoftwo}}%
+ }
+\def\pi@ifexpression_removeor#1|\pi@terminator{%
+ \pi@ifexpression_or#1|\pi@terminator
+ }
+\def\pi@ifexpression_removeand#1&\pi@terminator{%
+ \pi@ifexpression_or#1|\pi@terminator
+ }
+\def\pi@ifexpression_not#1{%
+ \ifprefix-{#1}% See line 858, where \newstring{-} is declared, so this remains expandable.
+ {\expandafter\pi@ifexpression_braces\gobbleone#1{}\pi@terminator
+ % Trimming will also remove braces.
+ {\expandafter\passtrimright\expandafter{\gobbleone#1}\ifexpression}
+ {\expandafter\ifwhatever\expandafter{\gobbleone#1}}
+ \secondoftwo\firstoftwo}
+ {\pi@ifexpression_braces#1{}\pi@terminator
+ {\passtrimright{#1}\ifexpression}
+ {\ifwhatever{#1}}}%
+ }
+\def\pi@ifexpression_braces#1#{%
+ \pi@gobbletoterminator{%
+ \ifemptystring{#1}}
+ }
+%
+\long\def\ifelseif#1{%
+ \pi@ifelseif{}#1\iftrue{}\pi@terminator
+ }
+\long\def\pi@reverse_ifelseif#1{%
+ \pi@ifelseif\reverse#1\iffalse{}\pi@terminator
+ }
+\long\def\pi@ifelseif#1#2#3{%
+ #1\ifwhatever{#2}
+ {\pi@gobbletoterminator{#3}}
+ {\pi@ifelseif{#1}}%
+ }
+%
+%
+%
+%
+% This is dangerous. But useful to get
+% material across a conditional.
+%
+\long\def\afterfi#1#2\fi{\fi#1}
+\long\def\afterdummyfi#1#2\fi{#1}
+%
+%
+%
+%
+% WHAT COMES NEXT
+%
+\newtoks\pi@temp_tokenA
+\newtoks\pi@temp_tokenB
+\long\pdef\skipspace#1{%
+ \pi@temp_tokenA={#1}%
+ \def\pi@nospace_repeat{%
+ \expandafter\skipspace\expandafter{\the\pi@temp_tokenA}%
+ }%
+ \futurelet\pi@temp\pi@nospace_check
+ }
+\def\pi@nospace_check{%
+ \ifx\pi@temp\spacechar
+ \afterfi{%
+ \afterassignment\pi@nospace_repeat
+ \let\pi@temp= }%
+ \else
+ \expandafter\the\expandafter\pi@temp_tokenA
+ \fi
+ }
+%
+\def\pi@ifdef_next#1#2#3{%
+ \pdef#1{\pi@ifnext_any#2}%
+ \protected\defcs{\commandtoname#1nospace}{\pi@ifnext_nospace#2}%
+ \protected\defcs{if\expandafter\gobbletwo\string#1}{\pi@iffnext_any#2}%
+ \protected\defcs{if\expandafter\gobbletwo\string#1nospace}{\pi@iffnext_nospace#2}%
+% \reverse version
+ \protected\defcs{pi@reverse_\commandtoname#1}{\pi@ifnext_any#3}%
+ \protected\defcs{pi@reverse_\commandtoname#1nospace}{\pi@ifnext_nospace#3}%
+ \protected\defcs{pi@reverse_if\expandafter\gobbletwo\string#1}{\pi@iffnext_any#3}%
+ \protected\defcs{pi@reverse_if\expandafter\gobbletwo\string#1nospace}{\pi@iffnext_nospace#3}%
+ }
+%
+\def\pi@unlessif{\unless\if}
+\pi@ifdef_next\ifnext\if\pi@unlessif
+\def\pi@unlessifcat{\unless\ifcat}
+\pi@ifdef_next\ifcatnext\ifcat\pi@unlessifcat
+\def\pi@unlessifx{\expandafter\unless\pi@ifx}
+\pi@ifdef_next\ifxnext\pi@ifx\pi@unlessifx
+% We remove the \noexpand's.
+\long\def\pi@ifx#1#2#3#4{\ifx#2#4}
+% Would the following be faster?
+% \long\def\pi@ifx\noexpand#1\noexpand#2{\ifx#1#2}
+% I wonder.
+\long\def\pi@ifnext_any#1#2#3#4{%
+ \let\pi@ifnext_test=#1%
+ \let\pi@ifnext_token= #2%
+ \pi@temp_tokenA={#3}%
+ \pi@temp_tokenB={#4}%
+ \futurelet\pi@temp\pi@ifnext_do
+ }
+\long\def\pi@ifnext_nospace#1#2#3#4{%
+ \skipspace{\pi@ifnext_any#1#2{#3}{#4}}%
+ }
+\long\def\pi@iffnext_any#1#2#3{%
+ \pi@ifnext_any#1#2{#3}{}%
+ }
+\long\def\pi@iffnext_nospace#1#2#3{%
+ \skipspace{\pi@ifnext_any#1#2{#3}{}}%
+ }
+\def\pi@ifnext_do{%
+ \pi@ifnext_test\noexpand\pi@temp\noexpand\pi@ifnext_token
+ \expandafter\the\expandafter\pi@temp_tokenA
+ \else
+ \expandafter\the\expandafter\pi@temp_tokenB
+ \fi
+ }
+%
+%
+%
+%
+% FOR LOOPS
+%
+\newcount\pi@dofor_count
+\newife\ifpi@dofor_noempty
+\pdef\dofor{%
+ \pi@dofor_noemptyfalse\pi@dofor_getlist
+ }
+\pdef\dofornoempty{%
+ \pi@dofor_noemptytrue\pi@dofor_getlist
+ }
+\long\def\pi@dofor_getlist#1{%
+ \skipspace{\pi@dofor_getparameter{#1}}%
+ }
+\long\def\pi@dofor_getparameter#1#2#{%
+ \pi@dofor_dolist{#1}{#2}%
+ }
+\long\def\pi@dofor_dolist#1#2#3{%
+% We keep count so loops can be nested.
+ \global\advance\pi@dofor_count1
+ \ifpi@dofor_noempty
+ {\long\defcs{pi@dofor_loop\the\pi@dofor_count}#2{%
+ \ifemptystring{##1}
+ {\pi@dofor_control}
+ {#3\pi@newfor_markloop{pi@dofor_control}}}}%
+ {\long\defcs{pi@dofor_loop\the\pi@dofor_count}#2{#3\pi@newfor_markloop{pi@dofor_control}}}%
+ \pi@dofor_control#1\pi@terminator
+ }
+\def\pi@dofor_control{%
+ \ifxnext\pi@terminator
+ {\global\advance\pi@dofor_count-1
+% Unbrace the fourth argument.
+ \pi@gobbletoterminator\unbrace}
+ {\usecs{pi@dofor_loop\the\pi@dofor_count}}%
+ }
+\let\pi@dofor_originalcontrol\pi@dofor_control
+\let\resumedofor\pi@dofor_control
+\long\pdef\breakdofor#1#2\pi@dofor_control#3\pi@terminator{%
+ \global\advance\pi@dofor_count-1
+ % Gobble the fourth argument (executed if the loop lives to its own natural end).
+ \gobbleoneand{#1}%
+ }
+\def\pi@dofor_retrieverest#1#2\pi@terminator{%
+ \global\advance\pi@dofor_count-1
+ \gobbleoneand{#1{#2}}%
+ }%
+\long\pdef\pausedofor#1#2\pi@dofor_control{#1}
+%
+%
+%
+%
+% CUSTOM FOR LOOPS
+% And here's the big one.
+%
+\pdef\newfor#1{%
+ \pi@dofor_noemptyfalse
+ \ifcatnext\bgroup{\pi@newfor_pass{#1}}
+ {\pi@newfor_pass{#1}{0}}%
+ }
+\pdef\newfornoempty#1{%
+ \pi@dofor_noemptytrue
+ \ifcatnext\bgroup{\skipspace{\pi@newfor_pass{#1}}}
+ {\skipspace{\pi@newfor_pass{#1}{0}}}%
+ }
+\long\def\pi@newfor_pass#1#2#3#{%
+ \pi@newfor_getcoda{#1}{#2}{#3}
+ }
+\long\def\pi@newfor_getcoda#1#2#3#4{%
+ \ifnextnospace[{\pi@newfor_create{#1}{#2}{#3}{#4}}
+ {\pi@newfor_create{#1}{#2}{#3}{#4}[]}%
+ }
+\letcs{pi@newfor_\detokenize{\pi@nf_tm}_}\relax
+\let\pi@nf_tm\pi@terminator
+\let\pi@newfor_preloop\emptycs
+\long\def\pi@newfor_create#1#2#3#4[#5]{%
+ \def\pi@temp##1##2##3##4##5##6##7##8##9{#3}%
+ \pi@temp_tokenA={\pi@newfor_define#1{#3}{#4}{#5}}%
+ \ifcase#2\relax
+ \the\pi@temp_tokenA 1{}{}{\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm}\unbrace
+ \or \the\pi@temp_tokenA 2{##1}{{##1}}{{}\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm}\gobbleoneand
+ \or \the\pi@temp_tokenA 3{##1##2}{{##1}{##2}}{{}{}\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm}\gobbletwoand
+ \or \the\pi@temp_tokenA 4{##1##2##3}{{##1}{##2}{##3}}{{}{}{}\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm}\gobblethreeand
+ \or \the\pi@temp_tokenA 5{##1##2##3##4}{{##1}{##2}{##3}{##4}}{{}{}{}{}\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm}\gobblefourand
+ \or \the\pi@temp_tokenA 6{##1##2##3##4##5}{{##1}{##2}{##3}{##4}{##5}}{{}{}{}{}{}\pi@nf_tm\pi@nf_tm\pi@nf_tm\pi@nf_tm}\gobblefiveand
+ \or \the\pi@temp_tokenA 7{##1##2##3##4##5##6}{{##1}{##2}{##3}{##4}{##5}{##6}}{{}{}{}{}{}{}\pi@nf_tm\pi@nf_tm\pi@nf_tm}\gobblesixand
+ \or \the\pi@temp_tokenA 8{##1##2##3##4##5##6##7}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}{{}{}{}{}{}{}{}\pi@nf_tm\pi@nf_tm}\gobblesevenand
+ \or \the\pi@temp_tokenA 9{##1##2##3##4##5##6##7##8}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}{{}{}{}{}{}{}{}{}\pi@nf_tm}\gobbleeightand
+ \else \senderror{texapi}{You can't have more than 8 passed arguments. Definition aborted}%
+ \fi
+ }
+%
+% \newfor\foo{<n>}<parameters>{<definition>}{<coda>}
+% |#1 |#2 |#3 |#4
+% #5 = <n>+1
+% #6 = ##1##2...##n
+% #7 = {##1}{##2}...{##n}
+% #8 = <parameters> with terminators as arguments, to mark the end of the loop.
+% #9 = \gobble<n>and
+%
+% So, for instance, something like \edef#1#6###5 means
+% (without the double hashes):
+% \edef\foo#1#2...#n#<n+1>, e.g. with n=3
+% \edef\foo#1#2#3#4
+% hence \foo{<first>}{<second>}{<third>}{<list>}
+% |_________ passed _________|
+%
+% and this calls:
+% \pi@newfor_userdefined:foo#7###5
+% => \pi@newfor_userdefined:foo{#1}{#2}{#3}#4<terminators>
+% => \pi@newfor_userdefined:foo{<first>}{<second>}{<third>}<list><terminators>
+% and of course \pi@newfor_userdefined:foo sees only the head of <list>.
+%
+% The first argument of <list> is tested to check whether it's a terminator
+% (and whether it's empty in the noempty case) in which case the <coda>,
+% i.e. #4, is executed. Otherwise <definition>, i.e. #3, is launched.
+%
+% \pi@newfor_markloop is just \usecs; but it's also a delimiter for
+% \breakfor, \passarguments, etc., i.e. it delimits the code to be gobbled.
+% \pi@newdor_preloop is a dummy macro that expands to nothing but which
+% is useful in one special case: viz. \passarguments{<arg>} with only one
+% argument passed, and at the end of a loop so that there's no intervening
+% code; \passarguments calls \getargs@pi@newfor_userdefined:foo on its
+% arguments, which should be properly braced; but because TeX removes
+% braces around delimited arguments that fit exactly into the delimiters,
+% \passarguments as just described would pass an unbraced argument, hence kertwang.
+% \pi@newfor_preloop ensures that <arg> is never the sole properly fitted
+% and hence unbracing-prone argument. It is then used by \getargs@pi@newfor_userdefined:foo
+% to remove remaining code, if any.
+%
+%
+%
+% The definition is pretty ugly, but it works, and
+% you should've seen what it looked like when I started.
+%
+\long\def\pi@newfor_define#1#2#3#4#5#6#7#8#9{%
+ \long\edef#1#6###5{%
+ \noexpandcs{pi@newfor_userdefined:\commandtoname#1}%
+ #7###5\primunexpanded\expandafter{\pi@temp#8\pi@terminator}%
+ }%
+ \ifpi@dofor_noempty
+ {\long\defcs{pi@newfor_userdefined:\commandtoname#1}#6#2{%
+ \ifcs{pi@newfor_\detokenize{###5}_}
+ {\pi@gobbletoterminator{#4}}%
+ {\ifemptystring{###5}
+ {\usecs{pi@newfor_userdefined:\commandtoname#1}#7}
+ {#3\pi@newfor_preloop\pi@newfor_markloop{pi@newfor_userdefined:\commandtoname#1}#7}}}}%
+ {\long\defcs{pi@newfor_userdefined:\commandtoname#1}#6#2{%
+ \ifcs{pi@newfor_\detokenize{###5}_}
+ {\pi@gobbletoterminator{#4}}
+ {#3\pi@newfor_preloop\pi@newfor_markloop{pi@newfor_userdefined:\commandtoname#1}#7}%
+ }}%
+ \long\defcs{getargs@pi@newfor_userdefined:\commandtoname#1}#6###5\pi@newfor_preloop{%
+ #9{\usecs{pi@newfor_userdefined:\commandtoname#1}#7}%
+ }%
+ \long\defcs{removeargs@pi@newfor_userdefined:\commandtoname#1}#6###5{%
+ ##1%
+ }%
+ \passexpandednobraces{\long\defcs{retrievefor@pi@newfor_userdefined:\commandtoname#1}##1##2}%
+ {\pi@temp#8\pi@terminator}%
+ {\passexpanded{##1}{#9{}##2}}%
+ }
+%
+\long\def\pi@newfor_markloop#1{\usecs{#1}}
+\long\def\passarguments#1\pi@newfor_markloop#2{%
+ \usecs{getargs@#2}#1%
+ }
+\long\def\breakfor#1#2\pi@newfor_markloop#3#4\pi@terminator{%
+ \ifstring{#3}{pi@dofor_control}%
+ {\gobbleoneand{#1}}
+ {#1}%
+ }
+\long\def\pausefor#1#2\pi@newfor_markloop#3{%
+ \ifstring{#3}{pi@dofor_control}
+ {#1}
+ {\usecs{removeargs@#3}{#1}}%
+ }
+\long\def\resumefor#1{%
+ \ifstring{#1}{\dofor}
+ {\pi@dofor_control}
+ {\usecs{pi@newfor_userdefined:\commandtoname#1}}%
+ }
+\long\def\retrieverest#1#2\pi@newfor_markloop#3{%
+ \ifstring{#3}{pi@dofor_control}%
+ {\pi@dofor_retrieverest{#1}}
+ {\usecs{retrievefor@#3}{#1}}%
+ }
+%
+%
+%
+%
+% WHILE LOOPS
+%
+\long\def\repeatuntil#1{%
+ \pi@repeatuntil_loop{\numexpr(0)}{#1}%
+ }
+\long\def\pi@repeatuntil_loop#1#2#3{%
+ \ifnum#2>#1\relax
+ \expandafter\unbrace
+ \else
+ \expandafter\gobbleone
+ \fi
+ {#3\pi@repeatuntil_loop{\numexpr(#1+1)}{#2}{#3}}%
+ }
+%
+\long\def\dowhile#1#2{%
+ #1{#2\dowhile{#1}{#2}}{}%
+ }
+%
+%
+%
+%
+% CUSTOM WHILE LOOPS
+%
+% \newdowhile\foo<nb of args><trarg_1>...<trarg_n><body>
+% where <trarg_1>...<trarg_n> are the transformations of <arg_1>...<arg_n>
+% from one iteration to the next.
+%
+% The \newhile is basically a simple version of \newfor.
+%
+\long\pdef\newwhile#1#2{%
+ \def\pi@temp{#1}%
+ \ifcase#2
+ \expandafter\pi@newwhile_getzero
+ \or\expandafter\pi@newwhile_getone
+ \or\expandafter\pi@newwhile_gettwo
+ \or\expandafter\pi@newwhile_getthree
+ \or\expandafter\pi@newwhile_getfour
+ \or\expandafter\pi@newwhile_getfive
+ \or\expandafter\pi@newwhile_getsix
+ \or\expandafter\pi@newwhile_getseven
+ \or\expandafter\pi@newwhile_geteight
+ \or\expandafter\pi@newwhile_getnine
+ \fi
+ }
+\long\def\pi@newwhile_getzero{%
+ \expandafter\pi@newwhile_create\pi@temp{}{}{}\unbrace}
+\long\def\pi@newwhile_getone#1{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1}{{##1}}{{#1}}\gobbleoneand}
+\long\def\pi@newwhile_gettwo#1#2{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2}{{##1}{##2}}{{#1}{#2}}\gobbletwoand}
+\long\def\pi@newwhile_getthree#1#2#3{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3}{{##1}{##2}{##3}}{{#1}{#2}{#3}}\gobblethreeand}
+\long\def\pi@newwhile_getfour#1#2#3#4{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3##4}{{##1}{##2}{##3}{##4}}{{#1}{#2}{#3}{#4}}\gobblefourand}
+\long\def\pi@newwhile_getfive#1#2#3#4#5{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3##4##5}{{##1}{##2}{##3}{##4}{##5}}{{#1}{#2}{#3}{#4}{#5}}\gobblefiveand}
+\long\def\pi@newwhile_getsix#1#2#3#4#5#6{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3##4##5##6}{{##1}{##2}{##3}{##4}{##5}{##6}}{{#1}{#2}{#3}{#4}{#5}{#6}}\gobblesixand}
+\long\def\pi@newwhile_getseven#1#2#3#4#5#6#7{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3##4##5##6##7}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}{{#1}{#2}{#3}{#4}{#5}{#6}{#7}}\gobblesevenand}
+\long\def\pi@newwhile_geteight#1#2#3#4#5#6#7#8{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3##4##5##6##7##8}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}\gobbleeightand}
+\long\def\pi@newwhile_getnine#1#2#3#4#5#6#7#8#9{%
+ \expandafter\pi@newwhile_create
+ \pi@temp{##1##2##3##4##5##6##7##8##9}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}\gobblenineand}
+%
+%
+% \newwhile\foo<n><trans_1><trans_2>...<trans_n><body>
+%
+% Below:
+% #1 = \foo
+% #2 = ##1##2...##n
+% #3 = {##1}{##2}...{##n}
+% #4 = <trans_1><trans_2>...<trans_n>
+% #5 = \gobble<n>and
+% #6 = <body>
+%
+% ... so that \foo (#1) takes <n> arguments (#2), executes <body> (#6),
+% and runs its internal version (...newhile_userdefined...) on these same arguments
+% properly braced (#3). This internal version takes of course <n> arguments
+% and returns \foo with the arguments transformed (#4).
+% ..._preloop and ..._markloop are just markers, although the is equivalent to \usecs
+% so as to launch the following macro.
+%
+\long\def\pi@newwhile_create#1#2#3#4#5#6{%
+ \long\def#1#2{%
+ #6\pi@newwhile_preloop\pi@newwhile_markloop{pi@newwhile_userdefined:\commandtoname#1}#3%
+ }%
+ \long\defcs{pi@newwhile_userdefined:\commandtoname#1}#2{#1#4}%
+ \long\defcs{changewhile@pi@newwhile_userdefined:\commandtoname#1}#2{\pi@gobbletoterminator{#5{#1#3}}}%
+ \letcs{breakwhile@pi@newwhile_userdefined:\commandtoname#1}#5%
+ }
+%
+\let\pi@newwhile_preloop\emptycs
+\let\pi@newwhile_markloop\usecs
+\long\def\changewhile#1\pi@newwhile_markloop#2{%
+ \usecs{changewhile@#2}#1\pi@terminator
+ }
+\long\def\breakwhile#1#2\pi@newwhile_markloop#3{%
+ \usecs{breakwhile@#3}{#1}%
+ }
+%
+%
+%
+%
+% CATCODE SETTINGS
+%
+\pdef\setcatcodes#1{%
+ \ifsuffix,{#1}{\pi@setcatcodes_loop{#1}}
+ {\pi@setcatcodes_loop{#1,}}%
+ }
+\def\restorecatcodes{%
+ \def\restorecatcodes{}%
+ }
+\def\pi@setcatcodes_loop#1{%
+ \dofor{#1}##1=##2,{%
+ \dofor{##1}####1{%
+ \ifemptycommand\restorecatcodes
+ {\def\restorecatcodes{\def\restorecatcodes{}}}%
+ {}%
+ \eaddright\restorecatcodes{%
+ \catcode`\noexpand####1=\the\catcode`####1\relax}%
+ \catcode`####1=##2\relax}{}}{}%
+ }
+%
+%
+%
+%
+% STRINGS
+%
+\let\pi@thisisjustanemptystring_donottouchit\relax
+\pi@ifdef_simple\ifemptystring{\ifcsname pi@thisisjustanemptystring_donottouchit\detokenize{#1}\endcsname}
+%
+\pi@ifdef_twoarg\ifstring{%
+ \passcs\gobbleone{pi@ifstring_string\detokenize{#1:#1}}%
+ \ifcs{pi@ifstring_string\detokenize{#1:#2}}
+ }
+%
+\long\pdef\newstring#1{%
+ \long\gdefcs{pi@strings_ifprefix:\detokenize{#1}}##1#1##2\pi@terminator{%
+ \ifemptystring{##1}\firstoftwo\secondoftwo}%
+ \long\gdefcs{pi@strings_removeprefix:\detokenize{#1}}#1##1\pi@terminator{##1}%
+ \long\gdefcs{pi@strings_removeprefixand:\detokenize{#1}}#1##1\pi@terminator##2{##2{##1}}%
+%
+ \long\gdefcs{pi@strings_ifsuffix:\detokenize{#1}}##1#1\pi@terminator##2\pi@terminator{%
+ \ifemptystring{##2}\secondoftwo{\pi@gobbletoterminator\firstoftwo}}%
+ \long\gdefcs{pi@strings_removesuffix:\detokenize{#1}}##1#1\pi@terminator{##1}%
+ \long\gdefcs{pi@strings_removesuffixand:\detokenize{#1}}##1#1\pi@terminator##2{##2{##1}}%
+%
+ \long\gdefcs{pi@strings_ifcontains:\detokenize{#1}}##1#1##2\pi@terminator{%
+ \ifemptystring{##2}\secondoftwo\firstoftwo}%
+ \long\gdefcs{pi@strings_splitstringat:\detokenize{#1}}##1#1##2\pi@terminator##3{%
+ ##3{##1}{##2}}%
+ }
+%
+\newstring{-}% This is for \ifprefix on line 391 above.
+%
+\pi@ifdef_twoarg\ifprefix{%
+ \ifemptystring{#1}\firstoftwo
+ {\ifcs{pi@strings_ifprefix:\detokenize{#1}}
+ {\usecs{pi@strings_ifprefix:\detokenize{#1}}#2#1\pi@terminator}
+ {\long\def\pi@temp##1#1##2\pi@terminator{\ifemptystring{##1}\firstoftwo\secondoftwo}%
+ \pi@temp#2#1\pi@terminator}}
+ }
+%
+\pi@ifdef_twoarg\ifsuffix{%
+ \ifemptystring{#1}\firstoftwo % An empty string is always a suffix. And it'd ruin the test.
+ {\ifcs{pi@strings_ifsuffix:\detokenize{#1}}
+ {\usecs{pi@strings_ifsuffix:\detokenize{#1}}#2\pi@terminator#1\pi@terminator\pi@terminator}
+ {\long\def\pi@temp##1#1\pi@terminator##2\pi@terminator{\ifemptystring{##2}\secondoftwo{\pi@gobbletoterminator\firstoftwo}}%
+ \pi@temp#2\pi@terminator#1\pi@terminator\pi@terminator}}
+ }
+%
+\pi@ifdef_twoarg\ifcontains{%
+ \ifemptystring{#1}\firstoftwo
+ {\ifcs{pi@strings_ifcontains:\detokenize{#1}}
+ {\usecs{pi@strings_ifcontains:\detokenize{#1}}#2#1\pi@terminator}
+ {\long\def\pi@temp##1#1##2\pi@terminator{\ifemptystring{##2}\secondoftwo\firstoftwo}%
+ \pi@temp#2#1\pi@terminator}}
+ }
+%
+\long\def\removeprefix#1#2{%
+ \ifcs{pi@strings_removeprefix:\detokenize{#1}}
+ {\usecs{pi@strings_removeprefix:\detokenize{#1}}#2\pi@terminator}
+ {\long\def\pi@temp#1##1\pi@terminator{##1}%
+ \pi@temp#2\pi@terminator}%
+ }
+\long\def\removeprefixand#1#2#3{%
+ \ifcs{pi@strings_removeprefixand:\detokenize{#1}}
+ {\usecs{pi@strings_removeprefixand:\detokenize{#1}}#2\pi@terminator{#3}}
+ {\long\def\pi@temp#1##1\pi@terminator{#3{##1}}%
+ \pi@temp#2\pi@terminator}%
+ }
+\long\pdef\removeprefixin#1#2#3{%
+ \long\def\pi@temp#1##1\pi@terminator{\def#3{##1}}%
+ \pi@temp#2\pi@terminator
+ }
+%
+\long\def\removesuffix#1#2{%
+ \ifcs{pi@strings_removesuffix:\detokenize{#1}}
+ {\usecs{pi@strings_removesuffix:\detokenize{#1}}#2\pi@terminator}
+ {\long\def\pi@temp##1#1\pi@terminator{##1}%
+ \pi@temp#2\pi@terminator}%
+ }
+\long\def\removesuffixand#1#2#3{%
+ \ifcs{pi@strings_removesuffixand:\detokenize{#1}}
+ {\usecs{pi@strings_removesuffixand:\detokenize{#1}}#2\pi@terminator{#3}}
+ {\long\def\pi@temp##1#1\pi@terminator{#3{##1}}%
+ \pi@temp#2\pi@terminator}%
+ }
+\long\pdef\removesuffixin#1#2#3{%
+ \long\def\pi@temp##1#1\pi@terminator{\def#3{##1}}%
+ \pi@temp#2\pi@terminator
+ }
+%
+\long\def\splitstringat#1#2#3{%
+ \ifcs{pi@strings_splitstringat:\detokenize{#1}}
+ {\usecs{pi@strings_splitstringat:\detokenize{#1}}#2\pi@terminator{#3}}
+ {\long\def\pi@temp##1#1##2\pi@terminator{#3{##1}{##2}}%
+ \pi@temp#2\pi@terminator}%
+ }
+%
+%
+%
+%
+% TRIMMING
+% (adapted from Will Robertson's trimspace)
+%
+\long\def\passtrimleft#1#2{%
+ \expandafter\swaprightbraced\expandafter{\romannumeral-`\.\noexpand#1}{#2}%
+ }
+\long\def\trimleft#1{%
+ \passtrimleft{#1}\unbrace
+ }
+\bgroup
+\catcode`\Q=3
+\long\gdef\passtrimright#1{%
+ \pi@passtrimright_first#1Q Q%
+ }%
+\long\gdef\pi@passtrimright_first#1 Q{%
+ \pi@passtrimright_second#1Q%
+ }
+\long\gdef\pi@passtrimright_second#1Q#2#3{%
+ #3{#1}%
+ }
+\egroup
+\long\def\trimright#1{%
+ \passtrimright{#1}\unbrace
+ }
+\long\def\passtrim#1{%
+ \passtrimleft{#1}\passtrimright
+ }
+\long\def\trim#1{%
+ \passtrim{#1}\unbrace
+ }
+\long\pdef\deftrimleft#1#2{%
+ \passtrimleft{#2}{\def#1}
+ }
+\long\pdef\deftrimright#1#2{%
+ \passtrimright{#2}{\def#1}
+ }
+\long\pdef\deftrim#1#2{%
+ \passtrim{#2}{\def#1}%
+ }
+
+\pi@restorecatcodes
+\endinput
diff --git a/macros/generic/texchord/test.tex b/macros/generic/texchord/test.tex
new file mode 100644
index 0000000000..a041c5d608
--- /dev/null
+++ b/macros/generic/texchord/test.tex
@@ -0,0 +1,138 @@
+%Test file for TeXChord. (C) 1993 by Joel M. Hoffman
+
+\font\titfont=cmr17\narrower % Some fonts
+\font\capfont=cmbx12 scaled \magstep1
+\def\mycaption#1{\bigskip{\capfont #1}\nobreak}
+\long\def\boxit#1{\vbox{\hrule\hbox{\vrule\kern3pt
+ \vbox{\kern3pt#1\kern3pt}\kern3pt\vrule}\hrule}}
+\long\def\dboxit#1{\boxit{\vbox{\boxit{\hbox{#1}}}}}
+
+
+
+\input texchord % Include the macros.
+\textchords\smallchords % Put chords in the text; use small chords.
+
+\centerline{\dboxit{\vbox{\hbox{\titfont \TeX Chord Demonstration}
+\hbox{Copyright 1993 by Joel M.\ Hoffman}}}}
+\bigskip
+\bigskip\hrule\bigskip\bigskip
+
+This is the size of a small C-chord: \Cchord.
+\bigchords
+This is the size of a big C-chord: \Cchord.
+
+\bigskip\hrule\bigskip\bigskip
+
+
+\raisedchords\advance\baselineskip by 50pt
+\def\dummytext{\leavevmode\kern.6 true in}
+
+\bigchords
+
+\mycaption{Major chords:}
+
+\Achord \dummytext
+\Bchord \dummytext
+\Cchord \dummytext
+\Dchord \dummytext
+\Echord \dummytext
+\Fchord \dummytext
+\Gchord \dummytext
+
+\Ashchord \dummytext
+\Bshchord \dummytext
+\Cshchord \dummytext
+\Dshchord \dummytext
+\Eshchord \dummytext
+\Fshchord \dummytext
+\Gshchord \dummytext
+
+\Afchord \dummytext
+\Bfchord \dummytext
+\Cfchord \dummytext
+\Dfchord \dummytext
+\Efchord \dummytext
+\Ffchord \dummytext
+\Gfchord \dummytext
+
+\mycaption{Minor chords:}
+
+\achord \dummytext
+\bchord \dummytext
+\cchord \dummytext
+\dchord \dummytext
+\echord \dummytext
+\fchord \dummytext
+\gchord \dummytext
+
+\ashchord \dummytext
+\bshchord \dummytext
+\cshchord \dummytext
+\dshchord \dummytext
+\eshchord \dummytext
+\fshchord \dummytext
+\gshchord \dummytext
+
+\afchord \dummytext
+\bfchord \dummytext
+\cfchord \dummytext
+\dfchord \dummytext
+\efchord \dummytext
+\ffchord \dummytext
+\gfchord \dummytext
+
+\mycaption{Seventh chords (Major):}
+
+\Cschord \dummytext
+\Dschord \dummytext
+\Eschord \dummytext
+\Fschord \dummytext
+\Gschord \dummytext
+\Aschord \dummytext
+\Bschord \dummytext
+
+\Cfschord \dummytext
+\Dfschord \dummytext
+\Efschord \dummytext
+\Ffschord \dummytext
+\Gfschord \dummytext
+\Afschord \dummytext
+\Bfschord \dummytext
+
+\Cshschord \dummytext
+\Dshschord \dummytext
+\Eshschord \dummytext
+\Fshschord \dummytext
+\Gshschord \dummytext
+\Ashschord \dummytext
+\Bshschord \dummytext
+
+\mycaption{Seventh chords (Minor):}
+
+
+\aschord \dummytext
+\bschord \dummytext
+\cschord \dummytext
+\dschord \dummytext
+\eschord \dummytext
+\fschord \dummytext
+\gschord \dummytext
+
+\afschord \dummytext
+\bfschord \dummytext
+\cfschord \dummytext
+\dfschord \dummytext
+\efschord \dummytext
+\ffschord \dummytext
+\gfschord \dummytext
+
+\ashschord \dummytext
+\bshschord \dummytext
+\cshschord \dummytext
+\dshschord \dummytext
+\eshschord \dummytext
+\fshschord \dummytext
+\gshschord \dummytext
+
+
+\end
diff --git a/macros/generic/texchord/texchord.tex b/macros/generic/texchord/texchord.tex
new file mode 100644
index 0000000000..3f05931920
--- /dev/null
+++ b/macros/generic/texchord/texchord.tex
@@ -0,0 +1,284 @@
+%%%
+%%% TeXChord. Macros for typesetting guitar-chord diagrams.
+%%% Version 0.8.
+%%%
+%%% (C) Copyright 1993 by Joel M. Hoffman <joel@wam.umd.edu>
+%%%
+%%%
+%%% Unlimited non-comercial use is hereby granted. Any comercial use
+%%% requires permission from the author. For information on how
+%%% to contact the author, see below.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% This package defines macros for producing guitar-chord diagrams
+%%% with TeX. In general, the command to produce a chord pattern
+%%% consists of three parts: the chord name, modifiers, and the
+%%% string ``chord.'' Upper-case letters are used for Major and
+%%% lower-case letter for minor. Possible modifiers are ``s'' for
+%%% ``seven,'' ``sh'' for ``sharp,'' ``f'' for ``flat'' and ``S''
+%%% for ``major seven.'' When they are mixed, the incidentals
+%%% (sharp, flat) preceed the others.
+%%%
+%%% So, for example, \Cchord is a simple C-major chord; \cshchord is
+%%% a c-sharp-minor chord; \DshSchord is a D-sharp-major-seven chord.
+%%% As of version 0.8, I have not entered all of the possible chord
+%%% patterns. See the end of this file for examples of how to add
+%%% chords of your own.
+%%%
+%%% I have included the chord patterns I usually use; your
+%%% choices for some obscure chords may vary. Again, you can add
+%%% your own chords by copying the examples at the end of this file.
+%%%
+%%% I have included both sharps and flats for every chord, even
+%%% though some are seldom used (C-flat comes to mind). As of
+%%% version 0.8, many chords are still missing. Sorry.
+%%%
+%%% In addition to the chord macros themselves, the following
+%%% ``control'' commands are provided:
+%%%
+%%% \bigchords Use big chord patterns.
+%%% \smallchords Use small chord patterns.
+%%% \raisedchords Place chords over text at current location.
+%%% \textchords Place chords in current text.
+%%%
+%%% For example, if you wanted to discuss chords, you might say:
+%%%
+%%% \smallchords\textchords This is how a C-chord is played: \Cchord.
+%%%
+%%% On the other hand, in music, you might use:
+%%%
+%%% \bigchords\raisedchords \Dchord This is played with a D-chord.
+%%%
+%%% \bigchords\raisedchords is the default.
+%%%
+%%% I don't know how reliable the \raisedchords is. You may have
+%%% to tweek the definition of \raisedchords at the end of this
+%%% file if you are not using 10pt text.
+%%%
+%%% Other dimentions you can freely change are \chordheight and
+%%% \chordwidth. Be sure to do so both in the initialization and
+%%% in the definitions of \bigchords and \smallchords. Also
+%%% change \extchordheight to match \chordheight. Feel free to
+%%% change the fonts, too.
+%%%
+%%%
+%%% --> I would like to thank Merri Lovinger Arian, a long time friend
+%%% --> and my guitar teacher, without whom I would never have learned
+%%% --> the joy of guitar.
+%%%
+%%%
+%%%
+%%% By version 1.0, this package will also have better provisions
+%%% for bar-chords; provisions for optionally printing the name of
+%%% the chord to the left of (instead of above) the diagram;
+%%% provisions for printing fret-numbers to the left of the
+%%% diagrams, instead of the hideously ugly extended patterns;
+%%% provisions for printing little x's and o's atop the chord
+%%% patterns to indicate which strings are sounded. Also, the
+%%% code will be cleaned up and commented.
+%%%
+%%% Other bugs include numerous spacing problems, most notably in
+%%% f-minor chords.
+%%%
+%%%
+%%% If you have suggestions, or bug-fixes, please let me know
+%%%
+%%%
+%%% You can reach me, the author of this package at:
+%%%
+%%% Internet: Joel@wam.umd.edu -or- 72700.402@compuserve.com
+%%% Compuserve: 72700,402
+%%% USPSnet: Joel Hoffman
+%%% 1703 Mt. Pisgah Le. #23
+%%% Silver Spring, MD 20903
+%%% USA
+%%%
+%%% Smile and be happy. Like this: o o
+%%% >
+%%% \__/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\newdimen\chordwidth\chordwidth=.28in
+\newdimen\chordheight\chordheight=.3in
+\newdimen\extchordheight\extchordheight=.525in % 7/4 of \chordheight
+\newdimen\chordlinewidth\chordlinewidth=.3pt
+\newdimen\chordbaselinewidth\chordbaselinewidth=1pt
+\newdimen\chordraise\chordraise=2pt
+\font\chordmarkfont=cmsy8\def\chordchar{\char15}
+\font\chordnamefont=cmr12
+\font\chordnamesfont=cmr8
+\font\chordsymfont=cmmi8
+
+\newdimen\chordi\newdimen\chordj\newdimen\chordk
+\newcount\chordl
+
+\def\bigchords{\chordwidth=.28in\chordheight=.3in\extchordheight=.525in\chordlinewidth=.3pt\chordbaselinewidth=1pt\font\chordmarkfont=cmsy8\def\chordchar{\char15}\font\chordnamefont=cmr12\font\chordnamesfont=cmr8\font\chordsymfont=cmmi8\chordraise=3pt}
+
+%\def\smallchords{\chordwidth=.14in\chordheight=.15in\extchordheight=.2625in\chordlinewidth=.15pt\chordbaselinewidth=.5pt\font\chordmarkfont=cmsy5\font\chordnamefont=cmr6\chordraise=1.5pt}
+\def\smallchords{\chordwidth=.14in\chordheight=.15in\extchordheight=.2625in\chordlinewidth=.15pt\chordbaselinewidth=.5pt\font\chordmarkfont=cmr12 scaled \magstep1\def\chordchar{.}\font\chordnamefont=cmr6\font\chordnamesfont=cmr5\font\chordsymfont=cmmi5\chordraise=1.5pt}
+
+\bigchords
+
+\def\vchordrule{{\vrule height \chordheight width \chordlinewidth depth 0pt}}
+\def\extvchordrule{{\vrule height \extchordheight width \chordlinewidth depth 0pt}}
+\def\hchordrule{{\hrule height \chordlinewidth width \chordwidth depth 0pt}}
+\def\basechordrule{{\hrule height \chordbaselinewidth width \chordwidth
+ depth 0pt}}
+\def\chordmark{{\chordmarkfont\chordchar}}
+
+
+
+
+\def\finger#1#2{%string, fret
+ \chordi=\chordwidth%
+ \divide\chordi by 5%
+ \chordl=#1\advance\chordl by 0%
+ \multiply\chordi by \chordl%
+ \chordj=\chordheight%
+ \divide\chordj by 4%
+ \chordk=.5\chordj%
+ \divide\chordk by 2%
+ \chordl=#2\advance\chordl by 1%
+ \multiply\chordj by \chordl%
+ \advance\chordj by \chordk%
+ \setbox0\hbox{\chordmark}%
+ \chordk=\wd0%
+ \multiply\chordk by 10%
+ \divide\chordk by 21 %=2.1. 2 doesn't seem to work. Hmmm.%
+ \advance \chordi by -\chordk%
+ \chordk=\ht0%
+ \divide\chordk by 2%
+ \advance\chordj by -\chordk%
+% \vskip\chordj\hbox{}\hskip\chordi\chordmark
+% \hskip-\wd0\hskip-\chordi\vskip-\ht0\vskip-\chordj}
+ \lower\chordj\hbox{\hskip\chordi\chordmark}%
+ \hskip-\wd0\hskip-\chordi}
+
+
+\def\craise#1#2{#1\raise 1ex\hbox{\chordnamesfont #2}}
+\def\minor#1{\craise{#1}{m}}
+\def\seven#1{\craise{#1}{7}}
+\def\flat#1{\craise{#1}{{\chordsymfont\char91}}}
+\def\sharp#1{\craise{#1}{{\chordsymfont\char93}}}
+\def\flatm#1{\craise{#1}{{\chordsymfont\char91}m}}
+\def\sharpm#1{\craise{#1}{{\chordsymfont\char93}m}}
+\def\minors#1{\craise{#1}{m7}}
+\def\sharps#1{\craise{#1}{{\chordsymfont\char93}7}}
+\def\flats#1{\craise{#1}{{\chordsymfont\char91}7}}
+\def\flatms#1{\craise{#1}{{\chordsymfont\char91}m7}}
+\def\sharpms#1{\craise{#1}{{\chordsymfont\char93}m7}}
+
+\def\chord#1{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont\hss #1 \hss}\hss}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule}\hss}\vss}\vbox to 0pt{\vbox to \chordheight{\basechordrule\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+\def\emptychord{\chord{}}
+
+\def\extchord#1{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont\hss #1 \hss}\hss}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule}\hss}\vss}\vbox to 0pt{\vbox to \extchordheight{\basechordrule\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+
+
+\def\anychord#1{\dochord{\offinterlineskip\relax #1}}
+\def\anyextchord#1{\doextchord{\offinterlineskip\relax #1}}
+
+%Ordinary major chords.
+\def\Afchord{\anychord{\chord{\flat{A}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{5}{3}}}
+\def\Achord{\anychord{\chord{A}\finger{2}{1}\finger{3}{1}\finger{4}{1}}}
+\def\Ashchord{\anychord{\chord{\sharp{A}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{2}}}
+\def\Bfchord{\anychord{\chord{\flat{B}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{2}}}
+\def\Bchord{\anychord{\chord{B}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{1}}}
+\def\Cfchord{\anychord{\chord{\flat{C}}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{1}}}
+\def\Bshchord{\anychord{\chord{\sharp{B}}\finger{1}{2}\finger{2}{1}\finger{4}{0}}}
+\def\Cchord{\anychord{\chord{C}\finger{1}{2}\finger{2}{1}\finger{4}{0}}}
+\def\Cshchord{\anychord{\chord{\sharp{C}}\finger{1}{3}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{4}{1}\finger{5}{0}}}
+\def\Dfchord{\anychord{\chord{\flat{D}}\finger{1}{3}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{4}{1}\finger{5}{0}}}
+\def\Dchord{\anychord{\chord{D}\finger{3}{1}\finger{4}{2}\finger{5}{1}}}
+\def\Dshchord{\anychord{\chord{\sharp{D}}\finger{2}{0}\finger{3}{2}\finger{4}{3}\finger{5}{2}}}
+\def\Efchord{\anychord{\chord{\flat{E}}\finger{2}{0}\finger{3}{2}\finger{4}{3}\finger{5}{2}}}
+\def\Echord{\anychord{\chord{E}\finger{1}{1}\finger{2}{1}\finger{3}{0}}}
+\def\Ffchord{\anychord{\chord{\flat{F}}\finger{1}{1}\finger{2}{1}\finger{3}{0}}}
+\def\Eshchord{\anychord{\chord{\sharp{E}}\finger{2}{2}\finger{3}{1}\finger{4}{0}\finger{5}{0}}}
+\def\Fchord{\anychord{\chord{F}\finger{2}{2}\finger{3}{1}\finger{4}{0}\finger{5}{0}}}
+\def\Fshchord{\anychord{\chord{\sharp{F}}\finger{2}{3}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\Gfchord{\anychord{\chord{\flat{G}}\finger{2}{3}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\Gchord{\anychord{\chord{G}\finger{0}{2}\finger{1}{1}\finger{5}{2}}}
+\def\Gshchord{\anychord{\chord{\sharp{G}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{5}{3}}}
+
+%minor chords
+\def\afchord{\anyextchord{\extchord{\flatm{a}}\finger{0}{3}\finger{1}{3}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{3}\finger{1}{5}\finger{2}{5}}}
+\def\achord{\anychord{\chord{\minor{a}}\finger{2}{1}\finger{3}{1}\finger{4}{0}}}
+\def\ashchord{\anychord{\chord{\sharpm{a}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{1}}}
+\def\bfchord{\anychord{\chord{\flatm{b}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{1}}}
+\def\bchord{\anychord{\chord{\minor{b}}\finger{2}{3}\finger{3}{3}\finger{4}{2}\finger{5}{1}}}
+\def\cfchord{\anychord{\chord{\flatm{c}}\finger{2}{3}\finger{3}{3}\finger{4}{2}\finger{5}{1}}}
+\def\bshchord{\anyextchord{\extchord{\sharpm{b}}\finger{2}{4}\finger{3}{4}\finger{4}{3}\finger{5}{2}}}
+\def\cchord{\anyextchord{\extchord{\minor{c}}\finger{2}{4}\finger{3}{4}\finger{4}{3}\finger{5}{2}}}
+\def\cshchord{\anychord{\chord{\sharpm{c}}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dfchord{\anychord{\chord{\flatm{d}}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dchord{\anychord{\chord{\minor{d}}\finger{3}{1}\finger{4}{2}\finger{5}{0}}}
+\def\dshchord{\anychord{\chord{\sharpm{d}}\finger{2}{3}\finger{3}{2}\finger{4}{3}\finger{5}{1}}}
+\def\efchord{\anychord{\chord{\flatm{e}}\finger{2}{3}\finger{3}{2}\finger{4}{3}\finger{5}{1}}}
+\def\echord{\anychord{\chord{\minor{e}}\finger{1}{1}\finger{2}{1}}}
+\def\ffchord{\anychord{\chord{\flatm{f}}\finger{1}{1}\finger{2}{1}}}
+\def\eshchord{\anychord{\chord{\sharpm{e}}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fchord{\anychord{\chord{\minor{f}}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fshchord{\anychord{\chord{\sharpm{f}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{1}{3}\finger{2}{3}}}
+\def\gfchord{\anychord{\chord{\flatm{g}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{1}{3}\finger{2}{3}}}
+\def\gchord{\anyextchord{\extchord{\minor{g}}\finger{2}{4}\finger{3}{2}\finger{4}{2}\finger{5}{2}}}
+\def\gshchord{\anyextchord{\extchord{\sharpm{g}}\finger{0}{3}\finger{1}{3}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{3}\finger{1}{5}\finger{2}{5}}}
+
+%Seventh chords (majors)
+\def\Afschord{\anychord{\chord{\flats{A}}\finger{1}{2}\finger{2}{3}\finger{3}{0}\finger{4}{3}}}
+\def\Aschord{\anychord{\chord{\seven{A}}\finger{2}{1}\finger{4}{1}}}
+\def\Ashschord{\anychord{\chord{\sharps{A}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{4}{2}}}
+\def\Bfschord{\anychord{\chord{\flats{B}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{4}{2}}}
+\def\Bschord{\anychord{\chord{\seven{B}}\finger{1}{1}\finger{2}{0}\finger{3}{1}\finger{5}{1}}}
+\def\Cfschord{\anychord{\chord{\flats{C}}\finger{1}{1}\finger{2}{0}\finger{3}{1}\finger{5}{1}}}
+\def\Bshschord{\anychord{\chord{\sharps{B}}\finger{1}{2}\finger{2}{1}\finger{3}{2}\finger{4}{0}}}
+\def\Cschord{\anychord{\chord{\seven{C}}\finger{1}{2}\finger{2}{1}\finger{3}{2}\finger{4}{0}}}
+\def\Cshschord{\anychord{\chord{\sharps{C}}\finger{2}{2}\finger{3}{3}\finger{4}{1}\finger{5}{3}}}
+\def\Dfschord{\anychord{\chord{\flats{D}}\finger{2}{2}\finger{3}{3}\finger{4}{1}\finger{5}{3}}}
+\def\Dschord{\anychord{\chord{\seven{D}}\finger{3}{1}\finger{4}{0}\finger{5}{1}}}
+\def\Dshschord{\anychord{\chord{\sharps{D}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{2}}}
+\def\Efschord{\anychord{\chord{\flats{E}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{2}}}
+\def\Eschord{\anychord{\chord{\seven{E}}\finger{1}{1}\finger{3}{0}}}
+\def\Ffschord{\anychord{\chord{\flats{F}}\finger{1}{1}\finger{3}{0}}}
+\def\Eshschord{\anyextchord{\extchord{\sharps{E}}\finger{2}{2}\finger{3}{4}\finger{4}{5}\finger{5}{4}}}
+\def\Fschord{\anyextchord{\extchord{\seven{F}}\finger{2}{2}\finger{3}{4}\finger{4}{5}\finger{5}{4}}}
+\def\Fshschord{\anychord{\chord{\sharps{F}}\finger{2}{3}\finger{3}{2}\finger{4}{1}}}
+\def\Gfschord{\anychord{\chord{\flats{G}}\finger{2}{3}\finger{3}{2}\finger{4}{1}}}
+\def\Gschord{\anychord{\chord{\seven{G}}\finger{0}{2}\finger{1}{1}\finger{5}{0}}}
+\def\Gshschord{\anychord{\chord{\sharps{G}}\finger{1}{2}\finger{2}{3}\finger{3}{0}\finger{4}{3}}}
+
+%seventh chords (minors)
+
+\def\afschord{\anychord{\chord{\flatms{a}}\finger{2}{0}\finger{3}{0}\finger{5}{1}}}
+\def\aschord{\anychord{\chord{\minors{a}}\finger{2}{1}\finger{4}{0}}}
+\def\ashschord{\anychord{\chord{\sharpms{a}}\finger{2}{2}\finger{3}{2}\finger{4}{1}\finger{5}{3}}}
+\def\bfschord{\anychord{\chord{\flatms{b}}\finger{2}{2}\finger{3}{2}\finger{4}{1}\finger{5}{3}}}
+\def\bschord{\anychord{\chord{\minors{b}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{2}{3}\finger{4}{2}}}
+\def\cfschord{\anychord{\chord{\flatms{c}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{2}{3}\finger{4}{2}}}
+\def\bshschord{\anychord{\chord{\sharpms{b}}\finger{2}{0}\finger{3}{2}\finger{4}{0}\finger{5}{2}}}
+\def\cschord{\anychord{\chord{\minors{c}}\finger{2}{0}\finger{3}{2}\finger{4}{0}\finger{5}{2}}}
+\def\cshschord{\anychord{\chord{\sharpms{c}}\finger{1}{1}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dfschord{\anychord{\chord{\flatms{d}}\finger{1}{1}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dschord{\anychord{\chord{\minors{d}}\finger{3}{1}\finger{4}{0}\finger{5}{0}}}
+\def\dshschord{\anychord{\chord{\sharpms{d}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\efschord{\anychord{\chord{\flatms{e}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\eschord{\anychord{\chord{\minors{e}}\finger{1}{1}\finger{2}{1}\finger{4}{2}}}
+\def\ffschord{\anychord{\chord{\flatms{f}}\finger{1}{1}\finger{2}{1}\finger{4}{2}}}
+\def\eshschord{\anychord{\chord{\sharpms{e}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fschord{\anychord{\chord{\minors{f}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fshschord{\anychord{\chord{\sharpms{f}}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}}}
+\def\gfschord{\anychord{\chord{\flatms{g}}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}}}
+\def\gschord{\anychord{\chord{\minors{g}}\finger{1}{0}\finger{2}{2}\finger{4}{2}}}
+\def\gshschord{\anychord{\chord{\sharpms{g}}\finger{2}{0}\finger{3}{0}\finger{5}{1}}}
+
+\def\textchords{\def\dochord##1{\leavevmode\raise\chordheight\hbox{##1}\hskip\chordwidth}}
+\def\raisedchords{\def\dochord##1{\leavevmode\raise10pt\hbox{\raise\chordheight\hbox{##1}}}\def\doextchord##1{\leavevmode\raise10pt\hbox{\raise\extchordheight\hbox{##1}}}}
+\raisedchords
diff --git a/macros/generic/texdate/CHANGES b/macros/generic/texdate/CHANGES
new file mode 100644
index 0000000000..70b806601c
--- /dev/null
+++ b/macros/generic/texdate/CHANGES
@@ -0,0 +1,6 @@
+08 Dec 1202 (08 Dec 2018): Modified slightly to permit
+using the package with plain TeX. Also included
+dependencies in the documentation, and explained how to use
+the package with plain TeX. v2.0.
+
+26 May 1202 (30 May 2018): Initial release.
diff --git a/macros/generic/texdate/README b/macros/generic/texdate/README
new file mode 100644
index 0000000000..6cb3f02178
--- /dev/null
+++ b/macros/generic/texdate/README
@@ -0,0 +1,26 @@
++AMDG
+
+This document is copyright 2018 by Donald P. Goodman, and is
+released publicly under the LaTeX Project Public License. The
+distribution and modification of this work is constrained by the
+conditions of that license. See
+ http://www.latex-project.org/lppl.txt
+for the text of the license. This document is released
+under version 1.3(c) of that license, and this work may be distributed
+or modified under the terms of that license or, at your option, any
+later version.
+
+This work has the LPPL maintenance status 'maintained'.
+
+The Current Maintainer of this work is Donald P. Goodman
+(dgoodmaniii@gmail.com).
+
+This work consists of the files texdate.ins and
+texdate.dtx, along with derived files texdate.sty and
+texdate.pdf.
+
+The texdate package provides plain-TeX-compatible commands
+for printing and manipulating dates.
+
+This package should run properly on any properly running TeX
+or LaTeX system.
diff --git a/macros/generic/texdate/lppl.txt b/macros/generic/texdate/lppl.txt
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/generic/texdate/lppl.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/generic/texdate/texdate.dtx b/macros/generic/texdate/texdate.dtx
new file mode 100644
index 0000000000..329788416b
--- /dev/null
+++ b/macros/generic/texdate/texdate.dtx
@@ -0,0 +1,1612 @@
+% \iffalse
+% +AMDG This document was begun on 1 May 1202, the
+% feast of St. Joseph the Worker, and it
+% is humbly dedicated to him and to the Immaculate Heart of
+% Mary for their prayers, and to the Sacred Heart of Jesus
+% for His mercy.
+%
+% This document is copyright 2018 by Donald P. Goodman, and is
+% released publicly under the LaTeX Project Public License. The
+% distribution and modification of this work is constrained by the
+% conditions of that license. See
+% http://www.latex-project.org/lppl.txt
+% for the text of the license. This document is released
+% under version 1.3(c) of that license, and this work may be distributed
+% or modified under the terms of that license or, at your option, any
+% later version.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Donald P. Goodman
+% (dgoodmaniii@gmail.com).
+%
+% This work consists of texdate.dtx, texdate.ins, and
+% derived files texdate.sty and texdate.pdf.
+% \fi
+
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{texdate}[2018/12/08 v2.0 Print and manipulate dates in plain TeX]
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{doc}
+\usepackage{modulus}
+\usepackage{multicol}
+\usepackage{texdate}
+\usepackage{fancyvrb}
+\usepackage{fvrb-ex}
+\usepackage{booktabs}
+\usepackage[typeone]{dozenal}
+\def\x{\noexpand{\TextOrMath{\protect\doz{{X}}}{\doz@X}}}%
+\def\e{\noexpand{\TextOrMath{\protect\doz{{E}}}{\doz@E}}}%
+\usepackage{longtable}
+\usepackage{xellipsis}
+
+\begin{document}
+\DocInput{texdate.dtx}
+\end{document}
+%</driver> \fi
+%
+% \title{The |texdate| Package, v2.0}
+% \author{Donald P.\ Goodman III}
+% \date{\today}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% \TeX\ and \LaTeX\ provide few facilities for dates by
+% default, though many packages have filled this gap.
+% |texdate| fills it, as well, with a pure \TeX-primitive
+% implementation. It can print dates, advance them by
+% numbers of days, weeks, or months, determine the weekday
+% automatically, and print them in (mostly) arbitrary
+% format. It can also print calendars (monthly and yearly)
+% automatically, and can be easily localized for non-English
+% languages.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction: The State of the \TeX}
+% \label{sect:intro}
+%
+% \TeX\ by default contains very little facilities for
+% dealing with dates, and \LaTeX\ follows suit. As far as
+% primitives go, \TeX\ just offers the counters |\day|,
+% |\month|, and |\year|, which give the current values of
+% those units of time; e.g., |\the\year-\the\month-\the\day|
+% will yield ``\the\year-\the\month-\the\day'' (which is the
+% date on which this document was compiled). \LaTeX\ also
+% has |\today|, which will produce the current date in the
+% default American style: ``\today''. But that's
+% really about all there is.
+%
+% Many packages have attempted to fill up this gap, some
+% with excellent success; |datetime2| certain deserves
+% special mention here, particularly as it goes beyond what
+% |texdate| offers, given that |texdate| contains no
+% facilities for \emph{times} at all. |texdate| tries to fill the gap,
+% as well; but it does it using only \TeX-primitives, in the
+% hope that the solution will be (a) pretty fast, (b)
+% pretty portable, and (c) not requiring the loading of
+% massive packages, only a fraction of the capabilities of
+% which will actually be used.
+%
+% For comparison, |datetime2| uses |pgfcalendar|, which of
+% course requires |pgf|, which is a huge package. Our
+% modern computers make loading such packages often a
+% negligible overhead; but with large and complex documents,
+% it's not always trivial. Also, it's an enjoyable
+% challenge to write a usable package in \TeX\ for something
+% for which \TeX\ was not designed; and some of us enjoy
+% \emph{just knowing} that we're using a lean package, even
+% it makes little practical difference.
+%
+% This document is numbered in \emph{dozenal}, or base
+% twelve; numbering proceeds 1, 2, 3, 4, 5, 6, 7, 8, 9, \x,
+% \e, 10, 11, 12\xelip It uses the |dozenal| \LaTeX\
+% package to do this. For more information, see
+% \url{http://www.dozenal.org}.
+%
+% \section{Dependencies}
+% \label{sect:deps}
+%
+% |texdate| requires the |padcount|, |modulus|, and |iflang|
+% packages internally, so be sure that they are installed.
+% They are all available on CTAN and in the \TeX{}Live
+% distribution.
+%
+% \section{Printing and Setting the Date}
+% \label{sect:basic}
+%
+% |texdate| works with an \emph{internal date}, which is the
+% current setting of all the date variables. When
+% initiated, the internal date is 1 January of the current
+% year. We can print that date with
+% \DescribeMacro{\printdate}|\printdate|:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \printdate
+% \end{Example}
+% \hrule
+% \bigskip
+%
+% We can easily set the internal date to the current date by
+% running the macro \DescribeMacro{\initcurrdate}|\initcurrdate|:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \printdate
+% \end{Example}
+% \hrule
+% \bigskip
+%
+% (This is the current date at the time this document was
+% compiled.)
+%
+% You can also easily \emph{set} the internal date, by
+% running the \DescribeMacro{\initdate}|\initdate| macro:
+%
+% \begin{quote}
+% \cmd{\initdate} \marg{year} \marg{month} \marg{day-of-month}
+% \end{quote}
+%
+% The elements of the date must be supplied to |\initdate|
+% in that order, or |texdate| will become confused. It's
+% obvious why; what should |texdate| do if the month is
+% entered as |2019|?
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printdate
+% \end{Example}
+% \hrule
+% \bigskip
+%
+% While internally dates are kept as zero-indexed, these
+% dates are received by |\initdate| as one-indexed; that is,
+% |24| will mean the twenty-fourth, not the twenty-fifth,
+% because we count starting at 1 rather than 0.
+%
+%
+% \section{Date Formats}
+% \label{sect:dateforms}
+%
+% The date format we've seen so far is the default, which is
+% designed primarily to demonstrate several of the possible
+% variables that can be in a date format. Naturally, you'll
+% want to change it; and it can be changed, almost
+% arbitrarily, simply by redefining a command, or by using
+% one of several presets.
+%
+% \subsection{Preset Formats}
+% \label{sub:presetforms}
+%
+% |texdate| provides a number of preset formats that can be
+% easily selected without having to design a format string
+% (for which see Section \ref{sub:customforms}, on page
+% \pageref{sub:customforms}).
+%
+% \DescribeMacro{\printfdate\{ISO\}}|\printfdate{ISO}|
+% will print the current date in the default
+% ISO 8601 format, which is \emph{|yyyymmdd|}. In
+% |texdate|'s formatting strings, this is |Ymd|; you'll
+% learn more about these in Section \ref{sub:customforms}.
+% There is also the ``ISO extended'' form, |Y-m-d|.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printfdate{ISO}
+%
+% \printfdate{ISOext}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% For Americans fond of our curious customary format, you
+% can use
+% \DescribeMacro{\printfdate\{american\}}|\printfdate{american}|;
+% in |texdate| format strings, this is |B\ d, Y|. There is
+% also
+% \DescribeMacro{\printfdate\{shamerican\}}|\printfdate{shamerican}|,
+% which is the abbreviated form, using slashes rather than
+% hyphens.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printfdate{american}
+%
+% \printfdate{shamerican}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% The British also have their own ways of writing dates,
+% which correspond largely to the way the American military
+% writes them (which are consequently sometimes called
+% ``military dates,'' in the same way that twenty-four-hour
+% time readings are sometimes called ``military time'').
+% These are
+% \DescribeMacro{\printfdate\{british\}}|\printfdate{british}|
+% and
+% \DescribeMacro{\printfdate\{shbritish\}}|\printfdate{shbritish}|,
+% along with alternate form
+% \DescribeMacro{\printfdate\{shbritishdots\}}|\printfdate{shbritishdots}|,
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printfdate{british}
+%
+% \printfdate{shbritish}
+%
+% \printfdate{shbritishdots}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% This is enough to cover the standards of most places in
+% the world. However, if you want something different, you
+% can easily create it with format strings.
+%
+% \subsection{Custom Date Formats}
+% \label{sub:customforms}
+%
+% All the custom formats described in Section
+% \ref{sub:presetforms} and printed with |\printfdate| are
+% created using the same general mechanism described in this
+% section. We will begin by discussing a way to generically
+% change the presentation of all dates called with the basic
+% |\printdate|, then move on to creating custom date formats
+% that can be printed by name with |\printfdate|.
+%
+% The macro \DescribeMacro{\setdateformat}|\setdateformat|
+% holds the formatting string for the date. It's not
+% \emph{completely} arbitrary, because none of the
+% characters used to produce specific parts of the date can
+% be used in the string itself; however, it's pretty
+% flexible despite that limitation.
+%
+% The default date format string, quite unsuitable for real
+% work, includes most of the possible control characters,
+% and is |A{ }(a),\ B\ (b){ }d,\ Y|. Note that spaces
+% have to be preserved by either \emph{bracing} them or
+% \emph{escaping} them; that is, to put a space in your
+% format string, use either ``|\ |'' or ``|{ }|''.
+%
+% Table \ref{tab:lets} on page \pageref{tab:lets} shows
+% the control characters, an
+% explanation of their meaning, and an example of each.
+% They assume the date 4 June 2019, selected by
+% |\initdate{2019}{6}{4}|.
+% \initdate{2019}{6}{4}
+%
+% \begin{table}[htp]
+% \centering
+% \begin{tabular}{lp{3in}l}
+% \toprule
+% \itshape Let. & \itshape Result & \itshape Ex. \\
+% \midrule
+% d & Numeric day of the month; 0-padded to two digits if
+% necessary & \printfdate{d} \\
+% e & Numeric day of the month; space-padded to two spaces
+% if necessary & \printfdate{e} \\
+% B & Full name of the month & \printfdate{B} \\
+% b & Abbreviated name of the month & \printfdate{b} \\
+% h & Abbreviated name of the month; same as |b| & \printfdate{h} \\
+% m & Number of month, with January as 1; 0-padded to two
+% digits if necessary & \printfdate{m} \\
+% A & Full name of the weekday & \printfdate{A} \\
+% a & Abbreviated name of the weekday & \printfdate{a} \\
+% w & Numeric value of weekday, with Sunday as 0 & \printfdate{w} \\
+% u & ISO numeric value of weekday, with Monday as 1 and
+% Sunday as 7 & \printfdate{u} \\
+% Y & Number of the current year & \printfdate{Y} \\
+% j & Numeric day of the year, starting on a constant count
+% from 1 Jan; 0-padded to three digits if necessary & \printfdate{j} \\
+% C & Century; essentially, the first two digits of the year &
+% \printfdate{C} \\
+% y & The year, in only two digits & \printfdate{y} \\
+% U & Week number of the year, starting at 0, with the week
+% starting on Sunday; 0-padded to two digits if
+% necessary & \printfdate{U} \\
+% V & ISO week number of the year, starting at 1, with the week
+% starting on Monday; 0-padded to two digits if
+% necessary & \printfdate{V} \\
+% W & Week number of the year, starting at 0, with the week
+% starting on Monday; 0-padded to two digits if necesary &
+% \printfdate{W} \\
+% \bottomrule
+% \end{tabular}
+% \caption{Control codes for date formats}
+% \label{tab:lets}
+% \end{table}
+%
+% For folks not familiar with the \emph{control characters}
+% concept, the essential idea is that you format some
+% information with a certain ``string,'' called the ``format
+% string.'' The format string contains some characters
+% which are meaningless as far as formatting goes, and are
+% passed through unchanged; and some characters which will
+% be replaced with certain information. In other words,
+% assume that we have a format string consisting of the
+% following characters: |a b c d e|. |c| is a control
+% character, and represents the information ``zzz''; the other
+% characters are not control characters.
+%
+% \begin{quote}
+% |a b c d e| $\rightarrow$ a b zzz d e
+% \end{quote}
+%
+% Anyone who has used GNU
+% |date| or BSD |date| will recognize these control
+% characters, though of course in those programs a |%|
+% character would be necessary, as well. |texdate|
+% duplicates the behavior of these programs as closely as
+% my \TeX-pertise allows.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \advancebyweeks{6}
+% \def\setdateformat{d\ B\ Y}
+% |d\ B\ Y|: \printdate\par
+% \def\setdateformat{Y-m-d}
+% |Y-m-d|: \printdate\par
+% \def\setdateformat{a,\ d\ b\ Y}
+% |a,\ d\ b\ Y|: \printdate\par
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% We can meddle with this however we like, except that these
+% control characters (the ones that turn into elements of
+% the date) cannot be included literally.
+%
+% You can also define \emph{named date formats}:
+% \DescribeMacro{\nameddateformat}
+%
+% \begin{quote}
+% \cmd{\nameddateformat} \marg{name} \marg{format-string}
+% \end{quote}
+%
+% Perhaps I want a peculiar date format, with the month,
+% followed by the year, followed by the day of the month,
+% followed by the day of the year in parentheses. My format
+% string should be |m-Y-d\ (j)|. I'll then want to use the
+% \DescribeMacro{\printfdate}|\printfdate| command with its single
+% argument, which is the name of the date format I want to
+% use.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \nameddateformat{weird}{m-Y-d\ (j)}
+% \printfdate{weird}\par
+% \printdate
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% It's worth nothing that all of the control characters also
+% have a formatted print string that can be called by name.
+% So one could duplicate the above |weird| date format the
+% hard way, by using these each individually:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \printfdate{m}-\printfdate{Y}-\printfdate{d} (\printfdate{j})
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% These seems a bit convoluted, but perhaps you want to wrap
+% it in a macro?
+%
+% \subsection{Number Format}
+% \label{sub:numforms}
+%
+% Any command which will work on a \TeX\ count register can
+% be inserted into the
+% \DescribeMacro{\texdatenumformat}|\texdatenumformat|
+% command, which will be applied to all the numbers which
+% |texdate| outputs. For example, if you are using the
+% |dozenal| package:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \def\texdatenumformat#1{\dozens{#1}}
+% \initdate{2018}{12}{25}
+% \printfdate{ISOext}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+%
+% \section{Manipulating Dates}
+% \label{sect:manipdate}
+%
+% |texdate| goes well beyond merely printing and setting
+% dates; you can manipulate them in many ways. The original
+% purpose of the package was to allow \LaTeX\ to print
+% calendar sheets and things of that nature without
+% resorting to an external program, or loading some enormous
+% package, so it needed the ability to move forward and
+% backward by given increments. So we have that.
+%
+% \subsection{Moving Dates Forward and Backward}
+% \label{sub:movedate}
+%
+% You can advance the date by a certain number of days,
+% weeks, or months. The macros are named, unsurprisingly,
+% \DescribeMacro{\advancebydays}|\advancebydays|,
+% \DescribeMacro{\advancebyweeks}|\advancebyweeks|, and
+% \DescribeMacro{\advancebymonths}|\advancebymonths|, each
+% of which takes one argument, which is the number of that
+% unit you wish to advance the date by. The corresponding
+% commands \DescribeMacro{\regressbydays}|\regressbydays|,
+% \DescribeMacro{\regressbyweeks}|\regressbyweeks|, and
+% \DescribeMacro{\regressbymonths}|\regressbymonths| also
+% exist.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% Current date: \printdate\par
+% \advancebydays{8}
+% 8 days later: \printdate\par
+% \advancebyweeks{4}
+% 4 weeks later: \printdate\par
+% \advancebymonths{4}
+% 4 months later: \printdate\par
+% \regressbydays{14}
+% 14 days earlier: \printdate\par
+% \regressbyweeks{8}
+% 8 weeks earlier: \printdate\par
+% \regressbymonths{2}
+% 2 months earlier: \printdate\par
+% \end{Example}
+% \nobreak\medskip\nobreak
+% \hrule
+% \bigskip
+%
+% Note that |\advancebymonths| does not validate the date,
+% so it's possible that you'll end up with something
+% impossible, such as 31 September. It's best to watch the
+% results of this one carefully.
+%
+% Both the |\advanceby|s and the |\regressby|s should be
+% given positive numbers; negative numbers will just confuse
+% them.
+%
+% \subsection{Saving and Restoring Dates}
+% \label{sub:savedate}
+%
+% Sometimes you may wish to save a date, change the internal
+% date, use that internal date for a while, then restore the
+% old date. |texdate| makes it possible to save and use as
+% many dates as you want (or, at any rate, as many as \TeX\
+% will tolerate).
+%
+% \DescribeMacro{\savedate}|\savedate| takes a single
+% argument, the \emph{name} you'd like to give your saved
+% date. This can be anything that \TeX\ allows in a control
+% sequence; best to stick with normal, seven-bit ASCII
+% letters. You then access the saved date with
+% \DescribeMacro{\restoredate}|\restoredate|, which takes
+% that same name as its argument.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \printdate\par
+% \savedate{current}
+% \advancebyweeks{12}
+% \printdate\par
+% \savedate{advanced}
+% \restoredate{current}
+% \printdate\par
+% \advancebydays{3}
+% \printdate\par
+% \restoredate{advanced}
+% \printdate\par
+% \restoredate{current}
+% \printdate\par
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% You can also retrieve your saved date directly; rather
+% than calling |\restoredate|, you can call
+% |\savedate<name>|, without the angle brackets. That's the
+% name that |texdate| uses internally, and calls with
+% |\restoredate| to get your information back.
+%
+%
+% \section{Convenience Macros}
+% \label{sect:convmacs}
+%
+% |texdate| offers a few macros for tasks which its author
+% anticipates will likely be common. For example, to
+% produce a small monthly calendar, consider using the
+% |\texdcal| macro, which takes two arguments: the year and
+% the month of the calendar you're seeking to create:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \begin{center}
+% \begin{tabular}{cc}
+% \texdcal{2018}{5} &
+% \texdcal{2018}{6} \\
+% \texdcal{2018}{8} &
+% \texdcal{2018}{9} \\
+% \end{tabular}
+% \end{center}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% Notice that |\texdcal| does the right thing when there a
+% month goes into an extra week: it simply prints another
+% week. It also correctly refuses to print the days of a
+% week which do not belong to the requested month.
+%
+% \DescribeMacro{\texdcalyear}|\texdcalyear| will produce
+% one of these calendars for an entire year, in three
+% columns; the year chosen is the argument given to the
+% macro. Because the margins of the \LaTeX\ standard
+% classes are much too large (or rather, the paper sizes are
+% much too large; the text blocks are rather nicely
+% proportioned), |\texdcalyear| prints this calendar in a
+% small size, with very small space between columns.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \footnotesize%
+% \begin{center}
+% \texdcalyear{2018}
+% \end{center}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% Obviously, it uses |\texdcal| internally to do this, so
+% the definition of |\texdcalyear| is much simpler than that
+% of |\texdcal|.
+%
+% Just as obviously, these yearly calendars
+% could easily be formatted in many different ways; so many,
+% in fact, that attempting to make the macros flexible
+% enough for meaningful customization would be prohibitively
+% difficult. More fruitful results can be obtained by
+% reading the macros themselves (they are truly not very
+% difficult) and customizing them oneself.
+%
+% \section{Language Specification}
+% \label{sect:lang}
+%
+% |texdate| does understand \LaTeX\ language specifications,
+% using Heiko Oberdiek's |iflang| package, which should work
+% for both |babel| and |polyglossia|. Built-in are
+% only English (the default), Spanish, French, and German.
+% However, it's pretty simple to customize the
+% month name and weekday name strings by defining a few
+% commands, so if you need a different language, you just
+% need to redefine a few strings.
+%
+% Each string begins with the prefix |\texd@|, then the
+% English ordinal string for the order in which it comes,
+% with January being the first month and Sunday being the
+% first weekday; e.g., |\texd@first|. Then comes |sh| if
+% it's an abbreviation; e.g., |\texd@firstsh|. Finally
+% comes the string |mon| if it's a month, or |name| if
+% it's a weekday name. Below is the complete list, for
+% German.
+%
+% \begin{quote}
+% |\makeatletter|\\
+% |\def\texd@firstmon{Januar}|\\
+% |\def\texd@firstshmon{Jan}|\\
+% |\def\texd@secondmon{Februar}|\\
+% |\def\texd@secondshmon{Feb}|\\
+% |\def\texd@thirdmon{März}|\\
+% |\def\texd@thirdshmon{März}|\\
+% |\def\texd@fourthmon{April}|\\
+% |\def\texd@fourthshmon{Apr}|\\
+% |\def\texd@fifthmon{Mai}|\\
+% |\def\texd@fifthshmon{Mai}|\\
+% |\def\texd@sixthmon{Juni}|\\
+% |\def\texd@sixthshmon{Juni}|\\
+% |\def\texd@seventhmon{Juli}|\\
+% |\def\texd@seventhshmon{Juli}|\\
+% |\def\texd@eighthmon{August}|\\
+% |\def\texd@eighthshmon{Aug}|\\
+% |\def\texd@ninthmon{September}|\\
+% |\def\texd@ninthshmon{Sept}|\\
+% |\def\texd@tenthmon{Oktober}|\\
+% |\def\texd@tenthshmon{Okt}|\\
+% |\def\texd@eleventhmon{November}|\\
+% |\def\texd@eleventhshmon{Nov}|\\
+% |\def\texd@twelfthmon{Dezember}|\\
+% |\def\texd@twelfthshmon{Dez}|\\
+% |\def\texd@firstdayname{Sonntag}|\\
+% |\def\texd@firstdayshname{So}|\\
+% |\def\texd@seconddayname{Montag}|\\
+% |\def\texd@seconddayshname{Mo}|\\
+% |\def\texd@thirddayname{Dienstag}|\\
+% |\def\texd@thirddayshname{Di}|\\
+% |\def\texd@fourthdayname{Mittwoch}|\\
+% |\def\texd@fourthdayshname{Mi}|\\
+% |\def\texd@fifthdayname{Donnerstag}|\\
+% |\def\texd@fifthdayshname{Do}|\\
+% |\def\texd@sixthdayname{Freitag}|\\
+% |\def\texd@sixthdayshname{Fr}|\\
+% |\def\texd@seventhdayname{Samstag}|\\
+% |\def\texd@seventhdayshname{Sa}|\\
+% |\makeatother|
+% \end{quote}
+%
+% Doing something like this for your desired language,
+% \emph{after} you've loaded |texdate|, will localize all
+% the strings involved.
+%
+% \section{Plain \TeX\ Usage}
+%
+% I was asked recently, quite unexpectedly, whether
+% |texdate| could be used with plain \TeX. My initial
+% thought was an obvious ``yes,'' since it's implemented
+% entirely with \TeX\ primitives; however, the matter wasn't
+% quite that simple. The package file does use some
+% \LaTeX-specific macros, all related to the packaging
+% itself; and it uses a |padcount| macro which doesn't work
+% with plain \TeX. Also, according to \LaTeX\ convention,
+% it uses |@| as a letter in control sequences willy-nilly,
+% and \TeX\ balks at such craziness. Finally, a small
+% change in the code (due to deep \TeX\ magic involving
+% |\outer| that is best left unspoken) needed to be made.
+% This done, however, the package \emph{can} (mostly) be
+% used in plain \TeX. Here's how.
+%
+% The following must be included in your document in order
+% to prevent \TeX\ from choking on our \LaTeX\ packaging
+% macros:
+%
+% \begin{quote}
+% |\def\NeedsTeXFormat#1[#2]{}|\\
+% |\def\ProvidesPackage#1[#2]{}|\\
+% |\def\RequirePackage#1{}|\\
+% |\def\AtBeginDocument#1{}|\\
+% \end{quote}
+%
+% This simply defines these macros to do nothing, which is
+% how \TeX\ prefers packaging macros to work. Then, you
+% need to tell \TeX\ that |@| can, in fact, be part of the
+% name of a control sequence:
+%
+% \begin{quote}
+% |\catcode`@=11|
+% \end{quote}
+%
+% This, again, is some deep \TeX\ magic best left
+% undiscussed for the benefit of those not interested.
+% There's plenty of information around if you really want
+% it. Finally, we need to input the packages that |texdate|
+% needs, and tell \TeX\ not to use the
+% |padcount| macro that it doesn't like, by redefining it to
+% simply spit out its own parameter:
+%
+% \begin{quote}
+% |\input modulus.sty|\\
+% |\input padcount.sty|\\
+% |\input texdate.sty|\\
+% |\def\padnum#1{#1}|\\
+% \end{quote}
+%
+% These things done, |texdate| will work almost entirely
+% with plain \TeX, except that (obviously) the padding
+% options won't have any effect. So, if plain \TeX\ is your
+% preference, go for it.
+%
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+\RequirePackage{modulus}%
+\RequirePackage{padcount}%
+\RequirePackage{iflang}%
+\newcount\texd@loopi\texd@loopi=0%
+\newcount\texd@mon\texd@mon=0%
+\newcount\texd@dow\texd@dow=0%
+\newcount\texd@dom\texd@dom=0%
+\newcount\texd@yr\texd@yr=\year%
+\newcount\texd@rdom\texd@rdom=\texd@dom\advance\texd@rdom by1%
+\newcount\texd@rmon%
+%% taken from dayofweek.tex, by Martin Minow of DEC;
+%% included in TeXLive
+\newcount\texd@dow% Gets day of the week
+\newcount\texd@leap% Leap year fingaler
+\newcount\texd@x% Temp register
+\newcount\texd@y% Another temp register
+\def\texd@nextdow#1#2#3{%
+ \global\texd@leap=#2%
+ \global\advance\texd@leap by-14%
+ \global\divide\texd@leap by12%
+ \global\advance\texd@leap by#3%
+ \global\texd@dow=#2%
+ \global\advance\texd@dow by10%
+ \global\texd@y=\texd@dow%
+ \global\divide\texd@y by13%
+ \global\multiply\texd@y by12%
+ \global\advance\texd@dow by-\texd@y%
+ \global\multiply\texd@dow by13%
+ \global\advance\texd@dow by-1%
+ \global\divide\texd@dow by5%
+ \global\advance\texd@dow by#1%
+ \global\advance\texd@dow by77%
+ \global\texd@x=\texd@leap%
+ \global\texd@y=\texd@x%
+ \global\divide\texd@y by100%
+ \global\multiply\texd@y by100%
+ \global\advance\texd@x by-\texd@y%
+ \global\multiply\texd@x by5%
+ \global\divide\texd@x by4%
+ \global\advance\texd@dow by\texd@x%
+ \global\texd@x=\texd@leap%
+ \global\divide\texd@x by400%
+ \global\advance\texd@dow by\texd@x%
+ \global\texd@x=\texd@leap%
+ \global\divide\texd@x by100%
+ \global\multiply\texd@x by2%
+ \global\advance\texd@dow by-\texd@x%
+ \global\texd@x=\texd@dow%
+ \global\divide\texd@x by7%
+ \global\multiply\texd@x by7%
+ \global\advance\texd@dow by-\texd@x%
+}
+%% end taken from dayofweek.tex, by Martin Minow of DEC;
+%% included in TeXLive
+\def\texd@leapyear{%
+}%
+\def\texd@downame{%
+ \ifcase\texd@dow
+ \texd@firstdayname%
+ \or%
+ \texd@seconddayname%
+ \or%
+ \texd@thirddayname%
+ \or%
+ \texd@fourthdayname%
+ \or%
+ \texd@fifthdayname%
+ \or%
+ \texd@sixthdayname%
+ \or%
+ \texd@seventhdayname%
+ \fi%
+}%
+\def\texd@shdowname{%
+ \ifcase\texd@dow
+ \texd@firstdayshname%
+ \or%
+ \texd@seconddayshname%
+ \or%
+ \texd@thirddayshname%
+ \or%
+ \texd@fourthdayshname%
+ \or%
+ \texd@fifthdayshname%
+ \or%
+ \texd@sixthdayshname%
+ \or%
+ \texd@seventhdayshname%
+ \fi%
+}%
+\def\texd@nextmonth{%
+ \ifnum\texd@mon<11\global\advance\texd@mon by1\fi%
+ \ifnum\texd@mon=11\global\texd@mon=0\fi%
+}%
+\def\texd@lastmonth{%
+ \ifnum\texd@mon=0%
+ \global\texd@mon=11%
+ \global\advance\texd@yr by-1%
+ \fi%
+ \ifnum\texd@mon>0\global\advance\texd@mon by-1\fi%
+}%
+\def\texd@nextdate{%
+ \ifnum\texd@mon=11%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@yr by1%
+ \global\texd@mon=0%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=10%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=9%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=8%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=7%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=6%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=5%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=4%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=3%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=2%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=1%
+ \ifnum\texd@leapyear=0%
+ \ifnum\texd@dom=27%
+ \global\advance\texd@mon by1%
+ \global\texd@dom=0%
+ \fi
+ \ifnum\texd@dom<27%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@leapyear=1%
+ \ifnum\texd@dom=28%
+ \global\advance\texd@mon by1%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<28%
+ \global\advance\texd@dom by1%
+ \fi%
+ \fi\fi%
+ \else\ifnum\texd@mon=0%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \global\texd@rdom=\texd@dom\global\advance\texd@rdom by1%
+ \global\texd@rmon=\texd@mon\global\advance\texd@rmon by1%
+ \texd@setjnum%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\texd@lastdate{%
+ \global\advance\texd@dom by-1%
+ \ifnum\texd@dom=0%
+ \global\advance\texd@mon by-1%
+ \ifnum\texd@mon=11%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=0%
+ \global\texd@mon=11%
+ \global\advance\texd@yr by-1%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=10%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=9%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=8%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=7%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=6%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=5%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=4%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=3%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=2%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=1%
+ \ifnum\texd@leapyear=0%
+ \global\texd@dom=27%
+ \else\ifnum\texd@leapyear=1%
+ \global\texd@dom=28%
+ \fi\fi%
+ \fi%
+ \ifnum\texd@mon=0%
+ \global\texd@dom=30%
+ \fi%
+ \fi%
+ \global\texd@rdom=\texd@dom\global\advance\texd@rdom by1%
+ \global\texd@rmon=\texd@mon\global\advance\texd@rmon by1%
+ \texd@setjnum%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\texd@setrdom{\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1}%
+\def\texd@setrmon{\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1}%
+% \end{macrocode}
+% We have to deal with leap years somehow. We have the
+% counter |\texd@leapyear|, which is 0 if it's not a leap
+% year and 1 if it is. Then we have |\texd@isleapyear|,
+% which sets the counter appropriately.
+% \begin{macrocode}
+\newcount\texd@leapyear\texd@leapyear=0%
+\def\texd@isleapyear{%
+ \global\texd@leapyear=0%
+ \modulo{\texd@yr}{4}%
+ \ifnum\remainder=0%
+ \modulo{\texd@yr}{100}%
+ \ifnum\remainder=0%
+ \global\texd@leapyear=0%
+ \fi\ifnum\remainder>0%
+ \global\texd@leapyear=1%
+ \fi%
+ \fi%
+}%
+% \end{macrocode}
+% Print the month names.
+% \begin{macrocode}
+\def\texd@monthname{%
+ \ifnum\texd@mon=0%
+ \texd@firstmon%
+ \fi%
+ \ifnum\texd@mon=1%
+ \texd@secondmon%
+ \fi%
+ \ifnum\texd@mon=2%
+ \texd@thirdmon%
+ \fi%
+ \ifnum\texd@mon=3%
+ \texd@fourthmon%
+ \fi%
+ \ifnum\texd@mon=4%
+ \texd@fifthmon%
+ \fi%
+ \ifnum\texd@mon=5%
+ \texd@sixthmon%
+ \fi%
+ \ifnum\texd@mon=6%
+ \texd@seventhmon%
+ \fi%
+ \ifnum\texd@mon=7%
+ \texd@eighthmon%
+ \fi%
+ \ifnum\texd@mon=8%
+ \texd@ninthmon%
+ \fi%
+ \ifnum\texd@mon=9%
+ \texd@tenthmon%
+ \fi%
+ \ifnum\texd@mon=10%
+ \texd@eleventhmon%
+ \fi%
+ \ifnum\texd@mon=11%
+ \texd@twelfthmon%
+ \fi%
+}%
+\def\texd@shmonthname{%
+ \ifnum\texd@mon=0%
+ \texd@firstshmon%
+ \fi%
+ \ifnum\texd@mon=1%
+ \texd@secondshmon%
+ \fi%
+ \ifnum\texd@mon=2%
+ \texd@thirdshmon%
+ \fi%
+ \ifnum\texd@mon=3%
+ \texd@fourthshmon%
+ \fi%
+ \ifnum\texd@mon=4%
+ \texd@fifthshmon%
+ \fi%
+ \ifnum\texd@mon=5%
+ \texd@sixthshmon%
+ \fi%
+ \ifnum\texd@mon=6%
+ \texd@seventhshmon%
+ \fi%
+ \ifnum\texd@mon=7%
+ \texd@eighthshmon%
+ \fi%
+ \ifnum\texd@mon=8%
+ \texd@ninthshmon%
+ \fi%
+ \ifnum\texd@mon=9%
+ \texd@tenthshmon%
+ \fi%
+ \ifnum\texd@mon=10%
+ \texd@eleventhshmon%
+ \fi%
+ \ifnum\texd@mon=11%
+ \texd@twelfthshmon%
+ \fi%
+}%
+% \end{macrocode}
+% Here we define the |\advanceby|s, so that you can add move
+% the internal date forward by a given number of units. Does
+% \emph{not} print the date.
+% \begin{macrocode}
+\def\advancebydays#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@nextdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\def\regressbydays#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@lastdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\newcount\texd@loopj%
+\def\advancebyweeks#1{%
+ \texd@loopi=0%
+ \texd@loopj=#1%
+ \multiply\texd@loopj by7%
+ \loop%
+ \ifnum\texd@loopi<\texd@loopj%
+ \texd@nextdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\def\regressbyweeks#1{%
+ \texd@loopi=0%
+ \texd@loopj=#1%
+ \multiply\texd@loopj by7%
+ \loop%
+ \ifnum\texd@loopi<\texd@loopj%
+ \texd@lastdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\def\advancebymonths#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@nextmonth%
+ \advance\texd@loopi by1%
+ \repeat%
+ \texd@setrmon%
+ \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+}%
+\def\regressbymonths#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@lastmonth%
+ \advance\texd@loopi by1%
+ \repeat%
+ \texd@setrmon%
+ \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+}%
+% \end{macrocode}
+% Print the date, either with the default format or a named
+% format.
+% \begin{macrocode}
+\def\printdate{%
+ \texd@dateformat%
+}%
+\def\printfdate#1{%
+ \texd@formatdateformat{#1}%
+}%
+% \end{macrocode}
+% This defines the date format. We need some helper macros
+% to flip through each character one at a time.
+% \begin{macrocode}
+\def\texd@expandloop#1{%
+ \texd@xloop#1\relax
+}
+\def\texdatenumformat#1{#1}
+\def\texd@xloop#1{%
+ \ifx\relax#1%
+ \else%
+ \ifx#1d%
+ \setpadnum{2}\setpadchar{0}%
+ \padnum{\texdatenumformat{\the\texd@rdom}}%
+ \else\ifx#1e%
+ \setpadnum{2}\setpadchar{\hskip1ex}%
+ \padnum{\texdatenumformat{\the\texd@rdom}}%
+ \else\ifx#1a%
+ \texd@shdowname%
+ \else\ifx#1A%
+ \texd@downame%
+ \else\ifx#1b%
+ \texd@shmonthname%
+ \else\ifx#1h%
+ \texd@shmonthname%
+ \else\ifx#1B%
+ \texd@monthname%
+ \else\ifx#1w%
+ \the\texd@dow%
+ \else\ifx#1u%
+ \ifnum\texd@dow>0\leavevmode\texdatenumformat{\the\texd@dow}\fi%
+ \ifnum\texd@dow=0 7\fi%
+ \else\ifx#1Y%
+ \setpadnum{2}\setpadchar{0}%
+ \padnum{\texdatenumformat{\the\texd@yr}}%
+ \else\ifx#1m%
+ \texd@setrmon%
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\texd@rmon}}%
+ \else\ifx#1j%
+ \texd@setjnum%
+ \setpadnum{3}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\texd@jnum}}%
+ \else\ifx#1C%
+ \quotient{\texd@yr}{100}%
+ \leavevmode\texdatenumformat{\the\intquotient}%
+ \else\ifx#1y%
+ \modulo{\texd@yr}{100}%
+ \leavevmode\texdatenumformat{\the\remainder}%
+ \else\ifx#1U%
+ \quotient{\texd@jnum}{7}
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+ \else\ifx#1V%
+ \quotient{\texd@jnum}{7}
+ \ifnum\texd@dow>0\advance\intquotient by1\fi%
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+ \else\ifx#1W%
+ \quotient{\texd@jnum}{7}
+ \ifnum\texd@dow=0\advance\intquotient by-1\fi%
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+ \else%
+ #1%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \expandafter\texd@xloop%
+ \fi%
+}%
+\def\texd@dateformat{%
+ \expandafter\expandafter\texd@expandloop{\setdateformat}%
+}%
+\def\texd@formatdateformat#1{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\texd@expandloop{\csname texd@df#1\endcsname}%
+}%
+\def\setdateformat{A{ }(a),\ B\ (b){ }d,\ Y}
+\def\nameddateformat#1#2{%
+ \expandafter\def\csname texd@df#1\endcsname{#2}%
+}%
+\nameddateformat{american}{B\ d,\ Y}
+\nameddateformat{shamerican}{m/d/Y}
+\nameddateformat{ISO}{Ymd}
+\nameddateformat{ISOext}{Y-m-d}
+\nameddateformat{shbritish}{d/m/Y}
+\nameddateformat{shbritishdots}{d.m.Y}
+\nameddateformat{british}{d\ B\ Y}
+\nameddateformat{d}{d}
+\nameddateformat{e}{e}
+\nameddateformat{B}{B}
+\nameddateformat{b}{b}
+\nameddateformat{h}{h}
+\nameddateformat{m}{m}
+\nameddateformat{A}{A}
+\nameddateformat{a}{a}
+\nameddateformat{w}{w}
+\nameddateformat{u}{u}
+\nameddateformat{Y}{Y}
+\nameddateformat{j}{j}
+\nameddateformat{C}{C}
+\nameddateformat{y}{y}
+\nameddateformat{U}{U}
+\nameddateformat{V}{V}
+\nameddateformat{W}{W}
+% \end{macrocode}
+% Initialize the date to the current date, or to an
+% arbitrary date, entered in the order year, month, and day
+% of month.
+% \begin{macrocode}
+\def\initcurrdate{%
+ \global\texd@mon=\month%
+ \global\advance\texd@mon by-1%
+ \global\texd@dom=\day%
+ \global\advance\texd@dom by-1%
+ \global\texd@yr=\year%
+ \texd@isleapyear%
+ \texd@setrdom%
+ \texd@setrmon%
+ \texd@setjnum%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\initdate#1#2#3{%
+ \global\texd@yr=#1%
+ \global\texd@mon=#2%
+ \global\advance\texd@mon by-1%
+ \global\texd@dom=#3%
+ \global\advance\texd@dom by-1%
+ \global\texd@setrdom%
+ \global\texd@setrmon%
+ \texd@setjnum%
+ \texd@isleapyear%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+% \end{macrocode}
+% Now we define the macros for saving and restoring dates.
+% \begin{macrocode}
+\def\savedate#1{%
+ \expandafter\edef\csname savedate#1\endcsname{\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}}%
+}%
+\def\restoredate#1{%
+ \csname savedate#1\endcsname%
+}%
+% \end{macrocode}
+% Convenience macros. First, |\texdcal|.
+% \begin{macrocode}
+\newcount\texd@looptmp\texd@looptmp=0%
+\def\texdcal#1#2{%
+ \global\texd@mon=#2%
+ \global\advance\texd@mon by-1%
+ \global\texd@yr=#1%
+ \global\texd@dom=0%
+ \texd@setrmon\texd@setrdom%
+ \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+ \def\setdateformat{B\ Y}%
+ \begin{tabular}{rrrrrrr}
+ \multicolumn{7}{c}{\printdate} \\
+ \loop\ifnum\texd@dow>0\texd@lastdate\repeat%
+ \def\setdateformat{d}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi\\
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate \\
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate \\
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate \\
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\
+ \end{tabular}
+}%
+\def\texdcalyear#1{%
+ \texd@yr=#1%
+ \texd@mon=0%
+ \texd@dom=0%
+ \texd@setrmon%
+ \texd@setrdom%
+ {\tabcolsep=3pt%
+ \begin{tabular}{ccc}
+ \texdcal{#1}{1} & \texdcal{#1}{2} & \texdcal{#1}{3} \\
+ \texdcal{#1}{4} & \texdcal{#1}{5} & \texdcal{#1}{6} \\
+ \texdcal{#1}{7} & \texdcal{#1}{8} & \texdcal{#1}{9} \\
+ \texdcal{#1}{10} & \texdcal{#1}{11} & \texdcal{#1}{12} \\
+ \end{tabular}
+ }%
+}%
+% \end{macrocode}
+% Calculate the day of the year (|%j|).
+% \begin{macrocode}
+\newcount\texd@jnum\texd@jnum=0%
+\def\texd@setjnum{%
+ \texd@jnum=0%
+ \ifnum\texd@mon>0\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>1%
+ \global\advance\texd@jnum by28%
+ \fi%
+ \ifnum\texd@mon>2\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>3\global\advance\texd@jnum by30\fi%
+ \ifnum\texd@mon>4\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>5\global\advance\texd@jnum by30\fi%
+ \ifnum\texd@mon>6\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>7\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>8\global\advance\texd@jnum by30\fi%
+ \ifnum\texd@mon>9\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>10\global\advance\texd@jnum by30\fi%
+ \global\advance\texd@jnum by\the\texd@dom%
+ \global\advance\texd@jnum by1%
+}%
+% \end{macrocode}
+% Language strings. I've only got English here right now, but
+% additiona languages would be trivial to add, either in a
+% particular document, or in a separate package.
+% \begin{macrocode}
+\def\texd@firstmon{January}%
+\def\texd@firstshmon{Jan}%
+\def\texd@secondmon{February}%
+\def\texd@secondshmon{Feb}%
+\def\texd@thirdmon{March}%
+\def\texd@thirdshmon{Mar}%
+\def\texd@fourthmon{April}%
+\def\texd@fourthshmon{Apr}%
+\def\texd@fifthmon{May}%
+\def\texd@fifthshmon{May}%
+\def\texd@sixthmon{June}%
+\def\texd@sixthshmon{Jun}%
+\def\texd@seventhmon{July}%
+\def\texd@seventhshmon{Jul}%
+\def\texd@eighthmon{August}%
+\def\texd@eighthshmon{Aug}%
+\def\texd@ninthmon{September}%
+\def\texd@ninthshmon{Sep}%
+\def\texd@tenthmon{October}%
+\def\texd@tenthshmon{Oct}%
+\def\texd@eleventhmon{November}%
+\def\texd@eleventhshmon{Nov}%
+\def\texd@twelfthmon{December}%
+\def\texd@twelfthshmon{Dec}%
+\def\texd@firstdayname{Sunday}%
+\def\texd@firstdayshname{Sun}%
+\def\texd@seconddayname{Monday}%
+\def\texd@seconddayshname{Mon}%
+\def\texd@thirddayname{Tuesday}%
+\def\texd@thirddayshname{Tue}%
+\def\texd@fourthdayname{Wednesday}%
+\def\texd@fourthdayshname{Wed}%
+\def\texd@fifthdayname{Thursday}%
+\def\texd@fifthdayshname{Thu}%
+\def\texd@sixthdayname{Friday}%
+\def\texd@sixthdayshname{Fri}%
+\def\texd@seventhdayname{Saturday}%
+\def\texd@seventhdayshname{Sat}%
+\AtBeginDocument{%
+ \IfLanguageName{spanish}{%
+ \def\texd@firstmon{enero}%
+ \def\texd@firstshmon{ene}%
+ \def\texd@secondmon{febrero}%
+ \def\texd@secondshmon{feb}%
+ \def\texd@thirdmon{marzo}%
+ \def\texd@thirdshmon{mar}%
+ \def\texd@fourthmon{abril}%
+ \def\texd@fourthshmon{abr}%
+ \def\texd@fifthmon{mayo}%
+ \def\texd@fifthshmon{may}%
+ \def\texd@sixthmon{junio}%
+ \def\texd@sixthshmon{jun}%
+ \def\texd@seventhmon{julio}%
+ \def\texd@seventhshmon{jul}%
+ \def\texd@eighthmon{agosto}%
+ \def\texd@eighthshmon{ago}%
+ \def\texd@ninthmon{septiembre}%
+ \def\texd@ninthshmon{sep}%
+ \def\texd@tenthmon{octubre}%
+ \def\texd@tenthshmon{oct}%
+ \def\texd@eleventhmon{noviembre}%
+ \def\texd@eleventhshmon{nov}%
+ \def\texd@twelfthmon{diciembre}%
+ \def\texd@twelfthshmon{dic}%
+ \def\texd@firstdayname{domingo}%
+ \def\texd@firstdayshname{dom}%
+ \def\texd@seconddayname{lunes}%
+ \def\texd@seconddayshname{lun}%
+ \def\texd@thirddayname{martes}%
+ \def\texd@thirddayshname{mar}%
+ \def\texd@fourthdayname{miercoles}%
+ \def\texd@fourthdayshname{mie}%
+ \def\texd@fifthdayname{jueves}%
+ \def\texd@fifthdayshname{jue}%
+ \def\texd@sixthdayname{viernes}%
+ \def\texd@sixthdayshname{vie}%
+ \def\texd@seventhdayname{sabado}%
+ \def\texd@seventhdayshname{sab}%
+ }{}%
+ \IfLanguageName{french}{%
+ \def\texd@firstmon{janvier}%
+ \def\texd@firstshmon{janv}%
+ \def\texd@secondmon{février}%
+ \def\texd@secondshmon{févr}%
+ \def\texd@thirdmon{mars}%
+ \def\texd@thirdshmon{mars}%
+ \def\texd@fourthmon{avril}%
+ \def\texd@fourthshmon{avr}%
+ \def\texd@fifthmon{mai}%
+ \def\texd@fifthshmon{mai}%
+ \def\texd@sixthmon{juin}%
+ \def\texd@sixthshmon{juin}%
+ \def\texd@seventhmon{juil}%
+ \def\texd@seventhshmon{juil}%
+ \def\texd@eighthmon{août}%
+ \def\texd@eighthshmon{août}%
+ \def\texd@ninthmon{septembre}%
+ \def\texd@ninthshmon{sept}%
+ \def\texd@tenthmon{octobre}%
+ \def\texd@tenthshmon{oct}%
+ \def\texd@eleventhmon{novembre}%
+ \def\texd@eleventhshmon{nov}%
+ \def\texd@twelfthmon{décembre}%
+ \def\texd@twelfthshmon{déc}%
+ \def\texd@firstdayname{dimanche}%
+ \def\texd@firstdayshname{dim}%
+ \def\texd@seconddayname{lundi}%
+ \def\texd@seconddayshname{lun}%
+ \def\texd@thirddayname{mardi}%
+ \def\texd@thirddayshname{mar}%
+ \def\texd@fourthdayname{mercredi}%
+ \def\texd@fourthdayshname{mer}%
+ \def\texd@fifthdayname{jeudi}%
+ \def\texd@fifthdayshname{jeu}%
+ \def\texd@sixthdayname{vendredi}%
+ \def\texd@sixthdayshname{ven}%
+ \def\texd@seventhdayname{samedi}%
+ \def\texd@seventhdayshname{sam}%
+ }{}%
+ \IfLanguageName{german}{%
+ \def\texd@firstmon{Januar}%
+ \def\texd@firstshmon{Jan}%
+ \def\texd@secondmon{Februar}%
+ \def\texd@secondshmon{Feb}%
+ \def\texd@thirdmon{März}%
+ \def\texd@thirdshmon{März}%
+ \def\texd@fourthmon{April}%
+ \def\texd@fourthshmon{Apr}%
+ \def\texd@fifthmon{Mai}%
+ \def\texd@fifthshmon{Mai}%
+ \def\texd@sixthmon{Juni}%
+ \def\texd@sixthshmon{Juni}%
+ \def\texd@seventhmon{Juli}%
+ \def\texd@seventhshmon{Juli}%
+ \def\texd@eighthmon{August}%
+ \def\texd@eighthshmon{Aug}%
+ \def\texd@ninthmon{September}%
+ \def\texd@ninthshmon{Sept}%
+ \def\texd@tenthmon{Oktober}%
+ \def\texd@tenthshmon{Okt}%
+ \def\texd@eleventhmon{November}%
+ \def\texd@eleventhshmon{Nov}%
+ \def\texd@twelfthmon{Dezember}%
+ \def\texd@twelfthshmon{Dez}%
+ \def\texd@firstdayname{Sonntag}%
+ \def\texd@firstdayshname{So}%
+ \def\texd@seconddayname{Montag}%
+ \def\texd@seconddayshname{Mo}%
+ \def\texd@thirddayname{Dienstag}%
+ \def\texd@thirddayshname{Di}%
+ \def\texd@fourthdayname{Mittwoch}%
+ \def\texd@fourthdayshname{Mi}%
+ \def\texd@fifthdayname{Donnerstag}%
+ \def\texd@fifthdayshname{Do}%
+ \def\texd@sixthdayname{Freitag}%
+ \def\texd@sixthdayshname{Fr}%
+ \def\texd@seventhdayname{Samstag}%
+ \def\texd@seventhdayshname{Sa}%
+ }{}%
+}%
+% \end{macrocode}
+% Happy \TeX{}ing!
diff --git a/macros/generic/texdate/texdate.ins b/macros/generic/texdate/texdate.ins
new file mode 100644
index 0000000000..79ff625b30
--- /dev/null
+++ b/macros/generic/texdate/texdate.ins
@@ -0,0 +1,65 @@
+% +AMDG
+% This document was begun on 12 Apr 1202, the feast of St.
+% Justin Martyr, and it is humbly dedicated to him and to
+% the Immaculate Heart of Mary, for their prayers, and to
+% the Sacred Heart of Jesus, for His mercy.
+%
+% This document is copyright 2018 by Donald P. Goodman, and is
+% released publicly under the LaTeX Project Public License. The
+% distribution and modification of this work is constrained by the
+% conditions of that license. See
+% http://www.latex-project.org/lppl.txt
+% for the text of the license. This document is released
+% under version 1.3(c) of that license, and this work may be distributed
+% or modified under the terms of that license or, at your option, any
+% later version.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Donald P. Goodman
+% (dgoodmaniii@gmail.com).
+%
+% This work consists of texdate.dtx, texdate.ins, and
+% derived files texdate.sty and texdate.pdf.
+
+\input docstrip.tex
+
+\preamble
+This is a generated file.
+
+This document is copyright 2018 by Donald P. Goodman, and is
+released publicly under the LaTeX Project Public License. The
+distribution and modification of this work is constrained by the
+conditions of that license. See
+ http://www.latex-project.org/lppl.txt
+for the text of the license. This document is released
+under version 1.3(c) of that license, and this work may be distributed
+or modified under the terms of that license or, at your option, any
+later version.
+
+This work has the LPPL maintenance status 'maintained'.
+
+The Current Maintainer of this work is Donald P. Goodman
+(dgoodmaniii@gmail.com).
+
+This work consists of texdate.dtx, texdate.ins, and
+derived files texdate.sty and texdate.pdf.
+\endpreamble
+
+\keepsilent
+\generate{\file{texdate.sty}{\from{texdate.dtx}{package}}}
+
+\Msg{******************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space texdate.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file texdate.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{******************************************************}
+
+\endbatchfile
diff --git a/macros/generic/texdate/texdate.pdf b/macros/generic/texdate/texdate.pdf
new file mode 100644
index 0000000000..be9ae3fde1
--- /dev/null
+++ b/macros/generic/texdate/texdate.pdf
Binary files differ
diff --git a/macros/generic/tokcycle/README b/macros/generic/tokcycle/README
new file mode 100644
index 0000000000..491a000697
--- /dev/null
+++ b/macros/generic/tokcycle/README
@@ -0,0 +1,14 @@
+The tokcycle package helps one to build tools to process tokens from an input stream, on a token-by-token basis, by applying category-based directives to each successive token.
+
+
+Author: Steven B Segletes, Christian Tellechea (contributor)
+
+Files : 1) tokcycle.tex
+ 2) tokcycle.sty
+ 3) tokcycle-doc.tex
+ 4) tokcycle-doc.pdf
+ 5) tokcycle-examples.tex
+ 6) tokcycle-examples.pdf
+ 7) README
+
+Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt \ No newline at end of file
diff --git a/macros/generic/tokcycle/tokcycle-doc.pdf b/macros/generic/tokcycle/tokcycle-doc.pdf
new file mode 100644
index 0000000000..c36edd5f64
--- /dev/null
+++ b/macros/generic/tokcycle/tokcycle-doc.pdf
Binary files differ
diff --git a/macros/generic/tokcycle/tokcycle-doc.tex b/macros/generic/tokcycle/tokcycle-doc.tex
new file mode 100644
index 0000000000..e7131379cf
--- /dev/null
+++ b/macros/generic/tokcycle/tokcycle-doc.tex
@@ -0,0 +1,593 @@
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage{xcolor,tokcycle,verbatimbox,tabstackengine,lipsum}
+\colorlet{bred}{red!90!blue}
+\usepackage{caption}
+\captionsetup{font={sf, footnotesize},labelfont={sf},textfont={footnotesize}}
+\fboxsep=1.5pt\relax
+\makeatletter
+\let\svlt<
+\let\svgt>
+\catcode`>=\active %
+\catcode`<=\active %
+\def\openesc#1{\if\svlt#1\itshape\rmfamily\let\xsvgt\@empty\else
+ \svlt\itshape\rmfamily#1\let\xsvgt\svgt\fi}
+\def\closeesc{\upshape\ttfamily\xsvgt}
+\def\vbdelim{\small\catcode`<=\active\catcode`>=\active
+\def<{\openesc}
+\def>{\closeesc}}
+\catcode`>=12 %
+\catcode`<=12 %
+\newcommand\TokCycle{\textsf{tokcycle}}
+\newcommand\Character{\textit{Character}}
+\newcommand\Group{\textit{Group}}
+\newcommand\Macro{\textit{Macro}}
+\newcommand\Space{\textit{Space}}
+\newcommand\CGMS{\textit{C-G-M-S}}
+\newcommand\CGMnS{\textit{C}, \textit{G}, \textit{M}, and \textit{S}}
+\newcommand\macname[1]{\texttt{\char92#1}}
+\newenvironment{specfig}
+{\par\bigskip\vbox\bgroup\small\sffamily\centering}
+{\egroup\medskip\par}
+\newtoks\gtoks
+\newcommand\svgtoks[1]{\global\gtoks\expandafter{\the#1}}
+\frenchspacing
+
+\begin{document}
+
+%%% AGAIN
+
+%%%
+
+\begin{myverbbox}{\argone}#1\end{myverbbox}
+\begin{myverbbox}[\vbdelim\normalsize]{\vbnewcytoks}
+\newcytoks{<new token register>}
+\end{myverbbox}
+
+{\centering{\LARGE Package \TokCycle{}\par}
+Steven B Segletes
+{\footnotesize $<$steven.b.segletes.civ@mail.mil$>$}
+\\\small{contributor\footnote{
+I am extremely grateful to Christian
+ for his assistance in the development of this package.
+The \macname{addcytoks} macro was provided by him.
+He gave constant reminders on what the token parser should be able
+ to achieve, thus motivating me to spend the extra time striving for
+ a generality of application that would not otherwise have made it
+ into the package.
+I value highly his collegiality and hold his expertise in the highest
+ regard.
+}%
+: Christian Tellechea {\footnotesize$<$unbonpetit@netc.fr$>$}}\\\today\par}
+
+\begin{quote}
+The \TokCycle{} package helps one to build tools to process
+ tokens from an input stream.
+If a macro to process an arbitrary single
+ (non-macro, non-space) token can be built, then
+ \TokCycle{} can provide a wrapper for cycling through an
+ input stream (including macros, spaces, and groups)
+ on a token-by-token basis, using the
+ provided macro on each successive character.
+
+\TokCycle{} characterizes each successive token
+ in the input stream as a \Character, a \Group, a \Macro, or
+ a \Space.
+Each of these
+ token categories are processed with a unique directive,
+ to bring about the desired effect of the token cycle.
+\textit{If}-condition flags are provided to identify active,
+ implicit, and catcode-6 tokens as they are digested.
+The package provides a number of options
+ for handling groups.
+\end{quote}
+
+\tableofcontents
+
+\makeatother
+\section{The \TokCycle{} macros and environments}\label{s:intro}
+
+The purpose of the \TokCycle{} package is to provide a tool
+ to assist the user in developing token-processing macros and
+ environments.
+The types of processing is limited only by the creativity of the user,
+ but examples might include letter-case-operations, letter spacing,
+ dimensional manipulation,
+ simple-ciphering, \{group\} manipulation, macro removal, etc.
+
+The package can be loaded into both plain \TeX{}, by way of the
+ invocation \verb|\input tokcycle.tex|
+ as well as \LaTeX, via \verb|\usepackage{tokcycle}|.
+It provides a total of 6 macros/pseudo environments, based on
+ three criteria:
+\begin{itemize}
+\item Two pseudo-environments with the phrase ``\texttt{tokencycle}''
+ in the name, and four macros containing the phrase ``\texttt{tokcycle}''.
+The pseudo-\hspace{0pt}environments operate within a group and typeset
+ their result upon completion.
+The macros operate within the document's current scope, but do not typeset the
+ result automatically.
+In the case of both macros and pseudo-environments, the transformed result
+ is available for later use, being stored in the package
+ token register named \macname{cytoks}.
+
+\item Two macros and one pseudo-environment containing the
+ phrase ``\texttt{xpress}''.
+Without the phrase, the macro/environment requires four
+ \textit{processing directives} to be \textit{explicitly} specified,
+ followed by the input stream.
+With the phrase present, only the input stream is to be provided.
+In the \texttt{xpress} case, the \textit{processing directives} are
+ to have been separately specified via external macro and/or are taken
+ from the most recent \TokCycle{} macro invocation (failing that,
+ are taken from the package initialization).
+
+\item Two macros containing the phrase ``\texttt{expanded}''.
+When present, the input stream of the token cycle is subject to the
+ new \TeX{} primitive, \macname{expanded}, prior to processing by
+ the \TokCycle{} macro.
+Expansion of specific macros in the input stream can be inhibited
+ in the input stream with the use of \macname{noexpand}.
+Note that there are no \texttt{expanded} environments in \TokCycle,
+ as \TokCycle{} environments do not pre-tokenize their
+ input stream.
+
+\end{itemize}
+
+The basic approach of all macros/environments is to grab each
+ successive token (or group) from the input stream,
+ decide what category it is, and use the currently active
+ processing directives to make any desired transformation of the
+ token (or group).
+Generally, with rare exception, the processed tokens should be stored
+ in the token register \macname{cytoks}, using the tools provided
+ by the package.
+The cycle continues until the input stream is terminated.
+
+As tokens/groups are read from the input stream, they are
+ categorized according to four type classifications, and are
+ subjected to the user-specified processing directive associated
+ with that category of token/group.
+The \TokCycle{} categories by which the input stream
+ is dissected include \Character{},
+ \Group{}, \Macro{}, and \Space{}.
+The syntax of the non-\texttt{xpress} macros/environments is\medskip
+
+\begin{verbbox}[\vbdelim]
+\tokcycle <<or>> \expandedtokcycle
+ {<Character processing directive>}
+ {<Group-content processing directive>}
+ {<Macro processing directive>}
+ {<Space processing directive>}
+ {<token input stream>}
+\end{verbbox}
+\theverbbox\medskip\par\noindent
+or, alternately, for the pseudo-environment,
+
+\begin{verbbox}[\vbdelim]
+\tokencycle
+ {<Character processing directive>}
+ {<Group-content processing directive>}
+ {<Macro processing directive>}
+ {<Space processing directive>}<token input stream>\endtokencycle
+\end{verbbox}
+\medskip\theverbbox\medskip\par\noindent
+For the \texttt{xpress} macros, the syntax is
+
+\begin{verbbox}[\vbdelim]
+\tokcyclexpress <<or>> \expandedtokcyclexpress
+ {<token input stream>}
+\end{verbbox}
+\medskip\theverbbox\medskip\par\noindent\medskip
+or, alternately, for the \texttt{xpress}-pseudo-environment,
+
+\begin{verbbox}[\vbdelim]
+\tokencycleexpress<token input stream>\endtokencyclexpress
+\end{verbbox}
+\theverbbox\medskip
+\begin{sloppypar}
+
+In addition to the above macros/environments, the means is
+ provided to define new \TokCycle{} environments:
+
+\begin{verbbox}[\vbdelim]
+\tokencycleenvironment\environment_name
+ {<Character processing directive>}
+ {<Group-content processing directive>}
+ {<Macro processing directive>}
+ {<Space processing directive>}%
+\end{verbbox}
+\medskip\theverbbox\medskip\par\noindent
+This will then permit simplified invocations of the form
+
+\begin{verbbox}[\vbdelim]
+\environment_name<token input stream>\endenvironment_name
+\end{verbbox}
+\medskip\theverbbox\medskip\par\noindent
+
+
+\subsection{Externally specified directives and directive resets}
+
+For use in \texttt{xpress} mode, the directives for the \CGMS{}
+ categories may be externally pre-specified, respectively,
+ via the four macros \macname{Characterdirective},
+ \macname{Groupdirective}, \macname{Macrodirective},
+ and \macname{Spacedirective}, each taking an argument containing
+ the particulars of the directive specification.
+
+Each of these directives may be individually reset to the package
+ default with the following argument-free invocations:
+ \macname{resetCharacterdirective}, \macname{resetGroupdirective},
+ \macname{resetMacrodirective}, or \macname{resetSpacedirective}.
+In addition, \macname{resettokcycle} is also provided, which
+ not only resets all four directives collectively, but it also
+ resets, to the default configuration, the manner in which explicit
+ and implicit group tokens are processed.
+Finally, it resets the \macname{aftertokcycle} macro to empty.
+\end{sloppypar}
+
+The default directives at package outset and upon reset are
+
+\begin{verbbox}[\vbdelim]
+\Characterdirective{\addcytoks{#1}}
+\Groupdirective{\processtoks{#1}}
+\Macrodirective{\addcytoks{#1}}
+\Spacedirective{\addcytoks{#1}}
+\aftertokcycle{}
+\stripgroupingfalse
+\stripimplicitgroupingcase{0}
+\end{verbbox}
+\medskip\theverbbox\medskip\noindent
+
+The interpretation of these directives will be explained in the
+ remainder of this document.
+
+
+
+\section{Commands in the \TokCycle{} directives}\label{s:coms}
+
+The command-line token cycling tools to be employed in the package were
+ listed in section~\ref{s:intro}.
+For each of those commands/pseudo-environments provided, the
+ user must (explicitly or implicitly) detail a set of directives to
+ specify the manner in which the \Character{}, \Group{}, \Macro{},
+ and \Space{} tokens found in the input stream are to be processed.
+The \CGMS{} processing
+ directives consist of normal \TeX/\LaTeX{} commands and user-defined
+ macros to accomplish the desired effect.
+There are, however, several macros provided by the package to assist
+ the user in this endeavor.
+
+The recommended way to apply this package is to collect the
+ \TokCycle-transformed results of the input stream in a token register
+ provided by the package, named \macname{cytoks}.
+Its contents can then be typeset via \verb|\the\cytoks|.
+The macro for appending things to \macname{cytoks}, to be used in
+ the package directives, is \macname{addcytoks}.
+
+\subsection{Adding tokens to the output stream: \macname{addcytoks}}
+
+The macro provided to append tokens to the \macname{cytoks} token register is
+ named \macname{addcytoks[]\{\}}.
+Its mandatory argument consists of tokens denoting \textit{what} you
+ would like to append to the \macname{cytoks} register, while the
+ optional argument denotes \textit{how} you would like them appended (valid
+ options include positive integers \verb|[<|\textit{n}\verb|>]| and
+ the letter \texttt{[x]}).
+
+When the optional argument is omitted, the specified tokens are appended
+ \texttt{literally} to the register (without expansion).
+An integer option, call it \textit{n}, takes the
+ the mandatory argument, and expands it $n$-times, and appends the
+ result to \macname{cytoks}.
+The \texttt{[x]} option employs the \macname{expanded} primitive to maximally
+ expand the argument before appending it to \macname{cytoks}.
+
+The \texttt{[x]} option will prove useful when the \Character{} directive involves
+ a transformation that is fully expandable.
+Its use will allow the expanded
+ result of the transformation to be placed in the token register, rather
+ than the unexpanded transformation instructions.
+
+\subsubsection{\argone}
+
+In the context of the \CGMnS{} processing directives, one may refer to
+ \argone{} (e.g., in the argument to \macname{addcytoks}).
+\TeX{} users know that the first parameter to a \TeX{} macro is denoted
+ as \argone.
+The specification of all \TokCycle{} processing directives is structured
+ in such a way that ``\argone{}'' may be directly employed to indicate
+ the current token (or group) under consideration in the input stream.
+
+\subsection{\Group{} directive: \macname{ifstripgrouping}, and \macname{processtoks}}
+
+The \Group{} directive is unique, in that it is the only directive whose
+ argument (\texttt{\#1}) may consist of more than a single token.
+There are two issues to consider when handling the tokens comprising a group:
+ do I retain or remove the grouping (cat-1,2 tokens)?
+Do I process the group's token content
+ individually through the token cycle, or collectively as a unit?
+
+Grouping in the output stream is determined by the externally set
+ condition \macname{ifstripgrouping}.
+The package default is \macname{stripgroupingfalse}, such that any grouping
+ that appears in the input stream will be echoed in the output stream.
+The alternative, \macname{stripgroupingtrue}, is dangerous
+ in the sense that it will strip the cat-1,2 grouping from the
+ group's tokens, thereby
+ affecting or even breaking code that utilizes such grouping for macro arguments.
+Modify \macname{ifstripgrouping} with care.
+
+The issue of treating the tokens comprising the content of a
+ group individually or collectively
+ is determined by the choice of macro inside the \Group{} directive.
+Within the \Group{} directive, the argument \texttt{\#1} contains the
+ collective tokens of the group (absent the outer cat-1,2 grouping).
+The default directive \macname{processtoks\{\#1\}} will recommit the
+ group's tokens individually to be processed through the token cycle.
+In contrast, the command \macname{addcytoks\{\#1\}} in the \Group{}
+ directive would directly add the collective group
+ of tokens to the \macname{cytoks} register, without being processed
+ individually by \TokCycle.
+
+\subsubsection{Implicit grouping tokens: \macname{stripimplicitgroupingcase}}
+
+Implicit grouping tokens (e.g., \macname{bgroup} \& \macname{egroup})
+ can be handled in one of \textit{three} separate ways.
+Therefore, rather than using an \textit{if}-condition, the external
+ declaration \macname{stripimplicitgroupingcase\{\}} is provided, which takes
+ one of 3 integers as its argument (0, 1, or $-$1).
+The package-default case of ``0'' indicates that the implicit-group tokens
+ will not be stripped, but rather echoed directly into the
+ output stream.
+The case of ``1'' indicates that the implicit-group tokens
+ will be stripped and not placed into the output stream
+ (as with explicit grouping, this is a dangerous case and should be
+ specified with care).
+
+Finally, the special case of $-$1 indicates that the implicit-group
+ tokens should instead be passed to the \Character{} directive for
+ further handling (note that the \macname{implicittoktrue} condition will
+ be set\footnote{as well as the internal condition \macname{tc@implicitgrptrue}}).
+Such a special treatment has limited application---for example,
+ when the intent is to detokenize these tokens.
+
+
+\subsection{Escaping content from \TokCycle{} processing\label{s:escape}}
+
+There are times you may wish to prevent tokens in the \TokCycle{}
+ input stream from being operated on by \TokCycle; you just want
+ the content passed through unchanged to the output; that is,
+with the intent to have multi-token content bypass the
+ \TokCycle{} directives altogether.
+
+\begin{sloppypar}
+The method developed by the package is to enclose the escaped
+ content in the input stream with the \TokCycle{} escape character,
+ initially set to a vertical rule character found on the keyboard:
+ ``$|\mkern1mu$''.
+The main proviso is that the escaped content cannot straddle a
+ group boundary (the complete group may, however, be escaped).
+The escape character can be changed with
+\begin{verbbox}[\vbdelim]
+\settcEscapechar{<escape-token>}\end{verbbox}
+\theverbbox
+$\!\!\!$.
+\end{sloppypar}
+
+\subsection{Flagged tokens}
+
+Certain token types are trapped and flagged via true/false
+ \textit{if}-conditions.
+These \textit{if}-conditions can be examined within the appropriate
+ directive (generally the \Character{} directive), to direct the
+ course of action within the directive.
+
+\subsubsection{Active characters: \macname{ifactivetok}}
+
+Active (cat-13) characters that occur in the input stream result in the
+ flag \macname{ifactivetok} being set \macname{activetoktrue}.
+Note that the substitution of the token's active value occurs \textit{after}
+ \TokCycle{} processing, and so \TokCycle{} only sees it as
+ \macname{active}, regardless of its later substitution or assignment.
+The only exception to this rule is with pre-expanded input,
+ \macname{expandedtokcycle[xpress]}.
+If an active token's substitution is governed by a \macname{def} (but
+ not \macname{let}), the text substitution will have occurred before
+ reaching the token cycle.
+
+\subsubsection{Implicit tokens: \macname{ifimplicittok}}
+
+Implicit tokens, those assigned via \macname{let}, are flagged with
+ a \texttt{true} setting for \macname{ifimplicittok}.
+Generally, implicit tokens will be directed to the \Character{}
+ directive for processing.
+There are, however, two exceptions:
+i) implicit grouping tokens (e.g., \macname{bgroup} and \macname{egroup})
+ will not appear in any directive unless the
+ \macname{stripimplicitgroupingcase} has been set to $-$1; and
+ii) implicit space tokens (e.g., \macname{@sptoken}) will be processed
+ by the \Space{} directive.
+
+\subsubsection{Parameter (cat-6) tokens (e.g., \texttt{\#}): \macname{ifcatSIX}}
+
+Typically, category-code 6 tokens (like \texttt{\#}) are used to
+ designate a parameter (e.g., \texttt{\#1}--\texttt{\#9}).
+Since they are unlikely to be used in that capacity inside a
+ tokcycle input stream, the package behavior is to convert them
+ into something cat-12 and set the \textit{if}-condition \macname{catSIXtrue}.
+In this manner, \macname{ifcatSIX} can be used inside the
+ Character directive to trap and convert cat-6 tokens into something of
+ the user's choosing.
+
+\begin{sloppypar}
+As to the default nature of this conversion (if no special actions are
+ taken), explicit cat-6 characters are converted
+ into the identical character with category code of 12.
+On the other hand, implicit cat-6 macros (e.g., \verb|\let\myhash#|)
+ are converted into a fixed-name implicit macro, \macname{implicitsixtok},
+ whose cat-12 substitution text is a \macname{string} of the original
+ implicit-macro name.
+
+As previously mentioned, active characters whose active value is
+ \macname{let} to cat-6 (e.g., \verb|\catcode`X=\active \letX#|) will be
+ flagged as \macname{activetoktrue}, but not \macname{catSIXtrue}.
+\end{sloppypar}
+
+\subsubsection{Parameters (\texttt{\#1}--\texttt{\#9}):
+\macname{whennotprocessingparameter}}
+
+While, generally, one would not intend to use parameters
+ in the \TokCycle{} input stream, the package provides, not a flag,
+ but a macro to allow it.
+The macro is to be used \textit{within} the \Character{} directive
+ with the syntax:\smallskip
+
+\begin{verbbox}[\vbdelim]
+\whennotprocessingparameter#1{<non-parameter-processing-directive>}\end{verbbox}
+\theverbbox\smallskip
+
+\noindent Here, the \texttt{\#1} doesn't refer to \texttt{\#1}
+ as it appears in the input stream, but to the sole parameter of
+ the \Character{} directive, referring to the current token being
+ processed.
+With this syntax, when the token under consideration is a
+ parameter (e.g., \texttt{\#1}--\texttt{\#9}), that parameter is
+ added to the \macname{cytoks} register.
+If the token under consideration is not a parameter, the code
+ in the final argument is executed.
+
+\subsection{Misc: general \textit{if}-condition tools}
+
+\TeX{} comes equipped with a variety of \macname{if...} condition
+ primitives.
+When dealing with macros for which the order of expansion is important,
+ the \macname{else} and \macname{fi} can sometimes get in the way
+ of proper expansion and execution.
+These four restructured \textit{if} macros came in handy writing the
+ package, and may be of use in creating your directives,
+ to prevent \macname{else} and \macname{fi} from getting in the way:\medskip
+
+\begin{verbbox}[\vbdelim]
+\tctestifcon{<TeX-if-condition>}{<true-code>}{<false-code>}
+\tctestifx{<\ifx-comparison-toks>}{<true-code>}{<false-code>}
+\tctestifnum{<\ifnum-condition>}{<true-code>}{<false-code>}
+\tctestifcatnx<\ifcat\noexpand-comparison-toks>{<true-code>}{<false-code>}
+\end{verbbox}
+\theverbbox
+
+
+\subsection{\TokCycle{} macro close-out: \macname{aftertokcycle}}
+
+The \TokCycle{} macros, upon completion, do nothing.
+Unlike \macname{tokencycle} environments, they don't even
+ output \macname{the}\macname{cytoks} token register.
+A command has been provided, \macname{aftertokcycle}, which takes
+ an argument to denote the actions to be executed following
+ completion of \textit{all} subsequent \TokCycle{} invocations.
+It might be as simple as \verb|\aftertokcycle{\the\cytoks}|, to
+ have the output stream automatically typeset.
+
+The meaning of \macname{aftertokcycle} can be reset with
+ \macname{aftertokcycle\{\}}, but is also reset as part of
+ \macname{resettokcycle}.
+Unlike macros, the \TokCycle{} environments are unaffected
+ by \macname{aftertokcycle}, as they actually set it locally
+ (within their scope) to accomplish their own purposes.
+
+\subsection{Accommodating catcode-1,2 changes: \macname{settcGrouping}}
+
+In order to avoid making the \TokCycle{} parser overly complex, requiring
+ multiple passes of the input stream, the package defaults to using
+ catcode-1,2 braces \texttt{\{~\}} to bring about grouping in the
+ output stream, regardless of what the actual cat-1,2 tokens are in
+ the input stream.
+As long as their sole purpose in the token
+ cycle is for grouping and scoping, this arrangement will produce
+ the expected output.
+
+However, if the actual character-code of these tokens is important
+ to the result (e.g., when detokenized), there is one other option.
+The package allows the external specification of which cat-1,2
+ tokens should be used in the \TokCycle{} output stream.
+The syntax is \verb|\settcGrouping{{#1}}|, to use the standard braces
+ for this purpose (default).
+If angle-brackets \verb|< >| were to be the \textit{new}
+ grouping tokens, then, after their catcodes were changed, and
+ \macname{bgroup} and \macname{egroup} were reassigned, one would
+ invoke \verb|\settcGrouping<<#1>>|.
+These will then be the grouping tokens in the \TokCycle{} output
+ stream until set to something else.
+The grouping tokens are \textit{not} reset as part of
+ \macname{resettokcycle}.
+
+\section{Usage Examples}
+
+See the adjunct file, \texttt{tokcycle-examples.pdf}, for a wide
+ array of \TokCycle{} examples.
+
+\section{Summary of known package limitations}
+
+The goal of this package is not to build the perfect token-stream
+ parser.
+It is, rather, to provide the means for users to build useful
+ token-processing tools for their \TeX/\LaTeX{} documents.
+
+What follows are the known limitations of the package.
+ which arise, in part, from the single-pass parsing algorithm
+ embedded in the package.
+Surely, there are more cases associated with arcane catcode-changing
+ syntax that are not accounted for;
+I encourage you to bring them to my attention.
+If I can't fix them, I can at least disclaim and declaim them.
+
+\begin{itemize}
+
+\item One must inform the package (via \macname{settcGrouping}) of
+ changes to the cat-1,2 tokens \textit{if}
+ there is a need to detokenize the output with the specified
+ bracing group; however,
+ grouping will still be handled properly (i.e., cat-1,2 tokens will
+ be detected), even if the package is not notified.
+
+\item Should one need to keep track of the \textit{names} of implicit tokens,
+ then only one named implicit cat-6 token may appear in the input
+ stream (though it can appear multiple times).
+There is no limit on explicit cat-6 toks.
+This limitation occurs because implicit cat-6 tokens are converted
+ into the fixed-name implicit macro \macname{implicitsixtok} which
+ contains the \macname{string} of the most recently used
+ implicit cat-6 token name.
+In any event, all cat-6 tokens are trapped and flag \texttt{true}
+ the \macname{ifcatSIX} condition.
+
+\end{itemize}
+
+\section*{Acknowledgments}
+
+In addition to Christian Tellechea, a contributor to this
+ package,
+the author would like to thank Dr.\@ David Carlisle for his
+ assistance in understanding some of the nuances of token
+ registers.
+Likewise, his explanation about how a space token is defined
+ in \TeX{} (see \verb|https://tex.stackexchange.com|\allowbreak
+ \verb|/questions/64197/|\allowbreak\verb|pgfparser-module-and-blank-spaces/64200#64200|)
+ proved to be useful here.
+The \texttt{tex.stackexchange} site provides a wonderful
+ opportunity to interact with the leading developers and
+ practitioners of \TeX{} and \LaTeX{}.
+
+\section*{Source Code}
+
+\Large\texttt{tokcycle.sty}
+
+\verbfilenobox[\footnotesize]{tokcycle.sty}\bigskip
+
+\noindent\texttt{tokcycle.tex}
+
+\verbfilenobox[\footnotesize]{tokcycle.tex}
+
+
+\end{document}
+
diff --git a/macros/generic/tokcycle/tokcycle-examples.pdf b/macros/generic/tokcycle/tokcycle-examples.pdf
new file mode 100644
index 0000000000..af6e951390
--- /dev/null
+++ b/macros/generic/tokcycle/tokcycle-examples.pdf
Binary files differ
diff --git a/macros/generic/tokcycle/tokcycle-examples.tex b/macros/generic/tokcycle/tokcycle-examples.tex
new file mode 100644
index 0000000000..b73e89168c
--- /dev/null
+++ b/macros/generic/tokcycle/tokcycle-examples.tex
@@ -0,0 +1,1286 @@
+\documentclass[10pt]{article}
+\usepackage[margin=1.3in]{geometry}
+\usepackage[T1]{fontenc}
+\usepackage{tokcycle,xcolor,manfnt}
+\colorlet{bred}{red!90!blue}
+\usepackage{tikz}
+% MACROS: REDEFINE TO ALLOW \cytoks TO ESCAPE SCOPE OF exampleA
+\aftertokcycle{\global\cytoks\expandafter{\the\cytoks}}
+% ENVIRONMENTS: REDEFINE TO ALLOW \cytoks TO ESCAPE SCOPE OF exampleA
+\makeatletter\renewcommand\tcenvscope{\global\cytoks}\makeatother
+
+\def\ddbend{\setbox0=\hbox{\dbend\dbend}\leavevmode\llap{%
+ \raisebox{10pt}{\box0~}}}
+
+\usepackage[skins,listings]{tcolorbox}
+
+\newtcblisting{exampleA}[2][]{%
+ colframe=red!70!yellow!50!black,
+ colback=red!75!yellow!5!white,
+ coltitle=red!50!yellow!3!white,
+ bicolor,colbacklower=white,
+ top=0mm,bottom=0mm,left=0mm,right=0mm,
+ arc=1mm,boxrule=1pt,
+ fonttitle=\sffamily\bfseries,
+ sidebyside,
+ title=#2,#1}
+
+
+\newtcblisting{exampleB}[2][]{%
+ colframe=red!50!yellow!50!black,
+ colback=red!50!yellow!5!white,%white,
+ coltitle=red!50!yellow!3!white,
+ bicolor,colbacklower=white,%red!50!yellow!5!white,
+ fonttitle=\sffamily\bfseries,
+ sidebyside,text and listing,
+ top=0mm,bottom=0mm,left=0mm,right=0mm,
+ arc=1mm,boxrule=1pt,
+ title=#2,#1}
+
+\newtcblisting{exampleC}[2][]{%
+ colframe=cyan!70!yellow!50!black,
+ colback=cyan!30!yellow!5!white,%white,
+ coltitle=cyan!50!yellow!3!white,
+ fonttitle=\sffamily\bfseries,
+ listing only,
+ top=0mm,bottom=0mm,left=0mm,right=0mm,
+ arc=1mm,boxrule=1pt,
+ title=#2,#1}
+
+\def\altdecytoks{\par\medskip\begingroup\noindent\macname{cytoks}
+ \ \textit{alt}detokenization:\\\raggedright\footnotesize\ttfamily
+ \expandafter\altdetokenize\expandafter{\the\cytoks}\par\endgroup}
+\newcommand\TokCycle[1][t]{\textsf{#1okcycle}}
+
+\parindent0pt
+\parskip0pt
+\begin{document}
+{\centering\LARGE \TokCycle{} Package Examples\par\smallskip
+\large Steven B. Segletes\\\today\par}
+
+\tableofcontents
+
+\makeatletter
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\makeatother
+
+%%%%%%%%%%%%%% SUPPORT MACRO
+
+\newcommand\macname[1]{\texttt{\char92#1}}
+
+\newcommand\underdot[1]{\ooalign{#1\cr\hfil{\raisebox{-5pt}{.}}\hfil}}
+
+\newcounter{colorindex}
+
+\newcommand\restorecolor{\setcounter{colorindex}{100}}
+
+\newcommand\reducecolor[1]{%
+ \color{red!\thecolorindex!cyan}%
+ \addtocounter{colorindex}{-#1}%
+ \ifnum\thecolorindex<1\relax\setcounter{colorindex}{1}\fi
+}
+
+\newif\ifmacro
+\newcommand\altdetokenize[1]{\begingroup\stripgroupingtrue\macrofalse
+ \tokcycle
+ {\ifmacro\def\tmp{##1}\ifcat\tmp A\else\unskip\allowbreak\fi\macrofalse\fi
+ \detokenize{##1}}
+ {\ifmacro\unskip\macrofalse\fi\{\processtoks{##1}\ifmacro\unskip\fi\}\allowbreak}
+ {\tctestifx{\\##1}{\\}{\ifmacro\unskip\allowbreak\fi
+ \allowbreak\detokenize{##1}\macrotrue}}
+ { \hspace{0pt plus 3em minus .3ex}}
+ {#1}%
+ \unskip
+\endgroup}
+
+\newcommand\plusl[1]{\char\numexpr`#1+1\relax}
+
+\newcommand\vowelcap[1]{%
+ \ifx a#1A\else
+ \ifx e#1E\else
+ \ifx i#1I\else
+ \ifx o#1O\else
+ \ifx u#1U\else
+ #1\fi\fi\fi\fi\fi
+}
+
+\newcommand\spaceouttext[2]{%
+ \tokcycle
+ {\addcytoks{##1\nobreak\hspace{#1}}}%
+ {\processtoks{##1}}
+ {\addcytoks{##1}}%
+ {\addcytoks{##1\hspace{#1}}}
+ {#2}%
+ \the\cytoks\unskip}
+
+\newcommand\growdim[2]{%
+\tokcycle{\addcytoks{##1}}
+ {\addcytoks{#1\dimexpr##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{##1}}{%
+ #2}%
+\the\cytoks}
+
+\newcommand\nextcap[1]{%
+ \edef\tmp{#1}%
+ \tctestifx{-#1}{\def\capnext{T}}{}%
+ \tctestifcon{\if T\capnext}%
+ {\tctestifcon{\ifcat\tmp A}%
+ {\uppercase{#1}\def\capnext{F}}%
+ {#1}}%
+ {#1}%
+}
+
+\newcommand\TitleCase[1]{%
+ \def\capnext{T}
+ \tokcycle
+ {\addcytoks{\nextcap{##1}}}
+ {\processtoks{##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{##1\def\capnext{T}}}
+ {#1}%
+ \the\cytoks
+}
+
+\tokcycleenvironment\spaceBgone
+ {\addcytoks{##1}}
+ {\processtoks{##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{\hspace{.2pt plus .2pt minus .8pt}}}%
+
+
+\tokcycleenvironment\remaptext
+ {\addcytoks[x]{\tcremap{##1}}}
+ {\processtoks{##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{##1}}
+\newcommand*\tcmapto[2]{\expandafter\def\csname tcmapto#1\endcsname{#2}}
+\newcommand*\tcremap[1]{\ifcsname tcmapto#1\endcsname
+ \csname tcmapto#1\endcsname\else#1\fi}
+\tcmapto am \tcmapto bf \tcmapto cz \tcmapto de \tcmapto ey
+\tcmapto fl \tcmapto gx \tcmapto hb \tcmapto ic \tcmapto jn
+\tcmapto ki \tcmapto lr \tcmapto mh \tcmapto nt \tcmapto ok
+\tcmapto ps \tcmapto qa \tcmapto ro \tcmapto sq \tcmapto tw
+\tcmapto uj \tcmapto vp \tcmapto wd \tcmapto xg \tcmapto yu
+\tcmapto zv
+
+\newcommand\findinstring[2]{\begingroup%
+ \stripgroupingtrue
+ \setcounter{runcount}{0}%
+ \tokcycle
+ {\nextctltok{##1}}
+ {\nextctltok{\opengroup}\processtoks{##1}\nextctltok{\closegroup}}
+ {\nextctltok{##1}}
+ {\nextctltok{\tcspace}}
+ {#1}%
+ \edef\numlet{\theruncount}%
+ \expandafter\def\expandafter\searchword\expandafter{\the\cytoks}%
+%
+ \aftertokcycle{\matchfound}%
+ \setcounter{runcount}{0}%
+ \def\matchfound{F}%
+ \tokcycle
+ {\nextcmptok{##1}}
+ {\nextcmptok{\opengroup}\processtoks{##1}\nextcmptok{\closegroup}}
+ {\nextcmptok{##1}}
+ {\nextcmptok{\tcspace}}
+ {#2}%
+\endgroup}
+\newcounter{runcount}
+\makeatletter
+\newcommand\rotcytoks[1]{\cytoks\expandafter\expandafter\expandafter{%
+ \expandafter\tc@gobble\the\cytoks#1}}
+\makeatother
+\newcommand\testmatch[1]{\ifx#1\searchword\gdef\matchfound{T}\fi}%
+\newcommand\rotoradd[2]{\stepcounter{runcount}%
+ \ifnum\theruncount>\numlet\relax#1\else#2\fi
+ \expandafter\def\expandafter\tmp\expandafter{\the\cytoks}}
+\newcommand\nextcmptok[1]{\rotoradd{\rotcytoks{#1}}{\addcytoks{#1}}\testmatch{\tmp}}
+\newcommand\nextctltok[1]{\stepcounter{runcount}\addcytoks{#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Examples, examples, and more examples}
+
+Often, the best way to learn a new tool is to see examples of
+ it being used.
+Here, a number of examples are gathered that span the spectrum
+ of \TokCycle{} usage.
+
+\subsection{Application basics}
+
+\subsubsection{Using the CGMS directives}
+
+Apply different directives to Characters (under-dot), Groups
+ (visible braces), Macros (boxed, detokenized), and
+ Spaces (visible space).
+
+\begin{exampleC}[]{The \macname{underdot} macro}
+\newcommand\underdot[1]{\ooalign{#1\cr\hfil{\raisebox{-5pt}{.}}\hfil}}
+\end{exampleC}
+
+
+\begingroup
+\begin{exampleA}[lefthand width=7.8cm]{Employing \TokCycle{} directives}
+\tokcycle{\addcytoks{\underdot{#1}}}
+ {\addcytoks{\{}\processtoks{#1}
+ \addcytoks{\}}}
+ {\addcytoks{\fbox{\detokenize{#1}}}}
+ {\addcytoks{\textvisiblespace}}
+{This \textit{is \textbf{a}} test.}
+\the\cytoks
+\end{exampleA}
+
+\endgroup
+
+\subsubsection{Escaping text\label{s:esc}}
+
+Text between two successive escape characters is bypassed
+ by \TokCycle{} and instead echoed to the output register.
+Default escape character is $|$. One can change it with
+ \macname{settcEscapechar} macro.
+
+\begingroup
+
+\begin{exampleC}[]{The unexpandable \macname{plusl} macro}
+\newcommand\plusl[1]{\char\numexpr`#1+1\relax}
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=5cm]{Escaping text in the input stream}
+\tokcycle
+{\addcytoks{\plusl{#1}}}
+{\processtoks{#1}}
+{\addcytoks{#1}}
+{\addcytoks{#1}}
+{This \fbox{code is a test
+ |(I can also escape text)|}
+ of |\rule{1em}{.5em}|
+ {\bfseries mine}.}
+\the\cytoks
+\end{exampleA}
+
+\endgroup
+
+\subsubsection{Unexpandable, unexpanded, and expanded Character
+ directives\label{s:unex}}
+
+\begingroup
+These examples concern the issue of whether the characters of the input
+ stream are transformed before or after being placed in the
+ output token register (\macname{cytoks}).\medskip
+
+\noindent\begin{minipage}[t]{\textwidth}
+Transform characters (+1 ASCII) via unexpandable macro (see section~%
+ \ref{s:esc} for \macname{plusl} definition):\medskip
+
+\begin{exampleA}[lefthand width=8.3cm]
+ {Unexpandable Character directive}
+\tokcycle
+{\addcytoks{\plusl{#1}}}
+{\processtoks{#1}}
+{\addcytoks{#1}}
+{\addcytoks{#1}}{%
+ This \textit{code \textup{is} a test} of mine.}
+\the\cytoks
+\end{exampleA}
+
+\altdecytoks
+
+\par\noindent\hrulefill\medskip
+\end{minipage}
+\endgroup
+
+\noindent\begin{minipage}[t]{\textwidth}
+Capitalize vowels (but don't expand the character directive)
+
+\begingroup
+
+\begin{exampleC}[]{The expandable\macname{vowelcap} macro}
+\newcommand\vowelcap[1]{%
+ \ifx a#1A\else
+ \ifx e#1E\else
+ \ifx i#1I\else
+ \ifx o#1O\else
+ \ifx u#1U\else
+ #1\fi\fi\fi\fi\fi
+}
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=8.3cm]
+ {Not expanded Character directive}
+\tokcycle
+{\addcytoks{\vowelcap{#1}}}
+{\processtoks{#1}}
+{\addcytoks{#1}}
+{\addcytoks{#1}}{%
+ This \textit{code \textup{is} a test} of mine.}
+\the\cytoks
+\end{exampleA}
+
+\altdecytoks
+
+\par\noindent\hrulefill\medskip
+\endgroup
+\end{minipage}
+
+\begingroup
+Capitalize vowels (expanding the character directive)
+
+\begin{exampleA}[lefthand width=8.3cm]
+ {Expanded Character directive}
+\tokcycle
+{\addcytoks[x]{\vowelcap{#1}}}
+{\processtoks{#1}}
+{\addcytoks{#1}}
+{\addcytoks{#1}}{%
+ This \textit{code \textup{is} a test} of mine.}
+\the\cytoks
+\end{exampleA}
+
+\altdecytoks
+
+\endgroup
+
+\subsubsection{Unexpanded vs. pre-expanded input stream}
+
+\begingroup
+\Characterdirective{\addcytoks[x]{\vowelcap{#1}}}
+
+\noindent\begin{minipage}[t]{\textwidth}
+See section~\ref{s:unex} for the \macname{vowelcap} definition.
+
+\begin{exampleA}[lefthand width=5.5cm]{Normal token cycle (input stream
+ not pre-expanded)}
+\tokcycle
+{\addcytoks[x]{\vowelcap{#1}}}
+{\processtoks{#1}}
+{\addcytoks{#1}}
+{\addcytoks{#1}}%
+{This \fbox{code
+ is a test \today} of
+ {\bfseries mine}.}
+\the\cytoks
+\end{exampleA}
+
+\altdecytoks
+
+\noindent\hrulefill\strut
+\end{minipage}
+
+Note that, when pre-expanding the input stream, one must
+ \macname{noexpand} the macros that are \textit{not}
+ to be pre-expanded.
+
+\begin{exampleA}[lefthand width=5.5cm]{Pre-\macname{expanded} token cycle
+ input stream}
+\expandedtokcyclexpress
+{This \noexpand\fbox{code
+ is a test \today} of
+ {\noexpand\bfseries mine}.}
+\the\cytoks
+\end{exampleA}
+
+\altdecytoks
+
+\endgroup
+
+\subsection{Grouping}
+
+Differentiating explicit groups, e.g., \{...\}, from
+ implicit groups, e.g. \macname{bgroup}...\macname{egroup},
+ is done automatically by \TokCycle.
+The user has options on how \TokCycle{} should treat these tokens.
+The desired options are to be set prior to the \TokCycle{} invocation.
+
+
+\subsubsection{Treatment options for implicit groups}
+
+\begingroup
+
+The macro
+\macname{stripimplicitgroupingcase} can take three possible
+ integer arguments: 0 (default) to automatically place unaltered
+ implicit group tokens in the output register; 1 to strip
+ implicit group tokens from the output; or $-$1 to instead pass the
+ implicit group tokens to the Character directive (as implicit
+ tokens) for separate processing (typically, when detokenization
+ is desired).\smallskip
+
+In the following example, see section~\ref{s:unex} for the
+ \macname{vowelcap} definition.
+
+\begin{exampleA}[lefthand width=6cm]{Using
+ \macname{stripimplicitgroupingcase} to affect treatment of
+ implicit grouping tokens}
+\resettokcycle
+\Characterdirective{\addcytoks[x]{%
+ \vowelcap{#1}}}
+\def\z{Announcement:
+ {\bfseries\bgroup\itshape
+ Today \egroup it is} \today,
+ a Wednesday}
+\expandafter\tokencyclexpress\z
+\endtokencyclexpress\medskip
+
+\detokenize\expandafter{\the\cytoks}
+\bigskip
+
+\stripimplicitgroupingcase{1}
+\expandafter\tokencyclexpress\z
+\endtokencyclexpress\medskip
+
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+\endgroup
+
+\subsubsection{Treatment options for explicit groups}
+
+\begingroup
+
+For explicit group tokens, e.g., \{ \}, there are only two
+ options to be had.
+These are embodied in the if-condition \macname{ifstripgrouping}
+ (default \macname{stripgroupingfalse}).
+Regardless of which condition is set, the tokens within the explicit
+ group are still passed to the Group directive for processing.
+
+
+Permutations of the following code are used in the subsequent examples.
+Group stripping, brought about by \macname{stripgroupingtrue},
+ involves removing the grouping braces from around the group.
+The choice of \macname{processtoks} vs.\@ \macname{addcytoks}
+ affects whether the tokens inside the group are recommitted
+ to \TokCycle{} for processing, or are merely sent to the output
+ register in their original unprocessed form.
+
+Note that, in these examples, underdots and visible spaces
+ will only appear on characters and spaces that have been directed
+ to the Character and Space directives, respectively.
+Without \macname{processtoks}, that will not occur to tokens
+ \textit{inside} of groups.
+
+\begin{exampleB}[listing only,lefthand width = \dimexpr\textwidth-19pt]
+{Code permutations on group stripping and inner-group token processing}
+\stripgroupingfalse OR \stripgroupingtrue
+\tokcycle{\addcytoks{\underdot{#1}}}
+ {\processtoks{#1}} OR {\addcytoks{#1}}}
+ {\addcytoks{#1}}
+ {\addcytoks{\textvisiblespace}}
+{This \fbox{is a \fbox{token}} test.}
+\the\cytoks
+\end{exampleB}
+
+
+\begin{exampleB}[text only, colback=white]%
+{\macname{stripgroupingfalse \string\processtoks} }
+\stripgroupingfalse% RETAIN GROUPING (PACKAGE DEFAULT)
+\tokcycle{\addcytoks{\underdot{#1}}}
+ {\processtoks{#1}}% GROUP TOKENS ARE PROCESSED
+ {\addcytoks{#1}}
+ {\addcytoks{\textvisiblespace}}{%
+This \fbox{is a \fbox{token}} test.}
+\the\cytoks
+\end{exampleB}
+
+\begin{exampleB}[text only, colback=white]%
+{\macname{stripgroupingfalse \string\addcytoks} }
+\tokcycle{\addcytoks{\underdot{#1}}}
+ {\addcytoks{#1}}% GROUP TOKENS OUTPUT DIRECTLY
+ {\addcytoks{#1}}
+ {\addcytoks{\textvisiblespace}}{%
+This \fbox{is a \fbox{token}} test.}
+\the\cytoks
+\end{exampleB}
+
+\begin{exampleB}[text only, colback=white]%
+{\macname{stripgroupingtrue \string\processtoks} }
+\stripgroupingtrue% DANGEROUS AS IT REMOVES GROUPING FROM ARGUMENTS
+\tokcycle{\addcytoks{{\underdot{#1}}}}% EXTRA GROUPING TO COMPENSATE
+ {\processtoks{#1}}% GROUP TOKENS PROCESSED
+ {\addcytoks{#1}}
+ {\addcytoks{\textvisiblespace}}{%
+This \fbox{is a \fbox{token}} test.}
+\the\cytoks
+\end{exampleB}
+
+\begin{exampleB}[text only, colback=white]%
+{\macname{stripgroupingtrue \string\addcytoks} }
+\stripgroupingtrue% DANGEROUS AS IT REMOVES GROUPING FROM ARGUMENTS
+\tokcycle{\addcytoks{\underdot{#1}}}
+ {\addcytoks{#1}}% GROUP TOKENS OUTPUT DIRECTLY
+ {\addcytoks{#1}}
+ {\addcytoks{\textvisiblespace}}{%
+This \fbox{is a \fbox{token}} test.}
+\the\cytoks
+\end{exampleB}
+
+Note that the content of groups can be altogether eliminated if
+ \textit{neither} \macname{processtoks\{\#1\}} nor
+ \macname{addcytoks\{\#1\}} are used in the Group directive.
+
+
+
+\endgroup
+
+\subsubsection{Group nesting\label{s:nest}}
+
+\begingroup
+
+\begin{exampleC}[]{The \macname{reducecolor} and \macname{restorecolor}
+ macros}
+\newcounter{colorindex}
+\newcommand\restorecolor{\setcounter{colorindex}{100}}
+\newcommand\reducecolor[1]{%
+ \color{red!\thecolorindex!cyan}%
+ \addtocounter{colorindex}{-#1}%
+ \ifnum\thecolorindex<1\relax\setcounter{colorindex}{1}\fi}
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=6cm]{Group nesting is no impediment to
+ tokcycle}
+\restorecolor
+\tokcycle
+ {\addcytoks{(#1)}}
+ {\addcytoks{\reducecolor{11}}%
+ \addcytoks{[}\processtoks{#1}%
+ \addcytoks{]}}
+ {\addcytoks{#1}}
+ {}{%
+ {1{{3{{5{{7{{9{1{}0}}8}}6}}4}}2}}}
+\the\cytoks
+\end{exampleA}
+
+\endgroup
+
+
+\subsection{Direct use of \TokCycle}
+
+While one may find it convenient to encapsulate \TokCycle{} commands
+ inside of other macros, it should be obvious that this is not a requirement.
+\TokCycle[T]{} macros and environments (in regular or \texttt{xpress}
+ form) may be invoked directly from the document, without
+ being first encapsulated within a macro or environment.
+
+\subsubsection{Modifying counters as part of the Character
+ directive}
+
+\begingroup
+In the following example, see section~\ref{s:nest} for the definitions
+ of \macname{restorecolor} and \macname{reducecolor}.
+
+\begin{exampleA}[lefthand width=8.5cm]{Using a period token (.) to
+ reset a changing color}
+\restorecolor
+\tokencycle
+ {\addcytoks{\bgroup\reducecolor{3}#1\egroup}%
+ \ifx.#1\addcytoks{\restorecolor}\fi}
+ {\processtoks{#1}}
+ {\addcytoks{#1}}
+ {\addcytoks{#1}}%
+This right \textit{here is a sentence in italic}.
+And \textbf{here we have another sentence in bold}.
+
+{\scshape Now in a new paragraph, the sentence
+is long.} Now, it is short.
+\endtokencycle
+\end{exampleA}
+
+\endgroup
+
+\subsection{Macro encapsulation of \TokCycle}
+
+\subsubsection{Spacing out text}
+
+\begingroup
+
+\begin{exampleC}[]{The \macname{spaceouttext} macro}
+\newcommand\spaceouttext[2]{%
+ \tokcycle
+ {\addcytoks{##1\nobreak\hspace{#1}}}%
+ {\processtoks{##1}}
+ {\addcytoks{##1}}%
+ {\addcytoks{##1\hspace{#1}}}
+ {#2}%
+ \the\cytoks\unskip}
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=6cm]{\macname{spaceouttext} demo}
+\spaceouttext{3pt plus 3pt}{This
+ \textit{text \textbf{is}
+ very} spaced out}. Back
+ to regular text.
+
+\spaceouttext{1.5pt}{This
+ \textit{text \textbf{is}
+ somewhat} spaced out}.
+ Back to regular text.
+\end{exampleA}
+
+\endgroup
+
+
+\subsubsection{Alternate presentation of detokenized content}
+
+\begingroup
+This macro attempts to give a more natural presentation of
+ \macname{detokenize}'d material.
+It is \textbf{not} to be confused as a replacement for
+ \macname{detokenize}.
+In certain applications, it may offer a more pleasingly formatted
+ typesetting of detokenized material.\smallskip
+
+It is an unusual application of \TokCycle{} in that it does not
+ actually use the \macname{cytoks} token register to collect
+ its output.
+This is only possible because all macros in the input stream
+ are detokenized, rather than executed.
+
+\medskip
+
+\begin{exampleC}[]{The \macname{altdetokenize }\ macro}
+\newif\ifmacro
+\newcommand\altdetokenize[1]{\begingroup\stripgroupingtrue\macrofalse
+ \tokcycle
+ {\ifmacro\def\tmp{##1}\ifcat\tmp A\else\unskip\allowbreak\fi\macrofalse\fi
+ \detokenize{##1}}
+ {\ifmacro\unskip\macrofalse\fi\{\processtoks{##1}\ifmacro\unskip\fi\}\allowbreak}
+ {\tctestifx{\\##1}{\\}{\ifmacro\unskip\allowbreak\fi
+ \allowbreak\detokenize{##1}\macrotrue}}
+ { \hspace{0pt plus 3em minus .3ex}}
+ {#1}%
+ \unskip
+\endgroup}
+\end{exampleC}
+
+\let\mac\relax
+\begin{exampleA}[lefthand width=6.3cm]
+ {\macname{altdetokenize} demo}
+\string\altdetokenize: \\
+\texttt{\altdetokenize{a\mac a \mac2 {\mac}\mac{a\mac\mac}\mac}}!
+
+\string\detokenize: \\
+ \texttt{\detokenize{a\mac a \mac2 {\mac}\mac{a\mac\mac}\mac}}!
+\end{exampleA}
+\endgroup
+
+
+\subsubsection{Capitalize all words, including compound and
+ parenthetical words}
+
+\begingroup
+
+\begin{exampleC}[]{The \macname{Titlecase} and \texttt{\string\nextcap} macros}
+\newcommand\TitleCase[1]{%
+ \def\capnext{T}
+ \tokcycle
+ {\addcytoks{\nextcap{##1}}}
+ {\processtoks{##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{##1\def\capnext{T}}}
+ {#1}%
+ \the\cytoks
+}
+\newcommand\nextcap[1]{%
+ \edef\tmp{#1}%
+ \tctestifx{-#1}{\def\capnext{T}}{}%
+ \tctestifcon{\if T\capnext}%
+ {\tctestifcon{\ifcat\tmp A}%
+ {\uppercase{#1}\def\capnext{F}}%
+ {#1}}%
+ {#1}%
+}
+\end{exampleC}
+
+\begin{exampleA}[]{A demo of \macname{Titlecase} showing raw (escaped)
+ input and processed output}
+\TitleCase{%
+|here, {\bfseries\today{}, is [my]}
+ really-big-test
+ (\textit{capitalizing} words).|
+
+ here, {\bfseries\today{}, is [my]}
+ really-big-test
+ (\textit{capitalizing} words).}
+\end{exampleA}
+
+\endgroup
+
+\subsubsection{Scaling rule dimensions}
+\begingroup
+
+\ddbend This example only applies if one can guarantee that
+ the input stream will contain only text and rules...
+
+\begin{exampleC}[]{The \macname{growdim} macro}
+\newcommand\growdim[2]{%
+\tokcycle{\addcytoks{##1}}
+ {\addcytoks{#1\dimexpr##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{##1}}{%
+ #2}%
+\the\cytoks}
+\end{exampleC}
+
+\begin{exampleA}[]{Using \TokCycle{} to change \macname{rule} dimensions}
+\growdim{2}{This rule is exactly 4pt:
+ \rule|{4pt}{4pt}| , whereas this
+ rule is 2x bigger than 4pt:
+ \rule{4pt}{4pt} .}\par
+\growdim{4}{This rule is exactly 5pt:
+ \rule|{5pt}{5pt}| , whereas this
+ rule is 4x bigger than 5pt:
+ \rule{5pt}{5pt} .}
+\end{exampleA}
+
+\endgroup
+
+\subsubsection{String search, including non-regex material}
+
+\begingroup
+
+\begin{exampleC}[]{The \macname{findinstring} macro for string searches}
+\newcommand\findinstring[2]{\begingroup%
+ \stripgroupingtrue
+ \setcounter{runcount}{0}%
+ \tokcycle
+ {\nextctltok{##1}}
+ {\nextctltok{\opengroup}\processtoks{##1}\nextctltok{\closegroup}}
+ {\nextctltok{##1}}
+ {\nextctltok{\tcspace}}
+ {#1}%
+ \edef\numlet{\theruncount}%
+ \expandafter\def\expandafter\searchword\expandafter{\the\cytoks}%
+%
+ \aftertokcycle{\matchfound}%
+ \setcounter{runcount}{0}%
+ \def\matchfound{F}%
+ \tokcycle
+ {\nextcmptok{##1}}
+ {\nextcmptok{\opengroup}\processtoks{##1}\nextcmptok{\closegroup}}
+ {\nextcmptok{##1}}
+ {\nextcmptok{\tcspace}}
+ {#2}%
+\endgroup}
+\newcounter{runcount}
+\makeatletter
+\newcommand\rotcytoks[1]{\cytoks\expandafter\expandafter\expandafter{%
+ \expandafter\tc@gobble\the\cytoks#1}}
+\makeatother
+\newcommand\testmatch[1]{\ifx#1\searchword\gdef\matchfound{T}\fi}%
+\newcommand\rotoradd[2]{\stepcounter{runcount}%
+ \ifnum\theruncount>\numlet\relax#1\else#2\fi
+ \expandafter\def\expandafter\tmp\expandafter{\the\cytoks}}
+\newcommand\nextcmptok[1]{\rotoradd{\rotcytoks{#1}}{\addcytoks{#1}}\testmatch{\tmp}}
+\newcommand\nextctltok[1]{\stepcounter{runcount}\addcytoks{#1}}
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=11.5cm]{Demo of the
+ \macname{findinstring} macro}
+1. \findinstring{this}{A test of the times}
+ \findinstring{the} {A test of the times}\par
+2. \findinstring{This is}{Here, This is a test}
+ \findinstring{Thisis} {Here, This is a test}\par
+3. \findinstring{the} {This is the\bfseries{} test}
+ \findinstring{he\bfseries}{This is the\bfseries{} test}\par
+4. \findinstring{a{bc}} {gf{vf{a{b c}g}gh}hn}
+ \findinstring{a{b c}}{gf{vf{a{b c}g}gh}hn}\par
+5. \findinstring{a\notmymac{b c}}{gf{vf{a\mymac{b c}g}gh}hn}
+ \findinstring{a\mymac{b c}} {gf{vf{a\mymac{b c}g}gh}hn}\par
+6. \findinstring{\textit{Italic}}{this is an \textit{italic} test}
+ \findinstring{\textit{italic}}{this is an \textit{italic} test}
+\end{exampleA}
+
+\endgroup
+
+
+\subsection{\TokCycle-based environments}
+
+The \macname{tokcycleenvironment} macro allows users to define
+ their own \TokCycle{} environments.
+Here are some examples.
+
+\subsubsection{``Removing'' spaces, but still breakable/hyphenatable}
+
+\begingroup
+
+\begin{exampleC}[]{The \macname{spaceBgone} environment}
+\tokcycleenvironment\spaceBgone
+ {\addcytoks{##1}}
+ {\processtoks{##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{\hspace{.2pt plus .2pt minus .8pt}}}%
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=6.0cm]{}
+\spaceBgone
+ Here we have a \textit{test} of
+ whether the spaces are removed.
+ We are choosing to use the
+ tokencycle environment.
+
+ We are also testing the use of
+ paragraph breaks in the
+ environment.
+\endspaceBgone
+\end{exampleA}
+
+\endgroup
+
+\subsubsection{Remapping text}
+
+\begin{minipage}[t]{\textwidth}
+\begingroup
+
+\begin{exampleC}[]{The \macname{remaptext} environment with
+ supporting macros}
+\tokcycleenvironment\remaptext
+ {\addcytoks[x]{\tcremap{##1}}}
+ {\processtoks{##1}}
+ {\addcytoks{##1}}
+ {\addcytoks{##1}}
+\newcommand*\tcmapto[2]{\expandafter\def\csname tcmapto#1\endcsname{#2}}
+\newcommand*\tcremap[1]{\ifcsname tcmapto#1\endcsname
+ \csname tcmapto#1\endcsname\else#1\fi}
+\tcmapto am \tcmapto bf \tcmapto cz \tcmapto de \tcmapto ey
+\tcmapto fl \tcmapto gx \tcmapto hb \tcmapto ic \tcmapto jn
+\tcmapto ki \tcmapto lr \tcmapto mh \tcmapto nt \tcmapto ok
+\tcmapto ps \tcmapto qa \tcmapto ro \tcmapto sq \tcmapto tw
+\tcmapto uj \tcmapto vp \tcmapto wd \tcmapto xg \tcmapto yu
+\tcmapto zv
+\end{exampleC}
+
+\begin{exampleA}[lefthand width=8.5cm]{Demo of \macname{remaptext}}
+\remaptext
+What can't we \textit{accomplish} if we try?
+
+Let us be of good spirit and put our minds to it!
+\endremaptext
+\end{exampleA}
+
+Because \macname{tcremap} is expandable, the original text is totally absent
+ from the processed output:
+
+\altdecytoks
+
+\endgroup
+\end{minipage}
+
+\subsection{Advanced topics: implicit tokens and catcode changes}
+
+\subsubsection{Trap Active Characters (catcode 13)}
+
+\begin{minipage}[t]{\textwidth}
+\begingroup
+Active characters in the \TokCycle{} input stream are processed in
+ their original form.
+Their active substitutions only occur \textit{afterwards}, when
+ the \TokCycle{} output is typeset.
+They may be identified in the Character directive with
+ \macname{ifactivetok}.
+
+\let\svt T
+\Characterdirective{\tctestifcon\ifactivetok
+ {\addcytoks{\fbox{#1}}}{\addcytoks{#1}}}
+
+\begin{exampleA}[lefthand width=7.8cm]{Processing active characters}
+\resettokcycle
+\tokencyclexpress
+This is a test!!\endtokencyclexpress
+
+\catcode`!=\active
+\def !{?}
+\tokencyclexpress
+This is a test!!\endtokencyclexpress
+
+\Characterdirective{\tctestifcon\ifactivetok
+ {\addcytoks{\fbox{#1}}}{\addcytoks{#1}}}
+\tokencyclexpress
+This is a test!!\endtokencyclexpress
+
+\catcode`T=\active
+\let T+
+\tokencyclexpress
+This is a test!!\endtokencyclexpress
+
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+%%%
+\catcode`!=\active
+\def !{?}
+\catcode`T=\active
+\let T+
+\ddbend If the input stream is pre-\textit{expanded}, the active
+ substitutions involving \macname{def} (but not \macname{let})
+ are made before reaching {\catcode`T=11 \TokCycle} processing.
+Such tokens are no longer detected as active, unless
+ \macname{noexpand} is applied to the pre-expansion:
+
+\begin{exampleA}[lefthand width=7.8cm]{Expanded input stream acts
+ upon active characters unless \macname{noexpand} is applied}
+\expandedtokcyclexpress{This is a test!\noexpand!}
+\the\cytoks\par
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+However, pre-\textit{tokenization} does not suffer this behavior:
+\begin{exampleA}[lefthand width=7.8cm]{Pre-tokenized input stream
+ does not affect active characters}
+\def\tmp{This is a test!!}
+\expandafter\tokcyclexpress\expandafter{\tmp}
+\the\cytoks\par
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+%%%
+\endgroup
+\end{minipage}
+
+\subsubsection{Trap Catcode 6 (explicit \& implicit) tokens}
+
+\begingroup
+
+\let\myhash#
+
+\medskip
+
+Typically, cat-6 tokens (like \texttt{\#}) are used to designate the
+ following digit (1-9) as a parameter.
+Since they are unlikely to be used in that capacity inside a
+ \TokCycle{} input stream, the package behavior is to convert them
+ into something cat-12 and set the if-condition \macname{catSIXtrue}.
+In this manner, \macname{ifcatSIX} can be used inside the
+ Character directive to convert cat-6 tokens into something of
+ the user's choosing.\smallskip
+
+As to this cat-12 conversion, explicit cat-6 characters are converted
+ into the same character with cat-12.
+On the other hand, implicit cat-6 macros (e.g., \verb|\let\myhash#|)
+ are converted into a fixed-name macro, \macname{implicitsixtok},
+ whose cat-12 substitution text is a \macname{string} of the original
+ implicit-macro name.
+
+\resettokcycle
+\Characterdirective{\ifcatSIX
+ \addcytoks{\fbox{#1}}
+ \else\addcytoks{#1}\fi}
+
+%\tokencyclexpress This# isQ \textit{a Q# test\myhash}!\endtokencyclexpress
+
+\begin{exampleA}[lefthand width=6.5cm]{Treatment of cat-6 tokens}
+\resettokcycle
+\Characterdirective{\ifcatSIX
+ \addcytoks{\fbox{#1}}
+ \else\addcytoks{#1}\fi}
+\let\myhash#
+\tokcyclexpress{This# isQ
+ \textit{a Q# test\myhash}!}
+\the\cytoks\bigskip\par
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+%\tokcyclexpress{This# isQ \textit{a Q# t\,e\, s\,t\myhash}!}\the\cytoks{}
+%with 1-character macros
+
+%%%
+%\expandedtokcyclexpress{This# isQ \noexpand\textit{a Q# test\myhash}!}\the\cytoks
+%{} PRE-EXPANDED
+%%%
+
+
+%\tokencyclexpress This# isQ \textit{a Q# test}!\endtokencyclexpress
+
+%\Characterdirective{\ifcatSIX\addcytoks{\fbox{#1}}\else\addcytoks{#1}\fi}
+
+\begin{exampleA}[lefthand width=6.5cm]{Multiple explicit cat-6 tokens are not
+ a problem}
+\catcode`Q=6
+\tokcyclexpress{This# isQ
+ \textit{a Q# test\myhash}!}
+\the\cytoks
+\end{exampleA}
+
+\catcode`Q=11
+\hrulefill
+
+\ddbend For what is, perhaps, a rare situation, one can even process input
+ streams that contain cat-6 macro parameters.
+A package macro, \macname{whennotprocessingparameter\#1\{<}%
+ \textit{directive when not a parameter}\verb|>}|, can be
+ used inside of the Character directive to intercept parameters.
+In this example, a macro is defined and then executed, subject to
+ token replacements brought about by the expandable Character directive.
+
+\smallskip
+In the following example, see section~\ref{s:unex} for
+ the \macname{vowelcap} definition.
+
+\Characterdirective{%
+ \whennotprocessingparameter#1{\addcytoks[x]{\vowelcap{#1}}}}
+\aftertokcycle{\global\cytoks\expandafter{\the\cytoks}}
+\def\Characterdirective#1{}
+\begin{exampleA}[lefthand width=7cm]{Preserving parameters (e.g.
+ \texttt{\#1, \#2}) in the \TokCycle{} input stream}
+\Characterdirective{%
+ \whennotprocessingparameter#1{%
+ \addcytoks[x]{\vowelcap{#1}}}}
+\tokcyclexpress{%
+ \def\zQ#1#2{[one:#1](two:#2)}
+ This is a \zQ big test.
+
+ \renewcommand\zQ[2]{\ifx t#1[#1]\fi(#2)}
+ This is a \zQ test.}
+\the\cytoks
+\end{exampleA}
+
+\altdecytoks
+
+\endgroup
+
+\subsubsection{Trap implicit tokens in general}
+
+\begingroup
+
+Implicit macros (assigned via \macname{let}) were already
+ mentioned in the context of cat-6.
+However, implicit macros can be of any valid catcode.
+The condition \macname{ifimplicittok} is used to flag such
+ tokens for special processing.
+
+\fboxsep=1.5pt
+
+\begin{exampleA}[lefthand width=8cm]{Implicit\ensuremath{{}={}}%
+ single box\char44 \ cat-6\ensuremath{{}={}}double box\char44 \ %
+ implicit-cat-6\ensuremath{{}={}}triple box}
+\let\littlet=t
+\let\littlel=l
+\let\svhash#
+\Characterdirective{\ifimplicittok
+ \ifcatSIX\addcytoks{\fbox{\fbox{\fbox{#1}}}}%
+ \else\addcytoks{\fbox{#1}}\fi\else\ifcatSIX
+ \addcytoks{\fbox{\fbox{#1}}}\else
+ \addcytoks{#1}\fi\fi}
+
+\tokencyclexpress We wi\littlel\littlel#
+ \textit{ make a \littlet est #} \littlet
+
+This \textit{is a \textbf{big}} \littlet est.
+
+Next pa#agraph ending with implicit cat six
+ \svhash.\endtokencyclexpress
+\end{exampleA}
+
+\ddbend If the input stream is subject to pre-expansion, one
+ will require \macname{noexpand} for macros where no pre-expansion
+ is desired.\medskip
+
+\ddbend If the input stream is provided pre-tokenized via
+ \macname{def}, \TeX{} convention requires cat-6 tokens to appear
+ in the input stream as duplicate, e.g. \texttt{\#\#}.
+
+
+\subsubsection{Changing grouping tokens (catcodes 1,2)}
+
+\begingroup
+
+Changing grouping tokens (catcodes 1,2) may require something more,
+ if the output stream is to be detokenized.
+In the following examples, pay attention to the
+ detokenized grouping around the argument to \macname{fbox}.\smallskip
+
+As we will see, the issues raised here only affect the situation
+ when detokenization of the output stream is required.
+\medskip
+
+\begin{exampleA}[]{\TokCycle{} defaults grouping tokens to braces:}
+\tokencycle
+ {\addcytoks{(#1)}}
+ {\processtoks{#1}}
+ {\addcytoks{#1}}
+ {\addcytoks{ }}
+This \fbox{is a} test.
+\endtokencycle\medskip
+
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+One can make brackets cat-1,2, redefining bgroup/egroup to [ ].
+However, while one can now use brackets in input stream, braces
+ will still appear in the detokenized \TokCycle{} output stream:
+
+\begin{exampleA}[lefthand width=6.5cm]
+{\TokCycle{} will not automatically change its grouping tokens}
+\catcode`\[=1
+\catcode`\]=2
+\let\bgroup[
+\let\egroup]
+\tokencycle
+ {\addcytoks{(#1)}}
+ {\processtoks{#1}}
+ {\addcytoks{#1}}
+ {\addcytoks{ }}
+This \fbox[is a] test.
+\endtokencycle\medskip
+
+\detokenize\expandafter{\the\cytoks}
+\end{exampleA}
+
+If it is necessary to reflect revised grouping tokens in the
+ output stream, the \macname{settcgrouping} macro is
+ to be used.
+
+\begin{exampleA}[lefthand width=6.5cm]
+{Redefine \TokCycle{} grouping tokens as angle
+ brackets using \macname{settcGrouping}}
+\catcode`\<=1
+\catcode`\>=2
+\catcode`\{=12
+\catcode`\}=12
+\let\bgroup<
+\let\egroup>
+\settcGrouping<<#1>>
+\tokencycle
+ <\addcytoks<(#1)>>
+ <\processtoks<#1>>
+ <\addcytoks<#1>>
+ <\addcytoks< >>
+This \fbox<is a> test.
+\endtokencycle\medskip
+
+\detokenize\expandafter<\the\cytoks>
+\end{exampleA}
+
+Angle brackets are now seen in the above detokenization.
+Until subsequently changed, cat-1,2 angle brackets now appear in
+ detokenized \TokCycle{} groups, even if other cat-1,2 tokens were
+ used in the input stream.
+Bottom line:
+\begin{itemize}
+\item adding, deleting, or changing catcode 1,2 explicit
+ grouping tokens, e.g., \{\}, (in conjunction with their
+ associated implicit \macname{bgroup}\macname{egroup})
+ tokens will not affect \TokCycle's ability to digest proper
+ grouping of the input stream, regardless of which tokens
+ are catcode 1,2 at the moment.
+
+\item The grouping tokens used in \TokCycle's output
+ default to \verb|{}| braces (with cat-1,2), but can be
+ changed deliberately using \macname{settcGrouping}.
+
+\item The package, currently, has no way to reproduce in the
+ output stream the actual grouping tokens that occur in the
+ input stream, but one should ask, for the particular
+ application, if it really matters, as long as the the
+ proper catcodes-1,2 are preserved?
+
+\end{itemize}
+
+\endgroup
+
+\subsubsection{Catcode 10 space tokens}
+
+\begingroup
+
+Here we demonstrate that \TokCycle{} can handle arbitrary redesignation
+ of tokens to cat-10, as well as implicit space tokens.
+
+\ddbend While it should seem natural, we note that implicit
+ space tokens are directed to the Space directive rather than
+ the Character directive.
+However, \macname{ifimplicittok} may still be used to
+ differentiate an explicit space from an implicit one.
+\medskip
+
+Note in the following examples that cat-10 tokens do \textit{not}
+ get under-dots.
+The next three examples all use the same input, but with different
+catcode settings for the space and the underscore.
+
+\fboxsep=1pt
+
+\begin{exampleA}[lefthand width=10cm]{space cat-10{,} underscore cat-12}
+\catcode`\_=12 %
+\catcode`\ =10 %
+
+\tokencycle{\addcytoks{\underdot{#1}}}%
+{\processtoks{#1}}%
+{\addcytoks{#1}}%
+{\addcytoks{#1}}%
+\fbox{a_c d} b_g\itshape f\upshape\endtokencycle
+\end{exampleA}
+%
+\begin{exampleA}[lefthand width=10cm]{space cat-10{,} underscore cat-10}
+\catcode`\_=10 %
+\catcode`\ =10 %
+
+\tokencycle{\addcytoks{\underdot{#1}}}%
+{\processtoks{#1}}%
+{\addcytoks{#1}}%
+{\addcytoks{#1}}%
+\fbox{a_c d} b_g\itshape f\upshape\endtokencycle
+\end{exampleA}
+
+%
+
+\begin{exampleA}[lefthand width=10cm]{space cat-12{,} underscore cat-10}
+\catcode`\_=10 %
+\catcode`\ =12 %
+
+\tokencycle{\addcytoks{\underdot{#1}}}%
+{\processtoks{#1}}%
+{\addcytoks{#1}}%
+{\addcytoks{#1}}%
+\fbox{a_c d} b_g\itshape f\upshape\endtokencycle
+\end{exampleA}
+
+%%%
+\resettokcycle
+\Characterdirective{\addcytoks{\underdot{#1}}}
+
+\begin{exampleA}[lefthand width=10cm]{Implicit spaces work{,} too}
+\resettokcycle
+\Characterdirective{\addcytoks{\underdot{#1}}}
+\def\:{\let\mysptoken= } \: %
+\catcode`\_=10 %
+\catcode`\ =12 %
+
+\tokencyclexpress
+\fbox{a\mysptoken{}c d} b_g\itshape f\upshape
+\endtokencyclexpress
+\end{exampleA}
+
+\endgroup
+
+
+\subsubsection{Changes to catcode 0}
+
+\begingroup
+
+\begin{exampleA}[]{Cat-0 changes are not a hindrance to \TokCycle}
+\let\littlet=t
+\catcode`\! 0 !catcode`!\ 12
+!Characterdirective{!ifimplicittok
+ !addcytoks{!fbox{#1}}!else!ifcatSIX
+ !addcytoks{!fbox{!fbox{#1}}}
+ !else!addcytoks{#1}!fi!fi}
+!tokencyclexpress Here, {!scshape!bgroup
+ on !today!itshape{} we are !egroup
+ !littlet es!littlet ing} cat-0
+ changes{!bgroup}!egroup
+!endtokencyclexpress!medskip
+
+!detokenize!expandafter{!the!cytoks}
+\end{exampleA}
+
+\endgroup
+
+
+\end{document}
+
diff --git a/macros/generic/tokcycle/tokcycle.sty b/macros/generic/tokcycle/tokcycle.sty
new file mode 100644
index 0000000000..c61abb55e4
--- /dev/null
+++ b/macros/generic/tokcycle/tokcycle.sty
@@ -0,0 +1,4 @@
+\input tokcycle.tex
+\ProvidesPackage\tcname[\tcdate\space V\tcver\space Cycle through and transform
+ a stream of tokens]
+\endinput \ No newline at end of file
diff --git a/macros/generic/tokcycle/tokcycle.tex b/macros/generic/tokcycle/tokcycle.tex
new file mode 100644
index 0000000000..d6f1b4003e
--- /dev/null
+++ b/macros/generic/tokcycle/tokcycle.tex
@@ -0,0 +1,192 @@
+\def\tcname {tokcycle}
+\def\tcver {1.0}
+%
+\def\tcdate {2019/8/21}
+%
+% Author : Steven B Segletes, Christian Tellechea (contributor)
+% Maintainer : Steven B Segletes
+% License : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txt
+% Files : 1) tokcycle.tex
+% 2) tokcycle.sty
+% 3) tokcycle-doc.tex
+% 4) tokcycle-doc.pdf
+% 5) tokcycle-examples.tex
+% 6) tokcycle-examples.pdf
+% 7) README
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% MACRO FORM
+\long\def\tokcycle#1#2#3#4#5{\tokcycraw{#1}{#2}{#3}{#4}#5\endtokcycraw}
+% \expanded-ARGUMENT MACRO FORM
+\long\def\expandedtokcycle#1#2#3#4#5{\cytoks{\tokcycraw{#1}{#2}{#3}{#4}}%
+ \expandafter\the\expandafter\cytoks\expanded{#5}\endtokcycraw}
+% ENVIRONMENT FORM
+\long\def\tokencycle#1#2#3#4{\begingroup\let\endtokencycle\endtokcycraw
+ \aftertokcycle{\the\cytoks\expandafter\endgroup\expandafter\tcenvscope
+ \expandafter{\the\cytoks}}\tokcycraw{#1}{#2}{#3}{#4}}
+% XPRESS-INTERFACE MACRO FORM
+\long\def\tokcyclexpress#1{\tokcycrawxpress#1\endtokcycraw}
+% XPRESS-INTERFACE \expanded-ARGUMENT MACRO FORM
+\long\def\expandedtokcyclexpress#1{%
+ \expandafter\tokcycrawxpress\expanded{#1}\endtokcycraw}
+% XPRESS-INTERFACE ENVIRONMENT FORM
+\def\tokencyclexpress{\begingroup\let\endtokencyclexpress\endtokcycraw
+ \aftertokcycle{\the\cytoks\expandafter\endgroup\expandafter\tcenvscope
+ \expandafter{\the\cytoks}}\tokcycrawxpress}
+% INITIALIZATION & INTERNAL TOOLS
+\def\tcenvscope{\cytoks}% CAN SET TO \global\cytoks TO OVERCOME SCOPE LIMITS
+\edef\restorecatcode{\catcode\number`\@=\number\catcode`\@\relax}
+\catcode`\@11
+\newif\iftc@implicitgrp
+\newif\if@argnext
+\newtoks\tc@tok
+\newcount\tc@depth
+\def\tc@gobble#1{}
+\def\tc@deftok#1#2{\let#1= #2\empty}
+\tc@deftok\tc@sptoken{ }
+\expandafter\def\expandafter\tc@absorbSpace\space{}
+\def\tc@ifempty#1{\tc@testxifx{\expandafter\relax\detokenize{#1}\relax}}
+\def\tc@defx#1#2{\tc@earg{\def\expandafter#1}{#2}}
+\long\def\tc@earg#1#2{\expandafter#1\expandafter{#2}}
+\long\def\tc@xarg#1#2{\tc@earg#1{\expanded{#2}}}
+\long\def\tc@exfirst#1#2{#1}
+\long\def\tc@exsecond#1#2{#2}
+\long\def\tc@testxifx{\tc@earg\tctestifx}
+\def\tc@addtoks#1#2{\toks#1\expandafter{\the\toks#1#2}}
+\def\addtc@depth{\advance\tc@depth 1}
+\def\subtc@depth{\tc@depth=\numexpr\tc@depth-1\relax}
+\def\tc@resetifs{\activetokfalse\implicittokfalse\tc@implicitgrpfalse\catSIXfalse}
+\long\def\count@stringtoks#1{\tc@earg\count@toks{\string#1}}
+\def\count@toks#1{\the\numexpr-1\count@@toks#1.\tc@endcnt}
+\def\count@@toks#1#2\tc@endcnt{+1\tc@ifempty{#2}{\relax}{\count@@toks#2\tc@endcnt}}
+\def\sv@hash{##}
+% EXTERNAL TOOLS
+\long\def\tctestifcon#1{#1\expandafter\tc@exfirst\else\expandafter\tc@exsecond\fi}
+\long\def\tctestifcatnx#1#2{\tctestifcon{\ifcat\noexpand#1\noexpand#2}}
+\long\def\tctestifx#1{\tctestifcon{\ifx#1}}
+\long\def\tctestifnum#1{\tctestifcon{\ifnum#1\relax}}
+\newif\ifstripgrouping
+\def\stripimplicitgroupingcase#1{\edef\@implicitgroupingcase{\the\numexpr1-#1}}
+\newif\ifcatSIX
+\newif\ifimplicittok
+\newif\ifactivetok
+\newtoks\cytoks
+\long\def\tokcycleenvironment#1#2#3#4#5{\expandafter\def\expandafter#1%
+ \expandafter{\expandafter\let\csname end\expandafter\tc@gobble
+ \string#1\endcsname\endtokcycraw\tokencycle{#2}{#3}{#4}{#5}}}
+\long\def\processtoks#1{\addtc@depth\@tokcycle#1\endtokcycraw }
+\def\whennotprocessingparameter#1#2{\tctestifcon\if@argnext{\@argnextfalse\cytoks
+ \expandafter{\the\cytoks###1}}{\tctestifcon\ifcatSIX{\@argnexttrue}{#2}}}
+% ESSENTIAL METHOD: STREAMING MACRO WITH TERMINATOR:
+% \tokcycraw{<Char>}{<Group>}{<Macro>}{<Space>}<input-stream>\endtokcycraw
+\long\def\tokcycraw#1#2#3#4{\def\@chrT##1{#1}\long\def\@grpT##1{#2}%
+ \long\def\@macT##1{#3}\def\@spcT##1{#4}\tokcycrawxpress}
+% ENTRY POINT FOR XPRESS METHOD WITHOUT EXPLICIT ARGUMENTS
+\def\tokcycrawxpress{\cytoks{}\tc@depth=1\relax\@tokcycle}
+% CODE TO EXECUTE AT COMPLETION
+\long\def\aftertokcycle#1{\def\@aftertokcycle{#1}}
+\def\endtokcycraw{\subtc@depth\tctestifnum{\tc@depth=0}{\@aftertokcycle}{}}
+% LOOP ENTRY POINT
+\def\@tokcycle{\tc@resetifs\futurelet\tc@next\detect@CANTabsorb}
+\def\detect@CANTabsorb{\tctestifx{\tc@next\tc@sptoken}{\stringify\@@@@@spcT}%
+ {\tctestifx{\tc@next\bgroup}{\stringify\@@@@grpT}%
+ {\can@absorb}}}
+% NON cat1,10 TOKENS
+\long\def\can@absorb#1{\tc@tok{#1}\trapcatSIX{#1}\expandafter\can@absorb@
+ \the\tc@tok}
+\long\def\can@absorb@#1{\tctestifnum{\count@stringtoks{#1}>1}%
+ {\tctestifx{\endtokcycraw#1}{#1}{\backslashcmds#1\@tokcycle}}%
+ {\trapactivetok#1\tc@trapescape#1{\tc@escapecytoks}{\@chrT#1\@tokcycle}}}
+%CONVERT NEXT (SPACE OR BEGIN-GROUP) TOKEN TO STRING
+\def\stringify#1{\expandafter#1\string}% #1 WILL BE \@@@@@spcT or \@@@@grpT
+%SPACE DECODE
+\def\@@@@@spcT{\futurelet\tc@str\@@@@spcT}
+\def\@@@@spcT{\tctestifx{\tc@str\tc@sptoken}%
+ {\def\@tmp{\@@spcT{ }}\expandafter\@tmp\tc@absorbSpace}% EXPLICIT SPACE
+ {\implicittoktrue\expandafter\@@@spcT\tc@gobble}}% IMPLICIT SPACE
+\def\@@@spcT{\csmk{\expandafter\@@spcT\thecs}}
+\def\@@spcT#1{\@spcT{#1}\@tokcycle}
+% GROUP DECODE
+\def\@@@@grpT{\futurelet\tc@str\@@@grpT}
+\def\@@@grpT#1{\tctestifnum{\number\catcode`#1=1}%
+ {\expandafter\@@grpT\expandafter{\iffalse}\fi}% {
+ {\implicittoktrue\tc@implicitgrptrue
+ \csmk{\expandafter\backslashcmds\thecs\@tokcycle}}}% \bgroup
+\def\@@grpT#1{\tctestifcon\ifstripgrouping{\@grpT{#1}}%
+ {\groupedcytoks{\@grpT{#1}}}\@tokcycle}
+% \ COMMANDS (MACROS AND IMPLICITS)
+\long\def\test@ifmacro#1{\tctestifcatnx#1\relax}% REVISED!
+\long\def\backslashcmds#1{\test@ifmacro#1{\tctestifcon\ifcatSIX{%
+ \implicittoktrue\@chrT#1}{\@macT#1}}{\implicittoktrue
+ \trapimplicitegrp#1\tctestifcon{\iftc@implicitgrp}%
+ {\ifcase\@implicitgroupingcase\or\addcytoks{#1}\or\@chrT{#1}\fi}%
+ {\@chrT#1}{\@chrT#1}}}
+% SET UP ESCAPE MECHANISM
+\def\settcEscapechar#1{\let\@tcEscapeptr#1%
+ \def\tc@escapecytoks##1#1{\addcytoks{##1}\@tokcycle}}
+\def\tc@trapescape#1{\tctestifx{\@tcEscapeptr#1}}
+% TRAP CAT-6
+\long\def\trapcatSIX#1{\tctestifcatnx#1\relax{}{\trapcatSIXb#1}}
+\def\trapcatSIXb#1{\tc@earg\tctestifcatnx\sv@hash#1{\catSIXtrue\trapcatSIXc#1}{}}
+\def\trapcatSIXc#1{\tctestifnum{\count@stringtoks{#1}>1}{\tc@defx\six@str{\string#1}%
+ \global\let\implicitsixtok\six@str\tc@tok{\implicitsixtok}}%
+ {\tc@tok\expandafter{\string#1}}}
+% DIRECTIVES FOR HANDLING GROUPS RECURSIVELY; DEFINE tokcycle GROUPING CHARS
+\def\@defgroupedcytoks#1{\long\def\groupedcytoks##1{%
+ \begingroup\cytoks{}##1\expandafter\endgroup\expandafter
+ \addcytoks\expandafter{\expandafter#1}}}
+\def\settcGrouping#1{\def\@tmp##1{#1}\tc@defx\@@tmp{\@tmp{\the\cytoks}}%
+ \tc@earg\@defgroupedcytoks{\@@tmp}}
+% FAUX TOKENIZATION OF COMMAND NAME (WHEN cat0 TOKEN HAS BEEN MADE cat12)
+\def\csmk#1{\def\csaftermk{#1}\toks0{}\@csmkA}
+\def\@csmkA{\futurelet\@tmp\@csmkB}
+\def\@csmkB{\tctestifx{\@tmp\tc@sptoken}%
+ {\toks0{ }\expandafter\@csmkF\tc@absorbSpace}{\@csmkCA}}
+\def\@csmkCA#1{\tc@addtoks0{#1}\tctestifnum{\number\catcode`#1=11}%
+ {\futurelet\@tmp\@csmkD}{\@csmkF}}
+\def\@csmkC#1{\tctestifnum{\number\catcode`#1=11}
+ {\tc@addtoks0{#1}\futurelet\@tmp\@csmkD}{\@csmkE#1}}
+\def\@csmkD{\tctestifcatnx 0\@tmp\@csmkC\@csmkE}
+\def\@csmkE{\tctestifx{\@tmp\tc@sptoken}%
+ {\expandafter\@csmkF\tc@absorbSpace}{\@csmkF}}
+\def\@csmkF{\tc@defx\thecs{\csname\the\toks0\endcsname}\csaftermk}
+% TRAP IMPLICIT END GROUP TOK (e.g., \egroup); SET \iftc@implicitgrp
+\def\trapimplicitegrp#1{\tctestifx{#1\egroup}{%
+ \implicittoktrue\tc@implicitgrptrue}{}}
+% TRAP ACTIVE TOK
+\def\trapactivetok#1{\tctestifnum{\number\catcode`#1=13}{\activetoktrue}{}}
+% EXPRESS-INTERFACE - ALLOWS TO EXTERNALLY DEFINE DIRECTIVES
+\def\Characterdirective{\def\@chrT##1}
+\def\Groupdirective{\long\def\@grpT##1}
+\def\Macrodirective{\long\def\@macT##1}
+\def\Spacedirective{\def\@spcT##1}
+% EXPRESS-INTERFACE - DEFAULT DIRECTIVES
+\def\resetCharacterdirective{\Characterdirective{\addcytoks{##1}}}
+\def\resetGroupdirective{\Groupdirective{\processtoks{##1}}}
+\def\resetMacrodirective{\Macrodirective{\addcytoks{##1}}}
+\def\resetSpacedirective{\Spacedirective{\addcytoks{##1}}}
+\def\resettokcycle{\resetCharacterdirective\resetGroupdirective
+ \resetMacrodirective\resetSpacedirective\aftertokcycle{}%
+ \stripgroupingfalse\stripimplicitgroupingcase{0}}
+% SUPPORT MACROS FOR TOKENIZED OUTPUT: \addcytoks[<expansion level>]{<arg>}
+% (CONTRIBUTED BY CHRISTIAN TELLECHEA)
+\def\addcytoks{\futurelet\nxttok\addcytoks@A}
+\long\def\tc@addtotoks#1{\cytoks\expandafter{\the\cytoks#1}}
+\def\addcytoks@A{\tctestifx{[\nxttok}\addcytoks@B\tc@addtotoks}
+\long\def\addcytoks@B[#1]#2{\tc@ifempty{#1}\tc@addtotoks
+ {\tctestifx{x#1}{\tc@xarg\tc@addtotoks}{\addcytoks@C{#1}}}{#2}}
+\def\addcytoks@C#1{\tctestifnum{#1>0}{\tc@earg\addcytoks@C
+ {\the\numexpr#1-1\expandafter}\expandafter}\tc@addtotoks}
+% SET INITIAL PARAMETERS
+\settcGrouping{{#1}}% E.G. <<#1>> IF cat-1,2 SET TO < AND >
+\settcEscapechar{|}% BYPASS TOKCYCLE PROCESSING BETWEEN |...|
+\resettokcycle% WHICH ALSO CONTAINS THE FOLLOWING 3 RESETS:
+% \stripimplicitgroupingcase{0}% DEFAULT RETAIN UNALTERED \b/e-groups
+% \stripgroupingfalse% DEFAULT RETAIN UNALTERED {} GROUPING
+% \aftertokcycle{}% NO DEFAULT CODE EXECUTED AFTER EACH TOKCYCLE INVOCATION
+\restorecatcode
+\endinput
+
+EDIT HISTORY
+v1.0 2019/8/21
+ - Initial release
diff --git a/macros/generic/tracklang/CHANGES b/macros/generic/tracklang/CHANGES
new file mode 100644
index 0000000000..219eab6023
--- /dev/null
+++ b/macros/generic/tracklang/CHANGES
@@ -0,0 +1,106 @@
+v1.3.7 (2019-08.31):
+
+ * tracklang.sty: corrected misspelt \AddTrackedLangage (should be
+ \AddTrackedLanguage)
+
+v1.3.6 (2018-05-13):
+
+ * \GetTrackedDialectFromLanguageTag now sets
+ \TrackedDialectClosestSubMatch.
+
+v1.3.5 (2018-02-21):
+
+ * Added check for polyglossia's \xpg@loaded
+
+v1.3.4 (2017-03-25):
+
+ * Fixed typo in \errhelp command name
+
+ * Added \@tracklang@pkgwarn
+
+ * Added dialects: furlan, kurmanji.
+
+v1.3.3 (2016-11-03):
+
+ * Renamed internal \tracklang@dialectmap@to@...
+ and \tracklang@dialectmap@from@... to avoid ambiguity.
+
+ * Fixed incorrect mappings in \SetCurrentTrackedDialect
+
+ * New command \IfHookHasMappingFromTrackedDialect
+
+v1.3.2 (2016-10-11):
+
+ * Added check if \shellescape has been set to \relax
+ by something loaded before tracklang.
+
+v1.3.1 (2016-10-08):
+
+ * Added missing files from tracklang.tds.zip
+
+v1.3 (2016-10-07):
+
+ * New files tracklang-scripts.tex, tracklang-scripts.sty
+ tracklang-region-codes.tex
+
+ * tracklang.tex:
+
+ - Now sets and restores category code for @ if it's not initially 11
+ (no change if it's already 11)
+
+ - New command \TrackLocale{POSIX locale}
+ and \TrackLanguageTag{BCP47 language tag}
+
+ - New command \TrackLangFromEnv. (Queries locale environment
+ variable using \TrackLangQueryEnv and, if successful,
+ then parses and tracks the dialect. Also sets
+ \TrackLangEnvLang, \TrackLangEnvTerritory,
+ \TrackLangEnvCodeSet and \TrackLangEnvModifier.)
+
+ - New command \TrackLangQueryEnv (queries the environment
+ variables LC_ALL or LANG, if shell escape or \directlua
+ available, and sets \TrackLangEnv)
+
+ - New command \TrackLangQueryOtherEnv (like the above
+ but queries an extra environment variable)
+
+ - New command \TrackLangParseFromEnv (parses \TrackLangEnv,
+ if defined and not empty, and sets \TrackLangEnvLang,
+ \TrackLangEnvTerritory, \TrackLangEnvCodeSet and
+ \TrackLangEnvModifier)
+
+ - Many other new commands. See Changes section of manual.
+
+ - New language and dialect options
+
+ - Bug fix: corrected ISO 639-1 language code in usorbian
+
+v1.2 (2015/03/23):
+
+ * New package options:
+ IEirish, ga-IE (Language: Irish Gaelic. Region: Republic of Ireland)
+ GBirish, ga-GB (Language: Irish Gaelic. Region: Northern Ireland)
+ IEenglish, en-IE (Language: English. Region: Republic of Ireland)
+
+v1.1 (2014/11/21):
+
+ * Added \LetTrackLangOption and \@tracklang@declareoption
+
+ * New package options:
+ en-US, en-AU, en-NZ, fr-BE, pt-BR,
+ en-GB, en-CA, fr-CA, nl-BE, france, fr-FR,
+ ngermanDE, de-DE, netherlands, nl-NL, de-BE, belgiangerman,
+ portugal, pt-PT, spainspanish, es-ES, es-AR, es-BO, es-CL,
+ es-CO, es-CR, es-CU, es-DO, es-EC, es-SV, es-GT, es-HN,
+ es-MX, es-NI, es-PA, es-PY, es-PE, es-PR, es-UY, es-VE,
+ de-CH, fr-CH, it-CH, rm-CH, italy, it-IT, vatican, it-VA,
+ sanmarino, it-SM, sloveneistriaitalian, it-SI, slovenia,
+ sloveneistriaslovenian, istriacountyitalian, it-HR,
+ istriacountycroatian, croatia, maltese, maltamaltese,
+ mt-MT, maltaenglish, en-MT, manx, isleofmanenglish, en-IM,
+ jerseyenglish, en-JE, jersey-french, fr-JE, guernseyenglish,
+ en-GG, guernseyfrench, fr-GG
+
+v1.0 (2014/09/29):
+
+ * Initial release
diff --git a/macros/generic/tracklang/README b/macros/generic/tracklang/README
new file mode 100644
index 0000000000..6c314c6c46
--- /dev/null
+++ b/macros/generic/tracklang/README
@@ -0,0 +1,27 @@
+Generic TeX Bundle : tracklang v1.3.7
+
+Last Modified : 2019-08-31
+
+Author : Nicola Talbot
+
+LaTeX usage: \usepackage{tracklang}
+
+TeX usage: \input tracklang
+
+LaTeX code is in tracklang.sty. Generic TeX code is in tracklang.tex.
+
+The tracklang package is provided for package developers who want a
+simple interface to find out which languages the user has requested
+through packages such as babel and polyglossia. *This package
+doesn't provide any translations.* Its purpose is simply to track
+which languages have been requested by the user.
+
+Related article: "Localisation of TeX documents: tracklang."
+TUGBoat, Volume 37 (2016), No. 3.
+http://www.tug.org/TUGboat/tb37-3/tb117talbot.pdf
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/license/lppl1.3 for the details of that license.
+
+http://www.dickimaw-books.com/
+
diff --git a/macros/generic/tracklang/samples/animals/animals-en-GB.ldf b/macros/generic/tracklang/samples/animals/animals-en-GB.ldf
new file mode 100644
index 0000000000..ad4e2021a0
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals-en-GB.ldf
@@ -0,0 +1,10 @@
+\TrackLangProvidesResource{en-GB}[2016/10/06 v1.2]
+
+\TrackLangRequireResource{english}
+
+\providecommand*{\enGBanimals}{%
+ \englishanimals
+ \renewcommand*{\ladybirdname}{ladybird}%
+}
+
+\TrackLangAddToCaptions\enGBanimals
diff --git a/macros/generic/tracklang/samples/animals/animals-en-US.ldf b/macros/generic/tracklang/samples/animals/animals-en-US.ldf
new file mode 100644
index 0000000000..66489a0330
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals-en-US.ldf
@@ -0,0 +1,10 @@
+\TrackLangProvidesResource{en-US}[2016/10/06 v1.2]
+
+\TrackLangRequireResource{english}%
+
+\providecommand*{\enUSanimals}{%
+ \englishanimals
+ \renewcommand*{\ladybirdname}{ladybug}%
+}
+
+\TrackLangAddToCaptions\enUSanimals
diff --git a/macros/generic/tracklang/samples/animals/animals-english.ldf b/macros/generic/tracklang/samples/animals/animals-english.ldf
new file mode 100644
index 0000000000..5b40d67d20
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals-english.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{english}[2016/10/06 v1.2]
+
+\providecommand*{\englishanimals}{%
+ \renewcommand*{\catname}{cat}%
+ \renewcommand*{\dogname}{dog}%
+ \renewcommand*{\ladybirdname}{bishy-barney-bee}%
+}
+
+\TrackLangAddToCaptions\englishanimals
diff --git a/macros/generic/tracklang/samples/animals/animals-german.ldf b/macros/generic/tracklang/samples/animals/animals-german.ldf
new file mode 100644
index 0000000000..45f4852b4b
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals-german.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{german}[2016/10/06 v1.2]
+
+\providecommand*{\germananimals}{%
+ \renewcommand*{\catname}{Katze}%
+ \renewcommand*{\dogname}{Hund}%
+ \renewcommand*{\ladybirdname}{Marienk\"afer}%
+}
+
+\TrackLangAddToCaptions\germananimals
diff --git a/macros/generic/tracklang/samples/animals/animals.sty b/macros/generic/tracklang/samples/animals/animals.sty
new file mode 100644
index 0000000000..8b14d3b4ee
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals.sty
@@ -0,0 +1,24 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{animals}[2016/10/06 v1.2 (NLCT) Sample package to test tracklang.sty]
+
+\RequirePackage{tracklang}[2016/10/07]
+
+\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+\ProcessOptions
+
+
+% default definitions
+\newcommand\catname{cat}
+\newcommand\dogname{dog}
+\newcommand\ladybirdname{bishy-barney-bee}
+
+\AnyTrackedLanguages
+{%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \TrackLangRequireDialect{animals}{\this@dialect}%
+ }%
+}
+{% no tracked languages, default already set up
+}
+
+\endinput
diff --git a/macros/generic/tracklang/samples/animals/animals2-en-GB.ldf b/macros/generic/tracklang/samples/animals/animals2-en-GB.ldf
new file mode 100644
index 0000000000..8e0d742425
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals2-en-GB.ldf
@@ -0,0 +1,17 @@
+\TrackLangProvidesResource{en-GB}[2016/10/06 v1.2]
+
+\providecommand*{\enGBanimals}{%
+ \englishanimals
+ \renewcommand*{\ladybirdname}{ladybird}%
+}
+
+\TrackLangRequireResourceOrDo{english}%
+{
+ \TrackLangAddToCaptions{%
+ \renewcommand*{\ladybirdname}{ladybird}%
+ }
+}
+{
+ \TrackLangAddToCaptions\enGBanimals
+}
+
diff --git a/macros/generic/tracklang/samples/animals/animals2-en-US.ldf b/macros/generic/tracklang/samples/animals/animals2-en-US.ldf
new file mode 100644
index 0000000000..ccc7672903
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals2-en-US.ldf
@@ -0,0 +1,16 @@
+\TrackLangProvidesResource{en-US}[2016/10/06 v1.2]
+
+\providecommand*{\enUSanimals}{%
+ \englishanimals
+ \renewcommand*{\ladybirdname}{ladybug}%
+}
+
+\TrackLangRequireResourceOrDo{english}
+{
+ \TrackLangAddToCaptions{%
+ \renewcommand*{\ladybirdname}{ladybird}%
+ }
+}
+{
+ \TrackLangAddToCaptions\enUSanimals
+}
diff --git a/macros/generic/tracklang/samples/animals/animals2-english.ldf b/macros/generic/tracklang/samples/animals/animals2-english.ldf
new file mode 100644
index 0000000000..5b40d67d20
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals2-english.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{english}[2016/10/06 v1.2]
+
+\providecommand*{\englishanimals}{%
+ \renewcommand*{\catname}{cat}%
+ \renewcommand*{\dogname}{dog}%
+ \renewcommand*{\ladybirdname}{bishy-barney-bee}%
+}
+
+\TrackLangAddToCaptions\englishanimals
diff --git a/macros/generic/tracklang/samples/animals/animals2-german.ldf b/macros/generic/tracklang/samples/animals/animals2-german.ldf
new file mode 100644
index 0000000000..45f4852b4b
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals2-german.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{german}[2016/10/06 v1.2]
+
+\providecommand*{\germananimals}{%
+ \renewcommand*{\catname}{Katze}%
+ \renewcommand*{\dogname}{Hund}%
+ \renewcommand*{\ladybirdname}{Marienk\"afer}%
+}
+
+\TrackLangAddToCaptions\germananimals
diff --git a/macros/generic/tracklang/samples/animals/animals2.sty b/macros/generic/tracklang/samples/animals/animals2.sty
new file mode 100644
index 0000000000..88ca25139a
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/animals2.sty
@@ -0,0 +1,39 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{animals2}[2016/10/06 v1.2 (NLCT) Sample package to test tracklang.sty]
+
+\RequirePackage{tracklang}[2016/10/07]
+
+\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+\ProcessOptions
+
+\AnyTrackedLanguages
+{}
+{% fetch locale information from the operating system
+ \ifx\TeXOSQueryLangTag\undefined
+ \TrackLangFromEnv
+ \else
+ % texosquery v1.2 available
+ \TeXOSQueryLangTag{\langtag}
+ \TrackLanguageTag{\langtag}
+ \fi
+}
+
+% default definitions
+\newcommand\catname{cat}
+\newcommand\dogname{dog}
+\newcommand\ladybirdname{bishy-barney-bee}
+
+\newcommand*{\RequireAnimalsDialect}[1]{%
+ \TrackLangRequireDialect{animals2}{#1}%
+}
+
+\AnyTrackedLanguages
+{%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \RequireAnimalsDialect\this@dialect
+ }%
+}
+{% no tracked languages, default already set up
+}
+
+\endinput
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf b/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
new file mode 100644
index 0000000000..526fd1af52
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-babel.tex b/macros/generic/tracklang/samples/animals/sample-animals-babel.tex
new file mode 100644
index 0000000000..962e00f522
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-babel.tex
@@ -0,0 +1,26 @@
+% arara: pdflatex
+\documentclass[american,german,british]{article}
+
+\usepackage{babel}
+\usepackage{animals}
+
+\begin{document}
+\selectlanguage{american}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\selectlanguage{german}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\selectlanguage{british}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
new file mode 100644
index 0000000000..d29a53d2ef
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
new file mode 100644
index 0000000000..bb96c76cd4
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
@@ -0,0 +1,15 @@
+% arara: xelatex
+\documentclass[a4paper]{article}
+
+\usepackage{polyglossia}
+\setmainlanguage{german}
+
+\usepackage{animals}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de.pdf b/macros/generic/tracklang/samples/animals/sample-animals-de.pdf
new file mode 100644
index 0000000000..778e6e0e21
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de.tex b/macros/generic/tracklang/samples/animals/sample-animals-de.tex
new file mode 100644
index 0000000000..ec24e8ee51
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de.tex
@@ -0,0 +1,14 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[ngerman]{babel}
+
+\usepackage{animals}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
new file mode 100644
index 0000000000..8fb67bafc1
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-poly.tex b/macros/generic/tracklang/samples/animals/sample-animals-poly.tex
new file mode 100644
index 0000000000..33b7f4e93b
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals-poly.tex
@@ -0,0 +1,15 @@
+% arara: xelatex
+\documentclass[british,a4paper]{article}
+
+\usepackage{polyglossia}
+\setmainlanguage[variant=uk]{english}
+
+\usepackage{animals}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals.pdf b/macros/generic/tracklang/samples/animals/sample-animals.pdf
new file mode 100644
index 0000000000..cac9466213
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals.tex b/macros/generic/tracklang/samples/animals/sample-animals.tex
new file mode 100644
index 0000000000..85dc4dddf9
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals.tex
@@ -0,0 +1,19 @@
+% arara: pdflatex
+\documentclass[british,american,a4paper]{article}
+
+\usepackage{animals}
+
+\begin{document}
+\enGBanimals
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\enUSanimals
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
new file mode 100644
index 0000000000..fcfa3e82ea
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de.tex b/macros/generic/tracklang/samples/animals/sample-animals2-de.tex
new file mode 100644
index 0000000000..20158ec8f4
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de.tex
@@ -0,0 +1,14 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[ngerman]{babel}
+
+\usepackage{animals2}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
new file mode 100644
index 0000000000..73fe437538
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de2.tex b/macros/generic/tracklang/samples/animals/sample-animals2-de2.tex
new file mode 100644
index 0000000000..3792d8f271
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de2.tex
@@ -0,0 +1,14 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage{ngerman}
+
+\usepackage{animals2}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
new file mode 100644
index 0000000000..0db2008c60
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de3.tex b/macros/generic/tracklang/samples/animals/sample-animals2-de3.tex
new file mode 100644
index 0000000000..3895f3c3a1
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de3.tex
@@ -0,0 +1,14 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[ngerman]{translator}
+
+\usepackage{animals2}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
new file mode 100644
index 0000000000..e09a02d474
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de4.tex b/macros/generic/tracklang/samples/animals/sample-animals2-de4.tex
new file mode 100644
index 0000000000..c774718209
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de4.tex
@@ -0,0 +1,15 @@
+% arara: xelatex
+\documentclass[a4paper]{article}
+
+\usepackage{polyglossia}
+\setmainlanguage{german}
+
+\usepackage{animals2}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
new file mode 100644
index 0000000000..9fe91c3e1a
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-poly.tex b/macros/generic/tracklang/samples/animals/sample-animals2-poly.tex
new file mode 100644
index 0000000000..626556afb7
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-poly.tex
@@ -0,0 +1,15 @@
+% arara: xelatex
+\documentclass[british,a4paper]{article}
+
+\usepackage{polyglossia}
+\setmainlanguage[variant=uk]{english}
+
+\usepackage{animals2}
+
+\begin{document}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2.pdf b/macros/generic/tracklang/samples/animals/sample-animals2.pdf
new file mode 100644
index 0000000000..ca98c4a150
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2.tex b/macros/generic/tracklang/samples/animals/sample-animals2.tex
new file mode 100644
index 0000000000..e4ed01e5b0
--- /dev/null
+++ b/macros/generic/tracklang/samples/animals/sample-animals2.tex
@@ -0,0 +1,22 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[american,british]{babel}
+
+\usepackage{animals2}
+
+\begin{document}
+
+\selectlanguage{british}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\selectlanguage{american}
+
+\catname.
+\dogname.
+\ladybirdname.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/regions-BE.ldf b/macros/generic/tracklang/samples/regions/regions-BE.ldf
new file mode 100644
index 0000000000..7e8887518f
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-BE.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{BE}[2016/10/06 v1.2]
+
+\providecommand*{\BEunits}{%
+ \renewcommand*{\weightunit}{kg}%
+ \renewcommand*{\lengthunit}{mm}%
+ \renewcommand*{\currencyunit}{EUR}%
+}
+
+\TrackLangAddToCaptions\BEunits
diff --git a/macros/generic/tracklang/samples/regions/regions-CA.ldf b/macros/generic/tracklang/samples/regions/regions-CA.ldf
new file mode 100644
index 0000000000..709a6371b7
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-CA.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{CA}[2016/10/06 v1.2]
+
+\providecommand*{\CAunits}{%
+ \renewcommand*{\weightunit}{kg}%
+ \renewcommand*{\lengthunit}{mm}%
+ \renewcommand*{\currencyunit}{CAD}%
+}
+
+\TrackLangAddToCaptions\CAunits
diff --git a/macros/generic/tracklang/samples/regions/regions-GB.ldf b/macros/generic/tracklang/samples/regions/regions-GB.ldf
new file mode 100644
index 0000000000..85fe6d9713
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-GB.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{GB}[2016/10/06 v1.2]
+
+\providecommand*{\GBunits}{%
+ \renewcommand*{\weightunit}{kg}%
+ \renewcommand*{\lengthunit}{mm}%
+ \renewcommand*{\currencyunit}{GBP}%
+}
+
+\TrackLangAddToCaptions\GBunits
diff --git a/macros/generic/tracklang/samples/regions/regions-IM.ldf b/macros/generic/tracklang/samples/regions/regions-IM.ldf
new file mode 100644
index 0000000000..e39500087a
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-IM.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{IM}[2016/10/06 v1.2]
+
+\providecommand*{\IMunits}{%
+ \renewcommand*{\weightunit}{kg}%
+ \renewcommand*{\lengthunit}{mm}%
+ \renewcommand*{\currencyunit}{M\pounds}%
+}
+
+\TrackLangAddToCaptions\IMunits
diff --git a/macros/generic/tracklang/samples/regions/regions-US.ldf b/macros/generic/tracklang/samples/regions/regions-US.ldf
new file mode 100644
index 0000000000..ec69edfe01
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-US.ldf
@@ -0,0 +1,9 @@
+\TrackLangProvidesResource{US}[2016/10/06 v1.2]
+
+\providecommand*{\USunits}{%
+ \renewcommand*{\weightunit}{lb}%
+ \renewcommand*{\lengthunit}{in}%
+ \renewcommand*{\currencyunit}{USD}%
+}
+
+\TrackLangAddToCaptions\USunits
diff --git a/macros/generic/tracklang/samples/regions/regions-dutch.ldf b/macros/generic/tracklang/samples/regions/regions-dutch.ldf
new file mode 100644
index 0000000000..0c4384d27f
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-dutch.ldf
@@ -0,0 +1,7 @@
+\TrackLangProvidesResource{dutch}[2016/10/06 v1.2]
+
+\providecommand*{\dutchnames}{%
+ \renewcommand*{\unitname}{meeteenheden}%
+}
+
+\TrackLangAddToCaptions\dutchnames
diff --git a/macros/generic/tracklang/samples/regions/regions-english.ldf b/macros/generic/tracklang/samples/regions/regions-english.ldf
new file mode 100644
index 0000000000..2be20b808b
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-english.ldf
@@ -0,0 +1,7 @@
+\TrackLangProvidesResource{english}[2016/10/06 v1.2]
+
+\providecommand*{\englishnames}{%
+ \renewcommand*{\unitname}{units}%
+}
+
+\TrackLangAddToCaptions\englishnames
diff --git a/macros/generic/tracklang/samples/regions/regions-french.ldf b/macros/generic/tracklang/samples/regions/regions-french.ldf
new file mode 100644
index 0000000000..53392fc3c7
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-french.ldf
@@ -0,0 +1,7 @@
+\TrackLangProvidesResource{french}[2016/10/06 v1.2]
+
+\providecommand*{\frenchnames}{%
+ \renewcommand*{\unitname}{unit\'es}%
+}
+
+\TrackLangAddToCaptions\frenchnames
diff --git a/macros/generic/tracklang/samples/regions/regions-german.ldf b/macros/generic/tracklang/samples/regions/regions-german.ldf
new file mode 100644
index 0000000000..3be1461693
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-german.ldf
@@ -0,0 +1,7 @@
+\TrackLangProvidesResource{german}[2016/10/06 v1.2]
+
+\providecommand*{\germannames}{%
+ \renewcommand*{\unitname}{Ma\ss einheiten}%
+}
+
+\TrackLangAddToCaptions\germannames
diff --git a/macros/generic/tracklang/samples/regions/regions-italian.ldf b/macros/generic/tracklang/samples/regions/regions-italian.ldf
new file mode 100644
index 0000000000..ddbe9de433
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-italian.ldf
@@ -0,0 +1,7 @@
+\TrackLangProvidesResource{italian}[2016/10/06 v1.2]
+
+\providecommand*{\italiannames}{%
+ \renewcommand*{\unitname}{unit\`a di misura}%
+}
+
+\italiannames
diff --git a/macros/generic/tracklang/samples/regions/regions-manx.ldf b/macros/generic/tracklang/samples/regions/regions-manx.ldf
new file mode 100644
index 0000000000..2426d43b32
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions-manx.ldf
@@ -0,0 +1,7 @@
+\TrackLangProvidesResource{manx}[2016/10/06 v1.2]
+
+\providecommand*{\manxnames}{%
+ \renewcommand*{\unitname}{Ennym}% not right, but I don't know any Manx!
+}
+
+\TrackLangAddToCaptions\manxnames
diff --git a/macros/generic/tracklang/samples/regions/regions.sty b/macros/generic/tracklang/samples/regions/regions.sty
new file mode 100644
index 0000000000..3b942c4172
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions.sty
@@ -0,0 +1,43 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{regions}[2016/10/06 v1.2 (NLCT) Sample package to test tracklang.sty]
+
+\RequirePackage{tracklang}[2016/10/07]
+
+\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+\ProcessOptions
+
+\AnyTrackedLanguages
+{}
+{% fetch locale information from the operating system
+ \ifx\TeXOSQueryLangTag\undefined
+ \TrackLangFromEnv
+ \else
+ \TeXOSQueryLangTag{\langtag}
+ \TrackLanguageTag{\langtag}
+ \fi
+}
+
+\newcommand*{\weightunit}{kg}
+\newcommand*{\lengthunit}{mm}
+\newcommand*{\currencyunit}{}
+
+\newcommand*{\unitname}{units}
+
+\newcommand*{\RequireRegionsDialect}[1]{%
+ \TrackLangRequireDialect
+ [\TrackLangRequireResource{\CurrentTrackedTag}%
+ \TrackLangRequireResource{\CurrentTrackedLanguage}%
+ ]%
+ {regions}{#1}%
+}
+
+\AnyTrackedLanguages
+{%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \RequireRegionsDialect\this@dialect
+ }%
+}
+{% no tracked languages, default already set up
+}
+
+\endinput
diff --git a/macros/generic/tracklang/samples/regions/regions2.sty b/macros/generic/tracklang/samples/regions/regions2.sty
new file mode 100644
index 0000000000..d7d0d99757
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/regions2.sty
@@ -0,0 +1,46 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{regions2}[2016/10/06 v1.2 (NLCT) Sample package to test tracklang.sty]
+
+\RequirePackage{tracklang}[2016/10/07]
+
+\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+\ProcessOptions
+
+\newcommand*{\weightunit}{kg}
+\newcommand*{\lengthunit}{mm}
+\newcommand*{\currencyunit}{EUR}
+
+\newcommand*{\unitname}{units}
+
+\newcommand*{\defaultunits}{%
+ \renewcommand*{\weightunit}{kg}%
+ \renewcommand*{\lengthunit}{mm}%
+ \renewcommand*{\currencyunit}{EUR}%
+}
+
+\newcommand*{\RequireRegionsDialect}[1]{%
+ \TrackLangRequireDialect
+ [\TrackLangRequireResource{\CurrentTrackedTag}%
+ \ifx\CurrentTrackedTag\CurrentTrackedLanguage
+ \ifx\CurrentTrackedRegion\empty
+ \TrackLangAddToCaptions{\defaultunits}%
+ \else
+ \TrackLangRequireResource{\CurrentTrackedRegion}%
+ \fi
+ \else
+ \TrackLangRequireResource{\CurrentTrackedLanguage}%
+ \fi
+ ]%
+ {regions}{#1}%
+}
+
+\AnyTrackedLanguages
+{%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \RequireRegionsDialect\this@dialect
+ }%
+}
+{% no tracked languages, default already set up
+}
+
+\endinput
diff --git a/macros/generic/tracklang/samples/regions/sample-regions.pdf b/macros/generic/tracklang/samples/regions/sample-regions.pdf
new file mode 100644
index 0000000000..126660e534
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions.tex b/macros/generic/tracklang/samples/regions/sample-regions.tex
new file mode 100644
index 0000000000..8c6caa7116
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions.tex
@@ -0,0 +1,13 @@
+% arara: pdflatex
+%\documentclass[USenglish]{article}
+%\documentclass[canadian]{article}
+%\documentclass[canadien]{article}
+\documentclass{article}
+
+\usepackage{regions}
+
+\begin{document}
+
+\unitname: \weightunit, \lengthunit, \currencyunit.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
new file mode 100644
index 0000000000..d969f2992f
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-manx.tex b/macros/generic/tracklang/samples/regions/sample-regions2-manx.tex
new file mode 100644
index 0000000000..6ac72343ed
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-manx.tex
@@ -0,0 +1,10 @@
+% arara: pdflatex
+\documentclass[manx]{article}
+
+\usepackage{regions2}
+
+\begin{document}
+
+\unitname: \weightunit, \lengthunit, \currencyunit.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
new file mode 100644
index 0000000000..1a12bd1f4d
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map.tex b/macros/generic/tracklang/samples/regions/sample-regions2-map.tex
new file mode 100644
index 0000000000..b32c9eb130
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map.tex
@@ -0,0 +1,32 @@
+% arara: pdflatex
+\documentclass{article}
+
+\usepackage{tracklang}
+
+\TrackLanguageTag{de-US-1996}
+\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
+
+\TrackLanguageTag{en-MT}
+\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{british}
+
+\usepackage[main=ngerman,british]{babel}
+\usepackage{regions2}
+
+\newcommand{\test}[1]{%
+ \section{#1}
+ \selectlanguage{#1}%
+ \SetCurrentTrackedDialect{#1}%
+ Language tag: \CurrentTrackedLanguageTag.
+ (tracklang dialect label: \CurrentTrackedDialect.)
+
+ \unitname: \weightunit, \lengthunit, \currencyunit.
+}
+
+
+\begin{document}
+
+\test{ngerman}
+
+\test{british}
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
new file mode 100644
index 0000000000..2d1dc20f20
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map2.tex b/macros/generic/tracklang/samples/regions/sample-regions2-map2.tex
new file mode 100644
index 0000000000..e746f875d5
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map2.tex
@@ -0,0 +1,29 @@
+% arara: pdflatex
+\documentclass{article}
+
+\usepackage{tracklang}
+
+\TrackLanguageTag{de-US-1996}
+\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
+
+\TrackLanguageTag{en-MT}
+
+\usepackage[main=ngerman,english]{babel}
+\usepackage{regions2}
+
+\newcommand{\test}[1]{%
+ \section{#1}
+ \selectlanguage{#1}%
+ \SetCurrentTrackedDialect{#1}%
+ Language tag: \CurrentTrackedLanguageTag.
+ (tracklang dialect label: \CurrentTrackedDialect.)
+
+ \unitname: \weightunit, \lengthunit, \currencyunit.
+}
+
+\begin{document}
+\test{ngerman}
+
+\test{english}
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
new file mode 100644
index 0000000000..b2591931bf
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map3.tex b/macros/generic/tracklang/samples/regions/sample-regions2-map3.tex
new file mode 100644
index 0000000000..a7ad033613
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map3.tex
@@ -0,0 +1,23 @@
+% arara: pdflatex
+\documentclass[ngermanDE,USenglish]{article}
+
+\usepackage[main=ngerman]{babel}
+\usepackage{regions2}
+
+\newcommand{\test}[1]{%
+ \section{#1}
+ \selectlanguage{#1}%
+ \SetCurrentTrackedDialect{#1}%
+ Language: \CurrentTrackedLanguageTag.
+
+ \unitname: \weightunit, \lengthunit, \currencyunit.
+}
+
+
+
+\begin{document}
+\test{USenglish}
+
+\test{ngerman}
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
new file mode 100644
index 0000000000..3d44db0cf3
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex b/macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex
new file mode 100644
index 0000000000..f949bff8f3
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex
@@ -0,0 +1,21 @@
+% arara: pdflatex
+\documentclass{article}
+
+\usepackage[main=ngerman,british]{babel}
+\usepackage{regions2}
+
+\newcommand{\test}[1]{%
+ \section{#1}
+ \selectlanguage{#1}%
+ \SetCurrentTrackedDialect{#1}%
+ Language: \CurrentTrackedLanguageTag.
+
+ \unitname: \weightunit, \lengthunit, \currencyunit.
+}
+
+\begin{document}
+\test{ngerman}
+
+\test{british}
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2.pdf b/macros/generic/tracklang/samples/regions/sample-regions2.pdf
new file mode 100644
index 0000000000..5d140fe792
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2.tex b/macros/generic/tracklang/samples/regions/sample-regions2.tex
new file mode 100644
index 0000000000..3ffe08c664
--- /dev/null
+++ b/macros/generic/tracklang/samples/regions/sample-regions2.tex
@@ -0,0 +1,11 @@
+% arara: pdflatex
+\documentclass[ngerman]{article}
+
+\usepackage{regions2}
+
+\begin{document}
+Language: \languagename.
+
+\unitname: \weightunit, \lengthunit, \currencyunit.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/sample-tracklang.pdf b/macros/generic/tracklang/samples/sample-tracklang.pdf
new file mode 100644
index 0000000000..f8b99abdca
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang.tex b/macros/generic/tracklang/samples/sample-tracklang.tex
new file mode 100644
index 0000000000..982982afdf
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang.tex
@@ -0,0 +1,42 @@
+% arara: pdflatex
+\documentclass[british,francais,american,canadian,canadien,dutch,a4paper]{article}
+
+\usepackage{tracklang}
+
+\begin{document}
+
+Languages:
+\ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
+(ISO \TwoLetterIsoLanguageCode: ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
+
+Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
+(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
+ {ISO \TwoLetterIsoCountryCode:
+ ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
+ {no specific region};
+root: \TrackedLanguageFromDialect{\ThisDialect}). }
+
+``english'' \IfTrackedDialect{english}{has}{hasn't} been specified.
+
+``british'' \IfTrackedDialect{british}{has}{hasn't} been specified.
+
+``flemish'' \IfTrackedDialect{flemish}{has}{hasn't} been specified.
+
+``dutch'' \IfTrackedDialect{dutch}{has}{hasn't} been specified.
+
+``english'' or an English variant
+\IfTrackedLanguage{english}{has}{hasn't} been specified.
+
+Language for ISO \TwoLetterIsoCountryCode\ ``GB'':
+\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{GB}.
+
+Language for ISO \TwoLetterIsoCountryCode\ ``CA'':
+\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{CA}.
+
+Country ISO \TwoLetterIsoCountryCode\ code for ``canadian'':
+\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{canadian}.
+
+Dialects for language ``english'':
+\TrackedDialectsFromLanguage{english}.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/sample-tracklang2.pdf b/macros/generic/tracklang/samples/sample-tracklang2.pdf
new file mode 100644
index 0000000000..f0d8a57457
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang2.tex b/macros/generic/tracklang/samples/sample-tracklang2.tex
new file mode 100644
index 0000000000..67867a4237
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang2.tex
@@ -0,0 +1,44 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+\usepackage[francais,american,canadian,canadien,dutch,british]{babel}
+
+\usepackage{tracklang}
+
+\begin{document}
+
+Languages:
+\ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
+(ISO \TwoLetterIsoLanguageCode: ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
+
+Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
+(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
+ {ISO \TwoLetterIsoCountryCode:
+ ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
+ {no specific region};
+root: \TrackedLanguageFromDialect{\ThisDialect}). }
+
+``english'' \IfTrackedDialect{english}{has}{hasn't} been specified.
+
+``british'' \IfTrackedDialect{british}{has}{hasn't} been specified.
+
+``flemish'' \IfTrackedDialect{flemish}{has}{hasn't} been specified.
+
+``dutch'' \IfTrackedDialect{dutch}{has}{hasn't} been specified.
+
+``english'' or an English variant
+\IfTrackedLanguage{english}{has}{hasn't} been specified.
+
+Language for ISO \TwoLetterIsoCountryCode\ ``GB'':
+\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{GB}.
+
+Language for ISO \TwoLetterIsoCountryCode\ ``CA'':
+\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{CA}.
+
+Country ISO \TwoLetterIsoCountryCode\ code for ``canadian'':
+\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{canadian}.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/sample-tracklang3.pdf b/macros/generic/tracklang/samples/sample-tracklang3.pdf
new file mode 100644
index 0000000000..175e007831
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang3.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang3.tex b/macros/generic/tracklang/samples/sample-tracklang3.tex
new file mode 100644
index 0000000000..414901bd55
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang3.tex
@@ -0,0 +1,44 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+\usepackage[francais,american,canadian,canadien,dutch,british]{translator}
+
+\usepackage{tracklang}
+
+\begin{document}
+
+Languages:
+\ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
+(ISO \TwoLetterIsoLanguageCode: ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
+
+Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
+(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
+ {ISO \TwoLetterIsoCountryCode:
+ ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
+ {no specific region};
+root: \TrackedLanguageFromDialect{\ThisDialect}). }
+
+``english'' \IfTrackedDialect{english}{has}{hasn't} been specified.
+
+``british'' \IfTrackedDialect{british}{has}{hasn't} been specified.
+
+``flemish'' \IfTrackedDialect{flemish}{has}{hasn't} been specified.
+
+``dutch'' \IfTrackedDialect{dutch}{has}{hasn't} been specified.
+
+``english'' or an English variant
+\IfTrackedLanguage{english}{has}{hasn't} been specified.
+
+Language for ISO \TwoLetterIsoCountryCode\ ``GB'':
+\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{GB}.
+
+Language for ISO \TwoLetterIsoCountryCode\ ``CA'':
+\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{CA}.
+
+Country ISO \TwoLetterIsoCountryCode\ code for ``canadian'':
+\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{canadian}.
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/sample-tracklang4.pdf b/macros/generic/tracklang/samples/sample-tracklang4.pdf
new file mode 100644
index 0000000000..7e2f14ba1b
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang4.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang4.tex b/macros/generic/tracklang/samples/sample-tracklang4.tex
new file mode 100644
index 0000000000..5c382234a2
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang4.tex
@@ -0,0 +1,27 @@
+% arara: xelatex
+\documentclass[a4paper]{article}
+
+\usepackage{fontspec}
+
+\usepackage{polyglossia}
+
+\setotherlanguages{french,dutch}
+\setmainlanguage[variant=british]{english}
+
+\usepackage{tracklang}
+
+\begin{document}
+
+Languages:
+\ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
+(ISO \TwoLetterIsoLanguageCode: ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
+
+Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
+(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
+ {ISO \TwoLetterIsoCountryCode:
+ ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
+ {no specific region};
+root: \TrackedLanguageFromDialect{\ThisDialect}). }
+
+Variants aren't detected with polyglossia.
+\end{document}
diff --git a/macros/generic/tracklang/samples/sample-tracklang5.pdf b/macros/generic/tracklang/samples/sample-tracklang5.pdf
new file mode 100644
index 0000000000..84acb9ee4e
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang5.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang5.tex b/macros/generic/tracklang/samples/sample-tracklang5.tex
new file mode 100644
index 0000000000..5428700b67
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang5.tex
@@ -0,0 +1,24 @@
+% arara: pdflatex
+\documentclass[a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+\usepackage{ngerman}
+
+\usepackage{tracklang}
+
+\begin{document}
+
+Languages:
+\ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
+(ISO \TwoLetterIsoLanguageCode: ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
+
+Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
+(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
+ {ISO \TwoLetterIsoCountryCode:
+ ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
+ {no specific region};
+root: \TrackedLanguageFromDialect{\ThisDialect}). }
+
+\end{document}
diff --git a/macros/generic/tracklang/samples/sample-tracklang6.pdf b/macros/generic/tracklang/samples/sample-tracklang6.pdf
new file mode 100644
index 0000000000..9f2e19cc58
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang6.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang6.tex b/macros/generic/tracklang/samples/sample-tracklang6.tex
new file mode 100644
index 0000000000..6f174f4a02
--- /dev/null
+++ b/macros/generic/tracklang/samples/sample-tracklang6.tex
@@ -0,0 +1,43 @@
+% arara: pdftex
+
+\input tracklang
+
+\TrackLangFromEnv % lookup LC_ALL or LANG
+Environment query results:
+language: \TrackLangEnvLang,
+territory: \TrackLangEnvTerritory,
+codeset: \TrackLangEnvCodeSet,
+modifier: \TrackLangEnvModifier.
+
+\TrackPredefinedDialect{british}
+\TrackPredefinedDialect{american}
+\TrackPredefinedDialect{canadian}
+\TrackPredefinedDialect{canadien}
+\TrackPredefinedDialect{belgique}
+
+\TrackLocale{de-NA@new}
+
+\TrackLocale{manx}
+
+Dialect Regions:
+
+\ForEachTrackedDialect{\ThisDialect}{\ThisDialect:
+ \TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}%
+ \IfHasTrackedDialectModifier\ThisDialect
+ { (\GetTrackedDialectModifier\ThisDialect)}%
+ {}.
+}
+
+Language Codes:
+
+\ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage:
+ \TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}. }
+
+\ForEachTrackedDialect{\ThisDialect}
+{%
+ \IfTrackedLanguageFileExists{\ThisDialect}{animals-}{.ldf}%
+ {Found ``animals-\CurrentTrackedTag.ldf''\par}%
+ {No file found for dialect ``\ThisDialect''\par}
+}
+
+\bye
diff --git a/macros/generic/tracklang/tracklang.dtx b/macros/generic/tracklang/tracklang.dtx
new file mode 100644
index 0000000000..1768bcc3ce
--- /dev/null
+++ b/macros/generic/tracklang/tracklang.dtx
@@ -0,0 +1,10870 @@
+%\iffalse
+% tracklang.dtx generated using makedtx version 1.2 (c) Nicola Talbot
+% Command line args:
+% -doc "tracklang-manual.tex"
+% -section "chapter"
+% -src "tracklang.sty\Z=>tracklang.sty"
+% -src "tracklang.tex\Z=>tracklang.tex"
+% -src "tracklang-region-codes.tex\Z=>tracklang-region-codes.tex"
+% -src "tracklang-scripts.sty\Z=>tracklang-scripts.sty"
+% -src "tracklang-scripts.tex\Z=>tracklang-scripts.tex"
+% -author "Nicola Talbot"
+% tracklang
+% Created on 2019/8/31 16:29
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2019 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass[report,inlinetitle]{nlctdoc}
+
+\DeleteShortVerb{|}
+
+\usepackage[a4paper,marginpar=2in,marginparsep=10pt,
+ left=2in,right=.5in]{geometry}
+\usepackage{graphicx}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{tracklang}
+\usepackage{etoolbox}
+\usepackage{longtable}
+\usepackage{datatool-base}[2016/07/20]
+\let\orgtheindex\theindex
+\let\orgendtheindex\endtheindex
+\usepackage{imakeidx}
+\usepackage[colorlinks,
+ bookmarks,
+ hyperindex=false,
+ pdfauthor={Nicola L.C. Talbot},
+ pdftitle={tracklang: tracking language options}]{hyperref}
+
+\CheckSum{3961}
+
+\appto\MacroFont{\scriptsize}
+\renewcommand*{\usage}[1]{\textit{\hyperpage{#1}}}
+\renewcommand*{\main}[1]{\underline{\hyperpage{#1}}}
+\PageIndex
+\setcounter{IndexColumns}{2}
+\newcommand*{\PrintCodeIndex}{%
+ \bgroup
+ \let\theindex\orgtheindex
+ \let\endtheindex\orgendtheindex
+ \PrintIndex
+ \egroup
+}
+\IndexPrologue{%
+\clearpage\phantomsection
+\addcontentsline{toc}{chapter}{Code Index}%
+\chapter*{Code Index}\markboth{Code Index}{Code Index}%
+}
+
+\makeindex[name=user,title=Main Index,intoc]
+\renewcommand{\iapp}[1]{\index[user]{#1@\appfmt{#1}|hyperpage}}
+\renewcommand{\iterm}[1]{\index[user]{#1|hyperpage}}
+\renewcommand{\ics}[1]{\cs{#1}\index[user]{#1@\protect\cs{#1}|hyperpage}}
+\renewcommand*{\ipkgopt}[2][]{%
+ \ifstrempty{#1}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}|hyperpage}}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}!#1@\pkgoptfmt{#1}|hyperpage}}%
+}
+\renewcommand*{\pkgopt}[2][]{%
+ \pkgoptfmt{#2}\ifstrempty{#1}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}|hyperpage}}%
+ {\index[user]{package options:!#2@\pkgoptfmt{#2}!#1@\pkgoptfmt{#1}|hyperpage}}%
+}
+\renewcommand*{\isty}[1]{%
+ \index[user]{#1 package@\styfmt{#1} package|hyperpage}}
+
+\newcommand*{\envvar}[1]{%
+ \texttt{#1}%
+ \index[user]{#1@\texttt{#1}}}
+
+\newcommand*{\isopkgopts}{}
+\newcommand*{\nonisopkgopts}{}
+\newcommand*{\rootlangopts}{}
+
+\makeatletter
+\renewcommand*{\changes@}[3]{%
+ \protected@edef\@tempa{\noexpand\glossary{#1 (#2)\levelchar
+ \ifx\saved@macroname\@empty
+ \space
+ \actualchar
+ \generalname
+ \else
+ \expandafter\@gobble
+ \saved@macroname
+ \actualchar
+ \string\verb\quotechar*%
+ \verbatimchar\saved@macroname
+ \verbatimchar
+ \fi
+ :\levelchar #3\encapchar hyperpage}}%
+ \@tempa\endgroup\@esphack}
+
+
+\ifdim\overfullrule=0pt\relax % final mode
+ \typeout{Sorting available options. This may take a while.}%
+ \newcommand{\addopt}[3]{%
+ \expandafter\dtlinsertinto\expandafter{#1}{#2}{#3}%
+ }%
+\else
+ \newcommand{\addopt}[3]{%
+ \ifdefempty{#2}{\edef#2{#1}}{\eappto{#2}{,#1}}
+ }
+\fi
+
+
+\@for\thisdialect:=\@tracklang@declaredoptions\do{%
+ \ifdefempty\thisdialect
+ {}%
+ {%
+ \typeout{\thisdialect}%
+ \ifnum\pdfmatch {[a-z]{2,3}-[A-Z]{2}}{\thisdialect}=1\relax
+ \addopt{\thisdialect}{\isopkgopts}{\dtlcompare}%
+ \else
+ \TrackLangIfKnownLang{\thisdialect}
+ {%
+ \addopt{\thisdialect}{\rootlangopts}{\dtlcompare}%
+ }%
+ {%
+ \addopt{\thisdialect}{\nonisopkgopts}{\dtlicompare}%
+ }%
+ \fi
+ }%
+}
+
+\newcommand*{\isopkgoptstab}{\begin{table}[p]
+\caption[Predefined ISO Language-Region Dialects]%
+{Predefined ISO Language-Region Dialects. (May be used as a package
+option or with \cs{TrackPredefinedDialect}.)}\label{tab:isoopts}
+\medskip
+\centering
+\begin{tabular}{llll}%
+}
+
+\newcommand*{\fnregion}{\textsuperscript{\textdagger}}
+
+\newcommand*{\rootlangoptstab}{\begin{longtable}{lll}
+\caption[Predefined Root Languages]{Predefined Root Languages.
+(\fnregion Has an associated territory.)
+The corresponding
+language tag obtained with \cs{GetTrackedLanguageTag}\marg{dialect}
+is shown in parentheses.}\label{tab:rootlangopts}\\\endfirsthead
+\caption[]{Predefined Root Languages Continued.}\\\endhead
+}
+
+\newcommand*{\nonisopkgoptstab}{\begin{longtable}{ll}
+\caption[Predefined Non-ISO Dialects]{Predefined Non-ISO Dialects.
+(\fnregion Has an associated territory.)
+The corresponding
+language tag obtained with \cs{GetTrackedLanguageTag}\marg{dialect}
+is shown in parentheses. If the dialect has a corresponding mapping
+for the closest matching non-root language \cs{caption\ldots} or
+\cs{date\ldots}, this is also include after the tag following a
+slash.}%
+\label{tab:nonisoopts}\\\endfirsthead
+\caption[]{Predefined Non-ISO Dialects Continued}\\\endhead
+}
+
+\newcount\tmpctr
+
+\@for\thisdialect:=\isopkgopts\do{%
+ \advance\tmpctr by 1\relax
+ \eappto\isopkgoptstab{\noexpand\pkgoptfmt{\thisdialect}&}%
+ {%locally track this dialect to pick up information
+ \TrackPredefinedDialect\thisdialect
+ \xappto\isopkgoptstab{\space
+ {\noexpand\small(\noexpand\texttt{%
+ \csname @tracklang@dialect\endcsname})}}%
+ }%
+ \ifnum\tmpctr>1
+ \tmpctr = 0\relax
+ \appto\isopkgoptstab{\\}%
+ \else
+ \appto\isopkgoptstab{&}%
+ \fi
+}
+
+\appto\isopkgoptstab{\end{tabular}\par
+\medskip
+Other combinations need to be set with \cs{TrackLocale} or
+\cs{TrackLanguageTag}.
+\end{table}}
+
+\tmpctr=0\relax
+
+\@for\thisdialect:=\nonisopkgopts\do{%
+ \advance\tmpctr by 1\relax
+ \eappto\nonisopkgoptstab{\noexpand\pkgoptfmt{\thisdialect}}%
+ {%locally track this dialect to pick up information
+ \TrackPredefinedDialect\thisdialect
+ \IfTrackedLanguageHasIsoCode{3166-1}{\thisdialect}%
+ {\gappto\nonisopkgoptstab{\fnregion}}%
+ {}%
+ \IfTrackedDialectHasMapping\thisdialect
+ {\def\nonisopkgmap{ /
+ \noexpand\texttt{\GetTrackedDialectToMapping\thisdialect}}}%
+ {\def\nonisopkgmap{}}%
+ \xappto\nonisopkgoptstab{\space
+ {\noexpand\small(\noexpand\texttt{\GetTrackedLanguageTag\thisdialect}%
+ \nonisopkgmap)}}%
+ }%
+ \ifnum\tmpctr>1
+ \tmpctr = 0\relax
+ \appto\nonisopkgoptstab{\\}%
+ \else
+ \appto\nonisopkgoptstab{&}%
+ \fi
+}
+
+\appto\nonisopkgoptstab{\end{longtable}}
+
+\tmpctr=0\relax
+
+\@for\thisdialect:=\rootlangopts\do{%
+ \advance\tmpctr by 1\relax
+ \eappto\rootlangoptstab{\noexpand\pkgoptfmt{\thisdialect}}%
+ \TrackLangIfHasKnownCountry{\thisdialect}%
+ {%
+ \appto\rootlangoptstab{\fnregion}%
+ }%
+ {}%
+ {%locally track this language to pick up information
+ \TrackPredefinedDialect\thisdialect
+ \xappto\rootlangoptstab{\space
+ {\noexpand\small(\noexpand\texttt{\GetTrackedLanguageTag\thisdialect})}}%
+ }%
+ \ifnum\tmpctr>2
+ \tmpctr = 0\relax
+ \appto\rootlangoptstab{\\}%
+ \else
+ \appto\rootlangoptstab{&}%
+ \fi
+}
+
+\appto\rootlangoptstab{\end{longtable}}
+
+\makeatother
+
+\newcommand*{\refoptstables}{tables~\ref{tab:isoopts}, \ref{tab:rootlangopts}
+and~\ref{tab:nonisoopts}}
+
+\begin{document}
+\DocInput{tracklang.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+%\MakeShortVerb{"}
+%
+%\title{tracklang v1.3.7:
+%tracking language options}
+%\author{Nicola L. C. Talbot\\\url{http://www.dickimaw-books.com/}}
+%
+%\date{2019-08-31}
+%\maketitle
+%
+%\begin{abstract}
+%The \styfmt{tracklang} package is provided for package developers
+%who want a simple interface to find out which languages the user has
+%requested through packages such as \sty{babel} and
+%\sty{polyglossia}. \emph{This package doesn't provide any
+%translations.}
+%Its purpose is simply to track which languages have been requested by the
+%user. Generic \TeX\ code is in \texttt{tracklang.tex} for
+%non-\LaTeX\ users.
+%
+%If the shell escape is enabled or \ics{directlua} is available,
+%this package may also be used to query the \envvar{LC\_ALL}
+%or \envvar{LANG} environment variable (see
+%\sectionref{sec:langsty}). Windows users, who don't have the locale
+%stored in environment variables, can use \app{texosquery}
+%in combination with \styfmt{tracklang}. (Similarly if \envvar{LC\_ALL}
+%or \envvar{LANG} don't contain sufficient information.) In order to
+%use \app{texosquery} through the restricted shell escape, you must
+%have at least Java~8 and set up \texttt{texosquery.cfg}
+%appropriately. (See the \app{texosquery} manual for further details.)
+%\end{abstract}
+%
+%The fundamental aim of this generic package is to be able to
+%effectively say:
+%\begin{quote}
+%The user (that is, the \emph{document} author) wants to use
+%dialects \texttt{xx-XX}, \texttt{yy-YY-Scrp}, etc in their
+%document. Any packages used by their document that provide
+%multilingual or region-dependent support should do whatever is
+%required to activate the settings for those languages and regions
+%(or warn the user that there's no support).
+%\end{quote}
+%Naturally, this is only of use if the locale-sensitive packages use
+%\styfmt{tracklang} to pick up this information, which is entirely up
+%to the package authors, but at the moment there's no standard method
+%for packages to detect the required language and region. The aim of
+%\styfmt{tracklang} is to provide that method.
+%
+%Related article: \qt{Localisation of \TeX\ documents:
+%\styfmt{tracklang}.} TUGBoat, Volume~37 (2016), No.~3
+%(\url{http://www.tug.org/TUGboat/tb37-3/tb117talbot.pdf}).
+%
+%\clearpage
+%\tableofcontents
+%\clearpage\phantomsection
+%\pdfbookmark{Tables}{lot}%
+%\listoftables
+%
+%\chapter{Introduction}
+%\label{sec:intro}
+%
+%When I'm developing a package that provides multilingual support
+%(for example, \styfmt{glossaries}) it's cumbersome trying to work out
+%if the user has requested translations for fixed text. This usually
+%involves checking if \sty{babel} or \sty{ngerman} or
+%\sty{translator} or \sty{polyglossia} has been loaded and, if so,
+%what language settings have been used. The result can be a tangled
+%mass of conditional code. The alternative is to tell users to add
+%the language as a~document class option, which they may or may not
+%want to do, or to tell them to supply the language settings to every
+%package they load that provides multilingual support, which users
+%are even less likely to want to do.
+%
+%The \styfmt{tracklang} package tries to neaten this up by working out
+%as much of this information as possible for you and providing a
+%command that iterates through the loaded languages. This way, you
+%can just iterate through the list of tracked languages and, for each
+%language, either define the translations or warn the user that
+%there's no translation for that language.
+%
+%This package works best with \sty{ngerman} or with recent versions
+%of \sty{babel} or when the language options are specified
+%in the document class option list. It works fairly well with
+%\sty{translator} but will additionally assume the root language was
+%also requested when a dialect is specified. So, for example,
+%\begin{verbatim}
+%\usepackage[british]{translator}
+%\usepackage{tracklang}
+%\end{verbatim}
+%is equivalent to
+%\begin{verbatim}
+%\usepackage[british]{translator}
+%\usepackage[english,british]{tracklang}
+%\end{verbatim}
+%This means that \ics{ForEachTrackedDialect} will iterate
+%through the list \qt{english,british} instead of just
+%\qt{british}, which can result in some redundancy.
+%
+%Unfortunately I can't work out how to pick up the language variant
+%or script from \sty{polyglossia}, so only the root languages are detected,
+%which is suboptimal but at least provides some information.
+%(\sty{polyglossia} now provides \cs{xpg@loaded}, which
+%\sty{tracklang} uses to track the root languages, but the language variant
+%command \cs{xpg@vloaded} only seems to be set when the language
+%changes, which doesn't occur until the start of the \env{document}
+%environment.)
+%
+%If the \sty{ngerman} package has been loaded, \styfmt{tracklang}
+%effectively does
+%\begin{verbatim}
+%\TrackPredefinedDialect{ngerman}
+%\end{verbatim}
+%Similarly, if the \sty{german} package has been loaded,
+%\styfmt{tracklang} effectively does
+%\begin{verbatim}
+%\TrackPredefinedDialect{german}
+%\end{verbatim}
+%
+%If any document class or package options are passed to
+%\styfmt{tracklang}, then \styfmt{tracklang} won't bother checking
+%for \sty{babel}, \sty{translator}, \sty{ngerman}, \sty{german} or
+%\sty{polyglossia}. So, if the above example is changed to:
+%\begin{verbatim}
+%\documentclass[british]{article}
+%\usepackage{translator}
+%\usepackage{tracklang}
+%\end{verbatim}
+%then the dialect list will just consist of \qt{british} rather than
+%\qt{english,british}. This does, however, mean that if the user mixes
+%class and package options, only the class options will be detected.
+%For example:
+%\begin{verbatim}
+%\documentclass[british]{article}
+%\usepackage[french]{babel}
+%\usepackage{tracklang}
+%\end{verbatim}
+%In this case, only the \qt{british} option will be detected. The user
+%can therefore use the document class option (or \styfmt{tracklang}
+%package option) to override the dialect and set the country code
+%(where provided). For example:
+%\begin{verbatim}
+%\documentclass[es-MX]{article}
+%\usepackage[spanish]{babel}
+%\usepackage{tracklang}
+%\end{verbatim}
+%This sets the dialect to \qt{mexicanspanish} and the root language to
+%\qt{spanish}.
+%
+%Predefined dialects are listed in \refoptstables. These may be
+%passed in the document class options or
+%used in \ics{TrackPredefinedDialect}, as illustrated above.
+%
+%\sectionref{sec:summary} provides brief examples of use for those
+%who want a general overview before reading the more detailed
+%sections.
+%\sectionref{sec:generic} describes generic commands for
+%identifying the document languages.
+%\sectionref{sec:user} is for package writers who want to
+%add multilingual support to their package and need to know which
+%settings the user has requested through language packages like
+%\sty{babel}. \sectionref{sec:langsty} is for
+%developers of language definition packages who want to help other
+%package writers to detect what languages have been requested.
+%
+%\isopkgoptstab
+%
+%\clearpage
+%
+%\rootlangoptstab
+%
+%\clearpage
+%
+%\nonisopkgoptstab
+%
+%\chapter{Summary of Use}
+%\label{sec:summary}
+%
+%There are three levels of use:
+%\begin{enumerate}
+%\item document level (code used by document authors);
+%\item locale-sensitive package level
+%(code for package authors who need to
+%know what languages or locale the document is
+%using, such as \styfmt{glossaries} to translate commands like
+%\cs{descriptionname} or \styfmt{datetime2} to provide localised
+%formats or time zone information);
+%\item language set-up level (code for packages that set up
+%the document languages, such as \sty{babel} or \sty{polyglossia}).
+%\end{enumerate}
+%
+%\section{Document Level}
+%\label{sec:summary-doc}
+%
+%\subsection{Generic \texorpdfstring{\TeX}{TeX}}
+%Unix user wants the locale information picked up from the
+%locale environment variable:
+%\begin{verbatim}
+%\input tracklang % v1.3
+%\TrackLangFromEnv
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%
+%Windows user wants the locale information picked up from the
+%operating system:
+%\begin{verbatim}
+%\input texosquery
+%\input tracklang %v1.3
+%\TrackLangFromEnv
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%Or (\sty{texosquery} v1.2 currently pending)
+%\begin{verbatim}
+%\input texosquery % v1.2
+%\input tracklang % v1.3
+%
+%\TeXOSQueryLangTag{\langtag}
+%\TrackLanguageTag{\langtag}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%Anticipate the release of \styfmt{texosquery} v1.2:
+%\begin{verbatim}
+%\input texosquery
+%\input tracklang % v1.3
+%
+%\ifx\TeXOSQueryLangTag\undefined
+% \TrackLangFromEnv
+%\else
+% \TeXOSQueryLangTag{\langtag}
+% \TrackLanguageTag{\langtag}
+%\fi
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%
+%User is writing in Italy in Armenian with a Latin
+%script and the arevela variant:
+%\begin{verbatim}
+%\input tracklang % v1.3
+%\TrackLanguageTag{hy-Latn-IT-arevela}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%
+%User is writing in English in the UK:
+%\begin{verbatim}
+%\input tracklang
+%\TrackPredefinedDialect{british}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%
+%Find out information about the current language (supplied
+%in \cs{languagename}):
+%\begin{verbatim}
+%\SetCurrentTrackedDialect{\languagename}
+%Dialect: \CurrentTrackedDialect.
+%Language: \CurrentTrackedLanguage.
+%ISO Code: \CurrentTrackedIsoCode.
+%Region: \CurrentTrackedRegion.
+%Modifier: \CurrentTrackedDialectModifier.
+%Variant: \CurrentTrackedDialectVariant.
+%Script: \CurrentTrackedDialectScript.
+%Sub-Lang: \CurrentTrackedDialectSubLang.
+%Additional: \CurrentTrackedDialectAdditional.
+%Language Tag: \CurrentTrackedLanguageTag.
+%\end{verbatim}
+%Additional information about the script can be obtained by
+%also loading \sty{tracklang-scripts}:
+%\begin{verbatim}
+%\input tracklang-scripts
+%\end{verbatim}
+%The name, numeric code and direction can now be obtained:
+%\begin{verbatim}
+%Name: \TrackLangScriptAlphaToName{\CurrentTrackedDialectScript}.
+%Numeric: \TrackLangScriptAlphaToNumeric{\CurrentTrackedDialectScript}.
+%Dir: \TrackLangScriptAlphaToDir{\CurrentTrackedDialectScript}.
+%\end{verbatim}
+%Test for a specific script:
+%\begin{verbatim}
+%Latin?
+%\ifx\CurrentTrackedDialectScript\TrackLangScriptLatn
+% Yes
+%\else
+% No
+%\fi
+%\end{verbatim}
+%
+%\subsection{\texorpdfstring{\LaTeX}{LaTeX}}
+%
+%For \sty{babel} users where the supplied \sty{babel} dialect
+%label is sufficient, there's no need to do anything special:
+%\begin{verbatim}
+%\documentclass[british,canadien]{article}
+%\usepackage[T1]{fontenc}
+%\usepackage{babel}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%If the region is important but there's no \sty{babel} dialect
+%that represents it, there are several options.
+%
+%Use the class options recognised by \styfmt{tracklang}
+%and the root language labels when loading \sty{babel}:
+%\begin{verbatim}
+%\documentclass[en-IE,ga-IE]{article}
+%\usepackage[english,irish]{babel}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%
+%This method is needed for \sty{polyglossia} where the regional
+%information is required. For example
+%\begin{verbatim}
+%\documentclass[en-GB]{article}
+%\usepackage{polyglossia}
+%\setmainlanguage[variant=uk]{english}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%
+%Another method with \sty{babel} is to
+%use \cs{TrackLanguageTag} and map the new dialect label to
+%\sty{babel}'s nearest matching label:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage{tracklang}% v1.3
+%\TrackLanguageTag{en-MT}
+%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{UKenglish}
+%
+%\usepackage[UKenglish]{babel}
+%% load packages that use tracklang for localisation
+%\end{verbatim}
+%This ensures that the \cs{captionsUKenglish} hook is detected
+%by the localisation packages. This mapping isn't needed
+%for \sty{polyglossia} as the caption hooks use the root language
+%label. This mapping also isn't needed if \texttt{british} is used
+%instead of \texttt{UKenglish} since the \pkgopt{en-MT}
+%(\pkgopt{maltaenglish})
+%predefined dialect automatically sets up a mapping to
+%\texttt{british}. (The default mappings are shown in
+%\tableref{tab:nonisoopts}.)
+%
+%\section{Locale-Sensitive Packages}
+%\label{sec:summary-localepkg}
+%
+%Let's suppose you are developing a package called
+%\texttt{mypackage.sty} or \texttt{mypackage.tex} and you want
+%to find out what languages the document author has requested.
+%
+%Generic use:
+%\begin{verbatim}
+%\input tracklang
+%\end{verbatim}
+%(Most of the commands used in this section require at least
+%\styfmt{tracklang} version 1.3.)
+%Note that \texttt{tracklang.tex} has a check to determine if
+%it's already been loaded, so you don't need to worry about that.
+%
+%\LaTeX\ use:
+%\begin{verbatim}
+%\RequirePackage{tracklang}[2016/10/07]% at least v1.3
+%\end{verbatim}
+%This will picked up any language options supplied in the document
+%class options and will also detect if \sty{babel} or
+%\sty{polyglossia} have been loaded.
+%
+%(\LaTeX) If you want to allow the user to set the locale in the
+%package options:
+%\begin{verbatim}
+%\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+%\end{verbatim}
+%This means the user can do, say,
+%\begin{verbatim}
+%\usepackage[hy-Latn-IT-arevela]{mypackage}
+%\end{verbatim}
+%The rest of the example package in this section uses generic code.
+%
+%If you want to fetch the locale information from the operating
+%system when the user hasn't requested a language:
+%\begin{verbatim}
+%\AnyTrackedLanguages
+%{}
+%{% fetch locale information from the operating system
+% \ifx\TeXOSQueryLangTag\undefined
+% % texosquery v1.2 not available
+% \TrackLangFromEnv
+% \else
+% % texosquery v1.2 available
+% \TeXOSQueryLangTag{\langtag}
+% \TrackLanguageTag{\langtag}
+% \fi
+%}
+%\end{verbatim}
+%
+%Set up the defaults if necessary:
+%\begin{verbatim}
+%\def\fooname{Foo}
+%\def\barname{Bar}
+%\end{verbatim}
+%
+%Now load the resource files:
+%\begin{verbatim}
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedDialect{\thisdialect}{%
+% \TrackLangRequireDialect{mypackage}{\thisdialect}%
+% }%
+%}
+%{}% no tracked languages, default already set up
+%\end{verbatim}
+%
+%Each resource file has the naming scheme \meta{prefix}\texttt{-}
+%\meta{tag}\texttt{.ldf}. In this example, the \meta{prefix} is
+%\texttt{mypackage}. The \meta{tag} may be the language or dialect label
+%(for example, \texttt{english} or \texttt{british}) or a combination of the ISO
+%language and region codes (for example, \texttt{en-GB} or
+%\texttt{en} or \texttt{GB}).
+%
+%The simplest scheme is to use the root language label (not the
+%dialect label) for the base language settings and use the ISO
+%codes for regional support.
+%
+%For example, the file \texttt{mypackage-english.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{english}[2016/10/06 v1.0]% identify this file
+%
+%\TrackLangAddToCaptions{%
+% \def\fooname{Foo}%
+% \def\barname{Bar}%
+%}
+%\end{verbatim}
+%This sets up appropriate the \cs{captions\ldots} hook (if it's
+%found). For other hooks, such as \cs{date\ldots}, use
+%\ics{TrackLangAddToHook}\marg{code}\marg{hook type} instead.
+%
+%Here's an example for a language with different writing systems.
+%The resource file for Serbian \texttt{mypackage-serbian.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{serbian}[2016/10/06 v1.0]% identify file
+%
+%\TrackLangRequestResource{serbian-\CurrentTrackedScript}
+%{}% file not found, do something sensible here
+%\end{verbatim}
+%The file \texttt{mypackage-serbian-Latn.ldf} sets up
+%the Latin script:
+%\begin{verbatim}
+%\TrackLangProvidesResource{serbian-Latn}[2016/10/06 v1.0]
+%
+%\TrackLangAddToCaptions{%
+% \def\fooname{...}% provide appropriate Latin translations
+% \def\barname{...}%
+%}
+%\end{verbatim}
+%The file \texttt{mypackage-serbian-Cyrl.ldf} sets up
+%the Cyrllic script:
+%\begin{verbatim}
+%\TrackLangProvidesResource{serbian-Cyrl}[2016/10/06 v1.0]
+%
+%\TrackLangAddToCaptions{%
+% \def\fooname{...}% provide appropriate Cyrllic translations
+% \def\barname{...}%
+%}
+%\end{verbatim}
+%
+%\section{Language Packages}
+%\label{sec:summary-langpkg}
+%
+%Let's suppose now you're the developer of a package that
+%sets up the language, hyphenation patterns and so on.
+%It would be really helpful to the locale-sensitive packages
+%in \sectionref{sec:summary-localepkg} to know what languages
+%the document author has requested. You can use the
+%\styfmt{tracklang} package to identify this information
+%by tracking the requested localisation, so that other packages
+%can have a consistent way of querying it.
+%
+%Generic use:
+%\begin{verbatim}
+%\input tracklang
+%\end{verbatim}
+%Alternative \LaTeX\ use:
+%\begin{verbatim}
+%\RequirePackage{tracklang}[2016/10/07] % v1.3
+%\end{verbatim}
+%Unlike \cs{input}, \cs{RequirePackage} will allow \styfmt{tracklang}
+%to pick up the document class options, but using \cs{RequirePackage}
+%will also trigger the tests for known language packages.
+%(If you want to find out if \styfmt{tracklang} has already been
+%loaded and locales have already been tracked, you can use the
+%same code as in the previous section.)
+%
+%When a user requests a particular language through your package,
+%the simplest way of letting \styfmt{tracklang} know about it
+%is to use \cs{TrackPredefinedDialect} or \cs{TrackLanguageTag}.
+%For example, if the user requests \texttt{british}, that's a
+%predefined dialect so you can just do:
+%\begin{verbatim}
+%\TrackPredefinedDialect{british}
+%\end{verbatim}
+%Alternatively
+%\begin{verbatim}
+%\TrackLanguageTag{en-GB}
+%\end{verbatim}
+%If your package uses caption hooks, then you can set up
+%a mapping between \styfmt{tracklang}'s internal dialect label
+%and your caption label. For example, let's suppose the
+%closest match to English used in Malta (\texttt{en-MT}) is the
+%dialect \texttt{UKenglish} (for example, the date format is
+%similar between GB and MT):
+%\begin{verbatim}
+%\TrackLanguageTag{en-MT}
+%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{UKenglish}
+%\def\captionsUKenglish{%
+% \def\contentsname{Contents}%
+% %...
+%}
+%\end{verbatim}
+%(The predefined \pkgopt{maltaenglish} option provided by
+%\styfmt{tracklang} automatically sets the mapping to
+%\texttt{british}, but the above method will change that mapping
+%to \texttt{UKenglish}.)
+%
+%This now means that \cs{TrackLangAddToCaptions} command used
+%at the end of \sectionref{sec:summary-localepkg} above can
+%find your caption hook. You don't need the map if your dialect
+%label is the same as \styfmt{tracklang}'s root language label
+%for that locale. For example:
+%\begin{verbatim}
+%\TrackLanguageTag{en-MT}
+%\def\captionsenglish{%
+% \def\contentsname{Contents}%
+% %...
+%}
+%\end{verbatim}
+%
+%When the user switches language through commands like
+%\ics{selectlanguage} it would be useful to also use
+%\ics{SetCurrentTrackedDialect}\marg{dialect} to make it easier
+%for the document author or locale-sensitive packages to pick
+%up the current locale. The \meta{dialect} argument may be
+%\styfmt{tracklang}'s internal dialect label or the dialect
+%label you assigned with \cs{SetTrackedDialectLabelMap}. It
+%may also be the root language label, in which case
+%\styfmt{tracklang} will search for the last dialect to be
+%tracked with that language. For example:
+%\begin{verbatim}
+%\def\selectlanguage#1{%
+% % set up hyphenation patterns etc
+% \SetCurrentTrackedDialect{#1}%
+%}
+%\end{verbatim}
+%See the example in \sectionref{sec:summary-doc}.
+%
+%\chapter{Generic Use}
+%\label{sec:generic}
+%
+%For plain \TeX\ you can input \texttt{tracklang.tex}:
+%\begin{verbatim}
+%\input tracklang
+%\end{verbatim}
+%or for \TeX\ formats that have an argument form for \ics{input}:
+%\begin{verbatim}
+%\input{tracklang}
+%\end{verbatim}
+%As from version 1.3, you don't need to change the category
+%code of \texttt{@} before loading \texttt{tracklang.tex}
+%as it will automatically be changed to 11 and switched
+%back at the end (if required).
+%
+%The \LaTeX\ package \texttt{tracklang.sty}
+%inputs the generic \TeX\ code in \texttt{tracklang.tex}, but before
+%it does so it defines
+%\begin{definition}
+%\cs{@tracklang@declareoption}\marg{name}
+%\end{definition}
+%to
+%\begin{definition}
+%\cs{DeclareOption}\marg{name}\{\cs{TrackPredefinedDialect}\marg{name}\}
+%\end{definition}
+%
+%This means that all the predefined languages and dialects
+%(\refoptstables) automatically become package options, so
+%the \styfmt{tracklang} package can pick up document class
+%options and add them to \styfmt{tracklang}'s internal list of tracked
+%document languages.
+%
+%If you're not using \LaTeX, this option isn't available
+%(although you could redefine the internal command
+%\cs{@tracklang@declareoption}
+%to use something analogous to \cs{DeclareOption}).
+%Instead, the document languages need
+%to be explicitly identified (using any of the following commands)
+%so that \styfmt{tracklang} knows about them.
+%
+%\begin{definition}[\DescribeMacro\TrackPredefinedDialect]
+%\ics{TrackPredefinedDialect}\marg{dialect label}
+%\end{definition}
+%This will add the predefined dialect and its associated ISO codes to the list
+%of tracked document languages. The \meta{dialect label} may be any
+%of those listed in \refoptstables.
+%(See also \sectionref{sec:predefinedlang} and \sectionref{sec:predefined}.)
+%
+%For example:
+%\begin{verbatim}
+%\input tracklang
+%\TrackPredefinedDialect{british}
+%\end{verbatim}
+%is the Plain \TeX\ alternative to
+%\begin{verbatim}
+%\documentclass[british]{article}
+%\usepackage{tracklang}
+%\end{verbatim}
+%
+%Note that it's impractical to define every possible language
+%and region combination as it would significantly slow the
+%time taken to load \styfmt{tracklang} so, after version~1.3,
+%I don't intend adding any new predefined dialects. As from version
+%1.3, if you want to track a dialect that's not predefined by
+%\styfmt{tracklang}, then you can use:
+%\begin{definition}[\DescribeMacro\TrackLocale]
+%\cs{TrackLocale}\marg{locale}
+%\end{definition}
+%If \meta{locale} is a recognised dialect, this is equivalent to
+%using \cs{TrackPredefinedDialect}, otherwise \meta{locale}
+%needs to be in one the following formats:
+%\begin{itemize}
+%\item \meta{ISO lang}
+%\item \meta{ISO lang}\texttt{@}\meta{modifier}
+%\item \meta{ISO lang}\texttt{-}\meta{ISO country}
+%\item \meta{ISO lang}\texttt{-}\meta{ISO country}\texttt{@}\meta{modifier}
+%\end{itemize}
+%where \meta{ISO lang} is the ISO~639-1 or 639-2 code identifying
+%the language (lower case), \meta{ISO country} is the 3166-1
+%ISO code identifying the territory (upper case) and
+%\meta{modifier} is the modifier or variant. The hyphen may be
+%replaced by an underscore character. Code set information in the
+%form \texttt{.}\meta{codeset} may optionally appear before the
+%modifier. For example, \texttt{de-DE.utf8@new} (modifier is
+%\texttt{new}) or \texttt{en-GB.utf8} (modifier is missing).
+%The codeset will be ignored if present, but it won't interfere
+%with the parsing.
+%
+%For example:
+%\begin{verbatim}
+%\TrackLocale{de-NA@new}
+%\end{verbatim}
+%indicates German in Namibia using the new spelling.
+%
+%\begin{important}
+%If a language has different \qt{T} and \qt{B} ISO~639-2 codes, then
+%the \qt{T} form should be used. (So for the above example,
+%\texttt{deu} may be used instead of \texttt{de}, but \texttt{ger}
+%won't be recognised.)
+%\end{important}
+%
+%Alternatively, you can use
+%\begin{definition}[\DescribeMacro\TrackLanguageTag]
+%\cs{TrackLanguageTag}\marg{tag}
+%\end{definition}
+%where \meta{tag} is a regular, well-formed language tag or a recognised dialect
+%label. (Irregular grandfather tags aren't recognised.)
+%This command will fully expand \meta{tag}.
+%A warning is issued if the tag is empty.
+%For example:
+%\begin{verbatim}
+%\TrackLanguageTag{hy-Latn-IT-arevela}
+%\end{verbatim}
+%
+%If \meta{tag} contains a sub-language tag, this will be set
+%as the 639-3 code for the \emph{dialect} label. Note that this is
+%different to the root language codes which are set using the
+%language label. For example
+%\begin{verbatim}
+%\TrackLanguageTag{zh-cmn-Hans-CN}
+%\end{verbatim}
+%creates a new dialect with the label \texttt{zhcmnHansCN}.
+%The root language \texttt{chinese} has the ISO 639-1 code
+%\texttt{zh} and the dialect \texttt{zhcmnHansCN} has the
+%ISO 639-3 code \texttt{cmn}.
+%\begin{verbatim}
+%ISO 639-1: \TrackedIsoCodeFromLanguage{639-1}{chinese}.
+%ISO 639-3: \TrackedIsoCodeFromLanguage{639-3}{zhcmnHansCN}.
+%\end{verbatim}
+%
+%Version 1.2 (currently pending) of
+%\sty{texosquery} will have a new command \ics{TeXOSQueryLangTag},
+%which may be used to fetch the operating system's regional
+%information as a language tag. These commands can be used as
+%follows:
+%\begin{verbatim}
+%\input tracklang % v1.3
+%\input texosquery % v1.2
+%
+%\TeXOSQueryLangTag{\langtag}
+%\TrackLanguageTag{\langtag}
+%\end{verbatim}
+%(If the shell escape is disabled, \cs{langtag} will be empty, which
+%will trigger a~warning but no errors.)
+%
+%Some of the predefined root language options listed
+%in \tableref{tab:rootlangopts} have an associated region
+%(denoted by \fnregion).
+%If \cs{TrackLocale} is used with just the language ISO code,
+%no region is tracked for that language. For example
+%\begin{verbatim}
+%\TrackLocale{manx}
+%\end{verbatim}
+%will track the \qt{IM} ISO~3166-1 code but
+%\begin{verbatim}
+%\TrackLocale{gv}
+%\end{verbatim}
+%won't track the region.
+%Similarly for \cs{TrackLanguageTag}.
+%
+%(New to version 1.3.)
+%There's a similar command to \cs{TrackLocale} that doesn't take an argument:
+%\begin{definition}[\DescribeMacro\TrackLangFromEnv]
+%\cs{TrackLangFromEnv}
+%\end{definition}
+%If the shell escape has been enabled or
+%\ics{directlua} is available, this will try to get the language
+%information from the system environment variables
+%\envvar{LC\_ALL} or \envvar{LANG}
+%and, if successful, track that.
+%
+%Since \styfmt{tracklang} is neither able to look up the POSIX locale
+%tables nor interpret file locales, if the result is \texttt{C} or
+%\texttt{POSIX} or starts with a forward slash \texttt{/} then
+%the locale value is treated as empty.
+%
+%\begin{important}
+%Not all operating systems use environment variables for
+%the system locale information. For example, Windows stores the
+%locale information in the registry. In which case, consider
+%using \styfmt{texosquery}.
+%\end{important}
+%
+%If the operating system locale can't be obtained from environment variables, then
+%\styfmt{tracklang} will use \ics{TeXOSQueryLocale} as a fallback if
+%\styfmt{texosquery} has been loaded. Since \sty{texosquery} requires
+%both the shell escape and the Java runtime environment,
+%\styfmt{tracklang} doesn't automatically load it.
+%
+%Plain \TeX\ example:
+%\begin{verbatim}
+%\input texosquery
+%\input tracklang
+%\TrackLangFromEnv
+%\end{verbatim}
+%with \texttt{etex -{}-shell-escape }\meta{filename}
+%
+%\LaTeX\ example:
+%\begin{verbatim}
+%\usepackage{texosquery}
+%\usepackage{tracklang}
+%\TrackLangFromEnv
+%\end{verbatim}
+%with \texttt{latex -{}-shell-escape }\meta{filename}
+%
+%If the locale can't be determined, there will be warning messages.
+%These can be suppressed using
+%\begin{definition}[\DescribeMacro\TrackLangShowWarningsfalse]
+%\cs{TrackLangShowWarningsfalse}
+%\end{definition}
+%or switched back on again using
+%\begin{definition}[\DescribeMacro\TrackLangShowWarningstrue]
+%\cs{TrackLangShowWarningstrue}
+%\end{definition}
+%
+%For example, I have the environment variable \envvar{LANG} set to
+%\texttt{en\_GB.utf8} on my Linux system so instead of
+%\begin{verbatim}
+%\TrackPredefinedDialect{british}
+%\end{verbatim}
+%I can use
+%\begin{verbatim}
+%\TrackLangFromEnv
+%\end{verbatim}
+%
+%With \LaTeX\ documents I can do
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage{tracklang}
+%\TrackLangFromEnv
+%\end{verbatim}
+%However, this only helps subsequently loaded packages that
+%use \styfmt{tracklang} to determine the required regional
+%settings. For example:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage{tracklang}
+%\TrackLangFromEnv
+%\usepackage[useregional]{datetime2}
+%\end{verbatim}
+%In my case, with \envvar{LANG} set to \texttt{en\_GB.utf8} and
+%shell escape enabled, this automatically switches on the
+%\texttt{en-GB} date style.
+%Naturally this doesn't help locale-sensitive packages that don't use
+%\styfmt{tracklang}.
+%
+%The \cs{TrackLangFromEnv} command also incidentally sets
+%\begin{definition}[\DescribeMacro\TrackLangEnv]
+%\cs{TrackLangEnv}
+%\end{definition}
+%to the value of the environment variable or empty if the
+%query was unsuccessful (for example, the shell escape is
+%unavailable).
+%
+%If \cs{TrackLangEnv} is already defined before
+%\cs{TrackLangFromEnv} is used, then the environment variable
+%won't be queried and the value of \cs{TrackLangEnv} will be
+%parsed instead.
+%
+%\begin{important}
+%The parser which splits the locale string into
+%its component parts first tries splitting on the underscore
+%\texttt{\_} with its usual category code~8, then tries splitting
+%on a hyphen \texttt{-} with category code~12, and then tries
+%splitting on the underscore \texttt{\_} with category code~12.
+%\end{important}
+%
+%For example:
+%\begin{verbatim}
+%\def\TrackLangEnv{en-GB}
+%\TrackLangFromEnv
+%\end{verbatim}
+%This doesn't perform a shell escape since \cs{TrackLangEnv}
+%is already defined. In this case, you may just as well use
+%\begin{verbatim}
+%\TrackLocale{en-GB}
+%\end{verbatim}
+%(unless you happen to additionally require the component
+%commands that are set by \cs{TrackLangFromEnv}, see below.)
+%
+%If the shell escape is unavailable
+%(for example, your \TeX\ installation prohibits it), you
+%can set this value when you invoke \TeX. For example,
+%if the document file is called \texttt{myDoc.tex} (and it's
+%in Plain \TeX):
+%\begin{verbatim}
+%tex "\\def\TrackLangEnv{$LANG}\\input myDoc"
+%\end{verbatim}
+%
+%The \cs{TrackLangFromEnv} command also happens to store the
+%component parts of the environment variable value in the
+%following commands. (These aren't provided by
+%\cs{TrackLocale}.)
+%
+%The language code is stored in:
+%\begin{definition}[\DescribeMacro\TrackLangEnvLang]
+%\cs{TrackLangEnvLang}
+%\end{definition}
+%
+%The territory (if present) is stored in:
+%\begin{definition}[\DescribeMacro\TrackLangEnvTerritory]
+%\cs{TrackLangEnvTerritory}
+%\end{definition}
+%(Defined to empty if not present.)
+%
+%The codeset (if present) is stored in:
+%\begin{definition}[\DescribeMacro\TrackLangEnvCodeSet]
+%\cs{TrackLangEnvCodeSet}
+%\end{definition}
+%(Defined to empty if not present.)
+%
+%The modifier (if present) is stored in:
+%\begin{definition}[\DescribeMacro\TrackLangEnvModifier]
+%\cs{TrackLangEnvModifier}
+%\end{definition}
+%(Defined to empty if not present.)
+%
+%If you want to query the language environment, but don't
+%want to track the result, you can just use:
+%\begin{definition}[\DescribeMacro\TrackLangQueryEnv]
+%\cs{TrackLangQueryEnv}
+%\end{definition}
+%This only tries to fetch the value of the
+%language environment variable (and use \sty{texosquery} as
+%a fallback, if it has been loaded). It doesn't try to parse the
+%result. The result is stored in \cs{TrackLangEnv} (empty if
+%unsuccessful). Unlike \cs{TrackLangFromEnv}, this doesn't check if
+%\cs{TrackLangEnv} already exists. A warning will occur if the shell
+%escape is unavailable. For systems that store the locale information in
+%environment variables, this is more efficient than using
+%\sty{texosquery}'s \cs{TeXOSQueryLocale} command (which is what's
+%used as the fallback).
+%
+%The above queries \envvar{LC\_ALL} and, if that is unsuccessful,
+%then queries \envvar{LANG} (before optionally falling back on
+%\sty{texosquery}). If you want another environment
+%variable tried after \envvar{LC\_ALL} and before \envvar{LANG},
+%you can instead use:
+%\begin{definition}[\DescribeMacro\TrackLangQueryOtherEnv]
+%\cs{TrackLangQueryOtherEnv}\marg{name}
+%\end{definition}
+%For example, to also query \envvar{LC\_MONETARY}:
+%\begin{verbatim}
+%\TrackLangQueryOtherEnv{LC_MONETARY}
+%\end{verbatim}
+%
+%Since this sets \cs{TrackLangEnv}, you can use it before
+%\cs{TrackLangFromEnv}. For example:
+%\begin{verbatim}
+%\TrackLangQueryOtherEnv{LC_MONETARY}
+%\TrackLangFromEnv
+%\end{verbatim}
+%Remember that if you only want to do the shell escape if
+%\cs{TrackLangEnv} hasn't already been defined, you can test for this
+%first:
+%\begin{verbatim}
+%\ifx\TrackLangEnv\undefined
+% \TrackLangQueryOtherEnv{LC_MONETARY}
+%\fi
+%\TrackLangFromEnv
+%\end{verbatim}
+%
+%It's also possible to just parse the value of \cs{TrackLangEnv}
+%without tracking the result using:
+%\begin{definition}[\DescribeMacro\TrackLangParseFromEnv]
+%\cs{TrackLangParseFromEnv}
+%\end{definition}
+%This is like \cs{TrackLangFromEnv} but assumes that
+%\cs{TrackLangEnv} has already been set and doesn't track the
+%result. The component parts are stored as for \cs{TrackLangFromEnv}.
+%
+%Example (Plain \TeX):
+%\begin{verbatim}
+%\input tracklang
+%
+%\def\TrackLangEnv{fr-BE.utf8@euro}
+%
+%\TrackLangParseFromEnv
+%
+%Language: \TrackLangEnvLang.
+%Territory: \TrackLangEnvTerritory.
+%Codeset: \TrackLangEnvCodeSet.
+%Modifier: \TrackLangEnvModifier.
+%Any tracked languages? \AnyTrackedLanguages{Yes}{No}.
+%
+%\end{verbatim}
+%This produces:
+%
+%\medskip
+%
+%Language: fr. Territory: BE. Codeset: utf8. Modifier: euro.
+%Any tracked languages? No.
+%
+%\medskip
+%
+%Compare this with:
+%\begin{verbatim}
+%\input tracklang
+%
+%\def\TrackLangEnv{fr-BE.utf8@euro}
+%
+%\TrackLangFromEnv
+%
+%Language: \TrackLangEnvLang.
+%Territory: \TrackLangEnvTerritory.
+%Codeset: \TrackLangEnvCodeSet.
+%Modifier: \TrackLangEnvModifier.
+%Any tracked languages? \AnyTrackedLanguages{Yes}{No}.
+%Tracked dialect(s):%
+%\ForEachTrackedDialect{\thisdialect}{\space\thisdialect}.
+%\end{verbatim}
+%This produces:
+%
+%\medskip
+%
+%Language: fr. Territory: BE. Codeset: utf8. Modifier: euro.
+%Any tracked languages? Yes.
+%Tracked dialect(s): belgique.
+%
+%\medskip
+%
+%If \cs{TrackLangFromEnv} doesn't recognise the given language and
+%territory combination, it will define a new dialect and add that.
+%
+%For example, \styfmt{tracklang} doesn't recognise \texttt{en-BE}, so
+%the sample document below defines a new dialect labelled
+%\texttt{enBEeuro}:
+%\begin{verbatim}
+%\input tracklang
+%
+%\def\TrackLangEnv{en-BE.utf8@euro}
+%
+%\TrackLangFromEnv
+%
+%Language: \TrackLangEnvLang.
+%Territory: \TrackLangEnvTerritory.
+%Codeset: \TrackLangEnvCodeSet.
+%Modifier: \TrackLangEnvModifier.
+%Any tracked languages? \AnyTrackedLanguages{Yes}{No}.
+%Tracked dialect(s):%
+%\ForEachTrackedDialect{\thisdialect}{\space\thisdialect}.
+%\end{verbatim}
+%This now produces:
+%\medskip
+%
+%Language: en. Territory: BE. Codeset: utf8. Modifier: euro.
+%Any tracked languages? Yes.
+%Tracked dialect(s): enBEeuro.
+%
+%\chapter{Detecting the User's Requested Languages}
+%\label{sec:user}
+%
+%The \styfmt{tracklang} package tries to track the loaded languages and
+%the option names used to identify those languages. For want of a better
+%term, the language option names are referred to as dialects even if
+%they're only a synonym for the language rather than an actual
+%dialect. For example, if the user
+%has requested \texttt{british}, the \emph{root language} label is
+%\texttt{english} and the dialect is \texttt{british}, whereas if the
+%user requested \texttt{UKenglish}, the root language label is
+%\texttt{english} and the dialect is \texttt{UKenglish}. The
+%exceptions to this are the \styfmt{tracklang} package options that have been
+%specified in the form \meta{iso lang}-\meta{iso country} (listed
+%in \tableref{tab:rootlangopts}). For
+%example, the package option \texttt{en-GB} behaves as though the
+%user requested the package option \texttt{british}.
+%
+%If \cs{TrackLocale} or \cs{TrackLangFromEnv} are used and the locale
+%isn't recognised a new dialect is created with the label formed from
+%the ISO codes (and modifier, if present).
+%Similarly for \cs{TrackLanguageTag} a new
+%dialect is created with a label that's essentially the language tag
+%without the hyphen separators. For example,
+%\begin{verbatim}
+%\TrackLocale{xx-YY}
+%\end{verbatim}
+%will add a new dialect with the label \texttt{xxYY},
+%\begin{verbatim}
+%\TrackLocale{xx-YY@mod}
+%\end{verbatim}
+%will add a new dialect with the label \texttt{xxYYmod} and
+%\begin{verbatim}
+%\TrackLanguageTag{xx-YY-Latn}
+%\end{verbatim}
+%will add a new dialect with the label \texttt{xxYYLatn}.
+%
+%\begin{important}
+%If \cs{TrackLocale} or \cs{TrackLangFromEnv} find a modifier, the
+%value will be sanitized to allow it to be used as a label. If the
+%modifier is set explicitly using \cs{SetTrackedDialectModifier},
+%no sanitization is performed.
+%\end{important}
+%
+%In addition to the root language label and the dialect identifier,
+%many of the language options also have corresponding ISO codes. In
+%most cases there is an ISO~639-1 or an ISO~639-2 code (or both), and in some
+%cases there is an ISO~3166-1 code identifying the dialect region.
+%Where a language has both a \qt{T} and a \qt{B} ISO~639-2
+%code, the \qt{T} version is assumed.
+%
+%When the \styfmt{tracklang} \LaTeX\ package is loaded, it first attempts to find the
+%language options through the package options supplied to
+%\styfmt{tracklang}. This means that any languages that have been
+%supplied in the document class options should get identified
+%(provided that the document class has used the standard option
+%declaration mechanism). If no languages have been supplied in this
+%way, \styfmt{tracklang} then attempts to identify any \sty{babel}
+%language options and failing that it will try the \sty{translator}
+%language options. It will then check if \sty{ngerman} or
+%\sty{polyglossia} have been loaded.
+%
+%Each identified language and dialect is added to the \emph{tracked
+%language} and \emph{tracked dialect} lists. Note that the tracked
+%language and tracked dialect are labels rather than proper nouns.
+%If a~dialect label is identical to its root language label, the
+%label will appear in both lists.
+%
+%You can check whether or not any languages have been detected using:
+%\begin{definition}[\DescribeMacro\AnyTrackedLanguages]
+%\cs{AnyTrackedLanguages}\marg{true part}\marg{false part}
+%\end{definition}
+%This will do \meta{true part} if one or more languages have been
+%detected otherwise it will do \meta{false part}. (Each detected
+%dialect will automatically have the root language label added
+%to the tracked language list, if it's not already present.)
+%
+%If you want to find out if any of the tracked dialects
+%matches a particular language tag, you can use:
+%\begin{definition}[\DescribeMacro\GetTrackedDialectFromLanguageTag]
+%\ics{GetTrackedDialectFromLanguageTag}\marg{tag}\marg{cs}
+%\end{definition}
+%If successful, the supplied control sequence \meta{cs} is set to the
+%dialect label, otherwise \meta{cs} is set to empty. The test is for an exact
+%match on the root language, script, sub-language, variant and
+%region. The control sequence \meta{cs} will be empty if none of the
+%tracked dialects matches all five of those elements. (If the script
+%isn't given explicitly, the default for that language is assumed.)
+%In the event that \meta{cs} is empty, you can now (as from v1.3.6)
+%get the closest match with
+%\begin{definition}[\DescribeMacro\TrackedDialectClosestSubMatch]
+%\ics{TrackedDialectClosestSubMatch}
+%\end{definition}
+%(which is set by \cs{GetTrackedDialectFromLanguageTag}).
+%This will be empty if no tracked dialects match on the root
+%language or if there's a tracked dialect label that exactly matches
+%the label formed by concatenating the language code, sub-language,
+%script, region, modifier and variant.
+%
+%For example (Plain \TeX):
+%\begin{verbatim}
+%\input tracklang
+%\TrackLanguageTag{en-826}
+%Has en-GB-Latn been tracked?
+%\GetTrackedDialectFromLanguageTag{en-GB-Latn}{\thisdialect}%
+%\ifx\thisdialect\empty
+% No!
+%\else
+% Yes! Dialect label: \thisdialect.
+%\fi
+%\bye
+%\end{verbatim}
+%This matches because the territory code 826 is recognised as
+%equivalent to the code GB, and the default script for
+%\texttt{english} is \texttt{Latn}. In this case, the dialect
+%label is \texttt{british}. Note that this doesn't require
+%the use of \cs{TrackLanguageTag} to track the dialect.
+%It also works if the dialect has been tracked using other commands,
+%such as \cs{TrackLocale}.
+%
+%Here's an example that doesn't have an exact match, but does have a
+%partial match:
+%\begin{verbatim}
+%\input tracklang
+%\TrackLanguageTag{de-CH-1996}
+%Has de-DE-1996 been tracked?
+%\GetTrackedDialectFromLanguageTag{de-DE-1996}{\thisdialect}%
+%\ifx\thisdialect\empty
+% No!
+% \ifx\TrackedDialectClosestSubMatch\empty
+% No match on root language.
+% \else
+% Closest match: \TrackedDialectClosestSubMatch.
+% \fi
+%\else
+% Yes! Dialect label: \thisdialect.
+%\fi
+%\bye
+%\end{verbatim}
+%In this case the result is:
+%\begin{quote}
+%Has de-DE-1996 been tracked? No! Closest match: nswissgerman.
+%\end{quote}
+%
+%You can iterate through each tracked dialect using:
+%\begin{definition}[\DescribeMacro\ForEachTrackedDialect]
+%\cs{ForEachTrackedDialect}\marg{cs}\marg{code}
+%\end{definition}
+%At the start of each iteration, this sets the control sequence
+%\meta{cs} to the tracked dialect and does \meta{code}.
+%
+%You can iterate through each tracked language using:
+%\begin{definition}[\DescribeMacro\ForEachTrackedLanguage]
+%\cs{ForEachTrackedLanguage}\marg{cs}\marg{code}
+%\end{definition}
+%At the start of each iteration, this sets the control sequence \meta{cs} to the
+%tracked language and does \meta{code}.
+%
+%The above for-loops use the same internal mechanism as \LaTeX's
+%\cs{@for} loop. The provided control sequence \meta{cs} is updated at the
+%start of each iteration to the current element. The loop is
+%terminated when this control sequence is set to \cs{@nil}. This
+%special control sequence should never been used as it's just a
+%marker and isn't actually defined. If you get an error message
+%stating that \cs{@nil} is undefined, then it's most likely due to a
+%loop control sequence being used outside the loop. This can occur if
+%the loop contains code that isn't expanded until later. For example,
+%if the loop code includes \cs{AtBeginDocument}, you need to ensure
+%that the loop control sequence is expanded before being added to the
+%hook.
+%
+%You can test if a root language has been detected using:
+%\begin{definition}[\DescribeMacro\IfTrackedLanguage]
+%\cs{IfTrackedLanguage}\marg{label}\marg{true part}\marg{false part}
+%\end{definition}
+%where \meta{label} is the language label. If
+%true, this does \meta{true part} otherwise it does \meta{false
+%part}.
+%
+%You can test if a particular dialect has been detected using:
+%\begin{definition}[\DescribeMacro\IfTrackedDialect]
+%\cs{IfTrackedDialect}\marg{label}\marg{true part}\marg{false part}
+%\end{definition}
+%where \meta{label} is the dialect label. If the root language was explicitly specified, then it will
+%also be detected as a dialect.
+%
+%For example:
+%\begin{verbatim}
+%\documentclass[british,dutch]{article}
+%
+%\usepackage{tracklang}
+%
+%\begin{document}
+%``english'' \IfTrackedDialect{english}{has}{hasn't} been specified.
+%
+%``british'' \IfTrackedDialect{british}{has}{hasn't} been specified.
+%
+%``flemish'' \IfTrackedDialect{flemish}{has}{hasn't} been specified.
+%
+%``dutch'' \IfTrackedDialect{dutch}{has}{hasn't} been specified.
+%
+%``english'' or an English variant
+%\IfTrackedLanguage{english}{has}{hasn't} been specified.
+%
+%\end{document}
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%``english'' hasn't been specified.
+%
+%``british'' has been specified.
+%
+%``flemish'' hasn't been specified.
+%
+%``dutch'' has been specified.
+%
+%``english'' or an English variant has been specified.
+%\end{quote}
+%
+%You can find the root language label for a given tracked dialect
+%using:
+%\begin{definition}[\DescribeMacro\TrackedLanguageFromDialect]
+%\cs{TrackedLanguageFromDialect}\marg{dialect}
+%\end{definition}
+%If \meta{dialect} hasn't been defined this does nothing otherwise it
+%expands to the root language label.
+%
+%You can find the tracked dialects from a given root language
+%using:
+%\begin{definition}[\DescribeMacro\TrackedDialectsFromLanguage]
+%\cs{TrackedDialectsFromLanguage}\marg{root language label}
+%\end{definition}
+%This will expand to a~comma-separated list of dialect labels
+%if the root language label has been defined, otherwise it
+%does nothing.
+%
+%
+%You can test if a language or dialect has a corresponding ISO code using:
+%\begin{definition}[\DescribeMacro\IfTrackedLanguageHasIsoCode]
+%\cs{IfTrackedLanguageHasIsoCode}\marg{code
+%type}\marg{label}\marg{true part}\marg{false part}
+%\end{definition}
+%where \meta{code type} is the type of ISO code (for example,
+%\texttt{639-1} for root languages or \texttt{3166-1} for regional
+%dialects), and \meta{label} is the language or dialect label.
+%Note that the \texttt{639-3} may be set for the dialect
+%rather than root language for sub-languages parsed using
+%\ics{TrackLanguageTag}.
+%
+%Alternatively, you can test if a particular ISO code has been
+%defined using:
+%\begin{definition}[\DescribeMacro\IfTrackedIsoCode]
+%\cs{IfTrackedIsoCode}\marg{code type}\marg{code}\marg{true
+%part}\marg{false part}
+%\end{definition}
+%where \meta{code type} is again the type of ISO code (for example,
+%\texttt{639-1} or \texttt{3166-1}), and \meta{code} is the
+%particular code (for example, \texttt{en} for ISO 639-1 or
+%\texttt{GB} for ISO 3166-1).
+%
+%You can fetch the language (or dialect) label associated with a
+%given ISO code using:
+%\begin{definition}[\DescribeMacro\TrackedLanguageFromIsoCode]
+%\cs{TrackedLanguageFromIsoCode}\marg{code type}\marg{code}
+%\end{definition}
+%This does nothing if the given \meta{code} for the given ISO
+%\meta{code type} has not been defined, otherwise it expands
+%a~comma-separated list of language or dialect labels.
+%
+%You can fetch the ISO code for a given code type using:
+%\begin{definition}[\DescribeMacro\TrackedIsoCodeFromLanguage]
+%\cs{TrackedIsoCodeFromLanguage}\marg{code type}\marg{label}
+%\end{definition}
+%where \meta{label} is the language or dialect label and \meta{code
+%type} is the ISO code type (for example, \texttt{639-1} or
+%\texttt{3166-1}). Unlike \ics{TrackedLanguageFromIsoCode}, this
+%command only expands to a single label rather than a~comma-separated
+%list.
+%
+%The above commands do nothing in the event of an unknown code or
+%code type,
+%so if you accidentally get the wrong code type, you won't get an error.
+%If you're unsure of the code type, you can use the following commands:
+%\begin{definition}[\DescribeMacro\TwoLetterIsoCountryCode]
+%\cs{TwoLetterIsoCountryCode}
+%\end{definition}
+%This expands to 3166-1 and is used for the two-letter country codes.
+%
+%\begin{definition}[\DescribeMacro\TwoLetterIsoLanguageCode]
+%\cs{TwoLetterIsoLanguageCode}
+%\end{definition}
+%This expands to 639-1 and is used for the two-letter root language codes.
+%
+%\begin{definition}[\DescribeMacro\ThreeLetterIsoLanguageCode]
+%\cs{ThreeLetterIsoLanguageCode}
+%\end{definition}
+%This expands to 639-2 and is used for the three-letter root language
+%codes.
+%
+%\begin{definition}[\DescribeMacro\ThreeLetterExtIsoLanguageCode]
+%\cs{ThreeLetterExtIsoLanguageCode}
+%\end{definition}
+%(New to v1.3.) This expands to 639-3. This code is only used for a root language if
+%there's no 639-1 or 639-2 code. It may also be used for a
+%dialect if a sub-language part has been set in the language
+%tag parsed by \cs{TrackLanguageTag}.
+%
+%The \cs{Get\ldots} commands below are designed to be expandable.
+%If the supplied \meta{dialect} is unrecognised they expand to empty.
+%Remember that the dialect must first be identified as a tracked
+%language for it to be recognised.
+%
+%As from v1.3, the language tag for a given dialect can be obtained
+%using:
+%\begin{definition}[\DescribeMacro\GetTrackedLanguageTag]
+%\cs{GetTrackedLanguageTag}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the label identifying the dialect.
+%Uses the \texttt{und} (undetermined) code for unknown languages.
+%
+%As from v1.3, each tracked dialect may also have an associated
+%modifier, which can be fetched using:
+%\begin{definition}[\DescribeMacro\GetTrackedDialectModifier]
+%\cs{GetTrackedDialectModifier}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the label identifying the dialect.
+%This value is typically obtained by parsing a POSIX locale identifier
+%with \cs{TrackLocale} or \cs{TrackLangFromEnv} but may be set explicitly.
+%(See \sectionref{sec:langsty} for setting this value. Likewise for
+%the following commands.)
+%
+%You can test if a dialect has an associated modifier using:
+%\begin{definition}[\DescribeMacro\IfHasTrackedDialectModifier]
+%\cs{IfHasTrackedDialectModifier}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If the dialect has an associated modifier this does \meta{true}
+%otherwise it does \meta{false}.
+%
+%For example:
+%\begin{verbatim}
+%\documentclass[british,francais,american,canadian,canadien,dutch]{article}
+%
+%\usepackage{tracklang}
+%
+%\begin{document}
+%
+%Languages: \ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
+%(ISO \TwoLetterIsoLanguageCode:
+%``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
+%
+%Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
+%(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
+% {ISO \TwoLetterIsoCountryCode:
+% ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
+% {no specific region};
+%root: \TrackedLanguageFromDialect{\ThisDialect}). }
+%
+%Language for ISO \TwoLetterIsoCountryCode\ ``GB'':
+%\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{GB}.
+%
+%Language for ISO \TwoLetterIsoCountryCode\ ``CA'':
+%\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{CA}.
+%
+%Country ISO \TwoLetterIsoCountryCode\ code for ``canadian'':
+%\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{canadian}.
+%
+%\end{document}
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%Languages: english (ISO 639-1: ``en''). french (ISO 639-1: ``fr'').
+%dutch (ISO 639-1: ``nl'').
+%
+%Dialects: american (ISO 3166-1: ``US''; root: english).
+%british (ISO 3166-1: ``GB''; root: english).
+%canadian (ISO 3166-1: ``CA''; root: english).
+%canadien (ISO 3166-1: ``CA''; root: french).
+%dutch (no specific region; root: dutch).
+%francais (no specific region; root: french).
+%
+%Language for ISO 3166-1 ``GB'': british.
+%
+%Language for ISO 3166-1 ``CA'': canadian,canadien.
+%
+%Country ISO 3166-1 code for ``canadian'': CA.
+%
+%\end{quote}
+%
+%As from v1.3, each tracked dialect may also have an associated
+%variant, which can be fetched using:
+%\begin{definition}[\DescribeMacro\GetTrackedDialectVariant]
+%\cs{GetTrackedDialectVariant}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the label identifying the dialect.
+%This value is typically obtained by parsing a language tag
+%with \cs{TrackLanguageTag} but may be set explicitly.
+%
+%You can test if a dialect has an associated variant using:
+%\begin{definition}[\DescribeMacro\IfHasTrackedDialectVariant]
+%\cs{IfHasTrackedDialectVariant}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%
+%As from v1.3, each tracked dialect may also have an associated
+%script, which can be fetched using:
+%\begin{definition}[\DescribeMacro\GetTrackedDialectScript]
+%\cs{GetTrackedDialectScript}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the label identifying the dialect.
+%
+%You can test if a dialect has an associated script using:
+%\begin{definition}[\DescribeMacro\IfHasTrackedDialectScript]
+%\cs{IfHasTrackedDialectScript}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If the dialect has an associated script this does \meta{true}
+%otherwise it does \meta{false}. This information is provided
+%for language packages that need to know what script is required,
+%but there's no guarantee that the script will actually be set
+%in the document. Similarly for all the other attributes described
+%here.
+%
+%Note that the script should be a recognised four-letter ISO 15924
+%code, such as \texttt{Latn} or \texttt{Cyrl}. If a~dialect
+%doesn't have an associated script then the default for the root
+%language should be assumed. For example, \qt{Latn} for English dialects or
+%\qt{Cyrl} for Russian dialects. (The default script for
+%known languages can be obtained using
+%\cs{TrackLangGetDefaultScript}, see
+%\sectionref{sec:code:knownlangs} for further details.
+%Most root languages have a default script, but there
+%are a few without one as it may depend on region, politics
+%or ideology.)
+%
+%There's a convenient expandable command for testing the script:
+%\begin{definition}
+%\cs{IfTrackedDialectIsScriptCs}\marg{dialect}\marg{cs}\marg{true}\marg{false}
+%\end{definition}
+%This tests if the given tracked dialect has an associated script and
+%compares the value with the replacement text of \meta{cs}.
+%If the dialect hasn't been explicitly assigned a script,
+%then test is performed against the default script for the root
+%language.
+%
+%The supplementary package \sty{tracklang-scripts} provides some
+%additional commands relating to writing systems, including commands
+%in the form \ics{TrackLangScript\meta{code}} where
+%\meta{code} is the ISO 15924 four-letter code. If the dialect
+%doesn't have an associated script, \meta{false} is done.
+%This package isn't
+%loaded automatically, so you'll need to explicitly load it. The
+%generic code is in \texttt{tracklang-scripts.tex}:
+%\begin{verbatim}
+%\input tracklang-scripts
+%\end{verbatim}
+%There's a convenient \LaTeX\ wrapper \texttt{tracklang-scripts.sty}:
+%\begin{verbatim}
+%\usepackage{tracklang-scripts}
+%\end{verbatim}
+%See \sectionref{sec:tracklang-scripts.tex} for further details of
+%that package.
+%
+%For example, the following defines a command to check if
+%the given dialect should use a Latin script:
+%\begin{verbatim}
+%\input tracklang-scripts
+%\def\islatin#1#2#3{%
+% \IfTrackedDialectIsScriptCs{#1}{\TrackLangScriptLatn}{#2}{#3}%
+%}
+%\end{verbatim}
+%
+%\begin{important}
+%Note that the script value doesn't mean that the document is
+%actually using that script. It means that this is the user's
+%\emph{desired} script, but whether that script is actually set relies
+%on the appropriate settings in the relevant language package (such
+%as \sty{polyglossia}'s \texttt{script} key).
+%\end{important}
+%
+%As from v1.3, each tracked dialect may also have a sub-language
+%identifier (for example, \texttt{arevela}), which can be fetched
+%using:
+%\begin{definition}[\DescribeMacro\GetTrackedDialectSubLang]
+%\cs{GetTrackedDialectSubLang}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the label identifying the dialect.
+%
+%You can test if a dialect has an associated sub-tag using:
+%\begin{definition}[\DescribeMacro\IfHasTrackedDialectSubLang]
+%\cs{IfHasTrackedDialectSubLang}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If the dialect has an associated sub-tag this does \meta{true}
+%otherwise it does \meta{false}.
+%
+%As from v1.3, each tracked dialect may also have additional
+%information, which can be fetched using:
+%\begin{definition}[\DescribeMacro\GetTrackedDialectAdditional]
+%\cs{GetTrackedDialectAdditional}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} is the label identifying the dialect.
+%
+%You can test if a dialect has additional information using:
+%\begin{definition}[\DescribeMacro\IfHasTrackedDialectAdditional]
+%\cs{IfHasTrackedDialectAdditional}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If the dialect has additional information this does \meta{true}
+%otherwise it does \meta{false}.
+%
+%
+%Most packages that implement multilingual support have a~set of
+%language definition files for each supported language or dialect.
+%It may be that only the root language is needed, if there are no
+%variations between that language's dialect (for the purposes of that
+%package), or it may be that separate definition files are required
+%for each dialect. However it can be awkward trying to map the
+%requested dialect or language label to the file name. Should, say,
+%the file containing the French code be called
+%\meta{prefix}\texttt{-french-}\meta{suffix} or
+%\meta{prefix}\texttt{-frenchb-}\meta{suffix} or
+%\meta{prefix}\texttt{-francais-}\meta{suffix}?
+%Should, say, the file containing the British English code be called
+%\meta{prefix}\texttt{-british-}\meta{suffix} or
+%\meta{prefix}\texttt{-UKenglish-}\meta{suffix}?
+%If you want to modularise the language support for your package so
+%that each language module has a different maintainer will the
+%maintainers know what tag to use for their language?
+%
+%To help with this, \styfmt{tracklang} provides:
+%\begin{definition}
+%\ics{IfTrackedLanguageFileExists}\marg{dialect}\marg{prefix}\marg{suffix}\marg{true part}\marg{false part}
+%\end{definition}
+%This attempts to find the file called
+%\meta{prefix}\meta{tag}\meta{suffix} where \meta{tag} is determined
+%from \meta{dialect}. If the file is found
+%\begin{definition}
+%\ics{CurrentTrackedTag}
+%\end{definition}
+%is set to \meta{tag} and \meta{true part} is done, otherwise
+%\meta{false part} is done. If this command
+%is empty, then the dialect hasn't been detected. If the dialect
+%has been detected, but no file can be found, then
+%\ics{CurrentTrackedTag} is set to the final attempt at determining
+%\meta{tag}.
+%
+%There's a convenient shortcut command new to version 1.3:
+%\begin{definition}[\DescribeMacro\TrackLangRequireDialect]
+%\cs{TrackLangRequireDialect}\oarg{load code}\marg{pkgname}\marg{dialect}
+%\end{definition}
+%which uses \cs{IfTrackedLanguageFileExists} to input the resource
+%file if found. The prefix is given by \meta{pkgname}\texttt{-} and
+%the suffix is \texttt{.ldf}. A warning is issued if no resource file
+%is found. Note that while it makes sense for \meta{pkgname}
+%to be the same as the base name of the package that uses these
+%resource files, they don't have to be the same. This command
+%additionally defines
+%\begin{definition}[\DescribeMacro\TrackLangRequireDialectPrefix]
+%\cs{TrackLangRequireDialectPrefix}
+%\end{definition}
+%to \meta{pkgname}, which allows the prefix to be picked up by
+%resource file commands, such as \cs{TrackLangProvidesResource}
+%and \cs{TrackLangRequireResource}. (See below.)
+%
+%The optional argument \meta{load code} is the code that actually
+%inputs the required file. This defaults to
+%\begin{verbatim}
+%\TrackLangRequireResource{\CurrentTrackedTag}
+%\end{verbatim}
+%
+%
+%The \ics{IfTrackedLanguageFileExists} command sets up the current
+%tracked dialect with
+%\ics{SetCurrentTrackedDialect}\marg{dialect}, which enables the following
+%commands that may be used within \meta{true part} or \meta{false
+%part}:
+%\begin{definition}
+%\ics{CurrentTrackedDialect}
+%\end{definition}
+%The dialect label.
+%
+%\begin{definition}
+%\ics{CurrentTrackedLanguage}
+%\end{definition}
+%If the dialect hasn't been detected, this command will be empty,
+%otherwise it will expand to the root language label (which may
+%be the same as the dialect label).
+%
+%\begin{definition}
+%\ics{CurrentTrackedRegion}
+%\end{definition}
+%If the dialect hasn't been detected, this command will be empty.
+%If the dialect has been assigned an ISO~3166-1 code,
+%\ics{CurrentTrackedRegion} will expand to that code, otherwise it
+%will be empty.
+%
+%\begin{definition}
+%\ics{CurrentTrackedIsoCode}
+%\end{definition}
+%If the dialect hasn't been detected, this command will be empty.
+%Otherwise it may be empty or it may expand to the
+%ISO~639-1 or ISO~639-2 or ISO~639-3 code.
+%
+%As from version 1.3, the following are also available, but
+%don't contribute to the tag.
+%\begin{definition}
+%\ics{CurrentTrackedDialectModifier}
+%\end{definition}
+%The dialect's modifier or empty if not set.
+%
+%\begin{definition}
+%\ics{CurrentTrackedDialectVariant}
+%\end{definition}
+%The dialect's variant or empty if not set.
+%
+%\begin{definition}
+%\ics{CurrentTrackedDialectSubTag}
+%\end{definition}
+%The dialect's sub-language code or empty if not set.
+%
+%\begin{definition}
+%\ics{CurrentTrackedDialectAdditional}
+%\end{definition}
+%The dialect's additional information or empty if not set.
+%
+%\begin{definition}
+%\ics{CurrentTrackedLanguageTag}
+%\end{definition}
+%The dialect's language tag. Take care not to confuse this
+%with \cs{CurrentTrackedTag}.
+%
+%\begin{definition}
+%\ics{CurrentTrackedDialectScript}
+%\end{definition}
+%The dialect's script. If the
+%dialect doesn't have the script set, the default script
+%is used instead. For example, the file \texttt{foo-serbian.ldf}
+%could test for the existence of the file
+%\begin{verbatim}
+%foo-serbian-\CurrentTrackedDialectScript.ldf
+%\end{verbatim}
+%and load it if it exists. The most convenient way is to
+%use \cs{TrackLangRequestResource} (described below):
+%\begin{verbatim}
+%\TrackLangRequestResource
+% {serbian-\CurrentTrackedDialectScript}
+% {}% not found, set default code here
+%\end{verbatim}
+%The Cyrillic settings could then be placed in
+%\texttt{foo-serbian-Cyrl.ldf} and the Latin settings in
+%\texttt{foo-serbian-Latn.ldf}.
+%
+%The \meta{tag} is determined as follows:
+%\begin{enumerate}
+% \item If no dialect with the given label has been
+% detected, the condition evaluates to \emph{false} and
+% \ics{CurrentTrackedTag} is empty.
+%
+% \item If there is no language code (ISO~639-1 or 639-2 or 639-3):
+%
+% \begin{enumerate}
+% \item If there's also no ISO~3166-1 code (\ics{CurrentTrackedRegion}
+% is empty), then \meta{tag} (\ics{CurrentTrackedTag}) is set to the
+% root language (\ics{CurrentTrackedLanguage}). If the file
+% \meta{prefix}\meta{tag}\meta{suffix} exists, the condition will evaluate to
+% \emph{true} otherwise it will evaluate to \emph{false}.
+%
+% \item If there is an ISO~3166-1 code, then \meta{tag}
+% (\ics{CurrentTrackedTag}) will be set to \ics{CurrentTrackedRegion}
+% and if the file \meta{prefix}\meta{tag}\meta{suffix} exists,
+% the condition will evaluate to \emph{true} otherwise it will evaluate
+% to \emph{false}.
+% \end{enumerate}
+%
+% \item If \ics{CurrentTrackedRegion} is empty (no ISO~3166-1
+% territory code)
+% then the \meta{tag} (\ics{CurrentTrackedTag}) is set to just
+% \ics{CurrentTrackedIsoCode}.
+%
+% If the file \meta{prefix}\meta{tag}\meta{suffix} exists, the condition will
+% evaluate to \emph{true}. If the file doesn't exist and
+% there are additional ISO language codes available (639-2 or 639-3)
+% then the test will be repeated for the next code.
+% If the test still fails, then the condition evaluates to \emph{false}.
+%
+% \item\label{itm:lang-country} The \meta{tag} (\ics{CurrentTrackedTag}) is then set to
+%\begin{verbatim}
+%\CurrentTrackedIsoCode-\CurrentTrackedRegion
+%\end{verbatim}
+% and if the file \meta{prefix}\meta{tag}\meta{suffix} exists,
+% the condition evaluates to \emph{true}.
+%
+% \item The \meta{tag} (\ics{CurrentTrackedTag}) is then set to
+% just \ics{CurrentTrackedIsoCode}, and if the file
+% \meta{prefix}\meta{tag}\meta{suffix} exists,
+% the condition evaluates to \emph{true}. If the file doesn't exist
+% and there are other ISO codes (639-2 or 639-3),
+% then \ics{CurrentTrackedIsoCode} is set to the next available
+% language code and step~\ref{itm:lang-country} is retried.
+%
+% \item If there is an ISO~3166-1 region code, the
+% \meta{tag} (\ics{CurrentTrackedTag}) is then set to
+% \ics{CurrentTrackedRegion},
+% and if the file \meta{prefix}\meta{tag}\meta{suffix} exists,
+% the condition evaluates to \emph{true}.
+%
+% \item Finally, the \meta{tag} (\ics{CurrentTrackedTag}) is set to
+% the root language label and if the file
+% \meta{prefix}\meta{tag}\meta{suffix} exist the condition
+% evaluates to \emph{true} otherwise it evaluates to \emph{false}.
+%
+%\end{enumerate}
+%
+%For example (pre v1.3):
+%\begin{verbatim}
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedDialect{\ThisDialect}%
+% {% try to load the language file for this dialect
+% \IfTrackedLanguageFileExists{\ThisDialect}%
+% {mypackage-}% file prefix
+% {.ldf}% file suffix
+% {\input mypackage-\CurrentTrackedTag.ldf}% file found
+% {% file not found
+% \PackageWarning{mypackage}{No support for language
+% `\ThisDialect'}%
+% }%
+% }%
+%}
+%{% no languages detected so use defaults
+%}
+%\end{verbatim}
+%With version 1.3 onwards, this can be written more concisely as:
+%\begin{verbatim}
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedDialect{\ThisDialect}%
+% {% try to load the language file for this dialect
+% \TrackLangRequireDialect{mypackage}{\ThisDialect}%
+% }%
+%}
+%{% no languages detected so use defaults
+%}
+%\end{verbatim}
+%which additionally enables the \styfmt{tracklang} version 1.3 commands described below,
+%such as \cs{TrackLangRequireResource}.
+%
+%If, for example, \ics{ThisDialect} is \texttt{british}, then the file search will
+%be in the order:
+%\begin{enumerate}
+%\item \texttt{mypackage-british.ldf}
+%\item \texttt{mypackage-en-GB.ldf}
+%\item \texttt{mypackage-eng-GB.ldf}
+%\item \texttt{mypackage-en.ldf}
+%\item \texttt{mypackage-eng.ldf}
+%\item \texttt{mypackage-GB.ldf}
+%\item \texttt{mypackage-english.ldf}
+%\end{enumerate}
+%
+%If, for example, \ics{ThisDialect} is \texttt{francais}, then the file search will
+%be in the order:
+%\begin{enumerate}
+%\item \texttt{mypackage-francais.ldf}
+%\item \texttt{mypackage-fr.ldf}
+%\item \texttt{mypackage-fra.ldf}
+%\item \texttt{mypackage-french.ldf}
+%\end{enumerate}
+%This is because the predefined \texttt{francais} option has no
+%region assigned to it. Be careful if the dialect label is the actual
+%root language. For example, if \cs{ThisDialect} is \texttt{french},
+%then the file search will be in the order:
+%\begin{enumerate}
+%\item \texttt{mypackage-french.ldf}
+%\item \texttt{mypackage-fr.ldf}
+%\item \texttt{mypackage-fra.ldf}
+%\item \texttt{mypackage-french.ldf}
+%\end{enumerate}
+%Note that the last try will always fail in this case since if the
+%file exists, it will be found on the first try.
+%
+%If you're only providing support for the root languages (pre v1.3):
+%\begin{verbatim}
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedLanguage{\ThisLanguage}%
+% {% try to load the language file for this root language
+% \IfTrackedLanguageFileExists{\ThisLanguage}%
+% {mypackage-}% file prefix
+% {.ldf}% file suffix
+% {\input mypackage-\CurrentTrackedTag.ldf}% file found
+% {% file not found
+% \PackageWarning{mypackage}{No support for language
+% `\ThisLanguage'}%
+% }%
+% }%
+%}
+%{% no languages detected so use defaults
+%}
+%\end{verbatim}
+%With version 1.3 onwards, this can be written more concisely as:
+%\begin{verbatim}
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedLanguage{\ThisLanguage}%
+% {% try to load the language file for this root language
+% \TrackLangRequireDialect{mypackage}{\ThisLanguage}%
+% }%
+%}
+%{% no languages detected so use defaults
+%}
+%\end{verbatim}
+%which additionally enables the commands described below.
+%Note that in this case, if more than one dialect for the same
+%language has been tracked, only the hooks for the last dialect for
+%that language will be adjusted, so it's usually best to iterate over
+%the dialects.
+%
+%The following \cs{TrackLang\ldots Resource\ldots} commands may
+%only be used in resource files that are loaded using
+%\ics{TrackLangRequireDialect}. An error will occur if the file is
+%input through some other method.
+%
+%Within the resource file
+%\meta{pkgname}\texttt{-}\meta{tag}\texttt{.ldf},
+%you can identify the file using (new to version 1.3):
+%\begin{definition}[\DescribeMacro\TrackLangProvidesResource]
+%\cs{TrackLangProvidesResource}\marg{tag}\oarg{version info}
+%\end{definition}
+%
+%If \cs{ProvidesFile} is defined (through the \LaTeX\ kernel) this is
+%used, otherwise a simplified generic alternative is used that's
+%suitable for other \TeX\ formats.
+%
+%The resource file can load another resource file
+%\meta{pkgname}\texttt{-}\meta{tag2}\texttt{.ldf},
+%using (new to version 1.3):
+%\begin{definition}[\DescribeMacro\TrackLangRequireResource]
+%\cs{TrackLangRequireResource}\marg{tag2}
+%\end{definition}
+%For example, the dialect file \texttt{foo-en-GB.ldf} might need to
+%load the root language resource file \texttt{foo-english.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{en-GB}
+%\TrackLangRequireResource{english}
+%\end{verbatim}
+%If \texttt{foo-english.ldf} is also identified with
+%\cs{TrackLangProvidesResource}, this will ensure that it's only
+%loaded once.
+%
+%If you require the resource file and want to perform
+%\meta{code1} if it's loaded at this point or \meta{code2} if it's
+%already been loaded then you can use (new to version 1.3):
+%\begin{definition}[\DescribeMacro\TrackLangRequireResourceOrDo]
+%\cs{TrackLangRequireResourceOrDo}\marg{tag2}\marg{code1}\marg{code2}
+%\end{definition}
+%
+%If you want to load a resource file if it exists (without an
+%error if it doesn't exist), then you can use
+%\begin{definition}[\DescribeMacro\TrackLangRequestResource]
+%\cs{TrackLangRequestResource}\marg{tag2}\marg{not found code}
+%\end{definition}
+%If the file doesn't exist, \meta{not found code} is done.
+%
+%\begin{important}
+%Note that these \cs{\ldots}\texttt{Resource} commands are only
+%permitted within the resource files. They are internally enabled
+%through \cs{TrackLangRequireDialect}.
+%\end{important}
+%
+%The above restriction on the resource files loaded through
+%\cs{TrackLangRequireDialect}, and the fact that it internally uses
+%\cs{IfTrackedLanguageFileExists}, means that commands like
+%\cs{CurrentTrackedLanguage} or \cs{CurrentTrackedDialect} may be
+%used in those files. This means that the name of the captions hook
+%can be obtained through them. (Remember that the file
+%\texttt{foo-en-GB.ldf} might have been loaded with, say, the
+%\texttt{british} dialect or with the synonymous \texttt{UKenglish}
+%dialect or with a dialect label that doesn't have a corresponding
+%caption hook, such as \texttt{enGBLatn}.)
+%
+%The \sty{polyglossia} package has caption hooks in the form
+%\cs{captions\meta{language}} whereas \sty{babel} has captions hooks
+%in the form \cs{captions\meta{dialect}}. This leads to a rather
+%cumbersome set of conditionals:
+%\begin{verbatim}
+%\ifcsundef{captions\CurrentTrackedLanguage}
+%{%
+% \ifcsundef{captions\CurrentTrackedDialect}%
+% {}%
+% {%
+% \csgappto{captions\CurrentTrackedDialect}{%
+% % code to append to hook
+% }%
+% }%
+%}%
+%{%
+% \csgappto{captions\CurrentTrackedLanguage}{%
+% % code to append to hook
+% }%
+%}
+%% do code now to initialise
+%\end{verbatim}
+%Note that the above has been simplified through the use of
+%\sty{etoolbox} commands, which isn't suitable for generic use.
+%It also doesn't query the mapping from \styfmt{tracklang}'s dialect
+%label to the closest matching \sty{babel} dialect label.
+%
+%Instead (new to version 1.3), \styfmt{tracklang} provides a command
+%to perform this set of conditionals using generic code:
+%\begin{definition}[\DescribeMacro\TrackLangAddToHook]
+%\cs{TrackLangAddToHook}\marg{code}\marg{type}
+%\end{definition}
+%where \meta{code} is the code to append to the \meta{type} hook.
+%This always performs \meta{code} after testing for the hook in case
+%the hook is undefined or has already been called (for example, \sty{ngerman} uses
+%\cs{captionsngerman} when the package is loaded, not at the start of
+%the document).
+%
+%Note that this command is enabled through
+%\cs{TrackLangRequireDialect} so should only be used inside resource
+%files.
+%
+%Since \texttt{captions} is a commonly used hook type, there's
+%a~shortcut command provided:
+%\begin{definition}[\DescribeMacro\TrackLangAddToCaptions]
+%\cs{TrackLangAddToCaptions}\marg{code}
+%\end{definition}
+%This is equivalent to
+%\cs{TrackLangAddToHook}\marg{code}\verb|{captions}|.
+%
+%
+%\section{Examples}
+%\label{sec:examples}
+%
+%The examples in this section illustrate the above commands.
+%
+%\subsection{animals.sty}
+%\label{sec:animals}
+%
+%This example is for a trivial package called \sty{animals.sty}
+%that defines three textual commands: \cs{catname}, \cs{dogname}
+%and \cs{ladybirdname}. The default values are: \qt{cat}, \qt{dog} and
+%\qt{bishy-barney-bee}.\footnote{Thass Broad Norfolk, my bewties
+%\texttt{:-P}}
+%
+%The supported languages are defined in files
+%with the prefix \texttt{animals-} and the suffix \texttt{.ldf}.
+%
+%Here's the code for \texttt{animals.sty}:
+%\begin{verbatim}
+% \NeedsTeXFormat{LaTeX2e}
+% \ProvidesPackage{animals}
+%
+% \RequirePackage{tracklang}[2016/10/07] %v1.3
+%
+% % Any undeclared options are language settings:
+% \DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+% \ProcessOptions
+%
+% % Default definitions
+% \newcommand\catname{cat}
+% \newcommand\dogname{dog}
+% \newcommand\ladybirdname{bishy-barney-bee}
+%
+% \AnyTrackedLanguages
+% {%
+% \ForEachTrackedDialect{\this@dialect}{%
+% \TrackLangRequireDialect{animals}{\this@dialect}%
+% }%
+% }
+% {% no tracked languages, default already set up
+% }
+%
+% \endinput
+%\end{verbatim}
+%Here's a Plain \TeX\ version that picks up the language from the
+%locale environment variable:
+%\begin{verbatim}
+% \input tracklang
+%
+% \TrackLangFromEnv
+%
+% % Default definitions
+% \def\catname{cat}
+% \def\dogname{dog}
+% \def\ladybirdname{bishy-barney-bee}
+%
+% \AnyTrackedLanguages
+% {%
+% \ForEachTrackedDialect{\thisdialect}{%
+% \TrackLangRequireDialect{animals}{\thisdialect}%
+% }%
+% }
+% {% no tracked languages, default already set up
+% }
+%\end{verbatim}
+%In the event that a user or supplementary package for some
+%reason wants to load a resource
+%file for a language that hasn't been tracked, it might be worth
+%providing a command for this purpose:
+%\begin{verbatim}
+%\newcommand*{\RequireAnimalsDialect}[1]{%
+% \TrackLangRequireDialect{animals}{#1}%
+%}
+%\end{verbatim}
+%The loop can then be changed to:
+%\begin{verbatim}
+% \ForEachTrackedDialect{\this@dialect}{%
+% \RequireAnimalsDialect\this@dialect
+% }%
+%\end{verbatim}
+%
+%The \texttt{animals-english.ldf} file valid for both the Plain \TeX\
+%and \LaTeX\ formats contains:
+%\begin{verbatim}
+%\TrackLangProvidesResource{english}
+%
+%\def\englishanimals{%
+% \def\catname{cat}%
+% \def\dogname{dog}%
+% \def\ladybirdname{bishy-barney-bee}%
+%}
+%
+%\TrackLangAddToCaptions{\englishanimals}
+%\end{verbatim}
+%The \texttt{animals-en-GB.ldf} file contains:
+%\begin{verbatim}
+%\TrackLangProvidesResource{en-GB}
+%\TrackLangRequireResource{english}
+%
+%\def\enGBanimals{%
+% \englishanimals
+% \def\ladybirdname{ladybird}%
+%}
+%\TrackLangAddToCaptions{\enGBanimals}
+%\end{verbatim}
+%The \texttt{animals-en-US.ldf} file contains:
+%\begin{verbatim}
+%\TrackLangProvidesResource{en-US}
+%\TrackLangRequireResource{english}
+%
+%\def\enUSanimals{%
+% \englishanimals
+% \def\ladybirdname{ladybug}%
+%}
+%\TrackLangAddToCaptions{\enUSanimals}
+%\end{verbatim}
+%Here's a German version in the file \texttt{animals-german.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{german}
+%
+%\def\germananimals{%
+% \def\catname{Katze}%
+% \def\dogname{Hund}%
+% \def\ladybirdname{Marienk\"afer}%
+%}
+%
+%\TrackLangAddToCaptions{\germananimals}
+%\end{verbatim}
+%
+%This means that if \sty{babel} or \sty{polyglossia} are loaded, the
+%redefinitions are automatically performed whenever the language is
+%changed, but if there's no caption mechanism the user can switch
+%the fixed names using the \cs{\ldots animals} commands.
+%
+%Here's an example \LaTeX\ document that doesn't have any caption
+%hooks:
+%\begin{verbatim}
+%\documentclass[english,german,a4paper]{article}
+%
+%\usepackage{animals}
+%
+%\begin{document}
+%\englishanimals
+%
+%\catname.
+%\dogname.
+%\ladybirdname.
+%
+%\germananimals
+%
+%\catname.
+%\dogname.
+%\ladybirdname.
+%\end{document}
+%\end{verbatim}
+%Here's a \sty{babel} example document:
+%\begin{verbatim}
+%\documentclass[american,german,british,a4paper]{article}
+%
+%\usepackage{babel}
+%\usepackage{animals}
+%
+%\begin{document}
+%\selectlanguage{american}
+%
+%\catname.
+%\dogname.
+%\ladybirdname.
+%
+%\selectlanguage{german}
+%
+%\catname.
+%\dogname.
+%\ladybirdname.
+%
+%\selectlanguage{british}
+%
+%\catname.
+%\dogname.
+%\ladybirdname.
+%
+%\end{document}
+%\end{verbatim}
+%
+%There is some redundancy with the above resource files. Consider the
+%\sty{babel} example above. The \texttt{american} dialect is the
+%first option, so in that case \texttt{animals-en-US.ldf} is loaded
+%followed by \texttt{animals-english.ldf}. This means that the
+%\cs{captionsamerican} hook now includes
+%\begin{verbatim}
+%\englishanimals
+%\enUSanimals
+%\end{verbatim}
+%Since \cs{enUSanimals} includes \cs{englishanimals}, there is
+%redundant code. However, when the \texttt{british} dialect is
+%processed, this loads the file \texttt{animals-en-GB.ldf} but not
+%the file \texttt{animals-english.ldf} (since it's already been loaded). This
+%means that \cs{captionsbritish} contains \cs{enGBanimals} but not
+%\cs{englishanimals}.
+%
+%If this redundancy is an issue (for example, there are so many
+%redefinitions needed that it significantly slows the document build
+%process), then it can be addressed with the following modifications.
+%The \texttt{animals-en-GB.ldf} file is now:
+%\begin{verbatim}
+%\TrackLangProvidesResource{en-GB}
+%
+%\def\enGBanimals{%
+% \englishanimals
+% \def\ladybirdname{ladybird}%
+%}
+%
+%\TrackLangRequireResourceOrDo{english}%
+%{
+% \TrackLangAddToCaptions{%
+% \def\ladybirdname{ladybird}%
+% }%
+%}
+%{
+% \TrackLangAddToCaptions{\enGBanimals}
+%}
+%\end{verbatim}
+%The \texttt{animals-en-US.ldf} file is now:
+%\begin{verbatim}
+%\TrackLangProvidesResource{en-US}
+%
+%\providecommand*{\enUSanimals}{%
+% \englishanimals
+% \renewcommand*{\ladybirdname}{ladybug}%
+%}
+%
+%\TrackLangRequireResourceOrDo{english}
+%{
+% \TrackLangAddToCaptions{%
+% \renewcommand*{\ladybirdname}{ladybird}%
+% }%
+%}
+%{
+% \TrackLangAddToCaptions{\enUSanimals}{captions}
+%}
+%\end{verbatim}
+%This means that the document that has the dialects listed in the
+%order \texttt{american}, \texttt{british} now has
+%\begin{verbatim}
+%\englishanimals
+%\def\ladybirdname{ladybird}
+%\end{verbatim}
+%in the \cs{captionsbritish} hook and just \cs{enUSanimals} in the
+%\cs{captionsamerican} hook, which has removed most of the redundancy.
+%
+%Note that \sty{polyglossia} has a \cs{captionsenglish} hook but not
+%\cs{captionsamerican} or \cs{captionsbritish}, so this code doesn't
+%allow for switching between variants of the same language with
+%\sty{polyglossia}.
+%
+%\subsection{regions.sty}
+%\label{sec:regions}
+%
+%Earlier, I~mentioned the search order for
+%\ics{IfTrackedLanguageFileExists} where if, for example, the dialect
+%is \texttt{british}, the file search will be:
+%\begin{enumerate}
+%\item \texttt{mypackage-british.ldf}
+%\item \texttt{mypackage-en-GB.ldf}
+%\item \texttt{mypackage-eng-GB.ldf}
+%\item \texttt{mypackage-en.ldf}
+%\item \texttt{mypackage-eng.ldf}
+%\item \texttt{mypackage-GB.ldf}
+%\item \texttt{mypackage-english.ldf}
+%\end{enumerate}
+%You may have wondered why
+%\texttt{mypackage-GB.ldf} is included in the search given that some
+%countries have multiple official languages, which means that the country code on its
+%own may not indicate the language.
+%
+%The reason for including just the country code as the \meta{tag} in the
+%file search is to allow for region rather than language dependent
+%settings. For example, suppose I~want to write a package that needs
+%to know whether to use imperial or metric measurements in the
+%document, but I also want to provide multilingual support. The
+%language alone won't tell me whether to use imperial or metric (for
+%example, the US uses imperial and the UK uses metric for most
+%product attributes). I could provide \texttt{.ldf} files for every
+%language and region combination, but this would result in a lot
+%redundancy.
+%
+%\cs{TrackLangRequireDialect} has an optional argument for adjusting
+%the way the resource files are loaded. Suppose I have
+%\texttt{regions-}\meta{tag}\texttt{.ldf} resource files, then
+%\begin{verbatim}
+%\TrackLangRequireDialect{regions}{\this@dialect}
+%\end{verbatim}
+%loads the resource file for the dialect given by \cs{this@dialect}
+%using
+%\begin{verbatim}
+%\TrackLangRequireResource{\CurrentTrackedTag}
+%\end{verbatim}
+%I can use the optional argument to also load the resource file for the
+%root language as well:
+%\begin{verbatim}
+%\newcommand*{\RequireRegionsDialect}[1]{%
+% \TrackLangRequireDialect
+% [\TrackLangRequireResource{\CurrentTrackedTag}%
+% \TrackLangRequireResource{\CurrentTrackedLanguage}%
+% ]%
+% {regions}{#1}%
+%}
+%\end{verbatim}
+%Now the dialect \texttt{british} can load both
+%\texttt{regions-GB.ldf} and \texttt{regions-english.ldf}.
+%
+%The example package (\texttt{regions.sty}) below illustrates this.
+%\begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}
+%\ProvidesPackage{regions}
+%
+%\RequirePackage{tracklang}[2016/10/07]
+%
+%\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
+%\ProcessOptions
+%
+%\newcommand*{\weightunit}{kg}
+%\newcommand*{\lengthunit}{mm}
+%\newcommand*{\currencyunit}{EUR}
+%
+%\newcommand*{\unitname}{units}
+%
+%\newcommand*{\RequireRegionsDialect}[1]{%
+% \TrackLangRequireDialect
+% [\TrackLangRequireResource{\CurrentTrackedTag}%
+% \TrackLangRequireResource{\CurrentTrackedLanguage}%
+% ]%
+% {regions}{#1}%
+%}
+%
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedDialect{\this@dialect}{%
+% \RequireRegionsDialect\this@dialect
+% }%
+%}
+%{% no tracked languages, default already set up
+%}
+%
+%\endinput
+%\end{verbatim}
+%There are separate \texttt{.ldf} files for region and language.
+%First are the regions.
+%
+%\begin{itemize}
+%\item \texttt{regions-BE.ldf} (Belgium):
+%\begin{verbatim}
+%\TrackLangProvidesResource{BE}
+%
+%\providecommand*{\BEunits}{%
+% \renewcommand*{\weightunit}{kg}%
+% \renewcommand*{\lengthunit}{mm}%
+% \renewcommand*{\currencyunit}{EUR}%
+%}
+%
+%\TrackLangAddToCaptions{\BEunits}
+%\end{verbatim}
+%
+%\item \texttt{regions-CA.ldf} (Canada):
+%\begin{verbatim}
+%\TrackLangProvidesResource{CA}
+%
+%\providecommand*{\CAunits}{%
+% \renewcommand*{\weightunit}{kg}%
+% \renewcommand*{\lengthunit}{mm}%
+% \renewcommand*{\currencyunit}{CAD}%
+%}
+%
+%\TrackLangAddToCaptions{\CAunits}
+%\end{verbatim}
+%
+%\item \texttt{regions-GB.ldf} (Great Britain):
+%\begin{verbatim}
+%\TrackLangProvidesResource{GB}
+%
+%\providecommand*{\GBunits}{%
+% \renewcommand*{\weightunit}{kg}%
+% \renewcommand*{\lengthunit}{mm}%
+% \renewcommand*{\currencyunit}{GBP}%
+%}
+%
+%\TrackLangAddToCaptions{\GBunits}
+%\end{verbatim}
+%
+%\item \texttt{regions-US.ldf} (USA):
+%\begin{verbatim}
+%\TrackLangProvidesResource{US}
+%
+%\providecommand*{\USunits}{%
+% \renewcommand*{\weightunit}{lb}%
+% \renewcommand*{\lengthunit}{in}%
+% \renewcommand*{\currencyunit}{USD}%
+%}
+%
+%\TrackLangAddToCaptions{\USunits}
+%\end{verbatim}
+%\end{itemize}
+%Now the language files:
+%
+%\begin{itemize}
+%\item \texttt{regions-dutch.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{dutch}
+%
+%\providecommand*{\dutchnames}{%
+% \renewcommand*{\unitname}{meeteenheden}%
+%}
+%
+%\TrackLangAddToCaptions{\dutchnames}
+%\end{verbatim}
+%
+%\item \texttt{regions-english.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{english}
+%
+%\providecommand*{\englishnames}{%
+% \renewcommand*{\unitname}{units}%
+%}
+%
+%\TrackLangAddToCaptions{\englishnames}
+%\end{verbatim}
+%
+%\item \texttt{regions-french.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{french}
+%
+%\providecommand*{\frenchnames}{%
+% \renewcommand*{\unitname}{unit\'es}%
+%}
+%
+%\TrackLangAddToCaptions{\frenchnames}
+%\end{verbatim}
+%
+%\item \texttt{regions-german.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{french}
+%
+%\providecommand*{\germannames}{%
+% \renewcommand*{\unitname}{Ma\ss einheiten}%
+%}
+%
+%\TrackLangAddToCaptions{\germannames}
+%\end{verbatim}
+%\end{itemize}
+%
+%Here's an example document that uses this package:
+%\begin{verbatim}
+%\documentclass[canadien]{article}
+%
+%\usepackage{regions}
+%
+%\begin{document}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\end{document}
+%\end{verbatim}
+%
+%This works because the \meta{tag} search looks for the
+%country code before the root language label. However, this will fail if
+%the dialect label is the same as a root language label that has an
+%associated territory, marked with \fnregion\ in
+%\tableref{tab:rootlangopts}, as then it will be picked up before the
+%country code.
+%
+%In the above example,
+%\texttt{regions-CA.ldf} is matched rather than
+%\texttt{regions-french.ldf}, so \texttt{regions-CA.ldf} is loaded by
+%\begin{verbatim}
+%\TrackLangRequireResource{\CurrentTrackedTag}
+%\end{verbatim}
+%After this, the language file \texttt{regions-french.ldf} is then loaded:
+%\begin{verbatim}
+%\TrackLangRequireResource{\CurrentTrackedLanguage}
+%\end{verbatim}
+%
+%This assumes that there's a country code \texttt{.ldf} file
+%available. This example needs a little modification to use default
+%units in case the region is missing:
+%\begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}
+%\ProvidesPackage{regions}
+%
+%% Pass all options to tracklang:
+%\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{tracklang}}
+%\ProcessOptions
+%
+%\RequirePackage{tracklang}
+%
+%\newcommand*{\weightunit}{kg}
+%\newcommand*{\lengthunit}{mm}
+%\newcommand*{\currencyunit}{EUR}
+%
+%\newcommand*{\unitname}{units}
+%
+%\newcommand*{\defaultunits}{%
+% \renewcommand*{\weightunit}{kg}%
+% \renewcommand*{\lengthunit}{mm}%
+% \renewcommand*{\currencyunit}{EUR}%
+%}
+%
+%\newcommand*{\RequireRegionsDialect}[1]{%
+% \TrackLangRequireDialect
+% [\TrackLangRequireResource{\CurrentTrackedTag}%
+% \ifx\CurrentTrackedTag\CurrentTrackedLanguage
+% \TrackLangAddToCaptions{\defaultunits}%
+% \else
+% \TrackLangRequireResource{\CurrentTrackedLanguage}%
+% \fi
+% ]%
+% {regions}{#1}%
+%}
+%
+%\AnyTrackedLanguages
+%{%
+% \ForEachTrackedDialect{\this@dialect}{%
+% \RequireRegionsDialect\this@dialect
+% }%
+%}
+%{% no tracked languages, default already set up
+%}
+%
+%\endinput
+%\end{verbatim}
+%Note that we still have a problem for dialect labels that are
+%identical to root language labels with an associated territory (such
+%as \pkgopt{manx}). This case can be checked with the following
+%adjustment:
+%\begin{verbatim}
+%\newcommand*{\RequireRegionsDialect}[1]{%
+% \TrackLangRequireDialect
+% [\TrackLangRequireResource{\CurrentTrackedTag}%
+% \ifx\CurrentTrackedTag\CurrentTrackedLanguage
+% \ifx\CurrentTrackedRegion\empty
+% \TrackLangAddToCaptions{\defaultunits}%
+% \else
+% \TrackLangRequireResource{\CurrentTrackedRegion}%
+% \fi
+% \else
+% \TrackLangRequireResource{\CurrentTrackedLanguage}%
+% \fi
+% ]%
+% {regions}{#1}%
+%}
+%\end{verbatim}
+%In the case where both the dialect and root language label are
+%\texttt{manx} with the resource files \texttt{regions-manx.ldf}
+%and \texttt{regions-IM.ldf}, then \cs{CurrentTrackedTag} will be
+%\texttt{manx} (the dialect label) so \texttt{regions-manx.ldf} will
+%be loaded with:
+%\begin{verbatim}
+%\TrackLangRequireResource{\CurrentTrackedTag}
+%\end{verbatim}
+%In this case \cs{CurrentTrackedRegion} is \texttt{IM} (that is, it's
+%not empty) so then \texttt{regions-IM.ldf} will be loaded with:
+%\begin{verbatim}
+%\TrackLangRequireResource{\CurrentTrackedRegion}
+%\end{verbatim}
+%
+%Here's another document that sets up dialects with
+%\styfmt{tracklang} labels that aren't recognised by \sty{babel}.
+%This means that there's no corresponding \cs{captions\ldots} hook
+%for either the dialect label or the root language label,
+%so mappings need to be defined from the \styfmt{tracklang} dialect
+%label to the matching \sty{babel} dialect label.
+%
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage{tracklang}
+%
+%\TrackLanguageTag{de-US-1996}
+%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
+%
+%\TrackLanguageTag{en-MT}
+%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{UKenglish}
+%
+%\usepackage[main=ngerman,UKenglish]{babel}
+%\usepackage{regions}
+%
+%\begin{document}
+%\selectlanguage{ngerman}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\selectlanguage{UKenglish}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\end{document}
+%\end{verbatim}
+%This produces:
+%\begin{quote}
+%Ma\ss einheiten: lb, in, USD.
+%
+%units: kg, mm, EUR.
+%\end{quote}
+%Compare this with:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage[main=ngerman,UKenglish]{babel}
+%\usepackage{regions}
+%
+%\begin{document}
+%\selectlanguage{ngerman}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\selectlanguage{UKenglish}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\end{document}
+%\end{verbatim}
+%which produces:
+%\begin{quote}
+%Ma\ss einheiten: kg, mm, EUR.
+%
+%units: kg, mm, GBP.
+%\end{quote}
+%
+%Note that these mappings aren't needed if \sty{babel}
+%is loaded with the root language labels instead. For example:
+%\begin{verbatim}
+%\documentclass{article}
+%
+%\usepackage{tracklang}
+%
+%\TrackLanguageTag{de-US-1996}
+%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
+%
+%\TrackLanguageTag{en-MT}
+%
+%\usepackage[main=ngerman,english]{babel}
+%\usepackage{regions2}
+%
+%\begin{document}
+%\selectlanguage{ngerman}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\selectlanguage{english}
+%
+%\unitname: \weightunit, \lengthunit, \currencyunit.
+%
+%\end{document}
+%\end{verbatim}
+%No mapping is required for the \texttt{en-MT} locale as
+%it can pick up \cs{captionsenglish} when \cs{TrackLangAddToHook}
+%(used by \cs{TrackLangAddToCaptions})
+%queries the root language label after failing to find the
+%language hook from the dialect label.
+%
+%Some of the predefined \styfmt{tracklang} dialects come with
+%a mapping to the closest matching \sty{babel} dialect label.
+%For example, the option \pkgopt{ngermanDE} listed in
+%\tableref{tab:nonisoopts} automatically provides a mapping
+%to \texttt{ngerman}. Since a \styfmt{tracklang} dialect label
+%can only map to one \styfmt{babel} label, this can be problematic
+%for synonymous labels such as
+%\texttt{british}\slash\texttt{UKenglish} or
+%\texttt{american}\slash\texttt{USenglish}. The default mappings used
+%by \styfmt{tracklang} are shown in \tableref{tab:nonisoopts}.
+%
+%\chapter{Adding Support for Language Tracking}
+%\label{sec:langsty}
+%
+%If you are writing a package that \emph{sets up} the document languages (rather
+%than a package that provides multilingual support if the user has
+%already loaded a language package) then you can load \styfmt{tracklang}
+%and use the commands below to help other packages track your
+%provided languages.
+%
+%The \styfmt{tracklang} package can be loaded using
+%\begin{verbatim}
+%\input tracklang
+%\end{verbatim}
+%or (\LaTeX\ only)
+%\begin{verbatim}
+%\RequirePackage{tracklang}
+%\end{verbatim}
+%
+%When using \LaTeX, there's a difference between the two.
+%The first case prevents \styfmt{tracklang} from picking up
+%the document class options but skips the check for known
+%language packages. This check is redundant since this is
+%the language package, so the thing to decide is whether or
+%not to allow the user to set up the localisation information
+%through the document class options.
+%
+%(If you just use \cs{input}, there's a test at the start of
+%\texttt{tracklang.tex} to determine if it's already been loaded, so
+%you don't need to worry if the user has already loaded it.)
+%
+%When the language is set (using commands like \cs{selectlanguage}
+%)
+%it would be convenient to users and other packages if the
+%following command is also used:
+%\begin{definition}[\DescribeMacro\SetCurrentTrackedDialect]
+%\cs{SetCurrentTrackedDialect}\marg{dialect}
+%\end{definition}
+%where \meta{dialect} may the \styfmt{tracklang} dialect label,
+%or the mapped label previously set through \cs{SetTrackedDialectLabelMap},
+%described below, or the language label (in which case the
+%last dialect to be tracked with that root language will
+%be assumed).
+%
+%This will make the following commands available which may be
+%of use to other packages:
+%\begin{itemize}
+%\item\ics{CurrentTrackedDialect} The dialect label recognised
+%by \styfmt{tracklang} (which may not be the same as \meta{dialect}).
+%
+%\item\ics{CurrentTrackedLanguage}
+%The root language label used by \styfmt{tracklang}.
+%\item\ics{CurrentTrackedDialectModifier} The dialect modifier.
+%\item\ics{CurrentTrackedDialectVariant} The dialect variant.
+%\item\ics{CurrentTrackedDialectScript} The dialect script.
+%Note that if \sty{tracklang-scripts} is also loaded, this allows the
+%script direction to be accessed using
+%\begin{verbatim}
+%\TrackLangScriptAlphaToDir{\CurrentTrackedDialectScript}
+%\end{verbatim}
+%See \sectionref{sec:tracklang-scripts.tex} for further details.
+%\item\ics{CurrentTrackedDialectSubLang} The dialect sub-language
+%code.
+%\item\ics{GetTrackedDialectAdditional} The dialect's additional
+%information.
+%\item\ics{CurrentTrackedIsoCode} The dialect's root language
+%ISO code. (The first found in the sequence 639-1, 639-2, 639-3.)
+%\item\ics{CurrentTrackedRegion} The dialect's ISO 3166-1 region
+%code.
+%\item\ics{CurrentTrackedLanguageTag} The dialect's language tag.
+%\end{itemize}
+%(Without this automated use of \cs{SetCurrentTrackedDialect},
+%the same information can be picked up using commands
+%like \cs{GetTrackedDialectScript}, but that's less convenient,
+%especially if \cs{languagename} needs to be converted
+%to \meta{dialect}. See the accompanying sample file
+%\texttt{sample-setlang.tex} for an example.)
+%
+%When the user requests a particular dialect through your language
+%package, you can notify \styfmt{tracklang} of this choice using
+%\begin{definition}
+%\cs{TrackPredefinedDialect}\marg{dialect}
+%\end{definition}
+%if the dialect label is recognised by \styfmt{tracklang} (all those
+%listed in \refoptstables).
+%
+%If there's no matching dialect predefined by \styfmt{tracklang}, you
+%can just use \cs{TrackLocale} or \cs{TrackLanguageTag}
+%(described in \sectionref{sec:generic})
+%with the appropriate ISO codes \emph{if you're not providing caption
+%hooks}.
+%
+%If you are providing a captions hook mechanism
+%in the form \ics{captions\meta{dialect}}, then if \meta{dialect}
+%doesn't match the corresponding \styfmt{tracklang} dialect label,
+%you can provide a mapping using
+%\cs{SetTrackedDialectLabelMap}, described below.
+%
+%For compatibility with pre version 1.3,
+%if the dialect isn't predefined by
+%\styfmt{tracklang}, then you can use:
+%\begin{definition}[\DescribeMacro\AddTrackedDialect]
+%\cs{AddTrackedDialect}\marg{dialect}\marg{root language label}
+%\end{definition}
+%where \meta{root language label} is the label for the dialect's root
+%language (\tableref{tab:rootlangopts}) and \meta{dialect} matches
+%the captions hook. If the dialect is already in the tracked dialect
+%list, it won't be added again. If the root language is already in
+%the tracked language list, it won't be added again. As from version
+%1.3 this additionally defines:
+%\begin{definition}[\DescribeMacro\TrackLangLastTrackedDialect]
+%\cs{TrackLangLastTrackedDialect}
+%\end{definition}
+%to \meta{dialect} for convenient reference if required.
+%Note that \cs{AddTrackedDialect} is internally used by commands like
+%\cs{TrackPredefinedDialect}, \cs{TrackLocale} and
+%\cs{TrackLanguageTag}.
+%
+%(New to version 1.3.) Many of the \styfmt{tracklang} dialect
+%labels don't have a corresponding match in various language packages. For
+%example, \styfmt{tracklang} provides \texttt{ngermanDE} but the
+%closest match in \sty{babel} is \texttt{ngerman}. This means that
+%the caption hook \cs{captionsngerman} can't be accessed
+%through
+%\begin{verbatim}
+%\csname captions\CurrentTrackedDialect\endcsname
+%\end{verbatim}
+%in the resource files. In this case, a mapping may be defined
+%between the \styfmt{tracklang} dialect label and the closest
+%matching label used by the language hooks. This is done through
+%\begin{definition}[\DescribeMacro\SetTrackedDialectLabelMap]
+%\cs{SetTrackedDialectLabelMap}\marg{from}\marg{to}
+%\end{definition}
+%where \meta{from} is the \styfmt{tracklang} label and \meta{to}
+%is the language hook label. For example:
+%\begin{verbatim}
+%\TrackLanguageTag{de-AR-1996}
+%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
+%\end{verbatim}
+%Since \cs{TrackLanguageTag} internally uses \cs{AddTrackedDialect}
+%the dialect label created by \styfmt{tracklang} can be accessed
+%using \cs{TrackLangLastTrackedDialect}. This means that
+%\ics{TrackLangAddToCaptions} can now find the \cs{captionsngerman}
+%hook even though the \styfmt{tracklang} dialect label isn't \texttt{ngerman}.
+%
+%(New to version 1.3.)
+%If the root language label is recognised by \styfmt{tracklang}, you
+%can add the ISO codes using:
+%\begin{definition}[\DescribeMacro\AddTrackedLanguageIsoCodes]
+%\cs{AddTrackedLanguageIsoCodes}\marg{root language}
+%\end{definition}
+%
+%As from v1.3, you can also provide a modifier for a given
+%dialect using:
+%\begin{definition}[\DescribeMacro\SetTrackedDialectModifier]
+%\cs{SetTrackedDialectModifier}\marg{dialect}\marg{value}
+%\end{definition}
+%where \meta{dialect} is the dialect label and \meta{value}
+%is the modifier value. For example:
+%\begin{verbatim}
+%\AddTrackedDialect{oldgerman}{german}
+%\AddTrackedLanguageIsoCodes{german}
+%\SetTrackedDialectModifier{oldgerman}{old}
+%\end{verbatim}
+%
+%Note that no sanitization is performed on \meta{value} when the
+%modifier is set explicitly through \cs{SetTrackedDialectModifier},
+%since it's assumed that any package that specifically sets the
+%modifier in this way is using a sensible labelling system. If the
+%modifier is obtained through commands like \cs{TrackLocale}, then
+%the modifier is sanitized as the value may have been obtained from
+%the operating system and there's no guarantee that it won't contain
+%problematic characters.
+%
+%The modifier is typically obtained by parsing locale information in
+%POSIX format.
+%\begin{display}
+%\meta{language}[\_\meta{territory}][.\meta{codeset}][@\meta{modifier}]
+%\end{display}
+%whereas the variant is typically obtained by parsing the language
+%tag.
+%
+%The information provided in the commands below (such as the script)
+%are typically obtained by parsing the language tag. For example,
+%with Serbian in the Latin alphabet the modifier would be \texttt{latin}
+%whereas the script would be \texttt{Latn}:
+%\begin{verbatim}
+%\AddTrackedDialect{serbianlatin}{serbian}
+%\AddTrackedLanguageIsoCodes{serbian}
+%\SetTrackedDialectModifier{serbianlatin}{latin}
+%\SetTrackedDialectScript{serbianlatin}{Latn}
+%\end{verbatim}
+%
+%As from v1.3, you can provide a script (for example,
+%\qt{Latn} or \qt{Cyrl}) using:
+%\begin{definition}[\DescribeMacro\SetTrackedDialectScript]
+%\cs{SetTrackedDialectScript}\marg{dialect}\marg{value}
+%\end{definition}
+%where \meta{dialect} is the dialect label and \meta{value} is the
+%four letter script identifier. For example:
+%\begin{verbatim}
+%\AddTrackedDialect{serbiancyrl}{serbian}
+%\AddTrackedLanguageIsoCodes{serbian}
+%\SetTrackedDialectScript{serbiancyrl}{Cyrl}
+%\end{verbatim}
+%
+%As from v1.3, you can provide a variant for a given
+%dialect using:
+%\begin{definition}[\DescribeMacro\SetTrackedDialectVariant]
+%\cs{SetTrackedDialectVariant}\marg{dialect}\marg{value}
+%\end{definition}
+%For example:
+%\begin{verbatim}
+%\AddTrackedDialect{german1901}{german}
+%\SetTrackedDialectVariant{german1901}{1901}
+%\end{verbatim}
+%
+%As from v1.3, you can also provide a sub-language using:
+%\begin{definition}[\DescribeMacro\SetTrackedDialectSubLang]
+%\cs{SetTrackedDialectSubLang}\marg{dialect}\marg{value}
+%\end{definition}
+%where \meta{dialect} is the dialect label and \meta{value} is the
+%code. For example:
+%\begin{verbatim}
+%\AddTrackedDialect{mandarin}{chinese}
+%\AddTrackedLanguageIsoCodes{chinese}
+%\SetTrackedDialectSubLang{mandarin}{cmn}
+%\AddTrackedIsoLanguage{639-3}{cmn}{mandarin}
+%\end{verbatim}
+%
+%As from v1.3, you can also provide additional information using:
+%\begin{definition}[\DescribeMacro\SetTrackedDialectAdditional]
+%\cs{SetTrackedDialectAdditional}\marg{dialect}\marg{value}
+%\end{definition}
+%where \meta{dialect} is the dialect label and \meta{value} is the
+%additional information.
+%
+%(New to version 1.3.)
+%If the root language isn't recognised by \styfmt{tracklang}
+%(not listed in \tableref{tab:rootlangopts}), then
+%it can be defined (but not tracked at this point) using:
+%\begin{definition}[\DescribeMacro\TrackLangNewLanguage]
+%\cs{TrackLangNewLanguage}\marg{language name}\marg{639-1
+%code}\marg{639-2 (T)}\marg{639-2 (B)}\marg{639-3}\marg{3166-1}\marg{default
+%script}
+%\end{definition}
+%where \meta{language name} is the root language name,
+%\meta{639-1 code} is the ISO 639-1 code for that language (may be
+%empty if there isn't one), \meta{639-2 (T)} is the ISO 639-2 (T)
+%code for that language (may be empty if there isn't one),
+%\meta{639-2 (B)} is the ISO 639-2 (B) code for that language (may be
+%empty if it's the same as \meta{639-2 (T)}), \meta{639-3} is the ISO
+%639-3 code for that language (empty if the same as the 639-2
+%code), \meta{3166-1} is the territory ISO code for languages that are only spoken in one
+%territory (should be empty if the language is spoken in multiple
+%territories), and \meta{default script} is the default script (empty
+%if disputed or varies according to region).
+%
+%You can then track this language using \cs{AddTrackedDialect} for
+%dialects or, if no regional variant is needed, you can instead use:
+%\begin{definition}[\DescribeMacro\AddTrackedLanguage]
+%\cs{AddTrackedLanguage}\marg{root language label}
+%\end{definition}
+%This is equivalent to \ics{AddTrackedDialect}\marg{root language
+%label}\marg{root language label}.
+%
+%Suppose I want to create a language package \texttt{alien.sty} that defines the
+%\texttt{martian} language with regional dialects
+%\texttt{lowermartian} and \texttt{uppermartian}. First, let's
+%suppose that \styfmt{tracklang} recognises the root language
+%\texttt{martian}:
+%\begin{verbatim}
+% \ProvidesPackage{alien}
+%
+% \input{tracklang}% v1.3
+%
+% \DeclareOption{martian}{%
+% \TrackPredefinedDialect{martian}
+% }
+% \DeclareOption{lowermartian}{%
+% \AddTrackedDialect{lowermartian}{martian}
+% \AddTrackedIsoCodes{martian}
+% \AddTrackedIsoLanguage{3166-1}{YY}{lowermartian}
+% % other attributes such as
+% % \SetTrackedDialectVariant{lowermartian}{...}
+% }
+% \DeclareOption{uppermartian}{%
+% \AddTrackedDialect{uppermartian}{martian}
+% \AddTrackedIsoCodes{martian}
+% \AddTrackedIsoLanguage{3166-1}{XX}{uppermartian}
+% % other attributes such as
+% % \SetTrackedDialectVariant{uppermartian}{...}
+% }
+%
+% \ProcessOptions
+%
+% \newcommand*{\selectlanguage}[1]{%
+% \def\languagename{#1}%
+% % other stuff
+% \SetCurrentTrackedDialect{#1}%
+% }
+%
+% \AnyTrackedLanguages
+% {
+% \ForEachTrackedDialect{\thisdialect}
+% {%
+% \TrackLangRequireDialect{alien}{\thisdialect}
+% }
+% }
+%\end{verbatim}
+%The caption commands and language set up are in the files
+%\texttt{alien-}\meta{tag}\texttt{.ldf} as in the examples from
+%\sectionref{sec:examples}. This allows for the user having already
+%loaded \styfmt{tracklang} before \styfmt{alien} and used \cs{TrackLangFromEnv} to pick up
+%the locale from the operating system's environment variables.
+%(For example, they may have \envvar{LANG} set to \texttt{xx\_YY}.)
+%
+%The resource files may need to set the mapping between the
+%\styfmt{tracklang} dialect label and the \styfmt{alien} dialect
+%label. For example, in \texttt{alien-xx-YY.ldf}:
+%\begin{verbatim}
+%\TrackLangProvidesResource{xx-YY}
+%
+%\TrackLangRequireResource{martian}% load common elements
+%
+%\newcommand{\captionslowermartian}{%
+% \captionsmartian
+% \def\contentsname{X'flurp}% regional variation
+%}
+%
+%\SetTrackedDialectLabelMap{\CurrentTrackedDialect}{lowermartian}
+%\end{verbatim}
+%
+%Now let's consider the case where \styfmt{tracklang} doesn't know
+%about the \texttt{martian} language. In this case the user can't
+%track the dialect until the root language has been defined, so the
+%user can't use \cs{TrackLangFromEnv} before using the \styfmt{alien}
+%package.
+%
+%With \styfmt{tracklang} v1.3. The new root language can be defined
+%with a minor adjustment to the above code:
+%\begin{verbatim}
+% \ProvidesPackage{alien}
+%
+% \input{tracklang}% needs v1.3
+%
+% \TrackLangIfKnownLang{martian}
+% {}% tracklang already knows about the martian language
+% {
+% % tracklang doesn't known about the martian language, so define it
+% % with ISO 639-1 (xx) and ISO 639-2 (xxx) codes:
+% \TrackLangNewLanguage{martian}{xx}{xxx}{}{}{}{Latn}
+% }
+%\end{verbatim}
+%The rest is as before.
+%
+%Now other package writers who want to provide support
+%for the Martian dialects can easily detect which language options
+%the user requested through my package, \emph{without needing to know
+%anything about my \styfmt{alien} package}.
+%
+%\StopEventually{%
+% \printindex[user]
+% \PrintCodeIndex
+% \PrintChanges
+%}
+%
+%
+%\chapter{The Code}
+%\iffalse
+% \begin{macrocode}
+%<*tracklang.sty>
+% \end{macrocode}
+%\fi
+%\changes{1.0}{2014-09-29}{Initial release}
+%\section{\LaTeX\ Code (\texttt{tracklang.sty})}
+% To ensure maximum portability this file only uses \LaTeX\ kernel
+% commands, rather than using more convenient commands provided by
+% packages such as \styfmt{etoolbox}.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tracklang}[2019/08/31 v1.3.7 (NLCT) Track Languages]
+% \end{macrocode}
+%\begin{macro}{\@tracklang@declareoption}
+% Set up package options.
+% \begin{macrocode}
+\providecommand*{\@tracklang@declareoption}[1]{%
+ \DeclareOption{#1}{\TrackPredefinedDialect{#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+% Load generic code:
+% \begin{macrocode}
+\input{tracklang}
+% \end{macrocode}
+% There are no other options as this package will typically
+% be loaded using \cs{RequirePackage} by a package. Explicitly
+% adding an option at that point might create a package option
+% clash. The declared package options are all the possible
+% language names that might be passed as a document class option.
+% (Also, adding any non-language options here will interfere
+% with \cs{@tracklang@declaredoptions}.)
+% \begin{macrocode}
+\let\@tracklang@declaredoptions\@declaredoptions
+\ProcessOptions
+% \end{macrocode}
+% Unset \cs{@tracklang@declareoption}:
+% \begin{macrocode}
+\let\@tracklang@declareoption\@gobble
+% \end{macrocode}
+%
+% In the event that the language hasn't been supplied through the
+% package options (or through the class options, which the package
+% options should process provided the document class has used the
+% standard option declarations) we need to check if any of the known
+% language packages have been loaded. This is a bit risky as it
+% relies on the packages not changing their internal language
+% macros. It would be easier if all the language packages could
+% provide a reliable user interface to determine which languages
+% (and variants) have been loaded.
+%
+% \begin{macrocode}
+\ifx\@tracklang@languages\@empty
+% \end{macrocode}
+% First try \sty{babel}. If \sty{babel} has been loaded, the
+% languages are stored in \cs{bbl@loaded}, so check if this command
+% has been defined, and if it has add those languages.
+% \begin{macrocode}
+ \@ifundefined{bbl@loaded}%
+ {%
+% \end{macrocode}
+% If \sty{translator} has been loaded, the languages are stored in
+% \cs{trans@languages}
+% \begin{macrocode}
+ \@ifundefined{trans@languages}
+ {%
+% \end{macrocode}
+% Has \sty{ngerman} been loaded?
+% \begin{macrocode}
+ \@ifpackageloaded{ngerman}%
+ {%
+ \@tracklang@add@ngerman
+ }%
+ {%
+% \end{macrocode}
+% Has \sty{german} been loaded?
+%\changes{1.3}{2016-10-07}{added test for german.sty}
+% \begin{macrocode}
+ \@ifpackageloaded{german}%
+ {%
+ \@tracklang@add@german
+ }%
+ {%
+% \end{macrocode}
+% Has \sty{polyglossia} been loaded?
+% \begin{macrocode}
+ \@ifpackageloaded{polyglossia}
+ {%
+% \end{macrocode}
+% \sty{polyglossia} sets \cs{\meta{lang}@loaded} for each loaded
+% language, so check this for all known languages. I don't know how
+% to consistently check for variants. (Conditionals such as
+% \cs{if@british@locale} are set immediately with
+% \cs{setotherlanguage} but are deferred to the start of the
+% document with \cs{setmainlanguage}, which is too late for
+% \styfmt{tracklang}.) Script names seem to be stored in
+% \cs{xpg:scripttag@\meta{language}} but again this doesn't seem to be set
+% for the main language until the start of the document.
+% New versions of \sty{polyglossia} store the list of loaded
+% languages in \cs{xpg@loaded}, so check if this is defined.
+%\changes{1.3}{2016-10-07}{removed hard-coded polyglossia language list}
+%\changes{1.3.5}{2018-02-21}{check for \cs{xpg@loaded}}
+% \begin{macrocode}
+ \@ifundefined{xpg@loaded}%
+ {%
+% \end{macrocode}
+%\cs{xpg@loaded} isn't defined, so iterate over known options and
+%check if the language has been loaded.
+% \begin{macrocode}
+ \PackageInfo{tracklang}{polyglossia loaded but
+ \string\xpg@loaded\space not defined. Will attempt
+ to track known languages.}%
+ \@for\this@language:=\@tracklang@declaredoptions\do{%
+ \@ifundefined{\this@language @loaded}%
+ {}%
+ {\@nameuse{@tracklang@add@\this@language}}%
+ }%
+ }%
+ {%
+ \@for\this@language:=\xpg@loaded\do{%
+ \@ifundefined{@tracklang@add@\this@language}%
+ {%
+ \PackageWarning{tracklang}%
+ {Adding unknown polyglossia language `\this@language'}%
+% \end{macrocode}
+%\changes{1.3.7}{2019-08-31}{corrected misspelt command}
+% \begin{macrocode}
+ \AddTrackedLanguage{\this@language}%
+ }%
+ {\@nameuse{@tracklang@add@\this@language}}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% None of the known packages have been loaded, so do nothing in case
+% another package wants to load this one before setting up the
+% language options. However, if at this point \sty{babel} has been
+% loaded, then it's an older version that hasn't defined
+% \cs{bbl@loaded} so check for this.
+% \begin{macrocode}
+ \@ifpackageloaded{babel}
+ {%
+ \PackageInfo{tracklang}{babel loaded but
+ \string\bbl@loaded\space not defined. Will attempt
+ to track known languages.}%
+ \@for\this@language:=\@tracklang@declaredoptions\do{%
+ \@ifundefined{captions\this@language}%
+ {}%
+ {\@nameuse{@tracklang@add@\this@language}}%
+ }%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Add from \sty{translator}.
+% If \sty{translator} has been loaded, the language names are
+% stored in \cs{trans@languages} but these are labels used by
+% \sty{translator}, so some mapping is required.
+% \begin{macrocode}
+ \let\@tracklang@add@Acadian\@tracklang@add@acadian
+ \let\@tracklang@add@French\@tracklang@add@french
+ \let\@tracklang@add@Afrikaans\@tracklang@add@afrikaans
+ \let\@tracklang@add@Dutch\@tracklang@add@dutch
+ \let\@tracklang@add@AmericanEnglish\@tracklang@add@american
+ \let\@tracklang@add@Austrian\@tracklang@add@austrian
+ \@namedef{@tracklang@add@Austrian1997}{\@tracklang@add@naustrian}
+ \let\@tracklang@add@Bahasa\@tracklang@add@bahasa
+ \let\@tracklang@add@Basque\@tracklang@add@basque
+ \let\@tracklang@add@Brazilian\@tracklang@add@brazil
+ \let\@tracklang@add@Portuguese\@tracklang@add@portuguese
+ \let\@tracklang@add@Breton\@tracklang@add@breton
+ \let\@tracklang@add@BritishEnglish\@tracklang@add@british
+ \let\@tracklang@add@Bulgarian\@tracklang@add@bulgarian
+ \let\@tracklang@add@Canadian\@tracklang@add@canadian
+ \let\@tracklang@add@Canadien\@tracklang@add@canadien
+ \let\@tracklang@add@Catalan\@tracklang@add@catalan
+ \let\@tracklang@add@Croatian\@tracklang@add@croatian
+ \let\@tracklang@add@Czech\@tracklang@add@czech
+ \let\@tracklang@add@Danish\@tracklang@add@danish
+ \let\@tracklang@add@Dutch\@tracklang@add@dutch
+ \let\@tracklang@add@English\@tracklang@add@english
+ \let\@tracklang@add@Esperanto\@tracklang@add@esperanto
+ \let\@tracklang@add@Estonian\@tracklang@add@estonian
+ \let\@tracklang@add@Finnish\@tracklang@add@finnish
+ \let\@tracklang@add@French\@tracklang@add@french
+ \let\@tracklang@add@Galician\@tracklang@add@galician
+ \let\@tracklang@add@German\@tracklang@add@german
+ \@namedef{@tracklang@add@German1997}{\@tracklang@add@ngerman}
+ \let\@tracklang@add@Greek\@tracklang@add@greek
+ \let\@tracklang@add@Polutoniko\@tracklang@add@polutoniko
+ \let\@tracklang@add@Hebrew\@tracklang@add@hebrew
+ \let\@tracklang@add@Hungarian\@tracklang@add@hungarian
+ \let\@tracklang@add@Icelandic\@tracklang@add@icelandic
+ \let\@tracklang@add@Irish\@tracklang@add@irish
+ \let\@tracklang@add@Italian\@tracklang@add@italian
+ \let\@tracklang@add@Latin\@tracklang@add@latin
+ \let\@tracklang@add@LowerSorbian\@tracklang@add@lowersorbian
+ \let\@tracklang@add@Magyar\@tracklang@add@magyar
+ \let\@tracklang@add@Nynorsk\@tracklang@add@nynorsk
+ \let\@tracklang@add@Norsk\@tracklang@add@norsk
+ \let\@tracklang@add@Polish\@tracklang@add@polish
+ \let\@tracklang@add@Portuguese\@tracklang@add@portuguese
+ \let\@tracklang@add@Romanian\@tracklang@add@romanian
+ \let\@tracklang@add@Russian\@tracklang@add@russian
+ \let\@tracklang@add@Scottish\@tracklang@add@scottish
+ \let\@tracklang@add@Serbian\@tracklang@add@serbian
+ \let\@tracklang@add@Slovak\@tracklang@add@slovak
+ \let\@tracklang@add@Slovene\@tracklang@add@slovene
+ \let\@tracklang@add@Spanish\@tracklang@add@spanish
+ \let\@tracklang@add@Swedish\@tracklang@add@swedish
+ \let\@tracklang@add@Turkish\@tracklang@add@turkish
+ \let\@tracklang@add@Ukrainian\@tracklang@add@ukrainian
+ \let\@tracklang@add@UpperSorbian\@tracklang@add@uppersorbian
+ \let\@tracklang@add@Welsh\@tracklang@add@welsh
+% \end{macrocode}
+% Now iterate through the declared languages:
+% \begin{macrocode}
+ \@for\this@language:=\trans@languages\do{%
+ \@ifundefined{@tracklang@add@\this@language}{}%
+ {\@nameuse{@tracklang@add@\this@language}}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Add from \sty{babel}
+% \begin{macrocode}
+ \@for\this@language:=\bbl@loaded\do{%
+ \@ifundefined{@tracklang@add@\this@language}%
+ {%
+ \PackageWarning{tracklang}%
+ {Adding unknown babel language `\this@language'}%
+% \end{macrocode}
+%\changes{1.3.7}{2019-08-31}{corrected misspelt command}
+% \begin{macrocode}
+ \AddTrackedLanguage{\this@language}%
+ }%
+ {\@nameuse{@tracklang@add@\this@language}}%
+ }%
+% \end{macrocode}
+% If \sty{babel} has been loaded with \pkgoptfmt{serbian}, then
+% the script needs to be set to \texttt{Latn}. (The Cyrillic
+% script is provided with \pkgoptfmt{serbianc}.)
+% \begin{macrocode}
+ \ifx\captionsserbian\undefined
+ \else
+ \SetTrackedDialectScript{serbian}{Latn}%
+ \fi
+ }
+% \end{macrocode}
+% End of check for language packages
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tracklang.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tracklang.tex>
+% \end{macrocode}
+%\fi
+%\section{Generic Code (\texttt{tracklang.tex})}
+% Does the category code of \verb|@| need changing?
+%\changes{1.3}{2016-10-07}{added check for @ category code}
+%\begin{macro}{\@tracklang@restore@at}
+% \begin{macrocode}
+\ifnum\catcode`\@=11\relax
+ \def\@tracklang@restore@at{}%
+\else
+ \expandafter\edef\csname @tracklang@restore@at\endcsname{%
+ \noexpand\catcode`\noexpand\@=\number\catcode`\@\relax
+ }%
+ \catcode`\@=11\relax
+\fi
+% \end{macrocode}
+%\end{macro}
+% First check if this file has already been loaded:
+% \begin{macrocode}
+\ifx\@tracklang@languages\undefined
+\else
+ \@tracklang@restore@at
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+% Version info.
+% \begin{macrocode}
+\expandafter\def\csname ver@tracklang.tex\endcsname{%
+ 2019/08/31 v1.3.7 (NLCT) Track Languages Generic Code}
+% \end{macrocode}
+% Define a long command for determining the existence of a control
+% sequence by its name. (\cs{relax} is considered undefined.)
+%\begin{macro}{\@tracklang@ifundef}
+% \begin{macrocode}
+\long\def\@tracklang@ifundef#1#2#3{%
+ \ifcsname#1\endcsname
+ \expandafter\ifx\csname #1\endcsname\relax
+ #2%
+ \else
+ #3%
+ \fi
+ \else
+ \expandafter\ifx\csname #1\endcsname\relax
+ #2%
+ \else
+ #3%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\changes{1.3}{2016-10-07}{added check for \cs{ifcsname}}
+%\cs{ifcsname} is an e\TeX\ primitive. Need to check if it's
+%defined.
+% \begin{macrocode}
+\ifx\ifcsname\undefined
+% \end{macrocode}
+%Not using e\TeX.
+% \begin{macrocode}
+ \long\def\@tracklang@ifundef#1#2#3{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ #2%
+ \else
+ #3%
+ \fi
+ }
+% \end{macrocode}
+%Can't have an else part here as \TeX\ won't recognise
+%\cs{ifcsname} and we'll have an unmatched end brace.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+% The shell escape stuff needs the Plain \TeX\ version of
+% \cs{input}. This is \cs{@@input} if we're using \LaTeX.
+%\begin{macro}{\@tracklang@input}
+% \begin{macrocode}
+\ifx\@@input\undefined
+ \let\@tracklang@input\input
+\else
+ \let\@tracklang@input\@@input
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+% Provide some commands in case the \LaTeX\ kernel hasn't been loaded.
+%\begin{macro}{\@tracklang@nnil}
+% \begin{macrocode}
+\ifx\@nnil\undefined
+ \def\@tracklang@nnil{\@nil}
+\else
+ \let\@tracklang@nnil\@nnil
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@for}
+% \begin{macrocode}
+\ifx\@for\undefined
+ \long\def\@tracklang@for#1:=#2\do#3{%
+ \expandafter\def\expandafter\@fortmp\expandafter{#2}%
+ \ifx\@fortmp\empty
+ \else
+ \expandafter
+ \@tracklang@forloop #2,\@nil,\@nil\@@ #1{#3}%
+ \fi
+ }
+ \long\def\@tracklang@forloop#1,#2,#3\@@ #4#5{%
+ \def #4{#1}%
+ \ifx#4\@tracklang@nnil
+ \else
+ #5%
+ \def #4{#2}%
+ \ifx#4\@tracklang@nnil
+ \else
+ #5%
+ \@tracklang@iforloop #3\@@ #4{#5}%
+ \fi
+ \fi
+ }
+ \long\def\@tracklang@iforloop#1,#2\@@ #3#4{%
+ \def#3{#1}%
+ \ifx#3\@tracklang@nnil
+ \expandafter
+ \@tracklang@fornoop
+ \else
+ #4\relax
+ \expandafter\@tracklang@iforloop
+ \fi
+ #2\@@ #3{#4}%
+ }
+ \long\def\@tracklang@fornoop#1\@@ #2#3{}
+\else
+ \let\@tracklang@for\@for
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@namedef}
+% \begin{macrocode}
+\ifx\@namedef\undefined
+ \def\@tracklang@namedef#1{\expandafter\def\csname#1\endcsname}
+\else
+ \let\@tracklang@namedef\@namedef
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@enamedef}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@enamedef#1{\expandafter\edef\csname#1\endcsname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@nameuse}
+%\changes{1.3}{2016-10-07}{added check for undef}
+% \begin{macrocode}
+\def\@tracklang@nameuse#1{%
+ \@tracklang@ifundef{#1}{}{\csname#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@sanitize}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\ifx\@onelevel@sanitize\undefined
+ \def\@tracklang@sanitize#1{%
+ \edef#1{\expandafter\@tracklang@strip@prefix\meaning#1}%
+ }
+ \def\@tracklang@strip@prefix#1>{}
+\else
+ \let\@tracklang@sanitize\@onelevel@sanitize
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@firstoftwo}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@firstoftwo#1#2{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@secondoftwo}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@secondoftwo#1#2{#2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@err}
+%\changes{1.3.4}{2017-03-25}{fixed typo in \cs{errhelp} command name}
+% \begin{macrocode}
+\ifx\PackageError\undefined
+ \def\@tracklang@err#1#2{%
+ \errhelp{#2}%
+ \errmessage{tracklang: #1}}
+\else
+ \def\@tracklang@err#1#2{\PackageError{tracklang}{#1}{#2}}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifTrackLangShowWarnings}
+%\changes{1.3}{2016-10-07}{new}
+%Allow user to switch warnings on or off.
+% \begin{macrocode}
+\newif\ifTrackLangShowWarnings
+\TrackLangShowWarningstrue
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@pkgwarn}
+%\changes{1.3.4}{2017-03-25}{new}
+%Provided for related packages such as \sty{texosquery}.
+% \begin{macrocode}
+\ifx\PackageWarning\undefined
+ \def\@tracklang@pkgwarn#1#2{%
+ \ifTrackLangShowWarnings
+ {%
+ \newlinechar=`\^^J
+ \def\MessageBreak{^^J}%
+ \message{^^J#1 Warning: #2 on line \the\inputlineno.^^J}%
+ }%
+ \fi
+ }
+\else
+ \def\@tracklang@pkgwarn#1#2{%
+ \ifTrackLangShowWarnings
+ \PackageWarning{#1}{#2}%
+ \fi
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@warn}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@warn#1{\@tracklang@pkgwarn{tracklang}{#1}}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifTrackLangShowInfo}
+%\changes{1.3}{2016-10-07}{new}
+%Allow user to switch information messages on or off.
+% \begin{macrocode}
+\newif\ifTrackLangShowInfo
+\TrackLangShowInfotrue
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@info}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\ifx\PackageInfo\undefined
+ \def\@tracklang@info#1{%
+ \ifTrackLangShowInfo
+ {%
+ \newlinechar=`\^^J
+ \def\MessageBreak{^^J}%
+ \message{^^Jtracklang Info: #1 on line \the\inputlineno.^^J}%
+ }%
+ \fi
+ }%
+\else
+ \def\@tracklang@info#1{%
+ \ifTrackLangShowInfo
+ \PackageInfo{tracklang}{#1}%
+ \fi
+ }%
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@IfFileExists}
+% \begin{macrocode}
+\ifx\IfFileExists\undefined
+ \long\def\@tracklang@IfFileExists#1#2#3{%
+ \openin0=#1 %
+ \ifeof0\relax
+ \def\@tracklang@tmp{#3}%
+ \else
+ \closein0\relax
+ \edef\@filef@und{#1 }%
+ \def\@tracklang@tmp{#2}%
+ \fi
+ \@tracklang@tmp
+ }
+
+\else
+ \let\@tracklang@IfFileExists\IfFileExists
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%Provide a way to query the environment variables \envvar{LC\_ALL}
+%or \envvar{LANG} to determine the region and language. The result
+% is stored in \cs{TrackLangEnv} if it can be obtained. If
+% it can't be obtained, \cs{TrackLangEnv} is set to empty.
+% Also define \cs{TrackLangQueryOtherEnv}\marg{name} to query
+% \texttt{LC\_ALL}, \meta{name}, \texttt{LANG}.
+% For example
+%\begin{verbatim}
+%\TrackLangQueryOtherEnv{LC\_MONETARY}
+%\end{verbatim}
+%Note that there's not much that can be done from within \TeX\
+%for the C or POSIX locale or a locale starting with a slash, so
+%provide a check for them.
+%\begin{macro}{\@tracklang@checklocale}
+% \begin{macrocode}
+\def\@tracklang@checklocale{%
+ \ifx\TrackLangEnv\empty
+ \else
+ \ifx\TrackLangEnv\@tracklang@locale@posix
+ \def\TrackLangEnv{}%
+ \else
+ \ifx\TrackLangEnv\@tracklang@locale@c
+ \def\TrackLangEnv{}%
+ \else
+ \expandafter\@@tracklang@checklocale
+ \TrackLangEnv\empty\relax
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@tracklang@checklocale}
+%\changes{1.3}{2016-10-07}{new}
+%Check for leading slash.
+% \begin{macrocode}
+\def\@@tracklang@checklocale#1#2\relax{%
+ \ifx#1/\relax
+ \def\TrackLangEnv{}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@locale@posix}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@locale@posix{POSIX}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@locale@c}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@locale@c{C}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\ifx\directlua\undefined
+% \end{macrocode}
+%We can't use Lua, so we'll have to use the shell escape if it's
+%enabled. First determine if the shell escape is available.
+%\begin{macro}{\@tracklang@tryshellescape}
+%No shell escape.
+% \begin{macrocode}
+ \def\@tracklang@tryshellescape#1{%
+ \def\TrackLangQueryEnv{%
+ \@tracklang@warn{\string\TrackLangQueryEnv\space
+ non-operational as shell escape has been disabled}%
+ \def\TrackLangEnv{}%
+ }%
+ \def\TrackLangQueryOtherEnv##1{%
+ \@tracklang@warn{\string\TrackLangQueryOtherEnv{##1}\space
+ non-operational as shell escape has been disabled}%
+ \def\TrackLangEnv{}%
+ }%
+ }%
+% \end{macrocode}
+%\changes{1.3.2}{2016-10-11}{added check if \cs{shellescape} has
+%been set to \cs{relax}}
+% \begin{macrocode}
+ \ifx\pdfshellescape\undefined
+ \ifx\shellescape\undefined
+% \end{macrocode}
+% Can't determine if the shell escape has been enabled.
+% \begin{macrocode}
+ \def\@tracklang@tryshellescape#1{%
+ \def\TrackLangQueryEnv{%
+ \@tracklang@warn{\string\TrackLangQueryEnv\space
+ non-operational as can't determine if the
+ shell escape has been enabled. (Consider using
+ eTeX or pdfTeX.)}%
+ \def\TrackLangEnv{}%
+ }%
+ \def\TrackLangQueryOtherEnv##1{%
+ \@tracklang@warn{\string\TrackLangQueryOtherEnv{##1}\space
+ non-operational as can't determine if the
+ shell escape has been enabled. (Consider using
+ eTeX or pdfTeX.)}%
+ \def\TrackLangEnv{}%
+ }%
+ }%
+ \else
+% \end{macrocode}
+%\cs{shellescape} is defined. Check no one's been messing around
+%with it and set it to \cs{relax}.
+% \begin{macrocode}
+ \ifx\shellescape\relax
+ \else
+ \ifnum\shellescape=0\relax
+ \else
+ \def\@tracklang@tryshellescape#1{#1}%
+ \fi
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+%\cs{pdfshellescape} is defined. Check no one's been messing around
+%with it and set it to \cs{relax}. (Default no-op already set.)
+% \begin{macrocode}
+ \ifx\pdfshellescape\relax
+% \end{macrocode}
+%\cs{pdfshellescape} has been set to \cs{relax}. Is it possible that
+%\cs{shellescape} is available?
+% \begin{macrocode}
+ \ifx\shellescape\undefined
+ \else
+ \ifx\shellescape\relax
+ \else
+% \end{macrocode}
+%\cs{shellescape} is available.
+% \begin{macrocode}
+ \ifnum\shellescape=0\relax
+ \else
+ \def\@tracklang@tryshellescape#1{#1}%
+ \fi
+ \fi
+ \fi
+ \else
+ \ifnum\pdfshellescape=0\relax
+ \else
+ \def\@tracklang@tryshellescape#1{#1}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+%\end{macro}
+% Try the shell escape:
+% \begin{macrocode}
+ \@tracklang@tryshellescape
+ {%
+% \end{macrocode}
+%\begin{macro}{\TrackLangQueryEnv}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+ \def\TrackLangQueryEnv{%
+ \begingroup\endlinechar=-1\relax
+ \everyeof{\noexpand}%
+ \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LC_ALL" }}\x
+ \@tracklang@checklocale
+ \ifx\TrackLangEnv\empty
+ \begingroup\endlinechar=-1\relax
+ \everyeof{\noexpand}%
+ \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LANG" }}\x
+% \end{macrocode}
+%Not sure if a path is likely to occur with \app{kpsewhich}
+%but check for it just in case.
+% \begin{macrocode}
+ \@tracklang@checklocale
+ \ifx\TrackLangEnv\empty
+% \end{macrocode}
+% Try texosquery if available.
+% \begin{macrocode}
+ \ifx\TeXOSQueryLocale\undefined
+ \@tracklang@warn{Locale environment variables
+ unavailable (tried LC\string_ALL and LANG)}%
+ \else
+ \@tracklang@info{Using texosquery to find locale}%
+ \TeXOSQueryLocale\TrackLangEnv
+ \ifx\TrackLangEnv\empty
+ \@tracklang@warn{Locale can't be found
+ (tried querying LC\string_ALL and LANG variables and
+ tried using texosquery)}%
+ \fi
+ \fi
+ \fi
+ \fi
+ }%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\TrackLangQueryOtherEnv}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+ \def\TrackLangQueryOtherEnv#1{%
+ \begingroup\endlinechar=-1\relax
+ \everyeof{\noexpand}%
+ \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LC_ALL" }}\x
+ \@tracklang@checklocale
+ \ifx\TrackLangEnv\empty
+ \begingroup\endlinechar=-1\relax
+ \everyeof{\noexpand}%
+ \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value #1" }}\x
+ \@tracklang@checklocale
+ \ifx\TrackLangEnv\empty
+ \begingroup\endlinechar=-1\relax
+ \everyeof{\noexpand}%
+ \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LANG"}}\x
+ \@tracklang@checklocale
+ \ifx\TrackLangEnv\empty
+% \end{macrocode}
+% Try texosquery if available.
+% \begin{macrocode}
+ \ifx\TeXOSQueryLocale\undefined
+ \@tracklang@warn{Locale environment variables unavailable
+ (tried LC\string_ALL, #1 and LANG)}%
+ \else
+ \@tracklang@info{Using texosquery to find locale}%
+ \TeXOSQueryLocale\TrackLangEnv
+ \ifx\TrackLangEnv\empty
+ \@tracklang@warn{Locale can't be found
+ (tried querying LC\string_ALL, #1 and LANG variables and
+ tried using texosquery)}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ }%
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+ }%
+\else
+% \end{macrocode}
+%\cs{directlua} is defined, so we can query it through Lua:
+%\begin{macro}{\TrackLangQueryEnv}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+ \def\TrackLangQueryEnv{%
+ \edef\TrackLangEnv{\directlua{
+ l = os.getenv("LC_ALL")
+ if l == nil or l == "" or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l = os.getenv("LANG")
+ if l == nil or l == "" or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l=os.setlocale(nil)
+ if l == nil or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l = ""
+ end
+ end
+ end
+ tex.print(l)}}%
+ \ifx\TrackLangEnv\empty
+% \end{macrocode}
+% Try texosquery if available.
+% \begin{macrocode}
+ \ifx\TeXOSQueryLocale\undefined
+ \@tracklang@warn{Locale can't be found through Lua
+ (tried querying LC\string_ALL and LANG variables and
+ os.setlocale(nil))}%
+ \else
+ \TeXOSQueryLocale\TrackLangEnv
+ \ifx\TrackLangEnv\empty
+ \@tracklang@warn{Locale can't be found through Lua
+ (tried querying LC\string_ALL and LANG variables and
+ os.setlocale(nil) and tried using texosquery)}%
+ \fi
+ \fi
+ \fi
+ }
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\TrackLangQueryOtherEnv}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+ \def\TrackLangQueryOtherEnv#1{%
+ \edef\TrackLangEnv{\directlua{
+ l = os.getenv("LC_ALL")
+ if l == nil or l == "" or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l = os.getenv("#1")
+ if l == nil or l == "" or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l = os.getenv("LANG")
+ if l == nil or l == "" or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l=os.setlocale(nil)
+ if l == nil or l == "C" or l == "POSIX"
+ or string.find(l, "^/") then
+ l = ""
+ end
+ end
+ end
+ end
+ tex.print(l}}%
+ \ifx\TrackLangEnv\empty
+% \end{macrocode}
+% Try texosquery if available.
+% \begin{macrocode}
+ \ifx\TeXOSQueryLocale\undefined
+ \@tracklang@warn{Locale can't be found through Lua
+ (tried querying LC\string_ALL, #1 and LANG variables and
+ os.setlocale(nil))}%
+ \else
+ \TeXOSQueryLocale\TrackLangEnv
+ \ifx\TrackLangEnv\empty
+ \@tracklang@warn{Locale can't be found through Lua
+ (tried querying LC\string_ALL, #1 and LANG variables and
+ os.setlocale(nil) and tried using texosquery)}%
+ \fi
+ \fi
+ \fi
+ }
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% Allowed formats for the localisation environment variables are
+%\begin{definition}
+%\meta{iso-lang}[\_\meta{iso-territory}][\texttt{.}\meta{encoding}][@\meta{modifier}]
+%\end{definition}
+%(where the square brackets above indicate an optional component not that
+%there are literal square brackets.) This is a bit fiddly, so it
+%needs to be broken up into manageable chunks.
+%
+%\begin{macro}{\TrackLangParseFromEnv}
+%\changes{1.3}{2016-10-07}{new}
+%Parse \cs{TrackLangEnv}, if it has been
+%set, and set \cs{TrackLangEnvLang}, \cs{TrackLangEnvTerritory}
+% and \cs{TrackLangEnvCodeSet}. If the information is unavailable,
+% the relevant commands will be set to empty. Use
+% \cs{TrackLangFromEnv} to query, parse and set.
+% \begin{macrocode}
+\def\TrackLangParseFromEnv{%
+ \ifx\TrackLangEnv\undefined
+ \@tracklang@warn{\string\TrackLangParseFromEnv\space
+ non-operational as \string\TrackLangEnv\space hasn't been
+ defined}%
+ \def\TrackLangEnvLang{}%
+ \def\TrackLangEnvTerritory{}%
+ \def\TrackLangEnvCodeSet{}%
+ \def\TrackLangEnvModifier{}%
+ \else
+ \ifx\TrackLangEnv\empty
+ \@tracklang@warn{\string\TrackLangParseFromEnv\space
+ non-operational as \string\TrackLangEnv\space is empty}%
+ \def\TrackLangEnvLang{}%
+ \def\TrackLangEnvTerritory{}%
+ \def\TrackLangEnvCodeSet{}%
+ \def\TrackLangEnvModifier{}%
+ \else
+ \@tracklang@parse@locale{\TrackLangEnv}%
+ \let\TrackLangEnvLang\@TrackLangEnvLang
+ \let\TrackLangEnvTerritory\@TrackLangEnvTerritory
+ \let\TrackLangEnvCodeSet\@TrackLangEnvCodeSet
+ \let\TrackLangEnvModifier\@TrackLangEnvModifier
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@parse@locale}
+%\changes{1.3}{2016-10-07}{new}
+%Parse localisation format.
+% \begin{macrocode}
+\def\@tracklang@parse@locale#1{%
+% \end{macrocode}
+%Initialise.
+% \begin{macrocode}
+ \def\@TrackLangEnvLang{}%
+ \def\@TrackLangEnvSubLang{}%
+ \def\@TrackLangEnvFirstSubLang{}%
+ \def\@TrackLangEnvTerritory{}%
+ \def\@TrackLangEnvCodeSet{}%
+ \def\@TrackLangEnvVariant{}%
+ \def\@TrackLangEnvModifier{}%
+ \def\@TrackLangEnvScript{}%
+ \def\@TrackLangEnvAdditional{}%
+% \end{macrocode}
+%Just in case argument is empty or \cs{relax}.
+% \begin{macrocode}
+ \expandafter\ifx\expandafter\relax#1\relax
+ \else
+% \end{macrocode}
+% Parse codeset and modifier first.
+% \begin{macrocode}
+ \expandafter\@tracklang@parseenv
+ #1..\relax\@tracklang@end@parseenv\@tracklang@result
+% \end{macrocode}
+% Parse language and territory.
+% \begin{macrocode}
+ \ifx\@tracklang@result\empty
+ \else
+ \expandafter\@tracklang@split@underscoreorhyp\expandafter
+ {\@tracklang@result}%
+ \let\@TrackLangEnvLang\@tracklang@split@pre
+ \let\@TrackLangEnvTerritory\@tracklang@split@post
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@split@underscoreorhyp}
+%\changes{1.3}{2016-10-07}{new}
+%Split on either an underscore or a hyphen and store the results in
+%\cs{@tracklang@split@pre} and \cs{@tracklang@split@post}
+% \begin{macrocode}
+\def\@tracklang@split@underscoreorhyp#1{%
+% \end{macrocode}
+%First try to split on an underscore.
+% \begin{macrocode}
+ \@tracklang@split@underscore{#1}%
+% \end{macrocode}
+%If the post part was empty, try to split on hyphen instead.
+% \begin{macrocode}
+ \ifx\@tracklang@split@post\empty
+ \@tracklang@split@hyphen{#1}%
+% \end{macrocode}
+%If the post part was empty, maybe the underscore has had its
+%category code changed to 12.
+% \begin{macrocode}
+ \ifx\@tracklang@split@post\empty
+ \@tracklang@split@otherunderscore{#1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@split@underscore}
+%\changes{1.3}{2016-10-07}{new}
+%Split on an underscore and store the results in
+%\cs{@tracklang@split@pre} and \cs{@tracklang@split@post}. First
+%make sure that the underscore has its normal subscript category code.
+% \begin{macrocode}
+{
+ \catcode`\_8\relax
+ \gdef\@tracklang@split@underscore#1{%
+ \@@tracklang@split@underscore#1__\relax\@tracklang@end@split@underscore
+ }
+ \gdef\@@tracklang@split@underscore#1_#2_#3\@tracklang@end@split@underscore{%
+ \def\@tracklang@split@pre{#1}%
+ \ifx\relax#3\relax
+ \def\@tracklang@split@post{#2}%
+ \else
+ \@tracklang@split@underscore@remainder#2_#3%
+ \fi
+ }
+ \gdef\@tracklang@split@underscore@remainder#1__\relax{%
+ \def\@tracklang@split@post{#1}%
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@split@otherunderscore}
+%\changes{1.3}{2016-10-07}{new}
+%As above but where underscore has catcode 12.
+% \begin{macrocode}
+{
+ \catcode`\_12\relax
+ \gdef\@tracklang@split@otherunderscore#1{%
+ \@@tracklang@split@otherunderscore#1__\relax\@tracklang@end@split@underscore
+ }
+ \gdef\@@tracklang@split@otherunderscore#1_#2_#3\@tracklang@end@split@underscore{%
+ \def\@tracklang@split@pre{#1}%
+ \ifx\relax#3\relax
+ \def\@tracklang@split@post{#2}%
+ \else
+ \@tracklang@split@otherunderscore@remainder#2_#3%
+ \fi
+ }
+ \gdef\@tracklang@split@otherunderscore@remainder#1__\relax{%
+ \def\@tracklang@split@post{#1}%
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@split@hyphen}
+%\changes{1.3}{2016-10-07}{new}
+%Split on a hyphen and store the results in
+%\cs{@tracklang@split@pre} and \cs{@tracklang@split@post}
+% \begin{macrocode}
+{
+ \catcode`\-12\relax
+ \gdef\@tracklang@split@hyphen#1{%
+ \@@tracklang@split@hyphen#1--\relax\@tracklang@end@split@hyphen
+ }
+ \gdef\@@tracklang@split@hyphen#1-#2-#3\@tracklang@end@split@hyphen{%
+ \def\@tracklang@split@pre{#1}%
+ \ifx\relax#3\relax
+ \def\@tracklang@split@post{#2}%
+ \else
+ \@tracklang@split@hyphen@remainder#2-#3%
+ \fi
+ }
+ \gdef\@tracklang@split@hyphen@remainder#1--\relax{%
+ \def\@tracklang@split@post{#1}%
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@parseenv}
+%\changes{1.3}{2016-10-07}{new}
+%Parse for the codeset. The first argument will be the
+%language and (optionally) the territory. So the final argument is the control
+%sequence to use to store the first argument, which can then be
+%split.
+% \begin{macrocode}
+\gdef\@tracklang@parseenv#1.#2.#3\@tracklang@end@parseenv#4{%
+ \def\@TrackLangEnvCodeSet{#2}%
+ \def#4{#1}%
+ \ifx\@TrackLangEnvCodeSet\empty
+ \tracklangparsemod#4%
+ \else
+ \tracklangparsemod\@TrackLangEnvCodeSet
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\tracklangparsemod}
+% Extract the modifier from the code set.
+% The \texttt{@} is rather awkward as we need to change its category
+% code as it's likely to be set to 12 within \cs{TrackLangEnv}.
+% So change the category code of \texttt{@} to 12, but this means we
+% can't use it in the command name, so although these are private
+% internal commands they don't look like internal commands.)
+% \begin{macrocode}
+{\catcode`\@=12\relax
+ \gdef\tracklangparsemod#1{
+ \expandafter\tracklangparseenvatmod#1@@\relax\tracklangendparseenvatmod
+ \let#1\tracklangtmp
+ }%
+ \gdef\tracklangparseenvatmod#1@#2@#3\tracklangendparseenvatmod{%
+ \def\tracklangtmp{#1}%
+% \end{macrocode}
+%Need to use \cs{csname} here as can't use internal commands.
+% \begin{macrocode}
+ \expandafter\def\csname @TrackLangEnvModifier\endcsname{#2}%
+% \end{macrocode}
+%Sanitize in case it contains any special characters.
+% \begin{macrocode}
+ \csname @tracklang@sanitize\expandafter\endcsname
+ \csname @TrackLangEnvModifier\endcsname
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Internal Lists}
+%
+%\begin{macro}{\@tracklang@languages}
+% Provide a list to keep track of all the languages.
+% \begin{macrocode}
+\def\@tracklang@languages{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@dialects}
+% Provide a list to keep track of all the dialects. Here the
+% \qt{dialect} isn't necessarily an actual dialect but may be a
+% root language or a synonym. It will usually correspond to the
+% language name as specified by the user in the package option.
+% \begin{macrocode}
+\def\@tracklang@dialects{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifinlist}
+%\begin{definition}
+%\cs{@tracklang@ifinlist}\marg{item}\marg{list}\marg{true
+%part}\marg{false part}
+%\end{definition}
+%Checks if \meta{item} is in \meta{list}. (Performs a one-level
+%expansion on \meta{list} but no expansion on \meta{item}.)
+% \begin{macrocode}
+\def\@tracklang@ifinlist#1#2#3#4{%
+ \def\@tracklang@doifinlist##1,#1,##2\end@tracklang@doifinlist{%
+ \def\@before{##1}%
+ \def\@after{##2}%
+ }%
+ \expandafter\@tracklang@doifinlist\expandafter,#2,#1,\@nil
+ \end@tracklang@doifinlist
+ \ifx\@after\@tracklang@nnil
+% \end{macrocode}
+% not found
+% \begin{macrocode}
+ #4%
+ \else
+% \end{macrocode}
+% found
+% \begin{macrocode}
+ #3%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add}
+%\begin{definition}
+%\cs{@tracklang@add}\marg{item}\marg{list cs}
+%\end{definition}
+% Adds an item to the list given by \meta{list cs}. Does nothing if
+% \meta{item} is empty or is already in the list. The \meta{item} is
+% fully expanded before being added.
+% \begin{macrocode}
+\def\@tracklang@add#1#2{%
+% \end{macrocode}
+% First find out if the item is empty.
+% \begin{macrocode}
+ \edef\@tracklang@element{#1}%
+ \ifx\@tracklang@element\empty
+% \end{macrocode}
+% Item is empty, so do nothing.
+% \begin{macrocode}
+ \else
+ \expandafter\@tracklang@ifinlist\expandafter{\@tracklang@element}#2%
+ {%
+% \end{macrocode}
+% Already in list, so do nothing.
+% \begin{macrocode}
+ }%
+ {%
+% \end{macrocode}
+% Not in list, so add.
+% \begin{macrocode}
+ \ifx\empty#2\relax
+ \let#2\@tracklang@element
+ \else
+ \edef#2{#2,\@tracklang@element}%
+ \fi
+ }%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\AddTrackedDialect}
+%\begin{definition}
+%\cs{AddTrackedDialect}\marg{dialect name}\marg{language name}
+%\end{definition}
+% Add a dialect. (v1.3 switched from unexpanded to expanded def.
+% All labels should be expandable.)
+% \begin{macrocode}
+\def\AddTrackedDialect#1#2{%
+ \@tracklang@add{#1}{\@tracklang@dialects}%
+ \@tracklang@add{#2}{\@tracklang@languages}%
+ \@tracklang@enamedef{@tracklang@fromdialect@#1}{#2}%
+ \@tracklang@ifundef{@tracklang@todialect@#2}%
+ {\@tracklang@enamedef{@tracklang@todialect@#2}{#1}}%
+ {%
+ \def\@tracklang@lang{#1}%
+ \expandafter\@tracklang@add\expandafter\@tracklang@lang
+ \csname @tracklang@todialect@#2\endcsname
+ }%
+% \end{macrocode}
+% Provide a convenient way of referencing the last dialect to be
+% tracked.
+% \begin{macrocode}
+ \edef\TrackLangLastTrackedDialect{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\AddTrackedLanguage}
+%\begin{definition}
+%\cs{AddTrackedLanguage}\marg{language name}
+%\end{definition}
+% Add a dialect.
+% \begin{macrocode}
+\def\AddTrackedLanguage#1{%
+ \AddTrackedDialect{#1}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Known Languages}
+%\label{sec:code:knownlangs}
+%
+%\begin{macro}{\@tracklang@known@langs}
+%\changes{1.3}{2016-10-07}{new}
+%List of known (root) languages (that may or may not be tracked).
+% \begin{macrocode}
+\def\@tracklang@known@langs{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangNewLanguage}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangNewLanguage}\marg{language name}\marg{639-1
+%code}\marg{639-2 (T)}\marg{639-2 (B)}\marg{639-3}\marg{3166-1}\marg{default
+%script}
+%\end{definition}
+%Identifies a new language that may be tracked. The code
+%arguments may be empty if not available.
+%(v1.3 switched from unexpanded to expanded def.
+%All labels should be expandable.) Most
+%root languages don't have an associated country code as they're
+%spoken in multiple regions. The \meta{default script} is the
+%default script identified with the ISO 15924 alpha script code.
+%To reduce overheads, only define 639-3 if there's no 639-1 or 639-2
+%code.
+% \begin{macrocode}
+\def\TrackLangNewLanguage#1#2#3#4#5#6#7{%
+ \@tracklang@add{#1}{\@tracklang@known@langs}%
+ \edef\@tracklang@tmp{#2}%
+ \ifx\@tracklang@tmp\empty
+ \else
+ \@tracklang@enamedef{@tracklang@knownisolang@#2}{#1}%
+ \@tracklang@enamedef{@tracklang@knowniso@639@1@#1}{#2}%
+ \fi
+ \edef\@tracklang@tmp{#3}%
+ \ifx\@tracklang@tmp\empty
+ \else
+ \@tracklang@enamedef{@tracklang@knownisolang@#3}{#1}%
+ \@tracklang@enamedef{@tracklang@knowniso@639@2@#1}{#3}%
+ \fi
+ \edef\@tracklang@tmp{#4}%
+ \ifx\@tracklang@tmp\empty
+ \else
+ \@tracklang@enamedef{@tracklang@knowniso@639@2B@#1}{#4}%
+ \fi
+ \edef\@tracklang@tmp{#5}%
+ \ifx\@tracklang@tmp\empty
+ \else
+ \@tracklang@enamedef{@tracklang@knownisolang@#5}{#1}%
+ \@tracklang@enamedef{@tracklang@knowniso@639@3@#1}{#5}%
+ \fi
+ \edef\@tracklang@tmp{#6}%
+ \ifx\@tracklang@tmp\empty
+ \else
+ \@tracklang@enamedef{@tracklang@knowniso@3166@#1}{#6}%
+ \fi
+ \edef\@tracklang@tmp{#7}%
+ \ifx\@tracklang@tmp\empty
+ \else
+ \@tracklang@enamedef{@tracklang@knowniso@script@#1}{#7}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfKnownLang}\marg{language}\marg{true}\marg{false}
+%\end{definition}
+%Tests if \meta{language} is known (but not necessarily tracked).
+% \begin{macrocode}
+\def\TrackLangIfKnownLang#1#2#3{%
+ \expandafter\@tracklang@ifinlist\expandafter{#1}{\@tracklang@known@langs}%
+ {#2}%
+ {#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownIsoTwoLetterLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfKnownIsoTwoLetterLang}\marg{language}\marg{true}\marg{false}
+%\end{definition}
+%Checks if the given language has an ISO 639-1 language code
+%(but is not necessarily tracked).
+% \begin{macrocode}
+\def\TrackLangIfKnownIsoTwoLetterLang#1#2#3{%
+ \@tracklang@ifundef{@tracklang@knowniso@639@1@#1}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangGetKnownIsoTwoLetterLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangGetKnownIsoTwoLetterLang}\marg{language}
+%\end{definition}
+%Gets the ISO 639-1 language code for the given language.
+% \begin{macrocode}
+\def\TrackLangGetKnownIsoTwoLetterLang#1{%
+ \@tracklang@nameuse{@tracklang@knowniso@639@1@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownIsoThreeLetterLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfKnownIsoThreeLetterLang}\marg{language}\marg{true}\marg{false}
+%\end{definition}
+%Checks if the given language has an ISO 639-2 language code
+%(but is not necessarily tracked).
+% \begin{macrocode}
+\def\TrackLangIfKnownIsoThreeLetterLang#1#2#3{%
+ \@tracklang@ifundef{@tracklang@knowniso@639@2@#1}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangGetKnownIsoThreeLetterLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangGetKnownIsoThreeLetterLang}\marg{language}
+%\end{definition}
+%Gets the ISO 639-2 language code.
+% \begin{macrocode}
+\def\TrackLangGetKnownIsoThreeLetterLang#1{%
+ \@tracklang@nameuse{@tracklang@knowniso@639@2@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownIsoThreeLetterLangB}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfKnownIsoThreeLetterLangB}\marg{language}\marg{true}\marg{false}
+%\end{definition}
+%Checks if the given language has an ISO 639-2 (B) language code
+%(but is not necessarily tracked).
+% \begin{macrocode}
+\def\TrackLangIfKnownIsoThreeLetterLangB#1#2#3{%
+ \@tracklang@ifundef{@tracklang@knowniso@639@2B@#1}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangGetKnownIsoThreeLetterLangB}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangGetKnownIsoThreeLetterLangB}\marg{language}
+%\end{definition}
+%Gets the ISO 639-2 (B) language code.
+% \begin{macrocode}
+\def\TrackLangGetKnownIsoThreeLetterLangB#1{%
+ \@tracklang@nameuse{@tracklang@knowniso@639@2B@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownLangFromIso}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfKnownLangFromIso}\marg{ISO code}\marg{true}\marg{false}
+%\end{definition}
+%Checks if the given ISO language code (639-1 or 639-2 or 639-3) is
+%recognised (but not necessarily tracked).
+% \begin{macrocode}
+\def\TrackLangIfKnownLangFromIso#1#2#3{%
+ \@tracklang@ifundef{@tracklang@knownisolang@#1}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangGetKnownLangFromIso}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangGetKnownLangFromIso}\marg{ISO code}
+%\end{definition}
+%Gets the root language label from the given ISO code (639-1 or
+%639-2).
+% \begin{macrocode}
+\def\TrackLangGetKnownLangFromIso#1{%
+ \@tracklang@nameuse{@tracklang@knownisolang@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfHasKnownCountry}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfHasKnownCountry}\marg{language}\marg{true}\marg{false}
+%\end{definition}
+%Checks if the given language has an ISO 3166-1 country code
+%(but is not necessarily tracked).
+% \begin{macrocode}
+\def\TrackLangIfHasKnownCountry#1#2#3{%
+ \@tracklang@ifundef{@tracklang@knowniso@3166@#1}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangGetKnownCountry}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangGetKnownCountry}\marg{language}
+%\end{definition}
+%Fetches the ISO 3166-1 country code for the given language.
+% \begin{macrocode}
+\def\TrackLangGetKnownCountry#1{%
+ \@tracklang@nameuse{@tracklang@knowniso@3166@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangGetDefaultScript}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangGetDefaultScript}\marg{language}
+%\end{definition}
+% Gets the default script for the given root language label.
+% \begin{macrocode}
+\def\TrackLangGetDefaultScript#1{%
+ \@tracklang@nameuse{@tracklang@knowniso@script@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfHasDefaultScript}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfHasDefaultScript}\marg{language}\marg{true}\marg{false}
+%\end{definition}
+%If there's a default script for \meta{language}, do \meta{true} otherwise
+%do \meta{false}.
+% \begin{macrocode}
+\def\TrackLangIfHasDefaultScript#1#2#3{%
+ \@tracklang@ifundef{@tracklang@knowniso@script@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Mappings}
+%\label{sec:code:mappings}
+%
+%\begin{macro}{\AddTrackedIsoLanguage}
+%\begin{definition}
+%\cs{AddTrackedIsoLanguage}\marg{code type}\marg{code}\marg{language}
+%\end{definition}
+% Adds a~mapping between the given ISO code and language
+% name. There may be multiple mappings from an ISO code to a
+% language name, but only one mapping from a language name to an ISO
+% code. (v1.3 switched from unexpanded to expanded def.
+% All labels should be expandable.)
+% \begin{macrocode}
+\def\AddTrackedIsoLanguage#1#2#3{%
+ \@tracklang@enamedef{@tracklang@#1@isofromlang@#3}{#2}%
+ \@tracklang@ifundef{@tracklang@#1@isotolang@#2}%
+ {\@tracklang@enamedef{@tracklang@#1@isotolang@#2}{#3}}%
+ {%
+ \def\@tracklang@lang{#3}%
+ \expandafter\@tracklang@add\expandafter\@tracklang@lang
+ \csname @tracklang@#1@isotolang@#2\endcsname
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackedLanguageFromIsoCode}
+%\begin{definition}
+%\cs{TrackedLanguageFromIsoCode}\marg{code type}\marg{code}
+%\end{definition}
+% Fetches the language label (or labels) associated with the given code.
+% \begin{macrocode}
+\def\TrackedLanguageFromIsoCode#1#2{%
+ \@tracklang@nameuse{@tracklang@#1@isotolang@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackedIsoCodeFromLanguage}
+%\begin{definition}
+%\cs{TrackedIsoCodeFromLanguage}\marg{code type}\marg{language}
+%\end{definition}
+% Fetches the code associated with the given language or dialect.
+% \begin{macrocode}
+\def\TrackedIsoCodeFromLanguage#1#2{%
+ \@tracklang@nameuse{@tracklang@#1@isofromlang@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackedLanguageFromDialect}
+%\begin{definition}
+%\cs{TrackedLanguageFromDialect}\marg{dialect}
+%\end{definition}
+% Fetches the language name from the given dialect.
+% \begin{macrocode}
+\def\TrackedLanguageFromDialect#1{%
+ \@tracklang@nameuse{@tracklang@fromdialect@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackedDialectsFromLanguage}
+%\begin{definition}
+%\cs{TrackedDialectsFromLanguage}\marg{root language label}
+%\end{definition}
+% Fetches the tracked dialects whose language is given by \meta{root
+% language label}.
+% \begin{macrocode}
+\def\TrackedDialectsFromLanguage#1{%
+ \@tracklang@nameuse{@tracklang@todialect@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TwoLetterIsoCountryCode}
+% \begin{macrocode}
+\def\TwoLetterIsoCountryCode{3166-1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TwoLetterIsoLanguageCode}
+% \begin{macrocode}
+\def\TwoLetterIsoLanguageCode{639-1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ThreeLetterIsoLanguageCode}
+% \begin{macrocode}
+\def\ThreeLetterIsoLanguageCode{639-2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ThreeLetterExtIsoLanguageCode}
+% \begin{macrocode}
+\def\ThreeLetterExtIsoLanguageCode{639-3}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetTrackedDialectModifier}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetTrackedDialectModifier}\marg{dialect}\marg{value}
+%\end{definition}
+%Set the modifier for \meta{dialect}. (For example, old or new.)
+%Arguments are expanded.
+% \begin{macrocode}
+\def\SetTrackedDialectModifier#1#2{%
+ \@tracklang@enamedef{@tracklang@modifier@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectModifier}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectModifier}\marg{dialect}
+%\end{definition}
+%Get the modifier for \meta{dialect}.
+% \begin{macrocode}
+\def\GetTrackedDialectModifier#1{%
+ \@tracklang@nameuse{@tracklang@modifier@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfHasTrackedDialectModifier}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfHasTrackedDialectModifier}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If there's a modifier for \meta{dialect}, do \meta{true} otherwise
+%do \meta{false}.
+% \begin{macrocode}
+\def\IfHasTrackedDialectModifier#1#2#3{%
+ \@tracklang@ifundef{@tracklang@modifier@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetTrackedDialectScript}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetTrackedDialectScript}\marg{dialect}\marg{value}
+%\end{definition}
+%Set the script for \meta{dialect}. (For example, Latn or Cyrl.)
+%Arguments are expanded.
+% \begin{macrocode}
+\def\SetTrackedDialectScript#1#2{%
+ \@tracklang@enamedef{@tracklang@script@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectScript}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectScript}\marg{dialect}
+%\end{definition}
+%Get the script for \meta{dialect}.
+% \begin{macrocode}
+\def\GetTrackedDialectScript#1{%
+ \@tracklang@nameuse{@tracklang@script@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfHasTrackedDialectScript}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfHasTrackedDialectScript}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If there's a script for \meta{dialect}, do \meta{true} otherwise
+%do \meta{false}.
+% \begin{macrocode}
+\def\IfHasTrackedDialectScript#1#2#3{%
+ \@tracklang@ifundef{@tracklang@script@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfTrackedDialectIsScriptCs}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfTrackedDialectIsScriptCs}\marg{dialect}\marg{cs}\marg{true}\marg{false}
+%\end{definition}
+%If the given tracked dialect has an associated script and that
+%script code matches the replacement text for the control sequence
+%\meta{cs} then do \meta{true} otherwise to \meta{false}. If the
+%tracked dialect doesn't have an associated script then the default
+%script for the root language is tested. The use of
+%a control sequence allows \cs{ifx} for the test, which means that
+%this command can expand. The supplementary package
+%\sty{tracklang-script} provides control sequences for known ISO
+%15924 codes.
+% \begin{macrocode}
+\def\IfTrackedDialectIsScriptCs#1#2#3#4{%
+ \IfHasTrackedDialectScript{#1}%
+ {%
+ \expandafter\ifx\expandafter#2\csname @tracklang@script@#1\endcsname
+ #3%
+ \else
+ #4%
+ \fi
+ }%
+ {%
+ \TrackLangIfHasDefaultScript{\TrackedLanguageFromDialect{#1}}%
+ {%
+ \expandafter\ifx\expandafter
+ #2\csname @tracklang@knowniso@script@\TrackedLanguageFromDialect{#1}\endcsname
+ #3%
+ \else
+ #4%
+ \fi
+ }%
+ {#4}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetTrackedDialectVariant}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetTrackedDialectVariant}\marg{dialect}\marg{value}
+%\end{definition}
+%Set the modifier for \meta{dialect}. (For example, old or new.)
+%Arguments are expanded.
+% \begin{macrocode}
+\def\SetTrackedDialectVariant#1#2{%
+ \@tracklang@enamedef{@tracklang@variant@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectVariant}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectVariant}\marg{dialect}
+%\end{definition}
+%Get the modifier for \meta{dialect}.
+% \begin{macrocode}
+\def\GetTrackedDialectVariant#1{%
+ \@tracklang@nameuse{@tracklang@variant@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfHasTrackedDialectVariant}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfHasTrackedDialectVariant}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If there's a modifier for \meta{dialect}, do \meta{true} otherwise
+%do \meta{false}.
+% \begin{macrocode}
+\def\IfHasTrackedDialectVariant#1#2#3{%
+ \@tracklang@ifundef{@tracklang@variant@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetTrackedDialectSubLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetTrackedDialectSubLang}\marg{dialect}\marg{value}
+%\end{definition}
+%Set the sublang for \meta{dialect}.
+%Arguments are expanded.
+% \begin{macrocode}
+\def\SetTrackedDialectSubLang#1#2{%
+ \@tracklang@enamedef{@tracklang@sublang@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectSubLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectSubLang}\marg{dialect}
+%\end{definition}
+%Get the sublang for \meta{dialect}.
+% \begin{macrocode}
+\def\GetTrackedDialectSubLang#1{%
+ \@tracklang@nameuse{@tracklang@sublang@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfHasTrackedDialectSubLang}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfHasTrackedDialectSubLang}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If there's a sublang for \meta{dialect}, do \meta{true} otherwise
+%do \meta{false}.
+% \begin{macrocode}
+\def\IfHasTrackedDialectSubLang#1#2#3{%
+ \@tracklang@ifundef{@tracklang@sublang@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetTrackedDialectAdditional}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetTrackedDialectAdditional}\marg{dialect}\marg{value}
+%\end{definition}
+%Set the extra for \meta{dialect}.
+%Arguments are expanded.
+% \begin{macrocode}
+\def\SetTrackedDialectAdditional#1#2{%
+ \@tracklang@enamedef{@tracklang@extra@#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectAdditional}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectAdditional}\marg{dialect}
+%\end{definition}
+%Get the extra for \meta{dialect}.
+% \begin{macrocode}
+\def\GetTrackedDialectAdditional#1{%
+ \@tracklang@nameuse{@tracklang@extra@#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfHasTrackedDialectAdditional}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfHasTrackedDialectAdditional}\marg{dialect}\marg{true}\marg{false}
+%\end{definition}
+%If there's extra info for \meta{dialect}, do \meta{true} otherwise
+%do \meta{false}.
+% \begin{macrocode}
+\def\IfHasTrackedDialectAdditional#1#2#3{%
+ \@tracklang@ifundef{@tracklang@extra@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedLanguageTag}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedLanguageTag}\marg{dialect}
+%\end{definition}
+%Get the language tag for \meta{dialect}.
+% \begin{macrocode}
+\def\GetTrackedLanguageTag#1{%
+ \IfTrackedLanguageHasIsoCode{639-1}{\TrackedLanguageFromDialect{#1}}%
+ {\TrackedIsoCodeFromLanguage{639-1}{\TrackedLanguageFromDialect{#1}}}%
+ {%
+ \IfTrackedLanguageHasIsoCode{639-2}{\TrackedLanguageFromDialect{#1}}%
+ {\TrackedIsoCodeFromLanguage{639-2}{\TrackedLanguageFromDialect{#1}}}%
+ {%
+ \IfTrackedLanguageHasIsoCode{639-3}{\TrackedLanguageFromDialect{#1}}%
+ {\TrackedIsoCodeFromLanguage{639-3}{\TrackedLanguageFromDialect{#1}}}%
+ {und}% undefined
+ }%
+ }%
+ \@tracklang@ifundef{@tracklang@sublang@#1}%
+ {}%
+ {-\csname @tracklang@sublang@#1\endcsname}%
+ \@tracklang@ifundef{@tracklang@script@#1}%
+ {}%
+ {-\csname @tracklang@script@#1\endcsname}%
+ \IfTrackedLanguageHasIsoCode{3166-1}{#1}%
+ {-\TrackedIsoCodeFromLanguage{3166-1}{#1}}%
+ {}%
+ \@tracklang@ifundef{@tracklang@variant@#1}%
+ {}%
+ {-\csname @tracklang@variant@#1\endcsname}%
+ \@tracklang@ifundef{@tracklang@extra@#1}%
+ {}%
+ {-\csname @tracklang@extra@#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetCurrentTrackedDialect}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetCurrentTrackedDialect}\marg{dialect}
+%\end{definition}
+%Provided for use by language hooks to establish the current tracked
+%dialect. This command doesn't change \cs{languagename} or
+%hyphenation patterns etc. It just provides convenient commands that
+%can be accessed. The argument may be a \styfmt{tracklang} dialect
+%label or the language hook label from which a \styfmt{tracklang}
+%dialect label can be obtained or the root language label.
+%\changes{1.3.3}{2016-11-03}{fixed mapping}
+% \begin{macrocode}
+\def\SetCurrentTrackedDialect#1{%
+ \edef\CurrentTrackedDialect{#1}%
+ \IfTrackedDialect{\CurrentTrackedDialect}%
+ {}%
+ {%
+% \end{macrocode}
+% Has a mapping from this dialect to a tracklang dialect been supplied?
+% \begin{macrocode}
+ \IfHookHasMappingFromTrackedDialect{\CurrentTrackedDialect}%
+ {%
+ \IfTrackedDialect{\GetTrackedDialectFromMapping\CurrentTrackedDialect}%
+ {%
+ \edef\CurrentTrackedDialect{\GetTrackedDialectFromMapping
+ {\CurrentTrackedDialect}}%
+ }%
+ {%
+% \end{macrocode}
+% Has the root language name been supplied?
+% \begin{macrocode}
+ \IfTrackedLanguage{#1}%
+ {%
+% \end{macrocode}
+% Get the last dialect to be tracked with this language.
+% \begin{macrocode}
+ \edef\@tracklang@dialects{\TrackedDialectsFromLanguage{#1}}%
+ \@tracklang@for\@tracklang@dialect:=\@tracklang@dialects\do{%
+ \let\CurrentTrackedDialect\@tracklang@dialect
+ }%
+ }%
+ {}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Has the root language name been supplied?
+% \begin{macrocode}
+ \IfTrackedLanguage{#1}%
+ {%
+% \end{macrocode}
+% Get the last dialect to be tracked with this language.
+% \begin{macrocode}
+ \edef\@tracklang@dialects{\TrackedDialectsFromLanguage{#1}}%
+ \@tracklang@for\@tracklang@dialect:=\@tracklang@dialects\do{%
+ \let\CurrentTrackedDialect\@tracklang@dialect
+ }%
+ }%
+ {}%
+ }%
+ }%
+ \IfTrackedDialect{\CurrentTrackedDialect}%
+ {%
+ \edef\CurrentTrackedLanguage{%
+ \TrackedLanguageFromDialect{\CurrentTrackedDialect}}%
+ \edef\CurrentTrackedDialectModifier{%
+ \GetTrackedDialectModifier{\CurrentTrackedDialect}}%
+ \edef\CurrentTrackedDialectVariant{%
+ \GetTrackedDialectVariant{\CurrentTrackedDialect}}%
+% \end{macrocode}
+% Get the default script if not set.
+% \begin{macrocode}
+ \IfHasTrackedDialectScript{\CurrentTrackedDialect}%
+ {%
+ \edef\CurrentTrackedDialectScript{%
+ \GetTrackedDialectScript{\CurrentTrackedDialect}}%
+ }%
+ {%
+ \edef\CurrentTrackedDialectScript{%
+ \TrackLangGetDefaultScript\CurrentTrackedLanguage}%
+ }%
+ \edef\CurrentTrackedDialectSubLang{%
+ \GetTrackedDialectSubLang{\CurrentTrackedDialect}}%
+ \edef\CurrentTrackedDialectAdditional{%
+ \GetTrackedDialectAdditional{\CurrentTrackedDialect}}%
+ \edef\CurrentTrackedLanguageTag{%
+ \GetTrackedLanguageTag{\CurrentTrackedDialect}}%
+% \end{macrocode}
+%Region code.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode{3166-1}{\CurrentTrackedDialect}%
+ {%
+ \edef\CurrentTrackedRegion{%
+ \TrackedIsoCodeFromLanguage{3166-1}{\CurrentTrackedDialect}}%
+ }%
+ {\def\CurrentTrackedRegion{}}%
+% \end{macrocode}
+%Language code.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode{639-1}{\CurrentTrackedLanguage}%
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage{639-1}{\CurrentTrackedLanguage}}%
+ }%
+ {%
+ \IfTrackedLanguageHasIsoCode{639-2}{\CurrentTrackedLanguage}%
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage{639-2}{\CurrentTrackedLanguage}}%
+ }%
+ {%
+ \IfTrackedLanguageHasIsoCode{639-3}{\CurrentTrackedLanguage}%
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage{639-3}{\CurrentTrackedLanguage}}%
+ }%
+ {%
+ \def\CurrentTrackedIsoCode{}%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \@tracklang@warn{Unknown dialect label `#1' passed to
+ \string\SetCurrentTrackedDialect}%
+ \edef\CurrentTrackedLanguage{\languagename}%
+ \def\CurrentTrackedDialectModifier{}%
+ \def\CurrentTrackedDialectVariant{}%
+ \def\CurrentTrackedDialectScript{}%
+ \def\CurrentTrackedDialectSubLang{}%
+ \def\CurrentTrackedDialectAdditional{}%
+ \def\CurrentTrackedIsoCode{}%
+ \def\CurrentTrackedRegion{}%
+ \def\CurrentTrackedLanguageTag{und}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\AddTrackedLanguageIsoCodes}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{AddTrackedLanguageIsoCodes}\marg{language}
+%\end{definition}
+%Adds the ISO 639-1 and 639-2 ISO codes for the given language,
+%which must have previously been declared using
+%\cs{TrackLangNewLanguage}.
+% \begin{macrocode}
+\def\AddTrackedLanguageIsoCodes#1{%
+ \@tracklang@ifundef{@tracklang@knowniso@639@1@#1}%
+ {}%
+ {%
+ \AddTrackedIsoLanguage\TwoLetterIsoLanguageCode
+ {\csname @tracklang@knowniso@639@1@#1\endcsname}{#1}%
+ }%
+ \@tracklang@ifundef{@tracklang@knowniso@639@2@#1}%
+ {}%
+ {%
+ \AddTrackedIsoLanguage\ThreeLetterIsoLanguageCode
+ {\csname @tracklang@knowniso@639@2@#1\endcsname}{#1}%
+% \end{macrocode}
+% Does it have a different 639-2 (B) code?
+% \begin{macrocode}
+ \@tracklang@ifundef{@tracklang@knowniso@639@2B@#1}%
+ {}%
+ {%
+ \AddTrackedIsoLanguage{\ThreeLetterIsoLanguageCode-T}%
+ {\csname @tracklang@knowniso@639@2@#1\endcsname}{#1}%
+ \AddTrackedIsoLanguage{\ThreeLetterIsoLanguageCode-B}%
+ {\csname @tracklang@knowniso@639@2B@#1\endcsname}{#1}%
+ }%
+ }%
+ \@tracklang@ifundef{@tracklang@knowniso@639@3@#1}%
+ {}%
+ {%
+ \AddTrackedIsoLanguage\ThreeLetterExtIsoLanguageCode
+ {\csname @tracklang@knowniso@639@3@#1\endcsname}{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\AddTrackedCountryIsoCode}
+%\changes{1.3}{2016-10-07}{new}
+%As above but adds the 3166-1 country code if provided. Most
+%root languages don't have an associated country code as they're
+%spoken in multiple regions. Some of those that do have an
+%associated region code may also be spoken as a minority language
+%elsewhere, so this is separate from the previous command. If a
+%regionless setting is required, use \cs{TrackLocale} instead of
+%\cs{TrackPredefinedDialect}.
+% \begin{macrocode}
+\def\AddTrackedCountryIsoCode#1{%
+ \@tracklang@ifundef{@tracklang@knowniso@3166@#1}%
+ {}%
+ {%
+ \AddTrackedIsoLanguage{3166-1}%
+ {\csname @tracklang@knowniso@3166@#1\endcsname}{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Tracking Languages and Dialects}\label{sec:tracking}
+%
+% The commands here are provided to indicate that a language or dialect
+% is active (tracked) in the document.
+%
+%\begin{macro}{\TrackPredefinedDialect}
+%\begin{definition}
+%\cs{TrackPredefinedDialect}\marg{dialect label}
+%\end{definition}
+% Track a predefined language or dialect.
+% \begin{macrocode}
+\def\TrackPredefinedDialect#1{%
+ \@tracklang@ifundef{@tracklang@add@#1}%
+ {%
+ \@tracklang@err{Dialect or language `#1' is not predefined}{}%
+ }%
+ {\@tracklang@nameuse{@tracklang@add@#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@hassecondchar}
+%\changes{1.3}{2016-10-07}{new}
+%Check if second argument is present (non-empty and not \cs{relax}).
+% \begin{macrocode}
+\def\@tracklang@hassecondchar#1#2\@end@tracklang@hassecondchar#3#4{%
+ \ifx\relax#2\relax
+ #4%
+ \else
+ #3%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@hasthirdchar}
+%\changes{1.3}{2016-10-07}{new}
+%Check if third argument is present (non-empty and not \cs{relax}).
+% \begin{macrocode}
+\def\@tracklang@hasthirdchar#1#2#3\@end@tracklang@hasthirdchar#4#5{%
+ \ifx\relax#3\relax
+ #5%
+ \else
+ #4%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@hasfourthchar}
+%\changes{1.3}{2016-10-07}{new}
+%Check if fourth argument is present (non-empty and not \cs{relax}).
+% \begin{macrocode}
+\def\@tracklang@hasfourthchar#1#2#3#4\@end@tracklang@hasfourthchar#5#6{%
+ \ifx\relax#4\relax
+ #6%
+ \else
+ #5%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@hasfifthchar}
+%\changes{1.3}{2016-10-07}{new}
+%Check if fifth argument is present (non-empty and not \cs{relax}).
+% \begin{macrocode}
+\def\@tracklang@hasfifthchar#1#2#3#4#5\@end@tracklang@hasfifthchar#6#7{%
+ \ifx\relax#5\relax
+ #7%
+ \else
+ #6%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@hasninthchar}
+%\changes{1.3}{2016-10-07}{new}
+%Check if ninth argument is present (non-empty and not \cs{relax}).
+% \begin{macrocode}
+\def\@tracklang@hasninthchar#1#2#3#4#5#6#7#8#9\@end@tracklang@hasninthchar{%
+ \ifx\relax#9\relax
+ \expandafter\@tracklang@secondoftwo
+ \else
+ \expandafter\@tracklang@firstoftwo
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifalpha}
+%\changes{1.3}{2016-10-07}{new}
+%Check if argument a, \ldots, z or A, \ldots, Z.
+% \begin{macrocode}
+\def\@tracklang@ifalpha#1#2#3{%
+ \ifx\relax#1\relax
+% \end{macrocode}
+%First argument empty or \cs{relax}.
+% \begin{macrocode}
+ #3%
+ \else
+ \ifnum\lccode`#1<`a\relax
+ #3%
+ \else
+ \ifnum\lccode`#1>`z\relax
+ #3%
+ \else
+% \end{macrocode}
+% Is alpha.
+% \begin{macrocode}
+ #2%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifdigit}
+%\changes{1.3}{2016-10-07}{new}
+%Check if argument is digit (0,\ldots,9).
+% \begin{macrocode}
+\def\@tracklang@ifdigit#1#2#3{%
+ \ifx\relax#1\relax
+% \end{macrocode}
+%First argument empty or \cs{relax}.
+% \begin{macrocode}
+ #3%
+ \else
+ \ifnum`#1<`0\relax
+ #3%
+ \else
+ \ifnum`#1>`9\relax
+ #3%
+ \else
+% \end{macrocode}
+% Is digit.
+% \begin{macrocode}
+ #2%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifalldigits}
+%\changes{1.3}{2016-10-07}{new}
+%Check if the argument only consists of digits (no sign).
+% \begin{macrocode}
+\def\@tracklang@ifalldigits#1{%
+ \expandafter\ifx\relax#1\relax
+ \expandafter\@tracklang@secondoftwo
+ \else
+ \expandafter\@@tracklang@ifalldigits#1\@tracklang@nnil
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@tracklang@ifalldigits}
+% \begin{macrocode}
+\def\@@tracklang@ifalldigits#1{%
+ \ifx#1\@tracklang@nnil
+ \def\@tracklang@next{\expandafter\@tracklang@firstoftwo}%
+ \else
+ \@tracklang@ifdigit{#1}%
+ {%
+ \let\@tracklang@next\@@tracklang@ifalldigits
+ }%
+ {%
+ \def\@tracklang@next##1\@tracklang@nnil{%
+ \expandafter\@tracklang@secondoftwo}%
+ }%
+ \fi
+ \@tracklang@next
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifalphanumeric}
+%\changes{1.3}{2016-10-07}{new}
+%Check if argument is an alphanumeric (0,\ldots,9) or (a,\ldots,z)
+%or (A,\ldots,Z).
+% \begin{macrocode}
+\def\@tracklang@ifalphanumeric#1#2#3{%
+ \@tracklang@ifalpha{#1}%
+ {#2}%
+ {%
+ \@tracklang@ifdigit{#1}{#2}{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfAlphaNumericChar}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfAlphaNumericChar}\marg{tag}\marg{true}\marg{false}
+%\end{definition}
+%Check if the argument is a single alphanumeric character.
+% \begin{macrocode}
+\def\TrackLangIfAlphaNumericChar#1#2#3{%
+ \expandafter\ifx\expandafter\relax#1\relax
+% \end{macrocode}
+% Tag empty or \cs{relax}.
+% \begin{macrocode}
+ #3%
+ \else
+ \expandafter\@tracklang@hassecondchar#1\relax\relax
+ \@end@tracklang@hassecondchar
+ {#3}%
+ {\expandafter\@tracklang@ifalphanumeric#1{#2}{#3}}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfLanguageTag}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfLanguageTag}\marg{tag}\marg{true}\marg{false}
+%\end{definition}
+%Check if the argument is a language tag (two or three letter
+%lower case).
+% \begin{macrocode}
+\def\TrackLangIfLanguageTag#1#2#3{%
+ \expandafter\@tracklang@hasthirdchar#1\relax\relax\relax
+ \@end@tracklang@hasthirdchar
+ {%
+% \end{macrocode}
+% Has 3 or more characters.
+% \begin{macrocode}
+ \expandafter\@tracklang@hasfourthchar#1\relax\@end@tracklang@hasfourthchar
+ {#3}%
+ {%
+% \end{macrocode}
+% Has 3 characters. Are they all lower case?
+% \begin{macrocode}
+ \expandafter\@tracklang@iflanguage@iii@tag#1{#2}{#3}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Has less than 3 characters.
+% \begin{macrocode}
+ \expandafter\@tracklang@hassecondchar#1\relax\relax
+ \@end@tracklang@hassecondchar
+ {%
+% \end{macrocode}
+%Has two characters. Are they both lower case?
+% \begin{macrocode}
+ \expandafter\@tracklang@iflanguage@ii@tag#1{#2}{#3}%
+ }%
+ {#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@iflanguage@ii@tag}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@iflanguage@ii@tag#1#2#3#4{%
+ \ifnum\lccode`#1=`#1\relax
+ \ifnum\lccode`#2=`#2\relax
+ #3%
+ \else
+ #4%
+ \fi
+ \else
+ #4%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@iflanguage@iii@tag}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@iflanguage@iii@tag#1#2#3#4#5{%
+ \ifnum\lccode`#1=`#1\relax
+ \ifnum\lccode`#2=`#2\relax
+ \ifnum\lccode`#3=`#3\relax
+ #4%
+ \else
+ #5%
+ \fi
+ \else
+ #5%
+ \fi
+ \else
+ #5%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfRegionTag}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfRegionTag}\marg{tag}\marg{true}\marg{false}
+%\end{definition}
+%Check if the argument is a region tag (two letter
+%upper case or three digit numeric).
+% \begin{macrocode}
+\def\TrackLangIfRegionTag#1#2#3{%
+ \expandafter\@tracklang@hasthirdchar#1\relax\relax\relax
+ \@end@tracklang@hasthirdchar
+ {%
+% \end{macrocode}
+% Has 3 or more characters. Is it a three digit numeric code?
+% \begin{macrocode}
+ \expandafter\@tracklang@hasfourthchar#1\relax\@end@tracklang@hasfourthchar
+ {%
+% \end{macrocode}
+% Has 4 or more characters.
+% \begin{macrocode}
+ #3%
+ }%
+ {%
+% \end{macrocode}
+% Has 3 characters. Are they all digits?
+% \begin{macrocode}
+ \@tracklang@ifalldigits{#1}{#2}{#3}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Has less than 3 characters.
+% \begin{macrocode}
+ \expandafter\@tracklang@hassecondchar#1\relax\relax
+ \@end@tracklang@hassecondchar
+ {%
+% \end{macrocode}
+%Has two characters. Are they both upper case?
+% \begin{macrocode}
+ \expandafter\@tracklang@ifregion@ii@tag#1{#2}{#3}%
+ }%
+ {#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifregion@ii@tag}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@ifregion@ii@tag#1#2#3#4{%
+ \ifnum\uccode`#1=`#1\relax
+ \ifnum\uccode`#2=`#2\relax
+ #3%
+ \else
+ #4%
+ \fi
+ \else
+ #4%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifregion@iii@tag}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@ifregion@iii@tag#1#2#3#4#5{%
+ \ifnum\uccode`#1=`#1\relax
+ \ifnum\uccode`#2=`#2\relax
+ \ifnum\uccode`#3=`#3\relax
+ #4%
+ \else
+ #5%
+ \fi
+ \else
+ #5%
+ \fi
+ \else
+ #5%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfScriptTag}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfScriptTag}\marg{tag}\marg{true}\marg{false}
+%\end{definition}
+%Check if the argument is a script tag (four letter
+%title case).
+% \begin{macrocode}
+\def\TrackLangIfScriptTag#1#2#3{%
+ \expandafter\@tracklang@hasfifthchar#1\relax\relax\relax\relax\relax
+ \@end@tracklang@hasfifthchar
+ {#3}%
+ {%
+% \end{macrocode}
+% Has less than 5 characters.
+% \begin{macrocode}
+ \expandafter\@tracklang@hasfourthchar#1\relax\relax\relax\relax
+ \@end@tracklang@hasfourthchar
+ {%
+% \end{macrocode}
+%Has four characters. Are they title case? (First letter upper case,
+%others lower case.)
+% \begin{macrocode}
+ \expandafter\@tracklang@ifscripttag#1{#2}{#3}%
+ }%
+ {#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifscripttag}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@ifscripttag#1#2#3#4#5#6{%
+ \ifnum\uccode`#1=`#1\relax
+ \ifnum\lccode`#2=`#2\relax
+ \ifnum\lccode`#3=`#3\relax
+ \ifnum\lccode`#4=`#4\relax
+ #5%
+ \else
+ #6%
+ \fi
+ \else
+ #6%
+ \fi
+ \else
+ #6%
+ \fi
+ \else
+ #6%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfVariantTag}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangIfVariantTag}\marg{tag}\marg{true}\marg{false}
+%\end{definition}
+%Check if the argument is a variant tag.
+% \begin{macrocode}
+\def\TrackLangIfVariantTag#1#2#3{%
+ \expandafter\@tracklang@hasfifthchar#1\relax\relax\relax\relax\relax
+ \@end@tracklang@hasfifthchar
+ {%
+% \end{macrocode}
+% Has at least 5 characters. Does it have a maximum of 8?
+% \begin{macrocode}
+ \expandafter\@tracklang@hasninthchar#1\relax\relax\relax\relax\relax
+ \relax\relax\relax\relax
+ \@end@tracklang@hasninthchar
+ {#3}%
+ {#2}%
+ }%
+ {%
+% \end{macrocode}
+%Less than 5 characters.
+% \begin{macrocode}
+ \expandafter\@tracklang@hasfourthchar#1\relax\relax\relax\relax
+ \@end@tracklang@hasfourthchar
+ {%
+% \end{macrocode}
+%Has 4 characters.
+% \begin{macrocode}
+ \expandafter\@tracklang@ifvariant@iv@tag#1{#2}{#3}%
+ }%
+ {#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@ifvariant@iv@tag}
+%\changes{1.3}{2016-10-07}{new}
+%four character variant starting with a digit.
+% \begin{macrocode}
+\def\@tracklang@ifvariant@iv@tag#1#2#3#4#5#6{%
+ \@tracklang@ifdigit{#1}%
+ {#5}
+ {#6}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@parse@extlang}
+%\cs{@TrackLangEnvSubLang}, \cs{@tracklang@split@pre} and
+%\cs{\@tracklang@split@post} should be initialised before use.
+%This assumes the tag is well formed.
+% \begin{macrocode}
+\def\@tracklang@parse@extlang{%
+ \TrackLangIfLanguageTag{\@tracklang@split@pre}
+ {%
+ \ifx\@TrackLangEnvSubLang\empty
+ \let\@TrackLangEnvSubLang\@tracklang@split@pre
+ \let\@TrackLangEnvFirstSubLang\@TrackLangEnvSubLang
+ \else
+ \edef\@TrackLangEnvSubLang{\@TrackLangEnvSubLang-\@tracklang@split@pre}%
+ \fi
+% \end{macrocode}
+%Split again if there's more.
+% \begin{macrocode}
+ \ifx\@tracklang@split@post\empty
+ \else
+ \expandafter\@tracklang@split@underscoreorhyp\expandafter
+ {\@tracklang@split@post}%
+ \ifx\@tracklang@split@pre\empty
+ \else
+ \@tracklang@parse@extlang
+ \fi
+ \fi
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@parse@variant}
+%\cs{@TrackLangEnvVariant}, \cs{@tracklang@split@pre} and
+%\cs{\@tracklang@split@post} should be initialised before use.
+% \begin{macrocode}
+\def\@tracklang@parse@variant{%
+ \TrackLangIfVariantTag{\@tracklang@split@pre}
+ {%
+ \ifx\@TrackLangEnvVariant\empty
+ \let\@TrackLangEnvVariant\@tracklang@split@pre
+ \else
+ \edef\@TrackLangEnvVariant{\@TrackLangEnvVariant
+ -\@tracklang@split@pre}%
+ \fi
+% \end{macrocode}
+%Split again if there's more.
+% \begin{macrocode}
+ \ifx\@tracklang@split@post\empty
+ \else
+ \expandafter\@tracklang@split@underscoreorhyp\expandafter
+ {\@tracklang@split@post}%
+ \ifx\@tracklang@split@pre\empty
+ \else
+ \@tracklang@parse@variant
+ \fi
+ \fi
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLanguageTag}
+%\begin{definition}
+%\cs{TrackLanguageTag}\marg{tag}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+%Parse RFC 5646 language tag (assumes regular and well-formed).
+%See also \url{https://tools.ietf.org/html/rfc5646}.
+%Ensure \meta{tag} is fully-expanded. Warn if argument is
+%empty.
+% \begin{macrocode}
+\def\TrackLanguageTag#1{%
+ \edef\@tracklang@tag{#1}%
+ \ifx\@tracklang@tag\empty
+ \@tracklang@warn{Empty tag in \string\TrackLanguageTag}%
+ \else
+ \expandafter\@TrackLanguageTag\expandafter{\@tracklang@tag}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@TrackLanguageTag}
+%Argument must be expanded.
+% \begin{macrocode}
+\def\@TrackLanguageTag#1{%
+% \end{macrocode}
+%First check if it's predefined.
+% \begin{macrocode}
+ \@tracklang@ifundef{@tracklang@add@#1}%
+ {%
+% \end{macrocode}
+%Parse language tag.
+% \begin{macrocode}
+ \@tracklang@parselangtag{#1}%
+% \end{macrocode}
+%Track this information.
+% \begin{macrocode}
+ \@tracklang@track@locale
+ }%
+ {%
+% \end{macrocode}
+%Predefined tag.
+% \begin{macrocode}
+ \@tracklang@nameuse{@tracklang@add@#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@parse@langtag}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@parselangtag#1{%
+% \end{macrocode}
+%Initialise.
+% \begin{macrocode}
+ \def\@TrackLangEnvLang{}%
+ \def\@TrackLangEnvSubLang{}%
+ \def\@TrackLangEnvFirstSubLang{}%
+ \def\@TrackLangEnvTerritory{}%
+ \def\@TrackLangEnvCodeSet{}%
+ \def\@TrackLangEnvVariant{}%
+ \def\@TrackLangEnvModifier{}%
+ \def\@TrackLangEnvScript{}%
+ \def\@TrackLangEnvAdditional{}%
+% \end{macrocode}
+%First split to determine language code.
+% \begin{macrocode}
+ \@tracklang@split@underscoreorhyp{#1}%
+% \end{macrocode}
+%Save the result.
+% \begin{macrocode}
+ \let\@TrackLangEnvLang\@tracklang@split@pre
+% \end{macrocode}
+%Is there anything else?
+% \begin{macrocode}
+ \ifx\@tracklang@split@post\empty
+% \end{macrocode}
+%That's it.
+% \begin{macrocode}
+ \else
+% \end{macrocode}
+%Split again.
+% \begin{macrocode}
+ \expandafter\@tracklang@split@underscoreorhyp\expandafter
+ {\@tracklang@split@post}%
+% \end{macrocode}
+%Is this an extension to the language tag?
+% \begin{macrocode}
+ \@tracklang@parse@extlang
+% \end{macrocode}
+%Does this fit the format for a script?
+% \begin{macrocode}
+ \TrackLangIfScriptTag{\@tracklang@split@pre}%
+ {%
+% \end{macrocode}
+%Found script.
+% \begin{macrocode}
+ \let\@TrackLangEnvScript\@tracklang@split@pre
+% \end{macrocode}
+%Split again if there's more.
+% \begin{macrocode}
+ \ifx\@tracklang@split@post\empty
+ \else
+ \expandafter\@tracklang@split@underscoreorhyp\expandafter
+ {\@tracklang@split@post}%
+ \fi
+ }%
+ {}%
+% \end{macrocode}
+%Does this fit the format for a region?
+% \begin{macrocode}
+ \TrackLangIfRegionTag{\@tracklang@split@pre}%
+ {%
+% \end{macrocode}
+%Found region. Is it a 2 letter alpha or a 3 digit numeric code?
+% \begin{macrocode}
+ \expandafter\@tracklang@hasthirdchar\@tracklang@split@pre
+ \relax\relax\relax
+ \@end@tracklang@hasthirdchar
+ {%
+% \end{macrocode}
+% Is three digit numeric code. We need the mappings. Has
+% \texttt{tracklang-region-codes.tex} been loaded?
+% \begin{macrocode}
+ \ifx\TrackLangIfKnownNumericRegion\undefined
+ \@tracklang@input tracklang-region-codes.tex
+ \fi
+ \TrackLangIfKnownNumericRegion{\@tracklang@split@pre}%
+ {%
+ \edef\@TrackLangEnvTerritory{%
+ \TrackLangNumericToAlphaIIRegion{\@tracklang@split@pre}%
+ }%
+ }%
+ {%
+ \let\@TrackLangEnvTerritory\@tracklang@split@pre
+ \@tracklang@warn{Unrecognised numeric region code
+ `\@tracklang@split@pre'}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Is two letter alpha code.
+% \begin{macrocode}
+ \let\@TrackLangEnvTerritory\@tracklang@split@pre
+ }%
+ \expandafter\@tracklang@split@underscoreorhyp\expandafter
+ {\@tracklang@split@post}%
+ }%
+ {}%
+% \end{macrocode}
+%Parse for variant.
+% \begin{macrocode}
+ \@tracklang@parse@variant
+% \end{macrocode}
+%Anything left can go in additional.
+% \begin{macrocode}
+ \let\@TrackLangEnvAdditional\@tracklang@split@post
+ \fi
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectFromLanguageTag}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectFromLanguageTag}\marg{tag}\marg{cs}
+%\end{definition}
+%Find the tracked dialect that matches the given language tag and
+%stores the dialect label in \meta{cs}. If no match found, \meta{cs}
+%will be empty. Just tests the root language, script, variant,
+%sub-language and region. Doesn't check the additional information.
+%As from v1.3.6, this sets \cs{TrackedDialectClosestSubMatch} to the
+%closest sub-match.
+% \begin{macrocode}
+\def\GetTrackedDialectFromLanguageTag#1#2{%
+% \end{macrocode}
+%Initialise default values (in case of no match).
+%\changes{1.3.6}{2018-05-13}{added \cs{TrackedDialectClosestSubMatch}}
+% \begin{macrocode}
+ \def#2{}%
+ \def\TrackedDialectClosestSubMatch{}%
+ \@tracklang@parselangtag{#1}%
+ \edef\@tracklang@dialect{%
+ \@TrackLangEnvLang
+ \@TrackLangEnvSubLang
+ \@TrackLangEnvScript
+ \@TrackLangEnvTerritory
+ \@TrackLangEnvModifier
+ \@TrackLangEnvVariant}%
+% \end{macrocode}
+% Has this dialect label been tracked?
+% \begin{macrocode}
+ \IfTrackedDialect{\@tracklang@dialect}%
+ {%
+% \end{macrocode}
+% Found it. All done.
+% \begin{macrocode}
+ \let#2\@tracklang@dialect
+ }%
+ {%
+% \end{macrocode}
+% Get the root language label.
+% \begin{macrocode}
+ \edef\@tracklang@lang{\TrackLangGetKnownLangFromIso\@TrackLangEnvLang}%
+% \end{macrocode}
+% Get the default script for this language.
+% \begin{macrocode}
+ \edef\@tracklang@defscript{\TrackLangGetDefaultScript\@tracklang@lang}%
+% \end{macrocode}
+% Keep track of best match.
+% \begin{macrocode}
+ \def\@tracklang@bestmatch{0}%
+% \end{macrocode}
+% Get the list of tracked dialects for this language.
+% \begin{macrocode}
+ \edef\@tracklang@dialects{\TrackedDialectsFromLanguage\@tracklang@lang}%
+% \end{macrocode}
+% For each dialect in this list, check if it matches.
+% \begin{macrocode}
+ \@tracklang@for\@tracklang@dialect:=\@tracklang@dialects\do{%
+% \end{macrocode}
+% Does the script match? (Initialise to no.)
+% \begin{macrocode}
+ \def\@tracklang@currentmatch{0}%
+ \edef\@tracklang@tmp{%
+ \GetTrackedDialectScript{\@tracklang@dialect}}%
+ \ifx\@tracklang@tmp\@TrackLangEnvScript
+% \end{macrocode}
+% Script matches.
+% \begin{macrocode}
+ \def\@tracklang@currentmatch{1}%
+ \else
+% \end{macrocode}
+% Script doesn't match. If no script has been provided, does this
+% dialect's script match the default for this language?
+% \begin{macrocode}
+ \ifx\@TrackLangEnvScript\empty
+ \ifx\@tracklang@tmp\@tracklang@defscript
+% \end{macrocode}
+% Default script matches.
+% \begin{macrocode}
+ \def\@tracklang@currentmatch{1}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Does the sub-language match?
+% \begin{macrocode}
+ \edef\@tracklang@tmp{%
+ \GetTrackedDialectSubLang{\@tracklang@dialect}}%
+ \ifx\@tracklang@tmp\@TrackLangEnvSubLang
+% \end{macrocode}
+% Sub-language matches.
+% \begin{macrocode}
+ \edef\@tracklang@currentmatch{\@tracklang@currentmatch 1}%
+ \else
+% \end{macrocode}
+% Sub-language doesn't match.
+% \begin{macrocode}
+ \edef\@tracklang@currentmatch{\@tracklang@currentmatch 0}%
+ \fi
+% \end{macrocode}
+% Does the variant match?
+% \begin{macrocode}
+ \edef\@tracklang@tmp{%
+ \GetTrackedDialectVariant{\@tracklang@dialect}}%
+ \ifx\@tracklang@tmp\@TrackLangEnvVariant
+% \end{macrocode}
+% Variant matches.
+% \begin{macrocode}
+ \edef\@tracklang@currentmatch{\@tracklang@currentmatch 1}%
+ \else
+% \end{macrocode}
+% Variant doesn't match.
+% \begin{macrocode}
+ \edef\@tracklang@currentmatch{\@tracklang@currentmatch 0}%
+ \fi
+% \end{macrocode}
+% Does the region match?
+% \begin{macrocode}
+ \edef\@tracklang@tmp{%
+ \TrackedIsoCodeFromLanguage{3166-1}{\@tracklang@dialect}}%
+ \ifx\@tracklang@tmp\@TrackLangEnvTerritory
+% \end{macrocode}
+% Region matches.
+% \begin{macrocode}
+ \edef\@tracklang@currentmatch{\@tracklang@currentmatch 1}%
+ \else
+% \end{macrocode}
+% Region doesn't match.
+% \begin{macrocode}
+ \edef\@tracklang@currentmatch{\@tracklang@currentmatch 0}%
+ \fi
+% \end{macrocode}
+% Do all four match?
+% \begin{macrocode}
+ \ifx\@tracklang@currentmatch\@tracklang@fullmatch
+% \end{macrocode}
+% Found it.
+% \begin{macrocode}
+ \let#2\@tracklang@dialect
+ \else
+% \end{macrocode}
+% Not a complete match. Is this the best match so far?
+% \begin{macrocode}
+ \ifnum\@tracklang@currentmatch>\@tracklang@bestmatch\relax
+ \let\TrackedDialectClosestSubMatch\@tracklang@dialect
+ \let\@tracklang@bestmatch\@tracklang@currentmatch
+ \fi
+ \fi
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@fullmatch}
+%\changes{1.3.6}{2018-05-13}{new}
+%(Used to identify a full match for script, sub-language, variant
+%and region.)
+% \begin{macrocode}
+\def\@tracklang@fullmatch{1111}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangFromEnv}
+%\changes{1.3}{2016-10-07}{new}
+% This command performs the following steps:
+% query environment variable (if \cs{TrackLangEnv} not already set),
+% parse \cs{TrackLangEnv} (if it has been set), and add the dialect
+% (if recognised).
+%
+% Note that this works slightly differently from just using
+% \cs{TrackLangQueryEnv} followed by \cs{TrackLangParseFromEnv}
+% and \cs{TrackPredefinedDialect}.
+% \begin{macrocode}
+\def\TrackLangFromEnv{%
+% \end{macrocode}
+%Initialise.
+% \begin{macrocode}
+ \def\TrackLangEnvLang{}%
+ \def\TrackLangEnvTerritory{}%
+ \def\TrackLangEnvCodeSet{}%
+ \def\TrackLangEnvModifier{}%
+% \end{macrocode}
+%If \cs{TrackQueryEnv} is empty, assume \cs{TrackQueryEnv} has already
+%been attempted but failed, so don't bother retrying.
+% \begin{macrocode}
+ \ifx\TrackLangEnv\undefined
+ \TrackLangQueryEnv
+ \fi
+ \ifx\TrackLangEnv\empty
+ \@tracklang@warn{\string\TrackLangFromEnv\space
+ non-operational as \string\TrackLangEnv\space is empty}%
+ \else
+% \end{macrocode}
+% At this point \cs{TrackLangEnv} shouldn't be undefined (if
+% \cs{TrackLangQueryEnv} fails it should define \cs{TrackLangEnv} to
+% be empty), but check in case something unexpected has happened.
+% \begin{macrocode}
+ \ifx\TrackLangEnv\undefined
+ \@tracklang@warn{\string\TrackLangFromEnv\space
+ non-operational as \string\TrackLangEnv\space hasn't been
+ defined}%
+ \else
+% \end{macrocode}
+% Parse and track.
+% \begin{macrocode}
+ \@tracklang@parse@track@locale{\TrackLangEnv}%
+ \let\TrackLangEnvLang\@TrackLangEnvLang
+ \let\TrackLangEnvTerritory\@TrackLangEnvTerritory
+ \let\TrackLangEnvCodeSet\@TrackLangEnvCodeSet
+ \let\TrackLangEnvModifier\@TrackLangEnvModifier
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLocale}
+%\begin{definition}
+%\cs{TrackLocale}\marg{locale}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+%Track the dialect identified by the given locale. The argument may
+%either be a predefined language\slash dialect or in the same format as
+%\cs{TrackLangEnv}.
+% \begin{macrocode}
+\def\TrackLocale#1{%
+% \end{macrocode}
+% Is the argument a recognised dialect?
+% \begin{macrocode}
+ \@tracklang@ifundef{@tracklang@add@#1}%
+ {%
+ \@tracklang@parse@track@locale{#1}%
+ }%
+ {%
+ \@tracklang@nameuse{@tracklang@add@#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@parse@track@locale}
+%\changes{1.3}{2016-10-07}{new}
+%Parse localisation format and track.
+% \begin{macrocode}
+\def\@tracklang@parse@track@locale#1{%
+ \@tracklang@parse@locale{#1}%
+ \@tracklang@track@locale
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@track@locale}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\@tracklang@track@locale{%
+% \end{macrocode}
+% Is the language code known?
+% \begin{macrocode}
+ \TrackLangIfKnownLangFromIso{\@TrackLangEnvLang}
+ {%
+ \edef\@tracklang@lang{\TrackLangGetKnownLangFromIso\@TrackLangEnvLang}%
+ \let\@tracklang@dialect\@TrackLangEnvLang
+ \ifx\@TrackLangEnvSubLang\empty
+ \else
+ \edef\@tracklang@dialect{\@tracklang@dialect-\@TrackLangEnvSubLang}%
+ \fi
+ \ifx\@TrackLangEnvScript\empty
+ \else
+ \edef\@tracklang@dialect{\@tracklang@dialect-\@TrackLangEnvScript}%
+ \fi
+ \ifx\@TrackLangEnvTerritory\empty
+ \else
+ \edef\@tracklang@dialect{\@tracklang@dialect-\@TrackLangEnvTerritory}%
+ \fi
+ \ifx\@TrackLangEnvModifier\empty
+ \else
+ \edef\@tracklang@dialect{\@tracklang@dialect-\@TrackLangEnvModifier}%
+ \fi
+ \ifx\@TrackLangEnvVariant\empty
+ \else
+ \edef\@tracklang@dialect{\@tracklang@dialect-\@TrackLangEnvVariant}%
+ \fi
+% \end{macrocode}
+% Language code is recognised. Is the dialect label recognised?
+% \begin{macrocode}
+ \@tracklang@ifundef{@tracklang@add@\@tracklang@dialect}%
+ {%
+% \end{macrocode}
+% Not a recognised dialect.
+% Form new dialect name (without hyphen).
+% \begin{macrocode}
+ \edef\@tracklang@dialect{%
+ \@TrackLangEnvLang
+ \@TrackLangEnvSubLang
+ \@TrackLangEnvScript
+ \@TrackLangEnvTerritory
+ \@TrackLangEnvModifier
+ \@TrackLangEnvVariant}%
+% \end{macrocode}
+% Add this new dialect.
+% \begin{macrocode}
+ \AddTrackedDialect{\@tracklang@dialect}{\@tracklang@lang}%
+ \AddTrackedLanguageIsoCodes{\@tracklang@lang}%
+% \end{macrocode}
+% Is there a sub-language tag?
+% \begin{macrocode}
+ \ifx\@TrackLangEnvFirstSubLang\empty
+ \else
+ \expandafter\AddTrackedIsoLanguage
+ \expandafter\ThreeLetterExtIsoLanguageCode
+ \expandafter{\@TrackLangEnvFirstSubLang}%
+ {\@tracklang@dialect}%
+ \fi
+ }%
+ {%
+% \end{macrocode}
+% Dialect is recognised.
+% \begin{macrocode}
+ \csname @tracklang@add@\@tracklang@dialect\endcsname
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Unknown language code.
+% \begin{macrocode}
+ \@tracklang@warn{Unknown language code `\@TrackLangEnvLang'}%
+ \edef\@tracklang@dialect{%
+ \@TrackLangEnvLang
+ \@TrackLangEnvSubLang
+ \@TrackLangEnvScript
+ \@TrackLangEnvTerritory
+ \@TrackLangEnvModifier
+ \@TrackLangEnvVariant}%
+ \AddTrackedDialect{\@tracklang@dialect}{\@TrackLangEnvLang}%
+% \end{macrocode}
+% Determine if the language code is a two or three letter code.
+% \begin{macrocode}
+ \expandafter\@tracklang@hasthirdchar
+ \@TrackLangEnvLang\relax\relax\relax\@end@tracklang@hasthirdchar
+ {%
+% \end{macrocode}
+% 639-2 code. Track it.
+% \begin{macrocode}
+ \AddTrackedIsoLanguage{639-2}{\@TrackLangEnvLang}{\@tracklang@lang}%
+ }%
+ {%
+% \end{macrocode}
+% 639-1 code. Track it.
+% \begin{macrocode}
+ \AddTrackedIsoLanguage{639-1}{\@TrackLangEnvLang}{\@tracklang@lang}%
+ }%
+ }%
+% \end{macrocode}
+% Add the territory if provided. (The territory may not have been
+% defined by the dialect option.)
+% \begin{macrocode}
+ \ifx\@TrackLangEnvTerritory\empty
+ \else
+ \AddTrackedIsoLanguage{3166-1}{\@TrackLangEnvTerritory}%
+ {\@tracklang@dialect}%
+ \fi
+% \end{macrocode}
+% If a modifier was provided, add that.
+% \begin{macrocode}
+ \ifx\@TrackLangEnvModifier\empty
+ \else
+ \SetTrackedDialectModifier{\@tracklang@dialect}{\@TrackLangEnvModifier}%
+ \fi
+% \end{macrocode}
+% If a variant was provided, add that.
+% \begin{macrocode}
+ \ifx\@TrackLangEnvVariant\empty
+ \else
+ \SetTrackedDialectVariant{\@tracklang@dialect}{\@TrackLangEnvVariant}%
+ \fi
+% \end{macrocode}
+% If a script was provided, add that.
+% \begin{macrocode}
+ \ifx\@TrackLangEnvScript\empty
+ \else
+ \SetTrackedDialectScript{\@tracklang@dialect}{\@TrackLangEnvScript}%
+ \fi
+% \end{macrocode}
+% If a language extension was provided, add that.
+% \begin{macrocode}
+ \ifx\@TrackLangEnvSubLang\empty
+ \else
+ \SetTrackedDialectSubLang{\@tracklang@dialect}{\@TrackLangEnvSubLang}%
+ \fi
+% \end{macrocode}
+% If additional information was provided, add that.
+% \begin{macrocode}
+ \ifx\@TrackLangEnvAdditional\empty
+ \else
+ \SetTrackedDialectAdditional{\@tracklang@dialect}{\@TrackLangEnvAdditional}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsection{Predefined Root Languages}\label{sec:predefinedlang}
+%
+% The ISO 639-1 and 639-2 codes are used to map the root language name to the
+% ISO language code. The 3166-1 codes are used to map the
+% dialect\slash variant to the ISO country code. The country code is
+% omitted if ambiguous (for example, the language is spoken in
+% multiple countries). Languages that have a country code may be
+% spoken as a minority language in another region. In this case,
+% \cs{TrackLocale} should be used instead to set the country code as
+% appropriate. Some \qt{dialects} are just synonyms for a
+% language name, such as \qt{francais} or \qt{frenchb}. These are
+% defined in \sectionref{sec:predefined}. Some of the
+% languages have two ISO 639-2 codes designated as \qt{B}
+% (bibliographic) or \qt{T} (terminology). In these cases the
+% terminology code is used as the primary 639-2 code. The extra
+% \qt{B} and \qt{T} codes are only provided if they are different.
+%
+%\begin{macro}{\@tracklang@declareoption}
+%\changes{1.1}{2014-11-21}{new}
+% Provide a hook to declare a predefined setting as a package
+% option. This is defined by tracklang.sty before loading
+% tracklang.tex but if this file isn't loaded through tracklang.sty
+% provide a definition that ignores its argument if not already
+% defined.
+% \begin{macrocode}
+\ifx\@tracklang@declareoption\undefined
+ \def\@tracklang@declareoption#1{}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangDeclareLanguageOption}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangDeclareLanguageOption}\marg{language name}\marg{639-1
+%code}\marg{639-2 (T)}\marg{639-2 (B)}\marg{639-3}\marg{3166-1}\marg{default
+%script}
+%\end{definition}
+%Define a new root language that's declared as an option.
+%The language name must be expanded before use. The default script
+%is the ISO 15924 alpha script code. (Some languages may be written
+%in multiple scripts. Leave empty if not obvious default.)
+% \begin{macrocode}
+\def\TrackLangDeclareLanguageOption#1#2#3#4#5#6#7{%
+ \@tracklang@ifundef{@tracklang@add@#1}%
+ {%
+ \TrackLangNewLanguage{#1}{#2}{#3}{#4}{#5}{#6}{#7}%
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedLanguage{#1}%
+ \AddTrackedLanguageIsoCodes{#1}%
+ \AddTrackedCountryIsoCode{#1}%
+ }%
+ \@tracklang@declareoption{#1}%
+ }%
+ {%
+ \@tracklang@err{language option `#1' has already been defined}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@abkhaz}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{abkhaz}{ab}{abk}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@afar}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{afar}{aa}{aar}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@afrikaans}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{afrikaans}{af}{afr}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@akan}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{akan}{ak}{aka}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@albanian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{albanian}{sq}{sqi}{alb}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@amharic}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{amharic}{am}{amh}{}{}{ET}{Ethi}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@anglosaxon}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{anglosaxon}{}{ang}{}{}{}{Runr}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@apache}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{apache}{}{apa}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@arabic}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{arabic}{ar}{ara}{}{}{}{Arab}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@aragonese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{aragonese}{an}{arg}{}{}{ES}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@armenian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{armenian}{hy}{hye}{arm}{}{}{Armn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@assamese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{assamese}{as}{asm}{}{}{}{Beng}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@asturian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{asturian}{}{ast}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@avaric}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{avaric}{av}{ava}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@avestan}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{avestan}{ae}{ave}{}{}{}{Avst}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@aymara}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{aymara}{ay}{aym}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@azerbaijani}
+%\changes{1.3}{2016-10-07}{new}
+%The default script is dependent on the region, but this is a
+%regionless definition so using Latin as the default here as
+%Azerbaijani alphabet is a Latin alphabet. Other countries may be
+%using a different script, such as Cyrillic in Russia.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{azerbaijani}{az}{aze}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bahasai}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bahasai}{id}{ind}{}{}{IN}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bahasam}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bahasam}{ms}{msa}{may}{}{MY}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bambara}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bambara}{bm}{bam}{}{}{ML}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bashkir}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bashkir}{ba}{bak}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@basque}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{basque}{eu}{eus}{baq}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@belarusian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{belarusian}{be}{bel}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bengali}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bengali}{bn}{ben}{}{}{}{Beng}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@berber}
+%\changes{1.3}{2016-10-07}{new}
+%No default. Could be Tifinagh, Latin or Arabic.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{berber}{}{ber}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bihari}
+%\changes{1.3}{2016-10-07}{new}
+%No clear default.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bihari}{bh}{bih}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bislama}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bislama}{bi}{bis}{}{}{VU}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bokmal}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bokmal}{nb}{nob}{}{}{NO}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bosnian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bosnian}{bs}{bos}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@breton}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{breton}{br}{bre}{}{}{FR}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bulgarian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{bulgarian}{bg}{bul}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@burmese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{burmese}{my}{mya}{bur}{}{}{Mymr}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@catalan}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{catalan}{ca}{cat}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@chamorro}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{chamorro}{ch}{cha}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@chechen}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{chechen}{ce}{che}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@chichewa}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{chichewa}{ny}{nya}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@chinese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{chinese}{zh}{zho}{chi}{}{}{Hans}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@churchslavonic}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{churchslavonic}{cu}{chu}{}{}{}{Glag}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@chuvash}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{chuvash}{cv}{chv}{}{}{RU}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@coptic}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{coptic}{}{cop}{}{}{}{Copt}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@cornish}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{cornish}{kw}{cor}{}{}{GB}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@corsican}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{corsican}{co}{cos}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@cree}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{cree}{cr}{cre}{}{}{}{Cans}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@croatian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{croatian}{hr}{hrv}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@czech}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{czech}{cs}{ces}{cze}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@danish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{danish}{da}{dan}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@divehi}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{divehi}{dv}{div}{}{}{MV}{Thaa}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@dutch}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{dutch}{nl}{nld}{dut}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@dzongkha}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{dzongkha}{dz}{dzo}{}{}{BT}{Tibt}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@easternpunjabi}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{easternpunjabi}{pa}{pan}{}{}{IN}{Guru}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@english}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{english}{en}{eng}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@esperanto}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{esperanto}{eo}{epo}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@estonian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{estonian}{et}{est}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ewe}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ewe}{ee}{ewe}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@faroese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{faroese}{fo}{fao}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@farsi}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{farsi}{fa}{fas}{per}{}{}{Arab}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@fijian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{fijian}{fj}{fij}{}{}{FJ}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@finnish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{finnish}{fi}{fin}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@french}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{french}{fr}{fra}{fre}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@friulan}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{friulan}{}{fur}{}{}{IT}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@fula}
+%\changes{1.3}{2016-10-07}{new}
+%No default. Could be Latin or Arabic.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{fula}{ff}{ful}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@galician}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{galician}{gl}{glg}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ganda}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ganda}{lg}{lug}{}{}{UG}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@georgian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{georgian}{ka}{kat}{geo}{}{}{Geor}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@german}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{german}{de}{deu}{ger}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@greek}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{greek}{el}{ell}{gre}{}{}{Grek}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@guarani}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{guarani}{gn}{grn}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@guiarati}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{gujarati}{gu}{guj}{}{}{}{Gujr}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@haitian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{haitian}{ht}{hat}{}{}{HT}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@hausa}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{hausa}{ha}{hau}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@hebrew}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{hebrew}{he}{heb}{}{}{}{Hebr}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@herero}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{herero}{hz}{her}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@hindi}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{hindi}{hi}{hin}{}{}{}{Deva}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@hirimotu}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{hirimotu}{ho}{hmo}{}{}{PG}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@icelandic}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{icelandic}{is}{isl}{ice}{}{IS}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ido}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ido}{io}{ido}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@igbo}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{igbo}{ig}{ibo}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@interlingua}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{interlingua}{ia}{ina}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@interlingue}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{interlingue}{ie}{ile}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@inuktitut}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{inuktitut}{iu}{iku}{}{}{}{Cans}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@inupiaq}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{inupiaq}{ik}{ipk}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@irish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{irish}{ga}{gle}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@italian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{italian}{it}{ita}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@japanese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{japanese}{ja}{jpn}{}{}{}{Hani}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@javanese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{javanese}{jv}{jav}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kalaallisut}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kalaallisut}{kl}{kal}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kannada}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kannada}{kn}{kan}{}{}{IN}{Knda}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kanuri}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kanuri}{kr}{kau}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kashmiri}
+%\changes{1.3}{2016-10-07}{new}
+%No default script. Could be Arabic or Devanagari.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kashmiri}{ks}{kas}{}{}{IN}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kazakh}
+%\changes{1.3}{2016-10-07}{new}
+%Default script varies according to region.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kazakh}{kk}{kaz}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@khmer}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{khmer}{km}{khm}{}{}{}{Khmr}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kikuyu}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kikuyu}{ki}{kik}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kinyarwanda}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kinyarwanda}{rw}{kin}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kirundi}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kirundi}{rn}{run}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@komi}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{komi}{kv}{kom}{}{}{RU}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kongo}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kongo}{kg}{kon}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@korean}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{korean}{ko}{kor}{}{}{}{Hang}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kurdish}
+%\changes{1.3}{2016-10-07}{new}
+% Script varies according to region.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kurdish}{ku}{kur}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kwanyama}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kwanyama}{kj}{kua}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kyrgyz}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{kyrgyz}{ky}{kir}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@lao}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{lao}{lo}{lao}{}{}{}{Laoo}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@latin}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{latin}{la}{lat}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@latvian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{latvian}{lv}{lav}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@limburgish}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{limburgish}{li}{lim}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@lingala}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{lingala}{ln}{lin}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@lithuanian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{lithuanian}{lt}{lit}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@lsorbian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{lsorbian}{}{dsb}{}{}{DE}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@lubakatanga}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{lubakatanga}{lu}{lub}{}{}{CD}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@luxembourgish}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{luxembourgish}{lb}{ltz}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@macedonian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{macedonian}{mk}{mkd}{mac}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@magyar}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{magyar}{hu}{hun}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@malagasy}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{malagasy}{mg}{mlg}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@malayalam}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{malayalam}{ml}{mal}{}{}{IN}{Mlym}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@maltese}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{maltese}{mt}{mlt}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@manx}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{manx}{gv}{glv}{}{}{IM}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@maori}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{maori}{mi}{mri}{mao}{}{NZ}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@marathi}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{marathi}{mr}{mar}{}{}{IN}{Deva}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@marshallese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{marshallese}{mh}{mah}{}{}{MH}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@mongolian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{mongolian}{mn}{mon}{}{}{}{Mong}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nauruan}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{nauruan}{na}{nau}{}{}{NR}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@navajo}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{navajo}{nv}{nav}{}{}{US}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ndonga}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ndonga}{ng}{ndo}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nepali}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{nepali}{ne}{nep}{}{}{}{Deva}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nko}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{nko}{}{nqo}{}{}{}{Nkoo}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@northernndebele}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{northernndebele}{nd}{nde}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nynorsk}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{nynorsk}{nn}{nno}{}{}{NO}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@norsk}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{norsk}{no}{nor}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@northernsotho}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{northernsotho}{}{nso}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nuosu}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{nuosu}{ii}{iii}{}{}{CN}{Yiii}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@occitan}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{occitan}{oc}{oci}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ojibwe}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ojibwe}{oj}{oji}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@oromo}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{oromo}{om}{orm}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@oriya}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{oriya}{or}{ori}{}{}{}{Orya}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ossetian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ossetian}{os}{oss}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@pali}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{pali}{pi}{pli}{}{}{}{Brah}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@pashto}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{pashto}{ps}{pus}{}{}{}{Arab}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@piedmontese}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{piedmontese}{}{}{}{pms}{IT}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@polish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{polish}{pl}{pol}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@portuges}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{portuges}{pt}{por}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@quechua}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{quechua}{qu}{que}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@romanian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{romanian}{ro}{ron}{rum}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@romansh}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{romansh}{rm}{roh}{}{}{CH}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@russian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{russian}{ru}{rus}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@samin}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{samin}{se}{sme}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sanskrit}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{sanskrit}{sa}{san}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@samoan}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{samoan}{sm}{smo}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sango}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{sango}{sg}{sag}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sardinian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{sardinian}{sc}{srd}{}{}{IT}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@scottish}
+%Also spoken in Canada, so no region.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{scottish}{gd}{gla}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@serbian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{serbian}{sr}{srp}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@shona}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{shona}{sn}{sna}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sindhi}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{sindhi}{sd}{snd}{}{}{}{Sind}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sinhalese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{sinhalese}{si}{sin}{}{}{LK}{Sinh}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@slovak}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{slovak}{sk}{slk}{slo}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@slovene}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{slovene}{sl}{slv}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@somali}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{somali}{so}{som}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@southernndebele}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{southernndebele}{nr}{nbl}{}{}{ZA}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@southernsotho}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{southernsotho}{st}{sot}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@spanish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{spanish}{es}{spa}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sudanese}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{sudanese}{su}{sun}{}{}{}{Sund}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swahili}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{swahili}{sw}{swa}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swati}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{swati}{ss}{ssw}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swedish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{swedish}{sv}{swe}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@syriac}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{syriac}{}{syr}{}{}{}{Syrc}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tagalog}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tagalog}{tl}{tgl}{}{}{PH}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tahitian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tahitian}{ty}{tah}{}{}{PF}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tai}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tai}{}{tai}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tajik}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tajik}{tg}{tgk}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tamil}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tamil}{ta}{tam}{}{}{}{Taml}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tatar}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tatar}{tt}{tat}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@telugu}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{telugu}{te}{tel}{}{}{IN}{Telu}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@thai}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{thai}{th}{tha}{}{}{TH}{Thai}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tibetan}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tibetan}{bo}{bod}{tib}{}{}{Tibt}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tigrinya}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tigrinya}{ti}{tir}{}{}{}{Ethi}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tonga}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tonga}{to}{ton}{}{}{TO}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tsonga}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tsonga}{ts}{tso}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@tswana}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{tswana}{tn}{tsn}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@turkish}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{turkish}{tr}{tur}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@turkmen}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{turkmen}{tk}{tuk}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@twi}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{twi}{tw}{twi}{}{}{GH}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ukrainian}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{ukrainian}{uk}{ukr}{}{}{UA}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@urdu}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{urdu}{ur}{urd}{}{}{}{Arab}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@usorbian}
+%\changes{1.3}{2016-10-07}{corrected ISO 639-1 code}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{usorbian}{}{hsb}{}{}{DE}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@uyghur}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{uyghur}{ug}{uig}{}{}{CN}{Arab}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@uzbek}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{uzbek}{uz}{uzb}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@venda}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{venda}{ve}{ven}{}{}{ZA}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@vietnamese}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{vietnamese}{vi}{vie}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@volapuk}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{volapuk}{vo}{vol}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@walloon}
+% No country code as Walloon is spoken in multiple regions
+% (Wallonia in Belgium, some villages in Northern France and north-east of
+% Wisconsin.) Not the same as Belgian French.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{walloon}{wa}{wln}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@welsh}
+%Also spoken in Argentina, so no region.
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{welsh}{cy}{cym}{wel}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@westernfrisian}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{westernfrisian}{fy}{fry}{}{}{NL}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@wolof}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{wolof}{wo}{wol}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@xhosa}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{xhosa}{xh}{xho}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@yiddish}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{yiddish}{yi}{yid}{}{}{}{Hebr}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@yoruba}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{yoruba}{yo}{yor}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@zhuang}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{zhuang}{za}{zha}{}{}{CN}{Hani}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@zulu}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareLanguageOption{zulu}{zu}{zul}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsection{Predefined Dialects}\label{sec:predefined}
+%
+% Provide some predefined dialects.
+%\begin{macro}{\TrackLangDeclareDialectOption}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangDeclareDialectOption}\marg{dialect}\marg{root
+%language}\marg{3166-1
+%code}\marg{modifier}\marg{variant}\marg{map}\marg{script}
+%\end{definition}
+%The option name is the same as the dialect name. The arguments
+%must be expanded before use. The final argument \meta{map} is the
+%mapping from \meta{dialect} to the closest \styfmt{babel} dialect
+%label. May be empty if no relevant mapping.
+% \begin{macrocode}
+\def\TrackLangDeclareDialectOption#1#2#3#4#5#6#7{%
+ \@tracklang@ifundef{@tracklang@add@#1}%
+ {%
+ \ifx\relax#3\relax
+% \end{macrocode}
+% No region.
+% \begin{macrocode}
+ \ifx\relax#4\relax
+% \end{macrocode}
+% No modifier.
+% \begin{macrocode}
+ \ifx\relax#5\relax
+% \end{macrocode}
+% No variant.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+% \end{macrocode}
+% Make it easier for the parser to pick up the dialect label.
+% Note that this should be the same as
+% \cs{TrackLangLastTrackedDialect} but the parser references
+% \cs{@tracklang@dialect}.
+% \begin{macrocode}
+ \def\@tracklang@dialect{#1}%
+ }%
+ \else
+% \end{macrocode}
+% Has variant but no modifier.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \SetTrackedDialectVariant{#1}{#5}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \fi
+ \else
+% \end{macrocode}
+% Has modifier.
+% \begin{macrocode}
+ \ifx\relax#5\relax
+% \end{macrocode}
+% No variant.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \SetTrackedDialectModifier{#1}{#4}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \else
+% \end{macrocode}
+% Variant and modifier.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \SetTrackedDialectModifier{#1}{#4}%
+ \SetTrackedDialectVariant{#1}{#5}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% Has a region.
+% \begin{macrocode}
+ \ifx\relax#4\relax
+% \end{macrocode}
+% No modifier.
+% \begin{macrocode}
+ \ifx\relax#5\relax
+% \end{macrocode}
+% No variant.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \AddTrackedIsoLanguage{3166-1}{#3}{#1}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \else
+% \end{macrocode}
+% Variant no modifier.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \AddTrackedIsoLanguage{3166-1}{#3}{#1}%
+ \SetTrackedDialectVariant{#1}{#5}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \fi
+ \else
+% \end{macrocode}
+% Has modifier.
+% \begin{macrocode}
+ \ifx\relax#5\relax
+% \end{macrocode}
+% No variant.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \AddTrackedIsoLanguage{3166-1}{#3}{#1}%
+ \SetTrackedDialectModifier{#1}{#4}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \else
+% \end{macrocode}
+% Variant and modifier.
+% \begin{macrocode}
+ \@tracklang@namedef{@tracklang@add@#1}{%
+ \AddTrackedDialect{#1}{#2}%
+ \AddTrackedLanguageIsoCodes{#2}%
+ \AddTrackedIsoLanguage{3166-1}{#3}{#1}%
+ \SetTrackedDialectModifier{#1}{#4}%
+ \SetTrackedDialectVariant{#1}{#5}%
+ \def\@tracklang@dialect{#1}%
+ }%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Add the mapping if provided.
+% \begin{macrocode}
+ \ifx\relax#6\relax
+ \else
+ \expandafter
+ \let\expandafter\@tracklang@tmp\csname @tracklang@add@#1\endcsname
+ \expandafter\def\csname @tracklang@add@#1\expandafter\endcsname
+% \end{macrocode}
+%\changes{1.3.3}{2016-11-03}{fixed mapping order}
+% \begin{macrocode}
+ \expandafter{\@tracklang@tmp\SetTrackedDialectLabelMap{#1}{#6}}%
+ \fi
+% \end{macrocode}
+% Add the script if provided.
+% \begin{macrocode}
+ \ifx\relax#7\relax
+ \else
+ \expandafter
+ \let\expandafter\@tracklang@tmp\csname @tracklang@add@#1\endcsname
+ \expandafter\def\csname @tracklang@add@#1\expandafter\endcsname
+ \expandafter{\@tracklang@tmp\SetTrackedDialectScript{#1}{#7}}%
+ \fi
+ \@tracklang@declareoption{#1}%
+ }%
+ {%
+ \@tracklang@err{dialect option `#1' has already been defined}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@acadian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{acadian}{french}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@american}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{american}{english}{US}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@australian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{australian}{english}{AU}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@austrian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{austrian}{german}{AT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@naustrian}
+%\changes{1.3}{2016-10-07}{added modifier}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{naustrian}{german}{AT}{new}{1996}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bahasa}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{bahasa}{bahasai}{IN}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@brazil}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{brazil}{portuges}{BR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@brazilian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{brazilian}{portuges}{BR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@british}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{british}{english}{GB}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@canadian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{canadian}{english}{CA}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@canadien}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{canadien}{french}{CA}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@croatia}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{croatia}{croatian}{HR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@istriacountycroatian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{istriacountycroatian}{croatian}{HR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@istriacountyitalian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{istriacountyitalian}{italian}{HR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@netherlands}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{netherlands}{dutch}{NL}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@persian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{persian}{farsi}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@flemish}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{flemish}{dutch}{BE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@francais}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{francais}{french}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@frenchb}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{frenchb}{french}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@france}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{france}{french}{FR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@belgique}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{belgique}{french}{BE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@belgiangerman}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{belgiangerman}{german}{BE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nbelgiangerman}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{nbelgiangerman}{german}{BE}{new}{1996}{ngerman}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@friulian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{friulian}{friulan}{IT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@friulano}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{friulano}{friulan}{IT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@furlan}
+%\changes{1.3.4}{2017-03-25}{new}
+%Added since it's a babel alias for friulan.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{furlan}{friulan}{IT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@kurmanji}
+%\changes{1.3.4}{2017-03-25}{new}
+%Added since it's a babel label.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{kurmanji}{kurdish}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@galicien}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{galicien}{galician}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@deutsch}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{deutsch}{german}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ngerman}
+%\changes{1.3}{2016-10-07}{added modifier}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{ngerman}{german}{}{new}{1996}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ngermanb}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{ngermanb}{german}{}{new}{1996}{ngerman}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@germanb}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{germanb}{german}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ngermanDE}
+%\changes{1.1}{2014-11-21}{new}
+%\changes{1.3}{2016-10-07}{added modifier}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{ngermanDE}{german}{DE}{new}{1996}{ngerman}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@germanDE}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{germanDE}{german}{DE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@hungarian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{hungarian}{magyar}{HU}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@indon}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{indon}{bahasai}{IN}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@indonesian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{indonesian}{bahasai}{IN}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@gaeilge}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{gaeilge}{irish}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@IEirish}
+%\changes{1.2}{2015-03-23}{new}
+% Irish spoken in Republic of Ireland
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{IEirish}{irish}{IE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@GBirish}
+%\changes{1.2}{2015-03-23}{new}
+% Irish spoken in the United Kingdom of Great Britain and Northern Ireland
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{GBirish}{irish}{GB}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@IEenglish}
+%\changes{1.2}{2015-03-23}{new}
+%English spoken in the Republic of Ireland.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{IEenglish}{english}{IE}{}{}{british}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@italy}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{italy}{italian}{IT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@vatican}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{vatican}{italian}{VA}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sanmarino}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{sanmarino}{italian}{SM}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sloveneistriaitalian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{sloveneistriaitalian}{italian}{SI}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@jerseyenglish}
+%\changes{1.1}{2014-11-21}{new}
+%Allow it to hook to pick up \cs{captionsbritish} as well as
+%\cs{captionsenglish} since the date format closely matches
+%\texttt{british}.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{jerseyenglish}{english}{JE}{}{}{british}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@jerseyfrench}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{jerseyfrench}{french}{JE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@guernseyenglish}
+%\changes{1.1}{2014-11-21}{new}
+%Allow it to hook to pick up \cs{captionsbritish} as well as
+%\cs{captionsenglish} since the date format closely matches
+%\texttt{british}.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{guernseyenglish}{english}{GG}{}{}{british}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@guernseyfrench}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{guernseyfrench}{french}{GG}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@latein}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{latein}{latin}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@lowersorbian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{lowersorbian}{lsorbian}{DE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@malay}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{malay}{bahasam}{MY}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@meyalu}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{meyalu}{bahasam}{MY}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@maltamaltese}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{maltamaltese}{maltese}{MT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@maltaenglish}
+%\changes{1.1}{2014-11-21}{new}
+%Allow it to hook to pick up \cs{captionsbritish} as well as
+%\cs{captionsenglish} since the date format closely matches
+%\texttt{british}.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{maltaenglish}{english}{MT}{}{}{british}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@newzealand}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{newzealand}{english}{NZ}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@isleofmanenglish}
+%\changes{1.1}{2014-11-21}{new}
+%Allow it to hook to pick up \cs{captionsbritish} as well as
+%\cs{captionsenglish} since the date format closely matches
+%\texttt{british}.
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{isleofmanenglish}{english}{IM}{}{}{british}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@norwegian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{norwegian}{norsk}{NO}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@piemonteis}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{piemonteis}{piedmontese}{IT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@polutonikogreek}
+%\changes{1.3}{2016-10-07}{added modifier}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{polutonikogreek}{greek}{}{polyton}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@polutoniko}
+%\changes{1.3}{2016-10-07}{added modifier}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{polutoniko}{greek}{}{polyton}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@portuguese}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{portuguese}{portuges}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@portugal}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{portugal}{portuges}{PT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@romansch}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{romansch}{romansh}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@rumantsch}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{rumantsch}{romansh}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@romanche}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{romanche}{romansh}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@russianb}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{russianb}{russian}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@gaelic}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{gaelic}{scottish}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@GBscottish}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{GBscottish}{scottish}{GB}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@serbianc}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{serbianc}{serbian}{}{}{}{}{Cyrl}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@serbianl}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{serbianl}{serbian}{}{}{}{}{Latn}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@slovenian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{slovenian}{slovene}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@slovenia}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{slovenia}{slovene}{SI}{}{}{slovenian}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@sloveneistriaslovenian}
+%\changes{1.3}{2016-10-07}{fixed root language name}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{sloveneistriaslovenian}{slovene}{SI}{}{}{slovenian}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@spainspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{spainspanish}{spanish}{ES}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@argentinespanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{argentinespanish}{spanish}{AR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@bolivianspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{bolivianspanish}{spanish}{BO}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@chilianspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{chilianspanish}{spanish}{CL}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@columbianspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{columbianspanish}{spanish}{CO}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@costaricanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{costaricanspanish}{spanish}{CR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@cubanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{cubanspanish}{spanish}{CU}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@dominicanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{dominicanspanish}{spanish}{DO}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ecudorianspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{ecudorianspanish}{spanish}{EC}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@elsalvadorspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{elsalvadorspanish}{spanish}{SV}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@guatemalanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{guatemalanspanish}{spanish}{GT}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@honduranspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{honduranspanish}{spanish}{HN}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@mexicanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{mexicanspanish}{spanish}{MX}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nicaraguanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{nicaraguanspanish}{spanish}{NI}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@panamaspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{panamaspanish}{spanish}{PA}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@paraguayspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{paraguayspanish}{spanish}{PY}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@peruvianspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{peruvianspanish}{spanish}{PE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@puertoricospanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{puertoricospanish}{spanish}{PR}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@uruguayspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{uruguayspanish}{spanish}{UY}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@venezuelanspanish}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{venezuelanspanish}{spanish}{VE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swissgerman}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{swissgerman}{german}{CH}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@nswissgerman}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{nswissgerman}{german}{CH}{new}{1996}{ngerman}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swissfrench}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{swissfrench}{french}{CH}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swissitalian}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{swissitalian}{italian}{CH}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@swissromansh}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{swissromansh}{romansh}{CH}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@UKenglish}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{UKenglish}{english}{GB}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ukraineb}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{ukraineb}{ukrainian}{UA}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@ukraine}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{ukraine}{ukrainian}{UA}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@uppersorbian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{uppersorbian}{usorbian}{DE}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@USenglish}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{USenglish}{english}{US}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@valencian}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{valencian}{catalan}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@valencien}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{valencien}{catalan}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@cymraeg}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{cymraeg}{welsh}{}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@add@GBwelsh}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\TrackLangDeclareDialectOption{GBwelsh}{welsh}{GB}{}{}{}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Dialect Option Synonyms}
+%\label{sec:dialectsyns}
+% Add some dialect synonyms:
+%\begin{macro}{\LetTrackLangSynonym}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\LetTrackLangSynonym#1#2{%
+ \expandafter\let\csname @tracklang@add@#1\expandafter\endcsname
+ \csname @tracklang@add@#2\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\LetTrackLangOption}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\def\LetTrackLangOption#1#2{%
+ \LetTrackLangSynonym{#1}{#2}%
+ \@tracklang@declareoption{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-US}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-US}{american}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-GB}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-GB}{british}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-AU}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-AU}{australian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-NZ}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-NZ}{newzealand}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-CA}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-CA}{canadian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@fr-CA}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{fr-CA}{canadien}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@fr-BE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{fr-BE}{belgique}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@pt-BR}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{pt-BR}{brazilian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@it-HR}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{it-HR}{istriacountyitalian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@nl-BE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{nl-BE}{flemish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@fr-FR}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{fr-FR}{france}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-DE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-DE}{germanDE}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-BE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-BE}{belgiangerman}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-GG}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-GG}{guernseyenglish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@fr-GG}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{fr-GG}{guernseyfrench}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@it-IT}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{it-IT}{italy}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@mt-MT}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{mt-MT}{maltamaltese}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-MT}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-MT}{maltaenglish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-IM}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-IM}{isleofmanenglish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-JE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{en-JE}{jerseyenglish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@fr-JE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{fr-JE}{jerseyfrench}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@nl-NL}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{nl-NL}{netherlands}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@pt-PT}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{pt-PT}{portugal}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@it-SM}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{it-SM}{sanmarino}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@sl-SI}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{sl-SI}{slovenia}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@it-SI}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{it-SI}{sloveneistriaitalian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-ES}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-ES}{spainspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-AR}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-AR}{argentinespanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-BO}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-BO}{bolivianspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-CL}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-CL}{chilianspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-CO}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-CO}{columbianspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-CR}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-CR}{costaricanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-CU}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-CU}{cubanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-DO}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-DO}{dominicanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-EC}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-EC}{ecudorianspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-SV}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-SV}{elsalvadorspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-GT}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-GT}{guatemalanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-HN}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-HN}{honduranspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-MX}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-MX}{mexicanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-NI}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-NI}{nicaraguanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-PA}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-PA}{panamaspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-PY}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-PY}{paraguayspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-PE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-PE}{peruvianspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-PR}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-PR}{puertoricospanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-UY}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-UY}{uruguayspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@es-VE}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{es-VE}{venezuelanspanish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-CH}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-CH}{swissgerman}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@fr-CH}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{fr-CH}{swissfrench}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@it-CH}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{it-CH}{swissitalian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@rm-CH}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{rm-CH}{swissromansh}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@it-VA}
+%\changes{1.1}{2014-11-21}{new}
+% \begin{macrocode}
+\LetTrackLangOption{it-VA}{vatican}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@ga-IE}
+%\changes{1.2}{2015-03-23}{new}
+% Irish Gaelic in Republic of Ireland.
+% \begin{macrocode}
+\LetTrackLangOption{ga-IE}{IEirish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@ga-GB}
+%\changes{1.2}{2015-03-23}{new}
+% Irish Gaelic in Northern Ireland.
+% \begin{macrocode}
+\LetTrackLangOption{ga-GB}{GBirish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@en-IE}
+%\changes{1.2}{2015-03-23}{new}
+% English spoken in Republic of Ireland.
+% \begin{macrocode}
+\LetTrackLangOption{en-IE}{IEenglish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-AT-1996}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-AT-1996}{naustrian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-AT}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-AT}{austrian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@id-IN}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{id-IN}{bahasa}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@ms-MY}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{ms-MY}{malay}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@hr-HR}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{hr-HR}{croatia}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-DE-1996}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-DE-1996}{ngermanDE}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@de-CH-1996}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{de-CH-1996}{nswissgerman}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@hu-HU}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{hu-HU}{hungarian}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@gd-GB}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{gd-GB}{GBscottish}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@tracklang@add@cy-GB}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\LetTrackLangOption{cy-GB}{GBwelsh}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Conditionals and Loops}
+%
+%\begin{macro}{\IfTrackedLanguage}
+%\begin{definition}
+%\cs{IfTrackedLanguage}\marg{language}\marg{true part}\marg{false
+%part}
+%\end{definition}
+% \begin{macrocode}
+\long\def\IfTrackedLanguage#1#2#3{%
+% \end{macrocode}
+% First find out if the language name is empty.
+% \begin{macrocode}
+ \edef\@tracklang@element{#1}%
+ \ifx\@tracklang@element\empty
+% \end{macrocode}
+% Language is empty, so do false part.
+% \begin{macrocode}
+ #3%
+ \else
+ \expandafter\@tracklang@ifinlist\expandafter{\@tracklang@element}%
+ \@tracklang@languages
+ {%
+% \end{macrocode}
+% In list, so do true part.
+% \begin{macrocode}
+ #2%
+ }%
+ {%
+% \end{macrocode}
+% Not in list, so do false part.
+% \begin{macrocode}
+ #3%
+ }%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfTrackedDialect}
+%\begin{definition}
+%\cs{IfTrackedDialect}\marg{dialect}\marg{true part}\marg{false
+%part}
+%\end{definition}
+% \begin{macrocode}
+\long\def\IfTrackedDialect#1#2#3{%
+ \@tracklang@ifundef{@tracklang@fromdialect@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfTrackedIsoCode}
+%\begin{definition}
+%\cs{IfTrackedIsoCode}\marg{code type}\marg{code}\marg{true part}\marg{false
+%part}
+%\end{definition}
+% \begin{macrocode}
+\long\def\IfTrackedIsoCode#1#2#3#4{%
+ \@tracklang@ifundef{@tracklang@#1@isotolang@#2}{#4}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfTrackedLanguageHasIsoCode}
+%\begin{definition}
+%\cs{IfTrackedLanguageHasIsoCode}\marg{code type}\marg{language}\marg{true part}\marg{false
+%part}
+%\end{definition}
+% \begin{macrocode}
+\long\def\IfTrackedLanguageHasIsoCode#1#2#3#4{%
+ \@tracklang@ifundef{@tracklang@#1@isofromlang@#2}{#4}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ForEachTrackedLanguage}
+%\begin{definition}
+%\cs{ForEachTrackedLanguage}\marg{cs}\marg{body}
+%\end{definition}
+% Iterates through the list of tracked languages. On each iteration
+% \meta{cs} is set to the language tag and \meta{body} is performed.
+% \begin{macrocode}
+\long\def\ForEachTrackedLanguage#1#2{%
+ \@tracklang@for#1:=\@tracklang@languages\do{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ForEachTrackedDialect}
+%\begin{definition}
+%\cs{ForEachTrackedDialect}\marg{cs}\marg{body}
+%\end{definition}
+% Iterates through the list of tracked dialects. On each iteration
+% \meta{cs} is set to the dialect tag and \meta{body} is performed.
+% \begin{macrocode}
+\long\def\ForEachTrackedDialect#1#2{%
+ \@tracklang@for#1:=\@tracklang@dialects\do{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\AnyTrackedLanguages}
+% \begin{macrocode}
+\long\def\AnyTrackedLanguages#1#2{%
+ \ifx\@tracklang@languages\empty
+ #2%
+ \else
+ #1%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfTrackedLanguageFileExists}
+%\begin{definition}
+%\cs{IfTrackedLanguageFileExists}\marg{dialect}\marg{prefix}\marg{suffix}\marg{true
+%part}\marg{false part}
+%\end{definition}
+% Determines if the file \meta{prefix}\meta{tag}\meta{suffix}
+% exists, where \meta{tag} is an ISO code or ISO codes identifying
+% the language. If \meta{dialect} hasn't been identified
+% as a tracked dialect, this just does \meta{false part},
+% otherwise this first tries with \meta{tag} set to
+% \meta{dialect}, then tries with \meta{tag} set to the root
+% language label for \meta{dialect}, then tries with \meta{tag} set to \meta{ISO
+% 639-1 code}\texttt{-}\meta{ISO 3166-1 code}, then tries with
+% \meta{tag} set to \meta{ISO 639-1 code}, then tries with
+% \meta{tag} set to \meta{ISO 639-2 code}\texttt{-}\meta{ISO 3166-1
+% code}, then tries with \meta{tag} set to \meta{ISO 639-2 code}.
+% If the file \meta{prefix}\meta{tag}\meta{suffix} exists,
+% \cs{CurrentTrackedTag} is set to \meta{tag} and \meta{true part}
+% is performed, otherwise \meta{false part} is performed.
+% \begin{macrocode}
+\long\def\IfTrackedLanguageFileExists#1#2#3#4#5{%
+% \end{macrocode}
+%Initialise.
+% \begin{macrocode}
+ \def\CurrentTrackedTag{}%
+% \end{macrocode}
+%Select this dialect.
+% \begin{macrocode}
+ \SetCurrentTrackedDialect{#1}%
+ \IfTrackedDialect{#1}%
+ {%
+% \end{macrocode}
+% Try just the dialect label.
+% \begin{macrocode}
+ \edef\CurrentTrackedTag{#1}%
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% No file found for dialect label, try \meta{ISO 639-1}-\meta{ISO
+% 3166-1} next.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode
+ {639-1}{\CurrentTrackedLanguage}
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage
+ {639-1}{\CurrentTrackedLanguage}}%
+ \ifx\CurrentTrackedRegion\empty
+% \end{macrocode}
+% No region, just try ISO 639-1 code
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedIsoCode
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}
+ {%
+% \end{macrocode}
+% No region and file for just \meta{ISO 639-1 code}. Try ISO 639-2 code.
+% (No check for 639-3 since it has 639-1 code.)
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode
+ {639-2}{\CurrentTrackedLanguage}
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage
+ {639-2}{\CurrentTrackedLanguage}}%
+ \let\CurrentTrackedTag\CurrentTrackedIsoCode
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% No region, no ISO 639-1 code and no ISO 639-2 code.
+% No file found for dialect label, try root language label next.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ }%
+ \else
+% \end{macrocode}
+% Has a region so try \meta{ISO 639-1 code}\texttt{-}\meta{region}
+% \begin{macrocode}
+ \edef\CurrentTrackedTag{%
+ \CurrentTrackedIsoCode-\CurrentTrackedRegion}%
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}
+ {%
+% \end{macrocode}
+% Has a region but \meta{ISO 639-1 code}\texttt{-}\meta{region}
+% not found, so try \meta{ISO 639-2 code}\texttt{-}\meta{region}
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode
+ {639-2}{\CurrentTrackedLanguage}
+ {%
+ \let\org@currenttrackedisocode\CurrentTrackedIsoCode
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage
+ {639-2}{\CurrentTrackedLanguage}}%
+ \edef\CurrentTrackedTag{%
+ \CurrentTrackedIsoCode-\CurrentTrackedRegion}%
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Has a region but \meta{ISO 639-1 code}\texttt{-}\meta{region} not
+% found and \meta{ISO 639-2 code}\texttt{-}\meta{region} not found,
+% so try just \meta{ISO 639-1 code}
+% \begin{macrocode}
+ \let\CurrentTrackedTag\org@currenttrackedisocode
+ \let\org@currenttrackedisocode\CurrentTrackedIsoCode
+ \let\CurrentTrackedIsoCode\CurrentTrackedTag
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}
+ {%
+% \end{macrocode}
+% Try just the ISO 639-2 code.
+% \begin{macrocode}
+ \let\CurrentTrackedIsoCode\org@currenttrackedisocode
+ \let\CurrentTrackedTag\CurrentTrackedIsoCode
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try just the region.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedRegion
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try the root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Has a region but \meta{ISO 639-1 code}\texttt{-}\meta{region}
+% not found, and no ISO 639-2 code so just try \meta{ISO 639-1 code}
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedIsoCode
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Just try the region
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedRegion
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try the root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ }%
+ }%
+ }%
+ \fi
+ }%
+ {%
+% \end{macrocode}
+% No ISO 639-1 code. Try ISO 639-2 code.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode
+ {639-2}{\CurrentTrackedLanguage}
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage
+ {639-2}{\CurrentTrackedLanguage}}%
+ }%
+ {%
+% \end{macrocode}
+% No ISO 639-1 code or ISO 639-2 code. Try 639-3 code.
+% \begin{macrocode}
+ \IfTrackedLanguageHasIsoCode
+ {639-3}{\CurrentTrackedLanguage}
+ {%
+ \edef\CurrentTrackedIsoCode{%
+ \TrackedIsoCodeFromLanguage
+ {639-3}{\CurrentTrackedLanguage}}%
+ }%
+ {%
+ \let\CurrentTrackedIsoCode\empty
+ }%
+ }%
+ \ifx\CurrentTrackedIsoCode\empty
+% \end{macrocode}
+% No ISO 639-1 code or ISO 639-2 code. Try just the region.
+% \begin{macrocode}
+ \ifx\CurrentTrackedRegion\empty
+% \end{macrocode}
+% No region. Try the root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ \else
+% \end{macrocode}
+% Try the region.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedRegion
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try the root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ \fi
+ \else
+% \end{macrocode}
+% Has ISO 639-2 or 639-3 code.
+% \begin{macrocode}
+ \ifx\CurrentTrackedRegion\empty
+% \end{macrocode}
+% Has ISO 639-2 or 639-3 code but no region.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedIsoCode
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try the root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ \else
+% \end{macrocode}
+% Has ISO 639-2 or 639-3 code and a region. Try \meta{ISO
+% 639-2 or 639-3}\texttt{-}\meta{region} first.
+% \begin{macrocode}
+ \edef\CurrentTrackedTag{%
+ \CurrentTrackedIsoCode-\CurrentTrackedRegion}%
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Has ISO 639-2 or 639-3 code and a region but \meta{ISO
+% 639-2 or 639-3}\texttt{-}\meta{region} doesn't exist. Try just \meta{ISO
+% 639-2 or 639-3}
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedIsoCode
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Has ISO 639-2 or 639-3 code and a region but \meta{ISO
+% 639-2 or 639-3} doesn't exist. Try just \meta{region}
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedRegion
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}%
+ {#4}%
+ {%
+% \end{macrocode}
+% Try the root language.
+% \begin{macrocode}
+ \let\CurrentTrackedTag\CurrentTrackedLanguage
+ \@tracklang@IfFileExists{#2\CurrentTrackedTag#3}{#4}{#5}%
+ }%
+ }%
+ }%
+ \fi
+ \fi
+ }%
+ }%
+ }%
+ {#5}% unknown dialect
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Resources}
+%Provide some commands to make it easier for package authors to
+%integrate the package code with \styfmt{tracklang}. In the
+%command definition describes below, \meta{pkgname} indicates the
+%initial part of the resource files that follow the naming
+%convention, \meta{pkgname}\texttt{-}\meta{tag}\texttt{.ldf}.
+%Typically this will match the base name of the package that uses
+%those resource files, but this isn't compulsory.
+% The argument \meta{tag} is the current tracked tag obtained from
+% \cs{IfTrackedLanguageFileExists}.
+%
+%\begin{macro}{\TrackLangProvidesResource}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangProvidesResource}\marg{tag}\oarg{version}
+%\end{definition}
+%If \cs{ProvidesFile} exists, we can use that, otherwise we need to
+%provide a generic version.
+% \begin{macrocode}
+\ifx\ProvidesFile\undefined
+% \end{macrocode}
+%Generic code uses simplistic method to grab the version
+%details in the final optional argument. Since we're not using
+%\LaTeX\ we don't have commands like \cs{@ifnextchar} available.
+% \begin{macrocode}
+ \long\def\TrackLangProvidesResource#1#2{%
+ \ifx\TrackLangRequireDialectPrefix\undefined
+ \@tracklang@err{Resources files using
+ \string\TrackLangProvidesResource\space
+ must be loaded with \string\TrackLangRequireDialect}%
+ \fi
+ \ifx#2[\relax
+ \def\@tracklang@next{%
+ \@tracklang@providesresource{\TrackLangRequireDialectPrefix-#1.ldf}#2%
+ }
+ \else
+ \expandafter\xdef\csname ver@\TrackLangRequireDialectPrefix
+ -#1.ldf\endcsname{}%
+ {%
+ \newlinechar=`\^^J
+ \def\MessageBreak{^^J}%
+ \message{^^JFile: \TrackLangRequireDialectPrefix-#1.ldf^^J}%
+ }%
+ \long\def\@tracklang@next{#2}%
+ \fi
+ \@tracklang@next
+ }
+ \def\@tracklang@providesresource#1[#2]{%
+ \expandafter\xdef\csname ver@#1\endcsname{#2}%
+ {%
+ \newlinechar=`\^^J
+ \def\MessageBreak{^^J}%
+ \message{^^JFile: #1 #2^^J}%
+ }%
+ }
+\else
+% \end{macrocode}
+%\LaTeX\ code can simply use \cs{ProvidesFile}.
+% \begin{macrocode}
+ \def\TrackLangProvidesResource#1{%
+ \ifx\TrackLangRequireDialectPrefix\undefined
+ \@tracklang@err{Resources files using
+ \string\TrackLangProvidesResource\space
+ must be loaded with \string\TrackLangRequireDialect}%
+ \fi
+ \ProvidesFile{\TrackLangRequireDialectPrefix-#1.ldf}%
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangAddToHook}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangAddToHook}\marg{code}\marg{type}
+%\end{definition}
+%Within the resource files, a check is required for the language
+%hook, where the hook type is given by \meta{type}.
+% For example, if \meta{type} is \texttt{captions}, the for \sty{babel},
+%this is \cs{captions\meta{dialect}} (dialect
+%obtained through \cs{CurrentTrackedDialect}) and
+%for \sty{polyglossia}, this is \cs{captions\meta{language}}
+%(language obtained through \cs{CurrentTrackedLanguage}).
+%This command is not permitted outside resource files.
+% \begin{macrocode}
+\def\TrackLangAddToHook{\noop@TrackLangAddToHook}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\noop@TrackLangAddToHook}
+% \begin{macrocode}
+\def\noop@TrackLangAddToHook#1#2{%
+ \@tracklang@err{\string\TrackLangAddToHook\space
+ only permitted within resource files}
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@TrackLangAddToHook}
+% \begin{macrocode}
+\def\@TrackLangAddToHook#1#2{%
+% \end{macrocode}
+% \sty{babel} check first.
+% \begin{macrocode}
+ \@tracklang@ifundef{#2\CurrentTrackedDialect}%
+ {%
+% \end{macrocode}
+% Does the dialect label have a mapping?
+% \begin{macrocode}
+ \IfTrackedDialectHasMapping{\CurrentTrackedDialect}%
+ {%
+% \end{macrocode}
+% Try the mapping label next.
+% \begin{macrocode}
+ \edef\@tracklang@tmp{%
+ \csname @tracklang@dialectmap@tohook@\CurrentTrackedDialect\endcsname}%
+ \@tracklang@ifundef{#2\@tracklang@tmp}%
+ {%
+% \end{macrocode}
+% No captions hook. Try \sty{polyglossia}.
+% \begin{macrocode}
+ \@tracklang@ifundef{#2\CurrentTrackedLanguage}%
+ {%
+% \end{macrocode}
+% No captions hook. Do the code now.
+% \begin{macrocode}
+ #1%
+ }%
+ {%
+ \@tracklang@addtohook{#2}{\CurrentTrackedLanguage}{#1}%
+ }%
+ }%
+ {%
+ \@tracklang@addtohook{#2}{\@tracklang@tmp}{#1}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% \sty{polyglossia} check next.
+% \begin{macrocode}
+ \@tracklang@ifundef{#2\CurrentTrackedLanguage}%
+ {%
+% \end{macrocode}
+% No captions hook.
+% \begin{macrocode}
+ }%
+ {%
+ \@tracklang@addtohook{#2}{\CurrentTrackedLanguage}{#1}%
+ }%
+ }%
+ }%
+ {%
+ \@tracklang@addtohook{#2}{\CurrentTrackedDialect}{#1}%
+ }%
+% \end{macrocode}
+% Do the code now. (This is needed for cases such as the \sty{ngerman}
+% which defines \cs{captionsngerman} but calls it immediately rather
+% than at the start of the document.)
+% \begin{macrocode}
+ #1%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@tracklang@addtohook}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{@tracklang@addtohook}\marg{type}\marg{label}\marg{code}
+%\end{definition}
+% \begin{macrocode}
+\def\@tracklang@addtohook#1#2#3{%
+ \expandafter\let\expandafter\@tracklang@hook\csname #1#2\endcsname
+ \expandafter
+ \gdef\csname#1#2\expandafter\endcsname\expandafter{\@tracklang@hook#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Since the captions hook is the most common, provide a shortcut.
+%\begin{macro}{\TrackLangAddToCaptions}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangAddToCaptions}\marg{code}
+%\end{definition}
+% \begin{macrocode}
+\def\TrackLangAddToCaptions#1{\TrackLangAddToHook{#1}{captions}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetTrackedDialectLabelMap}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{SetTrackedDialectLabelMap}\marg{tracklang-label}\marg{hook-label}
+%\end{definition}
+%Define a mapping between a \styfmt{tracklang} dialect label and the
+%corresponding label used by the language hook. For example,
+%\texttt{ngermanDE} is a recognised \styfmt{tracklang} dialect
+%label, but the closest \sty{babel} equivalent is \texttt{ngerman},
+%so \texttt{ngermanDE} would need to be mapped to \texttt{ngerman}
+%for the language hooks. The arguments are \meta{tracklang-label} (the
+%\styfmt{tracklang} dialect label) and \meta{hook-label} (the \sty{babel},
+%\sty{polyglossia} etc label).
+% \begin{macrocode}
+\def\SetTrackedDialectLabelMap#1#2{%
+% \end{macrocode}
+% Store the mapping that can obtain the hook label from the
+% tracklang label (tracklang to hook).
+% \begin{macrocode}
+ \@tracklang@enamedef{@tracklang@dialectmap@tohook@#1}{#2}%
+% \end{macrocode}
+% Store the mapping that can obtain the tracklang label from the
+% hook label.
+% \begin{macrocode}
+ \@tracklang@enamedef{@tracklang@dialectmap@fromhook@#2}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfTrackedDialectHasMapping}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{IfTrackedDialectHasMapping}\marg{tracklang label}\marg{true}\marg{false}
+%\end{definition}
+%Test if the \styfmt{tracklang} dialect label has been assigned a
+%mapping to a language hook.
+% \begin{macrocode}
+\def\IfTrackedDialectHasMapping#1#2#3{%
+ \@tracklang@ifundef{@tracklang@dialectmap@tohook@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IfHookHasMappingFromTrackedDialect}
+%\changes{1.3.3}{2016-11-03}{new}
+%\begin{definition}
+%\cs{IfHookHasMappingFromTrackedDialect}\marg{hook label}\marg{true}\marg{false}
+%\end{definition}
+%Tests if the language hook label has been assigned a mapping from a
+%\styfmt{tracklang} dialect label.
+% \begin{macrocode}
+\def\IfHookHasMappingFromTrackedDialect#1#2#3{%
+ \@tracklang@ifundef{@tracklang@dialectmap@fromhook@#1}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectToMapping}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectToMapping}\marg{tracklang label}
+%\end{definition}
+%Gets the mapping for the given \styfmt{tracklang} dialect label to a
+%language hook label or the \meta{label} itself if no mapping has been defined.
+% \begin{macrocode}
+\def\GetTrackedDialectToMapping#1{%
+ \@tracklang@ifundef{@tracklang@dialectmap@tohook@#1}{#1}%
+ {\csname @tracklang@dialectmap@tohook@#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GetTrackedDialectFromMapping}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{GetTrackedDialectFromMapping}\marg{language hook}
+%\end{definition}
+%Gets the reverse mapping from the given language hook to the
+%\styfmt{tracklang} label.
+% \begin{macrocode}
+\def\GetTrackedDialectFromMapping#1{%
+ \@tracklang@ifundef{@tracklang@dialectmap@fromhook@#1}{#1}%
+ {\csname @tracklang@dialectmap@fromhook@#1\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangRequireResource}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangRequireResource}\marg{tag}
+%\end{definition}
+% \begin{macrocode}
+\def\TrackLangRequireResource{\noop@TrackLangRequireResource}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\noop@TrackLangRequireResource}
+%\changes{1.3}{2016-10-07}{new}
+%Default behaviour outside of resources files: generate an
+%error and ignore arguments.
+% \begin{macrocode}
+\def\noop@TrackLangRequireResource#1{%
+ \@tracklang@err{\string\TrackLangRequireResource\space
+ only permitted within resource files}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@TrackLangRequireResource}
+%\changes{1.3}{2016-10-07}{new}
+%Actual behaviour.
+% \begin{macrocode}
+\def\@TrackLangRequireResource#1{%
+ \@tracklang@ifundef{ver@\TrackLangRequireDialectPrefix-#1.ldf}%
+ {%
+ \@tracklang@IfFileExists{\TrackLangRequireDialectPrefix-#1.ldf}%
+ {%
+ \input \TrackLangRequireDialectPrefix-#1.ldf
+ }%
+ {%
+ \@tracklang@warn{No `\TrackLangRequireDialectPrefix' support for
+ language/region `#1'\MessageBreak
+ (resource file `\TrackLangRequireDialectPrefix-#1.ldf' not found)}%
+ }%
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangRequireResourceOrDo}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangRequireResourceOrDo}\marg{tag}\marg{resource
+%loaded code}\marg{resource already loaded code}
+%\end{definition}
+%Like \cs{TrackLangRequireResource} but also does \meta{resource
+%loaded code} if the resource file is loaded or \meta{resource
+%already loaded code} if the resource file has already been loaded.
+% \begin{macrocode}
+\def\TrackLangRequireResourceOrDo{%
+ \noop@TrackLangRequireResourceOrDo
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\noop@TrackLangRequireResourceOrDo}
+%\changes{1.3}{2016-10-07}{new}
+%Default behaviour outside of resources files: generate an
+%error and ignore arguments.
+% \begin{macrocode}
+\def\noop@TrackLangRequireResourceOrDo#1#2#3{%
+ \@tracklang@err{\string\TrackLangRequireResourceOrDo\space
+ only permitted within resource files}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@TrackLangRequireResourceOrDo}
+%\changes{1.3}{2016-10-07}{new}
+%Actual behaviour.
+% \begin{macrocode}
+\def\@TrackLangRequireResourceOrDo#1#2#3{%
+ \@tracklang@ifundef{ver@\TrackLangRequireDialectPrefix-#1.ldf}%
+ {%
+ \@tracklang@IfFileExists{\TrackLangRequireDialectPrefix-#1.ldf}%
+ {%
+ \input \TrackLangRequireDialectPrefix-#1.ldf
+ #2%
+ }%
+ {%
+ \@tracklang@warn{No `\TrackLangRequireDialectPrefix' support for
+ language/region `#1'\MessageBreak
+ (resource file `\TrackLangRequireDialectPrefix-#1.ldf' not found)}%
+ }%
+ }%
+ {#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangRequestResource}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangRequestResource}\marg{tag}\marg{not found code}
+%\end{definition}
+%Like \cs{TrackLangRequireResource} but does \meta{not found code}
+%if the file doesn't exist.
+% \begin{macrocode}
+\def\TrackLangRequestResource{\noop@TrackLangRequestResource}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\noop@TrackLangRequestResource}
+%\changes{1.3}{2016-10-07}{new}
+%Default behaviour outside of resources files: generate an
+%error and ignore arguments.
+% \begin{macrocode}
+\def\noop@TrackLangRequestResource#1#2{%
+ \@tracklang@err{\string\TrackLangRequestResource\space
+ only permitted within resource files}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@TrackLangRequestResource}
+%\changes{1.3}{2016-10-07}{new}
+%Actual behaviour.
+% \begin{macrocode}
+\def\@TrackLangRequestResource#1#2{%
+ \@tracklang@ifundef{ver@\TrackLangRequireDialectPrefix-#1.ldf}%
+ {%
+ \@tracklang@IfFileExists{\TrackLangRequireDialectPrefix-#1.ldf}%
+ {%
+ \input \TrackLangRequireDialectPrefix-#1.ldf
+ }%
+ {#2}%
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangRequireDialect}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangRequireDialect}\oarg{load code}\marg{pkgname}\marg{dialect}
+%\end{definition}
+% \begin{macrocode}
+\def\TrackLangRequireDialect{\@TrackLangRequireDialect}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\noop@TrackLangRequireDialect}
+%\changes{1.3}{2016-10-07}{new}
+%No-op code.
+% \begin{macrocode}
+\def\noop@TrackLangRequireDialect#1{%
+ \ifx[#1\relax
+ \def\@tracklang@next{\@noop@TrackLangRequireDialect[}%
+ \else
+ \def\@tracklang@next{\@noop@TrackLangRequireDialect[]{#1}}%
+ \fi
+ \@tracklang@next
+}
+\def\@noop@TrackLangRequireDialect[#1]#2#3{%
+ \@tracklang@err{\string\TrackLangRequireDialect\space
+ only permitted within resource files}
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@TrackLangRequireDialect}
+%\changes{1.3}{2016-10-07}{new}
+%Actual code.
+% \begin{macrocode}
+\def\@TrackLangRequireDialect#1{%
+ \ifx[#1\relax
+ \def\@tracklang@next{\@@TrackLangRequireDialect[}%
+ \else
+ \def\@tracklang@next{%
+ \@@TrackLangRequireDialect
+ [\TrackLangRequireResource{\CurrentTrackedTag}]{#1}}%
+ \fi
+ \@tracklang@next
+}
+\def\@@TrackLangRequireDialect[#1]#2#3{%
+ \def\TrackLangRequireDialectPrefix{#2}%
+ \IfTrackedLanguageFileExists{#3}%
+ {#2-}% prefix
+ {.ldf}% suffix
+ {%
+% \end{macrocode}
+%Enable \cs{TrackLangRequireResource} etc so that they can only be used in
+%resource files.
+% \begin{macrocode}
+ \let\TrackLangRequireResource\@TrackLangRequireResource
+ \let\TrackLangRequireResourceOrDo\@TrackLangRequireResourceOrDo
+ \let\TrackLangRequestResource\@TrackLangRequestResource
+% \end{macrocode}
+%Disable \cs{TrackLangRequireDialect} so that it can't be used in
+%resource files.
+% \begin{macrocode}
+ \let\TrackLangRequireDialect\noop@TrackLangRequireDialect
+% \end{macrocode}
+%Enable \cs{TrackLangAddToHook}.
+% \begin{macrocode}
+ \let\TrackLangAddToHook\@TrackLangAddToHook
+% \end{macrocode}
+%Load resource file using the code provided in the first argument.
+% \begin{macrocode}
+ #1%
+% \end{macrocode}
+%Disable \cs{TrackLangRequireResource} etc.
+% \begin{macrocode}
+ \let\TrackLangRequireResource\noop@TrackLangRequireResource
+ \let\TrackLangRequireResourceOrDo\noop@TrackLangRequireResourceOrDo
+ \let\TrackLangRequestResource\noop@TrackLangRequestResource
+% \end{macrocode}
+%Enable \cs{TrackLangRequireDialect}.
+% \begin{macrocode}
+ \let\TrackLangRequireDialect\@TrackLangRequireDialect
+% \end{macrocode}
+%Disable \cs{TrackLangAddToHook}.
+% \begin{macrocode}
+ \let\TrackLangAddToHook\noop@TrackLangAddToHook
+ }%
+ {%
+ \@tracklang@warn{No `#2' support for dialect `#3'}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%Restore category code for \texttt{@} if necessary.
+% \begin{macrocode}
+\@tracklang@restore@at
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tracklang.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tracklang-region-codes.tex>
+% \end{macrocode}
+%\fi
+%\section{Regions Generic Code (\texttt{tracklang-region-codes.tex})}
+%This is only loaded if a mapping is required between
+%numeric and alphabetic region codes. (It would slow down the
+%package loading to automatically load if not required.)
+%Since this is loaded on the fly, we need to be careful about
+%spurious spaces.
+%\changes{1.3}{2016-10-07}{added tracklang-region-codes.tex}
+% \begin{macrocode}
+\ifnum\catcode`\@=11\relax
+ \def\@tracklang@regions@restore@at{}%
+\else
+ \expandafter\edef\csname @tracklang@regions@restore@at\endcsname{%
+ \noexpand\catcode`\noexpand\@=\number\catcode`\@\relax
+ }%
+ \catcode`\@=11\relax
+\fi
+% \end{macrocode}
+% Check if this file has already been loaded:
+% \begin{macrocode}
+\ifx\TrackLangRegionMap\undefined
+\else
+ \@tracklang@regions@restore@at
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+% Version info.
+% \begin{macrocode}
+\expandafter\def\csname ver@tracklang-region-codes.tex\endcsname{%
+ 2019/08/31 v1.3.7 (NLCT) Track Languages Regions}%
+% \end{macrocode}
+%
+%\begin{macro}{\TrackLangRegionMap}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangRegionMap}\marg{numeric code}\marg{alpha-2
+%code}\marg{alpha-3 code}
+%\end{definition}
+%Define mapping.
+% \begin{macrocode}
+\def\TrackLangRegionMap#1#2#3{%
+ \@tracklang@enamedef{@tracklang@region@numtoalphaii@#1}{#2}%
+ \@tracklang@enamedef{@tracklang@region@numtoalphaiii@#1}{#3}%
+ \@tracklang@enamedef{@tracklang@region@alphaiitonum@#2}{#1}%
+ \@tracklang@enamedef{@tracklang@region@alphaiiitonum@#3}{#1}%
+ \@tracklang@enamedef{@tracklang@region@alphaiitoalphaiii@#2}{#3}%
+ \@tracklang@enamedef{@tracklang@region@alphaiiitoalphaii@#3}{#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangAlphaIIToNumericRegion}
+%\begin{definition}
+%\cs{TrackLangAlphaIIToNumericRegion}\marg{alpha-2 code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangAlphaIIToNumericRegion#1{%
+ \@tracklang@nameuse{@tracklang@region@alphaiitonum@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangNumericToAlphaIIRegion}
+%\begin{definition}
+%\cs{TrackLangNumericToAlphaIIRegion}\marg{numeric code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangNumericToAlphaIIRegion#1{%
+ \@tracklang@nameuse{@tracklang@region@numtoalphaii@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownAlphaIIRegion}
+%\begin{definition}
+%\cs{TrackLangIfKnownAlphaIIRegion}\marg{alpha-2
+%code}\marg{true}\marg{false}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangIfKnownAlphaIIRegion#1#2#3{%
+ \@tracklang@ifundef{@tracklang@region@alphaiitonum@#1}%
+ {#3}%
+ {#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownNumericRegion}
+%\begin{definition}
+%\cs{TrackLangIfKnownNumericRegion}\marg{numeric
+%code}\marg{true}\marg{false}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangIfKnownNumericRegion#1#2#3{%
+ \@tracklang@ifundef{@tracklang@region@numtoalphaii@#1}%
+ {#3}%
+ {#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangAlphaIIIToNumericRegion}
+%\begin{definition}
+%\cs{TrackLangAlphaIIIToNumericRegion}\marg{alpha-3 code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangAlphaIIIToNumericRegion#1{%
+ \@tracklang@nameuse{@tracklang@region@alphaiiitonum@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangNumericToAlphaIIIRegion}
+%\begin{definition}
+%\cs{TrackLangNumericToAlphaIIIRegion}\marg{numeric code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangNumericToAlphaIIIRegion#1{%
+ \@tracklang@nameuse{@tracklang@region@numtoalphaiii@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangIfKnownAlphaIIIRegion}
+%\begin{definition}
+%\cs{TrackLangIfKnownAlphaIIIRegion}\marg{alpha-3
+%code}\marg{true}\marg{false}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangIfKnownAlphaIIIRegion#1#2#3{%
+ \@tracklang@ifundef{@tracklang@region@alphaiiitonum@#1}%
+ {#3}%
+ {#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%Define mappings.
+% \begin{macrocode}
+\TrackLangRegionMap{004}{AF}{AFG}%
+\TrackLangRegionMap{248}{AX}{ALA}%
+\TrackLangRegionMap{008}{AL}{ALB}%
+\TrackLangRegionMap{012}{DZ}{DZA}%
+\TrackLangRegionMap{016}{AS}{ASM}%
+\TrackLangRegionMap{020}{AD}{AND}%
+\TrackLangRegionMap{024}{AO}{AGO}%
+\TrackLangRegionMap{660}{AI}{AIA}%
+\TrackLangRegionMap{010}{AQ}{ATA}%
+\TrackLangRegionMap{028}{AG}{ATG}%
+\TrackLangRegionMap{032}{AR}{ARG}%
+\TrackLangRegionMap{051}{AM}{ARM}%
+\TrackLangRegionMap{533}{AW}{ABW}%
+\TrackLangRegionMap{036}{AU}{AUS}%
+\TrackLangRegionMap{040}{AT}{AUT}%
+\TrackLangRegionMap{031}{AZ}{AZE}%
+\TrackLangRegionMap{044}{BS}{BHS}%
+\TrackLangRegionMap{048}{BH}{BHR}%
+\TrackLangRegionMap{050}{BD}{BGD}%
+\TrackLangRegionMap{052}{BB}{BRB}%
+\TrackLangRegionMap{112}{BY}{BLR}%
+\TrackLangRegionMap{056}{BE}{BEL}%
+\TrackLangRegionMap{084}{BZ}{BLZ}%
+\TrackLangRegionMap{204}{BJ}{BEN}%
+\TrackLangRegionMap{060}{BM}{BMU}%
+\TrackLangRegionMap{064}{BT}{BTN}%
+\TrackLangRegionMap{068}{BO}{BOL}%
+\TrackLangRegionMap{535}{BQ}{BES}%
+\TrackLangRegionMap{070}{BA}{BIH}%
+\TrackLangRegionMap{072}{BW}{BWA}%
+\TrackLangRegionMap{074}{BV}{BVT}%
+\TrackLangRegionMap{076}{BR}{BRA}%
+\TrackLangRegionMap{086}{IO}{IOT}%
+\TrackLangRegionMap{096}{BN}{BRN}%
+\TrackLangRegionMap{100}{BG}{BGR}%
+\TrackLangRegionMap{854}{BF}{BFA}%
+\TrackLangRegionMap{108}{BI}{BDI}%
+\TrackLangRegionMap{132}{CV}{CPV}%
+\TrackLangRegionMap{116}{KH}{KHM}%
+\TrackLangRegionMap{120}{CM}{CMR}%
+\TrackLangRegionMap{124}{CA}{CAN}%
+\TrackLangRegionMap{136}{KY}{CYM}%
+\TrackLangRegionMap{140}{CF}{CAF}%
+\TrackLangRegionMap{148}{TD}{TCD}%
+\TrackLangRegionMap{152}{CL}{CHL}%
+\TrackLangRegionMap{156}{CN}{CHN}%
+\TrackLangRegionMap{162}{CX}{CXR}%
+\TrackLangRegionMap{166}{CC}{CCK}%
+\TrackLangRegionMap{170}{CO}{COL}%
+\TrackLangRegionMap{174}{KM}{COM}%
+\TrackLangRegionMap{180}{CD}{COD}%
+\TrackLangRegionMap{178}{CG}{COG}%
+\TrackLangRegionMap{184}{CK}{COK}%
+\TrackLangRegionMap{188}{CR}{CRI}%
+\TrackLangRegionMap{384}{CI}{CIV}%
+\TrackLangRegionMap{191}{HR}{HRV}%
+\TrackLangRegionMap{192}{CU}{CUB}%
+\TrackLangRegionMap{531}{CW}{CUW}%
+\TrackLangRegionMap{196}{CY}{CYP}%
+\TrackLangRegionMap{203}{CZ}{CZE}%
+\TrackLangRegionMap{208}{DK}{DNK}%
+\TrackLangRegionMap{262}{DJ}{DJI}%
+\TrackLangRegionMap{212}{DM}{DMA}%
+\TrackLangRegionMap{214}{DO}{DOM}%
+\TrackLangRegionMap{218}{EC}{ECU}%
+\TrackLangRegionMap{818}{EG}{EGY}%
+\TrackLangRegionMap{222}{SV}{SLV}%
+\TrackLangRegionMap{226}{GQ}{GNQ}%
+\TrackLangRegionMap{232}{ER}{ERI}%
+\TrackLangRegionMap{233}{EE}{EST}%
+\TrackLangRegionMap{231}{ET}{ETH}%
+\TrackLangRegionMap{238}{FK}{FLK}%
+\TrackLangRegionMap{234}{FO}{FRO}%
+\TrackLangRegionMap{242}{FJ}{FJI}%
+\TrackLangRegionMap{246}{FI}{FIN}%
+\TrackLangRegionMap{250}{FR}{FRA}%
+\TrackLangRegionMap{254}{GF}{GUF}%
+\TrackLangRegionMap{258}{PF}{PYF}%
+\TrackLangRegionMap{260}{TF}{ATF}%
+\TrackLangRegionMap{266}{GA}{GAB}%
+\TrackLangRegionMap{270}{GM}{GMB}%
+\TrackLangRegionMap{268}{GE}{GEO}%
+\TrackLangRegionMap{276}{DE}{DEU}%
+\TrackLangRegionMap{288}{GH}{GHA}%
+\TrackLangRegionMap{292}{GI}{GIB}%
+\TrackLangRegionMap{300}{GR}{GRC}%
+\TrackLangRegionMap{304}{GL}{GRL}%
+\TrackLangRegionMap{308}{GD}{GRD}%
+\TrackLangRegionMap{312}{GP}{GLP}%
+\TrackLangRegionMap{316}{GU}{GUM}%
+\TrackLangRegionMap{320}{GT}{GTM}%
+\TrackLangRegionMap{831}{GG}{GGY}%
+\TrackLangRegionMap{324}{GN}{GIN}%
+\TrackLangRegionMap{624}{GW}{GNB}%
+\TrackLangRegionMap{328}{GY}{GUY}%
+\TrackLangRegionMap{332}{HT}{HTI}%
+\TrackLangRegionMap{334}{HM}{HMD}%
+\TrackLangRegionMap{336}{VA}{VAT}%
+\TrackLangRegionMap{340}{HN}{HND}%
+\TrackLangRegionMap{344}{HK}{HKG}%
+\TrackLangRegionMap{348}{HU}{HUN}%
+\TrackLangRegionMap{352}{IS}{ISL}%
+\TrackLangRegionMap{356}{IN}{IND}%
+\TrackLangRegionMap{360}{ID}{IDN}%
+\TrackLangRegionMap{364}{IR}{IRN}%
+\TrackLangRegionMap{368}{IQ}{IRQ}%
+\TrackLangRegionMap{372}{IE}{IRL}%
+\TrackLangRegionMap{833}{IM}{IMN}%
+\TrackLangRegionMap{376}{IL}{ISR}%
+\TrackLangRegionMap{380}{IT}{ITA}%
+\TrackLangRegionMap{388}{JM}{JAM}%
+\TrackLangRegionMap{392}{JP}{JPN}%
+\TrackLangRegionMap{832}{JE}{JEY}%
+\TrackLangRegionMap{400}{JO}{JOR}%
+\TrackLangRegionMap{398}{KZ}{KAZ}%
+\TrackLangRegionMap{404}{KE}{KEN}%
+\TrackLangRegionMap{296}{KI}{KIR}%
+\TrackLangRegionMap{408}{KP}{PRK}%
+\TrackLangRegionMap{410}{KR}{KOR}%
+\TrackLangRegionMap{414}{KW}{KWT}%
+\TrackLangRegionMap{417}{KG}{KGZ}%
+\TrackLangRegionMap{418}{LA}{LAO}%
+\TrackLangRegionMap{428}{LV}{LVA}%
+\TrackLangRegionMap{422}{LB}{LBN}%
+\TrackLangRegionMap{426}{LS}{LSO}%
+\TrackLangRegionMap{430}{LR}{LBR}%
+\TrackLangRegionMap{434}{LY}{LBY}%
+\TrackLangRegionMap{438}{LI}{LIE}%
+\TrackLangRegionMap{440}{LT}{LTU}%
+\TrackLangRegionMap{442}{LU}{LUX}%
+\TrackLangRegionMap{446}{MO}{MAC}%
+\TrackLangRegionMap{807}{MK}{MKD}%
+\TrackLangRegionMap{450}{MG}{MDG}%
+\TrackLangRegionMap{454}{MW}{MWI}%
+\TrackLangRegionMap{458}{MY}{MYS}%
+\TrackLangRegionMap{462}{MV}{MDV}%
+\TrackLangRegionMap{466}{ML}{MLI}%
+\TrackLangRegionMap{470}{MT}{MLT}%
+\TrackLangRegionMap{584}{MH}{MHL}%
+\TrackLangRegionMap{474}{MQ}{MTQ}%
+\TrackLangRegionMap{478}{MR}{MRT}%
+\TrackLangRegionMap{480}{MU}{MUS}%
+\TrackLangRegionMap{175}{YT}{MYT}%
+\TrackLangRegionMap{484}{MX}{MEX}%
+\TrackLangRegionMap{583}{FM}{FSM}%
+\TrackLangRegionMap{498}{MD}{MDA}%
+\TrackLangRegionMap{492}{MC}{MCO}%
+\TrackLangRegionMap{496}{MN}{MNG}%
+\TrackLangRegionMap{499}{ME}{MNE}%
+\TrackLangRegionMap{500}{MS}{MSR}%
+\TrackLangRegionMap{504}{MA}{MAR}%
+\TrackLangRegionMap{508}{MZ}{MOZ}%
+\TrackLangRegionMap{104}{MM}{MMR}%
+\TrackLangRegionMap{516}{NA}{NAM}%
+\TrackLangRegionMap{520}{NR}{NRU}%
+\TrackLangRegionMap{524}{NP}{NPL}%
+\TrackLangRegionMap{528}{NL}{NLD}%
+\TrackLangRegionMap{540}{NC}{NCL}%
+\TrackLangRegionMap{554}{NZ}{NZL}%
+\TrackLangRegionMap{558}{NI}{NIC}%
+\TrackLangRegionMap{562}{NE}{NER}%
+\TrackLangRegionMap{566}{NG}{NGA}%
+\TrackLangRegionMap{570}{NU}{NIU}%
+\TrackLangRegionMap{574}{NF}{NFK}%
+\TrackLangRegionMap{580}{MP}{MNP}%
+\TrackLangRegionMap{578}{NO}{NOR}%
+\TrackLangRegionMap{512}{OM}{OMN}%
+\TrackLangRegionMap{586}{PK}{PAK}%
+\TrackLangRegionMap{585}{PW}{PLW}%
+\TrackLangRegionMap{275}{PS}{PSE}%
+\TrackLangRegionMap{591}{PA}{PAN}%
+\TrackLangRegionMap{598}{PG}{PNG}%
+\TrackLangRegionMap{600}{PY}{PRY}%
+\TrackLangRegionMap{604}{PE}{PER}%
+\TrackLangRegionMap{608}{PH}{PHL}%
+\TrackLangRegionMap{612}{PN}{PCN}%
+\TrackLangRegionMap{616}{PL}{POL}%
+\TrackLangRegionMap{620}{PT}{PRT}%
+\TrackLangRegionMap{630}{PR}{PRI}%
+\TrackLangRegionMap{634}{QA}{QAT}%
+\TrackLangRegionMap{638}{RE}{REU}%
+\TrackLangRegionMap{642}{RO}{ROU}%
+\TrackLangRegionMap{643}{RU}{RUS}%
+\TrackLangRegionMap{646}{RW}{RWA}%
+\TrackLangRegionMap{652}{BL}{BLM}%
+\TrackLangRegionMap{654}{SH}{SHN}%
+\TrackLangRegionMap{659}{KN}{KNA}%
+\TrackLangRegionMap{662}{LC}{LCA}%
+\TrackLangRegionMap{663}{MF}{MAF}%
+\TrackLangRegionMap{666}{PM}{SPM}%
+\TrackLangRegionMap{670}{VC}{VCT}%
+\TrackLangRegionMap{882}{WS}{WSM}%
+\TrackLangRegionMap{674}{SM}{SMR}%
+\TrackLangRegionMap{678}{ST}{STP}%
+\TrackLangRegionMap{682}{SA}{SAU}%
+\TrackLangRegionMap{686}{SN}{SEN}%
+\TrackLangRegionMap{688}{RS}{SRB}%
+\TrackLangRegionMap{690}{SC}{SYC}%
+\TrackLangRegionMap{694}{SL}{SLE}%
+\TrackLangRegionMap{702}{SG}{SGP}%
+\TrackLangRegionMap{534}{SX}{SXM}%
+\TrackLangRegionMap{703}{SK}{SVK}%
+\TrackLangRegionMap{705}{SI}{SVN}%
+\TrackLangRegionMap{090}{SB}{SLB}%
+\TrackLangRegionMap{706}{SO}{SOM}%
+\TrackLangRegionMap{710}{ZA}{ZAF}%
+\TrackLangRegionMap{239}{GS}{SGS}%
+\TrackLangRegionMap{728}{SS}{SSD}%
+\TrackLangRegionMap{724}{ES}{ESP}%
+\TrackLangRegionMap{144}{LK}{LKA}%
+\TrackLangRegionMap{729}{SD}{SDN}%
+\TrackLangRegionMap{740}{SR}{SUR}%
+\TrackLangRegionMap{744}{SJ}{SJM}%
+\TrackLangRegionMap{748}{SZ}{SWZ}%
+\TrackLangRegionMap{752}{SE}{SWE}%
+\TrackLangRegionMap{756}{CH}{CHE}%
+\TrackLangRegionMap{760}{SY}{SYR}%
+\TrackLangRegionMap{158}{TW}{TWN}%
+\TrackLangRegionMap{762}{TJ}{TJK}%
+\TrackLangRegionMap{834}{TZ}{TZA}%
+\TrackLangRegionMap{764}{TH}{THA}%
+\TrackLangRegionMap{626}{TL}{TLS}%
+\TrackLangRegionMap{768}{TG}{TGO}%
+\TrackLangRegionMap{772}{TK}{TKL}%
+\TrackLangRegionMap{776}{TO}{TON}%
+\TrackLangRegionMap{780}{TT}{TTO}%
+\TrackLangRegionMap{788}{TN}{TUN}%
+\TrackLangRegionMap{792}{TR}{TUR}%
+\TrackLangRegionMap{795}{TM}{TKM}%
+\TrackLangRegionMap{796}{TC}{TCA}%
+\TrackLangRegionMap{798}{TV}{TUV}%
+\TrackLangRegionMap{800}{UG}{UGA}%
+\TrackLangRegionMap{804}{UA}{UKR}%
+\TrackLangRegionMap{784}{AE}{ARE}%
+\TrackLangRegionMap{826}{GB}{GBR}%
+\TrackLangRegionMap{581}{UM}{UMI}%
+\TrackLangRegionMap{840}{US}{USA}%
+\TrackLangRegionMap{858}{UY}{URY}%
+\TrackLangRegionMap{860}{UZ}{UZB}%
+\TrackLangRegionMap{548}{VU}{VUT}%
+\TrackLangRegionMap{862}{VE}{VEN}%
+\TrackLangRegionMap{704}{VN}{VNM}%
+\TrackLangRegionMap{092}{VG}{VGB}%
+\TrackLangRegionMap{850}{VI}{VIR}%
+\TrackLangRegionMap{876}{WF}{WLF}%
+\TrackLangRegionMap{732}{EH}{ESH}%
+\TrackLangRegionMap{887}{YE}{YEM}%
+\TrackLangRegionMap{894}{ZM}{ZMB}%
+\TrackLangRegionMap{716}{ZW}{ZWE}%
+% \end{macrocode}
+%
+%Restore category code of \texttt{@}.
+% \begin{macrocode}
+\@tracklang@regions@restore@at
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tracklang-region-codes.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tracklang-scripts.sty>
+% \end{macrocode}
+%\fi
+%\section{ISO 15924 Scripts \LaTeX\ Package
+%(\texttt{tracklang-scripts.sty})}
+%This is just a \LaTeX\ package wrapper for the generic code in
+%\texttt{tracklang-scripts.tex}.
+%\changes{1.3}{2016-10-07}{added tracklang-scripts.sty}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tracklang-scripts}[2019/08/31 v1.3.7 (NLCT) Track
+Language Scripts (LaTeX)]
+\RequirePackage{tracklang}
+\input{tracklang-scripts}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</tracklang-scripts.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*tracklang-scripts.tex>
+% \end{macrocode}
+%\fi
+%\section{ISO 15924 Scripts Generic Code
+%(\texttt{tracklang-scripts.tex})}
+%\label{sec:tracklang-scripts.tex}
+%Provides information about ISO 15924 scripts. Not automatically
+%loaded.
+%\changes{1.3}{2016-10-07}{added tracklang-scripts.tex}
+% \begin{macrocode}
+\ifnum\catcode`\@=11\relax
+ \def\@tracklang@scripts@restore@at{}%
+\else
+ \expandafter\edef\csname @tracklang@scripts@restore@at\endcsname{%
+ \noexpand\catcode`\noexpand\@=\number\catcode`\@\relax
+ }%
+ \catcode`\@=11\relax
+\fi
+% \end{macrocode}
+% Check if this file has already been loaded:
+% \begin{macrocode}
+\ifx\TrackLangScriptMap\undefined
+\else
+ \@tracklang@scripts@restore@at
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+% Version info.
+% \begin{macrocode}
+\expandafter\def\csname ver@tracklang-scripts.tex\endcsname{%
+ 2019/08/31 v1.3.7 (NLCT) Track Languages Scripts (Generic)}%
+% \end{macrocode}
+%
+%\begin{macro}{\TrackLangScriptsMap}
+%\changes{1.3}{2016-10-07}{new}
+%\begin{definition}
+%\cs{TrackLangScriptMap}\marg{letter
+%code}\marg{number}\marg{name}\marg{direction}\marg{parent}
+%\end{definition}
+%Define mapping. To avoid problems with encodings, only use ASCII
+%characters in the arguments. The first argument is the four-letter
+%ISO 15924 code. The second argument is the numeric code. The third
+%argument is just intended for informational purposes. The fourth
+%argument indicates the direction. This may be \texttt{LR}
+%(left-to-right), \texttt{RL} (right-to-left), \texttt{TB}
+%(top-to-bottom), \texttt{varies} or \texttt{inherited}.
+%The \meta{parent} argument is for the parent writing system, which
+%may be left blank. (Currently, this is blank for all the mappings
+%provided here, but the syntax has five arguments in case of future
+%development.)
+% \begin{macrocode}
+\def\TrackLangScriptMap#1#2#3#4#5{%
+% \end{macrocode}
+%This user command is provided to make it easier to test the script
+%using \cs{ifx}.
+% \begin{macrocode}
+ \@tracklang@enamedef{TrackLangScript#1}{#1}%
+ \@tracklang@enamedef{@tracklang@script@numtoalpha@#2}{#1}%
+ \@tracklang@enamedef{@tracklang@script@alphatonum@#1}{#2}%
+ \@tracklang@enamedef{@tracklang@script@alphatoname@#1}{#3}%
+ \@tracklang@enamedef{@tracklang@script@alphatodir@#1}{#4}%
+ \ifx\relax#5\relax
+ \else
+ \@tracklang@enamedef{@tracklang@script@parent@#1}{#5}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptAlphaToNumeric}
+%\begin{definition}
+%\cs{TrackLangScriptAlphaToNumeric}\marg{alpha code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptAlphaToNumeric#1{%
+ \@tracklang@nameuse{@tracklang@script@alphatonum@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptIfKnownAlpha}
+%\begin{definition}
+%\cs{TrackLangScriptIfKnownAlpha}\marg{alpha
+%code}\marg{true}\marg{false}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptIfKnownAlpha#1#2#3{%
+ \@tracklang@ifundef{@tracklang@script@alphatonum@#1}%
+ {#3}%
+ {#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptNumericToAlpha}
+%\begin{definition}
+%\cs{TrackLangScriptNumericToAlpha}\marg{numeric code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptNumericToAlpha#1{%
+ \@tracklang@nameuse{@tracklang@script@numtoalpha@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptIfKnownNumeric}
+%\begin{definition}
+%\cs{TrackLangScriptIfKnownNumeric}\marg{numeric
+%code}\marg{true}\marg{false}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptIfKnownNumeric#1#2#3{%
+ \@tracklang@ifundef{@tracklang@script@numtoalpha@#1}%
+ {#3}%
+ {#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptAlphaToName}
+%\begin{definition}
+%\cs{TrackLangScriptAlphaToName}\marg{alpha code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptAlphaToName#1{%
+ \@tracklang@nameuse{@tracklang@script@alphatoname@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptAlphaToDir}
+%\begin{definition}
+%\cs{TrackLangScriptAlphaToDir}\marg{alpha code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptAlphaToDir#1{%
+ \@tracklang@nameuse{@tracklang@script@alphatodir@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%I wasn't sure whether or not to implement a parent, but it's here
+%if required. Unlike the other elements above, there's also a
+%command to set this field.
+%\begin{macro}{\TrackLangScriptSetParent}
+%\begin{definition}
+%\cs{TrackLangScriptSetParent}\marg{alpha code}\marg{parent alpha
+%code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptSetParent#1#2{%
+ \@tracklang@enamedef{@tracklang@script@parent@#1}{#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptGetParent}
+%\begin{definition}
+%\cs{TrackLangScriptGetParent}\marg{alpha code}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptGetParent#1{%
+ \@tracklang@nameuse{@tracklang@script@parent@#1}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\TrackLangScriptIfHasParent}
+%\begin{definition}
+%\cs{TrackLangScriptIfHasParent}\marg{alpha
+%code}\marg{true}\marg{false}
+%\end{definition}
+%\changes{1.3}{2016-10-07}{new}
+% \begin{macrocode}
+\def\TrackLangScriptIfHasParent#1#2#3{%
+ \@tracklang@ifundef{@tracklang@script@parent@#1}%
+ {#3}%
+ {#2}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%Define mappings. The parent information is currently missing.
+% \begin{macrocode}
+\TrackLangScriptMap{Adlm}{166}{Adlam}{RL}{}
+\TrackLangScriptMap{Afak}{439}{Afaka}{varies}{}
+\TrackLangScriptMap{Aghb}{239}{Caucasian Albanian}{LR}{}
+\TrackLangScriptMap{Ahom}{338}{Ahom, Tai Ahom}{LR}{}
+\TrackLangScriptMap{Arab}{160}{Arabic}{RL}{}
+\TrackLangScriptMap{Aran}{161}{Arabic (Nastaliq variant)}{RL}{}
+\TrackLangScriptMap{Armi}{124}{Imperial Aramaic}{RL}{}
+\TrackLangScriptMap{Armn}{230}{Armenian}{LR}{}
+\TrackLangScriptMap{Avst}{134}{Avestan}{RL}{}
+\TrackLangScriptMap{Bali}{360}{Balinese}{LR}{}
+\TrackLangScriptMap{Bamu}{435}{Bamum}{LR}{}
+\TrackLangScriptMap{Bass}{259}{Bassa Vah}{LR}{}
+\TrackLangScriptMap{Batk}{365}{Batak}{LR}{}
+\TrackLangScriptMap{Beng}{334}{Bhaiksuki}{LR}{}
+\TrackLangScriptMap{Blis}{550}{Blissymbols}{varies}{}
+\TrackLangScriptMap{Bopo}{285}{Bopomofo}{LR}{}
+\TrackLangScriptMap{Brah}{300}{Brahmi}{LR}{}
+\TrackLangScriptMap{Brai}{570}{Braille}{LR}{}
+\TrackLangScriptMap{Bugi}{367}{Buginese}{LR}{}
+\TrackLangScriptMap{Buhd}{372}{Buhid}{LR}{}
+\TrackLangScriptMap{Cakm}{349}{Chakma}{LR}{}
+\TrackLangScriptMap{Cans}{440}{Unified Canadian Aboriginal Syllabics}{LR}{}
+\TrackLangScriptMap{Cari}{201}{Carian}{LR}{}
+\TrackLangScriptMap{Cham}{358}{Cham}{LR}{}
+\TrackLangScriptMap{Cher}{445}{Cherokee}{LR}{}
+\TrackLangScriptMap{Cirt}{291}{Cirth}{varies}{}
+\TrackLangScriptMap{Copt}{204}{Coptic}{LR}{}
+\TrackLangScriptMap{Cprt}{403}{Cypriot}{RL}{}
+\TrackLangScriptMap{Cyrl}{220}{Cyrillic}{LR}{}
+\TrackLangScriptMap{Cyrs}{221}{Cyrillic (Old Church Slavonic{}
+variant)}{varies}{}
+\TrackLangScriptMap{Deva}{315}{Devanagari (Nagari)}{LR}{}
+\TrackLangScriptMap{Dsrt}{250}{Deseret (Mormon)}{LR}{}
+\TrackLangScriptMap{Dupl}{755}{Duployan shorthand, Duployan{}
+stenography}{LR}{}
+\TrackLangScriptMap{Egyd}{070}{Egyptian demotic}{RL}{}
+\TrackLangScriptMap{Egyh}{060}{Egyptian hieratic}{RL}{}
+\TrackLangScriptMap{Egyp}{050}{Egyptian hieroglyphs}{LR}{}
+\TrackLangScriptMap{Elba}{226}{Elbasan}{LR}{}
+\TrackLangScriptMap{Ethi}{430}{Ethiopic (Ge'ez)}{LR}{}
+\TrackLangScriptMap{Geok}{241}{Khutsuri (Asomtavruli and{}
+Nuskhuri)}{LR}{}
+\TrackLangScriptMap{Geor}{240}{Georgian (Mkhedruli)}{LR}{}
+\TrackLangScriptMap{Glag}{225}{Glagolitic}{LR}{}
+\TrackLangScriptMap{Goth}{206}{Gothic}{LR}{}
+\TrackLangScriptMap{Gran}{343}{Grantha}{LR}{}
+\TrackLangScriptMap{Grek}{200}{Greek}{LR}{}
+\TrackLangScriptMap{Gujr}{320}{Gujarati}{LR}{}
+\TrackLangScriptMap{Guru}{310}{Gurmukhi}{LR}{}
+\TrackLangScriptMap{Hanb}{503}{Han with Bopomofo (alias for Han +{}
+Bopomofo)}{LR}{}
+\TrackLangScriptMap{Hang}{286}{Hangul}{LR}{}
+\TrackLangScriptMap{Hani}{500}{Han (Hanzi, Kanji, Hanja)}{LR}{}
+\TrackLangScriptMap{Hano}{371}{Hanunoo}{LR}{}
+\TrackLangScriptMap{Hans}{501}{Han (Simplified variant)}{varies}{}
+\TrackLangScriptMap{Hant}{502}{Han (Traditional variant)}{varies}{}
+\TrackLangScriptMap{Hatr}{127}{Hatran}{RL}{}
+\TrackLangScriptMap{Hebr}{125}{Hebrew}{RL}{}
+\TrackLangScriptMap{Hira}{410}{Hiragana}{LR}{}
+\TrackLangScriptMap{Hluw}{080}{Anatolian Hieroglyphs (Luwian{}
+Hieroglyphs, Hittite Hieroglyphs)}{LR}{}
+\TrackLangScriptMap{Hmng}{450}{Pahawh Hmong}{LR}{}
+\TrackLangScriptMap{Hrkt}{412}{Japanese syllabaries (alias for{}
+Hiragana + Katakana)}{varies}{}
+\TrackLangScriptMap{Hung}{176}{Old Hungarian (Hungarian Runic)}{RL}{}
+\TrackLangScriptMap{Inds}{610}{Indus (Harappan)}{RL}{}
+\TrackLangScriptMap{Ital}{210}{Old Italic (Etruscan, Oscan, etc.)}{LR}{}
+\TrackLangScriptMap{Jamo}{284}{Jamo (alias for Jamo subset of{}
+Hangul)}{LR}{}
+\TrackLangScriptMap{Java}{361}{Javanese}{LR}{}
+\TrackLangScriptMap{Jpan}{413}{Japanese (alias for Han + Hiragana +{}
+Katakana)}{varies}{}
+\TrackLangScriptMap{Jurc}{510}{Jurchen}{LR}{}
+\TrackLangScriptMap{Kali}{357}{Kayah Li}{LR}{}
+\TrackLangScriptMap{Kana}{411}{Katakana}{LR}{}
+\TrackLangScriptMap{Khar}{305}{Kharoshthi}{RL}{}
+\TrackLangScriptMap{Khmr}{355}{Khmer}{LR}{}
+\TrackLangScriptMap{Khoj}{322}{Khojki}{LR}{}
+\TrackLangScriptMap{Kitl}{505}{Khitan large script}{LR}{}
+\TrackLangScriptMap{Kits}{288}{Khitan small script}{TB}{}
+\TrackLangScriptMap{Knda}{345}{Kannada}{LR}{}
+\TrackLangScriptMap{Kore}{287}{Korean (alias for Hangul + Han)}{LR}{}
+\TrackLangScriptMap{Kpel}{436}{Kpelle}{LR}{}
+\TrackLangScriptMap{Kthi}{317}{Kaithi}{LR}{}
+\TrackLangScriptMap{Lana}{351}{Tai Tham (Lanna)}{LR}{}
+\TrackLangScriptMap{Laoo}{356}{Lao}{LR}{}
+\TrackLangScriptMap{Latf}{217}{Latin (Fraktur variant)}{varies}{}
+\TrackLangScriptMap{Latg}{216}{Latin (Gaelic variant)}{LR}{}
+\TrackLangScriptMap{Latn}{215}{Latin}{LR}{}
+\TrackLangScriptMap{Leke}{364}{Leke}{LR}{}
+\TrackLangScriptMap{Lepc}{335}{Lepcha}{LR}{}
+\TrackLangScriptMap{Limb}{336}{Limbu}{LR}{}
+\TrackLangScriptMap{Lina}{400}{Linear A}{LR}{}
+\TrackLangScriptMap{Linb}{401}{Linear B}{LR}{}
+\TrackLangScriptMap{Lisu}{399}{Lisu (Fraser)}{LR}{}
+\TrackLangScriptMap{Loma}{437}{Loma}{LR}{}
+\TrackLangScriptMap{Lyci}{202}{Lycian}{LR}{}
+\TrackLangScriptMap{Lydi}{116}{Lydian}{RL}{}
+\TrackLangScriptMap{Mahj}{314}{Mahajani}{LR}{}
+\TrackLangScriptMap{Mand}{140}{Mandaic, Mandaean}{RL}{}
+\TrackLangScriptMap{Mani}{139}{Manichaean}{RL}{}
+\TrackLangScriptMap{Marc}{332}{Marchen}{LR}{}
+\TrackLangScriptMap{Maya}{090}{Mayan hieroglyphs}{varies}{}
+\TrackLangScriptMap{Mend}{438}{Mende Kikakui}{RL}{}
+\TrackLangScriptMap{Merc}{101}{Meroitic Cursive}{RL}{}
+\TrackLangScriptMap{Mero}{100}{Meroitic Hieroglyphs}{RL}{}
+\TrackLangScriptMap{Mlym}{347}{Malayalam}{LR}{}
+\TrackLangScriptMap{Modi}{324}{Modi}{LR}{}
+\TrackLangScriptMap{Mong}{145}{Mongolian}{TB}{}
+\TrackLangScriptMap{Moon}{218}{Moon (Moon code, Moon script, Moon{}
+type)}{varies}{}
+\TrackLangScriptMap{Mroo}{199}{Mro, Mru}{LR}{}
+\TrackLangScriptMap{Mtei}{337}{Meitei Mayek (Meithei, Meetei)}{LR}{}
+\TrackLangScriptMap{Mult}{323}{Multani}{LR}{}
+\TrackLangScriptMap{Mymr}{350}{Myanmar (Burmese)}{LR}{}
+\TrackLangScriptMap{Narb}{106}{Old North Arabian (Ancient North{}
+Arabian)}{RL}{}
+\TrackLangScriptMap{Nbat}{159}{Nabataean}{RL}{}
+\TrackLangScriptMap{Newa}{333}{Newa, Newar, Newari}{LR}{}
+\TrackLangScriptMap{Nkgb}{420}{Nakhi Geba}{LR}{}
+\TrackLangScriptMap{Nkoo}{165}{N'Ko}{RL}{}
+\TrackLangScriptMap{Nshu}{499}{Nushu}{LR}{}
+\TrackLangScriptMap{Ogam}{212}{Ogham}{varies}{}
+\TrackLangScriptMap{Olck}{261}{Ol Chiki}{LR}{}
+\TrackLangScriptMap{Orkh}{175}{Old Turkic, Orkhon Runic}{RL}{}
+\TrackLangScriptMap{Orya}{327}{Oriya}{LR}{}
+\TrackLangScriptMap{Osge}{219}{Osage}{LR}{}
+\TrackLangScriptMap{Osma}{260}{Osmanya}{LR}{}
+\TrackLangScriptMap{Palm}{126}{Palmyrene}{RL}{}
+\TrackLangScriptMap{Pauc}{263}{Pau Cin Hau}{LR}{}
+\TrackLangScriptMap{Perm}{227}{Old Permic}{LR}{}
+\TrackLangScriptMap{Phag}{331}{Phags-pa}{TB}{}
+\TrackLangScriptMap{Phli}{131}{Inscriptional Pahlavi}{RL}{}
+\TrackLangScriptMap{Phlp}{132}{Psalter Pahlavi}{RL}{}
+\TrackLangScriptMap{Phlv}{133}{Book Pahlavi}{RL}{}
+\TrackLangScriptMap{Phnx}{115}{Phoenician}{RL}{}
+\TrackLangScriptMap{Piqd}{293}{Klingon (KLI plqaD)}{LR}{}
+\TrackLangScriptMap{Plrd}{282}{Miao (Pollard)}{LR}{}
+\TrackLangScriptMap{Prti}{130}{Inscriptional Parthian}{RL}{}
+\TrackLangScriptMap{Qaaa}{900}{Reserved for private use{}
+(start)}{varies}{}
+\TrackLangScriptMap{Qaai}{908}{Private use}{varies}{}
+\TrackLangScriptMap{Qabx}{949}{Reserved for private use{}
+(end)}{varies}{}
+\TrackLangScriptMap{Rjng}{363}{Rejang (Redjang, Kaganga)}{LR}{}
+\TrackLangScriptMap{Roro}{620}{Rongorongo}{varies}{}
+\TrackLangScriptMap{Runr}{211}{Runic}{LR}{}
+\TrackLangScriptMap{Samr}{123}{Samaritan}{RL}{}
+\TrackLangScriptMap{Sara}{292}{Sarati}{varies}{}
+\TrackLangScriptMap{Sarb}{105}{Old South Arabian}{RL}{}
+\TrackLangScriptMap{Saur}{344}{Saurashtra}{LR}{}
+\TrackLangScriptMap{Sgnw}{095}{SignWriting}{TB}{}
+\TrackLangScriptMap{Shaw}{281}{Shavian (Shaw)}{LR}{}
+\TrackLangScriptMap{Shrd}{319}{Sharada}{LR}{}
+\TrackLangScriptMap{Sidd}{302}{Siddham}{LR}{}
+\TrackLangScriptMap{Sind}{318}{Khudawadi, Sindhi}{LR}{}
+\TrackLangScriptMap{Sinh}{348}{Sinhala}{LR}{}
+\TrackLangScriptMap{Sora}{398}{Sora Sompeng}{LR}{}
+\TrackLangScriptMap{Sund}{362}{Sundanese}{LR}{}
+\TrackLangScriptMap{Sylo}{316}{Syloti Nagri}{LR}{}
+\TrackLangScriptMap{Syrc}{135}{Syriac}{RL}{}
+\TrackLangScriptMap{Syre}{138}{Syriac (Estrangelo variant)}{RL}{}
+\TrackLangScriptMap{Syrj}{137}{Syriac (Western variant)}{RL}{}
+\TrackLangScriptMap{Syrn}{136}{Syriac (Eastern variant)}{RL}{}
+\TrackLangScriptMap{Tagb}{373}{Tagbanwa}{LR}{}
+\TrackLangScriptMap{Takr}{321}{Takri}{LR}{}
+\TrackLangScriptMap{Tale}{353}{Tai Le}{LR}{}
+\TrackLangScriptMap{Talu}{354}{New Tai Lue}{LR}{}
+\TrackLangScriptMap{Taml}{346}{Tamil}{LR}{}
+\TrackLangScriptMap{Taml}{346}{Tamil}{LR}{}
+\TrackLangScriptMap{Tang}{520}{Tangut}{LR}{}
+\TrackLangScriptMap{Tavt}{359}{Tai Viet}{LR}{}
+\TrackLangScriptMap{Telu}{340}{Telugu}{LR}{}
+\TrackLangScriptMap{Teng}{290}{Tengwar}{LR}{}
+\TrackLangScriptMap{Tfng}{120}{Tifinagh (Berber)}{LR}{}
+\TrackLangScriptMap{Tglg}{370}{Tagalog (Baybayin, Alibata)}{LR}{}
+\TrackLangScriptMap{Thaa}{170}{Thaana}{RL}{}
+\TrackLangScriptMap{Thai}{352}{Thai}{LR}{}
+\TrackLangScriptMap{Tibt}{330}{Tibetan}{LR}{}
+\TrackLangScriptMap{Tirh}{326}{Tirhuta}{LR}{}
+\TrackLangScriptMap{Ugar}{040}{Ugaritic}{LR}{}
+\TrackLangScriptMap{Vaii}{470}{Vai}{LR}{}
+\TrackLangScriptMap{Visp}{280}{Visible Speech}{LR}{}
+\TrackLangScriptMap{Wara}{262}{Warang Citi (Varang Kshiti)}{LR}{}
+\TrackLangScriptMap{Wole}{480}{Woleai}{RL}{}
+\TrackLangScriptMap{Xpeo}{030}{Old Persian}{LR}{}
+\TrackLangScriptMap{Xsux}{020}{Cuneiform, Sumero-Akkadian}{LR}{}
+\TrackLangScriptMap{Yiii}{460}{Yi}{LR}{}
+\TrackLangScriptMap{Zinh}{994}{Inherited script}{inherited}{}
+\TrackLangScriptMap{Zmth}{995}{Mathematical notation}{LR}{}
+\TrackLangScriptMap{Zsym}{996}{Symbols}{varies}{}
+\TrackLangScriptMap{Zsye}{993}{Symbols (emoji variant)}{varies}{}
+\TrackLangScriptMap{Zxxx}{997}{Unwritten documents}{varies}{}
+\TrackLangScriptMap{Zyyy}{998}{Undetermined script}{varies}{}
+\TrackLangScriptMap{Zzzz}{999}{Uncoded script}{varies}{}
+% \end{macrocode}
+%
+%Restore category code of \texttt{@}.
+% \begin{macrocode}
+\@tracklang@scripts@restore@at
+% \end{macrocode}
+
+%\iffalse
+% \begin{macrocode}
+%</tracklang-scripts.tex>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput
diff --git a/macros/generic/tracklang/tracklang.ins b/macros/generic/tracklang/tracklang.ins
new file mode 100644
index 0000000000..3158d53211
--- /dev/null
+++ b/macros/generic/tracklang/tracklang.ins
@@ -0,0 +1,39 @@
+% tracklang.ins generated using makedtx version 1.2 2019/8/31 16:29
+\input docstrip
+
+\preamble
+
+ tracklang.dtx
+ Copyright 2019 Nicola Talbot
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3
+ of this license or (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Nicola Talbot.
+
+ This work consists of the files tracklang.dtx and tracklang.ins and the derived files tracklang.sty, tracklang.tex, tracklang-region-codes.tex, tracklang-scripts.sty, tracklang-scripts.tex.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{tracklang.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tracklang.dtx}{tracklang.sty,package}}
+\file{tracklang.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tracklang.dtx}{tracklang.tex,package}}
+\file{tracklang-region-codes.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tracklang.dtx}{tracklang-region-codes.tex,package}}
+\file{tracklang-scripts.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tracklang.dtx}{tracklang-scripts.sty,package}}
+\file{tracklang-scripts.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{tracklang.dtx}{tracklang-scripts.tex,package}}
+}
+
+\endbatchfile
diff --git a/macros/generic/tracklang/tracklang.pdf b/macros/generic/tracklang/tracklang.pdf
new file mode 100644
index 0000000000..5c33ac8fac
--- /dev/null
+++ b/macros/generic/tracklang/tracklang.pdf
Binary files differ
diff --git a/macros/generic/trigonometry/README.txt b/macros/generic/trigonometry/README.txt
new file mode 100644
index 0000000000..c183b6e8ca
--- /dev/null
+++ b/macros/generic/trigonometry/README.txt
@@ -0,0 +1,3 @@
+The file "Trigonometry.tex" is released under the Knuthian Licence, the current CTAN entry for which reads along the following lines (amendments to grammar and spelling made in the following text) --
+
+"This soft­ware is copy­right and you are ex­plic­itly granted a li­cence which allows you, the “user†of the soft­ware, to copy, dis­tribute and/or mod­ify the soft­ware, provided only that if you mod­ify and then re-distribute the soft­ware it must be with a dif­fer­ent name to that of the orig­i­nal soft­ware." \ No newline at end of file
diff --git a/macros/generic/trigonometry/trigonometry.tex b/macros/generic/trigonometry/trigonometry.tex
new file mode 100644
index 0000000000..ecf51eaeae
--- /dev/null
+++ b/macros/generic/trigonometry/trigonometry.tex
@@ -0,0 +1,206 @@
+%= = = = = = = = = = = = = T R I G O N O M E T R Y . T E X = = = = = = = = =
+
+%%% Trigonometry.TeX: (as published in TeXhax Digest, September 1989)
+%%% Philip Taylor, Royal Holloway and Bedford New College, University of London
+
+%%% Routines to calculate the sine of an angle expressed in radians.
+%%% So far as I can tell, the results are accurate to four places
+%%% of decimals, for arguments in the range -pi/2 .. pi/2, except
+%%% for `ridiculously small' arguments, which cannot be accurately represented.
+
+%%% The routines for cosine and tangent are left to the reader ...
+
+%%% After a call to \Sin (<angle>), the result is available for typesetting
+%%% or boxing, and may also be extracted from the control-sequence \sine.
+
+%%% Grouping is used to hide most things, but the following csnames are
+%%% globally defined:
+
+%%% \nodimen, \n@dimen, \product, \sine, \term, \t@rm, \Term
+
+\newif \ifdebug %%% turn me on to see TeX hard at work ...
+
+\def \term #1{{x^{#1} \over #1!}}
+The power series expansion for $\sin$ is:
+$$ \sin x = x - \term3 + \term5 - \term7 + \cdots$$
+\indent and for $\cos$ is:
+$$ \cos x = 1 - \term2 + \term4 - \term6 + \cdots$$
+
+\let \then = \relax
+\chardef \letter = 11
+\chardef \other = 12
+\def \radian {pt }
+\let \radians = \radian
+\let \dimensionlessunit = \radian
+\let \dimensionlessunits = \dimensionlessunit
+\def \internalunit {sp }
+\let \internalunits = \internalunit
+\newif \ifstillconverging
+\def \Message #1{\ifdebug \then \message {#1} \fi}
+
+{ %%% Things that need abnormal catcodes %%%
+ \catcode `\@ = \letter
+ \gdef \nodimen {\expandafter \n@dimen \the \dimen}
+ \gdef \term #1 #2 #3%
+ {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value)
+ \edef \t@@ {\expandafter \n@dimen \the #2\radian}%
+ %%% freeze parameter 2 (dimen, by value)
+ \t@rm {\t@} {\t@@} {#3}%
+ }
+ \gdef \t@rm #1 #2 #3%
+ {{%
+ \count 0 = 0
+ \dimen 0 = 1 \dimensionlessunit
+ \dimen 2 = #2\relax
+ \Message {Calculating term #1 of \nodimen 2}%
+ \loop
+ \ifnum \count 0 < #1
+ \then \advance \count 0 by 1
+ \Message {Iteration \the \count 0 \space}%
+ \Multiply \dimen 0 by {\dimen 2}%
+ \Message {After multiplication, term = \nodimen 0}%
+ \Divide \dimen 0 by {\count 0}%
+ \Message {After division, term = \nodimen 0}%
+ \repeat
+ \Message {Final value for term #1 of
+ \nodimen 2 \space is \nodimen 0}%
+ \xdef \Term {#3 = \nodimen 0 \radians}%
+ \aftergroup \Term
+ }}
+ \catcode `\p = \other
+ \catcode `\t = \other
+ \gdef \n@dimen #1pt{#1} %%% throw away the ``pt''
+}
+
+\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym
+
+\def \Multiply #1by #2%%% allows division of a dimen by a dimen
+ {{%%% should really freeze parameter 2 (dimen, passed by value)
+ \count 0 = #1\relax
+ \count 2 = #2\relax
+ \count 4 = 65536
+ \Message {Before scaling, count 0 = \the \count 0 \space and
+ count 2 = \the \count 2}%
+ \ifnum \count 0 > 32767 %%% do our best to avoid overflow
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 0 < -32767
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 2 < -32767
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \multiply \count 0 by \count 2
+ \divide \count 0 by \count 4
+ \xdef \product {#1 = \the \count 0 \internalunits}%
+ \aftergroup \product
+ }}
+
+\def \Sin (#1)%
+ {{%
+ \dimen 0 = #1 \radian
+ \dimen 2 = 3.1415926535897963 \radian %%% a well-known constant
+ \divide \dimen 2 by 2 %%% we only deal with -pi/2 : pi/2
+ \ifdim \dimen 0 > \dimen 2
+ \then \message {Sin: argument (\nodimen 0) too large
+ --- use range reduction}%
+ \xdef \sine {<undefined>}%
+ \else \ifdim \dimen 0 < - \dimen 2
+ \then \message {Sin: argument (\nodimen 0) too large
+ --- use range reduction}%
+ \xdef \sine {<undefined>}%
+ \else \Message {Sin: calculating Sin of \nodimen 0}%
+ \count 0 = 1 %%% see power-series expansion for sine
+ \dimen 2 = 1 \radian %%% ditto
+ \dimen 4 = 0 \radian %%% ditto
+ \loop
+ \ifnum \dimen 2 = 0 %%% then we've done
+ \then \stillconvergingfalse
+ \else \stillconvergingtrue
+ \fi
+ \ifstillconverging %%% then calculate next term
+ \then \term {\count 0} {\dimen 0} {\dimen 2}%
+ \advance \count 0 by 2
+ \count 2 = \count 0
+ \divide \count 2 by 2
+ \ifodd \count 2 %%% signs alternate
+ \then \advance \dimen 4 by \dimen 2
+ \else \advance \dimen 4 by -\dimen 2
+ \fi
+ \repeat
+ \xdef \sine {\nodimen 4}%
+ \fi
+ \fi
+ \aftergroup \sine
+ }}
+
+%%% What follows is just a demonstration of the \Sin function
+
+$$
+\def \rule {\noalign {\hrule}}
+\def \SIN (#1){&#1&&\Sin (#1)&\cr\noalign{\message {The sine of #1 is \sine}}}
+\mathcode `\- = 32768 %%% just a bodge to improve alignment
+\let \minus = -
+\begingroup
+\catcode `\- = \active
+\gdef -{\llap{\minus}}
+\endgroup
+\vbox {\offinterlineskip
+\halign
+{\vrule #& \qquad \hfil $#$ & \vrule # & \qquad $#$ \hfil & \vrule # \strut \cr
+ \rule
+ &\omit {\hfil $x$ \hfil} && \omit {\hfil $\sin x$ \hfil} & \cr
+ \rule
+ \SIN (-1.6)
+ \SIN (-1.5)
+ \SIN (-1.4)
+ \SIN (-1.3)
+ \SIN (-1.2)
+ \SIN (-1.1)
+ \SIN (-1.0)
+ \SIN (-0.9)
+ \SIN (-0.8)
+ \SIN (-0.7)
+ \SIN (-0.6)
+ \SIN (-0.5)
+ \SIN (-0.4)
+ \SIN (-0.3)
+ \SIN (-0.2)
+ \SIN (-0.1)
+ \SIN (-0.01)
+ \SIN (-0.001)
+ \SIN (-0.0001)
+ \SIN (0)
+ \SIN (0.0001)
+ \SIN (0.001)
+ \SIN (0.01)
+ \SIN (0.1)
+ \SIN (0.2)
+ \SIN (0.3)
+ \SIN (0.4)
+ \SIN (0.5)
+ \SIN (0.6)
+ \SIN (0.7)
+ \SIN (0.8)
+ \SIN (0.9)
+ \SIN (1.0)
+ \SIN (1.1)
+ \SIN (1.2)
+ \SIN (1.3)
+ \SIN (1.4)
+ \SIN (1.5)
+ \SIN (1.6)
+ \rule}
+}
+$$
+\end
+
diff --git a/macros/generic/umrand/umrand12.readme_e b/macros/generic/umrand/umrand12.readme_e
new file mode 100644
index 0000000000..6409d34046
--- /dev/null
+++ b/macros/generic/umrand/umrand12.readme_e
@@ -0,0 +1,72 @@
+ We are finished! After a lot of trouble
+
+ UMRAND.STY
+
+ and the fonts
+
+ UMRANDA.MF + UMRANDB.MF
+
+ version 1.2
+
+are ready for use! This is the first officially distributed version.
+With UMRAND.STY you can typeset fancy frames in TeX. This can by done
+with \fbox too? Well no one of this type:
+
+ *+++*+++*+++*+++*+++*+++*+++*
+ + +
+ + TeX & METAFONT +
+ * for *
+ + President! +
+ + +
+ *+++*+++*+++*+++*+++*+++*+++*
+
+Instead of + and * there are line elements, meander, fishes, snakes,
+flowers, curls and many others in our fonts. The framesize is
+automatically computed in respect of the frame's contents. Many
+combinations of frame elements are possible.
+
+One restriction we had to made: The fonts only work on devices with
+equal x- and y-resolution. With 180x360dpi you will run into
+problems. A little comfort: You should try. You may be able to use
+some of the chars in our fonts. We don't know, whether that will
+change in the future.
+
+PS: Here you see, what we are doing at our ``table reserved for
+ regular guests'' (Langenscheid dictionary, "`Stammtisch"' in
+ German) in Wuppertal, Germany.
+
+We, that are in this case:
+
+ Andreas H"orstemeier Andreas Schrell
+ Oberlinweg 7 and Windh"ovel 2
+ D-58675 Hemer D-42279 Wuppertal
+
+ E-MAIL: Andreas.Schrell @ FernUni-Hagen.de
+
+Oh yes, you will find the files named
+
+ umrand12.zip umrand12.readme_g umrand12.readme_e
+
+in Stuttgart: ftp.uni-stuttgart.de
+in Aston: ftp.tex.ac.uk
+in Texas: ftp.shsu.edu
+in the directory: tex-archive/macros/generic/umrand
+
+Included are PK-fonts at 101 dpi (screen)
+ 300 dpi (Atari-laser SLM)
+ 300 dpi (HP-Laser/DeskJet).
+
+We hope other Servers will obtain it from there. The package may be
+freely distributed, as always you are not allowed to change the
+files. Bug reports and further hints please to one of the adresses
+above.
+
+ oooooooooooooooooooooooooooooooooooooooooooooooooooo
+ o o
+ o Especially we will be happy if all TeXnicians, o
+ o who like our fonts and use them, would send us o
+ o a POSTCARD of their home town! o
+ o o
+ oooooooooooooooooooooooooooooooooooooooooooooooooooo
+
+A lot of fun and best wishes from Andreas & Andreas
diff --git a/macros/generic/umrand/umrand12.readme_g b/macros/generic/umrand/umrand12.readme_g
new file mode 100644
index 0000000000..b762317518
--- /dev/null
+++ b/macros/generic/umrand/umrand12.readme_g
@@ -0,0 +1,71 @@
+ Es ist soweit! Nach langem Basteln ist es fertig:
+
+ UMRAND.STY
+
+ und die Fonts
+
+ UMRANDA.MF + UMRANDB.MF
+
+ Version 1.2
+
+sind verf"ugbar! Dies ist die erste offiziell verbreitete Version.
+Mit UMRAND.STY kann man Umrandungen in TeX setzen. Kann man doch mit
+\fbox? Klar, aber nicht solche:
+
+ *+++*+++*+++*+++*+++*+++*+++*
+ + +
+ + TeX & METAFONT +
+ * for *
+ + President! +
+ + +
+ *+++*+++*+++*+++*+++*+++*+++*
+
+Statt + und * gibt es in unseren Fonts Linienelemente, Meander,
+Fische, Schlangen, Blumen, Kringel und vieles andere. Die Rahmen-
+gr"o"se wird automatisch aus dem Inhalt ermittelt. Beliebige
+Zusammenstellungen von Randelementen sind m"oglich.
+
+Eine Einschr"ankung mu"sten wir leider machen: Die Fonts funktionieren
+nur auf Ausgabeger"aten mit gleicher x- und y-Aufl"osung. Also bei
+180x360dpi gehts schief. Kleiner Trost: Vielleicht mal ausprobieren,
+das eine oder andere Zeichen ist wahrscheinlich zu gebrauchen. Ob
+sich das mal "andern wird, ist sehr ungewi"s!
+
+PS: Da sieht man mal, was auf unserem Wuppertaler Stammtisch so alles
+ ausgeheckt wird!
+
+Wir, das sind in diesem Fall
+
+ Andreas H"orstemeier Andreas Schrell
+ Oberlinweg 7 und Windh"ovel 2
+ D-58675 Hemer D-42279 Wuppertal
+
+ E-MAIL: Andreas.Schrell @ FernUni-Hagen.de
+
+Ach ja, das Paket steht unter den Namen
+
+ umrand12.zip umrand12.readme_g umrand12.readme_e
+
+in Stuttgart: ftp.uni-stuttgart.de
+in Aston: ftp.tex.ac.uk
+in Texas: ftp.shsu.edu
+im Verzeichnis: tex-archive/macros/generic/umrand
+
+Es sind PK-Fonts in 101 dpi (Bildschirm)
+ 300 dpi (Atari-Laser SLM)
+ 300 dpi (HP-Laser/DeskJet) enthalten.
+
+Wir hoffen, da"s andere Server es von dort uebernehmen. Das Paket ist
+nat"urlich frei verteilbar, es d"urfen aber wie immer keine Dateien
+ver"andert werden. Fehlermeldungen und Vorschl"age bitte an eine der
+oben genannten Adressen.
+
+ ooooooooooooooooooooooooooooooooooooooooooooooo
+ o o
+ o Wir freuen uns allerdings besonders "uber o
+ o POSTKARTEN der Heimatstadt von allen, die o
+ o unsere Umrandungen m"ogen und benutzen! o
+ o o
+ ooooooooooooooooooooooooooooooooooooooooooooooo
+
+Viel Spa"s w"unschen Andreas & Andreas!
diff --git a/macros/generic/umrand/umrand_up1.readme b/macros/generic/umrand/umrand_up1.readme
new file mode 100644
index 0000000000..09800475fc
--- /dev/null
+++ b/macros/generic/umrand/umrand_up1.readme
@@ -0,0 +1,13 @@
+1. Update zu Umrand 1.2
+=======================
+
+Es wurde der Befehl \c durch \C in allen Anleitungen ersetzt, da \c in
+Plain und LaTeX als Cedille definiert ist. Der Befehl \C ist nun auch
+in UMRAND.STY enthalten.
+
+Die Anleitung lief nicht ohne NFSS, da der PLAIN-Befehl \sevenrm in
+\LaTeX nicht enthalten ist. Da \testfont in die Anleitung integriert
+wurde, war hier eine kleine Anpassung notwendig.
+(Bug-Report von K. Blum, Oldenburg)
+
+MfG Andreas Schrell.
diff --git a/macros/generic/unicode-data/BidiBrackets.txt b/macros/generic/unicode-data/BidiBrackets.txt
new file mode 100644
index 0000000000..782f9f2530
--- /dev/null
+++ b/macros/generic/unicode-data/BidiBrackets.txt
@@ -0,0 +1,185 @@
+# BidiBrackets-12.1.0.txt
+# Date: 2019-03-08, 23:59:00 GMT [AG, LI, KW]
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties
+#
+# This file is a normative contributory data file in the Unicode
+# Character Database.
+#
+# Bidi_Paired_Bracket is a normative property of type Miscellaneous,
+# which establishes a mapping between characters that are treated as
+# bracket pairs by the Unicode Bidirectional Algorithm.
+#
+# Bidi_Paired_Bracket_Type is a normative property of type Enumeration,
+# which classifies characters into opening and closing paired brackets
+# for the purposes of the Unicode Bidirectional Algorithm.
+#
+# This file lists the set of code points with Bidi_Paired_Bracket_Type
+# property values Open and Close. The set is derived from the character
+# properties General_Category (gc), Bidi_Class (bc), Bidi_Mirrored (Bidi_M),
+# and Bidi_Mirroring_Glyph (bmg), as follows: two characters, A and B,
+# form a bracket pair if A has gc=Ps and B has gc=Pe, both have bc=ON and
+# Bidi_M=Y, and bmg of A is B. Bidi_Paired_Bracket (bpb) maps A to B and
+# vice versa, and their Bidi_Paired_Bracket_Type (bpt) property values are
+# Open (o) and Close (c), respectively.
+#
+# The brackets with ticks U+298D LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+# through U+2990 RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER are paired the
+# same way their glyphs form mirror pairs, according to their bmg property
+# values. They are not paired on the basis of a diagonal or antidiagonal
+# matching of the corner ticks inferred from code point order.
+#
+# For legacy reasons, the characters U+FD3E ORNATE LEFT PARENTHESIS and
+# U+FD3F ORNATE RIGHT PARENTHESIS do not mirror in bidirectional display
+# and therefore do not form a bracket pair.
+#
+# The Unicode property value stability policy guarantees that characters
+# which have bpt=o or bpt=c also have bc=ON and Bidi_M=Y. As a result, an
+# implementation can optimize the lookup of the Bidi_Paired_Bracket_Type
+# property values Open and Close by restricting the processing to characters
+# with bc=ON.
+#
+# The format of the file is three fields separated by a semicolon.
+# Field 0: Unicode code point value, represented as a hexadecimal value
+# Field 1: Bidi_Paired_Bracket property value, a code point value or <none>
+# Field 2: Bidi_Paired_Bracket_Type property value, one of the following:
+# o Open
+# c Close
+# n None
+# The names of the characters in field 0 are given in comments at the end
+# of each line.
+#
+# For information on bidirectional paired brackets, see UAX #9: Unicode
+# Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/
+#
+# This file was originally created by Andrew Glass and Laurentiu Iancu
+# for Unicode 6.3.
+
+0028; 0029; o # LEFT PARENTHESIS
+0029; 0028; c # RIGHT PARENTHESIS
+005B; 005D; o # LEFT SQUARE BRACKET
+005D; 005B; c # RIGHT SQUARE BRACKET
+007B; 007D; o # LEFT CURLY BRACKET
+007D; 007B; c # RIGHT CURLY BRACKET
+0F3A; 0F3B; o # TIBETAN MARK GUG RTAGS GYON
+0F3B; 0F3A; c # TIBETAN MARK GUG RTAGS GYAS
+0F3C; 0F3D; o # TIBETAN MARK ANG KHANG GYON
+0F3D; 0F3C; c # TIBETAN MARK ANG KHANG GYAS
+169B; 169C; o # OGHAM FEATHER MARK
+169C; 169B; c # OGHAM REVERSED FEATHER MARK
+2045; 2046; o # LEFT SQUARE BRACKET WITH QUILL
+2046; 2045; c # RIGHT SQUARE BRACKET WITH QUILL
+207D; 207E; o # SUPERSCRIPT LEFT PARENTHESIS
+207E; 207D; c # SUPERSCRIPT RIGHT PARENTHESIS
+208D; 208E; o # SUBSCRIPT LEFT PARENTHESIS
+208E; 208D; c # SUBSCRIPT RIGHT PARENTHESIS
+2308; 2309; o # LEFT CEILING
+2309; 2308; c # RIGHT CEILING
+230A; 230B; o # LEFT FLOOR
+230B; 230A; c # RIGHT FLOOR
+2329; 232A; o # LEFT-POINTING ANGLE BRACKET
+232A; 2329; c # RIGHT-POINTING ANGLE BRACKET
+2768; 2769; o # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769; 2768; c # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A; 276B; o # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B; 276A; c # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C; 276D; o # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D; 276C; c # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E; 276F; o # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F; 276E; c # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770; 2771; o # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771; 2770; c # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772; 2773; o # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773; 2772; c # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774; 2775; o # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775; 2774; c # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+27C5; 27C6; o # LEFT S-SHAPED BAG DELIMITER
+27C6; 27C5; c # RIGHT S-SHAPED BAG DELIMITER
+27E6; 27E7; o # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7; 27E6; c # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8; 27E9; o # MATHEMATICAL LEFT ANGLE BRACKET
+27E9; 27E8; c # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA; 27EB; o # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB; 27EA; c # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC; 27ED; o # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED; 27EC; c # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE; 27EF; o # MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF; 27EE; c # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+2983; 2984; o # LEFT WHITE CURLY BRACKET
+2984; 2983; c # RIGHT WHITE CURLY BRACKET
+2985; 2986; o # LEFT WHITE PARENTHESIS
+2986; 2985; c # RIGHT WHITE PARENTHESIS
+2987; 2988; o # Z NOTATION LEFT IMAGE BRACKET
+2988; 2987; c # Z NOTATION RIGHT IMAGE BRACKET
+2989; 298A; o # Z NOTATION LEFT BINDING BRACKET
+298A; 2989; c # Z NOTATION RIGHT BINDING BRACKET
+298B; 298C; o # LEFT SQUARE BRACKET WITH UNDERBAR
+298C; 298B; c # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D; 2990; o # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E; 298F; c # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F; 298E; o # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990; 298D; c # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991; 2992; o # LEFT ANGLE BRACKET WITH DOT
+2992; 2991; c # RIGHT ANGLE BRACKET WITH DOT
+2993; 2994; o # LEFT ARC LESS-THAN BRACKET
+2994; 2993; c # RIGHT ARC GREATER-THAN BRACKET
+2995; 2996; o # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996; 2995; c # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997; 2998; o # LEFT BLACK TORTOISE SHELL BRACKET
+2998; 2997; c # RIGHT BLACK TORTOISE SHELL BRACKET
+29D8; 29D9; o # LEFT WIGGLY FENCE
+29D9; 29D8; c # RIGHT WIGGLY FENCE
+29DA; 29DB; o # LEFT DOUBLE WIGGLY FENCE
+29DB; 29DA; c # RIGHT DOUBLE WIGGLY FENCE
+29FC; 29FD; o # LEFT-POINTING CURVED ANGLE BRACKET
+29FD; 29FC; c # RIGHT-POINTING CURVED ANGLE BRACKET
+2E22; 2E23; o # TOP LEFT HALF BRACKET
+2E23; 2E22; c # TOP RIGHT HALF BRACKET
+2E24; 2E25; o # BOTTOM LEFT HALF BRACKET
+2E25; 2E24; c # BOTTOM RIGHT HALF BRACKET
+2E26; 2E27; o # LEFT SIDEWAYS U BRACKET
+2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET
+2E28; 2E29; o # LEFT DOUBLE PARENTHESIS
+2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS
+3008; 3009; o # LEFT ANGLE BRACKET
+3009; 3008; c # RIGHT ANGLE BRACKET
+300A; 300B; o # LEFT DOUBLE ANGLE BRACKET
+300B; 300A; c # RIGHT DOUBLE ANGLE BRACKET
+300C; 300D; o # LEFT CORNER BRACKET
+300D; 300C; c # RIGHT CORNER BRACKET
+300E; 300F; o # LEFT WHITE CORNER BRACKET
+300F; 300E; c # RIGHT WHITE CORNER BRACKET
+3010; 3011; o # LEFT BLACK LENTICULAR BRACKET
+3011; 3010; c # RIGHT BLACK LENTICULAR BRACKET
+3014; 3015; o # LEFT TORTOISE SHELL BRACKET
+3015; 3014; c # RIGHT TORTOISE SHELL BRACKET
+3016; 3017; o # LEFT WHITE LENTICULAR BRACKET
+3017; 3016; c # RIGHT WHITE LENTICULAR BRACKET
+3018; 3019; o # LEFT WHITE TORTOISE SHELL BRACKET
+3019; 3018; c # RIGHT WHITE TORTOISE SHELL BRACKET
+301A; 301B; o # LEFT WHITE SQUARE BRACKET
+301B; 301A; c # RIGHT WHITE SQUARE BRACKET
+FE59; FE5A; o # SMALL LEFT PARENTHESIS
+FE5A; FE59; c # SMALL RIGHT PARENTHESIS
+FE5B; FE5C; o # SMALL LEFT CURLY BRACKET
+FE5C; FE5B; c # SMALL RIGHT CURLY BRACKET
+FE5D; FE5E; o # SMALL LEFT TORTOISE SHELL BRACKET
+FE5E; FE5D; c # SMALL RIGHT TORTOISE SHELL BRACKET
+FF08; FF09; o # FULLWIDTH LEFT PARENTHESIS
+FF09; FF08; c # FULLWIDTH RIGHT PARENTHESIS
+FF3B; FF3D; o # FULLWIDTH LEFT SQUARE BRACKET
+FF3D; FF3B; c # FULLWIDTH RIGHT SQUARE BRACKET
+FF5B; FF5D; o # FULLWIDTH LEFT CURLY BRACKET
+FF5D; FF5B; c # FULLWIDTH RIGHT CURLY BRACKET
+FF5F; FF60; o # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60; FF5F; c # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF62; FF63; o # HALFWIDTH LEFT CORNER BRACKET
+FF63; FF62; c # HALFWIDTH RIGHT CORNER BRACKET
+
+# EOF
diff --git a/macros/generic/unicode-data/CaseFolding.txt b/macros/generic/unicode-data/CaseFolding.txt
new file mode 100644
index 0000000000..7eeb915abf
--- /dev/null
+++ b/macros/generic/unicode-data/CaseFolding.txt
@@ -0,0 +1,1581 @@
+# CaseFolding-12.1.0.txt
+# Date: 2019-03-10, 10:53:00 GMT
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Case Folding Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It provides a case folding mapping generated from the Unicode Character Database.
+# If all characters are mapped according to the full mapping below, then
+# case differences (according to UnicodeData.txt and SpecialCasing.txt)
+# are eliminated.
+#
+# The data supports both implementations that require simple case foldings
+# (where string lengths don't change), and implementations that allow full case folding
+# (where string lengths may grow). Note that where they can be supported, the
+# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
+#
+# All code points not listed in this file map to themselves.
+#
+# NOTE: case folding does not preserve normalization formats!
+#
+# For information on case folding, including how to have case folding
+# preserve normalization formats, see Section 3.13 Default Case Algorithms in
+# The Unicode Standard.
+#
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <code>; <status>; <mapping>; # <name>
+#
+# The status field is:
+# C: common case folding, common mappings shared by both simple and full mappings.
+# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
+# S: simple case folding, mappings to single characters where different from F.
+# T: special case for uppercase I and dotted uppercase I
+# - For non-Turkic languages, this mapping is normally not used.
+# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
+# Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
+# See the discussions of case mapping in the Unicode Standard for more information.
+#
+# Usage:
+# A. To do a simple case folding, use the mappings with status C + S.
+# B. To do a full case folding, use the mappings with status C + F.
+#
+# The mappings with status T can be used or omitted depending on the desired case-folding
+# behavior. (The default option is to exclude them.)
+#
+# =================================================================
+
+# Property: Case_Folding
+
+# All code points not explicitly listed for Case_Folding
+# have the value C for the status field, and the code point itself for the mapping field.
+
+# =================================================================
+0041; C; 0061; # LATIN CAPITAL LETTER A
+0042; C; 0062; # LATIN CAPITAL LETTER B
+0043; C; 0063; # LATIN CAPITAL LETTER C
+0044; C; 0064; # LATIN CAPITAL LETTER D
+0045; C; 0065; # LATIN CAPITAL LETTER E
+0046; C; 0066; # LATIN CAPITAL LETTER F
+0047; C; 0067; # LATIN CAPITAL LETTER G
+0048; C; 0068; # LATIN CAPITAL LETTER H
+0049; C; 0069; # LATIN CAPITAL LETTER I
+0049; T; 0131; # LATIN CAPITAL LETTER I
+004A; C; 006A; # LATIN CAPITAL LETTER J
+004B; C; 006B; # LATIN CAPITAL LETTER K
+004C; C; 006C; # LATIN CAPITAL LETTER L
+004D; C; 006D; # LATIN CAPITAL LETTER M
+004E; C; 006E; # LATIN CAPITAL LETTER N
+004F; C; 006F; # LATIN CAPITAL LETTER O
+0050; C; 0070; # LATIN CAPITAL LETTER P
+0051; C; 0071; # LATIN CAPITAL LETTER Q
+0052; C; 0072; # LATIN CAPITAL LETTER R
+0053; C; 0073; # LATIN CAPITAL LETTER S
+0054; C; 0074; # LATIN CAPITAL LETTER T
+0055; C; 0075; # LATIN CAPITAL LETTER U
+0056; C; 0076; # LATIN CAPITAL LETTER V
+0057; C; 0077; # LATIN CAPITAL LETTER W
+0058; C; 0078; # LATIN CAPITAL LETTER X
+0059; C; 0079; # LATIN CAPITAL LETTER Y
+005A; C; 007A; # LATIN CAPITAL LETTER Z
+00B5; C; 03BC; # MICRO SIGN
+00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
+00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
+00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
+00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6; C; 00E6; # LATIN CAPITAL LETTER AE
+00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
+00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
+00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
+00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
+00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
+00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
+00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
+00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
+00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
+00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
+00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
+00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
+00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
+00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
+0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
+0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
+0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
+0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
+0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
+010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
+0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
+0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
+0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
+0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
+011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
+011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
+0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
+0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
+0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
+012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
+012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
+012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
+0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
+0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
+0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
+013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
+013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
+013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
+0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
+0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
+0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
+0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A; C; 014B; # LATIN CAPITAL LETTER ENG
+014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
+014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
+0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152; C; 0153; # LATIN CAPITAL LIGATURE OE
+0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
+0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
+0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
+015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
+015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
+0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
+0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
+0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
+0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
+0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
+016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
+016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
+016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
+0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
+0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
+017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
+017F; C; 0073; # LATIN SMALL LETTER LONG S
+0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
+0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
+0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
+0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
+0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
+0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
+018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
+018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
+018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
+018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
+0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
+0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
+0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
+0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
+0196; C; 0269; # LATIN CAPITAL LETTER IOTA
+0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
+0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
+019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
+019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
+01A2; C; 01A3; # LATIN CAPITAL LETTER OI
+01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
+01A6; C; 0280; # LATIN LETTER YR
+01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
+01A9; C; 0283; # LATIN CAPITAL LETTER ESH
+01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
+01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
+01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
+01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
+01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
+01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
+01B7; C; 0292; # LATIN CAPITAL LETTER EZH
+01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
+01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
+01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
+01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
+01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
+01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
+01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
+01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
+01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
+01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
+01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
+01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
+01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
+01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
+01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
+01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
+01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
+01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
+01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
+01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
+01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
+01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
+01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C; C; 021D; # LATIN CAPITAL LETTER YOGH
+021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
+0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222; C; 0223; # LATIN CAPITAL LETTER OU
+0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
+0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
+022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
+023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE
+023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
+023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
+023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP
+0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE
+0244; C; 0289; # LATIN CAPITAL LETTER U BAR
+0245; C; 028C; # LATIN CAPITAL LETTER TURNED V
+0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE
+0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE
+024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE
+024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE
+0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
+0370; C; 0371; # GREEK CAPITAL LETTER HETA
+0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037F; C; 03F3; # GREEK CAPITAL LETTER YOT
+0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
+038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
+0392; C; 03B2; # GREEK CAPITAL LETTER BETA
+0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
+0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
+0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
+0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
+0397; C; 03B7; # GREEK CAPITAL LETTER ETA
+0398; C; 03B8; # GREEK CAPITAL LETTER THETA
+0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
+039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
+039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
+039C; C; 03BC; # GREEK CAPITAL LETTER MU
+039D; C; 03BD; # GREEK CAPITAL LETTER NU
+039E; C; 03BE; # GREEK CAPITAL LETTER XI
+039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
+03A0; C; 03C0; # GREEK CAPITAL LETTER PI
+03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
+03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
+03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
+03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
+03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
+03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
+03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
+03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
+03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
+03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL
+03D0; C; 03B2; # GREEK BETA SYMBOL
+03D1; C; 03B8; # GREEK THETA SYMBOL
+03D5; C; 03C6; # GREEK PHI SYMBOL
+03D6; C; 03C0; # GREEK PI SYMBOL
+03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
+03DA; C; 03DB; # GREEK LETTER STIGMA
+03DC; C; 03DD; # GREEK LETTER DIGAMMA
+03DE; C; 03DF; # GREEK LETTER KOPPA
+03E0; C; 03E1; # GREEK LETTER SAMPI
+03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
+03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
+03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
+03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
+03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
+03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
+03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
+03F0; C; 03BA; # GREEK KAPPA SYMBOL
+03F1; C; 03C1; # GREEK RHO SYMBOL
+03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
+03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
+03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
+03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
+03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
+0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
+0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
+0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
+0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
+0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
+0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
+040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
+040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
+040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
+040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
+040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
+0410; C; 0430; # CYRILLIC CAPITAL LETTER A
+0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
+0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
+0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
+0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
+0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
+0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
+0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
+0418; C; 0438; # CYRILLIC CAPITAL LETTER I
+0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
+041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
+041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
+041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
+041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
+041E; C; 043E; # CYRILLIC CAPITAL LETTER O
+041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
+0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
+0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
+0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
+0423; C; 0443; # CYRILLIC CAPITAL LETTER U
+0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
+0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
+0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
+0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
+0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
+0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
+042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
+042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
+042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D; C; 044D; # CYRILLIC CAPITAL LETTER E
+042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
+042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
+0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
+0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
+0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
+0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
+0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
+046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
+0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
+0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
+0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
+0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
+047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
+0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
+048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
+0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
+04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
+04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
+04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA
+04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
+04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
+04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
+04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
+0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
+0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
+0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
+0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
+050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
+050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
+050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
+0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE
+0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA
+0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA
+0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE
+051A; C; 051B; # CYRILLIC CAPITAL LETTER QA
+051C; C; 051D; # CYRILLIC CAPITAL LETTER WE
+051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA
+0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE
+052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE
+052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
+0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
+0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
+0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
+0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
+0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
+0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
+0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
+0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
+053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
+053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
+053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
+053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
+053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
+053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
+0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
+0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
+0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
+0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
+0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
+0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
+0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
+0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
+0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
+0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
+054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
+054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
+054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
+054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
+054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
+054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
+0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
+0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
+0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
+0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
+0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
+0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
+0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
+0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
+10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
+10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
+10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
+10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
+10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
+10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
+10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
+10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
+10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
+10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
+10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
+10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
+10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
+10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
+10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
+10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
+10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
+10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
+10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
+10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
+10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
+10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
+10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
+10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
+10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
+10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
+10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
+10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
+10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
+10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
+10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
+10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
+10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
+10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
+10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
+10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
+10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
+10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
+10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN
+10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN
+13F8; C; 13F0; # CHEROKEE SMALL LETTER YE
+13F9; C; 13F1; # CHEROKEE SMALL LETTER YI
+13FA; C; 13F2; # CHEROKEE SMALL LETTER YO
+13FB; C; 13F3; # CHEROKEE SMALL LETTER YU
+13FC; C; 13F4; # CHEROKEE SMALL LETTER YV
+13FD; C; 13F5; # CHEROKEE SMALL LETTER MV
+1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE
+1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE
+1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O
+1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES
+1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE
+1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE
+1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN
+1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT
+1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK
+1C90; C; 10D0; # GEORGIAN MTAVRULI CAPITAL LETTER AN
+1C91; C; 10D1; # GEORGIAN MTAVRULI CAPITAL LETTER BAN
+1C92; C; 10D2; # GEORGIAN MTAVRULI CAPITAL LETTER GAN
+1C93; C; 10D3; # GEORGIAN MTAVRULI CAPITAL LETTER DON
+1C94; C; 10D4; # GEORGIAN MTAVRULI CAPITAL LETTER EN
+1C95; C; 10D5; # GEORGIAN MTAVRULI CAPITAL LETTER VIN
+1C96; C; 10D6; # GEORGIAN MTAVRULI CAPITAL LETTER ZEN
+1C97; C; 10D7; # GEORGIAN MTAVRULI CAPITAL LETTER TAN
+1C98; C; 10D8; # GEORGIAN MTAVRULI CAPITAL LETTER IN
+1C99; C; 10D9; # GEORGIAN MTAVRULI CAPITAL LETTER KAN
+1C9A; C; 10DA; # GEORGIAN MTAVRULI CAPITAL LETTER LAS
+1C9B; C; 10DB; # GEORGIAN MTAVRULI CAPITAL LETTER MAN
+1C9C; C; 10DC; # GEORGIAN MTAVRULI CAPITAL LETTER NAR
+1C9D; C; 10DD; # GEORGIAN MTAVRULI CAPITAL LETTER ON
+1C9E; C; 10DE; # GEORGIAN MTAVRULI CAPITAL LETTER PAR
+1C9F; C; 10DF; # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR
+1CA0; C; 10E0; # GEORGIAN MTAVRULI CAPITAL LETTER RAE
+1CA1; C; 10E1; # GEORGIAN MTAVRULI CAPITAL LETTER SAN
+1CA2; C; 10E2; # GEORGIAN MTAVRULI CAPITAL LETTER TAR
+1CA3; C; 10E3; # GEORGIAN MTAVRULI CAPITAL LETTER UN
+1CA4; C; 10E4; # GEORGIAN MTAVRULI CAPITAL LETTER PHAR
+1CA5; C; 10E5; # GEORGIAN MTAVRULI CAPITAL LETTER KHAR
+1CA6; C; 10E6; # GEORGIAN MTAVRULI CAPITAL LETTER GHAN
+1CA7; C; 10E7; # GEORGIAN MTAVRULI CAPITAL LETTER QAR
+1CA8; C; 10E8; # GEORGIAN MTAVRULI CAPITAL LETTER SHIN
+1CA9; C; 10E9; # GEORGIAN MTAVRULI CAPITAL LETTER CHIN
+1CAA; C; 10EA; # GEORGIAN MTAVRULI CAPITAL LETTER CAN
+1CAB; C; 10EB; # GEORGIAN MTAVRULI CAPITAL LETTER JIL
+1CAC; C; 10EC; # GEORGIAN MTAVRULI CAPITAL LETTER CIL
+1CAD; C; 10ED; # GEORGIAN MTAVRULI CAPITAL LETTER CHAR
+1CAE; C; 10EE; # GEORGIAN MTAVRULI CAPITAL LETTER XAN
+1CAF; C; 10EF; # GEORGIAN MTAVRULI CAPITAL LETTER JHAN
+1CB0; C; 10F0; # GEORGIAN MTAVRULI CAPITAL LETTER HAE
+1CB1; C; 10F1; # GEORGIAN MTAVRULI CAPITAL LETTER HE
+1CB2; C; 10F2; # GEORGIAN MTAVRULI CAPITAL LETTER HIE
+1CB3; C; 10F3; # GEORGIAN MTAVRULI CAPITAL LETTER WE
+1CB4; C; 10F4; # GEORGIAN MTAVRULI CAPITAL LETTER HAR
+1CB5; C; 10F5; # GEORGIAN MTAVRULI CAPITAL LETTER HOE
+1CB6; C; 10F6; # GEORGIAN MTAVRULI CAPITAL LETTER FI
+1CB7; C; 10F7; # GEORGIAN MTAVRULI CAPITAL LETTER YN
+1CB8; C; 10F8; # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI
+1CB9; C; 10F9; # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN
+1CBA; C; 10FA; # GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD; C; 10FD; # GEORGIAN MTAVRULI CAPITAL LETTER AEN
+1CBE; C; 10FE; # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN
+1CBF; C; 10FF; # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
+1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
+1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
+1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
+1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
+1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
+1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
+1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
+1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
+1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
+1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S
+1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
+1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
+1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP
+1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
+1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126; C; 03C9; # OHM SIGN
+212A; C; 006B; # KELVIN SIGN
+212B; C; 00E5; # ANGSTROM SIGN
+2132; C; 214E; # TURNED CAPITAL F
+2160; C; 2170; # ROMAN NUMERAL ONE
+2161; C; 2171; # ROMAN NUMERAL TWO
+2162; C; 2172; # ROMAN NUMERAL THREE
+2163; C; 2173; # ROMAN NUMERAL FOUR
+2164; C; 2174; # ROMAN NUMERAL FIVE
+2165; C; 2175; # ROMAN NUMERAL SIX
+2166; C; 2176; # ROMAN NUMERAL SEVEN
+2167; C; 2177; # ROMAN NUMERAL EIGHT
+2168; C; 2178; # ROMAN NUMERAL NINE
+2169; C; 2179; # ROMAN NUMERAL TEN
+216A; C; 217A; # ROMAN NUMERAL ELEVEN
+216B; C; 217B; # ROMAN NUMERAL TWELVE
+216C; C; 217C; # ROMAN NUMERAL FIFTY
+216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
+216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
+216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
+2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
+24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
+24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
+24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
+24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
+24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
+24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
+24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
+24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
+24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
+24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
+24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
+24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
+24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
+24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
+24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
+24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
+24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
+24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
+24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
+24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
+24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
+24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
+24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
+24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
+24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
+2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
+2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
+2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
+2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
+2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
+2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
+2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
+2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
+2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
+2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
+2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
+2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
+2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
+2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
+2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
+2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
+2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
+2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
+2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
+2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
+2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
+2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
+2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE
+2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL
+2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER
+2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA
+2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK
+2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A
+2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA
+2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK
+2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H
+2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL
+2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
+2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
+2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
+2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
+2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
+2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
+2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
+2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
+2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
+2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
+2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
+2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
+2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
+2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
+2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
+2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
+2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
+2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
+2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
+2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
+2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
+2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
+2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
+2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
+2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
+2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
+2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI
+A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA
+A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO
+A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE
+A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA
+A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV
+A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU
+A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A
+A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN
+A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE
+A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE
+A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL
+A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM
+A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680; C; A681; # CYRILLIC CAPITAL LETTER DWE
+A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE
+A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE
+A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE
+A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE
+A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE
+A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE
+A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE
+A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE
+A694; C; A695; # CYRILLIC CAPITAL LETTER HWE
+A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE
+A698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O
+A69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O
+A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726; C; A727; # LATIN CAPITAL LETTER HENG
+A728; C; A729; # LATIN CAPITAL LETTER TZ
+A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO
+A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO
+A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732; C; A733; # LATIN CAPITAL LETTER AA
+A734; C; A735; # LATIN CAPITAL LETTER AO
+A736; C; A737; # LATIN CAPITAL LETTER AU
+A738; C; A739; # LATIN CAPITAL LETTER AV
+A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C; C; A73D; # LATIN CAPITAL LETTER AY
+A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE
+A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746; C; A747; # LATIN CAPITAL LETTER BROKEN L
+A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP
+A74E; C; A74F; # LATIN CAPITAL LETTER OO
+A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH
+A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA
+A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA
+A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760; C; A761; # LATIN CAPITAL LETTER VY
+A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z
+A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE
+A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768; C; A769; # LATIN CAPITAL LETTER VEND
+A76A; C; A76B; # LATIN CAPITAL LETTER ET
+A76C; C; A76D; # LATIN CAPITAL LETTER IS
+A76E; C; A76F; # LATIN CAPITAL LETTER CON
+A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D
+A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F
+A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G
+A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G
+A780; C; A781; # LATIN CAPITAL LETTER TURNED L
+A782; C; A783; # LATIN CAPITAL LETTER INSULAR R
+A784; C; A785; # LATIN CAPITAL LETTER INSULAR S
+A786; C; A787; # LATIN CAPITAL LETTER INSULAR T
+A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO
+A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H
+A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER
+A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR
+A796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH
+A798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE
+A79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE
+A79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE
+A79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE
+A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK
+A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E
+A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G
+A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT
+A7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K
+A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T
+A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+A7B3; C; AB53; # LATIN CAPITAL LETTER CHI
+A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA
+A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA
+A7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE
+A7BA; C; A7BB; # LATIN CAPITAL LETTER GLOTTAL A
+A7BC; C; A7BD; # LATIN CAPITAL LETTER GLOTTAL I
+A7BE; C; A7BF; # LATIN CAPITAL LETTER GLOTTAL U
+A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W
+A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK
+A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK
+A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+AB70; C; 13A0; # CHEROKEE SMALL LETTER A
+AB71; C; 13A1; # CHEROKEE SMALL LETTER E
+AB72; C; 13A2; # CHEROKEE SMALL LETTER I
+AB73; C; 13A3; # CHEROKEE SMALL LETTER O
+AB74; C; 13A4; # CHEROKEE SMALL LETTER U
+AB75; C; 13A5; # CHEROKEE SMALL LETTER V
+AB76; C; 13A6; # CHEROKEE SMALL LETTER GA
+AB77; C; 13A7; # CHEROKEE SMALL LETTER KA
+AB78; C; 13A8; # CHEROKEE SMALL LETTER GE
+AB79; C; 13A9; # CHEROKEE SMALL LETTER GI
+AB7A; C; 13AA; # CHEROKEE SMALL LETTER GO
+AB7B; C; 13AB; # CHEROKEE SMALL LETTER GU
+AB7C; C; 13AC; # CHEROKEE SMALL LETTER GV
+AB7D; C; 13AD; # CHEROKEE SMALL LETTER HA
+AB7E; C; 13AE; # CHEROKEE SMALL LETTER HE
+AB7F; C; 13AF; # CHEROKEE SMALL LETTER HI
+AB80; C; 13B0; # CHEROKEE SMALL LETTER HO
+AB81; C; 13B1; # CHEROKEE SMALL LETTER HU
+AB82; C; 13B2; # CHEROKEE SMALL LETTER HV
+AB83; C; 13B3; # CHEROKEE SMALL LETTER LA
+AB84; C; 13B4; # CHEROKEE SMALL LETTER LE
+AB85; C; 13B5; # CHEROKEE SMALL LETTER LI
+AB86; C; 13B6; # CHEROKEE SMALL LETTER LO
+AB87; C; 13B7; # CHEROKEE SMALL LETTER LU
+AB88; C; 13B8; # CHEROKEE SMALL LETTER LV
+AB89; C; 13B9; # CHEROKEE SMALL LETTER MA
+AB8A; C; 13BA; # CHEROKEE SMALL LETTER ME
+AB8B; C; 13BB; # CHEROKEE SMALL LETTER MI
+AB8C; C; 13BC; # CHEROKEE SMALL LETTER MO
+AB8D; C; 13BD; # CHEROKEE SMALL LETTER MU
+AB8E; C; 13BE; # CHEROKEE SMALL LETTER NA
+AB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA
+AB90; C; 13C0; # CHEROKEE SMALL LETTER NAH
+AB91; C; 13C1; # CHEROKEE SMALL LETTER NE
+AB92; C; 13C2; # CHEROKEE SMALL LETTER NI
+AB93; C; 13C3; # CHEROKEE SMALL LETTER NO
+AB94; C; 13C4; # CHEROKEE SMALL LETTER NU
+AB95; C; 13C5; # CHEROKEE SMALL LETTER NV
+AB96; C; 13C6; # CHEROKEE SMALL LETTER QUA
+AB97; C; 13C7; # CHEROKEE SMALL LETTER QUE
+AB98; C; 13C8; # CHEROKEE SMALL LETTER QUI
+AB99; C; 13C9; # CHEROKEE SMALL LETTER QUO
+AB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU
+AB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV
+AB9C; C; 13CC; # CHEROKEE SMALL LETTER SA
+AB9D; C; 13CD; # CHEROKEE SMALL LETTER S
+AB9E; C; 13CE; # CHEROKEE SMALL LETTER SE
+AB9F; C; 13CF; # CHEROKEE SMALL LETTER SI
+ABA0; C; 13D0; # CHEROKEE SMALL LETTER SO
+ABA1; C; 13D1; # CHEROKEE SMALL LETTER SU
+ABA2; C; 13D2; # CHEROKEE SMALL LETTER SV
+ABA3; C; 13D3; # CHEROKEE SMALL LETTER DA
+ABA4; C; 13D4; # CHEROKEE SMALL LETTER TA
+ABA5; C; 13D5; # CHEROKEE SMALL LETTER DE
+ABA6; C; 13D6; # CHEROKEE SMALL LETTER TE
+ABA7; C; 13D7; # CHEROKEE SMALL LETTER DI
+ABA8; C; 13D8; # CHEROKEE SMALL LETTER TI
+ABA9; C; 13D9; # CHEROKEE SMALL LETTER DO
+ABAA; C; 13DA; # CHEROKEE SMALL LETTER DU
+ABAB; C; 13DB; # CHEROKEE SMALL LETTER DV
+ABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA
+ABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA
+ABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE
+ABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI
+ABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO
+ABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU
+ABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV
+ABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA
+ABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE
+ABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI
+ABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO
+ABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU
+ABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV
+ABB9; C; 13E9; # CHEROKEE SMALL LETTER WA
+ABBA; C; 13EA; # CHEROKEE SMALL LETTER WE
+ABBB; C; 13EB; # CHEROKEE SMALL LETTER WI
+ABBC; C; 13EC; # CHEROKEE SMALL LETTER WO
+ABBD; C; 13ED; # CHEROKEE SMALL LETTER WU
+ABBE; C; 13EE; # CHEROKEE SMALL LETTER WV
+ABBF; C; 13EF; # CHEROKEE SMALL LETTER YA
+FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
+FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
+FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
+FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI
+FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL
+FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T
+FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST
+FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
+FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
+FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
+FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
+FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
+FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
+FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
+FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
+FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
+FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
+FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
+FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
+FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
+FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
+FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
+FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
+FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
+FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
+FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
+10400; C; 10428; # DESERET CAPITAL LETTER LONG I
+10401; C; 10429; # DESERET CAPITAL LETTER LONG E
+10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
+10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
+10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
+10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
+10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
+10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
+10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
+10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
+1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
+1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
+1040C; C; 10434; # DESERET CAPITAL LETTER AY
+1040D; C; 10435; # DESERET CAPITAL LETTER OW
+1040E; C; 10436; # DESERET CAPITAL LETTER WU
+1040F; C; 10437; # DESERET CAPITAL LETTER YEE
+10410; C; 10438; # DESERET CAPITAL LETTER H
+10411; C; 10439; # DESERET CAPITAL LETTER PEE
+10412; C; 1043A; # DESERET CAPITAL LETTER BEE
+10413; C; 1043B; # DESERET CAPITAL LETTER TEE
+10414; C; 1043C; # DESERET CAPITAL LETTER DEE
+10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
+10416; C; 1043E; # DESERET CAPITAL LETTER JEE
+10417; C; 1043F; # DESERET CAPITAL LETTER KAY
+10418; C; 10440; # DESERET CAPITAL LETTER GAY
+10419; C; 10441; # DESERET CAPITAL LETTER EF
+1041A; C; 10442; # DESERET CAPITAL LETTER VEE
+1041B; C; 10443; # DESERET CAPITAL LETTER ETH
+1041C; C; 10444; # DESERET CAPITAL LETTER THEE
+1041D; C; 10445; # DESERET CAPITAL LETTER ES
+1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
+1041F; C; 10447; # DESERET CAPITAL LETTER ESH
+10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
+10421; C; 10449; # DESERET CAPITAL LETTER ER
+10422; C; 1044A; # DESERET CAPITAL LETTER EL
+10423; C; 1044B; # DESERET CAPITAL LETTER EM
+10424; C; 1044C; # DESERET CAPITAL LETTER EN
+10425; C; 1044D; # DESERET CAPITAL LETTER ENG
+10426; C; 1044E; # DESERET CAPITAL LETTER OI
+10427; C; 1044F; # DESERET CAPITAL LETTER EW
+104B0; C; 104D8; # OSAGE CAPITAL LETTER A
+104B1; C; 104D9; # OSAGE CAPITAL LETTER AI
+104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN
+104B3; C; 104DB; # OSAGE CAPITAL LETTER AH
+104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA
+104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA
+104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA
+104B7; C; 104DF; # OSAGE CAPITAL LETTER E
+104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN
+104B9; C; 104E1; # OSAGE CAPITAL LETTER HA
+104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA
+104BB; C; 104E3; # OSAGE CAPITAL LETTER I
+104BC; C; 104E4; # OSAGE CAPITAL LETTER KA
+104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA
+104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA
+104BF; C; 104E7; # OSAGE CAPITAL LETTER LA
+104C0; C; 104E8; # OSAGE CAPITAL LETTER MA
+104C1; C; 104E9; # OSAGE CAPITAL LETTER NA
+104C2; C; 104EA; # OSAGE CAPITAL LETTER O
+104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN
+104C4; C; 104EC; # OSAGE CAPITAL LETTER PA
+104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA
+104C6; C; 104EE; # OSAGE CAPITAL LETTER SA
+104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA
+104C8; C; 104F0; # OSAGE CAPITAL LETTER TA
+104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA
+104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA
+104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA
+104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA
+104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA
+104CE; C; 104F6; # OSAGE CAPITAL LETTER U
+104CF; C; 104F7; # OSAGE CAPITAL LETTER WA
+104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA
+104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA
+104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA
+104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA
+10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A
+10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA
+10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB
+10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB
+10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC
+10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC
+10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS
+10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED
+10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND
+10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E
+10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E
+10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE
+10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF
+10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG
+10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY
+10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH
+10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I
+10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II
+10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ
+10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK
+10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK
+10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK
+10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL
+10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY
+10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM
+10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN
+10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY
+10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O
+10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO
+10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
+10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
+10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE
+10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP
+10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP
+10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER
+10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER
+10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES
+10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ
+10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET
+10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT
+10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY
+10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH
+10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U
+10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU
+10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
+10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
+10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV
+10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ
+10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS
+10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
+10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US
+118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA
+118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A
+118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI
+118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU
+118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA
+118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO
+118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II
+118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU
+118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E
+118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O
+118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG
+118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA
+118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO
+118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY
+118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ
+118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC
+118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN
+118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD
+118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE
+118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG
+118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA
+118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT
+118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM
+118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU
+118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU
+118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO
+118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO
+118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR
+118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR
+118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU
+118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII
+118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO
+16E40; C; 16E60; # MEDEFAIDRIN CAPITAL LETTER M
+16E41; C; 16E61; # MEDEFAIDRIN CAPITAL LETTER S
+16E42; C; 16E62; # MEDEFAIDRIN CAPITAL LETTER V
+16E43; C; 16E63; # MEDEFAIDRIN CAPITAL LETTER W
+16E44; C; 16E64; # MEDEFAIDRIN CAPITAL LETTER ATIU
+16E45; C; 16E65; # MEDEFAIDRIN CAPITAL LETTER Z
+16E46; C; 16E66; # MEDEFAIDRIN CAPITAL LETTER KP
+16E47; C; 16E67; # MEDEFAIDRIN CAPITAL LETTER P
+16E48; C; 16E68; # MEDEFAIDRIN CAPITAL LETTER T
+16E49; C; 16E69; # MEDEFAIDRIN CAPITAL LETTER G
+16E4A; C; 16E6A; # MEDEFAIDRIN CAPITAL LETTER F
+16E4B; C; 16E6B; # MEDEFAIDRIN CAPITAL LETTER I
+16E4C; C; 16E6C; # MEDEFAIDRIN CAPITAL LETTER K
+16E4D; C; 16E6D; # MEDEFAIDRIN CAPITAL LETTER A
+16E4E; C; 16E6E; # MEDEFAIDRIN CAPITAL LETTER J
+16E4F; C; 16E6F; # MEDEFAIDRIN CAPITAL LETTER E
+16E50; C; 16E70; # MEDEFAIDRIN CAPITAL LETTER B
+16E51; C; 16E71; # MEDEFAIDRIN CAPITAL LETTER C
+16E52; C; 16E72; # MEDEFAIDRIN CAPITAL LETTER U
+16E53; C; 16E73; # MEDEFAIDRIN CAPITAL LETTER YU
+16E54; C; 16E74; # MEDEFAIDRIN CAPITAL LETTER L
+16E55; C; 16E75; # MEDEFAIDRIN CAPITAL LETTER Q
+16E56; C; 16E76; # MEDEFAIDRIN CAPITAL LETTER HP
+16E57; C; 16E77; # MEDEFAIDRIN CAPITAL LETTER NY
+16E58; C; 16E78; # MEDEFAIDRIN CAPITAL LETTER X
+16E59; C; 16E79; # MEDEFAIDRIN CAPITAL LETTER D
+16E5A; C; 16E7A; # MEDEFAIDRIN CAPITAL LETTER OE
+16E5B; C; 16E7B; # MEDEFAIDRIN CAPITAL LETTER N
+16E5C; C; 16E7C; # MEDEFAIDRIN CAPITAL LETTER R
+16E5D; C; 16E7D; # MEDEFAIDRIN CAPITAL LETTER O
+16E5E; C; 16E7E; # MEDEFAIDRIN CAPITAL LETTER AI
+16E5F; C; 16E7F; # MEDEFAIDRIN CAPITAL LETTER Y
+1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF
+1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI
+1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM
+1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM
+1E904; C; 1E926; # ADLAM CAPITAL LETTER BA
+1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE
+1E906; C; 1E928; # ADLAM CAPITAL LETTER PE
+1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE
+1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA
+1E909; C; 1E92B; # ADLAM CAPITAL LETTER E
+1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA
+1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I
+1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O
+1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA
+1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE
+1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW
+1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN
+1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF
+1E912; C; 1E934; # ADLAM CAPITAL LETTER YA
+1E913; C; 1E935; # ADLAM CAPITAL LETTER U
+1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM
+1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI
+1E916; C; 1E938; # ADLAM CAPITAL LETTER HA
+1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF
+1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA
+1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA
+1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU
+1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA
+1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA
+1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA
+1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE
+1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL
+1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO
+1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA
+#
+# EOF
diff --git a/macros/generic/unicode-data/EastAsianWidth.txt b/macros/generic/unicode-data/EastAsianWidth.txt
new file mode 100644
index 0000000000..94d55d6654
--- /dev/null
+++ b/macros/generic/unicode-data/EastAsianWidth.txt
@@ -0,0 +1,2473 @@
+# EastAsianWidth-12.1.0.txt
+# Date: 2019-03-31, 22:01:58 GMT [KW, LI]
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# East_Asian_Width Property
+#
+# This file is an informative contributory data file in the
+# Unicode Character Database.
+#
+# The format is two fields separated by a semicolon.
+# Field 0: Unicode code point value or range of code point values
+# Field 1: East_Asian_Width property, consisting of one of the following values:
+# "A", "F", "H", "N", "Na", "W"
+# - All code points, assigned or unassigned, that are not listed
+# explicitly are given the value "N".
+# - The unassigned code points in the following blocks default to "W":
+# CJK Unified Ideographs Extension A: U+3400..U+4DBF
+# CJK Unified Ideographs: U+4E00..U+9FFF
+# CJK Compatibility Ideographs: U+F900..U+FAFF
+# - All undesignated code points in Planes 2 and 3, whether inside or
+# outside of allocated blocks, default to "W":
+# Plane 2: U+20000..U+2FFFD
+# Plane 3: U+30000..U+3FFFD
+#
+# Character ranges are specified as for other property files in the
+# Unicode Character Database.
+#
+# For legacy reasons, there are no spaces before or after the semicolon
+# which separates the two fields. The comments following the number sign
+# "#" list the General_Category property value or the L& alias of the
+# derived value LC, the Unicode character name or names, and, in lines
+# with ranges of code points, the code point count in square brackets.
+#
+# For more information, see UAX #11: East Asian Width,
+# at http://www.unicode.org/reports/tr11/
+#
+# @missing: 0000..10FFFF; N
+0000..001F;N # Cc [32] <control-0000>..<control-001F>
+0020;Na # Zs SPACE
+0021..0023;Na # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024;Na # Sc DOLLAR SIGN
+0025..0027;Na # Po [3] PERCENT SIGN..APOSTROPHE
+0028;Na # Ps LEFT PARENTHESIS
+0029;Na # Pe RIGHT PARENTHESIS
+002A;Na # Po ASTERISK
+002B;Na # Sm PLUS SIGN
+002C;Na # Po COMMA
+002D;Na # Pd HYPHEN-MINUS
+002E..002F;Na # Po [2] FULL STOP..SOLIDUS
+0030..0039;Na # Nd [10] DIGIT ZERO..DIGIT NINE
+003A..003B;Na # Po [2] COLON..SEMICOLON
+003C..003E;Na # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040;Na # Po [2] QUESTION MARK..COMMERCIAL AT
+0041..005A;Na # Lu [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005B;Na # Ps LEFT SQUARE BRACKET
+005C;Na # Po REVERSE SOLIDUS
+005D;Na # Pe RIGHT SQUARE BRACKET
+005E;Na # Sk CIRCUMFLEX ACCENT
+005F;Na # Pc LOW LINE
+0060;Na # Sk GRAVE ACCENT
+0061..007A;Na # Ll [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+007B;Na # Ps LEFT CURLY BRACKET
+007C;Na # Sm VERTICAL LINE
+007D;Na # Pe RIGHT CURLY BRACKET
+007E;Na # Sm TILDE
+007F;N # Cc <control-007F>
+0080..009F;N # Cc [32] <control-0080>..<control-009F>
+00A0;N # Zs NO-BREAK SPACE
+00A1;A # Po INVERTED EXCLAMATION MARK
+00A2..00A3;Na # Sc [2] CENT SIGN..POUND SIGN
+00A4;A # Sc CURRENCY SIGN
+00A5;Na # Sc YEN SIGN
+00A6;Na # So BROKEN BAR
+00A7;A # Po SECTION SIGN
+00A8;A # Sk DIAERESIS
+00A9;N # So COPYRIGHT SIGN
+00AA;A # Lo FEMININE ORDINAL INDICATOR
+00AB;N # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC;Na # Sm NOT SIGN
+00AD;A # Cf SOFT HYPHEN
+00AE;A # So REGISTERED SIGN
+00AF;Na # Sk MACRON
+00B0;A # So DEGREE SIGN
+00B1;A # Sm PLUS-MINUS SIGN
+00B2..00B3;A # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4;A # Sk ACUTE ACCENT
+00B5;N # Ll MICRO SIGN
+00B6..00B7;A # Po [2] PILCROW SIGN..MIDDLE DOT
+00B8;A # Sk CEDILLA
+00B9;A # No SUPERSCRIPT ONE
+00BA;A # Lo MASCULINE ORDINAL INDICATOR
+00BB;N # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE;A # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF;A # Po INVERTED QUESTION MARK
+00C0..00C5;N # Lu [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6;A # Lu LATIN CAPITAL LETTER AE
+00C7..00CF;N # Lu [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0;A # Lu LATIN CAPITAL LETTER ETH
+00D1..00D6;N # Lu [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7;A # Sm MULTIPLICATION SIGN
+00D8;A # Lu LATIN CAPITAL LETTER O WITH STROKE
+00D9..00DD;N # Lu [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+00DE..00E1;A # L& [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE
+00E2..00E5;N # Ll [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE
+00E6;A # Ll LATIN SMALL LETTER AE
+00E7;N # Ll LATIN SMALL LETTER C WITH CEDILLA
+00E8..00EA;A # Ll [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;N # Ll LATIN SMALL LETTER E WITH DIAERESIS
+00EC..00ED;A # Ll [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE
+00EE..00EF;N # Ll [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS
+00F0;A # Ll LATIN SMALL LETTER ETH
+00F1;N # Ll LATIN SMALL LETTER N WITH TILDE
+00F2..00F3;A # Ll [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE
+00F4..00F6;N # Ll [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS
+00F7;A # Sm DIVISION SIGN
+00F8..00FA;A # Ll [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE
+00FB;N # Ll LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;A # Ll LATIN SMALL LETTER U WITH DIAERESIS
+00FD;N # Ll LATIN SMALL LETTER Y WITH ACUTE
+00FE;A # Ll LATIN SMALL LETTER THORN
+00FF;N # Ll LATIN SMALL LETTER Y WITH DIAERESIS
+0100;N # Lu LATIN CAPITAL LETTER A WITH MACRON
+0101;A # Ll LATIN SMALL LETTER A WITH MACRON
+0102..0110;N # L& [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE
+0111;A # Ll LATIN SMALL LETTER D WITH STROKE
+0112;N # Lu LATIN CAPITAL LETTER E WITH MACRON
+0113;A # Ll LATIN SMALL LETTER E WITH MACRON
+0114..011A;N # L& [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON
+011B;A # Ll LATIN SMALL LETTER E WITH CARON
+011C..0125;N # L& [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126..0127;A # L& [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE
+0128..012A;N # L& [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON
+012B;A # Ll LATIN SMALL LETTER I WITH MACRON
+012C..0130;N # L& [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131..0133;A # L& [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ
+0134..0137;N # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
+0138;A # Ll LATIN SMALL LETTER KRA
+0139..013E;N # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
+013F..0142;A # L& [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE
+0143;N # Lu LATIN CAPITAL LETTER N WITH ACUTE
+0144;A # Ll LATIN SMALL LETTER N WITH ACUTE
+0145..0147;N # L& [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON
+0148..014B;A # L& [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG
+014C;N # Lu LATIN CAPITAL LETTER O WITH MACRON
+014D;A # Ll LATIN SMALL LETTER O WITH MACRON
+014E..0151;N # L& [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152..0153;A # L& [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE
+0154..0165;N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+0166..0167;A # L& [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE
+0168..016A;N # L& [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON
+016B;A # Ll LATIN SMALL LETTER U WITH MACRON
+016C..017F;N # L& [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S
+0180..01BA;N # L& [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB;N # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF;N # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3;N # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..01CD;N # L& [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON
+01CE;A # Ll LATIN SMALL LETTER A WITH CARON
+01CF;N # Lu LATIN CAPITAL LETTER I WITH CARON
+01D0;A # Ll LATIN SMALL LETTER I WITH CARON
+01D1;N # Lu LATIN CAPITAL LETTER O WITH CARON
+01D2;A # Ll LATIN SMALL LETTER O WITH CARON
+01D3;N # Lu LATIN CAPITAL LETTER U WITH CARON
+01D4;A # Ll LATIN SMALL LETTER U WITH CARON
+01D5;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DD..024F;N # L& [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE
+0250;N # Ll LATIN SMALL LETTER TURNED A
+0251;A # Ll LATIN SMALL LETTER ALPHA
+0252..0260;N # Ll [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK
+0261;A # Ll LATIN SMALL LETTER SCRIPT G
+0262..0293;N # Ll [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL
+0294;N # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF;N # Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1;N # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C3;N # Sk [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD
+02C4;A # Sk MODIFIER LETTER UP ARROWHEAD
+02C5;N # Sk MODIFIER LETTER DOWN ARROWHEAD
+02C6;N # Lm MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7;A # Lm CARON
+02C8;N # Lm MODIFIER LETTER VERTICAL LINE
+02C9..02CB;A # Lm [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
+02CC;N # Lm MODIFIER LETTER LOW VERTICAL LINE
+02CD;A # Lm MODIFIER LETTER LOW MACRON
+02CE..02CF;N # Lm [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
+02D0;A # Lm MODIFIER LETTER TRIANGULAR COLON
+02D1;N # Lm MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02D7;N # Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
+02D8..02DB;A # Sk [4] BREVE..OGONEK
+02DC;N # Sk SMALL TILDE
+02DD;A # Sk DOUBLE ACUTE ACCENT
+02DE;N # Sk MODIFIER LETTER RHOTIC HOOK
+02DF;A # Sk MODIFIER LETTER CROSS ACCENT
+02E0..02E4;N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB;N # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC;N # Lm MODIFIER LETTER VOICING
+02ED;N # Sk MODIFIER LETTER UNASPIRATED
+02EE;N # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF;N # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..036F;A # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0370..0373;N # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374;N # Lm GREEK NUMERAL SIGN
+0375;N # Sk GREEK LOWER NUMERAL SIGN
+0376..0377;N # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A;N # Lm GREEK YPOGEGRAMMENI
+037B..037D;N # Ll [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037E;N # Po GREEK QUESTION MARK
+037F;N # Lu GREEK CAPITAL LETTER YOT
+0384..0385;N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386;N # Lu GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387;N # Po GREEK ANO TELEIA
+0388..038A;N # Lu [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C;N # Lu GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..0390;N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391..03A1;A # Lu [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03A9;A # Lu [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA
+03AA..03B0;N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03B1..03C1;A # Ll [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO
+03C2;N # Ll GREEK SMALL LETTER FINAL SIGMA
+03C3..03C9;A # Ll [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA
+03CA..03F5;N # L& [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL
+03F6;N # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..03FF;N # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400;N # Lu CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401;A # Lu CYRILLIC CAPITAL LETTER IO
+0402..040F;N # Lu [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE
+0410..044F;A # L& [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA
+0450;N # Ll CYRILLIC SMALL LETTER IE WITH GRAVE
+0451;A # Ll CYRILLIC SMALL LETTER IO
+0452..0481;N # L& [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA
+0482;N # So CYRILLIC THOUSANDS SIGN
+0483..0487;N # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489;N # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+048A..04FF;N # L& [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE
+0500..052F;N # L& [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556;N # Lu [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559;N # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F;N # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0560..0588;N # Ll [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+0589;N # Po ARMENIAN FULL STOP
+058A;N # Pd ARMENIAN HYPHEN
+058D..058E;N # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+058F;N # Sc ARMENIAN DRAM SIGN
+0591..05BD;N # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BE;N # Pd HEBREW PUNCTUATION MAQAF
+05BF;N # Mn HEBREW POINT RAFE
+05C0;N # Po HEBREW PUNCTUATION PASEQ
+05C1..05C2;N # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C3;N # Po HEBREW PUNCTUATION SOF PASUQ
+05C4..05C5;N # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C6;N # Po HEBREW PUNCTUATION NUN HAFUKHA
+05C7;N # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA;N # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2;N # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4;N # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+0600..0605;N # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+0606..0608;N # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+0609..060A;N # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B;N # Sc AFGHANI SIGN
+060C..060D;N # Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR
+060E..060F;N # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+0610..061A;N # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+061B;N # Po ARABIC SEMICOLON
+061C;N # Cf ARABIC LETTER MARK
+061E..061F;N # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+0620..063F;N # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640;N # Lm ARABIC TATWEEL
+0641..064A;N # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..065F;N # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0660..0669;N # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066A..066D;N # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+066E..066F;N # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670;N # Mn ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3;N # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4;N # Po ARABIC FULL STOP
+06D5;N # Lo ARABIC LETTER AE
+06D6..06DC;N # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DD;N # Cf ARABIC END OF AYAH
+06DE;N # So ARABIC START OF RUB EL HIZB
+06DF..06E4;N # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6;N # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8;N # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06E9;N # So ARABIC PLACE OF SAJDAH
+06EA..06ED;N # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF;N # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9;N # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC;N # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE;N # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF;N # Lo ARABIC LETTER HEH WITH INVERTED V
+0700..070D;N # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070F;N # Cf SYRIAC ABBREVIATION MARK
+0710;N # Lo SYRIAC LETTER ALAPH
+0711;N # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F;N # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A;N # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..074F;N # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+0750..077F;N # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+0780..07A5;N # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+07A6..07B0;N # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1;N # Lo THAANA LETTER NAA
+07C0..07C9;N # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA;N # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3;N # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5;N # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07F6;N # So NKO SYMBOL OO DENNEN
+07F7..07F9;N # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+07FA;N # Lm NKO LAJANYALAN
+07FD;N # Mn NKO DANTAYALAN
+07FE..07FF;N # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN
+0800..0815;N # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819;N # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A;N # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823;N # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824;N # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827;N # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828;N # Lm SAMARITAN MODIFIER LETTER I
+0829..082D;N # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0830..083E;N # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+0840..0858;N # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0859..085B;N # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+085E;N # Po MANDAIC PUNCTUATION
+0860..086A;N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+08A0..08B4;N # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD;N # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08D3..08E1;N # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
+08E2;N # Cf ARABIC DISPUTED END OF AYAH
+08E3..08FF;N # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
+0900..0902;N # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903;N # Mc DEVANAGARI SIGN VISARGA
+0904..0939;N # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A;N # Mn DEVANAGARI VOWEL SIGN OE
+093B;N # Mc DEVANAGARI VOWEL SIGN OOE
+093C;N # Mn DEVANAGARI SIGN NUKTA
+093D;N # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940;N # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948;N # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C;N # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D;N # Mn DEVANAGARI SIGN VIRAMA
+094E..094F;N # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950;N # Lo DEVANAGARI OM
+0951..0957;N # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0958..0961;N # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963;N # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0964..0965;N # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0966..096F;N # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970;N # Po DEVANAGARI ABBREVIATION SIGN
+0971;N # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..097F;N # Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
+0980;N # Lo BENGALI ANJI
+0981;N # Mn BENGALI SIGN CANDRABINDU
+0982..0983;N # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C;N # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990;N # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8;N # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0;N # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2;N # Lo BENGALI LETTER LA
+09B6..09B9;N # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC;N # Mn BENGALI SIGN NUKTA
+09BD;N # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0;N # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4;N # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8;N # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC;N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD;N # Mn BENGALI SIGN VIRAMA
+09CE;N # Lo BENGALI LETTER KHANDA TA
+09D7;N # Mc BENGALI AU LENGTH MARK
+09DC..09DD;N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1;N # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3;N # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF;N # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1;N # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3;N # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F9;N # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA;N # So BENGALI ISSHAR
+09FB;N # Sc BENGALI GANDA MARK
+09FC;N # Lo BENGALI LETTER VEDIC ANUSVARA
+09FD;N # Po BENGALI ABBREVIATION SIGN
+09FE;N # Mn BENGALI SANDHI MARK
+0A01..0A02;N # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03;N # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A;N # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10;N # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28;N # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30;N # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33;N # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36;N # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39;N # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C;N # Mn GURMUKHI SIGN NUKTA
+0A3E..0A40;N # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42;N # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48;N # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D;N # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51;N # Mn GURMUKHI SIGN UDAAT
+0A59..0A5C;N # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E;N # Lo GURMUKHI LETTER FA
+0A66..0A6F;N # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71;N # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74;N # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75;N # Mn GURMUKHI SIGN YAKASH
+0A76;N # Po GURMUKHI ABBREVIATION SIGN
+0A81..0A82;N # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83;N # Mc GUJARATI SIGN VISARGA
+0A85..0A8D;N # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91;N # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8;N # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0;N # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3;N # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9;N # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC;N # Mn GUJARATI SIGN NUKTA
+0ABD;N # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0;N # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5;N # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8;N # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9;N # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC;N # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD;N # Mn GUJARATI SIGN VIRAMA
+0AD0;N # Lo GUJARATI OM
+0AE0..0AE1;N # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3;N # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF;N # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF0;N # Po GUJARATI ABBREVIATION SIGN
+0AF1;N # Sc GUJARATI RUPEE SIGN
+0AF9;N # Lo GUJARATI LETTER ZHA
+0AFA..0AFF;N # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01;N # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03;N # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C;N # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10;N # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28;N # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30;N # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33;N # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39;N # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C;N # Mn ORIYA SIGN NUKTA
+0B3D;N # Lo ORIYA SIGN AVAGRAHA
+0B3E;N # Mc ORIYA VOWEL SIGN AA
+0B3F;N # Mn ORIYA VOWEL SIGN I
+0B40;N # Mc ORIYA VOWEL SIGN II
+0B41..0B44;N # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48;N # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C;N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D;N # Mn ORIYA SIGN VIRAMA
+0B56;N # Mn ORIYA AI LENGTH MARK
+0B57;N # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D;N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61;N # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63;N # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F;N # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70;N # So ORIYA ISSHAR
+0B71;N # Lo ORIYA LETTER WA
+0B72..0B77;N # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+0B82;N # Mn TAMIL SIGN ANUSVARA
+0B83;N # Lo TAMIL SIGN VISARGA
+0B85..0B8A;N # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90;N # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95;N # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A;N # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C;N # Lo TAMIL LETTER JA
+0B9E..0B9F;N # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4;N # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA;N # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9;N # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF;N # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0;N # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2;N # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8;N # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC;N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD;N # Mn TAMIL SIGN VIRAMA
+0BD0;N # Lo TAMIL OM
+0BD7;N # Mc TAMIL AU LENGTH MARK
+0BE6..0BEF;N # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2;N # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8;N # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9;N # Sc TAMIL RUPEE SIGN
+0BFA;N # So TAMIL NUMBER SIGN
+0C00;N # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03;N # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04;N # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C;N # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10;N # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28;N # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39;N # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D;N # Lo TELUGU SIGN AVAGRAHA
+0C3E..0C40;N # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44;N # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48;N # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D;N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56;N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C5A;N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C60..0C61;N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63;N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F;N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C77;N # Po TELUGU SIGN SIDDHAM
+0C78..0C7E;N # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F;N # So TELUGU SIGN TUUMU
+0C80;N # Lo KANNADA SIGN SPACING CANDRABINDU
+0C81;N # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83;N # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C84;N # Po KANNADA SIGN SIDDHAM
+0C85..0C8C;N # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90;N # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8;N # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3;N # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9;N # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC;N # Mn KANNADA SIGN NUKTA
+0CBD;N # Lo KANNADA SIGN AVAGRAHA
+0CBE;N # Mc KANNADA VOWEL SIGN AA
+0CBF;N # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4;N # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6;N # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8;N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB;N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD;N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6;N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE;N # Lo KANNADA LETTER FA
+0CE0..0CE1;N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3;N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF;N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2;N # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00..0D01;N # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03;N # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C;N # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10;N # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A;N # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C;N # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D3D;N # Lo MALAYALAM SIGN AVAGRAHA
+0D3E..0D40;N # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44;N # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48;N # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C;N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D;N # Mn MALAYALAM SIGN VIRAMA
+0D4E;N # Lo MALAYALAM LETTER DOT REPH
+0D4F;N # So MALAYALAM SIGN PARA
+0D54..0D56;N # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57;N # Mc MALAYALAM AU LENGTH MARK
+0D58..0D5E;N # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+0D5F..0D61;N # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D62..0D63;N # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F;N # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D70..0D78;N # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
+0D79;N # So MALAYALAM DATE MARK
+0D7A..0D7F;N # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83;N # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96;N # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1;N # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB;N # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD;N # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6;N # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA;N # Mn SINHALA SIGN AL-LAKUNA
+0DCF..0DD1;N # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4;N # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6;N # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF;N # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DE6..0DEF;N # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+0DF2..0DF3;N # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4;N # Po SINHALA PUNCTUATION KUNDDALIYA
+0E01..0E30;N # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31;N # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33;N # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A;N # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E3F;N # Sc THAI CURRENCY SYMBOL BAHT
+0E40..0E45;N # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46;N # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E;N # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E4F;N # Po THAI CHARACTER FONGMAN
+0E50..0E59;N # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B;N # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0E81..0E82;N # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84;N # Lo LAO LETTER KHO TAM
+0E86..0E8A;N # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3;N # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5;N # Lo LAO LETTER LO LOOT
+0EA7..0EB0;N # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB1;N # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3;N # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EBC;N # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EBD;N # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4;N # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6;N # Lm LAO KO LA
+0EC8..0ECD;N # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9;N # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDF;N # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00;N # Lo TIBETAN SYLLABLE OM
+0F01..0F03;N # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12;N # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13;N # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14;N # Po TIBETAN MARK GTER TSHEG
+0F15..0F17;N # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18..0F19;N # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A..0F1F;N # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29;N # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33;N # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34;N # So TIBETAN MARK BSDUS RTAGS
+0F35;N # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36;N # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37;N # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38;N # So TIBETAN MARK CHE MGO
+0F39;N # Mn TIBETAN MARK TSA -PHRU
+0F3A;N # Ps TIBETAN MARK GUG RTAGS GYON
+0F3B;N # Pe TIBETAN MARK GUG RTAGS GYAS
+0F3C;N # Ps TIBETAN MARK ANG KHANG GYON
+0F3D;N # Pe TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F;N # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47;N # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C;N # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E;N # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F;N # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F84;N # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F85;N # Po TIBETAN MARK PALUTA
+0F86..0F87;N # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8C;N # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0F8D..0F97;N # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC;N # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE..0FC5;N # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC6;N # Mn TIBETAN SYMBOL PADMA GDAN
+0FC7..0FCC;N # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE..0FCF;N # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD4;N # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5..0FD8;N # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+0FD9..0FDA;N # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+1000..102A;N # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C;N # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030;N # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031;N # Mc MYANMAR VOWEL SIGN E
+1032..1037;N # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038;N # Mc MYANMAR SIGN VISARGA
+1039..103A;N # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C;N # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E;N # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F;N # Lo MYANMAR LETTER GREAT SA
+1040..1049;N # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F;N # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055;N # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057;N # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059;N # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D;N # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060;N # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061;N # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064;N # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066;N # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D;N # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070;N # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074;N # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081;N # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082;N # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084;N # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086;N # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C;N # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D;N # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E;N # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F;N # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099;N # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C;N # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D;N # Mn MYANMAR VOWEL SIGN AITON AI
+109E..109F;N # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+10A0..10C5;N # Lu [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7;N # Lu GEORGIAN CAPITAL LETTER YN
+10CD;N # Lu GEORGIAN CAPITAL LETTER AEN
+10D0..10FA;N # Ll [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FB;N # Po GEORGIAN PARAGRAPH SEPARATOR
+10FC;N # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF;N # Ll [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..115F;W # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
+1160..11FF;N # Lo [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN
+1200..1248;N # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
+124A..124D;N # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256;N # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258;N # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D;N # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288;N # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D;N # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0;N # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5;N # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE;N # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0;N # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5;N # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6;N # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310;N # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315;N # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A;N # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135D..135F;N # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1360..1368;N # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C;N # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F;N # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399;N # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+13A0..13F5;N # Lu [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD;N # Ll [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1400;N # Pd CANADIAN SYLLABICS HYPHEN
+1401..166C;N # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D;N # So CANADIAN SYLLABICS CHI SIGN
+166E;N # Po CANADIAN SYLLABICS FULL STOP
+166F..167F;N # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1680;N # Zs OGHAM SPACE MARK
+1681..169A;N # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B;N # Ps OGHAM FEATHER MARK
+169C;N # Pe OGHAM REVERSED FEATHER MARK
+16A0..16EA;N # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EB..16ED;N # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+16EE..16F0;N # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8;N # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..170C;N # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711;N # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714;N # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1720..1731;N # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734;N # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1735..1736;N # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1740..1751;N # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753;N # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C;N # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770;N # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773;N # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3;N # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5;N # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6;N # Mc KHMER VOWEL SIGN AA
+17B7..17BD;N # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5;N # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6;N # Mn KHMER SIGN NIKAHIT
+17C7..17C8;N # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3;N # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D4..17D6;N # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7;N # Lm KHMER SIGN LEK TOO
+17D8..17DA;N # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DB;N # Sc KHMER CURRENCY SYMBOL RIEL
+17DC;N # Lo KHMER SIGN AVAKRAHASANYA
+17DD;N # Mn KHMER SIGN ATTHACAN
+17E0..17E9;N # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9;N # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800..1805;N # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+1806;N # Pd MONGOLIAN TODO SOFT HYPHEN
+1807..180A;N # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+180B..180D;N # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E;N # Cf MONGOLIAN VOWEL SEPARATOR
+1810..1819;N # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842;N # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843;N # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878;N # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884;N # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886;N # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8;N # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9;N # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+18AA;N # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5;N # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E;N # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1920..1922;N # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926;N # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928;N # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B;N # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931;N # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932;N # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938;N # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B;N # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1940;N # So LIMBU SIGN LOO
+1944..1945;N # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F;N # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D;N # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974;N # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB;N # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9;N # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9;N # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA;N # No NEW TAI LUE THAM DIGIT ONE
+19DE..19DF;N # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+19E0..19FF;N # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+1A00..1A16;N # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18;N # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A;N # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B;N # Mn BUGINESE VOWEL SIGN AE
+1A1E..1A1F;N # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+1A20..1A54;N # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55;N # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56;N # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57;N # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E;N # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60;N # Mn TAI THAM SIGN SAKOT
+1A61;N # Mc TAI THAM VOWEL SIGN A
+1A62;N # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64;N # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C;N # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72;N # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C;N # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F;N # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89;N # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99;N # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA0..1AA6;N # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA7;N # Lm TAI THAM SIGN MAI YAMOK
+1AA8..1AAD;N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+1AB0..1ABD;N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE;N # Me COMBINING PARENTHESES OVERLAY
+1B00..1B03;N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04;N # Mc BALINESE SIGN BISAH
+1B05..1B33;N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34;N # Mn BALINESE SIGN REREKAN
+1B35;N # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A;N # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B;N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C;N # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41;N # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42;N # Mn BALINESE VOWEL SIGN PEPET
+1B43..1B44;N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B;N # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59;N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B5A..1B60;N # Po [7] BALINESE PANTI..BALINESE PAMENENG
+1B61..1B6A;N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+1B6B..1B73;N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B74..1B7C;N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B80..1B81;N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82;N # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0;N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1;N # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5;N # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7;N # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9;N # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA;N # Mc SUNDANESE SIGN PAMAAEH
+1BAB..1BAD;N # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BAF;N # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9;N # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BBF;N # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
+1BC0..1BE5;N # Lo [38] BATAK LETTER A..BATAK LETTER U
+1BE6;N # Mn BATAK SIGN TOMPI
+1BE7;N # Mc BATAK VOWEL SIGN E
+1BE8..1BE9;N # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC;N # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED;N # Mn BATAK VOWEL SIGN KARO O
+1BEE;N # Mc BATAK VOWEL SIGN U
+1BEF..1BF1;N # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1BF2..1BF3;N # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1BFC..1BFF;N # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+1C00..1C23;N # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B;N # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33;N # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35;N # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37;N # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C3B..1C3F;N # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C40..1C49;N # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F;N # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59;N # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77;N # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D;N # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C7E..1C7F;N # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1C80..1C88;N # Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA;N # Lu [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF;N # Lu [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CC0..1CC7;N # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+1CD0..1CD2;N # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD3;N # Po VEDIC SIGN NIHSHVASA
+1CD4..1CE0;N # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1;N # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8;N # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9..1CEC;N # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED;N # Mn VEDIC SIGN TIRYAK
+1CEE..1CF3;N # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF4;N # Mn VEDIC TONE CANDRA ABOVE
+1CF5..1CF6;N # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7;N # Mc VEDIC SIGN ATIKRAMA
+1CF8..1CF9;N # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1CFA;N # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B;N # Ll [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A;N # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77;N # Ll [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78;N # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D7F;N # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
+1D80..1D9A;N # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF;N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DF9;N # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF;N # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00..1EFF;N # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
+1F00..1F15;N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D;N # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45;N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D;N # Lu [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57;N # Ll [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59;N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B;N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D;N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D;N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4;N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC;N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD;N # Sk GREEK KORONIS
+1FBE;N # Ll GREEK PROSGEGRAMMENI
+1FBF..1FC1;N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4;N # Ll [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC;N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF;N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3;N # Ll [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB;N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF;N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC;N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF;N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4;N # Ll [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC;N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE;N # Sk [2] GREEK OXIA..GREEK DASIA
+2000..200A;N # Zs [11] EN QUAD..HAIR SPACE
+200B..200F;N # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+2010;A # Pd HYPHEN
+2011..2012;N # Pd [2] NON-BREAKING HYPHEN..FIGURE DASH
+2013..2015;A # Pd [3] EN DASH..HORIZONTAL BAR
+2016;A # Po DOUBLE VERTICAL LINE
+2017;N # Po DOUBLE LOW LINE
+2018;A # Pi LEFT SINGLE QUOTATION MARK
+2019;A # Pf RIGHT SINGLE QUOTATION MARK
+201A;N # Ps SINGLE LOW-9 QUOTATION MARK
+201B;N # Pi SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C;A # Pi LEFT DOUBLE QUOTATION MARK
+201D;A # Pf RIGHT DOUBLE QUOTATION MARK
+201E;N # Ps DOUBLE LOW-9 QUOTATION MARK
+201F;N # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2022;A # Po [3] DAGGER..BULLET
+2023;N # Po TRIANGULAR BULLET
+2024..2027;A # Po [4] ONE DOT LEADER..HYPHENATION POINT
+2028;N # Zl LINE SEPARATOR
+2029;N # Zp PARAGRAPH SEPARATOR
+202A..202E;N # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F;N # Zs NARROW NO-BREAK SPACE
+2030;A # Po PER MILLE SIGN
+2031;N # Po PER TEN THOUSAND SIGN
+2032..2033;A # Po [2] PRIME..DOUBLE PRIME
+2034;N # Po TRIPLE PRIME
+2035;A # Po REVERSED PRIME
+2036..2038;N # Po [3] REVERSED DOUBLE PRIME..CARET
+2039;N # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;N # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B;A # Po REFERENCE MARK
+203C..203D;N # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+203E;A # Po OVERLINE
+203F..2040;N # Pc [2] UNDERTIE..CHARACTER TIE
+2041..2043;N # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044;N # Sm FRACTION SLASH
+2045;N # Ps LEFT SQUARE BRACKET WITH QUILL
+2046;N # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051;N # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052;N # Sm COMMERCIAL MINUS SIGN
+2053;N # Po SWUNG DASH
+2054;N # Pc INVERTED UNDERTIE
+2055..205E;N # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+205F;N # Zs MEDIUM MATHEMATICAL SPACE
+2060..2064;N # Cf [5] WORD JOINER..INVISIBLE PLUS
+2066..206F;N # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+2070;N # No SUPERSCRIPT ZERO
+2071;N # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074;A # No SUPERSCRIPT FOUR
+2075..2079;N # No [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
+207A..207C;N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D;N # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E;N # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F;A # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080;N # No SUBSCRIPT ZERO
+2081..2084;A # No [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
+2085..2089;N # No [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
+208A..208C;N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D;N # Ps SUBSCRIPT LEFT PARENTHESIS
+208E;N # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090..209C;N # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20A0..20A8;N # Sc [9] EURO-CURRENCY SIGN..RUPEE SIGN
+20A9;H # Sc WON SIGN
+20AA..20AB;N # Sc [2] NEW SHEQEL SIGN..DONG SIGN
+20AC;A # Sc EURO SIGN
+20AD..20BF;N # Sc [19] KIP SIGN..BITCOIN SIGN
+20D0..20DC;N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0;N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1;N # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4;N # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0;N # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2100..2101;N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102;N # Lu DOUBLE-STRUCK CAPITAL C
+2103;A # So DEGREE CELSIUS
+2104;N # So CENTRE LINE SYMBOL
+2105;A # So CARE OF
+2106;N # So CADA UNA
+2107;N # Lu EULER CONSTANT
+2108;N # So SCRUPLE
+2109;A # So DEGREE FAHRENHEIT
+210A..2112;N # L& [9] SCRIPT SMALL G..SCRIPT CAPITAL L
+2113;A # Ll SCRIPT SMALL L
+2114;N # So L B BAR SYMBOL
+2115;N # Lu DOUBLE-STRUCK CAPITAL N
+2116;A # So NUMERO SIGN
+2117;N # So SOUND RECORDING COPYRIGHT
+2118;N # Sm SCRIPT CAPITAL P
+2119..211D;N # Lu [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2120;N # So [3] PRESCRIPTION TAKE..SERVICE MARK
+2121..2122;A # So [2] TELEPHONE SIGN..TRADE MARK SIGN
+2123;N # So VERSICLE
+2124;N # Lu DOUBLE-STRUCK CAPITAL Z
+2125;N # So OUNCE SIGN
+2126;A # Lu OHM SIGN
+2127;N # So INVERTED OHM SIGN
+2128;N # Lu BLACK-LETTER CAPITAL Z
+2129;N # So TURNED GREEK SMALL LETTER IOTA
+212A;N # Lu KELVIN SIGN
+212B;A # Lu ANGSTROM SIGN
+212C..212D;N # Lu [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212E;N # So ESTIMATED SYMBOL
+212F..2134;N # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138;N # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139;N # Ll INFORMATION SOURCE
+213A..213B;N # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F;N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144;N # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149;N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A;N # So PROPERTY LINE
+214B;N # Sm TURNED AMPERSAND
+214C..214D;N # So [2] PER SIGN..AKTIESELSKAB
+214E;N # Ll TURNED SMALL F
+214F;N # So SYMBOL FOR SAMARITAN SOURCE
+2150..2152;N # No [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH
+2153..2154;A # No [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS
+2155..215A;N # No [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS
+215B..215E;A # No [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS
+215F;N # No FRACTION NUMERATOR ONE
+2160..216B;A # Nl [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
+216C..216F;N # Nl [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
+2170..2179;A # Nl [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
+217A..2182;N # Nl [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND
+2183..2184;N # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188;N # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2189;A # No VULGAR FRACTION ZERO THIRDS
+218A..218B;N # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+2190..2194;A # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199;A # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B;N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F;N # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0;N # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2;N # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3;N # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5;N # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6;N # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD;N # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE;N # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21B7;N # So [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+21B8..21B9;A # So [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA..21CD;N # So [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF;N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1;N # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2;A # Sm RIGHTWARDS DOUBLE ARROW
+21D3;N # So DOWNWARDS DOUBLE ARROW
+21D4;A # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21E6;N # So [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW
+21E7;A # So UPWARDS WHITE ARROW
+21E8..21F3;N # So [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW
+21F4..21FF;N # Sm [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
+2200;A # Sm FOR ALL
+2201;N # Sm COMPLEMENT
+2202..2203;A # Sm [2] PARTIAL DIFFERENTIAL..THERE EXISTS
+2204..2206;N # Sm [3] THERE DOES NOT EXIST..INCREMENT
+2207..2208;A # Sm [2] NABLA..ELEMENT OF
+2209..220A;N # Sm [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
+220B;A # Sm CONTAINS AS MEMBER
+220C..220E;N # Sm [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
+220F;A # Sm N-ARY PRODUCT
+2210;N # Sm N-ARY COPRODUCT
+2211;A # Sm N-ARY SUMMATION
+2212..2214;N # Sm [3] MINUS SIGN..DOT PLUS
+2215;A # Sm DIVISION SLASH
+2216..2219;N # Sm [4] SET MINUS..BULLET OPERATOR
+221A;A # Sm SQUARE ROOT
+221B..221C;N # Sm [2] CUBE ROOT..FOURTH ROOT
+221D..2220;A # Sm [4] PROPORTIONAL TO..ANGLE
+2221..2222;N # Sm [2] MEASURED ANGLE..SPHERICAL ANGLE
+2223;A # Sm DIVIDES
+2224;N # Sm DOES NOT DIVIDE
+2225;A # Sm PARALLEL TO
+2226;N # Sm NOT PARALLEL TO
+2227..222C;A # Sm [6] LOGICAL AND..DOUBLE INTEGRAL
+222D;N # Sm TRIPLE INTEGRAL
+222E;A # Sm CONTOUR INTEGRAL
+222F..2233;N # Sm [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
+2234..2237;A # Sm [4] THEREFORE..PROPORTION
+2238..223B;N # Sm [4] DOT MINUS..HOMOTHETIC
+223C..223D;A # Sm [2] TILDE OPERATOR..REVERSED TILDE
+223E..2247;N # Sm [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248;A # Sm ALMOST EQUAL TO
+2249..224B;N # Sm [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
+224C;A # Sm ALL EQUAL TO
+224D..2251;N # Sm [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
+2252;A # Sm APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253..225F;N # Sm [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
+2260..2261;A # Sm [2] NOT EQUAL TO..IDENTICAL TO
+2262..2263;N # Sm [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
+2264..2267;A # Sm [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
+2268..2269;N # Sm [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
+226A..226B;A # Sm [2] MUCH LESS-THAN..MUCH GREATER-THAN
+226C..226D;N # Sm [2] BETWEEN..NOT EQUIVALENT TO
+226E..226F;A # Sm [2] NOT LESS-THAN..NOT GREATER-THAN
+2270..2281;N # Sm [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
+2282..2283;A # Sm [2] SUBSET OF..SUPERSET OF
+2284..2285;N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2286..2287;A # Sm [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
+2288..2294;N # Sm [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
+2295;A # Sm CIRCLED PLUS
+2296..2298;N # Sm [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
+2299;A # Sm CIRCLED DOT OPERATOR
+229A..22A4;N # Sm [11] CIRCLED RING OPERATOR..DOWN TACK
+22A5;A # Sm UP TACK
+22A6..22BE;N # Sm [25] ASSERTION..RIGHT ANGLE WITH ARC
+22BF;A # Sm RIGHT TRIANGLE
+22C0..22FF;N # Sm [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP
+2300..2307;N # So [8] DIAMETER SIGN..WAVY LINE
+2308;N # Ps LEFT CEILING
+2309;N # Pe RIGHT CEILING
+230A;N # Ps LEFT FLOOR
+230B;N # Pe RIGHT FLOOR
+230C..2311;N # So [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
+2312;A # So ARC
+2313..2319;N # So [7] SEGMENT..TURNED NOT SIGN
+231A..231B;W # So [2] WATCH..HOURGLASS
+231C..231F;N # So [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER
+2320..2321;N # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328;N # So [7] FROWN..KEYBOARD
+2329;W # Ps LEFT-POINTING ANGLE BRACKET
+232A;W # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B;N # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C;N # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A;N # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3;N # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB;N # So [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1;N # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..23E8;N # So [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
+23E9..23EC;W # So [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE
+23ED..23EF;N # So [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+23F0;W # So ALARM CLOCK
+23F1..23F2;N # So [2] STOPWATCH..TIMER CLOCK
+23F3;W # So HOURGLASS WITH FLOWING SAND
+23F4..23FF;N # So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
+2400..2426;N # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A;N # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B;A # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9;A # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA;N # No CIRCLED DIGIT ZERO
+24EB..24FF;A # No [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO
+2500..254B;A # So [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C..254F;N # So [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550..2573;A # So [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574..257F;N # So [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580..258F;A # So [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
+2590..2591;N # So [2] RIGHT HALF BLOCK..LIGHT SHADE
+2592..2595;A # So [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
+2596..259F;N # So [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0..25A1;A # So [2] BLACK SQUARE..WHITE SQUARE
+25A2;N # So WHITE SQUARE WITH ROUNDED CORNERS
+25A3..25A9;A # So [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA..25B1;N # So [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
+25B2..25B3;A # So [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
+25B4..25B5;N # So [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
+25B6;A # So BLACK RIGHT-POINTING TRIANGLE
+25B7;A # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25BB;N # So [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
+25BC..25BD;A # So [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
+25BE..25BF;N # So [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
+25C0;A # So BLACK LEFT-POINTING TRIANGLE
+25C1;A # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25C5;N # So [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
+25C6..25C8;A # So [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9..25CA;N # So [2] FISHEYE..LOZENGE
+25CB;A # So WHITE CIRCLE
+25CC..25CD;N # So [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
+25CE..25D1;A # So [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
+25D2..25E1;N # So [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
+25E2..25E5;A # So [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
+25E6..25EE;N # So [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF;A # So LARGE CIRCLE
+25F0..25F7;N # So [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FC;N # Sm [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE
+25FD..25FE;W # Sm [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE
+25FF;N # Sm LOWER RIGHT TRIANGLE
+2600..2604;N # So [5] BLACK SUN WITH RAYS..COMET
+2605..2606;A # So [2] BLACK STAR..WHITE STAR
+2607..2608;N # So [2] LIGHTNING..THUNDERSTORM
+2609;A # So SUN
+260A..260D;N # So [4] ASCENDING NODE..OPPOSITION
+260E..260F;A # So [2] BLACK TELEPHONE..WHITE TELEPHONE
+2610..2613;N # So [4] BALLOT BOX..SALTIRE
+2614..2615;W # So [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
+2616..261B;N # So [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX
+261C;A # So WHITE LEFT POINTING INDEX
+261D;N # So WHITE UP POINTING INDEX
+261E;A # So WHITE RIGHT POINTING INDEX
+261F..263F;N # So [33] WHITE DOWN POINTING INDEX..MERCURY
+2640;A # So FEMALE SIGN
+2641;N # So EARTH
+2642;A # So MALE SIGN
+2643..2647;N # So [5] JUPITER..PLUTO
+2648..2653;W # So [12] ARIES..PISCES
+2654..265F;N # So [12] WHITE CHESS KING..BLACK CHESS PAWN
+2660..2661;A # So [2] BLACK SPADE SUIT..WHITE HEART SUIT
+2662;N # So WHITE DIAMOND SUIT
+2663..2665;A # So [3] BLACK CLUB SUIT..BLACK HEART SUIT
+2666;N # So BLACK DIAMOND SUIT
+2667..266A;A # So [4] WHITE CLUB SUIT..EIGHTH NOTE
+266B;N # So BEAMED EIGHTH NOTES
+266C..266D;A # So [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
+266E;N # So MUSIC NATURAL SIGN
+266F;A # Sm MUSIC SHARP SIGN
+2670..267E;N # So [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN
+267F;W # So WHEELCHAIR SYMBOL
+2680..2692;N # So [19] DIE FACE-1..HAMMER AND PICK
+2693;W # So ANCHOR
+2694..269D;N # So [10] CROSSED SWORDS..OUTLINED WHITE STAR
+269E..269F;A # So [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
+26A0;N # So WARNING SIGN
+26A1;W # So HIGH VOLTAGE SIGN
+26A2..26A9;N # So [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN
+26AA..26AB;W # So [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE
+26AC..26BC;N # So [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE
+26BD..26BE;W # So [2] SOCCER BALL..BASEBALL
+26BF;A # So SQUARED KEY
+26C0..26C3;N # So [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
+26C4..26C5;W # So [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD
+26C6..26CD;A # So [8] RAIN..DISABLED CAR
+26CE;W # So OPHIUCHUS
+26CF..26D3;A # So [5] PICK..CHAINS
+26D4;W # So NO ENTRY
+26D5..26E1;A # So [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2
+26E2;N # So ASTRONOMICAL SYMBOL FOR URANUS
+26E3;A # So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E4..26E7;N # So [4] PENTAGRAM..INVERTED PENTAGRAM
+26E8..26E9;A # So [2] BLACK CROSS ON SHIELD..SHINTO SHRINE
+26EA;W # So CHURCH
+26EB..26F1;A # So [7] CASTLE..UMBRELLA ON GROUND
+26F2..26F3;W # So [2] FOUNTAIN..FLAG IN HOLE
+26F4;A # So FERRY
+26F5;W # So SAILBOAT
+26F6..26F9;A # So [4] SQUARE FOUR CORNERS..PERSON WITH BALL
+26FA;W # So TENT
+26FB..26FC;A # So [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
+26FD;W # So FUEL PUMP
+26FE..26FF;A # So [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2700..2704;N # So [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
+2705;W # So WHITE HEAVY CHECK MARK
+2706..2709;N # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270A..270B;W # So [2] RAISED FIST..RAISED HAND
+270C..2727;N # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2728;W # So SPARKLES
+2729..273C;N # So [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D;A # So HEAVY TEARDROP-SPOKED ASTERISK
+273E..274B;N # So [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274C;W # So CROSS MARK
+274D;N # So SHADOWED WHITE CIRCLE
+274E;W # So NEGATIVE SQUARED CROSS MARK
+274F..2752;N # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2753..2755;W # So [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT
+2756;N # So BLACK DIAMOND MINUS WHITE X
+2757;W # So HEAVY EXCLAMATION MARK SYMBOL
+2758..2767;N # So [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET
+2768;N # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769;N # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A;N # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B;N # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C;N # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D;N # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E;N # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F;N # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770;N # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771;N # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772;N # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773;N # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774;N # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775;N # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..277F;A # No [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780..2793;N # No [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794;N # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795..2797;W # So [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN
+2798..27AF;N # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B0;W # So CURLY LOOP
+27B1..27BE;N # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27BF;W # So DOUBLE CURLY LOOP
+27C0..27C4;N # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5;N # Ps LEFT S-SHAPED BAG DELIMITER
+27C6;N # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27E5;N # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6;Na # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7;Na # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8;Na # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9;Na # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA;Na # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB;Na # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC;Na # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED;Na # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE;N # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF;N # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF;N # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF;N # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..297F;N # Sm [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL
+2980..2982;N # Sm [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON
+2983;N # Ps LEFT WHITE CURLY BRACKET
+2984;N # Pe RIGHT WHITE CURLY BRACKET
+2985;Na # Ps LEFT WHITE PARENTHESIS
+2986;Na # Pe RIGHT WHITE PARENTHESIS
+2987;N # Ps Z NOTATION LEFT IMAGE BRACKET
+2988;N # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989;N # Ps Z NOTATION LEFT BINDING BRACKET
+298A;N # Pe Z NOTATION RIGHT BINDING BRACKET
+298B;N # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C;N # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D;N # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E;N # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F;N # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990;N # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991;N # Ps LEFT ANGLE BRACKET WITH DOT
+2992;N # Pe RIGHT ANGLE BRACKET WITH DOT
+2993;N # Ps LEFT ARC LESS-THAN BRACKET
+2994;N # Pe RIGHT ARC GREATER-THAN BRACKET
+2995;N # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996;N # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997;N # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998;N # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7;N # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8;N # Ps LEFT WIGGLY FENCE
+29D9;N # Pe RIGHT WIGGLY FENCE
+29DA;N # Ps LEFT DOUBLE WIGGLY FENCE
+29DB;N # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB;N # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC;N # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD;N # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..29FF;N # Sm [2] TINY..MINY
+2A00..2AFF;N # Sm [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR
+2B00..2B1A;N # So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE
+2B1B..2B1C;W # So [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE
+2B1D..2B2F;N # So [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE
+2B30..2B44;N # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46;N # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C;N # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B4F;N # So [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW
+2B50;W # So WHITE MEDIUM STAR
+2B51..2B54;N # So [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON
+2B55;W # So HEAVY LARGE CIRCLE
+2B56..2B59;A # So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE
+2B5A..2B73;N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B76..2B95;N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B98..2BFF;N # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2C00..2C2E;N # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E;N # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7B;N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D;N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2C7F;N # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80..2CE4;N # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CE5..2CEA;N # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CEB..2CEE;N # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1;N # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF2..2CF3;N # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2CF9..2CFC;N # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;N # No COPTIC FRACTION ONE HALF
+2CFE..2CFF;N # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+2D00..2D25;N # Ll [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27;N # Ll GEORGIAN SMALL LETTER YN
+2D2D;N # Ll GEORGIAN SMALL LETTER AEN
+2D30..2D67;N # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F;N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D70;N # Po TIFINAGH SEPARATOR MARK
+2D7F;N # Mn TIFINAGH CONSONANT JOINER
+2D80..2D96;N # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6;N # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE;N # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6;N # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE;N # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6;N # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE;N # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6;N # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE;N # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF;N # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E00..2E01;N # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;N # Pi LEFT SUBSTITUTION BRACKET
+2E03;N # Pf RIGHT SUBSTITUTION BRACKET
+2E04;N # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05;N # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08;N # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09;N # Pi LEFT TRANSPOSITION BRACKET
+2E0A;N # Pf RIGHT TRANSPOSITION BRACKET
+2E0B;N # Po RAISED SQUARE
+2E0C;N # Pi LEFT RAISED OMISSION BRACKET
+2E0D;N # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16;N # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17;N # Pd DOUBLE OBLIQUE HYPHEN
+2E18..2E19;N # Po [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A;N # Pd HYPHEN WITH DIAERESIS
+2E1B;N # Po TILDE WITH RING ABOVE
+2E1C;N # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D;N # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F;N # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20;N # Pi LEFT VERTICAL BAR WITH QUILL
+2E21;N # Pf RIGHT VERTICAL BAR WITH QUILL
+2E22;N # Ps TOP LEFT HALF BRACKET
+2E23;N # Pe TOP RIGHT HALF BRACKET
+2E24;N # Ps BOTTOM LEFT HALF BRACKET
+2E25;N # Pe BOTTOM RIGHT HALF BRACKET
+2E26;N # Ps LEFT SIDEWAYS U BRACKET
+2E27;N # Pe RIGHT SIDEWAYS U BRACKET
+2E28;N # Ps LEFT DOUBLE PARENTHESIS
+2E29;N # Pe RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E;N # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F;N # Lm VERTICAL TILDE
+2E30..2E39;N # Po [10] RING POINT..TOP HALF SECTION SIGN
+2E3A..2E3B;N # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E3F;N # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM
+2E40;N # Pd DOUBLE HYPHEN
+2E41;N # Po REVERSED COMMA
+2E42;N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E4F;N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E80..2E99;W # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3;W # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5;W # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+2FF0..2FFB;W # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000;F # Zs IDEOGRAPHIC SPACE
+3001..3003;W # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004;W # So JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005;W # Lm IDEOGRAPHIC ITERATION MARK
+3006;W # Lo IDEOGRAPHIC CLOSING MARK
+3007;W # Nl IDEOGRAPHIC NUMBER ZERO
+3008;W # Ps LEFT ANGLE BRACKET
+3009;W # Pe RIGHT ANGLE BRACKET
+300A;W # Ps LEFT DOUBLE ANGLE BRACKET
+300B;W # Pe RIGHT DOUBLE ANGLE BRACKET
+300C;W # Ps LEFT CORNER BRACKET
+300D;W # Pe RIGHT CORNER BRACKET
+300E;W # Ps LEFT WHITE CORNER BRACKET
+300F;W # Pe RIGHT WHITE CORNER BRACKET
+3010;W # Ps LEFT BLACK LENTICULAR BRACKET
+3011;W # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013;W # So [2] POSTAL MARK..GETA MARK
+3014;W # Ps LEFT TORTOISE SHELL BRACKET
+3015;W # Pe RIGHT TORTOISE SHELL BRACKET
+3016;W # Ps LEFT WHITE LENTICULAR BRACKET
+3017;W # Pe RIGHT WHITE LENTICULAR BRACKET
+3018;W # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019;W # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A;W # Ps LEFT WHITE SQUARE BRACKET
+301B;W # Pe RIGHT WHITE SQUARE BRACKET
+301C;W # Pd WAVE DASH
+301D;W # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F;W # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020;W # So POSTAL MARK FACE
+3021..3029;W # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+302A..302D;W # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F;W # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3030;W # Pd WAVY DASH
+3031..3035;W # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037;W # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038..303A;W # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B;W # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C;W # Lo MASU MARK
+303D;W # Po PART ALTERNATION MARK
+303E;W # So IDEOGRAPHIC VARIATION INDICATOR
+303F;N # So IDEOGRAPHIC HALF FILL SPACE
+3041..3096;W # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+3099..309A;W # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C;W # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E;W # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F;W # Lo HIRAGANA DIGRAPH YORI
+30A0;W # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1..30FA;W # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FB;W # Po KATAKANA MIDDLE DOT
+30FC..30FE;W # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF;W # Lo KATAKANA DIGRAPH KOTO
+3105..312F;W # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E;W # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3190..3191;W # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195;W # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F;W # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31A0..31BA;W # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31C0..31E3;W # So [36] CJK STROKE T..CJK STROKE Q
+31F0..31FF;W # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3200..321E;W # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229;W # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247;W # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3248..324F;A # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+3250;W # So PARTNERSHIP SIGN
+3251..325F;W # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327F;W # So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
+3280..3289;W # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0;W # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF;W # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32FF;W # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
+3300..33FF;W # So [256] SQUARE APAATO..SQUARE GAL
+3400..4DB5;W # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4DB6..4DBF;W # Cn [10] <reserved-4DB6>..<reserved-4DBF>
+4DC0..4DFF;N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+4E00..9FEF;W # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+9FF0..9FFF;W # Cn [16] <reserved-9FF0>..<reserved-9FFF>
+A000..A014;W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
+A015;W # Lm YI SYLLABLE WU
+A016..A48C;W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6;W # So [55] YI RADICAL QOT..YI RADICAL KE
+A4D0..A4F7;N # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD;N # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A4FE..A4FF;N # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A500..A60B;N # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C;N # Lm VAI SYLLABLE LENGTHENER
+A60D..A60F;N # Po [3] VAI COMMA..VAI QUESTION MARK
+A610..A61F;N # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629;N # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B;N # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D;N # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E;N # Lo CYRILLIC LETTER MULTIOCULAR O
+A66F;N # Mn COMBINING CYRILLIC VZMET
+A670..A672;N # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A673;N # Po SLAVONIC ASTERISK
+A674..A67D;N # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A67E;N # Po CYRILLIC KAVYKA
+A67F;N # Lm CYRILLIC PAYEROK
+A680..A69B;N # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D;N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F;N # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6A0..A6E5;N # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF;N # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1;N # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A6F2..A6F7;N # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+A700..A716;N # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F;N # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721;N # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A722..A76F;N # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770;N # Lm MODIFIER LETTER US
+A771..A787;N # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788;N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A;N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A78B..A78E;N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F;N # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7BF;N # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
+A7C2..A7C6;N # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7F7;N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9;N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA;N # Ll LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A7FF;N # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
+A800..A801;N # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+A802;N # Mn SYLOTI NAGRI SIGN DVISVARA
+A803..A805;N # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806;N # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A;N # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B;N # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822;N # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824;N # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826;N # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827;N # Mc SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B;N # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A830..A835;N # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+A836..A837;N # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838;N # Sc NORTH INDIC RUPEE MARK
+A839;N # So NORTH INDIC QUANTITY MARK
+A840..A873;N # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A874..A877;N # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+A880..A881;N # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3;N # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3;N # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4..A8C5;N # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8CE..A8CF;N # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A8D0..A8D9;N # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8E0..A8F1;N # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7;N # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8..A8FA;N # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+A8FB;N # Lo DEVANAGARI HEADSTROKE
+A8FC;N # Po DEVANAGARI SIGN SIDDHAM
+A8FD..A8FE;N # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF;N # Mn DEVANAGARI VOWEL SIGN AY
+A900..A909;N # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925;N # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D;N # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A92E..A92F;N # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+A930..A946;N # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951;N # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953;N # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A95F;N # Po REJANG SECTION MARK
+A960..A97C;W # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982;N # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983;N # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2;N # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3;N # Mn JAVANESE SIGN CECAK TELU
+A9B4..A9B5;N # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9;N # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB;N # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD;N # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9C0;N # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+A9C1..A9CD;N # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+A9CF;N # Lm JAVANESE PANGRANGKEP
+A9D0..A9D9;N # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9DE..A9DF;N # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+A9E0..A9E4;N # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E5;N # Mn MYANMAR SIGN SHAN SAW
+A9E6;N # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF;N # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9F0..A9F9;N # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+A9FA..A9FE;N # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28;N # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E;N # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30;N # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32;N # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34;N # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36;N # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42;N # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43;N # Mn CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B;N # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C;N # Mn CHAM CONSONANT SIGN FINAL M
+AA4D;N # Mc CHAM CONSONANT SIGN FINAL H
+AA50..AA59;N # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA5C..AA5F;N # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+AA60..AA6F;N # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70;N # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76;N # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA77..AA79;N # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AA7A;N # Lo MYANMAR LETTER AITON RA
+AA7B;N # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C;N # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D;N # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AA7F;N # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
+AA80..AAAF;N # Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0;N # Mn TAI VIET MAI KANG
+AAB1;N # Lo TAI VIET VOWEL AA
+AAB2..AAB4;N # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6;N # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8;N # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD;N # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF;N # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0;N # Lo TAI VIET TONE MAI NUENG
+AAC1;N # Mn TAI VIET TONE MAI THO
+AAC2;N # Lo TAI VIET TONE MAI SONG
+AADB..AADC;N # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD;N # Lm TAI VIET SYMBOL SAM
+AADE..AADF;N # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+AAE0..AAEA;N # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB;N # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED;N # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF;N # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF0..AAF1;N # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+AAF2;N # Lo MEETEI MAYEK ANJI
+AAF3..AAF4;N # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5;N # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AAF6;N # Mn MEETEI MAYEK VIRAMA
+AB01..AB06;N # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E;N # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16;N # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26;N # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E;N # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A;N # Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5B;N # Sk MODIFIER BREVE WITH INVERTED BREVE
+AB5C..AB5F;N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB67;N # Ll [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB70..ABBF;N # Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2;N # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4;N # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5;N # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7;N # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8;N # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA;N # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEB;N # Po MEETEI MAYEK CHEIKHEI
+ABEC;N # Mc MEETEI MAYEK LUM IYEK
+ABED;N # Mn MEETEI MAYEK APUN IYEK
+ABF0..ABF9;N # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3;W # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6;N # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB;N # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+D800..DB7F;N # Cs [896] <surrogate-D800>..<surrogate-DB7F>
+DB80..DBFF;N # Cs [128] <surrogate-DB80>..<surrogate-DBFF>
+DC00..DFFF;N # Cs [1024] <surrogate-DC00>..<surrogate-DFFF>
+E000..F8FF;A # Co [6400] <private-use-E000>..<private-use-F8FF>
+F900..FA6D;W # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA6E..FA6F;W # Cn [2] <reserved-FA6E>..<reserved-FA6F>
+FA70..FAD9;W # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FADA..FAFF;W # Cn [38] <reserved-FADA>..<reserved-FAFF>
+FB00..FB06;N # Ll [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17;N # Ll [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D;N # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E;N # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28;N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29;N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36;N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C;N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E;N # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41;N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44;N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F;N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+FB50..FBB1;N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBB2..FBC1;N # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
+FBD3..FD3D;N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E;N # Pe ORNATE LEFT PARENTHESIS
+FD3F;N # Ps ORNATE RIGHT PARENTHESIS
+FD50..FD8F;N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7;N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB;N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC;N # Sc RIAL SIGN
+FDFD;N # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE00..FE0F;A # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE10..FE16;W # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;W # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE20..FE2F;N # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FE30;W # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32;W # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34;W # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35;W # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37;W # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39;W # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B;W # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D;W # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F;W # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41;W # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43;W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46;W # Po [2] SESAME DOT..WHITE SESAME DOT
+FE47;W # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C;W # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F;W # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52;W # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57;W # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58;W # Pd SMALL EM DASH
+FE59;W # Ps SMALL LEFT PARENTHESIS
+FE5A;W # Pe SMALL RIGHT PARENTHESIS
+FE5B;W # Ps SMALL LEFT CURLY BRACKET
+FE5C;W # Pe SMALL RIGHT CURLY BRACKET
+FE5D;W # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E;W # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61;W # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62;W # Sm SMALL PLUS SIGN
+FE63;W # Pd SMALL HYPHEN-MINUS
+FE64..FE66;W # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68;W # Po SMALL REVERSE SOLIDUS
+FE69;W # Sc SMALL DOLLAR SIGN
+FE6A..FE6B;W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FE70..FE74;N # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC;N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF;N # Cf ZERO WIDTH NO-BREAK SPACE
+FF01..FF03;F # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04;F # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07;F # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08;F # Ps FULLWIDTH LEFT PARENTHESIS
+FF09;F # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A;F # Po FULLWIDTH ASTERISK
+FF0B;F # Sm FULLWIDTH PLUS SIGN
+FF0C;F # Po FULLWIDTH COMMA
+FF0D;F # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F;F # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19;F # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B;F # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E;F # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20;F # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A;F # Lu [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B;F # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C;F # Po FULLWIDTH REVERSE SOLIDUS
+FF3D;F # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E;F # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F;F # Pc FULLWIDTH LOW LINE
+FF40;F # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A;F # Ll [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B;F # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C;F # Sm FULLWIDTH VERTICAL LINE
+FF5D;F # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E;F # Sm FULLWIDTH TILDE
+FF5F;F # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60;F # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61;H # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62;H # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63;H # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65;H # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F;H # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70;H # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D;H # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F;H # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE;H # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7;H # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF;H # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7;H # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC;H # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE1;F # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2;F # Sm FULLWIDTH NOT SIGN
+FFE3;F # Sk FULLWIDTH MACRON
+FFE4;F # So FULLWIDTH BROKEN BAR
+FFE5..FFE6;F # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8;H # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC;H # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE;H # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF9..FFFB;N # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC;N # So OBJECT REPLACEMENT CHARACTER
+FFFD;A # So REPLACEMENT CHARACTER
+10000..1000B;N # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026;N # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A;N # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D;N # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D;N # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D;N # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA;N # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10100..10102;N # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+10107..10133;N # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F;N # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10140..10174;N # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178;N # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189;N # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A..1018B;N # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
+1018C..1018E;N # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
+10190..1019B;N # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+101A0;N # So GREEK SYMBOL TAU RHO
+101D0..101FC;N # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+101FD;N # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280..1029C;N # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0;N # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+102E0;N # Mn COPTIC EPACT THOUSANDS MARK
+102E1..102FB;N # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+10300..1031F;N # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+10320..10323;N # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1032D..1032F;N # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
+10330..10340;N # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341;N # Nl GOTHIC LETTER NINETY
+10342..10349;N # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A;N # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375;N # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10376..1037A;N # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10380..1039D;N # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F;N # Po UGARITIC WORD DIVIDER
+103A0..103C3;N # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF;N # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0;N # Po OLD PERSIAN WORD DIVIDER
+103D1..103D5;N # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F;N # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1047F;N # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
+10480..1049D;N # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
+104A0..104A9;N # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+104B0..104D3;N # Lu [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB;N # Ll [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527;N # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563;N # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+1056F;N # Po CAUCASIAN ALBANIAN CITATION MARK
+10600..10736;N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755;N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767;N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10800..10805;N # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808;N # Lo CYPRIOT SYLLABLE JO
+1080A..10835;N # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838;N # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C;N # Lo CYPRIOT SYLLABLE ZA
+1083F;N # Lo CYPRIOT SYLLABLE ZO
+10840..10855;N # Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
+10857;N # Po IMPERIAL ARAMAIC SECTION SIGN
+10858..1085F;N # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10860..10876;N # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10877..10878;N # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
+10879..1087F;N # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
+10880..1089E;N # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108A7..108AF;N # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+108E0..108F2;N # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5;N # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+108FB..108FF;N # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+10900..10915;N # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10916..1091B;N # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+1091F;N # Po PHOENICIAN WORD SEPARATOR
+10920..10939;N # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+1093F;N # Po LYDIAN TRIANGULAR MARK
+10980..1099F;N # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
+109A0..109B7;N # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+109BC..109BD;N # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+109BE..109BF;N # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+109C0..109CF;N # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF;N # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+10A00;N # Lo KHAROSHTHI LETTER A
+10A01..10A03;N # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06;N # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F;N # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13;N # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17;N # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35;N # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A38..10A3A;N # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F;N # Mn KHAROSHTHI VIRAMA
+10A40..10A48;N # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
+10A50..10A58;N # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+10A60..10A7C;N # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A7D..10A7E;N # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F;N # Po OLD SOUTH ARABIAN NUMERIC INDICATOR
+10A80..10A9C;N # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10A9D..10A9F;N # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+10AC0..10AC7;N # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC8;N # So MANICHAEAN SIGN UD
+10AC9..10AE4;N # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10AE5..10AE6;N # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10AEB..10AEF;N # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
+10AF0..10AF6;N # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
+10B00..10B35;N # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B39..10B3F;N # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B40..10B55;N # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58..10B5F;N # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B60..10B72;N # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78..10B7F;N # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10B80..10B91;N # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10B99..10B9C;N # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10BA9..10BAF;N # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+10C00..10C48;N # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2;N # Lu [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2;N # Ll [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10CFA..10CFF;N # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+10D00..10D23;N # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27;N # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39;N # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E60..10E7E;N # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10F00..10F1C;N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F1D..10F26;N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F27;N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45;N # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50;N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F51..10F54;N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10F55..10F59;N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FE0..10FF6;N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000;N # Mc BRAHMI SIGN CANDRABINDU
+11001;N # Mn BRAHMI SIGN ANUSVARA
+11002;N # Mc BRAHMI SIGN VISARGA
+11003..11037;N # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11038..11046;N # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11047..1104D;N # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+11052..11065;N # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+11066..1106F;N # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+1107F;N # Mn BRAHMI NUMBER JOINER
+11080..11081;N # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+11082;N # Mc KAITHI SIGN VISARGA
+11083..110AF;N # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2;N # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6;N # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8;N # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA;N # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110BB..110BC;N # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BD;N # Cf KAITHI NUMBER SIGN
+110BE..110C1;N # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+110CD;N # Cf KAITHI NUMBER SIGN ABOVE
+110D0..110E8;N # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9;N # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+11100..11102;N # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126;N # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B;N # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C;N # Mc CHAKMA VOWEL SIGN E
+1112D..11134;N # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11136..1113F;N # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11140..11143;N # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+11144;N # Lo CHAKMA LETTER LHAA
+11145..11146;N # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11150..11172;N # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11173;N # Mn MAHAJANI SIGN NUKTA
+11174..11175;N # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
+11176;N # Lo MAHAJANI LIGATURE SHRI
+11180..11181;N # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182;N # Mc SHARADA SIGN VISARGA
+11183..111B2;N # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5;N # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE;N # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF..111C0;N # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4;N # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C5..111C8;N # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111C9..111CC;N # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CD;N # Po SHARADA SUTRA MARK
+111D0..111D9;N # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA;N # Lo SHARADA EKAM
+111DB;N # Po SHARADA SIGN SIDDHAM
+111DC;N # Lo SHARADA HEADSTROKE
+111DD..111DF;N # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+111E1..111F4;N # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+11200..11211;N # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B;N # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E;N # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231;N # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233;N # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234;N # Mn KHOJKI SIGN ANUSVARA
+11235;N # Mc KHOJKI SIGN VIRAMA
+11236..11237;N # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+11238..1123D;N # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+1123E;N # Mn KHOJKI SIGN SUKUN
+11280..11286;N # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288;N # Lo MULTANI LETTER GHA
+1128A..1128D;N # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D;N # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8;N # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112A9;N # Po MULTANI SECTION MARK
+112B0..112DE;N # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112DF;N # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2;N # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112EA;N # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+112F0..112F9;N # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11300..11301;N # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303;N # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C;N # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310;N # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328;N # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330;N # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333;N # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339;N # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133B..1133C;N # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+1133D;N # Lo GRANTHA SIGN AVAGRAHA
+1133E..1133F;N # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340;N # Mn GRANTHA VOWEL SIGN II
+11341..11344;N # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348;N # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D;N # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350;N # Lo GRANTHA OM
+11357;N # Mc GRANTHA AU LENGTH MARK
+1135D..11361;N # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363;N # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11366..1136C;N # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374;N # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11400..11434;N # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437;N # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F;N # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441;N # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444;N # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445;N # Mc NEWA SIGN VISARGA
+11446;N # Mn NEWA SIGN NUKTA
+11447..1144A;N # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1144B..1144F;N # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+11450..11459;N # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145B;N # Po NEWA PLACEHOLDER MARK
+1145D;N # Po NEWA INSERTION SIGN
+1145E;N # Mn NEWA SANDHI MARK
+1145F;N # Lo NEWA LETTER VEDIC ANUSVARA
+11480..114AF;N # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B0..114B2;N # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8;N # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9;N # Mc TIRHUTA VOWEL SIGN E
+114BA;N # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE;N # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0;N # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1;N # Mc TIRHUTA SIGN VISARGA
+114C2..114C3;N # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+114C4..114C5;N # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C6;N # Po TIRHUTA ABBREVIATION SIGN
+114C7;N # Lo TIRHUTA OM
+114D0..114D9;N # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+11580..115AE;N # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115AF..115B1;N # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5;N # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB;N # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD;N # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE;N # Mc SIDDHAM SIGN VISARGA
+115BF..115C0;N # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115C1..115D7;N # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+115D8..115DB;N # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD;N # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11600..1162F;N # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632;N # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A;N # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C;N # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D;N # Mn MODI SIGN ANUSVARA
+1163E;N # Mc MODI SIGN VISARGA
+1163F..11640;N # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+11641..11643;N # Po [3] MODI DANDA..MODI ABBREVIATION SIGN
+11644;N # Lo MODI SIGN HUVA
+11650..11659;N # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11660..1166C;N # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+11680..116AA;N # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB;N # Mn TAKRI SIGN ANUSVARA
+116AC;N # Mc TAKRI SIGN VISARGA
+116AD;N # Mn TAKRI VOWEL SIGN AA
+116AE..116AF;N # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5;N # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B6;N # Mc TAKRI SIGN VIRAMA
+116B7;N # Mn TAKRI SIGN NUKTA
+116B8;N # Lo TAKRI LETTER ARCHAIC KHA
+116C0..116C9;N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+11700..1171A;N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+1171D..1171F;N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721;N # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725;N # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726;N # Mc AHOM VOWEL SIGN E
+11727..1172B;N # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739;N # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+1173A..1173B;N # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+1173C..1173E;N # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+1173F;N # So AHOM SYMBOL VI
+11800..1182B;N # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E;N # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837;N # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838;N # Mc DOGRA SIGN VISARGA
+11839..1183A;N # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1183B;N # Po DOGRA ABBREVIATION SIGN
+118A0..118DF;N # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118E0..118E9;N # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+118EA..118F2;N # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+118FF;N # Lo WARANG CITI OM
+119A0..119A7;N # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0;N # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3;N # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7;N # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB;N # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF;N # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E0;N # Mn NANDINAGARI SIGN VIRAMA
+119E1;N # Lo NANDINAGARI SIGN AVAGRAHA
+119E2;N # Po NANDINAGARI SIGN SIDDHAM
+119E3;N # Lo NANDINAGARI HEADSTROKE
+119E4;N # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00;N # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A0A;N # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32;N # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38;N # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39;N # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A;N # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E;N # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A3F..11A46;N # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A47;N # Mn ZANABAZAR SQUARE SUBJOINER
+11A50;N # Lo SOYOMBO LETTER A
+11A51..11A56;N # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58;N # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B;N # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A89;N # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96;N # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97;N # Mc SOYOMBO SIGN VISARGA
+11A98..11A99;N # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9A..11A9C;N # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9D;N # Lo SOYOMBO MARK PLUTA
+11A9E..11AA2;N # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+11AC0..11AF8;N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08;N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E;N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F;N # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36;N # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D;N # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E;N # Mc BHAIKSUKI SIGN VISARGA
+11C3F;N # Mn BHAIKSUKI SIGN VIRAMA
+11C40;N # Lo BHAIKSUKI SIGN AVAGRAHA
+11C41..11C45;N # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C50..11C59;N # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C5A..11C6C;N # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+11C70..11C71;N # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+11C72..11C8F;N # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7;N # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9;N # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0;N # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1;N # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3;N # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4;N # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6;N # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D00..11D06;N # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09;N # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30;N # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36;N # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A;N # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D;N # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45;N # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46;N # Lo MASARAM GONDI REPHA
+11D47;N # Mn MASARAM GONDI RA-KARA
+11D50..11D59;N # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+11D60..11D65;N # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68;N # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89;N # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E;N # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91;N # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94;N # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95;N # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96;N # Mc GUNJALA GONDI SIGN VISARGA
+11D97;N # Mn GUNJALA GONDI VIRAMA
+11D98;N # Lo GUNJALA GONDI OM
+11DA0..11DA9;N # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+11EE0..11EF2;N # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4;N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6;N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11EF7..11EF8;N # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FC0..11FD4;N # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+11FD5..11FDC;N # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
+11FDD..11FE0;N # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
+11FE1..11FF1;N # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
+11FFF;N # Po TAMIL PUNCTUATION END OF TEXT
+12000..12399;N # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E;N # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12470..12474;N # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+12480..12543;N # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+13000..1342E;N # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+13430..13438;N # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
+14400..14646;N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38;N # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E;N # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69;N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
+16A6E..16A6F;N # Po [2] MRO DANDA..MRO DOUBLE DANDA
+16AD0..16AED;N # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF0..16AF4;N # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16AF5;N # Po BASSA VAH FULL STOP
+16B00..16B2F;N # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B30..16B36;N # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16B37..16B3B;N # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
+16B3C..16B3F;N # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
+16B40..16B43;N # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B44;N # Po PAHAWH HMONG SIGN XAUS
+16B45;N # So PAHAWH HMONG SIGN CIM TSOV ROG
+16B50..16B59;N # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B5B..16B61;N # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+16B63..16B77;N # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F;N # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F;N # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16E80..16E96;N # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+16E97..16E9A;N # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+16F00..16F4A;N # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F4F;N # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F50;N # Lo MIAO LETTER NASALIZATION
+16F51..16F87;N # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92;N # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F;N # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1;W # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE2;W # Po OLD CHINESE HOOK MARK
+16FE3;W # Lm OLD CHINESE ITERATION MARK
+17000..187F7;W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18AF2;W # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+1B000..1B0FF;W # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
+1B100..1B11E;W # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
+1B150..1B152;W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167;W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB;W # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A;N # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C;N # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88;N # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99;N # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9C;N # So DUPLOYAN SIGN O WITH CROSS
+1BC9D..1BC9E;N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1BC9F;N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1BCA0..1BCA3;N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D000..1D0F5;N # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126;N # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129..1D164;N # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165..1D166;N # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167..1D169;N # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A..1D16C;N # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D..1D172;N # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D173..1D17A;N # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D17B..1D182;N # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D183..1D184;N # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185..1D18B;N # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C..1D1A9;N # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AA..1D1AD;N # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE..1D1E8;N # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D200..1D241;N # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242..1D244;N # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D245;N # So GREEK MUSICAL LEIMMA
+1D2E0..1D2F3;N # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+1D300..1D356;N # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D360..1D378;N # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
+1D400..1D454;N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C;N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F;N # Lu [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2;N # Lu MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6;N # Lu [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC;N # Lu [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9;N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB;N # Ll MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3;N # Ll [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505;N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A;N # Lu [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514;N # Lu [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C;N # Lu [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539;N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E;N # Lu [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544;N # Lu [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546;N # Lu MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550;N # Lu [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5;N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0;N # Lu [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1;N # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA;N # Ll [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB;N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA;N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB;N # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714;N # Ll [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715;N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734;N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735;N # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E;N # Ll [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F;N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E;N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F;N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788;N # Ll [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789;N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8;N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9;N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2;N # Ll [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3;N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB;N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF;N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1D800..1D9FF;N # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA00..1DA36;N # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA37..1DA3A;N # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA3B..1DA6C;N # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA6D..1DA74;N # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA75;N # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA76..1DA83;N # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA84;N # Mn SIGNWRITING LOCATION HEAD NECK
+1DA85..1DA86;N # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+1DA87..1DA8B;N # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+1DA9B..1DA9F;N # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF;N # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006;N # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018;N # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021;N # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024;N # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A;N # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E100..1E12C;N # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E130..1E136;N # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E137..1E13D;N # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149;N # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E;N # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E14F;N # So NYIAKENG PUACHUE HMONG CIRCLED CA
+1E2C0..1E2EB;N # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E2EC..1E2EF;N # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E2F0..1E2F9;N # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+1E2FF;N # Sc WANCHO NGUN SIGN
+1E800..1E8C4;N # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8C7..1E8CF;N # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+1E8D0..1E8D6;N # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E900..1E943;N # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A;N # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E94B;N # Lm ADLAM NASALIZATION MARK
+1E950..1E959;N # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F;N # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+1EC71..1ECAB;N # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+1ECAC;N # So INDIC SIYAQ PLACEHOLDER
+1ECAD..1ECAF;N # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB0;N # Sc INDIC SIYAQ RUPEE MARK
+1ECB1..1ECB4;N # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+1ED01..1ED2D;N # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+1ED2E;N # So OTTOMAN SIYAQ MARRATAN
+1ED2F..1ED3D;N # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
+1EE00..1EE03;N # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F;N # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22;N # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24;N # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27;N # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32;N # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37;N # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39;N # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B;N # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42;N # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47;N # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49;N # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B;N # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F;N # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52;N # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54;N # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57;N # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59;N # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B;N # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D;N # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F;N # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62;N # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64;N # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A;N # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72;N # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77;N # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C;N # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E;N # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89;N # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B;N # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3;N # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9;N # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB;N # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1EEF0..1EEF1;N # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+1F000..1F003;N # So [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
+1F004;W # So MAHJONG TILE RED DRAGON
+1F005..1F02B;N # So [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK
+1F030..1F093;N # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F0A0..1F0AE;N # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0B1..1F0BF;N # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+1F0C1..1F0CE;N # So [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS
+1F0CF;W # So PLAYING CARD BLACK JOKER
+1F0D1..1F0F5;N # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+1F100..1F10A;A # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F10B..1F10C;N # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F110..1F12D;A # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
+1F12E..1F12F;N # So [2] CIRCLED WZ..COPYLEFT SYMBOL
+1F130..1F169;A # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F16A..1F16C;N # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F170..1F18D;A # So [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA
+1F18E;W # So NEGATIVE SQUARED AB
+1F18F..1F190;A # So [2] NEGATIVE SQUARED WC..SQUARE DJ
+1F191..1F19A;W # So [10] SQUARED CL..SQUARED VS
+1F19B..1F1AC;A # So [18] SQUARED THREE D..SQUARED VOD
+1F1E6..1F1FF;N # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+1F200..1F202;W # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
+1F210..1F23B;W # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248;W # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251;W # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1F260..1F265;W # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F300..1F320;W # So [33] CYCLONE..SHOOTING STAR
+1F321..1F32C;N # So [12] THERMOMETER..WIND BLOWING FACE
+1F32D..1F335;W # So [9] HOT DOG..CACTUS
+1F336;N # So HOT PEPPER
+1F337..1F37C;W # So [70] TULIP..BABY BOTTLE
+1F37D;N # So FORK AND KNIFE WITH PLATE
+1F37E..1F393;W # So [22] BOTTLE WITH POPPING CORK..GRADUATION CAP
+1F394..1F39F;N # So [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS
+1F3A0..1F3CA;W # So [43] CAROUSEL HORSE..SWIMMER
+1F3CB..1F3CE;N # So [4] WEIGHT LIFTER..RACING CAR
+1F3CF..1F3D3;W # So [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL
+1F3D4..1F3DF;N # So [12] SNOW CAPPED MOUNTAIN..STADIUM
+1F3E0..1F3F0;W # So [17] HOUSE BUILDING..EUROPEAN CASTLE
+1F3F1..1F3F3;N # So [3] WHITE PENNANT..WAVING WHITE FLAG
+1F3F4;W # So WAVING BLACK FLAG
+1F3F5..1F3F7;N # So [3] ROSETTE..LABEL
+1F3F8..1F3FA;W # So [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA
+1F3FB..1F3FF;W # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F43E;W # So [63] RAT..PAW PRINTS
+1F43F;N # So CHIPMUNK
+1F440;W # So EYES
+1F441;N # So EYE
+1F442..1F4FC;W # So [187] EAR..VIDEOCASSETTE
+1F4FD..1F4FE;N # So [2] FILM PROJECTOR..PORTABLE STEREO
+1F4FF..1F53D;W # So [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE
+1F53E..1F54A;N # So [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE
+1F54B..1F54E;W # So [4] KAABA..MENORAH WITH NINE BRANCHES
+1F54F;N # So BOWL OF HYGIEIA
+1F550..1F567;W # So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
+1F568..1F579;N # So [18] RIGHT SPEAKER..JOYSTICK
+1F57A;W # So MAN DANCING
+1F57B..1F594;N # So [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND
+1F595..1F596;W # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+1F597..1F5A3;N # So [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
+1F5A4;W # So BLACK HEART
+1F5A5..1F5FA;N # So [86] DESKTOP COMPUTER..WORLD MAP
+1F5FB..1F5FF;W # So [5] MOUNT FUJI..MOYAI
+1F600..1F64F;W # So [80] GRINNING FACE..PERSON WITH FOLDED HANDS
+1F650..1F67F;N # So [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD
+1F680..1F6C5;W # So [70] ROCKET..LEFT LUGGAGE
+1F6C6..1F6CB;N # So [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP
+1F6CC;W # So SLEEPING ACCOMMODATION
+1F6CD..1F6CF;N # So [3] SHOPPING BAGS..BED
+1F6D0..1F6D2;W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY
+1F6D3..1F6D4;N # So [2] STUPA..PAGODA
+1F6D5;W # So HINDU TEMPLE
+1F6E0..1F6EA;N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE
+1F6EB..1F6EC;W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
+1F6F0..1F6F3;N # So [4] SATELLITE..PASSENGER SHIP
+1F6F4..1F6FA;W # So [7] SCOOTER..AUTO RICKSHAW
+1F700..1F773;N # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F780..1F7D8;N # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
+1F7E0..1F7EB;W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+1F800..1F80B;N # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F810..1F847;N # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+1F850..1F859;N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+1F860..1F887;N # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F890..1F8AD;N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F900..1F90B;N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F90D..1F971;W # So [101] WHITE HEART..YAWNING FACE
+1F973..1F976;W # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
+1F97A..1F9A2;W # So [41] FACE WITH PLEADING EYES..SWAN
+1F9A5..1F9AA;W # So [6] SLOTH..OYSTER
+1F9AE..1F9CA;W # So [29] GUIDE DOG..ICE CUBE
+1F9CD..1F9FF;W # So [51] STANDING PERSON..NAZAR AMULET
+1FA00..1FA53;N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
+1FA60..1FA6D;N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FA70..1FA73;W # So [4] BALLET SHOES..SHORTS
+1FA78..1FA7A;W # So [3] DROP OF BLOOD..STETHOSCOPE
+1FA80..1FA82;W # So [3] YO-YO..PARACHUTE
+1FA90..1FA95;W # So [6] RINGED PLANET..BANJO
+20000..2A6D6;W # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A6D7..2A6FF;W # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
+2A700..2B734;W # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B735..2B73F;W # Cn [11] <reserved-2B735>..<reserved-2B73F>
+2B740..2B81D;W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B81E..2B81F;W # Cn [2] <reserved-2B81E>..<reserved-2B81F>
+2B820..2CEA1;W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEA2..2CEAF;W # Cn [14] <reserved-2CEA2>..<reserved-2CEAF>
+2CEB0..2EBE0;W # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2EBE1..2F7FF;W # Cn [3103] <reserved-2EBE1>..<reserved-2F7FF>
+2F800..2FA1D;W # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+2FA1E..2FA1F;W # Cn [2] <reserved-2FA1E>..<reserved-2FA1F>
+2FA20..2FFFD;W # Cn [1502] <reserved-2FA20>..<reserved-2FFFD>
+30000..3FFFD;W # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+E0001;N # Cf LANGUAGE TAG
+E0020..E007F;N # Cf [96] TAG SPACE..CANCEL TAG
+E0100..E01EF;A # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+F0000..FFFFD;A # Co [65534] <private-use-F0000>..<private-use-FFFFD>
+100000..10FFFD;A # Co [65534] <private-use-100000>..<private-use-10FFFD>
+
+# EOF
diff --git a/macros/generic/unicode-data/LineBreak.txt b/macros/generic/unicode-data/LineBreak.txt
new file mode 100644
index 0000000000..9728582ab1
--- /dev/null
+++ b/macros/generic/unicode-data/LineBreak.txt
@@ -0,0 +1,3439 @@
+# LineBreak-12.1.0.txt
+# Date: 2019-03-31, 22:04:15 GMT [KW, LI]
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Line_Break Property
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# The format is two fields separated by a semicolon.
+# Field 0: Unicode code point value or range of code point values
+# Field 1: Line_Break property, consisting of one of the following values:
+# Non-tailorable:
+# "BK", "CM", "CR", "GL", "LF", "NL", "SP", "WJ", "ZW", "ZWJ"
+# Tailorable:
+# "AI", "AL", "B2", "BA", "BB", "CB", "CJ", "CL", "CP", "EB",
+# "EM", "EX", "H2", "H3", "HL", "HY", "ID", "IN", "IS", "JL",
+# "JT", "JV", "NS", "NU", "OP", "PO", "PR", "QU", "RI", "SA",
+# "SG", "SY", "XX"
+# - All code points, assigned and unassigned, that are not listed
+# explicitly are given the value "XX".
+# - The unassigned code points in the following blocks default to "ID":
+# CJK Unified Ideographs Extension A: U+3400..U+4DBF
+# CJK Unified Ideographs: U+4E00..U+9FFF
+# CJK Compatibility Ideographs: U+F900..U+FAFF
+# - All undesignated code points in Planes 2 and 3, whether inside or
+# outside of allocated blocks, default to "ID":
+# Plane 2: U+20000..U+2FFFD
+# Plane 3: U+30000..U+3FFFD
+# - All unassigned code points in the following Plane 1 range, whether
+# inside or outside of allocated blocks, also default to "ID":
+# Plane 1 range: U+1F000..U+1FFFD
+# - The unassigned code points in the following block default to "PR":
+# Currency Symbols: U+20A0..U+20CF
+#
+# Character ranges are specified as for other property files in the
+# Unicode Character Database.
+#
+# For legacy reasons, there are no spaces before or after the semicolon
+# which separates the two fields. The comments following the number sign
+# "#" list the General_Category property value or the L& alias of the
+# derived value LC, the Unicode character name or names, and, in lines
+# with ranges of code points, the code point count in square brackets.
+#
+# For more information, see UAX #14: Unicode Line Breaking Algorithm,
+# at http://www.unicode.org/reports/tr14/
+#
+# @missing: 0000..10FFFF; XX
+0000..0008;CM # Cc [9] <control-0000>..<control-0008>
+0009;BA # Cc <control-0009>
+000A;LF # Cc <control-000A>
+000B..000C;BK # Cc [2] <control-000B>..<control-000C>
+000D;CR # Cc <control-000D>
+000E..001F;CM # Cc [18] <control-000E>..<control-001F>
+0020;SP # Zs SPACE
+0021;EX # Po EXCLAMATION MARK
+0022;QU # Po QUOTATION MARK
+0023;AL # Po NUMBER SIGN
+0024;PR # Sc DOLLAR SIGN
+0025;PO # Po PERCENT SIGN
+0026;AL # Po AMPERSAND
+0027;QU # Po APOSTROPHE
+0028;OP # Ps LEFT PARENTHESIS
+0029;CP # Pe RIGHT PARENTHESIS
+002A;AL # Po ASTERISK
+002B;PR # Sm PLUS SIGN
+002C;IS # Po COMMA
+002D;HY # Pd HYPHEN-MINUS
+002E;IS # Po FULL STOP
+002F;SY # Po SOLIDUS
+0030..0039;NU # Nd [10] DIGIT ZERO..DIGIT NINE
+003A..003B;IS # Po [2] COLON..SEMICOLON
+003C..003E;AL # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F;EX # Po QUESTION MARK
+0040;AL # Po COMMERCIAL AT
+0041..005A;AL # Lu [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005B;OP # Ps LEFT SQUARE BRACKET
+005C;PR # Po REVERSE SOLIDUS
+005D;CP # Pe RIGHT SQUARE BRACKET
+005E;AL # Sk CIRCUMFLEX ACCENT
+005F;AL # Pc LOW LINE
+0060;AL # Sk GRAVE ACCENT
+0061..007A;AL # Ll [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+007B;OP # Ps LEFT CURLY BRACKET
+007C;BA # Sm VERTICAL LINE
+007D;CL # Pe RIGHT CURLY BRACKET
+007E;AL # Sm TILDE
+007F;CM # Cc <control-007F>
+0080..0084;CM # Cc [5] <control-0080>..<control-0084>
+0085;NL # Cc <control-0085>
+0086..009F;CM # Cc [26] <control-0086>..<control-009F>
+00A0;GL # Zs NO-BREAK SPACE
+00A1;OP # Po INVERTED EXCLAMATION MARK
+00A2;PO # Sc CENT SIGN
+00A3..00A5;PR # Sc [3] POUND SIGN..YEN SIGN
+00A6;AL # So BROKEN BAR
+00A7;AI # Po SECTION SIGN
+00A8;AI # Sk DIAERESIS
+00A9;AL # So COPYRIGHT SIGN
+00AA;AI # Lo FEMININE ORDINAL INDICATOR
+00AB;QU # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC;AL # Sm NOT SIGN
+00AD;BA # Cf SOFT HYPHEN
+00AE;AL # So REGISTERED SIGN
+00AF;AL # Sk MACRON
+00B0;PO # So DEGREE SIGN
+00B1;PR # Sm PLUS-MINUS SIGN
+00B2..00B3;AI # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4;BB # Sk ACUTE ACCENT
+00B5;AL # Ll MICRO SIGN
+00B6..00B7;AI # Po [2] PILCROW SIGN..MIDDLE DOT
+00B8;AI # Sk CEDILLA
+00B9;AI # No SUPERSCRIPT ONE
+00BA;AI # Lo MASCULINE ORDINAL INDICATOR
+00BB;QU # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE;AI # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF;OP # Po INVERTED QUESTION MARK
+00C0..00D6;AL # Lu [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7;AI # Sm MULTIPLICATION SIGN
+00D8..00F6;AL # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F7;AI # Sm DIVISION SIGN
+00F8..00FF;AL # Ll [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0100..017F;AL # L& [128] LATIN CAPITAL LETTER A WITH MACRON..LATIN SMALL LETTER LONG S
+0180..01BA;AL # L& [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB;AL # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF;AL # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3;AL # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..024F;AL # L& [140] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER Y WITH STROKE
+0250..0293;AL # Ll [68] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER EZH WITH CURL
+0294;AL # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF;AL # Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1;AL # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5;AL # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6;AL # Lm MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7;AI # Lm CARON
+02C8;BB # Lm MODIFIER LETTER VERTICAL LINE
+02C9..02CB;AI # Lm [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
+02CC;BB # Lm MODIFIER LETTER LOW VERTICAL LINE
+02CD;AI # Lm MODIFIER LETTER LOW MACRON
+02CE..02CF;AL # Lm [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
+02D0;AI # Lm MODIFIER LETTER TRIANGULAR COLON
+02D1;AL # Lm MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02D7;AL # Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
+02D8..02DB;AI # Sk [4] BREVE..OGONEK
+02DC;AL # Sk SMALL TILDE
+02DD;AI # Sk DOUBLE ACUTE ACCENT
+02DE;AL # Sk MODIFIER LETTER RHOTIC HOOK
+02DF;BB # Sk MODIFIER LETTER CROSS ACCENT
+02E0..02E4;AL # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB;AL # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC;AL # Lm MODIFIER LETTER VOICING
+02ED;AL # Sk MODIFIER LETTER UNASPIRATED
+02EE;AL # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF;AL # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..034E;CM # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW
+034F;GL # Mn COMBINING GRAPHEME JOINER
+0350..035B;CM # Mn [12] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING ZIGZAG ABOVE
+035C..0362;GL # Mn [7] COMBINING DOUBLE BREVE BELOW..COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0363..036F;CM # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X
+0370..0373;AL # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374;AL # Lm GREEK NUMERAL SIGN
+0375;AL # Sk GREEK LOWER NUMERAL SIGN
+0376..0377;AL # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A;AL # Lm GREEK YPOGEGRAMMENI
+037B..037D;AL # Ll [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037E;IS # Po GREEK QUESTION MARK
+037F;AL # Lu GREEK CAPITAL LETTER YOT
+0384..0385;AL # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386;AL # Lu GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387;AL # Po GREEK ANO TELEIA
+0388..038A;AL # Lu [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C;AL # Lu GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1;AL # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5;AL # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F6;AL # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..03FF;AL # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400..0481;AL # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA
+0482;AL # So CYRILLIC THOUSANDS SIGN
+0483..0487;CM # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489;CM # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+048A..04FF;AL # L& [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE
+0500..052F;AL # L& [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556;AL # Lu [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559;AL # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F;AL # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0560..0588;AL # Ll [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+0589;IS # Po ARMENIAN FULL STOP
+058A;BA # Pd ARMENIAN HYPHEN
+058D..058E;AL # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+058F;PR # Sc ARMENIAN DRAM SIGN
+0591..05BD;CM # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BE;BA # Pd HEBREW PUNCTUATION MAQAF
+05BF;CM # Mn HEBREW POINT RAFE
+05C0;AL # Po HEBREW PUNCTUATION PASEQ
+05C1..05C2;CM # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C3;AL # Po HEBREW PUNCTUATION SOF PASUQ
+05C4..05C5;CM # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C6;EX # Po HEBREW PUNCTUATION NUN HAFUKHA
+05C7;CM # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA;HL # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2;HL # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4;AL # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+0600..0605;AL # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+0606..0608;AL # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+0609..060A;PO # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B;PO # Sc AFGHANI SIGN
+060C..060D;IS # Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR
+060E..060F;AL # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+0610..061A;CM # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+061B;EX # Po ARABIC SEMICOLON
+061C;CM # Cf ARABIC LETTER MARK
+061E..061F;EX # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+0620..063F;AL # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640;AL # Lm ARABIC TATWEEL
+0641..064A;AL # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..065F;CM # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0660..0669;NU # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066A;PO # Po ARABIC PERCENT SIGN
+066B..066C;NU # Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR
+066D;AL # Po ARABIC FIVE POINTED STAR
+066E..066F;AL # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670;CM # Mn ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3;AL # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4;EX # Po ARABIC FULL STOP
+06D5;AL # Lo ARABIC LETTER AE
+06D6..06DC;CM # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DD;AL # Cf ARABIC END OF AYAH
+06DE;AL # So ARABIC START OF RUB EL HIZB
+06DF..06E4;CM # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6;AL # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8;CM # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06E9;AL # So ARABIC PLACE OF SAJDAH
+06EA..06ED;CM # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF;AL # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9;NU # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC;AL # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE;AL # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF;AL # Lo ARABIC LETTER HEH WITH INVERTED V
+0700..070D;AL # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070F;AL # Cf SYRIAC ABBREVIATION MARK
+0710;AL # Lo SYRIAC LETTER ALAPH
+0711;CM # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F;AL # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A;CM # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..074F;AL # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+0750..077F;AL # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+0780..07A5;AL # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+07A6..07B0;CM # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1;AL # Lo THAANA LETTER NAA
+07C0..07C9;NU # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA;AL # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3;CM # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5;AL # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07F6;AL # So NKO SYMBOL OO DENNEN
+07F7;AL # Po NKO SYMBOL GBAKURUNEN
+07F8;IS # Po NKO COMMA
+07F9;EX # Po NKO EXCLAMATION MARK
+07FA;AL # Lm NKO LAJANYALAN
+07FD;CM # Mn NKO DANTAYALAN
+07FE..07FF;PR # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN
+0800..0815;AL # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819;CM # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A;AL # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823;CM # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824;AL # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827;CM # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828;AL # Lm SAMARITAN MODIFIER LETTER I
+0829..082D;CM # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0830..083E;AL # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+0840..0858;AL # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0859..085B;CM # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+085E;AL # Po MANDAIC PUNCTUATION
+0860..086A;AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+08A0..08B4;AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD;AL # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08D3..08E1;CM # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
+08E2;AL # Cf ARABIC DISPUTED END OF AYAH
+08E3..08FF;CM # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
+0900..0902;CM # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903;CM # Mc DEVANAGARI SIGN VISARGA
+0904..0939;AL # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A;CM # Mn DEVANAGARI VOWEL SIGN OE
+093B;CM # Mc DEVANAGARI VOWEL SIGN OOE
+093C;CM # Mn DEVANAGARI SIGN NUKTA
+093D;AL # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940;CM # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948;CM # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C;CM # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D;CM # Mn DEVANAGARI SIGN VIRAMA
+094E..094F;CM # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950;AL # Lo DEVANAGARI OM
+0951..0957;CM # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0958..0961;AL # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963;CM # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0964..0965;BA # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0966..096F;NU # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970;AL # Po DEVANAGARI ABBREVIATION SIGN
+0971;AL # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..097F;AL # Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
+0980;AL # Lo BENGALI ANJI
+0981;CM # Mn BENGALI SIGN CANDRABINDU
+0982..0983;CM # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C;AL # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990;AL # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8;AL # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0;AL # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2;AL # Lo BENGALI LETTER LA
+09B6..09B9;AL # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC;CM # Mn BENGALI SIGN NUKTA
+09BD;AL # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0;CM # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4;CM # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8;CM # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC;CM # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD;CM # Mn BENGALI SIGN VIRAMA
+09CE;AL # Lo BENGALI LETTER KHANDA TA
+09D7;CM # Mc BENGALI AU LENGTH MARK
+09DC..09DD;AL # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1;AL # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3;CM # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF;NU # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1;AL # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3;PO # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F8;AL # No [5] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9;PO # No BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA;AL # So BENGALI ISSHAR
+09FB;PR # Sc BENGALI GANDA MARK
+09FC;AL # Lo BENGALI LETTER VEDIC ANUSVARA
+09FD;AL # Po BENGALI ABBREVIATION SIGN
+09FE;CM # Mn BENGALI SANDHI MARK
+0A01..0A02;CM # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03;CM # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A;AL # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10;AL # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28;AL # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30;AL # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33;AL # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36;AL # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39;AL # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C;CM # Mn GURMUKHI SIGN NUKTA
+0A3E..0A40;CM # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42;CM # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48;CM # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D;CM # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51;CM # Mn GURMUKHI SIGN UDAAT
+0A59..0A5C;AL # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E;AL # Lo GURMUKHI LETTER FA
+0A66..0A6F;NU # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71;CM # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74;AL # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75;CM # Mn GURMUKHI SIGN YAKASH
+0A76;AL # Po GURMUKHI ABBREVIATION SIGN
+0A81..0A82;CM # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83;CM # Mc GUJARATI SIGN VISARGA
+0A85..0A8D;AL # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91;AL # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8;AL # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0;AL # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3;AL # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9;AL # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC;CM # Mn GUJARATI SIGN NUKTA
+0ABD;AL # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0;CM # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5;CM # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8;CM # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9;CM # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC;CM # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD;CM # Mn GUJARATI SIGN VIRAMA
+0AD0;AL # Lo GUJARATI OM
+0AE0..0AE1;AL # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3;CM # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF;NU # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF0;AL # Po GUJARATI ABBREVIATION SIGN
+0AF1;PR # Sc GUJARATI RUPEE SIGN
+0AF9;AL # Lo GUJARATI LETTER ZHA
+0AFA..0AFF;CM # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01;CM # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03;CM # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C;AL # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10;AL # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28;AL # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30;AL # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33;AL # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39;AL # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C;CM # Mn ORIYA SIGN NUKTA
+0B3D;AL # Lo ORIYA SIGN AVAGRAHA
+0B3E;CM # Mc ORIYA VOWEL SIGN AA
+0B3F;CM # Mn ORIYA VOWEL SIGN I
+0B40;CM # Mc ORIYA VOWEL SIGN II
+0B41..0B44;CM # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48;CM # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C;CM # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D;CM # Mn ORIYA SIGN VIRAMA
+0B56;CM # Mn ORIYA AI LENGTH MARK
+0B57;CM # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D;AL # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61;AL # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63;CM # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F;NU # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70;AL # So ORIYA ISSHAR
+0B71;AL # Lo ORIYA LETTER WA
+0B72..0B77;AL # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+0B82;CM # Mn TAMIL SIGN ANUSVARA
+0B83;AL # Lo TAMIL SIGN VISARGA
+0B85..0B8A;AL # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90;AL # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95;AL # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A;AL # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C;AL # Lo TAMIL LETTER JA
+0B9E..0B9F;AL # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4;AL # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA;AL # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9;AL # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF;CM # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0;CM # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2;CM # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8;CM # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC;CM # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD;CM # Mn TAMIL SIGN VIRAMA
+0BD0;AL # Lo TAMIL OM
+0BD7;CM # Mc TAMIL AU LENGTH MARK
+0BE6..0BEF;NU # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2;AL # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8;AL # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9;PR # Sc TAMIL RUPEE SIGN
+0BFA;AL # So TAMIL NUMBER SIGN
+0C00;CM # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03;CM # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04;CM # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C;AL # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10;AL # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28;AL # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39;AL # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D;AL # Lo TELUGU SIGN AVAGRAHA
+0C3E..0C40;CM # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44;CM # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48;CM # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D;CM # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56;CM # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C5A;AL # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C60..0C61;AL # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63;CM # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F;NU # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C77;BB # Po TELUGU SIGN SIDDHAM
+0C78..0C7E;AL # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F;AL # So TELUGU SIGN TUUMU
+0C80;AL # Lo KANNADA SIGN SPACING CANDRABINDU
+0C81;CM # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83;CM # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C84;BB # Po KANNADA SIGN SIDDHAM
+0C85..0C8C;AL # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90;AL # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8;AL # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3;AL # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9;AL # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC;CM # Mn KANNADA SIGN NUKTA
+0CBD;AL # Lo KANNADA SIGN AVAGRAHA
+0CBE;CM # Mc KANNADA VOWEL SIGN AA
+0CBF;CM # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4;CM # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6;CM # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8;CM # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB;CM # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD;CM # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6;CM # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE;AL # Lo KANNADA LETTER FA
+0CE0..0CE1;AL # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3;CM # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF;NU # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2;AL # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00..0D01;CM # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03;CM # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C;AL # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10;AL # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A;AL # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C;CM # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D3D;AL # Lo MALAYALAM SIGN AVAGRAHA
+0D3E..0D40;CM # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44;CM # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48;CM # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C;CM # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D;CM # Mn MALAYALAM SIGN VIRAMA
+0D4E;AL # Lo MALAYALAM LETTER DOT REPH
+0D4F;AL # So MALAYALAM SIGN PARA
+0D54..0D56;AL # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57;CM # Mc MALAYALAM AU LENGTH MARK
+0D58..0D5E;AL # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+0D5F..0D61;AL # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D62..0D63;CM # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F;NU # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D70..0D78;AL # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
+0D79;PO # So MALAYALAM DATE MARK
+0D7A..0D7F;AL # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83;CM # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96;AL # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1;AL # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB;AL # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD;AL # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6;AL # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA;CM # Mn SINHALA SIGN AL-LAKUNA
+0DCF..0DD1;CM # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4;CM # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6;CM # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF;CM # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DE6..0DEF;NU # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+0DF2..0DF3;CM # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4;AL # Po SINHALA PUNCTUATION KUNDDALIYA
+0E01..0E30;SA # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31;SA # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33;SA # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A;SA # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E3F;PR # Sc THAI CURRENCY SYMBOL BAHT
+0E40..0E45;SA # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46;SA # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E;SA # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E4F;AL # Po THAI CHARACTER FONGMAN
+0E50..0E59;NU # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B;BA # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0E81..0E82;SA # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84;SA # Lo LAO LETTER KHO TAM
+0E86..0E8A;SA # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3;SA # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5;SA # Lo LAO LETTER LO LOOT
+0EA7..0EB0;SA # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB1;SA # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3;SA # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EBC;SA # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EBD;SA # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4;SA # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6;SA # Lm LAO KO LA
+0EC8..0ECD;SA # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9;NU # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDF;SA # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00;AL # Lo TIBETAN SYLLABLE OM
+0F01..0F03;BB # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04;BB # Po TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05;AL # Po TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06..0F07;BB # Po [2] TIBETAN MARK CARET YIG MGO PHUR SHAD MA..TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08;GL # Po TIBETAN MARK SBRUL SHAD
+0F09..0F0A;BB # Po [2] TIBETAN MARK BSKUR YIG MGO..TIBETAN MARK BKA- SHOG YIG MGO
+0F0B;BA # Po TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C;GL # Po TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D..0F11;EX # Po [5] TIBETAN MARK SHAD..TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12;GL # Po TIBETAN MARK RGYA GRAM SHAD
+0F13;AL # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14;EX # Po TIBETAN MARK GTER TSHEG
+0F15..0F17;AL # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18..0F19;CM # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A..0F1F;AL # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29;NU # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33;AL # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34;BA # So TIBETAN MARK BSDUS RTAGS
+0F35;CM # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36;AL # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37;CM # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38;AL # So TIBETAN MARK CHE MGO
+0F39;CM # Mn TIBETAN MARK TSA -PHRU
+0F3A;OP # Ps TIBETAN MARK GUG RTAGS GYON
+0F3B;CL # Pe TIBETAN MARK GUG RTAGS GYAS
+0F3C;OP # Ps TIBETAN MARK ANG KHANG GYON
+0F3D;CL # Pe TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F;CM # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47;AL # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C;AL # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E;CM # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F;BA # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F84;CM # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F85;BA # Po TIBETAN MARK PALUTA
+0F86..0F87;CM # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8C;AL # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0F8D..0F97;CM # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC;CM # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE..0FBF;BA # So [2] TIBETAN KU RU KHA..TIBETAN KU RU KHA BZHI MIG CAN
+0FC0..0FC5;AL # So [6] TIBETAN CANTILLATION SIGN HEAVY BEAT..TIBETAN SYMBOL RDO RJE
+0FC6;CM # Mn TIBETAN SYMBOL PADMA GDAN
+0FC7..0FCC;AL # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE..0FCF;AL # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD1;BB # Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN
+0FD2;BA # Po TIBETAN MARK NYIS TSHEG
+0FD3;BB # Po TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
+0FD4;AL # Po TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5..0FD8;AL # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+0FD9..0FDA;GL # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+1000..102A;SA # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C;SA # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030;SA # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031;SA # Mc MYANMAR VOWEL SIGN E
+1032..1037;SA # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038;SA # Mc MYANMAR SIGN VISARGA
+1039..103A;SA # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C;SA # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E;SA # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F;SA # Lo MYANMAR LETTER GREAT SA
+1040..1049;NU # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104B;BA # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+104C..104F;AL # Po [4] MYANMAR SYMBOL LOCATIVE..MYANMAR SYMBOL GENITIVE
+1050..1055;SA # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057;SA # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059;SA # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D;SA # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060;SA # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061;SA # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064;SA # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066;SA # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D;SA # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070;SA # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074;SA # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081;SA # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082;SA # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084;SA # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086;SA # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C;SA # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D;SA # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E;SA # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F;SA # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099;NU # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C;SA # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D;SA # Mn MYANMAR VOWEL SIGN AITON AI
+109E..109F;SA # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+10A0..10C5;AL # Lu [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7;AL # Lu GEORGIAN CAPITAL LETTER YN
+10CD;AL # Lu GEORGIAN CAPITAL LETTER AEN
+10D0..10FA;AL # Ll [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FB;AL # Po GEORGIAN PARAGRAPH SEPARATOR
+10FC;AL # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF;AL # Ll [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..115F;JL # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
+1160..11A7;JV # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE
+11A8..11FF;JT # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
+1200..1248;AL # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
+124A..124D;AL # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256;AL # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258;AL # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D;AL # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288;AL # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D;AL # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0;AL # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5;AL # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE;AL # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0;AL # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5;AL # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6;AL # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310;AL # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315;AL # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A;AL # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135D..135F;CM # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1360;AL # Po ETHIOPIC SECTION MARK
+1361;BA # Po ETHIOPIC WORDSPACE
+1362..1368;AL # Po [7] ETHIOPIC FULL STOP..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C;AL # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F;AL # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399;AL # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+13A0..13F5;AL # Lu [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD;AL # Ll [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1400;BA # Pd CANADIAN SYLLABICS HYPHEN
+1401..166C;AL # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D;AL # So CANADIAN SYLLABICS CHI SIGN
+166E;AL # Po CANADIAN SYLLABICS FULL STOP
+166F..167F;AL # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1680;BA # Zs OGHAM SPACE MARK
+1681..169A;AL # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B;OP # Ps OGHAM FEATHER MARK
+169C;CL # Pe OGHAM REVERSED FEATHER MARK
+16A0..16EA;AL # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EB..16ED;BA # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+16EE..16F0;AL # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8;AL # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..170C;AL # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711;AL # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714;CM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1720..1731;AL # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734;CM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1735..1736;BA # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1740..1751;AL # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753;CM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C;AL # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770;AL # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773;CM # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3;SA # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5;SA # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6;SA # Mc KHMER VOWEL SIGN AA
+17B7..17BD;SA # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5;SA # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6;SA # Mn KHMER SIGN NIKAHIT
+17C7..17C8;SA # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3;SA # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D4..17D5;BA # Po [2] KHMER SIGN KHAN..KHMER SIGN BARIYOOSAN
+17D6;NS # Po KHMER SIGN CAMNUC PII KUUH
+17D7;SA # Lm KHMER SIGN LEK TOO
+17D8;BA # Po KHMER SIGN BEYYAL
+17D9;AL # Po KHMER SIGN PHNAEK MUAN
+17DA;BA # Po KHMER SIGN KOOMUUT
+17DB;PR # Sc KHMER CURRENCY SYMBOL RIEL
+17DC;SA # Lo KHMER SIGN AVAKRAHASANYA
+17DD;SA # Mn KHMER SIGN ATTHACAN
+17E0..17E9;NU # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9;AL # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800..1801;AL # Po [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS
+1802..1803;EX # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
+1804..1805;BA # Po [2] MONGOLIAN COLON..MONGOLIAN FOUR DOTS
+1806;BB # Pd MONGOLIAN TODO SOFT HYPHEN
+1807;AL # Po MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808..1809;EX # Po [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP
+180A;AL # Po MONGOLIAN NIRUGU
+180B..180D;CM # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E;GL # Cf MONGOLIAN VOWEL SEPARATOR
+1810..1819;NU # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842;AL # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843;AL # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878;AL # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884;AL # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886;CM # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8;AL # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9;CM # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+18AA;AL # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5;AL # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E;AL # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1920..1922;CM # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926;CM # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928;CM # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B;CM # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931;CM # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932;CM # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938;CM # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B;CM # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1940;AL # So LIMBU SIGN LOO
+1944..1945;EX # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F;NU # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D;SA # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974;SA # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB;SA # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9;SA # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9;NU # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA;SA # No NEW TAI LUE THAM DIGIT ONE
+19DE..19DF;SA # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+19E0..19FF;AL # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+1A00..1A16;AL # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18;CM # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A;CM # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B;CM # Mn BUGINESE VOWEL SIGN AE
+1A1E..1A1F;AL # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+1A20..1A54;SA # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55;SA # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56;SA # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57;SA # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E;SA # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60;SA # Mn TAI THAM SIGN SAKOT
+1A61;SA # Mc TAI THAM VOWEL SIGN A
+1A62;SA # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64;SA # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C;SA # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72;SA # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C;SA # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F;CM # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89;NU # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99;NU # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA0..1AA6;SA # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA7;SA # Lm TAI THAM SIGN MAI YAMOK
+1AA8..1AAD;SA # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+1AB0..1ABD;CM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE;CM # Me COMBINING PARENTHESES OVERLAY
+1B00..1B03;CM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04;CM # Mc BALINESE SIGN BISAH
+1B05..1B33;AL # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34;CM # Mn BALINESE SIGN REREKAN
+1B35;CM # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A;CM # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B;CM # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C;CM # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41;CM # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42;CM # Mn BALINESE VOWEL SIGN PEPET
+1B43..1B44;CM # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B;AL # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59;NU # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B5A..1B5B;BA # Po [2] BALINESE PANTI..BALINESE PAMADA
+1B5C;AL # Po BALINESE WINDU
+1B5D..1B60;BA # Po [4] BALINESE CARIK PAMUNGKAH..BALINESE PAMENENG
+1B61..1B6A;AL # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+1B6B..1B73;CM # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B74..1B7C;AL # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B80..1B81;CM # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82;CM # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0;AL # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1;CM # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5;CM # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7;CM # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9;CM # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA;CM # Mc SUNDANESE SIGN PAMAAEH
+1BAB..1BAD;CM # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BAF;AL # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9;NU # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BBF;AL # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
+1BC0..1BE5;AL # Lo [38] BATAK LETTER A..BATAK LETTER U
+1BE6;CM # Mn BATAK SIGN TOMPI
+1BE7;CM # Mc BATAK VOWEL SIGN E
+1BE8..1BE9;CM # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC;CM # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED;CM # Mn BATAK VOWEL SIGN KARO O
+1BEE;CM # Mc BATAK VOWEL SIGN U
+1BEF..1BF1;CM # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1BF2..1BF3;CM # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1BFC..1BFF;AL # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+1C00..1C23;AL # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B;CM # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33;CM # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35;CM # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37;CM # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C3B..1C3F;BA # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C40..1C49;NU # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F;AL # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59;NU # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77;AL # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D;AL # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C7E..1C7F;BA # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1C80..1C88;AL # Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA;AL # Lu [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF;AL # Lu [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CC0..1CC7;AL # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+1CD0..1CD2;CM # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD3;AL # Po VEDIC SIGN NIHSHVASA
+1CD4..1CE0;CM # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1;CM # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8;CM # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9..1CEC;AL # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED;CM # Mn VEDIC SIGN TIRYAK
+1CEE..1CF3;AL # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF4;CM # Mn VEDIC TONE CANDRA ABOVE
+1CF5..1CF6;AL # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7;CM # Mc VEDIC SIGN ATIKRAMA
+1CF8..1CF9;CM # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1CFA;AL # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B;AL # Ll [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A;AL # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77;AL # Ll [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78;AL # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D7F;AL # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
+1D80..1D9A;AL # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF;AL # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DF9;CM # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF;CM # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00..1EFF;AL # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
+1F00..1F15;AL # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D;AL # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45;AL # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D;AL # Lu [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57;AL # Ll [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59;AL # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B;AL # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D;AL # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D;AL # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4;AL # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC;AL # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD;AL # Sk GREEK KORONIS
+1FBE;AL # Ll GREEK PROSGEGRAMMENI
+1FBF..1FC1;AL # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4;AL # Ll [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC;AL # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF;AL # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3;AL # Ll [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB;AL # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF;AL # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC;AL # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF;AL # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4;AL # Ll [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC;AL # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD;BB # Sk GREEK OXIA
+1FFE;AL # Sk GREEK DASIA
+2000..2006;BA # Zs [7] EN QUAD..SIX-PER-EM SPACE
+2007;GL # Zs FIGURE SPACE
+2008..200A;BA # Zs [3] PUNCTUATION SPACE..HAIR SPACE
+200B;ZW # Cf ZERO WIDTH SPACE
+200C;CM # Cf ZERO WIDTH NON-JOINER
+200D;ZWJ # Cf ZERO WIDTH JOINER
+200E..200F;CM # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2010;BA # Pd HYPHEN
+2011;GL # Pd NON-BREAKING HYPHEN
+2012..2013;BA # Pd [2] FIGURE DASH..EN DASH
+2014;B2 # Pd EM DASH
+2015;AI # Pd HORIZONTAL BAR
+2016;AI # Po DOUBLE VERTICAL LINE
+2017;AL # Po DOUBLE LOW LINE
+2018;QU # Pi LEFT SINGLE QUOTATION MARK
+2019;QU # Pf RIGHT SINGLE QUOTATION MARK
+201A;OP # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C;QU # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D;QU # Pf RIGHT DOUBLE QUOTATION MARK
+201E;OP # Ps DOUBLE LOW-9 QUOTATION MARK
+201F;QU # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2021;AI # Po [2] DAGGER..DOUBLE DAGGER
+2022..2023;AL # Po [2] BULLET..TRIANGULAR BULLET
+2024..2026;IN # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
+2027;BA # Po HYPHENATION POINT
+2028;BK # Zl LINE SEPARATOR
+2029;BK # Zp PARAGRAPH SEPARATOR
+202A..202E;CM # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F;GL # Zs NARROW NO-BREAK SPACE
+2030..2037;PO # Po [8] PER MILLE SIGN..REVERSED TRIPLE PRIME
+2038;AL # Po CARET
+2039;QU # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;QU # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B;AI # Po REFERENCE MARK
+203C..203D;NS # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+203E;AL # Po OVERLINE
+203F..2040;AL # Pc [2] UNDERTIE..CHARACTER TIE
+2041..2043;AL # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044;IS # Sm FRACTION SLASH
+2045;OP # Ps LEFT SQUARE BRACKET WITH QUILL
+2046;CL # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2049;NS # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+204A..2051;AL # Po [8] TIRONIAN SIGN ET..TWO ASTERISKS ALIGNED VERTICALLY
+2052;AL # Sm COMMERCIAL MINUS SIGN
+2053;AL # Po SWUNG DASH
+2054;AL # Pc INVERTED UNDERTIE
+2055;AL # Po FLOWER PUNCTUATION MARK
+2056;BA # Po THREE DOT PUNCTUATION
+2057;AL # Po QUADRUPLE PRIME
+2058..205B;BA # Po [4] FOUR DOT PUNCTUATION..FOUR DOT MARK
+205C;AL # Po DOTTED CROSS
+205D..205E;BA # Po [2] TRICOLON..VERTICAL FOUR DOTS
+205F;BA # Zs MEDIUM MATHEMATICAL SPACE
+2060;WJ # Cf WORD JOINER
+2061..2064;AL # Cf [4] FUNCTION APPLICATION..INVISIBLE PLUS
+2066..206F;CM # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+2070;AL # No SUPERSCRIPT ZERO
+2071;AL # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074;AI # No SUPERSCRIPT FOUR
+2075..2079;AL # No [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
+207A..207C;AL # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D;OP # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E;CL # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F;AI # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080;AL # No SUBSCRIPT ZERO
+2081..2084;AI # No [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
+2085..2089;AL # No [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
+208A..208C;AL # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D;OP # Ps SUBSCRIPT LEFT PARENTHESIS
+208E;CL # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090..209C;AL # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20A0..20A6;PR # Sc [7] EURO-CURRENCY SIGN..NAIRA SIGN
+20A7;PO # Sc PESETA SIGN
+20A8..20B5;PR # Sc [14] RUPEE SIGN..CEDI SIGN
+20B6;PO # Sc LIVRE TOURNOIS SIGN
+20B7..20BA;PR # Sc [4] SPESMILO SIGN..TURKISH LIRA SIGN
+20BB;PO # Sc NORDIC MARK SIGN
+20BC..20BD;PR # Sc [2] MANAT SIGN..RUBLE SIGN
+20BE;PO # Sc LARI SIGN
+20BF;PR # Sc BITCOIN SIGN
+20C0..20CF;PR # Cn [16] <reserved-20C0>..<reserved-20CF>
+20D0..20DC;CM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0;CM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1;CM # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4;CM # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0;CM # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2100..2101;AL # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102;AL # Lu DOUBLE-STRUCK CAPITAL C
+2103;PO # So DEGREE CELSIUS
+2104;AL # So CENTRE LINE SYMBOL
+2105;AI # So CARE OF
+2106;AL # So CADA UNA
+2107;AL # Lu EULER CONSTANT
+2108;AL # So SCRUPLE
+2109;PO # So DEGREE FAHRENHEIT
+210A..2112;AL # L& [9] SCRIPT SMALL G..SCRIPT CAPITAL L
+2113;AI # Ll SCRIPT SMALL L
+2114;AL # So L B BAR SYMBOL
+2115;AL # Lu DOUBLE-STRUCK CAPITAL N
+2116;PR # So NUMERO SIGN
+2117;AL # So SOUND RECORDING COPYRIGHT
+2118;AL # Sm SCRIPT CAPITAL P
+2119..211D;AL # Lu [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2120;AL # So [3] PRESCRIPTION TAKE..SERVICE MARK
+2121..2122;AI # So [2] TELEPHONE SIGN..TRADE MARK SIGN
+2123;AL # So VERSICLE
+2124;AL # Lu DOUBLE-STRUCK CAPITAL Z
+2125;AL # So OUNCE SIGN
+2126;AL # Lu OHM SIGN
+2127;AL # So INVERTED OHM SIGN
+2128;AL # Lu BLACK-LETTER CAPITAL Z
+2129;AL # So TURNED GREEK SMALL LETTER IOTA
+212A;AL # Lu KELVIN SIGN
+212B;AI # Lu ANGSTROM SIGN
+212C..212D;AL # Lu [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212E;AL # So ESTIMATED SYMBOL
+212F..2134;AL # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138;AL # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139;AL # Ll INFORMATION SOURCE
+213A..213B;AL # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F;AL # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144;AL # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149;AL # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A;AL # So PROPERTY LINE
+214B;AL # Sm TURNED AMPERSAND
+214C..214D;AL # So [2] PER SIGN..AKTIESELSKAB
+214E;AL # Ll TURNED SMALL F
+214F;AL # So SYMBOL FOR SAMARITAN SOURCE
+2150..2153;AL # No [4] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE THIRD
+2154..2155;AI # No [2] VULGAR FRACTION TWO THIRDS..VULGAR FRACTION ONE FIFTH
+2156..215A;AL # No [5] VULGAR FRACTION TWO FIFTHS..VULGAR FRACTION FIVE SIXTHS
+215B;AI # No VULGAR FRACTION ONE EIGHTH
+215C..215D;AL # No [2] VULGAR FRACTION THREE EIGHTHS..VULGAR FRACTION FIVE EIGHTHS
+215E;AI # No VULGAR FRACTION SEVEN EIGHTHS
+215F;AL # No FRACTION NUMERATOR ONE
+2160..216B;AI # Nl [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
+216C..216F;AL # Nl [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
+2170..2179;AI # Nl [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
+217A..2182;AL # Nl [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND
+2183..2184;AL # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188;AL # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2189;AI # No VULGAR FRACTION ZERO THIRDS
+218A..218B;AL # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+2190..2194;AI # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199;AI # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B;AL # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F;AL # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0;AL # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2;AL # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3;AL # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5;AL # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6;AL # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD;AL # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE;AL # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD;AL # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF;AL # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1;AL # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2;AI # Sm RIGHTWARDS DOUBLE ARROW
+21D3;AL # So DOWNWARDS DOUBLE ARROW
+21D4;AI # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3;AL # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..21FF;AL # Sm [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
+2200;AI # Sm FOR ALL
+2201;AL # Sm COMPLEMENT
+2202..2203;AI # Sm [2] PARTIAL DIFFERENTIAL..THERE EXISTS
+2204..2206;AL # Sm [3] THERE DOES NOT EXIST..INCREMENT
+2207..2208;AI # Sm [2] NABLA..ELEMENT OF
+2209..220A;AL # Sm [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
+220B;AI # Sm CONTAINS AS MEMBER
+220C..220E;AL # Sm [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
+220F;AI # Sm N-ARY PRODUCT
+2210;AL # Sm N-ARY COPRODUCT
+2211;AI # Sm N-ARY SUMMATION
+2212..2213;PR # Sm [2] MINUS SIGN..MINUS-OR-PLUS SIGN
+2214;AL # Sm DOT PLUS
+2215;AI # Sm DIVISION SLASH
+2216..2219;AL # Sm [4] SET MINUS..BULLET OPERATOR
+221A;AI # Sm SQUARE ROOT
+221B..221C;AL # Sm [2] CUBE ROOT..FOURTH ROOT
+221D..2220;AI # Sm [4] PROPORTIONAL TO..ANGLE
+2221..2222;AL # Sm [2] MEASURED ANGLE..SPHERICAL ANGLE
+2223;AI # Sm DIVIDES
+2224;AL # Sm DOES NOT DIVIDE
+2225;AI # Sm PARALLEL TO
+2226;AL # Sm NOT PARALLEL TO
+2227..222C;AI # Sm [6] LOGICAL AND..DOUBLE INTEGRAL
+222D;AL # Sm TRIPLE INTEGRAL
+222E;AI # Sm CONTOUR INTEGRAL
+222F..2233;AL # Sm [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
+2234..2237;AI # Sm [4] THEREFORE..PROPORTION
+2238..223B;AL # Sm [4] DOT MINUS..HOMOTHETIC
+223C..223D;AI # Sm [2] TILDE OPERATOR..REVERSED TILDE
+223E..2247;AL # Sm [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248;AI # Sm ALMOST EQUAL TO
+2249..224B;AL # Sm [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
+224C;AI # Sm ALL EQUAL TO
+224D..2251;AL # Sm [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
+2252;AI # Sm APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253..225F;AL # Sm [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
+2260..2261;AI # Sm [2] NOT EQUAL TO..IDENTICAL TO
+2262..2263;AL # Sm [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
+2264..2267;AI # Sm [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
+2268..2269;AL # Sm [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
+226A..226B;AI # Sm [2] MUCH LESS-THAN..MUCH GREATER-THAN
+226C..226D;AL # Sm [2] BETWEEN..NOT EQUIVALENT TO
+226E..226F;AI # Sm [2] NOT LESS-THAN..NOT GREATER-THAN
+2270..2281;AL # Sm [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
+2282..2283;AI # Sm [2] SUBSET OF..SUPERSET OF
+2284..2285;AL # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2286..2287;AI # Sm [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
+2288..2294;AL # Sm [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
+2295;AI # Sm CIRCLED PLUS
+2296..2298;AL # Sm [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
+2299;AI # Sm CIRCLED DOT OPERATOR
+229A..22A4;AL # Sm [11] CIRCLED RING OPERATOR..DOWN TACK
+22A5;AI # Sm UP TACK
+22A6..22BE;AL # Sm [25] ASSERTION..RIGHT ANGLE WITH ARC
+22BF;AI # Sm RIGHT TRIANGLE
+22C0..22EE;AL # Sm [47] N-ARY LOGICAL AND..VERTICAL ELLIPSIS
+22EF;IN # Sm MIDLINE HORIZONTAL ELLIPSIS
+22F0..22FF;AL # Sm [16] UP RIGHT DIAGONAL ELLIPSIS..Z NOTATION BAG MEMBERSHIP
+2300..2307;AL # So [8] DIAMETER SIGN..WAVY LINE
+2308;OP # Ps LEFT CEILING
+2309;CL # Pe RIGHT CEILING
+230A;OP # Ps LEFT FLOOR
+230B;CL # Pe RIGHT FLOOR
+230C..2311;AL # So [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
+2312;AI # So ARC
+2313..2319;AL # So [7] SEGMENT..TURNED NOT SIGN
+231A..231B;ID # So [2] WATCH..HOURGLASS
+231C..231F;AL # So [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER
+2320..2321;AL # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328;AL # So [7] FROWN..KEYBOARD
+2329;OP # Ps LEFT-POINTING ANGLE BRACKET
+232A;CL # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B;AL # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C;AL # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A;AL # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3;AL # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB;AL # So [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1;AL # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..23EF;AL # So [14] WHITE TRAPEZIUM..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+23F0..23F3;ID # So [4] ALARM CLOCK..HOURGLASS WITH FLOWING SAND
+23F4..23FF;AL # So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
+2400..2426;AL # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A;AL # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B;AI # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9;AI # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA..24FE;AI # No [21] CIRCLED DIGIT ZERO..DOUBLE CIRCLED NUMBER TEN
+24FF;AL # No NEGATIVE CIRCLED DIGIT ZERO
+2500..254B;AI # So [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C..254F;AL # So [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550..2574;AI # So [37] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT LEFT
+2575..257F;AL # So [11] BOX DRAWINGS LIGHT UP..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580..258F;AI # So [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
+2590..2591;AL # So [2] RIGHT HALF BLOCK..LIGHT SHADE
+2592..2595;AI # So [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
+2596..259F;AL # So [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0..25A1;AI # So [2] BLACK SQUARE..WHITE SQUARE
+25A2;AL # So WHITE SQUARE WITH ROUNDED CORNERS
+25A3..25A9;AI # So [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA..25B1;AL # So [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
+25B2..25B3;AI # So [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
+25B4..25B5;AL # So [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
+25B6;AI # So BLACK RIGHT-POINTING TRIANGLE
+25B7;AI # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25BB;AL # So [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
+25BC..25BD;AI # So [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
+25BE..25BF;AL # So [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
+25C0;AI # So BLACK LEFT-POINTING TRIANGLE
+25C1;AI # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25C5;AL # So [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
+25C6..25C8;AI # So [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9..25CA;AL # So [2] FISHEYE..LOZENGE
+25CB;AI # So WHITE CIRCLE
+25CC..25CD;AL # So [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
+25CE..25D1;AI # So [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
+25D2..25E1;AL # So [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
+25E2..25E5;AI # So [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
+25E6..25EE;AL # So [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF;AI # So LARGE CIRCLE
+25F0..25F7;AL # So [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF;AL # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..2603;ID # So [4] BLACK SUN WITH RAYS..SNOWMAN
+2604;AL # So COMET
+2605..2606;AI # So [2] BLACK STAR..WHITE STAR
+2607..2608;AL # So [2] LIGHTNING..THUNDERSTORM
+2609;AI # So SUN
+260A..260D;AL # So [4] ASCENDING NODE..OPPOSITION
+260E..260F;AI # So [2] BLACK TELEPHONE..WHITE TELEPHONE
+2610..2613;AL # So [4] BALLOT BOX..SALTIRE
+2614..2615;ID # So [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
+2616..2617;AI # So [2] WHITE SHOGI PIECE..BLACK SHOGI PIECE
+2618;ID # So SHAMROCK
+2619;AL # So REVERSED ROTATED FLORAL HEART BULLET
+261A..261C;ID # So [3] BLACK LEFT POINTING INDEX..WHITE LEFT POINTING INDEX
+261D;EB # So WHITE UP POINTING INDEX
+261E..261F;ID # So [2] WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
+2620..2638;AL # So [25] SKULL AND CROSSBONES..WHEEL OF DHARMA
+2639..263B;ID # So [3] WHITE FROWNING FACE..BLACK SMILING FACE
+263C..263F;AL # So [4] WHITE SUN WITH RAYS..MERCURY
+2640;AI # So FEMALE SIGN
+2641;AL # So EARTH
+2642;AI # So MALE SIGN
+2643..265F;AL # So [29] JUPITER..BLACK CHESS PAWN
+2660..2661;AI # So [2] BLACK SPADE SUIT..WHITE HEART SUIT
+2662;AL # So WHITE DIAMOND SUIT
+2663..2665;AI # So [3] BLACK CLUB SUIT..BLACK HEART SUIT
+2666;AL # So BLACK DIAMOND SUIT
+2667;AI # So WHITE CLUB SUIT
+2668;ID # So HOT SPRINGS
+2669..266A;AI # So [2] QUARTER NOTE..EIGHTH NOTE
+266B;AL # So BEAMED EIGHTH NOTES
+266C..266D;AI # So [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
+266E;AL # So MUSIC NATURAL SIGN
+266F;AI # Sm MUSIC SHARP SIGN
+2670..267E;AL # So [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN
+267F;ID # So WHEELCHAIR SYMBOL
+2680..269D;AL # So [30] DIE FACE-1..OUTLINED WHITE STAR
+269E..269F;AI # So [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
+26A0..26BC;AL # So [29] WARNING SIGN..SESQUIQUADRATE
+26BD..26C8;ID # So [12] SOCCER BALL..THUNDER CLOUD AND RAIN
+26C9..26CC;AI # So [4] TURNED WHITE SHOGI PIECE..CROSSING LANES
+26CD;ID # So DISABLED CAR
+26CE;AL # So OPHIUCHUS
+26CF..26D1;ID # So [3] PICK..HELMET WITH WHITE CROSS
+26D2;AI # So CIRCLED CROSSING LANES
+26D3..26D4;ID # So [2] CHAINS..NO ENTRY
+26D5..26D7;AI # So [3] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..WHITE TWO-WAY LEFT WAY TRAFFIC
+26D8..26D9;ID # So [2] BLACK LEFT LANE MERGE..WHITE LEFT LANE MERGE
+26DA..26DB;AI # So [2] DRIVE SLOW SIGN..HEAVY WHITE DOWN-POINTING TRIANGLE
+26DC;ID # So LEFT CLOSED ENTRY
+26DD..26DE;AI # So [2] SQUARED SALTIRE..FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
+26DF..26E1;ID # So [3] BLACK TRUCK..RESTRICTED LEFT ENTRY-2
+26E2;AL # So ASTRONOMICAL SYMBOL FOR URANUS
+26E3;AI # So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E4..26E7;AL # So [4] PENTAGRAM..INVERTED PENTAGRAM
+26E8..26E9;AI # So [2] BLACK CROSS ON SHIELD..SHINTO SHRINE
+26EA;ID # So CHURCH
+26EB..26F0;AI # So [6] CASTLE..MOUNTAIN
+26F1..26F5;ID # So [5] UMBRELLA ON GROUND..SAILBOAT
+26F6;AI # So SQUARE FOUR CORNERS
+26F7..26F8;ID # So [2] SKIER..ICE SKATE
+26F9;EB # So PERSON WITH BALL
+26FA;ID # So TENT
+26FB..26FC;AI # So [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
+26FD..26FF;ID # So [3] FUEL PUMP..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2700..2704;ID # So [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
+2705..2707;AL # So [3] WHITE HEAVY CHECK MARK..TAPE DRIVE
+2708..2709;ID # So [2] AIRPLANE..ENVELOPE
+270A..270D;EB # So [4] RAISED FIST..WRITING HAND
+270E..2756;AL # So [73] LOWER RIGHT PENCIL..BLACK DIAMOND MINUS WHITE X
+2757;AI # So HEAVY EXCLAMATION MARK SYMBOL
+2758..275A;AL # So [3] LIGHT VERTICAL BAR..HEAVY VERTICAL BAR
+275B..2760;QU # So [6] HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761;AL # So CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762..2763;EX # So [2] HEAVY EXCLAMATION MARK ORNAMENT..HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764;ID # So HEAVY BLACK HEART
+2765..2767;AL # So [3] ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
+2768;OP # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769;CL # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A;OP # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B;CL # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C;OP # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D;CL # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E;OP # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F;CL # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770;OP # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771;CL # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772;OP # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773;CL # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774;OP # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775;CL # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793;AI # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794..27BF;AL # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
+27C0..27C4;AL # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5;OP # Ps LEFT S-SHAPED BAG DELIMITER
+27C6;CL # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27E5;AL # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6;OP # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7;CL # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8;OP # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9;CL # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA;OP # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB;CL # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC;OP # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED;CL # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE;OP # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF;CL # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF;AL # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF;AL # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..297F;AL # Sm [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL
+2980..2982;AL # Sm [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON
+2983;OP # Ps LEFT WHITE CURLY BRACKET
+2984;CL # Pe RIGHT WHITE CURLY BRACKET
+2985;OP # Ps LEFT WHITE PARENTHESIS
+2986;CL # Pe RIGHT WHITE PARENTHESIS
+2987;OP # Ps Z NOTATION LEFT IMAGE BRACKET
+2988;CL # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989;OP # Ps Z NOTATION LEFT BINDING BRACKET
+298A;CL # Pe Z NOTATION RIGHT BINDING BRACKET
+298B;OP # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C;CL # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D;OP # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E;CL # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F;OP # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990;CL # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991;OP # Ps LEFT ANGLE BRACKET WITH DOT
+2992;CL # Pe RIGHT ANGLE BRACKET WITH DOT
+2993;OP # Ps LEFT ARC LESS-THAN BRACKET
+2994;CL # Pe RIGHT ARC GREATER-THAN BRACKET
+2995;OP # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996;CL # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997;OP # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998;CL # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7;AL # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8;OP # Ps LEFT WIGGLY FENCE
+29D9;CL # Pe RIGHT WIGGLY FENCE
+29DA;OP # Ps LEFT DOUBLE WIGGLY FENCE
+29DB;CL # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB;AL # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC;OP # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD;CL # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..29FF;AL # Sm [2] TINY..MINY
+2A00..2AFF;AL # Sm [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR
+2B00..2B2F;AL # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44;AL # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46;AL # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C;AL # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B54;AL # So [8] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..WHITE RIGHT-POINTING PENTAGON
+2B55..2B59;AI # So [5] HEAVY LARGE CIRCLE..HEAVY CIRCLED SALTIRE
+2B5A..2B73;AL # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B76..2B95;AL # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B98..2BFF;AL # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2C00..2C2E;AL # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E;AL # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7B;AL # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D;AL # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2C7F;AL # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80..2CE4;AL # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CE5..2CEA;AL # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CEB..2CEE;AL # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1;CM # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF2..2CF3;AL # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2CF9;EX # Po COPTIC OLD NUBIAN FULL STOP
+2CFA..2CFC;BA # Po [3] COPTIC OLD NUBIAN DIRECT QUESTION MARK..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;AL # No COPTIC FRACTION ONE HALF
+2CFE;EX # Po COPTIC FULL STOP
+2CFF;BA # Po COPTIC MORPHOLOGICAL DIVIDER
+2D00..2D25;AL # Ll [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27;AL # Ll GEORGIAN SMALL LETTER YN
+2D2D;AL # Ll GEORGIAN SMALL LETTER AEN
+2D30..2D67;AL # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F;AL # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D70;BA # Po TIFINAGH SEPARATOR MARK
+2D7F;CM # Mn TIFINAGH CONSONANT JOINER
+2D80..2D96;AL # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6;AL # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE;AL # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6;AL # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE;AL # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6;AL # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE;AL # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6;AL # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE;AL # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF;CM # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E00..2E01;QU # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;QU # Pi LEFT SUBSTITUTION BRACKET
+2E03;QU # Pf RIGHT SUBSTITUTION BRACKET
+2E04;QU # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05;QU # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08;QU # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09;QU # Pi LEFT TRANSPOSITION BRACKET
+2E0A;QU # Pf RIGHT TRANSPOSITION BRACKET
+2E0B;QU # Po RAISED SQUARE
+2E0C;QU # Pi LEFT RAISED OMISSION BRACKET
+2E0D;QU # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E15;BA # Po [8] EDITORIAL CORONIS..UPWARDS ANCORA
+2E16;AL # Po DOTTED RIGHT-POINTING ANGLE
+2E17;BA # Pd DOUBLE OBLIQUE HYPHEN
+2E18;OP # Po INVERTED INTERROBANG
+2E19;BA # Po PALM BRANCH
+2E1A;AL # Pd HYPHEN WITH DIAERESIS
+2E1B;AL # Po TILDE WITH RING ABOVE
+2E1C;QU # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D;QU # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F;AL # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20;QU # Pi LEFT VERTICAL BAR WITH QUILL
+2E21;QU # Pf RIGHT VERTICAL BAR WITH QUILL
+2E22;OP # Ps TOP LEFT HALF BRACKET
+2E23;CL # Pe TOP RIGHT HALF BRACKET
+2E24;OP # Ps BOTTOM LEFT HALF BRACKET
+2E25;CL # Pe BOTTOM RIGHT HALF BRACKET
+2E26;OP # Ps LEFT SIDEWAYS U BRACKET
+2E27;CL # Pe RIGHT SIDEWAYS U BRACKET
+2E28;OP # Ps LEFT DOUBLE PARENTHESIS
+2E29;CL # Pe RIGHT DOUBLE PARENTHESIS
+2E2A..2E2D;BA # Po [4] TWO DOTS OVER ONE DOT PUNCTUATION..FIVE DOT MARK
+2E2E;EX # Po REVERSED QUESTION MARK
+2E2F;AL # Lm VERTICAL TILDE
+2E30..2E31;BA # Po [2] RING POINT..WORD SEPARATOR MIDDLE DOT
+2E32;AL # Po TURNED COMMA
+2E33..2E34;BA # Po [2] RAISED DOT..RAISED COMMA
+2E35..2E39;AL # Po [5] TURNED SEMICOLON..TOP HALF SECTION SIGN
+2E3A..2E3B;B2 # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E3E;BA # Po [3] STENOGRAPHIC FULL STOP..WIGGLY VERTICAL LINE
+2E3F;AL # Po CAPITULUM
+2E40;BA # Pd DOUBLE HYPHEN
+2E41;BA # Po REVERSED COMMA
+2E42;OP # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E4A;BA # Po [8] DASH WITH LEFT UPTURN..DOTTED SOLIDUS
+2E4B;AL # Po TRIPLE DAGGER
+2E4C;BA # Po MEDIEVAL COMMA
+2E4D;AL # Po PARAGRAPHUS MARK
+2E4E..2E4F;BA # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER
+2E80..2E99;ID # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3;ID # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5;ID # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+2FF0..2FFB;ID # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000;BA # Zs IDEOGRAPHIC SPACE
+3001..3002;CL # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
+3003;ID # Po DITTO MARK
+3004;ID # So JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005;NS # Lm IDEOGRAPHIC ITERATION MARK
+3006;ID # Lo IDEOGRAPHIC CLOSING MARK
+3007;ID # Nl IDEOGRAPHIC NUMBER ZERO
+3008;OP # Ps LEFT ANGLE BRACKET
+3009;CL # Pe RIGHT ANGLE BRACKET
+300A;OP # Ps LEFT DOUBLE ANGLE BRACKET
+300B;CL # Pe RIGHT DOUBLE ANGLE BRACKET
+300C;OP # Ps LEFT CORNER BRACKET
+300D;CL # Pe RIGHT CORNER BRACKET
+300E;OP # Ps LEFT WHITE CORNER BRACKET
+300F;CL # Pe RIGHT WHITE CORNER BRACKET
+3010;OP # Ps LEFT BLACK LENTICULAR BRACKET
+3011;CL # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013;ID # So [2] POSTAL MARK..GETA MARK
+3014;OP # Ps LEFT TORTOISE SHELL BRACKET
+3015;CL # Pe RIGHT TORTOISE SHELL BRACKET
+3016;OP # Ps LEFT WHITE LENTICULAR BRACKET
+3017;CL # Pe RIGHT WHITE LENTICULAR BRACKET
+3018;OP # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019;CL # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A;OP # Ps LEFT WHITE SQUARE BRACKET
+301B;CL # Pe RIGHT WHITE SQUARE BRACKET
+301C;NS # Pd WAVE DASH
+301D;OP # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F;CL # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020;ID # So POSTAL MARK FACE
+3021..3029;ID # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+302A..302D;CM # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F;CM # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3030;ID # Pd WAVY DASH
+3031..3034;ID # Lm [4] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035;CM # Lm VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037;ID # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038..303A;ID # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B;NS # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C;NS # Lo MASU MARK
+303D;ID # Po PART ALTERNATION MARK
+303E..303F;ID # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+3041;CJ # Lo HIRAGANA LETTER SMALL A
+3042;ID # Lo HIRAGANA LETTER A
+3043;CJ # Lo HIRAGANA LETTER SMALL I
+3044;ID # Lo HIRAGANA LETTER I
+3045;CJ # Lo HIRAGANA LETTER SMALL U
+3046;ID # Lo HIRAGANA LETTER U
+3047;CJ # Lo HIRAGANA LETTER SMALL E
+3048;ID # Lo HIRAGANA LETTER E
+3049;CJ # Lo HIRAGANA LETTER SMALL O
+304A..3062;ID # Lo [25] HIRAGANA LETTER O..HIRAGANA LETTER DI
+3063;CJ # Lo HIRAGANA LETTER SMALL TU
+3064..3082;ID # Lo [31] HIRAGANA LETTER TU..HIRAGANA LETTER MO
+3083;CJ # Lo HIRAGANA LETTER SMALL YA
+3084;ID # Lo HIRAGANA LETTER YA
+3085;CJ # Lo HIRAGANA LETTER SMALL YU
+3086;ID # Lo HIRAGANA LETTER YU
+3087;CJ # Lo HIRAGANA LETTER SMALL YO
+3088..308D;ID # Lo [6] HIRAGANA LETTER YO..HIRAGANA LETTER RO
+308E;CJ # Lo HIRAGANA LETTER SMALL WA
+308F..3094;ID # Lo [6] HIRAGANA LETTER WA..HIRAGANA LETTER VU
+3095..3096;CJ # Lo [2] HIRAGANA LETTER SMALL KA..HIRAGANA LETTER SMALL KE
+3099..309A;CM # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C;NS # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E;NS # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F;ID # Lo HIRAGANA DIGRAPH YORI
+30A0;NS # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1;CJ # Lo KATAKANA LETTER SMALL A
+30A2;ID # Lo KATAKANA LETTER A
+30A3;CJ # Lo KATAKANA LETTER SMALL I
+30A4;ID # Lo KATAKANA LETTER I
+30A5;CJ # Lo KATAKANA LETTER SMALL U
+30A6;ID # Lo KATAKANA LETTER U
+30A7;CJ # Lo KATAKANA LETTER SMALL E
+30A8;ID # Lo KATAKANA LETTER E
+30A9;CJ # Lo KATAKANA LETTER SMALL O
+30AA..30C2;ID # Lo [25] KATAKANA LETTER O..KATAKANA LETTER DI
+30C3;CJ # Lo KATAKANA LETTER SMALL TU
+30C4..30E2;ID # Lo [31] KATAKANA LETTER TU..KATAKANA LETTER MO
+30E3;CJ # Lo KATAKANA LETTER SMALL YA
+30E4;ID # Lo KATAKANA LETTER YA
+30E5;CJ # Lo KATAKANA LETTER SMALL YU
+30E6;ID # Lo KATAKANA LETTER YU
+30E7;CJ # Lo KATAKANA LETTER SMALL YO
+30E8..30ED;ID # Lo [6] KATAKANA LETTER YO..KATAKANA LETTER RO
+30EE;CJ # Lo KATAKANA LETTER SMALL WA
+30EF..30F4;ID # Lo [6] KATAKANA LETTER WA..KATAKANA LETTER VU
+30F5..30F6;CJ # Lo [2] KATAKANA LETTER SMALL KA..KATAKANA LETTER SMALL KE
+30F7..30FA;ID # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO
+30FB;NS # Po KATAKANA MIDDLE DOT
+30FC;CJ # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD..30FE;NS # Lm [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK
+30FF;ID # Lo KATAKANA DIGRAPH KOTO
+3105..312F;ID # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E;ID # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3190..3191;ID # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195;ID # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F;ID # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31A0..31BA;ID # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31C0..31E3;ID # So [36] CJK STROKE T..CJK STROKE Q
+31F0..31FF;CJ # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3200..321E;ID # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229;ID # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247;ID # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3248..324F;AI # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+3250;ID # So PARTNERSHIP SIGN
+3251..325F;ID # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327F;ID # So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
+3280..3289;ID # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0;ID # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF;ID # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32FF;ID # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
+3300..33FF;ID # So [256] SQUARE APAATO..SQUARE GAL
+3400..4DB5;ID # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4DB6..4DBF;ID # Cn [10] <reserved-4DB6>..<reserved-4DBF>
+4DC0..4DFF;AL # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+4E00..9FEF;ID # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+9FF0..9FFF;ID # Cn [16] <reserved-9FF0>..<reserved-9FFF>
+A000..A014;ID # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
+A015;NS # Lm YI SYLLABLE WU
+A016..A48C;ID # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6;ID # So [55] YI RADICAL QOT..YI RADICAL KE
+A4D0..A4F7;AL # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD;AL # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A4FE..A4FF;BA # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A500..A60B;AL # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C;AL # Lm VAI SYLLABLE LENGTHENER
+A60D;BA # Po VAI COMMA
+A60E;EX # Po VAI FULL STOP
+A60F;BA # Po VAI QUESTION MARK
+A610..A61F;AL # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629;NU # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B;AL # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D;AL # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E;AL # Lo CYRILLIC LETTER MULTIOCULAR O
+A66F;CM # Mn COMBINING CYRILLIC VZMET
+A670..A672;CM # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A673;AL # Po SLAVONIC ASTERISK
+A674..A67D;CM # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A67E;AL # Po CYRILLIC KAVYKA
+A67F;AL # Lm CYRILLIC PAYEROK
+A680..A69B;AL # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D;AL # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F;CM # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6A0..A6E5;AL # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF;AL # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1;CM # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A6F2;AL # Po BAMUM NJAEMLI
+A6F3..A6F7;BA # Po [5] BAMUM FULL STOP..BAMUM QUESTION MARK
+A700..A716;AL # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F;AL # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721;AL # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A722..A76F;AL # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770;AL # Lm MODIFIER LETTER US
+A771..A787;AL # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788;AL # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A;AL # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A78B..A78E;AL # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F;AL # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7BF;AL # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
+A7C2..A7C6;AL # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7F7;AL # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9;AL # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA;AL # Ll LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A7FF;AL # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
+A800..A801;AL # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+A802;CM # Mn SYLOTI NAGRI SIGN DVISVARA
+A803..A805;AL # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806;CM # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A;AL # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B;CM # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822;AL # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824;CM # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826;CM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827;CM # Mc SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B;AL # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A830..A835;AL # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+A836..A837;AL # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838;PO # Sc NORTH INDIC RUPEE MARK
+A839;AL # So NORTH INDIC QUANTITY MARK
+A840..A873;AL # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A874..A875;BB # Po [2] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA DOUBLE HEAD MARK
+A876..A877;EX # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
+A880..A881;CM # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3;AL # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3;CM # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4..A8C5;CM # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8CE..A8CF;BA # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A8D0..A8D9;NU # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8E0..A8F1;CM # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7;AL # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8..A8FA;AL # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+A8FB;AL # Lo DEVANAGARI HEADSTROKE
+A8FC;BB # Po DEVANAGARI SIGN SIDDHAM
+A8FD..A8FE;AL # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF;CM # Mn DEVANAGARI VOWEL SIGN AY
+A900..A909;NU # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925;AL # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D;CM # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A92E..A92F;BA # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+A930..A946;AL # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951;CM # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953;CM # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A95F;AL # Po REJANG SECTION MARK
+A960..A97C;JL # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982;CM # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983;CM # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2;AL # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3;CM # Mn JAVANESE SIGN CECAK TELU
+A9B4..A9B5;CM # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9;CM # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB;CM # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD;CM # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9C0;CM # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+A9C1..A9C6;AL # Po [6] JAVANESE LEFT RERENGGAN..JAVANESE PADA WINDU
+A9C7..A9C9;BA # Po [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI
+A9CA..A9CD;AL # Po [4] JAVANESE PADA ADEG..JAVANESE TURNED PADA PISELEH
+A9CF;AL # Lm JAVANESE PANGRANGKEP
+A9D0..A9D9;NU # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9DE..A9DF;AL # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+A9E0..A9E4;SA # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E5;SA # Mn MYANMAR SIGN SHAN SAW
+A9E6;SA # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF;SA # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9F0..A9F9;NU # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+A9FA..A9FE;SA # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28;AL # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E;CM # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30;CM # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32;CM # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34;CM # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36;CM # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42;AL # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43;CM # Mn CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B;AL # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C;CM # Mn CHAM CONSONANT SIGN FINAL M
+AA4D;CM # Mc CHAM CONSONANT SIGN FINAL H
+AA50..AA59;NU # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA5C;AL # Po CHAM PUNCTUATION SPIRAL
+AA5D..AA5F;BA # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
+AA60..AA6F;SA # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70;SA # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76;SA # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA77..AA79;SA # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AA7A;SA # Lo MYANMAR LETTER AITON RA
+AA7B;SA # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C;SA # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D;SA # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AA7F;SA # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
+AA80..AAAF;SA # Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0;SA # Mn TAI VIET MAI KANG
+AAB1;SA # Lo TAI VIET VOWEL AA
+AAB2..AAB4;SA # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6;SA # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8;SA # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD;SA # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF;SA # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0;SA # Lo TAI VIET TONE MAI NUENG
+AAC1;SA # Mn TAI VIET TONE MAI THO
+AAC2;SA # Lo TAI VIET TONE MAI SONG
+AADB..AADC;SA # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD;SA # Lm TAI VIET SYMBOL SAM
+AADE..AADF;SA # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+AAE0..AAEA;AL # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB;CM # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED;CM # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF;CM # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF0..AAF1;BA # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+AAF2;AL # Lo MEETEI MAYEK ANJI
+AAF3..AAF4;AL # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5;CM # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AAF6;CM # Mn MEETEI MAYEK VIRAMA
+AB01..AB06;AL # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E;AL # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16;AL # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26;AL # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E;AL # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A;AL # Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5B;AL # Sk MODIFIER BREVE WITH INVERTED BREVE
+AB5C..AB5F;AL # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB67;AL # Ll [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB70..ABBF;AL # Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2;AL # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4;CM # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5;CM # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7;CM # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8;CM # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA;CM # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEB;BA # Po MEETEI MAYEK CHEIKHEI
+ABEC;CM # Mc MEETEI MAYEK LUM IYEK
+ABED;CM # Mn MEETEI MAYEK APUN IYEK
+ABF0..ABF9;NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00;H2 # Lo HANGUL SYLLABLE GA
+AC01..AC1B;H3 # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
+AC1C;H2 # Lo HANGUL SYLLABLE GAE
+AC1D..AC37;H3 # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
+AC38;H2 # Lo HANGUL SYLLABLE GYA
+AC39..AC53;H3 # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
+AC54;H2 # Lo HANGUL SYLLABLE GYAE
+AC55..AC6F;H3 # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
+AC70;H2 # Lo HANGUL SYLLABLE GEO
+AC71..AC8B;H3 # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
+AC8C;H2 # Lo HANGUL SYLLABLE GE
+AC8D..ACA7;H3 # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
+ACA8;H2 # Lo HANGUL SYLLABLE GYEO
+ACA9..ACC3;H3 # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
+ACC4;H2 # Lo HANGUL SYLLABLE GYE
+ACC5..ACDF;H3 # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
+ACE0;H2 # Lo HANGUL SYLLABLE GO
+ACE1..ACFB;H3 # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
+ACFC;H2 # Lo HANGUL SYLLABLE GWA
+ACFD..AD17;H3 # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
+AD18;H2 # Lo HANGUL SYLLABLE GWAE
+AD19..AD33;H3 # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
+AD34;H2 # Lo HANGUL SYLLABLE GOE
+AD35..AD4F;H3 # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
+AD50;H2 # Lo HANGUL SYLLABLE GYO
+AD51..AD6B;H3 # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
+AD6C;H2 # Lo HANGUL SYLLABLE GU
+AD6D..AD87;H3 # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
+AD88;H2 # Lo HANGUL SYLLABLE GWEO
+AD89..ADA3;H3 # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
+ADA4;H2 # Lo HANGUL SYLLABLE GWE
+ADA5..ADBF;H3 # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
+ADC0;H2 # Lo HANGUL SYLLABLE GWI
+ADC1..ADDB;H3 # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
+ADDC;H2 # Lo HANGUL SYLLABLE GYU
+ADDD..ADF7;H3 # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
+ADF8;H2 # Lo HANGUL SYLLABLE GEU
+ADF9..AE13;H3 # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
+AE14;H2 # Lo HANGUL SYLLABLE GYI
+AE15..AE2F;H3 # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
+AE30;H2 # Lo HANGUL SYLLABLE GI
+AE31..AE4B;H3 # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
+AE4C;H2 # Lo HANGUL SYLLABLE GGA
+AE4D..AE67;H3 # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
+AE68;H2 # Lo HANGUL SYLLABLE GGAE
+AE69..AE83;H3 # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
+AE84;H2 # Lo HANGUL SYLLABLE GGYA
+AE85..AE9F;H3 # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
+AEA0;H2 # Lo HANGUL SYLLABLE GGYAE
+AEA1..AEBB;H3 # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
+AEBC;H2 # Lo HANGUL SYLLABLE GGEO
+AEBD..AED7;H3 # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
+AED8;H2 # Lo HANGUL SYLLABLE GGE
+AED9..AEF3;H3 # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
+AEF4;H2 # Lo HANGUL SYLLABLE GGYEO
+AEF5..AF0F;H3 # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
+AF10;H2 # Lo HANGUL SYLLABLE GGYE
+AF11..AF2B;H3 # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
+AF2C;H2 # Lo HANGUL SYLLABLE GGO
+AF2D..AF47;H3 # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
+AF48;H2 # Lo HANGUL SYLLABLE GGWA
+AF49..AF63;H3 # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
+AF64;H2 # Lo HANGUL SYLLABLE GGWAE
+AF65..AF7F;H3 # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
+AF80;H2 # Lo HANGUL SYLLABLE GGOE
+AF81..AF9B;H3 # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
+AF9C;H2 # Lo HANGUL SYLLABLE GGYO
+AF9D..AFB7;H3 # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
+AFB8;H2 # Lo HANGUL SYLLABLE GGU
+AFB9..AFD3;H3 # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
+AFD4;H2 # Lo HANGUL SYLLABLE GGWEO
+AFD5..AFEF;H3 # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
+AFF0;H2 # Lo HANGUL SYLLABLE GGWE
+AFF1..B00B;H3 # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
+B00C;H2 # Lo HANGUL SYLLABLE GGWI
+B00D..B027;H3 # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
+B028;H2 # Lo HANGUL SYLLABLE GGYU
+B029..B043;H3 # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
+B044;H2 # Lo HANGUL SYLLABLE GGEU
+B045..B05F;H3 # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
+B060;H2 # Lo HANGUL SYLLABLE GGYI
+B061..B07B;H3 # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
+B07C;H2 # Lo HANGUL SYLLABLE GGI
+B07D..B097;H3 # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
+B098;H2 # Lo HANGUL SYLLABLE NA
+B099..B0B3;H3 # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
+B0B4;H2 # Lo HANGUL SYLLABLE NAE
+B0B5..B0CF;H3 # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
+B0D0;H2 # Lo HANGUL SYLLABLE NYA
+B0D1..B0EB;H3 # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
+B0EC;H2 # Lo HANGUL SYLLABLE NYAE
+B0ED..B107;H3 # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
+B108;H2 # Lo HANGUL SYLLABLE NEO
+B109..B123;H3 # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
+B124;H2 # Lo HANGUL SYLLABLE NE
+B125..B13F;H3 # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
+B140;H2 # Lo HANGUL SYLLABLE NYEO
+B141..B15B;H3 # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
+B15C;H2 # Lo HANGUL SYLLABLE NYE
+B15D..B177;H3 # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
+B178;H2 # Lo HANGUL SYLLABLE NO
+B179..B193;H3 # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
+B194;H2 # Lo HANGUL SYLLABLE NWA
+B195..B1AF;H3 # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
+B1B0;H2 # Lo HANGUL SYLLABLE NWAE
+B1B1..B1CB;H3 # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
+B1CC;H2 # Lo HANGUL SYLLABLE NOE
+B1CD..B1E7;H3 # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
+B1E8;H2 # Lo HANGUL SYLLABLE NYO
+B1E9..B203;H3 # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
+B204;H2 # Lo HANGUL SYLLABLE NU
+B205..B21F;H3 # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
+B220;H2 # Lo HANGUL SYLLABLE NWEO
+B221..B23B;H3 # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
+B23C;H2 # Lo HANGUL SYLLABLE NWE
+B23D..B257;H3 # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
+B258;H2 # Lo HANGUL SYLLABLE NWI
+B259..B273;H3 # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
+B274;H2 # Lo HANGUL SYLLABLE NYU
+B275..B28F;H3 # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
+B290;H2 # Lo HANGUL SYLLABLE NEU
+B291..B2AB;H3 # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
+B2AC;H2 # Lo HANGUL SYLLABLE NYI
+B2AD..B2C7;H3 # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
+B2C8;H2 # Lo HANGUL SYLLABLE NI
+B2C9..B2E3;H3 # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
+B2E4;H2 # Lo HANGUL SYLLABLE DA
+B2E5..B2FF;H3 # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
+B300;H2 # Lo HANGUL SYLLABLE DAE
+B301..B31B;H3 # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
+B31C;H2 # Lo HANGUL SYLLABLE DYA
+B31D..B337;H3 # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
+B338;H2 # Lo HANGUL SYLLABLE DYAE
+B339..B353;H3 # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
+B354;H2 # Lo HANGUL SYLLABLE DEO
+B355..B36F;H3 # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
+B370;H2 # Lo HANGUL SYLLABLE DE
+B371..B38B;H3 # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
+B38C;H2 # Lo HANGUL SYLLABLE DYEO
+B38D..B3A7;H3 # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
+B3A8;H2 # Lo HANGUL SYLLABLE DYE
+B3A9..B3C3;H3 # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
+B3C4;H2 # Lo HANGUL SYLLABLE DO
+B3C5..B3DF;H3 # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
+B3E0;H2 # Lo HANGUL SYLLABLE DWA
+B3E1..B3FB;H3 # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
+B3FC;H2 # Lo HANGUL SYLLABLE DWAE
+B3FD..B417;H3 # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
+B418;H2 # Lo HANGUL SYLLABLE DOE
+B419..B433;H3 # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
+B434;H2 # Lo HANGUL SYLLABLE DYO
+B435..B44F;H3 # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
+B450;H2 # Lo HANGUL SYLLABLE DU
+B451..B46B;H3 # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
+B46C;H2 # Lo HANGUL SYLLABLE DWEO
+B46D..B487;H3 # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
+B488;H2 # Lo HANGUL SYLLABLE DWE
+B489..B4A3;H3 # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
+B4A4;H2 # Lo HANGUL SYLLABLE DWI
+B4A5..B4BF;H3 # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
+B4C0;H2 # Lo HANGUL SYLLABLE DYU
+B4C1..B4DB;H3 # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
+B4DC;H2 # Lo HANGUL SYLLABLE DEU
+B4DD..B4F7;H3 # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
+B4F8;H2 # Lo HANGUL SYLLABLE DYI
+B4F9..B513;H3 # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
+B514;H2 # Lo HANGUL SYLLABLE DI
+B515..B52F;H3 # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
+B530;H2 # Lo HANGUL SYLLABLE DDA
+B531..B54B;H3 # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
+B54C;H2 # Lo HANGUL SYLLABLE DDAE
+B54D..B567;H3 # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
+B568;H2 # Lo HANGUL SYLLABLE DDYA
+B569..B583;H3 # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
+B584;H2 # Lo HANGUL SYLLABLE DDYAE
+B585..B59F;H3 # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
+B5A0;H2 # Lo HANGUL SYLLABLE DDEO
+B5A1..B5BB;H3 # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
+B5BC;H2 # Lo HANGUL SYLLABLE DDE
+B5BD..B5D7;H3 # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
+B5D8;H2 # Lo HANGUL SYLLABLE DDYEO
+B5D9..B5F3;H3 # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
+B5F4;H2 # Lo HANGUL SYLLABLE DDYE
+B5F5..B60F;H3 # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
+B610;H2 # Lo HANGUL SYLLABLE DDO
+B611..B62B;H3 # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
+B62C;H2 # Lo HANGUL SYLLABLE DDWA
+B62D..B647;H3 # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
+B648;H2 # Lo HANGUL SYLLABLE DDWAE
+B649..B663;H3 # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
+B664;H2 # Lo HANGUL SYLLABLE DDOE
+B665..B67F;H3 # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
+B680;H2 # Lo HANGUL SYLLABLE DDYO
+B681..B69B;H3 # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
+B69C;H2 # Lo HANGUL SYLLABLE DDU
+B69D..B6B7;H3 # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
+B6B8;H2 # Lo HANGUL SYLLABLE DDWEO
+B6B9..B6D3;H3 # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
+B6D4;H2 # Lo HANGUL SYLLABLE DDWE
+B6D5..B6EF;H3 # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
+B6F0;H2 # Lo HANGUL SYLLABLE DDWI
+B6F1..B70B;H3 # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
+B70C;H2 # Lo HANGUL SYLLABLE DDYU
+B70D..B727;H3 # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
+B728;H2 # Lo HANGUL SYLLABLE DDEU
+B729..B743;H3 # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
+B744;H2 # Lo HANGUL SYLLABLE DDYI
+B745..B75F;H3 # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
+B760;H2 # Lo HANGUL SYLLABLE DDI
+B761..B77B;H3 # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
+B77C;H2 # Lo HANGUL SYLLABLE RA
+B77D..B797;H3 # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
+B798;H2 # Lo HANGUL SYLLABLE RAE
+B799..B7B3;H3 # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
+B7B4;H2 # Lo HANGUL SYLLABLE RYA
+B7B5..B7CF;H3 # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
+B7D0;H2 # Lo HANGUL SYLLABLE RYAE
+B7D1..B7EB;H3 # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
+B7EC;H2 # Lo HANGUL SYLLABLE REO
+B7ED..B807;H3 # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
+B808;H2 # Lo HANGUL SYLLABLE RE
+B809..B823;H3 # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
+B824;H2 # Lo HANGUL SYLLABLE RYEO
+B825..B83F;H3 # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
+B840;H2 # Lo HANGUL SYLLABLE RYE
+B841..B85B;H3 # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
+B85C;H2 # Lo HANGUL SYLLABLE RO
+B85D..B877;H3 # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
+B878;H2 # Lo HANGUL SYLLABLE RWA
+B879..B893;H3 # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
+B894;H2 # Lo HANGUL SYLLABLE RWAE
+B895..B8AF;H3 # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
+B8B0;H2 # Lo HANGUL SYLLABLE ROE
+B8B1..B8CB;H3 # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
+B8CC;H2 # Lo HANGUL SYLLABLE RYO
+B8CD..B8E7;H3 # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
+B8E8;H2 # Lo HANGUL SYLLABLE RU
+B8E9..B903;H3 # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
+B904;H2 # Lo HANGUL SYLLABLE RWEO
+B905..B91F;H3 # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
+B920;H2 # Lo HANGUL SYLLABLE RWE
+B921..B93B;H3 # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
+B93C;H2 # Lo HANGUL SYLLABLE RWI
+B93D..B957;H3 # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
+B958;H2 # Lo HANGUL SYLLABLE RYU
+B959..B973;H3 # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
+B974;H2 # Lo HANGUL SYLLABLE REU
+B975..B98F;H3 # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
+B990;H2 # Lo HANGUL SYLLABLE RYI
+B991..B9AB;H3 # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
+B9AC;H2 # Lo HANGUL SYLLABLE RI
+B9AD..B9C7;H3 # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
+B9C8;H2 # Lo HANGUL SYLLABLE MA
+B9C9..B9E3;H3 # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
+B9E4;H2 # Lo HANGUL SYLLABLE MAE
+B9E5..B9FF;H3 # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
+BA00;H2 # Lo HANGUL SYLLABLE MYA
+BA01..BA1B;H3 # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
+BA1C;H2 # Lo HANGUL SYLLABLE MYAE
+BA1D..BA37;H3 # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
+BA38;H2 # Lo HANGUL SYLLABLE MEO
+BA39..BA53;H3 # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
+BA54;H2 # Lo HANGUL SYLLABLE ME
+BA55..BA6F;H3 # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
+BA70;H2 # Lo HANGUL SYLLABLE MYEO
+BA71..BA8B;H3 # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
+BA8C;H2 # Lo HANGUL SYLLABLE MYE
+BA8D..BAA7;H3 # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
+BAA8;H2 # Lo HANGUL SYLLABLE MO
+BAA9..BAC3;H3 # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
+BAC4;H2 # Lo HANGUL SYLLABLE MWA
+BAC5..BADF;H3 # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
+BAE0;H2 # Lo HANGUL SYLLABLE MWAE
+BAE1..BAFB;H3 # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
+BAFC;H2 # Lo HANGUL SYLLABLE MOE
+BAFD..BB17;H3 # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
+BB18;H2 # Lo HANGUL SYLLABLE MYO
+BB19..BB33;H3 # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
+BB34;H2 # Lo HANGUL SYLLABLE MU
+BB35..BB4F;H3 # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
+BB50;H2 # Lo HANGUL SYLLABLE MWEO
+BB51..BB6B;H3 # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
+BB6C;H2 # Lo HANGUL SYLLABLE MWE
+BB6D..BB87;H3 # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
+BB88;H2 # Lo HANGUL SYLLABLE MWI
+BB89..BBA3;H3 # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
+BBA4;H2 # Lo HANGUL SYLLABLE MYU
+BBA5..BBBF;H3 # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
+BBC0;H2 # Lo HANGUL SYLLABLE MEU
+BBC1..BBDB;H3 # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
+BBDC;H2 # Lo HANGUL SYLLABLE MYI
+BBDD..BBF7;H3 # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
+BBF8;H2 # Lo HANGUL SYLLABLE MI
+BBF9..BC13;H3 # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
+BC14;H2 # Lo HANGUL SYLLABLE BA
+BC15..BC2F;H3 # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
+BC30;H2 # Lo HANGUL SYLLABLE BAE
+BC31..BC4B;H3 # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
+BC4C;H2 # Lo HANGUL SYLLABLE BYA
+BC4D..BC67;H3 # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
+BC68;H2 # Lo HANGUL SYLLABLE BYAE
+BC69..BC83;H3 # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
+BC84;H2 # Lo HANGUL SYLLABLE BEO
+BC85..BC9F;H3 # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
+BCA0;H2 # Lo HANGUL SYLLABLE BE
+BCA1..BCBB;H3 # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
+BCBC;H2 # Lo HANGUL SYLLABLE BYEO
+BCBD..BCD7;H3 # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
+BCD8;H2 # Lo HANGUL SYLLABLE BYE
+BCD9..BCF3;H3 # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
+BCF4;H2 # Lo HANGUL SYLLABLE BO
+BCF5..BD0F;H3 # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
+BD10;H2 # Lo HANGUL SYLLABLE BWA
+BD11..BD2B;H3 # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
+BD2C;H2 # Lo HANGUL SYLLABLE BWAE
+BD2D..BD47;H3 # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
+BD48;H2 # Lo HANGUL SYLLABLE BOE
+BD49..BD63;H3 # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
+BD64;H2 # Lo HANGUL SYLLABLE BYO
+BD65..BD7F;H3 # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
+BD80;H2 # Lo HANGUL SYLLABLE BU
+BD81..BD9B;H3 # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
+BD9C;H2 # Lo HANGUL SYLLABLE BWEO
+BD9D..BDB7;H3 # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
+BDB8;H2 # Lo HANGUL SYLLABLE BWE
+BDB9..BDD3;H3 # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
+BDD4;H2 # Lo HANGUL SYLLABLE BWI
+BDD5..BDEF;H3 # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
+BDF0;H2 # Lo HANGUL SYLLABLE BYU
+BDF1..BE0B;H3 # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
+BE0C;H2 # Lo HANGUL SYLLABLE BEU
+BE0D..BE27;H3 # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
+BE28;H2 # Lo HANGUL SYLLABLE BYI
+BE29..BE43;H3 # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
+BE44;H2 # Lo HANGUL SYLLABLE BI
+BE45..BE5F;H3 # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
+BE60;H2 # Lo HANGUL SYLLABLE BBA
+BE61..BE7B;H3 # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
+BE7C;H2 # Lo HANGUL SYLLABLE BBAE
+BE7D..BE97;H3 # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
+BE98;H2 # Lo HANGUL SYLLABLE BBYA
+BE99..BEB3;H3 # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
+BEB4;H2 # Lo HANGUL SYLLABLE BBYAE
+BEB5..BECF;H3 # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
+BED0;H2 # Lo HANGUL SYLLABLE BBEO
+BED1..BEEB;H3 # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
+BEEC;H2 # Lo HANGUL SYLLABLE BBE
+BEED..BF07;H3 # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
+BF08;H2 # Lo HANGUL SYLLABLE BBYEO
+BF09..BF23;H3 # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
+BF24;H2 # Lo HANGUL SYLLABLE BBYE
+BF25..BF3F;H3 # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
+BF40;H2 # Lo HANGUL SYLLABLE BBO
+BF41..BF5B;H3 # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
+BF5C;H2 # Lo HANGUL SYLLABLE BBWA
+BF5D..BF77;H3 # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
+BF78;H2 # Lo HANGUL SYLLABLE BBWAE
+BF79..BF93;H3 # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
+BF94;H2 # Lo HANGUL SYLLABLE BBOE
+BF95..BFAF;H3 # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
+BFB0;H2 # Lo HANGUL SYLLABLE BBYO
+BFB1..BFCB;H3 # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
+BFCC;H2 # Lo HANGUL SYLLABLE BBU
+BFCD..BFE7;H3 # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
+BFE8;H2 # Lo HANGUL SYLLABLE BBWEO
+BFE9..C003;H3 # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
+C004;H2 # Lo HANGUL SYLLABLE BBWE
+C005..C01F;H3 # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
+C020;H2 # Lo HANGUL SYLLABLE BBWI
+C021..C03B;H3 # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
+C03C;H2 # Lo HANGUL SYLLABLE BBYU
+C03D..C057;H3 # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
+C058;H2 # Lo HANGUL SYLLABLE BBEU
+C059..C073;H3 # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
+C074;H2 # Lo HANGUL SYLLABLE BBYI
+C075..C08F;H3 # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
+C090;H2 # Lo HANGUL SYLLABLE BBI
+C091..C0AB;H3 # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
+C0AC;H2 # Lo HANGUL SYLLABLE SA
+C0AD..C0C7;H3 # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
+C0C8;H2 # Lo HANGUL SYLLABLE SAE
+C0C9..C0E3;H3 # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
+C0E4;H2 # Lo HANGUL SYLLABLE SYA
+C0E5..C0FF;H3 # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
+C100;H2 # Lo HANGUL SYLLABLE SYAE
+C101..C11B;H3 # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
+C11C;H2 # Lo HANGUL SYLLABLE SEO
+C11D..C137;H3 # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
+C138;H2 # Lo HANGUL SYLLABLE SE
+C139..C153;H3 # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
+C154;H2 # Lo HANGUL SYLLABLE SYEO
+C155..C16F;H3 # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
+C170;H2 # Lo HANGUL SYLLABLE SYE
+C171..C18B;H3 # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
+C18C;H2 # Lo HANGUL SYLLABLE SO
+C18D..C1A7;H3 # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
+C1A8;H2 # Lo HANGUL SYLLABLE SWA
+C1A9..C1C3;H3 # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
+C1C4;H2 # Lo HANGUL SYLLABLE SWAE
+C1C5..C1DF;H3 # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
+C1E0;H2 # Lo HANGUL SYLLABLE SOE
+C1E1..C1FB;H3 # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
+C1FC;H2 # Lo HANGUL SYLLABLE SYO
+C1FD..C217;H3 # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
+C218;H2 # Lo HANGUL SYLLABLE SU
+C219..C233;H3 # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
+C234;H2 # Lo HANGUL SYLLABLE SWEO
+C235..C24F;H3 # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
+C250;H2 # Lo HANGUL SYLLABLE SWE
+C251..C26B;H3 # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
+C26C;H2 # Lo HANGUL SYLLABLE SWI
+C26D..C287;H3 # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
+C288;H2 # Lo HANGUL SYLLABLE SYU
+C289..C2A3;H3 # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
+C2A4;H2 # Lo HANGUL SYLLABLE SEU
+C2A5..C2BF;H3 # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
+C2C0;H2 # Lo HANGUL SYLLABLE SYI
+C2C1..C2DB;H3 # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
+C2DC;H2 # Lo HANGUL SYLLABLE SI
+C2DD..C2F7;H3 # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
+C2F8;H2 # Lo HANGUL SYLLABLE SSA
+C2F9..C313;H3 # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
+C314;H2 # Lo HANGUL SYLLABLE SSAE
+C315..C32F;H3 # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
+C330;H2 # Lo HANGUL SYLLABLE SSYA
+C331..C34B;H3 # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
+C34C;H2 # Lo HANGUL SYLLABLE SSYAE
+C34D..C367;H3 # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
+C368;H2 # Lo HANGUL SYLLABLE SSEO
+C369..C383;H3 # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
+C384;H2 # Lo HANGUL SYLLABLE SSE
+C385..C39F;H3 # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
+C3A0;H2 # Lo HANGUL SYLLABLE SSYEO
+C3A1..C3BB;H3 # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
+C3BC;H2 # Lo HANGUL SYLLABLE SSYE
+C3BD..C3D7;H3 # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
+C3D8;H2 # Lo HANGUL SYLLABLE SSO
+C3D9..C3F3;H3 # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
+C3F4;H2 # Lo HANGUL SYLLABLE SSWA
+C3F5..C40F;H3 # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
+C410;H2 # Lo HANGUL SYLLABLE SSWAE
+C411..C42B;H3 # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
+C42C;H2 # Lo HANGUL SYLLABLE SSOE
+C42D..C447;H3 # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
+C448;H2 # Lo HANGUL SYLLABLE SSYO
+C449..C463;H3 # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
+C464;H2 # Lo HANGUL SYLLABLE SSU
+C465..C47F;H3 # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
+C480;H2 # Lo HANGUL SYLLABLE SSWEO
+C481..C49B;H3 # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
+C49C;H2 # Lo HANGUL SYLLABLE SSWE
+C49D..C4B7;H3 # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
+C4B8;H2 # Lo HANGUL SYLLABLE SSWI
+C4B9..C4D3;H3 # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
+C4D4;H2 # Lo HANGUL SYLLABLE SSYU
+C4D5..C4EF;H3 # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
+C4F0;H2 # Lo HANGUL SYLLABLE SSEU
+C4F1..C50B;H3 # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
+C50C;H2 # Lo HANGUL SYLLABLE SSYI
+C50D..C527;H3 # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
+C528;H2 # Lo HANGUL SYLLABLE SSI
+C529..C543;H3 # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
+C544;H2 # Lo HANGUL SYLLABLE A
+C545..C55F;H3 # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
+C560;H2 # Lo HANGUL SYLLABLE AE
+C561..C57B;H3 # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
+C57C;H2 # Lo HANGUL SYLLABLE YA
+C57D..C597;H3 # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
+C598;H2 # Lo HANGUL SYLLABLE YAE
+C599..C5B3;H3 # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
+C5B4;H2 # Lo HANGUL SYLLABLE EO
+C5B5..C5CF;H3 # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
+C5D0;H2 # Lo HANGUL SYLLABLE E
+C5D1..C5EB;H3 # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
+C5EC;H2 # Lo HANGUL SYLLABLE YEO
+C5ED..C607;H3 # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
+C608;H2 # Lo HANGUL SYLLABLE YE
+C609..C623;H3 # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
+C624;H2 # Lo HANGUL SYLLABLE O
+C625..C63F;H3 # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
+C640;H2 # Lo HANGUL SYLLABLE WA
+C641..C65B;H3 # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
+C65C;H2 # Lo HANGUL SYLLABLE WAE
+C65D..C677;H3 # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
+C678;H2 # Lo HANGUL SYLLABLE OE
+C679..C693;H3 # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
+C694;H2 # Lo HANGUL SYLLABLE YO
+C695..C6AF;H3 # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
+C6B0;H2 # Lo HANGUL SYLLABLE U
+C6B1..C6CB;H3 # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
+C6CC;H2 # Lo HANGUL SYLLABLE WEO
+C6CD..C6E7;H3 # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
+C6E8;H2 # Lo HANGUL SYLLABLE WE
+C6E9..C703;H3 # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
+C704;H2 # Lo HANGUL SYLLABLE WI
+C705..C71F;H3 # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
+C720;H2 # Lo HANGUL SYLLABLE YU
+C721..C73B;H3 # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
+C73C;H2 # Lo HANGUL SYLLABLE EU
+C73D..C757;H3 # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
+C758;H2 # Lo HANGUL SYLLABLE YI
+C759..C773;H3 # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
+C774;H2 # Lo HANGUL SYLLABLE I
+C775..C78F;H3 # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
+C790;H2 # Lo HANGUL SYLLABLE JA
+C791..C7AB;H3 # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
+C7AC;H2 # Lo HANGUL SYLLABLE JAE
+C7AD..C7C7;H3 # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
+C7C8;H2 # Lo HANGUL SYLLABLE JYA
+C7C9..C7E3;H3 # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
+C7E4;H2 # Lo HANGUL SYLLABLE JYAE
+C7E5..C7FF;H3 # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
+C800;H2 # Lo HANGUL SYLLABLE JEO
+C801..C81B;H3 # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
+C81C;H2 # Lo HANGUL SYLLABLE JE
+C81D..C837;H3 # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
+C838;H2 # Lo HANGUL SYLLABLE JYEO
+C839..C853;H3 # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
+C854;H2 # Lo HANGUL SYLLABLE JYE
+C855..C86F;H3 # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
+C870;H2 # Lo HANGUL SYLLABLE JO
+C871..C88B;H3 # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
+C88C;H2 # Lo HANGUL SYLLABLE JWA
+C88D..C8A7;H3 # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
+C8A8;H2 # Lo HANGUL SYLLABLE JWAE
+C8A9..C8C3;H3 # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
+C8C4;H2 # Lo HANGUL SYLLABLE JOE
+C8C5..C8DF;H3 # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
+C8E0;H2 # Lo HANGUL SYLLABLE JYO
+C8E1..C8FB;H3 # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
+C8FC;H2 # Lo HANGUL SYLLABLE JU
+C8FD..C917;H3 # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
+C918;H2 # Lo HANGUL SYLLABLE JWEO
+C919..C933;H3 # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
+C934;H2 # Lo HANGUL SYLLABLE JWE
+C935..C94F;H3 # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
+C950;H2 # Lo HANGUL SYLLABLE JWI
+C951..C96B;H3 # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
+C96C;H2 # Lo HANGUL SYLLABLE JYU
+C96D..C987;H3 # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
+C988;H2 # Lo HANGUL SYLLABLE JEU
+C989..C9A3;H3 # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
+C9A4;H2 # Lo HANGUL SYLLABLE JYI
+C9A5..C9BF;H3 # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
+C9C0;H2 # Lo HANGUL SYLLABLE JI
+C9C1..C9DB;H3 # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
+C9DC;H2 # Lo HANGUL SYLLABLE JJA
+C9DD..C9F7;H3 # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
+C9F8;H2 # Lo HANGUL SYLLABLE JJAE
+C9F9..CA13;H3 # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
+CA14;H2 # Lo HANGUL SYLLABLE JJYA
+CA15..CA2F;H3 # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
+CA30;H2 # Lo HANGUL SYLLABLE JJYAE
+CA31..CA4B;H3 # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
+CA4C;H2 # Lo HANGUL SYLLABLE JJEO
+CA4D..CA67;H3 # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
+CA68;H2 # Lo HANGUL SYLLABLE JJE
+CA69..CA83;H3 # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
+CA84;H2 # Lo HANGUL SYLLABLE JJYEO
+CA85..CA9F;H3 # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
+CAA0;H2 # Lo HANGUL SYLLABLE JJYE
+CAA1..CABB;H3 # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
+CABC;H2 # Lo HANGUL SYLLABLE JJO
+CABD..CAD7;H3 # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
+CAD8;H2 # Lo HANGUL SYLLABLE JJWA
+CAD9..CAF3;H3 # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
+CAF4;H2 # Lo HANGUL SYLLABLE JJWAE
+CAF5..CB0F;H3 # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
+CB10;H2 # Lo HANGUL SYLLABLE JJOE
+CB11..CB2B;H3 # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
+CB2C;H2 # Lo HANGUL SYLLABLE JJYO
+CB2D..CB47;H3 # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
+CB48;H2 # Lo HANGUL SYLLABLE JJU
+CB49..CB63;H3 # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
+CB64;H2 # Lo HANGUL SYLLABLE JJWEO
+CB65..CB7F;H3 # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
+CB80;H2 # Lo HANGUL SYLLABLE JJWE
+CB81..CB9B;H3 # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
+CB9C;H2 # Lo HANGUL SYLLABLE JJWI
+CB9D..CBB7;H3 # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
+CBB8;H2 # Lo HANGUL SYLLABLE JJYU
+CBB9..CBD3;H3 # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
+CBD4;H2 # Lo HANGUL SYLLABLE JJEU
+CBD5..CBEF;H3 # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
+CBF0;H2 # Lo HANGUL SYLLABLE JJYI
+CBF1..CC0B;H3 # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
+CC0C;H2 # Lo HANGUL SYLLABLE JJI
+CC0D..CC27;H3 # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
+CC28;H2 # Lo HANGUL SYLLABLE CA
+CC29..CC43;H3 # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
+CC44;H2 # Lo HANGUL SYLLABLE CAE
+CC45..CC5F;H3 # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
+CC60;H2 # Lo HANGUL SYLLABLE CYA
+CC61..CC7B;H3 # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
+CC7C;H2 # Lo HANGUL SYLLABLE CYAE
+CC7D..CC97;H3 # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
+CC98;H2 # Lo HANGUL SYLLABLE CEO
+CC99..CCB3;H3 # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
+CCB4;H2 # Lo HANGUL SYLLABLE CE
+CCB5..CCCF;H3 # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
+CCD0;H2 # Lo HANGUL SYLLABLE CYEO
+CCD1..CCEB;H3 # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
+CCEC;H2 # Lo HANGUL SYLLABLE CYE
+CCED..CD07;H3 # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
+CD08;H2 # Lo HANGUL SYLLABLE CO
+CD09..CD23;H3 # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
+CD24;H2 # Lo HANGUL SYLLABLE CWA
+CD25..CD3F;H3 # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
+CD40;H2 # Lo HANGUL SYLLABLE CWAE
+CD41..CD5B;H3 # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
+CD5C;H2 # Lo HANGUL SYLLABLE COE
+CD5D..CD77;H3 # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
+CD78;H2 # Lo HANGUL SYLLABLE CYO
+CD79..CD93;H3 # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
+CD94;H2 # Lo HANGUL SYLLABLE CU
+CD95..CDAF;H3 # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
+CDB0;H2 # Lo HANGUL SYLLABLE CWEO
+CDB1..CDCB;H3 # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
+CDCC;H2 # Lo HANGUL SYLLABLE CWE
+CDCD..CDE7;H3 # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
+CDE8;H2 # Lo HANGUL SYLLABLE CWI
+CDE9..CE03;H3 # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
+CE04;H2 # Lo HANGUL SYLLABLE CYU
+CE05..CE1F;H3 # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
+CE20;H2 # Lo HANGUL SYLLABLE CEU
+CE21..CE3B;H3 # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
+CE3C;H2 # Lo HANGUL SYLLABLE CYI
+CE3D..CE57;H3 # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
+CE58;H2 # Lo HANGUL SYLLABLE CI
+CE59..CE73;H3 # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
+CE74;H2 # Lo HANGUL SYLLABLE KA
+CE75..CE8F;H3 # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
+CE90;H2 # Lo HANGUL SYLLABLE KAE
+CE91..CEAB;H3 # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
+CEAC;H2 # Lo HANGUL SYLLABLE KYA
+CEAD..CEC7;H3 # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
+CEC8;H2 # Lo HANGUL SYLLABLE KYAE
+CEC9..CEE3;H3 # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
+CEE4;H2 # Lo HANGUL SYLLABLE KEO
+CEE5..CEFF;H3 # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
+CF00;H2 # Lo HANGUL SYLLABLE KE
+CF01..CF1B;H3 # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
+CF1C;H2 # Lo HANGUL SYLLABLE KYEO
+CF1D..CF37;H3 # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
+CF38;H2 # Lo HANGUL SYLLABLE KYE
+CF39..CF53;H3 # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
+CF54;H2 # Lo HANGUL SYLLABLE KO
+CF55..CF6F;H3 # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
+CF70;H2 # Lo HANGUL SYLLABLE KWA
+CF71..CF8B;H3 # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
+CF8C;H2 # Lo HANGUL SYLLABLE KWAE
+CF8D..CFA7;H3 # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
+CFA8;H2 # Lo HANGUL SYLLABLE KOE
+CFA9..CFC3;H3 # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
+CFC4;H2 # Lo HANGUL SYLLABLE KYO
+CFC5..CFDF;H3 # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
+CFE0;H2 # Lo HANGUL SYLLABLE KU
+CFE1..CFFB;H3 # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
+CFFC;H2 # Lo HANGUL SYLLABLE KWEO
+CFFD..D017;H3 # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
+D018;H2 # Lo HANGUL SYLLABLE KWE
+D019..D033;H3 # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
+D034;H2 # Lo HANGUL SYLLABLE KWI
+D035..D04F;H3 # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
+D050;H2 # Lo HANGUL SYLLABLE KYU
+D051..D06B;H3 # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
+D06C;H2 # Lo HANGUL SYLLABLE KEU
+D06D..D087;H3 # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
+D088;H2 # Lo HANGUL SYLLABLE KYI
+D089..D0A3;H3 # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
+D0A4;H2 # Lo HANGUL SYLLABLE KI
+D0A5..D0BF;H3 # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
+D0C0;H2 # Lo HANGUL SYLLABLE TA
+D0C1..D0DB;H3 # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
+D0DC;H2 # Lo HANGUL SYLLABLE TAE
+D0DD..D0F7;H3 # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
+D0F8;H2 # Lo HANGUL SYLLABLE TYA
+D0F9..D113;H3 # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
+D114;H2 # Lo HANGUL SYLLABLE TYAE
+D115..D12F;H3 # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
+D130;H2 # Lo HANGUL SYLLABLE TEO
+D131..D14B;H3 # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
+D14C;H2 # Lo HANGUL SYLLABLE TE
+D14D..D167;H3 # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
+D168;H2 # Lo HANGUL SYLLABLE TYEO
+D169..D183;H3 # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
+D184;H2 # Lo HANGUL SYLLABLE TYE
+D185..D19F;H3 # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
+D1A0;H2 # Lo HANGUL SYLLABLE TO
+D1A1..D1BB;H3 # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
+D1BC;H2 # Lo HANGUL SYLLABLE TWA
+D1BD..D1D7;H3 # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
+D1D8;H2 # Lo HANGUL SYLLABLE TWAE
+D1D9..D1F3;H3 # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
+D1F4;H2 # Lo HANGUL SYLLABLE TOE
+D1F5..D20F;H3 # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
+D210;H2 # Lo HANGUL SYLLABLE TYO
+D211..D22B;H3 # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
+D22C;H2 # Lo HANGUL SYLLABLE TU
+D22D..D247;H3 # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
+D248;H2 # Lo HANGUL SYLLABLE TWEO
+D249..D263;H3 # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
+D264;H2 # Lo HANGUL SYLLABLE TWE
+D265..D27F;H3 # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
+D280;H2 # Lo HANGUL SYLLABLE TWI
+D281..D29B;H3 # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
+D29C;H2 # Lo HANGUL SYLLABLE TYU
+D29D..D2B7;H3 # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
+D2B8;H2 # Lo HANGUL SYLLABLE TEU
+D2B9..D2D3;H3 # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
+D2D4;H2 # Lo HANGUL SYLLABLE TYI
+D2D5..D2EF;H3 # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
+D2F0;H2 # Lo HANGUL SYLLABLE TI
+D2F1..D30B;H3 # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
+D30C;H2 # Lo HANGUL SYLLABLE PA
+D30D..D327;H3 # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
+D328;H2 # Lo HANGUL SYLLABLE PAE
+D329..D343;H3 # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
+D344;H2 # Lo HANGUL SYLLABLE PYA
+D345..D35F;H3 # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
+D360;H2 # Lo HANGUL SYLLABLE PYAE
+D361..D37B;H3 # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
+D37C;H2 # Lo HANGUL SYLLABLE PEO
+D37D..D397;H3 # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
+D398;H2 # Lo HANGUL SYLLABLE PE
+D399..D3B3;H3 # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
+D3B4;H2 # Lo HANGUL SYLLABLE PYEO
+D3B5..D3CF;H3 # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
+D3D0;H2 # Lo HANGUL SYLLABLE PYE
+D3D1..D3EB;H3 # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
+D3EC;H2 # Lo HANGUL SYLLABLE PO
+D3ED..D407;H3 # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
+D408;H2 # Lo HANGUL SYLLABLE PWA
+D409..D423;H3 # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
+D424;H2 # Lo HANGUL SYLLABLE PWAE
+D425..D43F;H3 # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
+D440;H2 # Lo HANGUL SYLLABLE POE
+D441..D45B;H3 # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
+D45C;H2 # Lo HANGUL SYLLABLE PYO
+D45D..D477;H3 # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
+D478;H2 # Lo HANGUL SYLLABLE PU
+D479..D493;H3 # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
+D494;H2 # Lo HANGUL SYLLABLE PWEO
+D495..D4AF;H3 # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
+D4B0;H2 # Lo HANGUL SYLLABLE PWE
+D4B1..D4CB;H3 # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
+D4CC;H2 # Lo HANGUL SYLLABLE PWI
+D4CD..D4E7;H3 # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
+D4E8;H2 # Lo HANGUL SYLLABLE PYU
+D4E9..D503;H3 # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
+D504;H2 # Lo HANGUL SYLLABLE PEU
+D505..D51F;H3 # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
+D520;H2 # Lo HANGUL SYLLABLE PYI
+D521..D53B;H3 # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
+D53C;H2 # Lo HANGUL SYLLABLE PI
+D53D..D557;H3 # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
+D558;H2 # Lo HANGUL SYLLABLE HA
+D559..D573;H3 # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
+D574;H2 # Lo HANGUL SYLLABLE HAE
+D575..D58F;H3 # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
+D590;H2 # Lo HANGUL SYLLABLE HYA
+D591..D5AB;H3 # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
+D5AC;H2 # Lo HANGUL SYLLABLE HYAE
+D5AD..D5C7;H3 # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
+D5C8;H2 # Lo HANGUL SYLLABLE HEO
+D5C9..D5E3;H3 # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
+D5E4;H2 # Lo HANGUL SYLLABLE HE
+D5E5..D5FF;H3 # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
+D600;H2 # Lo HANGUL SYLLABLE HYEO
+D601..D61B;H3 # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
+D61C;H2 # Lo HANGUL SYLLABLE HYE
+D61D..D637;H3 # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
+D638;H2 # Lo HANGUL SYLLABLE HO
+D639..D653;H3 # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
+D654;H2 # Lo HANGUL SYLLABLE HWA
+D655..D66F;H3 # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
+D670;H2 # Lo HANGUL SYLLABLE HWAE
+D671..D68B;H3 # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
+D68C;H2 # Lo HANGUL SYLLABLE HOE
+D68D..D6A7;H3 # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
+D6A8;H2 # Lo HANGUL SYLLABLE HYO
+D6A9..D6C3;H3 # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
+D6C4;H2 # Lo HANGUL SYLLABLE HU
+D6C5..D6DF;H3 # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
+D6E0;H2 # Lo HANGUL SYLLABLE HWEO
+D6E1..D6FB;H3 # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
+D6FC;H2 # Lo HANGUL SYLLABLE HWE
+D6FD..D717;H3 # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
+D718;H2 # Lo HANGUL SYLLABLE HWI
+D719..D733;H3 # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
+D734;H2 # Lo HANGUL SYLLABLE HYU
+D735..D74F;H3 # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
+D750;H2 # Lo HANGUL SYLLABLE HEU
+D751..D76B;H3 # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
+D76C;H2 # Lo HANGUL SYLLABLE HYI
+D76D..D787;H3 # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
+D788;H2 # Lo HANGUL SYLLABLE HI
+D789..D7A3;H3 # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
+D7B0..D7C6;JV # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB;JT # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+D800..DB7F;SG # Cs [896] <surrogate-D800>..<surrogate-DB7F>
+DB80..DBFF;SG # Cs [128] <surrogate-DB80>..<surrogate-DBFF>
+DC00..DFFF;SG # Cs [1024] <surrogate-DC00>..<surrogate-DFFF>
+E000..F8FF;XX # Co [6400] <private-use-E000>..<private-use-F8FF>
+F900..FA6D;ID # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA6E..FA6F;ID # Cn [2] <reserved-FA6E>..<reserved-FA6F>
+FA70..FAD9;ID # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FADA..FAFF;ID # Cn [38] <reserved-FADA>..<reserved-FAFF>
+FB00..FB06;AL # Ll [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17;AL # Ll [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D;HL # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E;CM # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28;HL # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29;AL # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36;HL # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C;HL # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E;HL # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41;HL # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44;HL # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F;HL # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+FB50..FBB1;AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBB2..FBC1;AL # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
+FBD3..FD3D;AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E;CL # Pe ORNATE LEFT PARENTHESIS
+FD3F;OP # Ps ORNATE RIGHT PARENTHESIS
+FD50..FD8F;AL # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7;AL # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB;AL # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC;PO # Sc RIAL SIGN
+FDFD;AL # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE00..FE0F;CM # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE10;IS # Po PRESENTATION FORM FOR VERTICAL COMMA
+FE11..FE12;CL # Po [2] PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA..PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13..FE14;IS # Po [2] PRESENTATION FORM FOR VERTICAL COLON..PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15..FE16;EX # Po [2] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE20..FE2F;CM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FE30;ID # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32;ID # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34;ID # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46;ID # Po [2] SESAME DOT..WHITE SESAME DOT
+FE47;OP # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48;CL # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C;ID # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F;ID # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50;CL # Po SMALL COMMA
+FE51;ID # Po SMALL IDEOGRAPHIC COMMA
+FE52;CL # Po SMALL FULL STOP
+FE54..FE55;NS # Po [2] SMALL SEMICOLON..SMALL COLON
+FE56..FE57;EX # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
+FE58;ID # Pd SMALL EM DASH
+FE59;OP # Ps SMALL LEFT PARENTHESIS
+FE5A;CL # Pe SMALL RIGHT PARENTHESIS
+FE5B;OP # Ps SMALL LEFT CURLY BRACKET
+FE5C;CL # Pe SMALL RIGHT CURLY BRACKET
+FE5D;OP # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E;CL # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61;ID # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62;ID # Sm SMALL PLUS SIGN
+FE63;ID # Pd SMALL HYPHEN-MINUS
+FE64..FE66;ID # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68;ID # Po SMALL REVERSE SOLIDUS
+FE69;PR # Sc SMALL DOLLAR SIGN
+FE6A;PO # Po SMALL PERCENT SIGN
+FE6B;ID # Po SMALL COMMERCIAL AT
+FE70..FE74;AL # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC;AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF;WJ # Cf ZERO WIDTH NO-BREAK SPACE
+FF01;EX # Po FULLWIDTH EXCLAMATION MARK
+FF02..FF03;ID # Po [2] FULLWIDTH QUOTATION MARK..FULLWIDTH NUMBER SIGN
+FF04;PR # Sc FULLWIDTH DOLLAR SIGN
+FF05;PO # Po FULLWIDTH PERCENT SIGN
+FF06..FF07;ID # Po [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE
+FF08;OP # Ps FULLWIDTH LEFT PARENTHESIS
+FF09;CL # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A;ID # Po FULLWIDTH ASTERISK
+FF0B;ID # Sm FULLWIDTH PLUS SIGN
+FF0C;CL # Po FULLWIDTH COMMA
+FF0D;ID # Pd FULLWIDTH HYPHEN-MINUS
+FF0E;CL # Po FULLWIDTH FULL STOP
+FF0F;ID # Po FULLWIDTH SOLIDUS
+FF10..FF19;ID # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B;NS # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E;ID # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F;EX # Po FULLWIDTH QUESTION MARK
+FF20;ID # Po FULLWIDTH COMMERCIAL AT
+FF21..FF3A;ID # Lu [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B;OP # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C;ID # Po FULLWIDTH REVERSE SOLIDUS
+FF3D;CL # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E;ID # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F;ID # Pc FULLWIDTH LOW LINE
+FF40;ID # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A;ID # Ll [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B;OP # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C;ID # Sm FULLWIDTH VERTICAL LINE
+FF5D;CL # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E;ID # Sm FULLWIDTH TILDE
+FF5F;OP # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60;CL # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61;CL # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62;OP # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63;CL # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64;CL # Po HALFWIDTH IDEOGRAPHIC COMMA
+FF65;NS # Po HALFWIDTH KATAKANA MIDDLE DOT
+FF66;ID # Lo HALFWIDTH KATAKANA LETTER WO
+FF67..FF6F;CJ # Lo [9] HALFWIDTH KATAKANA LETTER SMALL A..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70;CJ # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D;ID # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F;NS # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE;ID # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7;ID # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF;ID # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7;ID # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC;ID # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0;PO # Sc FULLWIDTH CENT SIGN
+FFE1;PR # Sc FULLWIDTH POUND SIGN
+FFE2;ID # Sm FULLWIDTH NOT SIGN
+FFE3;ID # Sk FULLWIDTH MACRON
+FFE4;ID # So FULLWIDTH BROKEN BAR
+FFE5..FFE6;PR # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8;AL # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC;AL # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE;AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF9..FFFB;CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC;CB # So OBJECT REPLACEMENT CHARACTER
+FFFD;AI # So REPLACEMENT CHARACTER
+10000..1000B;AL # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026;AL # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A;AL # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D;AL # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D;AL # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D;AL # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA;AL # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10100..10102;BA # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+10107..10133;AL # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F;AL # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10140..10174;AL # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178;AL # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189;AL # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A..1018B;AL # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
+1018C..1018E;AL # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
+10190..1019B;AL # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+101A0;AL # So GREEK SYMBOL TAU RHO
+101D0..101FC;AL # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+101FD;CM # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280..1029C;AL # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0;AL # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+102E0;CM # Mn COPTIC EPACT THOUSANDS MARK
+102E1..102FB;AL # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+10300..1031F;AL # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+10320..10323;AL # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1032D..1032F;AL # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
+10330..10340;AL # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341;AL # Nl GOTHIC LETTER NINETY
+10342..10349;AL # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A;AL # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375;AL # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10376..1037A;CM # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10380..1039D;AL # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F;BA # Po UGARITIC WORD DIVIDER
+103A0..103C3;AL # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF;AL # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0;BA # Po OLD PERSIAN WORD DIVIDER
+103D1..103D5;AL # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F;AL # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1047F;AL # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
+10480..1049D;AL # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
+104A0..104A9;NU # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+104B0..104D3;AL # Lu [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB;AL # Ll [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527;AL # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563;AL # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+1056F;AL # Po CAUCASIAN ALBANIAN CITATION MARK
+10600..10736;AL # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755;AL # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767;AL # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10800..10805;AL # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808;AL # Lo CYPRIOT SYLLABLE JO
+1080A..10835;AL # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838;AL # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C;AL # Lo CYPRIOT SYLLABLE ZA
+1083F;AL # Lo CYPRIOT SYLLABLE ZO
+10840..10855;AL # Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
+10857;BA # Po IMPERIAL ARAMAIC SECTION SIGN
+10858..1085F;AL # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10860..10876;AL # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10877..10878;AL # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
+10879..1087F;AL # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
+10880..1089E;AL # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108A7..108AF;AL # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+108E0..108F2;AL # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5;AL # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+108FB..108FF;AL # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+10900..10915;AL # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10916..1091B;AL # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+1091F;BA # Po PHOENICIAN WORD SEPARATOR
+10920..10939;AL # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+1093F;AL # Po LYDIAN TRIANGULAR MARK
+10980..1099F;AL # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
+109A0..109B7;AL # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+109BC..109BD;AL # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+109BE..109BF;AL # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+109C0..109CF;AL # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF;AL # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+10A00;AL # Lo KHAROSHTHI LETTER A
+10A01..10A03;CM # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06;CM # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F;CM # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13;AL # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17;AL # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35;AL # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A38..10A3A;CM # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F;CM # Mn KHAROSHTHI VIRAMA
+10A40..10A48;AL # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
+10A50..10A57;BA # Po [8] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58;AL # Po KHAROSHTHI PUNCTUATION LINES
+10A60..10A7C;AL # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A7D..10A7E;AL # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F;AL # Po OLD SOUTH ARABIAN NUMERIC INDICATOR
+10A80..10A9C;AL # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10A9D..10A9F;AL # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+10AC0..10AC7;AL # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC8;AL # So MANICHAEAN SIGN UD
+10AC9..10AE4;AL # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10AE5..10AE6;CM # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10AEB..10AEF;AL # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
+10AF0..10AF5;BA # Po [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS
+10AF6;IN # Po MANICHAEAN PUNCTUATION LINE FILLER
+10B00..10B35;AL # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B39..10B3F;BA # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B40..10B55;AL # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58..10B5F;AL # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B60..10B72;AL # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78..10B7F;AL # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10B80..10B91;AL # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10B99..10B9C;AL # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10BA9..10BAF;AL # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+10C00..10C48;AL # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2;AL # Lu [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2;AL # Ll [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10CFA..10CFF;AL # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+10D00..10D23;AL # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27;CM # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39;NU # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E60..10E7E;AL # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10F00..10F1C;AL # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F1D..10F26;AL # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F27;AL # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45;AL # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50;CM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F51..10F54;AL # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10F55..10F59;AL # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FE0..10FF6;AL # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000;CM # Mc BRAHMI SIGN CANDRABINDU
+11001;CM # Mn BRAHMI SIGN ANUSVARA
+11002;CM # Mc BRAHMI SIGN VISARGA
+11003..11037;AL # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11038..11046;CM # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11047..11048;BA # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
+11049..1104D;AL # Po [5] BRAHMI PUNCTUATION DOT..BRAHMI PUNCTUATION LOTUS
+11052..11065;AL # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+11066..1106F;NU # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+1107F;CM # Mn BRAHMI NUMBER JOINER
+11080..11081;CM # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+11082;CM # Mc KAITHI SIGN VISARGA
+11083..110AF;AL # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2;CM # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6;CM # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8;CM # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA;CM # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110BB..110BC;AL # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BD;AL # Cf KAITHI NUMBER SIGN
+110BE..110C1;BA # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+110CD;AL # Cf KAITHI NUMBER SIGN ABOVE
+110D0..110E8;AL # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9;NU # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+11100..11102;CM # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126;AL # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B;CM # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C;CM # Mc CHAKMA VOWEL SIGN E
+1112D..11134;CM # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11136..1113F;NU # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11140..11143;BA # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+11144;AL # Lo CHAKMA LETTER LHAA
+11145..11146;CM # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11150..11172;AL # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11173;CM # Mn MAHAJANI SIGN NUKTA
+11174;AL # Po MAHAJANI ABBREVIATION SIGN
+11175;BB # Po MAHAJANI SECTION MARK
+11176;AL # Lo MAHAJANI LIGATURE SHRI
+11180..11181;CM # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182;CM # Mc SHARADA SIGN VISARGA
+11183..111B2;AL # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5;CM # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE;CM # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF..111C0;CM # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4;AL # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C5..111C6;BA # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
+111C7;AL # Po SHARADA ABBREVIATION SIGN
+111C8;BA # Po SHARADA SEPARATOR
+111C9..111CC;CM # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CD;AL # Po SHARADA SUTRA MARK
+111D0..111D9;NU # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA;AL # Lo SHARADA EKAM
+111DB;BB # Po SHARADA SIGN SIDDHAM
+111DC;AL # Lo SHARADA HEADSTROKE
+111DD..111DF;BA # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+111E1..111F4;AL # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+11200..11211;AL # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B;AL # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E;CM # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231;CM # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233;CM # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234;CM # Mn KHOJKI SIGN ANUSVARA
+11235;CM # Mc KHOJKI SIGN VIRAMA
+11236..11237;CM # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+11238..11239;BA # Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
+1123A;AL # Po KHOJKI WORD SEPARATOR
+1123B..1123C;BA # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
+1123D;AL # Po KHOJKI ABBREVIATION SIGN
+1123E;CM # Mn KHOJKI SIGN SUKUN
+11280..11286;AL # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288;AL # Lo MULTANI LETTER GHA
+1128A..1128D;AL # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D;AL # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8;AL # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112A9;BA # Po MULTANI SECTION MARK
+112B0..112DE;AL # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112DF;CM # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2;CM # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112EA;CM # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+112F0..112F9;NU # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11300..11301;CM # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303;CM # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C;AL # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310;AL # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328;AL # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330;AL # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333;AL # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339;AL # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133B..1133C;CM # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+1133D;AL # Lo GRANTHA SIGN AVAGRAHA
+1133E..1133F;CM # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340;CM # Mn GRANTHA VOWEL SIGN II
+11341..11344;CM # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348;CM # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D;CM # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350;AL # Lo GRANTHA OM
+11357;CM # Mc GRANTHA AU LENGTH MARK
+1135D..11361;AL # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363;CM # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11366..1136C;CM # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374;CM # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11400..11434;AL # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437;CM # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F;CM # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441;CM # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444;CM # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445;CM # Mc NEWA SIGN VISARGA
+11446;CM # Mn NEWA SIGN NUKTA
+11447..1144A;AL # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1144B..1144E;BA # Po [4] NEWA DANDA..NEWA GAP FILLER
+1144F;AL # Po NEWA ABBREVIATION SIGN
+11450..11459;NU # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145B;BA # Po NEWA PLACEHOLDER MARK
+1145D;AL # Po NEWA INSERTION SIGN
+1145E;CM # Mn NEWA SANDHI MARK
+1145F;AL # Lo NEWA LETTER VEDIC ANUSVARA
+11480..114AF;AL # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B0..114B2;CM # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8;CM # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9;CM # Mc TIRHUTA VOWEL SIGN E
+114BA;CM # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE;CM # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0;CM # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1;CM # Mc TIRHUTA SIGN VISARGA
+114C2..114C3;CM # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+114C4..114C5;AL # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C6;AL # Po TIRHUTA ABBREVIATION SIGN
+114C7;AL # Lo TIRHUTA OM
+114D0..114D9;NU # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+11580..115AE;AL # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115AF..115B1;CM # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5;CM # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB;CM # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD;CM # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE;CM # Mc SIDDHAM SIGN VISARGA
+115BF..115C0;CM # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115C1;BB # Po SIDDHAM SIGN SIDDHAM
+115C2..115C3;BA # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
+115C4..115C5;EX # Po [2] SIDDHAM SEPARATOR DOT..SIDDHAM SEPARATOR BAR
+115C6..115C8;AL # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3
+115C9..115D7;BA # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+115D8..115DB;AL # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD;CM # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11600..1162F;AL # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632;CM # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A;CM # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C;CM # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D;CM # Mn MODI SIGN ANUSVARA
+1163E;CM # Mc MODI SIGN VISARGA
+1163F..11640;CM # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+11641..11642;BA # Po [2] MODI DANDA..MODI DOUBLE DANDA
+11643;AL # Po MODI ABBREVIATION SIGN
+11644;AL # Lo MODI SIGN HUVA
+11650..11659;NU # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11660..1166C;BB # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+11680..116AA;AL # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB;CM # Mn TAKRI SIGN ANUSVARA
+116AC;CM # Mc TAKRI SIGN VISARGA
+116AD;CM # Mn TAKRI VOWEL SIGN AA
+116AE..116AF;CM # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5;CM # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B6;CM # Mc TAKRI SIGN VIRAMA
+116B7;CM # Mn TAKRI SIGN NUKTA
+116B8;AL # Lo TAKRI LETTER ARCHAIC KHA
+116C0..116C9;NU # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+11700..1171A;SA # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+1171D..1171F;SA # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721;SA # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725;SA # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726;SA # Mc AHOM VOWEL SIGN E
+11727..1172B;SA # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739;NU # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+1173A..1173B;SA # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+1173C..1173E;BA # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+1173F;SA # So AHOM SYMBOL VI
+11800..1182B;AL # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E;CM # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837;CM # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838;CM # Mc DOGRA SIGN VISARGA
+11839..1183A;CM # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1183B;AL # Po DOGRA ABBREVIATION SIGN
+118A0..118DF;AL # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118E0..118E9;NU # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+118EA..118F2;AL # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+118FF;AL # Lo WARANG CITI OM
+119A0..119A7;AL # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0;AL # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3;CM # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7;CM # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB;CM # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF;CM # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E0;CM # Mn NANDINAGARI SIGN VIRAMA
+119E1;AL # Lo NANDINAGARI SIGN AVAGRAHA
+119E2;BB # Po NANDINAGARI SIGN SIDDHAM
+119E3;AL # Lo NANDINAGARI HEADSTROKE
+119E4;CM # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00;AL # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A0A;CM # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32;AL # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38;CM # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39;CM # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A;AL # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E;CM # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A3F;BB # Po ZANABAZAR SQUARE INITIAL HEAD MARK
+11A40;AL # Po ZANABAZAR SQUARE CLOSING HEAD MARK
+11A41..11A44;BA # Po [4] ZANABAZAR SQUARE MARK TSHEG..ZANABAZAR SQUARE MARK LONG TSHEG
+11A45;BB # Po ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK
+11A46;AL # Po ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A47;CM # Mn ZANABAZAR SQUARE SUBJOINER
+11A50;AL # Lo SOYOMBO LETTER A
+11A51..11A56;CM # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58;CM # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B;CM # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A89;AL # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96;CM # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97;CM # Mc SOYOMBO SIGN VISARGA
+11A98..11A99;CM # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9A..11A9C;BA # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9D;AL # Lo SOYOMBO MARK PLUTA
+11A9E..11AA0;BB # Po [3] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO HEAD MARK WITH MOON AND SUN
+11AA1..11AA2;BA # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
+11AC0..11AF8;AL # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08;AL # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E;AL # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F;CM # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36;CM # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D;CM # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E;CM # Mc BHAIKSUKI SIGN VISARGA
+11C3F;CM # Mn BHAIKSUKI SIGN VIRAMA
+11C40;AL # Lo BHAIKSUKI SIGN AVAGRAHA
+11C41..11C45;BA # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C50..11C59;NU # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C5A..11C6C;AL # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+11C70;BB # Po MARCHEN HEAD MARK
+11C71;EX # Po MARCHEN MARK SHAD
+11C72..11C8F;AL # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7;CM # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9;CM # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0;CM # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1;CM # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3;CM # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4;CM # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6;CM # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D00..11D06;AL # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09;AL # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30;AL # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36;CM # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A;CM # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D;CM # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45;CM # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46;AL # Lo MASARAM GONDI REPHA
+11D47;CM # Mn MASARAM GONDI RA-KARA
+11D50..11D59;NU # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+11D60..11D65;AL # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68;AL # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89;AL # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E;CM # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91;CM # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94;CM # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95;CM # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96;CM # Mc GUNJALA GONDI SIGN VISARGA
+11D97;CM # Mn GUNJALA GONDI VIRAMA
+11D98;AL # Lo GUNJALA GONDI OM
+11DA0..11DA9;NU # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+11EE0..11EF2;AL # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4;CM # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6;CM # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11EF7..11EF8;AL # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FC0..11FD4;AL # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+11FD5..11FDC;AL # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
+11FDD..11FE0;PO # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
+11FE1..11FF1;AL # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
+11FFF;BA # Po TAMIL PUNCTUATION END OF TEXT
+12000..12399;AL # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E;AL # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12470..12474;BA # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+12480..12543;AL # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+13000..13257;AL # Lo [600] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH O006
+13258..1325A;OP # Lo [3] EGYPTIAN HIEROGLYPH O006A..EGYPTIAN HIEROGLYPH O006C
+1325B..1325D;CL # Lo [3] EGYPTIAN HIEROGLYPH O006D..EGYPTIAN HIEROGLYPH O006F
+1325E..13281;AL # Lo [36] EGYPTIAN HIEROGLYPH O007..EGYPTIAN HIEROGLYPH O033
+13282;CL # Lo EGYPTIAN HIEROGLYPH O033A
+13283..13285;AL # Lo [3] EGYPTIAN HIEROGLYPH O034..EGYPTIAN HIEROGLYPH O036
+13286;OP # Lo EGYPTIAN HIEROGLYPH O036A
+13287;CL # Lo EGYPTIAN HIEROGLYPH O036B
+13288;OP # Lo EGYPTIAN HIEROGLYPH O036C
+13289;CL # Lo EGYPTIAN HIEROGLYPH O036D
+1328A..13378;AL # Lo [239] EGYPTIAN HIEROGLYPH O037..EGYPTIAN HIEROGLYPH V011
+13379;OP # Lo EGYPTIAN HIEROGLYPH V011A
+1337A..1337B;CL # Lo [2] EGYPTIAN HIEROGLYPH V011B..EGYPTIAN HIEROGLYPH V011C
+1337C..1342E;AL # Lo [179] EGYPTIAN HIEROGLYPH V012..EGYPTIAN HIEROGLYPH AA032
+13430..13436;GL # Cf [7] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH OVERLAY MIDDLE
+13437;OP # Cf EGYPTIAN HIEROGLYPH BEGIN SEGMENT
+13438;CL # Cf EGYPTIAN HIEROGLYPH END SEGMENT
+14400..145CD;AL # Lo [462] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A409
+145CE;OP # Lo ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK
+145CF;CL # Lo ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK
+145D0..14646;AL # Lo [119] ANATOLIAN HIEROGLYPH A411..ANATOLIAN HIEROGLYPH A530
+16800..16A38;AL # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E;AL # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69;NU # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
+16A6E..16A6F;BA # Po [2] MRO DANDA..MRO DOUBLE DANDA
+16AD0..16AED;AL # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF0..16AF4;CM # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16AF5;BA # Po BASSA VAH FULL STOP
+16B00..16B2F;AL # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B30..16B36;CM # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16B37..16B39;BA # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
+16B3A..16B3B;AL # Po [2] PAHAWH HMONG SIGN VOS THIAB..PAHAWH HMONG SIGN VOS FEEM
+16B3C..16B3F;AL # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
+16B40..16B43;AL # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B44;BA # Po PAHAWH HMONG SIGN XAUS
+16B45;AL # So PAHAWH HMONG SIGN CIM TSOV ROG
+16B50..16B59;NU # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B5B..16B61;AL # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+16B63..16B77;AL # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F;AL # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F;AL # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16E80..16E96;AL # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+16E97..16E98;BA # Po [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP
+16E99..16E9A;AL # Po [2] MEDEFAIDRIN SYMBOL AIVA..MEDEFAIDRIN EXCLAMATION OH
+16F00..16F4A;AL # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F4F;CM # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F50;AL # Lo MIAO LETTER NASALIZATION
+16F51..16F87;CM # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92;CM # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F;AL # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1;NS # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE2;NS # Po OLD CHINESE HOOK MARK
+16FE3;NS # Lm OLD CHINESE ITERATION MARK
+17000..187F7;ID # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18AF2;ID # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+1B000..1B0FF;ID # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
+1B100..1B11E;ID # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
+1B150..1B152;CJ # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167;CJ # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB;ID # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A;AL # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C;AL # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88;AL # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99;AL # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9C;AL # So DUPLOYAN SIGN O WITH CROSS
+1BC9D..1BC9E;CM # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1BC9F;BA # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1BCA0..1BCA3;CM # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D000..1D0F5;AL # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126;AL # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129..1D164;AL # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165..1D166;CM # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167..1D169;CM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A..1D16C;AL # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D..1D172;CM # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D173..1D17A;CM # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D17B..1D182;CM # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D183..1D184;AL # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185..1D18B;CM # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C..1D1A9;AL # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AA..1D1AD;CM # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE..1D1E8;AL # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D200..1D241;AL # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242..1D244;CM # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D245;AL # So GREEK MUSICAL LEIMMA
+1D2E0..1D2F3;AL # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+1D300..1D356;AL # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D360..1D378;AL # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
+1D400..1D454;AL # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C;AL # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F;AL # Lu [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2;AL # Lu MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6;AL # Lu [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC;AL # Lu [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9;AL # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB;AL # Ll MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3;AL # Ll [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505;AL # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A;AL # Lu [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514;AL # Lu [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C;AL # Lu [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539;AL # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E;AL # Lu [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544;AL # Lu [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546;AL # Lu MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550;AL # Lu [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5;AL # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0;AL # Lu [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1;AL # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA;AL # Ll [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB;AL # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA;AL # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB;AL # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714;AL # Ll [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715;AL # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734;AL # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735;AL # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E;AL # Ll [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F;AL # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E;AL # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F;AL # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788;AL # Ll [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789;AL # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8;AL # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9;AL # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2;AL # Ll [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3;AL # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB;AL # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF;NU # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1D800..1D9FF;AL # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA00..1DA36;CM # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA37..1DA3A;AL # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA3B..1DA6C;CM # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA6D..1DA74;AL # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA75;CM # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA76..1DA83;AL # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA84;CM # Mn SIGNWRITING LOCATION HEAD NECK
+1DA85..1DA86;AL # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+1DA87..1DA8A;BA # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
+1DA8B;AL # Po SIGNWRITING PARENTHESIS
+1DA9B..1DA9F;CM # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF;CM # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006;CM # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018;CM # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021;CM # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024;CM # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A;CM # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E100..1E12C;AL # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E130..1E136;CM # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E137..1E13D;AL # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149;NU # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E;AL # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E14F;AL # So NYIAKENG PUACHUE HMONG CIRCLED CA
+1E2C0..1E2EB;AL # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E2EC..1E2EF;CM # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E2F0..1E2F9;NU # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+1E2FF;PR # Sc WANCHO NGUN SIGN
+1E800..1E8C4;AL # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8C7..1E8CF;AL # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+1E8D0..1E8D6;CM # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E900..1E943;AL # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A;CM # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E94B;AL # Lm ADLAM NASALIZATION MARK
+1E950..1E959;NU # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F;OP # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+1EC71..1ECAB;AL # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+1ECAC;PO # So INDIC SIYAQ PLACEHOLDER
+1ECAD..1ECAF;AL # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB0;PO # Sc INDIC SIYAQ RUPEE MARK
+1ECB1..1ECB4;AL # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+1ED01..1ED2D;AL # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+1ED2E;AL # So OTTOMAN SIYAQ MARRATAN
+1ED2F..1ED3D;AL # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
+1EE00..1EE03;AL # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F;AL # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22;AL # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24;AL # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27;AL # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32;AL # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37;AL # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39;AL # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B;AL # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42;AL # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47;AL # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49;AL # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B;AL # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F;AL # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52;AL # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54;AL # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57;AL # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59;AL # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B;AL # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D;AL # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F;AL # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62;AL # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64;AL # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A;AL # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72;AL # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77;AL # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C;AL # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E;AL # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89;AL # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B;AL # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3;AL # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9;AL # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB;AL # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1EEF0..1EEF1;AL # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+1F000..1F02B;ID # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F02C..1F02F;ID # Cn [4] <reserved-1F02C>..<reserved-1F02F>
+1F030..1F093;ID # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F094..1F09F;ID # Cn [12] <reserved-1F094>..<reserved-1F09F>
+1F0A0..1F0AE;ID # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0AF..1F0B0;ID # Cn [2] <reserved-1F0AF>..<reserved-1F0B0>
+1F0B1..1F0BF;ID # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+1F0C0;ID # Cn <reserved-1F0C0>
+1F0C1..1F0CF;ID # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
+1F0D0;ID # Cn <reserved-1F0D0>
+1F0D1..1F0F5;ID # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+1F0F6..1F0FF;ID # Cn [10] <reserved-1F0F6>..<reserved-1F0FF>
+1F100..1F10C;AI # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F10F;ID # Cn [3] <reserved-1F10D>..<reserved-1F10F>
+1F110..1F12D;AI # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
+1F12E..1F12F;AL # So [2] CIRCLED WZ..COPYLEFT SYMBOL
+1F130..1F169;AI # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F16A..1F16C;AL # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F16D..1F16F;ID # Cn [3] <reserved-1F16D>..<reserved-1F16F>
+1F170..1F1AC;AI # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F1AD..1F1E5;ID # Cn [57] <reserved-1F1AD>..<reserved-1F1E5>
+1F1E6..1F1FF;RI # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+1F200..1F202;ID # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
+1F203..1F20F;ID # Cn [13] <reserved-1F203>..<reserved-1F20F>
+1F210..1F23B;ID # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F23C..1F23F;ID # Cn [4] <reserved-1F23C>..<reserved-1F23F>
+1F240..1F248;ID # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F249..1F24F;ID # Cn [7] <reserved-1F249>..<reserved-1F24F>
+1F250..1F251;ID # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1F252..1F25F;ID # Cn [14] <reserved-1F252>..<reserved-1F25F>
+1F260..1F265;ID # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F266..1F2FF;ID # Cn [154] <reserved-1F266>..<reserved-1F2FF>
+1F300..1F384;ID # So [133] CYCLONE..CHRISTMAS TREE
+1F385;EB # So FATHER CHRISTMAS
+1F386..1F39B;ID # So [22] FIREWORKS..CONTROL KNOBS
+1F39C..1F39D;AL # So [2] BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
+1F39E..1F3B4;ID # So [23] FILM FRAMES..FLOWER PLAYING CARDS
+1F3B5..1F3B6;AL # So [2] MUSICAL NOTE..MULTIPLE MUSICAL NOTES
+1F3B7..1F3BB;ID # So [5] SAXOPHONE..VIOLIN
+1F3BC;AL # So MUSICAL SCORE
+1F3BD..1F3C1;ID # So [5] RUNNING SHIRT WITH SASH..CHEQUERED FLAG
+1F3C2..1F3C4;EB # So [3] SNOWBOARDER..SURFER
+1F3C5..1F3C6;ID # So [2] SPORTS MEDAL..TROPHY
+1F3C7;EB # So HORSE RACING
+1F3C8..1F3C9;ID # So [2] AMERICAN FOOTBALL..RUGBY FOOTBALL
+1F3CA..1F3CC;EB # So [3] SWIMMER..GOLFER
+1F3CD..1F3FA;ID # So [46] RACING MOTORCYCLE..AMPHORA
+1F3FB..1F3FF;EM # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F441;ID # So [66] RAT..EYE
+1F442..1F443;EB # So [2] EAR..NOSE
+1F444..1F445;ID # So [2] MOUTH..TONGUE
+1F446..1F450;EB # So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN
+1F451..1F465;ID # So [21] CROWN..BUSTS IN SILHOUETTE
+1F466..1F478;EB # So [19] BOY..PRINCESS
+1F479..1F47B;ID # So [3] JAPANESE OGRE..GHOST
+1F47C;EB # So BABY ANGEL
+1F47D..1F480;ID # So [4] EXTRATERRESTRIAL ALIEN..SKULL
+1F481..1F483;EB # So [3] INFORMATION DESK PERSON..DANCER
+1F484;ID # So LIPSTICK
+1F485..1F487;EB # So [3] NAIL POLISH..HAIRCUT
+1F488..1F48E;ID # So [7] BARBER POLE..GEM STONE
+1F48F;EB # So KISS
+1F490;ID # So BOUQUET
+1F491;EB # So COUPLE WITH HEART
+1F492..1F49F;ID # So [14] WEDDING..HEART DECORATION
+1F4A0;AL # So DIAMOND SHAPE WITH A DOT INSIDE
+1F4A1;ID # So ELECTRIC LIGHT BULB
+1F4A2;AL # So ANGER SYMBOL
+1F4A3;ID # So BOMB
+1F4A4;AL # So SLEEPING SYMBOL
+1F4A5..1F4A9;ID # So [5] COLLISION SYMBOL..PILE OF POO
+1F4AA;EB # So FLEXED BICEPS
+1F4AB..1F4AE;ID # So [4] DIZZY SYMBOL..WHITE FLOWER
+1F4AF;AL # So HUNDRED POINTS SYMBOL
+1F4B0;ID # So MONEY BAG
+1F4B1..1F4B2;AL # So [2] CURRENCY EXCHANGE..HEAVY DOLLAR SIGN
+1F4B3..1F4FF;ID # So [77] CREDIT CARD..PRAYER BEADS
+1F500..1F506;AL # So [7] TWISTED RIGHTWARDS ARROWS..HIGH BRIGHTNESS SYMBOL
+1F507..1F516;ID # So [16] SPEAKER WITH CANCELLATION STROKE..BOOKMARK
+1F517..1F524;AL # So [14] LINK SYMBOL..INPUT SYMBOL FOR LATIN LETTERS
+1F525..1F531;ID # So [13] FIRE..TRIDENT EMBLEM
+1F532..1F549;AL # So [24] BLACK SQUARE BUTTON..OM SYMBOL
+1F54A..1F573;ID # So [42] DOVE OF PEACE..HOLE
+1F574..1F575;EB # So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY
+1F576..1F579;ID # So [4] DARK SUNGLASSES..JOYSTICK
+1F57A;EB # So MAN DANCING
+1F57B..1F58F;ID # So [21] LEFT HAND TELEPHONE RECEIVER..TURNED OK HAND SIGN
+1F590;EB # So RAISED HAND WITH FINGERS SPLAYED
+1F591..1F594;ID # So [4] REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
+1F595..1F596;EB # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+1F597..1F5D3;ID # So [61] WHITE DOWN POINTING LEFT HAND INDEX..SPIRAL CALENDAR PAD
+1F5D4..1F5DB;AL # So [8] DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
+1F5DC..1F5F3;ID # So [24] COMPRESSION..BALLOT BOX WITH BALLOT
+1F5F4..1F5F9;AL # So [6] BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
+1F5FA..1F5FF;ID # So [6] WORLD MAP..MOYAI
+1F600..1F644;ID # So [69] GRINNING FACE..FACE WITH ROLLING EYES
+1F645..1F647;EB # So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY
+1F648..1F64A;ID # So [3] SEE-NO-EVIL MONKEY..SPEAK-NO-EVIL MONKEY
+1F64B..1F64F;EB # So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS
+1F650..1F675;AL # So [38] NORTH WEST POINTING LEAF..SWASH AMPERSAND ORNAMENT
+1F676..1F678;QU # So [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+1F679..1F67B;NS # So [3] HEAVY INTERROBANG ORNAMENT..HEAVY SANS-SERIF INTERROBANG ORNAMENT
+1F67C..1F67F;AL # So [4] VERY HEAVY SOLIDUS..REVERSE CHECKER BOARD
+1F680..1F6A2;ID # So [35] ROCKET..SHIP
+1F6A3;EB # So ROWBOAT
+1F6A4..1F6B3;ID # So [16] SPEEDBOAT..NO BICYCLES
+1F6B4..1F6B6;EB # So [3] BICYCLIST..PEDESTRIAN
+1F6B7..1F6BF;ID # So [9] NO PEDESTRIANS..SHOWER
+1F6C0;EB # So BATH
+1F6C1..1F6CB;ID # So [11] BATHTUB..COUCH AND LAMP
+1F6CC;EB # So SLEEPING ACCOMMODATION
+1F6CD..1F6D5;ID # So [9] SHOPPING BAGS..HINDU TEMPLE
+1F6D6..1F6DF;ID # Cn [10] <reserved-1F6D6>..<reserved-1F6DF>
+1F6E0..1F6EC;ID # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
+1F6ED..1F6EF;ID # Cn [3] <reserved-1F6ED>..<reserved-1F6EF>
+1F6F0..1F6FA;ID # So [11] SATELLITE..AUTO RICKSHAW
+1F6FB..1F6FF;ID # Cn [5] <reserved-1F6FB>..<reserved-1F6FF>
+1F700..1F773;AL # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F774..1F77F;ID # Cn [12] <reserved-1F774>..<reserved-1F77F>
+1F780..1F7D4;AL # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
+1F7D5..1F7D8;ID # So [4] CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE
+1F7D9..1F7DF;ID # Cn [7] <reserved-1F7D9>..<reserved-1F7DF>
+1F7E0..1F7EB;ID # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+1F7EC..1F7FF;ID # Cn [20] <reserved-1F7EC>..<reserved-1F7FF>
+1F800..1F80B;AL # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F80C..1F80F;ID # Cn [4] <reserved-1F80C>..<reserved-1F80F>
+1F810..1F847;AL # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+1F848..1F84F;ID # Cn [8] <reserved-1F848>..<reserved-1F84F>
+1F850..1F859;AL # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+1F85A..1F85F;ID # Cn [6] <reserved-1F85A>..<reserved-1F85F>
+1F860..1F887;AL # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F888..1F88F;ID # Cn [8] <reserved-1F888>..<reserved-1F88F>
+1F890..1F8AD;AL # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F8AE..1F8FF;ID # Cn [82] <reserved-1F8AE>..<reserved-1F8FF>
+1F900..1F90B;AL # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F90C;ID # Cn <reserved-1F90C>
+1F90D..1F90E;ID # So [2] WHITE HEART..BROWN HEART
+1F90F;EB # So PINCHING HAND
+1F910..1F917;ID # So [8] ZIPPER-MOUTH FACE..HUGGING FACE
+1F918..1F91F;EB # So [8] SIGN OF THE HORNS..I LOVE YOU HAND SIGN
+1F920..1F925;ID # So [6] FACE WITH COWBOY HAT..LYING FACE
+1F926;EB # So FACE PALM
+1F927..1F92F;ID # So [9] SNEEZING FACE..SHOCKED FACE WITH EXPLODING HEAD
+1F930..1F939;EB # So [10] PREGNANT WOMAN..JUGGLING
+1F93A..1F93B;ID # So [2] FENCER..MODERN PENTATHLON
+1F93C..1F93E;EB # So [3] WRESTLERS..HANDBALL
+1F93F..1F971;ID # So [51] DIVING MASK..YAWNING FACE
+1F972;ID # Cn <reserved-1F972>
+1F973..1F976;ID # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
+1F977..1F979;ID # Cn [3] <reserved-1F977>..<reserved-1F979>
+1F97A..1F9A2;ID # So [41] FACE WITH PLEADING EYES..SWAN
+1F9A3..1F9A4;ID # Cn [2] <reserved-1F9A3>..<reserved-1F9A4>
+1F9A5..1F9AA;ID # So [6] SLOTH..OYSTER
+1F9AB..1F9AD;ID # Cn [3] <reserved-1F9AB>..<reserved-1F9AD>
+1F9AE..1F9B4;ID # So [7] GUIDE DOG..BONE
+1F9B5..1F9B6;EB # So [2] LEG..FOOT
+1F9B7;ID # So TOOTH
+1F9B8..1F9B9;EB # So [2] SUPERHERO..SUPERVILLAIN
+1F9BA;ID # So SAFETY VEST
+1F9BB;EB # So EAR WITH HEARING AID
+1F9BC..1F9CA;ID # So [15] MOTORIZED WHEELCHAIR..ICE CUBE
+1F9CB..1F9CC;ID # Cn [2] <reserved-1F9CB>..<reserved-1F9CC>
+1F9CD..1F9CF;EB # So [3] STANDING PERSON..DEAF PERSON
+1F9D0;ID # So FACE WITH MONOCLE
+1F9D1..1F9DD;EB # So [13] ADULT..ELF
+1F9DE..1F9FF;ID # So [34] GENIE..NAZAR AMULET
+1FA00..1FA53;AL # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
+1FA54..1FA5F;ID # Cn [12] <reserved-1FA54>..<reserved-1FA5F>
+1FA60..1FA6D;ID # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FA6E..1FA6F;ID # Cn [2] <reserved-1FA6E>..<reserved-1FA6F>
+1FA70..1FA73;ID # So [4] BALLET SHOES..SHORTS
+1FA74..1FA77;ID # Cn [4] <reserved-1FA74>..<reserved-1FA77>
+1FA78..1FA7A;ID # So [3] DROP OF BLOOD..STETHOSCOPE
+1FA7B..1FA7F;ID # Cn [5] <reserved-1FA7B>..<reserved-1FA7F>
+1FA80..1FA82;ID # So [3] YO-YO..PARACHUTE
+1FA83..1FA8F;ID # Cn [13] <reserved-1FA83>..<reserved-1FA8F>
+1FA90..1FA95;ID # So [6] RINGED PLANET..BANJO
+1FA96..1FAFF;ID # Cn [106] <reserved-1FA96>..<reserved-1FAFF>
+1FB00..1FFFD;ID # Cn [1278] <reserved-1FB00>..<reserved-1FFFD>
+20000..2A6D6;ID # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A6D7..2A6FF;ID # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
+2A700..2B734;ID # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B735..2B73F;ID # Cn [11] <reserved-2B735>..<reserved-2B73F>
+2B740..2B81D;ID # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B81E..2B81F;ID # Cn [2] <reserved-2B81E>..<reserved-2B81F>
+2B820..2CEA1;ID # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEA2..2CEAF;ID # Cn [14] <reserved-2CEA2>..<reserved-2CEAF>
+2CEB0..2EBE0;ID # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2EBE1..2F7FF;ID # Cn [3103] <reserved-2EBE1>..<reserved-2F7FF>
+2F800..2FA1D;ID # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+2FA1E..2FA1F;ID # Cn [2] <reserved-2FA1E>..<reserved-2FA1F>
+2FA20..2FFFD;ID # Cn [1502] <reserved-2FA20>..<reserved-2FFFD>
+30000..3FFFD;ID # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+E0001;CM # Cf LANGUAGE TAG
+E0020..E007F;CM # Cf [96] TAG SPACE..CANCEL TAG
+E0100..E01EF;CM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+F0000..FFFFD;XX # Co [65534] <private-use-F0000>..<private-use-FFFFD>
+100000..10FFFD;XX # Co [65534] <private-use-100000>..<private-use-10FFFD>
+
+# EOF
diff --git a/macros/generic/unicode-data/MathClass-15.txt b/macros/generic/unicode-data/MathClass-15.txt
new file mode 100644
index 0000000000..458431abca
--- /dev/null
+++ b/macros/generic/unicode-data/MathClass-15.txt
@@ -0,0 +1,1591 @@
+# File: MathClass.txt
+# Revision: 15
+# Date: 2017-06-01, 12:35:00 GMT
+#
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr25/
+#
+# ------------------------------------------------
+# This file is a classification of characters based on their usage in
+# mathematical notation.
+#
+# While the contents of this file represent the best information
+# available to the authors and the Unicode Technical Committee as
+# of the date referenced above, it is likely that the information
+# in this file will change from time to time.
+#
+# This file is *NOT* formally part of the Unicode Character Database
+# at this time.
+#
+# The character encoding of this plain-text file is UTF-8.
+#
+# The data consists of 2 fields.
+#
+# 1: code point or range
+#
+# 2: class, one of:
+#
+# N - Normal - includes all digits and symbols requiring only one form
+# A - Alphabetic
+# B - Binary
+# C - Closing - usually paired with opening delimiter
+# D - Diacritic
+# F - Fence - unpaired delimiter (often used as opening or closing)
+# G - Glyph_Part - piece of large operator
+# L - Large - n-ary or large operator, often takes limits
+# O - Opening - usually paired with closing delimiter
+# P - Punctuation
+# R - Relation - includes arrows
+# S - Space
+# U - Unary - operators that are only unary
+# V - Vary - operators that can be unary or binary depending on context
+# X - Special - characters not covered by other classes
+#
+# Fields are delimited by ';'. Spaces adjacent to the delimiter or the '#' are
+# not significant. Future versions of this file may use different amounts of
+# whitespace.
+#
+# Some character positions in the Mathematical Alphanumeric Symbols block are
+# reserved and have been mapped to the Letterlike Symbols block in Unicode.
+# This is indicated in 24 special purpose comments.
+#
+# The character repertoire of this revision is the repertoire of Unicode
+# Version 9.0. For more information see Revision 15 or later of UTR #25.
+# ------------------------------------------------
+
+0020;S
+0021;N
+0023;N
+0024;N
+0025;N
+0026;N
+0028;O
+0029;C
+002A;N
+002B;V
+002C;P
+002D;N
+002E;P
+002F;B
+0030..0039;N
+003A;P
+003B;P
+003C;R
+003D;R
+003E;R
+003F;P
+0040;N
+0041..005A;A
+005B;O
+005C;B
+005D;C
+005E;N
+005F;N
+0060;D
+0061..007A;A
+007B;O
+007C;F
+007D;C
+007E;N
+00A0;S
+00A1;P
+00A2;N
+00A3;N
+00A4;N
+00A5;N
+00A6;N
+00A7;N
+00A8;D
+00AC;U
+00AF;D
+00B0;N
+00B1;V
+00B2;N
+00B3;N
+00B4;N
+00B5;N
+00B6;N
+00B7;B
+00B9;N
+00BC;N
+00BD;N
+00BE;N
+00BF;P
+00D7;B
+00F7;B
+0131;A
+0237;A
+02C6;D
+02C7;D
+02D8;D
+02D9;D
+02DA;D
+02DC;D
+0300;D
+0301;D
+0302;D
+0303;D
+0304;D
+0305;D
+0306;D
+0307;D
+0308;D
+030A;D
+030C;D
+0311;D
+0323;D
+032C;D
+032D;D
+032E;D
+032F;D
+0330;D
+0331;D
+0332;D
+0333;D
+0338;D
+033A;D
+033F;D
+0346;D
+0391;A
+0392;A
+0393;A
+0394;A
+0395;A
+0396;A
+0397;A
+0398;A
+0399;A
+039A;A
+039B;A
+039C;A
+039D;A
+039E;A
+039F;A
+03A0;A
+03A1;A
+03A3;A
+03A4;A
+03A6;A
+03A7;A
+03A8;A
+03A9;A
+03B1;A
+03B2;A
+03B3;A
+03B4;A
+03B5;A
+03B6;A
+03B7;A
+03B8;A
+03B9;A
+03BA;A
+03BB;A
+03BC;A
+03BD;A
+03BE;A
+03BF;A
+03C0;A
+03C1;A
+03C3;A
+03C4;A
+03C5;A
+03C6;A
+03C7;A
+03C8;A
+03C9;A
+03D0;A
+03D1;A
+03D2;A
+03D5;A
+03D6;A
+03D8;N
+03D9;N
+03DA;A
+03DB;A
+03DC;A
+03DD;A
+03E0;A
+03E1;A
+03F0;A
+03F1;A
+03F4;A
+03F5;A
+03F6;N
+0428;A
+0606;L
+0607;L
+0608;A
+2000;S
+2001;S
+2002;S
+2003;S
+2004;S
+2005;S
+2006;S
+2007;S
+2009;S
+200A;S
+200B;S
+2010;P
+2012;P
+2013;P
+2014;P
+2016;F
+2020;R
+2021;R
+2022;B
+2026;N
+2032;N
+2033;N
+2034;N
+2035;N
+2036;N
+2037;N
+203B;N
+203C;N
+2040;B
+2044;B
+204E;B
+204F;R
+2050;R
+2051;N
+2052;N
+2057;N
+205F;S
+2061;B
+2062;B
+2063;P
+2064;X
+207A..207E;N
+208A..208E;N
+20D0;D
+20D1;D
+20D2;D
+20D3;X
+20D4;D
+20D5;D
+20D6;D
+20D7;D
+20D8;D
+20D9;D
+20DA;D
+20DB;D
+20DC;D
+20DD;D
+20DE;D
+20DF;D
+20E1;D
+20E4;D
+20E5;D
+20E6;D
+20E7;D
+20E8;D
+20E9;D
+20EA;D
+20EB;D
+20EC;D
+20ED;D
+20EE;D
+20EF;D
+2102;A
+2107;N
+210A;A
+210B;A
+210C;A
+210D;A
+210E;N
+210F;N
+2110;A
+2111;A
+2112;A
+2113;A
+2115;A
+2118;A
+2119;A
+211A;A
+211B;A
+211C;A
+211D;A
+2124;A
+2126;N
+2127;N
+2128;A
+2129;N
+212B;A
+212C;A
+212D;A
+212F;A
+2130;A
+2131;A
+2132;N
+2133;A
+2134;A
+2135;A
+2136;A
+2137;A
+2138;A
+213C;A
+213D;A
+213E;N
+213F;A
+2140;L
+2141;N
+2142;N
+2143;N
+2144;N
+2145;N
+2146;N
+2147;N
+2148;N
+2149;N
+214B;N
+2190..21B3;R
+21B6;R
+21B7;R
+21BA..21FF;R
+2200;U
+2201;U
+2202;N
+2203;U
+2204;U
+2205;N
+2206;U
+2207;U
+2208;R
+2209;R
+220A;R
+220B;R
+220C;R
+220D;R
+220E;N
+220F;L
+2210;L
+2211;L
+2212;V
+2213;V
+2214;B
+2215;B
+2216;B
+2217;B
+2218;B
+2219;B
+221A;L
+221B;L
+221C;L
+221D;R
+221E;N
+221F;N
+2220;N
+2221;N
+2222;N
+2223;R
+2224;R
+2225;R
+2226;R
+2227;B
+2228;B
+2229;B
+222A;B
+222B;L
+222C;L
+222D;L
+222E;L
+222F;L
+2230;L
+2231;L
+2232;L
+2233;L
+2234;R
+2235;R
+2236;R
+2237;R
+2238;B
+2239;R
+223A;R
+223B;R
+223C;R
+223D;R
+223E;B
+223F;N
+2240;B
+2241;R
+2242;R
+2243;R
+2244;R
+2245;R
+2246;R
+2247;R
+2248;R
+2249;R
+224A;R
+224B;R
+224C;R
+224D;R
+224E;R
+224F;R
+2250;R
+2251;R
+2252;R
+2253;R
+2254;R
+2255;R
+2256;R
+2257;R
+2258;R
+2259;R
+225A;R
+225B;R
+225C;R
+225D;R
+225E;R
+225F;R
+2260;R
+2261;R
+2262;R
+2263;R
+2264;R
+2265;R
+2266;R
+2267;R
+2268;R
+2269;R
+226A;R
+226B;R
+226C;R
+226D;R
+226E;R
+226F;R
+2270;R
+2271;R
+2272;R
+2273;R
+2274;R
+2275;R
+2276;R
+2277;R
+2278;R
+2279;R
+227A;R
+227B;R
+227C;R
+227D;R
+227E;R
+227F;R
+2280;R
+2281;R
+2282;R
+2283;R
+2284;R
+2285;R
+2286;R
+2287;R
+2288;R
+2289;R
+228A;R
+228B;R
+228C;B
+228D;B
+228E;B
+228F;R
+2290;R
+2291;R
+2292;R
+2293;B
+2294;B
+2295;B
+2296;B
+2297;B
+2298;B
+2299;B
+229A;B
+229B;B
+229C;B
+229D;B
+229E;B
+229F;B
+22A0;B
+22A1;B
+22A2;R
+22A3;R
+22A4;N
+22A5;R
+22A6;R
+22A7;R
+22A8;R
+22A9;R
+22AA;R
+22AB;R
+22AC;R
+22AD;R
+22AE;R
+22AF;R
+22B0;R
+22B1;R
+22B2;R
+22B3;R
+22B4;R
+22B5;R
+22B6;R
+22B7;R
+22B8;R
+22B9;B
+22BA;B
+22BB;B
+22BC;B
+22BD;B
+22BE;N
+22BF;N
+22C0;L
+22C1;L
+22C2;L
+22C3;L
+22C4;B
+22C5;B
+22C6;B
+22C7;B
+22C8;R
+22C9;B
+22CA;B
+22CB;B
+22CC;B
+22CD;R
+22CE;B
+22CF;B
+22D0;R
+22D1;R
+22D2;B
+22D3;B
+22D4;R
+22D5;R
+22D6;R
+22D7;R
+22D8;R
+22D9;R
+22DA;R
+22DB;R
+22DC;R
+22DD;R
+22DE;R
+22DF;R
+22E0;R
+22E1;R
+22E2;R
+22E3;R
+22E4;R
+22E5;R
+22E6;R
+22E7;R
+22E8;R
+22E9;R
+22EA;R
+22EB;R
+22EC;R
+22ED;R
+22EE;R
+22EF;R
+22F0;R
+22F1;R
+22F2;R
+22F3;R
+22F4;R
+22F5;R
+22F6;R
+22F7;R
+22F8;R
+22F9;R
+22FA;R
+22FB;R
+22FC;R
+22FD;R
+22FE;R
+22FF;R
+2300;N
+2302;N
+2305;B
+2306;B
+2308;O
+2309;C
+230A;O
+230B;C
+2310;N
+2311;N
+2319;N
+231C;O
+231D;C
+231E;O
+231F;C
+2320..2321;G
+2322;R
+2323;R
+#2329;O
+#232A;C
+2336;N
+233D;B
+233F;R
+237C;R
+2394;N
+239B..23AF;G
+23B0;R
+23B1;R
+23B2..23B3;G
+23B4;N
+23B5;N
+23B6;N
+23B7;G
+23D0;G
+23DC;N
+23DD;N
+23DE;N
+23DF;N
+23E0;N
+23E1;N
+23E2;N
+23E3;N
+23E4;N
+23E5;N
+23E6;N
+23E7;N
+24C8;N
+25A0;N
+25A1;N
+25AA;N
+25AB;N
+25AD;N
+25AE;N
+25AF;N
+25B0;N
+25B1;N
+25B2;B
+25B3;B
+25B4;B
+25B5;B
+25B6;B
+25B7;B
+25B8;B
+25B9;B
+25BC;B
+25BD;B
+25BE;B
+25BF;B
+25C0;B
+25C1;B
+25C2;B
+25C3;B
+25C4;B
+25C5;B
+25C6;N
+25C7;N
+25C8;N
+25C9;N
+25CA;B
+25CB;B
+25CE;N
+25CF;N
+25D0..25D3;N
+25D6;N
+25D7;N
+25E2;N
+25E3;N
+25E4;N
+25E5;N
+25E6;B
+25E7..25EA;N
+25EB;B
+25EC;B
+25EF;N
+25F8;B
+25F9;B
+25FA;B
+25FB;B
+25FC;B
+25FD;B
+25FE;B
+25FF;B
+2605;B
+2606;B
+2609;N
+260C;N
+263D;N
+263E;N
+263F;N
+2640;N
+2641;N
+2642;N
+2643;N
+2644;N
+2646;N
+2647;N
+2648;N
+2649;N
+2660;N
+2661;N
+2662;N
+2663;N
+2664;N
+2665;N
+2666;N
+2667;N
+2669;N
+266D;N
+266E;N
+266F;N
+2680;N
+2681;N
+2682;N
+2683;N
+2684;N
+2685;N
+2686;N
+2687;N
+2688;N
+2689;N
+26AA;N
+26AB;N
+26AC;N
+26B2;N
+2713;N
+2717;N
+2720;N
+272A;N
+2736;N
+2772;O
+2773;C
+27C0;N
+27C1;N
+27C2;R
+27C3;R
+27C4;R
+27C5;R
+27C6;R
+27C7;R
+27C8;R
+27C9;R
+27CA;R
+27CB;R
+27CC;L
+27CD;R
+27CE;B
+27CF;B
+27D0;N
+27D1;B
+27D2;R
+27D3;R
+27D4;R
+27D5;L
+27D6;L
+27D7;L
+27D8;L
+27D9;L
+27DA;R
+27DB;R
+27DC;R
+27DD;R
+27DE;R
+27DF;R
+27E0;B
+27E1;B
+27E2;B
+27E3;B
+27E4;B
+27E5;B
+27E6;O
+27E7;C
+27E8;O
+27E9;C
+27EA;O
+27EB;C
+27EC;O
+27ED;C
+27EE;O
+27EF;C
+27F0;R
+27F1;R
+27F2;R
+27F3;R
+27F4;R
+27F5;R
+27F6;R
+27F7;R
+27F8;R
+27F9;R
+27FA;R
+27FB;R
+27FC;R
+27FD;R
+27FE;R
+27FF;R
+2900;R
+2901;R
+2902;R
+2903;R
+2904;R
+2905;R
+2906;R
+2907;R
+2908;R
+2909;R
+290A;R
+290B;R
+290C;R
+290D;R
+290E;R
+290F;R
+2910;R
+2911;R
+2912;R
+2913;R
+2914;R
+2915;R
+2916;R
+2917;R
+2918;R
+2919;R
+291A;R
+291B;R
+291C;R
+291D;R
+291E;R
+291F;R
+2920;R
+2921;R
+2922;R
+2923;R
+2924;R
+2925;R
+2926;R
+2927;R
+2928;R
+2929;R
+292A;R
+292B;R
+292C;R
+292D;R
+292E;R
+292F;R
+2930;R
+2931;R
+2932;R
+2933;R
+2934;R
+2935;R
+2936;R
+2937;R
+2938;R
+2939;R
+293A;R
+293B;R
+293C;R
+293D;R
+293E;R
+293F;R
+2940;R
+2941;R
+2942;R
+2943;R
+2944;R
+2945;R
+2946;R
+2947;R
+2948;R
+2949;R
+294A;R
+294B;R
+294C;R
+294D;R
+294E;R
+294F;R
+2950;R
+2951;R
+2952;R
+2953;R
+2954;R
+2955;R
+2956;R
+2957;R
+2958;R
+2959;R
+295A;R
+295B;R
+295C;R
+295D;R
+295E;R
+295F;R
+2960;R
+2961;R
+2962;R
+2963;R
+2964;R
+2965;R
+2966;R
+2967;R
+2968;R
+2969;R
+296A;R
+296B;R
+296C;R
+296D;R
+296E;R
+296F;R
+2970;R
+2971;R
+2972;R
+2973;R
+2974;R
+2975;R
+2976;R
+2977;R
+2978;R
+2979;R
+297A;R
+297B;R
+297C;R
+297D;R
+297E;R
+297F;R
+2980;F
+2981;N
+2982;F
+2983;O
+2984;C
+2985;O
+2986;C
+2987;O
+2988;C
+2989;O
+298A;C
+298B;O
+298C;C
+298D;O
+298E;C
+298F;O
+2990;C
+2991;O
+2992;C
+2993;O
+2994;C
+2995;O
+2996;C
+2997;O
+2998;C
+2999;F
+299A;F
+299B;N
+299C;N
+299D;N
+299E;N
+299F;N
+29A0;N
+29A1;N
+29A2;N
+29A3;N
+29A4;N
+29A5;N
+29A6;N
+29A7;N
+29A8;N
+29A9;N
+29AA;N
+29AB;N
+29AC;N
+29AD;N
+29AE;N
+29AF;N
+29B0;N
+29B1;N
+29B2;N
+29B3;N
+29B4;N
+29B5;N
+29B6;B
+29B7;B
+29B8;B
+29B9;B
+29BA;N
+29BB;N
+29BC;N
+29BD;N
+29BE;N
+29BF;N
+29C0;B
+29C1;B
+29C2;N
+29C3;N
+29C4;B
+29C5;B
+29C6;B
+29C7;B
+29C8;B
+29C9;N
+29CA;N
+29CB;N
+29CC;N
+29CD;N
+29CE;R
+29CF;R
+29D0;R
+29D1;R
+29D2;R
+29D3;R
+29D4;R
+29D5;R
+29D6;B
+29D7;B
+29D8;O
+29D9;C
+29DA;O
+29DB;C
+29DC;N
+29DD;N
+29DE;N
+29DF;R
+29E0;N
+29E1;R
+29E2;B
+29E3;R
+29E4;R
+29E5;R
+29E6;R
+29E7;N
+29E8;N
+29E9;N
+29EA;N
+29EB;B
+29EC;N
+29ED;N
+29EE;N
+29EF;N
+29F0;N
+29F1;N
+29F2;N
+29F3;N
+29F4;R
+29F5;B
+29F6;B
+29F7;B
+29F8;L
+29F9;L
+29FA;B
+29FB;B
+29FC;O
+29FD;C
+29FE;B
+29FF;B
+2A00;L
+2A01;L
+2A02;L
+2A03;L
+2A04;L
+2A05;L
+2A06;L
+2A07;L
+2A08;L
+2A09;L
+2A0A;L
+2A0B;L
+2A0C;L
+2A0D;L
+2A0E;L
+2A0F;L
+2A10;L
+2A11;L
+2A12;L
+2A13;L
+2A14;L
+2A15;L
+2A16;L
+2A17;L
+2A18;L
+2A19;L
+2A1A;L
+2A1B;L
+2A1C;L
+2A1D;L
+2A1E;L
+2A1F;L
+2A20;L
+2A21;L
+2A22;B
+2A23;B
+2A24;B
+2A25;B
+2A26;B
+2A27;B
+2A28;B
+2A29;B
+2A2A;B
+2A2B;B
+2A2C;B
+2A2D;B
+2A2E;B
+2A2F;B
+2A30;B
+2A31;B
+2A32;B
+2A33;B
+2A34;B
+2A35;B
+2A36;B
+2A37;B
+2A38;B
+2A39;B
+2A3A;B
+2A3B;B
+2A3C;B
+2A3D;B
+2A3E;B
+2A3F;B
+2A40;B
+2A41;B
+2A42;B
+2A43;B
+2A44;B
+2A45;B
+2A46;B
+2A47;B
+2A48;B
+2A49;B
+2A4A;B
+2A4B;B
+2A4C;B
+2A4D;B
+2A4E;B
+2A4F;B
+2A50;B
+2A51;B
+2A52;B
+2A53;B
+2A54;B
+2A55;B
+2A56;B
+2A57;B
+2A58;B
+2A59;R
+2A5A;B
+2A5B;B
+2A5C;B
+2A5D;B
+2A5E;B
+2A5F;B
+2A60;B
+2A61;B
+2A62;B
+2A63;B
+2A64;B
+2A65;B
+2A66;R
+2A67;R
+2A68;R
+2A69;R
+2A6A;R
+2A6B;R
+2A6C;R
+2A6D;R
+2A6E;R
+2A6F;R
+2A70;R
+2A71;B
+2A72;B
+2A73;R
+2A74;R
+2A75;R
+2A76;R
+2A77;R
+2A78;R
+2A79;R
+2A7A;R
+2A7B;R
+2A7C;R
+2A7D;R
+2A7E;R
+2A7F;R
+2A80;R
+2A81;R
+2A82;R
+2A83;R
+2A84;R
+2A85;R
+2A86;R
+2A87;R
+2A88;R
+2A89;R
+2A8A;R
+2A8B;R
+2A8C;R
+2A8D;R
+2A8E;R
+2A8F;R
+2A90;R
+2A91;R
+2A92;R
+2A93;R
+2A94;R
+2A95;R
+2A96;R
+2A97;R
+2A98;R
+2A99;R
+2A9A;R
+2A9B;R
+2A9C;R
+2A9D;R
+2A9E;R
+2A9F;R
+2AA0;R
+2AA1;R
+2AA2;R
+2AA3;R
+2AA4;R
+2AA5;R
+2AA6;R
+2AA7;R
+2AA8;R
+2AA9;R
+2AAA;R
+2AAB;R
+2AAC;R
+2AAD;R
+2AAE;R
+2AAF;R
+2AB0;R
+2AB1;R
+2AB2;R
+2AB3;R
+2AB4;R
+2AB5;R
+2AB6;R
+2AB7;R
+2AB8;R
+2AB9;R
+2ABA;R
+2ABB;R
+2ABC;R
+2ABD;R
+2ABE;R
+2ABF;R
+2AC0;R
+2AC1;R
+2AC2;R
+2AC3;R
+2AC4;R
+2AC5;R
+2AC6;R
+2AC7;R
+2AC8;R
+2AC9;R
+2ACA;R
+2ACB;R
+2ACC;R
+2ACD;R
+2ACE;R
+2ACF;R
+2AD0;R
+2AD1;R
+2AD2;R
+2AD3;R
+2AD4;R
+2AD5;R
+2AD6;R
+2AD7;R
+2AD8;R
+2AD9;R
+2ADA;R
+2ADB;R
+2ADC;R
+2ADD;R
+2ADE;R
+2ADF;R
+2AE0;R
+2AE1;N
+2AE2;R
+2AE3;R
+2AE4;R
+2AE5;R
+2AE6;R
+2AE7;R
+2AE8;R
+2AE9;R
+2AEA;R
+2AEB;R
+2AEC;R
+2AED;R
+2AEE;R
+2AEF;R
+2AF0;R
+2AF1;N
+2AF2;R
+2AF3;R
+2AF4;B
+2AF5;B
+2AF6;B
+2AF7;R
+2AF8;R
+2AF9;R
+2AFA;R
+2AFB;B
+2AFC;L
+2AFD;B
+2AFE;B
+2AFF;L
+2B00..2B11;R
+2B12;N
+2B13;N
+2B14;N
+2B15;N
+2B16;N
+2B17;N
+2B18;N
+2B19;N
+2B1B..2B1F;N
+2B20;N
+2B21;N
+2B22;N
+2B23;N
+2B24..2B2F;N
+2B30..2B44;R
+2B45;R
+2B46;R
+2B47..2B4C;R
+2B50..2B54;N
+2B95;R
+2BC2..2BC8;N
+2BCA;N
+2BCB;N
+3008;X
+3009;X
+#3014;O
+#3015;C
+#3018;O
+#3019;C
+301A;X
+301B;X
+306E;N
+FB29;X
+FE00;D
+#deprecFE35;
+#deprecFE36;
+#deprecFE37;
+#deprecFE38;
+FE61..FE66;X
+FE68;X
+FF0B;X
+FF1C..FF1E;X
+FF3C;X
+FF3E;X
+FF5C;X
+FF5E;X
+FFE2;X
+FFE9..FFEC;X
+1D400..1D454;A
+#1D455=210E;N
+1D456..1D49B;A
+1D49C;A
+#1D49D=212C;A
+1D49E;A
+1D49F;A
+#1D4A0=2130;A
+#1D4A1=2131;A
+1D4A2;A
+#1D4A3=210B;A
+#1D4A4=2110;A
+1D4A5;A
+1D4A6;A
+#1D4A7=2112;A
+#1D4A8=2133;A
+1D4A9;A
+1D4AA;A
+1D4AB;A
+1D4AC;A
+#1D4AD=211B;A
+1D4AE;A
+1D4AF;A
+1D4B0;A
+1D4B1;A
+1D4B2;A
+1D4B3;A
+1D4B4;A
+1D4B5;A
+1D4B6;A
+1D4B7;A
+1D4B8;A
+1D4B9;A
+#1D4BA=212F;A
+1D4BB;A
+#1D4BC=210A;A
+1D4BD;A
+1D4BE;A
+1D4BF;A
+1D4C0;A
+1D4C1;A
+1D4C2;A
+1D4C3;A
+#1D4C4=2134;A
+1D4C5;A
+1D4C6;A
+1D4C7;A
+1D4C8;A
+1D4C9;A
+1D4CA;A
+1D4CB;A
+1D4CC;A
+1D4CD;A
+1D4CE;A
+1D4CF;A
+1D4D0..1D503;A
+1D504;A
+1D505;A
+#1D506=212D;A
+1D507;A
+1D508;A
+1D509;A
+1D50A;A
+#1D50B=210C;A
+#1D50C=2111;A
+1D50D;A
+1D50E;A
+1D50F;A
+1D510;A
+1D511;A
+1D512;A
+1D513;A
+1D514;A
+#1D515=211C;A
+1D516;A
+1D517;A
+1D518;A
+1D519;A
+1D51A;A
+1D51B;A
+1D51C;A
+#1D51D=2128;A
+1D51E;A
+1D51F;A
+1D520;A
+1D521;A
+1D522;A
+1D523;A
+1D524;A
+1D525;A
+1D526;A
+1D527;A
+1D528;A
+1D529;A
+1D52A;A
+1D52B;A
+1D52C;A
+1D52D;A
+1D52E;A
+1D52F;A
+1D530;A
+1D531;A
+1D532;A
+1D533;A
+1D534;A
+1D535;A
+1D536;A
+1D537;A
+1D538;A
+1D539;A
+#1D53A=2102;A
+1D53B;A
+1D53C;A
+1D53D;A
+1D53E;A
+#1D53F=210D;A
+1D540;A
+1D541;A
+1D542;A
+1D543;A
+1D544;A
+#1D545=2115;A
+1D546;A
+#1D547=2119;A
+#1D548=211A;A
+#1D549=211D;A
+1D54A;A
+1D54B;A
+1D54C;A
+1D54D;A
+1D54E;A
+1D54F;A
+1D550;A
+#1D551=2124;A
+1D552;A
+1D553;A
+1D554;A
+1D555;A
+1D556;A
+1D557;A
+1D558;A
+1D559;A
+1D55A;A
+1D55B;A
+1D55C;A
+1D55D;A
+1D55E;A
+1D55F;A
+1D560;A
+1D561;A
+1D562;A
+1D563;A
+1D564;A
+1D565;A
+1D566;A
+1D567;A
+1D568;A
+1D569;A
+1D56A;A
+1D56B;A
+1D56C..1D6A3;A
+1D6A4;A
+1D6A5;A
+1D6A8..1D7C9;A
+1D7CA;A
+1D7CB;A
+1D7CE..1D7FF;N
+1EE00..1EE03;A
+1EE05..1EE1F;A
+1EE21;A
+1EE22;A
+1EE24;A
+1EE27;A
+1EE29..1EE32;A
+1EE34..1EE37;A
+1EE39;A
+1EE3B;A
+1EE42;A
+1EE47;A
+1EE49;A
+1EE4B;A
+1EE4D..1EE4F;A
+1EE51;A
+1EE52;A
+1EE54;A
+1EE57;A
+1EE59;A
+1EE5B;A
+1EE5D;A
+1EE5F;A
+1EE61;A
+1EE62;A
+1EE64;A
+1EE67..1EE6A;A
+1EE6C..1EE72;A
+1EE74..1EE77;A
+1EE79..1EE7C;A
+1EE7E;A
+1EE80..1EE89;A
+1EE8B..1EE9B;A
+1EEA1..1EEA3;A
+1EEA5..1EEA9;A
+1EEAB..1EEBB;A
+1EEF0;L
+1EEF1;L
+1F784;N
+1F78C;N
+1F78D;N
+1F797..1F799;N
+1F79D..1F79F;N
+
+# EOF
diff --git a/macros/generic/unicode-data/PropList.txt b/macros/generic/unicode-data/PropList.txt
new file mode 100644
index 0000000000..4394602fea
--- /dev/null
+++ b/macros/generic/unicode-data/PropList.txt
@@ -0,0 +1,1666 @@
+# PropList-12.1.0.txt
+# Date: 2019-03-10, 10:53:16 GMT
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# ================================================
+
+0009..000D ; White_Space # Cc [5] <control-0009>..<control-000D>
+0020 ; White_Space # Zs SPACE
+0085 ; White_Space # Cc <control-0085>
+00A0 ; White_Space # Zs NO-BREAK SPACE
+1680 ; White_Space # Zs OGHAM SPACE MARK
+2000..200A ; White_Space # Zs [11] EN QUAD..HAIR SPACE
+2028 ; White_Space # Zl LINE SEPARATOR
+2029 ; White_Space # Zp PARAGRAPH SEPARATOR
+202F ; White_Space # Zs NARROW NO-BREAK SPACE
+205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE
+3000 ; White_Space # Zs IDEOGRAPHIC SPACE
+
+# Total code points: 25
+
+# ================================================
+
+061C ; Bidi_Control # Cf ARABIC LETTER MARK
+200E..200F ; Bidi_Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+202A..202E ; Bidi_Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2066..2069 ; Bidi_Control # Cf [4] LEFT-TO-RIGHT ISOLATE..POP DIRECTIONAL ISOLATE
+
+# Total code points: 12
+
+# ================================================
+
+200C..200D ; Join_Control # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+
+# Total code points: 2
+
+# ================================================
+
+002D ; Dash # Pd HYPHEN-MINUS
+058A ; Dash # Pd ARMENIAN HYPHEN
+05BE ; Dash # Pd HEBREW PUNCTUATION MAQAF
+1400 ; Dash # Pd CANADIAN SYLLABICS HYPHEN
+1806 ; Dash # Pd MONGOLIAN TODO SOFT HYPHEN
+2010..2015 ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR
+2053 ; Dash # Po SWUNG DASH
+207B ; Dash # Sm SUPERSCRIPT MINUS
+208B ; Dash # Sm SUBSCRIPT MINUS
+2212 ; Dash # Sm MINUS SIGN
+2E17 ; Dash # Pd DOUBLE OBLIQUE HYPHEN
+2E1A ; Dash # Pd HYPHEN WITH DIAERESIS
+2E3A..2E3B ; Dash # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E40 ; Dash # Pd DOUBLE HYPHEN
+301C ; Dash # Pd WAVE DASH
+3030 ; Dash # Pd WAVY DASH
+30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+FE31..FE32 ; Dash # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE58 ; Dash # Pd SMALL EM DASH
+FE63 ; Dash # Pd SMALL HYPHEN-MINUS
+FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
+
+# Total code points: 28
+
+# ================================================
+
+002D ; Hyphen # Pd HYPHEN-MINUS
+00AD ; Hyphen # Cf SOFT HYPHEN
+058A ; Hyphen # Pd ARMENIAN HYPHEN
+1806 ; Hyphen # Pd MONGOLIAN TODO SOFT HYPHEN
+2010..2011 ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN
+2E17 ; Hyphen # Pd DOUBLE OBLIQUE HYPHEN
+30FB ; Hyphen # Po KATAKANA MIDDLE DOT
+FE63 ; Hyphen # Pd SMALL HYPHEN-MINUS
+FF0D ; Hyphen # Pd FULLWIDTH HYPHEN-MINUS
+FF65 ; Hyphen # Po HALFWIDTH KATAKANA MIDDLE DOT
+
+# Total code points: 11
+
+# ================================================
+
+0022 ; Quotation_Mark # Po QUOTATION MARK
+0027 ; Quotation_Mark # Po APOSTROPHE
+00AB ; Quotation_Mark # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB ; Quotation_Mark # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2018 ; Quotation_Mark # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Quotation_Mark # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Quotation_Mark # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Quotation_Mark # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Quotation_Mark # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Quotation_Mark # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Quotation_Mark # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2039 ; Quotation_Mark # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Quotation_Mark # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+2E42 ; Quotation_Mark # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+300C ; Quotation_Mark # Ps LEFT CORNER BRACKET
+300D ; Quotation_Mark # Pe RIGHT CORNER BRACKET
+300E ; Quotation_Mark # Ps LEFT WHITE CORNER BRACKET
+300F ; Quotation_Mark # Pe RIGHT WHITE CORNER BRACKET
+301D ; Quotation_Mark # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Quotation_Mark # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+FE41 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FF02 ; Quotation_Mark # Po FULLWIDTH QUOTATION MARK
+FF07 ; Quotation_Mark # Po FULLWIDTH APOSTROPHE
+FF62 ; Quotation_Mark # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET
+
+# Total code points: 30
+
+# ================================================
+
+0021 ; Terminal_Punctuation # Po EXCLAMATION MARK
+002C ; Terminal_Punctuation # Po COMMA
+002E ; Terminal_Punctuation # Po FULL STOP
+003A..003B ; Terminal_Punctuation # Po [2] COLON..SEMICOLON
+003F ; Terminal_Punctuation # Po QUESTION MARK
+037E ; Terminal_Punctuation # Po GREEK QUESTION MARK
+0387 ; Terminal_Punctuation # Po GREEK ANO TELEIA
+0589 ; Terminal_Punctuation # Po ARMENIAN FULL STOP
+05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ
+060C ; Terminal_Punctuation # Po ARABIC COMMA
+061B ; Terminal_Punctuation # Po ARABIC SEMICOLON
+061E..061F ; Terminal_Punctuation # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP
+0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION
+070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS
+07F8..07F9 ; Terminal_Punctuation # Po [2] NKO COMMA..NKO EXCLAMATION MARK
+0830..083E ; Terminal_Punctuation # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+085E ; Terminal_Punctuation # Po MANDAIC PUNCTUATION
+0964..0965 ; Terminal_Punctuation # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0E5A..0E5B ; Terminal_Punctuation # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0F08 ; Terminal_Punctuation # Po TIBETAN MARK SBRUL SHAD
+0F0D..0F12 ; Terminal_Punctuation # Po [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD
+104A..104B ; Terminal_Punctuation # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+1361..1368 ; Terminal_Punctuation # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+166E ; Terminal_Punctuation # Po CANADIAN SYLLABICS FULL STOP
+16EB..16ED ; Terminal_Punctuation # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+1735..1736 ; Terminal_Punctuation # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+17D4..17D6 ; Terminal_Punctuation # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17DA ; Terminal_Punctuation # Po KHMER SIGN KOOMUUT
+1802..1805 ; Terminal_Punctuation # Po [4] MONGOLIAN COMMA..MONGOLIAN FOUR DOTS
+1808..1809 ; Terminal_Punctuation # Po [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP
+1944..1945 ; Terminal_Punctuation # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1AA8..1AAB ; Terminal_Punctuation # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU
+1B5A..1B5B ; Terminal_Punctuation # Po [2] BALINESE PANTI..BALINESE PAMADA
+1B5D..1B5F ; Terminal_Punctuation # Po [3] BALINESE CARIK PAMUNGKAH..BALINESE CARIK PAREREN
+1C3B..1C3F ; Terminal_Punctuation # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C7E..1C7F ; Terminal_Punctuation # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+203C..203D ; Terminal_Punctuation # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+2047..2049 ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2E2E ; Terminal_Punctuation # Po REVERSED QUESTION MARK
+2E3C ; Terminal_Punctuation # Po STENOGRAPHIC FULL STOP
+2E41 ; Terminal_Punctuation # Po REVERSED COMMA
+2E4C ; Terminal_Punctuation # Po MEDIEVAL COMMA
+2E4E..2E4F ; Terminal_Punctuation # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER
+3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
+A4FE..A4FF ; Terminal_Punctuation # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A60D..A60F ; Terminal_Punctuation # Po [3] VAI COMMA..VAI QUESTION MARK
+A6F3..A6F7 ; Terminal_Punctuation # Po [5] BAMUM FULL STOP..BAMUM QUESTION MARK
+A876..A877 ; Terminal_Punctuation # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
+A8CE..A8CF ; Terminal_Punctuation # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A92F ; Terminal_Punctuation # Po KAYAH LI SIGN SHYA
+A9C7..A9C9 ; Terminal_Punctuation # Po [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI
+AA5D..AA5F ; Terminal_Punctuation # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
+AADF ; Terminal_Punctuation # Po TAI VIET SYMBOL KOI KOI
+AAF0..AAF1 ; Terminal_Punctuation # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+ABEB ; Terminal_Punctuation # Po MEETEI MAYEK CHEIKHEI
+FE50..FE52 ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FF01 ; Terminal_Punctuation # Po FULLWIDTH EXCLAMATION MARK
+FF0C ; Terminal_Punctuation # Po FULLWIDTH COMMA
+FF0E ; Terminal_Punctuation # Po FULLWIDTH FULL STOP
+FF1A..FF1B ; Terminal_Punctuation # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1F ; Terminal_Punctuation # Po FULLWIDTH QUESTION MARK
+FF61 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
+1039F ; Terminal_Punctuation # Po UGARITIC WORD DIVIDER
+103D0 ; Terminal_Punctuation # Po OLD PERSIAN WORD DIVIDER
+10857 ; Terminal_Punctuation # Po IMPERIAL ARAMAIC SECTION SIGN
+1091F ; Terminal_Punctuation # Po PHOENICIAN WORD SEPARATOR
+10A56..10A57 ; Terminal_Punctuation # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10AF0..10AF5 ; Terminal_Punctuation # Po [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS
+10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B99..10B9C ; Terminal_Punctuation # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10F55..10F59 ; Terminal_Punctuation # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
+111C5..111C6 ; Terminal_Punctuation # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
+111CD ; Terminal_Punctuation # Po SHARADA SUTRA MARK
+111DE..111DF ; Terminal_Punctuation # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
+11238..1123C ; Terminal_Punctuation # Po [5] KHOJKI DANDA..KHOJKI DOUBLE SECTION MARK
+112A9 ; Terminal_Punctuation # Po MULTANI SECTION MARK
+1144B..1144D ; Terminal_Punctuation # Po [3] NEWA DANDA..NEWA COMMA
+1145B ; Terminal_Punctuation # Po NEWA PLACEHOLDER MARK
+115C2..115C5 ; Terminal_Punctuation # Po [4] SIDDHAM DANDA..SIDDHAM SEPARATOR BAR
+115C9..115D7 ; Terminal_Punctuation # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+11641..11642 ; Terminal_Punctuation # Po [2] MODI DANDA..MODI DOUBLE DANDA
+1173C..1173E ; Terminal_Punctuation # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11A42..11A43 ; Terminal_Punctuation # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
+11A9B..11A9C ; Terminal_Punctuation # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
+11AA1..11AA2 ; Terminal_Punctuation # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
+11C41..11C43 ; Terminal_Punctuation # Po [3] BHAIKSUKI DANDA..BHAIKSUKI WORD SEPARATOR
+11C71 ; Terminal_Punctuation # Po MARCHEN MARK SHAD
+11EF7..11EF8 ; Terminal_Punctuation # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+12470..12474 ; Terminal_Punctuation # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+16A6E..16A6F ; Terminal_Punctuation # Po [2] MRO DANDA..MRO DOUBLE DANDA
+16AF5 ; Terminal_Punctuation # Po BASSA VAH FULL STOP
+16B37..16B39 ; Terminal_Punctuation # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
+16B44 ; Terminal_Punctuation # Po PAHAWH HMONG SIGN XAUS
+16E97..16E98 ; Terminal_Punctuation # Po [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP
+1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
+
+# Total code points: 264
+
+# ================================================
+
+005E ; Other_Math # Sk CIRCUMFLEX ACCENT
+03D0..03D2 ; Other_Math # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5 ; Other_Math # L& GREEK PHI SYMBOL
+03F0..03F1 ; Other_Math # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5 ; Other_Math # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+2016 ; Other_Math # Po DOUBLE VERTICAL LINE
+2032..2034 ; Other_Math # Po [3] PRIME..TRIPLE PRIME
+2040 ; Other_Math # Pc CHARACTER TIE
+2061..2064 ; Other_Math # Cf [4] FUNCTION APPLICATION..INVISIBLE PLUS
+207D ; Other_Math # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Other_Math # Pe SUPERSCRIPT RIGHT PARENTHESIS
+208D ; Other_Math # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Other_Math # Pe SUBSCRIPT RIGHT PARENTHESIS
+20D0..20DC ; Other_Math # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1 ; Other_Math # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20E6 ; Other_Math # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20EB..20EF ; Other_Math # Mn [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW
+2102 ; Other_Math # L& DOUBLE-STRUCK CAPITAL C
+2107 ; Other_Math # L& EULER CONSTANT
+210A..2113 ; Other_Math # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Other_Math # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; Other_Math # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Other_Math # L& DOUBLE-STRUCK CAPITAL Z
+2128 ; Other_Math # L& BLACK-LETTER CAPITAL Z
+2129 ; Other_Math # So TURNED GREEK SMALL LETTER IOTA
+212C..212D ; Other_Math # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131 ; Other_Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; Other_Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; Other_Math # Lo [4] ALEF SYMBOL..DALET SYMBOL
+213C..213F ; Other_Math # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; Other_Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2195..2199 ; Other_Math # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219C..219F ; Other_Math # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A1..21A2 ; Other_Math # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A4..21A5 ; Other_Math # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A7 ; Other_Math # So DOWNWARDS ARROW FROM BAR
+21A9..21AD ; Other_Math # So [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW
+21B0..21B1 ; Other_Math # So [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS
+21B6..21B7 ; Other_Math # So [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+21BC..21CD ; Other_Math # So [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Other_Math # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D3 ; Other_Math # So DOWNWARDS DOUBLE ARROW
+21D5..21DB ; Other_Math # So [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW
+21DD ; Other_Math # So RIGHTWARDS SQUIGGLE ARROW
+21E4..21E5 ; Other_Math # So [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR
+2308 ; Other_Math # Ps LEFT CEILING
+2309 ; Other_Math # Pe RIGHT CEILING
+230A ; Other_Math # Ps LEFT FLOOR
+230B ; Other_Math # Pe RIGHT FLOOR
+23B4..23B5 ; Other_Math # So [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET
+23B7 ; Other_Math # So RADICAL SYMBOL BOTTOM
+23D0 ; Other_Math # So VERTICAL LINE EXTENSION
+23E2 ; Other_Math # So WHITE TRAPEZIUM
+25A0..25A1 ; Other_Math # So [2] BLACK SQUARE..WHITE SQUARE
+25AE..25B6 ; Other_Math # So [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE
+25BC..25C0 ; Other_Math # So [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C6..25C7 ; Other_Math # So [2] BLACK DIAMOND..WHITE DIAMOND
+25CA..25CB ; Other_Math # So [2] LOZENGE..WHITE CIRCLE
+25CF..25D3 ; Other_Math # So [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK
+25E2 ; Other_Math # So BLACK LOWER RIGHT TRIANGLE
+25E4 ; Other_Math # So BLACK UPPER LEFT TRIANGLE
+25E7..25EC ; Other_Math # So [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT
+2605..2606 ; Other_Math # So [2] BLACK STAR..WHITE STAR
+2640 ; Other_Math # So FEMALE SIGN
+2642 ; Other_Math # So MALE SIGN
+2660..2663 ; Other_Math # So [4] BLACK SPADE SUIT..BLACK CLUB SUIT
+266D..266E ; Other_Math # So [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN
+27C5 ; Other_Math # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Other_Math # Pe RIGHT S-SHAPED BAG DELIMITER
+27E6 ; Other_Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Other_Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Other_Math # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Other_Math # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Other_Math # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Other_Math # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC ; Other_Math # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED ; Other_Math # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE ; Other_Math # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF ; Other_Math # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+2983 ; Other_Math # Ps LEFT WHITE CURLY BRACKET
+2984 ; Other_Math # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Other_Math # Ps LEFT WHITE PARENTHESIS
+2986 ; Other_Math # Pe RIGHT WHITE PARENTHESIS
+2987 ; Other_Math # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Other_Math # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Other_Math # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Other_Math # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Other_Math # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Other_Math # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Other_Math # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Other_Math # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Other_Math # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Other_Math # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Other_Math # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Other_Math # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Other_Math # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Other_Math # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+29D8 ; Other_Math # Ps LEFT WIGGLY FENCE
+29D9 ; Other_Math # Pe RIGHT WIGGLY FENCE
+29DA ; Other_Math # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Other_Math # Pe RIGHT DOUBLE WIGGLY FENCE
+29FC ; Other_Math # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Other_Math # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+FE61 ; Other_Math # Po SMALL ASTERISK
+FE63 ; Other_Math # Pd SMALL HYPHEN-MINUS
+FE68 ; Other_Math # Po SMALL REVERSE SOLIDUS
+FF3C ; Other_Math # Po FULLWIDTH REVERSE SOLIDUS
+FF3E ; Other_Math # Sk FULLWIDTH CIRCUMFLEX ACCENT
+1D400..1D454 ; Other_Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Other_Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Other_Math # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Other_Math # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Other_Math # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Other_Math # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Other_Math # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Other_Math # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Other_Math # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Other_Math # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Other_Math # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Other_Math # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Other_Math # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Other_Math # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Other_Math # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Other_Math # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Other_Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Other_Math # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; Other_Math # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; Other_Math # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; Other_Math # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; Other_Math # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; Other_Math # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; Other_Math # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; Other_Math # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; Other_Math # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; Other_Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EE00..1EE03 ; Other_Math # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Other_Math # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Other_Math # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Other_Math # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Other_Math # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Other_Math # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Other_Math # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Other_Math # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Other_Math # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Other_Math # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Other_Math # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Other_Math # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Other_Math # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Other_Math # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Other_Math # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Other_Math # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Other_Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Other_Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+
+# Total code points: 1362
+
+# ================================================
+
+0030..0039 ; Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE
+0041..0046 ; Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F
+0061..0066 ; Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F
+FF10..FF19 ; Hex_Digit # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF26 ; Hex_Digit # L& [6] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER F
+FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER F
+
+# Total code points: 44
+
+# ================================================
+
+0030..0039 ; ASCII_Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE
+0041..0046 ; ASCII_Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F
+0061..0066 ; ASCII_Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F
+
+# Total code points: 22
+
+# ================================================
+
+0345 ; Other_Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI
+05B0..05BD ; Other_Alphabetic # Mn [14] HEBREW POINT SHEVA..HEBREW POINT METEG
+05BF ; Other_Alphabetic # Mn HEBREW POINT RAFE
+05C1..05C2 ; Other_Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; Other_Alphabetic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Other_Alphabetic # Mn HEBREW POINT QAMATS QATAN
+0610..061A ; Other_Alphabetic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+064B..0657 ; Other_Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065F ; Other_Alphabetic # Mn [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW
+0670 ; Other_Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; Other_Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06E1..06E4 ; Other_Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
+06E7..06E8 ; Other_Alphabetic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06ED ; Other_Alphabetic # Mn ARABIC SMALL LOW MEEM
+0711 ; Other_Alphabetic # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..073F ; Other_Alphabetic # Mn [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+07A6..07B0 ; Other_Alphabetic # Mn [11] THAANA ABAFILI..THAANA SUKUN
+0816..0817 ; Other_Alphabetic # Mn [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF
+081B..0823 ; Other_Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0825..0827 ; Other_Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0829..082C ; Other_Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
+08D4..08DF ; Other_Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA
+08E3..08E9 ; Other_Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN
+08F0..0902 ; Other_Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA
+0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA
+093A ; Other_Alphabetic # Mn DEVANAGARI VOWEL SIGN OE
+093B ; Other_Alphabetic # Mc DEVANAGARI VOWEL SIGN OOE
+093E..0940 ; Other_Alphabetic # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; Other_Alphabetic # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; Other_Alphabetic # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E..094F ; Other_Alphabetic # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0955..0957 ; Other_Alphabetic # Mn [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE
+0962..0963 ; Other_Alphabetic # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981 ; Other_Alphabetic # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; Other_Alphabetic # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+09BE..09C0 ; Other_Alphabetic # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; Other_Alphabetic # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09D7 ; Other_Alphabetic # Mc BENGALI AU LENGTH MARK
+09E2..09E3 ; Other_Alphabetic # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02 ; Other_Alphabetic # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; Other_Alphabetic # Mc GURMUKHI SIGN VISARGA
+0A3E..0A40 ; Other_Alphabetic # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A51 ; Other_Alphabetic # Mn GURMUKHI SIGN UDAAT
+0A70..0A71 ; Other_Alphabetic # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75 ; Other_Alphabetic # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; Other_Alphabetic # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; Other_Alphabetic # Mc GUJARATI SIGN VISARGA
+0ABE..0AC0 ; Other_Alphabetic # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; Other_Alphabetic # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; Other_Alphabetic # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; Other_Alphabetic # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AE2..0AE3 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AFA..0AFC ; Other_Alphabetic # Mn [3] GUJARATI SIGN SUKUN..GUJARATI SIGN MADDAH
+0B01 ; Other_Alphabetic # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; Other_Alphabetic # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B3E ; Other_Alphabetic # Mc ORIYA VOWEL SIGN AA
+0B3F ; Other_Alphabetic # Mn ORIYA VOWEL SIGN I
+0B40 ; Other_Alphabetic # Mc ORIYA VOWEL SIGN II
+0B41..0B44 ; Other_Alphabetic # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48 ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B56 ; Other_Alphabetic # Mn ORIYA AI LENGTH MARK
+0B57 ; Other_Alphabetic # Mc ORIYA AU LENGTH MARK
+0B62..0B63 ; Other_Alphabetic # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82 ; Other_Alphabetic # Mn TAMIL SIGN ANUSVARA
+0BBE..0BBF ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; Other_Alphabetic # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD7 ; Other_Alphabetic # Mc TAMIL AU LENGTH MARK
+0C00 ; Other_Alphabetic # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03 ; Other_Alphabetic # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C3E..0C40 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; Other_Alphabetic # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4C ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU
+0C55..0C56 ; Other_Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63 ; Other_Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C81 ; Other_Alphabetic # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83 ; Other_Alphabetic # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0CBE ; Other_Alphabetic # Mc KANNADA VOWEL SIGN AA
+0CBF ; Other_Alphabetic # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; Other_Alphabetic # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; Other_Alphabetic # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC ; Other_Alphabetic # Mn KANNADA VOWEL SIGN AU
+0CD5..0CD6 ; Other_Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE2..0CE3 ; Other_Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D00..0D01 ; Other_Alphabetic # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03 ; Other_Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3E..0D40 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44 ; Other_Alphabetic # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D57 ; Other_Alphabetic # Mc MALAYALAM AU LENGTH MARK
+0D62..0D63 ; Other_Alphabetic # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D82..0D83 ; Other_Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0DCF..0DD1 ; Other_Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; Other_Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Other_Alphabetic # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; Other_Alphabetic # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3 ; Other_Alphabetic # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E31 ; Other_Alphabetic # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; Other_Alphabetic # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E4D ; Other_Alphabetic # Mn THAI CHARACTER NIKHAHIT
+0EB1 ; Other_Alphabetic # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EB9 ; Other_Alphabetic # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; Other_Alphabetic # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0ECD ; Other_Alphabetic # Mn LAO NIGGAHITA
+0F71..0F7E ; Other_Alphabetic # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; Other_Alphabetic # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F81 ; Other_Alphabetic # Mn [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II
+0F8D..0F97 ; Other_Alphabetic # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Other_Alphabetic # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+102B..102C ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030 ; Other_Alphabetic # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN E
+1032..1036 ; Other_Alphabetic # Mn [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA
+1038 ; Other_Alphabetic # Mc MYANMAR SIGN VISARGA
+103B..103C ; Other_Alphabetic # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E ; Other_Alphabetic # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1056..1057 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060 ; Other_Alphabetic # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1062..1064 ; Other_Alphabetic # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1067..106D ; Other_Alphabetic # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+1071..1074 ; Other_Alphabetic # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082 ; Other_Alphabetic # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C ; Other_Alphabetic # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; Other_Alphabetic # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108F ; Other_Alphabetic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+109A..109C ; Other_Alphabetic # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D ; Other_Alphabetic # Mn MYANMAR VOWEL SIGN AITON AI
+1712..1713 ; Other_Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U
+1732..1733 ; Other_Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1752..1753 ; Other_Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; Other_Alphabetic # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B6 ; Other_Alphabetic # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; Other_Alphabetic # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; Other_Alphabetic # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; Other_Alphabetic # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; Other_Alphabetic # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+1885..1886 ; Other_Alphabetic # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+18A9 ; Other_Alphabetic # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; Other_Alphabetic # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; Other_Alphabetic # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; Other_Alphabetic # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; Other_Alphabetic # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1A17..1A18 ; Other_Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A ; Other_Alphabetic # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B ; Other_Alphabetic # Mn BUGINESE VOWEL SIGN AE
+1A55 ; Other_Alphabetic # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56 ; Other_Alphabetic # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57 ; Other_Alphabetic # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E ; Other_Alphabetic # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A61 ; Other_Alphabetic # Mc TAI THAM VOWEL SIGN A
+1A62 ; Other_Alphabetic # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64 ; Other_Alphabetic # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C ; Other_Alphabetic # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72 ; Other_Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A74 ; Other_Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
+1B00..1B03 ; Other_Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04 ; Other_Alphabetic # Mc BALINESE SIGN BISAH
+1B35 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A ; Other_Alphabetic # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B ; Other_Alphabetic # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C ; Other_Alphabetic # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41 ; Other_Alphabetic # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42 ; Other_Alphabetic # Mn BALINESE VOWEL SIGN PEPET
+1B43 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+1B80..1B81 ; Other_Alphabetic # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82 ; Other_Alphabetic # Mc SUNDANESE SIGN PANGWISAD
+1BA1 ; Other_Alphabetic # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5 ; Other_Alphabetic # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7 ; Other_Alphabetic # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9 ; Other_Alphabetic # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAC..1BAD ; Other_Alphabetic # Mn [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BE7 ; Other_Alphabetic # Mc BATAK VOWEL SIGN E
+1BE8..1BE9 ; Other_Alphabetic # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC ; Other_Alphabetic # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED ; Other_Alphabetic # Mn BATAK VOWEL SIGN KARO O
+1BEE ; Other_Alphabetic # Mc BATAK VOWEL SIGN U
+1BEF..1BF1 ; Other_Alphabetic # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1C24..1C2B ; Other_Alphabetic # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33 ; Other_Alphabetic # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35 ; Other_Alphabetic # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36 ; Other_Alphabetic # Mn LEPCHA SIGN RAN
+1DE7..1DF4 ; Other_Alphabetic # Mn [14] COMBINING LATIN SMALL LETTER ALPHA..COMBINING LATIN SMALL LETTER U WITH DIAERESIS
+24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2DE0..2DFF ; Other_Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+A674..A67B ; Other_Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA
+A69E..A69F ; Other_Alphabetic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A802 ; Other_Alphabetic # Mn SYLOTI NAGRI SIGN DVISVARA
+A80B ; Other_Alphabetic # Mn SYLOTI NAGRI SIGN ANUSVARA
+A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
+A880..A881 ; Other_Alphabetic # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A8B4..A8C3 ; Other_Alphabetic # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C5 ; Other_Alphabetic # Mn SAURASHTRA SIGN CANDRABINDU
+A8FF ; Other_Alphabetic # Mn DEVANAGARI VOWEL SIGN AY
+A926..A92A ; Other_Alphabetic # Mn [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O
+A947..A951 ; Other_Alphabetic # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952 ; Other_Alphabetic # Mc REJANG CONSONANT SIGN H
+A980..A982 ; Other_Alphabetic # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983 ; Other_Alphabetic # Mc JAVANESE SIGN WIGNYAN
+A9B4..A9B5 ; Other_Alphabetic # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9 ; Other_Alphabetic # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB ; Other_Alphabetic # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD ; Other_Alphabetic # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9BF ; Other_Alphabetic # Mc [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA
+A9E5 ; Other_Alphabetic # Mn MYANMAR SIGN SHAN SAW
+AA29..AA2E ; Other_Alphabetic # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30 ; Other_Alphabetic # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32 ; Other_Alphabetic # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34 ; Other_Alphabetic # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36 ; Other_Alphabetic # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43 ; Other_Alphabetic # Mn CHAM CONSONANT SIGN FINAL NG
+AA4C ; Other_Alphabetic # Mn CHAM CONSONANT SIGN FINAL M
+AA4D ; Other_Alphabetic # Mc CHAM CONSONANT SIGN FINAL H
+AA7B ; Other_Alphabetic # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C ; Other_Alphabetic # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D ; Other_Alphabetic # Mc MYANMAR SIGN TAI LAING TONE-5
+AAB0 ; Other_Alphabetic # Mn TAI VIET MAI KANG
+AAB2..AAB4 ; Other_Alphabetic # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8 ; Other_Alphabetic # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE ; Other_Alphabetic # Mn TAI VIET VOWEL AM
+AAEB ; Other_Alphabetic # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; Other_Alphabetic # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF5 ; Other_Alphabetic # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+ABE3..ABE4 ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5 ; Other_Alphabetic # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7 ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8 ; Other_Alphabetic # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+10376..1037A ; Other_Alphabetic # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10A01..10A03 ; Other_Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Other_Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Other_Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10D24..10D27 ; Other_Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU
+11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA
+11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA
+11038..11045 ; Other_Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU
+11082 ; Other_Alphabetic # Mc KAITHI SIGN VISARGA
+110B0..110B2 ; Other_Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6 ; Other_Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8 ; Other_Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+11100..11102 ; Other_Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E
+1112D..11132 ; Other_Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK
+11145..11146 ; Other_Alphabetic # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11180..11181 ; Other_Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; Other_Alphabetic # Mc SHARADA SIGN VISARGA
+111B3..111B5 ; Other_Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; Other_Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF ; Other_Alphabetic # Mc SHARADA VOWEL SIGN AU
+1122C..1122E ; Other_Alphabetic # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231 ; Other_Alphabetic # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233 ; Other_Alphabetic # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234 ; Other_Alphabetic # Mn KHOJKI SIGN ANUSVARA
+11237 ; Other_Alphabetic # Mn KHOJKI SIGN SHADDA
+1123E ; Other_Alphabetic # Mn KHOJKI SIGN SUKUN
+112DF ; Other_Alphabetic # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2 ; Other_Alphabetic # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112E8 ; Other_Alphabetic # Mn [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU
+11300..11301 ; Other_Alphabetic # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303 ; Other_Alphabetic # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+1133E..1133F ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340 ; Other_Alphabetic # Mn GRANTHA VOWEL SIGN II
+11341..11344 ; Other_Alphabetic # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134C ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+11357 ; Other_Alphabetic # Mc GRANTHA AU LENGTH MARK
+11362..11363 ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11435..11437 ; Other_Alphabetic # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; Other_Alphabetic # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; Other_Alphabetic # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11443..11444 ; Other_Alphabetic # Mn [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA
+11445 ; Other_Alphabetic # Mc NEWA SIGN VISARGA
+114B0..114B2 ; Other_Alphabetic # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8 ; Other_Alphabetic # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9 ; Other_Alphabetic # Mc TIRHUTA VOWEL SIGN E
+114BA ; Other_Alphabetic # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE ; Other_Alphabetic # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0 ; Other_Alphabetic # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1 ; Other_Alphabetic # Mc TIRHUTA SIGN VISARGA
+115AF..115B1 ; Other_Alphabetic # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5 ; Other_Alphabetic # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB ; Other_Alphabetic # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD ; Other_Alphabetic # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE ; Other_Alphabetic # Mc SIDDHAM SIGN VISARGA
+115DC..115DD ; Other_Alphabetic # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11630..11632 ; Other_Alphabetic # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A ; Other_Alphabetic # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C ; Other_Alphabetic # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D ; Other_Alphabetic # Mn MODI SIGN ANUSVARA
+1163E ; Other_Alphabetic # Mc MODI SIGN VISARGA
+11640 ; Other_Alphabetic # Mn MODI SIGN ARDHACANDRA
+116AB ; Other_Alphabetic # Mn TAKRI SIGN ANUSVARA
+116AC ; Other_Alphabetic # Mc TAKRI SIGN VISARGA
+116AD ; Other_Alphabetic # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; Other_Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; Other_Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+1171D..1171F ; Other_Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Other_Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Other_Alphabetic # Mc AHOM VOWEL SIGN E
+11727..1172A ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
+1182C..1182E ; Other_Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Other_Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Other_Alphabetic # Mc DOGRA SIGN VISARGA
+119D1..119D3 ; Other_Alphabetic # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7 ; Other_Alphabetic # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; Other_Alphabetic # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF ; Other_Alphabetic # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E4 ; Other_Alphabetic # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A01..11A0A ; Other_Alphabetic # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A35..11A38 ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; Other_Alphabetic # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3B..11A3E ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A51..11A56 ; Other_Alphabetic # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; Other_Alphabetic # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; Other_Alphabetic # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A96 ; Other_Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; Other_Alphabetic # Mc SOYOMBO SIGN VISARGA
+11C2F ; Other_Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; Other_Alphabetic # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Other_Alphabetic # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; Other_Alphabetic # Mc BHAIKSUKI SIGN VISARGA
+11C92..11CA7 ; Other_Alphabetic # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; Other_Alphabetic # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; Other_Alphabetic # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; Other_Alphabetic # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; Other_Alphabetic # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; Other_Alphabetic # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; Other_Alphabetic # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D36 ; Other_Alphabetic # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Other_Alphabetic # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Other_Alphabetic # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D41 ; Other_Alphabetic # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA
+11D43 ; Other_Alphabetic # Mn MASARAM GONDI SIGN CANDRA
+11D47 ; Other_Alphabetic # Mn MASARAM GONDI RA-KARA
+11D8A..11D8E ; Other_Alphabetic # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Other_Alphabetic # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Other_Alphabetic # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Other_Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Other_Alphabetic # Mc GUNJALA GONDI SIGN VISARGA
+11EF3..11EF4 ; Other_Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Other_Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+16F4F ; Other_Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F51..16F87 ; Other_Alphabetic # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92 ; Other_Alphabetic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK
+1E000..1E006 ; Other_Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Other_Alphabetic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Other_Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Other_Alphabetic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Other_Alphabetic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E947 ; Other_Alphabetic # Mn ADLAM HAMZA
+1F130..1F149 ; Other_Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
+1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+
+# Total code points: 1377
+
+# ================================================
+
+3006 ; Ideographic # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; Ideographic # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FEF ; Ideographic # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+17000..187F7 ; Ideographic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18AF2 ; Ideographic # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 96190
+
+# ================================================
+
+005E ; Diacritic # Sk CIRCUMFLEX ACCENT
+0060 ; Diacritic # Sk GRAVE ACCENT
+00A8 ; Diacritic # Sk DIAERESIS
+00AF ; Diacritic # Sk MACRON
+00B4 ; Diacritic # Sk ACUTE ACCENT
+00B7 ; Diacritic # Po MIDDLE DOT
+00B8 ; Diacritic # Sk CEDILLA
+02B0..02C1 ; Diacritic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; Diacritic # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1 ; Diacritic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF ; Diacritic # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4 ; Diacritic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB ; Diacritic # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC ; Diacritic # Lm MODIFIER LETTER VOICING
+02ED ; Diacritic # Sk MODIFIER LETTER UNASPIRATED
+02EE ; Diacritic # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; Diacritic # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..034E ; Diacritic # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW
+0350..0357 ; Diacritic # Mn [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE
+035D..0362 ; Diacritic # Mn [6] COMBINING DOUBLE BREVE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0374 ; Diacritic # Lm GREEK NUMERAL SIGN
+0375 ; Diacritic # Sk GREEK LOWER NUMERAL SIGN
+037A ; Diacritic # Lm GREEK YPOGEGRAMMENI
+0384..0385 ; Diacritic # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0483..0487 ; Diacritic # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0559 ; Diacritic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0591..05A1 ; Diacritic # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
+05A3..05BD ; Diacritic # Mn [27] HEBREW ACCENT MUNAH..HEBREW POINT METEG
+05BF ; Diacritic # Mn HEBREW POINT RAFE
+05C1..05C2 ; Diacritic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4 ; Diacritic # Mn HEBREW MARK UPPER DOT
+064B..0652 ; Diacritic # Mn [8] ARABIC FATHATAN..ARABIC SUKUN
+0657..0658 ; Diacritic # Mn [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA
+06DF..06E0 ; Diacritic # Mn [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E5..06E6 ; Diacritic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EA..06EC ; Diacritic # Mn [3] ARABIC EMPTY CENTRE LOW STOP..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+0730..074A ; Diacritic # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; Diacritic # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH
+08E3..08FE ; Diacritic # Mn [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT
+093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA
+094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA
+0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+0971 ; Diacritic # Lm DEVANAGARI SIGN HIGH SPACING DOT
+09BC ; Diacritic # Mn BENGALI SIGN NUKTA
+09CD ; Diacritic # Mn BENGALI SIGN VIRAMA
+0A3C ; Diacritic # Mn GURMUKHI SIGN NUKTA
+0A4D ; Diacritic # Mn GURMUKHI SIGN VIRAMA
+0ABC ; Diacritic # Mn GUJARATI SIGN NUKTA
+0ACD ; Diacritic # Mn GUJARATI SIGN VIRAMA
+0AFD..0AFF ; Diacritic # Mn [3] GUJARATI SIGN THREE-DOT NUKTA ABOVE..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B3C ; Diacritic # Mn ORIYA SIGN NUKTA
+0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA
+0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA
+0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA
+0CBC ; Diacritic # Mn KANNADA SIGN NUKTA
+0CCD ; Diacritic # Mn KANNADA SIGN VIRAMA
+0D3B..0D3C ; Diacritic # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D4D ; Diacritic # Mn MALAYALAM SIGN VIRAMA
+0DCA ; Diacritic # Mn SINHALA SIGN AL-LAKUNA
+0E47..0E4C ; Diacritic # Mn [6] THAI CHARACTER MAITAIKHU..THAI CHARACTER THANTHAKHAT
+0E4E ; Diacritic # Mn THAI CHARACTER YAMAKKAN
+0EBA ; Diacritic # Mn LAO SIGN PALI VIRAMA
+0EC8..0ECC ; Diacritic # Mn [5] LAO TONE MAI EK..LAO CANCELLATION MARK
+0F18..0F19 ; Diacritic # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; Diacritic # Mn TIBETAN MARK TSA -PHRU
+0F3E..0F3F ; Diacritic # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F82..0F84 ; Diacritic # Mn [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
+0F86..0F87 ; Diacritic # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0FC6 ; Diacritic # Mn TIBETAN SYMBOL PADMA GDAN
+1037 ; Diacritic # Mn MYANMAR SIGN DOT BELOW
+1039..103A ; Diacritic # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+1063..1064 ; Diacritic # Mc [2] MYANMAR TONE MARK SGAW KAREN HATHI..MYANMAR TONE MARK SGAW KAREN KE PHO
+1069..106D ; Diacritic # Mc [5] MYANMAR SIGN WESTERN PWO KAREN TONE-1..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+1087..108C ; Diacritic # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; Diacritic # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108F ; Diacritic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+109A..109B ; Diacritic # Mc [2] MYANMAR SIGN KHAMTI TONE-1..MYANMAR SIGN KHAMTI TONE-3
+135D..135F ; Diacritic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+17C9..17D3 ; Diacritic # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD ; Diacritic # Mn KHMER SIGN ATTHACAN
+1939..193B ; Diacritic # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A75..1A7C ; Diacritic # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; Diacritic # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1AB0..1ABD ; Diacritic # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1B34 ; Diacritic # Mn BALINESE SIGN REREKAN
+1B44 ; Diacritic # Mc BALINESE ADEG ADEG
+1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1BAA ; Diacritic # Mc SUNDANESE SIGN PAMAAEH
+1BAB ; Diacritic # Mn SUNDANESE SIGN VIRAMA
+1C36..1C37 ; Diacritic # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C78..1C7D ; Diacritic # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CD0..1CD2 ; Diacritic # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD3 ; Diacritic # Po VEDIC SIGN NIHSHVASA
+1CD4..1CE0 ; Diacritic # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1 ; Diacritic # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8 ; Diacritic # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED ; Diacritic # Mn VEDIC SIGN TIRYAK
+1CF4 ; Diacritic # Mn VEDIC TONE CANDRA ABOVE
+1CF7 ; Diacritic # Mc VEDIC SIGN ATIKRAMA
+1CF8..1CF9 ; Diacritic # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW
+1DF5..1DF9 ; Diacritic # Mn [5] COMBINING UP TACK ABOVE..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFD..1DFF ; Diacritic # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1FBD ; Diacritic # Sk GREEK KORONIS
+1FBF..1FC1 ; Diacritic # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF ; Diacritic # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF ; Diacritic # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEF ; Diacritic # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FFD..1FFE ; Diacritic # Sk [2] GREEK OXIA..GREEK DASIA
+2CEF..2CF1 ; Diacritic # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2E2F ; Diacritic # Lm VERTICAL TILDE
+302A..302D ; Diacritic # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F ; Diacritic # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; Diacritic # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C ; Diacritic # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30FC ; Diacritic # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
+A66F ; Diacritic # Mn COMBINING CYRILLIC VZMET
+A67C..A67D ; Diacritic # Mn [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A67F ; Diacritic # Lm CYRILLIC PAYEROK
+A69C..A69D ; Diacritic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A6F0..A6F1 ; Diacritic # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A700..A716 ; Diacritic # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F ; Diacritic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721 ; Diacritic # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A788 ; Diacritic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A ; Diacritic # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A7F8..A7F9 ; Diacritic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A8C4 ; Diacritic # Mn SAURASHTRA SIGN VIRAMA
+A8E0..A8F1 ; Diacritic # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A92B..A92D ; Diacritic # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU
+A92E ; Diacritic # Po KAYAH LI SIGN CWI
+A953 ; Diacritic # Mc REJANG VIRAMA
+A9B3 ; Diacritic # Mn JAVANESE SIGN CECAK TELU
+A9C0 ; Diacritic # Mc JAVANESE PANGKON
+A9E5 ; Diacritic # Mn MYANMAR SIGN SHAN SAW
+AA7B ; Diacritic # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C ; Diacritic # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D ; Diacritic # Mc MYANMAR SIGN TAI LAING TONE-5
+AABF ; Diacritic # Mn TAI VIET TONE MAI EK
+AAC0 ; Diacritic # Lo TAI VIET TONE MAI NUENG
+AAC1 ; Diacritic # Mn TAI VIET TONE MAI THO
+AAC2 ; Diacritic # Lo TAI VIET TONE MAI SONG
+AAF6 ; Diacritic # Mn MEETEI MAYEK VIRAMA
+AB5B ; Diacritic # Sk MODIFIER BREVE WITH INVERTED BREVE
+AB5C..AB5F ; Diacritic # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+ABEC ; Diacritic # Mc MEETEI MAYEK LUM IYEK
+ABED ; Diacritic # Mn MEETEI MAYEK APUN IYEK
+FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FE20..FE2F ; Diacritic # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FF3E ; Diacritic # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF40 ; Diacritic # Sk FULLWIDTH GRAVE ACCENT
+FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE3 ; Diacritic # Sk FULLWIDTH MACRON
+102E0 ; Diacritic # Mn COPTIC EPACT THOUSANDS MARK
+10AE5..10AE6 ; Diacritic # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10D22..10D23 ; Diacritic # Lo [2] HANIFI ROHINGYA MARK SAKIN..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
+11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA
+111C0 ; Diacritic # Mc SHARADA SIGN VIRAMA
+111CA..111CC ; Diacritic # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
+11235 ; Diacritic # Mc KHOJKI SIGN VIRAMA
+11236 ; Diacritic # Mn KHOJKI SIGN NUKTA
+112E9..112EA ; Diacritic # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA
+1133C ; Diacritic # Mn GRANTHA SIGN NUKTA
+1134D ; Diacritic # Mc GRANTHA SIGN VIRAMA
+11366..1136C ; Diacritic # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; Diacritic # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11442 ; Diacritic # Mn NEWA SIGN VIRAMA
+11446 ; Diacritic # Mn NEWA SIGN NUKTA
+114C2..114C3 ; Diacritic # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+115BF..115C0 ; Diacritic # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+1163F ; Diacritic # Mn MODI SIGN VIRAMA
+116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA
+116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
+1172B ; Diacritic # Mn AHOM SIGN KILLER
+11839..1183A ; Diacritic # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+119E0 ; Diacritic # Mn NANDINAGARI SIGN VIRAMA
+11A34 ; Diacritic # Mn ZANABAZAR SQUARE SIGN VIRAMA
+11A47 ; Diacritic # Mn ZANABAZAR SQUARE SUBJOINER
+11A99 ; Diacritic # Mn SOYOMBO SUBJOINER
+11C3F ; Diacritic # Mn BHAIKSUKI SIGN VIRAMA
+11D42 ; Diacritic # Mn MASARAM GONDI SIGN NUKTA
+11D44..11D45 ; Diacritic # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA
+11D97 ; Diacritic # Mn GUNJALA GONDI VIRAMA
+16AF0..16AF4 ; Diacritic # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B30..16B36 ; Diacritic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1E130..1E136 ; Diacritic # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E2EC..1E2EF ; Diacritic # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E8D0..1E8D6 ; Diacritic # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
+1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA
+
+# Total code points: 873
+
+# ================================================
+
+00B7 ; Extender # Po MIDDLE DOT
+02D0..02D1 ; Extender # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON
+0640 ; Extender # Lm ARABIC TATWEEL
+07FA ; Extender # Lm NKO LAJANYALAN
+0E46 ; Extender # Lm THAI CHARACTER MAIYAMOK
+0EC6 ; Extender # Lm LAO KO LA
+180A ; Extender # Po MONGOLIAN NIRUGU
+1843 ; Extender # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1AA7 ; Extender # Lm TAI THAM SIGN MAI YAMOK
+1C36 ; Extender # Mn LEPCHA SIGN RAN
+1C7B ; Extender # Lm OL CHIKI RELAA
+3005 ; Extender # Lm IDEOGRAPHIC ITERATION MARK
+3031..3035 ; Extender # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+309D..309E ; Extender # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30FC..30FE ; Extender # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+A015 ; Extender # Lm YI SYLLABLE WU
+A60C ; Extender # Lm VAI SYLLABLE LENGTHENER
+A9CF ; Extender # Lm JAVANESE PANGRANGKEP
+A9E6 ; Extender # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+AA70 ; Extender # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AADD ; Extender # Lm TAI VIET SYMBOL SAM
+AAF3..AAF4 ; Extender # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+1135D ; Extender # Lo GRANTHA SIGN PLUTA
+115C6..115C8 ; Extender # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3
+11A98 ; Extender # Mn SOYOMBO GEMINATION MARK
+16B42..16B43 ; Extender # Lm [2] PAHAWH HMONG SIGN VOS NRUA..PAHAWH HMONG SIGN IB YAM
+16FE0..16FE1 ; Extender # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; Extender # Lm OLD CHINESE ITERATION MARK
+1E13C..1E13D ; Extender # Lm [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
+
+# Total code points: 47
+
+# ================================================
+
+00AA ; Other_Lowercase # Lo FEMININE ORDINAL INDICATOR
+00BA ; Other_Lowercase # Lo MASCULINE ORDINAL INDICATOR
+02B0..02B8 ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1 ; Other_Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4 ; Other_Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345 ; Other_Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI
+037A ; Other_Lowercase # Lm GREEK YPOGEGRAMMENI
+1D2C..1D6A ; Other_Lowercase # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D78 ; Other_Lowercase # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; Other_Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+2071 ; Other_Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Other_Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Other_Lowercase # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+2170..217F ; Other_Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+24D0..24E9 ; Other_Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C7C..2C7D ; Other_Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+A69C..A69D ; Other_Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A770 ; Other_Lowercase # Lm MODIFIER LETTER US
+A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+AB5C..AB5F ; Other_Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+
+# Total code points: 189
+
+# ================================================
+
+2160..216F ; Other_Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+24B6..24CF ; Other_Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+1F130..1F149 ; Other_Uppercase # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
+1F150..1F169 ; Other_Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F170..1F189 ; Other_Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+
+# Total code points: 120
+
+# ================================================
+
+FDD0..FDEF ; Noncharacter_Code_Point # Cn [32] <noncharacter-FDD0>..<noncharacter-FDEF>
+FFFE..FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFE>..<noncharacter-FFFF>
+1FFFE..1FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>
+2FFFE..2FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>
+3FFFE..3FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>
+4FFFE..4FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>
+5FFFE..5FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>
+6FFFE..6FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>
+7FFFE..7FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>
+8FFFE..8FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>
+9FFFE..9FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>
+AFFFE..AFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>
+BFFFE..BFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>
+CFFFE..CFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>
+DFFFE..DFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-DFFFE>..<noncharacter-DFFFF>
+EFFFE..EFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>
+FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
+10FFFE..10FFFF; Noncharacter_Code_Point # Cn [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
+
+# Total code points: 66
+
+# ================================================
+
+09BE ; Other_Grapheme_Extend # Mc BENGALI VOWEL SIGN AA
+09D7 ; Other_Grapheme_Extend # Mc BENGALI AU LENGTH MARK
+0B3E ; Other_Grapheme_Extend # Mc ORIYA VOWEL SIGN AA
+0B57 ; Other_Grapheme_Extend # Mc ORIYA AU LENGTH MARK
+0BBE ; Other_Grapheme_Extend # Mc TAMIL VOWEL SIGN AA
+0BD7 ; Other_Grapheme_Extend # Mc TAMIL AU LENGTH MARK
+0CC2 ; Other_Grapheme_Extend # Mc KANNADA VOWEL SIGN UU
+0CD5..0CD6 ; Other_Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0D3E ; Other_Grapheme_Extend # Mc MALAYALAM VOWEL SIGN AA
+0D57 ; Other_Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK
+0DCF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA
+0DDF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA
+1B35 ; Other_Grapheme_Extend # Mc BALINESE VOWEL SIGN TEDUNG
+200C ; Other_Grapheme_Extend # Cf ZERO WIDTH NON-JOINER
+302E..302F ; Other_Grapheme_Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+FF9E..FF9F ; Other_Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+1133E ; Other_Grapheme_Extend # Mc GRANTHA VOWEL SIGN AA
+11357 ; Other_Grapheme_Extend # Mc GRANTHA AU LENGTH MARK
+114B0 ; Other_Grapheme_Extend # Mc TIRHUTA VOWEL SIGN AA
+114BD ; Other_Grapheme_Extend # Mc TIRHUTA VOWEL SIGN SHORT O
+115AF ; Other_Grapheme_Extend # Mc SIDDHAM VOWEL SIGN AA
+1D165 ; Other_Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM
+1D16E..1D172 ; Other_Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
+E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG
+
+# Total code points: 126
+
+# ================================================
+
+2FF0..2FF1 ; IDS_Binary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF4..2FFB ; IDS_Binary_Operator # So [8] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+
+# Total code points: 10
+
+# ================================================
+
+2FF2..2FF3 ; IDS_Trinary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+
+# Total code points: 2
+
+# ================================================
+
+2E80..2E99 ; Radical # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3 ; Radical # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+
+# Total code points: 329
+
+# ================================================
+
+3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FEF ; Unified_Ideograph # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
+FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
+FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21
+FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
+FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
+20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+
+# Total code points: 87887
+
+# ================================================
+
+034F ; Other_Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER
+115F..1160 ; Other_Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+17B4..17B5 ; Other_Default_Ignorable_Code_Point # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+2065 ; Other_Default_Ignorable_Code_Point # Cn <reserved-2065>
+3164 ; Other_Default_Ignorable_Code_Point # Lo HANGUL FILLER
+FFA0 ; Other_Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER
+FFF0..FFF8 ; Other_Default_Ignorable_Code_Point # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+E0000 ; Other_Default_Ignorable_Code_Point # Cn <reserved-E0000>
+E0002..E001F ; Other_Default_Ignorable_Code_Point # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0080..E00FF ; Other_Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 3776
+
+# ================================================
+
+0149 ; Deprecated # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0673 ; Deprecated # Lo ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0F77 ; Deprecated # Mn TIBETAN VOWEL SIGN VOCALIC RR
+0F79 ; Deprecated # Mn TIBETAN VOWEL SIGN VOCALIC LL
+17A3..17A4 ; Deprecated # Lo [2] KHMER INDEPENDENT VOWEL QAQ..KHMER INDEPENDENT VOWEL QAA
+206A..206F ; Deprecated # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+2329 ; Deprecated # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Deprecated # Pe RIGHT-POINTING ANGLE BRACKET
+E0001 ; Deprecated # Cf LANGUAGE TAG
+
+# Total code points: 15
+
+# ================================================
+
+0069..006A ; Soft_Dotted # L& [2] LATIN SMALL LETTER I..LATIN SMALL LETTER J
+012F ; Soft_Dotted # L& LATIN SMALL LETTER I WITH OGONEK
+0249 ; Soft_Dotted # L& LATIN SMALL LETTER J WITH STROKE
+0268 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH STROKE
+029D ; Soft_Dotted # L& LATIN SMALL LETTER J WITH CROSSED-TAIL
+02B2 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J
+03F3 ; Soft_Dotted # L& GREEK LETTER YOT
+0456 ; Soft_Dotted # L& CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0458 ; Soft_Dotted # L& CYRILLIC SMALL LETTER JE
+1D62 ; Soft_Dotted # Lm LATIN SUBSCRIPT SMALL LETTER I
+1D96 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1DA4 ; Soft_Dotted # Lm MODIFIER LETTER SMALL I WITH STROKE
+1DA8 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1E2D ; Soft_Dotted # L& LATIN SMALL LETTER I WITH TILDE BELOW
+1ECB ; Soft_Dotted # L& LATIN SMALL LETTER I WITH DOT BELOW
+2071 ; Soft_Dotted # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2148..2149 ; Soft_Dotted # L& [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J
+2C7C ; Soft_Dotted # Lm LATIN SUBSCRIPT SMALL LETTER J
+1D422..1D423 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J
+1D456..1D457 ; Soft_Dotted # L& [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J
+1D48A..1D48B ; Soft_Dotted # L& [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J
+1D4BE..1D4BF ; Soft_Dotted # L& [2] MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J
+1D4F2..1D4F3 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J
+1D526..1D527 ; Soft_Dotted # L& [2] MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J
+1D55A..1D55B ; Soft_Dotted # L& [2] MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D58E..1D58F ; Soft_Dotted # L& [2] MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J
+1D5C2..1D5C3 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J
+1D5F6..1D5F7 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D62A..1D62B ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J
+
+# Total code points: 46
+
+# ================================================
+
+0E40..0E44 ; Logical_Order_Exception # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI
+0EC0..0EC4 ; Logical_Order_Exception # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+19B5..19B7 ; Logical_Order_Exception # Lo [3] NEW TAI LUE VOWEL SIGN E..NEW TAI LUE VOWEL SIGN O
+19BA ; Logical_Order_Exception # Lo NEW TAI LUE VOWEL SIGN AY
+AAB5..AAB6 ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9 ; Logical_Order_Exception # Lo TAI VIET VOWEL UEA
+AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY
+
+# Total code points: 19
+
+# ================================================
+
+1885..1886 ; Other_ID_Start # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+2118 ; Other_ID_Start # Sm SCRIPT CAPITAL P
+212E ; Other_ID_Start # So ESTIMATED SYMBOL
+309B..309C ; Other_ID_Start # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+
+# Total code points: 6
+
+# ================================================
+
+00B7 ; Other_ID_Continue # Po MIDDLE DOT
+0387 ; Other_ID_Continue # Po GREEK ANO TELEIA
+1369..1371 ; Other_ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+19DA ; Other_ID_Continue # No NEW TAI LUE THAM DIGIT ONE
+
+# Total code points: 12
+
+# ================================================
+
+0021 ; Sentence_Terminal # Po EXCLAMATION MARK
+002E ; Sentence_Terminal # Po FULL STOP
+003F ; Sentence_Terminal # Po QUESTION MARK
+0589 ; Sentence_Terminal # Po ARMENIAN FULL STOP
+061E..061F ; Sentence_Terminal # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+06D4 ; Sentence_Terminal # Po ARABIC FULL STOP
+0700..0702 ; Sentence_Terminal # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
+07F9 ; Sentence_Terminal # Po NKO EXCLAMATION MARK
+0837 ; Sentence_Terminal # Po SAMARITAN PUNCTUATION MELODIC QITSA
+0839 ; Sentence_Terminal # Po SAMARITAN PUNCTUATION QITSA
+083D..083E ; Sentence_Terminal # Po [2] SAMARITAN PUNCTUATION SOF MASHFAAT..SAMARITAN PUNCTUATION ANNAAU
+0964..0965 ; Sentence_Terminal # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+104A..104B ; Sentence_Terminal # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+1362 ; Sentence_Terminal # Po ETHIOPIC FULL STOP
+1367..1368 ; Sentence_Terminal # Po [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+166E ; Sentence_Terminal # Po CANADIAN SYLLABICS FULL STOP
+1735..1736 ; Sentence_Terminal # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1803 ; Sentence_Terminal # Po MONGOLIAN FULL STOP
+1809 ; Sentence_Terminal # Po MONGOLIAN MANCHU FULL STOP
+1944..1945 ; Sentence_Terminal # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1AA8..1AAB ; Sentence_Terminal # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU
+1B5A..1B5B ; Sentence_Terminal # Po [2] BALINESE PANTI..BALINESE PAMADA
+1B5E..1B5F ; Sentence_Terminal # Po [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN
+1C3B..1C3C ; Sentence_Terminal # Po [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL
+1C7E..1C7F ; Sentence_Terminal # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+203C..203D ; Sentence_Terminal # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+2047..2049 ; Sentence_Terminal # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2E2E ; Sentence_Terminal # Po REVERSED QUESTION MARK
+2E3C ; Sentence_Terminal # Po STENOGRAPHIC FULL STOP
+3002 ; Sentence_Terminal # Po IDEOGRAPHIC FULL STOP
+A4FF ; Sentence_Terminal # Po LISU PUNCTUATION FULL STOP
+A60E..A60F ; Sentence_Terminal # Po [2] VAI FULL STOP..VAI QUESTION MARK
+A6F3 ; Sentence_Terminal # Po BAMUM FULL STOP
+A6F7 ; Sentence_Terminal # Po BAMUM QUESTION MARK
+A876..A877 ; Sentence_Terminal # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
+A8CE..A8CF ; Sentence_Terminal # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A92F ; Sentence_Terminal # Po KAYAH LI SIGN SHYA
+A9C8..A9C9 ; Sentence_Terminal # Po [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI
+AA5D..AA5F ; Sentence_Terminal # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
+AAF0..AAF1 ; Sentence_Terminal # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+ABEB ; Sentence_Terminal # Po MEETEI MAYEK CHEIKHEI
+FE52 ; Sentence_Terminal # Po SMALL FULL STOP
+FE56..FE57 ; Sentence_Terminal # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
+FF01 ; Sentence_Terminal # Po FULLWIDTH EXCLAMATION MARK
+FF0E ; Sentence_Terminal # Po FULLWIDTH FULL STOP
+FF1F ; Sentence_Terminal # Po FULLWIDTH QUESTION MARK
+FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+10A56..10A57 ; Sentence_Terminal # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10F55..10F59 ; Sentence_Terminal # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+11047..11048 ; Sentence_Terminal # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
+110BE..110C1 ; Sentence_Terminal # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+11141..11143 ; Sentence_Terminal # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
+111C5..111C6 ; Sentence_Terminal # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
+111CD ; Sentence_Terminal # Po SHARADA SUTRA MARK
+111DE..111DF ; Sentence_Terminal # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
+11238..11239 ; Sentence_Terminal # Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
+1123B..1123C ; Sentence_Terminal # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
+112A9 ; Sentence_Terminal # Po MULTANI SECTION MARK
+1144B..1144C ; Sentence_Terminal # Po [2] NEWA DANDA..NEWA DOUBLE DANDA
+115C2..115C3 ; Sentence_Terminal # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
+115C9..115D7 ; Sentence_Terminal # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+11641..11642 ; Sentence_Terminal # Po [2] MODI DANDA..MODI DOUBLE DANDA
+1173C..1173E ; Sentence_Terminal # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11A42..11A43 ; Sentence_Terminal # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
+11A9B..11A9C ; Sentence_Terminal # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
+11C41..11C42 ; Sentence_Terminal # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
+11EF7..11EF8 ; Sentence_Terminal # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+16A6E..16A6F ; Sentence_Terminal # Po [2] MRO DANDA..MRO DOUBLE DANDA
+16AF5 ; Sentence_Terminal # Po BASSA VAH FULL STOP
+16B37..16B38 ; Sentence_Terminal # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
+16B44 ; Sentence_Terminal # Po PAHAWH HMONG SIGN XAUS
+16E98 ; Sentence_Terminal # Po MEDEFAIDRIN FULL STOP
+1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP
+
+# Total code points: 141
+
+# ================================================
+
+180B..180D ; Variation_Selector # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 259
+
+# ================================================
+
+0009..000D ; Pattern_White_Space # Cc [5] <control-0009>..<control-000D>
+0020 ; Pattern_White_Space # Zs SPACE
+0085 ; Pattern_White_Space # Cc <control-0085>
+200E..200F ; Pattern_White_Space # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2028 ; Pattern_White_Space # Zl LINE SEPARATOR
+2029 ; Pattern_White_Space # Zp PARAGRAPH SEPARATOR
+
+# Total code points: 11
+
+# ================================================
+
+0021..0023 ; Pattern_Syntax # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024 ; Pattern_Syntax # Sc DOLLAR SIGN
+0025..0027 ; Pattern_Syntax # Po [3] PERCENT SIGN..APOSTROPHE
+0028 ; Pattern_Syntax # Ps LEFT PARENTHESIS
+0029 ; Pattern_Syntax # Pe RIGHT PARENTHESIS
+002A ; Pattern_Syntax # Po ASTERISK
+002B ; Pattern_Syntax # Sm PLUS SIGN
+002C ; Pattern_Syntax # Po COMMA
+002D ; Pattern_Syntax # Pd HYPHEN-MINUS
+002E..002F ; Pattern_Syntax # Po [2] FULL STOP..SOLIDUS
+003A..003B ; Pattern_Syntax # Po [2] COLON..SEMICOLON
+003C..003E ; Pattern_Syntax # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; Pattern_Syntax # Po [2] QUESTION MARK..COMMERCIAL AT
+005B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET
+005C ; Pattern_Syntax # Po REVERSE SOLIDUS
+005D ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET
+005E ; Pattern_Syntax # Sk CIRCUMFLEX ACCENT
+0060 ; Pattern_Syntax # Sk GRAVE ACCENT
+007B ; Pattern_Syntax # Ps LEFT CURLY BRACKET
+007C ; Pattern_Syntax # Sm VERTICAL LINE
+007D ; Pattern_Syntax # Pe RIGHT CURLY BRACKET
+007E ; Pattern_Syntax # Sm TILDE
+00A1 ; Pattern_Syntax # Po INVERTED EXCLAMATION MARK
+00A2..00A5 ; Pattern_Syntax # Sc [4] CENT SIGN..YEN SIGN
+00A6 ; Pattern_Syntax # So BROKEN BAR
+00A7 ; Pattern_Syntax # Po SECTION SIGN
+00A9 ; Pattern_Syntax # So COPYRIGHT SIGN
+00AB ; Pattern_Syntax # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; Pattern_Syntax # Sm NOT SIGN
+00AE ; Pattern_Syntax # So REGISTERED SIGN
+00B0 ; Pattern_Syntax # So DEGREE SIGN
+00B1 ; Pattern_Syntax # Sm PLUS-MINUS SIGN
+00B6 ; Pattern_Syntax # Po PILCROW SIGN
+00BB ; Pattern_Syntax # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BF ; Pattern_Syntax # Po INVERTED QUESTION MARK
+00D7 ; Pattern_Syntax # Sm MULTIPLICATION SIGN
+00F7 ; Pattern_Syntax # Sm DIVISION SIGN
+2010..2015 ; Pattern_Syntax # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; Pattern_Syntax # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; Pattern_Syntax # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Pattern_Syntax # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Pattern_Syntax # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Pattern_Syntax # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Pattern_Syntax # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Pattern_Syntax # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Pattern_Syntax # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; Pattern_Syntax # Po [8] DAGGER..HYPHENATION POINT
+2030..2038 ; Pattern_Syntax # Po [9] PER MILLE SIGN..CARET
+2039 ; Pattern_Syntax # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Pattern_Syntax # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; Pattern_Syntax # Po [4] REFERENCE MARK..OVERLINE
+2041..2043 ; Pattern_Syntax # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044 ; Pattern_Syntax # Sm FRACTION SLASH
+2045 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; Pattern_Syntax # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; Pattern_Syntax # Sm COMMERCIAL MINUS SIGN
+2053 ; Pattern_Syntax # Po SWUNG DASH
+2055..205E ; Pattern_Syntax # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+2190..2194 ; Pattern_Syntax # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Pattern_Syntax # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Pattern_Syntax # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Pattern_Syntax # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Pattern_Syntax # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Pattern_Syntax # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Pattern_Syntax # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Pattern_Syntax # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Pattern_Syntax # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; Pattern_Syntax # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; Pattern_Syntax # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; Pattern_Syntax # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Pattern_Syntax # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Pattern_Syntax # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Pattern_Syntax # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Pattern_Syntax # So DOWNWARDS DOUBLE ARROW
+21D4 ; Pattern_Syntax # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; Pattern_Syntax # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF ; Pattern_Syntax # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; Pattern_Syntax # So [8] DIAMETER SIGN..WAVY LINE
+2308 ; Pattern_Syntax # Ps LEFT CEILING
+2309 ; Pattern_Syntax # Pe RIGHT CEILING
+230A ; Pattern_Syntax # Ps LEFT FLOOR
+230B ; Pattern_Syntax # Pe RIGHT FLOOR
+230C..231F ; Pattern_Syntax # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; Pattern_Syntax # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; Pattern_Syntax # So [7] FROWN..KEYBOARD
+2329 ; Pattern_Syntax # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Pattern_Syntax # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B ; Pattern_Syntax # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C ; Pattern_Syntax # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A ; Pattern_Syntax # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3 ; Pattern_Syntax # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB ; Pattern_Syntax # So [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1 ; Pattern_Syntax # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..2426 ; Pattern_Syntax # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO
+2427..243F ; Pattern_Syntax # Cn [25] <reserved-2427>..<reserved-243F>
+2440..244A ; Pattern_Syntax # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+244B..245F ; Pattern_Syntax # Cn [21] <reserved-244B>..<reserved-245F>
+2500..25B6 ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Pattern_Syntax # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; Pattern_Syntax # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Pattern_Syntax # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; Pattern_Syntax # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; Pattern_Syntax # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E ; Pattern_Syntax # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F ; Pattern_Syntax # Sm MUSIC SHARP SIGN
+2670..2767 ; Pattern_Syntax # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET
+2768 ; Pattern_Syntax # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; Pattern_Syntax # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; Pattern_Syntax # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; Pattern_Syntax # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; Pattern_Syntax # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; Pattern_Syntax # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; Pattern_Syntax # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; Pattern_Syntax # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; Pattern_Syntax # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; Pattern_Syntax # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2794..27BF ; Pattern_Syntax # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
+27C0..27C4 ; Pattern_Syntax # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Pattern_Syntax # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Pattern_Syntax # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27E5 ; Pattern_Syntax # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Pattern_Syntax # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Pattern_Syntax # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Pattern_Syntax # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE ; Pattern_Syntax # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF ; Pattern_Syntax # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF ; Pattern_Syntax # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF ; Pattern_Syntax # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..2982 ; Pattern_Syntax # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Pattern_Syntax # Ps LEFT WHITE CURLY BRACKET
+2984 ; Pattern_Syntax # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Pattern_Syntax # Ps LEFT WHITE PARENTHESIS
+2986 ; Pattern_Syntax # Pe RIGHT WHITE PARENTHESIS
+2987 ; Pattern_Syntax # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Pattern_Syntax # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Pattern_Syntax # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Pattern_Syntax # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Pattern_Syntax # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Pattern_Syntax # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Pattern_Syntax # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Pattern_Syntax # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Pattern_Syntax # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Pattern_Syntax # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Pattern_Syntax # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Pattern_Syntax # Ps LEFT WIGGLY FENCE
+29D9 ; Pattern_Syntax # Pe RIGHT WIGGLY FENCE
+29DA ; Pattern_Syntax # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Pattern_Syntax # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Pattern_Syntax # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Pattern_Syntax # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Pattern_Syntax # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Pattern_Syntax # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B2F ; Pattern_Syntax # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44 ; Pattern_Syntax # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46 ; Pattern_Syntax # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C ; Pattern_Syntax # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B73 ; Pattern_Syntax # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B74..2B75 ; Pattern_Syntax # Cn [2] <reserved-2B74>..<reserved-2B75>
+2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B96..2B97 ; Pattern_Syntax # Cn [2] <reserved-2B96>..<reserved-2B97>
+2B98..2BFF ; Pattern_Syntax # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
+2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
+2E04 ; Pattern_Syntax # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Pattern_Syntax # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Pattern_Syntax # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Pattern_Syntax # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Pattern_Syntax # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Pattern_Syntax # Po RAISED SQUARE
+2E0C ; Pattern_Syntax # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Pattern_Syntax # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Pattern_Syntax # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Pattern_Syntax # Pd DOUBLE OBLIQUE HYPHEN
+2E18..2E19 ; Pattern_Syntax # Po [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A ; Pattern_Syntax # Pd HYPHEN WITH DIAERESIS
+2E1B ; Pattern_Syntax # Po TILDE WITH RING ABOVE
+2E1C ; Pattern_Syntax # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Pattern_Syntax # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F ; Pattern_Syntax # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20 ; Pattern_Syntax # Pi LEFT VERTICAL BAR WITH QUILL
+2E21 ; Pattern_Syntax # Pf RIGHT VERTICAL BAR WITH QUILL
+2E22 ; Pattern_Syntax # Ps TOP LEFT HALF BRACKET
+2E23 ; Pattern_Syntax # Pe TOP RIGHT HALF BRACKET
+2E24 ; Pattern_Syntax # Ps BOTTOM LEFT HALF BRACKET
+2E25 ; Pattern_Syntax # Pe BOTTOM RIGHT HALF BRACKET
+2E26 ; Pattern_Syntax # Ps LEFT SIDEWAYS U BRACKET
+2E27 ; Pattern_Syntax # Pe RIGHT SIDEWAYS U BRACKET
+2E28 ; Pattern_Syntax # Ps LEFT DOUBLE PARENTHESIS
+2E29 ; Pattern_Syntax # Pe RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E ; Pattern_Syntax # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F ; Pattern_Syntax # Lm VERTICAL TILDE
+2E30..2E39 ; Pattern_Syntax # Po [10] RING POINT..TOP HALF SECTION SIGN
+2E3A..2E3B ; Pattern_Syntax # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E3F ; Pattern_Syntax # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM
+2E40 ; Pattern_Syntax # Pd DOUBLE HYPHEN
+2E41 ; Pattern_Syntax # Po REVERSED COMMA
+2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E4F ; Pattern_Syntax # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E7F ; Pattern_Syntax # Cn [48] <reserved-2E50>..<reserved-2E7F>
+3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
+3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
+300A ; Pattern_Syntax # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Pattern_Syntax # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Pattern_Syntax # Ps LEFT CORNER BRACKET
+300D ; Pattern_Syntax # Pe RIGHT CORNER BRACKET
+300E ; Pattern_Syntax # Ps LEFT WHITE CORNER BRACKET
+300F ; Pattern_Syntax # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Pattern_Syntax # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Pattern_Syntax # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; Pattern_Syntax # So [2] POSTAL MARK..GETA MARK
+3014 ; Pattern_Syntax # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Pattern_Syntax # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Pattern_Syntax # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Pattern_Syntax # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Pattern_Syntax # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Pattern_Syntax # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Pattern_Syntax # Ps LEFT WHITE SQUARE BRACKET
+301B ; Pattern_Syntax # Pe RIGHT WHITE SQUARE BRACKET
+301C ; Pattern_Syntax # Pd WAVE DASH
+301D ; Pattern_Syntax # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Pattern_Syntax # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; Pattern_Syntax # So POSTAL MARK FACE
+3030 ; Pattern_Syntax # Pd WAVY DASH
+FD3E ; Pattern_Syntax # Pe ORNATE LEFT PARENTHESIS
+FD3F ; Pattern_Syntax # Ps ORNATE RIGHT PARENTHESIS
+FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT
+
+# Total code points: 2760
+
+# ================================================
+
+0600..0605 ; Prepended_Concatenation_Mark # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+06DD ; Prepended_Concatenation_Mark # Cf ARABIC END OF AYAH
+070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK
+08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH
+110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN
+110CD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN ABOVE
+
+# Total code points: 11
+
+# ================================================
+
+1F1E6..1F1FF ; Regional_Indicator # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+
+# Total code points: 26
+
+# EOF
diff --git a/macros/generic/unicode-data/README.md b/macros/generic/unicode-data/README.md
new file mode 100644
index 0000000000..1ec6a86df7
--- /dev/null
+++ b/macros/generic/unicode-data/README.md
@@ -0,0 +1,219 @@
+The Unicode Consortium provide a range of data files detailing
+the nature of code points in Unicode. These data files are
+machine-readable but large. Here, a set of loaders are provided
+to parse these files during a TeX run and set appropriate
+parameters in an automated fashion.
+
+File: `load-unicode-data.tex`
+=============================
+
+The loader parses a number of data files provided by the Unicode
+Consortium and when used with used Unicode-capable engine sets
+up a range of TeX-related parameters based on the extracted
+information.
+
+From the file `UnicodeData.txt` the following properties are set:
+- `\catcode` 11 for all letters (Unicode class "L")
+- `\catcode` 11 for all combining marks (Unicode class "M")
+- `\sfcode` 999 for all code points of class "Lu" (upper case
+ letters)
+- `\lccode` for all of class "Ll" (lower case letters) to the code
+ point itself, and `\uccode` to the upper case mapping (or if
+ not given to the code point itself)
+- `\uccode` for all of class "Lu" (upper case letters) to the code
+ point itself, and `\lccode` to the lower case mapping (or if
+ not given to the code point itself)
+- `\lccode` and `\uccode` for all of class "Lt" (title case
+ letters) to the lower can upper case mappings (or if not given
+ to the code point itself)
+- `\lccode` and `\uccode` for all other letter code points are
+ set to the code point itself
+- `\lccode` and/or `\uccode` for non-letter code points for
+ which an upper or lower case mapping is given
+- `\sfcode` 0 (ignored) for code points of Unicode classes "Pe"
+ (closing punctuation marks) and "Pf" (final quotation marks)
+- `\Umathcode` for all letters as TeX class 7 (var)
+
+File: `load-unicode-math-classes.tex`
+======================================
+
+From the file `MathClass-15.txt` the following mapping between
+Unicode math classes and TeX math types are set up
+- "L" (large) `\mathop`
+- "B" (binary) `\mathbin`
+- "V" (vary) `\mathbin`
+- "R" (relation) `\mathrel`
+- "O" (opening) `\mathopen`
+- "C" (closing) `\mathclose`
+- "P" (punctuation) `\mathpunct`
+- "A" (alphabetic) `\mathalpha`
+
+For each code point processed, the result is of the form
+
+ \Umathcode <codepoint> = <type> 1 <codepoint>
+
+File: `load-unicode-xetex-classes.tex`
+======================================
+
+From the files `EastAsianWidth.txt` and `LineBreak.txt` inter
+character classes for XeTeX (`\XeTeXcharclass`) are set for the
+following classes
+- "ID" (ideographic)
+- "CJ" (conditional Japanese starter)
+- "OP" (opener)
+- "CL" (closer)
+- "NS" (non-starter)
+- "EX" (exclamation)
+- "IS" (infix separator)
+- "CM" (combining marks)
+
+All code points of classes "ID" and "CJ" are assigned to a
+`\XeTeXcharclass`, but for other classes this only occurs when
+they fall into east Asian width type "F", "H" or "W" (full-,
+half- and wide-width).
+
+The following mappings between Unicode and XeTeX classes occur
+- "ID" and "CJ" are class 1
+- "OP" is class 2
+- "CL", "NS", "EX", "IS" are class 3
+- "CM" is class 256 (ignored)
+
+as standard: these may be over-ridden by defining
+`\XeTeXcharclass<class>` as required. (If classes "ID" or "CL"
+are explicitly set, the other members of the same groups above
+will inherit these values.)
+
+This file does _not_ activate XeTeX's inter-character token
+mechanism (`\XeTeXinterchartokenstate` is not set) nor does it
+install any material in the inter-character token registers.
+
+Note that this file is separate from the main loader as the data
+structure here may need more refinement at the macro level.
+
+Data files
+==========
+
+The following data files are included here with permission of the
+Unicode Consortium (see below):
+- `UnicodeData.txt`
+- `BidiBrackets.txt`
+- `CaseFolding.txt`
+- `EastAsianWidth.txt`
+- `LineBreak.txt`
+- `MathClass.txt`
+- `PropList.txt`
+- `SpecialCasing.txt`
+- `Scripts.txt`
+- `ScriptExtension.txt`
+
+With the exception of `MathClass.txt`, which is currently not
+formally part of the Unicode Character Database, all of the
+data files here are for Unicode 12.1.0.
+
+Requests to include additional Unicode data files in this bundle are
+welcome. Ideally this bundle will act as a single location for all
+Unicode data for use by TeX systems.
+
+Issues and improvements
+=======================
+
+The home page for this bundle is
+https://github.com/latex3/unicode-data, and issues may be
+reported there.
+
+Changes
+=======
+
+- v1.0 (2015-12-01)
+ - First public release
+- v1.1 (2016-01-04)
+ - Allow setting of XeTeX character class slot numbers
+- v1.1a (2016-01-06)
+ - Correctly assign XeTeX character class for code points in
+ ranges
+ - Fix issue which meant `EastAsianWidth.txt` was not read
+- v1.1b (2016-01-08)
+ - Avoid save stack issue when loading `EastAsianWidth.txt`
+ - Fix application of settings to ranges of Unicode characters
+ - Correct setting of space factor for ending punctuation
+- v1.2 (2016-02-02)
+ - Drop use of Unicode math data at present: undesired effect on
+ output if Unicode fonts are not loaded (classical OT1
+ situation)
+- v1.2a (2016-02-05)
+ - Correct split between base and supplementary plane when
+ setting math codes
+- v1.3 (2016-02-06)
+ - New `load-unicode-math-classes.tex` loader
+ - Set all letters as math type 7 (var) in
+ `load-unicode-data.tex`
+- v1.3a (2016-02-06)
+ - Add definition of `\loop` to `load-unicode-math-classes.tex`
+- v1.4 (2016-02-16)
+ - Treat "CJ" chars like "ID" chars for setting XeTeX character
+ class
+- v1.4a (2016-02-21)
+ - Inherit XeTeX classes for "CJ" from "ID" and for "NS", "EX"
+ and "IS" from "CL" if appropriate
+- v1.5 (2016-06-22)
+ - Update data files to Unicode release 9.0.0
+- v1.6 (2017-06-27)
+ - Update data files to Unicode release 10.0.0
+- v1.7 (2018-08-09)
+ - Update data files to Unicode release 11.0.0
+- v1.8 (2019-03-09)
+ - Update data files to Unicode release 12.0.0
+- v1.9 (2019-08-13)
+ - Update data files to Unicode release 12.1.0
+ - Add `BidiBrackets.txt`, `Scripts.txt` and `ScriptExtension.txt`
+- v1.10 (2019-08-21)
+ - Add `PropList.txt`
+
+License and permission
+======================
+
+This bundle is copyright (C) 2015-2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version. The latest
+version of this license is in the file
+http://www.latex-project.org/lppl.txt.
+
+The source data (`.txt` files) are supplied by the Unicode
+Consortium and the following notice applies.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+
+Copyright © 1991-2019 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
diff --git a/macros/generic/unicode-data/ScriptExtensions.txt b/macros/generic/unicode-data/ScriptExtensions.txt
new file mode 100644
index 0000000000..ce98cba767
--- /dev/null
+++ b/macros/generic/unicode-data/ScriptExtensions.txt
@@ -0,0 +1,573 @@
+# ScriptExtensions-12.1.0.txt
+# Date: 2019-04-01, 09:10:42 GMT
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# The Script_Extensions property indicates which characters are commonly used
+# with more than one script, but with a limited number of scripts.
+# For each code point, there is one or more property values. Each such value is a Script property value.
+# For more information, see:
+# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/
+# Especially the sections:
+# http://www.unicode.org/reports/tr24/#Assignment_Script_Values
+# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values
+#
+# Each Script_Extensions value in this file consists of a set
+# of one or more abbreviated Script property values. The ordering of the
+# values in that set is not material, but for stability in presentation
+# it is given here as alphabetical.
+#
+# The Script_Extensions values are presented in sorted order in the file.
+# They are sorted first by the number of Script property values in their sets,
+# and then alphabetically by first differing Script property value.
+#
+# Following each distinct Script_Extensions value is the list of code
+# points associated with that value, listed in code point order.
+#
+# All code points not explicitly listed for Script_Extensions
+# have as their value the corresponding Script property value
+#
+# @missing: 0000..10FFFF; <script>
+
+# ================================================
+
+# Property: Script_Extensions
+
+# ================================================
+
+# Script_Extensions=Beng
+
+1CF7 ; Beng # Mc VEDIC SIGN ATIKRAMA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Deva
+
+1CD1 ; Deva # Mn VEDIC TONE SHARA
+1CD4 ; Deva # Mn VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
+1CDB ; Deva # Mn VEDIC TONE TRIPLE SVARITA
+1CDE..1CDF ; Deva # Mn [2] VEDIC TONE TWO DOTS BELOW..VEDIC TONE THREE DOTS BELOW
+1CE2..1CE8 ; Deva # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CEB..1CEC ; Deva # Lo [2] VEDIC SIGN ANUSVARA VAMAGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF1 ; Deva # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+
+# Total code points: 18
+
+# ================================================
+
+# Script_Extensions=Dupl
+
+1BCA0..1BCA3 ; Dupl # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+
+# Total code points: 4
+
+# ================================================
+
+# Script_Extensions=Grek
+
+0342 ; Grek # Mn COMBINING GREEK PERISPOMENI
+0345 ; Grek # Mn COMBINING GREEK YPOGEGRAMMENI
+1DC0..1DC1 ; Grek # Mn [2] COMBINING DOTTED GRAVE ACCENT..COMBINING DOTTED ACUTE ACCENT
+
+# Total code points: 4
+
+# ================================================
+
+# Script_Extensions=Hani
+
+3006 ; Hani # Lo IDEOGRAPHIC CLOSING MARK
+303E..303F ; Hani # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+3190..3191 ; Hani # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195 ; Hani # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; Hani # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31C0..31E3 ; Hani # So [36] CJK STROKE T..CJK STROKE Q
+3220..3229 ; Hani # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247 ; Hani # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3280..3289 ; Hani # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; Hani # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32C0..32CB ; Hani # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32FF ; Hani # So SQUARE ERA NAME REIWA
+3358..3370 ; Hani # So [25] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+337B..337F ; Hani # So [5] SQUARE ERA NAME HEISEI..SQUARE CORPORATION
+33E0..33FE ; Hani # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+1D360..1D371 ; Hani # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
+1F250..1F251 ; Hani # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+
+# Total code points: 238
+
+# ================================================
+
+# Script_Extensions=Latn
+
+0363..036F ; Latn # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X
+
+# Total code points: 13
+
+# ================================================
+
+# Script_Extensions=Nand
+
+1CFA ; Nand # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Arab Copt
+
+102E0 ; Arab Copt # Mn COPTIC EPACT THOUSANDS MARK
+102E1..102FB ; Arab Copt # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+
+# Total code points: 28
+
+# ================================================
+
+# Script_Extensions=Arab Rohg
+
+06D4 ; Arab Rohg # Po ARABIC FULL STOP
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Arab Syrc
+
+064B..0655 ; Arab Syrc # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
+0670 ; Arab Syrc # Mn ARABIC LETTER SUPERSCRIPT ALEF
+
+# Total code points: 12
+
+# ================================================
+
+# Script_Extensions=Arab Thaa
+
+0660..0669 ; Arab Thaa # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+FDF2 ; Arab Thaa # Lo ARABIC LIGATURE ALLAH ISOLATED FORM
+FDFD ; Arab Thaa # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+
+# Total code points: 12
+
+# ================================================
+
+# Script_Extensions=Armn Geor
+
+0589 ; Armn Geor # Po ARMENIAN FULL STOP
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Beng Deva
+
+1CD5..1CD6 ; Beng Deva # Mn [2] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
+1CD8 ; Beng Deva # Mn VEDIC TONE CANDRA BELOW
+1CE1 ; Beng Deva # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CEA ; Beng Deva # Lo VEDIC SIGN ANUSVARA BAHIRGOMUKHA
+1CED ; Beng Deva # Mn VEDIC SIGN TIRYAK
+1CF5..1CF6 ; Beng Deva # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+A8F1 ; Beng Deva # Mn COMBINING DEVANAGARI SIGN AVAGRAHA
+
+# Total code points: 9
+
+# ================================================
+
+# Script_Extensions=Bopo Hani
+
+302A..302D ; Bopo Hani # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+
+# Total code points: 4
+
+# ================================================
+
+# Script_Extensions=Bugi Java
+
+A9CF ; Bugi Java # Lm JAVANESE PANGRANGKEP
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Cprt Linb
+
+10100..10102 ; Cprt Linb # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+10137..1013F ; Cprt Linb # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+
+# Total code points: 12
+
+# ================================================
+
+# Script_Extensions=Cyrl Glag
+
+0484 ; Cyrl Glag # Mn COMBINING CYRILLIC PALATALIZATION
+0487 ; Cyrl Glag # Mn COMBINING CYRILLIC POKRYTIE
+2E43 ; Cyrl Glag # Po DASH WITH LEFT UPTURN
+A66F ; Cyrl Glag # Mn COMBINING CYRILLIC VZMET
+
+# Total code points: 4
+
+# ================================================
+
+# Script_Extensions=Cyrl Latn
+
+0485..0486 ; Cyrl Latn # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
+
+# Total code points: 2
+
+# ================================================
+
+# Script_Extensions=Cyrl Perm
+
+0483 ; Cyrl Perm # Mn COMBINING CYRILLIC TITLO
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Deva Gran
+
+1CD3 ; Deva Gran # Po VEDIC SIGN NIHSHVASA
+1CF3 ; Deva Gran # Lo VEDIC SIGN ROTATED ARDHAVISARGA
+1CF8..1CF9 ; Deva Gran # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+
+# Total code points: 4
+
+# ================================================
+
+# Script_Extensions=Deva Nand
+
+1CE9 ; Deva Nand # Lo VEDIC SIGN ANUSVARA ANTARGOMUKHA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Deva Shrd
+
+1CD7 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
+1CD9 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
+1CDC..1CDD ; Deva Shrd # Mn [2] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE DOT BELOW
+1CE0 ; Deva Shrd # Mn VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+
+# Total code points: 5
+
+# ================================================
+
+# Script_Extensions=Deva Taml
+
+A8F3 ; Deva Taml # Lo DEVANAGARI SIGN CANDRABINDU VIRAMA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Geor Latn
+
+10FB ; Geor Latn # Po GEORGIAN PARAGRAPH SEPARATOR
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Gran Taml
+
+0BE6..0BEF ; Gran Taml # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2 ; Gran Taml # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3 ; Gran Taml # So TAMIL DAY SIGN
+11301 ; Gran Taml # Mn GRANTHA SIGN CANDRABINDU
+11303 ; Gran Taml # Mc GRANTHA SIGN VISARGA
+1133B..1133C ; Gran Taml # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+11FD0..11FD1 ; Gran Taml # No [2] TAMIL FRACTION ONE QUARTER..TAMIL FRACTION ONE HALF-1
+11FD3 ; Gran Taml # No TAMIL FRACTION THREE QUARTERS
+
+# Total code points: 21
+
+# ================================================
+
+# Script_Extensions=Gujr Khoj
+
+0AE6..0AEF ; Gujr Khoj # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Guru Mult
+
+0A66..0A6F ; Guru Mult # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Hira Kana
+
+3031..3035 ; Hira Kana # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3099..309A ; Hira Kana # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C ; Hira Kana # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30A0 ; Hira Kana # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FC ; Hira Kana # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF70 ; Hira Kana # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Hira Kana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+
+# Total code points: 14
+
+# ================================================
+
+# Script_Extensions=Knda Nand
+
+0CE6..0CEF ; Knda Nand # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Latn Mong
+
+202F ; Latn Mong # Zs NARROW NO-BREAK SPACE
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Mong Phag
+
+1802..1803 ; Mong Phag # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
+1805 ; Mong Phag # Po MONGOLIAN FOUR DOTS
+
+# Total code points: 3
+
+# ================================================
+
+# Script_Extensions=Arab Syrc Thaa
+
+061C ; Arab Syrc Thaa # Cf ARABIC LETTER MARK
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Beng Cakm Sylo
+
+09E6..09EF ; Beng Cakm Sylo # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Cakm Mymr Tale
+
+1040..1049 ; Cakm Mymr Tale # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Cprt Lina Linb
+
+10107..10133 ; Cprt Lina Linb # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+
+# Total code points: 45
+
+# ================================================
+
+# Script_Extensions=Deva Gran Knda
+
+1CF4 ; Deva Gran Knda # Mn VEDIC TONE CANDRA ABOVE
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Deva Gran Latn
+
+20F0 ; Deva Gran Latn # Mn COMBINING ASTERISK ABOVE
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Hani Hira Kana
+
+303C ; Hani Hira Kana # Lo MASU MARK
+303D ; Hani Hira Kana # Po PART ALTERNATION MARK
+
+# Total code points: 2
+
+# ================================================
+
+# Script_Extensions=Kali Latn Mymr
+
+A92E ; Kali Latn Mymr # Po KAYAH LI SIGN CWI
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Arab Rohg Syrc Thaa
+
+060C ; Arab Rohg Syrc Thaa # Po ARABIC COMMA
+061B ; Arab Rohg Syrc Thaa # Po ARABIC SEMICOLON
+061F ; Arab Rohg Syrc Thaa # Po ARABIC QUESTION MARK
+
+# Total code points: 3
+
+# ================================================
+
+# Script_Extensions=Beng Deva Gran Knda
+
+1CD0 ; Beng Deva Gran Knda # Mn VEDIC TONE KARSHANA
+1CD2 ; Beng Deva Gran Knda # Mn VEDIC TONE PRENKHA
+
+# Total code points: 2
+
+# ================================================
+
+# Script_Extensions=Buhd Hano Tagb Tglg
+
+1735..1736 ; Buhd Hano Tagb Tglg # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+
+# Total code points: 2
+
+# ================================================
+
+# Script_Extensions=Deva Dogr Kthi Mahj
+
+0966..096F ; Deva Dogr Kthi Mahj # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Bopo Hang Hani Hira Kana
+
+3003 ; Bopo Hang Hani Hira Kana # Po DITTO MARK
+3013 ; Bopo Hang Hani Hira Kana # So GETA MARK
+301C ; Bopo Hang Hani Hira Kana # Pd WAVE DASH
+301D ; Bopo Hang Hani Hira Kana # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Bopo Hang Hani Hira Kana # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3030 ; Bopo Hang Hani Hira Kana # Pd WAVY DASH
+3037 ; Bopo Hang Hani Hira Kana # So IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+FE45..FE46 ; Bopo Hang Hani Hira Kana # Po [2] SESAME DOT..WHITE SESAME DOT
+
+# Total code points: 10
+
+# ================================================
+
+# Script_Extensions=Bopo Hang Hani Hira Kana Yiii
+
+3001..3002 ; Bopo Hang Hani Hira Kana Yiii # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
+3008 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT ANGLE BRACKET
+3009 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT ANGLE BRACKET
+300A ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT CORNER BRACKET
+300D ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT CORNER BRACKET
+300E ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE CORNER BRACKET
+300F ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT BLACK LENTICULAR BRACKET
+3014 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE SQUARE BRACKET
+301B ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE SQUARE BRACKET
+30FB ; Bopo Hang Hani Hira Kana Yiii # Po KATAKANA MIDDLE DOT
+FF61 ; Bopo Hang Hani Hira Kana Yiii # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; Bopo Hang Hani Hira Kana Yiii # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Bopo Hang Hani Hira Kana Yiii # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; Bopo Hang Hani Hira Kana Yiii # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+
+# Total code points: 26
+
+# ================================================
+
+# Script_Extensions=Deva Knda Mlym Orya Taml Telu
+
+1CDA ; Deva Knda Mlym Orya Taml Telu # Mn VEDIC TONE DOUBLE SVARITA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Adlm Arab Mand Mani Phlp Rohg Sogd Syrc
+
+0640 ; Adlm Arab Mand Mani Phlp Rohg Sogd Syrc # Lm ARABIC TATWEEL
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Beng Deva Gran Knda Nand Orya Telu Tirh
+
+1CF2 ; Beng Deva Gran Knda Nand Orya Telu Tirh # Lo VEDIC SIGN ARDHAVISARGA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh
+
+A836..A837 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # Sc NORTH INDIC RUPEE MARK
+A839 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So NORTH INDIC QUANTITY MARK
+
+# Total code points: 4
+
+# ================================================
+
+# Script_Extensions=Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh
+
+0952 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh # Mn DEVANAGARI STRESS SIGN ANUDATTA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh
+
+0951 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh # Mn DEVANAGARI STRESS SIGN UDATTA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Sind Takr Tirh
+
+A833..A835 ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Sind Takr Tirh # No [3] NORTH INDIC FRACTION ONE SIXTEENTH..NORTH INDIC FRACTION THREE SIXTEENTHS
+
+# Total code points: 3
+
+# ================================================
+
+# Script_Extensions=Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Sind Takr Tirh
+
+A830..A832 ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Sind Takr Tirh # No [3] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE QUARTERS
+
+# Total code points: 3
+
+# ================================================
+
+# Script_Extensions=Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh
+
+0964 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh # Po DEVANAGARI DANDA
+
+# Total code points: 1
+
+# ================================================
+
+# Script_Extensions=Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Limb Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh
+
+0965 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Limb Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh # Po DEVANAGARI DOUBLE DANDA
+
+# Total code points: 1
+
+# EOF
diff --git a/macros/generic/unicode-data/Scripts.txt b/macros/generic/unicode-data/Scripts.txt
new file mode 100644
index 0000000000..a9070ebebe
--- /dev/null
+++ b/macros/generic/unicode-data/Scripts.txt
@@ -0,0 +1,2838 @@
+# Scripts-12.1.0.txt
+# Date: 2019-04-01, 09:10:42 GMT
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+# For more information, see:
+# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/
+# Especially the sections:
+# http://www.unicode.org/reports/tr24/#Assignment_Script_Values
+# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values
+#
+
+# ================================================
+
+# Property: Script
+
+# All code points not explicitly listed for Script
+# have the value Unknown (Zzzz).
+
+# @missing: 0000..10FFFF; Unknown
+
+# ================================================
+
+0000..001F ; Common # Cc [32] <control-0000>..<control-001F>
+0020 ; Common # Zs SPACE
+0021..0023 ; Common # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024 ; Common # Sc DOLLAR SIGN
+0025..0027 ; Common # Po [3] PERCENT SIGN..APOSTROPHE
+0028 ; Common # Ps LEFT PARENTHESIS
+0029 ; Common # Pe RIGHT PARENTHESIS
+002A ; Common # Po ASTERISK
+002B ; Common # Sm PLUS SIGN
+002C ; Common # Po COMMA
+002D ; Common # Pd HYPHEN-MINUS
+002E..002F ; Common # Po [2] FULL STOP..SOLIDUS
+0030..0039 ; Common # Nd [10] DIGIT ZERO..DIGIT NINE
+003A..003B ; Common # Po [2] COLON..SEMICOLON
+003C..003E ; Common # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; Common # Po [2] QUESTION MARK..COMMERCIAL AT
+005B ; Common # Ps LEFT SQUARE BRACKET
+005C ; Common # Po REVERSE SOLIDUS
+005D ; Common # Pe RIGHT SQUARE BRACKET
+005E ; Common # Sk CIRCUMFLEX ACCENT
+005F ; Common # Pc LOW LINE
+0060 ; Common # Sk GRAVE ACCENT
+007B ; Common # Ps LEFT CURLY BRACKET
+007C ; Common # Sm VERTICAL LINE
+007D ; Common # Pe RIGHT CURLY BRACKET
+007E ; Common # Sm TILDE
+007F..009F ; Common # Cc [33] <control-007F>..<control-009F>
+00A0 ; Common # Zs NO-BREAK SPACE
+00A1 ; Common # Po INVERTED EXCLAMATION MARK
+00A2..00A5 ; Common # Sc [4] CENT SIGN..YEN SIGN
+00A6 ; Common # So BROKEN BAR
+00A7 ; Common # Po SECTION SIGN
+00A8 ; Common # Sk DIAERESIS
+00A9 ; Common # So COPYRIGHT SIGN
+00AB ; Common # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; Common # Sm NOT SIGN
+00AD ; Common # Cf SOFT HYPHEN
+00AE ; Common # So REGISTERED SIGN
+00AF ; Common # Sk MACRON
+00B0 ; Common # So DEGREE SIGN
+00B1 ; Common # Sm PLUS-MINUS SIGN
+00B2..00B3 ; Common # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4 ; Common # Sk ACUTE ACCENT
+00B5 ; Common # L& MICRO SIGN
+00B6..00B7 ; Common # Po [2] PILCROW SIGN..MIDDLE DOT
+00B8 ; Common # Sk CEDILLA
+00B9 ; Common # No SUPERSCRIPT ONE
+00BB ; Common # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE ; Common # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF ; Common # Po INVERTED QUESTION MARK
+00D7 ; Common # Sm MULTIPLICATION SIGN
+00F7 ; Common # Sm DIVISION SIGN
+02B9..02C1 ; Common # Lm [9] MODIFIER LETTER PRIME..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E5..02E9 ; Common # Sk [5] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER EXTRA-LOW TONE BAR
+02EC ; Common # Lm MODIFIER LETTER VOICING
+02ED ; Common # Sk MODIFIER LETTER UNASPIRATED
+02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; Common # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0374 ; Common # Lm GREEK NUMERAL SIGN
+037E ; Common # Po GREEK QUESTION MARK
+0385 ; Common # Sk GREEK DIALYTIKA TONOS
+0387 ; Common # Po GREEK ANO TELEIA
+0589 ; Common # Po ARMENIAN FULL STOP
+0605 ; Common # Cf ARABIC NUMBER MARK ABOVE
+060C ; Common # Po ARABIC COMMA
+061B ; Common # Po ARABIC SEMICOLON
+061F ; Common # Po ARABIC QUESTION MARK
+0640 ; Common # Lm ARABIC TATWEEL
+06DD ; Common # Cf ARABIC END OF AYAH
+08E2 ; Common # Cf ARABIC DISPUTED END OF AYAH
+0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
+0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
+16EB..16ED ; Common # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+1735..1736 ; Common # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1802..1803 ; Common # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
+1805 ; Common # Po MONGOLIAN FOUR DOTS
+1CD3 ; Common # Po VEDIC SIGN NIHSHVASA
+1CE1 ; Common # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE9..1CEC ; Common # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF3 ; Common # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF5..1CF6 ; Common # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7 ; Common # Mc VEDIC SIGN ATIKRAMA
+1CFA ; Common # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+2000..200A ; Common # Zs [11] EN QUAD..HAIR SPACE
+200B ; Common # Cf ZERO WIDTH SPACE
+200E..200F ; Common # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2010..2015 ; Common # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; Common # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; Common # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Common # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Common # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Common # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Common # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Common # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Common # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; Common # Po [8] DAGGER..HYPHENATION POINT
+2028 ; Common # Zl LINE SEPARATOR
+2029 ; Common # Zp PARAGRAPH SEPARATOR
+202A..202E ; Common # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F ; Common # Zs NARROW NO-BREAK SPACE
+2030..2038 ; Common # Po [9] PER MILLE SIGN..CARET
+2039 ; Common # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Common # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; Common # Po [4] REFERENCE MARK..OVERLINE
+203F..2040 ; Common # Pc [2] UNDERTIE..CHARACTER TIE
+2041..2043 ; Common # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044 ; Common # Sm FRACTION SLASH
+2045 ; Common # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; Common # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; Common # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; Common # Sm COMMERCIAL MINUS SIGN
+2053 ; Common # Po SWUNG DASH
+2054 ; Common # Pc INVERTED UNDERTIE
+2055..205E ; Common # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+205F ; Common # Zs MEDIUM MATHEMATICAL SPACE
+2060..2064 ; Common # Cf [5] WORD JOINER..INVISIBLE PLUS
+2066..206F ; Common # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+2070 ; Common # No SUPERSCRIPT ZERO
+2074..2079 ; Common # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; Common # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; Common # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Common # Pe SUPERSCRIPT RIGHT PARENTHESIS
+2080..2089 ; Common # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
+20A0..20BF ; Common # Sc [32] EURO-CURRENCY SIGN..BITCOIN SIGN
+2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
+2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
+2107 ; Common # L& EULER CONSTANT
+2108..2109 ; Common # So [2] SCRUPLE..DEGREE FAHRENHEIT
+210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2114 ; Common # So L B BAR SYMBOL
+2115 ; Common # L& DOUBLE-STRUCK CAPITAL N
+2116..2117 ; Common # So [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT
+2118 ; Common # Sm SCRIPT CAPITAL P
+2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE
+2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z
+2125 ; Common # So OUNCE SIGN
+2127 ; Common # So INVERTED OHM SIGN
+2128 ; Common # L& BLACK-LETTER CAPITAL Z
+2129 ; Common # So TURNED GREEK SMALL LETTER IOTA
+212C..212D ; Common # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212E ; Common # So ESTIMATED SYMBOL
+212F..2131 ; Common # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; Common # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; Common # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; Common # L& INFORMATION SOURCE
+213A..213B ; Common # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F ; Common # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144 ; Common # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149 ; Common # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A ; Common # So PROPERTY LINE
+214B ; Common # Sm TURNED AMPERSAND
+214C..214D ; Common # So [2] PER SIGN..AKTIESELSKAB
+214F ; Common # So SYMBOL FOR SAMARITAN SOURCE
+2150..215F ; Common # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2189 ; Common # No VULGAR FRACTION ZERO THIRDS
+218A..218B ; Common # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Common # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Common # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Common # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Common # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Common # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Common # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Common # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Common # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; Common # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; Common # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; Common # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Common # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Common # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Common # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Common # So DOWNWARDS DOUBLE ARROW
+21D4 ; Common # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; Common # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF ; Common # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; Common # So [8] DIAMETER SIGN..WAVY LINE
+2308 ; Common # Ps LEFT CEILING
+2309 ; Common # Pe RIGHT CEILING
+230A ; Common # Ps LEFT FLOOR
+230B ; Common # Pe RIGHT FLOOR
+230C..231F ; Common # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; Common # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; Common # So [7] FROWN..KEYBOARD
+2329 ; Common # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Common # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B ; Common # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C ; Common # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A ; Common # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..2426 ; Common # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9 ; Common # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA..24FF ; Common # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+2500..25B6 ; Common # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Common # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; Common # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Common # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; Common # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F ; Common # Sm MUSIC SHARP SIGN
+2670..2767 ; Common # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET
+2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; Common # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; Common # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; Common # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; Common # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; Common # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; Common # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; Common # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; Common # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; Common # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794..27BF ; Common # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
+27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27E5 ; Common # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Common # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Common # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Common # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC ; Common # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED ; Common # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE ; Common # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF ; Common # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF ; Common # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982 ; Common # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Common # Ps LEFT WHITE CURLY BRACKET
+2984 ; Common # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Common # Ps LEFT WHITE PARENTHESIS
+2986 ; Common # Pe RIGHT WHITE PARENTHESIS
+2987 ; Common # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Common # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Common # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Common # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Common # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Common # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Common # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Common # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Common # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Common # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Common # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Common # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Common # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Common # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Common # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Common # Ps LEFT WIGGLY FENCE
+29D9 ; Common # Pe RIGHT WIGGLY FENCE
+29DA ; Common # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Common # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Common # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Common # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Common # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B2F ; Common # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44 ; Common # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46 ; Common # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C ; Common # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B73 ; Common # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B98..2BFF ; Common # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
+2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
+2E04 ; Common # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Common # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Common # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Common # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Common # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Common # Po RAISED SQUARE
+2E0C ; Common # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Common # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Common # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Common # Pd DOUBLE OBLIQUE HYPHEN
+2E18..2E19 ; Common # Po [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A ; Common # Pd HYPHEN WITH DIAERESIS
+2E1B ; Common # Po TILDE WITH RING ABOVE
+2E1C ; Common # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Common # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F ; Common # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20 ; Common # Pi LEFT VERTICAL BAR WITH QUILL
+2E21 ; Common # Pf RIGHT VERTICAL BAR WITH QUILL
+2E22 ; Common # Ps TOP LEFT HALF BRACKET
+2E23 ; Common # Pe TOP RIGHT HALF BRACKET
+2E24 ; Common # Ps BOTTOM LEFT HALF BRACKET
+2E25 ; Common # Pe BOTTOM RIGHT HALF BRACKET
+2E26 ; Common # Ps LEFT SIDEWAYS U BRACKET
+2E27 ; Common # Pe RIGHT SIDEWAYS U BRACKET
+2E28 ; Common # Ps LEFT DOUBLE PARENTHESIS
+2E29 ; Common # Pe RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E ; Common # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F ; Common # Lm VERTICAL TILDE
+2E30..2E39 ; Common # Po [10] RING POINT..TOP HALF SECTION SIGN
+2E3A..2E3B ; Common # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E3F ; Common # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM
+2E40 ; Common # Pd DOUBLE HYPHEN
+2E41 ; Common # Po REVERSED COMMA
+2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E4F ; Common # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000 ; Common # Zs IDEOGRAPHIC SPACE
+3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004 ; Common # So JAPANESE INDUSTRIAL STANDARD SYMBOL
+3006 ; Common # Lo IDEOGRAPHIC CLOSING MARK
+3008 ; Common # Ps LEFT ANGLE BRACKET
+3009 ; Common # Pe RIGHT ANGLE BRACKET
+300A ; Common # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Common # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Common # Ps LEFT CORNER BRACKET
+300D ; Common # Pe RIGHT CORNER BRACKET
+300E ; Common # Ps LEFT WHITE CORNER BRACKET
+300F ; Common # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Common # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Common # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; Common # So [2] POSTAL MARK..GETA MARK
+3014 ; Common # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Common # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Common # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Common # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Common # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Common # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Common # Ps LEFT WHITE SQUARE BRACKET
+301B ; Common # Pe RIGHT WHITE SQUARE BRACKET
+301C ; Common # Pd WAVE DASH
+301D ; Common # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Common # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; Common # So POSTAL MARK FACE
+3030 ; Common # Pd WAVY DASH
+3031..3035 ; Common # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037 ; Common # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+303C ; Common # Lo MASU MARK
+303D ; Common # Po PART ALTERNATION MARK
+303E..303F ; Common # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+309B..309C ; Common # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30A0 ; Common # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FB ; Common # Po KATAKANA MIDDLE DOT
+30FC ; Common # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
+3190..3191 ; Common # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195 ; Common # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; Common # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31C0..31E3 ; Common # So [36] CJK STROKE T..CJK STROKE Q
+3220..3229 ; Common # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247 ; Common # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3248..324F ; Common # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+3250 ; Common # So PARTNERSHIP SIGN
+3251..325F ; Common # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+327F ; Common # So KOREAN STANDARD SYMBOL
+3280..3289 ; Common # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; Common # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; Common # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32CF ; Common # So [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN
+32FF ; Common # So SQUARE ERA NAME REIWA
+3358..33FF ; Common # So [168] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..SQUARE GAL
+4DC0..4DFF ; Common # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+A700..A716 ; Common # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F ; Common # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721 ; Common # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A788 ; Common # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A ; Common # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A830..A835 ; Common # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+A836..A837 ; Common # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838 ; Common # Sc NORTH INDIC RUPEE MARK
+A839 ; Common # So NORTH INDIC QUANTITY MARK
+A92E ; Common # Po KAYAH LI SIGN CWI
+A9CF ; Common # Lm JAVANESE PANGRANGKEP
+AB5B ; Common # Sk MODIFIER BREVE WITH INVERTED BREVE
+FD3E ; Common # Pe ORNATE LEFT PARENTHESIS
+FD3F ; Common # Ps ORNATE RIGHT PARENTHESIS
+FE10..FE16 ; Common # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; Common # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; Common # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; Common # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; Common # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46 ; Common # Po [2] SESAME DOT..WHITE SESAME DOT
+FE47 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; Common # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; Common # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52 ; Common # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Common # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; Common # Pd SMALL EM DASH
+FE59 ; Common # Ps SMALL LEFT PARENTHESIS
+FE5A ; Common # Pe SMALL RIGHT PARENTHESIS
+FE5B ; Common # Ps SMALL LEFT CURLY BRACKET
+FE5C ; Common # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; Common # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; Common # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; Common # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; Common # Sm SMALL PLUS SIGN
+FE63 ; Common # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; Common # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; Common # Po SMALL REVERSE SOLIDUS
+FE69 ; Common # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; Common # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FEFF ; Common # Cf ZERO WIDTH NO-BREAK SPACE
+FF01..FF03 ; Common # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; Common # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; Common # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; Common # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; Common # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; Common # Po FULLWIDTH ASTERISK
+FF0B ; Common # Sm FULLWIDTH PLUS SIGN
+FF0C ; Common # Po FULLWIDTH COMMA
+FF0D ; Common # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; Common # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; Common # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; Common # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; Common # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; Common # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF3B ; Common # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; Common # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; Common # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; Common # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; Common # Pc FULLWIDTH LOW LINE
+FF40 ; Common # Sk FULLWIDTH GRAVE ACCENT
+FF5B ; Common # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; Common # Sm FULLWIDTH VERTICAL LINE
+FF5D ; Common # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; Common # Sm FULLWIDTH TILDE
+FF5F ; Common # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; Common # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; Common # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; Common # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Common # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; Common # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF70 ; Common # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Common # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE0..FFE1 ; Common # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; Common # Sm FULLWIDTH NOT SIGN
+FFE3 ; Common # Sk FULLWIDTH MACRON
+FFE4 ; Common # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; Common # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8 ; Common # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; Common # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; Common # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF9..FFFB ; Common # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+10100..10102 ; Common # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+10107..10133 ; Common # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F ; Common # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10190..1019B ; Common # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+101D0..101FC ; Common # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+102E1..102FB ; Common # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+16FE2 ; Common # Po OLD CHINESE HOOK MARK
+16FE3 ; Common # Lm OLD CHINESE ITERATION MARK
+1BCA0..1BCA3 ; Common # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D000..1D0F5 ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126 ; Common # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129..1D164 ; Common # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165..1D166 ; Common # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16A..1D16C ; Common # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D..1D172 ; Common # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D2E0..1D2F3 ; Common # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D360..1D378 ; Common # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
+1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Common # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Common # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Common # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Common # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Common # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Common # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Common # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Common # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Common # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Common # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Common # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Common # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Common # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Common # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Common # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Common # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Common # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; Common # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; Common # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; Common # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; Common # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; Common # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; Common # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; Common # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; Common # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; Common # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; Common # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; Common # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; Common # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; Common # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; Common # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB ; Common # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EC71..1ECAB ; Common # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+1ECAC ; Common # So INDIC SIYAQ PLACEHOLDER
+1ECAD..1ECAF ; Common # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB0 ; Common # Sc INDIC SIYAQ RUPEE MARK
+1ECB1..1ECB4 ; Common # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+1ED01..1ED2D ; Common # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+1ED2E ; Common # So OTTOMAN SIYAQ MARRATAN
+1ED2F..1ED3D ; Common # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
+1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F0A0..1F0AE ; Common # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0B1..1F0BF ; Common # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
+1F0D1..1F0F5 ; Common # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+1F100..1F10C ; Common # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F110..1F16C ; Common # So [93] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MR SIGN
+1F170..1F1AC ; Common # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
+1F210..1F23B ; Common # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1F260..1F265 ; Common # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA
+1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F6D5 ; Common # So [726] RAT..HINDU TEMPLE
+1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
+1F6F0..1F6FA ; Common # So [11] SATELLITE..AUTO RICKSHAW
+1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F780..1F7D8 ; Common # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
+1F7E0..1F7EB ; Common # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F810..1F847 ; Common # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F900..1F90B ; Common # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F90D..1F971 ; Common # So [101] WHITE HEART..YAWNING FACE
+1F973..1F976 ; Common # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
+1F97A..1F9A2 ; Common # So [41] FACE WITH PLEADING EYES..SWAN
+1F9A5..1F9AA ; Common # So [6] SLOTH..OYSTER
+1F9AE..1F9CA ; Common # So [29] GUIDE DOG..ICE CUBE
+1F9CD..1FA53 ; Common # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
+1FA60..1FA6D ; Common # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FA70..1FA73 ; Common # So [4] BALLET SHOES..SHORTS
+1FA78..1FA7A ; Common # So [3] DROP OF BLOOD..STETHOSCOPE
+1FA80..1FA82 ; Common # So [3] YO-YO..PARACHUTE
+1FA90..1FA95 ; Common # So [6] RINGED PLANET..BANJO
+E0001 ; Common # Cf LANGUAGE TAG
+E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
+
+# Total code points: 7805
+
+# ================================================
+
+0041..005A ; Latin # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; Latin # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; Latin # Lo FEMININE ORDINAL INDICATOR
+00BA ; Latin # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; Latin # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; Latin # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; Latin # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; Latin # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; Latin # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; Latin # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; Latin # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; Latin # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8 ; Latin # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN
+1D2C..1D5C ; Latin # Lm [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN
+1D62..1D65 ; Latin # Lm [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V
+1D6B..1D77 ; Latin # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D79..1D9A ; Latin # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBE ; Latin # Lm [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH
+1E00..1EFF ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
+2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Latin # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN
+2132 ; Latin # L& TURNED CAPITAL F
+214E ; Latin # L& TURNED SMALL F
+2160..2182 ; Latin # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; Latin # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; Latin # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C60..2C7B ; Latin # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; Latin # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2C7F ; Latin # L& [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
+A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; Latin # Lm MODIFIER LETTER US
+A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7BF ; Latin # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
+A7C2..A7C6 ; Latin # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
+AB30..AB5A ; Latin # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; Latin # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB64 ; Latin # L& [5] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER INVERTED ALPHA
+AB66..AB67 ; Latin # L& [2] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+
+# Total code points: 1366
+
+# ================================================
+
+0370..0373 ; Greek # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0375 ; Greek # Sk GREEK LOWER NUMERAL SIGN
+0376..0377 ; Greek # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; Greek # Lm GREEK YPOGEGRAMMENI
+037B..037D ; Greek # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; Greek # L& GREEK CAPITAL LETTER YOT
+0384 ; Greek # Sk GREEK TONOS
+0386 ; Greek # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Greek # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Greek # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; Greek # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03E1 ; Greek # L& [63] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER SAMPI
+03F0..03F5 ; Greek # L& [6] GREEK KAPPA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F6 ; Greek # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..03FF ; Greek # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+1D26..1D2A ; Greek # L& [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI
+1D5D..1D61 ; Greek # Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI
+1D66..1D6A ; Greek # Lm [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI
+1DBF ; Greek # Lm MODIFIER LETTER SMALL THETA
+1F00..1F15 ; Greek # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Greek # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Greek # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Greek # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Greek # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Greek # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Greek # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Greek # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; Greek # Sk GREEK KORONIS
+1FBE ; Greek # L& GREEK PROSGEGRAMMENI
+1FBF..1FC1 ; Greek # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Greek # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Greek # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Greek # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; Greek # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Greek # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Greek # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; Greek # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; Greek # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; Greek # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Greek # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE ; Greek # Sk [2] GREEK OXIA..GREEK DASIA
+2126 ; Greek # L& OHM SIGN
+AB65 ; Greek # L& GREEK LETTER SMALL CAPITAL OMEGA
+10140..10174 ; Greek # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178 ; Greek # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189 ; Greek # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A..1018B ; Greek # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
+1018C..1018E ; Greek # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
+101A0 ; Greek # So GREEK SYMBOL TAU RHO
+1D200..1D241 ; Greek # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242..1D244 ; Greek # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D245 ; Greek # So GREEK MUSICAL LEIMMA
+
+# Total code points: 518
+
+# ================================================
+
+0400..0481 ; Cyrillic # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA
+0482 ; Cyrillic # So CYRILLIC THOUSANDS SIGN
+0483..0484 ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION
+0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE
+0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+048A..052F ; Cyrillic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+1C80..1C88 ; Cyrillic # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
+1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
+2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+A640..A66D ; Cyrillic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O
+A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET
+A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A673 ; Cyrillic # Po SLAVONIC ASTERISK
+A674..A67D ; Cyrillic # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A67E ; Cyrillic # Po CYRILLIC KAVYKA
+A67F ; Cyrillic # Lm CYRILLIC PAYEROK
+A680..A69B ; Cyrillic # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; Cyrillic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F ; Cyrillic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+FE2E..FE2F ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+
+# Total code points: 443
+
+# ================================================
+
+0531..0556 ; Armenian # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0560..0588 ; Armenian # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+058A ; Armenian # Pd ARMENIAN HYPHEN
+058D..058E ; Armenian # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+058F ; Armenian # Sc ARMENIAN DRAM SIGN
+FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+
+# Total code points: 95
+
+# ================================================
+
+0591..05BD ; Hebrew # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BE ; Hebrew # Pd HEBREW PUNCTUATION MAQAF
+05BF ; Hebrew # Mn HEBREW POINT RAFE
+05C0 ; Hebrew # Po HEBREW PUNCTUATION PASEQ
+05C1..05C2 ; Hebrew # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C3 ; Hebrew # Po HEBREW PUNCTUATION SOF PASUQ
+05C4..05C5 ; Hebrew # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C6 ; Hebrew # Po HEBREW PUNCTUATION NUN HAFUKHA
+05C7 ; Hebrew # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; Hebrew # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+FB1D ; Hebrew # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E ; Hebrew # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28 ; Hebrew # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29 ; Hebrew # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36 ; Hebrew # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Hebrew # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Hebrew # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Hebrew # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+
+# Total code points: 134
+
+# ================================================
+
+0600..0604 ; Arabic # Cf [5] ARABIC NUMBER SIGN..ARABIC SIGN SAMVAT
+0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B ; Arabic # Sc AFGHANI SIGN
+060D ; Arabic # Po ARABIC DATE SEPARATOR
+060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+061C ; Arabic # Cf ARABIC LETTER MARK
+061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
+0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+0656..065F ; Arabic # Mn [10] ARABIC SUBSCRIPT ALEF..ARABIC WAVY HAMZA BELOW
+0660..0669 ; Arabic # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4 ; Arabic # Po ARABIC FULL STOP
+06D5 ; Arabic # Lo ARABIC LETTER AE
+06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DE ; Arabic # So ARABIC START OF RUB EL HIZB
+06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06E9 ; Arabic # So ARABIC PLACE OF SAJDAH
+06EA..06ED ; Arabic # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF ; Arabic # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9 ; Arabic # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC ; Arabic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
+0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD ; Arabic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08D3..08E1 ; Arabic # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
+08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
+FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
+FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; Arabic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Arabic # Sc RIAL SIGN
+FDFD ; Arabic # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+1EE00..1EE03 ; Arabic # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Arabic # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Arabic # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Arabic # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Arabic # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Arabic # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Arabic # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Arabic # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Arabic # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Arabic # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Arabic # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Arabic # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Arabic # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Arabic # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Arabic # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Arabic # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Arabic # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Arabic # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Arabic # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Arabic # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Arabic # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Arabic # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Arabic # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Arabic # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Arabic # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Arabic # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+
+# Total code points: 1281
+
+# ================================================
+
+0700..070D ; Syriac # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070F ; Syriac # Cf SYRIAC ABBREVIATION MARK
+0710 ; Syriac # Lo SYRIAC LETTER ALAPH
+0711 ; Syriac # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F ; Syriac # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A ; Syriac # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..074F ; Syriac # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+0860..086A ; Syriac # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+
+# Total code points: 88
+
+# ================================================
+
+0780..07A5 ; Thaana # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+07A6..07B0 ; Thaana # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1 ; Thaana # Lo THAANA LETTER NAA
+
+# Total code points: 50
+
+# ================================================
+
+0900..0902 ; Devanagari # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A ; Devanagari # Mn DEVANAGARI VOWEL SIGN OE
+093B ; Devanagari # Mc DEVANAGARI VOWEL SIGN OOE
+093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA
+093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA
+094E..094F ; Devanagari # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950 ; Devanagari # Lo DEVANAGARI OM
+0955..0957 ; Devanagari # Mn [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE
+0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970 ; Devanagari # Po DEVANAGARI ABBREVIATION SIGN
+0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..097F ; Devanagari # Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
+A8E0..A8F1 ; Devanagari # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
+A8FC ; Devanagari # Po DEVANAGARI SIGN SIDDHAM
+A8FD..A8FE ; Devanagari # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
+
+# Total code points: 154
+
+# ================================================
+
+0980 ; Bengali # Lo BENGALI ANJI
+0981 ; Bengali # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; Bengali # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; Bengali # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; Bengali # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; Bengali # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; Bengali # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; Bengali # Lo BENGALI LETTER LA
+09B6..09B9 ; Bengali # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC ; Bengali # Mn BENGALI SIGN NUKTA
+09BD ; Bengali # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0 ; Bengali # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; Bengali # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; Bengali # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; Bengali # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD ; Bengali # Mn BENGALI SIGN VIRAMA
+09CE ; Bengali # Lo BENGALI LETTER KHANDA TA
+09D7 ; Bengali # Mc BENGALI AU LENGTH MARK
+09DC..09DD ; Bengali # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; Bengali # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3 ; Bengali # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF ; Bengali # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1 ; Bengali # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3 ; Bengali # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F9 ; Bengali # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA ; Bengali # So BENGALI ISSHAR
+09FB ; Bengali # Sc BENGALI GANDA MARK
+09FC ; Bengali # Lo BENGALI LETTER VEDIC ANUSVARA
+09FD ; Bengali # Po BENGALI ABBREVIATION SIGN
+09FE ; Bengali # Mn BENGALI SANDHI MARK
+
+# Total code points: 96
+
+# ================================================
+
+0A01..0A02 ; Gurmukhi # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; Gurmukhi # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; Gurmukhi # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; Gurmukhi # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; Gurmukhi # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; Gurmukhi # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; Gurmukhi # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; Gurmukhi # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; Gurmukhi # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C ; Gurmukhi # Mn GURMUKHI SIGN NUKTA
+0A3E..0A40 ; Gurmukhi # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; Gurmukhi # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51 ; Gurmukhi # Mn GURMUKHI SIGN UDAAT
+0A59..0A5C ; Gurmukhi # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; Gurmukhi # Lo GURMUKHI LETTER FA
+0A66..0A6F ; Gurmukhi # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71 ; Gurmukhi # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74 ; Gurmukhi # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75 ; Gurmukhi # Mn GURMUKHI SIGN YAKASH
+0A76 ; Gurmukhi # Po GURMUKHI ABBREVIATION SIGN
+
+# Total code points: 80
+
+# ================================================
+
+0A81..0A82 ; Gujarati # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; Gujarati # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; Gujarati # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; Gujarati # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; Gujarati # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; Gujarati # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; Gujarati # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; Gujarati # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC ; Gujarati # Mn GUJARATI SIGN NUKTA
+0ABD ; Gujarati # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; Gujarati # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; Gujarati # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; Gujarati # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; Gujarati # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD ; Gujarati # Mn GUJARATI SIGN VIRAMA
+0AD0 ; Gujarati # Lo GUJARATI OM
+0AE0..0AE1 ; Gujarati # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF0 ; Gujarati # Po GUJARATI ABBREVIATION SIGN
+0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN
+0AF9 ; Gujarati # Lo GUJARATI LETTER ZHA
+0AFA..0AFF ; Gujarati # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+
+# Total code points: 91
+
+# ================================================
+
+0B01 ; Oriya # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; Oriya # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; Oriya # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; Oriya # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; Oriya # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; Oriya # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; Oriya # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; Oriya # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C ; Oriya # Mn ORIYA SIGN NUKTA
+0B3D ; Oriya # Lo ORIYA SIGN AVAGRAHA
+0B3E ; Oriya # Mc ORIYA VOWEL SIGN AA
+0B3F ; Oriya # Mn ORIYA VOWEL SIGN I
+0B40 ; Oriya # Mc ORIYA VOWEL SIGN II
+0B41..0B44 ; Oriya # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48 ; Oriya # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Oriya # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D ; Oriya # Mn ORIYA SIGN VIRAMA
+0B56 ; Oriya # Mn ORIYA AI LENGTH MARK
+0B57 ; Oriya # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D ; Oriya # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; Oriya # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63 ; Oriya # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70 ; Oriya # So ORIYA ISSHAR
+0B71 ; Oriya # Lo ORIYA LETTER WA
+0B72..0B77 ; Oriya # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+
+# Total code points: 90
+
+# ================================================
+
+0B82 ; Tamil # Mn TAMIL SIGN ANUSVARA
+0B83 ; Tamil # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; Tamil # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; Tamil # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; Tamil # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; Tamil # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; Tamil # Lo TAMIL LETTER JA
+0B9E..0B9F ; Tamil # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; Tamil # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; Tamil # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; Tamil # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF ; Tamil # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; Tamil # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; Tamil # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; Tamil # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; Tamil # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD ; Tamil # Mn TAMIL SIGN VIRAMA
+0BD0 ; Tamil # Lo TAMIL OM
+0BD7 ; Tamil # Mc TAMIL AU LENGTH MARK
+0BE6..0BEF ; Tamil # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2 ; Tamil # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8 ; Tamil # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9 ; Tamil # Sc TAMIL RUPEE SIGN
+0BFA ; Tamil # So TAMIL NUMBER SIGN
+11FC0..11FD4 ; Tamil # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+11FD5..11FDC ; Tamil # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
+11FDD..11FE0 ; Tamil # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
+11FE1..11FF1 ; Tamil # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
+11FFF ; Tamil # Po TAMIL PUNCTUATION END OF TEXT
+
+# Total code points: 123
+
+# ================================================
+
+0C00 ; Telugu # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03 ; Telugu # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04 ; Telugu # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C ; Telugu # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; Telugu # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D ; Telugu # Lo TELUGU SIGN AVAGRAHA
+0C3E..0C40 ; Telugu # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; Telugu # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; Telugu # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C5A ; Telugu # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63 ; Telugu # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C77 ; Telugu # Po TELUGU SIGN SIDDHAM
+0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F ; Telugu # So TELUGU SIGN TUUMU
+
+# Total code points: 98
+
+# ================================================
+
+0C80 ; Kannada # Lo KANNADA SIGN SPACING CANDRABINDU
+0C81 ; Kannada # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C84 ; Kannada # Po KANNADA SIGN SIDDHAM
+0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; Kannada # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; Kannada # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; Kannada # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; Kannada # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC ; Kannada # Mn KANNADA SIGN NUKTA
+0CBD ; Kannada # Lo KANNADA SIGN AVAGRAHA
+0CBE ; Kannada # Mc KANNADA VOWEL SIGN AA
+0CBF ; Kannada # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; Kannada # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; Kannada # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; Kannada # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Kannada # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD ; Kannada # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6 ; Kannada # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE ; Kannada # Lo KANNADA LETTER FA
+0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+
+# Total code points: 89
+
+# ================================================
+
+0D00..0D01 ; Malayalam # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C ; Malayalam # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA
+0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
+0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
+0D4F ; Malayalam # So MALAYALAM SIGN PARA
+0D54..0D56 ; Malayalam # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
+0D58..0D5E ; Malayalam # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+0D5F..0D61 ; Malayalam # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D70..0D78 ; Malayalam # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
+0D79 ; Malayalam # So MALAYALAM DATE MARK
+0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+
+# Total code points: 117
+
+# ================================================
+
+0D82..0D83 ; Sinhala # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; Sinhala # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; Sinhala # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; Sinhala # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; Sinhala # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; Sinhala # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA ; Sinhala # Mn SINHALA SIGN AL-LAKUNA
+0DCF..0DD1 ; Sinhala # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; Sinhala # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Sinhala # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; Sinhala # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DE6..0DEF ; Sinhala # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+0DF2..0DF3 ; Sinhala # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4 ; Sinhala # Po SINHALA PUNCTUATION KUNDDALIYA
+111E1..111F4 ; Sinhala # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+
+# Total code points: 110
+
+# ================================================
+
+0E01..0E30 ; Thai # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31 ; Thai # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33 ; Thai # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A ; Thai # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45 ; Thai # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; Thai # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E ; Thai # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E4F ; Thai # Po THAI CHARACTER FONGMAN
+0E50..0E59 ; Thai # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B ; Thai # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+
+# Total code points: 86
+
+# ================================================
+
+0E81..0E82 ; Lao # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; Lao # Lo LAO LETTER KHO TAM
+0E86..0E8A ; Lao # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; Lao # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; Lao # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; Lao # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB1 ; Lao # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3 ; Lao # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EBC ; Lao # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EBD ; Lao # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; Lao # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; Lao # Lm LAO KO LA
+0EC8..0ECD ; Lao # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9 ; Lao # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDF ; Lao # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+
+# Total code points: 82
+
+# ================================================
+
+0F00 ; Tibetan # Lo TIBETAN SYLLABLE OM
+0F01..0F03 ; Tibetan # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12 ; Tibetan # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14 ; Tibetan # Po TIBETAN MARK GTER TSHEG
+0F15..0F17 ; Tibetan # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18..0F19 ; Tibetan # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A..0F1F ; Tibetan # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29 ; Tibetan # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33 ; Tibetan # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34 ; Tibetan # So TIBETAN MARK BSDUS RTAGS
+0F35 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38 ; Tibetan # So TIBETAN MARK CHE MGO
+0F39 ; Tibetan # Mn TIBETAN MARK TSA -PHRU
+0F3A ; Tibetan # Ps TIBETAN MARK GUG RTAGS GYON
+0F3B ; Tibetan # Pe TIBETAN MARK GUG RTAGS GYAS
+0F3C ; Tibetan # Ps TIBETAN MARK ANG KHANG GYON
+0F3D ; Tibetan # Pe TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F ; Tibetan # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47 ; Tibetan # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; Tibetan # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E ; Tibetan # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; Tibetan # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F85 ; Tibetan # Po TIBETAN MARK PALUTA
+0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8C ; Tibetan # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0F8D..0F97 ; Tibetan # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
+0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE..0FCF ; Tibetan # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD4 ; Tibetan # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD9..0FDA ; Tibetan # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+
+# Total code points: 207
+
+# ================================================
+
+1000..102A ; Myanmar # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C ; Myanmar # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030 ; Myanmar # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; Myanmar # Mc MYANMAR VOWEL SIGN E
+1032..1037 ; Myanmar # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038 ; Myanmar # Mc MYANMAR SIGN VISARGA
+1039..103A ; Myanmar # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C ; Myanmar # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E ; Myanmar # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F ; Myanmar # Lo MYANMAR LETTER GREAT SA
+1040..1049 ; Myanmar # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F ; Myanmar # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055 ; Myanmar # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; Myanmar # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; Myanmar # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D ; Myanmar # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060 ; Myanmar # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061 ; Myanmar # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064 ; Myanmar # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066 ; Myanmar # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D ; Myanmar # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070 ; Myanmar # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074 ; Myanmar # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081 ; Myanmar # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082 ; Myanmar # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084 ; Myanmar # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086 ; Myanmar # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C ; Myanmar # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; Myanmar # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E ; Myanmar # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F ; Myanmar # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099 ; Myanmar # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C ; Myanmar # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D ; Myanmar # Mn MYANMAR VOWEL SIGN AITON AI
+109E..109F ; Myanmar # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+A9E0..A9E4 ; Myanmar # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E5 ; Myanmar # Mn MYANMAR SIGN SHAN SAW
+A9E6 ; Myanmar # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; Myanmar # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9F0..A9F9 ; Myanmar # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+A9FA..A9FE ; Myanmar # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA60..AA6F ; Myanmar # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; Myanmar # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; Myanmar # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA77..AA79 ; Myanmar # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AA7A ; Myanmar # Lo MYANMAR LETTER AITON RA
+AA7B ; Myanmar # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C ; Myanmar # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D ; Myanmar # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AA7F ; Myanmar # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
+
+# Total code points: 223
+
+# ================================================
+
+10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Georgian # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Georgian # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; Georgian # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; Georgian # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1C90..1CBA ; Georgian # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Georgian # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Georgian # L& GEORGIAN SMALL LETTER YN
+2D2D ; Georgian # L& GEORGIAN SMALL LETTER AEN
+
+# Total code points: 173
+
+# ================================================
+
+1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
+302E..302F ; Hangul # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
+A960..A97C ; Hangul # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+AC00..D7A3 ; Hangul # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; Hangul # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; Hangul # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+FFA0..FFBE ; Hangul # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+
+# Total code points: 11739
+
+# ================================================
+
+1200..1248 ; Ethiopic # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
+124A..124D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; Ethiopic # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; Ethiopic # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; Ethiopic # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; Ethiopic # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135D..135F ; Ethiopic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1360..1368 ; Ethiopic # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F ; Ethiopic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399 ; Ethiopic # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+2D80..2D96 ; Ethiopic # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+AB01..AB06 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+
+# Total code points: 495
+
+# ================================================
+
+13A0..13F5 ; Cherokee # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Cherokee # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+
+# Total code points: 172
+
+# ================================================
+
+1400 ; Canadian_Aboriginal # Pd CANADIAN SYLLABICS HYPHEN
+1401..166C ; Canadian_Aboriginal # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D ; Canadian_Aboriginal # So CANADIAN SYLLABICS CHI SIGN
+166E ; Canadian_Aboriginal # Po CANADIAN SYLLABICS FULL STOP
+166F..167F ; Canadian_Aboriginal # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+18B0..18F5 ; Canadian_Aboriginal # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+
+# Total code points: 710
+
+# ================================================
+
+1680 ; Ogham # Zs OGHAM SPACE MARK
+1681..169A ; Ogham # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B ; Ogham # Ps OGHAM FEATHER MARK
+169C ; Ogham # Pe OGHAM REVERSED FEATHER MARK
+
+# Total code points: 29
+
+# ================================================
+
+16A0..16EA ; Runic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; Runic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; Runic # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+
+# Total code points: 86
+
+# ================================================
+
+1780..17B3 ; Khmer # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5 ; Khmer # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6 ; Khmer # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; Khmer # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; Khmer # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; Khmer # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; Khmer # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3 ; Khmer # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D4..17D6 ; Khmer # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7 ; Khmer # Lm KHMER SIGN LEK TOO
+17D8..17DA ; Khmer # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DB ; Khmer # Sc KHMER CURRENCY SYMBOL RIEL
+17DC ; Khmer # Lo KHMER SIGN AVAKRAHASANYA
+17DD ; Khmer # Mn KHMER SIGN ATTHACAN
+17E0..17E9 ; Khmer # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9 ; Khmer # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+19E0..19FF ; Khmer # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+
+# Total code points: 146
+
+# ================================================
+
+1800..1801 ; Mongolian # Po [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS
+1804 ; Mongolian # Po MONGOLIAN COLON
+1806 ; Mongolian # Pd MONGOLIAN TODO SOFT HYPHEN
+1807..180A ; Mongolian # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+180B..180D ; Mongolian # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; Mongolian # Cf MONGOLIAN VOWEL SEPARATOR
+1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; Mongolian # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; Mongolian # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; Mongolian # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; Mongolian # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 ; Mongolian # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+18AA ; Mongolian # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+11660..1166C ; Mongolian # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+
+# Total code points: 167
+
+# ================================================
+
+3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
+1B001..1B11E ; Hiragana # Lo [286] HIRAGANA LETTER ARCHAIC YE..HENTAIGANA LETTER N-MU-MO-2
+1B150..1B152 ; Hiragana # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1F200 ; Hiragana # So SQUARE HIRAGANA HOKA
+
+# Total code points: 379
+
+# ================================================
+
+30A1..30FA ; Katakana # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FD..30FE ; Katakana # Lm [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK
+30FF ; Katakana # Lo KATAKANA DIGRAPH KOTO
+31F0..31FF ; Katakana # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+32D0..32FE ; Katakana # So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
+3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO
+FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+1B000 ; Katakana # Lo KATAKANA LETTER ARCHAIC E
+1B164..1B167 ; Katakana # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+
+# Total code points: 304
+
+# ================================================
+
+02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
+3105..312F ; Bopomofo # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+
+# Total code points: 72
+
+# ================================================
+
+2E80..2E99 ; Han # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3 ; Han # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3005 ; Han # Lm IDEOGRAPHIC ITERATION MARK
+3007 ; Han # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; Han # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FEF ; Han # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 89233
+
+# ================================================
+
+A000..A014 ; Yi # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
+A015 ; Yi # Lm YI SYLLABLE WU
+A016..A48C ; Yi # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
+
+# Total code points: 1220
+
+# ================================================
+
+10300..1031F ; Old_Italic # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+10320..10323 ; Old_Italic # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1032D..1032F ; Old_Italic # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
+
+# Total code points: 39
+
+# ================================================
+
+10330..10340 ; Gothic # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341 ; Gothic # Nl GOTHIC LETTER NINETY
+10342..10349 ; Gothic # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; Gothic # Nl GOTHIC LETTER NINE HUNDRED
+
+# Total code points: 27
+
+# ================================================
+
+10400..1044F ; Deseret # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+
+# Total code points: 80
+
+# ================================================
+
+0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
+064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
+0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
+0951..0954 ; Inherited # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+1AB0..1ABD ; Inherited # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE ; Inherited # Me COMBINING PARENTHESES OVERLAY
+1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0 ; Inherited # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED ; Inherited # Mn VEDIC SIGN TIRYAK
+1CF4 ; Inherited # Mn VEDIC TONE CANDRA ABOVE
+1CF8..1CF9 ; Inherited # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1DC0..1DF9 ; Inherited # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF ; Inherited # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0 ; Inherited # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+302A..302D ; Inherited # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW
+101FD ; Inherited # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+102E0 ; Inherited # Mn COPTIC EPACT THOUSANDS MARK
+1133B ; Inherited # Mn COMBINING BINDU BELOW
+1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 571
+
+# ================================================
+
+1700..170C ; Tagalog # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711 ; Tagalog # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714 ; Tagalog # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+
+# Total code points: 20
+
+# ================================================
+
+1720..1731 ; Hanunoo # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734 ; Hanunoo # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+
+# Total code points: 21
+
+# ================================================
+
+1740..1751 ; Buhid # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753 ; Buhid # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+
+# Total code points: 20
+
+# ================================================
+
+1760..176C ; Tagbanwa # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; Tagbanwa # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773 ; Tagbanwa # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+
+# Total code points: 18
+
+# ================================================
+
+1900..191E ; Limbu # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1920..1922 ; Limbu # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; Limbu # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; Limbu # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; Limbu # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Limbu # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; Limbu # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; Limbu # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B ; Limbu # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1940 ; Limbu # So LIMBU SIGN LOO
+1944..1945 ; Limbu # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F ; Limbu # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+
+# Total code points: 68
+
+# ================================================
+
+1950..196D ; Tai_Le # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; Tai_Le # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+
+# Total code points: 35
+
+# ================================================
+
+10000..1000B ; Linear_B # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; Linear_B # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; Linear_B # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; Linear_B # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; Linear_B # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; Linear_B # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; Linear_B # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+
+# Total code points: 211
+
+# ================================================
+
+10380..1039D ; Ugaritic # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F ; Ugaritic # Po UGARITIC WORD DIVIDER
+
+# Total code points: 31
+
+# ================================================
+
+10450..1047F ; Shavian # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
+
+# Total code points: 48
+
+# ================================================
+
+10480..1049D ; Osmanya # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
+104A0..104A9 ; Osmanya # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+
+# Total code points: 40
+
+# ================================================
+
+10800..10805 ; Cypriot # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; Cypriot # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; Cypriot # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; Cypriot # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; Cypriot # Lo CYPRIOT SYLLABLE ZA
+1083F ; Cypriot # Lo CYPRIOT SYLLABLE ZO
+
+# Total code points: 55
+
+# ================================================
+
+2800..28FF ; Braille # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+
+# Total code points: 256
+
+# ================================================
+
+1A00..1A16 ; Buginese # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18 ; Buginese # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A ; Buginese # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B ; Buginese # Mn BUGINESE VOWEL SIGN AE
+1A1E..1A1F ; Buginese # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+
+# Total code points: 30
+
+# ================================================
+
+03E2..03EF ; Coptic # L& [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI
+2C80..2CE4 ; Coptic # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CE5..2CEA ; Coptic # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CEB..2CEE ; Coptic # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1 ; Coptic # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF2..2CF3 ; Coptic # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2CF9..2CFC ; Coptic # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD ; Coptic # No COPTIC FRACTION ONE HALF
+2CFE..2CFF ; Coptic # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+
+# Total code points: 137
+
+# ================================================
+
+1980..19AB ; New_Tai_Lue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; New_Tai_Lue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA ; New_Tai_Lue # No NEW TAI LUE THAM DIGIT ONE
+19DE..19DF ; New_Tai_Lue # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+
+# Total code points: 83
+
+# ================================================
+
+2C00..2C2E ; Glagolitic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E ; Glagolitic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+1E000..1E006 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Glagolitic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Glagolitic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Glagolitic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+
+# Total code points: 132
+
+# ================================================
+
+2D30..2D67 ; Tifinagh # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D70 ; Tifinagh # Po TIFINAGH SEPARATOR MARK
+2D7F ; Tifinagh # Mn TIFINAGH CONSONANT JOINER
+
+# Total code points: 59
+
+# ================================================
+
+A800..A801 ; Syloti_Nagri # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+A802 ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN DVISVARA
+A803..A805 ; Syloti_Nagri # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806 ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A ; Syloti_Nagri # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822 ; Syloti_Nagri # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; Syloti_Nagri # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; Syloti_Nagri # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; Syloti_Nagri # Mc SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B ; Syloti_Nagri # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+
+# Total code points: 44
+
+# ================================================
+
+103A0..103C3 ; Old_Persian # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; Old_Persian # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0 ; Old_Persian # Po OLD PERSIAN WORD DIVIDER
+103D1..103D5 ; Old_Persian # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+
+# Total code points: 50
+
+# ================================================
+
+10A00 ; Kharoshthi # Lo KHAROSHTHI LETTER A
+10A01..10A03 ; Kharoshthi # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Kharoshthi # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Kharoshthi # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13 ; Kharoshthi # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; Kharoshthi # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; Kharoshthi # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A38..10A3A ; Kharoshthi # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; Kharoshthi # Mn KHAROSHTHI VIRAMA
+10A40..10A48 ; Kharoshthi # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
+10A50..10A58 ; Kharoshthi # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+
+# Total code points: 68
+
+# ================================================
+
+1B00..1B03 ; Balinese # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04 ; Balinese # Mc BALINESE SIGN BISAH
+1B05..1B33 ; Balinese # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34 ; Balinese # Mn BALINESE SIGN REREKAN
+1B35 ; Balinese # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A ; Balinese # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B ; Balinese # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C ; Balinese # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41 ; Balinese # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42 ; Balinese # Mn BALINESE VOWEL SIGN PEPET
+1B43..1B44 ; Balinese # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B ; Balinese # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59 ; Balinese # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B5A..1B60 ; Balinese # Po [7] BALINESE PANTI..BALINESE PAMENENG
+1B61..1B6A ; Balinese # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+1B6B..1B73 ; Balinese # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B74..1B7C ; Balinese # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+
+# Total code points: 121
+
+# ================================================
+
+12000..12399 ; Cuneiform # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; Cuneiform # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12470..12474 ; Cuneiform # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+12480..12543 ; Cuneiform # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+
+# Total code points: 1234
+
+# ================================================
+
+10900..10915 ; Phoenician # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10916..1091B ; Phoenician # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+1091F ; Phoenician # Po PHOENICIAN WORD SEPARATOR
+
+# Total code points: 29
+
+# ================================================
+
+A840..A873 ; Phags_Pa # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A874..A877 ; Phags_Pa # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+
+# Total code points: 56
+
+# ================================================
+
+07C0..07C9 ; Nko # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA ; Nko # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3 ; Nko # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5 ; Nko # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07F6 ; Nko # So NKO SYMBOL OO DENNEN
+07F7..07F9 ; Nko # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+07FA ; Nko # Lm NKO LAJANYALAN
+07FD ; Nko # Mn NKO DANTAYALAN
+07FE..07FF ; Nko # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN
+
+# Total code points: 62
+
+# ================================================
+
+1B80..1B81 ; Sundanese # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82 ; Sundanese # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0 ; Sundanese # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1 ; Sundanese # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5 ; Sundanese # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7 ; Sundanese # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9 ; Sundanese # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA ; Sundanese # Mc SUNDANESE SIGN PAMAAEH
+1BAB..1BAD ; Sundanese # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BAF ; Sundanese # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9 ; Sundanese # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BBF ; Sundanese # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
+1CC0..1CC7 ; Sundanese # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+
+# Total code points: 72
+
+# ================================================
+
+1C00..1C23 ; Lepcha # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B ; Lepcha # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33 ; Lepcha # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35 ; Lepcha # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37 ; Lepcha # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C3B..1C3F ; Lepcha # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C40..1C49 ; Lepcha # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F ; Lepcha # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+
+# Total code points: 74
+
+# ================================================
+
+1C50..1C59 ; Ol_Chiki # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77 ; Ol_Chiki # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; Ol_Chiki # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C7E..1C7F ; Ol_Chiki # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+
+# Total code points: 48
+
+# ================================================
+
+A500..A60B ; Vai # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; Vai # Lm VAI SYLLABLE LENGTHENER
+A60D..A60F ; Vai # Po [3] VAI COMMA..VAI QUESTION MARK
+A610..A61F ; Vai # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629 ; Vai # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B ; Vai # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+
+# Total code points: 300
+
+# ================================================
+
+A880..A881 ; Saurashtra # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3 ; Saurashtra # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3 ; Saurashtra # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4..A8C5 ; Saurashtra # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8CE..A8CF ; Saurashtra # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A8D0..A8D9 ; Saurashtra # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+
+# Total code points: 82
+
+# ================================================
+
+A900..A909 ; Kayah_Li # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925 ; Kayah_Li # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D ; Kayah_Li # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A92F ; Kayah_Li # Po KAYAH LI SIGN SHYA
+
+# Total code points: 47
+
+# ================================================
+
+A930..A946 ; Rejang # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951 ; Rejang # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953 ; Rejang # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A95F ; Rejang # Po REJANG SECTION MARK
+
+# Total code points: 37
+
+# ================================================
+
+10280..1029C ; Lycian # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+
+# Total code points: 29
+
+# ================================================
+
+102A0..102D0 ; Carian # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+
+# Total code points: 49
+
+# ================================================
+
+10920..10939 ; Lydian # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+1093F ; Lydian # Po LYDIAN TRIANGULAR MARK
+
+# Total code points: 27
+
+# ================================================
+
+AA00..AA28 ; Cham # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E ; Cham # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30 ; Cham # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32 ; Cham # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34 ; Cham # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36 ; Cham # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42 ; Cham # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43 ; Cham # Mn CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B ; Cham # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C ; Cham # Mn CHAM CONSONANT SIGN FINAL M
+AA4D ; Cham # Mc CHAM CONSONANT SIGN FINAL H
+AA50..AA59 ; Cham # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA5C..AA5F ; Cham # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+
+# Total code points: 83
+
+# ================================================
+
+1A20..1A54 ; Tai_Tham # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55 ; Tai_Tham # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56 ; Tai_Tham # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57 ; Tai_Tham # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E ; Tai_Tham # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60 ; Tai_Tham # Mn TAI THAM SIGN SAKOT
+1A61 ; Tai_Tham # Mc TAI THAM VOWEL SIGN A
+1A62 ; Tai_Tham # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64 ; Tai_Tham # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C ; Tai_Tham # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72 ; Tai_Tham # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C ; Tai_Tham # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; Tai_Tham # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89 ; Tai_Tham # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99 ; Tai_Tham # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA0..1AA6 ; Tai_Tham # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA7 ; Tai_Tham # Lm TAI THAM SIGN MAI YAMOK
+1AA8..1AAD ; Tai_Tham # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+
+# Total code points: 127
+
+# ================================================
+
+AA80..AAAF ; Tai_Viet # Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0 ; Tai_Viet # Mn TAI VIET MAI KANG
+AAB1 ; Tai_Viet # Lo TAI VIET VOWEL AA
+AAB2..AAB4 ; Tai_Viet # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6 ; Tai_Viet # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8 ; Tai_Viet # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD ; Tai_Viet # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF ; Tai_Viet # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0 ; Tai_Viet # Lo TAI VIET TONE MAI NUENG
+AAC1 ; Tai_Viet # Mn TAI VIET TONE MAI THO
+AAC2 ; Tai_Viet # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; Tai_Viet # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; Tai_Viet # Lm TAI VIET SYMBOL SAM
+AADE..AADF ; Tai_Viet # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+
+# Total code points: 72
+
+# ================================================
+
+10B00..10B35 ; Avestan # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B39..10B3F ; Avestan # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+
+# Total code points: 61
+
+# ================================================
+
+13000..1342E ; Egyptian_Hieroglyphs # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+13430..13438 ; Egyptian_Hieroglyphs # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
+
+# Total code points: 1080
+
+# ================================================
+
+0800..0815 ; Samaritan # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819 ; Samaritan # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A ; Samaritan # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823 ; Samaritan # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824 ; Samaritan # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827 ; Samaritan # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828 ; Samaritan # Lm SAMARITAN MODIFIER LETTER I
+0829..082D ; Samaritan # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0830..083E ; Samaritan # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+
+# Total code points: 61
+
+# ================================================
+
+A4D0..A4F7 ; Lisu # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; Lisu # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A4FE..A4FF ; Lisu # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+
+# Total code points: 48
+
+# ================================================
+
+A6A0..A6E5 ; Bamum # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; Bamum # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A6F2..A6F7 ; Bamum # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+16800..16A38 ; Bamum # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+
+# Total code points: 657
+
+# ================================================
+
+A980..A982 ; Javanese # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983 ; Javanese # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2 ; Javanese # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3 ; Javanese # Mn JAVANESE SIGN CECAK TELU
+A9B4..A9B5 ; Javanese # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9 ; Javanese # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB ; Javanese # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD ; Javanese # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9C0 ; Javanese # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+A9C1..A9CD ; Javanese # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+A9D0..A9D9 ; Javanese # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9DE..A9DF ; Javanese # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+
+# Total code points: 90
+
+# ================================================
+
+AAE0..AAEA ; Meetei_Mayek # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB ; Meetei_Mayek # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; Meetei_Mayek # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF0..AAF1 ; Meetei_Mayek # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+AAF2 ; Meetei_Mayek # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; Meetei_Mayek # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5 ; Meetei_Mayek # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AAF6 ; Meetei_Mayek # Mn MEETEI MAYEK VIRAMA
+ABC0..ABE2 ; Meetei_Mayek # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4 ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5 ; Meetei_Mayek # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7 ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8 ; Meetei_Mayek # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEB ; Meetei_Mayek # Po MEETEI MAYEK CHEIKHEI
+ABEC ; Meetei_Mayek # Mc MEETEI MAYEK LUM IYEK
+ABED ; Meetei_Mayek # Mn MEETEI MAYEK APUN IYEK
+ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+
+# Total code points: 79
+
+# ================================================
+
+10840..10855 ; Imperial_Aramaic # Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
+10857 ; Imperial_Aramaic # Po IMPERIAL ARAMAIC SECTION SIGN
+10858..1085F ; Imperial_Aramaic # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+
+# Total code points: 31
+
+# ================================================
+
+10A60..10A7C ; Old_South_Arabian # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A7D..10A7E ; Old_South_Arabian # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F ; Old_South_Arabian # Po OLD SOUTH ARABIAN NUMERIC INDICATOR
+
+# Total code points: 32
+
+# ================================================
+
+10B40..10B55 ; Inscriptional_Parthian # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58..10B5F ; Inscriptional_Parthian # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+
+# Total code points: 30
+
+# ================================================
+
+10B60..10B72 ; Inscriptional_Pahlavi # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78..10B7F ; Inscriptional_Pahlavi # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+
+# Total code points: 27
+
+# ================================================
+
+10C00..10C48 ; Old_Turkic # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+
+# Total code points: 73
+
+# ================================================
+
+11080..11081 ; Kaithi # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+11082 ; Kaithi # Mc KAITHI SIGN VISARGA
+11083..110AF ; Kaithi # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2 ; Kaithi # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6 ; Kaithi # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8 ; Kaithi # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA ; Kaithi # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110BB..110BC ; Kaithi # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BD ; Kaithi # Cf KAITHI NUMBER SIGN
+110BE..110C1 ; Kaithi # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+110CD ; Kaithi # Cf KAITHI NUMBER SIGN ABOVE
+
+# Total code points: 67
+
+# ================================================
+
+1BC0..1BE5 ; Batak # Lo [38] BATAK LETTER A..BATAK LETTER U
+1BE6 ; Batak # Mn BATAK SIGN TOMPI
+1BE7 ; Batak # Mc BATAK VOWEL SIGN E
+1BE8..1BE9 ; Batak # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC ; Batak # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED ; Batak # Mn BATAK VOWEL SIGN KARO O
+1BEE ; Batak # Mc BATAK VOWEL SIGN U
+1BEF..1BF1 ; Batak # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1BF2..1BF3 ; Batak # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1BFC..1BFF ; Batak # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+
+# Total code points: 56
+
+# ================================================
+
+11000 ; Brahmi # Mc BRAHMI SIGN CANDRABINDU
+11001 ; Brahmi # Mn BRAHMI SIGN ANUSVARA
+11002 ; Brahmi # Mc BRAHMI SIGN VISARGA
+11003..11037 ; Brahmi # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11038..11046 ; Brahmi # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11047..1104D ; Brahmi # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+11052..11065 ; Brahmi # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+11066..1106F ; Brahmi # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+1107F ; Brahmi # Mn BRAHMI NUMBER JOINER
+
+# Total code points: 109
+
+# ================================================
+
+0840..0858 ; Mandaic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0859..085B ; Mandaic # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+085E ; Mandaic # Po MANDAIC PUNCTUATION
+
+# Total code points: 29
+
+# ================================================
+
+11100..11102 ; Chakma # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126 ; Chakma # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B ; Chakma # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; Chakma # Mc CHAKMA VOWEL SIGN E
+1112D..11134 ; Chakma # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11136..1113F ; Chakma # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11140..11143 ; Chakma # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+11144 ; Chakma # Lo CHAKMA LETTER LHAA
+11145..11146 ; Chakma # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+
+# Total code points: 70
+
+# ================================================
+
+109A0..109B7 ; Meroitic_Cursive # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+109BC..109BD ; Meroitic_Cursive # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+109BE..109BF ; Meroitic_Cursive # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+109C0..109CF ; Meroitic_Cursive # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF ; Meroitic_Cursive # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+
+# Total code points: 90
+
+# ================================================
+
+10980..1099F ; Meroitic_Hieroglyphs # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
+
+# Total code points: 32
+
+# ================================================
+
+16F00..16F4A ; Miao # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F4F ; Miao # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F50 ; Miao # Lo MIAO LETTER NASALIZATION
+16F51..16F87 ; Miao # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92 ; Miao # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; Miao # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+
+# Total code points: 149
+
+# ================================================
+
+11180..11181 ; Sharada # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; Sharada # Mc SHARADA SIGN VISARGA
+11183..111B2 ; Sharada # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5 ; Sharada # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111C9..111CC ; Sharada # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CD ; Sharada # Po SHARADA SUTRA MARK
+111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA ; Sharada # Lo SHARADA EKAM
+111DB ; Sharada # Po SHARADA SIGN SIDDHAM
+111DC ; Sharada # Lo SHARADA HEADSTROKE
+111DD..111DF ; Sharada # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+
+# Total code points: 94
+
+# ================================================
+
+110D0..110E8 ; Sora_Sompeng # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9 ; Sora_Sompeng # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+
+# Total code points: 35
+
+# ================================================
+
+11680..116AA ; Takri # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB ; Takri # Mn TAKRI SIGN ANUSVARA
+116AC ; Takri # Mc TAKRI SIGN VISARGA
+116AD ; Takri # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; Takri # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; Takri # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B6 ; Takri # Mc TAKRI SIGN VIRAMA
+116B7 ; Takri # Mn TAKRI SIGN NUKTA
+116B8 ; Takri # Lo TAKRI LETTER ARCHAIC KHA
+116C0..116C9 ; Takri # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+
+# Total code points: 67
+
+# ================================================
+
+10530..10563 ; Caucasian_Albanian # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+1056F ; Caucasian_Albanian # Po CAUCASIAN ALBANIAN CITATION MARK
+
+# Total code points: 53
+
+# ================================================
+
+16AD0..16AED ; Bassa_Vah # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF0..16AF4 ; Bassa_Vah # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16AF5 ; Bassa_Vah # Po BASSA VAH FULL STOP
+
+# Total code points: 36
+
+# ================================================
+
+1BC00..1BC6A ; Duployan # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; Duployan # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; Duployan # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; Duployan # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9C ; Duployan # So DUPLOYAN SIGN O WITH CROSS
+1BC9D..1BC9E ; Duployan # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1BC9F ; Duployan # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+
+# Total code points: 143
+
+# ================================================
+
+10500..10527 ; Elbasan # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+
+# Total code points: 40
+
+# ================================================
+
+11300..11301 ; Grantha # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303 ; Grantha # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C ; Grantha # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; Grantha # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; Grantha # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; Grantha # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; Grantha # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; Grantha # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133C ; Grantha # Mn GRANTHA SIGN NUKTA
+1133D ; Grantha # Lo GRANTHA SIGN AVAGRAHA
+1133E..1133F ; Grantha # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340 ; Grantha # Mn GRANTHA VOWEL SIGN II
+11341..11344 ; Grantha # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; Grantha # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D ; Grantha # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350 ; Grantha # Lo GRANTHA OM
+11357 ; Grantha # Mc GRANTHA AU LENGTH MARK
+1135D..11361 ; Grantha # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363 ; Grantha # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11366..1136C ; Grantha # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; Grantha # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+
+# Total code points: 85
+
+# ================================================
+
+16B00..16B2F ; Pahawh_Hmong # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B30..16B36 ; Pahawh_Hmong # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16B37..16B3B ; Pahawh_Hmong # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
+16B3C..16B3F ; Pahawh_Hmong # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
+16B40..16B43 ; Pahawh_Hmong # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B44 ; Pahawh_Hmong # Po PAHAWH HMONG SIGN XAUS
+16B45 ; Pahawh_Hmong # So PAHAWH HMONG SIGN CIM TSOV ROG
+16B50..16B59 ; Pahawh_Hmong # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B5B..16B61 ; Pahawh_Hmong # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+16B63..16B77 ; Pahawh_Hmong # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; Pahawh_Hmong # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+
+# Total code points: 127
+
+# ================================================
+
+11200..11211 ; Khojki # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; Khojki # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E ; Khojki # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231 ; Khojki # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233 ; Khojki # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234 ; Khojki # Mn KHOJKI SIGN ANUSVARA
+11235 ; Khojki # Mc KHOJKI SIGN VIRAMA
+11236..11237 ; Khojki # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+11238..1123D ; Khojki # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+1123E ; Khojki # Mn KHOJKI SIGN SUKUN
+
+# Total code points: 62
+
+# ================================================
+
+10600..10736 ; Linear_A # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; Linear_A # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; Linear_A # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+
+# Total code points: 341
+
+# ================================================
+
+11150..11172 ; Mahajani # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11173 ; Mahajani # Mn MAHAJANI SIGN NUKTA
+11174..11175 ; Mahajani # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
+11176 ; Mahajani # Lo MAHAJANI LIGATURE SHRI
+
+# Total code points: 39
+
+# ================================================
+
+10AC0..10AC7 ; Manichaean # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC8 ; Manichaean # So MANICHAEAN SIGN UD
+10AC9..10AE4 ; Manichaean # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10AE5..10AE6 ; Manichaean # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10AEB..10AEF ; Manichaean # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
+10AF0..10AF6 ; Manichaean # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
+
+# Total code points: 51
+
+# ================================================
+
+1E800..1E8C4 ; Mende_Kikakui # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8C7..1E8CF ; Mende_Kikakui # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+1E8D0..1E8D6 ; Mende_Kikakui # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+
+# Total code points: 213
+
+# ================================================
+
+11600..1162F ; Modi # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632 ; Modi # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A ; Modi # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C ; Modi # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D ; Modi # Mn MODI SIGN ANUSVARA
+1163E ; Modi # Mc MODI SIGN VISARGA
+1163F..11640 ; Modi # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+11641..11643 ; Modi # Po [3] MODI DANDA..MODI ABBREVIATION SIGN
+11644 ; Modi # Lo MODI SIGN HUVA
+11650..11659 ; Modi # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+
+# Total code points: 79
+
+# ================================================
+
+16A40..16A5E ; Mro # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69 ; Mro # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
+16A6E..16A6F ; Mro # Po [2] MRO DANDA..MRO DOUBLE DANDA
+
+# Total code points: 43
+
+# ================================================
+
+10A80..10A9C ; Old_North_Arabian # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10A9D..10A9F ; Old_North_Arabian # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+
+# Total code points: 32
+
+# ================================================
+
+10880..1089E ; Nabataean # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108A7..108AF ; Nabataean # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+
+# Total code points: 40
+
+# ================================================
+
+10860..10876 ; Palmyrene # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10877..10878 ; Palmyrene # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
+10879..1087F ; Palmyrene # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
+
+# Total code points: 32
+
+# ================================================
+
+11AC0..11AF8 ; Pau_Cin_Hau # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+
+# Total code points: 57
+
+# ================================================
+
+10350..10375 ; Old_Permic # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10376..1037A ; Old_Permic # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+
+# Total code points: 43
+
+# ================================================
+
+10B80..10B91 ; Psalter_Pahlavi # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10B99..10B9C ; Psalter_Pahlavi # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10BA9..10BAF ; Psalter_Pahlavi # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+
+# Total code points: 29
+
+# ================================================
+
+11580..115AE ; Siddham # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115AF..115B1 ; Siddham # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5 ; Siddham # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB ; Siddham # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD ; Siddham # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE ; Siddham # Mc SIDDHAM SIGN VISARGA
+115BF..115C0 ; Siddham # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115C1..115D7 ; Siddham # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+115D8..115DB ; Siddham # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD ; Siddham # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+
+# Total code points: 92
+
+# ================================================
+
+112B0..112DE ; Khudawadi # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112DF ; Khudawadi # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2 ; Khudawadi # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112EA ; Khudawadi # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+112F0..112F9 ; Khudawadi # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+
+# Total code points: 69
+
+# ================================================
+
+11480..114AF ; Tirhuta # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B0..114B2 ; Tirhuta # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8 ; Tirhuta # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9 ; Tirhuta # Mc TIRHUTA VOWEL SIGN E
+114BA ; Tirhuta # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE ; Tirhuta # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0 ; Tirhuta # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1 ; Tirhuta # Mc TIRHUTA SIGN VISARGA
+114C2..114C3 ; Tirhuta # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+114C4..114C5 ; Tirhuta # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C6 ; Tirhuta # Po TIRHUTA ABBREVIATION SIGN
+114C7 ; Tirhuta # Lo TIRHUTA OM
+114D0..114D9 ; Tirhuta # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+
+# Total code points: 82
+
+# ================================================
+
+118A0..118DF ; Warang_Citi # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118E0..118E9 ; Warang_Citi # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+118EA..118F2 ; Warang_Citi # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+118FF ; Warang_Citi # Lo WARANG CITI OM
+
+# Total code points: 84
+
+# ================================================
+
+11700..1171A ; Ahom # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+1171D..1171F ; Ahom # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Ahom # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Ahom # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Ahom # Mc AHOM VOWEL SIGN E
+11727..1172B ; Ahom # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739 ; Ahom # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+1173A..1173B ; Ahom # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+1173F ; Ahom # So AHOM SYMBOL VI
+
+# Total code points: 58
+
+# ================================================
+
+14400..14646 ; Anatolian_Hieroglyphs # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+
+# Total code points: 583
+
+# ================================================
+
+108E0..108F2 ; Hatran # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; Hatran # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+108FB..108FF ; Hatran # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+
+# Total code points: 26
+
+# ================================================
+
+11280..11286 ; Multani # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; Multani # Lo MULTANI LETTER GHA
+1128A..1128D ; Multani # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; Multani # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; Multani # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112A9 ; Multani # Po MULTANI SECTION MARK
+
+# Total code points: 38
+
+# ================================================
+
+10C80..10CB2 ; Old_Hungarian # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Old_Hungarian # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10CFA..10CFF ; Old_Hungarian # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+
+# Total code points: 108
+
+# ================================================
+
+1D800..1D9FF ; SignWriting # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA00..1DA36 ; SignWriting # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA37..1DA3A ; SignWriting # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA3B..1DA6C ; SignWriting # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA6D..1DA74 ; SignWriting # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA75 ; SignWriting # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA76..1DA83 ; SignWriting # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA84 ; SignWriting # Mn SIGNWRITING LOCATION HEAD NECK
+1DA85..1DA86 ; SignWriting # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+1DA87..1DA8B ; SignWriting # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+1DA9B..1DA9F ; SignWriting # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; SignWriting # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+
+# Total code points: 672
+
+# ================================================
+
+1E900..1E943 ; Adlam # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A ; Adlam # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E94B ; Adlam # Lm ADLAM NASALIZATION MARK
+1E950..1E959 ; Adlam # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F ; Adlam # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+
+# Total code points: 88
+
+# ================================================
+
+11C00..11C08 ; Bhaiksuki # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; Bhaiksuki # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F ; Bhaiksuki # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; Bhaiksuki # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Bhaiksuki # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; Bhaiksuki # Mc BHAIKSUKI SIGN VISARGA
+11C3F ; Bhaiksuki # Mn BHAIKSUKI SIGN VIRAMA
+11C40 ; Bhaiksuki # Lo BHAIKSUKI SIGN AVAGRAHA
+11C41..11C45 ; Bhaiksuki # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C50..11C59 ; Bhaiksuki # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C5A..11C6C ; Bhaiksuki # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+
+# Total code points: 97
+
+# ================================================
+
+11C70..11C71 ; Marchen # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+11C72..11C8F ; Marchen # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7 ; Marchen # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; Marchen # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; Marchen # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; Marchen # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; Marchen # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; Marchen # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; Marchen # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+
+# Total code points: 68
+
+# ================================================
+
+11400..11434 ; Newa # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437 ; Newa # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; Newa # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; Newa # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444 ; Newa # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445 ; Newa # Mc NEWA SIGN VISARGA
+11446 ; Newa # Mn NEWA SIGN NUKTA
+11447..1144A ; Newa # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1144B..1144F ; Newa # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+11450..11459 ; Newa # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145B ; Newa # Po NEWA PLACEHOLDER MARK
+1145D ; Newa # Po NEWA INSERTION SIGN
+1145E ; Newa # Mn NEWA SANDHI MARK
+1145F ; Newa # Lo NEWA LETTER VEDIC ANUSVARA
+
+# Total code points: 94
+
+# ================================================
+
+104B0..104D3 ; Osage # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; Osage # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+
+# Total code points: 72
+
+# ================================================
+
+16FE0 ; Tangut # Lm TANGUT ITERATION MARK
+17000..187F7 ; Tangut # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18AF2 ; Tangut # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+
+# Total code points: 6892
+
+# ================================================
+
+11D00..11D06 ; Masaram_Gondi # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; Masaram_Gondi # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; Masaram_Gondi # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36 ; Masaram_Gondi # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Masaram_Gondi # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Masaram_Gondi # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Masaram_Gondi # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46 ; Masaram_Gondi # Lo MASARAM GONDI REPHA
+11D47 ; Masaram_Gondi # Mn MASARAM GONDI RA-KARA
+11D50..11D59 ; Masaram_Gondi # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+
+# Total code points: 75
+
+# ================================================
+
+16FE1 ; Nushu # Lm NUSHU ITERATION MARK
+1B170..1B2FB ; Nushu # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+
+# Total code points: 397
+
+# ================================================
+
+11A50 ; Soyombo # Lo SOYOMBO LETTER A
+11A51..11A56 ; Soyombo # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; Soyombo # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; Soyombo # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A89 ; Soyombo # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96 ; Soyombo # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; Soyombo # Mc SOYOMBO SIGN VISARGA
+11A98..11A99 ; Soyombo # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9A..11A9C ; Soyombo # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9D ; Soyombo # Lo SOYOMBO MARK PLUTA
+11A9E..11AA2 ; Soyombo # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+
+# Total code points: 83
+
+# ================================================
+
+11A00 ; Zanabazar_Square # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A0A ; Zanabazar_Square # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32 ; Zanabazar_Square # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; Zanabazar_Square # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A ; Zanabazar_Square # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E ; Zanabazar_Square # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A3F..11A46 ; Zanabazar_Square # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A47 ; Zanabazar_Square # Mn ZANABAZAR SQUARE SUBJOINER
+
+# Total code points: 72
+
+# ================================================
+
+11800..1182B ; Dogra # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; Dogra # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Dogra # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Dogra # Mc DOGRA SIGN VISARGA
+11839..1183A ; Dogra # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1183B ; Dogra # Po DOGRA ABBREVIATION SIGN
+
+# Total code points: 60
+
+# ================================================
+
+11D60..11D65 ; Gunjala_Gondi # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; Gunjala_Gondi # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; Gunjala_Gondi # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; Gunjala_Gondi # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Gunjala_Gondi # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Gunjala_Gondi # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Gunjala_Gondi # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Gunjala_Gondi # Mc GUNJALA GONDI SIGN VISARGA
+11D97 ; Gunjala_Gondi # Mn GUNJALA GONDI VIRAMA
+11D98 ; Gunjala_Gondi # Lo GUNJALA GONDI OM
+11DA0..11DA9 ; Gunjala_Gondi # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+
+# Total code points: 63
+
+# ================================================
+
+11EE0..11EF2 ; Makasar # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4 ; Makasar # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Makasar # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11EF7..11EF8 ; Makasar # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+
+# Total code points: 25
+
+# ================================================
+
+16E40..16E7F ; Medefaidrin # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16E80..16E96 ; Medefaidrin # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+16E97..16E9A ; Medefaidrin # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+
+# Total code points: 91
+
+# ================================================
+
+10D00..10D23 ; Hanifi_Rohingya # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Hanifi_Rohingya # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39 ; Hanifi_Rohingya # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+
+# Total code points: 50
+
+# ================================================
+
+10F30..10F45 ; Sogdian # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50 ; Sogdian # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F51..10F54 ; Sogdian # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10F55..10F59 ; Sogdian # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+
+# Total code points: 42
+
+# ================================================
+
+10F00..10F1C ; Old_Sogdian # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F1D..10F26 ; Old_Sogdian # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F27 ; Old_Sogdian # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+
+# Total code points: 40
+
+# ================================================
+
+10FE0..10FF6 ; Elymaic # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+
+# Total code points: 23
+
+# ================================================
+
+119A0..119A7 ; Nandinagari # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; Nandinagari # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3 ; Nandinagari # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7 ; Nandinagari # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; Nandinagari # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF ; Nandinagari # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E0 ; Nandinagari # Mn NANDINAGARI SIGN VIRAMA
+119E1 ; Nandinagari # Lo NANDINAGARI SIGN AVAGRAHA
+119E2 ; Nandinagari # Po NANDINAGARI SIGN SIDDHAM
+119E3 ; Nandinagari # Lo NANDINAGARI HEADSTROKE
+119E4 ; Nandinagari # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+
+# Total code points: 65
+
+# ================================================
+
+1E100..1E12C ; Nyiakeng_Puachue_Hmong # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E130..1E136 ; Nyiakeng_Puachue_Hmong # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E137..1E13D ; Nyiakeng_Puachue_Hmong # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149 ; Nyiakeng_Puachue_Hmong # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E ; Nyiakeng_Puachue_Hmong # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E14F ; Nyiakeng_Puachue_Hmong # So NYIAKENG PUACHUE HMONG CIRCLED CA
+
+# Total code points: 71
+
+# ================================================
+
+1E2C0..1E2EB ; Wancho # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E2EC..1E2EF ; Wancho # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E2F0..1E2F9 ; Wancho # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+1E2FF ; Wancho # Sc WANCHO NGUN SIGN
+
+# Total code points: 59
+
+# EOF
diff --git a/macros/generic/unicode-data/SpecialCasing.txt b/macros/generic/unicode-data/SpecialCasing.txt
new file mode 100644
index 0000000000..1c04aacf97
--- /dev/null
+++ b/macros/generic/unicode-data/SpecialCasing.txt
@@ -0,0 +1,281 @@
+# SpecialCasing-12.1.0.txt
+# Date: 2019-03-10, 10:53:28 GMT
+# © 2019 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Special Casing
+#
+# This file is a supplement to the UnicodeData.txt file. It does not define any
+# properties, but rather provides additional information about the casing of
+# Unicode characters, for situations when casing incurs a change in string length
+# or is dependent on context or locale. For compatibility, the UnicodeData.txt
+# file only contains simple case mappings for characters where they are one-to-one
+# and independent of context and language. The data in this file, combined with
+# the simple case mappings in UnicodeData.txt, defines the full case mappings
+# Lowercase_Mapping (lc), Titlecase_Mapping (tc), and Uppercase_Mapping (uc).
+#
+# Note that the preferred mechanism for defining tailored casing operations is
+# the Unicode Common Locale Data Repository (CLDR). For more information, see the
+# discussion of case mappings and case algorithms in the Unicode Standard.
+#
+# All code points not listed in this file that do not have a simple case mappings
+# in UnicodeData.txt map to themselves.
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <code>; <lower>; <title>; <upper>; (<condition_list>;)? # <comment>
+#
+# <code>, <lower>, <title>, and <upper> provide the respective full case mappings
+# of <code>, expressed as character values in hex. If there is more than one character,
+# they are separated by spaces. Other than as used to separate elements, spaces are
+# to be ignored.
+#
+# The <condition_list> is optional. Where present, it consists of one or more language IDs
+# or casing contexts, separated by spaces. In these conditions:
+# - A condition list overrides the normal behavior if all of the listed conditions are true.
+# - The casing context is always the context of the characters in the original string,
+# NOT in the resulting string.
+# - Case distinctions in the condition list are not significant.
+# - Conditions preceded by "Not_" represent the negation of the condition.
+# The condition list is not represented in the UCD as a formal property.
+#
+# A language ID is defined by BCP 47, with '-' and '_' treated equivalently.
+#
+# A casing context for a character is defined by Section 3.13 Default Case Algorithms
+# of The Unicode Standard.
+#
+# Parsers of this file must be prepared to deal with future additions to this format:
+# * Additional contexts
+# * Additional fields
+# ================================================================================
+
+# ================================================================================
+# Unconditional mappings
+# ================================================================================
+
+# The German es-zed is special--the normal mapping is to SS.
+# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
+
+00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
+
+# Preserve canonical equivalence for I with dot. Turkic is handled below.
+
+0130; 0069 0307; 0130; 0130; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+
+# Ligatures
+
+FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
+FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
+FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
+FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
+FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
+FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
+FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
+
+0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
+FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
+
+# No corresponding uppercase precomposed character
+
+0149; 0149; 02BC 004E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
+1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+
+# IMPORTANT-when iota-subscript (0345) is uppercased or titlecased,
+# the result will be incorrect unless the iota-subscript is moved to the end
+# of any sequence of combining marks. Otherwise, the accents will go on the capital iota.
+# This process can be achieved by first transforming the text to NFC before casing.
+# E.g. <alpha><iota_subscript><acute> is uppercased to <ALPHA><acute><IOTA>
+
+# The following cases are already in the UnicodeData.txt file, so are only commented here.
+
+# 0345; 0345; 0399; 0399; # COMBINING GREEK YPOGEGRAMMENI
+
+# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
+# have special uppercases.
+# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
+
+1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+
+# Some characters with YPOGEGRAMMENI also have no corresponding titlecases
+
+1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+
+1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+
+# ================================================================================
+# Conditional Mappings
+# The remainder of this file provides conditional casing data used to produce
+# full case mappings.
+# ================================================================================
+# Language-Insensitive Mappings
+# These are characters whose full case mappings do not depend on language, but do
+# depend on context (which characters come before or after). For more information
+# see the header of this file and the Unicode Standard.
+# ================================================================================
+
+# Special case for final form of sigma
+
+03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA
+
+# Note: the following cases for non-final are already in the UnicodeData.txt file.
+
+# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
+# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
+
+# Note: the following cases are not included, since they would case-fold in lowercasing
+
+# 03C3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA
+
+# ================================================================================
+# Language-Sensitive Mappings
+# These are characters whose full case mappings depend on language and perhaps also
+# context (which characters come before or after). For more information
+# see the header of this file and the Unicode Standard.
+# ================================================================================
+
+# Lithuanian
+
+# Lithuanian retains the dot in a lowercase i when followed by accents.
+
+# Remove DOT ABOVE after "i" with upper or titlecase
+
+0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE
+
+# Introduce an explicit dot above when lowercasing capital I's and J's
+# whenever there are more accents above.
+# (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek)
+
+0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I
+004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J
+012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK
+00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE
+00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE
+0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE
+
+# ================================================================================
+
+# Turkish and Azeri
+
+# I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
+# The following rules handle those cases.
+
+0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0130; 0069; 0130; 0130; az; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+
+# When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
+# This matches the behavior of the canonically equivalent I-dot_above
+
+0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
+0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
+
+# When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
+
+0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I
+0049; 0131; 0049; 0049; az Not_Before_Dot; # LATIN CAPITAL LETTER I
+
+# When uppercasing, i turns into a dotted capital I
+
+0069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I
+0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I
+
+# Note: the following case is already in the UnicodeData.txt file.
+
+# 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
+
+# EOF
+
diff --git a/macros/generic/unicode-data/UnicodeData.txt b/macros/generic/unicode-data/UnicodeData.txt
new file mode 100644
index 0000000000..e65aec52f7
--- /dev/null
+++ b/macros/generic/unicode-data/UnicodeData.txt
@@ -0,0 +1,32841 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
+000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
+001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
+001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
+001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Lo;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;
+0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
+0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
+0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
+0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
+0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
+0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
+023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;
+023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
+023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
+023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
+023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;
+023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E
+0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F
+0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;
+0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
+0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;
+0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;
+0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;
+0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;
+0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246
+0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;
+0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248
+024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;
+024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A
+024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;
+024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C
+024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;
+024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;A7AB;;A7AB
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;A7AE;;A7AE
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;A7AD;;A7AD
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;A7C5;;A7C5
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;A7B1;;A7B1
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;A7B2;;A7B2
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;A7B0;;A7B0
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;
+02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;
+02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;
+02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;
+02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;
+02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
+0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;
+0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;
+0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
+035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
+035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
+035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
+035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;
+0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;
+0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;
+0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;
+0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;
+0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;
+0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;
+036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;
+036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;
+036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;
+036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
+036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
+036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
+0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371;
+0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370
+0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373;
+0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372
+0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;;
+0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377;
+0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD
+037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE
+037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;;
+037F;GREEK CAPITAL LETTER YOT;Lu;0;L;;;;;N;;;;03F3;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7;
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF
+03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9;
+03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;037F;;037F
+03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;
+03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395
+03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;
+03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;
+03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7
+03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
+03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
+03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
+03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
+03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;
+03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;
+03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
+048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;
+04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;
+04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
+04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
+04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
+04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;
+04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA
+04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;
+04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC
+04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;
+04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE
+0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
+0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
+0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
+0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502
+0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;
+0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504
+0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;
+0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506
+0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;
+0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508
+050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;
+050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A
+050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;
+050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
+050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
+050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
+0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;
+0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510
+0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;
+0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512
+0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515;
+0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514
+0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517;
+0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516
+0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519;
+0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518
+051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B;
+051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A
+051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D;
+051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C
+051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F;
+051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E
+0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521;
+0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520
+0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523;
+0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522
+0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525;
+0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524
+0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527;
+0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526
+0528;CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK;Lu;0;L;;;;;N;;;;0529;
+0529;CYRILLIC SMALL LETTER EN WITH LEFT HOOK;Ll;0;L;;;;;N;;;0528;;0528
+052A;CYRILLIC CAPITAL LETTER DZZHE;Lu;0;L;;;;;N;;;;052B;
+052B;CYRILLIC SMALL LETTER DZZHE;Ll;0;L;;;;;N;;;052A;;052A
+052C;CYRILLIC CAPITAL LETTER DCHE;Lu;0;L;;;;;N;;;;052D;
+052D;CYRILLIC SMALL LETTER DCHE;Ll;0;L;;;;;N;;;052C;;052C
+052E;CYRILLIC CAPITAL LETTER EL WITH DESCENDER;Lu;0;L;;;;;N;;;;052F;
+052F;CYRILLIC SMALL LETTER EL WITH DESCENDER;Ll;0;L;;;;;N;;;052E;;052E
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0560;ARMENIAN SMALL LETTER TURNED AYB;Ll;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0588;ARMENIAN SMALL LETTER YI WITH STROKE;Ll;0;L;;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;;
+058E;LEFT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;;
+058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;;
+05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
+05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
+05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05EF;HEBREW YOD TRIANGLE;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;;
+0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;
+0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;
+0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;
+0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;;
+0605;ARABIC NUMBER MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;
+0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;
+0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;
+0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
+060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
+060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
+0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
+0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
+0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
+0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
+0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;;
+0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;;
+0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;;
+0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;;
+061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;;
+061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
+0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
+0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
+065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
+065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
+065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
+066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;AL;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;
+072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;
+072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
+074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
+074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
+0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
+0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
+075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
+075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
+0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
+076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;;
+076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
+0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
+0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
+077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;;
+077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
+07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
+07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
+07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
+07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
+07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
+07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
+07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
+07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
+07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
+07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
+07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;
+07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;
+07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;
+07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;
+07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;
+07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;
+07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;
+07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;
+07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;
+07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;
+07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;
+07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;
+07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;
+07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;
+07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;
+07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;
+07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;
+07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;
+07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;
+07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;
+07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;
+07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;
+07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;
+07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;
+07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;
+07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;
+07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;
+07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;
+07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;
+07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;
+07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;
+07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;
+07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
+07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;
+07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;
+07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
+07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
+07FD;NKO DANTAYALAN;Mn;220;NSM;;;;;N;;;;;
+07FE;NKO DOROME SIGN;Sc;0;R;;;;;N;;;;;
+07FF;NKO TAMAN SIGN;Sc;0;R;;;;;N;;;;;
+0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;;
+0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;;
+0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;;
+0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;;
+0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;;
+0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;;
+0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;;
+0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;;
+0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;;
+0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;;
+080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;;
+080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;;
+080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;;
+080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;;
+080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;;
+0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;;
+0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;;
+0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;;
+0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;;
+0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;;
+0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;;
+0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;;
+0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;;
+0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;;
+0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;;
+081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;;
+081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;;
+081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;;
+081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;;
+081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;;
+081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;;
+0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;;
+0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;;
+0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;;
+0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;;
+0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;;
+0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;;
+0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;;
+0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;;
+0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;;
+0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;;
+082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;;
+082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;;
+082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;;
+0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;;
+0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;;
+0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;;
+0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;;
+0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;;
+0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;;
+0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;;
+0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;;
+0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;;
+0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;;
+083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;;
+083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;;
+083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;;
+083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;;
+083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;;
+0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;;
+0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;;
+0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;;
+0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;;
+0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;;
+0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;;
+0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;;
+0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;;
+0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;;
+0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;;
+084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;;
+084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;;
+084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;;
+084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;;
+084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;;
+084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;;
+0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;;
+0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;;
+0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;;
+0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;;
+0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;;
+0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;;
+0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;;
+0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;;
+0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;;
+085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
+085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;;
+085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;;
+0860;SYRIAC LETTER MALAYALAM NGA;Lo;0;AL;;;;;N;;;;;
+0861;SYRIAC LETTER MALAYALAM JA;Lo;0;AL;;;;;N;;;;;
+0862;SYRIAC LETTER MALAYALAM NYA;Lo;0;AL;;;;;N;;;;;
+0863;SYRIAC LETTER MALAYALAM TTA;Lo;0;AL;;;;;N;;;;;
+0864;SYRIAC LETTER MALAYALAM NNA;Lo;0;AL;;;;;N;;;;;
+0865;SYRIAC LETTER MALAYALAM NNNA;Lo;0;AL;;;;;N;;;;;
+0866;SYRIAC LETTER MALAYALAM BHA;Lo;0;AL;;;;;N;;;;;
+0867;SYRIAC LETTER MALAYALAM RA;Lo;0;AL;;;;;N;;;;;
+0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;;
+0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;;
+086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;;
+08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;;
+08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;;
+08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;;
+08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;;
+08AD;ARABIC LETTER LOW ALEF;Lo;0;AL;;;;;N;;;;;
+08AE;ARABIC LETTER DAL WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+08AF;ARABIC LETTER SAD WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+08B0;ARABIC LETTER GAF WITH INVERTED STROKE;Lo;0;AL;;;;;N;;;;;
+08B1;ARABIC LETTER STRAIGHT WAW;Lo;0;AL;;;;;N;;;;;
+08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;
+08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
+08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
+08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;;
+08B9;ARABIC LETTER REH WITH SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;;
+08BA;ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;;
+08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;
+08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;
+08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;
+08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
+08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
+08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
+08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;;
+08D7;ARABIC SMALL HIGH QAF;Mn;230;NSM;;;;;N;;;;;
+08D8;ARABIC SMALL HIGH NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;;
+08D9;ARABIC SMALL LOW NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;;
+08DA;ARABIC SMALL HIGH WORD ATH-THALATHA;Mn;230;NSM;;;;;N;;;;;
+08DB;ARABIC SMALL HIGH WORD AS-SAJDA;Mn;230;NSM;;;;;N;;;;;
+08DC;ARABIC SMALL HIGH WORD AN-NISF;Mn;230;NSM;;;;;N;;;;;
+08DD;ARABIC SMALL HIGH WORD SAKTA;Mn;230;NSM;;;;;N;;;;;
+08DE;ARABIC SMALL HIGH WORD QIF;Mn;230;NSM;;;;;N;;;;;
+08DF;ARABIC SMALL HIGH WORD WAQFA;Mn;230;NSM;;;;;N;;;;;
+08E0;ARABIC SMALL HIGH FOOTNOTE MARKER;Mn;230;NSM;;;;;N;;;;;
+08E1;ARABIC SMALL HIGH SIGN SAFHA;Mn;230;NSM;;;;;N;;;;;
+08E2;ARABIC DISPUTED END OF AYAH;Cf;0;AN;;;;;N;;;;;
+08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;;
+08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;;
+08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;;
+08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;;
+08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;;
+08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;;
+08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;;
+08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;;
+08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;;
+08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;;
+08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;;
+08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;;
+08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;;
+08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FF;ARABIC MARK SIDEWAYS NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
+094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;;
+0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;;
+0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;;
+0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;;
+0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;;
+0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;;
+0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;;
+0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;;
+0978;DEVANAGARI LETTER MARWARI DDA;Lo;0;L;;;;;N;;;;;
+0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;;
+097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;;
+097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
+097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
+0980;BENGALI ANJI;Lo;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;;
+09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
+09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+09FE;BENGALI SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
+0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
+0A76;GURMUKHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0AFA;GUJARATI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;
+0AFB;GUJARATI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;;
+0AFC;GUJARATI SIGN MADDAH;Mn;0;NSM;;;;;N;;;;;
+0AFD;GUJARATI SIGN THREE-DOT NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0AFE;GUJARATI SIGN CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0AFF;GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
+0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;
+0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;;
+0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;;
+0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;;
+0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;;
+0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;;
+0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;;
+0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;;
+0C00;TELUGU SIGN COMBINING CANDRABINDU ABOVE;Mn;0;NSM;;;;;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C04;TELUGU SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C34;TELUGU LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
+0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
+0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C77;TELUGU SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;;
+0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
+0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
+0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
+0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
+0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
+0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
+0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;
+0C80;KANNADA SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;;
+0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C84;KANNADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;;
+0D3B;MALAYALAM SIGN VERTICAL BAR VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D3C;MALAYALAM SIGN CIRCULAR VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;;
+0D4F;MALAYALAM SIGN PARA;So;0;L;;;;;N;;;;;
+0D54;MALAYALAM LETTER CHILLU M;Lo;0;L;;;;;N;;;;;
+0D55;MALAYALAM LETTER CHILLU Y;Lo;0;L;;;;;N;;;;;
+0D56;MALAYALAM LETTER CHILLU LLL;Lo;0;L;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D58;MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;
+0D59;MALAYALAM FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;;
+0D5A;MALAYALAM FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;;
+0D5B;MALAYALAM FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;;
+0D5C;MALAYALAM FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;;
+0D5D;MALAYALAM FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;;
+0D5E;MALAYALAM FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;;
+0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;;
+0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+0D76;MALAYALAM FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;
+0D77;MALAYALAM FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+0D78;MALAYALAM FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
+0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;
+0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;
+0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;
+0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;;
+0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
+0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
+0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DE6;SINHALA LITH DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0DE7;SINHALA LITH DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0DE8;SINHALA LITH DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0DE9;SINHALA LITH DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0DEA;SINHALA LITH DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0DEB;SINHALA LITH DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0DEC;SINHALA LITH DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0DED;SINHALA LITH DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0DEE;SINHALA LITH DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0DEF;SINHALA LITH DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E86;LAO LETTER PALI GHA;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E89;LAO LETTER PALI CHA;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8C;LAO LETTER PALI JHA;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E8E;LAO LETTER PALI NYA;Lo;0;L;;;;;N;;;;;
+0E8F;LAO LETTER PALI TTA;Lo;0;L;;;;;N;;;;;
+0E90;LAO LETTER PALI TTHA;Lo;0;L;;;;;N;;;;;
+0E91;LAO LETTER PALI DDA;Lo;0;L;;;;;N;;;;;
+0E92;LAO LETTER PALI DDHA;Lo;0;L;;;;;N;;;;;
+0E93;LAO LETTER PALI NNA;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E98;LAO LETTER PALI DHA;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA0;LAO LETTER PALI BHA;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EA8;LAO LETTER SANSKRIT SHA;Lo;0;L;;;;;N;;;;;
+0EA9;LAO LETTER SANSKRIT SSA;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAC;LAO LETTER PALI LLA;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBA;LAO SIGN PALI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;;
+0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;;
+0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;;
+0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;;
+0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;;
+0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;;
+0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;;
+0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;;
+0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;;
+0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;;
+0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;;
+0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;;
+0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;;
+0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;;
+0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;;
+0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;;
+0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;;
+0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;;
+0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;;
+0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;;
+1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;;
+1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;;
+103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;
+103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
+103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
+103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;;
+103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;;
+105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;;
+105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;;
+105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;;
+105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;;
+105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;;
+1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;;
+1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;
+1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;
+1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;
+1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;;
+1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;;
+1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;
+1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;
+1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;
+106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;
+106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;
+106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;
+106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;
+106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;;
+106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;;
+1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;;
+1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;;
+1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;;
+1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;;
+1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;;
+1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;;
+1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;;
+1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;;
+1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;;
+1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;;
+107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;;
+107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;;
+107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;;
+107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;;
+107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;;
+107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;;
+1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;;
+1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;;
+1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
+1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;
+1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;
+1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;;
+1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;;
+1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;
+1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;
+1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;
+108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;
+108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;
+108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;
+108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;;
+108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;;
+108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;
+1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;;
+109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;;
+109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;;
+109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;;
+109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;;
+109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25;
+10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;
+10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;
+10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;1C90;;10D0
+10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;1C91;;10D1
+10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;1C92;;10D2
+10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;1C93;;10D3
+10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;1C94;;10D4
+10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;1C95;;10D5
+10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;1C96;;10D6
+10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;1C97;;10D7
+10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;1C98;;10D8
+10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;1C99;;10D9
+10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;1C9A;;10DA
+10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;1C9B;;10DB
+10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;1C9C;;10DC
+10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;1C9D;;10DD
+10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;1C9E;;10DE
+10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;1C9F;;10DF
+10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;1CA0;;10E0
+10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;1CA1;;10E1
+10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;1CA2;;10E2
+10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;1CA3;;10E3
+10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;1CA4;;10E4
+10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;1CA5;;10E5
+10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;1CA6;;10E6
+10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;1CA7;;10E7
+10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;1CA8;;10E8
+10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;1CA9;;10E9
+10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;1CAA;;10EA
+10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;1CAB;;10EB
+10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;1CAC;;10EC
+10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;1CAD;;10ED
+10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;1CAE;;10EE
+10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;1CAF;;10EF
+10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;1CB0;;10F0
+10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;1CB1;;10F1
+10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;1CB2;;10F2
+10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;1CB3;;10F3
+10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;1CB4;;10F4
+10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;1CB5;;10F5
+10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;1CB6;;10F6
+10F7;GEORGIAN LETTER YN;Ll;0;L;;;;;N;;;1CB7;;10F7
+10F8;GEORGIAN LETTER ELIFI;Ll;0;L;;;;;N;;;1CB8;;10F8
+10F9;GEORGIAN LETTER TURNED GAN;Ll;0;L;;;;;N;;;1CB9;;10F9
+10FA;GEORGIAN LETTER AIN;Ll;0;L;;;;;N;;;1CBA;;10FA
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
+10FD;GEORGIAN LETTER AEN;Ll;0;L;;;;;N;;;1CBD;;10FD
+10FE;GEORGIAN LETTER HARD SIGN;Ll;0;L;;;;;N;;;1CBE;;10FE
+10FF;GEORGIAN LETTER LABIAL SIGN;Ll;0;L;;;;;N;;;1CBF;;10FF
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;;
+115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;;
+115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;;
+115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;;
+11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;;
+11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;;
+11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;;
+11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;;
+11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;;
+11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;;
+11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;
+135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;
+135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
+1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
+1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
+1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
+1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
+1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
+1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
+1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
+1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
+1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
+138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
+138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
+138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
+138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
+138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
+138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
+1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
+1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
+1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
+1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
+1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
+1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
+1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
+1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
+1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
+1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
+13A0;CHEROKEE LETTER A;Lu;0;L;;;;;N;;;;AB70;
+13A1;CHEROKEE LETTER E;Lu;0;L;;;;;N;;;;AB71;
+13A2;CHEROKEE LETTER I;Lu;0;L;;;;;N;;;;AB72;
+13A3;CHEROKEE LETTER O;Lu;0;L;;;;;N;;;;AB73;
+13A4;CHEROKEE LETTER U;Lu;0;L;;;;;N;;;;AB74;
+13A5;CHEROKEE LETTER V;Lu;0;L;;;;;N;;;;AB75;
+13A6;CHEROKEE LETTER GA;Lu;0;L;;;;;N;;;;AB76;
+13A7;CHEROKEE LETTER KA;Lu;0;L;;;;;N;;;;AB77;
+13A8;CHEROKEE LETTER GE;Lu;0;L;;;;;N;;;;AB78;
+13A9;CHEROKEE LETTER GI;Lu;0;L;;;;;N;;;;AB79;
+13AA;CHEROKEE LETTER GO;Lu;0;L;;;;;N;;;;AB7A;
+13AB;CHEROKEE LETTER GU;Lu;0;L;;;;;N;;;;AB7B;
+13AC;CHEROKEE LETTER GV;Lu;0;L;;;;;N;;;;AB7C;
+13AD;CHEROKEE LETTER HA;Lu;0;L;;;;;N;;;;AB7D;
+13AE;CHEROKEE LETTER HE;Lu;0;L;;;;;N;;;;AB7E;
+13AF;CHEROKEE LETTER HI;Lu;0;L;;;;;N;;;;AB7F;
+13B0;CHEROKEE LETTER HO;Lu;0;L;;;;;N;;;;AB80;
+13B1;CHEROKEE LETTER HU;Lu;0;L;;;;;N;;;;AB81;
+13B2;CHEROKEE LETTER HV;Lu;0;L;;;;;N;;;;AB82;
+13B3;CHEROKEE LETTER LA;Lu;0;L;;;;;N;;;;AB83;
+13B4;CHEROKEE LETTER LE;Lu;0;L;;;;;N;;;;AB84;
+13B5;CHEROKEE LETTER LI;Lu;0;L;;;;;N;;;;AB85;
+13B6;CHEROKEE LETTER LO;Lu;0;L;;;;;N;;;;AB86;
+13B7;CHEROKEE LETTER LU;Lu;0;L;;;;;N;;;;AB87;
+13B8;CHEROKEE LETTER LV;Lu;0;L;;;;;N;;;;AB88;
+13B9;CHEROKEE LETTER MA;Lu;0;L;;;;;N;;;;AB89;
+13BA;CHEROKEE LETTER ME;Lu;0;L;;;;;N;;;;AB8A;
+13BB;CHEROKEE LETTER MI;Lu;0;L;;;;;N;;;;AB8B;
+13BC;CHEROKEE LETTER MO;Lu;0;L;;;;;N;;;;AB8C;
+13BD;CHEROKEE LETTER MU;Lu;0;L;;;;;N;;;;AB8D;
+13BE;CHEROKEE LETTER NA;Lu;0;L;;;;;N;;;;AB8E;
+13BF;CHEROKEE LETTER HNA;Lu;0;L;;;;;N;;;;AB8F;
+13C0;CHEROKEE LETTER NAH;Lu;0;L;;;;;N;;;;AB90;
+13C1;CHEROKEE LETTER NE;Lu;0;L;;;;;N;;;;AB91;
+13C2;CHEROKEE LETTER NI;Lu;0;L;;;;;N;;;;AB92;
+13C3;CHEROKEE LETTER NO;Lu;0;L;;;;;N;;;;AB93;
+13C4;CHEROKEE LETTER NU;Lu;0;L;;;;;N;;;;AB94;
+13C5;CHEROKEE LETTER NV;Lu;0;L;;;;;N;;;;AB95;
+13C6;CHEROKEE LETTER QUA;Lu;0;L;;;;;N;;;;AB96;
+13C7;CHEROKEE LETTER QUE;Lu;0;L;;;;;N;;;;AB97;
+13C8;CHEROKEE LETTER QUI;Lu;0;L;;;;;N;;;;AB98;
+13C9;CHEROKEE LETTER QUO;Lu;0;L;;;;;N;;;;AB99;
+13CA;CHEROKEE LETTER QUU;Lu;0;L;;;;;N;;;;AB9A;
+13CB;CHEROKEE LETTER QUV;Lu;0;L;;;;;N;;;;AB9B;
+13CC;CHEROKEE LETTER SA;Lu;0;L;;;;;N;;;;AB9C;
+13CD;CHEROKEE LETTER S;Lu;0;L;;;;;N;;;;AB9D;
+13CE;CHEROKEE LETTER SE;Lu;0;L;;;;;N;;;;AB9E;
+13CF;CHEROKEE LETTER SI;Lu;0;L;;;;;N;;;;AB9F;
+13D0;CHEROKEE LETTER SO;Lu;0;L;;;;;N;;;;ABA0;
+13D1;CHEROKEE LETTER SU;Lu;0;L;;;;;N;;;;ABA1;
+13D2;CHEROKEE LETTER SV;Lu;0;L;;;;;N;;;;ABA2;
+13D3;CHEROKEE LETTER DA;Lu;0;L;;;;;N;;;;ABA3;
+13D4;CHEROKEE LETTER TA;Lu;0;L;;;;;N;;;;ABA4;
+13D5;CHEROKEE LETTER DE;Lu;0;L;;;;;N;;;;ABA5;
+13D6;CHEROKEE LETTER TE;Lu;0;L;;;;;N;;;;ABA6;
+13D7;CHEROKEE LETTER DI;Lu;0;L;;;;;N;;;;ABA7;
+13D8;CHEROKEE LETTER TI;Lu;0;L;;;;;N;;;;ABA8;
+13D9;CHEROKEE LETTER DO;Lu;0;L;;;;;N;;;;ABA9;
+13DA;CHEROKEE LETTER DU;Lu;0;L;;;;;N;;;;ABAA;
+13DB;CHEROKEE LETTER DV;Lu;0;L;;;;;N;;;;ABAB;
+13DC;CHEROKEE LETTER DLA;Lu;0;L;;;;;N;;;;ABAC;
+13DD;CHEROKEE LETTER TLA;Lu;0;L;;;;;N;;;;ABAD;
+13DE;CHEROKEE LETTER TLE;Lu;0;L;;;;;N;;;;ABAE;
+13DF;CHEROKEE LETTER TLI;Lu;0;L;;;;;N;;;;ABAF;
+13E0;CHEROKEE LETTER TLO;Lu;0;L;;;;;N;;;;ABB0;
+13E1;CHEROKEE LETTER TLU;Lu;0;L;;;;;N;;;;ABB1;
+13E2;CHEROKEE LETTER TLV;Lu;0;L;;;;;N;;;;ABB2;
+13E3;CHEROKEE LETTER TSA;Lu;0;L;;;;;N;;;;ABB3;
+13E4;CHEROKEE LETTER TSE;Lu;0;L;;;;;N;;;;ABB4;
+13E5;CHEROKEE LETTER TSI;Lu;0;L;;;;;N;;;;ABB5;
+13E6;CHEROKEE LETTER TSO;Lu;0;L;;;;;N;;;;ABB6;
+13E7;CHEROKEE LETTER TSU;Lu;0;L;;;;;N;;;;ABB7;
+13E8;CHEROKEE LETTER TSV;Lu;0;L;;;;;N;;;;ABB8;
+13E9;CHEROKEE LETTER WA;Lu;0;L;;;;;N;;;;ABB9;
+13EA;CHEROKEE LETTER WE;Lu;0;L;;;;;N;;;;ABBA;
+13EB;CHEROKEE LETTER WI;Lu;0;L;;;;;N;;;;ABBB;
+13EC;CHEROKEE LETTER WO;Lu;0;L;;;;;N;;;;ABBC;
+13ED;CHEROKEE LETTER WU;Lu;0;L;;;;;N;;;;ABBD;
+13EE;CHEROKEE LETTER WV;Lu;0;L;;;;;N;;;;ABBE;
+13EF;CHEROKEE LETTER YA;Lu;0;L;;;;;N;;;;ABBF;
+13F0;CHEROKEE LETTER YE;Lu;0;L;;;;;N;;;;13F8;
+13F1;CHEROKEE LETTER YI;Lu;0;L;;;;;N;;;;13F9;
+13F2;CHEROKEE LETTER YO;Lu;0;L;;;;;N;;;;13FA;
+13F3;CHEROKEE LETTER YU;Lu;0;L;;;;;N;;;;13FB;
+13F4;CHEROKEE LETTER YV;Lu;0;L;;;;;N;;;;13FC;
+13F5;CHEROKEE LETTER MV;Lu;0;L;;;;;N;;;;13FD;
+13F8;CHEROKEE SMALL LETTER YE;Ll;0;L;;;;;N;;;13F0;;13F0
+13F9;CHEROKEE SMALL LETTER YI;Ll;0;L;;;;;N;;;13F1;;13F1
+13FA;CHEROKEE SMALL LETTER YO;Ll;0;L;;;;;N;;;13F2;;13F2
+13FB;CHEROKEE SMALL LETTER YU;Ll;0;L;;;;;N;;;13F3;;13F3
+13FC;CHEROKEE SMALL LETTER YV;Ll;0;L;;;;;N;;;13F4;;13F4
+13FD;CHEROKEE SMALL LETTER MV;Ll;0;L;;;;;N;;;13F5;;13F5
+1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;So;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;;
+1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;;
+1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;;
+167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;;
+167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;;
+167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;;
+167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;;
+167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;;
+167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;;
+16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;;
+16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;;
+16F1;RUNIC LETTER K;Lo;0;L;;;;;N;;;;;
+16F2;RUNIC LETTER SH;Lo;0;L;;;;;N;;;;;
+16F3;RUNIC LETTER OO;Lo;0;L;;;;;N;;;;;
+16F4;RUNIC LETTER FRANKS CASKET OS;Lo;0;L;;;;;N;;;;;
+16F5;RUNIC LETTER FRANKS CASKET IS;Lo;0;L;;;;;N;;;;;
+16F6;RUNIC LETTER FRANKS CASKET EH;Lo;0;L;;;;;N;;;;;
+16F7;RUNIC LETTER FRANKS CASKET AC;Lo;0;L;;;;;N;;;;;
+16F8;RUNIC LETTER FRANKS CASKET AESC;Lo;0;L;;;;;N;;;;;
+1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;
+1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;
+1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;
+1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;
+1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;
+1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;
+1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;
+1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;
+1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;
+1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;
+170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
+170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
+170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
+170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
+1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
+1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;
+1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
+1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
+1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
+1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;
+1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;
+1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;
+1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;
+1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;
+1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;
+172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;
+172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;
+172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;
+172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;
+172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;
+172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;
+1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;
+1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
+1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
+1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;
+1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;
+1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;
+1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;
+1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;
+1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;
+1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;
+1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;
+1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;
+174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;
+174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;
+174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;
+174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;
+174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;
+174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;
+1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;
+1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;
+1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;
+1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;
+1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;
+1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;
+1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;
+1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;
+1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;
+1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;
+176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;
+176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;
+176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;
+176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;
+176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;
+1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;
+1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;
+17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;
+17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;
+17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;
+17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;
+17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;
+17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;
+17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;
+17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;
+17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;
+17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1878;MONGOLIAN LETTER CHA WITH TWO DOTS;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Mn;0;NSM;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Mn;0;NSM;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;;
+18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;;
+18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;;
+18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;;
+18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;;
+18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;;
+18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;;
+18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;;
+18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;;
+18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;;
+18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;;
+18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;;
+18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;;
+18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;;
+18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;;
+18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;;
+18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;;
+18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;;
+18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;;
+18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;;
+18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;;
+18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;;
+18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;;
+18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;;
+18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;;
+18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;;
+18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;;
+18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;;
+18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;;
+18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;;
+18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;;
+18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;;
+18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;;
+18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;;
+18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;;
+18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;;
+18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;;
+18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;;
+18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;;
+18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;;
+18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;;
+18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;;
+18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;;
+18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;;
+18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;;
+18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;;
+18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;;
+18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;;
+18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;;
+18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;;
+18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;;
+18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;;
+18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;;
+18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;;
+18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;;
+18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;;
+18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;;
+18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;;
+18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;;
+18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;;
+18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;;
+18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;;
+18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;;
+18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;;
+18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;;
+18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;;
+18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;;
+18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;;
+18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;;
+18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;;
+18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;;
+1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
+1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
+1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;
+1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;
+1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;
+1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;
+1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;
+1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;
+1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;
+190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;
+190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;
+190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;
+190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;
+190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;
+190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;
+1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;
+1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;
+1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;
+1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;
+1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;
+1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;
+1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;
+1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;
+1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;
+1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;
+191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;
+191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;
+191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;
+191D;LIMBU LETTER GYAN;Lo;0;L;;;;;N;;;;;
+191E;LIMBU LETTER TRA;Lo;0;L;;;;;N;;;;;
+1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
+192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;
+1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
+1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
+1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
+1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
+1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
+1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
+1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
+1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
+1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;
+193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;
+193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;
+1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;
+1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;
+1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;
+1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;
+1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;
+1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;
+1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;
+1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;
+1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;
+1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;
+1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;
+195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;
+195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;
+195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;
+195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;
+195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;
+195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;
+1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;
+1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;
+1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;
+1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;
+1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;
+1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;
+1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;
+1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;
+196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;
+196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;
+196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;
+196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;
+1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;
+1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;
+1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
+1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
+1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
+1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
+1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
+1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
+1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
+1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
+1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
+1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
+1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
+198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
+1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
+1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
+1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
+199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
+199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
+199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
+199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
+19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
+19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
+19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
+19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
+19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
+19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
+19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
+19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
+19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;;
+19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Lo;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Lo;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Lo;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Lo;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Lo;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Lo;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Lo;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Lo;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Lo;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Lo;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Lo;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Lo;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Lo;0;L;;;;;N;;;;;
+19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
+19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
+19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Lo;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Lo;0;L;;;;;N;;;;;
+19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;;
+19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;;
+19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;;
+19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
+19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
+19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
+19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;
+19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;
+19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;
+19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;
+19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;
+19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;
+19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;
+19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;
+19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;
+19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;
+19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;
+19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;
+19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;
+19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;
+19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;
+19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;
+19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;
+19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;
+19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;
+19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;
+19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;
+19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;
+19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;
+19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;
+19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;
+19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;
+19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
+19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
+19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
+1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
+1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
+1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
+1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
+1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
+1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
+1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1A1B;BUGINESE VOWEL SIGN AE;Mn;0;NSM;;;;;N;;;;;
+1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
+1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
+1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;;
+1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;;
+1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;;
+1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;;
+1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;;
+1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;;
+1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;;
+1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;;
+1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;;
+1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;;
+1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;;
+1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;;
+1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;;
+1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;;
+1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;;
+1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;;
+1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;;
+1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;;
+1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;;
+1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;;
+1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;;
+1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;;
+1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;;
+1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;;
+1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;;
+1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;;
+1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;;
+1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;;
+1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;;
+1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;;
+1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;;
+1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
+1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
+1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;;
+1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;;
+1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;;
+1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;;
+1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;;
+1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;;
+1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;;
+1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;;
+1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;;
+1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;;
+1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
+1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;
+1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;;
+1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;;
+1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;;
+1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;;
+1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;;
+1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;;
+1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;;
+1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;;
+1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;;
+1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;;
+1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;;
+1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;;
+1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;;
+1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;;
+1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;;
+1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;;
+1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;;
+1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;;
+1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;;
+1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;;
+1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;;
+1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;;
+1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;;
+1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;;
+1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;;
+1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;;
+1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;;
+1AB0;COMBINING DOUBLED CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;;;;;
+1AB1;COMBINING DIAERESIS-RING;Mn;230;NSM;;;;;N;;;;;
+1AB2;COMBINING INFINITY;Mn;230;NSM;;;;;N;;;;;
+1AB3;COMBINING DOWNWARDS ARROW;Mn;230;NSM;;;;;N;;;;;
+1AB4;COMBINING TRIPLE DOT;Mn;230;NSM;;;;;N;;;;;
+1AB5;COMBINING X-X BELOW;Mn;220;NSM;;;;;N;;;;;
+1AB6;COMBINING WIGGLY LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+1AB7;COMBINING OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;;
+1AB8;COMBINING DOUBLE OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;;
+1AB9;COMBINING LIGHT CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1ABA;COMBINING STRONG CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1ABB;COMBINING PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;;
+1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;;
+1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;;
+1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
+1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
+1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
+1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
+1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;;
+1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;;
+1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;;
+1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;;
+1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;;
+1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;;
+1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;;
+1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;;
+1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;;
+1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;;
+1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;;
+1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;;
+1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;;
+1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;;
+1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;;
+1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;;
+1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;;
+1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;;
+1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;;
+1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;;
+1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;;
+1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;;
+1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;;
+1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;;
+1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;;
+1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;;
+1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;;
+1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;;
+1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;;
+1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;;
+1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;;
+1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;;
+1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;;
+1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;;
+1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;;
+1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;;
+1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;;
+1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;;
+1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;
+1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;;
+1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;;
+1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;;
+1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;;
+1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;;
+1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;;
+1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;
+1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;
+1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;
+1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;
+1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
+1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
+1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;;
+1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;;
+1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;;
+1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;;
+1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;;
+1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;;
+1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;;
+1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;
+1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;
+1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;
+1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;
+1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;
+1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;
+1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;
+1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;
+1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;
+1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;
+1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;
+1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;
+1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;
+1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;
+1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;
+1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;
+1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;
+1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;
+1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;
+1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;
+1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;
+1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;
+1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
+1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
+1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
+1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
+1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
+1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;;
+1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;;
+1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;;
+1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;;
+1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;;
+1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;;
+1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;;
+1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;;
+1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;;
+1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;;
+1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;;
+1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;
+1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;;
+1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;;
+1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;;
+1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;;
+1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;
+1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;
+1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;
+1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;
+1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
+1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mn;0;NSM;;;;;N;;;;;
+1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mn;0;NSM;;;;;N;;;;;
+1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;
+1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;;
+1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;;
+1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;;
+1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;;
+1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;;
+1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;;
+1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;;
+1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;;
+1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;;
+1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;;
+1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;;
+1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;;
+1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;;
+1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;;
+1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;;
+1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;;
+1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;;
+1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;;
+1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;;
+1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;;
+1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;;
+1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;;
+1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;;
+1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;;
+1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;;
+1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;;
+1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;;
+1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;;
+1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;;
+1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;;
+1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;;
+1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;;
+1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;;
+1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;;
+1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;;
+1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;;
+1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;;
+1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;;
+1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;;
+1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;;
+1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;;
+1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;;
+1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;;
+1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;;
+1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;;
+1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;;
+1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;;
+1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;;
+1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;;
+1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;;
+1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;;
+1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;;
+1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;;
+1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;;
+1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;;
+1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;;
+1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;;
+1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;;
+1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;;
+1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;;
+1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;;
+1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;;
+1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;;
+1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;;
+1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;;
+1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;;
+1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;;
+1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;;
+1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;;
+1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;;
+1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;;
+1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;;
+1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;;
+1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;;
+1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;;
+1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;;
+1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;;
+1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;;
+1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;;
+1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;;
+1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;;
+1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;;
+1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;;
+1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;;
+1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;;
+1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;;
+1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;;
+1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
+1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
+1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
+1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
+1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;;
+1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;;
+1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;
+1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;
+1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;;
+1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;;
+1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;;
+1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;;
+1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;;
+1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;;
+1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;;
+1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;;
+1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;;
+1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;;
+1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;;
+1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;;
+1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;;
+1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;;
+1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;;
+1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;;
+1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;;
+1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;;
+1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;;
+1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;;
+1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;;
+1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;;
+1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;;
+1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;;
+1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;;
+1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;;
+1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;;
+1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;;
+1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;;
+1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;;
+1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;;
+1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;;
+1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;;
+1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;;
+1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;;
+1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;;
+1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;;
+1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
+1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
+1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;;
+1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;;
+1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
+1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
+1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
+1C80;CYRILLIC SMALL LETTER ROUNDED VE;Ll;0;L;;;;;N;;;0412;;0412
+1C81;CYRILLIC SMALL LETTER LONG-LEGGED DE;Ll;0;L;;;;;N;;;0414;;0414
+1C82;CYRILLIC SMALL LETTER NARROW O;Ll;0;L;;;;;N;;;041E;;041E
+1C83;CYRILLIC SMALL LETTER WIDE ES;Ll;0;L;;;;;N;;;0421;;0421
+1C84;CYRILLIC SMALL LETTER TALL TE;Ll;0;L;;;;;N;;;0422;;0422
+1C85;CYRILLIC SMALL LETTER THREE-LEGGED TE;Ll;0;L;;;;;N;;;0422;;0422
+1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462
+1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A
+1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0;
+1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1;
+1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2;
+1C93;GEORGIAN MTAVRULI CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;10D3;
+1C94;GEORGIAN MTAVRULI CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;10D4;
+1C95;GEORGIAN MTAVRULI CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;10D5;
+1C96;GEORGIAN MTAVRULI CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;10D6;
+1C97;GEORGIAN MTAVRULI CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;10D7;
+1C98;GEORGIAN MTAVRULI CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;10D8;
+1C99;GEORGIAN MTAVRULI CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;10D9;
+1C9A;GEORGIAN MTAVRULI CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;10DA;
+1C9B;GEORGIAN MTAVRULI CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;10DB;
+1C9C;GEORGIAN MTAVRULI CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;10DC;
+1C9D;GEORGIAN MTAVRULI CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;10DD;
+1C9E;GEORGIAN MTAVRULI CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;10DE;
+1C9F;GEORGIAN MTAVRULI CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;10DF;
+1CA0;GEORGIAN MTAVRULI CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;10E0;
+1CA1;GEORGIAN MTAVRULI CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;10E1;
+1CA2;GEORGIAN MTAVRULI CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;10E2;
+1CA3;GEORGIAN MTAVRULI CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;10E3;
+1CA4;GEORGIAN MTAVRULI CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;10E4;
+1CA5;GEORGIAN MTAVRULI CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;10E5;
+1CA6;GEORGIAN MTAVRULI CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;10E6;
+1CA7;GEORGIAN MTAVRULI CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;10E7;
+1CA8;GEORGIAN MTAVRULI CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;10E8;
+1CA9;GEORGIAN MTAVRULI CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;10E9;
+1CAA;GEORGIAN MTAVRULI CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;10EA;
+1CAB;GEORGIAN MTAVRULI CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;10EB;
+1CAC;GEORGIAN MTAVRULI CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;10EC;
+1CAD;GEORGIAN MTAVRULI CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;10ED;
+1CAE;GEORGIAN MTAVRULI CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;10EE;
+1CAF;GEORGIAN MTAVRULI CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;10EF;
+1CB0;GEORGIAN MTAVRULI CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;10F0;
+1CB1;GEORGIAN MTAVRULI CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;10F1;
+1CB2;GEORGIAN MTAVRULI CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;10F2;
+1CB3;GEORGIAN MTAVRULI CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;10F3;
+1CB4;GEORGIAN MTAVRULI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;10F4;
+1CB5;GEORGIAN MTAVRULI CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;10F5;
+1CB6;GEORGIAN MTAVRULI CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;10F6;
+1CB7;GEORGIAN MTAVRULI CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;10F7;
+1CB8;GEORGIAN MTAVRULI CAPITAL LETTER ELIFI;Lu;0;L;;;;;N;;;;10F8;
+1CB9;GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN;Lu;0;L;;;;;N;;;;10F9;
+1CBA;GEORGIAN MTAVRULI CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;10FA;
+1CBD;GEORGIAN MTAVRULI CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;10FD;
+1CBE;GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;10FE;
+1CBF;GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN;Lu;0;L;;;;;N;;;;10FF;
+1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;
+1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;
+1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;
+1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;;
+1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;;
+1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;;
+1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;;
+1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;;
+1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;;
+1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;;
+1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;;
+1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;;
+1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;;
+1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;
+1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;
+1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;
+1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;;
+1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;;
+1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;;
+1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;;
+1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;;
+1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;;
+1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;;
+1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;;
+1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;;
+1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;;
+1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;;
+1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;;
+1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;;
+1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;;
+1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
+1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
+1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
+1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;;
+1CF2;VEDIC SIGN ARDHAVISARGA;Lo;0;L;;;;;N;;;;;
+1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Lo;0;L;;;;;N;;;;;
+1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;;
+1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;;
+1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+1CFA;VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;;
+1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
+1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
+1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
+1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;
+1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;
+1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;
+1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;
+1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;
+1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;
+1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;
+1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;
+1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;
+1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;
+1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;
+1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;
+1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;
+1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;
+1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;
+1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;
+1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;
+1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;
+1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;
+1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;
+1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;
+1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;
+1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;
+1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;
+1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;
+1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;
+1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;
+1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;
+1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;
+1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;
+1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;
+1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;
+1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;
+1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;
+1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;
+1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;
+1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;
+1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;
+1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;
+1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;
+1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;
+1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;
+1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;
+1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;
+1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;
+1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;
+1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;
+1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;
+1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;
+1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;
+1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;
+1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;
+1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;
+1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;
+1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;
+1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;
+1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;
+1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;
+1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;
+1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;
+1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;
+1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;
+1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;
+1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;
+1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;
+1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;
+1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;
+1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;
+1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;
+1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;
+1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;
+1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;
+1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;
+1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;
+1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;
+1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;
+1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;
+1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;
+1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;
+1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;
+1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;
+1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;
+1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;
+1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;
+1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;
+1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;
+1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;
+1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;
+1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;
+1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;
+1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;
+1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;
+1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L;<sub> 0069;;;;N;;;;;
+1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L;<sub> 0072;;;;N;;;;;
+1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L;<sub> 0075;;;;N;;;;;
+1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L;<sub> 0076;;;;N;;;;;
+1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L;<sub> 03B2;;;;N;;;;;
+1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L;<sub> 03B3;;;;N;;;;;
+1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L;<sub> 03C1;;;;N;;;;;
+1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L;<sub> 03C6;;;;N;;;;;
+1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L;<sub> 03C7;;;;N;;;;;
+1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
+1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
+1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
+1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D
+1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
+1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63
+1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C6;;A7C6
+1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
+1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
+1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
+1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
+1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
+1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
+1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
+1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
+1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
+1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
+1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
+1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
+1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
+1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
+1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
+1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
+1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
+1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
+1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
+1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
+1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
+1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
+1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
+1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
+1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
+1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
+1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
+1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
+1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
+1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
+1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
+1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
+1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
+1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
+1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
+1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
+1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
+1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;
+1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;;
+1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;;
+1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;;
+1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;;
+1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;;
+1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;;
+1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;;
+1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;;
+1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;;
+1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;;
+1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;;
+1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;;
+1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;;
+1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;;
+1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;;
+1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;;
+1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;;
+1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;;
+1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;;
+1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;;
+1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;;
+1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;;
+1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;;
+1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;;
+1DE7;COMBINING LATIN SMALL LETTER ALPHA;Mn;230;NSM;;;;;N;;;;;
+1DE8;COMBINING LATIN SMALL LETTER B;Mn;230;NSM;;;;;N;;;;;
+1DE9;COMBINING LATIN SMALL LETTER BETA;Mn;230;NSM;;;;;N;;;;;
+1DEA;COMBINING LATIN SMALL LETTER SCHWA;Mn;230;NSM;;;;;N;;;;;
+1DEB;COMBINING LATIN SMALL LETTER F;Mn;230;NSM;;;;;N;;;;;
+1DEC;COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Mn;230;NSM;;;;;N;;;;;
+1DED;COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;;
+1DEE;COMBINING LATIN SMALL LETTER P;Mn;230;NSM;;;;;N;;;;;
+1DEF;COMBINING LATIN SMALL LETTER ESH;Mn;230;NSM;;;;;N;;;;;
+1DF0;COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;;
+1DF1;COMBINING LATIN SMALL LETTER W;Mn;230;NSM;;;;;N;;;;;
+1DF2;COMBINING LATIN SMALL LETTER A WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;
+1DF3;COMBINING LATIN SMALL LETTER O WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;
+1DF4;COMBINING LATIN SMALL LETTER U WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;
+1DF5;COMBINING UP TACK ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DF6;COMBINING KAVYKA ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
+1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
+1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;;
+1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;;
+1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;;
+1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;
+1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;;
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB;
+1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA
+1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD;
+1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC
+1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF;
+1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;
+204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2050;CLOSE UP;Po;0;ON;;;;;N;;;;;
+2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;
+2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
+2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
+2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
+2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
+205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
+205D;TRICOLON;Po;0;ON;;;;;N;;;;;
+205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
+205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
+2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
+2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
+2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
+2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;;
+2066;LEFT-TO-RIGHT ISOLATE;Cf;0;LRI;;;;;N;;;;;
+2067;RIGHT-TO-LEFT ISOLATE;Cf;0;RLI;;;;;N;;;;;
+2068;FIRST STRONG ISOLATE;Cf;0;FSI;;;;;N;;;;;
+2069;POP DIRECTIONAL ISOLATE;Cf;0;PDI;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L;<super> 0069;;;;N;;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
+2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
+2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
+2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
+2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
+2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L;<sub> 0068;;;;N;;;;;
+2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L;<sub> 006B;;;;N;;;;;
+2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L;<sub> 006C;;;;N;;;;;
+2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L;<sub> 006D;;;;N;;;;;
+2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L;<sub> 006E;;;;N;;;;;
+209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L;<sub> 0070;;;;N;;;;;
+209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L;<sub> 0073;;;;N;;;;;
+209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L;<sub> 0074;;;;N;;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
+20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
+20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
+20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
+20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
+20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
+20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;;
+20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;;
+20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;;
+20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+20BA;TURKISH LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20BB;NORDIC MARK SIGN;Sc;0;ET;;;;;N;;;;;
+20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;;
+20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;
+20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;
+20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
+20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;
+20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
+20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
+213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;
+2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;
+2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;
+2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
+214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
+214C;PER SIGN;So;0;ON;;;;;N;;;;;
+214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;
+214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132
+214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;;
+2150;VULGAR FRACTION ONE SEVENTH;No;0;ON;<fraction> 0031 2044 0037;;;1/7;N;;;;;
+2151;VULGAR FRACTION ONE NINTH;No;0;ON;<fraction> 0031 2044 0039;;;1/9;N;;;;;
+2152;VULGAR FRACTION ONE TENTH;No;0;ON;<fraction> 0031 2044 0031 0030;;;1/10;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;
+2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183
+2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;;
+2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;;
+2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;
+2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;
+2189;VULGAR FRACTION ZERO THIRDS;No;0;ON;<fraction> 0030 2044 0033;;;0;N;;;;;
+218A;TURNED DIGIT TWO;So;0;ON;;;;;N;;;;;
+218B;TURNED DIGIT THREE;So;0;ON;;;;;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;
+22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Ps;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Pe;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Ps;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Pe;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;
+23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
+23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
+23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
+23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;
+23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;
+23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;
+23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;
+23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;
+23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;
+23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;
+23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;
+23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;
+23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;
+23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
+23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
+23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
+23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
+23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
+23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
+23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
+23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
+23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
+23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
+23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
+23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
+23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
+23DB;FUSE;So;0;ON;;;;;N;;;;;
+23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;;
+23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;;
+23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;;
+23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;;
+23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;;
+23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;;
+23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;
+23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;
+23E5;FLATNESS;So;0;ON;;;;;N;;;;;
+23E6;AC CURRENT;So;0;ON;;;;;N;;;;;
+23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;
+23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;;
+23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;;
+23F1;STOPWATCH;So;0;ON;;;;;N;;;;;
+23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;;
+23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;;
+23F4;BLACK MEDIUM LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;
+23F5;BLACK MEDIUM RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;
+23F6;BLACK MEDIUM UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;
+23F7;BLACK MEDIUM DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;
+23F8;DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23F9;BLACK SQUARE FOR STOP;So;0;ON;;;;;N;;;;;
+23FA;BLACK CIRCLE FOR RECORD;So;0;ON;;;;;N;;;;;
+23FB;POWER SYMBOL;So;0;ON;;;;;N;;;;;
+23FC;POWER ON-OFF SYMBOL;So;0;ON;;;;;N;;;;;
+23FD;POWER ON SYMBOL;So;0;ON;;;;;N;;;;;
+23FE;POWER SLEEP SYMBOL;So;0;ON;;;;;N;;;;;
+23FF;OBSERVER EYE SYMBOL;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
+24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
+24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
+24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;
+24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;
+24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;
+24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;
+24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;
+24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;
+24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;
+24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;
+24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;
+24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;
+24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;
+24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;
+24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;
+24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;
+24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;
+24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;
+24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;
+2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;
+2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;
+2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;
+259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;
+2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
+2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2618;SHAMROCK;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;;
+2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;;
+2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;;
+2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;;
+2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;;
+2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;;
+2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;;
+267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;
+267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
+267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
+2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
+2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
+2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
+2683;DIE FACE-4;So;0;ON;;;;;N;;;;;
+2684;DIE FACE-5;So;0;ON;;;;;N;;;;;
+2685;DIE FACE-6;So;0;ON;;;;;N;;;;;
+2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;
+2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;
+2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;
+268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;
+268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;
+268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;
+268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;
+268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;
+268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
+2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
+2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
+2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
+2693;ANCHOR;So;0;ON;;;;;N;;;;;
+2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
+2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
+2696;SCALES;So;0;ON;;;;;N;;;;;
+2697;ALEMBIC;So;0;ON;;;;;N;;;;;
+2698;FLOWER;So;0;ON;;;;;N;;;;;
+2699;GEAR;So;0;ON;;;;;N;;;;;
+269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
+269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
+269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
+269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;;
+269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;;
+26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
+26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
+26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
+26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
+26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
+26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
+26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
+26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
+26B0;COFFIN;So;0;ON;;;;;N;;;;;
+26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
+26B2;NEUTER;So;0;ON;;;;;N;;;;;
+26B3;CERES;So;0;ON;;;;;N;;;;;
+26B4;PALLAS;So;0;ON;;;;;N;;;;;
+26B5;JUNO;So;0;ON;;;;;N;;;;;
+26B6;VESTA;So;0;ON;;;;;N;;;;;
+26B7;CHIRON;So;0;ON;;;;;N;;;;;
+26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;;
+26B9;SEXTILE;So;0;ON;;;;;N;;;;;
+26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;;
+26BB;QUINCUNX;So;0;ON;;;;;N;;;;;
+26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;;
+26BD;SOCCER BALL;So;0;ON;;;;;N;;;;;
+26BE;BASEBALL;So;0;ON;;;;;N;;;;;
+26BF;SQUARED KEY;So;0;ON;;;;;N;;;;;
+26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
+26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;;
+26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
+26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;;
+26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;;
+26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;;
+26C6;RAIN;So;0;ON;;;;;N;;;;;
+26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;;
+26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;;
+26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;;
+26CC;CROSSING LANES;So;0;ON;;;;;N;;;;;
+26CD;DISABLED CAR;So;0;ON;;;;;N;;;;;
+26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;;
+26CF;PICK;So;0;ON;;;;;N;;;;;
+26D0;CAR SLIDING;So;0;ON;;;;;N;;;;;
+26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;;
+26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;;
+26D3;CHAINS;So;0;ON;;;;;N;;;;;
+26D4;NO ENTRY;So;0;ON;;;;;N;;;;;
+26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;
+26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;
+26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;
+26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;;
+26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;;
+26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;;
+26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;
+26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;;
+26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;;
+26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;;
+26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;;
+26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;;
+26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;;
+26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;;
+26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;;
+26E4;PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;;
+26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;;
+26EA;CHURCH;So;0;ON;;;;;N;;;;;
+26EB;CASTLE;So;0;ON;;;;;N;;;;;
+26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;;
+26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;;
+26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;;
+26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;;
+26F0;MOUNTAIN;So;0;ON;;;;;N;;;;;
+26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;;
+26F2;FOUNTAIN;So;0;ON;;;;;N;;;;;
+26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;;
+26F4;FERRY;So;0;ON;;;;;N;;;;;
+26F5;SAILBOAT;So;0;ON;;;;;N;;;;;
+26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;;
+26F7;SKIER;So;0;ON;;;;;N;;;;;
+26F8;ICE SKATE;So;0;ON;;;;;N;;;;;
+26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;;
+26FA;TENT;So;0;ON;;;;;N;;;;;
+26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;;
+26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;;
+26FD;FUEL PUMP;So;0;ON;;;;;N;;;;;
+26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;;
+26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;;
+2700;BLACK SAFETY SCISSORS;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270A;RAISED FIST;So;0;ON;;;;;N;;;;;
+270B;RAISED HAND;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2728;SPARKLES;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274C;CROSS MARK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;;
+2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;;
+2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B0;CURLY LOOP;So;0;ON;;;;;N;;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;;
+27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
+27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
+27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
+27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
+27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;
+27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;;
+27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;
+27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;;
+27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
+27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
+27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
+27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;
+27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;
+27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;
+27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;
+27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;
+27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;
+27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
+2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;
+2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;
+2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;
+2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;
+2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;
+293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;
+293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;
+2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;
+297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;
+2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;
+2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;
+2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;
+2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;
+2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;
+2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;
+2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;
+2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;
+298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;
+298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;
+298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;
+298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;
+298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;
+298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;
+2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;
+2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;
+2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;
+2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;
+299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;
+299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;
+299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;
+299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
+299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;N;;;;;
+29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;
+29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;
+29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;
+29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;
+29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;
+29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;
+29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;
+29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;
+29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;
+29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;
+29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;
+29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;
+29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;
+29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;
+29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;
+29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;
+29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;
+29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;
+29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;
+29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;
+29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;
+29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;
+29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;
+29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;
+29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;
+29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;
+29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+29FE;TINY;Sm;0;ON;;;;;N;;;;;
+29FF;MINY;Sm;0;ON;;;;;N;;;;;
+2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;
+2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;
+2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;
+2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;
+2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;
+2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;
+2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;
+2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;
+2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;
+2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;
+2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;
+2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;
+2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1D;JOIN;Sm;0;ON;;;;;N;;;;;
+2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;
+2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;
+2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;
+2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;
+2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;
+2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;
+2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;
+2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;
+2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;
+2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;
+2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;
+2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;
+2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;
+2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;
+2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;
+2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;
+2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;
+2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;
+2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;
+2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;
+2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;
+2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;
+2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;
+2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;
+2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;;
+2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;;
+2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;
+2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;
+2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;
+2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;
+2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;
+2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;
+2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;
+2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;
+2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;;
+2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;;
+2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;;
+2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;
+2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;
+2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
+2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
+2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;;
+2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;;
+2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;;
+2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
+2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
+2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2B4D;DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW;So;0;ON;;;;;N;;;;;
+2B4E;SHORT SLANTED NORTH ARROW;So;0;ON;;;;;N;;;;;
+2B4F;SHORT BACKSLANTED SOUTH ARROW;So;0;ON;;;;;N;;;;;
+2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;;
+2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;;
+2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;;
+2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
+2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
+2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;;
+2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;;
+2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;;
+2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;;
+2B5A;SLANTED NORTH ARROW WITH HOOKED HEAD;So;0;ON;;;;;N;;;;;
+2B5B;BACKSLANTED SOUTH ARROW WITH HOOKED TAIL;So;0;ON;;;;;N;;;;;
+2B5C;SLANTED NORTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;;
+2B5D;BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;;
+2B5E;BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;;
+2B5F;SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;;
+2B60;LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B61;UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B62;RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B63;DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B64;LEFT RIGHT TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B65;UP DOWN TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B66;NORTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B67;NORTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B68;SOUTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B69;SOUTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B6A;LEFTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;
+2B6B;UPWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;
+2B6C;RIGHTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;
+2B6D;DOWNWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;
+2B6E;CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+2B6F;ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+2B70;LEFTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B71;UPWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B72;RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B73;DOWNWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B76;NORTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B77;NORTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B78;SOUTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B79;SOUTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;
+2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;
+2B7B;UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;
+2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;
+2B7D;DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;
+2B7E;HORIZONTAL TAB KEY;So;0;ON;;;;;N;;;;;
+2B7F;VERTICAL TAB KEY;So;0;ON;;;;;N;;;;;
+2B80;LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B81;UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B82;RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B83;DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;
+2B84;LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;
+2B85;UPWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;
+2B86;RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;
+2B87;DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;
+2B88;LEFTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B89;UPWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B8A;RIGHTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B8B;DOWNWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B8C;ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW;So;0;ON;;;;;N;;;;;
+2B8D;ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW;So;0;ON;;;;;N;;;;;
+2B8E;ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW;So;0;ON;;;;;N;;;;;
+2B8F;ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW;So;0;ON;;;;;N;;;;;
+2B90;RETURN LEFT;So;0;ON;;;;;N;;;;;
+2B91;RETURN RIGHT;So;0;ON;;;;;N;;;;;
+2B92;NEWLINE LEFT;So;0;ON;;;;;N;;;;;
+2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;;
+2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;;
+2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B9B;THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B9C;BLACK LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B9D;BLACK UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B9E;BLACK RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2B9F;BLACK DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+2BA0;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;;
+2BA1;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;;
+2BA2;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;;
+2BA3;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;;
+2BA4;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2BA5;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2BA6;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2BA7;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2BA8;BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BA9;BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BAA;BLACK CURVED UPWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BAB;BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BAC;BLACK CURVED LEFTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BAD;BLACK CURVED RIGHTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BAE;BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BAF;BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;
+2BB0;RIBBON ARROW DOWN LEFT;So;0;ON;;;;;N;;;;;
+2BB1;RIBBON ARROW DOWN RIGHT;So;0;ON;;;;;N;;;;;
+2BB2;RIBBON ARROW UP LEFT;So;0;ON;;;;;N;;;;;
+2BB3;RIBBON ARROW UP RIGHT;So;0;ON;;;;;N;;;;;
+2BB4;RIBBON ARROW LEFT UP;So;0;ON;;;;;N;;;;;
+2BB5;RIBBON ARROW RIGHT UP;So;0;ON;;;;;N;;;;;
+2BB6;RIBBON ARROW LEFT DOWN;So;0;ON;;;;;N;;;;;
+2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;;
+2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;;
+2BBA;OVERLAPPING WHITE SQUARES;So;0;ON;;;;;N;;;;;
+2BBB;OVERLAPPING WHITE AND BLACK SQUARES;So;0;ON;;;;;N;;;;;
+2BBC;OVERLAPPING BLACK SQUARES;So;0;ON;;;;;N;;;;;
+2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;;
+2BBE;CIRCLED X;So;0;ON;;;;;N;;;;;
+2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;;
+2BC0;BLACK SQUARE CENTRED;So;0;ON;;;;;N;;;;;
+2BC1;BLACK DIAMOND CENTRED;So;0;ON;;;;;N;;;;;
+2BC2;TURNED BLACK PENTAGON;So;0;ON;;;;;N;;;;;
+2BC3;HORIZONTAL BLACK OCTAGON;So;0;ON;;;;;N;;;;;
+2BC4;BLACK OCTAGON;So;0;ON;;;;;N;;;;;
+2BC5;BLACK MEDIUM UP-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;
+2BC6;BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;
+2BC7;BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;
+2BC8;BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;
+2BC9;NEPTUNE FORM TWO;So;0;ON;;;;;N;;;;;
+2BCA;TOP HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+2BCB;BOTTOM HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+2BCC;LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;;
+2BCD;ROTATED LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;;
+2BCE;WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;;
+2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;;
+2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;;
+2BD2;GROUP MARK;So;0;ON;;;;;N;;;;;
+2BD3;PLUTO FORM TWO;So;0;ON;;;;;N;;;;;
+2BD4;PLUTO FORM THREE;So;0;ON;;;;;N;;;;;
+2BD5;PLUTO FORM FOUR;So;0;ON;;;;;N;;;;;
+2BD6;PLUTO FORM FIVE;So;0;ON;;;;;N;;;;;
+2BD7;TRANSPLUTO;So;0;ON;;;;;N;;;;;
+2BD8;PROSERPINA;So;0;ON;;;;;N;;;;;
+2BD9;ASTRAEA;So;0;ON;;;;;N;;;;;
+2BDA;HYGIEA;So;0;ON;;;;;N;;;;;
+2BDB;PHOLUS;So;0;ON;;;;;N;;;;;
+2BDC;NESSUS;So;0;ON;;;;;N;;;;;
+2BDD;WHITE MOON SELENA;So;0;ON;;;;;N;;;;;
+2BDE;BLACK DIAMOND ON CROSS;So;0;ON;;;;;N;;;;;
+2BDF;TRUE LIGHT MOON ARTA;So;0;ON;;;;;N;;;;;
+2BE0;CUPIDO;So;0;ON;;;;;N;;;;;
+2BE1;HADES;So;0;ON;;;;;N;;;;;
+2BE2;ZEUS;So;0;ON;;;;;N;;;;;
+2BE3;KRONOS;So;0;ON;;;;;N;;;;;
+2BE4;APOLLON;So;0;ON;;;;;N;;;;;
+2BE5;ADMETOS;So;0;ON;;;;;N;;;;;
+2BE6;VULCANUS;So;0;ON;;;;;N;;;;;
+2BE7;POSEIDON;So;0;ON;;;;;N;;;;;
+2BE8;LEFT HALF BLACK STAR;So;0;ON;;;;;N;;;;;
+2BE9;RIGHT HALF BLACK STAR;So;0;ON;;;;;N;;;;;
+2BEA;STAR WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2BEB;STAR WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BF0;ERIS FORM ONE;So;0;ON;;;;;N;;;;;
+2BF1;ERIS FORM TWO;So;0;ON;;;;;N;;;;;
+2BF2;SEDNA;So;0;ON;;;;;N;;;;;
+2BF3;RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE;So;0;ON;;;;;N;;;;;
+2BF4;RUSSIAN ASTROLOGICAL SYMBOL NOVILE;So;0;ON;;;;;N;;;;;
+2BF5;RUSSIAN ASTROLOGICAL SYMBOL QUINTILE;So;0;ON;;;;;N;;;;;
+2BF6;RUSSIAN ASTROLOGICAL SYMBOL BINOVILE;So;0;ON;;;;;N;;;;;
+2BF7;RUSSIAN ASTROLOGICAL SYMBOL SENTAGON;So;0;ON;;;;;N;;;;;
+2BF8;RUSSIAN ASTROLOGICAL SYMBOL TREDECILE;So;0;ON;;;;;N;;;;;
+2BF9;EQUALS SIGN WITH INFINITY BELOW;So;0;ON;;;;;N;;;;;
+2BFA;UNITED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFB;SEPARATED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;;
+2BFF;HELLSCHREIBER PAUSE SYMBOL;So;0;ON;;;;;N;;;;;
+2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
+2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
+2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
+2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
+2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
+2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
+2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
+2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
+2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
+2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
+2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
+2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
+2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
+2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
+2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
+2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
+2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
+2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
+2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
+2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
+2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
+2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
+2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
+2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
+2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
+2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
+2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
+2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
+2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
+2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
+2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
+2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
+2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
+2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
+2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
+2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
+2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
+2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
+2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
+2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
+2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
+2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
+2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
+2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
+2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
+2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
+2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
+2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
+2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
+2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
+2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
+2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
+2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
+2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
+2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
+2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
+2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
+2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
+2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
+2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
+2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
+2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
+2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
+2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
+2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
+2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
+2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
+2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
+2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
+2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
+2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
+2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
+2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
+2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
+2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
+2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
+2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
+2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
+2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
+2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
+2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
+2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
+2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
+2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
+2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
+2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
+2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
+2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
+2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
+2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
+2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
+2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
+2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
+2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
+2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
+2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;
+2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;
+2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A
+2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E
+2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;
+2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67
+2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;
+2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69
+2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;
+2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B
+2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251;
+2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271;
+2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250;
+2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252;
+2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;;
+2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73;
+2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72
+2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;
+2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;
+2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75
+2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;
+2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;;
+2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;
+2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;
+2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;
+2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L;<sub> 006A;;;;N;;;;;
+2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;;
+2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F;
+2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240;
+2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
+2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
+2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
+2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
+2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
+2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
+2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
+2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
+2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
+2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
+2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
+2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
+2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
+2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
+2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
+2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
+2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
+2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
+2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
+2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
+2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
+2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
+2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
+2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
+2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
+2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
+2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
+2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
+2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
+2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
+2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
+2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
+2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
+2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
+2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
+2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
+2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
+2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
+2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
+2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
+2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
+2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
+2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
+2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
+2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
+2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
+2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
+2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
+2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
+2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
+2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
+2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
+2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
+2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
+2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
+2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
+2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
+2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
+2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
+2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
+2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
+2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
+2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
+2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
+2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
+2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
+2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
+2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
+2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
+2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
+2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
+2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
+2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
+2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
+2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
+2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
+2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
+2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
+2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
+2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
+2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
+2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
+2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
+2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
+2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
+2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
+2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
+2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
+2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
+2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
+2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
+2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
+2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
+2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
+2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
+2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
+2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
+2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
+2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
+2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
+2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
+2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
+2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
+2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
+2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
+2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
+2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
+2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC;
+2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB
+2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE;
+2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED
+2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;;
+2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;;
+2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;;
+2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3;
+2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2
+2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
+2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
+2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0
+2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1
+2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2
+2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3
+2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4
+2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5
+2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6
+2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7
+2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8
+2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9
+2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA
+2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB
+2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC
+2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD
+2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE
+2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF
+2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0
+2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1
+2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2
+2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3
+2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4
+2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5
+2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6
+2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7
+2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8
+2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9
+2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA
+2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB
+2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC
+2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD
+2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE
+2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF
+2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0
+2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1
+2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2
+2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3
+2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4
+2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5
+2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7
+2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD
+2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
+2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
+2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
+2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
+2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
+2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
+2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
+2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
+2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
+2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
+2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
+2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
+2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
+2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
+2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
+2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
+2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;;
+2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
+2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
+2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
+2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
+2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
+2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
+2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
+2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
+2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
+2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
+2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
+2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
+2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
+2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
+2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
+2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
+2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
+2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
+2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;;
+2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
+2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
+2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
+2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
+2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;;
+2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
+2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
+2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
+2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
+2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
+2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
+2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
+2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
+2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
+2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
+2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
+2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;;
+2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;;
+2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;;
+2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;;;;
+2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;;
+2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;;
+2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
+2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
+2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
+2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
+2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
+2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
+2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
+2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
+2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
+2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
+2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
+2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
+2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
+2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
+2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
+2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
+2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
+2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
+2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
+2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
+2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
+2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
+2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
+2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
+2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
+2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
+2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
+2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
+2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
+2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
+2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
+2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
+2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
+2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
+2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
+2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
+2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
+2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
+2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
+2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
+2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
+2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
+2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
+2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
+2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
+2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
+2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
+2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
+2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
+2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
+2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
+2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
+2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
+2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
+2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
+2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
+2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
+2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
+2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
+2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
+2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
+2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
+2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
+2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
+2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
+2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
+2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
+2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
+2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
+2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;;
+2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;;
+2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;;
+2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;;
+2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;;
+2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;;
+2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;;
+2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;;
+2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;;
+2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;;
+2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;;
+2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;;
+2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;;
+2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;;
+2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;;
+2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;;
+2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;;
+2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;;
+2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
+2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;;
+2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
+2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;;
+2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;;
+2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;;
+2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;;
+2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;;
+2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;;
+2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
+2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;;
+2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;;
+2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
+2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;;
+2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
+2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
+2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
+2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
+2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
+2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
+2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;;
+2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;;
+2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;;
+2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;;
+2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;;
+2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;;
+2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;;
+2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;;
+2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;;
+2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;
+2E30;RING POINT;Po;0;ON;;;;;N;;;;;
+2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;;
+2E33;RAISED DOT;Po;0;ON;;;;;N;;;;;
+2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;;
+2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;;
+2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;;
+2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;;
+2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;;
+2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;;
+2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;;
+2E3C;STENOGRAPHIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2E3D;VERTICAL SIX DOTS;Po;0;ON;;;;;N;;;;;
+2E3E;WIGGLY VERTICAL LINE;Po;0;ON;;;;;N;;;;;
+2E3F;CAPITULUM;Po;0;ON;;;;;N;;;;;
+2E40;DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E41;REVERSED COMMA;Po;0;ON;;;;;N;;;;;
+2E42;DOUBLE LOW-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+2E43;DASH WITH LEFT UPTURN;Po;0;ON;;;;;N;;;;;
+2E44;DOUBLE SUSPENSION MARK;Po;0;ON;;;;;N;;;;;
+2E45;INVERTED LOW KAVYKA;Po;0;ON;;;;;N;;;;;
+2E46;INVERTED LOW KAVYKA WITH KAVYKA ABOVE;Po;0;ON;;;;;N;;;;;
+2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;;
+2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;;
+2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;;
+2E4A;DOTTED SOLIDUS;Po;0;ON;;;;;N;;;;;
+2E4B;TRIPLE DAGGER;Po;0;ON;;;;;N;;;;;
+2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;;
+2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;;
+2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;;
+2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+303C;MASU MARK;Lo;0;L;;;;;N;;;;;
+303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;
+30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
+312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;;
+312F;BOPOMOFO LETTER NN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;;
+31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;;
+31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;;
+31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
+31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
+31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
+31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
+31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
+31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
+31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
+31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
+31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
+31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
+31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
+31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
+31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
+31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
+31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
+31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
+31D0;CJK STROKE H;So;0;ON;;;;;N;;;;;
+31D1;CJK STROKE S;So;0;ON;;;;;N;;;;;
+31D2;CJK STROKE P;So;0;ON;;;;;N;;;;;
+31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;;
+31D4;CJK STROKE D;So;0;ON;;;;;N;;;;;
+31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;;
+31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;;
+31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;;
+31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;;
+31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;;
+31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;;
+31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;;
+31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;;
+31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;;
+31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;;
+31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;;
+31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;;
+31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;
+31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;
+31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;;
+31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
+31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
+31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
+31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;
+31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;
+31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;
+31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;
+31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;
+31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;
+31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;
+31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;
+31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;
+31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;
+31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;
+31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;
+31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;
+321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3244;CIRCLED IDEOGRAPH QUESTION;So;0;L;<circle> 554F;;;;N;;;;;
+3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L;<circle> 5E7C;;;;N;;;;;
+3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L;<circle> 6587;;;;N;;;;;
+3247;CIRCLED IDEOGRAPH KOTO;So;0;L;<circle> 7B8F;;;;N;;;;;
+3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;;
+3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;;
+324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;;
+324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;;
+324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;;
+324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;;
+324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;;
+324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;;
+3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;
+3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;
+3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;
+3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;
+3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;
+3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;
+3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;
+3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;
+3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;
+3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;
+325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;
+325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;
+325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;
+325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;
+325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;
+325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
+327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
+327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;
+32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;
+32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;
+32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;
+32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;
+32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;
+32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;
+32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;
+32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;
+32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;
+32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;
+32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;
+32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;
+32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;
+32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;
+32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;
+32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;
+32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+32FF;SQUARE ERA NAME REIWA;So;0;L;<square> 4EE4 548C;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;
+3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;
+3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;
+337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;
+33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
+4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
+4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
+4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;
+4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;
+4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;
+4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;
+4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;
+4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;
+4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;
+4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;
+4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;
+4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;
+4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;
+4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;
+4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;
+4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;
+4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;
+4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;
+4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;
+4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;
+4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;
+4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;
+4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;
+4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;
+4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;
+4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;
+4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;
+4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;
+4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;
+4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;
+4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;
+4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;
+4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;
+4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;
+4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;
+4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;
+4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;
+4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;
+4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;
+4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;
+4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;
+4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;
+4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;
+4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;
+4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;
+4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;
+4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;
+4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;
+4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;
+4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;
+4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;
+4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;
+4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;
+4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;
+4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;
+4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
+4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;
+A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+A4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;;
+A4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;;
+A4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;;
+A4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;;
+A4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;;
+A4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;;
+A4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;;
+A4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;;
+A4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;;
+A4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;;
+A4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;;
+A4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;;
+A4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;;
+A4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;;
+A4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;;
+A4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;;
+A4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;;
+A4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;;
+A4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;;
+A4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;;
+A4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;;
+A4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;;
+A4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;;
+A4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;;
+A4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;;
+A4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;;
+A4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;;
+A4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;;
+A4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;;
+A4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;;
+A4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;;
+A4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;;
+A4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;;
+A4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;;
+A4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;;
+A4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;;
+A4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;;
+A4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;;
+A4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;;
+A4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;;
+A4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;;
+A4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;;
+A4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;;
+A4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;;
+A4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;;
+A4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;;
+A4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;;
+A4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;;
+A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;;
+A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;;
+A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;;
+A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;;
+A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;;
+A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;;
+A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;;
+A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;;
+A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;;
+A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;;
+A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;;
+A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;;
+A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;;
+A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;;
+A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;;
+A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;;
+A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;;
+A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;;
+A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;;
+A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;;
+A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;;
+A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;;
+A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;;
+A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;;
+A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;;
+A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;;
+A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;;
+A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;;
+A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;;
+A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;;
+A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;;
+A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;;
+A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;;
+A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;;
+A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;;
+A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;;
+A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;;
+A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;;
+A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;;
+A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;;
+A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;;
+A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;;
+A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;;
+A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;;
+A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;;
+A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;;
+A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;;
+A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;;
+A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;;
+A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;;
+A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;;
+A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;;
+A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;;
+A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;;
+A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;;
+A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;;
+A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;;
+A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;;
+A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;;
+A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;;
+A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;;
+A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;;
+A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;;
+A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;;
+A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;;
+A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;;
+A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;;
+A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;;
+A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;;
+A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;;
+A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;;
+A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;;
+A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;;
+A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;;
+A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;;
+A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;;
+A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;;
+A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;;
+A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;;
+A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;;
+A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;;
+A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;;
+A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;;
+A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;;
+A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;;
+A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;;
+A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;;
+A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;;
+A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;;
+A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;;
+A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;;
+A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;;
+A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;;
+A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;;
+A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;;
+A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;;
+A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;;
+A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;;
+A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;;
+A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;;
+A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;;
+A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;;
+A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;;
+A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;;
+A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;;
+A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;;
+A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;;
+A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;;
+A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;;
+A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;;
+A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;;
+A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;;
+A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;;
+A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;;
+A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;;
+A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;;
+A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;;
+A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;;
+A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;
+A60D;VAI COMMA;Po;0;ON;;;;;N;;;;;
+A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;;
+A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;;
+A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;;
+A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;;
+A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;;
+A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;;
+A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;;
+A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;;
+A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;;
+A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;;
+A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;;
+A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;;
+A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;;
+A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;;
+A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;;
+A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;;
+A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;;
+A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;;
+A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;;
+A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;;
+A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641;
+A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640
+A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643;
+A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642
+A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645;
+A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644
+A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647;
+A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646
+A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649;
+A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648
+A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B;
+A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A
+A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D;
+A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C
+A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F;
+A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E
+A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651;
+A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650
+A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653;
+A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652
+A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655;
+A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654
+A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657;
+A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656
+A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659;
+A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658
+A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B;
+A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A
+A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D;
+A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C
+A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F;
+A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E
+A660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661;
+A661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660
+A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663;
+A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662
+A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665;
+A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664
+A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667;
+A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666
+A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669;
+A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668
+A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B;
+A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A
+A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D;
+A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C
+A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;;
+A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;;
+A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;
+A674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;;
+A675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;;
+A676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;;
+A677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;;
+A678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;;
+A679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;
+A67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;;
+A67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;;
+A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;
+A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;
+A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;
+A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;;
+A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681;
+A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680
+A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683;
+A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682
+A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685;
+A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684
+A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687;
+A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686
+A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689;
+A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688
+A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B;
+A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A
+A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D;
+A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C
+A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F;
+A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E
+A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691;
+A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690
+A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693;
+A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692
+A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;
+A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694
+A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;
+A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696
+A698;CYRILLIC CAPITAL LETTER DOUBLE O;Lu;0;L;;;;;N;;;;A699;
+A699;CYRILLIC SMALL LETTER DOUBLE O;Ll;0;L;;;;;N;;;A698;;A698
+A69A;CYRILLIC CAPITAL LETTER CROSSED O;Lu;0;L;;;;;N;;;;A69B;
+A69B;CYRILLIC SMALL LETTER CROSSED O;Ll;0;L;;;;;N;;;A69A;;A69A
+A69C;MODIFIER LETTER CYRILLIC HARD SIGN;Lm;0;L;<super> 044A;;;;N;;;;;
+A69D;MODIFIER LETTER CYRILLIC SOFT SIGN;Lm;0;L;<super> 044C;;;;N;;;;;
+A69E;COMBINING CYRILLIC LETTER EF;Mn;230;NSM;;;;;N;;;;;
+A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;;
+A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;;
+A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;;
+A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;;
+A6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;;
+A6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;;
+A6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;;
+A6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;;
+A6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;;
+A6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;;
+A6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;;
+A6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;;
+A6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;;
+A6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;;
+A6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;;
+A6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;;
+A6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;;
+A6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;;
+A6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;;
+A6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;;
+A6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;;
+A6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;;
+A6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;;
+A6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;;
+A6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;;
+A6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;;
+A6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;;
+A6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;;
+A6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;;
+A6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;;
+A6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;;
+A6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;;
+A6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;;
+A6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;;
+A6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;;
+A6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;;
+A6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;;
+A6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;;
+A6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;;
+A6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;;
+A6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;;
+A6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;;
+A6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;;
+A6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;;
+A6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;;
+A6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;;
+A6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;;
+A6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;;
+A6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;;
+A6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;;
+A6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;;
+A6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;;
+A6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;;
+A6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;;
+A6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;;
+A6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;;
+A6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;;
+A6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;;
+A6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;;
+A6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;;
+A6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;;
+A6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;;
+A6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;;
+A6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;;
+A6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;;
+A6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;;
+A6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;;
+A6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;;
+A6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;;
+A6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;;
+A6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;;
+A6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;;
+A6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;;
+A6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;;
+A6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;;
+A6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;;
+A6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;;
+A6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;;
+A6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;;
+A6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;;
+A6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;;
+A6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;;
+A6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;;
+A6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;;
+A6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;;
+A6F4;BAMUM COLON;Po;0;L;;;;;N;;;;;
+A6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;;
+A6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;;
+A6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;;
+A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
+A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
+A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
+A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
+A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
+A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
+A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
+A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
+A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;
+A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;
+A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;
+A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;
+A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;;
+A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;;
+A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;
+A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;
+A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723;
+A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722
+A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725;
+A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724
+A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727;
+A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726
+A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729;
+A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728
+A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B;
+A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A
+A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D;
+A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C
+A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F;
+A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E
+A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;;
+A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;;
+A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733;
+A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732
+A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735;
+A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734
+A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737;
+A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736
+A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739;
+A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738
+A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B;
+A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A
+A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D;
+A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C
+A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F;
+A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E
+A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741;
+A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740
+A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743;
+A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742
+A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745;
+A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744
+A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747;
+A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746
+A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749;
+A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748
+A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B;
+A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A
+A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D;
+A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C
+A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F;
+A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E
+A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751;
+A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750
+A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753;
+A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752
+A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755;
+A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754
+A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757;
+A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756
+A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759;
+A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758
+A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B;
+A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A
+A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D;
+A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C
+A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F;
+A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E
+A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761;
+A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760
+A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763;
+A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762
+A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765;
+A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764
+A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767;
+A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766
+A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769;
+A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768
+A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B;
+A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A
+A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D;
+A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C
+A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F;
+A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E
+A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;;
+A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;;
+A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;;
+A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;;
+A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;;
+A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;;
+A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;;
+A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;;
+A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;;
+A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A;
+A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779
+A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C;
+A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B
+A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79;
+A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F;
+A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E
+A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781;
+A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780
+A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783;
+A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782
+A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785;
+A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784
+A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787;
+A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786
+A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;;
+A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;;
+A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;;
+A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C;
+A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B
+A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265;
+A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;;
+A78F;LATIN LETTER SINOLOGICAL DOT;Lo;0;L;;;;;N;;;;;
+A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791;
+A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790
+A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793;
+A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792
+A794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C4;;A7C4
+A795;LATIN SMALL LETTER H WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+A796;LATIN CAPITAL LETTER B WITH FLOURISH;Lu;0;L;;;;;N;;;;A797;
+A797;LATIN SMALL LETTER B WITH FLOURISH;Ll;0;L;;;;;N;;;A796;;A796
+A798;LATIN CAPITAL LETTER F WITH STROKE;Lu;0;L;;;;;N;;;;A799;
+A799;LATIN SMALL LETTER F WITH STROKE;Ll;0;L;;;;;N;;;A798;;A798
+A79A;LATIN CAPITAL LETTER VOLAPUK AE;Lu;0;L;;;;;N;;;;A79B;
+A79B;LATIN SMALL LETTER VOLAPUK AE;Ll;0;L;;;;;N;;;A79A;;A79A
+A79C;LATIN CAPITAL LETTER VOLAPUK OE;Lu;0;L;;;;;N;;;;A79D;
+A79D;LATIN SMALL LETTER VOLAPUK OE;Ll;0;L;;;;;N;;;A79C;;A79C
+A79E;LATIN CAPITAL LETTER VOLAPUK UE;Lu;0;L;;;;;N;;;;A79F;
+A79F;LATIN SMALL LETTER VOLAPUK UE;Ll;0;L;;;;;N;;;A79E;;A79E
+A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1;
+A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0
+A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3;
+A7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2
+A7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5;
+A7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4
+A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7;
+A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6
+A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9;
+A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8
+A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266;
+A7AB;LATIN CAPITAL LETTER REVERSED OPEN E;Lu;0;L;;;;;N;;;;025C;
+A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261;
+A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C;
+A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A;
+A7AF;LATIN LETTER SMALL CAPITAL Q;Ll;0;L;;;;;N;;;;;
+A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E;
+A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287;
+A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D;
+A7B3;LATIN CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;AB53;
+A7B4;LATIN CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;A7B5;
+A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4
+A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7;
+A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6
+A7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9;
+A7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8
+A7BA;LATIN CAPITAL LETTER GLOTTAL A;Lu;0;L;;;;;N;;;;A7BB;
+A7BB;LATIN SMALL LETTER GLOTTAL A;Ll;0;L;;;;;N;;;A7BA;;A7BA
+A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD;
+A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC
+A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF;
+A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE
+A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3;
+A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2
+A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;
+A7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282;
+A7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E;
+A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
+A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
+A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
+A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;;
+A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;
+A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;
+A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;;
+A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;;
+A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;;
+A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
+A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
+A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;;
+A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
+A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
+A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
+A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
+A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
+A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
+A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
+A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
+A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
+A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
+A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
+A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
+A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
+A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
+A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
+A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
+A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
+A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
+A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
+A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
+A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
+A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
+A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
+A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
+A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
+A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
+A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
+A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
+A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
+A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
+A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
+A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
+A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
+A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
+A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+A833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;
+A834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+A835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
+A836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;;
+A837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;;
+A838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+A839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;;
+A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;
+A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;
+A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;
+A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;
+A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;
+A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;
+A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;
+A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;
+A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;
+A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;
+A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;
+A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;
+A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;
+A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;
+A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;
+A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;
+A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;
+A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;
+A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;
+A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;
+A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;
+A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;
+A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;
+A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;
+A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;
+A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;
+A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;
+A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;
+A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;
+A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;
+A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;
+A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;
+A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;
+A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;
+A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;
+A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;
+A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;
+A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;
+A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;
+A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;
+A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;
+A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;
+A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;;
+A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;;
+A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;;
+A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;;
+A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;;
+A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;;
+A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;;
+A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;;
+A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;;
+A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;;
+A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;;
+A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;;
+A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;;
+A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;;
+A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;;
+A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;;
+A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;;
+A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;;
+A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;;
+A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;;
+A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;;
+A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;;
+A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;;
+A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;;
+A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;;
+A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;;
+A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;;
+A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;;
+A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;;
+A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;;
+A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;;
+A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;;
+A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;;
+A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;;
+A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;;
+A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;
+A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
+A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
+A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+A8C5;SAURASHTRA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;
+A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;;
+A8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;;
+A8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;;
+A8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;;
+A8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;;
+A8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;;
+A8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;;
+A8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;;
+A8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;;
+A8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;;
+A8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;;
+A8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;;
+A8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;;
+A8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;;
+A8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;;
+A8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;;
+A8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;;
+A8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;;
+A8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;;
+A8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;;
+A8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;;
+A8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;;
+A8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;;
+A8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;;
+A8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;;
+A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;;
+A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;;
+A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;
+A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;;
+A8FE;DEVANAGARI LETTER AY;Lo;0;L;;;;;N;;;;;
+A8FF;DEVANAGARI VOWEL SIGN AY;Mn;0;NSM;;;;;N;;;;;
+A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;;
+A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;;
+A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;;
+A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;;
+A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;;
+A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;;
+A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;;
+A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;;
+A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;;
+A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;;
+A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;;
+A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;;
+A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;;
+A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;;
+A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;;
+A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;;
+A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;;
+A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;;
+A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;;
+A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;;
+A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;;
+A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;;
+A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;;
+A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;;
+A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;;
+A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;;
+A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;;
+A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;;
+A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;;
+A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;;
+A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;;
+A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;;
+A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;;
+A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;;
+A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;;
+A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;;
+A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;;
+A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;;
+A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;;
+A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;;
+A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;;
+A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;;
+A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;;
+A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;;
+A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;;
+A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;;
+A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;;
+A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;;
+A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;;
+A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;;
+A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;;
+A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;;
+A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;;
+A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;;
+A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;;
+A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;;
+A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;;
+A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;;
+A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;;
+A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;;
+A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;;
+A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;
+A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;;
+A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;
+A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;
+A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;;
+A960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;;
+A961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;
+A962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;;
+A963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;;
+A964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;;
+A965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+A966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+A967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;;
+A968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;;
+A969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;;
+A96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+A96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+A96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;;
+A96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;;
+A96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+A96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+A970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;;
+A971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+A972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+A973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;;
+A974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+A975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+A976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;;
+A977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;;
+A978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;;
+A979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;;
+A97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;;
+A97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;;
+A97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;;
+A980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;;
+A981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;;
+A982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;;
+A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;;
+A984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;;
+A985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;;
+A986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;;
+A987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;;
+A988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;;
+A989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;;
+A98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;;
+A98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;;
+A98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;;
+A98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;;
+A98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;;
+A98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;;
+A990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;;
+A991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;;
+A992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;;
+A993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;;
+A994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+A995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;;
+A996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;;
+A997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;;
+A998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;;
+A999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+A99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;;
+A99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;;
+A99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;;
+A9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;;
+A9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;;
+A9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;;
+A9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;;
+A9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;;
+A9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;;
+A9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;;
+A9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;;
+A9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;;
+A9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;;
+A9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;;
+A9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;;
+A9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;;
+A9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;;
+A9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;;
+A9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;;
+A9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;;
+A9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;;
+A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;;
+A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;;
+A9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;;
+A9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;;
+A9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;;
+A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;;
+A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;
+A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;;
+A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;;
+A9BD;JAVANESE CONSONANT SIGN KERET;Mn;0;NSM;;;;;N;;;;;
+A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;;
+A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;;
+A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;;
+A9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;;
+A9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;;
+A9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;;
+A9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;;
+A9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;;
+A9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;;
+A9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;;
+A9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;;
+A9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;;
+A9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;;
+A9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;;
+A9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;;
+A9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;;
+A9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;;
+A9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;;
+A9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;;
+A9E0;MYANMAR LETTER SHAN GHA;Lo;0;L;;;;;N;;;;;
+A9E1;MYANMAR LETTER SHAN CHA;Lo;0;L;;;;;N;;;;;
+A9E2;MYANMAR LETTER SHAN JHA;Lo;0;L;;;;;N;;;;;
+A9E3;MYANMAR LETTER SHAN NNA;Lo;0;L;;;;;N;;;;;
+A9E4;MYANMAR LETTER SHAN BHA;Lo;0;L;;;;;N;;;;;
+A9E5;MYANMAR SIGN SHAN SAW;Mn;0;NSM;;;;;N;;;;;
+A9E6;MYANMAR MODIFIER LETTER SHAN REDUPLICATION;Lm;0;L;;;;;N;;;;;
+A9E7;MYANMAR LETTER TAI LAING NYA;Lo;0;L;;;;;N;;;;;
+A9E8;MYANMAR LETTER TAI LAING FA;Lo;0;L;;;;;N;;;;;
+A9E9;MYANMAR LETTER TAI LAING GA;Lo;0;L;;;;;N;;;;;
+A9EA;MYANMAR LETTER TAI LAING GHA;Lo;0;L;;;;;N;;;;;
+A9EB;MYANMAR LETTER TAI LAING JA;Lo;0;L;;;;;N;;;;;
+A9EC;MYANMAR LETTER TAI LAING JHA;Lo;0;L;;;;;N;;;;;
+A9ED;MYANMAR LETTER TAI LAING DDA;Lo;0;L;;;;;N;;;;;
+A9EE;MYANMAR LETTER TAI LAING DDHA;Lo;0;L;;;;;N;;;;;
+A9EF;MYANMAR LETTER TAI LAING NNA;Lo;0;L;;;;;N;;;;;
+A9F0;MYANMAR TAI LAING DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A9F1;MYANMAR TAI LAING DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A9F2;MYANMAR TAI LAING DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A9F3;MYANMAR TAI LAING DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A9F4;MYANMAR TAI LAING DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A9F5;MYANMAR TAI LAING DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A9F6;MYANMAR TAI LAING DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A9F7;MYANMAR TAI LAING DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A9F8;MYANMAR TAI LAING DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A9F9;MYANMAR TAI LAING DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A9FA;MYANMAR LETTER TAI LAING LLA;Lo;0;L;;;;;N;;;;;
+A9FB;MYANMAR LETTER TAI LAING DA;Lo;0;L;;;;;N;;;;;
+A9FC;MYANMAR LETTER TAI LAING DHA;Lo;0;L;;;;;N;;;;;
+A9FD;MYANMAR LETTER TAI LAING BA;Lo;0;L;;;;;N;;;;;
+A9FE;MYANMAR LETTER TAI LAING BHA;Lo;0;L;;;;;N;;;;;
+AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;;
+AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;;
+AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;;
+AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;;
+AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;;
+AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;;
+AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;;
+AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;;
+AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;;
+AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;;
+AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;;
+AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;;
+AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;;
+AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;;
+AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;;
+AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;;
+AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;;
+AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;;
+AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;;
+AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;;
+AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;;
+AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;;
+AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;;
+AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;;
+AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;;
+AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;;
+AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;;
+AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;;
+AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;;
+AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;;
+AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;;
+AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;;
+AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;
+AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;
+AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;;
+AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;;
+AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;;
+AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;;
+AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;;
+AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;;
+AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;;
+AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;;
+AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;;
+AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;;
+AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;;
+AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;;
+AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;
+AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;
+AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;;
+AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;;
+AA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;;
+AA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;;
+AA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;;
+AA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;;
+AA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;;
+AA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;;
+AA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;;
+AA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;;
+AA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;;
+AA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;;
+AA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;;
+AA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;;
+AA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;;
+AA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;;
+AA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;;
+AA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;;
+AA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;;
+AA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;;
+AA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;;
+AA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;;
+AA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;;
+AA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;;
+AA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;;
+AA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;;
+AA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;;
+AA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;;
+AA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;;
+AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;;
+AA7C;MYANMAR SIGN TAI LAING TONE-2;Mn;0;NSM;;;;;N;;;;;
+AA7D;MYANMAR SIGN TAI LAING TONE-5;Mc;0;L;;;;;N;;;;;
+AA7E;MYANMAR LETTER SHWE PALAUNG CHA;Lo;0;L;;;;;N;;;;;
+AA7F;MYANMAR LETTER SHWE PALAUNG SHA;Lo;0;L;;;;;N;;;;;
+AA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;;
+AA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;;
+AA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;;
+AA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;;
+AA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;;
+AA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;;
+AA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;;
+AA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;;
+AA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;;
+AA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;;
+AA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;;
+AA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;;
+AA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;;
+AA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;;
+AA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;;
+AA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;;
+AA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;;
+AA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;;
+AA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;;
+AA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;;
+AA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;;
+AA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;;
+AA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;;
+AA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;;
+AA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;;
+AA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;;
+AA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;;
+AA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;;
+AA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;;
+AA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;;
+AA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;;
+AA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;;
+AAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;;
+AAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;;
+AAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;;
+AAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;;
+AAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;;
+AAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;;
+AAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;;
+AAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;;
+AAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;;
+AAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;;
+AAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;;
+AAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;;
+AAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;;
+AAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;;
+AAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;;
+AAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;;
+AAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;;
+AAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;;
+AAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;;
+AAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;;
+AAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;;
+AAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;;
+AAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;;
+AAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;;
+AAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;;
+AAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;;
+AABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;;
+AABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;;
+AABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;;
+AABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;;
+AABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;;
+AABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;;
+AAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;;
+AAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;;
+AAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;;
+AADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;;
+AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;;
+AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;;
+AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;;
+AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;;
+AAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;;
+AAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;;
+AAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;;
+AAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;;
+AAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;;
+AAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;;
+AAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;;
+AAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;;
+AAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;;
+AAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;;
+AAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;;
+AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+AAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+AAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;;
+AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;;
+AAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;;
+AAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;;
+AAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;;
+AAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;;
+AAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;;
+AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+AAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;;
+AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;;
+AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;;
+AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;;
+AB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;;
+AB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;;
+AB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;;
+AB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;;
+AB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;;
+AB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;;
+AB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;;
+AB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;;
+AB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;;
+AB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;;
+AB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;;
+AB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;;
+AB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;;
+AB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;;
+AB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;;
+AB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;;
+AB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;;
+AB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;;
+AB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;;
+AB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;;
+AB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;;
+AB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;;
+AB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+AB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+AB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+AB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;;
+AB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;;
+AB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+AB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+AB30;LATIN SMALL LETTER BARRED ALPHA;Ll;0;L;;;;;N;;;;;
+AB31;LATIN SMALL LETTER A REVERSED-SCHWA;Ll;0;L;;;;;N;;;;;
+AB32;LATIN SMALL LETTER BLACKLETTER E;Ll;0;L;;;;;N;;;;;
+AB33;LATIN SMALL LETTER BARRED E;Ll;0;L;;;;;N;;;;;
+AB34;LATIN SMALL LETTER E WITH FLOURISH;Ll;0;L;;;;;N;;;;;
+AB35;LATIN SMALL LETTER LENIS F;Ll;0;L;;;;;N;;;;;
+AB36;LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;
+AB37;LATIN SMALL LETTER L WITH INVERTED LAZY S;Ll;0;L;;;;;N;;;;;
+AB38;LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+AB39;LATIN SMALL LETTER L WITH MIDDLE RING;Ll;0;L;;;;;N;;;;;
+AB3A;LATIN SMALL LETTER M WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;
+AB3B;LATIN SMALL LETTER N WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;
+AB3C;LATIN SMALL LETTER ENG WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;
+AB3D;LATIN SMALL LETTER BLACKLETTER O;Ll;0;L;;;;;N;;;;;
+AB3E;LATIN SMALL LETTER BLACKLETTER O WITH STROKE;Ll;0;L;;;;;N;;;;;
+AB3F;LATIN SMALL LETTER OPEN O WITH STROKE;Ll;0;L;;;;;N;;;;;
+AB40;LATIN SMALL LETTER INVERTED OE;Ll;0;L;;;;;N;;;;;
+AB41;LATIN SMALL LETTER TURNED OE WITH STROKE;Ll;0;L;;;;;N;;;;;
+AB42;LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE;Ll;0;L;;;;;N;;;;;
+AB43;LATIN SMALL LETTER TURNED O OPEN-O;Ll;0;L;;;;;N;;;;;
+AB44;LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE;Ll;0;L;;;;;N;;;;;
+AB45;LATIN SMALL LETTER STIRRUP R;Ll;0;L;;;;;N;;;;;
+AB46;LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG;Ll;0;L;;;;;N;;;;;
+AB47;LATIN SMALL LETTER R WITHOUT HANDLE;Ll;0;L;;;;;N;;;;;
+AB48;LATIN SMALL LETTER DOUBLE R;Ll;0;L;;;;;N;;;;;
+AB49;LATIN SMALL LETTER R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;
+AB4A;LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;
+AB4B;LATIN SMALL LETTER SCRIPT R;Ll;0;L;;;;;N;;;;;
+AB4C;LATIN SMALL LETTER SCRIPT R WITH RING;Ll;0;L;;;;;N;;;;;
+AB4D;LATIN SMALL LETTER BASELINE ESH;Ll;0;L;;;;;N;;;;;
+AB4E;LATIN SMALL LETTER U WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;;
+AB4F;LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;;
+AB50;LATIN SMALL LETTER UI;Ll;0;L;;;;;N;;;;;
+AB51;LATIN SMALL LETTER TURNED UI;Ll;0;L;;;;;N;;;;;
+AB52;LATIN SMALL LETTER U WITH LEFT HOOK;Ll;0;L;;;;;N;;;;;
+AB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;A7B3;;A7B3
+AB54;LATIN SMALL LETTER CHI WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;;
+AB55;LATIN SMALL LETTER CHI WITH LOW LEFT SERIF;Ll;0;L;;;;;N;;;;;
+AB56;LATIN SMALL LETTER X WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;;
+AB57;LATIN SMALL LETTER X WITH LONG LEFT LEG;Ll;0;L;;;;;N;;;;;
+AB58;LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING;Ll;0;L;;;;;N;;;;;
+AB59;LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF;Ll;0;L;;;;;N;;;;;
+AB5A;LATIN SMALL LETTER Y WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;;
+AB5B;MODIFIER BREVE WITH INVERTED BREVE;Sk;0;L;;;;;N;;;;;
+AB5C;MODIFIER LETTER SMALL HENG;Lm;0;L;<super> A727;;;;N;;;;;
+AB5D;MODIFIER LETTER SMALL L WITH INVERTED LAZY S;Lm;0;L;<super> AB37;;;;N;;;;;
+AB5E;MODIFIER LETTER SMALL L WITH MIDDLE TILDE;Lm;0;L;<super> 026B;;;;N;;;;;
+AB5F;MODIFIER LETTER SMALL U WITH LEFT HOOK;Lm;0;L;<super> AB52;;;;N;;;;;
+AB60;LATIN SMALL LETTER SAKHA YAT;Ll;0;L;;;;;N;;;;;
+AB61;LATIN SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;;;
+AB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;;
+AB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;;
+AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;;
+AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;;
+AB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+AB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0
+AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1
+AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2
+AB73;CHEROKEE SMALL LETTER O;Ll;0;L;;;;;N;;;13A3;;13A3
+AB74;CHEROKEE SMALL LETTER U;Ll;0;L;;;;;N;;;13A4;;13A4
+AB75;CHEROKEE SMALL LETTER V;Ll;0;L;;;;;N;;;13A5;;13A5
+AB76;CHEROKEE SMALL LETTER GA;Ll;0;L;;;;;N;;;13A6;;13A6
+AB77;CHEROKEE SMALL LETTER KA;Ll;0;L;;;;;N;;;13A7;;13A7
+AB78;CHEROKEE SMALL LETTER GE;Ll;0;L;;;;;N;;;13A8;;13A8
+AB79;CHEROKEE SMALL LETTER GI;Ll;0;L;;;;;N;;;13A9;;13A9
+AB7A;CHEROKEE SMALL LETTER GO;Ll;0;L;;;;;N;;;13AA;;13AA
+AB7B;CHEROKEE SMALL LETTER GU;Ll;0;L;;;;;N;;;13AB;;13AB
+AB7C;CHEROKEE SMALL LETTER GV;Ll;0;L;;;;;N;;;13AC;;13AC
+AB7D;CHEROKEE SMALL LETTER HA;Ll;0;L;;;;;N;;;13AD;;13AD
+AB7E;CHEROKEE SMALL LETTER HE;Ll;0;L;;;;;N;;;13AE;;13AE
+AB7F;CHEROKEE SMALL LETTER HI;Ll;0;L;;;;;N;;;13AF;;13AF
+AB80;CHEROKEE SMALL LETTER HO;Ll;0;L;;;;;N;;;13B0;;13B0
+AB81;CHEROKEE SMALL LETTER HU;Ll;0;L;;;;;N;;;13B1;;13B1
+AB82;CHEROKEE SMALL LETTER HV;Ll;0;L;;;;;N;;;13B2;;13B2
+AB83;CHEROKEE SMALL LETTER LA;Ll;0;L;;;;;N;;;13B3;;13B3
+AB84;CHEROKEE SMALL LETTER LE;Ll;0;L;;;;;N;;;13B4;;13B4
+AB85;CHEROKEE SMALL LETTER LI;Ll;0;L;;;;;N;;;13B5;;13B5
+AB86;CHEROKEE SMALL LETTER LO;Ll;0;L;;;;;N;;;13B6;;13B6
+AB87;CHEROKEE SMALL LETTER LU;Ll;0;L;;;;;N;;;13B7;;13B7
+AB88;CHEROKEE SMALL LETTER LV;Ll;0;L;;;;;N;;;13B8;;13B8
+AB89;CHEROKEE SMALL LETTER MA;Ll;0;L;;;;;N;;;13B9;;13B9
+AB8A;CHEROKEE SMALL LETTER ME;Ll;0;L;;;;;N;;;13BA;;13BA
+AB8B;CHEROKEE SMALL LETTER MI;Ll;0;L;;;;;N;;;13BB;;13BB
+AB8C;CHEROKEE SMALL LETTER MO;Ll;0;L;;;;;N;;;13BC;;13BC
+AB8D;CHEROKEE SMALL LETTER MU;Ll;0;L;;;;;N;;;13BD;;13BD
+AB8E;CHEROKEE SMALL LETTER NA;Ll;0;L;;;;;N;;;13BE;;13BE
+AB8F;CHEROKEE SMALL LETTER HNA;Ll;0;L;;;;;N;;;13BF;;13BF
+AB90;CHEROKEE SMALL LETTER NAH;Ll;0;L;;;;;N;;;13C0;;13C0
+AB91;CHEROKEE SMALL LETTER NE;Ll;0;L;;;;;N;;;13C1;;13C1
+AB92;CHEROKEE SMALL LETTER NI;Ll;0;L;;;;;N;;;13C2;;13C2
+AB93;CHEROKEE SMALL LETTER NO;Ll;0;L;;;;;N;;;13C3;;13C3
+AB94;CHEROKEE SMALL LETTER NU;Ll;0;L;;;;;N;;;13C4;;13C4
+AB95;CHEROKEE SMALL LETTER NV;Ll;0;L;;;;;N;;;13C5;;13C5
+AB96;CHEROKEE SMALL LETTER QUA;Ll;0;L;;;;;N;;;13C6;;13C6
+AB97;CHEROKEE SMALL LETTER QUE;Ll;0;L;;;;;N;;;13C7;;13C7
+AB98;CHEROKEE SMALL LETTER QUI;Ll;0;L;;;;;N;;;13C8;;13C8
+AB99;CHEROKEE SMALL LETTER QUO;Ll;0;L;;;;;N;;;13C9;;13C9
+AB9A;CHEROKEE SMALL LETTER QUU;Ll;0;L;;;;;N;;;13CA;;13CA
+AB9B;CHEROKEE SMALL LETTER QUV;Ll;0;L;;;;;N;;;13CB;;13CB
+AB9C;CHEROKEE SMALL LETTER SA;Ll;0;L;;;;;N;;;13CC;;13CC
+AB9D;CHEROKEE SMALL LETTER S;Ll;0;L;;;;;N;;;13CD;;13CD
+AB9E;CHEROKEE SMALL LETTER SE;Ll;0;L;;;;;N;;;13CE;;13CE
+AB9F;CHEROKEE SMALL LETTER SI;Ll;0;L;;;;;N;;;13CF;;13CF
+ABA0;CHEROKEE SMALL LETTER SO;Ll;0;L;;;;;N;;;13D0;;13D0
+ABA1;CHEROKEE SMALL LETTER SU;Ll;0;L;;;;;N;;;13D1;;13D1
+ABA2;CHEROKEE SMALL LETTER SV;Ll;0;L;;;;;N;;;13D2;;13D2
+ABA3;CHEROKEE SMALL LETTER DA;Ll;0;L;;;;;N;;;13D3;;13D3
+ABA4;CHEROKEE SMALL LETTER TA;Ll;0;L;;;;;N;;;13D4;;13D4
+ABA5;CHEROKEE SMALL LETTER DE;Ll;0;L;;;;;N;;;13D5;;13D5
+ABA6;CHEROKEE SMALL LETTER TE;Ll;0;L;;;;;N;;;13D6;;13D6
+ABA7;CHEROKEE SMALL LETTER DI;Ll;0;L;;;;;N;;;13D7;;13D7
+ABA8;CHEROKEE SMALL LETTER TI;Ll;0;L;;;;;N;;;13D8;;13D8
+ABA9;CHEROKEE SMALL LETTER DO;Ll;0;L;;;;;N;;;13D9;;13D9
+ABAA;CHEROKEE SMALL LETTER DU;Ll;0;L;;;;;N;;;13DA;;13DA
+ABAB;CHEROKEE SMALL LETTER DV;Ll;0;L;;;;;N;;;13DB;;13DB
+ABAC;CHEROKEE SMALL LETTER DLA;Ll;0;L;;;;;N;;;13DC;;13DC
+ABAD;CHEROKEE SMALL LETTER TLA;Ll;0;L;;;;;N;;;13DD;;13DD
+ABAE;CHEROKEE SMALL LETTER TLE;Ll;0;L;;;;;N;;;13DE;;13DE
+ABAF;CHEROKEE SMALL LETTER TLI;Ll;0;L;;;;;N;;;13DF;;13DF
+ABB0;CHEROKEE SMALL LETTER TLO;Ll;0;L;;;;;N;;;13E0;;13E0
+ABB1;CHEROKEE SMALL LETTER TLU;Ll;0;L;;;;;N;;;13E1;;13E1
+ABB2;CHEROKEE SMALL LETTER TLV;Ll;0;L;;;;;N;;;13E2;;13E2
+ABB3;CHEROKEE SMALL LETTER TSA;Ll;0;L;;;;;N;;;13E3;;13E3
+ABB4;CHEROKEE SMALL LETTER TSE;Ll;0;L;;;;;N;;;13E4;;13E4
+ABB5;CHEROKEE SMALL LETTER TSI;Ll;0;L;;;;;N;;;13E5;;13E5
+ABB6;CHEROKEE SMALL LETTER TSO;Ll;0;L;;;;;N;;;13E6;;13E6
+ABB7;CHEROKEE SMALL LETTER TSU;Ll;0;L;;;;;N;;;13E7;;13E7
+ABB8;CHEROKEE SMALL LETTER TSV;Ll;0;L;;;;;N;;;13E8;;13E8
+ABB9;CHEROKEE SMALL LETTER WA;Ll;0;L;;;;;N;;;13E9;;13E9
+ABBA;CHEROKEE SMALL LETTER WE;Ll;0;L;;;;;N;;;13EA;;13EA
+ABBB;CHEROKEE SMALL LETTER WI;Ll;0;L;;;;;N;;;13EB;;13EB
+ABBC;CHEROKEE SMALL LETTER WO;Ll;0;L;;;;;N;;;13EC;;13EC
+ABBD;CHEROKEE SMALL LETTER WU;Ll;0;L;;;;;N;;;13ED;;13ED
+ABBE;CHEROKEE SMALL LETTER WV;Ll;0;L;;;;;N;;;13EE;;13EE
+ABBF;CHEROKEE SMALL LETTER YA;Ll;0;L;;;;;N;;;13EF;;13EF
+ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;;
+ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;;
+ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;;
+ABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;;
+ABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;;
+ABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;;
+ABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;;
+ABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;;
+ABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;;
+ABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;;
+ABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;;
+ABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;;
+ABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;;
+ABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;;
+ABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;;
+ABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;;
+ABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;;
+ABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;;
+ABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;;
+ABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;;
+ABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;;
+ABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;;
+ABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;;
+ABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;;
+ABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;;
+ABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;;
+ABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;;
+ABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;;
+ABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;;
+ABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;;
+ABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;;
+ABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;;
+ABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;;
+ABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;;
+ABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;;
+ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;;
+ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;;
+ABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;;
+ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;;
+ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;;
+ABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;;
+ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;;
+ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;;
+ABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;;
+ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;;
+ABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;;
+ABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;;
+D7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;;
+D7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;;
+D7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;;
+D7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;;
+D7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;;
+D7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;;
+D7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;;
+D7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;;
+D7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;;
+D7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;;
+D7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;;
+D7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;;
+D7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;;
+D7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;;
+D7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;;
+D7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;;
+D7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;;
+D7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;;
+D7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;;
+D7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;;
+D7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;;
+D7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;;
+D7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;;
+D7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;;
+D7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;
+D7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;
+D7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;;
+D7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+D7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;;
+D7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;;
+D7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+D7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;;
+D7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+D7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+D7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+D7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;;
+D7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;;
+D7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+D7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;;
+D7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+D7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;;
+D7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+D7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;;
+D7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;;
+D7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;;
+D7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+D7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+D7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+D7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+D7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+D7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;;
+D7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+D7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+D7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+D7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+D7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+D7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+D7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;;
+D7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;;
+D7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+D7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;;
+D7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;;
+D7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;;
+FA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;;
+FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
+FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
+FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
+FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;
+FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;
+FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;
+FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;
+FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;
+FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;
+FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;
+FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;
+FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;
+FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;
+FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;
+FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;
+FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;
+FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;
+FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;
+FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;
+FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;
+FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;
+FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;
+FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;
+FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;
+FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;
+FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;
+FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;
+FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;
+FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;
+FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;
+FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;
+FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;
+FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;
+FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;
+FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;
+FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;
+FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;
+FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;
+FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;
+FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;
+FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;
+FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;
+FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;
+FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;
+FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;
+FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;
+FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;
+FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;
+FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;
+FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;
+FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;
+FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;
+FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;
+FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;
+FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;
+FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
+FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
+FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
+FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
+FA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;;
+FA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;;
+FA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;;
+FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
+FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
+FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
+FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
+FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
+FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
+FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
+FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
+FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
+FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
+FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
+FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
+FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
+FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
+FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
+FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
+FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
+FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
+FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
+FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
+FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
+FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
+FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
+FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
+FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
+FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
+FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
+FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
+FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
+FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
+FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
+FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
+FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
+FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
+FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
+FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
+FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
+FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
+FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
+FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
+FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
+FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
+FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
+FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
+FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
+FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
+FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
+FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
+FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
+FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
+FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
+FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
+FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
+FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
+FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
+FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
+FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
+FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
+FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
+FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
+FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
+FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
+FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
+FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
+FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
+FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
+FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
+FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
+FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
+FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
+FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
+FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
+FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
+FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
+FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
+FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
+FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
+FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
+FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
+FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
+FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
+FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
+FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
+FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
+FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
+FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
+FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
+FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
+FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
+FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
+FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
+FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
+FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
+FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
+FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
+FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
+FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
+FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
+FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
+FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
+FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
+FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
+FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
+FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
+FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
+FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;;
+FBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;;
+FBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;;
+FBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;;
+FBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;;
+FBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;;
+FBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;;
+FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;;
+FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;;
+FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;;
+FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
+FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
+FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
+FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
+FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
+FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
+FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
+FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
+FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
+FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
+FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
+FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
+FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
+FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
+FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
+FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
+FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
+FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
+FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
+FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
+FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
+FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
+FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
+FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
+FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
+FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;;
+FE27;COMBINING LIGATURE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
+FE28;COMBINING LIGATURE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
+FE29;COMBINING TILDE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
+FE2A;COMBINING TILDE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
+FE2B;COMBINING MACRON LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
+FE2C;COMBINING MACRON RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;
+FE2D;COMBINING CONJOINING MACRON BELOW;Mn;220;NSM;;;;;N;;;;;
+FE2E;COMBINING CYRILLIC TITLO LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE2F;COMBINING CYRILLIC TITLO RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
+FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;;;;
+FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
+10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;
+10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;
+10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;
+10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;
+10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;
+10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;
+10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;
+10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;
+10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;
+1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;
+1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;
+1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;
+1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;
+1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;
+10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;
+10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;
+10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;
+10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;
+10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;
+10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;
+10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;
+10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;
+10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;
+10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;
+1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;
+1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;
+1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;
+1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;
+1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;
+1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;
+10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;
+10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;
+10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;
+10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;
+10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;
+10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;
+10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;
+10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;
+10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;
+1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;
+1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;
+1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;
+1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;
+1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;
+1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;
+10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;
+10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;
+10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;
+10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;
+10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;
+10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;
+10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;
+10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;
+10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;
+10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;
+1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;
+1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;
+1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;
+1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;
+10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;
+10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;
+10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;
+10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;
+10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;
+10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;
+10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;
+10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;
+10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;
+10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;
+1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;
+1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;
+1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;
+1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;
+10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;
+10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;
+10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;
+10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;
+10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;
+10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;
+10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;
+10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;
+10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;
+10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;
+1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;
+1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;
+1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;
+1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;
+10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;
+10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;
+10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;
+10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;
+10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;
+10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;
+10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;
+10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;
+10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;
+10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;
+1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;
+1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;
+1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;
+1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;
+1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;
+1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;
+10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;
+10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;
+10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;
+10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;
+10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;
+10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;
+10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;
+10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;
+10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;
+10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;
+1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;
+1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;
+1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;
+1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;
+1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;
+1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;
+100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;
+100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;
+100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;
+100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;
+100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;
+100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;
+100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;
+100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;
+100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;
+100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;
+100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;
+100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;
+100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;
+100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;
+100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;
+100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;
+100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;
+100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;
+100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;
+100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;
+100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;
+100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;
+100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;
+100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;
+100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;
+100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;
+100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;
+100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;
+100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;
+100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;
+100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;
+100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;
+100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;
+100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;
+100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;
+100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;
+100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;
+100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;
+100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;
+100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;
+100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;
+100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;;
+100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;
+100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;;
+100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;
+100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;
+100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;
+100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;
+100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;
+100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;
+100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;
+100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;
+100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;
+100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;
+100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;
+100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;
+100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;
+100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;
+100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;
+100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;
+100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;
+100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;
+100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;
+100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;
+100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;
+100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;
+100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;
+100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;
+100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;
+100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;
+100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;
+100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;
+100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;
+100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;
+100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;
+100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;
+100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;
+100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;
+100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;
+100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;
+100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;
+100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;
+100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;
+100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;
+100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;
+100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;
+100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;
+100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;
+100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;
+100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;
+100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
+10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
+10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
+10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;;
+10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
+10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
+10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
+1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;
+1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;
+1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;
+1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;
+10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;
+10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;
+10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;
+10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;
+1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;
+1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;
+1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;
+1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;
+1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;
+10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;
+10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;
+10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;
+10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;
+10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;
+10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;
+10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;
+10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;
+10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;
+1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;
+1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;
+1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;
+1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;
+1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;
+10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;
+10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;
+10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;
+10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;
+10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;
+10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;
+1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
+10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
+10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
+10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
+10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
+10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
+10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
+10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
+1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
+1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
+1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
+1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
+1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
+1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
+10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
+10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
+10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
+10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
+10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
+10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
+10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
+10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
+10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
+10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
+10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
+10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
+10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
+10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
+1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
+1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
+10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
+10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
+10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
+10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
+10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
+10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
+10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
+1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
+1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
+1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
+1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
+10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
+10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
+10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
+10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
+10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
+10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
+10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
+10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
+1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
+1018B;GREEK ONE QUARTER SIGN;No;0;ON;;;;1/4;N;;;;;
+1018C;GREEK SINUSOID SIGN;So;0;ON;;;;;N;;;;;
+1018D;GREEK INDICTION SIGN;So;0;L;;;;;N;;;;;
+1018E;NOMISMA SIGN;So;0;L;;;;;N;;;;;
+10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;
+10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;
+10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;
+10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;;
+10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;;
+10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;;
+10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;;
+10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;;
+10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;;
+10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
+1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
+1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
+101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;;
+101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
+101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
+101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;;
+101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;;
+101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;;
+101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;;
+101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;;
+101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;;
+101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;;
+101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;;
+101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;;
+101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;;
+101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;;
+101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;;
+101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;;
+101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;;
+101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;;
+101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;;
+101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;;
+101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;;
+101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;;
+101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;;
+101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;;
+101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;;
+101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;;
+101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;;
+101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;;
+101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;;
+101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;;
+101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;;
+101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;;
+101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;;
+101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;;
+101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;;
+101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;;
+101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;;
+101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;;
+101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;;
+101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;;
+101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;;
+101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;;
+101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;;
+101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;;
+101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;;
+101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;;
+101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;;
+10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;;
+10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;;
+10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;;
+10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;;
+10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;;
+10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;;
+10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;;
+10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;;
+10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;;
+10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;;
+1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;;
+1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;;
+1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;;
+1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;;
+1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;;
+1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;;
+10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;;
+10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;;
+10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;;
+10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;;
+10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;;
+10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;;
+10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;;
+10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;;
+10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;;
+10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;;
+1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;;
+1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;;
+1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;;
+102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;;
+102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;;
+102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;;
+102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;;
+102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;;
+102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;;
+102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;;
+102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;;
+102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;;
+102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;;
+102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;;
+102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;;
+102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;;
+102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;;
+102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;;
+102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;;
+102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;;
+102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;;
+102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;;
+102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;;
+102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;;
+102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;;
+102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;;
+102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;;
+102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;;
+102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;;
+102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;;
+102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;;
+102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;;
+102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;;
+102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;;
+102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;;
+102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;;
+102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;;
+102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;;
+102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;;
+102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;;
+102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;;
+102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;;
+102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;;
+102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;;
+102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;;
+102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;;
+102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;;
+102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;;
+102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;;
+102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;;
+102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;;
+102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;;
+102E0;COPTIC EPACT THOUSANDS MARK;Mn;220;NSM;;;;;N;;;;;
+102E1;COPTIC EPACT DIGIT ONE;No;0;EN;;;;1;N;;;;;
+102E2;COPTIC EPACT DIGIT TWO;No;0;EN;;;;2;N;;;;;
+102E3;COPTIC EPACT DIGIT THREE;No;0;EN;;;;3;N;;;;;
+102E4;COPTIC EPACT DIGIT FOUR;No;0;EN;;;;4;N;;;;;
+102E5;COPTIC EPACT DIGIT FIVE;No;0;EN;;;;5;N;;;;;
+102E6;COPTIC EPACT DIGIT SIX;No;0;EN;;;;6;N;;;;;
+102E7;COPTIC EPACT DIGIT SEVEN;No;0;EN;;;;7;N;;;;;
+102E8;COPTIC EPACT DIGIT EIGHT;No;0;EN;;;;8;N;;;;;
+102E9;COPTIC EPACT DIGIT NINE;No;0;EN;;;;9;N;;;;;
+102EA;COPTIC EPACT NUMBER TEN;No;0;EN;;;;10;N;;;;;
+102EB;COPTIC EPACT NUMBER TWENTY;No;0;EN;;;;20;N;;;;;
+102EC;COPTIC EPACT NUMBER THIRTY;No;0;EN;;;;30;N;;;;;
+102ED;COPTIC EPACT NUMBER FORTY;No;0;EN;;;;40;N;;;;;
+102EE;COPTIC EPACT NUMBER FIFTY;No;0;EN;;;;50;N;;;;;
+102EF;COPTIC EPACT NUMBER SIXTY;No;0;EN;;;;60;N;;;;;
+102F0;COPTIC EPACT NUMBER SEVENTY;No;0;EN;;;;70;N;;;;;
+102F1;COPTIC EPACT NUMBER EIGHTY;No;0;EN;;;;80;N;;;;;
+102F2;COPTIC EPACT NUMBER NINETY;No;0;EN;;;;90;N;;;;;
+102F3;COPTIC EPACT NUMBER ONE HUNDRED;No;0;EN;;;;100;N;;;;;
+102F4;COPTIC EPACT NUMBER TWO HUNDRED;No;0;EN;;;;200;N;;;;;
+102F5;COPTIC EPACT NUMBER THREE HUNDRED;No;0;EN;;;;300;N;;;;;
+102F6;COPTIC EPACT NUMBER FOUR HUNDRED;No;0;EN;;;;400;N;;;;;
+102F7;COPTIC EPACT NUMBER FIVE HUNDRED;No;0;EN;;;;500;N;;;;;
+102F8;COPTIC EPACT NUMBER SIX HUNDRED;No;0;EN;;;;600;N;;;;;
+102F9;COPTIC EPACT NUMBER SEVEN HUNDRED;No;0;EN;;;;700;N;;;;;
+102FA;COPTIC EPACT NUMBER EIGHT HUNDRED;No;0;EN;;;;800;N;;;;;
+102FB;COPTIC EPACT NUMBER NINE HUNDRED;No;0;EN;;;;900;N;;;;;
+10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
+10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
+10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
+10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;
+10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;
+10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;
+10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;
+10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;
+10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;
+10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;
+1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;
+1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;
+1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;
+1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;
+1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;
+1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;;
+10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;
+10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;
+10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;
+10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;
+10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;
+10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;
+10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;
+10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;;
+10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;
+10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;
+1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;
+1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;;
+1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;;
+1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;;
+1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;;
+1031F;OLD ITALIC LETTER ESS;Lo;0;L;;;;;N;;;;;
+10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;
+10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
+10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
+1032D;OLD ITALIC LETTER YE;Lo;0;L;;;;;N;;;;;
+1032E;OLD ITALIC LETTER NORTHERN TSE;Lo;0;L;;;;;N;;;;;
+1032F;OLD ITALIC LETTER SOUTHERN TSE;Lo;0;L;;;;;N;;;;;
+10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
+10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
+10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
+10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;
+10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;
+10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;
+10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;
+10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;
+10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;
+10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;
+1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;
+1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;
+1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;
+1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;
+1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
+1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
+10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
+10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;
+10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
+10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
+10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
+10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;
+10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;
+10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
+10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
+10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
+1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
+10350;OLD PERMIC LETTER AN;Lo;0;L;;;;;N;;;;;
+10351;OLD PERMIC LETTER BUR;Lo;0;L;;;;;N;;;;;
+10352;OLD PERMIC LETTER GAI;Lo;0;L;;;;;N;;;;;
+10353;OLD PERMIC LETTER DOI;Lo;0;L;;;;;N;;;;;
+10354;OLD PERMIC LETTER E;Lo;0;L;;;;;N;;;;;
+10355;OLD PERMIC LETTER ZHOI;Lo;0;L;;;;;N;;;;;
+10356;OLD PERMIC LETTER DZHOI;Lo;0;L;;;;;N;;;;;
+10357;OLD PERMIC LETTER ZATA;Lo;0;L;;;;;N;;;;;
+10358;OLD PERMIC LETTER DZITA;Lo;0;L;;;;;N;;;;;
+10359;OLD PERMIC LETTER I;Lo;0;L;;;;;N;;;;;
+1035A;OLD PERMIC LETTER KOKE;Lo;0;L;;;;;N;;;;;
+1035B;OLD PERMIC LETTER LEI;Lo;0;L;;;;;N;;;;;
+1035C;OLD PERMIC LETTER MENOE;Lo;0;L;;;;;N;;;;;
+1035D;OLD PERMIC LETTER NENOE;Lo;0;L;;;;;N;;;;;
+1035E;OLD PERMIC LETTER VOOI;Lo;0;L;;;;;N;;;;;
+1035F;OLD PERMIC LETTER PEEI;Lo;0;L;;;;;N;;;;;
+10360;OLD PERMIC LETTER REI;Lo;0;L;;;;;N;;;;;
+10361;OLD PERMIC LETTER SII;Lo;0;L;;;;;N;;;;;
+10362;OLD PERMIC LETTER TAI;Lo;0;L;;;;;N;;;;;
+10363;OLD PERMIC LETTER U;Lo;0;L;;;;;N;;;;;
+10364;OLD PERMIC LETTER CHERY;Lo;0;L;;;;;N;;;;;
+10365;OLD PERMIC LETTER SHOOI;Lo;0;L;;;;;N;;;;;
+10366;OLD PERMIC LETTER SHCHOOI;Lo;0;L;;;;;N;;;;;
+10367;OLD PERMIC LETTER YRY;Lo;0;L;;;;;N;;;;;
+10368;OLD PERMIC LETTER YERU;Lo;0;L;;;;;N;;;;;
+10369;OLD PERMIC LETTER O;Lo;0;L;;;;;N;;;;;
+1036A;OLD PERMIC LETTER OO;Lo;0;L;;;;;N;;;;;
+1036B;OLD PERMIC LETTER EF;Lo;0;L;;;;;N;;;;;
+1036C;OLD PERMIC LETTER HA;Lo;0;L;;;;;N;;;;;
+1036D;OLD PERMIC LETTER TSIU;Lo;0;L;;;;;N;;;;;
+1036E;OLD PERMIC LETTER VER;Lo;0;L;;;;;N;;;;;
+1036F;OLD PERMIC LETTER YER;Lo;0;L;;;;;N;;;;;
+10370;OLD PERMIC LETTER YERI;Lo;0;L;;;;;N;;;;;
+10371;OLD PERMIC LETTER YAT;Lo;0;L;;;;;N;;;;;
+10372;OLD PERMIC LETTER IE;Lo;0;L;;;;;N;;;;;
+10373;OLD PERMIC LETTER YU;Lo;0;L;;;;;N;;;;;
+10374;OLD PERMIC LETTER YA;Lo;0;L;;;;;N;;;;;
+10375;OLD PERMIC LETTER IA;Lo;0;L;;;;;N;;;;;
+10376;COMBINING OLD PERMIC LETTER AN;Mn;230;NSM;;;;;N;;;;;
+10377;COMBINING OLD PERMIC LETTER DOI;Mn;230;NSM;;;;;N;;;;;
+10378;COMBINING OLD PERMIC LETTER ZATA;Mn;230;NSM;;;;;N;;;;;
+10379;COMBINING OLD PERMIC LETTER NENOE;Mn;230;NSM;;;;;N;;;;;
+1037A;COMBINING OLD PERMIC LETTER SII;Mn;230;NSM;;;;;N;;;;;
+10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
+10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
+10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
+10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;
+10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;
+10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;
+10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;
+10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;
+10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;
+10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;
+1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;
+1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;
+1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;
+1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;
+1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;
+1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;
+10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;
+10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;
+10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;
+10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;
+10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;
+10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;
+10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;
+10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;
+10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;
+10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;
+1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;
+1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;
+1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
+1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
+1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
+103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
+103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
+103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
+103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
+103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
+103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
+103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
+103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
+103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
+103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
+103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
+103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
+103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
+103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
+103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
+103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
+103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
+103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
+103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
+103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
+103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
+103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
+103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
+103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
+103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
+103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
+103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
+103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
+103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
+103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
+103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
+103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
+103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
+103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
+103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
+103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
+103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
+103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
+103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
+103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
+103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
+103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
+103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
+103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;
+103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;
+103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;
+103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;
+103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;
+10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
+10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
+10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
+10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;
+10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;
+10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;
+10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;
+10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;
+10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;
+10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;
+1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;
+1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;
+1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;
+1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;
+1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;
+1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;
+10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;
+10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;
+10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;
+10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;
+10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;
+10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;
+10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;
+10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;
+10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;
+10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;
+1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;
+1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;
+1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;
+1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;
+1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;
+1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;
+10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;
+10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;
+10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;
+10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;
+10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;
+10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;
+10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;
+10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;
+10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400
+10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401
+1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402
+1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403
+1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404
+1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405
+1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406
+1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407
+10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408
+10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409
+10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A
+10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B
+10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C
+10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D
+10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E
+10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F
+10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410
+10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411
+1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412
+1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413
+1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414
+1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415
+1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416
+1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417
+10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418
+10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419
+10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A
+10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B
+10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C
+10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D
+10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E
+10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F
+10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420
+10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421
+1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422
+1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423
+1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424
+1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425
+1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426
+1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427
+10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;
+10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;
+10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;
+10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;
+10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;
+10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;
+10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;
+10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;
+10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;
+10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;
+1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;
+1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;
+1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;
+1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;
+1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;
+1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;
+10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;
+10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;
+10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;
+10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;
+10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;
+10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;
+10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;
+10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;
+10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;
+10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;
+1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;
+1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;
+1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;
+1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;
+1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;
+1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;
+10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;
+10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;
+10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;
+10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;
+10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;
+10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;
+10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;
+10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;
+10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;
+10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;
+1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;
+1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;
+1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;
+1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;
+1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;
+1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;
+10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;
+10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;
+10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;
+10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;
+10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;
+10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;
+10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;
+10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;
+10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;
+1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;
+1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;
+1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;
+1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;
+1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;
+10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;
+10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;
+10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;
+10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;
+10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;
+10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;
+10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;
+10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;
+10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;
+10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;
+1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;
+1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;
+1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;
+1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;
+104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104B0;OSAGE CAPITAL LETTER A;Lu;0;L;;;;;N;;;;104D8;
+104B1;OSAGE CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;104D9;
+104B2;OSAGE CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;104DA;
+104B3;OSAGE CAPITAL LETTER AH;Lu;0;L;;;;;N;;;;104DB;
+104B4;OSAGE CAPITAL LETTER BRA;Lu;0;L;;;;;N;;;;104DC;
+104B5;OSAGE CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;104DD;
+104B6;OSAGE CAPITAL LETTER EHCHA;Lu;0;L;;;;;N;;;;104DE;
+104B7;OSAGE CAPITAL LETTER E;Lu;0;L;;;;;N;;;;104DF;
+104B8;OSAGE CAPITAL LETTER EIN;Lu;0;L;;;;;N;;;;104E0;
+104B9;OSAGE CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;104E1;
+104BA;OSAGE CAPITAL LETTER HYA;Lu;0;L;;;;;N;;;;104E2;
+104BB;OSAGE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;104E3;
+104BC;OSAGE CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;104E4;
+104BD;OSAGE CAPITAL LETTER EHKA;Lu;0;L;;;;;N;;;;104E5;
+104BE;OSAGE CAPITAL LETTER KYA;Lu;0;L;;;;;N;;;;104E6;
+104BF;OSAGE CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;104E7;
+104C0;OSAGE CAPITAL LETTER MA;Lu;0;L;;;;;N;;;;104E8;
+104C1;OSAGE CAPITAL LETTER NA;Lu;0;L;;;;;N;;;;104E9;
+104C2;OSAGE CAPITAL LETTER O;Lu;0;L;;;;;N;;;;104EA;
+104C3;OSAGE CAPITAL LETTER OIN;Lu;0;L;;;;;N;;;;104EB;
+104C4;OSAGE CAPITAL LETTER PA;Lu;0;L;;;;;N;;;;104EC;
+104C5;OSAGE CAPITAL LETTER EHPA;Lu;0;L;;;;;N;;;;104ED;
+104C6;OSAGE CAPITAL LETTER SA;Lu;0;L;;;;;N;;;;104EE;
+104C7;OSAGE CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;104EF;
+104C8;OSAGE CAPITAL LETTER TA;Lu;0;L;;;;;N;;;;104F0;
+104C9;OSAGE CAPITAL LETTER EHTA;Lu;0;L;;;;;N;;;;104F1;
+104CA;OSAGE CAPITAL LETTER TSA;Lu;0;L;;;;;N;;;;104F2;
+104CB;OSAGE CAPITAL LETTER EHTSA;Lu;0;L;;;;;N;;;;104F3;
+104CC;OSAGE CAPITAL LETTER TSHA;Lu;0;L;;;;;N;;;;104F4;
+104CD;OSAGE CAPITAL LETTER DHA;Lu;0;L;;;;;N;;;;104F5;
+104CE;OSAGE CAPITAL LETTER U;Lu;0;L;;;;;N;;;;104F6;
+104CF;OSAGE CAPITAL LETTER WA;Lu;0;L;;;;;N;;;;104F7;
+104D0;OSAGE CAPITAL LETTER KHA;Lu;0;L;;;;;N;;;;104F8;
+104D1;OSAGE CAPITAL LETTER GHA;Lu;0;L;;;;;N;;;;104F9;
+104D2;OSAGE CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;104FA;
+104D3;OSAGE CAPITAL LETTER ZHA;Lu;0;L;;;;;N;;;;104FB;
+104D8;OSAGE SMALL LETTER A;Ll;0;L;;;;;N;;;104B0;;104B0
+104D9;OSAGE SMALL LETTER AI;Ll;0;L;;;;;N;;;104B1;;104B1
+104DA;OSAGE SMALL LETTER AIN;Ll;0;L;;;;;N;;;104B2;;104B2
+104DB;OSAGE SMALL LETTER AH;Ll;0;L;;;;;N;;;104B3;;104B3
+104DC;OSAGE SMALL LETTER BRA;Ll;0;L;;;;;N;;;104B4;;104B4
+104DD;OSAGE SMALL LETTER CHA;Ll;0;L;;;;;N;;;104B5;;104B5
+104DE;OSAGE SMALL LETTER EHCHA;Ll;0;L;;;;;N;;;104B6;;104B6
+104DF;OSAGE SMALL LETTER E;Ll;0;L;;;;;N;;;104B7;;104B7
+104E0;OSAGE SMALL LETTER EIN;Ll;0;L;;;;;N;;;104B8;;104B8
+104E1;OSAGE SMALL LETTER HA;Ll;0;L;;;;;N;;;104B9;;104B9
+104E2;OSAGE SMALL LETTER HYA;Ll;0;L;;;;;N;;;104BA;;104BA
+104E3;OSAGE SMALL LETTER I;Ll;0;L;;;;;N;;;104BB;;104BB
+104E4;OSAGE SMALL LETTER KA;Ll;0;L;;;;;N;;;104BC;;104BC
+104E5;OSAGE SMALL LETTER EHKA;Ll;0;L;;;;;N;;;104BD;;104BD
+104E6;OSAGE SMALL LETTER KYA;Ll;0;L;;;;;N;;;104BE;;104BE
+104E7;OSAGE SMALL LETTER LA;Ll;0;L;;;;;N;;;104BF;;104BF
+104E8;OSAGE SMALL LETTER MA;Ll;0;L;;;;;N;;;104C0;;104C0
+104E9;OSAGE SMALL LETTER NA;Ll;0;L;;;;;N;;;104C1;;104C1
+104EA;OSAGE SMALL LETTER O;Ll;0;L;;;;;N;;;104C2;;104C2
+104EB;OSAGE SMALL LETTER OIN;Ll;0;L;;;;;N;;;104C3;;104C3
+104EC;OSAGE SMALL LETTER PA;Ll;0;L;;;;;N;;;104C4;;104C4
+104ED;OSAGE SMALL LETTER EHPA;Ll;0;L;;;;;N;;;104C5;;104C5
+104EE;OSAGE SMALL LETTER SA;Ll;0;L;;;;;N;;;104C6;;104C6
+104EF;OSAGE SMALL LETTER SHA;Ll;0;L;;;;;N;;;104C7;;104C7
+104F0;OSAGE SMALL LETTER TA;Ll;0;L;;;;;N;;;104C8;;104C8
+104F1;OSAGE SMALL LETTER EHTA;Ll;0;L;;;;;N;;;104C9;;104C9
+104F2;OSAGE SMALL LETTER TSA;Ll;0;L;;;;;N;;;104CA;;104CA
+104F3;OSAGE SMALL LETTER EHTSA;Ll;0;L;;;;;N;;;104CB;;104CB
+104F4;OSAGE SMALL LETTER TSHA;Ll;0;L;;;;;N;;;104CC;;104CC
+104F5;OSAGE SMALL LETTER DHA;Ll;0;L;;;;;N;;;104CD;;104CD
+104F6;OSAGE SMALL LETTER U;Ll;0;L;;;;;N;;;104CE;;104CE
+104F7;OSAGE SMALL LETTER WA;Ll;0;L;;;;;N;;;104CF;;104CF
+104F8;OSAGE SMALL LETTER KHA;Ll;0;L;;;;;N;;;104D0;;104D0
+104F9;OSAGE SMALL LETTER GHA;Ll;0;L;;;;;N;;;104D1;;104D1
+104FA;OSAGE SMALL LETTER ZA;Ll;0;L;;;;;N;;;104D2;;104D2
+104FB;OSAGE SMALL LETTER ZHA;Ll;0;L;;;;;N;;;104D3;;104D3
+10500;ELBASAN LETTER A;Lo;0;L;;;;;N;;;;;
+10501;ELBASAN LETTER BE;Lo;0;L;;;;;N;;;;;
+10502;ELBASAN LETTER CE;Lo;0;L;;;;;N;;;;;
+10503;ELBASAN LETTER CHE;Lo;0;L;;;;;N;;;;;
+10504;ELBASAN LETTER DE;Lo;0;L;;;;;N;;;;;
+10505;ELBASAN LETTER NDE;Lo;0;L;;;;;N;;;;;
+10506;ELBASAN LETTER DHE;Lo;0;L;;;;;N;;;;;
+10507;ELBASAN LETTER EI;Lo;0;L;;;;;N;;;;;
+10508;ELBASAN LETTER E;Lo;0;L;;;;;N;;;;;
+10509;ELBASAN LETTER FE;Lo;0;L;;;;;N;;;;;
+1050A;ELBASAN LETTER GE;Lo;0;L;;;;;N;;;;;
+1050B;ELBASAN LETTER GJE;Lo;0;L;;;;;N;;;;;
+1050C;ELBASAN LETTER HE;Lo;0;L;;;;;N;;;;;
+1050D;ELBASAN LETTER I;Lo;0;L;;;;;N;;;;;
+1050E;ELBASAN LETTER JE;Lo;0;L;;;;;N;;;;;
+1050F;ELBASAN LETTER KE;Lo;0;L;;;;;N;;;;;
+10510;ELBASAN LETTER LE;Lo;0;L;;;;;N;;;;;
+10511;ELBASAN LETTER LLE;Lo;0;L;;;;;N;;;;;
+10512;ELBASAN LETTER ME;Lo;0;L;;;;;N;;;;;
+10513;ELBASAN LETTER NE;Lo;0;L;;;;;N;;;;;
+10514;ELBASAN LETTER NA;Lo;0;L;;;;;N;;;;;
+10515;ELBASAN LETTER NJE;Lo;0;L;;;;;N;;;;;
+10516;ELBASAN LETTER O;Lo;0;L;;;;;N;;;;;
+10517;ELBASAN LETTER PE;Lo;0;L;;;;;N;;;;;
+10518;ELBASAN LETTER QE;Lo;0;L;;;;;N;;;;;
+10519;ELBASAN LETTER RE;Lo;0;L;;;;;N;;;;;
+1051A;ELBASAN LETTER RRE;Lo;0;L;;;;;N;;;;;
+1051B;ELBASAN LETTER SE;Lo;0;L;;;;;N;;;;;
+1051C;ELBASAN LETTER SHE;Lo;0;L;;;;;N;;;;;
+1051D;ELBASAN LETTER TE;Lo;0;L;;;;;N;;;;;
+1051E;ELBASAN LETTER THE;Lo;0;L;;;;;N;;;;;
+1051F;ELBASAN LETTER U;Lo;0;L;;;;;N;;;;;
+10520;ELBASAN LETTER VE;Lo;0;L;;;;;N;;;;;
+10521;ELBASAN LETTER XE;Lo;0;L;;;;;N;;;;;
+10522;ELBASAN LETTER Y;Lo;0;L;;;;;N;;;;;
+10523;ELBASAN LETTER ZE;Lo;0;L;;;;;N;;;;;
+10524;ELBASAN LETTER ZHE;Lo;0;L;;;;;N;;;;;
+10525;ELBASAN LETTER GHE;Lo;0;L;;;;;N;;;;;
+10526;ELBASAN LETTER GHAMMA;Lo;0;L;;;;;N;;;;;
+10527;ELBASAN LETTER KHE;Lo;0;L;;;;;N;;;;;
+10530;CAUCASIAN ALBANIAN LETTER ALT;Lo;0;L;;;;;N;;;;;
+10531;CAUCASIAN ALBANIAN LETTER BET;Lo;0;L;;;;;N;;;;;
+10532;CAUCASIAN ALBANIAN LETTER GIM;Lo;0;L;;;;;N;;;;;
+10533;CAUCASIAN ALBANIAN LETTER DAT;Lo;0;L;;;;;N;;;;;
+10534;CAUCASIAN ALBANIAN LETTER EB;Lo;0;L;;;;;N;;;;;
+10535;CAUCASIAN ALBANIAN LETTER ZARL;Lo;0;L;;;;;N;;;;;
+10536;CAUCASIAN ALBANIAN LETTER EYN;Lo;0;L;;;;;N;;;;;
+10537;CAUCASIAN ALBANIAN LETTER ZHIL;Lo;0;L;;;;;N;;;;;
+10538;CAUCASIAN ALBANIAN LETTER TAS;Lo;0;L;;;;;N;;;;;
+10539;CAUCASIAN ALBANIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1053A;CAUCASIAN ALBANIAN LETTER YOWD;Lo;0;L;;;;;N;;;;;
+1053B;CAUCASIAN ALBANIAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+1053C;CAUCASIAN ALBANIAN LETTER IRB;Lo;0;L;;;;;N;;;;;
+1053D;CAUCASIAN ALBANIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1053E;CAUCASIAN ALBANIAN LETTER LAN;Lo;0;L;;;;;N;;;;;
+1053F;CAUCASIAN ALBANIAN LETTER INYA;Lo;0;L;;;;;N;;;;;
+10540;CAUCASIAN ALBANIAN LETTER XEYN;Lo;0;L;;;;;N;;;;;
+10541;CAUCASIAN ALBANIAN LETTER DYAN;Lo;0;L;;;;;N;;;;;
+10542;CAUCASIAN ALBANIAN LETTER CAR;Lo;0;L;;;;;N;;;;;
+10543;CAUCASIAN ALBANIAN LETTER JHOX;Lo;0;L;;;;;N;;;;;
+10544;CAUCASIAN ALBANIAN LETTER KAR;Lo;0;L;;;;;N;;;;;
+10545;CAUCASIAN ALBANIAN LETTER LYIT;Lo;0;L;;;;;N;;;;;
+10546;CAUCASIAN ALBANIAN LETTER HEYT;Lo;0;L;;;;;N;;;;;
+10547;CAUCASIAN ALBANIAN LETTER QAY;Lo;0;L;;;;;N;;;;;
+10548;CAUCASIAN ALBANIAN LETTER AOR;Lo;0;L;;;;;N;;;;;
+10549;CAUCASIAN ALBANIAN LETTER CHOY;Lo;0;L;;;;;N;;;;;
+1054A;CAUCASIAN ALBANIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1054B;CAUCASIAN ALBANIAN LETTER CYAY;Lo;0;L;;;;;N;;;;;
+1054C;CAUCASIAN ALBANIAN LETTER MAQ;Lo;0;L;;;;;N;;;;;
+1054D;CAUCASIAN ALBANIAN LETTER QAR;Lo;0;L;;;;;N;;;;;
+1054E;CAUCASIAN ALBANIAN LETTER NOWC;Lo;0;L;;;;;N;;;;;
+1054F;CAUCASIAN ALBANIAN LETTER DZYAY;Lo;0;L;;;;;N;;;;;
+10550;CAUCASIAN ALBANIAN LETTER SHAK;Lo;0;L;;;;;N;;;;;
+10551;CAUCASIAN ALBANIAN LETTER JAYN;Lo;0;L;;;;;N;;;;;
+10552;CAUCASIAN ALBANIAN LETTER ON;Lo;0;L;;;;;N;;;;;
+10553;CAUCASIAN ALBANIAN LETTER TYAY;Lo;0;L;;;;;N;;;;;
+10554;CAUCASIAN ALBANIAN LETTER FAM;Lo;0;L;;;;;N;;;;;
+10555;CAUCASIAN ALBANIAN LETTER DZAY;Lo;0;L;;;;;N;;;;;
+10556;CAUCASIAN ALBANIAN LETTER CHAT;Lo;0;L;;;;;N;;;;;
+10557;CAUCASIAN ALBANIAN LETTER PEN;Lo;0;L;;;;;N;;;;;
+10558;CAUCASIAN ALBANIAN LETTER GHEYS;Lo;0;L;;;;;N;;;;;
+10559;CAUCASIAN ALBANIAN LETTER RAT;Lo;0;L;;;;;N;;;;;
+1055A;CAUCASIAN ALBANIAN LETTER SEYK;Lo;0;L;;;;;N;;;;;
+1055B;CAUCASIAN ALBANIAN LETTER VEYZ;Lo;0;L;;;;;N;;;;;
+1055C;CAUCASIAN ALBANIAN LETTER TIWR;Lo;0;L;;;;;N;;;;;
+1055D;CAUCASIAN ALBANIAN LETTER SHOY;Lo;0;L;;;;;N;;;;;
+1055E;CAUCASIAN ALBANIAN LETTER IWN;Lo;0;L;;;;;N;;;;;
+1055F;CAUCASIAN ALBANIAN LETTER CYAW;Lo;0;L;;;;;N;;;;;
+10560;CAUCASIAN ALBANIAN LETTER CAYN;Lo;0;L;;;;;N;;;;;
+10561;CAUCASIAN ALBANIAN LETTER YAYD;Lo;0;L;;;;;N;;;;;
+10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;;
+10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;;
+1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;;
+10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;;
+10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;;
+10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;;
+10603;LINEAR A SIGN AB004;Lo;0;L;;;;;N;;;;;
+10604;LINEAR A SIGN AB005;Lo;0;L;;;;;N;;;;;
+10605;LINEAR A SIGN AB006;Lo;0;L;;;;;N;;;;;
+10606;LINEAR A SIGN AB007;Lo;0;L;;;;;N;;;;;
+10607;LINEAR A SIGN AB008;Lo;0;L;;;;;N;;;;;
+10608;LINEAR A SIGN AB009;Lo;0;L;;;;;N;;;;;
+10609;LINEAR A SIGN AB010;Lo;0;L;;;;;N;;;;;
+1060A;LINEAR A SIGN AB011;Lo;0;L;;;;;N;;;;;
+1060B;LINEAR A SIGN AB013;Lo;0;L;;;;;N;;;;;
+1060C;LINEAR A SIGN AB016;Lo;0;L;;;;;N;;;;;
+1060D;LINEAR A SIGN AB017;Lo;0;L;;;;;N;;;;;
+1060E;LINEAR A SIGN AB020;Lo;0;L;;;;;N;;;;;
+1060F;LINEAR A SIGN AB021;Lo;0;L;;;;;N;;;;;
+10610;LINEAR A SIGN AB021F;Lo;0;L;;;;;N;;;;;
+10611;LINEAR A SIGN AB021M;Lo;0;L;;;;;N;;;;;
+10612;LINEAR A SIGN AB022;Lo;0;L;;;;;N;;;;;
+10613;LINEAR A SIGN AB022F;Lo;0;L;;;;;N;;;;;
+10614;LINEAR A SIGN AB022M;Lo;0;L;;;;;N;;;;;
+10615;LINEAR A SIGN AB023;Lo;0;L;;;;;N;;;;;
+10616;LINEAR A SIGN AB023M;Lo;0;L;;;;;N;;;;;
+10617;LINEAR A SIGN AB024;Lo;0;L;;;;;N;;;;;
+10618;LINEAR A SIGN AB026;Lo;0;L;;;;;N;;;;;
+10619;LINEAR A SIGN AB027;Lo;0;L;;;;;N;;;;;
+1061A;LINEAR A SIGN AB028;Lo;0;L;;;;;N;;;;;
+1061B;LINEAR A SIGN A028B;Lo;0;L;;;;;N;;;;;
+1061C;LINEAR A SIGN AB029;Lo;0;L;;;;;N;;;;;
+1061D;LINEAR A SIGN AB030;Lo;0;L;;;;;N;;;;;
+1061E;LINEAR A SIGN AB031;Lo;0;L;;;;;N;;;;;
+1061F;LINEAR A SIGN AB034;Lo;0;L;;;;;N;;;;;
+10620;LINEAR A SIGN AB037;Lo;0;L;;;;;N;;;;;
+10621;LINEAR A SIGN AB038;Lo;0;L;;;;;N;;;;;
+10622;LINEAR A SIGN AB039;Lo;0;L;;;;;N;;;;;
+10623;LINEAR A SIGN AB040;Lo;0;L;;;;;N;;;;;
+10624;LINEAR A SIGN AB041;Lo;0;L;;;;;N;;;;;
+10625;LINEAR A SIGN AB044;Lo;0;L;;;;;N;;;;;
+10626;LINEAR A SIGN AB045;Lo;0;L;;;;;N;;;;;
+10627;LINEAR A SIGN AB046;Lo;0;L;;;;;N;;;;;
+10628;LINEAR A SIGN AB047;Lo;0;L;;;;;N;;;;;
+10629;LINEAR A SIGN AB048;Lo;0;L;;;;;N;;;;;
+1062A;LINEAR A SIGN AB049;Lo;0;L;;;;;N;;;;;
+1062B;LINEAR A SIGN AB050;Lo;0;L;;;;;N;;;;;
+1062C;LINEAR A SIGN AB051;Lo;0;L;;;;;N;;;;;
+1062D;LINEAR A SIGN AB053;Lo;0;L;;;;;N;;;;;
+1062E;LINEAR A SIGN AB054;Lo;0;L;;;;;N;;;;;
+1062F;LINEAR A SIGN AB055;Lo;0;L;;;;;N;;;;;
+10630;LINEAR A SIGN AB056;Lo;0;L;;;;;N;;;;;
+10631;LINEAR A SIGN AB057;Lo;0;L;;;;;N;;;;;
+10632;LINEAR A SIGN AB058;Lo;0;L;;;;;N;;;;;
+10633;LINEAR A SIGN AB059;Lo;0;L;;;;;N;;;;;
+10634;LINEAR A SIGN AB060;Lo;0;L;;;;;N;;;;;
+10635;LINEAR A SIGN AB061;Lo;0;L;;;;;N;;;;;
+10636;LINEAR A SIGN AB065;Lo;0;L;;;;;N;;;;;
+10637;LINEAR A SIGN AB066;Lo;0;L;;;;;N;;;;;
+10638;LINEAR A SIGN AB067;Lo;0;L;;;;;N;;;;;
+10639;LINEAR A SIGN AB069;Lo;0;L;;;;;N;;;;;
+1063A;LINEAR A SIGN AB070;Lo;0;L;;;;;N;;;;;
+1063B;LINEAR A SIGN AB073;Lo;0;L;;;;;N;;;;;
+1063C;LINEAR A SIGN AB074;Lo;0;L;;;;;N;;;;;
+1063D;LINEAR A SIGN AB076;Lo;0;L;;;;;N;;;;;
+1063E;LINEAR A SIGN AB077;Lo;0;L;;;;;N;;;;;
+1063F;LINEAR A SIGN AB078;Lo;0;L;;;;;N;;;;;
+10640;LINEAR A SIGN AB079;Lo;0;L;;;;;N;;;;;
+10641;LINEAR A SIGN AB080;Lo;0;L;;;;;N;;;;;
+10642;LINEAR A SIGN AB081;Lo;0;L;;;;;N;;;;;
+10643;LINEAR A SIGN AB082;Lo;0;L;;;;;N;;;;;
+10644;LINEAR A SIGN AB085;Lo;0;L;;;;;N;;;;;
+10645;LINEAR A SIGN AB086;Lo;0;L;;;;;N;;;;;
+10646;LINEAR A SIGN AB087;Lo;0;L;;;;;N;;;;;
+10647;LINEAR A SIGN A100-102;Lo;0;L;;;;;N;;;;;
+10648;LINEAR A SIGN AB118;Lo;0;L;;;;;N;;;;;
+10649;LINEAR A SIGN AB120;Lo;0;L;;;;;N;;;;;
+1064A;LINEAR A SIGN A120B;Lo;0;L;;;;;N;;;;;
+1064B;LINEAR A SIGN AB122;Lo;0;L;;;;;N;;;;;
+1064C;LINEAR A SIGN AB123;Lo;0;L;;;;;N;;;;;
+1064D;LINEAR A SIGN AB131A;Lo;0;L;;;;;N;;;;;
+1064E;LINEAR A SIGN AB131B;Lo;0;L;;;;;N;;;;;
+1064F;LINEAR A SIGN A131C;Lo;0;L;;;;;N;;;;;
+10650;LINEAR A SIGN AB164;Lo;0;L;;;;;N;;;;;
+10651;LINEAR A SIGN AB171;Lo;0;L;;;;;N;;;;;
+10652;LINEAR A SIGN AB180;Lo;0;L;;;;;N;;;;;
+10653;LINEAR A SIGN AB188;Lo;0;L;;;;;N;;;;;
+10654;LINEAR A SIGN AB191;Lo;0;L;;;;;N;;;;;
+10655;LINEAR A SIGN A301;Lo;0;L;;;;;N;;;;;
+10656;LINEAR A SIGN A302;Lo;0;L;;;;;N;;;;;
+10657;LINEAR A SIGN A303;Lo;0;L;;;;;N;;;;;
+10658;LINEAR A SIGN A304;Lo;0;L;;;;;N;;;;;
+10659;LINEAR A SIGN A305;Lo;0;L;;;;;N;;;;;
+1065A;LINEAR A SIGN A306;Lo;0;L;;;;;N;;;;;
+1065B;LINEAR A SIGN A307;Lo;0;L;;;;;N;;;;;
+1065C;LINEAR A SIGN A308;Lo;0;L;;;;;N;;;;;
+1065D;LINEAR A SIGN A309A;Lo;0;L;;;;;N;;;;;
+1065E;LINEAR A SIGN A309B;Lo;0;L;;;;;N;;;;;
+1065F;LINEAR A SIGN A309C;Lo;0;L;;;;;N;;;;;
+10660;LINEAR A SIGN A310;Lo;0;L;;;;;N;;;;;
+10661;LINEAR A SIGN A311;Lo;0;L;;;;;N;;;;;
+10662;LINEAR A SIGN A312;Lo;0;L;;;;;N;;;;;
+10663;LINEAR A SIGN A313A;Lo;0;L;;;;;N;;;;;
+10664;LINEAR A SIGN A313B;Lo;0;L;;;;;N;;;;;
+10665;LINEAR A SIGN A313C;Lo;0;L;;;;;N;;;;;
+10666;LINEAR A SIGN A314;Lo;0;L;;;;;N;;;;;
+10667;LINEAR A SIGN A315;Lo;0;L;;;;;N;;;;;
+10668;LINEAR A SIGN A316;Lo;0;L;;;;;N;;;;;
+10669;LINEAR A SIGN A317;Lo;0;L;;;;;N;;;;;
+1066A;LINEAR A SIGN A318;Lo;0;L;;;;;N;;;;;
+1066B;LINEAR A SIGN A319;Lo;0;L;;;;;N;;;;;
+1066C;LINEAR A SIGN A320;Lo;0;L;;;;;N;;;;;
+1066D;LINEAR A SIGN A321;Lo;0;L;;;;;N;;;;;
+1066E;LINEAR A SIGN A322;Lo;0;L;;;;;N;;;;;
+1066F;LINEAR A SIGN A323;Lo;0;L;;;;;N;;;;;
+10670;LINEAR A SIGN A324;Lo;0;L;;;;;N;;;;;
+10671;LINEAR A SIGN A325;Lo;0;L;;;;;N;;;;;
+10672;LINEAR A SIGN A326;Lo;0;L;;;;;N;;;;;
+10673;LINEAR A SIGN A327;Lo;0;L;;;;;N;;;;;
+10674;LINEAR A SIGN A328;Lo;0;L;;;;;N;;;;;
+10675;LINEAR A SIGN A329;Lo;0;L;;;;;N;;;;;
+10676;LINEAR A SIGN A330;Lo;0;L;;;;;N;;;;;
+10677;LINEAR A SIGN A331;Lo;0;L;;;;;N;;;;;
+10678;LINEAR A SIGN A332;Lo;0;L;;;;;N;;;;;
+10679;LINEAR A SIGN A333;Lo;0;L;;;;;N;;;;;
+1067A;LINEAR A SIGN A334;Lo;0;L;;;;;N;;;;;
+1067B;LINEAR A SIGN A335;Lo;0;L;;;;;N;;;;;
+1067C;LINEAR A SIGN A336;Lo;0;L;;;;;N;;;;;
+1067D;LINEAR A SIGN A337;Lo;0;L;;;;;N;;;;;
+1067E;LINEAR A SIGN A338;Lo;0;L;;;;;N;;;;;
+1067F;LINEAR A SIGN A339;Lo;0;L;;;;;N;;;;;
+10680;LINEAR A SIGN A340;Lo;0;L;;;;;N;;;;;
+10681;LINEAR A SIGN A341;Lo;0;L;;;;;N;;;;;
+10682;LINEAR A SIGN A342;Lo;0;L;;;;;N;;;;;
+10683;LINEAR A SIGN A343;Lo;0;L;;;;;N;;;;;
+10684;LINEAR A SIGN A344;Lo;0;L;;;;;N;;;;;
+10685;LINEAR A SIGN A345;Lo;0;L;;;;;N;;;;;
+10686;LINEAR A SIGN A346;Lo;0;L;;;;;N;;;;;
+10687;LINEAR A SIGN A347;Lo;0;L;;;;;N;;;;;
+10688;LINEAR A SIGN A348;Lo;0;L;;;;;N;;;;;
+10689;LINEAR A SIGN A349;Lo;0;L;;;;;N;;;;;
+1068A;LINEAR A SIGN A350;Lo;0;L;;;;;N;;;;;
+1068B;LINEAR A SIGN A351;Lo;0;L;;;;;N;;;;;
+1068C;LINEAR A SIGN A352;Lo;0;L;;;;;N;;;;;
+1068D;LINEAR A SIGN A353;Lo;0;L;;;;;N;;;;;
+1068E;LINEAR A SIGN A354;Lo;0;L;;;;;N;;;;;
+1068F;LINEAR A SIGN A355;Lo;0;L;;;;;N;;;;;
+10690;LINEAR A SIGN A356;Lo;0;L;;;;;N;;;;;
+10691;LINEAR A SIGN A357;Lo;0;L;;;;;N;;;;;
+10692;LINEAR A SIGN A358;Lo;0;L;;;;;N;;;;;
+10693;LINEAR A SIGN A359;Lo;0;L;;;;;N;;;;;
+10694;LINEAR A SIGN A360;Lo;0;L;;;;;N;;;;;
+10695;LINEAR A SIGN A361;Lo;0;L;;;;;N;;;;;
+10696;LINEAR A SIGN A362;Lo;0;L;;;;;N;;;;;
+10697;LINEAR A SIGN A363;Lo;0;L;;;;;N;;;;;
+10698;LINEAR A SIGN A364;Lo;0;L;;;;;N;;;;;
+10699;LINEAR A SIGN A365;Lo;0;L;;;;;N;;;;;
+1069A;LINEAR A SIGN A366;Lo;0;L;;;;;N;;;;;
+1069B;LINEAR A SIGN A367;Lo;0;L;;;;;N;;;;;
+1069C;LINEAR A SIGN A368;Lo;0;L;;;;;N;;;;;
+1069D;LINEAR A SIGN A369;Lo;0;L;;;;;N;;;;;
+1069E;LINEAR A SIGN A370;Lo;0;L;;;;;N;;;;;
+1069F;LINEAR A SIGN A371;Lo;0;L;;;;;N;;;;;
+106A0;LINEAR A SIGN A400-VAS;Lo;0;L;;;;;N;;;;;
+106A1;LINEAR A SIGN A401-VAS;Lo;0;L;;;;;N;;;;;
+106A2;LINEAR A SIGN A402-VAS;Lo;0;L;;;;;N;;;;;
+106A3;LINEAR A SIGN A403-VAS;Lo;0;L;;;;;N;;;;;
+106A4;LINEAR A SIGN A404-VAS;Lo;0;L;;;;;N;;;;;
+106A5;LINEAR A SIGN A405-VAS;Lo;0;L;;;;;N;;;;;
+106A6;LINEAR A SIGN A406-VAS;Lo;0;L;;;;;N;;;;;
+106A7;LINEAR A SIGN A407-VAS;Lo;0;L;;;;;N;;;;;
+106A8;LINEAR A SIGN A408-VAS;Lo;0;L;;;;;N;;;;;
+106A9;LINEAR A SIGN A409-VAS;Lo;0;L;;;;;N;;;;;
+106AA;LINEAR A SIGN A410-VAS;Lo;0;L;;;;;N;;;;;
+106AB;LINEAR A SIGN A411-VAS;Lo;0;L;;;;;N;;;;;
+106AC;LINEAR A SIGN A412-VAS;Lo;0;L;;;;;N;;;;;
+106AD;LINEAR A SIGN A413-VAS;Lo;0;L;;;;;N;;;;;
+106AE;LINEAR A SIGN A414-VAS;Lo;0;L;;;;;N;;;;;
+106AF;LINEAR A SIGN A415-VAS;Lo;0;L;;;;;N;;;;;
+106B0;LINEAR A SIGN A416-VAS;Lo;0;L;;;;;N;;;;;
+106B1;LINEAR A SIGN A417-VAS;Lo;0;L;;;;;N;;;;;
+106B2;LINEAR A SIGN A418-VAS;Lo;0;L;;;;;N;;;;;
+106B3;LINEAR A SIGN A501;Lo;0;L;;;;;N;;;;;
+106B4;LINEAR A SIGN A502;Lo;0;L;;;;;N;;;;;
+106B5;LINEAR A SIGN A503;Lo;0;L;;;;;N;;;;;
+106B6;LINEAR A SIGN A504;Lo;0;L;;;;;N;;;;;
+106B7;LINEAR A SIGN A505;Lo;0;L;;;;;N;;;;;
+106B8;LINEAR A SIGN A506;Lo;0;L;;;;;N;;;;;
+106B9;LINEAR A SIGN A508;Lo;0;L;;;;;N;;;;;
+106BA;LINEAR A SIGN A509;Lo;0;L;;;;;N;;;;;
+106BB;LINEAR A SIGN A510;Lo;0;L;;;;;N;;;;;
+106BC;LINEAR A SIGN A511;Lo;0;L;;;;;N;;;;;
+106BD;LINEAR A SIGN A512;Lo;0;L;;;;;N;;;;;
+106BE;LINEAR A SIGN A513;Lo;0;L;;;;;N;;;;;
+106BF;LINEAR A SIGN A515;Lo;0;L;;;;;N;;;;;
+106C0;LINEAR A SIGN A516;Lo;0;L;;;;;N;;;;;
+106C1;LINEAR A SIGN A520;Lo;0;L;;;;;N;;;;;
+106C2;LINEAR A SIGN A521;Lo;0;L;;;;;N;;;;;
+106C3;LINEAR A SIGN A523;Lo;0;L;;;;;N;;;;;
+106C4;LINEAR A SIGN A524;Lo;0;L;;;;;N;;;;;
+106C5;LINEAR A SIGN A525;Lo;0;L;;;;;N;;;;;
+106C6;LINEAR A SIGN A526;Lo;0;L;;;;;N;;;;;
+106C7;LINEAR A SIGN A527;Lo;0;L;;;;;N;;;;;
+106C8;LINEAR A SIGN A528;Lo;0;L;;;;;N;;;;;
+106C9;LINEAR A SIGN A529;Lo;0;L;;;;;N;;;;;
+106CA;LINEAR A SIGN A530;Lo;0;L;;;;;N;;;;;
+106CB;LINEAR A SIGN A531;Lo;0;L;;;;;N;;;;;
+106CC;LINEAR A SIGN A532;Lo;0;L;;;;;N;;;;;
+106CD;LINEAR A SIGN A534;Lo;0;L;;;;;N;;;;;
+106CE;LINEAR A SIGN A535;Lo;0;L;;;;;N;;;;;
+106CF;LINEAR A SIGN A536;Lo;0;L;;;;;N;;;;;
+106D0;LINEAR A SIGN A537;Lo;0;L;;;;;N;;;;;
+106D1;LINEAR A SIGN A538;Lo;0;L;;;;;N;;;;;
+106D2;LINEAR A SIGN A539;Lo;0;L;;;;;N;;;;;
+106D3;LINEAR A SIGN A540;Lo;0;L;;;;;N;;;;;
+106D4;LINEAR A SIGN A541;Lo;0;L;;;;;N;;;;;
+106D5;LINEAR A SIGN A542;Lo;0;L;;;;;N;;;;;
+106D6;LINEAR A SIGN A545;Lo;0;L;;;;;N;;;;;
+106D7;LINEAR A SIGN A547;Lo;0;L;;;;;N;;;;;
+106D8;LINEAR A SIGN A548;Lo;0;L;;;;;N;;;;;
+106D9;LINEAR A SIGN A549;Lo;0;L;;;;;N;;;;;
+106DA;LINEAR A SIGN A550;Lo;0;L;;;;;N;;;;;
+106DB;LINEAR A SIGN A551;Lo;0;L;;;;;N;;;;;
+106DC;LINEAR A SIGN A552;Lo;0;L;;;;;N;;;;;
+106DD;LINEAR A SIGN A553;Lo;0;L;;;;;N;;;;;
+106DE;LINEAR A SIGN A554;Lo;0;L;;;;;N;;;;;
+106DF;LINEAR A SIGN A555;Lo;0;L;;;;;N;;;;;
+106E0;LINEAR A SIGN A556;Lo;0;L;;;;;N;;;;;
+106E1;LINEAR A SIGN A557;Lo;0;L;;;;;N;;;;;
+106E2;LINEAR A SIGN A559;Lo;0;L;;;;;N;;;;;
+106E3;LINEAR A SIGN A563;Lo;0;L;;;;;N;;;;;
+106E4;LINEAR A SIGN A564;Lo;0;L;;;;;N;;;;;
+106E5;LINEAR A SIGN A565;Lo;0;L;;;;;N;;;;;
+106E6;LINEAR A SIGN A566;Lo;0;L;;;;;N;;;;;
+106E7;LINEAR A SIGN A568;Lo;0;L;;;;;N;;;;;
+106E8;LINEAR A SIGN A569;Lo;0;L;;;;;N;;;;;
+106E9;LINEAR A SIGN A570;Lo;0;L;;;;;N;;;;;
+106EA;LINEAR A SIGN A571;Lo;0;L;;;;;N;;;;;
+106EB;LINEAR A SIGN A572;Lo;0;L;;;;;N;;;;;
+106EC;LINEAR A SIGN A573;Lo;0;L;;;;;N;;;;;
+106ED;LINEAR A SIGN A574;Lo;0;L;;;;;N;;;;;
+106EE;LINEAR A SIGN A575;Lo;0;L;;;;;N;;;;;
+106EF;LINEAR A SIGN A576;Lo;0;L;;;;;N;;;;;
+106F0;LINEAR A SIGN A577;Lo;0;L;;;;;N;;;;;
+106F1;LINEAR A SIGN A578;Lo;0;L;;;;;N;;;;;
+106F2;LINEAR A SIGN A579;Lo;0;L;;;;;N;;;;;
+106F3;LINEAR A SIGN A580;Lo;0;L;;;;;N;;;;;
+106F4;LINEAR A SIGN A581;Lo;0;L;;;;;N;;;;;
+106F5;LINEAR A SIGN A582;Lo;0;L;;;;;N;;;;;
+106F6;LINEAR A SIGN A583;Lo;0;L;;;;;N;;;;;
+106F7;LINEAR A SIGN A584;Lo;0;L;;;;;N;;;;;
+106F8;LINEAR A SIGN A585;Lo;0;L;;;;;N;;;;;
+106F9;LINEAR A SIGN A586;Lo;0;L;;;;;N;;;;;
+106FA;LINEAR A SIGN A587;Lo;0;L;;;;;N;;;;;
+106FB;LINEAR A SIGN A588;Lo;0;L;;;;;N;;;;;
+106FC;LINEAR A SIGN A589;Lo;0;L;;;;;N;;;;;
+106FD;LINEAR A SIGN A591;Lo;0;L;;;;;N;;;;;
+106FE;LINEAR A SIGN A592;Lo;0;L;;;;;N;;;;;
+106FF;LINEAR A SIGN A594;Lo;0;L;;;;;N;;;;;
+10700;LINEAR A SIGN A595;Lo;0;L;;;;;N;;;;;
+10701;LINEAR A SIGN A596;Lo;0;L;;;;;N;;;;;
+10702;LINEAR A SIGN A598;Lo;0;L;;;;;N;;;;;
+10703;LINEAR A SIGN A600;Lo;0;L;;;;;N;;;;;
+10704;LINEAR A SIGN A601;Lo;0;L;;;;;N;;;;;
+10705;LINEAR A SIGN A602;Lo;0;L;;;;;N;;;;;
+10706;LINEAR A SIGN A603;Lo;0;L;;;;;N;;;;;
+10707;LINEAR A SIGN A604;Lo;0;L;;;;;N;;;;;
+10708;LINEAR A SIGN A606;Lo;0;L;;;;;N;;;;;
+10709;LINEAR A SIGN A608;Lo;0;L;;;;;N;;;;;
+1070A;LINEAR A SIGN A609;Lo;0;L;;;;;N;;;;;
+1070B;LINEAR A SIGN A610;Lo;0;L;;;;;N;;;;;
+1070C;LINEAR A SIGN A611;Lo;0;L;;;;;N;;;;;
+1070D;LINEAR A SIGN A612;Lo;0;L;;;;;N;;;;;
+1070E;LINEAR A SIGN A613;Lo;0;L;;;;;N;;;;;
+1070F;LINEAR A SIGN A614;Lo;0;L;;;;;N;;;;;
+10710;LINEAR A SIGN A615;Lo;0;L;;;;;N;;;;;
+10711;LINEAR A SIGN A616;Lo;0;L;;;;;N;;;;;
+10712;LINEAR A SIGN A617;Lo;0;L;;;;;N;;;;;
+10713;LINEAR A SIGN A618;Lo;0;L;;;;;N;;;;;
+10714;LINEAR A SIGN A619;Lo;0;L;;;;;N;;;;;
+10715;LINEAR A SIGN A620;Lo;0;L;;;;;N;;;;;
+10716;LINEAR A SIGN A621;Lo;0;L;;;;;N;;;;;
+10717;LINEAR A SIGN A622;Lo;0;L;;;;;N;;;;;
+10718;LINEAR A SIGN A623;Lo;0;L;;;;;N;;;;;
+10719;LINEAR A SIGN A624;Lo;0;L;;;;;N;;;;;
+1071A;LINEAR A SIGN A626;Lo;0;L;;;;;N;;;;;
+1071B;LINEAR A SIGN A627;Lo;0;L;;;;;N;;;;;
+1071C;LINEAR A SIGN A628;Lo;0;L;;;;;N;;;;;
+1071D;LINEAR A SIGN A629;Lo;0;L;;;;;N;;;;;
+1071E;LINEAR A SIGN A634;Lo;0;L;;;;;N;;;;;
+1071F;LINEAR A SIGN A637;Lo;0;L;;;;;N;;;;;
+10720;LINEAR A SIGN A638;Lo;0;L;;;;;N;;;;;
+10721;LINEAR A SIGN A640;Lo;0;L;;;;;N;;;;;
+10722;LINEAR A SIGN A642;Lo;0;L;;;;;N;;;;;
+10723;LINEAR A SIGN A643;Lo;0;L;;;;;N;;;;;
+10724;LINEAR A SIGN A644;Lo;0;L;;;;;N;;;;;
+10725;LINEAR A SIGN A645;Lo;0;L;;;;;N;;;;;
+10726;LINEAR A SIGN A646;Lo;0;L;;;;;N;;;;;
+10727;LINEAR A SIGN A648;Lo;0;L;;;;;N;;;;;
+10728;LINEAR A SIGN A649;Lo;0;L;;;;;N;;;;;
+10729;LINEAR A SIGN A651;Lo;0;L;;;;;N;;;;;
+1072A;LINEAR A SIGN A652;Lo;0;L;;;;;N;;;;;
+1072B;LINEAR A SIGN A653;Lo;0;L;;;;;N;;;;;
+1072C;LINEAR A SIGN A654;Lo;0;L;;;;;N;;;;;
+1072D;LINEAR A SIGN A655;Lo;0;L;;;;;N;;;;;
+1072E;LINEAR A SIGN A656;Lo;0;L;;;;;N;;;;;
+1072F;LINEAR A SIGN A657;Lo;0;L;;;;;N;;;;;
+10730;LINEAR A SIGN A658;Lo;0;L;;;;;N;;;;;
+10731;LINEAR A SIGN A659;Lo;0;L;;;;;N;;;;;
+10732;LINEAR A SIGN A660;Lo;0;L;;;;;N;;;;;
+10733;LINEAR A SIGN A661;Lo;0;L;;;;;N;;;;;
+10734;LINEAR A SIGN A662;Lo;0;L;;;;;N;;;;;
+10735;LINEAR A SIGN A663;Lo;0;L;;;;;N;;;;;
+10736;LINEAR A SIGN A664;Lo;0;L;;;;;N;;;;;
+10740;LINEAR A SIGN A701 A;Lo;0;L;;;;;N;;;;;
+10741;LINEAR A SIGN A702 B;Lo;0;L;;;;;N;;;;;
+10742;LINEAR A SIGN A703 D;Lo;0;L;;;;;N;;;;;
+10743;LINEAR A SIGN A704 E;Lo;0;L;;;;;N;;;;;
+10744;LINEAR A SIGN A705 F;Lo;0;L;;;;;N;;;;;
+10745;LINEAR A SIGN A706 H;Lo;0;L;;;;;N;;;;;
+10746;LINEAR A SIGN A707 J;Lo;0;L;;;;;N;;;;;
+10747;LINEAR A SIGN A708 K;Lo;0;L;;;;;N;;;;;
+10748;LINEAR A SIGN A709 L;Lo;0;L;;;;;N;;;;;
+10749;LINEAR A SIGN A709-2 L2;Lo;0;L;;;;;N;;;;;
+1074A;LINEAR A SIGN A709-3 L3;Lo;0;L;;;;;N;;;;;
+1074B;LINEAR A SIGN A709-4 L4;Lo;0;L;;;;;N;;;;;
+1074C;LINEAR A SIGN A709-6 L6;Lo;0;L;;;;;N;;;;;
+1074D;LINEAR A SIGN A710 W;Lo;0;L;;;;;N;;;;;
+1074E;LINEAR A SIGN A711 X;Lo;0;L;;;;;N;;;;;
+1074F;LINEAR A SIGN A712 Y;Lo;0;L;;;;;N;;;;;
+10750;LINEAR A SIGN A713 OMEGA;Lo;0;L;;;;;N;;;;;
+10751;LINEAR A SIGN A714 ABB;Lo;0;L;;;;;N;;;;;
+10752;LINEAR A SIGN A715 BB;Lo;0;L;;;;;N;;;;;
+10753;LINEAR A SIGN A717 DD;Lo;0;L;;;;;N;;;;;
+10754;LINEAR A SIGN A726 EYYY;Lo;0;L;;;;;N;;;;;
+10755;LINEAR A SIGN A732 JE;Lo;0;L;;;;;N;;;;;
+10760;LINEAR A SIGN A800;Lo;0;L;;;;;N;;;;;
+10761;LINEAR A SIGN A801;Lo;0;L;;;;;N;;;;;
+10762;LINEAR A SIGN A802;Lo;0;L;;;;;N;;;;;
+10763;LINEAR A SIGN A803;Lo;0;L;;;;;N;;;;;
+10764;LINEAR A SIGN A804;Lo;0;L;;;;;N;;;;;
+10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;;
+10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;;
+10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;;
+10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
+10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
+10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
+10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;
+10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;
+10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;
+10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;
+1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;
+1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;
+1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;
+1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;
+1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;
+1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;
+10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;
+10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;
+10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;
+10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;
+10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;
+10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;
+10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;
+10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;
+10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;
+10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;
+1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;
+1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;
+1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;
+1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;
+1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;
+1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;
+10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;
+10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;
+10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;
+10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;
+10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;
+10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;
+10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;
+10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;
+10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;
+10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;
+1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;
+1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;
+1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;
+1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;
+1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;
+1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;
+10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;
+10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;
+10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;
+10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;
+10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;
+10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;
+10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;
+10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
+1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
+1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
+10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;
+10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;;
+10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;;
+10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;;
+10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;;
+1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;;
+1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;;
+1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;;
+1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;;
+10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;;
+10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;;
+10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;;
+10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;;
+10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;;
+1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;;
+1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;;
+1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;;
+10860;PALMYRENE LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10861;PALMYRENE LETTER BETH;Lo;0;R;;;;;N;;;;;
+10862;PALMYRENE LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10863;PALMYRENE LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10864;PALMYRENE LETTER HE;Lo;0;R;;;;;N;;;;;
+10865;PALMYRENE LETTER WAW;Lo;0;R;;;;;N;;;;;
+10866;PALMYRENE LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10867;PALMYRENE LETTER HETH;Lo;0;R;;;;;N;;;;;
+10868;PALMYRENE LETTER TETH;Lo;0;R;;;;;N;;;;;
+10869;PALMYRENE LETTER YODH;Lo;0;R;;;;;N;;;;;
+1086A;PALMYRENE LETTER KAPH;Lo;0;R;;;;;N;;;;;
+1086B;PALMYRENE LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+1086C;PALMYRENE LETTER MEM;Lo;0;R;;;;;N;;;;;
+1086D;PALMYRENE LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+1086E;PALMYRENE LETTER NUN;Lo;0;R;;;;;N;;;;;
+1086F;PALMYRENE LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10870;PALMYRENE LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10871;PALMYRENE LETTER PE;Lo;0;R;;;;;N;;;;;
+10872;PALMYRENE LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10873;PALMYRENE LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10874;PALMYRENE LETTER RESH;Lo;0;R;;;;;N;;;;;
+10875;PALMYRENE LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10876;PALMYRENE LETTER TAW;Lo;0;R;;;;;N;;;;;
+10877;PALMYRENE LEFT-POINTING FLEURON;So;0;R;;;;;N;;;;;
+10878;PALMYRENE RIGHT-POINTING FLEURON;So;0;R;;;;;N;;;;;
+10879;PALMYRENE NUMBER ONE;No;0;R;;;;1;N;;;;;
+1087A;PALMYRENE NUMBER TWO;No;0;R;;;;2;N;;;;;
+1087B;PALMYRENE NUMBER THREE;No;0;R;;;;3;N;;;;;
+1087C;PALMYRENE NUMBER FOUR;No;0;R;;;;4;N;;;;;
+1087D;PALMYRENE NUMBER FIVE;No;0;R;;;;5;N;;;;;
+1087E;PALMYRENE NUMBER TEN;No;0;R;;;;10;N;;;;;
+1087F;PALMYRENE NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10880;NABATAEAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
+10881;NABATAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10882;NABATAEAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;;
+10883;NABATAEAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10884;NABATAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10885;NABATAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10886;NABATAEAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;;
+10887;NABATAEAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10888;NABATAEAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10889;NABATAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+1088A;NABATAEAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+1088B;NABATAEAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+1088C;NABATAEAN LETTER FINAL YODH;Lo;0;R;;;;;N;;;;;
+1088D;NABATAEAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+1088E;NABATAEAN LETTER FINAL KAPH;Lo;0;R;;;;;N;;;;;
+1088F;NABATAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10890;NABATAEAN LETTER FINAL LAMEDH;Lo;0;R;;;;;N;;;;;
+10891;NABATAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10892;NABATAEAN LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+10893;NABATAEAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10894;NABATAEAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+10895;NABATAEAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10896;NABATAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10897;NABATAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10898;NABATAEAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10899;NABATAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+1089A;NABATAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+1089B;NABATAEAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+1089C;NABATAEAN LETTER FINAL SHIN;Lo;0;R;;;;;N;;;;;
+1089D;NABATAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+1089E;NABATAEAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+108A7;NABATAEAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+108A8;NABATAEAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+108A9;NABATAEAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+108AA;NABATAEAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+108AB;NABATAEAN CRUCIFORM NUMBER FOUR;No;0;R;;;;4;N;;;;;
+108AC;NABATAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+108AD;NABATAEAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+108AE;NABATAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+108AF;NABATAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+108E0;HATRAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+108E1;HATRAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+108E2;HATRAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+108E3;HATRAN LETTER DALETH-RESH;Lo;0;R;;;;;N;;;;;
+108E4;HATRAN LETTER HE;Lo;0;R;;;;;N;;;;;
+108E5;HATRAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+108E6;HATRAN LETTER ZAYN;Lo;0;R;;;;;N;;;;;
+108E7;HATRAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+108E8;HATRAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+108E9;HATRAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+108EA;HATRAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+108EB;HATRAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+108EC;HATRAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+108ED;HATRAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+108EE;HATRAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+108EF;HATRAN LETTER AYN;Lo;0;R;;;;;N;;;;;
+108F0;HATRAN LETTER PE;Lo;0;R;;;;;N;;;;;
+108F1;HATRAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+108F2;HATRAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+108F4;HATRAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+108F5;HATRAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+108FB;HATRAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+108FC;HATRAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+108FD;HATRAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+108FE;HATRAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+108FF;HATRAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
+10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
+10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
+10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;
+10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;
+10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;
+10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;
+10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;
+10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;
+1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
+1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;
+1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;
+1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
+10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;
+10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;
+10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;
+10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;
+10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;
+10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;;
+10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;;
+10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;;
+10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;;
+10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;;
+10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;;
+10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;;
+10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;;
+10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;;
+10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;;
+1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;;
+1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;;
+1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;;
+1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;;
+1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;;
+1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;;
+10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;;
+10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;;
+10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;;
+10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;;
+10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;;
+10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;;
+10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;;
+10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;;
+10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;
+10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;
+1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;
+10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;;
+10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;;
+10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;;
+10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;;
+10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;;
+10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;;
+10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;;
+10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;;
+10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;;
+10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;;
+1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;;
+1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;;
+1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;;
+1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;;
+1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;;
+1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;;
+10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;;
+10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;;
+10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;;
+10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;;
+10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;;
+10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;;
+10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;;
+10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;;
+10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;;
+10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;;
+1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;;
+1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;;
+1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;;
+1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;;
+1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;;
+1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;;
+109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;;
+109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;;
+109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;;
+109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;;
+109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;;
+109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;;
+109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;;
+109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;;
+109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;;
+109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;;
+109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;;
+109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;;
+109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;;
+109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;;
+109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;;
+109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;;
+109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;;
+109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;;
+109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;;
+109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;;
+109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;;
+109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;;
+109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;;
+109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;;
+109BC;MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS;No;0;R;;;;11/12;N;;;;;
+109BD;MEROITIC CURSIVE FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
+109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;;
+109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;;
+109C0;MEROITIC CURSIVE NUMBER ONE;No;0;R;;;;1;N;;;;;
+109C1;MEROITIC CURSIVE NUMBER TWO;No;0;R;;;;2;N;;;;;
+109C2;MEROITIC CURSIVE NUMBER THREE;No;0;R;;;;3;N;;;;;
+109C3;MEROITIC CURSIVE NUMBER FOUR;No;0;R;;;;4;N;;;;;
+109C4;MEROITIC CURSIVE NUMBER FIVE;No;0;R;;;;5;N;;;;;
+109C5;MEROITIC CURSIVE NUMBER SIX;No;0;R;;;;6;N;;;;;
+109C6;MEROITIC CURSIVE NUMBER SEVEN;No;0;R;;;;7;N;;;;;
+109C7;MEROITIC CURSIVE NUMBER EIGHT;No;0;R;;;;8;N;;;;;
+109C8;MEROITIC CURSIVE NUMBER NINE;No;0;R;;;;9;N;;;;;
+109C9;MEROITIC CURSIVE NUMBER TEN;No;0;R;;;;10;N;;;;;
+109CA;MEROITIC CURSIVE NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+109CB;MEROITIC CURSIVE NUMBER THIRTY;No;0;R;;;;30;N;;;;;
+109CC;MEROITIC CURSIVE NUMBER FORTY;No;0;R;;;;40;N;;;;;
+109CD;MEROITIC CURSIVE NUMBER FIFTY;No;0;R;;;;50;N;;;;;
+109CE;MEROITIC CURSIVE NUMBER SIXTY;No;0;R;;;;60;N;;;;;
+109CF;MEROITIC CURSIVE NUMBER SEVENTY;No;0;R;;;;70;N;;;;;
+109D2;MEROITIC CURSIVE NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+109D3;MEROITIC CURSIVE NUMBER TWO HUNDRED;No;0;R;;;;200;N;;;;;
+109D4;MEROITIC CURSIVE NUMBER THREE HUNDRED;No;0;R;;;;300;N;;;;;
+109D5;MEROITIC CURSIVE NUMBER FOUR HUNDRED;No;0;R;;;;400;N;;;;;
+109D6;MEROITIC CURSIVE NUMBER FIVE HUNDRED;No;0;R;;;;500;N;;;;;
+109D7;MEROITIC CURSIVE NUMBER SIX HUNDRED;No;0;R;;;;600;N;;;;;
+109D8;MEROITIC CURSIVE NUMBER SEVEN HUNDRED;No;0;R;;;;700;N;;;;;
+109D9;MEROITIC CURSIVE NUMBER EIGHT HUNDRED;No;0;R;;;;800;N;;;;;
+109DA;MEROITIC CURSIVE NUMBER NINE HUNDRED;No;0;R;;;;900;N;;;;;
+109DB;MEROITIC CURSIVE NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+109DC;MEROITIC CURSIVE NUMBER TWO THOUSAND;No;0;R;;;;2000;N;;;;;
+109DD;MEROITIC CURSIVE NUMBER THREE THOUSAND;No;0;R;;;;3000;N;;;;;
+109DE;MEROITIC CURSIVE NUMBER FOUR THOUSAND;No;0;R;;;;4000;N;;;;;
+109DF;MEROITIC CURSIVE NUMBER FIVE THOUSAND;No;0;R;;;;5000;N;;;;;
+109E0;MEROITIC CURSIVE NUMBER SIX THOUSAND;No;0;R;;;;6000;N;;;;;
+109E1;MEROITIC CURSIVE NUMBER SEVEN THOUSAND;No;0;R;;;;7000;N;;;;;
+109E2;MEROITIC CURSIVE NUMBER EIGHT THOUSAND;No;0;R;;;;8000;N;;;;;
+109E3;MEROITIC CURSIVE NUMBER NINE THOUSAND;No;0;R;;;;9000;N;;;;;
+109E4;MEROITIC CURSIVE NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;;
+109E5;MEROITIC CURSIVE NUMBER TWENTY THOUSAND;No;0;R;;;;20000;N;;;;;
+109E6;MEROITIC CURSIVE NUMBER THIRTY THOUSAND;No;0;R;;;;30000;N;;;;;
+109E7;MEROITIC CURSIVE NUMBER FORTY THOUSAND;No;0;R;;;;40000;N;;;;;
+109E8;MEROITIC CURSIVE NUMBER FIFTY THOUSAND;No;0;R;;;;50000;N;;;;;
+109E9;MEROITIC CURSIVE NUMBER SIXTY THOUSAND;No;0;R;;;;60000;N;;;;;
+109EA;MEROITIC CURSIVE NUMBER SEVENTY THOUSAND;No;0;R;;;;70000;N;;;;;
+109EB;MEROITIC CURSIVE NUMBER EIGHTY THOUSAND;No;0;R;;;;80000;N;;;;;
+109EC;MEROITIC CURSIVE NUMBER NINETY THOUSAND;No;0;R;;;;90000;N;;;;;
+109ED;MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND;No;0;R;;;;100000;N;;;;;
+109EE;MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND;No;0;R;;;;200000;N;;;;;
+109EF;MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND;No;0;R;;;;300000;N;;;;;
+109F0;MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND;No;0;R;;;;400000;N;;;;;
+109F1;MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND;No;0;R;;;;500000;N;;;;;
+109F2;MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND;No;0;R;;;;600000;N;;;;;
+109F3;MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND;No;0;R;;;;700000;N;;;;;
+109F4;MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND;No;0;R;;;;800000;N;;;;;
+109F5;MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND;No;0;R;;;;900000;N;;;;;
+109F6;MEROITIC CURSIVE FRACTION ONE TWELFTH;No;0;R;;;;1/12;N;;;;;
+109F7;MEROITIC CURSIVE FRACTION TWO TWELFTHS;No;0;R;;;;2/12;N;;;;;
+109F8;MEROITIC CURSIVE FRACTION THREE TWELFTHS;No;0;R;;;;3/12;N;;;;;
+109F9;MEROITIC CURSIVE FRACTION FOUR TWELFTHS;No;0;R;;;;4/12;N;;;;;
+109FA;MEROITIC CURSIVE FRACTION FIVE TWELFTHS;No;0;R;;;;5/12;N;;;;;
+109FB;MEROITIC CURSIVE FRACTION SIX TWELFTHS;No;0;R;;;;6/12;N;;;;;
+109FC;MEROITIC CURSIVE FRACTION SEVEN TWELFTHS;No;0;R;;;;7/12;N;;;;;
+109FD;MEROITIC CURSIVE FRACTION EIGHT TWELFTHS;No;0;R;;;;8/12;N;;;;;
+109FE;MEROITIC CURSIVE FRACTION NINE TWELFTHS;No;0;R;;;;9/12;N;;;;;
+109FF;MEROITIC CURSIVE FRACTION TEN TWELFTHS;No;0;R;;;;10/12;N;;;;;
+10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
+10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
+10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
+10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
+10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
+10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
+10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
+10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
+10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
+10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
+10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
+10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
+10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
+10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
+10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
+10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
+10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
+10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
+10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
+10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
+10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
+10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
+10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
+10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
+10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
+10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
+10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
+10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
+10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
+10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
+10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
+10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
+10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
+10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A34;KHAROSHTHI LETTER TTTA;Lo;0;R;;;;;N;;;;;
+10A35;KHAROSHTHI LETTER VHA;Lo;0;R;;;;;N;;;;;
+10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
+10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
+10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
+10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
+10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
+10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
+10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A48;KHAROSHTHI FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
+10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
+10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
+10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
+10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
+10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
+10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
+10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
+10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
+10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;;
+10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;;
+10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;;
+10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;;
+10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;;
+10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;;
+10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;;
+10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;;
+10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;;
+10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;;
+10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;;
+10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;
+10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;;
+10A80;OLD NORTH ARABIAN LETTER HEH;Lo;0;R;;;;;N;;;;;
+10A81;OLD NORTH ARABIAN LETTER LAM;Lo;0;R;;;;;N;;;;;
+10A82;OLD NORTH ARABIAN LETTER HAH;Lo;0;R;;;;;N;;;;;
+10A83;OLD NORTH ARABIAN LETTER MEEM;Lo;0;R;;;;;N;;;;;
+10A84;OLD NORTH ARABIAN LETTER QAF;Lo;0;R;;;;;N;;;;;
+10A85;OLD NORTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10A86;OLD NORTH ARABIAN LETTER ES-2;Lo;0;R;;;;;N;;;;;
+10A87;OLD NORTH ARABIAN LETTER REH;Lo;0;R;;;;;N;;;;;
+10A88;OLD NORTH ARABIAN LETTER BEH;Lo;0;R;;;;;N;;;;;
+10A89;OLD NORTH ARABIAN LETTER TEH;Lo;0;R;;;;;N;;;;;
+10A8A;OLD NORTH ARABIAN LETTER ES-1;Lo;0;R;;;;;N;;;;;
+10A8B;OLD NORTH ARABIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
+10A8C;OLD NORTH ARABIAN LETTER NOON;Lo;0;R;;;;;N;;;;;
+10A8D;OLD NORTH ARABIAN LETTER KHAH;Lo;0;R;;;;;N;;;;;
+10A8E;OLD NORTH ARABIAN LETTER SAD;Lo;0;R;;;;;N;;;;;
+10A8F;OLD NORTH ARABIAN LETTER ES-3;Lo;0;R;;;;;N;;;;;
+10A90;OLD NORTH ARABIAN LETTER FEH;Lo;0;R;;;;;N;;;;;
+10A91;OLD NORTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;;
+10A92;OLD NORTH ARABIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
+10A93;OLD NORTH ARABIAN LETTER DAD;Lo;0;R;;;;;N;;;;;
+10A94;OLD NORTH ARABIAN LETTER GEEM;Lo;0;R;;;;;N;;;;;
+10A95;OLD NORTH ARABIAN LETTER DAL;Lo;0;R;;;;;N;;;;;
+10A96;OLD NORTH ARABIAN LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+10A97;OLD NORTH ARABIAN LETTER TAH;Lo;0;R;;;;;N;;;;;
+10A98;OLD NORTH ARABIAN LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+10A99;OLD NORTH ARABIAN LETTER THAL;Lo;0;R;;;;;N;;;;;
+10A9A;OLD NORTH ARABIAN LETTER YEH;Lo;0;R;;;;;N;;;;;
+10A9B;OLD NORTH ARABIAN LETTER THEH;Lo;0;R;;;;;N;;;;;
+10A9C;OLD NORTH ARABIAN LETTER ZAH;Lo;0;R;;;;;N;;;;;
+10A9D;OLD NORTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10A9E;OLD NORTH ARABIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A9F;OLD NORTH ARABIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10AC0;MANICHAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10AC1;MANICHAEAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10AC2;MANICHAEAN LETTER BHETH;Lo;0;R;;;;;N;;;;;
+10AC3;MANICHAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10AC4;MANICHAEAN LETTER GHIMEL;Lo;0;R;;;;;N;;;;;
+10AC5;MANICHAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10AC6;MANICHAEAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10AC7;MANICHAEAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10AC8;MANICHAEAN SIGN UD;So;0;R;;;;;N;;;;;
+10AC9;MANICHAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10ACA;MANICHAEAN LETTER ZHAYIN;Lo;0;R;;;;;N;;;;;
+10ACB;MANICHAEAN LETTER JAYIN;Lo;0;R;;;;;N;;;;;
+10ACC;MANICHAEAN LETTER JHAYIN;Lo;0;R;;;;;N;;;;;
+10ACD;MANICHAEAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10ACE;MANICHAEAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+10ACF;MANICHAEAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10AD0;MANICHAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10AD1;MANICHAEAN LETTER XAPH;Lo;0;R;;;;;N;;;;;
+10AD2;MANICHAEAN LETTER KHAPH;Lo;0;R;;;;;N;;;;;
+10AD3;MANICHAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10AD4;MANICHAEAN LETTER DHAMEDH;Lo;0;R;;;;;N;;;;;
+10AD5;MANICHAEAN LETTER THAMEDH;Lo;0;R;;;;;N;;;;;
+10AD6;MANICHAEAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10AD7;MANICHAEAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10AD8;MANICHAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10AD9;MANICHAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10ADA;MANICHAEAN LETTER AAYIN;Lo;0;R;;;;;N;;;;;
+10ADB;MANICHAEAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10ADC;MANICHAEAN LETTER FE;Lo;0;R;;;;;N;;;;;
+10ADD;MANICHAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10ADE;MANICHAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10ADF;MANICHAEAN LETTER XOPH;Lo;0;R;;;;;N;;;;;
+10AE0;MANICHAEAN LETTER QHOPH;Lo;0;R;;;;;N;;;;;
+10AE1;MANICHAEAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10AE2;MANICHAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10AE3;MANICHAEAN LETTER SSHIN;Lo;0;R;;;;;N;;;;;
+10AE4;MANICHAEAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10AE5;MANICHAEAN ABBREVIATION MARK ABOVE;Mn;230;NSM;;;;;N;;;;;
+10AE6;MANICHAEAN ABBREVIATION MARK BELOW;Mn;220;NSM;;;;;N;;;;;
+10AEB;MANICHAEAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10AEC;MANICHAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+10AED;MANICHAEAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10AEE;MANICHAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10AEF;MANICHAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10AF0;MANICHAEAN PUNCTUATION STAR;Po;0;R;;;;;N;;;;;
+10AF1;MANICHAEAN PUNCTUATION FLEURON;Po;0;R;;;;;N;;;;;
+10AF2;MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;Po;0;R;;;;;N;;;;;
+10AF3;MANICHAEAN PUNCTUATION DOT WITHIN DOT;Po;0;R;;;;;N;;;;;
+10AF4;MANICHAEAN PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10AF5;MANICHAEAN PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;;
+10AF6;MANICHAEAN PUNCTUATION LINE FILLER;Po;0;R;;;;;N;;;;;
+10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;;
+10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;;
+10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;;
+10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;;
+10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;;
+10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;;
+10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;;
+10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;;
+10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;;
+10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;;
+10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;;
+10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;;
+10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;;
+10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;;
+10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;;
+10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;;
+10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;;
+10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;;
+10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;;
+10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;;
+10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;;
+10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;;
+10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;;
+10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;;
+10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;;
+10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;;
+10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;;
+10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;;
+10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;;
+10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;;
+10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;;
+10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;;
+10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;;
+10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;;
+10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;;
+10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;;
+10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;;
+10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;;
+10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;;
+10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;;
+10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;;
+10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;;
+10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;;
+10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;;
+10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;;
+10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;;
+10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;;
+10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;;
+10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;;
+10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;;
+10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;;
+10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;;
+10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;;
+10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;;
+10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;;
+10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;;
+10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;;
+10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;;
+10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;;
+10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;;
+10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;;
+10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;;
+10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;;
+10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;;
+10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;;
+10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;;
+10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10B80;PSALTER PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10B81;PSALTER PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;;
+10B82;PSALTER PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10B83;PSALTER PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10B84;PSALTER PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;;
+10B85;PSALTER PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;;
+10B86;PSALTER PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10B87;PSALTER PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;;
+10B88;PSALTER PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;;
+10B89;PSALTER PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10B8A;PSALTER PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10B8B;PSALTER PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;;
+10B8C;PSALTER PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;;
+10B8D;PSALTER PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10B8E;PSALTER PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;;
+10B8F;PSALTER PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10B90;PSALTER PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10B91;PSALTER PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;;
+10B99;PSALTER PAHLAVI SECTION MARK;Po;0;R;;;;;N;;;;;
+10B9A;PSALTER PAHLAVI TURNED SECTION MARK;Po;0;R;;;;;N;;;;;
+10B9B;PSALTER PAHLAVI FOUR DOTS WITH CROSS;Po;0;R;;;;;N;;;;;
+10B9C;PSALTER PAHLAVI FOUR DOTS WITH DOT;Po;0;R;;;;;N;;;;;
+10BA9;PSALTER PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;;
+10BAA;PSALTER PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;;
+10BAB;PSALTER PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;;
+10BAC;PSALTER PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10BAD;PSALTER PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10BAE;PSALTER PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10BAF;PSALTER PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;;
+10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;;
+10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;;
+10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;;
+10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;;
+10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;;
+10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;;
+10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;;
+10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;;
+10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;;
+10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;;
+10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;;
+10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;;
+10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;;
+10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;;
+10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;;
+10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;;
+10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;;
+10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;;
+10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;;
+10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;;
+10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;;
+10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;;
+10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;;
+10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;;
+10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;;
+10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;;
+10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;;
+10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;;
+10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;;
+10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;;
+10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;;
+10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;;
+10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;;
+10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;;
+10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;;
+10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;;
+10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;;
+10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;;
+10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;;
+10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;;
+10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;;
+10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;;
+10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;;
+10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;;
+10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;;
+10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;;
+10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;;
+10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;;
+10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;;
+10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;;
+10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;;
+10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;;
+10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;;
+10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;;
+10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;;
+10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;;
+10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;;
+10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;;
+10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;;
+10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;;
+10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;;
+10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;;
+10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;;
+10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;;
+10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;;
+10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;;
+10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;;
+10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;;
+10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;;
+10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;;
+10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;;
+10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;;
+10C80;OLD HUNGARIAN CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10CC0;
+10C81;OLD HUNGARIAN CAPITAL LETTER AA;Lu;0;R;;;;;N;;;;10CC1;
+10C82;OLD HUNGARIAN CAPITAL LETTER EB;Lu;0;R;;;;;N;;;;10CC2;
+10C83;OLD HUNGARIAN CAPITAL LETTER AMB;Lu;0;R;;;;;N;;;;10CC3;
+10C84;OLD HUNGARIAN CAPITAL LETTER EC;Lu;0;R;;;;;N;;;;10CC4;
+10C85;OLD HUNGARIAN CAPITAL LETTER ENC;Lu;0;R;;;;;N;;;;10CC5;
+10C86;OLD HUNGARIAN CAPITAL LETTER ECS;Lu;0;R;;;;;N;;;;10CC6;
+10C87;OLD HUNGARIAN CAPITAL LETTER ED;Lu;0;R;;;;;N;;;;10CC7;
+10C88;OLD HUNGARIAN CAPITAL LETTER AND;Lu;0;R;;;;;N;;;;10CC8;
+10C89;OLD HUNGARIAN CAPITAL LETTER E;Lu;0;R;;;;;N;;;;10CC9;
+10C8A;OLD HUNGARIAN CAPITAL LETTER CLOSE E;Lu;0;R;;;;;N;;;;10CCA;
+10C8B;OLD HUNGARIAN CAPITAL LETTER EE;Lu;0;R;;;;;N;;;;10CCB;
+10C8C;OLD HUNGARIAN CAPITAL LETTER EF;Lu;0;R;;;;;N;;;;10CCC;
+10C8D;OLD HUNGARIAN CAPITAL LETTER EG;Lu;0;R;;;;;N;;;;10CCD;
+10C8E;OLD HUNGARIAN CAPITAL LETTER EGY;Lu;0;R;;;;;N;;;;10CCE;
+10C8F;OLD HUNGARIAN CAPITAL LETTER EH;Lu;0;R;;;;;N;;;;10CCF;
+10C90;OLD HUNGARIAN CAPITAL LETTER I;Lu;0;R;;;;;N;;;;10CD0;
+10C91;OLD HUNGARIAN CAPITAL LETTER II;Lu;0;R;;;;;N;;;;10CD1;
+10C92;OLD HUNGARIAN CAPITAL LETTER EJ;Lu;0;R;;;;;N;;;;10CD2;
+10C93;OLD HUNGARIAN CAPITAL LETTER EK;Lu;0;R;;;;;N;;;;10CD3;
+10C94;OLD HUNGARIAN CAPITAL LETTER AK;Lu;0;R;;;;;N;;;;10CD4;
+10C95;OLD HUNGARIAN CAPITAL LETTER UNK;Lu;0;R;;;;;N;;;;10CD5;
+10C96;OLD HUNGARIAN CAPITAL LETTER EL;Lu;0;R;;;;;N;;;;10CD6;
+10C97;OLD HUNGARIAN CAPITAL LETTER ELY;Lu;0;R;;;;;N;;;;10CD7;
+10C98;OLD HUNGARIAN CAPITAL LETTER EM;Lu;0;R;;;;;N;;;;10CD8;
+10C99;OLD HUNGARIAN CAPITAL LETTER EN;Lu;0;R;;;;;N;;;;10CD9;
+10C9A;OLD HUNGARIAN CAPITAL LETTER ENY;Lu;0;R;;;;;N;;;;10CDA;
+10C9B;OLD HUNGARIAN CAPITAL LETTER O;Lu;0;R;;;;;N;;;;10CDB;
+10C9C;OLD HUNGARIAN CAPITAL LETTER OO;Lu;0;R;;;;;N;;;;10CDC;
+10C9D;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE;Lu;0;R;;;;;N;;;;10CDD;
+10C9E;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE;Lu;0;R;;;;;N;;;;10CDE;
+10C9F;OLD HUNGARIAN CAPITAL LETTER OEE;Lu;0;R;;;;;N;;;;10CDF;
+10CA0;OLD HUNGARIAN CAPITAL LETTER EP;Lu;0;R;;;;;N;;;;10CE0;
+10CA1;OLD HUNGARIAN CAPITAL LETTER EMP;Lu;0;R;;;;;N;;;;10CE1;
+10CA2;OLD HUNGARIAN CAPITAL LETTER ER;Lu;0;R;;;;;N;;;;10CE2;
+10CA3;OLD HUNGARIAN CAPITAL LETTER SHORT ER;Lu;0;R;;;;;N;;;;10CE3;
+10CA4;OLD HUNGARIAN CAPITAL LETTER ES;Lu;0;R;;;;;N;;;;10CE4;
+10CA5;OLD HUNGARIAN CAPITAL LETTER ESZ;Lu;0;R;;;;;N;;;;10CE5;
+10CA6;OLD HUNGARIAN CAPITAL LETTER ET;Lu;0;R;;;;;N;;;;10CE6;
+10CA7;OLD HUNGARIAN CAPITAL LETTER ENT;Lu;0;R;;;;;N;;;;10CE7;
+10CA8;OLD HUNGARIAN CAPITAL LETTER ETY;Lu;0;R;;;;;N;;;;10CE8;
+10CA9;OLD HUNGARIAN CAPITAL LETTER ECH;Lu;0;R;;;;;N;;;;10CE9;
+10CAA;OLD HUNGARIAN CAPITAL LETTER U;Lu;0;R;;;;;N;;;;10CEA;
+10CAB;OLD HUNGARIAN CAPITAL LETTER UU;Lu;0;R;;;;;N;;;;10CEB;
+10CAC;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE;Lu;0;R;;;;;N;;;;10CEC;
+10CAD;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE;Lu;0;R;;;;;N;;;;10CED;
+10CAE;OLD HUNGARIAN CAPITAL LETTER EV;Lu;0;R;;;;;N;;;;10CEE;
+10CAF;OLD HUNGARIAN CAPITAL LETTER EZ;Lu;0;R;;;;;N;;;;10CEF;
+10CB0;OLD HUNGARIAN CAPITAL LETTER EZS;Lu;0;R;;;;;N;;;;10CF0;
+10CB1;OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN;Lu;0;R;;;;;N;;;;10CF1;
+10CB2;OLD HUNGARIAN CAPITAL LETTER US;Lu;0;R;;;;;N;;;;10CF2;
+10CC0;OLD HUNGARIAN SMALL LETTER A;Ll;0;R;;;;;N;;;10C80;;10C80
+10CC1;OLD HUNGARIAN SMALL LETTER AA;Ll;0;R;;;;;N;;;10C81;;10C81
+10CC2;OLD HUNGARIAN SMALL LETTER EB;Ll;0;R;;;;;N;;;10C82;;10C82
+10CC3;OLD HUNGARIAN SMALL LETTER AMB;Ll;0;R;;;;;N;;;10C83;;10C83
+10CC4;OLD HUNGARIAN SMALL LETTER EC;Ll;0;R;;;;;N;;;10C84;;10C84
+10CC5;OLD HUNGARIAN SMALL LETTER ENC;Ll;0;R;;;;;N;;;10C85;;10C85
+10CC6;OLD HUNGARIAN SMALL LETTER ECS;Ll;0;R;;;;;N;;;10C86;;10C86
+10CC7;OLD HUNGARIAN SMALL LETTER ED;Ll;0;R;;;;;N;;;10C87;;10C87
+10CC8;OLD HUNGARIAN SMALL LETTER AND;Ll;0;R;;;;;N;;;10C88;;10C88
+10CC9;OLD HUNGARIAN SMALL LETTER E;Ll;0;R;;;;;N;;;10C89;;10C89
+10CCA;OLD HUNGARIAN SMALL LETTER CLOSE E;Ll;0;R;;;;;N;;;10C8A;;10C8A
+10CCB;OLD HUNGARIAN SMALL LETTER EE;Ll;0;R;;;;;N;;;10C8B;;10C8B
+10CCC;OLD HUNGARIAN SMALL LETTER EF;Ll;0;R;;;;;N;;;10C8C;;10C8C
+10CCD;OLD HUNGARIAN SMALL LETTER EG;Ll;0;R;;;;;N;;;10C8D;;10C8D
+10CCE;OLD HUNGARIAN SMALL LETTER EGY;Ll;0;R;;;;;N;;;10C8E;;10C8E
+10CCF;OLD HUNGARIAN SMALL LETTER EH;Ll;0;R;;;;;N;;;10C8F;;10C8F
+10CD0;OLD HUNGARIAN SMALL LETTER I;Ll;0;R;;;;;N;;;10C90;;10C90
+10CD1;OLD HUNGARIAN SMALL LETTER II;Ll;0;R;;;;;N;;;10C91;;10C91
+10CD2;OLD HUNGARIAN SMALL LETTER EJ;Ll;0;R;;;;;N;;;10C92;;10C92
+10CD3;OLD HUNGARIAN SMALL LETTER EK;Ll;0;R;;;;;N;;;10C93;;10C93
+10CD4;OLD HUNGARIAN SMALL LETTER AK;Ll;0;R;;;;;N;;;10C94;;10C94
+10CD5;OLD HUNGARIAN SMALL LETTER UNK;Ll;0;R;;;;;N;;;10C95;;10C95
+10CD6;OLD HUNGARIAN SMALL LETTER EL;Ll;0;R;;;;;N;;;10C96;;10C96
+10CD7;OLD HUNGARIAN SMALL LETTER ELY;Ll;0;R;;;;;N;;;10C97;;10C97
+10CD8;OLD HUNGARIAN SMALL LETTER EM;Ll;0;R;;;;;N;;;10C98;;10C98
+10CD9;OLD HUNGARIAN SMALL LETTER EN;Ll;0;R;;;;;N;;;10C99;;10C99
+10CDA;OLD HUNGARIAN SMALL LETTER ENY;Ll;0;R;;;;;N;;;10C9A;;10C9A
+10CDB;OLD HUNGARIAN SMALL LETTER O;Ll;0;R;;;;;N;;;10C9B;;10C9B
+10CDC;OLD HUNGARIAN SMALL LETTER OO;Ll;0;R;;;;;N;;;10C9C;;10C9C
+10CDD;OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE;Ll;0;R;;;;;N;;;10C9D;;10C9D
+10CDE;OLD HUNGARIAN SMALL LETTER RUDIMENTA OE;Ll;0;R;;;;;N;;;10C9E;;10C9E
+10CDF;OLD HUNGARIAN SMALL LETTER OEE;Ll;0;R;;;;;N;;;10C9F;;10C9F
+10CE0;OLD HUNGARIAN SMALL LETTER EP;Ll;0;R;;;;;N;;;10CA0;;10CA0
+10CE1;OLD HUNGARIAN SMALL LETTER EMP;Ll;0;R;;;;;N;;;10CA1;;10CA1
+10CE2;OLD HUNGARIAN SMALL LETTER ER;Ll;0;R;;;;;N;;;10CA2;;10CA2
+10CE3;OLD HUNGARIAN SMALL LETTER SHORT ER;Ll;0;R;;;;;N;;;10CA3;;10CA3
+10CE4;OLD HUNGARIAN SMALL LETTER ES;Ll;0;R;;;;;N;;;10CA4;;10CA4
+10CE5;OLD HUNGARIAN SMALL LETTER ESZ;Ll;0;R;;;;;N;;;10CA5;;10CA5
+10CE6;OLD HUNGARIAN SMALL LETTER ET;Ll;0;R;;;;;N;;;10CA6;;10CA6
+10CE7;OLD HUNGARIAN SMALL LETTER ENT;Ll;0;R;;;;;N;;;10CA7;;10CA7
+10CE8;OLD HUNGARIAN SMALL LETTER ETY;Ll;0;R;;;;;N;;;10CA8;;10CA8
+10CE9;OLD HUNGARIAN SMALL LETTER ECH;Ll;0;R;;;;;N;;;10CA9;;10CA9
+10CEA;OLD HUNGARIAN SMALL LETTER U;Ll;0;R;;;;;N;;;10CAA;;10CAA
+10CEB;OLD HUNGARIAN SMALL LETTER UU;Ll;0;R;;;;;N;;;10CAB;;10CAB
+10CEC;OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE;Ll;0;R;;;;;N;;;10CAC;;10CAC
+10CED;OLD HUNGARIAN SMALL LETTER RUDIMENTA UE;Ll;0;R;;;;;N;;;10CAD;;10CAD
+10CEE;OLD HUNGARIAN SMALL LETTER EV;Ll;0;R;;;;;N;;;10CAE;;10CAE
+10CEF;OLD HUNGARIAN SMALL LETTER EZ;Ll;0;R;;;;;N;;;10CAF;;10CAF
+10CF0;OLD HUNGARIAN SMALL LETTER EZS;Ll;0;R;;;;;N;;;10CB0;;10CB0
+10CF1;OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN;Ll;0;R;;;;;N;;;10CB1;;10CB1
+10CF2;OLD HUNGARIAN SMALL LETTER US;Ll;0;R;;;;;N;;;10CB2;;10CB2
+10CFA;OLD HUNGARIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10CFB;OLD HUNGARIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+10CFC;OLD HUNGARIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;
+10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10D00;HANIFI ROHINGYA LETTER A;Lo;0;AL;;;;;N;;;;;
+10D01;HANIFI ROHINGYA LETTER BA;Lo;0;AL;;;;;N;;;;;
+10D02;HANIFI ROHINGYA LETTER PA;Lo;0;AL;;;;;N;;;;;
+10D03;HANIFI ROHINGYA LETTER TA;Lo;0;AL;;;;;N;;;;;
+10D04;HANIFI ROHINGYA LETTER TTA;Lo;0;AL;;;;;N;;;;;
+10D05;HANIFI ROHINGYA LETTER JA;Lo;0;AL;;;;;N;;;;;
+10D06;HANIFI ROHINGYA LETTER CA;Lo;0;AL;;;;;N;;;;;
+10D07;HANIFI ROHINGYA LETTER HA;Lo;0;AL;;;;;N;;;;;
+10D08;HANIFI ROHINGYA LETTER KHA;Lo;0;AL;;;;;N;;;;;
+10D09;HANIFI ROHINGYA LETTER FA;Lo;0;AL;;;;;N;;;;;
+10D0A;HANIFI ROHINGYA LETTER DA;Lo;0;AL;;;;;N;;;;;
+10D0B;HANIFI ROHINGYA LETTER DDA;Lo;0;AL;;;;;N;;;;;
+10D0C;HANIFI ROHINGYA LETTER RA;Lo;0;AL;;;;;N;;;;;
+10D0D;HANIFI ROHINGYA LETTER RRA;Lo;0;AL;;;;;N;;;;;
+10D0E;HANIFI ROHINGYA LETTER ZA;Lo;0;AL;;;;;N;;;;;
+10D0F;HANIFI ROHINGYA LETTER SA;Lo;0;AL;;;;;N;;;;;
+10D10;HANIFI ROHINGYA LETTER SHA;Lo;0;AL;;;;;N;;;;;
+10D11;HANIFI ROHINGYA LETTER KA;Lo;0;AL;;;;;N;;;;;
+10D12;HANIFI ROHINGYA LETTER GA;Lo;0;AL;;;;;N;;;;;
+10D13;HANIFI ROHINGYA LETTER LA;Lo;0;AL;;;;;N;;;;;
+10D14;HANIFI ROHINGYA LETTER MA;Lo;0;AL;;;;;N;;;;;
+10D15;HANIFI ROHINGYA LETTER NA;Lo;0;AL;;;;;N;;;;;
+10D16;HANIFI ROHINGYA LETTER WA;Lo;0;AL;;;;;N;;;;;
+10D17;HANIFI ROHINGYA LETTER KINNA WA;Lo;0;AL;;;;;N;;;;;
+10D18;HANIFI ROHINGYA LETTER YA;Lo;0;AL;;;;;N;;;;;
+10D19;HANIFI ROHINGYA LETTER KINNA YA;Lo;0;AL;;;;;N;;;;;
+10D1A;HANIFI ROHINGYA LETTER NGA;Lo;0;AL;;;;;N;;;;;
+10D1B;HANIFI ROHINGYA LETTER NYA;Lo;0;AL;;;;;N;;;;;
+10D1C;HANIFI ROHINGYA LETTER VA;Lo;0;AL;;;;;N;;;;;
+10D1D;HANIFI ROHINGYA VOWEL A;Lo;0;AL;;;;;N;;;;;
+10D1E;HANIFI ROHINGYA VOWEL I;Lo;0;AL;;;;;N;;;;;
+10D1F;HANIFI ROHINGYA VOWEL U;Lo;0;AL;;;;;N;;;;;
+10D20;HANIFI ROHINGYA VOWEL E;Lo;0;AL;;;;;N;;;;;
+10D21;HANIFI ROHINGYA VOWEL O;Lo;0;AL;;;;;N;;;;;
+10D22;HANIFI ROHINGYA MARK SAKIN;Lo;0;AL;;;;;N;;;;;
+10D23;HANIFI ROHINGYA MARK NA KHONNA;Lo;0;AL;;;;;N;;;;;
+10D24;HANIFI ROHINGYA SIGN HARBAHAY;Mn;230;NSM;;;;;N;;;;;
+10D25;HANIFI ROHINGYA SIGN TAHALA;Mn;230;NSM;;;;;N;;;;;
+10D26;HANIFI ROHINGYA SIGN TANA;Mn;230;NSM;;;;;N;;;;;
+10D27;HANIFI ROHINGYA SIGN TASSI;Mn;230;NSM;;;;;N;;;;;
+10D30;HANIFI ROHINGYA DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+10D31;HANIFI ROHINGYA DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+10D32;HANIFI ROHINGYA DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+10D33;HANIFI ROHINGYA DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+10D34;HANIFI ROHINGYA DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+10D35;HANIFI ROHINGYA DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+10D36;HANIFI ROHINGYA DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;;
+10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;;
+10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;;
+10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;;
+10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;;
+10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;;
+10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;;
+10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;;
+10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;;
+10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;;
+10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;;
+10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;;
+10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;;
+10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;;
+10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;;
+10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;;
+10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;;
+10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;;
+10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;;
+10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;;
+10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;;
+10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;;
+10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;;
+10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;;
+10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;;
+10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;;
+10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;;
+10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;;
+10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;
+10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;
+10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;
+10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
+10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10F03;OLD SOGDIAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;;
+10F04;OLD SOGDIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10F05;OLD SOGDIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10F06;OLD SOGDIAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;;
+10F07;OLD SOGDIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10F08;OLD SOGDIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10F09;OLD SOGDIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10F0A;OLD SOGDIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10F0B;OLD SOGDIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10F0C;OLD SOGDIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10F0D;OLD SOGDIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10F0E;OLD SOGDIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10F0F;OLD SOGDIAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+10F10;OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F11;OLD SOGDIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10F12;OLD SOGDIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10F13;OLD SOGDIAN LETTER ALTERNATE AYIN;Lo;0;R;;;;;N;;;;;
+10F14;OLD SOGDIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10F15;OLD SOGDIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10F16;OLD SOGDIAN LETTER FINAL SADHE;Lo;0;R;;;;;N;;;;;
+10F17;OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F18;OLD SOGDIAN LETTER RESH-AYIN-DALETH;Lo;0;R;;;;;N;;;;;
+10F19;OLD SOGDIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10F1A;OLD SOGDIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10F1B;OLD SOGDIAN LETTER FINAL TAW;Lo;0;R;;;;;N;;;;;
+10F1C;OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F1D;OLD SOGDIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10F1E;OLD SOGDIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10F1F;OLD SOGDIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10F20;OLD SOGDIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10F21;OLD SOGDIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+10F22;OLD SOGDIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10F23;OLD SOGDIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10F24;OLD SOGDIAN NUMBER THIRTY;No;0;R;;;;30;N;;;;;
+10F25;OLD SOGDIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10F26;OLD SOGDIAN FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
+10F27;OLD SOGDIAN LIGATURE AYIN-DALETH;Lo;0;R;;;;;N;;;;;
+10F30;SOGDIAN LETTER ALEPH;Lo;0;AL;;;;;N;;;;;
+10F31;SOGDIAN LETTER BETH;Lo;0;AL;;;;;N;;;;;
+10F32;SOGDIAN LETTER GIMEL;Lo;0;AL;;;;;N;;;;;
+10F33;SOGDIAN LETTER HE;Lo;0;AL;;;;;N;;;;;
+10F34;SOGDIAN LETTER WAW;Lo;0;AL;;;;;N;;;;;
+10F35;SOGDIAN LETTER ZAYIN;Lo;0;AL;;;;;N;;;;;
+10F36;SOGDIAN LETTER HETH;Lo;0;AL;;;;;N;;;;;
+10F37;SOGDIAN LETTER YODH;Lo;0;AL;;;;;N;;;;;
+10F38;SOGDIAN LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+10F39;SOGDIAN LETTER LAMEDH;Lo;0;AL;;;;;N;;;;;
+10F3A;SOGDIAN LETTER MEM;Lo;0;AL;;;;;N;;;;;
+10F3B;SOGDIAN LETTER NUN;Lo;0;AL;;;;;N;;;;;
+10F3C;SOGDIAN LETTER SAMEKH;Lo;0;AL;;;;;N;;;;;
+10F3D;SOGDIAN LETTER AYIN;Lo;0;AL;;;;;N;;;;;
+10F3E;SOGDIAN LETTER PE;Lo;0;AL;;;;;N;;;;;
+10F3F;SOGDIAN LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+10F40;SOGDIAN LETTER RESH-AYIN;Lo;0;AL;;;;;N;;;;;
+10F41;SOGDIAN LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+10F42;SOGDIAN LETTER TAW;Lo;0;AL;;;;;N;;;;;
+10F43;SOGDIAN LETTER FETH;Lo;0;AL;;;;;N;;;;;
+10F44;SOGDIAN LETTER LESH;Lo;0;AL;;;;;N;;;;;
+10F45;SOGDIAN INDEPENDENT SHIN;Lo;0;AL;;;;;N;;;;;
+10F46;SOGDIAN COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10F47;SOGDIAN COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+10F48;SOGDIAN COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F49;SOGDIAN COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4A;SOGDIAN COMBINING CURVE ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4B;SOGDIAN COMBINING CURVE BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4C;SOGDIAN COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4D;SOGDIAN COMBINING HOOK BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4E;SOGDIAN COMBINING LONG HOOK BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4F;SOGDIAN COMBINING RESH BELOW;Mn;220;NSM;;;;;N;;;;;
+10F50;SOGDIAN COMBINING STROKE BELOW;Mn;220;NSM;;;;;N;;;;;
+10F51;SOGDIAN NUMBER ONE;No;0;AL;;;;1;N;;;;;
+10F52;SOGDIAN NUMBER TEN;No;0;AL;;;;10;N;;;;;
+10F53;SOGDIAN NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+10F54;SOGDIAN NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+10F55;SOGDIAN PUNCTUATION TWO VERTICAL BARS;Po;0;AL;;;;;N;;;;;
+10F56;SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS;Po;0;AL;;;;;N;;;;;
+10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
+10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;
+10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10FE3;ELYMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10FE4;ELYMAIC LETTER HE;Lo;0;R;;;;;N;;;;;
+10FE5;ELYMAIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+10FE6;ELYMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10FE7;ELYMAIC LETTER HETH;Lo;0;R;;;;;N;;;;;
+10FE8;ELYMAIC LETTER TETH;Lo;0;R;;;;;N;;;;;
+10FE9;ELYMAIC LETTER YODH;Lo;0;R;;;;;N;;;;;
+10FEA;ELYMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10FEB;ELYMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10FEC;ELYMAIC LETTER MEM;Lo;0;R;;;;;N;;;;;
+10FED;ELYMAIC LETTER NUN;Lo;0;R;;;;;N;;;;;
+10FEE;ELYMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10FEF;ELYMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10FF0;ELYMAIC LETTER PE;Lo;0;R;;;;;N;;;;;
+10FF1;ELYMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10FF2;ELYMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10FF3;ELYMAIC LETTER RESH;Lo;0;R;;;;;N;;;;;
+10FF4;ELYMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10FF5;ELYMAIC LETTER TAW;Lo;0;R;;;;;N;;;;;
+10FF6;ELYMAIC LIGATURE ZAYIN-YODH;Lo;0;R;;;;;N;;;;;
+11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;;
+11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;;
+11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;;
+11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;;
+11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;;
+1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;;
+1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;;
+11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;;
+11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;;
+11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;;
+11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;;
+11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;;
+11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;;
+11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;;
+1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;;
+1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;;
+1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;;
+1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;;
+1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;;
+11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;;
+11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;;
+11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;;
+11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;;
+11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;;
+1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;;
+1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;;
+1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;;
+1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;;
+1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;;
+1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;;
+11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;;
+11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;;
+11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;;
+11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;;
+11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;;
+11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;;
+11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;;
+11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;;
+1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;;
+11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;;
+1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;;
+1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;;
+1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;;
+1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;;
+11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;;
+11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;;
+11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;;
+11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;;
+11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;;
+11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;;
+11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;;
+11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;;
+1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;;
+1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;;
+1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;;
+1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;;
+1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;;
+11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;;
+11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;;
+11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;;
+11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;;
+11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;;
+11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;;
+11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;;
+11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;;
+11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;;
+11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;;
+11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;;
+11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;;
+11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;;
+11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;;
+1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;;
+1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;;
+1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;;
+1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;;
+1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;;
+11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;;
+11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;;
+11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;;
+1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;;
+1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;;
+1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;;
+110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;;
+110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;;
+110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;;
+110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;;
+110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;;
+110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;;
+110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;;
+110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;;
+110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;;
+110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;;
+110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;;
+110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;;
+110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;;
+110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;;
+110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;;
+110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;;
+110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
+110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
+110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;
+110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
+110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
+110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;;
+110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;;
+110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;;
+110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;;
+110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;;
+110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;;
+110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;;
+110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;;
+110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;;
+110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;;
+110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;;
+110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;;
+110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;;
+110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;;
+110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;;
+110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;;
+110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;;
+110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;;
+110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;;
+110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;;
+110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;;
+110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;;
+110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;;
+110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;;
+11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;;
+11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;;
+11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;;
+11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;;
+11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;;
+11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;;
+11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;;
+11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;;
+1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;;
+1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;;
+1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;;
+1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;;
+1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;;
+1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;;
+11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;;
+11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;;
+11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;;
+11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;;
+11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;;
+11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;;
+11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;;
+11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;;
+11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;;
+11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;;
+1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;;
+1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;;
+1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;;
+1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;;
+1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;;
+1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;;
+11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;;
+11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;;
+11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;;
+11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;;
+11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;;
+11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;;
+11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;;
+11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;;
+1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;;
+11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;;
+11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;;
+11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;;
+11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;;
+11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;;
+11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;;
+11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;;
+11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;;
+11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
+11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;;
+11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;;
+11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;;
+11153;MAHAJANI LETTER E;Lo;0;L;;;;;N;;;;;
+11154;MAHAJANI LETTER O;Lo;0;L;;;;;N;;;;;
+11155;MAHAJANI LETTER KA;Lo;0;L;;;;;N;;;;;
+11156;MAHAJANI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11157;MAHAJANI LETTER GA;Lo;0;L;;;;;N;;;;;
+11158;MAHAJANI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11159;MAHAJANI LETTER CA;Lo;0;L;;;;;N;;;;;
+1115A;MAHAJANI LETTER CHA;Lo;0;L;;;;;N;;;;;
+1115B;MAHAJANI LETTER JA;Lo;0;L;;;;;N;;;;;
+1115C;MAHAJANI LETTER JHA;Lo;0;L;;;;;N;;;;;
+1115D;MAHAJANI LETTER NYA;Lo;0;L;;;;;N;;;;;
+1115E;MAHAJANI LETTER TTA;Lo;0;L;;;;;N;;;;;
+1115F;MAHAJANI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11160;MAHAJANI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11161;MAHAJANI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11162;MAHAJANI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11163;MAHAJANI LETTER TA;Lo;0;L;;;;;N;;;;;
+11164;MAHAJANI LETTER THA;Lo;0;L;;;;;N;;;;;
+11165;MAHAJANI LETTER DA;Lo;0;L;;;;;N;;;;;
+11166;MAHAJANI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11167;MAHAJANI LETTER NA;Lo;0;L;;;;;N;;;;;
+11168;MAHAJANI LETTER PA;Lo;0;L;;;;;N;;;;;
+11169;MAHAJANI LETTER PHA;Lo;0;L;;;;;N;;;;;
+1116A;MAHAJANI LETTER BA;Lo;0;L;;;;;N;;;;;
+1116B;MAHAJANI LETTER BHA;Lo;0;L;;;;;N;;;;;
+1116C;MAHAJANI LETTER MA;Lo;0;L;;;;;N;;;;;
+1116D;MAHAJANI LETTER RA;Lo;0;L;;;;;N;;;;;
+1116E;MAHAJANI LETTER LA;Lo;0;L;;;;;N;;;;;
+1116F;MAHAJANI LETTER VA;Lo;0;L;;;;;N;;;;;
+11170;MAHAJANI LETTER SA;Lo;0;L;;;;;N;;;;;
+11171;MAHAJANI LETTER HA;Lo;0;L;;;;;N;;;;;
+11172;MAHAJANI LETTER RRA;Lo;0;L;;;;;N;;;;;
+11173;MAHAJANI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11174;MAHAJANI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+11175;MAHAJANI SECTION MARK;Po;0;L;;;;;N;;;;;
+11176;MAHAJANI LIGATURE SHRI;Lo;0;L;;;;;N;;;;;
+11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;;
+11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;;
+11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;;
+11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;;
+11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;;
+11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;;
+11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;;
+1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;;
+1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;;
+11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;;
+11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;;
+11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;;
+11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;;
+11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;;
+11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;;
+111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;;
+111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;;
+111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;;
+111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;;
+111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;;
+111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;;
+111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;;
+111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;;
+111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;;
+111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;;
+111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;;
+111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;;
+111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+111C4;SHARADA OM;Lo;0;L;;;;;N;;;;;
+111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;;
+111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;
+111C9;SHARADA SANDHI MARK;Mn;0;NSM;;;;;N;;;;;
+111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;
+111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;
+111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;;
+111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+111DA;SHARADA EKAM;Lo;0;L;;;;;N;;;;;
+111DB;SHARADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+111DC;SHARADA HEADSTROKE;Lo;0;L;;;;;N;;;;;
+111DD;SHARADA CONTINUATION SIGN;Po;0;L;;;;;N;;;;;
+111DE;SHARADA SECTION MARK-1;Po;0;L;;;;;N;;;;;
+111DF;SHARADA SECTION MARK-2;Po;0;L;;;;;N;;;;;
+111E1;SINHALA ARCHAIC DIGIT ONE;No;0;L;;;;1;N;;;;;
+111E2;SINHALA ARCHAIC DIGIT TWO;No;0;L;;;;2;N;;;;;
+111E3;SINHALA ARCHAIC DIGIT THREE;No;0;L;;;;3;N;;;;;
+111E4;SINHALA ARCHAIC DIGIT FOUR;No;0;L;;;;4;N;;;;;
+111E5;SINHALA ARCHAIC DIGIT FIVE;No;0;L;;;;5;N;;;;;
+111E6;SINHALA ARCHAIC DIGIT SIX;No;0;L;;;;6;N;;;;;
+111E7;SINHALA ARCHAIC DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+111E8;SINHALA ARCHAIC DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+111E9;SINHALA ARCHAIC DIGIT NINE;No;0;L;;;;9;N;;;;;
+111EA;SINHALA ARCHAIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+111EB;SINHALA ARCHAIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+111EC;SINHALA ARCHAIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+111ED;SINHALA ARCHAIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+111EE;SINHALA ARCHAIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+111EF;SINHALA ARCHAIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+111F0;SINHALA ARCHAIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+111F1;SINHALA ARCHAIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+111F2;SINHALA ARCHAIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+111F3;SINHALA ARCHAIC NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+111F4;SINHALA ARCHAIC NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+11200;KHOJKI LETTER A;Lo;0;L;;;;;N;;;;;
+11201;KHOJKI LETTER AA;Lo;0;L;;;;;N;;;;;
+11202;KHOJKI LETTER I;Lo;0;L;;;;;N;;;;;
+11203;KHOJKI LETTER U;Lo;0;L;;;;;N;;;;;
+11204;KHOJKI LETTER E;Lo;0;L;;;;;N;;;;;
+11205;KHOJKI LETTER AI;Lo;0;L;;;;;N;;;;;
+11206;KHOJKI LETTER O;Lo;0;L;;;;;N;;;;;
+11207;KHOJKI LETTER AU;Lo;0;L;;;;;N;;;;;
+11208;KHOJKI LETTER KA;Lo;0;L;;;;;N;;;;;
+11209;KHOJKI LETTER KHA;Lo;0;L;;;;;N;;;;;
+1120A;KHOJKI LETTER GA;Lo;0;L;;;;;N;;;;;
+1120B;KHOJKI LETTER GGA;Lo;0;L;;;;;N;;;;;
+1120C;KHOJKI LETTER GHA;Lo;0;L;;;;;N;;;;;
+1120D;KHOJKI LETTER NGA;Lo;0;L;;;;;N;;;;;
+1120E;KHOJKI LETTER CA;Lo;0;L;;;;;N;;;;;
+1120F;KHOJKI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11210;KHOJKI LETTER JA;Lo;0;L;;;;;N;;;;;
+11211;KHOJKI LETTER JJA;Lo;0;L;;;;;N;;;;;
+11213;KHOJKI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11214;KHOJKI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11215;KHOJKI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11216;KHOJKI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11217;KHOJKI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11218;KHOJKI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11219;KHOJKI LETTER TA;Lo;0;L;;;;;N;;;;;
+1121A;KHOJKI LETTER THA;Lo;0;L;;;;;N;;;;;
+1121B;KHOJKI LETTER DA;Lo;0;L;;;;;N;;;;;
+1121C;KHOJKI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+1121D;KHOJKI LETTER DHA;Lo;0;L;;;;;N;;;;;
+1121E;KHOJKI LETTER NA;Lo;0;L;;;;;N;;;;;
+1121F;KHOJKI LETTER PA;Lo;0;L;;;;;N;;;;;
+11220;KHOJKI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11221;KHOJKI LETTER BA;Lo;0;L;;;;;N;;;;;
+11222;KHOJKI LETTER BBA;Lo;0;L;;;;;N;;;;;
+11223;KHOJKI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11224;KHOJKI LETTER MA;Lo;0;L;;;;;N;;;;;
+11225;KHOJKI LETTER YA;Lo;0;L;;;;;N;;;;;
+11226;KHOJKI LETTER RA;Lo;0;L;;;;;N;;;;;
+11227;KHOJKI LETTER LA;Lo;0;L;;;;;N;;;;;
+11228;KHOJKI LETTER VA;Lo;0;L;;;;;N;;;;;
+11229;KHOJKI LETTER SA;Lo;0;L;;;;;N;;;;;
+1122A;KHOJKI LETTER HA;Lo;0;L;;;;;N;;;;;
+1122B;KHOJKI LETTER LLA;Lo;0;L;;;;;N;;;;;
+1122C;KHOJKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1122D;KHOJKI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1122E;KHOJKI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+1122F;KHOJKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11230;KHOJKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11231;KHOJKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11232;KHOJKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11233;KHOJKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11234;KHOJKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11235;KHOJKI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+11236;KHOJKI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11237;KHOJKI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;;
+11238;KHOJKI DANDA;Po;0;L;;;;;N;;;;;
+11239;KHOJKI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+1123A;KHOJKI WORD SEPARATOR;Po;0;L;;;;;N;;;;;
+1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;;
+1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
+1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;
+11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;;
+11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;;
+11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;;
+11283;MULTANI LETTER E;Lo;0;L;;;;;N;;;;;
+11284;MULTANI LETTER KA;Lo;0;L;;;;;N;;;;;
+11285;MULTANI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11286;MULTANI LETTER GA;Lo;0;L;;;;;N;;;;;
+11288;MULTANI LETTER GHA;Lo;0;L;;;;;N;;;;;
+1128A;MULTANI LETTER CA;Lo;0;L;;;;;N;;;;;
+1128B;MULTANI LETTER CHA;Lo;0;L;;;;;N;;;;;
+1128C;MULTANI LETTER JA;Lo;0;L;;;;;N;;;;;
+1128D;MULTANI LETTER JJA;Lo;0;L;;;;;N;;;;;
+1128F;MULTANI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11290;MULTANI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11291;MULTANI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11292;MULTANI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11293;MULTANI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+11294;MULTANI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11295;MULTANI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11296;MULTANI LETTER TA;Lo;0;L;;;;;N;;;;;
+11297;MULTANI LETTER THA;Lo;0;L;;;;;N;;;;;
+11298;MULTANI LETTER DA;Lo;0;L;;;;;N;;;;;
+11299;MULTANI LETTER DHA;Lo;0;L;;;;;N;;;;;
+1129A;MULTANI LETTER NA;Lo;0;L;;;;;N;;;;;
+1129B;MULTANI LETTER PA;Lo;0;L;;;;;N;;;;;
+1129C;MULTANI LETTER PHA;Lo;0;L;;;;;N;;;;;
+1129D;MULTANI LETTER BA;Lo;0;L;;;;;N;;;;;
+1129F;MULTANI LETTER BHA;Lo;0;L;;;;;N;;;;;
+112A0;MULTANI LETTER MA;Lo;0;L;;;;;N;;;;;
+112A1;MULTANI LETTER YA;Lo;0;L;;;;;N;;;;;
+112A2;MULTANI LETTER RA;Lo;0;L;;;;;N;;;;;
+112A3;MULTANI LETTER LA;Lo;0;L;;;;;N;;;;;
+112A4;MULTANI LETTER VA;Lo;0;L;;;;;N;;;;;
+112A5;MULTANI LETTER SA;Lo;0;L;;;;;N;;;;;
+112A6;MULTANI LETTER HA;Lo;0;L;;;;;N;;;;;
+112A7;MULTANI LETTER RRA;Lo;0;L;;;;;N;;;;;
+112A8;MULTANI LETTER RHA;Lo;0;L;;;;;N;;;;;
+112A9;MULTANI SECTION MARK;Po;0;L;;;;;N;;;;;
+112B0;KHUDAWADI LETTER A;Lo;0;L;;;;;N;;;;;
+112B1;KHUDAWADI LETTER AA;Lo;0;L;;;;;N;;;;;
+112B2;KHUDAWADI LETTER I;Lo;0;L;;;;;N;;;;;
+112B3;KHUDAWADI LETTER II;Lo;0;L;;;;;N;;;;;
+112B4;KHUDAWADI LETTER U;Lo;0;L;;;;;N;;;;;
+112B5;KHUDAWADI LETTER UU;Lo;0;L;;;;;N;;;;;
+112B6;KHUDAWADI LETTER E;Lo;0;L;;;;;N;;;;;
+112B7;KHUDAWADI LETTER AI;Lo;0;L;;;;;N;;;;;
+112B8;KHUDAWADI LETTER O;Lo;0;L;;;;;N;;;;;
+112B9;KHUDAWADI LETTER AU;Lo;0;L;;;;;N;;;;;
+112BA;KHUDAWADI LETTER KA;Lo;0;L;;;;;N;;;;;
+112BB;KHUDAWADI LETTER KHA;Lo;0;L;;;;;N;;;;;
+112BC;KHUDAWADI LETTER GA;Lo;0;L;;;;;N;;;;;
+112BD;KHUDAWADI LETTER GGA;Lo;0;L;;;;;N;;;;;
+112BE;KHUDAWADI LETTER GHA;Lo;0;L;;;;;N;;;;;
+112BF;KHUDAWADI LETTER NGA;Lo;0;L;;;;;N;;;;;
+112C0;KHUDAWADI LETTER CA;Lo;0;L;;;;;N;;;;;
+112C1;KHUDAWADI LETTER CHA;Lo;0;L;;;;;N;;;;;
+112C2;KHUDAWADI LETTER JA;Lo;0;L;;;;;N;;;;;
+112C3;KHUDAWADI LETTER JJA;Lo;0;L;;;;;N;;;;;
+112C4;KHUDAWADI LETTER JHA;Lo;0;L;;;;;N;;;;;
+112C5;KHUDAWADI LETTER NYA;Lo;0;L;;;;;N;;;;;
+112C6;KHUDAWADI LETTER TTA;Lo;0;L;;;;;N;;;;;
+112C7;KHUDAWADI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+112C8;KHUDAWADI LETTER DDA;Lo;0;L;;;;;N;;;;;
+112C9;KHUDAWADI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+112CA;KHUDAWADI LETTER RRA;Lo;0;L;;;;;N;;;;;
+112CB;KHUDAWADI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+112CC;KHUDAWADI LETTER NNA;Lo;0;L;;;;;N;;;;;
+112CD;KHUDAWADI LETTER TA;Lo;0;L;;;;;N;;;;;
+112CE;KHUDAWADI LETTER THA;Lo;0;L;;;;;N;;;;;
+112CF;KHUDAWADI LETTER DA;Lo;0;L;;;;;N;;;;;
+112D0;KHUDAWADI LETTER DHA;Lo;0;L;;;;;N;;;;;
+112D1;KHUDAWADI LETTER NA;Lo;0;L;;;;;N;;;;;
+112D2;KHUDAWADI LETTER PA;Lo;0;L;;;;;N;;;;;
+112D3;KHUDAWADI LETTER PHA;Lo;0;L;;;;;N;;;;;
+112D4;KHUDAWADI LETTER BA;Lo;0;L;;;;;N;;;;;
+112D5;KHUDAWADI LETTER BBA;Lo;0;L;;;;;N;;;;;
+112D6;KHUDAWADI LETTER BHA;Lo;0;L;;;;;N;;;;;
+112D7;KHUDAWADI LETTER MA;Lo;0;L;;;;;N;;;;;
+112D8;KHUDAWADI LETTER YA;Lo;0;L;;;;;N;;;;;
+112D9;KHUDAWADI LETTER RA;Lo;0;L;;;;;N;;;;;
+112DA;KHUDAWADI LETTER LA;Lo;0;L;;;;;N;;;;;
+112DB;KHUDAWADI LETTER VA;Lo;0;L;;;;;N;;;;;
+112DC;KHUDAWADI LETTER SHA;Lo;0;L;;;;;N;;;;;
+112DD;KHUDAWADI LETTER SA;Lo;0;L;;;;;N;;;;;
+112DE;KHUDAWADI LETTER HA;Lo;0;L;;;;;N;;;;;
+112DF;KHUDAWADI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+112E0;KHUDAWADI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+112E1;KHUDAWADI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+112E2;KHUDAWADI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+112E3;KHUDAWADI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+112E4;KHUDAWADI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+112E5;KHUDAWADI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+112E6;KHUDAWADI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+112E7;KHUDAWADI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+112E8;KHUDAWADI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+112E9;KHUDAWADI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+112EA;KHUDAWADI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+112F0;KHUDAWADI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+112F1;KHUDAWADI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+112F2;KHUDAWADI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+112F3;KHUDAWADI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+112F4;KHUDAWADI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+112F5;KHUDAWADI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+112F6;KHUDAWADI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+112F7;KHUDAWADI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+112F8;KHUDAWADI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+112F9;KHUDAWADI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11300;GRANTHA SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
+11301;GRANTHA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11305;GRANTHA LETTER A;Lo;0;L;;;;;N;;;;;
+11306;GRANTHA LETTER AA;Lo;0;L;;;;;N;;;;;
+11307;GRANTHA LETTER I;Lo;0;L;;;;;N;;;;;
+11308;GRANTHA LETTER II;Lo;0;L;;;;;N;;;;;
+11309;GRANTHA LETTER U;Lo;0;L;;;;;N;;;;;
+1130A;GRANTHA LETTER UU;Lo;0;L;;;;;N;;;;;
+1130B;GRANTHA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1130C;GRANTHA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1130F;GRANTHA LETTER EE;Lo;0;L;;;;;N;;;;;
+11310;GRANTHA LETTER AI;Lo;0;L;;;;;N;;;;;
+11313;GRANTHA LETTER OO;Lo;0;L;;;;;N;;;;;
+11314;GRANTHA LETTER AU;Lo;0;L;;;;;N;;;;;
+11315;GRANTHA LETTER KA;Lo;0;L;;;;;N;;;;;
+11316;GRANTHA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11317;GRANTHA LETTER GA;Lo;0;L;;;;;N;;;;;
+11318;GRANTHA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11319;GRANTHA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1131A;GRANTHA LETTER CA;Lo;0;L;;;;;N;;;;;
+1131B;GRANTHA LETTER CHA;Lo;0;L;;;;;N;;;;;
+1131C;GRANTHA LETTER JA;Lo;0;L;;;;;N;;;;;
+1131D;GRANTHA LETTER JHA;Lo;0;L;;;;;N;;;;;
+1131E;GRANTHA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1131F;GRANTHA LETTER TTA;Lo;0;L;;;;;N;;;;;
+11320;GRANTHA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11321;GRANTHA LETTER DDA;Lo;0;L;;;;;N;;;;;
+11322;GRANTHA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11323;GRANTHA LETTER NNA;Lo;0;L;;;;;N;;;;;
+11324;GRANTHA LETTER TA;Lo;0;L;;;;;N;;;;;
+11325;GRANTHA LETTER THA;Lo;0;L;;;;;N;;;;;
+11326;GRANTHA LETTER DA;Lo;0;L;;;;;N;;;;;
+11327;GRANTHA LETTER DHA;Lo;0;L;;;;;N;;;;;
+11328;GRANTHA LETTER NA;Lo;0;L;;;;;N;;;;;
+1132A;GRANTHA LETTER PA;Lo;0;L;;;;;N;;;;;
+1132B;GRANTHA LETTER PHA;Lo;0;L;;;;;N;;;;;
+1132C;GRANTHA LETTER BA;Lo;0;L;;;;;N;;;;;
+1132D;GRANTHA LETTER BHA;Lo;0;L;;;;;N;;;;;
+1132E;GRANTHA LETTER MA;Lo;0;L;;;;;N;;;;;
+1132F;GRANTHA LETTER YA;Lo;0;L;;;;;N;;;;;
+11330;GRANTHA LETTER RA;Lo;0;L;;;;;N;;;;;
+11332;GRANTHA LETTER LA;Lo;0;L;;;;;N;;;;;
+11333;GRANTHA LETTER LLA;Lo;0;L;;;;;N;;;;;
+11335;GRANTHA LETTER VA;Lo;0;L;;;;;N;;;;;
+11336;GRANTHA LETTER SHA;Lo;0;L;;;;;N;;;;;
+11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;;
+11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;;
+11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;;
+1133B;COMBINING BINDU BELOW;Mn;7;NSM;;;;;N;;;;;
+1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1133F;GRANTHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11340;GRANTHA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11341;GRANTHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+11342;GRANTHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+11343;GRANTHA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+11344;GRANTHA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+11347;GRANTHA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+11348;GRANTHA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;;
+1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;;
+1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+11350;GRANTHA OM;Lo;0;L;;;;;N;;;;;
+11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+1135D;GRANTHA SIGN PLUTA;Lo;0;L;;;;;N;;;;;
+1135E;GRANTHA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
+1135F;GRANTHA LETTER VEDIC DOUBLE ANUSVARA;Lo;0;L;;;;;N;;;;;
+11360;GRANTHA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11361;GRANTHA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+11362;GRANTHA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
+11363;GRANTHA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
+11366;COMBINING GRANTHA DIGIT ZERO;Mn;230;NSM;;;;;N;;;;;
+11367;COMBINING GRANTHA DIGIT ONE;Mn;230;NSM;;;;;N;;;;;
+11368;COMBINING GRANTHA DIGIT TWO;Mn;230;NSM;;;;;N;;;;;
+11369;COMBINING GRANTHA DIGIT THREE;Mn;230;NSM;;;;;N;;;;;
+1136A;COMBINING GRANTHA DIGIT FOUR;Mn;230;NSM;;;;;N;;;;;
+1136B;COMBINING GRANTHA DIGIT FIVE;Mn;230;NSM;;;;;N;;;;;
+1136C;COMBINING GRANTHA DIGIT SIX;Mn;230;NSM;;;;;N;;;;;
+11370;COMBINING GRANTHA LETTER A;Mn;230;NSM;;;;;N;;;;;
+11371;COMBINING GRANTHA LETTER KA;Mn;230;NSM;;;;;N;;;;;
+11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;;
+11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;;
+11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;;
+11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;;
+11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;;
+11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;;
+11403;NEWA LETTER II;Lo;0;L;;;;;N;;;;;
+11404;NEWA LETTER U;Lo;0;L;;;;;N;;;;;
+11405;NEWA LETTER UU;Lo;0;L;;;;;N;;;;;
+11406;NEWA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11407;NEWA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11408;NEWA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+11409;NEWA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1140A;NEWA LETTER E;Lo;0;L;;;;;N;;;;;
+1140B;NEWA LETTER AI;Lo;0;L;;;;;N;;;;;
+1140C;NEWA LETTER O;Lo;0;L;;;;;N;;;;;
+1140D;NEWA LETTER AU;Lo;0;L;;;;;N;;;;;
+1140E;NEWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1140F;NEWA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11410;NEWA LETTER GA;Lo;0;L;;;;;N;;;;;
+11411;NEWA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11412;NEWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+11413;NEWA LETTER NGHA;Lo;0;L;;;;;N;;;;;
+11414;NEWA LETTER CA;Lo;0;L;;;;;N;;;;;
+11415;NEWA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11416;NEWA LETTER JA;Lo;0;L;;;;;N;;;;;
+11417;NEWA LETTER JHA;Lo;0;L;;;;;N;;;;;
+11418;NEWA LETTER NYA;Lo;0;L;;;;;N;;;;;
+11419;NEWA LETTER NYHA;Lo;0;L;;;;;N;;;;;
+1141A;NEWA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1141B;NEWA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1141C;NEWA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1141D;NEWA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1141E;NEWA LETTER NNA;Lo;0;L;;;;;N;;;;;
+1141F;NEWA LETTER TA;Lo;0;L;;;;;N;;;;;
+11420;NEWA LETTER THA;Lo;0;L;;;;;N;;;;;
+11421;NEWA LETTER DA;Lo;0;L;;;;;N;;;;;
+11422;NEWA LETTER DHA;Lo;0;L;;;;;N;;;;;
+11423;NEWA LETTER NA;Lo;0;L;;;;;N;;;;;
+11424;NEWA LETTER NHA;Lo;0;L;;;;;N;;;;;
+11425;NEWA LETTER PA;Lo;0;L;;;;;N;;;;;
+11426;NEWA LETTER PHA;Lo;0;L;;;;;N;;;;;
+11427;NEWA LETTER BA;Lo;0;L;;;;;N;;;;;
+11428;NEWA LETTER BHA;Lo;0;L;;;;;N;;;;;
+11429;NEWA LETTER MA;Lo;0;L;;;;;N;;;;;
+1142A;NEWA LETTER MHA;Lo;0;L;;;;;N;;;;;
+1142B;NEWA LETTER YA;Lo;0;L;;;;;N;;;;;
+1142C;NEWA LETTER RA;Lo;0;L;;;;;N;;;;;
+1142D;NEWA LETTER RHA;Lo;0;L;;;;;N;;;;;
+1142E;NEWA LETTER LA;Lo;0;L;;;;;N;;;;;
+1142F;NEWA LETTER LHA;Lo;0;L;;;;;N;;;;;
+11430;NEWA LETTER WA;Lo;0;L;;;;;N;;;;;
+11431;NEWA LETTER SHA;Lo;0;L;;;;;N;;;;;
+11432;NEWA LETTER SSA;Lo;0;L;;;;;N;;;;;
+11433;NEWA LETTER SA;Lo;0;L;;;;;N;;;;;
+11434;NEWA LETTER HA;Lo;0;L;;;;;N;;;;;
+11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11438;NEWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11439;NEWA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1143A;NEWA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+1143B;NEWA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+1143C;NEWA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1143D;NEWA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+1143E;NEWA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1143F;NEWA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11442;NEWA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11443;NEWA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11444;NEWA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11446;NEWA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11447;NEWA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+11448;NEWA SIGN FINAL ANUSVARA;Lo;0;L;;;;;N;;;;;
+11449;NEWA OM;Lo;0;L;;;;;N;;;;;
+1144A;NEWA SIDDHI;Lo;0;L;;;;;N;;;;;
+1144B;NEWA DANDA;Po;0;L;;;;;N;;;;;
+1144C;NEWA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+1144D;NEWA COMMA;Po;0;L;;;;;N;;;;;
+1144E;NEWA GAP FILLER;Po;0;L;;;;;N;;;;;
+1144F;NEWA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+11450;NEWA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11451;NEWA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11452;NEWA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11453;NEWA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11454;NEWA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11455;NEWA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11456;NEWA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;
+1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;
+1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
+1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
+11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;
+11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;
+11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;
+11483;TIRHUTA LETTER I;Lo;0;L;;;;;N;;;;;
+11484;TIRHUTA LETTER II;Lo;0;L;;;;;N;;;;;
+11485;TIRHUTA LETTER U;Lo;0;L;;;;;N;;;;;
+11486;TIRHUTA LETTER UU;Lo;0;L;;;;;N;;;;;
+11487;TIRHUTA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11488;TIRHUTA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11489;TIRHUTA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1148A;TIRHUTA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1148B;TIRHUTA LETTER E;Lo;0;L;;;;;N;;;;;
+1148C;TIRHUTA LETTER AI;Lo;0;L;;;;;N;;;;;
+1148D;TIRHUTA LETTER O;Lo;0;L;;;;;N;;;;;
+1148E;TIRHUTA LETTER AU;Lo;0;L;;;;;N;;;;;
+1148F;TIRHUTA LETTER KA;Lo;0;L;;;;;N;;;;;
+11490;TIRHUTA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11491;TIRHUTA LETTER GA;Lo;0;L;;;;;N;;;;;
+11492;TIRHUTA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11493;TIRHUTA LETTER NGA;Lo;0;L;;;;;N;;;;;
+11494;TIRHUTA LETTER CA;Lo;0;L;;;;;N;;;;;
+11495;TIRHUTA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11496;TIRHUTA LETTER JA;Lo;0;L;;;;;N;;;;;
+11497;TIRHUTA LETTER JHA;Lo;0;L;;;;;N;;;;;
+11498;TIRHUTA LETTER NYA;Lo;0;L;;;;;N;;;;;
+11499;TIRHUTA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1149A;TIRHUTA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1149B;TIRHUTA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1149C;TIRHUTA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1149D;TIRHUTA LETTER NNA;Lo;0;L;;;;;N;;;;;
+1149E;TIRHUTA LETTER TA;Lo;0;L;;;;;N;;;;;
+1149F;TIRHUTA LETTER THA;Lo;0;L;;;;;N;;;;;
+114A0;TIRHUTA LETTER DA;Lo;0;L;;;;;N;;;;;
+114A1;TIRHUTA LETTER DHA;Lo;0;L;;;;;N;;;;;
+114A2;TIRHUTA LETTER NA;Lo;0;L;;;;;N;;;;;
+114A3;TIRHUTA LETTER PA;Lo;0;L;;;;;N;;;;;
+114A4;TIRHUTA LETTER PHA;Lo;0;L;;;;;N;;;;;
+114A5;TIRHUTA LETTER BA;Lo;0;L;;;;;N;;;;;
+114A6;TIRHUTA LETTER BHA;Lo;0;L;;;;;N;;;;;
+114A7;TIRHUTA LETTER MA;Lo;0;L;;;;;N;;;;;
+114A8;TIRHUTA LETTER YA;Lo;0;L;;;;;N;;;;;
+114A9;TIRHUTA LETTER RA;Lo;0;L;;;;;N;;;;;
+114AA;TIRHUTA LETTER LA;Lo;0;L;;;;;N;;;;;
+114AB;TIRHUTA LETTER VA;Lo;0;L;;;;;N;;;;;
+114AC;TIRHUTA LETTER SHA;Lo;0;L;;;;;N;;;;;
+114AD;TIRHUTA LETTER SSA;Lo;0;L;;;;;N;;;;;
+114AE;TIRHUTA LETTER SA;Lo;0;L;;;;;N;;;;;
+114AF;TIRHUTA LETTER HA;Lo;0;L;;;;;N;;;;;
+114B0;TIRHUTA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+114B1;TIRHUTA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+114B2;TIRHUTA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+114B3;TIRHUTA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+114B4;TIRHUTA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+114B5;TIRHUTA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+114B6;TIRHUTA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+114B7;TIRHUTA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+114B8;TIRHUTA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+114B9;TIRHUTA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+114BA;TIRHUTA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+114BB;TIRHUTA VOWEL SIGN AI;Mc;0;L;114B9 114BA;;;;N;;;;;
+114BC;TIRHUTA VOWEL SIGN O;Mc;0;L;114B9 114B0;;;;N;;;;;
+114BD;TIRHUTA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+114BE;TIRHUTA VOWEL SIGN AU;Mc;0;L;114B9 114BD;;;;N;;;;;
+114BF;TIRHUTA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+114C0;TIRHUTA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+114C1;TIRHUTA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+114C2;TIRHUTA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+114C3;TIRHUTA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+114C4;TIRHUTA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+114C5;TIRHUTA GVANG;Lo;0;L;;;;;N;;;;;
+114C6;TIRHUTA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+114C7;TIRHUTA OM;Lo;0;L;;;;;N;;;;;
+114D0;TIRHUTA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+114D1;TIRHUTA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+114D2;TIRHUTA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+114D3;TIRHUTA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+114D4;TIRHUTA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+114D5;TIRHUTA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+114D6;TIRHUTA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+114D7;TIRHUTA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+114D8;TIRHUTA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+114D9;TIRHUTA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11580;SIDDHAM LETTER A;Lo;0;L;;;;;N;;;;;
+11581;SIDDHAM LETTER AA;Lo;0;L;;;;;N;;;;;
+11582;SIDDHAM LETTER I;Lo;0;L;;;;;N;;;;;
+11583;SIDDHAM LETTER II;Lo;0;L;;;;;N;;;;;
+11584;SIDDHAM LETTER U;Lo;0;L;;;;;N;;;;;
+11585;SIDDHAM LETTER UU;Lo;0;L;;;;;N;;;;;
+11586;SIDDHAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11587;SIDDHAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11588;SIDDHAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+11589;SIDDHAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1158A;SIDDHAM LETTER E;Lo;0;L;;;;;N;;;;;
+1158B;SIDDHAM LETTER AI;Lo;0;L;;;;;N;;;;;
+1158C;SIDDHAM LETTER O;Lo;0;L;;;;;N;;;;;
+1158D;SIDDHAM LETTER AU;Lo;0;L;;;;;N;;;;;
+1158E;SIDDHAM LETTER KA;Lo;0;L;;;;;N;;;;;
+1158F;SIDDHAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+11590;SIDDHAM LETTER GA;Lo;0;L;;;;;N;;;;;
+11591;SIDDHAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+11592;SIDDHAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+11593;SIDDHAM LETTER CA;Lo;0;L;;;;;N;;;;;
+11594;SIDDHAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+11595;SIDDHAM LETTER JA;Lo;0;L;;;;;N;;;;;
+11596;SIDDHAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+11597;SIDDHAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+11598;SIDDHAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+11599;SIDDHAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1159A;SIDDHAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+1159B;SIDDHAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1159C;SIDDHAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+1159D;SIDDHAM LETTER TA;Lo;0;L;;;;;N;;;;;
+1159E;SIDDHAM LETTER THA;Lo;0;L;;;;;N;;;;;
+1159F;SIDDHAM LETTER DA;Lo;0;L;;;;;N;;;;;
+115A0;SIDDHAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+115A1;SIDDHAM LETTER NA;Lo;0;L;;;;;N;;;;;
+115A2;SIDDHAM LETTER PA;Lo;0;L;;;;;N;;;;;
+115A3;SIDDHAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+115A4;SIDDHAM LETTER BA;Lo;0;L;;;;;N;;;;;
+115A5;SIDDHAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+115A6;SIDDHAM LETTER MA;Lo;0;L;;;;;N;;;;;
+115A7;SIDDHAM LETTER YA;Lo;0;L;;;;;N;;;;;
+115A8;SIDDHAM LETTER RA;Lo;0;L;;;;;N;;;;;
+115A9;SIDDHAM LETTER LA;Lo;0;L;;;;;N;;;;;
+115AA;SIDDHAM LETTER VA;Lo;0;L;;;;;N;;;;;
+115AB;SIDDHAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+115AC;SIDDHAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+115AD;SIDDHAM LETTER SA;Lo;0;L;;;;;N;;;;;
+115AE;SIDDHAM LETTER HA;Lo;0;L;;;;;N;;;;;
+115AF;SIDDHAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+115B0;SIDDHAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+115B1;SIDDHAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+115B2;SIDDHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+115B3;SIDDHAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+115B4;SIDDHAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+115B5;SIDDHAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+115B8;SIDDHAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+115B9;SIDDHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+115BA;SIDDHAM VOWEL SIGN O;Mc;0;L;115B8 115AF;;;;N;;;;;
+115BB;SIDDHAM VOWEL SIGN AU;Mc;0;L;115B9 115AF;;;;N;;;;;
+115BC;SIDDHAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+115BD;SIDDHAM SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+115BE;SIDDHAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+115BF;SIDDHAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+115C0;SIDDHAM SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+115C1;SIDDHAM SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+115C2;SIDDHAM DANDA;Po;0;L;;;;;N;;;;;
+115C3;SIDDHAM DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+115C4;SIDDHAM SEPARATOR DOT;Po;0;L;;;;;N;;;;;
+115C5;SIDDHAM SEPARATOR BAR;Po;0;L;;;;;N;;;;;
+115C6;SIDDHAM REPETITION MARK-1;Po;0;L;;;;;N;;;;;
+115C7;SIDDHAM REPETITION MARK-2;Po;0;L;;;;;N;;;;;
+115C8;SIDDHAM REPETITION MARK-3;Po;0;L;;;;;N;;;;;
+115C9;SIDDHAM END OF TEXT MARK;Po;0;L;;;;;N;;;;;
+115CA;SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS;Po;0;L;;;;;N;;;;;
+115CB;SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;;
+115CC;SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;;
+115CD;SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115CE;SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115CF;SIDDHAM SECTION MARK DOUBLE RING;Po;0;L;;;;;N;;;;;
+115D0;SIDDHAM SECTION MARK DOUBLE RING WITH RAYS;Po;0;L;;;;;N;;;;;
+115D1;SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D2;SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D3;SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D4;SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS;Po;0;L;;;;;N;;;;;
+115D5;SIDDHAM SECTION MARK WITH CIRCLES AND RAYS;Po;0;L;;;;;N;;;;;
+115D6;SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES;Po;0;L;;;;;N;;;;;
+115D7;SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES;Po;0;L;;;;;N;;;;;
+115D8;SIDDHAM LETTER THREE-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;;
+115D9;SIDDHAM LETTER TWO-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;;
+115DA;SIDDHAM LETTER TWO-CIRCLE ALTERNATE II;Lo;0;L;;;;;N;;;;;
+115DB;SIDDHAM LETTER ALTERNATE U;Lo;0;L;;;;;N;;;;;
+115DC;SIDDHAM VOWEL SIGN ALTERNATE U;Mn;0;NSM;;;;;N;;;;;
+115DD;SIDDHAM VOWEL SIGN ALTERNATE UU;Mn;0;NSM;;;;;N;;;;;
+11600;MODI LETTER A;Lo;0;L;;;;;N;;;;;
+11601;MODI LETTER AA;Lo;0;L;;;;;N;;;;;
+11602;MODI LETTER I;Lo;0;L;;;;;N;;;;;
+11603;MODI LETTER II;Lo;0;L;;;;;N;;;;;
+11604;MODI LETTER U;Lo;0;L;;;;;N;;;;;
+11605;MODI LETTER UU;Lo;0;L;;;;;N;;;;;
+11606;MODI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11607;MODI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11608;MODI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+11609;MODI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1160A;MODI LETTER E;Lo;0;L;;;;;N;;;;;
+1160B;MODI LETTER AI;Lo;0;L;;;;;N;;;;;
+1160C;MODI LETTER O;Lo;0;L;;;;;N;;;;;
+1160D;MODI LETTER AU;Lo;0;L;;;;;N;;;;;
+1160E;MODI LETTER KA;Lo;0;L;;;;;N;;;;;
+1160F;MODI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11610;MODI LETTER GA;Lo;0;L;;;;;N;;;;;
+11611;MODI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11612;MODI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11613;MODI LETTER CA;Lo;0;L;;;;;N;;;;;
+11614;MODI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11615;MODI LETTER JA;Lo;0;L;;;;;N;;;;;
+11616;MODI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11617;MODI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11618;MODI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11619;MODI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1161A;MODI LETTER DDA;Lo;0;L;;;;;N;;;;;
+1161B;MODI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1161C;MODI LETTER NNA;Lo;0;L;;;;;N;;;;;
+1161D;MODI LETTER TA;Lo;0;L;;;;;N;;;;;
+1161E;MODI LETTER THA;Lo;0;L;;;;;N;;;;;
+1161F;MODI LETTER DA;Lo;0;L;;;;;N;;;;;
+11620;MODI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11621;MODI LETTER NA;Lo;0;L;;;;;N;;;;;
+11622;MODI LETTER PA;Lo;0;L;;;;;N;;;;;
+11623;MODI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11624;MODI LETTER BA;Lo;0;L;;;;;N;;;;;
+11625;MODI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11626;MODI LETTER MA;Lo;0;L;;;;;N;;;;;
+11627;MODI LETTER YA;Lo;0;L;;;;;N;;;;;
+11628;MODI LETTER RA;Lo;0;L;;;;;N;;;;;
+11629;MODI LETTER LA;Lo;0;L;;;;;N;;;;;
+1162A;MODI LETTER VA;Lo;0;L;;;;;N;;;;;
+1162B;MODI LETTER SHA;Lo;0;L;;;;;N;;;;;
+1162C;MODI LETTER SSA;Lo;0;L;;;;;N;;;;;
+1162D;MODI LETTER SA;Lo;0;L;;;;;N;;;;;
+1162E;MODI LETTER HA;Lo;0;L;;;;;N;;;;;
+1162F;MODI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11630;MODI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11631;MODI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11632;MODI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11633;MODI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11634;MODI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11635;MODI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11636;MODI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11637;MODI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11638;MODI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+11639;MODI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1163A;MODI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1163B;MODI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1163C;MODI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+1163D;MODI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1163E;MODI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1163F;MODI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11640;MODI SIGN ARDHACANDRA;Mn;0;NSM;;;;;N;;;;;
+11641;MODI DANDA;Po;0;L;;;;;N;;;;;
+11642;MODI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11643;MODI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+11644;MODI SIGN HUVA;Lo;0;L;;;;;N;;;;;
+11650;MODI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11651;MODI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11652;MODI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11653;MODI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11654;MODI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11655;MODI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11656;MODI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11657;MODI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11658;MODI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11659;MODI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11660;MONGOLIAN BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11661;MONGOLIAN ROTATED BIRGA;Po;0;ON;;;;;N;;;;;
+11662;MONGOLIAN DOUBLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11663;MONGOLIAN TRIPLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11664;MONGOLIAN BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11665;MONGOLIAN ROTATED BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11666;MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11667;MONGOLIAN INVERTED BIRGA;Po;0;ON;;;;;N;;;;;
+11668;MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11669;MONGOLIAN SWIRL BIRGA;Po;0;ON;;;;;N;;;;;
+1166A;MONGOLIAN SWIRL BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+1166B;MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+1166C;MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;;
+11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;;
+11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;;
+11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;;
+11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;;
+11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;;
+11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;;
+11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;;
+11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;;
+11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;;
+1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;;
+1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;;
+1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;;
+1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;;
+1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;;
+1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;;
+11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;;
+11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;;
+1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;;
+1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;;
+1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;;
+1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;;
+1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;;
+1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;;
+116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;;
+116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;;
+116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;;
+116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;;
+116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;;
+116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;;
+116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;;
+116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;;
+116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;;
+116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;;
+116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;;
+116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;;
+116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;;
+11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;;
+11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;;
+11703;AHOM LETTER NA;Lo;0;L;;;;;N;;;;;
+11704;AHOM LETTER TA;Lo;0;L;;;;;N;;;;;
+11705;AHOM LETTER ALTERNATE TA;Lo;0;L;;;;;N;;;;;
+11706;AHOM LETTER PA;Lo;0;L;;;;;N;;;;;
+11707;AHOM LETTER PHA;Lo;0;L;;;;;N;;;;;
+11708;AHOM LETTER BA;Lo;0;L;;;;;N;;;;;
+11709;AHOM LETTER MA;Lo;0;L;;;;;N;;;;;
+1170A;AHOM LETTER JA;Lo;0;L;;;;;N;;;;;
+1170B;AHOM LETTER CHA;Lo;0;L;;;;;N;;;;;
+1170C;AHOM LETTER THA;Lo;0;L;;;;;N;;;;;
+1170D;AHOM LETTER RA;Lo;0;L;;;;;N;;;;;
+1170E;AHOM LETTER LA;Lo;0;L;;;;;N;;;;;
+1170F;AHOM LETTER SA;Lo;0;L;;;;;N;;;;;
+11710;AHOM LETTER NYA;Lo;0;L;;;;;N;;;;;
+11711;AHOM LETTER HA;Lo;0;L;;;;;N;;;;;
+11712;AHOM LETTER A;Lo;0;L;;;;;N;;;;;
+11713;AHOM LETTER DA;Lo;0;L;;;;;N;;;;;
+11714;AHOM LETTER DHA;Lo;0;L;;;;;N;;;;;
+11715;AHOM LETTER GA;Lo;0;L;;;;;N;;;;;
+11716;AHOM LETTER ALTERNATE GA;Lo;0;L;;;;;N;;;;;
+11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;;
+11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;;
+11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;;
+1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;;
+1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;;
+1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;;
+11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11722;AHOM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11723;AHOM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11724;AHOM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11725;AHOM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11727;AHOM VOWEL SIGN AW;Mn;0;NSM;;;;;N;;;;;
+11728;AHOM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11729;AHOM VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1172A;AHOM VOWEL SIGN AM;Mn;0;NSM;;;;;N;;;;;
+1172B;AHOM SIGN KILLER;Mn;9;NSM;;;;;N;;;;;
+11730;AHOM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11731;AHOM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11732;AHOM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11733;AHOM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11734;AHOM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11735;AHOM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11736;AHOM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11737;AHOM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11738;AHOM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11739;AHOM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1173A;AHOM NUMBER TEN;No;0;L;;;;10;N;;;;;
+1173B;AHOM NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1173C;AHOM SIGN SMALL SECTION;Po;0;L;;;;;N;;;;;
+1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
+1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
+1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
+11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;
+11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;
+11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;
+11803;DOGRA LETTER II;Lo;0;L;;;;;N;;;;;
+11804;DOGRA LETTER U;Lo;0;L;;;;;N;;;;;
+11805;DOGRA LETTER UU;Lo;0;L;;;;;N;;;;;
+11806;DOGRA LETTER E;Lo;0;L;;;;;N;;;;;
+11807;DOGRA LETTER AI;Lo;0;L;;;;;N;;;;;
+11808;DOGRA LETTER O;Lo;0;L;;;;;N;;;;;
+11809;DOGRA LETTER AU;Lo;0;L;;;;;N;;;;;
+1180A;DOGRA LETTER KA;Lo;0;L;;;;;N;;;;;
+1180B;DOGRA LETTER KHA;Lo;0;L;;;;;N;;;;;
+1180C;DOGRA LETTER GA;Lo;0;L;;;;;N;;;;;
+1180D;DOGRA LETTER GHA;Lo;0;L;;;;;N;;;;;
+1180E;DOGRA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1180F;DOGRA LETTER CA;Lo;0;L;;;;;N;;;;;
+11810;DOGRA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11811;DOGRA LETTER JA;Lo;0;L;;;;;N;;;;;
+11812;DOGRA LETTER JHA;Lo;0;L;;;;;N;;;;;
+11813;DOGRA LETTER NYA;Lo;0;L;;;;;N;;;;;
+11814;DOGRA LETTER TTA;Lo;0;L;;;;;N;;;;;
+11815;DOGRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11816;DOGRA LETTER DDA;Lo;0;L;;;;;N;;;;;
+11817;DOGRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11818;DOGRA LETTER NNA;Lo;0;L;;;;;N;;;;;
+11819;DOGRA LETTER TA;Lo;0;L;;;;;N;;;;;
+1181A;DOGRA LETTER THA;Lo;0;L;;;;;N;;;;;
+1181B;DOGRA LETTER DA;Lo;0;L;;;;;N;;;;;
+1181C;DOGRA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1181D;DOGRA LETTER NA;Lo;0;L;;;;;N;;;;;
+1181E;DOGRA LETTER PA;Lo;0;L;;;;;N;;;;;
+1181F;DOGRA LETTER PHA;Lo;0;L;;;;;N;;;;;
+11820;DOGRA LETTER BA;Lo;0;L;;;;;N;;;;;
+11821;DOGRA LETTER BHA;Lo;0;L;;;;;N;;;;;
+11822;DOGRA LETTER MA;Lo;0;L;;;;;N;;;;;
+11823;DOGRA LETTER YA;Lo;0;L;;;;;N;;;;;
+11824;DOGRA LETTER RA;Lo;0;L;;;;;N;;;;;
+11825;DOGRA LETTER LA;Lo;0;L;;;;;N;;;;;
+11826;DOGRA LETTER VA;Lo;0;L;;;;;N;;;;;
+11827;DOGRA LETTER SHA;Lo;0;L;;;;;N;;;;;
+11828;DOGRA LETTER SSA;Lo;0;L;;;;;N;;;;;
+11829;DOGRA LETTER SA;Lo;0;L;;;;;N;;;;;
+1182A;DOGRA LETTER HA;Lo;0;L;;;;;N;;;;;
+1182B;DOGRA LETTER RRA;Lo;0;L;;;;;N;;;;;
+1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+1182F;DOGRA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11830;DOGRA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11831;DOGRA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11832;DOGRA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11833;DOGRA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11834;DOGRA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11835;DOGRA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11836;DOGRA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11837;DOGRA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11839;DOGRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1183A;DOGRA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1183B;DOGRA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0;
+118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1;
+118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2;
+118A3;WARANG CITI CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;118C3;
+118A4;WARANG CITI CAPITAL LETTER YA;Lu;0;L;;;;;N;;;;118C4;
+118A5;WARANG CITI CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;118C5;
+118A6;WARANG CITI CAPITAL LETTER II;Lu;0;L;;;;;N;;;;118C6;
+118A7;WARANG CITI CAPITAL LETTER UU;Lu;0;L;;;;;N;;;;118C7;
+118A8;WARANG CITI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;118C8;
+118A9;WARANG CITI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;118C9;
+118AA;WARANG CITI CAPITAL LETTER ANG;Lu;0;L;;;;;N;;;;118CA;
+118AB;WARANG CITI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;118CB;
+118AC;WARANG CITI CAPITAL LETTER KO;Lu;0;L;;;;;N;;;;118CC;
+118AD;WARANG CITI CAPITAL LETTER ENY;Lu;0;L;;;;;N;;;;118CD;
+118AE;WARANG CITI CAPITAL LETTER YUJ;Lu;0;L;;;;;N;;;;118CE;
+118AF;WARANG CITI CAPITAL LETTER UC;Lu;0;L;;;;;N;;;;118CF;
+118B0;WARANG CITI CAPITAL LETTER ENN;Lu;0;L;;;;;N;;;;118D0;
+118B1;WARANG CITI CAPITAL LETTER ODD;Lu;0;L;;;;;N;;;;118D1;
+118B2;WARANG CITI CAPITAL LETTER TTE;Lu;0;L;;;;;N;;;;118D2;
+118B3;WARANG CITI CAPITAL LETTER NUNG;Lu;0;L;;;;;N;;;;118D3;
+118B4;WARANG CITI CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;118D4;
+118B5;WARANG CITI CAPITAL LETTER AT;Lu;0;L;;;;;N;;;;118D5;
+118B6;WARANG CITI CAPITAL LETTER AM;Lu;0;L;;;;;N;;;;118D6;
+118B7;WARANG CITI CAPITAL LETTER BU;Lu;0;L;;;;;N;;;;118D7;
+118B8;WARANG CITI CAPITAL LETTER PU;Lu;0;L;;;;;N;;;;118D8;
+118B9;WARANG CITI CAPITAL LETTER HIYO;Lu;0;L;;;;;N;;;;118D9;
+118BA;WARANG CITI CAPITAL LETTER HOLO;Lu;0;L;;;;;N;;;;118DA;
+118BB;WARANG CITI CAPITAL LETTER HORR;Lu;0;L;;;;;N;;;;118DB;
+118BC;WARANG CITI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;118DC;
+118BD;WARANG CITI CAPITAL LETTER SSUU;Lu;0;L;;;;;N;;;;118DD;
+118BE;WARANG CITI CAPITAL LETTER SII;Lu;0;L;;;;;N;;;;118DE;
+118BF;WARANG CITI CAPITAL LETTER VIYO;Lu;0;L;;;;;N;;;;118DF;
+118C0;WARANG CITI SMALL LETTER NGAA;Ll;0;L;;;;;N;;;118A0;;118A0
+118C1;WARANG CITI SMALL LETTER A;Ll;0;L;;;;;N;;;118A1;;118A1
+118C2;WARANG CITI SMALL LETTER WI;Ll;0;L;;;;;N;;;118A2;;118A2
+118C3;WARANG CITI SMALL LETTER YU;Ll;0;L;;;;;N;;;118A3;;118A3
+118C4;WARANG CITI SMALL LETTER YA;Ll;0;L;;;;;N;;;118A4;;118A4
+118C5;WARANG CITI SMALL LETTER YO;Ll;0;L;;;;;N;;;118A5;;118A5
+118C6;WARANG CITI SMALL LETTER II;Ll;0;L;;;;;N;;;118A6;;118A6
+118C7;WARANG CITI SMALL LETTER UU;Ll;0;L;;;;;N;;;118A7;;118A7
+118C8;WARANG CITI SMALL LETTER E;Ll;0;L;;;;;N;;;118A8;;118A8
+118C9;WARANG CITI SMALL LETTER O;Ll;0;L;;;;;N;;;118A9;;118A9
+118CA;WARANG CITI SMALL LETTER ANG;Ll;0;L;;;;;N;;;118AA;;118AA
+118CB;WARANG CITI SMALL LETTER GA;Ll;0;L;;;;;N;;;118AB;;118AB
+118CC;WARANG CITI SMALL LETTER KO;Ll;0;L;;;;;N;;;118AC;;118AC
+118CD;WARANG CITI SMALL LETTER ENY;Ll;0;L;;;;;N;;;118AD;;118AD
+118CE;WARANG CITI SMALL LETTER YUJ;Ll;0;L;;;;;N;;;118AE;;118AE
+118CF;WARANG CITI SMALL LETTER UC;Ll;0;L;;;;;N;;;118AF;;118AF
+118D0;WARANG CITI SMALL LETTER ENN;Ll;0;L;;;;;N;;;118B0;;118B0
+118D1;WARANG CITI SMALL LETTER ODD;Ll;0;L;;;;;N;;;118B1;;118B1
+118D2;WARANG CITI SMALL LETTER TTE;Ll;0;L;;;;;N;;;118B2;;118B2
+118D3;WARANG CITI SMALL LETTER NUNG;Ll;0;L;;;;;N;;;118B3;;118B3
+118D4;WARANG CITI SMALL LETTER DA;Ll;0;L;;;;;N;;;118B4;;118B4
+118D5;WARANG CITI SMALL LETTER AT;Ll;0;L;;;;;N;;;118B5;;118B5
+118D6;WARANG CITI SMALL LETTER AM;Ll;0;L;;;;;N;;;118B6;;118B6
+118D7;WARANG CITI SMALL LETTER BU;Ll;0;L;;;;;N;;;118B7;;118B7
+118D8;WARANG CITI SMALL LETTER PU;Ll;0;L;;;;;N;;;118B8;;118B8
+118D9;WARANG CITI SMALL LETTER HIYO;Ll;0;L;;;;;N;;;118B9;;118B9
+118DA;WARANG CITI SMALL LETTER HOLO;Ll;0;L;;;;;N;;;118BA;;118BA
+118DB;WARANG CITI SMALL LETTER HORR;Ll;0;L;;;;;N;;;118BB;;118BB
+118DC;WARANG CITI SMALL LETTER HAR;Ll;0;L;;;;;N;;;118BC;;118BC
+118DD;WARANG CITI SMALL LETTER SSUU;Ll;0;L;;;;;N;;;118BD;;118BD
+118DE;WARANG CITI SMALL LETTER SII;Ll;0;L;;;;;N;;;118BE;;118BE
+118DF;WARANG CITI SMALL LETTER VIYO;Ll;0;L;;;;;N;;;118BF;;118BF
+118E0;WARANG CITI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+118E1;WARANG CITI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+118E2;WARANG CITI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+118E3;WARANG CITI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+118E4;WARANG CITI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+118E5;WARANG CITI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+118E6;WARANG CITI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+118E7;WARANG CITI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+118E8;WARANG CITI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+118E9;WARANG CITI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+118EA;WARANG CITI NUMBER TEN;No;0;L;;;;10;N;;;;;
+118EB;WARANG CITI NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+118EC;WARANG CITI NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+118ED;WARANG CITI NUMBER FORTY;No;0;L;;;;40;N;;;;;
+118EE;WARANG CITI NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+118EF;WARANG CITI NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+118F0;WARANG CITI NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;;
+118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;;
+119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+119A3;NANDINAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+119A4;NANDINAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+119A5;NANDINAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+119A6;NANDINAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+119A7;NANDINAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+119AA;NANDINAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+119AB;NANDINAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+119AC;NANDINAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+119AD;NANDINAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+119AE;NANDINAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+119AF;NANDINAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+119B0;NANDINAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+119B1;NANDINAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+119B2;NANDINAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+119B3;NANDINAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+119B4;NANDINAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+119B5;NANDINAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+119B6;NANDINAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+119B7;NANDINAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+119B8;NANDINAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+119B9;NANDINAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+119BA;NANDINAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+119BB;NANDINAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+119BC;NANDINAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+119BD;NANDINAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+119BE;NANDINAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+119BF;NANDINAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+119C0;NANDINAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+119C1;NANDINAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+119C2;NANDINAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+119C3;NANDINAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+119C4;NANDINAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+119C5;NANDINAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+119C6;NANDINAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+119C7;NANDINAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+119C8;NANDINAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+119C9;NANDINAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+119CA;NANDINAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+119CB;NANDINAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+119CC;NANDINAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+119CD;NANDINAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+119CE;NANDINAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+119CF;NANDINAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+119D0;NANDINAGARI LETTER RRA;Lo;0;L;;;;;N;;;;;
+119D1;NANDINAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+119D2;NANDINAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+119D3;NANDINAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+119D4;NANDINAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+119D5;NANDINAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+119D6;NANDINAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+119D7;NANDINAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+119DA;NANDINAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+119DB;NANDINAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+119DC;NANDINAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+119DD;NANDINAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+119DE;NANDINAGARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+119DF;NANDINAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+119E0;NANDINAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+119E1;NANDINAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+119E2;NANDINAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
+119E3;NANDINAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;
+119E4;NANDINAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
+11A00;ZANABAZAR SQUARE LETTER A;Lo;0;L;;;;;N;;;;;
+11A01;ZANABAZAR SQUARE VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11A02;ZANABAZAR SQUARE VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+11A03;ZANABAZAR SQUARE VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mn;0;L;;;;;N;;;;;
+11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mn;0;L;;;;;N;;;;;
+11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;;
+11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;;
+11A0C;ZANABAZAR SQUARE LETTER KHA;Lo;0;L;;;;;N;;;;;
+11A0D;ZANABAZAR SQUARE LETTER GA;Lo;0;L;;;;;N;;;;;
+11A0E;ZANABAZAR SQUARE LETTER GHA;Lo;0;L;;;;;N;;;;;
+11A0F;ZANABAZAR SQUARE LETTER NGA;Lo;0;L;;;;;N;;;;;
+11A10;ZANABAZAR SQUARE LETTER CA;Lo;0;L;;;;;N;;;;;
+11A11;ZANABAZAR SQUARE LETTER CHA;Lo;0;L;;;;;N;;;;;
+11A12;ZANABAZAR SQUARE LETTER JA;Lo;0;L;;;;;N;;;;;
+11A13;ZANABAZAR SQUARE LETTER NYA;Lo;0;L;;;;;N;;;;;
+11A14;ZANABAZAR SQUARE LETTER TTA;Lo;0;L;;;;;N;;;;;
+11A15;ZANABAZAR SQUARE LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11A16;ZANABAZAR SQUARE LETTER DDA;Lo;0;L;;;;;N;;;;;
+11A17;ZANABAZAR SQUARE LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11A18;ZANABAZAR SQUARE LETTER NNA;Lo;0;L;;;;;N;;;;;
+11A19;ZANABAZAR SQUARE LETTER TA;Lo;0;L;;;;;N;;;;;
+11A1A;ZANABAZAR SQUARE LETTER THA;Lo;0;L;;;;;N;;;;;
+11A1B;ZANABAZAR SQUARE LETTER DA;Lo;0;L;;;;;N;;;;;
+11A1C;ZANABAZAR SQUARE LETTER DHA;Lo;0;L;;;;;N;;;;;
+11A1D;ZANABAZAR SQUARE LETTER NA;Lo;0;L;;;;;N;;;;;
+11A1E;ZANABAZAR SQUARE LETTER PA;Lo;0;L;;;;;N;;;;;
+11A1F;ZANABAZAR SQUARE LETTER PHA;Lo;0;L;;;;;N;;;;;
+11A20;ZANABAZAR SQUARE LETTER BA;Lo;0;L;;;;;N;;;;;
+11A21;ZANABAZAR SQUARE LETTER BHA;Lo;0;L;;;;;N;;;;;
+11A22;ZANABAZAR SQUARE LETTER MA;Lo;0;L;;;;;N;;;;;
+11A23;ZANABAZAR SQUARE LETTER TSA;Lo;0;L;;;;;N;;;;;
+11A24;ZANABAZAR SQUARE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+11A25;ZANABAZAR SQUARE LETTER DZA;Lo;0;L;;;;;N;;;;;
+11A26;ZANABAZAR SQUARE LETTER DZHA;Lo;0;L;;;;;N;;;;;
+11A27;ZANABAZAR SQUARE LETTER ZHA;Lo;0;L;;;;;N;;;;;
+11A28;ZANABAZAR SQUARE LETTER ZA;Lo;0;L;;;;;N;;;;;
+11A29;ZANABAZAR SQUARE LETTER -A;Lo;0;L;;;;;N;;;;;
+11A2A;ZANABAZAR SQUARE LETTER YA;Lo;0;L;;;;;N;;;;;
+11A2B;ZANABAZAR SQUARE LETTER RA;Lo;0;L;;;;;N;;;;;
+11A2C;ZANABAZAR SQUARE LETTER LA;Lo;0;L;;;;;N;;;;;
+11A2D;ZANABAZAR SQUARE LETTER VA;Lo;0;L;;;;;N;;;;;
+11A2E;ZANABAZAR SQUARE LETTER SHA;Lo;0;L;;;;;N;;;;;
+11A2F;ZANABAZAR SQUARE LETTER SSA;Lo;0;L;;;;;N;;;;;
+11A30;ZANABAZAR SQUARE LETTER SA;Lo;0;L;;;;;N;;;;;
+11A31;ZANABAZAR SQUARE LETTER HA;Lo;0;L;;;;;N;;;;;
+11A32;ZANABAZAR SQUARE LETTER KSSA;Lo;0;L;;;;;N;;;;;
+11A33;ZANABAZAR SQUARE FINAL CONSONANT MARK;Mn;0;NSM;;;;;N;;;;;
+11A34;ZANABAZAR SQUARE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11A35;ZANABAZAR SQUARE SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11A36;ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;;
+11A37;ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;;
+11A38;ZANABAZAR SQUARE SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11A39;ZANABAZAR SQUARE SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11A3A;ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;;
+11A3B;ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA;Mn;0;NSM;;;;;N;;;;;
+11A3C;ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA;Mn;0;NSM;;;;;N;;;;;
+11A3D;ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA;Mn;0;NSM;;;;;N;;;;;
+11A3E;ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA;Mn;0;NSM;;;;;N;;;;;
+11A3F;ZANABAZAR SQUARE INITIAL HEAD MARK;Po;0;L;;;;;N;;;;;
+11A40;ZANABAZAR SQUARE CLOSING HEAD MARK;Po;0;L;;;;;N;;;;;
+11A41;ZANABAZAR SQUARE MARK TSHEG;Po;0;L;;;;;N;;;;;
+11A42;ZANABAZAR SQUARE MARK SHAD;Po;0;L;;;;;N;;;;;
+11A43;ZANABAZAR SQUARE MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;
+11A44;ZANABAZAR SQUARE MARK LONG TSHEG;Po;0;L;;;;;N;;;;;
+11A45;ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;;
+11A46;ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;;
+11A47;ZANABAZAR SQUARE SUBJOINER;Mn;9;NSM;;;;;N;;;;;
+11A50;SOYOMBO LETTER A;Lo;0;L;;;;;N;;;;;
+11A51;SOYOMBO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11A52;SOYOMBO VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+11A53;SOYOMBO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11A54;SOYOMBO VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11A55;SOYOMBO VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11A56;SOYOMBO VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+11A57;SOYOMBO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+11A58;SOYOMBO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11A59;SOYOMBO VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11A5A;SOYOMBO VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11A5B;SOYOMBO VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+11A5C;SOYOMBO LETTER KA;Lo;0;L;;;;;N;;;;;
+11A5D;SOYOMBO LETTER KHA;Lo;0;L;;;;;N;;;;;
+11A5E;SOYOMBO LETTER GA;Lo;0;L;;;;;N;;;;;
+11A5F;SOYOMBO LETTER GHA;Lo;0;L;;;;;N;;;;;
+11A60;SOYOMBO LETTER NGA;Lo;0;L;;;;;N;;;;;
+11A61;SOYOMBO LETTER CA;Lo;0;L;;;;;N;;;;;
+11A62;SOYOMBO LETTER CHA;Lo;0;L;;;;;N;;;;;
+11A63;SOYOMBO LETTER JA;Lo;0;L;;;;;N;;;;;
+11A64;SOYOMBO LETTER JHA;Lo;0;L;;;;;N;;;;;
+11A65;SOYOMBO LETTER NYA;Lo;0;L;;;;;N;;;;;
+11A66;SOYOMBO LETTER TTA;Lo;0;L;;;;;N;;;;;
+11A67;SOYOMBO LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11A68;SOYOMBO LETTER DDA;Lo;0;L;;;;;N;;;;;
+11A69;SOYOMBO LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11A6A;SOYOMBO LETTER NNA;Lo;0;L;;;;;N;;;;;
+11A6B;SOYOMBO LETTER TA;Lo;0;L;;;;;N;;;;;
+11A6C;SOYOMBO LETTER THA;Lo;0;L;;;;;N;;;;;
+11A6D;SOYOMBO LETTER DA;Lo;0;L;;;;;N;;;;;
+11A6E;SOYOMBO LETTER DHA;Lo;0;L;;;;;N;;;;;
+11A6F;SOYOMBO LETTER NA;Lo;0;L;;;;;N;;;;;
+11A70;SOYOMBO LETTER PA;Lo;0;L;;;;;N;;;;;
+11A71;SOYOMBO LETTER PHA;Lo;0;L;;;;;N;;;;;
+11A72;SOYOMBO LETTER BA;Lo;0;L;;;;;N;;;;;
+11A73;SOYOMBO LETTER BHA;Lo;0;L;;;;;N;;;;;
+11A74;SOYOMBO LETTER MA;Lo;0;L;;;;;N;;;;;
+11A75;SOYOMBO LETTER TSA;Lo;0;L;;;;;N;;;;;
+11A76;SOYOMBO LETTER TSHA;Lo;0;L;;;;;N;;;;;
+11A77;SOYOMBO LETTER DZA;Lo;0;L;;;;;N;;;;;
+11A78;SOYOMBO LETTER ZHA;Lo;0;L;;;;;N;;;;;
+11A79;SOYOMBO LETTER ZA;Lo;0;L;;;;;N;;;;;
+11A7A;SOYOMBO LETTER -A;Lo;0;L;;;;;N;;;;;
+11A7B;SOYOMBO LETTER YA;Lo;0;L;;;;;N;;;;;
+11A7C;SOYOMBO LETTER RA;Lo;0;L;;;;;N;;;;;
+11A7D;SOYOMBO LETTER LA;Lo;0;L;;;;;N;;;;;
+11A7E;SOYOMBO LETTER VA;Lo;0;L;;;;;N;;;;;
+11A7F;SOYOMBO LETTER SHA;Lo;0;L;;;;;N;;;;;
+11A80;SOYOMBO LETTER SSA;Lo;0;L;;;;;N;;;;;
+11A81;SOYOMBO LETTER SA;Lo;0;L;;;;;N;;;;;
+11A82;SOYOMBO LETTER HA;Lo;0;L;;;;;N;;;;;
+11A83;SOYOMBO LETTER KSSA;Lo;0;L;;;;;N;;;;;
+11A84;SOYOMBO SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+11A85;SOYOMBO SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+11A86;SOYOMBO CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;;
+11A87;SOYOMBO CLUSTER-INITIAL LETTER LA;Lo;0;L;;;;;N;;;;;
+11A88;SOYOMBO CLUSTER-INITIAL LETTER SHA;Lo;0;L;;;;;N;;;;;
+11A89;SOYOMBO CLUSTER-INITIAL LETTER SA;Lo;0;L;;;;;N;;;;;
+11A8A;SOYOMBO FINAL CONSONANT SIGN G;Mn;0;NSM;;;;;N;;;;;
+11A8B;SOYOMBO FINAL CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
+11A8C;SOYOMBO FINAL CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+11A8D;SOYOMBO FINAL CONSONANT SIGN D;Mn;0;NSM;;;;;N;;;;;
+11A8E;SOYOMBO FINAL CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+11A8F;SOYOMBO FINAL CONSONANT SIGN B;Mn;0;NSM;;;;;N;;;;;
+11A90;SOYOMBO FINAL CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
+11A91;SOYOMBO FINAL CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+11A92;SOYOMBO FINAL CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
+11A93;SOYOMBO FINAL CONSONANT SIGN SH;Mn;0;NSM;;;;;N;;;;;
+11A94;SOYOMBO FINAL CONSONANT SIGN S;Mn;0;NSM;;;;;N;;;;;
+11A95;SOYOMBO FINAL CONSONANT SIGN -A;Mn;0;NSM;;;;;N;;;;;
+11A96;SOYOMBO SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11A97;SOYOMBO SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11A98;SOYOMBO GEMINATION MARK;Mn;0;NSM;;;;;N;;;;;
+11A99;SOYOMBO SUBJOINER;Mn;9;NSM;;;;;N;;;;;
+11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;;
+11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;;
+11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;
+11A9D;SOYOMBO MARK PLUTA;Lo;0;L;;;;;N;;;;;
+11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;;
+11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;;
+11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
+11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;;
+11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;;
+11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;;
+11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;;
+11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;;
+11AC3;PAU CIN HAU LETTER MA;Lo;0;L;;;;;N;;;;;
+11AC4;PAU CIN HAU LETTER DA;Lo;0;L;;;;;N;;;;;
+11AC5;PAU CIN HAU LETTER ZA;Lo;0;L;;;;;N;;;;;
+11AC6;PAU CIN HAU LETTER VA;Lo;0;L;;;;;N;;;;;
+11AC7;PAU CIN HAU LETTER NGA;Lo;0;L;;;;;N;;;;;
+11AC8;PAU CIN HAU LETTER HA;Lo;0;L;;;;;N;;;;;
+11AC9;PAU CIN HAU LETTER GA;Lo;0;L;;;;;N;;;;;
+11ACA;PAU CIN HAU LETTER KHA;Lo;0;L;;;;;N;;;;;
+11ACB;PAU CIN HAU LETTER SA;Lo;0;L;;;;;N;;;;;
+11ACC;PAU CIN HAU LETTER BA;Lo;0;L;;;;;N;;;;;
+11ACD;PAU CIN HAU LETTER CA;Lo;0;L;;;;;N;;;;;
+11ACE;PAU CIN HAU LETTER TA;Lo;0;L;;;;;N;;;;;
+11ACF;PAU CIN HAU LETTER THA;Lo;0;L;;;;;N;;;;;
+11AD0;PAU CIN HAU LETTER NA;Lo;0;L;;;;;N;;;;;
+11AD1;PAU CIN HAU LETTER PHA;Lo;0;L;;;;;N;;;;;
+11AD2;PAU CIN HAU LETTER RA;Lo;0;L;;;;;N;;;;;
+11AD3;PAU CIN HAU LETTER FA;Lo;0;L;;;;;N;;;;;
+11AD4;PAU CIN HAU LETTER CHA;Lo;0;L;;;;;N;;;;;
+11AD5;PAU CIN HAU LETTER A;Lo;0;L;;;;;N;;;;;
+11AD6;PAU CIN HAU LETTER E;Lo;0;L;;;;;N;;;;;
+11AD7;PAU CIN HAU LETTER I;Lo;0;L;;;;;N;;;;;
+11AD8;PAU CIN HAU LETTER O;Lo;0;L;;;;;N;;;;;
+11AD9;PAU CIN HAU LETTER U;Lo;0;L;;;;;N;;;;;
+11ADA;PAU CIN HAU LETTER UA;Lo;0;L;;;;;N;;;;;
+11ADB;PAU CIN HAU LETTER IA;Lo;0;L;;;;;N;;;;;
+11ADC;PAU CIN HAU LETTER FINAL P;Lo;0;L;;;;;N;;;;;
+11ADD;PAU CIN HAU LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+11ADE;PAU CIN HAU LETTER FINAL T;Lo;0;L;;;;;N;;;;;
+11ADF;PAU CIN HAU LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+11AE0;PAU CIN HAU LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+11AE1;PAU CIN HAU LETTER FINAL L;Lo;0;L;;;;;N;;;;;
+11AE2;PAU CIN HAU LETTER FINAL W;Lo;0;L;;;;;N;;;;;
+11AE3;PAU CIN HAU LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+11AE4;PAU CIN HAU LETTER FINAL Y;Lo;0;L;;;;;N;;;;;
+11AE5;PAU CIN HAU RISING TONE LONG;Lo;0;L;;;;;N;;;;;
+11AE6;PAU CIN HAU RISING TONE;Lo;0;L;;;;;N;;;;;
+11AE7;PAU CIN HAU SANDHI GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+11AE8;PAU CIN HAU RISING TONE LONG FINAL;Lo;0;L;;;;;N;;;;;
+11AE9;PAU CIN HAU RISING TONE FINAL;Lo;0;L;;;;;N;;;;;
+11AEA;PAU CIN HAU SANDHI GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;;
+11AEB;PAU CIN HAU SANDHI TONE LONG;Lo;0;L;;;;;N;;;;;
+11AEC;PAU CIN HAU SANDHI TONE;Lo;0;L;;;;;N;;;;;
+11AED;PAU CIN HAU SANDHI TONE LONG FINAL;Lo;0;L;;;;;N;;;;;
+11AEE;PAU CIN HAU SANDHI TONE FINAL;Lo;0;L;;;;;N;;;;;
+11AEF;PAU CIN HAU MID-LEVEL TONE;Lo;0;L;;;;;N;;;;;
+11AF0;PAU CIN HAU GLOTTAL STOP VARIANT;Lo;0;L;;;;;N;;;;;
+11AF1;PAU CIN HAU MID-LEVEL TONE LONG FINAL;Lo;0;L;;;;;N;;;;;
+11AF2;PAU CIN HAU MID-LEVEL TONE FINAL;Lo;0;L;;;;;N;;;;;
+11AF3;PAU CIN HAU LOW-FALLING TONE LONG;Lo;0;L;;;;;N;;;;;
+11AF4;PAU CIN HAU LOW-FALLING TONE;Lo;0;L;;;;;N;;;;;
+11AF5;PAU CIN HAU GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;;
+11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;;
+11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;;
+11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;;
+11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;;
+11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;;
+11C03;BHAIKSUKI LETTER II;Lo;0;L;;;;;N;;;;;
+11C04;BHAIKSUKI LETTER U;Lo;0;L;;;;;N;;;;;
+11C05;BHAIKSUKI LETTER UU;Lo;0;L;;;;;N;;;;;
+11C06;BHAIKSUKI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11C07;BHAIKSUKI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11C08;BHAIKSUKI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+11C0A;BHAIKSUKI LETTER E;Lo;0;L;;;;;N;;;;;
+11C0B;BHAIKSUKI LETTER AI;Lo;0;L;;;;;N;;;;;
+11C0C;BHAIKSUKI LETTER O;Lo;0;L;;;;;N;;;;;
+11C0D;BHAIKSUKI LETTER AU;Lo;0;L;;;;;N;;;;;
+11C0E;BHAIKSUKI LETTER KA;Lo;0;L;;;;;N;;;;;
+11C0F;BHAIKSUKI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11C10;BHAIKSUKI LETTER GA;Lo;0;L;;;;;N;;;;;
+11C11;BHAIKSUKI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11C12;BHAIKSUKI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11C13;BHAIKSUKI LETTER CA;Lo;0;L;;;;;N;;;;;
+11C14;BHAIKSUKI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11C15;BHAIKSUKI LETTER JA;Lo;0;L;;;;;N;;;;;
+11C16;BHAIKSUKI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11C17;BHAIKSUKI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11C18;BHAIKSUKI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11C19;BHAIKSUKI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11C1A;BHAIKSUKI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11C1B;BHAIKSUKI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11C1C;BHAIKSUKI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11C1D;BHAIKSUKI LETTER TA;Lo;0;L;;;;;N;;;;;
+11C1E;BHAIKSUKI LETTER THA;Lo;0;L;;;;;N;;;;;
+11C1F;BHAIKSUKI LETTER DA;Lo;0;L;;;;;N;;;;;
+11C20;BHAIKSUKI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11C21;BHAIKSUKI LETTER NA;Lo;0;L;;;;;N;;;;;
+11C22;BHAIKSUKI LETTER PA;Lo;0;L;;;;;N;;;;;
+11C23;BHAIKSUKI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11C24;BHAIKSUKI LETTER BA;Lo;0;L;;;;;N;;;;;
+11C25;BHAIKSUKI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11C26;BHAIKSUKI LETTER MA;Lo;0;L;;;;;N;;;;;
+11C27;BHAIKSUKI LETTER YA;Lo;0;L;;;;;N;;;;;
+11C28;BHAIKSUKI LETTER RA;Lo;0;L;;;;;N;;;;;
+11C29;BHAIKSUKI LETTER LA;Lo;0;L;;;;;N;;;;;
+11C2A;BHAIKSUKI LETTER VA;Lo;0;L;;;;;N;;;;;
+11C2B;BHAIKSUKI LETTER SHA;Lo;0;L;;;;;N;;;;;
+11C2C;BHAIKSUKI LETTER SSA;Lo;0;L;;;;;N;;;;;
+11C2D;BHAIKSUKI LETTER SA;Lo;0;L;;;;;N;;;;;
+11C2E;BHAIKSUKI LETTER HA;Lo;0;L;;;;;N;;;;;
+11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11C30;BHAIKSUKI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11C31;BHAIKSUKI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11C32;BHAIKSUKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11C33;BHAIKSUKI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11C3F;BHAIKSUKI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+11C40;BHAIKSUKI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+11C41;BHAIKSUKI DANDA;Po;0;L;;;;;N;;;;;
+11C42;BHAIKSUKI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11C43;BHAIKSUKI WORD SEPARATOR;Po;0;L;;;;;N;;;;;
+11C44;BHAIKSUKI GAP FILLER-1;Po;0;L;;;;;N;;;;;
+11C45;BHAIKSUKI GAP FILLER-2;Po;0;L;;;;;N;;;;;
+11C50;BHAIKSUKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11C51;BHAIKSUKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11C52;BHAIKSUKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11C53;BHAIKSUKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11C54;BHAIKSUKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11C55;BHAIKSUKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11C56;BHAIKSUKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11C57;BHAIKSUKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11C58;BHAIKSUKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11C59;BHAIKSUKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11C5A;BHAIKSUKI NUMBER ONE;No;0;L;;;;1;N;;;;;
+11C5B;BHAIKSUKI NUMBER TWO;No;0;L;;;;2;N;;;;;
+11C5C;BHAIKSUKI NUMBER THREE;No;0;L;;;;3;N;;;;;
+11C5D;BHAIKSUKI NUMBER FOUR;No;0;L;;;;4;N;;;;;
+11C5E;BHAIKSUKI NUMBER FIVE;No;0;L;;;;5;N;;;;;
+11C5F;BHAIKSUKI NUMBER SIX;No;0;L;;;;6;N;;;;;
+11C60;BHAIKSUKI NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+11C61;BHAIKSUKI NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+11C62;BHAIKSUKI NUMBER NINE;No;0;L;;;;9;N;;;;;
+11C63;BHAIKSUKI NUMBER TEN;No;0;L;;;;10;N;;;;;
+11C64;BHAIKSUKI NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+11C65;BHAIKSUKI NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+11C66;BHAIKSUKI NUMBER FORTY;No;0;L;;;;40;N;;;;;
+11C67;BHAIKSUKI NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+11C68;BHAIKSUKI NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+11C69;BHAIKSUKI NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+11C6A;BHAIKSUKI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+11C6B;BHAIKSUKI NUMBER NINETY;No;0;L;;;;90;N;;;;;
+11C6C;BHAIKSUKI HUNDREDS UNIT MARK;No;0;L;;;;100;N;;;;;
+11C70;MARCHEN HEAD MARK;Po;0;L;;;;;N;;;;;
+11C71;MARCHEN MARK SHAD;Po;0;L;;;;;N;;;;;
+11C72;MARCHEN LETTER KA;Lo;0;L;;;;;N;;;;;
+11C73;MARCHEN LETTER KHA;Lo;0;L;;;;;N;;;;;
+11C74;MARCHEN LETTER GA;Lo;0;L;;;;;N;;;;;
+11C75;MARCHEN LETTER NGA;Lo;0;L;;;;;N;;;;;
+11C76;MARCHEN LETTER CA;Lo;0;L;;;;;N;;;;;
+11C77;MARCHEN LETTER CHA;Lo;0;L;;;;;N;;;;;
+11C78;MARCHEN LETTER JA;Lo;0;L;;;;;N;;;;;
+11C79;MARCHEN LETTER NYA;Lo;0;L;;;;;N;;;;;
+11C7A;MARCHEN LETTER TA;Lo;0;L;;;;;N;;;;;
+11C7B;MARCHEN LETTER THA;Lo;0;L;;;;;N;;;;;
+11C7C;MARCHEN LETTER DA;Lo;0;L;;;;;N;;;;;
+11C7D;MARCHEN LETTER NA;Lo;0;L;;;;;N;;;;;
+11C7E;MARCHEN LETTER PA;Lo;0;L;;;;;N;;;;;
+11C7F;MARCHEN LETTER PHA;Lo;0;L;;;;;N;;;;;
+11C80;MARCHEN LETTER BA;Lo;0;L;;;;;N;;;;;
+11C81;MARCHEN LETTER MA;Lo;0;L;;;;;N;;;;;
+11C82;MARCHEN LETTER TSA;Lo;0;L;;;;;N;;;;;
+11C83;MARCHEN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+11C84;MARCHEN LETTER DZA;Lo;0;L;;;;;N;;;;;
+11C85;MARCHEN LETTER WA;Lo;0;L;;;;;N;;;;;
+11C86;MARCHEN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+11C87;MARCHEN LETTER ZA;Lo;0;L;;;;;N;;;;;
+11C88;MARCHEN LETTER -A;Lo;0;L;;;;;N;;;;;
+11C89;MARCHEN LETTER YA;Lo;0;L;;;;;N;;;;;
+11C8A;MARCHEN LETTER RA;Lo;0;L;;;;;N;;;;;
+11C8B;MARCHEN LETTER LA;Lo;0;L;;;;;N;;;;;
+11C8C;MARCHEN LETTER SHA;Lo;0;L;;;;;N;;;;;
+11C8D;MARCHEN LETTER SA;Lo;0;L;;;;;N;;;;;
+11C8E;MARCHEN LETTER HA;Lo;0;L;;;;;N;;;;;
+11C8F;MARCHEN LETTER A;Lo;0;L;;;;;N;;;;;
+11C92;MARCHEN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+11C93;MARCHEN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+11C94;MARCHEN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+11C95;MARCHEN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+11C96;MARCHEN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+11C97;MARCHEN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+11C98;MARCHEN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+11C99;MARCHEN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+11C9A;MARCHEN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+11C9B;MARCHEN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+11C9C;MARCHEN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+11C9D;MARCHEN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+11C9E;MARCHEN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+11C9F;MARCHEN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+11CA0;MARCHEN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+11CA1;MARCHEN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+11CA2;MARCHEN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+11CA3;MARCHEN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+11CA4;MARCHEN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+11CA5;MARCHEN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;;
+11CA6;MARCHEN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+11CA7;MARCHEN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+11CAA;MARCHEN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;;
+11CAB;MARCHEN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+11CAC;MARCHEN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+11CAD;MARCHEN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+11CAE;MARCHEN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+11CAF;MARCHEN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+11CB0;MARCHEN VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11CB2;MARCHEN VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11CB3;MARCHEN VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11CB5;MARCHEN SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11CB6;MARCHEN SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11D00;MASARAM GONDI LETTER A;Lo;0;L;;;;;N;;;;;
+11D01;MASARAM GONDI LETTER AA;Lo;0;L;;;;;N;;;;;
+11D02;MASARAM GONDI LETTER I;Lo;0;L;;;;;N;;;;;
+11D03;MASARAM GONDI LETTER II;Lo;0;L;;;;;N;;;;;
+11D04;MASARAM GONDI LETTER U;Lo;0;L;;;;;N;;;;;
+11D05;MASARAM GONDI LETTER UU;Lo;0;L;;;;;N;;;;;
+11D06;MASARAM GONDI LETTER E;Lo;0;L;;;;;N;;;;;
+11D08;MASARAM GONDI LETTER AI;Lo;0;L;;;;;N;;;;;
+11D09;MASARAM GONDI LETTER O;Lo;0;L;;;;;N;;;;;
+11D0B;MASARAM GONDI LETTER AU;Lo;0;L;;;;;N;;;;;
+11D0C;MASARAM GONDI LETTER KA;Lo;0;L;;;;;N;;;;;
+11D0D;MASARAM GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11D0E;MASARAM GONDI LETTER GA;Lo;0;L;;;;;N;;;;;
+11D0F;MASARAM GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11D10;MASARAM GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11D11;MASARAM GONDI LETTER CA;Lo;0;L;;;;;N;;;;;
+11D12;MASARAM GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11D13;MASARAM GONDI LETTER JA;Lo;0;L;;;;;N;;;;;
+11D14;MASARAM GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11D15;MASARAM GONDI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11D16;MASARAM GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11D17;MASARAM GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11D18;MASARAM GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11D19;MASARAM GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11D1A;MASARAM GONDI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11D1B;MASARAM GONDI LETTER TA;Lo;0;L;;;;;N;;;;;
+11D1C;MASARAM GONDI LETTER THA;Lo;0;L;;;;;N;;;;;
+11D1D;MASARAM GONDI LETTER DA;Lo;0;L;;;;;N;;;;;
+11D1E;MASARAM GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11D1F;MASARAM GONDI LETTER NA;Lo;0;L;;;;;N;;;;;
+11D20;MASARAM GONDI LETTER PA;Lo;0;L;;;;;N;;;;;
+11D21;MASARAM GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11D22;MASARAM GONDI LETTER BA;Lo;0;L;;;;;N;;;;;
+11D23;MASARAM GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11D24;MASARAM GONDI LETTER MA;Lo;0;L;;;;;N;;;;;
+11D25;MASARAM GONDI LETTER YA;Lo;0;L;;;;;N;;;;;
+11D26;MASARAM GONDI LETTER RA;Lo;0;L;;;;;N;;;;;
+11D27;MASARAM GONDI LETTER LA;Lo;0;L;;;;;N;;;;;
+11D28;MASARAM GONDI LETTER VA;Lo;0;L;;;;;N;;;;;
+11D29;MASARAM GONDI LETTER SHA;Lo;0;L;;;;;N;;;;;
+11D2A;MASARAM GONDI LETTER SSA;Lo;0;L;;;;;N;;;;;
+11D2B;MASARAM GONDI LETTER SA;Lo;0;L;;;;;N;;;;;
+11D2C;MASARAM GONDI LETTER HA;Lo;0;L;;;;;N;;;;;
+11D2D;MASARAM GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11D2E;MASARAM GONDI LETTER KSSA;Lo;0;L;;;;;N;;;;;
+11D2F;MASARAM GONDI LETTER JNYA;Lo;0;L;;;;;N;;;;;
+11D30;MASARAM GONDI LETTER TRA;Lo;0;L;;;;;N;;;;;
+11D31;MASARAM GONDI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+11D32;MASARAM GONDI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11D33;MASARAM GONDI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11D34;MASARAM GONDI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11D35;MASARAM GONDI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11D36;MASARAM GONDI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11D3A;MASARAM GONDI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11D3C;MASARAM GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11D3D;MASARAM GONDI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11D3F;MASARAM GONDI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11D40;MASARAM GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11D41;MASARAM GONDI SIGN VISARGA;Mn;0;NSM;;;;;N;;;;;
+11D42;MASARAM GONDI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11D43;MASARAM GONDI SIGN CANDRA;Mn;0;NSM;;;;;N;;;;;
+11D44;MASARAM GONDI SIGN HALANTA;Mn;9;NSM;;;;;N;;;;;
+11D45;MASARAM GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11D46;MASARAM GONDI REPHA;Lo;0;L;;;;;N;;;;;
+11D47;MASARAM GONDI RA-KARA;Mn;0;NSM;;;;;N;;;;;
+11D50;MASARAM GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11D51;MASARAM GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11D52;MASARAM GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11D53;MASARAM GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11D54;MASARAM GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11D55;MASARAM GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11D56;MASARAM GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11D60;GUNJALA GONDI LETTER A;Lo;0;L;;;;;N;;;;;
+11D61;GUNJALA GONDI LETTER AA;Lo;0;L;;;;;N;;;;;
+11D62;GUNJALA GONDI LETTER I;Lo;0;L;;;;;N;;;;;
+11D63;GUNJALA GONDI LETTER II;Lo;0;L;;;;;N;;;;;
+11D64;GUNJALA GONDI LETTER U;Lo;0;L;;;;;N;;;;;
+11D65;GUNJALA GONDI LETTER UU;Lo;0;L;;;;;N;;;;;
+11D67;GUNJALA GONDI LETTER EE;Lo;0;L;;;;;N;;;;;
+11D68;GUNJALA GONDI LETTER AI;Lo;0;L;;;;;N;;;;;
+11D6A;GUNJALA GONDI LETTER OO;Lo;0;L;;;;;N;;;;;
+11D6B;GUNJALA GONDI LETTER AU;Lo;0;L;;;;;N;;;;;
+11D6C;GUNJALA GONDI LETTER YA;Lo;0;L;;;;;N;;;;;
+11D6D;GUNJALA GONDI LETTER VA;Lo;0;L;;;;;N;;;;;
+11D6E;GUNJALA GONDI LETTER BA;Lo;0;L;;;;;N;;;;;
+11D6F;GUNJALA GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11D70;GUNJALA GONDI LETTER MA;Lo;0;L;;;;;N;;;;;
+11D71;GUNJALA GONDI LETTER KA;Lo;0;L;;;;;N;;;;;
+11D72;GUNJALA GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11D73;GUNJALA GONDI LETTER TA;Lo;0;L;;;;;N;;;;;
+11D74;GUNJALA GONDI LETTER THA;Lo;0;L;;;;;N;;;;;
+11D75;GUNJALA GONDI LETTER LA;Lo;0;L;;;;;N;;;;;
+11D76;GUNJALA GONDI LETTER GA;Lo;0;L;;;;;N;;;;;
+11D77;GUNJALA GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11D78;GUNJALA GONDI LETTER DA;Lo;0;L;;;;;N;;;;;
+11D79;GUNJALA GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11D7A;GUNJALA GONDI LETTER NA;Lo;0;L;;;;;N;;;;;
+11D7B;GUNJALA GONDI LETTER CA;Lo;0;L;;;;;N;;;;;
+11D7C;GUNJALA GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11D7D;GUNJALA GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11D7E;GUNJALA GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11D7F;GUNJALA GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11D80;GUNJALA GONDI LETTER JA;Lo;0;L;;;;;N;;;;;
+11D81;GUNJALA GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11D82;GUNJALA GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11D83;GUNJALA GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11D84;GUNJALA GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11D85;GUNJALA GONDI LETTER PA;Lo;0;L;;;;;N;;;;;
+11D86;GUNJALA GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11D87;GUNJALA GONDI LETTER HA;Lo;0;L;;;;;N;;;;;
+11D88;GUNJALA GONDI LETTER RA;Lo;0;L;;;;;N;;;;;
+11D89;GUNJALA GONDI LETTER SA;Lo;0;L;;;;;N;;;;;
+11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+11D90;GUNJALA GONDI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+11D91;GUNJALA GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11D95;GUNJALA GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11D97;GUNJALA GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11D98;GUNJALA GONDI OM;Lo;0;L;;;;;N;;;;;
+11DA0;GUNJALA GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11DA1;GUNJALA GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11DA2;GUNJALA GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11DA3;GUNJALA GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11DA4;GUNJALA GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11DA5;GUNJALA GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11DA6;GUNJALA GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;;
+11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;;
+11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+11EE3;MAKASAR LETTER PA;Lo;0;L;;;;;N;;;;;
+11EE4;MAKASAR LETTER BA;Lo;0;L;;;;;N;;;;;
+11EE5;MAKASAR LETTER MA;Lo;0;L;;;;;N;;;;;
+11EE6;MAKASAR LETTER TA;Lo;0;L;;;;;N;;;;;
+11EE7;MAKASAR LETTER DA;Lo;0;L;;;;;N;;;;;
+11EE8;MAKASAR LETTER NA;Lo;0;L;;;;;N;;;;;
+11EE9;MAKASAR LETTER CA;Lo;0;L;;;;;N;;;;;
+11EEA;MAKASAR LETTER JA;Lo;0;L;;;;;N;;;;;
+11EEB;MAKASAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+11EEC;MAKASAR LETTER YA;Lo;0;L;;;;;N;;;;;
+11EED;MAKASAR LETTER RA;Lo;0;L;;;;;N;;;;;
+11EEE;MAKASAR LETTER LA;Lo;0;L;;;;;N;;;;;
+11EEF;MAKASAR LETTER VA;Lo;0;L;;;;;N;;;;;
+11EF0;MAKASAR LETTER SA;Lo;0;L;;;;;N;;;;;
+11EF1;MAKASAR LETTER A;Lo;0;L;;;;;N;;;;;
+11EF2;MAKASAR ANGKA;Lo;0;L;;;;;N;;;;;
+11EF3;MAKASAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11EF4;MAKASAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;
+11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;
+11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;;
+11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;
+11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;;
+11FC3;TAMIL FRACTION ONE SIXTY-FOURTH;No;0;L;;;;1/64;N;;;;;
+11FC4;TAMIL FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;;
+11FC5;TAMIL FRACTION ONE THIRTY-SECOND;No;0;L;;;;1/32;N;;;;;
+11FC6;TAMIL FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;;
+11FC7;TAMIL FRACTION THREE SIXTY-FOURTHS;No;0;L;;;;3/64;N;;;;;
+11FC8;TAMIL FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;;
+11FC9;TAMIL FRACTION ONE SIXTEENTH-1;No;0;L;;;;1/16;N;;;;;
+11FCA;TAMIL FRACTION ONE SIXTEENTH-2;No;0;L;;;;1/16;N;;;;;
+11FCB;TAMIL FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;;
+11FCC;TAMIL FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+11FCD;TAMIL FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;;
+11FCE;TAMIL FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
+11FCF;TAMIL FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;;
+11FD0;TAMIL FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+11FD1;TAMIL FRACTION ONE HALF-1;No;0;L;;;;1/2;N;;;;;
+11FD2;TAMIL FRACTION ONE HALF-2;No;0;L;;;;1/2;N;;;;;
+11FD3;TAMIL FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+11FD4;TAMIL FRACTION DOWNSCALING FACTOR KIIZH;No;0;L;;;;1/320;N;;;;;
+11FD5;TAMIL SIGN NEL;So;0;ON;;;;;N;;;;;
+11FD6;TAMIL SIGN CEVITU;So;0;ON;;;;;N;;;;;
+11FD7;TAMIL SIGN AAZHAAKKU;So;0;ON;;;;;N;;;;;
+11FD8;TAMIL SIGN UZHAKKU;So;0;ON;;;;;N;;;;;
+11FD9;TAMIL SIGN MUUVUZHAKKU;So;0;ON;;;;;N;;;;;
+11FDA;TAMIL SIGN KURUNI;So;0;ON;;;;;N;;;;;
+11FDB;TAMIL SIGN PATHAKKU;So;0;ON;;;;;N;;;;;
+11FDC;TAMIL SIGN MUKKURUNI;So;0;ON;;;;;N;;;;;
+11FDD;TAMIL SIGN KAACU;Sc;0;ET;;;;;N;;;;;
+11FDE;TAMIL SIGN PANAM;Sc;0;ET;;;;;N;;;;;
+11FDF;TAMIL SIGN PON;Sc;0;ET;;;;;N;;;;;
+11FE0;TAMIL SIGN VARAAKAN;Sc;0;ET;;;;;N;;;;;
+11FE1;TAMIL SIGN PAARAM;So;0;ON;;;;;N;;;;;
+11FE2;TAMIL SIGN KUZHI;So;0;ON;;;;;N;;;;;
+11FE3;TAMIL SIGN VELI;So;0;ON;;;;;N;;;;;
+11FE4;TAMIL WET CULTIVATION SIGN;So;0;ON;;;;;N;;;;;
+11FE5;TAMIL DRY CULTIVATION SIGN;So;0;ON;;;;;N;;;;;
+11FE6;TAMIL LAND SIGN;So;0;ON;;;;;N;;;;;
+11FE7;TAMIL SALT PAN SIGN;So;0;ON;;;;;N;;;;;
+11FE8;TAMIL TRADITIONAL CREDIT SIGN;So;0;ON;;;;;N;;;;;
+11FE9;TAMIL TRADITIONAL NUMBER SIGN;So;0;ON;;;;;N;;;;;
+11FEA;TAMIL CURRENT SIGN;So;0;ON;;;;;N;;;;;
+11FEB;TAMIL AND ODD SIGN;So;0;ON;;;;;N;;;;;
+11FEC;TAMIL SPENT SIGN;So;0;ON;;;;;N;;;;;
+11FED;TAMIL TOTAL SIGN;So;0;ON;;;;;N;;;;;
+11FEE;TAMIL IN POSSESSION SIGN;So;0;ON;;;;;N;;;;;
+11FEF;TAMIL STARTING FROM SIGN;So;0;ON;;;;;N;;;;;
+11FF0;TAMIL SIGN MUTHALIYA;So;0;ON;;;;;N;;;;;
+11FF1;TAMIL SIGN VAKAIYARAA;So;0;ON;;;;;N;;;;;
+11FFF;TAMIL PUNCTUATION END OF TEXT;Po;0;L;;;;;N;;;;;
+12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
+12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
+12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
+12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;
+12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;
+12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;
+12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;
+12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;
+1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;
+1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;
+1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;
+12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;
+12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;
+12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;
+12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;
+12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;
+1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;
+1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;
+1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;
+12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;
+12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;
+12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;
+12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;
+12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;
+12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;
+12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;
+12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;
+12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;
+1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;
+1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;
+1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;
+1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;
+1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;
+12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;
+12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;
+12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;
+12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;
+12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;
+12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;
+12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;
+12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;;
+12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;
+1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;
+1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;
+1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;
+12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;
+12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;
+12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;
+12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;
+12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;
+12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;
+12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;
+12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;
+12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;
+12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;
+1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;
+1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;
+1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;
+1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;
+1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;
+12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;
+12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;
+12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;
+12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;
+12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;
+12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;
+12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;
+12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;
+12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;
+12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;
+1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;
+1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;
+1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;
+1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;
+12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;
+12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;
+12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;
+12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;
+12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;
+12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;
+12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;
+12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;
+12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
+1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;
+1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;
+1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;
+1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;
+1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;
+12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;
+12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;
+12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;
+12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;
+12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;
+12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;
+12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;
+12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;
+12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;;
+1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;
+1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;
+1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;
+1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;
+1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;
+1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;
+12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;
+12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;
+12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;
+12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;
+12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;
+12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;
+12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;
+1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;
+1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;
+1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;
+1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;
+1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;
+12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;
+12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;
+12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;
+12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;
+12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;
+12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;
+12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;
+1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;
+1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;
+1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;
+1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;
+1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;
+120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;
+120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;
+120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;
+120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;
+120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;
+120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;
+120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;
+120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;
+120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;
+120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;
+120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;
+120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;
+120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;
+120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;
+120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;
+120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;
+120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;
+120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;
+120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;
+120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;
+120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;
+120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;
+120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;
+120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;
+120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;
+120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;
+120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;
+120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;
+120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;
+120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;
+120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;
+120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;
+120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;
+120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;
+120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;
+120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;
+120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;
+120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;
+120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;
+120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;
+120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;
+120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;
+120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;
+120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;
+120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;
+120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;
+120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;
+120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;
+120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;
+120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;
+120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;
+120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;
+120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;
+120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;
+120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;
+120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;
+120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;
+120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;
+120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;
+120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;
+120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;
+120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;
+120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;
+120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;
+12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;
+12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;
+12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;
+12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;
+12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;
+12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;
+12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;
+12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;
+12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;
+12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;
+1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;
+1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;
+1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;
+12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;
+12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;
+12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;
+12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;
+12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;
+12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;
+12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;
+12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;
+1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;
+1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;
+1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;
+12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;
+12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;
+12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;
+12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;
+12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;
+12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;
+12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;
+12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;
+1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;
+1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;
+1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;
+1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;
+1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;
+1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;
+12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;
+12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;
+12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;
+12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;
+12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;
+12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;
+12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;
+1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;
+1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;
+1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;
+12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;
+12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;
+12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;
+12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;
+12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;
+12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;
+12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;
+12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;
+12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;
+12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;
+1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;
+1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;
+1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;
+1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;
+1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;
+12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;
+12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;
+12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;
+12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;
+12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;
+12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;
+12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;
+12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;
+12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;
+1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;
+1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;
+1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;
+1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;
+12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;
+12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;
+12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;
+12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;
+12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;
+12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;
+12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;
+1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;
+1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;
+1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;
+1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;
+1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;
+12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;
+12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;
+12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;
+12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;
+12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;
+12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;
+12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;
+12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;
+12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;
+12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;
+1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;
+1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;
+1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;
+1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;
+1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;
+1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;
+12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;
+12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;
+12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;
+12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;
+12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;
+12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;
+12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;
+12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;
+12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;
+12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;
+1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;
+1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;
+1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;
+1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;
+1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;
+12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;
+12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;
+12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;
+12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;
+12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;
+12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;
+12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;
+12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;
+12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;
+1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;
+1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;
+1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;
+1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;
+121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;
+121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;
+121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;
+121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;
+121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;
+121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;
+121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;
+121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;
+121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;
+121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;
+121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;
+121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;
+121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;
+121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;
+121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;
+121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;
+121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;
+121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;
+121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;
+121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;
+121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;
+121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;
+121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;
+121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;
+121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;
+121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;
+121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;
+121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;
+121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;
+121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;
+121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;
+121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;
+121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;
+121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;
+121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;
+121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;
+121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;
+121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;
+121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;
+121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;
+121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;
+121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;
+121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;
+121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;
+121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;
+121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;
+121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;
+121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;
+121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;
+121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;
+121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;
+121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;
+121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;
+121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;
+121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;
+121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;
+121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;
+121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;
+121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;
+121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;
+121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;
+121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;
+121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;
+121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;
+121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;
+121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;
+121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;
+121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;
+121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;
+121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;
+121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;
+121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;
+121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;
+121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;
+121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;
+121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;
+121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;
+121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;
+12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;
+12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;
+12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;
+12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;
+1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;
+1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;
+12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;
+12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;
+12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;
+12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;
+12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;
+12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;
+12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;
+12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;
+12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;
+12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;
+1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;
+1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;
+1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;
+1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;
+1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;
+1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;
+12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;
+12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;
+12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;
+12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;
+12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;;
+12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;
+12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;
+12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;
+1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;
+1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;;
+1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;
+1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;
+1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;
+1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;
+12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;
+12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;
+12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;
+12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;
+12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;
+12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;
+12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;
+12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;
+1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;
+1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;
+1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;
+1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;
+1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;
+1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;
+12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;
+12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;
+12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;
+12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;
+12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;
+12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;
+12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;
+12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;
+12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;
+12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;
+1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;
+1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;
+1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;
+1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;
+1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;
+1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;
+12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;
+12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;
+1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;
+12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;
+12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;
+12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;
+12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;
+12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;
+12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;
+12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;
+12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;
+1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;
+1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;
+1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;
+1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;
+12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;
+12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;
+12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;
+12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;
+1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;
+1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;
+1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;
+1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;
+1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;
+1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;
+12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;
+12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;
+12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;
+12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;
+12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;
+12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;
+12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;
+12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;
+12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;
+12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;
+1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;
+1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;
+1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;
+1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;
+1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;
+1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;
+12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;
+12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;
+12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;
+12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;
+12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;
+12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;
+12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;
+12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;
+12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;
+12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;
+1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;
+1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;
+1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;
+1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;
+1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;
+122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;
+122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;
+122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;
+122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;
+122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;
+122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;
+122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;
+122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;
+122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;
+122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;
+122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;
+122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;
+122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;
+122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;
+122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;
+122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;
+122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;
+122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;
+122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;
+122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;
+122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;
+122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;
+122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;
+122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;
+122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;
+122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;
+122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;
+122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;
+122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;
+122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;
+122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;
+122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;
+122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;
+122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;
+122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;
+122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;
+122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;
+122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;
+122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;
+122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;
+122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;
+122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
+122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;
+122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;
+122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;
+122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;
+122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;
+122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;
+122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;
+122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;
+122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;
+122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;
+122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;
+122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;
+122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;
+122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;
+122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;
+122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;
+122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;
+122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;
+122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;
+122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;
+122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;
+122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;
+122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;
+122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;
+122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;
+122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;
+122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;
+122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;
+122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;
+122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;
+122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;
+122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;
+122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;
+122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;
+122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;
+122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;
+122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;
+122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;
+122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;
+122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;
+122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;
+122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;
+122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;
+122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;
+122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;
+122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;
+122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;
+122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;
+122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;
+12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;
+12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;
+12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;
+12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;
+12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;
+12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;
+12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;
+12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;
+1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;
+1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;;
+1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;
+1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;;
+1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;
+12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;
+12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;
+12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;
+12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;
+12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;
+12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;
+12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;
+12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;
+12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;
+1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;
+1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
+1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;
+1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;
+1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;
+12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;
+12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;
+12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;
+12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;
+12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;
+12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;
+12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;
+12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;
+1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;
+1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;
+1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;
+1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;
+12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;
+12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;
+12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;
+12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;
+12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;
+12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;
+12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;
+1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;
+1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;
+1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;
+1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;
+12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;
+12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;
+12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;
+12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;
+12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;
+12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;
+12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;
+12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;
+12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;
+12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;
+1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;
+1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;
+1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;
+1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;
+1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;
+12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;
+12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;
+12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;
+12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;
+12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;
+12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;
+12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;
+12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;
+1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;
+1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;
+1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;
+1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;
+1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;
+12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;
+12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;
+12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;
+12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;
+12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;
+12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;
+12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;
+12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;
+12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;
+12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;
+1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;
+1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;
+1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;
+1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;
+1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;
+1236F;CUNEIFORM SIGN KAP ELAMITE;Lo;0;L;;;;;N;;;;;
+12370;CUNEIFORM SIGN AB TIMES NUN;Lo;0;L;;;;;N;;;;;
+12371;CUNEIFORM SIGN AB2 TIMES A;Lo;0;L;;;;;N;;;;;
+12372;CUNEIFORM SIGN AMAR TIMES KUG;Lo;0;L;;;;;N;;;;;
+12373;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH;Lo;0;L;;;;;N;;;;;
+12374;CUNEIFORM SIGN DAG3;Lo;0;L;;;;;N;;;;;
+12375;CUNEIFORM SIGN DISH PLUS SHU;Lo;0;L;;;;;N;;;;;
+12376;CUNEIFORM SIGN DUB TIMES SHE;Lo;0;L;;;;;N;;;;;
+12377;CUNEIFORM SIGN EZEN TIMES GUD;Lo;0;L;;;;;N;;;;;
+12378;CUNEIFORM SIGN EZEN TIMES SHE;Lo;0;L;;;;;N;;;;;
+12379;CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A;Lo;0;L;;;;;N;;;;;
+1237A;CUNEIFORM SIGN GA2 TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1237B;CUNEIFORM SIGN GE22;Lo;0;L;;;;;N;;;;;
+1237C;CUNEIFORM SIGN GIG;Lo;0;L;;;;;N;;;;;
+1237D;CUNEIFORM SIGN HUSH;Lo;0;L;;;;;N;;;;;
+1237E;CUNEIFORM SIGN KA TIMES ANSHE;Lo;0;L;;;;;N;;;;;
+1237F;CUNEIFORM SIGN KA TIMES ASH3;Lo;0;L;;;;;N;;;;;
+12380;CUNEIFORM SIGN KA TIMES GISH;Lo;0;L;;;;;N;;;;;
+12381;CUNEIFORM SIGN KA TIMES GUD;Lo;0;L;;;;;N;;;;;
+12382;CUNEIFORM SIGN KA TIMES HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+12383;CUNEIFORM SIGN KA TIMES LUM;Lo;0;L;;;;;N;;;;;
+12384;CUNEIFORM SIGN KA TIMES PA;Lo;0;L;;;;;N;;;;;
+12385;CUNEIFORM SIGN KA TIMES SHUL;Lo;0;L;;;;;N;;;;;
+12386;CUNEIFORM SIGN KA TIMES TU;Lo;0;L;;;;;N;;;;;
+12387;CUNEIFORM SIGN KA TIMES UR2;Lo;0;L;;;;;N;;;;;
+12388;CUNEIFORM SIGN LAGAB TIMES GI;Lo;0;L;;;;;N;;;;;
+12389;CUNEIFORM SIGN LU2 SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
+1238A;CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL;Lo;0;L;;;;;N;;;;;
+1238B;CUNEIFORM SIGN LU2 TIMES SHU;Lo;0;L;;;;;N;;;;;
+1238C;CUNEIFORM SIGN MESH;Lo;0;L;;;;;N;;;;;
+1238D;CUNEIFORM SIGN MUSH3 TIMES ZA;Lo;0;L;;;;;N;;;;;
+1238E;CUNEIFORM SIGN NA4;Lo;0;L;;;;;N;;;;;
+1238F;CUNEIFORM SIGN NIN;Lo;0;L;;;;;N;;;;;
+12390;CUNEIFORM SIGN NIN9;Lo;0;L;;;;;N;;;;;
+12391;CUNEIFORM SIGN NINDA2 TIMES BAL;Lo;0;L;;;;;N;;;;;
+12392;CUNEIFORM SIGN NINDA2 TIMES GI;Lo;0;L;;;;;N;;;;;
+12393;CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;;
+12394;CUNEIFORM SIGN PESH2 ASTERISK;Lo;0;L;;;;;N;;;;;
+12395;CUNEIFORM SIGN PIR2;Lo;0;L;;;;;N;;;;;
+12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;;
+12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;;
+12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;;
+12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
+12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
+12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
+12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;
+12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;
+12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;
+12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;
+12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;
+12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;
+12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;
+1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;
+1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;
+1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;
+1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;
+1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;
+1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;
+12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;
+12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;
+12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;
+12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;
+12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;
+12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;
+12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;
+12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;
+12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;
+12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;
+1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;
+1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;
+1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;
+1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;
+1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;
+1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;
+12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;
+12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;
+12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;
+12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;
+12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;
+12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;
+12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;
+12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;
+12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;
+1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;
+1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;
+1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;
+1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;
+1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;
+1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;
+12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;
+12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;216000;N;;;;;
+12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;432000;N;;;;;
+12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;
+12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;
+12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;
+12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;
+12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;
+1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;
+1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;
+1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;
+1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;
+1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;
+1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;
+12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;
+12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;
+12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;
+12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;
+12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;
+12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;
+12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;
+12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;
+12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;
+12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;
+1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;
+1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;
+1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;
+1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;
+1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;
+1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;
+12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;
+12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;
+12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;
+12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;
+12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;
+12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;
+12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;2;N;;;;;
+12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;3;N;;;;;
+12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;
+12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;
+1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;
+1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;
+1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;
+1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;
+1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;
+1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;
+12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;
+12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;
+12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;
+12463;CUNEIFORM NUMERIC SIGN ONE QUARTER GUR;Nl;0;L;;;;1/4;N;;;;;
+12464;CUNEIFORM NUMERIC SIGN ONE HALF GUR;Nl;0;L;;;;1/2;N;;;;;
+12465;CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD;Nl;0;L;;;;1/3;N;;;;;
+12466;CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS;Nl;0;L;;;;2/3;N;;;;;
+12467;CUNEIFORM NUMERIC SIGN ELAMITE FORTY;Nl;0;L;;;;40;N;;;;;
+12468;CUNEIFORM NUMERIC SIGN ELAMITE FIFTY;Nl;0;L;;;;50;N;;;;;
+12469;CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM;Nl;0;L;;;;4;N;;;;;
+1246A;CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM;Nl;0;L;;;;5;N;;;;;
+1246B;CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM;Nl;0;L;;;;6;N;;;;;
+1246C;CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM;Nl;0;L;;;;7;N;;;;;
+1246D;CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM;Nl;0;L;;;;8;N;;;;;
+1246E;CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM;Nl;0;L;;;;9;N;;;;;
+12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;
+12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
+12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
+12474;CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON;Po;0;L;;;;;N;;;;;
+12480;CUNEIFORM SIGN AB TIMES NUN TENU;Lo;0;L;;;;;N;;;;;
+12481;CUNEIFORM SIGN AB TIMES SHU2;Lo;0;L;;;;;N;;;;;
+12482;CUNEIFORM SIGN AD TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12483;CUNEIFORM SIGN BAD TIMES DISH TENU;Lo;0;L;;;;;N;;;;;
+12484;CUNEIFORM SIGN BAHAR2 TIMES AB2;Lo;0;L;;;;;N;;;;;
+12485;CUNEIFORM SIGN BAHAR2 TIMES NI;Lo;0;L;;;;;N;;;;;
+12486;CUNEIFORM SIGN BAHAR2 TIMES ZA;Lo;0;L;;;;;N;;;;;
+12487;CUNEIFORM SIGN BU OVER BU TIMES NA2;Lo;0;L;;;;;N;;;;;
+12488;CUNEIFORM SIGN DA TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12489;CUNEIFORM SIGN DAG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1248A;CUNEIFORM SIGN DIM TIMES IGI;Lo;0;L;;;;;N;;;;;
+1248B;CUNEIFORM SIGN DIM TIMES U U U;Lo;0;L;;;;;N;;;;;
+1248C;CUNEIFORM SIGN DIM2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1248D;CUNEIFORM SIGN DUG TIMES ANSHE;Lo;0;L;;;;;N;;;;;
+1248E;CUNEIFORM SIGN DUG TIMES ASH;Lo;0;L;;;;;N;;;;;
+1248F;CUNEIFORM SIGN DUG TIMES ASH AT LEFT;Lo;0;L;;;;;N;;;;;
+12490;CUNEIFORM SIGN DUG TIMES DIN;Lo;0;L;;;;;N;;;;;
+12491;CUNEIFORM SIGN DUG TIMES DUN;Lo;0;L;;;;;N;;;;;
+12492;CUNEIFORM SIGN DUG TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+12493;CUNEIFORM SIGN DUG TIMES GA;Lo;0;L;;;;;N;;;;;
+12494;CUNEIFORM SIGN DUG TIMES GI;Lo;0;L;;;;;N;;;;;
+12495;CUNEIFORM SIGN DUG TIMES GIR2 GUNU;Lo;0;L;;;;;N;;;;;
+12496;CUNEIFORM SIGN DUG TIMES GISH;Lo;0;L;;;;;N;;;;;
+12497;CUNEIFORM SIGN DUG TIMES HA;Lo;0;L;;;;;N;;;;;
+12498;CUNEIFORM SIGN DUG TIMES HI;Lo;0;L;;;;;N;;;;;
+12499;CUNEIFORM SIGN DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1249A;CUNEIFORM SIGN DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1249B;CUNEIFORM SIGN DUG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1249C;CUNEIFORM SIGN DUG TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
+1249D;CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;;
+1249E;CUNEIFORM SIGN DUG TIMES LAK-020;Lo;0;L;;;;;N;;;;;
+1249F;CUNEIFORM SIGN DUG TIMES LAM;Lo;0;L;;;;;N;;;;;
+124A0;CUNEIFORM SIGN DUG TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+124A1;CUNEIFORM SIGN DUG TIMES LUH PLUS GISH;Lo;0;L;;;;;N;;;;;
+124A2;CUNEIFORM SIGN DUG TIMES MASH;Lo;0;L;;;;;N;;;;;
+124A3;CUNEIFORM SIGN DUG TIMES MES;Lo;0;L;;;;;N;;;;;
+124A4;CUNEIFORM SIGN DUG TIMES MI;Lo;0;L;;;;;N;;;;;
+124A5;CUNEIFORM SIGN DUG TIMES NI;Lo;0;L;;;;;N;;;;;
+124A6;CUNEIFORM SIGN DUG TIMES PI;Lo;0;L;;;;;N;;;;;
+124A7;CUNEIFORM SIGN DUG TIMES SHE;Lo;0;L;;;;;N;;;;;
+124A8;CUNEIFORM SIGN DUG TIMES SI GUNU;Lo;0;L;;;;;N;;;;;
+124A9;CUNEIFORM SIGN E2 TIMES KUR;Lo;0;L;;;;;N;;;;;
+124AA;CUNEIFORM SIGN E2 TIMES PAP;Lo;0;L;;;;;N;;;;;
+124AB;CUNEIFORM SIGN ERIN2 X;Lo;0;L;;;;;N;;;;;
+124AC;CUNEIFORM SIGN ESH2 CROSSING ESH2;Lo;0;L;;;;;N;;;;;
+124AD;CUNEIFORM SIGN EZEN SHESHIG TIMES ASH;Lo;0;L;;;;;N;;;;;
+124AE;CUNEIFORM SIGN EZEN SHESHIG TIMES HI;Lo;0;L;;;;;N;;;;;
+124AF;CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+124B0;CUNEIFORM SIGN EZEN SHESHIG TIMES LA;Lo;0;L;;;;;N;;;;;
+124B1;CUNEIFORM SIGN EZEN SHESHIG TIMES LAL;Lo;0;L;;;;;N;;;;;
+124B2;CUNEIFORM SIGN EZEN SHESHIG TIMES ME;Lo;0;L;;;;;N;;;;;
+124B3;CUNEIFORM SIGN EZEN SHESHIG TIMES MES;Lo;0;L;;;;;N;;;;;
+124B4;CUNEIFORM SIGN EZEN SHESHIG TIMES SU;Lo;0;L;;;;;N;;;;;
+124B5;CUNEIFORM SIGN EZEN TIMES SU;Lo;0;L;;;;;N;;;;;
+124B6;CUNEIFORM SIGN GA2 TIMES BAHAR2;Lo;0;L;;;;;N;;;;;
+124B7;CUNEIFORM SIGN GA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;;
+124B8;CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+124B9;CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+124BA;CUNEIFORM SIGN GA2 TIMES EREN;Lo;0;L;;;;;N;;;;;
+124BB;CUNEIFORM SIGN GA2 TIMES GA;Lo;0;L;;;;;N;;;;;
+124BC;CUNEIFORM SIGN GA2 TIMES GAR PLUS DI;Lo;0;L;;;;;N;;;;;
+124BD;CUNEIFORM SIGN GA2 TIMES GAR PLUS NE;Lo;0;L;;;;;N;;;;;
+124BE;CUNEIFORM SIGN GA2 TIMES HA PLUS A;Lo;0;L;;;;;N;;;;;
+124BF;CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;;
+124C0;CUNEIFORM SIGN GA2 TIMES LAM;Lo;0;L;;;;;N;;;;;
+124C1;CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+124C2;CUNEIFORM SIGN GA2 TIMES LUH;Lo;0;L;;;;;N;;;;;
+124C3;CUNEIFORM SIGN GA2 TIMES MUSH;Lo;0;L;;;;;N;;;;;
+124C4;CUNEIFORM SIGN GA2 TIMES NE;Lo;0;L;;;;;N;;;;;
+124C5;CUNEIFORM SIGN GA2 TIMES NE PLUS E2;Lo;0;L;;;;;N;;;;;
+124C6;CUNEIFORM SIGN GA2 TIMES NE PLUS GI;Lo;0;L;;;;;N;;;;;
+124C7;CUNEIFORM SIGN GA2 TIMES SHIM;Lo;0;L;;;;;N;;;;;
+124C8;CUNEIFORM SIGN GA2 TIMES ZIZ2;Lo;0;L;;;;;N;;;;;
+124C9;CUNEIFORM SIGN GABA ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;;
+124CA;CUNEIFORM SIGN GESHTIN TIMES U;Lo;0;L;;;;;N;;;;;
+124CB;CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+124CC;CUNEIFORM SIGN GU2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+124CD;CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+124CE;CUNEIFORM SIGN HA TENU GUNU;Lo;0;L;;;;;N;;;;;
+124CF;CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH;Lo;0;L;;;;;N;;;;;
+124D0;CUNEIFORM SIGN KA TIMES BU;Lo;0;L;;;;;N;;;;;
+124D1;CUNEIFORM SIGN KA TIMES KA;Lo;0;L;;;;;N;;;;;
+124D2;CUNEIFORM SIGN KA TIMES U U U;Lo;0;L;;;;;N;;;;;
+124D3;CUNEIFORM SIGN KA TIMES UR;Lo;0;L;;;;;N;;;;;
+124D4;CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU;Lo;0;L;;;;;N;;;;;
+124D5;CUNEIFORM SIGN LAK-003;Lo;0;L;;;;;N;;;;;
+124D6;CUNEIFORM SIGN LAK-021;Lo;0;L;;;;;N;;;;;
+124D7;CUNEIFORM SIGN LAK-025;Lo;0;L;;;;;N;;;;;
+124D8;CUNEIFORM SIGN LAK-030;Lo;0;L;;;;;N;;;;;
+124D9;CUNEIFORM SIGN LAK-050;Lo;0;L;;;;;N;;;;;
+124DA;CUNEIFORM SIGN LAK-051;Lo;0;L;;;;;N;;;;;
+124DB;CUNEIFORM SIGN LAK-062;Lo;0;L;;;;;N;;;;;
+124DC;CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU;Lo;0;L;;;;;N;;;;;
+124DD;CUNEIFORM SIGN LAK-080;Lo;0;L;;;;;N;;;;;
+124DE;CUNEIFORM SIGN LAK-081 OVER LAK-081;Lo;0;L;;;;;N;;;;;
+124DF;CUNEIFORM SIGN LAK-092;Lo;0;L;;;;;N;;;;;
+124E0;CUNEIFORM SIGN LAK-130;Lo;0;L;;;;;N;;;;;
+124E1;CUNEIFORM SIGN LAK-142;Lo;0;L;;;;;N;;;;;
+124E2;CUNEIFORM SIGN LAK-210;Lo;0;L;;;;;N;;;;;
+124E3;CUNEIFORM SIGN LAK-219;Lo;0;L;;;;;N;;;;;
+124E4;CUNEIFORM SIGN LAK-220;Lo;0;L;;;;;N;;;;;
+124E5;CUNEIFORM SIGN LAK-225;Lo;0;L;;;;;N;;;;;
+124E6;CUNEIFORM SIGN LAK-228;Lo;0;L;;;;;N;;;;;
+124E7;CUNEIFORM SIGN LAK-238;Lo;0;L;;;;;N;;;;;
+124E8;CUNEIFORM SIGN LAK-265;Lo;0;L;;;;;N;;;;;
+124E9;CUNEIFORM SIGN LAK-266;Lo;0;L;;;;;N;;;;;
+124EA;CUNEIFORM SIGN LAK-343;Lo;0;L;;;;;N;;;;;
+124EB;CUNEIFORM SIGN LAK-347;Lo;0;L;;;;;N;;;;;
+124EC;CUNEIFORM SIGN LAK-348;Lo;0;L;;;;;N;;;;;
+124ED;CUNEIFORM SIGN LAK-383;Lo;0;L;;;;;N;;;;;
+124EE;CUNEIFORM SIGN LAK-384;Lo;0;L;;;;;N;;;;;
+124EF;CUNEIFORM SIGN LAK-390;Lo;0;L;;;;;N;;;;;
+124F0;CUNEIFORM SIGN LAK-441;Lo;0;L;;;;;N;;;;;
+124F1;CUNEIFORM SIGN LAK-449;Lo;0;L;;;;;N;;;;;
+124F2;CUNEIFORM SIGN LAK-449 TIMES GU;Lo;0;L;;;;;N;;;;;
+124F3;CUNEIFORM SIGN LAK-449 TIMES IGI;Lo;0;L;;;;;N;;;;;
+124F4;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+124F5;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+124F6;CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA;Lo;0;L;;;;;N;;;;;
+124F7;CUNEIFORM SIGN LAK-450;Lo;0;L;;;;;N;;;;;
+124F8;CUNEIFORM SIGN LAK-457;Lo;0;L;;;;;N;;;;;
+124F9;CUNEIFORM SIGN LAK-470;Lo;0;L;;;;;N;;;;;
+124FA;CUNEIFORM SIGN LAK-483;Lo;0;L;;;;;N;;;;;
+124FB;CUNEIFORM SIGN LAK-490;Lo;0;L;;;;;N;;;;;
+124FC;CUNEIFORM SIGN LAK-492;Lo;0;L;;;;;N;;;;;
+124FD;CUNEIFORM SIGN LAK-493;Lo;0;L;;;;;N;;;;;
+124FE;CUNEIFORM SIGN LAK-495;Lo;0;L;;;;;N;;;;;
+124FF;CUNEIFORM SIGN LAK-550;Lo;0;L;;;;;N;;;;;
+12500;CUNEIFORM SIGN LAK-608;Lo;0;L;;;;;N;;;;;
+12501;CUNEIFORM SIGN LAK-617;Lo;0;L;;;;;N;;;;;
+12502;CUNEIFORM SIGN LAK-617 TIMES ASH;Lo;0;L;;;;;N;;;;;
+12503;CUNEIFORM SIGN LAK-617 TIMES BAD;Lo;0;L;;;;;N;;;;;
+12504;CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+12505;CUNEIFORM SIGN LAK-617 TIMES KU3;Lo;0;L;;;;;N;;;;;
+12506;CUNEIFORM SIGN LAK-617 TIMES LA;Lo;0;L;;;;;N;;;;;
+12507;CUNEIFORM SIGN LAK-617 TIMES TAR;Lo;0;L;;;;;N;;;;;
+12508;CUNEIFORM SIGN LAK-617 TIMES TE;Lo;0;L;;;;;N;;;;;
+12509;CUNEIFORM SIGN LAK-617 TIMES U2;Lo;0;L;;;;;N;;;;;
+1250A;CUNEIFORM SIGN LAK-617 TIMES UD;Lo;0;L;;;;;N;;;;;
+1250B;CUNEIFORM SIGN LAK-617 TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1250C;CUNEIFORM SIGN LAK-636;Lo;0;L;;;;;N;;;;;
+1250D;CUNEIFORM SIGN LAK-648;Lo;0;L;;;;;N;;;;;
+1250E;CUNEIFORM SIGN LAK-648 TIMES DUB;Lo;0;L;;;;;N;;;;;
+1250F;CUNEIFORM SIGN LAK-648 TIMES GA;Lo;0;L;;;;;N;;;;;
+12510;CUNEIFORM SIGN LAK-648 TIMES IGI;Lo;0;L;;;;;N;;;;;
+12511;CUNEIFORM SIGN LAK-648 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12512;CUNEIFORM SIGN LAK-648 TIMES NI;Lo;0;L;;;;;N;;;;;
+12513;CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+12514;CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI;Lo;0;L;;;;;N;;;;;
+12515;CUNEIFORM SIGN LAK-648 TIMES UD;Lo;0;L;;;;;N;;;;;
+12516;CUNEIFORM SIGN LAK-648 TIMES URUDA;Lo;0;L;;;;;N;;;;;
+12517;CUNEIFORM SIGN LAK-724;Lo;0;L;;;;;N;;;;;
+12518;CUNEIFORM SIGN LAK-749;Lo;0;L;;;;;N;;;;;
+12519;CUNEIFORM SIGN LU2 GUNU TIMES ASH;Lo;0;L;;;;;N;;;;;
+1251A;CUNEIFORM SIGN LU2 TIMES DISH;Lo;0;L;;;;;N;;;;;
+1251B;CUNEIFORM SIGN LU2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+1251C;CUNEIFORM SIGN LU2 TIMES PAP;Lo;0;L;;;;;N;;;;;
+1251D;CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;
+1251E;CUNEIFORM SIGN LU2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1251F;CUNEIFORM SIGN MI PLUS ZA7;Lo;0;L;;;;;N;;;;;
+12520;CUNEIFORM SIGN MUSH OVER MUSH TIMES GA;Lo;0;L;;;;;N;;;;;
+12521;CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK;Lo;0;L;;;;;N;;;;;
+12522;CUNEIFORM SIGN NINDA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;;
+12523;CUNEIFORM SIGN NINDA2 TIMES GISH;Lo;0;L;;;;;N;;;;;
+12524;CUNEIFORM SIGN NINDA2 TIMES GUL;Lo;0;L;;;;;N;;;;;
+12525;CUNEIFORM SIGN NINDA2 TIMES HI;Lo;0;L;;;;;N;;;;;
+12526;CUNEIFORM SIGN NINDA2 TIMES KESH2;Lo;0;L;;;;;N;;;;;
+12527;CUNEIFORM SIGN NINDA2 TIMES LAK-050;Lo;0;L;;;;;N;;;;;
+12528;CUNEIFORM SIGN NINDA2 TIMES MASH;Lo;0;L;;;;;N;;;;;
+12529;CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
+1252A;CUNEIFORM SIGN NINDA2 TIMES U;Lo;0;L;;;;;N;;;;;
+1252B;CUNEIFORM SIGN NINDA2 TIMES U PLUS U;Lo;0;L;;;;;N;;;;;
+1252C;CUNEIFORM SIGN NINDA2 TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1252D;CUNEIFORM SIGN SAG GUNU TIMES HA;Lo;0;L;;;;;N;;;;;
+1252E;CUNEIFORM SIGN SAG TIMES EN;Lo;0;L;;;;;N;;;;;
+1252F;CUNEIFORM SIGN SAG TIMES SHE AT LEFT;Lo;0;L;;;;;N;;;;;
+12530;CUNEIFORM SIGN SAG TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12531;CUNEIFORM SIGN SHA6 TENU;Lo;0;L;;;;;N;;;;;
+12532;CUNEIFORM SIGN SHE OVER SHE;Lo;0;L;;;;;N;;;;;
+12533;CUNEIFORM SIGN SHE PLUS HUB2;Lo;0;L;;;;;N;;;;;
+12534;CUNEIFORM SIGN SHE PLUS NAM2;Lo;0;L;;;;;N;;;;;
+12535;CUNEIFORM SIGN SHE PLUS SAR;Lo;0;L;;;;;N;;;;;
+12536;CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI;Lo;0;L;;;;;N;;;;;
+12537;CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN;Lo;0;L;;;;;N;;;;;
+12538;CUNEIFORM SIGN SI TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12539;CUNEIFORM SIGN TAK4 PLUS SAG;Lo;0;L;;;;;N;;;;;
+1253A;CUNEIFORM SIGN TUM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1253B;CUNEIFORM SIGN TUM TIMES THREE DISH;Lo;0;L;;;;;N;;;;;
+1253C;CUNEIFORM SIGN UR2 INVERTED;Lo;0;L;;;;;N;;;;;
+1253D;CUNEIFORM SIGN UR2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1253E;CUNEIFORM SIGN URU TIMES DARA3;Lo;0;L;;;;;N;;;;;
+1253F;CUNEIFORM SIGN URU TIMES LAK-668;Lo;0;L;;;;;N;;;;;
+12540;CUNEIFORM SIGN URU TIMES LU3;Lo;0;L;;;;;N;;;;;
+12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;;
+12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;;
+12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;;
+13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
+13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
+13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
+13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;;
+13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;;
+13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;;
+13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;;
+13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;;
+13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;;
+13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;;
+1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;;
+1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;;
+1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;;
+1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;;
+1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;;
+1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;;
+13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;;
+13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;;
+13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;;
+13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;;
+13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;;
+13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;;
+13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;;
+13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;;
+13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;;
+13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;;
+1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;;
+1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;;
+1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;;
+1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;;
+1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;;
+1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;;
+13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;;
+13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;;
+13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;;
+13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;;
+13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;;
+13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;;
+13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;;
+13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;;
+13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;;
+13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;;
+1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;;
+1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;;
+1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;;
+1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;;
+1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;;
+1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;;
+13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;;
+13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;;
+13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;;
+13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;;
+13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;;
+13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;;
+13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;;
+13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;;
+13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;;
+13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;;
+1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;;
+1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;;
+1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;;
+1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;;
+1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;;
+1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;;
+13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;;
+13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;;
+13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;;
+13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;;
+13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;;
+13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;;
+13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;;
+13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;;
+13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;;
+13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;;
+1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;;
+1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;;
+1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;;
+1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;;
+1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;;
+1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;;
+13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;;
+13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;;
+13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;;
+13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;;
+13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;;
+13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;;
+13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;;
+13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;;
+13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;;
+13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;;
+1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;;
+1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;;
+1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;;
+1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;;
+1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;;
+1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;;
+13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;;
+13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;;
+13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;;
+13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;;
+13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;;
+13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;;
+13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;;
+13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;;
+13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;;
+13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;;
+1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;;
+1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;;
+1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;;
+1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;;
+1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;;
+1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;;
+13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;;
+13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;;
+13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;;
+13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;;
+13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;;
+13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;;
+13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;;
+13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;;
+13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;;
+13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;;
+1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;;
+1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;;
+1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;;
+1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;;
+1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;;
+1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;;
+13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;;
+13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;;
+13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;;
+13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;;
+13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;;
+13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;;
+13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;;
+13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;;
+13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;;
+13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;;
+1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;;
+1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;;
+1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;;
+1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;;
+1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;;
+1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;;
+13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;;
+13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;;
+13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;;
+13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;;
+13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;;
+13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;;
+13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;;
+13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;;
+13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;;
+13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;;
+1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;;
+1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;;
+1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;;
+1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;;
+1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;;
+1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;;
+130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;;
+130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;;
+130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;;
+130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;;
+130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;;
+130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;;
+130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;;
+130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;;
+130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;;
+130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;;
+130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;;
+130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;;
+130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;;
+130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;;
+130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;;
+130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;;
+130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;;
+130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;;
+130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;;
+130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;;
+130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;;
+130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;;
+130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;;
+130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;;
+130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;;
+130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;;
+130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;;
+130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;;
+130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;;
+130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;;
+130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;;
+130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;;
+130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;;
+130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;;
+130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;;
+130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;;
+130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;;
+130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;;
+130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;;
+130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;;
+130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;;
+130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;;
+130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;;
+130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;;
+130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;;
+130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;;
+130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;;
+130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;;
+130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;;
+130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;;
+130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;;
+130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;;
+130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;;
+130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;;
+130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;;
+130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;;
+130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;;
+130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;;
+130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;;
+130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;;
+130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;;
+130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;;
+130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;;
+130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;;
+130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;;
+130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;;
+130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;;
+130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;;
+130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;;
+130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;;
+130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;;
+130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;;
+130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;;
+130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;;
+130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;;
+130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;;
+130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;;
+130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;;
+130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;;
+130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;;
+130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;;
+130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;;
+130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;;
+130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;;
+130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;;
+130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;;
+130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;;
+130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;;
+130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;;
+130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;;
+130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;;
+130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;;
+130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;;
+130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;;
+130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;;
+130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;;
+13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;;
+13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;;
+13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;;
+13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;;
+13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;;
+13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;;
+13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;;
+13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;;
+13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;;
+13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;;
+1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;;
+1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;;
+1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;;
+1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;;
+1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;;
+1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;;
+13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;;
+13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;;
+13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;;
+13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;;
+13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;;
+13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;;
+13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;;
+13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;;
+13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;;
+13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;;
+1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;;
+1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;;
+1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;;
+1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;;
+1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;;
+1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;;
+13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;;
+13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;;
+13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;;
+13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;;
+13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;;
+13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;;
+13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;;
+13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;;
+13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;;
+13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;;
+1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;;
+1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;;
+1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;;
+1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;;
+1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;;
+1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;;
+13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;;
+13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;;
+13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;;
+13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;;
+13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;;
+13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;;
+13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;;
+13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;;
+13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;;
+13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;;
+1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;;
+1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;;
+1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;;
+1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;;
+1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;;
+1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;;
+13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;;
+13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;;
+13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;;
+13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;;
+13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;;
+13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;;
+13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;;
+13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;;
+13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;;
+13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;;
+1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;;
+1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;;
+1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;;
+1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;;
+1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;;
+1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;;
+13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;;
+13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;;
+13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;;
+13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;;
+13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;;
+13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;;
+13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;;
+13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;;
+13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;;
+13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;;
+1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;;
+1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;;
+1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;;
+1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;;
+1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;;
+1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;;
+13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;;
+13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;;
+13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;;
+13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;;
+13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;;
+13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;;
+13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;;
+13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;;
+13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;;
+13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;;
+1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;;
+1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;;
+1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;;
+1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;;
+1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;;
+1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;;
+13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;;
+13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;;
+13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;;
+13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;;
+13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;;
+13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;;
+13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;;
+13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;;
+13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;;
+13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;;
+1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;;
+1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;;
+1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;;
+1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;;
+1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;;
+1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;;
+13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;;
+13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;;
+13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;;
+13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;;
+13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;;
+13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;;
+13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;;
+13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;;
+13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;;
+13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;;
+1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;;
+1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;;
+1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;;
+1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;;
+1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;;
+1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;;
+13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;;
+13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;;
+13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;;
+13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;;
+13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;;
+13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;;
+13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;;
+13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;;
+13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;;
+13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;;
+1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;;
+1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;;
+1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;;
+1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;;
+1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;;
+1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;;
+131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;;
+131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;;
+131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;;
+131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;;
+131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;;
+131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;;
+131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;;
+131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;;
+131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;;
+131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;;
+131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;;
+131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;;
+131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;;
+131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;;
+131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;;
+131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;;
+131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;;
+131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;;
+131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;;
+131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;;
+131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;;
+131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;;
+131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;;
+131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;;
+131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;;
+131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;;
+131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;;
+131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;;
+131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;;
+131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;;
+131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;;
+131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;;
+131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;;
+131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;;
+131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;;
+131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;;
+131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;;
+131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;;
+131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;;
+131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;;
+131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;;
+131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;;
+131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;;
+131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;;
+131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;;
+131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;;
+131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;;
+131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;;
+131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;;
+131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;;
+131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;;
+131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;;
+131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;;
+131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;;
+131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;;
+131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;;
+131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;;
+131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;;
+131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;;
+131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;;
+131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;;
+131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;;
+131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;;
+131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;;
+131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;;
+131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;;
+131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;;
+131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;;
+131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;;
+131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;;
+131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;;
+131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;;
+131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;;
+131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;;
+131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;;
+131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;;
+131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;;
+131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;;
+131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;;
+131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;;
+131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;;
+131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;;
+131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;;
+131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;;
+131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;;
+131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;;
+131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;;
+131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;;
+131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;;
+131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;;
+131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;;
+131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;;
+131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;;
+131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;;
+131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;;
+131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;;
+13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;;
+13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;;
+13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;;
+13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;;
+13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;;
+13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;;
+13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;;
+13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;;
+13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;;
+13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;;
+1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;;
+1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;;
+1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;;
+1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;;
+1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;;
+1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;;
+13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;;
+13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;;
+13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;;
+13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;;
+13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;;
+13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;;
+13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;;
+13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;;
+13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;;
+13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;;
+1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;;
+1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;;
+1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;;
+1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;;
+1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;;
+1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;;
+13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;;
+13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;;
+13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;;
+13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;;
+13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;;
+13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;;
+13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;;
+13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;;
+13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;;
+13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;;
+1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;;
+1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;;
+1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;;
+1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;;
+1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;;
+1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;;
+13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;;
+13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;;
+13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;;
+13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;;
+13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;;
+13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;;
+13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;;
+13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;;
+13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;;
+13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;;
+1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;;
+1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;;
+1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;;
+1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;;
+1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;;
+1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;;
+13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;;
+13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;;
+13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;;
+13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;;
+13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;;
+13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;;
+13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;;
+13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;;
+13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;;
+13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;;
+1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;;
+1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;;
+1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;;
+1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;;
+1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;;
+1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;;
+13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;;
+13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;;
+13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;;
+13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;;
+13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;;
+13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;;
+13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;;
+13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;;
+13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;;
+13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;;
+1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;;
+1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;;
+1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;;
+1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;;
+1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;;
+1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;;
+13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;;
+13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;;
+13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;;
+13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;;
+13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;;
+13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;;
+13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;;
+13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;;
+13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;;
+13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;;
+1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;;
+1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;;
+1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;;
+1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;;
+1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;;
+1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;;
+13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;;
+13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;;
+13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;;
+13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;;
+13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;;
+13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;;
+13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;;
+13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;;
+13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;;
+13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;;
+1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;;
+1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;;
+1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;;
+1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;;
+1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;;
+1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;;
+13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;;
+13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;;
+13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;;
+13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;;
+13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;;
+13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;;
+13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;;
+13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;;
+13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;;
+13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;;
+1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;;
+1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;;
+1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;;
+1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;;
+1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;;
+1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;;
+13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;;
+13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;;
+13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;;
+13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;;
+13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;;
+13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;;
+13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;;
+13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;;
+13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;;
+13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;;
+1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;;
+1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;;
+1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;;
+1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;;
+1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;;
+1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;;
+132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;;
+132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;;
+132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;;
+132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;;
+132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;;
+132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;;
+132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;;
+132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;;
+132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;;
+132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;;
+132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;;
+132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;;
+132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;;
+132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;;
+132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;;
+132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;;
+132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;;
+132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;;
+132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;;
+132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;;
+132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;;
+132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;;
+132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;;
+132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;;
+132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;;
+132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;;
+132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;;
+132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;;
+132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;;
+132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;;
+132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;;
+132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;;
+132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;;
+132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;;
+132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;;
+132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;;
+132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;;
+132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;;
+132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;;
+132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;;
+132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;;
+132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;;
+132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;;
+132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;;
+132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;;
+132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;;
+132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;;
+132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;;
+132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;;
+132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;;
+132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;;
+132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;;
+132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;;
+132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;;
+132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;;
+132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;;
+132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;;
+132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;;
+132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;;
+132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;;
+132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;;
+132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;;
+132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;;
+132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;;
+132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;;
+132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;;
+132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;;
+132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;;
+132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;;
+132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;;
+132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;;
+132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;;
+132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;;
+132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;;
+132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;;
+132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;;
+132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;;
+132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;;
+132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;;
+132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;;
+132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;;
+132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;;
+132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;;
+132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;;
+132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;;
+132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;;
+132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;;
+132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;;
+132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;;
+132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;;
+132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;;
+132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;;
+132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;;
+132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;;
+132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;;
+132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;;
+13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;;
+13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;;
+13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;;
+13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;;
+13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;;
+13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;;
+13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;;
+13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;;
+13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;;
+13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;;
+1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;;
+1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;;
+1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;;
+1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;;
+1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;;
+1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;;
+13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;;
+13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;;
+13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;;
+13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;;
+13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;;
+13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;;
+13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;;
+13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;;
+13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;;
+13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;;
+1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;;
+1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;;
+1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;;
+1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;;
+1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;;
+1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;;
+13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;;
+13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;;
+13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;;
+13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;;
+13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;;
+13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;;
+13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;;
+13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;;
+13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;;
+13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;;
+1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;;
+1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;;
+1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;;
+1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;;
+1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;;
+1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;;
+13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;;
+13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;;
+13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;;
+13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;;
+13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;;
+13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;;
+13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;;
+13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;;
+13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;;
+13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;;
+1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;;
+1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;;
+1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;;
+1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;;
+1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;;
+1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;;
+13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;;
+13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;;
+13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;;
+13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;;
+13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;;
+13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;;
+13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;;
+13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;;
+13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;;
+13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;;
+1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;;
+1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;;
+1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;;
+1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;;
+1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;;
+1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;;
+13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;;
+13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;;
+13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;;
+13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;;
+13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;;
+13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;;
+13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;;
+13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;;
+13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;;
+13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;;
+1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;;
+1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;;
+1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;;
+1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;;
+1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;;
+1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;;
+13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;;
+13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;;
+13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;;
+13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;;
+13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;;
+13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;;
+13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;;
+13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;;
+13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;;
+13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;;
+1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;;
+1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;;
+1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;;
+1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;;
+1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;;
+1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;;
+13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;;
+13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;;
+13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;;
+13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;;
+13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;;
+13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;;
+13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;;
+13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;;
+13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;;
+13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;;
+1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;;
+1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;;
+1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;;
+1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;;
+1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;;
+1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;;
+13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;;
+13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;;
+13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;;
+13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;;
+13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;;
+13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;;
+13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;;
+13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;;
+13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;;
+13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;;
+1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;;
+1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;;
+1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;;
+1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;;
+1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;;
+1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;;
+13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;;
+13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;;
+13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;;
+13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;;
+13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;;
+13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;;
+13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;;
+13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;;
+13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;;
+13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;;
+1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;;
+1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;;
+1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;;
+1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;;
+1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;;
+1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;;
+133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;;
+133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;;
+133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;;
+133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;;
+133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;;
+133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;;
+133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;;
+133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;;
+133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;;
+133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;;
+133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;;
+133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;;
+133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;;
+133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;;
+133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;;
+133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;;
+133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;;
+133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;;
+133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;;
+133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;;
+133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;;
+133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;;
+133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;;
+133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;;
+133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;;
+133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;;
+133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;;
+133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;;
+133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;;
+133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;;
+133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;;
+133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;;
+133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;;
+133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;;
+133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;;
+133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;;
+133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;;
+133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;;
+133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;;
+133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;;
+133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;;
+133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;;
+133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;;
+133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;;
+133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;;
+133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;;
+133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;;
+133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;;
+133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;;
+133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;;
+133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;;
+133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;;
+133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;;
+133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;;
+133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;;
+133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;;
+133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;;
+133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;;
+133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;;
+133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;;
+133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;;
+133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;;
+133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;;
+133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;;
+133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;;
+133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;;
+133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;;
+133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;;
+133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;;
+133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;;
+133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;;
+133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;;
+133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;;
+133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;;
+133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;;
+133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;;
+133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;;
+133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;;
+133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;;
+133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;;
+133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;;
+133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;;
+133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;;
+133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;;
+133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;;
+133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;;
+133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;;
+133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;;
+133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;;
+133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;;
+133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;;
+133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;;
+133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;;
+133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;;
+133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;;
+133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;;
+13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;;
+13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;;
+13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;;
+13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;;
+13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;;
+13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;;
+13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;;
+13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;;
+13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;;
+13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;;
+1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;;
+1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;;
+1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;;
+1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;;
+1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;;
+1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;;
+13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;;
+13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;;
+13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;;
+13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;;
+13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;;
+13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;;
+13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;;
+13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;;
+13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;;
+13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;;
+1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;;
+1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;;
+1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;;
+1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;;
+1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;;
+1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;;
+13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;;
+13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;;
+13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;;
+13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;;
+13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;;
+13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;;
+13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;;
+13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;;
+13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;;
+13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;;
+1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;;
+1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;;
+1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;;
+1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;;
+1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;;
+13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;;
+13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;;
+13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;;
+13433;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START;Cf;0;L;;;;;N;;;;;
+13434;EGYPTIAN HIEROGLYPH INSERT AT TOP END;Cf;0;L;;;;;N;;;;;
+13435;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END;Cf;0;L;;;;;N;;;;;
+13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;;
+13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;;
+13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;;
+14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
+14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
+14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
+14403;ANATOLIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;;
+14404;ANATOLIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;;
+14405;ANATOLIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;;
+14406;ANATOLIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;;
+14407;ANATOLIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;;
+14408;ANATOLIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;;
+14409;ANATOLIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;;
+1440A;ANATOLIAN HIEROGLYPH A010A;Lo;0;L;;;;;N;;;;;
+1440B;ANATOLIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;;
+1440C;ANATOLIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;;
+1440D;ANATOLIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;;
+1440E;ANATOLIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;;
+1440F;ANATOLIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;;
+14410;ANATOLIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;;
+14411;ANATOLIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;;
+14412;ANATOLIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;;
+14413;ANATOLIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;;
+14414;ANATOLIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;;
+14415;ANATOLIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;;
+14416;ANATOLIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;;
+14417;ANATOLIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;;
+14418;ANATOLIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;;
+14419;ANATOLIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;;
+1441A;ANATOLIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;;
+1441B;ANATOLIAN HIEROGLYPH A026A;Lo;0;L;;;;;N;;;;;
+1441C;ANATOLIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;;
+1441D;ANATOLIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;;
+1441E;ANATOLIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;;
+1441F;ANATOLIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;;
+14420;ANATOLIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;;
+14421;ANATOLIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;;
+14422;ANATOLIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;;
+14423;ANATOLIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;;
+14424;ANATOLIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;;
+14425;ANATOLIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;;
+14426;ANATOLIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;;
+14427;ANATOLIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;;
+14428;ANATOLIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;;
+14429;ANATOLIAN HIEROGLYPH A039A;Lo;0;L;;;;;N;;;;;
+1442A;ANATOLIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;;
+1442B;ANATOLIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;;
+1442C;ANATOLIAN HIEROGLYPH A041A;Lo;0;L;;;;;N;;;;;
+1442D;ANATOLIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;;
+1442E;ANATOLIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;;
+1442F;ANATOLIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;;
+14430;ANATOLIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;;
+14431;ANATOLIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;;
+14432;ANATOLIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;;
+14433;ANATOLIAN HIEROGLYPH A046A;Lo;0;L;;;;;N;;;;;
+14434;ANATOLIAN HIEROGLYPH A046B;Lo;0;L;;;;;N;;;;;
+14435;ANATOLIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;;
+14436;ANATOLIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;;
+14437;ANATOLIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;;
+14438;ANATOLIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;;
+14439;ANATOLIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;;
+1443A;ANATOLIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;;
+1443B;ANATOLIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;;
+1443C;ANATOLIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;;
+1443D;ANATOLIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;;
+1443E;ANATOLIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;;
+1443F;ANATOLIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;;
+14440;ANATOLIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;;
+14441;ANATOLIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;;
+14442;ANATOLIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;;
+14443;ANATOLIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;;
+14444;ANATOLIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;;
+14445;ANATOLIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;;
+14446;ANATOLIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;;
+14447;ANATOLIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;;
+14448;ANATOLIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;;
+14449;ANATOLIAN HIEROGLYPH A066A;Lo;0;L;;;;;N;;;;;
+1444A;ANATOLIAN HIEROGLYPH A066B;Lo;0;L;;;;;N;;;;;
+1444B;ANATOLIAN HIEROGLYPH A066C;Lo;0;L;;;;;N;;;;;
+1444C;ANATOLIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;;
+1444D;ANATOLIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;;
+1444E;ANATOLIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;;
+1444F;ANATOLIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;;
+14450;ANATOLIAN HIEROGLYPH A071;Lo;0;L;;;;;N;;;;;
+14451;ANATOLIAN HIEROGLYPH A072;Lo;0;L;;;;;N;;;;;
+14452;ANATOLIAN HIEROGLYPH A073;Lo;0;L;;;;;N;;;;;
+14453;ANATOLIAN HIEROGLYPH A074;Lo;0;L;;;;;N;;;;;
+14454;ANATOLIAN HIEROGLYPH A075;Lo;0;L;;;;;N;;;;;
+14455;ANATOLIAN HIEROGLYPH A076;Lo;0;L;;;;;N;;;;;
+14456;ANATOLIAN HIEROGLYPH A077;Lo;0;L;;;;;N;;;;;
+14457;ANATOLIAN HIEROGLYPH A078;Lo;0;L;;;;;N;;;;;
+14458;ANATOLIAN HIEROGLYPH A079;Lo;0;L;;;;;N;;;;;
+14459;ANATOLIAN HIEROGLYPH A080;Lo;0;L;;;;;N;;;;;
+1445A;ANATOLIAN HIEROGLYPH A081;Lo;0;L;;;;;N;;;;;
+1445B;ANATOLIAN HIEROGLYPH A082;Lo;0;L;;;;;N;;;;;
+1445C;ANATOLIAN HIEROGLYPH A083;Lo;0;L;;;;;N;;;;;
+1445D;ANATOLIAN HIEROGLYPH A084;Lo;0;L;;;;;N;;;;;
+1445E;ANATOLIAN HIEROGLYPH A085;Lo;0;L;;;;;N;;;;;
+1445F;ANATOLIAN HIEROGLYPH A086;Lo;0;L;;;;;N;;;;;
+14460;ANATOLIAN HIEROGLYPH A087;Lo;0;L;;;;;N;;;;;
+14461;ANATOLIAN HIEROGLYPH A088;Lo;0;L;;;;;N;;;;;
+14462;ANATOLIAN HIEROGLYPH A089;Lo;0;L;;;;;N;;;;;
+14463;ANATOLIAN HIEROGLYPH A090;Lo;0;L;;;;;N;;;;;
+14464;ANATOLIAN HIEROGLYPH A091;Lo;0;L;;;;;N;;;;;
+14465;ANATOLIAN HIEROGLYPH A092;Lo;0;L;;;;;N;;;;;
+14466;ANATOLIAN HIEROGLYPH A093;Lo;0;L;;;;;N;;;;;
+14467;ANATOLIAN HIEROGLYPH A094;Lo;0;L;;;;;N;;;;;
+14468;ANATOLIAN HIEROGLYPH A095;Lo;0;L;;;;;N;;;;;
+14469;ANATOLIAN HIEROGLYPH A096;Lo;0;L;;;;;N;;;;;
+1446A;ANATOLIAN HIEROGLYPH A097;Lo;0;L;;;;;N;;;;;
+1446B;ANATOLIAN HIEROGLYPH A097A;Lo;0;L;;;;;N;;;;;
+1446C;ANATOLIAN HIEROGLYPH A098;Lo;0;L;;;;;N;;;;;
+1446D;ANATOLIAN HIEROGLYPH A098A;Lo;0;L;;;;;N;;;;;
+1446E;ANATOLIAN HIEROGLYPH A099;Lo;0;L;;;;;N;;;;;
+1446F;ANATOLIAN HIEROGLYPH A100;Lo;0;L;;;;;N;;;;;
+14470;ANATOLIAN HIEROGLYPH A100A;Lo;0;L;;;;;N;;;;;
+14471;ANATOLIAN HIEROGLYPH A101;Lo;0;L;;;;;N;;;;;
+14472;ANATOLIAN HIEROGLYPH A101A;Lo;0;L;;;;;N;;;;;
+14473;ANATOLIAN HIEROGLYPH A102;Lo;0;L;;;;;N;;;;;
+14474;ANATOLIAN HIEROGLYPH A102A;Lo;0;L;;;;;N;;;;;
+14475;ANATOLIAN HIEROGLYPH A103;Lo;0;L;;;;;N;;;;;
+14476;ANATOLIAN HIEROGLYPH A104;Lo;0;L;;;;;N;;;;;
+14477;ANATOLIAN HIEROGLYPH A104A;Lo;0;L;;;;;N;;;;;
+14478;ANATOLIAN HIEROGLYPH A104B;Lo;0;L;;;;;N;;;;;
+14479;ANATOLIAN HIEROGLYPH A104C;Lo;0;L;;;;;N;;;;;
+1447A;ANATOLIAN HIEROGLYPH A105;Lo;0;L;;;;;N;;;;;
+1447B;ANATOLIAN HIEROGLYPH A105A;Lo;0;L;;;;;N;;;;;
+1447C;ANATOLIAN HIEROGLYPH A105B;Lo;0;L;;;;;N;;;;;
+1447D;ANATOLIAN HIEROGLYPH A106;Lo;0;L;;;;;N;;;;;
+1447E;ANATOLIAN HIEROGLYPH A107;Lo;0;L;;;;;N;;;;;
+1447F;ANATOLIAN HIEROGLYPH A107A;Lo;0;L;;;;;N;;;;;
+14480;ANATOLIAN HIEROGLYPH A107B;Lo;0;L;;;;;N;;;;;
+14481;ANATOLIAN HIEROGLYPH A107C;Lo;0;L;;;;;N;;;;;
+14482;ANATOLIAN HIEROGLYPH A108;Lo;0;L;;;;;N;;;;;
+14483;ANATOLIAN HIEROGLYPH A109;Lo;0;L;;;;;N;;;;;
+14484;ANATOLIAN HIEROGLYPH A110;Lo;0;L;;;;;N;;;;;
+14485;ANATOLIAN HIEROGLYPH A110A;Lo;0;L;;;;;N;;;;;
+14486;ANATOLIAN HIEROGLYPH A110B;Lo;0;L;;;;;N;;;;;
+14487;ANATOLIAN HIEROGLYPH A111;Lo;0;L;;;;;N;;;;;
+14488;ANATOLIAN HIEROGLYPH A112;Lo;0;L;;;;;N;;;;;
+14489;ANATOLIAN HIEROGLYPH A113;Lo;0;L;;;;;N;;;;;
+1448A;ANATOLIAN HIEROGLYPH A114;Lo;0;L;;;;;N;;;;;
+1448B;ANATOLIAN HIEROGLYPH A115;Lo;0;L;;;;;N;;;;;
+1448C;ANATOLIAN HIEROGLYPH A115A;Lo;0;L;;;;;N;;;;;
+1448D;ANATOLIAN HIEROGLYPH A116;Lo;0;L;;;;;N;;;;;
+1448E;ANATOLIAN HIEROGLYPH A117;Lo;0;L;;;;;N;;;;;
+1448F;ANATOLIAN HIEROGLYPH A118;Lo;0;L;;;;;N;;;;;
+14490;ANATOLIAN HIEROGLYPH A119;Lo;0;L;;;;;N;;;;;
+14491;ANATOLIAN HIEROGLYPH A120;Lo;0;L;;;;;N;;;;;
+14492;ANATOLIAN HIEROGLYPH A121;Lo;0;L;;;;;N;;;;;
+14493;ANATOLIAN HIEROGLYPH A122;Lo;0;L;;;;;N;;;;;
+14494;ANATOLIAN HIEROGLYPH A123;Lo;0;L;;;;;N;;;;;
+14495;ANATOLIAN HIEROGLYPH A124;Lo;0;L;;;;;N;;;;;
+14496;ANATOLIAN HIEROGLYPH A125;Lo;0;L;;;;;N;;;;;
+14497;ANATOLIAN HIEROGLYPH A125A;Lo;0;L;;;;;N;;;;;
+14498;ANATOLIAN HIEROGLYPH A126;Lo;0;L;;;;;N;;;;;
+14499;ANATOLIAN HIEROGLYPH A127;Lo;0;L;;;;;N;;;;;
+1449A;ANATOLIAN HIEROGLYPH A128;Lo;0;L;;;;;N;;;;;
+1449B;ANATOLIAN HIEROGLYPH A129;Lo;0;L;;;;;N;;;;;
+1449C;ANATOLIAN HIEROGLYPH A130;Lo;0;L;;;;;N;;;;;
+1449D;ANATOLIAN HIEROGLYPH A131;Lo;0;L;;;;;N;;;;;
+1449E;ANATOLIAN HIEROGLYPH A132;Lo;0;L;;;;;N;;;;;
+1449F;ANATOLIAN HIEROGLYPH A133;Lo;0;L;;;;;N;;;;;
+144A0;ANATOLIAN HIEROGLYPH A134;Lo;0;L;;;;;N;;;;;
+144A1;ANATOLIAN HIEROGLYPH A135;Lo;0;L;;;;;N;;;;;
+144A2;ANATOLIAN HIEROGLYPH A135A;Lo;0;L;;;;;N;;;;;
+144A3;ANATOLIAN HIEROGLYPH A136;Lo;0;L;;;;;N;;;;;
+144A4;ANATOLIAN HIEROGLYPH A137;Lo;0;L;;;;;N;;;;;
+144A5;ANATOLIAN HIEROGLYPH A138;Lo;0;L;;;;;N;;;;;
+144A6;ANATOLIAN HIEROGLYPH A139;Lo;0;L;;;;;N;;;;;
+144A7;ANATOLIAN HIEROGLYPH A140;Lo;0;L;;;;;N;;;;;
+144A8;ANATOLIAN HIEROGLYPH A141;Lo;0;L;;;;;N;;;;;
+144A9;ANATOLIAN HIEROGLYPH A142;Lo;0;L;;;;;N;;;;;
+144AA;ANATOLIAN HIEROGLYPH A143;Lo;0;L;;;;;N;;;;;
+144AB;ANATOLIAN HIEROGLYPH A144;Lo;0;L;;;;;N;;;;;
+144AC;ANATOLIAN HIEROGLYPH A145;Lo;0;L;;;;;N;;;;;
+144AD;ANATOLIAN HIEROGLYPH A146;Lo;0;L;;;;;N;;;;;
+144AE;ANATOLIAN HIEROGLYPH A147;Lo;0;L;;;;;N;;;;;
+144AF;ANATOLIAN HIEROGLYPH A148;Lo;0;L;;;;;N;;;;;
+144B0;ANATOLIAN HIEROGLYPH A149;Lo;0;L;;;;;N;;;;;
+144B1;ANATOLIAN HIEROGLYPH A150;Lo;0;L;;;;;N;;;;;
+144B2;ANATOLIAN HIEROGLYPH A151;Lo;0;L;;;;;N;;;;;
+144B3;ANATOLIAN HIEROGLYPH A152;Lo;0;L;;;;;N;;;;;
+144B4;ANATOLIAN HIEROGLYPH A153;Lo;0;L;;;;;N;;;;;
+144B5;ANATOLIAN HIEROGLYPH A154;Lo;0;L;;;;;N;;;;;
+144B6;ANATOLIAN HIEROGLYPH A155;Lo;0;L;;;;;N;;;;;
+144B7;ANATOLIAN HIEROGLYPH A156;Lo;0;L;;;;;N;;;;;
+144B8;ANATOLIAN HIEROGLYPH A157;Lo;0;L;;;;;N;;;;;
+144B9;ANATOLIAN HIEROGLYPH A158;Lo;0;L;;;;;N;;;;;
+144BA;ANATOLIAN HIEROGLYPH A159;Lo;0;L;;;;;N;;;;;
+144BB;ANATOLIAN HIEROGLYPH A160;Lo;0;L;;;;;N;;;;;
+144BC;ANATOLIAN HIEROGLYPH A161;Lo;0;L;;;;;N;;;;;
+144BD;ANATOLIAN HIEROGLYPH A162;Lo;0;L;;;;;N;;;;;
+144BE;ANATOLIAN HIEROGLYPH A163;Lo;0;L;;;;;N;;;;;
+144BF;ANATOLIAN HIEROGLYPH A164;Lo;0;L;;;;;N;;;;;
+144C0;ANATOLIAN HIEROGLYPH A165;Lo;0;L;;;;;N;;;;;
+144C1;ANATOLIAN HIEROGLYPH A166;Lo;0;L;;;;;N;;;;;
+144C2;ANATOLIAN HIEROGLYPH A167;Lo;0;L;;;;;N;;;;;
+144C3;ANATOLIAN HIEROGLYPH A168;Lo;0;L;;;;;N;;;;;
+144C4;ANATOLIAN HIEROGLYPH A169;Lo;0;L;;;;;N;;;;;
+144C5;ANATOLIAN HIEROGLYPH A170;Lo;0;L;;;;;N;;;;;
+144C6;ANATOLIAN HIEROGLYPH A171;Lo;0;L;;;;;N;;;;;
+144C7;ANATOLIAN HIEROGLYPH A172;Lo;0;L;;;;;N;;;;;
+144C8;ANATOLIAN HIEROGLYPH A173;Lo;0;L;;;;;N;;;;;
+144C9;ANATOLIAN HIEROGLYPH A174;Lo;0;L;;;;;N;;;;;
+144CA;ANATOLIAN HIEROGLYPH A175;Lo;0;L;;;;;N;;;;;
+144CB;ANATOLIAN HIEROGLYPH A176;Lo;0;L;;;;;N;;;;;
+144CC;ANATOLIAN HIEROGLYPH A177;Lo;0;L;;;;;N;;;;;
+144CD;ANATOLIAN HIEROGLYPH A178;Lo;0;L;;;;;N;;;;;
+144CE;ANATOLIAN HIEROGLYPH A179;Lo;0;L;;;;;N;;;;;
+144CF;ANATOLIAN HIEROGLYPH A180;Lo;0;L;;;;;N;;;;;
+144D0;ANATOLIAN HIEROGLYPH A181;Lo;0;L;;;;;N;;;;;
+144D1;ANATOLIAN HIEROGLYPH A182;Lo;0;L;;;;;N;;;;;
+144D2;ANATOLIAN HIEROGLYPH A183;Lo;0;L;;;;;N;;;;;
+144D3;ANATOLIAN HIEROGLYPH A184;Lo;0;L;;;;;N;;;;;
+144D4;ANATOLIAN HIEROGLYPH A185;Lo;0;L;;;;;N;;;;;
+144D5;ANATOLIAN HIEROGLYPH A186;Lo;0;L;;;;;N;;;;;
+144D6;ANATOLIAN HIEROGLYPH A187;Lo;0;L;;;;;N;;;;;
+144D7;ANATOLIAN HIEROGLYPH A188;Lo;0;L;;;;;N;;;;;
+144D8;ANATOLIAN HIEROGLYPH A189;Lo;0;L;;;;;N;;;;;
+144D9;ANATOLIAN HIEROGLYPH A190;Lo;0;L;;;;;N;;;;;
+144DA;ANATOLIAN HIEROGLYPH A191;Lo;0;L;;;;;N;;;;;
+144DB;ANATOLIAN HIEROGLYPH A192;Lo;0;L;;;;;N;;;;;
+144DC;ANATOLIAN HIEROGLYPH A193;Lo;0;L;;;;;N;;;;;
+144DD;ANATOLIAN HIEROGLYPH A194;Lo;0;L;;;;;N;;;;;
+144DE;ANATOLIAN HIEROGLYPH A195;Lo;0;L;;;;;N;;;;;
+144DF;ANATOLIAN HIEROGLYPH A196;Lo;0;L;;;;;N;;;;;
+144E0;ANATOLIAN HIEROGLYPH A197;Lo;0;L;;;;;N;;;;;
+144E1;ANATOLIAN HIEROGLYPH A198;Lo;0;L;;;;;N;;;;;
+144E2;ANATOLIAN HIEROGLYPH A199;Lo;0;L;;;;;N;;;;;
+144E3;ANATOLIAN HIEROGLYPH A200;Lo;0;L;;;;;N;;;;;
+144E4;ANATOLIAN HIEROGLYPH A201;Lo;0;L;;;;;N;;;;;
+144E5;ANATOLIAN HIEROGLYPH A202;Lo;0;L;;;;;N;;;;;
+144E6;ANATOLIAN HIEROGLYPH A202A;Lo;0;L;;;;;N;;;;;
+144E7;ANATOLIAN HIEROGLYPH A202B;Lo;0;L;;;;;N;;;;;
+144E8;ANATOLIAN HIEROGLYPH A203;Lo;0;L;;;;;N;;;;;
+144E9;ANATOLIAN HIEROGLYPH A204;Lo;0;L;;;;;N;;;;;
+144EA;ANATOLIAN HIEROGLYPH A205;Lo;0;L;;;;;N;;;;;
+144EB;ANATOLIAN HIEROGLYPH A206;Lo;0;L;;;;;N;;;;;
+144EC;ANATOLIAN HIEROGLYPH A207;Lo;0;L;;;;;N;;;;;
+144ED;ANATOLIAN HIEROGLYPH A207A;Lo;0;L;;;;;N;;;;;
+144EE;ANATOLIAN HIEROGLYPH A208;Lo;0;L;;;;;N;;;;;
+144EF;ANATOLIAN HIEROGLYPH A209;Lo;0;L;;;;;N;;;;;
+144F0;ANATOLIAN HIEROGLYPH A209A;Lo;0;L;;;;;N;;;;;
+144F1;ANATOLIAN HIEROGLYPH A210;Lo;0;L;;;;;N;;;;;
+144F2;ANATOLIAN HIEROGLYPH A211;Lo;0;L;;;;;N;;;;;
+144F3;ANATOLIAN HIEROGLYPH A212;Lo;0;L;;;;;N;;;;;
+144F4;ANATOLIAN HIEROGLYPH A213;Lo;0;L;;;;;N;;;;;
+144F5;ANATOLIAN HIEROGLYPH A214;Lo;0;L;;;;;N;;;;;
+144F6;ANATOLIAN HIEROGLYPH A215;Lo;0;L;;;;;N;;;;;
+144F7;ANATOLIAN HIEROGLYPH A215A;Lo;0;L;;;;;N;;;;;
+144F8;ANATOLIAN HIEROGLYPH A216;Lo;0;L;;;;;N;;;;;
+144F9;ANATOLIAN HIEROGLYPH A216A;Lo;0;L;;;;;N;;;;;
+144FA;ANATOLIAN HIEROGLYPH A217;Lo;0;L;;;;;N;;;;;
+144FB;ANATOLIAN HIEROGLYPH A218;Lo;0;L;;;;;N;;;;;
+144FC;ANATOLIAN HIEROGLYPH A219;Lo;0;L;;;;;N;;;;;
+144FD;ANATOLIAN HIEROGLYPH A220;Lo;0;L;;;;;N;;;;;
+144FE;ANATOLIAN HIEROGLYPH A221;Lo;0;L;;;;;N;;;;;
+144FF;ANATOLIAN HIEROGLYPH A222;Lo;0;L;;;;;N;;;;;
+14500;ANATOLIAN HIEROGLYPH A223;Lo;0;L;;;;;N;;;;;
+14501;ANATOLIAN HIEROGLYPH A224;Lo;0;L;;;;;N;;;;;
+14502;ANATOLIAN HIEROGLYPH A225;Lo;0;L;;;;;N;;;;;
+14503;ANATOLIAN HIEROGLYPH A226;Lo;0;L;;;;;N;;;;;
+14504;ANATOLIAN HIEROGLYPH A227;Lo;0;L;;;;;N;;;;;
+14505;ANATOLIAN HIEROGLYPH A227A;Lo;0;L;;;;;N;;;;;
+14506;ANATOLIAN HIEROGLYPH A228;Lo;0;L;;;;;N;;;;;
+14507;ANATOLIAN HIEROGLYPH A229;Lo;0;L;;;;;N;;;;;
+14508;ANATOLIAN HIEROGLYPH A230;Lo;0;L;;;;;N;;;;;
+14509;ANATOLIAN HIEROGLYPH A231;Lo;0;L;;;;;N;;;;;
+1450A;ANATOLIAN HIEROGLYPH A232;Lo;0;L;;;;;N;;;;;
+1450B;ANATOLIAN HIEROGLYPH A233;Lo;0;L;;;;;N;;;;;
+1450C;ANATOLIAN HIEROGLYPH A234;Lo;0;L;;;;;N;;;;;
+1450D;ANATOLIAN HIEROGLYPH A235;Lo;0;L;;;;;N;;;;;
+1450E;ANATOLIAN HIEROGLYPH A236;Lo;0;L;;;;;N;;;;;
+1450F;ANATOLIAN HIEROGLYPH A237;Lo;0;L;;;;;N;;;;;
+14510;ANATOLIAN HIEROGLYPH A238;Lo;0;L;;;;;N;;;;;
+14511;ANATOLIAN HIEROGLYPH A239;Lo;0;L;;;;;N;;;;;
+14512;ANATOLIAN HIEROGLYPH A240;Lo;0;L;;;;;N;;;;;
+14513;ANATOLIAN HIEROGLYPH A241;Lo;0;L;;;;;N;;;;;
+14514;ANATOLIAN HIEROGLYPH A242;Lo;0;L;;;;;N;;;;;
+14515;ANATOLIAN HIEROGLYPH A243;Lo;0;L;;;;;N;;;;;
+14516;ANATOLIAN HIEROGLYPH A244;Lo;0;L;;;;;N;;;;;
+14517;ANATOLIAN HIEROGLYPH A245;Lo;0;L;;;;;N;;;;;
+14518;ANATOLIAN HIEROGLYPH A246;Lo;0;L;;;;;N;;;;;
+14519;ANATOLIAN HIEROGLYPH A247;Lo;0;L;;;;;N;;;;;
+1451A;ANATOLIAN HIEROGLYPH A248;Lo;0;L;;;;;N;;;;;
+1451B;ANATOLIAN HIEROGLYPH A249;Lo;0;L;;;;;N;;;;;
+1451C;ANATOLIAN HIEROGLYPH A250;Lo;0;L;;;;;N;;;;;
+1451D;ANATOLIAN HIEROGLYPH A251;Lo;0;L;;;;;N;;;;;
+1451E;ANATOLIAN HIEROGLYPH A252;Lo;0;L;;;;;N;;;;;
+1451F;ANATOLIAN HIEROGLYPH A253;Lo;0;L;;;;;N;;;;;
+14520;ANATOLIAN HIEROGLYPH A254;Lo;0;L;;;;;N;;;;;
+14521;ANATOLIAN HIEROGLYPH A255;Lo;0;L;;;;;N;;;;;
+14522;ANATOLIAN HIEROGLYPH A256;Lo;0;L;;;;;N;;;;;
+14523;ANATOLIAN HIEROGLYPH A257;Lo;0;L;;;;;N;;;;;
+14524;ANATOLIAN HIEROGLYPH A258;Lo;0;L;;;;;N;;;;;
+14525;ANATOLIAN HIEROGLYPH A259;Lo;0;L;;;;;N;;;;;
+14526;ANATOLIAN HIEROGLYPH A260;Lo;0;L;;;;;N;;;;;
+14527;ANATOLIAN HIEROGLYPH A261;Lo;0;L;;;;;N;;;;;
+14528;ANATOLIAN HIEROGLYPH A262;Lo;0;L;;;;;N;;;;;
+14529;ANATOLIAN HIEROGLYPH A263;Lo;0;L;;;;;N;;;;;
+1452A;ANATOLIAN HIEROGLYPH A264;Lo;0;L;;;;;N;;;;;
+1452B;ANATOLIAN HIEROGLYPH A265;Lo;0;L;;;;;N;;;;;
+1452C;ANATOLIAN HIEROGLYPH A266;Lo;0;L;;;;;N;;;;;
+1452D;ANATOLIAN HIEROGLYPH A267;Lo;0;L;;;;;N;;;;;
+1452E;ANATOLIAN HIEROGLYPH A267A;Lo;0;L;;;;;N;;;;;
+1452F;ANATOLIAN HIEROGLYPH A268;Lo;0;L;;;;;N;;;;;
+14530;ANATOLIAN HIEROGLYPH A269;Lo;0;L;;;;;N;;;;;
+14531;ANATOLIAN HIEROGLYPH A270;Lo;0;L;;;;;N;;;;;
+14532;ANATOLIAN HIEROGLYPH A271;Lo;0;L;;;;;N;;;;;
+14533;ANATOLIAN HIEROGLYPH A272;Lo;0;L;;;;;N;;;;;
+14534;ANATOLIAN HIEROGLYPH A273;Lo;0;L;;;;;N;;;;;
+14535;ANATOLIAN HIEROGLYPH A274;Lo;0;L;;;;;N;;;;;
+14536;ANATOLIAN HIEROGLYPH A275;Lo;0;L;;;;;N;;;;;
+14537;ANATOLIAN HIEROGLYPH A276;Lo;0;L;;;;;N;;;;;
+14538;ANATOLIAN HIEROGLYPH A277;Lo;0;L;;;;;N;;;;;
+14539;ANATOLIAN HIEROGLYPH A278;Lo;0;L;;;;;N;;;;;
+1453A;ANATOLIAN HIEROGLYPH A279;Lo;0;L;;;;;N;;;;;
+1453B;ANATOLIAN HIEROGLYPH A280;Lo;0;L;;;;;N;;;;;
+1453C;ANATOLIAN HIEROGLYPH A281;Lo;0;L;;;;;N;;;;;
+1453D;ANATOLIAN HIEROGLYPH A282;Lo;0;L;;;;;N;;;;;
+1453E;ANATOLIAN HIEROGLYPH A283;Lo;0;L;;;;;N;;;;;
+1453F;ANATOLIAN HIEROGLYPH A284;Lo;0;L;;;;;N;;;;;
+14540;ANATOLIAN HIEROGLYPH A285;Lo;0;L;;;;;N;;;;;
+14541;ANATOLIAN HIEROGLYPH A286;Lo;0;L;;;;;N;;;;;
+14542;ANATOLIAN HIEROGLYPH A287;Lo;0;L;;;;;N;;;;;
+14543;ANATOLIAN HIEROGLYPH A288;Lo;0;L;;;;;N;;;;;
+14544;ANATOLIAN HIEROGLYPH A289;Lo;0;L;;;;;N;;;;;
+14545;ANATOLIAN HIEROGLYPH A289A;Lo;0;L;;;;;N;;;;;
+14546;ANATOLIAN HIEROGLYPH A290;Lo;0;L;;;;;N;;;;;
+14547;ANATOLIAN HIEROGLYPH A291;Lo;0;L;;;;;N;;;;;
+14548;ANATOLIAN HIEROGLYPH A292;Lo;0;L;;;;;N;;;;;
+14549;ANATOLIAN HIEROGLYPH A293;Lo;0;L;;;;;N;;;;;
+1454A;ANATOLIAN HIEROGLYPH A294;Lo;0;L;;;;;N;;;;;
+1454B;ANATOLIAN HIEROGLYPH A294A;Lo;0;L;;;;;N;;;;;
+1454C;ANATOLIAN HIEROGLYPH A295;Lo;0;L;;;;;N;;;;;
+1454D;ANATOLIAN HIEROGLYPH A296;Lo;0;L;;;;;N;;;;;
+1454E;ANATOLIAN HIEROGLYPH A297;Lo;0;L;;;;;N;;;;;
+1454F;ANATOLIAN HIEROGLYPH A298;Lo;0;L;;;;;N;;;;;
+14550;ANATOLIAN HIEROGLYPH A299;Lo;0;L;;;;;N;;;;;
+14551;ANATOLIAN HIEROGLYPH A299A;Lo;0;L;;;;;N;;;;;
+14552;ANATOLIAN HIEROGLYPH A300;Lo;0;L;;;;;N;;;;;
+14553;ANATOLIAN HIEROGLYPH A301;Lo;0;L;;;;;N;;;;;
+14554;ANATOLIAN HIEROGLYPH A302;Lo;0;L;;;;;N;;;;;
+14555;ANATOLIAN HIEROGLYPH A303;Lo;0;L;;;;;N;;;;;
+14556;ANATOLIAN HIEROGLYPH A304;Lo;0;L;;;;;N;;;;;
+14557;ANATOLIAN HIEROGLYPH A305;Lo;0;L;;;;;N;;;;;
+14558;ANATOLIAN HIEROGLYPH A306;Lo;0;L;;;;;N;;;;;
+14559;ANATOLIAN HIEROGLYPH A307;Lo;0;L;;;;;N;;;;;
+1455A;ANATOLIAN HIEROGLYPH A308;Lo;0;L;;;;;N;;;;;
+1455B;ANATOLIAN HIEROGLYPH A309;Lo;0;L;;;;;N;;;;;
+1455C;ANATOLIAN HIEROGLYPH A309A;Lo;0;L;;;;;N;;;;;
+1455D;ANATOLIAN HIEROGLYPH A310;Lo;0;L;;;;;N;;;;;
+1455E;ANATOLIAN HIEROGLYPH A311;Lo;0;L;;;;;N;;;;;
+1455F;ANATOLIAN HIEROGLYPH A312;Lo;0;L;;;;;N;;;;;
+14560;ANATOLIAN HIEROGLYPH A313;Lo;0;L;;;;;N;;;;;
+14561;ANATOLIAN HIEROGLYPH A314;Lo;0;L;;;;;N;;;;;
+14562;ANATOLIAN HIEROGLYPH A315;Lo;0;L;;;;;N;;;;;
+14563;ANATOLIAN HIEROGLYPH A316;Lo;0;L;;;;;N;;;;;
+14564;ANATOLIAN HIEROGLYPH A317;Lo;0;L;;;;;N;;;;;
+14565;ANATOLIAN HIEROGLYPH A318;Lo;0;L;;;;;N;;;;;
+14566;ANATOLIAN HIEROGLYPH A319;Lo;0;L;;;;;N;;;;;
+14567;ANATOLIAN HIEROGLYPH A320;Lo;0;L;;;;;N;;;;;
+14568;ANATOLIAN HIEROGLYPH A321;Lo;0;L;;;;;N;;;;;
+14569;ANATOLIAN HIEROGLYPH A322;Lo;0;L;;;;;N;;;;;
+1456A;ANATOLIAN HIEROGLYPH A323;Lo;0;L;;;;;N;;;;;
+1456B;ANATOLIAN HIEROGLYPH A324;Lo;0;L;;;;;N;;;;;
+1456C;ANATOLIAN HIEROGLYPH A325;Lo;0;L;;;;;N;;;;;
+1456D;ANATOLIAN HIEROGLYPH A326;Lo;0;L;;;;;N;;;;;
+1456E;ANATOLIAN HIEROGLYPH A327;Lo;0;L;;;;;N;;;;;
+1456F;ANATOLIAN HIEROGLYPH A328;Lo;0;L;;;;;N;;;;;
+14570;ANATOLIAN HIEROGLYPH A329;Lo;0;L;;;;;N;;;;;
+14571;ANATOLIAN HIEROGLYPH A329A;Lo;0;L;;;;;N;;;;;
+14572;ANATOLIAN HIEROGLYPH A330;Lo;0;L;;;;;N;;;;;
+14573;ANATOLIAN HIEROGLYPH A331;Lo;0;L;;;;;N;;;;;
+14574;ANATOLIAN HIEROGLYPH A332A;Lo;0;L;;;;;N;;;;;
+14575;ANATOLIAN HIEROGLYPH A332B;Lo;0;L;;;;;N;;;;;
+14576;ANATOLIAN HIEROGLYPH A332C;Lo;0;L;;;;;N;;;;;
+14577;ANATOLIAN HIEROGLYPH A333;Lo;0;L;;;;;N;;;;;
+14578;ANATOLIAN HIEROGLYPH A334;Lo;0;L;;;;;N;;;;;
+14579;ANATOLIAN HIEROGLYPH A335;Lo;0;L;;;;;N;;;;;
+1457A;ANATOLIAN HIEROGLYPH A336;Lo;0;L;;;;;N;;;;;
+1457B;ANATOLIAN HIEROGLYPH A336A;Lo;0;L;;;;;N;;;;;
+1457C;ANATOLIAN HIEROGLYPH A336B;Lo;0;L;;;;;N;;;;;
+1457D;ANATOLIAN HIEROGLYPH A336C;Lo;0;L;;;;;N;;;;;
+1457E;ANATOLIAN HIEROGLYPH A337;Lo;0;L;;;;;N;;;;;
+1457F;ANATOLIAN HIEROGLYPH A338;Lo;0;L;;;;;N;;;;;
+14580;ANATOLIAN HIEROGLYPH A339;Lo;0;L;;;;;N;;;;;
+14581;ANATOLIAN HIEROGLYPH A340;Lo;0;L;;;;;N;;;;;
+14582;ANATOLIAN HIEROGLYPH A341;Lo;0;L;;;;;N;;;;;
+14583;ANATOLIAN HIEROGLYPH A342;Lo;0;L;;;;;N;;;;;
+14584;ANATOLIAN HIEROGLYPH A343;Lo;0;L;;;;;N;;;;;
+14585;ANATOLIAN HIEROGLYPH A344;Lo;0;L;;;;;N;;;;;
+14586;ANATOLIAN HIEROGLYPH A345;Lo;0;L;;;;;N;;;;;
+14587;ANATOLIAN HIEROGLYPH A346;Lo;0;L;;;;;N;;;;;
+14588;ANATOLIAN HIEROGLYPH A347;Lo;0;L;;;;;N;;;;;
+14589;ANATOLIAN HIEROGLYPH A348;Lo;0;L;;;;;N;;;;;
+1458A;ANATOLIAN HIEROGLYPH A349;Lo;0;L;;;;;N;;;;;
+1458B;ANATOLIAN HIEROGLYPH A350;Lo;0;L;;;;;N;;;;;
+1458C;ANATOLIAN HIEROGLYPH A351;Lo;0;L;;;;;N;;;;;
+1458D;ANATOLIAN HIEROGLYPH A352;Lo;0;L;;;;;N;;;;;
+1458E;ANATOLIAN HIEROGLYPH A353;Lo;0;L;;;;;N;;;;;
+1458F;ANATOLIAN HIEROGLYPH A354;Lo;0;L;;;;;N;;;;;
+14590;ANATOLIAN HIEROGLYPH A355;Lo;0;L;;;;;N;;;;;
+14591;ANATOLIAN HIEROGLYPH A356;Lo;0;L;;;;;N;;;;;
+14592;ANATOLIAN HIEROGLYPH A357;Lo;0;L;;;;;N;;;;;
+14593;ANATOLIAN HIEROGLYPH A358;Lo;0;L;;;;;N;;;;;
+14594;ANATOLIAN HIEROGLYPH A359;Lo;0;L;;;;;N;;;;;
+14595;ANATOLIAN HIEROGLYPH A359A;Lo;0;L;;;;;N;;;;;
+14596;ANATOLIAN HIEROGLYPH A360;Lo;0;L;;;;;N;;;;;
+14597;ANATOLIAN HIEROGLYPH A361;Lo;0;L;;;;;N;;;;;
+14598;ANATOLIAN HIEROGLYPH A362;Lo;0;L;;;;;N;;;;;
+14599;ANATOLIAN HIEROGLYPH A363;Lo;0;L;;;;;N;;;;;
+1459A;ANATOLIAN HIEROGLYPH A364;Lo;0;L;;;;;N;;;;;
+1459B;ANATOLIAN HIEROGLYPH A364A;Lo;0;L;;;;;N;;;;;
+1459C;ANATOLIAN HIEROGLYPH A365;Lo;0;L;;;;;N;;;;;
+1459D;ANATOLIAN HIEROGLYPH A366;Lo;0;L;;;;;N;;;;;
+1459E;ANATOLIAN HIEROGLYPH A367;Lo;0;L;;;;;N;;;;;
+1459F;ANATOLIAN HIEROGLYPH A368;Lo;0;L;;;;;N;;;;;
+145A0;ANATOLIAN HIEROGLYPH A368A;Lo;0;L;;;;;N;;;;;
+145A1;ANATOLIAN HIEROGLYPH A369;Lo;0;L;;;;;N;;;;;
+145A2;ANATOLIAN HIEROGLYPH A370;Lo;0;L;;;;;N;;;;;
+145A3;ANATOLIAN HIEROGLYPH A371;Lo;0;L;;;;;N;;;;;
+145A4;ANATOLIAN HIEROGLYPH A371A;Lo;0;L;;;;;N;;;;;
+145A5;ANATOLIAN HIEROGLYPH A372;Lo;0;L;;;;;N;;;;;
+145A6;ANATOLIAN HIEROGLYPH A373;Lo;0;L;;;;;N;;;;;
+145A7;ANATOLIAN HIEROGLYPH A374;Lo;0;L;;;;;N;;;;;
+145A8;ANATOLIAN HIEROGLYPH A375;Lo;0;L;;;;;N;;;;;
+145A9;ANATOLIAN HIEROGLYPH A376;Lo;0;L;;;;;N;;;;;
+145AA;ANATOLIAN HIEROGLYPH A377;Lo;0;L;;;;;N;;;;;
+145AB;ANATOLIAN HIEROGLYPH A378;Lo;0;L;;;;;N;;;;;
+145AC;ANATOLIAN HIEROGLYPH A379;Lo;0;L;;;;;N;;;;;
+145AD;ANATOLIAN HIEROGLYPH A380;Lo;0;L;;;;;N;;;;;
+145AE;ANATOLIAN HIEROGLYPH A381;Lo;0;L;;;;;N;;;;;
+145AF;ANATOLIAN HIEROGLYPH A381A;Lo;0;L;;;;;N;;;;;
+145B0;ANATOLIAN HIEROGLYPH A382;Lo;0;L;;;;;N;;;;;
+145B1;ANATOLIAN HIEROGLYPH A383 RA OR RI;Lo;0;L;;;;;N;;;;;
+145B2;ANATOLIAN HIEROGLYPH A383A;Lo;0;L;;;;;N;;;;;
+145B3;ANATOLIAN HIEROGLYPH A384;Lo;0;L;;;;;N;;;;;
+145B4;ANATOLIAN HIEROGLYPH A385;Lo;0;L;;;;;N;;;;;
+145B5;ANATOLIAN HIEROGLYPH A386;Lo;0;L;;;;;N;;;;;
+145B6;ANATOLIAN HIEROGLYPH A386A;Lo;0;L;;;;;N;;;;;
+145B7;ANATOLIAN HIEROGLYPH A387;Lo;0;L;;;;;N;;;;;
+145B8;ANATOLIAN HIEROGLYPH A388;Lo;0;L;;;;;N;;;;;
+145B9;ANATOLIAN HIEROGLYPH A389;Lo;0;L;;;;;N;;;;;
+145BA;ANATOLIAN HIEROGLYPH A390;Lo;0;L;;;;;N;;;;;
+145BB;ANATOLIAN HIEROGLYPH A391;Lo;0;L;;;;;N;;;;;
+145BC;ANATOLIAN HIEROGLYPH A392;Lo;0;L;;;;;N;;;;;
+145BD;ANATOLIAN HIEROGLYPH A393 EIGHT;Lo;0;L;;;;;N;;;;;
+145BE;ANATOLIAN HIEROGLYPH A394;Lo;0;L;;;;;N;;;;;
+145BF;ANATOLIAN HIEROGLYPH A395;Lo;0;L;;;;;N;;;;;
+145C0;ANATOLIAN HIEROGLYPH A396;Lo;0;L;;;;;N;;;;;
+145C1;ANATOLIAN HIEROGLYPH A397;Lo;0;L;;;;;N;;;;;
+145C2;ANATOLIAN HIEROGLYPH A398;Lo;0;L;;;;;N;;;;;
+145C3;ANATOLIAN HIEROGLYPH A399;Lo;0;L;;;;;N;;;;;
+145C4;ANATOLIAN HIEROGLYPH A400;Lo;0;L;;;;;N;;;;;
+145C5;ANATOLIAN HIEROGLYPH A401;Lo;0;L;;;;;N;;;;;
+145C6;ANATOLIAN HIEROGLYPH A402;Lo;0;L;;;;;N;;;;;
+145C7;ANATOLIAN HIEROGLYPH A403;Lo;0;L;;;;;N;;;;;
+145C8;ANATOLIAN HIEROGLYPH A404;Lo;0;L;;;;;N;;;;;
+145C9;ANATOLIAN HIEROGLYPH A405;Lo;0;L;;;;;N;;;;;
+145CA;ANATOLIAN HIEROGLYPH A406;Lo;0;L;;;;;N;;;;;
+145CB;ANATOLIAN HIEROGLYPH A407;Lo;0;L;;;;;N;;;;;
+145CC;ANATOLIAN HIEROGLYPH A408;Lo;0;L;;;;;N;;;;;
+145CD;ANATOLIAN HIEROGLYPH A409;Lo;0;L;;;;;N;;;;;
+145CE;ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK;Lo;0;L;;;;;N;;;;;
+145CF;ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK;Lo;0;L;;;;;N;;;;;
+145D0;ANATOLIAN HIEROGLYPH A411;Lo;0;L;;;;;N;;;;;
+145D1;ANATOLIAN HIEROGLYPH A412;Lo;0;L;;;;;N;;;;;
+145D2;ANATOLIAN HIEROGLYPH A413;Lo;0;L;;;;;N;;;;;
+145D3;ANATOLIAN HIEROGLYPH A414;Lo;0;L;;;;;N;;;;;
+145D4;ANATOLIAN HIEROGLYPH A415;Lo;0;L;;;;;N;;;;;
+145D5;ANATOLIAN HIEROGLYPH A416;Lo;0;L;;;;;N;;;;;
+145D6;ANATOLIAN HIEROGLYPH A417;Lo;0;L;;;;;N;;;;;
+145D7;ANATOLIAN HIEROGLYPH A418;Lo;0;L;;;;;N;;;;;
+145D8;ANATOLIAN HIEROGLYPH A419;Lo;0;L;;;;;N;;;;;
+145D9;ANATOLIAN HIEROGLYPH A420;Lo;0;L;;;;;N;;;;;
+145DA;ANATOLIAN HIEROGLYPH A421;Lo;0;L;;;;;N;;;;;
+145DB;ANATOLIAN HIEROGLYPH A422;Lo;0;L;;;;;N;;;;;
+145DC;ANATOLIAN HIEROGLYPH A423;Lo;0;L;;;;;N;;;;;
+145DD;ANATOLIAN HIEROGLYPH A424;Lo;0;L;;;;;N;;;;;
+145DE;ANATOLIAN HIEROGLYPH A425;Lo;0;L;;;;;N;;;;;
+145DF;ANATOLIAN HIEROGLYPH A426;Lo;0;L;;;;;N;;;;;
+145E0;ANATOLIAN HIEROGLYPH A427;Lo;0;L;;;;;N;;;;;
+145E1;ANATOLIAN HIEROGLYPH A428;Lo;0;L;;;;;N;;;;;
+145E2;ANATOLIAN HIEROGLYPH A429;Lo;0;L;;;;;N;;;;;
+145E3;ANATOLIAN HIEROGLYPH A430;Lo;0;L;;;;;N;;;;;
+145E4;ANATOLIAN HIEROGLYPH A431;Lo;0;L;;;;;N;;;;;
+145E5;ANATOLIAN HIEROGLYPH A432;Lo;0;L;;;;;N;;;;;
+145E6;ANATOLIAN HIEROGLYPH A433;Lo;0;L;;;;;N;;;;;
+145E7;ANATOLIAN HIEROGLYPH A434;Lo;0;L;;;;;N;;;;;
+145E8;ANATOLIAN HIEROGLYPH A435;Lo;0;L;;;;;N;;;;;
+145E9;ANATOLIAN HIEROGLYPH A436;Lo;0;L;;;;;N;;;;;
+145EA;ANATOLIAN HIEROGLYPH A437;Lo;0;L;;;;;N;;;;;
+145EB;ANATOLIAN HIEROGLYPH A438;Lo;0;L;;;;;N;;;;;
+145EC;ANATOLIAN HIEROGLYPH A439;Lo;0;L;;;;;N;;;;;
+145ED;ANATOLIAN HIEROGLYPH A440;Lo;0;L;;;;;N;;;;;
+145EE;ANATOLIAN HIEROGLYPH A441;Lo;0;L;;;;;N;;;;;
+145EF;ANATOLIAN HIEROGLYPH A442;Lo;0;L;;;;;N;;;;;
+145F0;ANATOLIAN HIEROGLYPH A443;Lo;0;L;;;;;N;;;;;
+145F1;ANATOLIAN HIEROGLYPH A444;Lo;0;L;;;;;N;;;;;
+145F2;ANATOLIAN HIEROGLYPH A445;Lo;0;L;;;;;N;;;;;
+145F3;ANATOLIAN HIEROGLYPH A446;Lo;0;L;;;;;N;;;;;
+145F4;ANATOLIAN HIEROGLYPH A447;Lo;0;L;;;;;N;;;;;
+145F5;ANATOLIAN HIEROGLYPH A448;Lo;0;L;;;;;N;;;;;
+145F6;ANATOLIAN HIEROGLYPH A449;Lo;0;L;;;;;N;;;;;
+145F7;ANATOLIAN HIEROGLYPH A450;Lo;0;L;;;;;N;;;;;
+145F8;ANATOLIAN HIEROGLYPH A450A;Lo;0;L;;;;;N;;;;;
+145F9;ANATOLIAN HIEROGLYPH A451;Lo;0;L;;;;;N;;;;;
+145FA;ANATOLIAN HIEROGLYPH A452;Lo;0;L;;;;;N;;;;;
+145FB;ANATOLIAN HIEROGLYPH A453;Lo;0;L;;;;;N;;;;;
+145FC;ANATOLIAN HIEROGLYPH A454;Lo;0;L;;;;;N;;;;;
+145FD;ANATOLIAN HIEROGLYPH A455;Lo;0;L;;;;;N;;;;;
+145FE;ANATOLIAN HIEROGLYPH A456;Lo;0;L;;;;;N;;;;;
+145FF;ANATOLIAN HIEROGLYPH A457;Lo;0;L;;;;;N;;;;;
+14600;ANATOLIAN HIEROGLYPH A457A;Lo;0;L;;;;;N;;;;;
+14601;ANATOLIAN HIEROGLYPH A458;Lo;0;L;;;;;N;;;;;
+14602;ANATOLIAN HIEROGLYPH A459;Lo;0;L;;;;;N;;;;;
+14603;ANATOLIAN HIEROGLYPH A460;Lo;0;L;;;;;N;;;;;
+14604;ANATOLIAN HIEROGLYPH A461;Lo;0;L;;;;;N;;;;;
+14605;ANATOLIAN HIEROGLYPH A462;Lo;0;L;;;;;N;;;;;
+14606;ANATOLIAN HIEROGLYPH A463;Lo;0;L;;;;;N;;;;;
+14607;ANATOLIAN HIEROGLYPH A464;Lo;0;L;;;;;N;;;;;
+14608;ANATOLIAN HIEROGLYPH A465;Lo;0;L;;;;;N;;;;;
+14609;ANATOLIAN HIEROGLYPH A466;Lo;0;L;;;;;N;;;;;
+1460A;ANATOLIAN HIEROGLYPH A467;Lo;0;L;;;;;N;;;;;
+1460B;ANATOLIAN HIEROGLYPH A468;Lo;0;L;;;;;N;;;;;
+1460C;ANATOLIAN HIEROGLYPH A469;Lo;0;L;;;;;N;;;;;
+1460D;ANATOLIAN HIEROGLYPH A470;Lo;0;L;;;;;N;;;;;
+1460E;ANATOLIAN HIEROGLYPH A471;Lo;0;L;;;;;N;;;;;
+1460F;ANATOLIAN HIEROGLYPH A472;Lo;0;L;;;;;N;;;;;
+14610;ANATOLIAN HIEROGLYPH A473;Lo;0;L;;;;;N;;;;;
+14611;ANATOLIAN HIEROGLYPH A474;Lo;0;L;;;;;N;;;;;
+14612;ANATOLIAN HIEROGLYPH A475;Lo;0;L;;;;;N;;;;;
+14613;ANATOLIAN HIEROGLYPH A476;Lo;0;L;;;;;N;;;;;
+14614;ANATOLIAN HIEROGLYPH A477;Lo;0;L;;;;;N;;;;;
+14615;ANATOLIAN HIEROGLYPH A478;Lo;0;L;;;;;N;;;;;
+14616;ANATOLIAN HIEROGLYPH A479;Lo;0;L;;;;;N;;;;;
+14617;ANATOLIAN HIEROGLYPH A480;Lo;0;L;;;;;N;;;;;
+14618;ANATOLIAN HIEROGLYPH A481;Lo;0;L;;;;;N;;;;;
+14619;ANATOLIAN HIEROGLYPH A482;Lo;0;L;;;;;N;;;;;
+1461A;ANATOLIAN HIEROGLYPH A483;Lo;0;L;;;;;N;;;;;
+1461B;ANATOLIAN HIEROGLYPH A484;Lo;0;L;;;;;N;;;;;
+1461C;ANATOLIAN HIEROGLYPH A485;Lo;0;L;;;;;N;;;;;
+1461D;ANATOLIAN HIEROGLYPH A486;Lo;0;L;;;;;N;;;;;
+1461E;ANATOLIAN HIEROGLYPH A487;Lo;0;L;;;;;N;;;;;
+1461F;ANATOLIAN HIEROGLYPH A488;Lo;0;L;;;;;N;;;;;
+14620;ANATOLIAN HIEROGLYPH A489;Lo;0;L;;;;;N;;;;;
+14621;ANATOLIAN HIEROGLYPH A490;Lo;0;L;;;;;N;;;;;
+14622;ANATOLIAN HIEROGLYPH A491;Lo;0;L;;;;;N;;;;;
+14623;ANATOLIAN HIEROGLYPH A492;Lo;0;L;;;;;N;;;;;
+14624;ANATOLIAN HIEROGLYPH A493;Lo;0;L;;;;;N;;;;;
+14625;ANATOLIAN HIEROGLYPH A494;Lo;0;L;;;;;N;;;;;
+14626;ANATOLIAN HIEROGLYPH A495;Lo;0;L;;;;;N;;;;;
+14627;ANATOLIAN HIEROGLYPH A496;Lo;0;L;;;;;N;;;;;
+14628;ANATOLIAN HIEROGLYPH A497;Lo;0;L;;;;;N;;;;;
+14629;ANATOLIAN HIEROGLYPH A501;Lo;0;L;;;;;N;;;;;
+1462A;ANATOLIAN HIEROGLYPH A502;Lo;0;L;;;;;N;;;;;
+1462B;ANATOLIAN HIEROGLYPH A503;Lo;0;L;;;;;N;;;;;
+1462C;ANATOLIAN HIEROGLYPH A504;Lo;0;L;;;;;N;;;;;
+1462D;ANATOLIAN HIEROGLYPH A505;Lo;0;L;;;;;N;;;;;
+1462E;ANATOLIAN HIEROGLYPH A506;Lo;0;L;;;;;N;;;;;
+1462F;ANATOLIAN HIEROGLYPH A507;Lo;0;L;;;;;N;;;;;
+14630;ANATOLIAN HIEROGLYPH A508;Lo;0;L;;;;;N;;;;;
+14631;ANATOLIAN HIEROGLYPH A509;Lo;0;L;;;;;N;;;;;
+14632;ANATOLIAN HIEROGLYPH A510;Lo;0;L;;;;;N;;;;;
+14633;ANATOLIAN HIEROGLYPH A511;Lo;0;L;;;;;N;;;;;
+14634;ANATOLIAN HIEROGLYPH A512;Lo;0;L;;;;;N;;;;;
+14635;ANATOLIAN HIEROGLYPH A513;Lo;0;L;;;;;N;;;;;
+14636;ANATOLIAN HIEROGLYPH A514;Lo;0;L;;;;;N;;;;;
+14637;ANATOLIAN HIEROGLYPH A515;Lo;0;L;;;;;N;;;;;
+14638;ANATOLIAN HIEROGLYPH A516;Lo;0;L;;;;;N;;;;;
+14639;ANATOLIAN HIEROGLYPH A517;Lo;0;L;;;;;N;;;;;
+1463A;ANATOLIAN HIEROGLYPH A518;Lo;0;L;;;;;N;;;;;
+1463B;ANATOLIAN HIEROGLYPH A519;Lo;0;L;;;;;N;;;;;
+1463C;ANATOLIAN HIEROGLYPH A520;Lo;0;L;;;;;N;;;;;
+1463D;ANATOLIAN HIEROGLYPH A521;Lo;0;L;;;;;N;;;;;
+1463E;ANATOLIAN HIEROGLYPH A522;Lo;0;L;;;;;N;;;;;
+1463F;ANATOLIAN HIEROGLYPH A523;Lo;0;L;;;;;N;;;;;
+14640;ANATOLIAN HIEROGLYPH A524;Lo;0;L;;;;;N;;;;;
+14641;ANATOLIAN HIEROGLYPH A525;Lo;0;L;;;;;N;;;;;
+14642;ANATOLIAN HIEROGLYPH A526;Lo;0;L;;;;;N;;;;;
+14643;ANATOLIAN HIEROGLYPH A527;Lo;0;L;;;;;N;;;;;
+14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;;
+14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;;
+14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;;
+16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;;
+16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;;
+16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;
+16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;;
+16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;;
+16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;;
+16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;;
+16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;;
+16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;;
+16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;
+1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;;
+1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;;
+1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;;
+1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;;
+1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;;
+1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;;
+16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;;
+16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;;
+16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;;
+16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;;
+16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;;
+16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;;
+16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;;
+16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;;
+16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;;
+16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;;
+1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;;
+1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;;
+1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;;
+1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;;
+1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;;
+1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;;
+16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;;
+16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;;
+16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;;
+16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;;
+16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;;
+16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;;
+16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;;
+16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;;
+16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;;
+16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;;
+1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;;
+1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;;
+1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;;
+1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;;
+1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;;
+1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;;
+16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;;
+16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;;
+16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;;
+16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;;
+16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;;
+16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;;
+16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;;
+16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;;
+16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;;
+16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;;
+1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;;
+1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;;
+1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;;
+1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;;
+1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;;
+1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;;
+16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;;
+16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;;
+16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;;
+16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;;
+16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;;
+16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;;
+16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;;
+16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;;
+16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;;
+16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;;
+1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;;
+1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;;
+1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;;
+1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;;
+1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;;
+1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;;
+16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;;
+16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;;
+16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;;
+16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;;
+16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;;
+16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;;
+16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;;
+16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;;
+16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;;
+16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;;
+1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;;
+1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;;
+1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;;
+1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;;
+1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;;
+1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;;
+16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;;
+16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;;
+16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;;
+16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;;
+16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;;
+16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;;
+16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;;
+16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;;
+16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;;
+16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;;
+1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;;
+1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;;
+1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;;
+1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;;
+1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;;
+1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;;
+16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;;
+16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;;
+16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;;
+16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;;
+16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;;
+16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;;
+16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;;
+16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;;
+16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;;
+16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;;
+1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;;
+1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;;
+1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;;
+1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;;
+1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;;
+1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;;
+16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;;
+16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;;
+16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;;
+16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;;
+16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;;
+16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;;
+16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;;
+16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;;
+16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;;
+16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;;
+1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;;
+1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;;
+1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;;
+1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;;
+1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;;
+1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;;
+16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;;
+16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;;
+16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;;
+16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;;
+16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;;
+16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;;
+16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;;
+16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;;
+16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;;
+16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;;
+1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;;
+1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;;
+1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;;
+1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;;
+1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;;
+1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;;
+168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;;
+168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;;
+168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;;
+168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;;
+168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;;
+168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;;
+168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;;
+168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;;
+168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;;
+168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;;
+168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;;
+168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;;
+168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;;
+168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;;
+168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;;
+168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;;
+168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;;
+168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;;
+168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;;
+168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;;
+168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;;
+168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;;
+168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;;
+168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;;
+168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;;
+168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;;
+168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;;
+168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;;
+168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;;
+168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;;
+168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;;
+168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;;
+168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;;
+168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;;
+168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;;
+168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;;
+168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;;
+168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;;
+168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;;
+168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;;
+168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;;
+168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;;
+168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;;
+168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;;
+168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;;
+168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;;
+168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;;
+168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;;
+168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;;
+168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;;
+168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;;
+168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;;
+168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;;
+168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;;
+168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;;
+168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;;
+168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;;
+168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;;
+168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;;
+168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;;
+168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;;
+168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;;
+168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;;
+168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;;
+168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;;
+168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;;
+168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;;
+168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;;
+168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;;
+168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;;
+168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;;
+168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;;
+168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;;
+168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;;
+168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;;
+168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;;
+168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;;
+168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;;
+168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;;
+168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;;
+168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;;
+168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;;
+168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;;
+168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;;
+168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;;
+168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;;
+168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;;
+168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;;
+168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;;
+168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;;
+168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;;
+168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;;
+168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;;
+168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;;
+168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;;
+168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;;
+16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;;
+16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;;
+16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;;
+16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;;
+16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;;
+16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;;
+16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;;
+16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;;
+16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;;
+16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;;
+1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;;
+1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;;
+1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;;
+1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;;
+1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;;
+1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;;
+16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;;
+16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;;
+16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;;
+16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;;
+16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;;
+16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;;
+16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;;
+16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;;
+16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;;
+16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;;
+1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;;
+1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;;
+1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;;
+1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;;
+1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;;
+1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;;
+16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;;
+16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;;
+16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;;
+16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;;
+16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;;
+16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;;
+16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;;
+16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;;
+16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;;
+16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;;
+1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;;
+1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;;
+1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;;
+1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;;
+1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;;
+1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;;
+16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;;
+16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;;
+16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;;
+16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;;
+16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;;
+16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;;
+16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;;
+16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;;
+16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;;
+16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;;
+1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;;
+1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;;
+1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;;
+1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;;
+1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;;
+1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;;
+16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;;
+16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;;
+16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;;
+16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;;
+16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;;
+16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;;
+16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;;
+16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;;
+16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;;
+16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;;
+1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;;
+1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;;
+1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;;
+1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;;
+1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;;
+1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;;
+16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;;
+16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;;
+16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;;
+16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;;
+16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;;
+16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;;
+16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;;
+16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;;
+16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;;
+16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;;
+1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;;
+1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;;
+1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;;
+1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;;
+1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;;
+1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;;
+16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;;
+16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;;
+16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;;
+16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;;
+16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;;
+16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;;
+16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;;
+16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;;
+16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;;
+16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;;
+1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;;
+1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;;
+1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;;
+1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;;
+1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;;
+1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;;
+16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;;
+16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;;
+16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;;
+16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;;
+16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;;
+16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;;
+16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;;
+16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;;
+16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;;
+16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;;
+1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;;
+1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;;
+1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;;
+1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;;
+1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;;
+1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;;
+16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;;
+16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;;
+16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;;
+16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;;
+16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;;
+16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;;
+16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;;
+16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;;
+16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;;
+16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;;
+1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;;
+1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;;
+1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;;
+1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;;
+1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;;
+1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;;
+16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;;
+16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;;
+16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;;
+16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;;
+16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;;
+16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;;
+16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;;
+16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;;
+16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;;
+16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;;
+1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;;
+1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;;
+1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;;
+1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;;
+1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;;
+1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;;
+169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;;
+169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;;
+169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;;
+169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;;
+169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;;
+169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;;
+169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;;
+169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;;
+169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;;
+169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;;
+169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;;
+169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;;
+169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;;
+169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;;
+169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;;
+169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;;
+169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;;
+169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;;
+169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;;
+169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;;
+169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;;
+169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;;
+169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;;
+169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;;
+169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;;
+169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;;
+169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;;
+169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;;
+169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;;
+169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;;
+169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;;
+169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;;
+169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;;
+169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;;
+169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;;
+169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;;
+169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;;
+169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;;
+169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;;
+169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;;
+169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;;
+169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;;
+169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;;
+169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;;
+169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;;
+169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;;
+169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;;
+169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;;
+169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;;
+169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;;
+169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;;
+169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;;
+169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;;
+169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;;
+169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;;
+169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;;
+169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;;
+169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;;
+169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;;
+169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;;
+169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;;
+169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;;
+169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;;
+169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;;
+169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;;
+169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;;
+169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;;
+169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;;
+169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;;
+169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;;
+169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;;
+169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;;
+169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;;
+169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;;
+169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;;
+169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;;
+169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;;
+169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;;
+169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;;
+169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;;
+169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;;
+169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;;
+169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;;
+169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;;
+169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;;
+169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;;
+169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;;
+169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;;
+169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;;
+169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;;
+169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;;
+169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;;
+169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;;
+169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;;
+169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;;
+169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;;
+16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;;
+16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;;
+16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;;
+16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;;
+16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;;
+16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;;
+16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;;
+16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;;
+16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;;
+16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;;
+16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;;
+16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;;
+16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;;
+16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;;
+16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;;
+16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;;
+16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;;
+16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;;
+16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;;
+16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;;
+16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;;
+16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;;
+16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;;
+16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;;
+16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;;
+16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;;
+16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;;
+16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;;
+16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;;
+16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;;
+16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;;
+16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;;
+16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;;
+16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;;
+16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;;
+16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;;
+16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;;
+16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;;
+16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;;
+16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;;
+16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;;
+16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;;
+16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;;
+16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;;
+16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;;
+16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;;
+16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;;
+16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;;
+16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;;
+16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;;
+16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;;
+16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;;
+16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;;
+16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;;
+16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;;
+16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;;
+16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;;
+16A40;MRO LETTER TA;Lo;0;L;;;;;N;;;;;
+16A41;MRO LETTER NGI;Lo;0;L;;;;;N;;;;;
+16A42;MRO LETTER YO;Lo;0;L;;;;;N;;;;;
+16A43;MRO LETTER MIM;Lo;0;L;;;;;N;;;;;
+16A44;MRO LETTER BA;Lo;0;L;;;;;N;;;;;
+16A45;MRO LETTER DA;Lo;0;L;;;;;N;;;;;
+16A46;MRO LETTER A;Lo;0;L;;;;;N;;;;;
+16A47;MRO LETTER PHI;Lo;0;L;;;;;N;;;;;
+16A48;MRO LETTER KHAI;Lo;0;L;;;;;N;;;;;
+16A49;MRO LETTER HAO;Lo;0;L;;;;;N;;;;;
+16A4A;MRO LETTER DAI;Lo;0;L;;;;;N;;;;;
+16A4B;MRO LETTER CHU;Lo;0;L;;;;;N;;;;;
+16A4C;MRO LETTER KEAAE;Lo;0;L;;;;;N;;;;;
+16A4D;MRO LETTER OL;Lo;0;L;;;;;N;;;;;
+16A4E;MRO LETTER MAEM;Lo;0;L;;;;;N;;;;;
+16A4F;MRO LETTER NIN;Lo;0;L;;;;;N;;;;;
+16A50;MRO LETTER PA;Lo;0;L;;;;;N;;;;;
+16A51;MRO LETTER OO;Lo;0;L;;;;;N;;;;;
+16A52;MRO LETTER O;Lo;0;L;;;;;N;;;;;
+16A53;MRO LETTER RO;Lo;0;L;;;;;N;;;;;
+16A54;MRO LETTER SHI;Lo;0;L;;;;;N;;;;;
+16A55;MRO LETTER THEA;Lo;0;L;;;;;N;;;;;
+16A56;MRO LETTER EA;Lo;0;L;;;;;N;;;;;
+16A57;MRO LETTER WA;Lo;0;L;;;;;N;;;;;
+16A58;MRO LETTER E;Lo;0;L;;;;;N;;;;;
+16A59;MRO LETTER KO;Lo;0;L;;;;;N;;;;;
+16A5A;MRO LETTER LAN;Lo;0;L;;;;;N;;;;;
+16A5B;MRO LETTER LA;Lo;0;L;;;;;N;;;;;
+16A5C;MRO LETTER HAI;Lo;0;L;;;;;N;;;;;
+16A5D;MRO LETTER RI;Lo;0;L;;;;;N;;;;;
+16A5E;MRO LETTER TEK;Lo;0;L;;;;;N;;;;;
+16A60;MRO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+16A61;MRO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+16A62;MRO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+16A63;MRO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+16A64;MRO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+16A65;MRO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+16A66;MRO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+16A67;MRO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+16A68;MRO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+16A6E;MRO DANDA;Po;0;L;;;;;N;;;;;
+16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;;
+16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;;
+16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;;
+16AD3;BASSA VAH LETTER FA;Lo;0;L;;;;;N;;;;;
+16AD4;BASSA VAH LETTER MBE;Lo;0;L;;;;;N;;;;;
+16AD5;BASSA VAH LETTER YIE;Lo;0;L;;;;;N;;;;;
+16AD6;BASSA VAH LETTER GAH;Lo;0;L;;;;;N;;;;;
+16AD7;BASSA VAH LETTER DHII;Lo;0;L;;;;;N;;;;;
+16AD8;BASSA VAH LETTER KPAH;Lo;0;L;;;;;N;;;;;
+16AD9;BASSA VAH LETTER JO;Lo;0;L;;;;;N;;;;;
+16ADA;BASSA VAH LETTER HWAH;Lo;0;L;;;;;N;;;;;
+16ADB;BASSA VAH LETTER WA;Lo;0;L;;;;;N;;;;;
+16ADC;BASSA VAH LETTER ZO;Lo;0;L;;;;;N;;;;;
+16ADD;BASSA VAH LETTER GBU;Lo;0;L;;;;;N;;;;;
+16ADE;BASSA VAH LETTER DO;Lo;0;L;;;;;N;;;;;
+16ADF;BASSA VAH LETTER CE;Lo;0;L;;;;;N;;;;;
+16AE0;BASSA VAH LETTER UWU;Lo;0;L;;;;;N;;;;;
+16AE1;BASSA VAH LETTER TO;Lo;0;L;;;;;N;;;;;
+16AE2;BASSA VAH LETTER BA;Lo;0;L;;;;;N;;;;;
+16AE3;BASSA VAH LETTER VU;Lo;0;L;;;;;N;;;;;
+16AE4;BASSA VAH LETTER YEIN;Lo;0;L;;;;;N;;;;;
+16AE5;BASSA VAH LETTER PA;Lo;0;L;;;;;N;;;;;
+16AE6;BASSA VAH LETTER WADDA;Lo;0;L;;;;;N;;;;;
+16AE7;BASSA VAH LETTER A;Lo;0;L;;;;;N;;;;;
+16AE8;BASSA VAH LETTER O;Lo;0;L;;;;;N;;;;;
+16AE9;BASSA VAH LETTER OO;Lo;0;L;;;;;N;;;;;
+16AEA;BASSA VAH LETTER U;Lo;0;L;;;;;N;;;;;
+16AEB;BASSA VAH LETTER EE;Lo;0;L;;;;;N;;;;;
+16AEC;BASSA VAH LETTER E;Lo;0;L;;;;;N;;;;;
+16AED;BASSA VAH LETTER I;Lo;0;L;;;;;N;;;;;
+16AF0;BASSA VAH COMBINING HIGH TONE;Mn;1;NSM;;;;;N;;;;;
+16AF1;BASSA VAH COMBINING LOW TONE;Mn;1;NSM;;;;;N;;;;;
+16AF2;BASSA VAH COMBINING MID TONE;Mn;1;NSM;;;;;N;;;;;
+16AF3;BASSA VAH COMBINING LOW-MID TONE;Mn;1;NSM;;;;;N;;;;;
+16AF4;BASSA VAH COMBINING HIGH-LOW TONE;Mn;1;NSM;;;;;N;;;;;
+16AF5;BASSA VAH FULL STOP;Po;0;L;;;;;N;;;;;
+16B00;PAHAWH HMONG VOWEL KEEB;Lo;0;L;;;;;N;;;;;
+16B01;PAHAWH HMONG VOWEL KEEV;Lo;0;L;;;;;N;;;;;
+16B02;PAHAWH HMONG VOWEL KIB;Lo;0;L;;;;;N;;;;;
+16B03;PAHAWH HMONG VOWEL KIV;Lo;0;L;;;;;N;;;;;
+16B04;PAHAWH HMONG VOWEL KAUB;Lo;0;L;;;;;N;;;;;
+16B05;PAHAWH HMONG VOWEL KAUV;Lo;0;L;;;;;N;;;;;
+16B06;PAHAWH HMONG VOWEL KUB;Lo;0;L;;;;;N;;;;;
+16B07;PAHAWH HMONG VOWEL KUV;Lo;0;L;;;;;N;;;;;
+16B08;PAHAWH HMONG VOWEL KEB;Lo;0;L;;;;;N;;;;;
+16B09;PAHAWH HMONG VOWEL KEV;Lo;0;L;;;;;N;;;;;
+16B0A;PAHAWH HMONG VOWEL KAIB;Lo;0;L;;;;;N;;;;;
+16B0B;PAHAWH HMONG VOWEL KAIV;Lo;0;L;;;;;N;;;;;
+16B0C;PAHAWH HMONG VOWEL KOOB;Lo;0;L;;;;;N;;;;;
+16B0D;PAHAWH HMONG VOWEL KOOV;Lo;0;L;;;;;N;;;;;
+16B0E;PAHAWH HMONG VOWEL KAWB;Lo;0;L;;;;;N;;;;;
+16B0F;PAHAWH HMONG VOWEL KAWV;Lo;0;L;;;;;N;;;;;
+16B10;PAHAWH HMONG VOWEL KUAB;Lo;0;L;;;;;N;;;;;
+16B11;PAHAWH HMONG VOWEL KUAV;Lo;0;L;;;;;N;;;;;
+16B12;PAHAWH HMONG VOWEL KOB;Lo;0;L;;;;;N;;;;;
+16B13;PAHAWH HMONG VOWEL KOV;Lo;0;L;;;;;N;;;;;
+16B14;PAHAWH HMONG VOWEL KIAB;Lo;0;L;;;;;N;;;;;
+16B15;PAHAWH HMONG VOWEL KIAV;Lo;0;L;;;;;N;;;;;
+16B16;PAHAWH HMONG VOWEL KAB;Lo;0;L;;;;;N;;;;;
+16B17;PAHAWH HMONG VOWEL KAV;Lo;0;L;;;;;N;;;;;
+16B18;PAHAWH HMONG VOWEL KWB;Lo;0;L;;;;;N;;;;;
+16B19;PAHAWH HMONG VOWEL KWV;Lo;0;L;;;;;N;;;;;
+16B1A;PAHAWH HMONG VOWEL KAAB;Lo;0;L;;;;;N;;;;;
+16B1B;PAHAWH HMONG VOWEL KAAV;Lo;0;L;;;;;N;;;;;
+16B1C;PAHAWH HMONG CONSONANT VAU;Lo;0;L;;;;;N;;;;;
+16B1D;PAHAWH HMONG CONSONANT NTSAU;Lo;0;L;;;;;N;;;;;
+16B1E;PAHAWH HMONG CONSONANT LAU;Lo;0;L;;;;;N;;;;;
+16B1F;PAHAWH HMONG CONSONANT HAU;Lo;0;L;;;;;N;;;;;
+16B20;PAHAWH HMONG CONSONANT NLAU;Lo;0;L;;;;;N;;;;;
+16B21;PAHAWH HMONG CONSONANT RAU;Lo;0;L;;;;;N;;;;;
+16B22;PAHAWH HMONG CONSONANT NKAU;Lo;0;L;;;;;N;;;;;
+16B23;PAHAWH HMONG CONSONANT QHAU;Lo;0;L;;;;;N;;;;;
+16B24;PAHAWH HMONG CONSONANT YAU;Lo;0;L;;;;;N;;;;;
+16B25;PAHAWH HMONG CONSONANT HLAU;Lo;0;L;;;;;N;;;;;
+16B26;PAHAWH HMONG CONSONANT MAU;Lo;0;L;;;;;N;;;;;
+16B27;PAHAWH HMONG CONSONANT CHAU;Lo;0;L;;;;;N;;;;;
+16B28;PAHAWH HMONG CONSONANT NCHAU;Lo;0;L;;;;;N;;;;;
+16B29;PAHAWH HMONG CONSONANT HNAU;Lo;0;L;;;;;N;;;;;
+16B2A;PAHAWH HMONG CONSONANT PLHAU;Lo;0;L;;;;;N;;;;;
+16B2B;PAHAWH HMONG CONSONANT NTHAU;Lo;0;L;;;;;N;;;;;
+16B2C;PAHAWH HMONG CONSONANT NAU;Lo;0;L;;;;;N;;;;;
+16B2D;PAHAWH HMONG CONSONANT AU;Lo;0;L;;;;;N;;;;;
+16B2E;PAHAWH HMONG CONSONANT XAU;Lo;0;L;;;;;N;;;;;
+16B2F;PAHAWH HMONG CONSONANT CAU;Lo;0;L;;;;;N;;;;;
+16B30;PAHAWH HMONG MARK CIM TUB;Mn;230;NSM;;;;;N;;;;;
+16B31;PAHAWH HMONG MARK CIM SO;Mn;230;NSM;;;;;N;;;;;
+16B32;PAHAWH HMONG MARK CIM KES;Mn;230;NSM;;;;;N;;;;;
+16B33;PAHAWH HMONG MARK CIM KHAV;Mn;230;NSM;;;;;N;;;;;
+16B34;PAHAWH HMONG MARK CIM SUAM;Mn;230;NSM;;;;;N;;;;;
+16B35;PAHAWH HMONG MARK CIM HOM;Mn;230;NSM;;;;;N;;;;;
+16B36;PAHAWH HMONG MARK CIM TAUM;Mn;230;NSM;;;;;N;;;;;
+16B37;PAHAWH HMONG SIGN VOS THOM;Po;0;L;;;;;N;;;;;
+16B38;PAHAWH HMONG SIGN VOS TSHAB CEEB;Po;0;L;;;;;N;;;;;
+16B39;PAHAWH HMONG SIGN CIM CHEEM;Po;0;L;;;;;N;;;;;
+16B3A;PAHAWH HMONG SIGN VOS THIAB;Po;0;L;;;;;N;;;;;
+16B3B;PAHAWH HMONG SIGN VOS FEEM;Po;0;L;;;;;N;;;;;
+16B3C;PAHAWH HMONG SIGN XYEEM NTXIV;So;0;L;;;;;N;;;;;
+16B3D;PAHAWH HMONG SIGN XYEEM RHO;So;0;L;;;;;N;;;;;
+16B3E;PAHAWH HMONG SIGN XYEEM TOV;So;0;L;;;;;N;;;;;
+16B3F;PAHAWH HMONG SIGN XYEEM FAIB;So;0;L;;;;;N;;;;;
+16B40;PAHAWH HMONG SIGN VOS SEEV;Lm;0;L;;;;;N;;;;;
+16B41;PAHAWH HMONG SIGN MEEJ SUAB;Lm;0;L;;;;;N;;;;;
+16B42;PAHAWH HMONG SIGN VOS NRUA;Lm;0;L;;;;;N;;;;;
+16B43;PAHAWH HMONG SIGN IB YAM;Lm;0;L;;;;;N;;;;;
+16B44;PAHAWH HMONG SIGN XAUS;Po;0;L;;;;;N;;;;;
+16B45;PAHAWH HMONG SIGN CIM TSOV ROG;So;0;L;;;;;N;;;;;
+16B50;PAHAWH HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+16B51;PAHAWH HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+16B52;PAHAWH HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+16B53;PAHAWH HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+16B54;PAHAWH HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+16B55;PAHAWH HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+16B56;PAHAWH HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+16B57;PAHAWH HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+16B58;PAHAWH HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+16B59;PAHAWH HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+16B5B;PAHAWH HMONG NUMBER TENS;No;0;L;;;;10;N;;;;;
+16B5C;PAHAWH HMONG NUMBER HUNDREDS;No;0;L;;;;100;N;;;;;
+16B5D;PAHAWH HMONG NUMBER TEN THOUSANDS;No;0;L;;;;10000;N;;;;;
+16B5E;PAHAWH HMONG NUMBER MILLIONS;No;0;L;;;;1000000;N;;;;;
+16B5F;PAHAWH HMONG NUMBER HUNDRED MILLIONS;No;0;L;;;;100000000;N;;;;;
+16B60;PAHAWH HMONG NUMBER TEN BILLIONS;No;0;L;;;;10000000000;N;;;;;
+16B61;PAHAWH HMONG NUMBER TRILLIONS;No;0;L;;;;1000000000000;N;;;;;
+16B63;PAHAWH HMONG SIGN VOS LUB;Lo;0;L;;;;;N;;;;;
+16B64;PAHAWH HMONG SIGN XYOO;Lo;0;L;;;;;N;;;;;
+16B65;PAHAWH HMONG SIGN HLI;Lo;0;L;;;;;N;;;;;
+16B66;PAHAWH HMONG SIGN THIRD-STAGE HLI;Lo;0;L;;;;;N;;;;;
+16B67;PAHAWH HMONG SIGN ZWJ THAJ;Lo;0;L;;;;;N;;;;;
+16B68;PAHAWH HMONG SIGN HNUB;Lo;0;L;;;;;N;;;;;
+16B69;PAHAWH HMONG SIGN NQIG;Lo;0;L;;;;;N;;;;;
+16B6A;PAHAWH HMONG SIGN XIAB;Lo;0;L;;;;;N;;;;;
+16B6B;PAHAWH HMONG SIGN NTUJ;Lo;0;L;;;;;N;;;;;
+16B6C;PAHAWH HMONG SIGN AV;Lo;0;L;;;;;N;;;;;
+16B6D;PAHAWH HMONG SIGN TXHEEJ CEEV;Lo;0;L;;;;;N;;;;;
+16B6E;PAHAWH HMONG SIGN MEEJ TSEEB;Lo;0;L;;;;;N;;;;;
+16B6F;PAHAWH HMONG SIGN TAU;Lo;0;L;;;;;N;;;;;
+16B70;PAHAWH HMONG SIGN LOS;Lo;0;L;;;;;N;;;;;
+16B71;PAHAWH HMONG SIGN MUS;Lo;0;L;;;;;N;;;;;
+16B72;PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG;Lo;0;L;;;;;N;;;;;
+16B73;PAHAWH HMONG SIGN CIM CUAM TSHOOJ;Lo;0;L;;;;;N;;;;;
+16B74;PAHAWH HMONG SIGN CIM TXWV;Lo;0;L;;;;;N;;;;;
+16B75;PAHAWH HMONG SIGN CIM TXWV CHWV;Lo;0;L;;;;;N;;;;;
+16B76;PAHAWH HMONG SIGN CIM PUB DAWB;Lo;0;L;;;;;N;;;;;
+16B77;PAHAWH HMONG SIGN CIM NRES TOS;Lo;0;L;;;;;N;;;;;
+16B7D;PAHAWH HMONG CLAN SIGN TSHEEJ;Lo;0;L;;;;;N;;;;;
+16B7E;PAHAWH HMONG CLAN SIGN YEEG;Lo;0;L;;;;;N;;;;;
+16B7F;PAHAWH HMONG CLAN SIGN LIS;Lo;0;L;;;;;N;;;;;
+16B80;PAHAWH HMONG CLAN SIGN LAUJ;Lo;0;L;;;;;N;;;;;
+16B81;PAHAWH HMONG CLAN SIGN XYOOJ;Lo;0;L;;;;;N;;;;;
+16B82;PAHAWH HMONG CLAN SIGN KOO;Lo;0;L;;;;;N;;;;;
+16B83;PAHAWH HMONG CLAN SIGN HAWJ;Lo;0;L;;;;;N;;;;;
+16B84;PAHAWH HMONG CLAN SIGN MUAS;Lo;0;L;;;;;N;;;;;
+16B85;PAHAWH HMONG CLAN SIGN THOJ;Lo;0;L;;;;;N;;;;;
+16B86;PAHAWH HMONG CLAN SIGN TSAB;Lo;0;L;;;;;N;;;;;
+16B87;PAHAWH HMONG CLAN SIGN PHAB;Lo;0;L;;;;;N;;;;;
+16B88;PAHAWH HMONG CLAN SIGN KHAB;Lo;0;L;;;;;N;;;;;
+16B89;PAHAWH HMONG CLAN SIGN HAM;Lo;0;L;;;;;N;;;;;
+16B8A;PAHAWH HMONG CLAN SIGN VAJ;Lo;0;L;;;;;N;;;;;
+16B8B;PAHAWH HMONG CLAN SIGN FAJ;Lo;0;L;;;;;N;;;;;
+16B8C;PAHAWH HMONG CLAN SIGN YAJ;Lo;0;L;;;;;N;;;;;
+16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;;
+16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;;
+16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;;
+16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60;
+16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61;
+16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62;
+16E43;MEDEFAIDRIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;16E63;
+16E44;MEDEFAIDRIN CAPITAL LETTER ATIU;Lu;0;L;;;;;N;;;;16E64;
+16E45;MEDEFAIDRIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;16E65;
+16E46;MEDEFAIDRIN CAPITAL LETTER KP;Lu;0;L;;;;;N;;;;16E66;
+16E47;MEDEFAIDRIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;16E67;
+16E48;MEDEFAIDRIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;16E68;
+16E49;MEDEFAIDRIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;16E69;
+16E4A;MEDEFAIDRIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;16E6A;
+16E4B;MEDEFAIDRIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16E6B;
+16E4C;MEDEFAIDRIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;16E6C;
+16E4D;MEDEFAIDRIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;16E6D;
+16E4E;MEDEFAIDRIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;16E6E;
+16E4F;MEDEFAIDRIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;16E6F;
+16E50;MEDEFAIDRIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;16E70;
+16E51;MEDEFAIDRIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;16E71;
+16E52;MEDEFAIDRIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;16E72;
+16E53;MEDEFAIDRIN CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;16E73;
+16E54;MEDEFAIDRIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;16E74;
+16E55;MEDEFAIDRIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;16E75;
+16E56;MEDEFAIDRIN CAPITAL LETTER HP;Lu;0;L;;;;;N;;;;16E76;
+16E57;MEDEFAIDRIN CAPITAL LETTER NY;Lu;0;L;;;;;N;;;;16E77;
+16E58;MEDEFAIDRIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;16E78;
+16E59;MEDEFAIDRIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;16E79;
+16E5A;MEDEFAIDRIN CAPITAL LETTER OE;Lu;0;L;;;;;N;;;;16E7A;
+16E5B;MEDEFAIDRIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;16E7B;
+16E5C;MEDEFAIDRIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;16E7C;
+16E5D;MEDEFAIDRIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;16E7D;
+16E5E;MEDEFAIDRIN CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;16E7E;
+16E5F;MEDEFAIDRIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;16E7F;
+16E60;MEDEFAIDRIN SMALL LETTER M;Ll;0;L;;;;;N;;;16E40;;16E40
+16E61;MEDEFAIDRIN SMALL LETTER S;Ll;0;L;;;;;N;;;16E41;;16E41
+16E62;MEDEFAIDRIN SMALL LETTER V;Ll;0;L;;;;;N;;;16E42;;16E42
+16E63;MEDEFAIDRIN SMALL LETTER W;Ll;0;L;;;;;N;;;16E43;;16E43
+16E64;MEDEFAIDRIN SMALL LETTER ATIU;Ll;0;L;;;;;N;;;16E44;;16E44
+16E65;MEDEFAIDRIN SMALL LETTER Z;Ll;0;L;;;;;N;;;16E45;;16E45
+16E66;MEDEFAIDRIN SMALL LETTER KP;Ll;0;L;;;;;N;;;16E46;;16E46
+16E67;MEDEFAIDRIN SMALL LETTER P;Ll;0;L;;;;;N;;;16E47;;16E47
+16E68;MEDEFAIDRIN SMALL LETTER T;Ll;0;L;;;;;N;;;16E48;;16E48
+16E69;MEDEFAIDRIN SMALL LETTER G;Ll;0;L;;;;;N;;;16E49;;16E49
+16E6A;MEDEFAIDRIN SMALL LETTER F;Ll;0;L;;;;;N;;;16E4A;;16E4A
+16E6B;MEDEFAIDRIN SMALL LETTER I;Ll;0;L;;;;;N;;;16E4B;;16E4B
+16E6C;MEDEFAIDRIN SMALL LETTER K;Ll;0;L;;;;;N;;;16E4C;;16E4C
+16E6D;MEDEFAIDRIN SMALL LETTER A;Ll;0;L;;;;;N;;;16E4D;;16E4D
+16E6E;MEDEFAIDRIN SMALL LETTER J;Ll;0;L;;;;;N;;;16E4E;;16E4E
+16E6F;MEDEFAIDRIN SMALL LETTER E;Ll;0;L;;;;;N;;;16E4F;;16E4F
+16E70;MEDEFAIDRIN SMALL LETTER B;Ll;0;L;;;;;N;;;16E50;;16E50
+16E71;MEDEFAIDRIN SMALL LETTER C;Ll;0;L;;;;;N;;;16E51;;16E51
+16E72;MEDEFAIDRIN SMALL LETTER U;Ll;0;L;;;;;N;;;16E52;;16E52
+16E73;MEDEFAIDRIN SMALL LETTER YU;Ll;0;L;;;;;N;;;16E53;;16E53
+16E74;MEDEFAIDRIN SMALL LETTER L;Ll;0;L;;;;;N;;;16E54;;16E54
+16E75;MEDEFAIDRIN SMALL LETTER Q;Ll;0;L;;;;;N;;;16E55;;16E55
+16E76;MEDEFAIDRIN SMALL LETTER HP;Ll;0;L;;;;;N;;;16E56;;16E56
+16E77;MEDEFAIDRIN SMALL LETTER NY;Ll;0;L;;;;;N;;;16E57;;16E57
+16E78;MEDEFAIDRIN SMALL LETTER X;Ll;0;L;;;;;N;;;16E58;;16E58
+16E79;MEDEFAIDRIN SMALL LETTER D;Ll;0;L;;;;;N;;;16E59;;16E59
+16E7A;MEDEFAIDRIN SMALL LETTER OE;Ll;0;L;;;;;N;;;16E5A;;16E5A
+16E7B;MEDEFAIDRIN SMALL LETTER N;Ll;0;L;;;;;N;;;16E5B;;16E5B
+16E7C;MEDEFAIDRIN SMALL LETTER R;Ll;0;L;;;;;N;;;16E5C;;16E5C
+16E7D;MEDEFAIDRIN SMALL LETTER O;Ll;0;L;;;;;N;;;16E5D;;16E5D
+16E7E;MEDEFAIDRIN SMALL LETTER AI;Ll;0;L;;;;;N;;;16E5E;;16E5E
+16E7F;MEDEFAIDRIN SMALL LETTER Y;Ll;0;L;;;;;N;;;16E5F;;16E5F
+16E80;MEDEFAIDRIN DIGIT ZERO;No;0;L;;;;0;N;;;;;
+16E81;MEDEFAIDRIN DIGIT ONE;No;0;L;;;;1;N;;;;;
+16E82;MEDEFAIDRIN DIGIT TWO;No;0;L;;;;2;N;;;;;
+16E83;MEDEFAIDRIN DIGIT THREE;No;0;L;;;;3;N;;;;;
+16E84;MEDEFAIDRIN DIGIT FOUR;No;0;L;;;;4;N;;;;;
+16E85;MEDEFAIDRIN DIGIT FIVE;No;0;L;;;;5;N;;;;;
+16E86;MEDEFAIDRIN DIGIT SIX;No;0;L;;;;6;N;;;;;
+16E87;MEDEFAIDRIN DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+16E88;MEDEFAIDRIN DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+16E89;MEDEFAIDRIN DIGIT NINE;No;0;L;;;;9;N;;;;;
+16E8A;MEDEFAIDRIN NUMBER TEN;No;0;L;;;;10;N;;;;;
+16E8B;MEDEFAIDRIN NUMBER ELEVEN;No;0;L;;;;11;N;;;;;
+16E8C;MEDEFAIDRIN NUMBER TWELVE;No;0;L;;;;12;N;;;;;
+16E8D;MEDEFAIDRIN NUMBER THIRTEEN;No;0;L;;;;13;N;;;;;
+16E8E;MEDEFAIDRIN NUMBER FOURTEEN;No;0;L;;;;14;N;;;;;
+16E8F;MEDEFAIDRIN NUMBER FIFTEEN;No;0;L;;;;15;N;;;;;
+16E90;MEDEFAIDRIN NUMBER SIXTEEN;No;0;L;;;;16;N;;;;;
+16E91;MEDEFAIDRIN NUMBER SEVENTEEN;No;0;L;;;;17;N;;;;;
+16E92;MEDEFAIDRIN NUMBER EIGHTEEN;No;0;L;;;;18;N;;;;;
+16E93;MEDEFAIDRIN NUMBER NINETEEN;No;0;L;;;;19;N;;;;;
+16E94;MEDEFAIDRIN DIGIT ONE ALTERNATE FORM;No;0;L;;;;1;N;;;;;
+16E95;MEDEFAIDRIN DIGIT TWO ALTERNATE FORM;No;0;L;;;;2;N;;;;;
+16E96;MEDEFAIDRIN DIGIT THREE ALTERNATE FORM;No;0;L;;;;3;N;;;;;
+16E97;MEDEFAIDRIN COMMA;Po;0;L;;;;;N;;;;;
+16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;;
+16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;;
+16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;;
+16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;;
+16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;;
+16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;;
+16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;;
+16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;;
+16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;;
+16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;;
+16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;;
+16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;;
+16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;;
+16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;;
+16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;;
+16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;;
+16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;;
+16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;;
+16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;;
+16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;;
+16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;;
+16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;;
+16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;;
+16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;;
+16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;;
+16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;;
+16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;;
+16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;;
+16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;;
+16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;;
+16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;;
+16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;;
+16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;;
+16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;;
+16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;;
+16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;;
+16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;;
+16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;;
+16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;;
+16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;;
+16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;;
+16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;;
+16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;;
+16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;;
+16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;;
+16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;;
+16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;;
+16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;;
+16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;;
+16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;;
+16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;;
+16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;;
+16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;;
+16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;;
+16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;;
+16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;;
+16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;;
+16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;;
+16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;;
+16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;;
+16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;;
+16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;;
+16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;;
+16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;;
+16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;;
+16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;;
+16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;;
+16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;;
+16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;;
+16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;;
+16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;;
+16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;;
+16F45;MIAO LETTER BRI;Lo;0;L;;;;;N;;;;;
+16F46;MIAO LETTER SYI;Lo;0;L;;;;;N;;;;;
+16F47;MIAO LETTER DZYI;Lo;0;L;;;;;N;;;;;
+16F48;MIAO LETTER TE;Lo;0;L;;;;;N;;;;;
+16F49;MIAO LETTER TSE;Lo;0;L;;;;;N;;;;;
+16F4A;MIAO LETTER RTE;Lo;0;L;;;;;N;;;;;
+16F4F;MIAO SIGN CONSONANT MODIFIER BAR;Mn;0;NSM;;;;;N;;;;;
+16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;;
+16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;;
+16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;;
+16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;;
+16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;;
+16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;;
+16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;;
+16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;;
+16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;;
+16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;;
+16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;;
+16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;;
+16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;;
+16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;;
+16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;;
+16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;;
+16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;;
+16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;;
+16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;;
+16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;;
+16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;;
+16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;;
+16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;;
+16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;;
+16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;;
+16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;;
+16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;;
+16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;;
+16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;;
+16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;;
+16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
+16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;;
+16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;;
+16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;;
+16F7F;MIAO VOWEL SIGN UOG;Mc;0;L;;;;;N;;;;;
+16F80;MIAO VOWEL SIGN YUI;Mc;0;L;;;;;N;;;;;
+16F81;MIAO VOWEL SIGN OG;Mc;0;L;;;;;N;;;;;
+16F82;MIAO VOWEL SIGN OER;Mc;0;L;;;;;N;;;;;
+16F83;MIAO VOWEL SIGN VW;Mc;0;L;;;;;N;;;;;
+16F84;MIAO VOWEL SIGN IG;Mc;0;L;;;;;N;;;;;
+16F85;MIAO VOWEL SIGN EA;Mc;0;L;;;;;N;;;;;
+16F86;MIAO VOWEL SIGN IONG;Mc;0;L;;;;;N;;;;;
+16F87;MIAO VOWEL SIGN UI;Mc;0;L;;;;;N;;;;;
+16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;;
+16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;;
+16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;;
+16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;;
+16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;;
+16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;;
+16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;;
+16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;;
+16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;;
+16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;;
+16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;;
+16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;;
+16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;;
+16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;;
+16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;;
+16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;;
+16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;;
+16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;;
+16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;
+16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;;
+16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;;
+17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;
+187F7;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;
+18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;;
+18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;;
+18803;TANGUT COMPONENT-004;Lo;0;L;;;;;N;;;;;
+18804;TANGUT COMPONENT-005;Lo;0;L;;;;;N;;;;;
+18805;TANGUT COMPONENT-006;Lo;0;L;;;;;N;;;;;
+18806;TANGUT COMPONENT-007;Lo;0;L;;;;;N;;;;;
+18807;TANGUT COMPONENT-008;Lo;0;L;;;;;N;;;;;
+18808;TANGUT COMPONENT-009;Lo;0;L;;;;;N;;;;;
+18809;TANGUT COMPONENT-010;Lo;0;L;;;;;N;;;;;
+1880A;TANGUT COMPONENT-011;Lo;0;L;;;;;N;;;;;
+1880B;TANGUT COMPONENT-012;Lo;0;L;;;;;N;;;;;
+1880C;TANGUT COMPONENT-013;Lo;0;L;;;;;N;;;;;
+1880D;TANGUT COMPONENT-014;Lo;0;L;;;;;N;;;;;
+1880E;TANGUT COMPONENT-015;Lo;0;L;;;;;N;;;;;
+1880F;TANGUT COMPONENT-016;Lo;0;L;;;;;N;;;;;
+18810;TANGUT COMPONENT-017;Lo;0;L;;;;;N;;;;;
+18811;TANGUT COMPONENT-018;Lo;0;L;;;;;N;;;;;
+18812;TANGUT COMPONENT-019;Lo;0;L;;;;;N;;;;;
+18813;TANGUT COMPONENT-020;Lo;0;L;;;;;N;;;;;
+18814;TANGUT COMPONENT-021;Lo;0;L;;;;;N;;;;;
+18815;TANGUT COMPONENT-022;Lo;0;L;;;;;N;;;;;
+18816;TANGUT COMPONENT-023;Lo;0;L;;;;;N;;;;;
+18817;TANGUT COMPONENT-024;Lo;0;L;;;;;N;;;;;
+18818;TANGUT COMPONENT-025;Lo;0;L;;;;;N;;;;;
+18819;TANGUT COMPONENT-026;Lo;0;L;;;;;N;;;;;
+1881A;TANGUT COMPONENT-027;Lo;0;L;;;;;N;;;;;
+1881B;TANGUT COMPONENT-028;Lo;0;L;;;;;N;;;;;
+1881C;TANGUT COMPONENT-029;Lo;0;L;;;;;N;;;;;
+1881D;TANGUT COMPONENT-030;Lo;0;L;;;;;N;;;;;
+1881E;TANGUT COMPONENT-031;Lo;0;L;;;;;N;;;;;
+1881F;TANGUT COMPONENT-032;Lo;0;L;;;;;N;;;;;
+18820;TANGUT COMPONENT-033;Lo;0;L;;;;;N;;;;;
+18821;TANGUT COMPONENT-034;Lo;0;L;;;;;N;;;;;
+18822;TANGUT COMPONENT-035;Lo;0;L;;;;;N;;;;;
+18823;TANGUT COMPONENT-036;Lo;0;L;;;;;N;;;;;
+18824;TANGUT COMPONENT-037;Lo;0;L;;;;;N;;;;;
+18825;TANGUT COMPONENT-038;Lo;0;L;;;;;N;;;;;
+18826;TANGUT COMPONENT-039;Lo;0;L;;;;;N;;;;;
+18827;TANGUT COMPONENT-040;Lo;0;L;;;;;N;;;;;
+18828;TANGUT COMPONENT-041;Lo;0;L;;;;;N;;;;;
+18829;TANGUT COMPONENT-042;Lo;0;L;;;;;N;;;;;
+1882A;TANGUT COMPONENT-043;Lo;0;L;;;;;N;;;;;
+1882B;TANGUT COMPONENT-044;Lo;0;L;;;;;N;;;;;
+1882C;TANGUT COMPONENT-045;Lo;0;L;;;;;N;;;;;
+1882D;TANGUT COMPONENT-046;Lo;0;L;;;;;N;;;;;
+1882E;TANGUT COMPONENT-047;Lo;0;L;;;;;N;;;;;
+1882F;TANGUT COMPONENT-048;Lo;0;L;;;;;N;;;;;
+18830;TANGUT COMPONENT-049;Lo;0;L;;;;;N;;;;;
+18831;TANGUT COMPONENT-050;Lo;0;L;;;;;N;;;;;
+18832;TANGUT COMPONENT-051;Lo;0;L;;;;;N;;;;;
+18833;TANGUT COMPONENT-052;Lo;0;L;;;;;N;;;;;
+18834;TANGUT COMPONENT-053;Lo;0;L;;;;;N;;;;;
+18835;TANGUT COMPONENT-054;Lo;0;L;;;;;N;;;;;
+18836;TANGUT COMPONENT-055;Lo;0;L;;;;;N;;;;;
+18837;TANGUT COMPONENT-056;Lo;0;L;;;;;N;;;;;
+18838;TANGUT COMPONENT-057;Lo;0;L;;;;;N;;;;;
+18839;TANGUT COMPONENT-058;Lo;0;L;;;;;N;;;;;
+1883A;TANGUT COMPONENT-059;Lo;0;L;;;;;N;;;;;
+1883B;TANGUT COMPONENT-060;Lo;0;L;;;;;N;;;;;
+1883C;TANGUT COMPONENT-061;Lo;0;L;;;;;N;;;;;
+1883D;TANGUT COMPONENT-062;Lo;0;L;;;;;N;;;;;
+1883E;TANGUT COMPONENT-063;Lo;0;L;;;;;N;;;;;
+1883F;TANGUT COMPONENT-064;Lo;0;L;;;;;N;;;;;
+18840;TANGUT COMPONENT-065;Lo;0;L;;;;;N;;;;;
+18841;TANGUT COMPONENT-066;Lo;0;L;;;;;N;;;;;
+18842;TANGUT COMPONENT-067;Lo;0;L;;;;;N;;;;;
+18843;TANGUT COMPONENT-068;Lo;0;L;;;;;N;;;;;
+18844;TANGUT COMPONENT-069;Lo;0;L;;;;;N;;;;;
+18845;TANGUT COMPONENT-070;Lo;0;L;;;;;N;;;;;
+18846;TANGUT COMPONENT-071;Lo;0;L;;;;;N;;;;;
+18847;TANGUT COMPONENT-072;Lo;0;L;;;;;N;;;;;
+18848;TANGUT COMPONENT-073;Lo;0;L;;;;;N;;;;;
+18849;TANGUT COMPONENT-074;Lo;0;L;;;;;N;;;;;
+1884A;TANGUT COMPONENT-075;Lo;0;L;;;;;N;;;;;
+1884B;TANGUT COMPONENT-076;Lo;0;L;;;;;N;;;;;
+1884C;TANGUT COMPONENT-077;Lo;0;L;;;;;N;;;;;
+1884D;TANGUT COMPONENT-078;Lo;0;L;;;;;N;;;;;
+1884E;TANGUT COMPONENT-079;Lo;0;L;;;;;N;;;;;
+1884F;TANGUT COMPONENT-080;Lo;0;L;;;;;N;;;;;
+18850;TANGUT COMPONENT-081;Lo;0;L;;;;;N;;;;;
+18851;TANGUT COMPONENT-082;Lo;0;L;;;;;N;;;;;
+18852;TANGUT COMPONENT-083;Lo;0;L;;;;;N;;;;;
+18853;TANGUT COMPONENT-084;Lo;0;L;;;;;N;;;;;
+18854;TANGUT COMPONENT-085;Lo;0;L;;;;;N;;;;;
+18855;TANGUT COMPONENT-086;Lo;0;L;;;;;N;;;;;
+18856;TANGUT COMPONENT-087;Lo;0;L;;;;;N;;;;;
+18857;TANGUT COMPONENT-088;Lo;0;L;;;;;N;;;;;
+18858;TANGUT COMPONENT-089;Lo;0;L;;;;;N;;;;;
+18859;TANGUT COMPONENT-090;Lo;0;L;;;;;N;;;;;
+1885A;TANGUT COMPONENT-091;Lo;0;L;;;;;N;;;;;
+1885B;TANGUT COMPONENT-092;Lo;0;L;;;;;N;;;;;
+1885C;TANGUT COMPONENT-093;Lo;0;L;;;;;N;;;;;
+1885D;TANGUT COMPONENT-094;Lo;0;L;;;;;N;;;;;
+1885E;TANGUT COMPONENT-095;Lo;0;L;;;;;N;;;;;
+1885F;TANGUT COMPONENT-096;Lo;0;L;;;;;N;;;;;
+18860;TANGUT COMPONENT-097;Lo;0;L;;;;;N;;;;;
+18861;TANGUT COMPONENT-098;Lo;0;L;;;;;N;;;;;
+18862;TANGUT COMPONENT-099;Lo;0;L;;;;;N;;;;;
+18863;TANGUT COMPONENT-100;Lo;0;L;;;;;N;;;;;
+18864;TANGUT COMPONENT-101;Lo;0;L;;;;;N;;;;;
+18865;TANGUT COMPONENT-102;Lo;0;L;;;;;N;;;;;
+18866;TANGUT COMPONENT-103;Lo;0;L;;;;;N;;;;;
+18867;TANGUT COMPONENT-104;Lo;0;L;;;;;N;;;;;
+18868;TANGUT COMPONENT-105;Lo;0;L;;;;;N;;;;;
+18869;TANGUT COMPONENT-106;Lo;0;L;;;;;N;;;;;
+1886A;TANGUT COMPONENT-107;Lo;0;L;;;;;N;;;;;
+1886B;TANGUT COMPONENT-108;Lo;0;L;;;;;N;;;;;
+1886C;TANGUT COMPONENT-109;Lo;0;L;;;;;N;;;;;
+1886D;TANGUT COMPONENT-110;Lo;0;L;;;;;N;;;;;
+1886E;TANGUT COMPONENT-111;Lo;0;L;;;;;N;;;;;
+1886F;TANGUT COMPONENT-112;Lo;0;L;;;;;N;;;;;
+18870;TANGUT COMPONENT-113;Lo;0;L;;;;;N;;;;;
+18871;TANGUT COMPONENT-114;Lo;0;L;;;;;N;;;;;
+18872;TANGUT COMPONENT-115;Lo;0;L;;;;;N;;;;;
+18873;TANGUT COMPONENT-116;Lo;0;L;;;;;N;;;;;
+18874;TANGUT COMPONENT-117;Lo;0;L;;;;;N;;;;;
+18875;TANGUT COMPONENT-118;Lo;0;L;;;;;N;;;;;
+18876;TANGUT COMPONENT-119;Lo;0;L;;;;;N;;;;;
+18877;TANGUT COMPONENT-120;Lo;0;L;;;;;N;;;;;
+18878;TANGUT COMPONENT-121;Lo;0;L;;;;;N;;;;;
+18879;TANGUT COMPONENT-122;Lo;0;L;;;;;N;;;;;
+1887A;TANGUT COMPONENT-123;Lo;0;L;;;;;N;;;;;
+1887B;TANGUT COMPONENT-124;Lo;0;L;;;;;N;;;;;
+1887C;TANGUT COMPONENT-125;Lo;0;L;;;;;N;;;;;
+1887D;TANGUT COMPONENT-126;Lo;0;L;;;;;N;;;;;
+1887E;TANGUT COMPONENT-127;Lo;0;L;;;;;N;;;;;
+1887F;TANGUT COMPONENT-128;Lo;0;L;;;;;N;;;;;
+18880;TANGUT COMPONENT-129;Lo;0;L;;;;;N;;;;;
+18881;TANGUT COMPONENT-130;Lo;0;L;;;;;N;;;;;
+18882;TANGUT COMPONENT-131;Lo;0;L;;;;;N;;;;;
+18883;TANGUT COMPONENT-132;Lo;0;L;;;;;N;;;;;
+18884;TANGUT COMPONENT-133;Lo;0;L;;;;;N;;;;;
+18885;TANGUT COMPONENT-134;Lo;0;L;;;;;N;;;;;
+18886;TANGUT COMPONENT-135;Lo;0;L;;;;;N;;;;;
+18887;TANGUT COMPONENT-136;Lo;0;L;;;;;N;;;;;
+18888;TANGUT COMPONENT-137;Lo;0;L;;;;;N;;;;;
+18889;TANGUT COMPONENT-138;Lo;0;L;;;;;N;;;;;
+1888A;TANGUT COMPONENT-139;Lo;0;L;;;;;N;;;;;
+1888B;TANGUT COMPONENT-140;Lo;0;L;;;;;N;;;;;
+1888C;TANGUT COMPONENT-141;Lo;0;L;;;;;N;;;;;
+1888D;TANGUT COMPONENT-142;Lo;0;L;;;;;N;;;;;
+1888E;TANGUT COMPONENT-143;Lo;0;L;;;;;N;;;;;
+1888F;TANGUT COMPONENT-144;Lo;0;L;;;;;N;;;;;
+18890;TANGUT COMPONENT-145;Lo;0;L;;;;;N;;;;;
+18891;TANGUT COMPONENT-146;Lo;0;L;;;;;N;;;;;
+18892;TANGUT COMPONENT-147;Lo;0;L;;;;;N;;;;;
+18893;TANGUT COMPONENT-148;Lo;0;L;;;;;N;;;;;
+18894;TANGUT COMPONENT-149;Lo;0;L;;;;;N;;;;;
+18895;TANGUT COMPONENT-150;Lo;0;L;;;;;N;;;;;
+18896;TANGUT COMPONENT-151;Lo;0;L;;;;;N;;;;;
+18897;TANGUT COMPONENT-152;Lo;0;L;;;;;N;;;;;
+18898;TANGUT COMPONENT-153;Lo;0;L;;;;;N;;;;;
+18899;TANGUT COMPONENT-154;Lo;0;L;;;;;N;;;;;
+1889A;TANGUT COMPONENT-155;Lo;0;L;;;;;N;;;;;
+1889B;TANGUT COMPONENT-156;Lo;0;L;;;;;N;;;;;
+1889C;TANGUT COMPONENT-157;Lo;0;L;;;;;N;;;;;
+1889D;TANGUT COMPONENT-158;Lo;0;L;;;;;N;;;;;
+1889E;TANGUT COMPONENT-159;Lo;0;L;;;;;N;;;;;
+1889F;TANGUT COMPONENT-160;Lo;0;L;;;;;N;;;;;
+188A0;TANGUT COMPONENT-161;Lo;0;L;;;;;N;;;;;
+188A1;TANGUT COMPONENT-162;Lo;0;L;;;;;N;;;;;
+188A2;TANGUT COMPONENT-163;Lo;0;L;;;;;N;;;;;
+188A3;TANGUT COMPONENT-164;Lo;0;L;;;;;N;;;;;
+188A4;TANGUT COMPONENT-165;Lo;0;L;;;;;N;;;;;
+188A5;TANGUT COMPONENT-166;Lo;0;L;;;;;N;;;;;
+188A6;TANGUT COMPONENT-167;Lo;0;L;;;;;N;;;;;
+188A7;TANGUT COMPONENT-168;Lo;0;L;;;;;N;;;;;
+188A8;TANGUT COMPONENT-169;Lo;0;L;;;;;N;;;;;
+188A9;TANGUT COMPONENT-170;Lo;0;L;;;;;N;;;;;
+188AA;TANGUT COMPONENT-171;Lo;0;L;;;;;N;;;;;
+188AB;TANGUT COMPONENT-172;Lo;0;L;;;;;N;;;;;
+188AC;TANGUT COMPONENT-173;Lo;0;L;;;;;N;;;;;
+188AD;TANGUT COMPONENT-174;Lo;0;L;;;;;N;;;;;
+188AE;TANGUT COMPONENT-175;Lo;0;L;;;;;N;;;;;
+188AF;TANGUT COMPONENT-176;Lo;0;L;;;;;N;;;;;
+188B0;TANGUT COMPONENT-177;Lo;0;L;;;;;N;;;;;
+188B1;TANGUT COMPONENT-178;Lo;0;L;;;;;N;;;;;
+188B2;TANGUT COMPONENT-179;Lo;0;L;;;;;N;;;;;
+188B3;TANGUT COMPONENT-180;Lo;0;L;;;;;N;;;;;
+188B4;TANGUT COMPONENT-181;Lo;0;L;;;;;N;;;;;
+188B5;TANGUT COMPONENT-182;Lo;0;L;;;;;N;;;;;
+188B6;TANGUT COMPONENT-183;Lo;0;L;;;;;N;;;;;
+188B7;TANGUT COMPONENT-184;Lo;0;L;;;;;N;;;;;
+188B8;TANGUT COMPONENT-185;Lo;0;L;;;;;N;;;;;
+188B9;TANGUT COMPONENT-186;Lo;0;L;;;;;N;;;;;
+188BA;TANGUT COMPONENT-187;Lo;0;L;;;;;N;;;;;
+188BB;TANGUT COMPONENT-188;Lo;0;L;;;;;N;;;;;
+188BC;TANGUT COMPONENT-189;Lo;0;L;;;;;N;;;;;
+188BD;TANGUT COMPONENT-190;Lo;0;L;;;;;N;;;;;
+188BE;TANGUT COMPONENT-191;Lo;0;L;;;;;N;;;;;
+188BF;TANGUT COMPONENT-192;Lo;0;L;;;;;N;;;;;
+188C0;TANGUT COMPONENT-193;Lo;0;L;;;;;N;;;;;
+188C1;TANGUT COMPONENT-194;Lo;0;L;;;;;N;;;;;
+188C2;TANGUT COMPONENT-195;Lo;0;L;;;;;N;;;;;
+188C3;TANGUT COMPONENT-196;Lo;0;L;;;;;N;;;;;
+188C4;TANGUT COMPONENT-197;Lo;0;L;;;;;N;;;;;
+188C5;TANGUT COMPONENT-198;Lo;0;L;;;;;N;;;;;
+188C6;TANGUT COMPONENT-199;Lo;0;L;;;;;N;;;;;
+188C7;TANGUT COMPONENT-200;Lo;0;L;;;;;N;;;;;
+188C8;TANGUT COMPONENT-201;Lo;0;L;;;;;N;;;;;
+188C9;TANGUT COMPONENT-202;Lo;0;L;;;;;N;;;;;
+188CA;TANGUT COMPONENT-203;Lo;0;L;;;;;N;;;;;
+188CB;TANGUT COMPONENT-204;Lo;0;L;;;;;N;;;;;
+188CC;TANGUT COMPONENT-205;Lo;0;L;;;;;N;;;;;
+188CD;TANGUT COMPONENT-206;Lo;0;L;;;;;N;;;;;
+188CE;TANGUT COMPONENT-207;Lo;0;L;;;;;N;;;;;
+188CF;TANGUT COMPONENT-208;Lo;0;L;;;;;N;;;;;
+188D0;TANGUT COMPONENT-209;Lo;0;L;;;;;N;;;;;
+188D1;TANGUT COMPONENT-210;Lo;0;L;;;;;N;;;;;
+188D2;TANGUT COMPONENT-211;Lo;0;L;;;;;N;;;;;
+188D3;TANGUT COMPONENT-212;Lo;0;L;;;;;N;;;;;
+188D4;TANGUT COMPONENT-213;Lo;0;L;;;;;N;;;;;
+188D5;TANGUT COMPONENT-214;Lo;0;L;;;;;N;;;;;
+188D6;TANGUT COMPONENT-215;Lo;0;L;;;;;N;;;;;
+188D7;TANGUT COMPONENT-216;Lo;0;L;;;;;N;;;;;
+188D8;TANGUT COMPONENT-217;Lo;0;L;;;;;N;;;;;
+188D9;TANGUT COMPONENT-218;Lo;0;L;;;;;N;;;;;
+188DA;TANGUT COMPONENT-219;Lo;0;L;;;;;N;;;;;
+188DB;TANGUT COMPONENT-220;Lo;0;L;;;;;N;;;;;
+188DC;TANGUT COMPONENT-221;Lo;0;L;;;;;N;;;;;
+188DD;TANGUT COMPONENT-222;Lo;0;L;;;;;N;;;;;
+188DE;TANGUT COMPONENT-223;Lo;0;L;;;;;N;;;;;
+188DF;TANGUT COMPONENT-224;Lo;0;L;;;;;N;;;;;
+188E0;TANGUT COMPONENT-225;Lo;0;L;;;;;N;;;;;
+188E1;TANGUT COMPONENT-226;Lo;0;L;;;;;N;;;;;
+188E2;TANGUT COMPONENT-227;Lo;0;L;;;;;N;;;;;
+188E3;TANGUT COMPONENT-228;Lo;0;L;;;;;N;;;;;
+188E4;TANGUT COMPONENT-229;Lo;0;L;;;;;N;;;;;
+188E5;TANGUT COMPONENT-230;Lo;0;L;;;;;N;;;;;
+188E6;TANGUT COMPONENT-231;Lo;0;L;;;;;N;;;;;
+188E7;TANGUT COMPONENT-232;Lo;0;L;;;;;N;;;;;
+188E8;TANGUT COMPONENT-233;Lo;0;L;;;;;N;;;;;
+188E9;TANGUT COMPONENT-234;Lo;0;L;;;;;N;;;;;
+188EA;TANGUT COMPONENT-235;Lo;0;L;;;;;N;;;;;
+188EB;TANGUT COMPONENT-236;Lo;0;L;;;;;N;;;;;
+188EC;TANGUT COMPONENT-237;Lo;0;L;;;;;N;;;;;
+188ED;TANGUT COMPONENT-238;Lo;0;L;;;;;N;;;;;
+188EE;TANGUT COMPONENT-239;Lo;0;L;;;;;N;;;;;
+188EF;TANGUT COMPONENT-240;Lo;0;L;;;;;N;;;;;
+188F0;TANGUT COMPONENT-241;Lo;0;L;;;;;N;;;;;
+188F1;TANGUT COMPONENT-242;Lo;0;L;;;;;N;;;;;
+188F2;TANGUT COMPONENT-243;Lo;0;L;;;;;N;;;;;
+188F3;TANGUT COMPONENT-244;Lo;0;L;;;;;N;;;;;
+188F4;TANGUT COMPONENT-245;Lo;0;L;;;;;N;;;;;
+188F5;TANGUT COMPONENT-246;Lo;0;L;;;;;N;;;;;
+188F6;TANGUT COMPONENT-247;Lo;0;L;;;;;N;;;;;
+188F7;TANGUT COMPONENT-248;Lo;0;L;;;;;N;;;;;
+188F8;TANGUT COMPONENT-249;Lo;0;L;;;;;N;;;;;
+188F9;TANGUT COMPONENT-250;Lo;0;L;;;;;N;;;;;
+188FA;TANGUT COMPONENT-251;Lo;0;L;;;;;N;;;;;
+188FB;TANGUT COMPONENT-252;Lo;0;L;;;;;N;;;;;
+188FC;TANGUT COMPONENT-253;Lo;0;L;;;;;N;;;;;
+188FD;TANGUT COMPONENT-254;Lo;0;L;;;;;N;;;;;
+188FE;TANGUT COMPONENT-255;Lo;0;L;;;;;N;;;;;
+188FF;TANGUT COMPONENT-256;Lo;0;L;;;;;N;;;;;
+18900;TANGUT COMPONENT-257;Lo;0;L;;;;;N;;;;;
+18901;TANGUT COMPONENT-258;Lo;0;L;;;;;N;;;;;
+18902;TANGUT COMPONENT-259;Lo;0;L;;;;;N;;;;;
+18903;TANGUT COMPONENT-260;Lo;0;L;;;;;N;;;;;
+18904;TANGUT COMPONENT-261;Lo;0;L;;;;;N;;;;;
+18905;TANGUT COMPONENT-262;Lo;0;L;;;;;N;;;;;
+18906;TANGUT COMPONENT-263;Lo;0;L;;;;;N;;;;;
+18907;TANGUT COMPONENT-264;Lo;0;L;;;;;N;;;;;
+18908;TANGUT COMPONENT-265;Lo;0;L;;;;;N;;;;;
+18909;TANGUT COMPONENT-266;Lo;0;L;;;;;N;;;;;
+1890A;TANGUT COMPONENT-267;Lo;0;L;;;;;N;;;;;
+1890B;TANGUT COMPONENT-268;Lo;0;L;;;;;N;;;;;
+1890C;TANGUT COMPONENT-269;Lo;0;L;;;;;N;;;;;
+1890D;TANGUT COMPONENT-270;Lo;0;L;;;;;N;;;;;
+1890E;TANGUT COMPONENT-271;Lo;0;L;;;;;N;;;;;
+1890F;TANGUT COMPONENT-272;Lo;0;L;;;;;N;;;;;
+18910;TANGUT COMPONENT-273;Lo;0;L;;;;;N;;;;;
+18911;TANGUT COMPONENT-274;Lo;0;L;;;;;N;;;;;
+18912;TANGUT COMPONENT-275;Lo;0;L;;;;;N;;;;;
+18913;TANGUT COMPONENT-276;Lo;0;L;;;;;N;;;;;
+18914;TANGUT COMPONENT-277;Lo;0;L;;;;;N;;;;;
+18915;TANGUT COMPONENT-278;Lo;0;L;;;;;N;;;;;
+18916;TANGUT COMPONENT-279;Lo;0;L;;;;;N;;;;;
+18917;TANGUT COMPONENT-280;Lo;0;L;;;;;N;;;;;
+18918;TANGUT COMPONENT-281;Lo;0;L;;;;;N;;;;;
+18919;TANGUT COMPONENT-282;Lo;0;L;;;;;N;;;;;
+1891A;TANGUT COMPONENT-283;Lo;0;L;;;;;N;;;;;
+1891B;TANGUT COMPONENT-284;Lo;0;L;;;;;N;;;;;
+1891C;TANGUT COMPONENT-285;Lo;0;L;;;;;N;;;;;
+1891D;TANGUT COMPONENT-286;Lo;0;L;;;;;N;;;;;
+1891E;TANGUT COMPONENT-287;Lo;0;L;;;;;N;;;;;
+1891F;TANGUT COMPONENT-288;Lo;0;L;;;;;N;;;;;
+18920;TANGUT COMPONENT-289;Lo;0;L;;;;;N;;;;;
+18921;TANGUT COMPONENT-290;Lo;0;L;;;;;N;;;;;
+18922;TANGUT COMPONENT-291;Lo;0;L;;;;;N;;;;;
+18923;TANGUT COMPONENT-292;Lo;0;L;;;;;N;;;;;
+18924;TANGUT COMPONENT-293;Lo;0;L;;;;;N;;;;;
+18925;TANGUT COMPONENT-294;Lo;0;L;;;;;N;;;;;
+18926;TANGUT COMPONENT-295;Lo;0;L;;;;;N;;;;;
+18927;TANGUT COMPONENT-296;Lo;0;L;;;;;N;;;;;
+18928;TANGUT COMPONENT-297;Lo;0;L;;;;;N;;;;;
+18929;TANGUT COMPONENT-298;Lo;0;L;;;;;N;;;;;
+1892A;TANGUT COMPONENT-299;Lo;0;L;;;;;N;;;;;
+1892B;TANGUT COMPONENT-300;Lo;0;L;;;;;N;;;;;
+1892C;TANGUT COMPONENT-301;Lo;0;L;;;;;N;;;;;
+1892D;TANGUT COMPONENT-302;Lo;0;L;;;;;N;;;;;
+1892E;TANGUT COMPONENT-303;Lo;0;L;;;;;N;;;;;
+1892F;TANGUT COMPONENT-304;Lo;0;L;;;;;N;;;;;
+18930;TANGUT COMPONENT-305;Lo;0;L;;;;;N;;;;;
+18931;TANGUT COMPONENT-306;Lo;0;L;;;;;N;;;;;
+18932;TANGUT COMPONENT-307;Lo;0;L;;;;;N;;;;;
+18933;TANGUT COMPONENT-308;Lo;0;L;;;;;N;;;;;
+18934;TANGUT COMPONENT-309;Lo;0;L;;;;;N;;;;;
+18935;TANGUT COMPONENT-310;Lo;0;L;;;;;N;;;;;
+18936;TANGUT COMPONENT-311;Lo;0;L;;;;;N;;;;;
+18937;TANGUT COMPONENT-312;Lo;0;L;;;;;N;;;;;
+18938;TANGUT COMPONENT-313;Lo;0;L;;;;;N;;;;;
+18939;TANGUT COMPONENT-314;Lo;0;L;;;;;N;;;;;
+1893A;TANGUT COMPONENT-315;Lo;0;L;;;;;N;;;;;
+1893B;TANGUT COMPONENT-316;Lo;0;L;;;;;N;;;;;
+1893C;TANGUT COMPONENT-317;Lo;0;L;;;;;N;;;;;
+1893D;TANGUT COMPONENT-318;Lo;0;L;;;;;N;;;;;
+1893E;TANGUT COMPONENT-319;Lo;0;L;;;;;N;;;;;
+1893F;TANGUT COMPONENT-320;Lo;0;L;;;;;N;;;;;
+18940;TANGUT COMPONENT-321;Lo;0;L;;;;;N;;;;;
+18941;TANGUT COMPONENT-322;Lo;0;L;;;;;N;;;;;
+18942;TANGUT COMPONENT-323;Lo;0;L;;;;;N;;;;;
+18943;TANGUT COMPONENT-324;Lo;0;L;;;;;N;;;;;
+18944;TANGUT COMPONENT-325;Lo;0;L;;;;;N;;;;;
+18945;TANGUT COMPONENT-326;Lo;0;L;;;;;N;;;;;
+18946;TANGUT COMPONENT-327;Lo;0;L;;;;;N;;;;;
+18947;TANGUT COMPONENT-328;Lo;0;L;;;;;N;;;;;
+18948;TANGUT COMPONENT-329;Lo;0;L;;;;;N;;;;;
+18949;TANGUT COMPONENT-330;Lo;0;L;;;;;N;;;;;
+1894A;TANGUT COMPONENT-331;Lo;0;L;;;;;N;;;;;
+1894B;TANGUT COMPONENT-332;Lo;0;L;;;;;N;;;;;
+1894C;TANGUT COMPONENT-333;Lo;0;L;;;;;N;;;;;
+1894D;TANGUT COMPONENT-334;Lo;0;L;;;;;N;;;;;
+1894E;TANGUT COMPONENT-335;Lo;0;L;;;;;N;;;;;
+1894F;TANGUT COMPONENT-336;Lo;0;L;;;;;N;;;;;
+18950;TANGUT COMPONENT-337;Lo;0;L;;;;;N;;;;;
+18951;TANGUT COMPONENT-338;Lo;0;L;;;;;N;;;;;
+18952;TANGUT COMPONENT-339;Lo;0;L;;;;;N;;;;;
+18953;TANGUT COMPONENT-340;Lo;0;L;;;;;N;;;;;
+18954;TANGUT COMPONENT-341;Lo;0;L;;;;;N;;;;;
+18955;TANGUT COMPONENT-342;Lo;0;L;;;;;N;;;;;
+18956;TANGUT COMPONENT-343;Lo;0;L;;;;;N;;;;;
+18957;TANGUT COMPONENT-344;Lo;0;L;;;;;N;;;;;
+18958;TANGUT COMPONENT-345;Lo;0;L;;;;;N;;;;;
+18959;TANGUT COMPONENT-346;Lo;0;L;;;;;N;;;;;
+1895A;TANGUT COMPONENT-347;Lo;0;L;;;;;N;;;;;
+1895B;TANGUT COMPONENT-348;Lo;0;L;;;;;N;;;;;
+1895C;TANGUT COMPONENT-349;Lo;0;L;;;;;N;;;;;
+1895D;TANGUT COMPONENT-350;Lo;0;L;;;;;N;;;;;
+1895E;TANGUT COMPONENT-351;Lo;0;L;;;;;N;;;;;
+1895F;TANGUT COMPONENT-352;Lo;0;L;;;;;N;;;;;
+18960;TANGUT COMPONENT-353;Lo;0;L;;;;;N;;;;;
+18961;TANGUT COMPONENT-354;Lo;0;L;;;;;N;;;;;
+18962;TANGUT COMPONENT-355;Lo;0;L;;;;;N;;;;;
+18963;TANGUT COMPONENT-356;Lo;0;L;;;;;N;;;;;
+18964;TANGUT COMPONENT-357;Lo;0;L;;;;;N;;;;;
+18965;TANGUT COMPONENT-358;Lo;0;L;;;;;N;;;;;
+18966;TANGUT COMPONENT-359;Lo;0;L;;;;;N;;;;;
+18967;TANGUT COMPONENT-360;Lo;0;L;;;;;N;;;;;
+18968;TANGUT COMPONENT-361;Lo;0;L;;;;;N;;;;;
+18969;TANGUT COMPONENT-362;Lo;0;L;;;;;N;;;;;
+1896A;TANGUT COMPONENT-363;Lo;0;L;;;;;N;;;;;
+1896B;TANGUT COMPONENT-364;Lo;0;L;;;;;N;;;;;
+1896C;TANGUT COMPONENT-365;Lo;0;L;;;;;N;;;;;
+1896D;TANGUT COMPONENT-366;Lo;0;L;;;;;N;;;;;
+1896E;TANGUT COMPONENT-367;Lo;0;L;;;;;N;;;;;
+1896F;TANGUT COMPONENT-368;Lo;0;L;;;;;N;;;;;
+18970;TANGUT COMPONENT-369;Lo;0;L;;;;;N;;;;;
+18971;TANGUT COMPONENT-370;Lo;0;L;;;;;N;;;;;
+18972;TANGUT COMPONENT-371;Lo;0;L;;;;;N;;;;;
+18973;TANGUT COMPONENT-372;Lo;0;L;;;;;N;;;;;
+18974;TANGUT COMPONENT-373;Lo;0;L;;;;;N;;;;;
+18975;TANGUT COMPONENT-374;Lo;0;L;;;;;N;;;;;
+18976;TANGUT COMPONENT-375;Lo;0;L;;;;;N;;;;;
+18977;TANGUT COMPONENT-376;Lo;0;L;;;;;N;;;;;
+18978;TANGUT COMPONENT-377;Lo;0;L;;;;;N;;;;;
+18979;TANGUT COMPONENT-378;Lo;0;L;;;;;N;;;;;
+1897A;TANGUT COMPONENT-379;Lo;0;L;;;;;N;;;;;
+1897B;TANGUT COMPONENT-380;Lo;0;L;;;;;N;;;;;
+1897C;TANGUT COMPONENT-381;Lo;0;L;;;;;N;;;;;
+1897D;TANGUT COMPONENT-382;Lo;0;L;;;;;N;;;;;
+1897E;TANGUT COMPONENT-383;Lo;0;L;;;;;N;;;;;
+1897F;TANGUT COMPONENT-384;Lo;0;L;;;;;N;;;;;
+18980;TANGUT COMPONENT-385;Lo;0;L;;;;;N;;;;;
+18981;TANGUT COMPONENT-386;Lo;0;L;;;;;N;;;;;
+18982;TANGUT COMPONENT-387;Lo;0;L;;;;;N;;;;;
+18983;TANGUT COMPONENT-388;Lo;0;L;;;;;N;;;;;
+18984;TANGUT COMPONENT-389;Lo;0;L;;;;;N;;;;;
+18985;TANGUT COMPONENT-390;Lo;0;L;;;;;N;;;;;
+18986;TANGUT COMPONENT-391;Lo;0;L;;;;;N;;;;;
+18987;TANGUT COMPONENT-392;Lo;0;L;;;;;N;;;;;
+18988;TANGUT COMPONENT-393;Lo;0;L;;;;;N;;;;;
+18989;TANGUT COMPONENT-394;Lo;0;L;;;;;N;;;;;
+1898A;TANGUT COMPONENT-395;Lo;0;L;;;;;N;;;;;
+1898B;TANGUT COMPONENT-396;Lo;0;L;;;;;N;;;;;
+1898C;TANGUT COMPONENT-397;Lo;0;L;;;;;N;;;;;
+1898D;TANGUT COMPONENT-398;Lo;0;L;;;;;N;;;;;
+1898E;TANGUT COMPONENT-399;Lo;0;L;;;;;N;;;;;
+1898F;TANGUT COMPONENT-400;Lo;0;L;;;;;N;;;;;
+18990;TANGUT COMPONENT-401;Lo;0;L;;;;;N;;;;;
+18991;TANGUT COMPONENT-402;Lo;0;L;;;;;N;;;;;
+18992;TANGUT COMPONENT-403;Lo;0;L;;;;;N;;;;;
+18993;TANGUT COMPONENT-404;Lo;0;L;;;;;N;;;;;
+18994;TANGUT COMPONENT-405;Lo;0;L;;;;;N;;;;;
+18995;TANGUT COMPONENT-406;Lo;0;L;;;;;N;;;;;
+18996;TANGUT COMPONENT-407;Lo;0;L;;;;;N;;;;;
+18997;TANGUT COMPONENT-408;Lo;0;L;;;;;N;;;;;
+18998;TANGUT COMPONENT-409;Lo;0;L;;;;;N;;;;;
+18999;TANGUT COMPONENT-410;Lo;0;L;;;;;N;;;;;
+1899A;TANGUT COMPONENT-411;Lo;0;L;;;;;N;;;;;
+1899B;TANGUT COMPONENT-412;Lo;0;L;;;;;N;;;;;
+1899C;TANGUT COMPONENT-413;Lo;0;L;;;;;N;;;;;
+1899D;TANGUT COMPONENT-414;Lo;0;L;;;;;N;;;;;
+1899E;TANGUT COMPONENT-415;Lo;0;L;;;;;N;;;;;
+1899F;TANGUT COMPONENT-416;Lo;0;L;;;;;N;;;;;
+189A0;TANGUT COMPONENT-417;Lo;0;L;;;;;N;;;;;
+189A1;TANGUT COMPONENT-418;Lo;0;L;;;;;N;;;;;
+189A2;TANGUT COMPONENT-419;Lo;0;L;;;;;N;;;;;
+189A3;TANGUT COMPONENT-420;Lo;0;L;;;;;N;;;;;
+189A4;TANGUT COMPONENT-421;Lo;0;L;;;;;N;;;;;
+189A5;TANGUT COMPONENT-422;Lo;0;L;;;;;N;;;;;
+189A6;TANGUT COMPONENT-423;Lo;0;L;;;;;N;;;;;
+189A7;TANGUT COMPONENT-424;Lo;0;L;;;;;N;;;;;
+189A8;TANGUT COMPONENT-425;Lo;0;L;;;;;N;;;;;
+189A9;TANGUT COMPONENT-426;Lo;0;L;;;;;N;;;;;
+189AA;TANGUT COMPONENT-427;Lo;0;L;;;;;N;;;;;
+189AB;TANGUT COMPONENT-428;Lo;0;L;;;;;N;;;;;
+189AC;TANGUT COMPONENT-429;Lo;0;L;;;;;N;;;;;
+189AD;TANGUT COMPONENT-430;Lo;0;L;;;;;N;;;;;
+189AE;TANGUT COMPONENT-431;Lo;0;L;;;;;N;;;;;
+189AF;TANGUT COMPONENT-432;Lo;0;L;;;;;N;;;;;
+189B0;TANGUT COMPONENT-433;Lo;0;L;;;;;N;;;;;
+189B1;TANGUT COMPONENT-434;Lo;0;L;;;;;N;;;;;
+189B2;TANGUT COMPONENT-435;Lo;0;L;;;;;N;;;;;
+189B3;TANGUT COMPONENT-436;Lo;0;L;;;;;N;;;;;
+189B4;TANGUT COMPONENT-437;Lo;0;L;;;;;N;;;;;
+189B5;TANGUT COMPONENT-438;Lo;0;L;;;;;N;;;;;
+189B6;TANGUT COMPONENT-439;Lo;0;L;;;;;N;;;;;
+189B7;TANGUT COMPONENT-440;Lo;0;L;;;;;N;;;;;
+189B8;TANGUT COMPONENT-441;Lo;0;L;;;;;N;;;;;
+189B9;TANGUT COMPONENT-442;Lo;0;L;;;;;N;;;;;
+189BA;TANGUT COMPONENT-443;Lo;0;L;;;;;N;;;;;
+189BB;TANGUT COMPONENT-444;Lo;0;L;;;;;N;;;;;
+189BC;TANGUT COMPONENT-445;Lo;0;L;;;;;N;;;;;
+189BD;TANGUT COMPONENT-446;Lo;0;L;;;;;N;;;;;
+189BE;TANGUT COMPONENT-447;Lo;0;L;;;;;N;;;;;
+189BF;TANGUT COMPONENT-448;Lo;0;L;;;;;N;;;;;
+189C0;TANGUT COMPONENT-449;Lo;0;L;;;;;N;;;;;
+189C1;TANGUT COMPONENT-450;Lo;0;L;;;;;N;;;;;
+189C2;TANGUT COMPONENT-451;Lo;0;L;;;;;N;;;;;
+189C3;TANGUT COMPONENT-452;Lo;0;L;;;;;N;;;;;
+189C4;TANGUT COMPONENT-453;Lo;0;L;;;;;N;;;;;
+189C5;TANGUT COMPONENT-454;Lo;0;L;;;;;N;;;;;
+189C6;TANGUT COMPONENT-455;Lo;0;L;;;;;N;;;;;
+189C7;TANGUT COMPONENT-456;Lo;0;L;;;;;N;;;;;
+189C8;TANGUT COMPONENT-457;Lo;0;L;;;;;N;;;;;
+189C9;TANGUT COMPONENT-458;Lo;0;L;;;;;N;;;;;
+189CA;TANGUT COMPONENT-459;Lo;0;L;;;;;N;;;;;
+189CB;TANGUT COMPONENT-460;Lo;0;L;;;;;N;;;;;
+189CC;TANGUT COMPONENT-461;Lo;0;L;;;;;N;;;;;
+189CD;TANGUT COMPONENT-462;Lo;0;L;;;;;N;;;;;
+189CE;TANGUT COMPONENT-463;Lo;0;L;;;;;N;;;;;
+189CF;TANGUT COMPONENT-464;Lo;0;L;;;;;N;;;;;
+189D0;TANGUT COMPONENT-465;Lo;0;L;;;;;N;;;;;
+189D1;TANGUT COMPONENT-466;Lo;0;L;;;;;N;;;;;
+189D2;TANGUT COMPONENT-467;Lo;0;L;;;;;N;;;;;
+189D3;TANGUT COMPONENT-468;Lo;0;L;;;;;N;;;;;
+189D4;TANGUT COMPONENT-469;Lo;0;L;;;;;N;;;;;
+189D5;TANGUT COMPONENT-470;Lo;0;L;;;;;N;;;;;
+189D6;TANGUT COMPONENT-471;Lo;0;L;;;;;N;;;;;
+189D7;TANGUT COMPONENT-472;Lo;0;L;;;;;N;;;;;
+189D8;TANGUT COMPONENT-473;Lo;0;L;;;;;N;;;;;
+189D9;TANGUT COMPONENT-474;Lo;0;L;;;;;N;;;;;
+189DA;TANGUT COMPONENT-475;Lo;0;L;;;;;N;;;;;
+189DB;TANGUT COMPONENT-476;Lo;0;L;;;;;N;;;;;
+189DC;TANGUT COMPONENT-477;Lo;0;L;;;;;N;;;;;
+189DD;TANGUT COMPONENT-478;Lo;0;L;;;;;N;;;;;
+189DE;TANGUT COMPONENT-479;Lo;0;L;;;;;N;;;;;
+189DF;TANGUT COMPONENT-480;Lo;0;L;;;;;N;;;;;
+189E0;TANGUT COMPONENT-481;Lo;0;L;;;;;N;;;;;
+189E1;TANGUT COMPONENT-482;Lo;0;L;;;;;N;;;;;
+189E2;TANGUT COMPONENT-483;Lo;0;L;;;;;N;;;;;
+189E3;TANGUT COMPONENT-484;Lo;0;L;;;;;N;;;;;
+189E4;TANGUT COMPONENT-485;Lo;0;L;;;;;N;;;;;
+189E5;TANGUT COMPONENT-486;Lo;0;L;;;;;N;;;;;
+189E6;TANGUT COMPONENT-487;Lo;0;L;;;;;N;;;;;
+189E7;TANGUT COMPONENT-488;Lo;0;L;;;;;N;;;;;
+189E8;TANGUT COMPONENT-489;Lo;0;L;;;;;N;;;;;
+189E9;TANGUT COMPONENT-490;Lo;0;L;;;;;N;;;;;
+189EA;TANGUT COMPONENT-491;Lo;0;L;;;;;N;;;;;
+189EB;TANGUT COMPONENT-492;Lo;0;L;;;;;N;;;;;
+189EC;TANGUT COMPONENT-493;Lo;0;L;;;;;N;;;;;
+189ED;TANGUT COMPONENT-494;Lo;0;L;;;;;N;;;;;
+189EE;TANGUT COMPONENT-495;Lo;0;L;;;;;N;;;;;
+189EF;TANGUT COMPONENT-496;Lo;0;L;;;;;N;;;;;
+189F0;TANGUT COMPONENT-497;Lo;0;L;;;;;N;;;;;
+189F1;TANGUT COMPONENT-498;Lo;0;L;;;;;N;;;;;
+189F2;TANGUT COMPONENT-499;Lo;0;L;;;;;N;;;;;
+189F3;TANGUT COMPONENT-500;Lo;0;L;;;;;N;;;;;
+189F4;TANGUT COMPONENT-501;Lo;0;L;;;;;N;;;;;
+189F5;TANGUT COMPONENT-502;Lo;0;L;;;;;N;;;;;
+189F6;TANGUT COMPONENT-503;Lo;0;L;;;;;N;;;;;
+189F7;TANGUT COMPONENT-504;Lo;0;L;;;;;N;;;;;
+189F8;TANGUT COMPONENT-505;Lo;0;L;;;;;N;;;;;
+189F9;TANGUT COMPONENT-506;Lo;0;L;;;;;N;;;;;
+189FA;TANGUT COMPONENT-507;Lo;0;L;;;;;N;;;;;
+189FB;TANGUT COMPONENT-508;Lo;0;L;;;;;N;;;;;
+189FC;TANGUT COMPONENT-509;Lo;0;L;;;;;N;;;;;
+189FD;TANGUT COMPONENT-510;Lo;0;L;;;;;N;;;;;
+189FE;TANGUT COMPONENT-511;Lo;0;L;;;;;N;;;;;
+189FF;TANGUT COMPONENT-512;Lo;0;L;;;;;N;;;;;
+18A00;TANGUT COMPONENT-513;Lo;0;L;;;;;N;;;;;
+18A01;TANGUT COMPONENT-514;Lo;0;L;;;;;N;;;;;
+18A02;TANGUT COMPONENT-515;Lo;0;L;;;;;N;;;;;
+18A03;TANGUT COMPONENT-516;Lo;0;L;;;;;N;;;;;
+18A04;TANGUT COMPONENT-517;Lo;0;L;;;;;N;;;;;
+18A05;TANGUT COMPONENT-518;Lo;0;L;;;;;N;;;;;
+18A06;TANGUT COMPONENT-519;Lo;0;L;;;;;N;;;;;
+18A07;TANGUT COMPONENT-520;Lo;0;L;;;;;N;;;;;
+18A08;TANGUT COMPONENT-521;Lo;0;L;;;;;N;;;;;
+18A09;TANGUT COMPONENT-522;Lo;0;L;;;;;N;;;;;
+18A0A;TANGUT COMPONENT-523;Lo;0;L;;;;;N;;;;;
+18A0B;TANGUT COMPONENT-524;Lo;0;L;;;;;N;;;;;
+18A0C;TANGUT COMPONENT-525;Lo;0;L;;;;;N;;;;;
+18A0D;TANGUT COMPONENT-526;Lo;0;L;;;;;N;;;;;
+18A0E;TANGUT COMPONENT-527;Lo;0;L;;;;;N;;;;;
+18A0F;TANGUT COMPONENT-528;Lo;0;L;;;;;N;;;;;
+18A10;TANGUT COMPONENT-529;Lo;0;L;;;;;N;;;;;
+18A11;TANGUT COMPONENT-530;Lo;0;L;;;;;N;;;;;
+18A12;TANGUT COMPONENT-531;Lo;0;L;;;;;N;;;;;
+18A13;TANGUT COMPONENT-532;Lo;0;L;;;;;N;;;;;
+18A14;TANGUT COMPONENT-533;Lo;0;L;;;;;N;;;;;
+18A15;TANGUT COMPONENT-534;Lo;0;L;;;;;N;;;;;
+18A16;TANGUT COMPONENT-535;Lo;0;L;;;;;N;;;;;
+18A17;TANGUT COMPONENT-536;Lo;0;L;;;;;N;;;;;
+18A18;TANGUT COMPONENT-537;Lo;0;L;;;;;N;;;;;
+18A19;TANGUT COMPONENT-538;Lo;0;L;;;;;N;;;;;
+18A1A;TANGUT COMPONENT-539;Lo;0;L;;;;;N;;;;;
+18A1B;TANGUT COMPONENT-540;Lo;0;L;;;;;N;;;;;
+18A1C;TANGUT COMPONENT-541;Lo;0;L;;;;;N;;;;;
+18A1D;TANGUT COMPONENT-542;Lo;0;L;;;;;N;;;;;
+18A1E;TANGUT COMPONENT-543;Lo;0;L;;;;;N;;;;;
+18A1F;TANGUT COMPONENT-544;Lo;0;L;;;;;N;;;;;
+18A20;TANGUT COMPONENT-545;Lo;0;L;;;;;N;;;;;
+18A21;TANGUT COMPONENT-546;Lo;0;L;;;;;N;;;;;
+18A22;TANGUT COMPONENT-547;Lo;0;L;;;;;N;;;;;
+18A23;TANGUT COMPONENT-548;Lo;0;L;;;;;N;;;;;
+18A24;TANGUT COMPONENT-549;Lo;0;L;;;;;N;;;;;
+18A25;TANGUT COMPONENT-550;Lo;0;L;;;;;N;;;;;
+18A26;TANGUT COMPONENT-551;Lo;0;L;;;;;N;;;;;
+18A27;TANGUT COMPONENT-552;Lo;0;L;;;;;N;;;;;
+18A28;TANGUT COMPONENT-553;Lo;0;L;;;;;N;;;;;
+18A29;TANGUT COMPONENT-554;Lo;0;L;;;;;N;;;;;
+18A2A;TANGUT COMPONENT-555;Lo;0;L;;;;;N;;;;;
+18A2B;TANGUT COMPONENT-556;Lo;0;L;;;;;N;;;;;
+18A2C;TANGUT COMPONENT-557;Lo;0;L;;;;;N;;;;;
+18A2D;TANGUT COMPONENT-558;Lo;0;L;;;;;N;;;;;
+18A2E;TANGUT COMPONENT-559;Lo;0;L;;;;;N;;;;;
+18A2F;TANGUT COMPONENT-560;Lo;0;L;;;;;N;;;;;
+18A30;TANGUT COMPONENT-561;Lo;0;L;;;;;N;;;;;
+18A31;TANGUT COMPONENT-562;Lo;0;L;;;;;N;;;;;
+18A32;TANGUT COMPONENT-563;Lo;0;L;;;;;N;;;;;
+18A33;TANGUT COMPONENT-564;Lo;0;L;;;;;N;;;;;
+18A34;TANGUT COMPONENT-565;Lo;0;L;;;;;N;;;;;
+18A35;TANGUT COMPONENT-566;Lo;0;L;;;;;N;;;;;
+18A36;TANGUT COMPONENT-567;Lo;0;L;;;;;N;;;;;
+18A37;TANGUT COMPONENT-568;Lo;0;L;;;;;N;;;;;
+18A38;TANGUT COMPONENT-569;Lo;0;L;;;;;N;;;;;
+18A39;TANGUT COMPONENT-570;Lo;0;L;;;;;N;;;;;
+18A3A;TANGUT COMPONENT-571;Lo;0;L;;;;;N;;;;;
+18A3B;TANGUT COMPONENT-572;Lo;0;L;;;;;N;;;;;
+18A3C;TANGUT COMPONENT-573;Lo;0;L;;;;;N;;;;;
+18A3D;TANGUT COMPONENT-574;Lo;0;L;;;;;N;;;;;
+18A3E;TANGUT COMPONENT-575;Lo;0;L;;;;;N;;;;;
+18A3F;TANGUT COMPONENT-576;Lo;0;L;;;;;N;;;;;
+18A40;TANGUT COMPONENT-577;Lo;0;L;;;;;N;;;;;
+18A41;TANGUT COMPONENT-578;Lo;0;L;;;;;N;;;;;
+18A42;TANGUT COMPONENT-579;Lo;0;L;;;;;N;;;;;
+18A43;TANGUT COMPONENT-580;Lo;0;L;;;;;N;;;;;
+18A44;TANGUT COMPONENT-581;Lo;0;L;;;;;N;;;;;
+18A45;TANGUT COMPONENT-582;Lo;0;L;;;;;N;;;;;
+18A46;TANGUT COMPONENT-583;Lo;0;L;;;;;N;;;;;
+18A47;TANGUT COMPONENT-584;Lo;0;L;;;;;N;;;;;
+18A48;TANGUT COMPONENT-585;Lo;0;L;;;;;N;;;;;
+18A49;TANGUT COMPONENT-586;Lo;0;L;;;;;N;;;;;
+18A4A;TANGUT COMPONENT-587;Lo;0;L;;;;;N;;;;;
+18A4B;TANGUT COMPONENT-588;Lo;0;L;;;;;N;;;;;
+18A4C;TANGUT COMPONENT-589;Lo;0;L;;;;;N;;;;;
+18A4D;TANGUT COMPONENT-590;Lo;0;L;;;;;N;;;;;
+18A4E;TANGUT COMPONENT-591;Lo;0;L;;;;;N;;;;;
+18A4F;TANGUT COMPONENT-592;Lo;0;L;;;;;N;;;;;
+18A50;TANGUT COMPONENT-593;Lo;0;L;;;;;N;;;;;
+18A51;TANGUT COMPONENT-594;Lo;0;L;;;;;N;;;;;
+18A52;TANGUT COMPONENT-595;Lo;0;L;;;;;N;;;;;
+18A53;TANGUT COMPONENT-596;Lo;0;L;;;;;N;;;;;
+18A54;TANGUT COMPONENT-597;Lo;0;L;;;;;N;;;;;
+18A55;TANGUT COMPONENT-598;Lo;0;L;;;;;N;;;;;
+18A56;TANGUT COMPONENT-599;Lo;0;L;;;;;N;;;;;
+18A57;TANGUT COMPONENT-600;Lo;0;L;;;;;N;;;;;
+18A58;TANGUT COMPONENT-601;Lo;0;L;;;;;N;;;;;
+18A59;TANGUT COMPONENT-602;Lo;0;L;;;;;N;;;;;
+18A5A;TANGUT COMPONENT-603;Lo;0;L;;;;;N;;;;;
+18A5B;TANGUT COMPONENT-604;Lo;0;L;;;;;N;;;;;
+18A5C;TANGUT COMPONENT-605;Lo;0;L;;;;;N;;;;;
+18A5D;TANGUT COMPONENT-606;Lo;0;L;;;;;N;;;;;
+18A5E;TANGUT COMPONENT-607;Lo;0;L;;;;;N;;;;;
+18A5F;TANGUT COMPONENT-608;Lo;0;L;;;;;N;;;;;
+18A60;TANGUT COMPONENT-609;Lo;0;L;;;;;N;;;;;
+18A61;TANGUT COMPONENT-610;Lo;0;L;;;;;N;;;;;
+18A62;TANGUT COMPONENT-611;Lo;0;L;;;;;N;;;;;
+18A63;TANGUT COMPONENT-612;Lo;0;L;;;;;N;;;;;
+18A64;TANGUT COMPONENT-613;Lo;0;L;;;;;N;;;;;
+18A65;TANGUT COMPONENT-614;Lo;0;L;;;;;N;;;;;
+18A66;TANGUT COMPONENT-615;Lo;0;L;;;;;N;;;;;
+18A67;TANGUT COMPONENT-616;Lo;0;L;;;;;N;;;;;
+18A68;TANGUT COMPONENT-617;Lo;0;L;;;;;N;;;;;
+18A69;TANGUT COMPONENT-618;Lo;0;L;;;;;N;;;;;
+18A6A;TANGUT COMPONENT-619;Lo;0;L;;;;;N;;;;;
+18A6B;TANGUT COMPONENT-620;Lo;0;L;;;;;N;;;;;
+18A6C;TANGUT COMPONENT-621;Lo;0;L;;;;;N;;;;;
+18A6D;TANGUT COMPONENT-622;Lo;0;L;;;;;N;;;;;
+18A6E;TANGUT COMPONENT-623;Lo;0;L;;;;;N;;;;;
+18A6F;TANGUT COMPONENT-624;Lo;0;L;;;;;N;;;;;
+18A70;TANGUT COMPONENT-625;Lo;0;L;;;;;N;;;;;
+18A71;TANGUT COMPONENT-626;Lo;0;L;;;;;N;;;;;
+18A72;TANGUT COMPONENT-627;Lo;0;L;;;;;N;;;;;
+18A73;TANGUT COMPONENT-628;Lo;0;L;;;;;N;;;;;
+18A74;TANGUT COMPONENT-629;Lo;0;L;;;;;N;;;;;
+18A75;TANGUT COMPONENT-630;Lo;0;L;;;;;N;;;;;
+18A76;TANGUT COMPONENT-631;Lo;0;L;;;;;N;;;;;
+18A77;TANGUT COMPONENT-632;Lo;0;L;;;;;N;;;;;
+18A78;TANGUT COMPONENT-633;Lo;0;L;;;;;N;;;;;
+18A79;TANGUT COMPONENT-634;Lo;0;L;;;;;N;;;;;
+18A7A;TANGUT COMPONENT-635;Lo;0;L;;;;;N;;;;;
+18A7B;TANGUT COMPONENT-636;Lo;0;L;;;;;N;;;;;
+18A7C;TANGUT COMPONENT-637;Lo;0;L;;;;;N;;;;;
+18A7D;TANGUT COMPONENT-638;Lo;0;L;;;;;N;;;;;
+18A7E;TANGUT COMPONENT-639;Lo;0;L;;;;;N;;;;;
+18A7F;TANGUT COMPONENT-640;Lo;0;L;;;;;N;;;;;
+18A80;TANGUT COMPONENT-641;Lo;0;L;;;;;N;;;;;
+18A81;TANGUT COMPONENT-642;Lo;0;L;;;;;N;;;;;
+18A82;TANGUT COMPONENT-643;Lo;0;L;;;;;N;;;;;
+18A83;TANGUT COMPONENT-644;Lo;0;L;;;;;N;;;;;
+18A84;TANGUT COMPONENT-645;Lo;0;L;;;;;N;;;;;
+18A85;TANGUT COMPONENT-646;Lo;0;L;;;;;N;;;;;
+18A86;TANGUT COMPONENT-647;Lo;0;L;;;;;N;;;;;
+18A87;TANGUT COMPONENT-648;Lo;0;L;;;;;N;;;;;
+18A88;TANGUT COMPONENT-649;Lo;0;L;;;;;N;;;;;
+18A89;TANGUT COMPONENT-650;Lo;0;L;;;;;N;;;;;
+18A8A;TANGUT COMPONENT-651;Lo;0;L;;;;;N;;;;;
+18A8B;TANGUT COMPONENT-652;Lo;0;L;;;;;N;;;;;
+18A8C;TANGUT COMPONENT-653;Lo;0;L;;;;;N;;;;;
+18A8D;TANGUT COMPONENT-654;Lo;0;L;;;;;N;;;;;
+18A8E;TANGUT COMPONENT-655;Lo;0;L;;;;;N;;;;;
+18A8F;TANGUT COMPONENT-656;Lo;0;L;;;;;N;;;;;
+18A90;TANGUT COMPONENT-657;Lo;0;L;;;;;N;;;;;
+18A91;TANGUT COMPONENT-658;Lo;0;L;;;;;N;;;;;
+18A92;TANGUT COMPONENT-659;Lo;0;L;;;;;N;;;;;
+18A93;TANGUT COMPONENT-660;Lo;0;L;;;;;N;;;;;
+18A94;TANGUT COMPONENT-661;Lo;0;L;;;;;N;;;;;
+18A95;TANGUT COMPONENT-662;Lo;0;L;;;;;N;;;;;
+18A96;TANGUT COMPONENT-663;Lo;0;L;;;;;N;;;;;
+18A97;TANGUT COMPONENT-664;Lo;0;L;;;;;N;;;;;
+18A98;TANGUT COMPONENT-665;Lo;0;L;;;;;N;;;;;
+18A99;TANGUT COMPONENT-666;Lo;0;L;;;;;N;;;;;
+18A9A;TANGUT COMPONENT-667;Lo;0;L;;;;;N;;;;;
+18A9B;TANGUT COMPONENT-668;Lo;0;L;;;;;N;;;;;
+18A9C;TANGUT COMPONENT-669;Lo;0;L;;;;;N;;;;;
+18A9D;TANGUT COMPONENT-670;Lo;0;L;;;;;N;;;;;
+18A9E;TANGUT COMPONENT-671;Lo;0;L;;;;;N;;;;;
+18A9F;TANGUT COMPONENT-672;Lo;0;L;;;;;N;;;;;
+18AA0;TANGUT COMPONENT-673;Lo;0;L;;;;;N;;;;;
+18AA1;TANGUT COMPONENT-674;Lo;0;L;;;;;N;;;;;
+18AA2;TANGUT COMPONENT-675;Lo;0;L;;;;;N;;;;;
+18AA3;TANGUT COMPONENT-676;Lo;0;L;;;;;N;;;;;
+18AA4;TANGUT COMPONENT-677;Lo;0;L;;;;;N;;;;;
+18AA5;TANGUT COMPONENT-678;Lo;0;L;;;;;N;;;;;
+18AA6;TANGUT COMPONENT-679;Lo;0;L;;;;;N;;;;;
+18AA7;TANGUT COMPONENT-680;Lo;0;L;;;;;N;;;;;
+18AA8;TANGUT COMPONENT-681;Lo;0;L;;;;;N;;;;;
+18AA9;TANGUT COMPONENT-682;Lo;0;L;;;;;N;;;;;
+18AAA;TANGUT COMPONENT-683;Lo;0;L;;;;;N;;;;;
+18AAB;TANGUT COMPONENT-684;Lo;0;L;;;;;N;;;;;
+18AAC;TANGUT COMPONENT-685;Lo;0;L;;;;;N;;;;;
+18AAD;TANGUT COMPONENT-686;Lo;0;L;;;;;N;;;;;
+18AAE;TANGUT COMPONENT-687;Lo;0;L;;;;;N;;;;;
+18AAF;TANGUT COMPONENT-688;Lo;0;L;;;;;N;;;;;
+18AB0;TANGUT COMPONENT-689;Lo;0;L;;;;;N;;;;;
+18AB1;TANGUT COMPONENT-690;Lo;0;L;;;;;N;;;;;
+18AB2;TANGUT COMPONENT-691;Lo;0;L;;;;;N;;;;;
+18AB3;TANGUT COMPONENT-692;Lo;0;L;;;;;N;;;;;
+18AB4;TANGUT COMPONENT-693;Lo;0;L;;;;;N;;;;;
+18AB5;TANGUT COMPONENT-694;Lo;0;L;;;;;N;;;;;
+18AB6;TANGUT COMPONENT-695;Lo;0;L;;;;;N;;;;;
+18AB7;TANGUT COMPONENT-696;Lo;0;L;;;;;N;;;;;
+18AB8;TANGUT COMPONENT-697;Lo;0;L;;;;;N;;;;;
+18AB9;TANGUT COMPONENT-698;Lo;0;L;;;;;N;;;;;
+18ABA;TANGUT COMPONENT-699;Lo;0;L;;;;;N;;;;;
+18ABB;TANGUT COMPONENT-700;Lo;0;L;;;;;N;;;;;
+18ABC;TANGUT COMPONENT-701;Lo;0;L;;;;;N;;;;;
+18ABD;TANGUT COMPONENT-702;Lo;0;L;;;;;N;;;;;
+18ABE;TANGUT COMPONENT-703;Lo;0;L;;;;;N;;;;;
+18ABF;TANGUT COMPONENT-704;Lo;0;L;;;;;N;;;;;
+18AC0;TANGUT COMPONENT-705;Lo;0;L;;;;;N;;;;;
+18AC1;TANGUT COMPONENT-706;Lo;0;L;;;;;N;;;;;
+18AC2;TANGUT COMPONENT-707;Lo;0;L;;;;;N;;;;;
+18AC3;TANGUT COMPONENT-708;Lo;0;L;;;;;N;;;;;
+18AC4;TANGUT COMPONENT-709;Lo;0;L;;;;;N;;;;;
+18AC5;TANGUT COMPONENT-710;Lo;0;L;;;;;N;;;;;
+18AC6;TANGUT COMPONENT-711;Lo;0;L;;;;;N;;;;;
+18AC7;TANGUT COMPONENT-712;Lo;0;L;;;;;N;;;;;
+18AC8;TANGUT COMPONENT-713;Lo;0;L;;;;;N;;;;;
+18AC9;TANGUT COMPONENT-714;Lo;0;L;;;;;N;;;;;
+18ACA;TANGUT COMPONENT-715;Lo;0;L;;;;;N;;;;;
+18ACB;TANGUT COMPONENT-716;Lo;0;L;;;;;N;;;;;
+18ACC;TANGUT COMPONENT-717;Lo;0;L;;;;;N;;;;;
+18ACD;TANGUT COMPONENT-718;Lo;0;L;;;;;N;;;;;
+18ACE;TANGUT COMPONENT-719;Lo;0;L;;;;;N;;;;;
+18ACF;TANGUT COMPONENT-720;Lo;0;L;;;;;N;;;;;
+18AD0;TANGUT COMPONENT-721;Lo;0;L;;;;;N;;;;;
+18AD1;TANGUT COMPONENT-722;Lo;0;L;;;;;N;;;;;
+18AD2;TANGUT COMPONENT-723;Lo;0;L;;;;;N;;;;;
+18AD3;TANGUT COMPONENT-724;Lo;0;L;;;;;N;;;;;
+18AD4;TANGUT COMPONENT-725;Lo;0;L;;;;;N;;;;;
+18AD5;TANGUT COMPONENT-726;Lo;0;L;;;;;N;;;;;
+18AD6;TANGUT COMPONENT-727;Lo;0;L;;;;;N;;;;;
+18AD7;TANGUT COMPONENT-728;Lo;0;L;;;;;N;;;;;
+18AD8;TANGUT COMPONENT-729;Lo;0;L;;;;;N;;;;;
+18AD9;TANGUT COMPONENT-730;Lo;0;L;;;;;N;;;;;
+18ADA;TANGUT COMPONENT-731;Lo;0;L;;;;;N;;;;;
+18ADB;TANGUT COMPONENT-732;Lo;0;L;;;;;N;;;;;
+18ADC;TANGUT COMPONENT-733;Lo;0;L;;;;;N;;;;;
+18ADD;TANGUT COMPONENT-734;Lo;0;L;;;;;N;;;;;
+18ADE;TANGUT COMPONENT-735;Lo;0;L;;;;;N;;;;;
+18ADF;TANGUT COMPONENT-736;Lo;0;L;;;;;N;;;;;
+18AE0;TANGUT COMPONENT-737;Lo;0;L;;;;;N;;;;;
+18AE1;TANGUT COMPONENT-738;Lo;0;L;;;;;N;;;;;
+18AE2;TANGUT COMPONENT-739;Lo;0;L;;;;;N;;;;;
+18AE3;TANGUT COMPONENT-740;Lo;0;L;;;;;N;;;;;
+18AE4;TANGUT COMPONENT-741;Lo;0;L;;;;;N;;;;;
+18AE5;TANGUT COMPONENT-742;Lo;0;L;;;;;N;;;;;
+18AE6;TANGUT COMPONENT-743;Lo;0;L;;;;;N;;;;;
+18AE7;TANGUT COMPONENT-744;Lo;0;L;;;;;N;;;;;
+18AE8;TANGUT COMPONENT-745;Lo;0;L;;;;;N;;;;;
+18AE9;TANGUT COMPONENT-746;Lo;0;L;;;;;N;;;;;
+18AEA;TANGUT COMPONENT-747;Lo;0;L;;;;;N;;;;;
+18AEB;TANGUT COMPONENT-748;Lo;0;L;;;;;N;;;;;
+18AEC;TANGUT COMPONENT-749;Lo;0;L;;;;;N;;;;;
+18AED;TANGUT COMPONENT-750;Lo;0;L;;;;;N;;;;;
+18AEE;TANGUT COMPONENT-751;Lo;0;L;;;;;N;;;;;
+18AEF;TANGUT COMPONENT-752;Lo;0;L;;;;;N;;;;;
+18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;;
+18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;;
+18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;;
+1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
+1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
+1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
+1B003;HENTAIGANA LETTER A-2;Lo;0;L;;;;;N;;;;;
+1B004;HENTAIGANA LETTER A-3;Lo;0;L;;;;;N;;;;;
+1B005;HENTAIGANA LETTER A-WO;Lo;0;L;;;;;N;;;;;
+1B006;HENTAIGANA LETTER I-1;Lo;0;L;;;;;N;;;;;
+1B007;HENTAIGANA LETTER I-2;Lo;0;L;;;;;N;;;;;
+1B008;HENTAIGANA LETTER I-3;Lo;0;L;;;;;N;;;;;
+1B009;HENTAIGANA LETTER I-4;Lo;0;L;;;;;N;;;;;
+1B00A;HENTAIGANA LETTER U-1;Lo;0;L;;;;;N;;;;;
+1B00B;HENTAIGANA LETTER U-2;Lo;0;L;;;;;N;;;;;
+1B00C;HENTAIGANA LETTER U-3;Lo;0;L;;;;;N;;;;;
+1B00D;HENTAIGANA LETTER U-4;Lo;0;L;;;;;N;;;;;
+1B00E;HENTAIGANA LETTER U-5;Lo;0;L;;;;;N;;;;;
+1B00F;HENTAIGANA LETTER E-2;Lo;0;L;;;;;N;;;;;
+1B010;HENTAIGANA LETTER E-3;Lo;0;L;;;;;N;;;;;
+1B011;HENTAIGANA LETTER E-4;Lo;0;L;;;;;N;;;;;
+1B012;HENTAIGANA LETTER E-5;Lo;0;L;;;;;N;;;;;
+1B013;HENTAIGANA LETTER E-6;Lo;0;L;;;;;N;;;;;
+1B014;HENTAIGANA LETTER O-1;Lo;0;L;;;;;N;;;;;
+1B015;HENTAIGANA LETTER O-2;Lo;0;L;;;;;N;;;;;
+1B016;HENTAIGANA LETTER O-3;Lo;0;L;;;;;N;;;;;
+1B017;HENTAIGANA LETTER KA-1;Lo;0;L;;;;;N;;;;;
+1B018;HENTAIGANA LETTER KA-2;Lo;0;L;;;;;N;;;;;
+1B019;HENTAIGANA LETTER KA-3;Lo;0;L;;;;;N;;;;;
+1B01A;HENTAIGANA LETTER KA-4;Lo;0;L;;;;;N;;;;;
+1B01B;HENTAIGANA LETTER KA-5;Lo;0;L;;;;;N;;;;;
+1B01C;HENTAIGANA LETTER KA-6;Lo;0;L;;;;;N;;;;;
+1B01D;HENTAIGANA LETTER KA-7;Lo;0;L;;;;;N;;;;;
+1B01E;HENTAIGANA LETTER KA-8;Lo;0;L;;;;;N;;;;;
+1B01F;HENTAIGANA LETTER KA-9;Lo;0;L;;;;;N;;;;;
+1B020;HENTAIGANA LETTER KA-10;Lo;0;L;;;;;N;;;;;
+1B021;HENTAIGANA LETTER KA-11;Lo;0;L;;;;;N;;;;;
+1B022;HENTAIGANA LETTER KA-KE;Lo;0;L;;;;;N;;;;;
+1B023;HENTAIGANA LETTER KI-1;Lo;0;L;;;;;N;;;;;
+1B024;HENTAIGANA LETTER KI-2;Lo;0;L;;;;;N;;;;;
+1B025;HENTAIGANA LETTER KI-3;Lo;0;L;;;;;N;;;;;
+1B026;HENTAIGANA LETTER KI-4;Lo;0;L;;;;;N;;;;;
+1B027;HENTAIGANA LETTER KI-5;Lo;0;L;;;;;N;;;;;
+1B028;HENTAIGANA LETTER KI-6;Lo;0;L;;;;;N;;;;;
+1B029;HENTAIGANA LETTER KI-7;Lo;0;L;;;;;N;;;;;
+1B02A;HENTAIGANA LETTER KI-8;Lo;0;L;;;;;N;;;;;
+1B02B;HENTAIGANA LETTER KU-1;Lo;0;L;;;;;N;;;;;
+1B02C;HENTAIGANA LETTER KU-2;Lo;0;L;;;;;N;;;;;
+1B02D;HENTAIGANA LETTER KU-3;Lo;0;L;;;;;N;;;;;
+1B02E;HENTAIGANA LETTER KU-4;Lo;0;L;;;;;N;;;;;
+1B02F;HENTAIGANA LETTER KU-5;Lo;0;L;;;;;N;;;;;
+1B030;HENTAIGANA LETTER KU-6;Lo;0;L;;;;;N;;;;;
+1B031;HENTAIGANA LETTER KU-7;Lo;0;L;;;;;N;;;;;
+1B032;HENTAIGANA LETTER KE-1;Lo;0;L;;;;;N;;;;;
+1B033;HENTAIGANA LETTER KE-2;Lo;0;L;;;;;N;;;;;
+1B034;HENTAIGANA LETTER KE-3;Lo;0;L;;;;;N;;;;;
+1B035;HENTAIGANA LETTER KE-4;Lo;0;L;;;;;N;;;;;
+1B036;HENTAIGANA LETTER KE-5;Lo;0;L;;;;;N;;;;;
+1B037;HENTAIGANA LETTER KE-6;Lo;0;L;;;;;N;;;;;
+1B038;HENTAIGANA LETTER KO-1;Lo;0;L;;;;;N;;;;;
+1B039;HENTAIGANA LETTER KO-2;Lo;0;L;;;;;N;;;;;
+1B03A;HENTAIGANA LETTER KO-3;Lo;0;L;;;;;N;;;;;
+1B03B;HENTAIGANA LETTER KO-KI;Lo;0;L;;;;;N;;;;;
+1B03C;HENTAIGANA LETTER SA-1;Lo;0;L;;;;;N;;;;;
+1B03D;HENTAIGANA LETTER SA-2;Lo;0;L;;;;;N;;;;;
+1B03E;HENTAIGANA LETTER SA-3;Lo;0;L;;;;;N;;;;;
+1B03F;HENTAIGANA LETTER SA-4;Lo;0;L;;;;;N;;;;;
+1B040;HENTAIGANA LETTER SA-5;Lo;0;L;;;;;N;;;;;
+1B041;HENTAIGANA LETTER SA-6;Lo;0;L;;;;;N;;;;;
+1B042;HENTAIGANA LETTER SA-7;Lo;0;L;;;;;N;;;;;
+1B043;HENTAIGANA LETTER SA-8;Lo;0;L;;;;;N;;;;;
+1B044;HENTAIGANA LETTER SI-1;Lo;0;L;;;;;N;;;;;
+1B045;HENTAIGANA LETTER SI-2;Lo;0;L;;;;;N;;;;;
+1B046;HENTAIGANA LETTER SI-3;Lo;0;L;;;;;N;;;;;
+1B047;HENTAIGANA LETTER SI-4;Lo;0;L;;;;;N;;;;;
+1B048;HENTAIGANA LETTER SI-5;Lo;0;L;;;;;N;;;;;
+1B049;HENTAIGANA LETTER SI-6;Lo;0;L;;;;;N;;;;;
+1B04A;HENTAIGANA LETTER SU-1;Lo;0;L;;;;;N;;;;;
+1B04B;HENTAIGANA LETTER SU-2;Lo;0;L;;;;;N;;;;;
+1B04C;HENTAIGANA LETTER SU-3;Lo;0;L;;;;;N;;;;;
+1B04D;HENTAIGANA LETTER SU-4;Lo;0;L;;;;;N;;;;;
+1B04E;HENTAIGANA LETTER SU-5;Lo;0;L;;;;;N;;;;;
+1B04F;HENTAIGANA LETTER SU-6;Lo;0;L;;;;;N;;;;;
+1B050;HENTAIGANA LETTER SU-7;Lo;0;L;;;;;N;;;;;
+1B051;HENTAIGANA LETTER SU-8;Lo;0;L;;;;;N;;;;;
+1B052;HENTAIGANA LETTER SE-1;Lo;0;L;;;;;N;;;;;
+1B053;HENTAIGANA LETTER SE-2;Lo;0;L;;;;;N;;;;;
+1B054;HENTAIGANA LETTER SE-3;Lo;0;L;;;;;N;;;;;
+1B055;HENTAIGANA LETTER SE-4;Lo;0;L;;;;;N;;;;;
+1B056;HENTAIGANA LETTER SE-5;Lo;0;L;;;;;N;;;;;
+1B057;HENTAIGANA LETTER SO-1;Lo;0;L;;;;;N;;;;;
+1B058;HENTAIGANA LETTER SO-2;Lo;0;L;;;;;N;;;;;
+1B059;HENTAIGANA LETTER SO-3;Lo;0;L;;;;;N;;;;;
+1B05A;HENTAIGANA LETTER SO-4;Lo;0;L;;;;;N;;;;;
+1B05B;HENTAIGANA LETTER SO-5;Lo;0;L;;;;;N;;;;;
+1B05C;HENTAIGANA LETTER SO-6;Lo;0;L;;;;;N;;;;;
+1B05D;HENTAIGANA LETTER SO-7;Lo;0;L;;;;;N;;;;;
+1B05E;HENTAIGANA LETTER TA-1;Lo;0;L;;;;;N;;;;;
+1B05F;HENTAIGANA LETTER TA-2;Lo;0;L;;;;;N;;;;;
+1B060;HENTAIGANA LETTER TA-3;Lo;0;L;;;;;N;;;;;
+1B061;HENTAIGANA LETTER TA-4;Lo;0;L;;;;;N;;;;;
+1B062;HENTAIGANA LETTER TI-1;Lo;0;L;;;;;N;;;;;
+1B063;HENTAIGANA LETTER TI-2;Lo;0;L;;;;;N;;;;;
+1B064;HENTAIGANA LETTER TI-3;Lo;0;L;;;;;N;;;;;
+1B065;HENTAIGANA LETTER TI-4;Lo;0;L;;;;;N;;;;;
+1B066;HENTAIGANA LETTER TI-5;Lo;0;L;;;;;N;;;;;
+1B067;HENTAIGANA LETTER TI-6;Lo;0;L;;;;;N;;;;;
+1B068;HENTAIGANA LETTER TI-7;Lo;0;L;;;;;N;;;;;
+1B069;HENTAIGANA LETTER TU-1;Lo;0;L;;;;;N;;;;;
+1B06A;HENTAIGANA LETTER TU-2;Lo;0;L;;;;;N;;;;;
+1B06B;HENTAIGANA LETTER TU-3;Lo;0;L;;;;;N;;;;;
+1B06C;HENTAIGANA LETTER TU-4;Lo;0;L;;;;;N;;;;;
+1B06D;HENTAIGANA LETTER TU-TO;Lo;0;L;;;;;N;;;;;
+1B06E;HENTAIGANA LETTER TE-1;Lo;0;L;;;;;N;;;;;
+1B06F;HENTAIGANA LETTER TE-2;Lo;0;L;;;;;N;;;;;
+1B070;HENTAIGANA LETTER TE-3;Lo;0;L;;;;;N;;;;;
+1B071;HENTAIGANA LETTER TE-4;Lo;0;L;;;;;N;;;;;
+1B072;HENTAIGANA LETTER TE-5;Lo;0;L;;;;;N;;;;;
+1B073;HENTAIGANA LETTER TE-6;Lo;0;L;;;;;N;;;;;
+1B074;HENTAIGANA LETTER TE-7;Lo;0;L;;;;;N;;;;;
+1B075;HENTAIGANA LETTER TE-8;Lo;0;L;;;;;N;;;;;
+1B076;HENTAIGANA LETTER TE-9;Lo;0;L;;;;;N;;;;;
+1B077;HENTAIGANA LETTER TO-1;Lo;0;L;;;;;N;;;;;
+1B078;HENTAIGANA LETTER TO-2;Lo;0;L;;;;;N;;;;;
+1B079;HENTAIGANA LETTER TO-3;Lo;0;L;;;;;N;;;;;
+1B07A;HENTAIGANA LETTER TO-4;Lo;0;L;;;;;N;;;;;
+1B07B;HENTAIGANA LETTER TO-5;Lo;0;L;;;;;N;;;;;
+1B07C;HENTAIGANA LETTER TO-6;Lo;0;L;;;;;N;;;;;
+1B07D;HENTAIGANA LETTER TO-RA;Lo;0;L;;;;;N;;;;;
+1B07E;HENTAIGANA LETTER NA-1;Lo;0;L;;;;;N;;;;;
+1B07F;HENTAIGANA LETTER NA-2;Lo;0;L;;;;;N;;;;;
+1B080;HENTAIGANA LETTER NA-3;Lo;0;L;;;;;N;;;;;
+1B081;HENTAIGANA LETTER NA-4;Lo;0;L;;;;;N;;;;;
+1B082;HENTAIGANA LETTER NA-5;Lo;0;L;;;;;N;;;;;
+1B083;HENTAIGANA LETTER NA-6;Lo;0;L;;;;;N;;;;;
+1B084;HENTAIGANA LETTER NA-7;Lo;0;L;;;;;N;;;;;
+1B085;HENTAIGANA LETTER NA-8;Lo;0;L;;;;;N;;;;;
+1B086;HENTAIGANA LETTER NA-9;Lo;0;L;;;;;N;;;;;
+1B087;HENTAIGANA LETTER NI-1;Lo;0;L;;;;;N;;;;;
+1B088;HENTAIGANA LETTER NI-2;Lo;0;L;;;;;N;;;;;
+1B089;HENTAIGANA LETTER NI-3;Lo;0;L;;;;;N;;;;;
+1B08A;HENTAIGANA LETTER NI-4;Lo;0;L;;;;;N;;;;;
+1B08B;HENTAIGANA LETTER NI-5;Lo;0;L;;;;;N;;;;;
+1B08C;HENTAIGANA LETTER NI-6;Lo;0;L;;;;;N;;;;;
+1B08D;HENTAIGANA LETTER NI-7;Lo;0;L;;;;;N;;;;;
+1B08E;HENTAIGANA LETTER NI-TE;Lo;0;L;;;;;N;;;;;
+1B08F;HENTAIGANA LETTER NU-1;Lo;0;L;;;;;N;;;;;
+1B090;HENTAIGANA LETTER NU-2;Lo;0;L;;;;;N;;;;;
+1B091;HENTAIGANA LETTER NU-3;Lo;0;L;;;;;N;;;;;
+1B092;HENTAIGANA LETTER NE-1;Lo;0;L;;;;;N;;;;;
+1B093;HENTAIGANA LETTER NE-2;Lo;0;L;;;;;N;;;;;
+1B094;HENTAIGANA LETTER NE-3;Lo;0;L;;;;;N;;;;;
+1B095;HENTAIGANA LETTER NE-4;Lo;0;L;;;;;N;;;;;
+1B096;HENTAIGANA LETTER NE-5;Lo;0;L;;;;;N;;;;;
+1B097;HENTAIGANA LETTER NE-6;Lo;0;L;;;;;N;;;;;
+1B098;HENTAIGANA LETTER NE-KO;Lo;0;L;;;;;N;;;;;
+1B099;HENTAIGANA LETTER NO-1;Lo;0;L;;;;;N;;;;;
+1B09A;HENTAIGANA LETTER NO-2;Lo;0;L;;;;;N;;;;;
+1B09B;HENTAIGANA LETTER NO-3;Lo;0;L;;;;;N;;;;;
+1B09C;HENTAIGANA LETTER NO-4;Lo;0;L;;;;;N;;;;;
+1B09D;HENTAIGANA LETTER NO-5;Lo;0;L;;;;;N;;;;;
+1B09E;HENTAIGANA LETTER HA-1;Lo;0;L;;;;;N;;;;;
+1B09F;HENTAIGANA LETTER HA-2;Lo;0;L;;;;;N;;;;;
+1B0A0;HENTAIGANA LETTER HA-3;Lo;0;L;;;;;N;;;;;
+1B0A1;HENTAIGANA LETTER HA-4;Lo;0;L;;;;;N;;;;;
+1B0A2;HENTAIGANA LETTER HA-5;Lo;0;L;;;;;N;;;;;
+1B0A3;HENTAIGANA LETTER HA-6;Lo;0;L;;;;;N;;;;;
+1B0A4;HENTAIGANA LETTER HA-7;Lo;0;L;;;;;N;;;;;
+1B0A5;HENTAIGANA LETTER HA-8;Lo;0;L;;;;;N;;;;;
+1B0A6;HENTAIGANA LETTER HA-9;Lo;0;L;;;;;N;;;;;
+1B0A7;HENTAIGANA LETTER HA-10;Lo;0;L;;;;;N;;;;;
+1B0A8;HENTAIGANA LETTER HA-11;Lo;0;L;;;;;N;;;;;
+1B0A9;HENTAIGANA LETTER HI-1;Lo;0;L;;;;;N;;;;;
+1B0AA;HENTAIGANA LETTER HI-2;Lo;0;L;;;;;N;;;;;
+1B0AB;HENTAIGANA LETTER HI-3;Lo;0;L;;;;;N;;;;;
+1B0AC;HENTAIGANA LETTER HI-4;Lo;0;L;;;;;N;;;;;
+1B0AD;HENTAIGANA LETTER HI-5;Lo;0;L;;;;;N;;;;;
+1B0AE;HENTAIGANA LETTER HI-6;Lo;0;L;;;;;N;;;;;
+1B0AF;HENTAIGANA LETTER HI-7;Lo;0;L;;;;;N;;;;;
+1B0B0;HENTAIGANA LETTER HU-1;Lo;0;L;;;;;N;;;;;
+1B0B1;HENTAIGANA LETTER HU-2;Lo;0;L;;;;;N;;;;;
+1B0B2;HENTAIGANA LETTER HU-3;Lo;0;L;;;;;N;;;;;
+1B0B3;HENTAIGANA LETTER HE-1;Lo;0;L;;;;;N;;;;;
+1B0B4;HENTAIGANA LETTER HE-2;Lo;0;L;;;;;N;;;;;
+1B0B5;HENTAIGANA LETTER HE-3;Lo;0;L;;;;;N;;;;;
+1B0B6;HENTAIGANA LETTER HE-4;Lo;0;L;;;;;N;;;;;
+1B0B7;HENTAIGANA LETTER HE-5;Lo;0;L;;;;;N;;;;;
+1B0B8;HENTAIGANA LETTER HE-6;Lo;0;L;;;;;N;;;;;
+1B0B9;HENTAIGANA LETTER HE-7;Lo;0;L;;;;;N;;;;;
+1B0BA;HENTAIGANA LETTER HO-1;Lo;0;L;;;;;N;;;;;
+1B0BB;HENTAIGANA LETTER HO-2;Lo;0;L;;;;;N;;;;;
+1B0BC;HENTAIGANA LETTER HO-3;Lo;0;L;;;;;N;;;;;
+1B0BD;HENTAIGANA LETTER HO-4;Lo;0;L;;;;;N;;;;;
+1B0BE;HENTAIGANA LETTER HO-5;Lo;0;L;;;;;N;;;;;
+1B0BF;HENTAIGANA LETTER HO-6;Lo;0;L;;;;;N;;;;;
+1B0C0;HENTAIGANA LETTER HO-7;Lo;0;L;;;;;N;;;;;
+1B0C1;HENTAIGANA LETTER HO-8;Lo;0;L;;;;;N;;;;;
+1B0C2;HENTAIGANA LETTER MA-1;Lo;0;L;;;;;N;;;;;
+1B0C3;HENTAIGANA LETTER MA-2;Lo;0;L;;;;;N;;;;;
+1B0C4;HENTAIGANA LETTER MA-3;Lo;0;L;;;;;N;;;;;
+1B0C5;HENTAIGANA LETTER MA-4;Lo;0;L;;;;;N;;;;;
+1B0C6;HENTAIGANA LETTER MA-5;Lo;0;L;;;;;N;;;;;
+1B0C7;HENTAIGANA LETTER MA-6;Lo;0;L;;;;;N;;;;;
+1B0C8;HENTAIGANA LETTER MA-7;Lo;0;L;;;;;N;;;;;
+1B0C9;HENTAIGANA LETTER MI-1;Lo;0;L;;;;;N;;;;;
+1B0CA;HENTAIGANA LETTER MI-2;Lo;0;L;;;;;N;;;;;
+1B0CB;HENTAIGANA LETTER MI-3;Lo;0;L;;;;;N;;;;;
+1B0CC;HENTAIGANA LETTER MI-4;Lo;0;L;;;;;N;;;;;
+1B0CD;HENTAIGANA LETTER MI-5;Lo;0;L;;;;;N;;;;;
+1B0CE;HENTAIGANA LETTER MI-6;Lo;0;L;;;;;N;;;;;
+1B0CF;HENTAIGANA LETTER MI-7;Lo;0;L;;;;;N;;;;;
+1B0D0;HENTAIGANA LETTER MU-1;Lo;0;L;;;;;N;;;;;
+1B0D1;HENTAIGANA LETTER MU-2;Lo;0;L;;;;;N;;;;;
+1B0D2;HENTAIGANA LETTER MU-3;Lo;0;L;;;;;N;;;;;
+1B0D3;HENTAIGANA LETTER MU-4;Lo;0;L;;;;;N;;;;;
+1B0D4;HENTAIGANA LETTER ME-1;Lo;0;L;;;;;N;;;;;
+1B0D5;HENTAIGANA LETTER ME-2;Lo;0;L;;;;;N;;;;;
+1B0D6;HENTAIGANA LETTER ME-MA;Lo;0;L;;;;;N;;;;;
+1B0D7;HENTAIGANA LETTER MO-1;Lo;0;L;;;;;N;;;;;
+1B0D8;HENTAIGANA LETTER MO-2;Lo;0;L;;;;;N;;;;;
+1B0D9;HENTAIGANA LETTER MO-3;Lo;0;L;;;;;N;;;;;
+1B0DA;HENTAIGANA LETTER MO-4;Lo;0;L;;;;;N;;;;;
+1B0DB;HENTAIGANA LETTER MO-5;Lo;0;L;;;;;N;;;;;
+1B0DC;HENTAIGANA LETTER MO-6;Lo;0;L;;;;;N;;;;;
+1B0DD;HENTAIGANA LETTER YA-1;Lo;0;L;;;;;N;;;;;
+1B0DE;HENTAIGANA LETTER YA-2;Lo;0;L;;;;;N;;;;;
+1B0DF;HENTAIGANA LETTER YA-3;Lo;0;L;;;;;N;;;;;
+1B0E0;HENTAIGANA LETTER YA-4;Lo;0;L;;;;;N;;;;;
+1B0E1;HENTAIGANA LETTER YA-5;Lo;0;L;;;;;N;;;;;
+1B0E2;HENTAIGANA LETTER YA-YO;Lo;0;L;;;;;N;;;;;
+1B0E3;HENTAIGANA LETTER YU-1;Lo;0;L;;;;;N;;;;;
+1B0E4;HENTAIGANA LETTER YU-2;Lo;0;L;;;;;N;;;;;
+1B0E5;HENTAIGANA LETTER YU-3;Lo;0;L;;;;;N;;;;;
+1B0E6;HENTAIGANA LETTER YU-4;Lo;0;L;;;;;N;;;;;
+1B0E7;HENTAIGANA LETTER YO-1;Lo;0;L;;;;;N;;;;;
+1B0E8;HENTAIGANA LETTER YO-2;Lo;0;L;;;;;N;;;;;
+1B0E9;HENTAIGANA LETTER YO-3;Lo;0;L;;;;;N;;;;;
+1B0EA;HENTAIGANA LETTER YO-4;Lo;0;L;;;;;N;;;;;
+1B0EB;HENTAIGANA LETTER YO-5;Lo;0;L;;;;;N;;;;;
+1B0EC;HENTAIGANA LETTER YO-6;Lo;0;L;;;;;N;;;;;
+1B0ED;HENTAIGANA LETTER RA-1;Lo;0;L;;;;;N;;;;;
+1B0EE;HENTAIGANA LETTER RA-2;Lo;0;L;;;;;N;;;;;
+1B0EF;HENTAIGANA LETTER RA-3;Lo;0;L;;;;;N;;;;;
+1B0F0;HENTAIGANA LETTER RA-4;Lo;0;L;;;;;N;;;;;
+1B0F1;HENTAIGANA LETTER RI-1;Lo;0;L;;;;;N;;;;;
+1B0F2;HENTAIGANA LETTER RI-2;Lo;0;L;;;;;N;;;;;
+1B0F3;HENTAIGANA LETTER RI-3;Lo;0;L;;;;;N;;;;;
+1B0F4;HENTAIGANA LETTER RI-4;Lo;0;L;;;;;N;;;;;
+1B0F5;HENTAIGANA LETTER RI-5;Lo;0;L;;;;;N;;;;;
+1B0F6;HENTAIGANA LETTER RI-6;Lo;0;L;;;;;N;;;;;
+1B0F7;HENTAIGANA LETTER RI-7;Lo;0;L;;;;;N;;;;;
+1B0F8;HENTAIGANA LETTER RU-1;Lo;0;L;;;;;N;;;;;
+1B0F9;HENTAIGANA LETTER RU-2;Lo;0;L;;;;;N;;;;;
+1B0FA;HENTAIGANA LETTER RU-3;Lo;0;L;;;;;N;;;;;
+1B0FB;HENTAIGANA LETTER RU-4;Lo;0;L;;;;;N;;;;;
+1B0FC;HENTAIGANA LETTER RU-5;Lo;0;L;;;;;N;;;;;
+1B0FD;HENTAIGANA LETTER RU-6;Lo;0;L;;;;;N;;;;;
+1B0FE;HENTAIGANA LETTER RE-1;Lo;0;L;;;;;N;;;;;
+1B0FF;HENTAIGANA LETTER RE-2;Lo;0;L;;;;;N;;;;;
+1B100;HENTAIGANA LETTER RE-3;Lo;0;L;;;;;N;;;;;
+1B101;HENTAIGANA LETTER RE-4;Lo;0;L;;;;;N;;;;;
+1B102;HENTAIGANA LETTER RO-1;Lo;0;L;;;;;N;;;;;
+1B103;HENTAIGANA LETTER RO-2;Lo;0;L;;;;;N;;;;;
+1B104;HENTAIGANA LETTER RO-3;Lo;0;L;;;;;N;;;;;
+1B105;HENTAIGANA LETTER RO-4;Lo;0;L;;;;;N;;;;;
+1B106;HENTAIGANA LETTER RO-5;Lo;0;L;;;;;N;;;;;
+1B107;HENTAIGANA LETTER RO-6;Lo;0;L;;;;;N;;;;;
+1B108;HENTAIGANA LETTER WA-1;Lo;0;L;;;;;N;;;;;
+1B109;HENTAIGANA LETTER WA-2;Lo;0;L;;;;;N;;;;;
+1B10A;HENTAIGANA LETTER WA-3;Lo;0;L;;;;;N;;;;;
+1B10B;HENTAIGANA LETTER WA-4;Lo;0;L;;;;;N;;;;;
+1B10C;HENTAIGANA LETTER WA-5;Lo;0;L;;;;;N;;;;;
+1B10D;HENTAIGANA LETTER WI-1;Lo;0;L;;;;;N;;;;;
+1B10E;HENTAIGANA LETTER WI-2;Lo;0;L;;;;;N;;;;;
+1B10F;HENTAIGANA LETTER WI-3;Lo;0;L;;;;;N;;;;;
+1B110;HENTAIGANA LETTER WI-4;Lo;0;L;;;;;N;;;;;
+1B111;HENTAIGANA LETTER WI-5;Lo;0;L;;;;;N;;;;;
+1B112;HENTAIGANA LETTER WE-1;Lo;0;L;;;;;N;;;;;
+1B113;HENTAIGANA LETTER WE-2;Lo;0;L;;;;;N;;;;;
+1B114;HENTAIGANA LETTER WE-3;Lo;0;L;;;;;N;;;;;
+1B115;HENTAIGANA LETTER WE-4;Lo;0;L;;;;;N;;;;;
+1B116;HENTAIGANA LETTER WO-1;Lo;0;L;;;;;N;;;;;
+1B117;HENTAIGANA LETTER WO-2;Lo;0;L;;;;;N;;;;;
+1B118;HENTAIGANA LETTER WO-3;Lo;0;L;;;;;N;;;;;
+1B119;HENTAIGANA LETTER WO-4;Lo;0;L;;;;;N;;;;;
+1B11A;HENTAIGANA LETTER WO-5;Lo;0;L;;;;;N;;;;;
+1B11B;HENTAIGANA LETTER WO-6;Lo;0;L;;;;;N;;;;;
+1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;;
+1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;;
+1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;;
+1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
+1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
+1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
+1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
+1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
+1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
+1B167;KATAKANA LETTER SMALL N;Lo;0;L;;;;;N;;;;;
+1B170;NUSHU CHARACTER-1B170;Lo;0;L;;;;;N;;;;;
+1B171;NUSHU CHARACTER-1B171;Lo;0;L;;;;;N;;;;;
+1B172;NUSHU CHARACTER-1B172;Lo;0;L;;;;;N;;;;;
+1B173;NUSHU CHARACTER-1B173;Lo;0;L;;;;;N;;;;;
+1B174;NUSHU CHARACTER-1B174;Lo;0;L;;;;;N;;;;;
+1B175;NUSHU CHARACTER-1B175;Lo;0;L;;;;;N;;;;;
+1B176;NUSHU CHARACTER-1B176;Lo;0;L;;;;;N;;;;;
+1B177;NUSHU CHARACTER-1B177;Lo;0;L;;;;;N;;;;;
+1B178;NUSHU CHARACTER-1B178;Lo;0;L;;;;;N;;;;;
+1B179;NUSHU CHARACTER-1B179;Lo;0;L;;;;;N;;;;;
+1B17A;NUSHU CHARACTER-1B17A;Lo;0;L;;;;;N;;;;;
+1B17B;NUSHU CHARACTER-1B17B;Lo;0;L;;;;;N;;;;;
+1B17C;NUSHU CHARACTER-1B17C;Lo;0;L;;;;;N;;;;;
+1B17D;NUSHU CHARACTER-1B17D;Lo;0;L;;;;;N;;;;;
+1B17E;NUSHU CHARACTER-1B17E;Lo;0;L;;;;;N;;;;;
+1B17F;NUSHU CHARACTER-1B17F;Lo;0;L;;;;;N;;;;;
+1B180;NUSHU CHARACTER-1B180;Lo;0;L;;;;;N;;;;;
+1B181;NUSHU CHARACTER-1B181;Lo;0;L;;;;;N;;;;;
+1B182;NUSHU CHARACTER-1B182;Lo;0;L;;;;;N;;;;;
+1B183;NUSHU CHARACTER-1B183;Lo;0;L;;;;;N;;;;;
+1B184;NUSHU CHARACTER-1B184;Lo;0;L;;;;;N;;;;;
+1B185;NUSHU CHARACTER-1B185;Lo;0;L;;;;;N;;;;;
+1B186;NUSHU CHARACTER-1B186;Lo;0;L;;;;;N;;;;;
+1B187;NUSHU CHARACTER-1B187;Lo;0;L;;;;;N;;;;;
+1B188;NUSHU CHARACTER-1B188;Lo;0;L;;;;;N;;;;;
+1B189;NUSHU CHARACTER-1B189;Lo;0;L;;;;;N;;;;;
+1B18A;NUSHU CHARACTER-1B18A;Lo;0;L;;;;;N;;;;;
+1B18B;NUSHU CHARACTER-1B18B;Lo;0;L;;;;;N;;;;;
+1B18C;NUSHU CHARACTER-1B18C;Lo;0;L;;;;;N;;;;;
+1B18D;NUSHU CHARACTER-1B18D;Lo;0;L;;;;;N;;;;;
+1B18E;NUSHU CHARACTER-1B18E;Lo;0;L;;;;;N;;;;;
+1B18F;NUSHU CHARACTER-1B18F;Lo;0;L;;;;;N;;;;;
+1B190;NUSHU CHARACTER-1B190;Lo;0;L;;;;;N;;;;;
+1B191;NUSHU CHARACTER-1B191;Lo;0;L;;;;;N;;;;;
+1B192;NUSHU CHARACTER-1B192;Lo;0;L;;;;;N;;;;;
+1B193;NUSHU CHARACTER-1B193;Lo;0;L;;;;;N;;;;;
+1B194;NUSHU CHARACTER-1B194;Lo;0;L;;;;;N;;;;;
+1B195;NUSHU CHARACTER-1B195;Lo;0;L;;;;;N;;;;;
+1B196;NUSHU CHARACTER-1B196;Lo;0;L;;;;;N;;;;;
+1B197;NUSHU CHARACTER-1B197;Lo;0;L;;;;;N;;;;;
+1B198;NUSHU CHARACTER-1B198;Lo;0;L;;;;;N;;;;;
+1B199;NUSHU CHARACTER-1B199;Lo;0;L;;;;;N;;;;;
+1B19A;NUSHU CHARACTER-1B19A;Lo;0;L;;;;;N;;;;;
+1B19B;NUSHU CHARACTER-1B19B;Lo;0;L;;;;;N;;;;;
+1B19C;NUSHU CHARACTER-1B19C;Lo;0;L;;;;;N;;;;;
+1B19D;NUSHU CHARACTER-1B19D;Lo;0;L;;;;;N;;;;;
+1B19E;NUSHU CHARACTER-1B19E;Lo;0;L;;;;;N;;;;;
+1B19F;NUSHU CHARACTER-1B19F;Lo;0;L;;;;;N;;;;;
+1B1A0;NUSHU CHARACTER-1B1A0;Lo;0;L;;;;;N;;;;;
+1B1A1;NUSHU CHARACTER-1B1A1;Lo;0;L;;;;;N;;;;;
+1B1A2;NUSHU CHARACTER-1B1A2;Lo;0;L;;;;;N;;;;;
+1B1A3;NUSHU CHARACTER-1B1A3;Lo;0;L;;;;;N;;;;;
+1B1A4;NUSHU CHARACTER-1B1A4;Lo;0;L;;;;;N;;;;;
+1B1A5;NUSHU CHARACTER-1B1A5;Lo;0;L;;;;;N;;;;;
+1B1A6;NUSHU CHARACTER-1B1A6;Lo;0;L;;;;;N;;;;;
+1B1A7;NUSHU CHARACTER-1B1A7;Lo;0;L;;;;;N;;;;;
+1B1A8;NUSHU CHARACTER-1B1A8;Lo;0;L;;;;;N;;;;;
+1B1A9;NUSHU CHARACTER-1B1A9;Lo;0;L;;;;;N;;;;;
+1B1AA;NUSHU CHARACTER-1B1AA;Lo;0;L;;;;;N;;;;;
+1B1AB;NUSHU CHARACTER-1B1AB;Lo;0;L;;;;;N;;;;;
+1B1AC;NUSHU CHARACTER-1B1AC;Lo;0;L;;;;;N;;;;;
+1B1AD;NUSHU CHARACTER-1B1AD;Lo;0;L;;;;;N;;;;;
+1B1AE;NUSHU CHARACTER-1B1AE;Lo;0;L;;;;;N;;;;;
+1B1AF;NUSHU CHARACTER-1B1AF;Lo;0;L;;;;;N;;;;;
+1B1B0;NUSHU CHARACTER-1B1B0;Lo;0;L;;;;;N;;;;;
+1B1B1;NUSHU CHARACTER-1B1B1;Lo;0;L;;;;;N;;;;;
+1B1B2;NUSHU CHARACTER-1B1B2;Lo;0;L;;;;;N;;;;;
+1B1B3;NUSHU CHARACTER-1B1B3;Lo;0;L;;;;;N;;;;;
+1B1B4;NUSHU CHARACTER-1B1B4;Lo;0;L;;;;;N;;;;;
+1B1B5;NUSHU CHARACTER-1B1B5;Lo;0;L;;;;;N;;;;;
+1B1B6;NUSHU CHARACTER-1B1B6;Lo;0;L;;;;;N;;;;;
+1B1B7;NUSHU CHARACTER-1B1B7;Lo;0;L;;;;;N;;;;;
+1B1B8;NUSHU CHARACTER-1B1B8;Lo;0;L;;;;;N;;;;;
+1B1B9;NUSHU CHARACTER-1B1B9;Lo;0;L;;;;;N;;;;;
+1B1BA;NUSHU CHARACTER-1B1BA;Lo;0;L;;;;;N;;;;;
+1B1BB;NUSHU CHARACTER-1B1BB;Lo;0;L;;;;;N;;;;;
+1B1BC;NUSHU CHARACTER-1B1BC;Lo;0;L;;;;;N;;;;;
+1B1BD;NUSHU CHARACTER-1B1BD;Lo;0;L;;;;;N;;;;;
+1B1BE;NUSHU CHARACTER-1B1BE;Lo;0;L;;;;;N;;;;;
+1B1BF;NUSHU CHARACTER-1B1BF;Lo;0;L;;;;;N;;;;;
+1B1C0;NUSHU CHARACTER-1B1C0;Lo;0;L;;;;;N;;;;;
+1B1C1;NUSHU CHARACTER-1B1C1;Lo;0;L;;;;;N;;;;;
+1B1C2;NUSHU CHARACTER-1B1C2;Lo;0;L;;;;;N;;;;;
+1B1C3;NUSHU CHARACTER-1B1C3;Lo;0;L;;;;;N;;;;;
+1B1C4;NUSHU CHARACTER-1B1C4;Lo;0;L;;;;;N;;;;;
+1B1C5;NUSHU CHARACTER-1B1C5;Lo;0;L;;;;;N;;;;;
+1B1C6;NUSHU CHARACTER-1B1C6;Lo;0;L;;;;;N;;;;;
+1B1C7;NUSHU CHARACTER-1B1C7;Lo;0;L;;;;;N;;;;;
+1B1C8;NUSHU CHARACTER-1B1C8;Lo;0;L;;;;;N;;;;;
+1B1C9;NUSHU CHARACTER-1B1C9;Lo;0;L;;;;;N;;;;;
+1B1CA;NUSHU CHARACTER-1B1CA;Lo;0;L;;;;;N;;;;;
+1B1CB;NUSHU CHARACTER-1B1CB;Lo;0;L;;;;;N;;;;;
+1B1CC;NUSHU CHARACTER-1B1CC;Lo;0;L;;;;;N;;;;;
+1B1CD;NUSHU CHARACTER-1B1CD;Lo;0;L;;;;;N;;;;;
+1B1CE;NUSHU CHARACTER-1B1CE;Lo;0;L;;;;;N;;;;;
+1B1CF;NUSHU CHARACTER-1B1CF;Lo;0;L;;;;;N;;;;;
+1B1D0;NUSHU CHARACTER-1B1D0;Lo;0;L;;;;;N;;;;;
+1B1D1;NUSHU CHARACTER-1B1D1;Lo;0;L;;;;;N;;;;;
+1B1D2;NUSHU CHARACTER-1B1D2;Lo;0;L;;;;;N;;;;;
+1B1D3;NUSHU CHARACTER-1B1D3;Lo;0;L;;;;;N;;;;;
+1B1D4;NUSHU CHARACTER-1B1D4;Lo;0;L;;;;;N;;;;;
+1B1D5;NUSHU CHARACTER-1B1D5;Lo;0;L;;;;;N;;;;;
+1B1D6;NUSHU CHARACTER-1B1D6;Lo;0;L;;;;;N;;;;;
+1B1D7;NUSHU CHARACTER-1B1D7;Lo;0;L;;;;;N;;;;;
+1B1D8;NUSHU CHARACTER-1B1D8;Lo;0;L;;;;;N;;;;;
+1B1D9;NUSHU CHARACTER-1B1D9;Lo;0;L;;;;;N;;;;;
+1B1DA;NUSHU CHARACTER-1B1DA;Lo;0;L;;;;;N;;;;;
+1B1DB;NUSHU CHARACTER-1B1DB;Lo;0;L;;;;;N;;;;;
+1B1DC;NUSHU CHARACTER-1B1DC;Lo;0;L;;;;;N;;;;;
+1B1DD;NUSHU CHARACTER-1B1DD;Lo;0;L;;;;;N;;;;;
+1B1DE;NUSHU CHARACTER-1B1DE;Lo;0;L;;;;;N;;;;;
+1B1DF;NUSHU CHARACTER-1B1DF;Lo;0;L;;;;;N;;;;;
+1B1E0;NUSHU CHARACTER-1B1E0;Lo;0;L;;;;;N;;;;;
+1B1E1;NUSHU CHARACTER-1B1E1;Lo;0;L;;;;;N;;;;;
+1B1E2;NUSHU CHARACTER-1B1E2;Lo;0;L;;;;;N;;;;;
+1B1E3;NUSHU CHARACTER-1B1E3;Lo;0;L;;;;;N;;;;;
+1B1E4;NUSHU CHARACTER-1B1E4;Lo;0;L;;;;;N;;;;;
+1B1E5;NUSHU CHARACTER-1B1E5;Lo;0;L;;;;;N;;;;;
+1B1E6;NUSHU CHARACTER-1B1E6;Lo;0;L;;;;;N;;;;;
+1B1E7;NUSHU CHARACTER-1B1E7;Lo;0;L;;;;;N;;;;;
+1B1E8;NUSHU CHARACTER-1B1E8;Lo;0;L;;;;;N;;;;;
+1B1E9;NUSHU CHARACTER-1B1E9;Lo;0;L;;;;;N;;;;;
+1B1EA;NUSHU CHARACTER-1B1EA;Lo;0;L;;;;;N;;;;;
+1B1EB;NUSHU CHARACTER-1B1EB;Lo;0;L;;;;;N;;;;;
+1B1EC;NUSHU CHARACTER-1B1EC;Lo;0;L;;;;;N;;;;;
+1B1ED;NUSHU CHARACTER-1B1ED;Lo;0;L;;;;;N;;;;;
+1B1EE;NUSHU CHARACTER-1B1EE;Lo;0;L;;;;;N;;;;;
+1B1EF;NUSHU CHARACTER-1B1EF;Lo;0;L;;;;;N;;;;;
+1B1F0;NUSHU CHARACTER-1B1F0;Lo;0;L;;;;;N;;;;;
+1B1F1;NUSHU CHARACTER-1B1F1;Lo;0;L;;;;;N;;;;;
+1B1F2;NUSHU CHARACTER-1B1F2;Lo;0;L;;;;;N;;;;;
+1B1F3;NUSHU CHARACTER-1B1F3;Lo;0;L;;;;;N;;;;;
+1B1F4;NUSHU CHARACTER-1B1F4;Lo;0;L;;;;;N;;;;;
+1B1F5;NUSHU CHARACTER-1B1F5;Lo;0;L;;;;;N;;;;;
+1B1F6;NUSHU CHARACTER-1B1F6;Lo;0;L;;;;;N;;;;;
+1B1F7;NUSHU CHARACTER-1B1F7;Lo;0;L;;;;;N;;;;;
+1B1F8;NUSHU CHARACTER-1B1F8;Lo;0;L;;;;;N;;;;;
+1B1F9;NUSHU CHARACTER-1B1F9;Lo;0;L;;;;;N;;;;;
+1B1FA;NUSHU CHARACTER-1B1FA;Lo;0;L;;;;;N;;;;;
+1B1FB;NUSHU CHARACTER-1B1FB;Lo;0;L;;;;;N;;;;;
+1B1FC;NUSHU CHARACTER-1B1FC;Lo;0;L;;;;;N;;;;;
+1B1FD;NUSHU CHARACTER-1B1FD;Lo;0;L;;;;;N;;;;;
+1B1FE;NUSHU CHARACTER-1B1FE;Lo;0;L;;;;;N;;;;;
+1B1FF;NUSHU CHARACTER-1B1FF;Lo;0;L;;;;;N;;;;;
+1B200;NUSHU CHARACTER-1B200;Lo;0;L;;;;;N;;;;;
+1B201;NUSHU CHARACTER-1B201;Lo;0;L;;;;;N;;;;;
+1B202;NUSHU CHARACTER-1B202;Lo;0;L;;;;;N;;;;;
+1B203;NUSHU CHARACTER-1B203;Lo;0;L;;;;;N;;;;;
+1B204;NUSHU CHARACTER-1B204;Lo;0;L;;;;;N;;;;;
+1B205;NUSHU CHARACTER-1B205;Lo;0;L;;;;;N;;;;;
+1B206;NUSHU CHARACTER-1B206;Lo;0;L;;;;;N;;;;;
+1B207;NUSHU CHARACTER-1B207;Lo;0;L;;;;;N;;;;;
+1B208;NUSHU CHARACTER-1B208;Lo;0;L;;;;;N;;;;;
+1B209;NUSHU CHARACTER-1B209;Lo;0;L;;;;;N;;;;;
+1B20A;NUSHU CHARACTER-1B20A;Lo;0;L;;;;;N;;;;;
+1B20B;NUSHU CHARACTER-1B20B;Lo;0;L;;;;;N;;;;;
+1B20C;NUSHU CHARACTER-1B20C;Lo;0;L;;;;;N;;;;;
+1B20D;NUSHU CHARACTER-1B20D;Lo;0;L;;;;;N;;;;;
+1B20E;NUSHU CHARACTER-1B20E;Lo;0;L;;;;;N;;;;;
+1B20F;NUSHU CHARACTER-1B20F;Lo;0;L;;;;;N;;;;;
+1B210;NUSHU CHARACTER-1B210;Lo;0;L;;;;;N;;;;;
+1B211;NUSHU CHARACTER-1B211;Lo;0;L;;;;;N;;;;;
+1B212;NUSHU CHARACTER-1B212;Lo;0;L;;;;;N;;;;;
+1B213;NUSHU CHARACTER-1B213;Lo;0;L;;;;;N;;;;;
+1B214;NUSHU CHARACTER-1B214;Lo;0;L;;;;;N;;;;;
+1B215;NUSHU CHARACTER-1B215;Lo;0;L;;;;;N;;;;;
+1B216;NUSHU CHARACTER-1B216;Lo;0;L;;;;;N;;;;;
+1B217;NUSHU CHARACTER-1B217;Lo;0;L;;;;;N;;;;;
+1B218;NUSHU CHARACTER-1B218;Lo;0;L;;;;;N;;;;;
+1B219;NUSHU CHARACTER-1B219;Lo;0;L;;;;;N;;;;;
+1B21A;NUSHU CHARACTER-1B21A;Lo;0;L;;;;;N;;;;;
+1B21B;NUSHU CHARACTER-1B21B;Lo;0;L;;;;;N;;;;;
+1B21C;NUSHU CHARACTER-1B21C;Lo;0;L;;;;;N;;;;;
+1B21D;NUSHU CHARACTER-1B21D;Lo;0;L;;;;;N;;;;;
+1B21E;NUSHU CHARACTER-1B21E;Lo;0;L;;;;;N;;;;;
+1B21F;NUSHU CHARACTER-1B21F;Lo;0;L;;;;;N;;;;;
+1B220;NUSHU CHARACTER-1B220;Lo;0;L;;;;;N;;;;;
+1B221;NUSHU CHARACTER-1B221;Lo;0;L;;;;;N;;;;;
+1B222;NUSHU CHARACTER-1B222;Lo;0;L;;;;;N;;;;;
+1B223;NUSHU CHARACTER-1B223;Lo;0;L;;;;;N;;;;;
+1B224;NUSHU CHARACTER-1B224;Lo;0;L;;;;;N;;;;;
+1B225;NUSHU CHARACTER-1B225;Lo;0;L;;;;;N;;;;;
+1B226;NUSHU CHARACTER-1B226;Lo;0;L;;;;;N;;;;;
+1B227;NUSHU CHARACTER-1B227;Lo;0;L;;;;;N;;;;;
+1B228;NUSHU CHARACTER-1B228;Lo;0;L;;;;;N;;;;;
+1B229;NUSHU CHARACTER-1B229;Lo;0;L;;;;;N;;;;;
+1B22A;NUSHU CHARACTER-1B22A;Lo;0;L;;;;;N;;;;;
+1B22B;NUSHU CHARACTER-1B22B;Lo;0;L;;;;;N;;;;;
+1B22C;NUSHU CHARACTER-1B22C;Lo;0;L;;;;;N;;;;;
+1B22D;NUSHU CHARACTER-1B22D;Lo;0;L;;;;;N;;;;;
+1B22E;NUSHU CHARACTER-1B22E;Lo;0;L;;;;;N;;;;;
+1B22F;NUSHU CHARACTER-1B22F;Lo;0;L;;;;;N;;;;;
+1B230;NUSHU CHARACTER-1B230;Lo;0;L;;;;;N;;;;;
+1B231;NUSHU CHARACTER-1B231;Lo;0;L;;;;;N;;;;;
+1B232;NUSHU CHARACTER-1B232;Lo;0;L;;;;;N;;;;;
+1B233;NUSHU CHARACTER-1B233;Lo;0;L;;;;;N;;;;;
+1B234;NUSHU CHARACTER-1B234;Lo;0;L;;;;;N;;;;;
+1B235;NUSHU CHARACTER-1B235;Lo;0;L;;;;;N;;;;;
+1B236;NUSHU CHARACTER-1B236;Lo;0;L;;;;;N;;;;;
+1B237;NUSHU CHARACTER-1B237;Lo;0;L;;;;;N;;;;;
+1B238;NUSHU CHARACTER-1B238;Lo;0;L;;;;;N;;;;;
+1B239;NUSHU CHARACTER-1B239;Lo;0;L;;;;;N;;;;;
+1B23A;NUSHU CHARACTER-1B23A;Lo;0;L;;;;;N;;;;;
+1B23B;NUSHU CHARACTER-1B23B;Lo;0;L;;;;;N;;;;;
+1B23C;NUSHU CHARACTER-1B23C;Lo;0;L;;;;;N;;;;;
+1B23D;NUSHU CHARACTER-1B23D;Lo;0;L;;;;;N;;;;;
+1B23E;NUSHU CHARACTER-1B23E;Lo;0;L;;;;;N;;;;;
+1B23F;NUSHU CHARACTER-1B23F;Lo;0;L;;;;;N;;;;;
+1B240;NUSHU CHARACTER-1B240;Lo;0;L;;;;;N;;;;;
+1B241;NUSHU CHARACTER-1B241;Lo;0;L;;;;;N;;;;;
+1B242;NUSHU CHARACTER-1B242;Lo;0;L;;;;;N;;;;;
+1B243;NUSHU CHARACTER-1B243;Lo;0;L;;;;;N;;;;;
+1B244;NUSHU CHARACTER-1B244;Lo;0;L;;;;;N;;;;;
+1B245;NUSHU CHARACTER-1B245;Lo;0;L;;;;;N;;;;;
+1B246;NUSHU CHARACTER-1B246;Lo;0;L;;;;;N;;;;;
+1B247;NUSHU CHARACTER-1B247;Lo;0;L;;;;;N;;;;;
+1B248;NUSHU CHARACTER-1B248;Lo;0;L;;;;;N;;;;;
+1B249;NUSHU CHARACTER-1B249;Lo;0;L;;;;;N;;;;;
+1B24A;NUSHU CHARACTER-1B24A;Lo;0;L;;;;;N;;;;;
+1B24B;NUSHU CHARACTER-1B24B;Lo;0;L;;;;;N;;;;;
+1B24C;NUSHU CHARACTER-1B24C;Lo;0;L;;;;;N;;;;;
+1B24D;NUSHU CHARACTER-1B24D;Lo;0;L;;;;;N;;;;;
+1B24E;NUSHU CHARACTER-1B24E;Lo;0;L;;;;;N;;;;;
+1B24F;NUSHU CHARACTER-1B24F;Lo;0;L;;;;;N;;;;;
+1B250;NUSHU CHARACTER-1B250;Lo;0;L;;;;;N;;;;;
+1B251;NUSHU CHARACTER-1B251;Lo;0;L;;;;;N;;;;;
+1B252;NUSHU CHARACTER-1B252;Lo;0;L;;;;;N;;;;;
+1B253;NUSHU CHARACTER-1B253;Lo;0;L;;;;;N;;;;;
+1B254;NUSHU CHARACTER-1B254;Lo;0;L;;;;;N;;;;;
+1B255;NUSHU CHARACTER-1B255;Lo;0;L;;;;;N;;;;;
+1B256;NUSHU CHARACTER-1B256;Lo;0;L;;;;;N;;;;;
+1B257;NUSHU CHARACTER-1B257;Lo;0;L;;;;;N;;;;;
+1B258;NUSHU CHARACTER-1B258;Lo;0;L;;;;;N;;;;;
+1B259;NUSHU CHARACTER-1B259;Lo;0;L;;;;;N;;;;;
+1B25A;NUSHU CHARACTER-1B25A;Lo;0;L;;;;;N;;;;;
+1B25B;NUSHU CHARACTER-1B25B;Lo;0;L;;;;;N;;;;;
+1B25C;NUSHU CHARACTER-1B25C;Lo;0;L;;;;;N;;;;;
+1B25D;NUSHU CHARACTER-1B25D;Lo;0;L;;;;;N;;;;;
+1B25E;NUSHU CHARACTER-1B25E;Lo;0;L;;;;;N;;;;;
+1B25F;NUSHU CHARACTER-1B25F;Lo;0;L;;;;;N;;;;;
+1B260;NUSHU CHARACTER-1B260;Lo;0;L;;;;;N;;;;;
+1B261;NUSHU CHARACTER-1B261;Lo;0;L;;;;;N;;;;;
+1B262;NUSHU CHARACTER-1B262;Lo;0;L;;;;;N;;;;;
+1B263;NUSHU CHARACTER-1B263;Lo;0;L;;;;;N;;;;;
+1B264;NUSHU CHARACTER-1B264;Lo;0;L;;;;;N;;;;;
+1B265;NUSHU CHARACTER-1B265;Lo;0;L;;;;;N;;;;;
+1B266;NUSHU CHARACTER-1B266;Lo;0;L;;;;;N;;;;;
+1B267;NUSHU CHARACTER-1B267;Lo;0;L;;;;;N;;;;;
+1B268;NUSHU CHARACTER-1B268;Lo;0;L;;;;;N;;;;;
+1B269;NUSHU CHARACTER-1B269;Lo;0;L;;;;;N;;;;;
+1B26A;NUSHU CHARACTER-1B26A;Lo;0;L;;;;;N;;;;;
+1B26B;NUSHU CHARACTER-1B26B;Lo;0;L;;;;;N;;;;;
+1B26C;NUSHU CHARACTER-1B26C;Lo;0;L;;;;;N;;;;;
+1B26D;NUSHU CHARACTER-1B26D;Lo;0;L;;;;;N;;;;;
+1B26E;NUSHU CHARACTER-1B26E;Lo;0;L;;;;;N;;;;;
+1B26F;NUSHU CHARACTER-1B26F;Lo;0;L;;;;;N;;;;;
+1B270;NUSHU CHARACTER-1B270;Lo;0;L;;;;;N;;;;;
+1B271;NUSHU CHARACTER-1B271;Lo;0;L;;;;;N;;;;;
+1B272;NUSHU CHARACTER-1B272;Lo;0;L;;;;;N;;;;;
+1B273;NUSHU CHARACTER-1B273;Lo;0;L;;;;;N;;;;;
+1B274;NUSHU CHARACTER-1B274;Lo;0;L;;;;;N;;;;;
+1B275;NUSHU CHARACTER-1B275;Lo;0;L;;;;;N;;;;;
+1B276;NUSHU CHARACTER-1B276;Lo;0;L;;;;;N;;;;;
+1B277;NUSHU CHARACTER-1B277;Lo;0;L;;;;;N;;;;;
+1B278;NUSHU CHARACTER-1B278;Lo;0;L;;;;;N;;;;;
+1B279;NUSHU CHARACTER-1B279;Lo;0;L;;;;;N;;;;;
+1B27A;NUSHU CHARACTER-1B27A;Lo;0;L;;;;;N;;;;;
+1B27B;NUSHU CHARACTER-1B27B;Lo;0;L;;;;;N;;;;;
+1B27C;NUSHU CHARACTER-1B27C;Lo;0;L;;;;;N;;;;;
+1B27D;NUSHU CHARACTER-1B27D;Lo;0;L;;;;;N;;;;;
+1B27E;NUSHU CHARACTER-1B27E;Lo;0;L;;;;;N;;;;;
+1B27F;NUSHU CHARACTER-1B27F;Lo;0;L;;;;;N;;;;;
+1B280;NUSHU CHARACTER-1B280;Lo;0;L;;;;;N;;;;;
+1B281;NUSHU CHARACTER-1B281;Lo;0;L;;;;;N;;;;;
+1B282;NUSHU CHARACTER-1B282;Lo;0;L;;;;;N;;;;;
+1B283;NUSHU CHARACTER-1B283;Lo;0;L;;;;;N;;;;;
+1B284;NUSHU CHARACTER-1B284;Lo;0;L;;;;;N;;;;;
+1B285;NUSHU CHARACTER-1B285;Lo;0;L;;;;;N;;;;;
+1B286;NUSHU CHARACTER-1B286;Lo;0;L;;;;;N;;;;;
+1B287;NUSHU CHARACTER-1B287;Lo;0;L;;;;;N;;;;;
+1B288;NUSHU CHARACTER-1B288;Lo;0;L;;;;;N;;;;;
+1B289;NUSHU CHARACTER-1B289;Lo;0;L;;;;;N;;;;;
+1B28A;NUSHU CHARACTER-1B28A;Lo;0;L;;;;;N;;;;;
+1B28B;NUSHU CHARACTER-1B28B;Lo;0;L;;;;;N;;;;;
+1B28C;NUSHU CHARACTER-1B28C;Lo;0;L;;;;;N;;;;;
+1B28D;NUSHU CHARACTER-1B28D;Lo;0;L;;;;;N;;;;;
+1B28E;NUSHU CHARACTER-1B28E;Lo;0;L;;;;;N;;;;;
+1B28F;NUSHU CHARACTER-1B28F;Lo;0;L;;;;;N;;;;;
+1B290;NUSHU CHARACTER-1B290;Lo;0;L;;;;;N;;;;;
+1B291;NUSHU CHARACTER-1B291;Lo;0;L;;;;;N;;;;;
+1B292;NUSHU CHARACTER-1B292;Lo;0;L;;;;;N;;;;;
+1B293;NUSHU CHARACTER-1B293;Lo;0;L;;;;;N;;;;;
+1B294;NUSHU CHARACTER-1B294;Lo;0;L;;;;;N;;;;;
+1B295;NUSHU CHARACTER-1B295;Lo;0;L;;;;;N;;;;;
+1B296;NUSHU CHARACTER-1B296;Lo;0;L;;;;;N;;;;;
+1B297;NUSHU CHARACTER-1B297;Lo;0;L;;;;;N;;;;;
+1B298;NUSHU CHARACTER-1B298;Lo;0;L;;;;;N;;;;;
+1B299;NUSHU CHARACTER-1B299;Lo;0;L;;;;;N;;;;;
+1B29A;NUSHU CHARACTER-1B29A;Lo;0;L;;;;;N;;;;;
+1B29B;NUSHU CHARACTER-1B29B;Lo;0;L;;;;;N;;;;;
+1B29C;NUSHU CHARACTER-1B29C;Lo;0;L;;;;;N;;;;;
+1B29D;NUSHU CHARACTER-1B29D;Lo;0;L;;;;;N;;;;;
+1B29E;NUSHU CHARACTER-1B29E;Lo;0;L;;;;;N;;;;;
+1B29F;NUSHU CHARACTER-1B29F;Lo;0;L;;;;;N;;;;;
+1B2A0;NUSHU CHARACTER-1B2A0;Lo;0;L;;;;;N;;;;;
+1B2A1;NUSHU CHARACTER-1B2A1;Lo;0;L;;;;;N;;;;;
+1B2A2;NUSHU CHARACTER-1B2A2;Lo;0;L;;;;;N;;;;;
+1B2A3;NUSHU CHARACTER-1B2A3;Lo;0;L;;;;;N;;;;;
+1B2A4;NUSHU CHARACTER-1B2A4;Lo;0;L;;;;;N;;;;;
+1B2A5;NUSHU CHARACTER-1B2A5;Lo;0;L;;;;;N;;;;;
+1B2A6;NUSHU CHARACTER-1B2A6;Lo;0;L;;;;;N;;;;;
+1B2A7;NUSHU CHARACTER-1B2A7;Lo;0;L;;;;;N;;;;;
+1B2A8;NUSHU CHARACTER-1B2A8;Lo;0;L;;;;;N;;;;;
+1B2A9;NUSHU CHARACTER-1B2A9;Lo;0;L;;;;;N;;;;;
+1B2AA;NUSHU CHARACTER-1B2AA;Lo;0;L;;;;;N;;;;;
+1B2AB;NUSHU CHARACTER-1B2AB;Lo;0;L;;;;;N;;;;;
+1B2AC;NUSHU CHARACTER-1B2AC;Lo;0;L;;;;;N;;;;;
+1B2AD;NUSHU CHARACTER-1B2AD;Lo;0;L;;;;;N;;;;;
+1B2AE;NUSHU CHARACTER-1B2AE;Lo;0;L;;;;;N;;;;;
+1B2AF;NUSHU CHARACTER-1B2AF;Lo;0;L;;;;;N;;;;;
+1B2B0;NUSHU CHARACTER-1B2B0;Lo;0;L;;;;;N;;;;;
+1B2B1;NUSHU CHARACTER-1B2B1;Lo;0;L;;;;;N;;;;;
+1B2B2;NUSHU CHARACTER-1B2B2;Lo;0;L;;;;;N;;;;;
+1B2B3;NUSHU CHARACTER-1B2B3;Lo;0;L;;;;;N;;;;;
+1B2B4;NUSHU CHARACTER-1B2B4;Lo;0;L;;;;;N;;;;;
+1B2B5;NUSHU CHARACTER-1B2B5;Lo;0;L;;;;;N;;;;;
+1B2B6;NUSHU CHARACTER-1B2B6;Lo;0;L;;;;;N;;;;;
+1B2B7;NUSHU CHARACTER-1B2B7;Lo;0;L;;;;;N;;;;;
+1B2B8;NUSHU CHARACTER-1B2B8;Lo;0;L;;;;;N;;;;;
+1B2B9;NUSHU CHARACTER-1B2B9;Lo;0;L;;;;;N;;;;;
+1B2BA;NUSHU CHARACTER-1B2BA;Lo;0;L;;;;;N;;;;;
+1B2BB;NUSHU CHARACTER-1B2BB;Lo;0;L;;;;;N;;;;;
+1B2BC;NUSHU CHARACTER-1B2BC;Lo;0;L;;;;;N;;;;;
+1B2BD;NUSHU CHARACTER-1B2BD;Lo;0;L;;;;;N;;;;;
+1B2BE;NUSHU CHARACTER-1B2BE;Lo;0;L;;;;;N;;;;;
+1B2BF;NUSHU CHARACTER-1B2BF;Lo;0;L;;;;;N;;;;;
+1B2C0;NUSHU CHARACTER-1B2C0;Lo;0;L;;;;;N;;;;;
+1B2C1;NUSHU CHARACTER-1B2C1;Lo;0;L;;;;;N;;;;;
+1B2C2;NUSHU CHARACTER-1B2C2;Lo;0;L;;;;;N;;;;;
+1B2C3;NUSHU CHARACTER-1B2C3;Lo;0;L;;;;;N;;;;;
+1B2C4;NUSHU CHARACTER-1B2C4;Lo;0;L;;;;;N;;;;;
+1B2C5;NUSHU CHARACTER-1B2C5;Lo;0;L;;;;;N;;;;;
+1B2C6;NUSHU CHARACTER-1B2C6;Lo;0;L;;;;;N;;;;;
+1B2C7;NUSHU CHARACTER-1B2C7;Lo;0;L;;;;;N;;;;;
+1B2C8;NUSHU CHARACTER-1B2C8;Lo;0;L;;;;;N;;;;;
+1B2C9;NUSHU CHARACTER-1B2C9;Lo;0;L;;;;;N;;;;;
+1B2CA;NUSHU CHARACTER-1B2CA;Lo;0;L;;;;;N;;;;;
+1B2CB;NUSHU CHARACTER-1B2CB;Lo;0;L;;;;;N;;;;;
+1B2CC;NUSHU CHARACTER-1B2CC;Lo;0;L;;;;;N;;;;;
+1B2CD;NUSHU CHARACTER-1B2CD;Lo;0;L;;;;;N;;;;;
+1B2CE;NUSHU CHARACTER-1B2CE;Lo;0;L;;;;;N;;;;;
+1B2CF;NUSHU CHARACTER-1B2CF;Lo;0;L;;;;;N;;;;;
+1B2D0;NUSHU CHARACTER-1B2D0;Lo;0;L;;;;;N;;;;;
+1B2D1;NUSHU CHARACTER-1B2D1;Lo;0;L;;;;;N;;;;;
+1B2D2;NUSHU CHARACTER-1B2D2;Lo;0;L;;;;;N;;;;;
+1B2D3;NUSHU CHARACTER-1B2D3;Lo;0;L;;;;;N;;;;;
+1B2D4;NUSHU CHARACTER-1B2D4;Lo;0;L;;;;;N;;;;;
+1B2D5;NUSHU CHARACTER-1B2D5;Lo;0;L;;;;;N;;;;;
+1B2D6;NUSHU CHARACTER-1B2D6;Lo;0;L;;;;;N;;;;;
+1B2D7;NUSHU CHARACTER-1B2D7;Lo;0;L;;;;;N;;;;;
+1B2D8;NUSHU CHARACTER-1B2D8;Lo;0;L;;;;;N;;;;;
+1B2D9;NUSHU CHARACTER-1B2D9;Lo;0;L;;;;;N;;;;;
+1B2DA;NUSHU CHARACTER-1B2DA;Lo;0;L;;;;;N;;;;;
+1B2DB;NUSHU CHARACTER-1B2DB;Lo;0;L;;;;;N;;;;;
+1B2DC;NUSHU CHARACTER-1B2DC;Lo;0;L;;;;;N;;;;;
+1B2DD;NUSHU CHARACTER-1B2DD;Lo;0;L;;;;;N;;;;;
+1B2DE;NUSHU CHARACTER-1B2DE;Lo;0;L;;;;;N;;;;;
+1B2DF;NUSHU CHARACTER-1B2DF;Lo;0;L;;;;;N;;;;;
+1B2E0;NUSHU CHARACTER-1B2E0;Lo;0;L;;;;;N;;;;;
+1B2E1;NUSHU CHARACTER-1B2E1;Lo;0;L;;;;;N;;;;;
+1B2E2;NUSHU CHARACTER-1B2E2;Lo;0;L;;;;;N;;;;;
+1B2E3;NUSHU CHARACTER-1B2E3;Lo;0;L;;;;;N;;;;;
+1B2E4;NUSHU CHARACTER-1B2E4;Lo;0;L;;;;;N;;;;;
+1B2E5;NUSHU CHARACTER-1B2E5;Lo;0;L;;;;;N;;;;;
+1B2E6;NUSHU CHARACTER-1B2E6;Lo;0;L;;;;;N;;;;;
+1B2E7;NUSHU CHARACTER-1B2E7;Lo;0;L;;;;;N;;;;;
+1B2E8;NUSHU CHARACTER-1B2E8;Lo;0;L;;;;;N;;;;;
+1B2E9;NUSHU CHARACTER-1B2E9;Lo;0;L;;;;;N;;;;;
+1B2EA;NUSHU CHARACTER-1B2EA;Lo;0;L;;;;;N;;;;;
+1B2EB;NUSHU CHARACTER-1B2EB;Lo;0;L;;;;;N;;;;;
+1B2EC;NUSHU CHARACTER-1B2EC;Lo;0;L;;;;;N;;;;;
+1B2ED;NUSHU CHARACTER-1B2ED;Lo;0;L;;;;;N;;;;;
+1B2EE;NUSHU CHARACTER-1B2EE;Lo;0;L;;;;;N;;;;;
+1B2EF;NUSHU CHARACTER-1B2EF;Lo;0;L;;;;;N;;;;;
+1B2F0;NUSHU CHARACTER-1B2F0;Lo;0;L;;;;;N;;;;;
+1B2F1;NUSHU CHARACTER-1B2F1;Lo;0;L;;;;;N;;;;;
+1B2F2;NUSHU CHARACTER-1B2F2;Lo;0;L;;;;;N;;;;;
+1B2F3;NUSHU CHARACTER-1B2F3;Lo;0;L;;;;;N;;;;;
+1B2F4;NUSHU CHARACTER-1B2F4;Lo;0;L;;;;;N;;;;;
+1B2F5;NUSHU CHARACTER-1B2F5;Lo;0;L;;;;;N;;;;;
+1B2F6;NUSHU CHARACTER-1B2F6;Lo;0;L;;;;;N;;;;;
+1B2F7;NUSHU CHARACTER-1B2F7;Lo;0;L;;;;;N;;;;;
+1B2F8;NUSHU CHARACTER-1B2F8;Lo;0;L;;;;;N;;;;;
+1B2F9;NUSHU CHARACTER-1B2F9;Lo;0;L;;;;;N;;;;;
+1B2FA;NUSHU CHARACTER-1B2FA;Lo;0;L;;;;;N;;;;;
+1B2FB;NUSHU CHARACTER-1B2FB;Lo;0;L;;;;;N;;;;;
+1BC00;DUPLOYAN LETTER H;Lo;0;L;;;;;N;;;;;
+1BC01;DUPLOYAN LETTER X;Lo;0;L;;;;;N;;;;;
+1BC02;DUPLOYAN LETTER P;Lo;0;L;;;;;N;;;;;
+1BC03;DUPLOYAN LETTER T;Lo;0;L;;;;;N;;;;;
+1BC04;DUPLOYAN LETTER F;Lo;0;L;;;;;N;;;;;
+1BC05;DUPLOYAN LETTER K;Lo;0;L;;;;;N;;;;;
+1BC06;DUPLOYAN LETTER L;Lo;0;L;;;;;N;;;;;
+1BC07;DUPLOYAN LETTER B;Lo;0;L;;;;;N;;;;;
+1BC08;DUPLOYAN LETTER D;Lo;0;L;;;;;N;;;;;
+1BC09;DUPLOYAN LETTER V;Lo;0;L;;;;;N;;;;;
+1BC0A;DUPLOYAN LETTER G;Lo;0;L;;;;;N;;;;;
+1BC0B;DUPLOYAN LETTER R;Lo;0;L;;;;;N;;;;;
+1BC0C;DUPLOYAN LETTER P N;Lo;0;L;;;;;N;;;;;
+1BC0D;DUPLOYAN LETTER D S;Lo;0;L;;;;;N;;;;;
+1BC0E;DUPLOYAN LETTER F N;Lo;0;L;;;;;N;;;;;
+1BC0F;DUPLOYAN LETTER K M;Lo;0;L;;;;;N;;;;;
+1BC10;DUPLOYAN LETTER R S;Lo;0;L;;;;;N;;;;;
+1BC11;DUPLOYAN LETTER TH;Lo;0;L;;;;;N;;;;;
+1BC12;DUPLOYAN LETTER SLOAN DH;Lo;0;L;;;;;N;;;;;
+1BC13;DUPLOYAN LETTER DH;Lo;0;L;;;;;N;;;;;
+1BC14;DUPLOYAN LETTER KK;Lo;0;L;;;;;N;;;;;
+1BC15;DUPLOYAN LETTER SLOAN J;Lo;0;L;;;;;N;;;;;
+1BC16;DUPLOYAN LETTER HL;Lo;0;L;;;;;N;;;;;
+1BC17;DUPLOYAN LETTER LH;Lo;0;L;;;;;N;;;;;
+1BC18;DUPLOYAN LETTER RH;Lo;0;L;;;;;N;;;;;
+1BC19;DUPLOYAN LETTER M;Lo;0;L;;;;;N;;;;;
+1BC1A;DUPLOYAN LETTER N;Lo;0;L;;;;;N;;;;;
+1BC1B;DUPLOYAN LETTER J;Lo;0;L;;;;;N;;;;;
+1BC1C;DUPLOYAN LETTER S;Lo;0;L;;;;;N;;;;;
+1BC1D;DUPLOYAN LETTER M N;Lo;0;L;;;;;N;;;;;
+1BC1E;DUPLOYAN LETTER N M;Lo;0;L;;;;;N;;;;;
+1BC1F;DUPLOYAN LETTER J M;Lo;0;L;;;;;N;;;;;
+1BC20;DUPLOYAN LETTER S J;Lo;0;L;;;;;N;;;;;
+1BC21;DUPLOYAN LETTER M WITH DOT;Lo;0;L;;;;;N;;;;;
+1BC22;DUPLOYAN LETTER N WITH DOT;Lo;0;L;;;;;N;;;;;
+1BC23;DUPLOYAN LETTER J WITH DOT;Lo;0;L;;;;;N;;;;;
+1BC24;DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE;Lo;0;L;;;;;N;;;;;
+1BC25;DUPLOYAN LETTER S WITH DOT;Lo;0;L;;;;;N;;;;;
+1BC26;DUPLOYAN LETTER S WITH DOT BELOW;Lo;0;L;;;;;N;;;;;
+1BC27;DUPLOYAN LETTER M S;Lo;0;L;;;;;N;;;;;
+1BC28;DUPLOYAN LETTER N S;Lo;0;L;;;;;N;;;;;
+1BC29;DUPLOYAN LETTER J S;Lo;0;L;;;;;N;;;;;
+1BC2A;DUPLOYAN LETTER S S;Lo;0;L;;;;;N;;;;;
+1BC2B;DUPLOYAN LETTER M N S;Lo;0;L;;;;;N;;;;;
+1BC2C;DUPLOYAN LETTER N M S;Lo;0;L;;;;;N;;;;;
+1BC2D;DUPLOYAN LETTER J M S;Lo;0;L;;;;;N;;;;;
+1BC2E;DUPLOYAN LETTER S J S;Lo;0;L;;;;;N;;;;;
+1BC2F;DUPLOYAN LETTER J S WITH DOT;Lo;0;L;;;;;N;;;;;
+1BC30;DUPLOYAN LETTER J N;Lo;0;L;;;;;N;;;;;
+1BC31;DUPLOYAN LETTER J N S;Lo;0;L;;;;;N;;;;;
+1BC32;DUPLOYAN LETTER S T;Lo;0;L;;;;;N;;;;;
+1BC33;DUPLOYAN LETTER S T R;Lo;0;L;;;;;N;;;;;
+1BC34;DUPLOYAN LETTER S P;Lo;0;L;;;;;N;;;;;
+1BC35;DUPLOYAN LETTER S P R;Lo;0;L;;;;;N;;;;;
+1BC36;DUPLOYAN LETTER T S;Lo;0;L;;;;;N;;;;;
+1BC37;DUPLOYAN LETTER T R S;Lo;0;L;;;;;N;;;;;
+1BC38;DUPLOYAN LETTER W;Lo;0;L;;;;;N;;;;;
+1BC39;DUPLOYAN LETTER WH;Lo;0;L;;;;;N;;;;;
+1BC3A;DUPLOYAN LETTER W R;Lo;0;L;;;;;N;;;;;
+1BC3B;DUPLOYAN LETTER S N;Lo;0;L;;;;;N;;;;;
+1BC3C;DUPLOYAN LETTER S M;Lo;0;L;;;;;N;;;;;
+1BC3D;DUPLOYAN LETTER K R S;Lo;0;L;;;;;N;;;;;
+1BC3E;DUPLOYAN LETTER G R S;Lo;0;L;;;;;N;;;;;
+1BC3F;DUPLOYAN LETTER S K;Lo;0;L;;;;;N;;;;;
+1BC40;DUPLOYAN LETTER S K R;Lo;0;L;;;;;N;;;;;
+1BC41;DUPLOYAN LETTER A;Lo;0;L;;;;;N;;;;;
+1BC42;DUPLOYAN LETTER SLOAN OW;Lo;0;L;;;;;N;;;;;
+1BC43;DUPLOYAN LETTER OA;Lo;0;L;;;;;N;;;;;
+1BC44;DUPLOYAN LETTER O;Lo;0;L;;;;;N;;;;;
+1BC45;DUPLOYAN LETTER AOU;Lo;0;L;;;;;N;;;;;
+1BC46;DUPLOYAN LETTER I;Lo;0;L;;;;;N;;;;;
+1BC47;DUPLOYAN LETTER E;Lo;0;L;;;;;N;;;;;
+1BC48;DUPLOYAN LETTER IE;Lo;0;L;;;;;N;;;;;
+1BC49;DUPLOYAN LETTER SHORT I;Lo;0;L;;;;;N;;;;;
+1BC4A;DUPLOYAN LETTER UI;Lo;0;L;;;;;N;;;;;
+1BC4B;DUPLOYAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1BC4C;DUPLOYAN LETTER SLOAN EH;Lo;0;L;;;;;N;;;;;
+1BC4D;DUPLOYAN LETTER ROMANIAN I;Lo;0;L;;;;;N;;;;;
+1BC4E;DUPLOYAN LETTER SLOAN EE;Lo;0;L;;;;;N;;;;;
+1BC4F;DUPLOYAN LETTER LONG I;Lo;0;L;;;;;N;;;;;
+1BC50;DUPLOYAN LETTER YE;Lo;0;L;;;;;N;;;;;
+1BC51;DUPLOYAN LETTER U;Lo;0;L;;;;;N;;;;;
+1BC52;DUPLOYAN LETTER EU;Lo;0;L;;;;;N;;;;;
+1BC53;DUPLOYAN LETTER XW;Lo;0;L;;;;;N;;;;;
+1BC54;DUPLOYAN LETTER U N;Lo;0;L;;;;;N;;;;;
+1BC55;DUPLOYAN LETTER LONG U;Lo;0;L;;;;;N;;;;;
+1BC56;DUPLOYAN LETTER ROMANIAN U;Lo;0;L;;;;;N;;;;;
+1BC57;DUPLOYAN LETTER UH;Lo;0;L;;;;;N;;;;;
+1BC58;DUPLOYAN LETTER SLOAN U;Lo;0;L;;;;;N;;;;;
+1BC59;DUPLOYAN LETTER OOH;Lo;0;L;;;;;N;;;;;
+1BC5A;DUPLOYAN LETTER OW;Lo;0;L;;;;;N;;;;;
+1BC5B;DUPLOYAN LETTER OU;Lo;0;L;;;;;N;;;;;
+1BC5C;DUPLOYAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1BC5D;DUPLOYAN LETTER WO;Lo;0;L;;;;;N;;;;;
+1BC5E;DUPLOYAN LETTER WI;Lo;0;L;;;;;N;;;;;
+1BC5F;DUPLOYAN LETTER WEI;Lo;0;L;;;;;N;;;;;
+1BC60;DUPLOYAN LETTER WOW;Lo;0;L;;;;;N;;;;;
+1BC61;DUPLOYAN LETTER NASAL U;Lo;0;L;;;;;N;;;;;
+1BC62;DUPLOYAN LETTER NASAL O;Lo;0;L;;;;;N;;;;;
+1BC63;DUPLOYAN LETTER NASAL I;Lo;0;L;;;;;N;;;;;
+1BC64;DUPLOYAN LETTER NASAL A;Lo;0;L;;;;;N;;;;;
+1BC65;DUPLOYAN LETTER PERNIN AN;Lo;0;L;;;;;N;;;;;
+1BC66;DUPLOYAN LETTER PERNIN AM;Lo;0;L;;;;;N;;;;;
+1BC67;DUPLOYAN LETTER SLOAN EN;Lo;0;L;;;;;N;;;;;
+1BC68;DUPLOYAN LETTER SLOAN AN;Lo;0;L;;;;;N;;;;;
+1BC69;DUPLOYAN LETTER SLOAN ON;Lo;0;L;;;;;N;;;;;
+1BC6A;DUPLOYAN LETTER VOCALIC M;Lo;0;L;;;;;N;;;;;
+1BC70;DUPLOYAN AFFIX LEFT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;;
+1BC71;DUPLOYAN AFFIX MID HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;;
+1BC72;DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;;
+1BC73;DUPLOYAN AFFIX LOW VERTICAL SECANT;Lo;0;L;;;;;N;;;;;
+1BC74;DUPLOYAN AFFIX MID VERTICAL SECANT;Lo;0;L;;;;;N;;;;;
+1BC75;DUPLOYAN AFFIX HIGH VERTICAL SECANT;Lo;0;L;;;;;N;;;;;
+1BC76;DUPLOYAN AFFIX ATTACHED SECANT;Lo;0;L;;;;;N;;;;;
+1BC77;DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT;Lo;0;L;;;;;N;;;;;
+1BC78;DUPLOYAN AFFIX ATTACHED TANGENT;Lo;0;L;;;;;N;;;;;
+1BC79;DUPLOYAN AFFIX ATTACHED TAIL;Lo;0;L;;;;;N;;;;;
+1BC7A;DUPLOYAN AFFIX ATTACHED E HOOK;Lo;0;L;;;;;N;;;;;
+1BC7B;DUPLOYAN AFFIX ATTACHED I HOOK;Lo;0;L;;;;;N;;;;;
+1BC7C;DUPLOYAN AFFIX ATTACHED TANGENT HOOK;Lo;0;L;;;;;N;;;;;
+1BC80;DUPLOYAN AFFIX HIGH ACUTE;Lo;0;L;;;;;N;;;;;
+1BC81;DUPLOYAN AFFIX HIGH TIGHT ACUTE;Lo;0;L;;;;;N;;;;;
+1BC82;DUPLOYAN AFFIX HIGH GRAVE;Lo;0;L;;;;;N;;;;;
+1BC83;DUPLOYAN AFFIX HIGH LONG GRAVE;Lo;0;L;;;;;N;;;;;
+1BC84;DUPLOYAN AFFIX HIGH DOT;Lo;0;L;;;;;N;;;;;
+1BC85;DUPLOYAN AFFIX HIGH CIRCLE;Lo;0;L;;;;;N;;;;;
+1BC86;DUPLOYAN AFFIX HIGH LINE;Lo;0;L;;;;;N;;;;;
+1BC87;DUPLOYAN AFFIX HIGH WAVE;Lo;0;L;;;;;N;;;;;
+1BC88;DUPLOYAN AFFIX HIGH VERTICAL;Lo;0;L;;;;;N;;;;;
+1BC90;DUPLOYAN AFFIX LOW ACUTE;Lo;0;L;;;;;N;;;;;
+1BC91;DUPLOYAN AFFIX LOW TIGHT ACUTE;Lo;0;L;;;;;N;;;;;
+1BC92;DUPLOYAN AFFIX LOW GRAVE;Lo;0;L;;;;;N;;;;;
+1BC93;DUPLOYAN AFFIX LOW LONG GRAVE;Lo;0;L;;;;;N;;;;;
+1BC94;DUPLOYAN AFFIX LOW DOT;Lo;0;L;;;;;N;;;;;
+1BC95;DUPLOYAN AFFIX LOW CIRCLE;Lo;0;L;;;;;N;;;;;
+1BC96;DUPLOYAN AFFIX LOW LINE;Lo;0;L;;;;;N;;;;;
+1BC97;DUPLOYAN AFFIX LOW WAVE;Lo;0;L;;;;;N;;;;;
+1BC98;DUPLOYAN AFFIX LOW VERTICAL;Lo;0;L;;;;;N;;;;;
+1BC99;DUPLOYAN AFFIX LOW ARROW;Lo;0;L;;;;;N;;;;;
+1BC9C;DUPLOYAN SIGN O WITH CROSS;So;0;L;;;;;N;;;;;
+1BC9D;DUPLOYAN THICK LETTER SELECTOR;Mn;0;NSM;;;;;N;;;;;
+1BC9E;DUPLOYAN DOUBLE MARK;Mn;1;NSM;;;;;N;;;;;
+1BC9F;DUPLOYAN PUNCTUATION CHINOOK FULL STOP;Po;0;L;;;;;N;;;;;
+1BCA0;SHORTHAND FORMAT LETTER OVERLAP;Cf;0;BN;;;;;N;;;;;
+1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;;
+1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;;
+1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;;
+1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
+1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
+1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
+1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;
+1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;
+1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;
+1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;
+1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;
+1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;
+1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;
+1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;
+1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;
+1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;
+1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;
+1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;
+1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;
+1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;
+1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;
+1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;
+1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;
+1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;
+1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;
+1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;
+1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;
+1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;
+1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;
+1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;
+1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;
+1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;
+1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;
+1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;
+1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;
+1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;
+1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;
+1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;
+1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;
+1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;
+1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;
+1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;
+1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;
+1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;
+1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;
+1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;
+1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;
+1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;
+1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;
+1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;
+1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;
+1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;
+1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;
+1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;
+1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;
+1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;
+1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;
+1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;
+1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;
+1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;
+1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;
+1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;
+1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;
+1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;
+1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;
+1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;
+1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;
+1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;
+1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;
+1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;
+1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;
+1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;
+1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;
+1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;
+1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;
+1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;
+1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;
+1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;
+1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;
+1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;
+1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;
+1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;
+1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;
+1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;
+1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;
+1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;
+1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;
+1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;
+1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;
+1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;
+1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;
+1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;
+1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;
+1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;
+1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;
+1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;
+1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;
+1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;
+1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;
+1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;
+1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;
+1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;
+1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;
+1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;
+1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;
+1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;
+1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;
+1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;
+1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;
+1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;
+1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;
+1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;
+1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;
+1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;
+1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;
+1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;
+1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;
+1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;
+1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;
+1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;
+1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;
+1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;
+1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;
+1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;
+1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;
+1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;
+1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;
+1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;
+1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;
+1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;
+1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;
+1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;
+1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;
+1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;
+1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;
+1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;
+1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;
+1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;
+1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;
+1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;
+1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;
+1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;
+1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;
+1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;
+1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;
+1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;
+1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;
+1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;
+1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;
+1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;
+1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;
+1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;
+1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;
+1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;
+1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;
+1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;
+1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;
+1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;
+1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;
+1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;
+1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;
+1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;
+1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;
+1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;
+1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;
+1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;
+1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;
+1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;
+1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;
+1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;
+1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;
+1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;
+1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;
+1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;
+1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;
+1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;
+1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;
+1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;
+1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;
+1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;
+1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;
+1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;
+1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;
+1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;
+1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;
+1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;
+1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;
+1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;
+1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;
+1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;
+1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;
+1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;
+1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;
+1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;
+1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;
+1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;
+1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;
+1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;
+1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;
+1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;
+1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;
+1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;
+1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;
+1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;
+1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;
+1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;
+1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;
+1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;
+1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;
+1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;
+1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
+1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
+1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;;
+1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
+1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
+1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
+1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;
+1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;
+1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;
+1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;
+1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;
+1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;
+1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;
+1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;
+1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;
+1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;
+1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;
+1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;
+1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;
+1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;
+1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;
+1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;
+1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;
+1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;
+1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;
+1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;
+1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;
+1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;
+1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;
+1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;
+1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;
+1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;
+1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;
+1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;
+1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;
+1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;
+1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;
+1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;
+1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;
+1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;
+1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
+1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
+1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;
+1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;
+1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;
+1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;
+1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;
+1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;
+1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
+1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
+1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
+1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
+1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
+1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
+1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;
+1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;
+1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;
+1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;
+1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;
+1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;
+1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;
+1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;
+1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;
+1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;
+1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;
+1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;
+1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;
+1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;
+1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;
+1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;
+1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;
+1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;
+1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;
+1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;
+1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;
+1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;
+1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;
+1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;
+1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;
+1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;
+1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;
+1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;
+1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;
+1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;
+1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;
+1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;
+1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;
+1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;
+1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;
+1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;
+1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;
+1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;
+1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;
+1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;
+1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;
+1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;
+1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;
+1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;
+1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;
+1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;
+1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;
+1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;
+1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;
+1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;
+1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;
+1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;
+1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;
+1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;
+1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;
+1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;
+1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;
+1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;
+1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;
+1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;
+1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;
+1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;
+1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;
+1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;
+1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;
+1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;
+1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;
+1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;
+1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;
+1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;
+1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;
+1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;
+1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;
+1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;
+1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;
+1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;
+1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;
+1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;
+1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;
+1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;
+1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;
+1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;
+1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;
+1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;
+1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
+1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D1DE;MUSICAL SYMBOL KIEVAN C CLEF;So;0;L;;;;;N;;;;;
+1D1DF;MUSICAL SYMBOL KIEVAN END OF PIECE;So;0;L;;;;;N;;;;;
+1D1E0;MUSICAL SYMBOL KIEVAN FINAL NOTE;So;0;L;;;;;N;;;;;
+1D1E1;MUSICAL SYMBOL KIEVAN RECITATIVE MARK;So;0;L;;;;;N;;;;;
+1D1E2;MUSICAL SYMBOL KIEVAN WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D1E3;MUSICAL SYMBOL KIEVAN HALF NOTE;So;0;L;;;;;N;;;;;
+1D1E4;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN;So;0;L;;;;;N;;;;;
+1D1E5;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP;So;0;L;;;;;N;;;;;
+1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;;
+1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;;
+1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;;
+1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
+1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
+1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
+1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
+1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
+1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
+1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
+1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
+1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
+1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
+1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
+1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
+1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
+1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
+1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
+1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
+1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
+1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
+1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
+1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
+1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
+1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
+1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
+1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
+1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
+1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
+1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
+1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
+1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
+1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;;
+1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;;
+1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;;
+1D2E3;MAYAN NUMERAL THREE;No;0;L;;;;3;N;;;;;
+1D2E4;MAYAN NUMERAL FOUR;No;0;L;;;;4;N;;;;;
+1D2E5;MAYAN NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+1D2E6;MAYAN NUMERAL SIX;No;0;L;;;;6;N;;;;;
+1D2E7;MAYAN NUMERAL SEVEN;No;0;L;;;;7;N;;;;;
+1D2E8;MAYAN NUMERAL EIGHT;No;0;L;;;;8;N;;;;;
+1D2E9;MAYAN NUMERAL NINE;No;0;L;;;;9;N;;;;;
+1D2EA;MAYAN NUMERAL TEN;No;0;L;;;;10;N;;;;;
+1D2EB;MAYAN NUMERAL ELEVEN;No;0;L;;;;11;N;;;;;
+1D2EC;MAYAN NUMERAL TWELVE;No;0;L;;;;12;N;;;;;
+1D2ED;MAYAN NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;;
+1D2EE;MAYAN NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;;
+1D2EF;MAYAN NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;;
+1D2F0;MAYAN NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;;
+1D2F1;MAYAN NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;;
+1D2F2;MAYAN NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;;
+1D2F3;MAYAN NUMERAL NINETEEN;No;0;L;;;;19;N;;;;;
+1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
+1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
+1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;
+1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;
+1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
+1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
+1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
+1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;
+1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;
+1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;
+1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;
+1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;
+1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;
+1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;
+1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;
+1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;
+1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;
+1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;
+1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;
+1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;
+1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;
+1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;
+1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;
+1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;
+1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;
+1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;
+1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;
+1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;
+1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;
+1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;
+1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;
+1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;
+1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;
+1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;
+1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;
+1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;
+1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;
+1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;
+1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;
+1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;
+1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;
+1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;
+1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;
+1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;
+1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;
+1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;
+1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;
+1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;
+1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;
+1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;
+1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;
+1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;
+1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;
+1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;
+1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;
+1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;
+1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;
+1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;
+1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;
+1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;
+1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;
+1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;
+1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;
+1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;
+1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;
+1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;
+1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;
+1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;
+1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;
+1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;
+1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;
+1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;
+1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;
+1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;
+1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;
+1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;
+1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;
+1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;
+1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
+1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
+1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
+1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;
+1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;
+1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;
+1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;
+1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;
+1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;
+1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;
+1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;
+1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;
+1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;
+1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;
+1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;
+1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;
+1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
+1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
+1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
+1D372;IDEOGRAPHIC TALLY MARK ONE;No;0;L;;;;1;N;;;;;
+1D373;IDEOGRAPHIC TALLY MARK TWO;No;0;L;;;;2;N;;;;;
+1D374;IDEOGRAPHIC TALLY MARK THREE;No;0;L;;;;3;N;;;;;
+1D375;IDEOGRAPHIC TALLY MARK FOUR;No;0;L;;;;4;N;;;;;
+1D376;IDEOGRAPHIC TALLY MARK FIVE;No;0;L;;;;5;N;;;;;
+1D377;TALLY MARK ONE;No;0;L;;;;1;N;;;;;
+1D378;TALLY MARK FIVE;No;0;L;;;;5;N;;;;;
+1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
+1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
+1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;
+1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;
+1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D800;SIGNWRITING HAND-FIST INDEX;So;0;L;;;;;N;;;;;
+1D801;SIGNWRITING HAND-CIRCLE INDEX;So;0;L;;;;;N;;;;;
+1D802;SIGNWRITING HAND-CUP INDEX;So;0;L;;;;;N;;;;;
+1D803;SIGNWRITING HAND-OVAL INDEX;So;0;L;;;;;N;;;;;
+1D804;SIGNWRITING HAND-HINGE INDEX;So;0;L;;;;;N;;;;;
+1D805;SIGNWRITING HAND-ANGLE INDEX;So;0;L;;;;;N;;;;;
+1D806;SIGNWRITING HAND-FIST INDEX BENT;So;0;L;;;;;N;;;;;
+1D807;SIGNWRITING HAND-CIRCLE INDEX BENT;So;0;L;;;;;N;;;;;
+1D808;SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT;So;0;L;;;;;N;;;;;
+1D809;SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D80A;SIGNWRITING HAND-FIST INDEX CUPPED;So;0;L;;;;;N;;;;;
+1D80B;SIGNWRITING HAND-FIST INDEX HINGED;So;0;L;;;;;N;;;;;
+1D80C;SIGNWRITING HAND-FIST INDEX HINGED LOW;So;0;L;;;;;N;;;;;
+1D80D;SIGNWRITING HAND-CIRCLE INDEX HINGE;So;0;L;;;;;N;;;;;
+1D80E;SIGNWRITING HAND-FIST INDEX MIDDLE;So;0;L;;;;;N;;;;;
+1D80F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE;So;0;L;;;;;N;;;;;
+1D810;SIGNWRITING HAND-FIST INDEX MIDDLE BENT;So;0;L;;;;;N;;;;;
+1D811;SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;;
+1D812;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED;So;0;L;;;;;N;;;;;
+1D813;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED;So;0;L;;;;;N;;;;;
+1D814;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D815;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED;So;0;L;;;;;N;;;;;
+1D816;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT;So;0;L;;;;;N;;;;;
+1D817;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT;So;0;L;;;;;N;;;;;
+1D818;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED;So;0;L;;;;;N;;;;;
+1D819;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED;So;0;L;;;;;N;;;;;
+1D81A;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;;
+1D81B;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;;
+1D81C;SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX;So;0;L;;;;;N;;;;;
+1D81D;SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE;So;0;L;;;;;N;;;;;
+1D81E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;;
+1D81F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;;
+1D820;SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT;So;0;L;;;;;N;;;;;
+1D821;SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT;So;0;L;;;;;N;;;;;
+1D822;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT;So;0;L;;;;;N;;;;;
+1D823;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE;So;0;L;;;;;N;;;;;
+1D824;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D825;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED;So;0;L;;;;;N;;;;;
+1D826;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;;
+1D827;SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D828;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED;So;0;L;;;;;N;;;;;
+1D829;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED;So;0;L;;;;;N;;;;;
+1D82A;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED;So;0;L;;;;;N;;;;;
+1D82B;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED;So;0;L;;;;;N;;;;;
+1D82C;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D82D;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D82E;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;;
+1D82F;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT;So;0;L;;;;;N;;;;;
+1D830;SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP;So;0;L;;;;;N;;;;;
+1D831;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D832;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D833;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D834;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D835;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D836;SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP;So;0;L;;;;;N;;;;;
+1D837;SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D838;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP;So;0;L;;;;;N;;;;;
+1D839;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED;So;0;L;;;;;N;;;;;
+1D83A;SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP;So;0;L;;;;;N;;;;;
+1D83B;SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP;So;0;L;;;;;N;;;;;
+1D83C;SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP;So;0;L;;;;;N;;;;;
+1D83D;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED;So;0;L;;;;;N;;;;;
+1D83E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT;So;0;L;;;;;N;;;;;
+1D83F;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED;So;0;L;;;;;N;;;;;
+1D840;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP;So;0;L;;;;;N;;;;;
+1D841;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED;So;0;L;;;;;N;;;;;
+1D842;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP;So;0;L;;;;;N;;;;;
+1D843;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED;So;0;L;;;;;N;;;;;
+1D844;SIGNWRITING HAND-FLAT FOUR FINGERS;So;0;L;;;;;N;;;;;
+1D845;SIGNWRITING HAND-FLAT FOUR FINGERS BENT;So;0;L;;;;;N;;;;;
+1D846;SIGNWRITING HAND-FLAT FOUR FINGERS HINGED;So;0;L;;;;;N;;;;;
+1D847;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;
+1D848;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT;So;0;L;;;;;N;;;;;
+1D849;SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;
+1D84A;SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT;So;0;L;;;;;N;;;;;
+1D84B;SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;
+1D84C;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D84D;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D84E;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;;
+1D84F;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;;
+1D850;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;;
+1D851;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;;
+1D852;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D853;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D854;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;;
+1D855;SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;;
+1D856;SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;
+1D857;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED;So;0;L;;;;;N;;;;;
+1D858;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE;So;0;L;;;;;N;;;;;
+1D859;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB;So;0;L;;;;;N;;;;;
+1D85A;SIGNWRITING HAND-FLAT;So;0;L;;;;;N;;;;;
+1D85B;SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS;So;0;L;;;;;N;;;;;
+1D85C;SIGNWRITING HAND-FLAT HEEL;So;0;L;;;;;N;;;;;
+1D85D;SIGNWRITING HAND-FLAT THUMB SIDE;So;0;L;;;;;N;;;;;
+1D85E;SIGNWRITING HAND-FLAT HEEL THUMB SIDE;So;0;L;;;;;N;;;;;
+1D85F;SIGNWRITING HAND-FLAT THUMB BENT;So;0;L;;;;;N;;;;;
+1D860;SIGNWRITING HAND-FLAT THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D861;SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE;So;0;L;;;;;N;;;;;
+1D862;SIGNWRITING HAND-FLAT SPLIT CENTRE;So;0;L;;;;;N;;;;;
+1D863;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE;So;0;L;;;;;N;;;;;
+1D864;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT;So;0;L;;;;;N;;;;;
+1D865;SIGNWRITING HAND-FLAT SPLIT LITTLE;So;0;L;;;;;N;;;;;
+1D866;SIGNWRITING HAND-CLAW;So;0;L;;;;;N;;;;;
+1D867;SIGNWRITING HAND-CLAW THUMB SIDE;So;0;L;;;;;N;;;;;
+1D868;SIGNWRITING HAND-CLAW NO THUMB;So;0;L;;;;;N;;;;;
+1D869;SIGNWRITING HAND-CLAW THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D86A;SIGNWRITING HAND-HOOK CURLICUE;So;0;L;;;;;N;;;;;
+1D86B;SIGNWRITING HAND-HOOK;So;0;L;;;;;N;;;;;
+1D86C;SIGNWRITING HAND-CUP OPEN;So;0;L;;;;;N;;;;;
+1D86D;SIGNWRITING HAND-CUP;So;0;L;;;;;N;;;;;
+1D86E;SIGNWRITING HAND-CUP OPEN THUMB SIDE;So;0;L;;;;;N;;;;;
+1D86F;SIGNWRITING HAND-CUP THUMB SIDE;So;0;L;;;;;N;;;;;
+1D870;SIGNWRITING HAND-CUP OPEN NO THUMB;So;0;L;;;;;N;;;;;
+1D871;SIGNWRITING HAND-CUP NO THUMB;So;0;L;;;;;N;;;;;
+1D872;SIGNWRITING HAND-CUP OPEN THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D873;SIGNWRITING HAND-CUP THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D874;SIGNWRITING HAND-CURLICUE OPEN;So;0;L;;;;;N;;;;;
+1D875;SIGNWRITING HAND-CURLICUE;So;0;L;;;;;N;;;;;
+1D876;SIGNWRITING HAND-CIRCLE;So;0;L;;;;;N;;;;;
+1D877;SIGNWRITING HAND-OVAL;So;0;L;;;;;N;;;;;
+1D878;SIGNWRITING HAND-OVAL THUMB SIDE;So;0;L;;;;;N;;;;;
+1D879;SIGNWRITING HAND-OVAL NO THUMB;So;0;L;;;;;N;;;;;
+1D87A;SIGNWRITING HAND-OVAL THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D87B;SIGNWRITING HAND-HINGE OPEN;So;0;L;;;;;N;;;;;
+1D87C;SIGNWRITING HAND-HINGE OPEN THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D87D;SIGNWRITING HAND-HINGE;So;0;L;;;;;N;;;;;
+1D87E;SIGNWRITING HAND-HINGE SMALL;So;0;L;;;;;N;;;;;
+1D87F;SIGNWRITING HAND-HINGE OPEN THUMB SIDE;So;0;L;;;;;N;;;;;
+1D880;SIGNWRITING HAND-HINGE THUMB SIDE;So;0;L;;;;;N;;;;;
+1D881;SIGNWRITING HAND-HINGE OPEN NO THUMB;So;0;L;;;;;N;;;;;
+1D882;SIGNWRITING HAND-HINGE NO THUMB;So;0;L;;;;;N;;;;;
+1D883;SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX;So;0;L;;;;;N;;;;;
+1D884;SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;;
+1D885;SIGNWRITING HAND-ANGLE;So;0;L;;;;;N;;;;;
+1D886;SIGNWRITING HAND-FIST INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D887;SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D888;SIGNWRITING HAND-HINGE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D889;SIGNWRITING HAND-ANGLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;
+1D88A;SIGNWRITING HAND-HINGE LITTLE;So;0;L;;;;;N;;;;;
+1D88B;SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT;So;0;L;;;;;N;;;;;
+1D88C;SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;;
+1D88D;SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;;
+1D88E;SIGNWRITING HAND-FIST LITTLE DOWN;So;0;L;;;;;N;;;;;
+1D88F;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D890;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED;So;0;L;;;;;N;;;;;
+1D891;SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED;So;0;L;;;;;N;;;;;
+1D892;SIGNWRITING HAND-FIST LITTLE UP;So;0;L;;;;;N;;;;;
+1D893;SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP;So;0;L;;;;;N;;;;;
+1D894;SIGNWRITING HAND-CIRCLE LITTLE UP;So;0;L;;;;;N;;;;;
+1D895;SIGNWRITING HAND-OVAL LITTLE UP;So;0;L;;;;;N;;;;;
+1D896;SIGNWRITING HAND-ANGLE LITTLE UP;So;0;L;;;;;N;;;;;
+1D897;SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D898;SIGNWRITING HAND-FIST LITTLE BENT;So;0;L;;;;;N;;;;;
+1D899;SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB;So;0;L;;;;;N;;;;;
+1D89A;SIGNWRITING HAND-FIST LITTLE THUMB;So;0;L;;;;;N;;;;;
+1D89B;SIGNWRITING HAND-HINGE LITTLE THUMB;So;0;L;;;;;N;;;;;
+1D89C;SIGNWRITING HAND-FIST LITTLE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D89D;SIGNWRITING HAND-HINGE LITTLE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D89E;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT;So;0;L;;;;;N;;;;;
+1D89F;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8A0;SIGNWRITING HAND-FIST LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A1;SIGNWRITING HAND-CIRCLE LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A2;SIGNWRITING HAND-HINGE LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A3;SIGNWRITING HAND-ANGLE LITTLE INDEX;So;0;L;;;;;N;;;;;
+1D8A4;SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A5;SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A6;SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A7;SIGNWRITING HAND-HINGE RING;So;0;L;;;;;N;;;;;
+1D8A8;SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8A9;SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;;
+1D8AA;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;;
+1D8AB;SIGNWRITING HAND-FIST RING DOWN;So;0;L;;;;;N;;;;;
+1D8AC;SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE;So;0;L;;;;;N;;;;;
+1D8AD;SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS;So;0;L;;;;;N;;;;;
+1D8AE;SIGNWRITING HAND-FIST RING UP;So;0;L;;;;;N;;;;;
+1D8AF;SIGNWRITING HAND-FIST RING RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D8B0;SIGNWRITING HAND-FIST RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B1;SIGNWRITING HAND-CIRCLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B2;SIGNWRITING HAND-OVAL RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B3;SIGNWRITING HAND-ANGLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8B4;SIGNWRITING HAND-FIST RING MIDDLE;So;0;L;;;;;N;;;;;
+1D8B5;SIGNWRITING HAND-FIST RING MIDDLE CONJOINED;So;0;L;;;;;N;;;;;
+1D8B6;SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;;
+1D8B7;SIGNWRITING HAND-FIST RING INDEX;So;0;L;;;;;N;;;;;
+1D8B8;SIGNWRITING HAND-FIST RING THUMB;So;0;L;;;;;N;;;;;
+1D8B9;SIGNWRITING HAND-HOOK RING THUMB;So;0;L;;;;;N;;;;;
+1D8BA;SIGNWRITING HAND-FIST INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8BB;SIGNWRITING HAND-CIRCLE INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8BC;SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON;So;0;L;;;;;N;;;;;
+1D8BD;SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;;
+1D8BE;SIGNWRITING HAND-HOOK INDEX RING LITTLE IN;So;0;L;;;;;N;;;;;
+1D8BF;SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER;So;0;L;;;;;N;;;;;
+1D8C0;SIGNWRITING HAND-CUP INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8C1;SIGNWRITING HAND-HINGE INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8C2;SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;;
+1D8C3;SIGNWRITING HAND-ANGLE INDEX RING LITTLE;So;0;L;;;;;N;;;;;
+1D8C4;SIGNWRITING HAND-FIST MIDDLE DOWN;So;0;L;;;;;N;;;;;
+1D8C5;SIGNWRITING HAND-HINGE MIDDLE;So;0;L;;;;;N;;;;;
+1D8C6;SIGNWRITING HAND-FIST MIDDLE UP;So;0;L;;;;;N;;;;;
+1D8C7;SIGNWRITING HAND-CIRCLE MIDDLE UP;So;0;L;;;;;N;;;;;
+1D8C8;SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE;So;0;L;;;;;N;;;;;
+1D8C9;SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;;
+1D8CA;SIGNWRITING HAND-HOOK MIDDLE THUMB;So;0;L;;;;;N;;;;;
+1D8CB;SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE;So;0;L;;;;;N;;;;;
+1D8CC;SIGNWRITING HAND-FIST MIDDLE LITTLE;So;0;L;;;;;N;;;;;
+1D8CD;SIGNWRITING HAND-FIST MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8CE;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8CF;SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON;So;0;L;;;;;N;;;;;
+1D8D0;SIGNWRITING HAND-CUP MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8D1;SIGNWRITING HAND-HINGE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8D2;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT;So;0;L;;;;;N;;;;;
+1D8D3;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN;So;0;L;;;;;N;;;;;
+1D8D4;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;
+1D8D5;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT;So;0;L;;;;;N;;;;;
+1D8D6;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;;
+1D8D7;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE;So;0;L;;;;;N;;;;;
+1D8D8;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT;So;0;L;;;;;N;;;;;
+1D8D9;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN;So;0;L;;;;;N;;;;;
+1D8DA;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;;
+1D8DB;SIGNWRITING HAND-HINGE INDEX HINGED;So;0;L;;;;;N;;;;;
+1D8DC;SIGNWRITING HAND-FIST INDEX THUMB SIDE;So;0;L;;;;;N;;;;;
+1D8DD;SIGNWRITING HAND-HINGE INDEX THUMB SIDE;So;0;L;;;;;N;;;;;
+1D8DE;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL;So;0;L;;;;;N;;;;;
+1D8DF;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED;So;0;L;;;;;N;;;;;
+1D8E0;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT;So;0;L;;;;;N;;;;;
+1D8E1;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT;So;0;L;;;;;N;;;;;
+1D8E2;SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT;So;0;L;;;;;N;;;;;
+1D8E3;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE;So;0;L;;;;;N;;;;;
+1D8E4;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT;So;0;L;;;;;N;;;;;
+1D8E5;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT;So;0;L;;;;;N;;;;;
+1D8E6;SIGNWRITING HAND-FIST INDEX THUMB HOOK;So;0;L;;;;;N;;;;;
+1D8E7;SIGNWRITING HAND-FIST INDEX THUMB CURLICUE;So;0;L;;;;;N;;;;;
+1D8E8;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;;
+1D8E9;SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;;
+1D8EA;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER;So;0;L;;;;;N;;;;;
+1D8EB;SIGNWRITING HAND-FIST INDEX THUMB CIRCLE;So;0;L;;;;;N;;;;;
+1D8EC;SIGNWRITING HAND-CUP INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8ED;SIGNWRITING HAND-CUP INDEX THUMB OPEN;So;0;L;;;;;N;;;;;
+1D8EE;SIGNWRITING HAND-HINGE INDEX THUMB OPEN;So;0;L;;;;;N;;;;;
+1D8EF;SIGNWRITING HAND-HINGE INDEX THUMB LARGE;So;0;L;;;;;N;;;;;
+1D8F0;SIGNWRITING HAND-HINGE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8F1;SIGNWRITING HAND-HINGE INDEX THUMB SMALL;So;0;L;;;;;N;;;;;
+1D8F2;SIGNWRITING HAND-ANGLE INDEX THUMB OUT;So;0;L;;;;;N;;;;;
+1D8F3;SIGNWRITING HAND-ANGLE INDEX THUMB IN;So;0;L;;;;;N;;;;;
+1D8F4;SIGNWRITING HAND-ANGLE INDEX THUMB;So;0;L;;;;;N;;;;;
+1D8F5;SIGNWRITING HAND-FIST THUMB;So;0;L;;;;;N;;;;;
+1D8F6;SIGNWRITING HAND-FIST THUMB HEEL;So;0;L;;;;;N;;;;;
+1D8F7;SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL;So;0;L;;;;;N;;;;;
+1D8F8;SIGNWRITING HAND-FIST THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;;
+1D8F9;SIGNWRITING HAND-FIST THUMB SIDE BENT;So;0;L;;;;;N;;;;;
+1D8FA;SIGNWRITING HAND-FIST THUMB FORWARD;So;0;L;;;;;N;;;;;
+1D8FB;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE;So;0;L;;;;;N;;;;;
+1D8FC;SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;;
+1D8FD;SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE;So;0;L;;;;;N;;;;;
+1D8FE;SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS;So;0;L;;;;;N;;;;;
+1D8FF;SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS;So;0;L;;;;;N;;;;;
+1D900;SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS;So;0;L;;;;;N;;;;;
+1D901;SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS;So;0;L;;;;;N;;;;;
+1D902;SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES;So;0;L;;;;;N;;;;;
+1D903;SIGNWRITING HAND-FIST;So;0;L;;;;;N;;;;;
+1D904;SIGNWRITING HAND-FIST HEEL;So;0;L;;;;;N;;;;;
+1D905;SIGNWRITING TOUCH SINGLE;So;0;L;;;;;N;;;;;
+1D906;SIGNWRITING TOUCH MULTIPLE;So;0;L;;;;;N;;;;;
+1D907;SIGNWRITING TOUCH BETWEEN;So;0;L;;;;;N;;;;;
+1D908;SIGNWRITING GRASP SINGLE;So;0;L;;;;;N;;;;;
+1D909;SIGNWRITING GRASP MULTIPLE;So;0;L;;;;;N;;;;;
+1D90A;SIGNWRITING GRASP BETWEEN;So;0;L;;;;;N;;;;;
+1D90B;SIGNWRITING STRIKE SINGLE;So;0;L;;;;;N;;;;;
+1D90C;SIGNWRITING STRIKE MULTIPLE;So;0;L;;;;;N;;;;;
+1D90D;SIGNWRITING STRIKE BETWEEN;So;0;L;;;;;N;;;;;
+1D90E;SIGNWRITING BRUSH SINGLE;So;0;L;;;;;N;;;;;
+1D90F;SIGNWRITING BRUSH MULTIPLE;So;0;L;;;;;N;;;;;
+1D910;SIGNWRITING BRUSH BETWEEN;So;0;L;;;;;N;;;;;
+1D911;SIGNWRITING RUB SINGLE;So;0;L;;;;;N;;;;;
+1D912;SIGNWRITING RUB MULTIPLE;So;0;L;;;;;N;;;;;
+1D913;SIGNWRITING RUB BETWEEN;So;0;L;;;;;N;;;;;
+1D914;SIGNWRITING SURFACE SYMBOLS;So;0;L;;;;;N;;;;;
+1D915;SIGNWRITING SURFACE BETWEEN;So;0;L;;;;;N;;;;;
+1D916;SIGNWRITING SQUEEZE LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D917;SIGNWRITING SQUEEZE SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D918;SIGNWRITING SQUEEZE LARGE MULTIPLE;So;0;L;;;;;N;;;;;
+1D919;SIGNWRITING SQUEEZE SMALL MULTIPLE;So;0;L;;;;;N;;;;;
+1D91A;SIGNWRITING SQUEEZE SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D91B;SIGNWRITING FLICK LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D91C;SIGNWRITING FLICK SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D91D;SIGNWRITING FLICK LARGE MULTIPLE;So;0;L;;;;;N;;;;;
+1D91E;SIGNWRITING FLICK SMALL MULTIPLE;So;0;L;;;;;N;;;;;
+1D91F;SIGNWRITING FLICK SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D920;SIGNWRITING SQUEEZE FLICK ALTERNATING;So;0;L;;;;;N;;;;;
+1D921;SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE;So;0;L;;;;;N;;;;;
+1D922;SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL;So;0;L;;;;;N;;;;;
+1D923;SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D924;SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL;So;0;L;;;;;N;;;;;
+1D925;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE;So;0;L;;;;;N;;;;;
+1D926;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL;So;0;L;;;;;N;;;;;
+1D927;SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS;So;0;L;;;;;N;;;;;
+1D928;SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT;So;0;L;;;;;N;;;;;
+1D929;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT;So;0;L;;;;;N;;;;;
+1D92A;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;;
+1D92B;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;;
+1D92C;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;;
+1D92D;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;;
+1D92E;SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D92F;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D930;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D931;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;;
+1D932;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D933;SIGNWRITING MOVEMENT-WALLPLANE CROSS;So;0;L;;;;;N;;;;;
+1D934;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;;
+1D935;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D936;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING;So;0;L;;;;;N;;;;;
+1D937;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D938;SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL;So;0;L;;;;;N;;;;;
+1D939;SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM;So;0;L;;;;;N;;;;;
+1D93A;SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE;So;0;L;;;;;N;;;;;
+1D93B;SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL;So;0;L;;;;;N;;;;;
+1D93C;SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;;
+1D93D;SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE;So;0;L;;;;;N;;;;;
+1D93E;SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION;So;0;L;;;;;N;;;;;
+1D93F;SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL;So;0;L;;;;;N;;;;;
+1D940;SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM;So;0;L;;;;;N;;;;;
+1D941;SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE;So;0;L;;;;;N;;;;;
+1D942;SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL;So;0;L;;;;;N;;;;;
+1D943;SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM;So;0;L;;;;;N;;;;;
+1D944;SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE;So;0;L;;;;;N;;;;;
+1D945;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;;
+1D946;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;;
+1D947;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;;
+1D948;SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL;So;0;L;;;;;N;;;;;
+1D949;SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;;
+1D94A;SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE;So;0;L;;;;;N;;;;;
+1D94B;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D94C;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D94D;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D94E;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D94F;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D950;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D951;SIGNWRITING TRAVEL-WALLPLANE SHAKING;So;0;L;;;;;N;;;;;
+1D952;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE;So;0;L;;;;;N;;;;;
+1D953;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE;So;0;L;;;;;N;;;;;
+1D954;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE;So;0;L;;;;;N;;;;;
+1D955;SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL;So;0;L;;;;;N;;;;;
+1D956;SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM;So;0;L;;;;;N;;;;;
+1D957;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE;So;0;L;;;;;N;;;;;
+1D958;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST;So;0;L;;;;;N;;;;;
+1D959;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL;So;0;L;;;;;N;;;;;
+1D95A;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM;So;0;L;;;;;N;;;;;
+1D95B;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE;So;0;L;;;;;N;;;;;
+1D95C;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST;So;0;L;;;;;N;;;;;
+1D95D;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL;So;0;L;;;;;N;;;;;
+1D95E;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM;So;0;L;;;;;N;;;;;
+1D95F;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE;So;0;L;;;;;N;;;;;
+1D960;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST;So;0;L;;;;;N;;;;;
+1D961;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL;So;0;L;;;;;N;;;;;
+1D962;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM;So;0;L;;;;;N;;;;;
+1D963;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE;So;0;L;;;;;N;;;;;
+1D964;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST;So;0;L;;;;;N;;;;;
+1D965;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;;
+1D966;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;;
+1D967;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;;
+1D968;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;;
+1D969;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D96A;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;;
+1D96B;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D96C;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;;
+1D96D;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D96E;SIGNWRITING MOVEMENT-FLOORPLANE CROSS;So;0;L;;;;;N;;;;;
+1D96F;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;;
+1D970;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;;
+1D971;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT;So;0;L;;;;;N;;;;;
+1D972;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;
+1D973;SIGNWRITING MOVEMENT-FLOORPLANE BEND;So;0;L;;;;;N;;;;;
+1D974;SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL;So;0;L;;;;;N;;;;;
+1D975;SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;;
+1D976;SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE;So;0;L;;;;;N;;;;;
+1D977;SIGNWRITING MOVEMENT-FLOORPLANE CHECK;So;0;L;;;;;N;;;;;
+1D978;SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL;So;0;L;;;;;N;;;;;
+1D979;SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM;So;0;L;;;;;N;;;;;
+1D97A;SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE;So;0;L;;;;;N;;;;;
+1D97B;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;;
+1D97C;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;;
+1D97D;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;;
+1D97E;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL;So;0;L;;;;;N;;;;;
+1D97F;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;;
+1D980;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE;So;0;L;;;;;N;;;;;
+1D981;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D982;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D983;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D984;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D985;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D986;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D987;SIGNWRITING TRAVEL-FLOORPLANE SHAKING;So;0;L;;;;;N;;;;;
+1D988;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL;So;0;L;;;;;N;;;;;
+1D989;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM;So;0;L;;;;;N;;;;;
+1D98A;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE;So;0;L;;;;;N;;;;;
+1D98B;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST;So;0;L;;;;;N;;;;;
+1D98C;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL;So;0;L;;;;;N;;;;;
+1D98D;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM;So;0;L;;;;;N;;;;;
+1D98E;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE;So;0;L;;;;;N;;;;;
+1D98F;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST;So;0;L;;;;;N;;;;;
+1D990;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL;So;0;L;;;;;N;;;;;
+1D991;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM;So;0;L;;;;;N;;;;;
+1D992;SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL;So;0;L;;;;;N;;;;;
+1D993;SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM;So;0;L;;;;;N;;;;;
+1D994;SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE;So;0;L;;;;;N;;;;;
+1D995;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL;So;0;L;;;;;N;;;;;
+1D996;SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM;So;0;L;;;;;N;;;;;
+1D997;SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE;So;0;L;;;;;N;;;;;
+1D998;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D999;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL;So;0;L;;;;;N;;;;;
+1D99A;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM;So;0;L;;;;;N;;;;;
+1D99B;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE;So;0;L;;;;;N;;;;;
+1D99C;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL;So;0;L;;;;;N;;;;;
+1D99D;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM;So;0;L;;;;;N;;;;;
+1D99E;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE;So;0;L;;;;;N;;;;;
+1D99F;SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT;So;0;L;;;;;N;;;;;
+1D9A0;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL;So;0;L;;;;;N;;;;;
+1D9A1;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM;So;0;L;;;;;N;;;;;
+1D9A2;SIGNWRITING ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D9A3;SIGNWRITING ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D9A4;SIGNWRITING ROTATION-WALLPLANE ALTERNATE;So;0;L;;;;;N;;;;;
+1D9A5;SIGNWRITING MOVEMENT-WALLPLANE SHAKING;So;0;L;;;;;N;;;;;
+1D9A6;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9A7;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9A8;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9A9;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AA;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AB;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AC;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL;So;0;L;;;;;N;;;;;
+1D9AD;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9AE;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9AF;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B0;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B1;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B2;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B3;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST;So;0;L;;;;;N;;;;;
+1D9B4;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL;So;0;L;;;;;N;;;;;
+1D9B5;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM;So;0;L;;;;;N;;;;;
+1D9B6;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE;So;0;L;;;;;N;;;;;
+1D9B7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;;
+1D9B8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;;
+1D9B9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9BA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9BB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE;So;0;L;;;;;N;;;;;
+1D9BC;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE;So;0;L;;;;;N;;;;;
+1D9BD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9BE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D9BF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9C0;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9C1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;;
+1D9C2;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;;
+1D9C3;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING;So;0;L;;;;;N;;;;;
+1D9C4;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING;So;0;L;;;;;N;;;;;
+1D9C5;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING;So;0;L;;;;;N;;;;;
+1D9C6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;;
+1D9C7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;;
+1D9C8;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9C9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9CA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE;So;0;L;;;;;N;;;;;
+1D9CB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE;So;0;L;;;;;N;;;;;
+1D9CC;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9CD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D9CE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9CF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9D0;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;;
+1D9D1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;;
+1D9D2;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR;So;0;L;;;;;N;;;;;
+1D9D3;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR;So;0;L;;;;;N;;;;;
+1D9D4;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR;So;0;L;;;;;N;;;;;
+1D9D5;SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL;So;0;L;;;;;N;;;;;
+1D9D6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM;So;0;L;;;;;N;;;;;
+1D9D7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE;So;0;L;;;;;N;;;;;
+1D9D8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST;So;0;L;;;;;N;;;;;
+1D9D9;SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED;So;0;L;;;;;N;;;;;
+1D9DA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL;So;0;L;;;;;N;;;;;
+1D9DB;SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL;So;0;L;;;;;N;;;;;
+1D9DC;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE;So;0;L;;;;;N;;;;;
+1D9DD;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL;So;0;L;;;;;N;;;;;
+1D9DE;SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE;So;0;L;;;;;N;;;;;
+1D9DF;SIGNWRITING ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;
+1D9E0;SIGNWRITING ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;
+1D9E1;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;
+1D9E2;SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL;So;0;L;;;;;N;;;;;
+1D9E3;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9E4;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE;So;0;L;;;;;N;;;;;
+1D9E5;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9E6;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE;So;0;L;;;;;N;;;;;
+1D9E7;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE;So;0;L;;;;;N;;;;;
+1D9E8;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE;So;0;L;;;;;N;;;;;
+1D9E9;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE;So;0;L;;;;;N;;;;;
+1D9EA;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9EB;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE;So;0;L;;;;;N;;;;;
+1D9EC;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE;So;0;L;;;;;N;;;;;
+1D9ED;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE;So;0;L;;;;;N;;;;;
+1D9EE;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE;So;0;L;;;;;N;;;;;
+1D9EF;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE;So;0;L;;;;;N;;;;;
+1D9F0;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9F1;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE;So;0;L;;;;;N;;;;;
+1D9F2;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE;So;0;L;;;;;N;;;;;
+1D9F3;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE;So;0;L;;;;;N;;;;;
+1D9F4;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE;So;0;L;;;;;N;;;;;
+1D9F5;SIGNWRITING DYNAMIC ARROWHEAD SMALL;So;0;L;;;;;N;;;;;
+1D9F6;SIGNWRITING DYNAMIC ARROWHEAD LARGE;So;0;L;;;;;N;;;;;
+1D9F7;SIGNWRITING DYNAMIC FAST;So;0;L;;;;;N;;;;;
+1D9F8;SIGNWRITING DYNAMIC SLOW;So;0;L;;;;;N;;;;;
+1D9F9;SIGNWRITING DYNAMIC TENSE;So;0;L;;;;;N;;;;;
+1D9FA;SIGNWRITING DYNAMIC RELAXED;So;0;L;;;;;N;;;;;
+1D9FB;SIGNWRITING DYNAMIC SIMULTANEOUS;So;0;L;;;;;N;;;;;
+1D9FC;SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING;So;0;L;;;;;N;;;;;
+1D9FD;SIGNWRITING DYNAMIC EVERY OTHER TIME;So;0;L;;;;;N;;;;;
+1D9FE;SIGNWRITING DYNAMIC GRADUAL;So;0;L;;;;;N;;;;;
+1D9FF;SIGNWRITING HEAD;So;0;L;;;;;N;;;;;
+1DA00;SIGNWRITING HEAD RIM;Mn;0;NSM;;;;;N;;;;;
+1DA01;SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA02;SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT;Mn;0;NSM;;;;;N;;;;;
+1DA03;SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA04;SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE;Mn;0;NSM;;;;;N;;;;;
+1DA05;SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE;Mn;0;NSM;;;;;N;;;;;
+1DA06;SIGNWRITING HEAD MOVEMENT CIRCLE;Mn;0;NSM;;;;;N;;;;;
+1DA07;SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING;Mn;0;NSM;;;;;N;;;;;
+1DA08;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA09;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING;Mn;0;NSM;;;;;N;;;;;
+1DA0A;SIGNWRITING EYEBROWS STRAIGHT UP;Mn;0;NSM;;;;;N;;;;;
+1DA0B;SIGNWRITING EYEBROWS STRAIGHT NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA0C;SIGNWRITING EYEBROWS STRAIGHT DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA0D;SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA0E;SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA0F;SIGNWRITING DREAMY EYEBROWS UP NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA10;SIGNWRITING DREAMY EYEBROWS NEUTRAL UP;Mn;0;NSM;;;;;N;;;;;
+1DA11;SIGNWRITING FOREHEAD NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA12;SIGNWRITING FOREHEAD CONTACT;Mn;0;NSM;;;;;N;;;;;
+1DA13;SIGNWRITING FOREHEAD WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA14;SIGNWRITING EYES OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA15;SIGNWRITING EYES SQUEEZED;Mn;0;NSM;;;;;N;;;;;
+1DA16;SIGNWRITING EYES CLOSED;Mn;0;NSM;;;;;N;;;;;
+1DA17;SIGNWRITING EYE BLINK SINGLE;Mn;0;NSM;;;;;N;;;;;
+1DA18;SIGNWRITING EYE BLINK MULTIPLE;Mn;0;NSM;;;;;N;;;;;
+1DA19;SIGNWRITING EYES HALF OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA1A;SIGNWRITING EYES WIDE OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA1B;SIGNWRITING EYES HALF CLOSED;Mn;0;NSM;;;;;N;;;;;
+1DA1C;SIGNWRITING EYES WIDENING MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA1D;SIGNWRITING EYE WINK;Mn;0;NSM;;;;;N;;;;;
+1DA1E;SIGNWRITING EYELASHES UP;Mn;0;NSM;;;;;N;;;;;
+1DA1F;SIGNWRITING EYELASHES DOWN;Mn;0;NSM;;;;;N;;;;;
+1DA20;SIGNWRITING EYELASHES FLUTTERING;Mn;0;NSM;;;;;N;;;;;
+1DA21;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA22;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;;
+1DA23;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;;
+1DA24;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;
+1DA25;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;;
+1DA26;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;;
+1DA27;SIGNWRITING EYEGAZE-WALLPLANE CURVED;Mn;0;NSM;;;;;N;;;;;
+1DA28;SIGNWRITING EYEGAZE-FLOORPLANE CURVED;Mn;0;NSM;;;;;N;;;;;
+1DA29;SIGNWRITING EYEGAZE-WALLPLANE CIRCLING;Mn;0;NSM;;;;;N;;;;;
+1DA2A;SIGNWRITING CHEEKS PUFFED;Mn;0;NSM;;;;;N;;;;;
+1DA2B;SIGNWRITING CHEEKS NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA2C;SIGNWRITING CHEEKS SUCKED;Mn;0;NSM;;;;;N;;;;;
+1DA2D;SIGNWRITING TENSE CHEEKS HIGH;Mn;0;NSM;;;;;N;;;;;
+1DA2E;SIGNWRITING TENSE CHEEKS MIDDLE;Mn;0;NSM;;;;;N;;;;;
+1DA2F;SIGNWRITING TENSE CHEEKS LOW;Mn;0;NSM;;;;;N;;;;;
+1DA30;SIGNWRITING EARS;Mn;0;NSM;;;;;N;;;;;
+1DA31;SIGNWRITING NOSE NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA32;SIGNWRITING NOSE CONTACT;Mn;0;NSM;;;;;N;;;;;
+1DA33;SIGNWRITING NOSE WRINKLES;Mn;0;NSM;;;;;N;;;;;
+1DA34;SIGNWRITING NOSE WIGGLES;Mn;0;NSM;;;;;N;;;;;
+1DA35;SIGNWRITING AIR BLOWING OUT;Mn;0;NSM;;;;;N;;;;;
+1DA36;SIGNWRITING AIR SUCKING IN;Mn;0;NSM;;;;;N;;;;;
+1DA37;SIGNWRITING AIR BLOW SMALL ROTATIONS;So;0;L;;;;;N;;;;;
+1DA38;SIGNWRITING AIR SUCK SMALL ROTATIONS;So;0;L;;;;;N;;;;;
+1DA39;SIGNWRITING BREATH INHALE;So;0;L;;;;;N;;;;;
+1DA3A;SIGNWRITING BREATH EXHALE;So;0;L;;;;;N;;;;;
+1DA3B;SIGNWRITING MOUTH CLOSED NEUTRAL;Mn;0;NSM;;;;;N;;;;;
+1DA3C;SIGNWRITING MOUTH CLOSED FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA3D;SIGNWRITING MOUTH CLOSED CONTACT;Mn;0;NSM;;;;;N;;;;;
+1DA3E;SIGNWRITING MOUTH SMILE;Mn;0;NSM;;;;;N;;;;;
+1DA3F;SIGNWRITING MOUTH SMILE WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA40;SIGNWRITING MOUTH SMILE OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA41;SIGNWRITING MOUTH FROWN;Mn;0;NSM;;;;;N;;;;;
+1DA42;SIGNWRITING MOUTH FROWN WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA43;SIGNWRITING MOUTH FROWN OPEN;Mn;0;NSM;;;;;N;;;;;
+1DA44;SIGNWRITING MOUTH OPEN CIRCLE;Mn;0;NSM;;;;;N;;;;;
+1DA45;SIGNWRITING MOUTH OPEN FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA46;SIGNWRITING MOUTH OPEN WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA47;SIGNWRITING MOUTH OPEN OVAL;Mn;0;NSM;;;;;N;;;;;
+1DA48;SIGNWRITING MOUTH OPEN OVAL WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA49;SIGNWRITING MOUTH OPEN OVAL YAWN;Mn;0;NSM;;;;;N;;;;;
+1DA4A;SIGNWRITING MOUTH OPEN RECTANGLE;Mn;0;NSM;;;;;N;;;;;
+1DA4B;SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA4C;SIGNWRITING MOUTH OPEN RECTANGLE YAWN;Mn;0;NSM;;;;;N;;;;;
+1DA4D;SIGNWRITING MOUTH KISS;Mn;0;NSM;;;;;N;;;;;
+1DA4E;SIGNWRITING MOUTH KISS FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA4F;SIGNWRITING MOUTH KISS WRINKLED;Mn;0;NSM;;;;;N;;;;;
+1DA50;SIGNWRITING MOUTH TENSE;Mn;0;NSM;;;;;N;;;;;
+1DA51;SIGNWRITING MOUTH TENSE FORWARD;Mn;0;NSM;;;;;N;;;;;
+1DA52;SIGNWRITING MOUTH TENSE SUCKED;Mn;0;NSM;;;;;N;;;;;
+1DA53;SIGNWRITING LIPS PRESSED TOGETHER;Mn;0;NSM;;;;;N;;;;;
+1DA54;SIGNWRITING LIP LOWER OVER UPPER;Mn;0;NSM;;;;;N;;;;;
+1DA55;SIGNWRITING LIP UPPER OVER LOWER;Mn;0;NSM;;;;;N;;;;;
+1DA56;SIGNWRITING MOUTH CORNERS;Mn;0;NSM;;;;;N;;;;;
+1DA57;SIGNWRITING MOUTH WRINKLES SINGLE;Mn;0;NSM;;;;;N;;;;;
+1DA58;SIGNWRITING MOUTH WRINKLES DOUBLE;Mn;0;NSM;;;;;N;;;;;
+1DA59;SIGNWRITING TONGUE STICKING OUT FAR;Mn;0;NSM;;;;;N;;;;;
+1DA5A;SIGNWRITING TONGUE LICKING LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA5B;SIGNWRITING TONGUE TIP BETWEEN LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA5C;SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;;
+1DA5D;SIGNWRITING TONGUE INSIDE MOUTH RELAXED;Mn;0;NSM;;;;;N;;;;;
+1DA5E;SIGNWRITING TONGUE MOVES AGAINST CHEEK;Mn;0;NSM;;;;;N;;;;;
+1DA5F;SIGNWRITING TONGUE CENTRE STICKING OUT;Mn;0;NSM;;;;;N;;;;;
+1DA60;SIGNWRITING TONGUE CENTRE INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;;
+1DA61;SIGNWRITING TEETH;Mn;0;NSM;;;;;N;;;;;
+1DA62;SIGNWRITING TEETH MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA63;SIGNWRITING TEETH ON TONGUE;Mn;0;NSM;;;;;N;;;;;
+1DA64;SIGNWRITING TEETH ON TONGUE MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA65;SIGNWRITING TEETH ON LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA66;SIGNWRITING TEETH ON LIPS MOVEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA67;SIGNWRITING TEETH BITE LIPS;Mn;0;NSM;;;;;N;;;;;
+1DA68;SIGNWRITING MOVEMENT-WALLPLANE JAW;Mn;0;NSM;;;;;N;;;;;
+1DA69;SIGNWRITING MOVEMENT-FLOORPLANE JAW;Mn;0;NSM;;;;;N;;;;;
+1DA6A;SIGNWRITING NECK;Mn;0;NSM;;;;;N;;;;;
+1DA6B;SIGNWRITING HAIR;Mn;0;NSM;;;;;N;;;;;
+1DA6C;SIGNWRITING EXCITEMENT;Mn;0;NSM;;;;;N;;;;;
+1DA6D;SIGNWRITING SHOULDER HIP SPINE;So;0;L;;;;;N;;;;;
+1DA6E;SIGNWRITING SHOULDER HIP POSITIONS;So;0;L;;;;;N;;;;;
+1DA6F;SIGNWRITING WALLPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;;
+1DA70;SIGNWRITING FLOORPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;;
+1DA71;SIGNWRITING SHOULDER TILTING FROM WAIST;So;0;L;;;;;N;;;;;
+1DA72;SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH;So;0;L;;;;;N;;;;;
+1DA73;SIGNWRITING TORSO-WALLPLANE CURVED BEND;So;0;L;;;;;N;;;;;
+1DA74;SIGNWRITING TORSO-FLOORPLANE TWISTING;So;0;L;;;;;N;;;;;
+1DA75;SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS;Mn;0;NSM;;;;;N;;;;;
+1DA76;SIGNWRITING LIMB COMBINATION;So;0;L;;;;;N;;;;;
+1DA77;SIGNWRITING LIMB LENGTH-1;So;0;L;;;;;N;;;;;
+1DA78;SIGNWRITING LIMB LENGTH-2;So;0;L;;;;;N;;;;;
+1DA79;SIGNWRITING LIMB LENGTH-3;So;0;L;;;;;N;;;;;
+1DA7A;SIGNWRITING LIMB LENGTH-4;So;0;L;;;;;N;;;;;
+1DA7B;SIGNWRITING LIMB LENGTH-5;So;0;L;;;;;N;;;;;
+1DA7C;SIGNWRITING LIMB LENGTH-6;So;0;L;;;;;N;;;;;
+1DA7D;SIGNWRITING LIMB LENGTH-7;So;0;L;;;;;N;;;;;
+1DA7E;SIGNWRITING FINGER;So;0;L;;;;;N;;;;;
+1DA7F;SIGNWRITING LOCATION-WALLPLANE SPACE;So;0;L;;;;;N;;;;;
+1DA80;SIGNWRITING LOCATION-FLOORPLANE SPACE;So;0;L;;;;;N;;;;;
+1DA81;SIGNWRITING LOCATION HEIGHT;So;0;L;;;;;N;;;;;
+1DA82;SIGNWRITING LOCATION WIDTH;So;0;L;;;;;N;;;;;
+1DA83;SIGNWRITING LOCATION DEPTH;So;0;L;;;;;N;;;;;
+1DA84;SIGNWRITING LOCATION HEAD NECK;Mn;0;NSM;;;;;N;;;;;
+1DA85;SIGNWRITING LOCATION TORSO;So;0;L;;;;;N;;;;;
+1DA86;SIGNWRITING LOCATION LIMBS DIGITS;So;0;L;;;;;N;;;;;
+1DA87;SIGNWRITING COMMA;Po;0;L;;;;;N;;;;;
+1DA88;SIGNWRITING FULL STOP;Po;0;L;;;;;N;;;;;
+1DA89;SIGNWRITING SEMICOLON;Po;0;L;;;;;N;;;;;
+1DA8A;SIGNWRITING COLON;Po;0;L;;;;;N;;;;;
+1DA8B;SIGNWRITING PARENTHESIS;Po;0;L;;;;;N;;;;;
+1DA9B;SIGNWRITING FILL MODIFIER-2;Mn;0;NSM;;;;;N;;;;;
+1DA9C;SIGNWRITING FILL MODIFIER-3;Mn;0;NSM;;;;;N;;;;;
+1DA9D;SIGNWRITING FILL MODIFIER-4;Mn;0;NSM;;;;;N;;;;;
+1DA9E;SIGNWRITING FILL MODIFIER-5;Mn;0;NSM;;;;;N;;;;;
+1DA9F;SIGNWRITING FILL MODIFIER-6;Mn;0;NSM;;;;;N;;;;;
+1DAA1;SIGNWRITING ROTATION MODIFIER-2;Mn;0;NSM;;;;;N;;;;;
+1DAA2;SIGNWRITING ROTATION MODIFIER-3;Mn;0;NSM;;;;;N;;;;;
+1DAA3;SIGNWRITING ROTATION MODIFIER-4;Mn;0;NSM;;;;;N;;;;;
+1DAA4;SIGNWRITING ROTATION MODIFIER-5;Mn;0;NSM;;;;;N;;;;;
+1DAA5;SIGNWRITING ROTATION MODIFIER-6;Mn;0;NSM;;;;;N;;;;;
+1DAA6;SIGNWRITING ROTATION MODIFIER-7;Mn;0;NSM;;;;;N;;;;;
+1DAA7;SIGNWRITING ROTATION MODIFIER-8;Mn;0;NSM;;;;;N;;;;;
+1DAA8;SIGNWRITING ROTATION MODIFIER-9;Mn;0;NSM;;;;;N;;;;;
+1DAA9;SIGNWRITING ROTATION MODIFIER-10;Mn;0;NSM;;;;;N;;;;;
+1DAAA;SIGNWRITING ROTATION MODIFIER-11;Mn;0;NSM;;;;;N;;;;;
+1DAAB;SIGNWRITING ROTATION MODIFIER-12;Mn;0;NSM;;;;;N;;;;;
+1DAAC;SIGNWRITING ROTATION MODIFIER-13;Mn;0;NSM;;;;;N;;;;;
+1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;
+1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;
+1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;
+1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;
+1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;
+1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;
+1E003;COMBINING GLAGOLITIC LETTER GLAGOLI;Mn;230;NSM;;;;;N;;;;;
+1E004;COMBINING GLAGOLITIC LETTER DOBRO;Mn;230;NSM;;;;;N;;;;;
+1E005;COMBINING GLAGOLITIC LETTER YESTU;Mn;230;NSM;;;;;N;;;;;
+1E006;COMBINING GLAGOLITIC LETTER ZHIVETE;Mn;230;NSM;;;;;N;;;;;
+1E008;COMBINING GLAGOLITIC LETTER ZEMLJA;Mn;230;NSM;;;;;N;;;;;
+1E009;COMBINING GLAGOLITIC LETTER IZHE;Mn;230;NSM;;;;;N;;;;;
+1E00A;COMBINING GLAGOLITIC LETTER INITIAL IZHE;Mn;230;NSM;;;;;N;;;;;
+1E00B;COMBINING GLAGOLITIC LETTER I;Mn;230;NSM;;;;;N;;;;;
+1E00C;COMBINING GLAGOLITIC LETTER DJERVI;Mn;230;NSM;;;;;N;;;;;
+1E00D;COMBINING GLAGOLITIC LETTER KAKO;Mn;230;NSM;;;;;N;;;;;
+1E00E;COMBINING GLAGOLITIC LETTER LJUDIJE;Mn;230;NSM;;;;;N;;;;;
+1E00F;COMBINING GLAGOLITIC LETTER MYSLITE;Mn;230;NSM;;;;;N;;;;;
+1E010;COMBINING GLAGOLITIC LETTER NASHI;Mn;230;NSM;;;;;N;;;;;
+1E011;COMBINING GLAGOLITIC LETTER ONU;Mn;230;NSM;;;;;N;;;;;
+1E012;COMBINING GLAGOLITIC LETTER POKOJI;Mn;230;NSM;;;;;N;;;;;
+1E013;COMBINING GLAGOLITIC LETTER RITSI;Mn;230;NSM;;;;;N;;;;;
+1E014;COMBINING GLAGOLITIC LETTER SLOVO;Mn;230;NSM;;;;;N;;;;;
+1E015;COMBINING GLAGOLITIC LETTER TVRIDO;Mn;230;NSM;;;;;N;;;;;
+1E016;COMBINING GLAGOLITIC LETTER UKU;Mn;230;NSM;;;;;N;;;;;
+1E017;COMBINING GLAGOLITIC LETTER FRITU;Mn;230;NSM;;;;;N;;;;;
+1E018;COMBINING GLAGOLITIC LETTER HERU;Mn;230;NSM;;;;;N;;;;;
+1E01B;COMBINING GLAGOLITIC LETTER SHTA;Mn;230;NSM;;;;;N;;;;;
+1E01C;COMBINING GLAGOLITIC LETTER TSI;Mn;230;NSM;;;;;N;;;;;
+1E01D;COMBINING GLAGOLITIC LETTER CHRIVI;Mn;230;NSM;;;;;N;;;;;
+1E01E;COMBINING GLAGOLITIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
+1E01F;COMBINING GLAGOLITIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;
+1E020;COMBINING GLAGOLITIC LETTER YERI;Mn;230;NSM;;;;;N;;;;;
+1E021;COMBINING GLAGOLITIC LETTER YATI;Mn;230;NSM;;;;;N;;;;;
+1E023;COMBINING GLAGOLITIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
+1E024;COMBINING GLAGOLITIC LETTER SMALL YUS;Mn;230;NSM;;;;;N;;;;;
+1E026;COMBINING GLAGOLITIC LETTER YO;Mn;230;NSM;;;;;N;;;;;
+1E027;COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS;Mn;230;NSM;;;;;N;;;;;
+1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
+1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;;
+1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
+1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;;
+1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;;
+1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;;
+1E103;NYIAKENG PUACHUE HMONG LETTER TA;Lo;0;L;;;;;N;;;;;
+1E104;NYIAKENG PUACHUE HMONG LETTER HA;Lo;0;L;;;;;N;;;;;
+1E105;NYIAKENG PUACHUE HMONG LETTER NA;Lo;0;L;;;;;N;;;;;
+1E106;NYIAKENG PUACHUE HMONG LETTER XA;Lo;0;L;;;;;N;;;;;
+1E107;NYIAKENG PUACHUE HMONG LETTER NKA;Lo;0;L;;;;;N;;;;;
+1E108;NYIAKENG PUACHUE HMONG LETTER CA;Lo;0;L;;;;;N;;;;;
+1E109;NYIAKENG PUACHUE HMONG LETTER LA;Lo;0;L;;;;;N;;;;;
+1E10A;NYIAKENG PUACHUE HMONG LETTER SA;Lo;0;L;;;;;N;;;;;
+1E10B;NYIAKENG PUACHUE HMONG LETTER ZA;Lo;0;L;;;;;N;;;;;
+1E10C;NYIAKENG PUACHUE HMONG LETTER NCA;Lo;0;L;;;;;N;;;;;
+1E10D;NYIAKENG PUACHUE HMONG LETTER NTSA;Lo;0;L;;;;;N;;;;;
+1E10E;NYIAKENG PUACHUE HMONG LETTER KA;Lo;0;L;;;;;N;;;;;
+1E10F;NYIAKENG PUACHUE HMONG LETTER DA;Lo;0;L;;;;;N;;;;;
+1E110;NYIAKENG PUACHUE HMONG LETTER NYA;Lo;0;L;;;;;N;;;;;
+1E111;NYIAKENG PUACHUE HMONG LETTER NRA;Lo;0;L;;;;;N;;;;;
+1E112;NYIAKENG PUACHUE HMONG LETTER VA;Lo;0;L;;;;;N;;;;;
+1E113;NYIAKENG PUACHUE HMONG LETTER NTXA;Lo;0;L;;;;;N;;;;;
+1E114;NYIAKENG PUACHUE HMONG LETTER TXA;Lo;0;L;;;;;N;;;;;
+1E115;NYIAKENG PUACHUE HMONG LETTER FA;Lo;0;L;;;;;N;;;;;
+1E116;NYIAKENG PUACHUE HMONG LETTER RA;Lo;0;L;;;;;N;;;;;
+1E117;NYIAKENG PUACHUE HMONG LETTER QA;Lo;0;L;;;;;N;;;;;
+1E118;NYIAKENG PUACHUE HMONG LETTER YA;Lo;0;L;;;;;N;;;;;
+1E119;NYIAKENG PUACHUE HMONG LETTER NQA;Lo;0;L;;;;;N;;;;;
+1E11A;NYIAKENG PUACHUE HMONG LETTER PA;Lo;0;L;;;;;N;;;;;
+1E11B;NYIAKENG PUACHUE HMONG LETTER XYA;Lo;0;L;;;;;N;;;;;
+1E11C;NYIAKENG PUACHUE HMONG LETTER NPA;Lo;0;L;;;;;N;;;;;
+1E11D;NYIAKENG PUACHUE HMONG LETTER DLA;Lo;0;L;;;;;N;;;;;
+1E11E;NYIAKENG PUACHUE HMONG LETTER NPLA;Lo;0;L;;;;;N;;;;;
+1E11F;NYIAKENG PUACHUE HMONG LETTER HAH;Lo;0;L;;;;;N;;;;;
+1E120;NYIAKENG PUACHUE HMONG LETTER MLA;Lo;0;L;;;;;N;;;;;
+1E121;NYIAKENG PUACHUE HMONG LETTER PLA;Lo;0;L;;;;;N;;;;;
+1E122;NYIAKENG PUACHUE HMONG LETTER GA;Lo;0;L;;;;;N;;;;;
+1E123;NYIAKENG PUACHUE HMONG LETTER RRA;Lo;0;L;;;;;N;;;;;
+1E124;NYIAKENG PUACHUE HMONG LETTER A;Lo;0;L;;;;;N;;;;;
+1E125;NYIAKENG PUACHUE HMONG LETTER AA;Lo;0;L;;;;;N;;;;;
+1E126;NYIAKENG PUACHUE HMONG LETTER I;Lo;0;L;;;;;N;;;;;
+1E127;NYIAKENG PUACHUE HMONG LETTER U;Lo;0;L;;;;;N;;;;;
+1E128;NYIAKENG PUACHUE HMONG LETTER O;Lo;0;L;;;;;N;;;;;
+1E129;NYIAKENG PUACHUE HMONG LETTER OO;Lo;0;L;;;;;N;;;;;
+1E12A;NYIAKENG PUACHUE HMONG LETTER E;Lo;0;L;;;;;N;;;;;
+1E12B;NYIAKENG PUACHUE HMONG LETTER EE;Lo;0;L;;;;;N;;;;;
+1E12C;NYIAKENG PUACHUE HMONG LETTER W;Lo;0;L;;;;;N;;;;;
+1E130;NYIAKENG PUACHUE HMONG TONE-B;Mn;230;NSM;;;;;N;;;;;
+1E131;NYIAKENG PUACHUE HMONG TONE-M;Mn;230;NSM;;;;;N;;;;;
+1E132;NYIAKENG PUACHUE HMONG TONE-J;Mn;230;NSM;;;;;N;;;;;
+1E133;NYIAKENG PUACHUE HMONG TONE-V;Mn;230;NSM;;;;;N;;;;;
+1E134;NYIAKENG PUACHUE HMONG TONE-S;Mn;230;NSM;;;;;N;;;;;
+1E135;NYIAKENG PUACHUE HMONG TONE-G;Mn;230;NSM;;;;;N;;;;;
+1E136;NYIAKENG PUACHUE HMONG TONE-D;Mn;230;NSM;;;;;N;;;;;
+1E137;NYIAKENG PUACHUE HMONG SIGN FOR PERSON;Lm;0;L;;;;;N;;;;;
+1E138;NYIAKENG PUACHUE HMONG SIGN FOR THING;Lm;0;L;;;;;N;;;;;
+1E139;NYIAKENG PUACHUE HMONG SIGN FOR LOCATION;Lm;0;L;;;;;N;;;;;
+1E13A;NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL;Lm;0;L;;;;;N;;;;;
+1E13B;NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE;Lm;0;L;;;;;N;;;;;
+1E13C;NYIAKENG PUACHUE HMONG SIGN XW XW;Lm;0;L;;;;;N;;;;;
+1E13D;NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;
+1E140;NYIAKENG PUACHUE HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1E141;NYIAKENG PUACHUE HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1E142;NYIAKENG PUACHUE HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1E143;NYIAKENG PUACHUE HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1E144;NYIAKENG PUACHUE HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1E145;NYIAKENG PUACHUE HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1E146;NYIAKENG PUACHUE HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1E147;NYIAKENG PUACHUE HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1E148;NYIAKENG PUACHUE HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;;
+1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;;
+1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;;
+1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;;
+1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;;
+1E2C3;WANCHO LETTER CA;Lo;0;L;;;;;N;;;;;
+1E2C4;WANCHO LETTER DA;Lo;0;L;;;;;N;;;;;
+1E2C5;WANCHO LETTER GA;Lo;0;L;;;;;N;;;;;
+1E2C6;WANCHO LETTER YA;Lo;0;L;;;;;N;;;;;
+1E2C7;WANCHO LETTER PHA;Lo;0;L;;;;;N;;;;;
+1E2C8;WANCHO LETTER LA;Lo;0;L;;;;;N;;;;;
+1E2C9;WANCHO LETTER NA;Lo;0;L;;;;;N;;;;;
+1E2CA;WANCHO LETTER PA;Lo;0;L;;;;;N;;;;;
+1E2CB;WANCHO LETTER TA;Lo;0;L;;;;;N;;;;;
+1E2CC;WANCHO LETTER THA;Lo;0;L;;;;;N;;;;;
+1E2CD;WANCHO LETTER FA;Lo;0;L;;;;;N;;;;;
+1E2CE;WANCHO LETTER SA;Lo;0;L;;;;;N;;;;;
+1E2CF;WANCHO LETTER SHA;Lo;0;L;;;;;N;;;;;
+1E2D0;WANCHO LETTER JA;Lo;0;L;;;;;N;;;;;
+1E2D1;WANCHO LETTER ZA;Lo;0;L;;;;;N;;;;;
+1E2D2;WANCHO LETTER WA;Lo;0;L;;;;;N;;;;;
+1E2D3;WANCHO LETTER VA;Lo;0;L;;;;;N;;;;;
+1E2D4;WANCHO LETTER KA;Lo;0;L;;;;;N;;;;;
+1E2D5;WANCHO LETTER O;Lo;0;L;;;;;N;;;;;
+1E2D6;WANCHO LETTER AU;Lo;0;L;;;;;N;;;;;
+1E2D7;WANCHO LETTER RA;Lo;0;L;;;;;N;;;;;
+1E2D8;WANCHO LETTER MA;Lo;0;L;;;;;N;;;;;
+1E2D9;WANCHO LETTER KHA;Lo;0;L;;;;;N;;;;;
+1E2DA;WANCHO LETTER HA;Lo;0;L;;;;;N;;;;;
+1E2DB;WANCHO LETTER E;Lo;0;L;;;;;N;;;;;
+1E2DC;WANCHO LETTER I;Lo;0;L;;;;;N;;;;;
+1E2DD;WANCHO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1E2DE;WANCHO LETTER U;Lo;0;L;;;;;N;;;;;
+1E2DF;WANCHO LETTER LLHA;Lo;0;L;;;;;N;;;;;
+1E2E0;WANCHO LETTER TSA;Lo;0;L;;;;;N;;;;;
+1E2E1;WANCHO LETTER TRA;Lo;0;L;;;;;N;;;;;
+1E2E2;WANCHO LETTER ONG;Lo;0;L;;;;;N;;;;;
+1E2E3;WANCHO LETTER AANG;Lo;0;L;;;;;N;;;;;
+1E2E4;WANCHO LETTER ANG;Lo;0;L;;;;;N;;;;;
+1E2E5;WANCHO LETTER ING;Lo;0;L;;;;;N;;;;;
+1E2E6;WANCHO LETTER ON;Lo;0;L;;;;;N;;;;;
+1E2E7;WANCHO LETTER EN;Lo;0;L;;;;;N;;;;;
+1E2E8;WANCHO LETTER AAN;Lo;0;L;;;;;N;;;;;
+1E2E9;WANCHO LETTER NYA;Lo;0;L;;;;;N;;;;;
+1E2EA;WANCHO LETTER UEN;Lo;0;L;;;;;N;;;;;
+1E2EB;WANCHO LETTER YIH;Lo;0;L;;;;;N;;;;;
+1E2EC;WANCHO TONE TUP;Mn;230;NSM;;;;;N;;;;;
+1E2ED;WANCHO TONE TUPNI;Mn;230;NSM;;;;;N;;;;;
+1E2EE;WANCHO TONE KOI;Mn;230;NSM;;;;;N;;;;;
+1E2EF;WANCHO TONE KOINI;Mn;230;NSM;;;;;N;;;;;
+1E2F0;WANCHO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1E2F1;WANCHO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1E2F2;WANCHO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1E2F3;WANCHO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1E2F4;WANCHO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1E2F5;WANCHO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1E2F6;WANCHO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1E2F7;WANCHO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;;
+1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;
+1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;
+1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;
+1E803;MENDE KIKAKUI SYLLABLE M065 KEE;Lo;0;R;;;;;N;;;;;
+1E804;MENDE KIKAKUI SYLLABLE M095 KE;Lo;0;R;;;;;N;;;;;
+1E805;MENDE KIKAKUI SYLLABLE M076 KOO;Lo;0;R;;;;;N;;;;;
+1E806;MENDE KIKAKUI SYLLABLE M048 KO;Lo;0;R;;;;;N;;;;;
+1E807;MENDE KIKAKUI SYLLABLE M179 KUA;Lo;0;R;;;;;N;;;;;
+1E808;MENDE KIKAKUI SYLLABLE M004 WI;Lo;0;R;;;;;N;;;;;
+1E809;MENDE KIKAKUI SYLLABLE M005 WA;Lo;0;R;;;;;N;;;;;
+1E80A;MENDE KIKAKUI SYLLABLE M006 WU;Lo;0;R;;;;;N;;;;;
+1E80B;MENDE KIKAKUI SYLLABLE M126 WEE;Lo;0;R;;;;;N;;;;;
+1E80C;MENDE KIKAKUI SYLLABLE M118 WE;Lo;0;R;;;;;N;;;;;
+1E80D;MENDE KIKAKUI SYLLABLE M114 WOO;Lo;0;R;;;;;N;;;;;
+1E80E;MENDE KIKAKUI SYLLABLE M045 WO;Lo;0;R;;;;;N;;;;;
+1E80F;MENDE KIKAKUI SYLLABLE M194 WUI;Lo;0;R;;;;;N;;;;;
+1E810;MENDE KIKAKUI SYLLABLE M143 WEI;Lo;0;R;;;;;N;;;;;
+1E811;MENDE KIKAKUI SYLLABLE M061 WVI;Lo;0;R;;;;;N;;;;;
+1E812;MENDE KIKAKUI SYLLABLE M049 WVA;Lo;0;R;;;;;N;;;;;
+1E813;MENDE KIKAKUI SYLLABLE M139 WVE;Lo;0;R;;;;;N;;;;;
+1E814;MENDE KIKAKUI SYLLABLE M007 MIN;Lo;0;R;;;;;N;;;;;
+1E815;MENDE KIKAKUI SYLLABLE M008 MAN;Lo;0;R;;;;;N;;;;;
+1E816;MENDE KIKAKUI SYLLABLE M009 MUN;Lo;0;R;;;;;N;;;;;
+1E817;MENDE KIKAKUI SYLLABLE M059 MEN;Lo;0;R;;;;;N;;;;;
+1E818;MENDE KIKAKUI SYLLABLE M094 MON;Lo;0;R;;;;;N;;;;;
+1E819;MENDE KIKAKUI SYLLABLE M154 MUAN;Lo;0;R;;;;;N;;;;;
+1E81A;MENDE KIKAKUI SYLLABLE M189 MUEN;Lo;0;R;;;;;N;;;;;
+1E81B;MENDE KIKAKUI SYLLABLE M010 BI;Lo;0;R;;;;;N;;;;;
+1E81C;MENDE KIKAKUI SYLLABLE M011 BA;Lo;0;R;;;;;N;;;;;
+1E81D;MENDE KIKAKUI SYLLABLE M012 BU;Lo;0;R;;;;;N;;;;;
+1E81E;MENDE KIKAKUI SYLLABLE M150 BEE;Lo;0;R;;;;;N;;;;;
+1E81F;MENDE KIKAKUI SYLLABLE M097 BE;Lo;0;R;;;;;N;;;;;
+1E820;MENDE KIKAKUI SYLLABLE M103 BOO;Lo;0;R;;;;;N;;;;;
+1E821;MENDE KIKAKUI SYLLABLE M138 BO;Lo;0;R;;;;;N;;;;;
+1E822;MENDE KIKAKUI SYLLABLE M013 I;Lo;0;R;;;;;N;;;;;
+1E823;MENDE KIKAKUI SYLLABLE M014 A;Lo;0;R;;;;;N;;;;;
+1E824;MENDE KIKAKUI SYLLABLE M015 U;Lo;0;R;;;;;N;;;;;
+1E825;MENDE KIKAKUI SYLLABLE M163 EE;Lo;0;R;;;;;N;;;;;
+1E826;MENDE KIKAKUI SYLLABLE M100 E;Lo;0;R;;;;;N;;;;;
+1E827;MENDE KIKAKUI SYLLABLE M165 OO;Lo;0;R;;;;;N;;;;;
+1E828;MENDE KIKAKUI SYLLABLE M147 O;Lo;0;R;;;;;N;;;;;
+1E829;MENDE KIKAKUI SYLLABLE M137 EI;Lo;0;R;;;;;N;;;;;
+1E82A;MENDE KIKAKUI SYLLABLE M131 IN;Lo;0;R;;;;;N;;;;;
+1E82B;MENDE KIKAKUI SYLLABLE M135 IN;Lo;0;R;;;;;N;;;;;
+1E82C;MENDE KIKAKUI SYLLABLE M195 AN;Lo;0;R;;;;;N;;;;;
+1E82D;MENDE KIKAKUI SYLLABLE M178 EN;Lo;0;R;;;;;N;;;;;
+1E82E;MENDE KIKAKUI SYLLABLE M019 SI;Lo;0;R;;;;;N;;;;;
+1E82F;MENDE KIKAKUI SYLLABLE M020 SA;Lo;0;R;;;;;N;;;;;
+1E830;MENDE KIKAKUI SYLLABLE M021 SU;Lo;0;R;;;;;N;;;;;
+1E831;MENDE KIKAKUI SYLLABLE M162 SEE;Lo;0;R;;;;;N;;;;;
+1E832;MENDE KIKAKUI SYLLABLE M116 SE;Lo;0;R;;;;;N;;;;;
+1E833;MENDE KIKAKUI SYLLABLE M136 SOO;Lo;0;R;;;;;N;;;;;
+1E834;MENDE KIKAKUI SYLLABLE M079 SO;Lo;0;R;;;;;N;;;;;
+1E835;MENDE KIKAKUI SYLLABLE M196 SIA;Lo;0;R;;;;;N;;;;;
+1E836;MENDE KIKAKUI SYLLABLE M025 LI;Lo;0;R;;;;;N;;;;;
+1E837;MENDE KIKAKUI SYLLABLE M026 LA;Lo;0;R;;;;;N;;;;;
+1E838;MENDE KIKAKUI SYLLABLE M027 LU;Lo;0;R;;;;;N;;;;;
+1E839;MENDE KIKAKUI SYLLABLE M084 LEE;Lo;0;R;;;;;N;;;;;
+1E83A;MENDE KIKAKUI SYLLABLE M073 LE;Lo;0;R;;;;;N;;;;;
+1E83B;MENDE KIKAKUI SYLLABLE M054 LOO;Lo;0;R;;;;;N;;;;;
+1E83C;MENDE KIKAKUI SYLLABLE M153 LO;Lo;0;R;;;;;N;;;;;
+1E83D;MENDE KIKAKUI SYLLABLE M110 LONG LE;Lo;0;R;;;;;N;;;;;
+1E83E;MENDE KIKAKUI SYLLABLE M016 DI;Lo;0;R;;;;;N;;;;;
+1E83F;MENDE KIKAKUI SYLLABLE M017 DA;Lo;0;R;;;;;N;;;;;
+1E840;MENDE KIKAKUI SYLLABLE M018 DU;Lo;0;R;;;;;N;;;;;
+1E841;MENDE KIKAKUI SYLLABLE M089 DEE;Lo;0;R;;;;;N;;;;;
+1E842;MENDE KIKAKUI SYLLABLE M180 DOO;Lo;0;R;;;;;N;;;;;
+1E843;MENDE KIKAKUI SYLLABLE M181 DO;Lo;0;R;;;;;N;;;;;
+1E844;MENDE KIKAKUI SYLLABLE M022 TI;Lo;0;R;;;;;N;;;;;
+1E845;MENDE KIKAKUI SYLLABLE M023 TA;Lo;0;R;;;;;N;;;;;
+1E846;MENDE KIKAKUI SYLLABLE M024 TU;Lo;0;R;;;;;N;;;;;
+1E847;MENDE KIKAKUI SYLLABLE M091 TEE;Lo;0;R;;;;;N;;;;;
+1E848;MENDE KIKAKUI SYLLABLE M055 TE;Lo;0;R;;;;;N;;;;;
+1E849;MENDE KIKAKUI SYLLABLE M104 TOO;Lo;0;R;;;;;N;;;;;
+1E84A;MENDE KIKAKUI SYLLABLE M069 TO;Lo;0;R;;;;;N;;;;;
+1E84B;MENDE KIKAKUI SYLLABLE M028 JI;Lo;0;R;;;;;N;;;;;
+1E84C;MENDE KIKAKUI SYLLABLE M029 JA;Lo;0;R;;;;;N;;;;;
+1E84D;MENDE KIKAKUI SYLLABLE M030 JU;Lo;0;R;;;;;N;;;;;
+1E84E;MENDE KIKAKUI SYLLABLE M157 JEE;Lo;0;R;;;;;N;;;;;
+1E84F;MENDE KIKAKUI SYLLABLE M113 JE;Lo;0;R;;;;;N;;;;;
+1E850;MENDE KIKAKUI SYLLABLE M160 JOO;Lo;0;R;;;;;N;;;;;
+1E851;MENDE KIKAKUI SYLLABLE M063 JO;Lo;0;R;;;;;N;;;;;
+1E852;MENDE KIKAKUI SYLLABLE M175 LONG JO;Lo;0;R;;;;;N;;;;;
+1E853;MENDE KIKAKUI SYLLABLE M031 YI;Lo;0;R;;;;;N;;;;;
+1E854;MENDE KIKAKUI SYLLABLE M032 YA;Lo;0;R;;;;;N;;;;;
+1E855;MENDE KIKAKUI SYLLABLE M033 YU;Lo;0;R;;;;;N;;;;;
+1E856;MENDE KIKAKUI SYLLABLE M109 YEE;Lo;0;R;;;;;N;;;;;
+1E857;MENDE KIKAKUI SYLLABLE M080 YE;Lo;0;R;;;;;N;;;;;
+1E858;MENDE KIKAKUI SYLLABLE M141 YOO;Lo;0;R;;;;;N;;;;;
+1E859;MENDE KIKAKUI SYLLABLE M121 YO;Lo;0;R;;;;;N;;;;;
+1E85A;MENDE KIKAKUI SYLLABLE M034 FI;Lo;0;R;;;;;N;;;;;
+1E85B;MENDE KIKAKUI SYLLABLE M035 FA;Lo;0;R;;;;;N;;;;;
+1E85C;MENDE KIKAKUI SYLLABLE M036 FU;Lo;0;R;;;;;N;;;;;
+1E85D;MENDE KIKAKUI SYLLABLE M078 FEE;Lo;0;R;;;;;N;;;;;
+1E85E;MENDE KIKAKUI SYLLABLE M075 FE;Lo;0;R;;;;;N;;;;;
+1E85F;MENDE KIKAKUI SYLLABLE M133 FOO;Lo;0;R;;;;;N;;;;;
+1E860;MENDE KIKAKUI SYLLABLE M088 FO;Lo;0;R;;;;;N;;;;;
+1E861;MENDE KIKAKUI SYLLABLE M197 FUA;Lo;0;R;;;;;N;;;;;
+1E862;MENDE KIKAKUI SYLLABLE M101 FAN;Lo;0;R;;;;;N;;;;;
+1E863;MENDE KIKAKUI SYLLABLE M037 NIN;Lo;0;R;;;;;N;;;;;
+1E864;MENDE KIKAKUI SYLLABLE M038 NAN;Lo;0;R;;;;;N;;;;;
+1E865;MENDE KIKAKUI SYLLABLE M039 NUN;Lo;0;R;;;;;N;;;;;
+1E866;MENDE KIKAKUI SYLLABLE M117 NEN;Lo;0;R;;;;;N;;;;;
+1E867;MENDE KIKAKUI SYLLABLE M169 NON;Lo;0;R;;;;;N;;;;;
+1E868;MENDE KIKAKUI SYLLABLE M176 HI;Lo;0;R;;;;;N;;;;;
+1E869;MENDE KIKAKUI SYLLABLE M041 HA;Lo;0;R;;;;;N;;;;;
+1E86A;MENDE KIKAKUI SYLLABLE M186 HU;Lo;0;R;;;;;N;;;;;
+1E86B;MENDE KIKAKUI SYLLABLE M040 HEE;Lo;0;R;;;;;N;;;;;
+1E86C;MENDE KIKAKUI SYLLABLE M096 HE;Lo;0;R;;;;;N;;;;;
+1E86D;MENDE KIKAKUI SYLLABLE M042 HOO;Lo;0;R;;;;;N;;;;;
+1E86E;MENDE KIKAKUI SYLLABLE M140 HO;Lo;0;R;;;;;N;;;;;
+1E86F;MENDE KIKAKUI SYLLABLE M083 HEEI;Lo;0;R;;;;;N;;;;;
+1E870;MENDE KIKAKUI SYLLABLE M128 HOOU;Lo;0;R;;;;;N;;;;;
+1E871;MENDE KIKAKUI SYLLABLE M053 HIN;Lo;0;R;;;;;N;;;;;
+1E872;MENDE KIKAKUI SYLLABLE M130 HAN;Lo;0;R;;;;;N;;;;;
+1E873;MENDE KIKAKUI SYLLABLE M087 HUN;Lo;0;R;;;;;N;;;;;
+1E874;MENDE KIKAKUI SYLLABLE M052 HEN;Lo;0;R;;;;;N;;;;;
+1E875;MENDE KIKAKUI SYLLABLE M193 HON;Lo;0;R;;;;;N;;;;;
+1E876;MENDE KIKAKUI SYLLABLE M046 HUAN;Lo;0;R;;;;;N;;;;;
+1E877;MENDE KIKAKUI SYLLABLE M090 NGGI;Lo;0;R;;;;;N;;;;;
+1E878;MENDE KIKAKUI SYLLABLE M043 NGGA;Lo;0;R;;;;;N;;;;;
+1E879;MENDE KIKAKUI SYLLABLE M082 NGGU;Lo;0;R;;;;;N;;;;;
+1E87A;MENDE KIKAKUI SYLLABLE M115 NGGEE;Lo;0;R;;;;;N;;;;;
+1E87B;MENDE KIKAKUI SYLLABLE M146 NGGE;Lo;0;R;;;;;N;;;;;
+1E87C;MENDE KIKAKUI SYLLABLE M156 NGGOO;Lo;0;R;;;;;N;;;;;
+1E87D;MENDE KIKAKUI SYLLABLE M120 NGGO;Lo;0;R;;;;;N;;;;;
+1E87E;MENDE KIKAKUI SYLLABLE M159 NGGAA;Lo;0;R;;;;;N;;;;;
+1E87F;MENDE KIKAKUI SYLLABLE M127 NGGUA;Lo;0;R;;;;;N;;;;;
+1E880;MENDE KIKAKUI SYLLABLE M086 LONG NGGE;Lo;0;R;;;;;N;;;;;
+1E881;MENDE KIKAKUI SYLLABLE M106 LONG NGGOO;Lo;0;R;;;;;N;;;;;
+1E882;MENDE KIKAKUI SYLLABLE M183 LONG NGGO;Lo;0;R;;;;;N;;;;;
+1E883;MENDE KIKAKUI SYLLABLE M155 GI;Lo;0;R;;;;;N;;;;;
+1E884;MENDE KIKAKUI SYLLABLE M111 GA;Lo;0;R;;;;;N;;;;;
+1E885;MENDE KIKAKUI SYLLABLE M168 GU;Lo;0;R;;;;;N;;;;;
+1E886;MENDE KIKAKUI SYLLABLE M190 GEE;Lo;0;R;;;;;N;;;;;
+1E887;MENDE KIKAKUI SYLLABLE M166 GUEI;Lo;0;R;;;;;N;;;;;
+1E888;MENDE KIKAKUI SYLLABLE M167 GUAN;Lo;0;R;;;;;N;;;;;
+1E889;MENDE KIKAKUI SYLLABLE M184 NGEN;Lo;0;R;;;;;N;;;;;
+1E88A;MENDE KIKAKUI SYLLABLE M057 NGON;Lo;0;R;;;;;N;;;;;
+1E88B;MENDE KIKAKUI SYLLABLE M177 NGUAN;Lo;0;R;;;;;N;;;;;
+1E88C;MENDE KIKAKUI SYLLABLE M068 PI;Lo;0;R;;;;;N;;;;;
+1E88D;MENDE KIKAKUI SYLLABLE M099 PA;Lo;0;R;;;;;N;;;;;
+1E88E;MENDE KIKAKUI SYLLABLE M050 PU;Lo;0;R;;;;;N;;;;;
+1E88F;MENDE KIKAKUI SYLLABLE M081 PEE;Lo;0;R;;;;;N;;;;;
+1E890;MENDE KIKAKUI SYLLABLE M051 PE;Lo;0;R;;;;;N;;;;;
+1E891;MENDE KIKAKUI SYLLABLE M102 POO;Lo;0;R;;;;;N;;;;;
+1E892;MENDE KIKAKUI SYLLABLE M066 PO;Lo;0;R;;;;;N;;;;;
+1E893;MENDE KIKAKUI SYLLABLE M145 MBI;Lo;0;R;;;;;N;;;;;
+1E894;MENDE KIKAKUI SYLLABLE M062 MBA;Lo;0;R;;;;;N;;;;;
+1E895;MENDE KIKAKUI SYLLABLE M122 MBU;Lo;0;R;;;;;N;;;;;
+1E896;MENDE KIKAKUI SYLLABLE M047 MBEE;Lo;0;R;;;;;N;;;;;
+1E897;MENDE KIKAKUI SYLLABLE M188 MBEE;Lo;0;R;;;;;N;;;;;
+1E898;MENDE KIKAKUI SYLLABLE M072 MBE;Lo;0;R;;;;;N;;;;;
+1E899;MENDE KIKAKUI SYLLABLE M172 MBOO;Lo;0;R;;;;;N;;;;;
+1E89A;MENDE KIKAKUI SYLLABLE M174 MBO;Lo;0;R;;;;;N;;;;;
+1E89B;MENDE KIKAKUI SYLLABLE M187 MBUU;Lo;0;R;;;;;N;;;;;
+1E89C;MENDE KIKAKUI SYLLABLE M161 LONG MBE;Lo;0;R;;;;;N;;;;;
+1E89D;MENDE KIKAKUI SYLLABLE M105 LONG MBOO;Lo;0;R;;;;;N;;;;;
+1E89E;MENDE KIKAKUI SYLLABLE M142 LONG MBO;Lo;0;R;;;;;N;;;;;
+1E89F;MENDE KIKAKUI SYLLABLE M132 KPI;Lo;0;R;;;;;N;;;;;
+1E8A0;MENDE KIKAKUI SYLLABLE M092 KPA;Lo;0;R;;;;;N;;;;;
+1E8A1;MENDE KIKAKUI SYLLABLE M074 KPU;Lo;0;R;;;;;N;;;;;
+1E8A2;MENDE KIKAKUI SYLLABLE M044 KPEE;Lo;0;R;;;;;N;;;;;
+1E8A3;MENDE KIKAKUI SYLLABLE M108 KPE;Lo;0;R;;;;;N;;;;;
+1E8A4;MENDE KIKAKUI SYLLABLE M112 KPOO;Lo;0;R;;;;;N;;;;;
+1E8A5;MENDE KIKAKUI SYLLABLE M158 KPO;Lo;0;R;;;;;N;;;;;
+1E8A6;MENDE KIKAKUI SYLLABLE M124 GBI;Lo;0;R;;;;;N;;;;;
+1E8A7;MENDE KIKAKUI SYLLABLE M056 GBA;Lo;0;R;;;;;N;;;;;
+1E8A8;MENDE KIKAKUI SYLLABLE M148 GBU;Lo;0;R;;;;;N;;;;;
+1E8A9;MENDE KIKAKUI SYLLABLE M093 GBEE;Lo;0;R;;;;;N;;;;;
+1E8AA;MENDE KIKAKUI SYLLABLE M107 GBE;Lo;0;R;;;;;N;;;;;
+1E8AB;MENDE KIKAKUI SYLLABLE M071 GBOO;Lo;0;R;;;;;N;;;;;
+1E8AC;MENDE KIKAKUI SYLLABLE M070 GBO;Lo;0;R;;;;;N;;;;;
+1E8AD;MENDE KIKAKUI SYLLABLE M171 RA;Lo;0;R;;;;;N;;;;;
+1E8AE;MENDE KIKAKUI SYLLABLE M123 NDI;Lo;0;R;;;;;N;;;;;
+1E8AF;MENDE KIKAKUI SYLLABLE M129 NDA;Lo;0;R;;;;;N;;;;;
+1E8B0;MENDE KIKAKUI SYLLABLE M125 NDU;Lo;0;R;;;;;N;;;;;
+1E8B1;MENDE KIKAKUI SYLLABLE M191 NDEE;Lo;0;R;;;;;N;;;;;
+1E8B2;MENDE KIKAKUI SYLLABLE M119 NDE;Lo;0;R;;;;;N;;;;;
+1E8B3;MENDE KIKAKUI SYLLABLE M067 NDOO;Lo;0;R;;;;;N;;;;;
+1E8B4;MENDE KIKAKUI SYLLABLE M064 NDO;Lo;0;R;;;;;N;;;;;
+1E8B5;MENDE KIKAKUI SYLLABLE M152 NJA;Lo;0;R;;;;;N;;;;;
+1E8B6;MENDE KIKAKUI SYLLABLE M192 NJU;Lo;0;R;;;;;N;;;;;
+1E8B7;MENDE KIKAKUI SYLLABLE M149 NJEE;Lo;0;R;;;;;N;;;;;
+1E8B8;MENDE KIKAKUI SYLLABLE M134 NJOO;Lo;0;R;;;;;N;;;;;
+1E8B9;MENDE KIKAKUI SYLLABLE M182 VI;Lo;0;R;;;;;N;;;;;
+1E8BA;MENDE KIKAKUI SYLLABLE M185 VA;Lo;0;R;;;;;N;;;;;
+1E8BB;MENDE KIKAKUI SYLLABLE M151 VU;Lo;0;R;;;;;N;;;;;
+1E8BC;MENDE KIKAKUI SYLLABLE M173 VEE;Lo;0;R;;;;;N;;;;;
+1E8BD;MENDE KIKAKUI SYLLABLE M085 VE;Lo;0;R;;;;;N;;;;;
+1E8BE;MENDE KIKAKUI SYLLABLE M144 VOO;Lo;0;R;;;;;N;;;;;
+1E8BF;MENDE KIKAKUI SYLLABLE M077 VO;Lo;0;R;;;;;N;;;;;
+1E8C0;MENDE KIKAKUI SYLLABLE M164 NYIN;Lo;0;R;;;;;N;;;;;
+1E8C1;MENDE KIKAKUI SYLLABLE M058 NYAN;Lo;0;R;;;;;N;;;;;
+1E8C2;MENDE KIKAKUI SYLLABLE M170 NYUN;Lo;0;R;;;;;N;;;;;
+1E8C3;MENDE KIKAKUI SYLLABLE M098 NYEN;Lo;0;R;;;;;N;;;;;
+1E8C4;MENDE KIKAKUI SYLLABLE M060 NYON;Lo;0;R;;;;;N;;;;;
+1E8C7;MENDE KIKAKUI DIGIT ONE;No;0;R;;;;1;N;;;;;
+1E8C8;MENDE KIKAKUI DIGIT TWO;No;0;R;;;;2;N;;;;;
+1E8C9;MENDE KIKAKUI DIGIT THREE;No;0;R;;;;3;N;;;;;
+1E8CA;MENDE KIKAKUI DIGIT FOUR;No;0;R;;;;4;N;;;;;
+1E8CB;MENDE KIKAKUI DIGIT FIVE;No;0;R;;;;5;N;;;;;
+1E8CC;MENDE KIKAKUI DIGIT SIX;No;0;R;;;;6;N;;;;;
+1E8CD;MENDE KIKAKUI DIGIT SEVEN;No;0;R;;;;7;N;;;;;
+1E8CE;MENDE KIKAKUI DIGIT EIGHT;No;0;R;;;;8;N;;;;;
+1E8CF;MENDE KIKAKUI DIGIT NINE;No;0;R;;;;9;N;;;;;
+1E8D0;MENDE KIKAKUI COMBINING NUMBER TEENS;Mn;220;NSM;;;;;N;;;;;
+1E8D1;MENDE KIKAKUI COMBINING NUMBER TENS;Mn;220;NSM;;;;;N;;;;;
+1E8D2;MENDE KIKAKUI COMBINING NUMBER HUNDREDS;Mn;220;NSM;;;;;N;;;;;
+1E8D3;MENDE KIKAKUI COMBINING NUMBER THOUSANDS;Mn;220;NSM;;;;;N;;;;;
+1E8D4;MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS;Mn;220;NSM;;;;;N;;;;;
+1E8D5;MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS;Mn;220;NSM;;;;;N;;;;;
+1E8D6;MENDE KIKAKUI COMBINING NUMBER MILLIONS;Mn;220;NSM;;;;;N;;;;;
+1E900;ADLAM CAPITAL LETTER ALIF;Lu;0;R;;;;;N;;;;1E922;
+1E901;ADLAM CAPITAL LETTER DAALI;Lu;0;R;;;;;N;;;;1E923;
+1E902;ADLAM CAPITAL LETTER LAAM;Lu;0;R;;;;;N;;;;1E924;
+1E903;ADLAM CAPITAL LETTER MIIM;Lu;0;R;;;;;N;;;;1E925;
+1E904;ADLAM CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;1E926;
+1E905;ADLAM CAPITAL LETTER SINNYIIYHE;Lu;0;R;;;;;N;;;;1E927;
+1E906;ADLAM CAPITAL LETTER PE;Lu;0;R;;;;;N;;;;1E928;
+1E907;ADLAM CAPITAL LETTER BHE;Lu;0;R;;;;;N;;;;1E929;
+1E908;ADLAM CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;1E92A;
+1E909;ADLAM CAPITAL LETTER E;Lu;0;R;;;;;N;;;;1E92B;
+1E90A;ADLAM CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;1E92C;
+1E90B;ADLAM CAPITAL LETTER I;Lu;0;R;;;;;N;;;;1E92D;
+1E90C;ADLAM CAPITAL LETTER O;Lu;0;R;;;;;N;;;;1E92E;
+1E90D;ADLAM CAPITAL LETTER DHA;Lu;0;R;;;;;N;;;;1E92F;
+1E90E;ADLAM CAPITAL LETTER YHE;Lu;0;R;;;;;N;;;;1E930;
+1E90F;ADLAM CAPITAL LETTER WAW;Lu;0;R;;;;;N;;;;1E931;
+1E910;ADLAM CAPITAL LETTER NUN;Lu;0;R;;;;;N;;;;1E932;
+1E911;ADLAM CAPITAL LETTER KAF;Lu;0;R;;;;;N;;;;1E933;
+1E912;ADLAM CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;1E934;
+1E913;ADLAM CAPITAL LETTER U;Lu;0;R;;;;;N;;;;1E935;
+1E914;ADLAM CAPITAL LETTER JIIM;Lu;0;R;;;;;N;;;;1E936;
+1E915;ADLAM CAPITAL LETTER CHI;Lu;0;R;;;;;N;;;;1E937;
+1E916;ADLAM CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;1E938;
+1E917;ADLAM CAPITAL LETTER QAAF;Lu;0;R;;;;;N;;;;1E939;
+1E918;ADLAM CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;1E93A;
+1E919;ADLAM CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;1E93B;
+1E91A;ADLAM CAPITAL LETTER TU;Lu;0;R;;;;;N;;;;1E93C;
+1E91B;ADLAM CAPITAL LETTER NHA;Lu;0;R;;;;;N;;;;1E93D;
+1E91C;ADLAM CAPITAL LETTER VA;Lu;0;R;;;;;N;;;;1E93E;
+1E91D;ADLAM CAPITAL LETTER KHA;Lu;0;R;;;;;N;;;;1E93F;
+1E91E;ADLAM CAPITAL LETTER GBE;Lu;0;R;;;;;N;;;;1E940;
+1E91F;ADLAM CAPITAL LETTER ZAL;Lu;0;R;;;;;N;;;;1E941;
+1E920;ADLAM CAPITAL LETTER KPO;Lu;0;R;;;;;N;;;;1E942;
+1E921;ADLAM CAPITAL LETTER SHA;Lu;0;R;;;;;N;;;;1E943;
+1E922;ADLAM SMALL LETTER ALIF;Ll;0;R;;;;;N;;;1E900;;1E900
+1E923;ADLAM SMALL LETTER DAALI;Ll;0;R;;;;;N;;;1E901;;1E901
+1E924;ADLAM SMALL LETTER LAAM;Ll;0;R;;;;;N;;;1E902;;1E902
+1E925;ADLAM SMALL LETTER MIIM;Ll;0;R;;;;;N;;;1E903;;1E903
+1E926;ADLAM SMALL LETTER BA;Ll;0;R;;;;;N;;;1E904;;1E904
+1E927;ADLAM SMALL LETTER SINNYIIYHE;Ll;0;R;;;;;N;;;1E905;;1E905
+1E928;ADLAM SMALL LETTER PE;Ll;0;R;;;;;N;;;1E906;;1E906
+1E929;ADLAM SMALL LETTER BHE;Ll;0;R;;;;;N;;;1E907;;1E907
+1E92A;ADLAM SMALL LETTER RA;Ll;0;R;;;;;N;;;1E908;;1E908
+1E92B;ADLAM SMALL LETTER E;Ll;0;R;;;;;N;;;1E909;;1E909
+1E92C;ADLAM SMALL LETTER FA;Ll;0;R;;;;;N;;;1E90A;;1E90A
+1E92D;ADLAM SMALL LETTER I;Ll;0;R;;;;;N;;;1E90B;;1E90B
+1E92E;ADLAM SMALL LETTER O;Ll;0;R;;;;;N;;;1E90C;;1E90C
+1E92F;ADLAM SMALL LETTER DHA;Ll;0;R;;;;;N;;;1E90D;;1E90D
+1E930;ADLAM SMALL LETTER YHE;Ll;0;R;;;;;N;;;1E90E;;1E90E
+1E931;ADLAM SMALL LETTER WAW;Ll;0;R;;;;;N;;;1E90F;;1E90F
+1E932;ADLAM SMALL LETTER NUN;Ll;0;R;;;;;N;;;1E910;;1E910
+1E933;ADLAM SMALL LETTER KAF;Ll;0;R;;;;;N;;;1E911;;1E911
+1E934;ADLAM SMALL LETTER YA;Ll;0;R;;;;;N;;;1E912;;1E912
+1E935;ADLAM SMALL LETTER U;Ll;0;R;;;;;N;;;1E913;;1E913
+1E936;ADLAM SMALL LETTER JIIM;Ll;0;R;;;;;N;;;1E914;;1E914
+1E937;ADLAM SMALL LETTER CHI;Ll;0;R;;;;;N;;;1E915;;1E915
+1E938;ADLAM SMALL LETTER HA;Ll;0;R;;;;;N;;;1E916;;1E916
+1E939;ADLAM SMALL LETTER QAAF;Ll;0;R;;;;;N;;;1E917;;1E917
+1E93A;ADLAM SMALL LETTER GA;Ll;0;R;;;;;N;;;1E918;;1E918
+1E93B;ADLAM SMALL LETTER NYA;Ll;0;R;;;;;N;;;1E919;;1E919
+1E93C;ADLAM SMALL LETTER TU;Ll;0;R;;;;;N;;;1E91A;;1E91A
+1E93D;ADLAM SMALL LETTER NHA;Ll;0;R;;;;;N;;;1E91B;;1E91B
+1E93E;ADLAM SMALL LETTER VA;Ll;0;R;;;;;N;;;1E91C;;1E91C
+1E93F;ADLAM SMALL LETTER KHA;Ll;0;R;;;;;N;;;1E91D;;1E91D
+1E940;ADLAM SMALL LETTER GBE;Ll;0;R;;;;;N;;;1E91E;;1E91E
+1E941;ADLAM SMALL LETTER ZAL;Ll;0;R;;;;;N;;;1E91F;;1E91F
+1E942;ADLAM SMALL LETTER KPO;Ll;0;R;;;;;N;;;1E920;;1E920
+1E943;ADLAM SMALL LETTER SHA;Ll;0;R;;;;;N;;;1E921;;1E921
+1E944;ADLAM ALIF LENGTHENER;Mn;230;NSM;;;;;N;;;;;
+1E945;ADLAM VOWEL LENGTHENER;Mn;230;NSM;;;;;N;;;;;
+1E946;ADLAM GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1E947;ADLAM HAMZA;Mn;230;NSM;;;;;N;;;;;
+1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;;
+1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;;
+1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;;
+1E94B;ADLAM NASALIZATION MARK;Lm;0;R;;;;;N;;;;;
+1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
+1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
+1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
+1E953;ADLAM DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
+1E954;ADLAM DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
+1E955;ADLAM DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
+1E956;ADLAM DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
+1E957;ADLAM DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
+1E958;ADLAM DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
+1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
+1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;;
+1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;;
+1EC71;INDIC SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;;
+1EC72;INDIC SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;;
+1EC73;INDIC SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;;
+1EC74;INDIC SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;;
+1EC75;INDIC SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;;
+1EC76;INDIC SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;;
+1EC77;INDIC SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;;
+1EC78;INDIC SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;;
+1EC79;INDIC SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;;
+1EC7A;INDIC SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;;
+1EC7B;INDIC SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+1EC7C;INDIC SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;;
+1EC7D;INDIC SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;;
+1EC7E;INDIC SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;;
+1EC7F;INDIC SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;;
+1EC80;INDIC SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;;
+1EC81;INDIC SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;;
+1EC82;INDIC SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;;
+1EC83;INDIC SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+1EC84;INDIC SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;;
+1EC85;INDIC SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;;
+1EC86;INDIC SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;
+1EC87;INDIC SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;;
+1EC88;INDIC SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;
+1EC89;INDIC SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;;
+1EC8A;INDIC SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;;
+1EC8B;INDIC SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;;
+1EC8C;INDIC SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;;
+1EC8D;INDIC SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;
+1EC8E;INDIC SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;;
+1EC8F;INDIC SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;;
+1EC90;INDIC SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;;
+1EC91;INDIC SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;;
+1EC92;INDIC SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;;
+1EC93;INDIC SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;;
+1EC94;INDIC SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;;
+1EC95;INDIC SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1EC96;INDIC SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;;
+1EC97;INDIC SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;;
+1EC98;INDIC SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;;
+1EC99;INDIC SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;;
+1EC9A;INDIC SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;;
+1EC9B;INDIC SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;;
+1EC9C;INDIC SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;;
+1EC9D;INDIC SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;;
+1EC9E;INDIC SIYAQ NUMBER LAKH;No;0;AL;;;;100000;N;;;;;
+1EC9F;INDIC SIYAQ NUMBER LAKHAN;No;0;AL;;;;200000;N;;;;;
+1ECA0;INDIC SIYAQ LAKH MARK;No;0;AL;;;;100000;N;;;;;
+1ECA1;INDIC SIYAQ NUMBER KAROR;No;0;AL;;;;10000000;N;;;;;
+1ECA2;INDIC SIYAQ NUMBER KARORAN;No;0;AL;;;;20000000;N;;;;;
+1ECA3;INDIC SIYAQ NUMBER PREFIXED ONE;No;0;AL;;;;1;N;;;;;
+1ECA4;INDIC SIYAQ NUMBER PREFIXED TWO;No;0;AL;;;;2;N;;;;;
+1ECA5;INDIC SIYAQ NUMBER PREFIXED THREE;No;0;AL;;;;3;N;;;;;
+1ECA6;INDIC SIYAQ NUMBER PREFIXED FOUR;No;0;AL;;;;4;N;;;;;
+1ECA7;INDIC SIYAQ NUMBER PREFIXED FIVE;No;0;AL;;;;5;N;;;;;
+1ECA8;INDIC SIYAQ NUMBER PREFIXED SIX;No;0;AL;;;;6;N;;;;;
+1ECA9;INDIC SIYAQ NUMBER PREFIXED SEVEN;No;0;AL;;;;7;N;;;;;
+1ECAA;INDIC SIYAQ NUMBER PREFIXED EIGHT;No;0;AL;;;;8;N;;;;;
+1ECAB;INDIC SIYAQ NUMBER PREFIXED NINE;No;0;AL;;;;9;N;;;;;
+1ECAC;INDIC SIYAQ PLACEHOLDER;So;0;AL;;;;;N;;;;;
+1ECAD;INDIC SIYAQ FRACTION ONE QUARTER;No;0;AL;;;;1/4;N;;;;;
+1ECAE;INDIC SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;;
+1ECAF;INDIC SIYAQ FRACTION THREE QUARTERS;No;0;AL;;;;3/4;N;;;;;
+1ECB0;INDIC SIYAQ RUPEE MARK;Sc;0;AL;;;;;N;;;;;
+1ECB1;INDIC SIYAQ NUMBER ALTERNATE ONE;No;0;AL;;;;1;N;;;;;
+1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;;
+1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;;
+1ED01;OTTOMAN SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;;
+1ED02;OTTOMAN SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;;
+1ED03;OTTOMAN SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;;
+1ED04;OTTOMAN SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;;
+1ED05;OTTOMAN SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;;
+1ED06;OTTOMAN SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;;
+1ED07;OTTOMAN SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;;
+1ED08;OTTOMAN SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;;
+1ED09;OTTOMAN SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;;
+1ED0A;OTTOMAN SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;;
+1ED0B;OTTOMAN SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+1ED0C;OTTOMAN SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;;
+1ED0D;OTTOMAN SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;;
+1ED0E;OTTOMAN SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;;
+1ED0F;OTTOMAN SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;;
+1ED10;OTTOMAN SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;;
+1ED11;OTTOMAN SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;;
+1ED12;OTTOMAN SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;;
+1ED13;OTTOMAN SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+1ED14;OTTOMAN SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;;
+1ED15;OTTOMAN SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;;
+1ED16;OTTOMAN SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;
+1ED17;OTTOMAN SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;;
+1ED18;OTTOMAN SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;
+1ED19;OTTOMAN SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;;
+1ED1A;OTTOMAN SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;;
+1ED1B;OTTOMAN SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;;
+1ED1C;OTTOMAN SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;;
+1ED1D;OTTOMAN SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;
+1ED1E;OTTOMAN SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;;
+1ED1F;OTTOMAN SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;;
+1ED20;OTTOMAN SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;;
+1ED21;OTTOMAN SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;;
+1ED22;OTTOMAN SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;;
+1ED23;OTTOMAN SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;;
+1ED24;OTTOMAN SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;;
+1ED25;OTTOMAN SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1ED26;OTTOMAN SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;;
+1ED27;OTTOMAN SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;;
+1ED28;OTTOMAN SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;;
+1ED29;OTTOMAN SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;;
+1ED2A;OTTOMAN SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;;
+1ED2B;OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;;
+1ED2C;OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;;
+1ED2D;OTTOMAN SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;;
+1ED2E;OTTOMAN SIYAQ MARRATAN;So;0;AL;;;;;N;;;;;
+1ED2F;OTTOMAN SIYAQ ALTERNATE NUMBER TWO;No;0;AL;;;;2;N;;;;;
+1ED30;OTTOMAN SIYAQ ALTERNATE NUMBER THREE;No;0;AL;;;;3;N;;;;;
+1ED31;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR;No;0;AL;;;;4;N;;;;;
+1ED32;OTTOMAN SIYAQ ALTERNATE NUMBER FIVE;No;0;AL;;;;5;N;;;;;
+1ED33;OTTOMAN SIYAQ ALTERNATE NUMBER SIX;No;0;AL;;;;6;N;;;;;
+1ED34;OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN;No;0;AL;;;;7;N;;;;;
+1ED35;OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT;No;0;AL;;;;8;N;;;;;
+1ED36;OTTOMAN SIYAQ ALTERNATE NUMBER NINE;No;0;AL;;;;9;N;;;;;
+1ED37;OTTOMAN SIYAQ ALTERNATE NUMBER TEN;No;0;AL;;;;10;N;;;;;
+1ED38;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;
+1ED39;OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;
+1ED3A;OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;
+1ED3B;OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1ED3C;OTTOMAN SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;;
+1ED3D;OTTOMAN SIYAQ FRACTION ONE SIXTH;No;0;AL;;;;1/6;N;;;;;
+1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
+1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL;<font> 062F;;;;N;;;;;
+1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL;<font> 0648;;;;N;;;;;
+1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;
+1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;;
+1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL;<font> 0631;;;;N;;;;;
+1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL;<font> 0630;;;;N;;;;;
+1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;;
+1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;;
+1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;;
+1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;;
+1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL;<font> 0647;;;;N;;;;;
+1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;;
+1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;;
+1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;;
+1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL;<font> 0647;;;;N;;;;;
+1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL;<font> 0643;;;;N;;;;;
+1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;;
+1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;;
+1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
+1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL;<font> 062F;;;;N;;;;;
+1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL;<font> 0647;;;;N;;;;;
+1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL;<font> 0648;;;;N;;;;;
+1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;
+1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL;<font> 0631;;;;N;;;;;
+1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL;<font> 0630;;;;N;;;;;
+1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL;<font> 062F;;;;N;;;;;
+1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL;<font> 0648;;;;N;;;;;
+1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;
+1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL;<font> 0631;;;;N;;;;;
+1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL;<font> 0630;;;;N;;;;;
+1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;;
+1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;;
+1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;
+1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;
+1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;
+1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;;
+1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;;
+1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;;
+1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;;
+1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;;
+1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;;
+1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;;
+1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;;
+1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;;
+1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;;
+1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;;
+1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;;
+1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;;
+1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;;
+1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;;
+1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;;
+1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;;
+1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;;
+1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;;
+1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;;
+1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;;
+1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;;
+1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;;
+1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;;
+1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;;
+1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;;
+1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;;
+1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;;
+1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;;
+1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;;
+1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;;
+1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;;
+1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;;
+1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;;
+1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;;
+1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;;
+1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;;
+1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;;
+1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;;
+1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;;
+1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;;
+1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;;
+1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;;
+1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;;
+1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;;
+1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;;
+1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;;
+1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;;
+1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;;
+1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;;
+1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;;
+1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;;
+1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;;
+1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;;
+1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;;
+1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;;
+1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;;
+1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;;
+1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;;
+1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;;
+1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;;
+1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;;
+1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;;
+1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;;
+1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;;
+1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;;
+1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;;
+1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;;
+1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;;
+1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;;
+1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;;
+1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;;
+1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;;
+1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;;
+1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;;
+1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;;
+1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;;
+1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;;
+1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;;
+1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;;
+1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;;
+1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;;
+1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;;
+1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;;
+1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;;
+1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;;
+1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;;
+1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;;
+1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;;
+1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;;
+1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;;
+1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;;
+1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;;
+1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;;
+1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;;
+1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;;
+1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;;
+1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;;
+1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;;
+1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;;
+1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;;
+1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;;
+1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;;
+1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;;
+1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;;
+1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;;
+1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;;
+1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;;
+1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;;
+1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;;
+1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;;
+1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;;
+1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;;
+1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;;
+1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;;
+1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;;
+1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BF;PLAYING CARD RED JOKER;So;0;ON;;;;;N;;;;;
+1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;;
+1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;;
+1F0E0;PLAYING CARD FOOL;So;0;ON;;;;;N;;;;;
+1F0E1;PLAYING CARD TRUMP-1;So;0;ON;;;;;N;;;;;
+1F0E2;PLAYING CARD TRUMP-2;So;0;ON;;;;;N;;;;;
+1F0E3;PLAYING CARD TRUMP-3;So;0;ON;;;;;N;;;;;
+1F0E4;PLAYING CARD TRUMP-4;So;0;ON;;;;;N;;;;;
+1F0E5;PLAYING CARD TRUMP-5;So;0;ON;;;;;N;;;;;
+1F0E6;PLAYING CARD TRUMP-6;So;0;ON;;;;;N;;;;;
+1F0E7;PLAYING CARD TRUMP-7;So;0;ON;;;;;N;;;;;
+1F0E8;PLAYING CARD TRUMP-8;So;0;ON;;;;;N;;;;;
+1F0E9;PLAYING CARD TRUMP-9;So;0;ON;;;;;N;;;;;
+1F0EA;PLAYING CARD TRUMP-10;So;0;ON;;;;;N;;;;;
+1F0EB;PLAYING CARD TRUMP-11;So;0;ON;;;;;N;;;;;
+1F0EC;PLAYING CARD TRUMP-12;So;0;ON;;;;;N;;;;;
+1F0ED;PLAYING CARD TRUMP-13;So;0;ON;;;;;N;;;;;
+1F0EE;PLAYING CARD TRUMP-14;So;0;ON;;;;;N;;;;;
+1F0EF;PLAYING CARD TRUMP-15;So;0;ON;;;;;N;;;;;
+1F0F0;PLAYING CARD TRUMP-16;So;0;ON;;;;;N;;;;;
+1F0F1;PLAYING CARD TRUMP-17;So;0;ON;;;;;N;;;;;
+1F0F2;PLAYING CARD TRUMP-18;So;0;ON;;;;;N;;;;;
+1F0F3;PLAYING CARD TRUMP-19;So;0;ON;;;;;N;;;;;
+1F0F4;PLAYING CARD TRUMP-20;So;0;ON;;;;;N;;;;;
+1F0F5;PLAYING CARD TRUMP-21;So;0;ON;;;;;N;;;;;
+1F100;DIGIT ZERO FULL STOP;No;0;EN;<compat> 0030 002E;;0;0;N;;;;;
+1F101;DIGIT ZERO COMMA;No;0;EN;<compat> 0030 002C;;0;0;N;;;;;
+1F102;DIGIT ONE COMMA;No;0;EN;<compat> 0031 002C;;1;1;N;;;;;
+1F103;DIGIT TWO COMMA;No;0;EN;<compat> 0032 002C;;2;2;N;;;;;
+1F104;DIGIT THREE COMMA;No;0;EN;<compat> 0033 002C;;3;3;N;;;;;
+1F105;DIGIT FOUR COMMA;No;0;EN;<compat> 0034 002C;;4;4;N;;;;;
+1F106;DIGIT FIVE COMMA;No;0;EN;<compat> 0035 002C;;5;5;N;;;;;
+1F107;DIGIT SIX COMMA;No;0;EN;<compat> 0036 002C;;6;6;N;;;;;
+1F108;DIGIT SEVEN COMMA;No;0;EN;<compat> 0037 002C;;7;7;N;;;;;
+1F109;DIGIT EIGHT COMMA;No;0;EN;<compat> 0038 002C;;8;8;N;;;;;
+1F10A;DIGIT NINE COMMA;No;0;EN;<compat> 0039 002C;;9;9;N;;;;;
+1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;
+1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;
+1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L;<compat> 0028 0041 0029;;;;N;;;;;
+1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L;<compat> 0028 0042 0029;;;;N;;;;;
+1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L;<compat> 0028 0043 0029;;;;N;;;;;
+1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L;<compat> 0028 0044 0029;;;;N;;;;;
+1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L;<compat> 0028 0045 0029;;;;N;;;;;
+1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L;<compat> 0028 0046 0029;;;;N;;;;;
+1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L;<compat> 0028 0047 0029;;;;N;;;;;
+1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L;<compat> 0028 0048 0029;;;;N;;;;;
+1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L;<compat> 0028 0049 0029;;;;N;;;;;
+1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L;<compat> 0028 004A 0029;;;;N;;;;;
+1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L;<compat> 0028 004B 0029;;;;N;;;;;
+1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L;<compat> 0028 004C 0029;;;;N;;;;;
+1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L;<compat> 0028 004D 0029;;;;N;;;;;
+1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L;<compat> 0028 004E 0029;;;;N;;;;;
+1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L;<compat> 0028 004F 0029;;;;N;;;;;
+1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L;<compat> 0028 0050 0029;;;;N;;;;;
+1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L;<compat> 0028 0051 0029;;;;N;;;;;
+1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L;<compat> 0028 0052 0029;;;;N;;;;;
+1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L;<compat> 0028 0053 0029;;;;N;;;;;
+1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L;<compat> 0028 0054 0029;;;;N;;;;;
+1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L;<compat> 0028 0055 0029;;;;N;;;;;
+1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L;<compat> 0028 0056 0029;;;;N;;;;;
+1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L;<compat> 0028 0057 0029;;;;N;;;;;
+1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L;<compat> 0028 0058 0029;;;;N;;;;;
+1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L;<compat> 0028 0059 0029;;;;N;;;;;
+1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L;<compat> 0028 005A 0029;;;;N;;;;;
+1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L;<compat> 3014 0053 3015;;;;N;;;;;
+1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;;
+1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;;
+1F12D;CIRCLED CD;So;0;L;<circle> 0043 0044;;;;N;;;;;
+1F12E;CIRCLED WZ;So;0;L;<circle> 0057 005A;;;;N;;;;;
+1F12F;COPYLEFT SYMBOL;So;0;ON;;;;;N;;;;;
+1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L;<square> 0041;;;;N;;;;;
+1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L;<square> 0042;;;;N;;;;;
+1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L;<square> 0043;;;;N;;;;;
+1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L;<square> 0044;;;;N;;;;;
+1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L;<square> 0045;;;;N;;;;;
+1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L;<square> 0046;;;;N;;;;;
+1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L;<square> 0047;;;;N;;;;;
+1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L;<square> 0048;;;;N;;;;;
+1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L;<square> 0049;;;;N;;;;;
+1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L;<square> 004A;;;;N;;;;;
+1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L;<square> 004B;;;;N;;;;;
+1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L;<square> 004C;;;;N;;;;;
+1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L;<square> 004D;;;;N;;;;;
+1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L;<square> 004E;;;;N;;;;;
+1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L;<square> 004F;;;;N;;;;;
+1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L;<square> 0050;;;;N;;;;;
+1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L;<square> 0051;;;;N;;;;;
+1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L;<square> 0052;;;;N;;;;;
+1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L;<square> 0053;;;;N;;;;;
+1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L;<square> 0054;;;;N;;;;;
+1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L;<square> 0055;;;;N;;;;;
+1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L;<square> 0056;;;;N;;;;;
+1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L;<square> 0057;;;;N;;;;;
+1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L;<square> 0058;;;;N;;;;;
+1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L;<square> 0059;;;;N;;;;;
+1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L;<square> 005A;;;;N;;;;;
+1F14A;SQUARED HV;So;0;L;<square> 0048 0056;;;;N;;;;;
+1F14B;SQUARED MV;So;0;L;<square> 004D 0056;;;;N;;;;;
+1F14C;SQUARED SD;So;0;L;<square> 0053 0044;;;;N;;;;;
+1F14D;SQUARED SS;So;0;L;<square> 0053 0053;;;;N;;;;;
+1F14E;SQUARED PPV;So;0;L;<square> 0050 0050 0056;;;;N;;;;;
+1F14F;SQUARED WC;So;0;L;<square> 0057 0043;;;;N;;;;;
+1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
+1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
+1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
+1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;;
+1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;;
+1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;;
+1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;;
+1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;;
+1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;;
+1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;;
+1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;;
+1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;;
+1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;;
+1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;;
+1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;;
+1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;
+1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;;
+1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;;
+1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;;
+1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;;
+1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;;
+1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;;
+1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;;
+1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;
+1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;
+1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;
+1F16A;RAISED MC SIGN;So;0;ON;<super> 004D 0043;;;;N;;;;;
+1F16B;RAISED MD SIGN;So;0;ON;<super> 004D 0044;;;;N;;;;;
+1F16C;RAISED MR SIGN;So;0;ON;<super> 004D 0052;;;;N;;;;;
+1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
+1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
+1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
+1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;;
+1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;;
+1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;;
+1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;;
+1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;;
+1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;;
+1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;;
+1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;;
+1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;;
+1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;;
+1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;;
+1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;;
+1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;
+1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;;
+1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;;
+1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;;
+1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;;
+1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;;
+1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;;
+1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;;
+1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;
+1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;
+1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;
+1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;
+1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;;
+1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;;
+1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;;
+1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;;
+1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;;
+1F190;SQUARE DJ;So;0;L;<square> 0044 004A;;;;N;;;;;
+1F191;SQUARED CL;So;0;L;;;;;N;;;;;
+1F192;SQUARED COOL;So;0;L;;;;;N;;;;;
+1F193;SQUARED FREE;So;0;L;;;;;N;;;;;
+1F194;SQUARED ID;So;0;L;;;;;N;;;;;
+1F195;SQUARED NEW;So;0;L;;;;;N;;;;;
+1F196;SQUARED NG;So;0;L;;;;;N;;;;;
+1F197;SQUARED OK;So;0;L;;;;;N;;;;;
+1F198;SQUARED SOS;So;0;L;;;;;N;;;;;
+1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;;
+1F19A;SQUARED VS;So;0;L;;;;;N;;;;;
+1F19B;SQUARED THREE D;So;0;L;;;;;N;;;;;
+1F19C;SQUARED SECOND SCREEN;So;0;L;;;;;N;;;;;
+1F19D;SQUARED TWO K;So;0;L;;;;;N;;;;;
+1F19E;SQUARED FOUR K;So;0;L;;;;;N;;;;;
+1F19F;SQUARED EIGHT K;So;0;L;;;;;N;;;;;
+1F1A0;SQUARED FIVE POINT ONE;So;0;L;;;;;N;;;;;
+1F1A1;SQUARED SEVEN POINT ONE;So;0;L;;;;;N;;;;;
+1F1A2;SQUARED TWENTY-TWO POINT TWO;So;0;L;;;;;N;;;;;
+1F1A3;SQUARED SIXTY P;So;0;L;;;;;N;;;;;
+1F1A4;SQUARED ONE HUNDRED TWENTY P;So;0;L;;;;;N;;;;;
+1F1A5;SQUARED LATIN SMALL LETTER D;So;0;L;;;;;N;;;;;
+1F1A6;SQUARED HC;So;0;L;;;;;N;;;;;
+1F1A7;SQUARED HDR;So;0;L;;;;;N;;;;;
+1F1A8;SQUARED HI-RES;So;0;L;;;;;N;;;;;
+1F1A9;SQUARED LOSSLESS;So;0;L;;;;;N;;;;;
+1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;;
+1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;;
+1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;;
+1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;;
+1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;;
+1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;;
+1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;;
+1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;;
+1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;;
+1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;;
+1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;;
+1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;;
+1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;;
+1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;;
+1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;;
+1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;;
+1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;;
+1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;;
+1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;;
+1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;;
+1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;;
+1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;;
+1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;;
+1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;;
+1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;;
+1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;;
+1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;;
+1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;;
+1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;;
+1F200;SQUARE HIRAGANA HOKA;So;0;L;<square> 307B 304B;;;;N;;;;;
+1F201;SQUARED KATAKANA KOKO;So;0;L;<square> 30B3 30B3;;;;N;;;;;
+1F202;SQUARED KATAKANA SA;So;0;L;<square> 30B5;;;;N;;;;;
+1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L;<square> 624B;;;;N;;;;;
+1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L;<square> 5B57;;;;N;;;;;
+1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L;<square> 53CC;;;;N;;;;;
+1F213;SQUARED KATAKANA DE;So;0;L;<square> 30C7;;;;N;;;;;
+1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<square> 4E8C;;;;N;;;;;
+1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L;<square> 591A;;;;N;;;;;
+1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L;<square> 89E3;;;;N;;;;;
+1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L;<square> 5929;;;;N;;;;;
+1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L;<square> 4EA4;;;;N;;;;;
+1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L;<square> 6620;;;;N;;;;;
+1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L;<square> 7121;;;;N;;;;;
+1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L;<square> 6599;;;;N;;;;;
+1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L;<square> 524D;;;;N;;;;;
+1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L;<square> 5F8C;;;;N;;;;;
+1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L;<square> 518D;;;;N;;;;;
+1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L;<square> 65B0;;;;N;;;;;
+1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L;<square> 521D;;;;N;;;;;
+1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L;<square> 7D42;;;;N;;;;;
+1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L;<square> 751F;;;;N;;;;;
+1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L;<square> 8CA9;;;;N;;;;;
+1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L;<square> 58F0;;;;N;;;;;
+1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L;<square> 5439;;;;N;;;;;
+1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L;<square> 6F14;;;;N;;;;;
+1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L;<square> 6295;;;;N;;;;;
+1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L;<square> 6355;;;;N;;;;;
+1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L;<square> 4E00;;;;N;;;;;
+1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<square> 4E09;;;;N;;;;;
+1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L;<square> 904A;;;;N;;;;;
+1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L;<square> 5DE6;;;;N;;;;;
+1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L;<square> 4E2D;;;;N;;;;;
+1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L;<square> 53F3;;;;N;;;;;
+1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L;<square> 6307;;;;N;;;;;
+1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L;<square> 8D70;;;;N;;;;;
+1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<square> 6253;;;;N;;;;;
+1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L;<square> 7981;;;;N;;;;;
+1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L;<square> 7A7A;;;;N;;;;;
+1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L;<square> 5408;;;;N;;;;;
+1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L;<square> 6E80;;;;N;;;;;
+1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L;<square> 6709;;;;N;;;;;
+1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L;<square> 6708;;;;N;;;;;
+1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L;<square> 7533;;;;N;;;;;
+1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L;<square> 5272;;;;N;;;;;
+1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L;<square> 55B6;;;;N;;;;;
+1F23B;SQUARED CJK UNIFIED IDEOGRAPH-914D;So;0;L;<square> 914D;;;;N;;;;;
+1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L;<compat> 3014 672C 3015;;;;N;;;;;
+1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<compat> 3014 4E09 3015;;;;N;;;;;
+1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<compat> 3014 4E8C 3015;;;;N;;;;;
+1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L;<compat> 3014 5B89 3015;;;;N;;;;;
+1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L;<compat> 3014 70B9 3015;;;;N;;;;;
+1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<compat> 3014 6253 3015;;;;N;;;;;
+1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L;<compat> 3014 76D7 3015;;;;N;;;;;
+1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L;<compat> 3014 52DD 3015;;;;N;;;;;
+1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L;<compat> 3014 6557 3015;;;;N;;;;;
+1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L;<circle> 5F97;;;;N;;;;;
+1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L;<circle> 53EF;;;;N;;;;;
+1F260;ROUNDED SYMBOL FOR FU;So;0;ON;;;;;N;;;;;
+1F261;ROUNDED SYMBOL FOR LU;So;0;ON;;;;;N;;;;;
+1F262;ROUNDED SYMBOL FOR SHOU;So;0;ON;;;;;N;;;;;
+1F263;ROUNDED SYMBOL FOR XI;So;0;ON;;;;;N;;;;;
+1F264;ROUNDED SYMBOL FOR SHUANGXI;So;0;ON;;;;;N;;;;;
+1F265;ROUNDED SYMBOL FOR CAI;So;0;ON;;;;;N;;;;;
+1F300;CYCLONE;So;0;ON;;;;;N;;;;;
+1F301;FOGGY;So;0;ON;;;;;N;;;;;
+1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;;
+1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;;
+1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;;
+1F305;SUNRISE;So;0;ON;;;;;N;;;;;
+1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;;
+1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;;
+1F308;RAINBOW;So;0;ON;;;;;N;;;;;
+1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;;
+1F30A;WATER WAVE;So;0;ON;;;;;N;;;;;
+1F30B;VOLCANO;So;0;ON;;;;;N;;;;;
+1F30C;MILKY WAY;So;0;ON;;;;;N;;;;;
+1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;;
+1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;;
+1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;;
+1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;;
+1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;;
+1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;;
+1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;;
+1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;;
+1F321;THERMOMETER;So;0;ON;;;;;N;;;;;
+1F322;BLACK DROPLET;So;0;ON;;;;;N;;;;;
+1F323;WHITE SUN;So;0;ON;;;;;N;;;;;
+1F324;WHITE SUN WITH SMALL CLOUD;So;0;ON;;;;;N;;;;;
+1F325;WHITE SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;;
+1F326;WHITE SUN BEHIND CLOUD WITH RAIN;So;0;ON;;;;;N;;;;;
+1F327;CLOUD WITH RAIN;So;0;ON;;;;;N;;;;;
+1F328;CLOUD WITH SNOW;So;0;ON;;;;;N;;;;;
+1F329;CLOUD WITH LIGHTNING;So;0;ON;;;;;N;;;;;
+1F32A;CLOUD WITH TORNADO;So;0;ON;;;;;N;;;;;
+1F32B;FOG;So;0;ON;;;;;N;;;;;
+1F32C;WIND BLOWING FACE;So;0;ON;;;;;N;;;;;
+1F32D;HOT DOG;So;0;ON;;;;;N;;;;;
+1F32E;TACO;So;0;ON;;;;;N;;;;;
+1F32F;BURRITO;So;0;ON;;;;;N;;;;;
+1F330;CHESTNUT;So;0;ON;;;;;N;;;;;
+1F331;SEEDLING;So;0;ON;;;;;N;;;;;
+1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;;
+1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;;
+1F334;PALM TREE;So;0;ON;;;;;N;;;;;
+1F335;CACTUS;So;0;ON;;;;;N;;;;;
+1F336;HOT PEPPER;So;0;ON;;;;;N;;;;;
+1F337;TULIP;So;0;ON;;;;;N;;;;;
+1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;;
+1F339;ROSE;So;0;ON;;;;;N;;;;;
+1F33A;HIBISCUS;So;0;ON;;;;;N;;;;;
+1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;;
+1F33C;BLOSSOM;So;0;ON;;;;;N;;;;;
+1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;;
+1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;;
+1F33F;HERB;So;0;ON;;;;;N;;;;;
+1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;;
+1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;;
+1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;;
+1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;;
+1F344;MUSHROOM;So;0;ON;;;;;N;;;;;
+1F345;TOMATO;So;0;ON;;;;;N;;;;;
+1F346;AUBERGINE;So;0;ON;;;;;N;;;;;
+1F347;GRAPES;So;0;ON;;;;;N;;;;;
+1F348;MELON;So;0;ON;;;;;N;;;;;
+1F349;WATERMELON;So;0;ON;;;;;N;;;;;
+1F34A;TANGERINE;So;0;ON;;;;;N;;;;;
+1F34B;LEMON;So;0;ON;;;;;N;;;;;
+1F34C;BANANA;So;0;ON;;;;;N;;;;;
+1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;;
+1F34E;RED APPLE;So;0;ON;;;;;N;;;;;
+1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;;
+1F350;PEAR;So;0;ON;;;;;N;;;;;
+1F351;PEACH;So;0;ON;;;;;N;;;;;
+1F352;CHERRIES;So;0;ON;;;;;N;;;;;
+1F353;STRAWBERRY;So;0;ON;;;;;N;;;;;
+1F354;HAMBURGER;So;0;ON;;;;;N;;;;;
+1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;;
+1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;;
+1F357;POULTRY LEG;So;0;ON;;;;;N;;;;;
+1F358;RICE CRACKER;So;0;ON;;;;;N;;;;;
+1F359;RICE BALL;So;0;ON;;;;;N;;;;;
+1F35A;COOKED RICE;So;0;ON;;;;;N;;;;;
+1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;;
+1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;;
+1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;;
+1F35E;BREAD;So;0;ON;;;;;N;;;;;
+1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;;
+1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;;
+1F361;DANGO;So;0;ON;;;;;N;;;;;
+1F362;ODEN;So;0;ON;;;;;N;;;;;
+1F363;SUSHI;So;0;ON;;;;;N;;;;;
+1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;;
+1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;;
+1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;;
+1F367;SHAVED ICE;So;0;ON;;;;;N;;;;;
+1F368;ICE CREAM;So;0;ON;;;;;N;;;;;
+1F369;DOUGHNUT;So;0;ON;;;;;N;;;;;
+1F36A;COOKIE;So;0;ON;;;;;N;;;;;
+1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;;
+1F36C;CANDY;So;0;ON;;;;;N;;;;;
+1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;;
+1F36E;CUSTARD;So;0;ON;;;;;N;;;;;
+1F36F;HONEY POT;So;0;ON;;;;;N;;;;;
+1F370;SHORTCAKE;So;0;ON;;;;;N;;;;;
+1F371;BENTO BOX;So;0;ON;;;;;N;;;;;
+1F372;POT OF FOOD;So;0;ON;;;;;N;;;;;
+1F373;COOKING;So;0;ON;;;;;N;;;;;
+1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;;
+1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;;
+1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;;
+1F377;WINE GLASS;So;0;ON;;;;;N;;;;;
+1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;;
+1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;;
+1F37A;BEER MUG;So;0;ON;;;;;N;;;;;
+1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;;
+1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;;
+1F37D;FORK AND KNIFE WITH PLATE;So;0;ON;;;;;N;;;;;
+1F37E;BOTTLE WITH POPPING CORK;So;0;ON;;;;;N;;;;;
+1F37F;POPCORN;So;0;ON;;;;;N;;;;;
+1F380;RIBBON;So;0;ON;;;;;N;;;;;
+1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;;
+1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;;
+1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;;
+1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;;
+1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;;
+1F386;FIREWORKS;So;0;ON;;;;;N;;;;;
+1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;;
+1F388;BALLOON;So;0;ON;;;;;N;;;;;
+1F389;PARTY POPPER;So;0;ON;;;;;N;;;;;
+1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;;
+1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;;
+1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;;
+1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;;
+1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;;
+1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;;
+1F390;WIND CHIME;So;0;ON;;;;;N;;;;;
+1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;;
+1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;;
+1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;;
+1F394;HEART WITH TIP ON THE LEFT;So;0;ON;;;;;N;;;;;
+1F395;BOUQUET OF FLOWERS;So;0;ON;;;;;N;;;;;
+1F396;MILITARY MEDAL;So;0;ON;;;;;N;;;;;
+1F397;REMINDER RIBBON;So;0;ON;;;;;N;;;;;
+1F398;MUSICAL KEYBOARD WITH JACKS;So;0;ON;;;;;N;;;;;
+1F399;STUDIO MICROPHONE;So;0;ON;;;;;N;;;;;
+1F39A;LEVEL SLIDER;So;0;ON;;;;;N;;;;;
+1F39B;CONTROL KNOBS;So;0;ON;;;;;N;;;;;
+1F39C;BEAMED ASCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;;
+1F39D;BEAMED DESCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;;
+1F39E;FILM FRAMES;So;0;ON;;;;;N;;;;;
+1F39F;ADMISSION TICKETS;So;0;ON;;;;;N;;;;;
+1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;;
+1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;;
+1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;;
+1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;;
+1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;;
+1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;;
+1F3A6;CINEMA;So;0;ON;;;;;N;;;;;
+1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;;
+1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;;
+1F3A9;TOP HAT;So;0;ON;;;;;N;;;;;
+1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;;
+1F3AB;TICKET;So;0;ON;;;;;N;;;;;
+1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;;
+1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;;
+1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;;
+1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;;
+1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;;
+1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;;
+1F3B2;GAME DIE;So;0;ON;;;;;N;;;;;
+1F3B3;BOWLING;So;0;ON;;;;;N;;;;;
+1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;;
+1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;;
+1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;;
+1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;;
+1F3B8;GUITAR;So;0;ON;;;;;N;;;;;
+1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;;
+1F3BA;TRUMPET;So;0;ON;;;;;N;;;;;
+1F3BB;VIOLIN;So;0;ON;;;;;N;;;;;
+1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;;
+1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;;
+1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;;
+1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;;
+1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;;
+1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;;
+1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;;
+1F3C3;RUNNER;So;0;ON;;;;;N;;;;;
+1F3C4;SURFER;So;0;ON;;;;;N;;;;;
+1F3C5;SPORTS MEDAL;So;0;ON;;;;;N;;;;;
+1F3C6;TROPHY;So;0;ON;;;;;N;;;;;
+1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;;
+1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;;
+1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;;
+1F3CA;SWIMMER;So;0;ON;;;;;N;;;;;
+1F3CB;WEIGHT LIFTER;So;0;ON;;;;;N;;;;;
+1F3CC;GOLFER;So;0;ON;;;;;N;;;;;
+1F3CD;RACING MOTORCYCLE;So;0;ON;;;;;N;;;;;
+1F3CE;RACING CAR;So;0;ON;;;;;N;;;;;
+1F3CF;CRICKET BAT AND BALL;So;0;ON;;;;;N;;;;;
+1F3D0;VOLLEYBALL;So;0;ON;;;;;N;;;;;
+1F3D1;FIELD HOCKEY STICK AND BALL;So;0;ON;;;;;N;;;;;
+1F3D2;ICE HOCKEY STICK AND PUCK;So;0;ON;;;;;N;;;;;
+1F3D3;TABLE TENNIS PADDLE AND BALL;So;0;ON;;;;;N;;;;;
+1F3D4;SNOW CAPPED MOUNTAIN;So;0;ON;;;;;N;;;;;
+1F3D5;CAMPING;So;0;ON;;;;;N;;;;;
+1F3D6;BEACH WITH UMBRELLA;So;0;ON;;;;;N;;;;;
+1F3D7;BUILDING CONSTRUCTION;So;0;ON;;;;;N;;;;;
+1F3D8;HOUSE BUILDINGS;So;0;ON;;;;;N;;;;;
+1F3D9;CITYSCAPE;So;0;ON;;;;;N;;;;;
+1F3DA;DERELICT HOUSE BUILDING;So;0;ON;;;;;N;;;;;
+1F3DB;CLASSICAL BUILDING;So;0;ON;;;;;N;;;;;
+1F3DC;DESERT;So;0;ON;;;;;N;;;;;
+1F3DD;DESERT ISLAND;So;0;ON;;;;;N;;;;;
+1F3DE;NATIONAL PARK;So;0;ON;;;;;N;;;;;
+1F3DF;STADIUM;So;0;ON;;;;;N;;;;;
+1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;;
+1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;;
+1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;;
+1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;;
+1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;;
+1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;;
+1F3E6;BANK;So;0;ON;;;;;N;;;;;
+1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;;
+1F3E8;HOTEL;So;0;ON;;;;;N;;;;;
+1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;;
+1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;;
+1F3EB;SCHOOL;So;0;ON;;;;;N;;;;;
+1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;;
+1F3ED;FACTORY;So;0;ON;;;;;N;;;;;
+1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;;
+1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;;
+1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;;
+1F3F1;WHITE PENNANT;So;0;ON;;;;;N;;;;;
+1F3F2;BLACK PENNANT;So;0;ON;;;;;N;;;;;
+1F3F3;WAVING WHITE FLAG;So;0;ON;;;;;N;;;;;
+1F3F4;WAVING BLACK FLAG;So;0;ON;;;;;N;;;;;
+1F3F5;ROSETTE;So;0;ON;;;;;N;;;;;
+1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;;
+1F3F7;LABEL;So;0;ON;;;;;N;;;;;
+1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;;
+1F3F9;BOW AND ARROW;So;0;ON;;;;;N;;;;;
+1F3FA;AMPHORA;So;0;ON;;;;;N;;;;;
+1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;;
+1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;;
+1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;;
+1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;;
+1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;;
+1F400;RAT;So;0;ON;;;;;N;;;;;
+1F401;MOUSE;So;0;ON;;;;;N;;;;;
+1F402;OX;So;0;ON;;;;;N;;;;;
+1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;;
+1F404;COW;So;0;ON;;;;;N;;;;;
+1F405;TIGER;So;0;ON;;;;;N;;;;;
+1F406;LEOPARD;So;0;ON;;;;;N;;;;;
+1F407;RABBIT;So;0;ON;;;;;N;;;;;
+1F408;CAT;So;0;ON;;;;;N;;;;;
+1F409;DRAGON;So;0;ON;;;;;N;;;;;
+1F40A;CROCODILE;So;0;ON;;;;;N;;;;;
+1F40B;WHALE;So;0;ON;;;;;N;;;;;
+1F40C;SNAIL;So;0;ON;;;;;N;;;;;
+1F40D;SNAKE;So;0;ON;;;;;N;;;;;
+1F40E;HORSE;So;0;ON;;;;;N;;;;;
+1F40F;RAM;So;0;ON;;;;;N;;;;;
+1F410;GOAT;So;0;ON;;;;;N;;;;;
+1F411;SHEEP;So;0;ON;;;;;N;;;;;
+1F412;MONKEY;So;0;ON;;;;;N;;;;;
+1F413;ROOSTER;So;0;ON;;;;;N;;;;;
+1F414;CHICKEN;So;0;ON;;;;;N;;;;;
+1F415;DOG;So;0;ON;;;;;N;;;;;
+1F416;PIG;So;0;ON;;;;;N;;;;;
+1F417;BOAR;So;0;ON;;;;;N;;;;;
+1F418;ELEPHANT;So;0;ON;;;;;N;;;;;
+1F419;OCTOPUS;So;0;ON;;;;;N;;;;;
+1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;;
+1F41B;BUG;So;0;ON;;;;;N;;;;;
+1F41C;ANT;So;0;ON;;;;;N;;;;;
+1F41D;HONEYBEE;So;0;ON;;;;;N;;;;;
+1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;;
+1F41F;FISH;So;0;ON;;;;;N;;;;;
+1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;;
+1F421;BLOWFISH;So;0;ON;;;;;N;;;;;
+1F422;TURTLE;So;0;ON;;;;;N;;;;;
+1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;;
+1F424;BABY CHICK;So;0;ON;;;;;N;;;;;
+1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;;
+1F426;BIRD;So;0;ON;;;;;N;;;;;
+1F427;PENGUIN;So;0;ON;;;;;N;;;;;
+1F428;KOALA;So;0;ON;;;;;N;;;;;
+1F429;POODLE;So;0;ON;;;;;N;;;;;
+1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;;
+1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;;
+1F42C;DOLPHIN;So;0;ON;;;;;N;;;;;
+1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;;
+1F42E;COW FACE;So;0;ON;;;;;N;;;;;
+1F42F;TIGER FACE;So;0;ON;;;;;N;;;;;
+1F430;RABBIT FACE;So;0;ON;;;;;N;;;;;
+1F431;CAT FACE;So;0;ON;;;;;N;;;;;
+1F432;DRAGON FACE;So;0;ON;;;;;N;;;;;
+1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;;
+1F434;HORSE FACE;So;0;ON;;;;;N;;;;;
+1F435;MONKEY FACE;So;0;ON;;;;;N;;;;;
+1F436;DOG FACE;So;0;ON;;;;;N;;;;;
+1F437;PIG FACE;So;0;ON;;;;;N;;;;;
+1F438;FROG FACE;So;0;ON;;;;;N;;;;;
+1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;;
+1F43A;WOLF FACE;So;0;ON;;;;;N;;;;;
+1F43B;BEAR FACE;So;0;ON;;;;;N;;;;;
+1F43C;PANDA FACE;So;0;ON;;;;;N;;;;;
+1F43D;PIG NOSE;So;0;ON;;;;;N;;;;;
+1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;;
+1F43F;CHIPMUNK;So;0;ON;;;;;N;;;;;
+1F440;EYES;So;0;ON;;;;;N;;;;;
+1F441;EYE;So;0;ON;;;;;N;;;;;
+1F442;EAR;So;0;ON;;;;;N;;;;;
+1F443;NOSE;So;0;ON;;;;;N;;;;;
+1F444;MOUTH;So;0;ON;;;;;N;;;;;
+1F445;TONGUE;So;0;ON;;;;;N;;;;;
+1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;;
+1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;;
+1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;;
+1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;;
+1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;;
+1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;;
+1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;;
+1F451;CROWN;So;0;ON;;;;;N;;;;;
+1F452;WOMANS HAT;So;0;ON;;;;;N;;;;;
+1F453;EYEGLASSES;So;0;ON;;;;;N;;;;;
+1F454;NECKTIE;So;0;ON;;;;;N;;;;;
+1F455;T-SHIRT;So;0;ON;;;;;N;;;;;
+1F456;JEANS;So;0;ON;;;;;N;;;;;
+1F457;DRESS;So;0;ON;;;;;N;;;;;
+1F458;KIMONO;So;0;ON;;;;;N;;;;;
+1F459;BIKINI;So;0;ON;;;;;N;;;;;
+1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;;
+1F45B;PURSE;So;0;ON;;;;;N;;;;;
+1F45C;HANDBAG;So;0;ON;;;;;N;;;;;
+1F45D;POUCH;So;0;ON;;;;;N;;;;;
+1F45E;MANS SHOE;So;0;ON;;;;;N;;;;;
+1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;;
+1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;;
+1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;;
+1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;;
+1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;;
+1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;;
+1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;;
+1F466;BOY;So;0;ON;;;;;N;;;;;
+1F467;GIRL;So;0;ON;;;;;N;;;;;
+1F468;MAN;So;0;ON;;;;;N;;;;;
+1F469;WOMAN;So;0;ON;;;;;N;;;;;
+1F46A;FAMILY;So;0;ON;;;;;N;;;;;
+1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;;
+1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;;
+1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;;
+1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;;
+1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;;
+1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;;
+1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;;
+1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;;
+1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;;
+1F474;OLDER MAN;So;0;ON;;;;;N;;;;;
+1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;;
+1F476;BABY;So;0;ON;;;;;N;;;;;
+1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;;
+1F478;PRINCESS;So;0;ON;;;;;N;;;;;
+1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;;
+1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;;
+1F47B;GHOST;So;0;ON;;;;;N;;;;;
+1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;;
+1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;;
+1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;;
+1F47F;IMP;So;0;ON;;;;;N;;;;;
+1F480;SKULL;So;0;ON;;;;;N;;;;;
+1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;;
+1F482;GUARDSMAN;So;0;ON;;;;;N;;;;;
+1F483;DANCER;So;0;ON;;;;;N;;;;;
+1F484;LIPSTICK;So;0;ON;;;;;N;;;;;
+1F485;NAIL POLISH;So;0;ON;;;;;N;;;;;
+1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;;
+1F487;HAIRCUT;So;0;ON;;;;;N;;;;;
+1F488;BARBER POLE;So;0;ON;;;;;N;;;;;
+1F489;SYRINGE;So;0;ON;;;;;N;;;;;
+1F48A;PILL;So;0;ON;;;;;N;;;;;
+1F48B;KISS MARK;So;0;ON;;;;;N;;;;;
+1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;;
+1F48D;RING;So;0;ON;;;;;N;;;;;
+1F48E;GEM STONE;So;0;ON;;;;;N;;;;;
+1F48F;KISS;So;0;ON;;;;;N;;;;;
+1F490;BOUQUET;So;0;ON;;;;;N;;;;;
+1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;;
+1F492;WEDDING;So;0;ON;;;;;N;;;;;
+1F493;BEATING HEART;So;0;ON;;;;;N;;;;;
+1F494;BROKEN HEART;So;0;ON;;;;;N;;;;;
+1F495;TWO HEARTS;So;0;ON;;;;;N;;;;;
+1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;;
+1F497;GROWING HEART;So;0;ON;;;;;N;;;;;
+1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;;
+1F499;BLUE HEART;So;0;ON;;;;;N;;;;;
+1F49A;GREEN HEART;So;0;ON;;;;;N;;;;;
+1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;;
+1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;;
+1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;;
+1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;;
+1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;;
+1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;;
+1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;;
+1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A3;BOMB;So;0;ON;;;;;N;;;;;
+1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A7;DROPLET;So;0;ON;;;;;N;;;;;
+1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;;
+1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;;
+1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;;
+1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;;
+1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;;
+1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;;
+1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;;
+1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;;
+1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;;
+1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;;
+1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;;
+1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;;
+1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;;
+1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;;
+1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;;
+1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;;
+1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;;
+1F4BA;SEAT;So;0;ON;;;;;N;;;;;
+1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;;
+1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;;
+1F4BD;MINIDISC;So;0;ON;;;;;N;;;;;
+1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;;
+1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;;
+1F4C0;DVD;So;0;ON;;;;;N;;;;;
+1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;;
+1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;;
+1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;;
+1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;;
+1F4C5;CALENDAR;So;0;ON;;;;;N;;;;;
+1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;;
+1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;;
+1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;;
+1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;;
+1F4CA;BAR CHART;So;0;ON;;;;;N;;;;;
+1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;;
+1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;;
+1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;;
+1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;;
+1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;;
+1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;;
+1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;;
+1F4D2;LEDGER;So;0;ON;;;;;N;;;;;
+1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;;
+1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;;
+1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;;
+1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;;
+1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;;
+1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;;
+1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;;
+1F4DA;BOOKS;So;0;ON;;;;;N;;;;;
+1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;;
+1F4DC;SCROLL;So;0;ON;;;;;N;;;;;
+1F4DD;MEMO;So;0;ON;;;;;N;;;;;
+1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
+1F4DF;PAGER;So;0;ON;;;;;N;;;;;
+1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;;
+1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;;
+1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;;
+1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;;
+1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;;
+1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;;
+1F4E6;PACKAGE;So;0;ON;;;;;N;;;;;
+1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;;
+1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;;
+1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;;
+1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;;
+1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;;
+1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;;
+1F4EE;POSTBOX;So;0;ON;;;;;N;;;;;
+1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;;
+1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;;
+1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;;
+1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;;
+1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;;
+1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;;
+1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;;
+1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;;
+1F4F7;CAMERA;So;0;ON;;;;;N;;;;;
+1F4F8;CAMERA WITH FLASH;So;0;ON;;;;;N;;;;;
+1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;;
+1F4FA;TELEVISION;So;0;ON;;;;;N;;;;;
+1F4FB;RADIO;So;0;ON;;;;;N;;;;;
+1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;;
+1F4FD;FILM PROJECTOR;So;0;ON;;;;;N;;;;;
+1F4FE;PORTABLE STEREO;So;0;ON;;;;;N;;;;;
+1F4FF;PRAYER BEADS;So;0;ON;;;;;N;;;;;
+1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;;
+1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;;
+1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;
+1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;
+1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;;
+1F508;SPEAKER;So;0;ON;;;;;N;;;;;
+1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;;
+1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;;
+1F50B;BATTERY;So;0;ON;;;;;N;;;;;
+1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;;
+1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;;
+1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;;
+1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;;
+1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;;
+1F511;KEY;So;0;ON;;;;;N;;;;;
+1F512;LOCK;So;0;ON;;;;;N;;;;;
+1F513;OPEN LOCK;So;0;ON;;;;;N;;;;;
+1F514;BELL;So;0;ON;;;;;N;;;;;
+1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;;
+1F516;BOOKMARK;So;0;ON;;;;;N;;;;;
+1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;;
+1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;;
+1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;;
+1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;;
+1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;;
+1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;;
+1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;;
+1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;;
+1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;;
+1F525;FIRE;So;0;ON;;;;;N;;;;;
+1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;;
+1F527;WRENCH;So;0;ON;;;;;N;;;;;
+1F528;HAMMER;So;0;ON;;;;;N;;;;;
+1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;;
+1F52A;HOCHO;So;0;ON;;;;;N;;;;;
+1F52B;PISTOL;So;0;ON;;;;;N;;;;;
+1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;;
+1F52D;TELESCOPE;So;0;ON;;;;;N;;;;;
+1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;;
+1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;;
+1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;;
+1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;;
+1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;;
+1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;;
+1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;;
+1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;;
+1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;;
+1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;;
+1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;;
+1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53E;LOWER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F53F;UPPER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;;
+1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;;
+1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;;
+1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;
+1F544;NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;
+1F545;SYMBOL FOR MARKS CHAPTER;So;0;ON;;;;;N;;;;;
+1F546;WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+1F547;HEAVY LATIN CROSS;So;0;ON;;;;;N;;;;;
+1F548;CELTIC CROSS;So;0;ON;;;;;N;;;;;
+1F549;OM SYMBOL;So;0;ON;;;;;N;;;;;
+1F54A;DOVE OF PEACE;So;0;ON;;;;;N;;;;;
+1F54B;KAABA;So;0;ON;;;;;N;;;;;
+1F54C;MOSQUE;So;0;ON;;;;;N;;;;;
+1F54D;SYNAGOGUE;So;0;ON;;;;;N;;;;;
+1F54E;MENORAH WITH NINE BRANCHES;So;0;ON;;;;;N;;;;;
+1F54F;BOWL OF HYGIEIA;So;0;ON;;;;;N;;;;;
+1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;;
+1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;;
+1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;;
+1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;;
+1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;;
+1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;;
+1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;;
+1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;;
+1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;;
+1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;;
+1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;;
+1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;;
+1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;;
+1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;;
+1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;;
+1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;;
+1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;;
+1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;;
+1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;;
+1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;;
+1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;;
+1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;;
+1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;;
+1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;;
+1F568;RIGHT SPEAKER;So;0;ON;;;;;N;;;;;
+1F569;RIGHT SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;;
+1F56A;RIGHT SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;;
+1F56B;BULLHORN;So;0;ON;;;;;N;;;;;
+1F56C;BULLHORN WITH SOUND WAVES;So;0;ON;;;;;N;;;;;
+1F56D;RINGING BELL;So;0;ON;;;;;N;;;;;
+1F56E;BOOK;So;0;ON;;;;;N;;;;;
+1F56F;CANDLE;So;0;ON;;;;;N;;;;;
+1F570;MANTELPIECE CLOCK;So;0;ON;;;;;N;;;;;
+1F571;BLACK SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+1F572;NO PIRACY;So;0;ON;;;;;N;;;;;
+1F573;HOLE;So;0;ON;;;;;N;;;;;
+1F574;MAN IN BUSINESS SUIT LEVITATING;So;0;ON;;;;;N;;;;;
+1F575;SLEUTH OR SPY;So;0;ON;;;;;N;;;;;
+1F576;DARK SUNGLASSES;So;0;ON;;;;;N;;;;;
+1F577;SPIDER;So;0;ON;;;;;N;;;;;
+1F578;SPIDER WEB;So;0;ON;;;;;N;;;;;
+1F579;JOYSTICK;So;0;ON;;;;;N;;;;;
+1F57A;MAN DANCING;So;0;ON;;;;;N;;;;;
+1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
+1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;;
+1F57D;RIGHT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
+1F57E;WHITE TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;;
+1F57F;BLACK TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;;
+1F580;TELEPHONE ON TOP OF MODEM;So;0;ON;;;;;N;;;;;
+1F581;CLAMSHELL MOBILE PHONE;So;0;ON;;;;;N;;;;;
+1F582;BACK OF ENVELOPE;So;0;ON;;;;;N;;;;;
+1F583;STAMPED ENVELOPE;So;0;ON;;;;;N;;;;;
+1F584;ENVELOPE WITH LIGHTNING;So;0;ON;;;;;N;;;;;
+1F585;FLYING ENVELOPE;So;0;ON;;;;;N;;;;;
+1F586;PEN OVER STAMPED ENVELOPE;So;0;ON;;;;;N;;;;;
+1F587;LINKED PAPERCLIPS;So;0;ON;;;;;N;;;;;
+1F588;BLACK PUSHPIN;So;0;ON;;;;;N;;;;;
+1F589;LOWER LEFT PENCIL;So;0;ON;;;;;N;;;;;
+1F58A;LOWER LEFT BALLPOINT PEN;So;0;ON;;;;;N;;;;;
+1F58B;LOWER LEFT FOUNTAIN PEN;So;0;ON;;;;;N;;;;;
+1F58C;LOWER LEFT PAINTBRUSH;So;0;ON;;;;;N;;;;;
+1F58D;LOWER LEFT CRAYON;So;0;ON;;;;;N;;;;;
+1F58E;LEFT WRITING HAND;So;0;ON;;;;;N;;;;;
+1F58F;TURNED OK HAND SIGN;So;0;ON;;;;;N;;;;;
+1F590;RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;;
+1F591;REVERSED RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;;
+1F592;REVERSED THUMBS UP SIGN;So;0;ON;;;;;N;;;;;
+1F593;REVERSED THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;;
+1F594;REVERSED VICTORY HAND;So;0;ON;;;;;N;;;;;
+1F595;REVERSED HAND WITH MIDDLE FINGER EXTENDED;So;0;ON;;;;;N;;;;;
+1F596;RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS;So;0;ON;;;;;N;;;;;
+1F597;WHITE DOWN POINTING LEFT HAND INDEX;So;0;ON;;;;;N;;;;;
+1F598;SIDEWAYS WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F599;SIDEWAYS WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F59A;SIDEWAYS BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F59B;SIDEWAYS BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F59C;BLACK LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F59D;BLACK RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F59E;SIDEWAYS WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F59F;SIDEWAYS WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F5A0;SIDEWAYS BLACK UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F5A1;SIDEWAYS BLACK DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+1F5A2;BLACK UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;;
+1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;;
+1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;;
+1F5A7;THREE NETWORKED COMPUTERS;So;0;ON;;;;;N;;;;;
+1F5A8;PRINTER;So;0;ON;;;;;N;;;;;
+1F5A9;POCKET CALCULATOR;So;0;ON;;;;;N;;;;;
+1F5AA;BLACK HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;;
+1F5AB;WHITE HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;;
+1F5AC;SOFT SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;;
+1F5AD;TAPE CARTRIDGE;So;0;ON;;;;;N;;;;;
+1F5AE;WIRED KEYBOARD;So;0;ON;;;;;N;;;;;
+1F5AF;ONE BUTTON MOUSE;So;0;ON;;;;;N;;;;;
+1F5B0;TWO BUTTON MOUSE;So;0;ON;;;;;N;;;;;
+1F5B1;THREE BUTTON MOUSE;So;0;ON;;;;;N;;;;;
+1F5B2;TRACKBALL;So;0;ON;;;;;N;;;;;
+1F5B3;OLD PERSONAL COMPUTER;So;0;ON;;;;;N;;;;;
+1F5B4;HARD DISK;So;0;ON;;;;;N;;;;;
+1F5B5;SCREEN;So;0;ON;;;;;N;;;;;
+1F5B6;PRINTER ICON;So;0;ON;;;;;N;;;;;
+1F5B7;FAX ICON;So;0;ON;;;;;N;;;;;
+1F5B8;OPTICAL DISC ICON;So;0;ON;;;;;N;;;;;
+1F5B9;DOCUMENT WITH TEXT;So;0;ON;;;;;N;;;;;
+1F5BA;DOCUMENT WITH TEXT AND PICTURE;So;0;ON;;;;;N;;;;;
+1F5BB;DOCUMENT WITH PICTURE;So;0;ON;;;;;N;;;;;
+1F5BC;FRAME WITH PICTURE;So;0;ON;;;;;N;;;;;
+1F5BD;FRAME WITH TILES;So;0;ON;;;;;N;;;;;
+1F5BE;FRAME WITH AN X;So;0;ON;;;;;N;;;;;
+1F5BF;BLACK FOLDER;So;0;ON;;;;;N;;;;;
+1F5C0;FOLDER;So;0;ON;;;;;N;;;;;
+1F5C1;OPEN FOLDER;So;0;ON;;;;;N;;;;;
+1F5C2;CARD INDEX DIVIDERS;So;0;ON;;;;;N;;;;;
+1F5C3;CARD FILE BOX;So;0;ON;;;;;N;;;;;
+1F5C4;FILE CABINET;So;0;ON;;;;;N;;;;;
+1F5C5;EMPTY NOTE;So;0;ON;;;;;N;;;;;
+1F5C6;EMPTY NOTE PAGE;So;0;ON;;;;;N;;;;;
+1F5C7;EMPTY NOTE PAD;So;0;ON;;;;;N;;;;;
+1F5C8;NOTE;So;0;ON;;;;;N;;;;;
+1F5C9;NOTE PAGE;So;0;ON;;;;;N;;;;;
+1F5CA;NOTE PAD;So;0;ON;;;;;N;;;;;
+1F5CB;EMPTY DOCUMENT;So;0;ON;;;;;N;;;;;
+1F5CC;EMPTY PAGE;So;0;ON;;;;;N;;;;;
+1F5CD;EMPTY PAGES;So;0;ON;;;;;N;;;;;
+1F5CE;DOCUMENT;So;0;ON;;;;;N;;;;;
+1F5CF;PAGE;So;0;ON;;;;;N;;;;;
+1F5D0;PAGES;So;0;ON;;;;;N;;;;;
+1F5D1;WASTEBASKET;So;0;ON;;;;;N;;;;;
+1F5D2;SPIRAL NOTE PAD;So;0;ON;;;;;N;;;;;
+1F5D3;SPIRAL CALENDAR PAD;So;0;ON;;;;;N;;;;;
+1F5D4;DESKTOP WINDOW;So;0;ON;;;;;N;;;;;
+1F5D5;MINIMIZE;So;0;ON;;;;;N;;;;;
+1F5D6;MAXIMIZE;So;0;ON;;;;;N;;;;;
+1F5D7;OVERLAP;So;0;ON;;;;;N;;;;;
+1F5D8;CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F5D9;CANCELLATION X;So;0;ON;;;;;N;;;;;
+1F5DA;INCREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;;
+1F5DB;DECREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;;
+1F5DC;COMPRESSION;So;0;ON;;;;;N;;;;;
+1F5DD;OLD KEY;So;0;ON;;;;;N;;;;;
+1F5DE;ROLLED-UP NEWSPAPER;So;0;ON;;;;;N;;;;;
+1F5DF;PAGE WITH CIRCLED TEXT;So;0;ON;;;;;N;;;;;
+1F5E0;STOCK CHART;So;0;ON;;;;;N;;;;;
+1F5E1;DAGGER KNIFE;So;0;ON;;;;;N;;;;;
+1F5E2;LIPS;So;0;ON;;;;;N;;;;;
+1F5E3;SPEAKING HEAD IN SILHOUETTE;So;0;ON;;;;;N;;;;;
+1F5E4;THREE RAYS ABOVE;So;0;ON;;;;;N;;;;;
+1F5E5;THREE RAYS BELOW;So;0;ON;;;;;N;;;;;
+1F5E6;THREE RAYS LEFT;So;0;ON;;;;;N;;;;;
+1F5E7;THREE RAYS RIGHT;So;0;ON;;;;;N;;;;;
+1F5E8;LEFT SPEECH BUBBLE;So;0;ON;;;;;N;;;;;
+1F5E9;RIGHT SPEECH BUBBLE;So;0;ON;;;;;N;;;;;
+1F5EA;TWO SPEECH BUBBLES;So;0;ON;;;;;N;;;;;
+1F5EB;THREE SPEECH BUBBLES;So;0;ON;;;;;N;;;;;
+1F5EC;LEFT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;;
+1F5ED;RIGHT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;;
+1F5EE;LEFT ANGER BUBBLE;So;0;ON;;;;;N;;;;;
+1F5EF;RIGHT ANGER BUBBLE;So;0;ON;;;;;N;;;;;
+1F5F0;MOOD BUBBLE;So;0;ON;;;;;N;;;;;
+1F5F1;LIGHTNING MOOD BUBBLE;So;0;ON;;;;;N;;;;;
+1F5F2;LIGHTNING MOOD;So;0;ON;;;;;N;;;;;
+1F5F3;BALLOT BOX WITH BALLOT;So;0;ON;;;;;N;;;;;
+1F5F4;BALLOT SCRIPT X;So;0;ON;;;;;N;;;;;
+1F5F5;BALLOT BOX WITH SCRIPT X;So;0;ON;;;;;N;;;;;
+1F5F6;BALLOT BOLD SCRIPT X;So;0;ON;;;;;N;;;;;
+1F5F7;BALLOT BOX WITH BOLD SCRIPT X;So;0;ON;;;;;N;;;;;
+1F5F8;LIGHT CHECK MARK;So;0;ON;;;;;N;;;;;
+1F5F9;BALLOT BOX WITH BOLD CHECK;So;0;ON;;;;;N;;;;;
+1F5FA;WORLD MAP;So;0;ON;;;;;N;;;;;
+1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;;
+1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;;
+1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;;
+1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;;
+1F5FF;MOYAI;So;0;ON;;;;;N;;;;;
+1F600;GRINNING FACE;So;0;ON;;;;;N;;;;;
+1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;
+1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;;
+1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;
+1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;;
+1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;;
+1F609;WINKING FACE;So;0;ON;;;;;N;;;;;
+1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;;
+1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;;
+1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;;
+1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;;
+1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;;
+1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;;
+1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;;
+1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;;
+1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;;
+1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;;
+1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;;
+1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;;
+1F617;KISSING FACE;So;0;ON;;;;;N;;;;;
+1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;;
+1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;;
+1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;;
+1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;;
+1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;;
+1F620;ANGRY FACE;So;0;ON;;;;;N;;;;;
+1F621;POUTING FACE;So;0;ON;;;;;N;;;;;
+1F622;CRYING FACE;So;0;ON;;;;;N;;;;;
+1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;;
+1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;;
+1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;;
+1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;;
+1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;;
+1F629;WEARY FACE;So;0;ON;;;;;N;;;;;
+1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;;
+1F62B;TIRED FACE;So;0;ON;;;;;N;;;;;
+1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;;
+1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;;
+1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;;
+1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;
+1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;;
+1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;;
+1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;;
+1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;;
+1F635;DIZZY FACE;So;0;ON;;;;;N;;;;;
+1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;;
+1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;;
+1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;
+1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;;
+1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;;
+1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;;
+1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;;
+1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;;
+1F641;SLIGHTLY FROWNING FACE;So;0;ON;;;;;N;;;;;
+1F642;SLIGHTLY SMILING FACE;So;0;ON;;;;;N;;;;;
+1F643;UPSIDE-DOWN FACE;So;0;ON;;;;;N;;;;;
+1F644;FACE WITH ROLLING EYES;So;0;ON;;;;;N;;;;;
+1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;;
+1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;;
+1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;;
+1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;
+1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;
+1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;
+1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;;
+1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;;
+1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;;
+1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;;
+1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;;
+1F650;NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F651;SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F652;NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F653;SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F654;TURNED NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F655;TURNED SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F656;TURNED NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F657;TURNED SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;
+1F658;NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F659;SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F65A;NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F65B;SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F65C;HEAVY NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F65D;HEAVY SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F65E;HEAVY NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F65F;HEAVY SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;
+1F660;NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F661;SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F662;NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F663;SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F664;HEAVY NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F665;HEAVY SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F666;HEAVY NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F667;HEAVY SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;
+1F668;HOLLOW QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;;
+1F669;HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;;
+1F66A;SOLID QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;;
+1F66B;SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;;
+1F66C;LEFTWARDS ROCKET;So;0;ON;;;;;N;;;;;
+1F66D;UPWARDS ROCKET;So;0;ON;;;;;N;;;;;
+1F66E;RIGHTWARDS ROCKET;So;0;ON;;;;;N;;;;;
+1F66F;DOWNWARDS ROCKET;So;0;ON;;;;;N;;;;;
+1F670;SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;;
+1F671;HEAVY SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;;
+1F672;LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;;
+1F673;HEAVY LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;;
+1F674;HEAVY AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;;
+1F675;SWASH AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;;
+1F676;SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+1F677;SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+1F678;SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+1F679;HEAVY INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;;
+1F67A;SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;;
+1F67B;HEAVY SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;;
+1F67C;VERY HEAVY SOLIDUS;So;0;ON;;;;;N;;;;;
+1F67D;VERY HEAVY REVERSE SOLIDUS;So;0;ON;;;;;N;;;;;
+1F67E;CHECKER BOARD;So;0;ON;;;;;N;;;;;
+1F67F;REVERSE CHECKER BOARD;So;0;ON;;;;;N;;;;;
+1F680;ROCKET;So;0;ON;;;;;N;;;;;
+1F681;HELICOPTER;So;0;ON;;;;;N;;;;;
+1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;;
+1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;;
+1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;;
+1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;;
+1F686;TRAIN;So;0;ON;;;;;N;;;;;
+1F687;METRO;So;0;ON;;;;;N;;;;;
+1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;;
+1F689;STATION;So;0;ON;;;;;N;;;;;
+1F68A;TRAM;So;0;ON;;;;;N;;;;;
+1F68B;TRAM CAR;So;0;ON;;;;;N;;;;;
+1F68C;BUS;So;0;ON;;;;;N;;;;;
+1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;;
+1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;;
+1F68F;BUS STOP;So;0;ON;;;;;N;;;;;
+1F690;MINIBUS;So;0;ON;;;;;N;;;;;
+1F691;AMBULANCE;So;0;ON;;;;;N;;;;;
+1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;;
+1F693;POLICE CAR;So;0;ON;;;;;N;;;;;
+1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;;
+1F695;TAXI;So;0;ON;;;;;N;;;;;
+1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;;
+1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;;
+1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;;
+1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;;
+1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;;
+1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;;
+1F69C;TRACTOR;So;0;ON;;;;;N;;;;;
+1F69D;MONORAIL;So;0;ON;;;;;N;;;;;
+1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;;
+1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;;
+1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;;
+1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;;
+1F6A2;SHIP;So;0;ON;;;;;N;;;;;
+1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;;
+1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;;
+1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;;
+1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;;
+1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;;
+1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;;
+1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;;
+1F6AA;DOOR;So;0;ON;;;;;N;;;;;
+1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;;
+1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;;
+1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;;
+1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;;
+1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;;
+1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;;
+1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;;
+1F6B2;BICYCLE;So;0;ON;;;;;N;;;;;
+1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;;
+1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;;
+1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;;
+1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;;
+1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;;
+1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;;
+1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;;
+1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;;
+1F6BB;RESTROOM;So;0;ON;;;;;N;;;;;
+1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;;
+1F6BD;TOILET;So;0;ON;;;;;N;;;;;
+1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;;
+1F6BF;SHOWER;So;0;ON;;;;;N;;;;;
+1F6C0;BATH;So;0;ON;;;;;N;;;;;
+1F6C1;BATHTUB;So;0;ON;;;;;N;;;;;
+1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;;
+1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;;
+1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;;
+1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;;
+1F6C6;TRIANGLE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+1F6C7;PROHIBITED SIGN;So;0;ON;;;;;N;;;;;
+1F6C8;CIRCLED INFORMATION SOURCE;So;0;ON;;;;;N;;;;;
+1F6C9;BOYS SYMBOL;So;0;ON;;;;;N;;;;;
+1F6CA;GIRLS SYMBOL;So;0;ON;;;;;N;;;;;
+1F6CB;COUCH AND LAMP;So;0;ON;;;;;N;;;;;
+1F6CC;SLEEPING ACCOMMODATION;So;0;ON;;;;;N;;;;;
+1F6CD;SHOPPING BAGS;So;0;ON;;;;;N;;;;;
+1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;;
+1F6CF;BED;So;0;ON;;;;;N;;;;;
+1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;;
+1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;;
+1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;;
+1F6D3;STUPA;So;0;ON;;;;;N;;;;;
+1F6D4;PAGODA;So;0;ON;;;;;N;;;;;
+1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
+1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
+1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
+1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
+1F6E3;MOTORWAY;So;0;ON;;;;;N;;;;;
+1F6E4;RAILWAY TRACK;So;0;ON;;;;;N;;;;;
+1F6E5;MOTOR BOAT;So;0;ON;;;;;N;;;;;
+1F6E6;UP-POINTING MILITARY AIRPLANE;So;0;ON;;;;;N;;;;;
+1F6E7;UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;
+1F6E8;UP-POINTING SMALL AIRPLANE;So;0;ON;;;;;N;;;;;
+1F6E9;SMALL AIRPLANE;So;0;ON;;;;;N;;;;;
+1F6EA;NORTHEAST-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;
+1F6EB;AIRPLANE DEPARTURE;So;0;ON;;;;;N;;;;;
+1F6EC;AIRPLANE ARRIVING;So;0;ON;;;;;N;;;;;
+1F6F0;SATELLITE;So;0;ON;;;;;N;;;;;
+1F6F1;ONCOMING FIRE ENGINE;So;0;ON;;;;;N;;;;;
+1F6F2;DIESEL LOCOMOTIVE;So;0;ON;;;;;N;;;;;
+1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;;
+1F6F4;SCOOTER;So;0;ON;;;;;N;;;;;
+1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;;
+1F6F6;CANOE;So;0;ON;;;;;N;;;;;
+1F6F7;SLED;So;0;ON;;;;;N;;;;;
+1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
+1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;
+1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;;
+1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
+1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
+1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
+1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;;
+1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;;
+1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;;
+1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;;
+1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;;
+1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;;
+1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;;
+1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;;
+1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;;
+1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;;
+1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;;
+1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;;
+1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;;
+1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;;
+1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;;
+1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;;
+1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;;
+1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;;
+1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;;
+1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;;
+1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;;
+1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;;
+1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;;
+1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;;
+1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;;
+1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;;
+1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;;
+1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;;
+1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;;
+1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;;
+1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;;
+1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;;
+1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;;
+1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;;
+1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;;
+1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;;
+1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;;
+1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;;
+1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;;
+1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;;
+1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;;
+1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;;
+1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;;
+1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;;
+1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;;
+1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;;
+1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;;
+1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;;
+1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;;
+1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;;
+1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;;
+1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;;
+1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;;
+1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;;
+1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;;
+1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;;
+1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;;
+1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;;
+1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;;
+1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;;
+1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;;
+1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;;
+1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;;
+1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;;
+1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;;
+1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;;
+1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;;
+1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;;
+1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;;
+1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;;
+1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;;
+1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;;
+1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;;
+1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;;
+1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;;
+1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;;
+1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;;
+1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;;
+1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;;
+1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;;
+1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;;
+1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;;
+1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;;
+1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;;
+1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;;
+1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;;
+1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;;
+1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;;
+1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;;
+1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;;
+1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;;
+1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;;
+1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;;
+1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;;
+1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;;
+1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;;
+1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;;
+1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;;
+1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;;
+1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;;
+1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;;
+1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;;
+1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;;
+1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;;
+1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;;
+1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;;
+1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;;
+1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;;
+1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+1F783;BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+1F784;BLACK SLIGHTLY SMALL CIRCLE;So;0;ON;;;;;N;;;;;
+1F785;MEDIUM BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F786;BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F787;HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F788;VERY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F789;EXTREMELY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+1F78A;WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE;So;0;ON;;;;;N;;;;;
+1F78B;ROUND TARGET;So;0;ON;;;;;N;;;;;
+1F78C;BLACK TINY SQUARE;So;0;ON;;;;;N;;;;;
+1F78D;BLACK SLIGHTLY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+1F78E;LIGHT WHITE SQUARE;So;0;ON;;;;;N;;;;;
+1F78F;MEDIUM WHITE SQUARE;So;0;ON;;;;;N;;;;;
+1F790;BOLD WHITE SQUARE;So;0;ON;;;;;N;;;;;
+1F791;HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;
+1F792;VERY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;
+1F793;EXTREMELY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;
+1F794;WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+1F795;WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE;So;0;ON;;;;;N;;;;;
+1F796;SQUARE TARGET;So;0;ON;;;;;N;;;;;
+1F797;BLACK TINY DIAMOND;So;0;ON;;;;;N;;;;;
+1F798;BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+1F799;BLACK MEDIUM SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+1F79A;WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+1F79B;WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+1F79C;DIAMOND TARGET;So;0;ON;;;;;N;;;;;
+1F79D;BLACK TINY LOZENGE;So;0;ON;;;;;N;;;;;
+1F79E;BLACK VERY SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+1F79F;BLACK MEDIUM SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+1F7A0;WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+1F7A1;THIN GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A2;LIGHT GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A3;MEDIUM GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A4;BOLD GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A5;VERY BOLD GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A6;VERY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A7;EXTREMELY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+1F7A8;THIN SALTIRE;So;0;ON;;;;;N;;;;;
+1F7A9;LIGHT SALTIRE;So;0;ON;;;;;N;;;;;
+1F7AA;MEDIUM SALTIRE;So;0;ON;;;;;N;;;;;
+1F7AB;BOLD SALTIRE;So;0;ON;;;;;N;;;;;
+1F7AC;HEAVY SALTIRE;So;0;ON;;;;;N;;;;;
+1F7AD;VERY HEAVY SALTIRE;So;0;ON;;;;;N;;;;;
+1F7AE;EXTREMELY HEAVY SALTIRE;So;0;ON;;;;;N;;;;;
+1F7AF;LIGHT FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B0;MEDIUM FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B1;BOLD FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B2;HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B3;VERY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B4;EXTREMELY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B5;LIGHT SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B6;MEDIUM SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B7;BOLD SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B8;HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7B9;VERY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7BA;EXTREMELY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7BB;LIGHT EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7BC;MEDIUM EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7BD;BOLD EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7BE;HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7BF;VERY HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+1F7C0;LIGHT THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7C1;MEDIUM THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7C2;THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7C3;MEDIUM THREE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7C4;LIGHT FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7C5;MEDIUM FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7C6;FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7C7;MEDIUM FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7C8;REVERSE LIGHT FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7C9;LIGHT FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7CA;HEAVY FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7CB;MEDIUM SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7CC;HEAVY SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7CD;SIX POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7CE;MEDIUM EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7CF;HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7D0;VERY HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7D1;HEAVY EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7D5;CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
+1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
+1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;;
+1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;;
+1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;;
+1F7E3;LARGE PURPLE CIRCLE;So;0;ON;;;;;N;;;;;
+1F7E4;LARGE BROWN CIRCLE;So;0;ON;;;;;N;;;;;
+1F7E5;LARGE RED SQUARE;So;0;ON;;;;;N;;;;;
+1F7E6;LARGE BLUE SQUARE;So;0;ON;;;;;N;;;;;
+1F7E7;LARGE ORANGE SQUARE;So;0;ON;;;;;N;;;;;
+1F7E8;LARGE YELLOW SQUARE;So;0;ON;;;;;N;;;;;
+1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;;
+1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;;
+1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;;
+1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F803;DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F804;LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F805;UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F806;RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F807;DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F808;LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F809;UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F80A;RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F80B;DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F810;LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F811;UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F812;RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F813;DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F814;LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F815;UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F816;RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F817;DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F818;HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F819;HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F81A;HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F81B;HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F81C;HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F81D;HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F81E;HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F81F;HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F820;LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;
+1F821;UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;
+1F822;RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;
+1F823;DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;
+1F824;LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;
+1F825;UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;
+1F826;RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;
+1F827;DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;
+1F828;LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;
+1F829;UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;
+1F82A;RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;
+1F82B;DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;
+1F82C;LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F82D;UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F82E;RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F82F;DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F830;LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F831;UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F832;RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F833;DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;
+1F834;LEFTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;
+1F835;UPWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;
+1F836;RIGHTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;
+1F837;DOWNWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;
+1F838;LEFTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;
+1F839;UPWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;
+1F83A;RIGHTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;
+1F83B;DOWNWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;
+1F83C;LEFTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F83D;UPWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F83E;RIGHTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F83F;DOWNWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F840;LEFTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F841;UPWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F842;RIGHTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F843;DOWNWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;
+1F844;LEFTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;
+1F845;UPWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;
+1F846;RIGHTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;
+1F847;DOWNWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;
+1F850;LEFTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F851;UPWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F852;RIGHTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F853;DOWNWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F854;NORTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F855;NORTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F856;SOUTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F857;SOUTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F858;LEFT RIGHT SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F859;UP DOWN SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;
+1F860;WIDE-HEADED LEFTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F861;WIDE-HEADED UPWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F862;WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F863;WIDE-HEADED DOWNWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F864;WIDE-HEADED NORTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F865;WIDE-HEADED NORTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F866;WIDE-HEADED SOUTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F867;WIDE-HEADED SOUTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;
+1F868;WIDE-HEADED LEFTWARDS BARB ARROW;So;0;ON;;;;;N;;;;;
+1F869;WIDE-HEADED UPWARDS BARB ARROW;So;0;ON;;;;;N;;;;;
+1F86A;WIDE-HEADED RIGHTWARDS BARB ARROW;So;0;ON;;;;;N;;;;;
+1F86B;WIDE-HEADED DOWNWARDS BARB ARROW;So;0;ON;;;;;N;;;;;
+1F86C;WIDE-HEADED NORTH WEST BARB ARROW;So;0;ON;;;;;N;;;;;
+1F86D;WIDE-HEADED NORTH EAST BARB ARROW;So;0;ON;;;;;N;;;;;
+1F86E;WIDE-HEADED SOUTH EAST BARB ARROW;So;0;ON;;;;;N;;;;;
+1F86F;WIDE-HEADED SOUTH WEST BARB ARROW;So;0;ON;;;;;N;;;;;
+1F870;WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F871;WIDE-HEADED UPWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F872;WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F873;WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F874;WIDE-HEADED NORTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F875;WIDE-HEADED NORTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F876;WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F877;WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;
+1F878;WIDE-HEADED LEFTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F879;WIDE-HEADED UPWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F87A;WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F87B;WIDE-HEADED DOWNWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F87C;WIDE-HEADED NORTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F87D;WIDE-HEADED NORTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F87E;WIDE-HEADED SOUTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F87F;WIDE-HEADED SOUTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F880;WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F881;WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F882;WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F883;WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F884;WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F885;WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F886;WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F887;WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;
+1F890;LEFTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F891;UPWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F892;RIGHTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F893;DOWNWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F894;LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F895;UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F896;RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F897;DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
+1F898;LEFTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;
+1F899;UPWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;
+1F89A;RIGHTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;
+1F89B;DOWNWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;
+1F89C;HEAVY ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;
+1F89D;HEAVY ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;
+1F89E;HEAVY ARROW SHAFT WIDTH ONE HALF;So;0;ON;;;;;N;;;;;
+1F89F;HEAVY ARROW SHAFT WIDTH ONE THIRD;So;0;ON;;;;;N;;;;;
+1F8A0;LEFTWARDS BOTTOM-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A1;RIGHTWARDS BOTTOM SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A2;LEFTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A3;RIGHTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A4;LEFTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A5;RIGHTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A6;LEFTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A7;RIGHTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A8;LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8A9;RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8AA;LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
+1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;
+1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;
+1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;
+1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;;
+1F903;LEFT HALF CIRCLE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;
+1F904;LEFT HALF CIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;
+1F905;LEFT HALF CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+1F906;LEFT HALF CIRCLE WITH DOT;So;0;ON;;;;;N;;;;;
+1F907;LEFT HALF CIRCLE;So;0;ON;;;;;N;;;;;
+1F908;DOWNWARD FACING HOOK;So;0;ON;;;;;N;;;;;
+1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;;
+1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;;
+1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;;
+1F90D;WHITE HEART;So;0;ON;;;;;N;;;;;
+1F90E;BROWN HEART;So;0;ON;;;;;N;;;;;
+1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;;
+1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;;
+1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;;
+1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;;
+1F913;NERD FACE;So;0;ON;;;;;N;;;;;
+1F914;THINKING FACE;So;0;ON;;;;;N;;;;;
+1F915;FACE WITH HEAD-BANDAGE;So;0;ON;;;;;N;;;;;
+1F916;ROBOT FACE;So;0;ON;;;;;N;;;;;
+1F917;HUGGING FACE;So;0;ON;;;;;N;;;;;
+1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;;
+1F919;CALL ME HAND;So;0;ON;;;;;N;;;;;
+1F91A;RAISED BACK OF HAND;So;0;ON;;;;;N;;;;;
+1F91B;LEFT-FACING FIST;So;0;ON;;;;;N;;;;;
+1F91C;RIGHT-FACING FIST;So;0;ON;;;;;N;;;;;
+1F91D;HANDSHAKE;So;0;ON;;;;;N;;;;;
+1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;;
+1F91F;I LOVE YOU HAND SIGN;So;0;ON;;;;;N;;;;;
+1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;;
+1F921;CLOWN FACE;So;0;ON;;;;;N;;;;;
+1F922;NAUSEATED FACE;So;0;ON;;;;;N;;;;;
+1F923;ROLLING ON THE FLOOR LAUGHING;So;0;ON;;;;;N;;;;;
+1F924;DROOLING FACE;So;0;ON;;;;;N;;;;;
+1F925;LYING FACE;So;0;ON;;;;;N;;;;;
+1F926;FACE PALM;So;0;ON;;;;;N;;;;;
+1F927;SNEEZING FACE;So;0;ON;;;;;N;;;;;
+1F928;FACE WITH ONE EYEBROW RAISED;So;0;ON;;;;;N;;;;;
+1F929;GRINNING FACE WITH STAR EYES;So;0;ON;;;;;N;;;;;
+1F92A;GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE;So;0;ON;;;;;N;;;;;
+1F92B;FACE WITH FINGER COVERING CLOSED LIPS;So;0;ON;;;;;N;;;;;
+1F92C;SERIOUS FACE WITH SYMBOLS COVERING MOUTH;So;0;ON;;;;;N;;;;;
+1F92D;SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH;So;0;ON;;;;;N;;;;;
+1F92E;FACE WITH OPEN MOUTH VOMITING;So;0;ON;;;;;N;;;;;
+1F92F;SHOCKED FACE WITH EXPLODING HEAD;So;0;ON;;;;;N;;;;;
+1F930;PREGNANT WOMAN;So;0;ON;;;;;N;;;;;
+1F931;BREAST-FEEDING;So;0;ON;;;;;N;;;;;
+1F932;PALMS UP TOGETHER;So;0;ON;;;;;N;;;;;
+1F933;SELFIE;So;0;ON;;;;;N;;;;;
+1F934;PRINCE;So;0;ON;;;;;N;;;;;
+1F935;MAN IN TUXEDO;So;0;ON;;;;;N;;;;;
+1F936;MOTHER CHRISTMAS;So;0;ON;;;;;N;;;;;
+1F937;SHRUG;So;0;ON;;;;;N;;;;;
+1F938;PERSON DOING CARTWHEEL;So;0;ON;;;;;N;;;;;
+1F939;JUGGLING;So;0;ON;;;;;N;;;;;
+1F93A;FENCER;So;0;ON;;;;;N;;;;;
+1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;;
+1F93C;WRESTLERS;So;0;ON;;;;;N;;;;;
+1F93D;WATER POLO;So;0;ON;;;;;N;;;;;
+1F93E;HANDBALL;So;0;ON;;;;;N;;;;;
+1F93F;DIVING MASK;So;0;ON;;;;;N;;;;;
+1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;;
+1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;;
+1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;;
+1F943;TUMBLER GLASS;So;0;ON;;;;;N;;;;;
+1F944;SPOON;So;0;ON;;;;;N;;;;;
+1F945;GOAL NET;So;0;ON;;;;;N;;;;;
+1F946;RIFLE;So;0;ON;;;;;N;;;;;
+1F947;FIRST PLACE MEDAL;So;0;ON;;;;;N;;;;;
+1F948;SECOND PLACE MEDAL;So;0;ON;;;;;N;;;;;
+1F949;THIRD PLACE MEDAL;So;0;ON;;;;;N;;;;;
+1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;;
+1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;;
+1F94C;CURLING STONE;So;0;ON;;;;;N;;;;;
+1F94D;LACROSSE STICK AND BALL;So;0;ON;;;;;N;;;;;
+1F94E;SOFTBALL;So;0;ON;;;;;N;;;;;
+1F94F;FLYING DISC;So;0;ON;;;;;N;;;;;
+1F950;CROISSANT;So;0;ON;;;;;N;;;;;
+1F951;AVOCADO;So;0;ON;;;;;N;;;;;
+1F952;CUCUMBER;So;0;ON;;;;;N;;;;;
+1F953;BACON;So;0;ON;;;;;N;;;;;
+1F954;POTATO;So;0;ON;;;;;N;;;;;
+1F955;CARROT;So;0;ON;;;;;N;;;;;
+1F956;BAGUETTE BREAD;So;0;ON;;;;;N;;;;;
+1F957;GREEN SALAD;So;0;ON;;;;;N;;;;;
+1F958;SHALLOW PAN OF FOOD;So;0;ON;;;;;N;;;;;
+1F959;STUFFED FLATBREAD;So;0;ON;;;;;N;;;;;
+1F95A;EGG;So;0;ON;;;;;N;;;;;
+1F95B;GLASS OF MILK;So;0;ON;;;;;N;;;;;
+1F95C;PEANUTS;So;0;ON;;;;;N;;;;;
+1F95D;KIWIFRUIT;So;0;ON;;;;;N;;;;;
+1F95E;PANCAKES;So;0;ON;;;;;N;;;;;
+1F95F;DUMPLING;So;0;ON;;;;;N;;;;;
+1F960;FORTUNE COOKIE;So;0;ON;;;;;N;;;;;
+1F961;TAKEOUT BOX;So;0;ON;;;;;N;;;;;
+1F962;CHOPSTICKS;So;0;ON;;;;;N;;;;;
+1F963;BOWL WITH SPOON;So;0;ON;;;;;N;;;;;
+1F964;CUP WITH STRAW;So;0;ON;;;;;N;;;;;
+1F965;COCONUT;So;0;ON;;;;;N;;;;;
+1F966;BROCCOLI;So;0;ON;;;;;N;;;;;
+1F967;PIE;So;0;ON;;;;;N;;;;;
+1F968;PRETZEL;So;0;ON;;;;;N;;;;;
+1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;;
+1F96A;SANDWICH;So;0;ON;;;;;N;;;;;
+1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;;
+1F96C;LEAFY GREEN;So;0;ON;;;;;N;;;;;
+1F96D;MANGO;So;0;ON;;;;;N;;;;;
+1F96E;MOON CAKE;So;0;ON;;;;;N;;;;;
+1F96F;BAGEL;So;0;ON;;;;;N;;;;;
+1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;;
+1F971;YAWNING FACE;So;0;ON;;;;;N;;;;;
+1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;
+1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;
+1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;;
+1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
+1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
+1F97B;SARI;So;0;ON;;;;;N;;;;;
+1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
+1F97D;GOGGLES;So;0;ON;;;;;N;;;;;
+1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;;
+1F97F;FLAT SHOE;So;0;ON;;;;;N;;;;;
+1F980;CRAB;So;0;ON;;;;;N;;;;;
+1F981;LION FACE;So;0;ON;;;;;N;;;;;
+1F982;SCORPION;So;0;ON;;;;;N;;;;;
+1F983;TURKEY;So;0;ON;;;;;N;;;;;
+1F984;UNICORN FACE;So;0;ON;;;;;N;;;;;
+1F985;EAGLE;So;0;ON;;;;;N;;;;;
+1F986;DUCK;So;0;ON;;;;;N;;;;;
+1F987;BAT;So;0;ON;;;;;N;;;;;
+1F988;SHARK;So;0;ON;;;;;N;;;;;
+1F989;OWL;So;0;ON;;;;;N;;;;;
+1F98A;FOX FACE;So;0;ON;;;;;N;;;;;
+1F98B;BUTTERFLY;So;0;ON;;;;;N;;;;;
+1F98C;DEER;So;0;ON;;;;;N;;;;;
+1F98D;GORILLA;So;0;ON;;;;;N;;;;;
+1F98E;LIZARD;So;0;ON;;;;;N;;;;;
+1F98F;RHINOCEROS;So;0;ON;;;;;N;;;;;
+1F990;SHRIMP;So;0;ON;;;;;N;;;;;
+1F991;SQUID;So;0;ON;;;;;N;;;;;
+1F992;GIRAFFE FACE;So;0;ON;;;;;N;;;;;
+1F993;ZEBRA FACE;So;0;ON;;;;;N;;;;;
+1F994;HEDGEHOG;So;0;ON;;;;;N;;;;;
+1F995;SAUROPOD;So;0;ON;;;;;N;;;;;
+1F996;T-REX;So;0;ON;;;;;N;;;;;
+1F997;CRICKET;So;0;ON;;;;;N;;;;;
+1F998;KANGAROO;So;0;ON;;;;;N;;;;;
+1F999;LLAMA;So;0;ON;;;;;N;;;;;
+1F99A;PEACOCK;So;0;ON;;;;;N;;;;;
+1F99B;HIPPOPOTAMUS;So;0;ON;;;;;N;;;;;
+1F99C;PARROT;So;0;ON;;;;;N;;;;;
+1F99D;RACCOON;So;0;ON;;;;;N;;;;;
+1F99E;LOBSTER;So;0;ON;;;;;N;;;;;
+1F99F;MOSQUITO;So;0;ON;;;;;N;;;;;
+1F9A0;MICROBE;So;0;ON;;;;;N;;;;;
+1F9A1;BADGER;So;0;ON;;;;;N;;;;;
+1F9A2;SWAN;So;0;ON;;;;;N;;;;;
+1F9A5;SLOTH;So;0;ON;;;;;N;;;;;
+1F9A6;OTTER;So;0;ON;;;;;N;;;;;
+1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;;
+1F9A8;SKUNK;So;0;ON;;;;;N;;;;;
+1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;;
+1F9AA;OYSTER;So;0;ON;;;;;N;;;;;
+1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;;
+1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;;
+1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;;
+1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;;
+1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;;
+1F9B3;EMOJI COMPONENT WHITE HAIR;So;0;ON;;;;;N;;;;;
+1F9B4;BONE;So;0;ON;;;;;N;;;;;
+1F9B5;LEG;So;0;ON;;;;;N;;;;;
+1F9B6;FOOT;So;0;ON;;;;;N;;;;;
+1F9B7;TOOTH;So;0;ON;;;;;N;;;;;
+1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;;
+1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;;
+1F9BA;SAFETY VEST;So;0;ON;;;;;N;;;;;
+1F9BB;EAR WITH HEARING AID;So;0;ON;;;;;N;;;;;
+1F9BC;MOTORIZED WHEELCHAIR;So;0;ON;;;;;N;;;;;
+1F9BD;MANUAL WHEELCHAIR;So;0;ON;;;;;N;;;;;
+1F9BE;MECHANICAL ARM;So;0;ON;;;;;N;;;;;
+1F9BF;MECHANICAL LEG;So;0;ON;;;;;N;;;;;
+1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;;
+1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;;
+1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;;
+1F9C3;BEVERAGE BOX;So;0;ON;;;;;N;;;;;
+1F9C4;GARLIC;So;0;ON;;;;;N;;;;;
+1F9C5;ONION;So;0;ON;;;;;N;;;;;
+1F9C6;FALAFEL;So;0;ON;;;;;N;;;;;
+1F9C7;WAFFLE;So;0;ON;;;;;N;;;;;
+1F9C8;BUTTER;So;0;ON;;;;;N;;;;;
+1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;
+1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
+1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
+1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
+1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
+1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;;
+1F9D1;ADULT;So;0;ON;;;;;N;;;;;
+1F9D2;CHILD;So;0;ON;;;;;N;;;;;
+1F9D3;OLDER ADULT;So;0;ON;;;;;N;;;;;
+1F9D4;BEARDED PERSON;So;0;ON;;;;;N;;;;;
+1F9D5;PERSON WITH HEADSCARF;So;0;ON;;;;;N;;;;;
+1F9D6;PERSON IN STEAMY ROOM;So;0;ON;;;;;N;;;;;
+1F9D7;PERSON CLIMBING;So;0;ON;;;;;N;;;;;
+1F9D8;PERSON IN LOTUS POSITION;So;0;ON;;;;;N;;;;;
+1F9D9;MAGE;So;0;ON;;;;;N;;;;;
+1F9DA;FAIRY;So;0;ON;;;;;N;;;;;
+1F9DB;VAMPIRE;So;0;ON;;;;;N;;;;;
+1F9DC;MERPERSON;So;0;ON;;;;;N;;;;;
+1F9DD;ELF;So;0;ON;;;;;N;;;;;
+1F9DE;GENIE;So;0;ON;;;;;N;;;;;
+1F9DF;ZOMBIE;So;0;ON;;;;;N;;;;;
+1F9E0;BRAIN;So;0;ON;;;;;N;;;;;
+1F9E1;ORANGE HEART;So;0;ON;;;;;N;;;;;
+1F9E2;BILLED CAP;So;0;ON;;;;;N;;;;;
+1F9E3;SCARF;So;0;ON;;;;;N;;;;;
+1F9E4;GLOVES;So;0;ON;;;;;N;;;;;
+1F9E5;COAT;So;0;ON;;;;;N;;;;;
+1F9E6;SOCKS;So;0;ON;;;;;N;;;;;
+1F9E7;RED GIFT ENVELOPE;So;0;ON;;;;;N;;;;;
+1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;;
+1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;;
+1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;;
+1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;;
+1F9EC;DNA DOUBLE HELIX;So;0;ON;;;;;N;;;;;
+1F9ED;COMPASS;So;0;ON;;;;;N;;;;;
+1F9EE;ABACUS;So;0;ON;;;;;N;;;;;
+1F9EF;FIRE EXTINGUISHER;So;0;ON;;;;;N;;;;;
+1F9F0;TOOLBOX;So;0;ON;;;;;N;;;;;
+1F9F1;BRICK;So;0;ON;;;;;N;;;;;
+1F9F2;MAGNET;So;0;ON;;;;;N;;;;;
+1F9F3;LUGGAGE;So;0;ON;;;;;N;;;;;
+1F9F4;LOTION BOTTLE;So;0;ON;;;;;N;;;;;
+1F9F5;SPOOL OF THREAD;So;0;ON;;;;;N;;;;;
+1F9F6;BALL OF YARN;So;0;ON;;;;;N;;;;;
+1F9F7;SAFETY PIN;So;0;ON;;;;;N;;;;;
+1F9F8;TEDDY BEAR;So;0;ON;;;;;N;;;;;
+1F9F9;BROOM;So;0;ON;;;;;N;;;;;
+1F9FA;BASKET;So;0;ON;;;;;N;;;;;
+1F9FB;ROLL OF PAPER;So;0;ON;;;;;N;;;;;
+1F9FC;BAR OF SOAP;So;0;ON;;;;;N;;;;;
+1F9FD;SPONGE;So;0;ON;;;;;N;;;;;
+1F9FE;RECEIPT;So;0;ON;;;;;N;;;;;
+1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;;
+1FA00;NEUTRAL CHESS KING;So;0;ON;;;;;N;;;;;
+1FA01;NEUTRAL CHESS QUEEN;So;0;ON;;;;;N;;;;;
+1FA02;NEUTRAL CHESS ROOK;So;0;ON;;;;;N;;;;;
+1FA03;NEUTRAL CHESS BISHOP;So;0;ON;;;;;N;;;;;
+1FA04;NEUTRAL CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+1FA05;NEUTRAL CHESS PAWN;So;0;ON;;;;;N;;;;;
+1FA06;WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA07;BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA08;NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA09;WHITE CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA0A;WHITE CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA0B;WHITE CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA0C;WHITE CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA0D;WHITE CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA0E;WHITE CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA0F;BLACK CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA10;BLACK CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA11;BLACK CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA12;BLACK CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA13;BLACK CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA14;BLACK CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA15;NEUTRAL CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA16;NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA17;NEUTRAL CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA18;NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA19;NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA1A;NEUTRAL CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA1B;WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA1C;BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA1D;NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA1E;WHITE CHESS TURNED KING;So;0;ON;;;;;N;;;;;
+1FA1F;WHITE CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;;
+1FA20;WHITE CHESS TURNED ROOK;So;0;ON;;;;;N;;;;;
+1FA21;WHITE CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;;
+1FA22;WHITE CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;;
+1FA23;WHITE CHESS TURNED PAWN;So;0;ON;;;;;N;;;;;
+1FA24;BLACK CHESS TURNED KING;So;0;ON;;;;;N;;;;;
+1FA25;BLACK CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;;
+1FA26;BLACK CHESS TURNED ROOK;So;0;ON;;;;;N;;;;;
+1FA27;BLACK CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;;
+1FA28;BLACK CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;;
+1FA29;BLACK CHESS TURNED PAWN;So;0;ON;;;;;N;;;;;
+1FA2A;NEUTRAL CHESS TURNED KING;So;0;ON;;;;;N;;;;;
+1FA2B;NEUTRAL CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;;
+1FA2C;NEUTRAL CHESS TURNED ROOK;So;0;ON;;;;;N;;;;;
+1FA2D;NEUTRAL CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;;
+1FA2E;NEUTRAL CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;;
+1FA2F;NEUTRAL CHESS TURNED PAWN;So;0;ON;;;;;N;;;;;
+1FA30;WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA31;BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA32;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;
+1FA33;WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA34;WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA35;WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA36;WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA37;WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA38;WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA39;BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA3A;BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA3B;BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA3C;BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA3D;BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA3E;BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA3F;NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA40;NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA41;NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA42;NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA43;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA44;NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;
+1FA45;WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;;
+1FA46;BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;;
+1FA47;NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;;
+1FA48;WHITE CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;;
+1FA49;BLACK CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;;
+1FA4A;NEUTRAL CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;;
+1FA4B;WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA4C;BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA4D;NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;
+1FA4E;WHITE CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;;
+1FA4F;WHITE CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;;
+1FA50;WHITE CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;;
+1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;;
+1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;;
+1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;;
+1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;;
+1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;;
+1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;;
+1FA63;XIANGQI RED HORSE;So;0;ON;;;;;N;;;;;
+1FA64;XIANGQI RED CHARIOT;So;0;ON;;;;;N;;;;;
+1FA65;XIANGQI RED CANNON;So;0;ON;;;;;N;;;;;
+1FA66;XIANGQI RED SOLDIER;So;0;ON;;;;;N;;;;;
+1FA67;XIANGQI BLACK GENERAL;So;0;ON;;;;;N;;;;;
+1FA68;XIANGQI BLACK MANDARIN;So;0;ON;;;;;N;;;;;
+1FA69;XIANGQI BLACK ELEPHANT;So;0;ON;;;;;N;;;;;
+1FA6A;XIANGQI BLACK HORSE;So;0;ON;;;;;N;;;;;
+1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;;
+1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;;
+1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;;
+1FA70;BALLET SHOES;So;0;ON;;;;;N;;;;;
+1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;;
+1FA72;BRIEFS;So;0;ON;;;;;N;;;;;
+1FA73;SHORTS;So;0;ON;;;;;N;;;;;
+1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
+1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
+1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
+1FA80;YO-YO;So;0;ON;;;;;N;;;;;
+1FA81;KITE;So;0;ON;;;;;N;;;;;
+1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
+1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;;
+1FA91;CHAIR;So;0;ON;;;;;N;;;;;
+1FA92;RAZOR;So;0;ON;;;;;N;;;;;
+1FA93;AXE;So;0;ON;;;;;N;;;;;
+1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;;
+1FA95;BANJO;So;0;ON;;;;;N;;;;;
+20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
+2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
+2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
+2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
+2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
+2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
+2CEA1;<CJK Ideograph Extension E, Last>;Lo;0;L;;;;;N;;;;;
+2CEB0;<CJK Ideograph Extension F, First>;Lo;0;L;;;;;N;;;;;
+2EBE0;<CJK Ideograph Extension F, Last>;Lo;0;L;;;;;N;;;;;
+2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
+2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
+2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
+2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;
+2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;
+2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;
+2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;
+2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;
+2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;
+2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;
+2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;
+2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;
+2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;
+2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;
+2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;
+2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;
+2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;
+2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;
+2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;
+2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;
+2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;
+2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;
+2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;
+2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;
+2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;
+2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;
+2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;
+2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;
+2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;
+2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;
+2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;
+2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;
+2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;
+2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;
+2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;
+2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;
+2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;
+2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;
+2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;
+2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;
+2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;
+2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;
+2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;
+2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;
+2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;
+2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;
+2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;
+2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;
+2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;
+2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;
+2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;
+2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;
+2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;
+2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;
+2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;
+2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;
+2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;
+2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;
+2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;
+2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;
+2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;
+2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;
+2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;
+2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;
+2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;
+2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;
+2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;
+2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;
+2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;
+2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;
+2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;
+2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;
+2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;
+2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;
+2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;
+2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;
+2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;
+2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;
+2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;
+2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;
+2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;
+2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;
+2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;
+2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;
+2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;
+2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;
+2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;
+2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;
+2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;
+2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;
+2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;
+2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;
+2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;
+2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;
+2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;
+2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;
+2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;
+2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;
+2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;
+2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;
+2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;
+2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;
+2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;
+2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;
+2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;
+2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;
+2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;
+2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;
+2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;
+2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;
+2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;
+2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;
+2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;
+2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;
+2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;
+2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;
+2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;
+2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;
+2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;
+2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;
+2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;
+2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;
+2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;
+2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;
+2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;
+2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;
+2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;
+2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;
+2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;
+2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;
+2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;
+2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;
+2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;
+2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;
+2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;
+2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;
+2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;
+2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;
+2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;
+2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;
+2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;
+2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
+2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
+2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
+2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;;
+2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
+2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
+2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
+2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;
+2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;
+2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;
+2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;
+2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;
+2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;
+2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;
+2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;
+2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;
+2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;
+2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;
+2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;
+2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;
+2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;
+2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;
+2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;
+2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;
+2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;
+2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;
+2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;
+2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;
+2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;
+2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;
+2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;
+2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;
+2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;
+2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;
+2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;
+2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;
+2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;
+2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;
+2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;
+2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;
+2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;
+2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;
+2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;
+2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;
+2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;
+2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;
+2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;
+2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;
+2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;
+2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;
+2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;
+2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;
+2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;
+2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;
+2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;
+2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;
+2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;
+2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;
+2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;
+2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;
+2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;
+2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;
+2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;
+2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;
+2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;
+2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;
+2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;
+2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;
+2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;
+2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;
+2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;
+2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;
+2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;
+2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;
+2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;
+2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;
+2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;
+2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;
+2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;
+2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;
+2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;
+2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;
+2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;
+2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;
+2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;
+2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;
+2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;
+2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;
+2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;
+2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;
+2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;
+2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;
+2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;
+2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;
+2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;
+2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;
+2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;
+2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;
+2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;
+2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;
+2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;
+2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;
+2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;
+2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;
+2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;
+2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;
+2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;
+2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;
+2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;
+2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;
+2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;
+2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;
+2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;
+2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;
+2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;
+2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;
+2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;
+2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;
+2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;
+2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;
+2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;
+2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;
+2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;
+2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;
+2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;
+2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;
+2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;
+2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;
+2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;
+2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;
+2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;
+2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;
+2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;
+2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;
+2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;
+2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;
+2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;
+2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;
+2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;
+2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;
+2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;
+2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;
+2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;
+2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;
+2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;
+2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;
+2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;
+2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;
+2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;
+2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;
+2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;
+2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;
+2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;
+2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;
+2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;
+2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;
+2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;
+2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;
+2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;
+2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;
+2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;
+2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;
+2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;
+2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;
+2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;
+2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;
+2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;
+2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;
+2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;
+2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;
+2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;
+2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;
+2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;
+2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;
+2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;
+2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;
+2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;
+2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;
+2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;
+2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;
+2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;
+2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;
+2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;
+2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;
+2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;
+2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;
+2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;
+2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;
+2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;
+2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;
+2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;
+2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;
+2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;
+2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;
+2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;
+2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;
+2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;
+2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;
+2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;
+2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;
+2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;
+2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;
+2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;
+2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;
+2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;
+2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;
+2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;
+2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;
+2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;
+2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;
+2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;
+2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;
+2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;
+2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;
+2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;
+2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;
+2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;
+2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;
+2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;
+2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;
+2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;
+2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;
+2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;
+2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;
+2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;
+2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;
+2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;
+2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;
+2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;
+2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;
+2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;
+2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;
+2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;
+2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;
+2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;
+2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;
+2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;
+2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;
+2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;
+2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;
+2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;
+2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;
+2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;
+2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;
+2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;
+2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;
+2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;
+2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;
+2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;
+2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;
+2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;
+2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;
+2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;
+2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;
+2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;
+2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;
+2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;
+2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;
+2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;
+2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;
+2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;
+2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;
+2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;
+2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;
+2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;
+2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;
+2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;
+2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;
+2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;
+2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;
+2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;
+2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;
+2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;
+2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;
+2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;
+2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;
+2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;
+2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;
+2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;
+2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;
+2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;
+2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;
+2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;
+2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;
+2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;
+2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;
+2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;
+2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;
+2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;
+2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;
+2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;
+2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;
+2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;
+2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;
+2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;
+2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;
+2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;
+2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;
+2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;
+2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;
+2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;
+2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;
+2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;
+2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;
+2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;
+2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;
+2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;
+2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;
+2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;
+2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;
+2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;
+2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;
+2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;
+2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;
+2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;
+2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;
+2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;
+2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;
+2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;
+2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;
+2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;
+2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;
+2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;
+2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;
+2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;
+2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;
+2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;
+2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;
+2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;
+2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;
+2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;
+2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;
+2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;
+2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;
+2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;
+2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;
+2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;
+2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;
+2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;
+2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;
+2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;
+2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;
+2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;
+2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;
+2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;
+2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;
+2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;
+2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;
+2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;
+2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;
+2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;
+2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;
+2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;
+2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;
+2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;
+2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;
+2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;
+2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;
+2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;
+2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;
+2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;
+2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;
+2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;
+2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;
+2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;
+2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;
+2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;
+2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;
+2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;
+2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;
+2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;
+2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;
+2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;
+2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;
+2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;
+2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;
+2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;
+2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;
+2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;
+2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;
+2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;
+2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;
+2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;
+2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;
+2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;
+2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;
+2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;
+2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;
+2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;
+2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;
+2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;
+2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;
+2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;
+2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;
+2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;
+2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;
+2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;
+2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;
+2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
+2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
+2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
+E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
+E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
+E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;
+E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;
+E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;
+E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;
+E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;
+E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;
+E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;
+E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;
+E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;
+E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;
+E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;
+E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;
+E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;
+E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;
+E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;
+E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;
+E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;
+E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;
+E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;
+E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;
+E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;
+E003A;TAG COLON;Cf;0;BN;;;;;N;;;;;
+E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;
+E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;
+E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;
+E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;
+E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;
+E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;
+E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;
+E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;
+E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;
+E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;
+E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;
+E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;
+E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;
+E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;
+E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;
+E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;
+E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;
+E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;
+E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;
+E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;
+E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;
+E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;
+E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;
+E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;
+E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;
+E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;
+E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;
+E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;
+E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;
+E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;
+E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;
+E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;
+E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;
+E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;
+E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;
+E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;
+E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;
+E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;
+E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;
+E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;
+E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;
+E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;
+E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;
+E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;
+E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;
+E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;
+E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;
+E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;
+E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;
+E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;
+E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;
+E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;
+E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;
+E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;
+E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;
+E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;
+E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;
+E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;
+E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;
+E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;
+E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;
+E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;
+E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;
+E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;
+E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;
+E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;
+E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;
+E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;
+E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;
+E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;
+E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;
+E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;
+E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;
+E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;
+E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;
+E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;
+E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;
+E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;
+E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;
+E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;
+E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;
+E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;
+E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;
+E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;
+E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;
+E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;
+E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;
+E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;
+E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;
+E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;
+E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;
+E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;
+E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;
+E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;
+E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;
+E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;
+E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;
+E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;
+E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;
+E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;
+E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;
+E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;
+E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;
+E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;
+E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;
+E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;
+E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;
+E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;
+E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;
+E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;
+E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;
+E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;
+E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;
+E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;
+E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;
+E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;
+E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;
+E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;
+E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;
+E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;
+E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;
+E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;
+E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;
+E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;
+E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;
+E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;
+E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;
+E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;
+E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;
+E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;
+E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;
+E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;
+E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;
+E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;
+E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;
+E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;
+E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;
+E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;
+E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;
+E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;
+E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;
+E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;
+E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;
+E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;
+E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;
+E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;
+E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;
+E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;
+E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;
+E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;
+E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;
+E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;
+E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;
+E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;
+E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;
+E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;
+E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;
+E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;
+E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;
+E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;
+E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;
+E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;
+E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;
+E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;
+E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;
+E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;
+E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;
+E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;
+E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;
+E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;
+E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;
+E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;
+E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;
+E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;
+E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;
+E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;
+E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;
+E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;
+E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;
+E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;
+E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;
+E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;
+E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;
+E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;
+E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;
+E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;
+E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;
+E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;
+E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;
+E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;
+E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;
+E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;
+E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;
+E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;
+E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;
+E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;
+E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;
+E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;
+E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;
+E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;
+E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;
+E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;
+E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;
+E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;
+E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;
+E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;
+E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;
+E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;
+E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;
+E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;
+E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;
+E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;
+E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;
+E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;
+E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;
+E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;
+E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;
+E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;
+E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;
+E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;
+E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;
+E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;
+E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;
+E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;
+E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;
+E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;
+E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;
+E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;
+E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;
+E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;
+E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;
+E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;
+E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;
+E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;
+E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;
+E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;
+E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;
+E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;
+E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;
+E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;
+E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;
+E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;
+E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;
+E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;
+E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;
+E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;
+E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;
+E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;
+E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;
+E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;
+E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;
+E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;
+E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;
+E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;
+E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;
+E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;
+E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;
+E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;
+E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;
+E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;
+E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;
+E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;
+F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
+FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
+100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
+10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
diff --git a/macros/generic/unicode-data/load-unicode-data.tex b/macros/generic/unicode-data/load-unicode-data.tex
new file mode 100644
index 0000000000..aad44f72ce
--- /dev/null
+++ b/macros/generic/unicode-data/load-unicode-data.tex
@@ -0,0 +1,194 @@
+% File load-unicode-data.tex
+%
+% Copyright 2015-2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License (LPPL), either version 1.3c of
+% this license or (at your option) any later version. The latest
+% version of this license is in the file
+% http://www.latex-project.org/lppl.txt.
+%
+% Issues with this file should be reported at
+% https://github.com/latex3/unicode-data
+%
+% This file parses a number of data files provided by the Unicode Consortium
+% and when used with used Unicode-capable engine sets up a range of TeX-related
+% parameters based on the extracted information.
+%
+% From the file UnicodeData.txt the following properties are set:
+% - \catcode 11 for all letters (Unicode class "L")
+% - \catcode 11 for all combining marks (Unicode class "M")
+% - \sfcode 999 for all code points of class "Lu" (upper case letters)
+% - \lccode for all of class "Ll" (lower case letters) to the code point
+% itself, and \uccode to the upper case mapping (or if not given
+% to the code point itself)
+% - \uccode for all of class "Lu" (upper case letters) to the code point
+% itself, and \lccode to the lower case mapping (or if not given
+% to the code point itself)
+% - \lccode and \uccode for all of class "Lt" (title case letters) to the
+% lower and upper case mappings (or if not given to the code point itself)
+% - \lccode and \uccode for all other letter code points are set to
+% the code point itself
+% - \lccode and/or \uccode for non-letter code points for which an upper
+% or lower case mapping is given
+% - \sfcode 0 (ignored) for code points of Unicode classes "Pe" (closing
+% punctuation marks) and "Pf" (final quotation marks)
+% - \Umathcode for all letters as math type 7 (var)
+%
+% =============================================================================
+%
+% The data can only be loaded by Unicode engines. Currently this is limited to
+% XeTeX and LuaTeX, both of which define \Umathcode.
+\ifx\Umathcode\undefined
+ \expandafter\endinput
+\fi
+% Just in case, check for the e-TeX extensions.
+\ifx\eTeXversion\undefined
+ \expandafter\endinput
+\fi
+% This file can be loaded in IniTeX mode so the category codes of |{|, |}| and
+% |#| may not be correct. Everything is done in a group so that only the
+% settings we want to propagate are made available generally.
+\begingroup
+ \catcode`\{=1 %
+ \catcode`\}=2 %
+ \catcode`\#=6 %
+% Write some basic information to the log.
+ \catcode`\^=7 %
+ \newlinechar=`\^^J %
+ \message{^^J}%
+ \message{load-unicode-data.tex v1.10 (2019-08-21)^^J}%
+ \message{Reading Unicode data^^J}%
+% The first stage of parsing is dealing with the fact that there are lots of
+% data items separated by |;|. Of those, only a few are needed so they are
+% picked out and everything else is dropped. There is one complication: there
+% are a few cases in the data file of ranges which are marked by the descriptor
+% |First| and a matching |Last|. A separate routine is used to handle these
+% cases.
+ \def\parseunicodedataI#1;#2;#3;#4;#5;#6;#7;#8;#9;{%
+ \parseunicodedataII#1;#3;#2 First>\relax
+ }%
+ \def\parseunicodedataII#1;#2;#3 First>#4\relax{%
+ \ifx\relax#4\relax
+ \expandafter\parseunicodedataIII
+ \else
+ \expandafter\parseunicodedataVII
+ \fi
+ #1;#2;%
+ }%
+ \def\parseunicodedataIII#1;#2;#3;#4;#5;#6;#7;#8\relax{%
+ \parseunicodedataIV{#1}{#2}{#6}{#7}%
+ }%
+% At this stage we have a `normal' data line with four pieces of information:
+% the code point, the Unicode class and the (possibly empty) upper and lower
+% case mappings. A few utility macros are defined, then we branch based on the
+% Unicode class. Notice that for all letter-like code points we first set the
+% |\lccode| and |\uccode| values to the code point itself then test for the
+% classes where a different setting might be appropriate. For non-letters
+% there is a check to see if any mappings are available, and also for trailing
+% punctuation to set the appropriate |\sfcode|.
+ \def\Ll{Ll}%
+ \def\Lt{Lt}%
+ \def\Lu{Lu}%
+ \def\Pe{Pe}%
+ \def\Pf{Pf}%
+ \def\firsttoken#1#2\relax{#1}%
+ \def\parseunicodedataIV#1#2#3#4{%
+ \ifnum 0%
+ \if L\firsttoken#2?\relax 1\fi
+ \if M\firsttoken#2?\relax 1\fi
+ >0 %
+ \parseunicodedataV{"#1}%
+ \def\temp{#2}%
+ \ifx\Ll\temp
+ \parseunicodedataVI\uccode{#1}{#3}%
+ \fi
+ \ifx\Lt\temp
+ \parseunicodedataVI\uccode{#1}{#3}%
+ \parseunicodedataVI\lccode{#1}{#4}%
+ \fi
+ \ifx\Lu\temp
+ \parseunicodedataVI\lccode{#1}{#4}%
+ \global\sfcode"#1=999 %
+ \fi
+% All letters in math mode should be variables.
+ \global\Umathcode"#1="7"01"#1 %
+ \else
+ \def\temp{#2}%
+ \ifnum 0\ifx\temp\Pe 1\fi\ifx\temp\Pf 1\fi>0 %
+ \global\sfcode"#1=0 %
+ \fi
+ \ifx\relax#3\relax
+ \else
+ \global\uccode"#1="#3 %
+ \fi
+ \ifx\relax#4\relax
+ \else
+ \global\lccode"#1="#4 %
+ \fi
+ \fi
+ }%
+% A simple auxiliary for all letter-like code points: the |\lccode| and
+% |\uccode| may get reset for cased letters but this means the initial
+% setting can't be forgotten.
+ \def\parseunicodedataV#1{%
+ \global\catcode#1=11 %
+ \global\lccode#1=#1 %
+ \global\uccode#1=#1 %
+ }%
+% An auxiliary to deal with the fact that some cased letters don't actually
+% have a case mapping available.
+ \def\parseunicodedataVI#1#2#3{%
+ \ifx\relax#3\relax
+ \else
+ \global#1"#2="#3 %
+ \fi
+ }%
+% For lines that were the |First>| of a range, read the data source again for
+% last line. Lines for letters then trigger a loop over the entire range. These
+% are always non-cased letters.
+ \def\parseunicodedataVII#1;#2;#3\relax{%
+ \read0 to \unicodedataline
+ \expandafter\parseunicodedataXII\unicodedataline\relax#1;#2\relax
+ }%
+ \def\parseunicodedataXII#1;#2\relax#3;#4\relax{%
+ \if L\firsttoken#4?\relax
+ \begingroup
+ \count0="#3 %
+ \loop
+ \unless\ifnum\count0>"#1 %
+ \parseunicodedataV{\count0 }%
+ \advance\count0 by 1 %
+ \repeat
+ \endgroup
+ \fi
+ }%
+% From plain: may not be defined (yet).
+ \def\loop#1\repeat{\def\body{#1}\iterate}%
+ \def\iterate{%
+ \body
+ \let\next\iterate
+ \else
+ \let\next\relax
+ \fi
+ \next
+ }%
+ \let\repeat\fi
+% There is no version data in |UnicodeData.txt|: log that it is being used with
+% a hard-coded date (the modification date from ftp.unicode.org). This obviously
+% needs to be updated when a new download takes place!
+ \message{\string# UnicodeData-12.1.0.txt^^J}%
+ \message{\string# Modified 2019-04-01 05:08:00 GMT [MFK]^^J}%
+% Actually loading the file requires an input stream, done directly.
+% There is a blank line at the end of the data source so there is a check
+% here for a |\par|.
+ \def\storedpar{\par}%
+ \openin0=UnicodeData.txt %
+ \loop\unless\ifeof0 %
+ \read0 to \unicodedataline
+ \unless\ifx\unicodedataline\storedpar
+ \expandafter\parseunicodedataI\unicodedataline\relax
+ \fi
+ \repeat
+ \closein0 %
+\endgroup
diff --git a/macros/generic/unicode-data/load-unicode-math-classes.tex b/macros/generic/unicode-data/load-unicode-math-classes.tex
new file mode 100644
index 0000000000..aa1ed0f14d
--- /dev/null
+++ b/macros/generic/unicode-data/load-unicode-math-classes.tex
@@ -0,0 +1,121 @@
+% File load-unicode-math-classes.tex
+%
+% Copyright 2015-2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License (LPPL), either version 1.3c of
+% this license or (at your option) any later version. The latest
+% version of this license is in the file
+% http://www.latex-project.org/lppl.txt.
+%
+% Issues with this file should be reported at
+% https://github.com/latex3/unicode-data
+%
+% This file parses MathClass.txt, provided by the Unicode Consortium, and sets
+% up the following mapping between Unicode classes and TeX math types
+% - "L" (large) \mathop
+% - "B" (binary) \mathbin
+% - "V" (vary) \mathbin
+% - "R" (relation) \mathrel
+% - "O" (opening) \mathopen
+% - "C" (closing) \mathclose
+% - "P" (punctuation) \mathpunct
+% - "A" (alphabetic) \mathalpha
+%
+% For each code point processed, the result is of the form
+%
+% \Umathcode <codepoint> = <type> 1 <codepoint>
+%
+% =============================================================================
+%
+% The data can only be loaded by Unicode engines. Currently this is limited to
+% XeTeX and LuaTeX, both of which define \Umathcode.
+\ifx\Umathcode\undefined
+ \expandafter\endinput
+\fi
+% Just in case, check for the e-TeX extensions.
+\ifx\eTeXversion\undefined
+ \expandafter\endinput
+\fi
+% This file can be loaded in IniTeX mode so the category codes of |{|, |}| and
+% |#| may not be correct. Everything is done in a group so that only the
+% settings we want to propagate are made available generally.
+\begingroup
+ \catcode`\{=1 %
+ \catcode`\}=2 %
+ \catcode`\#=6 %
+% Write some basic information to the log.
+ \catcode`\^=7 %
+ \newlinechar=`\^^J %
+ \message{^^J}%
+ \message{load-unicode-math-classes.tex v1.10 (2019-08-21)^^J}%
+ \message{Reading math class data^^J}%
+% The parser for data lines starts by skipping any comments (which start with
+% a |#| and which will be category code~$12$).
+ \edef\hash{\string#}%
+ \def\firsttoken#1#2\relax{#1}%
+ \def\parseunicodedataI#1\relax{%
+ \unless\if\hash\firsttoken#1?\relax
+ \parseunicodedataII#1\relax
+ \fi
+ }%
+% The first entry in each data line is a code point or range of code points:
+% set up to find a range if present.
+ \def\parseunicodedataII#1;#2\relax{%
+ \parseunicodedataIII#1....\relax{#2}%
+ }%
+ \def\parseunicodedataIII#1..#2..#3\relax#4{%
+ \ifx\relax#2\relax
+ \parseunicodedataIV{#1}{#1}#4\relax
+ \else
+ \parseunicodedataIV{#1}{#2}#4\relax
+ \fi
+ }%
+% Examine the Unicode class and if known set up the math code appropriately.
+ \chardef\mathclassL=1 %
+ \chardef\mathclassB=2 %
+ \chardef\mathclassV=2 %
+ \chardef\mathclassR=3 %
+ \chardef\mathclassO=4 %
+ \chardef\mathclassC=5 %
+ \chardef\mathclassP=6 %
+ \chardef\mathclassA=7 %
+ \def\parseunicodedataIV#1#2#3#4\relax{%
+ \begingroup
+ \count0="#1 %
+ \loop
+ \unless\ifnum\count0>"#2 %
+ \ifcsname mathclass#3\endcsname
+ \global\Umathcode\count0=\csname mathclass#3\endcsname 1 \count0 %
+ \fi
+ \advance\count0 by 1 %
+ \repeat
+ \endgroup
+ }%
+% From plain: may not be defined (yet).
+ \def\loop#1\repeat{\def\body{#1}\iterate}%
+ \def\iterate{%
+ \body
+ \let\next\iterate
+ \else
+ \let\next\relax
+ \fi
+ \next
+ }%
+ \let\repeat\fi
+% Now we can load the data.
+ \catcode`\#=12 %
+ \def\storedpar{\par}%
+ \openin0=MathClass-15.txt %
+ \read0 to \unicodedataline
+ \message{\unicodedataline ^^J}%
+ \read0 to \unicodedataline
+ \message{\unicodedataline ^^J}%
+ \loop\unless\ifeof0 %
+ \read0 to \unicodedataline
+ \unless\ifx\unicodedataline\storedpar
+ \expandafter\parseunicodedataI\unicodedataline\relax
+ \fi
+ \repeat
+ \closein0 %
+\endgroup
diff --git a/macros/generic/unicode-data/load-unicode-xetex-classes.tex b/macros/generic/unicode-data/load-unicode-xetex-classes.tex
new file mode 100644
index 0000000000..f13d43eaa9
--- /dev/null
+++ b/macros/generic/unicode-data/load-unicode-xetex-classes.tex
@@ -0,0 +1,228 @@
+% File load-unicode-xetex-classes.tex
+%
+% Copyright 2015-2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License (LPPL), either version 1.3c of
+% this license or (at your option) any later version. The latest
+% version of this license is in the file
+% http://www.latex-project.org/lppl.txt.
+%
+% Issues with this file should be reported at
+% https://github.com/latex3/unicode-data
+%
+% This file parses EastAsianWidth.txt and LineBreak.txt, provided by the
+% Unicode Consortium, and when used with XeTeX sets \XeTeXcharclass for
+% the following classes of code point:
+% - "ID" (ideographic)
+% - "CJ" (conditional Japanese starter)
+% - "OP" (opener)
+% - "CL" (closer)
+% - "NS" (non-starter)
+% - "EX" (exclamation)
+% - "IS" (infix separator)
+% - "CM" (combining marks)
+%
+% All code points of classes "ID" and "CJ" are assigned to a \XeTeXcharclass,
+% but for other classes this only occurs when they fall into east Asian width
+% type "F", "H" or "W" (full-, half- and wide-width).
+%
+% The following mappings between Unicode and XeTeX classes occur
+% - "ID" and "CJ" are class 1
+% - "OP" is class 2
+% - "CL", "NS", "EX", "IS" are class 3
+% - "CM" is class 256 (ignored)
+% as standard: these may be over-ridden by defining \XeTeXcharclass<class>
+% as required. (If classes "ID" or "CL" are explicitly set, the other members
+% of the same groups above will inherit these values.)
+%
+% This file does _not_ activate XeTeX's inter-character token mechanism
+% (\XeTeXinterchartokenstate is not set) nor does it install any material in
+% the inter-character token registers.
+%
+% Note that this file is separate from the main loader as the data structure
+% here may need more refinement at the macro level.
+%
+% =============================================================================
+%
+% The data loaded here can currently only be used by XeTeX: check for the
+% appropriate primitive.
+\ifx\XeTeXcharclass\undefined
+ \expandafter\endinput
+\fi
+% Just in case, check for the e-TeX extensions.
+\ifx\eTeXversion\undefined
+ \expandafter\endinput
+\fi
+% This file can be loaded in IniTeX mode so the category codes of |{|, |}| and
+% |#| may not be correct. Everything is done in a group so that only the
+% settings we want to propagate are made available generally.
+\begingroup
+ \catcode`\{=1 %
+ \catcode`\}=2 %
+% Write some basic information to the log.
+ \catcode`\^=7 %
+ \newlinechar=`\^^J %
+ \message{^^J}%
+ \message{load-unicode-xetex-classes.tex v1.10 (2019-08-21)^^J}%
+ \message{Reading Unicode east Asian character class data^^J}%
+% A string version of |#| will be needed to look for comment lines in the
+% source. Once that is done proper parsing can begin.
+ \catcode`\#=12 %
+ \def\hash{#}%
+ \catcode`\#=6 %
+ \def\firsttoken#1#2\relax{#1}%
+ \def\parseunicodedataI#1\relax{%
+ \unless\if\hash\firsttoken#1?\relax
+ \parseunicodedataII#1\relax
+ \fi
+ }%
+% Both files to be parsed here have potential ranges of code points: find the
+% first entry and search for the second.
+ \def\parseunicodedataII#1;#2 #3\relax{%
+ \parseunicodedataIII#1....\relax{#2}%
+ }%
+% From plain: may not be defined (yet).
+ \def\loop#1\repeat{\def\body{#1}\iterate}%
+ \def\iterate{%
+ \body
+ \let\next\iterate
+ \else
+ \let\next\relax
+ \fi
+ \next
+ }%
+ \let\repeat\fi
+% A shared routine for reading the data files: only one part of the parser
+% has to be altered.
+ \def\storedpar{\par}%
+ \def\readandparse#1{%
+ \openin0=#1.txt %
+% Read two lines from the source file to extract the version information
+ \catcode`\#=12 %
+ \read0 to \unicodedataline
+ \message{\unicodedataline ^^J}%
+ \read0 to \unicodedataline
+ \message{\unicodedataline ^^J}%
+ \loop\unless\ifeof0 %
+ \read0 to \unicodedataline
+ \unless\ifx\unicodedataline\storedpar
+ \expandafter\parseunicodedataI\unicodedataline\relax
+ \fi
+ \repeat
+ \catcode`\#=6 %
+ \closein0 %
+ }%
+% Set up the different line break classes recognised.
+ \ifdefined\XeTeXcharclassID
+ \else
+ \chardef\XeTeXcharclassID=1 %
+ \fi
+ \ifdefined\XeTeXcharclassCJ
+ \else
+ \let\XeTeXcharclassCJ\XeTeXcharclassID
+ \fi
+ \ifdefined\XeTeXcharclassOP
+ \else
+ \chardef\XeTeXcharclassOP=2 %
+ \fi
+ \ifdefined\XeTeXcharclassCL
+ \else
+ \chardef\XeTeXcharclassCL=3 %
+ \fi
+ \ifdefined\XeTeXcharclassEX
+ \else
+ \let\XeTeXcharclassEX\XeTeXcharclassCL
+ \fi
+ \ifdefined\XeTeXcharclassIS
+ \else
+ \let\XeTeXcharclassIS\XeTeXcharclassCL
+ \fi
+ \ifdefined\XeTeXcharclassNS
+ \else
+ \let\XeTeXcharclassNS\XeTeXcharclassCL
+ \fi
+ \ifdefined\XeTeXcharclassCM
+ \else
+ \chardef\XeTeXcharclassCM=256 %
+ \fi
+% Check the line break class and if necessary the east Asian width for the
+% current code point. For code points of class |ID| or |CJ| there may be a
+% range to set, and these are always recorded. In other cases if the code point
+% is one of those we may need to set up then save it for checking against the
+% list of east Asian widths.
+ \def\ID{ID}%
+ \def\CJ{CJ}%
+ \def\parseunicodedataIII#1..#2..#3\relax#4{%
+ \def\temp{#4}%
+ \ifnum 0%
+ \ifx\temp\ID 1\fi
+ \ifx\temp\CJ 1\fi
+ >0 %
+ \ifx\relax#2\relax
+ \parseunicodedataIV{#1}{#1}{#4}%
+ \else
+ \parseunicodedataIV{#1}{#2}{#4}%
+ \fi
+ \else
+ \ifcsname XeTeXcharclass#4\endcsname
+ \ifx\relax#2\relax
+ \expandafter\def\csname LB@\number"#1\endcsname{#4}%
+ \else
+ \let\savedbody\body
+ \count0="#1 %
+ \loop
+ \unless\ifnum\count0>"#2 %
+ \expandafter\def\csname LB@\number\count0 \endcsname{#4}%
+ \advance\count0 by 1 %
+ \repeat
+ \let\body\savedbody
+ \fi
+ \fi
+ \fi
+ }%
+% As we are inside a loop already, there needs to be a group here to preserve
+% the iterator.
+ \def\parseunicodedataIV#1#2#3{%
+ \begingroup
+ \count0="#1 %
+ \loop
+ \unless\ifnum\count0>"#2 %
+ \global\XeTeXcharclass\count0=\csname XeTeXcharclass#3\endcsname
+ \advance\count0 by 1 %
+ \repeat
+ \endgroup
+ }%
+ \readandparse{LineBreak}%
+% For |EastAsianWidth.txt|, action is only needed if the character has width
+% |F|, |H| or |W|. Once again there may be a range of characters to handle.
+ \def\parseunicodedataIII#1..#2..#3\relax#4{%
+ \ifnum 0%
+ \if F\firsttoken#4\relax 1\fi
+ \if H\firsttoken#4\relax 1\fi
+ \if W\firsttoken#4\relax 1\fi
+ >0 %
+ \ifx\relax#2\relax
+ \parseunicodedataIV{"#1}%
+ \else
+ \begingroup
+ \count0="#1 %
+ \loop
+ \unless\ifnum\count0>"#2 %
+ \parseunicodedataIV{\count0}%
+ \advance\count0 by 1 %
+ \repeat
+ \endgroup
+ \fi
+ \fi
+ }%
+% Only take action if a line breaking class was previously saved: that will
+% map to the correct class number.
+ \def\parseunicodedataIV#1{%
+ \ifcsname LB@\number#1\endcsname
+ \global\XeTeXcharclass#1=
+ \csname XeTeXcharclass\csname LB@\number#1\endcsname\endcsname
+ \fi
+ }%
+ \readandparse{EastAsianWidth}%
+\endgroup
diff --git a/macros/generic/upca/README b/macros/generic/upca/README
new file mode 100644
index 0000000000..732eb92cd6
--- /dev/null
+++ b/macros/generic/upca/README
@@ -0,0 +1,15 @@
+In this directory you can find macro for printing UPC-A barcodes. All necessary macros are defined in file upca.tex. File test-upca.tex contains test of macros and demonstration of usage in plain.
+
+
+Macro works in plain and LaTeX and other standard macro packages.
+
+Files:
+upca.tex - definition of macros
+test-upca.tex .... test and demonstration of usage
+
+
+Jiri Mrkus (Ji\v{r}\'{i} Mrkus)
+Faculty of Informatics
+Masaryk University
+Czech Republic
+e-mail: mrkus@mail.muni.cz
diff --git a/macros/generic/upca/test-upca.tex b/macros/generic/upca/test-upca.tex
new file mode 100644
index 0000000000..4041b9a821
--- /dev/null
+++ b/macros/generic/upca/test-upca.tex
@@ -0,0 +1,11 @@
+\input upca % inputing macros to the document
+
+\module=0.5mm % setting module width (width of single bar or space) of the code; default 0.33mm
+
+\height=50mm % setting height of the code; default 25.9mm
+
+\upca{03600029145} % produces UPC-A barcode, the check digit will be calculated
+
+\upca{036000291454} % produces the same code, the check digit is not controled
+
+\end \ No newline at end of file
diff --git a/macros/generic/upca/upca.tex b/macros/generic/upca/upca.tex
new file mode 100644
index 0000000000..cae5a0d7e0
--- /dev/null
+++ b/macros/generic/upca/upca.tex
@@ -0,0 +1,166 @@
+%Author: Ji\v{r}\'{i} Mrkus
+%License: LaTeX Project Public License
+\newcount\stringlength
+\stringlength=0
+\newcount\check
+\check=0
+\newcount\badchar
+\badchar=0
+\newcount\oddcount
+\oddcount=0
+\newcount\evencount
+\evencount=0
+\newcount\helplen
+\helplen=0
+\newcount\moda
+\newcount\modb
+
+\newdimen\module
+\newdimen\height
+\newdimen\fivemodule
+\newdimen\fntsize
+\newdimen\unita
+\newdimen\unitb
+\newdimen\unitc
+\newdimen\helpind
+
+\fntsize=12pt
+\module=0.33mm
+\height=25.9mm
+
+
+
+\def\upca#1 {\kern 1.5mm\edef\currfont{\the\font}%
+ \helpind=\parindent%
+ \parindent=0pt%
+ \unita=\module%
+ \multiply\unita by1065%
+ \divide\unita by1000%
+ \unitb=\unita%
+ \unitc=\unita%
+ \multiply\unita by4%
+ \multiply\unitb by11%
+ \multiply\unitc by2%
+ \fntsize=\module%
+ \multiply\fntsize by950%
+ \divide\fntsize by100%
+ \font\upcafont=ocrb10 at \fntsize%
+ \upcafont%
+ \fivemodule=\module%
+ \multiply\fivemodule by5%
+ \stringlength=0 \badchar=0%
+ \control[#1] \ifnum\badchar=0 \ifnum\check=1 \controlchar[#1]%
+ \hbox{\upcacode[#1{\checkchar}]}\else%
+ \hbox{\upcacode[#1]}\fi\else\fi%
+ \parindent=\helpind \currfont \kern 1.5mm}
+
+
+
+\def\upcacode[#1]{\stringlength=1%
+ \advance\height by\fivemodule%
+ \ooalign{\split[00000]\split[101] \upcahash[#1]\split[00000]\cr%
+ \hbox{\kern-\unitc \lower \unita\hbox{\upcatext[#1]}}}}
+
+
+%Macro which prints text under the code
+\def\upcatext[#1#2]{#1\kern\unitb \sndtext[#2]}
+\def\sndtext[#1#2#3#4#5#6]{#1#2#3#4#5\kern\unita \rdtext[#6]}
+\def\rdtext[#1#2#3#4#5#6]{#1#2#3#4#5\kern\unitb #6}
+
+%This macro converts number to sequence of 0 and 1
+\def\upcahash[#1#2]{%
+ \if#10 \ifnum\stringlength=1 \split[0001101]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0001101]}\else%
+ \ifnum\stringlength=12 \split[1110010]\else%
+ \raise\fivemodule\hbox{\split[1110010]}\fi\fi\fi\else%
+ \if#11 \ifnum\stringlength=1 \split[0011001]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\mbox{\split[0011001]}\else%
+ \ifnum\stringlength=12 \split[1100110]\else%
+ \raise\fivemodule\hbox{\split[1100110]}\fi\fi\fi\else%
+ \if#12 \ifnum\stringlength=1 \split[0010011]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0010011]}\else%
+ \ifnum\stringlength=12 \split[1101100]\else%
+ \raise\fivemodule\hbox{\split[1101100]}\fi\fi\fi\else%
+ \if#13 \ifnum\stringlength=1 \split[0111101]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0111101]}\else%
+ \ifnum\stringlength=12 \split[1000010]\else%
+ \raise\fivemodule\hbox{\split[1000010]}\fi\fi\fi\else%
+ \if#14 \ifnum\stringlength=1 \split[0100011]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0100011]}\else%
+ \ifnum\stringlength=12 \split[1011100]\else%
+ \raise\fivemodule\hbox{\split[1011100]}\fi\fi\fi\else%
+ \if#15 \ifnum\stringlength=1 \split[0110001]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0110001]}\else%
+ \ifnum\stringlength=12 \split[1001110]\else%
+ \raise\fivemodule\hbox{\split[1001110]}\fi\fi\fi\else%
+ \if#16 \ifnum\stringlength=1 \split[0101111]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0101111]}\else%
+ \ifnum\stringlength=12 \split[1010000]\else%
+ \raise\fivemodule\hbox{\split[1010000]}\fi\fi\fi\else%
+ \if#17 \ifnum\stringlength=1 \split[0111011]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0111011]}\else%
+ \ifnum\stringlength=12 \split[1000100]\else%
+ \raise\fivemodule\hbox{\split[1000100]}\fi\fi\fi\else%
+ \if#18 \ifnum\stringlength=1 \split[0110111]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0110111]}\else%
+ \ifnum\stringlength=12 \split[1001000]\else%
+ \raise\fivemodule\hbox{\split[1001000]}\fi\fi\fi\else%
+ \if#19 \ifnum\stringlength=1 \split[0001011]\else%
+ \ifnum\stringlength<7%
+ \raise\fivemodule\hbox{\split[0001011]}\else%
+ \ifnum\stringlength=12 \split[1110010]\else%
+ \raise\fivemodule\hbox{\split[1110100]}\fi\fi\fi \else \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \ifnum\stringlength=11 \advance\height by\fivemodule\else\fi%
+ \ifnum\stringlength=6%
+ \advance\height by\fivemodule%
+ \split[01010]%
+ \advance\height by-\fivemodule \else \fi%
+ \ifnum\stringlength=1 \advance\height by-\fivemodule \else\fi%
+ \advance\stringlength by1%
+ \if:#2: \split[101]%
+ \advance\height by-\fivemodule%
+ \else\upcahash[#2]\fi}
+
+%Macro takes as parameter sequence of 0 and 1, every character passes on draw macro
+\def\split[#1#2]{\draw[#1] \if:#2: \else \split[#2] \fi}
+
+%This macro takes as parameter one character (0 or 1) and draws a bar or space
+\def\draw[#1]{\if#11\vrule height \height width \module \else \if#10\hskip \module \fi \fi}
+
+%Returns true if character in parameter is a digit, false otherwise
+\newif\ifnext
+\def\ifdigit[#1]{\ifnum`#1>47 \ifnum`#1<58 \nexttrue\else\nextfalse\fi\else\nextfalse\fi\ifnext}
+
+%This macro computes length of string in parameter - result is in helplen register
+\def\strlen[#1#2]{\if:#2: \advance\helplen by1 \else \advance\helplen by1\strlen[#2]\fi}
+
+%Macro which computes modulo of two numbers in moda and modb registers - result in moda
+\def\modulo{%
+ \ifnum\moda>\modb \advance\moda by-\modb \modulo%
+ \else \fi\ifnum\moda=\modb \moda=0 \else \fi}
+
+%Macro which controls if parameter has length 11 or 12 characters and contains only digits
+\def\control[#1#2]{\ifdigit[#1]\advance\stringlength by1%
+ \if:#2: \ifnum\stringlength=11 \check=1 \else%
+ \ifnum\stringlength=12 \check=0%
+ \else \message{String must have 11 or 12 characters}\badchar=1\fi\fi\else\control[#2]\fi%
+ \else \message{Invalid characters: code can contain only digits}\badchar=1\fi}
+
+%Macro which computes the check digit
+\def\controlchar[#1#2]{\helplen=0 \if:#2: \else \strlen[#2]\fi \moda=\helplen \modb=2 \modulo%
+ \ifnum\moda=0 \advance\oddcount by`#1 \advance\oddcount by-48 \else%
+ \advance\evencount by`#1 \advance\evencount by-48 \fi%
+ \ifnum\helplen>0 \controlchar[#2]\else%
+ \multiply\oddcount by3 \advance\oddcount by\evencount \moda=\oddcount \modb=10 \modulo%
+ \ifnum\moda=0 \check=0 \else \check=10 \advance\check by-\moda\fi \def\checkchar{\the\check}\fi}
+
+\endinput \ No newline at end of file
diff --git a/macros/generic/upzhkinsoku/README b/macros/generic/upzhkinsoku/README
new file mode 100644
index 0000000000..7645a0376c
--- /dev/null
+++ b/macros/generic/upzhkinsoku/README
@@ -0,0 +1,17 @@
+
+
+The upzhkinsoku package --- Supplementary Chinese kinsoku for Unicode *pTeX
+
+CTAN Homepage: https://ctan.org/pkg/upzhkinsoku
+
+Repository: https://github.com/Man-Ting-Fang/upzhkinsoku
+
+Version: 2018-04-07 v0.5
+
+Copyright 2017--2018 Yue ZHANG
+
+License: Knuth License (https://ctan.org/license/knuth)
+
+This package provides supplementary Chinese kinsoku (line breaking rules etc.)
+settings for Unicode (e-)upTeX ((e-)upTeX when using Unicode as its internal
+encoding) and ApTeX. Both LaTeX and plain TeX are supported.
diff --git a/macros/generic/upzhkinsoku/upzhkinsoku-doc.pdf b/macros/generic/upzhkinsoku/upzhkinsoku-doc.pdf
new file mode 100644
index 0000000000..aa7fe80f4d
--- /dev/null
+++ b/macros/generic/upzhkinsoku/upzhkinsoku-doc.pdf
Binary files differ
diff --git a/macros/generic/upzhkinsoku/upzhkinsoku-doc.tex b/macros/generic/upzhkinsoku/upzhkinsoku-doc.tex
new file mode 100644
index 0000000000..a6c191eddf
--- /dev/null
+++ b/macros/generic/upzhkinsoku/upzhkinsoku-doc.tex
@@ -0,0 +1,82 @@
+
+
+% upzhkinsoku-doc.tex
+
+% !TeX encoding = UTF-8
+% !TeX program = pdfLaTeX
+
+\RequirePackage{fix-cm}
+
+\documentclass[a4paper]{article}
+
+\usepackage[OT1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[UKenglish]{babel}
+\usepackage[babel]{microtype}
+\usepackage{etoolbox}
+
+\AtBeginEnvironment{verbatim}{\microtypesetup{activate=false}}
+
+\newcommand\NormalSans{\normalfont\sffamily}
+\newcommand\pkg[1]{{\protect\NormalSans#1}}
+
+\newcommand\pTeX{p\kern-0.15em\TeX}
+\newcommand\e{\ensuremath{\varepsilon}}
+\newcommand\upTeX{u\pTeX}
+\newcommand\ApTeX{A\kern-0.1em\pTeX}
+
+\newcommand\kn{test}
+\newcommand\sk{test}
+
+\font\kn=ipxm-r-u79 at 9.62216pt
+\font\sk=ipxm-r-u52 at 9.62216pt
+
+\begin{document}
+
+\title{The \pkg{upzhkinsoku} package%
+ \thanks{CTAN Homepage: \texttt{https://ctan.org/pkg/upzhkinsoku}}
+ \thanks{Repository: \texttt{https://github.com/Man-Ting-Fang/upzhkinsoku}}}
+\author{Yue \textsc{Zhang}}
+\date{2018-04-07\quad v0.5}
+
+\maketitle
+
+\begin{abstract}
+This package provides supplementary Chinese kinsoku (line breaking rules etc.)
+settings for Unicode (\e-)\upTeX\footnote{(\e-)\upTeX\ when using Unicode as its
+internal encoding.} and \ApTeX. Both \LaTeX\ and plain \TeX\ are supported.
+\end{abstract}
+
+\section{Introduction}
+
+\textit{Kinsoku} is the romanisation of the Japanese word ``{\kn\char"81\relax
+\sk\char"47}'' which means ``prohibition rules''. It is a set of rules to avoid
+prohibited line breaks in CJK typography, such as ``line-start prohibition
+rules'', ``line-end prohibition rules'', inseparable or unbreakable character
+sequences and so on.\footnote{\textit{Requirements for Japanese Text Layout}:
+\texttt{https://www.w3.org/TR/jlreq/}}
+
+(\e-)\upTeX\ and \ApTeX's default kinsoku parameters are set in
+\verb|ukinsoku.tex|. However, the default settings do not satisfy Chinese
+typesetting,\footnote{\textit{Requirements for Chinese Text Layout}:
+\texttt{https://www.w3.org/TR/clreq/}} thus this package provides supplementary
+Chinese kinsoku settings for Unicode (\e-)\upTeX\ and \ApTeX.
+
+Please note that this package is specifically optimised for Chinese typesetting,
+so it is usually not suitable for document whose main language is not Chinese.
+
+\section{Usage}
+
+This package has no options, just load it as usual:
+\begin{itemize}
+\item \LaTeX: \verb|\usepackage{upzhkinsoku}|
+\item Plain \TeX: \verb|\input upzhkinsoku.sty|
+\end{itemize}
+If you are using \LaTeX\ and would like to change some kinsoku parameters (this
+is usually unnecessary, however), please do that after \verb|\begin{document}|,
+or via \verb|\AtBeginDocument| after loading this package; otherwise they may be
+overridden.\footnote{For technical reasons, the actual execution of this package
+is delayed to \texttt{\char"5C begin\char"7B document\char"7D}, also via
+\texttt{\char"5C AtBeginDocument}.}
+
+\end{document}
diff --git a/macros/generic/upzhkinsoku/upzhkinsoku.sty b/macros/generic/upzhkinsoku/upzhkinsoku.sty
new file mode 100644
index 0000000000..9f14e317b6
--- /dev/null
+++ b/macros/generic/upzhkinsoku/upzhkinsoku.sty
@@ -0,0 +1,168 @@
+
+
+% upzhkinsoku.sty
+% Copyright 2017--2018 Yue ZHANG
+% License: Knuth License (https://ctan.org/license/knuth)
+
+\csname ENDINPUTUPZHKINSOKUDOTSTY\endcsname
+
+\let\ENDINPUTUPZHKINSOKUDOTSTY=\endinput
+
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \else
+ \ProvidesPackage{upzhkinsoku}[2018/04/07 v0.5
+ Supplementary Chinese kinsoku for Unicode *pTeX]%
+ \fi
+
+\edef\UPZHKINSOKUDOTSTYRESTORECATCODE{%
+ \catcode`\noexpand\@=\the\catcode`\@\relax}
+
+\catcode`\@=11\relax
+
+\def\upzhkinsoku@ifprimitive#1{%
+ \begingroup
+ \edef\upzhkinsoku@temp@meaning{\meaning#1}%
+ \edef\upzhkinsoku@temp@string{\string#1}%
+ \expandafter
+ \endgroup
+ \ifx\upzhkinsoku@temp@meaning\upzhkinsoku@temp@string}
+
+\upzhkinsoku@ifprimitive\ucs
+\else
+ \errmessage{upTeX / e-upTeX / ApTeX is required}%
+ \UPZHKINSOKUDOTSTYRESTORECATCODE
+ \expandafter\endinput
+\fi
+
+\ifnum\ucs"3000="3000\relax
+\else
+ \errmessage{Unicode upTeX / Unicode e-upTeX / ApTeX is required}%
+ \UPZHKINSOKUDOTSTYRESTORECATCODE
+ \expandafter\endinput
+\fi
+
+\def\upzhkinsoku@setpenalties{%
+ \postbreakpenalty"23=10000\relax % #
+% \postbreakpenalty"24=10000\relax % $ (variable slot)
+ \prebreakpenalty"25=10000\relax % %
+ \prebreakpenalty"26=10000\relax % &
+ \prebreakpenalty"2A=10000\relax % *
+ \prebreakpenalty"2B=10000\relax % + (\+ is \outer in plain.tex)
+ \prebreakpenalty"2F=10000\relax % /
+ \prebreakpenalty"3D=10000\relax % =
+ \postbreakpenalty"40=10000\relax % @
+ \prebreakpenalty"5E=10000\relax % ^
+ \prebreakpenalty"7E=10000\relax % ~
+ \prebreakpenalty\ucs"301E=10000\relax % 〞
+ \postbreakpenalty\ucs"2329=10000\relax % 〈
+ \prebreakpenalty\ucs"232A=10000\relax % 〉
+ \postbreakpenalty\ucs"301A=10000\relax % 〚
+ \prebreakpenalty\ucs"301B=10000\relax % 〛
+ \prebreakpenalty\ucs"00B7=10000\relax % ·
+ \prebreakpenalty\ucs"2022=10000\relax % •
+ \prebreakpenalty\ucs"2027=10000\relax % ‧
+ \prebreakpenalty\ucs"2010=10000\relax % â€
+ \prebreakpenalty\ucs"2013=10000\relax % –
+ \prebreakpenalty\ucs"FF0D=10000\relax % ï¼
+ \prebreakpenalty\ucs"2026=0\relax % …
+ \prebreakpenalty\ucs"2025=0\relax % ‥
+ \prebreakpenalty\ucs"FF0F=10000\relax % ï¼
+ \prebreakpenalty\ucs"FF5E=10000\relax % ~
+ \prebreakpenalty\ucs"301C=10000\relax % 〜
+}
+\def\upzhkinsoku@setxspcodes{%
+ \xspcode"21=2\relax % !
+ \xspcode"23=1\relax % #
+% \xspcode"24=1\relax % $ (variable slot)
+ \xspcode"25=2\relax % %
+ \xspcode"26=3\relax % &
+ \xspcode"3A=2\relax % :
+ \xspcode"3F=2\relax % ?
+ \xspcode"40=1\relax % @
+}
+\def\upzhkinsoku@setinhibitxspcodes{%
+ \inhibitxspcode\ucs"301E=1\relax % 〞
+ \inhibitxspcode\ucs"2329=2\relax % 〈
+ \inhibitxspcode\ucs"232A=1\relax % 〉
+ \inhibitxspcode\ucs"301A=2\relax % 〚
+ \inhibitxspcode\ucs"301B=1\relax % 〛
+ \inhibitxspcode\ucs"00B7=0\relax % ·
+ \inhibitxspcode\ucs"2022=0\relax % •
+ \inhibitxspcode\ucs"2027=0\relax % ‧
+ \inhibitxspcode\ucs"30FB=0\relax % ・
+ \inhibitxspcode\ucs"FF1A=1\relax % :
+ \inhibitxspcode\ucs"FF01=1\relax % ï¼
+ \inhibitxspcode\ucs"2010=0\relax % â€
+ \inhibitxspcode\ucs"2013=0\relax % –
+ \inhibitxspcode\ucs"2E3A=0\relax % ⸺
+ \inhibitxspcode\ucs"FF0D=0\relax % ï¼
+ \inhibitxspcode\ucs"2025=0\relax % ‥
+ \inhibitxspcode\ucs"FF0F=0\relax % ï¼
+}
+
+\def\upzhkinsoku@setwith@ascii{% variable slots
+ \prebreakpenalty"22=0\relax % "
+ \prebreakpenalty"3C=10000\relax % <
+ \prebreakpenalty"3E=10000\relax % >
+ \prebreakpenalty"5C=10000\relax % \
+ \prebreakpenalty"5F=10000\relax % _
+ \postbreakpenalty"7B=10000\relax % {
+ \prebreakpenalty"7C=10000\relax % |
+ \prebreakpenalty"7D=10000\relax % }
+ \xspcode"22=0\relax % "
+ \xspcode"3C=0\relax % <
+ \xspcode"3E=0\relax % >
+ \xspcode"5C=0\relax % \
+ \xspcode"7B=1\relax % {
+ \xspcode"7D=2\relax % }
+}
+\def\upzhkinsoku@setwith@otlatin{% variable slots
+ \prebreakpenalty"22=10000\relax % â€
+ \postbreakpenalty"3C=10000\relax % ¡
+ \postbreakpenalty"3E=10000\relax % ¿
+ \postbreakpenalty"5C=10000\relax % “
+ \prebreakpenalty"5F=0\relax % Ë™
+ \prebreakpenalty"7B=10000\relax % –
+ \prebreakpenalty"7C=0\relax % —
+ \prebreakpenalty"7D=0\relax % Ë
+ \xspcode"22=2\relax % â€
+ \xspcode"3C=1\relax % ¡
+ \xspcode"3E=1\relax % ¿
+ \xspcode"5C=1\relax % “
+ \xspcode"7B=0\relax % –
+ \xspcode"7D=0\relax % Ë
+}
+
+\def\DisableOTLatinVariableSlotsKinsoku{\upzhkinsoku@setwith@ascii}
+\def\EnableOTLatinVariableSlotsKinsoku{\upzhkinsoku@setwith@otlatin}
+
+\def\upzhkinsoku@otone{OT1}
+\def\upzhkinsoku@otfour{OT4}
+
+\def\setupzhkinsokuwith#1{%
+% \input ukinsoku.tex\relax
+ \upzhkinsoku@setpenalties
+ \upzhkinsoku@setxspcodes
+ \upzhkinsoku@setinhibitxspcodes
+ \edef\upzhkinsoku@defaultfontenc{#1}%
+ \ifx\upzhkinsoku@defaultfontenc\upzhkinsoku@otone
+ \upzhkinsoku@setwith@otlatin
+ \else
+ \ifx\upzhkinsoku@defaultfontenc\upzhkinsoku@otfour
+ \upzhkinsoku@setwith@otlatin
+ \else
+ \upzhkinsoku@setwith@ascii
+ \fi
+ \fi}
+
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname encodingdefault\endcsname\relax
+ \setupzhkinsokuwith{\upzhkinsoku@otone}%
+ \else
+ \AtBeginDocument{\setupzhkinsokuwith{\encodingdefault}}%
+ \fi
+
+\UPZHKINSOKUDOTSTYRESTORECATCODE
+
+\endinput
diff --git a/macros/generic/variations/ALIRE b/macros/generic/variations/ALIRE
new file mode 100644
index 0000000000..4b90fa723f
--- /dev/null
+++ b/macros/generic/variations/ALIRE
@@ -0,0 +1,43 @@
+
+ L'extension VARIATIONS
+
+1. Introduction
+
+L'extension 'variations' permet de composer au sein de documents LaTeX,
+des tableaux de variations de fonctions et des tableaux de signe
+respectant les usages typographiques français. La syntaxe est proche de
+celle de l'environnement 'tabular'. Les macros fournies permettent de
+répondre aux besoins les plus courants. Elles sont utilisables avec
+LaTeX comme avec plain TeX.
+
+2. Licence
+
+Vous pouvez utiliser et diffuser librement cette extension dans le cadre
+de la licence GNU GPL version 2 (voir le fichier COPYING joint).
+
+3. Contenu de la distribution
+
+ ALIRE Ce fichier.
+ README La version anglaise de ce fichier.
+ COPYING La licence d'utilisation.
+ variations.tex Le fichier de définition des macros.
+ variations.sty Le fichier de définition de l'environnement.
+ docvariations.pdf Une documentation succincte.
+ docvariations.tex Le fichier source de la documentation.
+
+4. Installation
+
+Sur un système Unix, copier le répertoire 'variations' dans
+'/usr/share/texmf/tex/generic', puis exécuter la commande 'mktexlsr'.
+
+Pour une installation MiKTeX, copier le répertoire 'variations' dans
+'C:\texmf\tex\generic', puis exécuter le programme 'MiKTeX Options'.
+Dans la rubrique 'File name database', cliquer sur 'Refresh now'.
+
+5. Contact
+
+L'extension 'variations' a été écrite par Christian Obrecht. Pour
+contacter l'auteur, veuillez vous rendre sur la page diffusant
+'variations' :
+
+ <http://eukleides.org/variations/>
diff --git a/macros/generic/variations/COPYING b/macros/generic/variations/COPYING
new file mode 100644
index 0000000000..5ec01a382d
--- /dev/null
+++ b/macros/generic/variations/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/generic/variations/README b/macros/generic/variations/README
new file mode 100644
index 0000000000..f2cd7d0ff6
--- /dev/null
+++ b/macros/generic/variations/README
@@ -0,0 +1,40 @@
+
+ The VARIATIONS package
+
+1. Purpose
+
+The 'variations' package provides macros for typesetting tables showing
+variations of functions according to French usage. These macros may be
+used both with LaTeX and plain TeX. The syntax is close to the one of
+the 'tabular' environment.
+
+2. Licence
+
+You may freely use and distribute this package under the terms of the
+GNU General Public License version 2 (see file COPYING).
+
+3. Content of the folder
+
+ README This file.
+ ALIRE The French version of this file.
+ COPYING The GNU General Public License.
+ variations.tex The definition file for the macros.
+ variations.sty The definition file for the environment.
+ docvariations.pdf A short documentation in French.
+ docvariations.tex The source for the documentation.
+
+4. Installation
+
+On Unix like systems, copy folder 'variations' into
+'/usr/share/texmf/tex/generic', then run 'mktexlsr'.
+
+With MiKTeX, copy folder 'variations' into 'C:\texmf\tex\generic', then
+run 'MiKTeX Options'. In the 'File name database' section, click on
+'Refresh now'.
+
+5. Contact
+
+The author of the 'variations' package is Christian Obrecht. To contact
+him, please visit the 'variations' page:
+
+ <http://eukleides.org/variations/>
diff --git a/macros/generic/variations/docvariations.pdf b/macros/generic/variations/docvariations.pdf
new file mode 100644
index 0000000000..a0f8c3f450
--- /dev/null
+++ b/macros/generic/variations/docvariations.pdf
Binary files differ
diff --git a/macros/generic/variations/docvariations.tex b/macros/generic/variations/docvariations.tex
new file mode 100644
index 0000000000..68f8358666
--- /dev/null
+++ b/macros/generic/variations/docvariations.tex
@@ -0,0 +1,137 @@
+% Documentation de l'extension 'variations'
+% Copyright (c) 2006 Christian Obrecht
+
+\documentclass{article}
+\usepackage{mafr,variations,ae,aecompl}
+
+\nofiles
+\def\mac#1{\item[\qquad\hbox to 4em{\ttfamily\textbackslash#1}]}
+
+\title{L'extension \texttt{variations}\\
+\texttt{\small <http://eukleides.org/variations/>}}
+\author{Christian Obrecht}
+\date{13 septembre 2006}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+L'extension \texttt{variations} permet de composer au sein de documents \LaTeX,
+des tableaux de variations de fonctions et des tableaux de signe respectant les
+usages typographiques français. La syntaxe utilisée est proche de celle de
+l'environnement \texttt{tabular}. Les macros fournies permettent de répondre aux
+besoins les plus courants. Voici un exemple élémentaire :
+
+$$
+\begin{variations}
+ x & \mI & & & 0 & & & \pI \\
+\filet
+ \m{\frc{1}{x}} & \h0 & \d & \mI & \bb & \h\pI & \d & 0 \\
+\end{variations}
+$$
+
+\noindent
+obtenu avec le code suivant :
+
+\begin{verbatim}
+\begin{variations}
+ x & \mI & & & 0 & & & \pI \\
+\filet
+ \m{\frc{1}{x}} & \h0 & \d & \mI & \bb & \h\pI & \d & 0 \\
+\end{variations}
+\end{verbatim}
+
+\noindent
+Plusieurs remarques s'imposent :
+
+\begin{enumerate}
+
+\item Les éléments figurant dans l'environnement sont composés en mode
+mathématique\footnote{La macro \texttt{\textbackslash frc} provient de
+l'extension \texttt{mafr}. Elle permet de composer une fraction qui sera
+systématiquement au format \texttt{displaystyle}.}.
+
+\item Un cadre pour le tableau et un filet vertical à droite de la première
+colonne sont tracés automatiquement.
+
+\item Des macros comme \verb+\d+ (flèche décroissante) ou \verb+\bb+ (double
+barre) permettent de composer les éléments spécifiques aux tableaux de
+variations.
+
+\item Les macros \verb+\m+ (pour milieu) et \verb+\h+ (pour haut) autorisent le
+positionnement vertical des éléments dans la ligne des variations.
+
+\item Les macros \verb+\mI+ et \verb+\pI+ correspondent respectivement à
+$-\infty$ et $+\infty$.
+
+\end{enumerate}
+
+\section{Description des macros}
+
+Les macros suivantes sont utilisables au sein d'un environnement
+\texttt{variations} :
+
+\begin{itemize}
+
+\mac{c} Flèche croissante.
+\mac{d} Flèche décroissante.
+\mac{ch} Flèche croissante pour point d'inflexion (position haute).
+\mac{cb} Flèche croissante pour point d'inflexion (position basse).
+\mac{dh} Flèche décroissante pour point d'inflexion (position haute).
+\mac{db} Flèche décroissante pour point d'inflexion (position basse).
+\mac{m} Centre verticalement l'argument dans la ligne courante.
+\mac{h} Place l'argument en haut de la ligne courante.
+\mac{filet} Filet horizontal.
+\mac{l} Filet vertical.
+\mac{z} Zéro barré d'un filet vertical.
+\mac{bb} Double barre.
+\mac{bg} Filet vertical justifié à gauche.
+\mac{bd} Filet vertical justifié à droite.
+\mac{ga} Décale l'argument vers la gauche (occupe deux colonnes).
+\mac{dr} Décale l'argument vers la droite (occupe deux colonnes).
+\mac{mI} Abréviation pour $-\infty$.
+\mac{pI} Abréviation pour $+\infty$.
+
+\end{itemize}
+
+\section{Un exemple plus élaboré}
+
+Le tableau ci-dessous :
+
+$$
+\begin{variations}
+ x & \mI & & -1 & & \sqrt2 & & 3 & \\
+\filet
+ f'(x) & \ga- & \z & + & \z & \dr+ & \bd \\
+\filet
+ \m{f(x)} & \h1 & \d & 0 & \cb & \m{\frc{1}{4}} & \ch & \h\pI & \bd \\
+\end{variations}
+$$
+
+\noindent
+a été obtenu à l'aide du code suivant :
+
+\begin{verbatim}
+\begin{variations}
+ x & \mI & & -1 & & \sqrt2 & & 3 & \\
+\filet
+ f'(x) & \ga- & \z & + & \z & \dr+ & \bd \\
+\filet
+ \m{f(x)} & \h1 & \d & 0 & \cb & \m{\frc{1}{4}} & \ch & \h\pI & \bd \\
+\end{variations}
+\end{verbatim}
+
+On notera en particulier l'utilisation des macros \verb+\cb+ et \verb+\ch+ pour
+le point d'inflexion, des macros \verb+\ga+ et \verb+\dr+ pour le premier
+signe et le troisième signe de la dérivée, enfin de la macro \verb+\bd+ pour la
+double barre sur le bord droit du tableau.
+
+\section{Utilisation avec plain \TeX}
+
+Il est possible d'utiliser \texttt{variations} également avec plain \TeX, en
+chargeant le fichier \texttt{variations.tex}. Les macros \verb+\bvariations+ et
+\verb+\evariations+ jouent alors le rôle de balises de début et de fin.
+
+\end{document}
diff --git a/macros/generic/variations/variations.sty b/macros/generic/variations/variations.sty
new file mode 100644
index 0000000000..8b89b86adc
--- /dev/null
+++ b/macros/generic/variations/variations.sty
@@ -0,0 +1,10 @@
+% Package `variations' (tableaux de variations)
+% Copyright (c) Christian Obrecht 2005-2006
+
+\ProvidesPackage{variations}[2006/09/13 v0.3 Tableaux de variations]
+
+\input variations
+
+\newenvironment{variations}{\bvariations}{\evariations}
+
+\endinput
diff --git a/macros/generic/variations/variations.tex b/macros/generic/variations/variations.tex
new file mode 100644
index 0000000000..c5b37c58a9
--- /dev/null
+++ b/macros/generic/variations/variations.tex
@@ -0,0 +1,105 @@
+% Macros pour la composition des tableaux de variations
+% Version 0.3 du 13/09/06
+% Copyright (c) Christian Obrecht 2005-2006
+
+\catcode`@=11
+
+\font\lf@nt=line10
+
+\def\bvariations{\leavevmode\hbox\bgroup\vbox\bgroup
+
+\def\tc@{{\lf@nt\char0}}
+\def\fc@{{\lf@nt\char0}\kern-1em{\lf@nt\char18}}
+\def\td@{{\lf@nt\char64}}
+\def\fd@{{\lf@nt\char64}\kern-1em{\lf@nt\char82}}
+
+\def\tc@@{{\lf@nt\char8}}
+\def\fc@@{{\lf@nt\char8}\kern-1em{\lf@nt\char42}}
+\def\td@@{{\lf@nt\char72}}
+\def\fd@@{{\lf@nt\char72}\kern-1em{\lf@nt\char106}}
+
+\def\sk@p##1{\vrule height ##1 depth 2pt width 0pt}
+\let\@ils=\offinterlineskip
+
+\def\cb{
+\vbox{\offinterlineskip\halign{&####\cr
+&&\fc@@\cr
+&\tc@@\cr
+\tc@@\cr
+\sk@p{.5em}\cr}}}
+
+\def\db{
+\vbox{\@ils\halign{&####\cr
+\td@@\cr
+&\td@@\cr
+&&\fd@@\cr
+\sk@p{.5em}\cr}}}
+
+\def\ch{
+\vbox{\@ils\halign{&####\cr
+\sk@p{.5em}\cr
+&&\fc@@\cr
+&\tc@@\cr
+\tc@@\cr
+\sk@p{2.5em}\cr}}}
+
+\def\dh{
+\vbox{\@ils\halign{&####\cr
+\sk@p{.5em}\cr
+\td@@\cr
+&\td@@\cr
+&&\fd@@\cr
+\sk@p{2.5em}\cr}}}
+
+\def\c{
+\vbox{\@ils\halign{&####\cr
+&&\fc@\cr
+&\tc@\cr
+\tc@\cr
+\sk@p{.75em}\cr}}}
+
+\def\d{
+\vbox{\@ils\halign{&####\cr
+\td@\cr
+&\td@\cr
+&&\fd@\cr
+&&&\sk@p{.75em}\cr}}}
+
+\newdimen\@w
+\@w=.2pt
+\newdimen\@l
+\setbox100\hbox{0}
+\@l=\wd100
+\advance\@l by -\@w
+\divide\@l by 2
+\newdimen\@r
+\@r=\@l
+\advance\@r by \@w
+
+\def\str@t{\vrule height 10pt depth 4pt width 0pt}
+\def\c@##1{\hfil$\str@t##1$\hfil}
+\def\@n{\kern.5em}
+
+\def\z{\hbox to 1em{\hfil\str@t\kern\@l\vrule width\@w\kern-\@r0\hfil}}
+\def\l{\vrule width\@w}
+\def\bb{\vrule\kern1pt\vrule}
+\def\bg{\omit\kern1pt\vrule\hfil}
+\def\bd{\omit\hfil\vrule\kern1pt}
+\def\mI{\,-\infty\,}
+\def\pI{\,+\infty\,}
+
+\let\\=\cr
+\def\filet{\noalign{\hrule}}
+\def\dr##1{\omit\quad\hfil$##1$\hfil&\quad}
+\def\ga##1{\quad&\omit\hfil$##1$\hfil\quad}
+\def\m##1{\vbox{\@ils\halign{&####\cr$\smash{##1}$\cr\sk@p{2em}\cr}}}
+\def\h##1{\vbox{\@ils\halign{&####\cr\str@t${##1}$\cr\sk@p{3.5em}\cr}}}
+
+\hbox\bgroup\vrule\vbox\bgroup
+\halign\bgroup\c@{\@n##\@n}\vrule&&\c@{##}\cr\filet}
+
+\def\evariations{\filet\egroup\egroup\vrule\egroup\egroup\egroup}
+
+\catcode`@=12
+
+\endinput
diff --git a/macros/generic/vrb/readme b/macros/generic/vrb/readme
new file mode 100644
index 0000000000..4e46165e27
--- /dev/null
+++ b/macros/generic/vrb/readme
@@ -0,0 +1,20 @@
+%Contents: Verbatim macros via plain TeX, to be used with AnyTeX.
+%Version: 1.1 of March 1994.
+%Purpose: Handling verbatims with user guidance (options) to be
+% provided via \everyverbatim and/or \thisverbatim. (New approach.)
+% To be used with TeX, LaTeX, ...
+% Examples of guidance: verbatim input from file
+% escapecharacter and metacode
+% block comment
+% (selective) numbering of verbatim lines
+% inline verbatim (with minimal | tags).
+% Placement within context is parameterized via
+% \preverbatim and \postverbatim with as default \medskip.
+%Author: C.G. van der Laan, Hunzeweg 57, 9893PB, Garnwerd. The Netherlands.
+% 05941-1525., cgl@risc1.rug.nl.
+%Documentation: MAPS 94.1, as a spin-off in the TUGboat BLUes article,
+% which discusses the TUGboat styles and descendants.
+%Keywords: verbatim, escape character, block comment, file verbatim inclusion.
+%Examples of use (after \input vrb.tex) %the macros, as appended below
+%
+%\input vrb.tex %File included for convenience
diff --git a/macros/generic/vrb/vrb.tex b/macros/generic/vrb/vrb.tex
new file mode 100644
index 0000000000..7b18bfcc2d
--- /dev/null
+++ b/macros/generic/vrb/vrb.tex
@@ -0,0 +1,144 @@
+%Author: C.G. van der Laan, Hunzeweg 57, 9893PB
+% Garnwerd, The Netherlands
+% 05941-1525, cgl@risc1.rug.nl.
+%Purpose: Verbatim macros via plain TeX,
+% to be used with AnyTeX.
+% *numvrb
+%User toks variables
+\newtoks\thisverbatim
+\newtoks\everyverbatim
+%
+%User customization
+\let\preverbatim\medskip
+\let\postverbatim\medbreak
+% *vrblin100
+%User `options': \numvrb
+\newcount\vrblin
+\def\numvrb{\vrblin0
+ \everypar{\advance\vrblin1
+ \llap{\sevenrm\the\vrblin\quad}}}
+\def\nonum{\everypar={}}
+% : \emc
+\def\makeescape#1{\catcode`#1=0 }
+\def\makeactive#1{\catcode`#1=13 }
+{\makeactive\<
+ \gdef\emc{\makeactive\<%
+ \def<##1>{$\langle##1\rangle$}}}
+% *vrblin200
+%User macro
+\def\verbatim{\preverbatim\begingroup
+ \tt\setupverbatim
+ \the\everyverbatim\relax
+ \the\thisverbatim\relax
+ \verbatimgobble}
+%
+\def\endverbatim{\endgroup\postverbatim
+ \thisverbatim={}}
+%
+\def\setupverbatim{\makeactive\`%
+ \let\!=!\makeescape\!%Knuth&Levy
+ \def\par{\leavevmode\endgraf}%TB381
+ \obeylines\uncatcodespecials
+ \obeyspaces}
+%
+{\obeyspaces\global\let =\
+ \obeylines\gdef\verbatimgobble#1^^M{}%
+ \makeactive\` \gdef`{\relax\lq}}%TB381
+%
+\def\uncatcodespecials{\def\do##1{%
+ \catcode`##1=12 }\dospecials}
+% *vrblin250
+%Minimal | tag for inline verbatim
+\def\vrt{{\tt\char`\|}}\makeactive\|
+\def|{\bgroup\tt\setupverbatim
+ \the\everyverbatim\relax
+ \the\thisverbatim\relax
+ \def|{\egroup\thisverbatim{}}}
+%\endinput %14/2/94 cgl@risc1.rug.nl
+% *nonum
+%Contents
+%Newtoks
+% \thisverbatim.................2
+% \everyverbatim................3
+%Customing
+% \preverbatim..................6
+% \postverbatim.................7
+%Options
+% \numvrb.....................103
+% \nonum......................106
+% \makeescape.................108
+% \makeactive.................109
+% \emc........................111
+% <#1>........................112
+%User macro
+% \verbatim...................202
+% \endverbatim................208
+% \setupverbatim..............211
+% \verbatimgobble.............218
+% `...........................219
+% \uncatcodespecials..........221
+%Inline verbatim
+% \vrt........................252
+% |...........................253
+%History of changes vrb.tex
+%March 94 Block comments omitted.
+% Verbatim mode with exclamation
+% mark as escape char.
+%Febr 1994 Release Version 1.
+%
+%Examples. (Extract the above vrt.tex file
+% and store this as vrt.tex.)
+%
+%
+%1. To handle other fonts via change and emc (enable metacode).
+\thisverbatim={\emc}
+\verbatim
+Some <meta code> and
+blah, blah, ... !it
+Now text in italics!tt
+and back again in tt
+!endverbatim
+%
+%2. To handle numbering and verbatim file inclusion
+\everyverbatim={\numvrb}
+\thisverbatim={\makeescape\*
+ \catcode`\|=12
+ \catcode`\!=12
+ \input vrb.tex
+ }
+\verbatim
+Extras after file
+*endverbatim
+%
+%3. To restart (line)numbers
+\thisverbatim={\vrblin0 }
+\verbatim
+Just some text with
+line numbers restarted.
+
+
+After two blank lines.
+!endverbatim
+%
+%4. In-line with alias tags
+{\makeactive\|
+\thisverbatim{\emc}
+Before |inline <text and \cs>| after.
+}
+\bye
+%History of changes
+%March 1994 Selective numbering added as example.
+%12 Feb 1994 File verbatim inclusion simplified. Just supply
+% as part of the replacement text of \thisverbatim
+% \input ... .
+% Now more than one file can be specified.
+% Moreover, the encoding is simpler.
+% Furthermore, the coding of the second | as alias
+% for \endverbatim is simplified, similar to manmac.
+% Last but not least the deficiencies as mentioned
+% in TeXbook p.381 have been incorporated.
+% In-line verbatim only via alias tags.
+%12 Jan 1994 \ea\relax omitted and file rearranged as test.
+% \processl improved to handle blank lines.
+% in-line verbatim added, explicitly
+% Jan 1994 Name changes and submission to CTAN
diff --git a/macros/generic/witharrows/README.md b/macros/generic/witharrows/README.md
new file mode 100644
index 0000000000..fa5444c5e1
--- /dev/null
+++ b/macros/generic/witharrows/README.md
@@ -0,0 +1,32 @@
+# Readme for the package witharrows
+
+Author : F. Pantigny (`fpantigny@wanadoo.fr`).
+
+CTAN page : `https://ctan.org/pkg/witharrows`
+
+## License
+The extension `witharrows` for TeX and LaTeX is distributed under the LPPL 1.3 license.
+
+## Presentation
+
+The LaTeX package `witharrows` provides environments `{WithArrows}` and `{DispWithArrows}`
+similar to the environments `{aligned}` and `{align}` of `amsmath` but with the possibility to draw arrows on the right side of the alignment. These arrows are usually used to give explanations concerning the mathematical calculus presented.
+
+The extension `witharrows` can also be used with plain-TeX.
+
+
+
+## Installation
+
+The package `witharrows` is present in the distributions MiKTeX, TeXLive and MacTeX.
+
+For a manual installation:
+
+* put the files `witharrows.ins` dans `witharrows.dtx` in the same directory;
+* run `latex witharrows.ins`.
+
+The files `witharrows.sty` and `witharrows.tex` will be generated.
+
+The file `witharrows.sty` is the only file necessary to use the extension `witharrows` with LaTeX (with `\usepakage{witharrows}`).
+
+The file `witharrows.tex` is the only file necessary to use the extension `witharrows` with plain-TeX (with `\input{witharrows.tex}`).
diff --git a/macros/generic/witharrows/witharrows-french.pdf b/macros/generic/witharrows/witharrows-french.pdf
new file mode 100644
index 0000000000..dfc63d2609
--- /dev/null
+++ b/macros/generic/witharrows/witharrows-french.pdf
Binary files differ
diff --git a/macros/generic/witharrows/witharrows-french.tex b/macros/generic/witharrows/witharrows-french.tex
new file mode 100644
index 0000000000..9d3f57b5b4
--- /dev/null
+++ b/macros/generic/witharrows/witharrows-french.tex
@@ -0,0 +1,2275 @@
+% -*- coding: utf-8 ; -*-
+\documentclass[dvipsnames]{article}% dvipsnames est pour xcolor (chargé par Tikz)
+\usepackage{xltxtra}
+\usepackage[french]{babel}
+
+\usepackage[xetex]{geometry}
+\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}
+
+\usepackage{amsmath}
+\usepackage{color}
+\usepackage{verbatim}
+\usepackage{mathtools}
+\usepackage[footnotehyper]{witharrows}
+\usepackage{amsfonts}
+\usepackage{amssymb}
+\usepackage{varwidth}
+\usetikzlibrary{calc}
+\usepackage[only,llbracket,rrbracket]{stmaryrd}
+
+\usepackage{fancyvrb}
+\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
+
+\usepackage{titlesec}
+\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
+\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}
+
+
+\def\interitem{\vskip 7mm plus 2 mm minus 3mm}
+\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
+
+\skip \footins = 2 \bigskipamount
+
+\usepackage[hyperfootnotes = false]{hyperref}
+
+\hypersetup{
+ pdfinfo = {
+ Title = { L’extension witharrows },
+ Subject = { Une extension pour plain-TeX et LaTeX } ,
+ Author = { F. Pantigny }
+ }
+}
+
+\NewDocumentEnvironment {scope} {} {} {}
+
+\NewDocumentCommand {\pkg} {m} {\textsf{#1}}
+\NewDocumentCommand {\cls} {m} {\textsf{#1}}
+
+\setlength{\parindent}{0pt}
+
+
+\begin{document}
+
+\VerbatimFootnotes
+
+\title{L'extension \pkg{witharrows} pour plain-TeX et LaTeX\thanks{Ce document correspond à la
+version~\myfileversion\space de \pkg{witharrows}, à la date du~\myfiledate.}}
+\author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}}
+
+\maketitle
+
+\begin{abstract}
+L'extension \pkg{witharrows} fournit des environments \verb|{WithArrows}| et
+\verb|{DispWithArrows}| similaires aux environnements \verb|{aligned}| et \verb|{align}| de
+l'\pkg{amsmath} mais avec la possibilité de dessiner des flèches sur le côté droit.
+Ces flèches sont habituellement utilisées pour donner des explications concernant
+le calcul mathématique présenté.
+\end{abstract}
+
+
+\vspace{1cm}
+Dans la suite, on décrira l'extension LaTeX \pkg{witharrows} (néanmoins \pkg{witharrows} peut aussi être utilisé en
+plain-TeX : voir à ce sujet p.~\pageref{plain-TeX}). Cette extension peut être utilisée avec \verb|xelatex|,
+\verb|lualatex|, \verb|pdflatex| mais aussi avec le cheminement classique \verb|latex|-\verb|dvips|-\verb|ps2pdf|
+(ou Adobe Distiller). L'extension \pkg{witharrows} charge les extensions \pkg{expl3}, \pkg{xparse}, \pkg{tikz}
+ainsi que les extensions Tikz \pkg{arrows.meta} et \pkg{bending}. Les flèches sont tracées avec Tikz et donc
+plusieurs compilations peuvent être nécessaires.
+
+\bigskip
+Cette extension fournit un environnement \verb|{WithArrows}| pour construire des alignements d'équations
+avec des flèches pour les explications sur le côté droit.
+
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 ~emphase#\Arrow{on développe}@ \\
+ & = a^2 + 2a + 1 % ne pas mettre de \\ ici
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+
+
+\medskip
+La flèche a été tracée avec la commande \verb|\Arrow| dans la rangée dont la flèche part. La commande \verb|\Arrow|
+doit être utilisée dans la seconde colonne (le mieux est de la mettre à la fin de la ligne comme dans l'exemple
+précédent).
+
+
+\medskip
+Comme on le voit, l'environnement \verb|{WithArrows}| est proche de l'environnement
+\verb|{aligned}| de l'\pkg{amsmath}. L'extension \pkg{witharrows}
+propose aussi un environnement \verb|{DispWithArrows}| qui est similaire à l'environnement \verb|{align}| de
+l'\pkg{amsmath}: cf. p. \pageref{DispWithArrows}.
+
+
+\section{Options pour la forme des flèches}
+
+La commande \verb|\Arrow| a plusieurs options. Ces options peuvent être placées entre crochets, avant, ou après,
+l'argument obligatoire.
+
+L'option \verb|jump| indique le nombre\footnote{Il n'est pas possible de donner une valeur négative à \verb|jump|.
+Voir plus loin (p.~\pageref{Backwards}) la manière de tracer une flèche qui remonte.} de rangées que la flèche doit sauter (la valeur par défaut est, bien
+entendu,~$1$).
+
+
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2 \Arrow[~emphase#jump=2@]{on développe} \\
+ & = (a+b)^2 + 2(a+b) +1 \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2 \Arrow[jump=1+1]{on développe} \\
+ & = (a+b)^2 + 2(a+b) +1 \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+
+\interitem
+Il est possible de faire partir plusieurs flèches d'une même rangée.
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2 ~emphase#\Arrow{}\Arrow{}[jump=2]@ \\
+ & = (a+b)^2 + 2(a+b) +1 \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2 \Arrow{}\Arrow{}[jump=2] \\
+ & = (a+b)^2 + 2(a+b) +1 \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+
+\interitem
+L'option \verb|xoffset| décale la flèche vers la droite (habituellement, on ne souhaite pas que les flèches soient
+collées au texte). La valeur par défaut de \verb|xoffset| est de $3$~mm.
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2
+\Arrow[~emphase#xoffset=1cm@]{avec \texttt{xoffset=1cm}} \\
+ & = (a+b)^2 + 2(a+b) +1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2
+\Arrow[xoffset=1cm]{avec \texttt{xoffset=1cm}} \\
+ & = (a+b)^2 + 2(a+b) +1
+\end{WithArrows}$
+
+
+\interitem
+Les flèches sont tracées avec Tikz. C'est pourquoi la commande \verb|\Arrow| a une option
+\verb|tikz| qui peut être utilisée pour donner à la flèche (en fait, à la commande \verb|\path| de
+Tikz) les options proposées par Tikz pour une telle flèche. L'exemple suivant fournit une flèche en trait épais.
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[~emphase#tikz=thick@]{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[tikz=thick]{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\interitem
+Il est également possible de changer les pointes de flèche. Par exemple, nous pouvons tracer une flèche
+qui remonte vers le haut avec l'option Tikz~\verb|<-|.\label{Backwards}
+
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow~emphase#[tikz=<-]@{on factorise} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[tikz=<-]{on factorise} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\interitem
+Il est aussi possible de supprimer les deux pointes de flèche avec l'option Tikz «\verb|-|».
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[~emphase#tikz=-@]{très classique} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[tikz=-]{très classique} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\interitem
+Pour avoir des flèches droites et non incurvées, il convient d'utiliser l'option Tikz
+«\verb|bend left = 0|».
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow~emphase#[tikz={bend left=0}]@{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[tikz={bend left=0}]{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\smallskip
+En fait, il est possible de modifier de manière plus drastique la forme des flèches avec l'option
+\verb|tikz-code| (présentée p.~\pageref{tikz-code}).
+
+\interitem
+Il est possible d'utiliser l'option «\verb|text width|» pour contrôler la largeur du texte associé à la
+flèche.\footnote{Il est possible d'éviter les coupures de mots dans ces étiquettes
+avec l'option «\verb|align = flush left|» de Tikz.}
+%
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2
+\Arrow[jump=2,~emphase#tikz={text width=5.3cm}@]{Nous avons développé...} \\
+ & = (a+b)^2 + 2(a+b) +1 \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = \bigl((a+b)+1\bigr)^2
+\Arrow[jump=2,tikz={text width=5.3cm}]{Nous avons développé en deux étapes mais il aurait été plus habile
+ d'utiliser la formule du multinôme.} \\
+& = (a+b)^2 + 2(a+b) +1 \\
+& = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+
+
+\bigskip
+Dans les environnements \verb|{DispWithArrows}| et \verb|{DispWithArrows*}|, il y a une
+option \verb|wrap-lines|. Lorsque cette option est utilisée, les lignes des étiquettes sont
+automatiquement coupées sur la marge droite : voir p.~\pageref{wrap-lines}.
+
+\interitem
+Si on veut changer la fonte du texte associé à une flèche, on peut, bien entendu, placer une commande comme
+\verb|\bfseries|, \verb|\large| ou \verb|\sffamily| au début du texte.
+Mais, par défaut, les étiquettes sont composées avec une combinaison
+de \verb|\small| et \verb|\itshape|. En ajoutant \verb|\bfseries| au début du texte, on ne va pas supprimer le
+\verb|\small| et le \verb|\itshape| et, par conséquent, on aura un texte en gras, italique et petite taille.
+%
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{~emphase#\bfseries@ on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{\bfseries on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\interitem
+Il est possible de placer des commandes \verb|\\| dans le texte pour forcer des retours à la ligne\footnote{Par
+défaut, ce n'est pas possible dans un nœud Tikz. Néanmoins, dans \pkg{witharrows},
+les nœuds sont construits avec l'option \verb|align=left|, et, ainsi, cela devient possible.}. Néanmoins, si on utilise des commandes \verb|\\|, une instruction de fonte placée au début
+du texte aura un effet seulement jusqu'à la première occurrence de~\verb|\\| (comme
+dans un environnement \verb|{tabular}|). C'est pourquoi Tikz fournit une option
+\verb|font| pour modifier la fonte de tout le texte de l'étiquette. Cette fois-ci, si on utilise une option
+\verb|tikz={font={\bfseries}}|, la spécification par défaut constituée par \verb|\small| et \verb|\itshape| va être
+écrasée.
+%
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[~emphase#tikz={font={\bfseries}}@]{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow[tikz={font={\bfseries}}]{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\medskip
+Si on veut exactement le même résultat que précédemment, on doit donner à l'option \verb|font| la valeur
+\verb|\itshape\small\bfseries|.
+
+
+\interitem
+Presque toutes les options peuvent être données entre crochets à l'environnement \verb|{WithArrows}|. Il ne doit
+pas y avoir d'espace entre le \verb|\begin{WithArrows}| et le crochet ouvrant (\verb|[|) des options de
+l'environnement. Ces options s'appliquent à toutes les flèches de l'environnement.\footnote{Elles s'appliquent
+ aussi aux environnements imbriqués dans un environnement \verb|{WithArrows}| donné (avec des exceptions attendues
+ pour les options \verb|interline|, \verb|code-before| et \verb|code-after|).}
+%
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#tikz=blue@]
+A & = \bigl((a+b)+1\bigr)^2 \Arrow{premier développement} \\
+ & = (a+b)^2 + 2(a+b) +1 \Arrow{second développement} \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}[tikz=blue]
+A & = \bigl((a+b)+1\bigr)^2 \Arrow{premier développement} \\
+ & = (a+b)^2 + 2(a+b) +1 \Arrow{second développement} \\
+ & = a^2 + 2ab + b^2 + 2a + 2b +1
+\end{WithArrows}$
+
+
+\interitem
+L'environnement \verb|{WithArrows}| a une option \verb|displaystyle|. Avec cette option,
+tous les éléments sont composés en \verb|\displaystyle| (comme dans un environnement
+\verb|{aligned}| de l'\pkg{amsmath}).
+
+\medskip
+Sans l'option \verb|displaystyle|:
+%
+\begin{Verbatim}
+$\begin{WithArrows}
+\int_0^1 (x+1)^2 dx
+& = \int_0^1 (x^2+2x+1) dx
+\Arrow{linéarité de l'intégration} \\
+& = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
+& = \frac13 + 2\frac12 + 1 \\
+& = \frac73
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+\int_0^1 (x+1)^2 dx
+& = \int_0^1 (x^2+2x+1) dx
+\Arrow{linéarité de l'intégration} \\
+& = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
+& = \frac13 + 2\frac12 + 1 \\
+& = \frac73
+\end{WithArrows}$
+
+
+\medskip
+Le même exemple avec l'option \verb|displaystyle|:\par\nobreak
+
+$\begin{WithArrows}[displaystyle]
+\int_0^1 (x+1)^2 dx
+& = \int_0^1 (x^2+2x+1) dx
+\Arrow{linéarité de l'intégration} \\
+& = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
+& = \frac13 + 2\frac12 + 1 \\
+& = \frac73
+\end{WithArrows}$
+
+
+
+\interitem
+Presque toutes les options peuvent aussi être fixées au niveau du document avec la commande
+\verb|\WithArrowsOptions|. Dans ce cas, la portée des déclarations est le groupe TeX courant (de telles
+déclarations sont parfois qualifiées de «semi-globales»). Par exemple, si nous voulons que tous les environnements
+\verb|{WithArrows}| soient composés en \verb|\displaystyle| avec des flèches bleues, nous pouvons écrire
+\verb|\WithArrowsOptions{displaystyle,tikz=blue}|.\footnote{Il est aussi possible de configurer \pkg{witharrows} en
+ modifiant le style Tikz \verb|WithArrows/arrow| qui est le style utilisé par \pkg{witharrows} lors du tracé d'une
+ flèche. Par exemple, pour avoir les étiquettes en bleu et en caractères droits, on peut utiliser l'instruction
+ suivante : \verb|\tikzset{WithArrows/arrow/.append style = {blue,font = {}}}|.}
+
+\begin{Verbatim}
+~emphase#\WithArrowsOptions{displaystyle,tikz=blue}@
+$\begin{WithArrows}
+\sum_{i=1}^n (x_i+1)^2
+& = \sum_{i=1}^n (x_i^2+2x_i+1) \Arrow{par linéarité}\\
+& = \sum_{i=1}^n x_i^2 + 2\sum_{i=1}^nx_i+ n
+\end{WithArrows}$
+\end{Verbatim}
+
+\begin{scope}
+\WithArrowsOptions{displaystyle,tikz=blue}
+$\begin{WithArrows}
+\sum_{i=1}^n (x_i+1)^2
+& = \sum_{i=1}^n (x_i^2+2x_i+1) \Arrow{par linéarité}\\
+& = \sum_{i=1}^n x_i^2 + 2\sum_{i=1}^nx_i+ n
+\end{WithArrows}$
+\end{scope}
+
+
+\interitem
+La commande \verb|\Arrow| est reconnue seulement dans les environnements \verb|{WithArrows}|. Si on
+dispose d'une commande \verb|\Arrow| précédemment définie, il est possible de continuer à l'utiliser à
+l'extérieur des environnements \verb|{WithArrows}|.
+
+Néanmoins, une commande \verb|\Arrow| définie précédemment pourrait encore être utile dans un environnement \verb|{WithArrows}|.
+Si vous voulez l'utiliser dans un tel environnement, il est possible de changer le nom de la commande \verb|\Arrow| de
+l'extension \pkg{witharrows} grâce à une option \verb|command-name|\footnote{Pour des raisons historiques, il y a
+ un alias pour cette option : \verb|CommandeName|.} dédiée. Le nouveau nom de la commande doit être fourni à
+l'option \emph{sans} la contre-oblique.
+%
+\begin{Verbatim}
+\NewDocumentCommand {\Arrow} {} {\longmapsto}
+$\begin{WithArrows}[~emphase#command-name=Explication@]
+f & = \bigl(x \Arrow (x+1)^2\bigr)
+~emphase#\Explication{on travaille directement sur les fonctions}@\\
+& = \bigl(x \Arrow x^2+2x+1\bigr)
+\end{WithArrows}$
+\end{Verbatim}
+%
+\begin{scope}
+\NewDocumentCommand {\Arrow} {} {\longmapsto}
+$\begin{WithArrows}[command-name=Explication]
+f & = \bigl(x \Arrow (x+1)^2\bigr)
+\Explication{on travaille directement sur les fonctions}\\
+& = \bigl(x \Arrow x^2+2x+1\bigr)
+\end{WithArrows}$
+\end{scope}
+
+
+\interitem
+L'environnement \verb|{WithArrows}| fournit aussi deux options \verb|code-before| et
+\verb|code-after|\footnote{Pour des raisons historiques, il y a aussi des alias pour ces options :
+ \verb|CodeBefore| et \verb|CodeAfter|.} pour du code LaTeX qui sera exécuté au début et à la fin de
+l'environnement. Ces options ne sont pas conçues pour être utilisées comme des \emph{hooks} (elles sont disponibles
+uniquement au niveau de l'environnement et ne s'appliquent pas aux environnements imbriqués).
+%
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#code-before = \color{blue}@]
+A & = (a+b)^2 \Arrow{on développe} \\
+ & = a^2 + 2ab + b^2
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}[code-before = \color{blue}]
+A & = (a+b)^2 \Arrow{on développe} \\
+ & = a^2 + 2ab + b^2
+\end{WithArrows}$
+
+\medskip
+Des commandes spéciales sont disponibles dans le \verb|code-after| : une commande \verb|\WithArrowsNbLines| qui
+indique le nombre de lignes (=rangées) de l'environnement courant (pour TeX, il s'agit d'une commande et non d'un
+compteur), une forme spéciale de la commande \verb|\Arrow| et la commande \verb|\MultiArrow| : ces commandes sont
+décrites à partir de la page~\pageref{NestedEnv}.
+
+\section{Nombre et formats des colonnes}
+
+Jusqu'à présent, nous n'avons utilisé l'environnement \verb|{WithArrows}| qu'avec deux colonnes. Néanmoins, il est
+possible de l'utiliser avec un nombre arbitraire de colonnes grâce à l'option \verb|format|. La valeur
+donnée à cette option est similaire au préambule d'un environnement \verb|{array}|: il s'agit d'une séquence de
+lettres \verb|r|, \verb|c| et \verb|l|. La valeur par défaut de cette option \verb|format| est, en fait, \verb|rl|.
+
+
+\bigskip
+Par exemple, si on veut seulement une colonne alignée à gauche, on peut utiliser l'option \verb|format=l|.
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#format = l@]
+f(x) \ge g(x) \Arrow{on élève les deux membres au carré} \\
+f(x)^2 \ge g(x)^2 \Arrow{on fait tout passer à gauche} \\
+f(x)^2 - g(x)^2 \ge 0
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}[format = l]
+f(x) \ge g(x) \Arrow{on élève les deux membres au carré} \\
+f(x)^2 \ge g(x)^2 \Arrow{on fait tout passer à gauche} \\
+f(x)^2 - g(x)^2 \ge 0
+\end{WithArrows}$
+
+\interitem
+Dans l'exemple suivant, on utilise cinq colonnes toutes centrées (l'environnement
+\verb|{DispWithArrows*}| utilisé est présenté p.~\pageref{DispWithArrows}).
+
+\begin{Verbatim}
+\begin{DispWithArrows*}[~emphase#format = ccccc@,
+ wrap-lines,
+ tikz = {align = flush left},
+ interline=1mm]
+k & \;\le\; & t & \;\le\; & k+1 \\
+\frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k}
+\Arrow{nous pouvons intégrer les inégalités puisque $k \leq k+1$ } \\
+\int\limits_k^{k+1} \frac{dt}{k+1}
+& \le & \int\limits_k^{k+1} \frac{dt}{t}
+& \le & \int\limits_k^{k+1} \frac{dt}{k} \\
+\frac{1}{k+1} & \le & \ln(k+1)-\ln(k) & \le & \frac{1}{k}
+\end{DispWithArrows*}
+\end{Verbatim}
+\begin{DispWithArrows*}[format = ccccc,
+ wrap-lines,
+ tikz = {align = flush left},
+ interline=1mm]
+k & \;\le\; & t & \;\le\; & k+1 \\
+\frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k}
+\Arrow{nous pouvons intégrer les inégalités puisque $k \leq k+1$} \\
+\int\limits_k^{k+1} \frac{dt}{k+1}
+& \le & \int\limits_k^{k+1} \frac{dt}{t}
+& \le & \int\limits_k^{k+1} \frac{dt}{k} \\
+\frac{1}{k+1} & \le & \ln(k+1)-\ln(k) & \le & \frac{1}{k}
+\end{DispWithArrows*}
+
+
+\section{Positionnement précis des flèches}
+
+L'environnement \verb|{WithArrows}| construit, lors de la composition du tableau,
+deux séries de nœuds représentés en rouge dans l'exemple suivant.\footnote{L'option
+\verb|show-nodes| peut être utilisée pour visualiser ces nœuds. Les nœuds sont en fait des nœuds Tikz de forme
+rectangulaire et de largeur nulle. Une flèche entre deux nœuds part de l'ancre sud (\emph{south
+ anchor}) du premier nœud et arrive à l'ancre nord (\emph{north anchor}) du deuxième nœud.}
+
+
+\smallskip
+$\begin{WithArrows}[displaystyle,show-nodes]
+I
+& = \int_{\frac{\pi}4}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)(-d u) \\
+& = \int_0^{\frac{\pi}4} \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)d u \\
+& = \int_0^{\frac{\pi}4}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
+& =\int_0^{\frac{\pi}4}\ln\left(\frac{1+\tan u+1-\tan u}{1+\tan u}\right) d u \\
+& =\int_0^{\frac{\pi}4} \ln\left(\frac2{1+\tan u}\right)\, d u\\
+& =\int_0^{\frac{\pi}4}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
+& =\frac{\pi}4\ln2-\int_0^{\frac{\pi}4}\ln(1+\tan u)\, d u \\
+& =\frac{\pi}4\ln2-I
+\end{WithArrows}$
+
+\bigskip
+Les nœuds sur la gauche sont à la fin de chaque ligne de texte. Ces nœuds seront appelés \emph{nœuds de gauche}. Les
+nœuds du côté droit sont alignés verticalement sur le bord droit de l'alignement d'équations. Ces nœuds seront
+appelés \emph{nœuds de droite}.
+
+
+Par défaut, les flèches utilisent les nœuds de droite. Nous dirons que ces flèches sont dans le mode \verb|rr| (\emph{r}
+for \emph{right} en anglais). Ces flèches sont verticales (nous dirons qu'une flèche est \emph{verticale} lorsque
+ses deux extrémités sont à la même abscisse).
+
+
+
+\smallskip
+Néanmoins, il est possible d'utiliser les nœuds de gauche, ou une combinaison de nœuds de gauche et de droite avec
+l'une des options \verb|lr|, \verb|rl| et \verb|ll| (\emph{l} for \emph{left} en anglais). Ces flèches sont, la
+plupart du temps, non verticales.
+
+
+Therefore
+$\begin{WithArrows}[displaystyle]
+I
+& = \int_{\frac{\pi}4}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)(-d u)
+\Arrow[lr]{Cette flèche utilise une option \texttt{lr}.}\\
+& = \int_0^{\frac{\pi}4} \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)d u \\
+& = \int_0^{\frac{\pi}4}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
+& =\int_0^{\frac{\pi}4}\ln\left(\frac{1+\tan u+1-\tan u}{1+\tan u}\right) d u
+\Arrow[ll,jump=2,tikz={text width = 5cm}]{Cette flèche utilise une option \texttt{ll}
+et une option \texttt{jump} fixée à $2$}\\
+& =\int_0^{\frac{\pi}4} \ln\left(\frac2{1+\tan u}\right)\, d u\\
+& =\int_0^{\frac{\pi}4}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
+& =\frac{\pi}4\ln2-\int_0^{\frac{\pi}4}\ln(1+\tan u)\, d u \\
+& =\frac{\pi}4\ln2-I
+\end{WithArrows}$
+
+
+\interitem
+Il y a aussi une option nommée \verb|i| (\emph{i} pour \emph{intermédiaire}). Avec cette option, la flèche est
+verticale et calée à gauche.
+
+\begin{Verbatim}
+$\begin{WithArrows}
+(a+b)(a+ib)(a-b)(a-ib)
+& = (a+b)(a-b)\cdot(a+ib)(a-ib) \\
+& = (a^2-b^2)(a^2+b^2) \Arrow~emphase#[i]@{parce que $(x-y)(x+y)=x^2-y^2$}\\
+& = a^4-b^4
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+(a+b)(a+ib)(a-b)(a-ib)
+& = (a+b)(a-b)\cdot(a+ib)(a-ib) \\
+& = (a^2-b^2)(a^2+b^2) \Arrow[i]{parce que $(x-y)(x+y)=x^2-y^2$}\\
+& = a^4-b^4
+\end{WithArrows}$
+
+
+\interitem
+L'environnement \verb|{WithArrows}| propose aussi une option \verb|group|. Avec cette option,
+\emph{toutes} les flèches de l'environnement sont regroupées sur une même verticale calée à gauche.
+%
+\begin{Verbatim}[formatcom=\small\color{gray}]
+$\begin{WithArrows}[~emphase#displaystyle,group@]
+2xy'-3y=\sqrt x
+& \Longleftrightarrow 2x(K'y_0+Ky_0')-3Ky_0 = \sqrt x \\
+& \Longleftrightarrow 2xK'y_0 + K(2xy_0'-3y_0) = \sqrt x \\
+& \Longleftrightarrow 2x K'y_0 = \sqrt x \Arrow{...}\\
+...
+\end{WithArrows}$
+\end{Verbatim}
+
+
+$\begin{WithArrows}[displaystyle,group]
+2xy'-3y=\sqrt x
+& \Longleftrightarrow 2x(K'y_0+Ky_0')-3Ky_0 = \sqrt x \\
+& \Longleftrightarrow 2xK'y_0 + K(2xy_0'-3y_0) = \sqrt x \\
+& \Longleftrightarrow 2x K'y_0 = \sqrt x \Arrow{on remplace $y_0$ par sa valeur}\\
+& \Longleftrightarrow 2xK'x^{\frac32} = x^{\frac12} \Arrow{simplification par $x$}\\
+& \Longleftrightarrow K' = \tfrac1{2x^2} \Arrow{on primitive}\\
+& \Longleftrightarrow K = -\tfrac1{2x}
+\end{WithArrows}$
+
+
+\bigskip
+L'environnement \verb|{WithArrows}| fournit encore une autre option, nommée \verb|groups| (avec un \emph{s} dans le
+nom). Avec cette option, les flèches sont divisées en plusieurs «groupes». Chaque groupe est un ensemble de flèches
+connectées entre elles\footnote{Plus précisément : pour chaque flèche $a$, notons $i(a)$ le numéro de sa rangée de
+ départ et
+ $f(a)$ le numéro de sa rangée d'arrivée ; pour deux flèches $a$ et $b$, nous noterons $a \sim b$ lorsque
+ $\llbracket i(a),f(a)\rrbracket \cap \llbracket i(b),f(b)\rrbracket \neq \varnothing$ ; les groupes sont les
+ classes d'équivalence de la clôture transitive de la relation $\sim$.}. Toutes les flèches d'un même groupe sont placées sur
+une même verticale qui est calée à gauche.
+
+
+\bigskip
+$\begin{WithArrows}[groups]
+A & = B \Arrow{one} \\
+ & = C+D \Arrow{two} \\
+ & = D' \\
+ & = E+F+G+H+I \\
+ & = K + L + M \Arrow{three}\\
+ & = N \Arrow{four}\\
+ & = O
+\end{WithArrows}$
+
+\bigskip
+Dans un environnement qui utilise l'option \verb|group| ou l'option \verb|groups|, il est encore possible de donner
+une option de position (\verb|ll|, \verb|lr|, \verb|rl|, \verb|rr| ou \verb|i|) à une flèche individuelle. Une
+telle flèche sera tracée indépendamment des groupes. Il est aussi possible de commencer un nouveau groupe avec
+l'option \verb|new-group| pour une certaine flèche.
+
+
+\bigskip
+Si on le souhaite, on peut passer l'option \verb|group| ou \verb|groups| à la commande \verb|WithArrowsOptions| de
+telle sorte qu'elle deviendra la valeur par défaut (jusqu'à la fin du groupe TeX). Dans ce cas, il est encore
+possible de revenir au comportement par défaut pour un environnement \verb|{WithArrows}| donné avec l'option
+\verb|rr|: \verb|\begin{WithArrows}[rr]|.
+
+
+\vspace{1cm}
+Dans l'exemple suivant, nous avons utilisé l'option \verb|group| pour l'environnement
+et l'option \verb|rr| pour la dernière flèche (c'est pourquoi cette dernière flèche n'est pas alignée avec les
+premières).
+
+$\begin{WithArrows}[interline=1mm,group]
+\sum\limits_{k=0}^n\frac{\cos kx}{\cos^k x}
+& = \sum\limits_{k=0}^n \frac{\Re (e^{ikx})}{(\cos x)^k}
+\Arrow{$(\cos x)^k$ est réel} \\
+& = \sum\limits_{k=0}^n \Re\left(\frac{e^{ikx}}{(\cos x)^k}\right)
+\Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+& = \Re \left(\sum\limits_{k=0}^n \left(\frac{e^{ix}}{\cos x}\right)^k\right)
+\Arrow{somme de termes d'une suite géométrique} \\
+& = \Re \left(\frac{1-\left(\frac{e^{ix}}{\cos x}\right)^{n+1}}{1-\frac{e^{ix}}{\cos x}} \right)
+\Arrow{calcul algébrique} \\
+& = \Re \left(\frac{1-\frac{e^{i(n+1)x}}{\cos^{n+1}x}}{1-\frac{e^{ix}}{\cos x}}\right)
+\Arrow{réduction au même dénominateur} \\
+& = \Re \left(\frac{\frac{\cos^{n+1}x-e^{i(n+1)x}}{\cos^{n+1}x}}{\frac{\cos x-e^{ix}}{\cos x}}\right)
+\Arrow{$\Re(kz) = k\cdot\Re(z)$ lorsque $k$ est réel} \\
+& = \frac1{\cos^n x}\Re \left(\frac{\cos^{n+1}x-e^{i(n+1)x}}{\cos x-e^{ix}}\right)
+\Arrow[rr]{forme algébrique des nombres complexes} \\
+& =\frac1{\cos^n x}\Re\left(\frac{\cos^{n+1}x-(\cos(n+1)x+i\sin(n+1)x)}{\cos x-(\cos x+i\sin x)}\right) \\
+& =\frac1{\cos^n x}\Re\left(\frac{(\cos^{n+1}x-\cos(n+1)x)-i\sin(n+1)x}{-i\sin x}\right) \\
+& = \frac1{\cos^nx}\cdot\frac{\sin(n+1)x}{\sin x}
+\end{WithArrows}$
+
+\interitem
+
+\section{Les options «up» et «down» pour des flèches individuelles}
+
+\label{up-and-down}
+Au niveau local, il y a deux options pour les flèches individuelles, nommée «\verb|up|» et «\verb|down|». L'exemple
+suivant illustre ces types de flèches:
+
+
+\begin{Verbatim}
+\(\begin{WithArrows}
+A & = B
+\Arrow~emphase#[up]@{une flèche de type \texttt{up}} \\
+ & = C + C + C + C + C + C + C + C \\
+ & = C + C + C + C + C + C + C + C
+\Arrow~emphase#[down]@{une flèche de type \texttt{down}} \\
+ & = E + E
+\end{WithArrows}\)
+\end{Verbatim}
+
+\vspace{1cm}
+\(\begin{WithArrows}
+A & = B
+\Arrow[up]{une flèche de type \texttt{up}} \\
+ & = C + C + C + C + C + C + C + C \\
+ & = C + C + C + C + C + C + C + C
+\Arrow[down]{une flèche de type \texttt{down}} \\
+ & = E + E
+\end{WithArrows}\)
+
+
+\vspace{1cm}
+Les options \verb|up| et \verb|down| nécessitent l'extension \pkg{varwidth} et l'extension Tikz
+\pkg{calc}. Si elles ne sont pas chargées, une erreur sera levée.
+
+
+\interitem
+
+\section{Comparaison avec l'environnement \{aligned\}}
+
+L'environnement \verb|{WithArrows}| présente des similitudes avec l'environnement \verb|{aligned}| de l'extension
+\pkg{amsmath}. Ce sont seulement des similitudes car \verb|{WithArrows}| n'a pas été écrit en s'appuyant sur
+\verb|{aligned}|.\footnote{En fait, il est
+possible d'utiliser l'extension \pkg{witharrows} sans l'extension \pkg{amsmath}.}
+
+\interitem
+Comme dans les environnements de l'\pkg{amsmath}, il est possible de changer l'espacement entre deux rangées avec
+l'option de la commande \verb|\\| de fin de ligne (il est aussi possible d'utiliser \verb|\\*| mais cela a
+exactement le même effet que \verb|\\| puisqu'un environnement \verb|{WithArrows}| est toujours insécable). Cette
+option est conçu pour être utilisée avec des valeurs positives uniquement.
+%
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{on développe} ~emphase#\\[2ex]@
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{on développe} \\*[2ex]
+\noalign{\vspace{3mm}}
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+
+\interitem
+Dans les environnements de l'\pkg{amsmath} (ou de \pkg{mathtools}), l'espace entre deux rangées
+est fixé par un paramètre appelé \verb|\jot| (il s'agit d'une dimension et non d'un ressort). C'est aussi le cas
+pour l'environnement \verb|{WithArrows}|. Une option \verb|jot| a été ajoutée à l'environnement \verb|{WithArrows}|
+dans le but de changer ce paramètre \verb|\jot| pour un environnement donné.\footnote{Il est aussi possible de
+changer \verb|\jot| avec l'environnement \verb|{spreadlines}| de \pkg{mathtools}.}
+%
+\begin{Verbatim}
+$\begin{WithArrows}[displaystyle,~emphase#jot=2ex@]
+F & = \frac12G \Arrow{on développe}\\
+ & = H + \frac12K \Arrow{on continue}\\
+ & = K
+\end{WithArrows}$
+\end{Verbatim}
+
+
+$\begin{WithArrows}[displaystyle,jot=2ex]
+F & = \frac12G \Arrow{on développe}\\
+ & = H + \frac12K \Arrow{on continue}\\
+ & = K
+\end{WithArrows}$
+
+
+\bigskip
+Néanmoins, cette nouvelle valeur de \verb|\jot| sera aussi utilisée dans les nouveaux alignements
+inclus dans l'environnement~\verb|{WithArrows}|:
+%
+\begin{Verbatim}
+$\begin{WithArrows}[jot=2ex]
+\varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+\Arrow{$x$ et $y$ sont réels}\\
+& \Leftrightarrow \left\{
+\begin{aligned}
+x+y & = 0 \\
+x+2y & = 0
+\end{aligned}
+\right.
+\end{WithArrows}$
+\end{Verbatim}
+
+
+$\begin{WithArrows}[jot=2ex]
+\varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+\Arrow{$x$ et $y$ sont réels}\\
+& \Leftrightarrow \left\{
+\begin{aligned}
+x+y & = 0 \\
+x+2y & = 0
+\end{aligned}
+\right.
+\end{WithArrows}$
+
+\bigskip
+Peut-être que cela ne correspond pas au résultat souhaité. C'est pourquoi une option
+\verb|interline| est fournie. Il est possible d'utiliser un ressort (\emph{skip}) pour cette option.
+%
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#interline=2ex@]
+\varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+\Arrow{$x$ et $y$ sont réels}\\
+& \Leftrightarrow \left\{
+\begin{aligned}
+x+y & = 0 \\
+x+2y & = 0 \\
+\end{aligned}
+\right.
+\end{WithArrows}$
+\end{Verbatim}
+
+
+$\begin{WithArrows}[interline=2ex]
+\varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+\Arrow{$x$ et $y$ sont réels}\\
+& \Leftrightarrow \left\{
+\begin{aligned}
+x+y & = 0 \\
+x+2y & = 0 \\
+\end{aligned}
+\right.
+\end{WithArrows}$
+
+
+\interitem
+De même que l'environnement \verb|{aligned}|, \verb|{WithArrows}| a une option de placement qui peut prendre les valeurs
+\verb|t|, \verb|c| ou \verb|b|. Néanmoins, la valeur par défaut n'est pas \verb|c| mais \verb|t|.
+Si on le souhaite, il est possible d'avoir la valeur \verb|c| comme valeur par défaut
+en utilisant l'instruction \verb|\WithArrowsOptions{c}| au début du document.
+%
+\begin{Verbatim}
+Ainsi\enskip
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+Ainsi\enskip
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+\bigskip
+La valeur \verb|c| peut être utile, par exemple, si on souhaite mettre une accolade :
+
+\smallskip
+\begin{Verbatim}
+On pose\enskip $~emphase#\left\{@
+\begin{WithArrows}[~emphase#c@]
+f(x) & = 3x^3+2x^2-x+4
+\Arrow[tikz=-]{les deux sont des polynômes}\\
+g(x) & = 5x^2-5x+6
+\end{WithArrows}
+~emphase#\right.@$
+\end{Verbatim}
+
+
+On pose\enskip $\left\{
+\begin{WithArrows}[c]
+f(x) & = 3x^3+2x^2-x+4
+\Arrow[tikz=-]{les deux sont des polynômes}\\
+g(x) & = 5x^2-5x+6
+\end{WithArrows}
+\right.$
+
+
+\interitem
+Contrairement à \verb|{aligned}|, l'environnement \verb|{WithArrows}| utilise \verb|\textstyle| par
+défaut.
+
+Là aussi, il est possible de changer ce comportement avec \verb|\WithArrowsOptions|:
+
+\quad \verb|\WithArrowsOptions{displaystyle}|.
+
+
+\smallskip
+L'exemple suivant est composé avec \verb|{aligned}|:\par\nobreak
+
+\smallskip
+$\left\{
+\begin{aligned}
+\sum_{i=1}^n (x_i+1)^2
+& = \sum_{i=1}^n (x_i^2 + 2x_i+1) \\
+& = \sum_{i=1}^n x_i^2 + 2 \sum_{i=1}^nx_i + n
+\end{aligned}
+\right.$
+
+
+\medskip
+L'exemple suivant est composé avec \verb|{WithArrows}[c,displaystyle]|. Les résultats
+sont parfaitement identiques.\footnote{Dans les versions de l'\pkg{amsmath} antérieures au
+5~novembre~2016, un espace fin était ajouté sur la gauche de l'environnement \verb|{aligned}|.
+Les versions plus récentes n'ajoutent pas d'espace et \verb|{WithArrows}| non plus.}\par\nobreak
+
+\smallskip
+$\left\{
+\begin{WithArrows}[c,displaystyle]
+\sum_{i=1}^n (x_i+1)^2
+& = \sum_{i=1}^n (x_i^2 + 2x_i+1) \\
+& = \sum_{i=1}^n x_i^2 + 2 \sum_{i=1}^nx_i + n
+\end{WithArrows}
+\right.$
+
+
+\section{Les flèches dans les environnements imbriqués}
+
+\label{NestedEnv}
+
+Les environnements \verb|{WithArrows}| peuvent être imbriqués. Dans ce cas, les options fournies
+à l'environnement englobant s'appliquent aussi aux environnements imbriqués (avec des
+exceptions tout à fait attendues pour \verb|interline|, \verb|code-before| et \verb|code-after|). La commande
+\verb|Arrow| peut être utilisée dans chaque environnement \verb|{WithArrows}|.
+
+\begin{Verbatim}[formatcom=\small\color{gray}]
+$~emphase#\begin{WithArrows}@
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \Arrow{les nombres sont réels}\\
+ & \Leftrightarrow
+ \left\{~emphase#\begin{WithArrows}@[c]
+ x+2y & = 0 \\
+ 2x+4y & = 0
+ ~emphase#\end{WithArrows}@\right. \\
+ & \Leftrightarrow
+ \left\{~emphase#\begin{WithArrows}@[c]
+ x+2y & = 0 \Arrow[tikz=-]{la même équation}\\
+ x+2y & = 0
+ ~emphase#\end{WithArrows}@\right. \\
+ & \Leftrightarrow x+2y=0
+~emphase#\end{WithArrows}@$
+\end{Verbatim}
+
+$\begin{WithArrows}
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \Arrow{les nombres sont réels}\\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ 2x+4y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \Arrow[tikz=-]{la même équation}\\
+ x+2y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow x+2y=0
+\end{WithArrows}$
+
+\bigskip
+Néanmoins, on peut souhaiter tracer une flèche entre des rangées qui ne sont pas dans le même
+environnement. Par exemple, on pourrait souhaiter tracer la flèche suivante :
+
+\bigskip
+$\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division par $2$} ]
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ 2x+4y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ x+2y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow x+2y=0
+\end{WithArrows}$
+
+
+\bigskip
+Une telle construction est possible en utilisant \verb|\Arrow| dans le \verb|code-after| :
+dans le \verb|code-after|, une version spéciale de la commande \verb|\Arrow| est disponible
+(nous l'appellerons «\verb|\Arrow| dans le \verb|code-after|»).
+
+\smallskip
+Une commande \verb|\Arrow| dans le \verb|code-after| prend trois arguments :
+\begin{itemize}
+\item une spécification pour la rangée de départ de la flèche ;
+\item une spécification pour la rangée d'arrivée ;
+\item une étiquette pour la flèche.
+\end{itemize}
+Comme d'habitude, il est possible de donner des options entre crochets avant ou après les trois arguments
+obligatoires. Néanmoins, ces options sont limitées (voir plus bas).
+
+\interitem
+La spécification de rangée est construite avec la position de l'environnement conidéré dans l'arbre des
+imbrications, suivie, après un trait d'union, par le numéro de la rangée.
+
+\bigskip
+Dans l'exemple précédent, il y a deux environnements \verb|{WithArrows}| imbriqués dans l'environnement
+\verb|{WithArrows}| principal.
+
+\medskip
+$\begin{WithArrows}[tikz-code = {\path (#1) to node {#3} (#2) ; }]
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+ & \Leftrightarrow \color{blue}
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \Arrow{environnement \no 1}\\
+ 2x+4y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow \color{red}
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \Arrow{environnement \no 2}\\
+ x+2y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow x+2y=0
+\end{WithArrows}$
+
+\bigskip
+La flèche que nous voulons tracer part de la rangée~$2$ du sous-environnement
+\no $1$ (et, par conséquent, la spécification est \verb|1-2|) et arrive à la rangée~$2$
+du sous-environnement \no $2$ (et, par conséquent, la spécification est \verb|2-2|).
+Nous pouvons tracer la flèche avec une commande \verb|\Arrow| dans le \verb|code-after| de la manière suivante :
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#code-after = \Arrow{1-2}{2-2}{division par $2$}@ ]
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+.........
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}[code-after = \Arrow{1-2}{2-2}{division par $2$} ]
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ 2x+4y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ x+2y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow x+2y=0
+\end{WithArrows}$
+
+\bigskip
+Les options autorisées pour une commande \verb|\Arrow| dans le \verb|code-after| sont : \verb|ll|, \verb|lr|,
+\verb|rl|, \verb|rr|, \verb|v|, \verb|xoffset|, \verb|tikz| et \verb|tikz-code|. Exceptée \verb|v|, qui est
+spécifique à \verb|\Arrow| dans le \verb|code-after|, toutes ces options ont leur signification habituelle.
+
+
+Avec l'option \verb|v|, la flèche tracée est verticale à une abscisse calculée avec
+la rangée de départ et la rangée d'arrivée uniquement : les lignes intermédiaires ne sont pas prises en compte
+contrairement à ce qui se passe avec l'option \verb|i|. Pour le moment, l'option \verb|i| n'est pas disponible
+pour la commande~\verb|\Arrow| dans le \verb|code-after|. Néanmoins, il est toujours possible
+de déplacer une flèche avec \verb|xoffset| (ou \verb|xshift| de Tikz).
+\begin{Verbatim}
+$\begin{WithArrows}[code-after=\Arrow~emphase#[v]@{1-2}{2-2}{division by $2$}]
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+.........
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division par $2$} ]
+\varphi(x,y)=0
+ & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ 2x+4y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow
+ \left\{\begin{WithArrows}[c]
+ x+2y & = 0 \\
+ x+2y & = 0
+ \end{WithArrows}\right. \\
+ & \Leftrightarrow x+2y=0
+\end{WithArrows}$
+
+
+\interitem
+L'extension \pkg{witharrows} fournit une autre commande disponible dans le \verb|code-after| : la commande
+\verb|\MultiArrow|. Cette commande dessine un «rateau». La liste des rangées concernées par ce rateau
+est donnée dans le premier argument de la commande \verb|\MultiArrow|. La syntaxe utilisée pour décrire cette liste
+est celle de la commande \verb|\foreach| de \pkg{pgffor}.
+
+\begin{Verbatim}
+$\begin{WithArrows}[tikz = rounded corners,
+ code-after = {~emphase#\MultiArrow{1,...,4}{text}@} ]
+A & = B \\
+ & = C \\
+ & = D \\
+ & = E \\
+ & = F
+\end{WithArrows}$
+\end{Verbatim}
+
+
+$\begin{WithArrows}[tikz = rounded corners,
+ code-after = {\MultiArrow{1,...,4}{text}}]
+A & = B \\
+ & = C \\
+ & = D \\
+ & = E \\
+ & = F
+\end{WithArrows}$
+
+\medskip
+Pour le moment, aucune option n'est disponible pour cette commande \verb|\MultiArrow|.
+
+
+\medskip
+\section{Dessiner des flèches depuis l'extérieur des environnements \{WithArrows\}}
+
+Si on désire dessiner des flèches depuis l'extérieur des environnements \verb|{WithArrows}|, il est possible de le
+faire en utilisant les nœuds Tikz créés par ces environnements.
+
+Le nom d'un nœud Tikz crée par \pkg{witharrows} est préfixé par \verb|wa-|. Ensuite, on trouve une liste de nombres
+qui indique quelle est la position de l'environnement dans l'arbre d'imbrication des environnements. À la fin, on a
+le suffixe \verb|l| pour un nœud de gauche et le suffixe \verb|r| pour un nœud de droite.
+
+\smallskip
+À titre d'illustration, nous donnons un exemple d'environnements \verb|{WithArrows}| imbriqués et, pour chaque nœud
+de droite, le nom de ce nœud.\footnote{Il existe une option \verb|show-node-names| pour faire afficher les noms de
+ ces nœuds.}
+
+
+\medskip
+\[\begin{WithArrows}[show-nodes,show-node-names]
+A & \vartriangleleft B+B+B+B+B+B+B+B+B+B+B+B+B \\
+& \vartriangleleft \left\{
+\begin{WithArrows}[c]
+C & \vartriangleleft D \\
+E & \vartriangleleft F
+\end{WithArrows}
+\right. \\
+ & \vartriangleleft
+\left\{
+\begin{WithArrows}[c]
+G & \vartriangleleft H+H+H+H+H+H+H \\
+I & \vartriangleleft
+\left\{
+\begin{WithArrows}
+J &\vartriangleleft K \\
+L &\vartriangleleft M
+\end{WithArrows}
+\right.
+\end{WithArrows}
+\right. \\
+ & \vartriangleleft
+\left\{
+\begin{WithArrows}[c]
+N & \vartriangleleft O \\
+P & \vartriangleleft Q
+\end{WithArrows}
+\right.
+\end{WithArrows}\]
+
+\medskip
+The package \pkg{witharrows} fournit quelques outils pour faciliter l'utilisation de ces nœuds :
+\begin{itemize}
+\item la commande \verb|\WithArrowsLastEnv| donne le numéro du dernier environnement de niveau~$0$ (c'est-à-dire
+non imbriqué dans un autre environnement de \pkg{witharrows}) ;
+
+\item un nom peut être donné à un environnement avec l'option \verb|name| et, dans ce cas, les nœuds créés dans
+l'environnement auront des alias construits en utilisant ce nom ;
+
+\item le style Tikz \verb|WithArrows/arrow| est le style utilisé par \pkg{witharrows} pour dessiner une
+flèche\footnote{Plus précisément, ce style est passé à Tikz via l'option «\verb|every path|» avant le dessin de la
+ flèche (qui se fait avec l'instruction Tikz stockée dans \verb|tikz-code|). Ce style est modifié par l'option
+ \verb|tikz| de \pkg{witharrows} (avec une portée correspondant au groupe TeX courant).} ;
+
+\item le style Tikz \verb|WithArrows/arrow/tips| est le style utilisé pour la pointe de flèche (ce style est
+lui-même chargé par le style \verb|WithArrows/arrow|).
+\end{itemize}
+
+Par exemple, nous pouvons tracer une flèche allant de \texttt{wa-\WithArrowsLastEnv-2-1-2-r.south}
+à \texttt{wa-\WithArrowsLastEnv-3-2-r.north} avec l'instruction Tikz suivante :
+
+\begin{Verbatim}
+\begin{tikzpicture}[remember picture,overlay]
+\draw [WithArrows/arrow]
+ ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
+ to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
+\end{tikzpicture}
+\end{Verbatim}
+
+\[\begin{WithArrows}
+A & \vartriangleleft B+B+B+B+B+B+B+B+B+B+B+B+B \\
+& \vartriangleleft \left\{
+\begin{WithArrows}[c]
+C & \vartriangleleft D \\
+E & \vartriangleleft F
+\end{WithArrows}
+\right. \\
+ & \vartriangleleft
+\left\{
+\begin{WithArrows}[c]
+G & \vartriangleleft H+H+H+H+H+H+H \\
+I & \vartriangleleft
+\left\{
+\begin{WithArrows}
+J &\vartriangleleft K \\
+L &\vartriangleleft M
+\end{WithArrows}
+\right.
+\end{WithArrows}
+\right. \\
+ & \vartriangleleft
+\left\{
+\begin{WithArrows}[c]
+N & \vartriangleleft O \\
+P & \vartriangleleft Q
+\end{WithArrows}
+\right.
+\end{WithArrows}\]
+
+\begin{tikzpicture}[remember picture,overlay]
+\draw [WithArrows/arrow]
+ ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
+ to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
+\end{tikzpicture}
+
+\medskip
+Dans le cas présent, il aurait été plus facile d'utiliser une commande \verb|\Arrow| dans le \verb|code-after| mais
+c'était seulement un exemple pour expliquer comment les nœuds Tikz créés par \pkg{witharrows} peuvent être utilisés.
+
+\bigskip
+Dans l'exemple suivant, on crée deux environnements \verb|{WithArrows}| nommés
+«\verb|premier|» et «\verb|second|» et on dessine une flèche entre un nœud du premier et un nœud du second.
+
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#name=premier@]
+A & = B \\
+ & = C
+\end{WithArrows}$
+
+\bigskip
+$\begin{WithArrows}[~emphase#name=second@]
+A' & = B' \\
+ & = C'
+\end{WithArrows}$
+
+\begin{tikzpicture}[remember picture,overlay]
+\draw [WithArrows/arrow]
+ ([xshift=3mm]~emphase#premier@-1-r.south)
+ to ([xshift=3mm]~emphase#second@-1-r.north) ;
+\end{tikzpicture}
+\end{Verbatim}
+
+
+\begin{center}
+$\begin{WithArrows}[name=premier]
+A & = B \\
+ & = C
+\end{WithArrows}$
+
+\bigskip
+$\begin{WithArrows}[name=second]
+A' & = B' \\
+ & = C'
+\end{WithArrows}$
+\end{center}
+
+\begin{tikzpicture}[remember picture,overlay]
+\draw [WithArrows/arrow]
+ ([xshift=3mm]premier-1-r.south)
+ to ([xshift=3mm]second-1-r.north) ;
+\end{tikzpicture}
+
+\section{L'environnement \{DispWithArrows\}}
+\label{DispWithArrows}
+
+Comme dit précédemment, l'environnement \verb|{WithArrows}| présente des similitudes avec l'environnement
+\verb|{aligned}| de l'\pkg{amsmath} (et de \verb|mathtools|). L'extension \pkg{witharrows}
+fournit aussi un environnement \verb|{DispWithArrows}| qui est similaire aux
+environnements \verb|{align}| et \verb|{flalign}| de l'\pkg{amsmath}.
+
+\medskip
+L'environnement \verb|{DispWithArrows}| doit être utilisé \emph{hors} du mode mathématique. Comme
+\verb|{align}|, il doit être utilisé en mode horizontal.
+\begin{Verbatim}
+\begin{~emphase#DispWithArrows@}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{~emphase#DispWithArrows@}
+\end{Verbatim}
+\begin{DispWithArrows}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{DispWithArrows}
+
+\medskip
+Il est possible d'utiliser la commande \verb|\notag| (ou \verb|\nonumber|) pour supprimer un numéro d'équation.
+
+Il est possible d'utiliser la commande \verb|\tag| pour placer une étiquette spéciale (par ex. $\star$).
+
+Il est aussi possible de placer un label pour une ligne de l'environnement avec la commande
+\verb|\label|.
+
+Ces commandes doivent être utilisées dans la dernière colonne de l'environnement.
+\begin{Verbatim}
+\begin{DispWithArrows}
+A & = (a+1)^2 \Arrow{on développe} ~emphase#\notag@ \\
+ & = a^2 + 2a + 1 ~emphase#\tag{$\star$} \label{mon-équation}@
+\end{DispWithArrows}
+\end{Verbatim}
+\begin{DispWithArrows}
+A & = (a+1)^2 \Arrow{on développe} \notag \\
+ & = a^2 + 2a + 1 \tag{$\star$} \label{mon-équation}
+\end{DispWithArrows}
+Un lien vers l'équation \eqref{mon-équation}. On a obtenu ce lien avec la commande
+\verb|\eqref{mon-équation}| (la commande \verb|\eqref| est une commande de l'extension \pkg{amsmath}).
+
+\medskip
+Si \pkg{amsmath} (ou \pkg{mathtools}) est chargée, il est toujours possible d'utiliser
+\verb|\tag*| qui, comme dans l'extension\pkg{amsmath}, compose le label sans les parenthèses.
+Par exemple, il est possible de l'utiliser pour mettre le symbole \verb|\square| de
+\pkg{amssymb}. Ce symbole est souvent utilisé pour marquer la fin d'une démonstration.\footnote{Signalons que l'environnement \verb|{DispWithArrows}| est compatible
+avec la commande \verb|\qedhere| de \pkg{amsthm}.}
+\begin{Verbatim}
+\begin{DispWithArrows}
+A & = (a+1)^2 \Arrow{on développe} \notag \\
+ & = a^2 + 2a + 1 ~emphase#\tag*{$\square$}@
+\end{DispWithArrows}
+\end{Verbatim}
+\begin{DispWithArrows}
+A & = (a+1)^2 \Arrow{on développe} \notag \\
+ & = a^2 + 2a + 1 \tag*{$\square$}
+\end{DispWithArrows}
+
+\medskip
+Il est également possible de supprimer tous les numéros d'équations avec l'option booléenne \verb|notag| (ou
+\verb|nonumber|), au niveau global ou bien au niveau d'un environnement.
+
+Enfin, il existe aussi
+un environnement \verb|{DispWithArrows*}| qui supprime tous les numéros.\footnote{Même dans ce cas, il est possible
+de mettre une étiquette manuellement avec la commande \verb|\tag|.}
+\begin{Verbatim}
+\begin{~emphase#DispWithArrows*@}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{~emphase#DispWithArrows*@}
+\end{Verbatim}
+\begin{DispWithArrows*}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{DispWithArrows*}
+
+\medskip
+En fait, il y a une autre option, nommée \verb|tagged-lines|, qui peut être utilisée pour contrôler quelles lignes
+seront numérotées. La valeur de cette option est la liste des numéros de lignes (dans l'environnement) qui seront
+numérotées (par le système de numérotage des équations). Par exemple, avec l'option
+\verb|tagged-lines = {first,3,last}|, seulement la première, la troisième et la dernière lignes seront numérotées.
+Il y a aussi une valeur spéciale \verb|all| qui signifie que toutes les lignes doivent être numérotées.
+\begin{Verbatim}
+\begin{DispWithArrows}[~emphase#tagged-lines = last@]
+A & = A_1 \Arrow{première étape} \\
+ & = A_2 \Arrow{deuxième étape} \\
+ & = A_3
+\end{DispWithArrows}
+\end{Verbatim}
+\begin{DispWithArrows}[tagged-lines = last]
+A & = A_1 \Arrow{première étape} \\
+ & = A_2 \Arrow{deuxième étape} \\
+ & = A_3
+\end{DispWithArrows}
+
+\bigskip
+Avec l'option \verb|fleqn|, l'environnement est composé calé à gauche (d'une manière similaire
+à l'option \verb|fleqn| des classes standard de LaTeX). Dans ce cas, la marge gauche peut être réglée avec
+l'option \verb|mathindent| (qui a un nom inspiré du paramètre \verb|\mathindent| de LaTeX). La valeur par défaut
+pour cette option est de 25~pt.
+
+\begin{Verbatim}
+\begin{DispWithArrows}[~emphase#fleqn,mathindent = 1cm@]
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{DispWithArrows}
+\end{Verbatim}
+\begin{DispWithArrows}[fleqn,mathindent = 1cm]
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{DispWithArrows}
+
+\medskip
+\emph{Remarque} : Par conception, l'option \verb|fleqn| de \pkg{witharrows} est
+indépendante de l'option de classe \verb|fleqn| de LaTeX. En effet, puisque les environnement de
+\pkg{witharrows} sont conçus pour être utilisés avec des flèches sur le côté droit, l'utilisateur
+peut souhaiter utiliser \pkg{witharrows} avec l'option \verb|fleqn| (de manière à avoir plus de place sur la droite
+des équations pour les flèches) tout en continuant à centrer les équations classiques.
+
+\medskip
+Si l'option \verb|leqno| est utilisée comme option de classe, les labels seront composés
+à gauche également pour les environnements \verb|{DispWithArrows}|.\footnote{L'extension \pkg{amsmath} a une option \verb|leqno|
+mais \pkg{witharrows}, bien entendu, ne tient pas compte de cette option : \pkg{witharrows}
+vérifie seulement l'option \verb|leqno| de la classe du document.}
+
+
+\medskip
+Si l'extension \pkg{amsmath} est chargée, il est possible d'utiliser la commande \verb|\intertext| dans les
+environnements \verb|{DispWithArrows}|. Il est également possible d'utiliser l'environnement \verb|{subequations}|.
+Néanmoins, il existe pour les environnements \verb|{DispWithArrows}| une option \verb|subequations| qui demande
+d'encapsuler l'environnement dans un environnement \verb|{subequations}|.
+
+
+\medskip
+Dans l'exemple suivant, l'option \verb|subequations| est fixée via la commande \verb|\WithArrowsOptions|. Chacun
+des environnements suivants sera alors sous-numéroté (dans la portée de la commande \verb|WithArrowsOptions|).
+
+\begin{Verbatim}
+~emphase#\WithArrowsOptions{subequations}@
+Premier environnement.
+\begin{DispWithArrows}
+A & = B \\
+ & = C
+\end{DispWithArrows}
+Deuxième environnement.
+\begin{DispWithArrows}
+D & = E \\
+ & = F
+\end{DispWithArrows}
+\end{Verbatim}
+%
+\begin{scope}
+\WithArrowsOptions{subequations}
+Premier environnement.
+\begin{DispWithArrows}
+A & = B \\
+ & = C
+\end{DispWithArrows}
+Deuxième environnement.
+\begin{DispWithArrows}
+D & = E \\
+ & = F
+\end{DispWithArrows}
+\end{scope}
+
+\bigskip
+S'il n'y a pas suffisamment de place pour faire appraraître le numéro d'équation à la fin de la ligne, il n'y a pas
+de positionnement automatique de ce numéro sur la ligne suivante (comme dans les environnements de
+l'\pkg{amsmath}) : il y aura surimpression de texte. Néanmoins, dans \verb|{DispWithArrows}|, l'utilisateur peut
+utiliser la commande \verb|\tagnextline| pour demander manuellement la composition du numéro sur la ligne suivante.
+\begin{Verbatim}
+\begin{DispWithArrows}[displaystyle]
+S_{2(p+1)}
+& =\sum_{k=1}^{2(p+1)} (-1)^k k^2 \\
+& \smash[b]{=\sum_{k=1}^{2p}(-1)^kk²
+ +(-1)^{2p+1}(2p+1)^2+(-1)^{2p+2}(2p+2)^2} ~emphase#\tagnextline@ \\
+&= S_{2p}-(2p+1)^2+(2p+2)^2\\
+&=p(2p+1)-(2p+1)^2+(2p+2)^2\\
+&= 2p^2+5p+3
+\end{DispWithArrows}
+\end{Verbatim}
+\begin{center}
+\color{gray}\vrule%
+\begin{minipage}{275pt}\color{black}
+\begin{DispWithArrows}[displaystyle]
+S_{2(p+1)}
+& =\sum_{k=1}^{2(p+1)} (-1)^k k^2 \\
+& \smash[b]{=\sum_{k=1}^{2p}(-1)^kk^2+(-1)^{2p+1}(2p+1)^2+(-1)^{2p+2}(2p+2)^2}
+\tagnextline \\
+&= S_{2p}-(2p+1)^2+(2p+2)^2\\
+&= 2p^2+p-4p^2-4p-1+4p^2+8p+4\\
+&= 2p^2+5p+3
+\end{DispWithArrows}
+\end{minipage}%
+\color{gray}\vrule
+\end{center}
+
+
+
+\bigskip
+Les environnements \verb|{DispWithArrows}| et \verb|{DispWithArrows*}| fournissent également une option
+\verb|wrap-lines|. Avec cette option, les lignes de l'étiquette sont automatiquement coupées à droite.\footnote{Il
+ est possible d'éviter la coupure des mots avec l'option «\verb|align = flush left|» de Tikz.}\label{wrap-lines}
+
+\begin{Verbatim}
+\begin{DispWithArrows*}[displaystyle,~emphase#wrap-lines@]
+S_n
+& = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+\Arrow{somme des termes d'une suite géométrique de raison $e^{i\frac{2\pi}n}$}\\
+& = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}
+ {1-e^{i\frac{\pi}{2n}}}\right)
+\Arrow{cette ligne de texte a été coupée automatiquement} \\
+& = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+\end{DispWithArrows*}
+\end{Verbatim}
+\begin{DispWithArrows*}[displaystyle,wrap-lines]
+S_n
+& = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+\Arrow{somme des termes d'une suite géométrique de raison $e^{i\frac{2\pi}n}$}\\
+& = \frac1n \Re \left(
+\frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}} \right)
+\Arrow{cette ligne de texte a été coupée automatiquement} \\
+& = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+\end{DispWithArrows*}
+
+\bigskip
+L'option \verb|wrap-lines| ne s'applique pas aux environnements \verb|{WithArrows}|
+imbriqués dans un environnement \verb|{DispWithArrows}| ou \verb|{DispWithArrows*}|. Néanmoins,
+elle s'applique aux instructions \verb|\Arrow| et \verb|\MultiArrow| du \verb|code-after|
+de l'environnement englobant.
+
+\vspace{1cm}
+Nous avons dit que les environnements \verb|{DispWithArrows}| et \verb|{DispWithArrows*}|
+devaient être utilisés en mode horizontal et non en mode vertical. Il y a néanmoins
+une exception. Ces environnements peuvent être utilisés directement après un \verb|\item| d'une liste
+LaTeX. Dans ce cas, aucun espace vertical n'est ajouté avant l'environnement.\footnote{Il est possible de désactiver
+ cette fonctionnalité avec l'option \verb|standard-behaviour-with-items|.}
+
+\medskip
+Voici un exemple où, avec \verb|{DispWithArrows}|, on peut insérer l'équation dans un environnement
+\verb|{enumerate}| tout en utilisant l'option \verb|wrap-lines|.
+
+\begin{Verbatim}
+~emphase#\begin{enumerate}@
+~emphase#\item @
+\begin{DispWithArrows}%
+ [displaystyle, wrap-lines, tagged-lines = last, fleqn, mathindent = 0 pt]
+S_n
+& = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+\Arrow{on utilise la formule pour la somme de termes d'une suite géométrique de raison
+$e^{i\frac{2\pi}n}$} \\
+& = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}
+ {1-e^{i\frac{\pi}{2n}}}\right)
+\Arrow{$\bigl(e^{i\frac{\pi}{2n}}\bigr)^n = e^{i\frac{\pi}2}=i$} \\
+& = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+\end{DispWithArrows}
+~emphase#\end{enumerate}@
+\end{Verbatim}
+\begin{enumerate}
+\item
+\begin{DispWithArrows}[displaystyle, wrap-lines, tagged-lines = last, fleqn, mathindent = 0 pt]
+S_n
+& = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+\Arrow{on utilise la formule pour la somme de termes d'une suite géométrique de raison
+$e^{i\frac{2\pi}n}$}\\
+& = \frac1n \Re \left(
+\frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}} \right)
+\Arrow{$\bigl(e^{i\frac{\pi}{2n}}\bigr)^n = e^{i\frac{\pi}2}=i$} \\
+& = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+\end{DispWithArrows}
+\end{enumerate}
+
+\vspace{1cm}
+L'environnement \verb|{DispWithArrows}| est similaire à l'environnement \verb|{align}| de
+l'\pkg{amsmath}. Néanmoins, \verb|{DispWithArrows}| n'est pas construit en utilisant \verb|{align}|
+(en fait, il est possible d'utiliser \pkg{witharrows} sans \pkg{amsmath}).
+
+Il y a quelques différences entre \verb|{DispWithArrows}| et \verb|{align}|.
+\begin{itemize}
+\item L'environnement \verb|{DispWithArrows}| ne peut pas être inséré dans un environment
+\verb|{gather}| de l'\pkg{amsmath}.
+\item Un environment \verb|{DispWithArrows}| est toujours insécable (même avec
+\verb|\allowdisplaybreaks| de l'\pkg{amsmath}).
+\item Les commandes \verb|\label|, \verb|\tag|, \verb|\notag| et \verb|\nonumber| ne sont autorisées
+que dans la dernière colonne.
+\item Après un \verb|\item| d'une liste LaTeX, aucun espace vertical n'est ajouté (cela peut être
+modifié avec l'option \verb|standard-behaviour-with-items|).
+\item
+\begin{bfseries}
+Enfin, par défaut, les éléments d'un environnement \verb|\{DispWithArrows\}|
+sont composés en \verb|textstyle| et non en \verb|displaystyle| (il est possible de modifier
+ce point avec l'option \verb|displaystyle|).
+\end{bfseries}
+\end{itemize}
+
+\bigskip
+En ce qui concerne les références, l'extension \pkg{witharrows} est compatible avec les
+extensions \pkg{autonum}, \pkg{cleveref}, \pkg{fancyref}, \pkg{fncylab},
+\pkg{hyperref}, \pkg{listlbls}, \pkg{prettyref}, \pkg{refcheck},
+\pkg{refstyle}, \pkg{showlabels}, \pkg{smartref}, \pkg{typedref} et
+\pkg{varioref} et avec les options \verb|showonlyrefs| et \verb|showmanualtags| de
+\pkg{mathtools}.\footnote{Rappelons que \pkg{varioref}, \pkg{hyperref},
+\pkg{cleveref} et \pkg{autonum} doivent être chargés dans cet ordre. L'extension
+\pkg{witharrows} peut être chargée n'importe où.}
+
+Elle n'est pas compatible avec \pkg{showkeys} (certains labels ne sont pas affichés).
+
+
+
+
+\subsection*{L'option <...> de DispWithArrows}
+
+L'environnement \verb|{DispWithArrows}| propose une option \verb|left-brace|. Si cette option est présente, son
+contenu est composé à gauche, suivi d'une accolade (d'où le nom) puis du corps de
+l'environnement.\footnote{L'option \verb|left-brace| peut aussi être utilisée sans valeur: dans ce cas, seule
+ l'accolade est tracée.}
+
+Pour la lisibilité, cette option \verb|left-brace| est aussi disponible avec une syntaxe spéciale : on peut la
+rentrer en la mettant entre chevrons (\verb|<| et \verb|>|) juste après le \verb|{DispWithArrows}| (et donc avant
+les éventuels arguments optionnels entre crochets).
+
+\bigskip
+On peut alors faire des constructions avec distinctions de cas, comme dans l'exemple
+suivant.\footnote{L'environnement \verb|{cases}| de l'\pkg{amsmath} permet de réaliser de telles distinctions de
+ cas mais on ne peut pas utiliser la numérotation automatique des équations. L'environnement \verb|{numcases}| de
+ l'extension \pkg{cases} (de Donald Arseneau) permet d'utiliser ces numéros d'équations, mais, bien entendu, il
+ n'y a pas de composition de flèches.}
+
+
+
+\medskip
+
+\begin{BVerbatim}
+\begin{DispWithArrows}~emphase#< \binom{n}{p} = >@[format = ll,fleqn,displaystyle]
+0 & \quad \text{si } p > n
+\Arrow{ce cas peut en fait rentrer\\ dans le suivant} \\
+\frac{n(n-1)\cdots(n-p+1)}{p!} & \quad \text{si } 0 \leq p \leq n \\
+0 & \quad \text{si } p < 0
+\end{DispWithArrows}
+\end{BVerbatim}
+%
+\begin{DispWithArrows}< \binom{n}{p} = >[format = ll,fleqn,displaystyle]
+0 & \quad \text{si } p > n
+\Arrow{ce cas peut en fait rentrer\\ dans le suivant} \\
+\frac{n(n-1)\cdots(n-p+1)}{p!} & \quad \text{si } 0 \leq p \leq n \\
+0 & \quad \text{si } p < 0
+\end{DispWithArrows}
+
+\interitem
+Dans l'exemple suivant, on sous-numérote les équations d'un système avec l'option \verb|subnumerate| (disponible
+quand l'\verb|amsmath| est chargé).
+
+\begin{Verbatim}
+\begin{DispWithArrows}~emphase#< \label{système} (\ref*{système}) \Leftrightarrow >@%
+ [format = l, subequations]
+x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\
+xy+xz+yz=-2 \\
+xyz = -15 \label{dernière-équation}
+\end{DispWithArrows}
+\end{Verbatim}
+%
+\begin{DispWithArrows}< \label{système} (\ref*{système}) \Leftrightarrow >%
+ [format = l, subequations]
+x+y+z = -3 \Arrow[tikz=-,jump=2]{3 équations} \\
+xy+xz+yz=-2 \\
+xyz = -15 \label{dernière-équation}
+\end{DispWithArrows}
+
+\bigskip
+Le système complet est l'équation \eqref{système} (cette référence a été obtenue avec \verb|\eqref{système}|) et la
+dernière équation est l'équation \eqref{dernière-équation} (référence obtenue avec
+\verb|\eqref{dernière-équation}|). Notons que \verb|\ref*|, utilisé dans le code ci-dessus, est une variante de
+\verb|ref| proposée par \pkg{hyperref} pour composer une référence sans créer de lien.
+
+\bigskip
+On peut souhaiter remplacer l'accolade gauche par un autre délimiteur extensible (gauche). On peut le faire avec
+l'option \verb|replace-left-brace-by|. Par exemple «\verb|replace-left-brace-by = [\enskip|» va composer avec un
+crochet et ajouter aussi un espace de 1~em après le crochet.
+
+\bigskip
+\section{Fonctionnalités avancées}
+
+\subsection{Utilisation avec plain-TeX}
+\label{plain-TeX}
+
+L'extension \pkg{witharrows} peut être utilisée avec plain-TeX. Pour cela, on doit charger l'extension avec
+\verb|\input|:
+%
+\begin{Verbatim}
+\input{witharrows.tex}
+\end{Verbatim}
+
+\medskip
+En plain-TeX, il n'y a pas d'environnements comme dans LaTeX.
+
+Au lieu de \verb|\begin{WithArrows}| et \verb|\end{WithArrows}| comme en LaTeX, on doit utiliser un
+pseudo-environnement délimité par \verb|\Witharrows| et \verb|\endWithArrows| (de même pour
+\verb|{DispWithArrows}|).
+%
+\begin{Verbatim}
+$\WithArrows
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\endWithArrows$
+\end{Verbatim}
+
+\medskip
+La version pour plain-TeX de \pkg{witharrows} ne propose pas toutes les fonctionnalités proposées pour la version
+LaTeX. En particulier, les fonctionnalités concernant les numéros d'équations ne sont pas disponibles (puisqu'elles
+reposent sur le système de numérotation de LaTeX).
+
+\subsection{L'option tikz-code : comment changer la forme des flèches}
+
+\label{tikz-code}
+
+L'option \verb|tikz-code|\footnote{Pour des raisons historiques, l'option \verb|tikz-code| a un alias :
+ \verb|TikzCode|.} permet à l'utilisateur de changer la forme des flèches.\footnote{Si l'option \verb|wrap-lines|
+ est utilisée dans un environnement \verb|{DispWithArrows}| ou \verb|{DispWithArrows*}|, l'option \verb|tikz-code|
+ n'aura pas d'effet sur les flèches de cet environnement mais uniquement sur les flèches des environnements
+ \verb|{WithArrows}| imbriqués.}
+
+\smallskip
+Par exemple, les options «\verb|up|» et «\verb|down|» décrites précédemment (cf.
+p.~\pageref{up-and-down}) sont programmées en interne avec \verb|tikz-code|.
+
+\smallskip
+La valeur de cette option doit être une instruction de tracé Tikz valide (avec le point-virgule final) où les trois
+marqueurs \verb|#1|, \verb|#2| et \verb|#3| représentent le point de départ, le point d'arrivée et l'étiquette de
+la flèche.
+
+
+\bigskip
+Par défaut, la valeur de \verb|tikz-code| est la suivante :
+
+\smallskip
+\qquad \verb|\draw (#1) to node {#3} (#2) ;|
+
+
+\bigskip
+Dans l'exemple suivant, nous remplaçons le chemin par défaut par un chemin avec trois segments (et un
+nœud recouvrant le deuxième segment).
+\begin{Verbatim}
+\begin{WithArrows}[format=c,ygap=5pt,interline=4mm,
+ ~emphase#tikz-code = {\draw[rounded corners]@
+ ~emphase# (~#1) -- ([xshift=5mm]~#1)@
+ ~emphase# -- node[circle,@
+ ~emphase# draw,@
+ ~emphase# auto = false,@
+ ~emphase# fill = gray!50,@
+ ~emphase# inner sep = 1pt] {\tiny ~#3}@
+ ~emphase# ([xshift=5mm]~#2)@
+ ~emphase# -- (~#2) ; }@]
+3 (2x+4) = 6 \Arrow{$\div 3$} \\
+2x+4 = 2 \Arrow{$-4$} \\
+2x = -2 \Arrow{$\div 2$} \\
+ x = -1
+\end{WithArrows}
+\end{Verbatim}
+
+
+\[\begin{WithArrows}[format=c,
+ ygap=5pt,
+ interline=4mm,
+ tikz-code = {\draw[rounded corners]
+ (#1)
+ --
+ ([xshift=5mm]#1)
+ -- node[circle,
+ draw,
+ auto=false,
+ fill=gray!50,
+ inner sep = 1pt] {\tiny #3}
+ ([xshift=5mm]#2)
+ --
+ (#2) ; }]
+3 (2x+4) = 6 \Arrow{$\div 3$} \\
+2x+4 = 2 \Arrow{$-4$} \\
+2x = -2 \Arrow{$\div 2$} \\
+ x = -1
+\end{WithArrows}\]
+
+\bigskip
+L'environnement \verb|{DispWithArrows}| et sa version étoilée \verb|{DispWithArrows*}| fournissent une commande
+\verb|\WithArrowsRightX| qui peut être utilisée dans l'option \verb|tikz-code|. Cette commande fournit
+l'abscisse de la marge droite de la boîte de composition courante (en prenant en compte les éventuels numéros des
+équations). Pour un exemple d'utilisation, voir p.~\pageref{example-WithArrowsRightX}.
+
+
+\bigskip
+\subsection{La commande \textbackslash WithArrowsNewStyle}
+
+L'extension \pkg{witharrows} fournit une commande \verb|\WithArrowsNewStyle| pour définir
+des styles d'une manière similaire aux «styles» de Tikz.
+
+La commande \verb|\WithArrowsNewStyle| prend deux arguments obligatoires. Le premier est
+le nom du style et le second est une liste de couples clé-valeur. La portée
+de la definition ainsi faite par \verb|\WithArrowsNewStyle| est le groupe TeX courant.
+
+Le style peut être utilisé comme une clé au niveau du document (avec \verb|\WithArrowsOptions|), au niveau d'un
+environnement (via les arguments optionnels) ou bien encore dans une autre commande \verb|\WithArrowsNewStyle|.
+
+Pour un exemple d'utilisation, voir p.~\pageref{example-WithArrowsRightX}.
+
+
+\bigskip
+\subsection{Positionnement vertical des flèches}
+
+Il y a quatre paramètres pour ajuster finement la position verticale des flèches :
+\verb|ygap|, \verb|ystart|, \verb|start-adjust| et \verb|end-adjust|.
+
+\medskip
+Nous expliquons d'abord le comportement quand les paramètres \verb|start-adjust| et \verb|end-adjust| sont égaux à
+zéro:
+\begin{itemize}
+\item l'option \verb|ystart| représente la distance verticale entre la ligne de base du
+texte et le début de la flèche (valeur par défaut : $0.4$~ex);
+\item l'option \verb|ygap| représente la distance verticale entre deux flèches consécutives
+(valeur par défaut : $0.4$~ex).
+\end{itemize}
+
+
+\bigskip
+$\begin{WithArrows}[interline=1mm, adjust = 0pt]
+ (\cos x + \sin x)^2 & = \cos^2 x +2 \cos x \sin x + \sin^2 x\Arrow{}\tikz[remember picture] \coordinate (A) ; \\
+ & = \cos^2x + \sin^2x + 2\sin x\cos x \Arrow{} \\
+ & = 1 + \sin(2x)
+\end{WithArrows}$
+
+\begin{tikzpicture}[remember picture,overlay,blue]
+\draw (wa-\WithArrowsLastEnv-1-r.south) to ++(1,0) coordinate (B) to ++(0.1,0) ;;
+\draw (A) to ++(1,0) coordinate (C) to ++(0.1,0) ;;
+\draw (B) -- (C) ;
+\draw[<-] (B) to ++(0,0.2) ;
+\draw[<-] (C) to ++(0,-0.2) ;
+\path (C) node[right=1mm] {\texttt{ystart}} ;
+\draw (wa-\WithArrowsLastEnv-2-r.north) to ++(3,0) coordinate (E) to ++(0.1,0);
+\draw (wa-\WithArrowsLastEnv-2-r.south) to ++(3,0) coordinate (F) to ++(0.1,0);
+\draw (E) -- (F) ;
+\draw[<-] (E) to ++(0,0.2) ;
+\draw[<-] (F) to ++(0,-0.2) ;
+\path (F) node[right=1mm] {\texttt{ygap}} ;
+\end{tikzpicture}
+
+\interitem
+Néanmoins, pour des raisons esthétiques, quand il est possible, \pkg{witharrows} commence
+la flèche un peu plus haut (d'une quantité \verb|start-adjust|) et termine la flèche un peu plus
+bas (par une quantité \verb|end-adjust|). Par défaut, ces deux paramètres \verb|start-adjust|
+est \verb|end-adjust| sont égaux à $0.4$~ex.
+
+\bigskip
+Voici par exemple le comportement sans le mécanisme de \verb|start-adjust| et
+\verb|end-adjust| (c'était le comportement par défaut dans les versions antérieures à la version 1.13).
+\begin{Verbatim}
+$\begin{WithArrows}~emphase#[start-adjust=0pt, end-adjust=0pt]@
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+\end{Verbatim}
+
+$\begin{WithArrows}[start-adjust=0pt, end-adjust=0pt]
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+
+\bigskip
+Voici le comportement par défaut depuis la version 1.13 (les paramètres
+\verb|start-adjust| et \verb|end-ajust| sont utilisés avec la valeur par défaut $0.4$~ex). La flèche
+est plus longue et le résultat est plus esthétique.
+
+\medskip
+$\begin{WithArrows}
+A & = (a+1)^2 \Arrow{on développe} \\
+ & = a^2 + 2a + 1
+\end{WithArrows}$
+
+
+\bigskip
+Il est possible d'utiliser l'option \verb|adjust| qui fixe à la fois \verb|start-adjust| et \verb|end-ajust|.
+
+\bigskip
+Puisque le mécanisme de \verb|start-adjust| et \verb|end-ajust| a été ajouté dans la
+version 1.13 of \pkg{witharrows}, cette version n'est pas strictement compatible avec
+les versions précédentes. Néanmoins, il est possible de retrouver le comportement précédent
+en fixant simplement \verb|start-adjust| et \verb|end-adjust| à $0$~pt:
+\begin{Verbatim}
+\WithArrowsOptions{adjust = 0pt}
+\end{Verbatim}
+
+\bigskip
+\subsection{Notes de pied de page dans les environnements de witharrows}
+
+Si vous voulez mettre des notes de pied de page dans un environnement de \pkg{witharrows},
+vous pouvez utiliser une paire \verb|\footnotemark|--\verb|\footnotetext|.
+
+\smallskip
+Il est aussi possible d'extraire les notes de pieds de page avec l'extension \pkg{footnote} ou bien l'extension
+\pkg{footnotehyper}.
+
+\smallskip
+Si \pkg{witharrows} est chargée avec l'option \verb|footnote| (avec \verb|\usepackage[footnote]{witharrows}| ou
+avec \verb|\PassOptionsToPackage|), l'extension \pkg{footnote} est chargée (si elle ne l'est pas déjà) et elle est
+utilisée pour extraire les notes de pied de page.
+
+\smallskip
+Si \pkg{witharrows} est chargée avec l'option \verb|footnotehyper|, l'extension \pkg{footnotehyper} est chargée (si
+elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de page.
+
+\smallskip
+Attention : Les extensions \pkg{footnote} et \pkg{footnotehyper} sont incompatibles.
+L'extension \pkg{footnotehyper} est le successeur de l'extension \pkg{footnote}
+et devrait être utilisée préférentiellement. L'extension \pkg{footnote} a quelques défauts ;
+en particulier, elle doit être chargée après l'extension \pkg{xcolor} et elle n'est pas parfaitement
+compatible avec \pkg{hyperref}.
+
+\medskip
+Dans ce document, l'extension \pkg{witharrows} a été chargée avec l'option \verb|footnotehyper| et nous donnons un
+exemple avec une note de pied de page dans l'étiquette d'une flèche :
+
+
+\smallskip
+$\begin{WithArrows}
+A & = (a+b)^2
+\Arrow{on développe\,\footnote{Une note de pied de page.}} \\
+ & = a^2+b^2+2ab
+\end{WithArrows}$
+
+\bigskip
+\subsection{L'option no-arrows}
+
+L'option \verb|no-arrows| est une facilité donnée à l'utilisateur. Avec cette option,
+les flèches ne sont pas tracées. Néanmoins, une analyse des flèches est effectuée et certaines erreurs sont
+détectées (par exemple, si une flèche arrive après la dernière ligne de l'environnement).
+
+
+\bigskip
+\subsection{Note pour les développeurs}
+
+Si vous définissez un environnement s'appuyant sur un environnement de
+\pkg{witharrows}, nous recommandons de faire appel à l'environnement de \pkg{witharrows} avec
+\verb|\WithArrows|--\verb|\endWithArrows| ou \verb|\DispWithArrows|--\verb|\endDispWithArrows| (et
+non \verb|\begin{WithArrows}|--\verb|\end{WithArrows}|, etc.).
+
+\smallskip
+En faisant ainsi, les messages d'erreur affichés par \pkg{witharrows} mentionneront (le cas échéant) le nom de
+votre environnement et seront plus faciles à comprendre pour l'utilisateur final.
+
+\smallskip
+Par exemple, vous pouvez définir un environnement \verb|{DWA}| qui va être un alias de \verb|{DispWithArrows}|:
+\begin{BVerbatim}
+\NewDocumentEnvironment {DWA} {} {\DispWithArrows}{\endDispWithArrows}
+\end{BVerbatim}
+
+\smallskip
+Si vous utilisez cet environnement \verb|{DWA}| en mode mathématique, vous aurez le message d'erreur suivant :
+
+\begin{BVerbatim}
+L'environnement {DWA} should be used only outside math mode.
+\end{BVerbatim}
+
+\interitem
+Une autre exemple est donné en interne par la définition de l'environnement \verb|{DispWithArrows*}|
+dans l'extension \pkg{witharrows} avec le code suivant:
+\begin{Verbatim}
+\NewDocumentEnvironment {DispWithArrows*} {}
+ {\WithArrowsOptions{notag}%
+ \DispWithArrows}
+ {\endDispWithArrows}
+\end{Verbatim}
+
+
+
+\section{Examples}
+
+\subsection{\textbackslash MoveEqLeft}
+
+Il est possible d'utiliser \verb|\MoveEqLeft| de \pkg{mathtools}. Dans ce cas, on doit se souvenir que la commande
+\verb|\MoveEqLeft| a aussi la valeur d'une esperluette (\verb|&|). Il faut en tenir compte pour le positionnement
+d'une éventuelle commande \verb|\Arrow|.
+
+
+%
+\begin{Verbatim}[formatcom=\small\color{gray}]
+$\begin{WithArrows}[interline=0.5ex]
+~emphase#\MoveEqLeft@ \arccos(x) = \arcsin \frac45 + \arcsin \frac5{13}
+\Arrow{parce que les deux sont dans $[-\frac{\pi}2,\frac{\pi}2]$} \\
+& \Leftrightarrow x = \sin\left(\arcsin\frac45 + \arcsin\frac5{13}\right) \\
+& \Leftrightarrow x = \frac45\cos\arcsin\frac5{13} + \frac5{13} \cos\arcsin\frac45
+\Arrow{$\forall x \in [-1,1], \cos(\arcsin x) = \sqrt{1-x^2}$} \\
+& \Leftrightarrow x = \frac45\sqrt{1-\bigl(\frac5{13}\bigr)^2}
++ \frac5{13}\sqrt{1-\bigl(\frac45\bigr)^2}
+\end{WithArrows}$
+\end{Verbatim}
+
+
+\medskip
+$\begin{WithArrows}[interline=0.5ex]
+\MoveEqLeft \arccos(x) = \arcsin \frac45 + \arcsin \frac5{13}
+\Arrow{parce que les deux sont dans $[-\frac{\pi}2,\frac{\pi}2]$} \\
+& \Leftrightarrow x = \sin\left(\arcsin\frac45 + \arcsin\frac5{13}\right) \\
+& \Leftrightarrow x = \frac45\cos\arcsin\frac5{13} + \frac5{13} \cos\arcsin\frac45
+\Arrow{$\forall x \in [-1,1], \cos(\arcsin x) = \sqrt{1-x^2}$} \\
+& \Leftrightarrow x = \frac45\sqrt{1-\bigl(\frac5{13}\bigr)^2}
++ \frac5{13}\sqrt{1-\bigl(\frac45\bigr)^2}
+\end{WithArrows}$
+
+
+\bigskip
+\subsection{Modifier la forme des nœuds}
+
+Il est possible de changer la forme des étiquettes, qui sont des nœuds Tikz, en
+modifiant la clé «\verb|every node|» de Tikz.
+
+\begin{Verbatim}
+\begin{WithArrows}%
+ [format = c,
+ interline = 4mm,
+ tikz = {~emphase#every node/.style = {circle,@
+ ~emphase# draw,@
+ ~emphase# auto = false,@
+ ~emphase# fill = gray!50,@
+ ~emphase# inner sep = 1pt,@
+ ~emphase# font = \tiny}@}]
+ 3 (2x+4) = 6 \Arrow{$\div 3$} \\
+ 2x+4 = 2 \Arrow{$-4$} \\
+ 2x = -2 \Arrow{$\div 2$} \\
+ 2x = -1
+\end{WithArrows}
+\end{Verbatim}
+
+\[\begin{WithArrows}[%
+ format = c,
+ interline = 4mm,
+ tikz = {every node/.style = {circle,
+ draw,
+ auto = false,
+ fill = gray!50,
+ inner sep = 1pt,
+ font = \tiny}}]
+ 3 (2x+4) = 6 \Arrow{$\div 3$} \\
+ 2x+4 = 2 \Arrow{$-4$} \\
+ 2x = -2 \Arrow{$\div 2$} \\
+ 2x = -1
+\end{WithArrows}\]
+
+
+\bigskip
+\subsection{Exemples avec l'option tikz-code}
+
+Rappelons que l'option \verb|tikz-code| est le code Tikz utilisé par \pkg{witharrows}
+pour tracer les flèches.\footnote{Si un environnement \verb|{DispWithArrows}| ou
+\verb|{DispWithArrows*}| est utilisé avec l'option \verb|wrap-lines|, la valeur de l'option
+\verb|tikz-code| n'est pas utilisée pour cet environnement (mais est utilisée pour les
+environnements imbriqués à l'intérieur).}
+
+\smallskip
+La valeur par défaut de \verb|tikz-code| est \verb|\draw (#1) to node {#3} (#2) ;|
+où les trois marqueurs \verb|#1|, \verb|#2| et \verb|#3| représentent le point de départ, le point d'arrivée
+et l'étiquette de la flèche.
+
+
+\bigskip
+\subsubsection{Exemple 1}
+Dans l'exemple suivant, nous définissons la valeur de \verb|tikz-code| avec deux
+instructions \verb|\path| : la première instruction trace la flèche elle-même et la seconde
+place l'étiquette dans un nœud Tikz dans le rectangle délimité par la flèche.
+
+\begin{Verbatim}
+\begin{DispWithArrows*}%
+ [displaystyle,
+ ygap = 2mm,
+ ystart = 0mm,
+ ~emphase#tikz-code = {\draw (~#1) -- ++(4.5cm,0) \verb|- (~#2) ;@
+ ~emphase# \path (~#1) -- (~#2) @
+ ~emphase# node[text width = 4.2cm, right, midway] {~#3} ;}@]
+S_n
+& = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+...........
+\end{Verbatim}
+
+
+\bigskip
+\begin{DispWithArrows*}[
+ displaystyle,
+ ygap = 2mm,
+ ystart = 0mm,
+ tikz-code = {\draw (#1) -- ++(4.5cm,0) |- (#2) ;
+ \path (#1) -- (#2)
+ node[text width = 4.2cm, right, midway] {#3} ;}]
+S_n
+& = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+\Arrow{$\cos x = \Re(e^{ix})$}\\
+& = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
+\Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+& = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
+\Arrow{$\exp$ est un morphisme pour $\times$ et $+$} \\
+& = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+\Arrow{somme de termes d'une suite géométrique de raison $e^{i\frac{2\pi}n}$}\\
+& = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
+& = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+\end{DispWithArrows*}
+
+\bigskip
+\subsubsection{Exemple 2}
+
+\label{example-WithArrowsRightX}
+Il est possible de modifier l'exemple précédent pour avoir «\verb|text width|» calculé automatiquement en fonction
+de la marge droite (d'une manière similaire à l'option \verb|wrap-lines|) dans les environnements
+\verb|{DispWithArrows}| et \verb|{DispWithArrows*}|. Dans la définition de \verb|tikz-code|, nous utilisons la commande
+\verb|\WithArrowsRightX| qui donne l'abscisse de la marge droite de la boîte de composition (pour TeX, il s'agit d'une commande
+et non d'une dimension). Pour la lisibilité, nous avons utilisé un style de \pkg{witharrows}. Cet exemple nécessite
+l'extension Tikz \pkg{calc}.
+
+\begin{Verbatim}
+\WithArrowsNewStyle{MonStyle}
+ {displaystyle,
+ ygap = 2mm,
+ xoffset = 0pt,
+ ystart = 0mm,
+ tikz-code = {\path let \p1 = (~#~#1)
+ in (~#~#1)
+ -- node [anchor = west,
+ text width = {~emphase#\WithArrowsRightX@ - \x1 - 0.5 em}]
+ {~#~#3}
+ (~#~#2) ;
+ \draw let \p1 = (~#~#1)
+ in (~#~#1) -- ++(~emphase#\WithArrowsRightX@ - \x1,0) |- (~#~#2) ; }}
+\end{Verbatim}
+
+\begin{Verbatim}
+\begin{DispWithArrows}[MonStyle]
+ S_n
+ & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+ \Arrow{$\cos x = \Re(e^{ix})$}\\
+...........
+\end{Verbatim}
+
+\WithArrowsNewStyle{MonStyle}
+{displaystyle,
+ ygap = 2mm,
+ xoffset = 0pt,
+ ystart = 0mm,
+ tikz-code = {\path let \p1 = (##1)
+ in (##1)
+ -- node [anchor = west,
+ text width = {\WithArrowsRightX - \x1 - 0.5 em}] {##3}
+ (##2) ;
+ \draw let \p1 = (##1)
+ in (##1) -- ++(\WithArrowsRightX - \x1,0) |- (##2) ; }}
+
+\begin{DispWithArrows}[MonStyle]
+S_n
+& = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+\Arrow{$\cos x = \Re(e^{ix})$}\\
+& = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
+\Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+& = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
+\Arrow{$\exp$ est un morphisme pour $\times$ et $+$} \\
+& = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+\Arrow{somme de termes d'une suite géométrique $e^{i\frac{2\pi}n}$}\\
+& = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
+& = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+\end{DispWithArrows}
+
+
+
+\bigskip
+\subsubsection{Exemple 3}
+
+Dans l'exemple suivant, nous changeons la forme de la flèche selon que la rangée de départ est plus longue ou
+plus courte que la rangée d'arrivée. Cet exemple nécessite l'extension \pkg{calc} de Tikz.
+
+
+\begin{Verbatim}
+\begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
+ ~emphase#tikz-code = {\draw[rounded corners,@
+ ~emphase# every node/.style = {circle,@
+ ~emphase# draw,@
+ ~emphase# auto = false,@
+ ~emphase# inner sep = 1pt,@
+ ~emphase# fill = gray!50,@
+ ~emphase# font = \tiny }]@
+ ~emphase# let \p1 = (~#1),@
+ ~emphase# \p2 = (~#2)@
+ ~emphase# dans \ifdim \x1 > \x2@
+ ~emphase# (\p1) -- node {~#3} (\x1,\y2) -- (\p2)@
+ ~emphase# \else@
+ ~emphase# (\p1) -- (\x2,\y1) -- node {~#3} (\p2)@
+ ~emphase# \fi ;}@]
+E & \Longleftrightarrow \frac{(x+4)}3 + \frac{5x+3}5 = 7
+\Arrow{$\times 15$}\\
+ & \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
+ & \Longleftrightarrow 5x+20 + 15x+9 = 105 \\
+ & \Longleftrightarrow 20x+29 = 105
+\Arrow{$-29$}\\
+ & \Longleftrightarrow 20x = 76
+\Arrow{$\div 20$}\\
+ & \Longleftrightarrow x = \frac{38}{10}
+\end{WithArrows}
+\end{Verbatim}
+
+
+\[\begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
+ tikz-code = {\draw[rounded corners,
+ every node/.style = {circle,
+ draw,
+ auto = false,
+ inner sep = 1pt,
+ fill = gray!50,
+ font = \tiny}]
+ let \p1 = (#1),
+ \p2 = (#2)
+ in \ifdim \x1 > \x2
+ (\p1) -- node {#3} (\x1,\y2) -- (\p2)
+ \else
+ (\p1) -- (\x2,\y1) -- node {#3} (\p2)
+ \fi ;}]
+E & \Longleftrightarrow \frac{(x+4)}3 + \frac{5x+3}5 = 7
+\Arrow{$\times 15$}\\
+ & \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
+ & \Longleftrightarrow 5x+20 + 15x+9 = 105 \\
+ & \Longleftrightarrow 20x+29 = 105
+\Arrow{$-29$}\\
+ & \Longleftrightarrow 20x = 76
+\Arrow{$\div 20$}\\
+ & \Longleftrightarrow x = \frac{38}{10}
+\end{WithArrows}\]
+
+
+
+\subsection{Boucle numérotée automatique}
+
+Supposons que nous voulions tracer une boucle avec des flèches numérotées. Dans ce but, il est
+possible d'écrire une commande dédiée \verb|\BoucleNumérotée| qui fera le travail quand elle
+sera utilisée dans le \verb|code-after|. Dans l'exemple suivant, nous avons écrit cette commande avec
+\verb|\NewDocumentCommand| de \pkg{xparse} et \verb|\foreach| de \pkg{pgffor} (ces deux
+extensions sont chargées quand \pkg{witharrows} est chargé.).
+
+\begin{Verbatim}
+\NewDocumentCommande \NombreedLoop {}
+ {\foreach \j dans {2,...,\WithArrowsNbLines}
+ { \pgfmathtruncatemacro{\i}{\j-1}
+ \Arrow[rr]{\i}{\j}{\i} }
+ \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
+\end{Verbatim}
+
+La commande \verb|\WithArrowsNbLines| est une commande disponible dans le \verb|code-after| qui donne
+le nombre total de lignes (=rangées) dans l'environnement courant (pour TeX, il s'agit d'une commande et non d'un
+compteur).
+
+
+\bigskip
+\begin{Verbatim}
+$\begin{WithArrows}[~emphase#code-after = \BoucleNumérotée@]
+a.\;& f \text{ est continue sur } E \\
+b.\;& f \text{ est continue en } 0 \\
+c.\;& f \text{ est bornée sur la sphère unité} \\
+d.\;& \exists K > 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
+e.\;& f \text{ est lipschitzienne}
+\end{WithArrows}$
+\end{Verbatim}
+
+\bigskip
+\begin{scope}
+\NewDocumentCommand \BoucleNumérotée {}
+ {\foreach \j in {2,...,\WithArrowsNbLines}
+ { \pgfmathtruncatemacro{\i}{\j-1}
+ \Arrow[rr]{\i}{\j}{\i} }
+ \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
+
+
+$\begin{WithArrows}[code-after = \BoucleNumérotée]
+a.\;& f \text{ est continue sur } E \\
+b.\;& f \text{ est continue en } 0 \\
+c.\;& f \text{ est bornée sur la sphère unité} \\
+d.\;& \exists K > 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
+e.\;& f \text{ est lipschitzienne}
+\end{WithArrows}$
+
+
+\bigskip
+Comme d'habitude, il est possible changer les caractéristiques des flèches et des nœuds
+avec l'option \verb|tikz|. Néanmoins, si nous voulons changer le style pour avoir, par
+exemple, les numéros entre parenthèses, le moyen le plus rapide est de changer la valeur de
+\verb|tikz-code|:
+
+\begin{Verbatim}
+tikz-code = {\draw (~#1) to node {\footnotesize (~#3)} (~#2) ;}
+\end{Verbatim}
+
+\WithArrowsOptions{tikz-code = {\draw (#1) to node {\footnotesize (#3)} (#2) ;}}
+
+$\begin{WithArrows}[code-after = \BoucleNumérotée]
+a.\;& f \text{ est continue on } E \\
+b.\;& f \text{ est continue dans } 0 \\
+c.\;& f \text{ est bornée sur la sphère unité} \\
+d.\;& \exists K > 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
+e.\;& f \text{ est lipschitzienne}
+\end{WithArrows}$
+
+\end{scope}
+
+
+
+
+
+\end{document}
diff --git a/macros/generic/witharrows/witharrows.dtx b/macros/generic/witharrows/witharrows.dtx
new file mode 100644
index 0000000000..8dc046bd9d
--- /dev/null
+++ b/macros/generic/witharrows/witharrows.dtx
@@ -0,0 +1,6977 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017-2019 by F. Pantigny
+% -----------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% \fi
+% \iffalse
+\def\myfileversion{2.0}
+\def\myfiledate{2019/07/30}
+%
+%
+%<*batchfile>
+\begingroup
+\input l3docstrip.tex
+\keepsilent
+\usedir{tex/latex/witharrows}
+\preamble
+
+Copyright (C) 2017-2019 by F. Pantigny
+-----------------------------------
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+\askforoverwritefalse
+\endgroup
+%</batchfile>
+%
+%<*driver>
+\documentclass[dvipsnames]{l3doc}% dvipsnames is for xcolor (loaded by Tikz, loaded by witharrows)
+\usepackage{xltxtra}
+\usepackage[xetex]{geometry}
+\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}
+\usepackage[footnotehyper]{witharrows}
+\usetikzlibrary{calc}
+\usepackage{mathtools}
+\usepackage{amssymb}
+\usepackage[only,llbracket,rrbracket]{stmaryrd}
+\usepackage{varwidth}
+\NewDocumentEnvironment {scope} {} {} {}
+\def\interitem{\vskip 7mm plus 2 mm minus 3mm}
+\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
+\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
+\DeclareMathOperator{\re}{Re}
+\skip \footins = 2 \bigskipamount
+\parindent 0pt
+\DisableCrossrefs
+\begin{document}
+\DocInput{witharrows.dtx}
+\end{document}
+%</driver>
+% \fi
+% \VerbatimFootnotes
+% \title{The package \pkg{witharrows} for plain-TeX and LaTeX\thanks{This document corresponds to the
+% version~\myfileversion\space of \pkg{witharrows}, at the date
+% of~\myfiledate.}} \author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}}
+%
+% \maketitle
+%
+% \hypersetup{
+% pdfinfo = {
+% Title = { The extension 'witharrows' },
+% Subject = { A extension for plain-TeX and LaTeX} ,
+% Author = { F. Pantigny }
+% }
+% }
+%
+%
+% \begin{abstract}
+% The LaTeX package \pkg{witharrows} provides environments |{WithArrows}| and
+% |{DispWithArrows}| similar to the environments |{aligned}| and |{align}| of
+% \pkg{amsmath} but with the possibility to draw arrows on the right side of the
+% alignment. These arrows are usually used to give explanations concerning the
+% mathematical calculus presented.
+% \end{abstract}
+%
+%
+% \vspace{1cm} In this document, we describe the LaTeX extension
+% \pkg{witharrows} (however, \pkg{witharrows} can also be used with plain-TeX:
+% see p.~\pageref{plain-TeX}). This package can be used with |xelatex|,
+% |lualatex|, |pdflatex| but also by the classical workflow
+% |latex|-|dvips|-|ps2pdf| (or Adobe Distiller). This package loads the packages
+% \pkg{expl3}, \pkg{l3keys2e}, \pkg{xparse}, \pkg{tikz} and the Tikz libraries
+% \pkg{arrows.meta} and \pkg{bending}. The arrows are drawn with Tikz and that's
+% why several compilations may be necessary.
+%
+% \bigskip
+% This package provides an environment |{WithArrows}| to construct alignments of
+% equations with arrows for the explanations on the right side:
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 ~emphase#\Arrow{we expand}@ \\
+% & = a^2 + 2a + 1 % don't put \\ here
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+%
+%
+% \medskip
+% The arrow has been drawn with the command |\Arrow| on the row from which it
+% starts. The command |\Arrow| must be used in the second column (the best way
+% is to put it at the end of the second cell of the row as in the previous
+% example).
+%
+% \medskip
+% The environment |{WithArrows}| bears similarities with the environment
+% |{aligned}| of \pkg{amsmath} (and |mathtools|). The extension \pkg{witharrows}
+% also provides an environment |{DispWithArrows}| which is similar to the
+% environment |{align}| of \pkg{amsmath}: cf. p. \pageref{DispWithArrows}.
+%
+%
+% \section{Options for the shape of the arrows}
+%
+% The command |\Arrow| has several options. These options can be put between
+% square brackets, before, or after the mandatory argument.
+%
+% The option |jump| gives the number\footnote{It's not possible to give a
+% non-positive value to |jump|. See below (p.~\pageref{Backwards}) the way to
+% draw an arrow which goes backwards.} of rows the arrow must jump (the default
+% value is, of course,~$1$).
+%
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2 \Arrow[~emphase#jump=2@]{we expand} \\
+% & = (a+b)^2 + 2(a+b) +1 \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2 \Arrow[jump=1+1]{we expand} \\
+% & = (a+b)^2 + 2(a+b) +1 \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+%
+% \interitem
+% It's possible to put several arrows which start from the same row.
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2 ~emphase#\Arrow{}\Arrow{}[jump=2]@ \\
+% & = (a+b)^2 + 2(a+b) +1 \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2 \Arrow{}\Arrow{}[jump=2] \\
+% & = (a+b)^2 + 2(a+b) +1 \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+%
+% \interitem
+% The option |xoffset| shifts the arrow to the right (we usually don't want the
+% arrows to be stucked on the text). The default value of |xoffset| is $3$~mm.
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2
+% \Arrow[~emphase#xoffset=1cm@]{with \texttt{xoffset=1cm}} \\
+% & = (a+b)^2 + 2(a+b) +1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2
+% \Arrow[xoffset=1cm]{with \texttt{xoffset=1cm}} \\
+% & = (a+b)^2 + 2(a+b) +1
+% \end{WithArrows}$
+%
+%
+% \interitem
+% The arrows are drawn with Tikz. That's why the command |\Arrow| has an option
+% |tikz| which can be used to give to the arrow (in fact, the command |\path| of
+% Tikz) the options proposed by Tikz for such an arrow. The following example
+% gives an thick arrow.
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[~emphase#tikz=thick@]{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[tikz=thick]{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \interitem
+% It's also possible to change the arrowheads. For example, we can draw an arrow
+% which goes backwards with the Tikz option~|<-|.
+% \label{Backwards}
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow~emphase#[tikz=<-]@{we factorize} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[tikz=<-]{we factorize} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \interitem
+% It's also possible to suppress both tips of the arrow with the Tikz option
+% ``|-|''.
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[~emphase#tikz=-@]{very classical} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[tikz=-]{very classical} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \interitem
+% In order to have straight arrows instead of curved ones, we must use the Tikz
+% option ``|bend left = 0|''.
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow~emphase#[tikz={bend left=0}]@{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[tikz={bend left=0}]{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \smallskip
+% In fact, it's possible to change more drastically the shape or the arrows with
+% the option |tikz-code| (presented p.~\pageref{tikz-code}).
+%
+% \interitem
+% It's possible to use the Tikz option ``|text width|'' to control the width of
+% the text associated to the arrow.\footnote{It's possible to avoid the
+% hyphenations of the words with the option ``|align = flush left|'' of Tikz.}
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2
+% \Arrow[jump=2,~emphase#tikz={text width=5.3cm}@]{We have done...} \\
+% & = (a+b)^2 + 2(a+b) +1 \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = \bigl((a+b)+1\bigr)^2
+% \Arrow[jump=2,tikz={text width=5.3cm}]{We have done a two-stages expansion but
+% it would have been clever
+% to expand with the multinomial theorem.} \\
+% & = (a+b)^2 + 2(a+b) +1 \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% In the environments |{DispWithArrows}| and |{DispWithArrows*}|, there is an
+% option |wrap-lines|. With this option, the lines of the labels are
+% automatically wrapped on the right: see p.~\pageref{wrap-lines}.
+%
+% \interitem
+% If we want to change the font of the text associated to the arrow, we can, of
+% course, put a command like |\bfseries|, |\large| or |\sffamily| at the
+% beginning of the text. But, by default, the texts are composed with a
+% combination of |\small| and |\itshape|. When adding |\bfseries| at the
+% beginning of the text, we won't suppress the |\small| and the |\itshape| and
+% we will consequently have a text in a bold, italic and small font.
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{~emphase#\bfseries@ we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{\bfseries we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \interitem
+% It's possible to put commands |\\| in the text to force new lines\footnote{By
+% default, this is not possible in a Tikz node. However, in \pkg{witharrows},
+% the nodes are created with the option |align=left|, and, thus, it becomes
+% possible.}. However, if we put a |\\| , a command of font placed in the
+% beginning of the text will have effect only until the first command |\\| (like
+% in an environment |{tabular}|). That's why Tikz gives an option |font| to
+% modify the font of the whole text. Nevertheless, if we use the option
+% |tikz={font={\bfseries}}|, the default specification of |\small| and
+% |\itshape| will be overwritten.
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[~emphase#tikz={font={\bfseries}}@]{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow[tikz={font={\bfseries}}]{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \medskip
+% If we want exactly the same result as previously, we have to give to the
+% option |font| the value |\itshape\small\bfseries|.
+%
+%
+% \interitem
+% The options can be given directly between square brackets to the environment
+% |{WithArrows}|. There must be no space between the |\begin{WithArrows}| and
+% the opening bracket (|[|) of the options of the environment. Such options
+% apply to all the arrows of the environment.\footnote{They also apply to the
+% nested environments |{WithArrows}| (with the logical exceptions of
+% |interline|, |code-before| and |code-after|).}
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#tikz=blue@]
+% A & = \bigl((a+b)+1\bigr)^2 \Arrow{first expansion.} \\
+% & = (a+b)^2 + 2(a+b) +1 \Arrow{second expansion.} \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[tikz=blue]
+% A & = \bigl((a+b)+1\bigr)^2 \Arrow{first expansion.} \\
+% & = (a+b)^2 + 2(a+b) +1 \Arrow{second expansion.} \\
+% & = a^2 + 2ab + b^2 + 2a + 2b +1
+% \end{WithArrows}$
+%
+%
+% \interitem
+% The environment |{WithArrows}| has an option |displaystyle|. With this option,
+% all the elements are composed in |\displaystyle| (like in an environment
+% |{aligned}| of \pkg{amsmath}).
+%
+% \medskip
+% Without the option |displaystyle|:
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% \int_0^1 (x+1)^2 dx
+% & = \int_0^1 (x^2+2x+1) dx
+% \Arrow{linearity of integration} \\
+% & = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
+% & = \frac13 + 2\frac12 + 1 \\
+% & = \frac73
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% \int_0^1 (x+1)^2 dx
+% & = \int_0^1 (x^2+2x+1) dx
+% \Arrow{linearity of integration} \\
+% & = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
+% & = \frac13 + 2\frac12 + 1 \\
+% & = \frac73
+% \end{WithArrows}$
+%
+%
+% \medskip
+% The same example with the option |displaystyle|:\par\nobreak
+%
+% $\begin{WithArrows}[displaystyle]
+% \int_0^1 (x+1)^2 dx
+% & = \int_0^1 (x^2+2x+1) dx
+% \Arrow{linearity of integration} \\
+% & = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
+% & = \frac13 + 2\frac12 + 1 \\
+% & = \frac73
+% \end{WithArrows}$
+%
+%
+%
+% \interitem
+% Almost all the options can also be set at the document level with the command
+% |\WithArrowsOptions|. In this case, the scope of the declarations is the
+% current TeX group (these declarations are ``semi-global''). For example, if we
+% want all the environments |{WithArrows}| composed in |\displaystyle| with blue
+% arrows, we can write
+% |\WithArrowsOptions{displaystyle,tikz=blue}|.\footnote{It's also possible to
+% configure \pkg{witharrows} by modifying the Tikz style |WithArrows/arrow|
+% which is the style used by \pkg{witharrows} when drawing an arrow. For
+% example, to have the labels in blue with roman (upright) types, one can use
+% the following instruction:
+% |\tikzset{WithArrows/arrow/.append style = {blue,font = {}}}|.}
+%
+% \begin{Verbatim}
+% ~emphase#\WithArrowsOptions{displaystyle,tikz=blue}@
+% $\begin{WithArrows}
+% \sum_{i=1}^n (x_i+1)^2
+% & = \sum_{i=1}^n (x_i^2+2x_i+1) \Arrow{by linearity}\\
+% & = \sum_{i=1}^n x_i^2 + 2\sum_{i=1}^nx_i+ n
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% \begin{scope}
+% \WithArrowsOptions{displaystyle,tikz=blue}
+% $\begin{WithArrows}
+% \sum_{i=1}^n (x_i+1)^2
+% & = \sum_{i=1}^n (x_i^2+2x_i+1) \Arrow{by linearity}\\
+% & = \sum_{i=1}^n x_i^2 + 2\sum_{i=1}^nx_i+ n
+% \end{WithArrows}$
+% \end{scope}
+%
+%
+% \interitem
+% The command |\Arrow| is recognized only in the environments |{WithArrows}|. If
+% we have a command |\Arrow| previously defined, it's possible to go on using it
+% outside the environments |{WithArrows}|.
+%
+% However, a previouly defined command |\Arrow| may still be useful in an
+% environment |{WithArrows}|. If we want to use it in such an environment, it's
+% possible to change the name of the command |\Arrow| of the package
+% \pkg{witharrows}: there is an option |command-name|\footnote{For historical
+% reasons, there is an alias for this option: |CommandName|.} for this purpose.
+% The new name of the command must be given to the option \emph{without} the
+% leading backslash.
+% %
+% \begin{Verbatim}
+% \NewDocumentCommand {\Arrow} {} {\longmapsto}
+% $\begin{WithArrows}[~emphase#command-name=Explanation@]
+% f & = \bigl(x \Arrow (x+1)^2\bigr)
+% ~emphase#\Explanation{we work directly on fonctions}@\\
+% & = \bigl(x \Arrow x^2+2x+1\bigr)
+% \end{WithArrows}$
+% \end{Verbatim}
+% %
+% \begin{scope}
+% \NewDocumentCommand {\Arrow} {} {\longmapsto}
+% $\begin{WithArrows}[command-name=Explanation]
+% f & = \bigl(x \Arrow (x+1)^2\bigr)
+% \Explanation{we work directly on fonctions}\\
+% & = \bigl(x \Arrow x^2+2x+1\bigr)
+% \end{WithArrows}$
+% \end{scope}
+%
+%
+% \interitem
+% The environment |{WithArrows}| provides also two options |code-before| and
+% |code-after|\footnote{For historical reasons, there are aliases for these
+% options: |CodeBefore| and |CodeAfter|.} for LaTeX code that will be executed
+% at the beginning and at the end of the environment. These options are not
+% designed to be hooks (they are available only at the environment level and
+% they do not apply to the nested environments).
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#code-before = \color{blue}@]
+% A & = (a+b)^2 \Arrow{we expand} \\
+% & = a^2 + 2ab + b^2
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[code-before = \color{blue}]
+% A & = (a+b)^2 \Arrow{we expand} \\
+% & = a^2 + 2ab + b^2
+% \end{WithArrows}$
+%
+% \medskip
+% Special commands are available in |code-after|: a command |\WithArrowsNbLines|
+% which gives the number of lines (=rows) of the current environment (this is a
+% command and not a counter), a special form of the command |\Arrow| and the
+% command |\MultiArrow|: these commands are described in the section concerning
+% the nested environments, p.~\pageref{NestedEnv}.
+%
+% \section{Numbers of columns}
+%
+% So far, we have used the environment |{WithArrows}| with two columns. However,
+% it's possible to use the environment with an arbitrary number of columns with
+% the option |format|. The value given to this option is like the preamble of an
+% environment |{array}|, that is to say a sequence of letters |r|, |c| and |l|.
+% The default value of the option |format| is, in fact, |rl|.
+%
+% \bigskip
+% For exemple, if we want only one column left-aligned, we use the option |format=l|.
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#format = l@]
+% f(x) \ge g(x) \Arrow{by squaring both sides} \\
+% f(x)^2 \ge g(x)^2 \Arrow{by moving to left side} \\
+% f(x)^2 - g(x)^2 \ge 0
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[format = l]
+% f(x) \ge g(x) \Arrow{by squaring both sides} \\
+% f(x)^2 \ge g(x)^2 \Arrow{by moving to left side} \\
+% f(x)^2 - g(x)^2 \ge 0
+% \end{WithArrows}$
+%
+% \interitem
+% In the following example, we use five columns all centered (the environment
+% |{DispWithArrows*}| is presented p.~\pageref{DispWithArrows}).
+%
+% \begin{Verbatim}
+% \begin{DispWithArrows*}[~emphase#format = ccccc@,
+% wrap-lines,
+% tikz = {align = flush left},
+% interline=1mm]
+% k & \;\le\; & t & \;\le\; & k+1 \\
+% \frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k}
+% \Arrow{we can integrate the inequalities since $k \leq k+1$ } \\
+% \int\limits_k^{k+1} \frac{d t}{k+1}
+% & \le & \int\limits_k^{k+1} \frac{dt}{t}
+% & \le & \int\limits_k^{k+1} \frac{dt}{k} \\
+% \frac{1}{k+1} & \le & \ln(k+1)-\ln(k) & \le & \frac{1}{k}
+% \end{DispWithArrows*}
+% \end{Verbatim}
+% \begin{DispWithArrows*}[format = ccccc,
+% wrap-lines,
+% tikz = {align = flush left},
+% interline=1mm]
+% k & \;\le\; & t & \;\le\; & k+1 \\
+% \frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k}
+% \Arrow{we can integrate the inequalities since $k \leq k+1$ } \\
+% \int\limits_k^{k+1} \frac{d t}{k+1}
+% & \le & \int\limits_k^{k+1} \frac{dt}{t}
+% & \le & \int\limits_k^{k+1} \frac{dt}{k} \\
+% \frac{1}{k+1} & \le & \ln(k+1)-\ln(k) & \le & \frac{1}{k}
+% \end{DispWithArrows*}
+%
+%
+% \section{Precise positioning of the arrows}
+%
+%
+% The environment |{WithArrows}| defines, during the composition of the array,
+% two series of nodes materialized in red in the following example.\footnote{The
+% option |show-nodes| can be used to materialize the nodes. The nodes are in
+% fact Tikz nodes of shape ``rectangle'', but with zero width. An arrow between
+% two nodes starts at the \emph{south} anchor of the first node and arrives at
+% the \emph{north} anchor of the second node.}
+%
+% \smallskip
+% $\begin{WithArrows}[displaystyle,show-nodes]
+% I
+% & = \int_{\frac{\pi}4}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)(-d u) \\
+% & = \int_0^{\frac{\pi}4} \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)d u \\
+% & = \int_0^{\frac{\pi}4}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
+% & =\int_0^{\frac{\pi}4}\ln\left(\frac{1+\tan u+1-\tan u}{1+\tan u}\right) d u \\
+% & =\int_0^{\frac{\pi}4} \ln\left(\frac2{1+\tan u}\right)\, d u\\
+% & =\int_0^{\frac{\pi}4}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
+% & =\frac{\pi}4\ln2-\int_0^{\frac{\pi}4}\ln(1+\tan u)\, d u \\
+% & =\frac{\pi}4\ln2-I
+% \end{WithArrows}$
+%
+% \bigskip
+% The nodes of the left are at the end of each line of text. These nodes will be
+% called \emph{left nodes}. The nodes of the right side are aligned vertically
+% on the right side of the array. These nodes will be called \emph{right nodes}.
+%
+% By default, the arrows use the right nodes. We will say that they are in |rr|
+% mode ($r$ for \emph{right}). These arrows are vertical (we will say that an
+% arrow is \emph{vertical} when its two ends have the same abscissa).
+%
+%
+% \smallskip
+% However, it's possible to use the left nodes, or a combination of left and
+% right nodes, with one of the options |lr|, |rl| and |ll| ($l$ for
+% \emph{left}). Those arrows are, usually, not vertical.
+%
+%
+% Therefore
+% $\begin{WithArrows}[displaystyle]
+% I
+% & = \int_{\frac{\pi}4}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)(-d u)
+% \Arrow[lr]{This arrow uses the |lr| option.}\\
+% & = \int_0^{\frac{\pi}4} \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)d u \\
+% & = \int_0^{\frac{\pi}4}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
+% & =\int_0^{\frac{\pi}4}\ln\left(\frac{1+\tan u+1-\tan u}{1+\tan u}\right) d u
+% \Arrow[ll,jump=2,tikz={text width = 5cm}]{This arrow uses a |ll| option
+% and a |jump| equal to $2$}\\
+% & =\int_0^{\frac{\pi}4} \ln\left(\frac2{1+\tan u}\right)\, d u\\
+% & =\int_0^{\frac{\pi}4}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
+% & =\frac{\pi}4\ln2-\int_0^{\frac{\pi}4}\ln(1+\tan u)\, d u \\
+% & =\frac{\pi}4\ln2-I
+% \end{WithArrows}$
+%
+%
+%
+% \interitem
+% There is also an option called |i| (\emph{i} for \emph{intermediate}). With
+% this option, the arrow is vertical and at the leftmost position.
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% (a+b)(a+ib)(a-b)(a-ib)
+% & = (a+b)(a-b)\cdot(a+ib)(a-ib) \\
+% & = (a^2-b^2)(a^2+b^2) \Arrow~emphase#[i]@{because $(x-y)(x+y)=x^2-y^2$}\\
+% & = a^4-b^4
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% (a+b)(a+ib)(a-b)(a-ib)
+% & = (a+b)(a-b)\cdot(a+ib)(a-ib) \\
+% & = (a^2-b^2)(a^2+b^2) \Arrow[i]{because $(x-y)(x+y)=x^2-y^2$}\\
+% & = a^4-b^4
+% \end{WithArrows}$
+%
+%
+% \interitem
+% The environment |{WithArrows}| gives also a |group| option. With this option,
+% \emph{all} the arrows of the environment are grouped on a same vertical line
+% and at a leftmost position.
+% %
+% \begin{Verbatim}[formatcom=\small\color{gray}]
+% $\begin{WithArrows}[~emphase#displaystyle,group@]
+% 2xy'-3y=\sqrt x
+% & \Longleftrightarrow 2x(K'y_0+Ky_0')-3Ky_0 = \sqrt x \\
+% & \Longleftrightarrow 2xK'y_0 + K(2xy_0'-3y_0) = \sqrt x \\
+% & \Longleftrightarrow 2x K'y_0 = \sqrt x \Arrow{...}\\
+% ...
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+%
+% $\begin{WithArrows}[displaystyle,group]
+% 2xy'-3y=\sqrt x
+% & \Longleftrightarrow 2x(K'y_0+Ky_0')-3Ky_0 = \sqrt x \\
+% & \Longleftrightarrow 2xK'y_0 + K(2xy_0'-3y_0) = \sqrt x \\
+% & \Longleftrightarrow 2x K'y_0 = \sqrt x \Arrow{we replace $y_0$ by its value}\\
+% & \Longleftrightarrow 2xK'x^{\frac32} = x^{\frac12} \Arrow{simplification of the $x$}\\
+% & \Longleftrightarrow K' = \tfrac1{2x^2} \Arrow{antiderivation}\\
+% & \Longleftrightarrow K = -\tfrac1{2x}
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% The environment |{WithArrows}| gives also a |groups| option (with a \emph{s}
+% in the name). With this option, the arrows are divided into several
+% ``groups''. Each group is a set of connected\footnote{More precisely: for each
+% arrow $a$, we note $i(a)$ the number of its initial row and $f(a)$ the number
+% of its final row; for two arrows $a$ and $b$, we say that $a \sim b$ when
+% $\llbracket i(a),f(a)\rrbracket \cap \llbracket i(b),f(b)\rrbracket \neq
+% \varnothing$; the groups are the equivalence classes of the transitive closure
+% of $\sim$.} arrows. All the arrows of a given group are grouped on a same
+% vertical line and at a leftmost position.
+%
+% \bigskip
+% $\begin{WithArrows}[groups]
+% A & = B \Arrow{one} \\
+% & = C+D \Arrow{two} \\
+% & = D' \\
+% & = E+F+G+H+I \\
+% & = K + L + M \Arrow{three}\\
+% & = N \Arrow{four}\\
+% & = O
+% \end{WithArrows}$
+%
+% \bigskip
+% In an environment which uses the option |group| or the option |groups|, it's
+% still possible to give an option of position (|ll|, |lr|, |rl|, |rr| or |i|)
+% to an individual arrow. Such arrow will be drawn irrespective of the groups.
+% It's also possible to start a new group by applying the option |new-group| to
+% an given arrow.
+%
+% \bigskip
+% If desired, the option |group| or the option |groups| can be given to the
+% command |\WithArrowsOptions| so that it will become the default value. In this
+% case, it's still possible to come back to the default behaviour for a given
+% environment |{WithArrows}| with the option |rr|: |\begin{WithArrows}[rr]|
+%
+%
+% \vspace{1cm}
+% In the following example, we have used the option |group| for the environment
+% and the option |rr| for the last arrow (that's why the last arrow is not
+% aligned with the others).
+%
+% $\begin{WithArrows}[interline=1mm,group]
+% \sum\limits_{k=0}^n\frac{\cos kx}{\cos^k x}
+% & = \sum\limits_{k=0}^n \frac{\Re (e^{ikx})}{(\cos x)^k}
+% \Arrow{$(\cos x)^k$ is real} \\
+% & = \sum\limits_{k=0}^n \Re\left(\frac{e^{ikx}}{(\cos x)^k}\right)
+% \Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+% & = \Re \left(\sum\limits_{k=0}^n \left(\frac{e^{ix}}{\cos x}\right)^k\right)
+% \Arrow{sum of terms of a geometric progression} \\
+% & = \Re \left(\frac{1-\left(\frac{e^{ix}}{\cos x}\right)^{n+1}}{1-\frac{e^{ix}}{\cos x}} \right)
+% \Arrow{algebraic calculation} \\
+% & = \Re \left(\frac{1-\frac{e^{i(n+1)x}}{\cos^{n+1}x}}{1-\frac{e^{ix}}{\cos x}}\right)
+% \Arrow{reduction to common denominator} \\
+% & = \Re \left(\frac{\frac{\cos^{n+1}x-e^{i(n+1)x}}{\cos^{n+1}x}}{\frac{\cos x-e^{ix}}{\cos x}}\right)
+% \Arrow{$\Re(kz) = k\cdot\Re(z)$ if $k$ is real} \\
+% & = \frac1{\cos^n x}\Re \left(\frac{\cos^{n+1}x-e^{i(n+1)x}}{\cos x-e^{ix}}\right)
+% \Arrow[rr]{algebraic form of the complexes} \\
+% & =\frac1{\cos^n x}\Re\left(\frac{\cos^{n+1}x-(\cos(n+1)x+i\sin(n+1)x)}{\cos x-(\cos x+i\sin x)}\right) \\
+% & =\frac1{\cos^n x}\Re\left(\frac{(\cos^{n+1}x-\cos(n+1)x)-i\sin(n+1)x}{-i\sin x}\right) \\
+% & = \frac1{\cos^nx}\cdot\frac{\sin(n+1)x}{\sin x}
+% \end{WithArrows}$
+%
+% \interitem
+%
+% \section[The options 'up' and 'down' for individual arrows]%
+% {The options ``up'' and ``down'' for individual arrows}
+%
+% \label{up-and-down}
+% At the local level, there are also two options for individuals arrows, called
+% ``|up|'' and ``|down|''. The following example illustrates these types of
+% arrows:
+%
+% \begin{Verbatim}
+% \(\begin{WithArrows}
+% A & = B
+% \Arrow~emphase#[up]@{an arrow of type \texttt{up}} \\
+% & = C + C + C + C + C + C + C + C \\
+% & = C + C + C + C + C + C + C + C
+% \Arrow~emphase#[down]@{an arrow of type \texttt{down}} \\
+% & = E + E
+% \end{WithArrows}\)
+% \end{Verbatim}
+%
+% \vspace{1cm}
+% \(\begin{WithArrows}
+% A & = B
+% \Arrow[up]{an arrow of type \texttt{up}} \\
+% & = C + C + C + C + C + C + C + C \\
+% & = C + C + C + C + C + C + C + C
+% \Arrow[down]{an arrow of type \texttt{down}} \\
+% & = E + E
+% \end{WithArrows}\)
+%
+%
+% \vspace{1cm}
+% The options |up| and |down| require the package \pkg{varwidth} and the Tikz
+% library \pkg{calc}. It they are not loaded, an error will be raised.
+%
+%
+% \interitem
+%
+% \section{Comparison with the environment \{aligned\}}
+%
+% |{WithArrows}| bears similarities with the environment |{aligned}| of the
+% extension \pkg{amsmath}. These are only similarities because |{WithArrows}|
+% has not been written upon the environment |{aligned}|.\footnote{In fact, it's
+% possible to use the package \pkg{witharrows} without the package
+% \pkg{amsmath}.}
+%
+% \interitem
+% As in the environments of \pkg{amsmath}, it's possible to change the spacing
+% between two given rows with the option of the command |\\| of end of line
+% (it's also possible to use |\\*| but it has exactly the same effect as |\\|
+% since an environment |{WithArrows}| is always unbreakable). This option is
+% designed to be used with positive values only.
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{we expand} ~emphase#\\[2ex]@
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \\*[2ex]
+% \noalign{\vspace{3mm}}
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+%
+% \interitem
+% In the environments of \pkg{amsmath} (or \pkg{mathtools}), the spacing between
+% rows is fixed by a parameter called |\jot| (it's a dimension and not a skip).
+% That's also the case for the environment |{WithArrows}|. An option |jot| has
+% been given to the environment |{WithArrows}| in order to change the value of
+% this parameter |\jot| for a given environment.\footnote{It's also possible to
+% change |\jot| with the environment |{spreadlines}| of \pkg{mathtools}.}
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}[displaystyle,~emphase#jot=2ex@]
+% F & = \frac12G \Arrow{we expand}\\
+% & = H + \frac12K \Arrow{we go on}\\
+% & = K
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+%
+% $\begin{WithArrows}[displaystyle,jot=2ex]
+% F & = \frac12G \Arrow{we expand}\\
+% & = H + \frac12K \Arrow{we go on}\\
+% & = K
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% However, this new value of |\jot| will also be used in other alignments
+% included in the environment~|{WithArrows}|:
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}[jot=2ex]
+% \varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+% \Arrow{$x$ and $y$ are real}\\
+% & \Leftrightarrow \left\{
+% \begin{aligned}
+% x+y & = 0 \\
+% x+2y & = 0
+% \end{aligned}
+% \right.
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+%
+% $\begin{WithArrows}[jot=2ex]
+% \varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+% \Arrow{$x$ and $y$ are real}\\
+% & \Leftrightarrow \left\{
+% \begin{aligned}
+% x+y & = 0 \\
+% x+2y & = 0
+% \end{aligned}
+% \right.
+% \end{WithArrows}$
+%
+% \bigskip
+% Maybe this doesn't correspond to the desired outcome. That's why an option
+% |interline| is proposed. It's possible to use a skip (=glue) for this option.
+% %
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#interline=2ex@]
+% \varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+% \Arrow{$x$ and $y$ are real}\\
+% & \Leftrightarrow \left\{
+% \begin{aligned}
+% x+y & = 0 \\
+% x+2y & = 0 \\
+% \end{aligned}
+% \right.
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+%
+% $\begin{WithArrows}[interline=2ex]
+% \varphi(x,y) = 0 & \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0
+% \Arrow{$x$ and $y$ are real}\\
+% & \Leftrightarrow \left\{
+% \begin{aligned}
+% x+y & = 0 \\
+% x+2y & = 0 \\
+% \end{aligned}
+% \right.
+% \end{WithArrows}$
+%
+%
+% \interitem
+% Like the environment |{aligned}|, |{WithArrows}| has an option of placement
+% which can assume the values |t|, |c| or |b|. However, the default value is not
+% |c| but |t|. If desired, it's possible to have the |c| value as the default
+% with the command |\WithArrowsOptions{c}| at the beginning of the document.
+% %
+% \begin{Verbatim}
+% So\enskip
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% So\enskip
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+% \bigskip
+% The value |c| may be useful, for example, if we want to add curly braces:
+%
+% \smallskip
+% \begin{Verbatim}
+% Let's set\enskip $~emphase#\left\{@
+% \begin{WithArrows}[~emphase#c@]
+% f(x) & = 3x^3+2x^2-x+4
+% \Arrow[tikz=-]{both are polynoms}\\
+% g(x) & = 5x^2-5x+6
+% \end{WithArrows}
+% ~emphase#\right.@$
+% \end{Verbatim}
+%
+%
+% Let's set\enskip $\left\{
+% \begin{WithArrows}[c]
+% f(x) & = 3x^3+2x^2-x+4
+% \Arrow[tikz=-]{both are polynoms}\\
+% g(x) & = 5x^2-5x+6
+% \end{WithArrows}
+% \right.$
+%
+%
+% \interitem
+% Unlike |{aligned}|, the environment |{WithArrows}| uses |\textstyle| by
+% default.
+%
+% Once again, it's possible to change this behaviour with |\WithArrowsOptions|:
+%
+% \quad |\WithArrowsOptions{displaystyle}|.
+%
+%
+% \smallskip
+% The following example is composed with |{aligned}|:\par\nobreak
+%
+% \smallskip
+% $\left\{
+% \begin{aligned}
+% \sum_{i=1}^n (x_i+1)^2
+% & = \sum_{i=1}^n (x_i^2 + 2x_i+1) \\
+% & = \sum_{i=1}^n x_i^2 + 2 \sum_{i=1}^nx_i + n
+% \end{aligned}
+% \right.$
+%
+%
+% \medskip
+% The following is composed with |{WithArrows}[c,displaystyle]|. The results are
+% strictly identical.\footnote{In versions of \pkg{amsmath} older than the
+% 5~nov.~2016, a thin space was added on the left of an environment |{aligned}|.
+% The new versions do not add this space and neither do
+% |{WithArrows}|.}\par\nobreak
+%
+% \smallskip
+% $\left\{
+% \begin{WithArrows}[c,displaystyle]
+% \sum_{i=1}^n (x_i+1)^2
+% & = \sum_{i=1}^n (x_i^2 + 2x_i+1) \\
+% & = \sum_{i=1}^n x_i^2 + 2 \sum_{i=1}^nx_i + n
+% \end{WithArrows}
+% \right.$
+%
+%
+% \section{Arrows in nested environments}
+%
+% \label{NestedEnv}
+%
+% The environments |{WithArrows}| can be nested. In this case, the options given
+% to the encompassing environment applies also to the inner ones (with logical
+% exceptions for |interline|, |code-before| and |code-after|). The command |Arrow|
+% can be used as usual in each environment |{WithArrows}|.
+%
+% \begin{Verbatim}[formatcom=\small\color{gray}]
+% $~emphase#\begin{WithArrows}@
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \Arrow{the numbers are real}\\
+% & \Leftrightarrow
+% \left\{~emphase#\begin{WithArrows}@[c]
+% x+2y & = 0 \\
+% 2x+4y & = 0
+% ~emphase#\end{WithArrows}@\right. \\
+% & \Leftrightarrow
+% \left\{~emphase#\begin{WithArrows}@[c]
+% x+2y & = 0 \Arrow[tikz=-]{the same equation}\\
+% x+2y & = 0
+% ~emphase#\end{WithArrows}@\right. \\
+% & \Leftrightarrow x+2y=0
+% ~emphase#\end{WithArrows}@$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \Arrow{the numbers are real}\\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% 2x+4y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \Arrow[tikz=-]{the same equation}\\
+% x+2y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow x+2y=0
+% \end{WithArrows}$
+%
+% \bigskip
+% However, one may want to draw an arrow between rows that are not in the same
+% environment. For example, one may want to draw the following arrow :
+%
+% \bigskip
+% $\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division by $2$} ]
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% 2x+4y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% x+2y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow x+2y=0
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% Such a construction is possible by using |\Arrow| in the |code-after| option.
+% Indeed, in |code-after|, a special version of |\Arrow| is available (we will
+% call it ``|\Arrow| in |code-after|'').
+%
+% \smallskip
+% A command |\Arrow| in |code-after| takes three arguments :
+% \begin{itemize}
+% \item a specification of the start row of the arrow ;
+% \item a specification of the end row of the arrow ;
+% \item the label of the arrow.
+% \end{itemize}
+% As usual, it's also possible to give options within square brackets before or
+% after the three arguments. However, these options are limited (see below).
+%
+% \bigskip
+% The specification of the row is constructed with the position of the concerned
+% environment in the nesting tree, followed (after an hyphen) by the number of
+% the row.
+%
+% \bigskip
+% In the previous example, there are two environments |{WithArrows}| nested in
+% the main environment |{WithArrows}|.
+%
+% $\begin{WithArrows}[tikz-code = {\path (#1) to node {#3} (#2) ; }]
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+% & \Leftrightarrow \color{blue}
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \Arrow{environment number 1}\\
+% 2x+4y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow \color{red}
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \Arrow{environment number 2}\\
+% x+2y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow x+2y=0
+% \end{WithArrows}$
+%
+% \bigskip
+% The arrow we want to draw starts in the row~$2$ of the sub-environment
+% number~$1$ (and therefore, the specification is |1-2|) and ends in the row~$2$
+% of the sub-environment number~$2$ (and therefore, the specification is |2-2|).
+% We can draw the arrow with the following command |\Arrow| in |code-after| :
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#code-after = \Arrow{1-2}{2-2}{division by $2$}@ ]
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+% .........
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[code-after = \Arrow{1-2}{2-2}{division by $2$} ]
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% 2x+4y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% x+2y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow x+2y=0
+% \end{WithArrows}$
+%
+% \bigskip
+% The options allowed for a command |\Arrow| in |code-after| are : |ll|, |lr|,
+% |rl|, |rr|, |v|, |xoffset|, |tikz| and |tikz-code|. Except |v|, which is
+% specific to |\Arrow| in |code-after|, all these options have their usual
+% meaning.
+%
+% With the option |v|, the arrow drawn is vertical to an abscissa computed with
+% the start row and the end row only : the intermediate lines are not taken into
+% account unlike with the option |i|. Currently, the option |i| is not available
+% for the command~|\Arrow| in |code-after|. However, it's always possible to
+% translate an arrow with |xoffset| (or |xshift| of Tikz).
+% \begin{Verbatim}
+% $\begin{WithArrows}[code-after=\Arrow~emphase#[v]@{1-2}{2-2}{division by $2$}]
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+% .........
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division by $2$} ]
+% \varphi(x,y)=0
+% & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% 2x+4y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow
+% \left\{\begin{WithArrows}[c]
+% x+2y & = 0 \\
+% x+2y & = 0
+% \end{WithArrows}\right. \\
+% & \Leftrightarrow x+2y=0
+% \end{WithArrows}$
+%
+%
+% \interitem
+% The package \pkg{witharrows} gives also another command available only in
+% |code-after|: the command |\MultiArrow|. This command draws a ``rak''. The list
+% of the rows of the environment concerned by this rak are given in the first
+% argument of the command |\MultiArrow|. This list is given with the syntax of
+% the list in a |\foreach| command of \pkg{pgffor}.
+%
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}[tikz = rounded corners,
+% code-after = {~emphase#\MultiArrow{1,...,4}{text}@} ]
+% A & = B \\
+% & = C \\
+% & = D \\
+% & = E \\
+% & = F
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+%
+% $\begin{WithArrows}[tikz = rounded corners,
+% code-after = {\MultiArrow{1,...,4}{text}}]
+% A & = B \\
+% & = C \\
+% & = D \\
+% & = E \\
+% & = F
+% \end{WithArrows}$
+%
+% \medskip
+% As of now, there is no option available for the command |\MultiArrow| (maybe
+% in a future release).
+%
+%
+% \bigskip
+% \section{Arrows from outside environments \{WithArrows\}}
+%
+% If someone wants to draw arrows from outside the environments |{WithArrows}|,
+% he can use the Tikz nodes created in the environments.
+%
+% The Tikz name of a node created by \pkg{witharrows} is prefixed by |wa-|.
+% Then, we have a list of numbers which give the position in the nesting tree
+% and the row number in the environment. At the end, we have the suffixe |l| for
+% a ``left node'' and |r| for a ``right node''.
+%
+% \smallskip
+% For illustrative purposes, we give an example of nested environments
+% |{WithArrows}|, and, for each ``right node'', the name of that
+% node.\footnote{There is an option |show-node-names| to show the names of these
+% nodes.}
+%
+% \medskip
+% \[\begin{WithArrows}[show-nodes,show-node-names]
+% A & \vartriangleleft B+B+B+B+B+B+B+B+B+B+B+B+B \\
+% & \vartriangleleft \left\{
+% \begin{WithArrows}[c]
+% C & \vartriangleleft D \\
+% E & \vartriangleleft F
+% \end{WithArrows}
+% \right. \\
+% & \vartriangleleft
+% \left\{
+% \begin{WithArrows}[c]
+% G & \vartriangleleft H+H+H+H+H+H+H \\
+% I & \vartriangleleft
+% \left\{
+% \begin{WithArrows}
+% J &\vartriangleleft K \\
+% L &\vartriangleleft M
+% \end{WithArrows}
+% \right.
+% \end{WithArrows}
+% \right. \\
+% & \vartriangleleft
+% \left\{
+% \begin{WithArrows}[c]
+% N & \vartriangleleft O \\
+% P & \vartriangleleft Q
+% \end{WithArrows}
+% \right.
+% \end{WithArrows}\]
+%
+% \medskip
+% The package \pkg{witharrows} provides some tools facilitating the use of these
+% nodes:
+% \begin{itemize}
+% \item the command |\WithArrowsLastEnv| gives the number of the last
+% environment of level~$0$ (\emph{i.e.} which is not included in another
+% environnment of the package \pkg{witharrows});
+%
+% \item a name can be given to a given environment with the option |name| and,
+% in this case, the nodes created in the environment will have aliases
+% constructed with this name;
+%
+% \item the Tikz style |WithArrows/arrow| is the style used by \pkg{witharrows}
+% when drawing an arrow\footnote{More precisely, this style is given to the Tikz
+% option ``|every path|'' before drawing the arrow with the code of the option
+% |tikz-code|. This style is modified (in TeX scopes) by the option |tikz| of
+% \pkg{witharrows}.};
+%
+% \item the Tikz style |WithArrows/arrow/tips| is the style for the tip of the
+% arrow (loaded by |WithArrows/arrow|).
+% \end{itemize}
+%
+% For example, we can draw an arrow from \texttt{wa-\WithArrowsLastEnv-2-1-2-r.south}
+% to \texttt{wa-\WithArrowsLastEnv-3-2-r.north} with the following Tikz command.
+%
+% \begin{Verbatim}
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw [WithArrows/arrow]
+% ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
+% to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
+% \end{tikzpicture}
+% \end{Verbatim}
+%
+% \[\begin{WithArrows}
+% A & \vartriangleleft B+B+B+B+B+B+B+B+B+B+B+B+B \\
+% & \vartriangleleft \left\{
+% \begin{WithArrows}[c]
+% C & \vartriangleleft D \\
+% E & \vartriangleleft F
+% \end{WithArrows}
+% \right. \\
+% & \vartriangleleft
+% \left\{
+% \begin{WithArrows}[c]
+% G & \vartriangleleft H+H+H+H+H+H+H \\
+% I & \vartriangleleft
+% \left\{
+% \begin{WithArrows}
+% J &\vartriangleleft K \\
+% L &\vartriangleleft M
+% \end{WithArrows}
+% \right.
+% \end{WithArrows}
+% \right. \\
+% & \vartriangleleft
+% \left\{
+% \begin{WithArrows}[c]
+% N & \vartriangleleft O \\
+% P & \vartriangleleft Q
+% \end{WithArrows}
+% \right.
+% \end{WithArrows}\]
+%
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw [WithArrows/arrow]
+% ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
+% to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
+% \end{tikzpicture}
+%
+% \medskip
+% In this case, it would be easier to use a command |\Arrow| in |code-after| but
+% this is an example to explain how the Tikz nodes created by \pkg{witharrows}
+% can be used.
+%
+% \bigskip
+% In the following example, we create two environments |{WithArrows}| named
+% ``|first|'' and ``|second|'' and we draw a line between a node of the first
+% and a node of the second.
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#name=first@]
+% A & = B \\
+% & = C
+% \end{WithArrows}$
+%
+% \bigskip
+% $\begin{WithArrows}[~emphase#name=second@]
+% A' & = B' \\
+% & = C'
+% \end{WithArrows}$
+%
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw [WithArrows/arrow]
+% ([xshift=3mm]~emphase#first@-1-r.south)
+% to ([xshift=3mm]~emphase#second@-1-r.north) ;
+% \end{tikzpicture}
+% \end{Verbatim}
+%
+%
+% \begin{center}
+% $\begin{WithArrows}[name=first]
+% A & = B \\
+% & = C
+% \end{WithArrows}$
+%
+% \bigskip
+% $\begin{WithArrows}[name=second]
+% A' & = B' \\
+% & = C'
+% \end{WithArrows}$
+% \end{center}
+%
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw [WithArrows/arrow]
+% ([xshift=3mm]first-1-r.south)
+% to ([xshift=3mm]second-1-r.north) ;
+% \end{tikzpicture}
+%
+% \section{The environment \{DispWithArrows\}}
+% \label{DispWithArrows}
+%
+% As previously said, the environment |{WithArrows}| bears similarities with the
+% environment |{aligned}| of \pkg{amsmath} (and |mathtools|). This extension also
+% provides an environment |{DispWithArrows}| which is similar to the
+% environments |{align}| and |{flalign}| of \pkg{amsmath}.
+%
+% \medskip
+% The environment |{DispWithArrows}| must be used \emph{outside} math mode. Like
+% |{align}|, it should be used in horizontal mode.
+% \begin{Verbatim}
+% \begin{~emphase#DispWithArrows@}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{~emphase#DispWithArrows@}
+% \end{Verbatim}
+% \begin{DispWithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{DispWithArrows}
+%
+% \medskip
+% It's possible to use the command |\notag| (or |\nonumber|) to suppress a tag.
+%
+% It's possible to use the command |\tag| to put a special tag (e.g. $\star$).
+%
+% It's also possible to put a label to the line of an equation with the command
+% |\label|.
+%
+% These commands must be in the second column of the environment.
+% \begin{Verbatim}
+% \begin{DispWithArrows}
+% A & = (a+1)^2 \Arrow{we expand} ~emphase#\notag@ \\
+% & = a^2 + 2a + 1 ~emphase#\tag{$\star$} \label{my-equation}@
+% \end{DispWithArrows}
+% \end{Verbatim}
+% \begin{DispWithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \notag \\
+% & = a^2 + 2a + 1 \tag{$\star$} \label{my-equation}
+% \end{DispWithArrows}
+% A link to the equation \eqref{my-equation}. This link has been composed with
+% |\eqref{my-equation}| (the command |\eqref| is a command of \pkg{amsmath}).
+%
+% \medskip
+% If \pkg{amsmath} (or \pkg{mathtools}) is loaded, it's also possible to use
+% |\tag*| which, as in \pkg{amsmath}, typesets the tag without the parenthesis.
+% For example, it's possible to use it to put the symbol |\square| of
+% \pkg{amssymb}. This symbol is often used to mark the end of a
+% proof.\footnote{Notice that the environment |{DispWithArrows}| is compatible
+% with the command |\qedhere| of \pkg{amsthm}.}
+% \begin{Verbatim}
+% \begin{DispWithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \notag \\
+% & = a^2 + 2a + 1 ~emphase#\tag*{$\square$}@
+% \end{DispWithArrows}
+% \end{Verbatim}
+% \begin{DispWithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \notag \\
+% & = a^2 + 2a + 1 \tag*{$\square$}
+% \end{DispWithArrows}
+%
+% \medskip
+% It's also possible to suppress all the autogenerated numbers with the boolean
+% option |notag| (or |nonumber|), at the global or environment level. There is
+% also an environment |{DispWithArrows*}| which suppresses all these
+% numbers.\footnote{Even in this case, it's possible to put a ``manual tag''
+% with the command |\tag|.}
+% \begin{Verbatim}
+% \begin{~emphase#DispWithArrows*@}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{~emphase#DispWithArrows*@}
+% \end{Verbatim}
+% \begin{DispWithArrows*}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{DispWithArrows*}
+%
+% \medskip
+% In fact, there is also another option |tagged-lines| which can be used to
+% control the lines that will be tagged. The value of this option is a list of
+% the numbers of the lines that must to be tagged. For example, with the option
+% |tagged-lines = {first,3,last}|, only the first, the third and the last line
+% of the environment will be tagged. There is also the special value |all| which
+% means that all the lines will be tagged.
+% \begin{Verbatim}
+% \begin{DispWithArrows}[~emphase#tagged-lines = last@]
+% A & = A_1 \Arrow{first stage} \\
+% & = A_2 \Arrow{second stage} \\
+% & = A_3
+% \end{DispWithArrows}
+% \end{Verbatim}
+% \begin{DispWithArrows}[tagged-lines = last]
+% A & = A_1 \Arrow{first stage} \\
+% & = A_2 \Arrow{second stage} \\
+% & = A_3
+% \end{DispWithArrows}
+%
+% \bigskip
+% With the option |fleqn|, the environment is composed flush left (in a way
+% similar to the option |fleqn| of the standard classes of LaTeX). In this case,
+% the left margin can be controlled with the option |mathindent| (with a name
+% inspired by the parameter |\mathindent| of standard LaTeX). The default value
+% of this parameter is 25~pt.
+%
+% \begin{Verbatim}
+% \begin{DispWithArrows}[~emphase#fleqn,mathindent = 1cm@]
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{DispWithArrows}
+% \end{Verbatim}
+% \begin{DispWithArrows}[fleqn,mathindent = 1cm]
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{DispWithArrows}
+%
+% \medskip
+% \emph{Remark} : By design, the option |fleqn| of \pkg{witharrows} is
+% independent of the option |fleqn| of LaTeX. Indeed, since the environments of
+% \pkg{witharrows} are meant to be used with arrows on the right side, the user
+% may want to use \pkg{witharrows} with the option |fleqn| (in order to have
+% more space on the right of the equations for the arrows) while still centering
+% the classical equations.
+%
+% \medskip
+% If the option |leqno| is used as a class option, the labels will be composed
+% on the left also for the environments |{DispWithArrows}| and
+% |{DispWithArrows*}|.\footnote{The package \pkg{amsmath} has an option |leqno|
+% but \pkg{witharrows}, of course, is not aware of that option: \pkg{witharrows}
+% only checks the option |leqno| of the document class.}
+%
+% \medskip
+% If the package \pkg{amsmath} is loaded, it's possible to use the command
+% |\intertext| in the environments |{DispWithArrows}|. It's also possible to use
+% the environment |{subequations}|. However, there is, for the environments
+% |{DispWithArrows}| an option |subequations| to encapsulate the environment in
+% an environment |{subequations}|.
+%
+% \medskip
+% In the following example, the key |{subequations}| is fixed by the command
+% |\WithArrowsOptions|. Each environment |{DispWithArrows}| will subnumerated
+% (in the scope of the |\WithArrowsOptions|)
+% \begin{Verbatim}
+% ~emphase#\WithArrowsOptions{subequations}@
+% First environment.
+% \begin{DispWithArrows}
+% A & = B \\
+% & = C
+% \end{DispWithArrows}
+% Second environment.
+% \begin{DispWithArrows}
+% D & = E \\
+% & = F
+% \end{DispWithArrows}
+% \end{Verbatim}
+% %
+% \begin{scope}
+% \WithArrowsOptions{subequations}
+% First environment.
+% \begin{DispWithArrows}
+% A & = B \\
+% & = C
+% \end{DispWithArrows}
+% Second environment.
+% \begin{DispWithArrows}
+% D & = E \\
+% & = F
+% \end{DispWithArrows}
+% \end{scope}
+%
+% \bigskip
+% If there is not enough space to put the tag at the end of a line, there is no
+% automatic positioning of the label on the next line (as in the environments of
+% \pkg{amsmath}). However, in |{DispWithArrows}|, the user can use the command
+% |\tagnextline| to manually require the composition of the tag on the following
+% line.
+% \begin{Verbatim}
+% \begin{DispWithArrows}[displaystyle]
+% S_{2(p+1)}
+% & =\sum_{k=1}^{2(p+1)} (-1)^k k^2 \\
+% & \smash[b]{=\sum_{k=1}^{2p}(-1)^kk²
+% +(-1)^{2p+1}(2p+1)^2+(-1)^{2p+2}(2p+2)^2} ~emphase#\tagnextline@ \\
+% &= S_{2p}-(2p+1)^2+(2p+2)^2\\
+% &=p(2p+1)-(2p+1)^2+(2p+2)^2\\
+% &= 2p^2+5p+3
+% \end{DispWithArrows}
+% \end{Verbatim}
+% \begin{center}
+% \color{gray}\vrule%
+% \begin{minipage}{275pt}\color{black}
+% \begin{DispWithArrows}[displaystyle]
+% S_{2(p+1)}
+% & =\sum_{k=1}^{2(p+1)} (-1)^k k^2 \\
+% & \smash[b]{=\sum_{k=1}^{2p}(-1)^kk^2+(-1)^{2p+1}(2p+1)^2+(-1)^{2p+2}(2p+2)^2}
+% \tagnextline \\
+% &= S_{2p}-(2p+1)^2+(2p+2)^2\\
+% &= 2p^2+p-4p^2-4p-1+4p^2+8p+4\\
+% &= 2p^2+5p+3
+% \end{DispWithArrows}
+% \end{minipage}%
+% \color{gray}\vrule
+% \end{center}
+%
+%
+%
+% \bigskip
+% The environments |{DispWithArrows}| and |{DispWithArrows*}| provide an option
+% |wrap-lines|. With this option, the lines of the label are automatically
+% wrapped on the right.\footnote{It's possible to avoid the hyphenations of the
+% words with the option ``|align = flush left|'' of Tikz.}\label{wrap-lines}
+%
+% \begin{Verbatim}
+% \begin{DispWithArrows*}[displaystyle,~emphase#wrap-lines@]
+% S_n
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}
+% {1-e^{i\frac{\pi}{2n}}}\right)
+% \Arrow{This line has been wrapped automatically.} \\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+% \end{DispWithArrows*}
+% \end{Verbatim}
+% \begin{DispWithArrows*}[displaystyle,wrap-lines]
+% S_n
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left(
+% \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}} \right)
+% \Arrow{This line has been wrapped automatically.} \\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+% \end{DispWithArrows*}
+%
+% \bigskip
+% The option |wrap-lines| doesn't apply to the environments |{WithArrows}|
+% nested in an environment |{DispWithArrows}| or |{DispWithArrows*}|. However,
+% it applies to the instructions |\Arrow| and |\MultiArrow| of the |code-after|
+% of the environments |{DispWithArrows}| or |{DispWithArrows*}|.
+%
+% \vspace{1cm}
+% We have said that the environments |{DispWithArrows}| and |{DispWithArrows*}|
+% should be used in horizontal mode and not in vertical mode. However, there is
+% an exception. These environments can be used directly after a |\item| of a
+% LaTeX list. In this case, no vertical space is added before the
+% environment.\footnote{It's possible to disable this feature with the option |standard-behaviour-with-items|.}
+%
+% \medskip
+% Here is an example. The use of |{DispWithArrows}| gives the ability to tag an
+% equation (and also to use |wrap-lines|).
+%
+% \begin{Verbatim}
+% ~emphase#\begin{enumerate}@
+% ~emphase#\item @
+% \begin{DispWithArrows}%
+% [displaystyle, wrap-lines, tagged-lines = last, fleqn, mathindent = 0 pt]
+% S_n
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{we use the formula for a sum of terms of a geometric progression of
+% ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}
+% {1-e^{i\frac{\pi}{2n}}}\right)
+% \Arrow{$\bigl(e^{i\frac{\pi}{2n}}\bigr)^n = e^{i\frac{\pi}2}=i$} \\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+% \end{DispWithArrows}
+% ~emphase#\end{enumerate}@
+% \end{Verbatim}
+% \begin{enumerate}
+% \item
+% \begin{DispWithArrows}[displaystyle, wrap-lines, tagged-lines = last, fleqn, mathindent = 0 pt]
+% S_n
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{we use the formula for a sum of terms of a geometric progression of
+% ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left(
+% \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}} \right)
+% \Arrow{$\bigl(e^{i\frac{\pi}{2n}}\bigr)^n = e^{i\frac{\pi}2}=i$} \\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+% \end{DispWithArrows}
+% \end{enumerate}
+%
+% \vspace{1cm}
+% The environment |{DispWithArrows}| is similar to the environment |{align}| of
+% \pkg{amsmath}. However, |{DispWithArrows}| is not constructed upon |{align}|
+% (in fact, it's possible to use \pkg{witharrows} without \pkg{amsmath}).
+%
+% There are differences between |{DispWithArrows}| and |{align}|.
+% \begin{itemize}
+% \item The environment |{DispWithArrows}| cannot be inserted in an environment
+% |{gather}| of \pkg{amsmath}.
+% \item An environment |{DispWithArrows}| is always unbreakable (even with
+% |\allowdisplaybreaks| of \pkg{amsmath}).
+% \item The commands |\label|, |\tag|, |\notag| and |\nonumber| are allowed only
+% in the last column.
+% \item After an |\item| of a LaTeX list, no vertical space is added (this can
+% be changed with the option |standard-behaviour-with-items|).
+% \item
+% \begin{bfseries}
+% Last but not least, by default, the elements of a |\{DispWithArrows\}|
+% are composed in |textstyle| and not in |displaystyle| (it's possible to change
+% this point with the option |displaystyle|).
+% \end{bfseries}
+% \end{itemize}
+%
+% \bigskip
+% Concerning the references, the package \pkg{witharrows} is compatible with the
+% extensions \pkg{autonum}, \pkg{cleveref}, \pkg{fancyref}, \pkg{fncylab},
+% \pkg{hyperref}, \pkg{listlbls}, \pkg{prettyref}, \pkg{refcheck},
+% \pkg{refstyle}, \pkg{showlabels}, \pkg{smartref}, \pkg{typedref} and
+% \pkg{varioref}, and with the options |showonlyrefs| and |showmanualtags| of
+% \pkg{mathtools}.\footnote{We recall that \pkg{varioref}, \pkg{hyperref},
+% \pkg{cleveref} and \pkg{autonum} must be loaded in this order. The package
+% \pkg{witharrows} can be loaded anywhere.}
+%
+% It is not compatible with \pkg{showkeys} (not all the labels are shown).
+%
+%
+%
+%
+% \subsection{The option <...> of DispWithArrows}
+%
+% The environment |{DispWithArrows}| provides an option |left-brace|. When present,
+% the value of this option is composed on the left, followed by a curly brace
+% (hence the name) and the body of the environment.\footnote{The option
+% |left-brace| can also be used without value: in this case, only the brace is drawn...}
+%
+% For lisibility, this option |left-brace| is also available with a special
+% syntax: it's possible to give this option between angle brackets
+% (\verb|<| and \verb|>|) just after \verb|{DispWithArrows}| (before the optional
+% arguments between square brackets).
+%
+% \bigskip
+% The following code is an example of multi-case equations.\footnote{The
+% environment |{cases}| of \pkg{amsmath} is a way to compose such multi-cases
+% equations. However, it's not possible to use the automatic numbering of
+% equations with this environment. The environment |{numcases}| of the extension
+% \pkg{cases} (written by Donald Arseneau) provides this possibility but, of
+% course, it's not possible to draw arrows with this extension.}
+%
+% \medskip
+%
+% \begin{BVerbatim}
+% \begin{DispWithArrows}~emphase#< \binom{n}{p} = >@[format = ll,fleqn,displaystyle]
+% 0 & \quad \text{if } p > n
+% \Arrow{if fact, it's a special case\\ of the following one} \\
+% \frac{n(n-1)\cdots(n-p+1)}{p!} & \quad \text{if } 0 \leq p \leq n \\
+% 0 & \quad \text{if } p < 0
+% \end{DispWithArrows}
+% \end{BVerbatim}
+% %
+% \begin{DispWithArrows}< \binom{n}{p} = >[format = ll,fleqn,displaystyle]
+% 0 & \quad \text{if } p > n
+% \Arrow{if fact, it's a special case\\ of the following one} \\
+% \frac{n(n-1)\cdots(n-p+1)}{p!} & \quad \text{if } 0 \leq p \leq n \\
+% 0 & \quad \text{if } p < 0
+% \end{DispWithArrows}
+%
+% \interitem
+% In the following example, we subnumerate the equations with the option
+% |subnumerate| (available when the package \pkg{amsmath} is loaded).
+%
+% \begin{Verbatim}
+% \begin{DispWithArrows}~emphase#< \label{system} (\ref*{system}) \Leftrightarrow >@[
+% format = l, subequations ]
+% x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\
+% xy+xz+yz=-2 \\
+% xyz = -15 \label{last-equation}
+% \end{DispWithArrows}
+% \end{Verbatim}
+% %
+% \begin{DispWithArrows}< \label{system} (\ref*{system}) \Leftrightarrow >[
+% format = l, subequations]
+% x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\
+% xy+xz+yz=-2 \\
+% xyz = -15 \label{last-equation}
+% \end{DispWithArrows}
+%
+%
+% \bigskip
+% The whole system is the equation \eqref{system} (this reference has been coded
+% by |\eqref{system}|) whereas the last equation is the equation
+% \eqref{last-equation} (this reference has been coded by
+% |\eqref{last-equation}|). The command |\ref*| used in the code above is
+% provided by \pkg{hyperref}. It's a variant of |\ref| which doesn't create
+% interactive link.
+%
+% \bigskip
+% With the option \verb|replace-left-brace-by|, it's possible to replace the
+% left curly brace by another extensible delimiter. For example,
+% ``|replace-left-brace-by = [\enskip|'' will compose with a bracket and add also a
+% |\enskip| after this bracket.
+%
+% \bigskip
+% \section{Advanced features}
+%
+% \subsection{Utilisation with plain-TeX}
+% \label{plain-TeX}
+%
+% The extension \pkg{witharrows} can be used with plain-TeX. In this case, the
+% extension must be loaded with |\input|:
+% \begin{Verbatim}
+% \input{witharrows.tex}
+% \end{Verbatim}
+%
+% \medskip
+% In plain-TeX, there is not environments as in LaTeX. Instead of using the
+% environment |{Witharrows}|, with |\begin{WithArrows}| and |\end{WithArrows}|,
+% one should use a pseudo-environnement delimited by |\WithArrows| and
+% |\endWithArrows| (idem for |{DispWithArrows}|).
+%
+% \begin{Verbatim}
+% $\WithArrows
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \endWithArrows$
+% \end{Verbatim}
+%
+% \medskip
+% The version of \pkg{witharrows} for plain-TeX doesn't provide all the
+% functionnlities of the LaTeX version. In particular, the funcionnalities which
+% deal with the number of the equations are not available (since they rely upon
+% the system of tags of LaTeX).
+%
+% \subsection{The option tikz-code : how to change the shape of the arrows}
+%
+% \label{tikz-code}
+%
+% The option |tikz-code|\footnote{For historical reasons, the option |tikz-code|
+% has an alias: |TikzCode|.} allows the user to change the shape of the
+% arrows.\footnote{If the option |wrap-lines| is used in an environment
+% |{DispWithArrows}| or |{DispWithArrows*}|, the option |tikz-code| will have no
+% effect for the arrows of this environment but only for the arrows in the
+% nested environments |{WithArrows}|.}
+%
+% \smallskip
+% For example, the options ``|up|'' and ``|down|'' described previously (cf.
+% p.~\pageref{up-and-down}) are programmed internally with |tikz-code|.
+%
+% \smallskip
+% The value of this option must be a valid Tikz drawing instruction (with the
+% final semicolon) with three markers |#1|, |#2| and |#3| for the start point,
+% the end point and the label of the arrow.
+%
+% \bigskip
+% By default, the value is the following:
+%
+% \smallskip
+% \qquad \verb|\draw (#1) to node {#3} (#2) ;|
+%
+%
+% \bigskip
+% In the following example, we replace this default path by a path with three
+% segments (and the node overwriting the second segment).
+% \begin{Verbatim}
+% \begin{WithArrows}[format=c,ygap=5pt,interline=4mm,
+% ~emphase#tikz-code = {\draw[rounded corners]@
+% ~emphase# (~#1) -- ([xshift=5mm]~#1)@
+% ~emphase# -- node[circle,@
+% ~emphase# draw,@
+% ~emphase# auto = false,@
+% ~emphase# fill = gray!50,@
+% ~emphase# inner sep = 1pt] {\tiny ~#3}@
+% ~emphase# ([xshift=5mm]~#2)@
+% ~emphase# -- (~#2) ; }@]
+% 3 (2x+4) = 6 \Arrow{$\div 3$} \\
+% 2x+4 = 2 \Arrow{$-4$} \\
+% 2x = -2 \Arrow{$\div 2$} \\
+% x = -1
+% \end{WithArrows}
+% \end{Verbatim}
+%
+%
+% \[\begin{WithArrows}[format=c,
+% ygap=5pt,
+% interline=4mm,
+% tikz-code = {\draw[rounded corners]
+% (#1)
+% --
+% ([xshift=5mm]#1)
+% -- node[circle,
+% draw,
+% auto=false,
+% fill=gray!50,
+% inner sep = 1pt] {\tiny #3}
+% ([xshift=5mm]#2)
+% --
+% (#2) ; }]
+% 3 (2x+4) = 6 \Arrow{$\div 3$} \\
+% 2x+4 = 2 \Arrow{$-4$} \\
+% 2x = -2 \Arrow{$\div 2$} \\
+% x = -1
+% \end{WithArrows}\]
+%
+% \bigskip
+% The environments |{DispWithArrows}| and its starred version
+% |{DispWithArrows*}| provide a command |\WithArrowsRightX| which can be used in
+% a definition of |tikz-code|. This command gives the $x$-value of the right side
+% of the composition box (taking into account the eventual tags of the
+% equations). For an example of use, see p.~\pageref{example-WithArrowsRightX}.
+%
+%
+% \bigskip
+% \subsection{The command \textbackslash WithArrowsNewStyle}
+%
+% The extension \pkg{witharrows} provides a command |\WithArrowsNewStyle| to
+% define styles in a way similar to the ``styles'' of Tikz.
+%
+% The command |\WithArrowsNewStyle| takes two mandatory arguments. The first is
+% the name of the style and the second is a list of key-value pairs. The scope
+% of the definition done by |\WithArrowsNewStyle| is the current TeX scope.
+%
+% The style can be used as a key at the document level (with
+% |\WithArrowsOptions|) or at the environment level (in the optional arguments
+% of |{WithArrows}| and |{DispWithArrows}|). The style can also be used in
+% another command |\WithArrowsNewStyle|.
+%
+% For an example of use, see p.~\pageref{example-WithArrowsRightX}.
+%
+%
+% \bigskip
+% \subsection{Vertical positioning of the arrows}
+%
+% There are four parameters for fine tuning of the vertical positioning of the
+% arrows : |ygap|, |ystart|, |start-adjust| and |end-adjust|.
+%
+% \medskip
+% We first explain the behaviour when the parameters |start-adjust| and
+% |end-adjust| are equal to zero:
+% \begin{itemize}
+% \item the option |ystart| sets the vertical distance between the base line of
+% the text and the start of the arrow (default value: 0.4 ex);
+% \item the option |ygap| sets the vertical distance between two consecutive
+% arrows (default value: 0.4~ex).
+% \end{itemize}
+%
+%
+% \bigskip
+% $\begin{WithArrows}[interline=1mm, adjust = 0pt]
+% (\cos x + \sin x)^2 & = \cos^2 x +2 \cos x \sin x + \sin^2 x\Arrow{}\tikz[remember picture] \coordinate (A) ; \\
+% & = \cos^2x + \sin^2x + 2\sin x\cos x \Arrow{} \\
+% & = 1 + \sin(2x)
+% \end{WithArrows}$
+%
+% \begin{tikzpicture}[remember picture,overlay,blue]
+% \draw (wa-\WithArrowsLastEnv-1-r.south) to ++(1,0) coordinate (B) to ++(0.1,0) ;;
+% \draw (A) to ++(1,0) coordinate (C) to ++(0.1,0) ;;
+% \draw (B) -- (C) ;
+% \draw[<-] (B) to ++(0,0.2) ;
+% \draw[<-] (C) to ++(0,-0.2) ;
+% \path (C) node[right=1mm] {|ystart|} ;
+% \draw (wa-\WithArrowsLastEnv-2-r.north) to ++(3,0) coordinate (E) to ++(0.1,0);
+% \draw (wa-\WithArrowsLastEnv-2-r.south) to ++(3,0) coordinate (F) to ++(0.1,0);
+% \draw (E) -- (F) ;
+% \draw[<-] (E) to ++(0,0.2) ;
+% \draw[<-] (F) to ++(0,-0.2) ;
+% \path (F) node[right=1mm] {|ygap|} ;
+% \end{tikzpicture}
+%
+% \interitem
+% However, for aesthetic reasons, when it's possible, \pkg{witharrows} starts
+% the arrow a bit higher (by an amount |start-adjust|) and ends the arrow a bit
+% lower (by an amount |end-adjust|). By default, both parameters |start-adjust|
+% and |end-adjust| are equal to $0.4$~ex.
+%
+% \bigskip
+% Here is for example the behaviour without the mechanism of |start-adjust| and
+% |end-adjust| (this was the standard behaviour for versions prior to 1.13).
+% % \begin{Verbatim}
+% $\begin{WithArrows}~emphase#[start-adjust=0pt, end-adjust=0pt]@
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[start-adjust=0pt, end-adjust=0pt]
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% Here is the standard behaviour since version 1.13 (the parameters
+% |start-adjust| and |end-ajust| are used with the default value $0.4$~ex). The
+% arrow is longer and the result is more aesthetic.
+%
+% \medskip
+% $\begin{WithArrows}
+% A & = (a+1)^2 \Arrow{we expand} \\
+% & = a^2 + 2a + 1
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% It's also possible to use the option |adjust| which sets both |start-adjust|
+% and |end-ajust|.
+%
+% \bigskip
+% Since the mechanism of |start-adjust| and |end-ajust| has been added in
+% version 1.13 of \pkg{witharrows}, that version is not stricty compatible with
+% older versions. However, it's possible to restore the previous behaviour
+% simply by setting |start-adjust| and |end-adjust| to $0$~pt:
+% \begin{Verbatim}
+% \WithArrowsOptions{adjust = 0pt}
+% \end{Verbatim}
+%
+% \bigskip
+% \subsection{Footnotes in the environments of witharrows}
+%
+% If you want to put footnotes in an environment |{WithArrows}| or
+% |{DispWithArrows}|, you can use a pair |\footnotemark|--|\footnotetext|.
+%
+% \smallskip
+% It's also possible to extract the footnotes with the help of the package
+% \pkg{footnote} or the package \pkg{footnotehyper}.
+%
+% \smallskip
+% If \pkg{witharrows} is loaded with the option |footnote| (with
+% |\usepackage[footnote]{witharrows}| or with |\PassOptionsToPackage|), the
+% package \pkg{footnote} is loaded (if it is not yet loaded) and it is used to
+% extract the footnotes.
+%
+% \smallskip
+% If \pkg{witharrows} is loaded with the option |footnotehyper|, the package
+% \pkg{footnotehyper} is loaded (if it is not yet loaded) ant it is used to
+% extract footnotes.
+%
+% \smallskip
+% Caution: The packages \pkg{footnote} and \pkg{footnotehyper} are incompatible.
+% The package \pkg{footnotehyper} is the successor of the package \pkg{footnote}
+% and should be used preferently. The package \pkg{footnote} has some drawbacks,
+% in particular: it must be loaded after the package \pkg{xcolor} and it is not
+% perfectly compatible with \pkg{hyperref}.
+%
+% \medskip
+% In this document, the package \pkg{witharrows} has been loaded with the option
+% |footnotehyper| and we give an example with a footnote in the label of an
+% arrow:
+%
+% \smallskip
+% $\begin{WithArrows}
+% A & = (a+b)^2
+% \Arrow{We expand\,\footnote{A footnote.}} \\
+% & = a^2+b^2+2ab
+% \end{WithArrows}$
+%
+% \bigskip
+% \subsection{Option no-arrows}
+%
+% The option |no-arrows| is a convenience given to the user. With this option
+% the arrows are not drawn. However, an analyse of the arrows is done and some
+% errors can be raised, for example if an arrow would arrive after the last row
+% of the environment.
+%
+%
+% \bigskip
+% \subsection{Note for developpers}
+%
+% If you want to construct an environment upon an environment of
+% \pkg{witharrows}, we recommand to call the environment with the construction
+% |\WithArrows|-|\endWithArrows| or |\DispWithArrows|-|\endDispWithArrows| (and
+% not |\begin{WithArrows}|-|\end{WithArrows}|, etc.).
+%
+% \smallskip
+% By doing so, the error messages generated by \pkg{witharrows} will (usually)
+% mention the name of your environment and they will be easier to understand by
+% the final user.
+%
+% \smallskip
+% By example, you can define an environment |{DWA}| which is an alias of
+% |{DispWithArrows}|:
+% \begin{BVerbatim}
+% \NewDocumentEnvironment {DWA} {} {\DispWithArrows}{\endDispWithArrows}
+% \end{BVerbatim}
+%
+% \smallskip
+% If you use this environment |{DWA}| in math mode, you will have the following
+% error message:
+%
+% \begin{BVerbatim}
+% The environment {DWA} should be used only outside math mode.
+% \end{BVerbatim}
+%
+% \interitem
+% Another example is the definition of the environment |{DispWithArrows*}|
+% internally in the package \pkg{witharrows} by the following code:
+% \begin{Verbatim}
+% \NewDocumentEnvironment {DispWithArrows*} {}
+% {\WithArrowsOptions{notag}%
+% \DispWithArrows}
+% {\endDispWithArrows}
+% \end{Verbatim}
+%
+%
+%
+% \section{Examples}
+%
+% \subsection{\textbackslash MoveEqLeft}
+%
+% It's possible to use |\MoveEqLeft| of \pkg{mathtools}. Don't forget that
+% |\MoveEqLeft| has also the value of an ampersand (|&|). That's important for the
+% placement of an eventual command |\Arrow|.
+%
+%
+%
+% \begin{Verbatim}[formatcom=\small\color{gray}]
+% $\begin{WithArrows}[interline=0.5ex]
+% ~emphase#\MoveEqLeft@ \arccos(x) = \arcsin \frac45 + \arcsin \frac5{13}
+% \Arrow{because both are in $[-\frac{\pi}2,\frac{\pi}2]$} \\
+% & \Leftrightarrow x = \sin\left(\arcsin\frac45 + \arcsin\frac5{13}\right) \\
+% & \Leftrightarrow x = \frac45\cos\arcsin\frac5{13} + \frac5{13} \cos\arcsin\frac45
+% \Arrow{$\forall x \in [-1,1], \cos(\arcsin x) = \sqrt{1-x^2}$} \\
+% & \Leftrightarrow x = \frac45\sqrt{1-\bigl(\frac5{13}\bigr)^2}
+% + \frac5{13}\sqrt{1-\bigl(\frac45\bigr)^2}
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+%
+% \medskip
+% $\begin{WithArrows}[interline=0.5ex]
+% \MoveEqLeft \arccos(x) = \arcsin \frac45 + \arcsin \frac5{13}
+% \Arrow{because both are in $[-\frac{\pi}2,\frac{\pi}2]$} \\
+% & \Leftrightarrow x = \sin\left(\arcsin\frac45 + \arcsin\frac5{13}\right) \\
+% & \Leftrightarrow x = \frac45\cos\arcsin\frac5{13} + \frac5{13} \cos\arcsin\frac45
+% \Arrow{$\forall x \in [-1,1], \cos(\arcsin x) = \sqrt{1-x^2}$} \\
+% & \Leftrightarrow x = \frac45\sqrt{1-\bigl(\frac5{13}\bigr)^2}
+% + \frac5{13}\sqrt{1-\bigl(\frac45\bigr)^2}
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% \subsection{Modifying the shape of the nodes}
+%
+% It's possible to change the shape of the labels, which are Tikz nodes, by
+% modifying the key ``|every node|'' of Tikz.
+%
+% \begin{Verbatim}
+% \begin{WithArrows}%
+% [format = c,
+% interline = 4mm,
+% tikz = {~emphase#every node/.style = {circle,@
+% ~emphase# draw,@
+% ~emphase# auto = false,@
+% ~emphase# fill = gray!50,@
+% ~emphase# inner sep = 1pt,@
+% ~emphase# font = \tiny}@}]
+% 3 (2x+4) = 6 \Arrow{$\div 3$} \\
+% 2x+4 = 2 \Arrow{$-4$} \\
+% 2x = -2 \Arrow{$\div 2$} \\
+% 2x = -1
+% \end{WithArrows}
+% \end{Verbatim}
+%
+% \[\begin{WithArrows}[%
+% format = c,
+% interline = 4mm,
+% tikz = {every node/.style = {circle,
+% draw,
+% auto = false,
+% fill = gray!50,
+% inner sep = 1pt,
+% font = \tiny}}]
+% 3 (2x+4) = 6 \Arrow{$\div 3$} \\
+% 2x+4 = 2 \Arrow{$-4$} \\
+% 2x = -2 \Arrow{$\div 2$} \\
+% 2x = -1
+% \end{WithArrows}\]
+%
+%
+% \bigskip
+% \subsection{Examples with the option tikz-code}
+%
+% We recall that the option |tikz-code| is the Tikz code used by \pkg{witharrows}
+% to draw the arrows.\footnote{If an environment |{DispWithArrows}| or
+% |{DispWithArrows*}| is used with the option |wrap-lines|, the value of the
+% option |tikz-code| is not used for this environment (but is used for the
+% environments nested inside).}
+%
+% \smallskip
+% The value by defaut of |tikz-code| is \verb|\draw (#1) to node {#3} (#2) ;|
+% where the three markers |#1|, |#2| and |#3| represent the start row, the end
+% row and the label of the arrow.
+%
+%
+% \bigskip
+% \subsubsection{Example 1}
+% In the following example, we define the value of |tikz-code| with two
+% instructions |\path| : the first instruction draws the arrow itself and the
+% second puts the label in a Tikz node in the rectangle delimited by the arrow.
+%
+% \begin{Verbatim}
+% \begin{DispWithArrows*}%
+% [displaystyle,
+% ygap = 2mm,
+% ystart = 0mm,
+% ~emphase#tikz-code = {\draw (~#1) -- ++(4.5cm,0) |- (~#2) ;@
+% ~emphase# \path (~#1) -- (~#2) @
+% ~emphase# node[text width = 4.2cm, right, midway] {~#3} ;}@]
+% S_n
+% & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+% ...........
+% \end{Verbatim}
+%
+%
+% \bigskip
+% \begin{DispWithArrows*}[
+% displaystyle,
+% ygap = 2mm,
+% ystart = 0mm,
+% tikz-code = {\draw (#1) -- ++(4.5cm,0) |- (#2) ;
+% \path (#1) -- (#2)
+% node[text width = 4.2cm, right, midway] {#3} ;}]
+% S_n
+% & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+% \Arrow{$\cos x = \Re(e^{ix})$}\\
+% & = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
+% \Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+% & = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
+% \Arrow{$\exp$ is a morphism for $\times$ et $+$} \\
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+% \end{DispWithArrows*}
+%
+% \bigskip
+% \subsubsection{Example 2}
+%
+% \label{example-WithArrowsRightX}
+% It's possible to modify the previous example to have the ``|text width|''
+% automatically computed with the right margin (in a way similar as the
+% |wrap-lines| option) in the environments |{DispWithArrows}| and
+% |{DispWithArrows*}|. In the definition of |tikz-code|, we use the command
+% |\WithArrowsRightX| which is the $x$-value of the right margin of the current
+% composition box (it's a TeX command and not a dimension). For lisibility, we
+% use a style. This example requires the Tikz library \pkg{calc}.
+%
+% \begin{Verbatim}
+% \WithArrowsNewStyle{MyStyle}
+% {displaystyle,
+% ygap = 2mm,
+% xoffset = 0pt,
+% ystart = 0mm,
+% tikz-code = {\path let \p1 = (~#~#1)
+% in (~#~#1)
+% -- node [anchor = west,
+% text width = {~emphase#\WithArrowsRightX@ - \x1 - 0.5 em}]
+% {~#~#3}
+% (~#~#2) ;
+% \draw let \p1 = (~#~#1)
+% in (~#~#1) -- ++(~emphase#\WithArrowsRightX@ - \x1,0) |- (~#~#2) ; }}
+% \end{Verbatim}
+%
+% \begin{Verbatim}
+%\begin{DispWithArrows}[MyStyle]
+% S_n
+% & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+% \Arrow{$\cos x = \Re(e^{ix})$}\\
+% ...........
+% \end{Verbatim}
+%
+% \WithArrowsNewStyle{MyStyle}
+% {displaystyle,
+% ygap = 2mm,
+% xoffset = 0pt,
+% ystart = 0mm,
+% tikz-code = {\path let \p1 = (##1)
+% in (##1)
+% -- node [anchor = west,
+% text width = {\WithArrowsRightX - \x1 - 0.5 em}] {##3}
+% (##2) ;
+% \draw let \p1 = (##1)
+% in (##1) -- ++(\WithArrowsRightX - \x1,0) |- (##2) ; }}
+%
+%\begin{DispWithArrows}[MyStyle]
+% S_n
+% & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+% \Arrow{$\cos x = \Re(e^{ix})$}\\
+% & = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
+% \Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+% & = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
+% \Arrow{$\exp$ is a morphism for $\times$ et $+$} \\
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right)
+% \end{DispWithArrows}
+%
+%
+%
+% \bigskip
+% \subsubsection{Example 3}
+%
+% In the following example, we change the shape of the arrow depending on whether
+% the start row is longer than the end row or not. This example requires the
+% Tikz library \pkg{calc}.
+%
+% \begin{Verbatim}
+% \begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
+% ~emphase#tikz-code = {\draw[rounded corners,@
+% ~emphase# every node/.style = {circle,@
+% ~emphase# draw,@
+% ~emphase# auto = false,@
+% ~emphase# inner sep = 1pt,@
+% ~emphase# fill = gray!50,@
+% ~emphase# font = \tiny }]@
+% ~emphase# let \p1 = (~#1),@
+% ~emphase# \p2 = (~#2)@
+% ~emphase# in \ifdim \x1 > \x2@
+% ~emphase# (\p1) -- node {~#3} (\x1,\y2) -- (\p2)@
+% ~emphase# \else@
+% ~emphase# (\p1) -- (\x2,\y1) -- node {~#3} (\p2)@
+% ~emphase# \fi ;}@]
+% E & \Longleftrightarrow \frac{(x+4)}3 + \frac{5x+3}5 = 7
+% \Arrow{$\times 15$}\\
+% & \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
+% & \Longleftrightarrow 5x+20 + 15x+9 = 105 \\
+% & \Longleftrightarrow 20x+29 = 105
+% \Arrow{$-29$}\\
+% & \Longleftrightarrow 20x = 76
+% \Arrow{$\div 20$}\\
+% & \Longleftrightarrow x = \frac{38}{10}
+% \end{WithArrows}
+% \end{Verbatim}
+%
+%
+% \[\begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
+% tikz-code = {\draw[rounded corners,
+% every node/.style = {circle,
+% draw,
+% auto = false,
+% inner sep = 1pt,
+% fill = gray!50,
+% font = \tiny}]
+% let \p1 = (#1),
+% \p2 = (#2)
+% in \ifdim \x1 > \x2
+% (\p1) -- node {#3} (\x1,\y2) -- (\p2)
+% \else
+% (\p1) -- (\x2,\y1) -- node {#3} (\p2)
+% \fi ;}]
+% E & \Longleftrightarrow \frac{(x+4)}3 + \frac{5x+3}5 = 7
+% \Arrow{$\times 15$}\\
+% & \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
+% & \Longleftrightarrow 5x+20 + 15x+9 = 105 \\
+% & \Longleftrightarrow 20x+29 = 105
+% \Arrow{$-29$}\\
+% & \Longleftrightarrow 20x = 76
+% \Arrow{$\div 20$}\\
+% & \Longleftrightarrow x = \frac{38}{10}
+% \end{WithArrows}\]
+%
+%
+%
+% \subsection{Automatic numbered loop}
+%
+% Assume we want to draw a loop of numbered arrows. In this purpose, it's
+% possible to write a dedicated command |\NumberedLoop| which will do the job
+% when used in |code-after|. In the following example, we write this command with
+% |\NewDocumentCommand| of \pkg{xparse} and |\foreach| of \pkg{pgffor} (both
+% packages are loaded when \pkg{witharrows} is loaded).
+%
+% \begin{Verbatim}
+% \NewDocumentCommand \NumberedLoop {}
+% {\foreach \j in {2,...,\WithArrowsNbLines}
+% { \pgfmathtruncatemacro{\i}{\j-1}
+% \Arrow[rr]{\i}{\j}{\i} }
+% \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
+% \end{Verbatim}
+%
+% The command |\WithArrowsNbLines| is a command available in |code-after| which
+% gives the total number of lines (=rows) of the current environment (it's a
+% command and not a counter).
+%
+%
+% \bigskip
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#code-after = \NumberedLoop@]
+% a.\;& f \text{ est continuous on } E \\
+% b.\;& f \text{ est continuous in } 0 \\
+% c.\;& f \text{ is bounded on the unit sphere} \\
+% d.\;& \exists K > 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
+% e.\;& f \text{ is lipschitzian}
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% \bigskip
+% \begin{scope}
+% \NewDocumentCommand \NumberedLoop {}
+% {\foreach \j in {2,...,\WithArrowsNbLines}
+% { \pgfmathtruncatemacro{\i}{\j-1}
+% \Arrow[rr]{\i}{\j}{\i} }
+% \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
+%
+%
+% $\begin{WithArrows}[code-after = \NumberedLoop]
+% a.\;& f \text{ est continuous on } E \\
+% b.\;& f \text{ est continuous in } 0 \\
+% c.\;& f \text{ is bounded on the unit sphere} \\
+% d.\;& \exists K > 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
+% e.\;& f \text{ is lipschitzian}
+% \end{WithArrows}$
+%
+%
+% \bigskip
+% As usual, it's possible to change the characteristic of both arrows and nodes
+% with the option |tikz|. However, if we want to change the style to have, for
+% example, numbers in parenthesis, the best way is to change the value of
+% |tikz-code|:
+%
+% \begin{Verbatim}
+% tikz-code = {\draw (~#1) to node {\footnotesize (~#3)} (~#2) ;}
+% \end{Verbatim}
+%
+% \WithArrowsOptions{tikz-code = {\draw (#1) to node {\footnotesize (#3)} (#2) ;}}
+%
+% $\begin{WithArrows}[code-after = \NumberedLoop]
+% a.\;& f \text{ est continuous on } E \\
+% b.\;& f \text{ est continuous in } 0 \\
+% c.\;& f \text{ is bounded on the unit sphere} \\
+% d.\;& \exists K > 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
+% e.\;& f \text{ is lipschitzian}
+% \end{WithArrows}$
+%
+% \end{scope}
+%
+% \vspace{2cm}
+%
+% \section{Implementation}
+%
+% \subsection{Declaration of the package and extensions loaded}
+%
+%
+% First, \pkg{tikz} and some Tikz libraries are loaded before the
+% |\ProvidesExplPackage|. They are loaded this way because |\usetikzlibrary| in
+% |expl3| code fails.\footnote{cf.
+% |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|}
+%
+% \begin{macrocode}
+%<@@=wa>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*LaTeX>
+\RequirePackage{tikz}
+\RequirePackage{expl3}[2019/02/15]
+%</LaTeX>
+%<*plain-TeX>
+\input tikz.tex
+\input expl3-generic.tex
+%</plain-TeX>
+\usetikzlibrary{arrows.meta,bending}
+% \end{macrocode}
+%
+% \bigskip
+% Then, we can give the traditional declaration of a package written with
+% |expl3|:
+% \begin{macrocode}
+%<*LaTeX>
+\RequirePackage{l3keys2e}
+\ProvidesExplPackage
+ {witharrows}
+ {\myfiledate}
+ {\myfileversion}
+ {Draws arrows for explanations on the right}
+% \end{macrocode}
+%
+% \bigskip
+% The package \pkg{xparse} will be used to define the environments
+% |{WithArrows}|, |{DispWithArrows}|, |{DispWithArrows*}| and the commands
+% |\Arrow|, |\WithArrowsOptions| and |\WithArrowsNewStyle|.
+% \begin{macrocode}
+\RequirePackage { xparse } [ 2018-10-17 ]
+%</LaTeX>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*plain-TeX>
+\ExplSyntaxOn
+\catcode `\@ = 11
+%</plain-TeX>
+% \end{macrocode}
+%
+% \bigskip
+% \subsection{The packages footnote and footnotehyper}
+%
+% A few options can be given to the package \pkg{witharrows} when it is loaded
+% (with |\usepackage|, |\RequirePackage| or |\PassOptionsToPackage|). Currently
+% (version \myfileversion), there are two such options: |footnote| and
+% |footnotehyper|. With the option |footnote|, \pkg{witharrows} loads
+% \pkg{footnote} and uses it to extract the footnotes from the environments
+% |{WithArrows}|. Idem for the option |footnotehyper|.
+%
+% \medskip
+% The boolean |\g_@@_footnotehyper_bool| will indicate if the option
+% |footnotehyper| is used.
+% \begin{macrocode}
+%<*LaTeX>
+\bool_new:N \g_@@_footnotehyper_bool
+% \end{macrocode}
+%
+% \medskip
+% The boolean |\g_@@_footnote_bool| will indicate if the option |footnote| is
+% used, but quicky, it will also be set to |true| if the option |footnotehyper|
+% is used.
+% \begin{macrocode}
+\bool_new:N \g_@@_footnote_bool
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { witharrows } }
+\cs_new_protected:Npn \@@_msg_new:nnn { \msg_new:nnnn { witharrows } }
+\cs_new_protected:Npn \@@_msg_redirect_name:nn
+ { \msg_redirect_name:nnn { witharrows } }
+\cs_new_protected:Npn \@@_error:n { \msg_error:nn { witharrows } }
+\cs_new_protected:Npn \@@_warning:n { \msg_error:nn { witharrows } }
+\cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { witharrows } }
+\cs_new_protected:Npn \@@_error:nn { \msg_error:nnn { witharrows } }
+\cs_generate_variant:Nn \@@_error:nn { n x }
+% \end{macrocode}
+%
+% \medskip
+% We define a set of keys |WithArrows/package| for these options.
+% \begin{macrocode}
+%<*LaTeX>
+\keys_define:nn { WithArrows / package }
+ {
+ footnote .bool_gset:N = \g_@@_footnote_bool ,
+ footnotehyper .bool_gset:N = \g_@@_footnotehyper_bool ,
+ unknown .code:n =
+ \@@_fatal:n { Option~unknown~for~package }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Option~unknown~for~package }
+ {
+ You~can't~use~the~option~'\l_keys_key_tl'~when~loading~the~
+ package~witharrows.~Try~to~use~the~command~
+ \token_to_str:N\WithArrowsOptions.
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% We process the options when the package is loaded (with |\usepackage|).
+% \begin{macrocode}
+\ProcessKeysOptions { WithArrows / package }
+% \end{macrocode}
+%
+%
+% \medskip
+% \begin{macrocode}
+\@@_msg_new:nn { Option~incompatible~with~Beamer }
+ {
+ The~option~'\l_keys_key_tl'\ is~incompatible~
+ with~Beamer~because~Beamer~has~its~own~system~to~extract~footnotes.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { footnote~with~footnotehyper~package }
+ {
+ You~can't~use~the~option~'footnote'~because~the~package~
+ footnotehyper~has~already~been~loaded.~
+ If~you~want,~you~can~use~the~option~'footnotehyper'~and~the~footnotes~
+ within~the~environments~of~witharrows~will~be~extracted~with~the~tools~
+ of~the~package~footnotehyper.\\
+ If~you~go~on,~the~package~footnote~won't~be~loaded.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { footnotehyper~with~footnote~package }
+ {
+ You~can't~use~the~option~'footnotehyper'~because~the~package~
+ footnote~has~already~been~loaded.~
+ If~you~want,~you~can~use~the~option~'footnote'~and~the~footnotes~
+ within~the~environments~of~witharrows~will~be~extracted~with~the~tools~
+ of~the~package~footnote.\\
+ If~you~go~on,~the~package~footnotehyper~won't~be~loaded.
+ }
+% \end{macrocode}
+%
+% \medskip
+% \begin{macrocode}
+\bool_if:NT \g_@@_footnote_bool
+ {
+ \@ifclassloaded { beamer }
+ { \msg_info:nn { witharrows } { Option~incompatible~with~Beamer } }
+ {
+ \@ifpackageloaded { footnotehyper }
+ { \@@_error:n { footnote~with~footnotehyper~package } }
+ { \usepackage { footnote } }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\bool_if:NT \g_@@_footnotehyper_bool
+ {
+ \@ifclassloaded { beamer }
+ { \@@_info:n { Option~incompatible~with~Beamer } }
+ {
+ \@ifpackageloaded { footnote }
+ { \@@_error:n { footnotehyper~with~footnote~package } }
+ { \usepackage { footnotehyper } }
+ }
+ \bool_gset_true:N \g_@@_footnote_bool
+ }
+% \end{macrocode}
+% The flag |\g_@@_footnote_bool| is raised and so, we will only have to test
+% |\g_@@_footnote_bool| in order to know if we have to insert an environnement
+% |{savenotes}| (the |\begin{savenotes}| is in |\@@_pre_halign:n| and
+% |\end{savenotes}| at the end of the environments |{WithArrows}| and
+% |{DispWithArrows}|).
+%
+% \bigskip
+% \subsection{The class option leqno}
+%
+% The boolean |\c_@@_leqno_bool| will indicate if the class option |leqno| is
+% used. When this option is used in LaTeX, the command |\@eqnnum| is redefined
+% (as one can see in the file |leqno.clo|). That's enough to put the labels on
+% the left in our environments |{DispWithArrows}| and |{DispWithArrows*}|.
+% However, that's not enough when our option |wrap-lines| is used. That's why we
+% have to know if this option is used as a class option. With the following
+% programmation, |leqno| \emph{can't} be given as an option of \pkg{witharrows}
+% (by design).
+% \begin{macrocode}
+\bool_new:N \c_@@_leqno_bool
+\DeclareOption { leqno } { \bool_set_true:N \c_@@_leqno_bool }
+\DeclareOption* { }
+\ProcessOptions*
+%</LaTeX>
+% \end{macrocode}
+%
+%
+%
+% \bigskip
+% \subsection{Some technical definitions}
+%
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \tl_put_right:Nn { N v }
+\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
+% \end{macrocode}
+%
+% \medskip
+% We create booleans in order to know if some packages are loaded. For example,
+% for the package \pkg{amsmath}, the boolean is called
+% |\c_@@_amsmath_loaded_bool|.\footnote{It's not possible to use
+% |\@ifpackageloaded| in the core of the functions because |\@ifpackageloaded|
+% is available only in the preamble.}
+% \begin{macrocode}
+\AtBeginDocument
+ {
+ \clist_map_inline:nn
+ {
+ amsmath, amsthm, autonum, cleveref, hyperref, mathtools, showlabels,
+ typedref, unicode-math, varwidth
+ }
+ {
+ \bool_new:c { c_@@_#1_loaded_bool }
+%<*LaTeX>
+ \@ifpackageloaded { #1 }
+ { \bool_set_true:c { c_@@_#1_loaded_bool } }
+ { }
+%</LaTeX>
+%<*plain-TeX>
+ \bool_set_false:c { c_@@_#1_loaded_bool }
+%</plain-TeX>
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We define a command |\@@_strcmp:nn| to compare two token lists. It will be
+% available whether the engine is pdfTeX, XeTeX or LuaTeX.
+% \begin{macrocode}
+\sys_if_engine_luatex:TF
+ {
+ \cs_new_protected:Npn \@@_strcmp:nn #1 #2
+ { \lua_now:e { l3kernel.strcmp('#1','#2') } }
+ }
+ {
+ \cs_new_protected:Npn \@@_strcmp:nn #1 #2
+ { \pdftex_strcmp:D { #1 } { #2 } }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We can now define a command |\@@_sort_seq:N| which will sort a sequence.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sort_seq:N #1
+ {
+ \seq_sort:Nn #1
+ {
+ \int_compare:nNnTF
+ {
+ \@@_strcmp:nn
+ { \str_lower_case:n { ##1 } }
+ { \str_lower_case:n { ##2 } }
+ }
+ > 0
+ \sort_return_swapped:
+ \sort_return_same:
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The following command converts each item of a sequence from |tl| to |str|. It
+% will be used when creating list of keys (a key name is always a |str|).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_convert_to_str_seq:N #1
+ {
+ \seq_clear:N \l_tmpa_seq
+ \seq_map_inline:Nn #1
+ {
+ \seq_put_left:Nx \l_tmpa_seq { \tl_to_str:n { ##1 } }
+ }
+ \seq_set_eq:NN #1 \l_tmpa_seq
+ }
+\cs_new_protected:Npn \@@_set_seq_of_str_from_clist:Nn #1 #2
+ {
+ \seq_set_from_clist:Nn #1 { #2 }
+ \@@_convert_to_str_seq:N #1
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_save:N| saves a \pkg{expl3} variable by creating a global
+% version of the variable. For a variable named |\l_|\texttt{\slshape
+% name}|_|\texttt{\slshape type}, the corresponding global variable will be
+% named |\g_|\texttt{\slshape name}|_|\texttt{\slshape type}. The type of the
+% variable is determinated by the suffix \texttt{\slshape type} and is used to
+% apply the corresponding \pkg{expl3} commands.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_save:N #1
+ {
+ \seq_set_split:Nxx \l_tmpa_seq
+ { \char_generate:nn { `_ } { 12 } }
+ { \cs_to_str:N #1 }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+% \end{macrocode}
+% The string |\l_tmpa_str| will contains the \emph{type} of the variable.
+% \begin{macrocode}
+ \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } }
+ \use:c { \l_tmpa_str _if_exist:cF }
+ { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ }
+ {
+ \use:c { \l_tmpa_str _new:c }
+ { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ }
+ }
+ \use:c { \l_tmpa_str _gset_eq:cN }
+ { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1
+ }
+% \end{macrocode}
+%
+% \medskip
+% The command |\@@_restore:N| affects to the \pkg{expl3} variable the value of
+% the (previously) set value of the corresponding \emph{global} variable.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_restore:N #1
+ {
+ \seq_set_split:Nxx \l_tmpa_seq
+ { \char_generate:nn { `_ } { 12 } }
+ { \cs_to_str:N #1 }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } }
+ \use:c { \l_tmpa_str _set_eq:Nc }
+ #1 { g_\seq_use:Nnnn \l_tmpa_seq _ _ _ }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% We define a Tikz style |@@_node_style| for the |l|-nodes and |r|-nodes that
+% will be created in the |\halign|. These nodes are Tikz nodes of shape
+% ``rectangle'' but with zero width. An arrow between two nodes starts from the
+% \emph{south} anchor of the first node and arrives at the \emph{north} anchor
+% of the second node.
+% \begin{macrocode}
+\tikzset
+ {
+ @@_node_style / .style =
+ {
+ above = \l_@@_ystart_dim ,
+ inner~sep = \c_zero_dim ,
+ minimum~width = \c_zero_dim ,
+ minimum~height = \l_@@_ygap_dim
+ }
+ }
+% \end{macrocode}
+% If the user uses the option |show-nodes| (it's a \pkg{l3keys} option), the
+% Tikz options |draw| and |red| will be appended to this style. This feature may
+% be useful for debugging.\footnote{The |v|-nodes, created near the end of line
+% in |{DispWithArrows}| and |{DispWithArrows*}| are not shown with the option
+% |show-nodes|.}
+%
+%
+% \bigskip
+% The style |@@_standard| is loaded in standard in the |{tikzpicture}| we need.
+% The names of the nodes are prefixed by |wa| (by security) but also by a prefix
+% which is the position-in-the-tree of the nested environments.
+% \begin{macrocode}
+\tikzset
+ {
+ @@_standard / .style =
+ {
+ remember~picture ,
+ overlay ,
+ name~prefix = wa - \l_@@_prefix_str -
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We also define a style for the tips of arrow. The final user of the extension
+% \pkg{witharrows} will use this style if he wants to draw an arrow directly
+% with a Tikz command in his document (probably using the Tikz nodes created by
+% |{WithArrows}| in the |\halign|).
+% \begin{macrocode}
+\tikzset
+ {
+ WithArrows / arrow / tips / .style =
+ { > = { Straight~Barb [ scale = 1.2 , bend ] } }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The style |WithArrows/arrow| will be used to draw the arrows (more precisely,
+% it will be passed to |every~path|).
+% \begin{macrocode}
+\tikzset
+ {
+ WithArrows / arrow / .style =
+ {
+ align = left ,
+% \end{macrocode}
+%
+% We have put the option |align = left| because we want to give the user the
+% possibility of using |\\| in the labels.
+% \begin{macrocode}
+ auto = left ,
+%<*LaTeX>
+ font = \small \itshape ,
+%</LaTeX>
+ WithArrows / arrow / tips ,
+ bend~left = 45 ,
+ ->
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The option |subequations| is an option which uses the environment
+% |{subequations}| of \pkg{amsmath}. That's why, if \pkg{amsmath} is loaded, we
+% add the key |subequations| to the list of the keys available in
+% |\WithArrowsOptions| and |{DispWithArrows}|.
+% \begin{macrocode}
+%<*LaTeX>
+\AtBeginDocument
+ {
+ \bool_if:NTF \c_@@_amsmath_loaded_bool
+ {
+ \seq_put_right:Nn \l_@@_options_WithArrowsOptions_seq { subequations }
+ \seq_put_right:Nn \l_@@_options_DispWithArrows_seq { subequations }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% In order to increase the interline in the environments |{WithArrows}|,
+% |{DispWithArrows}|, etc., we will use the command |\spread@equation| of
+% \pkg{amsmath}. When used, this command becomes no-op (in the current TeX
+% group). Therefore, it will be possible to use the environments of
+% \pkg{amsmath} (e.g. |{aligned}|) in an environment |{WithArrows}|.
+%
+% Nevertheless, we want the extension \pkg{witharrows} available without
+% \pkg{amsmath}. That's why we give a definition of |\spread@equation| if
+% \pkg{amsmath} is not loaded (we put the code in a |\AtBeginDocument| because
+% the flag |\c_@@_amsmath_loaded_bool| is itself set in a |\AtBeginDocument|).
+% \begin{macrocode}
+ {
+%</LaTeX>
+ \cs_new_protected:Npn \spread@equation
+ {
+ \openup \jot
+ \cs_set_eq:NN \spread@equation \prg_do_nothing:
+ }
+%<*LaTeX>
+ }
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\tl_new:N \l_@@_left_brace_tl
+\tl_set_eq:NN \l_@@_left_brace_tl \c_novalue_tl
+% \end{macrocode}
+%
+% \bigskip
+% \subsection{Variables}
+%
+% The boolean |\l_@@_in_WithArrows_bool| will be raised in an environment
+% |{WithArrows}| and the boolean |\l_@@_in_dispwitharrows_bool| will be raised
+% in an environment |{DispWithArrows}| or |{DispWithArrows*}|. The boolean
+% |\l_@@_in_code_after_bool| will be raised during the execution of the
+% |code-after| (option |code-after|).
+% \begin{macrocode}
+\bool_new:N \l_@@_in_WithArrows_bool
+\bool_new:N \l_@@_in_DispWithArrows_bool
+\bool_new:N \l_@@_in_code_after_bool
+% \end{macrocode}
+%
+% \bigskip
+% The following sequence is the position of the last environment |{WithArrows}|
+% in the tree of the nested environments |{WithArrows}|.
+% \begin{macrocode}
+\seq_new:N \g_@@_position_in_the_tree_seq
+\seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1
+% \end{macrocode}
+%
+% \bigskip
+% The following counter will give the number of the last environment
+% |{WithArrows}| of level~$0$. This counter will be used only in the definition
+% of |\WithArrowsLastEnv|.
+% \begin{macrocode}
+\int_new:N \g_@@_last_env_int
+% \end{macrocode}
+%
+% \bigskip
+% The following integer indicates the position of the box that will be created
+% for an environment |{WithArrows}| (not an environment |{DispWithArrows}|) :
+% 0 (=|t|=|\vtop|), 1~(=|c|=|\vcenter|) or 2 (=|b|=|\vbox|).
+% \begin{macrocode}
+\int_new:N \l_@@_pos_env_int
+% \end{macrocode}
+%
+% \bigskip
+% The integer |\l_@@_pos_arrow_int| indicates the position of the arrow with the
+% following code (the option |v| is accessible only for the arrows in
+% |code-after| where the options |i|, |group| et |groups| are not available).
+%
+% \begin{center}
+% \begin{tabular}{l}
+% \begin{tabular}{@{}l*8c@{}}
+% \toprule
+% option & |lr| & |ll| & |rl| & |rr| & |v| & |i| & |groups| & |group| \\
+% \midrule
+% |\l_@@_pos_arrow_int| & $0$ & $1$ & $2$ & $3$ & $4$ & $5$ & $6$ & $7$ \\
+% \bottomrule
+% \end{tabular} \\
+% \footnotesize The option |v| can be used only in |\Arrow| in |code-after| (see
+% below).
+% \end{tabular}
+% \end{center}
+%
+% \begin{macrocode}
+\int_new:N \l_@@_pos_arrow_int
+\int_set:Nn \l_@@_pos_arrow_int 3
+% \end{macrocode}
+%
+%
+% \bigskip
+% In the |\halign| of an environment |{WithArrows}| or |{DispWithArrows}|, we
+% will have to use four counters:
+% \begin{itemize}
+% \item |\g_@@_arrow_int| to count the arrows created in the environment ;
+% \item |\g_@@_line_int| to count the lines of the |\halign| ;
+% \item |\g_@@_col_int| to count the column of the |\halign|.
+% \end{itemize}
+%
+%
+% These counters will be incremented in a cell of the |\halign| and, therefore,
+% the incrementation must be global. However, we want to be able to include a
+% |{WithArrows}| in another |{WithArrows}|. To do so, we must restore the
+% previous value of these counters at the end of an environment |{WithArrows}|
+% and we decide to manage a stack for each of these counters.
+% \begin{macrocode}
+\seq_new:N \g_@@_arrow_int_seq
+\int_new:N \g_@@_arrow_int
+\seq_new:N \g_@@_line_int_seq
+\int_new:N \g_@@_line_int
+\seq_new:N \g_@@_col_int_seq
+\int_new:N \g_@@_col_int
+% \end{macrocode}
+%
+%
+% \bigskip
+% For the environment |{DispWithArrows}|, the comma list |\l_@@_tags_clist| will
+% be the list of the numbers of lines to be tagged (with the counter |equation|
+% of LaTeX). In fact, |\l_@@_tags_clist| may contain non negative integers but
+% also three special values, |first|, |last| and |all|.
+% \begin{macrocode}
+%<*LaTeX>
+\clist_new:N \l_@@_tags_clist
+\clist_set:Nn \l_@@_tags_clist { all }
+% \end{macrocode}
+%
+% \bigskip
+% During the execution of an environment |{DispWithArrows}|, if a row must be
+% tagged, the (local) value of |\l_@@_tags_clist| will be put (by convention) to
+% |all|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_test_if_to_tag:
+ {
+ \clist_if_in:NVT \l_@@_tags_clist \g_@@_line_int
+ { \clist_set:Nn \l_@@_tags_clist { all } }
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+%
+% \bigskip
+% If the user has given a value for the option |command-name| (at the global or
+% at the \emph{environment} level), a command with this name is defined locally
+% in the environment with meaning |\@@_Arrow|. The default value of the option
+% |command-name| is ``|Arrow|'' and thus, by default, the name of the command
+% will be |\Arrow|.
+% \begin{macrocode}
+\str_new:N \l_@@_command_name_str
+\str_set:Nn \l_@@_command_name_str { Arrow }
+% \end{macrocode}
+%
+% \bigskip
+% The string |\l_@@_string_Arrow_for_msg_str| is only a string that will be
+% displayed in some error messages. For example, if |command-name| is defined to
+% be |Explanation|, this string will contain ``|\Arrow alias \Explanation|''.
+% \begin{macrocode}
+\str_new:N \l_@@_string_Arrow_for_msg_str
+\str_set:Nx \l_@@_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
+% \end{macrocode}
+%
+% \bigskip
+% The sequence |\g_@@_names_seq| will be the list of all the names of
+% environments used (via the option |name|) in the document: two environments
+% must not have the same name. However, it's possible to use the option
+% |allow-duplicate-names|.
+% \begin{macrocode}
+\seq_new:N \g_@@_names_seq
+% \end{macrocode}
+%
+% \bigskip
+% The boolean |\l_@@_sbwi_bool| corresponds to the option
+% |standard-behaviour-with-items|. Since the version 1.16 of \pkg{witharrows},
+% no vertical space is added between an |\item| of a LaTeX list and an
+% environment |{DispWithArrows}|. With the option
+% |standard-behaviour-with-items|, it's possible to restore the previous
+% behaviour (which corresponds to the standard behaviour of |{align}| of
+% \pkg{amsmath}). |\l_@@_sbwi_bool| is the boolean corresponding to this option.
+% \begin{macrocode}
+%<*LaTeX>
+\bool_new:N \l_@@_sbwi_bool
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+%<*LaTeX>
+\bool_new:N \l_@@_tag_star_bool
+\bool_new:N \l_@@_tag_next_line_bool
+\bool_new:N \l_@@_qedhere_bool
+%</LaTeX>
+\bool_new:N \l_@@_in_first_columns_bool
+\bool_new:N \l_@@_new_group_bool
+\bool_new:N \l_@@_initial_r_bool
+\bool_new:N \l_@@_final_r_bool
+\tl_new:N \l_@@_initial_tl
+\tl_new:N \l_@@_final_tl
+\int_new:N \l_@@_nb_cols_int
+% \end{macrocode}
+%
+% \bigskip
+% The string |\l_@@_format_str| will contain the \emph{format} of the array
+% which is a succession of letters |r|, |c| and |l| specifying the type of the
+% columns of the |\halign| (except the column for the labels of the equations
+% in the environment |{DispWithArrows}|).
+% \begin{macrocode}
+\str_new:N \l_@@_format_str
+% \end{macrocode}
+%
+% \bigskip
+% The option boolean corresponds to the option |subequations|.
+% \begin{macrocode}
+%<*LaTeX>
+\bool_new:N \l_@@_subequations_bool
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% \subsection{The definition of the options}
+%
+% There are four levels where options can be set:
+% \begin{itemize}
+% \item with |\usepackage[...]{witharrows}|: this level will be called
+% \emph{package} level;
+% \item with |\WithArrowsOptions{...}|: this level will be called \emph{global}
+% level\footnote{This level is called \emph{global level} but the settings done
+% by |\WithArrowsOptions| are local in the TeX sense: their scope corresponds to
+% the current TeX group.};
+% \item with |\begin{WithArrows}[...]|: this level will be called
+% \emph{environment} level;
+% \item with |\Arrow[...]| (included in |code-after|): this level will be called
+% \emph{local} level.
+% \end{itemize}
+%
+%
+% \bigskip
+% When we scan a list of options, we want to be able to raise an error if two
+% options of position (|ll|, |rl|, |i|, etc.) of the arrows are present. That's
+% why we keep the first option of position in a variable called
+% |\l_@@_previous_key_str|. The following function |\@@_eval_if_allowed:n| will
+% execute its argument only if a first key of position has not been set (and
+% raise an error elsewhere).
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_eval_if_allowed:n #1
+ {
+ \str_if_empty:NTF \l_@@_previous_key_str
+ {
+ \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+ #1
+ }
+ { \@@_error:n { Incompatible~options } }
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_fix_pos_option:n #1
+ { \@@_eval_if_allowed:n { \int_set:Nn \l_@@_pos_arrow_int { #1 } } }
+% \end{macrocode}
+%
+% \bigskip
+% First a set of keys that will be used at the global or environment level of
+% options.
+% \begin{macrocode}
+\keys_define:nn { WithArrows / Global }
+ {
+ ygap .dim_set:N = \l_@@_ygap_dim ,
+ ygap .value_required:n = true ,
+ ygap .initial:n = 0.4 ex ,
+ ystart .dim_set:N = \l_@@_ystart_dim ,
+ ystart .value_required:n = true ,
+ ystart .initial:n = 0.4 ex ,
+ more-columns .code:n =
+ \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
+ more-columns .value_forbidden:n = true,
+ command-name .code:n =
+ \str_set:Nn \l_@@_command_name_str { #1 }
+ \str_set:Nx \l_@@_string_Arrow_for_msg_str
+ { \c_backslash_str Arrow~alias~\c_backslash_str #1 } ,
+ command-name .value_required:n = true ,
+ tikz-code .tl_set:N = \l_@@_tikz_code_tl,
+ tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+ tikz-code .value_required:n = true ,
+ TikzCode .meta:n = { tikz-code = #1 } ,
+ displaystyle .bool_set:N = \l_@@_displaystyle_bool ,
+ displaystyle .default:n = true ,
+ show-nodes .code:n =
+ \tikzset { @@_node_style / .append~style = { draw , red } } ,
+ show-nodes .value_forbidden:n = true,
+ show-node-names .bool_set:N = \l_@@_show_node_names_bool ,
+ show-node-names .default:n = true ,
+ group .code:n =
+ \str_if_empty:NTF \l_@@_previous_key_str
+ {
+ \str_set:Nn \l_@@_previous_key_str { group }
+ \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset }
+ \int_set:Nn \l_@@_pos_arrow_int 7
+ }
+ { \@@_error:n { Incompatible~options } } ,
+ group .value_forbidden:n = true ,
+ groups .code:n =
+ \str_if_empty:NTF \l_@@_previous_key_str
+ {
+ \str_set:Nn \l_@@_previous_key_str { groups }
+ \seq_if_in:NnF \l_@@_options_Arrow_seq { new-group }
+ { \seq_put_right:Nn \l_@@_options_Arrow_seq { new-group } }
+ \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset }
+ \int_set:Nn \l_@@_pos_arrow_int 6
+ }
+ { \@@_error:n { Incompatible~options } } ,
+ groups .value_forbidden:n = true ,
+ tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
+ tikz .initial:n = \c_empty_tl ,
+ tikz .value_required:n = true ,
+ rr .value_forbidden:n = true ,
+ rr .code:n = \@@_fix_pos_option:n 3 ,
+ ll .value_forbidden:n = true ,
+ ll .code:n = \@@_fix_pos_option:n 1 ,
+ rl .value_forbidden:n = true ,
+ rl .code:n = \@@_fix_pos_option:n 2 ,
+ lr .value_forbidden:n = true ,
+ lr .code:n = \@@_fix_pos_option:n 0 ,
+ i .value_forbidden:n = true ,
+ i .code:n = \@@_fix_pos_option:n 5 ,
+ xoffset .dim_set:N = \l_@@_xoffset_dim ,
+ xoffset .value_required:n = true ,
+ xoffset .initial:n = 3 mm ,
+ jot .dim_set:N = \jot ,
+ jot .value_required:n = true ,
+ interline .skip_set:N = \l_@@_interline_skip ,
+ interline .value_required:n = true ,
+ start-adjust .dim_set:N = \l_@@_start_adjust_dim ,
+ start-adjust .value_required:n = true ,
+ start-adjust .initial:n = 0.4 ex ,
+ end-adjust .dim_set:N = \l_@@_end_adjust_dim ,
+ end-adjust .value_required:n = true ,
+ end-adjust .initial:n = 0.4 ex ,
+ adjust .meta:n = { start-adjust = #1 , end-adjust = #1 } ,
+ adjust .value_required:n = true ,
+% \end{macrocode}
+%
+% \medskip
+% With the option |no-arrows|, the arrows won't be drawn. However, the ``first
+% pass'' of the arrows is done and some errors may be detected. The
+% nullification of |\@@_draw_arrows:nn| is for the standard arrows and the
+% nullification of |\@@_draw_arrow:nnn| is for ``Arrow in |code-after|''.
+% \begin{macrocode}
+ no-arrows .code:n =
+ \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn
+ \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn ,
+ no-arrows .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+% \bigskip
+% Now a set of keys specific to the environments |{WithArrows}| (and not
+% |{DispWithArrow}}|). Despite its name, this set of keys will also be used in
+% |\WithArrowsOptions|.
+% \begin{macrocode}
+\keys_define:nn { WithArrows / WithArrowsSpecific }
+ {
+ t .code:n = \int_set:Nn \l_@@_pos_env_int O ,
+ t .value_forbidden:n = true ,
+ c .code:n = \int_set:Nn \l_@@_pos_env_int 1 ,
+ c .value_forbidden:n = true ,
+ b .code:n = \int_set:Nn \l_@@_pos_env_int 2 ,
+ b .value_forbidden:n = true
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The following list of the (left) extensible delimiters of LaTeX is only for
+% the validation of the key |replace-left-brace-by|.
+% \begin{macrocode}
+\clist_new:N \c_@@_extensible_delimiters_clist
+\clist_set:Nn \c_@@_extensible_delimiters_clist
+ {
+ ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor
+ }
+%<*LaTeX>
+\AtBeginDocument
+ {
+ \bool_if:nT
+ { \c_@@_amsmath_loaded_bool || \use:c { c_@@_unicode-math_loaded_bool } }
+ {
+ \clist_put_right:Nn \c_@@_extensible_delimiters_clist { \lvert, \lVert }
+ }
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+%
+% \bigskip
+% Now a set of keys specific to the environments |{DispWithArrows}| and
+% |{DispWithArrows*}| (and not |{WithArrows}|). Despite its name, this set of
+% keys will also be used in |\WithArrowsOptions|.
+% \begin{macrocode}
+\keys_define:nn { WithArrows / DispWithArrowsSpecific }
+ {
+ fleqn .bool_set:N = \l_@@_fleqn_bool ,
+ fleqn .default:n = true ,
+ mathindent .dim_set:N = \l_@@_mathindent_dim ,
+ mathindent .value_required:n = true ,
+ mathindent .initial:n = 25 pt ,
+%<*LaTeX>
+ notag .code:n =
+ \str_if_eq:nnTF { #1 } { true }
+ { \clist_clear:N \l_@@_tags_clist }
+ { \clist_set:Nn \l_@@_tags_clist { all } } ,
+ notag .default:n = true ,
+% \end{macrocode}
+% Since the option |subequations| is an option which insert the environment
+% |{DispWithArrows}| in an environment |{subequations}| of \pkg{amsmath}, we
+% must test whether the package \pkg{amsmath} is loaded.
+% \begin{macrocode}
+ subequations .code:n =
+ \bool_if:NTF \c_@@_amsmath_loaded_bool
+ { \bool_set_true:N \l_@@_subequations_bool }
+ {
+ \@@_error:n { amsmath~not~loaded }
+ \group_begin:
+ \globaldefs = 1
+ \@@_msg_redirect_name:nn { amsmath~not~loaded } { info }
+ \group_end:
+ } ,
+ subequations .default:n = true ,
+ subequations .value_forbidden:n = true ,
+ nonumber .meta:n = notag ,
+ allow-multiple-labels .code:n =
+ \@@_msg_redirect_name:nn { Multiple~labels } { none } ,
+ allow-multiple-labels .value_forbidden:n = true ,
+ tagged-lines .code:n =
+ \clist_set:Nn \l_@@_tags_clist { #1 }
+ \clist_if_in:NnT \l_@@_tags_clist { first }
+ {
+ \clist_remove_all:Nn \l_@@_tags_clist { first }
+ \clist_put_left:Nn \l_@@_tags_clist \c_one_int
+ } ,
+ tagged-lines .value_required:n = true ,
+%</LaTeX>
+ wrap-lines .bool_set:N = \l_@@_wrap_lines_bool ,
+ wrap-lines .default:n = true ,
+ replace-left-brace-by .code:n =
+ {
+ \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } }
+ \clist_if_in:NVTF
+ \c_@@_extensible_delimiters_clist
+ \l_tmpa_tl
+ { \tl_set:Nn \l_@@_replace_left_brace_by_tl { #1 } }
+ { \@@_error:n { Bad~value~for~replace~brace~by } }
+ } ,
+ replace-left-brace-by .initial:n = \lbrace ,
+% \end{macrocode}
+%
+% Since the version 1.16 of \pkg{witharrows}, no vertical space is added between
+% an |\item| of a LaTeX list and an environment |{DispWithArrows}|. With the
+% option |standard-behaviour-with-items|, it's possible to restore the previous
+% behaviour (which corresponds to the standard behaviour of |{align}| of
+% \pkg{amsmath}).
+% \begin{macrocode}
+%<*LaTeX>>
+ standard-behaviour-with-items .bool_set:N = \l_@@_sbwi_bool ,
+ standard-behaviour-with-items .default:n = true
+%</LaTeX>
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% Now a set of keys which will be used in all the environments (but not in
+% |\WithArrowsOptions}|).
+%
+% \begin{macrocode}
+\keys_define:nn { WithArrows / Env }
+ {
+ name .code:n =
+% \end{macrocode}
+% First, we convert the value in a |str| because the list of the names will be a
+% list of |str|.
+% \begin{macrocode}
+ \str_set:Nn \l_tmpa_str { #1 }
+ \seq_if_in:NVTF \g_@@_names_seq \l_tmpa_str
+ { \@@_error:n { Duplicate~name } }
+ { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str }
+ \str_set_eq:NN \l_@@_name_str \l_tmpa_str ,
+ name .value_required:n = true ,
+ code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } ,
+ code-before .value_required:n = true,
+ CodeBefore .meta:n = { code-before = #1 } ,
+ code-after .code:n = \tl_put_right:Nn \l_@@_code_after_tl { #1 } ,
+ code-after .value_required:n = true ,
+ CodeAfter .meta:n = { code-after = #1 } ,
+ format .code:n =
+ \tl_if_empty:nTF { #1 }
+ { \@@_error:n { Invalid~option~format } }
+ {
+ \regex_match:nnTF { \A[rcl]*\Z } { #1 }
+ { \tl_set:Nn \l_@@_format_str { #1 } }
+ { \@@_error:n { Invalid~option~format } }
+ } ,
+ format .value_required:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% Now, we begin the construction of the major sets of keys, named
+% ``|WithArrows / WithArrows|'', ``|WithArrows / DispWithArrows|'' and
+% ``|WithArrows / WithArrowsOptions|''. Each of these sets of keys will be
+% completed after.
+% \begin{macrocode}
+\keys_define:nn { WithArrows }
+ {
+ WithArrows .inherit:n =
+ {
+ WithArrows / Global ,
+ WithArrows / WithArrowsSpecific ,
+ WithArrows / Env
+ } ,
+ DispWithArrows .inherit:n =
+ {
+ WithArrows / DispWithArrowsSpecific ,
+ WithArrows / Global ,
+ WithArrows / Env ,
+ } ,
+ WithArrowsOptions .inherit:n =
+ {
+ WithArrows / Global ,
+ WithArrows / WithArrowsSpecific ,
+ WithArrows / DispWithArrowsSpecific
+ }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% A sequence of |str| for the options available in |{WithArrows}|. This sequence
+% will be used in the error messages and can be modified dynamically.
+% \begin{macrocode}
+\seq_new:N \l_@@_options_WithArrows_seq
+\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrows_seq
+ {
+ adjust, b, c, code-after, code-before, command-name,
+ displaystyle, end-adjust,
+ format, group, groups, i,
+ interline, jot, ll,
+ lr, more-columns, name,
+ no-arrows, rl, rr,
+ show-node-names, show-nodes, start-adjust,
+ t, tikz, tikz-code,
+ xoffset, ygap, ystart
+ }
+\@@_convert_to_str_seq:N \l_@@_options_WithArrows_seq
+% \end{macrocode}
+%
+% \medskip
+% \begin{macrocode}
+\keys_define:nn { WithArrows / WithArrows }
+ {
+ unknown .code:n =
+ \@@_sort_seq:N \l_@@_options_WithArrows_seq
+ \@@_error:n { Unknown~option~WithArrows }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\keys_define:nn { WithArrows / DispWithArrows }
+ {
+ left-brace .tl_set:N = \l_@@_left_brace_tl ,
+ unknown .code:n =
+ \@@_sort_seq:N \l_@@_options_DispWithArrows_seq
+ \@@_error:n { Unknown~option~DispWithArrows }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% A sequence of the options available in |{DispWithArrows}|. This sequence will
+% be used in the error messages and can be modified dynamically.
+% \begin{macrocode}
+\seq_new:N \l_@@_options_DispWithArrows_seq
+\@@_set_seq_of_str_from_clist:Nn \l_@@_options_DispWithArrows_seq
+ {
+ code-after, code-before, command-name, tikz-code, adjust,
+ displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
+ left-brace, ll, lr, mathindent, name, no-arrows, replace-left-brace-by, rl,
+ rr, show-node-names, show-nodes, start-adjust, tikz, wrap-lines, xoffset,
+ ygap, ystart,
+%<*LaTeX>>
+ allow-multiple-labels, tagged-lines, nonumber, notag
+%</LaTeX>
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\keys_define:nn { WithArrows / WithArrowsOptions }
+ {
+ allow-duplicate-names .code:n =
+ \@@_msg_redirect_name:nn { Duplicate~name } { none } ,
+ allow-duplicate-names .value_forbidden:n = true ,
+ unknown .code:n =
+ \@@_sort_seq:N \l_@@_options_WithArrowsOptions_seq
+ \@@_error:n { Unknown~option~WithArrowsOptions }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% A sequence of the options available in |\WithArrowsOptions|. This sequence
+% will be used in the error messages and can be modified dynamically.
+% \begin{macrocode}
+\seq_new:N \l_@@_options_WithArrowsOptions_seq
+\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrowsOptions_seq
+ {
+ allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust,
+ displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
+ mathindent, no-arrows, rl, rr, show-node-names, show-nodes, start-adjust, t,
+ tikz, wrap-lines, xoffset, ygap, ystart,
+%<*LaTeX>>
+ allow-multiple-labels, nonumber, notag, standard-behaviour-with-items,
+ tagged-lines
+%</LaTeX>
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_set_independent:| is a command without argument that will be
+% used to specify that the arrow will be ``independent'' (of the potential
+% groups of the option |group| or |groups|). This information will be stored in
+% the field ``status'' of the arrow. Another value of the field ``status'' is
+% ``new-group''.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_set_independent:
+ {
+ \str_if_empty:NTF \l_@@_previous_key_str
+ {
+ \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+ \str_set:Nn \l_@@_status_arrow_str { independent }
+ \str_if_eq:VnF \l_keys_value_tl { NoValue }
+ { \@@_error:n { Value~for~a~key } }
+ }
+ { \@@_error:n { Incompatible~options~in~Arrow } }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The options of an individual arrow are parsed twice. The first pass is when
+% the command |\Arrow| is read. The second pass is when the arrows are drawn
+% (after the end of the environment |{WithArrows}| or |{DispWithArrows}|). Now,
+% we present the keys set for the first pass. The main goal is to extract
+% informations which will be necessary during the scan of the arrows. For
+% instance, we have to know if some arrows are ``independent'' or use the
+% option ``new-group''.
+% \begin{macrocode}
+\keys_define:nn { WithArrows / Arrow / FirstPass }
+ {
+ jump .code:n =
+ \int_compare:nTF { #1 > 0 }
+ { \int_set:Nn \l_@@_jump_int { #1 } }
+ { \@@_error:n { Negative~jump } } ,
+ jump .value_required:n = true,
+ rr .code:n = \@@_set_independent: ,
+ ll .code:n = \@@_set_independent: ,
+ rl .code:n = \@@_set_independent: ,
+ lr .code:n = \@@_set_independent: ,
+ i .code:n = \@@_set_independent: ,
+ rr .default:n = NoValue ,
+ ll .default:n = NoValue ,
+ rl .default:n = NoValue ,
+ lr .default:n = NoValue ,
+ i .default:n = NoValue ,
+ new-group .value_forbidden:n = true,
+ new-group .code:n =
+ \int_compare:nTF { \l_@@_pos_arrow_int = 6 }
+ { \str_set:Nn \l_@@_status_arrow_str { new-group } }
+ { \@@_error:n { new-group~without~groups } } ,
+% \end{macrocode}
+%
+% \medskip
+% The other keys don't give any information necessary during the scan of the
+% arrows. However, you try to detect errors and that's why all the keys are
+% listed in this keys set. An unknown key will be detected at the point of the
+% command |\Arrow| and not at the end of the environment.
+% \begin{macrocode}
+ tikz-code .code:n = \prg_do_nothing: ,
+ tikz-code .value_required:n = true ,
+ tikz .code:n = \prg_do_nothing: ,
+ tikz .value_required:n = true ,
+% \end{macrocode}
+%
+% \medskip
+% The option |xoffset| is not allowed when the option |group| or the option
+% |groups| is used (since it would be meaningless).
+% \begin{macrocode}
+ xoffset .code:n =
+ \int_compare:nNnT \l_@@_pos_arrow_int > 5
+ { \@@_error:n { Option~xoffset~forbidden } } ,
+ xoffset .value_required:n = true ,
+ start-adjust .code:n = \prg_do_nothing: ,
+ start-adjust .value_required:n = true ,
+ end-adjust .code:n = \prg_do_nothing: ,
+ end-adjust .value_required:n = true ,
+ adjust .code:n = \prg_do_nothing: ,
+ adjust .value_required:n = true ,
+ unknown .code:n =
+ \@@_sort_seq:N \l_@@_options_Arrow_seq
+ \seq_if_in:NVTF \l_@@_options_WithArrows_seq \l_keys_key_tl
+ {
+ \str_set:Nn \l_tmpa_str
+ { ~However,~this~key~can~be~used~in~the~options~of~\{WithArrows\}. }
+ }
+ { \str_clear:N \l_tmpa_str }
+ \@@_error:n { Unknown~option~in~Arrow }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% A sequence of the options available in |\Arrow|. This sequence will be used in
+% the error messages and can be modified dynamically.
+% \begin{macrocode}
+\seq_new:N \l_@@_options_Arrow_seq
+\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_seq
+ {
+ adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code,
+ xoffset
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_fix_pos_arrow:n #1
+ {
+ \str_if_empty:NT \l_@@_previous_key_str
+ {
+ \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+ \int_set:Nn \l_@@_pos_arrow_int { #1 }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The options of the individual commands |\Arrows| are scanned twice. The second
+% pass is just before the drawing of the arrow. In this set of keys, we don't
+% put an item for the unknown keys because an unknown key would have been
+% already detected during the first pass.
+%
+% \begin{macrocode}
+\keys_define:nn {WithArrows / Arrow / SecondPass }
+ {
+ tikz-code .tl_set:N = \l_@@_tikz_code_tl ,
+ tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+ tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
+ tikz .initial:n = \c_empty_tl ,
+ rr .code:n = \@@_fix_pos_arrow:n 3 ,
+ ll .code:n = \@@_fix_pos_arrow:n 1 ,
+ rl .code:n = \@@_fix_pos_arrow:n 2 ,
+ lr .code:n = \@@_fix_pos_arrow:n 0 ,
+ i .code:n = \@@_fix_pos_arrow:n 5 ,
+% \end{macrocode}
+%
+% \medskip
+% The option |xoffset| is not allowed when the option |group| or the option
+% |groups| is used (since it would be meaningless). An error has been raised
+% during the first pass. Here, we manage to avoid a second error which
+% would be redundant.
+% \begin{macrocode}
+ xoffset .code:n =
+ \int_compare:nNnF \l_@@_pos_arrow_int > 5
+ { \dim_set:Nn \l_@@_xoffset_dim { #1 } } ,
+ start-adjust .dim_set:N = \l_@@_start_adjust_dim,
+ end-adjust .dim_set:N = \l_@@_end_adjust_dim,
+ adjust .code:n =
+ \dim_set:Nn \l_@@_start_adjust_dim { #1 }
+ \dim_set:Nn \l_@@_end_adjust_dim { #1 } ,
+ }
+% \end{macrocode}
+%
+% \bigskip
+% |\WithArrowsOptions| is the command of the \pkg{witharrows} package to fix
+% options at the document level. It's possible to fix in |\WithArrowsOptions|
+% some options specific to |{WithArrows}| (in contrast with |{DispWithArrows}|)
+% or specific to |{DispWithArrows}| (in contrast with |{WithArrows}|). That's
+% why we have constructed a set of keys specific to |\WithArrowsOptions|.
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentCommand \WithArrowsOptions { m }
+%</LaTeX>
+%<*plain-TeX>
+\cs_set_protected:Npn \WithArrowsOptions #1
+%</plain-TeX>
+ {
+ \str_clear_new:N \l_@@_previous_key_str
+ \keys_set:nn { WithArrows / WithArrowsOptions } { #1 }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% \subsection{The command \textbackslash Arrow}
+%
+% In fact, the internal command is not named |\Arrow| but |\@@_Arrow|. Usually,
+% at the beginning of an environment |{WithArrows}|, |\Arrow| is set to be
+% equivalent to |\@@_Arrow|. However, the user can change the name with the
+% option |command-name| and the user command for |\@@_Arrow| will be different.
+% This mechanism can be useful when the user has already a command named
+% |\Arrow| he still wants to use in the environments |{WithArrows}| or
+% |{DispWithArrows}|.
+%
+% \medskip
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentCommand \@@_Arrow { O { } m ! O { } }
+%</LaTeX>
+%<*plain-TeX>
+\cs_new_protected:Npn \@@_Arrow
+ {
+ \peek_meaning:NTF [
+ { \@@_Arrow_i }
+ { \@@_Arrow_i [ ] }
+ }
+\cs_new_protected:Npn \@@_Arrow_i [ #1 ] #2
+ {
+ \peek_meaning:NTF [
+ { \@@_Arrow_ii [ #1 ] { #2 } }
+ { \@@_Arrow_ii [ #1 ] { #2 } [ ] }
+ }
+\cs_new_protected:Npn \@@_Arrow_ii [ #1 ] #2 [ #3 ]
+%</plain-TeX>
+ {
+% \end{macrocode}
+%
+% The counter |\g_@@_arrow_int| counts the arrows in the environment. The
+% incrementation must be global (|gincr|) because the command |\Arrow| will be
+% used in the cell of a |\halign|. It's recalled that we manage a stack for this
+% counter.
+% \begin{macrocode}
+ \int_gincr:N \g_@@_arrow_int
+% \end{macrocode}
+%
+% \medskip
+% We will construct a global property list to store the informations of the
+% considered arrow. The six fields of this property list are ``initial'',
+% ``final'', ``status'', ``options'', ``label'' and ``input-line''. In order to
+% compute the value of ``final'' (the destination row of the arrow), we have to
+% take into account a potential option |jump|. In order to compute the value of
+% the field ``status'', we have to take into account options as |ll|, |rl|,
+% |rr|, |lr|, etc. or |new-group|.
+%
+% We will do that job with a first analyze of the options of the command
+% |\Arrow| with a dedicated set of keys called |WithArrows/Arrow/FirstPass|.
+%
+% \begin{macrocode}
+ \str_clear_new:N \l_@@_previous_key_str
+ \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 }
+% \end{macrocode}
+%
+% \medskip
+% We construct now a global property list to store the informations of the
+% considered arrow with the six fields ``initial'', ``final'', ``status'',
+% ``options'', ``label'' and ``input-line''.
+%
+% \smallskip
+% \begin{enumerate}
+% \item First, the row from which the arrow starts:
+% \begin{macrocode}
+ \prop_put:NnV \l_tmpa_prop { initial } \g_@@_line_int
+% \end{macrocode}
+%
+% \item The row where the arrow ends (that's why it was necessary to analyze the
+% key |jump|):
+% \begin{macrocode}
+ \int_set:Nn \l_tmpa_int { \g_@@_line_int + \l_@@_jump_int }
+ \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int
+% \end{macrocode}
+%
+% \item The ``status'' of the arrow, with 3 possible values: empty,
+% |independent|, or |new-group|.
+% \begin{macrocode}
+ \prop_put:NnV \l_tmpa_prop { status } \l_@@_status_arrow_str
+% \end{macrocode}
+%
+% \item The options of the arrow (it's a token list):
+% \begin{macrocode}
+ \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 }
+% \end{macrocode}
+%
+% \item The label of the arrow (it's also a token list):
+% \begin{macrocode}
+ \prop_put:Nnn \l_tmpa_prop { label } { #2 }
+% \end{macrocode}
+%
+% \item The number of the line where the command |\Arrow| is issued in the TeX
+% source (as of now, this is only useful for an error message).
+% \begin{macrocode}
+ \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number:
+% \end{macrocode}
+% \end{enumerate}
+%
+% The property list has been created in a local variable for convenience. Now,
+% it will be stored in a global variable indicating both the
+% position-in-the-tree and the number of the arrow.
+%
+% \begin{macrocode}
+ \prop_gclear_new:c
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop }
+ \prop_gset_eq:cN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop }
+ \l_tmpa_prop
+ }
+% \end{macrocode}
+%
+% \medskip
+% The command |\Arrow| (or the corresponding command with a name given by the
+% user with the option |command-name|) will be available only in the last column of
+% the environments |{WithArrows}| and |{DispWithArrows}|. In the other columns,
+% the command will be linked to the following command |\@@_Arrow_first_columns:|
+% which will raise an error.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_Arrow_first_columns:
+ { \@@_error:n { Arrow~not~in~last~column } \@@_Arrow }
+% \end{macrocode}
+%
+%
+% \bigskip
+% \subsection{The environments \{WithArrows\} and \{DispWithArrows\}}
+%
+% \subsubsection{Code before the \textbackslash halign}
+%
+% The command |\@@_pre_halign:n| is a code common to the environments
+% |{WithArrows}| and |{DispWithArrows}|. The argument is the list of options
+% given to the environment.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_pre_halign:n #1
+% \end{macrocode}
+%
+% First, the initialisation of |\l_@@_type_env_str| which is the name of the
+% encompassing environment. In fact, this token list is used only in the error
+% messages.
+% \begin{macrocode}
+ {
+%<*LaTeX>
+ \str_clear_new:N \l_@@_type_env_str
+ \str_set:NV \l_@@_type_env_str \@currenvir
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% We deactivate the potential externalization of Tikz. The Tikz elements created
+% by \pkg{witharrows} can't be externalized since they are created in Tikz
+% pictures with |overlay| and |remember picture|.
+% \begin{macrocode}
+ \cs_if_exist:NT \tikz@library@external@loaded
+ { \tikzset { external / export = false } }
+% \end{macrocode}
+%
+% \bigskip
+% The token list |\l_@@_name_str| will contain the potential name of the
+% environment (given with the option |name|). This name will be used to create
+% aliases for the names of the nodes.
+% \begin{macrocode}
+ \str_clear_new:N \l_@@_name_str
+% \end{macrocode}
+%
+% \bigskip
+% The parameter |\l_@@_status_arrow_str| will be used to store the ``status'' of
+% an individual arrow. It will be used to fill the field ``status'' in the
+% property list describing an arrow.
+% \begin{macrocode}
+ \str_clear_new:N \l_@@_status_arrow_str
+% \end{macrocode}
+%
+% \bigskip
+% The dimension |\l_@@_x_dim| will be used to compute the $x$-value for some
+% vertical arrows when one of the options |i|, |group| and |groups| (values 5, 6
+% and 7 of |\l_@@_pos_arrow_int|) is used.
+% \begin{macrocode}
+ \dim_zero_new:N \l_@@_x_dim
+% \end{macrocode}
+%
+% \medskip
+% The variable |\l_@@_input_line_str| will be used only to store, for each
+% command |\Arrow| the line (in the TeX file) where the command is issued. This
+% information will be stored in the field ``input-line'' of the arrow. As of
+% now, this information is used only in the error message of a arrow impossible
+% to draw (because it arrives after the last row of the environment).
+% \begin{macrocode}
+ \str_clear_new:N \l_@@_input_line_str
+% \end{macrocode}
+%
+%
+% The initialisation of the counters |\g_@@_arrow_int|, |\g_@@_line_int| and
+% |\g_@@_col_int|. However, we have to save their previous values with the
+% stacks created for this end.
+% \begin{macrocode}
+ \seq_gput_right:NV \g_@@_arrow_int_seq \g_@@_arrow_int
+ \int_gzero:N \g_@@_arrow_int
+ \seq_gput_right:NV \g_@@_line_int_seq \g_@@_line_int
+ \int_gzero:N \g_@@_line_int
+ \seq_gput_right:NV \g_@@_col_int_seq \g_@@_col_int
+ \int_gzero:N \g_@@_col_int
+% \end{macrocode}
+%
+% In the preamble of the |\halign|, there will be \emph{two} counters of the
+% columns. The aim of this programmation is to detect the utilisation of a
+% command |\omit| in a cell of the |\halign| (it should be forbidden).
+% For example, in the part of the preamble concerning the third column (if there
+% is a third column in the environment), we will have the following instructions :
+% \begin{Verbatim}
+% \int_gincr:N \g_~@~@_col_int
+% \int_gset:Nn \g_~@~@_static_col_int 3
+% \end{Verbatim}
+% The counter |\g_@@_col_int| is incremented dynamically and the second is
+% static. If the user has used a command |\omit|, the dynamic incrementation is
+% not done in the cell and, at this end of the row, the difference between the
+% counters may infer the presence of |\omit| at least once.
+% \begin{macrocode}
+ \int_gzero_new:N \g_@@_static_col_int
+% \end{macrocode}
+%
+% \bigskip
+% We also have to update the position on the nesting tree.
+% \begin{macrocode}
+ \seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1
+% \end{macrocode}
+%
+% The nesting tree is used to create a prefix which will be used in the names of
+% the Tikz nodes and in the names of the arrows (each arrow is a property list
+% of six fields). If we are in the second environment |{WithArrows}| nested in
+% the third environment |{WithArrows}| of the document, the prefix will be |3-2|
+% (although the position in the tree is $[3,2,1]$ since such a position always
+% ends with a~$1$). First, we do a copy of the position-in-the-tree and then we
+% pop the last element of this copy (in order to drop the last~$1$).
+% \begin{macrocode}
+ \seq_set_eq:NN \l_tmpa_seq \g_@@_position_in_the_tree_seq
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
+ \str_clear_new:N \l_@@_prefix_str
+ \str_set:Nx \l_@@_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
+% \end{macrocode}
+%
+% \bigskip
+% We define the command |\\| to be the command |\@@_cr:| (defined below).
+% \begin{macrocode}
+ \cs_set_eq:NN \\ \@@_cr:
+ \dim_zero:N \mathsurround
+% \end{macrocode}
+%
+% \bigskip
+% These counters will be used later as variables.
+% \begin{macrocode}
+ \int_zero_new:N \l_@@_initial_int
+ \int_zero_new:N \l_@@_final_int
+ \int_zero_new:N \l_@@_arrow_int
+ \int_zero_new:N \l_@@_pos_of_arrow_int
+ \int_zero_new:N \l_@@_jump_int
+% \end{macrocode}
+%
+% \medskip
+% The counter |\l_@@_jump_int| corresponds to the option |jump|. Now, we set the
+% default value for this option.
+% \begin{macrocode}
+ \int_set:Nn \l_@@_jump_int \c_one_int
+% \end{macrocode}
+%
+% \medskip
+% The string |\l_@@_format_str| corresponds to the option |format|. Now, we set
+% the default value for this option.
+% \begin{macrocode}
+ \str_set:Nn \l_@@_format_str { rl }
+% \end{macrocode}
+%
+%
+%
+% \bigskip
+% In (the last column of) |{DispWithArrows}|, it's possible to put several
+% labels (for the same number of equation). That's why these labels will be
+% stored in a sequence |\l_@@_labels_seq|.
+% \begin{macrocode}
+%<*LaTeX>
+ \seq_clear_new:N \l_@@_labels_seq
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \bool_set_false:N \l_@@_tag_next_line_bool
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% The value corresponding to the key |interline| is put to zero before the
+% treatment of the options of the environment.\footnote{It's recalled that, by
+% design, the option |interline| of an environment doesn't apply in the nested
+% environments.}
+% \begin{macrocode}
+ \skip_zero:N \l_@@_interline_skip
+% \end{macrocode}
+%
+% \bigskip
+% The value corresponding to the key |code-before| is put to nil before the
+% treatment of the options of the environment, because, of course, we don't want
+% the code executed at the beginning of all the nested
+% environments~|{WithArrows}|. Idem for |code-after|.
+% \begin{macrocode}
+ \tl_clear_new:N \l_@@_code_before_tl
+ \tl_clear_new:N \l_@@_code_after_tl
+% \end{macrocode}
+%
+% \bigskip
+% We process the options given to the environment |{WithArrows}| or
+% |{DispWithArrows}|.
+% \begin{macrocode}
+ \str_clear_new:N \l_@@_previous_key_str
+ \bool_if:NT \l_@@_in_WithArrows_bool
+ { \keys_set:nn { WithArrows / WithArrows } { #1 } }
+ \bool_if:NT \l_@@_in_DispWithArrows_bool
+ { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
+% \end{macrocode}
+%
+% \medskip
+% Now we link the command |\Arrow| (or the corresponding command with a name
+% given by the user with the option |command-name|: that's why the following line
+% must be after the loading of the options) to the command
+% |\@@_Arrow_first_columns:| which will raise an error.
+% \begin{macrocode}
+ \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_first_columns:
+% \end{macrocode}
+% It's only in the last column of the environment that it will be linked to the
+% command |\@@_Arrow:|.
+%
+% \medskip
+% The counter |\l_@@_nb_cols_int| is the number of columns in the
+% |\halign| (excepted the column for the labels of equations in
+% |{DispWithArrows}| and excepted eventuals other columns in |{WithArrows}| allowed
+% by the option |more-columns|).
+% \begin{macrocode}
+ \int_set:Nn \l_@@_nb_cols_int { \str_count:N \l_@@_format_str }
+% \end{macrocode}
+%
+% \medskip
+% Be careful! The following counter |\g_@@_col_int| will be used for two usages:
+% \begin{itemize}
+% \item during, the construction of the preamble of the |\halign|, it will be
+% used as counter for the number of the column under construction in the
+% preamble (since the preamble is constructed backwards, |\g_@@_col_int| will go
+% decreasing from |\l_@@_nb_cols_int| to $1$) ;
+% \item once the preamble constructed, the primitive |\halign| is executed, and,
+% in each row of the |\halign|, the counter |\g_@@_col_int| will be increased
+% from column to column.
+% \end{itemize}
+%
+% \begin{macrocode}
+ \int_gset_eq:NN \g_@@_col_int \l_@@_nb_cols_int
+% \end{macrocode}
+%
+% \medskip
+% We convert the format in a sequence because we use it as a stack (with the top
+% of the stack at the end of the sequence) in the construction of the preamble.
+% \begin{macrocode}
+ \seq_clear_new:N \l_@@_format_seq
+ \seq_set_split:NnV \l_@@_format_seq { } \l_@@_format_str
+% \end{macrocode}
+%
+% \bigskip
+% If the option |footnote| or the option |footnotehyper| is used, then we
+% extract the footnotes with an environment |{savenotes}| (of the package
+% \pkg{footnote} or the package \pkg{footnotehyper}).
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:NT \g_@@_footnote_bool { \begin { savenotes } }
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% We execute the code |\l_@@_code_before_tl| of the option |code-before| of the
+% environment after the eventual |\begin{savenotes}| and, symetrically, we will
+% execute the |\l_@@_code_after_tl| before the eventual |\end{savenotes}| (we
+% have a good reason for the last point: we want to extract the footnotes of the
+% arrows executed in the |code-after|).
+% \begin{macrocode}
+ \l_@@_code_before_tl
+% \end{macrocode}
+%
+% \bigskip
+% The command |\spread@equation| is the command used by \pkg{amsmath} in the
+% beginning of an alignment to fix the interline. When used, it becomes no-op.
+% However, it's possible to use \pkg{witharrows} without \pkg{amsmath} since we
+% have redefined |\spread@equation| (if it is not defined yet).
+% \begin{macrocode}
+ \spread@equation
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%<*LaTeX>
+ \cs_set_eq:NN \notag \@@_notag:
+ \cs_set_eq:NN \nonumber \@@_nonumber:
+ \cs_set_eq:NN \tag \@@_tag
+ \cs_set_eq:NN \@@_old_label \label
+ \cs_set_eq:NN \label \@@_label:n
+ \cs_set_eq:NN \tagnextline \@@_tagnextline:
+%</LaTeX>
+ }
+% \end{macrocode}
+% This is the end of |\@@_pre_halign:n|.
+%
+% \bigskip
+% \subsubsection{The construction of the preamble of the \textbackslash halign}
+%
+% The control sequence |\@@_construct_halign:| will ``start'' the |\halign| and
+% the preamble. In fact, it constructs all the preamble excepted the end of
+% the last column (more precisely: except the part concerning the construction
+% of the left node and the right node).
+%
+% The same function |\@@_construct_halign:| will be used both for the
+% environment |{WithArrows}| and the environment |{DispWithArrows}|.
+%
+% Several important points must be noted concerning that construction of the
+% preamble.
+% \begin{itemize}
+% \item The construction of the preamble is done by reading backwards the
+% format |\l_@@_format_str| and adding the corresponding tokens in the input
+% stream of TeX. That means that the part of the preamble concerning the last
+% cell will be constructed first.
+% \item The function |\@@_construct_halign:| is recursive in order to treat
+% succesively all the letters of the preamble.
+% \item Each part of the preamble is created with a |\use:x| function. This
+% expansion of the preamble gives the ability of controlling which parts of the
+% code will be expanded during the construction of the preamble (other parts
+% will be expanded and executed only during the execution of the |\halign|).
+% \item The counter |\g_@@_col_int| is used during the loop of the construction
+% of the preamble but, it will also appears in the preamble (we could have
+% chosen two differents counters but this way saves a counter).
+% \end{itemize}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_construct_halign:
+ {
+ \seq_pop_right:NNTF \l_@@_format_seq \l_@@_type_col_str
+ {
+% \end{macrocode}
+% Here is the |\use:x| which is fundamental: it will really construct the part
+% of the preamble corresponding to a column by expanding only some parts of the
+% following code.
+% \begin{macrocode}
+ \use:x
+ {
+% \end{macrocode}
+% Before the recursive call of |\@@_construct_halign:|, we decrease the integer
+% |\g_@@_col_bool|. But, during the construction of the column which is
+% constructed first (that is to say which is the last column of the |\halign|),
+% it is \emph{not} lowered because |\int_decr:N|, which is protected, won't be
+% expanded by the |\use:x|.
+%
+% We begin the construction of a generic column.
+% \begin{macrocode}
+ \int_gdecr:N \g_@@_col_int
+ \@@_construct_halign:
+ \int_compare:nNnT \g_@@_col_int = \l_@@_nb_cols_int
+ {
+% \end{macrocode}
+% We redefine the command |\Arrow| (or the name given to the corresponding
+% command by the option |command-name|) in each cell of the last column.
+% The braces around |\l_@@_command_name_str| are mandatory because
+% |\l_@@_command_name_str| will be expanded by the |\use:x| and the command
+% |\cs_set_eq:cN| must still be efficient during the execution of the |\halign|.
+% \begin{macrocode}
+ \cs_set_eq:cN { \l_@@_command_name_str } \@@_Arrow
+%<*LaTeX>
+ \bool_if:NT \l_@@_in_DispWithArrows_bool
+ {
+% \end{macrocode}
+% The command |\@@_test_if_to_tag:| (which is protected and, thus, will not be
+% expanded during the construction of the preamble) will test, at each row,
+% whether the current row must be tagged (and the tag will be put in the very
+% last column).
+% \begin{macrocode}
+ \@@_test_if_to_tag:
+% \end{macrocode}
+% The command |\@@_set_qedhere:| will do a redefinition of |\qedhere| in each
+% cell of the last column.
+% \begin{macrocode}
+ \bool_if:NT \c_@@_amsthm_loaded_bool \@@_set_qedhere:
+ }
+%</LaTeX>
+ }
+ \str_if_eq:VnT \l_@@_type_col_str { c } \hfil
+ \str_if_eq:VnT \l_@@_type_col_str { r } \hfill
+ \int_gincr:N \g_@@_col_int
+ \int_gset:Nn \g_@@_static_col_int { \int_use:N \g_@@_col_int }
+ \c_math_toggle_token
+ {
+ { }
+ \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+ ####
+ }
+ \c_math_toggle_token
+ \int_compare:nNnTF \g_@@_col_int = \l_@@_nb_cols_int
+ { \@@_construct_nodes: }
+ {
+% \end{macrocode}
+% The following glue (|\hfil|) will be added only if we are not in the last cell
+% because, in the last cell, a glue (=skip) is added between the nodes (in
+% |\@@_construct_nodes:|).
+% \begin{macrocode}
+ \str_if_eq:VnT \l_@@_type_col_str { l } \hfil
+ \str_if_eq:VnT \l_@@_type_col_str { c } \hfil
+ \bool_if:NT \l_@@_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
+ &
+ }
+ }
+ }
+% \end{macrocode}
+% Now the tokens that will be inserted after the analyze of all the tokens of
+% the format: here is the token |\halign|.
+% \begin{macrocode}
+ {
+ \bool_if:NTF \l_@@_in_WithArrows_bool
+ {
+ \ialign
+ \bgroup
+ }
+ {
+ \halign to \l_@@_linewidth_dim
+ \bgroup
+ \bool_if:NT \l_@@_fleqn_bool
+ { \skip_horizontal:N \l_@@_mathindent_dim }
+ }
+ \int_gincr:N \g_@@_line_int
+ \int_gzero:N \g_@@_col_int
+ \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
+ {
+ \skip_horizontal:n
+ { \box_wd:N \l_@@_left_brace_box + \l_@@_delim_wd_dim }
+ }
+ \strut
+ }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The command |\@@_construct_nodes:| is only for the lisibility of the code
+% because, in fact, it is used only once. It constructs the ``left node'' and
+% the ``right node'' at the end of each row of the arrow.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_construct_nodes:
+ {
+% \end{macrocode}
+% We create the ``left node'' of the line (when using macros in Tikz node names,
+% the macros have to be fully expandable: here, |\int_use:N| is fully
+% expandable).
+% \begin{macrocode}
+ \tikz [ remember~picture , overlay ]
+ \node
+ [
+ node~contents = { } ,
+ @@_node_style ,
+ name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - l ,
+ alias =
+ {
+ \str_if_empty:NF \l_@@_name_str
+ { \l_@@_name_str - \int_use:N \g_@@_line_int - l }
+ }
+ ]
+ ;
+ \hfil
+% \end{macrocode}
+%
+% \bigskip
+% Now, after the |\hfil|, we create the ``right node'' and, if the option
+% |show-node-names| is raised, the name of the node is written in the document
+% (useful for debugging).
+% \begin{macrocode}
+ \tikz [ remember~picture , overlay ]
+ \node
+ [
+ node~contents = { } ,
+ @@_node_style ,
+ name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r ,
+ alias =
+ {
+ \str_if_empty:NF \l_@@_name_str
+ { \l_@@_name_str - \int_use:N \g_@@_line_int - r }
+ }
+ ]
+ ;
+ \bool_if:NT \l_@@_show_node_names_bool
+ {
+ \hbox_overlap_right:n
+ { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \bigskip
+% \subsubsection{The environment \{WithArrows\}}
+%
+%
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentEnvironment { WithArrows } { ! O { } }
+%</LaTeX>
+%<*plain-TeX>
+\cs_new_protected:Npn \WithArrows
+ {
+ \group_begin:
+ \peek_meaning:NTF [
+ { \WithArrows_i }
+ { \WithArrows_i [ ] }
+ }
+\cs_new_protected:Npn \WithArrows_i [ #1 ]
+%</plain-TeX>
+ {
+ \bool_set_true:N \l_@@_in_WithArrows_bool
+ \bool_set_false:N \l_@@_in_DispWithArrows_bool
+%<*plain-TeX>
+ \str_clear_new:N \l_@@_type_env_str
+ \str_set:Nn \l_@@_type_env_str { WithArrows }
+%</plain-TeX>
+ \@@_pre_halign:n { #1 }
+ \if_mode_math: \else:
+ \@@_error:n { WithArrows~outside~math~mode }
+ \fi:
+% \end{macrocode}
+%
+% \bigskip
+% The environment begins with a |\vtop|, a |\vcenter| or a
+% |\vbox|\footnote{Notice that the use of |\vtop| seems color-safe here...}
+% depending of the value of |\l_@@_pos_env_int| (fixed by the options |t|, |c|
+% or |b|). The environment |{WithArrows}| must be used in math mode\footnote{An
+% error is raised if the environment is used outside math mode.} and therefore,
+% we can use |\vcenter|.
+% \begin{macrocode}
+ \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
+ \bgroup
+% \end{macrocode}
+%
+% \bigskip
+% We begin the |\halign| and the preamble. During the construction of the
+% preamble, |\l_tmpa_int| will be incremented during each column constructed.
+% \begin{macrocode}
+ \@@_construct_halign:
+% \end{macrocode}
+%
+%
+% \medskip
+% In fact, the construction of the preamble is not finished. We add a little more.
+%
+% \medskip
+% An environmemnt |{WithArrows}| should have a number of columns equal to the
+% length of its format (by default, 2 since the default format is |rl|).
+% Nevertheless, if the user wants to use more columns (without arrows)
+% it's possible with the option |more-columns|.
+% \begin{macrocode}
+ &&
+ \@@_error:n { Too~much~columns~in~WithArrows }
+ \c_math_toggle_token
+ \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+ { ## }
+ \c_math_toggle_token
+ \cr
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% We begin the second part of the environment |{WithArrows}|. We have two
+% |\egroup|\,: one for the |\halign| and one for the |\vtop| (or |\vcenter| or
+% |\vbox|).
+% \begin{macrocode}
+%<*plain-TeX>
+\cs_new_protected:Npn \endWithArrows
+%</plain-TeX>
+ {
+ \\
+ \egroup
+ \egroup
+ \@@_post_halign:
+% \end{macrocode}
+%
+% \bigskip
+% If the option |footnote| or the option |footnotehyper| is used, then we
+% extract the footnotes with an environment |{footnote}| (of the package
+% \pkg{footnote} or the package \pkg{footnotehyper}).
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:NT \g_@@_footnote_bool { \end { savenotes } }
+%</LaTeX>
+%<*plain-TeX>
+ \group_end:
+%</plain-TeX>
+ }
+% \end{macrocode}
+% This is the end of the environment |{WithArrows}|.
+%
+%
+% \bigskip
+% \subsubsection{After the construction of the \textbackslash halign}
+%
+% The command |\@@_post_halign:| is a code common to the second part of the
+% environment |{WithArrows}| and the environment |{DispWithArrows}|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_post_halign:
+% \end{macrocode}
+%
+% \bigskip
+% The command |\WithArrowsRightX| is not used by \pkg{witharrows}. It's only a
+% convenience given to the user.
+% \begin{macrocode}
+ {
+ \cs_set:Npn \WithArrowsRightX { \g_@@_right_x_dim }
+% \end{macrocode}
+%
+% \bigskip
+% It there is really arrows in the environment, we draw the arrows.
+% \begin{macrocode}
+ \int_compare:nNnT \g_@@_arrow_int > 0 \@@_scan_arrows:
+% \end{macrocode}
+%
+% \bigskip
+% We will execute the code specified in the option |code-after|, after some
+% settings.
+% \begin{macrocode}
+ \group_begin:
+ \tikzset { every~picture / .style = @@_standard }
+% \end{macrocode}
+% The command |\WithArrowsNbLines| is not used by \pkg{witharrows}. It's only a
+% convenience given to the user.
+% \begin{macrocode}
+ \cs_set:Npn \WithArrowsNbLines { \int_use:N \g_@@_line_int }
+% \end{macrocode}
+% The command |\MultiArrow| is available in |code-after|, and we have a special
+% version of |\Arrow|, called ``|\Arrow| in |code-after|'' in the
+% documentation.\footnote{As for now, |\MultiArrow| has no option, and that's
+% why its internal name is a name of \pkg{expl3} with the signature |:nn|
+% whereas |\Arrow| in |code-after| provides options and has the name of a
+% function defined with |\NewDocumentCommand|.}
+% \begin{macrocode}
+ \cs_set_eq:NN \MultiArrow \@@_MultiArrow:nn
+ \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_code_after
+ \bool_set_true:N \l_@@_in_code_after_bool
+ \l_@@_code_after_tl
+ \group_end:
+% \end{macrocode}
+%
+% \bigskip
+% We update the position-in-the-tree. First, we drop the last component and then
+% we increment the last element.
+% \begin{macrocode}
+ \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl
+ \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl
+ \seq_gput_right:Nx \g_@@_position_in_the_tree_seq
+ { \int_eval:n { \l_tmpa_tl + 1 } }
+% \end{macrocode}
+%
+% \bigskip
+% We update the value of the counter |\g_@@_last_env_int|. This counter is used
+% only by the user function |\WithArrowsLastEnv|.
+% \begin{macrocode}
+ \int_compare:nNnT { \seq_count:N \g_@@_position_in_the_tree_seq } = 1
+ { \int_gincr:N \g_@@_last_env_int }
+% \end{macrocode}
+%
+% \bigskip
+% Finally, we restore the previous values of the counters |\g_@@_arrow_int|,
+% |\g_@@_line_int| and |\g_@@_col_int|. It is recalled that we manage three
+% stacks in order to be able to do such a restoration.
+% \begin{macrocode}
+ \seq_gpop_right:NN \g_@@_arrow_int_seq \l_tmpa_tl
+ \int_gset:Nn \g_@@_arrow_int \l_tmpa_tl
+ \seq_gpop_right:NN \g_@@_line_int_seq \l_tmpa_tl
+ \int_gset:Nn \g_@@_line_int \l_tmpa_tl
+ \seq_gpop_right:NN \g_@@_col_int_seq \l_tmpa_tl
+ \int_gset:Nn \g_@@_col_int \l_tmpa_tl
+ }
+% \end{macrocode}
+% That's the end of the command |\@@_post_halign:|.
+%
+% \bigskip
+% \subsubsection{The command of end of row}
+%
+% We give now the definition of |\@@_cr:| which is the definition of |\\| in an
+% environment |{WithArrows}|. The two \pkg{expl3} commands
+% |\group_align_safe_begin:| and |\group_align_safe_end:| are specifically
+% designed for this purpose: test the token that follows in an |\halign|
+% structure.
+%
+% First, we remove an eventual token |*| (just after the |\\|: there should not
+% be space between the two) since the commands |\\| and |\\*| are equivalent in
+% an environment |{WithArrows}| (an environment |{WithArrows}|, like an
+% environment |{aligned}| of \pkg{amsmath}, is always unbreakable).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_cr:
+ {
+ \scan_stop:
+% \end{macrocode}
+% We try to detect some |\omit| (as of now, an |\omit| in the last column is
+% not detected).
+% \begin{macrocode}
+ \int_compare:nNnF \g_@@_col_int = \g_@@_static_col_int
+ { \@@_error:n { omit~probably~used } }
+ \prg_replicate:nn { \l_@@_nb_cols_int - \g_@@_static_col_int } { & { } }
+ \group_align_safe_begin:
+ \peek_meaning_remove:NTF * \@@_cr_i: \@@_cr_i:
+ }
+% \end{macrocode}
+%
+% \medskip
+% Then, we peek the next token to see if it's a |[|. In this case, the command
+% |\\| has an optional argument which is the vertical skip (=glue) to put.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_cr_i:
+ { \peek_meaning:NTF [ \@@_cr_ii: { \@@_cr_ii: [ \c_zero_dim ] } }
+% \end{macrocode}
+%
+% \bigskip
+% Now, we test if the next token is the token |\end|. Indeed, we want to test if
+% the following tokens are |\end{WithArrows}| (or |\end{DispWithArrows}|, etc).
+% In this case, we raise an error because the user must not put "\\" at the end
+% of its alignment.
+% \begin{macrocode}
+%<*LaTeX>
+\cs_new_protected:Npn \@@_cr_ii: [ #1 ]
+ {
+ \peek_meaning_ignore_spaces:NTF \end
+ {
+ \@@_cr_iii:n { #1 }
+% \end{macrocode}
+% The analyse of the argument of the token |\end| must be after the
+% |\group_align_safe_end:| which is the beginning of |\@@_cr_iii:n|.
+% \begin{macrocode}
+ \@@_analyze_end:Nn
+ }
+ { \@@_cr_iii:n { #1 } }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_cr_iii:n #1
+%</LaTeX>
+%<*plain-TeX>
+\cs_new_protected:Npn \@@_cr_ii: [ #1 ]
+%</plain-TeX>
+ {
+ \group_align_safe_end:
+% \end{macrocode}
+% For the environment |{DispWithArrows}|, the behaviour of |\\| is different
+% because we add the last column which is the column for the tag (number of the
+% equation). Even if there is no tag, this column is used for the
+% |v|-nodes.\footnote{The |v|-nodes are used to compute the abscissa of the
+% right margin, used by the option |wrap-lines|.}
+% \begin{macrocode}
+ \bool_if:NT \l_@@_in_DispWithArrows_bool
+% \end{macrocode}
+% At this stage, we know that we have a tag to put if (and only if) the value of
+% |\l_@@_tags_clist| is the comma list |all| (only one element). Maybe,
+% previously, the value of |\l_@@_tags_clist| was, for example, |1,last| (which
+% means that only the first line and the last line must be tagged). However, in
+% this case, the comparison with the number of line has be done before and, now,
+% if we are in a line to tag, the value of |\l_@@_tags_clist| is |all|.
+% \begin{macrocode}
+ {
+%<*LaTeX>
+ \clist_if_in:NnTF \l_@@_tags_clist { all }
+ {
+% \end{macrocode}
+% Here, we can't use |\refstepcounter{equation}| because if the user has issued
+% a |\tag| command, we have to use |\l_@@_tag_tl| and not |\theequation|. That's
+% why we have to do the job done by |\refstepcounter| manually.
+%
+% First, the incrementation of the counter (potentially).
+% \begin{macrocode}
+ \tl_if_empty:NT \l_@@_tag_tl { \int_gincr:N \c@equation }
+% \end{macrocode}
+%
+% We store in |\g_tmpa_tl| the tag we will have to compose at the end of the
+% line. We use a global variable because we will use it in the \emph{next} cell
+% (after the |&|).
+% \begin{macrocode}
+ \cs_gset:Npx \g_tmpa_tl
+ { \tl_if_empty:NTF \l_@@_tag_tl \theequation \l_@@_tag_tl }
+% \end{macrocode}
+% It's possible to put several labels for the same line (it's not possible in
+% the environments of \pkg{amsmath}). That's why the differents labels of a same
+% line are stored in a sequence |\l_@@_labels_seq|.
+% \begin{macrocode}
+ \seq_if_empty:NF \l_@@_labels_seq
+ {
+% \end{macrocode}
+% Now, we do the job done by |\refstepcounter| and by the redefinitions of
+% |\refstepcounter| done by some packages (the incrementation of the counter has
+% been done yet).
+%
+% First an action which is in the definition of |\refstepcounter|. The command
+% |\p@equation| is redefined by some extensions like \pkg{fncylab}.
+% \begin{macrocode}
+ \cs_set:Npx \@currentlabel { \p@equation \g_tmpa_tl }
+% \end{macrocode}
+% Then, an action done by \pkg{hyperref} in its redefinition of
+% |\refstepcounter|.
+% \begin{macrocode}
+ \bool_if:NT \c_@@_hyperref_loaded_bool
+ {
+ \str_set:Nn \This@name { equation }
+ \hyper@refstepcounter { equation }
+ }
+% \end{macrocode}
+% Then, an action done by \pkg{cleveref} in its redefinition of
+% |\refstepcounter|. The package \pkg{cleveref} creates in the |aux| file a
+% command |\cref@currentlabel| similar to |\@currentlabel| but with more
+% informations.
+% \begin{macrocode}
+ \bool_if:NT \c_@@_cleveref_loaded_bool
+ {
+ \cref@constructprefix { equation } \cref@result
+ \protected@edef \cref@currentlabel
+ {
+ [
+ \cs_if_exist:NTF \cref@equation@alias
+ \cref@equation@alias
+ { equation }
+ ]
+ [ \arabic { equation } ] [ \cref@result ]
+ \p@equation \g_tmpa_tl
+ }
+ }
+% \end{macrocode}
+% Now, we can issue the command |\label| (some packages may have redefined
+% |\label|, for example \pkg{typedref}) for each item in the sequence of the
+% labels (it's possible with \pkg{witharrows} to put several labels to the same
+% line and that's why the labels are in the sequence |\l_@@_labels_seq|).
+% \begin{macrocode}
+ \seq_map_function:NN \l_@@_labels_seq \@@_old_label
+ }
+% \end{macrocode}
+% We save the booleans |\l_@@_tag_star_bool| and |\l_@@_qedhere_bool| because
+% they will be used in the \emph{next} cell (after the |&|). We recall that the
+% cells of a |\halign| are TeX groups.
+% \begin{macrocode}
+ \@@_save:N \l_@@_tag_star_bool
+ \@@_save:N \l_@@_qedhere_bool
+ \bool_if:NT \l_@@_tag_next_line_bool
+ {
+ \openup -\jot
+ \bool_set_false:N \l_@@_tag_next_line_bool
+ \notag \\ &
+ }
+ &
+ \@@_restore:N \l_@@_tag_star_bool
+ \@@_restore:N \l_@@_qedhere_bool
+ \bool_if:NT \l_@@_qedhere_bool
+ { \hbox_overlap_left:n \@@_qedhere_i: }
+ \cs_set_eq:NN \theequation \g_tmpa_tl
+ \bool_if:NT \l_@@_tag_star_bool
+ { \cs_set_eq:NN \tagform@ \prg_do_nothing: }
+% \end{macrocode}
+% We use |\@eqnnum| (we recall that there are two definitions of |\@eqnnum|, a
+% standard definition and another, loaded if the class option |leqno| is used).
+% However, of course, the position of the |v|-node is not the same whether the
+% option |leqno| is used or not. That's here that we use the flag
+% |\c_@@_leqno_bool|.
+% \begin{macrocode}
+ \hbox_overlap_left:n
+ {
+ \bool_if:NF \c_@@_leqno_bool
+ {
+ \tikz [ @@_standard ]
+ \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+ }
+ \quad
+ \@eqnnum
+ }
+ \bool_if:NT \c_@@_leqno_bool
+ {
+ \tikz [ @@_standard ]
+ \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+ }
+ }
+ {
+ \@@_save:N \l_@@_qedhere_bool
+%</LaTeX>
+ &
+%<*LaTeX>
+ \@@_restore:N \l_@@_qedhere_bool
+ \bool_if:NT \l_@@_qedhere_bool
+ { \hbox_overlap_left:n \@@_qedhere_i: }
+%</LaTeX>
+ \tikz [ @@_standard ]
+ \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+%<*LaTeX>
+ }
+%</LaTeX>
+ }
+ \dim_compare:nNnT { #1 } < \c_zero_dim
+ { \@@_error:n { option~of~cr~negative } }
+
+ \cr
+ \noalign
+ {
+ \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
+ \skip_vertical:n { \l_tmpa_dim + \l_@@_interline_skip }
+ \scan_stop:
+ }
+ }
+% \end{macrocode}
+% According to the documentation of \pkg{expl3}, the previous addition in
+% ``|#1 + \l_@@_interline_skip|'' is really an addition of skips (=glues).
+%
+%
+% The following command will be used when, after a |\\| (and its optional
+% arguments) there is a |\end|. You want to known if this is the end of the
+% environment |{WithArrows}| (or |{DispWithArrows}|, etc.) because, in this
+% case, we will explain that the environment must not be ended by |\\|. If it is
+% not the case, that means it's a classical situation of LaTeX environments not
+% correctly imbricated and there will be a LaTeX error.
+% \begin{macrocode}
+%<*LaTeX>
+\cs_new_protected:Npn \@@_analyze_end:Nn #1 #2
+ {
+ \exp_args:NV \str_if_eq:nnT \l_@@_type_env_str { #2 }
+ { \@@_warning:n { newline~at~the~end~of~env } }
+% \end{macrocode}
+% We reput in the stream the |\end{...}| we have extracted.
+% \begin{macrocode}
+ \end { #2 }
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+% \bigskip
+% \subsubsection{The environment \{DispWithArrows\}}
+%
+% For the environment |{DispWithArrows}|, the general form of the construction
+% is of the type:
+%
+% |\[\vtop{\halign to \displaywidth {...}}\]|
+%
+% The purpose of the |\vtop| is to have an environment unbreakable.
+%
+% However, if we are juste after an item of a LaTeX list or at the beginning of
+% a |{minipage}|, the construction is slightly different:
+%
+% |\[\vtop{\halign to \linewidth {...}}\]|
+%
+%
+% \bigskip
+% The boolean |\l_@@_in_label_or_minipage_bool| will be raised if we are just after a |\item|
+% of a list of LaTeX or at the beginning of a |{minipage}|.
+% \begin{macrocode}
+%<*LaTeX>
+\bool_new:N \l_@@_in_label_or_minipage_bool
+%</LaTeX>
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentEnvironment { DispWithArrows } { ! d < > ! O { } }
+%</LaTeX>
+%<*plain-TeX>
+\cs_new_protected:Npn \DispWithArrows
+ {
+ \group_begin:
+ \peek_meaning:NTF <
+ { \DispWithArrows_i }
+ { \DispWithArrows_i < \c_novalue_tl > }
+ }
+\cs_new_protected:Npn \DispWithArrows_i < #1 >
+ {
+ \peek_meaning:NTF [
+ { \DispWithArrows_ii < #1 > }
+ { \DispWithArrows_ii < #1 > [ ] }
+ }
+\cs_new_protected:Npn \DispWithArrows_ii < #1 > [ #2 ]
+%</plain-TeX>
+ {
+ \bool_set_true:N \l_@@_in_DispWithArrows_bool
+%<*plain-TeX>
+ \str_clear_new:N \l_@@_type_env_str
+ \str_set:Nn \l_@@_type_env_str { DispWithArrows }
+%</plain-TeX>
+% \end{macrocode}
+% If \pkg{mathtools} has been loaded with the option |showonlyrefs|, we disable
+% the code of \pkg{mathtools} for the option |showonlyrefs| with the command
+% |\MT_showonlyrefs_false:| (it will be reactivated at the end of the
+% environment).
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:nT \c_@@_mathtools_loaded_bool
+ {
+ \MH_if_boolean:nT { show_only_refs }
+ {
+ \MT_showonlyrefs_false:
+% \end{macrocode}
+% However, we have to re-raise the flag |{show_only_refs}| of \pkg{mhsetup}
+% because it has been switched off by |\MT_showonlyrefs_false:| and we will use
+% it in the code of the new version of |\label|.
+% \begin{macrocode}
+ \MH_set_boolean_T:n { show_only_refs }
+ }
+ }
+% \end{macrocode}
+%
+% An action done by \pkg{typedref} in its redefinition of |\refstepcounter|. The
+% command |\sr@name| is a prefix added to the name of the label by the
+% redefinition of |\label| done by \pkg{typedref}.
+% \begin{macrocode}
+ \bool_if:NT \c_@@_typedref_loaded_bool { \str_set:Nn \sr@name { equation } }
+% \end{macrocode}
+%
+% The command |\intertext@| is a command of \pkg{amsmath} which loads the
+% definition of |\intertext|.
+% \begin{macrocode}
+ \bool_if:NT \c_@@_amsmath_loaded_bool \intertext@
+%</LaTeX>
+ \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l_@@_left_brace_tl { #1 } }
+ \@@_pre_halign:n { #2 }
+% \end{macrocode}
+%
+% If |subequations| is used, we encapsulate the environment in an
+% environment |{subequations}| of \pkg{amsmath}.
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:NT \l_@@_subequations_bool { \begin { subequations } }
+%</LaTeX>
+% \end{macrocode}
+% Since the version 1.16 of \pkg{witharrows}, no space is added between an
+% |\item| of a LaTeX list and an environment |{DispWithArrows}| except with the
+% option |standard-behaviour-with-items| stored in the boolean
+% |\l_@@_sbwi_bool|. We have to know if we are just after an |\item| and this
+% information will be stored in |\l_@@_in_label_or_minipage_bool|.
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:NF \l_@@_sbwi_bool
+ {
+ \if@inlabel
+ \bool_set_true:N \l_@@_in_label_or_minipage_bool
+ \fi
+ \if@minipage
+ \bool_set_true:N \l_@@_in_label_or_minipage_bool
+ \fi
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+ \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
+ {
+% \end{macrocode}
+% We compute the value of the width of the left delimiter.
+% \begin{macrocode}
+ \hbox_set:Nn \l_tmpa_box
+ {
+% \end{macrocode}
+% Even if the default value of |\nulldelimiterspace| is 1.2~pt, we take it into account.
+% \begin{macrocode}
+ \group_begin:
+ \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
+ \c_math_toggle_token
+ \left \l_@@_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
+ \c_math_toggle_token
+ \group_end:
+ }
+ \dim_zero_new:N \l_@@_delim_wd_dim
+ \dim_set:Nn \l_@@_delim_wd_dim { \box_wd:N \l_tmpa_box }
+ \box_clear_new:N \l_@@_left_brace_box
+ \hbox_set:Nn \l_@@_left_brace_box
+ {
+ \group_begin:
+ \cs_set_eq:NN \label \@@_old_label
+ \c_math_toggle_token
+ \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+ \l_@@_left_brace_tl
+ { }
+ \c_math_toggle_token
+ \group_end:
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The token list |\l_@@_tag_tl| will contain the argument of the command |\tag|.
+% \begin{macrocode}
+%<*LaTeX>
+ \tl_clear_new:N \l_@@_tag_tl
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+ \bool_set_false:N \l_@@_qedhere_bool
+% \end{macrocode}
+%
+% \bigskip
+% The boolean |\l_@@_tag_star_bool| will be raised if the user uses the command
+% |\tag| with a star.
+% \begin{macrocode}
+ \bool_set_false:N \l_@@_tag_star_bool
+%</LaTeX>
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \if_mode_math:
+ \@@_fatal:n { DispWithArrows~in~math~mode }
+ \fi:
+% \end{macrocode}
+%
+% \bigskip
+% The construction is not exactly the same whether we are just after an |\item|
+% of a LaTeX list or not. We know if we are after an |\item| thanks to the
+% boolean |\l_@@_in_label_or_minipage_bool|.
+% \begin{macrocode}
+%<*plain-TeX>
+ \dim_zero_new:N \linewidth
+ \dim_set_eq:NN \linewidth \displaywidth
+%</plain-TeX>
+%<*LaTeX>
+ \bool_if:NTF \l_@@_in_label_or_minipage_bool
+ { \c_math_toggle_token }
+ {
+%</LaTeX>
+% \end{macrocode}
+% We don't use |\[| of LaTeX because some extensions, like \pkg{autonum}, do a
+% redefinition of |\[|. However, we put the following lines which are in the
+% definition of |\[| even though they are in case of misuse.
+% \begin{macrocode}
+ \if_mode_vertical:
+ \nointerlineskip
+ \hbox_to_wd:nn { .6 \linewidth } { }
+ \fi:
+ \c_math_toggle_token \c_math_toggle_token
+%<*LaTeX>
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \dim_zero_new:N \l_@@_linewidth_dim
+%<*LaTeX>
+ \bool_if:NTF \l_@@_in_label_or_minipage_bool
+ { \dim_set_eq:NN \l_@@_linewidth_dim \linewidth }
+ { \dim_set_eq:NN \l_@@_linewidth_dim \displaywidth }
+%</LaTeX>
+%<*plain-TeX>
+ \dim_set_eq:NN \l_@@_linewidth_dim \displaywidth
+%</plain-TeX>
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+ \box_clear_new:N \l_@@_halign_box
+ \setbox \l_@@_halign_box \vtop \bgroup
+ \tabskip =
+ \bool_if:NTF \l_@@_fleqn_bool
+ \c_zero_skip
+ { 0 pt plus 1000 pt minus 1000 pt }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+ \@@_construct_halign:
+ \tabskip = 0 pt plus 1000 pt minus 1000 pt
+ &
+% \end{macrocode}
+%
+% If the user tries to use more columns than the length of the format, we have to
+% raise an error. However, the error won't be in the next column which is the
+% columns for the labels of the equations. The error will be after... and it
+% must be after. That means that we must not have an error in the next column
+% simply because we are not in math mode. That's why this column, even if it is
+% for the labels, is in math mode.
+% \begin{macrocode}
+ $ ## $
+ \tabskip = \c_zero_skip
+ &&
+ \@@_fatal:n { Too~much~columns~in~DispWithArrows }
+ \bool_if:nT \c_false_bool { ## }
+ \cr
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We begin the second part of the environment |{DispWithArrows}|.
+% \begin{macrocode}
+%<*plain-TeX>
+\cs_new_protected:Npn \endDispWithArrows
+%</plain-TeX>
+ {
+%<*LaTeX>
+ \clist_if_in:NnT \l_@@_tags_clist { last }
+ { \clist_set:Nn \l_@@_tags_clist { all } }
+%</LaTeX>
+ \\
+% \end{macrocode}
+% The following |\egroup| is for the |\halign|.
+% \begin{macrocode}
+ \egroup
+ \unskip \unpenalty \unskip \unpenalty
+ \box_set_to_last:N \l_tmpa_box
+ \nointerlineskip
+ \box_use:N \l_tmpa_box
+ \dim_gzero_new:N \g_@@_alignment_dim
+ \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_tmpa_box }
+ \box_clear_new:N \l_@@_new_box
+ \hbox_set:Nn \l_@@_new_box { \hbox_unpack_clear:N \l_tmpa_box }
+ \dim_compare:nNnT
+ { \box_wd:N \l_@@_new_box } < \g_@@_alignment_dim
+ { \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_@@_new_box } }
+% \end{macrocode}
+% The |\egroup| is for the box |\l_@@_halign_box|.
+% \begin{macrocode}
+ \egroup
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \tl_if_eq:NNTF \l_@@_left_brace_tl \c_novalue_tl
+ { \box_use_drop:N \l_@@_halign_box }
+ {
+ \hbox_to_wd:nn \l_@@_linewidth_dim
+ {
+ \bool_if:NTF \l_@@_fleqn_bool
+ { \skip_horizontal:n \l_@@_mathindent_dim }
+ \hfil
+ \hbox_to_wd:nn \g_@@_alignment_dim
+ {
+ \box_use_drop:N \l_@@_left_brace_box
+ \dim_set:Nn \l_tmpa_dim
+ {
+ \box_ht:N \l_@@_halign_box
+ + \box_dp:N \l_@@_halign_box
+ }
+ \group_begin:
+ \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
+ \c_math_toggle_token
+ \left \l_@@_replace_left_brace_by_tl
+ \vcenter to \l_tmpa_dim { \vfil }
+ \right.
+ \c_math_toggle_token
+ \group_end:
+ \hfil
+ }
+ \hfil
+ }
+ \skip_horizontal:n { - \l_@@_linewidth_dim }
+ \vcenter { \box_use_drop:N \l_@@_halign_box }
+ }
+% \end{macrocode}
+%
+% We compute the dimension |\g_@@_right_x_dim|. As a first approximation,
+% |\g_@@_right_x_dim| is the $x$-value of the right side of the current
+% composition box. In fact, we must take into account the potential labels of
+% the equations. That's why we compute |\g_@@_right_x_dim| with the |v|-nodes of
+% each row specifically built in this goal. |\g_@@_right_x_dim| is the minimal
+% value of the $x$-value of these nodes.
+% \begin{macrocode}
+ \dim_gzero_new:N \g_@@_right_x_dim
+ \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim
+%<*LaTeX>
+ \begin { tikzpicture } [ @@_standard ]
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture [ @@_standard ]
+%</plain-TeX>
+ \int_step_variable:nNn \g_@@_line_int \l_tmpa_int
+ {
+ \cs_if_free:cTF
+ { pgf@sh@ns@wa - \l_@@_prefix_str - \l_tmpa_int - v }
+ { \@@_fatal:n { Inexistent~v-node } }
+ {
+ \tikz@parse@node\pgfutil@firstofone ( \l_tmpa_int - v )
+ \dim_set:Nn \l_tmpa_dim \pgf@x
+ \dim_compare:nNnT \l_tmpa_dim < \g_@@_right_x_dim
+ { \dim_gset:Nn \g_@@_right_x_dim \l_tmpa_dim }
+ }
+ }
+%<*LaTeX>
+ \end { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+% \end{macrocode}
+%
+%
+% \bigskip
+% The code in |\@@_post_halign:| is common to |{WithArrows}| and
+% |{DispWithArrows}|.
+% \begin{macrocode}
+ \@@_post_halign:
+% \end{macrocode}
+% If \pkg{mathtools} has been loaded with the option |showonlyrefs|, we
+% reactivate the code of \pkg{mathtools} for the option |showonlyrefs| with the
+% command |\MT_showonlyrefs_true:| (it has been deactivated in the beginning of
+% the environment).
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:nT \c_@@_mathtools_loaded_bool
+ { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: }
+ \bool_if:NTF \l_@@_in_label_or_minipage_bool
+ {
+ \c_math_toggle_token
+ \skip_vertical:N \belowdisplayskip
+ }
+ { \c_math_toggle_token \c_math_toggle_token }
+%</LaTeX>
+%<*plain-TeX>
+ \c_math_toggle_token \c_math_toggle_token
+%</plain-TeX>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*LaTeX>
+ \bool_if:NT \l_@@_subequations_bool { \end { subequations } }
+% \end{macrocode}
+%
+% \bigskip
+% If the option |footnote| or the option |footnotehyper| is used, then we
+% extract the footnotes with an environment |{savenotes}| (of the package
+% \pkg{footnote} or the package \pkg{footnotehyper}).
+% \begin{macrocode}
+ \bool_if:NT \g_@@_footnote_bool { \end { savenotes } }
+%</LaTeX>
+%<*plain-TeX>
+ \group_end:
+%</plain-TeX>
+%<*LaTeX>
+ \ignorespacesafterend
+%</LaTeX>
+ }
+% \end{macrocode}
+%
+% \bigskip
+% With the environment |{DispWithArrows*}|, the equations are not numbered. We
+% don't put |\begin{DispWithArrows}| and |\end{DispWithArrows}| because there is
+% a |\@currenvir| in some error messages.
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentEnvironment { DispWithArrows* } { }
+ {
+ \WithArrowsOptions { notag }
+ \DispWithArrows
+ }
+ \endDispWithArrows
+%</LaTeX>
+% \end{macrocode}
+%
+%
+% \bigskip
+% \subsection{The commands \textbackslash tag, \textbackslash notag,
+% \textbackslash label, \textbackslash tagnextline and \textbackslash qedhere for
+% \{DispWithArrows\}}
+%
+% Some commands are allowed only in the last column of the environment
+% |{DispWithArrows}|. We write a command |\@@_if_in_last_col_of_disp:Nn| to
+% execute this command only if we are in the last column. If we are in
+% another column, an error is raised. The first argument of
+% |\@@_if_in_last_col_of_disp:Nn| is the name of the command used in the error
+% message and the second is the code to execute.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_if_in_last_col_of_disp:Nn #1 #2
+ {
+ \bool_if:NTF \l_@@_in_WithArrows_bool
+ { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } }
+ {
+ \int_compare:nNnTF \g_@@_col_int < \l_@@_nb_cols_int
+ { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
+ { #2 }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_notag:| will be linked to the command |\notag| and also to
+% in the environments |{WithArrows}| and |{DispWithArrows}|.
+% \begin{macrocode}
+%<*LaTeX>
+\cs_new_protected:Npn \@@_notag:
+ { \@@_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l_@@_tags_clist } }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_nonumber:| will be linked to the command |\nonumber| and also to
+% in the environments |{WithArrows}| and |{DispWithArrows}|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_nonumber:
+ { \@@_if_in_last_col_of_disp:Nn \nonumber { \clist_clear:N \l_@@_tags_clist } }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_tag| will be linked to |\tag| in |{WithArrows}| and
+% |{DispWithArrows}|. We do the definition with |\NewDocumentCommand| because this
+% command has a starred version.
+% \begin{macrocode}
+\NewDocumentCommand \@@_tag { s m }
+ {
+ \@@_if_in_last_col_of_disp:Nn \tag
+ {
+ \tl_if_empty:NF \l_@@_tag_tl
+ { \@@_error:nn { Multiple~tags } { #2 } }
+ \clist_set:Nn \l_@@_tags_clist { all }
+ \bool_if:nT \c_@@_mathtools_loaded_bool
+ {
+ \MH_if_boolean:nT { show_only_refs }
+ {
+ \MH_if_boolean:nF { show_manual_tags }
+ { \clist_clear:N \l_@@_tags_clist }
+ }
+ }
+ \tl_set:Nn \l_@@_tag_tl { #2 }
+ \bool_set:Nn \l_@@_tag_star_bool { #1 }
+% \end{macrocode}
+% The starred version |\tag*| can't be used if \pkg{amsmath} has not been loaded
+% because this version does the job by deactivating the command |\tagform@|
+% inserted by \pkg{amsmath} in the (two versions of the) command
+% |\@eqnnum|.\footnote{There are two versions of |@eqnnum|, a standard version
+% and a version for the option |leqno|.}
+% \begin{macrocode}
+ \bool_if:nT { #1 && ! \bool_if_p:N \c_@@_amsmath_loaded_bool }
+ { \@@_error:n { tag*~without~amsmath } }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_label:n| will be linked to |\label| in the environments
+% |{WithArrows}| and |{DispWithArrows}|. In these environments, it's possible to
+% put several labels for the same line (it's not possible in the environments of
+% \pkg{amsmath}). That's why we store the differents labels of a same line in a
+% sequence |\l_@@_labels_seq|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_label:n #1
+ {
+ \@@_if_in_last_col_of_disp:Nn \label
+ {
+ \seq_if_empty:NF \l_@@_labels_seq
+ {
+ \bool_if:NTF \c_@@_cleveref_loaded_bool
+ { \@@_error:n { Multiple~labels~with~cleveref } }
+ { \@@_error:n { Multiple~labels } }
+ }
+ \seq_put_right:Nn \l_@@_labels_seq { #1 }
+ \bool_if:nT \c_@@_mathtools_loaded_bool
+ {
+ \MH_if_boolean:nT { show_only_refs }
+ {
+ \cs_if_exist:cTF { MT_r_#1 }
+ { \clist_set:Nn \l_@@_tags_clist { all } }
+ { \clist_clear:N \l_@@_tags_clist }
+ }
+ }
+ \bool_if:nT \c_@@_autonum_loaded_bool
+ {
+ \cs_if_exist:cTF { autonum@#1Referenced }
+ { \clist_set:Nn \l_@@_tags_clist { all } }
+ { \clist_clear:N \l_@@_tags_clist }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_tagnextline:| will be linked to |\tagnextline| in
+% |{DispWithArrows}|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_tagnextline:
+ {
+ \@@_if_in_last_col_of_disp:Nn \tagnextline
+ { \bool_set_true:N \l_@@_tag_next_line_bool }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The environments |{DispWithArrows}| and |{DispWithArrows*}| are compliant with
+% the command |\qedhere| of \pkg{amsthm}. However, this compatibility requires a
+% special version of |\qedhere|.
+%
+% This special version is called |\@@_qedhere:| and will be linked with
+% |\qedhere| in the last column of the environment |{DispWithArrows}| (only if
+% the package \pkg{amsthm} has been loaded). |\@@_qedhere:| raises the boolean
+% |\l_@@_qedhere_bool|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_qedhere: { \bool_set_true:N \l_@@_qedhere_bool }
+\cs_new_protected:Npn \@@_set_qedhere: { \cs_set_eq:NN \qedhere \@@_qedhere: }
+% \end{macrocode}
+%
+% In the last column of the |\halign| of |{DispWithArrows}| (column of the
+% labels, that is to say the numbers of the equations), a command
+% |\@@_qedhere_i:| will be issued if the flag |\l_@@_qedhere_bool| has been
+% raised. The code of this command is an adaptation of the code of |\qedhere| in
+% \pkg{amsthm}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_qedhere_i:
+ {
+ \group_begin:
+ \cs_set_eq:NN \qed \qedsymbol
+% \end{macrocode}
+% The line |\cs_set_eq:NN \qed@elt \setQED@elt| is a preparation for an action
+% on the \textsc{qed} stack. Despite its form, the instruction |\QED@stack|
+% executes an operation on the stack. This operation prints the \textsc{qed}
+% symbol and nullify the top of the stack.
+% \begin{macrocode}
+ \cs_set_eq:NN \qed@elt \setQED@elt
+ \QED@stack \relax \relax
+ \group_end:
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{We draw the arrows}
+%
+% \bigskip
+% The arrows are divided in groups. There is two reasons for this division.
+% \begin{itemize}
+% \item If the option |group| or the option |groups| is used, all the arrows of
+% a group are drawn on a same vertical at an abscissa of |\l_@@_x_dim|.
+% \item For aesthetic reasons, the starting point of all the starting arrows of
+% a group is raised upwards by the value |\l_@@_start_adjust_dim|. Idem for the
+% ending arrows.
+% \end{itemize}
+%
+% \medskip
+% If the option |group| is used (|\l_@@_pos_arrow_int| = 7), we scan the arrows
+% twice: in the first step we only compute the value of |\l_@@_x_dim| for the
+% whole group, and, in the second step (|\l_@@_pos_arrow_int| is set to 8), we
+% divide the arrows in groups (for the vertical adjustement) and we actually
+% draw the arrows.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_scan_arrows:
+ {
+ \group_begin:
+ \int_compare:nNnT \l_@@_pos_arrow_int = 7
+ {
+ \@@_scan_arrows_i:
+ \int_set:Nn \l_@@_pos_arrow_int 8
+ }
+ \@@_scan_arrows_i:
+ \group_end:
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_scan_arrows_i:
+ {
+% \end{macrocode}
+%
+% \bigskip
+% |\l_@@_first_arrow_of_group_int| will be the first arrow of the current group.
+%
+% |\l_@@_first_line_of_group_int| will be the first line involved in the group
+% of arrows (equal to the initial line of the first arrow of the group because
+% the option |jump| is always positive).
+%
+% |\l_@@_first_arrows_seq| will be the list the arrows of the group starting at
+% the first line of the group (we may have several arrows starting from the same
+% line). We have to know all these arrows because of the adjustement by
+% |\l_@@_start_adjust_dim|.
+%
+% |\l_@@_last_line_of_group_int| will be the last line involved in the group
+% (impossible to guess in advance).
+%
+% |\l_@@_last_arrows_seq| will be the list of all the arrows of the group
+% ending at the last line of the group (impossible to guess in advance).
+% \begin{macrocode}
+ \int_zero_new:N \l_@@_first_arrow_of_group_int
+ \int_zero_new:N \l_@@_first_line_of_group_int
+ \int_zero_new:N \l_@@_last_line_of_group_int
+ \seq_clear_new:N \l_@@_first_arrows_seq
+ \seq_clear_new:N \l_@@_last_arrows_seq
+% \end{macrocode}
+%
+% \medskip
+% The boolean |\l_@@_new_group_bool| is a switch that we will use the indicate
+% that a group is finished (and the lines of that group have to be drawn). This
+% boolean is not directed connected to the option |new-group| of an individual
+% arrow.
+% \begin{macrocode}
+ \bool_set_true:N \l_@@_new_group_bool
+% \end{macrocode}
+%
+% \bigskip
+% We begin a loop over all the arrows of the environment. Inside this loop, if a
+% group is finished, we will draw the arrows of that group.
+% \begin{macrocode}
+ \int_set:Nn \l_@@_arrow_int \c_one_int
+ \int_until_do:nNnn \l_@@_arrow_int > \g_@@_arrow_int
+ {
+% \end{macrocode}
+%
+% \bigskip
+% We extract from the property list of the current arrow the fields ``initial'',
+% ``final'', ``status'' and ``input-line''. For the two former, we have to do
+% conversions to integers.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { initial } \l_tmpa_tl
+ \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { final } \l_tmpa_tl
+ \int_set:Nn \l_@@_final_int \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { status } \l_@@_status_arrow_str
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { input-line } \l_@@_input_line_str
+% \end{macrocode}
+%
+% \bigskip
+% We recall that, after the construction of the |\halign|, |\g_@@_line_int| is
+% the total number of lines of the environment. Therefore, the conditionnal
+% |\l_@@_final_int > \g_@@_line_int| tests whether an arrow arrives after the
+% last line of the environment. In this case, we raise an error (except in the
+% second step of treatment for the option |group|). The arrow will be completely
+% ignored, even for the computation of |\l_@@_x_dim|.
+% \begin{macrocode}
+ \int_compare:nNnTF \l_@@_final_int > \g_@@_line_int
+ {
+ \int_compare:nNnF \l_@@_pos_arrow_int = 8
+ { \@@_error:n { Too~few~lines~for~an~arrow } }
+ }
+ \@@_code_for_possible_arrow:
+% \end{macrocode}
+%
+% \bigskip
+% Incrementation of the index of the loop (and end of the loop).
+% \begin{macrocode}
+ \int_incr:N \l_@@_arrow_int
+ }
+% \end{macrocode}
+%
+% \bigskip
+% After the last arrow of the environment, we have to draw the last group of
+% arrows. If we are in option |group| and in the first step of treatment
+% (|\l_@@_pos_arrow_int| = 7), we don't draw because, in the first step, we
+% don't draw anything. If there is no arrow in the group, we don't draw (this
+% situation occurs when all the arrows of the potential group arrive after the
+% last line of the environment).
+% \begin{macrocode}
+ \bool_if:nT
+ {
+ \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
+ &&
+ \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0
+ }
+ { \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_code_for_possible_arrow:
+ {
+% \end{macrocode}
+% We test whether the previous arrow was in fact the last arrow of a group. In
+% this case, we have to draw all the arrows of that group, except if we are with
+% the option |group| and in the first step of treatment (|\l_@@_pos_arrow_int| =
+% 7).
+% \begin{macrocode}
+ \bool_if:nT
+ {
+ \int_compare_p:nNn \l_@@_arrow_int > \c_one_int
+ &&
+ ( \int_compare_p:n { \l_@@_initial_int > \l_@@_last_line_of_group_int }
+ &&
+ \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
+ ||
+ \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group }
+ )
+ }
+ {
+ \int_compare:nNnF \l_@@_first_arrow_of_group_int = \c_zero_int
+ {
+ \@@_draw_arrows:nn
+ \l_@@_first_arrow_of_group_int
+ { \l_@@_arrow_int - 1 }
+ }
+ \bool_set_true:N \l_@@_new_group_bool
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The flag |\l_@@_new_group_bool| indicates if we have to begin a new group of
+% arrows. In fact, we have to begin a new group in three circonstancies: if we
+% are at the first arrow of the environment (that's why the flag is raised
+% before the beginning of the loop), if we have just finished a group (that's
+% why the flag is raised in the previous conditionnal, for topological reasons
+% or if the previous arrows had the status ``new-group''). At the beginning of a
+% group, we have to initialize the following variables: |\l_@@_first_arrow_int|,
+% |\l_@@_first_line_of_group_int|, |\l_@@_last_line_of_group|,
+% |\l_@@_first_arrows_seq|, |\l_@@_last_arrows_seq|.
+%
+% \begin{macrocode}
+ \bool_if:nTF \l_@@_new_group_bool
+ {
+ \bool_set_false:N \l_@@_new_group_bool
+ \int_set_eq:NN \l_@@_first_arrow_of_group_int \l_@@_arrow_int
+ \int_set_eq:NN \l_@@_first_line_of_group_int \l_@@_initial_int
+ \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int
+ \seq_clear:N \l_@@_first_arrows_seq
+ \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int
+ \seq_clear:N \l_@@_last_arrows_seq
+ \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int
+% \end{macrocode}
+%
+% If we are in option |group| and in the second step of treatment
+% (|\l_@@_pos_arrow_int| = 8), we don't initialize |\l_@@_x_dim| because we want
+% to use the same value of |\l_@@_x_dim| (computed during the first step) for
+% all the groups.
+% \begin{macrocode}
+ \int_compare:nT { \l_@@_pos_arrow_int != 8 }
+ { \dim_set:Nn \l_@@_x_dim { - \c_max_dim } }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% If we are not at the beginning of a new group.
+% \begin{macrocode}
+ {
+% \end{macrocode}
+%
+% If the arrow is independent, we don't take into account this arrow for the
+% detection of the end of the group.
+% \begin{macrocode}
+ \bool_if:nF
+ { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+ {
+% \end{macrocode}
+% If the arrow is not independant, the arrow belongs to the current group and we
+% have to take it into account in some variables.
+% \begin{macrocode}
+ \int_compare:nT
+ { \l_@@_initial_int = \l_@@_first_line_of_group_int }
+ { \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int }
+ \int_compare:nNnTF \l_@@_final_int > \l_@@_last_line_of_group_int
+ {
+ \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int
+ \seq_clear:N \l_@@_last_arrows_seq
+ \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int
+ }
+ {
+ \int_compare:nNnT \l_@@_final_int = \l_@@_last_line_of_group_int
+ { \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% If the arrow is not independent, we update the current $x$-value (in
+% |\l_@@_x_dim|) with the dedicated command |\@@_update_x:nn|. If we are
+% in option |group| and in the second step of treatment (|\l_@@_pos_arrow_int| =
+% 8), we don't initialize |\l_@@_x_dim| because we want to use the same value of
+% |\l_@@_x_dim| (computed during the first step) for all the groups.
+% \begin{macrocode}
+ \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+ {
+ \int_compare:nT { \l_@@_pos_arrow_int != 8 }
+ { \@@_update_x:nn \l_@@_initial_int \l_@@_final_int }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The following code is necessary because we will have to expand an argument
+% exactly 3 times.
+% \begin{macrocode}
+\cs_generate_variant:Nn \keys_set:nn { n o }
+\cs_new_protected:Npn \@@_keys_set:
+ { \keys_set_known:no { WithArrows / Arrow / SecondPass } }
+% \end{macrocode}
+%
+% \bigskip
+% The macro |\@@_draw_arrows:nn| draws all the arrows whose numbers are between
+% |#1| and |#2|. |#1| and |#2| must be expressions that expands to an integer
+% (they are expanded in the beginning of the macro). This macro is nullified by
+% the option |no-arrows|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_arrows:nn #1 #2
+ {
+ \group_begin:
+ \int_zero_new:N \l_@@_first_arrow_int
+ \int_set:Nn \l_@@_first_arrow_int { #1 }
+ \int_zero_new:N \l_@@_last_arrow_int
+ \int_set:Nn \l_@@_last_arrow_int { #2 }
+% \end{macrocode}
+%
+% \bigskip
+% We begin a loop over the arrows we have to draw. The variable
+% |\l_@@_arrow_int| (local in the environment |{WithArrows}|) will be used as
+% index for the loop.
+% \begin{macrocode}
+ \int_set:Nn \l_@@_arrow_int \l_@@_first_arrow_int
+ \int_until_do:nNnn \l_@@_arrow_int > \l_@@_last_arrow_int
+ {
+% \end{macrocode}
+%
+% \bigskip
+% We extract from the property list of the current arrow the fields ``initial''
+% and ``final'' and we store these values in |\l_@@_initial_int| and
+% |\l_@@_final_int|. However, we have to do a conversion because the components
+% of a property list are token lists.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { initial } \l_tmpa_tl
+ \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { final } \l_tmpa_tl
+ \int_set:Nn \l_@@_final_int \l_tmpa_tl
+% \end{macrocode}
+%
+% \bigskip
+% If the arrow ends after the last line of the environment, we don't draw the
+% arrow (an error has already been raised in |\@@_scan_arrows:|). We recall
+% that, after the construction of the |\halign|, |\g_@@_line_int| is the total
+% number of lines of the environment).
+% \begin{macrocode}
+ \int_compare:nT { \l_@@_final_int <= \g_@@_line_int } \@@_draw_arrows_i:
+ \int_incr:N \l_@@_arrow_int
+ }
+ \group_end:
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The macro |\@@_draw_arrows_i:| is only for the lisibility of the code. The
+% first |\group_begin:| is for the options of the arrows (but we remind that the
+% options |ll|, |rr|, |rl|, |lr|, |i| and |jump| have already been extracted and
+% are not present in the field |options| of the property list of the arrow).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_arrows_i:
+ {
+ \group_begin:
+% \end{macrocode}
+%
+% \bigskip
+% We process the options of the current arrow. The second argument of
+% |\keys_set:nn| must be expanded exactly three times. An x-expansion is not
+% possible because there can be tokens like |\bfseries| in the option |font| of
+% the option |tikz|. This expansion is a bit tricky.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _\l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { options } \l_tmpa_tl
+ \str_clear_new:N \l_@@_previous_key_str
+ \exp_args:NNo \exp_args:No
+ \@@_keys_set: { \l_tmpa_tl , tikz = { xshift = \l_@@_xoffset_dim } }
+% \end{macrocode}
+%
+% We create two booleans to indicate the position of the initial node and final
+% node of the arrow in cases of options |rr|, |rl|, |lr| or |ll|:
+% \begin{macrocode}
+ \bool_set_false:N \l_@@_initial_r_bool
+ \bool_set_false:N \l_@@_final_r_bool
+ \int_case:nn \l_@@_pos_arrow_int
+ {
+ 0 { \bool_set_true:N \l_@@_final_r_bool }
+ 2 { \bool_set_true:N \l_@@_initial_r_bool }
+ 3
+ {
+ \bool_set_true:N \l_@@_initial_r_bool
+ \bool_set_true:N \l_@@_final_r_bool
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{center}
+% \begin{tabular}{l}
+% \begin{tabular}{@{}l*8c@{}}
+% \toprule
+% option & |lr| & |ll| & |rl| & |rr| & |v| & |i| & |groups| & |group| \\
+% \midrule
+% |\l_@@_pos_arrow_int| & $0$ & $1$ & $2$ & $3$ & $4$ & $5$ & $6$ & $7$ \\
+% \bottomrule
+% \end{tabular} \\
+% \footnotesize The option |v| can be used only in |\Arrow| in |code-after| (see
+% below).
+% \end{tabular}
+% \end{center}
+%
+% \bigskip
+% In case of option |i| at a local or global level (|\l_@@_pos_arrow_int| = 5),
+% we have to compute the $x$-value of the arrow (which is vertical). The
+% computed $x$-value is stored in |\l_@@_x_dim| (the same variable used when the
+% option |group| or the option |groups| is used).
+% \begin{macrocode}
+ \int_compare:nNnT \l_@@_pos_arrow_int = 5
+ {
+ \dim_set:Nn \l_@@_x_dim { - \c_max_dim }
+ \@@_update_x:nn \l_@@_initial_int \l_@@_final_int
+ }
+% \end{macrocode}
+%
+% \bigskip
+% |\l_@@_initial_tl| contains the name of the Tikz node from which the arrow
+% starts (in normal cases... because with the option |i|, |group| and |groups|,
+% the point will perhaps have another
+% $x$-value --- but always the same $y$-value). Idem for |\l_@@_final_tl|.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_initial_tl
+ {
+ \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl
+ .south
+ }
+ \tl_set:Nx \l_@@_final_tl
+ { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl .north }
+% \end{macrocode}
+% We use ``|.south|'' and ``|.north|'' because we want a small gap between two
+% consecutive arrows (and the Tikz nodes created have the shape of small
+% vertical segments: use option |show-nodes| to visualize the nodes).
+%
+% \bigskip
+% The label of the arrow will be stored in |\l_tmpa_tl|.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { label }
+ \l_tmpa_tl
+% \end{macrocode}
+%
+% \bigskip
+% Now, we have to know if the arrow starts at the first line of the group and/or
+% ends at the last line of the group. That's the reason why we have stored in
+% |\l_@@_first_arrows_seq| the list of all the arrows starting at the
+% first line of the group and in |\l_@@_last_arrows_seq| the list of
+% all the arrows ending at the last line of the group. We compute these values
+% in the booleans |\l_tmpa_bool| and |\l_tmpb_bool|. These computations can't be
+% done in the following |{tikzpicture}| because the command |\seq_if_in:NnTF|
+% which is \emph{not} expandable.
+% \begin{macrocode}
+ \seq_if_in:NxTF \l_@@_first_arrows_seq
+ { \int_use:N \l_@@_arrow_int }
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+ \seq_if_in:NxTF \l_@@_last_arrows_seq
+ { \int_use:N \l_@@_arrow_int }
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+ \int_compare:nNnT \l_@@_pos_arrow_int = 5
+ {
+ \bool_set_true:N \l_tmpa_bool
+ \bool_set_true:N \l_tmpb_bool
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We compute and store in |\g_tmpa_tl| and |\g_tmpb_tl| the exact coordinates of
+% the extremities of the arrow.
+% \begin{itemize}
+% \item Concerning the
+% $x$-values, the abscissa computed in |\l_@@_x_dim| will be used if the option
+% of position is |i|, |group| or |groups|.
+% \item Concerning the
+% $y$-values, an adjustement is done for each arrow starting at the first line
+% of the group and each arrow ending at the last line of the group (with the
+% values of |\l_@@_start_adjust_dim| and |\l_@@_end_adjust_dim|).
+% \end{itemize}
+%
+% \begin{macrocode}
+%<*LaTeX>
+ \begin { tikzpicture } [ @@_standard ]
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture [ @@_standard ]
+%</plain-TeX>
+ \tikz@scan@one@point \pgfutil@firstofone ( \l_@@_initial_tl )
+ \tl_gset:Nx \g_tmpa_tl
+ {
+ \int_compare:nNnTF \l_@@_pos_arrow_int < 5
+ { \dim_use:N \pgf@x }
+ { \dim_use:N \l_@@_x_dim } ,
+ \bool_if:NTF \l_tmpa_bool
+ { \dim_eval:n { \pgf@y + \l_@@_start_adjust_dim } }
+ { \dim_use:N \pgf@y }
+ }
+ \tikz@scan@one@point \pgfutil@firstofone ( \l_@@_final_tl )
+ \tl_gset:Nx \g_tmpb_tl
+ {
+ \int_compare:nNnTF \l_@@_pos_arrow_int < 5
+ { \dim_use:N \pgf@x }
+ { \dim_use:N \l_@@_x_dim } ,
+ \bool_if:NTF \l_tmpb_bool
+ { \dim_eval:n { \pgf@y - \l_@@_end_adjust_dim } }
+ { \dim_use:N \pgf@y }
+ }
+%<*LaTeX>
+ \end { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+% \end{macrocode}
+%
+% \bigskip
+% Eventually, we can draw the arrow with the code in |\l_@@_tikz_code_tl|. We
+% recall that the value by default for this token list is :\enskip
+% ``\verb|\draw (#1) to node {#3} (#2) ;|''. This value can be modified with the
+% option |tikz-code|. We use the variant |\@@_draw_arrow:nno| of the macro
+% |\@@_draw_arrow:nnn| because of the characters \emph{underscore} in the name
+% |\l_tmpa_tl|: if the user uses the Tikz library |babel|, the third argument of
+% the command |\@@_draw_arrow:nno| will be rescanned because this third argument
+% will be in the argument of a command |node| of an instruction |\draw| of
+% Tikz... and we will have an error because of the characters
+% \emph{underscore}.\footnote{There were other solutions: use another name
+% without \emph{underscore} (like \Verb|\ltmpatl|) or use the package
+% \pkg{underscore} (with this package, the characters \emph{underscore} will be
+% rescanned without errors, even in text mode).}
+% \begin{macrocode}
+ \@@_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
+% \end{macrocode}
+%
+% \smallskip
+% We close the TeX group opened for the options given to |\Arrow[...]| (local
+% level of the options).
+% \begin{macrocode}
+ \group_end:
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The function |@@_tmpa:nnn| will draw the arrow. It's merely an environment
+% |{tikzpicture}|. However, the Tikz instruction in this environment must be
+% inserted from |\l_@@_tikz_code_tl| with the markers |#1|, |#2| and |#3|.
+% That's why we create a function |\@@_def_function_tmpa:n| which will create
+% the function |\@@_tmpa:nnn|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_def_function_tmpa:n #1
+ {
+ \cs_set:Npn \@@_tmpa:nnn ##1 ##2 ##3
+ {
+%<*LaTeX>
+ \begin{tikzpicture}
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture
+%</plain-TeX>
+ [
+ @@_standard ,
+ every~path / .style = WithArrows / arrow
+ ]
+ #1
+%<*LaTeX>
+ \end{tikzpicture}
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+ }
+ }
+% \end{macrocode}
+%
+% \medskip
+% When we draw the arrow (with |\@@_draw_arrow:nnn|), we first create the
+% function |\@@_tmpa:nnn| and, then, we use the function |\@@_tmpa:nnn| :
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_arrow:nnn #1 #2 #3
+ {
+% \end{macrocode}
+%
+% \medskip
+% If the option |wrap-lines| is used, we have to use a special version of
+% |\l_@@_tikz_code_tl| (which corresponds to the option |tikz-code|).
+% \begin{macrocode}
+ \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool }
+ { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl }
+% \end{macrocode}
+%
+% \medskip
+% Now, the main lines of this function |\@@_draw_arrow:nnn|.
+% \begin{macrocode}
+ \exp_args:NV \@@_def_function_tmpa:n \l_@@_tikz_code_tl
+ \@@_tmpa:nnn { #1 } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \@@_draw_arrow:nnn { n n o }
+% \end{macrocode}
+%
+% \bigskip
+% If the option |wrap-lines| is used, we have to use a special version of
+% |\l_@@_tikz_code_tl| (which corresponds to the option |tikz-code|).
+% \begin{macrocode}
+\tl_const:Nn \c_@@_tikz_code_wrap_lines_tl
+ {
+% \end{macrocode}
+% First, we draw the arrow without the label.
+% \begin{macrocode}
+ \draw ( #1 ) to node ( @@_label ) { } ( #2 ) ;
+% \end{macrocode}
+% We retrieve in |\pgf@x| the abscissa of the left-side of the label we will
+% put.
+% \begin{macrocode}
+ \tikz@parse@node \pgfutil@firstofone ( @@_label.west )
+% \end{macrocode}
+% We compute in |\l_tmpa_dim| the maximal width possible for the label.
+% Here is the use of |\g_@@_right_x_dim| which has been computed previously with
+% the |v|-nodes.
+% \begin{macrocode}
+ \dim_set:Nn \l_tmpa_dim
+ { \g_@@_right_x_dim - \pgf@x - \pgfkeysvalueof { / pgf / inner~xsep } }
+% \end{macrocode}
+% We retrieve in |\g_tmpa_tl| the current value of the Tikz parameter
+% ``|text width|''.\footnote{In fact, it's not the current value of
+% ``|text width|'': it's the value of ``|text width|'' set in the option |tikz|
+% provided by \pkg{witharrows}. These options are given to Tikz in a
+% ``|every path|''. That's why we have to retrieve it in a path.}
+% \begin{macrocode}
+ \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz@text@width } ;
+% \end{macrocode}
+% Maybe the current value of the parameter ``|text width|'' is shorter than
+% |\l_tmpa_dim|. In this case, we must use ``|text width|'' (we update
+% |\l_tmpa_dim|).
+% \begin{macrocode}
+ \tl_if_empty:NF \g_tmpa_tl
+ {
+ \dim_set:Nn \l_tmpb_dim \g_tmpa_tl
+ \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
+ { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
+ }
+% \end{macrocode}
+% Now, we can put the label with the right value for ``|text width|''.
+% \begin{macrocode}
+ \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
+ {
+ \path ( @@_label.west )
+ node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ]
+ { #3 } ;
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\@@_update_x:nn| will analyze the lines between |#1| and
+% |#2| in order to modify |\l_@@_x_dim| in consequence. More precisely,
+% |\l_@@_x_dim| is increased if a line longer than the current value of
+% |\l_@@_x_dim| is found. |\@@_update_x:nn| is used in |\@@_scan_arrows:|
+% (for options |group| and |groups|) and in |\@@_draw_arrows:nn| (for option
+% |i|).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_update_x:nn #1 #2
+ {
+ \int_step_inline:nnn { #1 } { #2 }
+ {
+%<*LaTeX>
+ \begin { tikzpicture } [ @@_standard ]
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture [ @@_standard ]
+%</plain-TeX>
+ \tikz@scan@one@point \pgfutil@firstofone ( ##1 - l )
+ \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l_@@_x_dim \pgf@x }
+%<*LaTeX>
+ \end { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+ \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim
+ }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The command |\WithArrowsLastEnv| is not used by the package \pkg{witharrows}.
+% It's only a facility given to the final user. It gives the number of the last
+% environment |{WithArrows}| at
+% level~$0$ (to the sense of the nested environments). This macro is fully
+% expandable and, thus, can be used directly in the name of a Tikz node.
+% \begin{macrocode}
+\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int }
+% \end{macrocode}
+%
+% \bigskip
+% \subsection{The command \textbackslash Arrow in code-after}
+%
+% The option |code-after| is an option of the environment |{WithArrows}| (this
+% option is only available at the environment level). In the option |code-after|,
+% one can use the command |Arrow| but it's a special version of the command
+% |Arrow|. For this special version (internally called |\@@_Arrow_code_after|),
+% we define a special set of keys called |WithArrows/Arrow/code-after|.
+%
+% \begin{macrocode}
+\keys_define:nn { WithArrows / Arrow / code-after }
+ {
+ tikz .code:n =
+ \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
+ tikz .value_required:n = true ,
+ rr .value_forbidden:n = true ,
+ rr .code:n = \@@_fix_pos_option:n 0 ,
+ ll .value_forbidden:n = true,
+ ll .code:n = \@@_fix_pos_option:n 1 ,
+ rl .value_forbidden:n = true ,
+ rl .code:n = \@@_fix_pos_option:n 2 ,
+ lr .value_forbidden:n = true ,
+ lr .code:n = \@@_fix_pos_option:n 3 ,
+ v .value_forbidden:n = true ,
+ v .code:n = \@@_fix_pos_option:n 4 ,
+ tikz-code .tl_set:N = \l_@@_tikz_code_tl ,
+ tikz-code .value_required:n = true ,
+ xoffset .dim_set:N = \l_@@_xoffset_dim ,
+ xoffset .value_required:n = true ,
+ unknown .code:n =
+ \@@_sort_seq:N \l_@@_options_Arrow_code_after_seq
+ \@@_error:n { Unknown~option~Arrow~in~code-after }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% A sequence of the options available in |\Arrow| in |code-after|. This sequence
+% will be used in the error messages and can be modified dynamically.
+% \begin{macrocode}
+\seq_new:N \l_@@_options_Arrow_code_after_seq
+\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_code_after_seq
+ { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentCommand \@@_Arrow_code_after { O { } m m m ! O { } }
+%</LaTeX>
+%<*plain-TeX>
+\cs_new_protected:Npn \@@_Arrow_code_after
+ {
+ \peek_meaning:NTF [
+ { \@@_Arrow_code_after_i }
+ { \@@_Arrow_code_after_i [ ] }
+ }
+\cs_new_protected:Npn \@@_Arrow_code_after_i [ #1 ] #2 #3 #4
+ {
+ \peek_meaning:NTF [
+ { \@@_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } }
+ { \@@_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] }
+ }
+\cs_new_protected:Npn \@@_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ]
+%</plain-TeX>
+ {
+ \int_set:Nn \l_@@_pos_arrow_int 1
+ \str_clear_new:N \l_@@_previous_key_str
+ \group_begin:
+ \keys_set:nn { WithArrows / Arrow / code-after }
+ { #1, #5, tikz = { xshift = \l_@@_xoffset_dim } }
+ \bool_set_false:N \l_@@_initial_r_bool
+ \bool_set_false:N \l_@@_final_r_bool
+ \int_case:nn \l_@@_pos_arrow_int
+ {
+ 0
+ {
+ \bool_set_true:N \l_@@_initial_r_bool
+ \bool_set_true:N \l_@@_final_r_bool
+ }
+ 2 { \bool_set_true:N \l_@@_initial_r_bool }
+ 3 { \bool_set_true:N \l_@@_final_r_bool }
+ }
+% \end{macrocode}
+% We prevent drawing a arrow from a line to itself.
+% \begin{macrocode}
+ \tl_if_eq:nnTF { #2 } { #3 }
+ { \@@_error:nn { Both~lines~are~equal } { #2 } }
+% \end{macrocode}
+% We test whether the two Tikz nodes |(#2-l)| and |(#3-l)| really exist. If not,
+% the arrow won't be drawn.
+% \begin{macrocode}
+ {
+ \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - #2 - l }
+ { \@@_error:nx { Wrong~line~in~Arrow } { #2 } }
+ {
+ \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - #3 - l }
+ { \@@_error:nx { Wrong~line~in~Arrow } { #3 } }
+ {
+ \int_compare:nNnTF \l_@@_pos_arrow_int = 4
+ {
+%<*LaTeX>
+ \begin { tikzpicture } [ @@_standard ]
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture [ @@_standard ]
+%</plain-TeX>
+ \tikz@scan@one@point \pgfutil@firstofone (#2-l.south)
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \tikz@scan@one@point \pgfutil@firstofone (#3-l.north)
+ \dim_set:Nn \l_tmpa_dim
+ { \dim_max:nn \l_tmpa_dim \pgf@x }
+ \tl_gset:Nx \g_tmpa_tl
+ { \dim_use:N \l_tmpa_dim , \dim_use:N \l_tmpb_dim }
+ \tl_gset:Nx \g_tmpb_tl
+ { \dim_use:N \l_tmpa_dim , \dim_use:N \pgf@y }
+%<*LaTeX>
+ \end { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+ }
+ {
+%<*LaTeX>
+ \begin { tikzpicture } [ @@_standard ]
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture [ @@_standard ]
+%</plain-TeX>
+ \tikz@scan@one@point \pgfutil@firstofone
+ ( #2-\bool_if:NTF\l_@@_initial_r_bool rl .south )
+ \tl_gset:Nx \g_tmpa_tl
+ { \dim_use:N \pgf@x , \dim_use:N \pgf@y }
+ \tikz@scan@one@point \pgfutil@firstofone
+ ( #3-\bool_if:NTF\l_@@_final_r_bool rl .north )
+ \tl_gset:Nx \g_tmpb_tl
+ { \dim_use:N \pgf@x , \dim_use:N \pgf@y }
+%<*LaTeX>
+ \end { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+ }
+ \@@_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
+ }
+ }
+ }
+ \group_end:
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% \subsection{The command \textbackslash MultiArrow in code-after}
+% The command |\@@_MultiArrow:nn| will be linked to |\MultiArrow| when the
+% |code-after| is executed.
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_MultiArrow:nn #1 #2
+ {
+% \end{macrocode}
+% The user of the command |\MultiArrow| (in |code-after|) will be able to specify
+% the list of lines with the same syntax as the loop |\foreach| of \pkg{pgffor}.
+% That's why we construct a ``clist'' of \pkg{expl3} from the specification of
+% list given by the user. The construction of the ``clist'' must be global in
+% order to exit the |\foreach| and that's why we construct the list in
+% |\g_tmpa_clist|.
+% \begin{macrocode}
+ \foreach \x in { #1 }
+ {
+ \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - \x - l }
+ { \@@_error:nx { Wrong~line~specification~in~MultiArrow } \x }
+ { \clist_gput_right:Nx \g_tmpa_clist \x }
+ }
+% \end{macrocode}
+% We sort the list |\g_tmpa_clist| because we want to extract the minimum and
+% the maximum.
+% \begin{macrocode}
+ \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 }
+ { \@@_error:n { Too~small~specification~for~MultiArrow } }
+ {
+ \clist_sort:Nn \g_tmpa_clist
+ {
+ \int_compare:nTF { ##1 > ##2 }
+ \sort_return_swapped:
+ \sort_return_same:
+ }
+% \end{macrocode}
+% We extract the minimum in |\l_tmpa_tl| (it must be an integer but we store it
+% in a token list of \pkg{expl3}).
+% \begin{macrocode}
+ \clist_pop:NN \g_tmpa_clist \l_tmpa_tl
+% \end{macrocode}
+%
+% We extract the maximum in |\l_tmpb_tl|. The remaining list (in
+% |\g_tmpa_clist|) will be sorted in decreasing order but never mind...
+% \begin{macrocode}
+ \clist_reverse:N \g_tmpa_clist
+ \clist_pop:NN \g_tmpa_clist \l_tmpb_tl
+% \end{macrocode}
+%
+% We draw the teeth of the rak (except the first one and the last one) with the
+% auxiliary function |\@@_MultiArrow_i:n|. This auxiliary fonction is necessary
+% to expand the specification of the list in the |\foreach| loop. The first and
+% the last teeth of the rak can't be drawn the same way as the others (think,
+% for example, to the case of the option ``|rounded corners|'' is used).
+% \begin{macrocode}
+ \exp_args:NV \@@_MultiArrow_i:n \g_tmpa_clist
+% \end{macrocode}
+%
+% Now, we draw the rest of the structure.
+% \begin{macrocode}
+%<*LaTeX>
+ \begin { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture
+%</plain-TeX>
+ [
+ @@_standard ,
+ every~path / .style = { WithArrows / arrow }
+ ]
+ \draw [<->] ([xshift = \l_@@_xoffset_dim]\l_tmpa_tl-r.south)
+ -- ++(5mm,0)
+ -- node (@@_label) {}
+ ([xshift = \l_@@_xoffset_dim+5mm]\l_tmpb_tl-r.south)
+ -- ([xshift = \l_@@_xoffset_dim]\l_tmpb_tl-r.south) ;
+ \tikz@parse@node \pgfutil@firstofone (@@_label.west)
+ \dim_set:Nn \l_tmpa_dim { 20 cm }
+ \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz@text@width } ;
+ \tl_if_empty:NF \g_tmpa_tl { \dim_set:Nn \l_tmpa_dim \g_tmpa_tl }
+ \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool }
+ {
+ \dim_set:Nn \l_tmpb_dim
+ { \g_@@_right_x_dim - \pgf@x - 0.3333 em }
+ \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
+ { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
+ }
+ \path (@@_label.west)
+ node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
+%<*LaTeX>
+ \end{tikzpicture}
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_MultiArrow_i:n #1
+ {
+%<*LaTeX>
+ \begin { tikzpicture }
+%</LaTeX>
+%<*plain-TeX>
+ \tikzpicture
+%</plain-TeX>
+ [
+ @@_standard ,
+ every~path / .style = { WithArrows / arrow }
+ ]
+ \foreach \k in { #1 }
+ {
+ \draw [ <- ]
+ ( [xshift = \l_@@_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
+ } ;
+%<*LaTeX>
+ \end{tikzpicture}
+%</LaTeX>
+%<*plain-TeX>
+ \endtikzpicture
+%</plain-TeX>
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% \subsection{The error messages of the package}
+%
+% \begin{macrocode}
+\str_const:Nn \c_@@_option_ignored_str
+ { If~you~go~on,~this~option~will~be~ignored. }
+\str_const:Nn \c_@@_command_ignored_str
+ { If~you~go~on,~this~command~will~be~ignored. }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*LaTeX>
+\@@_msg_new:nn { amsmath~not~loaded }
+ {
+ You~can't~use~the~option~'\l_keys_key_tl'~because~the~
+ package~'amsmath'~has~not~been~loaded.\\
+ If~you~go~on,~this~option~will~be~ignored~in~the~rest~
+ of~the~document.
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Bad~value~for~replace~brace~by }
+ {
+ Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~
+ with~an~extensible~left~delimiter.~The~possible~values~are:~.,
+ \token_to_str:N \{,~(,~[,~\token_to_str:N \lbrace,~
+ \token_to_str:N \lbrack,~\token_to_str:N \lgroup,~
+ \token_to_str:N \langle,~\token_to_str:N \lmoustache,~
+ \token_to_str:N \lfloor\ and~\token_to_str:N \lceil\
+ (and~\token_to_str:N \lvert\ and~\token_to_str:N \lVert\
+ if~amsmath~or~unicode-math~is~loaded~in~LaTeX).\\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { option~of~cr~negative }
+ {
+ The~argument~of~the~command~\token_to_str:N\\~
+ should~be~positive~in~the~row~\int_use:N \g_@@_line_int\
+ of~your~environment~\{\l_@@_type_env_str\}.\\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { omit~probably~used }
+ {
+ There~is~a~problem.~Maybe~you~have~used~a~command~
+ \token_to_str:N\omit\ in~the~line~\int_use:N \g_@@_line_int\
+ (or~another~line)~of~your~environment~\{\l_@@_type_env_str\}.\\
+ You~can~go~on~but~you~may~have~others~errors.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*LaTeX>
+\@@_msg_new:nn { newline~at~the~end~of~env }
+ {
+ Your~environment~\{\l_@@_type_env_str\}~should~not~end~with~
+ a~\token_to_str:N \\.\\
+ This~warning~might~become~an~error~in~a~future~version.
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Invalid~option~format }
+ {
+ The~key~'format'~should~contain~only~letters~r,~c~and~l~and~
+ must~not~be~empty.\\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Value~for~a~key }
+ {
+ The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
+ However,~you~can~go~on~for~this~time.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn { Unknown~option~in~Arrow }
+ {
+ The~key~'\l_keys_key_tl'~is~unknown~for~the~command~
+ \l_@@_string_Arrow_for_msg_str\ in~the~row~
+ \int_use:N \g_@@_line_int\ of~your~environment~
+ \{\l_@@_type_env_str\}. \l_tmpa_str \\
+ \c_@@_option_ignored_str \\
+ For~a~list~of~the~available~keys,~type~H~<return>.
+ }
+ {
+ The~available~keys~are~(in~alphabetic~order):~
+ \seq_use:Nnnn \l_@@_options_Arrow_seq {~and~} {,~} {~and~}.
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nnn { Unknown~option~WithArrows }
+ {
+ The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
+ \c_@@_option_ignored_str \\
+ For~a~list~of~the~available~keys,~type~H~<return>.
+ }
+ {
+ The~available~keys~are~(in~alphabetic~order):~
+ \seq_use:Nnnn \l_@@_options_WithArrows_seq {~and~} {,~} {~and~}.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn { Unknown~option~DispWithArrows }
+ {
+ The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
+ \c_@@_option_ignored_str \\
+ For~a~list~of~the~available~keys,~type~H~<return>.
+ }
+ {
+ The~available~keys~are~(in~alphabetic~order):~
+ \seq_use:Nnnn \l_@@_options_DispWithArrows_seq {~and~} {,~} {~and~}.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn { Unknown~option~WithArrowsOptions }
+ {
+ The~key~'\l_keys_key_tl'~is~unknown~in~
+ \token_to_str:N \WithArrowsOptions. \\
+ \c_@@_option_ignored_str \\
+ For~a~list~of~the~available~keys,~type~H~<return>.
+ }
+ {
+ The~available~keys~are~(in~alphabetic~order):~
+ \seq_use:Nnnn \l_@@_options_WithArrowsOptions_seq {~and~} {,~} {~and~}.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn { Unknown~option~Arrow~in~code-after }
+ {
+ The~key~'\l_keys_key_tl'~is~unknown~in~
+ \token_to_str:N \Arrow\ in~code-after. \\
+ \c_@@_option_ignored_str \\
+ For~a~list~of~the~available~keys,~type~H~<return>.
+ }
+ {
+ The~available~keys~are~(in~alphabetic~order):~
+ \seq_use:Nnnn \l_@@_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Too~much~columns~in~WithArrows }
+ {
+ Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N
+ \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~
+ If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~
+ the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\
+ However,~you~can~go~one~for~this~time.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Too~much~columns~in~DispWithArrows }
+ {
+ Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N
+ \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\
+ at~the~end~of~row~\int_use:N \g_@@_line_int. \\
+ This~error~is~fatal.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Negative~jump }
+ {
+ You~can't~use~a~negative~value~for~the~option~'jump'~of~command~
+ \l_@@_string_Arrow_for_msg_str\
+ in~the~row~\int_use:N \g_@@_line_int\
+ of~your~environment~\{\l_@@_type_env_str\}.~
+ You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { new-group~without~groups }
+ {
+ You~can't~use~the~option~'new-group'~for~the~command~
+ \l_@@_string_Arrow_for_msg_str\
+ because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~
+ 'groups'~in~your~environment~\{\l_@@_type_env_str\}. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn
+ { Too~few~lines~for~an~arrow }
+ {
+ Line~\l_@@_input_line_str\
+ :~an~arrow~specified~in~the~row~\int_use:N \l_@@_initial_int\
+ of~your~environment~\{\l_@@_type_env_str\}~can't~be~drawn~
+ because~it~arrives~after~the~last~row~of~the~environment. \\
+ If~you~go~on,~this~arrow~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { WithArrows~outside~math~mode }
+ {
+ The~environment~\{\l_@@_type_env_str\}~should~be~used~only~in~math~mode~
+ like~the~environment~\{aligned\}~of~amsmath. \\
+ Nevertheless,~you~can~go~on.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { DispWithArrows~in~math~mode }
+ {
+ The~environment~\{\l_@@_type_env_str\}~should~be~used~only~outside~math~
+ mode~like~the~environment~\{align\}~of~amsmath. \\
+ This~error~is~fatal.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Incompatible~options~in~Arrow }
+ {
+ You~try~to~use~the~option~'\l_keys_key_tl'~but~
+ this~option~is~incompatible~or~redundant~with~the~option~
+ '\l_@@_previous_key_str'~set~in~the~same~command~
+ \l_@@_string_Arrow_for_msg_str. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Incompatible~options }
+ { You~try~to~use~the~option~'\l_keys_key_tl'~but~
+ this~option~is~incompatible~or~redundant~with~the~option~
+ '\l_@@_previous_key_str'~set~in~the~same~command~
+ \bool_if:NT \l_@@_in_code_after_bool
+ {
+ \l_@@_string_Arrow_for_msg_str\
+ in~the~code-after~of~your~environment~\{\l_@@_type_env_str\}
+ }. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Arrow~not~in~last~column }
+ {
+ You~should~use~the~command~\l_@@_string_Arrow_for_msg_str\
+ only~in~the~last~column~(column~\int_use:N\l_@@_nb_cols_int)~
+ of~your~environment~\{\l_@@_type_env_str\}.\\
+ However~you~can~go~on~for~this~time.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Wrong~line~in~Arrow }
+ {
+ The~specification~of~line~'#1'~you~use~in~the~command~
+ \l_@@_string_Arrow_for_msg_str\
+ in~the~'code-after'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Both~lines~are~equal }
+ {
+ In~the~'code-after'~of~\{\l_@@_type_env_str\}~you~try~to~
+ draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Wrong~line~specification~in~MultiArrow }
+ {
+ The~specification~of~line~'#1'~doesn't~exist. \\
+ If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Too~small~specification~for~MultiArrow }
+ {
+ The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
+ is~too~small:~you~need~at~least~two~lines. \\
+ \c_@@_command_ignored_str
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Not~allowed~in~DispWithArrows }
+ {
+ The~command~\token_to_str:N #1
+ is~allowed~only~in~the~last~column~
+ (column~\int_use:N\l_@@_nb_cols_int)~of~\{\l_@@_type_env_str\}. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Not~allowed~in~WithArrows }
+ {
+ The~command~\token_to_str:N #1 is~not~allowed~in~\{\l_@@_type_env_str\}~
+ (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*LaTeX>
+\@@_msg_new:nn { tag*~without~amsmath }
+ {
+ We~can't~use~\token_to_str:N\tag*~because~you~haven't~loaded~amsmath~
+ (or~mathtools). \\
+ If~you~go~on,~the~command~\token_to_str:N\tag\
+ will~be~used~instead.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Multiple~tags }
+ {
+ You~can't~use~twice~the~command~\token_to_str:N\tag\
+ in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\
+ If~you~go~on,~the~tag~'#1'~will~be~used.
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Multiple~labels }
+ {
+ Normally,~we~can't~use~the~command~\token_to_str:N\label\
+ twice~in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\
+ However,~you~can~go~on.~
+ \bool_if:NT \c_@@_showlabels_loaded_bool
+ { However,~only~the~last~label~will~be~shown~by~showlabels.~ }
+ If~you~don't~want~to~see~this~message~again,~you~can~use~the~option~
+ 'allow-multiple-labels'~at~the~global~or~environment~level.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Multiple~labels~with~cleveref }
+ {
+ Since~you~use~cleveref,~you~can't~use~the~command~\token_to_str:N\label\
+ twice~in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\
+ If~you~go~on,~you~may~have~undefined~references.
+ }
+%</LaTeX>
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Inexistent~v-node }
+ {
+ There~is~a~problem.~Maybe~you~have~put~a~command~\token_to_str:N\cr\
+ instead~of~a~command~\token_to_str:N\\~at~the~end~of~
+ the~row~\l_tmpa_int\
+ of~your~environment~\{\l_@@_type_env_str\}. \\
+ This~error~is~fatal.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Option~xoffset~forbidden }
+ {
+ You~can't~use~the~option~'xoffset'~in~the~command~
+ \l_@@_string_Arrow_for_msg_str\
+ while~you~are~using~the~option~
+ ' \int_compare:nNnTF \l_@@_pos_arrow_int = 7
+ { group }
+ { groups } '. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn { Duplicate~name }
+ {
+ The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~
+ the~same~environment~name~twice.~You~can~go~on,~but,~
+ maybe,~you~will~have~incorrect~results. \\
+ For~a~list~of~the~names~already~used,~type~H~<return>. \\
+ If~you~don't~want~to~see~this~message~again,~use~the~option~
+ 'allow-duplicate-names'.
+ }
+ {
+ The~names~already~defined~in~this~document~are:~
+ \seq_use:Nnnn \g_@@_names_seq { ,~ } { ,~ } { ~and~ }.
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{The command \textbackslash WithArrowsNewStyle}
+%
+% A new key defined with |\WithArrowsNewStyle| will not be available at the
+% local level.
+% \begin{macrocode}
+%<*LaTeX>
+\NewDocumentCommand \WithArrowsNewStyle { m m }
+%</LaTeX>
+%<*plain-TeX>
+\cs_new_protected:Npn \WithArrowsNewStyle #1 #2
+%</plain-TeX>
+ {
+ \keys_if_exist:nnTF { WithArrows / Global } { #1 }
+ { \@@_error:nn { Key~already~defined } { #1 } }
+ {
+ \keys_define:nn { WithArrows / Global }
+ {
+ #1 .code:n =
+ { \keys_set_known:nn { WithArrows / WithArrowsOptions } { #2 } }
+ }
+ \seq_put_right:Nx \l_@@_options_WithArrows_seq { \tl_to_str:n { #1 } }
+ \seq_put_right:Nx \l_@@_options_DispWithArrows_seq
+ { \tl_to_str:n { #1 } }
+ \seq_put_right:Nx \l_@@_options_WithArrowsOptions_seq
+ { \tl_to_str:N { #1 } }
+% \end{macrocode}
+% We now set the options in a TeX group in order to detect if some keys in |#2|
+% are unknown. If a key is unknown, an error will be raised. However, the key
+% will, even so, be stored in the definition of key~|#1|.
+% \begin{macrocode}
+ \group_begin:
+ \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions }
+ {
+ The~key~'\l_keys_key_tl'~can't~be~set~in~the~
+ definition~of~a~style.~You~can~go~on~for~this~time~
+ but~you~should~suppress~this~key.
+ }
+ \WithArrowsOptions { #2 }
+ \group_end:
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { Key~already~defined }
+ {
+ The~key~'#1'~is~already~defined. \\
+ If~you~go~on,~your~instruction~\token_to_str:N\WithArrowsNewStyle\
+ will~be~ignored.
+ }
+% \end{macrocode}
+%
+%
+% \subsection{The options up and down}
+%
+% The options |up| and |down| are available for individual arrows. The
+% corresponding code is given here. It is independent of the main code of the
+% extension \pkg{witharrows}.
+%
+% This code is the only part of the code of \pkg{witharrows} which uses the
+% package \pkg{varwidth} and also the Tikz library |calc|. That's why we have
+% decided not to load this package and this library. If they are not loaded, the
+% user will have an error only when using the option |up| or the option |down|.
+%
+% \medskip
+% The token list |\c_@@_tikz_code_up_tl| is the value of |tikz-code| which will
+% be used for an option |up|.
+% \begin{macrocode}
+\tl_const:Nn \c_@@_tikz_code_up_tl
+ {
+ \draw [ rounded~corners ]
+ let \p1 = (#1) ,
+ \p2 = (#2)
+ in (\p1) -- node {
+%<*LaTeX>
+ \dim_set:Nn \l_tmpa_dim { \x2 - \x1 }
+ \begin { varwidth } \l_tmpa_dim
+% \end{macrocode}
+% |\narrowragged| is a command of the package \pkg{varwidth}.
+% \begin{macrocode}
+ \narrowragged
+ #3
+ \end { varwidth }
+%</LaTeX>
+%<*plain-TeX>
+ #3
+%</plain-TeX>
+ }
+ (\x2,\y1) -- (\p2) ;
+ }
+% \end{macrocode}
+%
+%
+% \medskip
+% Idem for the option |down|.
+% \begin{macrocode}
+\tl_const:Nn \c_@@_tikz_code_down_tl
+ {
+ \draw [ rounded~corners ]
+ let \p1 = (#1) ,
+ \p2 = (#2)
+ in (\p1) -- (\x1,\y2) --
+ node {
+%<*LaTeX>
+ \dim_set:Nn \l_tmpa_dim { \x1 - \x2 }
+ \begin { varwidth } \l_tmpa_dim
+ \narrowragged
+ #3
+ \end { varwidth }
+%</LaTeX>
+%<*plain-TeX>
+ #3
+%</plain-TeX>
+ }
+ (\p2) ;
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\keys_define:nn { WithArrows / Arrow / FirstPass }
+ {
+ up .code:n = \@@_set_independent: ,
+ down .code:n = \@@_set_independent: ,
+ up .default:n = NoValue ,
+ down .default:n = NoValue
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\keys_define:nn { WithArrows / Arrow / SecondPass }
+ {
+ up .code:n =
+ \str_if_empty:NT \l_@@_previous_key_str
+ {
+ \str_set:Nn \l_@@_previous_key_str { up }
+%<*LaTeX>
+ \bool_if:NTF \c_@@_varwidth_loaded_bool
+ {
+%</LaTeX>
+ \cs_if_exist:cTF { tikz@library@calc@loaded }
+ {
+ \int_set:Nn \l_@@_pos_arrow_int \c_one_int
+% \end{macrocode}
+% We have to set |\l_@@_wrap_lines_bool| to |false| because, otherwise, if the
+% option |wrap_lines| is used at a higher level (global or environment), we will
+% have a special affectation to |tikz-code| that will overwrite our affectation.
+% \begin{macrocode}
+ \bool_set_false:N \l_@@_wrap_lines_bool
+ \tl_set_eq:NN \l_@@_tikz_code_tl
+ \c_@@_tikz_code_up_tl
+ }
+ { \@@_error:n { calc~not~loaded } }
+%<*LaTeX>
+ }
+ { \@@_error:n { varwidth~not~loaded } }
+%</LaTeX>
+ } ,
+ down .code:n =
+ \str_if_empty:NT \l_@@_previous_key_str
+ {
+ \str_set:Nn \l_@@_previous_key_str { down }
+%<*LaTeX>
+ \bool_if:NTF \c_@@_varwidth_loaded_bool
+ {
+%</LaTeX>
+ \cs_if_exist:cTF { tikz@library@calc@loaded }
+ {
+ \int_set:Nn \l_@@_pos_arrow_int \c_one_int
+ \bool_set_false:N \l_@@_wrap_lines_bool
+ \tl_set_eq:NN \l_@@_tikz_code_tl
+ \c_@@_tikz_code_down_tl
+ }
+ { \@@_error:n { calc~not~loaded } }
+%<*LaTeX>
+ }
+ { \@@_error:n { varwidth~not~loaded } }
+%</LaTeX>
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\seq_put_right:Nn \l_@@_options_Arrow_seq { down }
+\seq_put_right:Nn \l_@@_options_Arrow_seq { up }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\@@_msg_new:nn { varwidth~not~loaded }
+ {
+ You~can't~use~the~option~'\l_keys_key_tl'~because~
+ you~don't~have~loaded~the~package~'varwidth'. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { calc~not~loaded }
+ {
+ You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~
+ Tikz~library~'calc'.You~should~add~'\token_to_str:N\usetikzlibrary{calc}'~
+ ~in~the~preamble~of~your~document. \\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*plain-TeX>
+\catcode `\@ = 12
+\ExplSyntaxOff
+%</plain-TeX>
+% \end{macrocode}
+%
+% \section{History}
+%
+% \subsection*{Changes between versions 1.0 and 1.1}
+%
+% Option for the command |\\| and option |interline|
+%
+% Compatibility with |\usetikzlibrary{babel}|
+%
+% Possibility of nested environments |{WithArrows}|
+%
+%
+% \subsection*{Changes between versions 1.1 and 1.2}
+%
+% The package \pkg{witharrows} can now be loaded without having loaded
+% previously \pkg{tikz} and the libraries |arrow.meta| and |bending| (this
+% extension and these libraries are loaded silently by \pkg{witharrows}).
+%
+% New option |groups| (with a \emph{s})
+%
+%
+% \subsection*{Changes between versions 1.2 and 1.3}
+%
+% New options |ygap| and |ystart| for fine tuning.
+%
+% \subsection*{Changes between versions 1.3 and 1.4}
+%
+% The package \pkg{footnote} is no longer loaded by default. Instead, two
+% options |footnote| and |footnotehyper| have been added. In particular,
+% \pkg{witharrows} becomes compatible with \cls{beamer}.
+%
+% \subsection*{Changes between versions 1.4 and 1.5}
+%
+% The Tikz code used to draw the arrows can be changed with the option
+% |tikz-code|.
+%
+% Two new options |code-before| and |code-after| have been added at the
+% environment level.
+%
+% A special version of |\Arrow| is available in |code-after| in order to draw
+% arrows in nested environments.
+%
+% A command |\MultiArrow| is available in |code-after| to draw arrows of other
+% shapes.
+%
+% \subsection*{Changes between versions 1.5 and 1.6}
+%
+% The code has been improved to be faster and the Tikz library |calc| is no
+% longer required.
+%
+% A new option |name| is available for the environments |{WithArrows}|.
+%
+% \subsection*{Changes between 1.6 and 1.7}
+%
+% New environments |{DispWithArrows}| and |{DispWithArrows*}|.
+%
+% \subsection*{Changes between 1.7 and 1.8}
+%
+% The numbers and tags of the environment |{DispWithArrows}| are now compatible
+% with all the major LaTeX packages concerning references (\pkg{autonum},
+% \pkg{cleveref}, \pkg{fancyref}, \pkg{hyperref}, \pkg{prettyref},
+% \pkg{refstyle}, \pkg{typedref} and \pkg{varioref}) and with the options
+% |showonlyrefs| and |showmanualtags| of \pkg{mathtools}.
+%
+% \subsection*{Changes between 1.8 and 1.9}
+%
+% New option |wrap-lines| for the environments |{DispWithArrows}| and
+% |{DispWithArrows*}|.
+%
+% \subsection*{Changes between 1.9 and 1.10}
+%
+% If the option |wrap-lines| is used, the option ``|text width|'' of Tikz is
+% still active: if the value given to ``|text width|'' is lower than the width
+% computed by |wrap-lines|, this value is used to wrap the lines.
+%
+% The option |wrap-lines| is now fully compatible with the class option |leqno|.
+%
+% Correction of a bug: |\nointerlineskip| and |\makebox[.6\linewidth]{}| should
+% be inserted in |{DispWithArrows}| only in vertical mode.
+%
+% \subsection*{Changes between 1.10 and 1.11}
+%
+% New commands |\WithArrowsNewStyle| and |\WithArrowsRightX|.
+%
+% \subsection*{Changes between 1.11 and 1.12}
+%
+% New command |\tagnextline|.
+%
+% New option |tagged-lines|.
+%
+% An option of position (|ll|, |lr|, |rl|, |rr| or |i|) is now allowed at the
+% local level even if the option |group| or the option |groups| is used at the
+% global or environment level.
+%
+% Compatibility of |{DispWithArrows}| with |\qedhere| of \pkg{amsthm}.
+%
+% Compatibility with the packages \pkg{refcheck}, \pkg{showlabels} and
+% \pkg{listlbls}.
+%
+% The option |\AllowLineWithoutAmpersand| is deprecated because lines without
+% ampersands are now always allowed.
+%
+% \subsection*{Changes between 1.12 and 1.13}
+%
+% Options |start-adjust|, |end-adjust| and |adjust|.
+%
+% This version is not stricty compatible with previous ones. To restore the
+% behaviour of the previous versions, one has to use the option |adjust| with
+% the value $0$~pt:
+%
+% \begin{Verbatim}
+% \WithArrowsOptions{adjust = 0pt}
+% \end{Verbatim}
+%
+% \subsection*{Changes between 1.13 and 1.14}
+%
+% New options |up| and |down| for the arrows.
+%
+% \smallskip
+% Replacement of some options |O { }| in commands and environments defined with
+% \pkg{xparse} by |! O { }| (a recent version of \pkg{xparse} introduced
+% the specifier |!| and modified the default behaviour of the last optional
+% arguments:
+% |//www.texdev.net/2018/04/21/xparse-optional-arguments-at-the-end|).
+%
+% \smallskip
+% Modification of the code of |\WithArrowsNewStyle| following a correction of a
+% bug in \pkg{l3keys} in the version of \pkg{l3kernel} of 2019/01/28.
+%
+% New error message |Inexistent~v-node| to avoid a \pkg{pgf} error.
+%
+% The error |Option incompatible with 'group(s)'| was suppressed in the version
+% 1.12 but this was a mistake since this error is used with the option |xoffset|
+% at the local level. The error is put back.
+%
+% \subsection*{Changes between 1.14 and 1.15}
+%
+% Option |new-group| to start a new group of arrows (only available when the
+% environment is composed with the option |groups|).
+%
+% Tikz externalization is now deactivated in the environments of the
+% extension \pkg{witharrows}.\footnote{Before this version, there was an error
+% when using \pkg{witharrows} with Tikz externalization. In any case, it's not
+% possible to externalize the Tikz elements constructed by \pkg{witharrows}
+% because they use the options |overlay| and |remember picture|.}
+%
+% \subsection*{Changes between 1.15 and 1.16}
+%
+% Option |no-arrows|
+%
+% The behaviour of |{DispWithArrows}| after an |\item| of a LaTeX list has been
+% changed : no vertical is added. The previous behaviour can be restored with
+% the option |standard-behaviour-with-items|.
+%
+% A given name can no longer be used for two distinct environments. However,
+% it's possible to deactivate this control with the option
+% |allow-duplicate-names|.
+%
+%
+% \subsection*{Changes between 1.16 and 1.17}
+%
+% Option |format|
+%
+% \subsection*{Changes between 1.17 and 1.18}
+%
+% New option |<...>| for |{DispWithArrows}|.
+%
+% Option |subequations|.
+%
+% Warning when |{WithArrows}| or |{DispWithArrows}| ends by "\\".
+%
+% No space before an environnement |{DispWithArrows}| if we are at the beginning
+% of a |{minipage}|.
+%
+% \subsection*{Changes between 1.18 and 2.0}
+%
+% A version of \pkg{witharrows} is available for plain-TeX.
+%
+% \PrintIndex
+%
+% \tableofcontents
+%
+% \endinput
+% Local Variables:
+% TeX-fold-mode: nil
+% fill-column: 80
+% End:
diff --git a/macros/generic/witharrows/witharrows.ins b/macros/generic/witharrows/witharrows.ins
new file mode 100644
index 0000000000..bc0fccc6b3
--- /dev/null
+++ b/macros/generic/witharrows/witharrows.ins
@@ -0,0 +1,48 @@
+%%
+%% Copyright (C) 2017-2019 by F. Pantigny
+%%
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+\input l3docstrip.tex
+\keepsilent
+\usedir{tex/latex/witharrows}
+\preamble
+
+Copyright (C) 2017-2019 by F. Pantigny
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+\endpreamble
+\generate{\file{witharrows.sty}{\from{witharrows.dtx}{LaTeX}}
+ \file{witharrows.tex}{\from{witharrows.dtx}{plain-TeX}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space witharrows.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file witharrows.dtx}
+\Msg{* through XeLaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
+
diff --git a/macros/generic/witharrows/witharrows.pdf b/macros/generic/witharrows/witharrows.pdf
new file mode 100644
index 0000000000..2ee53b5af7
--- /dev/null
+++ b/macros/generic/witharrows/witharrows.pdf
Binary files differ
diff --git a/macros/generic/xcomment/Changes b/macros/generic/xcomment/Changes
new file mode 100644
index 0000000000..f72bd7101c
--- /dev/null
+++ b/macros/generic/xcomment/Changes
@@ -0,0 +1,9 @@
+xcomment.tex --------
+1.30 2010-05-14 - change license to lppl (hv)
+ - update documentation for LaTeX2e (hv)
+ - new LaTeX style file (hv)
+
+
+xcomment.sty --------
+1.00 2010-05-14 - LaTeX wrapper file for xcomment.tex
+
diff --git a/macros/generic/xcomment/Makefile b/macros/generic/xcomment/Makefile
new file mode 100644
index 0000000000..a18e9dabad
--- /dev/null
+++ b/macros/generic/xcomment/Makefile
@@ -0,0 +1,69 @@
+# `Makefile' for `xcomment.pdf', hv, 2007/03/17
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = xcomment
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+ GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+# if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+# if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+# makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+# makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+# $(basename $<).glo
+# bibtex $(basename $<)
+# $(LATEX) $<
+# $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro ~/Links/dvips-local/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/macros/generic/xcomment/README b/macros/generic/xcomment/README
new file mode 100644
index 0000000000..1fd053b81d
--- /dev/null
+++ b/macros/generic/xcomment/README
@@ -0,0 +1,9 @@
+Save the files xcomment.sty|tex in a directory, which is part of your
+local TeX tree.
+Then do not forget to run texhash to update this tree.
+For more information see the documentation of your LATEX distribution
+on installing packages into your LATEX distribution or the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+
diff --git a/macros/generic/xcomment/xcomment-doc.pdf b/macros/generic/xcomment/xcomment-doc.pdf
new file mode 100644
index 0000000000..6c93123858
--- /dev/null
+++ b/macros/generic/xcomment/xcomment-doc.pdf
Binary files differ
diff --git a/macros/generic/xcomment/xcomment-doc.tex b/macros/generic/xcomment/xcomment-doc.tex
new file mode 100644
index 0000000000..28da642cab
--- /dev/null
+++ b/macros/generic/xcomment/xcomment-doc.tex
@@ -0,0 +1,554 @@
+%% $Id: xcomment-doc.tex 316 2010-05-14 21:32:34Z herbert $
+\documentclass[12pt]{article}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo,url}
+\usepackage{pstricks,xcomment,fancyvrb,shortvrb,dtklogos}
+\MakeShortVerb{|}
+
+\let\XCfv\fileversion
+\let\meta\texttt
+
+\title{Documentation for xcomment.sty%
+ \thanks{Documentation revised by Herbert Vo\ss.
+ This file borrows much from verbatim.sty, v.1.4c (90/10/18)
+ Copyright (C) 1989, 1990 by Rainer Sch\"opf.}}
+
+\author{Timothy Van Zandt \url{Timothy.VAN-ZANDT@insead.edu}}
+
+\date{\today}
+
+\begin{document}
+
+\maketitle
+\clearpage
+\tableofcontents
+
+\clearpage
+\fvset{numbers=left,frame=single,fontsize=\small,fontfamily=tt}
+
+\begin{abstract}
+The \LaTeX{} style option verbatim.sty, by Rainer Sch\"opf, allows one to
+redefine an environment to be a comment, and thereby selectively omit
+certain environments when typesetting a document.
+Suppose instead that one wants to typeset only selected environments? For
+example, one might want to print only a document's tables and figures,
+without having to enclose all the text outside these environments within
+comments. This style option allows such selection.
+\end{abstract}
+
+\section{Usage notes}
+
+This style file defines a new environment, |xcomment|, which permits one to
+typeset only selected environments, without having to enclose all the text
+outside these environments within comments. The main interest in such a
+feature is that it allows document styles to have great control over what
+parts of a document are typeset, thus extending the modularity of \LaTeX.
+For example, this option was originally written for use in a document style
+for seminar notes and slides. The main text of the input file consists of
+the notes for a seminar, and each slide goes in a |slide| environment. A
+simple modification of the style options allows one to typeset only the
+slides, only the notes, or both together, in a variety of styles.
+
+
+The |xcomment| environment has as a single mandatory argument a list
+(possibly empty) of environments, separated by commas and with no spaces.
+Within the |xcomment| environment, only text within each of the specified
+environments is typeset.
+The |\xcomment| command can also be used directly, with the same argument,
+and it would typically go in the preamble. Invoking the |\xcomment| command
+is equivalent to putting |\begin{xcomment}| at the invocation of the command
+or immediately after |\begin{document}|, whichever occurs later in the
+document, and |\end{xcomment}| just before the end of the document.
+
+For example, if |\xcomment{table,figure}| is put in the preamble, only
+tables and figures are typeset (but see |\nofloat| below). If the list of
+environments is empty, as in |\begin{xcomment}{}|, the |xcomment|
+environment is essentially like the |comment| environment in verbatim.sty.
+
+|xcomment| environments can be nested, but if the nested environments
+have the same name, the inner environments must be inside text that is
+typeset as specified by the |xcomment| environment the next level up.
+
+Here is an example of such nesting. Suppose we want to include only figures,
+but we also want to be able to comment out some of the figures so that they
+are not included. This is achieved in the following example:
+\begin{Verbatim}
+\newxcomment[]{mycomment}
+\begin{xcomment}{figure,mycomment}
+ This is stuff that is not included.
+ \begin{figure}
+ This figure is included.
+ \end{figure}
+ More stuff that is not included.
+ \begin{mycomment} Out and back into comment mode
+ \begin{figure} Ignored by mycomment envir.
+ This figure is NOT included.
+ \end{figure} Also ignored by mycomment envir.
+ \end{mycomment} In and back out of comment mode.
+ More stuff that is not included.
+\end{xcomment}
+\end{Verbatim}
+
+|xcomment| will follow |\input| and |\include| commands. You must use the
+\LaTeX{} syntax |\input{file}| (as opposed to \verb*+\input file +), and the
+inputted file must end with |\endinput|.
+You should be in |xcomment| mode when the |\endinput| command occurs
+if and only if you were in |\xcomment| mode when the |\input| or |\include|
+command was found.
+
+ |xcomment| is searching literally for |\begin{foo}| and |\end{foo}| when
+determining whether to switch in or out of comment mode. It will not find,
+e.g., |!begin[foo]|, even if |!|, |[| or |]| have category codes 0, 1 and 2,
+respectively. (If you don't understand this, you can safely ignore it.)
+
+The comment character, |%|, is still a comment character in |xcomment|
+environments (even if used with |\%|). You can change the command character by
+redefining |\xcommentchar|. For example, if I want to use |"| as a comment
+character:
+\begin{Verbatim}
+ \renewcommand{\xcommentchar}{\"}
+\end{Verbatim}
+If you define |\xcommentchar| to be empty, then no comment character is used.
+
+In the |xcomment| environment, text is processed a line at a time and
+discarded until |\end{xcomment}| or |\begin{|\meta{environment}|}| is
+encountered, where {\em environment} is to be included. The remaining text
+on the line is not thrown away, as it is in verbatim.sty. Instead, it is
+rescanned, and the only restrictions are that it have balanced braces and
+that it not contain commands that again shift into {\em and} out of
+``comment'' mode.
+
+This is an important feature, because the included environments may have
+arguments that are best placed on the same line as the
+|\begin{|\meta{environment}|}| command. However, the rescanning creates a
+temporary file. By default, the file is |\jobname.tmp|. The command
+|\rescanfile{|\meta{file}|}| causes \meta{file} to be created instead.
+|\rescanfile{}| suppresses the creation of a temporary file; the leftover
+text is simply discarded. |\norescanfile| also suppresses the creation
+of a temporary file, but in this case the text is simply inserted
+without being rescanned (i.e., with category codes 0 (escape
+|\|), 1 (begin group |{|), 2 (end group |}|) and 6 (parameter |#|) switched
+to 12 (other).
+
+The command |\envirsep| is executed between the environments that are
+typeset. Its default definition is |\par|.
+
+The command
+\begin{Verbatim}
+ \newxcomment[|\meta{environment list}|]{|\meta{name}|}
+\end{Verbatim}
+defines |\name| and the |name| environment to work like |\xcomment| and the
+|xcomment| environment. A list of environments to be included can be given
+as an optional first argument to |\newxcomment|, in which case the new
+command and environment do not take an argument. For example, if you put
+|\newxcomment[]{mycomment}| in the preamble, the |mycomment| environment
+works like the |comment| environment in verbatim.sty, except for the
+rescanning.
+
+The command |\nofloat{|\meta{environment list}|}| is provided to disable the
+floating of environments in the list (also separated by commas and without
+spaces), since if there are only floats and no text, the floats will
+accumulate to the end of the document and \TeX{} may run out of memory.
+
+\paragraph{Caveats:}
+\begin{itemize}
+\item If |\xcomment| is invoked in the preamble, |\document| should not be
+subsequently redefined.
+\item Be careful what argument you give to |\rescanfile|, since any existing
+file with that name will be destroyed, and the extension |tex| is added if
+no extension is given.
+\end{itemize}
+
+\paragraph{Changes to v1.2:}
+\begin{itemize}
+\item |\include| now allowed.
+\item Comment characters not obeyed, as determined by |\xcommentchar|.
+\end{itemize}
+
+\paragraph{Changes to v1.1:}
+\begin{itemize}
+\item Fixed bug in |\@xcomment| that caused problems when invoking |\xcomment|
+in the preamble.
+\end{itemize}
+
+\paragraph{Changes to v1.0:}
+\begin{itemize}
+\item Main loop rewritten.
+\item |\rescanfile{trash}| changed to |\rescanfile{}|.
+\item |\rescanfile{bounce}| no longer supported. Use |\norescanfile|.
+\item |\input| now allowed.
+\end{itemize}
+
+
+
+
+\section{The implementation}
+The code is an adaption of code in verbatim.sty, and in fact the latter's
+structure has been preserved when possible. On the one hand, the code is
+simpler than in verbatim.sty because we throw away text from the input file
+rather than typeset it verbatim. On the other hand, it is more involved
+because we have to check for more possible endings to the |xcomment| than in
+verbatim.sty and we have to preserve the input that follows the |\begin|ning
+of an included environment on the same line.
+
+As in verbatim.sty and the |\comment\endcomment| commands in \AmSTeX, the
+basic strategy is to change the category codes so that control sequences and
+other troublesome special characters are neutralized, and then to scan for
+the strings that mark the end of the comment. This would be a 3-liner in
+|awk|, but this is \TeX, and the amount of code required to do the scanning
+increases rapidly as we allow for a greater variety of ending strings.
+
+We begin by ensuring that file is not read in twice, and then we identify
+the file on the VDU and the transcript file.
+
+\fvset{fontsize=\footnotesize}
+
+\begin{Verbatim}
+\@ifundefined{xcomment@@@}{}{\endinput}
+\typeout{Style-Option: `xcomment' v\fileversion \space <\filedate> (tvz) }
+\end{Verbatim}
+
+
+\subsection{User commands}
+
+The main toplevel macro is |\@xcomment|, which is defined in the next
+section. It works like |\xcomment| as described above, except that it has as
+a first argument an {\em environment} so that it stops when it encounters
+|\end{|{\em environment}|}|. |\newxcomment| then has a simple definition,
+and |\xcomment| is defined using the |\newxcomment| command.
+\begin{Verbatim}
+\def\newxcomment{\@ifnextchar [{\@newxcommentwitharg}%
+ {\@newxcomment}}
+\def\@newxcomment#1{%
+ \expandafter\def\csname #1\endcsname##1{\@xcomment{#1}{##1}}}%
+\def\@newxcommentwitharg[#1]#2{%
+ \expandafter\def\csname #2\endcsname{\@xcomment{#2}{#1}}}
+\newxcomment{xcomment}
+\end{Verbatim}
+%
+|\envirsep| is inserted between the environments that are typeset, and is
+set to |\par| by default. |\rescanfile| is the name of the temporary file
+used for rescanning, and is set to |\jobname.tmp| by default.
+\begin{Verbatim}
+\def\envirsep{\par}
+\def\rescanfile#1{\def\@rescanfile{#1}}
+\rescanfile{\jobname.tmp}
+\def\norescanfile{\let\@rescanfile\relax}
+\end{Verbatim}
+%
+|\nofloat| disables floating, and |\vfill| is inserted forcefully on each
+side of each float. The macro is just a hack, and is mainly for printing
+only floats. It may not work well even for that. |\envirsep| is still
+inserted between floats, and if it is set to |\vspace{}|, the added space is
+inserted only between floats on the same page, given the user some control
+over spacing.
+\begin{Verbatim}
+\def\@nofloat#1{\hrule height\z@\nobreak\vfill\vbox\bgroup\def\@captype{#1}}
+\def\end@nofloat{\egroup\nobreak\vfill\nobreak\hrule height\z@\medbreak}
+\def\nofloat#1{\@for\@tempa:=#1\do{\@namedef{#1}{\@nofloat{#1}}%
+ \@namedef{end#1}{\end@nofloat}}}
+\end{Verbatim}
+
+
+\subsection{Preliminaries}
+%
+|\xc@makeother| takes as argument a character and changes
+its category code to $12$ (other) if its category code is originally 0, 1, 2
+or 6. We do not have to change as many catcodes as in Verbatim.sty, because
+the input is either thrown away or rescanned. The fewer codes we change the
+better.
+\begin{Verbatim}
+\def\xc@makeother#1{%
+ \ifnum\the\catcode`#1=0\catcode`#112%
+ \else \ifnum\the\catcode`#1=1\catcode`#112%
+ \else \ifnum\the\catcode`#1=2\catcode`#112%
+ \else \ifnum\the\catcode`#1=6\catcode`#112%
+ \fi\fi\fi\fi\relax}
+ \end{Verbatim}
+
+This macro changes the category codes of a token list that is already in
+\TeX's stomach. The code is a modification of a |\retokenize| macro by
+Raymond Chen.
+\begin{Verbatim}
+\newwrite\tokout
+\newread\tokin
+\end{Verbatim}
+The argument of |\rescan| is a token list register, say, |\mytoks|.
+|\mytoks| presumably contains a string from the input file, sent to |\TeX|'s
+stomach as a stream of tokens. |\rescan| gives |\mytoks| the token list that
+would have arisen if |\TeX| had had the current catcodes in effect when it
+read the input string, with the following exceptions:
+
+\begin{itemize}
+\item The token list must have balanced braces under the new catcodes.
+\item Parameter tokens in the original list are written twice, and so mess
+things up.
+\item Some characters with catcode 10 (space) under the old catcodes are
+lost, and all that remain are treated as character 32 (\verb*+ +) under the
+new catcodes, whatever this character's new catcode is.
+\item Escape characters under the old catcodes are treated as escape
+characters even if their catcodes have changed. (This can be fixed by
+setting |\escapchar| during the write to the escape character under the old
+catcodes, assuming there was only one and it is known)
+\item Leading spaces under the new catcodes are not ignored, which is wrong
+if and only if the string started at the beginning of a line and the space
+characters were not spaces under the old catcodes.
+\end{itemize}
+
+Only the balanced braces exception is a problem in this application, but the
+other exceptions are pointed out since such a rescanning macro has other
+applications.
+\begin{Verbatim}
+\def\rescan#1{%
+\end{Verbatim}
+First we check if |\rescanfile|, which contains the name of the temporary
+file to be used, has a special meaning. If |\relax|, do nothing. If empty,
+empty the token register.
+\begin{Verbatim}
+ \ifx\@rescanfile\relax\else
+ \ifx\@rescanfile\@empty #1{}\else
+\end{Verbatim}
+Put the list of tokens in braces and write them to the temporary file.%
+\begin{Verbatim}
+ \immediate\openout\tokout=\@rescanfile
+ \immediate\write\tokout{{\the#1}\relax}%
+ \immediate\closeout\tokout
+\end{Verbatim}
+Read the contents of the file |\@tempd|.
+\begin{Verbatim}
+ \openin\tokin=\@rescanfile
+ \read\tokin to\@tempd
+ \closein\tokin
+\end{Verbatim}
+Suppose |#1| is |\mytok|, and \meta{token list} is the list of tokens with
+the current catcodes. Then the next line expands to |\mytok{|\meta{token
+list}|}\relax|.
+\begin{Verbatim}
+ \expandafter#1\@tempd%
+ \fi\fi}
+\end{Verbatim}
+%
+%
+\subsection{Toplevel macros}
+%
+|\@xcomment| checks whether it was invoked before |\begin{document}| and
+outside of an environment. If so, it modifies |\begin{document}| to invoke
+|\@xcomment| with the same arguments. Otherwise, it processes its arguments
+and goes into ``comment'' mode by invoking |\xc@begin|.
+
+\begin{Verbatim}
+\def\@xcomment#1#2{%
+ \ifx\@preamblecmds\@notprerr
+ \def\xc@csname{#1}%
+ \edef\xc@envirlist{#2}%
+ \ifx\xc@envirlist\@empty \@bsphack \else
+ \begingroup
+\end{Verbatim}
+|\@envirsep| is what is actually placed before each environment. Initially,
+it is empty because nothing should precede the first environment that is
+typeset.
+\begin{Verbatim}
+ \def\@envirsep{}%
+\end{Verbatim}
+|\do@end| is appended to the meaning of |\end|, and it is initially set to
+|\xc@begin|. This means that the |\end| of an included environment switches
+us back into ``comment'' mode, as desired. The |\end| of nested environments
+should have their usual meaning, however. Therefore, |\do@begin| is
+prepended to the definition of |\begin|, and it sets |\do@end| to |\relax|.
+Included environment are begun with |\normal@begin| because we only want to
+reset |\do@end| for nested environements. The group begun above keeps the
+|\end| of the |xcomment| environment from be being affected by these
+changes.
+
+\begin{Verbatim}
+ \@ifundefined{normal@begin}{\let\normal@begin\begin}{}%
+ \@ifundefined{normal@end}{\let\normal@end\end}{}%
+ \def\begin##1{\do@begin{##1}\normal@begin{##1}}%
+ \def\end##1{\normal@end{##1}\do@end}%
+ \def\do@begin##1{\@ifundefined{##1}{}{\def\do@end{}}}%
+ \let\do@end\xc@begin
+ \fi
+ \let\next\xc@begin
+ \else
+ \expandafter\@temptokena\expandafter{\document\@xcomment{@@@}{#2}}%
+ \edef\document{\the\@temptokena}%
+ \let\next\relax
+ \fi
+ \next}
+\def\end@xcomment{\ifx\xc@envirlist\@empty \@esphack \else \endgroup \fi}%
+\end{Verbatim}
+%
+|\xc@begin| starts up ``comment'' mode by changing the category codes and
+invoking |\xcomment@|. The |\begingroup| keeps these catcode changes local.
+\begin{Verbatim}
+\def\xc@begin{%
+ \begingroup
+ \let\do\xc@makeother
+ \dospecials
+ \ifx\xcommentchar\@empty\else
+ \expandafter\catcode\expandafter`\xcommentchar=14
+ \fi
+ \catcode`\^^M\active
+ \xcomment@}
+\def\xcommentchar{\%}
+\end{Verbatim}
+
+
+\end{document}
+
+\subsection{The main loop}
+
+Since the code in the main loop uses literal |\|, |{|, |}|, |%| and newline
+characters, we represent them with |!|, |[|, |]| |"| and |~| by setting the
+corresponding lccodes to the correponding character but with catcode 12, and
+then changing the code to lowercase before executing the macro definitions.
+These catcode changes are kept local, and the macros must therefore be
+defined globally.
+\begin{Verbatim}
+\begingroup
+\catcode`\!=12
+\catcode`\[=12
+\catcode`\]=12
+\catcode`\"=12
+\lccode`\!=`\\
+\lccode`\[=`\{
+\lccode`\]=`\}
+\lccode`\"=`\%
+\catcode`\~=\active
+\lccode`\~=`\^^M
+\lowercase{
+\end{Verbatim}
+
+The three macros |\xcomment@|, |\xcomment@@|, and |\xcomment@@@| form the
+main loop when in ``comment'' mode. |\xcomment@| reads a line of input.
+|\xcomment@@| searches for the first occurence of a backslash.
+|\xcomment@@@| checks what the next character is, and depending an the
+answer various macros are invoked to see if one of the termination strings
+has been found.
+%
+|\xcomment@| takes the line it has read, puts |\@nnil| |\| and |\@nil| as
+delimiters at the end, and then calls |\xcomment@@|.
+\begin{Verbatim}
+ \gdef\xcomment@#1~{\xcomment@@#1\@nnil!\@nil}
+\end{Verbatim}
+%
+|\xcomment@@| takes everything up to the next occurrence of |\| as its
+argument and throws it away together with the |\|. Then |\xcomment@@@| reads
+the next token on the line, including the delimiters added by |\xcomment@|.
+\begin{Verbatim}
+ \gdef\xcomment@@#1!{\xcomment@@@}
+\end{Verbatim}
+
+|\xcomment@@@| checks for key strings.
+\begin{Verbatim}
+ \gdef\xcomment@@@#1\@nil{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \let\next\xcomment@
+ \else
+ \def\next{\xcomment@@#1\@nil}%
+ \@testtrue
+ \xc@checkbegin#1\relax begin[]\relax\relax
+ \if@test
+ \xc@checkend#1\relax end[]\relax\relax
+ \if@test
+ \xc@checkinput#1\relax input[]\relax\relax
+ \if@test
+ \xc@checkinclude#1\relax include[]\relax\relax
+ \if@test
+ \xc@checkendinput#1\relax endinputss\relax\relax
+ \fi\fi\fi\fi\fi
+ \next}
+\end{Verbatim}
+%
+Check for |\begin| and |\end|.
+\begin{Verbatim}
+ \gdef\xc@checkbegin#1begin[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \def\@tempa{#2}%
+ \@for\@tempb:=\xc@envirlist\do{%
+ \ifx\@tempa\@tempb\def\next{\xc@end{#2}#3\@nil}\fi}%
+ \fi}
+ \gdef\xc@checkend#1end[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \@testfalse
+ \def\@tempa{#2}\def\@tempb{document}%
+ \ifx\@tempa\@tempb
+ \def\next{\endgroup\end@xcomment\end{document}}%
+ \else
+ \ifx\@tempa\xc@csname
+ \def\next{\end@@xcomment{#2}#3\@nil}%
+ \fi\fi\fi}
+\end{Verbatim}
+
+Check for |\input| and |\endinput|.
+\begin{Verbatim}
+ \gdef\xc@checkinput#1input[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \def\next{\expandafter\xcomment@\@@input #2 \xcomment@@#3\@nil}%
+ \@testfalse
+ \fi}
+ \gdef\xc@checkendinput#1endinput#2#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty\ifcat\noexpand#2a\relax\else
+ \let\next\endinput
+ \fi\fi}
+\end{Verbatim}
+
+Check for |\input| and |\endinput|.
+\begin{Verbatim}
+ \gdef\xc@checkinclude#1include[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \def\next{%
+ \global\let\xc@savedinput\@@input
+ \def\@@input{%
+ \global\let\@@input\xc@savedinput
+ \expandafter\xcomment@\@@input}%
+ \include{#2}%
+ \global\let\@@input\xc@savedinput
+ \xcomment@@#3\@nil}%
+ \@testfalse
+ \fi}
+ \end{Verbatim}
+
+
+When exiting the |xcomment| environment, we only have to be careful to
+rescan the line. Note that if get this far, all three delimiters appended to
+the current line are intact. We append a space before rescanning, because of
+a \meta{return} that was stripped by |\xcomment@|.
+\begin{Verbatim}
+ \gdef\end@@xcomment#1#2\@nnil!\@nil{%
+ \endgroup
+ \toks@{#2 }\rescan{\toks@}%
+ \edef\next{\noexpand\end@xcomment\noexpand\end{#1}\the\toks@}%
+ \next}%
+\end{Verbatim}
+%
+%
+When exiting ``comment'' mode to typeset an included environment, we have to
+get rid of the delimiters added to the current line. The |\endgroup| ends
+the scope of the catcodes changes. The first time an environment is typeset,
+|\@envirsep| is null. Thereafter,
+it is set to |\envirsep|.
+\begin{Verbatim}
+ \gdef\xc@end#1#2\@nnil!\@nil{%
+ \endgroup
+ \@envirsep \let\@envirsep\envirsep
+ \toks@{#2 }\rescan{\toks@}%
+ \edef\next{\noexpand\normal@begin{#1}\the\toks@}%
+ \next}%
+\end{Verbatim}
+
+
+Now we end the lowercase command and the group that were used to insert
+literal |\|, |{| and |}| characters in the code.
+\begin{Verbatim}
+ } END OF LOWERCASE
+\endgroup
+\end{Verbatim}
+%
+\end{document}
diff --git a/macros/generic/xcomment/xcomment.sty b/macros/generic/xcomment/xcomment.sty
new file mode 100644
index 0000000000..4bb03a5f67
--- /dev/null
+++ b/macros/generic/xcomment/xcomment.sty
@@ -0,0 +1,8 @@
+%% $Id: xcomment.sty 315 2010-05-14 21:31:03Z herbert $
+\ProvidesPackage{xcomment}[2010/05/13 package wrapper for
+ xcomment.tex (hv)]
+\input{xcomment.tex}
+\ProvidesFile{xcomment.tex}
+ [\filedate\space v\fileversion\space `xcomment' (tvz)]
+\endinput
+
diff --git a/macros/generic/xcomment/xcomment.tex b/macros/generic/xcomment/xcomment.tex
new file mode 100644
index 0000000000..e8888f904a
--- /dev/null
+++ b/macros/generic/xcomment/xcomment.tex
@@ -0,0 +1,171 @@
+%% $Id: xcomment.tex 316 2010-05-14 21:32:34Z herbert $
+%%
+%% COPYRIGHT 1993/2010, by Timothy Van Zandt, tvz@Princeton.EDU
+%% COPYRIGHT 2010, by Herbert Voss, hvoss@tug.org
+%%
+%% DESCRIPTION:
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+\def\fileversion{1.3}
+\def\filedate{10/05/14}
+%%
+\@ifundefined{xcomment@@@}{}{\endinput}
+\typeout{Style-Option: `xcomment' v\fileversion \space <\filedate> (tvz) }
+\def\newxcomment{\@ifnextchar [{\@newxcommentwitharg}{\@newxcomment}}
+\def\@newxcomment#1{%
+ \expandafter\def\csname #1\endcsname##1{\@xcomment{#1}{##1}}}%
+\def\@newxcommentwitharg[#1]#2{%
+ \expandafter\def\csname #2\endcsname{\@xcomment{#2}{#1}}}
+\newxcomment{xcomment}
+\def\envirsep{\par}
+\def\rescanfile#1{\def\@rescanfile{#1}}
+\rescanfile{\jobname.tmp}
+\def\norescanfile{\let\@rescanfile\relax}
+\def\@nofloat#1{\hrule height\z@\nobreak\vfill\vbox\bgroup\def\@captype{#1}}
+\def\end@nofloat{\egroup\nobreak\vfill\nobreak\hrule height\z@\medbreak}
+\def\nofloat#1{\@for\@tempa:=#1\do{\@namedef{#1}{\@nofloat{#1}}%
+ \@namedef{end#1}{\end@nofloat}}}
+\def\xc@makeother#1{%
+ \ifnum\the\catcode`#1=0\catcode`#112%
+ \else \ifnum\the\catcode`#1=1\catcode`#112%
+ \else \ifnum\the\catcode`#1=2\catcode`#112%
+ \else \ifnum\the\catcode`#1=6\catcode`#112%
+ \fi\fi\fi\fi\relax}
+\newwrite\tokout
+\newread\tokin
+\def\rescan#1{%
+ \ifx\@rescanfile\relax\else
+ \ifx\@rescanfile\@empty #1{}\else
+ \immediate\openout\tokout=\@rescanfile
+ \immediate\write\tokout{{\the#1}\relax}%
+ \immediate\closeout\tokout
+ \openin\tokin=\@rescanfile
+ \read\tokin to\@tempd
+ \closein\tokin
+ \expandafter#1\@tempd%
+ \fi\fi}
+\def\@xcomment#1#2{%
+ \ifx\@preamblecmds\@notprerr
+ \def\xc@csname{#1}%
+ \edef\xc@envirlist{#2}%
+ \ifx\xc@envirlist\@empty \@bsphack \else
+ \begingroup
+ \def\@envirsep{}%
+ \@ifundefined{normal@begin}{\let\normal@begin\begin}{}%
+ \@ifundefined{normal@end}{\let\normal@end\end}{}%
+ \def\begin##1{\do@begin{##1}\normal@begin{##1}}%
+ \def\end##1{\normal@end{##1}\do@end}%
+ \def\do@begin##1{\@ifundefined{##1}{}{\def\do@end{}}}%
+ \let\do@end\xc@begin
+ \fi
+ \let\next\xc@begin
+ \else
+ \expandafter\@temptokena\expandafter{\document\@xcomment{@@@}{#2}}%
+ \edef\document{\the\@temptokena}%
+ \let\next\relax
+ \fi
+ \next}
+\def\end@xcomment{\ifx\xc@envirlist\@empty \@esphack \else \endgroup \fi}%
+\def\xc@begin{%
+ \begingroup
+ \let\do\xc@makeother
+ \dospecials
+ \ifx\xcommentchar\@empty\else
+ \expandafter\catcode\expandafter`\xcommentchar=14
+ \fi
+ \catcode`\^^M\active
+ \xcomment@}
+\def\xcommentchar{\%}
+\begingroup
+\catcode`\!=12
+\catcode`\[=12
+\catcode`\]=12
+\catcode`\"=12
+\lccode`\!=`\\
+\lccode`\[=`\{
+\lccode`\]=`\}
+\lccode`\"=`\%
+\catcode`\~=\active
+\lccode`\~=`\^^M
+\lowercase{
+ \gdef\xcomment@#1~{\xcomment@@#1\@nnil!\@nil}
+ \gdef\xcomment@@#1!{\xcomment@@@}
+ \gdef\xcomment@@@#1\@nil{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \let\next\xcomment@
+ \else
+ \def\next{\xcomment@@#1\@nil}%
+ \@testtrue
+ \xc@checkbegin#1\relax begin[]\relax\relax
+ \if@test
+ \xc@checkend#1\relax end[]\relax\relax
+ \if@test
+ \xc@checkinput#1\relax input[]\relax\relax
+ \if@test
+ \xc@checkinclude#1\relax include[]\relax\relax
+ \if@test
+ \xc@checkendinput#1\relax endinputss\relax\relax
+ \fi\fi\fi\fi\fi
+ \next}
+ \gdef\xc@checkbegin#1begin[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \def\@tempa{#2}%
+ \@for\@tempb:=\xc@envirlist\do{%
+ \ifx\@tempa\@tempb\def\next{\xc@end{#2}#3\@nil}\fi}%
+ \fi}
+ \gdef\xc@checkend#1end[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \@testfalse
+ \def\@tempa{#2}\def\@tempb{document}%
+ \ifx\@tempa\@tempb
+ \def\next{\endgroup\end@xcomment\end{document}}%
+ \else
+ \ifx\@tempa\xc@csname
+ \def\next{\end@@xcomment{#2}#3\@nil}%
+ \fi\fi\fi}
+ \gdef\xc@checkinput#1input[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \def\next{\expandafter\xcomment@\@@input #2 \xcomment@@#3\@nil}%
+ \@testfalse
+ \fi}
+ \gdef\xc@checkendinput#1endinput#2#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty\ifcat\noexpand#2a\relax\else
+ \let\next\endinput
+ \fi\fi}
+ \gdef\xc@checkinclude#1include[#2]#3\relax#4\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \def\next{%
+ \global\let\xc@savedinput\@@input
+ \def\@@input{%
+ \global\let\@@input\xc@savedinput
+ \expandafter\xcomment@\@@input}%
+ \include{#2}%
+ \global\let\@@input\xc@savedinput
+ \xcomment@@#3\@nil}%
+ \@testfalse
+ \fi}
+ \gdef\end@@xcomment#1#2\@nnil!\@nil{%
+ \endgroup
+ \toks@{#2 }\rescan{\toks@}%
+ \edef\next{\noexpand\end@xcomment\noexpand\end{#1}\the\toks@}%
+ \next}%
+ \gdef\xc@end#1#2\@nnil!\@nil{%
+ \endgroup
+ \@envirsep \let\@envirsep\envirsep
+ \toks@{#2 }\rescan{\toks@}%
+ \edef\next{\noexpand\normal@begin{#1}\the\toks@}%
+ \next}%
+ }% END OF LOWERCASE
+\endgroup
+\endinput
+%%
+%% End of file `xcomment.sty'.
diff --git a/macros/generic/xint/CHANGES.html b/macros/generic/xint/CHANGES.html
new file mode 100644
index 0000000000..5eddbff512
--- /dev/null
+++ b/macros/generic/xint/CHANGES.html
@@ -0,0 +1,833 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <meta name="author" content="xint 1.3e" />
+ <title>CHANGE LOG</title>
+ <style type="text/css">
+ code{white-space: pre-wrap;}
+ span.smallcaps{font-variant: small-caps;}
+ span.underline{text-decoration: underline;}
+ div.column{display: inline-block; vertical-align: top; width: 50%;}
+ </style>
+ <style type="text/css">
+ body{margin-left : 10%; margin-right : 15%; margin-top: 4ex; font-size: 12pt;}
+ pre {white-space: pre-wrap;}
+ code {white-space: pre-wrap;}
+ #TOC {float: right; position: relative; top: 100px; margin-bottom: 100px;}
+ </style>
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+</head>
+<body>
+<header>
+<h1 class="title">CHANGE LOG</h1>
+<p class="author">xint 1.3e</p>
+<p class="date">2019/04/05</p>
+</header>
+<nav id="TOC">
+<ul>
+<li><a href="#e-20190405"><code>1.3e (2019/04/05)</code></a><ul>
+<li><a href="#incompatible-changes">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features">Improvements and new features</a></li>
+<li><a href="#bug-fixes">Bug fixes</a></li>
+</ul></li>
+<li><a href="#d-20190106"><code>1.3d (2019/01/06)</code></a><ul>
+<li><a href="#incompatible-changes-1">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-1">Improvements and new features</a></li>
+<li><a href="#bug-fixes-1">Bug fixes</a></li>
+</ul></li>
+<li><a href="#c-20180617"><code>1.3c (2018/06/17)</code></a><ul>
+<li><a href="#improvements-and-new-features-2">Improvements and new features</a></li>
+<li><a href="#bug-fixes-2">Bug fixes</a></li>
+</ul></li>
+<li><a href="#b-20180518"><code>1.3b (2018/05/18)</code></a><ul>
+<li><a href="#improvements-and-new-features-3">Improvements and new features</a></li>
+</ul></li>
+<li><a href="#a-20180307"><code>1.3a (2018/03/07)</code></a><ul>
+<li><a href="#removed">Removed</a></li>
+<li><a href="#improvements-and-new-features-4">Improvements and new features</a></li>
+<li><a href="#bug-fixes-3">Bug fixes</a></li>
+</ul></li>
+<li><a href="#section"><code>1.3 (2018/03/01)</code></a><ul>
+<li><a href="#incompatible-changes-2">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-5">Improvements and new features</a></li>
+</ul></li>
+<li><a href="#q-20180206"><code>1.2q (2018/02/06)</code></a><ul>
+<li><a href="#improvements-and-new-features-6">Improvements and new features</a></li>
+<li><a href="#bug-fixes-4">Bug fixes</a></li>
+</ul></li>
+<li><a href="#p-20171205"><code>1.2p (2017/12/05)</code></a><ul>
+<li><a href="#incompatible-changes-3">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-7">Improvements and new features</a></li>
+<li><a href="#bug-fixes-5">Bug fixes</a></li>
+</ul></li>
+<li><a href="#o-20170829"><code>1.2o (2017/08/29)</code></a><ul>
+<li><a href="#incompatible-changes-4">Incompatible changes</a></li>
+<li><a href="#deprecated">Deprecated</a></li>
+</ul></li>
+<li><a href="#n-20170806"><code>1.2n (2017/08/06)</code></a><ul>
+<li><a href="#incompatible-changes-5">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-8">Improvements and new features</a></li>
+</ul></li>
+<li><a href="#m-20170731"><code>1.2m (2017/07/31)</code></a><ul>
+<li><a href="#incompatible-changes-6">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-9">Improvements and new features</a></li>
+<li><a href="#bug-fixes-6">Bug fixes</a></li>
+</ul></li>
+<li><a href="#l-20170726"><code>1.2l (2017/07/26)</code></a><ul>
+<li><a href="#removed-1">Removed</a></li>
+<li><a href="#improvements-and-new-features-10">Improvements and new features</a></li>
+<li><a href="#bug-fixes-7">Bug fixes</a></li>
+</ul></li>
+<li><a href="#k-20170106"><code>1.2k (2017/01/06)</code></a><ul>
+<li><a href="#incompatible-changes-7">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-11">Improvements and new features</a></li>
+<li><a href="#bug-fixes-8">Bug fixes</a></li>
+</ul></li>
+<li><a href="#j-20161222"><code>1.2j (2016/12/22)</code></a><ul>
+<li><a href="#improvements-and-new-features-12">Improvements and new features</a></li>
+<li><a href="#bug-fixes-9">Bug fixes</a></li>
+</ul></li>
+<li><a href="#i-20161213"><code>1.2i (2016/12/13)</code></a><ul>
+<li><a href="#incompatible-changes-8">Incompatible changes</a></li>
+<li><a href="#removed-2">Removed</a></li>
+<li><a href="#improvements-and-new-features-13">Improvements and new features</a></li>
+<li><a href="#bug-fixes-10">Bug fixes</a></li>
+</ul></li>
+<li><a href="#h-20161120"><code>1.2h (2016/11/20)</code></a><ul>
+<li><a href="#improvements-and-new-features-14">Improvements and new features</a></li>
+<li><a href="#bug-fixes-11">Bug fixes</a></li>
+</ul></li>
+<li><a href="#g-20160319"><code>1.2g (2016/03/19)</code></a><ul>
+<li><a href="#incompatible-changes-9">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-15">Improvements and new features</a></li>
+</ul></li>
+<li><a href="#f-20160312"><code>1.2f (2016/03/12)</code></a><ul>
+<li><a href="#incompatible-changes-10">Incompatible changes</a></li>
+<li><a href="#improvements-and-new-features-16">Improvements and new features</a></li>
+<li><a href="#bug-fixes-12">Bug fixes</a></li>
+</ul></li>
+<li><a href="#e-20151122"><code>1.2e (2015/11/22)</code></a><ul>
+<li><a href="#improvements-and-new-features-17">Improvements and new features</a></li>
+<li><a href="#bug-fixes-13">Bug fixes</a></li>
+</ul></li>
+<li><a href="#d-20151118"><code>1.2d (2015/11/18)</code></a><ul>
+<li><a href="#improvements-and-new-features-18">Improvements and new features</a></li>
+<li><a href="#bug-fixes-14">Bug fixes</a></li>
+</ul></li>
+<li><a href="#c-20151116"><code>1.2c (2015/11/16)</code></a><ul>
+<li><a href="#improvements-and-new-features-19">Improvements and new features</a></li>
+<li><a href="#bug-fixes-15">Bug fixes</a></li>
+</ul></li>
+<li><a href="#b-20151029"><code>1.2b (2015/10/29)</code></a><ul>
+<li><a href="#bug-fixes-16">Bug fixes</a></li>
+</ul></li>
+<li><a href="#a-20151019"><code>1.2a (2015/10/19)</code></a><ul>
+<li><a href="#improvements-and-new-features-20">Improvements and new features</a></li>
+<li><a href="#bug-fixes-17">Bug fixes</a></li>
+</ul></li>
+<li><a href="#section-1"><code>1.2 (2015/10/10)</code></a><ul>
+<li><a href="#removed-3">Removed</a></li>
+<li><a href="#improvements-and-new-features-21">Improvements and new features</a></li>
+</ul></li>
+<li><a href="#c-20150912"><code>1.1c (2015/09/12)</code></a></li>
+<li><a href="#b-20150831"><code>1.1b (2015/08/31)</code></a></li>
+<li><a href="#a-20141107"><code>1.1a (2014/11/07)</code></a></li>
+<li><a href="#section-2"><code>1.1 (2014/10/28)</code></a><ul>
+<li><a href="#incompatible-changes-11">Incompatible changes</a></li>
+<li><a href="#removed-4">Removed</a></li>
+<li><a href="#deprecated-1">Deprecated</a></li>
+<li><a href="#improvements-and-new-features-22">Improvements and new features</a></li>
+<li><a href="#bug-fixes-18">Bug fixes</a></li>
+</ul></li>
+<li><a href="#n-20140401"><code>1.09n (2014/04/01)</code></a></li>
+<li><a href="#m-20140226"><code>1.09m (2014/02/26)</code></a></li>
+<li><a href="#kb-20140213"><code>1.09kb (2014/02/13)</code></a></li>
+<li><a href="#k-20140121"><code>1.09k (2014/01/21)</code></a></li>
+<li><a href="#j-20140109"><code>1.09j (2014/01/09)</code></a></li>
+<li><a href="#i-20131218"><code>1.09i (2013/12/18)</code></a></li>
+<li><a href="#h-20131128"><code>1.09h (2013/11/28)</code></a></li>
+<li><a href="#g-20131122"><code>1.09g (2013/11/22)</code></a></li>
+<li><a href="#f-20131104"><code>1.09f (2013/11/04)</code></a></li>
+<li><a href="#e-20131029"><code>1.09e (2013/10/29)</code></a></li>
+<li><a href="#d-20131022"><code>1.09d (2013/10/22)</code></a></li>
+<li><a href="#c-20131009"><code>1.09c (2013/10/09)</code></a></li>
+<li><a href="#b-20131003"><code>1.09b (2013/10/03)</code></a></li>
+<li><a href="#a-20130924"><code>1.09a (2013/09/24)</code></a></li>
+<li><a href="#b-20130614"><code>1.08b (2013/06/14)</code></a></li>
+<li><a href="#a-20130611"><code>1.08a (2013/06/11)</code></a></li>
+<li><a href="#section-3"><code>1.08 (2013/06/07)</code></a></li>
+<li><a href="#section-4"><code>1.07 (2013/05/25)</code></a></li>
+<li><a href="#b-20130514"><code>1.06b (2013/05/14)</code></a></li>
+<li><a href="#section-5"><code>1.06 (2013/05/07)</code></a></li>
+<li><a href="#section-6"><code>1.05 (2013/05/01)</code></a></li>
+<li><a href="#section-7"><code>1.04 (2013/04/25)</code></a></li>
+<li><a href="#section-8"><code>1.03 (2013/04/14)</code></a></li>
+<li><a href="#section-9"><code>1.0 (2013/03/28)</code></a></li>
+</ul>
+</nav>
+<pre><code>Source: xint.dtx 1.3e 2019/04/05 (doc 2019/04/05)
+Author: Jean-Francois Burnol
+Info: Expandable operations on big integers, decimals, fractions
+License: LPPL 1.3e</code></pre>
+<h2 id="e-20190405"><code>1.3e (2019/04/05)</code></h2>
+<h3 id="incompatible-changes">Incompatible changes</h3>
+<ul>
+<li>When defining functions, sub-expressions can only use the <code>\xint(float)expr...\relax</code> syntax. One can <em>not</em> use there the <code>\xint(float)eval</code> wrappers (anyhow they add overhead and can be replaced with the lower level syntax).</li>
+</ul>
+<h3 id="improvements-and-new-features">Improvements and new features</h3>
+<ul>
+<li>The <strong>xinttrig</strong> library is automatically loaded by <strong>xintexpr</strong>. It provides direct and inverse trigonometrical functions using either degrees or radians with a precision of up to (a bit less than) 60 digits. It is for the most part implemented using high level user interface, but will probably get some optimizations in future (and perhaps extension to more digits).</li>
+<li>The <strong>xintlog</strong> library is automatically loaded by <strong>xintexpr</strong>. It uses <a href="http://ctan.org/pkg/poormanlog">poormanlog</a> to provide logarithms and exponentials with almost 9 digits of precision. Extended precision is for a future release.</li>
+<li><p><strong>xintexpr</strong>: <code>\xintdefefunc</code>, <code>\xintdeffloatefunc</code>, <code>\xintdefiiefunc</code> define functions which are not protected against expansion in the definition of other functions; refer to <code>xint.pdf</code> for the related explanations.</p>
+Notice that whole area of <code>\xintdef(e)func</code>, <code>\xintNewExpr</code>, <code>\xintNewFunction</code> is complex and to be considered still as work in progress as it has a number of shortcomings.</li>
+<li><strong>xintexpr</strong>: <code>inv()</code>, <code>ilog10()</code>, <code>sfloat()</code>, behaviour of <code>qfloat()</code> slightly modified.</li>
+<li><strong>xintexpr</strong>: <code>\xintensuredummy</code>, <code>\xintrestorelettervar</code>.</li>
+<li><p>The optional argument of <code>\xintfloatexpr</code> or <code>\xintfloateval</code> (it must be at start of braced argument) can be negative; it then means to trim (and round) from the output at float precision that many least significant digits.</p></li>
+</ul>
+<h3 id="bug-fixes">Bug fixes</h3>
+<ul>
+<li>Some bugfixes related to user functions with no variables at all; they were dysfunctional.</li>
+</ul>
+<h2 id="d-20190106"><code>1.3d (2019/01/06)</code></h2>
+<h3 id="incompatible-changes-1">Incompatible changes</h3>
+<ul>
+<li><p><strong>xintexpr</strong>: the <code>gcd()</code> and <code>lcm()</code> functions formerly converted their arguments to integers via <code>\xintNum</code>. They now handle general input with no such modification.</p></li>
+<li><p><strong>xintexpr</strong>: former <code>\xinteval</code>, <code>\xintieval</code>, <code>\xintiieval</code>, and <code>\xintfloateval</code> renamed to <code>\xintexpro</code>, <code>\xintiexpro</code>, <code>\xintiiexpro</code>, and <code>\xintfloatexpro</code>.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-1">Improvements and new features</h3>
+<ul>
+<li><p><strong>xintexpr</strong>: the <code>gcd()</code> and <code>lcm()</code> multi-arguments functions have been refactored to handle general fractions. The dependency on <strong>xintgcd</strong> is removed.</p></li>
+<li><p><strong>xintexpr</strong>: three-way branching <code>\xintifsgnexpr</code>, <code>\xintifsgnfloatexpr</code>, <code>\xintifsgniiexpr</code> conditional macros.</p></li>
+<li><p><strong>xintexpr</strong>: <code>\xintunassignexprfunc</code>, <code>\xintunassigniiexprfunc</code>, <code>\xintunassignfloatexprfunc</code> to “undefine†functions.</p></li>
+<li><p><strong>xintexpr</strong>: <code>\xintunassignvar</code> really makes the (multi-letter) variable unknown (formerly, it only gave it value zero),</p></li>
+<li><p><strong>xintexpr</strong>: functions <code>isone()</code> and <code>isint()</code>.</p></li>
+<li><p><strong>xintexpr</strong>: <code>\xinteval</code>, <code>\xintieval</code>, <code>\xintiieval</code>, and <code>\xintfloateval</code> as synonyms to <code>\xinttheexpr...\relax</code> etc…, but with the (comma-separated) expression as a usual braced macro argument.</p></li>
+</ul>
+<h3 id="bug-fixes-1">Bug fixes</h3>
+<ul>
+<li><strong>xintcore</strong>, <strong>xintexpr</strong> : division in <code>\xintiiexpr</code> was broken for a zero dividend and a one-digit divisor (e.g. <code>0//7</code>) since <code>1.2p</code> due to a bug in <code>\xintiiDivMod</code> for such arguments. The bug was signaled (thanks to Kpym for report) and fixed shortly after <code>1.3c</code> release but I then completely forgot to upload a bugfix release to CTAN at that time, apologies for that.</li>
+</ul>
+<h2 id="c-20180617"><code>1.3c (2018/06/17)</code></h2>
+<h3 id="improvements-and-new-features-2">Improvements and new features</h3>
+<ul>
+<li><p><strong>xintexpr</strong>: with <code>\xintglobaldefstrue</code>, <code>\xintdefvar</code>, <code>\xintdeffunc</code>, <code>\xintNewExpr</code> et al. make definitions with global scope.</p></li>
+<li><p><strong>xintexpr</strong>: <code>qraw()</code> for fast input of (very many) comma separated numbers (in suitable raw format).</p></li>
+<li><p><strong>xintexpr</strong>: the colon in the <code>:=</code> part of the syntax for <code>\xintdefvar</code> and variants is now optional; and if present it may be an active character or have any (reasonable) catcode.</p></li>
+<li><p><strong>xintexpr</strong>: <code>\xintdefvar</code>, <code>\xintdeffunc</code> and their variants try to set the catcode of the semi-colon which delimits their arguments; of course this will not work if that catcode is already frozen.</p></li>
+<li><p><code>\xintUniformDeviate</code> is better documented and <code>sourcexint.pdf</code> is better hyperlinked and includes indices for the macros defined by each package.</p></li>
+</ul>
+<h3 id="bug-fixes-2">Bug fixes</h3>
+<ul>
+<li><strong>xintfrac</strong>: since <code>1.3</code> release, it loaded <strong>xintgcd</strong> in contradiction to what the documentation says (hence also <strong>xintexpr</strong> loaded <strong>xintgcd</strong> automatically). There is no actual dependency so the loading is removed for now.</li>
+</ul>
+<h2 id="b-20180518"><code>1.3b (2018/05/18)</code></h2>
+<h3 id="improvements-and-new-features-3">Improvements and new features</h3>
+<p>All additions related to randomness are marked as work-in-progress. They require an engine providing the <code>\(pdf)uniformdeviate</code> primitive.</p>
+<ul>
+<li><p><strong>xintkernel</strong>: <code>\xintUniformDeviate</code>.</p></li>
+<li><p><strong>xint</strong>: <code>\xintRandomDigits</code>, <code>\xintXRandomDigits</code>, <code>\xintiiRandRange</code>, <code>\xintiiRandRangeAtoB</code>.</p></li>
+<li><p><strong>xintfrac</strong>: support macros (not public, mainly because internal format for floats is surely not final) for <code>random()</code> and <code>qrand()</code>.</p></li>
+<li><p><strong>xintexpr</strong>: <code>random()</code>, <code>qrand()</code>, and <code>randrange(A[, B])</code>.</p></li>
+<li><p><strong>xintexpr</strong>: when a function <code>foo()</code> is declared via <code>\xintdeffunc</code> (et al.) to be parameter-less, it can be used as <code>foo()</code>; formerly <code>foo(nil)</code> syntax was required.</p></li>
+<li><p>The usual provision of user manual “improvementsâ€.</p></li>
+</ul>
+<h2 id="a-20180307"><code>1.3a (2018/03/07)</code></h2>
+<h3 id="removed">Removed</h3>
+<ul>
+<li><strong>xintcore</strong>, <strong>xint</strong>, <strong>xintfrac</strong>: removal of the internal macros which were used at <code>1.2o</code> to add a deprecation mechanism; all deprecated macros have been removed at <code>1.3</code> so there was no reason to keep the code used for deprecating them.</li>
+</ul>
+<h3 id="improvements-and-new-features-4">Improvements and new features</h3>
+<ul>
+<li><p><strong>xintexpr</strong>: new conditionals <code>ifone()</code> and <code>ifint()</code>.</p></li>
+<li><p><strong>xintfrac</strong>: <code>\xintREZ</code> is faster on inputs having one hundred digits or more.</p></li>
+<li><p>Added to the user manual mention of macros such as <code>\xintDivFloor</code>, <code>\xintMod</code>, <code>\xintModTrunc</code>, which had been left out so far.</p></li>
+</ul>
+<h3 id="bug-fixes-3">Bug fixes</h3>
+<ul>
+<li><strong>xintexpr</strong>: the mechanism for adjunction to the expression parsers of user defined functions was refactored and improved at previous release <code>1.3</code>: in particular recursive definitions became possible. But an oversight made these recursive functions quite inefficient (to remain polite.) This release fixes the problem.</li>
+</ul>
+<h2 id="section"><code>1.3 (2018/03/01)</code></h2>
+<h3 id="incompatible-changes-2">Incompatible changes</h3>
+<ul>
+<li><p><strong>xintcore</strong>, <strong>xint</strong>, <strong>xintfrac</strong>: all macros deprecated at <code>1.2o</code> got removed.</p></li>
+<li><p><strong>xintfrac</strong>: addition and subtraction of <code>a/b</code> and <code>c/d</code> now use the l.c.m. of the denominators. Similarly the macro supporting the modulo operator <code>/:</code> uses a l.c.m. for the denominator of the result.</p></li>
+<li><p><strong>xintexpr</strong>: the addition, subtraction, modulo <code>/:</code>, and the <code>mod()</code> and <code>divmod()</code> functions produce generally smaller denominators (see previous item).</p></li>
+<li><p><strong>xintexpr</strong>: formerly, the internal macros which are internally associated to user-declared functions were using comma separated parameter texts. They now do not use such commas (their meanings, which may again change in future, are written for information to the log under <code>\xintverbosetrue</code>).</p></li>
+</ul>
+<h3 id="improvements-and-new-features-5">Improvements and new features</h3>
+<ul>
+<li><p><strong>xintexpr</strong>: user-defined functions may now be of a recursive nature. This was made possible by a refactoring of the <code>\xintNewExpr</code> mechanism. It became both leaner and more extensive than formerly.</p></li>
+<li><p><strong>xintfrac</strong>: new macros <code>\xintPIrr</code> and <code>\xintDecToString</code>. The latter is a backport of a <code>polexpr 0.4</code> utility, and it is to be considered unstable.</p></li>
+<li><p><strong>xintexpr</strong>: new function <code>preduce()</code> associated with <code>\xintPIrr</code>.</p></li>
+</ul>
+<h2 id="q-20180206"><code>1.2q (2018/02/06)</code></h2>
+<h3 id="improvements-and-new-features-6">Improvements and new features</h3>
+<ul>
+<li><strong>xintexpr</strong>: tacit multiplication extended to cases such as <code>3!4!5!</code> or <code>(1+2)3</code>.</li>
+</ul>
+<h3 id="bug-fixes-4">Bug fixes</h3>
+<ul>
+<li><strong>xintcore</strong>: sadly, refactoring at <code>1.2l</code> of subtraction left an extra character in an inner macro causing breakage in some rare circumstances. This should not have escaped our test suite!</li>
+</ul>
+<h2 id="p-20171205"><code>1.2p (2017/12/05)</code></h2>
+<h3 id="incompatible-changes-3">Incompatible changes</h3>
+<ul>
+<li><p><strong>xintgcd</strong>: <code>\xintBezout{a}{b}</code>’s output consists of <code>{u}{v}{d}</code> with <code>u*a+v*b==d</code>, with <code>d</code> the GCD. Formerly it was <code>{a}{b}{u}{v}{d}</code>, and with <code>u*a-v*b==d</code>.</p></li>
+<li><p><strong>xintgcd</strong>: <code>\xintBezout{0}{0}</code> expands to <code>{0}{0}{0}</code>. Formerly (since <code>1.2l</code>) it raised <code>InvalidOperation</code>.</p></li>
+<li><p><strong>xintcore</strong>: <code>\xintiiMod</code> is now associated with floored division. The former meaning (associated with truncated division) is available as <code>\xintiiModTrunc</code>.</p></li>
+<li><p><strong>xintfrac</strong>: <code>\xintMod</code> is now associated with floored division. The former meaning is available as <code>\xintModTrunc</code>.</p></li>
+<li><p><strong>xintexpr</strong>: the <code>//</code> operator and its associated modulo <code>'mod'</code> (or <code>/:</code>) now correspond to floored division, like the Python language <code>//</code>, <code>%</code>, and <code>divmod(x, y)</code>. Formerly they had been associated to truncated division. This is breaking change for operands of opposite signs.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-7">Improvements and new features</h3>
+<ul>
+<li><p><strong>xinttools</strong>: <code>\xintListWithSep</code>, which had remained unchanged since its introduction at <code>1.04 (2013/04/25)</code>, was rewritten for increased speed.</p></li>
+<li><p><strong>xintexpr</strong>: <code>\xintdefvar</code>’s syntax is extended to allow simultaneous assignments. Examples: <code>\xintdefvar x1, x2, x3 := 1, 3**10, 3**20;</code> or <code>\xintdefiivar A, B := B, A 'mod' B;</code> for already defined variables <code>A</code> and <code>B</code>.</p></li>
+<li><p><strong>xintexpr</strong>: added <code>divmod()</code> to the built-in functions. It is associated with floored division, like the Python language <code>divmod()</code>. Related support macros added to <strong>xintcore</strong>, and <strong>xintfrac</strong>.</p></li>
+</ul>
+<h3 id="bug-fixes-5">Bug fixes</h3>
+<ul>
+<li><p><strong>xintgcd</strong>: <code>\xintBezout{6}{3}</code> (for example) expanded to <code>{6}{3}{-0}{-1}{3}</code>, but the <code>-0</code> should have been <code>0</code>.</p></li>
+<li><p><strong>xintgcd</strong>: it still used macro <code>\xintiAbs</code> although the latter had been deprecated from <strong>xintcore</strong>.</p></li>
+<li><p><strong>xintexpr</strong>: in float expressions the <code>//</code> and <code>/:</code> (aka <code>'mod'</code>) operators did not round their operands to the float precision prior to computing with them, contrarily to other infix arithmetic operators and to the <code>mod(f,g)</code> function; thus, <code>mod(f,g)</code> and <code>f 'mod' g</code> were not completely equivalent.</p></li>
+<li><p>various documentation fixes; in particular, the partial dependency of <strong>xintcfrac</strong> on <strong>xinttools</strong> had not been mentioned.</p></li>
+</ul>
+<h2 id="o-20170829"><code>1.2o (2017/08/29)</code></h2>
+<h3 id="incompatible-changes-4">Incompatible changes</h3>
+<ul>
+<li><strong>xint</strong>: <code>\xintAND</code>, <code>\xintOR</code>, … and similar Boolean logic macros do not apply anymore <code>\xintNum</code> (or <code>\xintRaw</code> if <strong>xintfrac</strong> is loaded), to their arguments (often, from internal usage of <code>\xintSgn</code>), but only f-expand them (using e.g. <code>\xintiiSgn</code>). This is kept un-modified even if loading <strong>xintfrac</strong>.</li>
+</ul>
+<h3 id="deprecated">Deprecated</h3>
+<p>Deprecated macros raise an error but, generally, then expand as in former releases. They will all get removed at some future release.</p>
+<ul>
+<li><p><strong>xintcore</strong>: <code>\xintiOpp</code>, <code>\xintiAbs</code>, <code>\xintiAdd</code>, <code>\xintiSub</code>, <code>\xintiMul</code>, <code>\xintiDivision</code>, <code>\xintiQuo</code>, <code>\xintiRem</code>, <code>\xintiDivRound</code>, <code>\xintiDivTrunc</code>, <code>\xintiMod</code>, <code>\xintiSqr</code>, <code>\xintiPow</code>, and <code>\xintiFac</code> are deprecated. Only the <code>ii</code>-named variants get defined.</p></li>
+<li><p><strong>xintcore</strong>: <code>\xintCmp</code> and <code>\xintSgn</code> are deprecated from <strong>xintcore</strong> (which only defines <code>\xintiiCmp</code> and <code>\xintiiSgn</code>) as they actually belong to <strong>xintfrac</strong>.</p></li>
+<li><p><strong>xintcore</strong>: <code>\xintiiFDg</code>, resp. <code>\xintiiLDg</code>, are renamed <code>\xintFDg</code>, resp. <code>\xintLDg</code>. Former denominations are deprecated.</p></li>
+<li><p><strong>xint</strong>: <code>\xintMON</code>, <code>\xintMMON</code>, <code>\xintiMax</code>, <code>\xintiMin</code>, <code>\xintiMaxof</code>, <code>\xintiMinof</code>, <code>\xintiSquareRoot</code>, <code>\xintiSqrt</code>, <code>\xintiSqrtR</code>, <code>\xintiBinomial</code>, and <code>\xintiPFactorial</code> are deprecated. Only <code>ii</code>-named variants get defined.</p></li>
+<li><p><strong>xint</strong>: <code>\xintEq</code>, <code>\xintGeq</code>, <code>\xintGt</code>, <code>\xintLt</code>, <code>\xintGtorEq</code>, <code>\xintLtorEq</code>, <code>\xintIsZero</code>, <code>\xintIsNotZero</code>, <code>\xintIsOne</code>, <code>\xintOdd</code>, <code>\xintEven</code>, <code>\xintifSgn</code>, <code>\xintifCmp</code>, <code>\xintifEq</code>, <code>\xintifGt</code>, <code>\xintifLt</code>, <code>\xintifZero</code>, <code>\xintifNotZero</code>, <code>\xintifOne</code>, <code>\xintifOdd</code>, are deprecated. These macros belong to <strong>xintfrac</strong>. Package <strong>xint</strong> defines only the <code>ii</code>-named variants.</p></li>
+<li><p><strong>xint</strong>: <code>\xintNeq</code> was renamed to <code>\xintNotEq</code> which however is only provided by <strong>xintfrac</strong>. Package <strong>xint</strong> defines <code>\xintiiNotEq</code>, and <code>\xintNeq</code> is deprecated.</p></li>
+<li><p><strong>xint</strong>: <code>\xintNot</code> was renamed to <code>\xintNOT</code>, former denomination is deprecated. See also item about Boolean logic macros in the <em>Incompatible Changes</em> section.</p></li>
+</ul>
+<h2 id="n-20170806"><code>1.2n (2017/08/06)</code></h2>
+<h3 id="incompatible-changes-5">Incompatible changes</h3>
+<ul>
+<li><strong>xintbinhex</strong> does not load package <strong>xintcore</strong> anymore, but only <strong>xintkernel</strong>.</li>
+</ul>
+<h3 id="improvements-and-new-features-8">Improvements and new features</h3>
+<ul>
+<li><p><strong>xintbinhex</strong> has only <strong>xintkernel</strong> as dependency.</p></li>
+<li><p>Macros of <strong>xintbinhex</strong> have been improved for speed and increased maximal sizes of allowable inputs.</p></li>
+</ul>
+<h2 id="m-20170731"><code>1.2m (2017/07/31)</code></h2>
+<h3 id="incompatible-changes-6">Incompatible changes</h3>
+<ul>
+<li><p><strong>xintbinhex</strong>: the length of the input is now limited. The maximum size depends on the macro and ranges from about <code>4000</code> to about <code>19900</code> digits.</p></li>
+<li><p><strong>xintbinhex</strong>: <code>\xintCHexToBin</code> is now the variant of <code>\xintHexToBin</code> which does not remove leading binary zeroes: <code>N</code> hex-digits give on output exactly <code>4N</code> binary digits.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-9">Improvements and new features</h3>
+<ul>
+<li><strong>xintbinhex</strong>: all macros have been rewritten using techniques from the 1.2 release (they had remained unmodified since <code>1.08</code> of <code>2013/06/07</code>.) The new macros are faster but limited to a few thousand digits. The <code>1.08</code> routines could handle tens of thousands of digits, but not in a reasonable time.</li>
+</ul>
+<h3 id="bug-fixes-6">Bug fixes</h3>
+<ul>
+<li><p>user manual: the <code>Changes</code> section wrongly stated at <code>1.2l</code> that the macros of <strong>xintbinhex</strong> had been made robust against non terminated input such as <code>\number\mathcode`\-</code>. Unfortunately the author fell into the trap of believing his own documentation and he forgot to actually implement the change. Now done.</p></li>
+<li><p>user manual: the PDF bookmarks were messed up.</p></li>
+<li><p><strong>xint</strong>, <strong>xintfrac</strong>: <code>\xintGeq</code>, <code>\xintMax</code>, <code>\xintMin</code>, suffered from some extra overhead. This was caused by use of some auxiliaries from the very early days which got redefined at some stage. This is fixed here with some additional efficiency improvements and pruning of old code.</p></li>
+</ul>
+<h2 id="l-20170726"><code>1.2l (2017/07/26)</code></h2>
+<h3 id="removed-1">Removed</h3>
+<ul>
+<li><p><code>\xintiiSumExpr</code>, <code>\xintiiPrdExpr</code> (<strong>xint</strong>) and <code>\xintSumExpr</code>, <code>\xintPrdExpr</code> (<strong>xintfrac</strong>). They had not been formally deprecated, but had been left un-documented since <code>1.09d (2013/10/22)</code>.</p></li>
+<li><p>internal macro <code>\xint_gob_til_xint_relax</code> removed.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-10">Improvements and new features</h3>
+<ul>
+<li><p>the underscore character <code>_</code> is accepted by the <strong>xintexpr</strong> parsers as a digit separator (the space character already could be used for improved readability of big numbers). It is not allowed as <em>first</em> character of a number, as it would then be mis-interpreted as the start of a possible variable name.</p></li>
+<li><p>some refactoring in <strong>xintcore</strong> auxiliary routines and in <code>\xintiiSub</code> and <code>\xintiiCmp</code> for some small efficiency gains.</p></li>
+<li><p>code comments in <strong>xintcore</strong> are better formatted, but remain sparse.</p></li>
+<li><p><strong>xintcore</strong>, <strong>xint</strong>, <strong>xintfrac</strong>, … : some macros were not robust against arguments whose expansion looks forward for some termination (e.g. <code>\number\mathcode`\-</code>), and particularly, most were fragile against inputs using non-terminated <code>\numexpr</code> (such as <code>\xintiiAdd{\the\numexpr1}{2}</code> or <code>\xintRaw{\numexpr1}</code>). This was not a bug per se, as the user manual did not claim such inputs were legal, but it was slightly inconvenient. Most macros (particularly those of <strong>xintfrac</strong>) have now been made robust against such inputs. Some macros from <strong>xintcore</strong> primarily destined to internal usage still accept only properly terminated arguments such as <code>\the\mathcode`\-&lt;space&gt;</code> or <code>\the\numexpr1\relax</code>.</p>
+<p>The situation with expressions is unchanged: syntax such as <code>\xintexpr \numexpr1+2\relax</code> is illegal as the ending <code>\relax</code> token will get swallowed by the <code>\numexpr</code>; but it is needed by the <code>xintexpr</code>-ession parser, hence the parser will expand forward and presumably end with in an “illegal token†error, or provoke some low-level TeX error (N.B.: a closing brace <code>}</code> for example can not terminate an <code>xintexpr</code>-ession, the parser must find a <code>\relax</code> token at some point). Thus there must be in this example a second <code>\relax</code>.</p></li>
+<li><p>experimental code for error conditions; there is no complete user interface yet, it is done in preparation for next major release and is completely unstable and undocumented.</p></li>
+</ul>
+<h3 id="bug-fixes-7">Bug fixes</h3>
+<ul>
+<li><p><strong>xintbinhex</strong>: since <code>1.2 (2015/10/10)</code>, <code>\xintHexToDec</code> was broken due to an undefined macro (it was in <code>xint.sty</code>, but the module by itself is supposedly dependent only upon <code>xintcore.sty</code>).</p></li>
+<li><p><strong>xintgcd</strong>: macro <code>\xintBezout</code> produced partially wrong output if one of its two arguments was zero.</p></li>
+<li><p><strong>xintfrac</strong>: the manual said one could use directly <code>\numexpr</code> compatible expressions in arithmetic macros (without even a <code>\numexpr</code> encapsulation) if they were expressed with up to 8 tokens. There was a bug if these 8 tokens evaluated to zero. The bug has been fixed, and up to 9 tokens are now accepted. But it is simpler to use <code>\the\numexpr</code> prefix and not to worry about the token count… The ending <code>\relax</code> is now un-needed.</p></li>
+</ul>
+<h2 id="k-20170106"><code>1.2k (2017/01/06)</code></h2>
+<h3 id="incompatible-changes-7">Incompatible changes</h3>
+<ul>
+<li><p>macro <code>\xintFloat</code> which rounds its input to a floating point number does <em>not</em> print anymore <code>10.0...0eN</code> to signal an upwards rounding to the next power of ten. The mantissa has in all cases except the zero input exactly one digit before the decimal mark.</p></li>
+<li><p>some floating point computations may differ in the least significant digits, due to a change in the rounding algorithm applied to macro arguments expressed as fractions and to an improvement in precision regarding half-integer powers in expressions. See next.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-11">Improvements and new features</h3>
+<ul>
+<li><p>the initial rounding to the target precision <code>P</code> which is applied by the floating point macros from <strong>xintfrac</strong> to their arguments achieves the <em>exact (aka correct) rounding</em> even for inputs which are fractions with more than <code>P+2</code> digits in their numerators and denominators (<code>&gt;1</code>.) Hence the computed values depend only on the arguments as rational numbers and not upon their representatives. This is not relevant to <em>expressions</em> (<strong>xintexpr</strong>), because the <code>\xintfloatexpr</code> parser sees there <code>/</code> as an operator and does not (apart from special constructs) get to manipulate fractions as such.</p></li>
+<li><p><code>\xintnewdummy</code> is public interface to a <code>1.2e</code> macro which serves to declare any given catcode 11 character as a dummy variable for expressions (<strong>xintexpr</strong>). This is useful for Unicode engines (the Latin letters being already all pre-declared as dummy variables.)</p></li>
+<li><p>added <code>\xintiSqrtR</code>, there was only <code>\xintiiSqrtR</code> alongside <code>\xintiSqrt</code> and <code>\xintiiSqrt</code> (<strong>xint</strong>).</p></li>
+<li><p>added non public <code>\xintLastItem:f:csv</code> to <strong>xinttools</strong> for faster <code>last()</code> function, and improved <code>\xintNewExpr</code> compatibility. Also <code>\xintFirstItem:f:csv</code>.</p></li>
+</ul>
+<h3 id="bug-fixes-8">Bug fixes</h3>
+<ul>
+<li><p>the <code>1.2f</code> half-integer powers computed within <code>\xintfloatexpr</code> had a silly rounding to the target precision just <em>before</em> the final square-root extraction, thus possibly losing some precision. The <code>1.2k</code> implementation keeps guard digits for this final square root extraction. As for integer exponents, it is guaranteed that the computed value differs from the exact one by less than <code>0.52 ulp</code> (for inputs having at most <code>\xinttheDigits</code> digits.)</p></li>
+<li><p>more regressions from <code>1.2i</code> were fixed: <code>\xintLen</code> (<strong>xint</strong>, <strong>xintfrac</strong>) and <code>\xintDouble</code> (<strong>xintcore</strong>) had forgotten that their argument was allowed to be negative. A regression test suite is now in place and is being slowly expanded to cover more macros.</p></li>
+<li><p><code>\xintiiSquareRoot{0}</code> now produces <code>{1}{1}</code>, which fits better the general documented behaviour of this macro than <code>11</code>.</p></li>
+</ul>
+<h2 id="j-20161222"><code>1.2j (2016/12/22)</code></h2>
+<h3 id="improvements-and-new-features-12">Improvements and new features</h3>
+<ul>
+<li><p><strong>xinttools</strong> and <strong>xintexpr</strong>:</p>
+<ol type="1">
+<li><p>slightly improves the speed of <code>\xintTrim</code>.</p></li>
+<li><p>speed gains for the handlers of comma separated lists implementing Python-like slicing and item extraction. Relevant non (user) documented macros better documented in <code>sourcexint.pdf</code>.</p></li>
+</ol></li>
+<li><p>significant documentations tweaks (inclusive of suppressing things!), and among them two beautiful hyperlinked tables with both horizontal and vertical rules which bring the documentation of the <strong>xintexpr</strong> syntax to a kind of awe-inspiring perfection… except that implementation of some math functions is still lacking.</p></li>
+</ul>
+<h3 id="bug-fixes-9">Bug fixes</h3>
+<ul>
+<li>fix two <code>1.2i</code> regressions caused by undefined macros (<code>\xintNthElt</code> in certain branches and <code>[list][N]</code> item extraction in certain cases.) The test files existed but were not executed prior to release. Automation in progress.</li>
+</ul>
+<h2 id="i-20161213"><code>1.2i (2016/12/13)</code></h2>
+<h3 id="incompatible-changes-8">Incompatible changes</h3>
+<ul>
+<li><code>\xintDecSplit</code> second argument must have no sign (former code replaced it with its absolute value, a sign now may cause an error.)</li>
+</ul>
+<h3 id="removed-2">Removed</h3>
+<ul>
+<li>deprecated macros <code>\xintifTrue</code>, <code>\xintifTrueFalse</code>, <code>\xintQuo</code>, <code>\xintRem</code>, <code>\xintquo</code>, <code>\xintrem</code>.</li>
+</ul>
+<h3 id="improvements-and-new-features-13">Improvements and new features</h3>
+<ul>
+<li><p><strong>xintkernel</strong>: <code>\xintLength</code> is faster. New macros:</p>
+<ul>
+<li><p><code>\xintLastItem</code> to fetch the last item from its argument,</p></li>
+<li><p><code>\romannumeral\xintgobble</code> for gobbling many (up to 531440) upstream braced items or tokens.</p></li>
+<li><p><code>\romannumeral\xintreplicate</code> which is copied over from the expl3 <code>\prg_replicate:nn</code> with some minor changes.</p></li>
+</ul></li>
+<li><p><strong>xinttools</strong>: general token list handling routines <code>\xintKeep</code>, <code>\xintTrim</code> and <code>\xintNthElt</code> are faster; but the novel <code>\xintTrim</code> can only remove up to a maximum of 531440 items.</p>
+<p>Also, <code>\xintFor</code> partially improves on some issues which are reported upon in the documentation.</p></li>
+<li><p>some old macros have been rewritten entirely or partially using techniques which <strong>xint</strong> started using in release <code>1.2</code>:</p>
+<ul>
+<li><p><strong>xintcore</strong>: <code>\xintDouble</code>, <code>\xintHalf</code>, <code>\xintInc</code>, <code>\xintDec</code>, <code>\xintiiLDg</code>, <code>\xintDSR</code> (originally from <strong>xint</strong>), a novel <code>\xintDSRr</code>.</p></li>
+<li><p><strong>xint</strong>: <code>\xintDSH</code>, <code>\xintDSx</code>, <code>\xintDecSplit</code>, <code>\xintiiE</code>.</p></li>
+<li><p><strong>xintfrac</strong>: as a result of the above <code>\xintTrunc</code>, <code>\xintRound</code> and <code>\xintXTrunc</code> got faster. But the main improvement for them is with decimal inputs which formerly had not been treated separately from the general fraction case. Also, <code>\xintXTrunc</code> does not anymore create a dependency of <strong>xintfrac</strong> on <strong>xinttools</strong>.</p></li>
+</ul></li>
+<li><p>the documentation has again been (slightly) re-organized; it has a new sub-section on the Miller-Rabin primality test, to illustrate some use of <code>\xintNewFunction</code> for recursive definitions.</p></li>
+<li><p>the documentation has dropped the LaTeX “command†terminology (which had been used initially in 2013 for some forgotten reasons and should have been removed long ago) and uses only the more apt “macroâ€, as after all, all of <strong>xint</strong> is about expansion of macros (plus the use of <code>\numexpr</code>).</p></li>
+</ul>
+<h3 id="bug-fixes-10">Bug fixes</h3>
+<ul>
+<li><code>\xintDecSplitL</code> and <code>\xintDecSplitR</code> from <strong>xint</strong> produced their output in a spurious brace pair (bug introduced in <code>1.2f</code>).</li>
+</ul>
+<h2 id="h-20161120"><code>1.2h (2016/11/20)</code></h2>
+<h3 id="improvements-and-new-features-14">Improvements and new features</h3>
+<ul>
+<li><p>new macro <code>\xintNewFunction</code> in <strong>xintexpr</strong> which allows to extend the parser syntax with functions in situations where <code>\xintdeffunc</code> is not usable (typically, because dummy variables are used over a not yet determined range of values because it depends on the variables).</p></li>
+<li><p>after three years of strict obedience to <code>xint</code> prefix, now <code>\thexintexpr</code>, <code>\thexintiexpr</code>, <code>\thexintfloatexpr</code>, and <code>\thexintiiexpr</code> are provided as synonyms to <code>\xinttheexpr</code>, etc…</p></li>
+</ul>
+<h3 id="bug-fixes-11">Bug fixes</h3>
+<ul>
+<li><p>the <code>(cond)?{foo}{bar}</code> operator from <strong>xintexpr</strong> mis-behaved in certain circumstances (such as an empty <code>foo</code>).</p></li>
+<li><p>the <strong>xintexpr</strong> <code>1.2f</code> <code>binomial</code> function (which uses <code>\xintiiBinomial</code> from <strong>xint.sty</strong> or <code>\xintFloatBinomial</code> from <strong>xintfrac.sty</strong>) deliberately raised an error for <code>binomial(x,y)</code> with <code>y&lt;0</code> or <code>x&lt;y</code>. This was unfortunate, and it now simply evaluates to zero in such cases.</p></li>
+<li><p>similarly the <code>pfactorial</code> function was very strict and <code>pfactorial(x,y)</code> deliberately raised an out-of-range error if not used with non-negative integers with <code>x</code> less than <code>y</code>. It now avoids doing that and allows negative arguments.</p></li>
+<li><p>the <code>add</code> and <code>mul</code> from <strong>xintexpr</strong>, which work with dummy variables since <code>1.1</code>, raised an error since <code>1.2c 2015/11/16</code> when the dummy variable was given an empty range (or list) of values, rather than producing respectively <code>0</code> and <code>1</code> as formerly.</p></li>
+</ul>
+<h2 id="g-20160319"><code>1.2g (2016/03/19)</code></h2>
+<h3 id="incompatible-changes-9">Incompatible changes</h3>
+<ul>
+<li><p>inside expressions, list item selector <code>[L][n]</code> counts starting at zero, not at one. This is more coherent with <code>[L][a:b]</code> which was already exactly like in Python since its introduction. A function len(L) replaces earlier <code>[L][0]</code>.</p></li>
+<li><p>former <code>iter</code> keyword now called <code>iterr</code>. Indeed it matched with <code>rrseq</code>, the new <code>iter</code> (which was somehow missing from <code>1.1</code>) is the one matching <code>rseq</code>. Allows to iterate more easily with a “list†variable.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-15">Improvements and new features</h3>
+<ul>
+<li><p>in <strong>xintexpr.sty</strong>: list selectors <code>[L][n]</code> and <code>[L][a:b]</code> are more efficient: the earlier <code>1.1</code> routines did back and forth conversions from comma separated values to braced tokens, the <code>1.2g</code> routines use macros from <strong>xinttools.sty</strong> handling directly the encountered lists of comma separated values.</p></li>
+<li><p>in <strong>xinttools.sty</strong>: slight improvements in the efficiency of the <code>\xintNthElt</code>, <code>\xintKeep</code>, <code>\xintTrim</code> routines and new routines handling directly comma separated values. The latter are not included in the user manual (they are not <code>\long</code>, they don’t make efforts to preserve some braces, do not worry about spaces, all those worries being irrelevant to the use in expressions for list selectors).</p></li>
+<li><p>a slight speed improvement to <code>\xintFloatSqrt</code> in its quest of correct rounding.</p></li>
+<li><p>float multiplication and division handle more swiftly operands (non-fractional) with few digits, when the float precision is large.</p></li>
+<li><p>the syntax of expressions is described in a devoted chapter of the documentation; an example shows how to implement (expandably) the Brent-Salamin algorithm for computation of Pi using <code>iter</code> in a float expression.</p></li>
+</ul>
+<h2 id="f-20160312"><code>1.2f (2016/03/12)</code></h2>
+<h3 id="incompatible-changes-10">Incompatible changes</h3>
+<ul>
+<li>no more <code>\xintFac</code> macro but <code>\xintiFac/\xintiiFac/\xintFloatFac</code>.</li>
+</ul>
+<h3 id="improvements-and-new-features-16">Improvements and new features</h3>
+<ul>
+<li><p>functions <code>binomial</code>, <code>pfactorial</code> and <code>factorial</code> in both integer and float versions.</p></li>
+<li><p>macros <code>\xintiiBinomial</code>, <code>\xintiiPFactorial</code> (<strong>xint.sty</strong>) and <code>\xintFloatBinomial</code>, <code>\xintFloatPFactorial</code> (<strong>xintfrac.sty</strong>). Improvements to <code>\xintFloatFac</code>.</p></li>
+<li><p>faster implementation and increased accuracy of float power macros. Half-integer exponents are now accepted inside float expressions.</p></li>
+<li><p>faster implementation of both integral and float square root macros.</p></li>
+<li><p>the float square root achieves <em>correct</em> (aka <em>exact</em>) rounding in arbitrary precision.</p></li>
+<li><p>modified behaviour for the <code>\xintPFloat</code> macro, used by <code>\xintthefloatexpr</code> to prettify its output. It now opts for decimal notation if and only if scientific notation would use an exponent between <code>-5</code> and <code>5</code> inclusive. The zero value is printed <code>0.</code> with a dot.</p></li>
+<li><p>the float macros for addition, subtraction, multiplication, division now first round their two operands to P, not P+2, significant places before doing the actual computation (P being the target precision). The same applies to the power macros and to the square root macro.</p></li>
+<li><p>the documentation offers a more precise (and accurate) discussion of floating point issues.</p></li>
+<li><p>various under-the-hood code improvements; the floatexpr operations are chained in a faster way, from skipping some unneeded parsing on results of earlier computations. The absence of a real inner data structure for floats (incorporating their precisions, for one) is however still a bit hair raising: currently the lengths of the mantissas of the operands are computed again by each float macro or expression operation.</p></li>
+<li><p>(TeXperts only) the macros defined (internally) from <code>\xintdeffunc</code> et al. constructs do not incorporate an initial <code>\romannumeral</code> anymore.</p></li>
+<li><p>renewed desperate efforts at improving the documentation by random shuffling of sections and well thought additions; cuts were considered and even performed.</p></li>
+</ul>
+<h3 id="bug-fixes-12">Bug fixes</h3>
+<ul>
+<li><p>squaring macro <code>\xintSqr</code> from <strong>xintfrac.sty</strong> was broken due to a misspelled sub-macro name. Dates back to <code>1.1</code> release of <code>2014/10/28</code> <code>:-((</code>.</p></li>
+<li><p><code>1.2c</code>’s fix to the subtraction bug from <code>1.2</code> introduced another bug, which in some cases could create leading zeroes in the output, or even worse. This could invalidate other routines using subtractions, like <code>\xintiiSquareRoot</code>.</p></li>
+<li><p>the comparison operators were not recognized by <code>\xintNewIIExpr</code> and <code>\xintdefiifunc</code> constructs.</p></li>
+</ul>
+<h2 id="e-20151122"><code>1.2e (2015/11/22)</code></h2>
+<h3 id="improvements-and-new-features-17">Improvements and new features</h3>
+<ul>
+<li><p>macro <code>\xintunassignvar</code>.</p></li>
+<li><p>slight modifications of the logged messages in case of <code>\xintverbosetrue</code>.</p></li>
+<li><p>a space in <code>\xintdeffunc f(x)&lt;space&gt;:= expression ;</code> is now accepted.</p></li>
+<li><p>documentation enhancements: the <em>Quick Sort</em> section with its included code samples has been entirely re-written; the <em>Commands of the xintexpr package</em> section has been extended and reviewed entirely.</p></li>
+</ul>
+<h3 id="bug-fixes-13">Bug fixes</h3>
+<ul>
+<li><p>in <strong>xintfrac</strong>: the <code>\xintFloatFac</code> from release <code>1.2</code> parsed its argument only through <code>\numexpr</code> but it should have used <code>\xintNum</code>.</p></li>
+<li><p>in <strong>xintexpr</strong>: release <code>1.2d</code> had broken the recognition of sub-expressions immediately after variable names (with tacit multiplication).</p></li>
+<li><p>in <strong>xintexpr</strong>: contrarily to what <code>1.2d</code> documentation said, tacit multiplication was not yet always done with enhanced precedence. Now yes.</p></li>
+</ul>
+<h2 id="d-20151118"><code>1.2d (2015/11/18)</code></h2>
+<h3 id="improvements-and-new-features-18">Improvements and new features</h3>
+<ul>
+<li><p>the function definitions done by <code>\xintdeffunc</code> et al., as well as the macro declarations by <code>\xintNewExpr</code> et al. now have only local scope.</p></li>
+<li><p>tacit multiplication applies to more cases, for example (x+y)z, and always ties more than standard * infix operator, e.g. x/2y is like x/(2*y).</p></li>
+<li><p>some documentation enhancements, particularly in the chapter on xintexpr.sty, and also in the code source comments.</p></li>
+</ul>
+<h3 id="bug-fixes-14">Bug fixes</h3>
+<ul>
+<li>in <strong>xintcore</strong>: release <code>1.2c</code> had inadvertently broken the <code>\xintiiDivRound</code> macro.</li>
+</ul>
+<h2 id="c-20151116"><code>1.2c (2015/11/16)</code></h2>
+<h3 id="improvements-and-new-features-19">Improvements and new features</h3>
+<ul>
+<li><p>macros <code>\xintdeffunc</code>, <code>\xintdefiifunc</code>, <code>\xintdeffloatfunc</code> and boolean <code>\ifxintverbose</code>.</p></li>
+<li><p>on-going code improvements and documentation enhancements, but stopped in order to issue this bugfix release.</p></li>
+</ul>
+<h3 id="bug-fixes-15">Bug fixes</h3>
+<ul>
+<li>in <strong>xintcore</strong>: recent release <code>1.2</code> introduced a bug in the subtraction (happened when 00000001 was found under certain circumstances at certain mod 8 locations).</li>
+</ul>
+<h2 id="b-20151029"><code>1.2b (2015/10/29)</code></h2>
+<h3 id="bug-fixes-16">Bug fixes</h3>
+<ul>
+<li>in <strong>xintcore</strong>: recent release <code>1.2</code> introduced a bug in the division macros, causing a crash when the divisor started with 99999999 (it was attempted to use with 1+99999999 a subroutine expecting only 8-digits numbers).</li>
+</ul>
+<h2 id="a-20151019"><code>1.2a (2015/10/19)</code></h2>
+<h3 id="improvements-and-new-features-20">Improvements and new features</h3>
+<ul>
+<li><p>added <code>\xintKeepUnbraced</code>, <code>\xintTrimUnbraced</code> (<strong>xinttools</strong>) and fixed documentation of <code>\xintKeep</code> and <code>\xintTrim</code> regarding brace stripping.</p></li>
+<li><p>added <code>\xintiiMaxof/\xintiiMinof</code> (<strong>xint</strong>).</p></li>
+<li><p>TeX hackers only: replaced all code uses of <code>\romannumeral-`0</code> by the quicker <code>\romannumeral`&amp;&amp;@</code> (<code>^</code> being used as letter, had to find another character usable with catcode 7).</p></li>
+</ul>
+<h3 id="bug-fixes-17">Bug fixes</h3>
+<ul>
+<li>in <strong>xintexpr</strong>: recent release <code>1.2</code> introduced a bad bug in the parsing of decimal numbers and as a result <code>\xinttheexpr 0.01\relax</code> expanded to <code>0</code> ! (sigh…)</li>
+</ul>
+<h2 id="section-1"><code>1.2 (2015/10/10)</code></h2>
+<h3 id="removed-3">Removed</h3>
+<ul>
+<li>the macros <code>\xintAdd</code>, <code>\xintSub</code>, <code>\xintMul</code>, <code>\xintMax</code>, <code>\xintMin</code>, <code>\xintMaxof</code>, <code>\xintMinof</code> are removed from package <strong>xint</strong>, and only exist in the versions from <strong>xintfrac</strong>. With only <strong>xintcore</strong> or <strong>xint</strong> loaded, one <em>must</em> use <code>\xintiiAdd</code>, <code>\xintiiSub</code>, …, or <code>\xintiAdd</code>, <code>\xintiSub</code>, etc…</li>
+</ul>
+<h3 id="improvements-and-new-features-21">Improvements and new features</h3>
+<ul>
+<li><p>the basic arithmetic implemented in <strong>xintcore</strong> has been entirely rewritten. The mathematics remains the elementary school one, but the <code>TeX</code> implementation achieves higher speed (except, regarding addition/subtraction, for numbers up to about thirty digits), the gains becoming quite significant for numbers with hundreds of digits.</p></li>
+<li><p>the inputs must have less than 19959 digits. But computations with thousands of digits take time.</p></li>
+<li><p>a previously standing limitation of <code>\xintexpr</code>, <code>\xintiiexpr</code>, and of <code>\xintfloatexpr</code> to numbers of less than 5000 digits has been lifted.</p></li>
+<li><p>a <em>qint</em> function is provided to help the parser gather huge integers in one-go, as an exception to its normal mode of operation which expands token by token.</p></li>
+<li><p><code>\xintFloatFac</code> macro for computing the factorials of integers as floating point numbers to a given precision. The <code>!</code> postfix operator inside <code>\xintfloatexpr</code> maps to this new macro rather than to the exact factorial as used by <code>\xintexpr</code> and <code>\xintiiexpr</code>.</p></li>
+<li><p>there is more flexibility in the parsing done by the macros from <strong>xintfrac</strong> on fractional input: the decimal parts of both the numerator and the denominator may arise from a separate expansion via <code>\romannumeral-`0</code>. Also the strict <code>A/B[N]</code> format is a bit relaxed: <code>N</code> may be anything understood by <code>\numexpr</code> (it could even be empty but that possibility has been removed by later <code>1.2f</code> release.)</p></li>
+<li><p>on the other hand an isolated dot <code>.</code> is not legal syntax anymore inside the expression parsers: there must be digits either before or after. It remains legal input for the macros of <strong>xintfrac</strong>.</p></li>
+<li><p>added <code>\ht</code>, <code>\dp</code>, <code>\wd</code>, <code>\fontcharht</code>, etc… to the tokens recognized by the parsers and expanded by <code>\number</code>.</p></li>
+<li><p>an obscure bug in package <strong>xintkernel</strong> has been fixed, regarding the sanitization of catcodes: under certain circumstances (which could not occur in a normal <code>LaTeX</code> context), unusual catcodes could end up being propagated to the external world.</p></li>
+<li><p>an effort at randomly shuffling around various pieces of the documentation has been done.</p></li>
+</ul>
+<h2 id="c-20150912"><code>1.1c (2015/09/12)</code></h2>
+<ul>
+<li><p>bugfix regarding macro <code>\xintAssign</code> from <strong>xinttools</strong> which did not behave correctly in some circumstances (if there was a space before <code>\to</code>, in particular).</p></li>
+<li><p>very minor code improvements, and correction of some issues regarding the source code formatting in <code>sourcexint.pdf</code>, and minor issues in <code>Makefile.mk</code>.</p></li>
+</ul>
+<h2 id="b-20150831"><code>1.1b (2015/08/31)</code></h2>
+<ul>
+<li><p>bugfix: some macros needed by the integer division routine from <strong>xintcore</strong> had been left in <strong>xint.sty</strong> since release <code>1.1</code>. This for example broke the <code>\xintGCD</code> from <strong>xintgcd</strong> if package <strong>xint</strong> was not loaded.</p></li>
+<li><p>Slight enhancements to the documentation, particularly in the <code>Read this first</code> section.</p></li>
+</ul>
+<h2 id="a-20141107"><code>1.1a (2014/11/07)</code></h2>
+<ul>
+<li><p>fixed a bug which prevented <code>\xintNewExpr</code> from producing correctly working macros from a comma separated replacement text.</p></li>
+<li><p><code>\xintiiSqrtR</code> for rounded integer square root; former <code>\xintiiSqrt</code> already produced truncated integer square root; corresponding function <code>sqrtr</code> added to <code>\xintiiexpr..\relax</code> syntax.</p></li>
+<li><p>use of straight quotes in the documentation for better legibility.</p></li>
+<li><p>added <code>\xintiiIsOne</code>, <code>\xintiiifOne</code>, <code>\xintiiifCmp</code>, <code>\xintiiifEq</code>, <code>\xintiiifGt</code>, <code>\xintiiifLt</code>, <code>\xintiiifOdd</code>, <code>\xintiiCmp</code>, <code>\xintiiEq</code>, <code>\xintiiGt</code>, <code>\xintiiLt</code>, <code>\xintiiLtorEq</code>, <code>\xintiiGtorEq</code>, <code>\xintiiNeq</code>, mainly for efficiency of <code>\xintiiexpr</code>.</p></li>
+<li><p>for the same reason, added <code>\xintiiGCD</code> and <code>\xintiiLCM</code>.</p></li>
+<li><p>added the previously mentioned <code>ii</code> macros, and some others from <code>1.1</code>, to the user manual. But their main usage is internal to <code>\xintiiexpr</code>, to skip unnecessary overheads.</p></li>
+<li><p>various typographical fixes throughout the documentation, and a bit of clean up of the code comments. Improved <code>\Factors</code> example of nested <code>subs</code>, <code>rseq</code>, <code>iter</code> in <code>\xintiiexpr</code>.</p></li>
+</ul>
+<h2 id="section-2"><code>1.1 (2014/10/28)</code></h2>
+<h3 id="incompatible-changes-11">Incompatible changes</h3>
+<ul>
+<li><p>in <code>\xintiiexpr</code>, <code>/</code> does <em>rounded</em> division, rather than the Euclidean division (for positive arguments, this is truncated division). The <code>//</code> operator does truncated division,</p></li>
+<li><p>the <code>:</code> operator for three-way branching is gone, replaced with <code>??</code>,</p></li>
+<li><p><code>1e(3+5)</code> is now illegal. The number parser identifies <code>e</code> and <code>E</code> in the same way it does for the decimal mark, earlier versions treated <code>e</code> as <code>E</code> rather as infix operators of highest precedence,</p></li>
+<li><p>the <code>add</code> and <code>mul</code> have a new syntax, old syntax is with <code>`+`</code> and <code>`*`</code> (left quotes mandatory), <code>sum</code> and <code>prd</code> are gone,</p></li>
+<li><p>no more special treatment for encountered brace pairs <code>{..}</code> by the number scanner, <code>a/b[N]</code> notation can be used without use of braces (the <code>N</code> will end up as is in a <code>\numexpr</code>, it is not parsed by the <code>\xintexpr</code>-ession scanner),</p></li>
+<li><p>in earlier releases, place holders for <code>\xintNewExpr</code> could either be denoted <code>#1</code>, <code>#2</code>, … or also <code>$1</code>, <code>$2</code>, … Only the usual <code>#</code> form is now accepted and the special cases previously treated via the second form are now managed via a <code>protect(...)</code> function.</p></li>
+<li><p><strong>xintfrac</strong>: <code>\xintFloor</code> and <code>\xintCeil</code> add a trailing <code>/1[0]</code> to their (integer) output. New <code>\xintiFloor</code> and <code>\xintiCeil</code> do not.</p></li>
+</ul>
+<h3 id="removed-4">Removed</h3>
+<ul>
+<li><code>\xintnumexpr</code>, <code>\xintthenumexpr</code>, <code>\xintNewNumExpr</code>: use <code>\xintiexpr</code>, <code>\xinttheiexpr</code>, <code>\xintNewIExpr</code>.</li>
+</ul>
+<h3 id="deprecated-1">Deprecated</h3>
+<ul>
+<li><p><code>\xintDivision</code>, <code>\xintQuo</code>, <code>\xintRem</code>: use <code>\xintiDivision</code>, <code>\xintiQuo</code>, <code>\xintiRem</code>.</p></li>
+<li><p><code>\xintMax</code>, <code>\xintMin</code>, <code>\xintAdd</code>, <code>\xintSub</code>, <code>\xintMul</code> (<strong>xint</strong>): their usage without <strong>xintfrac</strong> is deprecated; use <code>\xintiMax</code>, <code>\xintiMin</code>, <code>\xintiAdd</code>, <code>\xintiSub</code>, <code>\xintiMul</code>.</p></li>
+<li><p>the <code>&amp;</code> and <code>|</code> as Boolean operators in <code>xintexpr</code>-essions are deprecated in favour of <code>&amp;&amp;</code> and <code>||</code>. The single letter operators might be assigned some other meaning in some later release (bitwise operations, perhaps). Do not use them.</p></li>
+</ul>
+<h3 id="improvements-and-new-features-22">Improvements and new features</h3>
+<ul>
+<li><p>new package <strong>xintcore</strong> has been split off <strong>xint</strong>. It contains the core arithmetic macros (it is loaded by LaTeX package <strong>bnumexpr</strong>),</p></li>
+<li><p>neither <strong>xint</strong> nor <strong>xintfrac</strong> load <strong>xinttools</strong>. Only <strong>xintexpr</strong> does,</p></li>
+<li><p>whenever some portion of code has been revised, often use has been made of the <code>\xint_dothis</code> and <code>\xint_orthat</code> pair of macros for expandably branching,</p></li>
+<li><p>these tiny helpful macros, and a few others are in package <strong>xintkernel</strong> which contains also the catcode and loading order management code, initially inspired by code found in Heiko Oberdiek’s packages,</p></li>
+<li><p>the source code, which was suppressed from <code>xint.pdf</code> in release <code>1.09n</code>, is now compiled into a separate file <code>sourcexint.pdf</code>,</p></li>
+<li><p>faster handling by <code>\xintAdd</code>, <code>\xintSub</code>, <code>\xintMul</code>, … of the case where one of the arguments is zero,</p></li>
+<li><p>the <code>\xintAdd</code> and <code>\xintSub</code> macros from package <strong>xintfrac</strong> check if one of the denominators is a multiple of the other, and only if this is not the case do they multiply the denominators. But systematic reduction would be too costly,</p></li>
+<li><p>this naturally will be also the case for the <code>+</code> and <code>-</code> operations in <code>\xintexpr</code>,</p></li>
+<li><p><strong>xint</strong> added <code>\xintiiDivRound</code>, <code>\xintiiDivTrunc</code>, <code>\xintiiMod</code> for rounded and truncated division of big integers (next to <code>\xintiiQuo</code> and <code>\xintiiRem</code>),</p></li>
+<li><p>with <strong>xintfrac</strong> loaded, the <code>\xintNum</code> macro does <code>\xintTTrunc</code> (which is truncation to an integer, same as <code>\xintiTrunc {0}</code>),</p></li>
+<li><p>added <code>\xintMod</code> to <strong>xintfrac</strong> for modulo operation with fractional numbers,</p></li>
+<li><p>added <code>\xintiFloor</code> and <code>\xintiCeil</code> to <strong>xintfrac</strong>,</p></li>
+<li><p><code>\xintiexpr</code>, <code>\xinttheiexpr</code> admit an optional argument within brackets <code>[d]</code>, they round the computation result (or results, if comma separated) to <code>d</code> digits after decimal mark, (the whole computation is done exactly, as in <code>xintexpr</code>),</p></li>
+<li><p><code>\xintfloatexpr</code>, <code>\xintthefloatexpr</code> similarly admit an optional argument which serves to keep only <code>d</code> digits of precision, getting rid of cumulated uncertainties in the last digits (the whole computation is done according to the precision set via <code>\xintDigits</code>),</p></li>
+<li><p><code>\xinttheexpr</code> and <code>\xintthefloatexpr</code> <em>pretty-print</em> if possible, the former removing unit denominator or <code>[0]</code> brackets, the latter avoiding scientific notation if decimal notation is practical,</p></li>
+<li><p>the <code>//</code> does truncated division and <code>/:</code> is the associated modulo,</p></li>
+<li><p>multi-character operators <code>&amp;&amp;</code>, <code>||</code>, <code>==</code>, <code>&lt;=</code>, <code>&gt;=</code>, <code>!=</code>, <code>**</code>,</p></li>
+<li><p>multi-letter infix binary words <code>'and'</code>, <code>'or'</code>, <code>'xor'</code>, <code>'mod'</code> (straight quotes mandatory),</p></li>
+<li><p>functions <code>even</code>, <code>odd</code>,</p></li>
+<li><p><code>\xintdefvar A3:=3.1415;</code> for variable definitions (non expandable, naturally), usable in subsequent expressions; variable names may contain letters, digits, underscores. They should not start with a digit, the <code>@</code> is reserved, and single lowercase and uppercase Latin letters are predefined to work as dummy variables (see next),</p></li>
+<li><p>generation of comma separated lists <code>a..b</code>, <code>a..[d]..b</code>,</p></li>
+<li><p>Python syntax-like list extractors <code>[list][n:]</code>, <code>[list][:n]</code>, <code>[list][a:b]</code> allowing negative indices, but no optional step argument, and <code>[list][n]</code> (<code>n=0</code> for the number of items in the list),</p></li>
+<li><p>functions <code>first</code>, <code>last</code>, <code>reversed</code>,</p></li>
+<li><p>itemwise operations on comma separated lists <code>a*[list]</code>, etc.., possible on both sides <code>a*[list]^b</code>, and obeying the same precedence rules as with numbers,</p></li>
+<li><p><code>add</code> and <code>mul</code> must use a dummy variable: <code>add(x(x+1)(x-1), x=-10..10)</code>,</p></li>
+<li><p>variable substitutions with <code>subs</code>: <code>subs(subs(add(x^2+y^2,x=1..y),y=t),t=20)</code>,</p></li>
+<li><p>sequence generation using <code>seq</code> with a dummy variable: <code>seq(x^3, x=-10..10)</code>,</p></li>
+<li><p>simple recursive lists with <code>rseq</code>, with <code>@</code> given the last value, <code>rseq(1;2@+1,i=1..10)</code>,</p></li>
+<li><p>higher recursion with <code>rrseq</code>, <code>@1</code>, <code>@2</code>, <code>@3</code>, <code>@4</code>, and <code>@@(n)</code> for earlier values, up to <code>n=K</code> where <code>K</code> is the number of terms of the initial stretch <code>rrseq(0,1;@1+@2,i=2..100)</code>,</p></li>
+<li><p>iteration with <code>iter</code> which is like <code>rrseq</code> but outputs only the last <code>K</code> terms, where <code>K</code> was the number of initial terms,</p></li>
+<li><p>inside <code>seq</code>, <code>rseq</code>, <code>rrseq</code>, <code>iter</code>, possibility to use <code>omit</code>, <code>abort</code> and <code>break</code> to control termination,</p></li>
+<li><p><code>n++</code> potentially infinite index generation for <code>seq</code>, <code>rseq</code>, <code>rrseq</code>, and <code>iter</code>, it is advised to use <code>abort</code> or <code>break(..)</code> at some point,</p></li>
+<li><p>the <code>add</code>, <code>mul</code>, <code>seq</code>, … are nestable,</p></li>
+<li><p><code>\xintthecoords</code> converts a comma separated list of an even number of items to the format expected by the <code>TikZ</code> <code>coordinates</code> syntax,</p></li>
+<li><p>completely new version <code>\xintNewExpr</code>, <code>protect</code> function to handle external macros. The dollar sign <code>$</code> for place holders is not accepted anymore, only the standard macro parameter <code>#</code>. Not all constructs are compatible with <code>\xintNewExpr</code>.</p></li>
+</ul>
+<h3 id="bug-fixes-18">Bug fixes</h3>
+<ul>
+<li><p><code>\xintZapFirstSpaces</code> hence also <code>\xintZapSpaces</code> from package <strong>xinttools</strong> were buggy when used with an argument either empty or containing only space tokens.</p></li>
+<li><p><code>\xintiiexpr</code> did not strip leading zeroes, hence <code>\xinttheiiexpr 001+1\relax</code> did not obtain the expected result …</p></li>
+<li><p><code>\xinttheexpr \xintiexpr 1.23\relax\relax</code> should have produced <code>1</code>, but it produced <code>1.23</code></p></li>
+<li><p>the catcode of <code>;</code> was not set at package launching time.</p></li>
+<li><p>the <code>\XINTinFloatPrd:csv</code> macro name had a typo, hence <code>prd</code> was non-functional in <code>\xintfloatexpr</code>.</p></li>
+</ul>
+<h2 id="n-20140401"><code>1.09n (2014/04/01)</code></h2>
+<ul>
+<li><p>the user manual does not include by default the source code anymore: the <code>\NoSourceCode</code> toggle in file <code>xint.tex</code> has to be set to 0 before compilation to get source code inclusion (later release <code>1.1</code> made source code available as <code>sourcexint.pdf</code>).</p></li>
+<li><p>bug fix (<strong>xinttools</strong>) in <code>\XINT_nthelt_finish</code> (this bug was introduced in <code>1.09i</code> of <code>2013/12/18</code> and showed up when the index <code>N</code> was larger than the number of elements of the list).</p></li>
+</ul>
+<h2 id="m-20140226"><code>1.09m (2014/02/26)</code></h2>
+<ul>
+<li><p>new in <strong>xinttools</strong>: <code>\xintKeep</code> keeps the first <code>N</code> or last <code>N</code> elements of a list (sequence of braced items); <code>\xintTrim</code> cuts out either the first <code>N</code> or the last <code>N</code> elements from a list.</p></li>
+<li><p>new in <strong>xintcfrac</strong>: <code>\xintFGtoC</code> finds the initial partial quotients common to two numbers or fractions <code>f</code> and <code>g</code>; <code>\xintGGCFrac</code> is a clone of <code>\xintGCFrac</code> which however does not assume that the coefficients of the generalized continued fraction are numeric quantities. Some other minor changes.</p></li>
+</ul>
+<h2 id="kb-20140213"><code>1.09kb (2014/02/13)</code></h2>
+<ul>
+<li><p>bug fix (<strong>xintexpr</strong>): an aloof modification done by <code>1.09i</code> to <code>\xintNewExpr</code> had resulted in a spurious trailing space present in the outputs of all macros created by <code>\xintNewExpr</code>, making nesting of such macros impossible.</p></li>
+<li><p>bug fix (<strong>xinttools</strong>): <code>\xintBreakFor</code> and <code>\xintBreakForAndDo</code> were buggy when used in the last iteration of an <code>\xintFor</code> loop.</p></li>
+<li><p>bug fix (<strong>xinttools</strong>): <code>\xintSeq</code> from <code>1.09k</code> needed a <code>\chardef</code> which was missing from <code>xinttools.sty</code>, it was in <code>xint.sty</code>.</p></li>
+</ul>
+<h2 id="k-20140121"><code>1.09k (2014/01/21)</code></h2>
+<ul>
+<li><p>inside <code>\xintexpr..\relax</code> (and its variants) tacit multiplication is implied when a number or operand is followed directly with an opening parenthesis,</p></li>
+<li><p>the <code>&quot;</code> for denoting (arbitrarily big) hexadecimal numbers is recognized by <code>\xintexpr</code> and its variants (package <strong>xintbinhex</strong> is required); a fractional hexadecimal part introduced by a dot <code>.</code> is allowed.</p></li>
+<li><p>re-organization of the first sections of the user manual.</p></li>
+<li><p>bug fix (<strong>xinttools</strong>, <strong>xint</strong>, …): forgotten catcode check of <code>&quot;</code> at loading time has been added.</p></li>
+</ul>
+<h2 id="j-20140109"><code>1.09j (2014/01/09)</code></h2>
+<ul>
+<li><p>(<strong>xint</strong>) the core division routines have been re-written for some (limited) efficiency gain, more pronounced for small divisors. As a result the <em>computation of one thousand digits of <span class="math inline"><em>Ï€</em></span></em> is close to three times faster than with earlier releases.</p></li>
+<li><p>some various other small improvements, particularly in the power routines.</p></li>
+<li><p>(<strong>xintfrac</strong>) a macro <code>\xintXTrunc</code> is designed to produce thousands or even tens of thousands of digits of the decimal expansion of a fraction. Although completely expandable it has its use limited to inside an <code>\edef</code>, <code>\write</code>, <code>\message</code>, . It can thus not be nested as argument to another package macro.</p></li>
+<li><p>(<strong>xintexpr</strong>) the tacit multiplication done in <code>\xintexpr..\relax</code> on encountering a count register or variable, or a <code>\numexpr</code>, while scanning a (decimal) number, is extended to the case of a sub <code>\xintexpr</code>-ession.</p></li>
+<li><p><code>\xintexpr</code> can now be used in an <code>\edef</code> with no <code>\xintthe</code> prefix; it will execute completely the computation, and the error message about a missing <code>\xintthe</code> will be inhibited. Previously, in the absence of <code>\xintthe</code>, expansion could only be a full one (with <code>\romannumeral-`0</code>), not a complete one (with <code>\edef</code>). Note that this differs from the behavior of the non-expandable <code>\numexpr</code>: <code>\the</code> or <code>\number</code> (or <code>\romannumeral</code>) are needed not only to print but also to trigger the computation, whereas <code>\xintthe</code> is mandatory only for the printing step.</p></li>
+<li><p>the default behavior of <code>\xintAssign</code> is changed, it now does not do any further expansion beyond the initial full-expansion which provided the list of items to be assigned to macros.</p></li>
+<li><p>bug fix (<strong>xintfrac</strong>): <code>1.09i</code> did an unexplainable change to <code>\XINT_infloat_zero</code> which broke the floating point routines for vanishing operands =:(((</p></li>
+<li><p>bug fix: the <code>1.09i</code> <code>xint.ins</code> file produced a buggy <code>xint.tex</code> file.</p></li>
+</ul>
+<h2 id="i-20131218"><code>1.09i (2013/12/18)</code></h2>
+<ul>
+<li><p>(<strong>xintexpr</strong>) <code>\xintiiexpr</code> is a variant of <code>\xintexpr</code> which is optimized to deal only with (long) integers, <code>/</code> does a euclidean quotient.</p></li>
+<li><p><em>deprecated</em>: <code>\xintnumexpr</code>, <code>\xintthenumexpr</code>, <code>\xintNewNumExpr</code> are renamed, respectively, <code>\xintiexpr</code>, <code>\xinttheiexpr</code>, <code>\xintNewIExpr</code>. The earlier denominations are kept but are to be removed at some point.</p></li>
+<li><p>it is now possible within <code>\xintexpr...\relax</code> and its variants to use count, dimen, and skip registers or variables without explicit <code>\the/\number</code>: the parser inserts automatically <code>\number</code> and a tacit multiplication is implied when a register or variable immediately follows a number or fraction. Regarding dimensions and <code>\number</code>, see the further discussion in <em>Dimensions</em>.</p></li>
+<li><p>(<strong>xintfrac</strong>) conditional <code>\xintifOne</code>; <code>\xintifTrueFalse</code> renamed to <code>\xintifTrueAelseB</code>; macros <code>\xintTFrac</code> (<code>fractional part</code>, mapped to function <code>frac</code> in <code>\xintexpr</code>-essions), <code>\xintFloatE</code>.</p></li>
+<li><p>(<strong>xinttools</strong>) <code>\xintAssign</code> admits an optional argument to specify the expansion type to be used: <code>[]</code> (none, default), <code>[o]</code> (once), <code>[oo]</code> (twice), <code>[f]</code> (full), <code>[e]</code> (<code>\edef</code>),… to define the macros</p></li>
+<li><p><strong>xinttools</strong> defines <code>\odef</code>, <code>\oodef</code>, <code>\fdef</code> (if the names have already been assigned, it uses <code>\xintoodef</code> etc…). These tools are provided for the case one uses the package macros in a non-expandable context. <code>\oodef</code> expands twice the macro replacement text, and <code>\fdef</code> applies full expansion. They are useful in situations where one does not want a full <code>\edef</code>. <code>\fdef</code> appears to be faster than <code>\oodef</code> in almost all cases (with less than thousand digits in the result), and even faster than <code>\edef</code> for expanding the package macros when the result has a few dozens of digits. <code>\oodef</code> needs that expansion ends up in thousands of digits to become competitive with the other two.</p></li>
+<li><p>some across the board slight efficiency improvement as a result of modifications of various types to <em>fork macros</em> and <em>branching conditionals</em> which are used internally.</p></li>
+<li><p>bug fix (<strong>xint</strong>): <code>\xintAND</code> and <code>\xintOR</code> inserted a space token in some cases and did not expand as promised in two steps <code>:-((</code> (bug dating back to <code>1.09a</code> I think; this bug was without consequences when using <code>&amp;</code> and <code>|</code> in <code>\xintexpr-essions</code>, it affected only the macro form).</p></li>
+<li><p>bug fix (<strong>xintcfrac</strong>): <code>\xintFtoCCv</code> still ended fractions with the <code>[0]</code>’s which were supposed to have been removed since release <code>1.09b</code>.</p></li>
+<li><p><em>deprecated</em>: <code>\xintifTrueFalse</code>, <code>\xintifTrue</code>; use <code>\xintifTrueAelseB</code>.</p></li>
+</ul>
+<h2 id="h-20131128"><code>1.09h (2013/11/28)</code></h2>
+<ul>
+<li><p>parts of the documentation have been re-written or re-organized, particularly the discussion of expansion issues and of input and output formats.</p></li>
+<li><p>the expansion types of macro arguments are documented in the margin of the macro descriptions, with conventions mainly taken over from those in the <code>LaTeX3</code> documentation.</p></li>
+<li><p>a dependency of <strong>xinttools</strong> on <strong>xint</strong> (inside <code>\xintSeq</code>) has been removed.</p></li>
+<li><p>(<strong>xintgcd</strong>) <code>\xintTypesetEuclideAlgorithm</code> and <code>\xintTypesetBezoutAlgorithm</code> have been slightly modified (regarding indentation).</p></li>
+<li><p>(<strong>xint</strong>) macros <code>xintiSum</code> and <code>xintiPrd</code> are renamed to <code>\xintiiSum</code> and <code>\xintiiPrd</code>.</p></li>
+<li><p>(<strong>xinttools</strong>) a count register used in <code>1.09g</code> in the <code>\xintFor</code> loops for parsing purposes has been removed and replaced by use of a <code>\numexpr</code>.</p></li>
+<li><p>the few uses of <code>\loop</code> have been replaced by <code>\xintloop/\xintiloop</code>.</p></li>
+<li><p>all macros of <strong>xinttools</strong> for which it makes sense are now declared <code>\long</code>.</p></li>
+</ul>
+<h2 id="g-20131122"><code>1.09g (2013/11/22)</code></h2>
+<ul>
+<li><p>a package <strong>xinttools</strong> is detached from <strong>xint</strong>, to make tools such as <code>\xintFor</code>, <code>\xintApplyUnbraced</code>, and <code>\xintiloop</code> available without the <strong>xint</strong> overhead.</p></li>
+<li><p>expandable nestable loops <code>\xintloop</code> and <code>\xintiloop</code>.</p></li>
+<li><p>bugfix: <code>\xintFor</code> and <code>\xintFor*</code> do not modify anymore the value of <code>\count 255</code>.</p></li>
+</ul>
+<h2 id="f-20131104"><code>1.09f (2013/11/04)</code></h2>
+<ul>
+<li><p>(<strong>xint</strong>) <code>\xintZapFirstSpaces</code>, <code>\xintZapLastSpaces</code>, <code>\xintZapSpaces</code>, <code>\xintZapSpacesB</code>, for expandably stripping away leading and/or ending spaces.</p></li>
+<li><p><code>\xintCSVtoList</code> by default uses <code>\xintZapSpacesB</code> to strip away spaces around commas (or at the start and end of the comma separated list).</p></li>
+<li><p>also the <code>\xintFor</code> loop will strip out all spaces around commas and at the start and the end of its list argument; and similarly for <code>\xintForpair</code>, <code>\xintForthree</code>, <code>\xintForfour</code>.</p></li>
+<li><p><code>\xintFor</code> <em>et al.</em> accept all macro parameters from <code>#1</code> to <code>#9</code>.</p></li>
+<li><p>for reasons of inner coherence some macros previously with one extra <code>i</code> in their names (e.g. <code>\xintiMON</code>) now have a doubled <code>ii</code> (<code>\xintiiMON</code>) to indicate that they skip the overhead of parsing their inputs via <code>\xintNum</code>. Macros with a <em>single</em> <code>i</code> such as <code>\xintiAdd</code> are those which maintain the non-<strong>xintfrac</strong> output format for big integers, but do parse their inputs via <code>\xintNum</code> (since release <code>1.09a</code>). They too may have doubled-<code>i</code> variants for matters of programming optimization when working only with (big) integers and not fractions or decimal numbers.</p></li>
+</ul>
+<h2 id="e-20131029"><code>1.09e (2013/10/29)</code></h2>
+<ul>
+<li><p>(<strong>xint</strong>) <code>\xintintegers</code>, <code>\xintdimensions</code>, <code>\xintrationals</code> for infinite <code>\xintFor</code> loops, interrupted with <code>\xintBreakFor</code> and <code>\xintBreakForAndDo</code>.</p></li>
+<li><p><code>\xintifForFirst</code>, <code>\xintifForLast</code> for the <code>\xintFor</code> and <code>\xintFor*</code> loops,</p></li>
+<li><p>the <code>\xintFor</code> and <code>xintFor*</code> loops are now <code>\long</code>, the replacement text and the items may contain explicit <code>\par</code>’s.</p></li>
+<li><p>conditionals <code>\xintifCmp</code>, <code>\xintifInt</code>, <code>\xintifOdd</code>.</p></li>
+<li><p>bug fix (<strong>xint</strong>): the <code>\xintFor</code> loop (not <code>\xintFor*</code>) did not correctly detect an empty list.</p></li>
+<li><p>bug fix (<strong>xint</strong>): <code>\xintiSqrt {0}</code> crashed. <code>:-((</code></p></li>
+<li><p>the documentation has been enriched with various additional examples, such as the <em>the quick sort algorithm illustrated</em> or the various ways of <em>computing prime numbers</em>.</p></li>
+<li><p>the documentation explains with more details various expansion related issues, particularly in relation to conditionals.</p></li>
+</ul>
+<h2 id="d-20131022"><code>1.09d (2013/10/22)</code></h2>
+<ul>
+<li><p>bug fix (<strong>xint</strong>): <code>\xintFor*</code> is modified to gracefully handle a space token (or more than one) located at the very end of its list argument (as the space before <code>\do</code> in <code>\xintFor* #1 in {{a}{b}{c}&lt;space&gt;} \do {stuff}</code>; spaces at other locations were already harmless). Furthermore this new version <em>f-expands</em> the un-braced list items. After <code>\def\x{{1}{2}}</code> and <code>\def\y{{a}\x {b}{c}\x }</code>, <code>\y</code> will appear to <code>\xintFor*</code> exactly as if it had been defined as <code>\def\y{{a}{1}{2}{b}{c}{1}{2}}</code>.</p></li>
+<li><p>same bug fix for <code>\xintApplyInline</code>.</p></li>
+</ul>
+<h2 id="c-20131009"><code>1.09c (2013/10/09)</code></h2>
+<ul>
+<li><p>(<strong>xintexpr</strong>) added <code>bool</code> and <code>togl</code> to the <code>\xintexpr</code> syntax; also added <code>\xintboolexpr</code> and <code>\xintifboolexpr</code>.</p></li>
+<li><p>added <code>\xintNewNumExpr</code>.</p></li>
+<li><p>the factorial <code>!</code> and branching <code>?</code>, <code>:</code>, operators (in <code>\xintexpr...\relax</code>) have now less precedence than a function name located just before,</p></li>
+<li><p>(<strong>xint</strong>) <code>\xintFor</code> is a new type of loop, whose replacement text inserts the comma separated values or list items via macro parameters, rather than encapsulated in macros; the loops are nestable up to four levels (nine levels since <code>1.09f</code>) and their replacement texts are allowed to close groups as happens with the tabulation in alignments,</p></li>
+<li><p><code>\xintForpair</code>, <code>\xintForthree</code>, <code>\xintForfour</code> are experimental variants of <code>\xintFor</code>,</p></li>
+<li><p><code>\xintApplyInline</code> has been enhanced in order to be usable for generating rows (partially or completely) in an alignment,</p></li>
+<li><p>command <code>\xintSeq</code> to generate (expandably) arithmetic sequences of (short) integers,</p></li>
+<li><p>again various improvements and changes in the documentation.</p></li>
+</ul>
+<h2 id="b-20131003"><code>1.09b (2013/10/03)</code></h2>
+<ul>
+<li><p>various improvements in the documentation,</p></li>
+<li><p>more economical catcode management and re-loading handling,</p></li>
+<li><p>removal of all those <code>[0]</code>’s previously forcefully added at the end of fractions by various macros of <strong>xintcfrac</strong>,</p></li>
+<li><p><code>\xintNthElt</code> with a negative index returns from the tail of the list,</p></li>
+<li><p>macro <code>\xintPRaw</code> to have something like what <code>\xintFrac</code> does in math mode; i.e. a <code>\xintRaw</code> which does not print the denominator if it is one.</p></li>
+</ul>
+<h2 id="a-20130924"><code>1.09a (2013/09/24)</code></h2>
+<ul>
+<li><p>(<strong>xintexpr</strong>) <code>\xintexpr..\relax</code> and <code>\xintfloatexpr..\relax</code> admit functions in their syntax, with comma separated values as arguments, among them <code>reduce, sqr, sqrt, abs, sgn, floor, ceil, quo, rem, round, trunc, float, gcd, lcm, max, min, sum, prd, add, mul, not, all, any, xor</code>.</p></li>
+<li><p>comparison (<code>&lt;</code>, <code>&gt;</code>, <code>=</code>) and logical (<code>|</code>, <code>&amp;</code>) operators.</p></li>
+<li><p>the command <code>\xintthe</code> which converts <code>\xintexpr</code>essions into printable format (like <code>\the</code> with <code>\numexpr</code>) is more efficient, for example one can do <code>\xintthe\x</code> if <code>\x</code> was defined to be an <code>\xintexpr..\relax</code>:</p>
+<pre><code>\def\x{\xintexpr 3^57\relax}
+\def\y{\xintexpr \x^(-2)\relax}
+\def\z{\xintexpr \y-3^-114\relax}
+\xintthe\z</code></pre></li>
+<li><p><code>\xintnumexpr .. \relax</code> (now renamed <code>\xintiexpr</code>) is <code>\xintexpr round( .. ) \relax</code>.</p></li>
+<li><p><code>\xintNewExpr</code> now works with the standard macro parameter character <code>#</code>.</p></li>
+<li><p>both regular <code>\xintexpr</code>-essions and commands defined by <code>\xintNewExpr</code> will work with comma separated lists of expressions,</p></li>
+<li><p>commands <code>\xintFloor</code>, <code>\xintCeil</code>, <code>\xintMaxof</code>, <code>\xintMinof</code> (package <strong>xintfrac</strong>), <code>\xintGCDof</code>, <code>\xintLCM</code>, <code>\xintLCMof</code> (package <strong>xintgcd</strong>), <code>\xintifLt</code>, <code>\xintifGt</code>, <code>\xintifSgn</code>, <code>\xintANDof</code>, …</p></li>
+<li><p>The arithmetic macros from package <strong>xint</strong> now filter their operands via <code>\xintNum</code> which means that they may use directly count registers and <code>\numexpr</code>-essions without having to prefix them by <code>\the</code>. This is thus similar to the situation holding previously already when <strong>xintfrac</strong> was loaded.</p></li>
+<li><p>a bug (<strong>xintfrac</strong>) introduced in <code>1.08b</code> made <code>\xintCmp</code> crash when one of its arguments was zero. <code>:-((</code></p></li>
+</ul>
+<h2 id="b-20130614"><code>1.08b (2013/06/14)</code></h2>
+<ul>
+<li><p>(<strong>xintexpr</strong>) Correction of a problem with spaces inside <code>\xintexpr</code>-essions.</p></li>
+<li><p>(<strong>xintfrac</strong>) Additional improvements to the handling of floating point numbers.</p></li>
+<li><p>section <em>Use of count registers</em> documenting how count registers may be directly used in arguments to the macros of <strong>xintfrac</strong>.</p></li>
+</ul>
+<h2 id="a-20130611"><code>1.08a (2013/06/11)</code></h2>
+<ul>
+<li><p>(<strong>xintfrac</strong>) Improved efficiency of the basic conversion from exact fractions to floating point numbers, with ensuing speed gains especially for the power function macros <code>\xintFloatPow</code> and <code>\xintFloatPower</code>,</p></li>
+<li><p>Better management by <code>\xintCmp</code>, <code>\xintMax</code>, <code>\xintMin</code> and <code>\xintGeq</code> of inputs having big powers of ten in them.</p></li>
+<li><p>Macros for floating point numbers added to the <strong>xintseries</strong> package.</p></li>
+</ul>
+<h2 id="section-3"><code>1.08 (2013/06/07)</code></h2>
+<ul>
+<li><p>(<strong>xint</strong> and <strong>xintfrac</strong>) Macros for extraction of square roots, for floating point numbers (<code>\xintFloatSqrt</code>), and integers (<code>\xintiSqrt</code>).</p></li>
+<li><p>new package <strong>xintbinhex</strong> providing <em>conversion routines</em> to and from binary and hexadecimal bases.</p></li>
+</ul>
+<h2 id="section-4"><code>1.07 (2013/05/25)</code></h2>
+<ul>
+<li><p>The <strong>xintexpr</strong> package is a new core constituent (which loads automatically <strong>xintfrac</strong> and <strong>xint</strong>) and implements the expandable expanding parser</p>
+<pre><code>\xintexpr . . . \relax,</code></pre>
+<p>and its variant</p>
+<pre><code>\xintfloatexpr . . . \relax</code></pre>
+<p>allowing on input formulas using the infix operators <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, and <code>^</code>, and arbitrary levels of parenthesizing. Within a float expression the operations are executed according to the current value set by <code>\xintDigits</code>. Within an <code>\xintexpr</code>-ession the binary operators are computed exactly.</p>
+<p>To write the <code>\xintexpr</code> parser I benefited from the commented source of the <code>l3fp</code> parser; the <code>\xintexpr</code> parser has its own features and peculiarities. <em>See its documentation</em>.</p></li>
+<li><p>The floating point precision <code>D</code> is set (this is a local assignment to a <code>\mathchar</code> variable) with <code>\xintDigits := D;</code> and queried with <code>\xinttheDigits</code>. It may be set to anything up to <code>32767</code>.<a href="#fn1" class="footnote-ref" id="fnref1"><sup>1</sup></a> The macro incarnations of the binary operations admit an optional argument which will replace pointwise <code>D</code>; this argument may exceed the <code>32767</code> bound.</p></li>
+<li><p>The <strong>xintfrac</strong> macros now accept numbers written in scientific notation, the <code>\xintFloat</code> command serves to output its argument with a given number <code>D</code> of significant figures. The value of <code>D</code> is either given as optional argument to <code>\xintFloat</code> or set with <code>\xintDigits := D;</code>. The default value is <code>16</code>.</p></li>
+</ul>
+<h2 id="b-20130514"><code>1.06b (2013/05/14)</code></h2>
+<ul>
+<li>Minor code and documentation improvements. Everywhere in the source code, a more modern underscore has replaced the @ sign.</li>
+</ul>
+<h2 id="section-5"><code>1.06 (2013/05/07)</code></h2>
+<ul>
+<li><p>Some code improvements, particularly for macros of <strong>xint</strong> doing loops.</p></li>
+<li><p>New utilities in <strong>xint</strong> for expandable manipulations of lists:</p>
+<pre><code>\xintNthElt, \xintCSVtoList, \xintRevWithBraces</code></pre></li>
+<li><p>The macros did only a double expansion of their arguments. They now fully expand them (using <code>\romannumeral-`0</code>). Furthermore, in the case of arguments constrained to obey the TeX bounds they will be inserted inside a <code>\numexpr..\relax</code>, hence completely expanded, one may use count registers, even infix arithmetic operations, etc…</p></li>
+</ul>
+<h2 id="section-6"><code>1.05 (2013/05/01)</code></h2>
+<p>Minor changes and additions to <strong>xintfrac</strong> and <strong>xintcfrac</strong>.</p>
+<h2 id="section-7"><code>1.04 (2013/04/25)</code></h2>
+<ul>
+<li><p>New component <strong>xintcfrac</strong> devoted to continued fractions.</p></li>
+<li><p><strong>xint</strong>: faster division.</p></li>
+<li><p><strong>xint</strong>: added expandable macros <code>\xintListWithSep</code> and <code>\xintApply</code> to handle token lists.</p></li>
+<li><p><strong>xintfrac</strong>: added <code>\xintRound</code>.</p></li>
+<li><p><strong>xintseries</strong> has a new implementation of <code>\xintPowerSeries</code> based on a Horner scheme, and new macro <code>\xintRationalSeries</code>. Both to help deal with the <em>denominator buildup</em> plague.</p></li>
+<li><p><code>tex xint.dtx</code> extracts style files (no need for a <code>xint.ins</code>).</p></li>
+<li><p>Bug fix (<strong>xintfrac</strong>): <code>\xintIrr {0}</code> crashed.</p></li>
+</ul>
+<h2 id="section-8"><code>1.03 (2013/04/14)</code></h2>
+<ul>
+<li><p>New modules <strong>xintfrac</strong> (expandable operations on fractions) and <strong>xintseries</strong> (expandable partial sums with xint package).</p></li>
+<li><p>Slightly improved division and faster multiplication (the best ordering of the arguments is chosen automatically).</p></li>
+<li><p>Added illustration of Machin algorithm to the documentation.</p></li>
+</ul>
+<h2 id="section-9"><code>1.0 (2013/03/28)</code></h2>
+<p>Initial announcement:</p>
+<blockquote>
+<p>The <strong>xint</strong> package implements with expandable TeX macros the basic arithmetic operations of addition, subtraction, multiplication and division, as applied to arbitrarily long numbers represented as chains of digits with an optional minus sign.</p>
+</blockquote>
+<blockquote>
+<p>The <strong>xintgcd</strong> package provides implementations of the Euclidean algorithm and of its typesetting.</p>
+</blockquote>
+<blockquote>
+<p>The packages may be used with Plain and with LaTeX.</p>
+</blockquote>
+<section class="footnotes">
+<hr />
+<ol>
+<li id="fn1"><p>but values higher than 100 or 200 will presumably give too slow evaluations.<a href="#fnref1" class="footnote-back">↩</a></p></li>
+</ol>
+</section>
+</body>
+</html>
diff --git a/macros/generic/xint/CHANGES.pdf b/macros/generic/xint/CHANGES.pdf
new file mode 100644
index 0000000000..5ae2956477
--- /dev/null
+++ b/macros/generic/xint/CHANGES.pdf
Binary files differ
diff --git a/macros/generic/xint/Makefile b/macros/generic/xint/Makefile
new file mode 100644
index 0000000000..df8fd9a051
--- /dev/null
+++ b/macros/generic/xint/Makefile
@@ -0,0 +1,20 @@
+# Makefile for compilation of the complete xint
+# documentation, packages, and installation.
+# (C) 2014-2015 Jean-Francois Burnol
+# distributed under LPPL 1.3c or later at your convenience.
+
+# with this file Makefile and xint.dtx in a working
+# repertory run 'make' and then get further instructions.
+
+# Tested with GNU Make 3.81 on Mac OS X Mavericks,
+# with TeXLive 2014 and Pandoc 1.13.1, xint.dtx v1.1
+
+# For some reason I would like Makefile.mk to be always
+# recreated if xint.dtx is newer, *before* being included
+# here via include, but my brief attempt (2015/09/16) did
+# not succeed.
+
+Makefile.mk: xint.dtx ; etex xint.dtx
+
+include Makefile.mk
+
diff --git a/macros/generic/xint/README b/macros/generic/xint/README
new file mode 100644
index 0000000000..9bd0a96470
--- /dev/null
+++ b/macros/generic/xint/README
@@ -0,0 +1,205 @@
+ Source: xint.dtx 1.3e 2019/04/05 (doc 2019/04/05)
+ Author: Jean-Francois Burnol
+ Info: Expandable operations on big integers, decimals, fractions
+ License: LPPL 1.3e
+
+This README is also available as README.pdf and README.html.
+
+Change log is to be found in CHANGES.pdf or CHANGES.html.
+
+The user manual is xint.pdf, and the commented source code is available
+as sourcexint.pdf.
+
+
+
+AIM
+
+
+The basic aim is provide _expandable_ computations on integers,
+fractions, and floating point numbers. For example
+
+ \xinttheexpr reduce(37189719/183618963+11390170/17310720)^17\relax
+
+will evaluate exactly the fraction; the result has 462 characters
+(including the fraction slash.) One can also work with dummy variables:
+
+ \xinttheexpr mul(add(x(x+1)(x+2), x=y..y+15), y=171286,98762,9296)\relax
+
+evaluates to 15979066346135829902328007959448563667099190784.
+
+Float computations are possible at an adjustable precision (default 16).
+
+ \xintDigits:=48;\xintthefloatexpr 123_456_789^1_000.5\relax
+ ->3.63692761822782679930738270515740797370813691938e8095
+
+(as this example shows the underscore character can be used to separate
+visually digits, one can also use the space character for that purpose).
+
+Square-root and the four operations achieve correct rounding in the
+given arbitrary precision.
+
+Trigonometric functions (direct and inverse) are available with a
+maximal precision of 60 digits.
+
+Logarithms and exponentials are available using the poormanlog package
+which provides only 8 or 9 digits of precision. This will be increased
+in future.
+
+
+
+USAGE
+
+
+It is possible to use the package both with Plain (\input xintexpr.sty)
+or with LaTeX (\usepackage{xintexpr}).
+
+
+With LaTeX
+
+ \usepackage{xint} % expandable arithmetic with big integers
+ \usepackage{xintfrac} % decimal numbers, fractions, floats
+ \usepackage{xinttools} % expandable and non expandable loops
+ \usepackage{xintexpr} % expressions with infix operators
+
+The xinttrig and xintlog packages are loaded automatically by xintexpr
+and will refuse to be loaded directly.
+
+Further packages: xintbinhex, xintgcd, xintseries and xintcfrac.
+
+Main dependencies are handled automatically. For example xintexpr
+automatically loads xinttools and xintfrac (which itself loads xint).
+Hexadecimal input requires explicit loading of xintbinhex.
+
+Package xintcore is the subset of xint providing only the five
+operations on big integers: \xintiiAdd, \xintiiMul, …
+
+The LaTeX package bnumexpr defines a more light-weight parser of
+arithmetical expressions using big integers, which supports only the
+four operations, the modulo operation, the power operation, and the
+factorial. By default it uses the macros from xintcore but this can be
+customized.
+
+The LaTeX package polexpr is based upon xintexpr and allows formal
+algebra with polynomials, and finding all real roots with arbitrary
+precision.
+
+
+With TeX
+
+One does for example:
+
+ \input xintexpr.sty
+
+This will automatically load xintfrac.sty, xinttrig.sty, xintlog.sty and
+xinttools.sty. The packages may be loaded in any catcode context such
+that letters, digits, \ and % have their standard catcodes.
+
+xintcore.sty and xinttools.sty both import xintkernel.sty which has the
+catcode handler and package identifier and defines a few utilities such
+as \oodef/\fdef, \xint_dothis/\xint_orthat, or \xintLength.
+
+Since 1.3b, xintkernel.sty also provides \xintUniformDeviate which is a
+wrapper of the engine \pdfuniformdeviate or \uniformdeviate done to
+guarantee more uniformity of the pseudo-random integers.
+
+
+
+INSTALLATION
+
+
+Method A: using the package manager of your TeX distribution
+
+xint is included in TeXLive (hence also MacTeX) and MikTeX.
+
+There can be a few days of delay between apparition of a new version on
+CTAN and availability via the distribution package manager.
+
+
+Method B: manual installation using xint.tds.zip and unzip
+
+Assumes a GNU/Linux-like system (or Mac OS X).
+
+1. obtain xint.tds.zip from CTAN:
+ http://mirror.ctan.org/install/macros/generic/xint.tds.zip
+
+2. cd to the download repertory and issue:
+
+ unzip xint.tds.zip -d <TEXMF>
+
+ where <TEXMF> is a suitable TDS-compliant destination repertory. For
+ example, with TeXLive:
+
+ - Linux, standard access rights, hence sudo is needed,
+ installation into the “local†tree:
+
+ sudo unzip xint.tds.zip -d /usr/local/texlive/texmf-local
+ sudo texhash /usr/local/texlive/texmf-local
+
+ - Mac OS X, installation into user home folder (no sudo needed,
+ and it is recommended to not have a ls-R file there, hence no
+ texhash):
+
+ unzip xint.tds.zip -d ~/Library/texmf
+
+
+Method C: manual installation using Makefile and xint.dtx
+
+The Makefile automatizes rebuilding from xint.dtx all documentation
+files as well as xint.tds.zip. It is for GNU/Linux-like (inc. Mac OS X)
+systems, with a teTeX like installation such as TeXLive. The Latexmk and
+Pandoc softwares are required to build all the documentation.
+
+1. obtain xint.dtx and Makefile from
+ http://mirror.ctan.org/macros/generic/xint.
+
+2. put them in an otherwise empty working repertory, run make or
+ equivalently make help for further instructions.
+
+
+Method D: installation starting with only xint.dtx
+
+Run etex xint.dtx to extract from xint.dtx all macro files as well as
+auxiliary files needed for building the documentation. Among them there
+is Makefile.mk. If you are on a GNU/Linux-type system, rename the file
+to Makefile and execute make on command line for further help. If you
+can’t use make read the contents of the Makefile for instructions.
+
+Finishing the installation in a TDS hierarchy:
+
+- move the style files to TDS:tex/generic/xint/
+
+- xint.dtx goes to TDS:source/generic/xint/
+
+- The documentation (xint.pdf, README.md,…) goes to
+ TDS:doc/generic/xint/
+
+Depending on the destination, it may then be necessary to refresh a
+filename database.
+
+
+
+LICENSE
+
+
+Copyright (C) 2013-2019 by Jean-Francois Burnol
+
+This Work may be distributed and/or modified under the conditions of the
+LaTeX Project Public License version 1.3c. This version of this license
+is in
+
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+This Work has the LPPL maintenance status author-maintained.
+
+The Author of this Work is Jean-Francois Burnol.
+
+This Work consists of the source file xint.dtx and of its derived files:
+xintkernel.sty, xintcore.sty, xint.sty, xintfrac.sty, xintexpr.sty,
+xinttrig.sty, xintlog.sty, xintbinhex.sty, xintgcd.sty, xintseries.sty,
+xintcfrac.sty, xinttools.sty, xint.ins, xint.tex, README, README.md,
+README.html, README.pdf, CHANGES.md, CHANGES.html, CHANGES.pdf,
+pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, and
+Makefile.mk.
diff --git a/macros/generic/xint/README.html b/macros/generic/xint/README.html
new file mode 100644
index 0000000000..cc66a4ab5d
--- /dev/null
+++ b/macros/generic/xint/README.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <meta name="author" content="xint 1.3e" />
+ <title>README</title>
+ <style type="text/css">
+ code{white-space: pre-wrap;}
+ span.smallcaps{font-variant: small-caps;}
+ span.underline{text-decoration: underline;}
+ div.column{display: inline-block; vertical-align: top; width: 50%;}
+ </style>
+ <style type="text/css">
+ body{margin-left : 10%; margin-right : 15%; margin-top: 4ex; font-size: 12pt;}
+ pre {white-space: pre-wrap; }
+ code {white-space: pre-wrap; }
+ .mono {font-family: monospace;}
+ </style>
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+</head>
+<body>
+<header>
+<h1 class="title">README</h1>
+<p class="author">xint 1.3e</p>
+<p class="date">2019/04/05</p>
+</header>
+<nav id="TOC">
+<ul>
+<li><a href="#aim">Aim</a></li>
+<li><a href="#usage">Usage</a><ul>
+<li><a href="#with-latex">With LaTeX</a></li>
+<li><a href="#with-tex">With TeX</a></li>
+</ul></li>
+<li><a href="#installation">Installation</a><ul>
+<li><a href="#method-a-using-the-package-manager-of-your-tex-distribution">Method A: using the package manager of your TeX distribution</a></li>
+<li><a href="#method-b-manual-installation-using-xint.tds.zip-and-unzip">Method B: manual installation using <code>xint.tds.zip</code> and <code>unzip</code></a></li>
+<li><a href="#method-c-manual-installation-using-makefile-and-xint.dtx">Method C: manual installation using <code>Makefile</code> and <code>xint.dtx</code></a></li>
+<li><a href="#method-d-installation-starting-with-only-xint.dtx">Method D: installation starting with only <code>xint.dtx</code></a></li>
+</ul></li>
+<li><a href="#license">License</a></li>
+</ul>
+</nav>
+<pre><code>Source: xint.dtx 1.3e 2019/04/05 (doc 2019/04/05)
+Author: Jean-Francois Burnol
+Info: Expandable operations on big integers, decimals, fractions
+License: LPPL 1.3e</code></pre>
+<p>This <code>README</code> is also available as <code>README.pdf</code> and <code>README.html</code>.</p>
+<p>Change log is to be found in <code>CHANGES.pdf</code> or <code>CHANGES.html</code>.</p>
+<p>The user manual is <code>xint.pdf</code>, and the commented source code is available as <code>sourcexint.pdf</code>.</p>
+<h1 id="aim">Aim</h1>
+<p>The basic aim is provide <em>expandable</em> computations on integers, fractions, and floating point numbers. For example</p>
+<pre><code>\xinttheexpr reduce(37189719/183618963+11390170/17310720)^17\relax</code></pre>
+<p>will evaluate exactly the fraction; the result has 462 characters (including the fraction slash.) One can also work with dummy variables:</p>
+<pre><code>\xinttheexpr mul(add(x(x+1)(x+2), x=y..y+15), y=171286,98762,9296)\relax</code></pre>
+<p>evaluates to <code>15979066346135829902328007959448563667099190784</code>.</p>
+<p>Float computations are possible at an adjustable precision (default 16).</p>
+<pre><code>\xintDigits:=48;\xintthefloatexpr 123_456_789^1_000.5\relax
+-&gt;3.63692761822782679930738270515740797370813691938e8095</code></pre>
+<p>(as this example shows the underscore character can be used to separate visually digits, one can also use the space character for that purpose).</p>
+<p>Square-root and the four operations achieve correct rounding in the given arbitrary precision.</p>
+<p>Trigonometric functions (direct and inverse) are available with a maximal precision of 60 digits.</p>
+<p>Logarithms and exponentials are available using the <a href="http://www.ctan.org/pkg/poormanlog">poormanlog</a> package which provides only 8 or 9 digits of precision. This will be increased in future.</p>
+<h1 id="usage">Usage</h1>
+<p>It is possible to use the package both with Plain (<code>\input xintexpr.sty</code>) or with LaTeX (<code>\usepackage{xintexpr}</code>).</p>
+<h2 id="with-latex">With LaTeX</h2>
+<pre><code>\usepackage{xint} % expandable arithmetic with big integers
+\usepackage{xintfrac} % decimal numbers, fractions, floats
+\usepackage{xinttools} % expandable and non expandable loops
+\usepackage{xintexpr} % expressions with infix operators</code></pre>
+<p>The <code>xinttrig</code> and <code>xintlog</code> packages are loaded automatically by <code>xintexpr</code> and will refuse to be loaded directly.</p>
+<p>Further packages: <code>xintbinhex</code>, <code>xintgcd</code>, <code>xintseries</code> and <code>xintcfrac</code>.</p>
+<p>Main dependencies are handled automatically. For example <code>xintexpr</code> automatically loads <code>xinttools</code> and <code>xintfrac</code> (which itself loads <code>xint</code>). Hexadecimal input requires explicit loading of <code>xintbinhex</code>.</p>
+<p>Package <code>xintcore</code> is the subset of <code>xint</code> providing only the five operations on big integers: <code>\xintiiAdd</code>, <code>\xintiiMul</code>, …</p>
+<p>The LaTeX package <a href="http://www.ctan.org/pkg/bnumexpr">bnumexpr</a> defines a more light-weight parser of arithmetical expressions using big integers, which supports only the four operations, the modulo operation, the power operation, and the factorial. By default it uses the macros from <code>xintcore</code> but this can be customized.</p>
+<p>The LaTeX package <a href="http://www.ctan.org/pkg/polexpr">polexpr</a> is based upon <code>xintexpr</code> and allows formal algebra with polynomials, and finding all real roots with arbitrary precision.</p>
+<h2 id="with-tex">With TeX</h2>
+<p>One does for example:</p>
+<pre><code>\input xintexpr.sty</code></pre>
+<p>This will automatically load <code>xintfrac.sty</code>, <code>xinttrig.sty</code>, <code>xintlog.sty</code> and <code>xinttools.sty</code>. The packages may be loaded in any catcode context such that letters, digits, <code>\</code> and <code>%</code> have their standard catcodes.</p>
+<p><code>xintcore.sty</code> and <code>xinttools.sty</code> both import <code>xintkernel.sty</code> which has the catcode handler and package identifier and defines a few utilities such as <code>\oodef/\fdef</code>, <code>\xint_dothis/\xint_orthat</code>, or <code>\xintLength</code>.</p>
+<p>Since <code>1.3b</code>, <code>xintkernel.sty</code> also provides <code>\xintUniformDeviate</code> which is a wrapper of the engine <code>\pdfuniformdeviate</code> or <code>\uniformdeviate</code> done to guarantee more uniformity of the pseudo-random integers.</p>
+<h1 id="installation">Installation</h1>
+<h2 id="method-a-using-the-package-manager-of-your-tex-distribution">Method A: using the package manager of your TeX distribution</h2>
+<p><code>xint</code> is included in <a href="http://tug.org/texlive/">TeXLive</a> (hence also <a href="http://tug.org/mactex/">MacTeX</a>) and <a href="http://www.miktex.org/">MikTeX</a>.</p>
+<p>There can be a few days of delay between apparition of a new version on <a href="http://www.ctan.org/pkg/xint">CTAN</a> and availability via the distribution package manager.</p>
+<h2 id="method-b-manual-installation-using-xint.tds.zip-and-unzip">Method B: manual installation using <code>xint.tds.zip</code> and <code>unzip</code></h2>
+<p>Assumes a GNU/Linux-like system (or Mac OS X).</p>
+<ol type="1">
+<li><p>obtain <code>xint.tds.zip</code> from CTAN: <a href="http://mirror.ctan.org/install/macros/generic/xint.tds.zip" class="uri">http://mirror.ctan.org/install/macros/generic/xint.tds.zip</a></p></li>
+<li><p>cd to the download repertory and issue:</p>
+<pre><code> unzip xint.tds.zip -d &lt;TEXMF&gt;</code></pre>
+<p>where <code>&lt;TEXMF&gt;</code> is a suitable TDS-compliant destination repertory. For example, with TeXLive:</p>
+<ul>
+<li><p>Linux, standard access rights, hence sudo is needed, installation into the “local†tree:</p>
+<pre><code> sudo unzip xint.tds.zip -d /usr/local/texlive/texmf-local
+ sudo texhash /usr/local/texlive/texmf-local</code></pre></li>
+<li><p>Mac OS X, installation into user home folder (no sudo needed, and it is recommended to not have a ls-R file there, hence no texhash):</p>
+<pre><code> unzip xint.tds.zip -d ~/Library/texmf</code></pre></li>
+</ul></li>
+</ol>
+<h2 id="method-c-manual-installation-using-makefile-and-xint.dtx">Method C: manual installation using <code>Makefile</code> and <code>xint.dtx</code></h2>
+<p>The Makefile automatizes rebuilding from <code>xint.dtx</code> all documentation files as well as <code>xint.tds.zip</code>. It is for GNU/Linux-like (inc. Mac OS X) systems, with a teTeX like installation such as TeXLive. The <a href="http://personal.psu.edu/jcc8/software/latexmk/">Latexmk</a> and <a href="http://johnmacfarlane.net/pandoc/">Pandoc</a> softwares are required to build all the documentation.</p>
+<ol type="1">
+<li><p>obtain <code>xint.dtx</code> and <code>Makefile</code> from <a href="http://mirror.ctan.org/macros/generic/xint" class="uri">http://mirror.ctan.org/macros/generic/xint</a>.</p></li>
+<li><p>put them in an otherwise empty working repertory, run <code>make</code> or equivalently <code>make help</code> for further instructions.</p></li>
+</ol>
+<h2 id="method-d-installation-starting-with-only-xint.dtx">Method D: installation starting with only <code>xint.dtx</code></h2>
+<p>Run <code>etex xint.dtx</code> to extract from <code>xint.dtx</code> all macro files as well as auxiliary files needed for building the documentation. Among them there is <code>Makefile.mk</code>. If you are on a GNU/Linux-type system, rename the file to <code>Makefile</code> and execute <code>make</code> on command line for further help. If you can’t use <code>make</code> read the contents of the <code>Makefile</code> for instructions.</p>
+<p>Finishing the installation in a TDS hierarchy:</p>
+<ul>
+<li><p>move the style files to <code>TDS:tex/generic/xint/</code></p></li>
+<li><p><code>xint.dtx</code> goes to <code>TDS:source/generic/xint/</code></p></li>
+<li><p>The documentation (xint.pdf, README.md,…) goes to <code>TDS:doc/generic/xint/</code></p></li>
+</ul>
+<p>Depending on the destination, it may then be necessary to refresh a filename database.</p>
+<h1 id="license">License</h1>
+<div class="mono">
+<p>Copyright (C) 2013-2019 by Jean-Francois Burnol</p>
+<p>This Work may be distributed and/or modified under the conditions of the LaTeX Project Public License version 1.3c. This version of this license is in</p>
+<blockquote>
+<p><a href="http://www.latex-project.org/lppl/lppl-1-3c.txt" class="uri">http://www.latex-project.org/lppl/lppl-1-3c.txt</a></p>
+</blockquote>
+<p>and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.</p>
+<p>This Work has the LPPL maintenance status <code>author-maintained</code>.</p>
+<p>The Author of this Work is Jean-Francois Burnol.</p>
+This Work consists of the source file xint.dtx and of its derived files: xintkernel.sty, xintcore.sty, xint.sty, xintfrac.sty, xintexpr.sty, xinttrig.sty, xintlog.sty, xintbinhex.sty, xintgcd.sty, xintseries.sty, xintcfrac.sty, xinttools.sty, xint.ins, xint.tex, README, README.md, README.html, README.pdf, CHANGES.md, CHANGES.html, CHANGES.pdf, pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, and Makefile.mk.
+</div>
+</body>
+</html>
diff --git a/macros/generic/xint/README.pdf b/macros/generic/xint/README.pdf
new file mode 100644
index 0000000000..dd4181d4cc
--- /dev/null
+++ b/macros/generic/xint/README.pdf
Binary files differ
diff --git a/macros/generic/xint/sourcexint.pdf b/macros/generic/xint/sourcexint.pdf
new file mode 100644
index 0000000000..4503773c79
--- /dev/null
+++ b/macros/generic/xint/sourcexint.pdf
Binary files differ
diff --git a/macros/generic/xint/xint.dtx b/macros/generic/xint/xint.dtx
new file mode 100644
index 0000000000..f5312323f1
--- /dev/null
+++ b/macros/generic/xint/xint.dtx
@@ -0,0 +1,40510 @@
+% -*- coding: utf-8; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*-
+% This file: xint.dtx. Proudly produced by xint-dtxbuild.sh.
+% Extract all files via "etex xint.dtx" and do "make help"
+% or follow instructions from extracted README.md.
+%<*dtx>
+\def\xintdtxtimestamp {Time-stamp: <06-04-2019 at 18:55:58 CEST>}
+%</dtx>
+%<*drv>
+%% ---------------------------------------------------------------
+\def\xintdocdate {2019/04/05}
+\def\xintbndldate{2019/04/05}
+\def\xintbndlversion {1.3e}
+%</drv>
+%<readme>% README
+%<changes>% CHANGE LOG
+%<readme|changes>% xint 1.3e
+%<readme|changes>% 2019/04/05
+%<readme|changes>
+%<readme|changes> Source: xint.dtx 1.3e 2019/04/05 (doc 2019/04/05)
+%<readme|changes> Author: Jean-Francois Burnol
+%<readme|changes> Info: Expandable operations on big integers, decimals, fractions
+%<readme|changes> License: LPPL 1.3e
+%<readme|changes>
+%<*!readme&!changes&!dohtmlsh&!dopdfsh&!makefile>
+%% ---------------------------------------------------------------
+%% The xint bundle 1.3e 2019/04/05
+%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%<xintkernel>%% xintkernel: Paraphernalia for the xint packages
+%<xinttools>%% xinttools: Expandable and non-expandable utilities
+%<xintcore>%% xintcore: Expandable arithmetic on big integers
+%<xint>%% xint: Expandable operations on big integers
+%<xintfrac>%% xintfrac: Expandable operations on fractions
+%<xintexpr>%% xintexpr: Expandable expression parser
+%<xintbinhex>%% xintbinhex: Expandable binary and hexadecimal conversions
+%<xintgcd>%% xintgcd: Euclidean algorithm with xint package
+%<xintseries>%% xintseries: Expandable partial sums with xint package
+%<xintcfrac>%% xintcfrac: Expandable continued fractions with xint package
+%<xinttrig>%% xinttrig: Trigonometry for the xintexpr package
+%<xintlog>%% xintlog: Logarithms and exponentials for xintexpr
+%% ---------------------------------------------------------------
+%</!readme&!changes&!dohtmlsh&!dopdfsh&!makefile>
+%<*dtx>
+\bgroup\catcode2 0 \catcode`\\ 12 ^^Biffalse
+%</dtx>
+%<*readme>--------------------------------------------------------
+This `README` is also available as `README.pdf` and `README.html`.
+
+Change log is to be found in `CHANGES.pdf` or `CHANGES.html`.
+
+The user manual is `xint.pdf`, and the commented source code is
+available as `sourcexint.pdf`.
+
+Aim
+===
+
+The basic aim is provide *expandable* computations on integers,
+fractions, and floating point numbers. For example
+
+ \xinttheexpr reduce(37189719/183618963+11390170/17310720)^17\relax
+
+will evaluate exactly the fraction; the result has 462 characters
+(including the fraction slash.) One can also work with dummy variables:
+
+ \xinttheexpr mul(add(x(x+1)(x+2), x=y..y+15), y=171286,98762,9296)\relax
+
+evaluates to `15979066346135829902328007959448563667099190784`.
+
+Float computations are possible at an adjustable precision (default 16).
+
+ \xintDigits:=48;\xintthefloatexpr 123_456_789^1_000.5\relax
+ ->3.63692761822782679930738270515740797370813691938e8095
+
+(as this example shows the underscore character can be used to separate
+visually digits, one can also use the space character for that purpose).
+
+Square-root and the four operations achieve correct rounding in the
+given arbitrary precision.
+
+Trigonometric functions (direct and inverse) are available with a
+maximal precision of 60 digits.
+
+Logarithms and exponentials are available using the
+[poormanlog](http://www.ctan.org/pkg/poormanlog) package which provides
+only 8 or 9 digits of precision. This will be increased in future.
+
+Usage
+=====
+
+It is possible to use the package both with Plain
+(`\input xintexpr.sty`) or with LaTeX (`\usepackage{xintexpr}`).
+
+## With LaTeX
+
+ \usepackage{xint} % expandable arithmetic with big integers
+ \usepackage{xintfrac} % decimal numbers, fractions, floats
+ \usepackage{xinttools} % expandable and non expandable loops
+ \usepackage{xintexpr} % expressions with infix operators
+
+The `xinttrig` and `xintlog` packages are loaded automatically by
+`xintexpr` and will refuse to be loaded directly.
+
+Further packages: `xintbinhex`, `xintgcd`, `xintseries` and `xintcfrac`.
+
+Main dependencies are handled automatically. For example `xintexpr`
+automatically loads `xinttools` and `xintfrac` (which itself loads
+`xint`). Hexadecimal input requires explicit loading of `xintbinhex`.
+
+Package `xintcore` is the subset of `xint` providing only the five
+operations on big integers: `\xintiiAdd`, `\xintiiMul`, ...
+
+The LaTeX package [bnumexpr](http://www.ctan.org/pkg/bnumexpr) defines a
+more light-weight parser of arithmetical expressions using big integers,
+which supports only the four operations, the modulo operation, the power
+operation, and the factorial. By default it uses the macros from
+`xintcore` but this can be customized.
+
+The LaTeX package [polexpr](http://www.ctan.org/pkg/polexpr) is based
+upon `xintexpr` and allows formal algebra with polynomials, and finding
+all real roots with arbitrary precision.
+
+## With TeX
+
+One does for example:
+
+ \input xintexpr.sty
+
+This will automatically load `xintfrac.sty`, `xinttrig.sty`,
+`xintlog.sty` and `xinttools.sty`. The packages may be loaded in any
+catcode context such that letters, digits, `\` and `%` have their
+standard catcodes.
+
+`xintcore.sty` and `xinttools.sty` both import `xintkernel.sty`
+which has the catcode handler and package identifier and defines a
+few utilities such as `\oodef/\fdef`, `\xint_dothis/\xint_orthat`,
+or `\xintLength`.
+
+Since `1.3b`, `xintkernel.sty` also provides `\xintUniformDeviate` which
+is a wrapper of the engine `\pdfuniformdeviate` or `\uniformdeviate`
+done to guarantee more uniformity of the pseudo-random integers.
+
+Installation
+============
+
+## Method A: using the package manager of your TeX distribution
+
+`xint` is included in [TeXLive](http://tug.org/texlive/) (hence also
+[MacTeX](http://tug.org/mactex/)) and [MikTeX](http://www.miktex.org/).
+
+There can be a few days of delay between apparition of a new version on
+[CTAN](http://www.ctan.org/pkg/xint) and availability via the distribution
+package manager.
+
+## Method B: manual installation using `xint.tds.zip` and `unzip`
+
+Assumes a GNU/Linux-like system (or Mac OS X).
+
+1. obtain `xint.tds.zip` from CTAN:
+ <http://mirror.ctan.org/install/macros/generic/xint.tds.zip>
+
+2. cd to the download repertory and issue:
+
+ unzip xint.tds.zip -d <TEXMF>
+
+ where `<TEXMF>` is a suitable TDS-compliant destination repertory.
+ For example, with TeXLive:
+
+ - Linux, standard access rights, hence sudo is needed, installation
+ into the "local" tree:
+
+ sudo unzip xint.tds.zip -d /usr/local/texlive/texmf-local
+ sudo texhash /usr/local/texlive/texmf-local
+
+ - Mac OS X, installation into user home folder (no sudo needed,
+ and it is recommended to not have a ls-R file there, hence no texhash):
+
+ unzip xint.tds.zip -d ~/Library/texmf
+
+## Method C: manual installation using `Makefile` and `xint.dtx`
+
+The Makefile automatizes rebuilding from `xint.dtx` all documentation
+files as well as `xint.tds.zip`. It is for GNU/Linux-like (inc. Mac OS
+X) systems, with a teTeX like installation such as TeXLive. The
+[Latexmk](http://personal.psu.edu/jcc8/software/latexmk/)
+and [Pandoc](http://johnmacfarlane.net/pandoc/) softwares
+are required to build all the documentation.
+
+1. obtain `xint.dtx` and `Makefile` from
+ <http://mirror.ctan.org/macros/generic/xint>.
+
+2. put them in an otherwise empty working repertory, run `make` or
+ equivalently `make help` for further instructions.
+
+## Method D: installation starting with only `xint.dtx`
+
+Run `etex xint.dtx` to extract from `xint.dtx` all macro files as well
+as auxiliary files needed for building the documentation. Among them
+there is `Makefile.mk`. If you are on a GNU/Linux-type system, rename
+the file to `Makefile` and execute `make` on command line for further
+help. If you can't use `make` read the contents of the `Makefile` for
+instructions.
+
+Finishing the installation in a TDS hierarchy:
+
+- move the style files to `TDS:tex/generic/xint/`
+
+- `xint.dtx` goes to `TDS:source/generic/xint/`
+
+- The documentation (xint.pdf, README.md,...) goes to `TDS:doc/generic/xint/`
+
+Depending on the destination, it may then be necessary to refresh a
+filename database.
+
+License
+=======
+
+<div class="mono">
+Copyright (C) 2013-2019 by Jean-Francois Burnol
+
+This Work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License version 1.3c.
+This version of this license is in
+
+> <http://www.latex-project.org/lppl/lppl-1-3c.txt>
+
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+This Work has the LPPL maintenance status `author-maintained`.
+
+The Author of this Work is Jean-Francois Burnol.
+
+This Work consists of the source file xint.dtx and of its derived
+files: xintkernel.sty, xintcore.sty, xint.sty, xintfrac.sty,
+xintexpr.sty, xinttrig.sty, xintlog.sty, xintbinhex.sty,
+xintgcd.sty, xintseries.sty,
+xintcfrac.sty, xinttools.sty, xint.ins, xint.tex, README, README.md,
+README.html, README.pdf, CHANGES.md, CHANGES.html, CHANGES.pdf,
+pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf,
+and Makefile.mk.</div>
+%</readme>--------------------------------------------------------
+%<*changes>-------------------------------------------------------
+
+`1.3e (2019/04/05)`
+----
+
+### Incompatible changes
+
+ - When defining functions, sub-expressions can only use the
+ `\xint(float)expr...\relax` syntax. One can *not* use there the
+ `\xint(float)eval` wrappers (anyhow they add overhead and can be
+ replaced with the lower level syntax).
+
+### Improvements and new features
+
+ - The **xinttrig** library is automatically loaded by **xintexpr**. It
+ provides direct and inverse trigonometrical functions using either
+ degrees or radians with a precision of up to (a bit less than) 60
+ digits. It is for the most part implemented using high level user
+ interface, but will probably get some optimizations in future (and
+ perhaps extension to more digits).
+ - The **xintlog** library is automatically loaded by **xintexpr**. It
+ uses [poormanlog](http://ctan.org/pkg/poormanlog) to provide
+ logarithms and exponentials with almost 9 digits of precision.
+ Extended precision is for a future release.
+ - **xintexpr**: `\xintdefefunc`, `\xintdeffloatefunc`, `\xintdefiiefunc`
+ define functions which are not protected against expansion in the
+ definition of other functions; refer to `xint.pdf` for the related
+ explanations.
+
+ Notice that whole area of `\xintdef(e)func`, `\xintNewExpr`,
+ `\xintNewFunction` is complex and to be considered still as work in
+ progress as it has a number of shortcomings.
+ - **xintexpr**: `inv()`, `ilog10()`, `sfloat()`, behaviour of
+ `qfloat()` slightly modified.
+ - **xintexpr**: `\xintensuredummy`, `\xintrestorelettervar`.
+ - The optional argument of `\xintfloatexpr` or `\xintfloateval` (it
+ must be at start of braced argument) can be negative; it then means
+ to trim (and round) from the output at float precision that many
+ least significant digits.
+
+### Bug fixes
+
+ - Some bugfixes related to user functions with no variables at all;
+ they were dysfunctional.
+
+`1.3d (2019/01/06)`
+----
+
+### Incompatible changes
+
+ - **xintexpr**: the `gcd()` and `lcm()` functions formerly converted
+ their arguments to integers via `\xintNum`. They now handle general
+ input with no such modification.
+
+ - **xintexpr**: former `\xinteval`, `\xintieval`, `\xintiieval`, and
+ `\xintfloateval` renamed to `\xintexpro`, `\xintiexpro`,
+ `\xintiiexpro`, and `\xintfloatexpro`.
+
+### Improvements and new features
+
+ - **xintexpr**: the `gcd()` and `lcm()` multi-arguments functions have
+ been refactored to handle general fractions. The dependency on
+ **xintgcd** is removed.
+
+ - **xintexpr**: three-way branching `\xintifsgnexpr`,
+ `\xintifsgnfloatexpr`, `\xintifsgniiexpr` conditional macros.
+
+ - **xintexpr**: `\xintunassignexprfunc`, `\xintunassigniiexprfunc`,
+ `\xintunassignfloatexprfunc` to "undefine" functions.
+
+ - **xintexpr**: `\xintunassignvar` really makes the (multi-letter) variable
+ unknown (formerly, it only gave it value zero),
+
+ - **xintexpr**: functions `isone()` and `isint()`.
+
+ - **xintexpr**: `\xinteval`, `\xintieval`, `\xintiieval`, and
+ `\xintfloateval` as synonyms to `\xinttheexpr...\relax` etc..., but
+ with the (comma-separated) expression as a usual braced macro
+ argument.
+
+### Bug fixes
+
+ - **xintcore**, **xintexpr** : division in `\xintiiexpr` was broken for
+ a zero dividend and a one-digit divisor (e.g. ``0//7``) since `1.2p`
+ due to a bug in `\xintiiDivMod` for such arguments. The bug was
+ signaled (thanks to Kpym for report) and fixed shortly after `1.3c`
+ release but I then completely forgot to upload a bugfix release to
+ CTAN at that time, apologies for that.
+
+`1.3c (2018/06/17)`
+----
+
+### Improvements and new features
+
+ - **xintexpr**: with `\xintglobaldefstrue`, `\xintdefvar`,
+ `\xintdeffunc`, `\xintNewExpr` et al. make definitions with global
+ scope.
+
+ - **xintexpr**: `qraw()` for fast input of (very many) comma separated
+ numbers (in suitable raw format).
+
+ - **xintexpr**: the colon in the `:=` part of the syntax for
+ `\xintdefvar` and variants is now optional; and if present it may be
+ an active character or have any (reasonable) catcode.
+
+ - **xintexpr**: `\xintdefvar`, `\xintdeffunc` and their variants try to
+ set the catcode of the semi-colon which delimits their arguments; of
+ course this will not work if that catcode is already frozen.
+
+ - `\xintUniformDeviate` is better documented and `sourcexint.pdf` is better
+ hyperlinked and includes indices for the macros defined by each package.
+
+### Bug fixes
+
+ - **xintfrac**: since `1.3` release, it loaded **xintgcd** in
+ contradiction to what the documentation says (hence also **xintexpr**
+ loaded **xintgcd** automatically). There is no actual dependency so
+ the loading is removed for now.
+
+`1.3b (2018/05/18)`
+----
+
+### Improvements and new features
+
+All additions related to randomness are marked as work-in-progress. They
+require an engine providing the `\(pdf)uniformdeviate` primitive.
+
+ - **xintkernel**: `\xintUniformDeviate`.
+
+ - **xint**: `\xintRandomDigits`, `\xintXRandomDigits`, `\xintiiRandRange`,
+ `\xintiiRandRangeAtoB`.
+
+ - **xintfrac**: support macros (not public, mainly because internal
+ format for floats is surely not final) for `random()` and `qrand()`.
+
+ - **xintexpr**: `random()`, `qrand()`, and `randrange(A[, B])`.
+
+ - **xintexpr**: when a function `foo()` is declared via `\xintdeffunc`
+ (et al.) to be parameter-less, it can be used as `foo()`; formerly
+ `foo(nil)` syntax was required.
+
+ - The usual provision of user manual "improvements".
+
+
+`1.3a (2018/03/07)`
+----
+
+### Removed
+
+ - **xintcore**, **xint**, **xintfrac**: removal of the internal macros
+ which were used at `1.2o` to add a deprecation mechanism; all
+ deprecated macros have been removed at `1.3` so there was no reason
+ to keep the code used for deprecating them.
+
+### Improvements and new features
+
+ - **xintexpr**: new conditionals `ifone()` and `ifint()`.
+
+ - **xintfrac**: `\xintREZ` is faster on inputs having one hundred
+ digits or more.
+
+ - Added to the user manual mention of macros such as `\xintDivFloor`,
+ `\xintMod`, `\xintModTrunc`, which had been left out so far.
+
+### Bug fixes
+
+ - **xintexpr**: the mechanism for adjunction to the expression parsers
+ of user defined functions was refactored and improved at previous
+ release `1.3`: in particular recursive definitions became possible.
+ But an oversight made these recursive functions quite inefficient (to
+ remain polite.) This release fixes the problem.
+
+
+`1.3 (2018/03/01)`
+----
+
+### Incompatible changes
+
+ - **xintcore**, **xint**, **xintfrac**: all macros deprecated at `1.2o`
+ got removed.
+
+ - **xintfrac**: addition and subtraction of `a/b` and `c/d` now use the
+ l.c.m. of the denominators. Similarly the macro supporting the modulo
+ operator `/:` uses a l.c.m. for the denominator of the result.
+
+ - **xintexpr**: the addition, subtraction, modulo `/:`, and the
+ `mod()` and `divmod()` functions produce generally smaller denominators
+ (see previous item).
+
+ - **xintexpr**: formerly, the internal macros which are internally
+ associated to user-declared functions were using comma separated
+ parameter texts. They now do not use such commas (their meanings,
+ which may again change in future, are written for information to the
+ log under `\xintverbosetrue`).
+
+### Improvements and new features
+
+ - **xintexpr**: user-defined functions may now be of a recursive
+ nature. This was made possible by a refactoring of the `\xintNewExpr`
+ mechanism. It became both leaner and more extensive than formerly.
+
+ - **xintfrac**: new macros `\xintPIrr` and `\xintDecToString`. The
+ latter is a backport of a `polexpr 0.4` utility, and it is to be
+ considered unstable.
+
+ - **xintexpr**: new function `preduce()` associated with `\xintPIrr`.
+
+
+`1.2q (2018/02/06)`
+----
+
+### Improvements and new features
+
+ - **xintexpr**: tacit multiplication extended to cases such as `3!4!5!`
+ or `(1+2)3`.
+
+### Bug fixes
+
+ - **xintcore**: sadly, refactoring at `1.2l` of subtraction left an
+ extra character in an inner macro causing breakage in some rare
+ circumstances. This should not have escaped our test suite!
+
+
+`1.2p (2017/12/05)`
+----
+
+### Incompatible changes
+
+ - **xintgcd**: `\xintBezout{a}{b}`'s output consists of `{u}{v}{d}`
+ with `u*a+v*b==d`, with `d` the GCD. Formerly it was
+ `{a}{b}{u}{v}{d}`, and with `u*a-v*b==d`.
+
+ - **xintgcd**: `\xintBezout{0}{0}` expands to `{0}{0}{0}`. Formerly
+ (since `1.2l`) it raised `InvalidOperation`.
+
+ - **xintcore**: `\xintiiMod` is now associated with floored division.
+ The former meaning (associated with truncated division) is available
+ as `\xintiiModTrunc`.
+
+ - **xintfrac**: `\xintMod` is now associated with floored division. The
+ former meaning is available as `\xintModTrunc`.
+
+ - **xintexpr**: the ``//`` operator and its associated modulo ``'mod'``
+ (or ``/:``) now correspond to floored division, like the Python
+ language `//`, `%`, and `divmod(x, y)`. Formerly they had been
+ associated to truncated division. This is breaking change for
+ operands of opposite signs.
+
+### Improvements and new features
+
+ - **xinttools**: `\xintListWithSep`, which had remained unchanged since
+ its introduction at `1.04 (2013/04/25)`, was rewritten for increased
+ speed.
+
+ - **xintexpr**: `\xintdefvar`'s syntax is extended to allow
+ simultaneous assignments. Examples:
+ `\xintdefvar x1, x2, x3 := 1, 3**10, 3**20;` or
+ `\xintdefiivar A, B := B, A 'mod' B;`
+ for already defined variables `A` and `B`.
+
+ - **xintexpr**: added `divmod()` to the built-in functions. It is
+ associated with floored division, like the Python language `divmod()`.
+ Related support macros added to **xintcore**, and **xintfrac**.
+
+### Bug fixes
+
+ - **xintgcd**: `\xintBezout{6}{3}` (for example) expanded to
+ `{6}{3}{-0}{-1}{3}`, but the `-0` should have been `0`.
+
+ - **xintgcd**: it still used macro `\xintiAbs` although the latter had
+ been deprecated from **xintcore**.
+
+ - **xintexpr**: in float expressions the `//` and `/:` (aka `'mod'`)
+ operators did not round their operands to the float precision prior
+ to computing with them, contrarily to other infix arithmetic
+ operators and to the `mod(f,g)` function; thus, `mod(f,g)` and
+ `f 'mod' g` were not completely equivalent.
+
+ - various documentation fixes; in particular, the partial dependency of
+ **xintcfrac** on **xinttools** had not been mentioned.
+
+
+`1.2o (2017/08/29)`
+----
+
+### Incompatible changes
+
+ - **xint**: `\xintAND`, `\xintOR`, ... and similar Boolean logic macros do
+ not apply anymore `\xintNum` (or `\xintRaw` if **xintfrac** is loaded), to
+ their arguments (often, from internal usage of `\xintSgn`), but only
+ f-expand them (using e.g. `\xintiiSgn`). This is kept un-modified even if
+ loading **xintfrac**.
+
+### Deprecated
+
+Deprecated macros raise an error but, generally, then expand as in former
+releases. They will all get removed at some future release.
+
+ - **xintcore**: `\xintiOpp`, `\xintiAbs`, `\xintiAdd`, `\xintiSub`,
+ `\xintiMul`, `\xintiDivision`, `\xintiQuo`, `\xintiRem`, `\xintiDivRound`,
+ `\xintiDivTrunc`, `\xintiMod`, `\xintiSqr`, `\xintiPow`, and `\xintiFac`
+ are deprecated. Only the `ii`-named variants get defined.
+
+ - **xintcore**: `\xintCmp` and `\xintSgn` are deprecated from **xintcore**
+ (which only defines `\xintiiCmp` and `\xintiiSgn`) as they actually belong
+ to **xintfrac**.
+
+ - **xintcore**: `\xintiiFDg`, resp. `\xintiiLDg`, are renamed `\xintFDg`,
+ resp. `\xintLDg`. Former denominations are deprecated.
+
+ - **xint**: `\xintMON`, `\xintMMON`, `\xintiMax`,
+ `\xintiMin`, `\xintiMaxof`, `\xintiMinof`, `\xintiSquareRoot`,
+ `\xintiSqrt`, `\xintiSqrtR`, `\xintiBinomial`, and `\xintiPFactorial` are
+ deprecated. Only `ii`-named variants get defined.
+
+ - **xint**: `\xintEq`, `\xintGeq`, `\xintGt`, `\xintLt`, `\xintGtorEq`,
+ `\xintLtorEq`, `\xintIsZero`, `\xintIsNotZero`, `\xintIsOne`,
+ `\xintOdd`, `\xintEven`, `\xintifSgn`,
+ `\xintifCmp`, `\xintifEq`, `\xintifGt`, `\xintifLt`, `\xintifZero`,
+ `\xintifNotZero`, `\xintifOne`, `\xintifOdd`, are deprecated. These macros
+ belong to **xintfrac**. Package **xint** defines only the `ii`-named
+ variants.
+
+ - **xint**: `\xintNeq` was renamed to `\xintNotEq` which however is only
+ provided by **xintfrac**. Package **xint** defines `\xintiiNotEq`, and
+ `\xintNeq` is deprecated.
+
+ - **xint**: `\xintNot` was renamed to `\xintNOT`, former denomination is
+ deprecated. See also item about Boolean logic macros in the *Incompatible
+ Changes* section.
+
+
+`1.2n (2017/08/06)`
+----
+
+### Incompatible changes
+
+ - **xintbinhex** does not load package **xintcore** anymore, but only
+ **xintkernel**.
+
+### Improvements and new features
+
+ - **xintbinhex** has only **xintkernel** as dependency.
+
+ - Macros of **xintbinhex** have been improved for speed and increased maximal
+ sizes of allowable inputs.
+
+
+`1.2m (2017/07/31)`
+----
+
+### Incompatible changes
+
+ - **xintbinhex**: the length of the input is now limited. The maximum
+ size depends on the macro and ranges from about `4000` to about
+ `19900` digits.
+
+ - **xintbinhex**: `\xintCHexToBin` is now the variant of
+ `\xintHexToBin` which does not remove leading binary zeroes: `N`
+ hex-digits give on output exactly `4N` binary digits.
+
+### Improvements and new features
+
+ - **xintbinhex**: all macros have been rewritten using techniques from
+ the 1.2 release (they had remained unmodified since `1.08` of
+ `2013/06/07`.) The new macros are faster but limited to a few
+ thousand digits. The `1.08` routines could handle tens of thousands
+ of digits, but not in a reasonable time.
+
+### Bug fixes
+
+ - user manual: the `Changes` section wrongly stated at `1.2l` that the
+ macros of **xintbinhex** had been made robust against non terminated
+ input such as ``\number\mathcode`\-``. Unfortunately the author fell
+ into the trap of believing his own documentation and he forgot to
+ actually implement the change. Now done.
+
+ - user manual: the PDF bookmarks were messed up.
+
+ - **xint**, **xintfrac**: `\xintGeq`, `\xintMax`, `\xintMin`, suffered
+ from some extra overhead. This was caused by use of some auxiliaries
+ from the very early days which got redefined at some stage. This is
+ fixed here with some additional efficiency improvements and pruning
+ of old code.
+
+
+`1.2l (2017/07/26)`
+----
+
+### Removed
+
+ - `\xintiiSumExpr`, `\xintiiPrdExpr` (**xint**) and `\xintSumExpr`,
+ `\xintPrdExpr` (**xintfrac**). They had not been formally deprecated,
+ but had been left un-documented since `1.09d (2013/10/22)`.
+
+ - internal macro `\xint_gob_til_xint_relax` removed.
+
+### Improvements and new features
+
+ - the underscore character `_` is accepted by the **xintexpr** parsers
+ as a digit separator (the space character already could be used for
+ improved readability of big numbers). It is not allowed as *first*
+ character of a number, as it would then be mis-interpreted as the
+ start of a possible variable name.
+
+ - some refactoring in **xintcore** auxiliary routines and in
+ `\xintiiSub` and `\xintiiCmp` for some small efficiency gains.
+
+ - code comments in **xintcore** are better formatted, but remain
+ sparse.
+
+ - **xintcore**, **xint**, **xintfrac**, ... : some macros were not
+ robust against arguments whose expansion looks forward for some
+ termination (e.g. ``\number\mathcode`\-``), and particularly, most
+ were fragile against inputs using non-terminated ``\numexpr`` (such
+ as `\xintiiAdd{\the\numexpr1}{2}` or `\xintRaw{\numexpr1}`). This was
+ not a bug per se, as the user manual did not claim such inputs were
+ legal, but it was slightly inconvenient. Most macros (particularly
+ those of **xintfrac**) have now been made robust against such inputs.
+ Some macros from **xintcore** primarily destined to internal usage
+ still accept only properly terminated arguments such as
+ ``\the\mathcode`\-<space>`` or ``\the\numexpr1\relax``.
+
+ The situation with expressions is unchanged: syntax such as
+ `\xintexpr \numexpr1+2\relax` is illegal as the ending `\relax` token
+ will get swallowed by the `\numexpr`; but it is needed by the
+ ``xintexpr``-ession parser, hence the parser will expand forward and
+ presumably end with in an "illegal token" error, or provoke some
+ low-level TeX error (N.B.: a closing brace `}` for example can not
+ terminate an ``xintexpr``-ession, the parser must find a `\relax`
+ token at some point). Thus there must be in this example a second
+ `\relax`.
+
+ - experimental code for error conditions; there is no complete user
+ interface yet, it is done in preparation for next major release and
+ is completely unstable and undocumented.
+
+### Bug fixes
+
+ - **xintbinhex**: since `1.2 (2015/10/10)`, `\xintHexToDec` was
+ broken due to an undefined macro (it was in `xint.sty`, but the
+ module by itself is supposedly dependent only upon `xintcore.sty`).
+
+ - **xintgcd**: macro `\xintBezout` produced partially wrong output if
+ one of its two arguments was zero.
+
+ - **xintfrac**: the manual said one could use directly `\numexpr`
+ compatible expressions in arithmetic macros (without even a
+ `\numexpr` encapsulation) if they were expressed with up to 8 tokens.
+ There was a bug if these 8 tokens evaluated to zero. The bug has been
+ fixed, and up to 9 tokens are now accepted. But it is simpler to use
+ `\the\numexpr` prefix and not to worry about the token count... The
+ ending `\relax` is now un-needed.
+
+
+`1.2k (2017/01/06)`
+----
+
+### Incompatible changes
+
+ - macro `\xintFloat` which rounds its input to a floating point number
+ does _not_ print anymore `10.0...0eN` to signal an upwards rounding
+ to the next power of ten. The mantissa has in all cases except the
+ zero input exactly one digit before the decimal mark.
+
+ - some floating point computations may differ in the least significant
+ digits, due to a change in the rounding algorithm applied to macro
+ arguments expressed as fractions and to an improvement in precision
+ regarding half-integer powers in expressions. See next.
+
+### Improvements and new features
+
+ - the initial rounding to the target precision `P` which is applied by
+ the floating point macros from **xintfrac** to their arguments
+ achieves the _exact (aka correct) rounding_ even for inputs which are
+ fractions with more than `P+2` digits in their numerators and
+ denominators (`>1`.) Hence the computed values depend only on the
+ arguments as rational numbers and not upon their representatives.
+ This is not relevant to _expressions_ (**xintexpr**), because the
+ `\xintfloatexpr` parser sees there `/` as an operator and does not
+ (apart from special constructs) get to manipulate fractions as such.
+
+ - `\xintnewdummy` is public interface to a `1.2e` macro which serves to
+ declare any given catcode 11 character as a dummy variable for
+ expressions (**xintexpr**). This is useful for Unicode engines (the
+ Latin letters being already all pre-declared as dummy variables.)
+
+ - added `\xintiSqrtR`, there was only `\xintiiSqrtR` alongside
+ `\xintiSqrt` and `\xintiiSqrt` (**xint**).
+
+ - added non public `\xintLastItem:f:csv` to **xinttools** for faster
+ `last()` function, and improved `\xintNewExpr` compatibility. Also
+ `\xintFirstItem:f:csv`.
+
+### Bug fixes
+
+ - the `1.2f` half-integer powers computed within `\xintfloatexpr` had a
+ silly rounding to the target precision just _before_ the final
+ square-root extraction, thus possibly losing some precision. The
+ `1.2k` implementation keeps guard digits for this final square root
+ extraction. As for integer exponents, it is guaranteed that the
+ computed value differs from the exact one by less than `0.52 ulp`
+ (for inputs having at most `\xinttheDigits` digits.)
+
+ - more regressions from `1.2i` were fixed: `\xintLen` (**xint**,
+ **xintfrac**) and `\xintDouble` (**xintcore**) had forgotten that
+ their argument was allowed to be negative. A regression test suite is
+ now in place and is being slowly expanded to cover more macros.
+
+ - `\xintiiSquareRoot{0}` now produces `{1}{1}`, which fits better the
+ general documented behaviour of this macro than `11`.
+
+
+`1.2j (2016/12/22)`
+----
+
+### Improvements and new features
+
+ - **xinttools** and **xintexpr**:
+
+ 1. slightly improves the speed of `\xintTrim`.
+
+ 2. speed gains for the handlers of comma separated lists
+ implementing Python-like slicing and item extraction. Relevant
+ non (user) documented macros better documented in
+ `sourcexint.pdf`.
+
+ - significant documentations tweaks (inclusive of suppressing things!),
+ and among them two beautiful hyperlinked tables with both horizontal
+ and vertical rules which bring the documentation of the **xintexpr**
+ syntax to a kind of awe-inspiring perfection... except that
+ implementation of some math functions is still lacking.
+
+### Bug fixes
+
+ - fix two `1.2i` regressions caused by undefined macros (`\xintNthElt`
+ in certain branches and `[list][N]` item extraction in certain
+ cases.) The test files existed but were not executed prior to
+ release. Automation in progress.
+
+
+`1.2i (2016/12/13)`
+----
+
+### Incompatible changes
+
+ - `\xintDecSplit` second argument must have no sign (former code
+ replaced it with its absolute value, a sign now may cause an error.)
+
+### Removed
+
+ - deprecated macros `\xintifTrue`, `\xintifTrueFalse`, `\xintQuo`,
+ `\xintRem`, `\xintquo`, `\xintrem`.
+
+### Improvements and new features
+
+ - **xintkernel**: `\xintLength` is faster. New macros:
+
+ - `\xintLastItem` to fetch the last item from its argument,
+
+ - `\romannumeral\xintgobble` for gobbling many (up to 531440)
+ upstream braced items or tokens.
+
+ - `\romannumeral\xintreplicate` which is copied over from the expl3
+ `\prg_replicate:nn` with some minor changes.
+
+ - **xinttools**: general token list handling routines `\xintKeep`,
+ `\xintTrim` and `\xintNthElt` are faster; but the novel `\xintTrim`
+ can only remove up to a maximum of 531440 items.
+
+
+ Also, `\xintFor` partially improves on some issues which are
+ reported upon in the documentation.
+
+ - some old macros have been rewritten entirely or partially using
+ techniques which **xint** started using in release `1.2`:
+
+ - **xintcore**: `\xintDouble`, `\xintHalf`, `\xintInc`, `\xintDec`,
+ `\xintiiLDg`, `\xintDSR` (originally from **xint**), a novel
+ `\xintDSRr`.
+
+ - **xint**: `\xintDSH`, `\xintDSx`, `\xintDecSplit`, `\xintiiE`.
+
+ - **xintfrac**: as a result of the above `\xintTrunc`, `\xintRound`
+ and `\xintXTrunc` got faster. But the main improvement for them is
+ with decimal inputs which formerly had not been treated separately
+ from the general fraction case. Also, `\xintXTrunc` does not
+ anymore create a dependency of **xintfrac** on **xinttools**.
+
+ - the documentation has again been (slightly) re-organized; it has a
+ new sub-section on the Miller-Rabin primality test, to illustrate
+ some use of `\xintNewFunction` for recursive definitions.
+
+ - the documentation has dropped the LaTeX "command" terminology (which
+ had been used initially in 2013 for some forgotten reasons and should
+ have been removed long ago) and uses only the more apt "macro", as
+ after all, all of **xint** is about expansion of macros (plus the use
+ of `\numexpr`).
+
+### Bug fixes
+
+ - `\xintDecSplitL` and `\xintDecSplitR` from **xint** produced their
+ output in a spurious brace pair (bug introduced in `1.2f`).
+
+
+`1.2h (2016/11/20)`
+----
+
+### Improvements and new features
+
+ - new macro `\xintNewFunction` in **xintexpr** which allows to extend
+ the parser syntax with functions in situations where `\xintdeffunc`
+ is not usable (typically, because dummy variables are used over a not
+ yet determined range of values because it depends on the variables).
+
+ - after three years of strict obedience to `xint` prefix, now
+ `\thexintexpr`, `\thexintiexpr`, `\thexintfloatexpr`, and
+ `\thexintiiexpr` are provided as synonyms to `\xinttheexpr`, etc...
+
+### Bug fixes
+
+ - the `(cond)?{foo}{bar}` operator from **xintexpr** mis-behaved in
+ certain circumstances (such as an empty `foo`).
+
+ - the **xintexpr** `1.2f` `binomial` function (which uses
+ `\xintiiBinomial` from **xint.sty** or `\xintFloatBinomial` from
+ **xintfrac.sty**) deliberately raised an error for `binomial(x,y)`
+ with `y<0` or `x<y`. This was unfortunate, and it now simply
+ evaluates to zero in such cases.
+
+ - similarly the `pfactorial` function was very strict and
+ `pfactorial(x,y)` deliberately raised an out-of-range error if not
+ used with non-negative integers with `x` less than `y`. It now avoids
+ doing that and allows negative arguments.
+
+ - the `add` and `mul` from **xintexpr**, which work with dummy
+ variables since `1.1`, raised an error since `1.2c 2015/11/16` when
+ the dummy variable was given an empty range (or list) of values,
+ rather than producing respectively `0` and `1` as formerly.
+
+
+`1.2g (2016/03/19)`
+----
+
+### Incompatible changes
+
+ - inside expressions, list item selector `[L][n]` counts starting at
+ zero, not at one. This is more coherent with `[L][a:b]` which was
+ already exactly like in Python since its introduction. A function
+ len(L) replaces earlier `[L][0]`.
+
+ - former `iter` keyword now called `iterr`. Indeed it matched with
+ `rrseq`, the new `iter` (which was somehow missing from `1.1`) is the
+ one matching `rseq`. Allows to iterate more easily with a "list"
+ variable.
+
+### Improvements and new features
+
+ - in **xintexpr.sty**: list selectors `[L][n]` and `[L][a:b]` are more
+ efficient: the earlier `1.1` routines did back and forth conversions
+ from comma separated values to braced tokens, the `1.2g` routines use
+ macros from **xinttools.sty** handling directly the encountered lists
+ of comma separated values.
+
+ - in **xinttools.sty**: slight improvements in the efficiency of the
+ `\xintNthElt`, `\xintKeep`, `\xintTrim` routines and new routines
+ handling directly comma separated values. The latter are not included
+ in the user manual (they are not `\long`, they don't make efforts to
+ preserve some braces, do not worry about spaces, all those worries
+ being irrelevant to the use in expressions for list selectors).
+
+ - a slight speed improvement to `\xintFloatSqrt` in its quest of
+ correct rounding.
+
+ - float multiplication and division handle more swiftly operands
+ (non-fractional) with few digits, when the float precision is large.
+
+ - the syntax of expressions is described in a devoted chapter of the
+ documentation; an example shows how to implement (expandably) the
+ Brent-Salamin algorithm for computation of Pi using `iter` in a float
+ expression.
+
+
+`1.2f (2016/03/12)`
+----
+
+### Incompatible changes
+
+ - no more `\xintFac` macro but `\xintiFac/\xintiiFac/\xintFloatFac`.
+
+### Improvements and new features
+
+ - functions `binomial`, `pfactorial` and `factorial` in both integer
+ and float versions.
+
+ - macros `\xintiiBinomial`, `\xintiiPFactorial`
+ (**xint.sty**) and `\xintFloatBinomial`, `\xintFloatPFactorial`
+ (**xintfrac.sty**). Improvements to `\xintFloatFac`.
+
+ - faster implementation and increased accuracy of float power macros.
+ Half-integer exponents are now accepted inside float expressions.
+
+ - faster implementation of both integral and float square root macros.
+
+ - the float square root achieves
+ *correct* (aka *exact*) rounding in arbitrary precision.
+
+ - modified behaviour for the `\xintPFloat` macro, used by
+ `\xintthefloatexpr` to prettify its output. It now opts for decimal
+ notation if and only if scientific notation would use an exponent between
+ `-5` and `5` inclusive. The zero value is printed `0.` with a dot.
+
+ - the float macros for addition, subtraction, multiplication, division now
+ first round their two operands to P, not P+2, significant places before
+ doing the actual computation (P being the target precision). The same
+ applies to the power macros and to the square root macro.
+
+ - the documentation offers a more precise (and accurate) discussion of
+ floating point issues.
+
+ - various under-the-hood code improvements; the floatexpr operations are
+ chained in a faster way, from skipping some unneeded parsing on results of
+ earlier computations. The absence of a real inner data structure for floats
+ (incorporating their precisions, for one) is however still a bit hair
+ raising: currently the lengths of the mantissas of the operands are computed
+ again by each float macro or expression operation.
+
+ - (TeXperts only) the macros defined (internally) from `\xintdeffunc` et al.
+ constructs do not incorporate an initial `\romannumeral` anymore.
+
+ - renewed desperate efforts at improving the documentation by random
+ shuffling of sections and well thought additions; cuts were considered and
+ even performed.
+
+### Bug fixes
+
+ - squaring macro `\xintSqr` from **xintfrac.sty** was broken due to a
+ misspelled sub-macro name. Dates back to `1.1` release of `2014/10/28`
+ `:-((`.
+
+ - `1.2c`'s fix to the subtraction bug from `1.2` introduced another bug,
+ which in some cases could create leading zeroes in the output, or even
+ worse. This could invalidate other routines using subtractions, like
+ `\xintiiSquareRoot`.
+
+ - the comparison operators were not recognized by `\xintNewIIExpr` and
+ `\xintdefiifunc` constructs.
+
+
+`1.2e (2015/11/22)`
+----
+
+### Improvements and new features
+
+ - macro `\xintunassignvar`.
+
+ - slight modifications of the logged messages in case of `\xintverbosetrue`.
+
+ - a space in `\xintdeffunc f(x)<space>:= expression ;` is now accepted.
+
+ - documentation enhancements: the _Quick Sort_ section with its included
+ code samples has been entirely re-written; the _Commands of the xintexpr
+ package_ section has been extended and reviewed entirely.
+
+### Bug fixes
+
+ - in **xintfrac**: the `\xintFloatFac` from release `1.2` parsed its
+ argument only through `\numexpr` but it should have used `\xintNum`.
+
+ - in **xintexpr**: release `1.2d` had broken the recognition of
+ sub-expressions immediately after variable names (with tacit
+ multiplication).
+
+ - in **xintexpr**: contrarily to what `1.2d` documentation said, tacit
+ multiplication was not yet always done with enhanced precedence. Now
+ yes.
+
+
+`1.2d (2015/11/18)`
+----
+
+### Improvements and new features
+
+ - the function definitions done by `\xintdeffunc` et al., as well as
+ the macro declarations by `\xintNewExpr` et al. now have only local
+ scope.
+
+ - tacit multiplication applies to more cases, for example (x+y)z, and
+ always ties more than standard * infix operator, e.g. x/2y is like
+ x/(2*y).
+
+ - some documentation enhancements, particularly in the chapter on
+ xintexpr.sty, and also in the code source comments.
+
+### Bug fixes
+
+ - in **xintcore**: release `1.2c` had inadvertently broken the
+ `\xintiiDivRound` macro.
+
+
+`1.2c (2015/11/16)`
+----
+
+### Improvements and new features
+
+ - macros `\xintdeffunc`, `\xintdefiifunc`, `\xintdeffloatfunc` and
+ boolean `\ifxintverbose`.
+
+ - on-going code improvements and documentation enhancements, but
+ stopped in order to issue this bugfix release.
+
+### Bug fixes
+
+ - in **xintcore**: recent release `1.2` introduced a bug in the
+ subtraction (happened when 00000001 was found under certain
+ circumstances at certain mod 8 locations).
+
+
+`1.2b (2015/10/29)`
+----
+
+### Bug fixes
+
+ - in **xintcore**: recent release `1.2` introduced a bug in the division
+ macros, causing a crash when the divisor started with 99999999 (it was
+ attempted to use with 1+99999999 a subroutine expecting only 8-digits
+ numbers).
+
+
+`1.2a (2015/10/19)`
+----
+
+### Improvements and new features
+
+ - added `\xintKeepUnbraced`, `\xintTrimUnbraced` (**xinttools**) and fixed
+ documentation of `\xintKeep` and `\xintTrim` regarding brace stripping.
+
+ - added `\xintiiMaxof/\xintiiMinof` (**xint**).
+
+ - TeX hackers only: replaced all code uses of ``\romannumeral-`0``
+ by the quicker ``\romannumeral`&&@`` (`^` being used as letter,
+ had to find another character usable with catcode 7).
+
+### Bug fixes
+
+ - in **xintexpr**: recent release `1.2` introduced a bad bug in the
+ parsing of decimal numbers and as a result `\xinttheexpr 0.01\relax`
+ expanded to `0` ! (sigh...)
+
+
+`1.2 (2015/10/10)`
+----
+
+### Removed
+
+ - the macros `\xintAdd`, `\xintSub`, `\xintMul`, `\xintMax`,
+ `\xintMin`, `\xintMaxof`, `\xintMinof` are removed from package
+ **xint**, and only exist in the versions from **xintfrac**. With only
+ **xintcore** or **xint** loaded, one _must_ use `\xintiiAdd`,
+ `\xintiiSub`, ..., or `\xintiAdd`, `\xintiSub`, etc...
+
+### Improvements and new features
+
+ - the basic arithmetic implemented in **xintcore** has been entirely
+ rewritten. The mathematics remains the elementary school one, but the
+ `TeX` implementation achieves higher speed (except, regarding
+ addition/subtraction, for numbers up to about thirty digits), the
+ gains becoming quite significant for numbers with hundreds of digits.
+
+ - the inputs must have less than 19959 digits. But computations with
+ thousands of digits take time.
+
+ - a previously standing limitation of `\xintexpr`, `\xintiiexpr`, and
+ of `\xintfloatexpr` to numbers of less than 5000 digits has been
+ lifted.
+
+ - a *qint* function is provided to help the parser gather huge integers
+ in one-go, as an exception to its normal mode of operation which
+ expands token by token.
+
+ - `\xintFloatFac` macro for computing the factorials of integers as
+ floating point numbers to a given precision. The `!` postfix operator
+ inside `\xintfloatexpr` maps to this new macro rather than to the
+ exact factorial as used by `\xintexpr` and `\xintiiexpr`.
+
+ - there is more flexibility in the parsing done by the macros from
+ **xintfrac** on fractional input: the decimal parts of both the
+ numerator and the denominator may arise from a separate expansion via
+ ``\romannumeral-`0``. Also the strict `A/B[N]` format is a bit
+ relaxed: `N` may be anything understood by `\numexpr` (it could even
+ be empty but that possibility has been removed by later `1.2f`
+ release.)
+
+ - on the other hand an isolated dot `.` is not legal syntax anymore
+ inside the expression parsers: there must be digits either before or
+ after. It remains legal input for the macros of **xintfrac**.
+
+ - added `\ht`, `\dp`, `\wd`, `\fontcharht`, etc... to the tokens
+ recognized by the parsers and expanded by `\number`.
+
+ - an obscure bug in package **xintkernel** has been fixed, regarding
+ the sanitization of catcodes: under certain circumstances (which
+ could not occur in a normal `LaTeX` context), unusual catcodes could
+ end up being propagated to the external world.
+
+ - an effort at randomly shuffling around various pieces of the
+ documentation has been done.
+
+
+`1.1c (2015/09/12)`
+----
+
+ - bugfix regarding macro `\xintAssign` from **xinttools** which did
+ not behave correctly in some circumstances (if there was a space
+ before `\to`, in particular).
+
+ - very minor code improvements, and correction of some issues
+ regarding the source code formatting in `sourcexint.pdf`, and
+ minor issues in `Makefile.mk`.
+
+
+`1.1b (2015/08/31)`
+----
+
+ - bugfix: some macros needed by the integer division routine from
+ **xintcore** had been left in **xint.sty** since release `1.1`. This
+ for example broke the `\xintGCD` from **xintgcd** if package **xint**
+ was not loaded.
+
+ - Slight enhancements to the documentation, particularly in the
+ `Read this first` section.
+
+
+`1.1a (2014/11/07)`
+----
+
+ - fixed a bug which prevented `\xintNewExpr` from producing correctly working
+ macros from a comma separated replacement text.
+
+ - `\xintiiSqrtR` for rounded integer square root; former `\xintiiSqrt`
+ already produced truncated integer square root; corresponding function
+ `sqrtr` added to `\xintiiexpr..\relax` syntax.
+
+ - use of straight quotes in the documentation for better legibility.
+
+ - added `\xintiiIsOne`, `\xintiiifOne`, `\xintiiifCmp`, `\xintiiifEq`,
+ `\xintiiifGt`, `\xintiiifLt`, `\xintiiifOdd`, `\xintiiCmp`, `\xintiiEq`,
+ `\xintiiGt`, `\xintiiLt`, `\xintiiLtorEq`, `\xintiiGtorEq`, `\xintiiNeq`,
+ mainly for efficiency of `\xintiiexpr`.
+
+ - for the same reason, added `\xintiiGCD` and `\xintiiLCM`.
+
+ - added the previously mentioned `ii` macros, and some others from `1.1`, to
+ the user manual. But their main usage is internal to `\xintiiexpr`, to skip
+ unnecessary overheads.
+
+ - various typographical fixes throughout the documentation, and a bit
+ of clean up of the code comments. Improved `\Factors` example of nested
+ `subs`, `rseq`, `iter` in `\xintiiexpr`.
+
+
+`1.1 (2014/10/28)`
+----
+
+### Incompatible changes
+
+ - in `\xintiiexpr`, `/` does _rounded_ division, rather than the
+ Euclidean division (for positive arguments, this is truncated division).
+ The `//` operator does truncated division,
+
+ - the `:` operator for three-way branching is gone, replaced with `??`,
+
+ - `1e(3+5)` is now illegal. The number parser identifies `e` and `E`
+ in the same way it does for the decimal mark, earlier versions treated
+ `e` as `E` rather as infix operators of highest precedence,
+
+ - the `add` and `mul` have a new syntax, old syntax is with `` `+` `` and
+ `` `*` `` (left quotes mandatory), `sum` and `prd` are gone,
+
+ - no more special treatment for encountered brace pairs `{..}` by the
+ number scanner, `a/b[N]` notation can be used without use of braces (the
+ `N` will end up as is in a `\numexpr`, it is not parsed by the
+ `\xintexpr`-ession scanner),
+
+ - in earlier releases, place holders for `\xintNewExpr` could either
+ be denoted `#1`, `#2`, ... or also `$1`, `$2`, ...
+ Only the usual `#` form is now accepted and the special cases previously
+ treated via the second form are now managed via a `protect(...)` function.
+
+ - **xintfrac**: `\xintFloor` and `\xintCeil` add a trailing `/1[0]` to their
+ (integer) output. New `\xintiFloor` and `\xintiCeil` do not.
+
+### Removed
+
+ - `\xintnumexpr`, `\xintthenumexpr`, `\xintNewNumExpr`: use
+ `\xintiexpr`, `\xinttheiexpr`, `\xintNewIExpr`.
+
+### Deprecated
+
+ - `\xintDivision`, `\xintQuo`, `\xintRem`: use `\xintiDivision`,
+ `\xintiQuo`, `\xintiRem`.
+
+ - `\xintMax`, `\xintMin`, `\xintAdd`, `\xintSub`, `\xintMul`
+ (**xint**): their usage without **xintfrac** is deprecated; use
+ `\xintiMax`, `\xintiMin`, `\xintiAdd`, `\xintiSub`, `\xintiMul`.
+
+ - the `&` and `|` as Boolean operators in `xintexpr`-essions are
+ deprecated in favour of `&&` and `||`. The single letter operators
+ might be assigned some other meaning in some later release (bitwise
+ operations, perhaps). Do not use them.
+
+### Improvements and new features
+
+ * new package **xintcore** has been split off **xint**. It contains the
+ core arithmetic macros (it is loaded by LaTeX package **bnumexpr**),
+
+ * neither **xint** nor **xintfrac** load **xinttools**. Only
+ **xintexpr** does,
+
+ * whenever some portion of code has been revised, often use has been made of
+ the `\xint_dothis` and `\xint_orthat` pair of macros for expandably
+ branching,
+
+ * these tiny helpful macros, and a few others are in package
+ **xintkernel** which contains also the catcode and loading order
+ management code, initially inspired by code found in Heiko Oberdiek's
+ packages,
+
+ * the source code, which was suppressed from `xint.pdf` in release
+ `1.09n`, is now compiled into a separate file `sourcexint.pdf`,
+
+ * faster handling by `\xintAdd`, `\xintSub`, `\xintMul`, ... of the case
+ where one of the arguments is zero,
+
+ * the `\xintAdd` and `\xintSub` macros from package **xintfrac** check if
+ one of the denominators is a multiple of the other, and only if this is
+ not the case do they multiply the denominators. But systematic reduction
+ would be too costly,
+
+ * this naturally will be also the case for the `+` and `-` operations
+ in `\xintexpr`,
+
+ * **xint** added `\xintiiDivRound`, `\xintiiDivTrunc`, `\xintiiMod`
+ for rounded and truncated division of big integers (next to
+ `\xintiiQuo` and `\xintiiRem`),
+
+ * with **xintfrac** loaded, the `\xintNum` macro does `\xintTTrunc`
+ (which is truncation to an integer, same as `\xintiTrunc {0}`),
+
+ * added `\xintMod` to **xintfrac** for modulo operation with
+ fractional numbers,
+
+ * added `\xintiFloor` and `\xintiCeil` to **xintfrac**,
+
+ * `\xintiexpr`, `\xinttheiexpr` admit an optional argument within brackets
+ `[d]`, they round the computation result (or results, if comma separated)
+ to `d` digits after decimal mark, (the whole computation is done exactly,
+ as in `xintexpr`),
+
+ * `\xintfloatexpr`, `\xintthefloatexpr` similarly admit an optional
+ argument which serves to keep only `d` digits of precision, getting rid
+ of cumulated uncertainties in the last digits (the whole computation is
+ done according to the precision set via `\xintDigits`),
+
+ * `\xinttheexpr` and `\xintthefloatexpr` _pretty-print_ if possible, the
+ former removing unit denominator or `[0]` brackets, the latter avoiding
+ scientific notation if decimal notation is practical,
+
+ * the `//` does truncated division and `/:` is the associated modulo,
+
+ * multi-character operators `&&`, `||`, `==`, `<=`, `>=`, `!=`,
+ `**`,
+
+ * multi-letter infix binary words `'and'`, `'or'`, `'xor'`, `'mod'`
+ (straight quotes mandatory),
+
+ * functions `even`, `odd`,
+
+ * `\xintdefvar A3:=3.1415;` for variable definitions (non expandable,
+ naturally), usable in subsequent expressions; variable names may contain
+ letters, digits, underscores. They should not start with a digit, the `@`
+ is reserved, and single lowercase and uppercase Latin letters are
+ predefined to work as dummy variables (see next),
+
+ * generation of comma separated lists `a..b`, `a..[d]..b`,
+
+ * Python syntax-like list extractors `[list][n:]`, `[list][:n]`,
+ `[list][a:b]` allowing negative indices, but no optional step argument,
+ and `[list][n]` (`n=0` for the number of items in the list),
+
+ * functions `first`, `last`, `reversed`,
+
+ * itemwise operations on comma separated lists `a*[list]`, etc.., possible
+ on both sides `a*[list]^b`, and obeying the same precedence rules as with
+ numbers,
+
+ * `add` and `mul` must use a dummy variable: `add(x(x+1)(x-1), x=-10..10)`,
+
+ * variable substitutions with `subs`:
+ `subs(subs(add(x^2+y^2,x=1..y),y=t),t=20)`,
+
+ * sequence generation using `seq` with a dummy variable: `seq(x^3,
+ x=-10..10)`,
+
+ * simple recursive lists with `rseq`, with `@` given the last value,
+ `rseq(1;2@+1,i=1..10)`,
+
+ * higher recursion with `rrseq`, `@1`, `@2`, `@3`, `@4`, and `@@(n)`
+ for earlier values, up to `n=K` where `K` is the number of terms of the
+ initial stretch `rrseq(0,1;@1+@2,i=2..100)`,
+
+ * iteration with `iter` which is like `rrseq` but outputs only the
+ last `K` terms, where `K` was the number of initial terms,
+
+ * inside `seq`, `rseq`, `rrseq`, `iter`, possibility to use `omit`,
+ `abort` and `break` to control termination,
+
+ * `n++` potentially infinite index generation for `seq`, `rseq`,
+ `rrseq`, and `iter`, it is advised to use `abort` or `break(..)` at
+ some point,
+
+ * the `add`, `mul`, `seq`, ... are nestable,
+
+ * `\xintthecoords` converts a comma separated list of an even number
+ of items to the format expected by the `TikZ` `coordinates` syntax,
+
+ * completely new version `\xintNewExpr`, `protect` function to handle
+ external macros. The dollar sign
+ `$` for place holders is not accepted anymore, only the standard macro
+ parameter `#`. Not all constructs are compatible with `\xintNewExpr`.
+% $ this docstripped line for emacs buffer fontification issues in doctex-mode
+
+### Bug fixes
+
+ - `\xintZapFirstSpaces` hence also `\xintZapSpaces` from package **xinttools**
+ were buggy when used with an argument either empty or containing only
+ space tokens.
+
+ - `\xintiiexpr` did not strip leading zeroes, hence
+ `\xinttheiiexpr 001+1\relax` did not obtain the expected result ...
+
+ - `\xinttheexpr \xintiexpr 1.23\relax\relax` should have produced `1`,
+ but it produced `1.23`
+
+ - the catcode of `;` was not set at package launching time.
+
+ - the `\XINTinFloatPrd:csv` macro name had a typo, hence `prd` was
+ non-functional in `\xintfloatexpr`.
+
+
+`1.09n (2014/04/01)`
+----
+
+ * the user manual does not include by default the source code
+ anymore: the `\NoSourceCode` toggle in file `xint.tex` has to
+ be set to 0 before compilation to get source code inclusion
+ (later release `1.1` made source code available as `sourcexint.pdf`).
+
+ * bug fix (**xinttools**) in `\XINT_nthelt_finish` (this bug was
+ introduced in `1.09i` of `2013/12/18` and showed up when the index
+ `N` was larger than the number of elements of the list).
+
+
+`1.09m (2014/02/26)`
+----
+
+ * new in **xinttools**: `\xintKeep` keeps the first `N` or last
+ `N` elements of a list (sequence of braced items); `\xintTrim`
+ cuts out either the first `N` or the last `N` elements from a
+ list.
+
+ * new in **xintcfrac**: `\xintFGtoC` finds the initial partial
+ quotients common to two numbers or fractions `f` and `g`;
+ `\xintGGCFrac` is a clone of `\xintGCFrac` which however does not
+ assume that the coefficients of the generalized continued
+ fraction are numeric quantities. Some other minor changes.
+
+
+`1.09kb (2014/02/13)`
+----
+
+ * bug fix (**xintexpr**): an aloof modification done by `1.09i` to
+ `\xintNewExpr` had resulted in a spurious trailing space present
+ in the outputs of all macros created by `\xintNewExpr`, making
+ nesting of such macros impossible.
+
+ * bug fix (**xinttools**): `\xintBreakFor` and `\xintBreakForAndDo`
+ were buggy when used in the last iteration of an `\xintFor` loop.
+
+ * bug fix (**xinttools**): `\xintSeq` from `1.09k` needed a `\chardef`
+ which was missing from `xinttools.sty`, it was in `xint.sty`.
+
+
+`1.09k (2014/01/21)`
+----
+
+ * inside `\xintexpr..\relax` (and its variants) tacit multiplication is
+ implied when a number or operand is followed directly with an
+ opening parenthesis,
+
+ * the `"` for denoting (arbitrarily big) hexadecimal numbers is
+ recognized by `\xintexpr` and its variants (package
+ **xintbinhex** is required); a fractional hexadecimal part
+ introduced by a dot `.` is allowed.
+
+ * re-organization of the first sections of the user manual.
+
+ * bug fix (**xinttools**, **xint**, ...): forgotten catcode check of
+ `"` at loading time has been added.
+
+
+`1.09j (2014/01/09)`
+----
+
+ * (**xint**) the core division routines have been re-written for some
+ (limited) efficiency gain, more pronounced for small divisors. As a
+ result the *computation of one thousand digits of $\pi$* is close
+ to three times faster than with earlier releases.
+
+ * some various other small improvements, particularly in the power
+ routines.
+
+ * (**xintfrac**) a macro `\xintXTrunc` is designed to produce
+ thousands or even tens of thousands of digits of the decimal
+ expansion of a fraction. Although completely expandable it has its
+ use limited to inside an `\edef`, `\write`, `\message`, \dots. It
+ can thus not be nested as argument to another package macro.
+
+ * (**xintexpr**) the tacit multiplication done in `\xintexpr..\relax`
+ on encountering a count register or variable, or a `\numexpr`,
+ while scanning a (decimal) number, is extended to the case of a sub
+ `\xintexpr`-ession.
+
+ * `\xintexpr` can now be used in an `\edef` with no `\xintthe` prefix;
+ it will execute completely the computation, and the error message
+ about a missing `\xintthe` will be inhibited. Previously, in the
+ absence of `\xintthe`, expansion could only be a full one (with
+ ``\romannumeral-`0``), not a complete one (with `\edef`). Note
+ that this differs from the behavior of the non-expandable
+ `\numexpr`: `\the` or `\number` (or `\romannumeral`) are needed
+ not only to print but
+ also to trigger the computation, whereas `\xintthe` is mandatory
+ only for the printing step.
+
+ * the default behavior of `\xintAssign` is changed, it now does not
+ do any further expansion beyond the initial full-expansion which
+ provided the list of items to be assigned to macros.
+
+ * bug fix (**xintfrac**): `1.09i` did an unexplainable change to
+ `\XINT_infloat_zero` which broke the floating point routines for
+ vanishing operands =:(((
+
+ * bug fix: the `1.09i` `xint.ins` file produced a buggy `xint.tex` file.
+
+
+`1.09i (2013/12/18)`
+----
+
+ * (**xintexpr**) `\xintiiexpr` is a variant of `\xintexpr` which is
+ optimized to deal only with (long) integers, `/` does a euclidean
+ quotient.
+
+ * *deprecated*: `\xintnumexpr`, `\xintthenumexpr`, `\xintNewNumExpr` are
+ renamed, respectively, `\xintiexpr`, `\xinttheiexpr`, `\xintNewIExpr`. The
+ earlier denominations are kept but are to be removed at some point.
+
+ * it is now possible within `\xintexpr...\relax` and its variants to
+ use count, dimen, and skip registers or variables without
+ explicit `\the/\number`: the parser inserts automatically
+ `\number` and a tacit multiplication is implied when a register
+ or variable immediately follows a number or fraction. Regarding
+ dimensions and `\number`, see the further discussion in
+ *Dimensions*.
+
+ * (**xintfrac**) conditional `\xintifOne`; `\xintifTrueFalse`
+ renamed to `\xintifTrueAelseB`; macros `\xintTFrac`
+ (`fractional part`, mapped to function `frac` in
+ `\xintexpr`-essions), `\xintFloatE`.
+
+ * (**xinttools**) `\xintAssign` admits an optional argument to
+ specify the expansion type to be used: `[]` (none, default), `[o]`
+ (once), `[oo]` (twice), `[f]` (full), `[e]` (`\edef`),... to define
+ the macros
+
+ * **xinttools** defines `\odef`, `\oodef`, `\fdef` (if the names have
+ already been assigned, it uses `\xintoodef` etc...). These tools are
+ provided for the case one uses the package macros in a non-expandable
+ context. `\oodef` expands twice the macro replacement text, and `\fdef`
+ applies full expansion. They are useful in situations where one does not
+ want a full `\edef`. `\fdef` appears to be faster than `\oodef` in almost
+ all cases (with less than thousand digits in the result), and even faster
+ than `\edef` for expanding the package macros when the result has a few
+ dozens of digits. `\oodef` needs that expansion ends up in thousands of
+ digits to become competitive with the other two.
+
+ * some across the board slight efficiency improvement as a result of
+ modifications of various types to *fork macros* and *branching
+ conditionals* which are used internally.
+
+ * bug fix (**xint**): `\xintAND` and `\xintOR` inserted a space token
+ in some cases and did not expand as promised in two steps `:-((`
+ (bug dating back to `1.09a` I think; this bug was without
+ consequences when using `&` and `|` in `\xintexpr-essions`, it
+ affected only the macro form).
+
+ * bug fix (**xintcfrac**): `\xintFtoCCv` still ended fractions with
+ the `[0]`'s which were supposed to have been removed since release
+ `1.09b`.
+
+ * *deprecated*: `\xintifTrueFalse`, `\xintifTrue`; use `\xintifTrueAelseB`.
+
+
+`1.09h (2013/11/28)`
+----
+
+ * parts of the documentation have been re-written or re-organized,
+ particularly the discussion of expansion issues and of input and
+ output formats.
+
+ * the expansion types of macro arguments are documented in the margin
+ of the macro descriptions, with conventions mainly taken over
+ from those in the `LaTeX3` documentation.
+
+ * a dependency of **xinttools** on **xint** (inside `\xintSeq`) has
+ been removed.
+
+ * (**xintgcd**) `\xintTypesetEuclideAlgorithm` and
+ `\xintTypesetBezoutAlgorithm` have been slightly modified
+ (regarding indentation).
+
+ * (**xint**) macros `xintiSum` and `xintiPrd` are renamed to
+ `\xintiiSum` and `\xintiiPrd`.
+
+ * (**xinttools**) a count register used in `1.09g` in the `\xintFor`
+ loops for parsing purposes has been removed and replaced by use of
+ a `\numexpr`.
+
+ * the few uses of `\loop` have been replaced by `\xintloop/\xintiloop`.
+
+ * all macros of **xinttools** for which it makes sense are now declared
+ `\long`.
+
+
+`1.09g (2013/11/22)`
+----
+
+ * a package **xinttools** is detached from **xint**, to make tools such
+ as `\xintFor`, `\xintApplyUnbraced`, and `\xintiloop` available
+ without the **xint** overhead.
+
+ * expandable nestable loops `\xintloop` and `\xintiloop`.
+
+ * bugfix: `\xintFor` and `\xintFor*` do not modify anymore the value of
+ `\count 255`.
+
+
+`1.09f (2013/11/04)`
+----
+
+ * (**xint**) `\xintZapFirstSpaces`, `\xintZapLastSpaces`,
+ `\xintZapSpaces`, `\xintZapSpacesB`, for expandably stripping away
+ leading and/or ending spaces.
+
+ * `\xintCSVtoList` by default uses `\xintZapSpacesB` to strip away
+ spaces around commas (or at the start and end of the comma
+ separated list).
+
+ * also the `\xintFor` loop will strip out all spaces around commas and
+ at the start and the end of its list argument; and similarly for
+ `\xintForpair`, `\xintForthree`, `\xintForfour`.
+
+ * `\xintFor` *et al.* accept all macro parameters from `#1` to
+ `#9`.
+
+ * for reasons of inner coherence some macros previously with one extra
+ `i` in their names (e.g. `\xintiMON`) now have a doubled
+ `ii` (`\xintiiMON`) to indicate that they skip the overhead of
+ parsing their inputs via `\xintNum`. Macros with a *single*
+ `i` such as `\xintiAdd` are those which maintain the
+ non-**xintfrac** output format for big integers, but do parse
+ their inputs via `\xintNum` (since release `1.09a`). They too may
+ have doubled-`i` variants for matters of programming optimization
+ when working only with (big) integers and not fractions or
+ decimal numbers.
+
+
+`1.09e (2013/10/29)`
+----
+
+ * (**xint**) `\xintintegers`, `\xintdimensions`, `\xintrationals`
+ for infinite `\xintFor` loops, interrupted with `\xintBreakFor` and
+ `\xintBreakForAndDo`.
+
+ * `\xintifForFirst`, `\xintifForLast` for the `\xintFor` and
+ `\xintFor*` loops,
+
+ * the `\xintFor` and `xintFor*` loops are now `\long`, the
+ replacement text and the items may contain explicit `\par`'s.
+
+ * conditionals `\xintifCmp`, `\xintifInt`, `\xintifOdd`.
+
+ * bug fix (**xint**): the `\xintFor` loop (not `\xintFor*`) did
+ not correctly detect an empty list.
+
+ * bug fix (**xint**): `\xintiSqrt {0}` crashed. `:-((`
+
+ * the documentation has been enriched with various additional examples,
+ such as the *the quick sort algorithm
+ illustrated* or the various ways of *computing prime numbers*.
+
+ * the documentation explains with more details various expansion
+ related issues, particularly in relation to conditionals.
+
+
+`1.09d (2013/10/22)`
+----
+
+ * bug fix (**xint**): `\xintFor*` is modified to gracefully
+ handle a space token (or more than one) located at the very end of
+ its list argument (as the space before `\do` in `\xintFor* #1 in
+ {{a}{b}{c}<space>} \do {stuff}`; spaces at other locations were
+ already harmless). Furthermore this new version _f-expands_ the
+ un-braced list items. After `\def\x{{1}{2}}` and `\def\y{{a}\x
+ {b}{c}\x }`, `\y` will appear to `\xintFor*` exactly as if it had
+ been defined as `\def\y{{a}{1}{2}{b}{c}{1}{2}}`.
+
+ * same bug fix for `\xintApplyInline`.
+
+
+`1.09c (2013/10/09)`
+----
+
+ * (**xintexpr**) added `bool` and `togl` to the `\xintexpr` syntax;
+ also added `\xintboolexpr` and `\xintifboolexpr`.
+
+ * added `\xintNewNumExpr`.
+
+ * the factorial `!` and branching `?`, `:`, operators (in
+ `\xintexpr...\relax`) have now less precedence than a function
+ name located just before,
+
+ * (**xint**) `\xintFor` is a new type of loop, whose replacement text
+ inserts the comma separated values or list items via macro
+ parameters, rather than encapsulated in macros; the loops are
+ nestable up to four levels (nine levels since `1.09f`) and their
+ replacement texts are allowed to close groups as happens with the
+ tabulation in alignments,
+
+ * `\xintForpair`, `\xintForthree`, `\xintForfour` are experimental
+ variants of `\xintFor`,
+
+ * `\xintApplyInline` has been enhanced in order to be usable for
+ generating rows (partially or completely) in an alignment,
+
+ * command `\xintSeq` to generate (expandably) arithmetic sequences
+ of (short) integers,
+
+ * again various improvements and changes in the documentation.
+
+
+`1.09b (2013/10/03)`
+----
+
+ * various improvements in the documentation,
+
+ * more economical catcode management and re-loading handling,
+
+ * removal of all those `[0]`'s previously forcefully added at the end
+ of fractions by various macros of **xintcfrac**,
+
+ * `\xintNthElt` with a negative index returns from the tail of the
+ list,
+
+ * macro `\xintPRaw` to have something like what `\xintFrac` does in
+ math mode; i.e. a `\xintRaw` which does not print the denominator
+ if it is one.
+
+
+`1.09a (2013/09/24)`
+----
+
+ * (**xintexpr**) `\xintexpr..\relax` and `\xintfloatexpr..\relax`
+ admit functions in their syntax, with comma separated values as
+ arguments, among them `reduce, sqr, sqrt, abs, sgn, floor, ceil,
+ quo, rem, round, trunc, float, gcd, lcm, max, min, sum, prd, add,
+ mul, not, all, any, xor`.
+
+ * comparison (`<`, `>`, `=`) and logical (`|`, `&`) operators.
+
+ * the command `\xintthe` which converts `\xintexpr`essions into
+ printable format (like `\the` with `\numexpr`) is more efficient,
+ for example one can do `\xintthe\x` if `\x` was defined to be an
+ `\xintexpr..\relax`:
+
+ \def\x{\xintexpr 3^57\relax}
+ \def\y{\xintexpr \x^(-2)\relax}
+ \def\z{\xintexpr \y-3^-114\relax}
+ \xintthe\z
+
+ * `\xintnumexpr .. \relax` (now renamed `\xintiexpr`) is `\xintexpr
+ round( .. ) \relax`.
+
+ * `\xintNewExpr` now works with the standard macro parameter character
+ `#`.
+
+ * both regular `\xintexpr`-essions and commands defined by
+ `\xintNewExpr` will work with comma separated lists of
+ expressions,
+
+ * commands `\xintFloor`, `\xintCeil`, `\xintMaxof`, `\xintMinof`
+ (package **xintfrac**), `\xintGCDof`, `\xintLCM`, `\xintLCMof`
+ (package **xintgcd**), `\xintifLt`, `\xintifGt`, `\xintifSgn`,
+ `\xintANDof`, ...
+
+ * The arithmetic macros from package **xint** now filter their operands
+ via `\xintNum` which means that they may use directly count
+ registers and `\numexpr`-essions without having to prefix them by
+ `\the`. This is thus similar to the situation holding previously
+ already when **xintfrac** was loaded.
+
+ * a bug (**xintfrac**) introduced in `1.08b` made `\xintCmp` crash
+ when one of its arguments was zero. `:-((`
+
+
+`1.08b (2013/06/14)`
+----
+
+ * (**xintexpr**) Correction of a problem with spaces inside
+ `\xintexpr`-essions.
+
+ * (**xintfrac**) Additional improvements to the handling of floating
+ point numbers.
+
+ * section *Use of count registers* documenting how count
+ registers may be directly used in arguments to the macros of
+ **xintfrac**.
+
+
+`1.08a (2013/06/11)`
+----
+
+ * (**xintfrac**) Improved efficiency of the basic conversion from
+ exact fractions to floating point numbers, with ensuing speed gains
+ especially for the power function macros `\xintFloatPow` and
+ `\xintFloatPower`,
+
+ * Better management by `\xintCmp`, `\xintMax`, `\xintMin` and
+ `\xintGeq` of inputs having big powers of ten in them.
+
+ * Macros for floating point numbers added to the **xintseries**
+ package.
+
+
+`1.08 (2013/06/07)`
+----
+
+ * (**xint** and **xintfrac**) Macros for extraction of square roots,
+ for floating point numbers (`\xintFloatSqrt`), and integers
+ (`\xintiSqrt`).
+
+ * new package **xintbinhex** providing *conversion routines* to and from
+ binary and hexadecimal bases.
+
+
+`1.07 (2013/05/25)`
+----
+
+ * The **xintexpr** package is a new core constituent (which loads
+ automatically **xintfrac** and **xint**) and implements the
+ expandable expanding parser
+
+ \xintexpr . . . \relax,
+
+ and its variant
+
+ \xintfloatexpr . . . \relax
+
+ allowing on input formulas using the infix operators `+`, `-`, `*`,
+ `/`, and `^`, and arbitrary levels of parenthesizing. Within a
+ float expression the operations are executed according to the
+ current value set by `\xintDigits`. Within an `\xintexpr`-ession the
+ binary operators are computed exactly.
+
+ To write the `\xintexpr` parser I benefited from the commented
+ source of the `l3fp` parser; the `\xintexpr` parser has its own
+ features and peculiarities. *See its documentation*.
+
+ * The floating point precision `D` is set (this is a local assignment
+ to a `\mathchar` variable) with `\xintDigits := D;` and queried
+ with `\xinttheDigits`. It may be set to anything up to
+ `32767`.[^1] The macro incarnations of the binary operations
+ admit an optional argument which will replace pointwise `D`; this
+ argument may exceed the `32767` bound.
+
+ * The **xintfrac** macros now accept numbers written in scientific
+ notation, the `\xintFloat` command serves to output its argument
+ with a given number `D` of significant figures. The value of `D`
+ is either given as optional argument to `\xintFloat` or set with
+ `\xintDigits := D;`. The default value is `16`.
+
+[^1]: but values higher than 100 or 200 will presumably give too slow
+evaluations.
+
+
+`1.06b (2013/05/14)`
+----
+
+ * Minor code and documentation improvements. Everywhere in the source
+ code, a more modern underscore has replaced the @ sign.
+
+
+`1.06 (2013/05/07)`
+----
+
+ * Some code improvements, particularly for macros of **xint** doing loops.
+
+ * New utilities in **xint** for expandable manipulations of lists:
+
+ \xintNthElt, \xintCSVtoList, \xintRevWithBraces
+
+ * The macros did only a double expansion of their arguments. They now
+ fully expand them (using ``\romannumeral-`0``). Furthermore, in the
+ case of arguments constrained to obey the TeX bounds they will be
+ inserted inside a `\numexpr..\relax`, hence completely expanded, one
+ may use count registers, even infix arithmetic operations, etc...
+
+
+`1.05 (2013/05/01)`
+----
+
+Minor changes and additions to **xintfrac** and **xintcfrac**.
+
+
+`1.04 (2013/04/25)`
+----
+
+ * New component **xintcfrac** devoted to continued fractions.
+
+ * **xint**: faster division.
+
+ * **xint**: added expandable macros `\xintListWithSep` and `\xintApply` to
+ handle token lists.
+
+ * **xintfrac**: added `\xintRound`.
+
+ * **xintseries** has a new implementation of `\xintPowerSeries` based
+ on a Horner scheme, and new macro `\xintRationalSeries`. Both to
+ help deal with the *denominator buildup* plague.
+
+ * `tex xint.dtx` extracts style files (no need for a `xint.ins`).
+
+ * Bug fix (**xintfrac**): `\xintIrr {0}` crashed.
+
+
+`1.03 (2013/04/14)`
+----
+
+ * New modules **xintfrac** (expandable operations on fractions) and
+ **xintseries** (expandable partial sums with xint package).
+
+ * Slightly improved division and faster multiplication (the best
+ ordering of the arguments is chosen automatically).
+
+ * Added illustration of Machin algorithm to the documentation.
+
+
+`1.0 (2013/03/28)`
+----
+
+Initial announcement:
+
+> The **xint** package implements with expandable TeX macros the basic
+ arithmetic operations of addition, subtraction, multiplication
+ and division, as applied to arbitrarily long numbers represented
+ as chains of digits with an optional minus sign.
+
+> The **xintgcd** package provides implementations of the Euclidean
+ algorithm and of its typesetting.
+
+> The packages may be used with Plain and with LaTeX.
+
+%</changes>------------------------------------------------------
+%<*makefile>------------------------------------------------------
+# This file: Makefile.mk (generated from xint.dtx)
+# Rename the file as Makefile, or keep is named as Makefile.mk
+# and download master Makefile from
+# http://mirror.ctan.org/macros/generic/xint
+# then run "make help"
+
+# Starting with xint 1.3c, uses Latexmk for easier compilation of
+# sourcexint.pdf as it includes indices. These indices for
+# source code were actually removed at 1.3e but usage of Latexmk
+# is maintained for the build (despite it being simpler now).
+
+# Originally tested on Mac OS X Mavericks with GNU Make 3.81,
+# TeXLive 2014 and Pandoc 1.13.1.
+
+# Note to myself: I wanted to use .RECIPEPREFIX = > but it is
+# supported only with GNU Make 3.82 and later.
+
+# this crazyness is to circumvent a problem with docstrip generation
+# of the Makefile; we do not want two empty lines becoming only one
+nullstring :=
+define newline
+$(nullstring)
+
+endef
+# will speed-up a little, I think.
+newline := $(newline)
+
+define helptext
+==== INSTRUCTIONS
+
+The Makefile is to automatize the extraction and compilation from
+xint.dtx of package files and documentation files, and for producing
+xint.tds.zip. It is for GNU/Linux like systems, with a teTeX like
+installation such as TeXLive. Tested on Mac OS X Mavericks with TL2014.
+
+For compiling the PDF files, packages newtx, newtxtt, etoc,... are used
+and should be up-to-date (as of 2014/10). Conversion to plain, html and
+pdf format of README.md and CHANGES.md (make PanPDF, make PanHTML)
+require Pandoc software. (tested with Pandoc 1.13.1).
+
+It is recommended to work with xint.dtx and Makefile in an otherwise
+initially empty temporary repertory.
+
+make help
+ prints this help (using more). It will also have already extracted
+ all files from xint.dtx.
+
+make helpless
+ prints this help (using less).
+
+make xint.pdf
+ extracts files and produces xint.pdf, using latex and dvipdfmx.
+ Uses Latexmk. No Pandoc needed. To get xint.pdf to include
+ the source code and indices, refer to instructions in xint.tex.
+
+make sourcexint.pdf
+ extracts files and produces sourcexint.pdf, using latex, makeindex
+ and dvipdfmx. Uses Latexmk. No Pandoc needed.
+
+make PanPDF
+ produces README.pdf and CHANGES.pdf, requires Pandoc.
+
+make PanHTML
+ produces README.html and CHANGES.html, requires Pandoc.
+
+make doc
+ produces all documentation.
+
+make all
+ produces all documentation, and creates xint.tds.zip.
+
+make xint.tds.zip
+ same as "make all"
+
+make clean
+ removes auxiliary files and repertories.
+
+make cleanall
+ removes all files, leaving only xint.dtx (and Makefile). If no
+ Makefile, use "etex xint.dtx" to regenerate Makefile.mk, rename
+ it as Makefile and run "make help".
+
+==== INSTALLING
+
+The following has been tested on a TeXLive installation:
+
+make installhome
+ creates xint.tds.zip, and unzips it in <TEXMFHOME>
+ (it assumes there is no ls-R file there)
+
+make installlocal
+ creates xint.tds.zip, and unzips it in <TEXMFLOCAL>
+ (and then does texhash <TEXMFLOCAL>)
+ IT MIGHT BE NEEDED TO RUN IT AS "sudo make installlocal"
+ This depends on how the access rights are configured.
+ In case of doubt run first "make doc" and then "make
+ installlocal". If the latter fails, "sudo make installlocal".
+
+make uninstallhome
+ removes all xint files and repertories from <TEXMFHOME>
+
+make uninstalllocal
+ removes all xint files and repertories from <TEXMFLOCAL>
+ (and then does texhash <TEXMFLOCAL>)
+ IT MIGHT BE NEEDED TO RUN IT AS "sudo make uninstalllocal"
+
+endef
+
+.PHONY: help helpless all extract doc PanPDF PanHTML clean cleanall\
+ installhome uninstallhome installlocal uninstalllocal
+
+# for printf with subst and \n, got it from
+# http://stackoverflow.com/a/5887751
+
+# I could do the trick with := here, for \n substitution, but this would add
+# tiny overhead to all other operations of make
+
+help:
+ @printf '$(subst $(newline),\n,$(helptext))' | more
+
+helpless:
+ @printf '$(subst $(newline),\n,$(helptext))' | less
+
+# RM = rm -f
+JF_tmpdir := $(shell mktemp -d TEMP_XINT_XXX)
+TEXMF_local = $(shell kpsewhich -var-value TEXMFLOCAL)
+TEXMF_home = $(shell kpsewhich -var-value TEXMFHOME)
+packages = xintkernel.sty xintcore.sty xint.sty xintfrac.sty xintexpr.sty\
+ xintgcd.sty xintbinhex.sty xintseries.sty xintcfrac.sty\
+ xinttools.sty xinttrig.sty xintlog.sty
+# Makefile.mk is not included in $(extracted). Its extraction rule is in
+# master Makefile file. We can not extract Makefile from xint.dtx via
+# docstrip, as .tex is always appended if a filename with no extension is
+# specified. If "make -f Makefile.mk" is run, Makefile.mk will not be
+# overwritten because tex xint.dtx does not extract it (etex xint.dtx does).
+extracted = $(packages) xint.tex xint.ins README.md CHANGES.md\
+ doHTMLs.sh doPDFs.sh pandoctpl.latex
+doc_pdf = README.pdf CHANGES.pdf
+doc_html = README.html CHANGES.html
+filesfortex = $(packages)
+filesforsource = xint.dtx Makefile
+filesfordoc = xint.pdf sourcexint.pdf README $(doc_pdf) $(doc_html)
+auxiliaryfiles = xint.dvi xint.aux xint.toc xint.log\
+ sourcexint.dvi sourcexint.aux sourcexint.toc sourcexint.log\
+ README.dvi README.aux README.toc README.out README.log\
+ CHANGES.dvi CHANGES.aux CHANGES.toc CHANGES.out CHANGES.log
+xint_cmd = latexmk xint
+sourcexint_cmd = latexmk -jobname=sourcexint\
+ -latex='latex %O "\chardef\dosourcexint=1 \input{%S}"' xint.tex
+
+all: $(extracted) doc xint.tds.zip
+ @echo 'make all done.'
+
+extract: $(extracted)
+
+$(extracted): xint.dtx
+ tex xint.dtx
+
+doc: xint.pdf sourcexint.pdf README PanPDF PanHTML
+ @echo 'make doc done.'
+
+xint.pdf: xint.dtx xint.tex
+ $(xint_cmd)
+ dvipdfmx xint.dvi
+
+sourcexint.pdf: xint.dtx xint.tex
+ $(sourcexint_cmd)
+ dvipdfmx sourcexint.dvi
+
+README: README.md
+ pandoc -t plain -o README README.md
+
+PanPDF: $(doc_pdf)
+
+$(doc_pdf): doPDFs.sh
+ chmod u+x doPDFs.sh && ./doPDFs.sh
+
+PanHTML: $(doc_html)
+
+$(doc_html): doHTMLs.sh
+ chmod u+x doHTMLs.sh && ./doHTMLs.sh
+
+xint.tds.zip: $(filesfordoc) $(filesforsource) $(filesfortex)
+ rm -fr $(JF_tmpdir)
+ mkdir -p $(JF_tmpdir)/doc/generic/xint
+ mkdir -p $(JF_tmpdir)/source/generic/xint
+ mkdir -p $(JF_tmpdir)/tex/generic/xint
+ chmod -R ugo+rwx $(JF_tmpdir)
+ cp -a $(filesfordoc) $(JF_tmpdir)/doc/generic/xint
+ cp -a $(filesforsource) $(JF_tmpdir)/source/generic/xint
+ cp -a $(filesfortex) $(JF_tmpdir)/tex/generic/xint
+ cd $(JF_tmpdir); chmod -R ugo+r doc source tex
+ umask 0022 && cd $(JF_tmpdir) &&\
+ zip -r xint.tds.zip doc source tex &&\
+ mv -f xint.tds.zip ../
+ rm -fr $(JF_tmpdir)
+ @echo 'make xint.tds.zip done.'
+
+xint.zip: $(filesfordoc) $(filesforsource) $(filesfortex) xint.tds.zip
+ mkdir -p $(JF_tmpdir)/xint
+ chmod ugo+rwx $(JF_tmpdir)/xint
+ cp -a $(filesfordoc) $(JF_tmpdir)/xint
+ cp -a $(filesforsource) $(JF_tmpdir)/xint
+ chmod -R ugo+r $(JF_tmpdir)/xint
+ mv xint.tds.zip $(JF_tmpdir)/
+ umask 0022 && cd $(JF_tmpdir) && zip -r xint.zip xint.tds.zip xint
+ mv $(JF_tmpdir)/xint.tds.zip ./
+ mv -f $(JF_tmpdir)/xint.zip ./
+ rm -fr $(JF_tmpdir)
+ @echo 'make xint.zip done.'
+
+installhome: xint.tds.zip
+ unzip xint.tds.zip -d $(TEXMF_home)
+
+uninstallhome:
+ cd $(TEXMF_home) && rm -fr doc/generic/xint \
+ source/generic/xint \
+ tex/generic/xint
+
+# cf http://stackoverflow.com/a/1909390
+# as kpsewhich is very slow (.5s) I want to evaluate once only.
+installlocal: xint.tds.zip
+ $(eval $@_tmp := $(TEXMF_local))
+ unzip xint.tds.zip -d $($@_tmp) && texhash $($@_tmp)
+
+uninstalllocal:
+ cd $(TEXMF_local) && rm -fr doc/generic/xint \
+ source/generic/xint \
+ tex/generic/xint && texhash .
+clean:
+ rm -fr auto/ TEMP*/
+ rm -f $(auxiliaryfiles)\
+ sourcexint.fls sourcexint.fdb_latexmk\
+ xint.fls xint.fdb_latexmk
+
+cleanall: clean
+ rm -f $(extracted) $(doc_pdf) $(doc_html)\
+ README README.tex CHANGES.tex\
+ xint.pdf sourcexint.pdf xint.tds.zip xint.zip Makefile.mk
+%</makefile>$-----------------------------------------------------
+%<*pandoctpl>-----------------------------------------------------
+\newcommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+$if(dvipdfmx)$
+{\csname @for\endcsname\x:=hyperref,graphicx,color,xcolor\do
+ {\PassOptionsToPackage{dvipdfmx}\x}}
+ \PassOptionsToPackage{dvipdfmx-outline-open}{hyperref}
+ \PassOptionsToPackage{dvipdfm}{geometry}
+$endif$
+\documentclass[$papersize$,fontsize=$fontsize$]{scrartcl}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english]{babel}
+
+\usepackage{newtxtext}
+\usepackage{newtxtt}
+\usepackage{newtxmath}
+
+\usepackage{upquote}
+
+% pour les \texttt venant de la conversion par pandoc des `...`:
+\begingroup\makeatletter
+ \catcode`\'\active
+ \catcode`\*\active
+ \catcode`\`\active
+\@firstofone {\endgroup
+ \def\dostraightquotesandstar{% textcomp package is loaded by newtxtext
+ \let`\textasciigrave
+ \let'\textquotesingle
+ \edef*{\noexpand\raisebox{-.25\noexpand\height}{\string*}}%
+ \catcode39\active % '
+ \catcode96\active % `
+ \catcode42\active }% *
+}% for \texttt, let's just forget about math and italic correction things
+\DeclareRobustCommand\texttt {\bgroup
+ \dostraightquotesandstar\afterassignment\ttfamily\let\next=}
+
+$if(geometry)$
+\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
+$endif$
+$if(tables)$
+\usepackage{longtable,booktabs}
+$endif$
+\usepackage[unicode=true,bookmarks]{hyperref}
+\hypersetup{breaklinks=true,%
+ pdfauthor={Jean-Fran\c cois Burnol},%
+ pdftitle={$title$ $author$ $date$},%
+ colorlinks=true,%
+ citecolor=$if(citecolor)$$citecolor$$else$blue$endif$,%
+ urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,%
+ linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,%
+ pdfborder={0 0 0},%
+ pdfstartview=FitH,%
+ pdfpagemode=UseOutlines}
+%%\urlstyle{same} % don't use monospace font for urls
+
+\setlength{\parindent}{0pt}
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\usepackage{enumitem}
+%% reduce LaTeX's insane vertical spacing around verbatim blocks
+\setlength{\parskip}{\medskipamount}
+\setlist[trivlist]{topsep=0pt,partopsep=0pt,itemsep=0pt,parsep=0pt}
+
+$if(numbersections)$
+\setcounter{secnumdepth}{5}
+$else$
+\setcounter{secnumdepth}{0}
+$endif$
+
+$if(etoc)$\usepackage{etoc}$endif$
+
+\title{$title$}
+\author{$author$}
+\date{$date$}
+
+$for(header-includes)$
+$header-includes$
+$endfor$
+
+\begin{document}
+$if(title)$
+\maketitle
+$endif$
+
+$for(include-before)$
+$include-before$
+
+$endfor$
+
+$if(toc)$
+\setcounter{tocdepth}{$toc-depth$}
+$if(etoc)$
+\etocdefaultlines
+\etocmulticolstyle[$etoc$]{}
+$endif$
+\tableofcontents
+$endif$
+
+$body$
+
+$for(include-after)$
+$include-after$
+
+$endfor$
+\end{document}
+%</pandoctpl>-----------------------------------------------------
+%<*dohtmlsh>------------------------------------------------------
+#! /bin/sh
+# produces README.html and CHANGES.html from README.md and CHANGES.md
+# tested with pandoc 1.13.1
+
+pandoc -o README.html -s --toc -V highlighting-css=' body{margin-left : 10%; margin-right : 15%; margin-top: 4ex; font-size: 12pt;}
+ pre {white-space: pre-wrap; }
+ code {white-space: pre-wrap; }
+ .mono {font-family: monospace;}' README.md
+
+pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin-left : 10%; margin-right : 15%; margin-top: 4ex; font-size: 12pt;}
+ pre {white-space: pre-wrap;}
+ code {white-space: pre-wrap;}
+ #TOC {float: right; position: relative; top: 100px; margin-bottom: 100px;}' CHANGES.md
+
+%</dohtmlsh>------------------------------------------------------
+%<*dopdfsh>-------------------------------------------------------
+#! /bin/sh
+# produces README.pdf and CHANGES.pdf from README.md and CHANGES.md
+# via latex+dvipdfmx and custom pandoc latex template
+
+pandoc -o README.tex --template=pandoctpl --toc -V papersize=a4paper -V fontsize=11pt -V dvipdfmx --variable=geometry:footskip=1cm,left=2.5cm,right=2.5cm,top=2cm,bottom=3cm -V etoc=1 README.md
+rm -f README.aux README.toc README.out
+latex -interaction=nonstopmode README
+latex -interaction=nonstopmode README
+latex -interaction=nonstopmode README
+dvipdfmx README.dvi
+
+pandoc -o CHANGES.tex --template=pandoctpl --toc -V 'toc-depth'=2 -V papersize=a4paper -V fontsize=11pt -V dvipdfmx --variable=geometry:footskip=1cm,left=2.5cm,right=2.5cm,top=2cm,bottom=3cm -V etoc=2 CHANGES.md
+rm -f CHANGES.aux CHANGES.toc CHANGES.out
+latex -interaction=nonstopmode CHANGES
+latex -interaction=nonstopmode CHANGES
+latex -interaction=nonstopmode CHANGES
+dvipdfmx CHANGES.dvi
+%</dopdfsh>-------------------------------------------------------
+%<*drv>-----------------------------------------------------------
+%%
+%% To produce manually xint.pdf from xint.tex:
+%% - latex (thrice) then dvipdfmx,
+%% - or xelatex/pdflatex thrice.
+%%
+%% To produce manually sourcexint.pdf from xint.tex:
+%% latexmk -jobname=sourcexint\
+%% -latex="latex %O \\\\chardef\\\\dosourcexint=1 \\\\input{%S}"\
+%% xint.tex
+%% (quoting may differ, depending on the shell)
+%% dvipdfmx sourcexint.dvi
+%%
+%% It is naturally possible to replace latexmk by suitable latex
+%% and makeindex calls, but details are left out here.
+%%
+%% To get xint.pdf to include the source code and indices:
+%% - etex xint.dtx (this will regenerate this file),
+%% - replace 1 by 0 in \chardef line below,
+%% - make clean
+%% - make xint.pdf
+%% This will use latexmk. Without it execute latex thrice then dvipdfmx.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{xint.tex}%
+[\xintbndldate\space v\xintbndlversion\space driver file for xint documentation (JFB)]%
+\PassOptionsToClass{a4paper,fontsize=10pt}{scrdoc}
+\chardef\NoSourceCode 1 % set it to 0 if source code inclusion desired
+\input xint.dtx
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-PDF-from-DVI: "Dvipdfmx"
+%%% End:
+%</drv>-----------------------------------------------------------
+%<*ins>-----------------------------------------------------------
+%%
+%% `tex xint.ins' extracts all package files from xint.dtx, as well as
+%% xint.tex, README.md, CHANGES.md, doPDFs.sh, doHTMLs.sh, .latexmkrc
+%% and xint-gind.ist
+%%
+%% `etex xint.ins' additionally extracts Makefile.mk, which is needed
+%% for building documentation using `make'.
+%%
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\nopreamble\nopostamble
+\file{README.md}{\from{xint.dtx}{readme}}
+\file{CHANGES.md}{\from{xint.dtx}{changes}}
+\file{doHTMLs.sh}{\from{xint.dtx}{dohtmlsh}}
+\file{doPDFs.sh}{\from{xint.dtx}{dopdfsh}}
+\ifx\numexpr\undefined\else\catcode9 11
+ \file{Makefile.mk}{\from{xint.dtx}{makefile}}\fi
+\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble
+\file{pandoctpl.latex}{\from{xint.dtx}{pandoctpl}}
+\file{xint.tex}{\from{xint.dtx}{drv}}
+\file{xintkernel.sty}{\from{xint.dtx}{xintkernel}}
+\file{xinttools.sty}{\from{xint.dtx}{xinttools}}
+\file{xintcore.sty}{\from{xint.dtx}{xintcore}}
+\file{xint.sty}{\from{xint.dtx}{xint}}
+\file{xintbinhex.sty}{\from{xint.dtx}{xintbinhex}}
+\file{xintgcd.sty}{\from{xint.dtx}{xintgcd}}
+\file{xintfrac.sty}{\from{xint.dtx}{xintfrac}}
+\file{xintseries.sty}{\from{xint.dtx}{xintseries}}
+\file{xintcfrac.sty}{\from{xint.dtx}{xintcfrac}}
+\file{xintexpr.sty}{\from{xint.dtx}{xintexpr}}
+\file{xinttrig.sty}{\from{xint.dtx}{xinttrig}}
+\file{xintlog.sty}{\from{xint.dtx}{xintlog}}}
+\catcode32=13\relax% active space
+\let =\space%
+\Msg{********************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* xintkernel.sty}
+\Msg{* xintcore.sty}
+\Msg{* xint.sty}
+\Msg{* xintbinhex.sty}
+\Msg{* xintgcd.sty}
+\Msg{* xintfrac.sty}
+\Msg{* xintseries.sty}
+\Msg{* xintcfrac.sty}
+\Msg{* xintexpr.sty}
+\Msg{* xinttrig.sty}
+\Msg{* xintlog.sty}
+\Msg{* xinttools.sty}
+\Msg{*}
+\Msg{* To produce the user manual run latex thrice on xint.tex}
+\Msg{* then dvipdfmx on xint.dvi, or if your system allows,}
+\Msg{* execute `make xint.pdf' (this requires Latexmk).}
+\Msg{*}
+\Msg{* The commented source code is generated from executing}
+\Msg{* `make sourcexint.pdf' (this requires Latexmk; if not}
+\Msg{* available check the details in Makefile.mk and .latexmkrc)}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{********************************************************************}
+\endbatchfile
+%</ins>-----------------------------------------------------------
+%<*dtx>-----------------------------------------------------------
+^^Bfi^^Begroup
+\chardef\noetex 0
+\ifx\numexpr\undefined\chardef\noetex 1 \fi
+\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop
+\else
+ \ifx\ProvidesFile\undefined
+ \chardef\extractfiles 0 % no LaTeX2e: etex, xetex, ... on xint.dtx
+ \else
+ \ifx\NoSourceCode\undefined
+ % latex/pdflatex/xelatex on xint.dtx, we will extract all files
+ \chardef\extractfiles 1 % 1 = extract and typeset, 2 = only typeset
+ \chardef\NoSourceCode 0 % 0 = include source code, 1 = do not
+ \NeedsTeXFormat{LaTeX2e}%
+ \PassOptionsToClass{a4paper,fontsize=10pt}{scrdoc}%
+ \else
+ % latex/pdflatex/xelatex on xint.tex
+ \chardef\extractfiles 2 % no extractions, but typeset
+ % \NoSourceCode is set-up in xint.tex
+ \fi
+ \ProvidesFile{xint.dtx}[bundle source (\xintbndlversion, \xintbndldate) %
+ and documentation (\xintdocdate)]%
+ \fi
+\fi
+\ifnum\extractfiles<2 % extract files
+\def\MessageDeFin{\newlinechar10 \let\Msg\message
+\Msg{^^J}%
+\Msg{********************************************************************^^J}%
+\Msg{*^^J}%
+\Msg{* To finish the installation you have to move the following^^J}%
+\Msg{* files into a directory searched by TeX:^^J}%
+\Msg{*^^J}%
+\Msg{* \space\space\space\space xintkernel.sty^^J}%
+\Msg{* \space\space\space\space xintcore.sty^^J}%
+\Msg{* \space\space\space\space xint.sty^^J}%
+\Msg{* \space\space\space\space xintbinhex.sty^^J}%
+\Msg{* \space\space\space\space xintgcd.sty^^J}%
+\Msg{* \space\space\space\space xintfrac.sty^^J}%
+\Msg{* \space\space\space\space xintseries.sty^^J}%
+\Msg{* \space\space\space\space xintcfrac.sty^^J}%
+\Msg{* \space\space\space\space xintexpr.sty^^J}%
+\Msg{* \space\space\space\space xinttools.sty^^J}%
+\Msg{* \space\space\space\space xinttrig.sty^^J}%
+\Msg{* \space\space\space\space xintlog.sty^^J}%
+\Msg{*^^J}%
+\Msg{* To produce the user manual run latex thrice on xint.tex^^J}%
+\Msg{* then dvipdfmx on xint.dvi, or if your system allows,^^J}%
+\Msg{* execute `make xint.pdf' (this requires Latexmk).^^J}%
+\Msg{*^^J}%
+\Msg{* The commented source code is generated from executing^^J}%
+\Msg{* `make sourcexint.pdf' (this requires Latexmk; if not^^J}%
+\Msg{* available check the details in Makefile.mk and .latexmkrc)^^J}%
+\Msg{*^^J}%
+\Msg{* Happy TeXing!^^J}%
+\Msg{*^^J}%
+\Msg{********************************************************************^^J}%
+}%
+\begingroup
+ \input docstrip.tex
+ \askforoverwritefalse
+ \catcode9 11 % do not kill TAB in producing Makefile.mk
+ \generate{\nopreamble\nopostamble
+ \file{README.md}{\from{xint.dtx}{readme}}
+ \file{CHANGES.md}{\from{xint.dtx}{changes}}
+ % pure tex will use ^^I notation for TAB character, don't want that.
+ % there is a problem with xelatex, as it generates ^^I also.
+ \ifnum\noetex=1 \else\ifx\XeTeXinterchartoks\undefined
+ \file{Makefile.mk}{\from{xint.dtx}{makefile}}\fi\fi
+ \file{doHTMLs.sh}{\from{xint.dtx}{dohtmlsh}}
+ \file{doPDFs.sh}{\from{xint.dtx}{dopdfsh}}
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \file{pandoctpl.latex}{\from{xint.dtx}{pandoctpl}}
+ \file{xint.ins}{\from{xint.dtx}{ins}}
+ \file{xint.tex}{\from{xint.dtx}{drv}}
+ \file{xintkernel.sty}{\from{xint.dtx}{xintkernel}}
+ \file{xinttools.sty}{\from{xint.dtx}{xinttools}}
+ \file{xintcore.sty}{\from{xint.dtx}{xintcore}}
+ \file{xint.sty}{\from{xint.dtx}{xint}}
+ \file{xintbinhex.sty}{\from{xint.dtx}{xintbinhex}}
+ \file{xintgcd.sty}{\from{xint.dtx}{xintgcd}}
+ \file{xintfrac.sty}{\from{xint.dtx}{xintfrac}}
+ \file{xintseries.sty}{\from{xint.dtx}{xintseries}}
+ \file{xintcfrac.sty}{\from{xint.dtx}{xintcfrac}}
+ \file{xintexpr.sty}{\from{xint.dtx}{xintexpr}}
+ \file{xinttrig.sty}{\from{xint.dtx}{xinttrig}}
+ \file{xintlog.sty}{\from{xint.dtx}{xintlog}}}
+\endgroup
+\fi % end of file extraction (from etex/latex/pdflatex/... run on xint.dtx)
+\ifnum\extractfiles=0 % no LaTeX, files now extracted. Stop.
+ \MessageDeFin\expandafter\end
+\fi
+% From this point on, run is necessarily with e-TeX.
+% Check if \MessageDeFin got defined, if yes put it at end of run.
+\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi
+%-----------------------------------------------------------------
+% -*- coding: utf-8; mode: latex, fill-column: 78; -*-
+%
+\ifdefined\dosourcexint % this toggle is set from make sourcexint.pdf rule
+ \chardef\NoSourceCode 0
+\else
+ \chardef\dosourcexint 0
+\fi
+
+% default is to assume latex + dvipdfmx
+\chardef\Withdvipdfmx 1
+
+\RequirePackage{ifpdf}
+\RequirePackage{ifxetex}
+
+\ifpdf \chardef\Withdvipdfmx 0 \fi
+\ifxetex\chardef\Withdvipdfmx 0 \fi
+
+\ifnum\Withdvipdfmx=1
+\def\pgfsysdriver{pgfsys-dvipdfm.def}
+\documentclass [dvipdfm, dvipdfmx, dvipdfmx-outline-open]{scrdoc}
+\else
+\documentclass {scrdoc}
+\fi
+% Revert change to \smash and other macros at LaTeX 2018/12/01
+% https://github.com/latex3/latex2e/issues/108
+\makeatletter
+\let\leavevmode@ifvmode\empty % for \smash in \NewWith etc...
+\makeatother
+
+% Remove from sectioning commands insertion of marks, because we
+% will do it ourself.
+\usepackage{etoolbox}
+\makeatletter
+\patchcmd{\@sect}%
+ {\expandafter\csname#1mark\expandafter\endcsname\expandafter{\@currentheadentry}}%
+ {}{}{}
+\patchcmd{\@sect}%
+ {\expandafter\csname#1mark\expandafter\endcsname\expandafter{\@currentheadentry}}%
+ {}{}{}
+\makeatother
+
+\PassOptionsToPackage{bookmarks=true}{hyperref}
+
+\ifnum\NoSourceCode=1
+ \OnlyDescription
+\fi
+
+
+% counts used in particular in the samples from the documentation of the
+% xintseries.sty package
+\newcount\cnta
+\newcount\cntb
+\newcount\cntc
+
+\pagestyle{headings}
+
+\ifxetex
+\else
+ \usepackage[T1]{fontenc}
+ \usepackage[utf8]{inputenc}
+ \DeclareUnicodeCharacter{03B4}{\ensuremath{\delta}}%δ
+ \DeclareUnicodeCharacter{03BE}{\ensuremath{\xi}}%ξ
+ \DeclareUnicodeCharacter{03C0}{\ensuremath{\pi}}%Ï€
+\fi
+
+\usepackage{multicol}
+\usepackage{geometry}
+\AtBeginDocument {\ttzfamily % package newtxtt loaded in preamble
+ \newgeometry{textwidth=\dimexpr92\fontcharwd\font`X\relax,
+ vscale=0.75}}
+
+\unless\ifnum\dosourcexint=1
+\usepackage{xintexpr}
+\usepackage{xintbinhex}
+\usepackage{xintgcd}
+\usepackage{xintseries}
+\usepackage{xintcfrac}
+\usepackage{amsmath}% for \cfrac usage
+\DeclareMathOperator{\sinc}{sinc}
+\usepackage{pifont}% for \ding{73} (hollow star)
+\fi
+
+\usepackage{xinttools}
+\xintverbosetrue
+
+\usepackage{enumitem}
+\usepackage{varioref}
+\usepackage{xspace}
+\usepackage[para]{footmisc}
+\usepackage{picture}
+\usepackage{graphicx}
+
+\usepackage[english]{babel}
+\usepackage[autolanguage,np]{numprint}
+\AtBeginDocument{\npthousandsep{,\hskip .5pt plus .1pt minus .1pt}}
+
+\usepackage[dvipsnames]{xcolor}
+\definecolor{joli}{RGB}{225,95,0}
+\definecolor{JOLI}{RGB}{225,95,0}
+\definecolor{BLUE}{RGB}{0,0,255}
+\definecolor{niceone}{RGB}{38,128,192}
+\usepackage{eso-pic}% après xcolor sinon Option clash for package xcolor.
+
+\ifnum\dosourcexint=1
+\else
+% Dependency graph done using TikZ (manually)
+ \usepackage{tikz}
+ \usetikzlibrary{shapes,arrows.meta}
+\fi
+
+\usepackage{framed}
+% SNUGFRAMED
+% ==========
+
+\makeatletter
+\newenvironment{snugframed}{%
+ \fboxsep \dimexpr2\fontcharwd\font`X\relax
+ \advance\linewidth-2\fboxsep
+ \advance\csname @totalleftmargin\endcsname \fboxsep
+ \def\FrameCommand##1{\hskip\@totalleftmargin
+ \hskip-\fboxsep
+ \fbox{##1}\hskip-\fboxsep
+ % There is no \@totalrightmargin, so:
+ \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
+ \MakeFramed {\advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize
+ \@setminipage}%
+ }{\par\unskip\@minipagefalse\endMakeFramed}
+\makeatother
+
+% HYPERREF
+% ========
+
+\usepackage[pdfencoding=unicode]{hyperref}
+
+\hypersetup{%
+linktoc=all,%
+breaklinks=true,%
+colorlinks=true,%
+urlcolor=niceone,%
+linkcolor=blue,%
+pdfauthor={Jean-Fran\c cois Burnol},%
+pdftitle={The xint bundle},%
+pdfsubject={Arithmetic with TeX},%
+pdfkeywords={Expansion, arithmetic, TeX},%
+pdfstartview=FitH,%
+pdfpagemode=UseOutlines}
+
+\usepackage{hypcap}
+\ifnum\dosourcexint=1
+\hypersetup{pdftitle={The xint bundle source code}}
+\fi
+\usepackage{bookmark}
+
+% FONTS
+% =====
+
+\usepackage[zerostyle=a,straightquotes,scaled=0.95]{newtxtt}
+\usepackage{newtxmath}
+
+\makeatletter
+
+
+
+\DeclareFontFamily{T1}{newtxttb}{\hyphenchar\font\m@ne}
+
+\DeclareFontShape{T1}{newtxttb}{m}{n}{
+ <-> s*[\newtxtt@scale]newtxttbq
+}{}
+\DeclareFontShape{T1}{newtxttb}{b}{n}{
+ <-> s*[\newtxtt@scale]newtxbttbq
+}{}
+\DeclareFontShape{T1}{newtxttb}{bx}{n}{
+ <-> ssub * newtxttb/b/n
+}{}
+\DeclareFontShape{T1}{newtxttb}{m}{sl}{
+ <-> s*[\newtxtt@scale]newtxttslbq
+}{}
+\DeclareFontShape{T1}{newtxttb}{m}{it}{
+ <-> ssub * newtxttb/m/sl
+}{}
+
+% Ajouté le 9 mars 2016
+
+\DeclareFontShape{T1}{newtxttb}{m}{sc}{%cap & small cap
+ <-> s*[\newtxtt@scale]newtxttscbq
+}{}
+\DeclareFontShape{T1}{newtxttb}{b}{sc}{%bold cap & small cap
+ <-> s*[\newtxtt@scale]newtxbttscbq
+}{}
+\DeclareFontShape{T1}{newtxttb}{b}{sl}{%bold slanted
+ <-> s*[\newtxtt@scale]newtxbttslbq
+}{}
+\DeclareFontShape{T1}{newtxttb}{b}{it}{%bold italic
+ <-> ssub * newtxttb/b/sl%
+}{}
+\DeclareFontShape{T1}{newtxttb}{bx}{sc}{%bold extended cap & small cap
+ <-> ssub * newtxttb/b/sc%
+}{}
+\DeclareFontShape{T1}{newtxttb}{bx}{sl}{%bold extended slanted
+ <-> ssub * newtxttb/b/sl%
+}{}
+\DeclareFontShape{T1}{newtxttb}{bx}{it}{%bold extended italic
+ <-> ssub * newtxttb/b/sl%
+}{}
+
+% Ajouté le 9 mars 2016
+\DeclareEncodingSubset{TS1}{newtxttb}{0}
+\DeclareFontFamily{TS1}{newtxttb}{\hyphenchar\font\m@ne}
+
+\DeclareFontShape{TS1}{newtxttb}{m}{n}{%medium
+ <-> s*[\newtxtt@scale]tcxtt%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{m}{sc}{%cap & small cap
+ <->ssub * newtxttb/m/n%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{m}{sl}{%slanted
+ <-> s*[\newtxtt@scale]tcxttsl%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{m}{it}{%italic
+ <->ssub * newtxttb/m/sl%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{b}{n}{%bold
+ <-> s*[\newtxtt@scale]tcxbtt%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{b}{sc}{%bold cap & small cap
+ <->ssub * newtxttb/b/n%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{b}{sl}{%bold slanted
+ <-> s*[\newtxtt@scale]tcxbttsl%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{b}{it}{%bold italic
+ <->ssub * newtxttb/b/sl%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{bx}{n}{%bold extended
+ <->ssub * newtxttb/b/n%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{bx}{sc}{ %bold extended cap & small cap
+ <->ssub * newtxttb/b/sc%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{bx}{sl}{%bold extended slanted
+ <->ssub * newtxttb/b/sl%
+}{}
+\DeclareFontShape{TS1}{newtxttb}{bx}{it}{%bold extended italic
+ <->ssub * newtxttb/b/it%
+}{}
+
+
+\makeatother
+
+% This is with a slashed 0 like the original txtt.
+\newcommand\ttbfamily {\fontfamily{newtxttb}\selectfont }
+
+\ifnum\dosourcexint=1
+\else
+\renewcommand\familydefault\ttdefault
+\usepackage[noendash]{mathastext}% pas de endash dans newtxtt
+\fi
+\frenchspacing
+% sans-serif in footnotes, TOC, titles, etc...
+\renewcommand\familydefault\sfdefault
+
+% TABLES OF CONTENTS
+% ==================
+
+\usepackage{tocloft}
+\usepackage{etoc}
+
+\def\gobbletodot #1.{}
+
+\newif\ifinmanualmaintoc
+\ifnum\dosourcexint=0
+ \inmanualmaintoctrue
+\fi
+\def\sectioncouleur{{cyan}}
+
+\def\MARGEPAGENO {1.5em}% changera pour la partie implémentation
+
+
+\def\SKIPSECTIONINTERSPACE{\vskip\bigskipamount}
+\etocsetstyle{section}{}
+ {\normalfont}
+ {\etociffirst{}{\SKIPSECTIONINTERSPACE}%
+ \rightskip \MARGEPAGENO\relax
+ \parfillskip -\MARGEPAGENO\relax
+ \bfseries
+ \leftskip \leftmarginii
+ \noindent\llap % \llap
+ {\makebox[\leftmarginii][l]% et \leftmargini le 12/10/2014
+ {\expandafter\textcolor\sectioncouleur {\etocnumber}}}%
+ \strut\etocname
+ \mdseries\nobreak\leaders\etoctoclineleaders\hfill\nobreak\strut
+ \makebox[\MARGEPAGENO][r]{\etocpage}\par
+ \let\ETOCsectionnumber\etocthenumber
+ }%
+ {}%
+
+\newdimen\margegauchetoc
+\AtBeginDocument{\margegauchetoc \dimexpr 5\fontcharwd\font`X\relax}
+\makeatletter
+\etocsetstyle{subsection}
+ {\begingroup\normalfont
+ \setlength{\premulticols}{0pt}%
+ \setlength{\multicolsep}{0pt}%
+ \setlength{\columnsep}{\leftmarginii}%
+ \setlength{\columnseprule}{.4pt}% n'influence pas séparation colonnes
+ \parskip\z@skip
+ \raggedcolumns
+ \addvspace{\smallskipamount}%
+ \begin{multicols}{2}
+ \leftskip \margegauchetoc % 12 octobre 2014
+ \ifinmanualmaintoc
+ \rightskip \MARGEPAGENO
+ \else
+ \rightskip \MARGEPAGENO plus 2em minus 1em
+ \fi
+ \parfillskip -\MARGEPAGENO\relax
+ }
+ {}
+ {\noindent
+ \etocifnumbered{\llap{\makebox[\margegauchetoc][l]{\ttzfamily\bfseries\etoclink
+ {\ifinmanualmaintoc\expandafter\textcolor\sectioncouleur
+ {\normalfont\bfseries\ETOCsectionnumber}\fi
+ .\expandafter\gobbletodot\etocthenumber}}}}{\kern-\margegauchetoc}%
+ \strut\etocname\nobreak
+ \unless\ifinmanualmaintoc\leaders\etoctoclineleaders\fi
+ \hfill\nobreak
+ \strut\makebox[\MARGEPAGENO][r]{\small\etocpage}\endgraf }
+ {\end{multicols}\endgroup
+ %\addvspace{\smallskipamount}
+ }%
+
+\etocsetstyle{subsubsection}
+ {\begingroup\normalfont\small
+ \leftskip \dimexpr\leftmargini+1em\relax }
+ {}
+ {\noindent
+ \llap{\makebox[\dimexpr\leftmargini+1em\relax][l]%
+ {\ttzfamily\bfseries\etoclink
+ {\HOOKLOCALTOC.\expandafter\gobbletodot\etocthenumber}}}%
+ \strut\etocname\nobreak
+ \leaders\etoctoclineleaders
+ \hfill\nobreak
+ \strut\makebox[\MARGEPAGENO][r]{\small\etocpage}\endgraf }
+ {\endgroup }%
+
+\let\HOOKLOCALTOC\empty% quick hack to get style I want in User defined functions
+\etocsetlevel{table}{6}
+
+\makeatother
+
+\addtocontents{toc}{\protect\hypersetup{hidelinks}}
+
+% =====================
+% MISCELLANEOUS MARK-UP
+% =====================
+
+
+\def\digitstt #1{\begingroup\color[named]{OrangeRed}#1\endgroup}
+\let\dtt\digitstt
+
+% \ctexttt is a remnant of 1.09n manual, don't have time to get rid of it now.
+\newcommand\ctexttt [1]{\begingroup\color[named]{DarkOrchid}%\bfseries
+ #1\endgroup}
+
+% \fexpan 22 octobre 2013
+\newcommand\fexpan {\hyperref[ssec:expansions]{\textit{f}-expan}}
+% Septembre 2015
+% Address updated to github repo's one, May 2018
+\def\liiibigint
+ {\href{https://github.com/latex3/latex3/tree/master/l3trial/l3bigint}{l3bigint}}
+
+% \fixmeaning
+\makeatletter
+\def\fixmeaning {\expandafter\fix@meaning\meaning}
+\expandafter\edef\expandafter\fix@meaning
+ \expandafter #\expandafter1\string\romannumeral#2#3%
+ {#1\string\romannumeral`\string^\string^@}
+\makeatother
+
+% Margin Notes
+% ============
+
+\makeatletter
+\def\MyMarginNote {\@ifnextchar[\@MyMarginNote{\@MyMarginNote[]}}%
+\let\inmarg\MyMarginNote
+\def\@MyMarginNote [#1]#2{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt
+ {\color[named]{PineGreen}\normalfont\small
+ \hsize 1.6cm\rightskip.5cm minus.5cm
+ \hss\vtop{#2}\ $\to$#1\ }}%
+ \vskip\dp\strutbox
+ }\strut\@esphack}
+\def\MyMarginNoteWithBrace #1#2{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt
+ {\color[named]{PineGreen}%\normalfont\small
+ \hss #1\ $\bigg\{$#2}}%
+ \vskip\dp\strutbox
+ }\strut\@esphack}
+\def\IMPORTANT {\MyMarginNoteWithBrace
+ {\raisebox{-.5\height}{\resizebox{2\width}{!}{\ding{43}}}}{\ }}
+\def\IMPORTANTf {\MyMarginNoteWithBrace
+ {\raisebox{-.5\height}{\resizebox{2\width}{!}{\ding{43}}}}%
+ {\kern\dimexpr\FrameSep+\FrameRule\relax\ }}
+\def\etype #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{PineGreen}%
+ \itshape \xintListWithSep{\,}{#1}\ $\star$\quad }}%
+ \vskip\dp\strutbox
+ }\strut\@esphack}
+\def\retype #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{PineGreen}%
+ \itshape \xintListWithSep{\,}{#1}\ \ding{73}\quad }}%
+ \vskip\dp\strutbox }\strut\@esphack}
+\def\ntype #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{PineGreen}%
+ \itshape \xintListWithSep{\,}{#1}\quad }}%
+ \vskip\dp\strutbox }\strut\@esphack}
+%
+\def\Numf {{\vbox{\halign{\hfil##\hfil\cr \footnotesize
+ \upshape Num\cr
+ \noalign{\hrule height 0pt \vskip1pt\relax}
+ \itshape f\cr}}}}
+\def\Ff {{\vbox{\halign{\hfil##\hfil\cr \footnotesize
+ \upshape Frac\cr
+ \noalign{\hrule height 0pt \vskip1pt\relax}
+ \itshape f\cr}}}}
+\def\numx {{\vbox{\halign{\hfil##\hfil\cr \footnotesize
+ \upshape num\cr
+ \noalign{\hrule height 0pt \vskip1pt\relax}
+ \itshape x\cr}}}}
+%
+\def\NewWith #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{PineGreen}%
+ \normalfont\small\bfseries
+ \hsize 1.5cm\rightskip.5cm minus.5cm
+ \vtop{\noindent New with #1}\ }}%
+ \vskip\dp\strutbox }\strut\@esphack}
+%
+\def\CHANGED #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{Red}%
+ \normalfont\small\bfseries
+ \hsize 1.5cm\rightskip.5cm minus.5cm
+ \vtop{\noindent Changed at #1!}\ }}%
+ \vskip\dp\strutbox }\strut\@esphack}
+
+\def\DEPRECATED #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{PineGreen}%
+ \normalfont\small\bfseries
+ \hsize 2cm\rightskip.5cm minus.5cm
+ \vtop{\noindent Deprecated! (#1)}\ }}%
+ \vskip\dp\strutbox }\strut\@esphack}
+%
+\def\CHANGEDf #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{Red}%
+ \normalfont\small\bfseries
+ \hsize 1.5cm\rightskip.5cm minus.5cm
+ \vtop{\noindent Changed at #1!}\
+ \kern\dimexpr\FrameSep+\FrameRule\relax}}%
+ \vskip\dp\strutbox }\strut\@esphack}
+%
+\def\NewWithf #1{\@bsphack
+ \vadjust{\vskip-\dp\strutbox
+ \smash{\hbox to 0pt {\hss\color[named]{PineGreen}%
+ \normalfont\small\bfseries
+ \hsize 1.5cm\rightskip.5cm minus.5cm
+ \vtop{\noindent New with #1}\
+ \kern\dimexpr\FrameSep+\FrameRule\relax}}%
+ \vskip\dp\strutbox }\strut\@esphack}
+
+\makeatother
+
+% \centeredline: OUR OWN LITTLE MACRO FOR CENTERING LINES
+% =======================================================
+
+% 7 mars 2013
+%
+% This macro allows to conveniently center a line inside a paragraph and still
+% allow use therein of \verb or other macros changing catcodes.
+% A proposito, the \LaTeX \centerline uses \hsize and not \linewidth !
+% (which in my humble opinion is bad)
+
+% Actually my \centeredline works nicely in list environments.
+
+% \ignorespaces added June 9, 2013
+
+% Note: \centeredline creates a group
+
+\makeatletter
+\newcommand*\centeredline {%
+ \ifhmode \\\relax
+ \def\centeredline@{\hss\egroup\hskip\z@skip\ignorespaces }%
+ \else
+ \def\centeredline@{\hss\egroup }%
+ \fi
+ \afterassignment\@centeredline
+ \let\next=}
+\def\@centeredline
+ {\hbox to \linewidth \bgroup \hss \bgroup \aftergroup\centeredline@ }
+
+% \leftedline
+% ===========
+
+% 12 octobre 2014
+
+\newif\ifinlefted
+
+\newcommand*\leftedline {%
+ \ifhmode \\\relax
+ \def\leftedline@{\hss\egroup\hskip\z@skip\ignorespaces }%
+ \else
+ \def\leftedline@{\hss\egroup }%
+ \fi
+ \afterassignment\@leftedline
+ \let\next=}
+\def\@leftedline
+ {\hbox to \linewidth \bgroup \inleftedtrue
+ \everbatimeverypar
+ \bgroup
+ \aftergroup\leftedline@ }
+
+\makeatother
+
+% verbatim macros and environments
+% ================================
+%
+% June 2013, then October 2014.
+% -----------------------------
+%
+\makeatletter
+\catcode`_ 11
+
+% some of my verbatim environments do not make the space active (\lverb e.g.). Then
+% \do@noligs must be modified, \char`#1 must be followed by a space token, else,
+% the `#1 expansion will swallow one space.
+\def\do@noligs #1{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`~`#1\relax
+ \lowercase{%
+ \endgroup\def~{\leavevmode\kern\z@\char`#1 }}%
+}
+
+% \lowast
+\def\lowast{\raisebox{-.25\height}{*}}
+\catcode`* 13
+\def\makestarlowast {\let*\lowast\catcode`\*\active}%
+\catcode`* 12
+
+
+
+% \MacroFont and \MicroFont
+% =========================
+
+\def\restoreMicroFont {\def\MicroFont {\ttbfamily\makestarlowast
+ \ifinlefted\else\ifineverb\else\color[named]{Blue}\fi\fi}}
+\restoreMicroFont
+
+% Notice that \macrocode uses \macro@font which stores the \MacroFont meaning
+% in force at \begin{document}. But doc.sty's verbatim uses current \MacroFont
+% not the meaning at \begin{document}. Comprenne qui pourra...
+
+\def\restoreMacroFont {\def\MacroFont {\ttbfamily
+ \ifinlefted\else\ifineverb\else\color[named]{Blue}\fi\fi}}
+\restoreMacroFont
+
+% \verb
+% =====
+
+% Initially, June 2013, then Sep 9, 2014, and Oct 9-12 2014
+%
+% Initial motivation was simply that doc.sty and related classes \verb
+% macro is with a hard-coded \ttfamily. There were further issues.
+%
+% 1. With |stuff with space|, paragraph reformatting in the Emacs/AUCTeX
+% buffer caused havoc. Thus I wanted the input to accept linebreaks in
+% its contents.
+%
+% 2. Hence I did not want to have obeyed spaces obeyed, (Emacs reflowing
+% of paragraph in certain contexts often adds spaces at beginning of a line)
+%
+% 3. Also I wanted to allow hyphenated output, at least at some
+% locations. I did a first version which treated spaces, \, {, and }
+% specially.
+%
+% 4. At some point I wanted to add some colored background (I have
+% dropped that since due to pdf file size increase).
+%
+% 5. And also I got fed up from the non-compatibility with footnotes due
+% to catcode freeze.
+%
+% Because of 5. I opted for a \scantokens approach, hence for a macro
+% with delimited argument. Here is what I do now, this is compatible
+% with short verbs.
+
+\def\verb
+{%
+ \relax \ifmmode\else\leavevmode\null\fi
+ \bgroup
+ \let\do\@makeother \dospecials
+ \@ifstar{\@sverb}% \verb* is used in the index (obsolete: no indices at 1.3e),
+ % leave it using ambient font
+ {\MicroFont % used to change font (ttbfamily=slashed 0), color,
+ % will make * active via \makestarlowast
+ \catcode 32 10 \endlinechar 32 % allows to fetch across line breaks
+ \frenchspacing % done globally in document
+ \@@jfverb}%
+}%
+% Note (Oct 12, 2014): in the improbable situation a newlinechar is
+% found in the ##1, \scantokens will convert this to an end of line in
+% its "write" phase, which will be then ignored in its "read" phase due
+% to \endlinechar-1. This also avoids possible creation of \par which
+% would defeat \@@jfverb@@. Thus it is good.
+\def\@@jfverb #1{%
+ \ifcat\noexpand#1\noexpand~\catcode`#1\active\fi
+% No problem with the EOL for the line where the short verb delimiter stands.
+ \def\next ##1#1{%
+ \@vobeyspaces\everyeof{\relax}\endlinechar\m@ne
+ \expandafter\@@jfverb_a\scantokens\expandafter{##1}}%
+% hack with \@empty to prevent brace stripping if catcodes have been
+% frozen earlier, like in footnotes.
+ \next \@empty
+}
+
+% We don't want a \discretionary at the very start.
+% But then an empty argument is forbidden!
+\def\@@jfverb_a #1{#1\@@jfverb_b }
+
+\def\@@jfverb_b #1{\ifx\relax #1%
+ \egroup
+ \else
+% \penalty\z@, or rather (Oct 11, 2014) but I then adjust the textwidth
+% precisely:
+ \discretionary{\copy\SoftWrapIcon}{}{}%
+ #1\expandafter\@@jfverb_b\fi
+}
+
+% \SoftWrapIcon box for line-breaking using discretionaries
+% =========================================================
+
+\DeclareFontFamily{U}{MdSymbolC}{}
+\DeclareFontShape {U}{MdSymbolC}{m}{n}{<-> MdSymbolC-Regular}{}
+
+\newbox\SoftWrapIcon
+\colorlet {softwrapicon}{blue}
+
+% Emacs/AUCTeX uses very strange comment-like highlighting for \usefont{U}...
+\def\SetSoftWrapIcon{%
+ \setbox\SoftWrapIcon\hb@xt@\z@
+ {\hb@xt@\fontdimen2\font
+ {\hss{\color{softwrapicon}\usefont{U}{MdSymbolC}{m}{n}\char"97}\hss}%
+ \hss}%
+ }
+
+\AtBeginDocument {\SetSoftWrapIcon }% ttzfamily déjà fait
+
+\catcode`_ 8
+\makeatother
+
+% everbatim environment
+% =====================
+
+% October 13-14, 2014
+% Verbatim with an \everypar hook, mainly to have background color, followed by
+% execution of the contents (not limited by a group-scope)
+
+\makeatletter
+\catcode`_ 11
+
+\def\everbatimtop {\MacroFont\small }
+\let\everbatimbottom\relax
+\let\everbatimhook\relax
+
+\newif\ifineverb
+
+\def\everbatim {\s@everbatim\@everbatim }
+\@namedef{everbatim*}{\s@everbatim\expandafter\@everbatimx\expandafter
+ {\the\newlinechar}}
+
+\def\everbatimeverypar{\strut
+ {\color{yellow!5}\vrule\@width\linewidth }%
+ \kern-\linewidth
+ \kern\everbatimindent }
+\def\everbatimindent {\z@}
+% voir plus loin atbegindocument
+
+\def\endeverbatim {\if@newlist \leavevmode\fi\endtrivlist }
+\expandafter\let\csname endeverbatim*\endcsname \endeverbatim
+
+\def\s@everbatim {%
+ \ineverbtrue
+ \everbatimtop % put there size changes
+ \topsep \z@skip
+ \partopsep \z@skip
+ \itemsep \z@skip
+ \parsep \z@skip
+ \parskip \z@skip
+ \lineskip \z@skip
+ \let\do\@makeother \dospecials
+ \let\do\do@noligs \verbatim@nolig@list
+ \makestarlowast
+ \everbatimhook
+ \trivlist\item\relax
+ \leftskip \@totalleftmargin
+ \rightskip \z@skip
+ \parindent \z@
+ \parfillskip\@flushglue
+ \parskip \z@skip
+ \@@par
+ \def\par{\leavevmode\null\@@par\pagebreak[1]}%
+ \everypar\expandafter{\the\everypar \unpenalty
+ \everbatimeverypar
+ \everypar \expandafter{\the\everypar\everbatimeverypar}%
+ }%
+ \obeylines \@vobeyspaces
+}
+
+\begingroup
+\lccode`X 13
+\catcode`X \active
+\lccode`Y `* % this is because of \makestarlowast.
+% I have to think whether this is useful: obviously if I were to provide
+% everbatim and everbatim* in a package I wouldn't do that.
+\catcode`Y \active
+\catcode`| 0 \catcode`[ 1 \catcode`] 2 \catcode`* 12
+\catcode`{ 12 \catcode`} 12 |catcode`\\ 12
+|lowercase[|endgroup% both freezes catcodes and converts X to active ^^M
+|def|@everbatim #1X#2\end{everbatim}%
+ [#2|end[everbatim]|everbatimbottom ]
+|def|@everbatimx #1#2X#3\end{everbatimY}]%
+ {#3\end{everbatim*}%
+ \everbatimbottom
+ \newlinechar 13
+ \everbatimxprehook
+ \scantokens {#3}%
+ \newlinechar #1\relax
+ \everbatimxposthook
+}%
+
+% L'espace venant du endofline final mis par \scantokens sera inhibé si #3 se
+% termine par un % ou un \x, etc...
+
+\def\everbatimxprehook {\colorlet{everbsavedcolor}{.}\color[named]{OrangeRed}}
+\def\everbatimxposthook {\color{everbsavedcolor}}
+\ifpdf
+ \def\everbatimxprehook
+ {\pdfcolorstack\@pdfcolorstack push{0 1 0.5 0 k 0 1 0.5 0 K}\relax}
+ \def\everbatimxposthook
+ {\pdfcolorstack\@pdfcolorstack pop\relax}
+\else
+\ifxetex
+ \def\everbatimxprehook {\special{color push cmyk 0 1 0.5 0}}
+ \def\everbatimxposthook {\special{color pop}}
+\else
+\ifnum\Withdvipdfmx=1
+ \def\everbatimxprehook {\special{pdf:bcolor OrangeRed}}
+ \def\everbatimxposthook {\special{pdf:ecolor}}
+\fi\fi\fi
+
+
+
+% \everb
+% ======
+%
+% Original was called \dverb and I did it in June 2013.
+% Then after doing everbatim, I transformed \dverb, now called \everb
+% for itself being as compatible as standard verbatim with list making
+% surrounding environments.
+% Supposed to be used as
+% \everb|@ this will be ignored
+% stuff
+% escape character: "
+% | not necessarily starting a line.
+% I chose @ as comment character, mainly for pretty-formatting of the
+% source, this can be changed by \everbhook.
+
+% " comme caractère d'échappement. Par exemple pour colorier des parties.
+\def\restoreeverbhook{\def\everbhook{%
+ \def\"{\begingroup\catcode123 1 \catcode 125 2 \everbescape }%
+ \catcode`\" 0 \catcode`\@ 14
+}}\restoreeverbhook
+
+\def\everbescape #1;!{#1\endgroup }
+
+\def\everb {%
+ \bgroup
+ \let\everbatimhook\everbhook
+ \s@everbatim
+ \@everb
+}
+
+\def\@everb #1{\catcode`#1\active
+ \lccode`\~`#1%
+ \lowercase{\def~{\if@newlist \leavevmode\fi
+ \endtrivlist
+ \egroup
+ \@doendpe
+ \everbatimbottom }}%
+ }%
+
+\catcode`_8
+\makeatother
+
+
+% \printnumber
+% ============
+
+\catcode`_ 11
+\makeatletter
+\catcode`& 3
+\def\allowsplits_a {\futurelet\printnumber_token\allowsplits_b }%
+\def\allowsplits_b{\ifx\printnumber_token\@sptoken\space\fi\allowsplits_c }
+\def\allowsplits_c #1{\ifx &#1\xint_dothis\xint_gobble_i\fi
+ \if ,#1\xint_dothis {\discretionary{\rlap,}{}{,}}\fi
+ \xint_orthat{\discretionary
+ {\copy\SoftWrapIcon}%
+ {}%
+ {}#1}\allowsplits_a }%
+
+\def\printnumber #1{\expandafter\allowsplits_a \romannumeral-`0#1&}%
+\hyphenpenalty \z@
+
+\catcode`& 4
+\makeatother
+\catcode`_ 8
+
+% Parameters for lists
+% ====================
+\AtBeginDocument{%
+ \leftmargini \dimexpr4\fontcharwd\font`X\relax
+ \leftmarginii\dimexpr3\fontcharwd\font`X\relax
+ \leftmarginiii \leftmarginii
+ \leftmarginiv \leftmarginii
+ \parindent\dimexpr2\fontcharwd\font`X\relax
+ \leftmargin\leftmargini % pourquoi pas 0?
+% formerly everbatim indent was set to leftmargingi, reduce it (2017/08/26)
+% \edef\everbatimindent{\the\dimexpr\leftmargini\relax\space }%
+% setting it to \parindent does not work with \everb construct
+% \def\everbatimindent{\parindent}%
+ \edef\everbatimindent{\the\dimexpr2\fontcharwd\font`X\relax\space}%
+ \cftsubsecnumwidth 2\leftmarginii
+ \cftsubsubsecnumwidth 2\leftmargini
+ \cftsubsecindent 0pt
+ \cftsubsubsecindent \cftsubsecnumwidth
+}%
+
+% ==========
+% Hyperlinks
+% ==========
+
+% \csa, \csbxint, \csh etc...
+% ===========================
+
+% These definitions in force both in manual and implementation part
+\DeclareRobustCommand\csa[1]
+ {{\ttzfamily\char92\endlinechar-1
+ \makestarlowast \catcode`_ 12 \catcode`^ 12
+ \scantokens\expandafter{\detokenize{#1}}}}
+
+% csan: n means no backslash
+\DeclareRobustCommand\csan[1]
+ {{\ttzfamily\endlinechar-1
+ \makestarlowast \catcode`_ 12 \catcode`^ 12
+ \scantokens\expandafter{\detokenize{#1}}}}
+
+\newcommand\csh[1]
+ {\texorpdfstring{\csa{#1}}{\textbackslash\detokenize{#1}}}
+\newcommand\cshn[1]
+ {\texorpdfstring{\csan{#1}}{\detokenize{#1}}}
+% \csh and \cshn will be redefined in implementation section
+\let\cshnolabel\csh
+\let\cshnnolabel\cshn
+
+% These definitions will be re-done for implementation part
+% Don't bother about underscore and caret for time being.
+\DeclareRobustCommand\csb [1]
+ {\hyperref[\detokenize{#1}]%
+ {{\char92 \endlinechar-1 \makestarlowast
+ \scantokens\expandafter{\detokenize{#1}}}}}
+\DeclareRobustCommand\csbxint [1]
+ {\hyperref[\detokenize{xint#1}]%
+ {{\char92\mbox{xint}\-\endlinechar-1 \makestarlowast
+ \scantokens\expandafter{\detokenize{#1}}}}}
+
+% \func, \funcdesc, \keyword, \keyworddesc, \prec, \precdesc
+% ==========================================================
+
+\newcommand\func[1]{\hyperlink{\detokenize{func-#1}}{#1}()}
+\newcommand\funcdesc[2][x]{\item[#2({#1})]\hypertarget{\detokenize{func-#2}}{}}%
+
+\newcommand\keyword[1]{\hyperlink{\detokenize{kwd-#1}}{#1}}
+\newcommand\keyworddesc[1]{\item[#1]\hypertarget{\detokenize{kwd-#1}}{}}%
+
+\let\prec\relax % sinon, c'est \mathchar"321E
+\newcommand\prec[1]{\hyperlink{\detokenize{prec-#1}}{#1}}
+\newcommand\precdesc[1]{\item[$#1$]\hypertarget{\detokenize{prec-$#1$}}{}}%
+
+\newcommand\var[1]{\hyperlink{\detokenize{var-#1}}{#1}}
+\newcommand\vardesc[1]{\item[#1]\hypertarget{\detokenize{var-#1}}{}}%
+
+% \xintname, \xintnameimp etc...
+% ==============================
+
+
+\xintForpair #1#2 in
+{(xintkernel,kernel),
+ (xinttools,tools),
+ (xintcore,core),(xint,xint),(xintbinhex,binhex),(xintgcd,gcd),%
+ (xintfrac,frac),(xintseries,series),(xintcfrac,cfrac),(xintexpr,expr),%
+ (xinttrig, trig), (xintlog, log)}
+\do
+{%
+ \expandafter\def\csname #1name\endcsname
+ {\texorpdfstring
+ {\hyperref[sec:#2]%
+ {\relax{\color{joli}\MakeNameUp{#1}}}}%
+ {#1}%
+ \xspace }%
+ \expandafter\def\csname #1nameimp\endcsname
+ {\texorpdfstring
+ {\hyperref[sec:#2imp]%
+ {\relax{\color{blue}\MakeNameUp{#1}}}}%
+ {#1}%
+ \xspace }%
+}%
+
+ \def\DOCxintfrontpage
+ {\texorpdfstring
+ {\hyperref[frontpage]{\relax{\color{joli}TOC}}}%
+ {TOC}%
+ \xspace }%
+
+\makeatletter
+\protected\def\MakeNameUp#1{%
+ \ifcsname #1nameUp\endcsname
+ \expandafter\@firstoftwo\else
+ \expandafter\@secondoftwo
+ \fi
+ {\fbox{\textup{#1}}}{#1}}
+\makeatother
+
+% \RaisedLabel
+% ============
+
+% Samedi 16 juin 2018 à 15:23:22
+% trick to see header of target page
+% there is probably better way to use the already in place
+% anchor from \section, but no time to go into hyperref source
+\newcommand\RaisedLabel[2][6]{%
+\vspace*{-#1\baselineskip}%
+\begingroup
+ \let\leavevmode\relax\phantomsection
+ \label{#2}%
+\endgroup
+\vspace*{#1\baselineskip}%
+}
+
+% begin{document}
+% ===============
+% \ttzfamily done at begin document
+
+\begin{document}\thispagestyle{empty}
+\pdfbookmark[1]{Title page}{TOP}
+
+{%
+\normalfont\Large\parindent0pt \parfillskip 0pt\relax
+ \leftskip 2cm plus 1fil \rightskip 2cm plus 1fil
+\ifnum\dosourcexint=1
+ The \xintnameimp source code\par
+ \gdef\DOCxintfrontpage
+ {\texorpdfstring
+ {\hyperref[frontpage]{\relax{\color{blue}TOC}}}%
+ {TOC}%
+ \xspace }%
+\else
+ The \xintname bundle\par
+\fi
+\RaisedLabel{frontpage}
+}
+
+{\centering
+ \textsc{Jean-Fran\c cois Burnol}\par
+ \footnotesize
+ jfbu (at) free (dot) fr\par
+ Package version: \xintbndlversion\ (\xintbndldate);
+ documentation date: \xintdocdate.\par
+ {From source file \texttt{xint.dtx}. \xintdtxtimestamp.}\par
+}
+
+\medskip
+% Vendredi 15 juin 2018
+% Someone makes the comma active (not me! not sure if doc.sty or KOMA) and
+% this derails xspace.sty, in the headers, as it uses \scantokens on a list of
+% tokens, so it fails to recognize the commas which of course are of catcode12
+\def\xintRunningHeader{{\catcode`,12\relax
+ \DOCxintfrontpage,
+ \xintkernelname,
+ \xintcorename,
+ \xintname,
+ \xintfracname,
+ \xintexprname, \xinttrigname, \xintlogname,
+ \xintbinhexname,
+ \xintgcdname,
+ \xintseriesname,
+ \xintcfracname,
+ \xinttoolsname}}
+\markboth{\makebox[0pt]{\xintRunningHeader}}{\makebox[0pt]{\xintRunningHeader}}
+
+% Skips safely.
+\ifnum\dosourcexint=1
+\catcode`+ 0 \catcode0 9 % n'importe quoi sauf 15 (car ^^@)
+\catcode`\\ 12
++expandafter+iffalse+fi
+\fi
+%
+
+\newcommand\TeXnote{\par\smallskip\textbf{\TeX hackers note: }}
+
+\etocsetlevel{toctobookmark}{6}
+
+
+
+\etocsetlevel{table}{2}% subsection
+
+\renewcommand*{\etocbelowtocskip}{0pt}
+\renewcommand*{\etocinnertopsep}{0pt}
+\renewcommand*{\etoctoclineleaders}
+ {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}}
+\etocmulticolstyle [1]{%
+ \phantomsection\section* {Contents}
+ \etoctoccontentsline*{toctobookmark}{Contents}{1}%
+}
+
+\etocsettagdepth {description}{subsection}
+\etocsettagdepth {macros}{none}
+\etocsettagdepth {implementation}{none}
+
+\etocsettocdepth{subsection}
+\tableofcontents
+
+\renewcommand*\etocabovetocskip{\bigskipamount}
+\makeatletter
+\etocmulticolstyle [2]{\parskip\z@skip\raggedcolumns
+ \setlength{\columnsep}{\leftmarginii}%
+ \setlength{\columnseprule}{0pt}%
+}%
+\makeatother
+ \etocsettagdepth {description}{none}
+ \etocsettagdepth {macros} {section}
+\ifnum\NoSourceCode=1
+ \etocsettagdepth {implementation}{none}
+\else
+ \etocsettagdepth {implementation}{section}
+\fi
+
+\tableofcontents
+
+
+\etocignoredepthtags
+
+\etocmulticolstyle [1]{%
+ \phantomsection% \section* {Contents}
+ \etoctoccontentsline*{toctobookmark}{Contents}{2}%
+}
+
+\inmanualmaintocfalse
+
+\clearpage
+
+% ----
+% Fibonacci code
+% December 7, 2013. Expandably computing a big Fibonacci number
+% with the help of TeX+\numexpr+\xintexpr, (c) Jean-François Burnol
+\catcode`_ 11
+%
+% ajouté 7 janvier 2014 au xint.dtx pour 1.07j.
+%
+% Le 17 janvier je me décide de simplifier l'algorithme car l'original ne tenait
+% pas compte de la relation toujours vraie A=B+C dans les matrices symétriques
+% utilisées en sous-main [[A,B],[B,C]].
+%
+% la version ici est celle avec les * omis: car multiplication tacite devant les
+% sous-expressions depuis 1.09j, et aussi devant les parenthèses depuis 1.09k.
+\def\Fibonacci #1{%
+ \expandafter\Fibonacci_a\expandafter
+ {\the\numexpr #1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 0\relax}}
+%
+\def\Fibonacci_a #1{%
+ \ifcase #1
+ \expandafter\Fibonacci_end_i
+ \or
+ \expandafter\Fibonacci_end_ii
+ \else
+ \ifodd #1
+ \expandafter\expandafter\expandafter\Fibonacci_b_ii
+ \else
+ \expandafter\expandafter\expandafter\Fibonacci_b_i
+ \fi
+ \fi {#1}%
+}%
+\def\Fibonacci_b_i #1#2#3{\expandafter\Fibonacci_a\expandafter
+ {\the\numexpr #1/2\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro (2#2-#3)#3\relax}%
+}% end of Fibonacci_b_i
+\def\Fibonacci_b_ii #1#2#3#4#5{\expandafter\Fibonacci_a\expandafter
+ {\the\numexpr (#1-1)/2\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro (2#2-#3)#3\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}%
+}% end of Fibonacci_b_ii
+\def\Fibonacci_end_i #1#2#3#4#5{\xintthe#5}
+\def\Fibonacci_end_ii #1#2#3#4#5{\xinttheiiexpr #2#5+#3(#4-#5)\relax}
+\catcode`_ 8
+
+\def\Fibo #1.{\Fibonacci {#1}}
+
+\def\specialprintone #1%
+{%
+ \ifx #1\relax \else \makebox[877496sp]{#1}\hskip 0pt plus 2sp\relax
+ \expandafter\specialprintone\fi
+}%
+\def\specialprintnumber #1% first ``fully'' expands its argument.
+{\expandafter\specialprintone \romannumeral-`0#1\relax }%
+
+\AddToShipoutPicture*{%
+ \put(10.5cm,14.85cm)
+ {\makebox(0,0)
+ {\resizebox{17cm}{!}{\vbox
+ {\hsize 8cm\Huge\baselineskip.8\baselineskip\color{black!10}%
+ \specialprintnumber{F(1250)=}%
+ \specialprintnumber{\Fibonacci{1250}}}\par}%
+ }%
+ }%
+}
+
+
+\pdfbookmark[1]{Dependency graph}{DependencyGraph}
+
+
+
+
+\tikzstyle{block} = [rectangle, draw,
+ fill=yellow!10,
+% fill opacity=0.5,
+ draw=black!30,
+ line width=2pt,
+ text width=6em, text centered, rounded corners, minimum height=4em]
+\tikzstyle{line} = [draw, line width=1pt, color=black!30]
+
+\vspace*{\stretch{0.3333}}
+
+\begin{figure}[ht!]
+ \phantomsection\label{dependencygraph}
+\centeredline{%
+\begin{tikzpicture}[node distance = 2.5cm]
+ % Place nodes
+ \node [block] (kernel) {\xintkernelname};
+ \node [left of=kernel] (A) {};
+ \node [right of=kernel] (B) {};
+ \node [block, below right of=B] (core) {\xintcorename};
+ \node [block, below left of=A] (tools) {\xinttoolsname};
+ \node [block, right of=core, xshift=1cm] (bnumexpr) {\href{http://www.ctan.org/pkg/bnumexpr}{bnumexpr}};
+ \node [block, below of=core] (xint) {\xintname};
+ \node [block, left of=xint, xshift=-.5cm] (gcd) {\xintgcdname};
+ \node [block, left of=gcd] (binhex) {\xintbinhexname};
+ \node [block, below of=xint] (frac) {\xintfracname};
+ \node [block, below of=frac, yshift=-.5cm] (expr) {\xintexprname};
+ \node [block, below right of=expr, yshift=-.5cm, xshift=2.25cm] (polexpr) {\href{http://www.ctan.org/pkg/polexpr}{polexpr}};
+ \node [block, below of=expr, yshift=-.5cm] (trig) {\xinttrigname};
+ \node [block, left of=trig] (log) {\xintlogname};
+ \node [block, below right of=frac, xshift=1cm] (series) {\xintseriesname};
+ \node [block, right of=series] (cfrac) {\xintcfracname};
+ % Draw edges
+ \path [line,-{Stealth[length=5mm]}] (kernel) -- (core);
+ \path [line,-{Stealth[length=5mm]}] (kernel) -- (tools);
+ \path [line,-{Stealth[length=5mm]}] (core) -- (bnumexpr);
+ \path [line,-{Stealth[length=5mm]}] (core) to [out=180,in=90] (gcd.north);
+ \path [line,-{Stealth[length=5mm]}] (kernel) -- (binhex);
+ \path [line,-{Stealth[length=5mm]}] (core) -- (xint);
+ \path [line,-{Stealth[length=5mm]}] (xint) -- (frac);
+ \path [line,-{Stealth[length=5mm]}] (frac) -- (expr);
+ \path [line,-{Stealth[length=5mm]}] (expr) -- (polexpr);
+ \path [line,{Stealth[length=5mm]}-{Stealth[length=5mm]}] (expr) -- (trig);
+ \path [line,{Stealth[length=5mm]}-{Stealth[length=5mm]}] (expr) -- (log);
+ \path [line,-{Stealth[length=5mm]}] (expr) -- (polexpr);
+ \path [line,-{Stealth[length=5mm]}] (frac) to [out=0,in=90] (series.north);
+ \path [line,-{Stealth[length=5mm]}] (frac) to [out=0,in=90] (cfrac.north);
+ \path [line,dashed,-{Stealth[length=5mm]}] (binhex.south) -- (expr);
+% at 1.3d gcd() and lcm() needs no support from xintgcd
+% \path [line,dashed,-{Stealth[length=5mm]}] (gcd.south) -- (expr);
+ \path [line,dashed,-{Stealth[length=5mm]}] (tools) to [out=0, in=90]
+ (gcd.north);% je dois positionner mieux mais pas le temps de lire 700 pages
+ \path [line,dashed,-{Stealth[length=5mm]}] (tools.south west) to [out=270, in=225]
+ (cfrac.south west);% je dois positionner mieux mais pas le temps de lire 700 pages
+ \path [line,-{Stealth[length=5mm]}] (tools) to [out=270,in=180] (expr);
+ \end{tikzpicture}}\bigskip
+\end{figure}
+
+\vspace{2\baselineskip}
+
+\begin{addmargin}{2cm}
+\normalfont\footnotesize Dependency graph for the
+ \xintname bundle components: modules pointed to by arrows \textbf{automatically}
+ import the modules originating the continuous line ended by an arrow.
+ Dashed lines
+ indicate a partial dependency, and to enable the corresponding
+ functionalities of the lower module it is thus necessary to use
+ a suitable |\usepackage| (\LaTeX) or |\input| (Plain \TeX.)\par
+
+ \href{http://ctan.org/pkg/bnumexpr}{bnumexpr} is a
+ separate (\LaTeX{} only) package by the author which uses (by default)
+ \xintcorename as its mathematical engine.
+
+ \href{http://ctan.org/pkg/polexpr}{polexpr} is a
+ separate (\LaTeX{} only) package by the author which requires \xintexprname.
+
+ \xinttrigname and \xintlogname are loaded automatically by \xintexprname; they
+ will refuse to be loaded directly (but see \csbxint{reloadxinttrig}).
+\par
+\end{addmargin}
+
+\vfill
+
+\clearpage
+
+\etocdepthtag.toc {description}
+
+\section{Read this first}\RaisedLabel{sec:quickintro}
+
+This section provides recommended reading on first discovering the package.
+
+This is release \expandafter|\xintbndlversion|.
+\begin{enumerate}
+\item \func{log}, \func{exp}, \func{log10}, \func{pow10}, \func{pow} are implemented via
+ \href{http://ctan.org/pkg/poormanlog}{poormanlog}: this achieves only \dtt{8} or \dtt{9}
+ digits of precision.... This situation is provisory, I simply was lacking
+ the time. See \xintlogname.
+\item \func{sin}, \func{cos}, ..., \func{asin}, ... are implemented (using
+ high level user interface), up to about \dtt{60} digits of
+ precision, see \xinttrigname.
+\item |NaN|, |+Infty|, |-Infty|, etc... and a proper internal data structure
+ for storing floating point numbers are \emph{yet to be implemented}.
+\item \xintname can handle numbers with thousands of digits, but execution
+ times (and
+ \hyperref[ssec:memory]{memory considerations}) limit the practical range to
+ perhaps up to a few hundreds digits.
+\item Attention that exact operations with fractions do not reduce to lowest
+ terms (additions and subtractions use |l.c.m.| of denominators), see
+ \func{reduce}.
+\end{enumerate}
+
+
+
+
+\begin{addmargin}{1cm}
+\makeatletter
+\renewenvironment{description}
+ {\list{}{\topsep\baselineskip\partopsep\z@skip
+ \parsep\z@ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+ {\endlist}
+\makeatother
+
+%\noindent\null\par\kern-\baselineskip
+\leavevmode
+
+\begin{description}
+\item[\xinttoolsname] provides utilities of independent interest such as
+ expandable and non-expandable loops. \xintgcdname and \xintcfracname have a
+ partial dependency on it but it must be required by user explicitely.
+ \xintexprname loads it automatically.
+
+\item[\xintcorename] provides expandable macros implementing addition,
+ subtraction, multiplication, division, and power with arbitrarily long
+ numbers. It is loaded automatically by \xintname, and also by \LaTeX\
+ package \href{http://ctan.org/pkg/bnumexpr}{bnumexpr} in its default
+ configuration.
+
+\item[\xintname] extends \xintcorename with additional operations on big
+ integers. It loads automatically \xintcorename.
+
+\item[\xintfracname] extends the scope of \xintname to decimal numbers, to
+ numbers in scientific notation and also to fractions with arbitrarily
+ long such numerators and denominators separated by a forward slash. It loads
+ automatically \xintname.
+
+\item[\xintexprname] extends \xintfracname with expandable parsers doing
+ algebra (either exact, float, or limited to big integers) on comma separated
+ expressions using the standard infix notations and parentheses (or sub
+ \xintexprname-essions). It implements tacit multiplication, functions with
+ one or multiple arguments, Python-like slicing of lists, user-definable
+ variables and user-definable functions, boolean two way or three way
+ branching. Dummy variables can be used for summing or multiplying an
+ expression over a range, or for more complicated iterative evaluations
+ allowing \keyword{omit}, \keyword{abort},
+ and \keyword{break} keywords. It loads automatically
+ \xintfracname (hence \xintname and \xintcorename) and \xinttoolsname.
+ And \xinttrigname and \xintlogname since |1.3e|.
+
+\item[\xinttrigname] trigonometrical functions for \xintexprname,
+ automatically loaded\NewWith{1.3e} by it, can not be used separately.
+
+\item[\xintlogname] logarithm, exponential, power functions for \xintexprname,
+ automatically loaded\NewWith{1.3e} by it, can not be used separately.
+\end{description}
+
+
+Further modules:
+
+\begin{description}
+\item[\xintbinhexname] is for conversions to and from binary and
+ hexadecimal bases. Support in \xintexprname of the \TeX\ |"| prefix for
+ hexadecimal inputs requires this module to be loaded by user.
+
+\item[\xintgcdname] implements the Euclidean algorithm and its typesetting.
+ The macro \csbxint{Irr} (hence the \xintexprname function \func{reduce}) is
+ provided independently in \xintfracname. Also the \xintexprname functions
+ \func{gcd} and \func{lcm} are implemented directly so loading this
+ module is not needed for them (since |1.3d|).
+
+\item[\xintseriesname] provides some basic functionality for computing in an
+ expandable manner partial sums of series and power series with fractional
+ coefficients.
+
+\item[\xintcfracname] is provided to help with the computation and display of
+ continued fractions.
+\end{description}
+\end{addmargin}
+
+\begin{framed}
+All macros from the \xintname packages doing computations are
+\emph{expandable}, and naturally also the parsers provided by \xintexprname.
+
+ The reasonable range of use of the package arithmetics is with numbers of
+ \emph{up to a few hundred digits.}
+ Although numbers up to about \dtt{19950} digits are acceptable
+ inputs, the package is not at his peak efficiency when confronted with such
+ really big numbers having thousands of digits.\footnotemark
+\end{framed}
+
+\footnotetext{The maximal handled size for inputs to multiplication is
+ \dtt{19959} digits. This limit is observed with the current default values
+ of some parameters of the tex executable (input stack size at 5000,
+ maximal expansion depth at 10000). Nesting of macros will reduce it and it
+ is best to restrain numbers to at most \dtt{19900} digits. The output, as
+ naturally is the case with multiplication, may exceed the bound.}
+
+
+
+\subsection{First examples}
+
+With |\usepackage{xintexpr}| if using \LaTeX, or |\input xintexpr.sty\relax|
+for other formats, you can do computations such as the following.
+\begin{description}
+\item[with floats:]\leavevmode\par
+\begin{everbatim*}
+\xintfloateval{3.25^100/3.2^100, 2^1000000, sqrt(1000!)}\newline
+\xintfloateval{[-1] sind(37), cosd(37)}\newline % trim off last digit (via rounding)
+\xintfloateval{[8] log10(12345678), pow10(0.1234)}\newline % only 8 or 9 digits!
+\xintfloateval{[8] pow(2,1/3)}\newline % only 8 or 9 digits!
+\xintfloateval{[8] log(10), exp(1)}\par % only 8 or 9 digits!
+\end{everbatim*}
+ The \csbxint{floateval} macro using braces was introduced at |1.3d|.
+ Formerly, one did:
+\begin{everbatim}
+\thexintfloatexpr 10^-3.5\relax\ or rather \xintthefloatexpr 10^-3.5\relax
+\end{everbatim}
+Most of the manual is couched using the \csbxint{theexpr}|...\relax|
+which is the original one from first release of \xintexprname.
+
+ For powers with fractional exponents, see \hyperref[ssec:poormanloghack]{poormanloghack}.
+\item[with fractions:]\leavevmode\par
+Here is an example using a dummy a variable:
+\begin{everbatim*}
+$\sum_{i=1}^{25} (-1)^{i-1}\frac{1}{i^2} =
+ \xintFrac{\xinteval{reduce(add((-1)^(i-1)/i**2, i=1..25))}}$
+\end{everbatim*}
+\item[with integers:]\leavevmode\par
+\begin{everbatim*}
+\xintiieval{3^159+2^234}\newline
+\xintiieval{lcm(seq(n, n=100..110))}\par
+\end{everbatim*}
+\end{description}
+
+Float computations are done by default with \dtt{16} digits of precision.
+This can be changed via an assignment to |\xintDigits|:
+\begin{everbatim*}
+% use braces (or a LaTeX environment) to limit the scope of the \xintDigits assignment
+{\xintDigits := 88;\xintfloateval{3.25^100-3.2^100}}\par
+\end{everbatim*}
+Trigonometrical function need a reload after modifying the float precision,
+this is done by \csbxint{reloadxinttrig}.
+
+We can even try daring things:\footnote{The \cs{printnumber} is not part of
+ the package, see \autoref{ssec:printnumber}.}
+\begin{everbatim*}
+{\xintDigits:=500;\printnumber{\xintfloateval{sqrt(2)}}}
+\end{everbatim*}
+
+All operations executed by the parsers are based on underlying macros from
+packages \xintfracname and \xintname which are loaded automatically by
+\xintexprname. With \xintbinhexname loaded the
+parsers can handle hexadecimal notation on (even fractional) input.
+
+All macros doing computations ultimately rely on (and reduce to) the
+|\numexpr| primitive from \eTeX{}. These \eTeX{} extensions date back to 1999
+and are by default incorporated into the |pdftex| etc... executables from
+major modern \TeX{} installations since more than ten years now. Only the
+|tex| binary does not benefit from them, as it has to remain the original
+\textsc{D.~Knuth}'s software, but one can then use |etex| on the command line.
+PDF\TeX\ (in pdf or dvi output mode), Lua\TeX, Xe\TeX\ all include the \eTeX\
+extensions.
+
+\subsection{Quick overview (expressions with \xintexprname)}
+
+This section gives a first few examples of using the expression parsers which
+are provided by package \xintexprname. See \autoref{sec:xintexprsyntax} for
+a more detailed description, and perhaps read \autoref{ssec:threeparsers}
+before coming back here.
+
+Loading \xintexprname automatically also
+loads packages \xinttoolsname and \xintfracname. The latter loads \xintname
+which loads \xintcorename. All three provide the macros which ultimately do the
+computations associated in expressions with the various symbols like |+, *, ^,
+!| and functions such as |max, sqrt, gcd|. The package
+\xinttoolsname does not handle computations but provides some useful utilities.
+
+\begin{framed}
+ Release |1.2h| defines |\thexintexpr| as synonym to |\xinttheexpr|,
+ |\thexintfloatexpr| as synonym of |\xintthefloatexpr|, etc...
+\end{framed}
+
+\begin{framed}
+ Release |1.3d| defines \csbxint{eval}, \csbxint{ieval}, \csbxint{iieval},
+ \NewWithf{1.3d}
+ and \csbxint{floateval} which use braces to delimit their arguments, which
+ will be more familiar to \LaTeX\ users than the \csbxint{theexpr}|...\relax|
+ syntax. For example:
+\begin{everbatim*}
+\xinteval{1+2+3}, \xintfloateval{111/123}, \xintfloateval{[3] 111/123}
+\end{everbatim*}
+
+ This documentation however uses systematically |\xinttheexpr...\relax| or
+ |\thexintexpr...\relax| syntax for legacy reasons. In this input syntax the
+ |\relax| does not have to be physically present it may arise from pure
+ expansion (see \autoref{sec:expr}).
+
+ Notice that for the \csbxint{theiexpr} and \csbxint{thefloatexpr} parsers
+ which admit an optional argument, this optional argument will have to be
+ located \emph{inside} the braces when using |\xintieval| or |\xintfloateval|
+ input syntax, as examplified above.
+
+ The main reason is that it is sometimes useful to hide the square brackets, for
+ example when using the |\num| macro from package
+ \href{http://ctan.org/pkg/siunitx}{siunitx}.
+\end{framed}
+
+\begin{framed}
+ The square root extraction \func{sqrt} is allowed in |\xintexpr..\relax| but
+ naturally can't return an \emph{exact} value, it computes as if it was in
+ |\xintfloatexpr..\relax|.
+
+ The synonymous power operators |^| and |**| allow only integral exponents
+ (non-negative in the integer only parser \csbxint{iiexpr}) in \csbxint{expr}
+ and half-integral exponents in \csbxint{floatexpr}. Since |1.3e| fractional
+ powers via the \func{pow} function are available, see
+ \xintlogname.\NewWithf{1.3e} But they achieve currently only about \dtt{8}
+ digits of precision.
+\end{framed}
+
+Here is a (partial) list of the recognized symbols:
+\begin{itemize}
+\item the comma (to separate distinct computations or arguments to a
+ function),
+\item parentheses,
+\item \hyperref[tab:precedences]{operators}:
+ \begin{itemize}[nosep]
+\item |+|, |-|, |*|, |/|,
+\item powers via |^| or equivalently |**|, see \xintlogname for allowing with
+ them fractional exponents,
+\item |//| for floored division and |/:| its associated modulo,
+\item branching via |(x)?{x non zero}{x zero}| and |(x)??{x<0}{x=0}{x>0}|
+ syntax,
+\item boolean logic |!|, |&&| or |'and'|, \verb+||+ or |'or'|,
+\item comparison operators |=| (or |==|), |<|, |>|, |<=|, |>=|, |!=|,
+\item factorial via the post-fix operator |!|.
+ \end{itemize}
+\item the |"| is used to prefix hexadecimal input (uppercase, not lowercase);
+ but package \xintbinhexname must be loaded additionally to \xintexprname),
+%\item |'| for octal input (\emph{not yet}),
+\item various \hyperref[tab:functions]{functions}:
+ \begin{itemize}[nosep]
+ \item rounding and truncating \func{round}, \func{trunc} to a given fixed
+ point precision or with \func{float} to a given floating point precision,
+ \item the square-root \func{sqrt} achieves correct rounding in arbitrary
+ precision,
+ \item the \func{binomial} and (also partial) \func{factorial},
+ \item \func{gcd} and \func{lcm} for general fractional operands,
+ \item randomness related functions such as \func{random} and
+ \func{randrange} for random floats or integers; they require that \TeX\
+ engine provides \csa{pdfuniformdeviate} or \csa{uniformdeviate} primitive,
+ \item trigonometrical functions \xinttrigname,
+ \item logarithm and exponential \xintlogname.
+ \end{itemize}
+\item the capacity to work with dummy variables using functions or generators
+ such as \xintFor #1 in {add, mul, seq, subs, rseq, iter, rrseq, iterr}\do
+ {\func{#1}\xintifForLast{.}{, }}
+\end{itemize}
+See \autoref{xintexpr} for basic information and \autoref{sec:xintexprsyntax}
+for a complete description.
+
+
+The normal mode of operation of the parsers is to unveil the parsed material
+token by token. This means (apart from some exceptions) that all tokens may
+arise from expansion of encountered macros (or active characters). For example
+a closing parenthesis does not have to be immediately visible, it may arise
+later from expansion.
+
+However, this general behaviour has exceptions, in particular constructs with
+dummy variables need at some location immediately visible balanced parentheses
+and commas.
+
+The expansion stops only when the ending |\relax| has been found;
+it is then removed from the token stream, and the final computation result is
+inserted.
+
+Here is an example of a computation:
+\begin{everbatim*}
+\xinttheexpr (31.567^2 - 21.56*52)^3/13.52^5\relax
+\end{everbatim*}\newline
+This illustrates that
+|\xinttheexpr..\relax| does its computations \emph{exactly}. The same example
+as a floating point evaluation:
+\begin{everbatim*}
+\xintthefloatexpr (31.567^2 - 21.56*52)^3/13.52^5\relax
+\end{everbatim*}
+
+Again, all computations done by |\xinttheexpr..\relax| are completely exact.
+Thus, very quickly very big numbers are created (and computation times
+increase, not to say explode if one goes into handling numbers with thousands
+of digits). To compute something like |1.23456789^10000| it is thus better to
+opt for the floating point version:
+\begin{everbatim*}
+\xintthefloatexpr 1.23456789^10000\relax
+\end{everbatim*}
+\newline
+(we can deduce that the exact value has |80000+916=80916| digits).
+A bigger example (the scope of
+the assignment to |\xintDigits| is limited by the braces):
+\begin{everbatim*}
+{\xintDigits:=24; \xintthefloatexpr 1.23456789123456789^123456789\relax }
+\end{everbatim*}
+(<- notice the size of the power of ten: this surely largely exceeds your pocket
+calculator abilities).
+
+Some examples with dummy variables:
+\begin{everbatim*}
+\xinttheiiexpr add(i^5, i=100..200)\relax\par
+\noindent\xinttheexpr add(x/(x+1), x = 1000..1014)\relax\par
+\noindent\xinttheexpr reduce(add(x/(x+1), x = 1000..1014))\relax
+\end{everbatim*}
+\newline In this example, the fraction obtained by addition was thus already
+irreducible, but this is not always the case:
+\begin{framed}
+ By default, the basic operations on fractions are not followed in an
+ automatic manner by reduction to smallest terms: |A/B| multiplied by |C/D|
+ returns |AC/BD|, and |A/B| added to |C/D| uses |lcm(B, D)| as denominator.\CHANGEDf{1.3}
+\end{framed}
+
+Make sure to read \autoref{sec:expr}, \autoref{sec:xintexprsyntax} and
+\autoref{ssec:outputs}.
+
+\subsection{Printing big numbers on the page}\label{ssec:printnumber}
+When producing very long numbers there is the question of printing them on
+ the page, without going beyond the page limits. In this document, I have most
+ of the time made use of these macros (not provided by the package:)
+
+%
+\everb|@
+\def\allowsplits #1{\ifx #1\relax \else #1\hskip 0pt plus 1pt\relax
+ \expandafter\allowsplits\fi}%
+\def\printnumber #1{\expandafter\allowsplits \romannumeral-`0#1\relax }%
+% \printnumber thus first ``fully'' expands its argument.
+|
+
+It may be used like this:
+%
+\leftedline{|\printnumber {\xintiiQuo{\xintiiPow {2}{1000}}{\xintiiFac{100}}}|}
+%
+or as |\printnumber\mybiginteger| or |\printnumber{\mybiginteger}| if
+|\mybiginteger| was previously defined via a |\newcommand|, a |\def| or
+an |\edef|.
+
+An alternative is to suitably configure the thousand
+separator with the \href{http://ctan.org/pkg/numprint}{numprint} package
+(see \autoref{fn:np}. This will not allow linebreaks when used in math
+mode; I also tried \href{http://ctan.org/pkg/siunitx}{siunitx} but even
+in text mode could not get it to break numbers accross lines). Recently
+I became aware of the \href{http://ctan.org/pkg/seqsplit}{seqsplit}
+package%
+%
+\footnote{\url{http://ctan.org/pkg/seqsplit}}
+%
+which can be used to achieve this splitting accross lines, and does work
+in inline math mode (however it doesn't allow to separate digits by
+groups of three, for example).\par
+
+\subsection{Randomly chosen examples}
+
+This section is now quite old...
+
+Here are some examples of use of the package macros. The first one uses only
+the base module \xintname, the next one requires the \xintfracname package,
+which deals with decimal numbers, scientific numbers (lowercase \dtt{e}), and
+also fractions (it loads automatically \xintname). Then some examples with
+expressions, which require the \xintexprname package (it loads automatically
+\xintfracname). And finally some examples using \xintseriesname, \xintgcdname
+which are among the extra packages included in the \xintname distribution.
+
+The printing of the outputs will either use a custom |\printnumber| macro as
+described in the previous section, or sometimes the |\np| macro from the
+\href{http://www.ctan.org/pkg/numprint}{numprint} package (see
+\autoref{fn:np}).
+
+\begin{itemize}
+\item {$123456^{99}$: }\\
+|\xintiiPow {123456}{99}|:
+\dtt{\printnumber{\xintiiPow {123456}{99}}}
+
+\item {1234/56789 with 1500 digits after the decimal point: }\\
+|\xintTrunc {1500}{1234/56789}\dots|:
+\dtt{\printnumber {\xintTrunc {1500}{1234/56789}}\dots }
+
+\item {$0.99^{-100}$ with 200 (+1) digits after the decimal point.}\\
+ |\xinttheiexpr [201] .99^-100\relax|:
+ \dtt{\printnumber{\xinttheiexpr [201] .99^-100\relax}}\\
+ Notice that this is rounded, hence we asked |\xinttheiexpr| for one
+ additional digit. To get a truncated result with 200 digits after the decimal
+ mark, we should have issued
+ |\xinttheexpr trunc(.99^-100,200)\relax|, rather.
+
+\begin{snugframed}
+ The fraction |0.99^-100|'s denominator is first evaluated \emph{exactly}
+ (\emph{i.e.} the integer |99^100| is evaluated exactly and then used to
+ divide the suitable power of ten to get the requested digits); for
+ some longer inputs, such as for example |0.7123045678952^-243|, the
+ exact evaluation before truncation would be costly, and it is more efficient
+ to use floating point numbers:
+%
+\leftedline{|\xintDigits:=20;
+ \np{\xintthefloatexpr .7123045678952^-243\relax}|}%
+%
+\leftedline{\xintDigits:=20;\dtt{\np{\xintthefloatexpr .7123045678952^-243\relax }}}
+%
+\xintDigits:=16;%
+%
+Side note: the exponent |-243| didn't have to be put inside parentheses,
+contrarily to what happens with some professional computational
+software. |;-)|
+% 6.342,022,117,488,416,127,3 10^35
+% maple n'aime pas ^-243 il veut les parenthèses, bon et il donne, en Digits
+% = 24: 0.634202211748841612732270 10^36
+\end{snugframed}
+
+\item {$200!$:}\\
+|\xinttheiiexpr 200!\relax|:
+\dtt{\printnumber{\xinttheiiexpr 200!\relax}}
+
+\item {$2000!$ as a float. As \xintexprname does not handle |exp/log| so far,
+ the computation is done internally without the Stirling formula,
+ by repeated multiplications truncated suitably:}\\
+ |\xintDigits:=50;|\newline |\xintthefloatexpr 2000!\relax|:
+ {\xintDigits:=50;\dtt{\printnumber{\xintthefloatexpr 2000!\relax}}}
+
+\item Just to show off (again), let's print 300 digits (after the decimal
+ point) of the decimal expansion of $0.7^{-25}$:%
+%
+\footnote{the |\np| typesetting macro is from the |numprint| package.}
+%
+\begin{everbatim*}
+% % in the preamble:
+% \usepackage[english]{babel}
+% \usepackage[autolanguage,np]{numprint}
+% \npthousandsep{,\hskip 1pt plus .5pt minus .5pt}
+% \usepackage{xintexpr}
+% in the body:
+\np {\xinttheexpr trunc(.7^-25,300)\relax}\dots
+\end{everbatim*}
+
+This computation is with \csbxint{theexpr} from package \xintexprname, which
+allows to use standard infix notations and function names to access the package
+macros, such as here |trunc| which corresponds to the \xintfracname macro
+\csbxint{Trunc}. Regarding this computation, please keep in mind that
+\csbxint{theexpr} computes \emph{exactly} the result before truncating. As
+powers with fractions lead quickly to very big ones, it is good to know that
+\xintexprname also provides \csbxint{thefloatexpr} which does computations
+with floating point numbers.
+
+\item Computation of a Bézout identity with |7^200-3^200| and |2^200-1|:
+(with \xintgcdname)\par
+\begin{everbatim*}
+\xintAssign{\xinttheiiexpr 7^200-3^200\relax}
+ {\xinttheiiexpr 2^200-1\relax}\to\A\B
+\xintAssign\xintBezout{\A}{\B}\to\U\V\D
+\printnumber\U${}\times(7^{200}-3^{200})+{}$\printnumber{\V}%
+${}\times(2^{200}-1)=\D=\xinttheiiexpr \U*\A+\V*\B\relax$
+\end{everbatim*}
+
+\item The Euclide algorithm applied to \np{22206980239027589097} and
+\np{8169486210102119257}: (with \xintgcdname)%
+%
+\footnote {this example is computed tremendously faster than the other
+ ones, but we had to limit the space taken by the output hence picked
+ up rather small big integers as input.}\par
+\noindent\begingroup\parskip0pt\relax
+|\xintTypesetEuclideAlgorithm {22206980239027589097}{8169486210102119257}|\par
+\dtt
+{\xintTypesetEuclideAlgorithm {22206980239027589097}{8169486210102119257}}
+\endgroup
+\smallskip
+
+\item $\sum_{n=1}^{500} (4n^2 - 9)^{-2}$ with each term rounded to twelve digits,
+and the sum to nine digits:
+\begin{everbatim*}
+\def\coeff #1{\xintiRound {12}{1/\xintiiSqr{\the\numexpr 4*#1*#1-9\relax }[0]}}
+\xintRound {9}{\xintiSeries {1}{500}{\coeff}[-12]}
+\end{everbatim*}
+
+The complete series, extended to
+infinity, has value
+$\frac{\pi^2}{144}-\frac1{162}={}$%
+\dtt{\np{0.06236607994583659534684445}\dots}\,%
+%
+\footnote{\label{fn:np}This number is typeset using the
+ \href{http://www.ctan.org/pkg/numprint}{numprint} package, with
+ |\npthousandsep{,\hskip 1pt plus .5pt minus .5pt}|. But the breaking
+ across lines works only in text mode. The number itself was (of
+ course...) computed initially with \xintname, with 30 digits of $\pi$
+ as input. See \hyperref[ssec:Machin]{{how {\xintname} may compute
+ $\pi$ from scratch}}.}
+%
+I also used (this is a lengthier computation
+than the one above) \xintseriesname to evaluate the sum with \np{100000} terms,
+obtaining 16
+correct decimal digits for the complete sum. The
+coefficient macro must be redefined to avoid a |\numexpr| overflow, as
+|\numexpr| inputs must not exceed $2^{31}-1$; my choice
+was:
+\everb|@
+\def\coeff #1%
+{\xintiRound {22}{1/\xintiiSqr{\xintiiMul{\the\numexpr 2*#1-3\relax}
+ {\the\numexpr 2*#1+3\relax}}[0]}}
+|
+
+\restoreMacroFont
+\edef\Temp {\xintFloatPow [24]{2}{999999999}}
+
+\item {Computation of $2^{\np{999999999}}$ with |24| significant
+ figures:}
+%
+\leftedline{|\numprint{\xintFloatPow [24]{2}{999999999}}|}
+\leftedline{\dtt{\numprint{\Temp}}}
+%
+where the \href{http://www.ctan.org/pkg/numprint}{numprint} package was used
+(\autoref{fn:np}), directly in text mode (it can also naturally be used from
+inside math mode). \xintname provides a simple-minded \csbxint{Frac}
+typesetting macro,%
+%
+\footnote{Plain \TeX{} users of \xintname have \csbxint{FwOver}.}
+%
+which is math-mode only:
+%
+\leftedline{|$\xintFrac{\xintFloatPow [24]{2}{999999999}}$|}
+\leftedline{\dtt{$\xintFrac{\Temp}$}}
+%
+The exponent differs, but this is because
+|\xintFrac| does not use a decimal mark in the significand of the output.
+Admittedly most users will have the need of more powerful (and customizable)
+number formatting macros than |\xintFrac|.
+%
+\footnote{There should be a |\xintFloatFrac|, but it is lacking.}
+%
+We have already mentioned
+|\numprint| which is used above, there is also |\num| from package
+\href{http://www.ctan.org/pkg/siunitx}{siunitx}. The raw output from
+%
+\leftedline{\detokenize{\xintFloatPow[24]{2}{999999999}}}
+%
+is $\Temp$.
+
+\edef\x{\xintiiQuo{\xintiiPow {2}{1000}}{\xintiiFac{100}}}
+\edef\y{\xintLen{\x}}
+
+\item As an example of nesting package macros, let us consider the following
+code snippet within a file with filename |myfile.tex|:
+\everb|@
+\newwrite\outstream
+\immediate\openout\outstream \jobname-out\relax
+\immediate\write\outstream {\xintiiQuo{\xintiiPow{2}{1000}}{\xintiiFac{100}}}
+% \immediate\closeout\outstream
+|
+\noindent
+The tex run creates a file |myfile-out.tex|, and then writes to it the
+quotient from the Euclidean division of $2^{1000}$ by $100!$. The number of
+digits is |\xintLen{\xintiiQuo{\xintiiPow{2}{1000}}{\xintiiFac{100}}}| which
+expands (in two steps) and tells us that $[2^{1000}/100!]$ has \dtt{\y}
+digits. This is not so many, let us print them here:
+\dtt{\printnumber\x}.%
+
+\end{itemize}
+
+\subsection {More examples within this document}
+\label{sec:awesome}
+
+\begin{itemize}
+\item The utilities provided by \xinttoolsname (\autoref{sec:tools}), some
+ completely expandable, others not, are of independent interest. Their use
+ is illustrated through various examples: among those, it is shown in
+ \autoref{ssec:quicksort} how to implement in a completely expandable way
+ the \hyperref[ssec:quicksort]{Quick Sort algorithm} and also how to illustrate
+ it graphically. Other examples include some dynamically constructed
+ alignments with automatically computed prime number cells: one using a
+ completely expandable prime test and \csbxint{ApplyUnbraced}
+ (\autoref{ssec:primesI}), another one with \csbxint{For*} (\autoref{ssec:primesIII}).
+
+\item One has also a \hyperref[edefprimes]{computation of primes within an
+ \csa{edef}} (\autoref{xintiloop}), with the help of \csbxint{iloop}.
+ Also with \csbxint{iloop} an
+ \hyperref[ssec:factorizationtable]{automatically generated table of
+ factorizations} (\autoref{ssec:factorizationtable}).
+
+\item The code for the title page fun with Fibonacci numbers is given in
+ \autoref{ssec:fibonacci} with \csbxint{For*} joining the game.
+
+\item The computations of \hyperref[ssec:Machin]{ $\pi$ and $\log 2$}
+ (\autoref{ssec:Machin}) using \xintname and the computation of the
+ \hyperref[ssec:e-convergents]{convergents of $e$} with the further help of
+ the \xintcfracname package are among further examples.
+
+\item Also included,
+ an \hyperlink{BrentSalamin}{expandable implementation of the Brent-Salamin
+ algorithm} for evaluating $\pi$.
+
+\item The \autoref{ssec:PrimesIV} implements expandably the Miller-Rabin
+ pseudo-primality test.
+
+
+\item The functionalities of \xintexprname are illustrated with various
+ other examples, in \autoref{xintdeffunc},
+ \hyperlink{ssec:dummies}{Functions with dummy variables},
+ \autoref{ssec:moredummies} or \hyperref[sssec:recursive]{Recursive definitions}.
+\end{itemize}
+Almost all of the computational results interspersed throughout the
+documentation are not hard-coded in the source file of this document but are
+obtained via the expansion of the package macros during the \TeX{}
+run.%
+%
+
+
+
+
+\subsection{License and installation instructions}
+
+\label{ssec:install}
+
+\xintname is made available under the
+\href{http://www.latex-project.org/lppl/lppl-1-3c.txt}{LaTeX Project Public
+ License 1.3c} and is included in the major \TeX\ distributions, thus there
+is probably no need for a custom install: just use the package manager to
+update if necessary \xintname to the latest version available.
+
+The |README| files on \href{http://www.ctan.org/pkg/xint}{CTAN} explain how to
+proceed with a custom installation.
+
+On \TeX\ distributions with a |"texdoc"| or similar utility,
+\centeredline{|texdoc --list xint|}
+will offer to display one of those files:
+\begin{itemize}[nosep]
+\item |xint.pdf| (this file),
+\item |sourcexint.pdf| (source code),
+\item |README|, |README.pdf|, |README.html|,
+\item |CHANGES.pdf|, and |CHANGES.html|.
+\end{itemize}
+
+% For manual installation, follow the instructions from the |README| file which
+% is to be found on \href{http://www.ctan.org/pkg/xint}{CTAN}; it is also
+% available there in PDF and HTML formats. The simplest method proposed is to
+% use the archive file \href{http://www.ctan.org/pkg/xint}{xint.tds.zip},
+% downloadable from the same location.
+
+% The next simplest one is to make use of the |Makefile|, which is also
+% downloadable from
+% \href{http://mirror.ctan.org/macros/generic/xint}{CTAN}. This is
+% for GNU/Linux systems and Mac OS X, and necessitates use of the command
+% line. If for some reason you have |xint.dtx| but no internet access,
+% you can recreate |Makefile| as a file with this name and the following
+% contents:
+
+% {\def\everbatimindent {0pt }%
+% \begin{everbatim}
+% include Makefile.mk
+% Makefile.mk: xint.dtx ; etex xint.dtx
+% \end{everbatim}}
+
+% Then run |make| in a working repertory where there is |xint.dtx| and the file
+% named |Makefile| and having only the two lines above. The |make| will extract
+% the package files from |xint.dtx| and display some further instructions.
+
+% If you have |xint.dtx|, no internet access and can not use the Makefile
+% method: |etex xint.dtx| extracts all files and among them the |README| as a
+% file with name |README.md|. Further help and options will be found therein.
+
+\subsection {Recent changes}
+
+This is release \expandafter|\xintbndlversion| of \expandafter|\xintbndldate|.
+
+For more information see
+|CHANGES.html|.\centeredline{Internet:
+ \url{http://mirrors.ctan.org/macros/generic/xint/CHANGES.html}}
+
+The formatted source code is available in file |sourcexint.pdf|:
+\centeredline{|texdoc sourcexint|}
+
+\noindent|1.3e| (|2019/04/05|):
+\begin{itemize}[nosep]
+\item An \xinttrigname library is automatically loaded by \xintexprname and
+ provides direct and inverse trigonometrical functions using either degrees
+ or radians (up to \dtt{60} digits). It is for the most part implemented
+ using high level user interface, but will probably get some optimizations in
+ future (and perhaps extension to more digits).
+\item An \xintlogname library is loaded automatically; it uses
+ \href{http://ctan.org/pkg/poormanlog}{poormanlog} to provide logarithms and
+ exponentials. Support for more digits is planned for the future: the
+ \href{http://ctan.org/pkg/poormanlog}{poormanlog} support achieves only
+ about \dtt{8} or \dtt{9} digits of precision. On the other hand the
+ functions are fast.
+ Perhaps we will keep the current functions achieving limited precision under
+ some other names in future (they are amply precise enough for plots).
+\item Under the hood refactoring of \csbxint{NewExpr} related matters for
+ support of user-defined functions; fixed bugs related to functions with no
+ variables. Added \csbxint{defefunc}, \csbxint{deffloatefunc},
+ \csbxint{defiiefunc} and documented the ``protected'' nature of the
+ functions defined by the original variants \csbxint{deffunc} et al. This
+ whole area is complex and to be still considered work in progress.
+\item Breaking change: only the \csbxint{expr}|...\relax| syntax is accepted
+ for sub-expressions when doing function definitions via \csbxint{deffunc}
+ and \csbxint{defefunc} et al. One can \textbf{not} use \csbxint{eval},
+ \csbxint{ieval}, \csbxint{floateval} for sub-evaluations inside such
+ definitions (anyway there are not efficient there because the parser will
+ have to recollect the digits of the value whereas \csbxint{expr} keeps some
+ private internal format).
+\item \func{inv}, \func{ilog10}.
+\item \func{sfloat}, slight modification of behaviour of \func{qfloat}.
+\item \csbxint{ensuredummy}, \csbxint{restorelettervar}.
+\item the optional argument of \csbxint{floatexpr} can be negative, it then
+ tells to round the result to a (rounded) float with a precision equal to
+ \csbxint{theDigits} diminished by this argument.
+\end{itemize}
+
+\noindent|1.3d| (|2019/01/06|):
+\begin{itemize}[nosep]
+\item \func{gcd} and \func{lcm} in \csbxint{expr}|...\relax| now handle
+ general arguments, without converting them to integers,
+\item It is not needed anymore to load package \xintgcdname to benefit from
+ \func{gcd} and \func{lcm} in the parsers.
+\item \csbxint{ifsgnexpr}, \csbxint{ifsgnfloatexpr}, \csbxint{ifsgniiexpr}.
+\item \csbxint{unassignexprfunc} and variants for the other parsers.
+\item \func{isone} and \func{isint}.
+\item \csbxint{eval}, \csbxint{ieval}, \csbxint{iieval}, and
+ \csbxint{floateval}. Attention: these names were formerly used with some other
+ (barely documented) meanings, for which |\xintexpro|, |\xintiexpro|,
+ etc... are now used.
+\item Sadly, in \csbxint{iiexpr}|...\relax| division with a zero dividend and
+ a one-digit divisor got broken at |1.2p|. Fixed. Thanks to \textsc{Kpym} for
+ report. Sorry for long delay in releasing the bugfix, which was done shortly
+ after |1.3c| release.
+\end{itemize}
+
+\section{The syntax of \xintexprname expressions}
+\label{sec:xintexprsyntax}
+
+\localtableofcontents
+
+\subsection{The three parsers}\label{ssec:threeparsers}
+
+There are three expression parsers and two subsidiary ones. They
+all admit comma separated expressions, and will then output a comma
+separated list of results.
+\begin{itemize}[nosep]
+\item \csbxint{theiiexpr}| ... \relax| does exact computations \emph{only on
+ integers.} The forward slash \dtt{/} does the \emph{rounded} integer
+ division to match behaviour of |\the\numexpr
+ <int>/<int>\relax|.\footnote{For floored integer division, see the \dtt{//}
+ operator.} There are two square root extractors \func{sqrt} and
+ \func{sqrtr} for truncated and rounded square roots. Scientific notation
+ |6.02e23| is \emph{not} accepted on input, one needs to wrap it as
+ |num(6.02e23)| which will convert to an integer notation
+ \dtt{\printnumber{\xinttheiiexpr num(6.02e23)\relax}}.
+\item \csbxint{thefloatexpr}| ... \relax| does computations with a given
+ precision \dtt{P}, as specified via a prior assignment |\xintDigits:=P;|.
+ The default is \dtt{P=16} digits. An optional argument controls the
+ precision for \emph{formatting the output} (this is not the precision of the
+ computations themselves). The four basic operations and the square root
+ realize \emph{correct rounding.}\footnote{when the inputs are already
+ floating point numbers with at most |P|-digits mantissas.}
+\item \csbxint{theexpr}| ... \relax| handles integers, decimal numbers,
+ numbers in scientific notation and fractions. The algebraic computations are
+ done \emph{exactly.} The \func{sqrt} function is available and obeys
+ either the |\xintDigits| precision or its second optional
+ argument.
+\end{itemize}
+
+Two derived parsers:
+\begin{itemize}[nosep]
+\item \csbxint{theiexpr}| ... \relax| does all computations like |\xinttheexpr
+ ... \relax| but rounds the result to the nearest integer. With an optional
+ positive argument |[D]|, the rounding is to the nearest fixed point number
+ with |D| digits after the decimal mark.
+\item \csbxint{theboolexpr}| ... \relax| does all computations like
+ |\xinttheexpr ... \relax| but converts the result to $1$ if it is not zero
+ (works also on comma separated expressions).
+ See also the booleans \csbxint{ifboolexpr}, \csbxint{ifbooliiexpr},
+ \csbxint{ifboolfloatexpr}, \csbxint{ifsgnexpr}, \csbxint{ifsgniiexpr},
+ \csbxint{ifsgnfloatexpr} (they do not handle comma separated expressions).
+\end{itemize}
+
+Release |1.3d| provides \csbxint{eval}, \csbxint{ieval},
+\NewWith{1.3d}
+\csbxint{iieval}, \csbxint{floateval}.
+
+\subsection{Built-in operators and their precedences}
+
+
+\def\MicroFont{\ttbfamily\makestarlowast\color[named]{DarkOrchid}}
+
+\makeatletter
+\def\@floatboxreset{\@setminipage}% faudra contrôler celui-là
+\makeatother
+\begin{table}[htbp]
+\edef\restorehtdpstrutbox
+ {\ht\strutbox\the\ht\strutbox\dp\strutbox\the\dp\strutbox}
+\ht\strutbox12pt\dp\strutbox5pt
+\capstart
+ \centering\begin{tabular}{|c|p{.5\textwidth}|}
+ \hline
+ \multicolumn{2}{|p{.6\textwidth}|}{\prec{$\infty$}:
+ at this top level the non-operator syntax elements whose parsing
+ is always done prior to executing operators preceding them:
+ \begin{itemize}[nosep]
+ \item
+ \hyperref[ssec:builtinfunctions]{built-in} or
+ \hyperref[ssec:userfunctions]{user-defined} functions,
+ \item \hyperref[ssec:uservariables]{variables},
+ \item and the intrinsic constituents of numbers: decimal mark |.|, |e| and |E| of scientific notation, hexadecimal prefix |"|.
+ \end{itemize}\par\kern-\baselineskip\relax}%
+ \\\hline\hline
+ Precedence&``Operators'' at this level\strut\\
+ \hline
+ \prec{$10$}& the factorial (postfix) operator |!| and the conditional branching operators |?| and |??|\strut\\\hline
+ \prec{$=$}& the minus sign |-| as unary operator acquires the
+ precedence level of the previous infix operator\strut\\\hline
+ \prec{$9$}&the power |^|, |**| operators\strut\\\hline
+ \prec{$8$}&the action of tacit multiplication\strut\\\hline
+ \prec{$7$}&the multiplication, division, and modulo operators |*|, |/|,
+ |//|, |/:| (aka |'mod'|)\strut
+ \\\hline
+ \prec{$6$}&the addition and subtraction |+|, |-|\strut\\\hline
+ \prec{$5$}&the comparison operators |<|, |>|, |==|, |<=|, |>=|, |!=|\strut\\\hline
+ \prec{$4$}&Boolean conjunction |&&| and its alias |'and'|\strut\\\hline
+ \prec{$3$}&Boolean disjunction \verb+||+ and |'or'|, and |'xor'|; also the
+ sequence generators |..|, |..[|, |]..|, and the Python slicer |:| have
+ this precedence\strut\\\hline
+ \prec{$2$}& the comma |,|\strut\\\hline
+ \prec{$1$}& the parentheses |(|, |)|, list brackets |[|, |]|, semi-colon |;| in an \func{iter} or
+ \func{rseq}\strut\\\hline\hline
+ \multicolumn{2}{|p{.6\textwidth}|}{%
+ \begin{itemize}[nosep]
+ \item In case of equal precedence, the rule is left-associativity: the first
+encountered operation is executed first.
+\hyperref[ssec:tacit multiplication]{Tacit multiplication} has an elevated
+precedence level hence seemingly breaks left-associativity: |(1+2)/(3+4)5|
+is computed as |(1+2)/((3+4)*5)| and |x/2y| is interpreted as |x/(2*y)|
+when using variables.
+ \item List variants |^[|, |**[|, |]^|, |]**|,
+ |*[|, |/[|, |]*|, |]/|, |+[|, |-[|, |]+|, |]-|, share the precedence
+ level of their respective associated operators on numbers.
+ \item There may
+ be some evolution in future, perhaps to distinguish some of the constructs
+ which currently share the same precedence or to make room for added syntax
+ elements.
+ \end{itemize}
+}\\\hline
+ \end{tabular}
+ \caption{Precedence levels}
+ \label{tab:precedences}
+\etoctoccontentsline {table}{\textbf{(table)} \protect\emph{Precedence levels of operators}}
+\restorehtdpstrutbox
+\end{table}
+
+The \autoref{tab:precedences} is hyperlinked to the more detailed discussion
+at each level.
+
+\begin{description}[parsep=0pt,align=left,itemindent=0pt,
+ leftmargin=\leftmarginii, labelwidth=\leftmarginii, labelsep=0pt,
+ labelindent=0pt, listparindent=\leftmarginiii]
+
+\precdesc{\infty} At this highest level of precedence, one finds:
+\begin{itemize}[parsep=0pt,align=left,itemindent=0pt,
+ leftmargin=\leftmarginii, labelwidth=\leftmarginii, labelsep=0pt,
+ labelindent=0pt, listparindent=\leftmarginiii]
+\item \hyperref[ssec:builtinfunctions]{functions} and
+ \hyperref[ssec:uservariables]{variables}:
+ we approximately describe the situation as
+ saying they have highest precedence. Functions (even the logic functions
+ \func{!} and \func{?} whose names consists of a single non-letter character)
+ must be used with parentheses. These parentheses may arise from expansion
+ after the function name is parsed (there are exceptions which are documented
+ at the relevant locations.)
+\item the |.| as decimal mark; the number scanner treats it as
+ an inherent, optional and unique component of a being formed number. One can
+ do things such as
+ %
+ \leftedline{\restoreMicroFont|\xinttheexpr 0.^2+2^.0\relax|}
+ %
+ which is |0^2+2^0| and produces \dtt{\xinttheexpr 0.^2+2^.0\relax}.
+
+ Since release |1.2| an isolated decimal mark |"."| is illegal
+ input in |\xintexpr..\relax|, although it remains legal as argument to the
+ macros of \xintfracname.
+\item the |e| and |E|, for scientific notation are intrinsic constituents of
+ number denotations,
+ like the decimal mark.
+\item the |"| for hexadecimal numbers: it is allowed only at locations where
+ the parser expects to start forming a numeric operand, once encountered it
+ triggers the hexadecimal scanner which looks for successive hexadecimal
+ digits as usual skipping spaces and expanding forward everything; letters
+ (only |ABCDEF|, not |abcdef|), an optional dot
+ (allowed directly in front) and an optional (possibly empty) fractional
+ part. The |"| functionality
+ \fbox{requires to load package \xintbinhexname}.%
+%
+\begin{everbatim*}
+\xinttheexpr "FEDCBA9876543210\relax\newline
+\xinttheiexpr 16^5-("F75DE.0A8B9+"8A21.F5746+16^-5)\relax
+\end{everbatim*}
+\end{itemize}
+
+\precdesc{10} The postfix operators |!| and the branching conditionals |?|, |??|.
+ \begin{description}[parsep=0pt,align=left,itemindent=0pt,
+ leftmargin=\leftmarginii, labelwidth=\leftmarginii, labelsep=0pt,
+ labelindent=0pt, listparindent=\leftmarginiii]
+
+ \item[{\color[named]{DarkOrchid}!}] computes the factorial of an integer.
+ Attention that the boolean equality test |==| must not follow directly
+ such a |<digits or variable>!| because the parser will handle |!=| as the
+ boolean inequality test... the remaining |=| then causes a parsing error.
+ It is even worse if one uses a single |=| following the |!| because no
+ error arises but an un-intended interpretation. Use parentheses:
+ |(3!)==10|.
+
+ \item[{\color[named]{DarkOrchid}?}] is used as |(stuff)?{yes}{no}|. It
+ evaluates |stuff| and chooses the |yes| branch if the result is
+ non-zero, else it executes |no|. After evaluation of |stuff| it acts as
+ a macro with two mandatory arguments within braces, chooses the
+ correct branch \emph{without evaluating the wrong one}. Once the braces
+ are removed, the parser scans and expands the uncovered material so for
+ example
+ %
+ \leftedline{|\xinttheiexpr (3>2)?{5+6}{7-1}2^3\relax|}
+ %
+ is legal and computes
+ |5+62^3=|\dtt{\xinttheiexpr(3>2)?{5+(6}{7-(1}2^3)\relax}. It would be
+ better practice to include here the |2^3| inside the branches. The
+ contents of the branches may be arbitrary as long as once glued to what is
+ next the syntax is respected: {|\xintexpr (3>2)?{5+(6}{7-(1}2^3)\relax|
+ also works.}
+
+
+ \item[{\color[named]{DarkOrchid}??}] is used as |(stuff)??{<0}{=0}{>0}|,
+ where |stuff| is anything, its sign is evaluated and depending on the sign
+ the correct branch is un-braced, the two others are discarded with no
+ evaluation of their contents. The un-braced branch will then be parsed as
+ usual.
+ %
+ \leftedline{|\def\x{0.33}\def\y{1/3}|}
+ %
+ \leftedline{|\xinttheexpr (\x-\y)??{sqrt}{0}{1/}(\y-\x)\relax|%
+ \dtt{=\def\x{0.33}\def\y{1/3}%
+ \xinttheexpr (\x-\y)??{sqrt}{0}{1/}(\y-\x)\relax }}
+ %
+ \end{description}
+
+\precdesc{=} The minus sign |-| as prefix unary operator inherits the
+ precedence of the infix operator it follows. |\xintexpr -3-4*-5^-7\relax|
+ evaluates as |(-3)-(4*(-(5^(-7))))| and |-3^-4*-5-7| as
+ |(-((3^(-4))*(-5)))-7|.
+
+ |2^-10| is perfectly accepted input, no need for parentheses
+
+
+
+ \precdesc{9} The power operator |^|, or equivalently |**|. It is left
+ associative: {\restoreMicroFont|\xinttheiexpr 2^2^3\relax|} evaluates to
+ \xinttheiexpr 2^2^3\relax, not \xinttheiexpr 2^(2^3)\relax. See
+ \csbxint{FloatPower} for additional information.
+
+ Also at this level the list operators |^[|, |**[|, |]^|, and |]**|.
+
+\precdesc{8} see \hyperref[ssec:tacit multiplication]{Tacit multiplication}.
+
+\precdesc{7} Multiplication and division |*|, |/|. The
+ division is left associative, too:
+ %
+ \begingroup\restoreMicroFont
+ %
+ |\xinttheiexpr 100/50/2\relax| evaluates to \xinttheiexpr 100/50/2\relax,
+ not \xinttheiexpr 100/(50/2)\relax.
+ %
+ \endgroup
+
+ Also the floored division |//| and its associated modulo |/:| (equivalently |'mod'|,
+ quotes mandatory).
+
+ Also at this level the list operators |*[|, |/[|, |]*| and |]/|.
+
+ In an \csbxint{iiexpr}-ession, |/| does \emph{rounded} division, to behave
+ like the |/| of |\numexpr|.
+
+ Infix operators all at the same level of precedence are
+ left-associative.\footnote{i.e. the first two operands are operated upon
+ first.}
+ Apply parentheses for disambiguation.
+\begin{everbatim*}
+\xinttheexpr 100000//13, 100000/:13, 100000 'mod' 13, trunc(100000/13,10),
+ trunc(100000/:13/13,10)\relax
+\end{everbatim*}
+
+\precdesc{6} Addition and subtraction |+|, |-|. According to the rule above, |-|
+ is left associative:
+ %
+ \begingroup\restoreMicroFont
+ %
+ |\xinttheiexpr 100-50-2\relax| evaluates to \xinttheiexpr 100-50-2\relax,
+ not \xinttheiexpr 100-(50-2)\relax.
+ %
+ \endgroup
+
+ Also the list operators |+[|, |-[|, |]+|, |]-| are at this precedence level.
+
+\precdesc{5} Comparison operators |<|, |>|, |=| (same as |==|), |<=|, |>=|, |!=| all
+ at the same level of precedence, use parentheses for disambiguation.
+
+\precdesc{4} Conjunction (logical and) |&&| or equivalently
+ |'and'| (quotes mandatory).%
+%
+\footnote{with releases earlier than |1.1|, only single
+ character operators |&| and \verb+|+ were available, because the parser
+ did not handle multi-character operators. Their usage in this rôle is now
+ deprecated,\IMPORTANT{} and they may be assigned some new meaning in the
+ future.}
+
+\precdesc{3} Inclusive disjunction (logical or) \verb+||+
+ and equivalently |'or'| (quotes mandatory).
+
+ Also the |'xor'| operator (quotes mandatory) is at this level.
+
+ Also the list generation operators |..|, |..[|, |]..| are at this level.
+
+ Also the |:| for Python slicing of lists.
+
+\precdesc{2} The comma: {\restoreMicroFont with |\xinttheexpr 2^3,3^4,5^6\relax|
+ one obtains as output \xinttheexpr 2^3,3^4,5^6\relax{}.}\footnote{The comma
+ is really like a binary operator, which may be called ``join''. It has
+ lowest precedence of all (apart the parentheses) because when it is
+ encountered all postponed operations are executed in order to finalize its
+ \emph{first} operand; only a new comma or a closing parenthesis or the end
+ of the expression will finalize its \emph{second} operand.}
+
+\precdesc{1} The parentheses. The list outer brackets |[|, |]| share the same
+ functional precedence as parentheses. The semi-colon |;| in an |iter| or
+ |rseq| has the same precedence as a closing parenthesis.\footnote{It is not
+ apt to describle the opening parenthesis as an operator, but the closing
+ parenthesis is more closely like a postfix unary operator. It has lowest
+ precedence because when it is encountered all postponed operations are
+ executed to finalize its operand. The start of this operand was decided by
+ the opening parenthesis.}
+\end{description}
+
+
+\restoreMicroFont
+
+\subsection{Built-in functions}\label{ssec:builtinfunctions}
+
+
+See \autoref{tab:functions} whose elements are hyperlinked to the
+corresponding definitions.
+
+ Functions are at the same top level of priority. All functions even
+ \func{?} and \func{!} require parentheses around their arguments.
+
+% Table of functions
+
+\begin{table}[htbp]
+ \capstart
+ \centering
+\xintAssignArray\xintCSVtoList{!, ?, |`*`|, |`+`|,
+abs, add, all, any, acos, acosd, Arg, Argd, asin, asind, atan, atand,
+atan2, atan2d,
+binomial, bool,
+ceil, cos, cosd, cot, cotd, cotg, csc, cscd,
+divmod, even, exp,
+factorial, first, float, floor, frac, gcd,
+if, ifint, ifone, ifsgn, ilog10, isint, isone, iter, iterr, inv,
+last, lcm, len, log, log10, max, min, mod, mul, not, num, odd,
+pArg, pArgd, pfactorial, pow, pow10, preduce,
+qfloat, qfrac, qint, qrand, qraw, quo,
+random, randrange, reduce, rem, reversed, round, rrseq, rseq,
+sec, secd, seq, sgn, sin, sinc, sind, sqr, sqrt, sqrtr, subs,
+tan, tand, tg, togl, trunc,
+xor}
+\to\Functions
+ \cnta\Functions{0}
+ \cntb\xinttheexpr ceil(\cnta/4)\relax\space
+\newcommand\builtinfunction[1]{\expandafter\expandafter\expandafter\func
+ \expandafter\expandafter\expandafter{\Functions{#1}}}%
+\begin{tabular}{|*{4}{p{2.5cm}|}}
+ \hline
+ \xintFor* #1 in {\xintSeq{1}{\cntb}}\do
+ {\builtinfunction{#1}&
+ \builtinfunction{#1+\cntb}&%
+ \builtinfunction{#1+2*\cntb}&%
+ \ifnumgreater{#1+3*\cntb}{\cnta}
+ {}
+ {\builtinfunction{#1+3*\cntb}}%
+ \\\hline}%
+\end{tabular}
+\caption{Functions (click on names)}\label{tab:functions}
+\etoctoccontentsline {table}{\textbf{(table)} \protect\emph{Functions in expressions}}
+\etocsetnexttocdepth{subsubsection}
+\localtableofcontents
+\end{table}
+
+
+Miscellaneous notes:
+\begin{itemize}[nosep]
+ \item since release |1.3d| \func{gcd}\NewWith{1.3d} and \func{lcm} are extended to apply
+ to fractions too, and they do NOT require the loading of \xintgcdname,
+
+ \item The randomness related functions \func{random}, \func{qrand} and
+ \func{randrange} require that the \TeX\ engine provides the
+ \csa{uniformdeviate} or \csa{pdfuniformdeviate} primitive. This is
+ currently the case for |pdftex|, |(u)ptex|, |luatex|, and will be for
+ |xetex| starting with \TeX Live 2019.\IMPORTANT
+
+ \item \func{togl} is provided for the case |etoolbox| package is loaded,
+
+ \item \func{bool}, \func{togl} use delimited macros to fetch their argument and the
+ closing parenthesis must be explicit, it can not arise from
+ on the spot expansion. The same holds for \func{qint}, \func{qfrac},
+ \func{qfloat}, \func{qraw}, \func{random} and \func{qrand}.
+
+ \item Also \hyperlink{ssec:dummies}{functions with dummy variables} use
+ delimited macros for some tasks. See the relevant explanations there.
+\end{itemize}
+
+
+% \begin{description}[parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% %! leftmargin+itemindent="labelindent"+labelwidth+labelsep
+% %! leftmargin=labelindent+labelwidth+labelsep* (enumitem)
+% %! Utiliser \mbox{} et non pas \noindent\par pour bon display
+% %! (enfin c'était nécessaire avant chgt dans keys ci-dessus, ai oublié ancien
+% %! attention que listparindent n'est apparemment pas hérité, faut le refaire
+% listparindent=\leftmarginiii]
+\subsubsection{Functions with no argument}
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+ \funcdesc[]{random} returns a random float |x| verifying |0 <= x < 1|. It obeys
+ the prevailing precision as set by \csbxint{Digits}: i.e. with |P| being the
+ precision the random float multiplied by |10^P| is an integer, uniformly
+ distributed in the |0..10^P-1| range.\NewWith{1.3b}
+
+ This description implies that if |x| turns out to be |<0.1| then
+ its (normalized) mantissa has |P-1| digits and a trailing zero, if |x<0.01|
+ it has |P-2| digits and two trailing zeros, etc... This is what is observed
+ also with Python's |random()|, of course with |10| replaced there by radix
+ |2|.%
+\begin{everbatim*}
+ \pdfsetrandomseed 12345
+ \xintDigits:=37;%
+ \xintthefloatexpr random()\relax\newline
+ \xintthefloatexpr random()\relax\par
+\end{everbatim*}
+
+ \begin{framed}
+ Due to the way \csbxint{expr}|...\relax| are handled (see
+ \autoref{ssec:memory}), Monte-Carlo type simulations using expressions may
+ relatively easily exhaust \TeX{} memory.\IMPORTANT\ If possible use
+ \csbxint{NewFloatExpr} to construct from such expressions involving the
+ \func{random} function macros not creating the memory impact which is
+ described in \autoref{ssec:memory}.
+ \end{framed}
+
+ \funcdesc[]{qrand} returns a random float |0 <= x < 1| using \dtt{16} digits of
+ precision (i.e. |10^{16}x| is an integer). This is provided when speed is a
+ at premium as it is optimized for precision being precisely \dtt{16}.%
+ \NewWith{1.3b}
+\begin{everbatim*}
+ % still with 37 digits as prevailing float precision
+ \xintthefloatexpr qrand(), random()\relax\newline
+ \xintDigits:=16;%
+ \xintthefloatexpr qrand(), random()\relax\par
+\end{everbatim*}
+
+ One can use both |qrand()| and |random()| inside the |\xintexpr| parser too.
+ But inside the integer only |\xintiiexpr| parser they will cause some
+ low-level error as soon as they get involved in any kind of computation as
+ they use an internal format not recognized by the integer-only parser.
+
+ See further \func{randrange}, which generates random integers.
+
+ Currently there is no |uniform()| function%
+%
+\footnote{Because I am not sure how to handle rounding issues: should the
+ computation proceed exactly and a rounding be done only at very end?}
+%
+ but it can be created by user:
+\begin{everbatim*}
+\xintdeffloatfunc uniform(a, b):= a + (b-a)*random();
+\romannumeral\xintreplicate{10}%
+{%
+ \xintthefloatexpr uniform(123.45678, 123.45679)\relax\newline
+}%
+\end{everbatim*}
+
+\end{description}
+
+\subsubsection{Functions with a single (numeric) argument}
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+ \funcdesc{num} truncates to the nearest integer (truncation towards zero). It
+ has the same sign as |x|, except of course with |-1<x<1| as then |num(x)| is
+ zero.
+\begin{everbatim*}
+\xinttheexpr num(3.1415^20), num(1e20)\relax
+\end{everbatim*}
+ The output is an explicit integer with as many zeros are as necessary. Even
+ in float expressions, there will be an intermediate stage where all needed digits
+ are there, but then the integer is immediately reparsed as a float to the target
+ precision, either because some operation applies to it, or from the output
+ routine of \csbxint{floatexpr} if it stood there alone. Hence,
+ inserting something like |num(1e10000)| is costly as it really creates ten
+ thousand zeros, even though later the whole thing becomes a float again. On
+ the other hand naturally |1e10000| without |num()| would be simply parsed as
+ a floating point number and would cause no specific overhead.
+
+ \funcdesc{frac} fractional part.
+ For all numbers |x=num(x)+frac(x)|, and |frac(x)| has the same sign as |x|
+ except when |x| is an integer, as then |frac(x)| vanishes.
+\begin{everbatim*}
+\xintthefloatexpr frac(-355/113), frac(-1129.218921791279)\relax
+\end{everbatim*}
+
+ \funcdesc{reduce} reduces a fraction to smallest terms
+\begin{everbatim*}
+\xinttheexpr reduce(50!/20!/20!/10!)\relax
+\end{everbatim*}
+
+Recall that this is NOT done automatically, for example when adding fractions.
+ \funcdesc{preduce} internally, fractions may have some power of ten part
+ (for example when they got input in scientific notation). This function
+ ignores the decimal part when doing the reduction. See \csbxint{PIrr}.
+\begin{everbatim*}
+\xinttheexpr preduce(10e3/2), reduce(10e3/2)\relax
+\end{everbatim*}
+
+ \funcdesc{abs} absolute value
+ \funcdesc{sgn} sign. See also \csbxint{ifsgnexpr}.
+ \funcdesc{inv} inverse.\NewWith{1.3e}
+ \funcdesc{floor} floor function.
+ \funcdesc{ceil} ceil function.
+ \funcdesc{sqr} square.
+\item[ilog10(x)]\hypertarget{func:ilog10-ii}
+ in |\xintiiexpr| the integer exponent $a$ such that $10^a\leq
+ \mathrm{abs}(x)< 10^{a+1}$;\NewWith{1.3e} returns (this may evolve in future)
+ \dtt{\xintiieval{ilog10(0)}} if $x$ vanishes (i.e. \dtt{0x7fff8000}).
+\begin{everbatim*}
+\xintiieval{ilog10(1), ilog10(-1234567), ilog10(-123456789123456789), ilog10(2**31)}\par
+\end{everbatim*}
+ See \func{ilog10} for the behaviour in \csbxint{expr}-essions.
+ \item[sqrt(x)]\hypertarget{func:sqrt-ii}
+ in |\xintiiexpr|, truncated square root; in |\xintexpr| or
+ |\xintfloatexpr| this is the floating point square root, and there is an
+ optional second argument for the precision. See \func{sqrt}.
+ \funcdesc{sqrtr} available \emph{only} in |\xintiiexpr|, rounded square root.
+ \item[factorial(x)]\hypertarget{func:factorial-ii} factorial function (like the
+ post-fix |!| operator.) When used in |\xintexpr| or
+ |\xintfloatexpr| there is an optional second argument. See \func{factorial}.
+ \funcdesc{?} is the truth value, $1$ if non zero, $0$ if zero. Must use parentheses.
+ \funcdesc{!} is logical not, $0$ if non zero, $1$ if zero. Must use parentheses.
+ \funcdesc{not} logical not.
+ \funcdesc{even} is the evenness of the truncation |num(x)|.
+\begin{everbatim*}
+\xintthefloatexpr [3] seq((x,even(x)), x=-5/2..[1/3]..+5/2)\relax
+\end{everbatim*}
+
+ \funcdesc{odd} is the oddness of the truncation |num(x)|.
+\begin{everbatim*}
+\xintthefloatexpr [3] seq((x,odd(x)), x=-5/2..[1/3]..+5/2)\relax
+\end{everbatim*}
+
+ \funcdesc{isint} evaluates to 1 if |x| is an integer, to 0 if
+ not.\NewWith{1.3d} See \func{ifint}.
+\begin{everbatim*}
+$\xinttheexpr -5/3..[1/3]..+5/3\relax
+\rightarrow \xinttheexpr seq(isint(x), x=-5/3..[1/3]..+5/3)\relax$
+\end{everbatim*}
+
+ \funcdesc{isone} evaluates to 1 if |x| is 1, to 0 if not.\NewWith{1.3d}
+See \func{ifone}.
+\begin{everbatim*}
+$\xintthefloatexpr subs(((x-1)/x, x/x, (x+1)/x), x=2**30)\relax
+\rightarrow
+\xintthefloatexpr seq(isone(y), y=subs(((x-1)/x, x/x, (x+1)/x), x=2**30))\relax$
+\end{everbatim*}
+
+ \funcdesc{qint} belong with \func{qfrac}, \func{qfloat}, \func{qraw} to a
+ special category:
+ \begin{enumerate}[nolistsep]
+ \item They require the closing parenthesis of their argument to be
+ immediately visible, it can not arise from expansion.
+ \item They grab the argument and store it directly; the format must be
+ compatible with what is expected at macro level.
+ \item And in particular the argument can not be a variable, it has to be
+ numerical.
+ \end{enumerate}
+
+ \func{qint} achieves the same result as |num|, but the argument is grabbed
+ as a whole without expansion and handed over to the
+ \csbxint{iNum} macro. The |q| stands for ``quick'', and |qint| is thought
+ out for use in \csbxint{iiexpr}|...\relax| with integers having dozens of
+ digits.
+
+ Testing showed that using |qint()| starts getting advantageous for inputs
+ having more (or \fexpan ding to more) than circa \dtt{20} explicit digits.
+ But for hundreds of digits the input gain becomes a negligible
+ proportion of (for example) the cost of a multiplication.
+
+ Leading signs and then
+ zeroes will be handled appropriately but spaces will not be systematically
+ stripped. They should cause no harm and will be removed as soon as the
+ number is used with one of the basic operators. This input mode \emph{does
+ not accept decimal part or scientific part}.
+\begin{everbatim}
+\def\x{....many many many ... digits}\def\y{....also many many many digits...}
+\xinttheiiexpr qint(\x)*qint(\y)+qint(\y)^2\relax\par
+\end{everbatim}
+
+ \funcdesc{qfrac} does the same as \dtt{qint} excepts that it accepts
+ fractions, decimal numbers, scientific numbers as they are understood by
+ the macros of package \xintfracname. Thus, it is for use in
+ \csbxint{expr}|...\relax|. It is not usable within an
+ |\xintiiexpr|-ession, except if hidden inside functions such as
+ \dtt{round} or \dtt{trunc} which then produce integers acceptable to the
+ integer-only parser. It has nothing to do with |frac| (sigh...).
+
+ \funcdesc{qfloat} does the same as \dtt{qfrac} and then converts to a float
+ with the precision given by the setting of |\xintDigits|. This can be used
+ in \csbxint{expr} to round a fraction as a float with the same result as
+ with the |float()| function (whereas using |\xintfloatexpr A/B\relax|
+ inside \csbxint{expr}|...\relax| would first round |A| and |B| to the
+ target precision); or it can be used inside
+ \csbxint{floatexpr}|...\relax| as a faster alternative to wrapping
+ the fraction in a sub-\csbxint{expr}-ession.
+ For example, the next two computations done with \dtt{16} digits
+ of precision do not give the same result:
+\begin{everbatim*}
+\xintthefloatexpr qfloat(12345678123456785001/12345678123456784999)-0.5\relax\newline
+\xintthefloatexpr 12345678123456785001/12345678123456784999-0.5\relax\newline
+\xintthefloatexpr 1234567812345679/1234567812345678-0.5\relax\newline
+\xintthefloatexpr \xintexpr12345678123456785001/12345678123456784999\relax-0.5\newline
+\end{everbatim*}%
+ because the second is equivalent to the third, whereas the
+ first one is equivalent to the fourth one. Equivalently one can use
+ |qfrac| to the same effect (the subtraction provoking the rounding of its
+ two arguments before further processing.)
+
+ Note that if the input needs no special rounding, the internal form of the
+ output keeps a short mantissa (it does not add padding zeros to make it of
+ length equal to the float precision). For example |qfloat(2[20])| would
+ keep internally the input format.\CHANGED{1.3e}
+\end{description}
+
+\subsubsection{Functions with an alphabetical argument}
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+\funcdesc[name]{bool}
+ returns
+ $1$ if the \TeX{} conditional |\ifname| would act as |\iftrue| and
+ $0$ otherwise. This works with conditionals defined by |\newif| (in
+ \TeX{} or \LaTeX{}) or with primitive conditionals such as
+ |\ifmmode|. For example:
+ %
+ \leftedline{|\xintifboolexpr{25*4-if(bool(mmode),100,75)}{YES}{NO}|}
+ %
+ will return $\xintifboolexpr{25*4-if(bool(mmode),100,75)}{YES}{NO}$
+ if executed in math mode (the computation is then $100-100=0$) and
+ \xintifboolexpr{25*4-if(bool(mmode),100,75)}{YES}{NO} if not (the
+ \func{if} conditional is described below; the
+ \csbxint{ifboolexpr} test automatically encapsulates its first
+ argument in an |\xintexpr| and follows the first branch if the
+ result is non-zero (see \autoref{xintifboolexpr})).
+
+ The alternative syntax |25*4-\ifmmode100\else75\fi| could have been
+ used here, the usefulness of |bool(name)| lies in the availability
+ in the |\xintexpr| syntax of the logic operators of conjunction
+ |&&|, inclusive disjunction \verb+||+, negation |!| (or |not|), of
+ the multi-operands functions |all|, |any|, |xor|, of the two
+ branching operators |if| and |ifsgn| (see also |?| and |??|), which
+ allow arbitrarily complicated combinations of various |bool(name)|.
+\funcdesc[name]{togl}
+ returns $1$
+ if the \LaTeX{} package \href{http://www.ctan.org/pkg/etoolbox}{etoolbox}%
+ %
+ %
+%
+\footnote{\url{http://www.ctan.org/pkg/etoolbox}}
+ %
+ has been used to define a toggle named |name|, and this toggle is
+ currently set to |true|. Using |togl| in an |\xintexpr..\relax|
+ without having loaded
+ \href{http://www.ctan.org/pkg/etoolbox}{etoolbox} will result in an
+ error from |\iftoggle| being a non-defined macro. If |etoolbox| is
+ loaded but |togl| is used on a name not recognized by |etoolbox|
+ the error message will be of the type ``ERROR: Missing |\endcsname|
+ inserted.'', with further information saying that |\protect| should
+ have not been encountered (this |\protect| comes from the expansion
+ of the non-expandable |etoolbox| error message).
+
+ When |bool| or |togl| is encountered by the |\xintexpr| parser, the
+ argument enclosed in a parenthesis pair is expanded as usual from
+ left to right, token by token, until the closing parenthesis is
+ found, but everything is taken literally, no computations are
+ performed. For example |togl(2+3)| will test the value of a toggle
+ declared to |etoolbox| with name |2+3|, and not |5|. Spaces are
+ gobbled in this process. It is impossible to use |togl| on such
+ names containing spaces, but |\iftoggle{name with spaces}{1}{0}|
+ will work, naturally, as its expansion will pre-empt the
+ |\xintexpr| scanner.
+
+ There isn't in |\xintexpr...| a |test| function available analogous
+ to the |test{\ifsometest}| construct from the |etoolbox| package;
+ but any \emph{expandable} |\ifsometest| can be inserted directly in
+ an |\xintexpr|-ession as |\ifsometest10| (or |\ifsometest{1}{0}|),
+ for example |if(\ifsometest{1}{0},YES,NO)| (see the |if| operator
+ below) works.
+
+ A straight |\ifsometest{YES}{NO}| would do the same more
+ efficiently, the point of |\ifsometest10| is to allow arbitrary
+ boolean combinations using the (described later) \verb+&&+ and
+ \verb+||+ logic operators:
+ \verb+\ifsometest10 && \ifsomeothertest10 || \ifsomethirdtest10+,
+ etc... |YES| or |NO| above stand for material compatible with the
+ |\xintexpr| parser syntax.
+
+ See also \csbxint{ifboolexpr}, in this context.
+\end{description}
+
+\subsubsection{Functions with one mandatory and a second but optional argument}
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+ \funcdesc[{x[, n]}]{round} Rounds its first argument to a fixed point number, having a
+ number of digits
+ after decimal mark given by the second argument. For example
+ |round(-2^9/3^5,12)=|\dtt{\xinttheexpr round(-2^9/3^5,12)\relax.}
+ \funcdesc[{x[, n]}]{trunc} Truncates its first argument to a fixed point number, having
+ a number of digits
+ after decimal mark given by the second argument. For example
+ |trunc(-2^9/3^5,12)=|\dtt{\xinttheexpr trunc(-2^9/3^5,12)\relax.}
+ \funcdesc[{x[, n]}]{float} Rounds its first argument to a floating point number, with a
+ precision given by the second argument.
+ |float(-2^9/3^5,12)=|\dtt{\xinttheexpr float(-2^9/3^5,12)\relax.}
+
+ % AUCTeX EXTREMEMENT PENIBLE AVEC L'INDENTATION FORCEE SOUS M-q
+
+ Note for this example and the earlier ones that when the surrounding
+ parser is \csbxint{floatexpr}|...\relax| the fraction first argument (here
+ |2^9/3^5|) will already have been computed as floating point number (with
+ numerator and denominator handled separately first), even before the
+ second argument is seen and a fortiori before the |round|, |trunc| or
+ |float| is executed. The general float precision is the one governing
+ these initial steps. To avoid that, use |\xintexpr2^9/3^5\relax| wrapper.
+ Then the rounding or truncation will be applied on the exact fraction.
+
+ \funcdesc[{x[, n]}]{sfloat} It is the same as \func{float},\NewWith{1.3e}
+ but in case of a short (non-fractional) input it gets stored internally
+ without adding zeros to make the mantissa have the \csbxint{theDigits}
+ length. One may wonder then what is the utility of \func{sfloat}? See for
+ an example of use the documentation of \csbxint{deffunc}. Notice however
+ that this is a bit experimental and may evolve in future when \xintname
+ gets a proper internal data structure for floating point numbers. The
+ non-normalized format is useful for multiplication or division, but float
+ additions and subtractions usually convert their arguments to a normalized
+ mantissa.
+
+ \funcdesc[{x[, n]}]{ilog10} If there is an optional argument |n|, returns the (relative) integer $a$ such that $10^a\leq
+ \mathrm{abs}(float(x, n)) < 10^{a+1}$.\NewWith{1.3e} In absence of the
+ optional argument:
+ \begin{itemize}[nosep]
+ \item in \csbxint{expr}, it returns the exponent $a$ such that $10^a\leq
+ \mathrm{abs}(x) < 10^{a+1}$.
+ \item in \csbxint{floatexpr}, the input is first rounded to
+ \csbxint{theDigits} float precision, then the exponent $a$ is evaluated.
+ \end{itemize}
+\begin{everbatim*}
+\xintfloateval{ilog10(99999999/10000000, 8), ilog10(-999999995/100000000, 8),
+ ilog10(-999999995/100000000, 9)}\newline
+\xinteval{ilog10(-999999995/100000000), ilog10(-999999995/100000000, 8)}
+\end{everbatim*}
+
+ If the input vanishes the function outputs
+ \dtt{\xinteval{ilog10(0)}} (i.e. |-0x7fff8000| which is near the
+ minimal TeX number |-0x7fffffff|). This is also subject to change.
+
+ The \hyperlink{func:ilog10-ii}{integer-only} variant for \csbxint{iiexpr}
+ admits no optional argument.
+
+ \funcdesc[{x[, n]}]{sqrt} in \csa{xintexpr}|...\relax| and \csa{xintfloatexpr}|...\relax|
+ it achieves the precision given by the optional second argument. For
+ legacy reasons the |sqrt| function in \csa{xintiiexpr} \emph{truncates}
+ (to an integer), whereas |sqrt| in \csa{xintfloatexpr}|...\relax| (and in
+ \csa{xintexpr}|...\relax| which borrows it) \emph{rounds} (in the sense of
+ floating numbers). There is |sqrtr| in \csa{xintiiexpr} for
+ \emph{rounding} to nearest integer.
+\begin{everbatim*}
+\xinttheexpr sqrt(2,31)\relax\ and \xinttheiiexpr sqrt(num(2e60))\relax
+\end{everbatim*}
+
+ There is an \hyperlink{func:sqrt-ii}{integer only} variant for
+ \csbxint{iiexpr}.
+
+ \funcdesc[{x[, n]}]{factorial} when the second optional argument is made
+ use of inside \csa{xintexpr}|...\relax|, this switches to the use of the
+ float version, rather than the exact one.
+\begin{everbatim*}
+\xinttheexpr factorial (100,32)\relax, {\xintDigits:=32;\xintthefloatexpr
+ factorial (100)\relax}\newline
+\xinttheexpr factorial (50)\relax\newline
+\xinttheexpr factorial (50, 32)\relax
+\end{everbatim*}
+
+ The \hyperlink{func:factorial-ii}{integer only variant} of course has no
+ optional second argument.
+
+ \funcdesc[{A[, B]}]{randrange} when used with a single argument |A| returns a random
+ integer |0 <= x < A|, and when used with two arguments |A| and |B| returns
+ a random integer |A <= x < B|. As in Python it is an «empty range» error
+ in first case if |A| is zero or negative and in second case if |B <= A|.
+ \NewWith{1.3b}
+
+ The function can be used in all three parsers. Of course the size is not
+ limited (but in the float parser, the integer will be rounded if involved
+ in any operation).
+\begin{everbatim*}
+ \pdfsetrandomseed 12345
+ \xinttheiiexpr randrange(10**20)\relax\newline
+ \xinttheiiexpr randrange(1234*10**16, 1235*10**16)\relax\newline
+ \printnumber{\xinttheiiexpr randrange(10**199,10**200)\relax}\par
+\end{everbatim*}
+ For the support macros see \csbxint{RandomDigits}, \csbxint{iiRandRange},
+ \csbxint{iiRandRangeAtoB}. For some details regarding how \xintname
+ uses the engine provided generator of pseudo-random numbers, see
+ \csbxint{UniformDeviate}.
+
+ \end{description}
+
+\subsubsection{Functions with two arguments}
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+ \funcdesc[f, g]{quo} first truncates the arguments to convert them to integers then
+ computes the Euclidean quotient. Hence it computes an integer.
+ \funcdesc[f, g]{rem} first truncates the arguments to convert them to integers then
+ computes the Euclidean remainder. Hence it computes an integer.
+
+ \funcdesc[f, g]{mod} computes |f - g*floor(f/g)|. Hence its output is a
+ general fraction or floating point number or integer depending on the parser
+ where it is used.
+
+ Prior to |1.2p| it computed |f - g*trunc(f/g)|.
+
+ The |/:| and |'mod'| infix operators are both mapped to the same underlying
+ macro as this |mod(f, g)| function. At |1.3| this macro produces smaller
+ denominators when handling fractions than formerly.\CHANGED{1.3}
+\begin{everbatim*}
+\xinttheexpr mod(11/7,1/13), reduce(((11/7)//(1/13))*1/13+mod(11/7,1/13)),
+mod(11/7,1/13)- (11/7)/:(1/13), (11/7)//(1/13)\relax\newline
+\xintthefloatexpr mod(11/7,1/13)\relax\par
+\end{everbatim*}
+
+ Attention! the precedence rules mean that |29/5 /: 3/5| is handled like
+ |((29/5)/:3)/5|. This is coherent with behaviour of Python language for
+ example:
+\begin{everbatim}
+>>> 29/5 % 3/5, 11/3 % 17/19, 11/57
+(0.5599999999999999, 0.19298245614035087, 0.19298245614035087)
+>>> (29/5) % (3/5), (11/3) % (17/19), 5/57
+(0.4, 0.08771929824561386, 0.08771929824561403)
+\end{everbatim}
+ For comparison (observe on the last lines how |\xintfloatexpr| is more accurate than
+ Python!):
+\begin{everbatim*}
+\noindent\xinttheexpr 29/5 /: 3/5, 11/3 /: 17/19\relax\newline
+ \xinttheexpr (29/5) /: (3/5), (11/3) /: (17/19)\relax\newline
+ \xintthefloatexpr 29/5 /: 3/5, 11/3 /: 17/19, 11/57\relax\newline
+ \xintthefloatexpr (29/5) /: (3/5), (11/3) /: (17/19), 5/57\relax\newline
+ 5/57 = \xinttheexpr trunc(5/57, 20)\relax\dots\newline
+\end{everbatim*}%
+ Regarding some details of behaviour in |\xintfloatexpr|, see discussion of
+ |divmod| function next.
+
+ \funcdesc[f, g]{divmod} computes the two mathematical values |floor(f/g)| and
+ |mod(f,g)=f - g*floor(f/g)| and produces them separated with a comma, in
+ other terms it is analogous to the Python |divmod| function. Its output is
+ equivalent to using |f//g, f/:g| but its implementation avoids doing twice
+ the needed division.
+
+ In |\xintfloatexpr...\relax| the modulo is rounded to the prevailing
+ precision. The quotient is like in the other parsers an exact integer. It
+ will be rounded as soon as it is used in further operations, or via the global
+ output routine of |\xintfloatexpr|.
+\begin{everbatim*}
+\xintdefvar Q, R := divmod(3.7, 1.2);%
+\xinttheexpr Q, R, 1.2Q + R\relax\newline
+\xintdefiivar Q, R := divmod(100, 17);%
+\xinttheiiexpr Q, R, 17Q + R\relax\newline
+\xintdeffloatvar Q, R := divmod(100, 17e-20);%
+\xintthefloatexpr Q, R, 17e-20 * Q + R\relax\newline
+% show Q exactly, although defined as float it can be used in iiexpr:
+\xinttheiiexpr Q\relax\ (we see it has more than 16 digits)\par
+\xintunassignvar{Q}\xintunassignvar{R}%
+\end{everbatim*}
+
+ Again: |f//g| or the first item output by |divmod(f, g)| is an integer |q|
+ which when computed inside |\xintfloatexpr..\relax| is not yet rounded to
+ the prevailing float precision; the second item |f-q*g| is the rounding to
+ float precision of the exact mathematical value evaluated with this exact
+ |q|. \emph{This behaviour may change in future major release;\IMPORTANT{}
+ perhaps |q| will be rounded and |f-q*g| will correspond to usage of this
+ rounded |q|.}
+
+ As |\xintfloatexpr| rounds its global result, or rounds operands at
+ each arithmetic operation, it requires special circumstances to show that
+ the |q| is produced unrounded. Either as in the above example or this one
+ with comparison operators:
+\begin{everbatim*}
+\xintDigits := 4;%
+\xintthefloatexpr if(12345678//23=537000, 1, 0), 12345678//23\relax\newline
+\xintthefloatexpr if(float(12345678//23)=537000, 1, 0)\relax\par
+\xintDigits := 16;%
+\end{everbatim*}
+ In the first line, the comparison is done with
+ |floor(12350000/23)|\dtt{=\xinttheiiexpr12350000/23\relax} (notice in
+ passing that |12345678//23| was evaluated as |12350000//23| because the
+ operands are first rounded to prevailing precision), hence the conditional
+ takes the "False" branch. In the second line the |float| forces rounding of
+ the output to \dtt{4} digits, and the conditional takes the "True" branch.
+
+% pour mémoire, Python :
+% >>> divmod(100,17e-20)
+% (5.88235294117647e+20, 1.4756182441723705e-19)
+% mais faudra voir avec le module Decimal
+
+ This example shows also that comparison operators in
+ |\xintfloatexpr..\relax| act on unrounded operands.
+
+ \funcdesc[x, y]{binomial} computes binomial coefficients.
+ It returns zero if |y<0| or |x<y| and raises an error if |x<0| (or if
+ |x>99999999|.)
+\begin{everbatim*}
+\xinttheexpr seq(binomial(20, i), i=0..20)\relax
+\end{everbatim*}
+\begin{everbatim*}
+\printnumber{\xintthefloatexpr seq(binomial(100, 50+i), i=-5..+5)\relax}%
+\end{everbatim*}
+
+The arguments must be (expand to) short integers.
+ \funcdesc[a, b]{pfactorial} computes partial factorials i.e.
+ |pfactorial(a,b)| evaluates the product |(a+1)...b|.
+\begin{everbatim*}
+\xinttheexpr seq(pfactorial(20, i), i=20..30)\relax
+\end{everbatim*}
+
+The arguments must (expand to) short integers. See \autoref{xintiiPFactorial}
+for the behaviour if the arguments are negative.
+
+ \end{description}
+
+\subsubsection{Functions with 3 or 4 arguments}
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+ \funcdesc[cond,yes,no]{if} (twofold-way conditional)\mbox{}
+
+ checks if |cond| is true or false and takes the corresponding
+ branch. Any non zero number or fraction is logical true. The zero
+ value is logical false. Both ``branches'' are evaluated (they are
+ not really branches but just numbers). See also the |?| operator.
+
+ \funcdesc[x,yes,no]{ifint} (twofold-way conditional)\mbox{}
+
+ checks if |x| is an integer and in that case chooses the ``yes'' branch.%
+ \NewWith{1.3a}
+ See also \func{isint}.
+
+ \funcdesc[x,yes,no]{ifone} (twofold-way conditional)\mbox{}
+
+ checks if |x| is equal to one and in that case chooses the ``yes'' branch.%
+ \NewWith{1.3a}
+ Slightly more efficient than |if(x==1,..,..)|. See also \func{isone}.
+
+ \funcdesc[cond,<0,=0,>0]{ifsgn} (threefold-way conditional)\mbox{}
+
+ checks the sign of |cond| and
+ proceeds correspondingly. All three are evaluated. See also the |??|
+ operator.
+
+ \end{description}
+
+\subsubsection{Functions with an arbitrary number of arguments}
+
+ Except for \func{qraw}, this argument may be generated by one or many
+ |a..b| or |a..[d]..b| constructs, separated by commas.
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+ \funcdesc[a,b,c,...,z]{qraw} is provided for comma separated values. The
+ input must obide by the suitable format depending on the
+ parser:\NewWith{1.3c} strict integers, or raw fractions, or floats in
+ internal (non-documented) notation. Also, avoid spaces around the commas.
+ The usefulness is when some loop generates hundreds of comma separated
+ values. Without \func{qraw}, each new value means a new usage of a
+ |\csname..\endcsname| for storage of the growing list, with potential
+ impact on \TeX{} memory (see \autoref{ssec:memory}). See \func{qint},
+ \func{qfrac}, \func{qfloat}, the difference being that \func{qraw} does
+ no post-processing at all of its input, apart from complete expansion.
+ This allows it to accept comma separated values, as the internal storage
+ also uses commas.
+
+\funcdesc[x, y, ...]{all} inserts a logical |AND| in-between its arguments and evaluates the
+resulting logical assertion (as for all functions, all arguments are
+evaluated, see the |?| operator for ``lazy'' conditional branching; an example
+is to be found in \autoref{ssec:PrimesIV}.)
+\funcdesc[x, y, ...]{any} inserts a logical |OR| in-between its arguments and evaluates the
+resulting logical assertion,
+\funcdesc[x, y, ...]{xor} inserts a logical |XOR| in-between its arguments and evaluates
+the resulting logical assertion,
+\funcdesc[x, y, ...]{|`+`|} adds (left ticks mandatory):
+\begin{everbatim*}
+\xinttheexpr `+`(1,3,19), `+`(1*2,3*4,19*20)\relax
+\end{everbatim*}
+\funcdesc[x, y, ...]{|`*`|} multiplies (left ticks mandatory):
+\begin{everbatim*}
+\xinttheexpr `*`(1,3,19), `*`(1^2,3^2,19^2), `*`(1*2,3*4,19*20)\relax
+\end{everbatim*}
+\funcdesc[x, y, ...]{max} maximum of the (arbitrarily many) arguments,
+
+\funcdesc[x, y, ...]{min} minimum of the (arbitrarily many) arguments,
+
+\funcdesc[x, y, ...]{gcd} computes the positive generator of the fractional
+ideal of rational numbers $x\mathbb Z + y\mathbb Z + ... \subset \mathbb
+Q$.\CHANGED{1.3d} When the inputs are integers it is advantageous to use a sub
+\csbxint{iiexpr}-ession, as the integer-only macro is more efficient than the
+one accepting general fractional inputs. Notice that this may require some
+\func{num} wrapper when using variables, as they may well be in fraction
+format, and \csbxint{iiexpr} accepts only strict integers. Since |1.3d|, this
+function and \func{lcm} are available whether or not package \xintgcdname is
+loaded. Note that like other operations with fractions it does not always
+produce a fraction in irreducible format. This example shows also how to
+reduce an n-uple to its primitive part:
+\begin{everbatim*}
+\xinttheexpr gcd(7/300, 11/150, 13/60)\relax\newline
+$(7/300, 11/150, 13/60)\to
+(\xinttheexpr seq(reduce(x), x = [7/300, 11/150, 13/60]/gcd(7/300, 11/150, 13/60))\relax)$
+\end{everbatim*}
+
+Perhaps a future release will provide a |primpart()| function as built-in
+functionality.
+
+\funcdesc[x, y, ...]{lcm} computes the positive generator of the
+fractional ideal of rational numbers $x\mathbb Z \cap y\mathbb Z \cap ...
+\subset \mathbb Q$.\CHANGED{1.3d} When the inputs are integers it is
+advantageous to use a sub \csbxint{iiexpr}-ession, as the integer-only macro
+is more efficient than the one accepting general fractional inputs.
+\begin{everbatim*}
+\xinttheexpr lcm(7/300, 11/150, 13/60)\relax
+\end{everbatim*}
+
+\funcdesc[x, y, ...]{first} first item of the list argument:
+\begin{everbatim*}
+\xinttheiiexpr first(last(-7..3), 58, 97..105)\relax
+\end{everbatim*}
+\funcdesc[x, y, ...]{last} last item of the list argument:
+\begin{everbatim*}
+\xinttheiiexpr last(-7..3, 58, first(97..105))\relax
+\end{everbatim*}
+\funcdesc[x, y, ...]{reversed} reverses the order of the comma separated list:
+\begin{everbatim*}
+\xinttheiiexpr first(reversed(123..150)), last(reversed(123..150))\relax
+\end{everbatim*}
+\funcdesc[x, y, ...]{len} computes the number of items in a comma separated
+ list. Earlier syntax was |[a,b,...,z][0]| but since |1.2g| this now returns
+ the first element of the list.
+\begin{everbatim*}
+\xinttheiiexpr len(1..50, 101..150, 1001..1050)\relax
+\end{everbatim*}
+ \end{description}
+
+\subsubsection{Functions requiring dummy variables}
+\hypertarget{ssec:dummies}{}
+
+The ``functions'' \xintFor #1 in {add, mul, seq, subs, rseq, iter, rrseq,
+ iterr} \do {\func{#1}\xintifForLast{}{, }} use delimited macros to
+identify the ``|,<letter>=|'' part.\footnote{In the current implementation any
+ token can be used rather than a |=|. What is looked for is a comma followed
+ by two tokens, the first one will be the |<letter>|.} This is done in a way
+allowing nesting via correctly balanced parentheses. The |<letter>| must not
+have been assigned a value before via \csbxint{defvar}.
+
+This |,<letter>=| must be visible when the parser has finished absorbing the
+function name and the opening parenthesis. For \func{rseq}, \func{iter},
+\func{rrseq} and \func{iterr} this is delayed to after the parser has
+assimilated a starting part delimited by a semi-colon; this mandatory segment
+may be generated entirely by expansion and the |,<letter>=| may appear during
+this expansion.
+
+After |,<letter>=|, the expansion and parsing will generate a list of values
+(for example from an |a..b| specification, there may be multiple ones
+themselves separated by commas). After this step is complete the parser will
+know the values which will be assigned to |<letter>|. The special
+|<letter>=<integer>++| syntax offers a variant not pre-computing the iterated
+over list (which currently must thus proceed by steps of one.)
+
+\func{seq}, \func{rseq}, \func{iter}, \func{rrseq},
+\func{iterr} but not \func{add}, \func{mul}, \func{subs} admit the
+\keyword{omit}, \keyword{abort}, and \keyword{break}|()| keywords. In the case
+of a potentially infinite list generated by the |<integer>++| syntax, use of
+\keyword{abort} or of \keyword{break}|()| is mandatory, naturally.
+
+Dummy variables are necessarily single-character letters, and all lowercase and
+uppercase Latin letters are pre-configured for that usage.
+
+\begin{description}
+% [parsep=0pt,align=left,
+% leftmargin=0pt, itemindent=0pt,
+% labelwidth=-\fontdimen2\font, labelsep=\fontdimen2\font, labelindent=0pt,
+% listparindent=\leftmarginiii]
+
+\funcdesc[expr, letter=values]{subs} for variable substitution
+\begin{everbatim*}
+\xinttheexpr subs(subs(seq(x*z,x=1..10),z=y^2),y=10)\relax\newline
+\end{everbatim*}%
+Attention that |xz| generates an error, one must use explicitely |x*z|, else
+the parser expects a variable with name |xz|.
+
+|subs| is useful when defining macros for which some argument will be used
+more than once but may itself be a complicated expression or macro, and should
+be evaluated only once, for matters of efficiency.
+
+The substituted variable may be a comma separated list (this is impossible
+with |seq| which will always pick one item after the other from a list).
+\begin{everbatim*}
+\xinttheexpr subs([x]^2,x=-123,17,32)\relax
+\end{everbatim*}
+
+See the examples related to the |3x3| determinant in the
+\autoref{xintNewExpr} for an illustration of list substitution.
+
+\funcdesc[expr, letter=values]{add} addition
+\begin{everbatim*}
+\xinttheiiexpr add(x^3,x=1..50), add(x(x+1), x=1,3,19)\relax\newline
+\end{everbatim*}%
+See |`+`| for syntax without a dummy variable.
+
+\funcdesc[expr, letter=values]{mul} multiplication
+\begin{everbatim*}
+\xinttheiiexpr mul(x^2, x=1,3,19), mul(2n+1,n=1..10)\relax\newline
+\end{everbatim*}%
+See |`*`| for syntax without a dummy variable.
+
+\funcdesc[expr, letter=values]{seq} comma separated values generated according to a formula
+\begin{everbatim*}
+\xinttheiiexpr seq(x(x+1)(x+2)(x+3),x=1..10), `*`(seq(3x+2,x=1..10))\relax
+\end{everbatim*}
+\begin{everbatim*}
+\xinttheiiexpr seq(seq(i^2+j^2, i=0..j), j=0..10)\relax
+\end{everbatim*}
+
+\funcdesc[initial value; expr, letter=values]{rseq} recursive sequence, |@| for the previous value.
+\begin{everbatim*}
+\printnumber {\xintthefloatexpr subs(rseq (1; @/2+y/2@, i=1..10),y=1000)\relax }\newline
+\end{everbatim*}%
+ Attention: in the example above |y/2@| is interpreted as
+ |y/(2*@)|.\IMPORTANT{} With versions |1.2c| or earlier it would have been
+ interpreted as |(y/2)*@|.
+
+In case the initial stretch is a comma separated list, |@| refers at the first
+iteration to the whole list. Use parentheses at each iteration to maintain
+this ``nuple''. For example:
+\begin{everbatim*}
+\printnumber{\xintthefloatexpr rseq(1,10^6;
+ (sqrt([@][0]*[@][1]),([@][0]+[@][1])/2), i=1..7)\relax }
+\end{everbatim*}
+
+\funcdesc[initial value; expr, letter=values]{iter} is exactly like |rseq|, except that it only prints
+ the last iteration. Strangely it was lacking from |1.1| release, or rather
+ what was available from |1.1| to |1.2f| is what is called now \func{iterr}
+ (described below).
+
+\hypertarget{BrentSalamin}{}
+ The new |iter()| is convenient to handle compactly higher order iterations.
+ We can illustrate its use with an expandable (!)
+ implementation of the Brent-Salamin algorithm for the computation of $\pi$:
+\begin{everbatim*}
+\xintDigits:= 91;
+\xintdeffloatfunc BS(a, b, t, p):= (a+b)/2, sqrt(a*b), t-p(a-b)^2, \xintiiexpr 2p\relax;
+\xintthefloatexpr [88] % use 3 guard digits (output value is *rounded*)
+ iter(1, 1/sqrt(2), 1, 1; % initial values
+ ([@][0]-[@][1]<2[-45])? % if a-b is small enough stop iterating and ...
+ {break(([@][0]+[@][1])^2/[@][2])} % ... do final computation,
+ {BS(@)}, % else do iteration via pre-defined (for convenience) function BS.
+ i=1++) % This generates infinite iteration. The i is not used.
+\relax
+\xintDigits:=16;%
+\end{everbatim*}\newline
+ You can try with |\xintDigits:=1001;| and |2[-501]| in place of
+ |\xintDigits:=91;| and |2[-45]|, but don't make a final rounding to only
+ |88| digits of course ... and better wrap the whole thing in |\message| or
+ |\immediate\write128| because it will run in the right margin (about
+ \dtt{7}s on my laptop last time I tried). By the way here is how the |BS|
+ function is defined internally:
+\begin{everbatim}
+ Function BS for \xintfloatexpr parser associated to \XINT_flexpr_userfunc_B
+S with meaning macro:#1#2#3#4->\XINTinFloatDiv {\XINTinFloatAdd {#1}{#2}}{2},\X
+INTinFloatSqrtdigits {\XINTinFloatMul {#1}{#2}},\XINTinFloatSub {#3}{\XINTinFlo
+atMul {#4}{\XINTinFloatPowerH {\XINTinFloatSub {#1}{#2}}{2}}},\xintiiMul {2}{#4
+}
+\end{everbatim}
+
+
+
+\funcdesc[initial values; expr, letter=values]{rrseq} recursive sequence with multiple initial terms. Say, there are
+ |K| of them. Then |@1|, ..., |@4| and then |@@(n)| up to |n=K| refer to the
+ last |K| values. Notice the difference with |rseq| for which |@| refers to
+ the complete list of all initial terms if there are more than one and may
+ thus be a ``list'' object. This is impossible with |rrseq|. This construct
+ is effective for scalar finite order recursions, and may be perhaps a bit
+ more efficient than using the |rseq| syntax with a ``list'' value.
+\begin{everbatim*}
+\xinttheiiexpr rrseq(0,1; @1+@2, i=2..30)\relax
+\end{everbatim*}
+\begin{everbatim*}
+\xinttheiiexpr rseq(1; 2@, i=1..10)\relax
+\end{everbatim*}
+\begin{everbatim*}
+\xinttheiiexpr rseq(1; 2@+1, i=1..10)\relax
+\end{everbatim*}
+\begin{everbatim*}
+\xinttheiiexpr rseq(2; @(@+1)/2, i=1..5)\relax
+\end{everbatim*}
+
+\begin{everbatim*}
+\xinttheiiexpr rrseq(0,1,2,3,4,5; @1+@2+@3+@4+@@(5)+@@(6), i=1..20)\relax
+\end{everbatim*}
+
+I implemented an |Rseq| which at all times keeps the memory of \emph{all}
+previous items, but decided to drop it as the package was becoming big.
+
+\funcdesc[initial values; expr, letter=values]{iterr} same as |rrseq| but does not print any value until the last |K|.
+\begin{everbatim*}
+\xinttheiiexpr iterr(0,1; @1+@2, i=2..5, 6..10)\relax
+% the iterated over list is allowed to have disjoint defining parts.
+\end{everbatim*}
+\end{description}
+
+Recursions may be nested, with |@@@(n)| giving access to the values of the
+outer recursion\dots and there is even |@@@@(n)| to access the outer outer
+recursion but I never tried it!
+
+The following keywords may be placed within the generating expression of a
+\func{seq}, \func{rseq}, \func{iter}, \func{rrseq}, or
+\func{iterr}: :
+\begin{description}
+ \keyworddesc{abort} stop here and now.
+
+ \keyworddesc{omit} omit this value.
+
+ \keyworddesc{break} |break(stuff)| to abort and have |stuff| as last value.
+
+ \keyworddesc{<integer>++} serves to generate a potentially infinite list. In
+ conjunction with an \keyword{abort} or \keyword{break}|()| this is often
+ more efficient than iterating over a pre-established list of values.
+\begin{everbatim*}
+\xinttheiiexpr iter(1;(@>10^40)?{break(@)}{2@},i=1++)\relax
+\end{everbatim*}
+is the smallest power of 2 with at least fourty one digits.
+
+The |i=<integer>++| syntax (any letter is allowed in place of |i|) works only
+in the form |<letter>=<integer>++|, something like |x=10,17,30++| is not
+legal. The |<integer>| must be a \TeX-allowable integer.
+\begin{everbatim*}
+First Fibonacci number at least |2^31| and its index
+% we use iterr to refer via @1 and @2 to the previous and previous to previous.
+\xinttheiiexpr iterr(0,1; (@1>=2^31)?{break(i)}{@2+@1}, i=1++)\relax
+\end{everbatim*}
+\end{description}
+
+Some additional examples are to be found in \autoref{ssec:moredummies}.
+
+\subsubsection{Trigonometrical functions}
+
+See \xinttrigname.
+
+\subsubsection{Logarithm, exponential and power functions}
+
+See \xintlogname.
+
+\subsection{Tacit multiplication}
+\label{ssec:tacit multiplication}
+
+Tacit multiplication (insertion of a |*|) applies when the parser is currently
+either scanning the digits of a number (or its decimal part or scientific
+part, or hexadecimal input), or is looking for an infix operator, and:
+\begin{enumerate}[nosep, label=(\arabic*.)]
+\item \relax\emph{encounters a count or dimen or skip register or variable or an
+ \eTeX{} expression,} or
+\item \emph{encounters a sub-\csa{xintexpr}ession}, or
+\item \emph{encounters an opening parenthesis}, or
+\item \emph{encounters a
+ letter (which is interpreted as signaling the start of either a variable or
+ a function name)}, or
+\item (of course, only when in state "looking for an operator") \emph{encounters a digit}.
+\end{enumerate}
+
+\begin{framed}
+ For example, if |x, y, z| are variables all three of |(x+y)z|, |x(y+z)|,
+ |(x+y)(x+z)| will create a tacit multiplication.
+
+ Furthermore starting with release
+ |1.2e|, %\MyMarginNote[\kern\dimexpr\FrameSep+\FrameRule\relax]{Changed}
+ whenever tacit multiplication is applied, in all cases it \emph{always}
+ ``ties'' more\IMPORTANT{} than normal multiplication or division, but
+ still less than power. Thus |x/2y| is interpreted as |x/(2y)| and
+ similarly for |x/2max(3,5)| but |x^2y| is still interpreted as |(x^2)*y|
+ and |2n!| as |2*n!|.
+
+\begin{everbatim*}
+\xintdefvar x:=30;\xintdefvar y:=5;%
+\xinttheexpr (x+y)x, x/2y, x^2y, x!, 2x!, x/2max(x,y)\relax
+\end{everbatim*}
+
+ Since |1.2q| tacit multiplication is triggered also in cases such as
+ |(1+2)5| or |10!20!30!|.
+
+\begin{everbatim*}
+\xinttheexpr (10+7)5, 4!4!, add(i, i=1..10)10, max(x, y)100\relax
+\end{everbatim*}
+
+ The ``tie more'' rule applies to all cases of tacit multiplication. It
+ impacts only situations when a division was the last seen operator, as the
+ normal rule for the \xintexprname parsers is left-associativity in case of
+ equal precedence.
+\begin{everbatim*}
+\xinttheexpr 1/(3)5, (1+2)/(3+4)(5+6), 2/x(10), 2/10x, 3/y\xintiiexpr 5+6\relax, 1/x(y)\relax\
+differ from\newline\xinttheexpr 1/3*5, (1+2)/(3+4)*(5+6), 2/x*(10), 2/10*x,
+ 3/y*\xintiiexpr 5+6\relax, 1/x*(y)\relax\par
+\end{everbatim*}
+\end{framed}
+
+ Note that |y|\csbxint{theiiexpr}| 5+6\relax| would have tried to use a variable
+ with name |y11| rather than doing |y*11|: tacit multiplication works only
+ in front of sub-\csbxint{expr}essions, not in front of
+ \csbxint{theexpr}essions which are unlocked into explicit digits.
+
+
+Here is an expression whose meaning is
+ completely modified by the ``tie more'' property of tacit multiplication:
+
+
+\begin{everbatim}
+\xintdeffunc e(z):=1+z(1+z/2(1+z/3(1+z/4)));
+\end{everbatim}
+will be parsed as
+\begin{everbatim}
+\xintdeffunc e(z):=1+z*(1+z/(2*(1+z/(3*(1+z/4)))));
+\end{everbatim}
+which is not at all the presumably hoped for:
+\begin{everbatim}
+\xintdeffunc e(z):=1+z*(1+(z/2)*(1+(z/3)*(1+(z/4))));
+\end{everbatim}
+% This case can be handled this way:
+% \begin{everbatim}
+% \xintdeffunc e(z):=(((z/4+1)z/3+1)z/2+1)z+1;
+% \end{everbatim}
+
+
+\subsection{More examples with dummy variables}
+\label{ssec:moredummies}
+
+These examples were first added to this manual at the time of the |1.1|
+release (|2014/10/29|).
+
+\begin{everbatim*}
+Prime numbers are always cool
+\xinttheiiexpr seq((seq((subs((x/:m)?{(m*m>x)?{1}{0}}{-1},m=2n+1))
+ ??{break(0)}{omit}{break(1)},n=1++))?{x}{omit},
+ x=10001..[2]..10200)\relax
+\end{everbatim*}
+
+The syntax in this last example may look a bit involved (... and it is so I
+admit). First |x/:m| computes
+|x modulo m| (this is the modulo with respect to truncated division, which
+here for positive arguments is like Euclidean division; in
+|\xintexpr...\relax|, |a/:b| is such that |a = b*(a//b)+a/:b|, with |a//b| the
+algebraic quotient |a/b| truncated to an integer.). The |(x)?{yes}{no}|
+construct checks if |x| (which \emph{must} be within parentheses) is true or
+false, i.e. non zero or zero. It then executes either the |yes| or the |no|
+branch, the non chosen branch is \emph{not} evaluated. Thus if |m| divides |x|
+we are in the second (``false'') branch. This gives a |-1|. This |-1| is the
+argument to a |??| branch which is of the type |(y)??{y<0}{y=0}{y>0}|, thus here
+the |y<0|, i.e., |break(0)| is chosen. This |0| is thus given to another |?|
+which consequently chooses |omit|, hence the number is not kept in the list.
+The numbers which survive are the prime numbers.
+
+\begin{everbatim*}
+The first Fibonacci number beyond |2^64| bound is
+\xinttheiiexpr subs(iterr(0,1;(@1>N)?{break(i)}{@1+@2},i=1++),N=2^64)\relax{}
+and the previous number was its index.
+\end{everbatim*}
+
+% A006877 In the `3x+1' problem, these values for the starting value set new
+% records for number of steps to reach 1. (Formerly M0748) 14 1, 2, 3, 6, 7,
+% 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161,
+% 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239,
+% 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935,
+% 626331, 837799
+
+One more recursion:
+\begin{everbatim*}
+\def\syr #1{\xinttheiiexpr rseq(#1; (@<=1)?{break(i)}{odd(@)?{3@+1}{@//2}},i=0++)\relax}
+The 3x+1 problem: \syr{231}\par
+\end{everbatim*}
+
+OK, a final one:
+\begin{everbatim*}
+\def\syrMax #1{\xinttheiiexpr iterr(#1,#1;even(i)?
+ {(@2<=1)?{break(i/2)}{odd(@2)?{3@2+1}{@2//2}}}
+ {(@1>@2)?{@1}{@2}},i=0++)\relax }
+With initial value 1161, the maximal number attained is \syrMax{1161} and that latter
+number is the number of steps which was needed to reach 1.\par
+\end{everbatim*}
+
+Look at the
+ \hyperlink{BrentSalamin}{Brent-Salamin algorithm implementation} for a more
+ interesting recursion.
+
+% \begin{everbatim*}
+% \newcommand\Factors [1]{\xinttheiiexpr
+% subs(seq((i/:3=1)?{omit}{[L][i]},i=0..len(L)-1),
+% L=rseq(#1;(p^2>[@][0])?{([@][0]>1)?{break(1,[@][0],1)}{abort}}
+% {(([@][0])/:p)?{omit}
+% {iter(([@][0])//p; (@/:p)?{break(@,p,e)}{@//p},e=1++)}},p=2++))\relax }
+% \Factors {41^4*59^2*29^3*13^5*17^8*29^2*59^4*37^6}
+% \end{everbatim*}
+
+% This might look a bit scary, I admit.%
+% %
+% \footnote{Look at the
+% \hyperlink{BrentSalamin}{Brent-Salamin algorithm implementation} for a much
+% saner example.}
+% %
+
+% \xintexprname has minimal tools and
+% is obstinate about doing everything expandably! We are hampered by absence of a
+% notion of ``nuple''. The algorithm divides |N| by |2| until no more possible,
+% then by |3|, then by |4| (which is silly), then by |5|, then by |6| (silly
+% again), \dots.
+
+% The variable |L=rseq(#1;...)| expands, if one follows the steps, to a comma
+% separated list starting with the initial (evaluated) |N=#1| and then
+% pseudo-triplets where the first item is |N| trimmed of small primes, the
+% second item is the last prime divisor found, and the third item is its
+% exponent in original |N|.
+
+% The algorithm needs to keep handy the last computed quotient by prime powers,
+% hence all of them, but at the very end it will be cleaner to get rid of them
+% (this corresponds to the first line in the code above). This is achieved in a
+% cumbersome inefficient way; indeed each item extraction |[L][i]| is costly: it
+% is not like accessing an array stored in memory, due to expandability, nothing
+% can be stored in memory! Nevertheless, this step could be done here in a far
+% less inefficient manner if there was a variant of |seq| which, in the spirit
+% of \csbxint{iloopindex}, would know how many steps it had been through so far.
+% This is a feature to be added to |\xintexpr|! (as well as a |++| construct
+% allowing a non unit step).
+
+% Notice that in |iter(([@][0])//p;| the |@| refers to the previous triplet (or
+% in the first step to |N|), but the latter |@| showing up in |(@/:p)?| refers
+% to the previous value computed by |iter|.
+
+% \begin{snugframed}
+% Parentheses are essential in |..([y][0])| else the parser will see |..[| and
+% end up in ultimate confusion, and also in |([@][0])/:p| else the parser will
+% see the itemwise operator |]/| on lists and again be very confused (I could
+% implement a |]/:| on lists, but in this situation this would also be very
+% confusing to the parser.)
+% \end{snugframed}
+
+% See \autoref{ssec:factorize} for a routine |\Factorize| written directly with
+% \xintname macros. Last time I checked |\Factors| was about seven times slower
+% than |\Factorize| in test cases such as
+% |16246355912554185673266068721806243461403654781833| and others. Among the
+% various things explaining the speed difference, there is fact that the
+% |\Factorize| algorithm step by increments of two, not one, and also it divides
+% only once, obtaining quotient and remainder in one go. These two things
+% already make for a speed-up factor of about four. Thus, |\Factors| is not
+% completely inefficient in comparison, and was quite easier to come up with
+% than |\Factorize|.
+
+\subsection{User defined variables}
+\label{ssec:uservariables}
+\label{xintdefvar}
+\label{xintdefiivar}
+\label{xintdeffloatvar}
+
+Since release |1.1| it is possible to make an assignment to a variable name
+and let it be known to the parsers of \xintexprname.
+\begin{everbatim*}
+% definitions
+\xintdefvar Pi:=3.141592653589793238462643;%
+\xintdefvar x_1 := 10;\xintdefvar x_2 := 20;\xintdefvar y@3 := 30;%
+\xintdefiivar List := seq(x(x+1)/2, x=0..10);%
+% usage
+$x_1\cdot x_2\cdot y@3+1=\xinttheiiexpr x_1*x_2*y@3+1\relax$\newline
+$\pi^{100}\approx\xintthefloatexpr Pi^100\relax$\newline
+\xinttheiiexpr List\relax\ contains \xinttheiiexpr [List][7]\relax.\par
+\end{everbatim*}
+
+For catcodes issues (particularly, for the semi-colon used to delimit the
+fetched expression), see the discussion of \csbxint{exprSafeCatcodes}.
+\begin{framed}
+ Both syntaxes |\xintdefvar foo := <expr>;| and |\xintdefvar foo = <expr>;|
+ are accepted.\NewWithf{1.3c}
+\end{framed}
+Spaces in the variable name or around the equal sign are removed and are
+immaterial.
+
+As shown above a variable can be assigned a "list" value.
+Simultaneous assignments are allowed:
+\begin{everbatim*}
+\xintdefvar x1, x2, x3 := 3, 10^2, -1;%
+\xintdefiivar A, B := 1500, 135;%
+\xintloop
+\xintifboolexpr{B}
+ {\xintdefiivar A, B := B, A 'mod' B;\iftrue}
+ {\iffalse}
+\repeat
+The last non zero remainder is \xinttheiiexpr A\relax.
+\end{everbatim*}
+
+The variable names are expanded in an |\edef| (and stripped of spaces).
+Example:
+\begin{everbatim}
+\xintdefvar x\xintListWithSep{, x}{\xintSeq{0}{10}} := seq(2**i, i = 0..10);%
+\end{everbatim}
+This defines the variables |x0|, |x1|, \dots, |x10| for future usage.
+
+Legal variable names are composed of letters, digits, |_| and |@| and characters.
+A variable name must start with a letter:
+\begin{itemize}[nosep]
+\item the first character can not be a digit,
+\item and names starting with |@| or |_| are reserved (worldwide,
+ extra-terrestrial locations included if under UNO supervision) by author for
+ internal purposes.
+\end{itemize}
+
+|x_1x| is a licit variable name, as well as |x_1x_| and |x_1x_2| and |x_1x_2y|
+etc... hence tacit multiplication fails in cases like |x_1x_2| with |x_1| and
+|x_2| defined as variables; the parser goes not go to the effort of tracing
+back its steps, and it is too late when it realizes |x_1x_2| isn't a valid
+variable name. An explicit infix |*| operator is needed.
+
+Single letter names |a..z| and |A..Z| are pre-declared by the package for use
+as special type of variables called ``dummy variables''. It is allowed to
+overwrite their original meanings and assign them values. See further
+\csbxint{unassignvar}.
+
+The assignments are done with \csa{xintdefvar}, \csa{xintdefiivar}, or
+\csa{xintdeffloatvar} and the variable value will be computed using respectively
+\csbxint{expr}, \csbxint{iiexpr} or \csbxint{floatexpr}. It can then be used
+in all three parsers if the parser understands the format. Currently this
+means that variables using \csa{xintdefvar} or \csa{xintdeffloatvar} can not
+be used in the \csbxint{iiexpr} parser, and variables defined via
+\csa{xintdefiivar} can be used in all parsers.
+
+When defining a variable with \csa{xintdeffloatvar}, it is important to know
+that the rounding to \csbxint{theDigits} digits of precision happens inside
+\csa{xintfloatexpr} only if an operation is executed. Thus, for a variable
+definition which uses no operations (and \emph{only} for them), the value is
+recorded inside the variable with all its digits preserved. If
+\csbxint{theDigits} changes afterwards, the variable will be rounded to that
+precision in force at time of use.
+\begin{everbatim*}
+\xintdeffloatvar e:=2.7182818284590452353602874713526624977572470936999595749669676;%
+\xinttheexpr e\relax\newline % shows the recorded value
+\xintthefloatexpr e\relax\newline % output rounds
+\xintthefloatexpr 1+e\relax\newline % the rounding was done by addition (trust me...)
+\xintdeffloatvar e:=float(2.7182818284590452353602874713526624977572470936999595749669676);%
+\xinttheexpr e\relax\par % use of float forced immediate rounding
+\end{everbatim*}
+
+In the next examples we examine the effect of cumulated float operations on
+rounding errors:
+\begin{everbatim*}
+\xintdefvar e_1:=add(1/i!, i=0..10);% exact sum
+\xintdeffloatvar e_2:=add(1/i!, i=0..10);% float sum
+\xintthefloatexpr e_1, e_2\relax\newline
+\xintdefvar e_3:=e_1+add(1/i!, i=11..20);% exact sum
+\xintdeffloatvar e_4:=e_2+add(1/i!, i=11..20);% float sum
+\xintthefloatexpr e_3, e_4\relax\newline
+\xintdeffloatvar e:=2.7182818284590452353602874713526624977572470936999595749669676;%
+\xintDigits:=24;
+\xintthefloatexpr[16] e, e^1000, e^1000000\relax (e rounded to 24 digits first)\newline
+\xintDigits:=16;
+\xintthefloatexpr e, e^1000, e^1000000\relax (e rounded to 16 digits first)\par
+\end{everbatim*}
+
+With |\xintverbosetrue| the values of the assigned variables will be written
+to the log. For example like this (the line numbers here are artificial):
+
+\begin{everbatim}
+Package xintexpr Info: (on line 2875)
+ Variable "e" defined with value 2718281828459045235360287471352662497757247
+0936999595749669676[-61].
+Package xintexpr Info: (on line 2879)
+ Variable "e" defined with value 2718281828459045[-15].
+Package xintexpr Info: (on line 2886)
+ Variable "e_1" defined with value 9864101/3628800[0].
+Package xintexpr Info: (on line 2887)
+ Variable "e_2" defined with value 2718281801146385[-15].
+Package xintexpr Info: (on line 2889)
+ Variable "e_3" defined with value 6613313319248080001/2432902008176640000[0
+].
+Package xintexpr Info: (on line 2890)
+ Variable "e_4" defined with value 2718281828459046[-15].
+Package xintexpr Info: (on line 2892)
+ Variable "e" defined with value 2718281828459045235360287471352662497757247
+0936999595749669676[-61].
+\end{everbatim}
+
+
+\subsubsection{\csh{xintunassignvar}}
+\label{xintunassignvar}
+
+Variable declarations obey the current scope. To let a (multi-letter) name be
+unknown to (all parsers of) \xintexprname\CHANGED{1.3d} without waiting the
+end of the scope one issues \csa{xintunassignvar}\marg{variable}. Prior to
+|1.3d|, this only redefined the variable to represent the value \dtt{0}.
+
+In the special case of \csa{xintunassignvar}\marg{letter}, the effect is
+different,\IMPORTANT{} as it is synonymous with
+\csbxint{newdummy}\marg{letter}: the (catcode 11) \meta{letter} recovers or
+acquires meaning as a dummy variable in the current scope.
+\begin{everbatim*}
+\xintFor #1 in {e_1, e_2, e_3, e_4, e} \do {\xintunassignvar {#1}}
+% overwriting a dummy letter
+\xintdefvar i := 3;%
+\xinttheiiexpr add(i, i = 1..10)\relax\ ("i" has the fixed value 3)\newline
+\xintunassignvar{i}% back to normal
+\xinttheiiexpr add(i, i = 1..10)\relax\ ("i" is again a dummy variable)\par
+\end{everbatim*}
+
+Under \csbxint{globaldefstrue} regime the effect of \csa{xintunassignvar} is
+global.
+
+\subsubsection{\csh{xintnewdummy}}
+\label{xintnewdummy}
+
+Any catcode 11 character can serve as a dummy variable, via this declaration:
+\begin{everbatim}
+\xintnewdummy{<character>}
+\end{everbatim}
+For example with Xe\TeX\ or Lua\LaTeX\ the following works:
+\begin{everbatim}
+% use a Unicode engine
+\input xintexpr.sty
+\xintnewdummy ξ% or any other letter character !
+\xinttheexpr add(ξ, ξ=1..10)\relax
+\bye
+\end{everbatim}
+Under \csbxint{globaldefstrue} regime the effect of \csa{xintnewdummy} is
+global.
+
+\subsubsection{\csh{xintensuredummy}, \csh{xintrestorelettervar}}
+\label{xintensuredummy}
+\label{xintrestorelettervar}
+
+Use\NewWith{1.3e}
+\begin{everbatim}
+\xintensuredummy{<character>}
+...
+... code using the (catcode 11) character as a dummy variable
+...
+\xintrestorelettervar{<character>}
+\end{everbatim}
+if other parts need the letter as an assigned variable name. For example
+\xinttrigname being written at high level needs a few genuine dummy variables,
+and it uses \csbxint{ensuredummy} to be certain everything is ok.
+
+
+\subsection{User defined functions}
+\label{ssec:userfunctions}
+\def\HOOKLOCALTOC#1#2#3{}
+\etocsetnexttocdepth{subsubsection}\localtableofcontents
+\let\HOOKLOCALTOC\empty
+
+\subsubsection{\csh{xintdeffunc}}
+\label{xintdeffunc}
+
+Since release |1.2c| it is possible to declare functions:
+\begin{everbatim*}
+\xintdeffunc
+ Rump(x,y):=1335 y^6/4 + x^2 (11 x^2 y^2 - y^6 - 121 y^4 - 2) + 11 y^8/2 + x/2y;
+\end{everbatim*}(notice the numerous tacit multiplications in this expression;
+and that |x/2y| is interpreted as |x/(2y)|.)
+
+
+
+Here are a few important items (bookmark this for reading again later once you
+have gained experience in using this interface...):
+\begin{itemize}
+\item The function names are composed of letters, digits, underscores or |@|
+ signs. A function name must start with a letter. It may be a single letter
+ (see \autoref{sssec:overload}).
+\item The variables used in the function signature are single letters
+ (lowercase or uppercase) which have \emph{not} been re-declared via
+ \csbxint{defvar} as assigned variables. The choice of the letters is
+ entirely up to the user and has nil influence on the actual function,
+ naturally.
+\item A function can have at most nine variables.
+\item The mechanism for functions shares a common code base with the one
+ implementing \csbxint{NewExpr}. This means it shares its features and also
+ its \hyperref[sssec:limitations]{limitations}. %
+
+ Most notably,\IMPORTANT{} the |1.3d| \csbxint{eval}, \csbxint{ieval},
+ \csbxint{floateval} can not be used inside the parsed
+ expression: only the lower level syntax
+ \csbxint{expr}|...\relax| et al. is accepted (and not
+ \csbxint{theexpr} et al.\CHANGED{1.3e} which are about the same as \csbxint{eval} et al.).
+ Prior to |1.3e| \csbxint{NewExpr} and \csbxint{deffunc} diverged on that
+ point, but their behaviour is now identical.
+\item In order to allow recursive constructs, a core mechanism is implemented
+ which inhibits immediate expansion in a new definition; think of
+ \csbxint{deffunc} as being
+ analogous to a |\protected\edef|. This means that another function
+ |bar(x,..)| whose definition uses |foo(17.5)| will only store that it should
+ at some point compute
+ |foo(17.5)|, in place of storing its actual value.
+\item If |foo(x)| definition is not recursive, then you should use
+ \csbxint{defefunc} rather. This is analogous to an |\edef| without the
+ |\protected|.\NewWith{1.3e} Then |bar(x,...)| (defined with
+ \csbxint{deffunc} or \csbxint{defefunc}) will store the actual
+ evaluation of |foo(17.5)|.
+\item If |foo(x)| definition does need recursivity and you want to use
+ efficiently |foo(17.5)| in another function definition, assign it to a
+ variable (see \csbxint{defvar}) and use that variable rather in the
+ definition of |bar()|. Notice that only the variable value, not its name,
+ gets stored, so the variable name is a temporary auxiliary. In the analogy
+ with TeX macros one can think of \csbxint{defvar} or \csbxint{eval} as
+ producing expansion like typesetting does, whereas \csbxint{deffunc} is like
+ a
+ |\protected\edef|, and \csbxint{defefunc} an |\edef| not making the defined
+ function |\protected|.
+\item A function declared via \csbxint{deffunc} remains unknown to
+ \csbxint{floatexpr} (or \csbxint{floateval}). See \csbxint{deffloatfunc},
+ \csbxint{defiifunc}. One can use the same formula in a new definition, but
+ if one wants the expansion to execute in a parser independent way, one can
+ transfer a function like this:\NewWith{1.3e}
+\begin{everbatim}
+\xintdeffloatfunc foo(x) := float(\xintexpr foo(x)\relax);
+\end{everbatim}
+ The \func{float} wrapper is in order for the float variant to produce an
+ already-rounded value, possibly speeding-up usage if used as input for other
+ functions. And in the reverse direction one can do:
+\begin{everbatim}
+\xintdeffunc bar(x) := \xintfloatexpr bar(float(x))\relax;
+\end{everbatim}
+ With this the transplanted float-function will expand in \csbxint{expr} as it
+ would have in \csbxint{floatexpr}, i.e. using float operations; this is different
+ from declaring the function again with the same expression as used for the
+ original, as it would have then been parsed with a mapping of infix operators to the
+ macros doing the exact operations, not the floating point ones.
+
+ The |float(x)| above is not mandatory but recommended. The macro associated
+ to the user float function |bar(x)| may use many times its argument |x| and
+ it does not care to round it, because it basically expect an already rounded
+ value; but in \csbxint{expr} that value could very well be a fraction
+ |19/13| and its float rounding will be done again by each float macro
+ receiving it as argument; with a \func{float} used as above this will have
+ already been done once and the ulterior roundings are faster: they have
+ nothing to do apart from realizing that they have nothing to do.... One can
+ also use \func{sfloat}, this would serve to nothing for the |19/13| case but
+ would possibly for a short integer input involved in multiplications.
+\item If the expression uses an \func{iterr}, \func{rseq}, or \func{rrseq}) it
+ must hide its |;| inside braces to let it not be confused with the ending
+ |;|.
+\item \csbxint{deffunc} tries to set the catcode of |;| before fetching the
+ expression as a delimited parameter, but this is too late if the whole thing
+ was already fetched as argument to some macro. On the other hand the
+ (reasonable) catcode of the |:| does not matter at all, actually this colon
+ before the equality sign is optional.
+\end{itemize}
+
+
+A function once declared is a first class citizen, its
+expression is entirely parsed and converted into a big nested \fexpan dable
+macro. When used its action is via this defined macro. For example
+\begin{everbatim*}
+\xintdeffunc
+ e(z):=(((((((((z/10+1)z/9+1)z/8+1)z/7+1)z/6+1)z/5+1)z/4+1)z/3+1)z/2+1)z+1;
+\end{everbatim*}
+creates a macro whose meaning one can find in the log file, after
+|\xintverbosetrue|. Here it is:
+\begin{everbatim}
+ Function e for \xintexpr parser associated to \XINT_expr_userfunc_e with me
+aning macro:#1->\xintAdd {\xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xi
+ntDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\x
+intAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\
+xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {#1}{10}}{1}}{#1}}{9}
+}{1}}{#1}}{8}}{1}}{#1}}{7}}{1}}{#1}}{6}}{1}}{#1}}{5}}{1}}{#1}}{4}}{1}}{#1}}{3}}
+{1}}{#1}}{2}}{1}}{#1}}{1}
+\end{everbatim}
+
+The main problem is that dummy variables in the defining expression are usable
+only to the extent that their values are numerical. For example
+%
+\centeredline{|\xintdeffunc f(x):=add(i^2,i=1..x);|}
+%
+ is not currently possible. See \autoref{sssec:limitations} and the next
+ subsection.
+
+% In this example one could use the alternative syntax with list
+% operations:%
+% %
+% \footnote{It turns out |`+`(seq(i^2, i=1..x))| would work here, but this isn't
+% always the case with |seq| constructs.}
+% %! par exemple \xintdeffunc g(a,b,c):=seq(x+a+b,x=1..c);
+% %! donne une erreur avec g(0,0,2). Mardi 08 mars 2016 à 09:12:43.
+% \begin{everbatim*}
+% \xintdeffunc f(x):=`+`([1..x]^2);\xinttheexpr seq(f(x), x=1..20)\relax
+% \end{everbatim*}
+
+% Side remark: as the |seq(f(x), x=1..10)| does many times the same
+% computations, an |rseq| here would be more efficient:\footnote{Note that
+% |omit| and |abort| are not usable in |add| or |mul| (currently).}
+% \begin{everbatim*}
+% \xinttheexpr rseq(1; (x>20)?{abort}{@+x^2}, x=2++)\relax
+% \end{everbatim*}
+
+On the other hand a construct like the following has no issue, as the values
+iterated over do not depend upon the function parameters:
+\begin{everbatim*}
+\xintdeffunc f(x):=iter(1{;} @*x/i+1, i=10..1);% one must hide the first semi-colon !
+\xinttheexpr e(1), f(1)\relax
+\end{everbatim*}
+
+
+Another problem is with trying to do |g(f(x))| where |g()| expects two
+arguments and |f()| was defined to output two comma separated values. This
+works fine numerically but not with a variable |x| inside the definition of
+another function.
+
+See \autoref{sssec:csv} for more about comma separated values in output and
+input.
+
+\subsubsection{\csh{xintdefiifunc}}
+\label{xintdefiifunc}
+
+With \csbxint{deffunc} the created function is known by the \csbxint{expr}
+parser only.
+ Cryptic error messages will signal failures of using with another parser a
+ function declared for one parser (particularly if the name is a single
+ letter, because the parser will have made an attempt to use the letter as a
+ dummy variable.)
+
+For usage in the \csbxint{iiexpr} parser, it is required to use
+\csa{xintdefiifunc}.
+
+\subsubsection{\csh{xintdeffloatfunc}}
+\label{xintdeffloatfunc}
+
+With \csbxint{deffunc} the created function is known by the \csbxint{expr}
+parser only. For usage in the \csbxint{floatexpr} parser, it is required to use
+\csa{xintdeffloatfunc}. See \csbxint{deffunc} for more information on this
+point.
+
+
+\subsubsection{Some examples of recursive definitions}
+\label{sssec:recursive}
+
+Since |1.3|, it is possible to make recursive definitions. Here
+are two examples:
+\begin{everbatim*}
+\xintdeffunc GCD(a,b):=if(b,GCD(b,a/:b),a);
+\end{everbatim*}
+This of course is the Euclide algorithm: it will be here applied to variables
+which may be fractions. For example:
+\begin{everbatim*}
+\xinttheexpr GCD(385/102, 605/238)\relax
+\end{everbatim*}
+
+But there is already a built-in \func{gcd} (which
+accepts arbitrarily many arguments):
+\begin{everbatim*}
+\xinttheexpr gcd(385/102, 605/238)\relax
+\end{everbatim*}
+
+Since |1.3d| the built-in \func{gcd} accepts inputs being fractions and
+produces the positive generator of the corresponding fractional ideal. And
+loading of \xintgcdname is not needed for this function to be available.\NewWith{1.3d}
+
+Our second example is modular exponentiation:
+\begin{everbatim*}
+\xintdefiifunc powmod_a(x, m, n) :=
+ ifone(m,
+ % m=1, return x modulo n
+ x /: n,
+ % m > 1 test if odd or even and do recursive call
+ if(odd(m), (x*sqr(powmod_a(x, m//2, n))) /: n,
+ sqr(powmod_a(x, m//2, n)) /: n
+ )
+ );
+\xintdefiifunc powmod(x, m, n) := if(m, powmod_a(x, m, n), 1);
+\end{everbatim*}
+I have made the definition here for the |\xintiiexpr| parser; we could do the
+same for the |\xintexpr|-parser (but its usage with big powers would quickly
+create big denominators, think |powmod(1/2, 1000, 1)| for example.)
+\begin{everbatim*}
+\xinttheiiexpr seq(powmod(x, 1000, 128), x=9, 11, 13, 15, 17, 19, 21)\relax\par
+\end{everbatim*}
+The function assumes the exponent is non-negative (the Python |pow| behaves
+the same), but zealous users will add the necessary code for negative
+exponents, after having defined another function for modular inverse!
+
+It is mandatory for such definitions to use the \func{if} function, and not
+the |(x)?{A}{B}| construct which much choose a branch. The parsing of the
+\func{if} function keeps the memory of the two alternative branches; to the
+contrary, the \emph{constructed} |powmod| function will expand \emph{only} the
+then relevant branch. This is of course absolutely needed for things such as
+the Euclide algorithm where it would be catastrophic to evaluate both branches
+as the first one involves a division by |b| and the algorithm stops only when
+|b| is actually zero.
+
+If function |A| needs function |B| which needs function |A| start by giving to
+|B| some dummy definition, define |A|, then define |B| properly. TODO: add
+some example here...
+
+\subsubsection{\csh{xintdefefunc}}
+\label{xintdefefunc}
+
+Think of former described variant \csbxint{deffunc} as doing the same as this
+\csbxint{defefunc}\NewWith{1.3e} but with an extra protection added to the
+defined function. If you don't need recursivity, \csbxint{defefunc} is the
+better tool, as numerical evaluation involving it and arising in further
+definitions will be converted on the spot to actual values, rather than being
+delayed for expansion to actual use of the defined function in \csbxint{eval}
+or \csbxint{ieval}.
+
+\subsubsection{\csh{xintdeffloatefunc}}
+\label{xintdeffloatefunc}
+
+The ``unprotected'' variant of \csbxint{deffloatfunc}.\NewWith{1.3e}
+
+\subsubsection{\csh{xintdefiiefunc}}
+\label{xintdefiiefunc}
+
+The ``unprotected'' variant of \csbxint{defiifunc}.\NewWith{1.3e}
+
+
+\subsubsection{Using the same name for both a variable and a function}
+\label{sssec:overload}
+
+It is licit to overload a variable name (all Latin letters are predefined as
+dummy variables) with a function name and vice versa. The parsers will decide
+from the context if the function or variable interpretation must be used
+(dropping various cases of tacit multiplication as normally applied).
+\begin{everbatim*}
+\xintdefiifunc f(x):=x^3;
+\xinttheiiexpr add(f(f),f=100..120)\relax\newline
+\xintdeffunc f(x,y):=x^2+y^2;
+\xinttheexpr mul(f(f(f,f),f(f,f)),f=1..10)\relax
+\xintunassigniiexprfunc{f}\xintunassignexprfunc{f}%
+\end{everbatim*}
+
+% N.B.: we have declared in this section |f| and |g| as functions. They remain
+% usable as dummy variables, but tacit multiplication in front of parentheses is
+% dropped, in order for their function meanings to prevail.
+
+% \begin{everbatim*}
+% \xintdeffunc f(x):=x^2;
+% \xinttheexpr seq(f(f+f), f= 1..10)\relax\newline % f is used both as function and dummy variable
+% \xinttheexpr seq(f*(f+f), f= 1..10)\relax % f is used as dummy variable
+% \xintunassignexprfunc{f}\newline % drop meaning as function
+% \xinttheexpr seq(f(f+f), f= 1..10)\relax % f as dummy variable, tacit multiplication applies
+% \end{everbatim*}
+
+
+\subsubsection{\csh{xintunassignexprfunc}, \csh{xintunassigniiexprfunc},
+ \csh{xintunassignfloatexprfunc}}
+\label{xintunassignexprfunc}
+\label{xintunassigniiexprfunc}
+\label{xintunassignfloatexprfunc}
+
+Function names can be unassigned via \csa{xintunassignexprfunc}\marg{name},
+\csa{xintunassigniiexprfunc}\marg{name}, and
+\csa{xintunassignfloatexprfunc}\marg{name}.\NewWith{1.3d}
+\begin{everbatim*}
+\xintunassignexprfunc{e}
+\xintunassignexprfunc{f}
+\end{everbatim*}
+
+Warning: no check is done to avoid undefining built-in functions...
+
+\subsubsection{\csh{ifxintverbose} conditional}
+\label{xintverbosetrue}
+\label{xintverbosefalse}
+\label{ifxintverbose}
+
+With |\xintverbosetrue| the meanings of the
+functions (or rather their associated macros) will be written to the log. For
+example the |Rump| declaration above generates this in the log file:
+\begin{everbatim}
+ Function Rump for \xintexpr parser associated to \XINT_expr_userfunc_Rump w
+ith meaning macro:#1#2->\xintAdd {\xintAdd {\xintAdd {\xintDiv {\xintMul {1335}
+{\xintPow {#2}{6}}}{4}}{\xintMul {\xintPow {#1}{2}}{\xintSub {\xintSub {\xintSu
+b {\xintMul {11}{\xintMul {\xintPow {#1}{2}}{\xintPow {#2}{2}}}}{\xintPow {#2}{
+6}}}{\xintMul {121}{\xintPow {#2}{4}}}}{2}}}}{\xintDiv {\xintMul {11}{\xintPow
+{#2}{8}}}{2}}}{\xintDiv {#1}{\xintMul {2}{#2}}}
+\end{everbatim}
+and the declaration |\xintdeffunc f(x):=iter(1{;} @*x/i+1, i=10..1);| generates:
+\begin{everbatim}
+ Function f for \xintexpr parser associated to \XINT_expr_userfunc_f with me
+aning macro:#1->\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\xi
+ntAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\x
+intMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\
+xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {\xintAdd {\xintDiv {\xintMul {
+1}{#1}}{10/1[0]}}{1}}{#1}}{9/1[0]}}{1}}{#1}}{8/1[0]}}{1}}{#1}}{7/1[0]}}{1}}{#1}
+}{6/1[0]}}{1}}{#1}}{5/1[0]}}{1}}{#1}}{4/1[0]}}{1}}{#1}}{3/1[0]}}{1}}{#1}}{2/1[0
+]}}{1}}{#1}}{1/1[0]}}{1}
+\end{everbatim}
+
+Starting with |1.2d| the definitions made by \csbxint{NewExpr} have local
+scope, hence this is also the case with the definitions made by
+\csbxint{deffunc}. See also \csb{ifxintglobaldefs} conditional.
+
+\subsubsection{\csh{ifxintglobaldefs} conditional}
+\label{xintglobaldefstrue}
+\label{xintglobaldefsfalse}
+\label{ifxintglobaldefs}
+
+If true user defined variables (\csbxint{defvar}, ...) and functions
+(\csbxint{deffunc}, ...) for the expression parsers,\NewWith{1.3c} as well as
+macros obtained via \csbxint{NewExpr} et al have global scope. If false
+(default) they have local scope.
+
+\subsubsection{Functions expanding to comma separated values}
+\label{sssec:csv}
+
+It is possible to define functions which expand to comma-separated values, for
+example the declarations:
+\begin{everbatim*}
+\xintdeffunc f(x):= x, x^2, x^3, x^x;
+\xintdeffunc g(x):= x^[0..x];% x^[1, 2, 3, x] would be like f above.
+\end{everbatim*}
+will generate
+\begin{everbatim}
+ Function f for \xintexpr parser associated to \XINT_expr_userfunc_f with me
+aning macro:#1->#1,\xintPow {#1}{2},\xintPow {#1}{3},\xintPow {#1}{#1}
+
+ Function g for \xintexpr parser associated to \XINT_expr_userfunc_g with me
+aning macro:#1->\xintApply::csv {\xintPow {#1}}{\xintSeq::csv {0}{#1}}
+\end{everbatim}
+and we can check that they work:
+\begin{everbatim*}
+\xinttheexpr f(10)\relax; \xinttheexpr g(10)\relax
+\end{everbatim*}
+
+However please consider this as WIP. They are some known (or half-known,
+because the author gets a headache whenever he reconsiders the whole thing)
+thorny issues, mostly related to the fact that \xintexprname has no proper
+variable type for lists. See \autoref{ssec:lists}.
+
+Here is another aspect: the documentation of release |1.3c| included this paragraph:
+
+\begin{quote}
+ It is possible to define functions of variables which stand for lists (see
+ \autoref{ssec:lists}), or functions defining lists of comma separated items.
+ For example the scalar product and cross product of 3-dimensional vectors
+ can be defined this way:
+\end{quote}
+\begin{everbatim*}
+\xintdeffunc dprod(V, W) := [V][0]*[W][0] + [V][1]*[W][1] + [V][2]*[W][2];
+\xintdeffunc cprod(V, W) := [V][1]*[W][2] - [V][2]*[W][1],
+ [V][2]*[W][0] - [V][0]*[W][2],
+ [V][0]*[W][1] - [V][1]*[W][0];
+\xintdeffunc Det3(U, V, W) := dprod(cprod(U, V), W);
+\end{everbatim*}
+
+But it should be added promptly that due to absence to typed variables of type
+list (see \autoref{ssec:lists}), usage of the above is very subtle: although
+it is possible to define variables |U|, |V|, |W| expanding to three components
+each it is impossible to use them with |Det3(U, V, W)| because \csbxint{expr}
+will convert |U, V, W| to a comma separated list of \dtt{9} numbers, and
+|Det3| was defined as a function of only \dtt{3} things.
+
+The only way (currently) is to define |U|, |V|, |W| as \emph{functions}
+(possibly of no variable), then to define a new \emph{function} |Z = Det3(U, V,
+W)|, and finally to evaluate |Z| with no argument:
+\begin{everbatim*}
+\xintdeffunc V() := 1, 1, 1;
+\xintdeffunc W() := 1, 5, 25;
+\xintdeffunc Y() := 1, 10, 100;
+\xintdeffunc Z() := Det3(V(), W(), Y());
+% \xinteval{Det3(V(), W(), Y())} does NOT work, one must go via Z()
+\xinteval{Z()}
+\end{everbatim*}
+
+It is better for pure numerics to define the |Det3()| initially as a function
+of \dtt{9} variables. But the above works well if one really wants to work
+with variables:
+\begin{everbatim*}
+\xintdeffunc V(x) := 1, x, x^2;
+\xintdeffunc Z(x,y,z) := Det3(V(x), V(y), V(z));
+\xinteval{Z(1, 5, 10)}
+\end{everbatim*}
+
+This can be combined with usage of my other package
+\href{http://ctan.org/pkg/polexpr}{polexpr}. I thank Thomas \textsc{Söll} who
+explored precisely that during 2018.
+
+To tell the whole truth,\CHANGED{1.3e} until |1.3e| the above worked
+\emph{only} with at least one variable, the syntax with no variables had a
+bug.
+
+Cleaning up:
+\begin{everbatim*}
+\xintunassignexprfunc{g}
+\xintunassignexprfunc{V}
+\xintunassignexprfunc{W}
+\xintunassignexprfunc{Y}
+\xintunassignexprfunc{Z}
+\xintunassignexprfunc{dprod}\xintunassignexprfunc{cprod}\xintunassignexprfunc{Det3}
+\end{everbatim*}
+
+\subsubsection{Example with the \textsc{Rump} test}
+\label{sssec:Rump}
+
+Let's try out our |Rump()| function:
+\begin{everbatim*}
+\xinttheexpr Rump(77617,33096)\relax.
+\end{everbatim*}
+Nothing problematic for an \emph{exact} evaluation, naturally !
+
+Thus to test the \textsc{Rump} polynomial (it is not quite a polynomial with
+its |x/2y| final term) with floats, we \emph{must} also
+declare |Rump| as a function to be used there:
+\begin{everbatim*}
+\xintdeffloatfunc
+ Rump(x,y):=333.75 y^6 + x^2 (11 x^2 y^2 - y^6 - 121 y^4 - 2) + 5.5 y^8 + x/2y;
+\end{everbatim*}
+
+The numbers are scanned with the current precision, hence as here it is
+\dtt{16}, they are scanned exactly in this case. We can then vary the
+precision for the evaluation.
+\begin{everbatim*}
+\def\CR{\cr}
+\halign
+{\tabskip1ex
+\hfil\bfseries#&\xintDigits:=\xintiloopindex;\xintthefloatexpr Rump(77617,33096)#\cr
+\xintiloop [8+1]
+\xintiloopindex &\relax\CR
+\ifnum\xintiloopindex<40 \repeat
+}
+\end{everbatim*}
+
+\subsubsection{\csh{xintNewFunction}}
+\label{xintNewFunction}
+
+The syntax is analogous to the one of \csbxint{NewExpr} but achieves something
+\emph{completely different} from
+\csbxint{NewExpr}/\csbxint{deffunc}. Here is an example:
+\begin{everbatim*}
+\xintNewFunction {foo}[3]{add(mul(x+i, i=#1..#2),x=1..#3)}
+\end{everbatim*}
+\begin{framed}
+ We now have a genuine function |foo( , , )| of three variables which we can
+ use fully in \emph{all three parsers}, be it with numerical arguments or
+ variables or whatever.
+\end{framed}
+\begin{everbatim*}
+\xinttheexpr seq(foo(0, 3, j), j= 1..10)\relax
+\end{everbatim*}
+See \autoref{ssec:PrimesIV} for some additional examples.
+
+This construct is only syntactic sugar to benefit from functional notation.
+Each time the created «function-macro» |foo()| will be encountered the
+corresponding expression will get inserted as a sub-expression (of the same
+type as the surrounding one), the macro parameters having been replaced with
+the (already evaluated) function arguments, and the parser \emph{will then
+ have to parse the expression.} It is very much like a macro substitution,
+but with parentheses and comma separated arguments (which can be arbitrary
+expressions themselves).
+\begin{everbatim}
+ Function foo for the expression parsers is associated to \XINT_expr_macrofu
+nc_foo with meaning macro:#1#2#3->add(mul(x+i, i=\XINT_expr_wrapit {#1}..\XINT_
+expr_wrapit {#2}),x=1..\XINT_expr_wrapit {#3})
+\end{everbatim}
+Thus, this works with quite arbitrary constructs, contrarily to the mechanism
+of |\xintdeffunc|. It is not currently possible to define a |foo| function
+like the one above via |\xintdeffunc|.%
+%
+\footnote{Or rather, it turns out that no error is raised on making the
+ definition via \csbxint{deffunc} but the created supporting macro is only
+ garbage and raises errors on use.}
+
+One can declare a function |foo| with |[0]| arguments: it may be used
+as |foo()| or |foo(nil)| (prior to |1.3b| only the latter was accepted).\CHANGED{1.3b}
+
+\subsection{List operations}
+\label{ssec:lists}
+
+By \emph{list} we hereby mean simply comma-separated values, for example |3,
+-7, 1e5|. This section describes some syntax which allows to manipulate such
+lists, for example |[3, -7, 1e5][1]| extracts |-7| (we follow the Python
+convention of enumerating starting at zero.)
+
+In the context of dummy variables, lists can be used in substitutions:
+\begin{everbatim*}
+\xinttheiiexpr subs(`+`(L), L = 1, 3, 5, 7, 9)\relax\newline
+\end{everbatim*}
+and also the |rseq| and |iter| constructs allow |@| to refer to a list:
+\begin{everbatim*}
+\xinttheiiexpr iter(0, 1; ([@][1], [@][0]+[@][1]), i=1..10)\relax\newline
+\end{everbatim*}
+where each step constructs a new list with two entries.
+
+However, despite appearances there is not really internally a notion of a
+\emph{list type} and it is currently impossible to create,
+manipulate, or return on output a \emph{list of lists}. There is a special
+reserved variable |nil| which stands for the empty list.
+
+The syntax which is explained next includes in particular what are called
+\emph{list itemwise operators} such as:
+\begin{everbatim*}
+\xinttheiiexpr 37+[13,100,1000]\relax\newline
+\end{everbatim*}%
+This part of the syntax is considered provisory, for the reason that its
+presence might make more difficult some extensions in the future. On the other
+hand the Python-like slicing syntax should not change.
+
+
+\begin{itemize}
+ \item |a..b| constructs the \textbf{small} integers from the ceil $\lceil
+ a\rceil$ to the floor
+ $\lfloor b\rfloor$ (possibly a decreasing sequence): one has to be careful
+ if using this for algorithms that |1..0| for example is not empty or |1|
+ but expands to |1, 0|. Again, |a..b| \emph{can not} be used with |a| and
+ |b| greater than $2^{31}-1$. Also, only about at most \dtt{5000} integers
+ can be generated (this depends upon some \TeX{} memory settings).
+
+ The |..| has lower precedence than the arithmetic operations.
+\begin{everbatim*}
+\xinttheexpr 1.5+0.4..2.3+1.1\relax; \xinttheexpr 1.9..3.4\relax; \xinttheexpr 2..3\relax
+\end{everbatim*}
+
+ \item |a..[d]..b| allows to generate big integers, or also fractions, it
+ proceeds with step (non necessarily integral nor positive) |d|. It does
+ \emph{not} replace |a| by its ceil, nor |b| by its floor. The generated
+ list is empty if |b-a| and |d| are of opposite signs; if |d=0| or if |a=b|
+ the list expands to single element |a|.
+\begin{everbatim*}
+\xinttheexpr 1.5..[1.01]..11.23\relax
+\end{everbatim*}
+
+ \item |[list][n]| extracts the |n+1|th element if |n>=0|. If
+ |n<0| it extracts from the tail. List items are numbered (since |1.2g|) as
+ in Python, the first element corresponding to |n=0|.
+ |len(list)| computes the number of items of the list.
+\begin{everbatim*}
+\xinttheiexpr \empty[0..10][6], len(0..10), [0..10][-1], [0..10][23*18-22*19]\relax\
+(and 23*18-22*19 has value \the\numexpr 23*18-22*19\relax).
+\end{everbatim*}
+
+See the next frame for why the example above has |\empty| token at start.
+
+As shown, it is perfectly legal to do operations in the index parameter, which
+will be handled by the parser as everything else. The same remark applies to
+the next items.
+
+ \item |[list][:n]| extracts the first |n| elements if |n>0|, or suppresses
+ the last \verb+|n|+ elements if |n<0|.
+\begin{everbatim*}
+\xinttheiiexpr [0..10][:6]\relax\ and \xinttheiiexpr [0..10][:-6]\relax
+\end{everbatim*}
+ \item |[list][n:]| suppresses the first |n| elements if |n>0|, or extracts
+ the last \verb+|n|+ elements if |n<0|.
+\begin{everbatim*}
+\xinttheiiexpr [0..10][6:]\relax\ and \xinttheiiexpr [0..10][-6:]\relax
+\end{everbatim*}
+\item More generally, |[list][a:b]| works according to the Python ``slicing''
+ rules (inclusive of negative indices). Notice though that there is no
+ optional third argument for the step, which always defaults to |+1|.
+\begin{everbatim*}
+\xinttheiiexpr [1..20][6:13]\relax\ = \xinttheiiexpr [1..20][6-20:13-20]\relax
+\end{everbatim*}
+\item It is naturally possible to nest these things:
+\begin{everbatim*}
+\xinttheexpr [[1..50][13:37]][10:-10]\relax
+\end{everbatim*}
+\item itemwise operations either on the left or the right are possible:
+\begin{everbatim*}
+\xinttheiiexpr 123*[1..10]^2\relax
+\end{everbatim*}
+
+\begin{snugframed}
+ List operations are implemented using square brackets, but the |\xintiexpr|
+ and |\xintfloatexpr| parsers also check to see if an optional parameter
+ within brackets is specified before the start of the expression. To avoid the
+ resulting confusion if this |[| actually serves to delimit
+ comma separated values for list operations, one can either:\IMPORTANT{}
+ \begin{itemize}
+ \item insert something before the bracket such as |\empty| token,
+\begin{everbatim*}
+\xinttheiexpr \empty [1,3,6,99,100,200][2:4]\relax
+\end{everbatim*}
+ \item use parentheses:
+\begin{everbatim*}
+\xinttheiexpr ([1,3,6,99,100,200][2:4])\relax
+\end{everbatim*}
+ \end{itemize}
+
+
+ Notice though that |([1,3,6,99,100,200])[2:4]| would not work: it is
+ mandatory for |][| and |][:| not to be interspersed with parentheses. Spaces
+ are perfectly legal:
+\begin{everbatim*}
+\xinttheiexpr \empty[1..10 ] [ : 7 ]\relax
+\end{everbatim*}
+
+Similarly all the |+[|, |*[|, \dots and |]**|, |]/|, \dots operators admit
+spaces but nothing else between their constituent characters.
+\begin{everbatim*}
+\xinttheiexpr \empty [ 1 . . 1 0 ] * * 1 1 \relax
+\end{everbatim*}
+\end{snugframed}
+
+In an other vein, the parser will be confused by |1..[a,b,c][1]|, and one must
+write |1..([a,b,c][1])|. And things such as |[100,300,500,700][2]//11| or
+|[100,300,500,700][2]/11| are syntax errors and one must use parentheses, as
+in |([100,300,500,700][2])/11|.
+
+\end{itemize}
+
+
+
+\subsection{Analogies and differences of \csh{xintiiexpr} with \csh{numexpr}}
+
+\csbxint{iiexpr}|..\relax| is a parser of expressions knowing only (big)
+integers. There are, besides the enlarged range of allowable inputs, some
+important differences of syntax between |\numexpr| and |\xintiiexpr| and
+variants:
+\begin{itemize}
+\item Contrarily to |\numexpr|, the |\xintiiexpr| parser will stop expanding
+ only after having encountered (and swallowed) a \emph{mandatory} |\relax|
+ token.
+\item In particular, spaces between digits (and not only around infix
+ operators or parentheses) do not stop |\xintiiexpr|, contrarily to the
+ situation with |numexpr|: |\the\numexpr 7 + 3 5\relax| expands (in one
+ step)%
+%
+\footnote {The |\numexpr| triggers continued expansion after the space
+ following the |3| to check if some operator like |+| is upstream. But
+ after having found the |5| it treats it as and end-marker.}
+%
+ to \dtt{\detokenize\expandafter{\the\numexpr 7 + 3 5\relax}\unskip}, whereas
+ |\xintthe\xintiiexpr 7 + 3 5\relax| expands (in two steps) to
+ \dtt{\detokenize\expandafter\expandafter\expandafter {\xintthe\xintiiexpr 7
+ + 3 5\relax}}.%
+%
+\footnote {Since |1.2l| one can also use the underscore |_| to separate digits
+for readability of long numbers.}
+
+\item Inside an |\edef|, an expression |\xintiiexpr...\relax| get fully
+ evaluated, whereas |\numexpr| without |\the| or |\number| prefix would not,
+ if not itself embedded in another |\the\numexpr| or similar context.
+\item (ctd.) The private format to which |\xintiiexpr...\relax| (et al.)
+ evaluates needs |\xintthe| prefix to be printed on the page, or be used in
+ macros (expanding their argument.) The |\the| \TeX\ primitive prefix would
+ not work here.
+\item (ctd.) As a synonym to |\xintthe\xintiiexpr| one can use |\xinttheiiexpr|,
+ or (since |1.2h|) |\thexintiiexpr|.
+\item (ctd.) One can embed a |\numexpr...\relax| (with its |\relax|!) inside an
+ |\xintiiexpr...\relax| without |\the| or |\number|, but the reverse situation
+ requires use of |\xintthe|.
+\item |\numexpr -(1)\relax| is illegal. But |\xintiiexpr -(1)\relax| is
+ perfectly legal and gives the expected result (what else ?).
+\item |\numexpr 2\cnta\relax| is illegal (with |\cnta| a |\count| register.) But
+ |\xintiiexpr 2\cnta\relax| is perfectly legal and will do the tacit
+ multiplication.
+\item |\the\numexpr| or |\number\numexpr| expands in one step, but
+ |\xintthe\xintiiexpr| or |\xinttheiiexpr| needs two steps.
+\end{itemize}
+
+\subsection{Chaining expressions for expandable algorithmics}
+\label{ssec:fibonacci}
+
+We will see in this section how to chain |\xintexpr|-essions with
+|\expandafter|'s, like it is possible with |\numexpr|. For this it is
+convenient to use |\romannumeral0\xintexpro| which is the once-expanded form of
+|\xintexpr|, as we can then chain using only one |\expandafter| each time.
+
+For example, here is the code employed
+on the title page to compute (expandably, of course!) the 1250th Fibonacci
+number:
+
+\begin{everbatim*}
+\catcode`_ 11
+\def\Fibonacci #1{% \Fibonacci{N} computes F(N) with F(0)=0, F(1)=1.
+ \expandafter\Fibonacci_a\expandafter
+ {\the\numexpr #1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 0\relax}}
+%
+\def\Fibonacci_a #1{%
+ \ifcase #1
+ \expandafter\Fibonacci_end_i
+ \or
+ \expandafter\Fibonacci_end_ii
+ \else
+ \ifodd #1
+ \expandafter\expandafter\expandafter\Fibonacci_b_ii
+ \else
+ \expandafter\expandafter\expandafter\Fibonacci_b_i
+ \fi
+ \fi {#1}%
+}% * signs are omitted from the next macros, tacit multiplications
+\def\Fibonacci_b_i #1#2#3{\expandafter\Fibonacci_a\expandafter
+ {\the\numexpr #1/2\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro (2#2-#3)#3\relax}%
+}% end of Fibonacci_b_i
+\def\Fibonacci_b_ii #1#2#3#4#5{\expandafter\Fibonacci_a\expandafter
+ {\the\numexpr (#1-1)/2\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro (2#2-#3)#3\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}%
+}% end of Fibonacci_b_ii
+% code as used on title page:
+%\def\Fibonacci_end_i #1#2#3#4#5{\xintthe#5}
+%\def\Fibonacci_end_ii #1#2#3#4#5{\xinttheiiexpr #2#5+#3(#4-#5)\relax}
+% new definitions:
+\def\Fibonacci_end_i #1#2#3#4#5{{#4}{#5}}% {F(N+1)}{F(N)} in \xintexpr format
+\def\Fibonacci_end_ii #1#2#3#4#5%
+ {\expandafter
+ {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax
+ \expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}}% idem.
+% \FibonacciN returns F(N) (in encapsulated format: needs \xintthe for printing)
+\def\FibonacciN {\expandafter\xint_secondoftwo\romannumeral-`0\Fibonacci }%
+\catcode`_ 8
+\end{everbatim*}
+
+
+The macro |\Fibonacci| produces not one specific value |F(N)| but a pair of
+successive values |{F(N)}{F(N+1)}| which can then serve as starting point of
+another routine devoted to compute a whole sequence |F(N), F(N+1),
+F(N+2),....|. Each of |F(N)| and |F(N+1)| is kept in the encapsulated internal
+\xintexprname format.
+
+|\FibonacciN| produces the single |F(N)|. It also keeps it in the private
+format; thus printing it will need the |\xintthe| prefix.
+
+\begingroup\footnotesize\sffamily\baselineskip 10pt
+Here a code snippet which
+checks the routine via a \string\message\ of the first $51$ Fibonacci
+numbers (this is not an efficient way to generate a sequence of such
+numbers, it is only for validating \csa{FibonacciN}).
+%
+\begin{everbatim}
+\def\Fibo #1.{\xintthe\FibonacciN {#1}}%
+\message{\xintiloop [0+1] \expandafter\Fibo\xintiloopindex.,
+ \ifnum\xintiloopindex<49 \repeat \xintthe\FibonacciN{50}.}
+\end{everbatim}
+\endgroup
+
+The way we use |\expandafter|'s to chain successive |\xintiiexpro| evaluations
+is exactly analogous to what is possible with |\numexpr|. The various
+|\romannumeral0\xintiiexpro| could very well all have been |\xintiiexpr|'s but
+then we would have needed |\expandafter\expandafter\expandafter| each
+time.
+
+\begin{framed}
+ There is a difference though: |\numexpr| does \emph{NOT} expand inside an
+ |\edef|, and to force its expansion we must prefix it with |\the| or
+ |\number| or |\romannumeral| or another |\numexpr| which is itself prefixed,
+ etc\dots.
+
+ But |\xintexpr|, |\xintiexpr|, ..., expand fully in an |\edef|, with the
+ completely expanded
+ result encapsulated in a private format.
+
+ Using |\xintthe| as prefix is necessary to print the result (like |\the| or
+ |\number| in the case of |\numexpr|), but it is not necessary to get the
+ computation done (contrarily to the situation with |\numexpr|).
+\end{framed}
+
+
+Our |\Fibonacci| expands completely under \fexpan sion, so we can use
+\hyperref[fdef]{\ttfamily\char92fdef} rather than |\edef| in a situation such
+as
+%
+\leftedline {|\fdef \X {\FibonacciN {100}}|}
+%
+but it is usually about as efficient to employ |\edef|. And if we want
+%
+\leftedline{|\edef \Y {(\FibonacciN{100},\FibonacciN{200})}|,}
+%
+then |\edef| is necessary.
+
+Allright, so let's now give the code to generate |{F(N)}{F(N+1)}{F(N+2)}...|,
+using |\Fibonacci| for the first two and then using the standard recursion
+|F(N+2)=F(N+1)+F(N)|:
+
+\catcode`_ 11
+\def\FibonacciSeq #1#2{%#1=starting index, #2>#1=ending index
+ \expandafter\Fibonacci_Seq\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2-1}%
+}%
+\def\Fibonacci_Seq #1#2{%
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1\expandafter}\romannumeral0\Fibonacci {#1}{#2}%
+}%
+\def\Fibonacci_Seq_loop #1#2#3#4{% standard Fibonacci recursion
+ {#3}\unless\ifnum #1<#4 \Fibonacci_Seq_end\fi
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1+1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2+#3\relax}{#2}{#4}%
+}%
+\def\Fibonacci_Seq_end\fi\expandafter\Fibonacci_Seq_loop\expandafter
+ #1\expandafter #2#3#4{\fi {#3}}%
+\catcode`_ 8
+
+\begingroup\footnotesize\baselineskip10pt
+\everb|@
+\catcode`_ 11
+\def\FibonacciSeq #1#2{%#1=starting index, #2>#1=ending index
+ \expandafter\Fibonacci_Seq\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2-1}%
+}%
+\def\Fibonacci_Seq #1#2{%
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1\expandafter}\romannumeral0\Fibonacci {#1}{#2}%
+}%
+\def\Fibonacci_Seq_loop #1#2#3#4{% standard Fibonacci recursion
+ {#3}\unless\ifnum #1<#4 \Fibonacci_Seq_end\fi
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1+1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2+#3\relax}{#2}{#4}%
+}%
+\def\Fibonacci_Seq_end\fi\expandafter\Fibonacci_Seq_loop\expandafter
+ #1\expandafter #2#3#4{\fi {#3}}%
+\catcode`_ 8
+|
+\endgroup
+
+This |\FibonacciSeq| macro is
+completely expandable but it is not \fexpan dable.
+
+This is not a problem in the next example which uses \csbxint{For*} as the
+latter applies repeatedly full expansion to what comes next each time it
+fetches an item from its list argument. Thus \csbxint{For*} still manages to
+generate the list via iterated full expansion.
+
+
+\begin{figure*}[ht!]
+ \phantomsection\label{fibonacci}
+ \newcounter{myindex}
+ \fdef\Fibxxx{\FibonacciN {30}}%
+ \setcounter{myindex}{30}%
+\centeredline{\tabskip 1ex
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {30}{59}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {60}{89}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {90}{119}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}}%
+%
+\centeredline{Some Fibonacci numbers together with their residues modulo
+ |F(30)|\dtt{=\xintthe\Fibxxx}}
+\end{figure*}
+
+\begingroup\footnotesize\baselineskip10pt
+\everb|@
+\newcounter{myindex}% not "index", which would overwrite theindex environment!
+% (many have probably been bitten by this trap)
+\tabskip 1ex
+ \fdef\Fibxxx{\FibonacciN {30}}%
+ \setcounter{myindex}{30}%
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {30}{59}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {60}{89}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {90}{119}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}%
+|
+\endgroup
+
+This produces the Fibonacci numbers from |F(30)| to |F(119)|, and
+computes also all the
+congruence classes modulo |F(30)|. The output has
+been put in a \hyperref[fibonacci]{float}, which appears
+\vpageref[above]{fibonacci}. I leave to the mathematically inclined
+readers the task to explain the visible patterns\dots |;-)|.
+
+\section{The \xintname bundle}
+
+\localtableofcontents
+
+\subsection{Characteristics}
+
+\begin{framed}
+ The main characteristics are:
+ \begin{enumerate}
+ \item exact algebra on ``big numbers'', integers as well as
+ fractions,
+ \item floating point variants with user-chosen precision,
+ \item the computational macros are compatible with expansion-only context,
+ \item the bundle comes with parsers (integer-only, or handling fractions, or
+ doing floating point computations) of infix operations implementing
+ beyond infix operations extra features such as dummy variables.
+ \end{enumerate}
+
+
+ Since |1.2| ``big numbers'' must have less than about \dtt{19950} digits:
+ the maximal number of digits for addition is at \dtt{19968} digits, and it
+ is \dtt{19959} for multiplication. The reasonable range of use of the
+ package is with numbers of up to a few hundred digits.\footnotemark
+
+ \TeX\ does not know off-hand how to print on the page such very long
+ numbers, see \autoref{ssec:printnumber}.
+\end{framed}
+\footnotetext{For example multiplication of integers having from \dtt{50} to
+ \dtt{100} digits takes roughly of the order of the millisecond on a 2012
+ desktop computer. I compared this to using Python3: using timeit module on a
+ wrapper defined as |return w*z| with random integers of \dtt{100} digits, I
+ observe on the same computer a computation time of roughly $4.10^{-7}$s per
+ call. And with |return str(w*z)| then this becomes more like $16.10^{-7}$s
+ per call. And with |return str(int(W)*int(Z))| where |W| and |Z| are
+ strings, this becomes about $26.10^{-7}$s (I am deliberately ignoring
+ Python's Decimal module here...) Anyway, my sentence from earlier version of
+ this documentation: \emph{this is, I guess, at least about 1000 times slower
+ than what can be expected with any reasonable programming language,} is
+ about right. I then added: \emph{nevertheless as compilation of a typical
+ \LaTeX\ document already takes of the order of seconds and even dozens of
+ seconds for long ones, this leaves room for reasonably many computations
+ via \xintexprname or via direct use of the macros of
+ \xintname/\xintfracname.}}
+
+Integers with only $10$ digits and starting with a $3$ already exceed the
+\TeX{} bound; and \TeX{} does not have a native processing of floating point
+numbers (multiplication by a decimal number of a dimension register is allowed
+--- this is used for example by the
+\href{http://mirror.ctan.org/graphics/pgf/base}{pgf} basic math engine.)
+
+\TeX{} elementary operations on numbers are done via the non-expandable
+\emph{\char92advance, \char92multiply, \emph{and} \char92divide} assignments.
+This was changed with \eTeX{}'s |\numexpr| which does expandable computations
+using standard infix notations with \TeX{} integers. But \eTeX{} did not
+modify the \TeX{} bound on acceptable integers, and did not add floating point
+support.
+
+The \href{http://www.ctan.org/pkg/bigintcalc}{bigintcalc} package by
+\textsc{Heiko Oberdiek} provided expandable macros (using some of |\numexpr|
+possibilities, when available) on arbitrarily big integers, beyond the \TeX{}
+bound. It does not provide an expression parser.%
+%
+\footnote{One can currently use package
+ \href{http://ctan.org/pkg/bnumexpr}{bnumexpr} to associate the |bigintcalc|
+ macros with an expression parser. This may be unavailable in future if
+ |bnumexpr| becomes more tightly associated with future evolutions or
+ variants of \xintcorename.}
+%
+\xintname did it again using more of |\numexpr| for higher speed, and in a
+later evolution added handling of exact fractions, of scientific numbers, and
+an expression parser. Arbitrary precision floating points operations were
+added as a derivative, and not part of the initial design goal.
+
+The concept of signed infinities, signed zeroes, |NaN|'s, error
+traps\dots,\footnote{The latter exist as work-in-progress for some time in the
+ source code.} have not been implemented, only the notion of `scientific
+notation with a given number of significant figures'.%
+%
+\footnote{multiplication of two floats with |P=\xinttheDigits| digits is
+ first done exactly then rounded to |P| digits, rather than using a
+ specially tailored multiplication for floating point numbers which
+ would be more efficient (it is a waste to evaluate fully the
+ multiplication result with |2P| or |2P-1| digits.)}
+
+The \LaTeX3 project has implemented expandably floating-point computations with
+\dtt{16} significant figures
+(\href{http://www.ctan.org/pkg/l3kernel}{l3fp}), including
+functions such as exp, log, sine and cosine.\footnote{at the time of writing (2014/10/28) the
+ \href{http://www.ctan.org/pkg/l3kernel}{l3fp} (exactly represented) floating
+ point numbers have their exponents limited to $\pm$\dtt{9999}.}
+%
+
+More directly related to the \xintname bundle there is the \liiibigint{}
+package, also devoted to big integers and in development a.t.t.o.w (2015/10/09,
+no division yet). It is part of the experimental trunk of the
+\href{http://latex-project.org}{\LaTeX3 Project} and provides an expression
+parser for expandable arithmetic with big integers. Its author Bruno
+\textsc{Le Floch} succeeded brilliantly into implementing expandably the
+Karatsuba multiplication algorithm and he achieves \emph{sub-quadratic growth
+ for the computation time}. This shows up very clearly with numbers having
+thousands of digits, up to the maximum which a.t.t.o.w is at $8192$ digits.
+
+
+The \liiibigint{} multiplication from late |2015| is observed to be roughly
+|3x--4x| faster than the one from \csbxint{iiexpr} in the range of \dtt{4000}
+to \dtt{5000} digits integers, and isn't far from being |9x| faster at
+\dtt{8000} digits. On the other hand \csbxint{iiexpr}'s multiplication is
+found to be on average roughly |2.5x| faster than \liiibigint's for numbers up
+to \dtt{100} digits and the two packages achieve about the same speed at
+\dtt{900} digits: but each such multiplication of numbers of \dtt{900} digits
+costs about one or two tenths of a second on a 2012 desktop computer, whereas
+the order of magnitude is rather the |ms| for numbers with \dtt{50--100}
+digits.\footnote{I have tested this again on |2016/12/19|, but the macros have
+ not changed on the \liiibigint{} side and barely on the \xintcorename side,
+ hence I got again the same results\dots}
+
+Even with the superior \liiibigint{} Karatsuba multiplication it takes about
+|3.5s| on this 2012 desktop computer for a single multiplication of two
+\dtt{5000}-digits numbers. Hence it is not possible to do routinely such
+computations in a document. I have long been thinking that without the
+expandability constraint much higher speeds could be achieved, but perhaps I
+have not given enough thought to sustain that optimistic stance.\footnote{The
+ \href{http://www.ctan.org/pkg/apnum}{apnum} package implements
+ (non-expandably) arbitrary precision fixed point algebra and (v1.6)
+ functions exp, log, sqrt, the trigonometrical direct and inverse functions.}
+
+I remain of the opinion that if one really wants to do computations with
+\emph{thousands} of digits, one should drop the expandability requirement.
+Indeed, as clearly demonstrated long ago by the
+\href{http://www.ctan.org/pkg/pi}{pi computing file} by \textsc{D. Roegel} one
+can program \TeX{} to compute with many digits at a much higher speed than
+what \xintname achieves: but, direct access to memory storage in one form or
+another seems a necessity for this kind of speed and one has to renounce at
+the complete expandability.%
+%
+\footnote{The Lua\TeX{} project possibly makes endeavours such as \xintname
+ appear even more insane that they are, in truth: \xintname is able to handle
+ fast enough computations involving numbers with less than one hundred digits
+ and brings this to all engines.}
+
+\subsection{Floating point evaluations}
+\label{ssec:floatingpoint}
+
+Floating point macros are provided by package \xintfracname to work with a
+given arbitrary precision |P|. The default value is $P=16$ meaning that the
+significands of the produced (non-zero) numbers have \dtt{16} decimal digits.
+The syntax to set the precision to |P| is
+%
+\centeredline{|\xintDigits:=P;|}
+%
+The value is local to the group or environment (if using \LaTeX). To query the
+current value use \csbxint{theDigits}.
+
+Most floating point macros accept an optional first argument |[P]| which then
+sets the target precision and replaces the |\xintDigits| assigned value (the
+|[P]| must be repeated if the arguments are themselves \xintfracname macros
+with arguments of their own.) In this section |P| refers to the prevailing
+|\xinttheDigits| float precision or to the target precision set in this way as
+an optional argument.
+
+\csbxint{floatexpr}|[Q]...\relax| also admits an optional argument |[Q]| but
+it has an altogether different meaning: the computations are always done with
+the prevailing |\xinttheDigits| precision and the optional argument |Q| is
+used for the final rounding. This makes sense only if |Q<\xinttheDigits| and
+is intended to clean up the result from dubious last digits.
+
+
+
+
+
+
+
+\begin{framed}
+ The |IEEE 754|\footnotemark\ requirement of \emph{correct rounding} for
+ addition, subtraction, multiplication, division and square root is achieved
+ (in arbitrary precision) by the macros of \xintfracname hence also by the
+ infix operators |+|, |-|, |*|, |/|.
+
+ This means that for operands given with at most |P| significant digits
+ (and arbitrary exponents) the output coincides exactly with the rounding
+ of the exact theoretical result (barring overflow or underflow).
+
+
+{\footnotesize Due to a typographical oversight, this documentation
+ (up to |1.2j|) adjoined |^| and |**| to the above list of
+ infix operators. But as
+ is explained in \autoref{xintFloatPower}, what is guaranteed regarding
+ integer powers is an error of at most |0.52ulp|, not the correct rounding.
+ Half-integer powers are computed as square roots of integer powers.\par }%
+
+ The rounding mode is ``round to nearest, ties away from zero''.
+ It is not customizable.
+
+ Currently \xintfracname has no notion of |NaN|s or signed infinities or signed
+ zeroes, but this is intended for the future.
+\end{framed}
+%
+\footnotetext{The |IEEE 754-1985| standard was for hardware implementations of
+ binary floating-point arithmetic with a specific value for the precision
+ ($24$ bits for single precision, $53$ bits for double precision). The newer
+ {\texttt{IEEE 754-2008}}
+ (\url{https://en.wikipedia.org/wiki/IEEE_floating_point}) normalizes five
+ basic formats, three binaries and two decimals ($16$ and $34$ decimal
+ digits) and discusses extended formats with higher precision. These
+ standards are only indirectly relevant to libraries like \xintname dealing
+ with arbitrary precision.%
+}
+
+
+Since release
+|1.2f|, square root extraction achieves correct rounding in arbitrary
+precision.
+
+The power
+function in the expression parsers accepts integer exponents and also
+half-integer exponents for float expressions.\footnote{Half-integer exponents
+ work inside expressions, but not via the \csbxint{FloatPower} macro.}
+A preliminary implementation of fractional powers is available see
+\xintlogname. Trigonometrical functions are available (\xinttrigname).
+
+
+The maximal floating point decimal exponent is currently
+\dtt{\number"7FFFFFFF} which is the maximal number handled by \TeX. The
+minimal exponent is its opposite. But this means that overflow or underflow
+are detected only via low-level |\numexpr| arithmetic overflows which are
+basically un-recoverable. Besides there are some border effects as the
+routines need to add or subtract lengths of numbers from exponents, possibly
+triggering the low-level overflows. In the future not only the Precision but
+also the maximal and minimal exponents |Emin| and |Emax| will be specifiable
+by the user.
+
+Since |1.2f|, the float macros round their inputs to the target precision |P|
+before further processing. Formerly, the initial rounding was done to |P+2|
+digits (and at least |P+3| for the power operation.)
+
+The more ambitious model would be for the computing macros to obey the
+intrinsic precision of their inputs, i.e. to compute the correct rounding to
+|P| digits of the exact mathematical result corresponding to inputs allowed to
+have their own higher precision.%
+%
+\footnote{The |MPFR| library
+ \url{http://www.mpfr.org/} implements this but it does not know fractions!}
+%
+This would be feasible by \xintfracname which after all knows how to compute
+exactly, but I have for the time being decided that for reasons of efficiency,
+the chosen model is the one of rounding inputs to the target precision first.
+
+The float macros of \xintfracname have to handle inputs which
+not only may have much more digits than the target float precision, but may
+even be fractions: in a way this means infinite precision.
+
+From releases |1.08a| to |1.2j| a fraction input $AeM/BeN$ had its numerator
+and denominator $A$ and $B$ truncated to |Q+2| digits of precision, then the
+substituted fraction was correctly rounded to |Q| digits of precision (usually
+with |Q| set to |P+2|) and then the operation was implemented on such rounded
+inputs. But this meant that two fractions representing the same rational
+number could end up being rounded differently (with a difference of one unit
+in the last place), if it had numerators and denominators with at least |Q+3|
+digits.
+
+Starting with release |1.2k| a fractional input $AeM/BeN$ is handled
+intrinsically: the fraction, independently of its representation $AeM/BeN$, is
+\emph{correctly rounded} to |P| digits during the input parsing. Hence the
+output depends only on its arguments as mathematical fractions and not on
+their representatives as quotients.
+
+Notice that in float expressions, the |/| is treated as operator, and is
+applied to arguments which are generally already |P|-floats, hence the above
+discussion becomes relevant in this context only for the special input form
+|qfloat(A/B)| or when using a sub-expression |\xintexpr A/B\relax| embedded in
+the float expression with |A| or |B| having more digits than the prevailing
+float precision |P|.
+
+
+
+
+
+
+\subsection{Expansion matters}
+
+\subsubsection{Full expansion of the first token}
+\label{ssec:expansions}
+
+The whole business of \xintname is to build upon |\numexpr| and handle
+arbitrarily large numbers. Each basic operation is thus done via a macro:
+\csbxint{iiAdd}, \csbxint{iiSub}, \csbxint{iiMul}, \csbxint{iiDivision}. In
+order to handle more complex operations, it must be possible to nest these
+macros.
+%
+An expandable macro can not execute a |\def| or an |\edef|. But the macro must
+expand its arguments to find the digits it is supposed to manipulate. \TeX{}
+provides a tool to do the job of (expandable !) repeated expansion of the
+first token found until hitting something non expandable, such as a digit, a
+|\def| token, a brace, a |\count| token, etc... is found. A space token also
+will stop the expansion (and be swallowed, contrarily to the non-expandable
+tokens).
+
+By convention in this manual \fexpan sion (``full expansion'' or ``full first
+expansion'') will be this \TeX{} process of expanding repeatedly the first
+token seen. For those familiar with \LaTeX3 (which is not used by \xintname)
+this is what is called in its documentation full expansion (whereas expansion
+inside |\edef| would be described I think as ``exhaustive'' expansion).
+
+Most of the package macros, and all those dealing with computations%
+%
+\footnote{except \csbxint{XTrunc}.},
+%
+are expandable in the strong sense that they expand to their final result via
+this \fexpan sion. This will be signaled in their descriptions via a
+\etype{}star in the margin.
+
+These macros not only have this property of \fexpan dability, they all begin
+by first applying \fexpan sion to their arguments. Again from \LaTeX3's
+conventions this will be signaled by a%
+%
+\ntype{{\setbox0 \hbox{\Ff}\hbox to \wd0 {\hss f\hss}}}
+%
+margin annotation next to the description of the arguments.
+
+\subsubsection{Summary of important expandability aspects}
+
+\begin{enumerate}
+\item the macros \fexpan d their arguments, this means that they expand the
+ first token seen (for each argument), then expand, etc..., until something
+ un-expandable such as a\strut{} digit or a brace is hit against. This
+ example
+%
+ \leftedline{|\def\x{98765}\def\y{43210}| |\xintiiAdd {\x}{\x\y}|}
+%
+ is \emph{not} a legal construct, as the |\y| will remain untouched by
+ expansion and not get converted into the digits which are expected by the
+ sub-routines of |\xintiiAdd|. It is a |\numexpr| which will expand it and an
+ arithmetic overflow will arise as |9876543210| exceeds the \TeX{} bounds.
+ The same would hold for |\xintAdd|.
+
+ \begingroup\slshape
+ To the contrary \csbxint{theiiexpr} and others have no issues with
+ things such as |\xinttheiiexpr \x+\x\y\relax|.\hfill
+ \endgroup
+
+\item\label{fn:expansions} using |\if...\fi| constructs \emph{inside} the
+ package macro arguments requires suitably mastering \TeX niques
+ (|\expandafter|'s and/or swapping techniques) to ensure that the \fexpan sion
+ will indeed absorb the \csa{else} or closing \csa{fi}, else some error will
+ arise in further processing. Therefore it is highly recommended to use the
+ package provided conditionals such as \csbxint{ifEq}, \csbxint{ifGt},
+ \csbxint{ifSgn},\dots\ or, for \LaTeX{} users and when dealing
+ with short integers the
+ \href{http://www.ctan.org/pkg/etoolbox}{etoolbox}%
+%
+\footnote{\url{http://www.ctan.org/pkg/etoolbox}}
+ expandable conditionals (for small integers only) such as \texttt{\char92
+ ifnumequal}, \texttt{\char92 ifnumgreater}, \dots . Use of
+ \emph{non-expandable} things such as \csa{ifthenelse} is impossible inside the
+ arguments of \xintname macros.
+
+ \begingroup\slshape
+ One can use naive |\if..\fi| things inside an \csbxint{theexpr}-ession
+ and cousins, as long as the test is
+ expandable, for example\upshape
+%
+\leftedline{|\xinttheiexpr\ifnum3>2 143\else 33\fi
+ 0^2\relax|$\to$\dtt{\xinttheiexpr \ifnum3>2 143\else 33\fi 0^2\relax
+ =1430\char`\^2}}
+%
+ \endgroup
+
+\item after the definition |\def\x {12}|, one can not use
+ {\color{blue}|-\x|} as input to one of the package macros: the \fexpan sion
+ will act only on the minus sign, hence do nothing. The only way is to use the
+ \csbxint{Opp} macro (or \csbxint{iiOpp} which is integer only)
+ which obtains the opposite of a given number.
+
+ \begingroup\slshape
+ Again, this is otherwise inside an \csbxint{theexpr}-ession or
+ \csbxint{thefloatexpr}-ession. There, the
+ minus sign may prefix macros which will expand to numbers (or parentheses
+ etc...)
+ \endgroup
+
+\def\x {12}%
+\def\AplusBC #1#2#3{\xintAdd {#1}{\xintMul {#2}{#3}}}%
+
+\item \label{item:xpxp} With the definition
+%
+\leftedline{|\def\AplusBC #1#2#3{\xintAdd {#1}{\xintMul {#2}{#3}}}|}
+%
+one obtains an
+ expandable macro producing the expected result, not in two, but rather in
+ three steps: a first expansion is consumed by the macro expanding to its
+ definition. As the package macros expand their arguments until no more is
+ possible (regarding what comes first), this |\AplusBC| may be used inside
+ them: {|\xintAdd {\AplusBC {1}{2}{3}}{4}|} does work and returns
+ \dtt{\xintAdd {\AplusBC {1}{2}{3}}{4}}.
+
+ If, for some reason, it is important to create a macro expanding in two steps
+ to its final value, one may either do:
+%
+\smallskip
+%
+\leftedline {|\def\AplusBC #1#2#3{\romannumeral-`0\xintAdd {#1}{\xintMul
+ {#2}{#3}}}|}
+%
+or use the \emph{lowercase} form of \csa{xintAdd}:
+%
+\smallskip
+%
+\leftedline {|\def\AplusBC #1#2#3{\romannumeral0\xintadd {#1}{\xintMul
+ {#2}{#3}}}|}
+
+ and then \csa{AplusBC} will share the same properties as do the
+ other \xintname `primitive' macros.
+
+\item
+The |\romannumeral0| and |\romannumeral-`0| things above look like an invitation
+to hacker's territory; if it is not important that the macro expands in two
+steps only, there is no reason to follow these guidelines. Just chain
+arbitrarily the package macros, and the new ones will be completely expandable
+and usable one within the other.
+
+Since release |1.07| the \csbxint{NewExpr} macro automatizes the creation of
+such expandable macros:
+%
+\leftedline{|\xintNewExpr\AplusBC[3]{#1+#2*#3}|}
+%
+creates the |\AplusBC| macro doing the above and expanding in two expansion
+steps.
+
+\item In the expression parsers of \xintexprname such as
+ \csbxint{expr}|..\relax|, \csbxint{floatexpr}|..\relax| the contents are
+ expanded completely from left to right until the ending |\relax| is found
+ and swallowed, and spaces and even (to some extent) catcodes do not matter.
+
+\item For all variants, prefixing with \csbxint{the} allows to print the
+ result or use it in other contexts. Shortcuts \csbxint{theexpr},
+ \csbxint{thefloatexpr}, \csbxint{theiiexpr}, \dots\ are available.
+
+\end{enumerate}
+
+\subsection {Input formats for macros}\label{ssec:inputs}
+
+Macros can have different types of arguments (we do not consider here the
+\csbxint{expr}-parsers but only the macros of
+\xintcorename/\xintname/\xintfracname). In a macro description, a
+margin annotation signals what is the argument type.
+\begin{enumerate}
+\item \TeX\ integers\ntype{\numx} are handled inside a |\numexpr..\relax|
+ hence may be count registers or variables. Beware that |-(1+1)| is not legal
+ and raises an error, but |0-(1+1)| is. Also |2\cnta| with |\cnta| a |\count|
+ isn't legal. Integers must be kept less than \dtt{\number "7FFFFFFF} in
+ absolute value, although the \emph{scaling} operation |(a*b)/c| computes the
+ intermediate product with twice as many bits.
+
+ The slash |/| does a \fbox{rounded} division which is a fact of life of
+ |\numexpr| which I have found very annoying in at least nine cases out of
+ ten, not to say ninety-nine cases out of one hundred. Besides, it is at odds
+ with \TeX's |\divide| which does a truncated division (non-expandably).
+
+ But to follow-suit |/| also does rounded integer division in
+ \csbxint{iiexpr}|..\relax|, and the operator |//| does there the truncated
+ division.
+
+\item the strict format\ntype{f} applies to macros handling big integers but
+ only \fexpan ding their arguments. After this \fexpan sion the input should
+ be a string of digits, optionally preceded by a unique minus sign. The first
+ digit can be zero only if it is the only digit. A plus sign is not accepted.
+ |-0| is not legal in the strict format. Macros of \xintname with a double
+ |ii| require this `strict' format for the inputs.
+
+\item the extended integer format\ntype{\Numf} applies when the macro parses
+ its arguments via \csbxint{Num}. The input may then have arbitrarily many
+ leading minus and plus signs, followed by leading zeroes, and further
+ digits. With \xintfracname loaded, \csbxint{Num} is extended to
+ accept fractions and its action is to truncate them to integers.
+
+ At |1.2o| many macros from \xintcorename/\xintname which
+ use \csbxint{Num} to parse their arguments got deprecated, see
+ \autoref{ssec:coredeprecated}, \autoref{ssec:xintdeprecated}, and
+ \autoref{ssec:xintdeprecatedNum}.
+
+ All these macros have now been removed at |1.3|.\CHANGEDf{1.3}
+
+\item the fraction input format\ntype{\Ff} applies to the arguments of
+ \xintfracname macros handling genuine fractions. It allows two types
+ of inputs: general and restricted. The restricted type is parsed faster,
+ but... is restricted.
+ \begin{description}
+ \item[general:] inputs of the shape |A.BeC/D.EeF|. Example:
+\begin{everbatim*}
+\noindent\xintRaw{+--0367.8920280e17/-++278.289287e-15}\newline
+\xintRaw{+--+1253.2782e++--3/---0087.123e---5}\par
+\end{everbatim*}
+ The input parser does not reduce fractions to smallest terms.
+ Here are the rules of this general fraction format:
+ \begin{itemize}
+ \item everything is optional, absent numbers are treated as zero, here are
+ some extreme cases:
+\begin{everbatim*}
+\xintRaw{}, \xintRaw{.}, \xintRaw{./1.e}, \xintRaw{-.e}, \xintRaw{e/-1}
+\end{everbatim*}
+ \item |AB| and |DE| may start with pluses and minuses, then leading
+ zeroes, then digits.
+ \item |C| and |F| will be given to |\numexpr| and can be anything
+ recognized as such and not provoking arithmetic overflow (the lengths of
+ |B| and |E| will also intervene to build the final exponent naturally
+ which must obey the \TeX{} bound).
+ \item the |/|, |.| (numerator and/or denominator) and |e|
+ (numerator and/or denominator) are all optional components.
+ \item each of |A|, |B|, |C|, |D|, |E| and |F| may arise from \fexpan sion
+ of a macro.
+ \item the whole thing may arise from \fexpan sion, however the |/|, |.|,
+ and |e| should all come from this initial expansion. The |e| of
+ scientific notation is mandatorily lowercased.
+ \end{itemize}
+ \item[restricted:] inputs either of the shape |A[N]| or |A/B[N]|, which
+ represents the fraction |A/B| times |10^N|. The whole thing or
+ each of |A|, |B|, |N| (but then not |/| or |[|) may arise from \fexpan
+ sion, |A| (after expansion) \emph{must} have a unique optional minus sign
+ and no leading zeroes, |B| (after expansion) if present \emph{must} be a
+ positive integer with no signs and no leading zeroes, |[N]| if present
+ will be given to |\numexpr|. Any deviation from the rules above will
+ result in errors.
+ \end{description}
+ Notice that |*|, |+| and |-| contrarily to the |/| (which is treated simply
+ as a kind of delimiter) are not acceptable within arguments of this
+ type\ntype{\Ff} (see \autoref{sec:useofcount}
+ for some exceptions to this.)
+\end{enumerate}
+
+Generally speaking, there should be no spaces among the digits in the inputs
+(in arguments to the package macros). Although most would be harmless in most
+macros, there are some cases where spaces could break havoc.%
+\footnote{The \csbxint{Num} macro does not remove spaces between digits beyond
+ the first non zero ones; however this should not really alter the subsequent
+ functioning of the arithmetic macros, and besides, since \xintcorename 1.2
+ there is an initial parsing of the entire number, during which spaces will
+ be gobbled. However I have not done a complete review of the legacy code to
+ be certain of all possibilities after |1.2| release. One thing to be aware
+ of is that \csa{numexpr} stops on spaces between digits (although it
+ provokes an expansion to see if an infix operator follows); the exponent for
+ \csbxint{iiPow} or the argument of the factorial \csbxint{iiFac} are only
+ subjected to such a \csa{numexpr} (there are a few other macros with such
+ input types in \xintname). If the input is given as, say |1 2\x| where
+ \csa{x} is a macro, the macro \csa{x} will not be expanded by the
+ \csa{numexpr}, and this will surely cause problems afterwards. Perhaps a
+ later \xintname will force \csa{numexpr} to expand beyond spaces, but I
+ decided that was not really worth the effort. Another immediate cause of
+ problems is an input of the type |\xintiiAdd{<space>\x}{\y}|, because the
+ space will stop the initial expansion; this will most certainly cause an
+ arithmetic overflow later when the \csa{x} will be expanded in a
+ \csa{numexpr}. Thus in conclusion, damages due to spaces are unlikely if
+ only explicit digits are involved in the inputs, or arguments are single
+ macros with no preceding space.}
+So the best is to avoid them entirely.
+
+This is entirely otherwise inside an |\xintexpr|-ession, where spaces are
+ignored (except when they occur inside arguments to some macros, thus
+escaping the |\xintexpr| parser). See the \autoref{sec:expr}.
+
+There are also some slighly more obscure expansion types: in particular, the
+\csbxint{ApplyInline} and \csbxint{For*} macros from \xinttoolsname apply a
+special iterated \fexpan sion, which gobbles spaces, to the non-braced items
+(braced items are submitted to no expansion because the opening brace stops
+it) coming from their list argument; this is denoted by a special
+symbol\ntype{{\lowast f}} in the margin. Some other macros such as
+\csbxint{Sum} from \xintfracname first do an \fexpan sion, then treat each
+found (braced or not) item (skipping spaces between such items) via the
+general fraction input parsing, this is signaled as
+here\ntype{f{$\to$}{\lowast\Ff}} in the margin where the signification of the
+\lowast{} is thus a bit different from the previous case.
+
+A few macros from \xinttoolsname do not expand, or expand only once their
+argument\ntype{n{{\color{black}\upshape, resp.}} o}. This is also
+signaled in the margin with notations \`a la \LaTeX3.
+
+
+\subsection{Output formats of macros}
+\label{ssec:outputs}
+
+We do not consider here the \csbxint{expr}-parsers but only the macros from \xintcorename, \xintname and \xintfracname. Macros of other
+components of the bundle may have their own output formats, for example for
+continuous fractions with \xintcfracname.
+There are mainly three types of outputs:%
+
+\begin{itemize}[nosep,listparindent=\leftmarginiii]
+\item arithmetic macros from \xintcorename/\xintname deliver integers
+ in the strict format as described in the previous section.
+\item arithmetic macros from \xintfracname produce on output the strict
+fraction format |A/B[N]|, which stands for |(A/B)|$\times$|10^N|, where |A|
+and |B| are integers, |B| is positive, and |N| is a ``short'' integer. The
+output is not reduced to smallest terms. The |A| and |B| may end with zeroes
+(\emph{i.e}, |N| does not represent all powers of ten). The denominator |B| is
+always strictly positive. There is no |+| sign. The |-| is always first if
+present (i.e. the denominator on output is always positive.) The output will
+be expressed as such a fraction even if the inputs are both integers and the
+mathematical result is an integer. The |B=1| is not removed.%
+%
+\footnote{refer to the documentation of \csbxint{PRaw} for an alternative.}
+\item macros with |Float| in their names produce on output scientific
+format with |P=|\nobreak\csbxint{theDigits} digits, a lowercase |e| and an
+exponent |N|. The first digit is not zero, it is preceded by an optional minus
+sign and is followed by a dot and |P-1| digits. Trailing zeroes are not
+trimmed. There is one exceptional case:
+\begin{itemize}[nosep]
+\item if the value is mathematically zero, it is output as |0.e0|,
+ i.e. zeros after the decimal mark are removed and the exponent is always |0|.
+\end{itemize}
+Future versions of the package may modify this.
+\end{itemize}
+
+
+\subsection{Count registers and variables}\label{sec:useofcount}
+
+Inside |\xintexpr..\relax| and its variants, a count register or count control
+sequence is automatically unpacked using |\number|, with tacit multiplication:
+|1.23\counta| is like |1.23*\number\counta|. There
+is a subtle difference between count \emph{registers} and count
+\emph{variables}. In |1.23*\counta| the unpacked |\counta| variable defines a
+complete operand thus |1.23*\counta 7| is a syntax error. But |1.23*\count0|
+just replaces |\count0| by |\number\count0| hence |1.23*\count0 7| is like
+|1.23*57| if |\count0| contains the integer value |5|.
+
+Regarding now the package macros, there is first the case of arguments having to
+be short integers: this means that they are fed to a |\numexpr...\relax|, hence
+submitted to a \emph{complete expansion} which must deliver an integer, and
+count registers and even algebraic expressions with them like
+|\mycountA+\mycountB*17-\mycountC/12+\mycountD| are admissible arguments (the
+slash stands here for the rounded integer division done by |\numexpr|). This
+applies in particular to the number of digits to truncate or round with, to the
+indices of a series partial sum, \dots
+
+The macros allowing the extended format for long numbers or dealing with
+fractions will \emph{to some extent} allow the direct use of count
+registers and even infix algebra inside their arguments: a count
+register |\mycountA| or |\count 255| is admissible as numerator or also as
+denominator, with no need to be prefixed by |\the| or |\number|. It is possible
+to have as argument an algebraic expression as would be acceptable by a
+|\numexpr...\relax|, under this condition: \emph{each of the numerator and
+ denominator is expressed with at most \emph{nine}
+ tokens}.%
+%
+\footnote{The |1.2k| and earlier versions manual claimed up to 8
+ tokens, but low-level TeX error arose if the |\numexpr...\relax| occupied
+ exactly 8 tokens \emph{and} evaluated to zero. With |1.2l| and later, up to
+ 9 tokens are always safe and one may even drop the ending |\relax|. But
+ well, all these explanations are somewhat silly because prefixing by |\the|
+ or |\number| is always working with arbitrarily many tokens.}
+%
+%
+\footnote{Attention! in the \LaTeX{} context a
+ \csa{value}\texttt{\{countername\}} will behave ok only if it is first in
+ the input, if not it will not get expanded, and braces around the name will
+ be removed and chaos\IMPORTANT{} will ensue inside a \csa{numexpr}. One
+ should enclose the whole input in \csa{the}\csa{numexpr}|...|\csa{relax} in
+ such cases.}
+%
+Important: a slash for rounded division in a |\numexpr| should be written with
+braces |{/}| to not be confused with the \xintfracname delimiter between
+numerator and denominator (braces will be removed internally and the slash
+will count for one token). Example:
+|\mycountA+\mycountB{/}17/1+\mycountA*\mycountB|, or |\count 0+\count
+2{/}17/1+\count 0*\count 2|.
+%
+\leftedline{|\cnta 10 \cntb 35 \xintRaw
+ {\cnta+\cntb{/}17/1+\cnta*\cntb}|\dtt{->\cnta 10 \cntb 35 \xintRaw
+ {\cnta+\cntb{/}17/1+\cnta*\cntb}}}
+%
+For longer algebraic expressions using
+count registers, there are two possibilities:
+\begin{enumerate}[nosep]
+\item let the numerator and the denominator be presented as |\the\numexpr...\relax|,
+\item or as |\numexpr {...}\relax| (the braces are removed during processing;
+ they are not legal for |\numexpr...\relax| syntax.)
+\end{enumerate}
+\everb|@
+\cnta 100 \cntb 10 \cntc 1
+\xintPRaw {\numexpr {\cnta*\cnta+\cntb*\cntb+\cntc*\cntc+
+ 2*\cnta*\cntb+2*\cnta*\cntc+2*\cntb*\cntc}\relax/%
+ \numexpr {\cnta*\cnta+\cntb*\cntb+\cntc*\cntc}\relax }
+|
+\cnta 100 \cntb 10 \cntc 1
+%
+\leftedline{\dtt{\xintPRaw {\numexpr
+ {\cnta*\cnta+\cntb*\cntb+\cntc*\cntc+
+ 2*\cnta*\cntb+2*\cnta*\cntc+2*\cntb*\cntc}\relax/%
+ \numexpr {\cnta*\cnta+\cntb*\cntb+\cntc*\cntc}\relax }}}
+
+\subsection{Dimension registers and variables}
+\label{sec:Dimensions}
+
+\meta{dimen} variables can be converted into (short) integers suitable for the
+\xintname macros by prefixing them with |\number|. This transforms a dimension
+into an explicit short integer which is its value in terms of the |sp| unit
+($1/65536$\,|pt|).
+When |\number| is applied to a \meta{glue} variable, the stretch and shrink
+components are lost.
+
+For \LaTeX{} users: a length is a \meta{glue} variable, prefixing a
+length macro defined by \csa{newlength} with \csa{number} will thus discard
+the |plus| and |minus| glue components and return the dimension component as
+described above, and usable in the \xintname bundle macros.
+
+This conversion is done automatically inside an
+|\xintexpr|-essions, with tacit multiplication implied if prefixed by some
+(integral or decimal) number.
+
+One may thus compute areas or volumes with no limitations, in units of |sp^2|
+respectively |sp^3|, do arithmetic with them, compare them, etc..., and possibly
+express some final result back in another unit, with the suitable conversion
+factor and a rounding to a given number of decimal places.
+
+A \hyperref[tableofdimensions]{table of dimensions} illustrates that the
+internal values used by \TeX{} do not correspond always to the closest
+rounding. For example a millimeter exact value in terms of |sp| units is
+\dtt{72.27/10/2.54*65536=\xinttheexpr trunc(72.27/10/2.54*65536,3)\relax ...}
+and \TeX{} uses internally \dtt{\number\dimexpr 1mm\relax}|sp| (\TeX{}
+truncates to get an integral multiple of the |sp| unit; see at the end of this
+section the exact rules applied internally by \TeX).
+
+\begin{figure*}[ht!]
+\phantomsection\label{tableofdimensions}
+\begingroup\let\ignorespaces\empty
+ \let\unskip\empty
+ \def\T{\expandafter\TT\number\dimexpr}
+ \def\TT#1!{\gdef\tempT{#1}}
+ \def\E{\expandafter\expandafter\expandafter
+ \EE\xintexpr reduce(}
+ \def\EE#1!{\gdef\tempE{#1}}
+\centeredline{\begin{tabular}{%
+ >{\bfseries\strut}c%
+ c%
+ >{\E}c<{)\relax!}@{}%
+ >{\xintthe\tempE}r@{${}={}$}%
+ >{\xinttheexpr trunc(\tempE,3)\relax...}l%
+ >{\T}c<{!}@{}%
+ >{\tempT}r%
+ >{\xinttheexpr round(100*(\tempT-\tempE)/\tempE,4)\relax\%}c}
+ \hline
+ Unit&%
+ definition&%
+ \omit &%
+ \multicolumn{2}{c}{Exact value in \texttt{sp} units\strut}&%
+ \omit &%
+ \omit\parbox{2cm}{\centering\strut\TeX's value in \texttt{sp} units\strut}&%
+ \omit\parbox{2cm}{\centering\strut Relative error\strut}\\\hline
+ cm&0.01 m&72.27/2.54*65536&&&1cm&&\\
+ mm&0.001 m&72.27/10/2.54*65536&&&1mm&&\\
+ in&2.54 cm&72.27*65536&&&1in&&\\
+ pc&12 pt&12*65536&&&1pc&&\\
+ pt&1/72.27 in&65536&&&1pt&&\\
+ bp&1/72 in&72.27*65536/72&&&1bp&&\\
+ \omit\hfil\llap{3}bp\strut\hfil&1/24 in&72.27*65536/24&&&3bp&&\\
+ \omit\hfil\llap{12}bp\strut\hfil&1/6 in&72.27*65536/6&&&12bp&&\\
+ \omit\hfil\llap{72}bp\strut\hfil&1 in&72.27*65536&&&72bp&&\\
+ dd&1238/1157 pt&1238/1157*65536&&&1dd&&\\
+ \omit\hfil\llap{11}dd\strut\hfil&11*1238/1157 pt&11*1238/1157*65536&&&11dd&&\\
+ \omit\hfil\llap{12}dd\strut\hfil&12*1238/1157 pt&12*1238/1157*65536&&&12dd&&\\
+ sp&1/65536 pt&1&&&1sp&&\\\hline
+ \multicolumn{8}{c}{\bfseries\large\TeX{} \strut dimensions}\\\hline
+\end{tabular}}
+\endgroup
+\end{figure*}
+
+There is something quite amusing with the Didot point. According to the \TeX
+Book, $1157$\,|dd|=$1238$\,|pt|. The actual internal value of $1$\,|dd| in \TeX{} is $70124$\,|sp|. We can use \xintcfracname to display the list of
+centered convergents of the fraction $70124/65536$:
+%
+\leftedline{|\xintListWithSep{, }{\xintFtoCCv{70124/65536}}|}
+%
+\xintFor* #1 in {\xintFtoCCv{70124/65536}}\do {$\printnumber{#1}$, }%
+and we don't find
+$1238/1157$ therein, but another approximant $1452/1357$!
+
+And indeed multiplying $70124/65536$ by $1157$, and respectively $1357$, we find
+the approximations (wait for more, later):
+%
+\leftedline{``$1157$\,|dd|''\dtt{=\xinttheexpr trunc(1157\dimexpr
+ 1dd\relax/\dimexpr 1pt\relax,12)\relax}\dots|pt|}
+%
+\leftedline{``$1357$\,|dd|''\dtt{=\xinttheexpr trunc(1357\dimexpr
+ 1dd\relax/\dimexpr 1pt\relax,12)\relax}\dots|pt|}
+%
+and we seemingly discover that $1357$\,|dd|=$1452$\,|pt| is \emph{far more
+ accurate} than
+the \TeX Book formula $1157$\,|dd|=$1238$\,|pt|~!
+The formula to compute $N$\,|dd| was
+%
+\leftedline{|\xinttheexpr trunc(N\dimexpr 1dd\relax/\dimexpr
+ 1pt\relax,12)\relax}|}
+%
+
+What's the catch? The catch is that \TeX{} \emph{does not} compute $1157$\,|dd|
+like we just did:%
+%
+\leftedline{$1157$\,|dd|=|\number\dimexpr 1157dd\relax/65536|%
+ \dtt{=\xintTrunc{12}{\number\dimexpr 1157dd\relax/65536}}\dots|pt|}
+%
+\leftedline{$1357$\,|dd|=|\number\dimexpr 1357dd\relax/65536|%
+ \dtt{=\xintTrunc{12}{\number\dimexpr 1357dd\relax/65536}}\dots|pt|}
+%
+We thus discover that \TeX{} (or rather here, e-\TeX{}, but one can check that
+this works the same in \TeX82), uses $1238/1157$ as a conversion
+factor (and necessarily intermediate computations simulate higher precision
+than a priori available with integers less than $2^{31}$ or rather $2^{30}$ for
+dimensions). Hence the $1452/1357$ ratio is irrelevant, an artefact
+of the rounding (or rather, as we see, truncating) for one |dd| to be
+expressed as an integral number of |sp|'s.
+
+Let us now
+use |\xintexpr| to compute the value of the Didot point in millimeters, if
+the above rule is exactly verified:
+%
+\leftedline{|\xinttheexpr
+ trunc(1238/1157*25.4/72.27,12)\relax|%
+ \dtt{=\xinttheexpr trunc(1238/1157*25.4/72.27,12)\relax}|...mm|}
+%
+This fits very well with the possible values of the Didot point as listed in
+the
+\href{http://en.wikipedia.org/wiki/Point_%28typography%29#Didot}{Wikipedia Article}.
+%
+The value $0.376065$\,|mm| is said to be \emph{the traditional value in
+ European printers' offices}. So the $1157$\,|dd|=$1238$\,|pt| rule refers to
+this Didot point, or more precisely to the \emph{conversion factor} to be used
+between this Didot and \TeX{} points.
+
+The actual value in millimeters of exactly one Didot point as implemented in
+\TeX{} is
+%
+\leftedline {|\xinttheexpr trunc(\dimexpr
+ 1dd\relax/65536/72.27*25.4,12)\relax|}
+%
+\leftedline{\dtt{=\xinttheexpr trunc(\dimexpr
+ 1dd\relax/65536/72.27*25.4,12)\relax}|...mm|}
+%
+The difference of circa $5$\AA\ is arguably tiny!
+
+% 543564351/508000000
+
+By the way the \emph{European printers' offices \emph{(dixit Wikipedia)}
+ Didot} is thus exactly
+%
+\leftedline{|\xinttheexpr reduce(.376065/(25.4/72.27))\relax|%
+ \dtt{=\xinttheexpr reduce(.376065/(25.4/72.27))\relax}\,|pt|}
+%
+and the centered convergents of this fraction are \xintFor* #1 in
+{\xintFtoCCv{543564351/508000000}}\do {\dtt{\printnumber{#1}}\xintifForLast{.}{, }} We do
+recover the $1238/1157$ therein!
+
+\begin{framed}
+ Here is how \TeX\ converts |abc.xyz...<unit>|. First the decimal is
+ \emph{rounded} to the nearest integral multiple of |1/65536|, say |X/65536|.
+ The |<unit>| is associated to a ratio |N/D|, which represents |<unit>/pt|.
+ For the Didot point the ratio is indeed |1238/1157|. \TeX\ \emph{truncates}
+ the fraction |XN/D| to an integer |M|. The dimension is represented by |M
+ sp|.
+
+ For more details refer to:\newline
+ \url{http://tex.stackexchange.com/questions/338297/why-pdf-file-cannot-be-reproduced/338510#338510}.
+\end{framed}
+
+
+\subsection{\csh{ifcase}, \csh{ifnum}, ... constructs}\label{sec:ifcase}
+
+When using things such as |\ifcase \xintSgn{\A}| one has to make sure to leave
+a space after the closing brace for \TeX{} to
+stop its scanning for a number: once \TeX{} has finished expanding
+|\xintSgn{\A}| and has so far obtained either |1|, |0|, or |-1|, a
+space (or something `unexpandable') must stop it looking for more
+digits. Using |\ifcase\xintSgn\A| without the braces is very dangerous,
+because the blanks (including the end of line) following |\A| will be
+skipped and not serve to stop the number which |\ifcase| is looking for.
+%
+\begin{everbatim*}
+\begin{enumerate}[nosep]\def\A{1}
+\item \ifcase \xintSgn\A 0\or OK\else ERROR\fi
+\item \ifcase \xintSgn\A\space 0\or OK\else ERROR\fi
+\item \ifcase \xintSgn{\A} 0\or OK\else ERROR\fi
+\end{enumerate}
+\end{everbatim*}
+
+In order to use successfully |\if...\fi| constructions either as arguments to
+the \xintname bundle expandable macros, or when building up a completely
+expandable macro of one's own, one needs some \TeX nical expertise (see also
+\autoref{fn:expansions} on page~\pageref{fn:expansions}).
+
+It is thus much to be recommended to use the expandable branching macros,
+provided by \xintfracname succh as \csbxint{ifSgn}, \csbxint{ifZero},
+\csbxint{ifOne}, \csbxint{ifNotZero}, \csbxint{ifTrueAelseB}, \csbxint{ifCmp},
+\csbxint{ifGt}, \csbxint{ifLt}, \csbxint{ifEq},
+\csbxint{ifInt}... See their respective documentations. All these conditionals
+always have either two or three branches, and empty brace pairs |{}| for
+unused branches should not be forgotten.
+
+If these tests are to be applied to standard \TeX{} short integers, it is more
+efficient to use (under \LaTeX{}) the equivalent conditional tests from the
+\href{http://www.ctan.org/pkg/etoolbox}{etoolbox}%
+%
+\footnote{\url{http://www.ctan.org/pkg/etoolbox}}
+package.
+
+\subsection{No variable declarations are needed}
+
+ There is no notion of a \emph{declaration of a variable}.
+
+ To do a computation and assign its result to some macro |\z|, the user will employ the |\def|, |\edef|, or |\newcommand| (in \LaTeX)
+ as usual, keeping in mind that two expansion steps are needed, thus |\edef|
+ is initially the main tool:
+%
+\begin{everbatim*}
+\def\x{1729728} \def\y{352827927} \edef\z{\xintiiMul {\x}{\y}}
+\meaning\z
+\end{everbatim*}
+
+As an alternative to |\edef| the package provides |\oodef| which expands
+exactly twice the replacement text, and |\fdef| which applies \fexpan sion to
+the replacement text during the definition.
+\begin{everbatim*}
+\def\x{1729728} \def\y{352827927} \oodef\w {\xintiiMul\x\y} \fdef\z{\xintiiMul {\x}{\y}}
+\meaning\w, \meaning\z
+\end{everbatim*}
+
+In practice |\oodef| is slower than |\edef|, except for computations ending in
+very big final replacement texts (thousands of digits). On the other hand
+|\fdef|\IMPORTANT{} appears to be slightly faster than |\edef| already in the
+case of expansions leading to only a few dozen digits.
+
+\xintexprname does provide an interface to declare and assign values to
+identifiers which can then be used in expressions: \autoref{xintdefvar}.
+
+
+\subsection{When expandability is too much}
+
+Let's use the macros of \autoref{ssec:fibonacci} related to Fibonacci numbers.
+Notice that the $47$th Fibonacci number is \dtt{\xintthe\FibonacciN {47}} thus
+already too big for \TeX{} and \eTeX{}.
+
+
+The |\FibonacciN| macro found in \autoref{ssec:fibonacci} is completely
+expandable, it is even \fexpan dable. We need a wrapper with |\xintthe|
+prefix
+\begin{everbatim*}
+\def\theFibonacciN{\xintthe\FibonacciN}
+\end{everbatim*}
+to print in the document or to use within |\message| (or \LaTeX\ |typeout|) to
+write to the log and terminal.
+
+\begingroup
+ \def\A {1859} \def\B {1573}
+ \edef\X {\theFibonacciN\A} \edef\Y {\theFibonacciN\B}
+ \edef\GCDAB {\xintiiGCD\A\B}\edef\Z {\theFibonacciN\GCDAB}
+ \edef\GCDXY{\xintiiGCD\X\Y}
+
+ The |\xintthe| prefix also allows its use it as argument to the \xintname
+ macros: for example if we are interested in knowing how many digits
+ $F(1250)$ has, it suffices to issue |\xintLen {\theFibonacciN {1250}}|
+ (which expands to \dtt{\xintLen {\theFibonacciN {1250}}}). Or if we want to
+ check the formula $gcd(F(1859),F(1573))=F(gcd(1859,1573))=F(143)$, we only
+ need%
+%
+\footnote{The
+ \csa{xintiiGCD} macro is provided by both the \xintgcdname package (since
+ |1.0|) and by the \xintname package (since |1.3d|).}
+%
+\begin{everbatim}
+$\xintiiGCD{\theFibonacciN{1859}}{\theFibonacciN{1573}}=%
+ \theFibonacciN{\xintiiGCD{1859}{1573}}$
+\end{everbatim}
+%
+which produces:
+%
+\leftedline{$\dtt{\xintiiGCD{\X}{\Y}}=\dtt{\theFibonacciN{\GCDAB}}$}
+
+The |\theFibonacciN| macro expanded its |\xintiiGCD{1859}{1573}| argument via the
+services of |\numexpr|: this step allows only things obeying the \TeX{} bound,
+naturally! (but \dtt{F(\xintiiPow2{31}}) would be rather big anyhow...).
+
+This is very convenient but of course it repeats the complete evaluation each
+time it is done. In practice, it is often useful to store the result of such
+evaluations in macros. Any |\edef| will break expandability, but if the goal
+is at some point to print something to the |dvi| or |pdf| output, and not only
+to the |log| file, then expandability has to be broken one day or another!
+
+Hence, in practice, if we want to print in the document some computation
+results, we can proceed like this and avoid having to repeat identical
+evaluations:
+\begin{everbatim}
+\begingroup
+ \def\A {1859} \def\B {1573}
+ \edef\X {\theFibonacciN\A} \edef\Y {\theFibonacciN\B}
+ \edef\GCDAB {\xintiiGCD\A\B}\edef\Z {\theFibonacciN\GCDAB}
+ \edef\GCDXY{\xintiiGCD\X\Y}
+The identity $\gcd(F(\A),F(\B))=F(\gcd(\A,\B))$ can be checked via evaluation
+of both sides: $\gcd(F(\A),F(\B))=\gcd(\printnumber\X,\printnumber\Y)=
+\printnumber{\GCDXY} = F(\gcd(\A,\B)) = F(\GCDAB) =\printnumber\Z$.\par
+ % some further computations involving \A, \B, \X, \Y
+\endgroup % closing the group removes assignments to \A, \B, ...
+% or choose longer names less susceptible to overwrite something.
+% Note: there is no LaTeX \newecommand which would be to \edef like \newcommand is to \def
+\end{everbatim}
+The identity $\gcd(F(\A),F(\B))=F(\gcd(\A,\B))$ can be checked via evaluation
+of both sides: $\gcd(F(\A),F(\B))=\gcd(\printnumber\X,\printnumber\Y)=
+\printnumber{\GCDXY} = F(\gcd(\A,\B)) = F(\GCDAB) =\printnumber\Z$.\par
+\endgroup
+
+One may legitimately ask the author: why expandability
+to such extremes, for things such as big fractions or floating point numbers
+(even continued fractions...) which anyhow can not be used directly within
+\TeX's primitives such as |\ifnum|? Why insist on a concept
+which is foreign to the vast majority of \TeX\ users and even programmers?
+
+I have no answer: it made definitely sense at the start of \xintname (see
+\autoref{ssec:origins}) and once started I could not stop.
+
+
+\subsection{Possible syntax errors to avoid}
+
+\edef\x{\xintMul {3}{5}/\xintMul{7}{9}}
+
+Here is a list of imaginable input errors. Some will cause compilation errors,
+others are more annoying as they may pass through unsignaled.
+\begin{itemize}
+\item using |-| to prefix some macro: |-\xintiiSqr{35}/271|.%
+%
+\footnote{to the
+ contrary, this \emph{is}
+ allowed inside an |\xintexpr|-ession.}
+\item using one pair of braces too many |\xintIrr{{\xintiiPow {3}{13}}/243}| (the
+ computation goes through with no error signaled, but the result is completely
+ wrong).
+\item things like |\xintiiAdd { \x}{\y}| as the space will cause \csa{x} to be
+ expanded later, most probably within a |\numexpr| thus provoking possibly an
+ arithmetic overflow.
+\item using |[]| and decimal points at the same time |1.5/3.5[2]|, or with a
+ sign in the denominator |3/-5[7]|. The scientific notation has no such
+ restriction, the two inputs |1.5/-3.5e-2| and |-1.5e2/3.5| are equivalent:
+ |\xintRaw{1.5/-3.5e-2}|\dtt{=\xintRaw{1.5/-3.5e-2}},
+ |\xintRaw{-1.5e2/3.5}|\dtt{=\xintRaw{-1.5e2/3.5}}.
+\item generally speaking, using in a context expecting an integer (possibly
+ restricted to the \TeX{} bound) a macro or expression which returns a
+ fraction: |\xinttheexpr 4/2\relax| outputs \dtt{\xinttheexpr 4/2\relax},
+ not $2$. Use |\xintNum {\xinttheexpr 4/2\relax}| or |\xinttheiexpr 4/2\relax|
+ (which rounds the result to the nearest integer, here, the result is already
+ an integer) or |\xinttheiiexpr 4/2\relax|. Or, divide in your head |4| by
+ |2| and insert the result directly in the \TeX{} source.
+\end{itemize}
+
+\subsection{Error messages}
+
+In situations such as division by zero, the \TeX{} run will be interrupted
+with some error message. The user is asked to hit the RETURN key thrice, which
+will display additional information. In non-interactive
+|nonstopmode| the \TeX{} run goes on uninterrupted and the error data will be
+found in the compilation log.
+
+Here is an example interactive run:
+\begin{everbatim}
+! Undefined control sequence.
+<argument> \ ! /
+ DivisionByZero (hit <RET> thrice)
+l.11 \xintiiDivision{123}{0}
+
+?
+! Undefined control sequence.
+<argument> \ ! /
+ Division of 123 by 0
+l.11 \xintiiDivision{123}{0}
+
+?
+! Undefined control sequence.
+<argument> \ ! /
+ next: {0}{0}
+l.11 \xintiiDivision{123}{0}
+
+?
+[1] (./temptest.aux) )
+Output written on temptest.dvi (1 page, 216 bytes).
+Transcript written on temptest.log.
+\end{everbatim}
+
+This is an experimental feature, which is in preparation for next major
+release.%
+%
+\footnote{The related macros checking or resetting error flags are implemented
+ in embryonic form but no user interface is provided with |1.2l| release.}
+%
+For the good functioning of this the macro with the weird appearance
+{\catcode`/ 11 \catcode`! 11 \catcode32 11 |\ ! /|} (yes, this is a single
+control sequence) must be left undefined. I trust it will be |;-)|.%
+%
+\footnote{The implementation is cloned from \LaTeX3, the
+ {\catcode`/ 11 \catcode`! 11 \catcode32 11 |\ ! /|} was chosen for its
+ shortness.}
+
+Deprecated macros also generate an (expandable) error message. Just hit the
+|RETURN| key once to proceed.\IMPORTANT\ Most deprecated macros at |1.2o| are
+listed either in \autoref{ssec:coredeprecated} or
+\autoref{ssec:xintdeprecated} or \autoref{ssec:xintdeprecatedNum}. All
+were removed at |1.3|.\CHANGED{1.3}
+
+The expression parsers are at |1.2l| still using a slightly less evolved
+method which lets \TeX{} display an undefined control sequence name giving
+some indication of the underlying problem (we copied this method from the
+|bigintcalc| package). The name of the control sequence is the message.
+
+\begin{multicols}{2}\parskip0pt\relax
+\begin{everbatim}
+\xintError:ignored
+\xintError:removed
+\xintError:inserted
+\xintError:unknownfunction
+\xintError:we_are_doomed
+\xintError:missing_xintthe!
+\end{everbatim}
+\end{multicols}
+
+
+Some constructs in \xintexprname-essions use delimited macros and there is
+thus possibility in case of an ill-formed expression to end up beyond the
+|\relax| end-marker. Such a situation can also occur from a non-terminated
+|\numexpr|:
+\begin{everbatim}
+\xinttheexpr 3 + \numexpr 5+4\relax followed by some LaTeX code...
+\end{everbatim}
+as the |\numexpr| will swallow the |\relax| whose presence is mandatory for
+|\xinttheexpr|, errors will inevitably arise and may
+lead to very cryptic messages; but nothing unusual or especially traumatizing
+for the daring experienced \TeX/\LaTeX\ user, whose has seen zillions of
+un-helpful error messages already in her daily practice of
+\TeX/\LaTeX.\footnote{not to mention the \LaTeX\ error messages used by
+ Emacs AUC\TeX\ mode also for Plain \TeX\ runs...}
+
+
+\subsection{Package namespace, catcodes}
+
+
+The bundle packages needs that the \csa{space} and \csa{empty} control
+sequences are pre-defined with the identical meanings as in Plain \TeX{} (or
+\LaTeX2e which has the same macros).
+
+Private macros of \xintkernelname, \xintcorename, \xinttoolsname,
+\xintname, \xintfracname, \xintexprname, \xintbinhexname, \xintgcdname,
+\xintseriesname, and \xintcfracname{} use one or more underscores |_| as
+private letter, to reduce the risk of getting overwritten. They almost
+all begin either with |\XINT_| or with |\xint_|, a handful of these
+private macros such as \csa{XINTsetupcatcodes}, \csa{XINTdigits} and
+those with names such as |\XINTinFloat...| or |\XINTinfloat...| do not
+have any underscore in their names (for obscure legacy reasons).
+
+\xintkernelname provides \hyperref[odef]{|\odef|}, \hyperref[oodef]{|\oodef|},
+\hyperref[fdef]{|\fdef|}: if macros with these names already exist
+\xinttoolsname will not overwrite them. The same meanings are independently
+available under the names |\xintodef|, |\xintoodef|, etc...
+
+Apart from |\thexintexpr|, |\thexintiexpr|, ...
+all other public macros from the \xintname bundle packages start with |\xint|.
+
+For the good functioning of the macros, standard catcodes are assumed for the
+minus sign, the forward slash, the square brackets, the letter `e'. These
+requirements are dropped inside an |\xintexpr|-ession: spaces are gobbled,
+catcodes mostly do not matter, the |e| of scientific notation may be |E| (on
+input) \dots{}
+
+If a character used in the |\xintexpr| syntax is made active,
+this will surely cause problems; prefixing it with |\string| is one option.
+There is \csbxint{exprSafeCatcodes} and \csbxint{exprRestoreCatcodes} to
+temporarily turn off potentially active characters.
+
+\begin{framed}
+ For advanced \TeX\ users. At loading time of the packages the
+ catcode configuration may be arbitrary as long as it satisfies the following
+ requirements: the percent is of category code comment character, the
+ backslash is of category code escape character, digits have category code
+ other and letters have category code letter. Nothing else is assumed.
+\end{framed}
+
+As pointed out in previous section the control sequence {\catcode`/ 11
+ \catcode`! 11 \catcode32 11 |\ ! /|} must be left undefined.
+
+\subsection{Origins of the package}
+\label{ssec:origins}
+
+|2013/03/28.| Package |bigintcalc| by \textsc{Heiko Oberdiek} already
+provides expandable arithmetic operations on ``big integers'',
+exceeding the \TeX{} limits (of $2^{31}-1$), so why another%
+%
+\footnote{this section was written before the \xintfracname package; the
+ author is not aware of another package allowing expandable
+ computations with arbitrarily big fractions.}
+%
+one?
+
+I got started on this in early March 2013, via a thread on the
+|c.t.tex| usenet group, where \textsc{Ulrich D\,i\,e\,z} used the
+previously cited package together with a macro (|\ReverseOrder|)
+which I had contributed to another thread.%
+%
+\footnote{the \csa{ReverseOrder} could be avoided in that circumstance,
+ but it does play a crucial r\^ole here.}
+%
+What I had learned in this
+other thread thanks to interaction with \textsc{Ulrich D\,i\,e\,z} and
+\textsc{GL} on expandable manipulations of tokens motivated me to
+try my hands at addition and multiplication.
+
+I wrote macros \csa{bigMul} and \csa{bigAdd} which I posted to the
+newsgroup; they appeared to work comparatively fast. These first
+versions did not use the \eTeX{} \csa{numexpr} primitive, they worked
+one digit at a time, having previously stored carry-arithmetic in
+1200 macros.
+
+I noticed that the |bigintcalc| package used \csa{numexpr}
+if available, but (as far as I could tell) not
+to do computations many digits at a time. Using \csa{numexpr} for
+one digit at a time for \csa{bigAdd} and \csa{bigMul} slowed them
+a tiny bit but avoided cluttering \TeX{} memory with the 1200
+macros storing pre-computed digit arithmetic. I wondered if some speed
+could be gained by using \csa{numexpr} to do four digits at a time
+for elementary multiplications (as the maximal admissible number
+for \csa{numexpr} has ten digits).
+
+|2013/04/14|. This initial \xintname was followed by \xintfracname which
+handled exactly fractions and decimal numbers.
+
+|2013/05/25|. Later came \xintexprname and at the same time \xintfracname got
+extended to handle floating point numbers.
+
+|2013/11/22|. Later, \xinttoolsname was detached.
+
+|2014/10/28|. Release |1.1| significantly extended the \xintexprname parsers.
+
+|2015/10/10|. Release |1.2| rewrote the core integer routines which had
+remained essentially unmodified, apart from a slight improvement of division
+early 2014.
+
+This |1.2| release also got its impulse from a fast
+``reversing'' macro, which I wrote after my interest got awakened again as a
+result of correspondance with Bruno \textsc{Le Floch} during September 2015:
+this new reverse uses a \TeX nique which \emph{requires} the tokens to be
+digits. I wrote a routine which works (expandably) in quasi-linear time, but a
+less fancy |O(N^2)| variant which I developed concurrently proved to be faster
+all the way up to perhaps $7000$ digits, thus I dropped the quasi-linear one.
+The less fancy variant has the advantage that \xintname can handle numbers
+with more than $19900$ digits (but not much more than $19950$). This is with
+the current common values of the input save stack and maximal expansion depth:
+$5000$ and $10000$ respectively.
+
+
+\section{Some utilities from the \xinttoolsname package}\label{sec:sometoolsutils}
+
+This is a first overview. Many examples combining these utilities with the
+arithmetic macros of \xintname are to be found in \autoref{sec:tools}. See
+also \autoref{sec:examples}.
+
+\subsection{Assignments}\label{sec:assign}
+
+\xintAssign {357}{323}\to\tmpA\tmpB
+\xintAssign \xintBezout{357}{323}\to\tmpU\tmpV\tmpD
+
+It might not be necessary to maintain at all times complete expandability. A
+devoted syntax is provided to make these things more efficient, for example when
+using the \csbxint{iiDivision} macro which computes both quotient and remainder
+at
+the same time:
+%
+\leftedline{\csbxint{Assign}
+ |\xintiiDivision{\xintiiPow {2}{1000}}{\xintiiFac{100}}\A\B|}
+%
+give:
+\xintAssign\xintiiDivision{\xintiiPow {2}{1000}}{\xintiiFac{100}}\to\A\B
+|\meaning\A|\dtt{: \printnumber{\meaning\A}\relax} and
+|\meaning\B|\dtt{: \printnumber{\meaning\B}\relax}.
+%
+Another example (which uses \csbxint{Bezout} from the \xintgcdname package):
+%
+\leftedline{\csbxint{Assign}
+%
+ |\xintBezout{357}{323}\to\U\V\D|}
+%
+is equivalent to setting |\U| to
+\dtt{\tmpU}, |\V| to \dtt{\tmpV}, and |\D| to \dtt{\tmpD}. And indeed
+\dtt{$\tmpU\times\tmpA+\tmpV\times\tmpB=
+ \xintiiAdd{\xintiiMul\tmpU\tmpA}{\xintiiMul\tmpV\tmpB}$} is a Bézout Identity.
+
+Thus, what |\xintAssign| does is to first apply an
+\hyperref[ssec:expansions]{\fexpan sion} to what comes next; it then defines one
+after the other (using |\def|; an optional argument allows to modify the
+expansion type, see \autoref{xintAssign} for details), the macros found after
+|\to| to correspond to the successive braced contents (or single tokens) located
+prior to |\to|. In case the first token (after the
+optional parameter within brackets, \emph{cf.} the \csbxint{Assign} detailed
+document) is not an opening brace |{|, |\xintAssign| consider that there is
+ only one macro to define, and that its replacement text should be all that
+ follows until the |\to|.
+
+\xintAssign
+{3570902836026}{200467139463}\to\tmpA\tmpB
+\xintAssign
+\xintBezout{3570902836026}{200467139463}\to\tmpU\tmpV\tmpD
+
+\leftedline
+{\csbxint{Assign}|\xintBezout{3570902836026}{200467139463}\to\U\V\D|}
+\noindent
+gives then |\U| with meaning \dtt{\tmpU},
+ |\V| with meaning \dtt{\tmpV} and |\D| with meaning \dtt{\tmpD}.
+
+%
+In situations when one does not know in advance the number of items, one has
+\csbxint{AssignArray} or its synonym \csbxint{DigitsOf}:
+%
+\leftedline{\csbxint{DigitsOf}|\xintiiPow{2}{100}\to|\csa{DIGITS}}
+%
+This defines \csa{DIGITS} to be macro with one parameter, \csa{DIGITS}|{0}|
+gives the size |N| of the array and \csa{DIGITS}|{n}|, for |n| from |1| to |N|
+then gives the |n|th element of the array, here the |n|th digit of $2^{100}$,
+from the most significant to the least significant. As usual, the generated
+macro \csa{DIGITS} is completely expandable (in two steps). As it wouldn't make
+much sense to allow indices exceeding the \TeX{} bounds, the macros created by
+\csbxint{AssignArray} put their argument inside a \csa{numexpr}, so it is
+completely expanded and may be a count register, not necessarily prefixed by
+|\the| or |\number|. Consider the following code snippet:
+%
+\begin{everbatim*}
+% \newcount\cnta
+% \newcount\cntb
+\begingroup
+\xintDigitsOf\xintiiPow{2}{100}\to\DIGITS
+\cnta = 1
+\cntb = 0
+\loop
+\advance \cntb \xintiiSqr{\DIGITS{\cnta}}
+\ifnum \cnta < \DIGITS{0}
+\advance\cnta 1
+\repeat
+
+|2^{100}| (=\xintiiPow {2}{100}) has \DIGITS{0} digits and the sum of their squares is \the\cntb.
+These digits are, from the least to the most significant: \cnta = \DIGITS{0} \loop
+\DIGITS{\cnta}\ifnum \cnta > 1 \advance\cnta -1 , \repeat.\endgroup
+\end{everbatim*}
+
+Warning: \csbxint{Assign}, \csbxint{AssignArray} and \csbxint{DigitsOf}
+\emph{do not do any check} on whether the macros they define are already
+defined.
+
+
+\subsection{Utilities for expandable manipulations}\label{sec:utils}
+
+The package now has more utilities to deal expandably with `lists of things',
+which were treated un-expandably in the previous section with \csa{xintAssign}
+and \csa{xintAssignArray}: \csbxint{ReverseOrder} and \csbxint{Length} since the
+first release, \csbxint{Apply} and \csbxint{ListWithSep} since |1.04|,
+\csbxint{RevWithBraces}, \csbxint{CSVtoList}, \csbxint{NthElt} since |1.06|,
+\csbxint{ApplyUnbraced}, since |1.06b|, \csbxint{loop} and \csbxint{iloop} since
+|1.09g|.%
+%
+\footnote{All these utilities, as well as \csbxint{Assign},
+ \csbxint{AssignArray} and the \csbxint{For} loops are now available from the
+ \xinttoolsname package, independently of the big integers facilities of
+ \xintname.}
+
+As an example the following code uses only expandable operations:
+\begin{everbatim*}
+$2^{100}$ (=\xintiiPow {2}{100}) has \xintLen{\xintiiPow {2}{100}} digits and the sum of their
+squares is \xintiiSum{\xintApply {\xintiiSqr}{\xintiiPow {2}{100}}}. These digits are, from the
+least to the most significant: \xintListWithSep {, }{\xintRev{\xintiiPow {2}{100}}}. The thirteenth
+most significant digit is \xintNthElt{13}{\xintiiPow {2}{100}}. The seventh least significant one
+is \xintNthElt{7}{\xintRev{\xintiiPow {2}{100}}}.
+\end{everbatim*}
+
+It would be more efficient to do once and for all
+|\edef\z{\xintiiPow {2}{100}}|, and then use |\z| in place of
+ |\xintiiPow {2}{100}| everywhere as this would spare the CPU some repetitions.
+
+Expandably computing primes is done in \autoref{xintSeq}.
+
+\subsection{A new kind of for loop}
+
+As part of the \hyperref[sec:tools]{utilities} coming with the \xinttoolsname
+package, there is a new kind of for loop, \csbxint{For}. Check it out
+(\autoref{xintFor} and also in next section).
+
+\subsection{A new kind of expandable loop}
+
+Also included in \xinttoolsname, \csbxint{iloop} is an expandable loop giving
+access to an iteration index, without using count registers which would break
+expandability. Check it out (\autoref{xintiloop} and also in next section).
+
+
+
+\section {Additional examples using \xinttoolsname or \xintexprname or both}
+\label{sec:examples}
+
+Note: \xintexprname.sty automatically loads \xinttoolsname.sty.
+
+\subsection{Completely expandable prime test}
+\label{ssec:primesI}
+
+Let us now construct a completely expandable macro which returns $1$ if its
+given input is prime and $0$ if not:
+\everb|@
+\def\remainder #1#2{\the\numexpr #1-(#1/#2)*#2\relax }
+\def\IsPrime #1%
+ {\xintANDof {\xintApply {\remainder {#1}}{\xintSeq {2}{\xintiiSqrt{#1}}}}}
+|
+
+This uses \csbxint{iiSqrt} and assumes its input is at least $5$. Rather than
+\xintname's own \csbxint{iiRem} we used a quicker |\numexpr| expression as we
+are dealing with short integers. Also we used \csbxint{ANDof} which will
+return $1$ only if all the items are non-zero. The macro is a bit
+silly with an even input, ok, let's enhance it to detect an even input:
+\everb|@
+\def\IsPrime #1%
+ {\xintiiifOdd {#1}
+ {\xintANDof % odd case
+ {\xintApply {\remainder {#1}}
+ {\xintSeq [2]{3}{\xintiiSqrt{#1}}}%
+ }%
+ }
+ {\xintifEq {#1}{2}{1}{0}}%
+ }
+|
+
+We used the \xintname expandable tests (on big integers or fractions)
+in order for |\IsPrime| to be \fexpan dable.
+
+Our integers are short, but without |\expandafter|'s with
+|\@firstoftwo|, % @ n'est plus actif dans le dtx 1.1 !
+or some other related techniques,
+direct use of |\ifnum..\fi| tests is dangerous. So to make the macro more
+efficient we are going to use the expandable tests provided by the package
+\href{http://ctan.org/pkg/etoolbox}{etoolbox}%
+%
+\footnote{\url{http://ctan.org/pkg/etoolbox}}.
+%
+The macro becomes:
+%
+\everb|@
+\def\IsPrime #1%
+ {\ifnumodd {#1}
+ {\xintANDof % odd case
+ {\xintApply {\remainder {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}}
+ {\ifnumequal {#1}{2}{1}{0}}}
+|
+
+In the odd case however we have to assume the integer is at least $7$, as
+|\xintSeq| generates an empty list if |#1=3| or |5|, and |\xintANDof| returns
+$1$ when supplied an empty list. Let us ease up a bit |\xintANDof|'s work by
+letting it work on only $0$'s and $1$'s. We could use:
+%
+\everb|@
+\def\IsNotDivisibleBy #1#2%
+ {\ifnum\numexpr #1-(#1/#2)*#2=0 \expandafter 0\else \expandafter1\fi}
+|
+\noindent
+where the |\expandafter|'s are crucial for this macro to be \fexpan dable and
+hence work within the applied \csbxint{ANDof}. Anyhow, now that we have loaded
+\href{http://ctan.org/pkg/etoolbox}{etoolbox}, we might as well use:
+%
+\everb|@
+\newcommand{\IsNotDivisibleBy}[2]{\ifnumequal{#1-(#1/#2)*#2}{0}{0}{1}}
+|
+\noindent
+Let us enhance our prime macro to work also on the small primes:
+\everb|@
+\newcommand{\IsPrime}[1] % returns 1 if #1 is prime, and 0 if not
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
+ {\xintANDof
+ {\xintApply
+ { \IsNotDivisibleBy {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}%
+ }}% END OF THE ODD BRANCH
+ {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
+}
+|
+
+The input is still assumed positive. There is a deliberate blank before
+\csa{IsNotDivisibleBy} to use this feature of \csbxint{Apply}: a space stops the
+expansion of the applied macro (and disappears). This expansion will be done by
+\csbxint{ANDof}, which has been designed to skip everything as soon as it finds
+a false (i.e. zero) input. This way, the efficiency is considerably improved.
+
+We did generate via the \csbxint{Seq} too many potential divisors though. Later
+sections give two variants: one with \csbxint{iloop} (\autoref{ssec:primesII})
+which is still expandable and another one (\autoref{ssec:primesIII}) which is a
+close variant of the |\IsPrime| code above but with the \csbxint{For} loop, thus
+breaking expandability. The \hyperref[ssec:primesII]{xintiloop variant} does not
+first evaluate the integer square root, the \hyperref[ssec:primesIII]{xintFor
+ variant} still does. I did not compare their efficiencies.
+
+
+Let us construct with this expandable primality test a table of the prime
+numbers up to $1000$. We need to count how many we have in order to know how
+many tab stops one shoud add in the last row.%
+%
+\footnote{although a tabular row may have less tabs than in the
+ preamble, there is a problem with the \char`\|\space\space vertical
+ rule, if one does that.}
+%
+There is some subtlety for this
+last row. Turns out to be better to insert a |\\| only when we know for sure we
+are starting a new row; this is how we have designed the |\OneCell| macro. And
+for the last row, there are many ways, we use again |\xintApplyUnbraced| but
+with a macro which gobbles its argument and replaces it with a tabulation
+character. The \csbxint{For*} macro would be more elegant here.
+%
+\everb?@
+\newcounter{primecount}
+\newcounter{cellcount}
+\newcommand{\NbOfColumns}{13}
+\newcommand{\OneCell}[1]{%
+ \ifnumequal{\IsPrime{#1}}{1}
+ {\stepcounter{primecount}
+ \ifnumequal{\value{cellcount}}{\NbOfColumns}
+ {\\\setcounter{cellcount}{1}#1}
+ {&\stepcounter{cellcount}#1}%
+ } % was prime
+ {}% not a prime, nothing to do
+}
+\newcommand{\OneTab}[1]{&}
+\begin{tabular}{|*{\NbOfColumns}{r}|}
+\hline
+2 \setcounter{cellcount}{1}\setcounter{primecount}{1}%
+ \xintApplyUnbraced \OneCell {\xintSeq [2]{3}{999}}%
+ \xintApplyUnbraced \OneTab
+ {\xintSeq [1]{1}{\the\numexpr\NbOfColumns-\value{cellcount}\relax}}%
+ \\
+\hline
+\end{tabular}
+There are \arabic{primecount} prime numbers up to 1000.
+?
+
+The table has been put in \hyperref[primesupto1000]{float} which appears
+\vpageref{primesupto1000}.
+We had to be careful to use in the last row \csbxint{Seq} with its optional
+argument |[1]| so as to not generate a decreasing sequence from |1| to |0|, but
+really an empty sequence in case the row turns out to already have all its
+cells (which doesn't happen here but would with a number of columns dividing
+$168$).
+%
+\newcommand{\IsNotDivisibleBy}[2]{\ifnumequal{#1-(#1/#2)*#2}{0}{0}{1}}
+
+\newcommand{\IsPrime}[1]
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
+ {\xintANDof
+ {\xintApply
+ { \IsNotDivisibleBy {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}%
+ }}% END OF THE ODD BRANCH
+ {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
+}
+
+\newcounter{primecount}
+\newcounter{cellcount}
+\newcommand{\NbOfColumns}{13}
+\newcommand{\OneCell}[1]
+ {\ifnumequal{\IsPrime{#1}}{1}
+ {\stepcounter{primecount}
+ \ifnumequal{\value{cellcount}}{\NbOfColumns}
+ {\\\setcounter{cellcount}{1}#1}
+ {&\stepcounter{cellcount}#1}%
+ } % was prime
+ {}% not a prime nothing to do
+}
+\newcommand{\OneTab}[1]{&}
+\begin{figure*}[ht!]
+ \centering
+ \phantomsection\label{primesupto1000}
+ \begin{tabular}{|*{\NbOfColumns}{r}|}
+ \hline
+ 2\setcounter{cellcount}{1}\setcounter{primecount}{1}%
+ \xintApplyUnbraced \OneCell {\xintSeq [2]{3}{999}}%
+ \xintApplyUnbraced \OneTab
+ {\xintSeq [1]{1}{\the\numexpr\NbOfColumns-\value{cellcount}\relax}}%
+ \\
+ \hline
+ \end{tabular}
+\smallskip
+\centeredline{There are \arabic{primecount} prime numbers up to 1000.}
+\end{figure*}
+
+\subsection{Another completely expandable prime test}
+\label{ssec:primesII}
+
+The |\IsPrime| macro from \autoref{ssec:primesI} checked expandably if a (short)
+integer was prime, here is a partial rewrite using \csbxint{iloop}. We use the
+|etoolbox| expandable conditionals for convenience, but not everywhere as
+|\xintiloopindex| can not be evaluated while being braced. This is also the
+reason why |\xintbreakiloopanddo| is delimited, and the next macro
+|\SmallestFactor| which returns the smallest prime factor examplifies that. One
+could write more efficient completely expandable routines, the aim here was only
+to illustrate use of the general purpose \csbxint{iloop}. A little table giving
+the first values of |\SmallestFactor| follows, its coding uses \csbxint{For},
+which is described later; none of this uses count registers.
+%
+
+
+\begin{everbatim*}
+\let\IsPrime\undefined \let\SmallestFactor\undefined % clean up possible previous mess
+\newcommand{\IsPrime}[1] % returns 1 if #1 is prime, and 0 if not
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
+ {\if
+ \xintiloop [3+2]
+ \ifnum#1<\numexpr\xintiloopindex*\xintiloopindex\relax
+ \expandafter\xintbreakiloopanddo\expandafter1\expandafter.%
+ \fi
+ \ifnum#1=\numexpr (#1/\xintiloopindex)*\xintiloopindex\relax
+ \else
+ \repeat 00\expandafter0\else\expandafter1\fi
+ }%
+ }% END OF THE ODD BRANCH
+ {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
+}%
+\catcode`_ 11
+\newcommand{\SmallestFactor}[1] % returns the smallest prime factor of #1>1
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {#1}% 3,5,7 are primes
+ {\xintiloop [3+2]
+ \ifnum#1<\numexpr\xintiloopindex*\xintiloopindex\relax
+ \xint_afterfi{\xintbreakiloopanddo#1.}%
+ \fi
+ \ifnum#1=\numexpr (#1/\xintiloopindex)*\xintiloopindex\relax
+ \xint_afterfi{\expandafter\xintbreakiloopanddo\xintiloopindex.}%
+ \fi
+ \iftrue\repeat
+ }%
+ }% END OF THE ODD BRANCH
+ {2}% EVEN BRANCH
+}%
+\catcode`_ 8
+{\centering
+ \begin{tabular}{|c|*{10}c|}
+ \hline
+ \xintFor #1 in {0,1,2,3,4,5,6,7,8,9}\do {&\bfseries #1}\\
+ \hline
+ \bfseries 0&--&--&2&3&2&5&2&7&2&3\\
+ \xintFor #1 in {1,2,3,4,5,6,7,8,9}\do
+ {\bfseries #1%
+ \xintFor #2 in {0,1,2,3,4,5,6,7,8,9}\do
+ {&\SmallestFactor{#1#2}}\\}%
+ \hline
+ \end{tabular}\par
+}
+\end{everbatim*}
+
+\subsection{Miller-Rabin Pseudo-Primality expandably}
+\label{ssec:PrimesIV}
+
+This section is based on my \url{http://tex.stackexchange.com/a/165008} post.
+
+At the time of writing, the code at the link above is still the version from
+April 2016 and it needed some hacks to get recursive (pseudo)-functions
+defined. Since |1.2h| of |2016/11/20| there is \csbxint{NewFunction} which
+allows us here to avoid such internal hacking.
+
+And since |1.3| of |2018/03/01|, it is possible to use \csbxint{defiifunc}
+also for recursive definitions, so we use it here, but we can benefit from it
+only for modular exponentiation as the rest of the code uses |iter| or |break|
+statements which are not yet compatible with \csbxint{defiifunc}.
+
+The |isPseudoPrime(n)| is usable in \csbxint{iiexpr}-essions and establishes
+if its (positive) argument is a Miller-Rabin PseudoPrime to the bases $2, 3,
+5, 7, 11, 13, 17$. If this is true and $n<341550071728321$ (which has 15
+digits) then $n$ really is a prime number.
+
+Similarly $n=3825123056546413051$ (19 digits) is the smallest composite number
+which is a strong pseudo prime for bases $2, 3, 5, 7, 11, 13, 17, 19$ and
+$23$. It is easy to extend the code below to include these additional tests
+(we could make the list of tested bases an argument too, now that I think
+about it.)
+
+For more information see
+ \centeredline{\url{https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test#Deterministic_variants_of_the_test}}
+ and
+\centeredline{\url{http://primes.utm.edu/prove/prove2_3.html}}
+
+In particular, according to \textsc{Jaeschke} \emph{On strong pseudoprimes to
+ several bases,} Math. Comp., 61 (1993) 915-926, if $n < 4,759,123,141$ it is
+enough to establish Rabin-Miller pseudo-primality to bases $a = 2, 7, 61$ to
+prove that $n$ is prime. This range is enough for \TeX\ numbers and we could
+then write a very fast expandable primality test for such numbers using only
+|\numexpr|. Left as an exercise\dots
+
+\begin{everbatim*}
+% I -------------------------------- Modular Exponentiation
+% Computes x^m modulo n (with m non negative).
+% We will always use it with 1 < x < n
+
+\xintdefiifunc powmod_a(x, m, n) :=
+ ifone(m,
+ % m=1, return x modulo n
+ x /: n,
+ % m > 1 test if odd or even and do recursive call
+ if(odd(m), (x*sqr(powmod_a(x, m//2, n))) /: n,
+ sqr(powmod_a(x, m//2, n)) /: n
+ )
+ );
+\xintdefiifunc powmod(x, m, n) := if(m, powmod_a(x, m, n), 1);
+
+% See http://tex.stackexchange.com/a/165008 for macros written directly by a
+% human.
+
+% For comparison here are the underlying support macros defined by
+% \xintdefiifunc from the code above (since 1.3a): (with linebreaks added by
+% TeX when writing to the log)
+
+% Function powmod_a for \xintiiexpr parser associated to \XINT_iiexpr_userfun
+% c_powmod_a with meaning macro:#1#2#3->\xintiiifOne {#2}{\xintiiMod {#1}{#3}}{\x
+% intiiifNotZero {\xintiiOdd {#2}}{\xintiiMod {\xintiiMul {#1}{\xintiiSqr {\xintE
+% xpandArgs {XINT_iiexpr_userfunc_powmod_a}{{#1}{\xintiiDivFloor {#2}{2}}{#3}}}}}
+% {#3}}{\xintiiMod {\xintiiSqr {\xintExpandArgs {XINT_iiexpr_userfunc_powmod_a}{{
+% #1}{\xintiiDivFloor {#2}{2}}{#3}}}}{#3}}}
+
+% Function powmod for \xintiiexpr parser associated to \XINT_iiexpr_userfunc_
+% powmod with meaning macro:#1#2#3->\xintiiifNotZero {#2}{\xintExpandArgs {XINT_i
+% iexpr_userfunc_powmod_a}{{#1}{#2}{#3}}}{1}
+
+% II ------------------------------ Miller-Rabin compositeness witness
+
+% n=2^k m + 1 with m odd and k at least 1
+
+% Choose 1<x<n.
+% compute y=x^m modulo n
+% if equals 1 we can't say anything
+% if equals n-1 we can't say anything
+% else put j=1, and
+% compute repeatedly the square, incrementing j by 1 each time,
+% thus always we have y^{2^{j-1}}
+% -> if at some point n-1 mod n found, we can't say anything and break out
+% -> if however we never find n-1 mod n before reaching
+% z=y^{2^{k-1}} with j=k
+% we then have z^2=x^{n-1}.
+ % Suppose z is not -1 mod n. If z^2 is 1 mod n, then n can be prime only if
+ % z is 1 mod n, and we can go back up, until initial y, and we have already
+ % excluded y=1. Thus if z is not -1 mod n and z^2 is 1 then n is not prime.
+ % But if z^2 is not 1, then n is not prime by Fermat. Hence (z not -1 mod n)
+ % implies (n is composite). (Miller test)
+
+% let's use again xintexpr indecipherable (except to author) syntax. Of course
+% doing it with macros only would be faster.
+
+% Here \xintdefiifunc is not usable because not compatible with iter, break, ...
+% but \xintNewFunction comes to the rescue.
+
+\xintNewFunction{isCompositeWitness}[4]{% x=#1, n=#2, m=#3, k=#4
+ subs((y==1)?{0}
+ {iter(y;(j=#4)?{break(!(@==#2-1))}
+ {(@==#2-1)?{break(0)}{sqr(@)/:#2}},j=1++)}
+ ,y=powmod(#1,#3,#2))}
+
+% added note (2018/03/07) it is possible in the above that m=#3 is never
+% zero, so we should rather call powmod_a for a small gain, but I don't
+% have time to re-read the code comments and settle this.
+
+% III ------------------------------------- Strong Pseudo Primes
+
+% cf
+% http://oeis.org/A014233
+% <http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html>
+% <http://mathworld.wolfram.com/StrongPseudoprime.html>
+
+% check if positive integer <49 si a prime.
+% 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47
+\def\IsVerySmallPrime #1%
+ {\ifnum#1=1 \xintdothis0\fi
+ \ifnum#1=2 \xintdothis1\fi
+ \ifnum#1=3 \xintdothis1\fi
+ \ifnum#1=5 \xintdothis1\fi
+ \ifnum#1=\numexpr (#1/2)*2\relax\xintdothis0\fi
+ \ifnum#1=\numexpr (#1/3)*3\relax\xintdothis0\fi
+ \ifnum#1=\numexpr (#1/5)*5\relax\xintdothis0\fi
+ \xintorthat 1}
+
+\xintNewFunction{isPseudoPrime}[1]{% n = #1
+ (#1<49)?% use ? syntax to evaluate only what is needed
+ {\IsVerySmallPrime{\xintthe#1}}% macro needs to be fed with #1 unlocked.
+ {(even(#1))?
+ {0}
+ {subs(%
+ % L expands to two values m, k hence isCompositeWitness does get
+ % its four variables x, n, m, k
+ isCompositeWitness(2, #1, L)?
+ {0}%
+ {isCompositeWitness(3, #1, L)?
+ {0}%
+ {isCompositeWitness(5, #1, L)?
+ {0}%
+ {isCompositeWitness(7, #1, L)?
+ {0}%
+% above enough for N<3215031751 hence all TeX numbers
+ {isCompositeWitness(11, #1, L)?
+ {0}%
+% above enough for N<2152302898747, hence all 12-digits numbers
+ {isCompositeWitness(13, #1, L)?
+ {0}%
+% above enough for N<3474749660383
+ {isCompositeWitness(17, #1, L)?
+ {0}%
+% above enough for N<341550071728321
+ {1}%
+ }% not needed to comment-out end of lines spaces inside
+ }% \xintexpr but this is too much of a habit for me with TeX!
+ }% I left some after the ? characters.
+ }%
+ }%
+ }% this computes (m, k) such that n = 2^k m + 1, m odd, k>=1
+ , L=iter(#1//2;(even(@))?{@//2}{break(@,k)},k=1++))%
+ }%
+ }%
+}
+
+% if needed:
+%\def\IsPseudoPrime #1{\xinttheiiexpr isPseudoPrime(#1)\relax}
+
+\noindent The smallest prime number at least equal to 3141592653589 is
+\xinttheiiexpr
+ seq(isPseudoPrime(3141592653589+n)?
+ {break(3141592653589+n)}{omit}, n=0++)\relax.
+% we could not use 3141592653589++ syntax because it works only with TeX numbers
+\par
+\end{everbatim*}
+
+
+
+
+
+\subsection{A table of factorizations}
+\label{ssec:factorizationtable}
+
+As one more example with \csbxint{iloop} let us use an alignment to display the
+factorization of some numbers. The loop will actually only play a minor r\^ole
+here, just handling the row index, the row contents being almost entirely
+produced via a macro |\factorize|. The factorizing macro does not use
+|\xintiloop| as it didn't appear to be the convenient tool. As |\factorize| will
+have to be used on |\xintiloopindex|, it has been defined as a delimited macro.
+
+To spare some fractions of a second in the compilation time of this document
+(which has many many other things to do), \number"7FFFFFED{} and
+\number"7FFFFFFF, which turn out to be prime numbers, are not given to
+|factorize| but just typeset directly; this illustrates use of
+\csbxint{iloopskiptonext}.
+
+The code next generates a \hyperref[floatfactorize]{table} which has
+been made into a float appearing \vpageref{floatfactorize}. Here is now
+the code for factorization; the conditionals use the package provided
+|\xint_firstoftwo| and |\xint_secondoftwo|, one could have employed
+rather \LaTeX{}'s own |\@firstoftwo| and |\@secondoftwo|, or, simpler
+still in \LaTeX{} context, the |\ifnumequal|, |\ifnumless| \dots,
+utilities from the package |etoolbox| which do exactly that under the
+hood. Only \TeX{} acceptable numbers are treated here, but it would be
+easy to make a translation and use the \xintname macros, thus extending
+the scope to big numbers; naturally up to a cost in speed.
+
+The reason for some strange looking expressions is to avoid arithmetic overflow.
+
+\begin{everbatim*}
+\catcode`_ 11
+\def\abortfactorize #1\xint_secondoftwo\fi #2#3{\fi}
+
+\def\factorize #1.{\ifnum#1=1 \abortfactorize\fi
+ \ifnum\numexpr #1-2=\numexpr ((#1/2)-1)*2\relax
+ \expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi
+ {2&\expandafter\factorize\the\numexpr#1/2.}%
+ {\factorize_b #1.3.}}%
+
+\def\factorize_b #1.#2.{\ifnum#1=1 \abortfactorize\fi
+ \ifnum\numexpr #1-(#2-1)*#2<#2
+ #1\abortfactorize
+ \fi
+ \ifnum \numexpr #1-#2=\numexpr ((#1/#2)-1)*#2\relax
+ \expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi
+ {#2&\expandafter\factorize_b\the\numexpr#1/#2.#2.}%
+ {\expandafter\factorize_b\the\numexpr #1\expandafter.%
+ \the\numexpr #2+2.}}%
+\catcode`_ 8
+\begin{figure*}[ht!]
+\centering\phantomsection\label{floatfactorize}\normalcolor
+\tabskip1ex
+\centeredline{\vbox{\halign {\hfil\strut#\hfil&&\hfil#\hfil\cr\noalign{\hrule}
+ \xintiloop ["7FFFFFE0+1]
+ \expandafter\bfseries\xintiloopindex &
+ \ifnum\xintiloopindex="7FFFFFED
+ \number"7FFFFFED\cr\noalign{\hrule}
+ \expandafter\xintiloopskiptonext
+ \fi
+ \expandafter\factorize\xintiloopindex.\cr\noalign{\hrule}
+ \ifnum\xintiloopindex<"7FFFFFFE
+ \repeat
+ \bfseries \number"7FFFFFFF&\number "7FFFFFFF\cr\noalign{\hrule}
+}}}
+\centeredline{A table of factorizations}
+\end{figure*}
+\end{everbatim*}
+
+\subsection{Another table of primes}
+\label{ssec:primesIII}
+
+As a further example, let us dynamically generate a tabular with the first $50$
+prime numbers after $12345$. First we need a macro to test if a (short) number
+is prime. Such a completely expandable macro was given in \autoref{ssec:primesI},
+here we consider a variant which will be slightly more efficient. This new
+|\IsPrime| has two parameters. The first one is a macro which it redefines to
+expand to the result of the primality test applied to the second argument. For
+convenience we use the \href{http://ctan.org/pkg/etoolbox}{etoolbox} wrappers to
+various |\ifnum| tests, although here there isn't anymore the constraint of
+complete expandability (but using explicit |\if..\fi| in tabulars has its
+quirks); equivalent tests are provided by \xintname, but they have some overhead
+as they are able to deal with arbitrarily big integers.
+
+\def\IsPrime #1#2%
+{\edef\TheNumber {\the\numexpr #2}% positive integer
+ \ifnumodd {\TheNumber}
+ {\ifnumgreater {\TheNumber}{1}
+ {\edef\ItsSquareRoot{\xintiiSqrt \TheNumber}%
+ \xintFor ##1 in {\xintintegers [3+2]}\do
+ {\ifnumgreater {##1}{\ItsSquareRoot}
+ {\def#1{1}\xintBreakFor}
+ {}%
+ \ifnumequal {\TheNumber}{(\TheNumber/##1)*##1}
+ {\def#1{0}\xintBreakFor }
+ {}%
+ }}
+ {\def#1{0}}}% 1 is not prime
+ {\ifnumequal {\TheNumber}{2}{\def#1{1}}{\def#1{0}}}%
+}%
+
+\everb|@
+\def\IsPrime #1#2% """color[named]{PineGreen}#1=\Result, #2=tested number (assumed >0).;!
+{\edef\TheNumber {\the\numexpr #2}%"""color[named]{PineGreen} hence #2 may be a count or \numexpr.;!
+ \ifnumodd {\TheNumber}
+ {\ifnumgreater {\TheNumber}{1}
+ {\edef\ItsSquareRoot{\xintiiSqrt \TheNumber}%
+ \xintFor """color{red}##1;! in {"""color{red}\xintintegers;! [3+2]}\do
+ {\ifnumgreater {"""color{red}##1;!}{\ItsSquareRoot} """color[named]{PineGreen}% "textcolor{red}{##1} is a \numexpr.;!
+ {\def#1{1}\xintBreakFor}
+ {}%
+ \ifnumequal {\TheNumber}{(\TheNumber/##1)*##1}
+ {\def#1{0}\xintBreakFor }
+ {}%
+ }}
+ {\def#1{0}}}% 1 is not prime
+ {\ifnumequal {\TheNumber}{2}{\def#1{1}}{\def#1{0}}}%
+}
+|
+
+As we used \csbxint{For} inside a macro we had to double the |#| in its |#1|
+parameter. Here is now the code which creates the prime table (the table has
+been put in a \hyperref[primes]{float}, which should be found on page
+\pageref{primes}):
+
+\everb?@
+\newcounter{primecount}
+\newcounter{cellcount}
+\begin{figure*}[ht!]
+ \centering
+ \begin{tabular}{|*{7}c|}
+ \hline
+ \setcounter{primecount}{0}\setcounter{cellcount}{0}%
+ \xintFor """color{red}#1;! in {"""color{red}\xintintegers;! [12345+2]} \do
+"""color[named]{PineGreen}% "textcolor{red}{#1} is a \numexpr.;!
+ {\IsPrime\Result{#1}%
+ \ifnumgreater{\Result}{0}
+ {\stepcounter{primecount}%
+ \stepcounter{cellcount}%
+ \ifnumequal {\value{cellcount}}{7}
+ {"""color{red}\the#1;! \\\setcounter{cellcount}{0}}
+ {"""color{red}\the#1;! &}}
+ {}%
+ \ifnumequal {\value{primecount}}{50}
+ {\xintBreakForAndDo
+ {\multicolumn {6}{l|}{These are the first 50 primes after 12345.}\\}}
+ {}%
+ }\hline
+\end{tabular}
+\end{figure*}
+?
+
+\begin{figure*}[ht!]
+ \centering\phantomsection\label{primes}
+ \begin{tabular}{|*{7}c|}
+ \hline
+ \setcounter{primecount}{0}\setcounter{cellcount}{0}%
+ \xintFor #1 in {\xintintegers [12345+2]} \do
+ {\IsPrime\Result{#1}%
+ \ifnumgreater{\Result}{0}
+ {\stepcounter{primecount}%
+ \stepcounter{cellcount}%
+ \ifnumequal {\value{cellcount}}{7}
+ {\the#1 \\\setcounter{cellcount}{0}}
+ {\the#1 &}}
+ {}%
+ \ifnumequal {\value{primecount}}{50}
+ {\xintBreakForAndDo
+ {\multicolumn {6}{l|}{These are the first 50 primes after 12345.}\\}}
+ {}%
+ }\hline
+\end{tabular}
+\end{figure*}
+
+\subsection{Factorizing again}
+\label{ssec:factorize}
+
+Here is an \fexpan dable macro which computes the factors of an integer. It
+uses the \xintname macros only.
+\begin{everbatim*}
+\catcode`\@ 11
+\let\factorize\relax
+\newcommand\Factorize [1]
+ {\romannumeral0\expandafter\factorize\expandafter{\romannumeral-`0#1}}%
+\newcommand\factorize [1]{\xintiiifOne{#1}{ 1}{\factors@a #1.{#1};}}%
+\def\factors@a #1.{\xintiiifOdd{#1}
+ {\factors@c 3.#1.}%
+ {\expandafter\factors@b \expandafter1\expandafter.\romannumeral0\xinthalf{#1}.}}%
+\def\factors@b #1.#2.{\xintiiifOne{#2}
+ {\factors@end {2, #1}}%
+ {\xintiiifOdd{#2}{\factors@c 3.#2.{2, #1}}%
+ {\expandafter\factors@b \the\numexpr #1+\@ne\expandafter.%
+ \romannumeral0\xinthalf{#2}.}}%
+}%
+\def\factors@c #1.#2.{%
+ \expandafter\factors@d\romannumeral0\xintiidivision {#2}{#1}{#1}{#2}%
+}%
+\def\factors@d #1#2#3#4{\xintiiifNotZero{#2}
+ {\xintiiifGt{#3}{#1}
+ {\factors@end {#4, 1}}% ultimate quotient is a prime with power 1
+ {\expandafter\factors@c\the\numexpr #3+\tw@.#4.}}%
+ {\factors@e 1.#3.#1.}%
+}%
+\def\factors@e #1.#2.#3.{\xintiiifOne{#3}
+ {\factors@end {#2, #1}}%
+ {\expandafter\factors@f\romannumeral0\xintiidivision {#3}{#2}{#1}{#2}{#3}}%
+}%
+\def\factors@f #1#2#3#4#5{\xintiiifNotZero{#2}
+ {\expandafter\factors@c\the\numexpr #4+\tw@.#5.{#4, #3}}%
+ {\expandafter\factors@e\the\numexpr #3+\@ne.#4.#1.}%
+}%
+\def\factors@end #1;{\xintlistwithsep{, }{\xintRevWithBraces {#1}}}%
+\catcode`@ 12
+\end{everbatim*}
+The macro will be acceptably efficient only with numbers having somewhat small
+prime factors.
+\begin{everbatim}
+\Factorize{16246355912554185673266068721806243461403654781833}
+\end{everbatim}
+\begingroup\fdef\Z
+{\Factorize{16246355912554185673266068721806243461403654781833}}
+\noindent{\small\dtt{\Z}}
+
+
+It puts a little stress on the input save stack in order
+not be bothered with previously gathered things.\footnote{2015/11/18 I have
+ not revisited this code for a long time, and perhaps I could improve it now
+ with some new techniques.}
+
+Its output is a comma separated list with the number first, then its prime
+factors with multiplicity. Let's produce something prettier:
+\begin{everbatim*}
+\catcode`_ 11
+\def\ShowFactors #1{\expandafter\ShowFactors_a\romannumeral-`0\Factorize{#1},\relax,\relax,}
+\def\ShowFactors_a #1,{#1=\ShowFactors_b}
+\def\ShowFactors_b #1,#2,{\if\relax#1\else#1^{#2}\expandafter\ShowFactors_b\fi}
+\catcode`_ 8
+\end{everbatim*}
+\begin{everbatim}
+$$\ShowFactors{16246355912554185673266068721806243461403654781833}$$
+\end{everbatim}
+$$\csname ShowFactors_a\expandafter\endcsname\Z,\relax,\relax,$$
+\endgroup
+
+If we only considered small integers, we could write pure |\numexpr| methods
+which would be very much faster (especially if we had a table of small primes
+prepared first) but still ridiculously slow compared to any non expandable
+implementation, not to mention use of programming languages directly accessing
+the CPU registers\dots
+
+\subsection{The Quick Sort algorithm illustrated}\label{ssec:quicksort}
+
+First a completely expandable macro which sorts a comma separated list of
+numbers.%
+%
+\footnote{The code in earlier versions of this manual handled inputs composed
+ of braced items. I have switched to comma separated inputs on the occasion
+ of \url{http://tex.stackexchange.com/a/273084}. The version here is like
+ |code 3| on \url{http://tex.stackexchange.com} (which is about |3x| faster
+ than the earlier code it replaced in this manual) with a modification to
+ make it more efficient if the data has many repeated values.
+
+ A faster routine (for sorting hundreds of values) is provided as |code 6| at
+ the link mentioned in the footnote, it is based on Merge Sort, but limited
+ to inputs which one can handle as \TeX{} dimensions.%
+
+ This |code 6| could be extended to handle more general numbers, as
+ acceptable by \xintfracname. I have also written a non expandable version,
+ which is even faster, but this matters really only when handling hundreds or
+ rather thousands of values.}
+%
+
+The |\QSx| macro expands its list argument, which may thus be a macro; its
+comma separated items must expand to integers or decimal numbers or fractions
+or scientific notation as acceptable to \xintfracname, but if an item is
+itself some (expandable) macro, this macro will be expanded each time the item
+is considered in a comparison test! This is actually good if the macro expands
+in one step to the digits, and there are many many digits, but bad if the macro
+needs to do many computations. Thus |\QSx| should be used with either explicit
+numbers or with items being macros expanding in one step to the numbers
+(particularly if these numbers are very big).
+
+If the interest is only in \TeX{} integers, then one should replace the
+|\xintifCmp| macro with a suitable conditional, possibly helped by tools such as
+|\ifnumgreater|, |\ifnumequal| and |\ifnumless| from
+\href{http://ctan.org/pkg/etoolbox}{etoolbox} (\LaTeX{} only; I didn't see a
+direct equivalent to |\xintifCmp|.) Or, if we are dealing with decimal numbers
+with at most four+four digits, then one should use suitable |\ifdim| tests.
+Naturally this will boost consequently the speed, from having skipped all the
+overhead in parsing fractions and scientific numbers as are acceptable by
+\xintfracname macros, and subsequent treatment.
+
+\begin{everbatim*}
+% THE QUICK SORT ALGORITHM EXPANDABLY
+% \usepackage{xintfrac} in the preamble (latex)
+\makeatletter
+% use extra safe delimiters
+\catcode`! 3 \catcode`? 3
+\def\QSx {\romannumeral0\qsx }%
+% first we check if empty list (else \qsx@finish will not find a comma)
+\def\qsx #1{\expandafter\qsx@a\romannumeral-`0#1,!,?}%
+\def\qsx@a #1{\ifx,#1\expandafter\qsx@abort\else
+ \expandafter\qsx@start\fi #1}%
+\def\qsx@abort #1?{ }%
+\def\qsx@start {\expandafter\qsx@finish\romannumeral0\qsx@b,}%
+\def\qsx@finish ,#1{ #1}%
+%
+% we check if empty of single and if not pick up the first as Pivot:
+\def\qsx@b ,#1#2,#3{\ifx?#3\xintdothis\qsx@empty\fi
+ \ifx!#3\xintdothis\qsx@single\fi
+ \xintorthat\qsx@separate {#1#2}{}{}{#1#2}#3}%
+\def\qsx@empty #1#2#3#4#5{ }%
+\def\qsx@single #1#2#3#4#5?{, #4}%
+\def\qsx@separate #1#2#3#4#5#6,%
+{%
+ \ifx!#5\expandafter\qsx@separate@done\fi
+ \xintifCmp {#5#6}{#4}%
+ \qsx@separate@appendtosmaller
+ \qsx@separate@appendtoequal
+ \qsx@separate@appendtogreater {#5#6}{#1}{#2}{#3}{#4}%
+}%
+%
+\def\qsx@separate@appendtoequal #1#2{\qsx@separate {#2,#1}}%
+\def\qsx@separate@appendtogreater #1#2#3{\qsx@separate {#2}{#3,#1}}%
+\def\qsx@separate@appendtosmaller #1#2#3#4{\qsx@separate {#2}{#3}{#4,#1}}%
+%
+\def\qsx@separate@done\xintifCmp #1%
+ \qsx@separate@appendtosmaller
+ \qsx@separate@appendtoequal
+ \qsx@separate@appendtogreater #2#3#4#5#6#7?%
+{%
+ \expandafter\qsx@f\expandafter {\romannumeral0\qsx@b #4,!,?}{\qsx@b #5,!,?}{#3}%
+}%
+%
+\def\qsx@f #1#2#3{#2, #3#1}%
+%
+\catcode`! 12 \catcode`? 12
+\makeatother
+
+% EXAMPLE
+\begingroup
+\edef\z {\QSx {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}}
+\meaning\z
+
+\def\a {3.123456789123456789}\def\b {3.123456789123456788}
+\def\c {3.123456789123456790}\def\d {3.123456789123456787}
+\oodef\z {\QSx { \a, \b, \c, \d}}%
+% The space before \a to let it not be expanded during the conversion from CSV
+% values to List. The \oodef expands exactly twice (via a bunch of \expandafter's)
+\meaning\z
+\endgroup
+\end{everbatim*} (the spaces after \string\d, etc... come from the use of the
+|\meaning| primitive.)
+
+The choice of pivot as first element is bad if the list is already almost
+sorted. Let's add a variant which will pick up the pivot index randomly. The
+previous routine worked also internally with comma separated lists, but for a
+change this one will use internally lists of braced items (the initial
+conversion via \csbxint{CSVtoList} handles all potential spurious space
+problems).
+
+\unless\ifxetex % pour tester compilation de xint.dtx avec xetex qui n'a pas
+ % \pdfuniformdeviate
+\begin{everbatim*}
+% QuickSort expandably on comma separated values with random choice of pivots
+% ====> Requires availability of \pdfuniformdeviate <====
+% \usepackage{xintfrac, xinttools} in preamble
+\makeatletter
+\def\QSx {\romannumeral0\qsx }% This is a f-expandable macro.
+% This converts from comma separated values on input and back on output.
+% **** NOTE: these steps (and the other ones too, actually) are costly if input
+% has thousands of items.
+\def\qsx #1{\xintlistwithsep{, }%
+ {\expandafter\qsx@sort@a\expandafter{\romannumeral0\xintcsvtolist{#1}}}}%
+%
+% we check if empty or single or double and if not pick up the first as Pivot:
+\def\qsx@sort@a #1%
+ {\expandafter\qsx@sort@b\expandafter{\romannumeral0\xintlength{#1}}{#1}}%
+\def\qsx@sort@b #1{\ifcase #1
+ \expandafter\qsx@sort@empty
+ \or\expandafter\qsx@sort@single
+ \or\expandafter\qsx@sort@double
+ \else\expandafter\qsx@sort@c\fi {#1}}%
+\def\qsx@sort@empty #1#2{ }%
+\def\qsx@sort@single #1#2{#2}%
+\catcode`_ 11
+\def\qsx@sort@double #1#2{\xintifGt #2{\xint_exchangetwo_keepbraces}{}#2}%
+\catcode`_ 8
+\def\qsx@sort@c #1#2{%
+ \expandafter\qsx@sort@sep@a\expandafter
+ {\romannumeral0\xintnthelt{\pdfuniformdeviate #1+\@ne}{#2}}#2?}%
+\def\qsx@sort@sep@a #1{\qsx@sort@sep@loop {}{}{}{#1}}%
+\def\qsx@sort@sep@loop #1#2#3#4#5%
+{%
+ \ifx?#5\expandafter\qsx@sort@sep@done\fi
+ \xintifCmp {#5}{#4}%
+ \qsx@sort@sep@appendtosmaller
+ \qsx@sort@sep@appendtoequal
+ \qsx@sort@sep@appendtogreater {#5}{#1}{#2}{#3}{#4}%
+}%
+%
+\def\qsx@sort@sep@appendtoequal #1#2{\qsx@sort@sep@loop {#2{#1}}}%
+\def\qsx@sort@sep@appendtogreater #1#2#3{\qsx@sort@sep@loop {#2}{#3{#1}}}%
+\def\qsx@sort@sep@appendtosmaller #1#2#3#4{\qsx@sort@sep@loop {#2}{#3}{#4{#1}}}%
+%
+\def\qsx@sort@sep@done\xintifCmp #1%
+ \qsx@sort@sep@appendtosmaller
+ \qsx@sort@sep@appendtoequal
+ \qsx@sort@sep@appendtogreater #2#3#4#5#6%
+{%
+ \expandafter\qsx@sort@recurse\expandafter
+ {\romannumeral0\qsx@sort@a {#4}}{\qsx@sort@a {#5}}{#3}%
+}%
+%
+\def\qsx@sort@recurse #1#2#3{#2#3#1}%
+%
+\makeatother
+
+% EXAMPLES
+\begingroup
+\edef\z {\QSx {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}}
+\meaning\z
+
+\def\a {3.123456789123456789}\def\b {3.123456789123456788}
+\def\c {3.123456789123456790}\def\d {3.123456789123456787}
+\oodef\z {\QSx { \a, \b, \c, \d}}%
+% The space before \a to let it not be expanded during the conversion from CSV
+% values to List. The \oodef expands exactly twice (via a bunch of \expandafter's)
+\meaning\z
+
+\def\somenumbers{%
+3997.6421, 8809.9358, 1805.4976, 5673.6478, 3179.1328, 1425.4503, 4417.7691,
+2166.9040, 9279.7159, 3797.6992, 8057.1926, 2971.9166, 9372.2699, 9128.4052,
+1228.0931, 3859.5459, 8561.7670, 2949.6929, 3512.1873, 1698.3952, 5282.9359,
+1055.2154, 8760.8428, 7543.6015, 4934.4302, 7526.2729, 6246.0052, 9512.4667,
+7423.1124, 5601.8436, 4433.5361, 9970.4849, 1519.3302, 7944.4953, 4910.7662,
+3679.1515, 8167.6824, 2644.4325, 8239.4799, 4595.1908, 1560.2458, 6098.9677,
+3116.3850, 9130.5298, 3236.2895, 3177.6830, 5373.1193, 5118.4922, 2743.8513,
+8008.5975, 4189.2614, 1883.2764, 9090.9641, 2625.5400, 2899.3257, 9157.1094,
+8048.4216, 3875.6233, 5684.3375, 8399.4277, 4528.5308, 6926.7729, 6941.6278,
+9745.4137, 1875.1205, 2755.0443, 9161.1524, 9491.1593, 8857.3519, 4290.0451,
+2382.4218, 3678.2963, 5647.0379, 1528.7301, 2627.8957, 9007.9860, 1988.5417,
+2405.1911, 5065.8063, 5856.2141, 8989.8105, 9349.7840, 9970.3013, 8105.4062,
+3041.7779, 5058.0480, 8165.0721, 9637.7196, 1795.0894, 7275.3838, 5997.0429,
+7562.6481, 8084.0163, 3481.6319, 8078.8512, 2983.7624, 3925.4026, 4931.5812,
+1323.1517, 6253.0945}%
+
+\oodef\z {\QSx \somenumbers}% produced as a comma+space separated list
+% black magic as workaround to the shrinkability of spaces in last line...
+\hsize 87\fontcharwd\font`0
+\lccode`~=32
+\lowercase{\def~}{\discretionary{}{}{\kern\fontcharwd\font`0}}\catcode32 13
+\noindent\phantom{000}\scantokens\expandafter{\meaning\z}\par
+\endgroup
+\end{everbatim*}
+\fi % fin de si pas xetex
+
+
+All the previous examples were with numbers which could have been handled via
+|\ifdim| tests rather than the \csbxint{ifCmp} macro from \xintfracname; using
+|\ifdim| tests would naturally be faster. Even faster routine is |code 6| at
+\url{http://tex.stackexchange.com/a/273084} which uses |\pdfescapestring| and a
+Merge Sort algorithm.
+
+We then turn to a graphical illustration of the algorithm.%
+%
+\footnote{I have rewritten (2015/11/21) the routine to do only once (and not thrice) the
+ needed calls to \csa{xintifCmp}, up to the price of one additional |\edef|,
+ although due to the context execution time on our side is not an issue and
+ moreover is anyhow overwhelmed by the TikZ's activities. Simultaneously I
+ have updated the code \url{http://tex.stackexchange.com/a/142634/4686}. The
+ variant with the choice of pivot on the right has more overhead: the reason
+ is simply that we do not convert the data into an array, but maintain a list
+ of tokens with self-reorganizing delimiters.}
+%
+For simplicity the pivot is always chosen as the first list item. Then we also
+give a variant which picks up the last item as pivot.
+\begin{everbatim*}
+% in LaTeX preamble:
+% \usepackage{xintfrac, xinttools}
+% \usepackage{color}
+% or, when using Plain TeX:
+% \input xintfrac.sty \input xinttools.sty
+% \input color.tex
+%
+% Color definitions
+\definecolor{LEFT}{RGB}{216,195,88}
+\definecolor{RIGHT}{RGB}{208,231,153}
+\definecolor{INERT}{RGB}{199,200,194}
+\definecolor{INERTpiv}{RGB}{237,237,237}
+\definecolor{PIVOT}{RGB}{109,8,57}
+% Start of macro defintions
+\makeatletter
+% \catcode`? 3 % a bit too paranoid. Normal ? will do.
+%
+% argument will never be empty
+\def\QS@cmp@a #1{\QS@cmp@b #1??}%
+\def\QS@cmp@b #1{\noexpand\QS@sep@A\@ne{#1}\QS@cmp@d {#1}}%
+\def\QS@cmp@d #1#2{\ifx ?#2\expandafter\QS@cmp@done\fi
+ \xintifCmp {#1}{#2}\tw@\@ne\z@{#2}\QS@cmp@d {#1}}%
+\def\QS@cmp@done #1?{?}%
+%
+\def\QS@sep@A #1?{\QSLr\QS@sep@L #1\thr@@?#1\thr@@?#1\thr@@?}%
+\def\QS@sep@L #1#2{\ifcase #1{#2}\or\or\else\expandafter\QS@sep@I@start\fi \QS@sep@L}%
+\def\QS@sep@I@start\QS@sep@L {\noexpand\empty?\QSIr\QS@sep@I}%
+\def\QS@sep@I #1#2{\ifcase#1\or{#2}\or\else\expandafter\QS@sep@R@start\fi\QS@sep@I}%
+\def\QS@sep@R@start\QS@sep@I {\noexpand\empty?\QSRr\QS@sep@R}%
+\def\QS@sep@R #1#2{\ifcase#1\or\or{#2}\else\expandafter\QS@sep@done\fi\QS@sep@R}%
+\def\QS@sep@done\QS@sep@R {\noexpand\empty?}%
+%
+\def\QS@loop {%
+ \xintloop
+ % pivot phase
+ \def\QS@pivotcount{0}%
+ \let\QSLr\DecoLEFTwithPivot \let\QSIr \DecoINERT
+ \let\QSRr\DecoRIGHTwithPivot \let\QSIrr\DecoINERT
+ \centerline{\QS@list}%
+ % sorting phase
+ \ifnum\QS@pivotcount>\z@
+ \def\QSLr {\QS@cmp@a}\def\QSRr {\QS@cmp@a}%
+ \def\QSIr {\QSIrr}\let\QSIrr\relax
+ \edef\QS@list{\QS@list}% compare
+ \let\QSLr\relax\let\QSRr\relax\let\QSIr\relax
+ \edef\QS@list{\QS@list}% separate
+ \def\QSLr ##1##2?{\ifx\empty##1\else\noexpand \QSLr {{##1}##2}\fi}%
+ \def\QSIr ##1##2?{\ifx\empty##1\else\noexpand \QSIr {{##1}##2}\fi}%
+ \def\QSRr ##1##2?{\ifx\empty##1\else\noexpand \QSRr {{##1}##2}\fi}%
+ \edef\QS@list{\QS@list}% gather
+ \let\QSLr\DecoLEFT \let\QSRr\DecoRIGHT
+ \let\QSIr\DecoINERTwithPivot \let\QSIrr\DecoINERT
+ \centerline{\QS@list}%
+ \repeat }%
+%
+% \xintFor* loops handle gracefully empty lists.
+\def\DecoLEFT #1{\xintFor* ##1 in {#1} \do {\colorbox{LEFT}{##1}}}%
+\def\DecoINERT #1{\xintFor* ##1 in {#1} \do {\colorbox{INERT}{##1}}}%
+\def\DecoRIGHT #1{\xintFor* ##1 in {#1} \do {\colorbox{RIGHT}{##1}}}%
+\def\DecoPivot #1{\begingroup\color{PIVOT}\advance\fboxsep-\fboxrule\fbox{#1}\endgroup}%
+%
+\def\DecoLEFTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForFirst {\DecoPivot {##1}}{\colorbox{LEFT}{##1}}}}%
+\def\DecoINERTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForFirst {\colorbox{INERTpiv}{##1}}{\colorbox{INERT}{##1}}}}%
+\def\DecoRIGHTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForFirst {\DecoPivot {##1}}{\colorbox{RIGHT}{##1}}}}%
+%
+\def\QuickSort #1{% warning: not compatible with empty #1.
+ % initialize, doing conversion from comma separated values to a list of braced items
+ \edef\QS@list{\noexpand\QSRr{\xintCSVtoList{#1}}}% many \edef's are to follow anyhow
+% earlier I did a first drawing of the list, here with the color of RIGHT elements,
+% but the color should have been for example white, anyway I drop this first line
+ %\let\QSRr\DecoRIGHT
+ %\par\centerline{\QS@list}%
+%
+ % loop as many times as needed
+ \QS@loop }%
+%
+% \catcode`? 12 % in case we had used a funny ? as delimiter.
+\makeatother
+%% End of macro definitions.
+%% Start of Example
+\begingroup\offinterlineskip
+\small
+% \QuickSort {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+% 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}
+% \medskip
+% with repeated values
+\QuickSort {1.0, 0.5, 0.3, 0.8, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 0.3, 1.6, 0.6, 0.3, 0.8, 0.2, 0.8, 0.7, 1.2}
+\endgroup
+\end{everbatim*}
+
+Here is the variant which always picks the pivot as the rightmost element.
+
+\begin{everbatim*}
+\makeatletter
+%
+\def\QS@cmp@a #1{\noexpand\QS@sep@A\expandafter\QS@cmp@d\expandafter
+ {\romannumeral0\xintnthelt{-1}{#1}}#1??}%
+%
+\def\DecoLEFTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForLast {\DecoPivot {##1}}{\colorbox{LEFT}{##1}}}}
+\def\DecoINERTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForLast {\colorbox{INERTpiv}{##1}}{\colorbox{INERT}{##1}}}}
+\def\DecoRIGHTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForLast {\DecoPivot {##1}}{\colorbox{RIGHT}{##1}}}}
+\def\QuickSort #1{%
+ % initialize, doing conversion from comma separated values to a list of braced items
+ \edef\QS@list{\noexpand\QSLr {\xintCSVtoList{#1}}}% many \edef's are to follow anyhow
+ %
+ % loop as many times as needed
+ \QS@loop }%
+\makeatother
+\begingroup\offinterlineskip
+\small
+% \QuickSort {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+% 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}
+% \medskip
+% with repeated values
+\QuickSort {1.0, 0.5, 0.3, 0.8, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 0.3, 1.6, 0.6, 0.3, 0.8, 0.2, 0.8, 0.7, 1.2}
+\endgroup
+\end{everbatim*}
+
+The choice of the first or last item as pivot is not a good one as nearly
+ordered lists will take quadratic time. But for explaining the algorithm via a
+graphical interpretation, it is not that bad. If one wanted to pick up the
+pivot randomly, the routine would have to be substantially rewritten: in
+particular the |\Deco..withPivot| macros need to know where the pivot is, and
+currently this is implemented by using either |\xintifForFirst| or
+|\xintifForLast|.
+
+\etocdepthtag.toc {macros}
+\addtocontents{toc}{\gdef\string\sectioncouleur{{joli}}}
+\addtocontents{toc}{\gdef\string\SKIPSECTIONINTERSPACE{\kern\smallskipamount}}
+\renewcommand{\etocaftertochook}{\addvspace{\bigskipamount}}
+
+\clearpage
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\csname xintkernelnameUp\endcsname
+\section{Macros of the \xintkernelname package}
+\RaisedLabel{sec:kernel}
+
+\localtableofcontents
+
+The \xintkernelname package contains mainly the common code base for handling
+the load-order of the bundle packages, the management of catcodes at loading
+time, definition of common constants and macro utilities which are used
+throughout the code etc ... it is automatically loaded by all packages of the
+bundle.
+
+It provides a few macros possibly useful in other contexts.
+
+\subsection{\csh{odef}, \csh{oodef}, \csh{fdef}}
+\label{odef}
+\label{oodef}
+\label{fdef}
+
+\csa{oodef}|\controlsequence {<stuff>}| does
+\everb|@
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\controlsequence
+ \expandafter\expandafter\expandafter{<stuff>}
+|
+
+This works only for a single
+|\controlsequence|, with no parameter text, even without parameters. An
+alternative would be:
+\everb|@
+\def\oodef #1#{\def\oodefparametertext{#1}%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\oodefparametertext
+ \expandafter\expandafter\expandafter }
+|
+
+\noindent
+but it does not allow |\global| as prefix, and, besides, would have anyhow its
+use (almost) limited to parameter texts without macro parameter tokens
+(except if the expanded thing does not see them, or is designed to deal with
+them).
+
+There is a similar macro |\odef| with only one expansion of the replacement text
+|<stuff>|, and |\fdef| which expands fully |<stuff>| using |\romannumeral-`0|.
+
+They can be prefixed with |\global|. It appears than |\fdef| is generally a bit
+faster than |\edef| when expanding macros from the \xintname bundle, when the
+result has a few dozens of digits. |\oodef| needs thousands of digits it seems
+to become competitive.
+
+
+\subsection{\csh{xintReverseOrder}}\label{xintReverseOrder}
+
+\csa{xintReverseOrder}\marg{list}\etype{n} does not do any expansion of its
+argument and just reverses the order of the tokens in the \meta{list}. Braces
+are removed once and the enclosed material, now unbraced, does not get
+reversed. Unprotected spaces (of any character code) are gobbled.
+%
+\leftedline{|\xintReverseOrder{\xintDigitsOf\xintiiPow {2}{100}\to\Stuff}|}
+%
+\leftedline{gives:
+ \ttfamily{\string\Stuff\string\to1002\string\xintiiPow\string\xintDigitsOf}}
+
+\subsection{\csh{xintLength}}
+\label{xintLength}
+
+\csa{xintLength}\marg{list}\etype{n} counts how many tokens (or braced items)
+there are (possibly none). It does no expansion of its argument, so to use it
+to count things in the replacement text of a macro |\x| one should do
+|\expandafter\xintLength\expandafter{\x}|. Blanks between items are not
+counted. See also \csbxint{NthElt}|{0}| (from \xinttoolsname)
+which first \fexpan ds its argument and then applies the same code.
+%
+\leftedline{|\xintLength {\xintiiPow {2}{100}}|\dtt{=\xintLength
+ {\xintiiPow{2}{100}}}}
+%
+\leftedline{${}\neq{}$|\xintLen {\xintiiPow {2}{100}}|\dtt{=\xintLen
+ {\xintiiPow{2}{100}}}}
+
+\subsection{\csh{xintLastItem}}
+\label{xintLastItem}
+
+\csa{xintLastItem}\marg{list}\etype{n} returns the last item (unbraced) of its
+argument. If the list has no items the output is empty.
+
+It does no expansion, which should be obtained via suitable |\expandafter|'s.
+See also \csbxint{NthElt}|{-1}| from \xinttoolsname which obtains the same
+result (but with another code) after having however \fexpan ded its
+argument first.
+
+\subsection{\csh{xintreplicate}}
+\label{xintreplicate}
+
+\csa{romannumeral}\csa{xintreplicate}|{x}|\marg{stuff}\etype{\numx n} is simply
+copied over from \LaTeX3's |\prg_replicate:nn| with some minor changes.%
+%
+\footnote{I started with the code from Joseph \textsc{Wright}'s answer to \url{http://tex.stackexchange.com/questions/16189/repeat-command-n-times}.}
+It
+does not do any expansion of its second argument but inserts it in the upcoming
+token stream precisely |x| times. Using it with a negative |x| raises no error
+and does nothing.%
+%
+\footnote{This behaviour may change in future.}
+
+Note that expansion must be triggered by a |\romannumeral|.
+
+
+\subsection{\csh{xintgobble}}
+\label{xintgobble}
+
+\csa{romannumeral}\csa{xintgobble}|{x}|\etype{\numx} is a Gobbling macro
+written in the spirit of \LaTeX3's |\prg_replicate:nn| (which I cloned as
+\csbxint{replicate}.) It gobbles |x| tokens upstream, with |x| allowed to be
+as large as \dtt{531440}. Don't use it with |x<0|.
+
+
+Note that expansion must be triggered by a |\romannumeral|.
+
+\csbxint{gobble} looks as if it must be related to \csbxint{Trim} from
+\xinttoolsname, but the latter uses different code (using directly
+\csbxint{gobble} is not possible because one must make sure not to gobble more
+than the number of available items; and counting available items first is an
+overhead which \csbxint{Trim} avoids.) It is rather\csbxint{Keep} with a
+negative first argument which hands over to \csbxint{gobble} (because in that
+case it is needed to count anyhow beforehand the number of items, hence
+\csbxint{gobble} can then be used safely.)
+
+I wrote an \csa{xintcount} in the same spirit as \csa{xintreplicate} and
+\csa{xintgobble}. But it needs to be counting hundreds of tokens to be worth
+its salt compared to \csbxint{Length}.
+
+\subsection{(WIP) \csh{xintUniformDeviate}}
+\label{xintUniformDeviate}
+
+\csa{xintUniformDeviate}|{x}|\etype{\numx} is a wrapper of engine
+|\pdfuniformdeviate| (or |\uniformdeviate|).%
+%
+\footnote{The |\uniformdeviate| primitive has been added to Xe\TeX\
+ and will be available with \TeX Live 2019 release.}
+The implementation is to be
+considered experimental for the time being.\NewWith{1.3b}%
+
+The argument is expanded in |\numexpr| and the macro itself needs two
+expansion steps. It produces like the engine primitive an integer (digit
+tokens) with minimal value \dtt{0} and maximal one \dtt{x-1} if |x| is
+positive, or minimal value \dtt{x+1} and maximal value \dtt{0} if |x| is
+negative. For the discussion next, |x| is supposed positive as this
+avoids having to insert absolute values in formulas.
+
+The underlying engine Random Number Generator works with an array of 55 28bits
+integers. To produce a « uniform » random integer in a given range
+\dtt{0..x-1} it produces next pseudo-random |y| (supposedly uniformly
+distributed, i.e. non-uniformity can be neglected) such that \dtt{$0\leq y <
+ 2^{28}$} and the output is the rounding of \dtt{$x*(y/2^{28})$}, with upper
+bound |x| remapped to |0|. This has following corollaries:
+\begin{enumerate}
+\item with |x=2^{29}| or |x=2^{30}| the engine primitive produces only even
+ numbers,
+\item with |x=3*2^{26}| the integers produced by the RNG when taken modulo
+ three obey the proportion |1:1:2|, not |1:1:1|,
+\item with |x=3*2^{14}| there is analogous although weaker non-uniformity of
+ the random integers when taken modulo 3,
+\item generally speaking pure powers of two should generate uniform random
+ integers, but when the range is divisible by large powers of
+ two, the non-uniformity may be amplified in surprising ways by modulo
+ operations.
+\end{enumerate}
+These observations are not to be construed as criticism of the engine
+primitive itself, which comes from MetaPost, as the code comments and more
+generally the whole of \emph{The Art of Computer Programming, Vol. 2} stresses
+that it should rather be seen as producing random fractions (the unit fraction
+being $2^{28}$). Using it as a generator for \emph{integers} is a bit of an
+abuse.
+
+The first goal of \csa{xintUniformDeviate} is to guarantee a better uniformity
+for the distribution of random integers in any given range |x|.
+
+\emph{If the probability to obtain a given |y| in |0..x-1| is
+ \verb$(1+e(y))/x$, the ``{relative non-uniformity}'' for that value |y| is
+ \verb$|e(y)|$.}
+
+The engine primitive guarantees only \dtt{$x/2^{28}$} relative non-uniformity, and
+\csa{xintUniformDeviate} (in its current implementation) improves this by
+a factor \dtt{|2^{28}=|\number"10000000}: the non-uniformity is guaranteed to
+be bounded by \dtt{$x/2^{56}$}.%
+%
+\expandafter\footnote\expandafter{\ifnum\value{footnote}=55 This «56» is proof
+ of existence of devil, no? \fi These estimates assume that the engine RNG underlying stream of
+ 28-bits integers can be considered uniform; it is known that the
+ parity bits of these 28-bits integers have a period of |55(2^{55}-1)| and
+ that after that many draws the count of 1s has only an excess of 55 compared
+ to the count of 0s, so the scale seems to be an intrinsic non-uniformity of
+ |2^{-55}| but it is not obvious if it applies to much shorter ranges. At any
+ rate we assumed that the non-uniformity for |x| a power of two less than
+ |2^{28}| is negligible in comparison to |2^{-28}|. Bigger powers of 2
+ produce only even integers because the output is rescaled by
+ factor |x/2^{28}|!}
+%
+With such a small non-uniformity, modulo phenomena as mentioned earlier are
+not observable in reasonable computing time.%
+%
+\footnote{The function \func{qraw} is used here not so much to speed up the
+ loop expansion, but in relation to \autoref{ssec:memory} to avoid too much
+ usage of |\csname...\endcsname| storage. Besides, if we had used |mod3|
+ function we would have needed |\xinttheiiexpr mod3(\pdfun...)\relax|
+ wrapping for each individual macro. So we decided rather to use a macro
+ |\ModThree|; of course we could have used |\numexpr|, with the technical
+ problem to expand only once |\pdfuniformdeviate|, which would have led to
+ some extra manoeuver, so ok for |\ModThree|.}
+%
+\begin{everbatim*}
+%\xintdefiifunc mod3(x):= x 'mod' 3;
+\xintNewIIExpr\ModThree[1]{#1 'mod' 3}
+
+\pdfsetrandomseed 87654321
+\xintdefiivar BadDigits:=qraw(%
+ \romannumeral\xintreplicate{503}{\ModThree{\pdfuniformdeviate "C000000},}%
+ \ModThree{\pdfuniformdeviate "C000000}%
+);% 504=503+1
+
+\pdfsetrandomseed 87654321
+\xintdefiivar GoodDigits:=qraw(%
+ \romannumeral\xintreplicate{503}{\ModThree{\xintUniformDeviate{"C000000}},}%
+ \ModThree{\xintUniformDeviate{"C000000}}%
+);% 504=503+1
+
+These 504 digits generated from \string\pdfuniformdeviate:
+\xinttheiiexpr BadDigits\relax\hfill\break
+contain these respective amounts of 0, 1, and 2:
+% (this is definitely not the fastest way to count, but it is fun - and expandable)
+\xinttheiiexpr iter(0,0,0;(i=0)?{[@][0]+1,[@][1],[@][2]}
+ {(i=1)?{[@][0],[@][1]+1,[@][2]}
+ {[@][0],[@][1],[@][2]+1}},
+ i=BadDigits)\relax\par
+
+These 504 digits generated from \string\xintUniformDeviate:
+\xinttheiiexpr GoodDigits\relax\hfill\break
+contain these respective amounts of 0, 1, and 2:
+\xinttheiiexpr iter(0,0,0;(i=0)?{[@][0]+1,[@][1],[@][2]}
+ {(i=1)?{[@][0],[@][1]+1,[@][2]}
+ {[@][0],[@][1],[@][2]+1}},
+ i=GoodDigits)\relax\par
+% % output to data file for double-check with python
+% \newwrite\out
+% \immediate\openout\out=\jobname.data
+% \immediate\write\out{Lbad=[\xinttheiiexpr BadDigits\relax]}
+% \immediate\write\out{Lgood=[\xinttheiiexpr GoodDigits\relax]}
+% \immediate\closeout\out
+\end{everbatim*}
+
+There is a second peculiarity of the engine RNG: two seeds sharing the same
+low |k| bits generate sequences of 28-bits integers which are identical modulo
+|2^k|! In particular after setting the seed, there are only 2 distinct
+sequences of parity bits for the integers generated by |\pdfuniformdeviate (2
+to the power 28)|...
+
+In order to mitigate, \csa{xintUniformDeviate} currently only uses the
+seven high bits from the underlying random stream, using multiple calls to
+|\pdfuniformdeviate 128|. From the Birthday Effect, after about |2^{11}| seeds
+one will likely pick a new one sharing its 22 low bits with an earlier one.
+
+\begin{enumerate}
+\item but as the final random integer is obtained by additional operations
+ involving the range |x| (currently a modulo operation), for odd ranges it is
+ more difficult for bit correlations to be seen,
+\item anyway as they are only
+|2^{28}| seeds in total, after only |2^{14}| seeds it is likely to encounter
+one already explored, and then random integers are identical, however
+complicated the RNG's raw output is malaxed, and whatever the target range
+|x|. And |2^{14}| is only eight times as large as |2^{11}|.
+\end{enumerate}
+
+It would be nice if the engine provided some user interface for
+ letting its RNG execute a given number of iterations without the overhead
+ of replicated executions of |\pdfuniformdeviate|. This could help gain
+ entropy and would reduce correlations across series from distinct seeds.
+
+\smallskip
+\emph{The description above summarizes parts of discussions held with Bruno Le
+ Floch in May 2018 on occasion of his LaTeX3 contributions related to this.}
+\par
+\smallskip
+
+\TeXnote
+currently the implementation of \csbxint{UniformDeviate} consumes exactly 5
+calls to the engine primitive at each execution; the improved |x/2^{56}|
+non-uniformity could be obtained with only 2 calls, but paranoïa about the
+phenonemon of seeds with common bits has led me to accept the overhead of
+using the 7 high bits of 4 random 28bits integers, rather than one single
+28bits integer, or two, or three.
+
+Timings indicate that one \csbxint{UniformDeviate} has a time cost about 13
+times the one for one call to the engine primitive (and not only 5, as the
+extra arithmetic expressions add overhead which is more costly than the
+primitive itself). Except if the code using the pseudo-random number is very
+short, this time penalty will prove in practice much less severe (and this is
+one important reason why we opted for obtaining 28bits via the 7 high bits of
+4 successive pseudo random numbers from the engine primitive). For example
+let's raise 100 times a random integer to the tenth power:
+%
+\footnote{This is done on a |2.4GHz| processor. Hmm... or on a |2.8GHz| one,
+ I should add some automatic recognition to the build process...}
+%
+\begin{everbatim*}
+\pdfsetrandomseed 12345678
+\pdfresettimer\romannumeral\xintreplicate
+ {100}{\fdef\foo{\xintiiPow{\xintUniformDeviate{100000000}}{10}}}%
+\the\dimexpr\pdfelapsedtime sp\relax\space (with \string\xintUniformDeviate)\newline
+(last result: \foo)\newline
+\pdfsetrandomseed 12345678
+\pdfresettimer\romannumeral\xintreplicate
+ {100}{\fdef\foo{\xintiiPow{\pdfuniformdeviate 100000000}{10}}}%
+\the\dimexpr\pdfelapsedtime sp\relax\space (with \string\pdfuniformdeviate)\newline
+(last result: \foo)\par
+\end{everbatim*}
+
+\TeXnote
+the macros \csbxint{RandomDigits} or \csbxint{iiRandRange}, and their
+variants, as well as the supporting macros for \func{random} generate random
+decimal digits eight by eight as if using
+\csa{xintUniformDeviate}|{100000000}|, but via a direct optimized call made
+possibly by the range being a power of 10.
+
+\clearpage
+\let\xintkernelnameUp\undefined
+\csname xintcorenameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintcorename package}
+\RaisedLabel{sec:core}
+
+\localtableofcontents
+
+Package \xintcorename is automatically loaded by \xintname.
+
+\xintcorename provides for big integers the four basic arithmetic operations
+(addition, subtraction, multiplication, division), as well as powers and
+factorials.
+
+In the descriptions of the macros \texttt{\n} and \texttt{\m} stand
+for (big) integers or macros \hyperref[ssec:expansions]{\fexpan ding} to
+such big integers in strict format as described in \autoref{ssec:inputs}.
+
+All macros require strict integer format on input and produce
+strict integer format on output, except:\IMPORTANT
+\begin{itemize}[nosep]
+\item \csbxint{iNum} which converts to strict integer format an input in
+ \emph{extended} integer format, i.e. admitting multiple leading plus or
+ minus signs, then possibly leading zeroes, then digits,
+\item and \csbxint{Num} which is an alias for the former, which gets redefined by
+ \xintfracname to accept more generally also decimal numbers or fractions as
+ input and which truncates them to integers.
+\end{itemize}
+
+Most removed macros listed in \autoref{ssec:coredeprecated} were by design
+applying \csbxint{Num} to their inputs. Typically these macros had a single
+|i| in their names, for example \csa{xintiAdd} was such a companion to
+\csa{xintiiAdd}. \xintfracname redefined \csbxint{Num} to be the macro
+accepting general fractional input and truncating it to an integer. Hence a
+macro such as \csa{xintiAdd} was compatible with the output format of
+\xintfracname macros, contrarily to \csbxint{iiAdd} which handles only strict
+integer format for its inputs. Of course, \xintfracname defined also its own
+\csbxint{Add} which did the addition of its arguments without truncating them
+to integers... but whose output format is the |A/B[N]| format explained in
+\autoref{ssec:outputs}, hence even if representing a small integer it can not
+be used directly in a \TeX\ context such as |\ifnum|, contrarily to
+\csa{xintiAdd} or to \csbxint{iiAdd}.
+
+\begin{framed}
+ This situation was the result of some early-on design
+ decisions which now appear misguided and impede further development. Hence,
+ at |1.2o| it has been decided to deprecate \emph{all} such |i|-macros. And
+ they got removed from the package at |1.3|.\CHANGEDf{1.3}
+\end{framed}
+The |ii| in the names of the macros such as \csbxint{iiAdd} serves to stress
+that they accept only strict integers as input (this is signaled by the margin
+annotation \textcolor[named]{PineGreen}{\emph{f}}), or macros \fexpan ding to
+such strict format (big) integers and that they produce strict integers as
+output.
+
+Other macros, such as \csbxint{Double}, lack the |ii|, but this is only a
+legacy of the history of the package and they have the same requirements for
+input and format of output as the |ii|-macros.%
+%
+\footnote{Regarding \csbxint{FDg} and \csbxint{LDg}, this is a breaking change
+ because formerly they used \csbxint{Num}.}
+
+The letter \texttt{x} (with margin annotation
+\smash{\textcolor[named]{PineGreen}{\numx}}) stands for an argument which will
+be handled embedded in |\numexpr..\relax|. It will thus be completely expanded
+and must give an integer obeying the \TeX{} bounds. See also
+\autoref{sec:useofcount}. This is the case for the argument of \csbxint{iiFac}
+or the exponent argument of \csbxint{iiPow}.
+
+The {\color[named]{PineGreen}$\star$}'s in the margin are there to remind of
+the complete expandability, even \fexpan dability of the macros, as discussed
+in \autoref{ssec:expansions}.
+
+\subsection{\csh{xintiNum}}\label{xintiNum}
+
+|\xintiNum|\n\etype{f} removes chains of plus or minus signs, followed by
+zeroes.
+\begin{everbatim*}
+\xintiNum{+---++----+--000000000367941789479}
+\end{everbatim*}
+
+\subsection{\csh{xintDouble}}\label{xintDouble}
+
+|\xintDouble|\n\etype{f} computes |2N|.
+
+\subsection{\csh{xintHalf}}\label{xintHalf}
+
+|\xintHalf|\n\etype{f} computes |N/2|
+truncated towards zero.
+
+\subsection{\csh{xintInc}}\label{xintInc}
+
+|\xintInc|\n\etype{f} evaluates |N+1|.
+
+\subsection{\csh{xintDec}}\label{xintDec}
+
+|\xintDec|\n\etype{f} evaluates |N-1|.
+
+\subsection{\csh{xintDSL}}\label{xintDSL}
+
+|\xintDSL|\n\etype{f} is decimal shift left, \emph{i.e.} multiplication by
+ten.
+
+\subsection{\csh{xintDSR}}\label{xintDSR}
+
+|\xintDSR|\n\etype{f} is truncated decimal shift right, \emph{i.e.} it is the
+truncation of |N/10| towards zero.
+
+\subsection{\csh{xintDSRr}}\label{xintDSRr}
+
+|\xintDSRr|\n\etype{f} is rounded decimal shift right, \emph{i.e.} it is the
+rounding of |N/10| away from zero. It is needed in \xintcorename for use by
+\csbxint{iiDivRound}.
+
+\subsection{\csh{xintFDg}}\label{xintFDg}
+
+|\xintFDg|\n\etype{f} outputs the first digit (most significant) of the
+number.
+
+\subsection{\csh{xintLDg}}\label{xintLDg}
+
+|\xintLDg|\n\etype{f} outputs the least significant digit. When the number
+is positive, this is the same as the remainder in the Euclidean division by
+ten.
+
+\subsection{\csh{xintiiSgn}}\label{xintiiSgn}
+
+|\xintiiSgn|\n\etype{f} returns 1 if the number is positive, 0 if it is zero
+and -1 if it is negative.
+
+\subsection{\csh{xintiiOpp}}\label{xintiiOpp}
+
+|\xintiiOpp|\n\etype{f} outputs the opposite |-N| of the number |N|.
+
+Important note: an input such as |-\foo| is not legal, generally speaking, as
+argument to the macros of the \xintname bundle (except, naturally in
+\csbxint{expr}-essions). The reason is that the minus sign stops the \fexpan
+sion done during parsing of the inputs. One must use the syntax
+|\xintiiOpp{\foo}| if one wants to pass |-\foo| as
+argument to other macros.
+
+\subsection{\csh{xintiiAbs}}\label{xintiiAbs}
+
+|\xintiiAbs|\n\etype{f} outputs the absolute value of the number.
+
+\subsection{\csh{xintiiAdd}}\label{xintiiAdd}
+
+|\xintiiAdd|\n\m\etype{ff} computes the sum of the two (big) integers.
+
+\subsection{\csh{xintiiCmp}}\label{xintiiCmp}
+
+|\xintiiCmp|\n\m\etype{ff} produces \dtt{1} if |N>M|, \dtt{0} if |N=M|,
+and \dtt{-1} if |N<M|.
+
+At |1.2l| this macro was moved from package \xintname to \xintcorename.
+
+\subsection{\csh{xintiiSub}}\label{xintiiSub}
+
+|\xintiiSub|\n\m\etype{ff} computes the difference |N-M|.
+
+\subsection{\csh{xintiiMul}}\label{xintiiMul}
+
+|\xintiiMul|\n\m\etype{ff} computes the product of two (big) integers.
+
+\subsection{\csh{xintiiSqr}}\label{xintiiSqr}
+
+|\xintiiSqr|\n\etype{f} produces the square.
+
+\subsection{\csh{xintiiPow}}\label{xintiiPow}
+
+|\xintiiPow|\n\x\etype{f\numx} computes |N^x|. For |x=0|, this is 1. For |N=0|
+and |x<0|, or if \verb+|N|>1+ and |x<0|, an error is raised. There will also
+be an error if |x| exceeds the maximal \eTeX{} number \dtt{\number"7FFFFFFF},
+but the real limit for exponents comes from either the computation time or the
+settings of some \TeX\ memory parameters.
+
+\begin{framed}
+ Indeed, the maximal power of $2$ which \xintname is able to compute
+ explicitely is |2^(2^17)=2^131072| which has \dtt{39457} digits. This
+ exceeds the maximal size on input for the \xintcorename multiplication, hence
+ any |2^N| with a higher |N| will fail. On the other hand |2^(2^16)| has
+ \dtt{19729} digits, thus it can be squared once to obtain |2^(2^17)| or
+ multiplied by anything smaller, thus all exponents up to and including |2^17|
+ are allowed (because the power operation works by squaring things and making
+ products).
+\end{framed}
+
+% Side remark: after all it does pay to think! I almost melted my CPU trying by
+% dichotomy to pin-point the exact maximal allowable |N| for |\xintiiPow 2{N}|
+% before finally making the reasoning above. Indeed, each such computation with
+% |N>130000| activates the fan of my laptop and results in so warm a keyboard
+% that I can hardly go on working on it! And it takes about 12 minutes for each
+% |\xintiiPow2{N}| with such |N|'s of the order of $130000$ (a.t.t.o.w.).
+
+\subsection{\csh{xintiiFac}}\label{xintiiFac}
+
+|\xintiiFac|\x\etype{\numx} computes the factorial.
+
+\begin{framed}
+ The (theoretically) allowable range is $0\leqslant x\leqslant10000$.
+
+ However the maximal possible computation depends on the values of some memory
+ parameters of the |tex| executable: with the current default settings of
+ TeXLive 2015, the maximal computable factorial (a.t.t.o.w. 2015/10/06) turns
+ out to be $5971!$ which has $19956$ digits.%\footnotemark
+\end{framed}
+
+
+
+The |factorial| function, or equivalently |!| as post-fix operator is
+available in \csbxint{iiexpr}, \csbxint{expr}:
+\begin{everbatim*}
+\printnumber{\xinttheiiexpr 200!\relax}\par
+\end{everbatim*}
+See also \csbxint{FloatFac} from package \xintfracname for the float variant,
+used in \csbxint{floatexpr}.
+
+
+
+\subsection{\csh{xintiiDivision}}\label{xintiiDivision}
+
+
+|\xintiiDivision|\m\n\etype{ff} produces |{quotient}{remainder}|, in the sense
+of (mathematical) Euclidean division: |M = QN + R|,
+|0|${}\leq{}$\verb+R < |N|+. So the remainder is always non-negative and the
+formula |M = QN + R| always holds independently of the signs of |N| or |M|.
+Division by zero is an error (even if |M| vanishes) and returns |{0}{0}|.
+
+\subsection{\csh{xintiiQuo}}\label{xintiiQuo}
+
+|\xintiiQuo|\m\n\etype{ff} computes the quotient from the Euclidean division.
+
+\subsection{\csh{xintiiRem}}\label{xintiiRem}
+
+|\xintiiRem|\m\n\etype{ff} computes the remainder from the Euclidean
+division.
+
+\subsection{\csh{xintiiDivRound}}\label{xintiiDivRound}
+
+|\xintiiDivRound|\m\n\etype{ff} returns the rounded value of the algebraic
+quotient $M/N$ of two big integers. The rounding is ``away from zero.''
+\begin{everbatim*}
+\xintiiDivRound {100}{3}, \xintiiDivRound {101}{3}
+\end{everbatim*}
+
+\subsection{\csh{xintiiDivTrunc}}\label{xintiiDivTrunc}
+
+|\xintiiDivTrunc|\m\n\etype{ff} computes $trunc(M/N)$. For positive arguments
+$M,N>0$ it is the same as the Euclidean quotient \csbxint{iiQuo}.
+\begin{everbatim*}
+\xintiiQuo{1000}{57} (Euclidean), \xintiiDivTrunc{1000}{57} (truncated),
+\xintiiDivRound{1000}{57} (rounded)\newline
+\xintiiQuo{-1000}{57}, \xintiiDivTrunc{-1000}{57} (t), \xintiiDivRound{-1000}{57} (r)\newline
+\xintiiQuo{1000}{-57}, \xintiiDivTrunc{1000}{-57} (t), \xintiiDivRound{1000}{-57} (r)\newline
+\xintiiQuo{-1000}{-57}, \xintiiDivTrunc{-1000}{-57} (t), \xintiiDivRound{-1000}{-57} (r)\par
+\end{everbatim*}
+
+\subsection{\csh{xintiiDivFloor}}\label{xintiiDivFloor}
+
+|\xintiiDivFloor|\m\n\etype{ff} computes $floor(M/N)$. For positive divisor
+$N>0$ and arbitrary dividend $M$ it is the same as the Euclidean quotient
+\csbxint{iiQuo}.
+\begin{everbatim*}
+\xintiiQuo{1000}{57} (Euclidean), \xintiiDivFloor{1000}{57} (floored)\newline
+\xintiiQuo{-1000}{57}, \xintiiDivFloor{-1000}{57}\newline
+\xintiiQuo{1000}{-57}, \xintiiDivFloor{1000}{-57}\newline
+\xintiiQuo{-1000}{-57}, \xintiiDivFloor{-1000}{-57}\par
+\end{everbatim*}
+
+\subsection{\csh{xintiiMod}}\label{xintiiMod}
+
+|\xintiiMod|\m\n\etype{ff} computes $M - N*floor(M/N)$. For positive divisor
+$N>0$ and arbitrary dividend $M$ it is the same as the Euclidean remainder
+\csbxint{iiRem}.
+
+Formerly, this macro computed $M - N*trunc(M/N)$. The former meaning is
+retained as \csa{xintiiModTrunc}.
+\begin{everbatim*}
+\xintiiRem {1000}{57} (Euclidean), \xintiiMod {1000}{57} (floored),
+\xintiiModTrunc {1000}{57} (truncated)\newline
+\xintiiRem {-1000}{57}, \xintiiMod {-1000}{57}, \xintiiModTrunc {-1000}{57}\newline
+\xintiiRem {1000}{-57}, \xintiiMod {1000}{-57}, \xintiiModTrunc {1000}{-57}\newline
+\xintiiRem {-1000}{-57}, \xintiiMod {-1000}{-57}, \xintiiModTrunc {-1000}{-57}\par
+\end{everbatim*}
+
+\subsection{\csh{xintNum}}\label{xintNum}
+
+|\xintNum|\etype{f} is originally an alias for \csbxint{iNum}. But with
+\xintfracname loaded its meaning is \hyperref[xintNumFrac]{modified} to accept
+more general inputs. It then becomes an alias to \csbxint{TTrunc} which
+truncates the general input to an integer in strict format.
+
+\subsection{Removed macros}\label{ssec:coredeprecated}
+
+These macros were deprecated at |1.2o| and removed at |1.3|.\CHANGED{1.3}
+|\xintiiFDg| (renamed to \csbxint{FDg}),
+|\xintiiLDg| (renamed to \csbxint{LDg}),
+|\xintiOpp|,
+|\xintiAbs|,
+|\xintiAdd|,
+|\xintCmp| (it gets defined by \xintfracname, so deprecation will usually not be
+seen; the macro with this name from former \xintcorename should have been
+called |\xintiCmp| actually),
+|\xintSgn| (it also gets its proper definition from \xintfracname),
+|\xintiSub|,
+|\xintiMul|,
+|\xintiDivision|,
+|\xintiQuo|,
+|\xintiRem|,
+|\xintiDivRound|,
+|\xintiDivTrunc|,
+|\xintiMod|,
+|\xintiSqr|,
+|\xintiPow|,
+|\xintiFac|.
+
+
+\clearpage
+\let\xintcorenameUp\undefined
+\csname xintnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintname package}
+\RaisedLabel{sec:xint}
+
+This package loads automatically \xintcorename (and \xintkernelname) hence
+all macros described in \autoref{sec:core} are still available.
+
+\etocsetnexttocdepth{subsubsection}
+\localtableofcontents
+
+This is \texttt{\xintbndlversion} of
+\texttt{\xintbndldate}.
+
+Version |1.0| was released |2013/03/28|.
+Since |1.1 2014/10/28| the core arithmetic macros have been moved to a separate
+package \xintcorename, which is automatically loaded by \xintname.
+Only the \csbxint{iiSum}, \csbxint{iiPrd}, \csbxint{iiSquareRoot},
+\csbxint{iiPFactorial}, \csbxint{iiBinomial} genuinely add to the arithmetic
+macros from \xintcorename. (\csbxint{iiFac} which computes factorials is
+already in \xintcorename.)
+
+With the exception of \csbxint{Len}, of the «Boolean logic macros» (see
+next paragraphs) all macros require inputs being integers in strict format, see \autoref{ssec:inputs}.%
+%
+\footnote{of
+course for conditionals such as \csbxint{iiifCmp} this constraint applies only
+to the first two arguments.}
+%
+The |ii| in the macro names is here as a reminder of that fact. The output is
+an integer in strict format, or a pair of two braced such integers for
+\csbxint{iiSquareRoot}, with the exception of \csbxint{iiE} which may produce
+strings of zero's if its first argument is zero.
+
+Macros \csbxint{DecSplit} and \csbxint{ReverseDigits} are non-arithmetic and
+have their own specific rules.
+
+For all macros described here for which it makes sense, package \xintfracname
+defines a similar one without |ii| in its name. This will handle more general
+inputs: decimal, scientific numbers, fractions. The |ii| macros provided here
+by \xintname can be nested inside macros of \xintfracname but the opposite
+does not apply, because the output format of the \xintfracname macros, even
+for representing integers, is not understood by the |ii| macros. The «Boolean
+macros» \csbxint{AND} etc... are exceptions though, they work fine if served
+as inputs some \xintfracname output, despite doing only \fexpan
+sion. Prior to |1.2o|, these macros did apply the \csbxint{Num}
+or the more general \xintfracname general parsing, but this overhead was
+deemed superfluous as it serves only to handle hand-written input and is not
+needed if the input is obtained as a nested chain of \xintfracname macros for
+example.
+
+Prior to release |1.2o|, \xintname defined additional macros which applied
+\csbxint{Num} to their input arguments. All these macros were deprecated at
+|1.2o| and have been removed at |1.3|.\CHANGED{1.3}
+
+At |1.3d| macros \csbxint{iiGCD} and \csbxint{iiLCM} from package \xintgcdname
+are also available from loading \xintname only. They are support macros for
+the (multi-arguments) functions \func{gcd} and \func{lcm} in \csbxint{iiexpr}.
+
+See \autoref{ssec:expansions} for the significance of the
+\textcolor[named]{PineGreen}{\Numf}, \textcolor[named]{PineGreen}{\emph{f}},
+\textcolor[named]{PineGreen}{\numx} and \textcolor[named]{PineGreen}{$\star$}
+margin annotations.
+
+
+
+
+
+\subsection{\csh{xintiLen}}\label{xintiLen}
+
+|\xintiLen|\n\etype{\Numf} returns the length of the number, after its parsing
+via \csbxint{iNum}. The count does not include the sign.
+\begin{everbatim*}
+\xintiLen{-12345678901234567890123456789}
+\end{everbatim*}
+
+Prior to |1.2o|, the package defined only \csbxint{Len}, which is extended by
+\xintfracname to fractions or decimal numbers, hence acquires a bit more
+overhead then.
+
+\subsection{\csh{xintReverseDigits}} \label{xintReverseDigits}
+
+\the\dp\strutbox, \the\ht\strutbox, \the\baselineskip
+
+|\xintReverseDigits|\n\etype{f} will reverse the order of the digits of the
+number. \csa{xintRev} is the former denomination and is kept as an alias.
+Leading zeroes resulting from the operation are not removed. Contrarily to
+\csbxint{ReverseOrder} this macro \fexpan ds its argument; it is only usable
+with digit tokens. It does \emph{not} apply \csbxint{Num} to its argument (so
+this must be done explicitely if the argument is an integer produced from some
+\xintfracname macros). It does accept a leading minus sign which will be left
+upfront in the output.
+
+\begingroup
+\begin{everbatim*}
+\oodef\x{\xintReverseDigits
+ {98765432109876543210987654321098765432109876543210}}\meaning\x\par
+\noindent\oodef\x{\xintReverseDigits {\xintReverseDigits
+ {98765432109876543210987654321098765432109876543210}}}\meaning\x\par
+\end{everbatim*}
+\endgroup
+
+\subsection{\csh{xintiiGCD}}
+
+This is the same as the \csbxint{iiGCD} from package \xintgcdname.
+
+\subsection{\csh{xintiiLCM}}
+
+This is the same as the \csbxint{iiLCM} from package \xintgcdname.
+
+\subsection{\csh{xintDecSplit}}
+\label{xintDecSplit}
+
+|\xintDecSplit|\x\n\etype{\numx f} cuts the |N| (a list of digits) into two
+pieces |L| and |R|: it outputs |{L}{R}| where the original |N|
+is the concatenation |LR|. These two pieces are decided according to |x|:
+\begin{itemize}[nosep]
+\item for |x>0|, |R| coincides with the |x| least significant digits. If |x|
+ equals or exceeds the length of |N| the first piece |L| will thus be
+ \emph{empty},
+\item for |x=0|, |R| is empty, and |L| is all of |N|,
+\item for |x<0|, the first piece |L| consists of the \verb+|x|+ most
+ significant digits and the second piece |R| gets the remaining ones. If |x|
+ equals or exceeds the length of |N| the second piece |R| will thus be
+ \emph{empty}.
+\end{itemize}
+
+This macro provides public interface to some functionality which is primarily
+of internal interest. It operates only (after \fexpan sion) on ``strings'' of
+digits tokens: leading zeroes are allowed but a leading sign (even a minus
+sign) will provoke an error.
+
+Breaking change with |1.2i|: formerly |N<0| was replaced by its
+ absolute value. Now, a sign (positive or negative) will create an error.
+
+
+\subsection{\csh{xintDecSplitL}, \csh{xintDecSplitR}}
+\label{xintDecSplitL}
+\label{xintDecSplitR}
+
+|\xintDecSplitL|\x\n\etype{\numx f} returns the first piece (unbraced) from
+the \csa{xintDecSplit} output.
+
+\noindent|\xintDecSplitR|\x\n\etype{\numx f} returns the second piece
+(unbraced) from the \csa{xintDecSplit} output.
+
+\subsection{\csh{xintiiE}}\label{xintiiE}
+
+|\xintiiE|\n\x\etype{f\numx } serves to extend |N| with |x| zeroes. The
+parameter |x| must be non-negative. The same output would be obtained via
+\csbxint{DSH}|{-x}{N}|, except for |N=0|, as |\xintDSH{-x}{N}| multiplies |N|
+by |10^x| hence produces |0| if |N=0| whereas
+|\xintiiE{0}{x}| produces |x+1| zeros.
+\begin{everbatim*}
+\xintiiE {0}{91}\par
+\end{everbatim*}
+
+\subsection{\csh{xintDSH}}\label{xintDSH}
+
+|\xintDSH|\x\n\etype{\numx f} is parametrized decimal shift. When |x| is
+negative, it is like iterating \csbxint{DSL} \verb+|x|+ times (\emph{i.e.}
+multiplication by $10^{-x}$). When |x| positive, it is like iterating
+\csbxint{DSR} |x| times (and is more efficient), and for a non-negative |N|
+this is thus the same as the quotient from the Euclidean division by |10^x|.
+
+\subsection{\csh{xintDSHr}, \csh{xintDSx}}\label{xintDSHr}\label{xintDSx}
+
+|\xintDSHr|\x\n\etype{\numx f} expects |x| to be zero or positive and it
+returns then a value |R| which is correlated to the value |Q| returned by
+\csbxint{DSH}\x\n{} in the following manner:
+\begin{itemize}
+\item if |N| is
+ positive or zero, |Q| and |R| are the quotient and remainder in
+ the Euclidean division by |10^x| (obtained in a more efficient
+ manner than using \csa{xintiiDivision}),
+\item if |N| is negative let
+ |Q1| and |R1| be the quotient and remainder in the Euclidean
+ division by |10^x| of the absolute value of |N|. If |Q1|
+ does not vanish, then |Q=-Q1| and |R=R1|. If |Q1| vanishes, then
+ |Q=0| and |R=-R1|.
+\item for |x=0|, |Q=N| and |R=0|.
+\end{itemize}
+So one has |N = 10^x Q + R| if |Q| turns out to be zero or
+positive, and |N = 10^x Q - R| if |Q| turns out to be negative,
+which is exactly the case when |N| is at most |-10^x|.
+
+|\xintDSx|\x\n\etype{\numx f} for |x| negative is exactly as
+|\xintDSH|\x\n, \emph{i.e.} multiplication by $10^{-|x|}$. For |x| zero or
+positive it returns the two numbers |{Q}{R}| described above, each one within
+braces. So |Q| is |\xintDSH|\x\n, and |R| is |\xintDSHr|\x\n, but computed
+simultaneously.
+
+\subsection{\csh{xintiiEq}}\label{xintiiEq}
+
+|\xintiiEq|\n\m\etype{ff} returns 1 if |N=M|, 0 otherwise.
+
+\subsection{\csh{xintiiNotEq}}\label{xintiiNotEq}
+
+|\xintiiNotEq|\n\m\etype{ff} returns 0 if |N=M|, 1 otherwise.
+
+
+\subsection{\csh{xintiiGeq}}\label{xintiiGeq}
+
+|\xintiiGeq|\n\m\etype{ff} returns 1 if the \emph{absolute value}
+of the first number is at least equal to the absolute value of the second
+number. If \verb+|N|<|M|+ it returns 0.
+
+Important: the macro compares \emph{absolute values}.
+
+\subsection{\csh{xintiiGt}}\label{xintiiGt}
+
+|\xintiiGt|\n\m\etype{ff} returns 1 if |N|$>$|M|, 0 otherwise.
+
+\subsection{\csh{xintiiLt}}\label{xintiiLt}
+
+|\xintiiLt|\n\m\etype{ff} returns 1 if |N|$<$|M|, 0 otherwise.
+
+\subsection{\csh{xintiiGtorEq}}\label{xintiiGxstorEq}
+
+|\xintiiGtorEq|\n\m\etype{ff} returns 1 if |N|$\geqslant$|M|, 0 otherwise.
+Extended by \xintfracname to fractions.
+
+\subsection{\csh{xintiiLtorEq}}\label{xintiiLtorEq}
+
+|\xintiiLtorEq|\n\m\etype{ff} returns 1 if |N|$\leqslant$|M|, 0 otherwise.
+
+\subsection{\csh{xintiiIsZero}}\label{xintiiIsZero}
+
+|\xintiiIsZero|\n\etype{f} returns 1 if |N=0|, 0 otherwise.
+
+\subsection{\csh{xintiiIsNotZero}}\label{xintiiIsNotZero}
+
+|\xintiiIsNotZero|\n\etype{f} returns 1 if |N!=0|, 0 otherwise.
+
+\subsection{\csh{xintiiIsOne}}\label{xintiiIsOne}
+
+|\xintiiIsOne|\n\etype{f} returns 1 if |N=1|, 0 otherwise.
+
+\subsection{\csh{xintiiOdd}}\label{xintiiOdd}
+
+|\xintiiOdd|\n\etype{f} is 1 if the number is odd and 0 otherwise.
+
+\subsection{\csh{xintiiEven}}\label{xintiiEven}
+
+|\xintiiEven|\n\etype{f} is 1 if the number is even and 0 otherwise.
+
+\subsection{\csh{xintiiMON}}\label{xintiiMON}
+
+|\xintiiMON|\n\etype{f} computes |(-1)^N|.
+\begin{everbatim*}
+\xintiiMON {-280914019374101929}
+\end{everbatim*}
+
+\subsection{\csh{xintiiMMON}}\label{xintiiMMON}
+
+|\xintiiMMON|\n\etype{f} computes |(-1)^{N-1}|.
+\begin{everbatim*}
+\xintiiMMON {280914019374101929}
+\end{everbatim*}
+
+\subsection{\csh{xintiiifSgn}}\label{xintiiifSgn}
+
+\csh{xintiiifSgn}\marg{N}\marg{A}\marg{B}\marg{C}\etype{fnnn} executes either
+the \meta{A}, \meta{B} or \meta{C} code, depending on its first argument being
+respectively negative, zero, or positive.
+
+\subsection{\csh{xintiiifZero}}\label{xintiiifZero}
+
+\csa{xintiiifZero}\marg{N}\marg{IsZero}\marg{IsNotZero}\etype{fnn} expandably
+checks if the first mandatory argument |N| (a number, possibly a fraction if
+\xintfracname is loaded, or a macro expanding to one such) is zero or not. It
+then either executes the first or the second branch.
+
+Beware that both branches must be present.
+
+\subsection{\csh{xintiiifNotZero}}\label{xintiiifNotZero}
+
+\csa{xintiiifNotZero}\marg{N}\marg{IsNotZero}\marg{IsZero}\etype{fnn}
+expandably checks if the first mandatory argument |N| is not
+zero or is zero. It then either executes the first or the second branch.
+
+Beware that both branches must be present.
+
+\subsection{\csh{xintiiifOne}}\label{xintiiifOne}
+
+\csa{xintiiifOne}\marg{N}\marg{IsOne}\marg{IsNotOne}\etype{fnn} expandably
+checks if the first mandatory argument |N| is one or not one. It
+then either executes the first or the second branch. Beware that both branches
+must be present.
+
+\subsection{\csh{xintiiifCmp}}\label{xintiiifCmp}
+
+\csa{xintiiifCmp}\marg{A}\marg{B}\marg{A<B}\marg{A=B}\marg{A>B}\etype{ffnnn}
+compares its first two arguments and chooses accordingly the correct branch.
+
+\subsection{\csh{xintiiifEq}}\label{xintiiifEq}
+
+\csa{xintiiifEq}\marg{A}\marg{B}\marg{A=B}\marg{not(A=B)}\etype{ffnn} checks
+equality of its two first arguments and executes the corresponding branch.
+
+\subsection{\csh{xintiiifGt}}\label{xintiiifGt}
+
+\csa{xintiiifGt}\marg{A}\marg{B}\marg{A>B}\marg{not(A>B)}\etype{ffnn}
+checks if $A>B$ and executes the corresponding branch.
+
+\subsection{\csh{xintiiifLt}}\label{xintiiifLt}
+
+\csa{xintiiifLt}\marg{A}\marg{B}\marg{A<B}\marg{not(A<B)}\etype{ffnn}
+checks if $A<B$ and executes the corresponding branch.
+
+\subsection{\csh{xintiiifOdd}}\label{xintiiifOdd}
+
+\csa{xintiiifOdd}\marg{A}\marg{A odd}\marg{A even}\etype{fnn} checks if $A$ is
+and odd integer and executes the corresponding branch.
+
+\subsection{\csh{xintiiSum}}\label{xintiiSum}
+
+\csa{xintiiSum}\marg{braced things}\etype{{\lowast f}} after expanding its
+argument expects to find a sequence of tokens (or braced material). Each is
+\fexpan ded, and the sum of all these numbers is returned.
+\begin{everbatim*}
+\xintiiSum{{123}{-98763450}{\xintiiFac{7}}{\xintiiMul{3347}{591}}}\newline
+\xintiiSum{1234567890}\newline
+\xintiiSum{1234}\newline
+\xintiiSum{}
+\end{everbatim*}
+
+A sum with only one term returns that
+number: |\xintiiSum {{-1234}}|\dtt{=\xintiiSum {{-1234}}}.
+Attention that |\xintiiSum {-1234}| is not legal input and would make the
+\TeX{} run fail.
+
+\subsection{\csh{xintiiPrd}}\label{xintiiPrd}
+
+\csa{xintiiPrd}\marg{braced things}\etype{{\lowast f}} after expanding its
+argument expects to find a sequence of (of braced items or unbraced
+single tokens). Each is
+expanded (with the usual meaning), and the product of all these numbers is
+returned.
+\begin{everbatim*}
+\xintiiPrd{{-9876}{\xintiiFac{7}}{\xintiiMul{3347}{591}}}\newline
+\xintiiPrd{123456789123456789}\newline
+\xintiiPrd {1234}\newline
+\xintiiPrd{}
+\end{everbatim*}
+
+Attention that |\xintiiPrd {-1234}| is not legal input and would make the \TeX{}
+compilation fail.
+\begin{everbatim*}
+$2^{200}3^{100}7^{100}=\printnumber
+ {\xintiiPrd {{\xintiiPow {2}{200}}{\xintiiPow {3}{100}}{\xintiiPow {7}{100}}}}$
+\end{everbatim*}
+
+With \xintexprname, the syntax is the natural one:
+\begin{everbatim*}
+$2^{200}3^{100}7^{100}=\printnumber{\xinttheiiexpr 2^200 * 3^100 * 7^100\relax}$
+\end{everbatim*}
+
+\subsection{\csh{xintiiSquareRoot}}
+\label{xintiiSquareRoot}
+
+|\xintiiSquareRoot|\n\etype{f} returns two braced integers |{M}{d}| which
+satisfy |d>0| and |M^2-d=N| with
+|M| the smallest (hence if |N=k^2| is a perfect square then |M=k+1|, |d=2k+1|).
+
+\begin{everbatim*}
+\xintAssign\xintiiSquareRoot {17000000000000000000000000}\to\A\B
+\xintiiSub{\xintiiSqr\A}\B=\A\string^2-\B
+\end{everbatim*}
+
+A rational approximation to $\sqrt{|N|}$ is $|M|-\frac{|d|}{|2M|}$ which is a
+majorant and the error is at most |1/2M| (if |N| is a perfect square |k^2|
+this gives |k+1/(2k+2)|, not |k|.)
+
+Package \xintfracname has \csbxint{FloatSqrt} for square roots of floating
+point numbers.
+
+\subsection{\csh{xintiiSqrt}, \csh{xintiiSqrtR}}
+\label{xintiiSqrt}\label{xintiiSqrtR}
+
+\noindent|\xintiiSqrt|\n\ computes the largest integer whose square
+is at most equal to |N|.\etype{f} |\xintiiSqrtR|
+produces the rounded, not truncated, square root.\etype{f}
+\begin{everbatim*}
+\begin{itemize}[nosep]
+\item \xintiiSqrt {3000000000000000000000000000000000000}
+\item \xintiiSqrtR {3000000000000000000000000000000000000}
+\item \xintiiSqrt {\xintiiE {3}{100}}
+\end{itemize}
+\end{everbatim*}
+
+\subsection{\csh{xintiiBinomial}}\label{xintiiBinomial}
+
+|\xintiiBinomial{x}{y}|\etype{\numx\numx} computes binomial coefficients.
+
+If |x<0| an out-of-range error is raised. Else, if |y<0| or if |x<y| the macro
+evaluates to \dtt{\xintiiBinomial{1}{-1}}.
+
+
+%\begin{framed}
+ The allowable range is $0\leqslant x\leqslant99999999$.
+%\end{framed}
+ % Thus the maximal computable value is ${9999 \choose 5000}$ which turns out
+ % to have \dtt{3008} digits.
+ But this theoretical range includes binomial coefficients with more than the
+ roughly 19950 digits that the arithmetics of \xintname can handle. In such
+ cases, the computation will end up in a low-level \TeX{} error after a
+ long time.
+
+%
+It turns out that ${65000 \choose 32500}$ has \dtt{19565} digits and
+${64000 \choose 32000}$ has \dtt{19264} digits. The latter can be evaluated
+(this takes a long long time) but presumably not the former (I didn't try).
+Reasonable feasible evaluations are with binomial coefficients not exceeding
+about one thousand digits.
+
+
+%
+The |binomial| function is available in the \xintexprname parsers.
+\begin{everbatim*}
+\xinttheiiexpr seq(binomial(100,i), i=47..53)\relax
+\end{everbatim*}
+
+See \csbxint{FloatBinomial} from package \xintfracname for the float variant,
+used in \csbxint{floatexpr}.
+
+
+In order to
+evaluate binomial coefficients ${x \choose y}$ with $x>99999999$, or even
+$x\geqslant 2^{31}$, but $y$ is not too large, one may use an ad hoc function
+definition such as:
+\begin{everbatim*}
+\xintdeffunc mybigbinomial(x,y):=`*`(x-y+1..[1]..x)//y!;%
+% without [1], x would have been limited to < 2^31
+\printnumber{\xinttheexpr mybigbinomial(98765432109876543210,10)\relax}
+\end{everbatim*}
+
+
+To get this functionality in macro form, one can do:
+\begin{everbatim*}
+\xintNewIIExpr\MyBigBinomial [2]{`*`(#1-#2+1..[1]..#1)//#2!}
+\printnumber{\MyBigBinomial {98765432109876543210}{10}}
+\end{everbatim*}
+
+As we used \csa{xintNewIIExpr}, this macro will only accept strict integers.
+Had we used \csa{xintNewExpr} the |\MyBigBinomial| would have accepted general
+fractions or decimal numbers, and computed the product at the numerator
+without truncating them to integers; but the factorial at the denominator
+would truncate its argument.
+
+\subsection{\csh{xintiiPFactorial}}\label{xintiiPFactorial}
+
+|\xintiiPFactorial{a}{b}|\etype{\numx\numx} computes the partial factorial
+|(a+1)(a+2)...b|. For |a=b| the product is considered empty hence returns |1|.
+
+%\begin{framed}
+ The allowed range
+%
+%
+%
+ is $-100000000\leqslant a, b\leqslant99999999$.
+ The
+ rule is to interpret the formula as the product of the
+ $j$'s such that $a<j\leqslant b$, hence in particular if $a\geqslant b$ the
+ product is empty and the macro evaluates to |1|.
+
+ Only for $0\leqslant a\leqslant b$ is the behaviour to be considered
+ stable. For $a>b$ or negative arguments, the definitive rules have not yet
+ been fixed.
+
+\begin{everbatim*}
+\xintiiPFactorial {100}{130}
+\end{everbatim*}
+%\end{framed}
+
+This theoretical range allows computations whose result values would have more
+than the roughly 19950 digits that the arithmetics of \xintname can handle. In
+such cases, the computation will end up in a low-level \TeX{} error after a
+long time.
+
+The |pfactorial| function is available in the \xintexprname parsers.
+\begin{everbatim*}
+\xinttheiiexpr pfactorial(100,130)\relax
+\end{everbatim*}
+
+See \csbxint{FloatPFactorial} from package \xintfracname for the float
+variant, used in \csbxint{floatexpr}.
+
+
+In case values are needed with $b>99999999$, or even $b\geqslant 2^{31}$, but
+$b-a$ is not too large, one may use an ad hoc function definition such as:
+\begin{everbatim*}
+\xintdeffunc mybigpfac(a,b):=`*`(a+1..[1]..b);%
+% without [1], b would have been limited to < 2^31
+\printnumber{\xinttheexpr mybigpfac(98765432100,98765432120)\relax}
+\end{everbatim*}
+
+\subsection{\csh{xintiiMax}}\label{xintiiMax}
+
+|\xintiiMax|\n\m\etype{ff} returns the largest of the two in the sense
+of the order structure on the relative integers (\emph{i.e.} the right-most
+number if they are put on a line with positive numbers on the right):
+|\xintiiMax {-5}{-6}|\dtt{=\xintiiMax{-5}{-6}}.
+
+\subsection{\csh{xintiiMin}}\label{xintiiMin}
+
+|\xintiiMin|\n\m\etype{ff} returns the smallest of the two in the sense of the
+order structure on the relative integers (\emph{i.e.} the left-most number if
+they are put on a line with positive numbers on the right): |\xintiiMin
+{-5}{-6}|\dtt{=\xintiiMin{-5}{-6}}.
+
+\subsection{\csh{xintiiMaxof}}\label{xintiiMaxof}
+
+\csa{xintiiMaxof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast f} returns the
+maximum. The list argument may be a macro, it is \fexpan ded first.
+
+\subsection{\csh{xintiiMinof}}\label{xintiiMinof}
+
+\csa{xintiiMinof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast f} returns the
+minimum. The list argument may be a macro, it is \fexpan ded first.
+
+\subsection{\csh{xintifTrueAelseB}}
+\label{xintifTrueAelseB}
+
+\csa{xintifTrueAelseB}\marg{f}\marg{true branch}\marg{false branch}\etype{fnn}
+is a synonym for \csbxint{iiifNotZero}.
+
+{\small
+ \noindent |\xintiiifnotzero| is lowercase companion macro.\par }
+
+Note 1: as it does only \fexpan sion on its argument it fails with inputs such
+as |--0|. But with \xintfracname loaded, it does work fine if nested with
+other \xintfracname macros, because the output format of such macros is fine
+as input to \csbxint{iiifNotZero}. This remark applies to all other «Boolean
+logic» macros next.
+
+Note 2: prior to |1.2o| this macro was using \csbxint{ifNotZero} which applies
+\csbxint{Num} to its argument (or gets redefined by \xintfracname to handle
+general decimal numbers or fractions). Hence it would have
+worked with input such as |--0|. But it was decided at |1.2o| that the
+overhead was not worth it. The same remark applies to the other «Boolean
+logic» type macros next.
+
+\subsection{\csh{xintifFalseAelseB}}
+\label{xintifFalseAelseB}
+
+\csa{xintifFalseAelseB}\marg{f}\marg{false branch}\marg{true
+ branch}\etype{fnn} is a synonym for \csbxint{iiifZero}.
+
+{\small
+ \noindent |\xintiiifzero| is lowercase companion macro.\par }
+
+\subsection{\csh{xintNOT}}\label{xintNOT}
+
+\csa{xintNOT}\etype{f} is a synonym for \csa{xintiiIsZero}.
+
+{\small |\xintiiiszero| serves as lowercase companion macro.\par}
+
+
+\subsection{\csh{xintAND}}\label{xintAND}
+
+|\xintAND{f}{g}|\etype{ff} returns \dtt{1} if |f!=0| and |g!=0| and \dtt{0}
+otherwise.
+
+\subsection{\csh{xintOR}}\label{xintOR}
+
+|\xintOR{f}{g}|\etype{ff} returns \dtt{1} if |f!=0| or |g!=0| and \dtt{0}
+otherwise.
+
+\subsection{\csh{xintXOR}}\label{xintXOR}
+
+|\xintXOR{f}{g}|\etype{ff} returns \dtt{1} if exactly one of |f| or |g|
+is true (i.e. non-zero), else \dtt{0}.
+
+\subsection{\csh{xintANDof}}\label{xintANDof}
+
+\csa{xintANDof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast f} returns \dtt{1} if
+all are true (i.e. non zero) and \dtt{0} otherwise. The list argument may be a
+macro, it (or rather its first token) is \fexpan ded first to deliver its
+items.
+
+\subsection{\csh{xintORof}}\label{xintORof}
+
+\csa{xintORof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast f} returns \dtt{1} if at
+least one is true (i.e. does not vanish), else it produces \dtt{0}. The list
+argument may be a macro, it is \fexpan ded first.
+
+\subsection{\csh{xintXORof}}\label{xintXORof}
+
+\csa{xintXORof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast f} returns \dtt{1} if an
+odd number of them are true (i.e. do not vanish), else it produces \dtt{0}.
+The list argument may be a macro, it is \fexpan ded first.
+
+\subsection{\csh{xintLen}}\label{xintLen}
+
+|\xintLen|\etype{\Numf} is originally an alias for \csbxint{iLen}. But with
+\xintfracname loaded its meaning is \hyperref[xintLenFrac]{modified} to accept
+more general inputs.
+
+\subsection{Removed macros (they require \xintfracname)}\label{ssec:xintdeprecated}
+
+These macros now require \xintfracname. They have been removed from \xintname
+at |1.3|.\CHANGED{1.3}
+|\xintEq|,
+|\xintNeq|,
+|\xintGeq|,
+|\xintGt|,
+|\xintLt|,
+|\xintGtorEq|,
+|\xintLtorEq|,
+|\xintIsZero|,
+|\xintIsNotZero|,
+|\xintIsOne|,
+|\xintOdd|,
+|\xintEven|,
+|\xintifSgn|,
+|\xintifCmp|,
+|\xintifEq|,
+|\xintifGt|,
+|\xintifLt|,
+|\xintifZero|,
+|\xintifNotZero|,
+|\xintifOne|,
+|\xintifOdd|.
+
+With the exception of |\xintNeq| which was renamed to |\xintNotEq|, the above
+listed macros all belong to \xintfracname.
+
+\subsection{Removed macros (they used \csh{xintNum})}\label{ssec:xintdeprecatedNum}
+
+These macros filtered their arguments via \csbxint{Num}. They got deprecated
+at |1.2o| and removed at |1.3|:\CHANGED{1.3}
+|\xintMON|,
+|\xintMMON|,
+|\xintiMax|,
+|\xintiMin|,
+|\xintiMaxof|,
+|\xintiMinof|,
+|\xintiSquareRoot|,
+|\xintiSqrt|,
+|\xintiSqrtR|,
+|\xintiBinomial|,
+|\xintiPFactorial|.
+
+\begin{framed}
+ All randomness related macros are Work-In-Progress: implementation and user
+ interface may change. They work only if the \TeX\ engine provides the
+ \csa{uniformdeviate} or \csa{pdfuniformdeviate} primitive. See
+ \csbxint{UniformDeviate} for additional information.
+\end{framed}
+
+\subsection{(WIP) \csh{xintRandomDigits}}\label{xintRandomDigits}
+
+|\xintRandomDigits{N}|\etype{\numx} expands in two steps to |N| random decimal
+digits. The argument must be non-negative and is limited by \TeX\ memory
+parameters.\NewWith{1.3b}
+On \TeX Live 2018 with input save stack size at \dtt{5000} the
+maximal allowed |N| is at most \dtt{19984} (tested within a |\write| to an
+auxiliary file, the macro context may cause a reduced maximum).
+\begin{everbatim*}
+\pdfsetrandomseed 271828182
+\xintRandomDigits{92}
+\end{everbatim*}
+
+\TeXnote the digits are produced eight by eight by the same method which would
+result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+
+% \subsection{\csh{\xintOneRandomDigit}}\label{xintOneRandomDigit}
+
+\subsection{(WIP) \csh{xintXRandomDigits}}\label{xintXRandomDigits}
+
+|\xintXRandomDigits{N}|\retype{\numx} expands under exhaustive expansion
+(|\edef|, |\write|, |\csname| ...) to |N| random decimal
+digits. The argument must be non-negative.\NewWith{1.3b}
+For example:
+\begin{everbatim}
+\newwrite\out
+\immediate\openout\out=\jobname-out.txt
+\immediate\write\out{\xintXRandomDigits{4500000}}
+\immediate\closeout\out
+\end{everbatim}
+creates a \dtt{4500001} bytes file (it ends with a line feed character).
+Trying with \dtt{5000000} raises this error:
+\begin{everbatim}
+Runaway text?
+588875947168511582764514135070217555354479805240439407753451354223283\ETC.
+! TeX capacity exceeded, sorry [main memory size=5000000].
+<inserted text> 666515098
+
+l.15 ...ate\write\out{\xintXRandomDigits{5000000}}
+
+No pages of output.
+Transcript written on temp.log.
+\end{everbatim}
+This can be lifted by increasing the \TeX\ memory settings (installation
+dependent).
+
+\TeXnote the digits are produced eight by eight by the same method which would
+result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+
+\subsection{(WIP) \csh{xintiiRandRange}}\label{xintiiRandRange}
+
+|\xintiiRandRange{A}|\etype{f} expands to a random (big) integer |N|
+such that |0<=N<A|. It is a supporting macro for \func{randrange}. As with
+Python's function of the same name, it is an error if |A<=0|.\NewWith{1.3b}
+\begin{everbatim*}
+\pdfsetrandomseed 271828314
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\newline
+\xintiiRandRange{\xintNum{1e40}}\newline
+\pdfsetrandomseed 271828314
+\xinttheiiexpr randrange(num(1e40))\relax\newline % bare 1e40 not understood by \xintiiexpr
+\pdfsetrandomseed 271828314
+\xinttheexpr randrange(1e40)\relax
+\end{everbatim*}
+
+Of course, keeping in mind that the set of seeds is of cardinality |2^{28}|,
+randomness is a bit illusory here say with |A=10^N|, |N>8|, if we proceed
+immediately after having set the seed. If we add some entropy in any way, then
+it is slightly more credible; but I think that for each seed the period is
+something like |2^{27}(2^{55}-1)55|,%
+%
+\footnote{Compare the result of exercise 3.2.2-30 in TAOCP, vol II.}
+%
+so we expect at most about |2^{110}55|
+``points in time'', and this is already small compared to the |10^40|
+from example above. Thus already we are very far from being intrinsically
+able to generate all numbers with fourty digits as random numbers, and this
+makes the previous section about usage of \csbxint{XRandomDigits} to generate
+millions of digits a bit comical...
+
+\TeXnote the digits are produced eight by eight by the same method which would
+result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+
+\subsection{(WIP) \csh{xintiiRandRangeAtoB}}\label{xintiiRandRangeAtoB}
+
+|\xintiiRandRangeAtoB{A}{B}|\etype{ff} expands to a random (big) integer |N|
+such that |A<=N<B|. It is a supporting macro for \func{randrange}. As with
+Python's function of the same name, it is an error if |B<=A|.\NewWith{1.3b}
+\begin{everbatim*}
+\pdfsetrandomseed 271828314
+12345678911111111111111111111\newline
+\xintiiRandRangeAtoB{12345678911111111111111111111}{12345678922222222222222222222}\newline
+\pdfsetrandomseed 271828314
+\def\test{%
+\xinttheiiexpr randrange(12345678911111111111111111111,12345678922222222222222222222)\relax}%
+\romannumeral\xintreplicate{10}{\test\newline}%
+12345678922222222222222222222
+\end{everbatim*}
+
+\TeXnote the digits are produced eight by eight by the same method which would
+result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+
+\clearpage
+\let\xintnameUp\undefined
+\csname xintfracnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintfracname package}
+\RaisedLabel{sec:frac}
+
+First version of this package was in release |1.03| (|2013/04/14|) of the
+\xintname bundle.
+
+At release |1.3| (|2018/02/28|) the behaviour of \csbxint{Add} (and of
+\csbxint{Sub}) was modified:\CHANGED{1.3} when adding |a/b| and |c/d| they
+will use always the least common multiple of the denominators. This helps
+limit the build-up of denominators, but the author still hesitates if the
+fraction should be reduced to smallest terms. The current method allows (for
+example when multiplying two polynomials) to keep a well-predictable
+denominator among various terms, even though some may be reducible.
+
+\localtableofcontents
+
+\xintfracname loads automatically \xintcorename and \xintname and inherits
+their macro definitions. Only these two are redefined:
+\hyperref[xintNumFrac]{\string\xintNum} and
+\hyperref[xintLenFrac]{\string\xintLen}. As explained in \autoref{ssec:inputs}
+and \autoref{ssec:outputs} the interchange format for the \xintfracname
+macros, i.e. |A/B[N]|, is not understood by the |ii|-named macros of
+\xintcorename/\xintname which expect the so-called strict integer format.
+Hence, to use such an |ii|-macro with an output from an \xintfracname macro,
+an extra \csbxint{Num} wrapper is required. But macros already defined by
+\xintfracname cover most use cases hence this should be a rarely needed.
+
+In the macro descriptions, the variable |f|\ntype{\Ff} and the margin
+indicator stand for the \xintfracname input format for integers, scientific
+numbers, and fractions as described in \autoref{ssec:inputs}.
+
+As in the \hyperref[sec:xint]{xint.sty} documentation, |x|\ntype{\numx} stands
+for something which internally will be handled in a \csa{numexpr}. It may thus
+be an expression as understood by \csa{numexpr} but its evaluation and
+intermediate steps must obey the \TeX\ bound.
+
+The output format for most macros is the |A/B[N]| format but naturally the
+float macros use the scientific notation on output. And some macros are
+special, for example \csbxint{Trunc} produces decimal numbers, \csbxint{Irr}
+produces an |A/B| with no |[N]|, \csbxint{iTrunc} and \csbxint{iRound} produce
+integers without trailing |[N]| either, etc\dots
+
+|1.3a| belatedly adds documentation for some macros such as
+\csbxint{DivFloor} which had been defined long ago, but did not make it to the
+user manual for various reasons, one being that it is thought few users will
+use directly the \xintfracname macros, the \csbxint{expr} interface being more
+convenient. For complete documentation refer to |sourcexint.pdf|.
+
+\subsection{\csh{xintNum}}\label{xintNumFrac}
+
+The original \csbxint{Num} \etype{\Ff} from \xintname is made a synonym to
+\csbxint{TTrunc} (whose description is to be found farther in this section).
+
+Attention that for example |\xintNum{1e100000}| expands to the needed
+\dtt{100001} digits...
+
+The original \hyperref[xintiNum]{\string\xintNum} from \xintcorename which
+does not understand the fraction slash or the scientific notation is still
+available under the name \csbxint{iNum}.
+
+\subsection{\csh{xintRaw}}\label{xintRaw}
+
+This macro `prints' the\etype{\Ff}
+fraction |f| as it is received by the package after its parsing and
+expansion, in a form |A/B[N]| equivalent to the internal
+representation: the denominator |B| is always strictly positive and is
+printed even if it has value |1|.
+\begin{everbatim*}
+\xintRaw{\the\numexpr 571*987\relax.123e-10/\the\numexpr-201+59\relax e-7}
+\end{everbatim*}
+
+No simplification is done, not even of common zeroes between numerator and
+denominator:
+\begin{everbatim*}
+\xintRaw {178000/25600000}
+\end{everbatim*}
+
+\subsection{\csh{xintNumerator}}\label{xintNumerator}
+
+The input data\etype{\Ff} is parsed as if by \csbxint{Raw} into |A/B[N]|
+format and
+the macro outputs |A| if |N<=0|, or |A| extended by |N| zeroes if |N>0|.
+\begin{everbatim*}
+\xintNumerator {178000/25600000[17]}\newline
+\xintNumerator {312.289001/20198.27}\newline
+\xintNumerator {178000e-3/256e5}\newline
+\xintNumerator {178.000/25600000}
+\end{everbatim*}
+
+\subsection{\csh{xintDenominator}}\label{xintDenominator}
+
+The input data\etype{\Ff} is parsed as if by \csbxint{Raw} into |A/B[N]|
+format and
+the macro outputs |B| if |N>0|, or |B| extended by \verb+|N|+ zeroes if |N<=0|.
+\begin{everbatim*}
+\xintDenominator {178000/25600000[17]}\newline
+\xintDenominator {312.289001/20198.27}\newline
+\xintDenominator {178000e-3/256e5}\newline
+\xintDenominator {178.000/25600000}
+\end{everbatim*}
+
+\subsection{\csh{xintRawWithZeros}}\label{xintRawWithZeros}
+
+This macro parses the input\etype{\Ff} and outputs |A/B|, with |A|
+as would be returned by \csa{xintNumerator}|{f}| and |B| as would be returned by
+\csa{xintDenominator}|{f}|.
+\begin{everbatim*}
+\xintRawWithZeros{178000/25600000[17]}\newline
+\xintRawWithZeros{312.289001/20198.27}\newline
+\xintRawWithZeros{178000e-3/256e5}\newline
+\xintRawWithZeros{178.000/25600000}\newline
+\xintRawWithZeros{\the\numexpr 571*987\relax.123e-10/\the\numexpr-201+59\relax e-7}
+\end{everbatim*}
+
+\subsection{\csh{xintREZ}}\label{xintREZ}
+
+The input\etype{\Ff} is first parsed into |A/B[N]| as by \csbxint{Raw}, then
+trailing zeroes of |A| and |B| are suppressed and |N| is accordingly adjusted.
+\begin{everbatim*}
+\xintREZ {178000/25600000[17]}
+\end{everbatim*}
+
+This macro is used internally by various other constructs; its implementation
+was redone entirely at |1.3a|, and it got faster on long inputs.
+
+\subsection{\csh{xintIrr}}\label{xintIrr}
+
+This puts the fraction\etype{\Ff} into its unique irreducible form:
+\begin{everbatim*}
+\xintIrr {178.256/256.1780}, \xintIrr {178000/25600000[17]}
+\end{everbatim*}
+
+The current implementation does not cleverly first factor powers of
+2 and 5, and |\xintIrr {2/3[100]}| will execute the
+Euclidean division of |2|\raisebox{.5ex}{|.|}|10^{100}| by |3|, which is a bit
+stupid as it could have known that the \dtt{100} trailing zeros can not bring
+any divisibility by \dtt{3}.
+
+Starting with release |1.08|, \csa{xintIrr} does not remove the trailing |/1|
+when the output is an integer. This was deemed better for various (questionable?)
+reasons, anyway the output format is since \emph{always} |A/B| with |B>0|, even
+in cases where it turns out that |B=1|.
+Use \csbxint{PRaw} on top of \csa{xintIrr} if it is needed to get rid of such a
+trailing |/1|.
+
+\subsection{\csh{xintPIrr}}\label{xintPIrr}
+
+This puts the fraction\etype{\Ff} into irreducible form,
+\emph{keeping as is the
+ decimal part} |[N]| from raw internal |A/B[N]| format.\NewWith{1.3}
+(|P| stands here for \emph{Partial})
+\begin{everbatim*}
+\xintPIrr {178.256/256.1780}, \xintPIrr {178000/25600000[17]}
+\end{everbatim*}
+
+Notice that the output always has the ending |[N]|, which is exactly the
+opposite of \csbxint{Irr}'s behaviour. The interest of this macro is mainly in
+handling fractions which somehow acquired a big |[N]| (perhaps from input in
+scientific notation) and for which the reduced fraction would have a very
+large number of digits. This large number of digits can considerably slow-down
+computations done afterwards.
+
+For example package \href{http://ctan.org/pkg/polexpr}{polexpr} uses
+\csa{xintPIrr} when differentiating a polynomial, or in setting up a Sturm
+chain for localization of the real roots of a polynomial. This is relevant to
+polynomials whose coefficients were input in decimal notation, as this
+automatically creates internally some |[N]|. Keeping and combining those
+|[N]|'s during computations significantly increases their speed.
+
+\subsection{\csh{xintJrr}}\label{xintJrr}
+
+This also puts the fraction\etype{\Ff} into its unique irreducible form:
+\begin{everbatim*}
+\xintJrr {178.256/256.178}
+\end{everbatim*}
+
+This is (supposedly, not tested for ages) faster than \csa{xintIrr} for
+fractions having some big common factor in the numerator and the denominator.
+\begin{everbatim*}
+\xintJrr {\xintiiPow{\xintiiFac {15}}{3}/%
+ \xintiiPrd{{\xintiiFac{10}}{\xintiiFac{30}}{\xintiiFac{5}}}}
+\end{everbatim*}
+
+But to notice the difference one would need computations with much bigger
+numbers than in this example. As \csbxint{Irr}, \csa{xintJrr} does not remove
+the trailing |/1| from a fraction reduced to an integer.
+
+\subsection{\csh{xintPRaw}}\label{xintPRaw}
+
+|PRaw|\etype{\Ff} stands for ``pretty raw''. It does like \csbxint{Raw} apart
+from removing the |[N]| part if |N=0| and removing the |B| if |B=1|.
+\begin{everbatim*}
+\xintPRaw {123e10/321e10}, \xintPRaw {123e9/321e10}, \xintPRaw {\xintIrr{861/123}}
+\end{everbatim*}
+
+\subsection{\csh{xintDecToString}}\label{xintDecToString}
+
+This is\etype{\Ff} a macro tailored for printing decimal numbers. It does not
+trim trailing zeros, use |\xintDecToString{\xintREZ{<foo>}}| for that.
+\NewWith{1.3}
+\begin{everbatim*}
+\xintDecToString {123456789e5}\newline
+\xintDecToString {123456789e-5}\newline
+\xintDecToString {12345e-10}\newline
+\xintDecToString {12345e-10/123}\par % just leave denominator as is
+\end{everbatim*}
+Consider it an unstable macro, what it does exactly is yet to be decided. It
+is a backport from \href{http://ctan.org/pkg/polexpr}{polexpr}'s
+|\PolDecToString|, which has now been made an alias to it.
+
+\subsection{\csh{xintTrunc}}\label{xintTrunc}
+
+\csa{xintTrunc}|{x}{f}|\etype{\numx\Ff} returns the integral part, a dot
+(standing for the decimal mark), and
+then the first |x| digits of the decimal expansion of the fraction |f|, except
+when the fraction is (or evaluates to) zero, then it simply prints \dtt{0}
+(with no dot).
+
+\begin{framed}
+ The argument |x| must be non-negative, the behaviour is currently undefined
+ when |x<0| and will provoke errors.
+\end{framed}
+
+Except when the input is (or evaluates to) exactly zero, the output contains
+exactly |x| digits after the decimal mark, thus the output may be
+\dtt{0.00...0} or \dtt{-0.00...0}, indicating that the original fraction was
+positive, respectively negative.
+
+\begin{framed}
+ \textbf{Warning:} \emph{it is not yet decided is this behaviour is
+ definitive.}
+
+ Currently \xintfracname has no notion of a positive zero or a negative zero.
+ Hence transitivity of \csbxint{Trunc} is broken for the case where the first
+ truncation gives on output \dtt{0.00...0} or \dtt{-0.00...0}: a second
+ truncation to less digits will then output \dtt{0}, whereas if it had been
+ applied directly to the initial input it would have produced \dtt{0.00...0}
+ or respectively \dtt{-0.00...0} (with less zeros).
+
+ If \xintfracname distinguished zero, positive zero, and
+ negative zero it would be possible to maintain transitivity.
+
+ The problem would also be fixed, even without distinguishing a negative zero
+ on input, if \csbxint{Trunc} always produced \dtt{0.00...0} (with no sign)
+ when the mathematical result is zero, discarding the information on original
+ input being positive, zero, or negative.
+
+ I have multiple times hesitated about what to do and must postpone again
+ final decision.
+\end{framed}
+\begin{everbatim*}
+\xintTrunc {16}{-803.2028/20905.298}\newline
+\xintTrunc {20}{-803.2028/20905.298}\newline
+\xintTrunc {10}{\xintPow {-11}{-11}}\newline
+\xintTrunc {12}{\xintPow {-11}{-11}}\newline
+\xintTrunc {50}{\xintPow {-11}{-11}}\newline
+\xintTrunc {12}{\xintAdd {-1/3}{3/9}}\par
+\end{everbatim*}
+The digits printed are exact up to and including the last one.
+
+
+\subsection{\csh{xintXTrunc}}\label{xintXTrunc}
+
+
+\csa{xintXTrunc}|{x}{f}|\retype{\numx\Ff} is similar to \csbxint{Trunc} with
+the following important differences:
+\begin{itemize}[nosep]
+\item it is completely expandable but not
+\fexpan dable, as is indicated by the hollow star in the margin,
+\item hence it can not be used as argument to the other package macros, but as
+ it \fexpan ds its |{f}| argument, it accepts arguments expressed with other
+ \xintfracname macros,
+\item it requires |x>0|,
+\item contrarily to \csbxint{Trunc} the number of digits on output is not
+ limited to about \dtt{19950} and may go well beyond \dtt{100000} (this is
+ mainly useful for outputting a decimal expansion to a file),
+\item when the mathematical result is zero, it always prints it as
+ \dtt{0.00...0} or \dtt{-0.00...0} with |x| zeros after the decimal mark.
+\end{itemize}
+
+\textbf{Warning:}
+transitivity is broken too (see discussion of \csbxint{Trunc}), due to the
+sign in the last item. Hence \emph{the definitive policy is yet to be fixed.}
+
+Transitivity is here in the sense of using a first |\edef| and then a second
+one, because it is not possible to nest \csb{xintXTrunc} directly as argument
+to itself. Besides, although the number of digits on output isn't limited,
+nevertheless |x| should be less than about |19970| when the number of digits
+of the input (assuming it is expressed as a decimal number) is even bigger:
+|\xintXTrunc{30000}{\Z}| after |\edef\Z{\xintXTrunc{60000}{1/66049}| raises an
+error in contrast with a direct |\xintXTrunc{30000}{1/66049}|. But
+|\xintXTrunc{30000}{123.456789}| works, because here the number of digits
+originally present is smaller than what is asked for, thus the routine only
+has to add trailing zeros, and this has no limitation (apart from \TeX\ main
+memory).
+
+\csbxint{XTrunc} will expand fully in an |\edef| or a |\write| (|\message|,
+|\wlog|, \dots) or in an \csbxint{expr}-ession, or as list argument to
+\csbxint{For*}.
+
+Here is an example session where the
+user checks that the decimal expansion of $1/66049=1/257^2$ has the maximal
+period length $257*256=65792$ (this period length must be a divisor of
+$\phi(66049)$ and to check it is the maximal one it is enough to show that
+neither $32896$ nor $256$ are periods.)
+
+\begingroup\small
+\everb|@
+$ rlwrap etex -jobname worksheet-66049
+This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) (preloaded format=etex)
+ restricted \write18 enabled.
+**xintfrac.sty
+entering extended mode
+(/usr/local/texlive/2016/texmf-dist/tex/generic/xint/xintfrac.sty
+(/usr/local/texlive/2016/texmf-dist/tex/generic/xint/xint.sty
+(/usr/local/texlive/2016/texmf-dist/tex/generic/xint/xintcore.sty
+(/usr/local/texlive/2016/texmf-dist/tex/generic/xint/xintkernel.sty))))
+*% we load xinttools for \xintKeep, etc... \xintXTrunc itself has no more
+
+*% any dependency on xinttools.sty since 1.2i
+
+*\input xinttools.sty
+(/usr/local/texlive/2016/texmf-dist/tex/generic/xint/xinttools.sty)
+*\def\m#1;{\message{#1}}
+
+*\m \the\numexpr 257*257\relax;
+66049
+*\m \the\numexpr 257*256\relax;
+65792
+*% Thus 1/66049 will have a period length dividing 65792.
+
+*% Let us first check it is indeed periodical.
+
+*\edef\Z{\xintXTrunc{66000}{1/66049}}
+
+*% Let's display the first decimal digits.
+
+*\m \xintXTrunc{208}{\Z};
+
+0.00001514027464458205271843631243470756559523989765174340262532362337052794137
+6856576178291874214598252812306015231116292449545034746930309315810988811337037
+6538630410755651107511090251177156353616254598858423
+*% let's now fetch the trailing digits
+
+*\m \xintKeep{65792-66000}{\Z};% 208 trailing digits
+
+0000151402746445820527184363124347075655952398976517434026253236233705279413768
+5657617829187421459825281230601523111629244954503474693030931581098881133703765
+38630410755651107511090251177156353616254598858423
+*% yes they match! we now check that 65792/2 and 65792/257=256 aren't periods.
+
+*\m \xintXTrunc{256}{\Z};
+
+0.00001514027464458205271843631243470756559523989765174340262532362337052794137
+6856576178291874214598252812306015231116292449545034746930309315810988811337037
+6538630410755651107511090251177156353616254598858423291798513225029902042423049
+554118911717058547442
+*\m \xintXTrunc{256+256}{\Z};
+
+0.00001514027464458205271843631243470756559523989765174340262532362337052794137
+6856576178291874214598252812306015231116292449545034746930309315810988811337037
+6538630410755651107511090251177156353616254598858423291798513225029902042423049
+5541189117170585474420505987978621932201850141561567926842192917379521264515738
+3154930430438008145467758785144362518736089872670290239064936637950612424109373
+3440324607488379839210283274538600130206361943405653378552286938485064119063119
+8049932625777831609865402958409665551333
+*% now with 65792/2=32896. Problem: we can't do \xintXTrunc{32896+100}{\Z}
+
+*% but only direct \xintXTrunc{32896+100}{1/66049}. Anyway we want to nest it
+
+*% hence let's do it all with (slower) \xintKeep, \xintKeepUnbraced.
+
+*\m \xintKeep {-100}{\xintKeepUnbraced{2+65792/2+100}{\Z}};
+
+9999848597253554179472815636875652924344047601023482565973746763766294720586231
+434238217081257854017
+*% This confirms 32896 isn't a period length.
+
+*% To conclude let's write the 66000 digits to the log.
+
+*\wlog{\Z}
+
+*% We want always more digits:
+
+*\wlog{\xintXTrunc{150000}{1/66049}}
+
+*\bye
+|
+\endgroup % $ à cause de fontification de AUCTeX.
+
+The acute observer will have noticed that there is something funny when one
+compares the first digits with those after the middle-period:
+\begin{everbatim}
+0000151402746445820527184363124347075655952398976517434026253236233705279413768...
+9999848597253554179472815636875652924344047601023482565973746763766294720586231...
+\end{everbatim}
+Mathematical exercise: can you explain why the two indeed add to |9999...9999|?
+
+You can try your hands at this simpler one:
+\begin{everbatim*}
+1/49=\xintTrunc{42+5}{1/49}...\newline
+\xintTrim{2}{\xintTrunc{21}{1/49}}\newline
+\xintKeep{-21}{\xintTrunc{42}{1/49}}
+\end{everbatim*}
+
+This was again an example of the type |1/N| with |N| the square of a prime.
+One can also find counter-examples within this class: |1/31^2| and |1/37^2|
+have an odd period length (|465| and respectively |111|) hence they can not
+exhibit the symmetry.
+
+\begin{framed}
+ Mathematical challenge: prove generally that if the period length of the
+ decimal expansion of |1/p^r| (with |p| a prime distinct from |2| and |5| and
+ |r| a positive exponent) is even, then the previously observed symmetry
+ about the two halves of the period adding to a string of nine's applies.
+\end{framed}
+
+
+
+\subsection{\csh{xintTFrac}}\label{xintTFrac}
+
+\csa{xintTFrac}|{f}|\etype{\Ff} returns the fractional part,
+|f=trunc(f)+frac(f)|. Thus if |f<0|, then |-1<frac(f)<=0| and if |f>0| one has
+|0<= frac(f)<1|. The |T| stands for `Trunc', and there should exist also
+similar macros associated respectively with `Round', `Floor', and `Ceil', each
+type of rounding to an integer deserving arguably to be associated with a
+fractional ``modulo''. By sheer laziness, the package currently implements
+only the ``modulo'' associated with `Truncation'. Other types of modulo may be
+obtained more cumbersomely via a combination of the rounding with a subsequent
+subtraction from |f|.
+
+Notice that the result is filtered through \csbxint{REZ}, and will thus be of
+the form |A/B[N]|, where neither |A| nor |B| has trailing zeros. But the
+output fraction is not reduced to smallest terms.
+
+The function call in expressions (\csbxint{expr}, \csbxint{floatexpr}) is
+|frac|. Inside |\xintexpr..\relax|, the function |frac| is mapped to
+\csa{xintTFrac}. Inside |\xintfloatexpr..\relax|, |frac| first applies
+\csa{xintTFrac} to its argument (which may be an exact fraction with more
+digits than the floating point precision) and only in a second stage makes the
+conversion to a floating point number with the precision as set by |\xintDigits|
+(default is \dtt{16}).
+\begin{everbatim*}
+\xintTFrac {1235/97}, \xintTFrac {-1235/97}\newline
+\xintTFrac {1235.973}, \xintTFrac {-1235.973}\newline
+\xintTFrac {1.122435727e5}\par
+\end{everbatim*}
+
+\subsection{\csh{xintRound}}\label{xintRound}
+
+\csa{xintRound}|{x}{f}|\etype{\numx\Ff} returns the start of the decimal
+expansion of the fraction |f|, rounded to |x| digits precision after the decimal
+point. The argument |x| should be non-negative. Only when |f| evaluates exactly
+to zero does \csa{xintRound} return |0| without decimal point. When |f| is not
+zero, its sign is given in the output, also when the digits printed are all
+zero.
+\begin{everbatim*}
+\xintRound {16}{-803.2028/20905.298}\newline
+\xintRound {20}{-803.2028/20905.298}\newline
+\xintRound {10}{\xintPow {-11}{-11}}\newline
+\xintRound {12}{\xintPow {-11}{-11}}\newline
+\xintRound {12}{\xintAdd {-1/3}{3/9}}\par
+\end{everbatim*}
+
+\subsection{\csh{xintFloor}}\label{xintFloor}
+
+|\xintFloor {f}|\etype{\Ff} returns the largest relative integer |N| with
+|N|${}\leqslant{}$|f|.
+\begin{everbatim*}
+\xintFloor {-2.13}, \xintFloor {-2}, \xintFloor {2.13}
+\end{everbatim*}
+Note the trailing |[0]|, see \csbxint{iFloor} if it is not desired.
+
+\subsection{\csh{xintCeil}}\label{xintCeil}
+
+|\xintCeil {f}|\etype{\Ff} returns the smallest relative integer |N| with
+|N|${}>{}$|f|.
+\begin{everbatim*}
+\xintCeil {-2.13}, \xintCeil {-2}, \xintCeil {2.13}
+\end{everbatim*}
+
+\subsection{\csh{xintiTrunc}}\label{xintiTrunc}
+
+\csa{xintiTrunc}|{x}{f}|\etype{\numx\Ff} returns the integer equal to |10^x|
+times what \csa{xintTrunc}|{x}{f}| would produce.
+\begin{everbatim*}
+\xintiTrunc {16}{-803.2028/20905.298}\newline
+\xintiTrunc {10}{\xintPow {-11}{-11}}\newline
+\xintiTrunc {12}{\xintPow {-11}{-11}}\par
+\end{everbatim*}
+
+In particular \csa{xintiTrunc}|{0}{f}|'s output is in strict integer format
+contrarily to \csa{xintTrunc}|{0}{f}| which produces an output with a decimal
+mark, except if |f| turns out to be zero.
+
+\subsection{\csh{xintTTrunc}}\label{xintTTrunc}
+
+\csa{xintTTrunc}|{f}|\etype{\Ff} truncates to an integer (truncation towards
+zero). This is the same as |\xintiTrunc {0}{f}| and also the same as
+\csbxint{Num}.
+
+\subsection{\csh{xintiRound}}\label{xintiRound}
+
+\csa{xintiRound}|{x}{f}|\etype{\numx\Ff} returns the integer equal to |10^x|
+times what \csa{xintRound}|{x}{f}| would return.
+\begin{everbatim*}
+\xintiRound {16}{-803.2028/20905.298}\newline
+\xintiRound {10}{\xintPow {-11}{-11}}\par
+\end{everbatim*}
+
+In particular \csa{xintiRound}|{0}{f}|'s output is in strict integer format
+contrarily to \csa{xintRound}|{0}{f}| which produces an output with a decimal
+mark, except if |f| turns out to be zero.
+
+\subsection{\csh{xintiFloor}}\label{xintiFloor}
+
+|\xintiFloor {f}|\etype{\Ff} does the same as \csbxint{Floor} but without the
+trailing |/1[0]|.
+\begin{everbatim*}
+\xintiFloor {-2.13}, \xintiFloor {-2}, \xintiFloor {2.13}
+\end{everbatim*}
+
+\subsection{\csh{xintiCeil}}\label{xintiCeil}
+
+|\xintiCeil {f}|\etype{\Ff} does the same as \csbxint{Ceil} but its output is
+without the |/1[0]|.
+\begin{everbatim*}
+\xintiCeil {-2.13}, \xintiCeil {-2}, \xintiCeil {2.13}
+\end{everbatim*}
+
+\subsection{\csh{xintE}}\label{xintE}
+
+|\xintE {f}{x}|\etype{\Ff\numx} multiplies the fraction |f| by $10^x$. The
+\emph{second} argument |x| must obey the \TeX{} bounds. Example:
+\begin{everbatim*}
+\count 255 123456789 \xintE {10}{\count 255}
+\end{everbatim*}
+Don't feed this example to \csbxint{Num}!
+
+\subsection{\csh{xintCmp}}\label{xintCmp}
+
+This\etype{\Ff\Ff} compares two fractions |F| and |G| and produces
+|-1|, |0|, or |1| according to |F<G|, |F=G|, |F>G|.
+
+For choosing branches according to the result of comparing |f| and |g|, see
+\csbxint{ifCmp}.
+
+\subsection{\csh{xintEq}}\label{xintEq}
+
+|\xintEq{f}{g}|\etype{\Ff\Ff} returns 1 if |f=g|, 0 otherwise.
+
+\subsection{\csh{xintNotEq}}\label{xintNotEq}
+
+|\xintNotEq{f}{g}|\etype{\Ff\Ff} returns 0 if |f=g|, 1 otherwise.
+
+
+\subsection{\csh{xintGeq}}\label{xintGeq}
+
+This\etype{\Ff\Ff} compares the \emph{absolute values} of two
+fractions.
+|\xintGeq{f}{g}| outputs |1| if {\catcode`| 12 $|f|\geqslant|g|$} and |0|
+if not.
+
+Important: the macro compares \emph{absolute values}.
+
+\subsection{\csh{xintGt}}\label{xintGt}
+
+|\xintGt{f}{g}|\etype{\Ff\Ff} returns \dtt{1} if |f|$>$|g|, \dtt{0} otherwise.
+
+\subsection{\csh{xintLt}}\label{xintLt}
+
+|\xintLt{f}{g}|\etype{\Ff\Ff} returns \dtt{1} if |f|$<$|g|, \dtt{0} otherwise.
+
+\subsection{\csh{xintGtorEq}}\label{xintGxstorEq}
+
+|\xintGtorEq{f}{g}|\etype{\Ff\Ff} returns \dtt{1} if |f|$\geqslant$|g|, \dtt{0} otherwise.
+Extended by \xintfracname to fractions.
+
+\subsection{\csh{xintLtorEq}}\label{xintLtorEq}
+
+|\xintLtorEq{f}{g}|\etype{\Ff\Ff} returns \dtt{1} if |f|$\leqslant$|g|, \dtt{0} otherwise.
+
+\subsection{\csh{xintIsZero}}\label{xintIsZero}
+
+|\xintIsZero{f}|\etype{f} returns \dtt{1} if |f=0|, \dtt{0} otherwise.
+
+\subsection{\csh{xintIsNotZero}}\label{xintIsNotZero}
+
+|\xintIsNotZero{f}|\etype{f} returns \dtt{1} if |f!=0|, \dtt{0} otherwise.
+
+\subsection{\csh{xintIsOne}}\label{xintIsOne}
+
+|\xintIsOne{f}|\etype{f} returns \dtt{1} if |f=1|, \dtt{0} otherwise.
+
+\subsection{\csh{xintOdd}}\label{xintOdd}
+
+|\xintOdd{f}|\etype{f} returns \dtt{1} if the integer obtained by truncation is
+odd, and \dtt{0} otherwise.
+
+\subsection{\csh{xintEven}}\label{xintEven}
+
+|\xintEven{f}|\etype{f} returns \dtt{1} if the integer obtained by truncation is
+even, and \dtt{0} otherwise.
+
+\subsection{\csh{xintifSgn}}\label{xintifSgn}
+
+\csh{xintifSgn}\marg{f}\marg{A}\marg{B}\marg{C}\etype{\Ff nnn} executes either the
+\meta{A}, \meta{B} or \meta{C} code, depending on its first argument being
+respectively negative, zero, or positive.
+
+\subsection{\csh{xintifZero}}\label{xintifZero}
+
+\csa{xintifZero}\marg{f}\marg{IsZero}\marg{IsNotZero}\etype{\Ff nn} expandably
+checks if the first mandatory argument |N| (a number, possibly a fraction if
+\xintfracname is loaded, or a macro expanding to one such) is zero or not. It
+then either executes the first or the second branch.
+
+Beware that both branches must be present.
+
+\subsection{\csh{xintifNotZero}}\label{xintifNotZero}
+
+\csa{xintifNotZero}\marg{N}\marg{IsNotZero}\marg{IsZero}\etype{\Ff nn}
+expandably checks if the first mandatory argument |f| is not
+zero or is zero. It then either executes the first or the second branch.
+
+Beware that both branches must be present.
+
+\subsection{\csh{xintifOne}}\label{xintifOne}
+
+\csa{xintifOne}\marg{N}\marg{IsOne}\marg{IsNotOne}\etype{\Ff nn} expandably
+checks if the first mandatory argument |f| is one or not one. It
+then either executes the first or the second branch. Beware that both branches
+must be present.
+
+\subsection{\csh{xintifOdd}}\label{xintifOdd}
+
+\csa{xintifOdd}\marg{N}\marg{odd}\marg{not odd}\etype{\Ff nn} expandably
+checks if the first mandatory argument |f|, after truncation to an integer, is
+odd or even. It then executes accordingly the first or the second branch.
+Beware that both branches must be present.
+
+\subsection{\csh{xintifCmp}}\label{xintifCmp}
+
+\csa{xintifCmp}\marg{f}\marg{g}\marg{if f<g}\marg{if f=g}\marg{if
+ f>g}\etype{\Ff\Ff nnn} compares its first two arguments and chooses accordingly
+the correct branch.
+
+\subsection{\csh{xintifEq}}\label{xintifEq}
+
+\csa{xintifEq}\marg{f}\marg{g}\marg{YES}\marg{NO}\etype{\Ff\Ff nn} checks
+equality of its two first arguments and executes accordingly the |YES| or the
+|NO| branch.
+
+\subsection{\csh{xintifGt}}\label{xintifGt}
+
+\csa{xintifGt}\marg{f}\marg{g}\marg{YES}\marg{NO}\etype{\Ff\Ff nn}
+checks if $f>g$ and in that case executes the |YES| branch.
+
+\subsection{\csh{xintifLt}}\label{xintifLt}
+
+\csa{xintifLt}\marg{f}\marg{g}\marg{YES}\marg{NO}\etype{\Ff\Ff nn}
+checks if $f<g$ and in that case executes the |YES| branch.
+
+\subsection{\csh{xintifInt}}\label{xintifInt}
+
+\csa{xintifInt}|{f}{YES branch}{NO branch}|\etype{\Ff nn} expandably chooses
+the |YES| branch if |f| reveals itself after expansion and simplification to
+be an integer.
+
+\subsection{\csh{xintSgn}}\label{xintSgn}
+
+The sign of a fraction.\etype{\Ff}
+
+\subsection{\csh{xintOpp}}\label{xintOpp}
+
+The opposite of a fraction.\etype{\Ff}
+Note that |\xintOpp {3}| produces \dtt{\xintOpp
+ {3}} whereas |\xintiiOpp {3}| produces \dtt{\xintiiOpp {3}}.
+
+\subsection{\csh{xintAbs}}\label{xintAbs}
+
+The absolute value\etype{\Ff}. Note that |\xintAbs {-2}|\dtt{=\xintAbs {-2}}
+where |\xintiiAbs {-2}| outputs \dtt{=\xintiiAbs {-2}}.
+
+\subsection{\csh{xintAdd}}\label{xintAdd}
+
+Computes the addition\etype{\Ff\Ff} of two fractions.
+
+Since |1.3| always uses the least common multiple of the
+denominators.\CHANGED{1.3}
+
+\subsection{\csh{xintSub}}\label{xintSub}
+
+Computes the difference\etype{\Ff\Ff} of two fractions (|\xintSub{F}{G}|
+computes |F-G|).
+
+Since |1.3| always uses the least common multiple of the
+denominators.\CHANGED{1.3}
+
+\subsection{\csh{xintMul}}\label{xintMul}
+
+Computes the product\etype{\Ff\Ff} of two fractions.
+
+Output is not reduced to smallest terms.
+
+\subsection{\csh{xintDiv}}\label{xintDiv}
+
+Computes the quotient \etype{\Ff\Ff} of two fractions.
+(|\xintDiv{F}{G}| computes |F/G|).
+
+Output is not reduced to smallest terms.
+
+\subsection{\csh{xintDivFloor}}
+\label{xintDivFloor}
+
+Computes the quotient \etype{\Ff\Ff} of two arguments then apply floor
+function to get an integer (in strict format). This macro was defined at |1.1|
+(but was left not documented until |1.3a|...) and changed at |1.2p|, formerly
+it appended |/1[0]| to output.
+\begin{everbatim*}
+\xintDivFloor{-170/3}{23/2}
+\end{everbatim*}
+
+\subsection{\csh{xintMod}}
+\label{xintMod}
+
+Computes the remainder associated to the floored division\etype{\Ff\Ff}
+\csbxint{DivFloor}. Prior to |1.2p| the meaning was the one of
+\csbxint{ModTrunc}. Was left undocumented until |1.3a|.
+\begin{everbatim*}
+\xintMod{-170/3}{23/2}
+\end{everbatim*}
+
+Modified at |1.3| to use a l.c.m. for the denominator of the result.
+\CHANGED{1.3}
+
+\subsection{\csh{xintDivMod}}
+\label{xintDivMod}
+
+Computes both the floored division and the remainder\etype{\Ff\Ff}
+\csbxint{DivFloor}. New at |1.2p| and documented at |1.3a|.
+\begin{everbatim*}
+\oodef\foo{\xintDivMod{-170/3}{23/2}}\meaning\foo
+\end{everbatim*}
+
+\subsection{\csh{xintDivTrunc}}
+\label{xintDivTrunc}
+
+Computes the quotient \etype{\Ff\Ff} of two arguments then
+truncates to an integer (in strict format).
+\begin{everbatim*}
+\xintDivTrunc{-170/3}{23/2}
+\end{everbatim*}
+
+\subsection{\csh{xintModTrunc}}
+\label{xintModTrunc}
+
+Computes the remainder\etype{\Ff\Ff} associated with the truncated division of
+two arguments. Prior to |1.2p| it was named \csbxint{Mod}, but the latter then
+got associated with floored division.
+\begin{everbatim*}
+\xintModTrunc{-170/3}{23/2}
+\end{everbatim*}
+
+Modified at |1.3| to use a l.c.m. for the denominator of the result.
+\CHANGED{1.3}
+
+\subsection{\csh{xintDivRound}}
+\label{xintDivRound}
+
+Computes the quotient \etype{\Ff\Ff} of the two arguments then rounds to an
+integer (in strict format).
+\begin{everbatim*}
+\xintDivRound{-170/3}{23/2}
+\end{everbatim*}
+
+\subsection{\csh{xintSqr}}\label{xintSqr}
+
+Computes the square\etype{\Ff} of one fraction.
+
+\subsection{\csh{xintPow}}\label{xintPow}
+
+\csa{xintPow}{|{f}{x}|}:\etype{\Ff\Numf} computes |f^x| with |f| a fraction and
+|x| possibly also, but |x| will first get truncated to a (positive or negative)
+integer.
+
+The exponent |x| must obey the TeX-bound, but this limit is theoretical, as
+\TeX's memory or expansion settings get saturated quite earlier: it is
+explained in the documentation of \csbxint{iiPow} that the maximal power of
+$2$ computable by \xintname is |2^131072| which has \dtt{39457} digits.
+Actually, the pratical range is even smaller due to execution times.
+
+The output will always be in the form |A/B[n]| (even if the exponent
+vanishes: |\xintPow {2/3}{0}|\dtt{=\xintPow{2/3}{0}}).
+
+
+Within an \csbxint{iiexpr}|..\relax| the infix operator |^| is mapped to
+\csa{xintiiPow}; within an \csbxint{expr}-ession it is mapped to
+\csa{xintPow}.
+
+\subsection{\csh{xintFac}}\label{xintFac}
+
+This is a convenience variant of \csbxint{iiFac} which applies \csbxint{Num}
+to its argument\etype{\Numf}. Notice however that the output will have a trailing
+|[0]| according to the \xintfracname format for integers.
+
+
+\subsection{\csh{xintBinomial}}\label{xintBinomial}
+
+This is a convenience variant of \csbxint{iiBinomial} which applies
+\csbxint{Num} to its arguments\etype{\Numf\Numf}. Notice however that the
+output will have a trailing |[0]| according to the \xintfracname format for
+integers.
+
+
+\subsection{\csh{xintPFactorial}}\label{xintPFactorial}
+
+This is a convenience variant of \csbxint{iiPFactorial} which applies
+\csbxint{Num} to its arguments\etype{\Numf\Numf}. Notice however that the
+output will have a trailing |[0]| according to the \xintfracname format for
+integers.
+
+
+\subsection{\csh{xintMax}}\label{xintMax}
+
+The maximum of two fractions.\etype{\Ff\Ff} Beware that |\xintMax {2}{3}|
+produces \dtt{\xintMax {2}{3}}. The original, for use with
+integers only with no need of normalization, is available as \csbxint{iiMax}:
+|\xintiiMax {2}{3}=|\dtt{\xintiiMax {2}{3}}.\etype{ff}
+
+\begin{everbatim*}
+\xintMax {2.5}{7.2}
+\end{everbatim*}
+
+\subsection{\csh{xintMin}}\label{xintMin}
+
+The minimum of two fractions.\etype{\Ff\Ff} Beware that |\xintMin {2}{3}|
+produces \dtt{\xintMin {2}{3}}. The original, for use with
+integers only with no need of normalization, is available as \csbxint{iiMin}:
+|\xintiiMin {2}{3}=|\dtt{\xintiiMin {2}{3}}.\etype{ff}
+
+\begin{everbatim*}
+\xintMin {2.5}{7.2}
+\end{everbatim*}
+
+\subsection{\csh{xintMaxof}}\label{xintMaxof}
+
+The maximum of any number of fractions, each within braces, and the whole
+thing within braces. \etype{f{$\to$}{\lowast\Ff}}
+
+\begin{everbatim*}
+\xintMaxof {{1.23}{1.2299}{1.2301}} and \xintMaxof {{-1.23}{-1.2299}{-1.2301}}
+\end{everbatim*}
+
+\subsection{\csh{xintMinof}}\label{xintMinof}
+
+The minimum of any number of fractions, each within braces, and the whole
+thing within braces. \etype{f{$\to$}{\lowast\Ff}}
+
+\begin{everbatim*}
+\xintMinof {{1.23}{1.2299}{1.2301}} and \xintMinof {{-1.23}{-1.2299}{-1.2301}}
+\end{everbatim*}
+
+\subsection{\csh{xintSum}}\label{xintSum}
+
+This\etype{f{$\to$}{\lowast\Ff}} computes the sum of fractions. The output
+will now always be in the form |A/B[n]|. The original, for big integers only
+(in strict format), is available as \csa{xintiiSum}.
+
+\begin{everbatim*}
+\xintSum {{1282/2196921}{-281710/291927}{4028/28612}}
+\end{everbatim*}
+
+No simplification attempted.
+
+\subsection{\csh{xintPrd}}\label{xintPrd}
+
+TThis\etype{f{$\to$}{\lowast\Ff}} computes the product of fractions. The output
+will now always be in the form |A/B[n]|. The original, for big integers only
+(in strict format), is available as \csa{xintiiPrd}.
+
+\begin{everbatim*}
+\xintPrd {{1282/2196921}{-281710/291927}{4028/28612}}
+\end{everbatim*}
+
+No simplification attempted.
+
+\begin{everbatim*}
+$\xintIsOne {21921379213/21921379213}\neq\xintIsOne {1.00000000000000000000000000000001}$
+\end{everbatim*}
+
+\subsection{\csh{xintDigits}, \csh{xinttheDigits}}
+\label{xintDigits}
+\label{xinttheDigits}
+
+The syntax |\xintDigits := D;| (where spaces do not matter) assigns the
+value of |D| to the number of digits to be used by floating point
+operations. The default is |16|. The maximal value is |32767|. The macro
+|\xinttheDigits|\etype{} serves to print the current value.
+
+\subsection{\csh{xintFloat}}\label{xintFloat}
+
+
+The macro |\xintFloat [P]{f}|\etype{{\upshape[\numx]}\Ff} has an optional
+argument |P| which replaces the current value of |\xinttheDigits|. The
+fraction |f| is then printed in scientific notation with a rounding to |P| digits.
+
+That is, on output: the first digit is from |1| to |9|, it is possibly
+prefixed by a minus sign and is followed by a dot and |P-1| digits, then a
+lower case |e| and an exponent |N|. The trailing zeroes are not trimmed.
+
+\begin{framed}
+ There is currently one exceptional case: the zero value, which gets output
+ as \dtt{\xintFloat{0}}. It is yet to be decided what the final policy will be.
+\end{framed}
+
+Starting with |1.2k|, when the input is a fraction |AeN/BeM|
+the output always is the \emph{correct rounding} to |P| digits. Formerly, this
+was guaranteed only when |A| and |B| had at most |P+2| digits, or when |B| was
+|1| and |A| was arbitrary, but in other cases it was only guaranteed that the
+difference between the original fraction and the rounding was at most
+\dtt{0.6} unit in the last place (of the output), hence the output could
+differ in the last digit (and earlier ones in case of chains of zeros or
+nines) from the correct rounding.
+
+Also: for releases |1.2j| and earlier, in the special case when
+|A/B| ended up being rounded up to the next power of ten, the output was with
+a mantissa of the shape |10.0...0eN|. However, this worked only for |B=1| or
+when both |A| and |B| had at most |P+2| digits, because the detection of the
+rounding-up to next power of ten was done not on original |A/B| but on an
+approximation |A'/B'|, and it could happen that |A'/B'| was itself being
+rounded \emph{down} to a power of ten which however was a rounding \emph{up}
+of original |A/B|. With the |1.2j| refactoring which achieves correct rounding
+in all cases, it was decided not to add to the code the extra overhead of
+detecting with 100\% fiability the rounding up to next power of ten (such
+overhead would necessitate alterations of the algorithm and as a result we
+would end up with a slightly less efficient one; it would make sense in a
+model where inputs have their intrinsic precisions which is obeyed by the
+implementation of the basic operations, but currently the design decision for
+the floating point macros is that when the target precision is |P| the inputs
+are rounded first to |P| digits before further processing.)
+\begin{everbatim*}
+{\def\x{99999999999999994999999999999999/99999999999999999999999999999999}%
+\xintFor #1 in {13, 14, 15, 16, 17, 18, 19, 47, 48, 49, 50, 79, 80, 81}
+\do{#1: \xintFloat[#1]{\x}\xintifForLast{\par}{\newline}}}%
+\end{everbatim*}
+As an aside, which is illustrated by the above, rounding is not
+transitive in the number of kept digits.
+\begin{everbatim*}
+{\def\x{137893789173289739179317/13890138013801398}%
+\xintFor* #1 in {\xintSeq{4}{20}}
+\do{#1: \xintFloat[#1]{\x}\newline}}%
+\xintFloat{5/9999999999999999}\newline
+\xintFloat[32]{5/9999999999999999}\newline
+\xintFloat[48]{5/9999999999999999}\par
+\end{everbatim*}
+
+
+
+\subsection{\csh{xintPFloat}}\label{xintPFloat}
+
+The macro |\xintPFloat [P]{f}|\etype{{\upshape[\numx]}\Ff} is like
+\csbxint{Float} but ``pretty-prints'' the output. Its behaviour has changed
+with release |1.2f|\IMPORTANT{}: there is only one simplification rule now
+which is that decimal notation (with possibly needed extra zeros) is used in
+place of scientific notation when the exponent would end up being between
+\dtt{-5} and \dtt{5} inclusive.
+
+If the input vanishes the output will be \dtt{\xintPFloat{0}} with a a decimal
+mark.%
+%
+\footnote{Currently there are no subnormal numbers, and no underflow
+ because the exponent is only limited by the maximal \TeX\ number; thus
+ underflow situations would manifest themselves via low-level arithmetic
+ overflow errors.}
+
+\csbxint{thefloatexpr} applies this macro to its output (or each of
+its outputs, if comma separated).
+
+Currently trailing zeros are not trimmed.
+
+\begin{everbatim*}
+\begingroup\def\test #1{#1${}\to{}$\xintPFloat{#1}}%
+\string\xintDigits\ at \xinttheDigits
+\begin{itemize}[nosep]
+\item \test {0}
+\item \test {1.23456789e-7}
+\item \test {1.23456789e-6}
+\item \test {1.23456789e-5}
+\item \test {1.23456789e-4}
+\item \test {1.23456789e-3}
+\item \test {1.23456789e-2}
+\item \test {1.23456789e-1}
+\item \test {1.23456789e0}
+\item \test {1.23456789e1}
+\item \test {1.23456789e2}
+\item \test {1.23456789e3}
+\item \test {1.23456789e4}
+\item \test {1.23456789e5}
+\item \test {1.23456789e6}
+\item \test {1.23456789e7}
+\end{itemize}
+\endgroup
+\end{everbatim*}
+
+
+\subsection{\csh{xintFloatE}}\label{xintFloatE}
+
+|\xintFloatE [P]{f}{x}|\etype{{\upshape[\numx]}\Ff\numx} multiplies the input
+|f| by $10^x$, and
+converts it to float format according to the optional first argument or current
+value of |\xinttheDigits|.
+\begin{everbatim*}
+\xintFloatE {1.23e37}{53}
+\end{everbatim*}
+
+\subsection{\csh{xintFloatAdd}}\label{xintFloatAdd}
+
+
+|\xintFloatAdd [P]{f}{g}|\etype{{\upshape[\numx]}\Ff\Ff} first replaces |f|
+and |g| with their float approximations |f'| and |g'| to |P| significant
+places or to the precision from |\xintDigits|. It then produces
+the sum |f'+g'|, correctly rounded to nearest with the same number of
+significant places.
+
+
+\subsection{\csh{xintFloatSub}}\label{xintFloatSub}
+
+
+|\xintFloatSub [P]{f}{g}|\etype{{\upshape[\numx]}\Ff\Ff} first replaces |f|
+and |g| with their float approximations |f'| and |g'| to |P| significant
+places or to the precision from |\xintDigits|. It then produces
+the difference |f'-g'| correctly rounded to nearest |P|-float.
+
+
+\subsection{\csh{xintFloatMul}}\label{xintFloatMul}
+
+
+|\xintFloatMul [P]{f}{g}|\etype{{\upshape[\numx]}\Ff\Ff} first replaces |f|
+and |g| with their float approximations |f'| and |g'| to |P| (or
+|\xinttheDigits|) significant places. It then correctly rounds
+the product |f'*g'| to nearest |P|-float.
+
+See \autoref{ssec:floatingpoint} for more.
+
+\begin{framed}
+ It is obviously much needed that the author improves its algorithms to avoid
+ going through the exact |2P| or |2P-1| digits before
+ throwing to the waste-bin half of those digits !
+
+ % \xintname initially was purely an \emph{exact} arbitrary precision
+ % arithmetic machine, and the introduction of floating point numbers was an
+ % after-thought. I got it working in release |1.07 (2013/05/25)| and never had
+ % time to come back to it.
+\end{framed}
+
+\subsection{\csh{xintFloatDiv}}\label{xintFloatDiv}
+
+
+|\xintFloatDiv [P]{f}{g}|\etype{{\upshape[\numx]}\Ff\Ff} first replaces |f|
+and |g| with their float approximations |f'| and |g'| to |P| (or
+|\xinttheDigits|) significant places. It then correctly rounds
+the fraction |f'/g'| to nearest |P|-float.
+
+See \autoref{ssec:floatingpoint} for more.
+
+Notice in the special situation with |f| and |g| integers that |\xintFloatDiv
+[P]{f}{g}| will \emph{not necessarily} give the correct rounding of the
+exact fraction |f/g|. Indeed the macro arguments are each first individually
+rounded to |P| digits of precision. The correct syntax to get the correctly
+rounded integer fraction |f/g| is \csbxint{Float}|[P]{f/g}|.
+
+\subsection{\csh{xintFloatPow}}\label{xintFloatPow}
+
+|\xintFloatPow [P]{f}{x}|\etype{{\upshape[\numx]}\Ff\numx} uses either the
+optional argument |P| or in its absence the value of |\xinttheDigits|. It
+computes a floating approximation to |f^x|.
+
+The exponent |x| will be handed over to a |\numexpr|, hence count registers are
+accepted on input for this |x|. And the absolute value \verb+|x|+ must obey the
+\TeX{} bound.
+
+The argument |f| is first rounded to |P| significant places to give
+|f'|. The output |Z| is such that the exact |f'^x| differs from
+|Z| by an absolute error less than |0.52 ulp(Z)|.
+\begin{everbatim*}
+\xintFloatPow [8]{3.1415}{1234567890}
+\end{everbatim*}
+
+\subsection{\csh{xintFloatPower}}\label{xintFloatPower}
+
+\csa{xintFloatPower}|[P]{f}{g}|\etype{{\upshape[\numx]}\Ff\Numf} computes a
+floating point value |f^g| where the exponent |g| is not constrained to be at
+most the \TeX{} bound \dtt{\number "7FFFFFFF}. It may even be a fraction
+|A/B| but must simplify to a (possibly big) integer. The exponent of the
+\emph{output} however \emph{must} at any rate obey the \TeX{} bound.
+
+The argument |f| is first rounded to |P| significant places to give
+|f'|. The output |Z| is then such that the exact |f'^g| differs from
+|Z| by an absolute error less than |0.52 ulp(Z)|.
+
+This is the macro which is used for the |^| (or |**|) infix operators in
+|\xintthefloatexpr...\relax|. In this context (but not directly with the
+macro,) half-integer exponents are allowed. This is handled via an integer power
+followed by a square-root extraction. The exponent is first rounded to nearest
+integer or half-integer so that the computation never raises errors (except
+naturally for negative exponent and zero |f|.) The |0.52 ulp(Z)| bound applies
+with half-integer exponents too.
+
+
+Notice that this is a bound on the distance from |f'^g| to |Z|, as |f| always
+gets rounded to |P| or \csbxint{theDigits} digits. The distance from |f^g| to
+|Z| can be much worse if |g| is very large. Roughly, when |g| is negligible
+compared to |10^P|, we get an extra difference of up to about |50g ulp(Z)|
+which completely dwarfs the |0.52 ulp(Z)|. Thus, if |f| has strictly more than
+|P| digits, then the computation must be done with an elevated working
+precision |P'|. For example with |g=1000| we should use |P'=P+6| to achieve a
+total error at worst slightly bigger than |0.55 ulp(Z)| after the final
+rounding from |P'| to |P| digits to get |Z|.
+
+Examples:%
+%
+\footnote{|\np| is formatting macro from the \url{http://ctan.org/pkg/numprint}
+ package.}
+%
+\begin{everbatim*}
+\np{\xintFloatPower [8]{3.1415}{3e9}}\newline% Notice that 3e9>2^31
+\np{\xintFloatPower [48]{1.1547}{\xintiiPow {2}{35}}}\newline
+\end{everbatim*}%
+$2^{35}=\xintiiPow {2}{35}$ exceeds \TeX's bound, but what
+counts is the exponent of the result which, while dangerously close to
+$2^{31}$ is not quite there yet.
+
+With expressions:
+\begin{everbatim*}
+{\xintDigits:=48;\np{\xintthefloatexpr 1.1547^(2^35)\relax}}
+\end{everbatim*}
+
+There is a subtlety here that the |2^35| will be evaluated as a floating point
+number but fortunately it only has \dtt{11} digits, hence the final evaluation
+is done with a correct exponent. It would have been safer, and also more
+efficient to code the above rather as:
+\begin{everbatim}
+\xintthefloatexpr 1.1547^\xintiiexpr 2^35\relax\relax
+\end{everbatim}
+
+Here is an example with
+|12^16| as exponent, which has $18$ digits (\dtt{={\xintiiPow{12}{16}}}).
+\begin{everbatim*}
+{\xintDigits:=12;\np{\xintthefloatexpr (1+1e-8)^\xintiiexpr 12^16\relax\relax}}\newline
+\np{\xintthefloatexpr (1+1e-8)^\xintiiexpr 12^16\relax\relax}\newline
+{\xintDigits:=27;\np{\xintthefloatexpr (1+1e-8)^(12^16)\relax}}\newline
+{\xintDigits:=48;\np{\xintthefloatexpr (1+1e-8)^(12^16)\relax}}
+\end{everbatim*}
+
+There is an important difference between |\xintFloatPower[Q]{X}{Y}| and
+|\xintthefloatexpr[Q] X^Y\relax|: in the former case the computation is done
+with |Q| digits or precision,%
+%
+\footnote{if |X| and |Y| themselves stand for some
+floating point macros with arguments, their respective evaluations obey the
+precision |\xinttheDigits| or as set optionally in the macro calls
+themselves.}
+%
+whereas with \csbxint{thefloatexpr}|[Q]| the evaluation of the
+expression proceeds with |\xinttheDigits| digits of precision, and the final
+result is then rounded to |Q| digits: thus this makes real sense only if used
+with |Q<\xinttheDigits|.
+
+\subsection{\csh{xintFloatSqrt}}\label{xintFloatSqrt}
+
+\csa{xintFloatSqrt}|[P]{f}|\etype{{\upshape[\numx]}\Ff} computes a floating
+point approximation of $\sqrt{|f|}$, either using the optional precision |P| or
+the value of |\xinttheDigits|.
+
+More precisely since |1.2f| the macro achieves so-called \emph{correct
+ rounding}:\IMPORTANT{} the produced value is the rounding to |P| significant
+places of the abstract exact value, \emph{if the input has itself at most |P|
+ digits} (and an arbitrary exponent).
+\begin{everbatim*}
+\xintFloatSqrt [89]{10}\newline
+\xintFloatSqrt [89]{100}\newline
+\xintFloatSqrt [89]{123456789}\par
+\end{everbatim*}
+
+And now some tests to check that correct rounding applies correctly (sic):
+\begin{everbatim*}
+The argument has 16 digits, hence escapes initial rounding:\newline
+\xintFloatSqrt {5625000075000001}\newline
+This one gets rounded hence same value is computed:\newline
+\xintFloatSqrt {5625000075000001.4}\newline
+but actual value is more like:\newline
+\xintFloatSqrt [24]{5625000075000001.4}\newline
+\xintFloatSqrt [32]{5625000075000001.4}\newline
+The argument has 48 digits, hence escapes initial rounding:\newline
+\xintFloatSqrt [48]{562500000000000000000000750000000000000000000001}\newline
+\xintFloatSqrt [64]{562500000000000000000000750000000000000000000001}\newline
+\xintFloatSqrt [80]{562500000000000000000000750000000000000000000001}\newline
+\end{everbatim*}
+(we observe in passing illustrations that rounding to nearest is not
+transitive.)\par
+
+
+
+
+
+
+\subsection{\csh{xintFloatFac}}\label{xintFloatFac}
+
+\csa{xintFloatFac}|[P]{f}|\etype{{\upshape[\numx]}\Numf} returns the
+factorial with either \csa{xinttheDigits} or |P| digits of precision.
+
+
+
+The exact theoretical value differs from the calculated one |Y| by an absolute
+error strictly less than |0.6 ulp(Y)|.
+
+\begin{everbatim*}
+$1000!\approx{}$\xintFloatFac [30]{1000}
+\end{everbatim*}
+The computation proceeds via doing explicitely the product, as
+the Stirling formula cannot be used for lack so far of |exp/log|.
+
+The maximal allowed argument is $99999999$, but already $100000!$ currently
+takes, for \dtt{16} digits of precision, a few seconds on my laptop (it
+returns \dtt{2.824229407960348e456573}).
+
+The |factorial| function is available in \csbxint{floatexpr}:
+\begin{everbatim*}
+\xintthefloatexpr factorial(1000)\relax % same as 1000!
+\end{everbatim*}
+
+\subsection{\csh{xintFloatBinomial}}\label{xintFloatBinomial}
+
+\csa{xintFloatBinomial}|[P]{x}{y}|\etype{{\upshape[\numx]}\Numf\Numf} computes
+binomial coefficients with either \csa{xinttheDigits} or |P| digits of
+precision.
+
+When |x<0| an out-of-range error is raised. Else if |y<0| or if |x<y| the
+macro evaluates to \dtt{\xintFloatBinomial{1}{-1}}.
+The exact theoretical value differs from the calculated one |Y| by an absolute
+error strictly less than |0.6 ulp(Y)|.
+
+\begin{everbatim*}
+${3000\choose 1500}\approx{}$\xintFloatBinomial [24]{3000}{1500}
+\end{everbatim*}
+
+% \begin{everbatim*}
+% ${9999\choose 5000}\approx{}$\xintFloatBinomial [24]{9999}{5000}
+% \end{everbatim*}
+
+% 2015/11/28
+% 7.95895131766219474168799e3007
+% aparté: (testé avec Maple 16, 2015/11/28)
+% > binomial (9999.,5000.);
+% 3008
+% 0.795895131768 10
+%
+% > Digits:=32;
+% Digits := 32
+%
+% > binomial (9999.,5000.);
+% 3008
+% 0.795895131768 10
+% apparemment le binomial de Maple ne sait pas calculer avec plus de
+% précision!
+% et son dernier chiffre est faux! Pourtant GAMMA(9999.) fonctionne. Sauf si
+% je n'ai pas compris quelque chose il me semble donc que le binomial de Maple
+% est bogué...binomial(100.,50.); marche lui et binomial(4999.,2000.); aussi,
+% bon clairement on a un bug de Maple ! oui binomial(8999.,5000.); ainsi que
+% binomial(10999.,5000.); fonctionnent avec Digits:=32 mais **pas**
+% binomial(9999.,5000.)... binomial(10000.,5000.); et binomial(9998.,5000.);
+% sont OK. Est-ce qu'on gagne quelque chose pour un bug report ?
+% > binomial(9999.,5000.);
+% 3008
+% 0.795895131768 10
+% > binomial(10000.,5000.);
+% 3009
+% 0.1591790263532438948337597273641521 10
+% > binomial(9998.,5000.);
+% 3008
+% 0.3979077671466477799149739359402922 10
+% en plus je lui demande 32 chiffres et il m'en sort 34.
+
+The associated function in \csbxint{floatexpr} is \func{binomial}:
+\begin{everbatim*}
+\xintthefloatexpr binomial(3000,1500)\relax
+\end{everbatim*}
+
+The computation is based on the formula |(x-y+1)...x/y!| (here one arranges
+|y<=x-y| naturally).
+
+
+\subsection{\csh{xintFloatPFactorial}}\label{xintFloatPFactorial}
+
+\csa{xintFloatPFactorial}|[P]{x}{y}|\etype{{\upshape[\numx]}\Numf\Numf}
+computes the product |(x+1)...y|.
+
+
+
+
+The arguments must be integers (they are expanded inside |\numexpr|)
+and the allowed range is $-100000000\leqslant x, y\leqslant99999999$. If
+$x\geqslant y$ the product is considered empty hence returns one (as a
+floating point value).
+See also \csbxint{iiPFactorial}.
+
+
+The exact theoretical value differs from the calculated one |Y| by an absolute
+error strictly less than |0.6 ulp(Y)|.
+
+The associated function in \csbxint{floatexpr} is \func{pfactorial}:
+\begin{everbatim*}
+\xintthefloatexpr pfactorial(2500,5000)\relax
+\end{everbatim*}
+
+\xintDigits:=16;
+
+\subsection{\csh{xintFrac}}\label{xintFrac}
+
+This is a \LaTeX{} only macro,\etype{\Ff} to be used in math mode only. It
+will print a fraction, internally represented as something equivalent to
+|A/B[n]| as |\frac {A}{B}10^n|. The power of ten is omitted when |n=0|, the
+denominator is omitted when it has value one, the number being separated from
+the power of ten by a |\cdot|. |$\xintFrac {178.000/25600000}$| gives $\xintFrac
+{178.000/25600000}$, |$\xintFrac {178.000/1}$| gives $\xintFrac {178.000/1}$,
+|$\xintFrac {3.5/5.7}$| gives $\xintFrac {3.5/5.7}$, and |$\xintFrac {\xintNum
+ {\xintiiFac{10}/|\allowbreak|\xintiiSqr{\xintiiFac {5}}}}$| gives $\xintFrac
+{\xintNum {\xintiiFac{10}/\xintiiSqr{\xintiiFac {5}}}}$. As shown by the examples,
+simplification of the input (apart from removing the decimal points and moving
+the minus sign to the numerator) is not done automatically and must be the
+result of macros such as |\xintIrr|, |\xintREZ|, or |\xintNum| (for fractions
+being in fact integers.)
+
+\subsection{\csh{xintSignedFrac}}\label{xintSignedFrac}
+
+
+This is as \csbxint{Frac}\etype{\Ff} except that a negative fraction has the
+sign put in front, not in the numerator.
+\begin{everbatim*}
+\[\xintFrac{-355/113}=\xintSignedFrac {-355/113}\]
+\end{everbatim*}
+
+\subsection{\csh{xintFwOver}}\label{xintFwOver}
+
+This does the same as \csa{xintFrac}\etype{\Ff} except that the \csa{over}
+primitive is used for the fraction (in case the denominator is not one; and a
+pair of braces contains the |A\over B| part). |$\xintFwOver {178.000/25600000}$|
+gives $\xintFwOver {178.000/25600000}$, |$\xintFwOver {178.000/1}$| gives
+$\xintFwOver {178.000/1}$, |$\xintFwOver {3.5/5.7}$| gives $\xintFwOver
+{3.5/5.7}$, and |$\xintFwOver {\xintNum {\xintiiFac{10}/\xintiiSqr{\xintiiFac
+ {5}}}}$| gives $\xintFwOver {\xintNum {\xintiiFac{10}/\xintiiSqr{\xintiiFac
+ {5}}}}$.
+
+\subsection{\csh{xintSignedFwOver}}\label{xintSignedFwOver}
+
+This is as \csbxint{FwOver}\etype{\Ff} except that a negative fraction has the
+sign put in front, not in the numerator.
+\begin{everbatim*}
+\[\xintFwOver{-355/113}=\xintSignedFwOver {-355/113}\]
+\end{everbatim*}
+
+\subsection{\csh{xintLen}}\label{xintLenFrac}
+
+The original \csbxint{Len} macro\etype{\Ff} is extended to accept a fraction
+on input: the length of |A/B[n]| is the length of |A| plus the length of |B|
+plus the absolute value of |n| and minus one (an integer input as |N| is
+internally represented in a form equivalent to |N/1[0]| so the minus one means
+that the extended \csa{xintLen} behaves the same as the original for
+integers).
+\begin{everbatim*}
+\xintLen{201710/298219}=\xintLen{201710}+\xintLen{298219}-1\newline
+\xintLen{1234/1}=\xintLen{1234}=\xintLen{1234[0]}=\xintiLen{1234}\newline
+\xintLen{-1e3/5.425} (\xintRaw {-1e3/5.425})\par
+\end{everbatim*}
+The length is computed on the |A/B[n]| which would have been returned by
+\csbxint{Raw}, as illustrated by the last example above.
+
+|\xintLen| is only for use with such (scientific) numbers or fractions. See
+also \csbxint{NthElt} from \xinttoolsname. See also \csbxint{Length} (which
+however does not expand its argument) from \xintkernelname for counting more
+general tokens (or rather braced items).
+
+\clearpage
+\let\xintfracnameUp\undefined
+\csname xintexprnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintexprname package}%
+\RaisedLabel{sec:expr}
+
+\localtableofcontents
+
+The \xintexprname package was first released with version |1.07|
+(|2013/05/25|) of the \xintname bundle. It was substantially enhanced with
+release |1.1| from |2014/10/28|.
+
+The package loads automatically \xintfracname and \xinttoolsname.
+\begin{itemize}
+\item |1.3d| adds \csbxint{eval}, \csbxint{ieval}, \csbxint{iieval},
+ \csbxint{floateval}.\NewWith{1.3d}
+\item for the \func{gcd} and \func{lcm} functions, it is NOT necessary anymore
+ to
+ load package \xintgcdname. And they now work not only with integers:\NewWith{1.3d}
+\begin{everbatim*}
+\xinttheiiexpr lcm (2^5*7*13^10*17^5,2^3*13^15*19^3,7^3*13*23^2)\relax\newline
+\end{everbatim*}%
+but also with fractions:\IMPORTANT
+\begin{everbatim*}
+\xinttheexpr lcm(7/300, 11/150, 13/60), gcd(7/300, 11/150, 13/60)\relax\par
+\end{everbatim*}
+\item for allowing hexadecimal (uppercase letters only) input, it is \emph{necessary}
+ to load package \xintbinhexname.\IMPORTANT
+ \begin{everbatim*}
+\xinttheexpr "A*"B*"C*"D*"D*"F, "FF.FF, reduce("FF.FFF + 16^-3)\relax
+\end{everbatim*}
+\end{itemize}
+
+Please refer to \autoref{sec:xintexprsyntax} for a more detailed description
+of some syntax elements.
+
+\subsection{The \csh{xintexpr} expressions}
+\label{xintexpr}
+\label{xinttheexpr}
+\label{thexintexpr}
+\label{xintthe}
+
+An \xintexprname{}ession is a construct
+\csbxint{expr}\meta{expandable\_expression}|\relax|\etype{x} where the
+expandable expression is read and completely expanded from left to right.
+
+An |\xintexpr...\relax| \emph{must} end in a |\relax| (which will be absorbed).
+Like a |\numexpr| expression, it is not printable as is, nor can it be directly
+employed as argument to the other package macros. For this one must use one
+of the three equivalent forms:
+\begin{itemize}
+\item \csb{thexintexpr}\meta{expandable\_expression}|\relax|\etype{x}, or
+\item \csb{xinttheexpr}\meta{expandable\_expression}|\relax|\etype{x}, or
+\item \csb{xintthe}|\xintexpr|\meta{expandable\_expression}|\relax|.\etype{x}
+\end{itemize}
+
+The computations are done \emph{exactly}, and with no simplification of the
+result. See \csbxint{floatexpr} for a similar parser which rounds each
+operation inside the expression to \csbxint{theDigits} digits of precision.
+
+As an alternative and equivalent syntax to
+\begin{everbatim}
+\xintexpr round(<expression>, D)\relax
+\end{everbatim}
+there is\footnote{For truncation rather than rounding, one uses
+|\xintexpr trunc(<expression>, D)\relax|.}
+\begin{everbatim}
+\xintiexpr [D] <expression> \relax
+\end{everbatim}
+The parameter |D| must be zero or positive.\footnote{|D=0|
+ corresponds to using |round(<expression>)| not |round(<expression>,0)| which
+ would leave a trailing dot. Same for |trunc|. There is also function |float|
+ for floating point rounding to \csbxint{theDigits} or the given number of
+ significant digits as second argument.} Perhaps some future version will
+give a meaning to using a negative |D|.\footnote{Thanks to KT for this
+ suggestion. Sorry for the delay in implementing it... matter of formatting
+ the output and corresponding choice of user interface are still in need of
+ some additional thinking.}
+
+\begin{itemize}
+\item the expression may contain arbitrarily many levels of nested parenthesized
+ sub-expressions,
+\item the expression may contain explicitely or from a macro expansion a
+ sub-expression |\xintexpr...\relax|, which itself may contain a
+ sub-expressions etc\dots
+\item to let sub-contents evaluate as a sub-unit it should thus be either
+ \begin{enumerate}
+ \item parenthesized,
+ \item or a sub-expression |\xintexpr...\relax|.
+ \end{enumerate}
+ \item to use an expression as argument to the other package macros,
+ or more generally to macros which expand their arguments, one must use the
+ |\xinttheexpr...\relax| or |\xintthe\xintexpr...\relax| forms.
+ \item similarly,
+ printing the result itself must be done with these forms.
+ \item one should not use |\xinttheexpr...\relax| as a sub-constituent of an
+ |\xintexpr...\relax| but only the
+ |\xintexpr...\relax| form which is more efficient in this context.
+ \item each \xintexprname{}ession, whether prefixed or not with |\xintthe|, is
+ completely expandable and obtains its result in two expansion steps.
+\end{itemize}
+
+See \autoref{sec:xintexprsyntax} for the primary information on built-in
+operators and functions. This section now adds some complementary information.
+
+
+\begin{itemize}[parsep=0pt, labelwidth=\leftmarginii,
+ itemindent=0pt, listparindent=\leftmarginiii, leftmargin=\leftmarginii]
+\item An expression is built the standard way with opening and closing
+ parentheses, infix operators, and (big) numbers, with possibly a fractional
+ part, and/or scientific notation (except for \csbxint{iiexpr} which only
+ admits big integers). All variants work with comma separated expressions. On
+ output each comma will be followed by a space. A decimal number must have
+ digits either before or after the decimal mark.
+
+\item As everything gets expanded, the characters |.|, |+|, |-|, |*|, |/|, |^|,
+ |!|, |&|, \verb+|+, |?|, |:|, |<|, |>|, |=|, |(|, |)|, |"|, |]|, |[|, |@|
+ and the comma |,| should not (if used in the expression) be active. For
+ example, the French language in |Babel| system, for pdf\LaTeX, activates |!|,
+ |?|, |;| and |:|. Turn off the activity before expressions using such characters.
+
+ Alternatively the macro \csbxint{exprSafeCatcodes} resets all
+ characters potentially needed by \csbxint{expr} to their standard catcodes
+ and \csbxint{exprRestoreCatcodes} restores the former status.
+
+\item Count registers and |\numexpr|-essions are accepted (LaTeX{}'s counters
+ can be inserted using |\value|) natively without |\the| or |\number| as
+ prefix. Also dimen registers and control sequences, skip registers and
+ control sequences (\LaTeX{}'s lengths), |\dimexpr|-essions,
+ |\glueexpr|-essions are automatically unpacked using |\number|, discarding
+ the stretch and shrink components and giving the dimension value in |sp|
+ units ($1/65536$th of a \TeX{} point). Furthermore, tacit multiplication is
+ implied, when the (count or dimen or glue) register or variable, or the
+ (|\numexpr| or |\dimexpr| or |\glueexpr|) expression is immediately prefixed
+ by a (decimal) number. See \autoref{ssec:tacit multiplication} for the complete rules
+ of tacit multiplication.\IMPORTANT
+
+\item With a macro |\x| defined like this:
+ %
+ \leftedline{|\def\x {\xintexpr \a + \b \relax}| or |\edef\x {\xintexpr
+ \a+\b\relax}|}
+ %
+ one may then do |\xintthe\x|, either for printing the result on the page or
+ to use it in some other macros expanding their arguments. The |\edef| does
+ the computation immediately but keeps it in an internal private format.
+ Naturally, the |\edef| is only possible if |\a| and |\b| are already
+ defined. With both approaches the |\x| can be inserted in other expressions,
+ as for example (assuming naturally as we use an |\edef| that in the
+ `yet-to-be computed' case the |\a| and |\b| now have some suitable meaning):
+ %
+ \leftedline {|\edef\y {\xintexpr \x^3\relax}|}
+
+\item There is also \csbxint{boolexpr}| ... \relax| and
+ \csbxint{theboolexpr}| ... \relax|. Same as |\xintexpr| with the final
+ result converted to $1$ if it is not zero.
+
+\item See also
+ \csbxint{ifboolexpr} (\autoref{xintifboolexpr}) and the
+ \func{bool} and \func{togl} functions
+ in \autoref{sec:expr}. Here is an example:
+\catcode`| 12 %
+\begin{everbatim*}
+\xintNewBoolExpr \AssertionA[3]{ #1 && (#2||#3) }
+\xintNewBoolExpr \AssertionB[3]{ #1 || (#2&&#3) }
+\xintNewBoolExpr \AssertionC[3]{ xor(#1,#2,#3) }
+{\centering\normalcolor\xintFor #1 in {0,1} \do {%
+ \xintFor #2 in {0,1} \do {%
+ \xintFor #3 in {0,1} \do {%
+ #1 AND (#2 OR #3) is \textcolor[named]{OrangeRed}{\AssertionA {#1}{#2}{#3}}\hfil
+ #1 OR (#2 AND #3) is \textcolor[named]{OrangeRed}{\AssertionB {#1}{#2}{#3}}\hfil
+ #1 XOR #2 XOR #3 is \textcolor[named]{OrangeRed}{\AssertionC {#1}{#2}{#3}}\\}}}}
+\end{everbatim*}\catcode`| 13
+
+ This example used for efficiency \csbxint{NewBoolExpr}. See also the
+ \autoref{xintNewExpr}.
+
+\item See also \csbxint{ifsgnexpr}.
+
+\item There is \csbxint{floatexpr}| ... \relax| where the algebra is done
+ in floating point approximation (also for each intermediate result). Use the
+ syntax |\xintDigits:=N;| to set the precision. Default: $16$ digits.
+ %
+ \leftedline{|\xintthefloatexpr 2^100000\relax:| \dtt{\xintthefloatexpr
+ 2^100000\relax }}
+ %
+ The square-root operation can be used in |\xintexpr|, it is computed
+ as a float with the precision set by |\xintDigits| or by the optional
+ second argument:
+ %
+\begin{everbatim*}
+\xinttheexpr sqrt(2,60)\relax\newline
+Here the [60] is to avoid truncation to |\xinttheDigits| of precision on output.\newline
+\printnumber{\xintthefloatexpr [60] sqrt(2,60)\relax}
+\end{everbatim*}
+
+ Floats are quickly indispensable when using the power function , as exact
+ results will easily have hundreds, if not thousands, of digits.
+ %
+\begin{everbatim*}
+\xintDigits:=48;\xintthefloatexpr 2^100000\relax
+\end{everbatim*}
+
+ Only integer and (in |\xintfloatexpr...\relax|) half-integer exponents are
+ allowed.
+
+\item if one uses \emph{macros} within |\xintexpr..\relax| one should
+ obviously take into account that the parser will \emph{not} see the macro
+ arguments, hence once cannot use the syntax there, except if the arguments
+ are themselves wrapped as |\xinttheexpr...\relax| and assuming the macro
+ \fexpan ds these arguments.
+\end{itemize}
+
+
+\subsection{\texorpdfstring{\texttt{\protect\string\numexpr}}{\textbackslash
+ numexpr} or \texorpdfstring{\texttt{\protect\string\dimexpr}}{\textbackslash
+ dimexpr} expressions, count and dimension registers and variables}
+\label{ssec:countinexpr}
+
+Count registers, count control sequences, dimen registers, dimen control
+sequences (like |\parindent|), skips and skip control sequences, |\numexpr|,
+|\dimexpr|, |\glueexpr|, |\fontdimen| can be inserted directly, they will be
+unpacked using |\number| which gives the internal value in terms of scaled
+points for the dimensional variables: $1$\,|pt|${}=65536$\,|sp| (stretch and
+shrink components are thus discarded).
+
+Tacit multiplication (see \autoref{ssec:tacit multiplication}) is implied,
+when a number or decimal number prefixes such a register or control sequence.
+\LaTeX{} lengths are skip control sequences and \LaTeX{} counters should be
+inserted using |\value|.
+
+Release |1.2| of the |\xintexpr| parser also recognizes and prefixes with
+|\number| the |\ht|, |\dp|, and |\wd| \TeX{} primitives as well as the
+|\fontcharht|, |\fontcharwd|, |\fontchardp| and |\fontcharic| \eTeX{}
+primitives.
+
+In the case of numbered registers like |\count255| or |\dimen0| (or |\ht0|),
+the resulting digits will be re-parsed, so for example |\count255 0| is like
+|100| if |\the\count255| would give |10|. The same happens with inputs such
+as |\fontdimen6\font|. And |\numexpr 35+52\relax| will be exactly as if |87|
+as been encountered by the parser, thus more digits may follow: |\numexpr
+35+52\relax 000| is like |87000|. If a new |\numexpr| follows, it is treated
+as what would happen when |\xintexpr| scans a number and finds a non-digit: it
+does a tacit multiplication.
+\begin{everbatim*}
+\xinttheexpr \numexpr 351+877\relax\numexpr 1000-125\relax\relax{} is the same
+as \xinttheexpr 1228*875\relax.
+\end{everbatim*}
+
+Control sequences however (such as |\parindent|) are picked up as a whole by
+|\xintexpr|, and the numbers they define cannot be extended extra digits, a
+syntax error is raised if the parser finds digits rather than a legal
+operation after such a control sequence.
+
+A token list variable must be prefixed by |\the|, it will not be unpacked
+automatically (the parser will actually try |\number|, and thus fail). Do not
+use |\the| but only |\number| with a dimen or skip, as the |\xintexpr| parser
+doesn't understand |pt| and its presence is a syntax error. To use a dimension
+expressed in terms of points or other \TeX{} recognized units, incorporate it in
+|\dimexpr...\relax|.
+
+Regarding how dimensional expressions are converted by \TeX{} into scaled points
+see also \autoref{sec:Dimensions}.
+
+\subsection{Catcodes and spaces}
+
+Active characters may (and will) break the functioning of \csbxint{expr}.
+Inside an expression one may prefix, for example a |:| with |\string|. Or, for
+a more radical way, there is \csbxint{exprSafeCatcodes}. This is a
+non-expandable step as it changes catcodes.
+
+\subsubsection{\csh{xintexprSafeCatcodes}}
+\label{xintexprSafeCatcodes}
+
+This macro sets the catcodes of many characters to safe values. This is used
+internally by \csbxint{NewExpr} (restoring the catcodes on exit), hence it
+does not have to be protected against active characters when used at
+top-level.
+
+Also \csbxint{defvar}, \csbxint{deffunc}, ..., use it before fetching their
+semi-colon delimited arguments, so they can be used (also in the document
+body) for example with Babel+French which makes the semi-colon active in the
+(\LaTeX) document body.\CHANGED{1.3c}
+
+As \csbxint{NewExpr} and \csbxint{deffunc} and variants use internally some
+|\scantokens|, they will (reasonably) succeed in sanitizing catcodes in the
+expressions, even if all is from the replacement text of some macro whose
+definition was done under some special catcode regime.
+
+But \csbxint{deffunc}, \csbxint{defvar} and variants need the (catcode other)
+semi-colon as delimiter. Thus make sure the semi-colon has its normal catcode
+when using \csbxint{deffunc} inside some macro definition.
+
+The macros \csbxint{deffunc} and variants ignore completely the colon in |:=|
+(which furthermore is optional) so it can have any (reasonable) frozen catcode.
+
+The macros \csbxint{defvar} and variants are also compatible with any
+reasonable frozen catcode of the colon |:| in |:=|, and the colon presence is
+only optional.\NewWith{1.3c}
+
+\begin{framed}
+ It is important to ALWAYS shortly let \csbxint{exprSafeCatcodes} be followed
+ by \csbxint{exprRestoreCatcodes}.\IMPORTANTf{} If one uses twice
+ \csbxint{exprSafeCatcodes} then the next \csbxint{exprRestoreCatcodes} will
+ restore the ancien catcode regime at time of the first one.
+\end{framed}
+
+\subsubsection{\csh{xintexprRestoreCatcodes}}
+\label{xintexprRestoreCatcodes}
+
+Restores the catcodes to the earlier state. More precisely,
+\csbxint{exprSafeCatcodes} sets a toggle (with local scope). If the toggle is
+set already it does not restore the current catcodes. The next
+\csa{xintexprRestoreCatcodes} unsets the toggle.\CHANGED{1.3c}
+So, in case of nesting, the
+catcodes are restored to what they were when the \emph{first} un-paired
+\csbxint{exprSafeCatcodes} got executed.
+
+\bigskip
+
+Spaces inside an |\xinttheexpr...\relax| should mostly be
+innocuous (except inside macro arguments).
+
+|\xintexpr| and |\xinttheexpr| are for the most part agnostic regarding
+catcodes: (unbraced) digits, binary operators, minus and plus signs as
+prefixes, dot as decimal mark, parentheses, may be indifferently of catcode
+letter or other or subscript or superscript, ..., it doesn't matter.%
+%
+\footnote{Furthermore, although \csbxint{expr} uses \csa{string}, it is
+ escape-char agnostic. It should work with any \csa{escapechar} setting
+ including -1.}
+
+The characters |+|, |-|, |*|, |/|, |^|, |!|, |&|, \verb+|+, |?|, |:|, |<|, |>|,
+|=|, |(|, |)|, |"|, |[|, |]|, |;|, the dot and the comma should not be active if
+in the expression, as everything is expanded along the way. If one of them is
+active, it should be prefixed with |\string|.
+
+The exclamation mark |!| should have its standard catcode: with catcode letter
+it is used internally and hence will confuse the parsers if it comes from the
+expression.
+
+Digits, slash, square brackets, minus sign, in the output from an
+|\xinttheexpr| are all of catcode 12. For |\xintthefloatexpr| the `e' in the
+output has its standard catcode ``letter''.
+
+A macro with arguments will expand and grab its arguments before the
+parser may get a chance to see them, so the situation with catcodes and spaces
+is not the same within such macro arguments.
+
+
+
+\subsection{Expandability, \csh{xintexpro}}
+
+As is the case with all other package macros |\xintexpr| \fexpan ds (in two
+steps) to its final (non-printable) result; and |\xinttheexpr| \fexpan ds (in
+two steps) to the chain of digits (and possibly minus sign |-|, decimal mark
+|.|, fraction slash |/|, scientific |e|, square brackets |[|, |]|) representing
+the result.
+
+Starting with |1.09j|, an |\xintexpr..\relax| can be inserted without
+|\xintthe| prefix inside an |\edef|, or a |\write|. It expands to a private
+more compact representation (five tokens) than |\xinttheexpr| or
+|\xintthe\xintexpr|.
+
+The material between |\xintexpr| and |\relax| should contain only expandable
+material.
+
+The once expanded |\xintexpr| is |\romannumeral0\xintexpro|.\CHANGED{1.3d}
+\centeredline{ATTENTION! Prior to |1.3d| the |\xintexpro| macro was named
+ |\xinteval|.}
+But \csbxint{eval} is now something else. And there
+is similarly |\xintiexpro| (formerly |\xintieval|), |\xintiiexpro| (formerly
+|\xintiieval|), and |\xintfloatexpro| (formerly |\xintfloateval|). For an
+example see \autoref{ssec:fibonacci}.
+
+An expression can only be legally finished by a |\relax| token, which
+will be absorbed.
+
+It is quite possible to nest expressions among themselves; for example, if one
+needs inside an |\xintiiexpr...\relax| to do some computations with fractions,
+rounding the final result to an integer, one just has to insert
+|\xintiexpr...\relax|. The functioning of the infix operators will not be in
+the least affected from the fact that the surrounding ``environment'' is the
+|\xintiiexpr| one.
+
+\subsection{Memory considerations}
+\label{ssec:memory}
+
+The parser creates an undefined control sequence for each intermediate
+computation evaluation: addition, subtraction, etc\dots Thus, a moderately sized
+expression might create 10, or 20 such control sequences. On my \TeX{}
+installation, the memory available for such things is of circa \np{200000}
+multi-letter control words. So this means that a document containing hundreds,
+perhaps even thousands of expressions will compile with no problem.
+
+Besides the hash table, also \TeX{} main memory is impacted. Thus, if
+\xintexprname is used for computing plots%
+%
+\footnote{this is not very probable as so far \xintname does not include
+ a mathematical library with floating point calculations, but provides
+ only the basic operations of algebra.}%
+%
+, this may cause a problem. In my testing and with current |TL2015| memory
+settings, I ran into problems after doing about \emph{ten thousand}
+evaluations (for example |(#1+#2)*#3-#1*#3-#2*#3)|) each with number having
+\emph{hundreds} of digits. Typical error message can be:
+\begin{everbatim}
+./testaleatoires.tex:243: TeX capacity exceeded, sorry [pool size=6134970].
+<argument> ...19140037877484848545931233090884903
+\end{everbatim}
+
+There is a (partial) solution.%
+%
+\footnote{which convinced me that I could stick with the parser
+ implementation despite its potential impact on the hash-table and
+ other parts of \TeX{}'s memory.}
+
+A document can possibly do tens of thousands of evaluations only if some
+identical formulae are being used repeatedly, with varying arguments (from
+previous computations possibly) or coming from data being fetched from a file.
+Most certainly, there will be a a few dozens formulae at most, but they will
+be used again and again with varying inputs.
+
+With the \csbxint{NewExpr} macro, it is possible to convert once and
+for all an expression containing parameters into an expandable macro
+with parameters. Only this initial definition of this macro actually
+activates the \csbxint{expr} parser and will (very moderately) impact
+the hash-table: once this unique parsing is done, a macro with
+parameters is produced which is built-up recursively from the
+\csbxint{Add}, \csbxint{Mul}, etc... macros, exactly as it would be
+necessary to do without the facilities of the \xintexprname package.
+
+Notice that since |1.2c| the \csbxint{deffunc} construct allows an alternative
+to \csa{xintNewExpr} whose syntax uses arbitrary letters rather than macro
+parameters |#1|, |#2|, ..., |#9|. The declared function must still be used
+inside an expression, but its use will need only as many |\csname|'s as were
+needed for the function arguments plus one more for encapsulating the function
+result.
+
+\subsection{\csh{xintiexpr}, \csh{xinttheiexpr}}
+\label{xintiexpr}\label{xinttheiexpr}\label{thexintiexpr}
+
+Equivalent\etype{x} to doing |\xintexpr round(...)\relax| (more precisely,
+|round| is applied to each one of the evaluated values, if the expression was
+comma separated). Thus, only the \emph{final result value} is rounded to an
+integer. Half integers are rounded towards $+\infty$ for positive numbers and
+towards $-\infty$ for negative ones.
+
+An optional parameter |d>0| within brackets, immediately after |\xintiexpr|
+is allowed: it instructs the expression to do its final rounding to the
+nearest value with that many digits after the decimal mark, \emph{i.e.},
+|\xintiexpr [d] <expression>\relax| is equivalent (in case of a single
+expression) to |\xintexpr round(<expression>, d)\relax|.
+
+|\xintiexpr [0] ...| is the same as |\xintiexpr ...|.\footnote{Incidentally
+ using |round(...,0)| in place of |round(...)| in |\xintexpr| would leave a
+ trailing dot in the produced value.}
+
+If truncation rather than rounding is needed use (in case of a single
+expression, naturally) |\xintexpr trunc(...)\relax| for truncation to an
+integer or |\xintexpr trunc(...,d)\relax| for truncation to a decimal number
+with |d>0| digits after the decimal mark.
+
+Perhaps in the future some meaning will be given to using negative value for
+the optional parameter |d|.\footnote{Thanks to KT for this suggestion.}
+
+|\thexintiexpr| is synonym to |\xinttheiexpr|.
+
+\subsection{\csh{xintiiexpr}, \csh{xinttheiiexpr}}
+\label{xintiiexpr}\label{xinttheiiexpr}\label{thexintiiexpr}
+
+This variant\etype{x} does not know fractions. It deals almost only with long
+integers. Comma separated lists of expressions are allowed.
+
+\begin{framed}
+ It maps |/| to the \emph{rounded} quotient. The operator
+ |//| is, like in |\xintexpr...\relax|, mapped to \emph{truncated} division.
+ The Euclidean quotient (which for positive operands is like the truncated
+ quotient) was, prior to release |1.1|, associated to |/|. The function
+ |quo(a,b)| can still be employed.
+\end{framed}
+
+The \csbxint{iiexpr}-essions use the `ii' macros for addition, subtraction,
+multiplication, power, square, sums, products, Euclidean quotient and
+remainder.
+
+The |round|, |trunc|, |floor|, |ceil| functions are still available, and are
+about the only places where fractions can be used, but |/| within, if not
+somehow hidden will be executed as integer rounded division. To avoid this one
+can wrap the input in \dtt{qfrac}: this means however that none of the normal
+expression parsing will be executed on the argument.
+
+To understand the illustrative examples, recall that |round| and |trunc| have
+a second (non negative) optional argument. In a normal \csbxint{expr}-essions,
+|round| and |trunc| are mapped to \csbxint{Round} and \csbxint{Trunc}, in
+\csbxint{iiexpr}-essions, they are mapped to \csbxint{iRound} and
+\csbxint{iTrunc}.
+
+
+\begin{everbatim*}
+\xinttheiiexpr 5/3, round(5/3,3), trunc(5/3,3), trunc(\xintDiv {5}{3},3),
+trunc(\xintRaw {5/3},3)\relax{} are problematic, but
+%
+\xinttheiiexpr 5/3, round(qfrac(5/3),3), trunc(qfrac(5/3),3), floor(qfrac(5/3)),
+ceil(qfrac(5/3))\relax{} work!
+\end{everbatim*}
+
+On the other hand decimal numbers and scientific numbers can be used directly
+as arguments to the |num|, |round|, or any function producing an integer.
+
+\begin{framed}
+ Scientific numbers will be
+ represented with as many zeroes as necessary, thus one does not want to
+ insert \dtt{num(1e100000)} for example in an \csa{xintiiexpr}ession !
+\end{framed}
+
+%
+\begin{everbatim*}
+\xinttheiiexpr num(13.4567e3)+num(10000123e-3)\relax % should (num truncates) compute 13456+10000
+\end{everbatim*}
+%
+
+The |reduce| function is not available and will raise un error. The |frac|
+function also. The |sqrt| function is mapped to \csbxint{iiSqrt} which gives
+a truncated square root. The |sqrtr| function is mapped to \csbxint{iiSqrtR}
+which gives a rounded square root.
+
+One can use the Float macros if one is careful to use |num|, or |round|
+etc\dots on their output.
+
+\begin{everbatim*}
+\xinttheiiexpr \xintFloatSqrt [20]{2}, \xintFloatSqrt [20]{3}\relax % no operations
+
+\noindent The next example requires the |round|, and one could not put the |+| inside it:
+
+\xinttheiiexpr round(\xintFloatSqrt [20]{2},19)+round(\xintFloatSqrt [20]{3},19)\relax
+
+(the second argument of |round| and |trunc| tells how many digits from after the
+decimal mark one should keep.)
+\end{everbatim*}
+
+The whole point of \csbxint{iiexpr} is to gain some speed in
+\emph{integer-only} algorithms, and the above explanations related to how to
+nevertheless use fractions therein are a bit peripheral. We observed
+(2013/12/18) of the order of $30$\% speed gain when dealing with numbers with
+circa one hundred digits (1.2: this info may be obsolete).
+
+
+|\thexintiiexpr| is synonym to |\xinttheiiexpr|.
+
+\subsection{\csh{xintboolexpr},
+ \csh{xinttheboolexpr}}
+\label{xintboolexpr}\label{xinttheboolexpr}\label{thexintboolexpr}
+
+
+Equivalent\etype{x} to doing |\xintexpr ...\relax| and returning $1$ if the
+result does not vanish, and $0$ is the result is zero. As |\xintexpr|, this
+can be used on comma separated lists of expressions, and will return a
+comma separated list of $0$'s and $1$'s.
+
+|\thexintboolexpr| is synonym to |\xinttheboolexpr|.
+
+There is slight quirk in case it is used as a sub-expression: the boolean
+expression needs at least one logic operation else the value is not
+standardized to |1| or |0|, for example we get from
+\begin{everbatim*}
+\xinttheexpr \xintboolexpr 1.23\relax\relax\newline
+\end{everbatim*}which is to be compared with
+\begin{everbatim*}
+\xinttheboolexpr 1.23\relax
+\end{everbatim*}
+
+A related issue existed with
+|\xinttheexpr \xintiexpr 1.23\relax\relax|, which was fixed with |1.1|
+release, and I decided back then not to add the needed overhead also to the
+|\xintboolexpr| context, as one only needs to use |?(1.23)| for example or
+involve the |1.23| in any logic operation like |1.23 'and' 3.45|, or involve
+the |\xintboolexpr ..\relax | itself with any logical operation, contrarily to
+the sub-|\xintiexpr| case where |\xinttheexpr 1+\xintiexpr 1.23\relax\relax|
+did behave contrarily to expectations until |1.1|.
+
+
+\subsection{\csh{xintfloatexpr},
+ \csh{xintthefloatexpr}}
+\label{xintfloatexpr}\label{xintthefloatexpr}\label{thexintfloatexpr}
+
+\csbxint{floatexpr}|...\relax|\etype{x} is exactly like |\xintexpr...\relax|
+but with the four binary operations and the power function are mapped to
+\csa{xintFloatAdd}, \csa{xintFloatSub}, \csa{xintFloatMul}, \csa{xintFloatDiv}
+and \csa{xintFloatPower}, respectively.\footnote{Since |1.2f| the \string^
+ handles half-integer exponents, contrarily to \csa{xintFloatPower}.}
+
+The target precision for the computation is from the
+current setting of |\xintDigits|. Comma separated lists of expressions are
+allowed.
+
+An optional parameter within brackets is allowed:
+\begin{itemize}
+\item if positive it instructs the macro to round the result to that many
+ digits of precision. It thus makes sense to employ it only if this parameter is
+ less than the \csbxint{theDigits} precision.
+\item if negative it means to trim off that many digits (of course, rounding
+ the value).\NewWith{1.3e} Don't use it to trim all digits (or more than all)!
+\end{itemize}
+
+Since |1.2f| all float operations first round their arguments; a parsed number
+is not rounded prior to its use as operand to such a float operation.
+
+|\thexintfloatexpr| is synonym to |\xintthefloatexpr|.
+
+|\xintDigits:=36;|\xintDigits:=36;
+%
+\leftedline{|\xintthefloatexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax|}
+%
+\leftedline{\dtt{\xintthefloatexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax}}
+% 0.00564487459334466559166166079096852897
+%
+\leftedline{|\xintthefloatexpr\xintexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax\relax|}
+%
+\leftedline{\dtt{\xintthefloatexpr\xintexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax\relax}}
+
+\xintDigits := 16;
+
+The latter is the rounding of the exact result. The former one has
+its last three digits wrong due to the cumulative effect of rounding errors
+in the intermediate computations, as compared to exact evaluations.
+
+
+
+
+I recall here from \autoref{ssec:floatingpoint} that with release |1.2f| the
+float macros for addition, subtraction, multiplication and division round
+their arguments first to |P| significant places with |P| the asked-for
+precision of the output; and similarly the power macros and the
+square root macro. This does not modify anything for computations with
+arguments having at most |P| significant places already.
+
+\subsection{\csh{xinteval}, \csh{xintieval}, \csh{xintiieval},
+ \csh{xintfloateval}}
+\label{xinteval}\label{xintieval}\label{xintiieval}\label{xintfloateval}
+
+\begin{framed}
+ Prior to |1.3d|,\NewWithf{1.3d} these macros existed but with a different meaning: they
+ arose in the once-expanded \csbxint{expr}, etc..., i.e. one had:
+\begin{everbatim}
+\def\xintexpr{\romannumeral0\xinteval}
+\end{everbatim}
+ The\IMPORTANTf\ old macros were renamed into \csa{xintexpro}, etc..., in order to free
+ their names for new meanings, more alike what one finds in
+ other math packages.
+\end{framed}
+
+\csbxint{eval}\etype{x} is an \fexpan dable macro which is basically defined
+like this:
+\begin{everbatim}
+\def\xinteval#1{\romannumeral-`0\xinttheexpr#1\relax}
+\end{everbatim}
+thus expands in two steps (its exact definition differs from the one given
+above in order to achieve a slight optimization).
+\begin{everbatim*}
+\xinteval{add(x^2, x = 100..110), add(x^3, x = 100..110)}
+\end{everbatim*}
+
+\csbxint{ieval}\etype{x} is similarly related to \csbxint{theiexpr}. Its optional
+argument must be located inside the braces:
+\begin{everbatim*}
+\xintieval{[7] 355/113}
+\end{everbatim*}
+
+\csbxint{iieval}\etype{x} is similarly related to \csbxint{theiiexpr}.
+\begin{everbatim*}
+\xintiieval{add(x^2, x = 100..110), add(x^3, x = 100..110)}
+\end{everbatim*}
+
+\csbxint{floateval}\etype{x} is similarly related to \csbxint{thefloatexpr}. Its optional
+argument must be located inside the braces:
+\begin{everbatim*}
+\xintfloateval{[7] 355/113}
+\end{everbatim*}
+
+When negative it tells how many digits to remove from the prevailing precision
+(\csbxint{theDigits}):\NewWith{1.3e}
+\begin{everbatim*}
+\xintfloateval{[-2] 355/113} has \xinttheDigits\ minus 2 digits.
+\end{everbatim*}
+
+These macros are useful when one uses some extra wrapper doing some parsing of
+its input, like the |\num| macro of
+\href{http://ctan.org/pkg/siunitx}{siunitx}, which would choke on some of the
+syntax elements allowed inside \csb{xintexpr}|...\relax| (for example
+brackets).
+As shown in the above examples, these macros, like the underlying parsers
+accept arbitrarily many comma separated expressions.
+
+
+\subsection{Using an expression parser within another one}
+
+This was already illustrated before. In the following:
+\begin{everbatim*}
+\xintthefloatexpr \xintexpr add(1/i, i=1234..1243)\relax ^100\relax
+\end{everbatim*},
+the inner sum is computed exactly. Then it will be rounded to |\xinttheDigits|
+significant digits, and then its power will be evaluated as a float operation.
+One should avoid the "|\xintthe|" parsers in inner positions as this induces
+digit by digit parsing of the inner computation result by the outer parser.
+Here is the same computation done with floats all the way:
+\begin{everbatim*}
+\xintthefloatexpr add(1/i, i=1234..1243)^100\relax
+\end{everbatim*}
+
+Not surprisingly this differs from the previous one which was exact until
+raising to the |100|th power.
+
+The fact that the inner expression occurs inside a bigger one has nil
+influence on its behaviour. There is the limitation though that the outputs
+from \csbxint{expr} and \csbxint{floatexpr} can not be used directly in
+\csbxint{theiiexpr} integer-only parser. But one can do:
+\begin{everbatim*}
+\xinttheiiexpr round(\xintfloatexpr 3.14^10\relax)\relax % or trunc
+\end{everbatim*}
+
+
+\subsection{The \csh{xintthecoords} macro}
+\label{xintthecoords}
+
+It converts a comma separated list into the format for list of coordinates as
+expected by the |TikZ| |coordinates| syntax.%
+%
+\footnote{The implementation had to work around the
+problem that |TikZ| seemingly allows only a maximal number of about one
+hundred expansion steps for the list to be entirely produced.}%
+%
+\begin{everbatim*}
+\begin{figure}[htbp]
+\centering\begin{tikzpicture}[scale=10]\xintDigits:=8;
+ \clip (-1.1,-.25) rectangle (.3,.25);
+ \draw [blue] (-1.1,0)--(1,0);
+ \draw [blue] (0,-1)--(0,+1);
+ \draw [red] plot[smooth] coordinates {%
+ \xintthecoords % (converts what is next into (x1, y1) (x2, y2)... format)
+ \xintfloatexpr seq((x^2-1,mul(x-t,t=-1+[0..4]/2)),x=-1.2..[0.1]..+1.2) \relax };
+\end{tikzpicture}
+\caption{Coordinates with \cs{xintthecoords}.}
+\end{figure}
+\end{everbatim*}
+
+% Notice: if x goes no take exactly value 1 or -1, the origin appears slightly
+% off the curve, not MY fault!!!
+
+As examplified above, \csbxint{thecoords} is to be used followed immediately
+by either \csbxint{floatexpr} or \csbxint{iexpr} or \csbxint{iiexpr}. See
+\url{https://tex.stackexchange.com/a/447290} for another example.
+
+As |TikZ| will not understand the |A/B[N]| format which is used on output by
+|\xintexpr|, |\xintthecoords\xintexpr| has no use inside a |TikZ| picture but
+may have other usages; the reason for the spaces in output is to allow if
+necessary to print on the page for examination and give \TeX\ a change to
+establish line-breaks.
+
+\begin{everbatim*}
+\edef\x{\xintthecoords \xintexpr rrseq(1/2,1/3; @1+@2, x=1..20)\relax }
+\meaning\x +++
+\end{everbatim*}
+
+\subsection{\csh{xintifboolexpr}, \csh{xintifboolfloatexpr}, \csh{xintifbooliiexpr}}
+\label{xintifboolexpr}
+\label{xintifboolfloatexpr}
+\label{xintifbooliiexpr}
+
+\csh{xintifboolexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
+\csbxint{theexpr}<expr>|\relax| and then executes the \meta{YES} or the
+\meta{NO} branch depending on whether the outcome was non-zero or zero. Thus
+one can read \emph{if bool expr} as meaning \emph{if not zero}:
+\centeredline{if \meta{expr}-ession does not vanish do \meta{YES} else do
+ \meta{NO}}
+
+The expression is not limited to using only comparison operators and Boolean
+logic (|<|, |>|, |==|, |!=|, |&&|, \verb+||+, \func{all}, \func{any},
+\func{xor}, \func{bool}, \func{togl}, ...), it can be the most general
+computation.
+
+\csh{xintifboolfloatexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
+\csbxint{thefloatexpr}\meta{expr}|\relax| and then executes the \meta{YES} or the
+\meta{NO} branch depending on whether the outcome was non zero or zero.
+
+\csh{xintifbooliiexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
+\csbxint{theiiexpr}\meta{expr}|\relax| and then executes the \meta{YES} or the
+\meta{NO} branch depending on whether the outcome was non zero or zero.
+
+The expression argument must be a single one, comma separated sub-expressions
+will cause low-level errors.
+
+\subsection{\csh{xintifsgnexpr}, \csh{xintifsgnfloatexpr}, \csh{xintifsgniiexpr}}
+\label{xintifsgnexpr}
+\label{xintifsgnfloatexpr}
+\label{xintifsgniiexpr}
+
+\csh{xintifsgnexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
+the \csbxint{expr}ession and chooses the branch corresponding to its sign.
+
+\csh{xintifsgnfloatexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
+the \csbxint{floatexpr}ession and chooses the branch corresponding to its sign.
+
+\csh{xintifsgniiexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
+the \csbxint{iiexpr}ession and chooses the branch corresponding to its sign.\NewWith{1.3d}
+
+The expression argument must be a single one, comma separated sub-expressions
+will cause low-level errors.
+
+\subsection{The \csh{xintNewExpr} macro}
+\label{xintNewExpr}
+
+The macro is used as:
+%
+\leftedline{|\xintNewExpr{\myformula}[n]|\marg{stuff}, where}
+\begin{itemize}
+\item \meta{stuff} will be inserted inside |\xinttheexpr . . . \relax|,
+\item |n| is an integer between zero and nine, inclusive, which is the number
+ of parameters of |\myformula|,
+\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} in
+ their usual r\^ole,%
+%
+\catcode`# 12
+\footnote{if \csa{xintNewExpr} is used inside a macro,
+ the |#|'s must be doubled as usual.}
+ \footnote{the |#|'s will in pratice have their usual
+ catcode, but category code other |#|'s are accepted too.}
+\catcode`# 6
+%
+\item the |[n]| is \emph{mandatory}, even for |n=0|.%
+\footnote{there is some use for \csa{xintNewExpr}|[0]| compared to an
+ \csa{edef} as \csa{xintNewExpr} has some built-in catcode protection.}
+\item the macro |\myformula| is defined without checking if it already exists,
+ \LaTeX{} users might prefer to do first |\newcommand*\myformula {}| to get a
+ reasonable error message in case |\myformula| already exists,
+\item the protection against active characters is done automatically (as long
+ as the whole thing has not already been fetched as a macro argument and
+ the catcodes correspondingly already frozen).
+\end{itemize}
+
+It will be a completely expandable macro entirely built-up using |\xintAdd|,
+|\xintSub|, |\xintMul|, |\xintDiv|, |\xintPow|, etc\dots as corresponds to the
+expression written with the infix operators.
+Macros created by |\xintNewExpr| can thus be nested.
+
+\begin{everbatim*}
+ \xintNewFloatExpr \FA [2]{(#1+#2)^10}
+ \xintNewFloatExpr \FB [2]{sqrt(#1*#2)}
+\begin{enumerate}[nosep]
+ \item \FA {5}{5}
+ \item \FB {30}{10}
+ \item \FA {\FB {30}{10}}{\FB {40}{20}}
+\end{enumerate}
+\end{everbatim*}
+
+ The use of \csbxint{NewExpr} circumvents the impact of the |\xintexpr|
+ parsers on \TeX's memory: it is useful if one has a formula which has to be
+ re-evaluated thousands of times with distinct inputs each with dozens, or
+ hundreds of digits.
+
+ A ``formula'' created by |\xintNewExpr| is thus a macro whose parameters are
+ given to a possibly very complicated combination of the various macros of
+ \xintname and \xintfracname. Consequently, one can not use at all any infix
+ notation in the inputs, but only the formats which are recognized by the
+ \xintfracname macros.
+
+ This is thus quite different from a macro with parameters which one would
+ have defined via a simple |\def| or |\newcommand| as for example:
+ %
+ \leftedline{|\newcommand\myformula [1]{\xinttheexpr (#1)^3\relax}|}
+ %
+ Such a macro |\myformula|, if it was used tens of thousands of times with
+ various big inputs would end up populating large parts of \TeX's memory. It
+ would thus be better for such use cases to go for:
+ %
+ \leftedline{|\xintNewExpr\myformula [1]{#1^3\relax}|}
+ %
+ Here naturally the situation is over-simplified and it would be even simpler
+ to go directly for the use of the macro |\xintPow| or |\xintPower|.
+
+
+|\xintNewExpr| tries to do as many evaluations as are possible at the time the
+macro parameters are still parameters. Let's see a few examples. For this I
+will use |\meaning| which reveals the contents of a macro.
+
+\begin{enumerate}
+\item the examples use a mysterious |\fixmeaning| macro, which is there to get
+ in the display |\romannumeral`^^@| rather than the frankly cabalistic
+ |\romannumeral``| which made the admiration of the readers of the
+ documentation dated |2015/10/19| (the second |`| stood for an ascii code
+ zero token as per |T1| encoded |newtxtt| font). Thus the true meaning is
+ ``fixed'' to display something different which is how the macro could be
+ defined in a standard |tex| source file (modulo, as one can see in example,
+ the use of characters such as |:| as letters in control sequence names).
+ Prior to |1.2a|, the meaning would have started with a more mundane
+ |\romannumeral-`0|, but I decided at the time of releasing |1.2a| to imitate
+ the serious guys and switch for the more hacky yet |\romannumeral`^^@|
+ everywhere in the source code (not only in the macros produced by
+ \csbxint{NewExpr}), or to be more precise for an equivalent as the caret has
+ catcode letter in \xintname's source code, and I had to use another
+ character.
+\item the meaning reveals the use of some private macros from the \xintname
+ bundle, which should not be directly used. If the things look a bit
+ complicated, it is because they have to cater for many possibilities.
+\item the point of showing the meaning is also to see what has already been
+ evaluated in the construction of the macros.
+\end{enumerate}
+
+\begin{everbatim*}
+\xintNewIIExpr\FA [1]{13*25*78*#1+2826*292}\fixmeaning\FA
+\end{everbatim*}
+\smallskip
+
+\begin{everbatim*}
+\xintNewIExpr\FA [2]{(3/5*9/7*13/11*#1-#2)*3^7}
+\printnumber{\fixmeaning\FA}
+\end{everbatim*}
+
+\smallskip
+
+\begin{everbatim*}
+% an example with optional parameter
+\xintNewIExpr\FA [3]{[24] (#1+#2)/(#1-#2)^#3}
+\printnumber{\fixmeaning\FA}
+\end{everbatim*}
+
+\smallskip
+
+\begin{everbatim*}
+\xintNewFloatExpr\FA [2]{[12] 3.1415^3*#1-#2^5}
+\printnumber{\fixmeaning\FA}
+\end{everbatim*}
+
+\smallskip
+
+\begin{everbatim*}
+\xintNewExpr\DET[9]{ #1*#5*#9+#2*#6*#7+#3*#4*#8-#1*#6*#8-#2*#4*#9-#3*#5*#7 }
+\printnumber{\fixmeaning\DET}
+\end{everbatim*}
+
+\unless\ifxetex
+Notice that since |1.2c| it is perhaps more natural to do:
+\begin{everbatim*}
+% attention that «ad» would try to use non-existent variable "ad"
+\xintdeffunc det2(a, b, c, d) := a*d - b*c ;
+% This is impossible because we must use single letters :
+% \xintdeffunc det3(x_11, x_12, x_13, x_21, x_22, x_23, x_31, x_32, x_33) :=
+% x_11 * det2 (x_22, x_23, x_32, x_33) + x_21 * det2 (x_32, x_33, x_12, x_13)
+% + x_31 * det2 (x_12, x_13, x_22, x_23);
+\xintdeffunc det3 (a, b, c, u, v, w, x, y, z) := a*v*z + b*w*x + c*u*y - b*u*z - c*v*x - a*w*y ;
+\xinttheexpr det3 (1,1,1,1,2,4,1,3,9), det3 (1,10,100,1,100,10000,1,1000,1000000),
+ 90*900*990, reduce(det3 (1,1/2,1/3,1/2,1/3,1/4,1/3,1/4,1/5))\relax\newline
+\xintdeffunc det3bis (a, b, c, u, v, w, x, y, z) :=
+ a*det2(v,w,y,z)-b*det2(u,w,x,z)+c*det2(u,v,x,y);
+\pdfsetrandomseed 123456789 % xint.pdf should be predictable from xint.dtx !
+\xinttheexpr subs(subs(subs(subs(subs(subs(subs(subs(subs(
+% we use one extra pair of parentheses to hide the commas from the subs
+ (a, b, c, u, v, w, x, y, z, det3 (a, b, c, u, v, w, x, y, z),
+ det3bis (a, b, c, u, v, w, x, y, z)),
+ z=\pdfuniformdeviate 1000), y=\pdfuniformdeviate 1000), x=\pdfuniformdeviate 1000),
+ w=\pdfuniformdeviate 1000), v=\pdfuniformdeviate 1000), u=\pdfuniformdeviate 1000),
+ c=\pdfuniformdeviate 1000), b=\pdfuniformdeviate 1000), a=\pdfuniformdeviate 1000)\relax
+\end{everbatim*}
+
+
+The last computation with its nine nested |subs| can be coded more
+economically (and efficiently), exploiting the fact that a single dummy
+variable can expand to a whole list:
+\begin{everbatim*}
+\pdfsetrandomseed 123456789 % xint.pdf should be predictable from xint.dtx !
+\xinttheexpr subs((L, det3(L), det3bis(L)), % parentheses used to hide the inner commas
+ L=\pdfuniformdeviate 1000, \pdfuniformdeviate 1000, \pdfuniformdeviate 1000,
+ \pdfuniformdeviate 1000, \pdfuniformdeviate 1000, \pdfuniformdeviate 1000,
+ \pdfuniformdeviate 1000, \pdfuniformdeviate 1000, \pdfuniformdeviate 1000)\relax
+\end{everbatim*}
+\fi % de pas de xetex
+
+With |\xintverbosetrue| we will find in the log:
+
+\begin{everbatim}
+ Function det3 for \xintexpr parser associated to \XINT_expr_userfunc_det3 w
+ith meaning macro:#1#2#3#4#5#6#7#8#9->\xintSub {\xintSub {\xintSub {\xintAdd {\
+xintAdd {\xintMul {\xintMul {#1}{#5}}{#9}}{\xintMul {\xintMul {#2}{#6}}{#7}}}{\
+xintMul {\xintMul {#3}{#4}}{#8}}}{\xintMul {\xintMul {#2}{#4}}{#9}}}{\xintMul {
+\xintMul {#3}{#5}}{#7}}}{\xintMul {\xintMul {#1}{#6}}{#8}}
+
+ Function det3bis for \xintexpr parser associated to \XINT_expr_userfunc_det
+3bis with meaning macro:#1#2#3#4#5#6#7#8#9->\xintAdd {\xintSub {\xintMul {#1}{\
+xintExpandArgs {XINT_expr_userfunc_det2}{{#5}{#6}{#8}{#9}}}}{\xintMul {#2}{\xin
+tExpandArgs {XINT_expr_userfunc_det2}{{#4}{#6}{#7}{#9}}}}}{\xintMul {#3}{\xintE
+xpandArgs {XINT_expr_userfunc_det2}{{#4}{#5}{#7}{#8}}}}
+\end{everbatim}
+
+
+
+\medskip
+Lists, including Python-like selectors, are compatible with
+\csa{xintNewExpr}:%
+%
+\footnote{The |\empty| token is optional here, but it would
+ be needed in case of \csbxint{NewFloatExpr} or \csbxint{NewIExpr}.}
+%
+\begin{everbatim*}
+\xintNewExpr\Foo[5]{\empty[#1..[#2]..#3][#4:#5]}
+\begin{itemize}[nosep]
+\item |\Foo{1}{3}{90}{20}{30}|->\Foo{1}{3}{90}{20}{30}
+\item |\Foo{1}{3}{90}{-40}{-15}|->\Foo{1}{3}{90}{-40}{-15}
+\item |\Foo{1.234}{-0.123}{-10}{3}{7}|->\Foo{1.234}{-0.123}{-10}{3}{7}
+\end{itemize}
+\fdef\test {\Foo {0}{10}{100}{3}{6}}\meaning\test +++
+\end{everbatim*}
+
+In this last example the macro |\Foo| will not be able to handle an empty |#4|
+or |#5|: this is only possible in an expression, because the parser identifies
+|][:| or |:]| and handles them appropriately. During the construction of |\Foo|
+the parser will find |][#4:| and not |][:|.
+
+\begin{framed}
+ The \csbxint{deffunc}, \csbxint{defiifunc}, \csbxint{deffloatfunc}
+ declarators added to \xintexprname since release |1.2c| are based on the
+ same underlying mechanism as \csa{xintNewExpr}, \csa{xintNewIIExpr}, ... The
+ discussion that follows applies to them too.
+\end{framed}
+
+\subsubsection {Conditional operators and \csh{NewExpr}}
+\label{sssec:cond}
+
+The |?| and |??| conditional operators cannot be parsed by |\xintNewExpr| when
+they contain macro parameters |#1|,\dots, |#9| within their scope. However
+replacing them with the functions |if| and, respectively |ifsgn|, the parsing
+should succeed. And the created macro will \emph{not evaluate the branches to
+ be skipped}, thus behaving exactly like |?| and |??| would have in the
+|\xintexpr|.
+
+\begin{everbatim*}
+\xintNewExpr\Formula [3]{ if((#1>#2) && (#2>#3), sqrt(#1-#2)*sqrt(#2-#3), #1^2+#3/#2) }%
+\printnumber{\fixmeaning\Formula }
+\end{everbatim*}
+
+This formula (with its |\xintiiifNotZero|) will gobble the false branch without
+evaluating it when used with given arguments.
+
+Remark: the meaning above reveals some of the private macros used by the
+package. They are not for direct use.
+
+Another example
+
+\begin{everbatim*}
+\xintNewExpr\myformula[3]{ ifsgn(#1,#2/#3,#2-#3,#2*#3) }%
+\fixmeaning\myformula
+\end{everbatim*}
+
+Again, this macro gobbles the false branches, as would have the operator |??|
+inside an |\xintexpr|-ession.
+
+\subsubsection{External macros and \csh{xintNewExpr}; the protect function}
+\label{sssec:protect}
+
+For macros within such a created \xintname-formula macro, there
+are two cases:
+\begin{itemize}
+\item the macro does not involve the numbered parameters in its arguments: it
+ may then be left as is, and will be evaluated once during the construction of
+ the formula,
+\item it does involve at least one of the macro parameters as argument. Then:
+ \begin{snugframed}
+ the whole thing (macro + argument) should be |protect|-ed, not in the
+ \LaTeX{} sense (!), but in the following way: |protect(\macro {#1})|.\IMPORTANT
+ \end{snugframed}
+\end{itemize}
+
+Here is a silly example illustrating the general principle: the macros here have
+equivalent functional forms which are more convenient; but some of the more
+obscure package macros of \xintname dealing with integers do not have functions
+pre-defined to be in correspondance with them, use this mechanism could be
+applied to them.
+
+\begin{everbatim*}
+\xintNewExpr\formulaA[2]{protect(\xintRound{#1}{#2}) - protect(\xintTrunc{#1}{#2})}%
+\printnumber{\fixmeaning\formulaA}
+
+\xintNewIIExpr\formulaB [3]{rem(#1,quo(protect(\the\numexpr #2\relax),#3))}%
+\noindent\printnumber{\fixmeaning\formulaB }
+\end{everbatim*}
+
+Only macros involving the |#1|, |#2|, etc\dots should be protected in this
+way; the |+|, |*|, etc\dots symbols, the functions from the \csbxint{expr}
+syntax, none should ever be included in a protected string.
+
+
+\subsubsection{Limitations of \csh{NewExpr} and \csh{deffunc}}
+\label{sssec:limitations}
+
+\csbxint{NewExpr} will pre-evaluate everything as long as it does not contain
+the macro parameters |#1|, |#2|, ... and the special measures to take when
+these are inside branches to |?| and |??| (replace these operators by |if| and
+|ifsgn|) or as arguments to macros external to \xintexprname (use |protect|)
+were discussed in \autoref{sssec:cond} and \autoref{sssec:protect}.
+
+The main remaining limitation is that expressions with dummy variables are
+compatible with \csa{xintNewExpr} only to the extent that the iterated-over
+list of values does not depend on the macro parameters |#1|, |#2|, ... For
+example, this works:
+\begin{everbatim*}
+\xintNewExpr \FA [2] {reduce(add((t+#1)/(t+#2), t=0..5))}
+\FA {1}{1}, \FA {1}{2}, \FA {2}{3}
+\end{everbatim*}
+but the |5| can not be abstracted into a third argument |#3|.
+
+There are no restriction on using macro parameters |#1|, |#2|, ... with list
+constructs. For example, this works:
+\begin{everbatim*}
+\xintNewIExpr \FB [3] {[4] `+`([1/3..[#1/3]..#2]*#3)}
+\begin{itemize}[nosep]
+\item \FB {1}{10/3}{100} % (1/3+2/3+...+10/3)*100
+\item \FB {5}{5}{20} % (1/3+6/3+11/3)*20
+\item \FB {3}{4}{1} % (1/3+4/3+7/3+10/3)*1
+\end{itemize}
+\end{everbatim*}
+
+Some simple expressions with |add| or |mul| can be also expressed with |`+`|
+and |`*`| and list operations. But there is no hope for |seq|, |iter|, etc...
+if the |#1|, |#2|, ... are used inside the list argument:
+|seq(x(x+#1)(x+#2),x=1..#3)| is currently not compatible with
+\csa{xintNewExpr}. But |seq(x(x+#1)(x+#2), x=1..10)| has no problem.
+
+All the preceeding applies identically for \csbxint{deffunc}, \csbxint{defiifunc},
+\csbxint{deffloatfunc} which share the same routines as \csa{xintNewExpr},
+\csa{xintNewIIExpr}, ..., replacing the |#1|, |#2|, ... in the discussion by
+the letters used as function arguments.
+
+Here is a final syntax restriction: it is possible to use sub-expressions only if they use
+\csa{xintexpr}, those with \csa{xinttheexpr}, or \csbxint{eval} are illegal.
+\begin{everbatim*}
+\xintNewExpr \FC [4] {#1+\xintexpr #2*#3\relax + #4}
+\printnumber{\fixmeaning\FC}
+\end{everbatim*}\newline
+works, but
+\begin{everbatim}
+\xintNewExpr \FD [1] {#1+\xinttheexpr 1\relax}
+\end{everbatim}
+or
+\begin{everbatim}
+\xintNewExpr \FD [1] {#1+\xinteval{1}}
+\end{everbatim}
+do not.
+
+Prior to |1.3e| it would have been possible to do\CHANGED{1.3e}
+\begin{everbatim}
+\xintdeffunc FD(t) := t + \xinttheexpr 1\relax ;
+\end{everbatim}
+and even
+\begin{everbatim}
+\xintdeffunc FE(t,u) := t + \xinttheexpr u\relax ;
+\end{everbatim}
+They are now illegal, but fortunately
+\begin{everbatim*}
+\xintdeffunc FD(t) := t + \xintexpr 1\relax ;
+\end{everbatim*}
+and even for example
+\begin{everbatim*}
+\xintdeffunc FE(t,u) := \xintfloatexpr t + u\relax ;
+\end{everbatim*}
+do work. The latter would not have worked formerly. It now does, see
+\xinttrigname for use case.
+
+Anyway, one should never use |\xinttheexpr| for sub-expressions but only
+|\xintexpr|, so these restrictions on the \csbxint{NewExpr} and
+\csbxint{deffunc} syntax have no importance. However since the package
+provides the high level \csbxint{eval} et al., it may trap some users. But if
+they read the documentation they will have been warned.
+
+\subsection{\csh{xintNewFloatExpr}}\label{xintNewFloatExpr}
+
+This is exactly like \csbxint{NewExpr} except that the created formulas are
+set-up to use |\xintthefloatexpr|. Careful though that the |[...]| list syntax
+if first thing in the expression will be confused by the parser with the
+optional rounding argument |[N]| of \csbxint{floatexpr} (cf.
+\autoref{ssec:lists}.) Use an |\empty| token:
+\begin{everbatim*}
+\xintNewFloatExpr\F[1]{\empty[divmod(11.7,#1)][1]}
+% this is a bit silly example, done only to check that it works
+\F{1.35}
+\end{everbatim*}
+
+The numbers hard-wired in the original expression are evaluated using the
+prevailing |\xintDigits| precision at time of creation; the rest of the
+formula will be evaluated using the precision valid at the time of use.
+\begin{everbatim*}
+\xintNewFloatExpr \f [1] {sqrt(#1)}
+\f {2} (with \xinttheDigits{} digits of precision).
+
+{\xintDigits := 32;\f {2} (with \xinttheDigits{} digits of precision).}
+
+\xintNewFloatExpr \f [1] {sqrt(#1)*sqrt(2)}
+\f {2} (with \xinttheDigits {} digits of precision).
+
+\xintDigits := 32;\f {2} (?? we thought we had a higher precision.)
+
+\xintNewFloatExpr \f [1] {sqrt(#1)*sqrt(2)}
+\f {2} (with \xinttheDigits {} digits of precision)
+
+\xintDigits := 16;% back to default
+\end{everbatim*}
+
+The |sqrt(2)| in the first |sqrt(#1)*sqrt(2)| NewFloatExpression was computed
+with only \dtt{\xinttheDigits} digits of precision. In the second one, the
+|sqrt(2)| gets pre-evaluated with \dtt{32} digits of precision.
+
+\subsection{\csh{xintNewIExpr}}\label{xintNewIExpr}
+
+Like \csbxint{NewExpr} but using |\xinttheiexpr|. As |\xintiexpr| admits an
+optional rounding argument |[N]| the same caveat when square brackets come
+first in the expression as in the discussion of \csbxint{NewFloatExpr}
+applies.
+
+
+\subsection{\csh{xintNewIIExpr}}\label{xintNewIIExpr}
+
+Like \csbxint{NewExpr} but using |\xinttheiiexpr|.
+
+\subsection{\csh{xintNewBoolExpr}}\label{xintNewBoolExpr}
+
+Like \csbxint{NewExpr} but using |\xinttheboolexpr|.
+
+\xintDigits:= 16;
+
+\subsection{The \cshnolabel{xintdefvar}, \cshnolabel{xintdefiivar}, \cshnolabel{xintdeffloatvar} macros}
+
+See \autoref{xintdefvar} for their documentation.
+
+\subsection{The \cshnolabel{xintdeffunc}, \cshnolabel{xintdefiifunc}, \cshnolabel{xintdeffloatfunc} macros}
+
+See \autoref{xintdeffunc} for their documentation.
+
+\subsection{The \cshnolabel{xintNewFunction} macro}
+
+See \autoref{xintNewFunction} for its documentation.
+
+\subsection{Technicalities}
+
+As already mentioned \csa{xintNewExpr}|\myformula[n]| does not check the prior
+existence of a macro |\myformula|. And the number of parameters |n| given as
+mandatory argument within square brackets should be (at least) equal
+to the number of parameters in the expression.
+
+Obviously I should mention that \csa{xintNewExpr} itself can not be used in an
+expansion-only context, as it creates a macro.
+
+The |\escapechar| setting may be arbitrary when using |\xintexpr|.
+
+The format of the output of
+|\xintexpr|\meta{stuff}|\relax| is a |!| (with catcode 11) followed by various things:
+\begin{everbatim*}
+\edef\f {\xintexpr 1.23^10\relax }\meaning\f
+\end{everbatim*}
+
+\begin{framed}
+ Note that |\xintexpr| expands in an |\edef|, contrarily
+ to |\numexpr| which is non-expandable, if not prefixed by |\the|, |\number|,
+ or |\romannumeral| or in some other context where \TeX{} is building a number. See
+ \autoref{ssec:fibonacci} for some illustration.
+\end{framed}
+
+I decided to put all intermediate results (from each evaluation of an infix
+operators, or of a parenthesized subpart of the expression, or from application
+of the minus as prefix, or of the exclamation sign as postfix, or any
+encountered braced material) inside |\csname...\endcsname|, as this can be done
+expandably and encapsulates an arbitrarily long fraction in a single token (left
+with undefined meaning), thus providing tremendous relief to the programmer in
+his/her expansion control.
+
+\begin{framed}
+ As the |\xintexpr| computations corresponding to functions and infix
+ or postfix operators are done inside |\csname...\endcsname|, the
+ \fexpan dability could possibly be dropped and one could imagine
+ implementing the basic operations with expandable but not \fexpan
+ dable macros (as \csbxint{XTrunc}.) I have not investigated that
+ possibility.
+\end{framed}
+
+Syntax errors in the input such as using a one-argument function with two
+arguments will generate low-level \TeX{} processing unrecoverable errors, with
+cryptic accompanying message.
+
+Some other problems will give rise to `error messages' macros giving some
+indication on the location and nature of the problem. Mainly, an attempt has
+been made to handle gracefully missing or extraneous parentheses.
+
+However, this mechanism is completely inoperant for parentheses involved in
+the syntax of the |seq|, |add|, |mul|, |subs|, |rseq| and |rrseq| functions,
+and missing parentheses may cause the parser to fetch tokens beyond the ending
+|\relax| necessarily ending up in cryptic low-level \TeX-errors.
+
+Note that the |,<letter>=| part must be visible, it can not arise from
+expansion (the equal sign does not have to be an equal sign, it can be any
+token and will be gobbled).\IMPORTANT{} However for |iter|, |iterr|, |rseq|,
+|rrseq|, the initial values delimited by a |;| are parsed in the normal way,
+and in particular may be braced or arise from expansion. This is useful as the
+|;| may be hidden from \csa{xintdeffunc} as |{;}| for example. Again, this
+remark does \emph{not} apply to the comma |,| which precedes the |<letter>=|
+part. The comma will be fetched by delimited macros and must be there. Nesting
+is handled by checking (again using suitable delimited macros) that
+parentheses are suitably balanced.
+
+
+Note that |\relax| is \emph{mandatory} (contrarily to the situation for |\numexpr|).
+
+\subsection{Acknowledgements (2013/05/25)}
+
+I was greatly helped in my preparatory thinking, prior to producing such an
+expandable parser, by the commented source of the
+\href{http://www.ctan.org/pkg/l3kernel}{l3fp} package, specifically the
+|l3fp-parse.dtx| file (in the version of April-May 2013; I think there was in
+particular a text called ``roadmap'' which was helpful). Also the source of the
+|calc| package was instructive, despite the fact that here for |\xintexpr| the
+principles are necessarily different due to the aim of achieving expandability.
+
+
+\clearpage
+\let\xintexprnameUp\undefined
+\csname xinttrignameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xinttrigname package}
+\RaisedLabel{sec:trig}
+
+\localtableofcontents
+
+This package provides trigonometric functions for use with \xintexprname.
+The sole macro is \csbxint{reloadxinttrig}.
+
+This package was first included in release |1.3e| (|2019/04/01|) of
+\xintexprname. It is automatically loaded by \xintexprname.
+
+\textbf{Acknowledgements} I finally decided to release some such functions
+under friendly pressure of Jürgen \textsc{Gilg} and Thomas \textsc{Söll}, let
+them both be thanked here.
+
+\subsection{\csh{xintreloadxinttrig}}\label{xintreloadxinttrig}
+
+\begin{framed}
+ After modifying \csbxint{Digits},\IMPORTANTf{} one must issue
+ \csbxint{reloadxinttrig} to let the package re-configure itself.
+\end{framed}
+
+The library is pre-configured to be able to handle a precision of up to about
+\fbox{\dtt{60}} digits (make this \dtt{59} at most for the inverse functions).
+But absence of guard digits (whether in the used hard-coded constants or in
+passing over values from one auxiliary function to the next) due to high level
+(user) interface used for the programming means that the produced values are
+definitely expected to be wrong in the last digit or last two digits. I should
+actually give some estimate of the actual maximal error in |ulps| unit, but I
+have not done the complete analysis for lack of time.
+
+Final computation results should thus probably be printed via
+\csbxint{floateval}|{[-2]....}| in order to strip off (with rounding) the last
+two digits, if one does not like seeing those non-meaningful figures in the
+last one or two positions (I don't say those last two figures are
+\emph{systematically} off). For example, to achieve \dtt{16} digits of
+precision one should work with a precision of 18 digits (being careful to have
+issued \csbxint{reloadxinttrig}) and round results using
+\csbxint{floateval}|{[-2]....}|.
+
+Another approach is to use \csbxint{ieval}|{[D]...}| for conversion to
+a fixed point format.
+
+In future, lower level coding will probably replace the high-level interface,
+or at least the macros produced by the high-level interface will be hacked
+into to tell the float macros to work at a somewhat elevated precision.
+
+\subsection{Constants}
+
+They are the correct rounding to \csbxint{Digits} precision of the
+mathematically exact ones. Their values get incorporated into the
+trigonometrical functions at the time of their definitions during loading or
+reloading of the package. They are left free to use, or modified, or
+\csbxint{unassignvar}'d, as this will have no impact whatsoever on the
+functions.
+
+\begin{description}
+\vardesc{twoPi} what could that be?
+\vardesc{threePiover2}
+\vardesc{Pi}
+\vardesc{Piover2}
+\vardesc{oneRadian} this is one radian in degrees: $180/\pi$
+\vardesc{oneDegree} this is one degree in radian: $\pi/180$
+\vardesc{invfact2} this is $1/2!$
+\vardesc{invfact3} this is $1/3!$
+\item[\dots]
+\vardesc{invfact44} this is $1/44!$
+\end{description}
+
+For a (very) slight optimization of usage, it is recommended to convert them
+to macro form, for example:
+\begin{everbatim*}
+\edef\oneDegree{\xintfloatexpr oneDegree\relax}
+\xintfloateval{sin(37\oneDegree)}\newline
+\xintfloateval{sind(37)}\newline
+\end{everbatim*}
+By the way, the above value differs by |1ulp| from correct rounding of exact
+one (which looks \dtt{...520482}79917...), see \autoref{ssec:trignotes}.
+
+\subsection{Functions}
+
+\subsubsection{Direct trigonometry}
+
+With the variable in radians:
+
+\begin{description}
+\funcdesc{sin} sine
+\funcdesc{cos} cosine
+\funcdesc{tan} tangent
+\funcdesc{cot} cotangent
+\funcdesc{sec} secant
+\funcdesc{csc} cosecant
+\end{description}
+
+With the variable in degrees:
+
+\begin{description}
+\funcdesc{sind} sine
+\funcdesc{cosd} cosine
+\funcdesc{tand} tangent
+\funcdesc{cotd} cotangent
+\funcdesc{secd} secant
+\funcdesc{cscd} cosecant
+\end{description}
+
+Only available with the variable in radians:
+\begin{description}
+\funcdesc{tg} tangent
+\funcdesc{cotg} cotangent
+\funcdesc{sinc} cardinal sine $\sinc(x) = \sin(x)/x$
+\end{description}
+
+\subsubsection{Inverse trigonometry}
+
+With the value in radians:
+
+\begin{description}
+\funcdesc{asin} arcsine
+\funcdesc{acos} arccosine
+\funcdesc{atan} arctangent
+\funcdesc[x, y]{Arg} the main branch of the argument of the complex number
+|x+iy|, from $-\pi$ (excluded) to $\pi$ (included). Inherent rounding of
+output makes
+-\var{Pi} a possible return value.
+\funcdesc[x, y]{pArg} the branch of the argument of the complex number
+|x+iy| with values going from $0$ (included) to $2\pi$ (excluded). Inherent
+rounding makes \var{twoPi} a possible return value.
+\funcdesc[y, x]{atan2} it is |Arg(x, y)|. Note the reversal of the arguments,
+this seems to be the most frequently encountered convention across languages.
+\end{description}
+
+With the value in degrees:
+
+\begin{description}
+\funcdesc{asind} arcsine
+\funcdesc{acosd} arccosine
+\funcdesc{atand} arctangent
+\funcdesc[x, y]{Argd} the main branch of the argument of the complex number
+|x+iy|, from $-180$ (excluded) to $180$ (included). Inherent rounding of
+output can cause |-180|
+to be returned.
+\funcdesc[x, y]{pArgd} the branch of the argument of the complex number
+|x+iy| with values going from $0$ (included) to $360$ (excluded). Inherent rounding of
+output can cause |360| to be returned.
+\funcdesc[y, x]{atan2d} it is |Arg(x, y)|. Note the reversal of the arguments,
+this seems to be the most frequently encountered convention across languages.
+\end{description}
+
+\subsubsection{Conversion functions (optional definitions left to user
+ decision)}
+
+Python provides functions |degrees()| and |radians()|. But as most of the
+\xinttrigname functions are already defined for the two units, I felt this was
+not really needed. It is a oneliner to add them:
+\begin{everbatim}
+\xintdeffloatefunc radians(x) := x * oneDegree;
+\xintdeffloatefunc degrees(x) := x * oneRadian;
+\xintdefefunc radians(x) := x * oneDegree;
+\xintdefefunc degrees(x) := x * oneRadian;
+\end{everbatim}
+
+The variants for \csbxint{expr} above do an exact multiplication, I did not
+add a \func{float} wrapper to force rounding as anyhow the trigonometrical
+functions will do this initial rounding of their arguments. But if you define
+a variable for multiple later use using such a |degrees()| function, it would
+be better to add a \func{float} wrapper in the variable definition so the
+rounding is already done: rounding an already rounded value is unavoidable
+overhead but proceeds faster as it is quicly realized the input actually needs
+no rounding.
+
+Notice however that the conversion factors above are without guard digits. One
+can do this:
+\begin{everbatim}
+\xintdeffloatefunc radians(x) := float(\xintexpr x * oneDegreewithmoredigits\relax);
+\xintdeffloatefunc degrees(x) := float(\xintexpr x * oneRadianwithmoredigits\relax);
+\end{everbatim}
+But recall that |x| will normally already be a rounded value, so this is
+perhaps a bit complex for not much ado. Probably better to work overall with
+an elevated precision and print final results at a lower precision.
+
+\subsection{Important implementation notes}
+\label{ssec:trignotes}
+
+\begin{itemize}
+\item The package is almost entirely implemented using the high level user
+ interface of \xintexprname, see \autoref{sec:xintexprsyntax} for
+ \csbxint{deffloatefunc} and \csbxint{deffloatvar}, the main two exceptions
+ are:
+ \begin{enumerate}[nolistsep]
+ \item the range reduction for the |sind()| and |cosd()| functions which
+ required for optimized efficiency the coding at some more core level.
+ \item a change at core level was done to \csbxint{deffunc} in order to
+ facilitate the transfer of the defined functions from the float parser to
+ the exact parser. See \autoref{sssec:limitations}, the source code
+ comments in |sourcexint.pdf| and the discussion of \csbxint{deffunc} for
+ details. The \csbxint{defefunc} added at |1.3e| was also motivated by this
+ context.
+ \end{enumerate}
+ To avoid problems if the package is reloaded at a time the user has
+ used some letter variables as assigned variables, I added
+ \csbxint{ensuredummy} and \csbxint{restorelettervar}.
+\item It is not possible from this interface to (easily) let the computation
+ proceed with a temporarily elevated precision (``guard digits''). Expect
+ thus some errors in the last places; basically one should use the optional
+ rounding argument of either \csbxint{floateval} or \csbxint{ieval} to reduce
+ the number of digits of printed values by about two digits, if one
+ hopes to get correct rounding (most of the time).
+\item Currently, \xintname is lacking some dedicated internal representation
+ of floats which means that most operations re-parse the digit tokens of their
+ arguments to count them\dots\ this does not contribute to efficiency (you
+ can load the module under |\xintverbosetrue| regime and see how the nested
+ macros look like and get an idea of how many times some rather silly
+ re-counting of mantissa lengths will get done!)
+\item One should not overwrite some function names which are employed as
+ auxiliaries: |sin_aux|, |cos_aux|, |sin_|, |cos_|, |sind_|, |cosd_|,
+ |asin_l|\dots others\dots |asin_a|, |asind_a|, |atan_a|, |atand_a|,
+ |atan_b|, |atand_b|. If you redefine any one of them, you break the
+ whole thing.
+\item Floats with large exponents are integers and are multiple of \dtt{1000};
+ hence modulo \dtt{360} all such ``angles'' are multiple of \dtt{40} degrees.
+ Needless to say that considering usage of the sine and cosine functions
+ with such large float numbers is meaningless.
+\item Regarding such a big float angle in radians, \xinttrigname converts
+ it to degrees by multiplication by (pre-rounded) $180/\pi$, then it does
+ range reduction modulo $360$ and goes back to radians in the appropriate
+ octants and use the series (roughly said). Thus |cos()| and |sin()| will be
+ evaluated as if at some of the finitely many rounded multiples of (exact)
+ $2\pi/9$. When the unit in the last place of the original input was for
+ example \dtt{1e9} it is clear that the final result means nothing at all;
+ this intrinsic problem is not one of conversion from radians to degrees: the
+ unit in the last place interval extends above possibly astronomical numbers of
+ intervals of length $2\pi$. This is an in-built inadequacy of (large)
+ floating point numbers for trigonometrical evaluations; the argument should
+ be treated then as a uniformly distributed random variable modulo $2\pi$,
+ and the sine and cosine values should be random variables realizing the value
+ distribution of these mathematical functions. Clearly this adds some
+ programming complication of deciding how to make the transition. Too lazy
+ for that.
+\item Did I say the implementation was done at very high level (for the most
+ part), hence has ample room for optimization? This is particularly the case
+ for the handling of small inputs by functions such as sine or arcsine.
+\end{itemize}
+
+\clearpage
+\let\xinttrignameUp\undefined
+\csname xintlognameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+
+\section{Macros of the \xintlogname package}
+\RaisedLabel{sec:log}
+
+\localtableofcontents
+
+This package provides logarithms, exponentials and fractional powers for use
+with \xintexprname.
+
+This package was first included in release |1.3e| (|2019/04/01|) of
+\xintexprname. It is automatically loaded by \xintexprname.
+
+Currently it is a wrapper to import package
+\href{http://www.ctan.org/pkg/poormanlog}{poormanlog} which computes with
+\dtt{8} or \dtt{9} digits of precision, adding the \func{log}, \func{exp}, and
+\func{pow} function to the \func{log10} and \func{pow10} provided by the package.
+
+\subsection{\csh{poormanloghack}}
+\label{ssec:poormanloghack}
+
+\begin{description}
+\item[\string\poormanloghack\string{**\string}] use it to let the |**| operator be remapped to the
+ \func{pow} function.
+\item[\string\poormanloghack\string{\string^\string}] use it to let the |^| operator be remapped to the
+ \func{pow} function.
+\end{description}
+If used, they obey \TeX\ scoping as usual.
+\begin{everbatim*}
+\begingroup
+\poormanloghack{**}\xintfloateval{[8]1.234**5.678}\newline
+\poormanloghack{^}\xintfloateval{[8]1.234^5.678}\par
+\endgroup
+% ** and ^ now do not accept fractional exponents: only half-integer ones and
+% only in \xintfloateval, not \xinteval.
+\end{everbatim*}
+
+Notice that in \csbxint{floateval} those (equivalent) operators already
+natively handle half-integer exponents. Once remapped to the \func{pow}
+function they will become less precise than the original ones for half-integer
+and integer exponents.
+
+\subsection{Functions}
+
+All those functions achieve only about \dtt{8} or \dtt{9} digits of precision.
+Notice in particular that the digits beyond the ninth printed by \func{log}
+have no significance (here we suppose |1<x<10|), but I did not add the
+rounding overhead as it is expected anyhow that the final result will be
+appropriately rounded. Notice however that \func{log10} should be seen as
+going from floating point to fixed point (in the sense of the number of
+fractional digits) and \func{pow10} from fixed point to floating point.
+
+\begin{description}
+\funcdesc{log10} logarithm in base 10
+\funcdesc{pow10} fractional powers of 10
+\funcdesc{log} natural logarithm via |log10(x)*2.3025850923| formula; only the
+first 8 or 9 digits of the output are significant...
+\funcdesc{exp} exponential function via |pow10(x*0.434294481903)| formula
+\funcdesc[x, y]{pow} computes $x^y$ via the formula |pow10(y*log10(x))|
+\end{description}
+
+\begin{everbatim*}
+\xintfloateval{[9] log(2), exp(1), pow(2,0.5)}
+\end{everbatim*}
+Notice that the last digit of |log(2)| is not the correctly rounded one... I
+did say 9 \textbf{or} 8 digits or precision... The documentation of
+\href{http://www.ctan.org/pkg/poormanlog}{poormanlog} mentions an error of up
+to 2 units in the ninth digit when computing |log10(x)| for |1<x<10| and
+|10^x| for |0<x<1|.
+
+\clearpage
+\let\xintlognameUp\undefined
+\csname xintbinhexnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintbinhexname package}
+\RaisedLabel{sec:binhex}
+
+\localtableofcontents
+
+This package provides expandable conversions of (big) integers to
+and from binary and hexadecimal.
+
+First version of this package was in the |1.08| (|2013/06/07|) release of
+\xintname. Its routines remained un-modified until their complete rewrite at
+release |1.2m| (|2017/07/31|). The new macros are faster, using techniques
+from the |1.2| (|2015/10/10|) release of \xintcorename. But the inputs are now
+limited to a few thousand digits, whereas the |1.08| could handle (slowly...)
+tens of thousands of digits.
+
+\autoref{tab:binhexsizes} recapitulates the maximal allowed sizes (they got
+increased at |1.2n|):
+for macro |\xintFooToBar| in the first column, the value in the second column
+is the maximal |N| such that |\edef\X{\xintFooToBar{<N digits>}}| does not
+raise an error with standard \TeX\ memory parameters (input stack
+size=\dtt{5000}, expansion depth=\dtt{10000}, parameter stack
+size=\dtt{10000}). The tests were done with TL2017 and |etex|. Nested calls
+will allow slightly lesser values only. The third column gives the
+corresponding maximal size of output. The fourth column gives the \TeX\
+parameter cited in the error message when trying with |N+1| digits.
+
+\begin{table}[htbp]
+\capstart
+ \centering
+\def\E#1#2!{\edef\F{\the\numexpr(#1-\xintLength{#2})/2}%
+ \relax\romannumeral\xintreplicate{\F}{ }#2%
+ \romannumeral\xintreplicate{#1-\F-\xintLength{#2}}{ }\relax}%
+% non satisfactory because depends on #1 oddness, but well. Temporary destined
+% to stay...
+\begin{tabular}{r>{\E{19}}c<{!}>{\E{19}}c<{!}r}
+ \hline
+ &Max\ length\ of\ input&->\ length\ of\ output&Limiting factor\\
+ \csbxint{DecToHex}&6014&4995&input stack size=5000\\
+ \csbxint{DecToBin}&6014&19979&input stack size=5000\\
+ \csbxint{HexToDec}&8298&9992&input stack size=5000\\
+ \csbxint{BinToDec}&19988&6017&input stack size=5000\\
+ \csbxint{BinToHex}&19988&4997&input stack size=5000\\
+ \csbxint{HexToBin}&4996&19984&input stack size=5000\\
+ \csbxint{CHexToBin}&4997&19988&input stack size=5000\\
+ \hline
+\end{tabular}
+\caption{Maximal sizes of inputs (at \texttt{1.2n}) for \xintbinhexname macros}\label{tab:binhexsizes}
+\end{table}
+
+Roughly, base |10| numbers are limited to \dtt{6000} digits, hexadecimal
+numbers to (almost) \dtt{5000} digits, and binary numbers to (almost)
+\dtt{20000} digits. With the surprising exception of \csbxint{HexToDec} which
+allows almost \dtt{8300} hexadecimal digits on input.
+
+The argument is first \fexpan ded.
+It may optionally have a unique leading minus sign (a plus sign is not
+allowed), and leading zeroes.
+
+An input (possibly signed) with no leading zeroes is guaranteed to give an
+output without leading zero, with the sole, deliberate, exception of
+\csbxint{CHexToBin}: from |N| hexadecimal digits it produces |4N| binary
+digits, hence possibly with up to three leading zeroes (if the
+input had none.)
+
+Inputs with leading zeroes usually produce outputs with an unspecified,
+case-dependent, number of leading zeroes (\csbxint{BinToHex} always uses the
+minimal number of hexadecimal digits needed to represent the binary digits,
+inclusive of leading zeroes if present.)
+
+The macros converting from binary or decimal are robust against
+non terminated inputs like |\the\numexpr 2+3| or |\the\mathcode`\-|. The macro
+\csbxint{HexToDec} also but not \csbxint{HexToBin} and \csbxint{CHexToBin}
+(anyway there are no primitive in (e)-\TeX\ to my knowledge which will
+generate hexadecimal digits and may force expansion of next token).
+
+Hexadecimal digits |A..F| must be in uppercase. Category code for them on
+input may be \emph{letter} or \emph{other}. On output they are of category
+code \emph{letter}, and in uppercase.
+
+Low-level unrecoverable errors will happen if for example a supposedly binary
+input contains other digits than |0| and |1|. Inputs can not start with a
+|0b|, |0x|, |#x|, |"| or similar prefix: only digits/letters according to the
+binary, decimal, or hexadecimal notation.
+
+
+With this package loaded additionally to \xintexprname, hexadecimal input is
+possible in expressions: simply by using the prefix |"|. Such hexadecimal
+numbers may have a fractional part. Lowercase hexadecimal letters are
+currently \emph{not} recognized as such in expressions.
+Currently the |p| postfix notation from standard programming languages
+standing for an extra
+power of two multiplicand is not implemented.
+
+% \clearpage
+
+\subsection{\csh{xintDecToHex}}\label{xintDecToHex}
+
+Converts from decimal to hexadecimal.\etype{f}
+
+\texttt{\string\xintDecToHex \string{\printnumber{2718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003}\string}}\endgraf\noindent\dtt{->\printnumber{\xintDecToHex{2718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003}}}
+
+\subsection{\csh{xintDecToBin}}\label{xintDecToBin}
+
+Converts from decimal to binary.\etype{f}
+
+\texttt{\string\xintDecToBin \string{\printnumber{2718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003}\string}}\endgraf\noindent\dtt{->\printnumber{\xintDecToBin{2718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003}}}
+
+\subsection{\csh{xintHexToDec}}\label{xintHexToDec}
+
+Converts from hexadecimal to decimal.\etype{f}
+
+\texttt{\string\xintHexToDec
+ \string{\printnumber{11A9397C66949A97051F7D0A817914E3E0B17C41B11C48BAEF2B5760BB38D272F46DCE46C6032936BF37DAC918814C63}\string}}\endgraf\noindent
+\dtt{->\printnumber{\xintHexToDec{11A9397C66949A97051F7D0A817914E3E0B17C41B11C48BAEF2B5760BB38D272F46DCE46C6032936BF37DAC918814C63}}}
+
+\subsection{\csh{xintBinToDec}}\label{xintBinToDec}
+
+Converts from binary to decimal.\etype{f}
+
+\texttt{\string\xintBinToDec
+ \string{\printnumber{100011010100100111001011111000110011010010100100110101001011100000101000111110111110100001010100000010111100100010100111000111110000010110001011111000100000110110001000111000100100010111010111011110010101101010111011000001011101100111000110100100111001011110100011011011100111001000110110001100000001100101001001101101011111100110111110110101100100100011000100000010100110001100011}\string}}\endgraf\noindent
+\dtt{->\printnumber{\xintBinToDec{100011010100100111001011111000110011010010100100110101001011100000101000111110111110100001010100000010111100100010100111000111110000010110001011111000100000110110001000111000100100010111010111011110010101101010111011000001011101100111000110100100111001011110100011011011100111001000110110001100000001100101001001101101011111100110111110110101100100100011000100000010100110001100011}}}
+
+\subsection{\csh{xintBinToHex}}\label{xintBinToHex}
+
+Converts from binary to hexadecimal.\etype{f} The input is first zero-filled
+to |4N| binary digits, hence the output will have |N| hexadecimal digits
+(thus, if the input did not have a leading zero, the output will not either).
+
+\texttt{\string\xintBinToHex
+ \string{\printnumber{100011010100100111001011111000110011010010100100110101001011100000101000111110111110100001010100000010111100100010100111000111110000010110001011111000100000110110001000111000100100010111010111011110010101101010111011000001011101100111000110100100111001011110100011011011100111001000110110001100000001100101001001101101011111100110111110110101100100100011000100000010100110001100011}\string}}\endgraf\noindent
+\dtt{->\printnumber{\xintBinToHex{100011010100100111001011111000110011010010100100110101001011100000101000111110111110100001010100000010111100100010100111000111110000010110001011111000100000110110001000111000100100010111010111011110010101101010111011000001011101100111000110100100111001011110100011011011100111001000110110001100000001100101001001101101011111100110111110110101100100100011000100000010100110001100011}}}
+
+\subsection{\csh{xintHexToBin}}\label{xintHexToBin}
+
+Converts from hexadecimal to binary. Up to three leading zeroes of the output
+are trimmed.\etype{f}
+
+\texttt{\string\xintHexToBin
+ \string{\printnumber{11A9397C66949A97051F7D0A817914E3E0B17C41B11C48BAEF2B5760BB38D272F46DCE46C6032936BF37DAC918814C63}\string}}\endgraf\noindent
+\dtt{->\printnumber{\xintHexToBin{11A9397C66949A97051F7D0A817914E3E0B17C41B11C48BAEF2B5760BB38D272F46DCE46C6032936BF37DAC918814C63}}}
+
+\subsection{\csh{xintCHexToBin}}\label{xintCHexToBin}
+
+Converts from hexadecimal to binary.\etype{f} Same as \csbxint{HexToBin}, but
+an input with |N| hexadecimal digits will give an output with exactly |4N|
+binary digits, leading zeroes are not trimmed.
+
+\texttt{\string\xintCHexToBin
+ \string{\printnumber{11A9397C66949A97051F7D0A817914E3E0B17C41B11C48BAEF2B5760BB38D272F46DCE46C6032936BF37DAC918814C63}\string}}\endgraf\noindent
+\dtt{->\printnumber{\xintCHexToBin{11A9397C66949A97051F7D0A817914E3E0B17C41B11C48BAEF2B5760BB38D272F46DCE46C6032936BF37DAC918814C63}}}
+
+This can be combined with \csbxint{BinToHex} for round-trips preserving
+leading zeroes for |4N| binary digits numbers, whereas using
+\csbxint{HexToBin} gives reproducing round-trips only for |4N| binary numbers
+numbers not starting with |0000|.
+\begin{everbatim*}
+This zero-fills to 4N digits the input, hence gives here a leading zero in output:
+\xintBinToHex{0001111}\newline
+Chaining, we end up with 4N-3 digits, as three binary zeroes are trimmed:
+\xintHexToBin{\xintBinToHex{0001111}}\newline
+But this will always reproduce the initial input zero-filled to length 4N:
+\xintCHexToBin{\xintBinToHex{0001111}}\par
+Another example (visible space characters manually inserted):\newline
+$000000001111101001010001\xrightarrow{\text{\string\xintBinToHex}}
+\xintBinToHex{000000001111101001010001}\xrightarrow{\text{\string\xintHexToBin\hphantom{X}}}
+\text{\textvisiblespace\textvisiblespace\textvisiblespace}
+\xintHexToBin{\xintBinToHex{000000001111101001010001}}$\newline
+$000000001111101001010001\xrightarrow{\text{\string\xintBinToHex}}
+\xintBinToHex{000000001111101001010001}\xrightarrow{\text{\string\xintCHexToBin}}
+\xintCHexToBin{\xintBinToHex{000000001111101001010001}}$
+\par
+\end{everbatim*}
+\clearpage
+\let\xintbinhexnameUp\undefined
+\csname xintgcdnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintgcdname package}
+\RaisedLabel{sec:gcd}
+
+\localtableofcontents
+
+This package was included in the original release |1.0| (|2013/03/28|) of the
+\xintname bundle.
+
+Since release |1.09a| the macros filter their inputs through the \csbxint{Num}
+macro, so one can use count registers, or fractions as long as they reduce to
+integers.
+
+Since release |1.1|, the two ``|typeset|'' macros require the explicit
+loading by the user of package \xinttoolsname.
+
+At |1.3d| macros \csbxint{iiGCD} and \csbxint{iiLCM} are copied over to
+\xintname, hence \func{gcd} and \func{lcm} functions in \csbxint{iiexpr} are
+available simply from loading \xintexprname, \xintgcdname is not
+needed.\NewWith{1.3d}
+
+
+%% \clearpage
+
+\subsection{\csh{xintiiGCD}}\label{xintiiGCD}
+
+|\xintiiGCD|\n\m\etype{ff} computes the greatest common divisor. It is
+positive, except when both |N| and |M| vanish, in which case the macro returns
+zero.
+%
+\leftedline{\csa{xintiiGCD}|{10000}{1113}|\dtt{=\xintiiGCD{10000}{1113}}}
+%
+\leftedline{|\xintiiGCD{123456789012345}{9876543210321}=|\dtt
+ {\xintiiGCD{123456789012345}{9876543210321}}}
+
+With release |1.3d|, this macro is also available from loading
+\xintname\NewWith{1.3d}, hence also with \xintexprname, as it used by the
+\func{gcd} function in \csbxint{iiexpr}, hence removes a dependency of
+\xintexprname on \xintgcdname.
+
+\subsection{\csh{xintGCD}}\label{xintGCD}
+
+\csa{xintGCD} uses \csbxint{Num} overhead to make its arguments into strict
+integers\etype{\Numf\Numf} first. With \xintfracname loaded this conversion
+means truncation to integers.
+
+\subsection{\csh{xintGCDof}}\label{xintGCDof}
+
+\csa{xintGCDof}|{{a}{b}{c}...}|\etype{f{$\to$}{\lowast\Numf}} computes the greatest common divisor of all
+integers |a|, |b|, \dots{} The list argument
+may be a macro, it is \fexpan ded first and must contain at least one item.
+
+\subsection{\csh{xintiiLCM}}\label{xintiiLCM}
+
+|\xintiiLCM|\n\m\etype{ff} computes the least common multiple of integers. It
+is positive, except if one |N| or |M| vanishes, in which case the macro
+returns zero.
+%
+\leftedline{\csa{xintiiLCM}|{10000}{1113}|\dtt{=\xintiiLCM{10000}{1113}}}
+%
+\leftedline{|\xintiiLCM{123456789012345}{9876543210321}=|\dtt
+ {\xintiiLCM{123456789012345}{9876543210321}}}
+
+With release |1.3d|, this macro is also available from loading
+\xintname\NewWith{1.3d}, hence also with \xintexprname, as it used by the
+\func{lcm} function in \csbxint{iiexpr}, hence removes a dependency of
+\xintexprname on \xintgcdname.
+
+\subsection{\csh{xintLCM}}\label{xintLCM}
+
+\csa{xintLCM} uses \csbxint{Num} overhead to make its arguments into strict
+integers\etype{\Numf\Numf} first. With \xintfracname loaded this conversion
+means truncation to integers.
+
+\subsection{\csh{xintLCMof}}\label{xintLCMof}
+
+\csa{xintLCMof}|{{a}{b}{c}...}|\etype{f{$\to$}{\lowast\Numf}} computes the least
+common multiple of all integers |a|, |b|, \dots{} The list argument may be a
+macro, it is \fexpan ded first and must contain at least one item.
+
+\subsection{\csh{xintBezout}}\label{xintBezout}
+
+|\xintBezout|\n\m\etype{\Numf\Numf} returns three numbers |U|, |V|,
+|D| within braces where |D| is the (non-negative) GCD, and \dtt{UN + VM = D}.
+\begin{everbatim*}
+\oodef\X{\xintBezout {10000}{1113}}\meaning\X\par
+\xintAssign {\xintBezout {10000}{1113}}\to\U\V\D
+U: \meaning\U, V: \meaning\V, D: \meaning\D\par
+AU+BV: \xinttheiiexpr 10000*\U+1113*\V\relax\par
+\noindent\oodef\X{\xintBezout {123456789012345}{9876543210321}}\meaning\X\par
+\xintAssign \X\to\U\V\D
+U: \meaning\U, V: \meaning\V, D: \meaning\D\par
+AU+BV: \xinttheiiexpr 123456789012345*\U+9876543210321*\V\relax
+\end{everbatim*}
+
+\subsection{\csh{xintEuclideAlgorithm}}\label{xintEuclideAlgorithm}
+
+|\xintEuclideAlgorithm|\n\m\etype{\Numf\Numf} applies the Euclide algorithm
+and keeps a copy of all quotients and remainders.
+\begin{everbatim*}
+\edef\X{\xintEuclideAlgorithm {10000}{1113}}\meaning\X
+\end{everbatim*}
+
+The first item is the number of steps, the second is |N|, the
+third is the GCD, the fourth is |M| then the first quotient and
+remainder, the second quotient and remainder, \dots until the
+final quotient and last (zero) remainder.
+
+\subsection{\csh{xintBezoutAlgorithm}}\label{xintBezoutAlgorithm}
+
+|\xintBezoutAlgorithm|\n\m\etype{\Numf\Numf} applies the Euclide algorithm
+and keeps a copy of all quotients and remainders. Furthermore it computes the
+entries of the successive products of the 2 by 2 matrices
+$\left(\vcenter{\halign {\,#&\,#\cr q & 1 \cr 1 & 0 \cr}}\right)$ formed from
+the quotients arising in the algorithm.
+\begin{everbatim*}
+\edef\X{\xintBezoutAlgorithm {10000}{1113}}\printnumber{\meaning\X}
+\end{everbatim*}
+
+The first item is the number of steps, the second is |N|, then
+|0|, |1|, the GCD, |M|, |1|, |0|, the first quotient, the first
+remainder, the top left entry of the first matrix, the bottom left
+entry, and then these four things at each step until the end.
+
+\subsection{\csh{xintTypesetEuclideAlgorithm}}\label{xintTypesetEuclideAlgorithm}
+
+This macro is just an example of how to organize the data returned by
+\csa{xintEuclideAlgorithm}.\ntype{\Numf\Numf} Copy the source code to a new
+macro and modify it to what is needed.
+
+\emph{Usage of this macro requires the user to load} \xinttoolsname.\IMPORTANT
+
+\leftedline{|\xintTypesetEuclideAlgorithm {123456789012345}{9876543210321}|}
+\xintTypesetEuclideAlgorithm {123456789012345}{9876543210321}
+
+\subsection{\csh{xintTypesetBezoutAlgorithm}}%
+\label{xintTypesetBezoutAlgorithm}
+
+This macro is just an example of how to organize the data returned by
+\csa{xintBezoutAlgorithm}.\ntype{\Numf\Numf} Copy the source code to a new
+macro and modify it to what is needed.
+
+\emph{Usage of this macro requires the user to load} \xinttoolsname.\IMPORTANT
+
+\leftedline{|\xintTypesetBezoutAlgorithm {10000}{1113}|}
+\xintTypesetBezoutAlgorithm {10000}{1113}
+
+\clearpage
+\let\xintgcdnameUp\undefined
+\csname xintseriesnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintseriesname package}
+\RaisedLabel{sec:series}
+
+\localtableofcontents
+
+This package was first released with version |1.03| (|2013/04/14|) of the
+\xintname bundle.
+
+The \Ff{} expansion type of various macro arguments is only a \Numf{} if only
+\xintname but not \xintfracname is loaded. The macro \csbxint{iSeries} is
+special and expects summing big integers obeying the strict format, even if
+\xintfracname is loaded.
+
+The arguments serving as indices are of the \numx{} expansion type.
+
+In some cases one or two of the macro arguments are only expanded at a later
+stage not immediately.
+
+\begin{framed}
+ Since |1.3|, \csbxint{Add} and \csbxint{Sub} use systematically the least
+ common multiple of the denominators. Some of the comments in this chapter
+ refer to the earlier situation where often the denominators were simply
+ multiplied together. \emph{They have yet to be updated to reflect the new
+ situation brought by the |1.3| release.} Some of these comments may now be
+ off-synced from the actual computation results and thus may be wrong.
+\end{framed}
+%% \clearpage
+
+\subsection{\csh{xintSeries}}\label{xintSeries}
+
+\csa{xintSeries}|{A}{B}{\coeff}|\etype{\numx\numx\Ff} computes
+$\sum_{\text{|n=A|}}^{\text{|n=B|}}$|\coeff{n}|. The initial and final indices
+must obey the |\numexpr| constraint of expanding to numbers at most |2^31-1|.
+The |\coeff| macro must be a one-parameter \fexpan dable macro, taking on
+input an explicit number |n| and producing some number or fraction |\coeff{n}|;
+it is expanded at the time it is
+needed.%
+%
+
+\begin{everbatim*}
+\def\coeff #1{\xintiiMON{#1}/#1.5} % (-1)^n/(n+1/2)
+\fdef\w {\xintSeries {0}{50}{\coeff}} % we want to re-use it
+\fdef\z {\xintJrr {\w}[0]} % the [0] for a microsecond gain.
+% \xintJrr preferred to \xintIrr: a big common factor is suspected.
+% But numbers much bigger would be needed to show the greater efficiency.
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} = \xintFrac\z \]
+\end{everbatim*}
+
+The definition of |\coeff| as |\xintiiMON{#1}/#1.5| is quite suboptimal. It
+allows |#1| to be a big integer, but anyhow only small integers are accepted
+as initial and final indices (they are of the \numx{} type). Second, when the
+\xintfracname parser sees the |#1.5| it will remove the dot hence create a
+denominator with one digit more. For example |1/3.5| turns internally into
+|10/35| whereas it would be more efficient to have |2/7|. For info here is the
+non-reduced |\w|:
+\[\xintFrac\w\]
+It would have been bigger still in releases earlier than |1.1|: now, the
+\xintfracname \csbxint{Add} routine does not multiply blindly denominators
+anymore, it checks if one is a multiple of the other. However it does not
+practice systematic reduction to lowest terms.
+
+A more efficient way to code |\coeff| is illustrated next.
+\begin{everbatim*}
+\def\coeff #1{\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}%
+% The [0] in \coeff is a tiny optimization: in its presence the \xintfracname parser
+% sees something which is already in internal format.
+\fdef\w {\xintSeries {0}{50}{\coeff}}
+\[\sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12}=\xintFrac\w\]
+\end{everbatim*}
+The reduced form |\z| as displayed above only differs from this one by a
+factor of \dtt{\xintNum {\xintDenominator\w/\xintDenominator\z}}.
+
+\setlength{\columnsep}{0pt}
+\everb|@
+\def\coeffleibnitz #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]}
+\cnta 1
+\loop
+% in this loop we recompute from scratch each partial sum!
+% we can afford that, as \xintSeries is fast enough.
+\noindent\hbox to 2em{\hfil\texttt{\the\cnta.} }%
+ \xintTrunc {12}{\xintSeries {1}{\cnta}{\coeffleibnitz}}\dots
+\endgraf
+\ifnum\cnta < 30 \advance\cnta 1 \repeat
+|
+
+\begin{multicols}{3}
+ \def\coeffleibnitz #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]} \cnta 1
+ \loop
+ \noindent\hbox to 2em{\hfil\dtt{\the\cnta.} }%
+ \xintTrunc {12}{\xintSeries {1}{\cnta}{\coeffleibnitz}}\dots
+ \endgraf
+ \ifnum\cnta < 30 \advance\cnta 1 \repeat
+\end{multicols}
+
+\subsection{\csh{xintiSeries}}\label{xintiSeries}
+
+\def\coeff #1{\xintiTrunc {40}
+ {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}%
+
+\csa{xintiSeries}|{A}{B}{\coeff}|\etype{\numx\numx f} computes
+ $\sum_{\text{|n=A|}}^{\text{|n=B|}}$|\coeff{n}| where |\coeff{n}|
+ must \fexpan d to a (possibly long) integer in the strict format.
+\everb|@
+\def\coeff #1{\xintiTrunc {40}{\xintiiMON{#1}/#1.5}}%
+% better:
+\def\coeff #1{\xintiTrunc {40}
+ {\the\numexpr 2*\xintiiMON{#1}\relax/\the\numexpr 2*#1+1\relax [0]}}%
+% better still:
+\def\coeff #1{\xintiTrunc {40}
+ {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}%
+% (-1)^n/(n+1/2) times 10^40, truncated to an integer.
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} \approx
+ \xintTrunc {40}{\xintiSeries {0}{50}{\coeff}[-40]}\dots\]
+|
+
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} \approx \xintTrunc
+{40}{\xintiSeries {0}{50}{\coeff}[-40]}\]
+
+We should have cut out at
+least the last two digits: truncating errors originating with the first
+coefficients of the sum will never go away, and each truncation
+introduces an uncertainty in the last digit, so as we have 40 terms, we
+should trash the last two digits, or at least round at 38 digits. It is
+interesting to compare with the computation where rounding rather than
+truncation is used, and with the decimal
+expansion of the exactly computed partial sum of the series:
+\everb|@
+\def\coeff #1{\xintiRound {40} % rounding at 40
+ {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}%
+% (-1)^n/(n+1/2) times 10^40, rounded to an integer.
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} \approx
+ \xintTrunc {40}{\xintiSeries {0}{50}{\coeff}[-40]}\]
+\def\exactcoeff #1%
+ {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}%
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12}
+ = \xintTrunc {50}{\xintSeries {0}{50}{\exactcoeff}}\dots\]
+|
+
+\def\coeff #1{\xintiRound {40}
+ {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}%
+% (-1)^n/(n+1/2) times 10^40, rounded to an integer.
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} \approx
+ \xintTrunc {40}{\xintiSeries {0}{50}{\coeff}[-40]}\]
+\def\exactcoeff #1%
+ {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}%
+\[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12}
+ = \xintTrunc {50}{\xintSeries {0}{50}{\exactcoeff}}\dots\]
+This shows indeed that our sum of truncated terms
+estimated wrongly the 39th and 40th digits of the exact result%
+%
+\footnote{as the series is alternating, we can roughly expect an error
+ of $\sqrt{40}$ and the last two digits are off by 4 units, which is
+ not contradictory to our expectations.}
+%
+and that the sum of rounded terms fared a bit better.
+
+\subsection{\csh{xintRationalSeries}}\label{xintRationalSeries}
+
+
+\noindent \csa{xintRationalSeries}|{A}{B}{f}{\ratio}|\etype{\numx\numx\Ff\Ff}
+evaluates $\sum_{\text{|n=A|}}^{\text{|n=B|}}$|F(n)|, where |F(n)| is specified
+indirectly via the data of |f=F(A)| and the one-parameter macro |\ratio| which
+must be such that |\macro{n}| expands to |F(n)/F(n-1)|. The name indicates that
+\csa{xintRationalSeries} was designed to be useful in the cases where
+|F(n)/F(n-1)| is a rational function of |n| but it may be anything expanding to
+a fraction. The macro |\ratio| must be an expandable-only compatible macro and
+expand to its value after iterated full expansion of its first item. |A| and
+|B| are fed to a |\numexpr| hence may be count registers or arithmetic
+expressions built with such; they must obey the \TeX{} bound. The initial term
+|f| may be a macro |\f|, it will be expanded to its value representing |F(A)|.
+
+\begin{everbatim*}
+\def\ratio #1{2/#1[0]}% 2/n, to compute exp(2)
+\cnta 0 % previously declared count
+\begin{quote}
+\loop \fdef\z {\xintRationalSeries {0}{\cnta}{1}{\ratio }}%
+\noindent$\sum_{n=0}^{\the\cnta} \frac{2^n}{n!}=
+ \xintTrunc{12}\z\dots=
+ \xintFrac\z=\xintFrac{\xintIrr\z}$\vtop to 5pt{}\par
+\ifnum\cnta<20 \advance\cnta 1 \repeat
+\end{quote}
+\end{everbatim*}
+
+\begin{everbatim*}
+\def\ratio #1{-1/#1[0]}% -1/n, comes from the series of exp(-1)
+\cnta 0 % previously declared count
+\begin{quote}
+\loop
+\fdef\z {\xintRationalSeries {0}{\cnta}{1}{\ratio }}%
+\noindent$\sum_{n=0}^{\the\cnta} \frac{(-1)^n}{n!}=
+ \xintTrunc{20}\z\dots=\xintFrac{\z}=\xintFrac{\xintIrr\z}$%
+ \vtop to 5pt{}\par
+\ifnum\cnta<20 \advance\cnta 1 \repeat
+\end{quote}
+\end{everbatim*}
+
+
+ \def\ratioexp #1#2{\xintDiv{#1}{#2}}% #1/#2
+
+\medskip We can incorporate an indeterminate if we define |\ratio| to be
+a macro with two parameters: |\def\ratioexp
+ #1#2{\xintDiv{#1}{#2}}|\texttt{\%}| x/n: x=#1, n=#2|.
+Then, if |\x| expands to some fraction |x|, the
+macro %
+%
+\leftedline{|\xintRationalSeries {0}{b}{1}{\ratioexp{\x}}|}
+will compute $\sum_{n=0}^{n=b} x^n/n!$:\par
+\begin{everbatim*}
+\cnta 0
+\def\ratioexp #1#2{\xintDiv{#1}{#2}}% #1/#2
+\loop
+\noindent
+$\sum_{n=0}^{\the\cnta} (.57)^n/n! = \xintTrunc {50}
+ {\xintRationalSeries {0}{\cnta}{1}{\ratioexp{.57}}}\dots$
+ \vtop to 5pt {}\endgraf
+\ifnum\cnta<50 \advance\cnta 10 \repeat
+\end{everbatim*}
+
+Observe that in this last example the |x| was directly inserted; if it
+had been a more complicated explicit fraction it would have been
+worthwile to use |\ratioexp\x| with |\x| defined to expand to its value.
+In the further situation where this fraction |x| is not explicit but
+itself defined via a complicated, and time-costly, formula, it should be
+noted that \csa{xintRationalSeries} will do again the evaluation of |\x|
+for each term of the partial sum. The easiest is thus when |x| can be
+defined as an |\edef|. If however, you are in an expandable-only context
+and cannot store in a macro like |\x| the value to be used, a variant of
+\csa{xintRationalSeries} is needed which will first evaluate this |\x| and then
+use this result without recomputing it. This is \csbxint{RationalSeriesX},
+documented next.
+
+Here is a slightly more complicated evaluation:
+\begin{everbatim*}
+\cnta 1
+\begin{multicols}{2}
+\loop \fdef\z {\xintRationalSeries
+ {\cnta}
+ {2*\cnta-1}
+ {\xintiiPow {\the\cnta}{\cnta}/\xintiiFac{\cnta}}
+ {\ratioexp{\the\cnta}}}%
+\fdef\w {\xintRationalSeries {0}{2*\cnta-1}{1}{\ratioexp{\the\cnta}}}%
+\noindent
+$\sum_{n=\the\cnta}^{\the\numexpr 2*\cnta-1\relax} \frac{\the\cnta^n}{n!}/%
+ \sum_{n=0}^{\the\numexpr 2*\cnta-1\relax} \frac{\the\cnta^n}{n!} =
+ \xintTrunc{8}{\xintDiv\z\w}\dots$ \vtop to 5pt{}\endgraf
+\ifnum\cnta<20 \advance\cnta 1 \repeat
+\end{multicols}
+\end{everbatim*}
+
+
+\subsection{\csh{xintRationalSeriesX}}\label{xintRationalSeriesX}
+
+
+\noindent\csa{xintRationalSeriesX}|{A}{B}{\first}{\ratio}{\g}|%
+\etype{\numx\numx\Ff\Ff f} is a parametrized version of \csa{xintRationalSeries}
+where |\first| is now a one-parameter macro such that |\first{\g}| gives the
+initial term and |\ratio| is a two-parameter macro such that |\ratio{n}{\g}|
+represents the ratio of one term to the previous one. The parameter |\g| is
+evaluated only once at the beginning of the computation, and can thus itself be
+the yet unevaluated result of a previous computation.
+
+Let |\ratio| be such a two-parameter macro; note the subtle differences
+between%
+%
+\leftedline{|\xintRationalSeries {A}{B}{\first}{\ratio{\g}}|}
+%
+\leftedline{and |\xintRationalSeriesX {A}{B}{\first}{\ratio}{\g}|.} First the
+location of braces differ... then, in the former case |\first| is a
+\emph{no-parameter} macro expanding to a fractional number, and in the latter,
+it is a
+\emph{one-parameter} macro which will use |\g|. Furthermore the |X| variant
+will expand |\g| at the very beginning whereas the former non-|X| former variant
+will evaluate it each time it needs it (which is bad if this
+evaluation is time-costly, but good if |\g| is a big explicit fraction
+encapsulated in a macro).
+
+The example will use the macro \csbxint{PowerSeries} which computes
+efficiently exact partial sums of power series, and is discussed in the
+next section.
+\begin{everbatim*}
+\def\firstterm #1{1[0]}% first term of the exponential series
+% although it is the constant 1, here it must be defined as a
+% one-parameter macro. Next comes the ratio function for exp:
+\def\ratioexp #1#2{\xintDiv {#1}{#2}}% x/n
+% These are the (-1)^{n-1}/n of the log(1+h) series:
+\def\coefflog #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]}%
+% Let L(h) be the first 10 terms of the log(1+h) series and
+% let E(t) be the first 10 terms of the exp(t) series.
+% The following computes E(L(a/10)) for a=1,...,12.
+\begin{multicols}{3}\raggedcolumns
+\cnta 0
+\loop
+\noindent\xintTrunc {18}{%
+ \xintRationalSeriesX {0}{9}{\firstterm}{\ratioexp}
+ {\xintPowerSeries{1}{10}{\coefflog}{\the\cnta[-1]}}}\dots
+\endgraf
+\ifnum\cnta < 12 \advance \cnta 1 \repeat
+\end{multicols}
+\end{everbatim*}
+
+
+These completely exact operations rapidly create numbers with many digits. Let
+us print in full the raw fractions created by the operation illustrated above:
+
+\fdef\z{\xintRationalSeriesX {0}{9}{\firstterm}
+{\ratioexp}{\xintPowerSeries{1}{10}{\coefflog}{1[-1]}}}
+
+|E(L(1[-1]))=|\dtt{\printnumber{\z}} (length of numerator:
+\xintLen {\xintNumerator \z})
+
+\fdef\z{\xintRationalSeriesX {0}{9}{\firstterm}
+{\ratioexp}{\xintPowerSeries{1}{10}{\coefflog}{12[-2]}}}
+
+|E(L(12[-2]))=|\dtt{\printnumber{\z}} (length of numerator:
+\xintLen {\xintNumerator \z})
+
+\fdef\z{\xintRationalSeriesX {0}{9}{\firstterm}
+{\ratioexp}{\xintPowerSeries{1}{10}{\coefflog}{123[-3]}}}
+
+|E(L(123[-3]))=|\dtt{\printnumber{\z}} (length of numerator:
+\xintLen {\xintNumerator \z})
+
+We see that the denominators here remain the same, as our input only had various
+powers of ten as denominators, and \xintfracname efficiently assemble (some
+only, as we can see) powers of ten. Notice that 1 more digit in an input
+denominator seems to mean 90 more in the raw output. We can check that with some
+other test cases:
+
+\fdef\z{\xintRationalSeriesX {0}{9}{\firstterm}
+{\ratioexp}{\xintPowerSeries{1}{10}{\coefflog}{1/7}}}
+
+|E(L(1/7))=|\dtt{\printnumber{\z}} (length of numerator:
+\xintLen {\xintNumerator \z}; length of denominator:
+\xintLen {\xintDenominator \z})
+
+\fdef\z{\xintRationalSeriesX {0}{9}{\firstterm}
+{\ratioexp}{\xintPowerSeries{1}{10}{\coefflog}{1/71}}}
+
+|E(L(1/71))=|\dtt{\printnumber{\z}} (length of numerator:
+\xintLen {\xintNumerator \z}; length of denominator:
+\xintLen {\xintDenominator \z})
+
+\fdef\z{\xintRationalSeriesX {0}{9}{\firstterm}
+{\ratioexp}{\xintPowerSeries{1}{10}{\coefflog}{1/712}}}
+
+|E(L(1/712))=|\dtt{\printnumber{\z}} (length of numerator:
+\xintLen {\xintNumerator \z}; length of denominator:
+\xintLen {\xintDenominator \z})
+
+
+Thus
+decimal numbers such as |0.123| (equivalently
+|123[-3]|) give less computing intensive tasks than fractions such as |1/712|:
+in the case of decimal numbers the (raw) denominators originate in the
+coefficients of the series themselves, powers of ten of the input within
+brackets being treated separately. And even then the
+numerators will grow with the size of the input in a sort of linear way, the
+coefficient being given by the order of series: here 10 from the log and 9 from
+the exp, so 90. One more digit in the input means 90 more digits in the
+numerator of the output: obviously we can not go on composing such partial sums
+of series and hope that \xintname will joyfully do all at the speed of light!
+
+Hence, truncating the output (or better, rounding) is the only way to go if one
+needs a general calculus of special functions. This is why the package
+\xintseriesname provides, besides \csbxint{Series}, \csbxint{RationalSeries}, or
+\csbxint{PowerSeries} which compute \emph{exact} sums,
+\csbxint{FxPtPowerSeries} for fixed-point computations and a (tentative naive)
+\csbxint{FloatPowerSeries}.
+
+\subsection{\csh{xintPowerSeries}}\label{xintPowerSeries}
+
+\csa{xintPowerSeries}|{A}{B}{\coeff}{f}|\etype{\numx\numx\Ff\Ff}
+evaluates the sum
+$\sum_{\text{|n=A|}}^{\text{|n=B|}}$|\coeff{n}|${}\cdot |f|^{\text{|n|}}$. The
+initial and final indices are given to a |\numexpr| expression. The |\coeff|
+macro (which, as argument to \csa{xintPowerSeries} is expanded only at the time
+|\coeff{n}| is needed) should be defined as a one-parameter expandable macro,
+its input will be an explicit number.
+
+The |f| can be either a fraction directly input or a macro |\f| expanding to
+such a fraction. It is actually more efficient to encapsulate an explicit
+fraction |f| in such a macro, if it has big numerators and denominators (`big'
+means hundreds of digits) as it will then take less space in the processing
+until being (repeatedly) used.
+
+This macro computes the \emph{exact} result (one can use it also for
+polynomial evaluation), using a Horner scheme which helps avoiding a
+denominator build-up (this problem however, even if using a naive additive
+approach, is much less acute since release |1.1| and its new policy regarding
+\csbxint{Add}).
+
+\begin{everbatim*}
+\def\geom #1{1[0]} % the geometric series
+\def\f {5/17[0]}
+\[ \sum_{n=0}^{n=20} \Bigl(\frac 5{17}\Bigr)^n
+ =\xintFrac{\xintIrr{\xintPowerSeries {0}{20}{\geom}{\f}}}
+ =\xintFrac{\xinttheexpr (17^21-5^21)/12/17^20\relax}\]
+\end{everbatim*}
+
+\begin{everbatim*}
+\def\coefflog #1{1/#1[0]}% 1/n
+\def\f {1/2[0]}%
+\[ \log 2 \approx \sum_{n=1}^{20} \frac1{n\cdot 2^n}
+ = \xintFrac {\xintIrr {\xintPowerSeries {1}{20}{\coefflog}{\f}}}\]
+\[ \log 2 \approx \sum_{n=1}^{50} \frac1{n\cdot 2^n}
+ = \xintFrac {\xintIrr {\xintPowerSeries {1}{50}{\coefflog}{\f}}}\]
+\end{everbatim*}
+
+
+\begin{everbatim*}
+\setlength{\columnsep}{0pt}
+\begin{multicols}{3}
+\cnta 1 % previously declared count
+\loop % in this loop we recompute from scratch each partial sum!
+% we can afford that, as \xintPowerSeries is fast enough.
+\noindent\hbox to 2em{\hfil\texttt{\the\cnta.} }%
+ \xintTrunc {12}
+ {\xintPowerSeries {1}{\cnta}{\coefflog}{\f}}\dots
+\endgraf
+\ifnum \cnta < 30 \advance\cnta 1 \repeat
+\end{multicols}
+\end{everbatim*}
+
+
+\begin{everbatim*}
+\def\coeffarctg #1{1/\the\numexpr\ifodd #1 -2*#1-1\else2*#1+1\fi\relax }%
+% the above gives (-1)^n/(2n+1). The sign being in the denominator,
+% **** no [0] should be added ****,
+% else nothing is guaranteed to work (even if it could by sheer luck)
+% Notice in passing this aspect of \numexpr:
+% **** \numexpr -(1)\relax is ilegal !!! ****
+\def\f {1/25[0]}% 1/5^2
+\[\mathrm{Arctg}(\frac15)\approx \frac15\sum_{n=0}^{15} \frac{(-1)^n}{(2n+1)25^n}
+= \xintFrac{\xintIrr {\xintDiv {\xintPowerSeries {0}{15}{\coeffarctg}{\f}}{5}}}\]
+\end{everbatim*}
+
+
+\subsection{\csh{xintPowerSeriesX}}\label{xintPowerSeriesX}
+
+%{\small\hspace*{\parindent}New with release |1.04|.\par}
+
+\noindent This is the same as \csbxint{PowerSeries}\ntype{\numx\numx\Ff\Ff}
+apart
+from the fact that the last parameter |f| is expanded once and for all before
+being then used repeatedly. If the |f| parameter is to be an explicit big
+fraction with many (dozens) digits, rather than using it directly it is slightly
+better to have some macro |\g| defined to expand to the explicit fraction and
+then use \csbxint{PowerSeries} with |\g|; but if |f| has not yet been evaluated
+and will be the output of a complicated expansion of some |\f|, and if, due to
+an expanding only context, doing |\edef\g{\f}| is no option, then
+\csa{xintPowerSeriesX} should be used with |\f| as last parameter.
+%
+\begin{everbatim*}
+\def\ratioexp #1#2{\xintDiv {#1}{#2}}% x/n
+% These are the (-1)^{n-1}/n of the log(1+h) series:
+\def\coefflog #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]}%
+% Let L(h) be the first 10 terms of the log(1+h) series and
+% let E(t) be the first 10 terms of the exp(t) series.
+% The following computes L(E(a/10)-1) for a=1,..., 12.
+\begin{multicols}{3}\raggedcolumns
+\cnta 1
+\loop
+\noindent\xintTrunc {18}{%
+ \xintPowerSeriesX {1}{10}{\coefflog}
+ {\xintSub
+ {\xintRationalSeries {0}{9}{1[0]}{\ratioexp{\the\cnta[-1]}}}
+ {1}}}\dots
+\endgraf
+\ifnum\cnta < 12 \advance \cnta 1 \repeat
+\end{multicols}
+\end{everbatim*}
+
+
+\subsection{\csh{xintFxPtPowerSeries}}\label{xintFxPtPowerSeries}
+
+\csa{xintFxPtPowerSeries}|{A}{B}{\coeff}{f}{D}|\etype{\numx\numx}
+computes
+$\sum_{\text{|n=A|}}^{\text{|n=B|}}$|\coeff{n}|${}\cdot |f|^{\,\text{|n|}}$ with each
+ term of the series truncated to |D| digits\etype{\Ff\Ff\numx}
+ after the decimal point. As
+ usual, |A| and |B| are completely expanded through their inclusion in a
+ |\numexpr| expression. Regarding |D| it will be similarly be expanded each
+ time it is used inside an \csa{xintTrunc}. The one-parameter macro |\coeff|
+ is similarly expanded at the time it is used inside the
+ computations. Idem for |f|. If |f| itself is some complicated macro it is
+ thus better to use the variant \csbxint{FxPtPowerSeriesX} which expands it
+ first and then uses the result of that expansion.
+
+The current (|1.04|) implementation is: the first power |f^A| is
+computed exactly, then \emph{truncated}. Then each successive power is
+obtained from the previous one by multiplication by the exact value of
+|f|, and truncated. And |\coeff{n}|\raisebox{.5ex}{|.|}|f^n| is obtained
+from that by multiplying by |\coeff{n}| (untruncated) and then
+truncating. Finally the sum is computed exactly. Apart from that
+\csa{xintFxPtPowerSeries} (where |FxPt| means `fixed-point') is like
+\csa{xintPowerSeries}.
+
+There should be a variant for things of the type $\sum c_n \frac {f^n}{n!}$ to
+avoid having to compute the factorial from scratch at each coefficient, the same
+way \csa{xintFxPtPowerSeries} does not compute |f^n| from scratch at each |n|.
+Perhaps in the next package release.
+
+\def\coeffexp #1{1/\xintiiFac {#1}[0]}% [0] for faster parsing
+\def\f {-1/2[0]}%
+\newcount\cnta
+
+\setlength{\multicolsep}{0pt}
+
+\begin{multicols}{3}[%
+\centeredline{$e^{-\frac12}\approx{}$}]%
+\cnta 0
+\noindent\loop
+$\xintFxPtPowerSeries {0}{\cnta}{\coeffexp}{\f}{20}$\\
+\ifnum\cnta<19
+\advance\cnta 1
+\repeat\par
+\end{multicols}
+\everb|@
+\def\coeffexp #1{1/\xintiiFac {#1}[0]}% 1/n!
+\def\f {-1/2[0]}% [0] for faster input parsing
+\cnta 0 % previously declared \count register
+\noindent\loop
+$\xintFxPtPowerSeries {0}{\cnta}{\coeffexp}{\f}{20}$\\
+\ifnum\cnta<19 \advance\cnta 1 \repeat\par
+|
+
+
+%
+\leftedline{|\xintFxPtPowerSeries {0}{19}{\coeffexp}{\f}{25}=|
+\dtt{\xintFxPtPowerSeries {0}{19}{\coeffexp}{\f}{25}}}
+\fdef\z{\xintIrr {\xintPowerSeries {0}{19}{\coeffexp}{\f}}}
+%
+
+\texttt{\hyphenchar\font45 }%
+It is no difficulty for \xintfracname to compute exactly, with the help
+of \csa{xintPowerSeries}, the nineteenth partial sum, and to then give
+(the start of) its exact decimal expansion:
+%
+\leftedline{|\xintPowerSeries {0}{19}{\coeffexp}{\f}| ${}=
+ \displaystyle\xintFrac{\z}$%
+ \vphantom{\vrule height 20pt depth 12pt}}%
+%
+\leftedline{${}=\xintTrunc {30}{\z}\dots$} Thus, one should always
+estimate a priori how many ending digits are not reliable: if there are
+|N| terms and |N| has |k| digits, then digits up to but excluding the
+last |k| may usually be trusted. If we are optimistic and the series is
+alternating we may even replace |N| with $\sqrt{|N|}$ to get the number |k|
+of digits possibly of dubious significance.
+
+\subsection{\csh{xintFxPtPowerSeriesX}}\label{xintFxPtPowerSeriesX}
+
+
+\noindent\csa{xintFxPtPowerSeriesX}|{A}{B}{\coeff}{\f}{D}|%
+\ntype{\numx\numx}
+computes, exactly as
+\csa{xintFxPtPowerSeries}, the sum of
+|\coeff{n}|\raisebox{.5ex}{|.|}|\f^n|\etype{\Ff\Ff\numx} from |n=A| to |n=B| with each term
+of the series being \emph{truncated} to |D| digits after the decimal
+point. The sole difference is that |\f| is first expanded and it
+is the result of this which is used in the computations.
+
+
+Let us illustrate this on the numerical exploration of the identity
+%
+\leftedline{|log(1+x) = -log(1/(1+x))|}
+%
+Let |L(h)=log(1+h)|, and |D(h)=L(h)+L(-h/(1+h))|. Theoretically thus,
+|D(h)=0| but we shall evaluate |L(h)| and |-h/(1+h)| keeping only 10
+terms of their respective series. We will assume $|h|<0.5$. With only
+ten terms kept in the power series we do not have quite 3 digits
+precision as $2^{10}=1024$. So it wouldn't make sense to evaluate things
+more precisely than, say circa 5 digits after the decimal points.
+\begin{everbatim*}
+\cnta 0
+\def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}% (-1)^{n-1}/n
+\def\coeffalt #1{\the\numexpr\ifodd#1 -1\else1\fi\relax [0]}% (-1)^n
+\begin{multicols}2
+\loop
+\noindent \hbox to 2.5cm {\hss\texttt{D(\the\cnta/100): }}%
+\xintAdd {\xintFxPtPowerSeriesX {1}{10}{\coefflog}{\the\cnta [-2]}{5}}
+ {\xintFxPtPowerSeriesX {1}{10}{\coefflog}
+ {\xintFxPtPowerSeriesX {1}{10}{\coeffalt}{\the\cnta [-2]}{5}}
+ {5}}\endgraf
+\ifnum\cnta < 49 \advance\cnta 7 \repeat
+\end{multicols}
+\end{everbatim*}
+
+
+Let's say we evaluate functions on |[-1/2,+1/2]| with values more or less also
+in |[-1/2,+1/2]| and we want to keep 4 digits of precision. So, roughly we need
+at least 14 terms in series like the geometric or log series. Let's make this
+15. Then it doesn't make sense to compute intermediate summands with more than 6
+digits precision. So we compute with 6 digits
+precision but return only 4 digits (rounded) after the decimal point.
+This result with 4 post-decimal points precision is then used as input
+to the next evaluation.
+\begin{everbatim*}
+\begin{multicols}2
+\loop
+\noindent \hbox to 2.5cm {\hss\texttt{D(\the\cnta/100): }}%
+\dtt{\xintRound{4}
+ {\xintAdd {\xintFxPtPowerSeriesX {1}{15}{\coefflog}{\the\cnta [-2]}{6}}
+ {\xintFxPtPowerSeriesX {1}{15}{\coefflog}
+ {\xintRound {4}{\xintFxPtPowerSeriesX {1}{15}{\coeffalt}
+ {\the\cnta [-2]}{6}}}
+ {6}}%
+ }}\endgraf
+\ifnum\cnta < 49 \advance\cnta 7 \repeat
+\end{multicols}
+\end{everbatim*}
+
+Not bad... I have cheated a bit: the `four-digits precise' numeric
+evaluations were left unrounded in the final addition. However the inner
+rounding to four digits worked fine and made the next step faster than
+it would have been with longer inputs. The morale is that one should not
+use the raw results of \csa{xintFxPtPowerSeriesX} with the |D| digits
+with which it was computed, as the last are to be considered garbage.
+Rather, one should keep from the output only some smaller number of
+digits. This will make further computations faster and not less precise.
+I guess there should be some macro to do this final truncating, or
+better, rounding, at a given number |D'<D| of digits. Maybe for the next
+release.
+
+\subsection{\csh{xintFloatPowerSeries}}\label{xintFloatPowerSeries}
+
+
+\noindent\csa{xintFloatPowerSeries}|[P]{A}{B}{\coeff}{f}|%
+\ntype{{\upshape[\numx]}\numx\numx}
+ computes
+$\sum_{\text{|n=A|}}^{\text{|n=B|}}$|\coeff{n}|${}\cdot |f|^{\,\text{|n|}}$
+with a floating point
+precision given by the optional parameter |P| or by the current setting of
+|\xintDigits|.\etype{\Ff\Ff}
+
+In the current, preliminary, version, no attempt has been made to try to
+guarantee to the final result the precision |P|. Rather, |P| is used for all
+intermediate floating point evaluations. So
+rounding errors will make some of the last printed digits invalid. The
+operations done are first the evaluation of |f^A| using \csa{xintFloatPow}, then
+each successive power is obtained from this first one by multiplication by |f|
+using \csa{xintFloatMul}, then again with \csa{xintFloatMul} this is multiplied
+with |\coeff{n}|, and the sum is done adding one term at a time with
+\csa{xintFloatAdd}. To sum up, this is just the naive transformation of
+\csa{xintFxPtPowerSeries} from fixed point to floating point.
+
+\def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}%
+
+\everb+@
+\def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}%
+\xintFloatPowerSeries [8]{1}{30}{\coefflog}{-1/2[0]}
++
+
+%
+\leftedline{\dtt{\xintFloatPowerSeries [8]{1}{30}{\coefflog}{-1/2[0]}}}
+
+\subsection{\csh{xintFloatPowerSeriesX}}\label{xintFloatPowerSeriesX}
+
+
+\noindent\csa{xintFloatPowerSeriesX}|[P]{A}{B}{\coeff}{f}|%
+\ntype{{\upshape[\numx]}\numx\numx}
+is like
+\csa{xintFloatPowerSeries} with the difference that |f| is
+expanded once\etype{\Ff\Ff}
+and for all at the start of the computation, thus allowing
+efficient chaining of such series evaluations.
+\def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}%
+
+\everb+@
+\def\coeffexp #1{1/\xintiiFac {#1}[0]}% 1/n! (exact, not float)
+\def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}%
+\xintFloatPowerSeriesX [8]{0}{30}{\coeffexp}
+ {\xintFloatPowerSeries [8]{1}{30}{\coefflog}{-1/2[0]}}
++
+
+%
+\leftedline{\dtt{\xintFloatPowerSeriesX [8]{0}{30}{\coeffexp}
+ {\xintFloatPowerSeries [8]{1}{30}{\coefflog}{-1/2[0]}}}}
+
+\subsection{Computing \texorpdfstring{$\log 2$}{log(2)} and \texorpdfstring{$\pi$}{pi}}\label{ssec:Machin}
+
+In this final section, the use of \csbxint{FxPtPowerSeries} (and
+\csbxint{PowerSeries}) will be
+illustrated on the (expandable... why make things simple when it is so easy to
+make them difficult!) computations of the first digits of the decimal expansion
+of the familiar constants $\log 2$ and $\pi$.
+
+Let us start with $\log 2$. We will get it from this formula (which is
+left as an exercise): %
+%
+\leftedline{\dtt{log(2)=-2\,log(1-13/256)-%
+ 5\,log(1-1/9)}}
+%
+The number of terms to be kept in the log series, for a desired
+precision of |10^{-D}| was roughly estimated without much theoretical
+analysis. Computing exactly the partial sums with \csa{xintPowerSeries}
+and then printing the truncated values, from |D=0| up to |D=100| showed
+that it worked in terms of quality of the approximation. Because of
+possible strings of zeroes or nines in the exact decimal expansion (in
+the present case of $\log 2$, strings of zeroes around the fourtieth and
+the sixtieth decimals), this
+does not mean though that all digits printed were always exact. In
+the end one always end up having to compute at some higher level of
+desired precision to validate the earlier result.
+
+Then we tried with \csa{xintFxPtPowerSeries}: this is worthwile only for
+|D|'s at least 50, as the exact evaluations are faster (with these
+short-length |f|'s) for a lower
+number of digits. And as expected the degradation in the quality of
+approximation was in this range of the order of two or three digits.
+This meant roughly that the 3+1=4 ending digits were wrong. Again, we ended
+up having to compute with five more digits and compare with the earlier
+value to validate it. We use truncation rather than rounding because our
+goal is not to obtain the correct rounded decimal expansion but the
+correct exact truncated one.
+
+% 693147180559945309417232121458176568075500134360255254120680009493
+
+\begin{everbatim*}
+\def\coefflog #1{1/#1[0]}% 1/n
+\def\xa {13/256[0]}% we will compute log(1-13/256)
+\def\xb {1/9[0]}% we will compute log(1-1/9)
+\def\LogTwo #1%
+% get log(2)=-2log(1-13/256)- 5log(1-1/9)
+{% we want to use \printnumber, hence need something expanding in two steps
+ % only, so we use here the \romannumeral0 method
+ \romannumeral0\expandafter\LogTwoDoIt \expandafter
+ % Nb Terms for 1/9:
+ {\the\numexpr #1*150/143\expandafter}\expandafter
+ % Nb Terms for 13/256:
+ {\the\numexpr #1*100/129\expandafter}\expandafter
+ % We print #1 digits, but we know the ending ones are garbage
+ {\the\numexpr #1\relax}% allows #1 to be a count register
+}%
+\def\LogTwoDoIt #1#2#3%
+% #1=nb of terms for 1/9, #2=nb of terms for 13/256,
+{% #3=nb of digits for computations, also used for printing
+ \xinttrunc {#3} % lowercase form to stop the \romannumeral0 expansion!
+ {\xintAdd
+ {\xintMul {2}{\xintFxPtPowerSeries {1}{#2}{\coefflog}{\xa}{#3}}}
+ {\xintMul {5}{\xintFxPtPowerSeries {1}{#1}{\coefflog}{\xb}{#3}}}%
+ }%
+}%
+\noindent $\log 2 \approx \LogTwo {60}\dots$\endgraf
+\noindent\phantom{$\log 2$}${}\approx{}$\printnumber{\LogTwo {65}}\dots\endgraf
+\noindent\phantom{$\log 2$}${}\approx{}$\printnumber{\LogTwo {70}}\dots\endgraf
+\end{everbatim*}
+
+Here is the code doing an exact evaluation of the partial sums. We have
+added a |+1| to the number of digits for estimating the number of terms
+to keep from the log series: we experimented that this gets exactly the
+first |D| digits, for all values from |D=0| to |D=100|, except in one
+case (|D=40|) where the last digit is wrong. For values of |D|
+higher than |100| it is more efficient to use the code using
+\csa{xintFxPtPowerSeries}.
+\everb|@
+\def\LogTwo #1% get log(2)=-2log(1-13/256)- 5log(1-1/9)
+{%
+ \romannumeral0\expandafter\LogTwoDoIt \expandafter
+ {\the\numexpr (#1+1)*150/143\expandafter}\expandafter
+ {\the\numexpr (#1+1)*100/129\expandafter}\expandafter
+ {\the\numexpr #1\relax}%
+}%
+\def\LogTwoDoIt #1#2#3%
+{% #3=nb of digits for truncating an EXACT partial sum
+ \xinttrunc {#3}
+ {\xintAdd
+ {\xintMul {2}{\xintPowerSeries {1}{#2}{\coefflog}{\xa}}}
+ {\xintMul {5}{\xintPowerSeries {1}{#1}{\coefflog}{\xb}}}%
+ }%
+}%
+|
+
+Let us turn now to Pi, computed with the Machin formula (but see also the
+approach via the \hyperlink{BrentSalamin}{Brent-Salamin algorithm} with
+\csa{xintfloatexpr}) Again the numbers of terms to keep in the two |arctg|
+series were roughly estimated, and some experimentations showed that removing
+the last three digits was enough (at least for |D=0-100| range). And the
+algorithm does print the correct digits when used with |D=1000| (to be
+convinced of that one needs to run it for |D=1000| and again, say for
+|D=1010|.) A theoretical analysis could help confirm that this algorithm
+always gets better than |10^{-D}| precision, but again, strings of zeroes or
+nines encountered in the decimal expansion may falsify the ending digits,
+nines may be zeroes (and the last non-nine one should be increased) and zeroes
+may be nine (and the last non-zero one should be decreased).
+
+\hypertarget{MachinCode}{}
+\begin{everbatim*}
+\def\coeffarctg #1{\the\numexpr\ifodd#1 -1\else1\fi\relax/%
+ \the\numexpr 2*#1+1\relax [0]}%
+%\def\coeffarctg #1{\romannumeral0\xintmon{#1}/\the\numexpr 2*#1+1\relax }%
+\def\xa {1/25[0]}% 1/5^2, the [0] for faster parsing
+\def\xb {1/57121[0]}% 1/239^2, the [0] for faster parsing
+\def\Machin #1{% #1 may be a count register, \Machin {\mycount} is allowed
+ \romannumeral0\expandafter\MachinA \expandafter
+ % number of terms for arctg(1/5):
+ {\the\numexpr (#1+3)*5/7\expandafter}\expandafter
+ % number of terms for arctg(1/239):
+ {\the\numexpr (#1+3)*10/45\expandafter}\expandafter
+ % do the computations with 3 additional digits:
+ {\the\numexpr #1+3\expandafter}\expandafter
+ % allow #1 to be a count register:
+ {\the\numexpr #1\relax }}%
+\def\MachinA #1#2#3#4%
+{\xinttrunc {#4}
+ {\xintSub
+ {\xintMul {16/5}{\xintFxPtPowerSeries {0}{#1}{\coeffarctg}{\xa}{#3}}}
+ {\xintMul{4/239}{\xintFxPtPowerSeries {0}{#2}{\coeffarctg}{\xb}{#3}}}%
+ }}%
+\begin{framed}
+ \[ \pi = \Machin {60}\dots \]
+\end{framed}
+\end{everbatim*}
+
+Here is a variant|\MachinBis|,
+which evaluates the partial sums \emph{exactly} using
+\csa{xintPowerSeries}, before their final truncation. No need for a
+``|+3|'' then.
+\begin{everbatim*}
+\def\MachinBis #1{% #1 may be a count register,
+% the final result will be truncated to #1 digits post decimal point
+ \romannumeral0\expandafter\MachinBisA \expandafter
+ % number of terms for arctg(1/5):
+ {\the\numexpr #1*5/7\expandafter}\expandafter
+ % number of terms for arctg(1/239):
+ {\the\numexpr #1*10/45\expandafter}\expandafter
+ % allow #1 to be a count register:
+ {\the\numexpr #1\relax }}%
+\def\MachinBisA #1#2#3%
+{\xinttrunc {#3} %
+ {\xintSub
+ {\xintMul {16/5}{\xintPowerSeries {0}{#1}{\coeffarctg}{\xa}}}
+ {\xintMul{4/239}{\xintPowerSeries {0}{#2}{\coeffarctg}{\xb}}}%
+}}%
+\end{everbatim*}
+
+Let us use this variant for a loop showing the build-up of digits:
+\begin{everbatim*}
+\begin{multicols}{2}
+ \cnta 0 % previously declared \count register
+ \loop \noindent
+ \centeredline{\dtt{\MachinBis{\cnta}}}%
+ \ifnum\cnta < 30
+ \advance\cnta 1 \repeat
+\end{multicols}
+\end{everbatim*}
+
+\hypertarget{Machin1000}{}
+%
+You want more digits and have some time? compile this copy of the
+\hyperlink{MachinCode}{|\Machin|} with |etex| (or |pdftex|):
+%
+\everb|@
+% Compile with e-TeX extensions enabled (etex, pdftex, ...)
+\input xintfrac.sty
+\input xintseries.sty
+% pi = 16 Arctg(1/5) - 4 Arctg(1/239) (John Machin's formula)
+\def\coeffarctg #1{\the\numexpr\ifodd#1 -1\else1\fi\relax/%
+ \the\numexpr 2*#1+1\relax [0]}%
+\def\xa {1/25[0]}%
+\def\xb {1/57121[0]}%
+\def\Machin #1{%
+ \romannumeral0\expandafter\MachinA \expandafter
+ {\the\numexpr (#1+3)*5/7\expandafter}\expandafter
+ {\the\numexpr (#1+3)*10/45\expandafter}\expandafter
+ {\the\numexpr #1+3\expandafter}\expandafter
+ {\the\numexpr #1\relax }}%
+\def\MachinA #1#2#3#4%
+{\xinttrunc {#4}
+ {\xintSub
+ {\xintMul {16/5}{\xintFxPtPowerSeries {0}{#1}{\coeffarctg}{\xa}{#3}}}
+ {\xintMul {4/239}{\xintFxPtPowerSeries {0}{#2}{\coeffarctg}{\xb}{#3}}}%
+}}%
+\pdfresettimer
+\fdef\Z {\Machin {1000}}
+\odef\W {\the\pdfelapsedtime}
+\message{\Z}
+\message{computed in \xintRound {2}{\W/65536} seconds.}
+\bye
+|
+
+This will log the first 1000 digits of $\pi$ after the decimal point. On my
+laptop (a 2012 model) this took about $5.05$ seconds last time I tried.%
+%
+\footnote{With \texttt{1.09i} and earlier \xintname, this used to be \dtt{42}
+ seconds; starting with \texttt{1.09j}, and prior to \texttt{1.2}, it was
+ \dtt{16} seconds (this was probably due to a more efficient division with
+ denominators at most $9999$). The |1.2| \xintcorename achieves a further
+ gain at \dtt{5.6} seconds.}
+%
+\footnote{With |\xintDigits:=1001;|, the non-optimized implementation with the
+ |iter| of \xintexprname fame using the
+ \hyperlink{BrentSalamin}{Brent-Salamin algorithm}, took, last time I tried
+ (1.2i), about \dtt{7} seconds on my laptop (the last two digits were wrong,
+ which is ok as they serve as guard digits), and for obtaining about
+ \dtt{500} digits, it was about \dtt{1.7}s. This is not bad, taking into
+ account that the syntax is almost free rolling speech, contrarily to the
+ code above for the Machin formula computation; we would like to use the
+ quadratically convergent Brent-Salamin algorithm for more digits, but with
+ such computations with numbers of one thousand digits we are beyond the
+ border of the reasonable range for \xintname. Innocent people not knowing
+ what it means to compute with \TeX, and with the extra constraint of
+ expandability will wonder why this is at least thousands of times slower
+ than with any other language (with a little Python program using the
+ |Decimal| library, I timed the Brent-Salamin algorithm to \dtt{4.4ms} for
+ about |1000| digits and \dtt{1.14ms} for |500| digits.) I will just say that
+ for example digits are represented and manipulated via their ascii-code !
+ all computations must convert from ascii-code to cpu words; furthermore
+ nothing can be stored away. And there is no memory storage with |O(1)| time
+ access... if expandability is to be verified.}
+%
+
+
+As mentioned in the
+introduction, the file \href{http://www.ctan.org/pkg/pi}{pi.tex} by \textsc{D.
+ Roegel} shows that orders of magnitude faster computations are possible within
+\TeX{}, but recall our constraints of complete expandability and be merciful,
+please.
+
+\textbf{Why truncating rather than rounding?} One of our main competitors
+on the market of scientific computing, a canadian product (not
+encumbered with expandability constraints, and having barely ever heard
+of \TeX{} ;-), prints numbers rounded in the last digit. Why didn't we
+follow suit in the macros \csa{xintFxPtPowerSeries} and
+\csa{xintFxPtPowerSeriesX}? To round at |D| digits, and excluding a
+rewrite or cloning of the division algorithm which anyhow would add to
+it some overhead in its final steps, \xintfracname needs to truncate at
+|D+1|, then round. And rounding loses information! So, with more time
+spent, we obtain a worst result than the one truncated at |D+1| (one
+could imagine that additions and so on, done with only |D| digits, cost
+less; true, but this is a negligeable effect per summand compared to the
+additional cost for this term of having been truncated at |D+1| then
+rounded). Rounding is the way to go when setting up algorithms to
+evaluate functions destined to be composed one after the other: exact
+algebraic operations with many summands and an |f| variable which is a
+fraction are costly and create an even bigger fraction; replacing |f|
+with a reasonable rounding, and rounding the result, is necessary to
+allow arbitrary chaining.
+
+But, for the
+computation of a single constant, we are really interested in the exact
+decimal expansion, so we truncate and compute more terms until the
+earlier result gets validated. Finally if we do want the rounding we can
+always do it on a value computed with |D+1| truncation.
+
+\clearpage
+\let\xintseriesnameUp\undefined
+\csname xintcfracnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xintcfracname package}
+\RaisedLabel{sec:cfrac}
+
+\localtableofcontents
+
+First version of this package was included in release |1.04| (|2013/04/25|) of the
+\xintname bundle. It was kept almost unchanged until |1.09m| of |2014/02/26|
+which brought some new macros: \csbxint{FtoC}, \csbxint{CtoF}, \csbxint{CtoCv},
+dealing with sequences of braced partial quotients rather than comma separated
+ones, \csbxint{FGtoC} which is to produce ``guaranteed'' coefficients of some
+real number known approximately, and \csbxint{GGCFrac} for displaying arbitrary
+material as a continued fraction; also, some changes to existing macros:
+\csbxint{FtoCs} and \csbxint{CntoCs} insert spaces after the commas,
+\csbxint{CstoF} and \csbxint{CstoCv} authorize spaces in the input also before
+the commas.
+
+Note: \csbxint{CstoF} and \csbxint{CstoCv} create a partial dependency on
+\xinttoolsname (its \csbxint{CSVtoList}.)
+
+This section contains:
+\begin{enumerate}
+\item an \hyperref[ssec:cfracoverview]{overview} of the package functionalities,
+\item a description of each one of the package macros,
+\item further illustration of their use via the study of the
+ \hyperref[ssec:e-convergents]{convergents of $e$}.
+\end{enumerate}
+
+\subsection{Package overview}\label{ssec:cfracoverview}
+
+The package computes partial quotients and convergents of a fraction, or
+conversely start from coefficients and obtain the corresponding fraction; three
+macros \csbxint {CFrac}, \csbxint {GCFrac} and \csbxint {GGCFrac} are
+for typesetting (the first two assume that the coefficients are numeric
+quantities acceptable by the \xintfracname \csbxint{Frac} macro, the
+last one will display arbitrary material), the others
+can be nested (if applicable) or see their outputs further processed by other
+macros from the \xintname bundle, particularly the macros of \xinttoolsname
+dealing with sequences of braced items or comma separated lists.
+
+A \emph{simple} continued fraction has coefficients
+|[c0,c1,...,cN]| (usually called partial quotients, but I
+dislike this entrenched terminology), where |c0| is a positive or
+negative integer and the others are positive integers.
+
+Typesetting is usually done via the |amsmath| macro |\cfrac|:
+\begin{everbatim*}
+\[ c_0 + \cfrac{1}{c_1+\cfrac1{c_2+\cfrac1{c_3+\cfrac1{\ddots}}}}\]
+\end{everbatim*}
+
+Here is a concrete example:
+\begin{everbatim*}
+\[ \xintFrac {208341/66317}=\xintCFrac {208341/66317}\]%
+\end{everbatim*}
+But it is the macro \csbxint{CFrac} which did all the work of \emph{computing}
+the continued fraction \emph{and} using |\cfrac| from |amsmath| to typeset
+it.
+
+A \emph{generalized} continued fraction has the same structure but the
+numerators are not restricted to be $1$, and numbers used in the continued
+fraction may be arbitrary, also fractions, irrationals, complex,
+indeterminates.%
+%
+\footnote{\xintcfracname may be used with indeterminates,
+ for basic conversions from one inline format to another, but not for
+ actual computations. See \csbxint{GGCFrac}.}
+%
+The \emph{centered} continued fraction is an
+example:
+\begin{everbatim*}
+\[ \xintFrac {915286/188421}=\xintGCFrac {5+-1/7+1/39+-1/53+-1/13}
+ =\xintCFrac {915286/188421}\]
+\end{everbatim*}
+
+The macro \csbxint{GCFrac}, contrarily to
+\csbxint{CFrac}, does not compute anything, it just typesets starting from a
+generalized continued fraction in inline format, which in this example
+was input literally. We also used \csa{xintCFrac}
+for comparison of the two types of continued fractions.
+
+To let \TeX{} compute the centered continued fraction of |f| there is
+\csbxint{FtoCC}:
+\begin{everbatim*}
+\[\xintFrac {915286/188421}\to\xintFtoCC {915286/188421}\]
+\end{everbatim*}
+The package macros are expandable and may be nested (naturally \csa{xintCFrac}
+and \csa{xintGCFrac} must be at the top level, as they deal with typesetting).
+\begin{everbatim*}
+\[\xintGCFrac {\xintFtoCC{915286/188421}}\]
+\end{everbatim*}
+
+The `inline' format expected on input by \csbxint{GCFrac} is
+%
+\leftedline{$a_0+b_0/a_1+b_1/a_2+b_2/a_3+\cdots+b_{n-2}/a_{n-1}+b_{n-1}/a_n$}
+%
+Fractions among the coefficients are allowed but they must be enclosed
+within braces. Signed integers may be left without braces (but the |+|
+signs are mandatory). No spaces are allowed around the plus and fraction
+symbols. The coefficients may themselves be macros, as long as these
+macros are \fexpan dable.
+\begin{everbatim*}
+\[ \xintFrac{\xintGCtoF {1+-1/57+\xintPow {-3}{7}/\xintiiQuo {132}{25}}}
+ = \xintGCFrac {1+-1/57+\xintPow {-3}{7}/\xintiiQuo {132}{25}}\]
+\end{everbatim*}
+To compute the actual fraction one has \csbxint{GCtoF}:
+\begin{everbatim*}
+\[\xintFrac{\xintGCtoF {1+-1/57+\xintPow {-3}{7}/\xintiiQuo {132}{25}}}\]
+\end{everbatim*}
+For non-numeric input there is \csbxint{GGCFrac}.
+\begin{everbatim*}
+\[\xintGGCFrac {a_0+b_0/a_1+b_1/a_2+b_2/\ddots+\ddots/a_{n-1}+b_{n-1}/a_n}\]
+\end{everbatim*}
+For regular continued fractions, there is a simpler comma separated format:
+\begin{everbatim*}
+\[-7,6,19,1,33\to\xintFrac{\xintCstoF{-7,6,19,1,33}}=\xintCFrac{\xintCstoF{-7,6,19,1,33}}\]
+\end{everbatim*}
+The macro \csbxint{FtoCs} produces from a fraction |f| the comma separated
+list of its coefficients.
+\begin{everbatim*}
+\[\xintFrac{1084483/398959}=[\xintFtoCs{1084483/398959}]\]
+\end{everbatim*}
+If one prefers other separators, one can use the two arguments macros
+\csbxint{FtoCx} whose first argument is the separator (which may consist of more
+than one token) which is to be used.
+\begin{everbatim*}
+\[\xintFrac{2721/1001}=\xintFtoCx {+1/(}{2721/1001})\cdots)\]
+\end{everbatim*}
+This allows under Plain \TeX{} with |amstex| to obtain the same effect
+as with \LaTeX{}+|\amsmath|+\csbxint{CFrac}:
+%
+\leftedline{|$$\xintFwOver{2721/1001}=\xintFtoCx {+\cfrac1\\ }{2721/1001}\endcfrac$$|}
+
+As a shortcut to \csa{xintFtoCx} with separator |1+/|, there is
+\csbxint{FtoGC}:
+\begin{everbatim*}
+2721/1001=\xintFtoGC {2721/1001}
+\end{everbatim*}
+Let us compare in that case with the output of \csbxint{FtoCC}:
+\begin{everbatim*}
+2721/1001=\xintFtoCC {2721/1001}
+\end{everbatim*}
+To obtain the coefficients as a sequence of braced numbers, there is
+\csbxint{FtoC} (this is a shortcut for |\xintFtoCx {}|). This list
+(sequence) may then be manipulated using the various macros of \xinttoolsname
+such as the non-expandable macro \csbxint{AssignArray} or the expandable
+\csbxint{Apply} and \csbxint{ListWithSep}.
+
+Conversely to go from such a sequence of braced coefficients to the
+corresponding fraction there is \csbxint{CtoF}.
+
+The `|\printnumber|' (\autoref{ssec:printnumber}) macro which we use in this
+document to print long numbers can also be useful on long continued fractions.
+%
+\begin{everbatim*}
+\printnumber{\xintFtoCC {35037018906350720204351049/244241737886197404558180}}
+\end{everbatim*}
+%
+If we apply \csbxint{GCtoF} to this generalized continued fraction, we
+discover that the original fraction was reducible:
+%
+\leftedline{|\xintGCtoF
+ {143+1/2+...+-1/9}|\dtt{=\xintGCtoF{143+1/2+1/5+-1/4+-1/4+-1/4+-1/3+1/2+1/2+1/6+-1/22+1/2+1/10+-1/5+-1/11+-1/3+1/4+-1/2+1/2+1/4+-1/2+1/23+1/3+1/8+-1/6+-1/9}}}
+
+\def\mymacro #1{$\xintFrac{#1}=[\xintFtoCs{#1}]$\vtop to 6pt{}}
+
+\begingroup
+\catcode`^\active
+\def^#1^{\hbox{#1}}%
+
+When a generalized continued fraction is built with integers, and
+numerators are only |1|'s or |-1|'s, the produced fraction is
+irreducible. And if we compute it again with the last sub-fraction
+omitted we get another irreducible fraction related to the bigger one by
+a Bézout identity. Doing this here we get:
+%
+\leftedline{|\xintGCtoF {143+1/2+...+-1/6}|\dtt{=\xintGCtoF{143+1/2+1/5+-1/4+-1/4+-1/4+-1/3+1/2+1/2+1/6+-1/22+1/2+1/10+-1/5+-1/11+-1/3+1/4+-1/2+1/2+1/4+-1/2+1/23+1/3+1/8+-1/6}}}
+and indeed:
+\[\begin{vmatrix}
+ ^2897319801297630107^ & ^328124887710626729^\\
+ ^20197107104701740^ & ^2287346221788023^
+ \end{vmatrix} = \mbox{\dtt{\xintiiSub {\xintiiMul {2897319801297630107}{2287346221788023}}{\xintiiMul{20197107104701740}{328124887710626729}}}}\]
+
+\endgroup
+
+The various fractions obtained from the truncation of a continued fraction to
+its initial terms are called the convergents. The macros of \xintcfracname
+such as \csbxint{FtoCv}, \csbxint{FtoCCv}, and others which compute such
+convergents, return them as a list of braced items, with no separator (as does
+\csbxint {FtoC} for the partial quotients). Here is an example:
+
+\begin{everbatim*}
+\[\xintFrac{915286/188421}\to
+ \xintListWithSep{,}{\xintApply\xintFrac{\xintFtoCv{915286/188421}}}\]
+\end{everbatim*}
+\begin{everbatim*}
+\[\xintFrac{915286/188421}\to
+ \xintListWithSep{,}{\xintApply\xintFrac{\xintFtoCCv{915286/188421}}}\]
+\end{everbatim*}
+%
+We thus see that the `centered convergents' obtained with \csbxint{FtoCCv} are
+among the fuller list of convergents as returned by \csbxint{FtoCv}.
+
+Here is a more complicated use of \csa{xintApply}
+and \csa{xintListWithSep}. We first define a macro which will be applied to each
+convergent:%
+%
+\leftedline{|\newcommand{\mymacro}[1]{$\xintFrac{#1}=[\xintFtoCs{#1}]$\vtop to 6pt{}}|}
+%
+Next, we use the following code:
+%
+\leftedline{|$\xintFrac{49171/18089}\to{}$|}
+%
+\leftedline{|\xintListWithSep {,
+ }{\xintApply{\mymacro}{\xintFtoCv{49171/18089}}}|}
+It produces:\par
+\noindent$ \xintFrac{49171/18089}\to {}$\xintListWithSep {,
+ }{\xintApply{\mymacro}{\xintFtoCv{49171/18089}}}.
+
+The macro \csbxint{CntoF} allows to specify the coefficients as a function given
+by a one-parameter macro. The produced values do not have to be integers.
+\begin{everbatim*}
+\def\cn #1{\xintiiPow {2}{#1}}% 2^n
+ \[\xintFrac{\xintCntoF {6}{\cn}}=\xintCFrac [l]{\xintCntoF {6}{\cn}}\]
+\end{everbatim*}
+
+Notice the use of the optional argument |[l]| to \csa{xintCFrac}. Other
+possibilities are |[r]| and (default) |[c]|.
+\begin{everbatim*}
+\def\cn #1{\xintPow {2}{-#1}}%
+ \[\xintFrac{\xintCntoF {6}{\cn}}=\xintGCFrac [r]{\xintCntoGC {6}{\cn}}=
+ [\xintFtoCs {\xintCntoF {6}{\cn}}]\]
+\end{everbatim*}
+We used \csbxint{CntoGC} as we wanted to display also the continued fraction and
+not only the fraction returned by \csa{xintCntoF}.
+
+There are also \csbxint{GCntoF} and \csbxint{GCntoGC} which allow the same for
+generalized fractions. An initial portion of a generalized continued
+fraction for $\pi$ is obtained like this
+\begin{everbatim*}
+\def\an #1{\the\numexpr 2*#1+1\relax }%
+\def\bn #1{\the\numexpr (#1+1)*(#1+1)\relax }%
+\[\xintFrac{\xintDiv {4}{\xintGCntoF {5}{\an}{\bn}}} =
+ \cfrac{4}{\xintGCFrac{\xintGCntoGC {5}{\an}{\bn}}} =
+ \xintTrunc {10}{\xintDiv {4}{\xintGCntoF {5}{\an}{\bn}}}\dots\]
+\end{everbatim*}
+
+We see that the quality of approximation is not fantastic compared to the simple
+continued fraction of $\pi$ with about as many terms:
+\begin{everbatim*}
+\[\xintFrac{\xintCstoF{3,7,15,1,292,1,1}}=
+ \xintGCFrac{3+1/7+1/15+1/1+1/292+1/1+1/1}=
+ \xintTrunc{10}{\xintCstoF{3,7,15,1,292,1,1}}\dots\]
+\end{everbatim*}
+
+When studying the continued fraction of some real number, there is always
+some doubt about how many terms are valid, when computed starting from some
+approximation. If $f\leqslant x\leqslant g$ and $f, g$ both have the
+same first $K$ partial quotients, then $x$ also has the same first $K$ quotients
+and convergents. The macro \csbxint{FGtoC} outputs as a sequence of braced items
+the common partial quotients of its two arguments. We can thus use it to produce
+a sure list of valid convergents of $\pi$ for example, starting from some proven
+lower and upper bound:
+\begin{everbatim*}
+$$\pi\to [\xintListWithSep{,}
+ {\xintFGtoC {3.14159265358979323}{3.14159265358979324}}, \dots]$$
+\noindent$\pi\to\xintListWithSep{,\allowbreak\;}
+ {\xintApply{\xintFrac}
+ {\xintCtoCv{\xintFGtoC {3.14159265358979323}{3.14159265358979324}}}}, \dots$
+\end{everbatim*}
+
+
+\subsection{\csh{xintCFrac}}\label{xintCFrac}
+
+\csa{xintCFrac}|{f}|\ntype{\Ff} is a math-mode only, \LaTeX{} with |amsmath|
+only, macro which first computes then displays with the help of |\cfrac| the
+simple continued fraction corresponding to the given fraction. It admits an
+optional argument which may be |[l]|, |[r]| or (the default) |[c]| to specify
+the location of the one's in the numerators of the sub-fractions. Each
+coefficient is typeset using the \csbxint{Frac} macro from the \xintfracname
+package. This macro is \fexpan dable in the sense that it prepares expandably
+the whole expression with the multiple |\cfrac|'s, but it is not completely
+expandable naturally as |\cfrac| isn't.
+
+\subsection{\csh{xintGCFrac}}\label{xintGCFrac}
+
+\csa{xintGCFrac}|{a+b/c+d/e+f/g+h/...+x/y}|\ntype{f} uses similarly |\cfrac|
+to prepare the typesetting with the |amsmath| |\cfrac| (\LaTeX{}) of a
+generalized continued fraction given in inline format (or as macro which
+will \fexpan d to it). It admits the
+same optional argument as \csa{xintCFrac}. Plain \TeX{} with |amstex|
+users, see \csbxint{GCtoGCx}.
+\begin{everbatim*}
+\[\xintGCFrac {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintiiFac {6}}\]
+\end{everbatim*}
+This is mostly a typesetting macro, although it does provoke the
+expansion of the coefficients. See \csbxint{GCtoF} if you are impatient
+to see this specific fraction computed.
+
+It admits an optional argument within square brackets which may be
+either |[l]|, |[c]| or |[r]|. Default is |[c]| (numerators are centered).
+
+Numerators and denominators are made arguments to the \csbxint{Frac}
+macro. This allows them to be themselves fractions or anything \fexpan
+dable giving numbers or fractions, but also means however that they can
+not be arbitrary material, they can not contain color changing macros
+for example. One of the reasons is that \csa{xintGCFrac} tries to
+determine the signs of the numerators and chooses accordingly to use
+$+$ or $-$.
+
+\subsection{\csh{xintGGCFrac}}\label{xintGGCFrac}
+
+\csa{xintGGCFrac}|{a+b/c+d/e+f/g+h/...+x/y}|\ntype{f} is a clone of
+\csbxint{GCFrac}, hence again \LaTeX{} specific with package
+|amsmath|.
+It does not assume the coefficients to be numbers as understood by
+\xintfracname. The macro can be used for displaying arbitrary content as
+a continued fraction with |\cfrac|, using only plus signs though. Note
+though that it will first \fexpan d its argument, which may be thus be
+one of the \xintcfracname macros producing a (general) continued
+fraction in inline format, see \csbxint{FtoCx} for an example. If this
+expansion is not wished, it is enough to start the argument with a
+space.
+\begin{everbatim*}
+\[\xintGGCFrac {1+q/1+q^2/1+q^3/1+q^4/1+q^5/\ddots}\]
+\end{everbatim*}
+
+\subsection{\csh{xintGCtoGCx}}\label{xintGCtoGCx}
+%{\small New with release |1.05|.\par}
+
+\csa{xintGCtoGCx}|{sepa}{sepb}{a+b/c+d/e+f/...+x/y}|\etype{nnf} returns the list
+of the coefficients of the generalized continued fraction of |f|, each one
+within a pair of braces, and separated with the help of |sepa| and |sepb|. Thus
+%
+\leftedline{|\xintGCtoGCx :;{1+2/3+4/5+6/7}| gives \xintGCtoGCx
+ :;{1+2/3+4/5+6/7}}
+%
+The following can be used byt Plain \TeX{}+|amstex| users to obtain an
+output similar as the ones produced by \csbxint{GCFrac} and
+\csbxint{GGCFrac}:\par
+\everb|@
+$$\xintGCtoGCx {+\cfrac}{\\}{a+b/...}\endcfrac$$
+$$\xintGCtoGCx {+\cfrac\xintFwOver}{\\\xintFwOver}{a+b/...}\endcfrac$$
+|
+
+\subsection{\csh{xintFtoC}}\label{xintFtoC}
+
+\csa{xintFtoC}|{f}|\etype{\Ff} computes the
+coefficients of the simple continued fraction of |f| and returns them as a list
+(sequence) of braced items.
+
+\begin{everbatim*}
+\fdef\test{\xintFtoC{-5262046/89233}}\texttt{\meaning\test}
+\end{everbatim*}
+
+\subsection{\csh{xintFtoCs}}\label{xintFtoCs}
+
+\csa{xintFtoCs}|{f}|\etype{\Ff} returns the comma separated list of the
+coefficients of the simple continued fraction of |f|. Notice that starting with
+|1.09m| a space follows each comma (mainly for usage in text mode, as in math
+mode spaces are produced in the typeset output by \TeX{} itself).
+\begin{everbatim*}
+\[ \xintSignedFrac{-5262046/89233} \to [\xintFtoCs{-5262046/89233}]\]
+\end{everbatim*}
+
+\subsection{\csh{xintFtoCx}}\label{xintFtoCx}
+
+\csa{xintFtoCx}|{sep}{f}|\etype{n\Ff} returns the list of the
+coefficients of the simple continued fraction of |f| separated with the
+help of |sep|, which may be anything (and is kept unexpanded). For
+example, with Plain \TeX{} and |amstex|,
+%
+\leftedline{|$$\xintFtoCx {+\cfrac1\\ }{-5262046/89233}\endcfrac$$|}
+%
+will display the continued fraction using
+|\cfrac|. Each coefficient is inside a brace pair \hbox{|{ }|}, allowing
+a macro to end the separator and fetch it as argument,
+for example, again with Plain \TeX{} and |amstex|:
+\everb|@
+ \def\highlight #1{\ifnum #1>200 \textcolor{red}{#1}\else #1\fi}
+ $$\xintFtoCx {+\cfrac1\\ \highlight}{104348/33215}\endcfrac$$
+|
+
+Due to the different and extremely cumbersome syntax of |\cfrac| under
+\LaTeX{} it proves a bit tortuous to obtain there the same effect.
+Actually, it is partly for this purpose that |1.09m| added \csbxint
+{GGCFrac}. We thus use \csa{xintFtoCx} with a suitable separator, and\;
+then the whole thing as argument to \csbxint{GGCFrac}:
+\begin{everbatim*}
+\def\highlight #1{\ifnum #1>200 \fcolorbox{blue}{white}{\boldmath\color{red}$#1$}%
+ \else #1\fi}
+\[\xintGGCFrac {\xintFtoCx {+1/\highlight}{208341/66317}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintFtoGC}}\label{xintFtoGC}
+
+\csa{xintFtoGC}|{f}|\etype{\Ff} does the same as \csa{xintFtoCx}|{+1/}{f}|. Its
+output may thus be used in the package macros expecting such an `inline
+format'.
+% This continued fraction is a \emph{simple} one, not a
+% \emph{generalized} one, but as it is produced in the format used for
+% user input of generalized continued fractions, the macro was called
+% \csa{xintFtoGC} rather than \csa{xintFtoC} for example.
+%
+\begin{everbatim*}
+566827/208524=\xintFtoGC {566827/208524}
+\end{everbatim*}
+
+\subsection{\csh{xintFGtoC}}\label{xintFGtoC}
+
+\csa{xintFGtoC}|{f}{g}|\etype{\Ff\Ff} computes the common initial coefficients
+to
+two given fractions |f| and |g|. Notice that any real number |f<x<g| or |f>x>g|
+will then necessarily share with |f| and |g| these common initial coefficients
+for its regular continued fraction. The coefficients are output as a sequence of
+braced numbers. This list can then be manipulated via macros from
+\xinttoolsname, or other macros of \xintcfracname.
+
+\begin{everbatim*}
+\fdef\test{\xintFGtoC{-5262046/89233}{-5314647/90125}}\texttt{\meaning\test}
+\end{everbatim*}
+\begin{everbatim*}
+\fdef\test{\xintFGtoC{3.141592653}{3.141592654}}\texttt{\meaning\test}
+\end{everbatim*}
+\begin{everbatim*}
+\fdef\test{\xintFGtoC{3.1415926535897932384}{3.1415926535897932385}}\meaning\test
+\end{everbatim*}
+\begin{everbatim*}
+\xintRound {30}{\xintCstoF{\xintListWithSep{,}{\test}}}
+\end{everbatim*}
+\begin{everbatim*}
+\xintRound {30}{\xintCtoF{\test}}
+\end{everbatim*}
+\begin{everbatim*}
+\fdef\test{\xintFGtoC{1.41421356237309}{1.4142135623731}}\meaning\test
+\end{everbatim*}
+
+\subsection{\csh{xintFtoCC}}\label{xintFtoCC}
+
+\csa{xintFtoCC}|{f}|\etype{\Ff} returns the `centered' continued fraction of
+|f|, in `inline format'. %
+\begin{everbatim*}
+566827/208524=\xintFtoCC {566827/208524}
+\end{everbatim*}
+\begin{everbatim*}
+\[\xintFrac{566827/208524} = \xintGCFrac{\xintFtoCC{566827/208524}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintCstoF}}\label{xintCstoF}
+
+\csa{xintCstoF}|{a,b,c,d,...,z}|\etype{f} computes the fraction corresponding to
+the coefficients, which may be fractions or even macros expanding to such
+fractions. The final fraction may then be highly reducible.
+
+\emph{Usage of this macro requires the user to load} \xinttoolsname.\IMPORTANT
+
+Starting with
+release |1.09m| spaces before commas are allowed and trimmed automatically
+(spaces after commas were already silently handled in earlier releases).
+\begin{everbatim*}
+\[\xintGCFrac {-1+1/3+1/-5+1/7+1/-9+1/11+1/-13}=
+ \xintSignedFrac{\xintCstoF {-1,3,-5,7,-9,11,-13}}=\xintSignedFrac{\xintGCtoF
+ {-1+1/3+1/-5+1/7+1/-9+1/11+1/-13}}\]
+\end{everbatim*}
+\begin{everbatim*}
+\[\xintGCFrac{{1/2}+1/{1/3}+1/{1/4}+1/{1/5}}=\xintFrac{\xintCstoF {1/2,1/3,1/4,1/5}}\]
+\end{everbatim*}
+%
+A generalized continued fraction may produce a reducible fraction
+(\csa{xintCstoF} tries its best not to accumulate in a silly way superfluous
+factors but will not do simplifications which would be obvious to a human, like
+simplification by 3 in the result above).
+
+\subsection{\csh{xintCtoF}}\label{xintCtoF}
+
+\csa{xintCtoF}|{{a}{b}{c}...{z}}|\etype{f} computes the fraction corresponding
+to the coefficients, which may be fractions or even macros.
+\begin{everbatim*}
+\xintCtoF {\xintApply {\xintiiPow 3}{\xintSeq {1}{5}}}
+\end{everbatim*}
+\begin{everbatim*}
+\[ \xintFrac{14946960/4805083}=\xintCFrac {14946960/4805083}\]
+\end{everbatim*}
+In the example above the power of $3$ was already pre-computed via the expansion
+done by |\xintApply|, but if we try with |\xintApply { \xintiiPow 3}| where the
+space will stop this expansion, we can check that |\xintCtoF| will itself
+provoke the needed coefficient expansion.% ok
+
+\subsection{\csh{xintGCtoF}}\label{xintGCtoF}
+
+\csa{xintGCtoF}|{a+b/c+d/e+f/g+......+v/w+x/y}|\etype{f} computes the fraction
+defined by the inline generalized continued fraction. Coefficients may be
+fractions but must then be put within braces. They can be macros. The plus signs
+are mandatory.
+\begin{everbatim*}
+\[\xintGCFrac {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintiiFac {6}} =
+\xintFrac{\xintGCtoF {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintiiFac {6}}} =
+\xintFrac{\xintIrr{\xintGCtoF
+ {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintiiFac {6}}}}\]
+\end{everbatim*}
+
+\begin{everbatim*}
+\[ \xintGCFrac{{1/2}+{2/3}/{4/5}+{1/2}/{1/5}+{3/2}/{5/3}} =
+ \xintFrac{\xintGCtoF {{1/2}+{2/3}/{4/5}+{1/2}/{1/5}+{3/2}/{5/3}}} \]
+\end{everbatim*}
+
+The macro tries its best not to accumulate superfluous factor in the
+denominators, but doesn't reduce the fraction to irreducible form before
+returning it and does not do simplifications which would be obvious to a human.
+
+\subsection{\csh{xintCstoCv}}\label{xintCstoCv}
+
+\csa{xintCstoCv}|{a,b,c,d,...,z}|\etype{f} returns the sequence of the
+corresponding convergents, each one within braces.
+
+\emph{Usage of this macro requires the user to load} \xinttoolsname.\IMPORTANT
+
+It is allowed to use fractions as coefficients (the computed
+convergents have then no reason to be the real convergents of the final
+fraction). When the coefficients are integers, the convergents are irreducible
+fractions, but otherwise it is not necessarily the case.
+\begin{everbatim*}
+\xintListWithSep:{\xintCstoCv{1,2,3,4,5,6}}
+\end{everbatim*}
+\begin{everbatim*}
+\xintListWithSep:{\xintCstoCv{1,1/2,1/3,1/4,1/5,1/6}}
+\end{everbatim*}
+\begin{everbatim*}
+\[\xintListWithSep{\to}{\xintApply\xintFrac{\xintCstoCv {\xintPow
+ {-.3}{-5},7.3/4.57,\xintCstoF{3/4,9,-1/3}}}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintCtoCv}}\label{xintCtoCv}
+
+\csa{xintCtoCv}|{{a}{b}{c}...{z}}|\etype{f} returns the sequence of the
+corresponding convergents, each one within braces.
+\begin{everbatim*}
+\fdef\test{\xintCtoCv {11111111111}}\texttt{\meaning\test}
+\end{everbatim*}
+
+\subsection{\csh{xintGCtoCv}}\label{xintGCtoCv}
+
+\csa{xintGCtoCv}|{a+b/c+d/e+f/g+......+v/w+x/y}|\etype{f} returns the list of
+the corresponding convergents. The coefficients may be fractions, but must then
+be inside braces. Or they may be macros, too.
+
+The convergents will in the general case be reducible. To put them into
+irreducible form, one needs one more step, for example it can be done
+with |\xintApply\xintIrr|.
+\begin{everbatim*}
+\[\xintListWithSep{,}{\xintApply\xintFrac
+ {\xintGCtoCv{3+{-2}/{7/2}+{3/4}/12+{-56}/3}}}\]
+\[\xintListWithSep{,}{\xintApply\xintFrac{\xintApply\xintIrr
+ {\xintGCtoCv{3+{-2}/{7/2}+{3/4}/12+{-56}/3}}}}\]
+\end{everbatim*}
+
+
+\subsection{\csh{xintFtoCv}}\label{xintFtoCv}
+
+\csa{xintFtoCv}|{f}|\etype{\Ff} returns the list of the (braced) convergents of
+|f|, with no separator. To be treated with \csbxint{AssignArray} or
+\csbxint{ListWithSep}.
+\begin{everbatim*}
+\[\xintListWithSep{\to}{\xintApply\xintFrac{\xintFtoCv{5211/3748}}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintFtoCCv}}\label{xintFtoCCv}
+
+\csa{xintFtoCCv}|{f}|\etype{\Ff} returns the list of the (braced) centered
+convergents of |f|, with no separator. To be treated with \csbxint{AssignArray}
+or \csbxint{ListWithSep}.
+\begin{everbatim*}
+\[\xintListWithSep{\to}{\xintApply\xintFrac{\xintFtoCCv{5211/3748}}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintCntoF}}\label{xintCntoF}
+
+
+\csa{xintCntoF}|{N}{\macro}|\etype{\numx f} computes the fraction |f| having
+coefficients |c(j)=\macro{j}| for |j=0,1,...,N|. The |N| parameter is given to a
+|\numexpr|. The values of the coefficients, as returned by |\macro| do not have
+to be positive, nor integers, and it is thus not necessarily the case that the
+original |c(j)| are the true coefficients of the final |f|.
+\begin{everbatim*}
+\def\macro #1{\the\numexpr 1+#1*#1\relax} \xintCntoF {5}{\macro}
+\end{everbatim*}
+
+This example shows that the fraction is output with a trailing number in square
+brackets (representing a power of ten), this is for consistency with what do
+most macros of \xintfracname, and does not have to be always this annoying |[0]|
+as the coefficients may for example be numbers in scientific notation. To avoid
+these trailing square brackets, for example if the coefficients are known to be integers, there is always the possibility to filter the output via
+\csbxint{PRaw}, or \csbxint{Irr} (the latter is overkill in the case of integer
+coefficients, as the fraction is guaranteed to be irreducible then).
+
+\subsection{\csh{xintGCntoF}}\label{xintGCntoF}
+
+\csa{xintGCntoF}|{N}{\macroA}{\macroB}|\etype{\numx ff} returns the fraction |f|
+corresponding to the inline generalized continued fraction
+|a0+b0/a1+b1/a2+....+b(N-1)/aN|, with |a(j)=\macroA{j}| and |b(j)=\macroB{j}|.
+The |N| parameter is given to a |\numexpr|.
+\begin{everbatim*}
+\def\coeffA #1{\the\numexpr #1+4-3*((#1+2)/3)\relax }%
+\def\coeffB #1{\the\numexpr \ifodd #1 -\fi 1\relax }% (-1)^n
+\[\xintGCFrac{\xintGCntoGC {6}{\coeffA}{\coeffB}} =
+ \xintFrac{\xintGCntoF {6}{\coeffA}{\coeffB}}\]
+\end{everbatim*}
+There is also \csbxint{GCntoGC} to get the `inline format' continued
+fraction.
+
+\subsection{\csh{xintCntoCs}}\label{xintCntoCs}
+
+\csa{xintCntoCs}|{N}{\macro}|\etype{\numx f} produces the comma separated list
+of the corresponding coefficients, from |n=0| to |n=N|. The |N| is given to a
+|\numexpr|. %
+\begin{everbatim*}
+\xintCntoCs {5}{\macro}
+\end{everbatim*}
+\begin{everbatim*}
+\[ \xintFrac{\xintCntoF{5}{\macro}}=\xintCFrac{\xintCntoF {5}{\macro}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintCntoGC}}\label{xintCntoGC}
+
+%
+\csa{xintCntoGC}|{N}{\macro}|\etype{\numx f} evaluates the |c(j)=\macro{j}| from
+|j=0| to |j=N| and returns a continued fraction written in inline format:
+|{c(0)}+1/{c(1)}+1/...+1/{c(N)}|. The parameter |N| is given to a |\numexpr|.
+The coefficients, after expansion, are, as shown, being enclosed in an added
+pair of braces, they may thus be fractions.
+\begin{everbatim*}
+\def\macro #1{\the\numexpr\ifodd#1 -1-#1\else1+#1\fi\relax/\the\numexpr 1+#1*#1\relax}
+\fdef\x{\xintCntoGC {5}{\macro}}\meaning\x
+\[\xintGCFrac{\xintCntoGC {5}{\macro}}\]
+\end{everbatim*}
+
+\subsection{\csh{xintGCntoGC}}\label{xintGCntoGC}
+
+\csa{xintGCntoGC}|{N}{\macroA}{\macroB}|\etype{\numx ff} evaluates the
+coefficients and then returns the corresponding
+|{a0}+{b0}/{a1}+{b1}/{a2}+...+{b(N-1)}/{aN}| inline generalized fraction. |N| is
+givent to a |\numexpr|. The coefficients are enclosed into pairs
+of braces, and may thus be fractions, the fraction slash will not be
+confused in further processing by the continued fraction slashes.
+%
+\begin{everbatim*}
+\def\an #1{\the\numexpr #1*#1*#1+1\relax}%
+\def\bn #1{\the\numexpr \ifodd#1 -\fi 1*(#1+1)\relax}%
+$\xintGCntoGC {5}{\an}{\bn}=\xintGCFrac {\xintGCntoGC {5}{\an}{\bn}} =
+\displaystyle\xintFrac {\xintGCntoF {5}{\an}{\bn}}$\par
+\end{everbatim*}
+
+\subsection{\csh{xintCstoGC}}\label{xintCstoGC}
+
+\csa{xintCstoGC}|{a,b,..,z}|\etype{f} transforms a comma separated list (or
+something expanding to such a list) into an `inline format' continued fraction
+|{a}+1/{b}+1/...+1/{z}|. The coefficients are just copied and put within braces,
+without expansion. The output can then be used in \csbxint{GCFrac} for example.
+\begin{everbatim*}
+\[\xintGCFrac {\xintCstoGC {-1,1/2,-1/3,1/4,-1/5}}=\xintSignedFrac{\xintCstoF {-1,1/2,-1/3,1/4,-1/5}}\]
+\end{everbatim*}
+\subsection{\csh{xintiCstoF}, \csh{xintiGCtoF}, \csh{xintiCstoCv}, \csh{xintiGCtoCv}}\label{xintiCstoF}
+\label{xintiGCtoF}
+\label{xintiCstoCv}
+\label{xintiGCtoCv}
+
+Essentially\etype{f} the same as the corresponding macros without the
+`i', but for integer-only input. Infinitesimally faster, mainly for
+internal use by the package.
+
+\subsection{\csh{xintGCtoGC}}\label{xintGCtoGC}
+
+\csa{xintGCtoGC}|{a+b/c+d/e+f/g+......+v/w+x/y}|\etype{f} expands (with the
+usual meaning) each one of the coefficients and returns an inline continued
+fraction of the same type, each expanded coefficient being enclosed within
+braces.
+%
+\begin{everbatim*}
+\fdef\x {\xintGCtoGC {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/%
+ \xintiiFac {6}+\xintCstoF {2,-7,-5}/16}} \meaning\x
+\end{everbatim*}
+
+To be honest I have forgotten for which purpose I wrote this macro in the first
+place.
+
+\subsection{Euler's number \texorpdfstring{$e$}{e}}\label{ssec:e-convergents}
+
+Let us explore
+the convergents of Euler's number $e$.
+\smallskip The volume of computation is kept minimal by the following steps:
+\begin{itemize}
+\item a comma separated list of the first 36 coefficients is produced by
+ \csbxint{CntoCs},
+\item this is then given to \csbxint{iCstoCv} which produces the list of the
+ convergents (there is also \csbxint{CstoCv}, but our
+ coefficients being integers we used the infinitesimally
+ faster \csbxint{iCstoCv}),
+\item then the whole list was converted into a sequence of one-line paragraphs,
+ each convergent becomes the argument to a macro printing it
+ together with its decimal expansion with 30 digits after the decimal point.
+\item A count register |\cnta| was used to give a line count serving as a visual
+ aid: we could also have done that in an expandable way, but well, let's relax
+ from time to time\dots
+\end{itemize}
+
+\begin{everbatim*}
+\def\cn #1{\the\numexpr\ifcase \numexpr #1+3-3*((#1+2)/3)\relax
+ 1\or1\or2*(#1/3)\fi\relax }
+% produces the pattern 1,1,2,1,1,4,1,1,6,1,1,8,... which are the
+% coefficients of the simple continued fraction of e-1.
+\cnta 0
+\def\mymacro #1{\advance\cnta by 1
+ \noindent
+ \hbox to 3em {\hfil\small\dtt{\the\cnta.} }%
+ $\xintTrunc {30}{\xintAdd {1[0]}{#1}}\dots=
+ \xintFrac{\xintAdd {1[0]}{#1}}$}%
+\xintListWithSep{\vtop to 6pt{}\vbox to 12pt{}\par}
+ {\xintApply\mymacro{\xintiCstoCv{\xintCntoCs {35}{\cn}}}}
+\end{everbatim*}
+
+
+\smallskip
+
+% The actual computation of the list of all 36 convergents accounts for
+% only 8\% of the total time (total time equal to about 5 hundredths of a second
+% in my testing, on my laptop): another 80\% is occupied with the computation of
+% the truncated decimal expansions (and the addition of 1 to everything as the
+% formula gives the continued fraction of $e-1$).
+
+One can with no problem compute
+much bigger convergents. Let's get the 200th convergent. It turns out to
+have the same first 268 digits after the decimal point as $e-1$. Higher
+convergents get more and more digits in proportion to their index: the 500th
+convergent already gets 799 digits correct! To allow speedy compilation of the
+source of this document when the need arises, I limit here to the 200th
+convergent.
+% (getting the 500th took about 1.2s on my laptop last time I tried,
+% and the 200th convergent is obtained ten times faster).
+\begin{everbatim*}
+\fdef\z {\xintCntoF {199}{\cn}}%
+\begingroup\parindent 0pt \leftskip 2.5cm
+\indent\llap {Numerator = }\printnumber{\xintNumerator\z}\par
+\indent\llap {Denominator = }\printnumber{\xintDenominator\z}\par
+\indent\llap {Expansion = }\printnumber{\xintTrunc{268}\z}\dots\par\endgroup
+\end{everbatim*}
+
+
+One can also use a centered continued fraction: we get more digits but there are
+also more computations as the numerators may be either
+$1$ or $-1$.
+
+\clearpage
+\let\xintcfracnameUp\undefined
+\csname xinttoolsnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xinttoolsname package}
+
+\RaisedLabel{sec:tools}
+
+\localtableofcontents
+
+These utilities used to be provided within the \xintname package; since |1.09g|
+(|2013/11/22|) they have been moved to an independently usable package
+\xinttoolsname, which has none of the \xintname facilities regarding big
+numbers. Whenever relevant release |1.09h| has made the macros |\long| so they
+accept |\par| tokens on input.
+
+The completely expandable utilities (up to \csbxint{iloop}) are documented
+first, then the non expandable utilities.
+
+A brief overview is in \autoref{sec:sometoolsutils} and \autoref{sec:examples}
+has more examples of use of macros of this package.
+
+\subsection{\csh{xintRevWithBraces}}\label{xintRevWithBraces}
+
+%{\small New in release |1.06|.\par}
+
+\edef\X{\xintRevWithBraces{12345}}
+\edef\y{\xintRevWithBraces\X}
+\expandafter\def\expandafter\w\expandafter
+ {\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}
+
+%
+\csa{xintRevWithBraces}\marg{list}\etype{f} first does the \fexpan sion of its
+argument then it reverses the order of the tokens, or braced material, it
+encounters, maintaining existing braces and adding a brace pair around each
+naked token encountered. Space tokens (in-between top level braces or naked
+tokens) are gobbled. This macro is mainly thought out for use on a \meta{list}
+of such braced material; with such a list as argument the \fexpan sion will only
+hit against the first opening brace, hence do nothing, and the braced stuff may
+thus be macros one does not want to expand.
+%
+\leftedline{|\edef\x{\xintRevWithBraces{12345}}|}
+%
+\leftedline{|\meaning\x:|\dtt{\meaning\X}}
+%
+\leftedline{|\edef\y{\xintRevWithBraces\x}|}
+%
+\leftedline{|\meaning\y:|\dtt{\meaning\y}}
+%
+The examples above could be defined with |\edef|'s because the braced material
+did not contain macros. Alternatively:
+%
+\leftedline{|\expandafter\def\expandafter\w\expandafter|}
+%
+\leftedline{|{\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}|}
+%
+\leftedline{|\meaning\w:|\dtt{\meaning\w}}
+%
+The macro \csa{xintReverseWithBracesNoExpand}\etype{n} does the same job
+without the initial expansion of its argument.
+
+
+\subsection{\csh{xintZapFirstSpaces}, \csh{xintZapLastSpaces}, \csh{xintZapSpaces}, \csh{xintZapSpacesB}}
+\label{xintZapFirstSpaces}
+\label{xintZapLastSpaces}
+\label{xintZapSpaces}
+\label{xintZapSpacesB}
+%{\small New with release |1.09f|.\par}
+
+\csa{xintZapFirstSpaces}\marg{stuff}\etype{n} does not do \emph{any} expansion
+of its argument, nor brace removal of any sort, nor does it alter \meta{stuff}
+in anyway apart from stripping away all \emph{leading} spaces.
+
+This macro will be mostly of interest to programmers who will know what I will
+now be talking about. \emph{The essential points, naturally, are the complete
+ expandability and the fact that no brace removal nor any other alteration is
+ done to the input.}
+
+\TeX's input scanner already converts consecutive blanks into single space
+tokens, but |\xintZapFirstSpaces| handles successfully also inputs with
+consecutive multiple space tokens.
+However, it is assumed that \meta{stuff} does not contain (except inside braced
+sub-material) space tokens of character code distinct from $32$.
+
+It expands in two steps, and if the goal is to apply it to the
+expansion text of |\x| to define |\y|, then one can do:
+|\odef\y{\romannumeral0\expandafter\xintzapfirstspaces\expandafter{\x}}|
+(one can also define a wrapper macro to |\xintZapFirstSpaces| in order to
+expand once the argument first, but \xinttoolsname not being a programming
+layer, it provides no «Generate Variants» facilities).
+
+Other use case: inside a macro which received a parameter |#1|, one can do
+|\oodef\x{\xintZapFirstSpaces {#1}}|, or, if |#1|, after leading spaces have
+been stripped can accept |\edef| expansion, one can do
+|\edef\x{\xintZapFirstSpaces{#1}}|.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapFirstSpaces { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapfirstspaces\expandafter{\x}}}+++}
+\endgroup
+
+\medskip
+
+\noindent\csbxint{ZapLastSpaces}\marg{stuff}\etype{n} does not do \emph{any} expansion of
+its argument, nor brace removal of any sort, nor does it alter \meta{stuff} in
+anyway apart from stripping away all \emph{ending} spaces. The same remarks as
+for \csbxint{ZapFirstSpaces} apply.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapLastSpaces { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzaplastspaces\expandafter{\x}}}+++}
+\endgroup
+
+\medskip
+
+\noindent\csbxint{ZapSpaces}\marg{stuff}\etype{n} does not do \emph{any}
+expansion of its
+argument, nor brace removal of any sort, nor does it alter \meta{stuff} in
+anyway apart from stripping away all \emph{leading} and all \emph{ending}
+spaces. The same remarks as for \csbxint{ZapFirstSpaces} apply.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapSpaces { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapspaces\expandafter{\x}}}+++}
+\endgroup
+
+\medskip
+
+\noindent\csbxint{ZapSpacesB}\marg{stuff}\etype{n} does not do \emph{any}
+expansion of
+its argument, nor does it alter \meta{stuff} in anyway apart from stripping away
+all leading and all ending spaces and possibly removing one level of braces if
+\meta{stuff} had the shape |<spaces>{braced}<spaces>|. The same remarks as for
+\csbxint{ZapFirstSpaces} apply.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapSpacesB { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapspacesb\expandafter{\x}}}+++}
+\def\x { { \a { \X } { \b \Y } } }
+%
+\leftedline{|\xintZapSpacesB { { \a { \X } { \b \Y } } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapspacesb\expandafter{\x}}}+++}
+\endgroup
+ The spaces here at the start and end of the output come from the braced
+ material, and are not removed (one would need a second application for that;
+ recall though that the \xintname zapping macros do not expand their argument).
+
+\subsection{\csh{xintCSVtoList}}
+\label{xintCSVtoList}
+\label{xintCSVtoListNoExpand}
+
+
+\csa{xintCSVtoList}|{a,b,c...,z}|\etype{f} returns |{a}{b}{c}...{z}|. A
+\emph{list} is by
+convention in this manual simply a succession of tokens, where each braced thing
+will count as one item (``items'' are defined according to the rules of \TeX{}
+for fetching undelimited parameters of a macro, which are exactly the same rules
+as for \LaTeX{} and macro arguments [they are the same things]). The word
+`list' in `comma separated list of items' has its usual linguistic meaning,
+and then an ``item'' is what is delimited by commas.
+
+So \csa{xintCSVtoList} takes on input a `comma separated list of items' and
+converts it into a `\TeX{} list of braced items'. The argument to
+|\xintCSVtoList| may be a macro: it will first be
+\hyperref[ssec:expansions]{\fexpan ded}. Hence the item before the first comma,
+if it is itself a macro, will be expanded which may or may not be a good thing.
+A space inserted at the start of the first item serves to stop that expansion
+(and disappears). The macro \csbxint{CSVtoListNoExpand}\etype{n} does the same
+job without
+the initial expansion of the list argument.
+
+Apart from that no expansion of the items is done and the list items may thus be
+completely arbitrary (and even contain perilous stuff such as unmatched |\if|
+and |\fi| tokens).
+
+Contiguous spaces and tab characters, are collapsed by \TeX{}
+into single spaces. All such spaces around commas%
+%
+\footnote{and multiple space tokens are not a problem; but those at the
+ top level (not hidden inside braces) \emph{must} be of character code
+ |32|.}
+%
+\fbox{are removed}, as well as
+the spaces at the start and the spaces at the end of the list.%
+%
+\footnote{let us recall that this is all done completely expandably...
+ There is absolutely no alteration of any sort of the item apart from
+ the stripping of initial and final space tokens (of character code
+ |32|) and brace removal if and only if the item apart from intial and
+ final spaces (or more generally multiple |char 32| space tokens) is
+ braced.}
+%
+The items may contain explicit |\par|'s or
+empty lines (converted by the \TeX{} input parsing into |\par| tokens).
+
+\begingroup
+
+\edef\X{\xintCSVtoList { 1 ,{ 2 , 3 , 4 , 5 }, a , {b,T} U , { c , d } , { {x ,
+ y} } }}
+
+%
+\leftedline{|\xintCSVtoList { 1 ,{ 2 , 3 , 4 , 5 }, a , {b,T} U , { c , d } ,
+ { {x , y} } }|}
+%
+\leftedline{|->|%
+{\makeatletter\dtt{\expandafter\strip@prefix\meaning\X}}}
+
+One sees on this example how braces protect commas from
+sub-lists to be perceived as delimiters of the top list. Braces around an entire
+item are removed, even when surrounded by spaces before and/or after. Braces for
+sub-parts of an item are not removed.
+
+We observe also that there is a slight difference regarding the brace stripping
+of an item: if the braces were not surrounded by spaces, also the initial and
+final (but no other) spaces of the \emph{enclosed} material are removed. This is
+the only situation where spaces protected by braces are nevertheless removed.
+
+From the rules above: for an empty argument (only spaces, no braces, no comma)
+the output is
+\dtt{\expandafter\detokenize\expandafter{\romannumeral0\xintcsvtolist { }}}
+(a list with one empty item),
+for ``|<opt. spaces>{}<opt.
+spaces>|'' the output is
+\dtt{\expandafter\detokenize\expandafter
+ {\romannumeral0\xintcsvtolist { {} }}}
+(again a list with one empty item, the braces were removed),
+for ``|{ }|'' the output is
+\dtt{\expandafter\detokenize\expandafter
+ {\romannumeral0\xintcsvtolist {{ }}}}
+(again a list with one empty item, the braces were removed and then
+the inner space was removed),
+for ``| { }|'' the output is
+\dtt{\expandafter\detokenize\expandafter
+{\romannumeral0\xintcsvtolist { { }}}} (again a list with one empty item, the initial space served only to stop the expansion, so this was like ``|{ }|'' as input, the braces were removed and the inner space was stripped),
+for ``\texttt{\ \{\ \ \}\ }'' the output is
+\dtt{\expandafter\detokenize\expandafter
+{\romannumeral0\xintcsvtolist { { } }}} (this time the ending space of the first
+item meant that after brace removal the inner spaces were kept; recall though
+that \TeX{} collapses on input consecutive blanks into one space token),
+for ``|,|'' the output consists of two consecutive
+empty items
+\dtt{\expandafter\detokenize\expandafter{\romannumeral0\xintcsvtolist
+ {,}}}. Recall that on output everything is braced, a |{}| is an ``empty''
+item.
+%
+Most of the above is mainly irrelevant for every day use, apart perhaps from the
+fact to be noted that an empty input does not give an empty output but a
+one-empty-item list (it is as if an ending comma was always added at the end of
+the input).
+
+\def\y { \a,\b,\c,\d,\e}
+\expandafter\def\expandafter\Y\expandafter{\romannumeral0\xintcsvtolist{\y}}
+\def\t {{\if},\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}
+\expandafter\def\expandafter\T\expandafter{\romannumeral0\xintcsvtolist{\t}}
+
+%
+\leftedline{|\def\y{ \a,\b,\c,\d,\e} \xintCSVtoList\y->|%
+ {\makeatletter\dtt{\expandafter\strip@prefix\meaning\Y}}}
+%
+\leftedline{|\def\t {{\if},\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}|}
+%
+\leftedline
+{|\xintCSVtoList\t->|\makeatletter\dtt{\expandafter\strip@prefix\meaning\T}}
+%
+The results above were automatically displayed using \TeX's primitive
+\csa{meaning}, which adds a space after each control sequence name. These spaces
+are not in the actual braced items of the produced lists. The first items |\a|
+and |\if| were either preceded by a space or braced to prevent expansion. The
+macro \csa{xintCSVtoListNoExpand} would have done the same job without the
+initial expansion of the list argument, hence no need for such protection but if
+|\y| is defined as |\def\y{\a,\b,\c,\d,\e}| we then must do:
+%
+\leftedline{|\expandafter\xintCSVtoListNoExpand\expandafter {\y}|} Else, we
+may have direct use: %
+%
+\leftedline{|\xintCSVtoListNoExpand
+ {\if,\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}|}
+%
+\leftedline{|->|\dtt{\expandafter\detokenize\expandafter
+ {\romannumeral0\xintcsvtolistnoexpand
+ {\if,\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}}}}
+%
+Again these spaces are an artefact from the use in the source of the document of
+\csa{meaning} (or rather here, \csa{detokenize}) to display the result of using
+\csa{xintCSVtoListNoExpand} (which is done for real in this document
+source).
+
+For the similar conversion from comma separated list to braced items list, but
+without removal of spaces around the commas, there is
+\csa{xintCSVtoListNonStripped}\etype{f} and
+\csa{xintCSVtoListNonStrippedNoExpand}\etype{n}.
+
+\endgroup
+
+\subsection{\csh{xintNthElt}}\label{xintNthElt}
+
+
+\def\macro #1{\the\numexpr 9-#1\relax}
+
+\csa{xintNthElt\x}\marg{list}\etype{\numx f} gets (expandably) the |x|th
+item of the \meta{list}. A braced item will lose one level of brace
+pairs. The token list is first \fexpan ded.
+
+Items are counted starting at one.
+
+\leftedline{|\xintNthElt {3}{{agh}\u{zzz}\v{Z}}| is
+ \texttt{\xintNthElt {3}{{agh}\u{zzz}\v{Z}}}}
+%
+\leftedline{|\xintNthElt {3}{{agh}\u{{zzz}}\v{Z}}| is
+ \texttt{\expandafter\expandafter\expandafter
+ \detokenize\expandafter\expandafter\expandafter {\xintNthElt
+ {3}{{agh}\u{{zzz}}\v{Z}}}}}
+%
+\leftedline{|\xintNthElt {2}{{agh}\u{{zzz}}\v{Z}}| is
+ \texttt{\expandafter\expandafter\expandafter
+ \detokenize\expandafter\expandafter\expandafter {\xintNthElt
+ {2}{{agh}\u{{zzz}}\v{Z}}}}}
+%
+\leftedline{|\xintNthElt {37}{\xintiiFac {100}}|\dtt{=\xintNthElt
+ {37}{\xintiiFac {100}}} is the thirty-seventh digit of $100!$.}
+%
+\leftedline{|\xintNthElt {10}{\xintFtoCv
+ {566827/208524}}|\dtt{=\xintNthElt {10}{\xintFtoCv
+ {566827/208524}}}}
+\leftedline{is the tenth convergent of $566827/208524$ (uses \xintcfracname
+ package).}
+%
+\leftedline{|\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
+ \dtt{=\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
+%
+\leftedline{|\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
+ \dtt{=\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
+%
+\leftedline{|\xintNthElt {-3}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
+ \dtt{=\xintNthElt {-3}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
+
+If |x=0|,
+the macro returns the \emph{length} of the expanded list: this is not equivalent
+to \csbxint{Length} which does no pre-expansion. And it is different from
+\csbxint{Len} which is to be used only on integers or fractions.
+
+If |x<0|, the macro returns the \verb+|x|+th element from the end of the list.
+Thus for example |x=-1| will fetch the last item of the list.
+%
+\leftedline {|\xintNthElt {-5}{{{agh}}\u{zzz}\v{Z}}| is
+ \texttt{\expandafter\expandafter\expandafter \detokenize
+ \expandafter\expandafter\expandafter{\xintNthElt {-5}{{{agh}}\u{zzz}\v{Z}}}}}
+
+The macro \csa{xintNthEltNoExpand}\etype{\numx n} does the same job but without
+first expanding the list argument: |\xintNthEltNoExpand {-4}{\u\v\w T\x\y\z}| is
+\xintNthEltNoExpand {-4}{\a\b\c\u\v\w T\x\y\z}.
+
+If |x| is strictly larger (in absolute value) than the length of the list
+then |\xintNthElt| produces empty contents.
+
+\subsection{\csh{xintKeep}}\label{xintKeep}
+
+\csa{xintKeep\x}\marg{list}\etype{\numx f} expands the token list argument |L|
+and produces a new list, depending on the value of |x|:
+\begin{itemize}[nosep]
+\item if |x>0|, the new list contains the first |x| items from |L| (counting
+ starts at one.) \emph{Each
+ such item will be output within a brace pair.} Use \csbxint{KeepUnbraced} if
+ this is not desired. This means that if the list item was braced to start
+ with, there is no modification, but if it was a token without braces,
+ then it acquires them.
+\item if |x>=length(L)|, the new list is the old one with all its items now
+ braced.
+\item if |x=0| the empty list is returned.
+\item if |x<0| the last \verb+|x|+ elements compose the output in the same
+ order as in the initial list; as the macro proceeds by removing head items
+ the kept items end up in output as they were in input: no added braces.
+\item if |x<=-length(L)| the output is identical with the input.
+\end{itemize}
+
+\csa{xintKeepNoExpand} does the same without first \fexpan ding its list
+argument.
+%
+\begin{everbatim*}
+\fdef\test {\xintKeep {17}{\xintKeep {-69}{\xintSeq {1}{100}}}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+
+\subsection{\csh{xintKeepUnbraced}}\label{xintKeepUnbraced}
+
+Same as \csbxint{Keep} but no brace pairs are added around the kept items from
+the head of the list in the case |x>0|: each such item will lose one level of
+braces. Thus, to remove braces from all items of the list, one can use
+\csbxint{KeepUnbraced} with its first argument larger than the length of the
+list; the same is obtained from \csbxint{ListWithSep}|{}|\marg{list}. But the
+new list will then have generally many more items than the original ones,
+corresponding to the unbraced original items.
+
+For |x<0| the macro is no different from \csbxint{Keep}. Hence the name is a
+bit misleading because brace removal will happen only if |x>0|.
+
+\csa{xintKeepUnbracedNoExpand} does the same without first \fexpan ding
+its list argument.
+%
+\begin{everbatim*}
+\fdef\test {\xintKeepUnbraced {10}{\xintSeq {1}{100}}}\meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+\subsection{\csh{xintTrim}}\label{xintTrim}
+
+\csa{xintTrim\x}\marg{list}\etype{\numx f} expands the list argument and
+gobbles its first |x| elements.
+\begin{itemize}[nosep]
+\item if |x>0|, the first |x| items from |L| are gobbled. The remaining items
+ are not modified.
+\item if |x>=length(L)|, the returned list is empty.
+\item if |x=0| the original list is returned (with no added braces.)
+\item if |x<0| the last \verb+|x|+ items of the list are removed. \emph{The
+ head items end up braced in the output.} Use \csbxint{TrimUnbraced} if
+ this is not desired.
+\item if |x<=-length(L)| the output is empty.
+\end{itemize}
+
+\csa{xintTrimNoExpand} does the same without first \fexpan ding its list
+argument.
+\begin{everbatim*}
+\fdef\test {\xintTrim {17}{\xintTrim {-69}{\xintSeq {1}{100}}}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+\subsection{\csh{xintTrimUnbraced}}\label{xintTrimUnbraced}
+
+Same as \csbxint{Trim} but in case of a negative |x| (cutting items from
+the tail), the kept items from the head are not enclosed in brace pairs. They
+will lose one level of braces. The name is a bit misleading
+because when |x>0| there is no brace-stripping done on the kept items, because
+the macro works simply by gobbling the head ones.
+
+\csa{xintTrimUnbracedNoExpand} does the same without first \fexpan ding its list
+argument.
+
+\begin{everbatim*}
+\fdef\test {\xintTrimUnbraced {-90}{\xintSeq {1}{100}}}\meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+\subsection{\csh{xintListWithSep}}\label{xintListWithSep}
+
+
+\def\macro #1{\the\numexpr 9-#1\relax}
+
+\csa{xintListWithSep}\marg{sep}\marg{list}\etype{nf} inserts the separator
+\meta{sep} in-between all items of the given list of braced items (or
+individual tokens). The items are fetched as does \TeX\ with undelimited macro
+arguments, thus they end up unbraced in output. If the \meta{list} is only one
+(or multiple) space tokens, the output is empty.
+
+The list argument \meta{list} gets \fexpan ded first (thus if it is a macro
+whose contents are braced items, the first opening brace stops the expansion,
+and it is as if the macro had been expanded once.) The separator \meta{sep} is
+not pre-expanded, it ends up as is in the output (if the \meta{list} contained
+at least two items.)
+
+The variant \csa{xintListWithSepNoExpand}\etype{nn} does the same
+job without the initial expansion of the \meta{list} argument.
+\begin{everbatim*}
+\edef\foo{\xintListWithSep{, }{123456789{10}{11}{12}}}\meaning\foo\newline
+\edef\foo{\xintListWithSep{:}{\xintiiFac{20}}}\meaning\foo\newline
+\oodef\FOO{\xintListWithSepNoExpand{\FOO}{\bat\baz\biz\buz}}\meaning\FOO\newline
+% a braced item or a space stops the f-expansion:
+\oodef\foo{\xintListWithSep{\FOO}{{\bat}\baz\biz\buz}}\meaning\foo\newline
+\oodef\foo{\xintListWithSep{\FOO}{ \bat\baz\biz\buz}}\meaning\foo\par
+\end{everbatim*}
+
+\subsection{\csh{xintApply}}\label{xintApply}
+
+
+\def\macro #1{\the\numexpr 9-#1\relax}
+
+\csa{xintApply}|{\macro}|\marg{list}\etype{ff} expandably applies the one
+parameter macro |\macro| to each item in the \meta{list} given as second
+argument and returns a new list with these outputs: each item is given one after
+the other as parameter to |\macro| which is expanded at that time (as usual,
+\emph{i.e.} fully for what comes first), the results are braced and output
+together as a succession of braced items (if |\macro| is defined to start with a
+space, the space will be gobbled and the |\macro| will not be expanded; it is
+allowed to have its own arguments, the list items serve as last arguments to
+|\macro|). Hence |\xintApply{\macro}{{1}{2}{3}}| returns
+|{\macro{1}}{\macro{2}}{\macro{3}}| where all instances of |\macro| have been
+already \fexpan ded.
+
+Being expandable, |\xintApply| is useful for example inside alignments where
+implicit groups make standard loops constructs usually fail. In such situation
+it is often not wished that the new list elements be braced, see
+\csbxint{ApplyUnbraced}. The |\macro| does not have to be expandable:
+|\xintApply| will try to expand it, the expansion may remain partial.
+
+The \meta{list} may
+itself be some macro expanding (in the previously described way) to the list of
+tokens to which the macro |\macro| will be applied. For example, if the
+\meta{list} expands to some positive number, then each digit will be replaced by
+the result of applying |\macro| on it. %
+%
+\leftedline{|\def\macro #1{\the\numexpr
+ 9-#1\relax}|} %
+%
+\leftedline{|\xintApply\macro{\xintiiFac
+ {20}}|\dtt{=\xintApply\macro{\xintiiFac {20}}}}
+
+The macro \csa{xintApplyNoExpand}\etype{fn} does the same job without the first
+initial expansion which gave the \meta{list} of braced tokens to which |\macro|
+is applied.
+
+\subsection{\csh{xintApplyUnbraced}}\label{xintApplyUnbraced}
+
+
+\csa{xintApplyUnbraced}|{\macro}|\marg{list}\etype{ff} is like \csbxint{Apply}.
+The difference is that after having expanded its list argument, and applied
+|\macro| in turn to each item from the list, it reassembles the outputs without
+enclosing them in braces. The net effect is the same as doing
+%
+\leftedline{|\xintListWithSep {}{\xintApply {\macro}|\marg{list}|}|} This is
+useful for preparing a macro which will itself define some other macros or make
+assignments, as the scope will not be limited by brace pairs.
+%
+\begin{everbatim*}
+\def\macro #1{\expandafter\def\csname myself#1\endcsname {#1}}
+\xintApplyUnbraced\macro{{elta}{eltb}{eltc}}
+\begin{enumerate}[nosep,label=(\arabic{*})]
+\item \meaning\myselfelta
+\item \meaning\myselfeltb
+\item \meaning\myselfeltc
+\end{enumerate}
+\end{everbatim*}
+
+%
+The macro \csa{xintApplyUnbracedNoExpand}\etype{fn} does the same job without
+the first initial expansion which gave the \meta{list} of braced tokens to which
+|\macro| is applied.
+
+\subsection{\csh{xintSeq}}\label{xintSeq}
+
+\csa{xintSeq}|[d]{x}{y}|\etype{{{\upshape[\numx]}}\numx\numx} generates
+expandably |{x}{x+d}...| up to and possibly including |{y}| if |d>0| or down
+to and including |{y}| if |d<0|. Naturally |{y}| is omitted if |y-x| is not a
+multiple of |d|. If |d=0| the macro returns |{x}|. If |y-x| and |d| have
+opposite signs, the macro returns nothing. If the optional argument |d| is
+omitted it is taken to be the sign of |y-x|. Hence |\xintSeq {1}{0}| is not
+empty but |{1}{0}|. But |\xintSeq [1]{1}{0}| is empty.
+
+
+The arguments |x| and |y| are expanded inside a |\numexpr| so they may be
+count registers or a \LaTeX{} |\value{countername}|, or arithmetic with such
+things.
+
+%
+\begin{everbatim*}
+\xintListWithSep{,\hskip2pt plus 1pt minus 1pt }{\xintSeq {12}{-25}}
+\end{everbatim*}
+%
+\begin{everbatim*}
+\xintiiSum{\xintSeq [3]{1}{1000}}
+\end{everbatim*}
+
+When the macro is used without the optional argument |d|, it can only generate
+up to about $5000$ numbers\IMPORTANT, the precise value depends upon some
+\TeX{} memory parameter (input save stack).
+
+With the optional argument |d| the macro proceeds differently (but less
+efficiently) and does not stress the input save stack.
+
+
+
+\subsection{\csh{xintloop}, \csh{xintbreakloop}, \csh{xintbreakloopanddo}, \csh{xintloopskiptonext}}
+\label{xintloop}
+\label{xintbreakloop}
+\label{xintbreakloopanddo}
+\label{xintloopskiptonext}
+
+|\xintloop|\meta{stuff}|\if<test>...\repeat|\retype{} is an expandable loop
+compatible with nesting. However to break out of the loop one almost always need
+some un-expandable step. The cousin \csbxint{iloop} is \csbxint{loop} with an
+embedded expandable mechanism allowing to exit from the loop. The iterated
+macros may contain |\par| tokens or empty lines.
+
+If a sub-loop is to be used all the material from the start of the main loop and
+up to the end of the entire subloop should be braced; these braces will be
+removed and do not create a group. The simplest to allow the nesting of one or
+more sub-loops is to brace everything between \csa{xintloop} and \csa{repeat},
+being careful not to leave a space between the closing brace and |\repeat|.
+
+As this loop and \csbxint{iloop} will primarily be of interest to experienced
+\TeX{} macro programmers, my description will assume that the user is
+knowledgeable enough. Some examples in this document will be perhaps more
+illustrative than my attemps at explanation of use.
+
+One can abort the loop with \csbxint{breakloop}; this should not be used inside
+the final test, and one should expand the |\fi| from the corresponding test
+before. One has also \csbxint{breakloopanddo} whose first argument will be
+inserted in the token stream after the loop; one may need a macro such as
+|\xint_afterfi| to move the whole thing after the |\fi|, as a simple
+|\expandafter| will not be enough.
+
+One will usually employ some count registers to manage the exit test from the
+loop; this breaks expandability, see \csbxint{iloop} for an expandable integer
+indexed loop. Use in alignments will be complicated by the fact that cells
+create groups, and also from the fact that any encountered unexpandable material
+will cause the \TeX{} input scanner to insert |\endtemplate| on each encountered
+|&| or |\cr|; thus |\xintbreakloop| may not work as expected, but the situation
+can be resolved via |\xint_firstofone{&}| or use of |\TAB| with |\def\TAB{&}|.
+It is thus simpler for alignments to use rather than \csbxint{loop} either the
+expandable \csbxint{ApplyUnbraced} or the non-expandable but alignment
+compatible \csbxint{ApplyInline}, \csbxint{For} or \csbxint{For*}.
+
+As an example, let us suppose we have two macros |\A|\marg{i}\marg{j} and
+|\B|\marg{i}\marg{j} behaving like (small) integer valued matrix entries, and we
+want to define a macro |\C|\marg{i}\marg{j} giving the matrix product (|i| and
+|j| may be count registers). We will assume that |\A[I]| expands to the number
+of rows, |\A[J]| to the number of columns and want the produced |\C| to act in
+the same manner. The code is very dispendious in use of |\count| registers, not
+optimized in any way, not made very robust (the defined macro can not have the
+same name as the first two matrices for example), we just wanted to quickly
+illustrate use of the nesting capabilities of |\xintloop|.%
+%
+\footnote{for a more sophisticated implementation of matrix
+ multiplication, inclusive of determinants, inverses, and display
+ utilities, with entries big integers or decimal numbers or even
+ fractions see \url{http://tex.stackexchange.com/a/143035/4686} from
+ November 11, 2013.}
+%
+
+
+\begin{everbatim*}
+\newcount\rowmax \newcount\colmax \newcount\summax
+\newcount\rowindex \newcount\colindex \newcount\sumindex
+\newcount\tmpcount
+\makeatletter
+\def\MatrixMultiplication #1#2#3{%
+ \rowmax #1[I]\relax
+ \colmax #2[J]\relax
+ \summax #1[J]\relax
+ \rowindex 1
+ \xintloop % loop over row index i
+ {\colindex 1
+ \xintloop % loop over col index k
+ {\tmpcount 0
+ \sumindex 1
+ \xintloop % loop over intermediate index j
+ \advance\tmpcount \numexpr #1\rowindex\sumindex*#2\sumindex\colindex\relax
+ \ifnum\sumindex<\summax
+ \advance\sumindex 1
+ \repeat }%
+ \expandafter\edef\csname\string#3{\the\rowindex.\the\colindex}\endcsname
+ {\the\tmpcount}%
+ \ifnum\colindex<\colmax
+ \advance\colindex 1
+ \repeat }%
+ \ifnum\rowindex<\rowmax
+ \advance\rowindex 1
+ \repeat
+ \expandafter\edef\csname\string#3{I}\endcsname{\the\rowmax}%
+ \expandafter\edef\csname\string#3{J}\endcsname{\the\colmax}%
+ \def #3##1{\ifx[##1\expandafter\Matrix@helper@size
+ \else\expandafter\Matrix@helper@entry\fi #3{##1}}%
+}%
+\def\Matrix@helper@size #1#2#3]{\csname\string#1{#3}\endcsname }%
+\def\Matrix@helper@entry #1#2#3%
+ {\csname\string#1{\the\numexpr#2.\the\numexpr#3}\endcsname }%
+\def\A #1{\ifx[#1\expandafter\A@size
+ \else\expandafter\A@entry\fi {#1}}%
+\def\A@size #1#2]{\ifx I#23\else4\fi}% 3rows, 4columns
+\def\A@entry #1#2{\the\numexpr #1+#2-1\relax}% not pre-computed...
+\def\B #1{\ifx[#1\expandafter\B@size
+ \else\expandafter\B@entry\fi {#1}}%
+\def\B@size #1#2]{\ifx I#24\else3\fi}% 4rows, 3columns
+\def\B@entry #1#2{\the\numexpr #1-#2\relax}% not pre-computed...
+\makeatother
+\MatrixMultiplication\A\B\C \MatrixMultiplication\C\C\D
+\MatrixMultiplication\C\D\E \MatrixMultiplication\C\E\F
+\begin{multicols}2
+ \[\begin{pmatrix}
+ \A11&\A12&\A13&\A14\\
+ \A21&\A22&\A23&\A24\\
+ \A31&\A32&\A33&\A34
+ \end{pmatrix}
+ \times
+ \begin{pmatrix}
+ \B11&\B12&\B13\\
+ \B21&\B22&\B23\\
+ \B31&\B32&\B33\\
+ \B41&\B42&\B43
+ \end{pmatrix}
+ =
+ \begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}\]
+ \[\begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}^2 = \begin{pmatrix}
+ \D11&\D12&\D13\\
+ \D21&\D22&\D23\\
+ \D31&\D32&\D33
+ \end{pmatrix}\]
+ \[\begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}^3 = \begin{pmatrix}
+ \E11&\E12&\E13\\
+ \E21&\E22&\E23\\
+ \E31&\E32&\E33
+ \end{pmatrix}\]
+ \[\begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}^4 = \begin{pmatrix}
+ \F11&\F12&\F13\\
+ \F21&\F22&\F23\\
+ \F31&\F32&\F33
+ \end{pmatrix}\]
+\end{multicols}
+\end{everbatim*}
+
+
+\subsection{\csh{xintiloop}, \csh{xintiloopindex}, \csh{xintouteriloopindex},
+ \csh{xintbreakiloop}, \csh{xintbreakiloopanddo}, \csh{xintiloopskiptonext},
+\csh{xintiloopskipandredo}}
+\label{xintiloop}
+\label{xintbreakiloop}
+\label{xintbreakiloopanddo}
+\label{xintiloopskiptonext}
+\label{xintiloopskipandredo}
+\label{xintiloopindex}
+\label{xintouteriloopindex}
+
+\csa{xintiloop}|[start+delta]|\meta{stuff}|\if<test> ... \repeat|\retype{} is a
+completely expandable nestable loop. complete expandability depends naturally on
+the actual iterated contents, and complete expansion will not be achievable
+under a sole \fexpan sion, as is indicated by the hollow star in the margin;
+thus the loop can be used inside an |\edef| but not inside arguments to the
+package macros. It can be used inside an |\xintexpr..\relax|. The
+|[start+delta]| is mandatory, not optional.
+
+This loop benefits via \csbxint{iloopindex} to (a limited access to) the integer
+index of the iteration. The starting value |start| (which may be a |\count|) and
+increment |delta| (\emph{id.}) are mandatory arguments. A space after the
+closing square bracket is not significant, it will be ignored. Spaces inside the
+square brackets will also be ignored as the two arguments are first given to a
+|\numexpr...\relax|. Empty lines and explicit |\par| tokens are accepted.
+
+As with \csbxint{loop}, this tool will mostly be of interest to advanced users.
+For nesting, one puts inside braces all the
+material from the start (immediately after |[start+delta]|) and up to and
+inclusive of the inner loop, these braces will be removed and do not create a
+loop. In case of nesting, \csbxint{outeriloopindex} gives access to the index of
+the outer loop. If needed one could write on its model a macro giving access to
+the index of the outer outer loop (or even to the |nth| outer loop).
+
+The \csa{xintiloopindex} and \csa{xintouteriloopindex} can not be used inside
+braces, and generally speaking this means they should be expanded first when
+given as argument to a macro, and that this macro receives them as delimited
+arguments, not braced ones. Or, but naturally this will break expandability, one
+can assign the value of \csa{xintiloopindex} to some |\count|. Both
+\csa{xintiloopindex} and \csa{xintouteriloopindex} extend to the litteral
+representation of the index, thus in |\ifnum| tests, if it comes last one has to
+correctly end the macro with a |\space|, or encapsulate it in a
+|\numexpr..\relax|.
+
+When the repeat-test of the loop is, for example, |\ifnum\xintiloopindex<10
+\repeat|, this means that the last iteration will be with |\xintiloopindex=10|
+(assuming |delta=1|). There is also |\ifnum\xintiloopindex=10 \else\repeat| to
+get the last iteration to be the one with |\xintiloopindex=10|.
+
+One has \csbxint{breakiloop} and \csbxint{breakiloopanddo} to abort the loop.
+The syntax of |\xintbreakiloopanddo| is a bit surprising, the sequence of tokens
+to be executed after breaking the loop is not within braces but is delimited by
+a dot as in:
+%
+\leftedline{|\xintbreakiloopanddo <afterloop>.etc.. etc... \repeat|}
+%
+The reason is that one may wish to use the then current value of
+|\xintiloopindex| in |<afterloop>| but it can't be within braces at the time it
+is evaluated. However, it is not that easy as |\xintiloopindex| must be expanded
+before, so one ends up with code like this:
+%
+\leftedline
+{|\expandafter\xintbreakiloopanddo\expandafter\macro\xintiloopindex.%|}
+%
+\leftedline{|etc.. etc.. \repeat|}
+%
+As moreover the |\fi| from the test leading to the decision of breaking out of
+the loop must be cleared out of the way, the above should be
+a branch of an expandable conditional test, else one needs something such
+as:
+%
+\leftedline
+{|\xint_afterfi{\expandafter\xintbreakiloopanddo\expandafter\macro\xintiloopindex.}%|}
+%
+\leftedline{|\fi etc..etc.. \repeat|}
+
+There is \csbxint{iloopskiptonext} to abort the current iteration and skip to
+the next, \hyperref[xintiloopskipandredo]{\ttfamily\hyphenchar\font45 \char92
+ xintiloopskip\-and\-redo} to skip to the end of the current iteration and redo
+it with the same value of the index (something else will have to change for this
+not to become an eternal loop\dots ).
+
+Inside alignments, if the looped-over text contains a |&| or a |\cr|, any
+un-expandable material before a \csbxint{iloopindex} will make it fail because
+of |\endtemplate|; in such cases one can always either replace |&| by a macro
+expanding to it or replace it by a suitable |\firstofone{&}|, and similarly for
+|\cr|.
+
+\phantomsection\label{edefprimes}
+As an example, let us construct an |\edef\z{...}| which will define |\z| to be a
+list of prime numbers:
+\begin{everbatim*}
+\begingroup
+\edef\z
+{\xintiloop [10001+2]
+ {\xintiloop [3+2]
+ \ifnum\xintouteriloopindex<\numexpr\xintiloopindex*\xintiloopindex\relax
+ \xintouteriloopindex,
+ \expandafter\xintbreakiloop
+ \fi
+ \ifnum\xintouteriloopindex=\numexpr
+ (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
+ \else
+ \repeat
+ }% no space here
+ \ifnum \xintiloopindex < 10999 \repeat }%
+\meaning\z\endgroup
+\end{everbatim*}and we should have taken
+some steps to not have a trailing comma, but
+the point was to show that one can do that in an |\edef|\,! See also
+\autoref{ssec:primesII} which extracts from this code its way of testing
+primality.
+
+Let us create an alignment where each row will contain all divisors of its
+first entry.
+Here is the output, thus obtained without any count register:
+\begin{everbatim*}
+\begin{multicols}2
+\tabskip1ex \normalcolor
+\halign{&\hfil#\hfil\cr
+ \xintiloop [1+1]
+ {\expandafter\bfseries\xintiloopindex &
+ \xintiloop [1+1]
+ \ifnum\xintouteriloopindex=\numexpr
+ (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
+ \xintiloopindex&\fi
+ \ifnum\xintiloopindex<\xintouteriloopindex\space % CRUCIAL \space HERE
+ \repeat \cr }%
+ \ifnum\xintiloopindex<30
+ \repeat
+}
+\end{multicols}
+\end{everbatim*}
+We wanted this first entry in bold face, but |\bfseries| leads to
+unexpandable tokens, so the |\expandafter| was necessary for |\xintiloopindex|
+and |\xintouteriloopindex| not to be confronted with a hard to digest
+|\endtemplate|. An alternative way of coding:
+%
+\begin{everbatim}
+\tabskip1ex
+\def\firstofone #1{#1}%
+\halign{&\hfil#\hfil\cr
+ \xintiloop [1+1]
+ {\bfseries\xintiloopindex\firstofone{&}%
+ \xintiloop [1+1] \ifnum\xintouteriloopindex=\numexpr
+ (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
+ \xintiloopindex\firstofone{&}\fi
+ \ifnum\xintiloopindex<\xintouteriloopindex\space % \space is CRUCIAL
+ \repeat \firstofone{\cr}}%
+ \ifnum\xintiloopindex<30 \repeat }
+\end{everbatim}
+
+\begin{framed}
+ The next utilities are not compatible with expansion-only context.
+\end{framed}
+
+\subsection{\csh{xintApplyInline}}\label{xintApplyInline}
+
+
+\csa{xintApplyInline}|{\macro}|\marg{list}\ntype{o{\lowast f}} works non
+expandably. It applies the one-parameter |\macro| to the first element of the
+expanded list (|\macro| may have itself some arguments, the list item will be
+appended as last argument), and is then re-inserted in the input stream after
+the tokens resulting from this first expansion of |\macro|. The next item is
+then handled.
+
+This is to be used in situations where one needs to do some repetitive
+things. It is not expandable and can not be completely expanded inside a
+macro definition, to prepare material for later execution, contrarily to what
+\csbxint{Apply} or \csbxint{ApplyUnbraced} achieve.
+
+\begin{everbatim*}
+\def\Macro #1{\advance\cnta #1 , \the\cnta}
+\cnta 0
+0\xintApplyInline\Macro {3141592653}.
+\end{everbatim*}
+The first argument |\macro| does not have to be an expandable macro.
+
+\csa{xintApplyInline} submits its second, token list parameter to an
+\hyperref[ssec:expansions]{\fexpan
+sion}. Then, each \emph{unbraced} item will also be \fexpan ded. This provides
+an easy way to insert one list inside another. \emph{Braced} items are not
+expanded. Spaces in-between items are gobbled (as well as those at the start
+or the end of the list), but not the spaces \emph{inside} the braced items.
+
+\csa{xintApplyInline}, despite being non-expandable, does survive to
+contexts where the executed |\macro| closes groups, as happens inside
+alignments with the tabulation character |&|.
+This tabular provides an example:\par
+\begin{everbatim*}
+\centerline{\normalcolor\begin{tabular}{ccc}
+ $N$ & $N^2$ & $N^3$ \\ \hline
+ \def\Row #1{ #1 & \xintiiSqr {#1} & \xintiiPow {#1}{3} \\ \hline }%
+ \xintApplyInline \Row {\xintCSVtoList{17,28,39,50,61}}
+\end{tabular}}\medskip
+\end{everbatim*}
+
+We see that despite the fact that the first encountered tabulation character in
+the first row close a group and thus erases |\Row| from \TeX's memory,
+|\xintApplyInline| knows how to deal with this.
+
+Using \csbxint{ApplyUnbraced} is an alternative: the difference is that
+this would have prepared all rows first and only put them back into the
+token stream once they are all assembled, whereas with |\xintApplyInline|
+each row is constructed and immediately fed back into the token stream: when
+one does things with numbers having hundreds of digits, one learns that
+keeping on hold and shuffling around hundreds of tokens has an impact on
+\TeX{}'s speed (make this ``thousands of tokens'' for the impact to be
+noticeable).
+
+One may nest various |\xintApplyInline|'s. For example (see the
+\hyperref[float]{table} \vpageref{float}):\par
+\begin{everbatim*}
+\begin{figure*}[ht!]
+ \centering\phantomsection\label{float}
+ \def\Row #1{#1:\xintApplyInline {\Item {#1}}{0123456789}\\ }%
+ \def\Item #1#2{&\xintiiPow {#1}{#2}}%
+ \centeredline {\begin{tabular}{ccccccccccc} &0&1&2&3&4&5&6&7&8&9\\ \hline
+ \xintApplyInline \Row {0123456789}
+ \end{tabular}}
+\end{figure*}
+\end{everbatim*}
+
+One could not move the definition of |\Item| inside the tabular,
+as it would get lost after the first |&|. But this
+works:
+\everb|@
+\begin{tabular}{ccccccccccc}
+ &0&1&2&3&4&5&6&7&8&9\\ \hline
+ \def\Row #1{#1:\xintApplyInline {&\xintiiPow {#1}}{0123456789}\\ }%
+ \xintApplyInline \Row {0123456789}
+\end{tabular}
+|
+
+A limitation is that, contrarily to what one may have expected, the
+|\macro| for an |\xintApplyInline| can not be used to define
+the |\macro| for a nested sub-|\xintApplyInline|. For example,
+this does not work:\par
+\everb|@
+ \def\Row #1{#1:\def\Item ##1{&\xintiiPow {#1}{##1}}%
+ \xintApplyInline \Item {0123456789}\\ }%
+ \xintApplyInline \Row {0123456789} % does not work
+|
+\noindent But see \csbxint{For}.
+
+\subsection{\csh{xintFor}, \csh{xintFor*}}\label{xintFor}\label{xintFor*}
+
+\csbxint{For}\ntype{on} is a new kind of for loop.\footnote{first introduced
+ with \xintname |1.09c| of |2013/10/09|.} Rather than using macros
+for encapsulating list items, its behaviour is like a macro with parameters:
+|#1|, |#2|, \dots, |#9| are used to represent the items for up to nine levels of
+nested loops. Here is an example:
+%
+\everb|@
+\xintFor #9 in {1,2,3} \do {%
+ \xintFor #1 in {4,5,6} \do {%
+ \xintFor #3 in {7,8,9} \do {%
+ \xintFor #2 in {10,11,12} \do {%
+ $$#9\times#1\times#3\times#2=\xintiiPrd{{#1}{#2}{#3}{#9}}$$}}}}
+|
+\noindent This example illustrates that one does not have to use |#1| as the
+first one:
+the order is arbitrary. But each level of nesting should have its specific macro
+parameter. Nine levels of nesting is presumably overkill, but I did not know
+where it was reasonable to stop. |\par| tokens are accepted in both the comma
+separated list and the replacement text.
+
+\begin{framed}
+ \TeX nical notes:
+
+\begin{itemize}
+ \item The |#1| is replaced in the iterated-over text exactly as in general
+ \TeX\ macros or \LaTeX\ commands. This spares the user quite a few
+ |\expandafter|'s or other tricks needed with loops which have the
+ values encapsulated in macros, like \LaTeX's |\@for| and |\@tfor|.
+
+ \item \csa{xintFor} (and \csa{xintFor*}) isn't purely expandable: one can
+ not use it inside an |\edef|. But it may be used, as will be shown in
+ examples, in some contexts such as \LaTeX's |tabular| which are usually
+ hostile to non-expandable loops.
+
+ \item \csa{xintFor} (and \csa{xintFor*}) does some assignments prior to
+ executing each iteration of the replacement text, but it acts purely
+ expandably after the last iteration, hence if for example the replacement
+ text ends with a |\\|, the loop can be used insided a tabular and be
+ followed by a |\hline| without creating the dreaded ``|Misplaced
+ \noalign|'' error.
+
+ \item It does not create groups.
+
+ \item It makes no global assignments.
+
+ \item The iterated replacement text may close a group which was opened even
+ before the start of the loop (typical example being with |&| in
+ alignments).
+\begin{everbatim*}
+\begin{tabular}{rccccc}
+ \hline
+ \xintFor #1 in {A, B, C} \do {%
+ #1:\xintFor #2 in {a, b, c, d, e} \do {&($ #2 \to #1 $)}\\ }%
+ \hline
+\end{tabular}
+\end{everbatim*}
+
+ \item There is no facility provided which would give access to a count of
+ the number of iterations as it is technically not easy to do so it in a
+ way working with nested loops while maintaining the ``expandable after
+ done'' property; something in the spirit of \csbxint{iloopindex} is
+ possible but this approach would bring its own limitations and
+ complications. Hence the user is invited to update her own count or
+ \LaTeX{} counter or macro at each iteration, if needed.
+
+ \item A |\macro| whose definition uses internally an \csbxint{For} loop
+ may be used inside another \csbxint{For} loop even if the two loops both
+ use the same macro parameter. The loop definition inside |\macro|
+ must use |##| as is the general rule for definitions done inside macros.
+
+ \item \csbxint{For} is for comma separated values and \csbxint{For*} for
+ lists of braced items; their respective expansion policies differ. They
+ are described later.
+\end{itemize}
+\unskip
+\end{framed}
+
+\noindent Regarding \csbxint{For}:
+\begin{itemize}[nosep, listparindent=\leftmarginiii]
+\item the spaces between the various declarative elements are all optional,
+\item in the list of comma separated values, spaces around the commas or at
+ the start and end are ignored,
+\item if an item must contain itself its own commas, then it should
+ be braced, and the braces will be removed before feeding the iterated-over
+ text,
+\item the list may be a macro, it is expanded only once,
+\item items are not pre-expanded. The first item should be braced or start
+ with a space if the list is explicit and the item should not be
+ pre-expanded,
+\item empty items give empty |#1|'s in the replacement text, they are not
+ skipped,
+\item an empty list executes once the replacement text with an empty parameter
+ value,
+\item the list, if not a macro, \fbox{must be braced.}
+\end{itemize}
+
+\noindent Regarding \csbxint{For*}:\ntype{{\lowast f}n}
+\begin{itemize}[nosep, listparindent=\leftmarginiii]
+\item it handles lists of braced items (or naked tokens),
+\item it \hyperref[ssec:expansions]{\fexpan ds} the list,
+\item and more generally it \hyperref[ssec:expansions]{\fexpan ds} each naked
+ token encountered
+ before assigning the |#1| values (gobbling spaces in the process);
+ this
+ makes it easy to simulate concatenation of multiple lists|\x|, |\y|:
+ if |\x| expands to |{1}{2}{3}| and |\y| expands to |{4}{5}{6}| then |{\x\y}|
+ as argument to |\xintFor*| has the same effect as |{{1}{2}{3}{4}{5}{6}}|.
+
+ For a further illustration see the use of |\xintFor*| at the end of
+ \autoref{ssec:fibonacci}.
+\item spaces at the start, end, or in-between items are gobbled (but naturally
+ not the spaces inside \emph{braced} items),
+\item except if the list argument is a macro (with no parameters), \fbox{it
+ must be braced.},
+\item an empty list leads to an empty result.
+\end{itemize}
+
+The macro \csbxint{Seq} which generates arithmetic sequences is to be used
+with \csbxint{For*} as its output consists of successive braced numbers (given
+as digit tokens).
+\begin{everbatim*}
+\xintFor* #1 in {\xintSeq [+2]{-7}{+2}}\do {stuff
+ with #1\xintifForLast{\par}{\newline}}
+\end{everbatim*}
+
+
+When nesting \csa{xintFor*} loops, using \csa{xintSeq} in the inner loops is
+inefficient, as the arithmetic sequence will be re-created each time. A more
+efficient style is:
+%
+\begin{everbatim}
+ \edef\innersequence {\xintSeq[+2]{-50}{50}}%
+ \xintFor* #1 in {\xintSeq {13}{27}} \do
+ {\xintFor* #2 in \innersequence \do {stuff with #1 and #2}%
+ .. some other macros .. }
+\end{everbatim}
+
+This is a general remark applying for any nesting of loops, one should avoid
+recreating the inner lists of arguments at each iteration of the outer loop.
+
+
+When the loop is defined inside a macro for later execution the |#| characters
+must be doubled.%
+%
+\footnote{sometimes what seems to be a macro argument isn't really; in
+ \csa{raisebox\{1cm\}\{}\csa{xintFor \#1 in \{a,b,c\} }\csa{do
+ \{\#1\}\}} no doubling should be done.}
+%
+For example:
+%
+\begin{everbatim*}
+\def\T{\def\z {}%
+ \xintFor* ##1 in {{u}{v}{w}} \do {%
+ \xintFor ##2 in {x,y,z} \do {%
+ \expandafter\def\expandafter\z\expandafter {\z\sep (##1,##2)} }%
+ }%
+}%
+\T\def\sep {\def\sep{, }}\z
+\end{everbatim*}
+
+Similarly when the replacement text
+of |\xintFor| defines a macro with parameters, the macro character |#| must be
+doubled.
+
+
+The iterated macros as well as the list items are allowed to contain explicit
+|\par| tokens.
+
+
+\subsection{\csh{xintifForFirst}, \csh{xintifForLast}}
+\label{xintifForFirst}\label{xintifForLast}
+
+\csbxint{ifForFirst}\,\texttt{\{YES branch\}\{NO branch\}}\etype{nn}
+ and \csbxint{ifForLast}\,\texttt{\{YES
+ branch\}\hskip 0pt plus 0.2em \{NO branch\}}\etype{nn} execute the |YES| or
+|NO| branch
+if the
+\csbxint{For}
+or \csbxint{For*} loop is currently in its first, respectively last, iteration.
+
+Designed to work as expected under nesting (but see frame next.) Don't forget
+an empty brace pair |{}| if a branch is to do nothing. May be used multiple
+times in the replacement text of the loop.
+
+\begin{framed}
+ \noindent Pay attention to these implementation features:
+ \begin{itemize}[nosep, listparindent=\leftmarginiii]
+ \item \emph{if an inner \csbxint{For} loop is positioned before the
+ \csb{xintifForFirst} or \csb{xintifForLast} of the outer loop it will
+ contaminate their settings. This applies also naturally if the inner loop
+ arises from the expansion of some macro located before the outer
+ conditionals.}
+
+ One fix is to make sure that the outer conditionals are expanded before the
+ inner loop is executed, e.g. this will be the case if the inner loop is
+ located inside one of the branches of the conditional.
+
+ Another approach is to enclose, if feasible, the inner loop in a group of
+ its own.
+ \item \emph{if the replacement text closes a group (e.g. from a |&| inside an
+ alignment), the conditionals will lose their ascribed meanings and end up
+ possibly undefined, depending whether there is some outer loop whose
+ execution started before the opening of the group.}
+
+ The fix is to arrange things so that the conditionals are expanded
+ before \TeX\ encounters the closing-group token.
+ \end{itemize}
+\end{framed}
+
+\subsection{ \csh{xintBreakFor}, \csh{xintBreakForAndDo}}
+\label{xintBreakFor}\label{xintBreakForAndDo}
+
+One may immediately terminate an \csbxint{For} or \csbxint{For*} loop with
+\csbxint{BreakFor}.
+
+\begin{framed}
+ As it acts by clearing up all the rest of the replacement text when
+ encountered, it will not work from inside some |\if...\fi| without
+ suitable |\expandafter| or swapping technique.
+
+ Also it can't be used from inside braces as from there it can't see the end
+ of the replacement text.
+\end{framed}
+
+There is also \csbxint{BreakForAndDo}. Both are illustrated by various examples
+in the next section which is devoted to ``forever'' loops.
+
+\subsection{\csh{xintintegers}, \csh{xintdimensions}, \csh{xintrationals}}
+\label{xintegers}\label{xintintegers}
+\label{xintdimensions}\label{xintrationals}
+
+If the list argument to \csbxint{For} (or \csbxint{For*}, both are equivalent in
+this context) is \csbxint{integers} (equivalently \csbxint{egers}) or more
+generally \csbxint{integers}|[||start|\allowbreak|+|\allowbreak|delta||]|
+(\emph{the whole within braces}!)%
+%
+\footnote{the |start+delta| optional specification may have extra spaces
+ around the plus sign of near the square brackets, such spaces are
+ removed. The same applies with \csa{xintdimensions} and
+ \csa{xintrationals}.},
+%
+then \csbxint{For} does an infinite iteration where
+|#1| (or |#2|, \dots, |#9|) will run through the arithmetic sequence of (short)
+integers with initial value |start| and increment |delta| (default values:
+|start=1|, |delta=1|; if the optional argument is present it must contains both
+of them, and they may be explicit integers, or macros or count registers). The
+|#1| (or |#2|, \dots, |#9|) will stand for |\numexpr <opt sign><digits>\relax|,
+and the litteral representation as a string of digits can thus be obtained as
+\fbox{\csa{the\#1}} or |\number#1|. Such a |#1| can be used in an |\ifnum| test
+with no need to be postfixed with a space or a |\relax| and one should
+\emph{not} add them.
+
+If the list argument is \csbxint{dimensions} or more generally
+\csbxint{dimensions}|[||start|\allowbreak|+|\allowbreak|delta||]| (\emph{within
+ braces}!), then
+\csbxint{For} does an infinite iteration where |#1| (or |#2|, \dots, |#9|) will
+run through the arithmetic sequence of dimensions with initial value
+|start| and increment |delta|. Default values: |start=0pt|, |delta=1pt|; if
+the optional argument is present it must contain both of them, and they may
+be explicit specifications, or macros, or dimen registers, or length macros
+in \LaTeX{} (the stretch and shrink components will be discarded). The |#1|
+will be |\dimexpr <opt sign><digits>sp\relax|, from which one can get the
+litteral (approximate) representation in points via |\the#1|. So |#1| can be
+used anywhere \TeX{} expects a dimension (and there is no need in conditionals
+to insert a |\relax|, and one should \emph{not} do it), and to print its value
+one uses \fbox{\csa{the\#1}}. The chosen representation guarantees exact
+incrementation with no rounding errors accumulating from converting into
+points at each step.
+
+
+
+
+
+
+If the list argument to \csbxint{For} (or \csbxint{For*}) is \csbxint{rationals}
+or more generally
+\csbxint{rationals}|[||start|\allowbreak|+|\allowbreak|delta||]| (\emph{within
+ braces}!), then \csbxint{For} does an infinite iteration where |#1| (or |#2|,
+\dots, |#9|) will run through the arithmetic sequence of \xintfracname fractions
+with initial value |start| and increment |delta| (default values: |start=1/1|,
+|delta=1/1|). This loop works \emph{only with \xintfracname loaded}. if the
+optional argument is present it must contain both of them, and they may be given
+in any of the formats recognized by \xintfracname (fractions, decimal
+numbers, numbers in scientific notations, numerators and denominators in
+scientific notation, etc...) , or as macros or count registers (if they are
+short integers). The |#1| (or |#2|, \dots, |#9|) will be an |a/b| fraction
+(without a |[n]| part), where
+the denominator |b| is the product of the denominators of
+|start| and |delta| (for reasons of speed |#1| is not reduced to irreducible
+form, and for another reason explained later |start| and |delta| are not put
+either into irreducible form; the input may use explicitely \csa{xintIrr} to
+achieve that).
+\begin{everbatim*}
+\begingroup\small
+\noindent\parbox{\dimexpr\linewidth-3em}{\color[named]{OrangeRed}%
+\xintFor #1 in {\xintrationals [10/21+1/21]} \do
+{#1=\xintifInt {#1}
+ {\textcolor{blue}{\xintTrunc{10}{#1}}}
+ {\xintTrunc{10}{#1}}% display in blue if an integer
+ \xintifGt {#1}{1.123}{\xintBreakFor}{, }%
+ }}
+\endgroup\smallskip
+\end{everbatim*}
+
+\smallskip The example above confirms that computations are done exactly, and
+illustrates that the two initial (reduced) denominators are not multiplied when
+they are found to be equal. It is thus recommended to input |start| and |delta|
+with a common smallest possible denominator, or as fixed point numbers with the
+same numbers of digits after the decimal mark; and this is also the reason why
+|start| and |delta| are not by default made irreducible. As internally the
+computations are done with numerators and denominators completely expanded, one
+should be careful not to input numbers in scientific notation with exponents in
+the hundreds, as they will get converted into as many zeroes.
+
+\begin{everbatim*}
+\noindent\parbox{\dimexpr.7\linewidth}{\raggedright
+\xintFor #1 in {\xintrationals [0.000+0.125]} \do
+{\edef\tmp{\xintTrunc{3}{#1}}%
+ \xintifInt {#1}
+ {\textcolor{blue}{\tmp}}
+ {\tmp}%
+ \xintifGt {#1}{2}{\xintBreakFor}{, }%
+ }}\smallskip
+\end{everbatim*}
+
+We see here that \csbxint{Trunc} outputs (deliberately) zero as $0$, not (here)
+$0.000$, the idea being not to lose the information that the truncated thing was
+truly zero. Perhaps this behaviour should be changed? or made optional? Anyhow
+printing of fixed points numbers should be dealt with via dedicated packages
+such as |numprint| or |siunitx|.\par
+
+
+\subsection{\csh{xintForpair}, \csh{xintForthree}, \csh{xintForfour}}\label{xintForpair}\label{xintForthree}\label{xintForfour}
+
+The syntax\ntype{on} is illustrated in this
+example. The notation is the usual one for |n|-uples, with parentheses and
+commas. Spaces around commas and parentheses are ignored.
+%
+\begin{everbatim*}
+{\centering\begin{tabular}{cccc}
+ \xintForpair #1#2 in { ( A , a ) , ( B , b ) , ( C , c ) } \do {%
+ \xintForpair #3#4 in { ( X , x ) , ( Y , y ) , ( Z , z ) } \do {%
+ $\Biggl($\begin{tabular}{cc}
+ -#1- & -#3-\\
+ -#4- & -#2-\\
+ \end{tabular}$\Biggr)$&}\\\noalign{\vskip1\jot}}%
+\end{tabular}\\}
+\end{everbatim*}
+
+\csbxint{Forpair} must be followed by either |#1#2|, |#2#3|, |#3#4|, \dots, or
+|#8#9| with |#1| usable as an alias for |#1#2|, |#2| as alias for |#2#3|,
+etc \dots\ and similarly for \csbxint{Forthree} (using |#1#2#3| or simply
+|#1|, |#2#3#4| or simply |#2|, \dots) and \csbxint{Forfour} (with |#1#2#3#4|
+etc\dots).
+
+Nesting works as long as the macro parameters are distinct among |#1|, |#2|,
+..., |#9|. A macro which expands to an \csa{xintFor} or a
+\csa{xintFor(pair,three,four)} can be used in another one with no constraint
+about using distinct macro parameters.
+
+|\par| tokens are accepted in both the comma separated list and the
+replacement text.
+
+
+\subsection{\csh{xintAssign}}\label{xintAssign}
+
+\csa{xintAssign}\meta{braced things}\csa{to}%
+\meta{as many cs as they are things} %\ntype{{(f$\to$\lowast [x)}{\lowast N}}
+%
+defines (without checking if something gets overwritten) the control sequences
+on the right of \csa{to} to expand to the successive tokens or braced items
+located to the left of \csa{to}. \csa{xintAssign} is not an expandable macro.
+
+\fexpan sion is first applied to the material in front of \csa{xintAssign}
+which is fetched as one argument if it is braced. Then the expansion of this
+argument is examined and successive items are assigned to the macros following
+|\to|. There must be exactly as many macros as items. No check is done. The
+macro assignments are done with removal of one level of brace pairs from each
+item.
+
+After the initial \fexpan sion, each assigned (brace-stripped) item will be
+expanded according to the setting of the optional parameter.
+
+For example |\xintAssign [e]...| means that all assignments are done using
+|\edef|. With |[f]| the assignments will be made using
+\hyperref[fdef]{\ttfamily\char92fdef}. The default is simply to make the
+definitions with |\def|, corresponding to an empty optional paramter |[]|.
+Possibilities for the optional parameter are: |[], [g], [e], [x], [o], [go],
+[oo], [goo], [f], [gf]|. For example |[oo]| means a double expansion.
+\begin{everbatim*}
+\xintAssign \xintiiDivision{1000000000000}{133333333}\to\Q\R
+\meaning\Q\newline
+\meaning\R\newline
+\xintAssign {{\xintiiDivision{1000000000000}{133333333}}}\to\X
+\meaning\X\newline
+\xintAssign [oo]{{\xintiiDivision{1000000000000}{133333333}}}\to\X
+\meaning\X\newline
+\xintAssign \xintiiPow{7}{13}\to\SevenToThePowerThirteen
+\meaning\SevenToThePowerThirteen\par
+\end{everbatim*}
+
+Two special cases:
+\begin{itemize}[nosep]
+\item if after this initial expansion no brace is found immediately after
+ \csa{xintAssign}, it is assumed that there is only one control sequence
+ following |\to|, and this control sequence is then defined via |\def| (or
+ what is set-up by the optional parameter) to expand to the material between
+ \csa{xintAssign} and \csa{to}.
+\item if the material between \csa{xintAssign} and |\to| is enclosed in two
+ brace pairs, the first brace pair is removed, then the \fexpan sion is
+ immediately stopped by the inner brace pair, hence \csa{xintAssign} now
+ finds a unique item and thus defines only a single macro to be this item,
+ which is now stripped of the second pair of braces.
+\end{itemize}
+
+
+\emph{Note:} prior to release |1.09j|, |\xintAssign| did an |\edef| by default
+for each item assignment but it now does |\def| corresponding to no or empty
+optional parameter.
+
+It is allowed for the successive braced items to be separated by spaces. They
+are removed during the assignments. But if a single macro is defined (which
+happens if the argument after \fexpan sion does not start with a brace),
+naturally the scooped up material has all intervening spaces, as it is
+considered a
+single item. But an upfront initial space will have been absorbed by \fexpan
+sion.
+\begin{everbatim*}
+\def\X{ {a} {b} {c} {d} }\def\Y { u {a} {b} {c} {d} }
+\xintAssign\X\to\A\B\C\D
+\xintAssign\Y\to\Z
+\meaning\A, \meaning\B, \meaning\C, \meaning\D+++\newline
+\meaning\Z+++\par
+\end{everbatim*}
+As usual successive space characters in input make for a single \TeX\ space token.
+
+
+\subsection{\csh{xintAssignArray}}\label{xintAssignArray}
+
+\xintAssignArray \xintBezout {1000}{113}\to\Bez
+
+\csa{xintAssignArray}\meta{braced things}\csa{to}\csa{myArray}
+%
+%\ntype{{(f$\to$\lowast x)}N}
+%
+first expands fully what comes immediately after |\xintAssignArray| and
+expects to find a list of braced things |{A}{B}...| (or tokens). It then
+defines \csa{myArray} as a macro with one parameter, such that \csa{myArray\x}
+expands to give the |x|th braced thing of this original
+list (the argument \texttt{\x} itself is fed to a |\numexpr| by |\myArray|,
+and |\myArray| expands in two steps to its output). With |0| as parameter,
+\csa{myArray}|{0}| returns the number |M| of elements of the array so that the
+successive elements are \csa{myArray}|{1}|, \dots, \csa{myArray}|{M}|.
+%
+\leftedline{|\xintAssignArray \xintBezout {1000}{113}\to\Bez|} will set
+|\Bez{0}| to \dtt{\Bez0}, |\Bez{1}| to \dtt{\Bez1}, |\Bez{2}| to
+\dtt{\Bez2}, and |\Bez{3}| to \dtt{\Bez3}:
+\dtt{$\Bez1\times1000+\Bez2\times113=\Bez3$.}
+This macro is incompatible with expansion-only contexts.
+
+\csa{xintAssignArray} admits an optional parameter, for example
+|\xintAssignArray [e]| means that the definitions of the macros will be made
+with |\edef|. The empty optional parameter (default) means that definitions
+are done with |\def|. Other possibilities: |[], [o], [oo], [f]|. Contrarily to
+\csbxint{Assign} one can not use the |g| here to make the definitions global.
+For this, one should rather do |\xintAssignArray| within a group starting with
+|\globaldefs 1|.
+
+
+\subsection{\csh{xintDigitsOf}}\label{xintDigitsOf}
+
+This is a synonym for \csbxint{AssignArray},\ntype{fN} to be used to define
+an array giving all the digits of a given (positive, else the minus sign will
+be treated as first item) number.
+\begingroup\xintDigitsOf\xintiiPow {7}{500}\to\digits
+%
+\leftedline{|\xintDigitsOf\xintiiPow {7}{500}\to\digits|}
+\noindent $7^{500}$ has |\digits{0}=|\digits{0} digits, and the 123rd among them
+(starting from the most significant) is
+|\digits{123}=|\digits{123}.
+\endgroup
+
+\subsection{\csh{xintRelaxArray}}\label{xintRelaxArray}
+
+\csa{xintRelaxArray}\csa{myArray} %\ntype{N}
+%
+(globally) sets to \csa{relax} all macros which were defined by the previous
+\csa{xintAssignArray} with \csa{myArray} as array macro.
+
+\clearpage
+\let\xinttoolsnameUp\undefined
+
+\ifnum\NoSourceCode=1
+\bigskip
+\begin{framed}
+ \small This documentation has been compiled without the source code,
+ which is available in the separate file:
+ %
+ \centeredline{|sourcexint.pdf|,}
+ %
+ which will open in a PDF viewer via |texdoc sourcexint.pdf|.
+
+ To produce a single file including both the user documentation and the
+ source code:
+ \begin{itemize}
+ \item run |etex| on |xint.dtx| to generate |xint.tex| among other files,
+ \item edit |xint.tex| to set the |\NoSourceCode| toggle within it to |0|,
+ \item run |make clean| and then |make xint.pdf|.
+ \end{itemize}
+ This will need |latexmk|; if not available you will need in replacement of
+ the last step to execute manually |latex| on |xint.tex| (thrice)
+ then |dvipdfmx|.
+\end{framed}
+\fi
+
+\ifnum\dosourcexint=1
++fi
++catcode`\ 0
+\catcode0 15 % retour à la normale, peu importe
+\catcode`\+ 12
+\etocignoredepthtags
+\etocsetnexttocdepth{section}
+\tableofcontents
+\makeatletter
+\@gobble\fi
+\StopEventually{\end{document}\endinput}
+\ifnum\dosourcexint=1
+\renewcommand{\etocaftertochook}{\addvspace{\bigskipamount}}
+\etocsettocstyle {}{}
+\clearpage
+% \newgeometry{%hmarginratio=4:3,
+% hscale=0.7,vscale=0.75}% ATTENTION \newgeometry fait
+% % un reset de vscale si on ne le
+% % précise pas ici !!!
+\else
+\clearpage
+\fi
+
+\makeatletter
+
+\def\MARGEPAGENO{1.25em}
+\etocsettocdepth{subsubsection}% 2015/09/15
+
+\etocdepthtag.toc {implementation}
+\addtocontents{toc}{\gdef\string\sectioncouleur{[named]{RoyalPurple}}}
+
+\def\storedlinecounts {}
+\def\StoreCodelineNo #1{\edef\storedlinecounts{%
+ \unexpanded\expandafter{\storedlinecounts}%
+ {{#1}{\the\c@CodelineNo}}}\c@CodelineNo\z@ }
+
+% \macrocode
+% ==========
+% 2014/11/04 did some hack with active characters à la upquote for
+% straight quotes, but this is now irrelevant as we use suitable font
+% from newtxtt with straight quotes.
+
+%
+% Actually, I should not at all rely on the doc class, I should do it all by
+% myself. As I don't use at all \DocInput (which caused me loads of problems
+% back then when I was trying to get a workflow satisfying my views on how
+% .dtx files should be structured), there is not much rationale for using the
+% doc class.
+
+\def\macrocode{\macro@code
+ \frenchspacing \@vobeyspaces
+ \makestarlowast
+ \xmacro@code }
+
+\def\macro@font {\ttbfamily }% slashed 0
+
+% \lverb
+% ======
+
+% Définition de \lverb
+% Has become more complicated for 1.2l
+\catcode`_ 11
+{\catcode32\active%
+\gdef\myobeyspaces{\catcode32\active\def {\leavevmode\kern\fontcharwd\font`X}}}
+\def\lverbpercent {\catcode32\active\lverbpercent_a}%
+\def\lverbpercent_a #1{%
+ \if\XINT_sptoken\detokenize{#1}\xint_dothis{\catcode32 10 }\fi
+ \if-\detokenize{#1}\xint_dothis{\par #1}\fi
+ \if(\detokenize{#1}\xint_dothis{\par\bgroup\myobeyspaces\obeylines}\fi
+ \if:\detokenize{#1}\xint_dothis{}\fi
+ \if)\detokenize{#1}\xint_dothis{\egroup\everypar{\hskip-\parindent\everypar{}}}\fi
+ \if!\detokenize{#1}\xint_dothis{\lverbpercent}\fi
+ \ifx#1\lverbpercent\xint_dothis{\catcode32 10 \par #1}\fi
+ \xint_orthat{\catcode32 10 #1}%
+}
+\catcode`_ 8
+\long\def\lverb {%
+ \relax\par\smallskip%\noindent\null
+ \begingroup
+ \bgroup
+ \aftergroup\@@par \aftergroup\endgroup \aftergroup\medskip
+ \let\do\do@noligs \verbatim@nolig@list
+ \let\do\@makeother \dospecials
+ \catcode32 10 \catcode`\& 14 \catcode`\$ 0
+ \catcode`\% \active
+ \begingroup\lccode`\~`\%\lowercase{\endgroup\let~\lverbpercent}%
+ \MicroFont % sera donc en couleur.
+ \@lverb
+}
+
+\def\@lverb #1{\catcode`#1\active
+ \lccode`\~`#1\lowercase{\let~\egroup}}%
+
+\def\MicroFont {%\ttzfamily
+ \color[named]{Purple}\makestarlowast }
+
+% privatecodecomments
+% ===================
+\newenvironment{privatecodecomments}
+ {\par \textbf{\textcolor{red}{COMMENTAIRES PRIVÉS.}}\par
+ \begingroup\lccode`\~`\%\lowercase{\endgroup\let~\lverbpercent}%
+ \catcode`\%\active}
+ {\par \textbf{\textcolor{red}{FIN DES COMMENTAIRES PRIVÉS.}}\par}
+
+% \changed
+% ========
+
+\def\changed#1#2{%
+ \par\smallskip\noindent
+ \textbf{#1\if\relax\detokenize{#2}\relax\else\space(#2)\fi.}%
+% \hangindent\leftmarginii
+ \hangindent\parindent
+}
+
+% Hyperlinks
+% ==========
+
+% renew some definitions (new labels, prefixed with src-)
+
+% hyperlink and slash
+\DeclareRobustCommand\csbxint[1]
+ {\hyperref[\detokenize{src-xint#1}]%
+ {{\char92\mbox{xint}\-\endlinechar-1
+ \makestarlowast \catcode`_ 12 \catcode`^ 12
+ \scantokens\expandafter{\detokenize{#1}}}}}
+
+\DeclareRobustCommand\csbXINT[1]
+ {\hyperref[\detokenize{src-XINT#1}]%
+ {{\char92\mbox{XINT}\-\endlinechar-1
+ \makestarlowast \catcode`_ 12 \catcode`^ 12
+ \scantokens\expandafter{\detokenize{#1}}}}}
+
+\DeclareRobustCommand\csb [1]
+ {\hyperref[\detokenize{src-#1}]%
+ {{\char92 \endlinechar-1
+ \makestarlowast \catcode`_ 12 \catcode`^ 12
+ \scantokens\expandafter{\detokenize{#1}}}}}
+
+% hyperlink and no slash
+\DeclareRobustCommand\csbn[1]
+ {\hyperref[\detokenize{src-#1}]%
+ {{\endlinechar-1
+ \makestarlowast \catcode`_ 12 \catcode`^ 12
+ \scantokens\expandafter{\detokenize{#1}}}}}
+
+% HACK OF \@sect
+% ==============
+% goal is to add labels but without having to modify currently
+% existing mark-up in sources. But KOMA annoyingly makes an extra
+% step needed. 2018/06/11
+\let\original@sect\@sect
+\def\@sect#1#2#3#4#5#6[#7]#8{\original@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]%
+ {\begingroup
+ %not possible because of KOMA wrappers
+ %\def\csh##1{\csa{##1}\label{\detokenize{src-##1}}}%
+ \let\csh\cshintitle
+ \let\cshn\cshnintitle
+ #8%
+ \endgroup}%
+}%
+\def\cshintitle#1{\csa{#1}%
+ \label{\detokenize{src-#1}}%
+ %\expandafter\DescribeMacro\csname#1\endcsname
+ }
+% \csan: no backslash
+\def\cshnintitle#1{\csan{#1}\label{\detokenize{src-#1}}}
+
+%% END OF MACRO DEFINITIONS FOR SOURCEXINT
+
+\def\xintImpRunningHeader{{\catcode`,12\relax
+ \DOCxintfrontpage,
+ \xintkernelnameimp,
+ \xinttoolsnameimp,
+ \xintcorenameimp,
+ \xintnameimp,
+ \xintbinhexnameimp,
+ \xintgcdnameimp,
+ \xintfracnameimp,
+ \xintseriesnameimp,
+ \xintcfracnameimp,
+ \xintexprnameimp,
+ \xinttrignameimp, \xintlognameimp}}
+\markboth{\makebox[0pt]{\xintImpRunningHeader}}{\makebox[0pt]{\xintImpRunningHeader}}
+
+\makeatother
+
+\section{Introduction to the implementation (recent changes)}
+
+This is \expandafter|\xintbndlversion| of \expandafter|\xintbndldate|.
+
+Please refer to |CHANGES.pdf| or |CHANGES.html|.\centeredline{Internet:
+ \url{http://mirrors.ctan.org/macros/generic/xint/CHANGES.html}}
+We keep here only a brief timeline of the most important changes.
+
+At |1.3e| the indices which were added at |1.3c| got removed: their inclusion
+caused extra time in the build of |sourcexint.pdf|, larger file size, and the
+macros created using |\csname...\endcsname| were not indexed, of course the
+indexing of functions would have needed systematic extra mark-up. Besides
+their functionality is advantageously made available via the search function
+in PDF viewers. Already the local tables of contents are useful enough most of
+the time when one searches something.
+
+\begin{itemize}
+\item Release |1.3e| of |2019/04/01|: \xinttrignameimp, \xintlognameimp,
+ \csbxint{defefunc} ``non-protected'' variant of \csbxint{deffunc}. Indices
+ removed from |sourcexint.pdf|.
+\item Release |1.3d| of |2019/01/06|: bugfix of |1.2p| bug for division with a
+ zero dividend and a one-digit divisor, \csbxint{eval} et al. wrappers,
+ |gcd()| and |lcm()| work with fractions.
+\item Release |1.3c| of |2018/06/17|: documentation better hyperlinked,
+ |sourcexint.pdf| with indices of macros. Colon in |:=| now optional for
+ \csbxint{defvar} and \csbxint{deffunc}.
+\item Release |1.3b| of |2018/05/18|: randomness related additions (still WIP).
+\item Release |1.3a| of |2018/03/07|: efficiency fix of the mechanism for
+ recursive functions.
+\item Release |1.3| of |2018/03/01|: addition and subtraction use
+ systematically least common multiple of denominators. Extensive
+ under-the-hood refactoring of \csbxint{NewExpr} and \csbxint{deffunc} which
+ now allow recursive definitions. Removal of |1.2o| deprecated macros.
+\item Release |1.2q| of |2018/02/06|: bugfix release (|1.2l| subtraction bug
+ in special situation); tacit multiplication extended to cases such as
+ |10!20!30!|.
+\item Release |1.2p| of |2017/12/05|: maps |//| and |/:| to the floored, not
+ truncated, division. Simultaneous assignments possible with \csbxint{defvar}.
+ Efficiency improvements in \xinttoolsnameimp.
+\item Release |1.2o| of |2017/08/29|: massive deprecations of those macros
+ from \xintcorenameimp and \xintnameimp which filtered their arguments via
+ \csbxint{Num}.
+\item Release |1.2n| of |2017/08/06|: improvements of \xintbinhexnameimp.
+\item Release |1.2m| of |2017/07/31|: rewrite of \xintbinhexnameimp in the
+ style of the |1.2| techniques.
+\item Release |1.2l| of |2017/07/26|: under the hood efficiency improvements
+ in the style of the |1.2| techniques; subtraction refactored. Compatibility
+ of most \xintfracnameimp macros with arguments using non-delimited
+ |\the\numexpr| or |\the\mathcode| etc...
+\item Release |1.2i| of |2016/12/13|: under the hood efficiency improvements
+ in the style of the |1.2| techniques.
+\item Release |1.2| of |2015/10/10|: complete refactoring of the core
+ arithmetic macros and faster \csbxint{expr} parser.
+\item Release |1.1| of |2014/10/28|: extensive changes in \xintexprnameimp.
+ Addition and subtraction do not multiply denominators blindly but sometimes
+ produce smaller ones. Also with that release, packages \xintkernelnameimp
+ and \xintcorenameimp got extracted from \xinttoolsnameimp and \xintnameimp.
+\end{itemize}
+
+Some parts of the code still date back to the initial release, and
+ at that time I was learning my trade in expandable TeX macro programming.
+ At some point in the future, I will have to re-examine the older parts of
+ the code.
+
+Warning: pay attention when looking at the code to the catcode configuration
+as found in \csbXINT{_setcatcodes}. Additional temporary configuration is used
+at some locations. For example |!| is of catcode letter in \xintexprnameimp
+and there are locations with funny catcodes e.g. using some letters with the
+math shift catcode.
+
+\MakePercentIgnore
+%\def\gardesactifs {^^A
+%\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 }
+%\def\gardesinactifs {^^A
+%\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12 }
+%\gardesactifs
+%\let</dtx>\relax
+%\let<*xintkernel>\gardesinactifs
+%</dtx>^^A--------------------------------------------------------
+%<*xintkernel>^^A-------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; fill-column: 78; -*-
+% \clearpage\csname xintkernelnameUp\endcsname
+% \section {Package \xintkernelnameimp implementation}
+% \RaisedLabel{sec:kernelimp}
+%
+% \localtableofcontents
+%
+% This package provides the common minimal code base for loading management
+% and catcode control and also a few programming utilities. With |1.2| a few
+% more helper macros and all |\chardef|'s have been moved here. The package is
+% loaded by both |xintcore.sty| and |xinttools.sty| hence by all other
+% packages.
+%
+% \changed{1.1}{}
+% separated package.
+%
+% \changed{1.2i}{}
+% \csbxint{replicate}, \csbxint{gobble}, \csbxint{LengthUpTo}
+% and \csbxint{LastItem}, and faster \csbxint{Length}.
+%
+% \changed{1.3b}{}
+% \csbxint{UniformDeviate}.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \catcode95=11 % _
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \let\z\relax
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintkernel}{\numexpr not available, aborting input}%
+ \def\z{\endgroup\endinput}%
+ \else
+ \expandafter
+ \ifx\csname XINTsetupcatcodes\endcsname\relax
+ \else
+ \y{xintkernel}{I was already loaded, aborting input}%
+ \def\z{\endgroup\endinput}%
+ \fi
+ \fi
+ \ifx\z\relax\else\expandafter\z\fi%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_setcatcodes}, \csh{XINT_storecatcodes},
+% \csh{XINT_restorecatcodes_endinput}}
+% \begin{macrocode}
+ \def\PrepareCatcodes
+ {%
+ \endgroup
+ \def\XINT_restorecatcodes
+ {% takes care of all, to allow more economical code in modules
+ \catcode0=\the\catcode0 %
+ \catcode59=\the\catcode59 % ; xintexpr
+ \catcode126=\the\catcode126 % ~ xintexpr
+ \catcode39=\the\catcode39 % ' xintexpr
+ \catcode34=\the\catcode34 % " xintbinhex, and xintexpr
+ \catcode63=\the\catcode63 % ? xintexpr
+ \catcode124=\the\catcode124 % | xintexpr
+ \catcode38=\the\catcode38 % & xintexpr
+ \catcode64=\the\catcode64 % @ xintexpr
+ \catcode33=\the\catcode33 % ! xintexpr
+ \catcode93=\the\catcode93 % ] -, xintfrac, xintseries, xintcfrac
+ \catcode91=\the\catcode91 % [ -, xintfrac, xintseries, xintcfrac
+ \catcode36=\the\catcode36 % $ xintgcd only
+ \catcode94=\the\catcode94 % ^
+ \catcode96=\the\catcode96 % `
+ \catcode47=\the\catcode47 % /
+ \catcode41=\the\catcode41 % )
+ \catcode40=\the\catcode40 % (
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode62=\the\catcode62 % >
+ \catcode60=\the\catcode60 % <
+ \catcode58=\the\catcode58 % :
+ \catcode46=\the\catcode46 % .
+ \catcode45=\the\catcode45 % -
+ \catcode44=\the\catcode44 % ,
+ \catcode35=\the\catcode35 % #
+ \catcode95=\the\catcode95 % _
+ \catcode125=\the\catcode125 % }
+ \catcode123=\the\catcode123 % {
+ \endlinechar=\the\endlinechar
+ \catcode13=\the\catcode13 % ^^M
+ \catcode32=\the\catcode32 %
+ \catcode61=\the\catcode61\relax % =
+ }%
+ \edef\XINT_restorecatcodes_endinput
+ {%
+ \XINT_restorecatcodes\noexpand\endinput %
+ }%
+ \def\XINT_setcatcodes
+ {%
+ \catcode61=12 % =
+ \catcode32=10 % space
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode95=11 % _ LETTER
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=11 % : LETTER
+ \catcode60=12 % <
+ \catcode62=12 % >
+ \catcode43=12 % +
+ \catcode42=12 % *
+ \catcode40=12 % (
+ \catcode41=12 % )
+ \catcode47=12 % /
+ \catcode96=12 % `
+ \catcode94=11 % ^ LETTER
+ \catcode36=3 % $
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode33=12 % ! (xintexpr.sty will use catcode 11)
+ \catcode64=11 % @ LETTER
+ \catcode38=7 % & for \romannumeral`&&@ trick.
+ \catcode124=12 % |
+ \catcode63=11 % ? LETTER
+ \catcode34=12 % "
+ \catcode39=12 % '
+ \catcode126=3 % ~ MATH
+ \catcode59=12 % ;
+ \catcode0=12 % for \romannumeral`&&@ trick
+ }%
+ \XINT_setcatcodes
+ }%
+\PrepareCatcodes
+% \end{macrocode}
+% Other modules could possibly be loaded under a different catcode regime.
+% \begin{macrocode}
+\def\XINTsetupcatcodes {% for use by other modules
+ \edef\XINT_restorecatcodes_endinput
+ {%
+ \XINT_restorecatcodes\noexpand\endinput %
+ }%
+ \XINT_setcatcodes
+}%
+% \end{macrocode}
+% \subsection{Package identification}
+%
+% Inspired from \textsc{Heiko Oberdiek}'s packages. Modified in |1.09b| to allow
+% re-use in the other modules. Also I assume now that if |\ProvidesPackage|
+% exists it then does define |\ver@<pkgname>.sty|, code of |HO| for some reason
+% escaping me (compatibility with LaTeX 2.09 or other things ??) seems to set
+% extra precautions.
+%
+% |1.09c| uses e-\TeX{} |\ifdefined|.
+% \begin{macrocode}
+\ifdefined\ProvidesPackage
+ \let\XINT_providespackage\relax
+\else
+ \def\XINT_providespackage #1#2[#3]%
+ {\immediate\write-1{Package: #2 #3}%
+ \expandafter\xdef\csname ver@#2.sty\endcsname{#3}}%
+\fi
+\XINT_providespackage
+\ProvidesPackage {xintkernel}%
+ [2019/04/05 1.3e Paraphernalia for the xint packages (JFB)]%
+% \end{macrocode}
+% \subsection{Constants}
+% \begin{macrocode}
+\chardef\xint_c_ 0
+\chardef\xint_c_i 1
+\chardef\xint_c_ii 2
+\chardef\xint_c_iii 3
+\chardef\xint_c_iv 4
+\chardef\xint_c_v 5
+\chardef\xint_c_vi 6
+\chardef\xint_c_vii 7
+\chardef\xint_c_viii 8
+\chardef\xint_c_ix 9
+\chardef\xint_c_x 10
+\chardef\xint_c_xii 12
+\chardef\xint_c_xiv 14
+\chardef\xint_c_xvi 16
+\chardef\xint_c_xviii 18
+\chardef\xint_c_xxii 22
+\chardef\xint_c_ii^v 32
+\chardef\xint_c_ii^vi 64
+\chardef\xint_c_ii^vii 128
+\mathchardef\xint_c_ii^viii 256
+\mathchardef\xint_c_ii^xii 4096
+\mathchardef\xint_c_x^iv 10000
+% \end{macrocode}
+% \subsection{(WIP) \csh{xint_texuniformdeviate} and needed counts}
+% \begin{macrocode}
+\ifdefined\pdfuniformdeviate \let\xint_texuniformdeviate\pdfuniformdeviate\fi
+\ifdefined\uniformdeviate \let\xint_texuniformdeviate\uniformdeviate \fi
+\ifx\xint_texuniformdeviate\relax\let\xint_texuniformdeviate\xint_undefined\fi
+\ifdefined\xint_texuniformdeviate
+ \csname newcount\endcsname\xint_c_ii^xiv
+ \xint_c_ii^xiv 16384 % "4000, 2**14
+ \csname newcount\endcsname\xint_c_ii^xxi
+ \xint_c_ii^xxi 2097152 % "200000, 2**21
+\fi
+% \end{macrocode}
+% \subsection{Token management utilities}
+% \changed{1.3b}{}
+% |\xint_gobandstop_...| macros because this is handy for
+% \csbxint{RandomDigits}.
+% \begin{macrocode}
+\def\XINT_tmpa { }%
+\ifx\XINT_tmpa\space\else
+ \immediate\write-1{Package xintkernel Warning: ATTENTION!}%
+ \immediate\write-1{\string\space\XINT_tmpa macro does not have its normal
+ meaning.}%
+ \immediate\write-1{\XINT_tmpa\XINT_tmpa\XINT_tmpa\XINT_tmpa
+ All kinds of catastrophes will ensue!!!!}%
+\fi
+\def\XINT_tmpb {}%
+\ifx\XINT_tmpb\empty\else
+ \immediate\write-1{Package xintkernel Warning: ATTENTION!}%
+ \immediate\write-1{\string\empty\XINT_tmpa macro does not have its normal
+ meaning.}%
+ \immediate\write-1{\XINT_tmpa\XINT_tmpa\XINT_tmpa\XINT_tmpa
+ All kinds of catastrophes will ensue!!!!}%
+\fi
+\let\XINT_tmpa\relax \let\XINT_tmpb\relax
+\ifdefined\space\else\def\space { }\fi
+\ifdefined\empty\else\def\empty {}\fi
+\let\xint_gobble_\empty
+\long\def\xint_gobble_i #1{}%
+\long\def\xint_gobble_ii #1#2{}%
+\long\def\xint_gobble_iii #1#2#3{}%
+\long\def\xint_gobble_iv #1#2#3#4{}%
+\long\def\xint_gobble_v #1#2#3#4#5{}%
+\long\def\xint_gobble_vi #1#2#3#4#5#6{}%
+\long\def\xint_gobble_vii #1#2#3#4#5#6#7{}%
+\long\def\xint_gobble_viii #1#2#3#4#5#6#7#8{}%
+\let\xint_gob_andstop_\space
+\long\def\xint_gob_andstop_i #1{ }%
+\long\def\xint_gob_andstop_ii #1#2{ }%
+\long\def\xint_gob_andstop_iii #1#2#3{ }%
+\long\def\xint_gob_andstop_iv #1#2#3#4{ }%
+\long\def\xint_gob_andstop_v #1#2#3#4#5{ }%
+\long\def\xint_gob_andstop_vi #1#2#3#4#5#6{ }%
+\long\def\xint_gob_andstop_vii #1#2#3#4#5#6#7{ }%
+\long\def\xint_gob_andstop_viii #1#2#3#4#5#6#7#8{ }%
+\long\def\xint_firstofone #1{#1}%
+\long\def\xint_firstoftwo #1#2{#1}%
+\long\def\xint_secondoftwo #1#2{#2}%
+\let\xint_stop_aftergobble\xint_gob_andstop_i
+\long\def\xint_stop_atfirstofone #1{ #1}%
+\long\def\xint_stop_atfirstoftwo #1#2{ #1}%
+\long\def\xint_stop_atsecondoftwo #1#2{ #2}%
+\long\def\xint_exchangetwo_keepbraces #1#2{{#2}{#1}}%
+% \end{macrocode}
+% \subsection{``gob til'' macros and UD style fork}
+% \begin{macrocode}
+\long\def\xint_gob_til_R #1\R {}%
+\long\def\xint_gob_til_W #1\W {}%
+\long\def\xint_gob_til_Z #1\Z {}%
+\long\def\xint_gob_til_zero #10{}%
+\long\def\xint_gob_til_one #11{}%
+\long\def\xint_gob_til_zeros_iii #1000{}%
+\long\def\xint_gob_til_zeros_iv #10000{}%
+\long\def\xint_gob_til_eightzeroes #100000000{}%
+\long\def\xint_gob_til_dot #1.{}%
+\long\def\xint_gob_til_G #1G{}%
+\long\def\xint_gob_til_minus #1-{}%
+\long\def\xint_UDzerominusfork #10-#2#3\krof {#2}%
+\long\def\xint_UDzerofork #10#2#3\krof {#2}%
+\long\def\xint_UDsignfork #1-#2#3\krof {#2}%
+\long\def\xint_UDwfork #1\W#2#3\krof {#2}%
+\long\def\xint_UDXINTWfork #1\XINT_W#2#3\krof {#2}%
+\long\def\xint_UDzerosfork #100#2#3\krof {#2}%
+\long\def\xint_UDonezerofork #110#2#3\krof {#2}%
+\long\def\xint_UDsignsfork #1--#2#3\krof {#2}%
+\let\xint:\char
+\long\def\xint_gob_til_xint:#1\xint:{}%
+\def\xint_bracedstopper{\xint:}%
+\long\def\xint_gob_til_exclam #1!{}%
+\long\def\xint_gob_til_sc #1;{}%
+% \end{macrocode}
+% \subsection{\csh{xint_afterfi}}
+% \begin{macrocode}
+\long\def\xint_afterfi #1#2\fi {\fi #1}%
+% \end{macrocode}
+% \subsection{\csh{xint_bye}, \csh{xint_Bye}}
+% \changed{1.09}{}
+% |\xint_bye|
+% \changed{1.2i}{}
+% |\xint_Bye| for \csbxint{DSRr} and \csbxint{Round}. Also |\xint_stop_afterbye|.
+% \begin{macrocode}
+\long\def\xint_bye #1\xint_bye {}%
+\long\def\xint_Bye #1\xint_bye {}%
+\long\def\xint_stop_afterbye #1\xint_bye { }%
+% \end{macrocode}
+% \subsection{\csh{xintdothis}, \csh{xintorthat}}
+% \changed{1.1}{}
+% \changed{1.2}{} names without underscores.
+%
+% To be used this way:
+% \lverb|
+%( \if..\xint_dothis{..}\fi
+%: \if..\xint_dothis{..}\fi
+%: \if..\xint_dothis{..}\fi
+%: ...more such...
+%: \xint_orthat{...}
+%) |
+% Ancient testing indicated it is more efficient to list first the more
+% improbable clauses.
+% \begin{macrocode}
+\long\def\xint_dothis #1#2\xint_orthat #3{\fi #1}% 1.1
+\let\xint_orthat \xint_firstofone
+\long\def\xintdothis #1#2\xintorthat #3{\fi #1}%
+\let\xintorthat \xint_firstofone
+% \end{macrocode}
+% \subsection{\csh{xint_zapspaces}}
+% \changed{1.1}{}
+%
+% This little utility zaps leading, intermediate, trailing, spaces in
+% completely expanding context (|\edef|, |\csname...\endcsname|).
+% \centeredline{Usage: |\xint_zapspaces foo<space>\xint_gobble_i|}
+%
+% Will remove some brace pairs (but not spaces inside them). By the way the
+% |\zap@spaces| of LaTeX2e handles unexpectedly things such as
+% \centeredline{|\zap@spaces 1 {22} 3 4 \@empty|} (spaces are not all
+% removed). This does not happen with |\xint_zapspaces|.
+%
+% Explanation: if there are leading spaces, then the first |#1| will be empty,
+% and the first |#2| being undelimited will be stripped from all the remaining
+% leading spaces, if there was more than one to start with. Of course
+% brace-stripping may occur. And this iterates: each time a |#2| is removed,
+% either we then have spaces and next |#1| will be empty, or we have no spaces
+% and |#1| will end at the first space. Ultimately |#2| will be
+% |\xint_gobble_i|.
+%
+% This is not really robust as it may switch the expansion order of macros,
+% and the |\xint_zapspaces| token might end up being fetched up by a macro.
+% But it is enough for our purposes, for example:
+% \centeredline{|\the\numexpr\xint_zapspaces 1 2 \xint_gobble_i\relax|}
+% expands to |12|, not to |12\relax|.
+%
+% \changed{1.2e}{} |\xint_zapspaces_o|. Expansion of |#1| should not gobble a
+% space!
+%
+% \changed{1.2i}{} made |\long|.
+% \begin{macrocode}
+\long\def\xint_zapspaces #1 #2{#1#2\xint_zapspaces }% 1.1
+\long\def\xint_zapspaces_o #1{\expandafter\xint_zapspaces#1 \xint_gobble_i}%
+% \end{macrocode}
+% \subsection{\csh{odef}, \csh{oodef}, \csh{fdef}}
+% May be prefixed with |\global|. No parameter text.
+% \begin{macrocode}
+\def\xintodef #1{\expandafter\def\expandafter#1\expandafter }%
+\def\xintoodef #1{\expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#1%
+ \expandafter\expandafter\expandafter }%
+\def\xintfdef #1#2%
+ {\expandafter\def\expandafter#1\expandafter{\romannumeral`&&@#2}}%
+\ifdefined\odef\else\let\odef\xintodef\fi
+\ifdefined\oodef\else\let\oodef\xintoodef\fi
+\ifdefined\fdef\else\let\fdef\xintfdef\fi
+% \end{macrocode}
+% \subsection{\csh{xintReverseOrder}}
+% \changed{1.0}{} does not expand its argument. The whole of xint codebase now
+% contains only two calls to |\XINT_rord_main| (in \xintgcdnameimp).
+%
+% Attention: removes brace pairs (and swallows spaces).
+%
+% For digit tokens a faster reverse macro is provided by (|1.2|)
+% \csbxint{ReverseDigits} in \xintnameimp.
+%
+% For comma separated items, |1.2g| has \csbxint{CSVReverse} in
+% \xinttoolsnameimp.
+% \begin{macrocode}
+\def\xintReverseOrder {\romannumeral0\xintreverseorder }%
+\long\def\xintreverseorder #1%
+{%
+ \XINT_rord_main {}#1%
+ \xint:
+ \xint_bye\xint_bye\xint_bye\xint_bye
+ \xint_bye\xint_bye\xint_bye\xint_bye
+ \xint:
+}%
+\long\def\XINT_rord_main #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_bye #9\XINT_rord_cleanup\xint_bye
+ \XINT_rord_main {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT_rord_cleanup #1{%
+\long\def\XINT_rord_cleanup\xint_bye\XINT_rord_main ##1##2\xint:
+{%
+ \expandafter#1\xint_gob_til_xint: ##1%
+}}\XINT_rord_cleanup { }%
+% \end{macrocode}
+% \subsection{\csh{xintLength}}
+% \changed{1.0}{} does not expand its argument. See \csbxint{NthElt}|{0}| from
+% \xinttoolsnameimp which f-expands its argument.
+%
+% \changed{1.2g}{} added \csbxint{CSVLength} to \xinttoolsnameimp.
+%
+% \changed{1.2i}{} rewrote this venerable macro. New code about 40\%
+% faster across all lengths.
+% \begin{macrocode}
+\def\xintLength {\romannumeral0\xintlength }%
+\def\xintlength #1{\long\def\xintlength ##1%
+{%
+ \expandafter#1\the\numexpr\XINT_length_loop
+ ##1\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ \relax
+}}\xintlength{ }%
+\long\def\XINT_length_loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\XINT_length_finish_a\xint:
+ \xint_c_ix+\XINT_length_loop
+}%
+\def\XINT_length_finish_a\xint:\xint_c_ix+\XINT_length_loop
+ #1#2#3#4#5#6#7#8#9%
+{%
+ #9\xint_bye
+}%
+% \end{macrocode}
+% \subsection{\csh{xintLastItem}}
+% \changed{1.2i}{2016/12/10}
+% Output empty if input empty. One level
+% of braces removed in output. Does not expand its argument.
+% \begin{macrocode}
+\def\xintLastItem {\romannumeral0\xintlastitem }%
+\long\def\xintlastitem #1%
+{%
+ \XINT_last_loop {}.#1%
+ {\xint:\XINT_last_loop_enda}{\xint:\XINT_last_loop_endb}%
+ {\xint:\XINT_last_loop_endc}{\xint:\XINT_last_loop_endd}%
+ {\xint:\XINT_last_loop_ende}{\xint:\XINT_last_loop_endf}%
+ {\xint:\XINT_last_loop_endg}{\xint:\XINT_last_loop_endh}\xint_bye
+}%
+\long\def\XINT_last_loop #1.#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9%
+ {#8}{#7}{#6}{#5}{#4}{#3}{#2}{#1}\xint:
+ \XINT_last_loop {#9}.%
+}%
+\long\def\XINT_last_loop_enda #1#2\xint_bye{ #1}%
+\long\def\XINT_last_loop_endb #1#2#3\xint_bye{ #2}%
+\long\def\XINT_last_loop_endc #1#2#3#4\xint_bye{ #3}%
+\long\def\XINT_last_loop_endd #1#2#3#4#5\xint_bye{ #4}%
+\long\def\XINT_last_loop_ende #1#2#3#4#5#6\xint_bye{ #5}%
+\long\def\XINT_last_loop_endf #1#2#3#4#5#6#7\xint_bye{ #6}%
+\long\def\XINT_last_loop_endg #1#2#3#4#5#6#7#8\xint_bye{ #7}%
+\long\def\XINT_last_loop_endh #1#2#3#4#5#6#7#8#9\xint_bye{ #8}%
+% \end{macrocode}
+% \subsection{\csh{xintLengthUpTo}}
+% \changed{1.2i}{} for use by \csbxint{Keep} and \csbxint{Trim}
+% (\xinttoolsnameimp). The argument N **must be non-negative**.
+%
+% |\xintLengthUpTo{N}{List}| produces |-0| if length(List)>N, else it returns
+% N-length(List). Hence subtracting it from N always computes min(N,length(List)).
+% \changed{1.2j}{} changed ending and interface to core loop.
+% \begin{macrocode}
+\def\xintLengthUpTo {\romannumeral0\xintlengthupto}%
+\long\def\xintlengthupto #1#2%
+{%
+ \expandafter\XINT_lengthupto_loop
+ \the\numexpr#1.#2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_vii\xint_c_vi\xint_c_v\xint_c_iv
+ \xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye.%
+}%
+\def\XINT_lengthupto_loop_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_lengthupto_gt
+ -\XINT_lengthupto_loop
+ \krof #1%
+}%
+\long\def\XINT_lengthupto_gt #1\xint_bye.{-0}%
+\long\def\XINT_lengthupto_loop #1.#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\XINT_lengthupto_finish_a\xint:%
+ \expandafter\XINT_lengthupto_loop_a\the\numexpr #1-\xint_c_viii.%
+}%
+\def\XINT_lengthupto_finish_a\xint:\expandafter\XINT_lengthupto_loop_a
+ \the\numexpr #1-\xint_c_viii.#2#3#4#5#6#7#8#9%
+{%
+ \expandafter\XINT_lengthupto_finish_b\the\numexpr #1-#9\xint_bye
+}%
+\def\XINT_lengthupto_finish_b #1#2.%
+{%
+ \xint_UDsignfork
+ #1{-0}%
+ -{ #1#2}%
+ \krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintreplicate}}
+% \changed{1.2i}{}
+%
+% This is cloned from LaTeX3's |\prg_replicate:nn|, see Joseph's post
+% at
+% \centeredline{http://tex.stackexchange.com/questions/16189/repeat-command-n-times}
+% I
+% posted there an alternative not using the chained |\csname|'s but it is a bit
+% less efficient (except perhaps for thousands of repetitions).
+% The code in Joseph's post does |abs(#1)| replications when input |#1| is negative
+% and then activates an error triggering macro; here we simply do nothing when
+% |#1| is negative.
+% \centeredline{Usage: |\romannumeral\xintreplicate{N}{stuff}|}
+%
+% When |N| is already explicit digits (even |N=0|, but non-negative) one can
+% call the macro as
+% \centeredline{|\romannumeral\XINT_rep N\endcsname {foo}|}
+% to skip the |\numexpr|.
+% \begin{macrocode}
+\def\xintreplicate#1%
+ {\expandafter\XINT_replicate\the\numexpr#1\endcsname}%
+\def\XINT_replicate #1{\xint_UDsignfork
+ #1\XINT_rep_neg
+ -\XINT_rep
+ \krof #1}%
+\long\def\XINT_rep_neg #1\endcsname #2{\xint_c_}%
+\def\XINT_rep #1{\csname XINT_rep_f#1\XINT_rep_a}%
+\def\XINT_rep_a #1{\csname XINT_rep_#1\XINT_rep_a}%
+\def\XINT_rep_\XINT_rep_a{\endcsname}%
+\long\expandafter\def\csname XINT_rep_0\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}}%
+\long\expandafter\def\csname XINT_rep_1\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1}%
+\long\expandafter\def\csname XINT_rep_2\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1}%
+\long\expandafter\def\csname XINT_rep_3\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1}%
+\long\expandafter\def\csname XINT_rep_4\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_5\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_6\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_7\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_8\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_9\endcsname #1%
+ {\endcsname{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_f0\endcsname #1%
+ {\xint_c_}%
+\long\expandafter\def\csname XINT_rep_f1\endcsname #1%
+ {\xint_c_ #1}%
+\long\expandafter\def\csname XINT_rep_f2\endcsname #1%
+ {\xint_c_ #1#1}%
+\long\expandafter\def\csname XINT_rep_f3\endcsname #1%
+ {\xint_c_ #1#1#1}%
+\long\expandafter\def\csname XINT_rep_f4\endcsname #1%
+ {\xint_c_ #1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_f5\endcsname #1%
+ {\xint_c_ #1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_f6\endcsname #1%
+ {\xint_c_ #1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_f7\endcsname #1%
+ {\xint_c_ #1#1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_f8\endcsname #1%
+ {\xint_c_ #1#1#1#1#1#1#1#1}%
+\long\expandafter\def\csname XINT_rep_f9\endcsname #1%
+ {\xint_c_ #1#1#1#1#1#1#1#1#1}%
+% \end{macrocode}
+% \subsection{\csh{xintgobble}}
+% \changed{1.2i}{}
+%
+% I hesitated about allowing as many as |9^6-1=531440| tokens to gobble, but
+% |9^5-1=59058| is too low for playing with long decimal expansions.
+% \centeredline{Usage: |\romannumeral\xintgobble{N}...|}
+%
+% \begin{macrocode}
+\def\xintgobble #1%
+ {\csname xint_c_\expandafter\XINT_gobble_a\the\numexpr#1.0}%
+\def\XINT_gobble #1.{\csname xint_c_\XINT_gobble_a #1.0}%
+\def\XINT_gobble_a #1{\xint_gob_til_zero#1\XINT_gobble_d0\XINT_gobble_b#1}%
+\def\XINT_gobble_b #1.#2%
+ {\expandafter\XINT_gobble_c
+ \the\numexpr (#1+\xint_c_v)/\xint_c_ix-\xint_c_i\expandafter.%
+ \the\numexpr #2+\xint_c_i.#1.}%
+\def\XINT_gobble_c #1.#2.#3.%
+ {\csname XINT_g#2\the\numexpr#3-\xint_c_ix*#1\relax\XINT_gobble_a #1.#2}%
+\def\XINT_gobble_d0\XINT_gobble_b0.#1{\endcsname}%
+\expandafter\let\csname XINT_g10\endcsname\endcsname
+\long\expandafter\def\csname XINT_g11\endcsname#1{\endcsname}%
+\long\expandafter\def\csname XINT_g12\endcsname#1#2{\endcsname}%
+\long\expandafter\def\csname XINT_g13\endcsname#1#2#3{\endcsname}%
+\long\expandafter\def\csname XINT_g14\endcsname#1#2#3#4{\endcsname}%
+\long\expandafter\def\csname XINT_g15\endcsname#1#2#3#4#5{\endcsname}%
+\long\expandafter\def\csname XINT_g16\endcsname#1#2#3#4#5#6{\endcsname}%
+\long\expandafter\def\csname XINT_g17\endcsname#1#2#3#4#5#6#7{\endcsname}%
+\long\expandafter\def\csname XINT_g18\endcsname#1#2#3#4#5#6#7#8{\endcsname}%
+\expandafter\let\csname XINT_g20\endcsname\endcsname
+\long\expandafter\def\csname XINT_g21\endcsname #1#2#3#4#5#6#7#8#9%
+ {\endcsname}%
+\long\expandafter\edef\csname XINT_g22\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g21\endcsname}%
+\long\expandafter\edef\csname XINT_g23\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g22\endcsname}%
+\long\expandafter\edef\csname XINT_g24\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g23\endcsname}%
+\long\expandafter\edef\csname XINT_g25\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g24\endcsname}%
+\long\expandafter\edef\csname XINT_g26\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g25\endcsname}%
+\long\expandafter\edef\csname XINT_g27\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g26\endcsname}%
+\long\expandafter\edef\csname XINT_g28\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g27\endcsname}%
+\expandafter\let\csname XINT_g30\endcsname\endcsname
+\long\expandafter\edef\csname XINT_g31\endcsname #1#2#3#4#5#6#7#8#9%
+ {\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g32\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g31\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g33\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g32\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g34\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g33\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g35\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g34\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g36\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g35\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g37\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g36\expandafter\noexpand\csname XINT_g28\endcsname}%
+\long\expandafter\edef\csname XINT_g38\endcsname #1#2#3#4#5#6#7#8#9%
+ {\noexpand\csname XINT_g37\expandafter\noexpand\csname XINT_g28\endcsname}%
+\expandafter\let\csname XINT_g40\endcsname\endcsname
+\expandafter\edef\csname XINT_g41\endcsname
+ {\noexpand\csname XINT_g38\expandafter\noexpand\csname XINT_g31\endcsname}%
+\expandafter\edef\csname XINT_g42\endcsname
+ {\noexpand\csname XINT_g41\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g43\endcsname
+ {\noexpand\csname XINT_g42\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g44\endcsname
+ {\noexpand\csname XINT_g43\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g45\endcsname
+ {\noexpand\csname XINT_g44\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g46\endcsname
+ {\noexpand\csname XINT_g45\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g47\endcsname
+ {\noexpand\csname XINT_g46\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g48\endcsname
+ {\noexpand\csname XINT_g47\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\let\csname XINT_g50\endcsname\endcsname
+\expandafter\edef\csname XINT_g51\endcsname
+ {\noexpand\csname XINT_g48\expandafter\noexpand\csname XINT_g41\endcsname}%
+\expandafter\edef\csname XINT_g52\endcsname
+ {\noexpand\csname XINT_g51\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g53\endcsname
+ {\noexpand\csname XINT_g52\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g54\endcsname
+ {\noexpand\csname XINT_g53\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g55\endcsname
+ {\noexpand\csname XINT_g54\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g56\endcsname
+ {\noexpand\csname XINT_g55\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g57\endcsname
+ {\noexpand\csname XINT_g56\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g58\endcsname
+ {\noexpand\csname XINT_g57\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\let\csname XINT_g60\endcsname\endcsname
+\expandafter\edef\csname XINT_g61\endcsname
+ {\noexpand\csname XINT_g58\expandafter\noexpand\csname XINT_g51\endcsname}%
+\expandafter\edef\csname XINT_g62\endcsname
+ {\noexpand\csname XINT_g61\expandafter\noexpand\csname XINT_g61\endcsname}%
+\expandafter\edef\csname XINT_g63\endcsname
+ {\noexpand\csname XINT_g62\expandafter\noexpand\csname XINT_g61\endcsname}%
+\expandafter\edef\csname XINT_g64\endcsname
+ {\noexpand\csname XINT_g63\expandafter\noexpand\csname XINT_g61\endcsname}%
+\expandafter\edef\csname XINT_g65\endcsname
+ {\noexpand\csname XINT_g64\expandafter\noexpand\csname XINT_g61\endcsname}%
+\expandafter\edef\csname XINT_g66\endcsname
+ {\noexpand\csname XINT_g65\expandafter\noexpand\csname XINT_g61\endcsname}%
+\expandafter\edef\csname XINT_g67\endcsname
+ {\noexpand\csname XINT_g66\expandafter\noexpand\csname XINT_g61\endcsname}%
+\expandafter\edef\csname XINT_g68\endcsname
+ {\noexpand\csname XINT_g67\expandafter\noexpand\csname XINT_g61\endcsname}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{xintUniformDeviate}}
+% \changed{1.3b}{} See user manual for related information.
+% \begin{macrocode}
+\ifdefined\xint_texuniformdeviate
+ \expandafter\xint_firstoftwo
+\else\expandafter\xint_secondoftwo
+\fi
+{%
+ \def\xintUniformDeviate#1%
+ {\the\numexpr\expandafter\XINT_uniformdeviate_sgnfork\the\numexpr#1\xint:}%
+ \def\XINT_uniformdeviate_sgnfork#1%
+ {%
+ \if-#1\XINT_uniformdeviate_neg\fi \XINT_uniformdeviate{}#1%
+ }%
+ \def\XINT_uniformdeviate_neg\fi\XINT_uniformdeviate#1-%
+ {%
+ \fi-\numexpr\XINT_uniformdeviate\relax
+ }%
+ \def\XINT_uniformdeviate#1#2\xint:
+ {%(
+ \expandafter\XINT_uniformdeviate_a\the\numexpr%
+ -\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^vii*\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^xiv*\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^xxi*\xint_texuniformdeviate\xint_c_ii^vii%
+ +\xint_texuniformdeviate#2\xint:/#2)*#2\xint:+#2\fi\relax#1%
+ }%
+ \def\XINT_uniformdeviate_a #1\xint:
+ {%
+ \expandafter\XINT_uniformdeviate_b\the\numexpr#1-(#1%
+ }%
+ \def\XINT_uniformdeviate_b#1#2\xint:{#1#2\if-#1}%
+}%
+{%
+ \def\xintUniformDeviate#1%
+ {%
+ \the\numexpr
+ \XINT_expandableerror{No uniformdeviate at engine level, returning 0.}%
+ 0\relax
+ }%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintMessage}, \csh{ifxintverbose}}
+% \changed{1.2c}{} for use by \csbxint{defvar} and \csbxint{deffunc} of
+% \xintexprnameimp.
+%
+% \changed{1.2e}{} uses |\write128| rather than |\write16| for compatibility
+% with future extended range of output streams, in LuaTeX in particular.
+%
+% \changed{1.3e}{} set the |\newlinechar|.
+% \begin{macrocode}
+\def\xintMessage #1#2#3{%
+ \edef\XINT_newlinechar{\the\newlinechar}%
+ \newlinechar10
+ \immediate\write128{Package #1 #2: (on line \the\inputlineno)}%
+ \immediate\write128{\space\space\space\space#3}%
+ \newlinechar\XINT_newlinechar\space
+}%
+\newif\ifxintverbose
+% \end{macrocode}
+% \subsection{\csh{ifxintglobaldefs}, \csh{XINT_global}}\label{src-xintglobaldefstrue}
+% \changed{1.3c}{}
+% \begin{macrocode}
+\newif\ifxintglobaldefs
+\def\XINT_global{\ifxintglobaldefs\global\fi}%
+% \end{macrocode}
+% \subsection{(WIP) Expandable error message}
+% \changed{1.2l}{} but really belongs to next major release beyond |1.3|.
+%
+% This is copied over from l3kernel code. I am using |\ ! /| control sequence
+% though, which must be left undefined. |\xintError:| would be 6 letters more
+% already.
+% \begin{macrocode}
+\def\XINT_expandableerror #1#2{%
+ \def\XINT_expandableerror ##1{%
+ \expandafter\expandafter\expandafter
+ \XINT_expandableerror_continue\xint_firstofone{#2#1##1#1}}%
+ \def\XINT_expandableerror_continue ##1#1##2#1{##1}%
+}%
+\begingroup\lccode`$ 32 \catcode`/ 11 \catcode`! 11 \catcode32 11 % $
+% \end{macrocode}
+% \begin{macrocode}
+\lowercase{\endgroup\XINT_expandableerror$\ ! /\let\ ! /\xint_undefined}% $
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintkernel}
+% \cleardoublepage\let\xintkernelnameUp\undefined
+%\gardesactifs
+%\let</xintkernel>\relax
+%\let<*xinttools>\gardesinactifs
+%</xintkernel>^^A-------------------------------------------------
+%<*xinttools>^^A--------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; -*-
+% \clearpage\csname xinttoolsnameUp\endcsname
+% \section{Package \xinttoolsnameimp implementation}
+% \RaisedLabel{sec:toolsimp}
+%
+% \localtableofcontents
+%
+% Release |1.09g| of |2013/11/22| splits off |xinttools.sty| from |xint.sty|.
+% Starting with |1.1|, \xinttoolsnameimp ceases being loaded automatically by
+% \xintnameimp.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xinttools.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintkernel.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xinttools}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xinttools.sty
+ \ifx\w\relax % but xintkernel.sty not yet loaded.
+ \def\z{\endgroup\input xintkernel.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintkernel.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintkernel}}%
+ \fi
+ \else
+ \aftergroup\endinput % xinttools already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xinttools}%
+ [2019/04/05 1.3e Expandable and non-expandable utilities (JFB)]%
+% \end{macrocode}
+% \lverb|\XINT_toks is used in macros such as \xintFor. It is not used
+% elsewhere in the xint bundle.|
+% \begin{macrocode}
+\newtoks\XINT_toks
+\xint_firstofone{\let\XINT_sptoken= } %<- space here!
+% \end{macrocode}
+% \subsection{\csh{xintgodef}, \csh{xintgoodef}, \csh{xintgfdef}}
+% \lverb|1.09i. For use in \xintAssign.|
+% \begin{macrocode}
+\def\xintgodef {\global\xintodef }%
+\def\xintgoodef {\global\xintoodef }%
+\def\xintgfdef {\global\xintfdef }%
+% \end{macrocode}
+% \subsection{\csh{xintRevWithBraces}}
+% \lverb|New with 1.06. Makes the expansion of its argument and then reverses
+% the resulting tokens or braced tokens, adding a pair of braces to each (thus,
+% maintaining it when it was already there.) The reason for
+% \xint:, here and in other locations, is in case #1 expands to nothing,
+% the \romannumeral-`0 must be stopped|
+% \begin{macrocode}
+\def\xintRevWithBraces {\romannumeral0\xintrevwithbraces }%
+\def\xintRevWithBracesNoExpand {\romannumeral0\xintrevwithbracesnoexpand }%
+\long\def\xintrevwithbraces #1%
+{%
+ \expandafter\XINT_revwbr_loop\expandafter{\expandafter}%
+ \romannumeral`&&@#1\xint:\xint:\xint:\xint:%
+ \xint:\xint:\xint:\xint:\xint_bye
+}%
+\long\def\xintrevwithbracesnoexpand #1%
+{%
+ \XINT_revwbr_loop {}%
+ #1\xint:\xint:\xint:\xint:%
+ \xint:\xint:\xint:\xint:\xint_bye
+}%
+\long\def\XINT_revwbr_loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\XINT_revwbr_finish_a\xint:%
+ \XINT_revwbr_loop {{#9}{#8}{#7}{#6}{#5}{#4}{#3}{#2}#1}%
+}%
+\long\def\XINT_revwbr_finish_a\xint:\XINT_revwbr_loop #1#2\xint_bye
+{%
+ \XINT_revwbr_finish_b #2\R\R\R\R\R\R\R\Z #1%
+}%
+\def\XINT_revwbr_finish_b #1#2#3#4#5#6#7#8\Z
+{%
+ \xint_gob_til_R
+ #1\XINT_revwbr_finish_c \xint_gobble_viii
+ #2\XINT_revwbr_finish_c \xint_gobble_vii
+ #3\XINT_revwbr_finish_c \xint_gobble_vi
+ #4\XINT_revwbr_finish_c \xint_gobble_v
+ #5\XINT_revwbr_finish_c \xint_gobble_iv
+ #6\XINT_revwbr_finish_c \xint_gobble_iii
+ #7\XINT_revwbr_finish_c \xint_gobble_ii
+ \R\XINT_revwbr_finish_c \xint_gobble_i\Z
+}%
+% \end{macrocode}
+% \lverb|1.1c revisited this old code and improved upon the earlier endings.|
+% \begin{macrocode}
+\def\XINT_revwbr_finish_c#1{%
+\def\XINT_revwbr_finish_c##1##2\Z{\expandafter#1##1}%
+}\XINT_revwbr_finish_c{ }%
+% \end{macrocode}
+% \subsection{\csh{xintZapFirstSpaces}}
+% \lverb|1.09f, written [2013/11/01]. Modified (2014/10/21) for release 1.1 to
+% correct the bug in case of an empty argument, or argument containing only
+% spaces, which had been forgotten in first version. New version is simpler than
+% the initial one. This macro does NOT expand its argument.|
+% \begin{macrocode}
+\def\xintZapFirstSpaces {\romannumeral0\xintzapfirstspaces }%
+\def\xintzapfirstspaces#1{\long
+\def\xintzapfirstspaces ##1{\XINT_zapbsp_a #1##1\xint:#1#1\xint:}%
+}\xintzapfirstspaces{ }%
+% \end{macrocode}
+% \lverb|If the original #1 started with a space, the grabbed #1 is empty. Thus
+% _again? will see #1=\xint_bye, and hand over control to _again which will loop
+% back into \XINT_zapbsp_a, with one initial space less. If the original #1 did
+% not start with a space, or was empty, then the #1 below will be a <sptoken>,
+% then an extract of the original #1, not empty and not starting with a space,
+% which contains what was up to the first <sp><sp> present in original #1, or,
+% if none preexisted, <sptoken> and all of #1 (possibly empty) plus an ending
+% \xint:. The added initial space will stop later the \romannumeral0. No
+% brace stripping is possible. Control is handed over to \XINT_zapbsp_b which
+% strips out the ending \xint:<sp><sp>\xint:|
+% \begin{macrocode}
+\def\XINT_zapbsp_a#1{\long\def\XINT_zapbsp_a ##1#1#1{%
+ \XINT_zapbsp_again?##1\xint_bye\XINT_zapbsp_b ##1#1#1}%
+}\XINT_zapbsp_a{ }%
+\long\def\XINT_zapbsp_again? #1{\xint_bye #1\XINT_zapbsp_again }%
+\xint_firstofone{\def\XINT_zapbsp_again\XINT_zapbsp_b} {\XINT_zapbsp_a }%
+\long\def\XINT_zapbsp_b #1\xint:#2\xint:{#1}%
+% \end{macrocode}
+% \subsection{\csh{xintZapLastSpaces}}
+% \lverb+1.09f, written [2013/11/01]. +
+% \begin{macrocode}
+\def\xintZapLastSpaces {\romannumeral0\xintzaplastspaces }%
+\def\xintzaplastspaces#1{\long
+\def\xintzaplastspaces ##1{\XINT_zapesp_a {}\empty##1#1#1\xint_bye\xint:}%
+}\xintzaplastspaces{ }%
+% \end{macrocode}
+% \lverb|The \empty from \xintzaplastspaces is to prevent brace removal in the
+% #2 below. The \expandafter chain removes it.|
+% \begin{macrocode}
+\xint_firstofone {\long\def\XINT_zapesp_a #1#2 } %<- second space here
+ {\expandafter\XINT_zapesp_b\expandafter{#2}{#1}}%
+% \end{macrocode}
+% \lverb|Notice again an \empty added here. This is in preparation for possibly looping
+% back to \XINT_zapesp_a. If the initial #1 had no <sp><sp>, the stuff however
+% will not loop, because #3 will already be <some spaces>\xint_bye. Notice
+% that this macro fetches all way to the ending \xint:. This looks not
+% very efficient, but how often do we have to strip ending spaces from
+% something which also has inner stretches of _multiple_ space tokens ?;-). |
+% \begin{macrocode}
+\long\def\XINT_zapesp_b #1#2#3\xint:%
+ {\XINT_zapesp_end? #3\XINT_zapesp_e {#2#1}\empty #3\xint:}%
+% \end{macrocode}
+% \lverb|When we have been over all possible <sp><sp> things, we reach the
+% ending space tokens, and #3 will be a bunch of spaces (possibly none)
+% followed by \xint_bye. So the #1 in _end? will be \xint_bye. In all other cases
+% #1 can not be \xint_bye (assuming naturally this token does nor arise in
+% original input), hence control falls back to \XINT_zapesp_e which will loop back
+% to \XINT_zapesp_a.|
+% \begin{macrocode}
+\long\def\XINT_zapesp_end? #1{\xint_bye #1\XINT_zapesp_end }%
+% \end{macrocode}
+% \lverb|We are done. The #1 here has accumulated all the previous material,
+% and is stripped of its ending spaces, if any.|
+% \begin{macrocode}
+\long\def\XINT_zapesp_end\XINT_zapesp_e #1#2\xint:{ #1}%
+% \end{macrocode}
+% \lverb|We haven't yet reached the end, so we need to re-inject two space
+% tokens after what we have gotten so far. Then we loop.|
+% \begin{macrocode}
+\def\XINT_zapesp_e#1{%
+\long\def\XINT_zapesp_e ##1{\XINT_zapesp_a {##1#1#1}}%
+}\XINT_zapesp_e{ }%
+% \end{macrocode}
+% \subsection{\csh{xintZapSpaces}}
+% \lverb+1.09f, written [2013/11/01]. Modified for 1.1, 2014/10/21 as it has the
+% same bug as \xintZapFirstSpaces. We in effect do first \xintZapFirstSpaces,
+% then \xintZapLastSpaces.+
+% \begin{macrocode}
+\def\xintZapSpaces {\romannumeral0\xintzapspaces }%
+\def\xintzapspaces#1{%
+\long\def\xintzapspaces ##1% like \xintZapFirstSpaces.
+ {\XINT_zapsp_a #1##1\xint:#1#1\xint:}%
+}\xintzapspaces{ }%
+\def\XINT_zapsp_a#1{%
+\long\def\XINT_zapsp_a ##1#1#1%
+ {\XINT_zapsp_again?##1\xint_bye\XINT_zapsp_b##1#1#1}%
+}\XINT_zapsp_a{ }%
+\long\def\XINT_zapsp_again? #1{\xint_bye #1\XINT_zapsp_again }%
+\xint_firstofone{\def\XINT_zapsp_again\XINT_zapsp_b} {\XINT_zapsp_a }%
+\xint_firstofone{\def\XINT_zapsp_b} {\XINT_zapsp_c }%
+\def\XINT_zapsp_c#1{%
+\long\def\XINT_zapsp_c ##1\xint:##2\xint:%
+ {\XINT_zapesp_a{}\empty ##1#1#1\xint_bye\xint:}%
+}\XINT_zapsp_c{ }%
+% \end{macrocode}
+% \subsection{\csh{xintZapSpacesB}}
+% \lverb+1.09f, written [2013/11/01]. Strips up to one pair of braces (but then
+% does not strip spaces inside).+
+% \begin{macrocode}
+\def\xintZapSpacesB {\romannumeral0\xintzapspacesb }%
+\long\def\xintzapspacesb #1{\XINT_zapspb_one? #1\xint:\xint:%
+ \xint_bye\xintzapspaces {#1}}%
+\long\def\XINT_zapspb_one? #1#2%
+ {\xint_gob_til_xint: #1\XINT_zapspb_onlyspaces\xint:%
+ \xint_gob_til_xint: #2\XINT_zapspb_bracedorone\xint:%
+ \xint_bye {#1}}%
+\def\XINT_zapspb_onlyspaces\xint:%
+ \xint_gob_til_xint:\xint:\XINT_zapspb_bracedorone\xint:%
+ \xint_bye #1\xint_bye\xintzapspaces #2{ }%
+\long\def\XINT_zapspb_bracedorone\xint:%
+ \xint_bye #1\xint:\xint_bye\xintzapspaces #2{ #1}%
+% \end{macrocode}
+% \subsection{\csh{xintCSVtoList}, \csh{xintCSVtoListNonStripped}}
+% \lverb|\xintCSVtoList transforms a,b,..,z into {a}{b}...{z}. The comma
+% separated list may be a macro which is first f-expanded. First included in
+% release 1.06. Here, use of \Z (and \R) perfectly safe.
+%
+% [2013/11/02]: Starting with 1.09f, automatically filters items with
+% \xintZapSpacesB to strip away all spaces around commas, and spaces at the start
+% and end of the list. The original is kept as \xintCSVtoListNonStripped, and is
+% faster. But ... it doesn't strip spaces.
+%
+% ATTENTION: if the input is empty the output contains one item (empty, of
+% course). This means an \xintFor loop always executes at least once the
+% iteration, contrarily to \xintFor*.|
+% \begin{macrocode}
+\def\xintCSVtoList {\romannumeral0\xintcsvtolist }%
+\long\def\xintcsvtolist #1{\expandafter\xintApply
+ \expandafter\xintzapspacesb
+ \expandafter{\romannumeral0\xintcsvtolistnonstripped{#1}}}%
+\def\xintCSVtoListNoExpand {\romannumeral0\xintcsvtolistnoexpand }%
+\long\def\xintcsvtolistnoexpand #1{\expandafter\xintApply
+ \expandafter\xintzapspacesb
+ \expandafter{\romannumeral0\xintcsvtolistnonstrippednoexpand{#1}}}%
+\def\xintCSVtoListNonStripped {\romannumeral0\xintcsvtolistnonstripped }%
+\def\xintCSVtoListNonStrippedNoExpand
+ {\romannumeral0\xintcsvtolistnonstrippednoexpand }%
+\long\def\xintcsvtolistnonstripped #1%
+{%
+ \expandafter\XINT_csvtol_loop_a\expandafter
+ {\expandafter}\romannumeral`&&@#1%
+ ,\xint_bye,\xint_bye,\xint_bye,\xint_bye
+ ,\xint_bye,\xint_bye,\xint_bye,\xint_bye,\Z
+}%
+\long\def\xintcsvtolistnonstrippednoexpand #1%
+{%
+ \XINT_csvtol_loop_a
+ {}#1,\xint_bye,\xint_bye,\xint_bye,\xint_bye
+ ,\xint_bye,\xint_bye,\xint_bye,\xint_bye,\Z
+}%
+\long\def\XINT_csvtol_loop_a #1#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_bye #9\XINT_csvtol_finish_a\xint_bye
+ \XINT_csvtol_loop_b {#1}{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}%
+}%
+\long\def\XINT_csvtol_loop_b #1#2{\XINT_csvtol_loop_a {#1#2}}%
+\long\def\XINT_csvtol_finish_a\xint_bye\XINT_csvtol_loop_b #1#2#3\Z
+{%
+ \XINT_csvtol_finish_b #3\R,\R,\R,\R,\R,\R,\R,\Z #2{#1}%
+}%
+% \end{macrocode}
+% \lverb|1.1c revisits this old code and improves upon the earlier endings.
+% But as the _d.. macros have already nine parameters, I needed the
+% \expandafter and \xint_gob_til_Z in finish_b (compare \XINT_keep_endb, or
+% also \XINT_RQ_end_b).|
+% \begin{macrocode}
+\def\XINT_csvtol_finish_b #1,#2,#3,#4,#5,#6,#7,#8\Z
+{%
+ \xint_gob_til_R
+ #1\expandafter\XINT_csvtol_finish_dviii\xint_gob_til_Z
+ #2\expandafter\XINT_csvtol_finish_dvii \xint_gob_til_Z
+ #3\expandafter\XINT_csvtol_finish_dvi \xint_gob_til_Z
+ #4\expandafter\XINT_csvtol_finish_dv \xint_gob_til_Z
+ #5\expandafter\XINT_csvtol_finish_div \xint_gob_til_Z
+ #6\expandafter\XINT_csvtol_finish_diii \xint_gob_til_Z
+ #7\expandafter\XINT_csvtol_finish_dii \xint_gob_til_Z
+ \R\XINT_csvtol_finish_di \Z
+}%
+\long\def\XINT_csvtol_finish_dviii #1#2#3#4#5#6#7#8#9{ #9}%
+\long\def\XINT_csvtol_finish_dvii #1#2#3#4#5#6#7#8#9{ #9{#1}}%
+\long\def\XINT_csvtol_finish_dvi #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}}%
+\long\def\XINT_csvtol_finish_dv #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}}%
+\long\def\XINT_csvtol_finish_div #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}}%
+\long\def\XINT_csvtol_finish_diii #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}{#5}}%
+\long\def\XINT_csvtol_finish_dii #1#2#3#4#5#6#7#8#9%
+ { #9{#1}{#2}{#3}{#4}{#5}{#6}}%
+\long\def\XINT_csvtol_finish_di\Z #1#2#3#4#5#6#7#8#9%
+ { #9{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
+% \end{macrocode}
+% \subsection{\csh{xintListWithSep}}
+% \lverb|1.04.
+% \xintListWithSep {\sep}{{a}{b}...{z}} returns a \sep b \sep ....\sep z. It
+% f-expands its second argument. The 'sep' may be \par's: the macro
+% \xintlistwithsep etc... are all declared long. 'sep' does not have to be a
+% single token. It is not expanded. The "list" argument may be empty.
+%
+% \xintListWithSepNoExpand does not f-expand its second argument.
+%
+% This venerable macro from 1.04 remained unchanged for a long time and was
+% finally refactored at 1.2p for increased speed. Tests done with a list of
+% identical {\x} items and a sep of \z demonstrated a speed increase of about:
+%( - 3x for 30 items,
+%: - 4.5x for 100 items,
+%: - 7.5x--8x for 1000 items.
+%) |
+% \begin{macrocode}
+\def\xintListWithSep {\romannumeral0\xintlistwithsep }%
+\def\xintListWithSepNoExpand {\romannumeral0\xintlistwithsepnoexpand }%
+\long\def\xintlistwithsep #1#2%
+ {\expandafter\XINT_lws\expandafter {\romannumeral`&&@#2}{#1}}%
+\long\def\xintlistwithsepnoexpand #1#2%
+{%
+ \XINT_lws_loop_a {#1}#2{\xint_bye\XINT_lws_e_vi}%
+ {\xint_bye\XINT_lws_e_v}{\xint_bye\XINT_lws_e_iv}%
+ {\xint_bye\XINT_lws_e_iii}{\xint_bye\XINT_lws_e_ii}%
+ {\xint_bye\XINT_lws_e_i}{\xint_bye\XINT_lws_e}%
+ {\xint_bye\expandafter\space}\xint_bye
+}%
+\long\def\XINT_lws #1#2%
+{%
+ \XINT_lws_loop_a {#2}#1{\xint_bye\XINT_lws_e_vi}%
+ {\xint_bye\XINT_lws_e_v}{\xint_bye\XINT_lws_e_iv}%
+ {\xint_bye\XINT_lws_e_iii}{\xint_bye\XINT_lws_e_ii}%
+ {\xint_bye\XINT_lws_e_i}{\xint_bye\XINT_lws_e}%
+ {\xint_bye\expandafter\space}\xint_bye
+}%
+\long\def\XINT_lws_loop_a #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_bye #9\xint_bye
+ \XINT_lws_loop_b {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}%
+}%
+\long\def\XINT_lws_loop_b #1#2#3#4#5#6#7#8#9%
+{%
+ \XINT_lws_loop_a {#1}{#2#1#3#1#4#1#5#1#6#1#7#1#8#1#9}%
+}%
+\long\def\XINT_lws_e_vi\xint_bye\XINT_lws_loop_b #1#2#3#4#5#6#7#8#9\xint_bye
+ { #2#1#3#1#4#1#5#1#6#1#7#1#8}%
+\long\def\XINT_lws_e_v\xint_bye\XINT_lws_loop_b #1#2#3#4#5#6#7#8\xint_bye
+ { #2#1#3#1#4#1#5#1#6#1#7}%
+\long\def\XINT_lws_e_iv\xint_bye\XINT_lws_loop_b #1#2#3#4#5#6#7\xint_bye
+ { #2#1#3#1#4#1#5#1#6}%
+\long\def\XINT_lws_e_iii\xint_bye\XINT_lws_loop_b #1#2#3#4#5#6\xint_bye
+ { #2#1#3#1#4#1#5}%
+\long\def\XINT_lws_e_ii\xint_bye\XINT_lws_loop_b #1#2#3#4#5\xint_bye
+ { #2#1#3#1#4}%
+\long\def\XINT_lws_e_i\xint_bye\XINT_lws_loop_b #1#2#3#4\xint_bye
+ { #2#1#3}%
+\long\def\XINT_lws_e\xint_bye\XINT_lws_loop_b #1#2#3\xint_bye
+ { #2}%
+% \end{macrocode}
+% \subsection{\csh{xintNthElt}}
+% \lverb?First included in release 1.06. Last refactored in 1.2j.
+%
+% \xintNthElt {i}{List} returns the i th item from List (one pair of braces
+% removed). The list is first f-expanded. The \xintNthEltNoExpand does no
+% expansion of its second argument. Both variants expand i inside \numexpr.
+%
+% With i = 0, the number of items is returned using \xintLength but with the
+% List argument f-expanded first.
+%
+% Negative values return the |i|th element from the end.
+%
+% When i is out of range, an empty value is returned.
+% ?
+% \begin{macrocode}
+\def\xintNthElt {\romannumeral0\xintnthelt }%
+\def\xintNthEltNoExpand {\romannumeral0\xintntheltnoexpand }%
+\long\def\xintnthelt #1#2{\expandafter\XINT_nthelt_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintntheltnoexpand #1{\expandafter\XINT_nthelt_a\the\numexpr #1.}%
+\def\XINT_nthelt_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_nthelt_zero
+ 0#1\XINT_nthelt_neg
+ 0-{\XINT_nthelt_pos #1}%
+ \krof
+}%
+\def\XINT_nthelt_zero #1.{\xintlength }%
+\long\def\XINT_nthelt_neg #1.#2%
+{%
+ \expandafter\XINT_nthelt_neg_a\the\numexpr\xint_c_i+\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ -#1.#2\xint_bye
+}%
+\def\XINT_nthelt_neg_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\xint_stop_afterbye
+ 0#1\xint_stop_afterbye
+ 0-{}%
+ \krof
+ \expandafter\XINT_nthelt_neg_b
+ \romannumeral\expandafter\XINT_gobble\the\numexpr-\xint_c_i+#1%
+}%
+\long\def\XINT_nthelt_neg_b #1#2\xint_bye{ #1}%
+\long\def\XINT_nthelt_pos #1.#2%
+{%
+ \expandafter\XINT_nthelt_pos_done
+ \romannumeral0\expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_x.%
+ #2\xint:\xint:\xint:\xint:\xint:%
+ \xint:\xint:\xint:\xint:\xint:%
+ \xint_bye
+}%
+\def\XINT_nthelt_pos_done #1{%
+\long\def\XINT_nthelt_pos_done ##1##2\xint_bye{%
+ \xint_gob_til_xint:##1\expandafter#1\xint_gobble_ii\xint:#1##1}%
+}\XINT_nthelt_pos_done{ }%
+% \end{macrocode}
+% \subsection{\csh{xintKeep}}
+% \lverb@&
+%
+% First included in release 1.09m.
+%
+% \xintKeep{i}{L} f-expands its second argument L. It then grabs the first i
+% items from L and discards the rest.
+%
+% ATTENTION: **each such kept item is returned inside a brace pair**
+% Use \xintKeepUnbraced to avoid that.
+%
+% For i equal or larger to the number N of items in (expanded) L, the full L
+% is returned (with braced items). For i=0, the macro returns an empty output.
+% For i<0, the macro discards the first N-|i| items. No brace pairs added to
+% the remaining items. For i is less or equal to -N, the full L is returned
+% (with no braces added.)
+%
+% \xintKeepNoExpand does not expand the L argument.
+%
+%
+%
+% Prior to 1.2i the code proceeded along a loop with no pre-computation of
+% the length of L, for the i>0 case. The faster 1.2i version takes advantage
+% of novel \xintLengthUpTo from xintkernel.sty.
+% @
+% \begin{macrocode}
+\def\xintKeep {\romannumeral0\xintkeep }%
+\def\xintKeepNoExpand {\romannumeral0\xintkeepnoexpand }%
+\long\def\xintkeep #1#2{\expandafter\XINT_keep_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintkeepnoexpand #1{\expandafter\XINT_keep_a\the\numexpr #1.}%
+\def\XINT_keep_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_keep_keepnone
+ 0#1\XINT_keep_neg
+ 0-{\XINT_keep_pos #1}%
+ \krof
+}%
+\long\def\XINT_keep_keepnone .#1{ }%
+\long\def\XINT_keep_neg #1.#2%
+{%
+ \expandafter\XINT_keep_neg_a\the\numexpr
+ #1-\numexpr\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye.#2%
+}%
+\def\XINT_keep_neg_a #1%
+{%
+ \xint_UDsignfork
+ #1{\expandafter\space\romannumeral\XINT_gobble}%
+ -\XINT_keep_keepall
+ \krof
+}%
+\def\XINT_keep_keepall #1.{ }%
+\long\def\XINT_keep_pos #1.#2%
+{%
+ \expandafter\XINT_keep_loop
+ \the\numexpr#1-\XINT_lengthupto_loop
+ #1.#2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_vii\xint_c_vi\xint_c_v\xint_c_iv
+ \xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye.%
+ -\xint_c_viii.{}#2\xint_bye%
+}%
+\def\XINT_keep_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_keep_loop_end-%
+ \expandafter\XINT_keep_loop
+ \the\numexpr#1#2-\xint_c_viii\expandafter.\XINT_keep_loop_pickeight
+}%
+\long\def\XINT_keep_loop_pickeight
+ #1#2#3#4#5#6#7#8#9{{#1{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}}%
+\def\XINT_keep_loop_end-\expandafter\XINT_keep_loop
+ \the\numexpr-#1-\xint_c_viii\expandafter.\XINT_keep_loop_pickeight
+ {\csname XINT_keep_end#1\endcsname}%
+\long\expandafter\def\csname XINT_keep_end1\endcsname
+ #1#2#3#4#5#6#7#8#9\xint_bye { #1{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+\long\expandafter\def\csname XINT_keep_end2\endcsname
+ #1#2#3#4#5#6#7#8\xint_bye { #1{#2}{#3}{#4}{#5}{#6}{#7}}%
+\long\expandafter\def\csname XINT_keep_end3\endcsname
+ #1#2#3#4#5#6#7\xint_bye { #1{#2}{#3}{#4}{#5}{#6}}%
+\long\expandafter\def\csname XINT_keep_end4\endcsname
+ #1#2#3#4#5#6\xint_bye { #1{#2}{#3}{#4}{#5}}%
+\long\expandafter\def\csname XINT_keep_end5\endcsname
+ #1#2#3#4#5\xint_bye { #1{#2}{#3}{#4}}%
+\long\expandafter\def\csname XINT_keep_end6\endcsname
+ #1#2#3#4\xint_bye { #1{#2}{#3}}%
+\long\expandafter\def\csname XINT_keep_end7\endcsname
+ #1#2#3\xint_bye { #1{#2}}%
+\long\expandafter\def\csname XINT_keep_end8\endcsname
+ #1#2\xint_bye { #1}%
+% \end{macrocode}
+% \subsection{\csh{xintKeepUnbraced}}
+% \lverb?1.2a. Same as \xintKeep but will *not* add (or maintain) brace pairs
+% around the kept items when length(L)>i>0.
+%
+% The name may cause a mis-understanding: for i<0, (i.e. keeping only
+% trailing items), there is no brace removal at all happening.
+%
+% Modified for 1.2i like \xintKeep.
+% ?
+% \begin{macrocode}
+\def\xintKeepUnbraced {\romannumeral0\xintkeepunbraced }%
+\def\xintKeepUnbracedNoExpand {\romannumeral0\xintkeepunbracednoexpand }%
+\long\def\xintkeepunbraced #1#2%
+ {\expandafter\XINT_keepunbr_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintkeepunbracednoexpand #1%
+ {\expandafter\XINT_keepunbr_a\the\numexpr #1.}%
+\def\XINT_keepunbr_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_keep_keepnone
+ 0#1\XINT_keep_neg
+ 0-{\XINT_keepunbr_pos #1}%
+ \krof
+}%
+\long\def\XINT_keepunbr_pos #1.#2%
+{%
+ \expandafter\XINT_keepunbr_loop
+ \the\numexpr#1-\XINT_lengthupto_loop
+ #1.#2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_vii\xint_c_vi\xint_c_v\xint_c_iv
+ \xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye.%
+ -\xint_c_viii.{}#2\xint_bye%
+}%
+\def\XINT_keepunbr_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_keepunbr_loop_end-%
+ \expandafter\XINT_keepunbr_loop
+ \the\numexpr#1#2-\xint_c_viii\expandafter.\XINT_keepunbr_loop_pickeight
+}%
+\long\def\XINT_keepunbr_loop_pickeight
+ #1#2#3#4#5#6#7#8#9{{#1#2#3#4#5#6#7#8#9}}%
+\def\XINT_keepunbr_loop_end-\expandafter\XINT_keepunbr_loop
+ \the\numexpr-#1-\xint_c_viii\expandafter.\XINT_keepunbr_loop_pickeight
+ {\csname XINT_keepunbr_end#1\endcsname}%
+\long\expandafter\def\csname XINT_keepunbr_end1\endcsname
+ #1#2#3#4#5#6#7#8#9\xint_bye { #1#2#3#4#5#6#7#8}%
+\long\expandafter\def\csname XINT_keepunbr_end2\endcsname
+ #1#2#3#4#5#6#7#8\xint_bye { #1#2#3#4#5#6#7}%
+\long\expandafter\def\csname XINT_keepunbr_end3\endcsname
+ #1#2#3#4#5#6#7\xint_bye { #1#2#3#4#5#6}%
+\long\expandafter\def\csname XINT_keepunbr_end4\endcsname
+ #1#2#3#4#5#6\xint_bye { #1#2#3#4#5}%
+\long\expandafter\def\csname XINT_keepunbr_end5\endcsname
+ #1#2#3#4#5\xint_bye { #1#2#3#4}%
+\long\expandafter\def\csname XINT_keepunbr_end6\endcsname
+ #1#2#3#4\xint_bye { #1#2#3}%
+\long\expandafter\def\csname XINT_keepunbr_end7\endcsname
+ #1#2#3\xint_bye { #1#2}%
+\long\expandafter\def\csname XINT_keepunbr_end8\endcsname
+ #1#2\xint_bye { #1}%
+% \end{macrocode}
+% \subsection{\csh{xintTrim}}
+% \lverb?&
+%
+% First included in release 1.09m.
+%
+% \xintTrim{i}{L} f-expands its second argument L. It then removes the first i
+% items from L and keeps the rest. For i equal or larger to the number N of
+% items in (expanded) L, the macro returns an empty output. For i=0, the
+% original (expanded) L is returned. For i<0, the macro proceeds from the
+% tail. It thus removes the last |i| items, i.e. it keeps the first N-|i|
+% items. For |i|>= N, the empty list is returned.
+%
+% \xintTrimNoExpand does not expand the L argument.
+%
+% Speed improvements with 1.2i for i<0 branch (which hands over to
+% \xintKeep). Speed improvements with 1.2j for i>0 branch which gobbles items
+% nine by nine despite not knowing in advance if it will go too far.
+% ?
+% \begin{macrocode}
+\def\xintTrim {\romannumeral0\xinttrim }%
+\def\xintTrimNoExpand {\romannumeral0\xinttrimnoexpand }%
+\long\def\xinttrim #1#2{\expandafter\XINT_trim_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xinttrimnoexpand #1{\expandafter\XINT_trim_a\the\numexpr #1.}%
+\def\XINT_trim_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_trim_trimnone
+ 0#1\XINT_trim_neg
+ 0-{\XINT_trim_pos #1}%
+ \krof
+}%
+\long\def\XINT_trim_trimnone .#1{ #1}%
+\long\def\XINT_trim_neg #1.#2%
+{%
+ \expandafter\XINT_trim_neg_a\the\numexpr
+ #1-\numexpr\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ .{}#2\xint_bye
+}%
+\def\XINT_trim_neg_a #1%
+{%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keep_loop\the\numexpr-\xint_c_viii+}%
+ -\XINT_trim_trimall
+ \krof
+}%
+\def\XINT_trim_trimall#1{%
+\def\XINT_trim_trimall {\expandafter#1\xint_bye}%
+}\XINT_trim_trimall{ }%
+% \end{macrocode}
+% \lverb|This branch doesn't pre-evaluate the length of the list argument.
+% Redone again for 1.2j, manages to trim nine by nine. Some non optimal
+% looking aspect of the code is for allowing sharing with \xintNthElt.|
+% \begin{macrocode}
+\long\def\XINT_trim_pos #1.#2%
+{%
+ \expandafter\XINT_trim_pos_done\expandafter\space
+ \romannumeral0\expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint:\xint:\xint:\xint:\xint:%
+ \xint:\xint:\xint:\xint:\xint:%
+ \xint_bye
+}%
+\def\XINT_trim_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_trim_finish-%
+ \expandafter\XINT_trim_loop\the\numexpr#1#2\XINT_trim_loop_trimnine
+}%
+\long\def\XINT_trim_loop_trimnine #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\XINT_trim_toofew\xint:-\xint_c_ix.%
+}%
+\def\XINT_trim_toofew\xint:{*\xint_c_}%
+\def\XINT_trim_finish#1{%
+\def\XINT_trim_finish-%
+ \expandafter\XINT_trim_loop\the\numexpr-##1\XINT_trim_loop_trimnine
+{%
+ \expandafter\expandafter\expandafter#1%
+ \csname xint_gobble_\romannumeral\numexpr\xint_c_ix-##1\endcsname
+}}\XINT_trim_finish{ }%
+\long\def\XINT_trim_pos_done #1\xint:#2\xint_bye {#1}%
+% \end{macrocode}
+% \subsection{\csh{xintTrimUnbraced}}
+% \lverb?1.2a. Modified in 1.2i like \xintTrim?
+% \begin{macrocode}
+\def\xintTrimUnbraced {\romannumeral0\xinttrimunbraced }%
+\def\xintTrimUnbracedNoExpand {\romannumeral0\xinttrimunbracednoexpand }%
+\long\def\xinttrimunbraced #1#2%
+ {\expandafter\XINT_trimunbr_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xinttrimunbracednoexpand #1%
+ {\expandafter\XINT_trimunbr_a\the\numexpr #1.}%
+\def\XINT_trimunbr_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_trim_trimnone
+ 0#1\XINT_trimunbr_neg
+ 0-{\XINT_trim_pos #1}%
+ \krof
+}%
+\long\def\XINT_trimunbr_neg #1.#2%
+{%
+ \expandafter\XINT_trimunbr_neg_a\the\numexpr
+ #1-\numexpr\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ .{}#2\xint_bye
+}%
+\def\XINT_trimunbr_neg_a #1%
+{%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keepunbr_loop\the\numexpr-\xint_c_viii+}%
+ -\XINT_trim_trimall
+ \krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintApply}}
+% \lverb|\xintApply {\macro}{{a}{b}...{z}} returns {\macro{a}}...{\macro{b}}
+% where each instance of \macro is f-expanded. The list itself is first
+% f-expanded and may thus be a macro. Introduced with release 1.04.|
+% \begin{macrocode}
+\def\xintApply {\romannumeral0\xintapply }%
+\def\xintApplyNoExpand {\romannumeral0\xintapplynoexpand }%
+\long\def\xintapply #1#2%
+{%
+ \expandafter\XINT_apply\expandafter {\romannumeral`&&@#2}%
+ {#1}%
+}%
+\long\def\XINT_apply #1#2{\XINT_apply_loop_a {}{#2}#1\xint_bye }%
+\long\def\xintapplynoexpand #1#2{\XINT_apply_loop_a {}{#1}#2\xint_bye }%
+\long\def\XINT_apply_loop_a #1#2#3%
+{%
+ \xint_bye #3\XINT_apply_end\xint_bye
+ \expandafter
+ \XINT_apply_loop_b
+ \expandafter {\romannumeral`&&@#2{#3}}{#1}{#2}%
+}%
+\long\def\XINT_apply_loop_b #1#2{\XINT_apply_loop_a {#2{#1}}}%
+\long\def\XINT_apply_end\xint_bye\expandafter\XINT_apply_loop_b
+ \expandafter #1#2#3{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintApplyUnbraced}}
+% \lverb|\xintApplyUnbraced {\macro}{{a}{b}...{z}} returns \macro{a}...\macro{z}
+% where each instance of \macro is f-expanded using \romannumeral-`0. The second
+% argument may be a macro as it is itself also f-expanded. No braces
+% are added: this allows for example a non-expandable \def in \macro, without
+% having to do \gdef. Introduced with release 1.06b.|
+% \begin{macrocode}
+\def\xintApplyUnbraced {\romannumeral0\xintapplyunbraced }%
+\def\xintApplyUnbracedNoExpand {\romannumeral0\xintapplyunbracednoexpand }%
+\long\def\xintapplyunbraced #1#2%
+{%
+ \expandafter\XINT_applyunbr\expandafter {\romannumeral`&&@#2}%
+ {#1}%
+}%
+\long\def\XINT_applyunbr #1#2{\XINT_applyunbr_loop_a {}{#2}#1\xint_bye }%
+\long\def\xintapplyunbracednoexpand #1#2%
+ {\XINT_applyunbr_loop_a {}{#1}#2\xint_bye }%
+\long\def\XINT_applyunbr_loop_a #1#2#3%
+{%
+ \xint_bye #3\XINT_applyunbr_end\xint_bye
+ \expandafter\XINT_applyunbr_loop_b
+ \expandafter {\romannumeral`&&@#2{#3}}{#1}{#2}%
+}%
+\long\def\XINT_applyunbr_loop_b #1#2{\XINT_applyunbr_loop_a {#2#1}}%
+\long\def\XINT_applyunbr_end\xint_bye\expandafter\XINT_applyunbr_loop_b
+ \expandafter #1#2#3{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintSeq}}
+% \lverb|1.09c. Without the optional argument puts stress on the input stack,
+% should not be used to generated thousands of terms then.|
+% \begin{macrocode}
+\def\xintSeq {\romannumeral0\xintseq }%
+\def\xintseq #1{\XINT_seq_chkopt #1\xint_bye }%
+\def\XINT_seq_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_seq_opt
+ \else\expandafter\XINT_seq_noopt
+ \fi #1%
+}%
+\def\XINT_seq_noopt #1\xint_bye #2%
+{%
+ \expandafter\XINT_seq\expandafter
+ {\the\numexpr#1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_seq #1#2%
+{%
+ \ifcase\ifnum #1=#2 0\else\ifnum #2>#1 1\else -1\fi\fi\space
+ \expandafter\xint_stop_atfirstoftwo
+ \or
+ \expandafter\XINT_seq_p
+ \else
+ \expandafter\XINT_seq_n
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT_seq_p #1#2%
+{%
+ \ifnum #1>#2
+ \expandafter\expandafter\expandafter\XINT_seq_p
+ \else
+ \expandafter\XINT_seq_e
+ \fi
+ \expandafter{\the\numexpr #1-\xint_c_i}{#2}{#1}%
+}%
+\def\XINT_seq_n #1#2%
+{%
+ \ifnum #1<#2
+ \expandafter\expandafter\expandafter\XINT_seq_n
+ \else
+ \expandafter\XINT_seq_e
+ \fi
+ \expandafter{\the\numexpr #1+\xint_c_i}{#2}{#1}%
+}%
+\def\XINT_seq_e #1#2#3{ }%
+\def\XINT_seq_opt [\xint_bye #1]#2#3%
+{%
+ \expandafter\XINT_seqo\expandafter
+ {\the\numexpr #2\expandafter}\expandafter
+ {\the\numexpr #3\expandafter}\expandafter
+ {\the\numexpr #1}%
+}%
+\def\XINT_seqo #1#2%
+{%
+ \ifcase\ifnum #1=#2 0\else\ifnum #2>#1 1\else -1\fi\fi\space
+ \expandafter\XINT_seqo_a
+ \or
+ \expandafter\XINT_seqo_pa
+ \else
+ \expandafter\XINT_seqo_na
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT_seqo_a #1#2#3{ {#1}}%
+\def\XINT_seqo_o #1#2#3#4{ #4}%
+\def\XINT_seqo_pa #1#2#3%
+{%
+ \ifcase\ifnum #3=\xint_c_ 0\else\ifnum #3>\xint_c_ 1\else -1\fi\fi\space
+ \expandafter\XINT_seqo_o
+ \or
+ \expandafter\XINT_seqo_pb
+ \else
+ \xint_afterfi{\expandafter\space\xint_gobble_iv}%
+ \fi
+ {#1}{#2}{#3}{{#1}}%
+}%
+\def\XINT_seqo_pb #1#2#3%
+{%
+ \expandafter\XINT_seqo_pc\expandafter{\the\numexpr #1+#3}{#2}{#3}%
+}%
+\def\XINT_seqo_pc #1#2%
+{%
+ \ifnum #1>#2
+ \expandafter\XINT_seqo_o
+ \else
+ \expandafter\XINT_seqo_pd
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT_seqo_pd #1#2#3#4{\XINT_seqo_pb {#1}{#2}{#3}{#4{#1}}}%
+\def\XINT_seqo_na #1#2#3%
+{%
+ \ifcase\ifnum #3=\xint_c_ 0\else\ifnum #3>\xint_c_ 1\else -1\fi\fi\space
+ \expandafter\XINT_seqo_o
+ \or
+ \xint_afterfi{\expandafter\space\xint_gobble_iv}%
+ \else
+ \expandafter\XINT_seqo_nb
+ \fi
+ {#1}{#2}{#3}{{#1}}%
+}%
+\def\XINT_seqo_nb #1#2#3%
+{%
+ \expandafter\XINT_seqo_nc\expandafter{\the\numexpr #1+#3}{#2}{#3}%
+}%
+\def\XINT_seqo_nc #1#2%
+{%
+ \ifnum #1<#2
+ \expandafter\XINT_seqo_o
+ \else
+ \expandafter\XINT_seqo_nd
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT_seqo_nd #1#2#3#4{\XINT_seqo_nb {#1}{#2}{#3}{#4{#1}}}%
+% \end{macrocode}
+%\subsection{\csh{xintloop}, \csh{xintbreakloop}, \csh{xintbreakloopanddo},
+% \csh{xintloopskiptonext}}
+% \lverb|1.09g [2013/11/22]. Made long with 1.09h.|
+% \begin{macrocode}
+\long\def\xintloop #1#2\repeat {#1#2\xintloop_again\fi\xint_gobble_i {#1#2}}%
+\long\def\xintloop_again\fi\xint_gobble_i #1{\fi
+ #1\xintloop_again\fi\xint_gobble_i {#1}}%
+\long\def\xintbreakloop #1\xintloop_again\fi\xint_gobble_i #2{}%
+\long\def\xintbreakloopanddo #1#2\xintloop_again\fi\xint_gobble_i #3{#1}%
+\long\def\xintloopskiptonext #1\xintloop_again\fi\xint_gobble_i #2{%
+ #2\xintloop_again\fi\xint_gobble_i {#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintiloop},
+% \csh{xintiloopindex},
+% \csh{xintbracediloopindex},
+% \csh{xintouteriloopindex},
+% \csh{xintbracedouteriloopindex},
+% \csh{xintbreakiloop},
+% \csh{xintbreakiloopanddo},
+% \csh{xintiloopskiptonext},
+% \csh{xintiloopskipandredo}}
+% \lverb|1.09g [2013/11/22]. Made long with 1.09h.
+%
+% «braced» variants added (2018/04/24) for 1.3b.|
+% \begin{macrocode}
+\def\xintiloop [#1+#2]{%
+ \expandafter\xintiloop_a\the\numexpr #1\expandafter.\the\numexpr #2.}%
+\long\def\xintiloop_a #1.#2.#3#4\repeat{%
+ #3#4\xintiloop_again\fi\xint_gobble_iii {#1}{#2}{#3#4}}%
+\def\xintiloop_again\fi\xint_gobble_iii #1#2{%
+ \fi\expandafter\xintiloop_again_b\the\numexpr#1+#2.#2.}%
+\long\def\xintiloop_again_b #1.#2.#3{%
+ #3\xintiloop_again\fi\xint_gobble_iii {#1}{#2}{#3}}%
+\long\def\xintbreakiloop #1\xintiloop_again\fi\xint_gobble_iii #2#3#4{}%
+\long\def\xintbreakiloopanddo
+ #1.#2\xintiloop_again\fi\xint_gobble_iii #3#4#5{#1}%
+\long\def\xintiloopindex #1\xintiloop_again\fi\xint_gobble_iii #2%
+ {#2#1\xintiloop_again\fi\xint_gobble_iii {#2}}%
+\long\def\xintbracediloopindex #1\xintiloop_again\fi\xint_gobble_iii #2%
+ {{#2}#1\xintiloop_again\fi\xint_gobble_iii {#2}}%
+\long\def\xintouteriloopindex #1\xintiloop_again
+ #2\xintiloop_again\fi\xint_gobble_iii #3%
+ {#3#1\xintiloop_again #2\xintiloop_again\fi\xint_gobble_iii {#3}}%
+\long\def\xintbracedouteriloopindex #1\xintiloop_again
+ #2\xintiloop_again\fi\xint_gobble_iii #3%
+ {{#3}#1\xintiloop_again #2\xintiloop_again\fi\xint_gobble_iii {#3}}%
+\long\def\xintiloopskiptonext #1\xintiloop_again\fi\xint_gobble_iii #2#3{%
+ \expandafter\xintiloop_again_b \the\numexpr#2+#3.#3.}%
+\long\def\xintiloopskipandredo #1\xintiloop_again\fi\xint_gobble_iii #2#3#4{%
+ #4\xintiloop_again\fi\xint_gobble_iii {#2}{#3}{#4}}%
+% \end{macrocode}
+% \subsection{\csh{XINT_xflet}}
+% \lverb|1.09e [2013/10/29]: we f-expand unbraced tokens and swallow arising
+% space tokens until the dust settles.|
+% \begin{macrocode}
+\def\XINT_xflet #1%
+{%
+ \def\XINT_xflet_macro {#1}\XINT_xflet_zapsp
+}%
+\def\XINT_xflet_zapsp
+{%
+ \expandafter\futurelet\expandafter\XINT_token
+ \expandafter\XINT_xflet_sp?\romannumeral`&&@%
+}%
+\def\XINT_xflet_sp?
+{%
+ \ifx\XINT_token\XINT_sptoken
+ \expandafter\XINT_xflet_zapsp
+ \else\expandafter\XINT_xflet_zapspB
+ \fi
+}%
+\def\XINT_xflet_zapspB
+{%
+ \expandafter\futurelet\expandafter\XINT_tokenB
+ \expandafter\XINT_xflet_spB?\romannumeral`&&@%
+}%
+\def\XINT_xflet_spB?
+{%
+ \ifx\XINT_tokenB\XINT_sptoken
+ \expandafter\XINT_xflet_zapspB
+ \else\expandafter\XINT_xflet_eq?
+ \fi
+}%
+\def\XINT_xflet_eq?
+{%
+ \ifx\XINT_token\XINT_tokenB
+ \expandafter\XINT_xflet_macro
+ \else\expandafter\XINT_xflet_zapsp
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintApplyInline}}
+% \lverb|1.09a: \xintApplyInline\macro{{a}{b}...{z}} has the same effect as
+% executing \macro{a} and then applying again \xintApplyInline to the shortened
+% list {{b}...{z}} until nothing is left. This is a non-expandable command
+% which will result in quicker code than using \xintApplyUnbraced. It f-expands
+% its second (list) argument first, which may thus be encapsulated in a macro.
+%
+% Rewritten in 1.09c. Nota bene: uses catcode 3 Z as privated list terminator.|
+% \begin{macrocode}
+\catcode`Z 3
+\long\def\xintApplyInline #1#2%
+{%
+ \long\expandafter\def\expandafter\XINT_inline_macro
+ \expandafter ##\expandafter 1\expandafter {#1{##1}}%
+ \XINT_xflet\XINT_inline_b #2Z% this Z has catcode 3
+}%
+\def\XINT_inline_b
+{%
+ \ifx\XINT_token Z\expandafter\xint_gobble_i
+ \else\expandafter\XINT_inline_d\fi
+}%
+\long\def\XINT_inline_d #1%
+{%
+ \long\def\XINT_item{{#1}}\XINT_xflet\XINT_inline_e
+}%
+\def\XINT_inline_e
+{%
+ \ifx\XINT_token Z\expandafter\XINT_inline_w
+ \else\expandafter\XINT_inline_f\fi
+}%
+\def\XINT_inline_f
+{%
+ \expandafter\XINT_inline_g\expandafter{\XINT_inline_macro {##1}}%
+}%
+\long\def\XINT_inline_g #1%
+{%
+ \expandafter\XINT_inline_macro\XINT_item
+ \long\def\XINT_inline_macro ##1{#1}\XINT_inline_d
+}%
+\def\XINT_inline_w #1%
+{%
+ \expandafter\XINT_inline_macro\XINT_item
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFor}, \csh{xintFor*}, \csh{xintBreakFor}, \csh{xintBreakForAndDo}}
+% \lverb|1.09c [2013/10/09]: a new kind of loop which uses macro parameters
+% #1, #2, #3, #4 rather than macros; while not expandable it survives executing
+% code closing groups, like what happens in an alignment with the $& character.
+% When inserted in a macro for later use, the # character must be doubled.
+%
+% The non-star variant works on a csv list, which it expands once, the
+% star variant works on a token list, which it (repeatedly) f-expands.
+%
+% 1.09e adds \XINT_forever with \xintintegers, \xintdimensions, \xintrationals
+% and \xintBreakFor, \xintBreakForAndDo, \xintifForFirst, \xintifForLast. On
+% this occasion \xint_firstoftwo and \xint_secondoftwo are made long.
+%
+% 1.09f: rewrites large parts of \xintFor code in order to filter the comma
+% separated list via \xintCSVtoList which gets rid of spaces. The #1 in
+% \XINT_for_forever? has an initial space token which serves two purposes:
+% preventing brace stripping, and stopping the expansion made by \xintcsvtolist.
+% If the \XINT_forever branch is taken, the added space will not be a problem
+% there.
+%
+% 1.09f rewrites (2013/11/03) the code which now allows all macro parameters
+% from #1 to #9 in \xintFor, \xintFor*, and \XINT_forever.
+% 1.2i: slightly more robust \xintifForFirst/Last in case of nesting.
+% |
+% \begin{macrocode}
+\def\XINT_tmpa #1#2{\ifnum #2<#1 \xint_afterfi {{#########2}}\fi}%
+\def\XINT_tmpb #1#2{\ifnum #1<#2 \xint_afterfi {{#########2}}\fi}%
+\def\XINT_tmpc #1%
+{%
+ \expandafter\edef \csname XINT_for_left#1\endcsname
+ {\xintApplyUnbraced {\XINT_tmpa #1}{123456789}}%
+ \expandafter\edef \csname XINT_for_right#1\endcsname
+ {\xintApplyUnbraced {\XINT_tmpb #1}{123456789}}%
+}%
+\xintApplyInline \XINT_tmpc {123456789}%
+\long\def\xintBreakFor #1Z{}%
+\long\def\xintBreakForAndDo #1#2Z{#1}%
+\def\xintFor {\let\xintifForFirst\xint_firstoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \futurelet\XINT_token\XINT_for_ifstar }%
+\def\XINT_for_ifstar {\ifx\XINT_token*\expandafter\XINT_forx
+ \else\expandafter\XINT_for \fi }%
+\catcode`U 3 % with numexpr
+\catcode`V 3 % with xintfrac.sty (xint.sty not enough)
+\catcode`D 3 % with dimexpr
+\def\XINT_flet_zapsp
+{%
+ \futurelet\XINT_token\XINT_flet_sp?
+}%
+\def\XINT_flet_sp?
+{%
+ \ifx\XINT_token\XINT_sptoken
+ \xint_afterfi{\expandafter\XINT_flet_zapsp\romannumeral0}%
+ \else\expandafter\XINT_flet_macro
+ \fi
+}%
+\long\def\XINT_for #1#2in#3#4#5%
+{%
+ \expandafter\XINT_toks\expandafter
+ {\expandafter\XINT_for_d\the\numexpr #2\relax {#5}}%
+ \def\XINT_flet_macro {\expandafter\XINT_for_forever?\space}%
+ \expandafter\XINT_flet_zapsp #3Z%
+}%
+\def\XINT_for_forever? #1Z%
+{%
+ \ifx\XINT_token U\XINT_to_forever\fi
+ \ifx\XINT_token V\XINT_to_forever\fi
+ \ifx\XINT_token D\XINT_to_forever\fi
+ \expandafter\the\expandafter\XINT_toks\romannumeral0\xintcsvtolist {#1}Z%
+}%
+\def\XINT_to_forever\fi #1\xintcsvtolist #2{\fi \XINT_forever #2}%
+\long\def\XINT_forx *#1#2in#3#4#5%
+{%
+ \expandafter\XINT_toks\expandafter
+ {\expandafter\XINT_forx_d\the\numexpr #2\relax {#5}}%
+ \XINT_xflet\XINT_forx_forever? #3Z%
+}%
+\def\XINT_forx_forever?
+{%
+ \ifx\XINT_token U\XINT_to_forxever\fi
+ \ifx\XINT_token V\XINT_to_forxever\fi
+ \ifx\XINT_token D\XINT_to_forxever\fi
+ \XINT_forx_empty?
+}%
+\def\XINT_to_forxever\fi #1\XINT_forx_empty? {\fi \XINT_forever }%
+\catcode`U 11
+\catcode`D 11
+\catcode`V 11
+\def\XINT_forx_empty?
+{%
+ \ifx\XINT_token Z\expandafter\xintBreakFor\fi
+ \the\XINT_toks
+}%
+\long\def\XINT_for_d #1#2#3%
+{%
+ \long\def\XINT_y ##1##2##3##4##5##6##7##8##9{#2}%
+ \XINT_toks {{#3}}%
+ \long\edef\XINT_x {\noexpand\XINT_y \csname XINT_for_left#1\endcsname
+ \the\XINT_toks \csname XINT_for_right#1\endcsname }%
+ \XINT_toks {\XINT_x\let\xintifForFirst\xint_secondoftwo
+ \let\xintifForLast\xint_secondoftwo\XINT_for_d #1{#2}}%
+ \futurelet\XINT_token\XINT_for_last?
+}%
+\long\def\XINT_forx_d #1#2#3%
+{%
+ \long\def\XINT_y ##1##2##3##4##5##6##7##8##9{#2}%
+ \XINT_toks {{#3}}%
+ \long\edef\XINT_x {\noexpand\XINT_y \csname XINT_for_left#1\endcsname
+ \the\XINT_toks \csname XINT_for_right#1\endcsname }%
+ \XINT_toks {\XINT_x\let\xintifForFirst\xint_secondoftwo
+ \let\xintifForLast\xint_secondoftwo\XINT_forx_d #1{#2}}%
+ \XINT_xflet\XINT_for_last?
+}%
+\def\XINT_for_last?
+{%
+ \ifx\XINT_token Z\expandafter\XINT_for_last?yes\fi
+ \the\XINT_toks
+}%
+\def\XINT_for_last?yes
+{%
+ \let\xintifForLast\xint_firstoftwo
+ \xintBreakForAndDo{\XINT_x\xint_gobble_i Z}%
+}%
+% \end{macrocode}
+% \subsection{\csh{XINT_forever}, \csh{xintintegers}, \csh{xintdimensions}, \csh{xintrationals}}
+% \lverb|New with 1.09e. But this used inadvertently \xintiadd/\xintimul which
+% have the unnecessary \xintnum overhead. Changed in 1.09f to use
+% \xintiiadd/\xintiimul which do not have this overhead. Also 1.09f uses
+% \xintZapSpacesB for the \xintrationals case to get rid of leading and ending
+% spaces in the #4 and #5 delimited parameters of \XINT_forever_opt_a
+% (for \xintintegers and \xintdimensions this is not necessary, due to the use
+% of \numexpr resp. \dimexpr in \XINT_?expr_Ua, resp.\XINT_?expr_Da).|
+% \begin{macrocode}
+\catcode`U 3
+\catcode`D 3
+\catcode`V 3
+\let\xintegers U%
+\let\xintintegers U%
+\let\xintdimensions D%
+\let\xintrationals V%
+\def\XINT_forever #1%
+{%
+ \expandafter\XINT_forever_a
+ \csname XINT_?expr_\ifx#1UU\else\ifx#1DD\else V\fi\fi a\expandafter\endcsname
+ \csname XINT_?expr_\ifx#1UU\else\ifx#1DD\else V\fi\fi i\expandafter\endcsname
+ \csname XINT_?expr_\ifx#1UU\else\ifx#1DD\else V\fi\fi \endcsname
+}%
+\catcode`U 11
+\catcode`D 11
+\catcode`V 11
+\def\XINT_?expr_Ua #1#2%
+ {\expandafter{\expandafter\numexpr\the\numexpr #1\expandafter\relax
+ \expandafter\relax\expandafter}%
+ \expandafter{\the\numexpr #2}}%
+\def\XINT_?expr_Da #1#2%
+ {\expandafter{\expandafter\dimexpr\number\dimexpr #1\expandafter\relax
+ \expandafter s\expandafter p\expandafter\relax\expandafter}%
+ \expandafter{\number\dimexpr #2}}%
+\catcode`Z 11
+\def\XINT_?expr_Va #1#2%
+{%
+ \expandafter\XINT_?expr_Vb\expandafter
+ {\romannumeral`&&@\xintrawwithzeros{\xintZapSpacesB{#2}}}%
+ {\romannumeral`&&@\xintrawwithzeros{\xintZapSpacesB{#1}}}%
+}%
+\catcode`Z 3
+\def\XINT_?expr_Vb #1#2{\expandafter\XINT_?expr_Vc #2.#1.}%
+\def\XINT_?expr_Vc #1/#2.#3/#4.%
+{%
+ \xintifEq {#2}{#4}%
+ {\XINT_?expr_Vf {#3}{#1}{#2}}%
+ {\expandafter\XINT_?expr_Vd\expandafter
+ {\romannumeral0\xintiimul {#2}{#4}}%
+ {\romannumeral0\xintiimul {#1}{#4}}%
+ {\romannumeral0\xintiimul {#2}{#3}}%
+ }%
+}%
+\def\XINT_?expr_Vd #1#2#3{\expandafter\XINT_?expr_Ve\expandafter {#2}{#3}{#1}}%
+\def\XINT_?expr_Ve #1#2{\expandafter\XINT_?expr_Vf\expandafter {#2}{#1}}%
+\def\XINT_?expr_Vf #1#2#3{{#2/#3}{{0}{#1}{#2}{#3}}}%
+\def\XINT_?expr_Ui {{\numexpr 1\relax}{1}}%
+\def\XINT_?expr_Di {{\dimexpr 0pt\relax}{65536}}%
+\def\XINT_?expr_Vi {{1/1}{0111}}%
+\def\XINT_?expr_U #1#2%
+ {\expandafter{\expandafter\numexpr\the\numexpr #1+#2\relax\relax}{#2}}%
+\def\XINT_?expr_D #1#2%
+ {\expandafter{\expandafter\dimexpr\the\numexpr #1+#2\relax sp\relax}{#2}}%
+\def\XINT_?expr_V #1#2{\XINT_?expr_Vx #2}%
+\def\XINT_?expr_Vx #1#2%
+{%
+ \expandafter\XINT_?expr_Vy\expandafter
+ {\romannumeral0\xintiiadd {#1}{#2}}{#2}%
+}%
+\def\XINT_?expr_Vy #1#2#3#4%
+{%
+ \expandafter{\romannumeral0\xintiiadd {#3}{#1}/#4}{{#1}{#2}{#3}{#4}}%
+}%
+\def\XINT_forever_a #1#2#3#4%
+{%
+ \ifx #4[\expandafter\XINT_forever_opt_a
+ \else\expandafter\XINT_forever_b
+ \fi #1#2#3#4%
+}%
+\def\XINT_forever_b #1#2#3Z{\expandafter\XINT_forever_c\the\XINT_toks #2#3}%
+\long\def\XINT_forever_c #1#2#3#4#5%
+ {\expandafter\XINT_forever_d\expandafter #2#4#5{#3}Z}%
+\def\XINT_forever_opt_a #1#2#3[#4+#5]#6Z%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT_forever_opt_c\expandafter\the\expandafter\XINT_toks
+ \romannumeral`&&@#1{#4}{#5}#3%
+}%
+\long\def\XINT_forever_opt_c #1#2#3#4#5#6{\XINT_forever_d #2{#4}{#5}#6{#3}Z}%
+\long\def\XINT_forever_d #1#2#3#4#5%
+{%
+ \long\def\XINT_y ##1##2##3##4##5##6##7##8##9{#5}%
+ \XINT_toks {{#2}}%
+ \long\edef\XINT_x {\noexpand\XINT_y \csname XINT_for_left#1\endcsname
+ \the\XINT_toks \csname XINT_for_right#1\endcsname }%
+ \XINT_x
+ \let\xintifForFirst\xint_secondoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \expandafter\XINT_forever_d\expandafter #1\romannumeral`&&@#4{#2}{#3}#4{#5}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintForpair}, \csh{xintForthree}, \csh{xintForfour}}
+% \lverb|1.09c.
+%
+% [2013/11/02] 1.09f \xintForpair delegate to \xintCSVtoList and its
+% \xintZapSpacesB the handling of spaces. Does not share code with \xintFor
+% anymore.
+%
+% [2013/11/03] 1.09f: \xintForpair extended to accept #1#2, #2#3 etc... up to
+% #8#9, \xintForthree, #1#2#3 up to #7#8#9, \xintForfour id.
+%
+% 1.2i: slightly more robust \xintifForFirst/Last in case of nesting.
+% |
+% \begin{macrocode}
+\catcode`j 3
+\long\def\xintForpair #1#2#3in#4#5#6%
+{%
+ \let\xintifForFirst\xint_firstoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \XINT_toks {\XINT_forpair_d #2{#6}}%
+ \expandafter\the\expandafter\XINT_toks #4jZ%
+}%
+\long\def\XINT_forpair_d #1#2#3(#4)#5%
+{%
+ \long\def\XINT_y ##1##2##3##4##5##6##7##8##9{#2}%
+ \XINT_toks \expandafter{\romannumeral0\xintcsvtolist{ #4}}%
+ \long\edef\XINT_x {\noexpand\XINT_y \csname XINT_for_left#1\endcsname
+ \the\XINT_toks \csname XINT_for_right\the\numexpr#1+\xint_c_i\endcsname}%
+ \ifx #5j\expandafter\XINT_for_last?yes\fi
+ \XINT_x
+ \let\xintifForFirst\xint_secondoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \XINT_forpair_d #1{#2}%
+}%
+\long\def\xintForthree #1#2#3in#4#5#6%
+{%
+ \let\xintifForFirst\xint_firstoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \XINT_toks {\XINT_forthree_d #2{#6}}%
+ \expandafter\the\expandafter\XINT_toks #4jZ%
+}%
+\long\def\XINT_forthree_d #1#2#3(#4)#5%
+{%
+ \long\def\XINT_y ##1##2##3##4##5##6##7##8##9{#2}%
+ \XINT_toks \expandafter{\romannumeral0\xintcsvtolist{ #4}}%
+ \long\edef\XINT_x {\noexpand\XINT_y \csname XINT_for_left#1\endcsname
+ \the\XINT_toks \csname XINT_for_right\the\numexpr#1+\xint_c_ii\endcsname}%
+ \ifx #5j\expandafter\XINT_for_last?yes\fi
+ \XINT_x
+ \let\xintifForFirst\xint_secondoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \XINT_forthree_d #1{#2}%
+}%
+\long\def\xintForfour #1#2#3in#4#5#6%
+{%
+ \let\xintifForFirst\xint_firstoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \XINT_toks {\XINT_forfour_d #2{#6}}%
+ \expandafter\the\expandafter\XINT_toks #4jZ%
+}%
+\long\def\XINT_forfour_d #1#2#3(#4)#5%
+{%
+ \long\def\XINT_y ##1##2##3##4##5##6##7##8##9{#2}%
+ \XINT_toks \expandafter{\romannumeral0\xintcsvtolist{ #4}}%
+ \long\edef\XINT_x {\noexpand\XINT_y \csname XINT_for_left#1\endcsname
+ \the\XINT_toks \csname XINT_for_right\the\numexpr#1+\xint_c_iii\endcsname}%
+ \ifx #5j\expandafter\XINT_for_last?yes\fi
+ \XINT_x
+ \let\xintifForFirst\xint_secondoftwo
+ \let\xintifForLast\xint_secondoftwo
+ \XINT_forfour_d #1{#2}%
+}%
+\catcode`Z 11
+\catcode`j 11
+% \end{macrocode}
+% \subsection{\csh{xintAssign}, \csh{xintAssignArray}, \csh{xintDigitsOf}}
+% \lverb|\xintAssign {a}{b}..{z}\to\A\B...\Z resp. \xintAssignArray
+% {a}{b}..{z}\to\U.
+%
+% \xintDigitsOf=\xintAssignArray.
+%
+% 1.1c 2015/09/12 has (belatedly) corrected some "features" of
+% \xintAssign which didn't like the case of a space right before the "\to", or
+% the case with the first token not an opening brace and the subsequent
+% material containing brace groups. The new code handles gracefully these
+% situations.|
+% \begin{macrocode}
+\def\xintAssign{\def\XINT_flet_macro {\XINT_assign_fork}\XINT_flet_zapsp }%
+\def\XINT_assign_fork
+{%
+ \let\XINT_assign_def\def
+ \ifx\XINT_token[\expandafter\XINT_assign_opt
+ \else\expandafter\XINT_assign_a
+ \fi
+}%
+\def\XINT_assign_opt [#1]%
+{%
+ \ifcsname #1def\endcsname
+ \expandafter\let\expandafter\XINT_assign_def \csname #1def\endcsname
+ \else
+ \expandafter\let\expandafter\XINT_assign_def \csname xint#1def\endcsname
+ \fi
+ \XINT_assign_a
+}%
+\long\def\XINT_assign_a #1\to
+{%
+ \def\XINT_flet_macro{\XINT_assign_b}%
+ \expandafter\XINT_flet_zapsp\romannumeral`&&@#1\xint:\to
+}%
+\long\def\XINT_assign_b
+{%
+ \ifx\XINT_token\bgroup
+ \expandafter\XINT_assign_c
+ \else\expandafter\XINT_assign_f
+ \fi
+}%
+\long\def\XINT_assign_f #1\xint:\to #2%
+{%
+ \XINT_assign_def #2{#1}%
+}%
+\long\def\XINT_assign_c #1%
+{%
+ \def\xint_temp {#1}%
+ \ifx\xint_temp\xint_bracedstopper
+ \expandafter\XINT_assign_e
+ \else
+ \expandafter\XINT_assign_d
+ \fi
+}%
+\long\def\XINT_assign_d #1\to #2%
+{%
+ \expandafter\XINT_assign_def\expandafter #2\expandafter{\xint_temp}%
+ \XINT_assign_c #1\to
+}%
+\def\XINT_assign_e #1\to {}%
+\def\xintRelaxArray #1%
+{%
+ \edef\XINT_restoreescapechar {\escapechar\the\escapechar\relax}%
+ \escapechar -1
+ \expandafter\def\expandafter\xint_arrayname\expandafter {\string #1}%
+ \XINT_restoreescapechar
+ \xintiloop [\csname\xint_arrayname 0\endcsname+-1]
+ \global
+ \expandafter\let\csname\xint_arrayname\xintiloopindex\endcsname\relax
+ \ifnum \xintiloopindex > \xint_c_
+ \repeat
+ \global\expandafter\let\csname\xint_arrayname 00\endcsname\relax
+ \global\let #1\relax
+}%
+\def\xintAssignArray{\def\XINT_flet_macro {\XINT_assignarray_fork}%
+ \XINT_flet_zapsp }%
+\def\XINT_assignarray_fork
+{%
+ \let\XINT_assignarray_def\def
+ \ifx\XINT_token[\expandafter\XINT_assignarray_opt
+ \else\expandafter\XINT_assignarray
+ \fi
+}%
+\def\XINT_assignarray_opt [#1]%
+{%
+ \ifcsname #1def\endcsname
+ \expandafter\let\expandafter\XINT_assignarray_def \csname #1def\endcsname
+ \else
+ \expandafter\let\expandafter\XINT_assignarray_def
+ \csname xint#1def\endcsname
+ \fi
+ \XINT_assignarray
+}%
+\long\def\XINT_assignarray #1\to #2%
+{%
+ \edef\XINT_restoreescapechar {\escapechar\the\escapechar\relax }%
+ \escapechar -1
+ \expandafter\def\expandafter\xint_arrayname\expandafter {\string #2}%
+ \XINT_restoreescapechar
+ \def\xint_itemcount {0}%
+ \expandafter\XINT_assignarray_loop \romannumeral`&&@#1\xint:
+ \csname\xint_arrayname 00\expandafter\endcsname
+ \csname\xint_arrayname 0\expandafter\endcsname
+ \expandafter {\xint_arrayname}#2%
+}%
+\long\def\XINT_assignarray_loop #1%
+{%
+ \def\xint_temp {#1}%
+ \ifx\xint_temp\xint_bracedstopper
+ \expandafter\def\csname\xint_arrayname 0\expandafter\endcsname
+ \expandafter{\the\numexpr\xint_itemcount}%
+ \expandafter\expandafter\expandafter\XINT_assignarray_end
+ \else
+ \expandafter\def\expandafter\xint_itemcount\expandafter
+ {\the\numexpr\xint_itemcount+\xint_c_i}%
+ \expandafter\XINT_assignarray_def
+ \csname\xint_arrayname\xint_itemcount\expandafter\endcsname
+ \expandafter{\xint_temp }%
+ \expandafter\XINT_assignarray_loop
+ \fi
+}%
+\def\XINT_assignarray_end #1#2#3#4%
+{%
+ \def #4##1%
+ {%
+ \romannumeral0\expandafter #1\expandafter{\the\numexpr ##1}%
+ }%
+ \def #1##1%
+ {%
+ \ifnum ##1<\xint_c_
+ \xint_afterfi{\XINT_expandableerror{Array index negative: 0 > ##1} }%
+ \else
+ \xint_afterfi {%
+ \ifnum ##1>#2
+ \xint_afterfi
+ {\XINT_expandableerror{Array index beyond range: ##1 > #2} }%
+ \else\xint_afterfi
+ {\expandafter\expandafter\expandafter\space\csname #3##1\endcsname}%
+ \fi}%
+ \fi
+ }%
+}%
+\let\xintDigitsOf\xintAssignArray
+% \end{macrocode}
+% \subsection{\csh{xintExpandArgs}}
+% \lverb|1.3a. Added for the needs of user defined functions for the
+% expression parsers. Should I re-code it to gain a bit in argument grabbing?
+% Must be f-expandable.|
+% \begin{macrocode}
+\def\xintExpandArgs#1#2{\csname #1\expandafter\endcsname
+ \romannumeral0\xintapply\xint_firstofone{#2}}%
+% \end{macrocode}
+%\subsection{CSV (non user documented) variants of Length, Keep, Trim, NthElt, Reverse}
+%
+% These routines are for use by |\xintListSel:x:csv| and |\xintListSel:f:csv|
+% from \xintexprnameimp, and also for the |reversed| and |len| functions.
+% Refactored for |1.2j| release, following |1.2i| updates to |\xintKeep|,
+% |\xintTrim|, ...
+%
+% These macros will remain undocumented in the user manual:
+%
+% -- they exist primarily for internal use by the \xintexprnameimp parsers,
+% hence don't have to be general purpose; for example, they a priori need to
+% handle only catcode 12 tokens (not true in |\xintNewExpr|, though)
+% hence they are not really worried about
+% controlling brace stripping (nevertheless |1.2j| has paid some secondary
+% attention to it, see below.) They are not worried about normalizing leading
+% spaces either, because none will be encountered when the macros are used as
+% auxiliaries to the expression parsers.
+%
+% -- crucial design elements may change in future:
+%
+% 1. whether the handled lists must have or not have a final comma. Currently,
+% the model is the one of comma separated lists with **no** final comma. But
+% this means that there can not be a distinction of principle between a truly
+% empty list and a list which contains one item which turns out to be empty.
+% More importantly it makes the coding more complicated as it is needed to
+% distinguish the empty list from the single-item list, both lacking commas.
+%
+% For the internal use of \xintexprnameimp, it would be ok to require all list
+% items to be terminated by a comma, and this would bring quite some
+% simplications here, but as initially I started with non-terminated lists, I
+% have left it this way in the |1.2j| refactoring.
+%
+% 2. the way to represent the empty list. I was tempted for matter of
+% optimization and synchronization with \xintexprnameimp context to require
+% the empty list to be always represented by a space token and to not let the
+% macros admit a completely empty input. But there were complications so for
+% the time being |1.2j| does accept truly empty output (it is not
+% distinguished from an input equal to a space token) and produces empty
+% output for empty list. This means that the status of the «nil» object for
+% the \xintexprnameimp parsers is not completely clarified (currently it is
+% represented by a space token).
+%
+% The original Python slicing code in \xintexprnameimp |1.1| used
+% |\xintCSVtoList| and |\xintListWithSep{,}| to convert back and forth to
+% token lists and apply |\xintKeep/\xintTrim|. Release |1.2g| switched to
+% devoted f-expandable macros added to \xinttoolsnameimp. Release |1.2j|
+% refactored all these macros as a follow-up to |1.2i| improvements to
+% |\xintKeep/\xintTrim|. They were made |\long| on this occasion and
+% auxiliary |\xintLengthUpTo:f:csv| was added.
+%
+% Leading spaces in items are currently maintained as is by the |1.2j|
+% macros, even by |\xintNthEltPy:f:csv|, with the exception of the first item,
+% as the list is f-expanded. Perhaps |\xintNthEltPy:f:csv| should remove a
+% leading space if present in the picked item; anyway, there are no spaces
+% for the lists handled internally by the Python slicer of \xintexprnameimp,
+% except the «nil» object currently represented by exactly one space.
+%
+% Kept items (with no leading spaces; but first item special as it will have
+% lost a leading space due to f-expansion) will lose a brace pair under
+% |\xintKeep:f:csv| if the first argument was positive and strictly less than
+% the length of the list. This differs of course from |\xintKeep| (which
+% always braces items it outputs when used with positive first argument) and
+% also from |\xintKeepUnbraced| in the case when the whole list is kept.
+% Actually the case of singleton list is special, and brace removal will
+% happen then.
+%
+% This behaviour was otherwise for releases earlier than |1.2j| and may
+% change again.
+%
+% Directly usable names are provided, but these macros (and the behaviour as
+% described above) are to be considered \emph{unstable} for the time being.
+%
+% \subsubsection{\csh{xintLength:f:csv}}
+% \lverb|1.2g. Redone for 1.2j. Contrarily to \xintLength from xintkernel.sty,
+% this one expands its argument.|
+% \begin{macrocode}
+\def\xintLength:f:csv {\romannumeral0\xintlength:f:csv}%
+\def\xintlength:f:csv #1%
+{\long\def\xintlength:f:csv ##1{%
+ \expandafter#1\the\numexpr\expandafter\XINT_length:f:csv_a
+ \romannumeral`&&@##1\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,\xint:,%
+ \xint_c_ix,\xint_c_viii,\xint_c_vii,\xint_c_vi,%
+ \xint_c_v,\xint_c_iv,\xint_c_iii,\xint_c_ii,\xint_c_i,\xint_bye
+ \relax
+}}\xintlength:f:csv { }%
+% \end{macrocode}
+% \lverb|Must first check if empty list.|
+% \begin{macrocode}
+\long\def\XINT_length:f:csv_a #1%
+{%
+ \xint_gob_til_xint: #1\xint_c_\xint_bye\xint:%
+ \XINT_length:f:csv_loop #1%
+}%
+\long\def\XINT_length:f:csv_loop #1,#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint: #9\XINT_length:f:csv_finish\xint:%
+ \xint_c_ix+\XINT_length:f:csv_loop
+}%
+\def\XINT_length:f:csv_finish\xint:\xint_c_ix+\XINT_length:f:csv_loop
+ #1,#2,#3,#4,#5,#6,#7,#8,#9,{#9\xint_bye}%
+% \end{macrocode}
+% \subsubsection{\csh{xintLengthUpTo:f:csv}}
+% \lverb|1.2j. \xintLengthUpTo:f:csv{N}{comma-list}. No ending comma. Returns
+% -0 if length>N, else returns difference N-length. **N must be non-negative!!**
+%
+% Attention to the dot after \xint_bye for the loop interface.|
+% \begin{macrocode}
+\def\xintLengthUpTo:f:csv {\romannumeral0\xintlengthupto:f:csv}%
+\long\def\xintlengthupto:f:csv #1#2%
+{%
+ \expandafter\XINT_lengthupto:f:csv_a
+ \the\numexpr#1\expandafter.%
+ \romannumeral`&&@#2\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,%
+ \xint_c_viii,\xint_c_vii,\xint_c_vi,\xint_c_v,%
+ \xint_c_iv,\xint_c_iii,\xint_c_ii,\xint_c_i,\xint_bye.%
+}%
+% \end{macrocode}
+% \lverb|Must first recognize if empty list. If this is the case, return N.|
+% \begin{macrocode}
+\long\def\XINT_lengthupto:f:csv_a #1.#2%
+{%
+ \xint_gob_til_xint: #2\XINT_lengthupto:f:csv_empty\xint:%
+ \XINT_lengthupto:f:csv_loop_b #1.#2%
+}%
+\def\XINT_lengthupto:f:csv_empty\xint:%
+ \XINT_lengthupto:f:csv_loop_b #1.#2\xint_bye.{ #1}%
+\def\XINT_lengthupto:f:csv_loop_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_lengthupto:f:csv_gt
+ -\XINT_lengthupto:f:csv_loop_b
+ \krof #1%
+}%
+\long\def\XINT_lengthupto:f:csv_gt #1\xint_bye.{-0}%
+\long\def\XINT_lengthupto:f:csv_loop_b #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint: #9\XINT_lengthupto:f:csv_finish_a\xint:%
+ \expandafter\XINT_lengthupto:f:csv_loop_a\the\numexpr #1-\xint_c_viii.%
+}%
+\def\XINT_lengthupto:f:csv_finish_a\xint:
+ \expandafter\XINT_lengthupto:f:csv_loop_a
+ \the\numexpr #1-\xint_c_viii.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \expandafter\XINT_lengthupto:f:csv_finish_b\the\numexpr #1-#9\xint_bye
+}%
+\def\XINT_lengthupto:f:csv_finish_b #1#2.%
+{%
+ \xint_UDsignfork
+ #1{-0}%
+ -{ #1#2}%
+ \krof
+}%
+% \end{macrocode}
+%\subsubsection{\csh{xintKeep:f:csv}}
+% \lverb|1.2g 2016/03/17. Redone for 1.2j with use of \xintLengthUpTo:f:csv.
+% Same code skeleton as \xintKeep but handling comma separated but non
+% terminated lists has complications. The \xintKeep in case of a negative #1
+% uses \xintgobble, we don't have that for comma delimited items, hence we do
+% a special loop here (this style of loop is surely competitive with
+% xintgobble for a few dozens items and even more). The loop knows before
+% starting that it will not go too far.
+%
+%|
+% \begin{macrocode}
+\def\xintKeep:f:csv {\romannumeral0\xintkeep:f:csv }%
+\long\def\xintkeep:f:csv #1#2%
+{%
+ \expandafter\xint_stop_aftergobble
+ \romannumeral0\expandafter\XINT_keep:f:csv_a
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+}%
+\def\XINT_keep:f:csv_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_keep:f:csv_keepnone
+ 0#1\XINT_keep:f:csv_neg
+ 0-{\XINT_keep:f:csv_pos #1}%
+ \krof
+}%
+\long\def\XINT_keep:f:csv_keepnone .#1{,}%
+\long\def\XINT_keep:f:csv_neg #1.#2%
+{%
+ \expandafter\XINT_keep:f:csv_neg_done\expandafter,%
+ \romannumeral0%
+ \expandafter\XINT_keep:f:csv_neg_a\the\numexpr
+ #1-\numexpr\XINT_length:f:csv_a
+ #2\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,\xint:,%
+ \xint_c_ix,\xint_c_viii,\xint_c_vii,\xint_c_vi,%
+ \xint_c_v,\xint_c_iv,\xint_c_iii,\xint_c_ii,\xint_c_i,\xint_bye
+ .#2\xint_bye
+}%
+\def\XINT_keep:f:csv_neg_a #1%
+{%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keep:f:csv_trimloop\the\numexpr-\xint_c_ix+}%
+ -\XINT_keep:f:csv_keepall
+ \krof
+}%
+\def\XINT_keep:f:csv_keepall #1.{ }%
+\long\def\XINT_keep:f:csv_neg_done #1\xint_bye{#1}%
+\def\XINT_keep:f:csv_trimloop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_keep:f:csv_trimloop_finish-%
+ \expandafter\XINT_keep:f:csv_trimloop
+ \the\numexpr#1#2-\xint_c_ix\expandafter.\XINT_keep:f:csv_trimloop_trimnine
+}%
+\long\def\XINT_keep:f:csv_trimloop_trimnine #1,#2,#3,#4,#5,#6,#7,#8,#9,{}%
+\def\XINT_keep:f:csv_trimloop_finish-%
+ \expandafter\XINT_keep:f:csv_trimloop
+ \the\numexpr-#1-\xint_c_ix\expandafter.\XINT_keep:f:csv_trimloop_trimnine
+ {\csname XINT_trim:f:csv_finish#1\endcsname}%
+\long\def\XINT_keep:f:csv_pos #1.#2%
+{%
+ \expandafter\XINT_keep:f:csv_pos_fork
+ \romannumeral0\XINT_lengthupto:f:csv_a
+ #1.#2\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,%
+ \xint_c_viii,\xint_c_vii,\xint_c_vi,\xint_c_v,%
+ \xint_c_iv,\xint_c_iii,\xint_c_ii,\xint_c_i,\xint_bye.%
+ .#1.{}#2\xint_bye%
+}%
+\def\XINT_keep:f:csv_pos_fork #1#2.%
+{%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keep:f:csv_loop\the\numexpr-\xint_c_viii+}%
+ -\XINT_keep:f:csv_pos_keepall
+ \krof
+}%
+\long\def\XINT_keep:f:csv_pos_keepall #1.#2#3\xint_bye{,#3}%
+\def\XINT_keep:f:csv_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_keep:f:csv_loop_end-%
+ \expandafter\XINT_keep:f:csv_loop
+ \the\numexpr#1#2-\xint_c_viii\expandafter.\XINT_keep:f:csv_loop_pickeight
+}%
+\long\def\XINT_keep:f:csv_loop_pickeight
+ #1#2,#3,#4,#5,#6,#7,#8,#9,{{#1,#2,#3,#4,#5,#6,#7,#8,#9}}%
+\def\XINT_keep:f:csv_loop_end-\expandafter\XINT_keep:f:csv_loop
+ \the\numexpr-#1-\xint_c_viii\expandafter.\XINT_keep:f:csv_loop_pickeight
+ {\csname XINT_keep:f:csv_end#1\endcsname}%
+\long\expandafter\def\csname XINT_keep:f:csv_end1\endcsname
+ #1#2,#3,#4,#5,#6,#7,#8,#9\xint_bye {#1,#2,#3,#4,#5,#6,#7,#8}%
+\long\expandafter\def\csname XINT_keep:f:csv_end2\endcsname
+ #1#2,#3,#4,#5,#6,#7,#8\xint_bye {#1,#2,#3,#4,#5,#6,#7}%
+\long\expandafter\def\csname XINT_keep:f:csv_end3\endcsname
+ #1#2,#3,#4,#5,#6,#7\xint_bye {#1,#2,#3,#4,#5,#6}%
+\long\expandafter\def\csname XINT_keep:f:csv_end4\endcsname
+ #1#2,#3,#4,#5,#6\xint_bye {#1,#2,#3,#4,#5}%
+\long\expandafter\def\csname XINT_keep:f:csv_end5\endcsname
+ #1#2,#3,#4,#5\xint_bye {#1,#2,#3,#4}%
+\long\expandafter\def\csname XINT_keep:f:csv_end6\endcsname
+ #1#2,#3,#4\xint_bye {#1,#2,#3}%
+\long\expandafter\def\csname XINT_keep:f:csv_end7\endcsname
+ #1#2,#3\xint_bye {#1,#2}%
+\long\expandafter\def\csname XINT_keep:f:csv_end8\endcsname
+ #1#2\xint_bye {#1}%
+% \end{macrocode}
+%\subsubsection{\csh{xintTrim:f:csv}}
+% \lverb|1.2g 2016/03/17. Redone for 1.2j 2016/12/20 on the basis of new
+% \xintTrim.|
+% \begin{macrocode}
+\def\xintTrim:f:csv {\romannumeral0\xinttrim:f:csv }%
+\long\def\xinttrim:f:csv #1#2%
+{%
+ \expandafter\xint_stop_aftergobble
+ \romannumeral0\expandafter\XINT_trim:f:csv_a
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+}%
+\def\XINT_trim:f:csv_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_trim:f:csv_trimnone
+ 0#1\XINT_trim:f:csv_neg
+ 0-{\XINT_trim:f:csv_pos #1}%
+ \krof
+}%
+\long\def\XINT_trim:f:csv_trimnone .#1{,#1}%
+\long\def\XINT_trim:f:csv_neg #1.#2%
+{%
+ \expandafter\XINT_trim:f:csv_neg_a\the\numexpr
+ #1-\numexpr\XINT_length:f:csv_a
+ #2\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,\xint:,%
+ \xint_c_ix,\xint_c_viii,\xint_c_vii,\xint_c_vi,%
+ \xint_c_v,\xint_c_iv,\xint_c_iii,\xint_c_ii,\xint_c_i,\xint_bye
+ .{}#2\xint_bye
+}%
+\def\XINT_trim:f:csv_neg_a #1%
+{%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keep:f:csv_loop\the\numexpr-\xint_c_viii+}%
+ -\XINT_trim:f:csv_trimall
+ \krof
+}%
+\def\XINT_trim:f:csv_trimall {\expandafter,\xint_bye}%
+\long\def\XINT_trim:f:csv_pos #1.#2%
+{%
+ \expandafter\XINT_trim:f:csv_pos_done\expandafter,%
+ \romannumeral0%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint:,\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,\xint:\xint_bye
+}%
+\def\XINT_trim:f:csv_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_trim:f:csv_finish-%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr#1#2\XINT_trim:f:csv_loop_trimnine
+}%
+\long\def\XINT_trim:f:csv_loop_trimnine #1,#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint: #9\XINT_trim:f:csv_toofew\xint:-\xint_c_ix.%
+}%
+\def\XINT_trim:f:csv_toofew\xint:{*\xint_c_}%
+\def\XINT_trim:f:csv_finish-%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr-#1\XINT_trim:f:csv_loop_trimnine
+{%
+ \csname XINT_trim:f:csv_finish#1\endcsname
+}%
+\long\expandafter\def\csname XINT_trim:f:csv_finish1\endcsname
+ #1,#2,#3,#4,#5,#6,#7,#8,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish2\endcsname
+ #1,#2,#3,#4,#5,#6,#7,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish3\endcsname
+ #1,#2,#3,#4,#5,#6,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish4\endcsname
+ #1,#2,#3,#4,#5,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish5\endcsname
+ #1,#2,#3,#4,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish6\endcsname
+ #1,#2,#3,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish7\endcsname
+ #1,#2,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish8\endcsname
+ #1,{ }%
+\expandafter\let\csname XINT_trim:f:csv_finish9\endcsname\space
+\long\def\XINT_trim:f:csv_pos_done #1\xint:#2\xint_bye{#1}%
+% \end{macrocode}
+% \subsubsection{\csh{xintNthEltPy:f:csv}}
+% \lverb|Counts like Python starting at zero. Last refactored with 1.2j.
+% Attention, makes currently no effort at removing leading spaces in the
+% picked item.|
+% \begin{macrocode}
+\def\xintNthEltPy:f:csv {\romannumeral0\xintntheltpy:f:csv }%
+\long\def\xintntheltpy:f:csv #1#2%
+{%
+ \expandafter\XINT_nthelt:f:csv_a
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+}%
+\def\XINT_nthelt:f:csv_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_nthelt:f:csv_neg
+ -\XINT_nthelt:f:csv_pos
+ \krof #1%
+}%
+\long\def\XINT_nthelt:f:csv_neg -#1.#2%
+{%
+ \expandafter\XINT_nthelt:f:csv_neg_fork
+ \the\numexpr\XINT_length:f:csv_a
+ #2\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,\xint:,%
+ \xint_c_ix,\xint_c_viii,\xint_c_vii,\xint_c_vi,%
+ \xint_c_v,\xint_c_iv,\xint_c_iii,\xint_c_ii,\xint_c_i,\xint_bye
+ -#1.#2,\xint_bye
+}%
+\def\XINT_nthelt:f:csv_neg_fork #1%
+{%
+ \if#1-\expandafter\xint_stop_afterbye\fi
+ \expandafter\XINT_nthelt:f:csv_neg_done
+ \romannumeral0%
+ \expandafter\XINT_keep:f:csv_trimloop\the\numexpr-\xint_c_ix+#1%
+}%
+\long\def\XINT_nthelt:f:csv_neg_done#1,#2\xint_bye{ #1}%
+\long\def\XINT_nthelt:f:csv_pos #1.#2%
+{%
+ \expandafter\XINT_nthelt:f:csv_pos_done
+ \romannumeral0%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint:,\xint:,\xint:,\xint:,\xint:,%
+ \xint:,\xint:,\xint:,\xint:,\xint:,\xint_bye
+}%
+\def\XINT_nthelt:f:csv_pos_done #1{%
+\long\def\XINT_nthelt:f:csv_pos_done ##1,##2\xint_bye{%
+ \xint_gob_til_xint:##1\XINT_nthelt:f:csv_pos_cleanup\xint:#1##1}%
+}\XINT_nthelt:f:csv_pos_done{ }%
+% \end{macrocode}
+% \lverb|This strange thing is in case the picked item was the last one, hence
+% there was an ending \xint: (we could not put a comma earlier for
+% matters of not confusing empty list with a singleton list), and we do this
+% here to activate brace-stripping of item as all other items may be
+% brace-stripped if picked. This is done for coherence. Of course, in the
+% context of the xintexpr.sty parsers, there are no braces in list items...|
+% \begin{macrocode}
+\xint_firstofone{\long\def\XINT_nthelt:f:csv_pos_cleanup\xint:} %
+ #1\xint:{ #1}%
+% \end{macrocode}
+% \subsubsection{\csh{xintReverse:f:csv}}
+% \lverb|1.2g. Contrarily to \xintReverseOrder from xintkernel.sty, this
+% one expands its argument. Handles empty list too. 2016/03/17.
+% Made \long for 1.2j.|
+% \begin{macrocode}
+\def\xintReverse:f:csv {\romannumeral0\xintreverse:f:csv }%
+\long\def\xintreverse:f:csv #1%
+{%
+ \expandafter\XINT_reverse:f:csv_loop
+ \expandafter{\expandafter}\romannumeral`&&@#1,%
+ \xint:,%
+ \xint_bye,\xint_bye,\xint_bye,\xint_bye,%
+ \xint_bye,\xint_bye,\xint_bye,\xint_bye,%
+ \xint:
+}%
+\long\def\XINT_reverse:f:csv_loop #1#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_bye #9\XINT_reverse:f:csv_cleanup\xint_bye
+ \XINT_reverse:f:csv_loop {,#9,#8,#7,#6,#5,#4,#3,#2#1}%
+}%
+\long\def\XINT_reverse:f:csv_cleanup\xint_bye\XINT_reverse:f:csv_loop #1#2\xint:
+{%
+ \XINT_reverse:f:csv_finish #1%
+}%
+\long\def\XINT_reverse:f:csv_finish #1\xint:,{ }%
+% \end{macrocode}
+% \subsubsection{\csh{xintFirstItem:f:csv}}
+% \lverb|Added with 1.2k for use by first() in
+% \xintexpr-essions, and some amount of compatibility with \xintNewExpr.|
+% \begin{macrocode}
+\def\xintFirstItem:f:csv {\romannumeral0\xintfirstitem:f:csv}%
+\long\def\xintfirstitem:f:csv #1%
+{%
+ \expandafter\XINT_first:f:csv_a\romannumeral`&&@#1,\xint_bye
+}%
+\long\def\XINT_first:f:csv_a #1,#2\xint_bye{ #1}%
+% \end{macrocode}
+% \subsubsection{\csh{xintLastItem:f:csv}}
+% \lverb|Added with 1.2k, based on and sharing code with xintkernel's
+% \xintLastItem from 1.2i. Output empty if input empty. f-expands its argument
+% (hence first item, if not protected.) For use by last() in
+% \xintexpr-essions with to some extent \xintNewExpr compatibility.|
+% \begin{macrocode}
+\def\xintLastItem:f:csv {\romannumeral0\xintlastitem:f:csv}%
+\long\def\xintlastitem:f:csv #1%
+{%
+ \expandafter\XINT_last:f:csv_loop\expandafter{\expandafter}\expandafter.%
+ \romannumeral`&&@#1,%
+ \xint:\XINT_last_loop_enda,\xint:\XINT_last_loop_endb,%
+ \xint:\XINT_last_loop_endc,\xint:\XINT_last_loop_endd,%
+ \xint:\XINT_last_loop_ende,\xint:\XINT_last_loop_endf,%
+ \xint:\XINT_last_loop_endg,\xint:\XINT_last_loop_endh,\xint_bye
+}%
+\long\def\XINT_last:f:csv_loop #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint: #9%
+ {#8}{#7}{#6}{#5}{#4}{#3}{#2}{#1}\xint:
+ \XINT_last:f:csv_loop {#9}.%
+}%
+% \end{macrocode}
+% \subsubsection{Public names for the undocumented csv macros:
+% \csh{xintCSVLength}, \csh{xintCSVKeep}, \csh{xintCSVTrim},
+% \csh{xintCSVNthEltPy}, \csh{xintCSVReverse},
+% \csh{xintCSVFirstItem}, \csh{xintCSVLastItem}}
+%
+% \lverb|Completely unstable macros: currently they expand the list argument
+% and want no final comma. But for matters of xintexpr.sty I could as well
+% decide to require a final comma, and then I could simplify implementation
+% but of course this would break the macros if used with current
+% functionalities.|
+% \begin{macrocode}
+\let\xintCSVLength \xintLength:f:csv
+\let\xintCSVKeep \xintKeep:f:csv
+\let\xintCSVTrim \xintTrim:f:csv
+\let\xintCSVNthEltPy \xintNthEltPy:f:csv
+\let\xintCSVReverse \xintReverse:f:csv
+\let\xintCSVFirstItem\xintFirstItem:f:csv
+\let\xintCSVLastItem \xintLastItem:f:csv
+\let\XINT_tmpa\relax \let\XINT_tmpb\relax \let\XINT_tmpc\relax
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xinttools}
+% \cleardoublepage\let\xinttoolsnameUp\undefined
+%\gardesactifs
+%\let</xinttools>\relax
+%\let<*xintcore>\gardesinactifs
+%</xinttools>^^A--------------------------------------------------
+%<*xintcore>^^A---------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; fill-column: 78; -*-
+% \clearpage\csname xintcorenameUp\endcsname
+% \section{Package \xintcorenameimp implementation}
+% \RaisedLabel{sec:coreimp}
+%
+% \localtableofcontents
+%
+% Got split off from \xintnameimp with release |1.1|.
+%
+% The core arithmetic routines have been entirely rewritten for release
+% |1.2|. The |1.2i| and |1.2l| brought again some improvements.
+%
+% The commenting continues (\xintdocdate) to be very sparse: actually it got
+% worse than ever with release |1.2|. I will possibly add comments at a
+% later date, but for the time being the new routines are not commented at
+% all.
+%
+% |1.3| removes all macros which were deprecated at |1.2o|.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintcore.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintkernel.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintcore}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintcore.sty
+ \ifx\w\relax % but xintkernel.sty not yet loaded.
+ \def\z{\endgroup\input xintkernel.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintkernel.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintkernel}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintkernel already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintcore}%
+ [2019/04/05 1.3e Expandable arithmetic on big integers (JFB)]%
+% \end{macrocode}
+% \subsection{(WIP!) Error conditions and exceptions}
+% \lverb|As per the Mike Cowlishaw/IBM's General Decimal Arithmetic Specification
+%
+% http://speleotrove.com/decimal/decarith.html
+%
+% and the Python3 implementation in its Decimal module.
+%
+% Clamped, ConversionSyntax, DivisionByZero, DivisionImpossible,
+% DivisionUndefined, Inexact, InsufficientStorage, InvalidContext,
+% InvalidOperation, Overflow, Inexact, Rounded, Subnormal,
+% Underflow.
+%
+% X3.274 rajoute LostDigits
+%
+% Python rajoute FloatOperation (et n'inclut pas InsufficientStorage)
+%
+% quote de decarith.pdf:
+% The Clamped, Inexact, Rounded, and Subnormal conditions can coincide with
+% each other or with other conditions. In these cases then any trap enabled
+% for another condition takes precedence over (is handled before) all of
+% these, any Subnormal trap takes precedence over Inexact, any Inexact trap
+% takes precedence over Rounded, and any Rounded trap takes precedence over
+% Clamped.
+%
+% WORK IN PROGRESS ! (1.2l, 2017/07/26)
+%
+% I follow the Python terminology: a trapped signal means it raises an
+% exception which for us means an expandable error message with some possible
+% user interaction. In this WIP
+% state, the interaction is commented out. A non-trapped signal or condition
+% would activate a (presumably silent) handler.
+%
+% Here, no signal-raising condition is "ignored" and all are "trapped" which
+% means that error handlers are never activated, thus left in garbage state in
+% the code.
+%
+% Various conditions can raise the same signal.
+%
+% Only signals, not conditions, raise Flags.
+%
+% If a signal is ignored it does not raise a Flag, but it activates the signal
+% handler (by default now no signal is ignored.)
+%
+% If a signal is not ignored it raises a Flag and then if it is not trapped it
+% activates the handler of the _condition_.
+%
+% If trapped (which is default now) an «exception» is raised, which means an
+% expandable error message (I copied over the LaTeX3 code for expandable error
+% messages, basically)
+% interrupts the TeX run. In future, user input could
+% be solicited, but currently this is commented out.
+%
+% For now macros to reset flags are done but without public interface nor
+% documentation.
+%
+% Only four conditions are currently possibly encountered:
+%- InvalidOperation
+%- DivisionByZero
+%- DivisionUndefined (which signals InvalidOperation)
+%- Underflow
+%
+% I did it quickly, anyhow this will become more palpable when some of the
+% Decimal Specification is actually implemented. The plan is to first do the
+% X3.274 norm, then more complete implementation will follow... perhaps...
+% |
+% \begin{macrocode}
+\csname XINT_Clamped_istrapped\endcsname
+\csname XINT_ConversionSyntax_istrapped\endcsname
+\csname XINT_DivisionByZero_istrapped\endcsname
+\csname XINT_DivisionImpossible_istrapped\endcsname
+\csname XINT_DivisionUndefined_istrapped\endcsname
+\csname XINT_InvalidOperation_istrapped\endcsname
+\csname XINT_Overflow_istrapped\endcsname
+\csname XINT_Underflow_istrapped\endcsname
+\catcode`- 11
+\def\XINT_ConversionSyntax-signal {{InvalidOperation}}%
+\let\XINT_DivisionImpossible-signal\XINT_ConversionSyntax-signal
+\let\XINT_DivisionUndefined-signal \XINT_ConversionSyntax-signal
+\let\XINT_InvalidContext-signal \XINT_ConversionSyntax-signal
+\catcode`- 12
+\def\XINT_signalcondition #1{\expandafter\XINT_signalcondition_a
+ \romannumeral0\ifcsname XINT_#1-signal\endcsname
+ \xint_dothis{\csname XINT_#1-signal\endcsname}%
+ \fi\xint_orthat{{#1}}{#1}}%
+\def\XINT_signalcondition_a #1#2#3#4#5{% copied over from Python Decimal module
+% #1=signal, #2=condition, #3=explanation for user,
+% #4=context for error handlers, #5=used
+ \ifcsname XINT_#1_isignoredflag\endcsname
+ \xint_dothis{\csname XINT_#1.handler\endcsname {#4}}%
+ \fi
+ \expandafter\xint_gobble_i\csname XINT_#1Flag_ON\endcsname
+ \unless\ifcsname XINT_#1_istrapped\endcsname
+ \xint_dothis{\csname XINT_#2.handler\endcsname {#4}}%
+ \fi
+ \xint_orthat{%
+ % the flag raised is named after the signal #1, but we show condition #2
+ \XINT_expandableerror{#2 (hit <RET> thrice)}%
+ \XINT_expandableerror{#3}%
+ \XINT_expandableerror{next: #5}%
+ % not for X3.274
+ %\XINT_expandableerror{<RET>, or I\xintUse{...}<RET>, or I\xintCTRLC<RET>}%
+ \xint_stop_atfirstofone{#5}%
+ }%
+}%
+%% \let\xintUse\xint_stop_atfirstofthree % defined in xint.sty
+\def\XINT_ifFlagRaised #1{%
+ \ifcsname XINT_#1Flag_ON\endcsname
+ \expandafter\xint_firstoftwo
+ \else
+ \expandafter\xint_secondoftwo
+ \fi}%
+\def\XINT_resetFlag #1%
+ {\expandafter\let\csname XINT_#1Flag_ON\endcsname\XINT_undefined}%
+\def\XINT_resetFlags {% WIP
+ \XINT_resetFlag{InvalidOperation}% also from DivisionUndefined
+ \XINT_resetFlag{DivisionByZero}%
+ \XINT_resetFlag{Underflow}% (\xintiiPow with negative exponent)
+ \XINT_resetFlag{Overflow}% not encountered so far in xint code 1.2l
+ % .. others ..
+}%
+\def\XINT_RaiseFlag #1{\expandafter\xint_gobble_i\csname XINT_#1Flag_ON\endcsname}%
+% \end{macrocode}
+% NOT IMPLEMENTED! WORK IN PROGRESS! (ALL SIGNALS TRAPPED, NO HANDLERS USED)
+% \begin{macrocode}
+\catcode`. 11
+\let\XINT_Clamped.handler\xint_firstofone % WIP
+\def\XINT_InvalidOperation.handler#1{_NaN}% WIP
+\def\XINT_ConversionSyntax.handler#1{_NaN}% WIP
+\def\XINT_DivisionByZero.handler#1{_SignedInfinity(#1)}% WIP
+\def\XINT_DivisionImpossible.handler#1{_NaN}% WIP
+\def\XINT_DivisionUndefined.handler#1{_NaN}% WIP
+\let\XINT_Inexact.handler\xint_firstofone % WIP
+\def\XINT_InvalidContext.handler#1{_NaN}% WIP
+\let\XINT_Rounded.handler\xint_firstofone % WIP
+\let\XINT_Subnormal.handler\xint_firstofone% WIP
+\def\XINT_Overflow.handler#1{_NaN}% WIP
+\def\XINT_Underflow.handler#1{_NaN}% WIP
+\catcode`. 12
+% \end{macrocode}
+% \subsection{Counts for holding needed constants}
+% \begin{macrocode}
+\ifdefined\m@ne\let\xint_c_mone\m@ne
+ \else\csname newcount\endcsname\xint_c_mone \xint_c_mone -1 \fi
+\ifdefined\xint_c_x^viii\else
+\csname newcount\endcsname\xint_c_x^viii \xint_c_x^viii 100000000
+\fi
+\ifdefined\xint_c_x^ix\else
+\csname newcount\endcsname\xint_c_x^ix \xint_c_x^ix 1000000000
+\fi
+\newcount\xint_c_x^viii_mone \xint_c_x^viii_mone 99999999
+\newcount\xint_c_xii_e_viii \xint_c_xii_e_viii 1200000000
+\newcount\xint_c_xi_e_viii_mone \xint_c_xi_e_viii_mone 1099999999
+% \end{macrocode}
+% \subsection*{Routines handling integers as lists of token digits}
+% \addcontentsline{toc}{subsection}{Routines handling integers as lists of token digits}
+% \lverb|&
+% Routines handling big integers which are lists of digit tokens with no
+% special additional structure.
+%
+% Some
+% routines do not accept non properly terminated inputs like "\the\numexpr1",
+% or "\the\mathcode`\-", others do.
+%
+% These routines or their sub-routines are mainly for internal usage.
+% |
+%
+% \subsection{\csh{XINT_cuz_small}}
+% \lverb|&
+% \XINT_cuz_small removes leading zeroes from the first eight digits. Expands
+% following \romannumeral0. At least one digit is produced.|
+% \begin{macrocode}
+\def\XINT_cuz_small#1{%
+\def\XINT_cuz_small ##1##2##3##4##5##6##7##8%
+{%
+ \expandafter#1\the\numexpr ##1##2##3##4##5##6##7##8\relax
+}}\XINT_cuz_small{ }%
+% \end{macrocode}
+% \subsection{\csh{xintNum}, \csh{xintiNum}}
+% \lverb|&
+% For example \xintNum {----+-+++---+----000000000000003}
+%
+% Very old routine got completely rewritten at 1.2l.
+%
+% New code uses \numexpr governed expansion and fixes some issues of former
+% version particularly regarding inputs of the \numexpr...\relax type without
+% \the or \number prefix, and/or possibly no terminating \relax.
+%
+% \xintiNum{\numexpr 1}\foo in earlier versions caused premature expansion of
+% \foo.
+%
+% \xintiNum{\the\numexpr 1} was ok, but a bit luckily so.
+%
+% Also, up to 1.2k inclusive, the macro fetched tokens eight by eight, and not
+% nine by nine as is done now. I have no idea why.
+%
+% \xintNum gets redefined by $xintfracnameimp.
+% |
+% \begin{macrocode}
+\def\xintiNum {\romannumeral0\xintinum }%
+\def\xintinum #1%
+{%
+ \expandafter\XINT_num_cleanup\the\numexpr\expandafter\XINT_num_loop
+ \romannumeral`&&@#1\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z
+}%
+\def\xintNum {\romannumeral0\xintnum }%
+\let\xintnum\xintinum
+\def\XINT_num #1%
+{%
+ \expandafter\XINT_num_cleanup\the\numexpr\XINT_num_loop
+ #1\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z
+}%
+\def\XINT_num_loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\XINT_num_end\xint:
+ #1#2#3#4#5#6#7#8#9%
+ \ifnum \numexpr #1#2#3#4#5#6#7#8#9+\xint_c_ = \xint_c_
+% \end{macrocode}
+% \lverb|&
+% means that so far only signs encountered, (if syntax is legal) then possibly
+% zeroes
+% or a terminated or not terminated \numexpr evaluating to zero
+% In that latter case a correct zero will be produced in the end.
+% |
+% \begin{macrocode}
+ \expandafter\XINT_num_loop
+ \else
+% \end{macrocode}
+% \lverb|&
+% non terminated \numexpr (with nine tokens total) are
+% safe as after \fi, there is then \xint:
+% |
+% \begin{macrocode}
+ \expandafter\relax
+ \fi
+}%
+\def\XINT_num_end\xint:#1\xint:{#1+\xint_c_\xint:}% empty input ok
+\def\XINT_num_cleanup #1\xint:#2\Z { #1}%
+% \end{macrocode}
+% \subsection{\csh{xintiiSgn}}
+% \lverb|&
+% 1.2l made \xintiiSgn robust against non terminated input.
+%
+% 1.2o deprecates here \xintSgn (it requires xintfrac.sty).
+% |
+% \begin{macrocode}
+\def\xintiiSgn {\romannumeral0\xintiisgn }%
+\def\xintiisgn #1%
+{%
+ \expandafter\XINT_sgn \romannumeral`&&@#1\xint:
+}%
+\def\XINT_sgn #1#2\xint:
+{%
+ \xint_UDzerominusfork
+ #1-{ 0}%
+ 0#1{-1}%
+ 0-{ 1}%
+ \krof
+}%
+\def\XINT_Sgn #1#2\xint:
+{%
+ \xint_UDzerominusfork
+ #1-{0}%
+ 0#1{-1}%
+ 0-{1}%
+ \krof
+}%
+\def\XINT_cntSgn #1#2\xint:
+{%
+ \xint_UDzerominusfork
+ #1-\xint_c_
+ 0#1\xint_c_mone
+ 0-\xint_c_i
+ \krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiOpp}}
+% \lverb|Attention, \xintiiOpp non robust against non terminated inputs.
+% Reason is I don't want to have to grab a delimiter at the end, as everything
+% happens "upfront".|
+% \begin{macrocode}
+\def\xintiiOpp {\romannumeral0\xintiiopp }%
+\def\xintiiopp #1%
+{%
+ \expandafter\XINT_opp \romannumeral`&&@#1%
+}%
+\def\XINT_Opp #1{\romannumeral0\XINT_opp #1}%
+\def\XINT_opp #1%
+{%
+ \xint_UDzerominusfork
+ #1-{ 0}% zero
+ 0#1{ }% negative
+ 0-{ -#1}% positive
+ \krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiAbs}}
+% \lverb|&
+% Attention \xintiiAbs non robust against non terminated input.
+%|
+% \begin{macrocode}
+\def\xintiiAbs {\romannumeral0\xintiiabs }%
+\def\xintiiabs #1%
+{%
+ \expandafter\XINT_abs \romannumeral`&&@#1%
+}%
+\def\XINT_abs #1%
+{%
+ \xint_UDsignfork
+ #1{ }%
+ -{ #1}%
+ \krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFDg}}
+% \lverb|&
+% FIRST DIGIT.
+%
+% 1.2l: \xintiiFDg made robust against non terminated input.
+%
+% 1.2o deprecates \xintiiFDg, gives to \xintFDg former meaning of \xintiiFDg.|
+% \begin{macrocode}
+\def\xintFDg {\romannumeral0\xintfdg }%
+\def\xintfdg #1{\expandafter\XINT_fdg \romannumeral`&&@#1\xint:\Z}%
+\def\XINT_FDg #1%
+ {\romannumeral0\expandafter\XINT_fdg\romannumeral`&&@\xintnum{#1}\xint:\Z }%
+\def\XINT_fdg #1#2#3\Z
+{%
+ \xint_UDzerominusfork
+ #1-{ 0}% zero
+ 0#1{ #2}% negative
+ 0-{ #1}% positive
+ \krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintLDg}}
+% \lverb|&
+% LAST DIGIT.
+%
+% Rewritten for 1.2i (2016/12/10). Surprisingly perhaps, it is faster than
+% \xintLastItem from xintkernel.sty despite the \numexpr operations.
+%
+% 1.2o deprecates \xintiiLDg, gives to \xintLDg former meaning of \xintiiLDg.
+%
+% Attention \xintLDg non robust against non terminated input.
+% |
+% \begin{macrocode}
+\def\xintLDg {\romannumeral0\xintldg }%
+\def\xintldg #1{\expandafter\XINT_ldg_fork\romannumeral`&&@#1%
+ \XINT_ldg_c{}{}{}{}{}{}{}{}\xint_bye\relax}%
+\def\XINT_ldg_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_ldg
+ -{\XINT_ldg#1}%
+ \krof
+}%
+\def\XINT_ldg #1{%
+\def\XINT_ldg ##1##2##3##4##5##6##7##8##9%
+ {\expandafter#1%
+ \the\numexpr##9##8##7##6##5##4##3##2##1*\xint_c_+\XINT_ldg_a##9}%
+}\XINT_ldg{ }%
+\def\XINT_ldg_a#1#2{\XINT_ldg_cbye#2\XINT_ldg_d#1\XINT_ldg_c\XINT_ldg_b#2}%
+\def\XINT_ldg_b#1#2#3#4#5#6#7#8#9{#9#8#7#6#5#4#3#2#1*\xint_c_+\XINT_ldg_a#9}%
+\def\XINT_ldg_c #1#2\xint_bye{#1}%
+\def\XINT_ldg_cbye #1\XINT_ldg_c{}%
+\def\XINT_ldg_d#1#2\xint_bye{#1}%
+% \end{macrocode}
+%
+% \subsection{\csh{xintDouble}}
+% \lverb|Attention \xintDouble non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintDouble {\romannumeral0\xintdouble}%
+\def\xintdouble #1{\expandafter\XINT_dbl_fork\romannumeral`&&@#1%
+ \xint_bye2345678\xint_bye*\xint_c_ii\relax}%
+\def\XINT_dbl_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_dbl_neg
+ -\XINT_dbl
+ \krof #1%
+}%
+\def\XINT_dbl_neg-{\expandafter-\romannumeral0\XINT_dbl}%
+\def\XINT_dbl #1{%
+\def\XINT_dbl ##1##2##3##4##5##6##7##8%
+ {\expandafter#1\the\numexpr##1##2##3##4##5##6##7##8\XINT_dbl_a}%
+}\XINT_dbl{ }%
+\def\XINT_dbl_a #1#2#3#4#5#6#7#8%
+ {\expandafter\XINT_dbl_e\the\numexpr 1#1#2#3#4#5#6#7#8\XINT_dbl_a}%
+\def\XINT_dbl_e#1{*\xint_c_ii\if#13+\xint_c_i\fi\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintHalf}}
+% \lverb|Attention \xintHalf non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintHalf {\romannumeral0\xinthalf}%
+\def\xinthalf #1{\expandafter\XINT_half_fork\romannumeral`&&@#1%
+ \xint_bye\xint_Bye345678\xint_bye
+ *\xint_c_v+\xint_c_v)/\xint_c_x-\xint_c_i\relax}%
+\def\XINT_half_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_half_neg
+ -\XINT_half
+ \krof #1%
+}%
+\def\XINT_half_neg-{\xintiiopp\XINT_half}%
+\def\XINT_half #1{%
+\def\XINT_half ##1##2##3##4##5##6##7##8%
+ {\expandafter#1\the\numexpr(##1##2##3##4##5##6##7##8\XINT_half_a}%
+}\XINT_half{ }%
+\def\XINT_half_a#1{\xint_Bye#1\xint_bye\XINT_half_b#1}%
+\def\XINT_half_b #1#2#3#4#5#6#7#8%
+ {\expandafter\XINT_half_e\the\numexpr(1#1#2#3#4#5#6#7#8\XINT_half_a}%
+\def\XINT_half_e#1{*\xint_c_v+#1-\xint_c_v)\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintInc}}
+% \lverb|1.2i much delayed complete rewrite in 1.2 style.
+%
+% As we take 9 by 9 with the input save stack at 5000 this allows a bit less
+% than 9 times 2500 = 22500 digits on input.
+%
+% Attention \xintInc non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintInc {\romannumeral0\xintinc}%
+\def\xintinc #1{\expandafter\XINT_inc_fork\romannumeral`&&@#1%
+ \xint_bye23456789\xint_bye+\xint_c_i\relax}%
+\def\XINT_inc_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_inc_neg
+ -\XINT_inc
+ \krof #1%
+}%
+\def\XINT_inc_neg-#1\xint_bye#2\relax
+ {\xintiiopp\XINT_dec #1\XINT_dec_bye234567890\xint_bye}%
+\def\XINT_inc #1{%
+\def\XINT_inc ##1##2##3##4##5##6##7##8##9%
+ {\expandafter#1\the\numexpr##1##2##3##4##5##6##7##8##9\XINT_inc_a}%
+}\XINT_inc{ }%
+\def\XINT_inc_a #1#2#3#4#5#6#7#8#9%
+ {\expandafter\XINT_inc_e\the\numexpr 1#1#2#3#4#5#6#7#8#9\XINT_inc_a}%
+\def\XINT_inc_e#1{\if#12+\xint_c_i\fi\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintDec}}
+% \lverb|1.2i much delayed complete rewrite in the 1.2 style. Things are a
+% bit more complicated than \xintInc because 2999999999 is too big for TeX.
+%
+% Attention \xintDec non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintDec {\romannumeral0\xintdec}%
+\def\xintdec #1{\expandafter\XINT_dec_fork\romannumeral`&&@#1%
+ \XINT_dec_bye234567890\xint_bye}%
+\def\XINT_dec_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_dec_neg
+ -\XINT_dec
+ \krof #1%
+}%
+\def\XINT_dec_neg-#1\XINT_dec_bye#2\xint_bye
+ {\expandafter-%
+ \romannumeral0\XINT_inc #1\xint_bye23456789\xint_bye+\xint_c_i\relax}%
+\def\XINT_dec #1{%
+\def\XINT_dec ##1##2##3##4##5##6##7##8##9%
+ {\expandafter#1\the\numexpr##1##2##3##4##5##6##7##8##9\XINT_dec_a}%
+}\XINT_dec{ }%
+\def\XINT_dec_a #1#2#3#4#5#6#7#8#9%
+ {\expandafter\XINT_dec_e\the\numexpr 1#1#2#3#4#5#6#7#8#9\XINT_dec_a}%
+\def\XINT_dec_bye #1\XINT_dec_a#2#3\xint_bye
+ {\if#20-\xint_c_ii\relax+\else-\fi\xint_c_i\relax}%
+\def\XINT_dec_e#1{\unless\if#11\xint_dothis{-\xint_c_i#1}\fi\xint_orthat\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintDSL}}
+% \lverb|DECIMAL SHIFT LEFT (=MULTIPLICATION PAR 10). Rewritten for 1.2i.
+% This was very old code... I never came back to it, but I should have
+% rewritten it long time ago.
+%
+% Attention \xintDSL non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintDSL {\romannumeral0\xintdsl }%
+\def\xintdsl #1{\expandafter\XINT_dsl\romannumeral`&&@#10}%
+\def\XINT_dsl#1{%
+\def\XINT_dsl ##1{\xint_gob_til_zero ##1\xint_dsl_zero 0#1##1}%
+}\XINT_dsl{ }%
+\def\xint_dsl_zero 0 0{ }%
+% \end{macrocode}
+% \subsection{\csh{xintDSR}}
+% \lverb|Decimal shift right, truncates towards zero. Rewritten for 1.2i.
+% Limited to 22483 digits on input.
+%
+% Attention \xintDSR non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintDSR{\romannumeral0\xintdsr}%
+\def\xintdsr #1{\expandafter\XINT_dsr_fork\romannumeral`&&@#1%
+ \xint_bye\xint_Bye3456789\xint_bye+\xint_c_v)/\xint_c_x-\xint_c_i\relax}%
+\def\XINT_dsr_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_dsr_neg
+ -\XINT_dsr
+ \krof #1%
+}%
+\def\XINT_dsr_neg-{\xintiiopp\XINT_dsr}%
+\def\XINT_dsr #1{%
+\def\XINT_dsr ##1##2##3##4##5##6##7##8##9%
+ {\expandafter#1\the\numexpr(##1##2##3##4##5##6##7##8##9\XINT_dsr_a}%
+}\XINT_dsr{ }%
+\def\XINT_dsr_a#1{\xint_Bye#1\xint_bye\XINT_dsr_b#1}%
+\def\XINT_dsr_b #1#2#3#4#5#6#7#8#9%
+ {\expandafter\XINT_dsr_e\the\numexpr(1#1#2#3#4#5#6#7#8#9\XINT_dsr_a}%
+\def\XINT_dsr_e #1{)\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintDSRr}}
+% \lverb|New with 1.2i. Decimal shift right, rounds away from zero; done in
+% the 1.2 spirit (with much delay, sorry). Used by \xintRound, \xintDivRound.
+%
+% This is about the first time I am happy that the division in \numexpr
+% rounds!
+%
+% Attention \xintDSRr non robust against non terminated input.|
+% \begin{macrocode}
+\def\xintDSRr{\romannumeral0\xintdsrr}%
+\def\xintdsrr #1{\expandafter\XINT_dsrr_fork\romannumeral`&&@#1%
+ \xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax}%
+\def\XINT_dsrr_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_dsrr_neg
+ -\XINT_dsrr
+ \krof #1%
+}%
+\def\XINT_dsrr_neg-{\xintiiopp\XINT_dsrr}%
+\def\XINT_dsrr #1{%
+\def\XINT_dsrr ##1##2##3##4##5##6##7##8##9%
+ {\expandafter#1\the\numexpr##1##2##3##4##5##6##7##8##9\XINT_dsrr_a}%
+}\XINT_dsrr{ }%
+\def\XINT_dsrr_a#1{\xint_Bye#1\xint_bye\XINT_dsrr_b#1}%
+\def\XINT_dsrr_b #1#2#3#4#5#6#7#8#9%
+ {\expandafter\XINT_dsrr_e\the\numexpr1#1#2#3#4#5#6#7#8#9\XINT_dsrr_a}%
+\let\XINT_dsrr_e\XINT_inc_e
+% \end{macrocode}
+% \subsection*{Blocks of eight digits}
+% \addcontentsline{toc}{subsection}{Blocks of eight digits}
+% \lverb|The lingua of release 1.2.|
+%
+% \subsection{\csh{XINT_cuz}}
+% \lverb|This (launched by \romannumeral0) iterately removes all leading
+% zeroes from a sequence of 8N digits ended by \R.
+%
+% Rewritten for 1.2l, now uses \numexpr governed expansion and \ifnum test
+% rather than delimited gobbling macros.
+%
+% Note 2015/11/28: with only four digits the gob_til_fourzeroes had proved
+% in some old testing faster than \ifnum test. But with eight digits, the
+% execution times are much closer, as I tested back then.
+% |
+% \begin{macrocode}
+\def\XINT_cuz #1{%
+\def\XINT_cuz {\expandafter#1\the\numexpr\XINT_cuz_loop}%
+}\XINT_cuz{ }%
+\def\XINT_cuz_loop #1#2#3#4#5#6#7#8#9%
+{%
+ #1#2#3#4#5#6#7#8%
+ \xint_gob_til_R #9\XINT_cuz_hitend\R
+ \ifnum #1#2#3#4#5#6#7#8>\xint_c_
+ \expandafter\XINT_cuz_cleantoend
+ \else\expandafter\XINT_cuz_loop
+ \fi #9%
+}%
+\def\XINT_cuz_hitend\R #1\R{\relax}%
+\def\XINT_cuz_cleantoend #1\R{\relax #1}%
+% \end{macrocode}
+% \subsection{\csh{XINT_cuz_byviii}}
+% \lverb|This removes eight by eight leading zeroes from a sequence of 8N digits
+% ended by \R. Thus, we still have 8N digits on output. Expansion started by
+% \romannumeral0 |
+% \begin{macrocode}
+\def\XINT_cuz_byviii #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_R #9\XINT_cuz_byviii_e \R
+ \xint_gob_til_eightzeroes #1#2#3#4#5#6#7#8\XINT_cuz_byviii_z 00000000%
+ \XINT_cuz_byviii_done #1#2#3#4#5#6#7#8#9%
+}%
+\def\XINT_cuz_byviii_z 00000000\XINT_cuz_byviii_done 00000000{\XINT_cuz_byviii}%
+\def\XINT_cuz_byviii_done #1\R { #1}%
+\def\XINT_cuz_byviii_e\R #1\XINT_cuz_byviii_done #2\R{ #2}%
+% \end{macrocode}
+% \subsection{\csh{XINT_unsep_loop}}
+%
+% \lverb|This is used as
+%( \the\numexpr0\XINT_unsep_loop (blocks of 1<8digits>!)%
+%: \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax
+%)
+% It removes the 1's and !'s, and outputs the 8N digits with a 0 token as
+% as prefix which will have to be cleaned out by caller.
+%
+% Actually it does not matter whether the blocks contain really 8 digits, all
+% that matters is that they have 1 as first digit (and at most 9 digits after
+% that to obey the TeX-\numexpr bound).
+%
+% Done at 1.2l for usage by other macros. The similar code in earlier releases
+% was strangely in O(N^2) style, apparently to avoid some memory constraints.
+% But these memory constraints related to \numexpr chaining seems to be in
+% many places in xint code base. The 1.2l version is written in the 1.2i style
+% of \xintInc etc... and is compatible with some 1! block without digits
+% among the treated blocks, they will disappear.|
+% \begin{macrocode}
+\def\XINT_unsep_loop #1!#2!#3!#4!#5!#6!#7!#8!#9!%
+{%
+ \expandafter\XINT_unsep_clean
+ \the\numexpr #1\expandafter\XINT_unsep_clean
+ \the\numexpr #2\expandafter\XINT_unsep_clean
+ \the\numexpr #3\expandafter\XINT_unsep_clean
+ \the\numexpr #4\expandafter\XINT_unsep_clean
+ \the\numexpr #5\expandafter\XINT_unsep_clean
+ \the\numexpr #6\expandafter\XINT_unsep_clean
+ \the\numexpr #7\expandafter\XINT_unsep_clean
+ \the\numexpr #8\expandafter\XINT_unsep_clean
+ \the\numexpr #9\XINT_unsep_loop
+}%
+\def\XINT_unsep_clean 1{\relax}%
+% \end{macrocode}
+% \subsection{\csh{XINT_unsep_cuzsmall}}
+%
+% \lverb|This is used as
+%( \romannumeral0\XINT_unsep_cuzsmall (blocks of 1<8d>!)%
+%: \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax
+%)
+% It removes the 1's and !'s, and removes the leading zeroes *of
+% the first block*.
+%
+% Redone for 1.2l: the 1.2 variant was strangely in O(N^2) style.|
+% \begin{macrocode}
+\def\XINT_unsep_cuzsmall
+{%
+ \expandafter\XINT_unsep_cuzsmall_x\the\numexpr0\XINT_unsep_loop
+}%
+\def\XINT_unsep_cuzsmall_x #1{%
+\def\XINT_unsep_cuzsmall_x 0##1##2##3##4##5##6##7##8%
+{%
+ \expandafter#1\the\numexpr ##1##2##3##4##5##6##7##8\relax
+}}\XINT_unsep_cuzsmall_x{ }%
+% \end{macrocode}
+% \subsection{\csh{XINT_div_unsepQ}}
+%
+% \lverb|This is used by division to remove separators from the produced
+% quotient. The quotient is produced in the correct order. The routine will
+% also remove leading zeroes. An extra initial block of 8 zeroes is possible
+% and thus if present must be removed. Then the next eight digits must be
+% cleaned of leading zeroes. Attention that there might be a single
+% block of 8 zeroes. Expansion launched by \romannumeral0.
+%
+% Rewritten for 1.2l in 1.2i style.|
+% \begin{macrocode}
+\def\XINT_div_unsepQ_delim {\xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax\Z}%
+\def\XINT_div_unsepQ
+{%
+ \expandafter\XINT_div_unsepQ_x\the\numexpr0\XINT_unsep_loop
+}%
+\def\XINT_div_unsepQ_x #1{%
+\def\XINT_div_unsepQ_x 0##1##2##3##4##5##6##7##8##9%
+{%
+ \xint_gob_til_Z ##9\XINT_div_unsepQ_one\Z
+ \xint_gob_til_eightzeroes ##1##2##3##4##5##6##7##8\XINT_div_unsepQ_y 00000000%
+ \expandafter#1\the\numexpr ##1##2##3##4##5##6##7##8\relax ##9%
+}}\XINT_div_unsepQ_x{ }%
+\def\XINT_div_unsepQ_y #1{%
+\def\XINT_div_unsepQ_y ##1\relax ##2##3##4##5##6##7##8##9%
+{%
+ \expandafter#1\the\numexpr ##2##3##4##5##6##7##8##9\relax
+}}\XINT_div_unsepQ_y{ }%
+\def\XINT_div_unsepQ_one#1\expandafter{\expandafter}%
+% \end{macrocode}
+% \subsection{\csh{XINT_div_unsepR}}
+%
+% \lverb|This is used by division to remove separators from the produced
+% remainder. The remainder is here in correct order. It must be cleaned of
+% leading zeroes, possibly all the way.
+%
+% Also rewritten for 1.2l, the 1.2 version was O(N^2) style.
+%
+% Terminator \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax\R
+%
+% We have a need for something like \R because it is not guaranteed the thing
+% is not actually zero.|
+% \begin{macrocode}
+\def\XINT_div_unsepR
+{%
+ \expandafter\XINT_div_unsepR_x\the\numexpr0\XINT_unsep_loop
+}%
+\def\XINT_div_unsepR_x#1{%
+\def\XINT_div_unsepR_x 0{\expandafter#1\the\numexpr\XINT_cuz_loop}%
+}\XINT_div_unsepR_x{ }%
+% \end{macrocode}
+% \subsection{\csh{XINT_zeroes_forviii}}
+%
+% \lverb|&
+%( \romannumeral0\XINT_zeroes_forviii #1\R\R\R\R\R\R\R\R{10}0000001\W
+%)
+% produces a string of k 0's such that k+length(#1) is smallest bigger multiple
+% of eight.|
+% \begin{macrocode}
+\def\XINT_zeroes_forviii #1#2#3#4#5#6#7#8%
+{%
+ \xint_gob_til_R #8\XINT_zeroes_forviii_end\R\XINT_zeroes_forviii
+}%
+\def\XINT_zeroes_forviii_end#1{%
+\def\XINT_zeroes_forviii_end\R\XINT_zeroes_forviii ##1##2##3##4##5##6##7##8##9\W
+{%
+ \expandafter#1\xint_gob_til_one ##2##3##4##5##6##7##8%
+}}\XINT_zeroes_forviii_end{ }%
+% \end{macrocode}
+% \subsection{\csh{XINT_sepbyviii_Z}}
+%
+% \lverb|This is used as
+%( \the\numexpr\XINT_sepbyviii_Z <8Ndigits>\XINT_sepbyviii_Z_end 2345678\relax
+%)
+% It produces 1<8d>!...1<8d>!1;!
+%
+% Prior to 1.2l it used \Z as terminator not the semi-colon (hence the name).
+% The switch to ; was done at a time I thought perhaps I would use an internal
+% format maintaining such 8 digits blocks, and this has to be compatible with
+% the \csname...\endcsname encapsulation in \xintexpr parsers.|
+% \begin{macrocode}
+\def\XINT_sepbyviii_Z #1#2#3#4#5#6#7#8%
+{%
+ 1#1#2#3#4#5#6#7#8\expandafter!\the\numexpr\XINT_sepbyviii_Z
+}%
+\def\XINT_sepbyviii_Z_end #1\relax {;!}%
+% \end{macrocode}
+% \subsection{\csh{XINT_sepbyviii_andcount}}
+%
+% \lverb|This is used as
+%( \the\numexpr\XINT_sepbyviii_andcount <8Ndigits>$%
+%: \XINT_sepbyviii_end 2345678\relax
+%: \xint_c_vii!\xint_c_vi!\xint_c_v!\xint_c_iv!$%
+%: \xint_c_iii!\xint_c_ii!\xint_c_i!\xint_c_\W
+%)
+% It will produce
+%( 1<8d>!1<8d>!....1<8d>!1\xint:<count of blocks>\xint:
+%)
+% Used by
+% \XINT_div_prepare_g for \XINT_div_prepare_h, and also by \xintiiCmp.|
+% \begin{macrocode}
+\def\XINT_sepbyviii_andcount
+{%
+ \expandafter\XINT_sepbyviii_andcount_a\the\numexpr\XINT_sepbyviii
+}%
+\def\XINT_sepbyviii #1#2#3#4#5#6#7#8%
+{%
+ 1#1#2#3#4#5#6#7#8\expandafter!\the\numexpr\XINT_sepbyviii
+}%
+\def\XINT_sepbyviii_end #1\relax {\relax\XINT_sepbyviii_andcount_end!}%
+\def\XINT_sepbyviii_andcount_a {\XINT_sepbyviii_andcount_b \xint_c_\xint:}%
+\def\XINT_sepbyviii_andcount_b #1\xint:#2!#3!#4!#5!#6!#7!#8!#9!%
+{%
+ #2\expandafter!\the\numexpr#3\expandafter!\the\numexpr#4\expandafter
+ !\the\numexpr#5\expandafter!\the\numexpr#6\expandafter!\the\numexpr
+ #7\expandafter!\the\numexpr#8\expandafter!\the\numexpr#9\expandafter!\the\numexpr
+ \expandafter\XINT_sepbyviii_andcount_b\the\numexpr #1+\xint_c_viii\xint:%
+}%
+\def\XINT_sepbyviii_andcount_end #1\XINT_sepbyviii_andcount_b\the\numexpr
+ #2+\xint_c_viii\xint:#3#4\W {\expandafter\xint:\the\numexpr #2+#3\xint:}%
+% \end{macrocode}
+% \subsection{\csh{XINT_rsepbyviii}}
+%
+% \lverb|This is used as
+%( \the\numexpr1\XINT_rsepbyviii <8Ndigits>$%
+%: \XINT_rsepbyviii_end_A 2345678$%
+%: \XINT_rsepbyviii_end_B 2345678\relax UV$%
+%)
+% and will produce
+%( 1<8digits>!1<8digits>\xint:1<8digits>!...
+%)
+% where the original
+% digits are organized by eight, and the order inside successive pairs of
+% blocks separated by \xint: has been reversed. Output ends either in
+% 1<8d>!1<8d>\xint:1U\xint: (even) or 1<8d>!1<8d>\xint:1V!1<8d>\xint: (odd)
+%
+% The U an V should be \numexpr1 stoppers (or will expand and be ended by !).
+% This macro is currently (1.2..1.2l) exclusively used in combination with
+% \XINT_sepandrev_andcount or \XINT_sepandrev.
+% |
+% \begin{macrocode}
+\def\XINT_rsepbyviii #1#2#3#4#5#6#7#8%
+{%
+ \XINT_rsepbyviii_b {#1#2#3#4#5#6#7#8}%
+}%
+\def\XINT_rsepbyviii_b #1#2#3#4#5#6#7#8#9%
+{%
+ #2#3#4#5#6#7#8#9\expandafter!\the\numexpr
+ 1#1\expandafter\xint:\the\numexpr 1\XINT_rsepbyviii
+}%
+\def\XINT_rsepbyviii_end_B #1\relax #2#3{#2\xint:}%
+\def\XINT_rsepbyviii_end_A #11#2\expandafter #3\relax #4#5{#5!1#2\xint:}%
+% \end{macrocode}
+% \subsection{\csh{XINT_sepandrev}}
+% \lverb|This is used typically as
+%( \romannumeral0\XINT_sepandrev <8Ndigits>$%
+%: \XINT_rsepbyviii_end_A 2345678$%
+%: \XINT_rsepbyviii_end_B 2345678\relax UV$%
+%: \R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\W
+%)
+% and will produce
+%( 1<8digits>!1<8digits>!1<8digits>!...
+%)
+% where the blocks have
+% been globally reversed. The UV here are only place holders (must be \numexpr1
+% stoppers) to share same
+% syntax as \XINT_sepandrev_andcount, they are gobbled (#2 in \XINT_sepandrev_done).|
+% \begin{macrocode}
+\def\XINT_sepandrev
+{%
+ \expandafter\XINT_sepandrev_a\the\numexpr 1\XINT_rsepbyviii
+}%
+\def\XINT_sepandrev_a {\XINT_sepandrev_b {}}%
+\def\XINT_sepandrev_b #1#2\xint:#3\xint:#4\xint:#5\xint:#6\xint:#7\xint:#8\xint:#9\xint:%
+{%
+ \xint_gob_til_R #9\XINT_sepandrev_end\R
+ \XINT_sepandrev_b {#9!#8!#7!#6!#5!#4!#3!#2!#1}%
+}%
+\def\XINT_sepandrev_end\R\XINT_sepandrev_b #1#2\W {\XINT_sepandrev_done #1}%
+\def\XINT_sepandrev_done #11#2!{ }%
+% \end{macrocode}
+% \subsection{\csh{XINT_sepandrev_andcount}}
+% \lverb|This is used typically as
+%( \romannumeral0\XINT_sepandrev_andcount <8Ndigits>$%
+%: \XINT_rsepbyviii_end_A 2345678$%
+%: \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+%: \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+%: \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+%)
+% and will produce
+%( <length>.1<8digits>!1<8digits>!1<8digits>!...
+%)
+% where the
+% blocks have been globally reversed and <length> is the number of blocks.|
+% \begin{macrocode}
+\def\XINT_sepandrev_andcount
+{%
+ \expandafter\XINT_sepandrev_andcount_a\the\numexpr 1\XINT_rsepbyviii
+}%
+\def\XINT_sepandrev_andcount_a {\XINT_sepandrev_andcount_b 0!{}}%
+\def\XINT_sepandrev_andcount_b #1!#2#3\xint:#4\xint:#5\xint:#6\xint:#7\xint:#8\xint:#9\xint:%
+{%
+ \xint_gob_til_R #9\XINT_sepandrev_andcount_end\R
+ \expandafter\XINT_sepandrev_andcount_b \the\numexpr #1+\xint_c_i!%
+ {#9!#8!#7!#6!#5!#4!#3!#2}%
+}%
+\def\XINT_sepandrev_andcount_end\R
+ \expandafter\XINT_sepandrev_andcount_b\the\numexpr #1+\xint_c_i!#2#3#4\W
+{\expandafter\XINT_sepandrev_andcount_done\the\numexpr #3+\xint_c_xiv*#1!#2}%
+\def\XINT_sepandrev_andcount_done#1{%
+\def\XINT_sepandrev_andcount_done##1!##21##3!{\expandafter#1\the\numexpr##1-##3\xint:}%
+}\XINT_sepandrev_andcount_done{ }%
+% \end{macrocode}
+% \subsection{\csh{XINT_rev_nounsep}}
+% \lverb|This is used as
+%( \romannumeral0\XINT_rev_nounsep {}<blocks 1<8d>!>\R!\R!\R!\R!\R!\R!\R!\R!\W
+%)
+% It reverses the blocks, keeping the 1's and ! separators. Used multiple
+% times in the division algorithm. The inserted {} here is not optional.|
+% \begin{macrocode}
+\def\XINT_rev_nounsep #1#2!#3!#4!#5!#6!#7!#8!#9!%
+{%
+ \xint_gob_til_R #9\XINT_rev_nounsep_end\R
+ \XINT_rev_nounsep {#9!#8!#7!#6!#5!#4!#3!#2!#1}%
+}%
+\def\XINT_rev_nounsep_end\R\XINT_rev_nounsep #1#2\W {\XINT_rev_nounsep_done #1}%
+\def\XINT_rev_nounsep_done #11{ 1}%
+% \end{macrocode}
+% \subsection{\csh{XINT_unrevbyviii}}
+% \lverb|Used as \romannumeral0\XINT_unrevbyviii 1<8d>!....1<8d>! terminated
+% by
+%( 1;!1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+%)
+% The \romannumeral in unrevbyviii_a is for special effects (expand some token
+% which was put as 1<token>! at the end of the original blocks). This
+% mechanism is used by 1.2 subtraction (still true for 1.2l).|
+% \begin{macrocode}
+\def\XINT_unrevbyviii #11#2!1#3!1#4!1#5!1#6!1#7!1#8!1#9!%
+{%
+ \xint_gob_til_R #9\XINT_unrevbyviii_a\R
+ \XINT_unrevbyviii {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT_unrevbyviii_a#1{%
+\def\XINT_unrevbyviii_a\R\XINT_unrevbyviii ##1##2\W
+ {\expandafter#1\romannumeral`&&@\xint_gob_til_sc ##1}%
+}\XINT_unrevbyviii_a{ }%
+% \end{macrocode}
+% \lverb|Can work with shorter ending pattern: 1;!1\R!1\R!1\R!1\R!1\R!1\R!\W
+% but the longer one of unrevbyviii is ok here too. Used currently (1.2) only
+% by addition, now (1.2c) with long ending pattern. Does the final clean up of
+% leading zeroes contrarily to general \XINT_unrevbyviii.|
+% \begin{macrocode}
+\def\XINT_smallunrevbyviii 1#1!1#2!1#3!1#4!1#5!1#6!1#7!1#8!#9\W%
+{%
+ \expandafter\XINT_cuz_small\xint_gob_til_sc #8#7#6#5#4#3#2#1%
+}%
+% \end{macrocode}
+% \subsection*{Core arithmetic}
+% \addcontentsline{toc}{subsection}{Core arithmetic}
+% \lverb|The four operations have been rewritten entirely for release 1.2.
+% The new routines works with separated blocks of eight digits. They all measure
+% first the lengths of the arguments, even addition and subtraction (this was
+% not the case with xintcore.sty 1.1 or earlier.)
+%
+% The technique of chaining \the\numexpr induces a limitation on the
+% maximal size depending on the size of the input save stack and the maximum
+% expansion depth. For the current (TL2015) settings (5000, resp. 10000), the
+% induced limit for addition of numbers is at 19968 and for multiplication
+% it is observed to be 19959 (valid as of 2015/10/07).
+%
+% Side remark: I tested that \the\numexpr was more efficient than \number. But
+% it reduced the allowable numbers for addition from 19976 digits to 19968
+% digits.|
+%
+% \subsection{\csh{xintiiAdd}}
+% \lverb|1.2l: \xintiiAdd made robust against non terminated input.|
+% \begin{macrocode}
+\def\xintiiAdd {\romannumeral0\xintiiadd }%
+\def\xintiiadd #1{\expandafter\XINT_iiadd\romannumeral`&&@#1\xint:}%
+\def\XINT_iiadd #1#2\xint:#3%
+{%
+ \expandafter\XINT_add_nfork\expandafter#1\romannumeral`&&@#3\xint:#2\xint:
+}%
+\def\XINT_iadd #1#2\xint:#3%
+{%
+ \expandafter\XINT_add_nfork\expandafter
+ #1\romannumeral0\xintnum{#3}\xint:#2\xint:
+}%
+\def\XINT_add_fork #1#2\xint:#3\xint:{\XINT_add_nfork #1#3\xint:#2\xint:}%
+\def\XINT_add_nfork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_add_firstiszero
+ #2\XINT_add_secondiszero
+ 0{}%
+ \krof
+ \xint_UDsignsfork
+ #1#2\XINT_add_minusminus
+ #1-\XINT_add_minusplus
+ #2-\XINT_add_plusminus
+ --\XINT_add_plusplus
+ \krof #1#2%
+}%
+\def\XINT_add_firstiszero #1\krof 0#2#3\xint:#4\xint:{ #2#3}%
+\def\XINT_add_secondiszero #1\krof #20#3\xint:#4\xint:{ #2#4}%
+\def\XINT_add_minusminus #1#2%
+ {\expandafter-\romannumeral0\XINT_add_pp_a {}{}}%
+\def\XINT_add_minusplus #1#2{\XINT_sub_mm_a {}#2}%
+\def\XINT_add_plusminus #1#2%
+ {\expandafter\XINT_opp\romannumeral0\XINT_sub_mm_a #1{}}%
+\def\XINT_add_pp_a #1#2#3\xint:
+{%
+ \expandafter\XINT_add_pp_b
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #2#3\R\R\R\R\R\R\R\R{10}0000001\W
+ #2#3\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ \X #1%
+}%
+\let\XINT_add_plusplus \XINT_add_pp_a
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_add_pp_b #1\xint:#2\X #3\xint:
+{%
+ \expandafter\XINT_add_checklengths
+ \the\numexpr #1\expandafter\xint:%
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #3\R\R\R\R\R\R\R\R{10}0000001\W
+ #3\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ 1;!1;!1;!1;!\W #21;!1;!1;!1;!\W
+ 1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+% \end{macrocode}
+% \lverb|I keep #1.#2. to check if at most 6 + 6 base 10^8 digits which can be
+% treated faster for final reverse. But is this overhead at all useful ? |
+% \begin{macrocode}
+\def\XINT_add_checklengths #1\xint:#2\xint:%
+{%
+ \ifnum #2>#1
+ \expandafter\XINT_add_exchange
+ \else
+ \expandafter\XINT_add_A
+ \fi
+ #1\xint:#2\xint:%
+}%
+\def\XINT_add_exchange #1\xint:#2\xint:#3\W #4\W
+{%
+ \XINT_add_A #2\xint:#1\xint:#4\W #3\W
+}%
+\def\XINT_add_A #1\xint:#2\xint:%
+{%
+ \ifnum #1>\xint_c_vi
+ \expandafter\XINT_add_aa
+ \else \expandafter\XINT_add_aa_small
+ \fi
+}%
+\def\XINT_add_aa {\expandafter\XINT_add_out\the\numexpr\XINT_add_a \xint_c_ii}%
+\def\XINT_add_out{\expandafter\XINT_cuz_small\romannumeral0\XINT_unrevbyviii {}}%
+\def\XINT_add_aa_small
+ {\expandafter\XINT_smallunrevbyviii\the\numexpr\XINT_add_a \xint_c_ii}%
+% \end{macrocode}
+% \lverb|2 as first token of #1 stands for "no carry", 3 will mean a carry (we
+% are adding 1<8digits> to 1<8digits>.) Version 1.2c has terminators of the
+% shape 1;!, replacing the \Z! used in 1.2.
+%
+% Call: \the\numexpr\XINT_add_a 2#11;!1;!1;!1;!\W #21;!1;!1;!1;!\W
+% where #1 and #2 are blocks of 1<8d>!, and #1 is at most as long as #2. This
+% last requirement is a bit annoying (if one wants to do recursive algorithms
+% but not have to check lengths), and I will probably remove it at some point.
+%
+% Output: blocks of 1<8d>! representing the addition, (least significant
+% first), and a final 1;!. In recursive algotithm this 1;! terminator can
+% thus conveniently be reused as part of input terminator (up to the length
+% problem).
+%
+%|
+% \begin{macrocode}
+\def\XINT_add_a #1!#2!#3!#4!#5\W
+ #6!#7!#8!#9!%
+{%
+ \XINT_add_b
+ #1!#6!#2!#7!#3!#8!#4!#9!%
+ #5\W
+}%
+\def\XINT_add_b #11#2#3!#4!%
+{%
+ \xint_gob_til_sc #2\XINT_add_bi ;%
+ \expandafter\XINT_add_c\the\numexpr#1+1#2#3+#4-\xint_c_ii\xint:%
+}%
+\def\XINT_add_bi;\expandafter\XINT_add_c
+ \the\numexpr#1+#2+#3-\xint_c_ii\xint:#4!#5!#6!#7!#8!#9!\W
+{%
+ \XINT_add_k #1#3!#5!#7!#9!%
+}%
+\def\XINT_add_c #1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_add_d #1%
+}%
+\def\XINT_add_d #11#2#3!#4!%
+{%
+ \xint_gob_til_sc #2\XINT_add_di ;%
+ \expandafter\XINT_add_e\the\numexpr#1+1#2#3+#4-\xint_c_ii\xint:%
+}%
+\def\XINT_add_di;\expandafter\XINT_add_e
+ \the\numexpr#1+#2+#3-\xint_c_ii\xint:#4!#5!#6!#7!#8\W
+{%
+ \XINT_add_k #1#3!#5!#7!%
+}%
+\def\XINT_add_e #1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_add_f #1%
+}%
+\def\XINT_add_f #11#2#3!#4!%
+{%
+ \xint_gob_til_sc #2\XINT_add_fi ;%
+ \expandafter\XINT_add_g\the\numexpr#1+1#2#3+#4-\xint_c_ii\xint:%
+}%
+\def\XINT_add_fi;\expandafter\XINT_add_g
+ \the\numexpr#1+#2+#3-\xint_c_ii\xint:#4!#5!#6\W
+{%
+ \XINT_add_k #1#3!#5!%
+}%
+\def\XINT_add_g #1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_add_h #1%
+}%
+\def\XINT_add_h #11#2#3!#4!%
+{%
+ \xint_gob_til_sc #2\XINT_add_hi ;%
+ \expandafter\XINT_add_i\the\numexpr#1+1#2#3+#4-\xint_c_ii\xint:%
+}%
+\def\XINT_add_hi;%
+ \expandafter\XINT_add_i\the\numexpr#1+#2+#3-\xint_c_ii\xint:#4\W
+{%
+ \XINT_add_k #1#3!%
+}%
+\def\XINT_add_i #1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_add_a #1%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_add_k #1{\if #12\expandafter\XINT_add_ke\else\expandafter\XINT_add_l \fi}%
+\def\XINT_add_ke #11;#2\W {\XINT_add_kf #11;!}%
+\def\XINT_add_kf 1{1\relax }%
+\def\XINT_add_l 1#1#2{\xint_gob_til_sc #1\XINT_add_lf ;\XINT_add_m 1#1#2}%
+\def\XINT_add_lf #1\W {1\relax 00000001!1;!}%
+\def\XINT_add_m #1!{\expandafter\XINT_add_n\the\numexpr\xint_c_i+#1\xint:}%
+\def\XINT_add_n #1#2\xint:{1#2\expandafter!\the\numexpr\XINT_add_o #1}%
+% \end{macrocode}
+% \lverb|Here 2 stands for "carry", and 1 for "no carry" (we have been adding
+% 1 to 1<8digits>.)|
+% \begin{macrocode}
+\def\XINT_add_o #1{\if #12\expandafter\XINT_add_l\else\expandafter\XINT_add_ke \fi}%
+% \end{macrocode}
+% \subsection{\csh{xintiiCmp}}
+% \lverb|Moved from xint.sty to xintcore.sty and rewritten for 1.2l.
+%
+% 1.2l's \xintiiCmp is robust against non terminated input.
+%
+% 1.2o deprecates \xintCmp, with xintfrac loaded it will get overwritten anyhow.
+%|
+% \begin{macrocode}
+\def\xintiiCmp {\romannumeral0\xintiicmp }%
+\def\xintiicmp #1{\expandafter\XINT_iicmp\romannumeral`&&@#1\xint:}%
+\def\XINT_iicmp #1#2\xint:#3%
+{%
+ \expandafter\XINT_cmp_nfork\expandafter #1\romannumeral`&&@#3\xint:#2\xint:
+}%
+\def\XINT_icmp #1#2\xint:#3%
+{%
+ \expandafter\XINT_cmp_nfork\expandafter #1\romannumeral0\xintnum{#3}\xint:#2\xint:
+}%
+\def\XINT_cmp_nfork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_cmp_firstiszero
+ #2\XINT_cmp_secondiszero
+ 0{}%
+ \krof
+ \xint_UDsignsfork
+ #1#2\XINT_cmp_minusminus
+ #1-\XINT_cmp_minusplus
+ #2-\XINT_cmp_plusminus
+ --\XINT_cmp_plusplus
+ \krof #1#2%
+}%
+\def\XINT_cmp_firstiszero #1\krof 0#2#3\xint:#4\xint:
+{%
+ \xint_UDzerominusfork
+ #2-{ 0}%
+ 0#2{ 1}%
+ 0-{ -1}%
+ \krof
+}%
+\def\XINT_cmp_secondiszero #1\krof #20#3\xint:#4\xint:
+{%
+ \xint_UDzerominusfork
+ #2-{ 0}%
+ 0#2{ -1}%
+ 0-{ 1}%
+ \krof
+}%
+\def\XINT_cmp_plusminus #1\xint:#2\xint:{ 1}%
+\def\XINT_cmp_minusplus #1\xint:#2\xint:{ -1}%
+\def\XINT_cmp_minusminus
+ --{\expandafter\XINT_opp\romannumeral0\XINT_cmp_plusplus {}{}}%
+\def\XINT_cmp_plusplus #1#2#3\xint:
+{%
+ \expandafter\XINT_cmp_pp
+ \the\numexpr\expandafter\XINT_sepbyviii_andcount
+ \romannumeral0\XINT_zeroes_forviii #2#3\R\R\R\R\R\R\R\R{10}0000001\W
+ #2#3\XINT_sepbyviii_end 2345678\relax
+ \xint_c_vii!\xint_c_vi!\xint_c_v!\xint_c_iv!%
+ \xint_c_iii!\xint_c_ii!\xint_c_i!\xint_c_\W
+ #1%
+}%
+\def\XINT_cmp_pp #1\xint:#2\xint:#3\xint:
+{%
+ \expandafter\XINT_cmp_checklengths
+ \the\numexpr #2\expandafter\xint:%
+ \the\numexpr\expandafter\XINT_sepbyviii_andcount
+ \romannumeral0\XINT_zeroes_forviii #3\R\R\R\R\R\R\R\R{10}0000001\W
+ #3\XINT_sepbyviii_end 2345678\relax
+ \xint_c_vii!\xint_c_vi!\xint_c_v!\xint_c_iv!%
+ \xint_c_iii!\xint_c_ii!\xint_c_i!\xint_c_\W
+ #1;!1;!1;!1;!\W
+}%
+\def\XINT_cmp_checklengths #1\xint:#2\xint:#3\xint:
+{%
+ \ifnum #1=#3
+ \expandafter\xint_firstoftwo
+ \else
+ \expandafter\xint_secondoftwo
+ \fi
+ \XINT_cmp_a {\XINT_cmp_distinctlengths {#1}{#3}}#2;!1;!1;!1;!\W
+}%
+\def\XINT_cmp_distinctlengths #1#2#3\W #4\W
+{%
+ \ifnum #1>#2
+ \expandafter\xint_firstoftwo
+ \else
+ \expandafter\xint_secondoftwo
+ \fi
+ { -1}{ 1}%
+}%
+\def\XINT_cmp_a 1#1!1#2!1#3!1#4!#5\W 1#6!1#7!1#8!1#9!%
+{%
+ \xint_gob_til_sc #1\XINT_cmp_equal ;%
+ \ifnum #1>#6 \XINT_cmp_gt\fi
+ \ifnum #1<#6 \XINT_cmp_lt\fi
+ \xint_gob_til_sc #2\XINT_cmp_equal ;%
+ \ifnum #2>#7 \XINT_cmp_gt\fi
+ \ifnum #2<#7 \XINT_cmp_lt\fi
+ \xint_gob_til_sc #3\XINT_cmp_equal ;%
+ \ifnum #3>#8 \XINT_cmp_gt\fi
+ \ifnum #3<#8 \XINT_cmp_lt\fi
+ \xint_gob_til_sc #4\XINT_cmp_equal ;%
+ \ifnum #4>#9 \XINT_cmp_gt\fi
+ \ifnum #4<#9 \XINT_cmp_lt\fi
+ \XINT_cmp_a #5\W
+}%
+\def\XINT_cmp_lt#1{\def\XINT_cmp_lt\fi ##1\W ##2\W {\fi#1-1}}\XINT_cmp_lt{ }%
+\def\XINT_cmp_gt#1{\def\XINT_cmp_gt\fi ##1\W ##2\W {\fi#11}}\XINT_cmp_gt{ }%
+\def\XINT_cmp_equal #1\W #2\W { 0}%
+% \end{macrocode}
+% \subsection{\csh{xintiiSub}}
+% \lverb|Entirely rewritten for 1.2.
+%
+% Refactored at 1.2l. I was initially aiming at clinching some internal format
+% of the type 1<8digits>!....1<8digits>! for chaining the arithmetic
+% operations (as a preliminary step to decided upon some internal format for
+% $xintfracnameimp macros), thus I wanted to uniformize delimiters in
+% particular and have some core macros inputting and outputting such formats.
+% But the way division is implemented makes it currently very hard to obtain a
+% satisfactory solution. For subtraction I got there almost, but there was
+% added overhead and, as the core sub-routine still assumed the shorter number
+% will be positioned first, one would need to record the length also in the
+% basic internal format, or add the overhead to not make assumption on which
+% one is shorter. I thus but back-tracked my steps but in passing I improved
+% the efficiency (probably) in the worst case branch.
+%
+% Sadly this 1.2l refactoring left an extra ! in macro \XINT_sub_l_Ida. This
+% bug shows only in rare circumstances which escaped out test suite :(
+% Fixed at 1.2q.
+%
+% The other reason for backtracking was in relation with the decimal numbers.
+% Having a core format in base 10^8 but ultimately the radix is actually 10
+% leads to complications. I could use radix 10^8 for \xintiiexpr only, but
+% then I need to make it compatible with sub-\xintiiexpr in \xintexpr, etc...
+% there are many issues of this type.
+%
+% I considered also an approach like in the 1.2l \xintiiCmp, but decided to
+% stick with the method here for now.|
+% \begin{macrocode}
+\def\xintiiSub {\romannumeral0\xintiisub }%
+\def\xintiisub #1{\expandafter\XINT_iisub\romannumeral`&&@#1\xint:}%
+\def\XINT_iisub #1#2\xint:#3%
+{%
+ \expandafter\XINT_sub_nfork\expandafter
+ #1\romannumeral`&&@#3\xint:#2\xint:
+}%
+\def\XINT_isub #1#2\xint:#3%
+{%
+ \expandafter\XINT_sub_nfork\expandafter
+ #1\romannumeral0\xintnum{#3}\xint:#2\xint:
+}%
+\def\XINT_sub_nfork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_sub_firstiszero
+ #2\XINT_sub_secondiszero
+ 0{}%
+ \krof
+ \xint_UDsignsfork
+ #1#2\XINT_sub_minusminus
+ #1-\XINT_sub_minusplus
+ #2-\XINT_sub_plusminus
+ --\XINT_sub_plusplus
+ \krof #1#2%
+}%
+\def\XINT_sub_firstiszero #1\krof 0#2#3\xint:#4\xint:{\XINT_opp #2#3}%
+\def\XINT_sub_secondiszero #1\krof #20#3\xint:#4\xint:{ #2#4}%
+\def\XINT_sub_plusminus #1#2{\XINT_add_pp_a #1{}}%
+\def\XINT_sub_plusplus #1#2%
+ {\expandafter\XINT_opp\romannumeral0\XINT_sub_mm_a #1#2}%
+\def\XINT_sub_minusplus #1#2%
+ {\expandafter-\romannumeral0\XINT_add_pp_a {}#2}%
+\def\XINT_sub_minusminus #1#2{\XINT_sub_mm_a {}{}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_sub_mm_a #1#2#3\xint:
+{%
+ \expandafter\XINT_sub_mm_b
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #2#3\R\R\R\R\R\R\R\R{10}0000001\W
+ #2#3\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ \X #1%
+}%
+\def\XINT_sub_mm_b #1\xint:#2\X #3\xint:
+{%
+ \expandafter\XINT_sub_checklengths
+ \the\numexpr #1\expandafter\xint:%
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #3\R\R\R\R\R\R\R\R{10}0000001\W
+ #3\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ 1;!1;!1;!1;!\W
+ #21;!1;!1;!1;!\W
+ 1;!1\R!1\R!1\R!1\R!%
+ 1\R!1\R!1\R!1\R!\W
+}%
+\def\XINT_sub_checklengths #1\xint:#2\xint:%
+{%
+ \ifnum #2>#1
+ \expandafter\XINT_sub_exchange
+ \else
+ \expandafter\XINT_sub_aa
+ \fi
+}%
+\def\XINT_sub_exchange #1\W #2\W
+{%
+ \expandafter\XINT_opp\romannumeral0\XINT_sub_aa #2\W #1\W
+}%
+\def\XINT_sub_aa
+{%
+ \expandafter\XINT_sub_out\the\numexpr\XINT_sub_a\xint_c_i
+}%
+% \end{macrocode}
+% \lverb|The post-processing (clean-up of zeros, or rescue of situation with
+% A-B where actually B turns out bigger than A) will be done by a macro which
+% depends on circumstances and will be initially last token before the
+% reversion done by \XINT_unrevbyviii.|
+% \begin{macrocode}
+\def\XINT_sub_out {\XINT_unrevbyviii{}}%
+% \end{macrocode}
+% \lverb|1 as first token of #1 stands for "no carry", 0 will mean a carry.
+%
+%( Call: \the\numexpr
+%: \XINT_sub_a 1#11;!1;!1;!1;!\W
+%: #21;!1;!1;!1;!\W
+%)
+% where #1 and #2
+% are blocks of 1<8d>!, #1 (=B) *must* be at most as long as #2 (=A),
+% (in radix 10^8)
+% and the routine wants to compute #2-#1 = A - B
+%
+% 1.2l uses 1;! delimiters to match those of addition (and multiplication).
+% But in the end I reverted the code branch which made it possible to chain
+% such operations keeping internal format in 8 digits blocks throughout.
+%
+% \numexpr governed expansion stops with various possibilities:
+%
+%- Type Ia: #1 shorter than #2, no final carry
+%- Type Ib: #1 shorter than #2, a final carry but next block of #2 > 1
+%- Type Ica: #1 shorter than #2, a final carry, next block of #2 is final and = 1
+%- Type Icb: as Ica except that 00000001 block from #2 was not final
+%- Type Id: #1 shorter than #2, a final carry, next block of #2 = 0
+%- Type IIa: #1 same length as #2, turns out it was <= #2.
+%- Type IIb: #1 same length as #2, but turned out > #2.
+%
+% Various type of post actions are then needed:
+%
+%- Ia: clean up of zeros in most significant block of 8 digits
+%
+%- Ib: as Ia
+%
+%- Ic: there may be significant blocks of 8 zeros to clean up from result.
+% Only case Ica may have arbitrarily many of them, case Icb has only one such
+% block.
+%
+%- Id: blocks of 99999999 may propagate and there might a be final zero block
+% created which has to be cleaned up.
+%
+%- IIa: arbitrarily many zeros might have to be removed.
+%
+%- IIb: We wanted #2-#1 = - (#1-#2), but we got 10^{8N}+#2 -#1 = 10^{8N}-(#1-#2).
+% We need to do the correction then we are as in IIa situation, except that
+% final result can not be zero.
+%
+% The 1.2l method for this correction is (presumably, testing takes lots of
+% time, which I do not have) more efficient than in 1.2 release. |
+% \begin{macrocode}
+\def\XINT_sub_a #1!#2!#3!#4!#5\W #6!#7!#8!#9!%
+{%
+ \XINT_sub_b
+ #1!#6!#2!#7!#3!#8!#4!#9!%
+ #5\W
+}%
+% \end{macrocode}
+% \lverb|As 1.2l code uses 1<8digits>! blocks one has to be careful with
+% the carry digit 1 or 0: A #11#2#3 pattern would result into an empty #1
+% if the carry digit which is upfront is 1, rather than setting #1=1.|
+% \begin{macrocode}
+\def\XINT_sub_b #1#2#3#4!#5!%
+{%
+ \xint_gob_til_sc #3\XINT_sub_bi ;%
+ \expandafter\XINT_sub_c\the\numexpr#1+1#5-#3#4-\xint_c_i\xint:%
+}%
+\def\XINT_sub_c 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_sub_d #1%
+}%
+\def\XINT_sub_d #1#2#3#4!#5!%
+{%
+ \xint_gob_til_sc #3\XINT_sub_di ;%
+ \expandafter\XINT_sub_e\the\numexpr#1+1#5-#3#4-\xint_c_i\xint:
+}%
+\def\XINT_sub_e 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_sub_f #1%
+}%
+\def\XINT_sub_f #1#2#3#4!#5!%
+{%
+ \xint_gob_til_sc #3\XINT_sub_fi ;%
+ \expandafter\XINT_sub_g\the\numexpr#1+1#5-#3#4-\xint_c_i\xint:
+}%
+\def\XINT_sub_g 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_sub_h #1%
+}%
+\def\XINT_sub_h #1#2#3#4!#5!%
+{%
+ \xint_gob_til_sc #3\XINT_sub_hi ;%
+ \expandafter\XINT_sub_i\the\numexpr#1+1#5-#3#4-\xint_c_i\xint:
+}%
+\def\XINT_sub_i 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_sub_a #1%
+}%
+\def\XINT_sub_bi;%
+ \expandafter\XINT_sub_c\the\numexpr#1+1#2-#3\xint:
+ #4!#5!#6!#7!#8!#9!\W
+{%
+ \XINT_sub_k #1#2!#5!#7!#9!%
+}%
+\def\XINT_sub_di;%
+ \expandafter\XINT_sub_e\the\numexpr#1+1#2-#3\xint:
+ #4!#5!#6!#7!#8\W
+{%
+ \XINT_sub_k #1#2!#5!#7!%
+}%
+\def\XINT_sub_fi;%
+ \expandafter\XINT_sub_g\the\numexpr#1+1#2-#3\xint:
+ #4!#5!#6\W
+{%
+ \XINT_sub_k #1#2!#5!%
+}%
+\def\XINT_sub_hi;%
+ \expandafter\XINT_sub_i\the\numexpr#1+1#2-#3\xint:
+ #4\W
+{%
+ \XINT_sub_k #1#2!%
+}%
+% \end{macrocode}
+% \lverb|B terminated. Have we reached the end of A (necessarily at least as
+% long as B) ? (we are computing A-B, digits of B come first).
+%
+% If not, then we are certain that even if there is carry it will not
+% propagate beyond the end of A. But it may propagate far transforming chains
+% of 00000000 into 99999999, and if it does go to the final block which possibly is
+% just 1<00000001>!, we will have those eight zeros to clean up.
+%
+% If A and B have the same length (in base 10^8) then arbitrarily many zeros
+% might have to be cleaned up, and if A<B, the whole result will have to be
+% complemented first.|
+% \begin{macrocode}
+\def\XINT_sub_k #1#2#3%
+{%
+ \xint_gob_til_sc #3\XINT_sub_p;\XINT_sub_l #1#2#3%
+}%
+\def\XINT_sub_l #1%
+ {\xint_UDzerofork #1\XINT_sub_l_carry 0\XINT_sub_l_Ia\krof}%
+\def\XINT_sub_l_Ia 1#1;!#2\W{1\relax#1;!1\XINT_sub_fix_none!}%
+% \end{macrocode}
+% \lverb|
+%
+% |
+% \begin{macrocode}
+\def\XINT_sub_l_carry 1#1!{\ifcase #1
+ \expandafter \XINT_sub_l_Id
+ \or \expandafter \XINT_sub_l_Ic
+ \else\expandafter \XINT_sub_l_Ib\fi 1#1!}%
+\def\XINT_sub_l_Ib #1;#2\W {-\xint_c_i+#1;!1\XINT_sub_fix_none!}%
+\def\XINT_sub_l_Ic 1#1!1#2#3!#4;#5\W
+{%
+ \xint_gob_til_sc #2\XINT_sub_l_Ica;%
+ 1\relax 00000000!1#2#3!#4;!1\XINT_sub_fix_none!%
+}%
+% \end{macrocode}
+% \lverb|&
+% We need to add some extra delimiters at the end for post-action by
+% \XINT_num, so we first grab the material up to \W
+% |
+% \begin{macrocode}
+\def\XINT_sub_l_Ica#1\W
+{%
+ 1;!1\XINT_sub_fix_cuz!%
+ 1;!1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+ \xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z
+}%
+\def\XINT_sub_l_Id 1#1!%
+ {199999999\expandafter!\the\numexpr \XINT_sub_l_Id_a}%
+\def\XINT_sub_l_Id_a 1#1!{\ifcase #1
+ \expandafter \XINT_sub_l_Id
+ \or \expandafter \XINT_sub_l_Id_b
+ \else\expandafter \XINT_sub_l_Ib\fi 1#1!}%
+\def\XINT_sub_l_Id_b 1#1!1#2#3!#4;#5\W
+{%
+ \xint_gob_til_sc #2\XINT_sub_l_Ida;%
+ 1\relax 00000000!1#2#3!#4;!1\XINT_sub_fix_none!%
+}%
+\def\XINT_sub_l_Ida#1\XINT_sub_fix_none{1;!1\XINT_sub_fix_none}%
+% \end{macrocode}
+% \lverb|&
+% This is the case where both operands have same 10^8-base length.
+%
+% We were handling A-B but perhaps B>A. The situation with A=B is also
+% annoying because we then have to clean up all zeros but don't know where to
+% stop (if A>B the first non-zero 8 digits block would tell use when).
+%
+% Here again we need to grab #3\W to position the actually used terminating
+% delimiters.
+% |
+% \begin{macrocode}
+\def\XINT_sub_p;\XINT_sub_l #1#2\W #3\W
+{%
+ \xint_UDzerofork
+ #1{1;!1\XINT_sub_fix_neg!%
+ 1;!1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+ \xint_bye2345678\xint_bye1099999988\relax}% A - B, B > A
+ 0{1;!1\XINT_sub_fix_cuz!%
+ 1;!1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W}%
+ \krof
+ \xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z
+}%
+% \end{macrocode}
+% \lverb|Routines for post-processing after reversal, and removal of
+% separators. It is a matter of cleaning up zeros, and possibly in the bad
+% case to take a complement before that.|
+% \begin{macrocode}
+\def\XINT_sub_fix_none;{\XINT_cuz_small}%
+\def\XINT_sub_fix_cuz ;{\expandafter\XINT_num_cleanup\the\numexpr\XINT_num_loop}%
+% \end{macrocode}
+% \lverb|Case with A and B same number of digits in base 10^8 and B>A.
+%
+% 1.2l subtle chaining on the model of the 1.2i rewrite of \xintInc and
+% similar routines. After taking complement, leading zeroes need to be
+% cleaned up as in B<=A branch.|
+% \begin{macrocode}
+\def\XINT_sub_fix_neg;%
+{%
+ \expandafter-\romannumeral0\expandafter
+ \XINT_sub_comp_finish\the\numexpr\XINT_sub_comp_loop
+}%
+\def\XINT_sub_comp_finish 0{\XINT_sub_fix_cuz;}%
+\def\XINT_sub_comp_loop #1#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT_sub_comp_clean
+ \the\numexpr \xint_c_xi_e_viii_mone-#1#2#3#4#5#6#7#8\XINT_sub_comp_loop
+}%
+% \end{macrocode}
+% \lverb|#1 = 0 signifie une retenue, #1 = 1 pas de retenue, ce qui ne peut
+% arriver que tant qu'il n'y a que des zéros du côté non significatif.
+% Lorsqu'on est revenu au début on a forcément une retenue.|
+% \begin{macrocode}
+\def\XINT_sub_comp_clean 1#1{+#1\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMul}}
+% \lverb|Completely rewritten for 1.2.
+%
+% 1.2l: \xintiiMul made robust against non terminated input.|
+% \begin{macrocode}
+\def\xintiiMul {\romannumeral0\xintiimul }%
+\def\xintiimul #1%
+{%
+ \expandafter\XINT_iimul\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iimul #1#2\xint:#3%
+{%
+ \expandafter\XINT_mul_nfork\expandafter #1\romannumeral`&&@#3\xint:#2\xint:
+}%
+% \end{macrocode}
+% \lverb|(1.2) I have changed the fork, and it complicates matters elsewhere.|
+% \begin{macrocode}
+\def\XINT_mul_fork #1#2\xint:#3\xint:{\XINT_mul_nfork #1#3\xint:#2\xint:}%
+\def\XINT_mul_nfork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_mul_zero
+ #2\XINT_mul_zero
+ 0{}%
+ \krof
+ \xint_UDsignsfork
+ #1#2\XINT_mul_minusminus
+ #1-\XINT_mul_minusplus
+ #2-\XINT_mul_plusminus
+ --\XINT_mul_plusplus
+ \krof #1#2%
+}%
+\def\XINT_mul_zero #1\krof #2#3\xint:#4\xint:{ 0}%
+\def\XINT_mul_minusminus #1#2{\XINT_mul_plusplus {}{}}%
+\def\XINT_mul_minusplus #1#2%
+ {\expandafter-\romannumeral0\XINT_mul_plusplus {}#2}%
+\def\XINT_mul_plusminus #1#2%
+ {\expandafter-\romannumeral0\XINT_mul_plusplus #1{}}%
+\def\XINT_mul_plusplus #1#2#3\xint:
+{%
+ \expandafter\XINT_mul_pre_b
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #2#3\R\R\R\R\R\R\R\R{10}0000001\W
+ #2#3\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ \W #1%
+}%
+\def\XINT_mul_pre_b #1\xint:#2\W #3\xint:
+{%
+ \expandafter\XINT_mul_checklengths
+ \the\numexpr #1\expandafter\xint:%
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #3\R\R\R\R\R\R\R\R{10}0000001\W
+ #3\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ 1;!\W #21;!%
+ 1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+% \end{macrocode}
+% \lverb|Cooking recipe, 2015/10/05.|
+% \begin{macrocode}
+\def\XINT_mul_checklengths #1\xint:#2\xint:%
+{%
+ \ifnum #2=\xint_c_i\expandafter\XINT_mul_smallbyfirst\fi
+ \ifnum #1=\xint_c_i\expandafter\XINT_mul_smallbysecond\fi
+ \ifnum #2<#1
+ \ifnum \numexpr (#2-\xint_c_i)*(#1-#2)<383
+ \XINT_mul_exchange
+ \fi
+ \else
+ \ifnum \numexpr (#1-\xint_c_i)*(#2-#1)>383
+ \XINT_mul_exchange
+ \fi
+ \fi
+ \XINT_mul_start
+}%
+\def\XINT_mul_smallbyfirst #1\XINT_mul_start 1#2!1;!\W
+{%
+ \ifnum#2=\xint_c_i\expandafter\XINT_mul_oneisone\fi
+ \ifnum#2<\xint_c_xxii\expandafter\XINT_mul_verysmall\fi
+ \expandafter\XINT_mul_out\the\numexpr\XINT_smallmul 1#2!%
+}%
+\def\XINT_mul_smallbysecond #1\XINT_mul_start #2\W 1#3!1;!%
+{%
+ \ifnum#3=\xint_c_i\expandafter\XINT_mul_oneisone\fi
+ \ifnum#3<\xint_c_xxii\expandafter\XINT_mul_verysmall\fi
+ \expandafter\XINT_mul_out\the\numexpr\XINT_smallmul 1#3!#2%
+}%
+\def\XINT_mul_oneisone #1!{\XINT_mul_out }%
+\def\XINT_mul_verysmall\expandafter\XINT_mul_out
+ \the\numexpr\XINT_smallmul 1#1!%
+ {\expandafter\XINT_mul_out\the\numexpr\XINT_verysmallmul 0\xint:#1!}%
+\def\XINT_mul_exchange #1\XINT_mul_start #2\W #31;!%
+ {\fi\fi\XINT_mul_start #31;!\W #2}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_mul_start
+ {\expandafter\XINT_mul_out\the\numexpr\XINT_mul_loop 100000000!1;!\W}%
+\def\XINT_mul_out
+ {\expandafter\XINT_cuz_small\romannumeral0\XINT_unrevbyviii {}}%
+% \end{macrocode}
+% \lverb|&
+%
+%( Call:
+%: \the\numexpr \XINT_mul_loop 100000000!1;!\W #11;!\W #21;!
+%)
+% where #1 and #2 are (globally reversed) blocks 1<8d>!. Its is generally more
+% efficient if #1 is the shorter one, but a better recipe is implemented in
+% \XINT_mul_checklengths. One may call \XINT_mul_loop directly (but
+% multiplication by zero will produce many 100000000! blocks on output).
+%
+% Ends after having produced: 1<8d>!....1<8d>!1;!. The last 8-digits block is
+% significant one. It can not be 100000000! except if the loop was called with
+% a zero operand.
+%
+% Thus \XINT_mul_loop can be conveniently called directly in recursive
+% routines, as the output terminator can serve as input terminator, we can
+% arrange to not have to grab the whole thing again.|
+% \begin{macrocode}
+\def\XINT_mul_loop #1\W #2\W 1#3!%
+{%
+ \xint_gob_til_sc #3\XINT_mul_e ;%
+ \expandafter\XINT_mul_a\the\numexpr \XINT_smallmul 1#3!#2\W
+ #1\W #2\W
+}%
+% \end{macrocode}
+% \lverb|Each of #1 and #2 brings its 1;! for \XINT_add_a.|
+% \begin{macrocode}
+\def\XINT_mul_a #1\W #2\W
+{%
+ \expandafter\XINT_mul_b\the\numexpr
+ \XINT_add_a \xint_c_ii #21;!1;!1;!\W #11;!1;!1;!\W\W
+}%
+\def\XINT_mul_b 1#1!{1#1\expandafter!\the\numexpr\XINT_mul_loop }%
+\def\XINT_mul_e;#1\W 1#2\W #3\W {1\relax #2}%
+% \end{macrocode}
+% \lverb|1.2 small and mini multiplication in base 10^8 with carry. Used by
+% the main multiplication routines. But division, float factorial, etc.. have
+% their own variants as they need output with specific constraints.
+%
+% The minimulwc has 1<8digits carry>.<4 high digits>.<4 low digits!<8digits>.
+%
+% It produces a block 1<8d>! and then jump back into \XINT_smallmul_a with the
+% new 8digits carry as argument. The \XINT_smallmul_a fetches a new 1<8d>!
+% block to multiply, and calls back \XINT_minimul_wc having stored the
+% multiplicand for re-use later. When the loop terminates, the final carry is
+% checked for being nul, and in all cases the output is terminated by a 1;!
+%
+% Multiplication by zero will produce blocks of zeros.|
+% \begin{macrocode}
+\def\XINT_minimulwc_a 1#1\xint:#2\xint:#3!#4#5#6#7#8\xint:%
+{%
+ \expandafter\XINT_minimulwc_b
+ \the\numexpr \xint_c_x^ix+#1+#3*#8\xint:
+ #3*#4#5#6#7+#2*#8\xint:
+ #2*#4#5#6#7\xint:%
+}%
+\def\XINT_minimulwc_b 1#1#2#3#4#5#6\xint:#7\xint:%
+{%
+ \expandafter\XINT_minimulwc_c
+ \the\numexpr \xint_c_x^ix+#1#2#3#4#5+#7\xint:#6\xint:%
+}%
+\def\XINT_minimulwc_c 1#1#2#3#4#5#6\xint:#7\xint:#8\xint:%
+{%
+ 1#6#7\expandafter!%
+ \the\numexpr\expandafter\XINT_smallmul_a
+ \the\numexpr \xint_c_x^viii+#1#2#3#4#5+#8\xint:%
+}%
+\def\XINT_smallmul 1#1#2#3#4#5!{\XINT_smallmul_a 100000000\xint:#1#2#3#4\xint:#5!}%
+\def\XINT_smallmul_a #1\xint:#2\xint:#3!1#4!%
+{%
+ \xint_gob_til_sc #4\XINT_smallmul_e;%
+ \XINT_minimulwc_a #1\xint:#2\xint:#3!#4\xint:#2\xint:#3!%
+}%
+\def\XINT_smallmul_e;\XINT_minimulwc_a 1#1\xint:#2;#3!%
+ {\xint_gob_til_eightzeroes #1\XINT_smallmul_f 000000001\relax #1!1;!}%
+\def\XINT_smallmul_f 000000001\relax 00000000!1{1\relax}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_verysmallmul #1\xint:#2!1#3!%
+{%
+ \xint_gob_til_sc #3\XINT_verysmallmul_e;%
+ \expandafter\XINT_verysmallmul_a
+ \the\numexpr #2*#3+#1\xint:#2!%
+}%
+\def\XINT_verysmallmul_e;\expandafter\XINT_verysmallmul_a\the\numexpr
+ #1+#2#3\xint:#4!%
+{\xint_gob_til_zero #2\XINT_verysmallmul_f 0\xint_c_x^viii+#2#3!1;!}%
+\def\XINT_verysmallmul_f #1!1{1\relax}%
+\def\XINT_verysmallmul_a #1#2\xint:%
+{%
+ \unless\ifnum #1#2<\xint_c_x^ix
+ \expandafter\XINT_verysmallmul_bi\else
+ \expandafter\XINT_verysmallmul_bj\fi
+ \the\numexpr \xint_c_x^ix+#1#2\xint:%
+}%
+\def\XINT_verysmallmul_bj{\expandafter\XINT_verysmallmul_cj }%
+\def\XINT_verysmallmul_cj 1#1#2\xint:%
+ {1#2\expandafter!\the\numexpr\XINT_verysmallmul #1\xint:}%
+\def\XINT_verysmallmul_bi\the\numexpr\xint_c_x^ix+#1#2#3\xint:%
+ {1#3\expandafter!\the\numexpr\XINT_verysmallmul #1#2\xint:}%
+% \end{macrocode}
+% \lverb|Used by division and by squaring, not by multiplication itself.
+%
+% This routine does not loop, it only does one mini multiplication with input
+% format <4 high digits>.<4 low digits>!<8 digits>!, and on output
+% 1<8d>!1<8d>!, with least significant block first.|
+% \begin{macrocode}
+\def\XINT_minimul_a #1\xint:#2!#3#4#5#6#7!%
+{%
+ \expandafter\XINT_minimul_b
+ \the\numexpr \xint_c_x^viii+#2*#7\xint:#2*#3#4#5#6+#1*#7\xint:#1*#3#4#5#6\xint:%
+}%
+\def\XINT_minimul_b 1#1#2#3#4#5\xint:#6\xint:%
+{%
+ \expandafter\XINT_minimul_c
+ \the\numexpr \xint_c_x^ix+#1#2#3#4+#6\xint:#5\xint:%
+}%
+\def\XINT_minimul_c 1#1#2#3#4#5#6\xint:#7\xint:#8\xint:%
+{%
+ 1#6#7\expandafter!\the\numexpr \xint_c_x^viii+#1#2#3#4#5+#8!%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiDivision}}
+% \lverb|Completely rewritten for 1.2.
+%
+% WARNING: some comments below try to describe the flow of tokens but they
+% date back to xint 1.09j and I updated them on the fly while doing the 1.2
+% version. As the routine now works in base 10^8, not 10^4 and "drops" the
+% quotient digits,rather than store them upfront as the earlier code, I may
+% well have not correctly converted all such comments. At the last minute some
+% previously #1 became stuff like #1#2#3#4, then of course the old comments
+% describing what the macro parameters stand for are necessarily wrong.
+%
+% Side remark: the way tokens are grouped was not essentially modified in
+% 1.2, although the situation has changed. It was fine-tuned in xint
+% 1.0/1.1 but the context has changed, and perhaps I should revisit this.
+% As a corollary to the fact that quotient digits are now left behind thanks
+% to the chains of \numexpr, some macros which in 1.0/1.1 fetched up to 9
+% parameters now need handle less such parameters. Thus, some rationale for
+% the way the code was structured has disappeared.
+%
+%
+% 1.2l: \xintiiDivision et al. made robust against non terminated input.
+% |
+% \lverb-#1 = A, #2 = B. On calcule le quotient et le reste dans la division
+% euclidienne de A par B: A=BQ+R, 0<= R < |B|.-
+% \begin{macrocode}
+\def\xintiiDivision {\romannumeral0\xintiidivision }%
+\def\xintiidivision #1{\expandafter\XINT_iidivision \romannumeral`&&@#1\xint:}%
+\def\XINT_iidivision #1#2\xint:#3{\expandafter\XINT_iidivision_a\expandafter #1%
+ \romannumeral`&&@#3\xint:#2\xint:}%
+% \end{macrocode}
+% \lverb|On regarde les signes de A et de B.|
+% \begin{macrocode}
+\def\XINT_iidivision_a #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_iidivision_divbyzero #1#2}\fi
+ \if0#1\xint_dothis\XINT_iidivision_aiszero\fi
+ \if-#2\xint_dothis{\expandafter\XINT_iidivision_bneg
+ \romannumeral0\XINT_iidivision_bpos #1}\fi
+ \xint_orthat{\XINT_iidivision_bpos #1#2}%
+}%
+\def\XINT_iidivision_divbyzero#1#2#3\xint:#4\xint:
+ {\if0#1\xint_dothis{\XINT_signalcondition{DivisionUndefined}}\fi
+ \xint_orthat{\XINT_signalcondition{DivisionByZero}}%
+ {Division of #1#4 by #2#3}{}{{0}{0}}}%
+\def\XINT_iidivision_aiszero #1\xint:#2\xint:{{0}{0}}%
+\def\XINT_iidivision_bneg #1% q->-q, r unchanged
+ {\expandafter{\romannumeral0\XINT_opp #1}}%
+\def\XINT_iidivision_bpos #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_iidivision_aneg
+ -{\XINT_iidivision_apos #1}%
+ \krof
+}%
+% \end{macrocode}
+% \lverb|Donc attention malgré son nom \XINT_div_prepare va jusqu'au bout.
+% C'est donc en fait l'entrée principale (pour B>0, A>0) mais elle va
+% regarder si B est < 10^8 et s'il vaut alors 1 ou 2, et si A < 10^8. Dans
+% tous les cas le résultat est produit sous la forme {Q}{R}, avec Q et R sous
+% leur forme final. On doit ensuite ajuster si le B ou le A initial était
+% négatif. Je n'ai pas fait beaucoup d'efforts pour être un minimum efficace
+% si A ou B n'est pas positif.|
+% \begin{macrocode}
+\def\XINT_iidivision_apos #1#2\xint:#3\xint:{\XINT_div_prepare {#2}{#1#3}}%
+\def\XINT_iidivision_aneg #1\xint:#2\xint:
+ {\expandafter
+ \XINT_iidivision_aneg_b\romannumeral0\XINT_div_prepare {#1}{#2}{#1}}%
+\def\XINT_iidivision_aneg_b #1#2{\if0\XINT_Sgn #2\xint:
+ \expandafter\XINT_iidivision_aneg_rzero
+ \else
+ \expandafter\XINT_iidivision_aneg_rpos
+ \fi {#1}{#2}}%
+\def\XINT_iidivision_aneg_rzero #1#2#3{{-#1}{0}}% necessarily q was >0
+\def\XINT_iidivision_aneg_rpos #1%
+{%
+ \expandafter\XINT_iidivision_aneg_end\expandafter
+ {\expandafter-\romannumeral0\xintinc {#1}}% q-> -(1+q)
+}%
+\def\XINT_iidivision_aneg_end #1#2#3%
+{%
+ \expandafter\xint_exchangetwo_keepbraces
+ \expandafter{\romannumeral0\XINT_sub_mm_a {}{}#3\xint:#2\xint:}{#1}% r-> b-r
+}%
+% \end{macrocode}
+% \lverb|Le diviseur B va être étendu par des zéros pour que sa longueur soit
+% multiple de huit. Les zéros seront mis du côté non significatif.|
+% \begin{macrocode}
+\def\XINT_div_prepare #1%
+{%
+ \XINT_div_prepare_a #1\R\R\R\R\R\R\R\R {10}0000001\W !{#1}%
+}%
+\def\XINT_div_prepare_a #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_R #9\XINT_div_prepare_small\R
+ \XINT_div_prepare_b #9%
+}%
+% \end{macrocode}
+% \lverb|B a au plus huit chiffres. On se débarrasse des trucs superflus. Si
+% B>0 n'est ni 1 ni 2, le point d'entrée est \XINT_div_small_a {B}{A} (avec un
+% A positif).|
+% \begin{macrocode}
+\def\XINT_div_prepare_small\R #1!#2%
+{%
+ \ifcase #2
+ \or\expandafter\XINT_div_BisOne
+ \or\expandafter\XINT_div_BisTwo
+ \else\expandafter\XINT_div_small_a
+ \fi {#2}%
+}%
+\def\XINT_div_BisOne #1#2{{#2}{0}}%
+\def\XINT_div_BisTwo #1#2%
+{%
+ \expandafter\expandafter\expandafter\XINT_div_BisTwo_a
+ \ifodd\xintLDg{#2} \expandafter1\else \expandafter0\fi {#2}%
+}%
+\def\XINT_div_BisTwo_a #1#2%
+{%
+ \expandafter{\romannumeral0\XINT_half
+ #2\xint_bye\xint_Bye345678\xint_bye
+ *\xint_c_v+\xint_c_v)/\xint_c_x-\xint_c_i\relax}{#1}%
+}%
+% \end{macrocode}
+% \lverb|B a au plus huit chiffres et est au moins 3. On va l'utiliser
+% directement, sans d'abord le multiplier par une puissance de 10 pour qu'il
+% ait 8 chiffres.|
+% \begin{macrocode}
+\def\XINT_div_small_a #1#2%
+{%
+ \expandafter\XINT_div_small_b
+ \the\numexpr #1/\xint_c_ii\expandafter
+ \xint:\the\numexpr \xint_c_x^viii+#1\expandafter!%
+ \romannumeral0%
+ \XINT_div_small_ba #2\R\R\R\R\R\R\R\R{10}0000001\W
+ #2\XINT_sepbyviii_Z_end 2345678\relax
+}%
+% \end{macrocode}
+% \lverb|Le #2 poursuivra l'expansion par \XINT_div_dosmallsmall ou par
+% \XINT_smalldivx_a suivi de \XINT_sdiv_out.|
+% \begin{macrocode}
+\def\XINT_div_small_b #1!#2{#2#1!}%
+% \end{macrocode}
+% \lverb|On ajoute des zéros avant A, puis on le prépare sous la forme de
+% blocs 1<8d>! Au passage on repère le cas d'un A<10^8.|
+% \begin{macrocode}
+\def\XINT_div_small_ba #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_R #9\XINT_div_smallsmall\R
+ \expandafter\XINT_div_dosmalldiv
+ \the\numexpr\expandafter\XINT_sepbyviii_Z
+ \romannumeral0\XINT_zeroes_forviii
+ #1#2#3#4#5#6#7#8#9%
+}%
+% \end{macrocode}
+% \lverb|Si A<10^8, on va poursuivre par \XINT_div_dosmallsmall
+% round(B/2).10^8+B!{A}. On fait la division directe par \numexpr. Le résultat
+% est produit sous la forme {Q}{R}.|
+% \begin{macrocode}
+\def\XINT_div_smallsmall\R
+ \expandafter\XINT_div_dosmalldiv
+ \the\numexpr\expandafter\XINT_sepbyviii_Z
+ \romannumeral0\XINT_zeroes_forviii #1\R #2\relax
+ {{\XINT_div_dosmallsmall}{#1}}%
+\def\XINT_div_dosmallsmall #1\xint:1#2!#3%
+{%
+ \expandafter\XINT_div_smallsmallend
+ \the\numexpr (#3+#1)/#2-\xint_c_i\xint:#2\xint:#3\xint:%
+}%
+\def\XINT_div_smallsmallend #1\xint:#2\xint:#3\xint:{\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #3-#1*#2}}%
+% \end{macrocode}
+% \lverb|Si A>=10^8, il est maintenant sous la forme 1<8d>!...1<8d>!1;! avec
+% plus significatifs en premier. Donc on poursuit par$newline
+% \expandafter\XINT_sdiv_out\the\numexpr\XINT_smalldivx_a
+% x.1B!1<8d>!...1<8d>!1;! avec x =round(B/2), 1B=10^8+B.|
+% \begin{macrocode}
+\def\XINT_div_dosmalldiv
+ {{\expandafter\XINT_sdiv_out\the\numexpr\XINT_smalldivx_a}}%
+% \end{macrocode}
+% \lverb|Ici B est au moins 10^8, on détermine combien de zéros lui adjoindre
+% pour qu'il soit de longueur 8N.|
+% \begin{macrocode}
+\def\XINT_div_prepare_b
+ {\expandafter\XINT_div_prepare_c\romannumeral0\XINT_zeroes_forviii }%
+\def\XINT_div_prepare_c #1!%
+{%
+ \XINT_div_prepare_d #1.00000000!{#1}%
+}%
+\def\XINT_div_prepare_d #1#2#3#4#5#6#7#8#9%
+{%
+ \expandafter\XINT_div_prepare_e\xint_gob_til_dot #1#2#3#4#5#6#7#8#9!%
+}%
+\def\XINT_div_prepare_e #1!#2!#3#4%
+{%
+ \XINT_div_prepare_f #4#3\X {#1}{#3}%
+}%
+% \end{macrocode}
+% \lverb|attention qu'on calcule ici x'=x+1 (x = huit premiers chiffres du
+% diviseur) et que si x=99999999, x' aura donc 9 chiffres, pas compatible avec
+% div_mini (avant 1.2, x avait 4 chiffres, et on faisait la division avec x'
+% dans un \numexpr). Bon, facile à dire après avoir laissé passer ce bug dans
+% 1.2. C'est le problème lorsqu'au lieu de tout refaire à partir de zéro on
+% recycle d'anciennes routines qui avaient un contexte différent.|
+% \begin{macrocode}
+\def\XINT_div_prepare_f #1#2#3#4#5#6#7#8#9\X
+{%
+ \expandafter\XINT_div_prepare_g
+ \the\numexpr #1#2#3#4#5#6#7#8+\xint_c_i\expandafter
+ \xint:\the\numexpr (#1#2#3#4#5#6#7#8+\xint_c_i)/\xint_c_ii\expandafter
+ \xint:\the\numexpr #1#2#3#4#5#6#7#8\expandafter
+ \xint:\romannumeral0\XINT_sepandrev_andcount
+ #1#2#3#4#5#6#7#8#9\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ \X
+}%
+\def\XINT_div_prepare_g #1\xint:#2\xint:#3\xint:#4\xint:#5\X #6#7#8%
+{%
+ \expandafter\XINT_div_prepare_h
+ \the\numexpr\expandafter\XINT_sepbyviii_andcount
+ \romannumeral0\XINT_zeroes_forviii #8#7\R\R\R\R\R\R\R\R{10}0000001\W
+ #8#7\XINT_sepbyviii_end 2345678\relax
+ \xint_c_vii!\xint_c_vi!\xint_c_v!\xint_c_iv!%
+ \xint_c_iii!\xint_c_ii!\xint_c_i!\xint_c_\W
+ {#1}{#2}{#3}{#4}{#5}{#6}%
+}%
+\def\XINT_div_prepare_h #11\xint:#2\xint:#3#4#5#6%#7#8%
+{%
+ \XINT_div_start_a {#2}{#6}{#1}{#3}{#4}{#5}%{#7}{#8}%
+}%
+% \end{macrocode}
+% \lverb|L, K, A, x',y,x, B, «c». Attention que K est diminué de 1 plus loin.
+% Comme xint 1.2 a déjà repéré K=1, on a ici au minimum K=2. Attention B est à
+% l'envers, A est à l'endroit et les deux avec séparateurs. Attention que ce
+% n'est pas ici qu'on boucle mais en \XINT_div_I_a.|
+% \begin{macrocode}
+\def\XINT_div_start_a #1#2%
+{%
+ \ifnum #1 < #2
+ \expandafter\XINT_div_zeroQ
+ \else
+ \expandafter\XINT_div_start_b
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT_div_zeroQ #1#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_div_zeroQ_end
+ \romannumeral0\XINT_unsep_cuzsmall
+ #3\xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax\xint:
+}%
+\def\XINT_div_zeroQ_end #1\xint:#2%
+ {\expandafter{\expandafter0\expandafter}\XINT_div_cleanR #1#2\xint:}%
+% \end{macrocode}
+% \lverb|L, K, A, x',y,x, B, «c»->K.A.x{LK{x'y}x}B«c»|
+% \begin{macrocode}
+\def\XINT_div_start_b #1#2#3#4#5#6%
+{%
+ \expandafter\XINT_div_finish\the\numexpr
+ \XINT_div_start_c {#2}\xint:#3\xint:{#6}{{#1}{#2}{{#4}{#5}}{#6}}%
+}%
+\def\XINT_div_finish
+{%
+ \expandafter\XINT_div_finish_a \romannumeral`&&@\XINT_div_unsepQ
+}%
+\def\XINT_div_finish_a #1\Z #2\xint:{\XINT_div_finish_b #2\xint:{#1}}%
+% \end{macrocode}
+% \lverb|Ici ce sont routines de fin. Le reste déjà nettoyé. R.Q«c».|
+% \begin{macrocode}
+\def\XINT_div_finish_b #1%
+{%
+ \if0#1%
+ \expandafter\XINT_div_finish_bRzero
+ \else
+ \expandafter\XINT_div_finish_bRpos
+ \fi
+ #1%
+}%
+\def\XINT_div_finish_bRzero 0\xint:#1#2{{#1}{0}}%
+\def\XINT_div_finish_bRpos #1\xint:#2#3%
+{%
+ \expandafter\xint_exchangetwo_keepbraces\XINT_div_cleanR #1#3\xint:{#2}%
+}%
+\def\XINT_div_cleanR #100000000\xint:{{#1}}%
+% \end{macrocode}
+% \lverb|Kalpha.A.x{LK{x'y}x}, B, «c», au début #2=alpha est vide. On fait une
+% boucle pour prendre K unités de A (on a au moins L égal à K) et les mettre
+% dans alpha.|
+% \begin{macrocode}
+\def\XINT_div_start_c #1%
+{%
+ \ifnum #1>\xint_c_vi
+ \expandafter\XINT_div_start_ca
+ \else
+ \expandafter\XINT_div_start_cb
+ \fi {#1}%
+}%
+\def\XINT_div_start_ca #1#2\xint:#3!#4!#5!#6!#7!#8!#9!%
+{%
+ \expandafter\XINT_div_start_c\expandafter
+ {\the\numexpr #1-\xint_c_vii}#2#3!#4!#5!#6!#7!#8!#9!\xint:%
+}%
+\def\XINT_div_start_cb #1%
+ {\csname XINT_div_start_c_\romannumeral\numexpr#1\endcsname}%
+\def\XINT_div_start_c_i #1\xint:#2!%
+ {\XINT_div_start_c_ #1#2!\xint:}%
+\def\XINT_div_start_c_ii #1\xint:#2!#3!%
+ {\XINT_div_start_c_ #1#2!#3!\xint:}%
+\def\XINT_div_start_c_iii #1\xint:#2!#3!#4!%
+ {\XINT_div_start_c_ #1#2!#3!#4!\xint:}%
+\def\XINT_div_start_c_iv #1\xint:#2!#3!#4!#5!%
+ {\XINT_div_start_c_ #1#2!#3!#4!#5!\xint:}%
+\def\XINT_div_start_c_v #1\xint:#2!#3!#4!#5!#6!%
+ {\XINT_div_start_c_ #1#2!#3!#4!#5!#6!\xint:}%
+\def\XINT_div_start_c_vi #1\xint:#2!#3!#4!#5!#6!#7!%
+ {\XINT_div_start_c_ #1#2!#3!#4!#5!#6!#7!\xint:}%
+% \end{macrocode}
+% \lverb|#1=a, #2=alpha (de longueur K, à l'endroit).#3=reste de A.#4=x,
+% #5={LK{x'y}x},#6=B,«c» -> a, x, alpha, B, {00000000}, L, K, {x'y},x,
+% alpha'=reste de A, B«c».|
+% \begin{macrocode}
+\def\XINT_div_start_c_ 1#1!#2\xint:#3\xint:#4#5#6%
+{%
+ \XINT_div_I_a {#1}{#4}{1#1!#2}{#6}{00000000}#5{#3}{#6}%
+}%
+% \end{macrocode}
+% \lverb|Ceci est le point de retour de la boucle principale. a, x, alpha, B,
+% q0, L, K, {x'y}, x, alpha', B«c» |
+% \begin{macrocode}
+\def\XINT_div_I_a #1#2%
+{%
+ \expandafter\XINT_div_I_b\the\numexpr #1/#2\xint:{#1}{#2}%
+}%
+\def\XINT_div_I_b #1%
+{%
+ \xint_gob_til_zero #1\XINT_div_I_czero 0\XINT_div_I_c #1%
+}%
+% \end{macrocode}
+% \lverb|On intercepte petit quotient nul: #1=a, x, alpha, B, #5=q0, L, K,
+% {x'y}, x, alpha', B«c» -> on lâche un q puis {alpha} L, K, {x'y}, x,
+% alpha', B«c».|
+% \begin{macrocode}
+\def\XINT_div_I_czero 0\XINT_div_I_c 0\xint:#1#2#3#4#5{1#5\XINT_div_I_g {#3}}%
+\def\XINT_div_I_c #1\xint:#2#3%
+{%
+ \expandafter\XINT_div_I_da\the\numexpr #2-#1*#3\xint:#1\xint:{#2}{#3}%
+}%
+% \end{macrocode}
+% \lverb|r.q.alpha, B, q0, L, K, {x'y}, x, alpha', B«c»|
+% \begin{macrocode}
+\def\XINT_div_I_da #1\xint:%
+{%
+ \ifnum #1>\xint_c_ix
+ \expandafter\XINT_div_I_dP
+ \else
+ \ifnum #1<\xint_c_
+ \expandafter\expandafter\expandafter\XINT_div_I_dN
+ \else
+ \expandafter\expandafter\expandafter\XINT_div_I_db
+ \fi
+ \fi
+}%
+% \end{macrocode}
+% \lverb|attention très mauvaises notations avec _b et _db.|
+% \begin{macrocode}
+\def\XINT_div_I_dN #1\xint:%
+{%
+ \expandafter\XINT_div_I_b\the\numexpr #1-\xint_c_i\xint:%
+}%
+\def\XINT_div_I_db #1\xint:#2#3#4#5%
+{%
+ \expandafter\XINT_div_I_dc\expandafter #1%
+ \romannumeral0\expandafter\XINT_div_sub\expandafter
+ {\romannumeral0\XINT_rev_nounsep {}#4\R!\R!\R!\R!\R!\R!\R!\R!\W}%
+ {\the\numexpr\XINT_div_verysmallmul #1!#51;!}%
+ \Z {#4}{#5}%
+}%
+% \end{macrocode}
+% \lverb|La soustraction spéciale renvoie simplement - si le chiffre q est
+% trop grand. On invoque dans ce cas I_dP.|
+% \begin{macrocode}
+\def\XINT_div_I_dc #1#2%
+{%
+ \if-#2\expandafter\XINT_div_I_dd\else\expandafter\XINT_div_I_de\fi
+ #1#2%
+}%
+\def\XINT_div_I_dd #1-\Z
+{%
+ \if #11\expandafter\XINT_div_I_dz\fi
+ \expandafter\XINT_div_I_dP\the\numexpr #1-\xint_c_i\xint: XX%
+}%
+\def\XINT_div_I_dz #1XX#2#3#4%
+{%
+ 1#4\XINT_div_I_g {#2}%
+}%
+\def\XINT_div_I_de #1#2\Z #3#4#5{1#5+#1\XINT_div_I_g {#2}}%
+% \end{macrocode}
+% \lverb|q.alpha, B, q0, L, K, {x'y},x, alpha'B«c» (q=0 has been intercepted)
+% -> 1nouveauq.nouvel alpha, L, K, {x'y}, x, alpha',B«c»|
+% \begin{macrocode}
+\def\XINT_div_I_dP #1\xint:#2#3#4#5#6%
+{%
+ 1#6+#1\expandafter\XINT_div_I_g\expandafter
+ {\romannumeral0\expandafter\XINT_div_sub\expandafter
+ {\romannumeral0\XINT_rev_nounsep {}#4\R!\R!\R!\R!\R!\R!\R!\R!\W}%
+ {\the\numexpr\XINT_div_verysmallmul #1!#51;!}%
+ }%
+}%
+% \end{macrocode}
+% \lverb|1#1=nouveau q. nouvel alpha, L, K, {x'y},x,alpha', BQ«c»|
+% \begin{macrocode}
+% \end{macrocode}
+% \lverb|#1=q,#2=nouvel alpha,#3=L, #4=K, #5={x'y}, #6=x, #7= alpha',#8=B,
+% «c» -> on laisse q puis {x'y}alpha.alpha'.{{x'y}xKL}B«c»|
+% \begin{macrocode}
+\def\XINT_div_I_g #1#2#3#4#5#6#7%
+{%
+ \expandafter !\the\numexpr
+ \ifnum#2=#3
+ \expandafter\XINT_div_exittofinish
+ \else
+ \expandafter\XINT_div_I_h
+ \fi
+ {#4}#1\xint:#6\xint:{{#4}{#5}{#3}{#2}}{#7}%
+}%
+% \end{macrocode}
+% \lverb|{x'y}alpha.alpha'.{{x'y}xKL}B«c» -> Attention retour à l'envoyeur ici
+% par terminaison des \the\numexpr. On doit reprendre le Q déjà sorti, qui n'a
+% plus de séparateurs, ni de leading 1. Ensuite R sans leading zeros.«c»|
+% \begin{macrocode}
+\def\XINT_div_exittofinish #1#2\xint:#3\xint:#4#5%
+{%
+ 1\expandafter\expandafter\expandafter!\expandafter\XINT_div_unsepQ_delim
+ \romannumeral0\XINT_div_unsepR #2#3%
+ \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax\R\xint:
+}%
+% \end{macrocode}
+% \lverb|ATTENTION DESCRIPTION OBSOLÈTE. #1={x'y}alpha.#2!#3=reste de A.
+% #4={{x'y},x,K,L},#5=B,«c» devient {x'y},alpha sur K+4 chiffres.B,
+% {{x'y},x,K,L}, #6= nouvel alpha',B,«c»|
+% \begin{macrocode}
+\def\XINT_div_I_h #1\xint:#2!#3\xint:#4#5%
+{%
+ \XINT_div_II_b #1#2!\xint:{#5}{#4}{#3}{#5}%
+}%
+% \end{macrocode}
+% \lverb|{x'y}alpha.B, {{x'y},x,K,L}, nouveau alpha',B,«c»|
+% \begin{macrocode}
+\def\XINT_div_II_b #11#2!#3!%
+{%
+ \xint_gob_til_eightzeroes #2\XINT_div_II_skipc 00000000%
+ \XINT_div_II_c #1{1#2}{#3}%
+}%
+% \end{macrocode}
+% \lverb|x'y{100000000}{1<8>}reste de alpha.#6=B,#7={{x'y},x,K,L}, alpha',B,
+% «c» -> {x'y}x,K,L (à diminuer de 4), {alpha sur
+% K}B{q1=00000000}{alpha'}B,«c»|
+% \begin{macrocode}
+\def\XINT_div_II_skipc 00000000\XINT_div_II_c #1#2#3#4#5\xint:#6#7%
+{%
+ \XINT_div_II_k #7{#4!#5}{#6}{00000000}%
+}%
+% \end{macrocode}
+% \lverb|x'ya->1qx'yalpha.B, {{x'y},x,K,L}, nouveau alpha',B, «c». En fait,
+% attention, ici #3 et #4 sont les 16 premiers chiffres du numérateur,sous la
+% forme blocs 1<8chiffres>.
+% |
+% \begin{macrocode}
+\def\XINT_div_II_c #1#2#3#4%
+{%
+ \expandafter\XINT_div_II_d\the\numexpr\XINT_div_xmini
+ #1\xint:#2!#3!#4!{#1}{#2}#3!#4!%
+}%
+\def\XINT_div_xmini #1%
+{%
+ \xint_gob_til_one #1\XINT_div_xmini_a 1\XINT_div_mini #1%
+}%
+\def\XINT_div_xmini_a 1\XINT_div_mini 1#1%
+{%
+ \xint_gob_til_zero #1\XINT_div_xmini_b 0\XINT_div_mini 1#1%
+}%
+\def\XINT_div_xmini_b 0\XINT_div_mini 10#1#2#3#4#5#6#7%
+{%
+ \xint_gob_til_zero #7\XINT_div_xmini_c 0\XINT_div_mini 10#1#2#3#4#5#6#7%
+}%
+% \end{macrocode}
+% \lverb|x'=10^8 and we return #1=1<8digits>.|
+% \begin{macrocode}
+\def\XINT_div_xmini_c 0\XINT_div_mini 100000000\xint:50000000!#1!#2!{#1!}%
+% \end{macrocode}
+% \lverb|1 suivi de q1 sur huit chiffres! #2=x', #3=y, #4=alpha.#5=B,
+% {{x'y},x,K,L}, alpha', B, «c» --> nouvel alpha.x',y,B,q1,{{x'y},x,K,L},
+% alpha', B, «c» |
+% \begin{macrocode}
+\def\XINT_div_II_d 1#1#2#3#4#5!#6#7#8\xint:#9%
+{%
+ \expandafter\XINT_div_II_e
+ \romannumeral0\expandafter\XINT_div_sub\expandafter
+ {\romannumeral0\XINT_rev_nounsep {}#8\R!\R!\R!\R!\R!\R!\R!\R!\W}%
+ {\the\numexpr\XINT_div_smallmul_a 100000000\xint:#1#2#3#4\xint:#5!#91;!}%
+ \xint:{#6}{#7}{#9}{#1#2#3#4#5}%
+}%
+% \end{macrocode}
+% \lverb|alpha.x',y,B,q1, {{x'y},x,K,L}, alpha', B, «c». Attention la
+% soustraction spéciale doit maintenir les blocs 1<8>!|
+% \begin{macrocode}
+\def\XINT_div_II_e 1#1!%
+{%
+ \xint_gob_til_eightzeroes #1\XINT_div_II_skipf 00000000%
+ \XINT_div_II_f 1#1!%
+}%
+% \end{macrocode}
+% \lverb|100000000! alpha sur K chiffres.#2=x',#3=y,#4=B,#5=q1, #6={{x'y},x,K,L},
+% #7=alpha',B«c» -> {x'y}x,K,L (à diminuer de 1),
+% {alpha sur K}B{q1}{alpha'}B«c»|
+% \begin{macrocode}
+\def\XINT_div_II_skipf 00000000\XINT_div_II_f 100000000!#1\xint:#2#3#4#5#6%
+{%
+ \XINT_div_II_k #6{#1}{#4}{#5}%
+}%
+% \end{macrocode}
+% \lverb|1<a1>!1<a2>!, alpha (sur K+1 blocs de 8). x', y, B, q1, {{x'y},x,K,L},
+% alpha', B,«c».
+%
+% Here also we are dividing with x' which could be 10^8 in the exceptional
+% case x=99999999. Must intercept it before sending to \XINT_div_mini.|
+% \begin{macrocode}
+\def\XINT_div_II_f #1!#2!#3\xint:%
+{%
+ \XINT_div_II_fa {#1!#2!}{#1!#2!#3}%
+}%
+\def\XINT_div_II_fa #1#2#3#4%
+{%
+ \expandafter\XINT_div_II_g \the\numexpr\XINT_div_xmini #3\xint:#4!#1{#2}%
+}%
+% \end{macrocode}
+% \lverb|#1=q, #2=alpha (K+4), #3=B, #4=q1, {{x'y},x,K,L}, alpha', BQ«c»
+% -> 1 puis nouveau q sur 8 chiffres. nouvel alpha sur K blocs,
+% B, {{x'y},x,K,L}, alpha',B«c» |
+% \begin{macrocode}
+\def\XINT_div_II_g 1#1#2#3#4#5!#6#7#8%
+{%
+ \expandafter \XINT_div_II_h
+ \the\numexpr 1#1#2#3#4#5+#8\expandafter\expandafter\expandafter
+ \xint:\expandafter\expandafter\expandafter
+ {\expandafter\xint_gob_til_exclam
+ \romannumeral0\expandafter\XINT_div_sub\expandafter
+ {\romannumeral0\XINT_rev_nounsep {}#6\R!\R!\R!\R!\R!\R!\R!\R!\W}%
+ {\the\numexpr\XINT_div_smallmul_a 100000000\xint:#1#2#3#4\xint:#5!#71;!}}%
+ {#7}%
+}%
+% \end{macrocode}
+% \lverb|1 puis nouveau q sur 8 chiffres, #2=nouvel alpha sur K blocs,
+% #3=B, #4={{x'y},x,K,L} avec L à ajuster, alpha', BQ«c»
+% -> {x'y}x,K,L à diminuer de 1, {alpha}B{q}, alpha', BQ«c»|
+% \begin{macrocode}
+\def\XINT_div_II_h 1#1\xint:#2#3#4%
+{%
+ \XINT_div_II_k #4{#2}{#3}{#1}%
+}%
+% \end{macrocode}
+% \lverb|{x'y}x,K,L à diminuer de 1, alpha, B{q}alpha',B«c»
+% ->nouveau L.K,x',y,x,alpha.B,q,alpha',B,«c»
+% ->{LK{x'y}x},x,a,alpha.B,q,alpha',B,«c»|
+% \begin{macrocode}
+\def\XINT_div_II_k #1#2#3#4#5%
+{%
+ \expandafter\XINT_div_II_l \the\numexpr #4-\xint_c_i\xint:{#3}#1{#2}#5\xint:%
+}%
+\def\XINT_div_II_l #1\xint:#2#3#4#51#6!%
+{%
+ \XINT_div_II_m {{#1}{#2}{{#3}{#4}}{#5}}{#5}{#6}1#6!%
+}%
+% \end{macrocode}
+% \lverb|{LK{x'y}x},x,a,alpha.B{q}alpha'B -> a, x, alpha, B, q,
+% L, K, {x'y}, x, alpha', B«c» |
+% \begin{macrocode}
+\def\XINT_div_II_m #1#2#3#4\xint:#5#6%
+{%
+ \XINT_div_I_a {#3}{#2}{#4}{#5}{#6}#1%
+}%
+% \end{macrocode}
+% \lverb|This multiplication is exactly like \XINT_smallmul -- apart from not
+% inserting an ending 1;! --, but keeps ever a vanishing ending carry.|
+% \begin{macrocode}
+\def\XINT_div_minimulwc_a 1#1\xint:#2\xint:#3!#4#5#6#7#8\xint:%
+{%
+ \expandafter\XINT_div_minimulwc_b
+ \the\numexpr \xint_c_x^ix+#1+#3*#8\xint:#3*#4#5#6#7+#2*#8\xint:#2*#4#5#6#7\xint:%
+}%
+\def\XINT_div_minimulwc_b 1#1#2#3#4#5#6\xint:#7\xint:%
+{%
+ \expandafter\XINT_div_minimulwc_c
+ \the\numexpr \xint_c_x^ix+#1#2#3#4#5+#7\xint:#6\xint:%
+}%
+\def\XINT_div_minimulwc_c 1#1#2#3#4#5#6\xint:#7\xint:#8\xint:%
+{%
+ 1#6#7\expandafter!%
+ \the\numexpr\expandafter\XINT_div_smallmul_a
+ \the\numexpr \xint_c_x^viii+#1#2#3#4#5+#8\xint:%
+}%
+\def\XINT_div_smallmul_a #1\xint:#2\xint:#3!1#4!%
+{%
+ \xint_gob_til_sc #4\XINT_div_smallmul_e;%
+ \XINT_div_minimulwc_a #1\xint:#2\xint:#3!#4\xint:#2\xint:#3!%
+}%
+\def\XINT_div_smallmul_e;\XINT_div_minimulwc_a 1#1\xint:#2;#3!{1\relax #1!}%
+% \end{macrocode}
+% \lverb|Special very small multiplication for division. We only need to cater
+% for multiplicands from 1 to 9. The ending is different from standard
+% verysmallmul, a zero carry is not suppressed. And no final 1;! is added. If
+% multiplicand is just 1 let's not forget to add the zero carry 100000000! at
+% the end.|
+% \begin{macrocode}
+\def\XINT_div_verysmallmul #1%
+ {\xint_gob_til_one #1\XINT_div_verysmallisone 1\XINT_div_verysmallmul_a 0\xint:#1}%
+\def\XINT_div_verysmallisone 1\XINT_div_verysmallmul_a 0\xint:1!1#11;!%
+ {1\relax #1100000000!}%
+\def\XINT_div_verysmallmul_a #1\xint:#2!1#3!%
+{%
+ \xint_gob_til_sc #3\XINT_div_verysmallmul_e;%
+ \expandafter\XINT_div_verysmallmul_b
+ \the\numexpr \xint_c_x^ix+#2*#3+#1\xint:#2!%
+}%
+\def\XINT_div_verysmallmul_b 1#1#2\xint:%
+ {1#2\expandafter!\the\numexpr\XINT_div_verysmallmul_a #1\xint:}%
+\def\XINT_div_verysmallmul_e;#1;+#2#3!{1\relax 0000000#2!}%
+% \end{macrocode}
+% \lverb|Special subtraction for division purposes. If the subtracted thing
+% turns out to be bigger, then just return a -. If not, then we must reverse
+% the result, keeping the separators.|
+% \begin{macrocode}
+\def\XINT_div_sub #1#2%
+{%
+ \expandafter\XINT_div_sub_clean
+ \the\numexpr\expandafter\XINT_div_sub_a\expandafter
+ 1#2;!;!;!;!;!\W #1;!;!;!;!;!\W
+}%
+\def\XINT_div_sub_clean #1-#2#3\W
+{%
+ \if1#2\expandafter\XINT_rev_nounsep\else\expandafter\XINT_div_sub_neg\fi
+ {}#1\R!\R!\R!\R!\R!\R!\R!\R!\W
+}%
+\def\XINT_div_sub_neg #1\W { -}%
+\def\XINT_div_sub_a #1!#2!#3!#4!#5\W #6!#7!#8!#9!%
+{%
+ \XINT_div_sub_b #1!#6!#2!#7!#3!#8!#4!#9!#5\W
+}%
+\def\XINT_div_sub_b #1#2#3!#4!%
+{%
+ \xint_gob_til_sc #4\XINT_div_sub_bi ;%
+ \expandafter\XINT_div_sub_c\the\numexpr#1-#3+1#4-\xint_c_i\xint:%
+}%
+\def\XINT_div_sub_c 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_div_sub_d #1%
+}%
+\def\XINT_div_sub_d #1#2#3!#4!%
+{%
+ \xint_gob_til_sc #4\XINT_div_sub_di ;%
+ \expandafter\XINT_div_sub_e\the\numexpr#1-#3+1#4-\xint_c_i\xint:%
+}%
+\def\XINT_div_sub_e 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_div_sub_f #1%
+}%
+\def\XINT_div_sub_f #1#2#3!#4!%
+{%
+ \xint_gob_til_sc #4\XINT_div_sub_fi ;%
+ \expandafter\XINT_div_sub_g\the\numexpr#1-#3+1#4-\xint_c_i\xint:%
+}%
+\def\XINT_div_sub_g 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_div_sub_h #1%
+}%
+\def\XINT_div_sub_h #1#2#3!#4!%
+{%
+ \xint_gob_til_sc #4\XINT_div_sub_hi ;%
+ \expandafter\XINT_div_sub_i\the\numexpr#1-#3+1#4-\xint_c_i\xint:%
+}%
+\def\XINT_div_sub_i 1#1#2\xint:%
+{%
+ 1#2\expandafter!\the\numexpr\XINT_div_sub_a #1%
+}%
+\def\XINT_div_sub_bi;%
+ \expandafter\XINT_div_sub_c\the\numexpr#1-#2+#3\xint:#4!#5!#6!#7!#8!#9!;!\W
+{%
+ \XINT_div_sub_l #1#2!#5!#7!#9!%
+}%
+\def\XINT_div_sub_di;%
+ \expandafter\XINT_div_sub_e\the\numexpr#1-#2+#3\xint:#4!#5!#6!#7!#8\W
+{%
+ \XINT_div_sub_l #1#2!#5!#7!%
+}%
+\def\XINT_div_sub_fi;%
+ \expandafter\XINT_div_sub_g\the\numexpr#1-#2+#3\xint:#4!#5!#6\W
+{%
+ \XINT_div_sub_l #1#2!#5!%
+}%
+\def\XINT_div_sub_hi;%
+ \expandafter\XINT_div_sub_i\the\numexpr#1-#2+#3\xint:#4\W
+{%
+ \XINT_div_sub_l #1#2!%
+}%
+\def\XINT_div_sub_l #1%
+{%
+ \xint_UDzerofork
+ #1{-2\relax}%
+ 0\XINT_div_sub_r
+ \krof
+}%
+\def\XINT_div_sub_r #1!%
+{%
+ -\ifnum 0#1=\xint_c_ 1\else2\fi\relax
+}%
+% \end{macrocode}
+% \lverb|Ici B<10^8 (et est >2). On
+% exécute$newline
+% \expandafter\XINT_sdiv_out\the\numexpr\XINT_smalldivx_a
+% x.1B!1<8d>!...1<8d>!1;!$newline
+% avec x =round(B/2), 1B=10^8+B, et A déjà en
+% blocs 1<8d>! (non renversés). Le \the\numexpr\XINT_smalldivx_a va produire
+% Q\Z R\W avec un R<10^8, et un Q sous forme de blocs 1<8d>! terminé par 1!
+% et nécessitant le nettoyage du premier bloc. Dans cette branche le B n'a pas
+% été multiplié par une puissance de 10, il peut avoir moins de huit chiffres.
+%
+% |
+% \begin{macrocode}
+\def\XINT_sdiv_out #1;!#2!%
+ {\expandafter
+ {\romannumeral0\XINT_unsep_cuzsmall
+ #1\xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax}%
+ {#2}}%
+% \end{macrocode}
+% \lverb|La toute première étape fait la première division pour être sûr par
+% la suite d'avoir un premier bloc pour A qui sera < B.|
+% \begin{macrocode}
+\def\XINT_smalldivx_a #1\xint:1#2!1#3!%
+{%
+ \expandafter\XINT_smalldivx_b
+ \the\numexpr (#3+#1)/#2-\xint_c_i!#1\xint:#2!#3!%
+}%
+\def\XINT_smalldivx_b #1#2!%
+{%
+ \if0#1\else
+ \xint_c_x^viii+#1#2\xint_afterfi{\expandafter!\the\numexpr}\fi
+ \XINT_smalldiv_c #1#2!%
+}%
+\def\XINT_smalldiv_c #1!#2\xint:#3!#4!%
+{%
+ \expandafter\XINT_smalldiv_d\the\numexpr #4-#1*#3!#2\xint:#3!%
+}%
+% \end{macrocode}
+% \lverb|On va boucler ici: #1 est un reste, #2 est x.B (avec B sans le 1 mais
+% sur huit chiffres). #3#4 est le premier bloc qui reste de A. Si on a terminé
+% avec A, alors #1 est le reste final. Le quotient lui est terminé par un 1!
+% ce 1! disparaîtra dans le nettoyage par \XINT_unsep_cuzsmall.
+% |
+% \begin{macrocode}
+\def\XINT_smalldiv_d #1!#2!1#3#4!%
+{%
+ \xint_gob_til_sc #3\XINT_smalldiv_end ;%
+ \XINT_smalldiv_e #1!#2!1#3#4!%
+}%
+\def\XINT_smalldiv_end;\XINT_smalldiv_e #1!#2!1;!{1!;!#1!}%
+% \end{macrocode}
+% \lverb|Il est crucial que le reste #1 est < #3. J'ai documenté cette routine
+% dans le fichier où j'ai préparé 1.2, il faudra transférer ici. Il n'est pas
+% nécessaire pour cette routine que le diviseur B ait au moins 8 chiffres.
+% Mais il doit être < 10^8.|
+% \begin{macrocode}
+\def\XINT_smalldiv_e #1!#2\xint:#3!%
+{%
+ \expandafter\XINT_smalldiv_f\the\numexpr
+ \xint_c_xi_e_viii_mone+#1*\xint_c_x^viii/#3!#2\xint:#3!#1!%
+}%
+\def\XINT_smalldiv_f 1#1#2#3#4#5#6!#7\xint:#8!%
+{%
+ \xint_gob_til_zero #1\XINT_smalldiv_fz 0%
+ \expandafter\XINT_smalldiv_g
+ \the\numexpr\XINT_minimul_a #2#3#4#5\xint:#6!#8!#2#3#4#5#6!#7\xint:#8!%
+}%
+\def\XINT_smalldiv_fz 0%
+ \expandafter\XINT_smalldiv_g\the\numexpr\XINT_minimul_a
+ 9999\xint:9999!#1!99999999!#2!0!1#3!%
+{%
+ \XINT_smalldiv_i \xint:#3!\xint_c_!#2!%
+}%
+\def\XINT_smalldiv_g 1#1!1#2!#3!#4!#5!#6!%
+{%
+ \expandafter\XINT_smalldiv_h\the\numexpr 1#6-#1\xint:#2!#5!#3!#4!%
+}%
+\def\XINT_smalldiv_h 1#1#2\xint:#3!#4!%
+{%
+ \expandafter\XINT_smalldiv_i\the\numexpr #4-#3+#1-\xint_c_i\xint:#2!%
+}%
+\def\XINT_smalldiv_i #1\xint:#2!#3!#4\xint:#5!%
+{%
+ \expandafter\XINT_smalldiv_j\the\numexpr (#1#2+#4)/#5-\xint_c_i!#3!#1#2!#4\xint:#5!%
+}%
+\def\XINT_smalldiv_j #1!#2!%
+{%
+ \xint_c_x^viii+#1+#2\expandafter!\the\numexpr\XINT_smalldiv_k
+ #1!%
+}%
+% \end{macrocode}
+% \lverb|On boucle vers \XINT_smalldiv_d.|
+% \begin{macrocode}
+\def\XINT_smalldiv_k #1!#2!#3\xint:#4!%
+{%
+ \expandafter\XINT_smalldiv_d\the\numexpr #2-#1*#4!#3\xint:#4!%
+}%
+% \end{macrocode}
+% \lverb|Cette routine fait la division euclidienne d'un nombre de seize
+% chiffres par #1 = C = diviseur sur huit chiffres >= 10^7, avec #2 = sa
+% moitié utilisée dans \numexpr pour contrebalancer l'arrondi
+% (ARRRRRRGGGGGHHHH) fait par /. Le nombre divisé XY = X*10^8+Y se présente
+% sous la forme 1<8chiffres>!1<8chiffres>! avec plus significatif en premier.
+%
+% Seul le quotient est calculé, pas le reste. En effet la routine de division
+% principale va utiliser ce quotient pour déterminer le "grand" reste, et le
+% petit reste ici ne nous serait d'à peu près aucune utilité.
+%
+% ATTENTION UNIQUEMENT UTILISÉ POUR DES SITUATIONS OÙ IL EST GARANTI QUE X <
+% C ! (et C au moins 10^7) le quotient euclidien de X*10^8+Y par C sera donc <
+% 10^8. Il sera renvoyé sous la forme 1<8chiffres>.|
+% \begin{macrocode}
+\def\XINT_div_mini #1\xint:#2!1#3!%
+{%
+ \expandafter\XINT_div_mini_a\the\numexpr
+ \xint_c_xi_e_viii_mone+#3*\xint_c_x^viii/#1!#1\xint:#2!#3!%
+}%
+% \end{macrocode}
+% \lverb|Note (2015/10/08). Attention à la différence dans l'ordre des
+% arguments avec ce que je vois en dans \XINT_smalldiv_f. Je ne me souviens
+% plus du tout s'il y a une raison quelconque.|
+% \begin{macrocode}
+\def\XINT_div_mini_a 1#1#2#3#4#5#6!#7\xint:#8!%
+{%
+ \xint_gob_til_zero #1\XINT_div_mini_w 0%
+ \expandafter\XINT_div_mini_b
+ \the\numexpr\XINT_minimul_a #2#3#4#5\xint:#6!#7!#2#3#4#5#6!#7\xint:#8!%
+}%
+\def\XINT_div_mini_w 0%
+ \expandafter\XINT_div_mini_b\the\numexpr\XINT_minimul_a
+ 9999\xint:9999!#1!99999999!#2\xint:#3!00000000!#4!%
+{%
+ \xint_c_x^viii_mone+(#4+#3)/#2!%
+}%
+\def\XINT_div_mini_b 1#1!1#2!#3!#4!#5!#6!%
+{%
+ \expandafter\XINT_div_mini_c
+ \the\numexpr 1#6-#1\xint:#2!#5!#3!#4!%
+}%
+\def\XINT_div_mini_c 1#1#2\xint:#3!#4!%
+{%
+ \expandafter\XINT_div_mini_d
+ \the\numexpr #4-#3+#1-\xint_c_i\xint:#2!%
+}%
+\def\XINT_div_mini_d #1\xint:#2!#3!#4\xint:#5!%
+{%
+ \xint_c_x^viii_mone+#3+(#1#2+#5)/#4!%
+}%
+% \end{macrocode}
+% \subsection*{Derived arithmetic}
+% \addcontentsline{toc}{subsection}{Derived arithmetic}
+% \subsection{\csh{xintiiQuo}, \csh{xintiiRem}}
+% \begin{macrocode}
+\def\xintiiQuo {\romannumeral0\xintiiquo }%
+\def\xintiiRem {\romannumeral0\xintiirem }%
+\def\xintiiquo
+ {\expandafter\xint_stop_atfirstoftwo\romannumeral0\xintiidivision }%
+\def\xintiirem
+ {\expandafter\xint_stop_atsecondoftwo\romannumeral0\xintiidivision }%
+% \end{macrocode}
+% \subsection{\csh{xintiiDivRound}}
+% \lverb|1.1, transferred from first release of bnumexpr. Rewritten for 1.2.
+% Ending rewritten for 1.2i. (new \xintDSRr).
+%
+% 1.2l: \xintiiDivRound made robust against non terminated input.|
+% \begin{macrocode}
+\def\xintiiDivRound {\romannumeral0\xintiidivround }%
+\def\xintiidivround #1{\expandafter\XINT_iidivround\romannumeral`&&@#1\xint:}%
+\def\XINT_idivround #1#2\xint:#3%
+ {\expandafter\XINT_iidivround_a\expandafter #1%
+ \romannumeral0\xintnum{#3}\xint:#2\xint:}%
+\def\XINT_iidivround #1#2\xint:#3%
+ {\expandafter\XINT_iidivround_a\expandafter #1\romannumeral`&&@#3\xint:#2\xint:}%
+\def\XINT_iidivround_a #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_iidivround_divbyzero#1#2}\fi
+ \if0#1\xint_dothis\XINT_iidivround_aiszero\fi
+ \if-#2\xint_dothis{\XINT_iidivround_bneg #1}\fi
+ \xint_orthat{\XINT_iidivround_bpos #1#2}%
+}%
+\def\XINT_iidivround_divbyzero #1#2#3\xint:#4\xint:
+ {\XINT_signalcondition{DivisionByZero}{Division of #1#4 by #2#3}{}{0}}%
+\def\XINT_iidivround_aiszero #1\xint:#2\xint:{ 0}%
+\def\XINT_iidivround_bpos #1%
+{%
+ \xint_UDsignfork
+ #1{\xintiiopp\XINT_iidivround_pos {}}%
+ -{\XINT_iidivround_pos #1}%
+ \krof
+}%
+\def\XINT_iidivround_bneg #1%
+{%
+ \xint_UDsignfork
+ #1{\XINT_iidivround_pos {}}%
+ -{\xintiiopp\XINT_iidivround_pos #1}%
+ \krof
+}%
+\def\XINT_iidivround_pos #1#2\xint:#3\xint:
+{%
+ \expandafter\expandafter\expandafter\XINT_dsrr
+ \expandafter\xint_firstoftwo
+ \romannumeral0\XINT_div_prepare {#2}{#1#30}%
+ \xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiDivTrunc}}
+% \lverb|1.2l: \xintiiDivTrunc made robust against non terminated input.|
+% \begin{macrocode}
+\def\xintiiDivTrunc {\romannumeral0\xintiidivtrunc }%
+\def\xintiidivtrunc #1{\expandafter\XINT_iidivtrunc\romannumeral`&&@#1\xint:}%
+\def\XINT_iidivtrunc #1#2\xint:#3{\expandafter\XINT_iidivtrunc_a\expandafter #1%
+ \romannumeral`&&@#3\xint:#2\xint:}%
+\def\XINT_iidivtrunc_a #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_iidivtrunc_divbyzero#1#2}\fi
+ \if0#1\xint_dothis\XINT_iidivtrunc_aiszero\fi
+ \if-#2\xint_dothis{\XINT_iidivtrunc_bneg #1}\fi
+ \xint_orthat{\XINT_iidivtrunc_bpos #1#2}%
+}%
+% \end{macrocode}
+% \lverb|Attention to not move DivRound code beyond that point.|
+% \begin{macrocode}
+\let\XINT_iidivtrunc_divbyzero\XINT_iidivround_divbyzero
+\let\XINT_iidivtrunc_aiszero \XINT_iidivround_aiszero
+\def\XINT_iidivtrunc_bpos #1%
+{%
+ \xint_UDsignfork
+ #1{\xintiiopp\XINT_iidivtrunc_pos {}}%
+ -{\XINT_iidivtrunc_pos #1}%
+ \krof
+}%
+\def\XINT_iidivtrunc_bneg #1%
+{%
+ \xint_UDsignfork
+ #1{\XINT_iidivtrunc_pos {}}%
+ -{\xintiiopp\XINT_iidivtrunc_pos #1}%
+ \krof
+}%
+\def\XINT_iidivtrunc_pos #1#2\xint:#3\xint:
+ {\expandafter\xint_stop_atfirstoftwo
+ \romannumeral0\XINT_div_prepare {#2}{#1#3}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiModTrunc}}
+% \lverb|Renamed from \xintiiMod to \xintiiModTrunc at 1.2p.|
+% \begin{macrocode}
+\def\xintiiModTrunc {\romannumeral0\xintiimodtrunc }%
+\def\xintiimodtrunc #1{\expandafter\XINT_iimodtrunc\romannumeral`&&@#1\xint:}%
+\def\XINT_iimodtrunc #1#2\xint:#3{\expandafter\XINT_iimodtrunc_a\expandafter #1%
+ \romannumeral`&&@#3\xint:#2\xint:}%
+\def\XINT_iimodtrunc_a #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_iimodtrunc_divbyzero#1#2}\fi
+ \if0#1\xint_dothis\XINT_iimodtrunc_aiszero\fi
+ \if-#2\xint_dothis{\XINT_iimodtrunc_bneg #1}\fi
+ \xint_orthat{\XINT_iimodtrunc_bpos #1#2}%
+}%
+% \end{macrocode}
+% \lverb|Attention to not move DivRound code beyond that point. A bit of abuse
+% here for divbyzero defaulted-to value, which happily works in both.|
+% \begin{macrocode}
+\let\XINT_iimodtrunc_divbyzero\XINT_iidivround_divbyzero
+\let\XINT_iimodtrunc_aiszero \XINT_iidivround_aiszero
+\def\XINT_iimodtrunc_bpos #1%
+{%
+ \xint_UDsignfork
+ #1{\xintiiopp\XINT_iimodtrunc_pos {}}%
+ -{\XINT_iimodtrunc_pos #1}%
+ \krof
+}%
+\def\XINT_iimodtrunc_bneg #1%
+{%
+ \xint_UDsignfork
+ #1{\xintiiopp\XINT_iimodtrunc_pos {}}%
+ -{\XINT_iimodtrunc_pos #1}%
+ \krof
+}%
+\def\XINT_iimodtrunc_pos #1#2\xint:#3\xint:
+ {\expandafter\xint_stop_atsecondoftwo\romannumeral0\XINT_div_prepare
+ {#2}{#1#3}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiDivMod}}
+% \changed{1.2p}{}
+% It is associated with floored division (like Python divmod
+% function), and with the |//| operator in \csbxint{iiexpr}.
+% \begin{macrocode}
+\def\xintiiDivMod {\romannumeral0\xintiidivmod }%
+\def\xintiidivmod #1{\expandafter\XINT_iidivmod\romannumeral`&&@#1\xint:}%
+\def\XINT_iidivmod #1#2\xint:#3{\expandafter\XINT_iidivmod_a\expandafter #1%
+ \romannumeral`&&@#3\xint:#2\xint:}%
+\def\XINT_iidivmod_a #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_iidivmod_divbyzero#1#2}\fi
+ \if0#1\xint_dothis\XINT_iidivmod_aiszero\fi
+ \if-#2\xint_dothis{\XINT_iidivmod_bneg #1}\fi
+ \xint_orthat{\XINT_iidivmod_bpos #1#2}%
+}%
+\def\XINT_iidivmod_divbyzero #1#2\xint:#3\xint:
+{%
+ \XINT_signalcondition{DivisionByZero}{Division by #2 of #1#3}{}%
+ {{0}{0}}% à revoir...
+}%
+\def\XINT_iidivmod_aiszero #1\xint:#2\xint:{{0}{0}}%
+\def\XINT_iidivmod_bneg #1%
+{%
+ \expandafter\XINT_iidivmod_bneg_finish
+ \romannumeral0\xint_UDsignfork
+ #1{\XINT_iidivmod_bpos {}}%
+ -{\XINT_iidivmod_bpos {-#1}}%
+ \krof
+}%
+\def\XINT_iidivmod_bneg_finish#1#2%
+{%
+ \expandafter\xint_exchangetwo_keepbraces\expandafter
+ {\romannumeral0\xintiiopp#2}{#1}%
+}%
+\def\XINT_iidivmod_bpos #1#2\xint:#3\xint:{\xintiidivision{#1#3}{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiDivFloor}}
+% \lverb|1.2p. For bnumexpr actually, because \xintiiexpr could use
+% \xintDivFloor which also outputs an integer in strict format.|
+% \begin{macrocode}
+\def\xintiiDivFloor {\romannumeral0\xintiidivfloor}%
+\def\xintiidivfloor {\expandafter\xint_stop_atfirstoftwo
+ \romannumeral0\xintiidivmod}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMod}}
+% \lverb|Associated with floored division at 1.2p. Formerly was associated with
+% truncated division.|
+% \begin{macrocode}
+\def\xintiiMod {\romannumeral0\xintiimod}%
+\def\xintiimod {\expandafter\xint_stop_atsecondoftwo
+ \romannumeral0\xintiidivmod}%
+% \end{macrocode}
+% \subsection{\csh{xintiiSqr}}
+% \lverb|1.2l: \xintiiSqr made robust against non terminated input.|
+% \begin{macrocode}
+\def\xintiiSqr {\romannumeral0\xintiisqr }%
+\def\xintiisqr #1%
+{%
+ \expandafter\XINT_sqr\romannumeral0\xintiiabs{#1}\xint:
+}%
+\def\XINT_sqr #1\xint:
+{%
+ \expandafter\XINT_sqr_a
+ \romannumeral0\expandafter\XINT_sepandrev_andcount
+ \romannumeral0\XINT_zeroes_forviii #1\R\R\R\R\R\R\R\R{10}0000001\W
+ #1\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ \xint:
+}%
+% \end{macrocode}
+% \lverb|1.2c \XINT_mul_loop can now be called directly even with small
+% arguments, thus the following check is not anymore a necessity.|
+% \begin{macrocode}
+\def\XINT_sqr_a #1\xint:
+{%
+ \ifnum #1=\xint_c_i \expandafter\XINT_sqr_small
+ \else\expandafter\XINT_sqr_start\fi
+}%
+\def\XINT_sqr_small 1#1#2#3#4#5!\xint:
+{%
+ \ifnum #1#2#3#4#5<46341 \expandafter\XINT_sqr_verysmall\fi
+ \expandafter\XINT_sqr_small_out
+ \the\numexpr\XINT_minimul_a #1#2#3#4\xint:#5!#1#2#3#4#5!%
+}%
+\def\XINT_sqr_verysmall#1{%
+\def\XINT_sqr_verysmall
+ \expandafter\XINT_sqr_small_out\the\numexpr\XINT_minimul_a ##1!##2!%
+ {\expandafter#1\the\numexpr ##2*##2\relax}%
+}\XINT_sqr_verysmall{ }%
+\def\XINT_sqr_small_out 1#1!1#2!%
+{%
+ \XINT_cuz #2#1\R
+}%
+% \end{macrocode}
+% \lverb|An ending 1;! is produced on output for \XINT_mul_loop and gets
+% incorporated to the delimiter needed by the \XINT_unrevbyviii done by
+% \XINT_mul_out.|
+% \begin{macrocode}
+\def\XINT_sqr_start #1\xint:
+{%
+ \expandafter\XINT_mul_out
+ \the\numexpr\XINT_mul_loop
+ 100000000!1;!\W #11;!\W #11;!%
+ 1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiPow}}
+% \lverb|&
+% The exponent is not limited but with current default settings of tex memory,
+% with xint 1.2, the maximal exponent for 2^N is N = 2^17 = 131072.
+%
+% 1.2f Modifies the initial steps: 1) in order to be able to let more easily
+% \xintiPow use \xintNum on the exponent once xintfrac.sty is loaded; 2) also
+% because I noticed it was not very well coded. And it did only a \numexpr on
+% the exponent, contradicting the documentation related to the "i" convention
+% in names.
+%
+% 1.2l: \xintiiPow made robust against non terminated input.|
+% \begin{macrocode}
+\def\xintiiPow {\romannumeral0\xintiipow }%
+\def\xintiipow #1#2%
+{%
+ \expandafter\xint_pow\the\numexpr #2\expandafter
+ .\romannumeral`&&@#1\xint:
+}%
+\def\xint_pow #1.#2%#3\xint:
+{%
+ \xint_UDzerominusfork
+ #2-\XINT_pow_AisZero
+ 0#2\XINT_pow_Aneg
+ 0-{\XINT_pow_Apos #2}%
+ \krof {#1}%
+}%
+\def\XINT_pow_AisZero #1#2\xint:
+{%
+ \ifcase\XINT_cntSgn #1\xint:
+ \xint_afterfi { 1}%
+ \or
+ \xint_afterfi { 0}%
+ \else
+ \xint_afterfi
+ {\XINT_signalcondition{DivisionByZero}{Zero to power #1}{}{0}}%
+ \fi
+}%
+\def\XINT_pow_Aneg #1%
+{%
+ \ifodd #1
+ \expandafter\XINT_opp\romannumeral0%
+ \fi
+ \XINT_pow_Apos {}{#1}%
+}%
+\def\XINT_pow_Apos #1#2{\XINT_pow_Apos_a {#2}#1}%
+\def\XINT_pow_Apos_a #1#2#3%
+{%
+ \xint_gob_til_xint: #3\XINT_pow_Apos_short\xint:
+ \XINT_pow_AatleastTwo {#1}#2#3%
+}%
+\def\XINT_pow_Apos_short\xint:\XINT_pow_AatleastTwo #1#2\xint:
+{%
+ \ifcase #2
+ \xintError:thiscannothappen
+ \or \expandafter\XINT_pow_AisOne
+ \else\expandafter\XINT_pow_AatleastTwo
+ \fi {#1}#2\xint:
+}%
+\def\XINT_pow_AisOne #1\xint:{ 1}%
+\def\XINT_pow_AatleastTwo #1%
+{%
+ \ifcase\XINT_cntSgn #1\xint:
+ \expandafter\XINT_pow_BisZero
+ \or
+ \expandafter\XINT_pow_I_in
+ \else
+ \expandafter\XINT_pow_BisNegative
+ \fi
+ {#1}%
+}%
+\def\XINT_pow_BisNegative #1\xint:{\XINT_signalcondition{Underflow}{Inverse power
+ can not be represented by an integer}{}{0}}%
+\def\XINT_pow_BisZero #1\xint:{ 1}%
+% \end{macrocode}
+% \lverb|B = #1 > 0, A = #2 > 1. Earlier code checked if size of B did not
+% exceed a given limit (for example 131000).|
+% \begin{macrocode}
+\def\XINT_pow_I_in #1#2\xint:
+{%
+ \expandafter\XINT_pow_I_loop
+ \the\numexpr #1\expandafter\xint:%
+ \romannumeral0\expandafter\XINT_sepandrev
+ \romannumeral0\XINT_zeroes_forviii #2\R\R\R\R\R\R\R\R{10}0000001\W
+ #2\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax XX%
+ \R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\R\xint:\W
+ 1;!\W
+ 1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+\def\XINT_pow_I_loop #1\xint:%
+{%
+ \ifnum #1 = \xint_c_i\expandafter\XINT_pow_I_exit\fi
+ \ifodd #1
+ \expandafter\XINT_pow_II_in
+ \else
+ \expandafter\XINT_pow_I_squareit
+ \fi #1\xint:%
+}%
+\def\XINT_pow_I_exit \ifodd #1\fi #2\xint:#3\W {\XINT_mul_out #3}%
+% \end{macrocode}
+% \lverb|The 1.2c \XINT_mul_loop can be called directly even with small
+% arguments, hence the "butcheckifsmall" is not a necessity as it was earlier
+% with 1.2. On 2^30, it does bring roughly a 40$char37 $space time gain
+% though, and 30$char37 $space gain for 2^60. The overhead on big computations
+% should be negligible.|
+% \begin{macrocode}
+\def\XINT_pow_I_squareit #1\xint:#2\W%
+{%
+ \expandafter\XINT_pow_I_loop
+ \the\numexpr #1/\xint_c_ii\expandafter\xint:%
+ \the\numexpr\XINT_pow_mulbutcheckifsmall #2\W #2\W
+}%
+\def\XINT_pow_mulbutcheckifsmall #1!1#2%
+{%
+ \xint_gob_til_sc #2\XINT_pow_mul_small;%
+ \XINT_mul_loop 100000000!1;!\W #1!1#2%
+}%
+\def\XINT_pow_mul_small;\XINT_mul_loop
+ 100000000!1;!\W 1#1!1;!\W
+{%
+ \XINT_smallmul 1#1!%
+}%
+\def\XINT_pow_II_in #1\xint:#2\W
+{%
+ \expandafter\XINT_pow_II_loop
+ \the\numexpr #1/\xint_c_ii-\xint_c_i\expandafter\xint:%
+ \the\numexpr\XINT_pow_mulbutcheckifsmall #2\W #2\W #2\W
+}%
+\def\XINT_pow_II_loop #1\xint:%
+{%
+ \ifnum #1 = \xint_c_i\expandafter\XINT_pow_II_exit\fi
+ \ifodd #1
+ \expandafter\XINT_pow_II_odda
+ \else
+ \expandafter\XINT_pow_II_even
+ \fi #1\xint:%
+}%
+\def\XINT_pow_II_exit\ifodd #1\fi #2\xint:#3\W #4\W
+{%
+ \expandafter\XINT_mul_out
+ \the\numexpr\XINT_pow_mulbutcheckifsmall #4\W #3%
+}%
+\def\XINT_pow_II_even #1\xint:#2\W
+{%
+ \expandafter\XINT_pow_II_loop
+ \the\numexpr #1/\xint_c_ii\expandafter\xint:%
+ \the\numexpr\XINT_pow_mulbutcheckifsmall #2\W #2\W
+}%
+\def\XINT_pow_II_odda #1\xint:#2\W #3\W
+{%
+ \expandafter\XINT_pow_II_oddb
+ \the\numexpr #1/\xint_c_ii-\xint_c_i\expandafter\xint:%
+ \the\numexpr\XINT_pow_mulbutcheckifsmall #3\W #2\W #2\W
+}%
+\def\XINT_pow_II_oddb #1\xint:#2\W #3\W
+{%
+ \expandafter\XINT_pow_II_loop
+ \the\numexpr #1\expandafter\xint:%
+ \the\numexpr\XINT_pow_mulbutcheckifsmall #3\W #3\W #2\W
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiFac}}
+% \lverb|Moved here from xint.sty with release 1.2 (to be usable by \bnumexpr).
+%
+% An \xintiFac is needed by xintexpr.sty. Prior to 1.2o it was defined here
+% as an alias to \xintiiFac, then redefined by xintfrac to use \xintNum. This
+% was incoherent. Contrarily to other similarly named macros,
+% \xintiiFac uses \numexpr on its input. This is also incoherent with the
+% naming scheme, alas.
+%
+% Partially rewritten with release 1.2 to benefit from the inner format of the
+% 1.2 multiplication.
+%
+% With current default settings of the etex memory and a.t.t.o.w (11/2015) the
+% maximal possible computation is 5971! (which has 19956 digits).
+%
+%
+%
+% Note (end november 2015): I also tried out a quickly written recursive
+% (binary split) implementation
+%
+%( \catcode`_ 11
+%: \catcode`^ 11
+%: \long\def\xint_firstofthree #1#2#3{#1}$%
+%: \long\def\xint_secondofthree #1#2#3{#2}$%
+%: \long\def\xint_thirdofthree #1#2#3{#3}$%
+%: $% quickly written factorial using binary split recursive method
+%: \def\tFac {\romannumeral-`0\tfac }$%
+%: \def\tfac #1{\expandafter\XINT_mul_out
+%: \romannumeral-`0\ufac {1}{#1}1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W}$%
+%: \def\ufac #1#2{\ifcase\numexpr#2-#1\relax
+%: \expandafter\xint_firstofthree
+%: \or
+%: \expandafter\xint_secondofthree
+%: \else
+%: \expandafter\xint_thirdofthree
+%: \fi
+%: {\the\numexpr\xint_c_x^viii+#1!1;!}$%
+%: {\the\numexpr\xint_c_x^viii+#1*#2!1;!}$%
+%: {\expandafter\vfac\the\numexpr (#1+#2)/\xint_c_ii.#1.#2.}$%
+%: }$%
+%: \def\vfac #1.#2.#3.$%
+%: {$%
+%: \expandafter
+%: \wfac\expandafter
+%: {\romannumeral-`0\expandafter
+%: \ufac\expandafter{\the\numexpr #1+\xint_c_i}{#3}}$%
+%: {\ufac {#2}{#1}}$%
+%: }$%
+%: \def\wfac #1#2{\expandafter\zfac\romannumeral-`0#2\W #1}$%
+%: \def\zfac {\the\numexpr\XINT_mul_loop 100000000!1;!\W }$% core multiplication...
+%: \catcode`_ 8
+%: \catcode`^ 7
+%)
+% and I was quite surprised that it was only about 1.6x--2x slower in the range
+% N=200 to 2000 than the \xintiiFac here which attempts to be smarter...
+%
+% Note (2017, 1.2l): I found out some code comment of mine that the code here
+% should be more in the style of \xintiiBinomial, but I left matters
+% untouched.
+%
+%
+%
+% 1.2o modifies \xintiFac to be coherent with \xintiBinomial: only with
+% xintfrac.sty loaded does it use \xintNum. It is documented only as macro of
+% xintfrac.sty, not as macro of xint.sty.
+% |
+% \begin{macrocode}
+\def\xintiiFac {\romannumeral0\xintiifac }%
+\def\xintiifac #1{\expandafter\XINT_fac_fork\the\numexpr#1.}%
+\def\XINT_fac_fork #1#2.%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_fac_zero
+ 0#1\XINT_fac_neg
+ 0-\XINT_fac_checksize
+ \krof #1#2.%
+}%
+\def\XINT_fac_zero #1.{ 1}%
+\def\XINT_fac_neg #1.{\XINT_signalcondition{InvalidOperation}{Factorial of
+ negative: (#1)!}{}{0}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_fac_checksize #1.%
+{%
+ \ifnum #1>\xint_c_x^iv \xint_dothis{\XINT_fac_toobig #1.}\fi
+ \ifnum #1>465 \xint_dothis{\XINT_fac_bigloop_a #1.}\fi
+ \ifnum #1>101 \xint_dothis{\XINT_fac_medloop_a #1.\XINT_mul_out}\fi
+ \xint_orthat{\XINT_fac_smallloop_a #1.\XINT_mul_out}%
+ 1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+\def\XINT_fac_toobig #1.#2\W{\XINT_signalcondition{InvalidOperation}{Factorial
+ of too big argument: #1 > 10000}{}{0}}%
+\def\XINT_fac_bigloop_a #1.%
+{%
+ \expandafter\XINT_fac_bigloop_b \the\numexpr
+ #1+\xint_c_i-\xint_c_ii*((#1-464)/\xint_c_ii).#1.%
+}%
+\def\XINT_fac_bigloop_b #1.#2.%
+{%
+ \expandafter\XINT_fac_medloop_a
+ \the\numexpr #1-\xint_c_i.{\XINT_fac_bigloop_loop #1.#2.}%
+}%
+\def\XINT_fac_bigloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_fac_bigloop_exit\fi
+ \expandafter\XINT_fac_bigloop_loop
+ \the\numexpr #1+\xint_c_ii\expandafter.%
+ \the\numexpr #2\expandafter.\the\numexpr\XINT_fac_bigloop_mul #1!%
+}%
+\def\XINT_fac_bigloop_exit #1!{\XINT_mul_out}%
+\def\XINT_fac_bigloop_mul #1!%
+{%
+ \expandafter\XINT_smallmul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)!%
+}%
+\def\XINT_fac_medloop_a #1.%
+{%
+ \expandafter\XINT_fac_medloop_b
+ \the\numexpr #1+\xint_c_i-\xint_c_iii*((#1-100)/\xint_c_iii).#1.%
+}%
+\def\XINT_fac_medloop_b #1.#2.%
+{%
+ \expandafter\XINT_fac_smallloop_a
+ \the\numexpr #1-\xint_c_i.{\XINT_fac_medloop_loop #1.#2.}%
+}%
+\def\XINT_fac_medloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_fac_loop_exit\fi
+ \expandafter\XINT_fac_medloop_loop
+ \the\numexpr #1+\xint_c_iii\expandafter.%
+ \the\numexpr #2\expandafter.\the\numexpr\XINT_fac_medloop_mul #1!%
+}%
+\def\XINT_fac_medloop_mul #1!%
+{%
+ \expandafter\XINT_smallmul
+ \the\numexpr
+ \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_fac_smallloop_a #1.%
+{%
+ \csname
+ XINT_fac_smallloop_\the\numexpr #1-\xint_c_iv*(#1/\xint_c_iv)\relax
+ \endcsname #1.%
+}%
+\expandafter\def\csname XINT_fac_smallloop_1\endcsname #1.%
+{%
+ \XINT_fac_smallloop_loop 2.#1.100000001!1;!%
+}%
+\expandafter\def\csname XINT_fac_smallloop_-2\endcsname #1.%
+{%
+ \XINT_fac_smallloop_loop 3.#1.100000002!1;!%
+}%
+\expandafter\def\csname XINT_fac_smallloop_-1\endcsname #1.%
+{%
+ \XINT_fac_smallloop_loop 4.#1.100000006!1;!%
+}%
+\expandafter\def\csname XINT_fac_smallloop_0\endcsname #1.%
+{%
+ \XINT_fac_smallloop_loop 5.#1.1000000024!1;!%
+}%
+\def\XINT_fac_smallloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_fac_loop_exit\fi
+ \expandafter\XINT_fac_smallloop_loop
+ \the\numexpr #1+\xint_c_iv\expandafter.%
+ \the\numexpr #2\expandafter.\the\numexpr\XINT_fac_smallloop_mul #1!%
+}%
+\def\XINT_fac_smallloop_mul #1!%
+{%
+ \expandafter\XINT_smallmul
+ \the\numexpr
+ \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_fac_loop_exit #1!#2;!#3{#3#2;!}%
+% \end{macrocode}
+% \subsection{\csh{XINT_useiimessage}}
+% \lverb|1.2o|
+% \begin{macrocode}
+\def\XINT_useiimessage #1% used in LaTeX only
+{%
+ \XINT_ifFlagRaised {#1}%
+ {\@backslashchar#1
+ (load xintfrac or use \@backslashchar xintii\xint_gobble_iv#1!)\MessageBreak}%
+ {}%
+}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintcore}
+% \cleardoublepage\let\xintcorenameUp\undefined
+%\gardesactifs
+%\let</xintcore>\relax
+%\let<*xint>\gardesinactifs
+%</xintcore>^^A---------------------------------------------------
+%<*xint>^^A-------------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex -*-
+% \clearpage\csname xintnameUp\endcsname
+% \section{Package \xintnameimp implementation}
+% \RaisedLabel{sec:xintimp}
+%
+% \localtableofcontents
+%
+% With release |1.1| the core arithmetic routines |\xintiiAdd|,
+% |\xintiiSub|, |\xintiiMul|, |\xintiiQuo|, |\xintiiPow| were separated to be
+% the main component of the then new
+% \xintcorenameimp.
+%
+% At |1.3| the macros deprecated at |1.2o| got all removed.
+%
+% |1.3b| adds randomness related macros.
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xint.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintcore.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xint}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintcore.sty
+ \ifx\w\relax % but xintkernel.sty not yet loaded.
+ \def\z{\endgroup\input xintcore.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintcore.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintcore}}%
+ \fi
+ \else
+ \aftergroup\endinput % xint already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty (loaded by xintcore.sty)
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xint}%
+ [2019/04/05 1.3e Expandable operations on big integers (JFB)]%
+% \end{macrocode}
+% \subsection{More token management}
+% \begin{macrocode}
+\long\def\xint_firstofthree #1#2#3{#1}%
+\long\def\xint_secondofthree #1#2#3{#2}%
+\long\def\xint_thirdofthree #1#2#3{#3}%
+\long\def\xint_stop_atfirstofthree #1#2#3{ #1}%
+\long\def\xint_stop_atsecondofthree #1#2#3{ #2}%
+\long\def\xint_stop_atthirdofthree #1#2#3{ #3}%
+% \end{macrocode}
+% \subsection{(WIP) A constant needed by \cshnolabel{xintRandomDigits} et al.}
+% \begin{macrocode}
+\ifdefined\xint_texuniformdeviate
+ \unless\ifdefined\xint_c_nine_x^viii
+ \csname newcount\endcsname\xint_c_nine_x^viii
+ \xint_c_nine_x^viii 900000000
+ \fi
+\fi
+% \end{macrocode}
+% \subsection{\csh{xintLen}, \csh{xintiLen}}
+% \lverb|\xintLen gets extended to fractions by xintfrac.sty: A/B is given
+% length len(A)+len(B)-1 (somewhat arbitrary). It applies \xintNum to its
+% argument. A minus sign is accepted and ignored.
+%
+%
+% For parallelism with \xintiNum/\xintNum, 1.2o defines \xintiLen.
+%
+% \xintLen gets redefined by $xintfracnameimp.
+% |
+% \begin{macrocode}
+\def\xintiLen {\romannumeral0\xintilen }%
+\def\xintilen #1{\def\xintilen ##1%
+{%
+ \expandafter#1\the\numexpr
+ \expandafter\XINT_len_fork\romannumeral0\xintinum{##1}%
+ \xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye\relax
+}}\xintilen{ }%
+\def\xintLen {\romannumeral0\xintlen }%
+\let\xintlen\xintilen
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_len_fork #1%
+{%
+ \expandafter\XINT_length_loop\xint_UDsignfork#1{}-#1\krof
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiLogTen}}
+% \lverb|1.3e. Support for ilog10() function in \xintiiexpr. See \XINTiLogTen
+% in xintfrac.sty which also currently uses -"7FFF8000 as value if input is
+% zero.|
+% \begin{macrocode}
+\def\xintiiLogTen {\the\numexpr\xintiilogten }%
+\def\xintiilogten #1%
+{%
+ \expandafter\XINT_iilogten\romannumeral`&&@#1%
+ \xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ \relax
+}%
+\def\XINT_iilogten #1{\if#10-"7FFF8000\fi -1+%
+ \expandafter\XINT_length_loop\xint_UDsignfork#1{}-#1\krof}%
+% \end{macrocode}
+% \subsection{\csh{xintReverseDigits}}
+% \lverb|&
+% 1.2.
+%
+% This puts digits in reverse order, not suppressing leading zeros
+% after reverse. Despite lacking the "ii" in its name, it does not apply
+% \xintNum to its argument (contrarily to \xintLen, this is not very coherent).
+%
+% 1.2l variant is robust against non terminated \the\numexpr input.
+%
+% This macro is currently not used elsewhere in xint code.
+% |
+% \begin{macrocode}
+\def\xintReverseDigits {\romannumeral0\xintreversedigits }%
+\def\xintreversedigits #1%
+{%
+ \expandafter\XINT_revdigits\romannumeral`&&@#1%
+ {\XINT_microrevsep_end\W}\XINT_microrevsep_end
+ \XINT_microrevsep_end\XINT_microrevsep_end
+ \XINT_microrevsep_end\XINT_microrevsep_end
+ \XINT_microrevsep_end\XINT_microrevsep_end\XINT_microrevsep_end\Z
+ 1\Z!1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+\def\XINT_revdigits #1%
+{%
+ \xint_UDsignfork
+ #1{\expandafter-\romannumeral0\XINT_revdigits_a}%
+ -{\XINT_revdigits_a #1}%
+ \krof
+}%
+\def\XINT_revdigits_a
+{%
+ \expandafter\XINT_revdigits_b\expandafter{\expandafter}%
+ \the\numexpr\XINT_microrevsep
+}%
+\def\XINT_microrevsep #1#2#3#4#5#6#7#8#9%
+{%
+ 1#9#8#7#6#5#4#3#2#1\expandafter!\the\numexpr\XINT_microrevsep
+}%
+\def\XINT_microrevsep_end #1\W #2\expandafter #3\Z{\relax#2!}%
+\def\XINT_revdigits_b #11#2!1#3!1#4!1#5!1#6!1#7!1#8!1#9!%
+{%
+ \xint_gob_til_R #9\XINT_revdigits_end\R
+ \XINT_revdigits_b {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT_revdigits_end#1{%
+\def\XINT_revdigits_end\R\XINT_revdigits_b ##1##2\W
+ {\expandafter#1\xint_gob_til_Z ##1}%
+}\XINT_revdigits_end{ }%
+\let\xintRev\xintReverseDigits
+% \end{macrocode}
+% \subsection{\csh{xintiiE}}
+% \lverb|Originally was used in \xintiiexpr. Transferred from xintfrac for
+% 1.1.
+% Code rewritten for 1.2i.
+% \xintiiE{x}{e} extends x with e zeroes if e is positive and simply outputs
+% x if e is zero or negative. Attention, le comportement pour e < 0 ne doit
+% pas être modifié car \xintMod et autres macros en dépendent.
+% |
+% \begin{macrocode}
+\def\xintiiE {\romannumeral0\xintiie }%
+\def\xintiie #1#2%
+ {\expandafter\XINT_iie_fork\the\numexpr #2\expandafter.\romannumeral`&&@#1;}%
+\def\XINT_iie_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_iie_neg
+ -\XINT_iie_a
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb|&
+% le #2 a le bon pattern terminé par ; #1=0 est OK pour \XINT_rep.
+% |
+% \begin{macrocode}
+\def\XINT_iie_a #1.%
+ {\expandafter\XINT_dsx_append\romannumeral\XINT_rep #1\endcsname 0.}%
+\def\XINT_iie_neg #1.#2;{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintDecSplit}}
+% \lverb@DECIMAL SPLIT
+%
+% The macro \xintDecSplit {x}{A} cuts A which is composed of digits (leading
+% zeroes ok, but no sign) (*) into two (each possibly empty) pieces L and R.
+% The concatenation LR always reproduces A.
+%
+% The position of the cut is specified by the first argument x. If x is zero
+% or positive the cut location is x slots to the left of the right end of the
+% number. If x becomes equal to or larger than the length of the number then L
+% becomes empty. If x is negative the location of the cut is |x| slots to the
+% right of the left end of the number.
+%
+% (*) versions earlier than 1.2i first replaced A with its absolute value.
+% This is not the case anymore. This macro should NOT be used for A with a
+% leading sign (+ or -).
+%
+% Entirely rewritten for 1.2i (2016/12/11).
+%
+% Attention: \xintDecSplit not robust against non terminated second argument.
+% @
+% \begin{macrocode}
+\def\xintDecSplit {\romannumeral0\xintdecsplit }%
+\def\xintdecsplit #1#2%
+{%
+ \expandafter\XINT_split_finish
+ \romannumeral0\expandafter\XINT_split_xfork
+ \the\numexpr #1\expandafter.\romannumeral`&&@#2%
+ \xint_bye2345678\xint_bye..%
+}%
+\def\XINT_split_finish #1.#2.{{#1}{#2}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_split_xfork #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_split_zerosplit
+ 0#1\XINT_split_fromleft
+ 0-{\XINT_split_fromright #1}%
+ \krof
+}%
+\def\XINT_split_zerosplit .#1\xint_bye#2\xint_bye..{ #1..}%
+\def\XINT_split_fromleft
+ {\expandafter\XINT_split_fromleft_a\the\numexpr\xint_c_viii-}%
+\def\XINT_split_fromleft_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_split_fromleft_b
+ -{\XINT_split_fromleft_end_a #1}%
+ \krof
+}%
+\def\XINT_split_fromleft_b #1.#2#3#4#5#6#7#8#9%
+{%
+ \expandafter\XINT_split_fromleft_clean
+ \the\numexpr1#2#3#4#5#6#7#8#9\expandafter
+ \XINT_split_fromleft_a\the\numexpr\xint_c_viii-#1.%
+}%
+\def\XINT_split_fromleft_end_a #1.%
+{%
+ \expandafter\XINT_split_fromleft_clean
+ \the\numexpr1\csname XINT_split_fromleft_end#1\endcsname
+}%
+\def\XINT_split_fromleft_clean 1{ }%
+\expandafter\def\csname XINT_split_fromleft_end7\endcsname #1%
+ {#1\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end6\endcsname #1#2%
+ {#1#2\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end5\endcsname #1#2#3%
+ {#1#2#3\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end4\endcsname #1#2#3#4%
+ {#1#2#3#4\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end3\endcsname #1#2#3#4#5%
+ {#1#2#3#4#5\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end2\endcsname #1#2#3#4#5#6%
+ {#1#2#3#4#5#6\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end1\endcsname #1#2#3#4#5#6#7%
+ {#1#2#3#4#5#6#7\XINT_split_fromleft_end_b}%
+\expandafter\def\csname XINT_split_fromleft_end0\endcsname #1#2#3#4#5#6#7#8%
+ {#1#2#3#4#5#6#7#8\XINT_split_fromleft_end_b}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_split_fromleft_end_b #1\xint_bye#2\xint_bye.{.#1}% puis .
+\def\XINT_split_fromright #1.#2\xint_bye
+{%
+ \expandafter\XINT_split_fromright_a
+ \the\numexpr#1-\numexpr\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ .#2\xint_bye
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_split_fromright_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_split_fromleft
+ -\XINT_split_fromright_Lempty
+ \krof
+}%
+\def\XINT_split_fromright_Lempty #1.#2\xint_bye#3..{.#2.}%
+% \end{macrocode}
+% \subsection{\csh{xintDecSplitL}}
+% \begin{macrocode}
+\def\xintDecSplitL {\romannumeral0\xintdecsplitl }%
+\def\xintdecsplitl #1#2%
+{%
+ \expandafter\XINT_splitl_finish
+ \romannumeral0\expandafter\XINT_split_xfork
+ \the\numexpr #1\expandafter.\romannumeral`&&@#2%
+ \xint_bye2345678\xint_bye..%
+}%
+\def\XINT_splitl_finish #1.#2.{ #1}%
+% \end{macrocode}
+% \subsection{\csh{xintDecSplitR}}
+% \begin{macrocode}
+\def\xintDecSplitR {\romannumeral0\xintdecsplitr }%
+\def\xintdecsplitr #1#2%
+{%
+ \expandafter\XINT_splitr_finish
+ \romannumeral0\expandafter\XINT_split_xfork
+ \the\numexpr #1\expandafter.\romannumeral`&&@#2%
+ \xint_bye2345678\xint_bye..%
+}%
+\def\XINT_splitr_finish #1.#2.{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintDSHr}}
+% \lverb@DECIMAL SHIFTS \xintDSH {x}{A}$\
+% si x <= 0, fait A -> A.10^(|x|).
+% si x > 0, et A >=0, fait A -> quo(A,10^(x))$\
+% si x > 0, et A < 0, fait A -> -quo(-A,10^(x))$\
+% (donc pour x > 0 c'est comme DSR itéré x fois)$\
+% \xintDSHr donne le `reste' (si x<=0 donne zéro).
+%
+% Badly named macros.
+%
+% Rewritten for 1.2i, this was old code and \xintDSx has changed interface.
+% @
+% \begin{macrocode}
+\def\xintDSHr {\romannumeral0\xintdshr }%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\xintdshr #1#2%
+{%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \expandafter\XINT_dshr_fork\the\numexpr#1\expandafter.\romannumeral`&&@#2;%
+}%
+\def\XINT_dshr_fork #1%
+{%
+ \xint_UDzerominusfork
+ 0#1\XINT_dshr_xzeroorneg
+ #1-\XINT_dshr_xzeroorneg
+ 0-\XINT_dshr_xpositive
+ \krof #1%
+}%
+\def\XINT_dshr_xzeroorneg #1;{ 0}%
+\def\XINT_dshr_xpositive
+{%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \expandafter\xint_stop_atsecondoftwo\romannumeral0\XINT_dsx_xisPos
+}%
+% \end{macrocode}
+% \subsection{\csh{xintDSH}}
+% \begin{macrocode}
+\def\xintDSH {\romannumeral0\xintdsh }%
+\def\xintdsh #1#2%
+{%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \expandafter\XINT_dsh_fork\the\numexpr#1\expandafter.\romannumeral`&&@#2;%
+}%
+\def\XINT_dsh_fork #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_dsh_xiszero
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ 0#1\XINT_dsx_xisNeg_checkA
+ 0-{\XINT_dsh_xisPos #1}%
+ \krof
+}%
+\def\XINT_dsh_xiszero #1.#2;{ #2}%
+\def\XINT_dsh_xisPos
+{%
+% \end{macrocode}
+% \lverb|&
+ \expandafter\xint_stop_atfirstoftwo\romannumeral0\XINT_dsx_xisPos
+% |
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \subsection{\csh{xintDSx}}
+% \lverb@&
+% --> Attention le cas x=0 est traité dans la même catégorie que x > 0 <--
+%
+%( si x < 0, fait A -> A.10^(|x|)
+%: si x >= 0, et A >=0, fait A -> {quo(A,10^(x))}{rem(A,10^(x))}
+%: si x >= 0, et A < 0, d'abord on calcule {quo(-A,10^(x))}{rem(-A,10^(x))}
+%: puis, si le premier n'est pas nul on lui donne le signe -
+%: si le premier est nul on donne le signe - au second.
+%)
+% On peut donc toujours reconstituer l'original A par 10^x Q \pm R
+% où il faut prendre le signe plus si Q est positif ou nul et le signe moins si
+% Q est strictement négatif.
+%
+% Rewritten for 1.2i, this was old code.
+%
+% @
+% \begin{macrocode}
+\def\xintDSx {\romannumeral0\xintdsx }%
+\def\xintdsx #1#2%
+{%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \expandafter\XINT_dsx_fork\the\numexpr#1\expandafter.\romannumeral`&&@#2;%
+}%
+\def\XINT_dsx_fork #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_dsx_xisZero
+ 0#1\XINT_dsx_xisNeg_checkA
+ 0-{\XINT_dsx_xisPos #1}%
+ \krof
+}%
+\def\XINT_dsx_xisZero #1.#2;{{#2}{0}}%
+\def\XINT_dsx_xisNeg_checkA #1.#2%
+{%
+ \xint_gob_til_zero #2\XINT_dsx_xisNeg_Azero 0%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \expandafter\XINT_dsx_append\romannumeral\XINT_rep #1\endcsname 0.#2%
+}%
+\def\XINT_dsx_xisNeg_Azero #1;{ 0}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_dsx_addzeros #1%
+ {\expandafter\XINT_dsx_append\romannumeral\XINT_rep#1\endcsname0.}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_dsx_addzerosnofuss #1%
+ {\expandafter\XINT_dsx_append\romannumeral\xintreplicate{#1}0.}%
+\def\XINT_dsx_append #1.#2;{ #2#1}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_dsx_xisPos #1.#2%
+{%
+ \xint_UDzerominusfork
+ #2-\XINT_dsx_AisZero
+ 0#2\XINT_dsx_AisNeg
+ 0-\XINT_dsx_AisPos
+ \krof #1.#2%
+}%
+\def\XINT_dsx_AisZero #1;{{0}{0}}%
+\def\XINT_dsx_AisNeg #1.-#2;%
+{%
+ \expandafter\XINT_dsx_AisNeg_checkiffirstempty
+ \romannumeral0\XINT_split_xfork #1.#2\xint_bye2345678\xint_bye..%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_dsx_AisNeg_checkiffirstempty #1%
+{%
+ \xint_gob_til_dot #1\XINT_dsx_AisNeg_finish_zero.%
+ \XINT_dsx_AisNeg_finish_notzero #1%
+}%
+\def\XINT_dsx_AisNeg_finish_zero.\XINT_dsx_AisNeg_finish_notzero.#1.%
+{%
+ \expandafter\XINT_dsx_end
+ \expandafter {\romannumeral0\XINT_num {-#1}}{0}%
+}%
+\def\XINT_dsx_AisNeg_finish_notzero #1.#2.%
+{%
+ \expandafter\XINT_dsx_end
+ \expandafter {\romannumeral0\XINT_num {#2}}{-#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_dsx_AisPos #1.#2;%
+{%
+ \expandafter\XINT_dsx_AisPos_finish
+ \romannumeral0\XINT_split_xfork #1.#2\xint_bye2345678\xint_bye..%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_dsx_AisPos_finish #1.#2.%
+{%
+ \expandafter\XINT_dsx_end
+ \expandafter {\romannumeral0\XINT_num {#2}}%
+ {\romannumeral0\XINT_num {#1}}%
+}%
+\def\XINT_dsx_end #1#2{\expandafter{#2}{#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiEq}}
+% \lverb|no \xintiieq.|
+% \begin{macrocode}
+\def\xintiiEq #1#2{\romannumeral0\xintiiifeq{#1}{#2}{1}{0}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiNotEq}}
+% \lverb|Pour xintexpr. Pas de version en lowercase.|
+% \begin{macrocode}
+\def\xintiiNotEq #1#2{\romannumeral0\xintiiifeq {#1}{#2}{0}{1}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiGeq}}
+% \lverb|&
+% PLUS GRAND OU ÉGAL
+% attention compare les **valeurs absolues**
+%
+% 1.2l made \xintiiGeq robust against non terminated items.
+%
+% 1.2l rewrote \xintiiCmp, but forgot to handle \xintiiGeq too. Done at 1.2m.
+%
+% This macro should have been called \xintGEq for example.
+% |
+% \begin{macrocode}
+\def\xintiiGeq {\romannumeral0\xintiigeq }%
+\def\xintiigeq #1{\expandafter\XINT_iigeq\romannumeral`&&@#1\xint:}%
+\def\XINT_iigeq #1#2\xint:#3%
+{%
+ \expandafter\XINT_geq_fork\expandafter #1\romannumeral`&&@#3\xint:#2\xint:
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_geq #1#2\xint:#3%
+{%
+ \expandafter\XINT_geq_fork\expandafter #1\romannumeral0\xintnum{#3}\xint:#2\xint:
+}%
+\def\XINT_geq_fork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_geq_firstiszero
+ #2\XINT_geq_secondiszero
+ 0{}%
+ \krof
+ \xint_UDsignsfork
+ #1#2\XINT_geq_minusminus
+ #1-\XINT_geq_minusplus
+ #2-\XINT_geq_plusminus
+ --\XINT_geq_plusplus
+ \krof #1#2%
+}%
+\def\XINT_geq_firstiszero #1\krof 0#2#3\xint:#4\xint:
+ {\xint_UDzerofork #2{ 1}0{ 0}\krof }%
+\def\XINT_geq_secondiszero #1\krof #20#3\xint:#4\xint:{ 1}%
+\def\XINT_geq_plusminus #1-{\XINT_geq_plusplus #1{}}%
+\def\XINT_geq_minusplus -#1{\XINT_geq_plusplus {}#1}%
+\def\XINT_geq_minusminus --{\XINT_geq_plusplus {}{}}%
+\def\XINT_geq_plusplus
+ {\expandafter\XINT_geq_finish\romannumeral0\XINT_cmp_plusplus}%
+\def\XINT_geq_finish #1{\if-#1\expandafter\XINT_geq_no
+ \else\expandafter\XINT_geq_yes\fi}%
+\def\XINT_geq_no 1{ 0}%
+\def\XINT_geq_yes { 1}%
+% \end{macrocode}
+% \subsection{\csh{xintiiGt}}
+% \begin{macrocode}
+\def\xintiiGt #1#2{\romannumeral0\xintiiifgt{#1}{#2}{1}{0}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiLt}}
+% \begin{macrocode}
+\def\xintiiLt #1#2{\romannumeral0\xintiiiflt{#1}{#2}{1}{0}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiGtorEq}}
+% \begin{macrocode}
+\def\xintiiGtorEq #1#2{\romannumeral0\xintiiiflt {#1}{#2}{0}{1}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiLtorEq}}
+% \begin{macrocode}
+\def\xintiiLtorEq #1#2{\romannumeral0\xintiiifgt {#1}{#2}{0}{1}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiIsZero}}
+% \lverb|1.09a. restyled in 1.09i. 1.1 adds \xintiiIsZero, etc... for
+% optimization in \xintexpr|
+% \begin{macrocode}
+\def\xintiiIsZero {\romannumeral0\xintiiiszero }%
+\def\xintiiiszero #1{\if0\xintiiSgn{#1}\xint_afterfi{ 1}\else\xint_afterfi{ 0}\fi}%
+% \end{macrocode}
+% \subsection{\csh{xintiiIsNotZero}}
+% \lverb|1.09a. restyled in 1.09i. 1.1 adds \xintiiIsZero, etc... for
+% optimization in \xintexpr|
+% \begin{macrocode}
+\def\xintiiIsNotZero {\romannumeral0\xintiiisnotzero }%
+\def\xintiiisnotzero
+ #1{\if0\xintiiSgn{#1}\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi}%
+% \end{macrocode}
+% \subsection{\csh{xintiiIsOne}}
+% \lverb|Added in 1.03. 1.09a defines \xintIsOne. 1.1a adds \xintiiIsOne.
+%
+% \XINT_isOne rewritten for 1.2g. Works with expanded strict integers,
+% positive or negative.
+%
+%
+%
+%|
+% \begin{macrocode}
+\def\xintiiIsOne {\romannumeral0\xintiiisone }%
+\def\xintiiisone #1{\expandafter\XINT_isone\romannumeral`&&@#1XY}%
+\def\XINT_isone #1#2#3Y%
+{%
+ \unless\if#2X\xint_dothis{ 0}\fi
+ \unless\if#11\xint_dothis{ 0}\fi
+ \xint_orthat{ 1}%
+}%
+\def\XINT_isOne #1{\XINT_is_One#1XY}%
+\def\XINT_is_One #1#2#3Y%
+{%
+ \unless\if#2X\xint_dothis0\fi
+ \unless\if#11\xint_dothis0\fi
+ \xint_orthat1%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiOdd}}
+% \lverb|\xintOdd is needed for the xintexpr-essions even() and odd()
+% functions (and also by \xintNewExpr).|
+% \begin{macrocode}
+\def\xintiiOdd {\romannumeral0\xintiiodd }%
+\def\xintiiodd #1%
+{%
+ \ifodd\xintLDg{#1} %<- intentional space
+ \xint_afterfi{ 1}%
+ \else
+ \xint_afterfi{ 0}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiEven}}
+% \begin{macrocode}
+\def\xintiiEven {\romannumeral0\xintiieven }%
+\def\xintiieven #1%
+{%
+ \ifodd\xintLDg{#1} %<- intentional space
+ \xint_afterfi{ 0}%
+ \else
+ \xint_afterfi{ 1}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMON}}
+% \lverb|MINUS ONE TO THE POWER N|
+% \begin{macrocode}
+\def\xintiiMON {\romannumeral0\xintiimon }%
+\def\xintiimon #1%
+{%
+ \ifodd\xintLDg {#1} %<- intentional space
+ \xint_afterfi{ -1}%
+ \else
+ \xint_afterfi{ 1}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMMON}}
+% \lverb|MINUS ONE TO THE POWER N-1|
+% \begin{macrocode}
+\def\xintiiMMON {\romannumeral0\xintiimmon }%
+\def\xintiimmon #1%
+{%
+ \ifodd\xintLDg {#1} %<- intentional space
+ \xint_afterfi{ 1}%
+ \else
+ \xint_afterfi{ -1}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintSgnFork}}
+% \lverb|Expandable three-way fork added in 1.07. The argument #1 must expand
+% to non-self-ending -1,0 or 1. 1.09i with _thenstop (now _stop_at...).|
+% \begin{macrocode}
+\def\xintSgnFork {\romannumeral0\xintsgnfork }%
+\def\xintsgnfork #1%
+{%
+ \ifcase #1 \expandafter\xint_stop_atsecondofthree
+ \or\expandafter\xint_stop_atthirdofthree
+ \else\expandafter\xint_stop_atfirstofthree
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifSgn}}
+% \lverb|Expandable three-way fork added in 1.09a. Branches expandably
+% depending on whether <0, =0, >0. Choice of branch guaranteed in two steps.
+%
+% 1.09i has \xint_firstofthreeafterstop (now \xint_stop_atfirstofthree) etc
+% for faster expansion.
+%
+% 1.1 adds \xintiiifSgn for optimization in xintexpr-essions. Should I move
+% them to xintcore? (for bnumexpr)|
+% \begin{macrocode}
+\def\xintiiifSgn {\romannumeral0\xintiiifsgn }%
+\def\xintiiifsgn #1%
+{%
+ \ifcase \xintiiSgn{#1}
+ \expandafter\xint_stop_atsecondofthree
+ \or\expandafter\xint_stop_atthirdofthree
+ \else\expandafter\xint_stop_atfirstofthree
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifCmp}}
+% \lverb|1.09e
+% \xintifCmp {n}{m}{if n<m}{if n=m}{if n>m}. 1.1a adds ii variant|
+% \begin{macrocode}
+\def\xintiiifCmp {\romannumeral0\xintiiifcmp }%
+\def\xintiiifcmp #1#2%
+{%
+ \ifcase\xintiiCmp {#1}{#2}
+ \expandafter\xint_stop_atsecondofthree
+ \or\expandafter\xint_stop_atthirdofthree
+ \else\expandafter\xint_stop_atfirstofthree
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifEq}}
+% \lverb|1.09a \xintifEq {n}{m}{YES if n=m}{NO if n<>m}. 1.1a adds ii variant|
+% \begin{macrocode}
+\def\xintiiifEq {\romannumeral0\xintiiifeq }%
+\def\xintiiifeq #1#2%
+{%
+ \if0\xintiiCmp{#1}{#2}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else\expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifGt}}
+% \lverb|1.09a \xintifGt {n}{m}{YES if n>m}{NO if n<=m}. 1.1a adds ii variant|
+% \begin{macrocode}
+\def\xintiiifGt {\romannumeral0\xintiiifgt }%
+\def\xintiiifgt #1#2%
+{%
+ \if1\xintiiCmp{#1}{#2}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else\expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifLt}}
+% \lverb|1.09a \xintifLt {n}{m}{YES if n<m}{NO if n>=m}. Restyled in 1.09i.
+% 1.1a adds ii variant|
+% \begin{macrocode}
+\def\xintiiifLt {\romannumeral0\xintiiiflt }%
+\def\xintiiiflt #1#2%
+{%
+ \ifnum\xintiiCmp{#1}{#2}<\xint_c_
+ \expandafter\xint_stop_atfirstoftwo
+ \else \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifZero}}
+% \lverb|Expandable two-way fork added in 1.09a. Branches expandably depending on
+% whether the argument is zero (branch A) or not (branch B). 1.09i restyling. By
+% the way it appears (not thoroughly tested, though) that \if tests are faster
+% than \ifnum tests. 1.1 adds ii versions.
+%
+% 1.2o deprecates \xintifZero.|
+% \begin{macrocode}
+\def\xintiiifZero {\romannumeral0\xintiiifzero }%
+\def\xintiiifzero #1%
+{%
+ \if0\xintiiSgn{#1}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifNotZero}}
+% \begin{macrocode}
+\def\xintiiifNotZero {\romannumeral0\xintiiifnotzero }%
+\def\xintiiifnotzero #1%
+{%
+ \if0\xintiiSgn{#1}%
+ \expandafter\xint_stop_atsecondoftwo
+ \else
+ \expandafter\xint_stop_atfirstoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifOne}}
+% \lverb|added in 1.09i. 1.1a adds \xintiiifOne.|
+% \begin{macrocode}
+\def\xintiiifOne {\romannumeral0\xintiiifone }%
+\def\xintiiifone #1%
+{%
+ \if1\xintiiIsOne{#1}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiifOdd}}
+% \lverb|1.09e. Restyled in 1.09i. 1.1a adds \xintiiifOdd.|
+% \begin{macrocode}
+\def\xintiiifOdd {\romannumeral0\xintiiifodd }%
+\def\xintiiifodd #1%
+{%
+ \if\xintiiOdd{#1}1%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintifTrueAelseB}, \csh{xintifFalseAelseB}}
+% \lverb|1.09i. 1.2i has removed deprecated \xintifTrueFalse, \xintifTrue.
+%
+% 1.2o uses \xintiiifNotZero, see comments to \xintAND etc... This will work
+% fine with arguments being nested xintfrac.sty macros, without the overhead
+% of \xintNum or \xintRaw parsing.|
+% \begin{macrocode}
+\def\xintifTrueAelseB {\romannumeral0\xintiiifnotzero}%
+\def\xintifFalseAelseB{\romannumeral0\xintiiifzero}%
+% \end{macrocode}
+% \subsection{\csh{xintIsTrue}, \csh{xintIsFalse}}
+% \lverb|1.09c. Suppressed at 1.2o. They seem not to have been documented, fortunately.|
+% \begin{macrocode}
+%\let\xintIsTrue \xintIsNotZero
+%\let\xintIsFalse\xintIsZero
+% \end{macrocode}
+% \subsection{\csh{xintNOT}}
+% \lverb|1.09c. But it should have been called \xintNOT, not \xintNot. Former
+% denomination deprecated at 1.2o. Besides, the macro is now defined as ii-type.
+% |
+% \begin{macrocode}
+\def\xintNOT{\romannumeral0\xintiiiszero}%
+% \end{macrocode}
+% \subsection{\csh{xintAND}, \csh{xintOR}, \csh{xintXOR}}
+% \lverb|Added with 1.09a. But they used \xintSgn, etc... rather than
+% \xintiiSgn. This brings \xintNum overhead which is not really desired, and
+% which is not needed for use by xintexpr.sty. At 1.2o I modify them to use
+% only ii macros. This is enough for sign or zeroness even for xintfrac
+% format, as manipulated inside the \xintexpr. Big hesitation whether there
+% should be however \xintiiAND outputting 1 or 0 versus an \xintAND outputting
+% 1[0] versus 0[0] for example.|
+% \begin{macrocode}
+\def\xintAND {\romannumeral0\xintand }%
+\def\xintand #1#2{\if0\xintiiSgn{#1}\expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo\fi
+ { 0}{\xintiiisnotzero{#2}}}%
+\def\xintOR {\romannumeral0\xintor }%
+\def\xintor #1#2{\if0\xintiiSgn{#1}\expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo\fi
+ {\xintiiisnotzero{#2}}{ 1}}%
+\def\xintXOR {\romannumeral0\xintxor }%
+\def\xintxor #1#2{\if\xintiiIsZero{#1}\xintiiIsZero{#2}%
+ \xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi }%
+% \end{macrocode}
+% \subsection{\csh{xintANDof}}
+% \lverb|New with 1.09a. \xintANDof works also with an empty list. Empty items
+% however are not accepted.
+%
+% 1.2l made \xintANDof robust against non terminated items.
+%
+% 1.2o's \xintifTrueAelseB is now an ii macro, actually.
+%
+% This macro as well as ORof and XORof are actually not used by xintexpr,
+% which has its own csv handling macros.|
+% \begin{macrocode}
+\def\xintANDof {\romannumeral0\xintandof }%
+\def\xintandof #1{\expandafter\XINT_andof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_andof_a #1{\expandafter\XINT_andof_b\romannumeral`&&@#1!}%
+\def\XINT_andof_b #1%
+ {\xint_gob_til_xint: #1\XINT_andof_e\xint:\XINT_andof_c #1}%
+\def\XINT_andof_c #1!%
+ {\xintifTrueAelseB {#1}{\XINT_andof_a}{\XINT_andof_no}}%
+\def\XINT_andof_no #1\xint:{ 0}%
+\def\XINT_andof_e #1!{ 1}%
+% \end{macrocode}
+% \subsection{\csh{xintORof}}
+% \lverb|New with 1.09a. Works also with an empty list. Empty items
+% however are not accepted.
+%
+% 1.2l made \xintORof robust against non terminated items.|
+% \begin{macrocode}
+\def\xintORof {\romannumeral0\xintorof }%
+\def\xintorof #1{\expandafter\XINT_orof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_orof_a #1{\expandafter\XINT_orof_b\romannumeral`&&@#1!}%
+\def\XINT_orof_b #1%
+ {\xint_gob_til_xint: #1\XINT_orof_e\xint:\XINT_orof_c #1}%
+\def\XINT_orof_c #1!%
+ {\xintifTrueAelseB {#1}{\XINT_orof_yes}{\XINT_orof_a}}%
+\def\XINT_orof_yes #1\xint:{ 1}%
+\def\XINT_orof_e #1!{ 0}%
+% \end{macrocode}
+% \subsection{\csh{xintXORof}}
+% \lverb|New with 1.09a. Works with an empty list, too. Empty items
+% however are not accepted. \XINT_xorof_c more
+% efficient in 1.09i.
+%
+% 1.2l made \xintXORof robust against non terminated items.|
+% \begin{macrocode}
+\def\xintXORof {\romannumeral0\xintxorof }%
+\def\xintxorof #1{\expandafter\XINT_xorof_a\expandafter
+ 0\romannumeral`&&@#1\xint:}%
+\def\XINT_xorof_a #1#2{\expandafter\XINT_xorof_b\romannumeral`&&@#2!#1}%
+\def\XINT_xorof_b #1%
+ {\xint_gob_til_xint: #1\XINT_xorof_e\xint:\XINT_xorof_c #1}%
+\def\XINT_xorof_c #1!#2%
+ {\xintifTrueAelseB {#1}{\if #20\xint_afterfi{\XINT_xorof_a 1}%
+ \else\xint_afterfi{\XINT_xorof_a 0}\fi}%
+ {\XINT_xorof_a #2}%
+ }%
+\def\XINT_xorof_e #1!#2{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMax}}
+% \lverb|&
+% At 1.2m, a long-standing bug was fixed: \xintiiMax had the overhead of
+% applying \xintNum to its arguments due to use of a sub-macro of \xintGeq
+% code to which this overhead was added at some point.
+%
+% And on this occasion I reduced even more number of times input is grabbed.
+% |
+% \begin{macrocode}
+\def\xintiiMax {\romannumeral0\xintiimax }%
+\def\xintiimax #1%
+{%
+ \expandafter\xint_iimax \romannumeral`&&@#1\xint:
+}%
+\def\xint_iimax #1\xint:#2%
+{%
+ \expandafter\XINT_max_fork\romannumeral`&&@#2\xint:#1\xint:
+}%
+% \end{macrocode}
+% \lverb|&
+% #3#4 vient du *premier*,
+% #1#2 vient du *second*. I have renamed the sub-macros at 1.2m because the
+% terminology was quite counter-intuitive; there was no bug, but still.|
+% \begin{macrocode}
+\def\XINT_max_fork #1#2\xint:#3#4\xint:
+{%
+ \xint_UDsignsfork
+ #1#3\XINT_max_minusminus % A < 0, B < 0
+ #1-\XINT_max_plusminus % B < 0, A >= 0
+ #3-\XINT_max_minusplus % A < 0, B >= 0
+ --{\xint_UDzerosfork
+ #1#3\XINT_max_zerozero % A = B = 0
+ #10\XINT_max_pluszero % B = 0, A > 0
+ #30\XINT_max_zeroplus % A = 0, B > 0
+ 00\XINT_max_plusplus % A, B > 0
+ \krof }%
+ \krof
+ #3#1#2\xint:#4\xint:
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+ {#3#4}{#1#2}%
+}%
+% \end{macrocode}
+% \lverb|&
+% Refactored at 1.2m for avoiding grabbing arguments. Position of inputs
+% shared with iiCmp and iiGeq code.|
+% \begin{macrocode}
+\def\XINT_max_zerozero #1\fi{\xint_stop_atfirstoftwo }%
+\def\XINT_max_zeroplus #1\fi{\xint_stop_atsecondoftwo }%
+\def\XINT_max_pluszero #1\fi{\xint_stop_atfirstoftwo }%
+\def\XINT_max_minusplus #1\fi{\xint_stop_atsecondoftwo }%
+\def\XINT_max_plusminus #1\fi{\xint_stop_atfirstoftwo }%
+\def\XINT_max_plusplus
+{%
+ \if1\romannumeral0\XINT_geq_plusplus
+}%
+% \end{macrocode}
+% \lverb+Premier des testés |A|=-A, second est |B|=-B. On veut le max(A,B),
+% c'est donc A si |A|<|B| (ou |A|=|B|, mais peu importe alors). Donc on peut
+% faire cela avec \unless. Simple.+
+% \begin{macrocode}
+\def\XINT_max_minusminus --%
+{%
+ \unless\if1\romannumeral0\XINT_geq_plusplus{}{}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMin}}
+% \lverb|\xintnum added New with 1.09a. I add \xintiiMin in 1.1 and mark as
+% deprecated \xintMin, renamed \xintiMin. \xintMin NOW REMOVED (1.2, as
+% \xintMax, \xintMaxof), only provided by \xintfracnameimp.
+%
+% At 1.2m, a long-standing bug was fixed: \xintiiMin had the overhead of
+% applying \xintNum to its arguments due to use of a sub-macro of \xintGeq
+% code to which this overhead was added at some point.
+%
+% And on this occasion I reduced even more number of times input is grabbed.
+% |
+% \begin{macrocode}
+\def\xintiiMin {\romannumeral0\xintiimin }%
+\def\xintiimin #1%
+{%
+ \expandafter\xint_iimin \romannumeral`&&@#1\xint:
+}%
+\def\xint_iimin #1\xint:#2%
+{%
+ \expandafter\XINT_min_fork\romannumeral`&&@#2\xint:#1\xint:
+}%
+\def\XINT_min_fork #1#2\xint:#3#4\xint:
+{%
+ \xint_UDsignsfork
+ #1#3\XINT_min_minusminus % A < 0, B < 0
+ #1-\XINT_min_plusminus % B < 0, A >= 0
+ #3-\XINT_min_minusplus % A < 0, B >= 0
+ --{\xint_UDzerosfork
+ #1#3\XINT_min_zerozero % A = B = 0
+ #10\XINT_min_pluszero % B = 0, A > 0
+ #30\XINT_min_zeroplus % A = 0, B > 0
+ 00\XINT_min_plusplus % A, B > 0
+ \krof }%
+ \krof
+ #3#1#2\xint:#4\xint:
+ \expandafter\xint_stop_atsecondoftwo
+ \else
+ \expandafter\xint_stop_atfirstoftwo
+ \fi
+ {#3#4}{#1#2}%
+}%
+\def\XINT_min_zerozero #1\fi{\xint_stop_atfirstoftwo }%
+\def\XINT_min_zeroplus #1\fi{\xint_stop_atfirstoftwo }%
+\def\XINT_min_pluszero #1\fi{\xint_stop_atsecondoftwo }%
+\def\XINT_min_minusplus #1\fi{\xint_stop_atfirstoftwo }%
+\def\XINT_min_plusminus #1\fi{\xint_stop_atsecondoftwo }%
+\def\XINT_min_plusplus
+{%
+ \if1\romannumeral0\XINT_geq_plusplus
+}%
+\def\XINT_min_minusminus --%
+{%
+ \unless\if1\romannumeral0\XINT_geq_plusplus{}{}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMaxof}}
+% \lverb|New with 1.09a. 1.2 has NO MORE \xintMaxof, requires \xintfracname.
+% 1.2a adds \xintiiMaxof, as \xintiiMaxof:csv is not public.
+%
+% NOT compatible with empty list.
+%
+% 1.2l made \xintiiMaxof robust against non terminated items.|
+% \begin{macrocode}
+\def\xintiiMaxof {\romannumeral0\xintiimaxof }%
+\def\xintiimaxof #1{\expandafter\XINT_iimaxof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_iimaxof_a #1{\expandafter\XINT_iimaxof_b\romannumeral`&&@#1!}%
+\def\XINT_iimaxof_b #1!#2%
+ {\expandafter\XINT_iimaxof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_iimaxof_c #1%
+ {\xint_gob_til_xint: #1\XINT_iimaxof_e\xint:\XINT_iimaxof_d #1}%
+\def\XINT_iimaxof_d #1!%
+ {\expandafter\XINT_iimaxof_b\romannumeral0\xintiimax {#1}}%
+\def\XINT_iimaxof_e #1!#2!{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintiiMinof}}
+% \lverb|1.09a. 1.2a adds \xintiiMinof which was lacking.|
+% \begin{macrocode}
+\def\xintiiMinof {\romannumeral0\xintiiminof }%
+\def\xintiiminof #1{\expandafter\XINT_iiminof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_iiminof_a #1{\expandafter\XINT_iiminof_b\romannumeral`&&@#1!}%
+\def\XINT_iiminof_b #1!#2%
+ {\expandafter\XINT_iiminof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_iiminof_c #1%
+ {\xint_gob_til_xint: #1\XINT_iiminof_e\xint:\XINT_iiminof_d #1}%
+\def\XINT_iiminof_d #1!%
+ {\expandafter\XINT_iiminof_b\romannumeral0\xintiimin {#1}}%
+\def\XINT_iiminof_e #1!#2!{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintiiSum}}
+% \lverb|\xintiiSum {{a}{b}...{z}}
+%|
+% \begin{macrocode}
+\def\xintiiSum {\romannumeral0\xintiisum }%
+\def\xintiisum #1{\expandafter\XINT_sumexpr\romannumeral`&&@#1\xint:}%
+\def\XINT_sumexpr {\XINT_sum_loop_a 0\Z }%
+\def\XINT_sum_loop_a #1\Z #2%
+ {\expandafter\XINT_sum_loop_b \romannumeral`&&@#2\xint:#1\xint:\Z}%
+\def\XINT_sum_loop_b #1%
+ {\xint_gob_til_xint: #1\XINT_sum_finished\xint:\XINT_sum_loop_c #1}%
+\def\XINT_sum_loop_c
+ {\expandafter\XINT_sum_loop_a\romannumeral0\XINT_add_fork }%
+\def\XINT_sum_finished\xint:\XINT_sum_loop_c\xint:\xint:#1\xint:\Z{ #1}%
+% \end{macrocode}
+% \subsection{\csh{xintiiPrd}}
+% \lverb|\xintiiPrd {{a}...{z}}
+%|
+% \begin{macrocode}
+\def\xintiiPrd {\romannumeral0\xintiiprd }%
+\def\xintiiprd #1{\expandafter\XINT_prdexpr\romannumeral`&&@#1\xint:}%
+\def\XINT_prdexpr {\XINT_prod_loop_a 1\Z }%
+\def\XINT_prod_loop_a #1\Z #2%
+ {\expandafter\XINT_prod_loop_b\romannumeral`&&@#2\xint:#1\xint:\Z}%
+\def\XINT_prod_loop_b #1%
+ {\xint_gob_til_xint: #1\XINT_prod_finished\xint:\XINT_prod_loop_c #1}%
+\def\XINT_prod_loop_c
+ {\expandafter\XINT_prod_loop_a\romannumeral0\XINT_mul_fork }%
+\def\XINT_prod_finished\xint:\XINT_prod_loop_c\xint:\xint:#1\xint:\Z { #1}%
+% \end{macrocode}
+% \subsection{\csh{xintiiSquareRoot}}
+% \lverb|First done with 1.08.
+%
+% 1.1 added \xintiiSquareRoot.
+%
+% 1.1a added \xintiiSqrtR.
+%
+% 1.2f (2016/03/01-02-03) has rewritten the implementation, the underlying
+% mathematics remaining about the same. The routine is much faster for inputs
+% having up to 16 digits (because it does it all with \numexpr directly now),
+% and also much faster for very long inputs (because it now fetches only the
+% needed new digits after the first 16 (or 17) ones, via the geometric
+% sequence 16, then 32, then 64, etc...; earlier version did the computations
+% with all remaining digits after a suitable starting point with correct 4 or
+% 5 leading digits). Note however that the fetching of tokens is via
+% intrinsically O(N^2) macros, hence inevitably inputs with thousands of
+% digits start being treated less well.
+%
+% Actually there is some room for improvements, one could prepare better
+% input X for the upcoming treatment of fetching its digits by 16, then 32,
+% then 64, etc...
+%
+% Incidently, as \xintiiSqrt uses subtraction and subtraction was broken from
+% 1.2 to 1.2c, then for another reason from 1.2c to 1.2f, it could
+% get wrong in certain (relatively rare) cases. There was also a bug that
+% made it unneedlessly slow for odd number of digits on input.
+%
+% 1.2f also modifies \xintFloatSqrt in xintfrac.sty which now has more
+% code in common with here and benefits from the same speed improvements.
+%
+% 1.2k belatedly corrects the output to {1}{1} and not 11 when input is zero.
+% As braces are used in all other cases they should have been used here too.
+%
+% Also, 1.2k adds an \xintiSqrtR macro, for coherence as \xintiSqrt is
+% defined (and mentioned in user manual.)
+%
+% |
+%
+% \begin{macrocode}
+\def\xintiiSquareRoot {\romannumeral0\xintiisquareroot }%
+\def\xintiisquareroot #1{\expandafter\XINT_sqrt_checkin\romannumeral`&&@#1\xint:}%
+\def\XINT_sqrt_checkin #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_sqrt_iszero
+ 0#1\XINT_sqrt_isneg
+ 0-\XINT_sqrt
+ \krof #1%
+}%
+\def\XINT_sqrt_iszero #1\xint:{{1}{1}}%
+\def\XINT_sqrt_isneg #1\xint:{\XINT_signalcondition{InvalidOperation}{square
+ root of negative: #1}{}{{0}{0}}}%
+\def\XINT_sqrt #1\xint:
+{%
+ \expandafter\XINT_sqrt_start\romannumeral0\xintlength {#1}.#1.%
+}%
+\def\XINT_sqrt_start #1.%
+{%
+ \ifnum #1<\xint_c_x\xint_dothis\XINT_sqrt_small_a\fi
+ \xint_orthat\XINT_sqrt_big_a #1.%
+}%
+\def\XINT_sqrt_small_a #1.{\XINT_sqrt_a #1.\XINT_sqrt_small_d }%
+\def\XINT_sqrt_big_a #1.{\XINT_sqrt_a #1.\XINT_sqrt_big_d }%
+\def\XINT_sqrt_a #1.%
+{%
+ \ifodd #1
+ \expandafter\XINT_sqrt_bO
+ \else
+ \expandafter\XINT_sqrt_bE
+ \fi
+ #1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_bE #1.#2#3#4%
+{%
+ \XINT_sqrt_c {#3#4}#2{#1}#3#4%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_bO #1.#2#3%
+{%
+ \XINT_sqrt_c #3#2{#1}#3%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_c #1#2%
+{%
+ \expandafter #2%
+ \the\numexpr \ifnum #1>\xint_c_ii
+ \ifnum #1>\xint_c_vi
+ \ifnum #1>12 \ifnum #1>20 \ifnum #1>30
+ \ifnum #1>42 \ifnum #1>56 \ifnum #1>72
+ \ifnum #1>90
+ 10\else 9\fi \else 8\fi \else 7\fi \else 6\fi \else 5\fi
+ \else 4\fi \else 3\fi \else 2\fi \else 1\fi .%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_d #1.#2%
+{%
+ \expandafter\XINT_sqrt_small_e
+ \the\numexpr #1\ifcase \numexpr #2/\xint_c_ii-\xint_c_i\relax
+ \or 0\or 00\or 000\or 0000\fi .%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_e #1.#2.%
+{%
+ \expandafter\XINT_sqrt_small_ea\the\numexpr #1*#1-#2.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_ea #1%
+{%
+ \if0#1\xint_dothis\XINT_sqrt_small_ez\fi
+ \if-#1\xint_dothis\XINT_sqrt_small_eb\fi
+ \xint_orthat\XINT_sqrt_small_f #1%
+}%
+\def\XINT_sqrt_small_ez 0.#1.{\expandafter{\the\numexpr#1+\xint_c_i
+ \expandafter}\expandafter{\the\numexpr #1*\xint_c_ii+\xint_c_i}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_eb -#1.#2.%
+{%
+ \expandafter\XINT_sqrt_small_ec \the\numexpr
+ (#1-\xint_c_i+#2)/(\xint_c_ii*#2).#1.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_ec #1.#2.#3.%
+{%
+ \expandafter\XINT_sqrt_small_f \the\numexpr
+ -#2+\xint_c_ii*#3*#1+#1*#1\expandafter.\the\numexpr #3+#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_f #1.#2.%
+{%
+ \expandafter\XINT_sqrt_small_g
+ \the\numexpr (#1+#2)/(\xint_c_ii*#2)-\xint_c_i.#1.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_g #1#2.%
+{%
+ \if 0#1%
+ \expandafter\XINT_sqrt_small_end
+ \else
+ \expandafter\XINT_sqrt_small_h
+ \fi
+ #1#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_small_h #1.#2.#3.%
+{%
+ \expandafter\XINT_sqrt_small_f
+ \the\numexpr #2-\xint_c_ii*#1*#3+#1*#1\expandafter.%
+ \the\numexpr #3-#1.%
+}%
+\def\XINT_sqrt_small_end #1.#2.#3.{{#3}{#2}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_d #1.#2%
+{%
+ \ifodd #2 \xint_dothis{\expandafter\XINT_sqrt_big_eO}\fi
+ \xint_orthat{\expandafter\XINT_sqrt_big_eE}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \the\numexpr (#2-\xint_c_i)/\xint_c_ii.#1;%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_eE #1;#2#3#4#5#6#7#8#9%
+{%
+ \XINT_sqrt_big_eE_a #1;{#2#3#4#5#6#7#8#9}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_eE_a #1.#2;#3%
+{%
+ \expandafter\XINT_sqrt_bigormed_f
+ \romannumeral0\XINT_sqrt_small_e #2000.#3.#1;%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_eO #1;#2#3#4#5#6#7#8#9%
+{%
+ \XINT_sqrt_big_eO_a #1;{#2#3#4#5#6#7#8#9}%
+}%
+\def\XINT_sqrt_big_eO_a #1.#2;#3#4%
+{%
+ \expandafter\XINT_sqrt_bigormed_f
+ \romannumeral0\XINT_sqrt_small_e #20000.#3#4.#1;%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_bigormed_f #1#2#3;%
+{%
+ \ifnum#3<\xint_c_ix
+ \xint_dothis {\csname XINT_sqrt_med_f\romannumeral#3\endcsname}%
+ \fi
+ \xint_orthat\XINT_sqrt_big_f #1.#2.#3;%
+}%
+\def\XINT_sqrt_med_fv {\XINT_sqrt_med_fa .}%
+\def\XINT_sqrt_med_fvi {\XINT_sqrt_med_fa 0.}%
+\def\XINT_sqrt_med_fvii {\XINT_sqrt_med_fa 00.}%
+\def\XINT_sqrt_med_fviii{\XINT_sqrt_med_fa 000.}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_med_fa #1.#2.#3.#4;%
+{%
+ \expandafter\XINT_sqrt_med_fb
+ \the\numexpr (#30#1-5#1)/(\xint_c_ii*#2).#1.#2.#3.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_med_fb #1.#2.#3.#4.#5.%
+{%
+ \expandafter\XINT_sqrt_small_ea
+ \the\numexpr (#40#2-\xint_c_ii*#3*#1)*10#2+(#1*#1-#5)\expandafter.%
+ \the\numexpr #30#2-#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_f #1;#2#3#4#5#6#7#8#9%
+{%
+ \XINT_sqrt_big_fa #1;{#2#3#4#5#6#7#8#9}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_fa #1.#2.#3;#4%
+{%
+ \expandafter\XINT_sqrt_big_ga
+ \the\numexpr #3-\xint_c_viii\expandafter.%
+ \romannumeral0\XINT_sqrt_med_fa 000.#1.#2.;#4.%
+}%
+% \end{macrocode}
+% \lverb|&
+%
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_ga #1.#2#3%
+{%
+ \ifnum #1>\xint_c_viii
+ \expandafter\XINT_sqrt_big_gb\else
+ \expandafter\XINT_sqrt_big_ka
+ \fi #1.#3.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gb #1.#2.#3.%
+{%
+ \expandafter\XINT_sqrt_big_gc
+ \the\numexpr (\xint_c_ii*#2-\xint_c_i)*\xint_c_x^viii/(\xint_c_iv*#3).%
+ #3.#2.#1;%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gc #1.#2.#3.%
+{%
+ \expandafter\XINT_sqrt_big_gd
+ \romannumeral0\xintiiadd
+ {\xintiiSub {#300000000}{\xintDouble{\xintiiMul{#2}{#1}}}00000000}%
+ {\xintiiSqr {#1}}.%
+ \romannumeral0\xintiisub{#200000000}{#1}.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gd #1.#2.%
+{%
+ \expandafter\XINT_sqrt_big_ge #2.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_ge #1;#2#3#4#5#6#7#8#9%
+ {\XINT_sqrt_big_gf #1.#2#3#4#5#6#7#8#9;}%
+\def\XINT_sqrt_big_gf #1;#2#3#4#5#6#7#8#9%
+ {\XINT_sqrt_big_gg #1#2#3#4#5#6#7#8#9.}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gg #1.#2.#3.#4.%
+{%
+ \expandafter\XINT_sqrt_big_gloop
+ \expandafter\xint_c_xvi\expandafter.%
+ \the\numexpr #3-\xint_c_viii\expandafter.%
+ \romannumeral0\xintiisub {#2}{\xintiNum{#4}}.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gloop #1.#2.%
+{%
+ \unless\ifnum #1<#2 \xint_dothis\XINT_sqrt_big_ka \fi
+ \xint_orthat{\XINT_sqrt_big_gi #1.}#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gi #1.%
+{%
+ \expandafter\XINT_sqrt_big_gj\romannumeral\xintreplicate{#1}0.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gj #1.#2.#3.#4.#5.%
+{%
+ \expandafter\XINT_sqrt_big_gk
+ \romannumeral0\xintiidivision {#4#1}%
+ {\XINT_dbl #5\xint_bye2345678\xint_bye*\xint_c_ii\relax}.%
+ #1.#5.#2.#3.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gk #1#2.#3.#4.%
+{%
+ \expandafter\XINT_sqrt_big_gl
+ \romannumeral0\xintiiadd {#2#3}{\xintiiSqr{#1}}.%
+ \romannumeral0\xintiisub {#4#3}{#1}.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gl #1.#2.%
+{%
+ \expandafter\XINT_sqrt_big_gm #2.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gm #1.#2.#3.#4.#5.%
+{%
+ \expandafter\XINT_sqrt_big_gn
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \romannumeral0\XINT_split_fromleft\xint_c_ii*#3.#5\xint_bye2345678\xint_bye..%
+ #1.#2.#3.#4.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_gn #1.#2.#3.#4.#5.#6.%
+{%
+ \expandafter\XINT_sqrt_big_gloop
+ \the\numexpr \xint_c_ii*#5\expandafter.%
+ \the\numexpr #6-#5\expandafter.%
+ \romannumeral0\xintiisub{#4}{\xintiNum{#1}}.#3.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_ka #1.#2.#3.#4.%
+{%
+ \expandafter\XINT_sqrt_big_kb
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \romannumeral0\XINT_dsx_addzeros {#1}#3;.%
+ \romannumeral0\xintiisub
+ {\XINT_dsx_addzerosnofuss {\xint_c_ii*#1}#2;}%
+ {\xintiNum{#4}}.%
+}%
+\def\XINT_sqrt_big_kb #1.#2.%
+{%
+ \expandafter\XINT_sqrt_big_kc #2.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_kc #1%
+{%
+ \if0#1\xint_dothis\XINT_sqrt_big_kz\fi
+ \xint_orthat\XINT_sqrt_big_kloop #1%
+}%
+\def\XINT_sqrt_big_kz 0.#1.%
+{%
+ \expandafter\XINT_sqrt_big_kend
+ \romannumeral0%
+ \xintinc{\XINT_dbl#1\xint_bye2345678\xint_bye*\xint_c_ii\relax}.#1.%
+}%
+\def\XINT_sqrt_big_kend #1.#2.%
+{%
+ \expandafter{\romannumeral0\xintinc{#2}}{#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_kloop #1.#2.%
+{%
+ \expandafter\XINT_sqrt_big_ke
+ \romannumeral0\xintiidivision{#1}%
+ {\romannumeral0\XINT_dbl #2\xint_bye2345678\xint_bye*\xint_c_ii\relax}{#2}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_ke #1%
+{%
+ \if0\XINT_Sgn #1\xint:
+ \expandafter \XINT_sqrt_big_end
+ \else \expandafter \XINT_sqrt_big_kf
+ \fi {#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_kf #1#2#3%
+{%
+ \expandafter\XINT_sqrt_big_kg
+ \romannumeral0\xintiisub {#3}{#1}.%
+ \romannumeral0\xintiiadd {#2}{\xintiiSqr {#1}}.%
+}%
+\def\XINT_sqrt_big_kg #1.#2.%
+{%
+ \expandafter\XINT_sqrt_big_kloop #2.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_sqrt_big_end #1#2#3{{#3}{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiSqrt}, \csh{xintiiSqrtR}}
+% \begin{macrocode}
+\def\xintiiSqrt {\romannumeral0\xintiisqrt }%
+\def\xintiisqrt {\expandafter\XINT_sqrt_post\romannumeral0\xintiisquareroot }%
+\def\XINT_sqrt_post #1#2{\XINT_dec #1\XINT_dec_bye234567890\xint_bye}%
+\def\xintiiSqrtR {\romannumeral0\xintiisqrtr }%
+\def\xintiisqrtr {\expandafter\XINT_sqrtr_post\romannumeral0\xintiisquareroot }%
+% \end{macrocode}
+% \lverb|N = (#1)^2 - #2 avec #1 le plus petit possible et #2>0 (hence #2<2*#1).
+% (#1-.5)^2=#1^2-#1+.25=N+#2-#1+.25. Si 0<#2<#1, <= N-0.75<N, donc rounded->#1
+% si #2>=#1, (#1-.5)^2>=N+.25>N, donc rounded->#1-1.|
+% \begin{macrocode}
+\def\XINT_sqrtr_post #1#2%
+ {\xintiiifLt {#2}{#1}{ #1}{\XINT_dec #1\XINT_dec_bye234567890\xint_bye}}%
+% \end{macrocode}
+% \subsection{\csh{xintiiBinomial}}
+% \lverb|2015/11/28-29 for 1.2f.
+%
+% 2016/11/19 for 1.2h: I truly can't understand why I hard-coded last
+% year an error-message for arguments outside of the range for binomial
+% formula. Naturally there should be no error but a rather a 0 return
+% value for binomial(x,y), if y<0 or x<y !
+%
+% I really lack some kind of infinity or NaN value.
+%
+% 1.2o deprecates \xintiBinomial. (which xintfrac.sty redefined to use
+% \xintNum)
+% |
+% \begin{macrocode}
+\def\xintiiBinomial {\romannumeral0\xintiibinomial }%
+\def\xintiibinomial #1#2%
+{%
+ \expandafter\XINT_binom_pre\the\numexpr #1\expandafter.\the\numexpr #2.%
+}%
+\def\XINT_binom_pre #1.#2.%
+{%
+ \expandafter\XINT_binom_fork \the\numexpr#1-#2.#2.#1.%
+}%
+% \end{macrocode}
+% \lverb|k.x-k.x. I hesitated to restrict maximal allowed value of x to 10000.
+% Finally I don't. But due to using small multiplication and small division, x
+% must have at most eight digits. If x>=2^31 an arithmetic overflow error will
+% have happened already.|
+% \begin{macrocode}
+\def\XINT_binom_fork #1#2.#3#4.#5#6.%
+{%
+ \if-#5\xint_dothis{\XINT_signalcondition{InvalidOperation}{Binomial with
+ negative first arg: #5#6}{}{0}}\fi
+ \if-#1\xint_dothis{ 0}\fi
+ \if-#3\xint_dothis{ 0}\fi
+ \if0#1\xint_dothis{ 1}\fi
+ \if0#3\xint_dothis{ 1}\fi
+ \ifnum #5#6>\xint_c_x^viii_mone\xint_dothis
+ {\XINT_signalcondition{InvalidOperation}{Binomial with too
+ large argument: 99999999 < #5#6}{}{0}}\fi
+ \ifnum #1#2>#3#4 \xint_dothis{\XINT_binom_a #1#2.#3#4.}\fi
+ \xint_orthat{\XINT_binom_a #3#4.#1#2.}%
+}%
+% \end{macrocode}
+% \lverb|x-k.k. avec 0<k<x, k<=x-k. Les divisions produiront en extra après le
+% quotient un terminateur 1!\Z!0!. On va procéder par petite multiplication
+% suivie par petite division. Donc ici on met le 1!\Z!0! pour amorcer.
+%
+% Le \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax est le terminateur pour le
+% \XINT_unsep_cuzsmall final.|
+% \begin{macrocode}
+\def\XINT_binom_a #1.#2.%
+{%
+ \expandafter\XINT_binom_b\the\numexpr \xint_c_i+#1.1.#2.100000001!1!;!0!%
+}%
+% \end{macrocode}
+% \lverb|y=x-k+1.j=1.k. On va évaluer par y/1*(y+1)/2*(y+2)/3 etc... On essaie
+% de regrouper de manière à utiliser au mieux \numexpr. On peut aller jusqu'à
+% x=10000 car 9999*10000<10^8. 463*464*465=99896880, 98*99*100*101=97990200.
+% On va vérifier à chaque étape si on dépasse un seuil. Le style de
+% l'implémentation diffère de celui que j'avais utilisé pour \xintiiFac. On
+% pourrait tout-à-fait avoir une verybigloop, mais bon. Je rajoute aussi un
+% verysmall. Le traitement est un peu différent pour elle afin d'aller jusqu'à
+% x=29 (et pas seulement 26 si je suivais le modèle des autres, mais je veux
+% pouvoir faire binomial(29,1), binomial(29,2), ... en vsmall).|
+% \begin{macrocode}
+\def\XINT_binom_b #1.%
+{%
+ \ifnum #1>9999 \xint_dothis\XINT_binom_vbigloop \fi
+ \ifnum #1>463 \xint_dothis\XINT_binom_bigloop \fi
+ \ifnum #1>98 \xint_dothis\XINT_binom_medloop \fi
+ \ifnum #1>29 \xint_dothis\XINT_binom_smallloop \fi
+ \xint_orthat\XINT_binom_vsmallloop #1.%
+}%
+% \end{macrocode}
+% \lverb|y.j.k. Au départ on avait x-k+1.1.k. Ensuite on a des blocs 1<8d>!
+% donnant le résultat intermédiaire, dans l'ordre, et à la fin on a 1!1;!0!.
+% Dans smallloop on peut prendre 4 par 4.|
+% \begin{macrocode}
+\def\XINT_binom_smallloop #1.#2.#3.%
+{%
+ \ifcase\numexpr #3-#2\relax
+ \expandafter\XINT_binom_end_
+ \or \expandafter\XINT_binom_end_i
+ \or \expandafter\XINT_binom_end_ii
+ \or \expandafter\XINT_binom_end_iii
+ \else\expandafter\XINT_binom_smallloop_a
+ \fi #1.#2.#3.%
+}%
+% \end{macrocode}
+% \lverb|Ça m'ennuie un peu de reprendre les #1, #2, #3 ici. On a besoin de
+% \numexpr pour \XINT_binom_div, mais de \romannumeral0 pour le unsep après
+% \XINT_binom_mul.|
+% \begin{macrocode}
+\def\XINT_binom_smallloop_a #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_smallloop_b
+ \the\numexpr #1+\xint_c_iv\expandafter.%
+ \the\numexpr #2+\xint_c_iv\expandafter.%
+ \the\numexpr #3\expandafter.%
+ \the\numexpr\expandafter\XINT_binom_div
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)*(#2+\xint_c_iii)\expandafter
+ !\romannumeral0\expandafter\XINT_binom_mul
+ \the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_binom_smallloop_b #1.%
+{%
+ \ifnum #1>98 \expandafter\XINT_binom_medloop \else
+ \expandafter\XINT_binom_smallloop \fi #1.%
+}%
+% \end{macrocode}
+% \lverb|Ici on prend trois par trois.|
+% \begin{macrocode}
+\def\XINT_binom_medloop #1.#2.#3.%
+{%
+ \ifcase\numexpr #3-#2\relax
+ \expandafter\XINT_binom_end_
+ \or \expandafter\XINT_binom_end_i
+ \or \expandafter\XINT_binom_end_ii
+ \else\expandafter\XINT_binom_medloop_a
+ \fi #1.#2.#3.%
+}%
+\def\XINT_binom_medloop_a #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_medloop_b
+ \the\numexpr #1+\xint_c_iii\expandafter.%
+ \the\numexpr #2+\xint_c_iii\expandafter.%
+ \the\numexpr #3\expandafter.%
+ \the\numexpr\expandafter\XINT_binom_div
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)\expandafter
+ !\romannumeral0\expandafter\XINT_binom_mul
+ \the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_binom_medloop_b #1.%
+{%
+ \ifnum #1>463 \expandafter\XINT_binom_bigloop \else
+ \expandafter\XINT_binom_medloop \fi #1.%
+}%
+% \end{macrocode}
+% \lverb|Ici on prend deux par deux.|
+% \begin{macrocode}
+\def\XINT_binom_bigloop #1.#2.#3.%
+{%
+ \ifcase\numexpr #3-#2\relax
+ \expandafter\XINT_binom_end_
+ \or \expandafter\XINT_binom_end_i
+ \else\expandafter\XINT_binom_bigloop_a
+ \fi #1.#2.#3.%
+}%
+\def\XINT_binom_bigloop_a #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_bigloop_b
+ \the\numexpr #1+\xint_c_ii\expandafter.%
+ \the\numexpr #2+\xint_c_ii\expandafter.%
+ \the\numexpr #3\expandafter.%
+ \the\numexpr\expandafter\XINT_binom_div
+ \the\numexpr #2*(#2+\xint_c_i)\expandafter
+ !\romannumeral0\expandafter\XINT_binom_mul
+ \the\numexpr #1*(#1+\xint_c_i)!%
+}%
+\def\XINT_binom_bigloop_b #1.%
+{%
+ \ifnum #1>9999 \expandafter\XINT_binom_vbigloop \else
+ \expandafter\XINT_binom_bigloop \fi #1.%
+}%
+% \end{macrocode}
+% \lverb|Et finalement un par un.|
+% \begin{macrocode}
+\def\XINT_binom_vbigloop #1.#2.#3.%
+{%
+ \ifnum #3=#2
+ \expandafter\XINT_binom_end_
+ \else\expandafter\XINT_binom_vbigloop_a
+ \fi #1.#2.#3.%
+}%
+\def\XINT_binom_vbigloop_a #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_vbigloop
+ \the\numexpr #1+\xint_c_i\expandafter.%
+ \the\numexpr #2+\xint_c_i\expandafter.%
+ \the\numexpr #3\expandafter.%
+ \the\numexpr\expandafter\XINT_binom_div\the\numexpr #2\expandafter
+ !\romannumeral0\XINT_binom_mul #1!%
+}%
+% \end{macrocode}
+% \lverb|y.j.k. La partie very small. y est au plus 26 (non 29 mais retesté
+% dans \XINT_binom_vsmallloop_a), et tous les binomial(29,n) sont <10^8. On
+% peut donc faire y(y+1)(y+2)(y+3) et aussi il y a le fait que etex fait a*b/c
+% en double precision. Pour ne pas bifurquer à la fin sur smallloop, si n=27,
+% 27, ou 29 on procède un peu différemment des autres boucles. Si je testais
+% aussi #1 après #3-#2 pour les autres il faudrait des terminaisons
+% différentes.|
+% \begin{macrocode}
+\def\XINT_binom_vsmallloop #1.#2.#3.%
+{%
+ \ifcase\numexpr #3-#2\relax
+ \expandafter\XINT_binom_vsmallend_
+ \or \expandafter\XINT_binom_vsmallend_i
+ \or \expandafter\XINT_binom_vsmallend_ii
+ \or \expandafter\XINT_binom_vsmallend_iii
+ \else\expandafter\XINT_binom_vsmallloop_a
+ \fi #1.#2.#3.%
+}%
+\def\XINT_binom_vsmallloop_a #1.%
+{%
+ \ifnum #1>26 \expandafter\XINT_binom_smallloop_a \else
+ \expandafter\XINT_binom_vsmallloop_b \fi #1.%
+}%
+\def\XINT_binom_vsmallloop_b #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_vsmallloop
+ \the\numexpr #1+\xint_c_iv\expandafter.%
+ \the\numexpr #2+\xint_c_iv\expandafter.%
+ \the\numexpr #3\expandafter.%
+ \the\numexpr \expandafter\XINT_binom_vsmallmuldiv
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)*(#2+\xint_c_iii)\expandafter
+ !\the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_binom_mul #1!#21!;!0!%
+{%
+ \expandafter\XINT_rev_nounsep\expandafter{\expandafter}%
+ \the\numexpr\expandafter\XINT_smallmul
+ \the\numexpr\xint_c_x^viii+#1\expandafter
+ !\romannumeral0\XINT_rev_nounsep {}1;!#2%
+ \R!\R!\R!\R!\R!\R!\R!\R!\W
+ \R!\R!\R!\R!\R!\R!\R!\R!\W
+ 1;!%
+}%
+\def\XINT_binom_div #1!1;!%
+{%
+ \expandafter\XINT_smalldivx_a
+ \the\numexpr #1/\xint_c_ii\expandafter\xint:
+ \the\numexpr \xint_c_x^viii+#1!%
+}%
+% \end{macrocode}
+% \lverb|Vaguement envisagé d'éviter le 10^8+ mais bon.|
+% \begin{macrocode}
+\def\XINT_binom_vsmallmuldiv #1!#2!1#3!{\xint_c_x^viii+#2*#3/#1!}%
+% \end{macrocode}
+% \lverb|On a des terminaisons communes aux trois situations small, med, big,
+% et on est sûr de pouvoir faire les multiplications dans \numexpr, car on
+% vient ici *après* avoir comparé à 9999 ou 463 ou 98.|
+% \begin{macrocode}
+\def\XINT_binom_end_iii #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_finish
+ \the\numexpr\expandafter\XINT_binom_div
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)*(#2+\xint_c_iii)\expandafter
+ !\romannumeral0\expandafter\XINT_binom_mul
+ \the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_binom_end_ii #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_finish
+ \the\numexpr\expandafter\XINT_binom_div
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)\expandafter
+ !\romannumeral0\expandafter\XINT_binom_mul
+ \the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_binom_end_i #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_finish
+ \the\numexpr\expandafter\XINT_binom_div
+ \the\numexpr #2*(#2+\xint_c_i)\expandafter
+ !\romannumeral0\expandafter\XINT_binom_mul
+ \the\numexpr #1*(#1+\xint_c_i)!%
+}%
+\def\XINT_binom_end_ #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_finish
+ \the\numexpr\expandafter\XINT_binom_div\the\numexpr #2\expandafter
+ !\romannumeral0\XINT_binom_mul #1!%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_binom_finish #1;!0!%
+ {\XINT_unsep_cuzsmall #1\xint_bye!2!3!4!5!6!7!8!9!\xint_bye\xint_c_i\relax}%
+% \end{macrocode}
+% \lverb|Duplication de code seulement pour la boucle avec très
+% petits coeffs, mais en plus on fait au maximum des possibilités. (on
+% pourrait tester plus le résultat déjà obtenu).|
+% \begin{macrocode}
+\def\XINT_binom_vsmallend_iii #1.%
+{%
+ \ifnum #1>26 \expandafter\XINT_binom_end_iii \else
+ \expandafter\XINT_binom_vsmallend_iiib \fi #1.%
+}%
+\def\XINT_binom_vsmallend_iiib #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_vsmallfinish
+ \the\numexpr \expandafter\XINT_binom_vsmallmuldiv
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)*(#2+\xint_c_iii)\expandafter
+ !\the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_binom_vsmallend_ii #1.%
+{%
+ \ifnum #1>27 \expandafter\XINT_binom_end_ii \else
+ \expandafter\XINT_binom_vsmallend_iib \fi #1.%
+}%
+\def\XINT_binom_vsmallend_iib #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_vsmallfinish
+ \the\numexpr \expandafter\XINT_binom_vsmallmuldiv
+ \the\numexpr #2*(#2+\xint_c_i)*(#2+\xint_c_ii)\expandafter
+ !\the\numexpr #1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_binom_vsmallend_i #1.%
+{%
+ \ifnum #1>28 \expandafter\XINT_binom_end_i \else
+ \expandafter\XINT_binom_vsmallend_ib \fi #1.%
+}%
+\def\XINT_binom_vsmallend_ib #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_vsmallfinish
+ \the\numexpr \expandafter\XINT_binom_vsmallmuldiv
+ \the\numexpr #2*(#2+\xint_c_i)\expandafter
+ !\the\numexpr #1*(#1+\xint_c_i)!%
+}%
+\def\XINT_binom_vsmallend_ #1.%
+{%
+ \ifnum #1>29 \expandafter\XINT_binom_end_ \else
+ \expandafter\XINT_binom_vsmallend_b \fi #1.%
+}%
+\def\XINT_binom_vsmallend_b #1.#2.#3.%
+{%
+ \expandafter\XINT_binom_vsmallfinish
+ \the\numexpr\XINT_binom_vsmallmuldiv #2!#1!%
+}%
+\def\XINT_binom_vsmallfinish#1{%
+\def\XINT_binom_vsmallfinish1##1!1!;!0!{\expandafter#1\the\numexpr##1\relax}%
+}\XINT_binom_vsmallfinish{ }%
+% \end{macrocode}
+% \subsection{\csh{xintiiPFactorial}}
+% \lverb?2015/11/29 for 1.2f. Partial factorial pfac(a,b)=(a+1)...b, only for
+% non-negative integers with a<=b<10^8.
+%
+% 1.2h (2016/11/20) removes the non-negativity condition. It was a bit
+% unfortunate that the code raised \xintError:OutOfRangePFac if 0<=a<=b<10^8
+% was violated. The rule now applied is to interpret pfac(a,b) as the product
+% for a<j<=b (not as a ratio of Gamma function), hence if a>=b, return 1
+% because of an empty product. If a<b: if a<0, return 0 for b>=0 and
+% (-1)^(b-a) times |b|...(|a|-1) for b<0. But only for the range 0<=
+% a <= b < 10^8 is the macro result to be considered as stable.?
+% \begin{macrocode}
+\def\xintiiPFactorial {\romannumeral0\xintiipfactorial }%
+\def\xintiipfactorial #1#2%
+{%
+ \expandafter\XINT_pfac_fork\the\numexpr#1\expandafter.\the\numexpr #2.%
+}%
+\def\xintPFactorial{\romannumeral0\xintpfactorial}%
+\let\xintpfactorial\xintiipfactorial
+% \end{macrocode}
+% \lverb|Code is a simplified version of the one for \xintiiBinomial, with no
+% attempt at implementing a "very small" branch.|
+% \begin{macrocode}
+\def\XINT_pfac_fork #1#2.#3#4.%
+{%
+ \unless\ifnum #1#2<#3#4 \xint_dothis\XINT_pfac_one\fi
+ \if-#3\xint_dothis\XINT_pfac_neg\fi
+ \if-#1\xint_dothis\XINT_pfac_zero\fi
+ \ifnum #3#4>\xint_c_x^viii_mone\xint_dothis\XINT_pfac_outofrange\fi
+ \xint_orthat \XINT_pfac_a #1#2.#3#4.%
+}%
+\def\XINT_pfac_outofrange #1.#2.%
+ {\XINT_signalcondition{InvalidOperation}{PFactorial with
+ too big second arg: 99999999 < #2}{}{0}}%
+\def\XINT_pfac_one #1.#2.{ 1}%
+\def\XINT_pfac_zero #1.#2.{ 0}%
+\def\XINT_pfac_neg -#1.-#2.%
+{%
+ \ifnum #1>\xint_c_x^viii\xint_dothis\XINT_pfac_outofrange\fi
+ \xint_orthat
+ {\ifodd\numexpr#2-#1\relax\xint_afterfi{\expandafter-\romannumeral`&&@}\fi
+ \expandafter\XINT_pfac_a }%
+ \the\numexpr #2-\xint_c_i\expandafter.\the\numexpr#1-\xint_c_i.%
+}%
+\def\XINT_pfac_a #1.#2.%
+{%
+ \expandafter\XINT_pfac_b\the\numexpr \xint_c_i+#1.#2.100000001!1;!%
+ 1\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W
+}%
+\def\XINT_pfac_b #1.%
+{%
+ \ifnum #1>9999 \xint_dothis\XINT_pfac_vbigloop \fi
+ \ifnum #1>463 \xint_dothis\XINT_pfac_bigloop \fi
+ \ifnum #1>98 \xint_dothis\XINT_pfac_medloop \fi
+ \xint_orthat\XINT_pfac_smallloop #1.%
+}%
+\def\XINT_pfac_smallloop #1.#2.%
+{%
+ \ifcase\numexpr #2-#1\relax
+ \expandafter\XINT_pfac_end_
+ \or \expandafter\XINT_pfac_end_i
+ \or \expandafter\XINT_pfac_end_ii
+ \or \expandafter\XINT_pfac_end_iii
+ \else\expandafter\XINT_pfac_smallloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_pfac_smallloop_a #1.#2.%
+{%
+ \expandafter\XINT_pfac_smallloop_b
+ \the\numexpr #1+\xint_c_iv\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \the\numexpr\expandafter\XINT_smallmul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_pfac_smallloop_b #1.%
+{%
+ \ifnum #1>98 \expandafter\XINT_pfac_medloop \else
+ \expandafter\XINT_pfac_smallloop \fi #1.%
+}%
+\def\XINT_pfac_medloop #1.#2.%
+{%
+ \ifcase\numexpr #2-#1\relax
+ \expandafter\XINT_pfac_end_
+ \or \expandafter\XINT_pfac_end_i
+ \or \expandafter\XINT_pfac_end_ii
+ \else\expandafter\XINT_pfac_medloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_pfac_medloop_a #1.#2.%
+{%
+ \expandafter\XINT_pfac_medloop_b
+ \the\numexpr #1+\xint_c_iii\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \the\numexpr\expandafter\XINT_smallmul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_pfac_medloop_b #1.%
+{%
+ \ifnum #1>463 \expandafter\XINT_pfac_bigloop \else
+ \expandafter\XINT_pfac_medloop \fi #1.%
+}%
+\def\XINT_pfac_bigloop #1.#2.%
+{%
+ \ifcase\numexpr #2-#1\relax
+ \expandafter\XINT_pfac_end_
+ \or \expandafter\XINT_pfac_end_i
+ \else\expandafter\XINT_pfac_bigloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_pfac_bigloop_a #1.#2.%
+{%
+ \expandafter\XINT_pfac_bigloop_b
+ \the\numexpr #1+\xint_c_ii\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \the\numexpr\expandafter
+ \XINT_smallmul\the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)!%
+}%
+\def\XINT_pfac_bigloop_b #1.%
+{%
+ \ifnum #1>9999 \expandafter\XINT_pfac_vbigloop \else
+ \expandafter\XINT_pfac_bigloop \fi #1.%
+}%
+\def\XINT_pfac_vbigloop #1.#2.%
+{%
+ \ifnum #2=#1
+ \expandafter\XINT_pfac_end_
+ \else\expandafter\XINT_pfac_vbigloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_pfac_vbigloop_a #1.#2.%
+{%
+ \expandafter\XINT_pfac_vbigloop
+ \the\numexpr #1+\xint_c_i\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \the\numexpr\expandafter\XINT_smallmul\the\numexpr\xint_c_x^viii+#1!%
+}%
+\def\XINT_pfac_end_iii #1.#2.%
+{%
+ \expandafter\XINT_mul_out
+ \the\numexpr\expandafter\XINT_smallmul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_pfac_end_ii #1.#2.%
+{%
+ \expandafter\XINT_mul_out
+ \the\numexpr\expandafter\XINT_smallmul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_pfac_end_i #1.#2.%
+{%
+ \expandafter\XINT_mul_out
+ \the\numexpr\expandafter\XINT_smallmul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)!%
+}%
+\def\XINT_pfac_end_ #1.#2.%
+{%
+ \expandafter\XINT_mul_out
+ \the\numexpr\expandafter\XINT_smallmul\the\numexpr \xint_c_x^viii+#1!%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintBool}, \csh{xintToggle}}
+% \lverb|1.09c|
+% \begin{macrocode}
+\def\xintBool #1{\romannumeral`&&@%
+ \csname if#1\endcsname\expandafter1\else\expandafter0\fi }%
+\def\xintToggle #1{\romannumeral`&&@\iftoggle{#1}{1}{0}}%
+% \end{macrocode}
+% \subsection{\cshnolabel{xintGCD}, \cshnolabel{xintiiGCD}}
+% Copied over from \csbxint{iiGCD} of \xintgcdnameimp at |1.3d| to
+% support |gcd()| function in \csbxint{iiexpr}.
+% \begin{macrocode}
+\def\xintiiGCD {\romannumeral0\xintiigcd }%
+\def\xintiigcd #1{\expandafter\XINT_iigcd\romannumeral0\xintiiabs#1\xint:}%
+\def\XINT_iigcd #1#2\xint:#3%
+{%
+ \expandafter\XINT_gcd_fork\expandafter#1%
+ \romannumeral0\xintiiabs#3\xint:#1#2\xint:
+}%
+\def\XINT_gcd_fork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_gcd_Aiszero
+ #2\XINT_gcd_Biszero
+ 0\XINT_gcd_loop
+ \krof
+ #2%
+}%
+\def\XINT_gcd_AisZero #1\xint:#2\xint:{ #1}%
+\def\XINT_gcd_BisZero #1\xint:#2\xint:{ #2}%
+\def\XINT_gcd_loop #1\xint:#2\xint:
+{%
+ \expandafter\expandafter\expandafter\XINT_gcd_CheckRem
+ \expandafter\xint_secondoftwo
+ \romannumeral0\XINT_div_prepare {#1}{#2}\xint:#1\xint:
+}%
+\def\XINT_gcd_CheckRem #1%
+{%
+ \xint_gob_til_zero #1\XINT_gcd_end0\XINT_gcd_loop #1%
+}%
+\def\XINT_gcd_end0\XINT_gcd_loop #1\xint:#2\xint:{ #2}%
+% \end{macrocode}
+% \subsection{\cshnolabel{xintLCM}, \cshnolabel{xintiiLCM}}
+% \begin{macrocode}
+\def\xintiiLCM {\romannumeral0\xintiilcm}%
+\def\xintiilcm #1{\expandafter\XINT_iilcm\romannumeral0\xintiiabs#1\xint:}%
+\def\XINT_iilcm #1#2\xint:#3%
+{%
+ \expandafter\XINT_lcm_fork\expandafter#1%
+ \romannumeral0\xintiiabs#3\xint:#1#2\xint:
+}%
+\def\XINT_lcm_fork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_lcm_iszero
+ #2\XINT_lcm_iszero
+ 0\XINT_lcm_notzero
+ \krof
+ #2%
+}%
+\def\XINT_lcm_iszero #1\xint:#2\xint:{ 0}%
+\def\XINT_lcm_notzero #1\xint:#2\xint:
+{%
+ \expandafter\XINT_lcm_end\romannumeral0%
+ \expandafter\expandafter\expandafter\XINT_gcd_CheckRem
+ \expandafter\xint_secondoftwo
+ \romannumeral0\XINT_div_prepare {#1}{#2}\xint:#1\xint:
+ \xint:#1\xint:#2\xint:
+}%
+\def\XINT_lcm_end #1\xint:#2\xint:#3\xint:{\xintiimul {#2}{\xintiiQuo{#3}{#1}}}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{xintRandomDigits}}
+% \lverb|1.3b. See user manual. Whether this will be part of xintkernel,
+% xintcore, or xint is yet to be decided.|
+% \begin{macrocode}
+\def\xintRandomDigits{\romannumeral0\xintrandomdigits}%
+\def\xintrandomdigits#1%
+{%
+ \csname xint_gob_andstop_\expandafter\XINT_randomdigits\the\numexpr#1\xint:
+}%
+\def\XINT_randomdigits#1\xint:
+{%
+ \expandafter\XINT_randomdigits_a
+ \the\numexpr(#1+\xint_c_iii)/\xint_c_viii\xint:#1\xint:
+}%
+\def\XINT_randomdigits_a#1\xint:#2\xint:
+{%
+ \romannumeral\numexpr\xint_c_viii*#1-#2\csname XINT_%
+ \romannumeral\XINT_replicate #1\endcsname \csname
+ XINT_rdg\endcsname
+}%
+\def\XINT_rdg
+{%
+ \expandafter\XINT_rdg_aux\the\numexpr%
+ \xint_c_nine_x^viii%
+ -\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^vii*\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^xiv*\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^xxi*\xint_texuniformdeviate\xint_c_ii^vii%
+ +\xint_texuniformdeviate\xint_c_x^viii%
+ \relax%
+}%
+\def\XINT_rdg_aux#1{XINT_rdg\endcsname}%
+\let\XINT_XINT_rdg\endcsname
+% \end{macrocode}
+% \subsection{(WIP) \csh{XINT_eightrandomdigits}}
+% \lverb|1.3b.|
+% \begin{macrocode}
+\def\XINT_eightrandomdigits
+{%
+ \expandafter\xint_gobble_i\the\numexpr%
+ \xint_c_nine_x^viii%
+ -\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^vii*\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^xiv*\xint_texuniformdeviate\xint_c_ii^vii%
+ -\xint_c_ii^xxi*\xint_texuniformdeviate\xint_c_ii^vii%
+ +\xint_texuniformdeviate\xint_c_x^viii%
+ \relax%
+}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{xintXRandomDigits}}
+% \lverb|1.3b.|
+% \begin{macrocode}
+\def\xintXRandomDigits#1%
+{%
+ \csname xint_gobble_\expandafter\XINT_xrandomdigits\the\numexpr#1\xint:
+}%
+\def\XINT_xrandomdigits#1\xint:
+{%
+ \expandafter\XINT_xrandomdigits_a
+ \the\numexpr(#1+\xint_c_iii)/\xint_c_viii\xint:#1\xint:
+}%
+\def\XINT_xrandomdigits_a#1\xint:#2\xint:
+{%
+ \romannumeral\numexpr\xint_c_viii*#1-#2\expandafter\endcsname
+ \romannumeral`&&@\romannumeral
+ \XINT_replicate #1\endcsname\XINT_eightrandomdigits
+}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{xintiiRandRangeAtoB}}
+% \lverb|1.3b. Support for randrange() function.
+%
+% Wee do it f-expandably for matters of \xintNewExpr etc... The \xintexpr will
+% add \xintNum wrapper to possible fractional input. But \xintiiexpr will call
+% as is.
+%
+% TODO: ? implement third argument (STEP)
+% TODO: \xintNum wrapper (which truncates) not so good in floatexpr. Use round?
+%
+% It is an error if b<=a, as in Python.|
+% \begin{macrocode}
+\def\xintiiRandRangeAtoB{\romannumeral`&&@\xintiirandrangeAtoB}%
+\def\xintiirandrangeAtoB#1%
+{%
+ \expandafter\XINT_randrangeAtoB_a\romannumeral`&&@#1\xint:
+}%
+\def\XINT_randrangeAtoB_a#1\xint:#2%
+{%
+ \xintiiadd{\expandafter\XINT_randrange
+ \romannumeral0\xintiisub{#2}{#1}\xint:}%
+ {#1}%
+}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{xintiiRandRange}}
+% \lverb|1.3b. Support for randrange().|
+% \begin{macrocode}
+\def\xintiiRandRange{\romannumeral`&&@\xintiirandrange}%
+\def\xintiirandrange#1%
+{%
+ \expandafter\XINT_randrange\romannumeral`&&@#1\xint:
+}%
+\def\XINT_randrange #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_randrange_err:empty
+ 0#1\XINT_randrange_err:empty
+ 0-\XINT_randrange_a
+ \krof #1%
+}%
+\def\XINT_randrange_err:empty#1\xint:
+{%
+ \XINT_expandableerror{Empty range for randrange.} 0%
+}%
+\def\XINT_randrange_a #1\xint:
+{%
+ \expandafter\XINT_randrange_b\romannumeral0\xintlength{#1}.#1\xint:
+}%
+\def\XINT_randrange_b #1.%
+{%
+ \ifnum#1<\xint_c_x\xint_dothis{\the\numexpr\XINT_uniformdeviate{}}\fi
+ \xint_orthat{\XINT_randrange_c #1.}%
+}%
+\def\XINT_randrange_c #1.#2#3#4#5#6#7#8#9%
+{%
+ \expandafter\XINT_randrange_d
+ \the\numexpr\expandafter\XINT_uniformdeviate\expandafter
+ {\expandafter}\the\numexpr\xint_c_i+#2#3#4#5#6#7#8#9\xint:\xint:
+ #2#3#4#5#6#7#8#9\xint:#1\xint:
+}%
+% \end{macrocode}
+% \lverb|This raises following annex question: immediately after setting the
+% seed is it possible for \xintUniformDeviate{N} where N>0 has exactly eight
+% digits to return either 0 or N-1 ? It could be that this is never the case,
+% then there is a bias in randrange(). Of course there are anyhow only 2^28
+% seeds so randrange(10^X) is by necessity biased when executed immediately
+% after setting the seed, if X is at least 9.|
+% \begin{macrocode}
+\def\XINT_randrange_d #1\xint:#2\xint:
+{%
+ \ifnum#1=\xint_c_\xint_dothis\XINT_randrange_Z\fi
+ \ifnum#1=#2 \xint_dothis\XINT_randrange_A\fi
+ \xint_orthat\XINT_randrange_e #1\xint:
+}%
+\def\XINT_randrange_e #1\xint:#2\xint:#3\xint:
+{%
+ \the\numexpr#1\expandafter\relax
+ \romannumeral0\xintrandomdigits{#2-\xint_c_viii}%
+}%
+% \end{macrocode}
+% \lverb|This is quite unlikely to get executed but if it does it must
+% pay attention to leading zeros, hence the \xintinum.
+% We don't have to be
+% overly obstinate about removing overheads...|
+% \begin{macrocode}
+\def\XINT_randrange_Z 0\xint:#1\xint:#2\xint:
+{%
+ \xintinum{\xintRandomDigits{#1-\xint_c_viii}}%
+}%
+% \end{macrocode}
+% \lverb|Here too, overhead is not such a problem. The idea is that we got by
+% extraordinary same first 8 digits as upper range bound so we pick at random
+% the remaining needed digits in one go and compare with the upper bound. If too
+% big, we start again with another random 8 leading digits in given range. No
+% need to aim at any kind of efficiency for the check and loop back.|
+% \begin{macrocode}
+\def\XINT_randrange_A #1\xint:#2\xint:#3\xint:
+{%
+ \expandafter\XINT_randrange_B
+ \romannumeral0\xintrandomdigits{#2-\xint_c_viii}\xint:
+ #3\xint:#2.#1\xint:
+}%
+\def\XINT_randrange_B #1\xint:#2\xint:#3.#4\xint:
+{%
+ \xintiiifLt{#1}{#2}{\XINT_randrange_E}{\XINT_randrange_again}%
+ #4#1\xint:#3.#4#2\xint:
+}%
+\def\XINT_randrange_E #1\xint:#2\xint:{ #1}%
+\def\XINT_randrange_again #1\xint:{\XINT_randrange_c}%
+% \end{macrocode}
+% \subsection{Adjustments for engines without uniformdeviate primitive}
+% \lverb|1.3b.|
+% \begin{macrocode}
+\ifdefined\xint_texuniformdeviate
+\else
+ \def\xintrandomdigits#1%
+ {%
+ \XINT_expandableerror
+ {No uniformdeviate at engine level, returning 0.} 0%
+ }%
+ \let\xintXRandomDigits\xintRandomDigits
+ \def\XINT_randrange#1\xint:
+ {%
+ \XINT_expandableerror
+ {No uniformdeviate at engine level, returning 0.} 0%
+ }%
+\fi
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xint}
+% \cleardoublepage\let\xintnameUp\undefined
+%\gardesactifs
+%\let</xint>\relax
+%\let<*xintbinhex>\gardesinactifs
+%</xint>^^A-------------------------------------------------------
+%<*xintbinhex>^^A-------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; -*-
+% \clearpage\csname xintbinhexnameUp\endcsname
+% \section{Package \xintbinhexnameimp implementation}
+% \RaisedLabel{sec:binheximp}
+%
+% \localtableofcontents
+%
+% The commenting is currently (\xintdocdate) very sparse.
+%
+% The macros from |1.08| (|2013/06/07|) remained unchanged
+% until their complete rewrite at |1.2m| (|2017/07/31|).
+%
+% At |1.2n| dependencies on \xintcorenameimp were removed, so now the package
+% loads only \xintkernelnameimp (this could have been done earlier).
+%
+% Also at |1.2n|, macros evolved again, the main improvements being in the
+% increased allowable sizes of the input for |\xintDecToHex|, |\xintDecToBin|,
+% |\xintBinToHex|. Use of |\csname| governed expansion at some places rather
+% than |\numexpr| with some clean-up after it.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintbinhex.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintkernel.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintbinhex}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintbinhex.sty
+ \ifx\w\relax % but xintkernel.sty not yet loaded.
+ \def\z{\endgroup\input xintkernel.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintkernel.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintkernel}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintbinhex already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintbinhex}%
+ [2019/04/05 1.3e Expandable binary and hexadecimal conversions (JFB)]%
+% \end{macrocode}
+% \subsection{Constants, etc...}
+% \lverb|1.2n switches to \csname-governed expansion at various places.|
+% \begin{macrocode}
+\newcount\xint_c_ii^xv \xint_c_ii^xv 32768
+\newcount\xint_c_ii^xvi \xint_c_ii^xvi 65536
+\def\XINT_tmpa #1{\ifx\relax#1\else
+ \expandafter\edef\csname XINT_csdth_#1\endcsname
+ {\endcsname\ifcase #1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\fi}%
+ \expandafter\XINT_tmpa\fi }%
+\XINT_tmpa {0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}\relax
+\def\XINT_tmpa #1{\ifx\relax#1\else
+ \expandafter\edef\csname XINT_csdtb_#1\endcsname
+ {\endcsname\ifcase #1
+ 0000\or 0001\or 0010\or 0011\or 0100\or 0101\or 0110\or 0111\or
+ 1000\or 1001\or 1010\or 1011\or 1100\or 1101\or 1110\or 1111\fi}%
+ \expandafter\XINT_tmpa\fi }%
+\XINT_tmpa {0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}\relax
+\let\XINT_tmpa\relax
+\expandafter\def\csname XINT_csbth_0000\endcsname {\endcsname0}%
+\expandafter\def\csname XINT_csbth_0001\endcsname {\endcsname1}%
+\expandafter\def\csname XINT_csbth_0010\endcsname {\endcsname2}%
+\expandafter\def\csname XINT_csbth_0011\endcsname {\endcsname3}%
+\expandafter\def\csname XINT_csbth_0100\endcsname {\endcsname4}%
+\expandafter\def\csname XINT_csbth_0101\endcsname {\endcsname5}%
+\expandafter\def\csname XINT_csbth_0110\endcsname {\endcsname6}%
+\expandafter\def\csname XINT_csbth_0111\endcsname {\endcsname7}%
+\expandafter\def\csname XINT_csbth_1000\endcsname {\endcsname8}%
+\expandafter\def\csname XINT_csbth_1001\endcsname {\endcsname9}%
+\expandafter\def\csname XINT_csbth_1010\endcsname {\endcsname A}%
+\expandafter\def\csname XINT_csbth_1011\endcsname {\endcsname B}%
+\expandafter\def\csname XINT_csbth_1100\endcsname {\endcsname C}%
+\expandafter\def\csname XINT_csbth_1101\endcsname {\endcsname D}%
+\expandafter\def\csname XINT_csbth_1110\endcsname {\endcsname E}%
+\expandafter\def\csname XINT_csbth_1111\endcsname {\endcsname F}%
+\let\XINT_csbth_none \endcsname
+\expandafter\def\csname XINT_cshtb_0\endcsname {\endcsname0000}%
+\expandafter\def\csname XINT_cshtb_1\endcsname {\endcsname0001}%
+\expandafter\def\csname XINT_cshtb_2\endcsname {\endcsname0010}%
+\expandafter\def\csname XINT_cshtb_3\endcsname {\endcsname0011}%
+\expandafter\def\csname XINT_cshtb_4\endcsname {\endcsname0100}%
+\expandafter\def\csname XINT_cshtb_5\endcsname {\endcsname0101}%
+\expandafter\def\csname XINT_cshtb_6\endcsname {\endcsname0110}%
+\expandafter\def\csname XINT_cshtb_7\endcsname {\endcsname0111}%
+\expandafter\def\csname XINT_cshtb_8\endcsname {\endcsname1000}%
+\expandafter\def\csname XINT_cshtb_9\endcsname {\endcsname1001}%
+\def\XINT_cshtb_A {\endcsname1010}%
+\def\XINT_cshtb_B {\endcsname1011}%
+\def\XINT_cshtb_C {\endcsname1100}%
+\def\XINT_cshtb_D {\endcsname1101}%
+\def\XINT_cshtb_E {\endcsname1110}%
+\def\XINT_cshtb_F {\endcsname1111}%
+\let\XINT_cshtb_none \endcsname
+% \end{macrocode}
+% \subsection{Helper macros}
+% \subsubsection{\csh{XINT_zeroes_foriv}}
+% \lverb|&
+%( \romannumeral0\XINT_zeroes_foriv #1\R{0\R}{00\R}{000\R}$%
+%: \R{0\R}{00\R}{000\R}\R\W
+%)
+% expands to the <empty> or 0 or 00 or 000 needed which when adjoined to #1
+% extend it to length 4N.|
+% \begin{macrocode}
+\def\XINT_zeroes_foriv #1#2#3#4#5#6#7#8%
+{%
+ \xint_gob_til_R #8\XINT_zeroes_foriv_end\R\XINT_zeroes_foriv
+}%
+\def\XINT_zeroes_foriv_end\R\XINT_zeroes_foriv #1#2\W
+ {\XINT_zeroes_foriv_done #1}%
+\def\XINT_zeroes_foriv_done #1\R{ #1}%
+% \end{macrocode}
+% \subsection{\csh{xintDecToHex}}
+% \lverb|Complete rewrite at 1.2m in the 1.2 style. Also, 1.2m is robust
+% against non terminated inputs.
+%
+% Improvements of coding at 1.2n, increased maximal size. Again some coding
+% improvement at 1.2o, about 6$% speed gain.
+%
+% An input without leading zeroes gives an output without leading zeroes.|
+% \begin{macrocode}
+\def\xintDecToHex {\romannumeral0\xintdectohex }%
+\def\xintdectohex #1%
+{%
+ \expandafter\XINT_dth_checkin\romannumeral`&&@#1\xint:
+}%
+\def\XINT_dth_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_dth_neg
+ -{\XINT_dth_main #1}%
+ \krof
+}%
+\def\XINT_dth_neg {\expandafter-\romannumeral0\XINT_dth_main}%
+\def\XINT_dth_main #1\xint:
+{%
+ \expandafter\XINT_dth_finish
+ \romannumeral`&&@\expandafter\XINT_dthb_start
+ \romannumeral0\XINT_zeroes_foriv
+ #1\R{0\R}{00\R}{000\R}\R{0\R}{00\R}{000\R}\R\W
+ #1\xint_bye\XINT_dth_tohex
+}%
+\def\XINT_dthb_start #1#2#3#4#5%
+{%
+ \xint_bye#5\XINT_dthb_small\xint_bye\XINT_dthb_start_a #1#2#3#4#5%
+}%
+\def\XINT_dthb_small\xint_bye\XINT_dthb_start_a #1\xint_bye#2{#2#1!}%
+\def\XINT_dthb_start_a #1#2#3#4#5#6#7#8#9%
+{%
+ \expandafter\XINT_dthb_again\the\numexpr\expandafter\XINT_dthb_update
+ \the\numexpr#1#2#3#4%
+ \xint_bye#9\XINT_dthb_lastpass\xint_bye
+ #5#6#7#8!\XINT_dthb_exclam\relax\XINT_dthb_nextfour #9%
+}%
+% \end{macrocode}
+% \lverb|The 1.2n inserted
+% exclamations marks, which when bumping back from \XINT_dthb_again gave rise
+% to a \numexpr-loop which gathered the ! delimited arguments and inserted
+% \expandafter\XINT_dthb_update\the\numexpr dynamically. The 1.2o trick is to
+% insert it here immediately. Then at \XINT_dthb_again the \numexpr will
+% trigger an already prepared chain.
+%
+% The crux of the thing is handling of #3 at \XINT_dthb_update_a.
+% |
+% \begin{macrocode}
+\def\XINT_dthb_exclam {!\XINT_dthb_exclam\relax
+ \expandafter\XINT_dthb_update\the\numexpr}%
+\def\XINT_dthb_update #1!%
+{%
+ \expandafter\XINT_dthb_update_a
+ \the\numexpr (#1+\xint_c_ii^xv)/\xint_c_ii^xvi-\xint_c_i\xint:
+ #1\xint:%
+}%
+\def\XINT_dthb_update_a #1\xint:#2\xint:#3%
+{%
+ 0000+#1\expandafter#3\the\numexpr#2-#1*\xint_c_ii^xvi
+}%
+% \end{macrocode}
+% \lverb|1.2m and 1.2n had some unduly complicated ending pattern for
+% \XINT_dthb_nextfour as inheritance of a loop needing ! separators which was
+% pruned out at 1.2o (see previous comment).
+% |
+% \begin{macrocode}
+\def\XINT_dthb_nextfour #1#2#3#4#5%
+{%
+ \xint_bye#5\XINT_dthb_lastpass\xint_bye
+ #1#2#3#4!\XINT_dthb_exclam\relax\XINT_dthb_nextfour#5%
+}%
+\def\XINT_dthb_lastpass\xint_bye #1!#2\xint_bye#3{#1!#3!}%
+\def\XINT_dth_tohex
+{%
+ \expandafter\expandafter\expandafter\XINT_dth_tohex_a\csname\XINT_tofourhex
+}%
+\def\XINT_dth_tohex_a\endcsname{!\XINT_dth_tohex!}%
+\def\XINT_dthb_again #1!#2#3%
+{%
+ \ifx#3\relax
+ \expandafter\xint_firstoftwo
+ \else
+ \expandafter\xint_secondoftwo
+ \fi
+ {\expandafter\XINT_dthb_again
+ \the\numexpr
+ \ifnum #1>\xint_c_
+ \xint_afterfi{\expandafter\XINT_dthb_update\the\numexpr#1}%
+ \fi}%
+ {\ifnum #1>\xint_c_ \xint_dothis{#2#1!}\fi\xint_orthat{!#2!}}%
+}%
+\def\XINT_tofourhex #1!%
+{%
+ \expandafter\XINT_tofourhex_a
+ \the\numexpr (#1+\xint_c_ii^vii)/\xint_c_ii^viii-\xint_c_i\xint:
+ #1\xint:
+}%
+\def\XINT_tofourhex_a #1\xint:#2\xint:
+{%
+ \expandafter\XINT_tofourhex_c
+ \the\numexpr (#1+\xint_c_viii)/\xint_c_xvi-\xint_c_i\xint:
+ #1\xint:
+ \the\numexpr #2-\xint_c_ii^viii*#1!%
+}%
+\def\XINT_tofourhex_c #1\xint:#2\xint:
+{%
+ XINT_csdth_#1%
+ \csname XINT_csdth_\the\numexpr #2-\xint_c_xvi*#1\relax
+ \csname \expandafter\XINT_tofourhex_d
+}%
+\def\XINT_tofourhex_d #1!%
+{%
+ \expandafter\XINT_tofourhex_e
+ \the\numexpr (#1+\xint_c_viii)/\xint_c_xvi-\xint_c_i\xint:
+ #1\xint:
+}%
+\def\XINT_tofourhex_e #1\xint:#2\xint:
+{%
+ XINT_csdth_#1%
+ \csname XINT_csdth_\the\numexpr #2-\xint_c_xvi*#1\endcsname
+}%
+% \end{macrocode}
+% \lverb|We only clean-up up to 3 zero hexadecimal digits, as output was
+% produced in chunks of 4 hex digits. If input had no leading zero, output
+% will have none either. If input had many leading zeroes, output will have
+% some number (unspecified, but a recipe can be given...) of leading zeroes...
+%
+% The coding is for varying a bit, I did not check if efficient, it does not
+% matter.|
+% \begin{macrocode}
+\def\XINT_dth_finish !\XINT_dth_tohex!#1#2#3%
+{%
+ \unless\if#10\xint_dothis{ #1#2#3}\fi
+ \unless\if#20\xint_dothis{ #2#3}\fi
+ \unless\if#30\xint_dothis{ #3}\fi
+ \xint_orthat{ }%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintDecToBin}}
+% \lverb|Complete rewrite at 1.2m in the 1.2 style. Also, 1.2m is robust
+% against non terminated inputs.
+%
+% Revisited at 1.2n like in \xintDecToHex: increased maximal size.
+%
+% An input without leading zeroes gives an output without leading zeroes.
+%
+% Most of the code canvas is shared with \xintDecToHex.
+% |
+% \begin{macrocode}
+\def\xintDecToBin {\romannumeral0\xintdectobin }%
+\def\xintdectobin #1%
+{%
+ \expandafter\XINT_dtb_checkin\romannumeral`&&@#1\xint:
+}%
+\def\XINT_dtb_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_dtb_neg
+ -{\XINT_dtb_main #1}%
+ \krof
+}%
+\def\XINT_dtb_neg {\expandafter-\romannumeral0\XINT_dtb_main}%
+\def\XINT_dtb_main #1\xint:
+{%
+ \expandafter\XINT_dtb_finish
+ \romannumeral`&&@\expandafter\XINT_dthb_start
+ \romannumeral0\XINT_zeroes_foriv
+ #1\R{0\R}{00\R}{000\R}\R{0\R}{00\R}{000\R}\R\W
+ #1\xint_bye\XINT_dtb_tobin
+}%
+\def\XINT_dtb_tobin
+{%
+ \expandafter\expandafter\expandafter\XINT_dtb_tobin_a\csname\XINT_tosixteenbits
+}%
+\def\XINT_dtb_tobin_a\endcsname{!\XINT_dtb_tobin!}%
+\def\XINT_tosixteenbits #1!%
+{%
+ \expandafter\XINT_tosixteenbits_a
+ \the\numexpr (#1+\xint_c_ii^vii)/\xint_c_ii^viii-\xint_c_i\xint:
+ #1\xint:
+}%
+\def\XINT_tosixteenbits_a #1\xint:#2\xint:
+{%
+ \expandafter\XINT_tosixteenbits_c
+ \the\numexpr (#1+\xint_c_viii)/\xint_c_xvi-\xint_c_i\xint:
+ #1\xint:
+ \the\numexpr #2-\xint_c_ii^viii*#1!%
+}%
+\def\XINT_tosixteenbits_c #1\xint:#2\xint:
+{%
+ XINT_csdtb_#1%
+ \csname XINT_csdtb_\the\numexpr #2-\xint_c_xvi*#1\relax
+ \csname \expandafter\XINT_tosixteenbits_d
+}%
+\def\XINT_tosixteenbits_d #1!%
+{%
+ \expandafter\XINT_tosixteenbits_e
+ \the\numexpr (#1+\xint_c_viii)/\xint_c_xvi-\xint_c_i\xint:
+ #1\xint:
+}%
+\def\XINT_tosixteenbits_e #1\xint:#2\xint:
+{%
+ XINT_csdtb_#1%
+ \csname XINT_csdtb_\the\numexpr #2-\xint_c_xvi*#1\endcsname
+}%
+\def\XINT_dtb_finish !\XINT_dtb_tobin!#1#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT_dtb_finish_a\the\numexpr #1#2#3#4#5#6#7#8\relax
+}%
+\def\XINT_dtb_finish_a #1{%
+\def\XINT_dtb_finish_a ##1##2##3##4##5##6##7##8##9%
+{%
+ \expandafter#1\the\numexpr ##1##2##3##4##5##6##7##8##9\relax
+}}\XINT_dtb_finish_a { }%
+% \end{macrocode}
+% \subsection{\csh{xintHexToDec}}
+% \lverb|Completely (and belatedly) rewritten at 1.2m in the 1.2 style.
+%
+% 1.2m version robust against non terminated inputs, but there is no primitive
+% from TeX which may generate hexadecimal digits and provoke expansion ahead,
+% afaik, except of course if decimal digits are treated as hexadecimal. This
+% robustness is not on purpose but from need to expand argument and then grab
+% it again. So we do it safely.
+%
+% Increased maximal size at 1.2n.
+%
+% 1.2m version robust against non terminated inputs.
+%
+% An input without leading zeroes gives an output without leading zeroes.
+% |
+% \begin{macrocode}
+\def\xintHexToDec {\romannumeral0\xinthextodec }%
+\def\xinthextodec #1%
+{%
+ \expandafter\XINT_htd_checkin\romannumeral`&&@#1\xint:
+}%
+\def\XINT_htd_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_htd_neg
+ -{\XINT_htd_main #1}%
+ \krof
+}%
+\def\XINT_htd_neg {\expandafter-\romannumeral0\XINT_htd_main}%
+\def\XINT_htd_main #1\xint:
+{%
+ \expandafter\XINT_htd_startb
+ \the\numexpr\expandafter\XINT_htd_starta
+ \romannumeral0\XINT_zeroes_foriv
+ #1\R{0\R}{00\R}{000\R}\R{0\R}{00\R}{000\R}\R\W
+ #1\xint_bye!2!3!4!5!6!7!8!9!\xint_bye\relax
+}%
+\def\XINT_htd_starta #1#2#3#4{"#1#2#3#4+100000!}%
+\def\XINT_htd_startb 1#1%
+{%
+ \if#10\expandafter\XINT_htd_startba\else
+ \expandafter\XINT_htd_startbb
+ \fi 1#1%
+}%
+\def\XINT_htd_startba 10#1!{\XINT_htd_again #1%
+ \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\XINT_htd_nextfour}%
+\def\XINT_htd_startbb 1#1#2!{\XINT_htd_again #1!#2%
+ \xint_bye!2!3!4!5!6!7!8!9!\xint_bye\XINT_htd_nextfour}%
+% \end{macrocode}
+% \lverb|It is a bit annoying to grab all to the end here. I have a version,
+% modeled on the 1.2n variant of \xintDecToHex which solved that problem
+% there, but it did not prove enough if at all faster in my brief testing and
+% it had the defect of a reduced maximal allowed size of the input. |
+% \begin{macrocode}
+\def\XINT_htd_again #1\XINT_htd_nextfour #2%
+{%
+ \xint_bye #2\XINT_htd_finish\xint_bye
+ \expandafter\XINT_htd_A\the\numexpr
+ \XINT_htd_a #1\XINT_htd_nextfour #2%
+}%
+\def\XINT_htd_a #1!#2!#3!#4!#5!#6!#7!#8!#9!%
+{%
+ #1\expandafter\XINT_htd_update
+ \the\numexpr #2\expandafter\XINT_htd_update
+ \the\numexpr #3\expandafter\XINT_htd_update
+ \the\numexpr #4\expandafter\XINT_htd_update
+ \the\numexpr #5\expandafter\XINT_htd_update
+ \the\numexpr #6\expandafter\XINT_htd_update
+ \the\numexpr #7\expandafter\XINT_htd_update
+ \the\numexpr #8\expandafter\XINT_htd_update
+ \the\numexpr #9\expandafter\XINT_htd_update
+ \the\numexpr \XINT_htd_a
+}%
+\def\XINT_htd_nextfour #1#2#3#4%
+{%
+ *\xint_c_ii^xvi+"#1#2#3#4+1000000000\relax\xint_bye!%
+ 2!3!4!5!6!7!8!9!\xint_bye\XINT_htd_nextfour
+}%
+% \end{macrocode}
+% \lverb|If the innocent looking commented out $#6 is left in the pattern as
+% was the case at 1.2m, the maximal size becomes limited at 5538 digits, not
+% 8298! (with parameter stack size = 10000.) |
+% \begin{macrocode}
+\def\XINT_htd_update 1#1#2#3#4#5%#6!%
+{%
+ *\xint_c_ii^xvi+10000#1#2#3#4#5!%#6!%
+}%
+\def\XINT_htd_A 1#1%
+{%
+ \if#10\expandafter\XINT_htd_Aa\else
+ \expandafter\XINT_htd_Ab
+ \fi 1#1%
+}%
+\def\XINT_htd_Aa 10#1#2#3#4{\XINT_htd_again #1#2#3#4!}%
+\def\XINT_htd_Ab 1#1#2#3#4#5{\XINT_htd_again #1!#2#3#4#5!}%
+\def\XINT_htd_finish\xint_bye
+ \expandafter\XINT_htd_A\the\numexpr \XINT_htd_a #1\XINT_htd_nextfour
+{%
+ \expandafter\XINT_htd_finish_cuz\the\numexpr0\XINT_htd_unsep_loop #1%
+}%
+\def\XINT_htd_unsep_loop #1!#2!#3!#4!#5!#6!#7!#8!#9!%
+{%
+ \expandafter\XINT_unsep_clean
+ \the\numexpr 1#1#2\expandafter\XINT_unsep_clean
+ \the\numexpr 1#3#4\expandafter\XINT_unsep_clean
+ \the\numexpr 1#5#6\expandafter\XINT_unsep_clean
+ \the\numexpr 1#7#8\expandafter\XINT_unsep_clean
+ \the\numexpr 1#9\XINT_htd_unsep_loop_a
+}%
+\def\XINT_htd_unsep_loop_a #1!#2!#3!#4!#5!#6!#7!#8!#9!%
+{%
+ #1\expandafter\XINT_unsep_clean
+ \the\numexpr 1#2#3\expandafter\XINT_unsep_clean
+ \the\numexpr 1#4#5\expandafter\XINT_unsep_clean
+ \the\numexpr 1#6#7\expandafter\XINT_unsep_clean
+ \the\numexpr 1#8#9\XINT_htd_unsep_loop
+}%
+\def\XINT_unsep_clean 1{\relax}% also in xintcore
+\def\XINT_htd_finish_cuz #1{%
+\def\XINT_htd_finish_cuz ##1##2##3##4##5%
+ {\expandafter#1\the\numexpr ##1##2##3##4##5\relax}%
+}\XINT_htd_finish_cuz{ }%
+% \end{macrocode}
+% \subsection{\csh{xintBinToDec}}
+% \lverb|Redone entirely for 1.2m. Starts by converting to hexadecimal
+% first.
+%
+% Increased maximal size at 1.2n.
+%
+% An input without leading zeroes gives an output without leading zeroes.
+%
+% Robust against non-terminated input.|
+% \begin{macrocode}
+\def\xintBinToDec {\romannumeral0\xintbintodec }%
+\def\xintbintodec #1%
+{%
+ \expandafter\XINT_btd_checkin\romannumeral`&&@#1\xint:
+}%
+\def\XINT_btd_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_btd_N
+ -{\XINT_btd_main #1}%
+ \krof
+}%
+\def\XINT_btd_N {\expandafter-\romannumeral0\XINT_btd_main }%
+\def\XINT_btd_main #1\xint:
+{%
+ \csname XINT_btd_htd\csname\expandafter\XINT_bth_loop
+ \romannumeral0\XINT_zeroes_foriv
+ #1\R{0\R}{00\R}{000\R}\R{0\R}{00\R}{000\R}\R\W
+ #1\xint_bye2345678\xint_bye none\endcsname\xint:
+}%
+\def\XINT_btd_htd #1\xint:
+{%
+ \expandafter\XINT_htd_startb
+ \the\numexpr\expandafter\XINT_htd_starta
+ \romannumeral0\XINT_zeroes_foriv
+ #1\R{0\R}{00\R}{000\R}\R{0\R}{00\R}{000\R}\R\W
+ #1\xint_bye!2!3!4!5!6!7!8!9!\xint_bye\relax
+}%
+% \end{macrocode}
+% \subsection{\csh{xintBinToHex}}
+% \lverb|Complete rewrite for 1.2m.
+% But input for 1.2m version limited to about 13320 binary digits (expansion
+% depth=10000).
+%
+% Again redone for 1.2n for \csname governed expansion: increased maximal size.
+%
+% Size of output is ceil(size(input)/4), leading zeroes in output (inherited
+% from the input) are not trimmed.
+%
+% An input without leading zeroes gives an output without leading zeroes.
+%
+% Robust against non-terminated input.
+% |
+% \begin{macrocode}
+\def\xintBinToHex {\romannumeral0\xintbintohex }%
+\def\xintbintohex #1%
+{%
+ \expandafter\XINT_bth_checkin\romannumeral`&&@#1\xint:
+}%
+\def\XINT_bth_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_bth_N
+ -{\XINT_bth_main #1}%
+ \krof
+}%
+\def\XINT_bth_N {\expandafter-\romannumeral0\XINT_bth_main }%
+\def\XINT_bth_main #1\xint:
+{%
+ \csname space\csname\expandafter\XINT_bth_loop
+ \romannumeral0\XINT_zeroes_foriv
+ #1\R{0\R}{00\R}{000\R}\R{0\R}{00\R}{000\R}\R\W
+ #1\xint_bye2345678\xint_bye none\endcsname
+}%
+\def\XINT_bth_loop #1#2#3#4#5#6#7#8%
+{%
+ XINT_csbth_#1#2#3#4%
+ \csname XINT_csbth_#5#6#7#8%
+ \csname\XINT_bth_loop
+}%
+% \end{macrocode}
+% \subsection{\csh{xintHexToBin}}
+% \lverb|Completely rewritten for 1.2m.
+%
+% Attention this macro is not robust against arguments expanding after
+% themselves.
+%
+% Only up to three zeros are removed on front of output: if the input had a
+% leading zero, there will be a leading zero (and then possibly 4n of them if
+% inputs had more leading zeroes) on output.
+%
+% Rewritten again at 1.2n for \csname governed expansion.|
+% \begin{macrocode}
+\def\xintHexToBin {\romannumeral0\xinthextobin }%
+\def\xinthextobin #1%
+{%
+ \expandafter\XINT_htb_checkin\romannumeral`&&@#1%
+ \xint_bye 23456789\xint_bye none\endcsname
+}%
+\def\XINT_htb_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_htb_N
+ -{\XINT_htb_main #1}%
+ \krof
+}%
+\def\XINT_htb_N {\expandafter-\romannumeral0\XINT_htb_main }%
+\def\XINT_htb_main {\csname XINT_htb_cuz\csname\XINT_htb_loop}%
+\def\XINT_htb_loop #1#2#3#4#5#6#7#8#9%
+{%
+ XINT_cshtb_#1%
+ \csname XINT_cshtb_#2%
+ \csname XINT_cshtb_#3%
+ \csname XINT_cshtb_#4%
+ \csname XINT_cshtb_#5%
+ \csname XINT_cshtb_#6%
+ \csname XINT_cshtb_#7%
+ \csname XINT_cshtb_#8%
+ \csname XINT_cshtb_#9%
+ \csname \XINT_htb_loop
+}%
+\def\XINT_htb_cuz #1{%
+\def\XINT_htb_cuz ##1##2##3##4%
+ {\expandafter#1\the\numexpr##1##2##3##4\relax}%
+}\XINT_htb_cuz { }%
+% \end{macrocode}
+% \subsection{\csh{xintCHexToBin}}
+% \lverb|The 1.08 macro had same functionality as \xintHexToBin, and slightly
+% different code, the 1.2m version has the same code as \xintHexToBin except
+% that it does not remove leading zeros from output: if the input had N
+% hexadecimal digits, the output will have exactly 4N binary digits.
+%
+% Rewritten again at 1.2n for \csname governed expansion.|
+% \begin{macrocode}
+\def\xintCHexToBin {\romannumeral0\xintchextobin }%
+\def\xintchextobin #1%
+{%
+ \expandafter\XINT_chtb_checkin\romannumeral`&&@#1%
+ \xint_bye 23456789\xint_bye none\endcsname
+}%
+\def\XINT_chtb_checkin #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_chtb_N
+ -{\XINT_chtb_main #1}%
+ \krof
+}%
+\def\XINT_chtb_N {\expandafter-\romannumeral0\XINT_chtb_main }%
+\def\XINT_chtb_main {\csname space\csname\XINT_htb_loop}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintbinhex}
+% \cleardoublepage\let\xintbinhexnameUp\undefined
+%\gardesactifs
+%\let</xintbinhex>\relax
+%\let<*xintgcd>\gardesinactifs
+%</xintbinhex>^^A-------------------------------------------------
+%<*xintgcd>^^A----------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; -*-
+% \clearpage\csname xintgcdnameUp\endcsname
+% \section{Package \xintgcdnameimp implementation}
+% \RaisedLabel{sec:gcdimp}
+%
+% \localtableofcontents
+%
+% The commenting is currently (\xintdocdate) very sparse. Release |1.09h| has
+% modified a bit the |\xintTypesetEuclideAlgorithm| and
+% |\xintTypesetBezoutAlgorithm| layout with respect to line indentation in
+% particular. And they use the \xinttoolsnameimp |\xintloop| rather than the
+% Plain \TeX{} or \LaTeX{}'s |\loop|.
+%
+% Since |1.1| the package only loads \xintcorenameimp, not \xintnameimp. And
+% for the |\xintTypesetEuclideAlgorithm| and |\xintTypesetBezoutAlgorithm|
+% macros to be functional the package \xinttoolsnameimp needs to be loaded
+% explicitely by the user.
+%
+% Breaking change at |1.2p|: |\xintBezout{A}{B}| formerly had output
+% |{A}{B}{U}{V}{D}| with |AU-BV=D|, now it is |{U}{V}{D}| with |AU+BV=D|.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintgcd.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintcore.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintgcd}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintgcd.sty
+ \ifx\w\relax % but xintcore.sty not yet loaded.
+ \def\z{\endgroup\input xintcore.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintcore.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintcore}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintgcd already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintgcd}%
+ [2019/04/05 1.3e Euclide algorithm with xint package (JFB)]%
+% \end{macrocode}
+% \subsection{\csh{xintGCD}, \csh{xintiiGCD}}
+% \lverb|&
+% |
+% \changed{1.3d}{}
+% \lverb|Removed some braces in favor of \xint: delimiter at 1.3d (but
+% \xintiiGCD was already robust against non-delimited \numexpr inputs
+% thanks to using \xintiiabs{...}) and refactored the whole
+% \XINT_iigcd_fork. |
+% \begin{macrocode}
+\def\xintGCD {\romannumeral0\xintgcd }%
+\def\xintgcd #1#2{\xintiigcd {\xintNum{#1}}{\xintNum{#2}}}%
+\def\xintiiGCD {\romannumeral0\xintiigcd }%
+% \end{macrocode}
+% \lverb|This abuses the way \xintiiabs expands.|
+% \begin{macrocode}
+\def\xintiigcd #1{\expandafter\XINT_iigcd\romannumeral0\xintiiabs#1\xint:}%
+\def\XINT_iigcd #1#2\xint:#3%
+{%
+ \expandafter\XINT_gcd_fork\expandafter#1%
+ \romannumeral0\xintiiabs#3\xint:#1#2\xint:
+}%
+% \end{macrocode}
+% \lverb|First argument now in second position (after \xint:) but
+% its first digit is also the #1.|
+% \begin{macrocode}
+\def\XINT_gcd_fork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_gcd_Aiszero
+ #2\XINT_gcd_Biszero
+ 0\XINT_gcd_loop
+ \krof
+ #2%
+}%
+\def\XINT_gcd_AisZero #1\xint:#2\xint:{ #1}%
+\def\XINT_gcd_BisZero #1\xint:#2\xint:{ #2}%
+% \end{macrocode}
+% \lverb|\XINT_div_prepare{#1}{#2} divides #2 by #1, and outputs
+% {Quotient}{Remainder}.|
+% \begin{macrocode}
+\def\XINT_gcd_loop #1\xint:#2\xint:
+{%
+ \expandafter\expandafter\expandafter\XINT_gcd_CheckRem
+ \expandafter\xint_secondoftwo
+ \romannumeral0\XINT_div_prepare {#1}{#2}\xint:#1\xint:
+}%
+\def\XINT_gcd_CheckRem #1%
+{%
+ \xint_gob_til_zero #1\XINT_gcd_end0\XINT_gcd_loop #1%
+}%
+\def\XINT_gcd_end0\XINT_gcd_loop #1\xint:#2\xint:{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintLCM}, \csh{xintiiLCM}}
+% \lverb|See comments of \xintiiGCD for the refactoring done at 1.3d.
+% No time to make \xintiiLCM code more efficient now.
+%
+% Macros \xintLCM, \xintlcm only for backwards compatibility.|
+% \begin{macrocode}
+\def\xintLCM {\romannumeral0\xintlcm}%
+\def\xintlcm #1#2{\xintiilcm{\xintNum{#1}}{\xintNum{#2}}}%
+\def\xintiiLCM {\romannumeral0\xintiilcm}%
+\def\xintiilcm #1{\expandafter\XINT_iilcm\romannumeral0\xintiiabs#1\xint:}%
+\def\XINT_iilcm #1#2\xint:#3%
+{%
+ \expandafter\XINT_lcm_fork\expandafter#1%
+ \romannumeral0\xintiiabs#3\xint:#1#2\xint:
+}%
+\def\XINT_lcm_fork #1#2%
+{%
+ \xint_UDzerofork
+ #1\XINT_lcm_iszero
+ #2\XINT_lcm_iszero
+ 0\XINT_lcm_notzero
+ \krof
+ #2%
+}%
+\def\XINT_lcm_iszero #1\xint:#2\xint:{ 0}%
+\def\XINT_lcm_notzero #1\xint:#2\xint:
+{%
+ \expandafter\XINT_lcm_end\romannumeral0%
+ \expandafter\expandafter\expandafter\XINT_gcd_CheckRem
+ \expandafter\xint_secondoftwo
+ \romannumeral0\XINT_div_prepare {#1}{#2}\xint:#1\xint:
+ \xint:#1\xint:#2\xint:
+}%
+\def\XINT_lcm_end #1\xint:#2\xint:#3\xint:{\xintiimul {#2}{\xintiiQuo{#3}{#1}}}%
+% \end{macrocode}
+% \subsection{\csh{xintBezout}}
+% \lverb|&
+% \xintBezout{#1}{#2}
+% produces {U}{V}{D} with UA+VB=D, D = PGCD(A,B) (non-positive),
+% where #1 and #2 f-expand to big integers A and B.
+%
+% I had not checked this macro for about three years when I realized in
+% January 2017 that \xintBezout{A}{B} was buggy for the cases A = 0 or B = 0.
+% I fixed that blemish in 1.2l but overlooked the other blemish that
+% \xintBezout{A}{B} with A multiple of B produced a coefficient U as -0 in
+% place of 0.
+%
+% Hence I rewrote again for 1.2p. On this occasion I modified the output
+% of the macro to be {U}{V}{D} with AU+BV=D, formerly it was
+% {A}{B}{U}{V}{D} with AU - BV = D. This is quite breaking change!
+%
+% Note in particular change of sign of V.
+%
+% I don't know why I had designed this macro to contain {A}{B} in its output.
+% Perhaps I initially intended to output {A//D}{B//D} (but forgot), as this is
+% actually possible from outcome of the last iteration, with no need of
+% actually dividing. Current code however arranges to skip this last update,
+% as U and V are already furnished by the iteration prior to realizing that
+% the last non-zero remainder was found.
+%
+% Also 1.2l raised InvalidOperation if both A and B vanished, but I removed
+% this behaviour at 1.2p.
+%|
+% \begin{macrocode}
+\def\xintBezout {\romannumeral0\xintbezout }%
+\def\xintbezout #1%
+{%
+ \expandafter\XINT_bezout\expandafter {\romannumeral0\xintnum{#1}}%
+}%
+\def\XINT_bezout #1#2%
+{%
+ \expandafter\XINT_bezout_fork \romannumeral0\xintnum{#2}\Z #1\Z
+}%
+% \end{macrocode}
+% \lverb|#3#4 = A, #1#2=B. Micro improvement for 1.2l.|
+% \begin{macrocode}
+\def\XINT_bezout_fork #1#2\Z #3#4\Z
+{%
+ \xint_UDzerosfork
+ #1#3\XINT_bezout_botharezero
+ #10\XINT_bezout_secondiszero
+ #30\XINT_bezout_firstiszero
+ 00\xint_UDsignsfork
+ \krof
+ #1#3\XINT_bezout_minusminus % A < 0, B < 0
+ #1-\XINT_bezout_minusplus % A > 0, B < 0
+ #3-\XINT_bezout_plusminus % A < 0, B > 0
+ --\XINT_bezout_plusplus % A > 0, B > 0
+ \krof
+ {#2}{#4}#1#3% #1#2=B, #3#4=A
+}%
+\def\XINT_bezout_botharezero #1\krof#2#300{{0}{0}{0}}%
+\def\XINT_bezout_firstiszero #1\krof#2#3#4#5%
+{%
+ \xint_UDsignfork
+ #4{{0}{-1}{#2}}%
+ -{{0}{1}{#4#2}}%
+ \krof
+}%
+\def\XINT_bezout_secondiszero #1\krof#2#3#4#5%
+{%
+ \xint_UDsignfork
+ #5{{-1}{0}{#3}}%
+ -{{1}{0}{#5#3}}%
+ \krof
+}%
+% \end{macrocode}
+% \lverb|#4#2= A < 0, #3#1 = B < 0|
+% \begin{macrocode}
+\def\XINT_bezout_minusminus #1#2#3#4%
+{%
+ \expandafter\XINT_bezout_mm_post
+ \romannumeral0\expandafter\XINT_bezout_preloop_a
+ \romannumeral0\XINT_div_prepare {#1}{#2}{#1}%
+}%
+\def\XINT_bezout_mm_post #1#2%
+{%
+ \expandafter\XINT_bezout_mm_postb\expandafter
+ {\romannumeral0\xintiiopp{#2}}{\romannumeral0\xintiiopp{#1}}%
+}%
+\def\XINT_bezout_mm_postb #1#2{\expandafter{#2}{#1}}%
+% \end{macrocode}
+% \lverb|minusplus #4#2= A > 0, B < 0|
+% \begin{macrocode}
+\def\XINT_bezout_minusplus #1#2#3#4%
+{%
+ \expandafter\XINT_bezout_mp_post
+ \romannumeral0\expandafter\XINT_bezout_preloop_a
+ \romannumeral0\XINT_div_prepare {#1}{#4#2}{#1}%
+}%
+\def\XINT_bezout_mp_post #1#2%
+{%
+ \expandafter\xint_exchangetwo_keepbraces\expandafter
+ {\romannumeral0\xintiiopp {#2}}{#1}%
+}%
+% \end{macrocode}
+% \lverb|plusminus A < 0, B > 0|
+% \begin{macrocode}
+\def\XINT_bezout_plusminus #1#2#3#4%
+{%
+ \expandafter\XINT_bezout_pm_post
+ \romannumeral0\expandafter\XINT_bezout_preloop_a
+ \romannumeral0\XINT_div_prepare {#3#1}{#2}{#3#1}%
+}%
+\def\XINT_bezout_pm_post #1{\expandafter{\romannumeral0\xintiiopp{#1}}}%
+% \end{macrocode}
+% \lverb|plusplus, B = #3#1 > 0, A = #4#2 > 0|
+% \begin{macrocode}
+\def\XINT_bezout_plusplus #1#2#3#4%
+{%
+ \expandafter\XINT_bezout_preloop_a
+ \romannumeral0\XINT_div_prepare {#3#1}{#4#2}{#3#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+%( n = 0: BA1001 (B, A, e=1, vv, uu, v, u)
+%: r(1)=B, r(0)=A, après n étapes {r(n+1)}{r(n)}{vv}{uu}{v}{u}
+%: q(n) quotient de r(n-1) par r(n)
+%: si reste nul, exit et renvoie U = -e*uu, V = e*vv, A*U+B*V=D
+%: sinon mise à jour
+%: vv, v = q * vv + v, vv
+%: uu, u = q * uu + u, uu
+%: e = -e
+%: puis calcul quotient reste et itération
+%)
+%
+% We arrange for \xintiiMul sub-routine to be called only with positive
+% arguments, thus skipping some un-needed sign parsing there. For that though
+% we have to screen out the special cases A divides B, or B divides A. And we
+% first want to exchange A and B if A < B. These special cases are the only
+% one possibly leading to U or V zero (for A and B positive which is the case
+% here.) Thus the general case always leads to non-zero U and V's and assigning
+% a final sign is done simply adding a - to one of them, with no fear of
+% producing -0. |
+% \begin{macrocode}
+\def\XINT_bezout_preloop_a #1#2#3%
+{%
+ \if0#1\xint_dothis\XINT_bezout_preloop_exchange\fi
+ \if0#2\xint_dothis\XINT_bezout_preloop_exit\fi
+ \xint_orthat{\expandafter\XINT_bezout_loop_B}%
+ \romannumeral0\XINT_div_prepare {#2}{#3}{#2}{#1}110%
+}%
+\def\XINT_bezout_preloop_exit
+ \romannumeral0\XINT_div_prepare #1#2#3#4#5#6#7%
+{%
+ {0}{1}{#2}%
+}%
+\def\XINT_bezout_preloop_exchange
+{%
+ \expandafter\xint_exchangetwo_keepbraces
+ \romannumeral0\expandafter\XINT_bezout_preloop_A
+}%
+\def\XINT_bezout_preloop_A #1#2#3#4%
+{%
+ \if0#2\xint_dothis\XINT_bezout_preloop_exit\fi
+ \xint_orthat{\expandafter\XINT_bezout_loop_B}%
+ \romannumeral0\XINT_div_prepare {#2}{#3}{#2}{#1}%
+}%
+\def\XINT_bezout_loop_B #1#2%
+{%
+ \if0#2\expandafter\XINT_bezout_exitA
+ \else\expandafter\XINT_bezout_loop_C
+ \fi {#1}{#2}%
+}%
+% \end{macrocode}
+% \lverb|&
+% We use the fact that the \romannumeral-`0 (or equivalent) done by \xintiiadd
+% will absorb the initial space token left by \XINT_mul_plusplus in its
+% output.
+%
+% We arranged for operands here to be always positive which is needed for
+% \XINT_mul_plusplus entry point (last time I checked...). Admittedly this
+% kind of optimization is not good for maintenance of code, but I can't resist
+% temptation of limiting the shuffling around of tokens...
+% |
+% \begin{macrocode}
+\def\XINT_bezout_loop_C #1#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_bezout_loop_D\expandafter
+ {\romannumeral0\xintiiadd{\XINT_mul_plusplus{}{}#1\xint:#4\xint:}{#6}}%
+ {\romannumeral0\xintiiadd{\XINT_mul_plusplus{}{}#1\xint:#5\xint:}{#7}}%
+ {#2}{#3}{#4}{#5}%
+}%
+\def\XINT_bezout_loop_D #1#2%
+{%
+ \expandafter\XINT_bezout_loop_E\expandafter{#2}{#1}%
+}%
+\def\XINT_bezout_loop_E #1#2#3#4%
+{%
+ \expandafter\XINT_bezout_loop_b
+ \romannumeral0\XINT_div_prepare {#3}{#4}{#3}{#2}{#1}%
+}%
+\def\XINT_bezout_loop_b #1#2%
+{%
+ \if0#2\expandafter\XINT_bezout_exita
+ \else\expandafter\XINT_bezout_loop_c
+ \fi {#1}{#2}%
+}%
+\def\XINT_bezout_loop_c #1#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_bezout_loop_d\expandafter
+ {\romannumeral0\xintiiadd{\XINT_mul_plusplus{}{}#1\xint:#4\xint:}{#6}}%
+ {\romannumeral0\xintiiadd{\XINT_mul_plusplus{}{}#1\xint:#5\xint:}{#7}}%
+ {#2}{#3}{#4}{#5}%
+}%
+\def\XINT_bezout_loop_d #1#2%
+{%
+ \expandafter\XINT_bezout_loop_e\expandafter{#2}{#1}%
+}%
+\def\XINT_bezout_loop_e #1#2#3#4%
+{%
+ \expandafter\XINT_bezout_loop_B
+ \romannumeral0\XINT_div_prepare {#3}{#4}{#3}{#2}{#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% sortir U, V, D mais on a travaillé avec vv, uu, v, u dans cet ordre.$\
+% The code is structured so that #4 and #5 are guaranteed non-zero
+% if we exit here, hence we can not create a -0 in output.|
+% \begin{macrocode}
+\def\XINT_bezout_exita #1#2#3#4#5#6#7{{-#5}{#4}{#3}}%
+\def\XINT_bezout_exitA #1#2#3#4#5#6#7{{#5}{-#4}{#3}}%
+% \end{macrocode}
+% \subsection{\csh{xintEuclideAlgorithm}}
+% \lverb|&
+% Pour Euclide:
+% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}$\
+% u<2n> = u<2n+3>u<2n+2> + u<2n+4> à la n ième étape.
+%
+% Formerly, used \xintiabs, but got deprecated at 1.2o.|
+% \begin{macrocode}
+\def\xintEuclideAlgorithm {\romannumeral0\xinteuclidealgorithm }%
+\def\xinteuclidealgorithm #1%
+{%
+ \expandafter\XINT_euc\expandafter{\romannumeral0\xintiiabs{\xintNum{#1}}}%
+}%
+\def\XINT_euc #1#2%
+{%
+ \expandafter\XINT_euc_fork\romannumeral0\xintiiabs{\xintNum{#2}}\Z #1\Z
+}%
+% \end{macrocode}
+% \lverb|Ici #3#4=A, #1#2=B|
+% \begin{macrocode}
+\def\XINT_euc_fork #1#2\Z #3#4\Z
+{%
+ \xint_UDzerofork
+ #1\XINT_euc_BisZero
+ #3\XINT_euc_AisZero
+ 0\XINT_euc_a
+ \krof
+ {0}{#1#2}{#3#4}{{#3#4}{#1#2}}{}\Z
+}%
+% \end{macrocode}
+% \lverb|&
+% Le {} pour protéger {{A}{B}} si on s'arrête après une étape (B divise
+% A).
+% On va renvoyer:$\
+% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}|
+% \begin{macrocode}
+\def\XINT_euc_AisZero #1#2#3#4#5#6{{1}{0}{#2}{#2}{0}{0}}%
+\def\XINT_euc_BisZero #1#2#3#4#5#6{{1}{0}{#3}{#3}{0}{0}}%
+% \end{macrocode}
+% \lverb|&
+% {n}{rn}{an}{{qn}{rn}}...{{A}{B}}{}\Z$\
+% a(n) = r(n-1). Pour n=0 on a juste {0}{B}{A}{{A}{B}}{}\Z$\
+% \XINT_div_prepare {u}{v} divise v par u|
+% \begin{macrocode}
+\def\XINT_euc_a #1#2#3%
+{%
+ \expandafter\XINT_euc_b\the\numexpr #1+\xint_c_i\expandafter.%
+ \romannumeral0\XINT_div_prepare {#2}{#3}{#2}%
+}%
+% \end{macrocode}
+% \lverb|{n+1}{q(n+1)}{r(n+1)}{rn}{{qn}{rn}}...|
+% \begin{macrocode}
+\def\XINT_euc_b #1.#2#3#4%
+{%
+ \XINT_euc_c #3\Z {#1}{#3}{#4}{{#2}{#3}}%
+}%
+% \end{macrocode}
+% \lverb|r(n+1)\Z {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}{{qn}{rn}}...$\
+% Test si r(n+1) est nul.|
+% \begin{macrocode}
+\def\XINT_euc_c #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_euc_end0\XINT_euc_a
+}%
+% \end{macrocode}
+% \lverb|&
+% {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}...{}\Z
+% Ici r(n+1) = 0. On arrête on se prépare à inverser
+% {n+1}{0}{r(n)}{{q(n+1)}{r(n+1)}}.....{{q1}{r1}}{{A}{B}}{}\Z$\
+% On veut renvoyer: {N=n+1}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}|
+% \begin{macrocode}
+\def\XINT_euc_end0\XINT_euc_a #1#2#3#4\Z%
+{%
+ \expandafter\XINT_euc_end_a
+ \romannumeral0%
+ \XINT_rord_main {}#4{{#1}{#3}}%
+ \xint:
+ \xint_bye\xint_bye\xint_bye\xint_bye
+ \xint_bye\xint_bye\xint_bye\xint_bye
+ \xint:
+}%
+\def\XINT_euc_end_a #1#2#3{{#1}{#3}{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintBezoutAlgorithm}}
+% \lverb|&
+% Pour Bezout: objectif, renvoyer$\
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}$\
+% alpha0=1, beta0=0, alpha(-1)=0, beta(-1)=1|
+% \begin{macrocode}
+\def\xintBezoutAlgorithm {\romannumeral0\xintbezoutalgorithm }%
+\def\xintbezoutalgorithm #1%
+{%
+ \expandafter \XINT_bezalg
+ \expandafter{\romannumeral0\xintiiabs{\xintNum{#1}}}%
+}%
+\def\XINT_bezalg #1#2%
+{%
+ \expandafter\XINT_bezalg_fork\romannumeral0\xintiiabs{\xintNum{#2}}\Z #1\Z
+}%
+% \end{macrocode}
+% \lverb|Ici #3#4=A, #1#2=B|
+% \begin{macrocode}
+\def\XINT_bezalg_fork #1#2\Z #3#4\Z
+{%
+ \xint_UDzerofork
+ #1\XINT_bezalg_BisZero
+ #3\XINT_bezalg_AisZero
+ 0\XINT_bezalg_a
+ \krof
+ 0{#1#2}{#3#4}1001{{#3#4}{#1#2}}{}\Z
+}%
+\def\XINT_bezalg_AisZero #1#2#3\Z{{1}{0}{0}{1}{#2}{#2}{1}{0}{0}{0}{0}{1}}%
+\def\XINT_bezalg_BisZero #1#2#3#4\Z{{1}{0}{0}{1}{#3}{#3}{1}{0}{0}{0}{0}{1}}%
+% \end{macrocode}
+% \lverb|&
+% pour préparer l'étape n+1 il faut
+% {n}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}&
+% {{q(n)}{r(n)}{alpha(n)}{beta(n)}}...
+% division de #3 par #2|
+% \begin{macrocode}
+\def\XINT_bezalg_a #1#2#3%
+{%
+ \expandafter\XINT_bezalg_b\the\numexpr #1+\xint_c_i\expandafter.%
+ \romannumeral0\XINT_div_prepare {#2}{#3}{#2}%
+}%
+% \end{macrocode}
+% \lverb|&
+% {n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}...|
+% \begin{macrocode}
+\def\XINT_bezalg_b #1.#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT_bezalg_c\expandafter
+ {\romannumeral0\xintiiadd {\xintiiMul {#6}{#2}}{#8}}%
+ {\romannumeral0\xintiiadd {\xintiiMul {#5}{#2}}{#7}}%
+ {#1}{#2}{#3}{#4}{#5}{#6}%
+}%
+% \end{macrocode}
+% \lverb|&
+% {beta(n+1)}{alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n}}|
+% \begin{macrocode}
+\def\XINT_bezalg_c #1#2#3#4#5#6%
+{%
+ \expandafter\XINT_bezalg_d\expandafter {#2}{#3}{#4}{#5}{#6}{#1}%
+}%
+% \end{macrocode}
+% \lverb|{alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{beta(n+1)}|
+% \begin{macrocode}
+\def\XINT_bezalg_d #1#2#3#4#5#6#7#8%
+{%
+ \XINT_bezalg_e #4\Z {#2}{#4}{#5}{#1}{#6}{#7}{#8}{{#3}{#4}{#1}{#6}}%
+}%
+% \end{macrocode}
+% \lverb|r(n+1)\Z {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}$\
+% {alpha(n)}{beta(n)}{q,r,alpha,beta(n+1)}$\
+% Test si r(n+1) est nul.|
+% \begin{macrocode}
+\def\XINT_bezalg_e #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_bezalg_end0\XINT_bezalg_a
+}%
+% \end{macrocode}
+% \lverb|&
+% Ici r(n+1) = 0. On arrête on se prépare à inverser.$\
+% {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}{alpha(n)}{beta(n)}$\
+% {q,r,alpha,beta(n+1)}...{{A}{B}}{}\Z$\
+% On veut renvoyer$\
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}|
+% \begin{macrocode}
+\def\XINT_bezalg_end0\XINT_bezalg_a #1#2#3#4#5#6#7#8\Z
+{%
+ \expandafter\XINT_bezalg_end_a
+ \romannumeral0%
+ \XINT_rord_main {}#8{{#1}{#3}}%
+ \xint:
+ \xint_bye\xint_bye\xint_bye\xint_bye
+ \xint_bye\xint_bye\xint_bye\xint_bye
+ \xint:
+}%
+% \end{macrocode}
+% \lverb|&
+% {N}{D}{A}{B}{q1}{r1}{alpha1=q1}{beta1=1}{q2}{r2}{alpha2}{beta2}$\
+% ....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}$\
+% On veut renvoyer$\
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}|
+% \begin{macrocode}
+\def\XINT_bezalg_end_a #1#2#3#4{{#1}{#3}{0}{1}{#2}{#4}{1}{0}}%
+% \end{macrocode}
+% \subsection{\csh{xintGCDof}}
+% \lverb|1.2l adds protection against items being non-terminated \the\numexpr...|
+% \begin{macrocode}
+\def\xintGCDof {\romannumeral0\xintgcdof }%
+\def\xintgcdof #1{\expandafter\XINT_gcdof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_gcdof_a #1{\expandafter\XINT_gcdof_b\romannumeral`&&@#1!}%
+\def\XINT_gcdof_b #1!#2{\expandafter\XINT_gcdof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_gcdof_c #1{\xint_gob_til_xint: #1\XINT_gcdof_e\xint:\XINT_gcdof_d #1}%
+\def\XINT_gcdof_d #1!{\expandafter\XINT_gcdof_b\romannumeral0\xintgcd {#1}}%
+\def\XINT_gcdof_e #1!#2!{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintLCMof}}
+% \lverb|New with 1.09a|
+% \lverb|1.2l adds protection against items being non-terminated \the\numexpr...|
+% \begin{macrocode}
+\def\xintLCMof {\romannumeral0\xintlcmof }%
+\def\xintlcmof #1{\expandafter\XINT_lcmof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_lcmof_a #1{\expandafter\XINT_lcmof_b\romannumeral`&&@#1!}%
+\def\XINT_lcmof_b #1!#2{\expandafter\XINT_lcmof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_lcmof_c #1{\xint_gob_til_xint: #1\XINT_lcmof_e\xint:\XINT_lcmof_d #1}%
+\def\XINT_lcmof_d #1!{\expandafter\XINT_lcmof_b\romannumeral0\xintlcm {#1}}%
+\def\XINT_lcmof_e #1!#2!{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintTypesetEuclideAlgorithm}}
+% \lverb|&
+% TYPESETTING
+%
+% Organisation:
+%
+% {N}{A}{D}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}$\
+% \U1 = N = nombre d'étapes, \U3 = PGCD, \U2 = A, \U4=B
+% q1 = \U5, q2 = \U7 --> qn = \U<2n+3>, rn = \U<2n+4>
+% bn = rn. B = r0. A=r(-1)
+%
+% r(n-2) = q(n)r(n-1)+r(n) (n e étape)
+%
+% \U{2n} = \U{2n+3} \times \U{2n+2} + \U{2n+4}, n e étape.
+% (avec n entre 1 et N)
+%
+% 1.09h uses \xintloop, and \par rather than \endgraf; and \par rather than
+% \hfill\break|
+% \begin{macrocode}
+\def\xintTypesetEuclideAlgorithm {%
+ \unless\ifdefined\xintAssignArray
+ \errmessage
+ {xintgcd: package xinttools is required for \string\xintTypesetEuclideAlgorithm}%
+ \expandafter\xint_gobble_iii
+ \fi
+ \XINT_TypesetEuclideAlgorithm
+}%
+\def\XINT_TypesetEuclideAlgorithm #1#2%
+{% l'algo remplace #1 et #2 par |#1| et |#2|
+ \par
+ \begingroup
+ \xintAssignArray\xintEuclideAlgorithm {#1}{#2}\to\U
+ \edef\A{\U2}\edef\B{\U4}\edef\N{\U1}%
+ \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+ \count 255 1
+ \xintloop
+ \indent\hbox to \wd 0 {\hfil$\U{\numexpr 2*\count255\relax}$}%
+ ${} = \U{\numexpr 2*\count255 + 3\relax}
+ \times \U{\numexpr 2*\count255 + 2\relax}
+ + \U{\numexpr 2*\count255 + 4\relax}$%
+ \ifnum \count255 < \N
+ \par
+ \advance \count255 1
+ \repeat
+ \endgroup
+}%
+% \end{macrocode}
+% \subsection{\csh{xintTypesetBezoutAlgorithm}}
+% \lverb|&
+% Pour Bezout on a:
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}%
+% Donc 4N+8 termes:
+% U1 = N, U2= A, U5=D, U6=B, q1 = U9, qn = U{4n+5}, n au moins 1$\
+% rn = U{4n+6}, n au moins -1$\
+% alpha(n) = U{4n+7}, n au moins -1$\
+% beta(n) = U{4n+8}, n au moins -1
+%
+% 1.09h uses \xintloop, and \par rather than \endgraf; and no more \parindent0pt
+% |
+% \begin{macrocode}
+\def\xintTypesetBezoutAlgorithm {%
+ \unless\ifdefined\xintAssignArray
+ \errmessage
+ {xintgcd: package xinttools is required for \string\xintTypesetBezoutAlgorithm}%
+ \expandafter\xint_gobble_iii
+ \fi
+ \XINT_TypesetBezoutAlgorithm
+}%
+\def\XINT_TypesetBezoutAlgorithm #1#2%
+{%
+ \par
+ \begingroup
+ \xintAssignArray\xintBezoutAlgorithm {#1}{#2}\to\BEZ
+ \edef\A{\BEZ2}\edef\B{\BEZ6}\edef\N{\BEZ1}% A = |#1|, B = |#2|
+ \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+ \count255 1
+ \xintloop
+ \indent\hbox to \wd 0 {\hfil$\BEZ{4*\count255 - 2}$}%
+ ${} = \BEZ{4*\count255 + 5}
+ \times \BEZ{4*\count255 + 2}
+ + \BEZ{4*\count255 + 6}$\hfill\break
+ \hbox to \wd 0 {\hfil$\BEZ{4*\count255 +7}$}%
+ ${} = \BEZ{4*\count255 + 5}
+ \times \BEZ{4*\count255 + 3}
+ + \BEZ{4*\count255 - 1}$\hfill\break
+ \hbox to \wd 0 {\hfil$\BEZ{4*\count255 +8}$}%
+ ${} = \BEZ{4*\count255 + 5}
+ \times \BEZ{4*\count255 + 4}
+ + \BEZ{4*\count255 }$
+ \par
+ \ifnum \count255 < \N
+ \advance \count255 1
+ \repeat
+ \edef\U{\BEZ{4*\N + 4}}%
+ \edef\V{\BEZ{4*\N + 3}}%
+ \edef\D{\BEZ5}%
+ \ifodd\N
+ $\U\times\A - \V\times \B = -\D$%
+ \else
+ $\U\times\A - \V\times\B = \D$%
+ \fi
+ \par
+ \endgroup
+}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintgcd}
+% \cleardoublepage\let\xintgcdnameUp\undefined
+%\gardesactifs
+%\let</xintgcd>\relax
+%\let<*xintfrac>\gardesinactifs
+%</xintgcd>^^A----------------------------------------------------
+%<*xintfrac>^^A---------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; fill-column: 78; -*-
+% \clearpage\csname xintfracnameUp\endcsname
+% \section{Package \xintfracnameimp implementation}
+% \RaisedLabel{sec:fracimp}
+%
+% \localtableofcontents
+%
+% The commenting is currently (\xintdocdate) very sparse.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintfrac.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintfrac}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintfrac.sty
+ \ifx\w\relax % but xint.sty not yet loaded.
+ \def\z{\endgroup\input xint.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xint.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xint}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintfrac already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintfrac}%
+ [2019/04/05 1.3e Expandable operations on fractions (JFB)]%
+% \end{macrocode}
+% \subsection{\csh{XINT_cntSgnFork}}
+% \lverb|1.09i. Used internally, #1 must expand to \m@ne, \z@, or \@ne or
+% equivalent. \XINT_cntSgnFork does not insert a romannumeral stopper.|
+% \begin{macrocode}
+\def\XINT_cntSgnFork #1%
+{%
+ \ifcase #1\expandafter\xint_secondofthree
+ \or\expandafter\xint_thirdofthree
+ \else\expandafter\xint_firstofthree
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\cshnolabel{xintLen}}
+% \lverb|The used formula is disputable, the idea is that A/1 and A should have
+% same length. Venerable code rewritten for 1.2i, following updates to
+% \xintLength in xintkernel.sty. And sadly, I forgot on this
+% occasion that this macro is not supposed to count the sign... Fixed in 1.2k.|
+% \begin{macrocode}
+\def\xintLen {\romannumeral0\xintlen }%
+\def\xintlen #1%
+{%
+ \expandafter\XINT_flen\romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_flen#1{\def\XINT_flen ##1##2##3%
+{%
+ \expandafter#1%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \the\numexpr \XINT_abs##1+%
+ \XINT_len_fork ##2##3\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye-\xint_c_i
+ \relax
+}}\XINT_flen{ }%
+% \end{macrocode}
+% \subsection{\csh{XINT_outfrac}}
+% \lverb|&
+% Months later (2014/10/22): perhaps I should document what this macro does
+% before I forget? from {e}{N}{D} it outputs N/D[e], checking in passing if
+% D=0 or if N=0. It also makes sure D is not < 0. I am not sure but I don't
+% think there is any place in the code which could call \XINT_outfrac with a D
+% < 0, but I should check.|
+% \begin{macrocode}
+\def\XINT_outfrac #1#2#3%
+{%
+ \ifcase\XINT_cntSgn #3\xint:
+ \expandafter \XINT_outfrac_divisionbyzero
+ \or
+ \expandafter \XINT_outfrac_P
+ \else
+ \expandafter \XINT_outfrac_N
+ \fi
+ {#2}{#3}[#1]%
+}%
+\def\XINT_outfrac_divisionbyzero #1#2%
+{%
+ \XINT_signalcondition{DivisionByZero}{Division of #1 by #2}{}{0/1[0]}%
+}%
+\def\XINT_outfrac_P#1{%
+\def\XINT_outfrac_P ##1##2%
+ {\if0\XINT_Sgn ##1\xint:\expandafter\XINT_outfrac_Zero\fi#1##1/##2}%
+}\XINT_outfrac_P{ }%
+\def\XINT_outfrac_Zero #1[#2]{ 0/1[0]}%
+\def\XINT_outfrac_N #1#2%
+{%
+ \expandafter\XINT_outfrac_N_a\expandafter
+ {\romannumeral0\XINT_opp #2}{\romannumeral0\XINT_opp #1}%
+}%
+\def\XINT_outfrac_N_a #1#2%
+{%
+ \expandafter\XINT_outfrac_P\expandafter {#2}{#1}%
+}%
+% \end{macrocode}
+% \subsection{\csh{XINT_inFrac}}\label{src-XINT_infrac}
+% \lverb|&
+% Parses fraction, scientific notation, etc... and produces {n}{A}{B}
+% corresponding to A/B times 10^n. No reduction to smallest terms.
+%
+% Extended in 1.07 to accept scientific notation on input. With lowercase
+% e only. The \xintexpr parser does accept uppercase E also. Ah, by the way,
+% perhaps I should at least say what this macro does? (belated addition
+% 2014/10/22...), before I forget! It prepares the fraction in the internal
+% format {exponent}{Numerator}{Denominator} where Denominator is at least 1.
+%
+% 2015/10/09: this venerable macro from the very early days (1.03, 2013/04/14)
+% has gotten a lifting for release 1.2. There were two kinds of issues:
+%
+% 1) use of \W, \Z, \T delimiters was very poor choice as this could clash with
+% user input,
+%
+% 2) the new \XINT_frac_gen handles macros (possibly empty) in the input as
+% general as \A.\Be\C/\D.\Ee\F. The earlier version would not have expanded
+% the \B or \E: digits after decimal mark were constrained to arise from
+% expansion of the first token. Thus the 1.03 original code would have
+% expanded only \A, \D, \C, and \F for this input.
+%
+% This reminded me think I should revisit the remaining earlier
+% portions of code, as I was still learning TeX coding when I wrote them.
+%
+% Also I thought about parsing even faster the A/B[N] input, not expanding B,
+% but this turned out to clash with some established uses in the documentation
+% such as 1/\xintiiSqr{...}[0]. For the implementation, careful here about
+% potential brace removals with parameter patterns such as like #1/#2#3[#4]for
+% example.
+%
+% While I was at it 1.2 added \numexpr parsing of the N, which earlier was
+% restricted to be only explicit digits. I allowed [] with empty N, but the
+% way I did it in 1.2 with \the\numexpr 0#1 was buggy, as it did not allow #1
+% to be a \count for example or itself a \numexpr (although such inputs were
+% not previously allowed, I later turned out to use them in the code itself,
+% e.g. the float factorial of version 1.2f). The better way would be
+% \the\numexpr#1+\xint_c_ but 1.2f finally does only \the\numexpr #1 and #1 is
+% not allowed to be empty.
+%
+% The 1.2 \XINT_frac_gen had two locations with such a problematic \numexpr
+% 0#1 which I replaced for 1.2f with \numexpr#1+\xint_c_.
+%
+% Regarding calling the macro with an argument A[<expression>], a / inthe
+% expression must be suitably hidden for example in \firstofone type
+% constructs.
+%
+% Note: when the numerator is found to be zero \XINT_inFrac *always* returns
+% {0}{0}{1}. This behaviour must not change because 1.2g \xintFloat and
+% XINTinFloat (for example) rely upon it: if the denominator on output is not
+% 1, then \xintFloat assumes that the numerator is not zero.
+%
+% As described in the manual, if the input contains a (final) [N] part, it is
+% assumed that it is in the shape A[N] or A/B[N] with A (and B) not containing
+% neither decimal mark nor scientific part, moreover B must be positive and A
+% have at most one minus sign (and no plus sign). Else there will be errors,
+% for example -0/2[0] would not be recognized as being zero at this stage and
+% this could cause issues afterwards. When there is no ending [N] part, both
+% numerator and denominator will be parsed for the more general format
+% allowing decimal digits and scientific part and possibly multiple leading
+% signs.
+%
+% 1.2l fixes frailty of \XINT_infrac (hence basically of all xintfrac macros)
+% respective to non terminated \numexpr input: \xintRaw{\the\numexpr1} for
+% example. The issue was that \numexpr sees the / and expands what's next.
+% But even \numexpr 1// for example creates an error, and to my mind this is
+% a defect of \numexpr. It should be able to trace back and see that / was
+% used as delimiter not as operator. Anyway, I thus fixed this problem
+% belatedly here regarding \XINT_infrac.
+% |
+% \begin{macrocode}
+\def\XINT_inFrac {\romannumeral0\XINT_infrac }%
+\def\XINT_infrac #1%
+{%
+ \expandafter\XINT_infrac_fork\romannumeral`&&@#1\xint:/\XINT_W[\XINT_W\XINT_T
+}%
+\def\XINT_infrac_fork #1[#2%
+{%
+ \xint_UDXINTWfork
+ #2\XINT_frac_gen % input has no brackets [N]
+ \XINT_W\XINT_infrac_res_a % there is some [N], must be strict A[N] or A/B[N] input
+ \krof
+ #1[#2%
+}%
+\def\XINT_infrac_res_a #1%
+{%
+ \xint_gob_til_zero #1\XINT_infrac_res_zero 0\XINT_infrac_res_b #1%
+}%
+% \end{macrocode}
+% \lverb|Note that input exponent is here ignored and forced to be zero.|
+% \begin{macrocode}
+\def\XINT_infrac_res_zero 0\XINT_infrac_res_b #1\XINT_T {{0}{0}{1}}%
+\def\XINT_infrac_res_b #1/#2%
+{%
+ \xint_UDXINTWfork
+ #2\XINT_infrac_res_ca % it was A[N] input
+ \XINT_W\XINT_infrac_res_cb % it was A/B[N] input
+ \krof
+ #1/#2%
+}%
+% \end{macrocode}
+% \lverb|An empty [] is not allowed. (this was authorized in 1.2, removed in
+% 1.2f). As nobody reads xint documentation, no one will have noticed the
+% fleeting possibility.|
+% \begin{macrocode}
+\def\XINT_infrac_res_ca #1[#2]\xint:/\XINT_W[\XINT_W\XINT_T
+ {\expandafter{\the\numexpr #2}{#1}{1}}%
+\def\XINT_infrac_res_cb #1/#2[%
+ {\expandafter\XINT_infrac_res_cc\romannumeral`&&@#2~#1[}%
+\def\XINT_infrac_res_cc #1~#2[#3]\xint:/\XINT_W[\XINT_W\XINT_T
+ {\expandafter{\the\numexpr #3}{#2}{#1}}%
+% \end{macrocode}
+% \subsection{\csh{XINT_frac_gen}}
+% \lverb|Extended in 1.07 to recognize and accept scientific notation both at
+% the numerator and (possible) denominator. Only a lowercase e will do here,
+% but uppercase E is possible within an \xintexpr..\relax
+%
+% Completely rewritten for 1.2 2015/10/10. The parsing handles inputs such as
+% \A.\Be\C/\D.\Ee\F where each of \A, \B, \D, and \E may need f-expansion and
+% \C and \F will end up in \numexpr.
+%
+% 1.2f corrects an issue to allow \C and \F to be \count variable (or
+% expressions with \numexpr): 1.2 did a bad \numexpr0#1 which allowed only
+% explicit digits for expanded #1.|
+% \begin{macrocode}
+\def\XINT_frac_gen #1/#2%
+{%
+ \xint_UDXINTWfork
+ #2\XINT_frac_gen_A % there was no /
+ \XINT_W\XINT_frac_gen_B % there was a /
+ \krof
+ #1/#2%
+}%
+% \end{macrocode}
+% \lverb|Note that #1 is only expanded so far up to decimal mark or "e".|
+% \begin{macrocode}
+\def\XINT_frac_gen_A #1\xint:/\XINT_W [\XINT_W {\XINT_frac_gen_C 0~1!#1ee.\XINT_W }%
+\def\XINT_frac_gen_B #1/#2\xint:/\XINT_W[%\XINT_W
+{%
+ \expandafter\XINT_frac_gen_Ba
+ \romannumeral`&&@#2ee.\XINT_W\XINT_Z #1ee.%\XINT_W
+}%
+\def\XINT_frac_gen_Ba #1.#2%
+{%
+ \xint_UDXINTWfork
+ #2\XINT_frac_gen_Bb
+ \XINT_W\XINT_frac_gen_Bc
+ \krof
+ #1.#2%
+}%
+\def\XINT_frac_gen_Bb #1e#2e#3\XINT_Z
+ {\expandafter\XINT_frac_gen_C\the\numexpr #2+\xint_c_~#1!}%
+\def\XINT_frac_gen_Bc #1.#2e%
+{%
+ \expandafter\XINT_frac_gen_Bd\romannumeral`&&@#2.#1e%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_frac_gen_Bd #1.#2e#3e#4\XINT_Z
+{%
+ \expandafter\XINT_frac_gen_C\the\numexpr #3-%
+ \numexpr\XINT_length_loop
+ #1\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ ~#2#1!%
+}%
+\def\XINT_frac_gen_C #1!#2.#3%
+{%
+ \xint_UDXINTWfork
+ #3\XINT_frac_gen_Ca
+ \XINT_W\XINT_frac_gen_Cb
+ \krof
+ #1!#2.#3%
+}%
+\def\XINT_frac_gen_Ca #1~#2!#3e#4e#5\XINT_T
+{%
+ \expandafter\XINT_frac_gen_F\the\numexpr #4-#1\expandafter
+ ~\romannumeral0\expandafter\XINT_num_cleanup\the\numexpr\XINT_num_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z~#3~%
+}%
+\def\XINT_frac_gen_Cb #1.#2e%
+{%
+ \expandafter\XINT_frac_gen_Cc\romannumeral`&&@#2.#1e%
+}%
+\def\XINT_frac_gen_Cc #1.#2~#3!#4e#5e#6\XINT_T
+{%
+ \expandafter\XINT_frac_gen_F\the\numexpr #5-#2-%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \numexpr\XINT_length_loop
+ #1\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \relax\expandafter~%
+ \romannumeral0\expandafter\XINT_num_cleanup\the\numexpr\XINT_num_loop
+ #3\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z
+ ~#4#1~%
+}%
+\def\XINT_frac_gen_F #1~#2%
+{%
+ \xint_UDzerominusfork
+ #2-\XINT_frac_gen_Gdivbyzero
+ 0#2{\XINT_frac_gen_G -{}}%
+ 0-{\XINT_frac_gen_G {}#2}%
+ \krof #1~%
+}%
+\def\XINT_frac_gen_Gdivbyzero #1~~#2~%
+{%
+ \expandafter\XINT_frac_gen_Gdivbyzero_a
+ \romannumeral0\expandafter\XINT_num_cleanup\the\numexpr\XINT_num_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z~#1~%
+}%
+\def\XINT_frac_gen_Gdivbyzero_a #1~#2~%
+{%
+ \XINT_signalcondition{DivisionByZero}{Division of #1 by zero}{}{{#2}{#1}{0}}%
+}%
+\def\XINT_frac_gen_G #1#2#3~#4~#5~%
+{%
+ \expandafter\XINT_frac_gen_Ga
+ \romannumeral0\expandafter\XINT_num_cleanup\the\numexpr\XINT_num_loop
+ #1#5\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\Z~#3~{#2#4}%
+}%
+\def\XINT_frac_gen_Ga #1#2~#3~%
+{%
+ \xint_gob_til_zero #1\XINT_frac_gen_zero 0%
+ {#3}{#1#2}%
+}%
+\def\XINT_frac_gen_zero 0#1#2#3{{0}{0}{1}}%
+% \end{macrocode}
+% \subsection{\csh{XINT_factortens}}
+% \lverb|This is the core macro for \xintREZ. To be used as
+% \romannumeral0\XINT_factortens{...}. Output is A.N. (formerly {A}{N}) where
+% A is the integer stripped from trailing zeroes and N is the number of
+% removed zeroes. Only for positive strict integers!
+%
+% Completely rewritten at 1.3a to replace a double \xintReverseOrder by a
+% direct \numexpr governed expansion to the end and back, à la 1.2. I should
+% comment more... and perhaps improve again in future.
+%
+% Testing shows significant gain at 100 digits or more.|
+% \begin{macrocode}
+\def\XINT_factortens #1{\expandafter\XINT_factortens_z
+ \romannumeral0\XINT_factortens_a#1%
+ \XINT_factortens_b123456789.}%
+\def\XINT_factortens_z.\XINT_factortens_y{ }%
+\def\XINT_factortens_a #1#2#3#4#5#6#7#8#9%
+ {\expandafter\XINT_factortens_x
+ \the\numexpr 1#1#2#3#4#5#6#7#8#9\XINT_factortens_a}%
+\def\XINT_factortens_b#1\XINT_factortens_a#2#3.%
+ {.\XINT_factortens_cc 000000000-#2.}%
+\def\XINT_factortens_x1#1.#2{#2#1}%
+\def\XINT_factortens_y{.\XINT_factortens_y}%
+\def\XINT_factortens_cc #1#2#3#4#5#6#7#8#9%
+ {\if#90\xint_dothis
+ {\expandafter\XINT_factortens_d\the\numexpr #8#7#6#5#4#3#2#1\relax
+ \xint_c_i 2345678.}\fi
+ \xint_orthat{\XINT_factortens_yy{#1#2#3#4#5#6#7#8#9}}}%
+\def\XINT_factortens_yy #1#2.{.\XINT_factortens_y#1.0.}%
+\def\XINT_factortens_c #1#2#3#4#5#6#7#8#9%
+ {\if#90\xint_dothis
+ {\expandafter\XINT_factortens_d\the\numexpr #8#7#6#5#4#3#2#1\relax
+ \xint_c_i 2345678.}\fi
+ \xint_orthat{.\XINT_factortens_y #1#2#3#4#5#6#7#8#9.}}%
+\def\XINT_factortens_d #1#2#3#4#5#6#7#8#9%
+ {\if#10\expandafter\XINT_factortens_e\fi
+ \XINT_factortens_f #9#9#8#7#6#5#4#3#2#1.}%
+\def\XINT_factortens_f #1#2\xint_c_i#3.#4.#5.%
+ {\expandafter\XINT_factortens_g\the\numexpr#1+#5.#3.}%
+\def\XINT_factortens_g #1.#2.{.\XINT_factortens_y#2.#1.}%
+\def\XINT_factortens_e #1..#2.%
+ {\expandafter.\expandafter\XINT_factortens_c
+ \the\numexpr\xint_c_ix+#2.}%
+% \end{macrocode}
+% \subsection{\xintListWithSep{, }
+% {\xintApply{ \csh}{{xintEq}{xintNotEq}{xintGt}{xintLt}{xintGtorEq}
+% {xintLtorEq}{xintIsZero}{xintIsNotZero}{xintOdd}
+% {xintEven}{xintifSgn}{xintifCmp}{xintifEq}{xintifGt}{xintifLt}
+% {xintifZero}{xintifNotZero}{xintifOne}{xintifOdd}}}}
+%
+% \lverb|Moved here at 1.3. Formerly these macros were already defined in
+% xint.sty or even xintcore.sty. They are slim wrappers of macros defined
+% elsewhere in xintfrac.
+% |
+% \begin{macrocode}
+\def\xintEq {\romannumeral0\xinteq }%
+\def\xinteq #1#2{\xintifeq{#1}{#2}{1}{0}}%
+\def\xintNotEq#1#2{\romannumeral0\xintifeq {#1}{#2}{0}{1}}%
+\def\xintGt {\romannumeral0\xintgt }%
+\def\xintgt #1#2{\xintifgt{#1}{#2}{1}{0}}%
+\def\xintLt {\romannumeral0\xintlt }%
+\def\xintlt #1#2{\xintiflt{#1}{#2}{1}{0}}%
+\def\xintGtorEq #1#2{\romannumeral0\xintiflt {#1}{#2}{0}{1}}%
+\def\xintLtorEq #1#2{\romannumeral0\xintifgt {#1}{#2}{0}{1}}%
+\def\xintIsZero {\romannumeral0\xintiszero }%
+\def\xintiszero #1{\if0\xintSgn{#1}\xint_afterfi{ 1}\else\xint_afterfi{ 0}\fi}%
+\def\xintIsNotZero{\romannumeral0\xintisnotzero }%
+\def\xintisnotzero
+ #1{\if0\xintSgn{#1}\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi}%
+\def\xintOdd {\romannumeral0\xintodd }%
+\def\xintodd #1%
+{%
+ \ifodd\xintLDg{\xintNum{#1}} %<- intentional space
+ \xint_afterfi{ 1}%
+ \else
+ \xint_afterfi{ 0}%
+ \fi
+}%
+\def\xintEven {\romannumeral0\xinteven }%
+\def\xinteven #1%
+{%
+ \ifodd\xintLDg{\xintNum{#1}} %<- intentional space
+ \xint_afterfi{ 0}%
+ \else
+ \xint_afterfi{ 1}%
+ \fi
+}%
+\def\xintifSgn{\romannumeral0\xintifsgn }%
+\def\xintifsgn #1%
+{%
+ \ifcase \xintSgn{#1}
+ \expandafter\xint_stop_atsecondofthree
+ \or\expandafter\xint_stop_atthirdofthree
+ \else\expandafter\xint_stop_atfirstofthree
+ \fi
+}%
+\def\xintifCmp{\romannumeral0\xintifcmp }%
+\def\xintifcmp #1#2%
+{%
+ \ifcase\xintCmp {#1}{#2}
+ \expandafter\xint_stop_atsecondofthree
+ \or\expandafter\xint_stop_atthirdofthree
+ \else\expandafter\xint_stop_atfirstofthree
+ \fi
+}%
+\def\xintifEq {\romannumeral0\xintifeq }%
+\def\xintifeq #1#2%
+{%
+ \if0\xintCmp{#1}{#2}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else\expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+\def\xintifGt {\romannumeral0\xintifgt }%
+\def\xintifgt #1#2%
+{%
+ \if1\xintCmp{#1}{#2}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else\expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+\def\xintifLt {\romannumeral0\xintiflt }%
+\def\xintiflt #1#2%
+{%
+ \ifnum\xintCmp{#1}{#2}<\xint_c_
+ \expandafter\xint_stop_atfirstoftwo
+ \else \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+\def\xintifZero {\romannumeral0\xintifzero }%
+\def\xintifzero #1%
+{%
+ \if0\xintSgn{#1}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+\def\xintifNotZero{\romannumeral0\xintifnotzero }%
+\def\xintifnotzero #1%
+{%
+ \if0\xintSgn{#1}%
+ \expandafter\xint_stop_atsecondoftwo
+ \else
+ \expandafter\xint_stop_atfirstoftwo
+ \fi
+}%
+\def\xintifOne {\romannumeral0\xintifone }%
+\def\xintifone #1%
+{%
+ \if1\xintIsOne{#1}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+\def\xintifOdd {\romannumeral0\xintifodd }%
+\def\xintifodd #1%
+{%
+ \if\xintOdd{#1}1%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintRaw}}
+% \lverb|&
+% 1.07: this macro simply prints in a user readable form the fraction after its
+% initial scanning. Useful when put inside braces in an \xintexpr, when the
+% input is not yet in the A/B[n] form.|
+% \begin{macrocode}
+\def\xintRaw {\romannumeral0\xintraw }%
+\def\xintraw
+{%
+ \expandafter\XINT_raw\romannumeral0\XINT_infrac
+}%
+\def\XINT_raw #1#2#3{ #2/#3[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintiLogTen}}
+% \lverb|&
+% New at 1.3e
+% |
+% \begin{macrocode}
+\def\xintiLogTen {\the\numexpr\xintilogten}%
+\def\xintilogten
+{%
+ \expandafter\XINT_ilogten\romannumeral0\xintraw
+}%
+\def\XINT_ilogten #1%
+{%
+ \xint_UDzerominusfork
+ 0#1\XINT_ilogten_p
+ #1-\XINT_ilogten_z
+ 0-{\XINT_ilogten_p#1}%
+ \krof
+}%
+\def\XINT_ilogten_z #1[#2]{-"7FFF8000\relax}%
+\def\XINT_ilogten_p #1/#2[#3]%
+{%
+ #3+\expandafter\XINT_ilogten_a
+ \the\numexpr\xintLength{#1}\expandafter.\the\numexpr\xintLength{#2}.#1.#2.%
+}%
+\def\XINT_ilogten_a #1.#2.%
+{%
+ #1-#2\ifnum#1>#2
+ \expandafter\XINT_ilogten_aa
+ \else
+ \expandafter\XINT_ilogten_ab
+ \fi #1.#2.%
+}%
+\def\XINT_ilogten_aa #1.#2.#3.#4.%
+{%
+ \xintiiifLt{#3}{\XINT_dsx_addzerosnofuss{#1-#2}#4;}{-1}{}\relax
+}%
+\def\XINT_ilogten_ab #1.#2.#3.#4.%
+{%
+ \xintiiifLt{\XINT_dsx_addzerosnofuss{#2-#1}#3;}{#4}{-1}{}\relax
+}%
+% \end{macrocode}
+% \subsection{\csh{xintPRaw}}
+% \lverb|1.09b|
+% \begin{macrocode}
+\def\xintPRaw {\romannumeral0\xintpraw }%
+\def\xintpraw
+{%
+ \expandafter\XINT_praw\romannumeral0\XINT_infrac
+}%
+\def\XINT_praw #1%
+{%
+ \ifnum #1=\xint_c_ \expandafter\XINT_praw_a\fi \XINT_praw_A {#1}%
+}%
+\def\XINT_praw_A #1#2#3%
+{%
+ \if\XINT_isOne{#3}1\expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi { #2[#1]}{ #2/#3[#1]}%
+}%
+\def\XINT_praw_a\XINT_praw_A #1#2#3%
+{%
+ \if\XINT_isOne{#3}1\expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi { #2}{ #2/#3}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintRawWithZeros}}
+% \lverb|&
+% This was called \xintRaw in versions earlier than 1.07|
+% \begin{macrocode}
+\def\xintRawWithZeros {\romannumeral0\xintrawwithzeros }%
+\def\xintrawwithzeros
+{%
+ \expandafter\XINT_rawz_fork\romannumeral0\XINT_infrac
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_rawz_fork #1%
+{%
+ \ifnum#1<\xint_c_
+ \expandafter\XINT_rawz_Ba
+ \else
+ \expandafter\XINT_rawz_A
+ \fi
+ #1.%
+}%
+\def\XINT_rawz_A #1.#2#3{\XINT_dsx_addzeros{#1}#2;/#3}%
+\def\XINT_rawz_Ba -#1.#2#3{\expandafter\XINT_rawz_Bb
+ \expandafter{\romannumeral0\XINT_dsx_addzeros{#1}#3;}{#2}}%
+\def\XINT_rawz_Bb #1#2{ #2/#1}%
+% \end{macrocode}
+% \subsection{\csh{xintDecToString}}
+% \lverb|1.3. This is a backport from polexpr 0.4. It is definitely not in
+% final form, consider it to be an unstable macro.|
+% \begin{macrocode}
+\def\xintDecToString{\romannumeral0\xintdectostring}%
+\def\xintdectostring#1{\expandafter\XINT_dectostr\romannumeral0\xintraw{#1}}%
+\def\XINT_dectostr #1/#2[#3]{\xintiiifZero {#1}%
+ \XINT_dectostr_z
+ {\if1\XINT_isOne{#2}\expandafter\XINT_dectostr_a
+ \else\expandafter\XINT_dectostr_b
+ \fi}%
+ #1/#2[#3]%
+}%
+\def\XINT_dectostr_z#1[#2]{ 0}%
+\def\XINT_dectostr_a#1/#2[#3]{%
+ \ifnum#3<\xint_c_\xint_dothis{\xinttrunc{-#3}{#1[#3]}}\fi
+ \xint_orthat{\xintiie{#1}{#3}}%
+}%
+\def\XINT_dectostr_b#1/#2[#3]{% just to handle this somehow
+ \ifnum#3<\xint_c_\xint_dothis{\xinttrunc{-#3}{#1[#3]}/#2}\fi
+ \xint_orthat{\xintiie{#1}{#3}/#2}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloor}, \csh{xintiFloor}}
+% \lverb|1.09a, 1.1 for \xintiFloor/\xintFloor. Not efficient if big negative
+% decimal exponent. Also sub-efficient if big positive decimal exponent.|
+% \begin{macrocode}
+\def\xintFloor {\romannumeral0\xintfloor }%
+\def\xintfloor #1% devrais-je faire \xintREZ?
+ {\expandafter\XINT_ifloor \romannumeral0\xintrawwithzeros {#1}./1[0]}%
+\def\xintiFloor {\romannumeral0\xintifloor }%
+\def\xintifloor #1%
+ {\expandafter\XINT_ifloor \romannumeral0\xintrawwithzeros {#1}.}%
+\def\XINT_ifloor #1/#2.{\xintiiquo {#1}{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintCeil}, \csh{xintiCeil}}
+% \lverb|1.09a|
+% \begin{macrocode}
+\def\xintCeil {\romannumeral0\xintceil }%
+\def\xintceil #1{\xintiiopp {\xintFloor {\xintOpp{#1}}}}%
+\def\xintiCeil {\romannumeral0\xinticeil }%
+\def\xinticeil #1{\xintiiopp {\xintiFloor {\xintOpp{#1}}}}%
+% \end{macrocode}
+% \subsection{\csh{xintNumerator}}
+% \begin{macrocode}
+\def\xintNumerator {\romannumeral0\xintnumerator }%
+\def\xintnumerator
+{%
+ \expandafter\XINT_numer\romannumeral0\XINT_infrac
+}%
+\def\XINT_numer #1%
+{%
+ \ifcase\XINT_cntSgn #1\xint:
+ \expandafter\XINT_numer_B
+ \or
+ \expandafter\XINT_numer_A
+ \else
+ \expandafter\XINT_numer_B
+ \fi
+ {#1}%
+}%
+\def\XINT_numer_A #1#2#3{\XINT_dsx_addzeros{#1}#2;}%
+\def\XINT_numer_B #1#2#3{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintDenominator}}
+% \begin{macrocode}
+\def\xintDenominator {\romannumeral0\xintdenominator }%
+\def\xintdenominator
+{%
+ \expandafter\XINT_denom_fork\romannumeral0\XINT_infrac
+}%
+\def\XINT_denom_fork #1%
+{%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \ifnum#1<\xint_c_
+ \expandafter\XINT_denom_B
+ \else
+ \expandafter\XINT_denom_A
+ \fi
+ #1.%
+}%
+\def\XINT_denom_A #1.#2#3{ #3}%
+\def\XINT_denom_B -#1.#2#3{\XINT_dsx_addzeros{#1}#3;}%
+% \end{macrocode}
+% \subsection{\csh{xintFrac}}
+% \lverb|Useless typesetting macro.|
+% \begin{macrocode}
+\def\xintFrac {\romannumeral0\xintfrac }%
+\def\xintfrac #1%
+{%
+ \expandafter\XINT_fracfrac_A\romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_fracfrac_A #1{\XINT_fracfrac_B #1\Z }%
+\catcode`^=7
+\def\XINT_fracfrac_B #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_fracfrac_C 0\XINT_fracfrac_D {10^{#1#2}}%
+}%
+\def\XINT_fracfrac_C 0\XINT_fracfrac_D #1#2#3%
+{%
+ \if1\XINT_isOne {#3}%
+ \xint_afterfi {\expandafter\xint_stop_atfirstoftwo\xint_gobble_ii }%
+ \fi
+ \space
+ \frac {#2}{#3}%
+}%
+\def\XINT_fracfrac_D #1#2#3%
+{%
+ \if1\XINT_isOne {#3}\XINT_fracfrac_E\fi
+ \space
+ \frac {#2}{#3}#1%
+}%
+\def\XINT_fracfrac_E \fi\space\frac #1#2{\fi \space #1\cdot }%
+% \end{macrocode}
+% \subsection{\csh{xintSignedFrac}}
+% \begin{macrocode}
+\def\xintSignedFrac {\romannumeral0\xintsignedfrac }%
+\def\xintsignedfrac #1%
+{%
+ \expandafter\XINT_sgnfrac_a\romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_sgnfrac_a #1#2%
+{%
+ \XINT_sgnfrac_b #2\Z {#1}%
+}%
+\def\XINT_sgnfrac_b #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_sgnfrac_N
+ -{\XINT_sgnfrac_P #1}%
+ \krof
+}%
+\def\XINT_sgnfrac_P #1\Z #2%
+{%
+ \XINT_fracfrac_A {#2}{#1}%
+}%
+\def\XINT_sgnfrac_N
+{%
+ \expandafter-\romannumeral0\XINT_sgnfrac_P
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFwOver}}
+% \begin{macrocode}
+\def\xintFwOver {\romannumeral0\xintfwover }%
+\def\xintfwover #1%
+{%
+ \expandafter\XINT_fwover_A\romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_fwover_A #1{\XINT_fwover_B #1\Z }%
+\def\XINT_fwover_B #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_fwover_C 0\XINT_fwover_D {10^{#1#2}}%
+}%
+\catcode`^=11
+\def\XINT_fwover_C #1#2#3#4#5%
+{%
+ \if0\XINT_isOne {#5}\xint_afterfi { {#4\over #5}}%
+ \else\xint_afterfi { #4}%
+ \fi
+}%
+\def\XINT_fwover_D #1#2#3%
+{%
+ \if0\XINT_isOne {#3}\xint_afterfi { {#2\over #3}}%
+ \else\xint_afterfi { #2\cdot }%
+ \fi
+ #1%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintSignedFwOver}}
+% \begin{macrocode}
+\def\xintSignedFwOver {\romannumeral0\xintsignedfwover }%
+\def\xintsignedfwover #1%
+{%
+ \expandafter\XINT_sgnfwover_a\romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_sgnfwover_a #1#2%
+{%
+ \XINT_sgnfwover_b #2\Z {#1}%
+}%
+\def\XINT_sgnfwover_b #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_sgnfwover_N
+ -{\XINT_sgnfwover_P #1}%
+ \krof
+}%
+\def\XINT_sgnfwover_P #1\Z #2%
+{%
+ \XINT_fwover_A {#2}{#1}%
+}%
+\def\XINT_sgnfwover_N
+{%
+ \expandafter-\romannumeral0\XINT_sgnfwover_P
+}%
+% \end{macrocode}
+% \subsection{\csh{xintREZ}}
+% \lverb|Removes trailing zeros from A and B and adjust the N in A/B[N].
+%
+% The macro really doing the job \XINT_factortens was redone at 1.3a. But
+% speed gain really noticeable only beyond about 100 digits.|
+% \begin{macrocode}
+\def\xintREZ {\romannumeral0\xintrez }%
+\def\xintrez
+{%
+ \expandafter\XINT_rez_A\romannumeral0\XINT_infrac
+}%
+\def\XINT_rez_A #1#2%
+{%
+ \XINT_rez_AB #2\Z {#1}%
+}%
+\def\XINT_rez_AB #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_rez_zero
+ 0#1\XINT_rez_neg
+ 0-{\XINT_rez_B #1}%
+ \krof
+}%
+\def\XINT_rez_zero #1\Z #2#3{ 0/1[0]}%
+\def\XINT_rez_neg {\expandafter-\romannumeral0\XINT_rez_B }%
+\def\XINT_rez_B #1\Z
+{%
+ \expandafter\XINT_rez_C\romannumeral0\XINT_factortens {#1}%
+}%
+\def\XINT_rez_C #1.#2.#3#4%
+{%
+ \expandafter\XINT_rez_D\romannumeral0\XINT_factortens {#4}#3+#2.#1.%
+}%
+\def\XINT_rez_D #1.#2.#3.%
+{%
+ \expandafter\XINT_rez_E\the\numexpr #3-#2.#1.%
+}%
+\def\XINT_rez_E #1.#2.#3.{ #3/#2[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintE}}
+% \lverb|1.07: The fraction is the first argument contrarily to \xintTrunc and
+% \xintRound.
+%
+% 1.1 modifies and moves \xintiiE to xint.sty.|
+% \begin{macrocode}
+\def\xintE {\romannumeral0\xinte }%
+\def\xinte #1%
+{%
+ \expandafter\XINT_e \romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_e #1#2#3#4%
+{%
+ \expandafter\XINT_e_end\the\numexpr #1+#4.{#2}{#3}%
+}%
+\def\XINT_e_end #1.#2#3{ #2/#3[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintIrr}, \csh{xintPIrr}}
+% \lverb|\xintPIrr (partial Irr, which ignores the decimal part) added at 1.3.|
+% \begin{macrocode}
+\def\xintIrr {\romannumeral0\xintirr }%
+\def\xintPIrr{\romannumeral0\xintpirr }%
+\def\xintirr #1%
+{%
+ \expandafter\XINT_irr_start\romannumeral0\xintrawwithzeros {#1}\Z
+}%
+\def\xintpirr #1%
+{%
+ \expandafter\XINT_pirr_start\romannumeral0\xintraw{#1}%
+}%
+\def\XINT_irr_start #1#2/#3\Z
+{%
+ \if0\XINT_isOne {#3}%
+ \xint_afterfi
+ {\xint_UDsignfork
+ #1\XINT_irr_negative
+ -{\XINT_irr_nonneg #1}%
+ \krof}%
+ \else
+ \xint_afterfi{\XINT_irr_denomisone #1}%
+ \fi
+ #2\Z {#3}%
+}%
+\def\XINT_pirr_start #1#2/#3[%
+{%
+ \if0\XINT_isOne {#3}%
+ \xint_afterfi
+ {\xint_UDsignfork
+ #1\XINT_irr_negative
+ -{\XINT_irr_nonneg #1}%
+ \krof}%
+ \else
+ \xint_afterfi{\XINT_irr_denomisone #1}%
+ \fi
+ #2\Z {#3}[%
+}%
+\def\XINT_irr_denomisone #1\Z #2{ #1/1}% changed in 1.08
+\def\XINT_irr_negative #1\Z #2{\XINT_irr_D #1\Z #2\Z -}%
+\def\XINT_irr_nonneg #1\Z #2{\XINT_irr_D #1\Z #2\Z \space}%
+\def\XINT_irr_D #1#2\Z #3#4\Z
+{%
+ \xint_UDzerosfork
+ #3#1\XINT_irr_indeterminate
+ #30\XINT_irr_divisionbyzero
+ #10\XINT_irr_zero
+ 00\XINT_irr_loop_a
+ \krof
+ {#3#4}{#1#2}{#3#4}{#1#2}%
+}%
+\def\XINT_irr_indeterminate #1#2#3#4#5%
+{%
+ \XINT_signalcondition{DivisionUndefined}{indeterminate: 0/0}{}{0/1}%
+}%
+\def\XINT_irr_divisionbyzero #1#2#3#4#5%
+{%
+ \XINT_signalcondition{DivisionByZero}{vanishing denominator: #5#2/0}{}{0/1}%
+}%
+\def\XINT_irr_zero #1#2#3#4#5{ 0/1}% changed in 1.08
+\def\XINT_irr_loop_a #1#2%
+{%
+ \expandafter\XINT_irr_loop_d
+ \romannumeral0\XINT_div_prepare {#1}{#2}{#1}%
+}%
+\def\XINT_irr_loop_d #1#2%
+{%
+ \XINT_irr_loop_e #2\Z
+}%
+\def\XINT_irr_loop_e #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_irr_loop_exit0\XINT_irr_loop_a {#1#2}%
+}%
+\def\XINT_irr_loop_exit0\XINT_irr_loop_a #1#2#3#4%
+{%
+ \expandafter\XINT_irr_loop_exitb\expandafter
+ {\romannumeral0\xintiiquo {#3}{#2}}%
+ {\romannumeral0\xintiiquo {#4}{#2}}%
+}%
+\def\XINT_irr_loop_exitb #1#2%
+{%
+ \expandafter\XINT_irr_finish\expandafter {#2}{#1}%
+}%
+\def\XINT_irr_finish #1#2#3{#3#1/#2}% changed in 1.08
+% \end{macrocode}
+% \subsection{\csh{xintifInt}}
+% \begin{macrocode}
+\def\xintifInt {\romannumeral0\xintifint }%
+\def\xintifint #1{\expandafter\XINT_ifint\romannumeral0\xintrawwithzeros {#1}.}%
+\def\XINT_ifint #1/#2.%
+{%
+ \if 0\xintiiRem {#1}{#2}%
+ \expandafter\xint_stop_atfirstoftwo
+ \else
+ \expandafter\xint_stop_atsecondoftwo
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintIsInt}}
+% \lverb|Added at 1.3d only, for isint() xintexpr function.|
+% \begin{macrocode}
+\def\xintIsInt {\romannumeral0\xintisint }%
+\def\xintisint #1%
+ {\expandafter\XINT_ifint\romannumeral0\xintrawwithzeros {#1}.10}%
+% \end{macrocode}
+% \subsection{\csh{xintJrr}}
+% \begin{macrocode}
+\def\xintJrr {\romannumeral0\xintjrr }%
+\def\xintjrr #1%
+{%
+ \expandafter\XINT_jrr_start\romannumeral0\xintrawwithzeros {#1}\Z
+}%
+\def\XINT_jrr_start #1#2/#3\Z
+{%
+ \if0\XINT_isOne {#3}\xint_afterfi
+ {\xint_UDsignfork
+ #1\XINT_jrr_negative
+ -{\XINT_jrr_nonneg #1}%
+ \krof}%
+ \else
+ \xint_afterfi{\XINT_jrr_denomisone #1}%
+ \fi
+ #2\Z {#3}%
+}%
+\def\XINT_jrr_denomisone #1\Z #2{ #1/1}% changed in 1.08
+\def\XINT_jrr_negative #1\Z #2{\XINT_jrr_D #1\Z #2\Z -}%
+\def\XINT_jrr_nonneg #1\Z #2{\XINT_jrr_D #1\Z #2\Z \space}%
+\def\XINT_jrr_D #1#2\Z #3#4\Z
+{%
+ \xint_UDzerosfork
+ #3#1\XINT_jrr_indeterminate
+ #30\XINT_jrr_divisionbyzero
+ #10\XINT_jrr_zero
+ 00\XINT_jrr_loop_a
+ \krof
+ {#3#4}{#1#2}1001%
+}%
+\def\XINT_jrr_indeterminate #1#2#3#4#5#6#7%
+{%
+ \XINT_signalcondition{DivisionUndefined}{indeterminate: 0/0}{}{0/1}%
+}%
+\def\XINT_jrr_divisionbyzero #1#2#3#4#5#6#7%
+{%
+ \XINT_signalcondition{DivisionByZero}{Vanishing denominator: #7#2/0}{}{0/1}%
+}%
+\def\XINT_jrr_zero #1#2#3#4#5#6#7{ 0/1}% changed in 1.08
+\def\XINT_jrr_loop_a #1#2%
+{%
+ \expandafter\XINT_jrr_loop_b
+ \romannumeral0\XINT_div_prepare {#1}{#2}{#1}%
+}%
+\def\XINT_jrr_loop_b #1#2#3#4#5#6#7%
+{%
+ \expandafter \XINT_jrr_loop_c \expandafter
+ {\romannumeral0\xintiiadd{\XINT_mul_fork #4\xint:#1\xint:}{#6}}%
+ {\romannumeral0\xintiiadd{\XINT_mul_fork #5\xint:#1\xint:}{#7}}%
+ {#2}{#3}{#4}{#5}%
+}%
+\def\XINT_jrr_loop_c #1#2%
+{%
+ \expandafter \XINT_jrr_loop_d \expandafter{#2}{#1}%
+}%
+\def\XINT_jrr_loop_d #1#2#3#4%
+{%
+ \XINT_jrr_loop_e #3\Z {#4}{#2}{#1}%
+}%
+\def\XINT_jrr_loop_e #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_jrr_loop_exit0\XINT_jrr_loop_a {#1#2}%
+}%
+\def\XINT_jrr_loop_exit0\XINT_jrr_loop_a #1#2#3#4#5#6%
+{%
+ \XINT_irr_finish {#3}{#4}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintTFrac}}
+% \lverb|1.09i, for frac in \xintexpr. And \xintFrac is already assigned. T for
+% truncation. However, potentially not very efficient with numbers in scientific
+% notations, with big exponents. Will have to think it again some day. I
+% hesitated how to call the macro. Same convention as in maple, but some people
+% reserve fractional part to x - floor(x). Also, not clear if I had to make it
+% negative (or zero) if x < 0, or rather always positive. There should be in
+% fact such a thing for each rounding function, trunc, round, floor, ceil. |
+% \begin{macrocode}
+\def\xintTFrac {\romannumeral0\xinttfrac }%
+\def\xinttfrac #1{\expandafter\XINT_tfrac_fork\romannumeral0\xintrawwithzeros {#1}\Z }%
+\def\XINT_tfrac_fork #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_tfrac_zero
+ 0#1{\xintiiopp\XINT_tfrac_P }%
+ 0-{\XINT_tfrac_P #1}%
+ \krof
+}%
+\def\XINT_tfrac_zero #1\Z { 0/1[0]}%
+\def\XINT_tfrac_P #1/#2\Z {\expandafter\XINT_rez_AB
+ \romannumeral0\xintiirem{#1}{#2}\Z {0}{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintTrunc}, \csh{xintiTrunc}}
+% \lverb|&
+% 1.2i release notes: ever since its inception this macro was stupid for a
+% decimal input: it did not handle it separately from the general fraction
+% case A/B[N] with B>1, hence ended up doing divisions by powers of ten. But
+% this meant that nesting \xintTrunc with itself was very inefficient.
+%
+% 1.2i version is better. However it still handles B>1, N<0 via adding zeros
+% to B and dividing with this extended B. A possibly more efficient approach
+% is implemented in \xintXTrunc, but its logic is more complicated, the code
+% is quite longer and making it f-expandable would not shorten it... I decided
+% for the time being to not complicate things here.
+% |
+% \begin{macrocode}
+\def\xintTrunc {\romannumeral0\xinttrunc }%
+\def\xintiTrunc {\romannumeral0\xintitrunc}%
+\def\xinttrunc #1{\expandafter\XINT_trunc\the\numexpr#1.\XINT_trunc_G}%
+\def\xintitrunc #1{\expandafter\XINT_trunc\the\numexpr#1.\XINT_itrunc_G}%
+\def\XINT_trunc #1.#2#3%
+{%
+ \expandafter\XINT_trunc_a\romannumeral0\XINT_infrac{#3}#1.#2%
+}%
+\def\XINT_trunc_a #1#2#3#4.#5%
+{%
+ \if0\XINT_Sgn#2\xint:\xint_dothis\XINT_trunc_zero\fi
+ \if1\XINT_is_One#3XY\xint_dothis\XINT_trunc_sp_b\fi
+ \xint_orthat\XINT_trunc_b #1+#4.{#2}{#3}#5#4.%
+}%
+\def\XINT_trunc_zero #1.#2.{ 0}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_trunc_b {\expandafter\XINT_trunc_B\the\numexpr}%
+\def\XINT_trunc_sp_b {\expandafter\XINT_trunc_sp_B\the\numexpr}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_trunc_B #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_trunc_C
+ -\XINT_trunc_D
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_trunc_sp_B #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_trunc_sp_C
+ -\XINT_trunc_sp_D
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_trunc_C -#1.#2#3%
+{%
+ \expandafter\XINT_trunc_CE
+ \romannumeral0\XINT_dsx_addzeros{#1}#3;.{#2}%
+}%
+\def\XINT_trunc_CE #1.#2{\XINT_trunc_E #2.{#1}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_trunc_sp_C -#1.#2#3{\XINT_trunc_sp_Ca #2.#1.}%
+\def\XINT_trunc_sp_Ca #1%
+{%
+ \xint_UDsignfork
+ #1{\XINT_trunc_sp_Cb -}%
+ -{\XINT_trunc_sp_Cb \space#1}%
+ \krof
+}%
+\def\XINT_trunc_sp_Cb #1#2.#3.%
+{%
+ \expandafter\XINT_trunc_sp_Cc
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \romannumeral0\expandafter\XINT_split_fromright_a
+ \the\numexpr#3-\numexpr\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ .#2\xint_bye2345678\xint_bye..#1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_trunc_sp_Cc #1%
+{%
+ \if.#1\xint_dothis{\XINT_trunc_sp_Cd 0.}\fi
+ \xint_orthat {\XINT_trunc_sp_Cd #1}%
+}%
+\def\XINT_trunc_sp_Cd #1.#2.#3%
+{%
+ \XINT_trunc_sp_F #3#1.%
+}%
+\def\XINT_trunc_D #1.#2%
+{%
+ \expandafter\XINT_trunc_E
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;.%
+}%
+\def\XINT_trunc_sp_D #1.#2#3%
+{%
+ \expandafter\XINT_trunc_sp_E
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;.%
+}%
+\def\XINT_trunc_E #1%
+{%
+ \xint_UDsignfork
+ #1{\XINT_trunc_F -}%
+ -{\XINT_trunc_F \space#1}%
+ \krof
+}%
+\def\XINT_trunc_sp_E #1%
+{%
+ \xint_UDsignfork
+ #1{\XINT_trunc_sp_F -}%
+ -{\XINT_trunc_sp_F\space#1}%
+ \krof
+}%
+\def\XINT_trunc_F #1#2.#3#4%
+ {\expandafter#4\romannumeral`&&@\expandafter\xint_firstoftwo
+ \romannumeral0\XINT_div_prepare {#3}{#2}.#1}%
+\def\XINT_trunc_sp_F #1#2.#3{#3#2.#1}%
+\def\XINT_itrunc_G #1#2.#3#4.{\if#10\xint_dothis{ 0}\fi\xint_orthat{#3#1}#2}%
+\def\XINT_trunc_G #1.#2#3.%
+{%
+ \expandafter\XINT_trunc_H
+ \the\numexpr\romannumeral0\xintlength {#1}-#3.#3.{#1}#2%
+}%
+\def\XINT_trunc_H #1.#2.%
+{%
+ \ifnum #1 > \xint_c_
+ \xint_afterfi {\XINT_trunc_Ha {#2}}%
+ \else
+ \xint_afterfi {\XINT_trunc_Hb {-#1}}% -0,--1,--2, ....
+ \fi
+}%
+\def\XINT_trunc_Ha{\expandafter\XINT_trunc_Haa\romannumeral0\xintdecsplit}%
+\def\XINT_trunc_Haa #1#2#3{#3#1.#2}%
+\def\XINT_trunc_Hb #1#2#3%
+{%
+ \expandafter #3\expandafter0\expandafter.%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \romannumeral\xintreplicate{#1}0#2%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintTTrunc}}
+% \lverb|1.1. Modified in 1.2i, it does simply \xintiTrunc0 with no
+% shortcut (the latter having been modified)
+%|
+% \begin{macrocode}
+\def\xintTTrunc {\romannumeral0\xintttrunc }%
+\def\xintttrunc {\xintitrunc\xint_c_}%
+% \end{macrocode}
+% \subsection{\cshnolabel{xintNum}}
+% \begin{macrocode}
+\let\xintnum \xintttrunc
+% \end{macrocode}
+% \subsection{\csh{xintRound}, \csh{xintiRound}}
+% \lverb|Modified in 1.2i.
+%
+% It benefits first of all from the faster \xintTrunc, particularly when the
+% input is already a decimal number (denominator B=1).
+%
+% And the rounding is now done in 1.2 style (with much delay, sorry), like of
+% the rewritten \xintInc and \xintDec.|
+% \begin{macrocode}
+\def\xintRound {\romannumeral0\xintround }%
+\def\xintiRound {\romannumeral0\xintiround }%
+\def\xintround #1{\expandafter\XINT_round\the\numexpr #1.\XINT_round_A}%
+\def\xintiround #1{\expandafter\XINT_round\the\numexpr #1.\XINT_iround_A}%
+\def\XINT_round #1.{\expandafter\XINT_round_aa\the\numexpr #1+\xint_c_i.#1.}%
+\def\XINT_round_aa #1.#2.#3#4%
+{%
+ \expandafter\XINT_round_a\romannumeral0\XINT_infrac{#4}#1.#3#2.%
+}%
+\def\XINT_round_a #1#2#3#4.%
+{%
+ \if0\XINT_Sgn#2\xint:\xint_dothis\XINT_trunc_zero\fi
+ \if1\XINT_is_One#3XY\xint_dothis\XINT_trunc_sp_b\fi
+ \xint_orthat\XINT_trunc_b #1+#4.{#2}{#3}%
+}%
+\def\XINT_round_A{\expandafter\XINT_trunc_G\romannumeral0\XINT_round_B}%
+\def\XINT_iround_A{\expandafter\XINT_itrunc_G\romannumeral0\XINT_round_B}%
+\def\XINT_round_B #1.%
+ {\XINT_dsrr #1\xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax.}%
+% \end{macrocode}
+% \subsection{\csh{xintXTrunc}}
+% \lverb@1.09j [2014/01/06] This is completely expandable but not f-expandable.
+% Rewritten for 1.2i (2016/12/04):
+%
+% - no more use of \xintiloop from xinttools.sty
+% (replaced by \xintreplicate... from xintkernel.sty),
+%
+% - no more use in 0>N>-D case of a dummy control sequence name via
+% \csname...\endcsname
+%
+% - handles better the case of an input already a decimal number
+%
+% Need to transfer code comments into public dtx.
+% @
+% \begin{macrocode}
+\def\xintXTrunc #1%#2%
+{%
+ \expandafter\XINT_xtrunc_a
+ \the\numexpr #1\expandafter.\romannumeral0\xintraw
+}%
+\def\XINT_xtrunc_a #1.% ?? faire autre chose
+{%
+ \expandafter\XINT_xtrunc_b\the\numexpr\ifnum#1<\xint_c_i \xint_c_i-\fi #1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_b #1.#2{\XINT_xtrunc_c #2{#1}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_c #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_xtrunc_zero
+ 0#1{-\XINT_xtrunc_d {}}%
+ 0-{\XINT_xtrunc_d #1}%
+ \krof
+}%[
+\def\XINT_xtrunc_zero #1#2]{0.\romannumeral\xintreplicate{#1}0}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_d #1#2#3/#4[#5]%
+{%
+ \XINT_xtrunc_prepare_a#4\R\R\R\R\R\R\R\R {10}0000001\W
+ !{#4};{#5}{#2}{#1#3}%
+}%
+\def\XINT_xtrunc_prepare_a #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_R #9\XINT_xtrunc_prepare_small\R
+ \XINT_xtrunc_prepare_b #9%
+}%
+\def\XINT_xtrunc_prepare_small\R #1!#2;%
+{%
+ \ifcase #2
+ \or\expandafter\XINT_xtrunc_BisOne
+ \or\expandafter\XINT_xtrunc_BisTwo
+ \or
+ \or\expandafter\XINT_xtrunc_BisFour
+ \or\expandafter\XINT_xtrunc_BisFive
+ \or
+ \or
+ \or\expandafter\XINT_xtrunc_BisEight
+ \fi\XINT_xtrunc_BisSmall {#2}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_BisOne\XINT_xtrunc_BisSmall #1#2#3#4%
+ {\XINT_xtrunc_sp_e {#2}{#4}{#3}}%
+\def\XINT_xtrunc_BisTwo\XINT_xtrunc_BisSmall #1#2#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\xintiimul 5{#4}}{#3}%
+}%
+\def\XINT_xtrunc_BisFour\XINT_xtrunc_BisSmall #1#2#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_ii\expandafter}\expandafter
+ {\romannumeral0\xintiimul {25}{#4}}{#3}%
+}%
+\def\XINT_xtrunc_BisFive\XINT_xtrunc_BisSmall #1#2#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\xintdouble {#4}}{#3}%
+}%
+\def\XINT_xtrunc_BisEight\XINT_xtrunc_BisSmall #1#2#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_iii\expandafter}\expandafter
+ {\romannumeral0\xintiimul {125}{#4}}{#3}%
+}%
+\def\XINT_xtrunc_BisSmall #1%
+{%
+ \expandafter\XINT_xtrunc_e\expandafter
+ {\expandafter\XINT_xtrunc_small_a
+ \the\numexpr #1/\xint_c_ii\expandafter
+ .\the\numexpr \xint_c_x^viii+#1!}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_small_a #1.#2!#3%
+{%
+ \expandafter\XINT_div_small_b\the\numexpr #1\expandafter
+ \xint:\the\numexpr #2\expandafter!%
+ \romannumeral0\XINT_div_small_ba #3\R\R\R\R\R\R\R\R{10}0000001\W
+ #3\XINT_sepbyviii_Z_end 2345678\relax
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_prepare_b
+ {\expandafter\XINT_xtrunc_prepare_c\romannumeral0\XINT_zeroes_forviii }%
+\def\XINT_xtrunc_prepare_c #1!%
+{%
+ \XINT_xtrunc_prepare_d #1.00000000!{#1}%
+}%
+\def\XINT_xtrunc_prepare_d #1#2#3#4#5#6#7#8#9%
+{%
+ \expandafter\XINT_xtrunc_prepare_e
+ \xint_gob_til_dot #1#2#3#4#5#6#7#8#9!%
+}%
+\def\XINT_xtrunc_prepare_e #1!#2!#3#4%
+{%
+ \XINT_xtrunc_prepare_f #4#3\X {#1}{#3}%
+}%
+\def\XINT_xtrunc_prepare_f #1#2#3#4#5#6#7#8#9\X
+{%
+ \expandafter\XINT_xtrunc_prepare_g\expandafter
+ \XINT_div_prepare_g
+ \the\numexpr #1#2#3#4#5#6#7#8+\xint_c_i\expandafter
+ \xint:\the\numexpr (#1#2#3#4#5#6#7#8+\xint_c_i)/\xint_c_ii\expandafter
+ \xint:\the\numexpr #1#2#3#4#5#6#7#8\expandafter
+ \xint:\romannumeral0\XINT_sepandrev_andcount
+ #1#2#3#4#5#6#7#8#9\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678\relax\xint_c_ii\xint_c_i
+ \R\xint:\xint_c_xii \R\xint:\xint_c_x \R\xint:\xint_c_viii \R\xint:\xint_c_vi
+ \R\xint:\xint_c_iv \R\xint:\xint_c_ii \R\xint:\xint_c_\W
+ \X
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_prepare_g #1;{\XINT_xtrunc_e {#1}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_e #1#2%
+{%
+ \ifnum #2<\xint_c_
+ \expandafter\XINT_xtrunc_I
+ \else
+ \expandafter\XINT_xtrunc_II
+ \fi #2\xint:{#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_I -#1\xint:#2#3#4%
+{%
+ \expandafter\XINT_xtrunc_I_a\romannumeral0#2{#4}{#2}{#1}{#3}%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_I_a #1#2#3#4#5%
+{%
+ \expandafter\XINT_xtrunc_I_b\the\numexpr #4-#5\xint:#4\xint:{#5}{#2}{#3}{#1}%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_I_b #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_IA_c
+ -\XINT_xtrunc_IB_c
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_IA_c -#1\xint:#2\xint:#3#4#5#6%
+{%
+ \expandafter\XINT_xtrunc_IA_d
+ \the\numexpr#2-\xintLength{#6}\xint:{#6}%
+ \expandafter\XINT_xtrunc_IA_xd
+ \the\numexpr (#1+\xint_c_ii^v)/\xint_c_ii^vi-\xint_c_i\xint:#1\xint:{#5}{#4}%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_IA_d #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_IAA_e
+ -\XINT_xtrunc_IAB_e
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_IAA_e -#1\xint:#2%
+{%
+ \romannumeral0\XINT_split_fromleft
+ #1.#2\xint_gobble_i\xint_bye2345678\xint_bye..%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_IAB_e #1\xint:#2%
+{%
+ 0.\romannumeral\XINT_rep#1\endcsname0#2%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_IA_xd #1\xint:#2\xint:%
+{%
+ \expandafter\XINT_xtrunc_IA_xe\the\numexpr #2-\xint_c_ii^vi*#1\xint:#1\xint:%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_IA_xe #1\xint:#2\xint:#3#4%
+{%
+ \XINT_xtrunc_loop {#2}{#4}{#3}{#1}%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_IB_c #1\xint:#2\xint:#3#4#5#6%
+{%
+ \expandafter\XINT_xtrunc_IB_d
+ \romannumeral0\XINT_split_xfork #1.#6\xint_bye2345678\xint_bye..{#3}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_IB_d #1.#2.#3%
+{%
+ \expandafter\XINT_xtrunc_IA_d\the\numexpr#3-\xintLength {#1}\xint:{#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_II #1\xint:%
+{%
+ \expandafter\XINT_xtrunc_II_a\romannumeral\xintreplicate{#1}0\xint:%
+}%
+\def\XINT_xtrunc_II_a #1\xint:#2#3#4%
+{%
+ \expandafter\XINT_xtrunc_II_b
+ \the\numexpr (#3+\xint_c_ii^v)/\xint_c_ii^vi-\xint_c_i\expandafter\xint:%
+ \the\numexpr #3\expandafter\xint:\romannumeral0#2{#4#1}{#2}%
+}%
+\def\XINT_xtrunc_II_b #1\xint:#2\xint:%
+{%
+ \expandafter\XINT_xtrunc_II_c\the\numexpr #2-\xint_c_ii^vi*#1\xint:#1\xint:%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_II_c #1\xint:#2\xint:#3#4#5%
+{%
+ #3.\XINT_xtrunc_loop {#2}{#4}{#5}{#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_loop #1%
+{%
+ \ifnum #1=\xint_c_ \expandafter\XINT_xtrunc_transition\fi
+ \expandafter\XINT_xtrunc_loop_a\the\numexpr #1-\xint_c_i\xint:%
+}%
+\def\XINT_xtrunc_loop_a #1\xint:#2#3%
+{%
+ \expandafter\XINT_xtrunc_loop_b\romannumeral0#3%
+ {#20000000000000000000000000000000000000000000000000000000000000000}%
+ {#1}{#3}%
+}%
+\def\XINT_xtrunc_loop_b #1#2#3%
+{%
+ \romannumeral\xintreplicate{\xint_c_ii^vi-\xintLength{#1}}0#1%
+ \XINT_xtrunc_loop {#3}{#2}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_transition
+ \expandafter\XINT_xtrunc_loop_a\the\numexpr #1\xint:#2#3#4%
+{%
+ \ifnum #4=\xint_c_ \expandafter\xint_gobble_vi\fi
+ \expandafter\XINT_xtrunc_finish\expandafter
+ {\romannumeral0\XINT_dsx_addzeros{#4}#2;}{#3}{#4}%
+}%
+\def\XINT_xtrunc_finish #1#2%
+{%
+ \expandafter\XINT_xtrunc_finish_a\romannumeral0#2{#1}%
+}%
+\def\XINT_xtrunc_finish_a #1#2#3%
+{%
+ \romannumeral\xintreplicate{#3-\xintLength{#1}}0#1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_e #1%
+{%
+ \ifnum #1<\xint_c_
+ \expandafter\XINT_xtrunc_sp_I
+ \else
+ \expandafter\XINT_xtrunc_sp_II
+ \fi #1\xint:%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_I -#1\xint:#2#3%
+{%
+ \expandafter\XINT_xtrunc_sp_I_a\the\numexpr #1-#3\xint:#1\xint:{#3}{#2}%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_I_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_sp_IA_b
+ -\XINT_xtrunc_sp_IB_b
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_IA_b -#1\xint:#2\xint:#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_IA_c
+ \the\numexpr#2-\xintLength{#4}\xint:{#4}\romannumeral\XINT_rep#1\endcsname0%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_IA_c #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_sp_IAA
+ -\XINT_xtrunc_sp_IAB
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_IAA -#1\xint:#2%
+{%
+ \romannumeral0\XINT_split_fromleft
+ #1.#2\xint_gobble_i\xint_bye2345678\xint_bye..%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_IAB #1\xint:#2%
+{%
+ 0.\romannumeral\XINT_rep#1\endcsname0#2%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_IB_b #1\xint:#2\xint:#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_IB_c
+ \romannumeral0\XINT_split_xfork #1.#4\xint_bye2345678\xint_bye..{#3}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_IB_c #1.#2.#3%
+{%
+ \expandafter\XINT_xtrunc_sp_IA_c\the\numexpr#3-\xintLength {#1}\xint:{#1}%
+}%
+% \end{macrocode}
+% \lverb@&
+% @
+% \begin{macrocode}
+\def\XINT_xtrunc_sp_II #1\xint:#2#3%
+{%
+ #2\romannumeral\XINT_rep#1\endcsname0.\romannumeral\XINT_rep#3\endcsname0%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintDigits}}
+% \lverb|The mathchardef used to be called \XINT_digits, but for reasons
+% originating in \xintNewExpr (and now obsolete), release 1.09a uses
+% \XINTdigits without underscore.|
+% \begin{macrocode}
+\mathchardef\XINTdigits 16
+\def\xintDigits #1#2%
+ {\afterassignment \xint_gobble_i \mathchardef\XINTdigits=}%
+\def\xinttheDigits {\number\XINTdigits }%
+% \end{macrocode}
+% \subsection{\csh{xintAdd}}
+% \lverb|Big change at 1.3: a/b+c/d uses lcm(b,d) as denominator.|
+% \begin{macrocode}
+\def\xintAdd {\romannumeral0\xintadd }%
+\def\xintadd #1{\expandafter\XINT_fadd\romannumeral0\xintraw {#1}}%
+\def\XINT_fadd #1{\xint_gob_til_zero #1\XINT_fadd_Azero 0\XINT_fadd_a #1}%
+\def\XINT_fadd_Azero #1]{\xintraw }%
+\def\XINT_fadd_a #1/#2[#3]#4%
+ {\expandafter\XINT_fadd_b\romannumeral0\xintraw {#4}{#3}{#1}{#2}}%
+\def\XINT_fadd_b #1{\xint_gob_til_zero #1\XINT_fadd_Bzero 0\XINT_fadd_c #1}%
+\def\XINT_fadd_Bzero #1]#2#3#4{ #3/#4[#2]}%
+\def\XINT_fadd_c #1/#2[#3]#4%
+{%
+ \expandafter\XINT_fadd_Aa\the\numexpr #4-#3.{#3}{#4}{#1}{#2}%
+}%
+\def\XINT_fadd_Aa #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_fadd_B
+ 0#1\XINT_fadd_Bb
+ 0-\XINT_fadd_Ba
+ \krof #1%
+}%
+\def\XINT_fadd_B #1.#2#3#4#5#6#7{\XINT_fadd_C {#4}{#5}{#7}{#6}[#3]}%
+\def\XINT_fadd_Ba #1.#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_fadd_C\expandafter
+ {\romannumeral0\XINT_dsx_addzeros {#1}#6;}%
+ {#7}{#5}{#4}[#2]%
+}%
+\def\XINT_fadd_Bb -#1.#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_fadd_C\expandafter
+ {\romannumeral0\XINT_dsx_addzeros {#1}#4;}%
+ {#5}{#7}{#6}[#3]%
+}%
+\def\XINT_fadd_iszero #1[#2]{ 0/1[0]}% ou [#2] originel?
+\def\XINT_fadd_C #1#2#3%
+{%
+ \expandafter\XINT_fadd_D_b
+ \romannumeral0\XINT_div_prepare{#2}{#3}{#2}{#2}{#3}{#1}%
+}%
+% \end{macrocode}
+% \lverb|Basically a clone of the \XINT_irr_loop_a loop. I should modify the
+% output of \XINT_div_prepare perhaps to be optimized for checking if
+% remainder vanishes.|
+% \begin{macrocode}
+\def\XINT_fadd_D_a #1#2%
+{%
+ \expandafter\XINT_fadd_D_b
+ \romannumeral0\XINT_div_prepare {#1}{#2}{#1}%
+}%
+\def\XINT_fadd_D_b #1#2{\XINT_fadd_D_c #2\Z}%
+\def\XINT_fadd_D_c #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_fadd_D_exit0\XINT_fadd_D_a {#1#2}%
+}%
+\def\XINT_fadd_D_exit0\XINT_fadd_D_a #1#2#3%
+{%
+ \expandafter\XINT_fadd_E
+ \romannumeral0\xintiiquo {#3}{#2}.{#2}%
+}%
+\def\XINT_fadd_E #1.#2#3%
+{%
+ \expandafter\XINT_fadd_F
+ \romannumeral0\xintiimul{#1}{#3}.{\xintiiQuo{#3}{#2}}{#1}%
+}%
+\def\XINT_fadd_F #1.#2#3#4#5%
+{%
+ \expandafter\XINT_fadd_G
+ \romannumeral0\xintiiadd{\xintiiMul{#2}{#4}}{\xintiiMul{#3}{#5}}/#1%
+}%
+\def\XINT_fadd_G #1{%
+\def\XINT_fadd_G ##1{\if0##1\expandafter\XINT_fadd_iszero\fi#1##1}%
+}\XINT_fadd_G{ }%
+% \end{macrocode}
+% \subsection{\csh{xintSub}}
+% \lverb|Since 1.3 will use least common multiple of denominators.|
+% \begin{macrocode}
+\def\xintSub {\romannumeral0\xintsub }%
+\def\xintsub #1{\expandafter\XINT_fsub\romannumeral0\xintraw {#1}}%
+\def\XINT_fsub #1{\xint_gob_til_zero #1\XINT_fsub_Azero 0\XINT_fsub_a #1}%
+\def\XINT_fsub_Azero #1]{\xintopp }%
+\def\XINT_fsub_a #1/#2[#3]#4%
+ {\expandafter\XINT_fsub_b\romannumeral0\xintraw {#4}{#3}{#1}{#2}}%
+\def\XINT_fsub_b #1{\xint_UDzerominusfork
+ #1-\XINT_fadd_Bzero
+ 0#1\XINT_fadd_c
+ 0-{\XINT_fadd_c -#1}%
+ \krof }%
+% \end{macrocode}
+% \subsection{\csh{xintSum}}
+% \lverb|There was (not documented anymore since 1.09d, 2013/10/22) a macro
+% \xintSumExpr, but it has been deleted at 1.2l.
+%
+% Empty items are not accepted by this macro.|
+% \begin{macrocode}
+\def\xintSum {\romannumeral0\xintsum }%
+\def\xintsum #1{\expandafter\XINT_fsumexpr\romannumeral`&&@#1\xint:}%
+\def\XINT_fsumexpr {\XINT_fsum_loop_a {0/1[0]}}%
+\def\XINT_fsum_loop_a #1#2%
+{%
+ \expandafter\XINT_fsum_loop_b \romannumeral`&&@#2\xint:{#1}%
+}%
+\def\XINT_fsum_loop_b #1%
+{%
+ \xint_gob_til_xint: #1\XINT_fsum_finished\xint:\XINT_fsum_loop_c #1%
+}%
+\def\XINT_fsum_loop_c #1\xint:#2%
+{%
+ \expandafter\XINT_fsum_loop_a\expandafter{\romannumeral0\xintadd {#2}{#1}}%
+}%
+\def\XINT_fsum_finished #1\xint:\xint:#2{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintMul}}
+% \begin{macrocode}
+\def\xintMul {\romannumeral0\xintmul }%
+\def\xintmul #1{\expandafter\XINT_fmul\romannumeral0\xintraw {#1}.}%
+\def\XINT_fmul #1{\xint_gob_til_zero #1\XINT_fmul_zero 0\XINT_fmul_a #1}%
+\def\XINT_fmul_a #1[#2].#3%
+ {\expandafter\XINT_fmul_b\romannumeral0\xintraw {#3}#1[#2.]}%
+\def\XINT_fmul_b #1{\xint_gob_til_zero #1\XINT_fmul_zero 0\XINT_fmul_c #1}%
+\def\XINT_fmul_c #1/#2[#3]#4/#5[#6.]%
+{%
+ \expandafter\XINT_fmul_d
+ \expandafter{\the\numexpr #3+#6\expandafter}%
+ \expandafter{\romannumeral0\xintiimul {#5}{#2}}%
+ {\romannumeral0\xintiimul {#4}{#1}}%
+}%
+\def\XINT_fmul_d #1#2#3%
+{%
+ \expandafter \XINT_fmul_e \expandafter{#3}{#1}{#2}%
+}%
+\def\XINT_fmul_e #1#2{\XINT_outfrac {#2}{#1}}%
+\def\XINT_fmul_zero #1.#2{ 0/1[0]}%
+% \end{macrocode}
+% \subsection{\csh{xintSqr}}
+% \lverb|1.1 modifs comme xintMul.
+%
+% |
+% \begin{macrocode}
+\def\xintSqr {\romannumeral0\xintsqr }%
+\def\xintsqr #1{\expandafter\XINT_fsqr\romannumeral0\xintraw {#1}}%
+\def\XINT_fsqr #1{\xint_gob_til_zero #1\XINT_fsqr_zero 0\XINT_fsqr_a #1}%
+\def\XINT_fsqr_a #1/#2[#3]%
+{%
+ \expandafter\XINT_fsqr_b
+ \expandafter{\the\numexpr #3+#3\expandafter}%
+ \expandafter{\romannumeral0\xintiisqr {#2}}%
+ {\romannumeral0\xintiisqr {#1}}%
+}%
+\def\XINT_fsqr_b #1#2#3{\expandafter \XINT_fmul_e \expandafter{#3}{#1}{#2}}%
+\def\XINT_fsqr_zero #1]{ 0/1[0]}%
+% \end{macrocode}
+% \subsection{\csh{xintPow}}
+% \lverb|&
+% 1.2f: to be coherent with the "i" convention \xintiPow should parse also its
+% exponent via \xintNum when xintfrac.sty is loaded. This was not the case so
+% far. Cependant le problème est que le fait d'appliquer \xintNum rend
+% impossible certains inputs qui auraient pu être gérès par \numexpr. Le
+% \numexpr externe est ici pour intercepter trop grand input.
+% |
+% \begin{macrocode}
+\def\xintipow #1#2%
+{%
+ \expandafter\xint_pow\the\numexpr \xintNum{#2}\expandafter
+ .\romannumeral0\xintnum{#1}\xint:
+}%
+\def\xintPow {\romannumeral0\xintpow }%
+\def\xintpow #1%
+{%
+ \expandafter\XINT_fpow\expandafter {\romannumeral0\XINT_infrac {#1}}%
+}%
+\def\XINT_fpow #1#2%
+{%
+ \expandafter\XINT_fpow_fork\the\numexpr \xintNum{#2}\relax\Z #1%
+}%
+\def\XINT_fpow_fork #1#2\Z
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_fpow_zero
+ 0#1\XINT_fpow_neg
+ 0-{\XINT_fpow_pos #1}%
+ \krof
+ {#2}%
+}%
+\def\XINT_fpow_zero #1#2#3#4{ 1/1[0]}%
+\def\XINT_fpow_pos #1#2#3#4#5%
+{%
+ \expandafter\XINT_fpow_pos_A\expandafter
+ {\the\numexpr #1#2*#3\expandafter}\expandafter
+ {\romannumeral0\xintiipow {#5}{#1#2}}%
+ {\romannumeral0\xintiipow {#4}{#1#2}}%
+}%
+\def\XINT_fpow_neg #1#2#3#4%
+{%
+ \expandafter\XINT_fpow_pos_A\expandafter
+ {\the\numexpr -#1*#2\expandafter}\expandafter
+ {\romannumeral0\xintiipow {#3}{#1}}%
+ {\romannumeral0\xintiipow {#4}{#1}}%
+}%
+\def\XINT_fpow_pos_A #1#2#3%
+{%
+ \expandafter\XINT_fpow_pos_B\expandafter {#3}{#1}{#2}%
+}%
+\def\XINT_fpow_pos_B #1#2{\XINT_outfrac {#2}{#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintFac}}
+% \lverb|Factorial coefficients: variant which can be chained with other
+% xintfrac macros. \xintiFac deprecated at 1.2o and removed at 1.3; \xintFac
+% used by xintexpr.sty.|
+% \begin{macrocode}
+\def\xintFac {\romannumeral0\xintfac}%
+\def\xintfac #1{\expandafter\XINT_fac_fork\the\numexpr\xintNum{#1}.[0]}%
+% \end{macrocode}
+% \subsection{\csh{xintBinomial}}
+% \lverb|1.2f. Binomial coefficients. \xintiBinomial deprecated at 1.2o and
+% removed at 1.3;
+% \xintBinomial needed by xintexpr.sty.|
+% \begin{macrocode}
+\def\xintBinomial {\romannumeral0\xintbinomial}%
+\def\xintbinomial #1#2%
+{%
+ \expandafter\XINT_binom_pre
+ \the\numexpr\xintNum{#1}\expandafter.\the\numexpr\xintNum{#2}.[0]%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintPFactorial}}
+% \lverb|1.2f. Partial factorial. For needs of xintexpr.sty.|
+% \begin{macrocode}
+\def\xintipfactorial #1#2%
+{%
+ \expandafter\XINT_pfac_fork
+ \the\numexpr\xintNum{#1}\expandafter.\the\numexpr\xintNum{#2}.%
+}%
+\def\xintPFactorial {\romannumeral0\xintpfactorial}%
+\def\xintpfactorial #1#2%
+{%
+ \expandafter\XINT_pfac_fork
+ \the\numexpr\xintNum{#1}\expandafter.\the\numexpr\xintNum{#2}.[0]%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintPrd}}
+% \lverb|There was (not documented anymore since 1.09d, 2013/10/22) a macro
+% \xintPrdExpr, but it has been deleted at 1.2l
+% |
+% \begin{macrocode}
+\def\xintPrd {\romannumeral0\xintprd }%
+\def\xintprd #1{\expandafter\XINT_fprdexpr \romannumeral`&&@#1\xint:}%
+\def\XINT_fprdexpr {\XINT_fprod_loop_a {1/1[0]}}%
+\def\XINT_fprod_loop_a #1#2%
+{%
+ \expandafter\XINT_fprod_loop_b \romannumeral`&&@#2\xint:{#1}%
+}%
+\def\XINT_fprod_loop_b #1%
+{%
+ \xint_gob_til_xint: #1\XINT_fprod_finished\xint:\XINT_fprod_loop_c #1%
+}%
+\def\XINT_fprod_loop_c #1\xint:#2%
+{%
+ \expandafter\XINT_fprod_loop_a\expandafter{\romannumeral0\xintmul {#1}{#2}}%
+}%
+\def\XINT_fprod_finished#1\xint:\xint:#2{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintDiv}}
+% \begin{macrocode}
+\def\xintDiv {\romannumeral0\xintdiv }%
+\def\xintdiv #1%
+{%
+ \expandafter\XINT_fdiv\expandafter {\romannumeral0\XINT_infrac {#1}}%
+}%
+\def\XINT_fdiv #1#2%
+ {\expandafter\XINT_fdiv_A\romannumeral0\XINT_infrac {#2}#1}%
+\def\XINT_fdiv_A #1#2#3#4#5#6%
+{%
+ \expandafter\XINT_fdiv_B
+ \expandafter{\the\numexpr #4-#1\expandafter}%
+ \expandafter{\romannumeral0\xintiimul {#2}{#6}}%
+ {\romannumeral0\xintiimul {#3}{#5}}%
+}%
+\def\XINT_fdiv_B #1#2#3%
+{%
+ \expandafter\XINT_fdiv_C
+ \expandafter{#3}{#1}{#2}%
+}%
+\def\XINT_fdiv_C #1#2{\XINT_outfrac {#2}{#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintDivFloor}}
+% \lverb|1.1. Changed at 1.2p to not append /1[0] ending but rather output a
+% big integer in strict format, like \xintDivTrunc and \xintDivRound.|
+% \begin{macrocode}
+\def\xintDivFloor {\romannumeral0\xintdivfloor }%
+\def\xintdivfloor #1#2{\xintifloor{\xintDiv {#1}{#2}}}%
+% \end{macrocode}
+% \subsection{\csh{xintDivTrunc}}
+% \lverb|1.1. \xintttrunc rather than \xintitrunc0 in 1.1a|
+% \begin{macrocode}
+\def\xintDivTrunc {\romannumeral0\xintdivtrunc }%
+\def\xintdivtrunc #1#2{\xintttrunc {\xintDiv {#1}{#2}}}%
+% \end{macrocode}
+% \subsection{\csh{xintDivRound}}
+% \lverb|1.1|
+% \begin{macrocode}
+\def\xintDivRound {\romannumeral0\xintdivround }%
+\def\xintdivround #1#2{\xintiround 0{\xintDiv {#1}{#2}}}%
+% \end{macrocode}
+% \subsection{\csh{xintModTrunc}}
+% \lverb|1.1. \xintModTrunc {q1}{q2} computes q1 - q2*t(q1/q2) with t(q1/q2)
+% equal to the truncated division of two fractions q1 and q2.
+%
+% Its former name, prior to 1.2p, was \xintMod.
+%
+% At 1.3, uses least common multiple denominator, like \xintMod (next).|
+% \begin{macrocode}
+\def\xintModTrunc {\romannumeral0\xintmodtrunc }%
+\def\xintmodtrunc #1{\expandafter\XINT_modtrunc_a\romannumeral0\xintraw{#1}.}%
+\def\XINT_modtrunc_a #1#2.#3%
+ {\expandafter\XINT_modtrunc_b\expandafter #1\romannumeral0\xintraw{#3}#2.}%
+\def\XINT_modtrunc_b #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_modtrunc_divbyzero #1#2}\fi
+ \if0#1\xint_dothis\XINT_modtrunc_aiszero\fi
+ \if-#2\xint_dothis{\XINT_modtrunc_bneg #1}\fi
+ \xint_orthat{\XINT_modtrunc_bpos #1#2}%
+}%
+\def\XINT_modtrunc_divbyzero #1#2[#3]#4.%
+{%
+ \XINT_signalcondition{DivisionByZero}{Division by #2[#3] of #1#4}{}{0/1[0]}%
+}%
+\def\XINT_modtrunc_aiszero #1.{ 0/1[0]}%
+\def\XINT_modtrunc_bneg #1%
+{%
+ \xint_UDsignfork
+ #1{\xintiiopp\XINT_modtrunc_pos {}}%
+ -{\XINT_modtrunc_pos #1}%
+ \krof
+}%
+\def\XINT_modtrunc_bpos #1%
+{%
+ \xint_UDsignfork
+ #1{\xintiiopp\XINT_modtrunc_pos {}}%
+ -{\XINT_modtrunc_pos #1}%
+ \krof
+}%
+% \end{macrocode}
+% \lverb|Attention. This crucially uses that xint's \xintiiE{x}{e} is defined
+% to return x unchanged if e is negative (and x extended by e zeroes if e >=
+% 0).|
+% \begin{macrocode}
+\def\XINT_modtrunc_pos #1#2/#3[#4]#5/#6[#7].%
+{%
+ \expandafter\XINT_modtrunc_pos_a
+ \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.%
+ \romannumeral0\expandafter\XINT_mod_D_b
+ \romannumeral0\XINT_div_prepare{#3}{#6}{#3}{#3}{#6}%
+ {#1#5}{#7-#4}{#2}{#4-#7}%
+}%
+\def\XINT_modtrunc_pos_a #1.#2#3#4{\xintiirem {#3}{#4}/#2[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintDivMod}}
+% \lverb|1.2p. \xintDivMod{q1}{q2} outputs {floor(q1/q2)}{q1 - q2*floor(q1/q2)}.
+% Attention that it relies on \xintiiE{x}{e} returning x if e < 0.
+%
+% Modified (like \xintAdd and \xintSub) at 1.3 to use a l.c.m for final
+% denominator of the "mod" part.|
+% \begin{macrocode}
+\def\xintDivMod {\romannumeral0\xintdivmod }%
+\def\xintdivmod #1{\expandafter\XINT_divmod_a\romannumeral0\xintraw{#1}.}%
+\def\XINT_divmod_a #1#2.#3%
+ {\expandafter\XINT_divmod_b\expandafter #1\romannumeral0\xintraw{#3}#2.}%
+\def\XINT_divmod_b #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_divmod_divbyzero #1#2}\fi
+ \if0#1\xint_dothis\XINT_divmod_aiszero\fi
+ \if-#2\xint_dothis{\XINT_divmod_bneg #1}\fi
+ \xint_orthat{\XINT_divmod_bpos #1#2}%
+}%
+\def\XINT_divmod_divbyzero #1#2[#3]#4.%
+{%
+ \XINT_signalcondition{DivisionByZero}{Division by #2[#3] of #1#4}{}%
+ {{0}{0/1[0]}}% à revoir...
+}%
+\def\XINT_divmod_aiszero #1.{{0}{0/1[0]}}%
+\def\XINT_divmod_bneg #1% f // -g = (-f) // g, f % -g = - ((-f) % g)
+{%
+ \expandafter\XINT_divmod_bneg_finish
+ \romannumeral0\xint_UDsignfork
+ #1{\XINT_divmod_bpos {}}%
+ -{\XINT_divmod_bpos {-#1}}%
+ \krof
+}%
+\def\XINT_divmod_bneg_finish#1#2%
+{%
+ \expandafter\xint_exchangetwo_keepbraces\expandafter
+ {\romannumeral0\xintiiopp#2}{#1}%
+}%
+\def\XINT_divmod_bpos #1#2/#3[#4]#5/#6[#7].%
+{%
+ \expandafter\XINT_divmod_bpos_a
+ \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.%
+ \romannumeral0\expandafter\XINT_mod_D_b
+ \romannumeral0\XINT_div_prepare{#3}{#6}{#3}{#3}{#6}%
+ {#1#5}{#7-#4}{#2}{#4-#7}%
+}%
+\def\XINT_divmod_bpos_a #1.#2#3#4%
+{%
+ \expandafter\XINT_divmod_bpos_finish
+ \romannumeral0\xintiidivision{#3}{#4}{/#2[#1]}%
+}%
+\def\XINT_divmod_bpos_finish #1#2#3{{#1}{#2#3}}%
+% \end{macrocode}
+% \subsection{\csh{xintMod}}
+% \lverb|1.2p. \xintMod{q1}{q2} computes q1 - q2*floor(q1/q2). Attention that
+% it relies on \xintiiE{x}{e} returning x if e < 0.
+%
+% Prior to 1.2p, that macro had the meaning now attributed to \xintModTrunc.
+%
+% Modified (like \xintAdd and \xintSub) at 1.3 to use a l.c.m for final
+% denominator.|
+% \begin{macrocode}
+\def\xintMod {\romannumeral0\xintmod }%
+\def\xintmod #1{\expandafter\XINT_mod_a\romannumeral0\xintraw{#1}.}%
+\def\XINT_mod_a #1#2.#3%
+ {\expandafter\XINT_mod_b\expandafter #1\romannumeral0\xintraw{#3}#2.}%
+\def\XINT_mod_b #1#2% #1 de A, #2 de B.
+{%
+ \if0#2\xint_dothis{\XINT_mod_divbyzero #1#2}\fi
+ \if0#1\xint_dothis\XINT_mod_aiszero\fi
+ \if-#2\xint_dothis{\XINT_mod_bneg #1}\fi
+ \xint_orthat{\XINT_mod_bpos #1#2}%
+}%
+% \end{macrocode}
+% \lverb|Attention to not move ModTrunc code beyond that point.|
+% \begin{macrocode}
+\let\XINT_mod_divbyzero\XINT_modtrunc_divbyzero
+\let\XINT_mod_aiszero \XINT_modtrunc_aiszero
+\def\XINT_mod_bneg #1% f % -g = - ((-f) % g), for g > 0
+{%
+ \xintiiopp\xint_UDsignfork
+ #1{\XINT_mod_bpos {}}%
+ -{\XINT_mod_bpos {-#1}}%
+ \krof
+}%
+\def\XINT_mod_bpos #1#2/#3[#4]#5/#6[#7].%
+{%
+ \expandafter\XINT_mod_bpos_a
+ \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.%
+ \romannumeral0\expandafter\XINT_mod_D_b
+ \romannumeral0\XINT_div_prepare{#3}{#6}{#3}{#3}{#6}%
+ {#1#5}{#7-#4}{#2}{#4-#7}%
+}%
+\def\XINT_mod_D_a #1#2%
+{%
+ \expandafter\XINT_mod_D_b
+ \romannumeral0\XINT_div_prepare {#1}{#2}{#1}%
+}%
+\def\XINT_mod_D_b #1#2{\XINT_mod_D_c #2\Z}%
+\def\XINT_mod_D_c #1#2\Z
+{%
+ \xint_gob_til_zero #1\XINT_mod_D_exit0\XINT_mod_D_a {#1#2}%
+}%
+\def\XINT_mod_D_exit0\XINT_mod_D_a #1#2#3%
+{%
+ \expandafter\XINT_mod_E
+ \romannumeral0\xintiiquo {#3}{#2}.{#2}%
+}%
+\def\XINT_mod_E #1.#2#3%
+{%
+ \expandafter\XINT_mod_F
+ \romannumeral0\xintiimul{#1}{#3}.{\xintiiQuo{#3}{#2}}{#1}%
+}%
+\def\XINT_mod_F #1.#2#3#4#5#6#7%
+{%
+ {#1}{\xintiiE{\xintiiMul{#4}{#3}}{#5}}%
+ {\xintiiE{\xintiiMul{#6}{#2}}{#7}}%
+}%
+\def\XINT_mod_bpos_a #1.#2#3#4{\xintiirem {#3}{#4}/#2[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintIsOne}}
+% \lverb|New with 1.09a. Could be more efficient. For fractions with big
+% powers of tens, it is better to use \xintCmp{f}{1}. Restyled in 1.09i.|
+% \begin{macrocode}
+\def\xintIsOne {\romannumeral0\xintisone }%
+\def\xintisone #1{\expandafter\XINT_fracisone
+ \romannumeral0\xintrawwithzeros{#1}\Z }%
+\def\XINT_fracisone #1/#2\Z
+ {\if0\xintiiCmp {#1}{#2}\xint_afterfi{ 1}\else\xint_afterfi{ 0}\fi}%
+% \end{macrocode}
+% \subsection{\csh{xintGeq}}
+% \begin{macrocode}
+\def\xintGeq {\romannumeral0\xintgeq }%
+\def\xintgeq #1%
+{%
+ \expandafter\XINT_fgeq\expandafter {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT_fgeq #1#2%
+{%
+ \expandafter\XINT_fgeq_A \romannumeral0\xintabs {#2}#1%
+}%
+\def\XINT_fgeq_A #1%
+{%
+ \xint_gob_til_zero #1\XINT_fgeq_Zii 0%
+ \XINT_fgeq_B #1%
+}%
+\def\XINT_fgeq_Zii 0\XINT_fgeq_B #1[#2]#3[#4]{ 1}%
+\def\XINT_fgeq_B #1/#2[#3]#4#5/#6[#7]%
+{%
+ \xint_gob_til_zero #4\XINT_fgeq_Zi 0%
+ \expandafter\XINT_fgeq_C\expandafter
+ {\the\numexpr #7-#3\expandafter}\expandafter
+ {\romannumeral0\xintiimul {#4#5}{#2}}%
+ {\romannumeral0\xintiimul {#6}{#1}}%
+}%
+\def\XINT_fgeq_Zi 0#1#2#3#4#5#6#7{ 0}%
+\def\XINT_fgeq_C #1#2#3%
+{%
+ \expandafter\XINT_fgeq_D\expandafter
+ {#3}{#1}{#2}%
+}%
+\def\XINT_fgeq_D #1#2#3%
+{%
+ \expandafter\XINT_cntSgnFork\romannumeral`&&@\expandafter\XINT_cntSgn
+ \the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax\xint:
+ { 0}{\XINT_fgeq_E #2\Z {#3}{#1}}{ 1}%
+}%
+\def\XINT_fgeq_E #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_fgeq_Fd
+ -{\XINT_fgeq_Fn #1}%
+ \krof
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_fgeq_Fd #1\Z #2#3%
+{%
+ \expandafter\XINT_fgeq_Fe
+ \romannumeral0\XINT_dsx_addzeros {#1}#3;\xint:#2\xint:
+}%
+\def\XINT_fgeq_Fe #1\xint:#2#3\xint:{\XINT_geq_plusplus #2#1\xint:#3\xint:}%
+\def\XINT_fgeq_Fn #1\Z #2#3%
+{%
+ \expandafter\XINT_fgeq_Fo
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;\xint:#3\xint:
+}%
+\def\XINT_fgeq_Fo #1#2\xint:#3\xint:{\XINT_geq_plusplus #1#3\xint:#2\xint:}%
+% \end{macrocode}
+% \subsection{\csh{xintMax}}
+% \begin{macrocode}
+\def\xintMax {\romannumeral0\xintmax }%
+\def\xintmax #1%
+{%
+ \expandafter\XINT_fmax\expandafter {\romannumeral0\xintraw {#1}}%
+}%
+\def\XINT_fmax #1#2%
+{%
+ \expandafter\XINT_fmax_A\romannumeral0\xintraw {#2}#1%
+}%
+\def\XINT_fmax_A #1#2/#3[#4]#5#6/#7[#8]%
+{%
+ \xint_UDsignsfork
+ #1#5\XINT_fmax_minusminus
+ -#5\XINT_fmax_firstneg
+ #1-\XINT_fmax_secondneg
+ --\XINT_fmax_nonneg_a
+ \krof
+ #1#5{#2/#3[#4]}{#6/#7[#8]}%
+}%
+\def\XINT_fmax_minusminus --%
+ {\expandafter-\romannumeral0\XINT_fmin_nonneg_b }%
+\def\XINT_fmax_firstneg #1-#2#3{ #1#2}%
+\def\XINT_fmax_secondneg -#1#2#3{ #1#3}%
+\def\XINT_fmax_nonneg_a #1#2#3#4%
+{%
+ \XINT_fmax_nonneg_b {#1#3}{#2#4}%
+}%
+\def\XINT_fmax_nonneg_b #1#2%
+{%
+ \if0\romannumeral0\XINT_fgeq_A #1#2%
+ \xint_afterfi{ #1}%
+ \else \xint_afterfi{ #2}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintMaxof}}
+% \lverb|1.2l protects \xintMaxof against items with non terminated
+% \the\numexpr expressions.
+%
+% The macro is not compatible with an empty list.|
+% \begin{macrocode}
+\def\xintMaxof {\romannumeral0\xintmaxof }%
+\def\xintmaxof #1{\expandafter\XINT_maxof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_maxof_a #1{\expandafter\XINT_maxof_b\romannumeral0\xintraw{#1}!}%
+\def\XINT_maxof_b #1!#2%
+ {\expandafter\XINT_maxof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_maxof_c #1%
+ {\xint_gob_til_xint: #1\XINT_maxof_e\xint:\XINT_maxof_d #1}%
+\def\XINT_maxof_d #1!%
+ {\expandafter\XINT_maxof_b\romannumeral0\xintmax {#1}}%
+\def\XINT_maxof_e #1!#2!{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintMin}}
+% \begin{macrocode}
+\def\xintMin {\romannumeral0\xintmin }%
+\def\xintmin #1%
+{%
+ \expandafter\XINT_fmin\expandafter {\romannumeral0\xintraw {#1}}%
+}%
+\def\XINT_fmin #1#2%
+{%
+ \expandafter\XINT_fmin_A\romannumeral0\xintraw {#2}#1%
+}%
+\def\XINT_fmin_A #1#2/#3[#4]#5#6/#7[#8]%
+{%
+ \xint_UDsignsfork
+ #1#5\XINT_fmin_minusminus
+ -#5\XINT_fmin_firstneg
+ #1-\XINT_fmin_secondneg
+ --\XINT_fmin_nonneg_a
+ \krof
+ #1#5{#2/#3[#4]}{#6/#7[#8]}%
+}%
+\def\XINT_fmin_minusminus --%
+ {\expandafter-\romannumeral0\XINT_fmax_nonneg_b }%
+\def\XINT_fmin_firstneg #1-#2#3{ -#3}%
+\def\XINT_fmin_secondneg -#1#2#3{ -#2}%
+\def\XINT_fmin_nonneg_a #1#2#3#4%
+{%
+ \XINT_fmin_nonneg_b {#1#3}{#2#4}%
+}%
+\def\XINT_fmin_nonneg_b #1#2%
+{%
+ \if0\romannumeral0\XINT_fgeq_A #1#2%
+ \xint_afterfi{ #2}%
+ \else \xint_afterfi{ #1}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\csh{xintMinof}}
+% \lverb|1.2l protects \xintMinof against items with non terminated
+% \the\numexpr expressions.
+%
+% The macro is not compatible with an empty list.|
+% \begin{macrocode}
+\def\xintMinof {\romannumeral0\xintminof }%
+\def\xintminof #1{\expandafter\XINT_minof_a\romannumeral`&&@#1\xint:}%
+\def\XINT_minof_a #1{\expandafter\XINT_minof_b\romannumeral0\xintraw{#1}!}%
+\def\XINT_minof_b #1!#2%
+ {\expandafter\XINT_minof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_minof_c #1%
+ {\xint_gob_til_xint: #1\XINT_minof_e\xint:\XINT_minof_d #1}%
+\def\XINT_minof_d #1!%
+ {\expandafter\XINT_minof_b\romannumeral0\xintmin {#1}}%
+\def\XINT_minof_e #1!#2!{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintCmp}}
+% \begin{macrocode}
+\def\xintCmp {\romannumeral0\xintcmp }%
+\def\xintcmp #1%
+{%
+ \expandafter\XINT_fcmp\expandafter {\romannumeral0\xintraw {#1}}%
+}%
+\def\XINT_fcmp #1#2%
+{%
+ \expandafter\XINT_fcmp_A\romannumeral0\xintraw {#2}#1%
+}%
+\def\XINT_fcmp_A #1#2/#3[#4]#5#6/#7[#8]%
+{%
+ \xint_UDsignsfork
+ #1#5\XINT_fcmp_minusminus
+ -#5\XINT_fcmp_firstneg
+ #1-\XINT_fcmp_secondneg
+ --\XINT_fcmp_nonneg_a
+ \krof
+ #1#5{#2/#3[#4]}{#6/#7[#8]}%
+}%
+\def\XINT_fcmp_minusminus --#1#2{\XINT_fcmp_B #2#1}%
+\def\XINT_fcmp_firstneg #1-#2#3{ -1}%
+\def\XINT_fcmp_secondneg -#1#2#3{ 1}%
+\def\XINT_fcmp_nonneg_a #1#2%
+{%
+ \xint_UDzerosfork
+ #1#2\XINT_fcmp_zerozero
+ 0#2\XINT_fcmp_firstzero
+ #10\XINT_fcmp_secondzero
+ 00\XINT_fcmp_pos
+ \krof
+ #1#2%
+}%
+\def\XINT_fcmp_zerozero #1#2#3#4{ 0}%
+\def\XINT_fcmp_firstzero #1#2#3#4{ -1}%
+\def\XINT_fcmp_secondzero #1#2#3#4{ 1}%
+\def\XINT_fcmp_pos #1#2#3#4%
+{%
+ \XINT_fcmp_B #1#3#2#4%
+}%
+\def\XINT_fcmp_B #1/#2[#3]#4/#5[#6]%
+{%
+ \expandafter\XINT_fcmp_C\expandafter
+ {\the\numexpr #6-#3\expandafter}\expandafter
+ {\romannumeral0\xintiimul {#4}{#2}}%
+ {\romannumeral0\xintiimul {#5}{#1}}%
+}%
+\def\XINT_fcmp_C #1#2#3%
+{%
+ \expandafter\XINT_fcmp_D\expandafter
+ {#3}{#1}{#2}%
+}%
+\def\XINT_fcmp_D #1#2#3%
+{%
+ \expandafter\XINT_cntSgnFork\romannumeral`&&@\expandafter\XINT_cntSgn
+ \the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax\xint:
+ { -1}{\XINT_fcmp_E #2\Z {#3}{#1}}{ 1}%
+}%
+\def\XINT_fcmp_E #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_fcmp_Fd
+ -{\XINT_fcmp_Fn #1}%
+ \krof
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_fcmp_Fd #1\Z #2#3%
+{%
+ \expandafter\XINT_fcmp_Fe
+ \romannumeral0\XINT_dsx_addzeros {#1}#3;\xint:#2\xint:
+}%
+\def\XINT_fcmp_Fe #1\xint:#2#3\xint:{\XINT_cmp_plusplus #2#1\xint:#3\xint:}%
+\def\XINT_fcmp_Fn #1\Z #2#3%
+{%
+ \expandafter\XINT_fcmp_Fo
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;\xint:#3\xint:
+}%
+\def\XINT_fcmp_Fo #1#2\xint:#3\xint:{\XINT_cmp_plusplus #1#3\xint:#2\xint:}%
+% \end{macrocode}
+% \subsection{\csh{xintAbs}}
+% \begin{macrocode}
+\def\xintAbs {\romannumeral0\xintabs }%
+\def\xintabs #1{\expandafter\XINT_abs\romannumeral0\xintraw {#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintOpp}}
+% \begin{macrocode}
+\def\xintOpp {\romannumeral0\xintopp }%
+\def\xintopp #1{\expandafter\XINT_opp\romannumeral0\xintraw {#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintInv}}
+% \changed{1.3d}{}
+% \begin{macrocode}
+\def\xintInv {\romannumeral0\xintinv }%
+\def\xintinv #1{\expandafter\XINT_inv\romannumeral0\xintraw {#1}}%
+\def\XINT_inv #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_inv_iszero
+ 0#1\XINT_inv_a
+ 0-{\XINT_inv_a {}}%
+ \krof #1%
+}%
+\def\XINT_inv_iszero #1]%
+ {\XINT_signalcondition{DivisionByZero}{Division of 1 by zero (#1])}{}{0/1[0]}}%
+\def\XINT_inv_a #1#2/#3[#4#5]%
+{%
+ \xint_UDzerominusfork
+ #4-\XINT_inv_expiszero
+ 0#4\XINT_inv_b
+ 0-{\XINT_inv_b -#4}%
+ \krof #5.{#1#3/#2}%
+}%
+\def\XINT_inv_expiszero #1.#2{ #2[0]}%
+\def\XINT_inv_b #1.#2{ #2[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintSgn}}
+% \begin{macrocode}
+\def\xintSgn {\romannumeral0\xintsgn }%
+\def\xintsgn #1{\expandafter\XINT_sgn\romannumeral0\xintraw {#1}\xint:}%
+% \end{macrocode}
+% \subsection{Floating point macros}
+%
+% For a long time the float routines dating back to releases |1.07/1.08a|
+% (May-June 2013) were not modified.
+%
+% Since |1.2f| (March 2016) the four operations first round their arguments to
+% |\xinttheDigits|-floats (or |P|-floats), not (|\xinttheDigits+2|)-floats or
+% (|P+2|)-floats as was the case with earlier releases.
+%
+% The four operations addition, subtraction, multiplication, division have
+% always produced the correct rounding of the theoretical exact value to |P|
+% or |\xinttheDigits| digits when the inputs are decimal numbers with at most
+% |P| digits, and arbitrary decimal exponent part.
+%
+% From |1.08a| to |1.2j|, |\xintFloat| (and |\XINTinFloat| which is used to
+% parse inputs to other float macros) handled a fractional input |A/B| via an
+% initial replacement to |A'/B'| where |A'| and |B'| were |A| and |B|
+% truncated to |Q+2| digits (where asked-for precision is |Q|), and then they
+% correctly rounded |A'/B'| to |Q| digits. But this meant that this rounding of
+% the input could differ (by up to one unit in the last place) from the
+% correct rounding of the original |A/B| to the asked-for number of
+% digits (which until |1.2f| in uses as auxiliary to the macros for the basic
+% operations was 2 more than the prevailing precision).
+%
+% Since |1.2k| all inputs are correctly rounded to the asked-for number of
+% digits (this was, I think, the case in the |1.07| release -- there are no
+% code comments -- but was, afaicr, not very efficiently done, and this is why
+% the |1.08a| release opeted for truncation of the numerator and denominator.)
+%
+% Notice that in float expressions, the |/| is treated as operator, hence the
+% above discussion makes a difference only for the special input form
+% |qfloat(A/B)| or for an |\xintexpr A/B\relax| embedded in the float
+% expression, with |A| or |B| having more digits than the prevailing float
+% precision.
+%
+% \begin{framed}
+% Internally there is no inner representation of |P|-floats as such !!!!!
+%
+% The input parser will again compute the length of the mantissa on each use
+% !!! This is obviously something that must be improved upon before
+% implementation of higher functions.
+%
+% Currently, special tricks are used to quickly recognize inputs having no
+% denominators, or fractions whose numerators and denominators are not too
+% long compared to the target precision |P|, and in particular |P|-floats or
+% quotients of two such.
+%
+% Another long-standing issue is that float multiplication will first
+% compute the |2P| or |2P-1| digits of the exact product, and then round it
+% to |P| digits. This is sub-optimal for large |P| particularly as the
+% multiplication algorithm is basically the schoolbook one, hence
+% \emph{worse} than quadratic in the \TeX\ implementation which has extra
+% cost of fetching long sequences of tokens.
+% \end{framed}
+%
+%
+% \subsection{\csh{xintFloat}}
+% \lverb|&
+% 1.2f and 1.2g brought some refactoring which resulted in faster treatment of
+% decimal inputs. 1.2i dropped use of some old routines dating back to pre 1.2
+% era in favor of more modern \xintDSRr for rounding. Then 1.2k improves
+% again the handling of denominators B with few digits.
+%
+% But the main change with 1.2k is a complete rewrite of the B>1 case in
+% order to achieve again correct rounding in all cases.
+%
+% The original version from 1.07 (May 2013) computed the exact rounding
+% to P digits for all inputs. But from 1.08 on (June 2013), the macro handled
+% A/B input by first truncating both A and B to at most P+2 digits. This meant
+% that decimal input (arbitrarily long, with scientific part) was correctly
+% rounded, but in case of fractional input there could be up to 0.6 unit in
+% the last place difference of the produced rounding to the input, hence the
+% output could differ from the correct rounding.
+%
+% Example with 16 digits (the default): \xintFloat {1/17597472569900621233}$newline
+% with xintfrac 1.07: 5.682634230727187e-20$newline
+% with xintfrac 1.08b--1.2j: 5.682634230727188e-20$newline
+% with xintfrac 1.2k: 5.682634230727187e-20$newline
+% The exact value is 5.682634230727187499924124...e-20, showing that 1.07 and
+% 1.2k
+% produce the correct rounding.
+%
+% Currently the code ends in a more costly branch in about 1 case among 500,
+% where it does some extra operations (a multiplication in particular). There
+% is a free parameter delta (here set at 4), I have yet to make some numerical
+% explorations, to see if it could be favorable to set it to a higher value
+% (with delta=5, there is only 1 exceptional case in 5000, etc...).
+%
+% I have always hesitated about the policy of printing 10.00...0 in case of
+% rounding upwards to the next power of ten. Already since 1.2f \XINTinFloat
+% always produced a mantissa with exactly P digits (except for the zero
+% value). Starting with 1.2k, \xintFloat drops this habit of printing
+% 10.00..0 in such cases. Side note: the rounding-up detection worked when the
+% input A/B was with numerator A and denominator B having each less than P+2
+% digits, or with B=1, else, it could happen that the output was a power of
+% ten but not detected to be a rounding up of the original fraction. The value
+% was ok, but printed 1.0...0eN with P-1 zeroes, not 10.0...0e(N-1).
+%
+% I decided it was not worth the effort to enhance the algorithm to detect
+% with 100$% fiability all cases of rounding up to next
+% power of ten, hence 1.2k dropped this.
+%
+% To avoid duplication of code, and any extra burden on \XINTinFloat, which is
+% the macro used internally by the float macros for parsing their inputs, we
+% simply make now \xintFloat a wrapper of \XINTinFloat.|
+% \begin{macrocode}
+\def\xintFloat {\romannumeral0\xintfloat }%
+\def\xintfloat #1{\XINT_float_chkopt #1\xint:}%
+\def\XINT_float_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_float_opt
+ \else\expandafter\XINT_float_noopt
+ \fi #1%
+}%
+\def\XINT_float_noopt #1\xint:%
+{%
+ \expandafter\XINT_float_post
+ \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.%
+}%
+\def\XINT_float_opt [\xint:#1]%
+{%
+ \expandafter\XINT_float_opt_a\the\numexpr #1.%
+}%
+\def\XINT_float_opt_a #1.#2%
+{%
+ \expandafter\XINT_float_post
+ \romannumeral0\XINTinfloat[#1]{#2}#1.%
+}%
+\def\XINT_float_post #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_float_zero
+ 0#1\XINT_float_neg
+ 0-\XINT_float_pos
+ \krof #1%
+}%[
+\def\XINT_float_zero #1]#2.{ 0.e0}%
+\def\XINT_float_neg-{\expandafter-\romannumeral0\XINT_float_pos}%
+\def\XINT_float_pos #1#2[#3]#4.%
+{%
+ \expandafter\XINT_float_pos_done\the\numexpr#3+#4-\xint_c_i.#1.#2;%
+}%
+\def\XINT_float_pos_done #1.#2;{ #2e#1}%
+% \end{macrocode}
+% \subsection{\csh{XINTinFloat}, \csh{XINTinFloatS}, \csh{XINTiLogTen}}
+% \lverb|&
+% This routine is like \xintFloat but produces an output of the shape A[N]
+% which is then parsed faster as input to other float macros.
+% Float operations in \xintfloatexpr...\relax use internally this format.
+%
+% It must be used in form \XINTinFloat[P]{f}: the optional [P] is
+% mandatory.
+%
+% Since 1.2f, the mantissa always has exactly P digits even in case of
+% rounding up to next power of ten. This simplifies other routines.
+%
+% 1.2g added a variant \XINTinFloatS which, in case of decimal input with less
+% than the asked for precision P will not add extra zeros to the mantissa. For
+% example it may output 2[0] even if P=500, rather than the canonical
+% representation 200...000[-499]. This is how \xintFloatMul and \xintFloatDiv
+% parse their inputs, which speeds-up follow-up processing. But \xintFloatAdd
+% and \xintFloatSub still use \XINTinFloat for parsing their inputs; anyway
+% this will have to be changed again when inner structure will carry upfront
+% at least the length of mantissa as data.
+%
+% Each time \XINTinFloat is called it at least computes a length. Naturally if
+% we had some format for floats that would be dispensed of...$newline
+% something like
+% <letterP><length of mantissa>.mantissa.exponent, etc... not yet.
+%
+% Since 1.2k, \XINTinFloat always correctly rounds its argument, even if it
+% is a fraction with very big numerator and denominator. See the discussion of
+% \xintFloat.
+%
+% 1.3e adds \XINTiLogTen.
+% |
+% \begin{macrocode}
+\def\XINTinFloat {\romannumeral0\XINTinfloat }%
+\def\XINTinfloat
+ {\expandafter\XINT_infloat_clean\romannumeral0\XINT_infloat}%
+% \end{macrocode}
+% \lverb|Attention que ici le fait que l'on grabbe #1 est important car il
+% pourrait y avoir un zéro (en particulier dans le cas où input est nul).|
+% \begin{macrocode}
+\def\XINT_infloat_clean #1%
+ {\if #1!\xint_dothis\XINT_infloat_clean_a\fi\xint_orthat{ }#1}%
+% \end{macrocode}
+% \lverb|Ici on ajoute les zeros pour faire exactement avec P chiffres.
+% Car le #1 = P - L avec L la longueur de #2, (ou de abs(#2), ici le #2 peut
+% avoir un signe) qui est < P|
+% \begin{macrocode}
+\def\XINT_infloat_clean_a !#1.#2[#3]%
+{%
+ \expandafter\XINT_infloat_done
+ \the\numexpr #3-#1\expandafter.%
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;;%
+}%
+\def\XINT_infloat_done #1.#2;{ #2[#1]}%
+% \end{macrocode}
+% \lverb|variant which allows output with shorter mantissas.|
+% \begin{macrocode}
+\def\XINTinFloatS {\romannumeral0\XINTinfloatS}%
+\def\XINTinfloatS
+ {\expandafter\XINT_infloatS_clean\romannumeral0\XINT_infloat}%
+\def\XINT_infloatS_clean #1%
+ {\if #1!\xint_dothis\XINT_infloatS_clean_a\fi\xint_orthat{ }#1}%
+\def\XINT_infloatS_clean_a !#1.{ }%
+% \end{macrocode}
+% \lverb|1.3e ajoute \XINTiLogTen. Le comportement pour un input nul est non
+% encore finalisé. Il changera lorsque NaN, +Inf, -Inf existeront.|
+% \begin{macrocode}
+\def\XINTFloatiLogTen {\the\numexpr\XINTfloatilogten}%
+\def\XINTfloatilogten [#1]#2%
+ {\expandafter\XINT_floatilogten\romannumeral0\XINT_infloat[#1]{#2}#1.}%
+\def\XINT_floatilogten #1{%
+ \if #10\xint_dothis\XINT_floatilogten_z\fi
+ \if #1!\xint_dothis\XINT_floatilogten_a\fi
+ \xint_orthat\XINT_floatilogten_b #1%
+}%
+\def\XINT_floatilogten_z 0[0]#1.{-"7FFF8000\relax}%
+\def\XINT_floatilogten_a !#1.#2[#3]#4.{#3-#1+#4-1\relax}%
+\def\XINT_floatilogten_b #1[#2]#3.{#2+#3-1\relax}%
+% \end{macrocode}
+% \lverb|début de la routine proprement dite,
+% l'argument optionnel est obligatoire.|
+% \begin{macrocode}
+\def\XINT_infloat [#1]#2%
+{%
+ \expandafter\XINT_infloat_a\the\numexpr #1\expandafter.%
+ \romannumeral0\XINT_infrac {#2}%
+}%
+% \end{macrocode}
+% \lverb| #1=P, #2=n, #3=A, #4=B.|
+% \begin{macrocode}
+\def\XINT_infloat_a #1.#2#3#4%
+{%
+% \end{macrocode}
+% \lverb|micro boost au lieu d'utiliser \XINT_isOne{#4}, mais pas bon style.|
+% \begin{macrocode}
+ \if1\XINT_is_One#4XY%
+ \expandafter\XINT_infloat_sp
+ \else\expandafter\XINT_infloat_fork
+ \fi #3.{#1}{#2}{#4}%
+}%
+% \end{macrocode}
+% \lverb|Special quick treatment of B=1 case (1.2f then again 1.2g.)$newline
+% maintenant: A.{P}{N}{1}
+% Il est possible que A soit nul.
+% |
+% \begin{macrocode}
+\def\XINT_infloat_sp #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_infloat_spzero
+ 0#1\XINT_infloat_spneg
+ 0-\XINT_infloat_sppos
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb|Attention surtout pas 0/1[0] ici.|
+% \begin{macrocode}
+\def\XINT_infloat_spzero 0.#1#2#3{ 0[0]}%
+\def\XINT_infloat_spneg-%
+ {\expandafter\XINT_infloat_spnegend\romannumeral0\XINT_infloat_sppos}%
+\def\XINT_infloat_spnegend #1%
+ {\if#1!\expandafter\XINT_infloat_spneg_needzeros\fi -#1}%
+\def\XINT_infloat_spneg_needzeros -!#1.{!#1.-}%
+% \end{macrocode}
+% \lverb|in: A.{P}{N}{1}$newline
+% out: P-L.A.P.N.|
+% \begin{macrocode}
+\def\XINT_infloat_sppos #1.#2#3#4%
+{%
+ \expandafter\XINT_infloat_sp_b\the\numexpr#2-\xintLength{#1}.#1.#2.#3.%
+}%
+% \end{macrocode}
+% \lverb|#1= P-L. Si c'est positif ou nul il faut retrancher #1 à l'exposant, et
+% ajouter autant de zéros. On regarde premier token.
+% P-L.A.P.N.|
+% \begin{macrocode}
+\def\XINT_infloat_sp_b #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_infloat_sp_quick
+ 0#1\XINT_infloat_sp_c
+ 0-\XINT_infloat_sp_needzeros
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb|Ici P=L. Le cas usuel dans \xintfloatexpr.|
+% \begin{macrocode}
+\def\XINT_infloat_sp_quick 0.#1.#2.#3.{ #1[#3]}%
+% \end{macrocode}
+% \lverb|Ici #1=P-L est >0. L'exposant sera N-(P-L). #2=A. #3=P. #4=N.$newline
+% 18 mars 2016. En fait dans certains contextes il est sous-optimal d'ajouter les
+% zéros. Par exemple quand c'est appelé par la multiplication ou la division,
+% c'est idiot de convertir 2 en 200000...00000[-499].
+% Donc je redéfinis addzeros en needzeroes. Si on appelle sous la forme
+% \XINTinFloatS, on ne fait pas l'addition de zeros.|
+% \begin{macrocode}
+\def\XINT_infloat_sp_needzeros #1.#2.#3.#4.{!#1.#2[#4]}%
+% \end{macrocode}
+% \lverb|L-P=#1.A=#2#3.P=#4.N=#5.$newline
+% Ici P<L. Il va falloir arrondir. Attention si on va à la puissance de 10
+% suivante. En #1 on a L-P qui est >0. L'exposant final sera N+L-P,
+% sauf dans le cas spécial, il sera alors N+L-P+1. L'ajustement final
+% est fait par \XINT_infloat_Y.|
+% \begin{macrocode}
+\def\XINT_infloat_sp_c -#1.#2#3.#4.#5.%
+{%
+ \expandafter\XINT_infloat_Y
+ \the\numexpr #5+#1\expandafter.%
+ \romannumeral0\expandafter\XINT_infloat_sp_round
+ \romannumeral0\XINT_split_fromleft
+ (\xint_c_i+#4).#2#3\xint_bye2345678\xint_bye..#2%
+}%
+\def\XINT_infloat_sp_round #1.#2.%
+{%
+ \XINT_dsrr#1\xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax.%
+}%
+% \end{macrocode}
+% \lverb|General branch for A/B with B>1 inputs. It achieves correct rounding
+% always since 1.2k (done January 2, 2017.) This branch is never taken for A=0
+% because \XINT_infrac will have returned B=1 then.|
+% \begin{macrocode}
+\def\XINT_infloat_fork #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_infloat_J
+ -\XINT_infloat_K
+ \krof #1%
+}%
+\def\XINT_infloat_J-{\expandafter-\romannumeral0\XINT_infloat_K }%
+% \end{macrocode}
+% \lverb?A.{P}{n}{B} avec B>1.?
+% \begin{macrocode}
+\def\XINT_infloat_K #1.#2%
+{%
+ \expandafter\XINT_infloat_L
+ \the\numexpr\xintLength{#1}\expandafter.\the\numexpr #2+\xint_c_iv.{#1}{#2}%
+}%
+% \end{macrocode}
+% \lverb?|A|.P+4.{A}{P}{n}{B}. We check if A already has length
+% <= P+4.?
+% \begin{macrocode}
+\def\XINT_infloat_L #1.#2.%
+{%
+ \ifnum #1>#2
+ \expandafter\XINT_infloat_Ma
+ \else
+ \expandafter\XINT_infloat_Mb
+ \fi #1.#2.%
+}%
+% \end{macrocode}
+% \lverb?|A|.P+4.{A}{P}{n}{B}. We will keep only the first P+4
+% digits of A, denoted A'' in what follows.
+%
+% output: u=-0.A''.junk.P+4.|A|.{A}{P}{n}{B}?
+% \begin{macrocode}
+\def\XINT_infloat_Ma #1.#2.#3%
+{%
+ \expandafter\XINT_infloat_MtoN\expandafter-\expandafter0\expandafter.%
+ \romannumeral0\XINT_split_fromleft#2.#3\xint_bye2345678\xint_bye..%
+ #2.#1.{#3}%
+}%
+% \end{macrocode}
+% \lverb?|A|.P+4.{A}{P}{n}{B}.$newline
+% Here A is short. We set u = P+4-|A|, and A''=A (A' = 10^u A)
+%
+% output: u.A''..P+4.|A|.{A}{P}{n}{B}?
+% \begin{macrocode}
+\def\XINT_infloat_Mb #1.#2.#3%
+{%
+ \expandafter\XINT_infloat_MtoN\the\numexpr#2-#1.%
+ #3..#2.#1.{#3}%
+}%
+% \end{macrocode}
+% \lverb?input u.A''.junk.P+4.|A|.{A}{P}{n}{B}$newline
+% output |B|.P+4.{B}u.A''.P.|A|.n.{A}{B}?
+% \begin{macrocode}
+\def\XINT_infloat_MtoN #1.#2.#3.#4.#5.#6#7#8#9%
+{%
+ \expandafter\XINT_infloat_N
+ \the\numexpr\xintLength{#9}.#4.{#9}#1.#2.#7.#5.#8.{#6}{#9}%
+}%
+\def\XINT_infloat_N #1.#2.%
+{%
+ \ifnum #1>#2
+ \expandafter\XINT_infloat_Oa
+ \else
+ \expandafter\XINT_infloat_Ob
+ \fi #1.#2.%
+}%
+% \end{macrocode}
+% \lverb?input |B|.P+4.{B}u.A''.P.|A|.n.{A}{B}$newline
+% output v=-0.B''.junk.|B|.u.A''.P.|A|.n.{A}{B}?
+% \begin{macrocode}
+\def\XINT_infloat_Oa #1.#2.#3%
+{%
+ \expandafter\XINT_infloat_P\expandafter-\expandafter0\expandafter.%
+ \romannumeral0\XINT_split_fromleft#2.#3\xint_bye2345678\xint_bye..%
+ #1.%
+}%
+% \end{macrocode}
+% \lverb?output v=P+4-|B|>=0.B''.junk.|B|.u.A''.P.|A|.n.{A}{B}?
+% \begin{macrocode}
+\def\XINT_infloat_Ob #1.#2.#3%
+{%
+ \expandafter\XINT_infloat_P\the\numexpr#2-#1.#3..#1.%
+}%
+% \end{macrocode}
+% \lverb?input v.B''.junk.|B|.u.A''.P.|A|.n.{A}{B}$newline
+% output Q1.P.|B|.|A|.n.{A}{B}$newline
+% Q1 = division euclidienne de A''.10^{u-v+P+3} par B''.
+%
+% Special detection of cases with A and B both having length at most P+4: this
+% will happen when called from \xintFloatDiv as A and B (produced then via
+% \XINTinFloatS) will have at most P digits. We then only need integer division
+% with P+1 extra zeros, not P+3.?
+% \begin{macrocode}
+\def\XINT_infloat_P #1#2.#3.#4.#5.#6#7.#8.#9.%
+{%
+ \csname XINT_infloat_Q\if-#1\else\if-#6\else q\fi\fi\expandafter\endcsname
+ \romannumeral0\xintiiquo
+ {\romannumeral0\XINT_dsx_addzerosnofuss
+ {#6#7-#1#2+#9+\xint_c_iii\if-#1\else\if-#6\else-\xint_c_ii\fi\fi}#8;}%
+ {#3}.#9.#5.%
+}%
+% \end{macrocode}
+% \lverb?«quick» branch.?
+% \begin{macrocode}
+\def\XINT_infloat_Qq #1.#2.%
+{%
+ \expandafter\XINT_infloat_Rq
+ \romannumeral0\XINT_split_fromleft#2.#1\xint_bye2345678\xint_bye..#2.%
+}%
+\def\XINT_infloat_Rq #1.#2#3.%
+{%
+ \ifnum#2<\xint_c_v
+ \expandafter\XINT_infloat_SEq
+ \else\expandafter\XINT_infloat_SUp
+ \fi
+ {\if.#3.\xint_c_\else\xint_c_i\fi}#1.%
+}%
+% \end{macrocode}
+% \lverb?standard branch which will have to handle undecided rounding, if too
+% close to a mid-value.?
+% \begin{macrocode}
+\def\XINT_infloat_Q #1.#2.%
+{%
+ \expandafter\XINT_infloat_R
+ \romannumeral0\XINT_split_fromleft#2.#1\xint_bye2345678\xint_bye..#2.%
+}%
+\def\XINT_infloat_R #1.#2#3#4#5.%
+{%
+ \if.#5.\expandafter\XINT_infloat_Sa\else\expandafter\XINT_infloat_Sb\fi
+ #2#3#4#5.#1.%
+}%
+% \end{macrocode}
+% \lverb?trailing digits.Q.P.|B|.|A|.n.{A}{B}$newline
+% #1=trailing digits (they may have leading zeros.)?
+% \begin{macrocode}
+\def\XINT_infloat_Sa #1.%
+{%
+ \ifnum#1>500 \xint_dothis\XINT_infloat_SUp\fi
+ \ifnum#1<499 \xint_dothis\XINT_infloat_SEq\fi
+ \xint_orthat\XINT_infloat_X\xint_c_
+}%
+\def\XINT_infloat_Sb #1.%
+{%
+ \ifnum#1>5009 \xint_dothis\XINT_infloat_SUp\fi
+ \ifnum#1<4990 \xint_dothis\XINT_infloat_SEq\fi
+ \xint_orthat\XINT_infloat_X\xint_c_i
+}%
+% \end{macrocode}
+% \lverb?epsilon #2=Q.#3=P.#4=|B|.#5=|A|.#6=n.{A}{B}$newline
+% exposant final est n+|A|-|B|-P+epsilon?
+% \begin{macrocode}
+\def\XINT_infloat_SEq #1#2.#3.#4.#5.#6.#7#8%
+{%
+ \expandafter\XINT_infloat_SY
+ \the\numexpr #6+#5-#4-#3+#1.#2.%
+}%
+\def\XINT_infloat_SY #1.#2.{ #2[#1]}%
+% \end{macrocode}
+% \lverb?initial digit #2 put aside to check for case of rounding up to
+% next power of ten, which will need adjustment of mantissa and exponent.?
+% \begin{macrocode}
+\def\XINT_infloat_SUp #1#2#3.#4.#5.#6.#7.#8#9%
+{%
+ \expandafter\XINT_infloat_Y
+ \the\numexpr#7+#6-#5-#4+#1\expandafter.%
+ \romannumeral0\xintinc{#2#3}.#2%
+}%
+% \end{macrocode}
+% \lverb?epsilon Q.P.|B|.|A|.n.{A}{B}$newline
+%
+% \xintDSH{-x}{U} multiplies U by 10^x. When x is negative, this means
+% it truncates (i.e. it drops the last -x digits).
+%
+% We don't try to optimize too much macro calls here, the odds are 2 per 1000
+% for this branch to be taken. Perhaps in future I will use higher free
+% parameter d, which currently is set at 4.
+%
+% #1=epsilon, #2#3=Q, #4=P, #5=|B|, #6=|A|, #7=n, #8=A, #9=B?
+% \begin{macrocode}
+\def\XINT_infloat_X #1#2#3.#4.#5.#6.#7.#8#9%
+{%
+ \expandafter\XINT_infloat_Y
+ \the\numexpr #7+#6-#5-#4+#1\expandafter.%
+ \romannumeral`&&@\romannumeral0\xintiiiflt
+ {\xintDSH{#6-#5-#4+#1}{\xintDouble{#8}}}%
+ {\xintiiMul{\xintInc{\xintDouble{#2#3}}}{#9}}%
+ \xint_firstofone
+ \xintinc{#2#3}.#2%
+}%
+% \end{macrocode}
+% \lverb?check for rounding up to next power of ten.?
+% \begin{macrocode}
+\def\XINT_infloat_Y #1{%
+\def\XINT_infloat_Y ##1.##2##3.##4%
+{%
+ \if##49\if##21\expandafter\expandafter\expandafter\XINT_infloat_Z\fi\fi
+ #1##2##3[##1]%
+}}\XINT_infloat_Y{ }%
+% \end{macrocode}
+% \lverb?#1=1, #2=0.?
+% \begin{macrocode}
+\def\XINT_infloat_Z #1#2#3[#4]%
+{%
+ \expandafter\XINT_infloat_ZZ\the\numexpr#4+\xint_c_i.#3.%
+}%
+\def\XINT_infloat_ZZ #1.#2.{ 1#2[#1]}%
+% \end{macrocode}
+% \subsection{\csh{xintPFloat}}
+% \lverb|1.1. This is a prettifying printing macro for floats.
+%
+%
+% The macro applies one simple rule: x.yz...eN will drop scientific notation in
+% favor of pure decimal notation if -5<=N<=5. This is the default behaviour of
+% Maple. The N here is as produced on output by \xintFloat.
+%
+% Special case: the zero value is printed 0. (with a dot)
+%
+% The coding got simpler with 1.2k as its \xintFloat always produces
+% a mantissa with exactly P digits (no more 10.0...0eN annoying exception).
+%
+% |
+% \begin{macrocode}
+\def\xintPFloat {\romannumeral0\xintpfloat }%
+\def\xintpfloat #1{\XINT_pfloat_chkopt #1\xint:}%
+\def\XINT_pfloat_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_pfloat_opt
+ \else\expandafter\XINT_pfloat_noopt
+ \fi #1%
+}%
+\def\XINT_pfloat_noopt #1\xint:%
+{%
+ \expandafter\XINT_pfloat_a
+ \romannumeral0\xintfloat [\XINTdigits]{#1};\XINTdigits.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_opt [\xint:#1]%
+{%
+ \expandafter\XINT_pfloat_opt_a \the\numexpr #1.%
+}%
+\def\XINT_pfloat_opt_a #1.#2%
+{%
+ \expandafter\XINT_pfloat_a\romannumeral0\xintfloat [#1]{#2};#1.%
+}%
+\def\XINT_pfloat_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_pfloat_zero
+ 0#1\XINT_pfloat_neg
+ 0-\XINT_pfloat_pos
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_zero #1;#2.{ 0.}%
+\def\XINT_pfloat_neg-{\expandafter-\romannumeral0\XINT_pfloat_pos }%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_pos #1.#2e#3;#4.%
+{%
+ \ifnum #3>\xint_c_v \xint_dothis\XINT_pfloat_no\fi
+ \ifnum #3<-\xint_c_v \xint_dothis\XINT_pfloat_no\fi
+ \ifnum #3<\xint_c_ \xint_dothis\XINT_pfloat_N\fi
+ \ifnum #3>\numexpr #4-\xint_c_i\relax \xint_dothis\XINT_pfloat_Ps\fi
+ \xint_orthat\XINT_pfloat_P #1#2e#3;%
+}%
+\def\XINT_pfloat_no #1#2;{ #1.#2}%
+% \end{macrocode}
+% \lverb|This is all simpler coded, now that 1.2k's \xintFloat always
+% outputs a mantissa with exactly one digits before decimal mark always.
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_N #1e-#2;%
+{%
+ \csname XINT_pfloat_N_\romannumeral#2\endcsname #1%
+}%
+\def\XINT_pfloat_N_i { 0.}%
+\def\XINT_pfloat_N_ii { 0.0}%
+\def\XINT_pfloat_N_iii{ 0.00}%
+\def\XINT_pfloat_N_iv { 0.000}%
+\def\XINT_pfloat_N_v { 0.0000}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_P #1e#2;%
+{%
+ \csname XINT_pfloat_P_\romannumeral#2\endcsname #1%
+}%
+\def\XINT_pfloat_P_ #1{ #1.}%
+\def\XINT_pfloat_P_i #1#2{ #1#2.}%
+\def\XINT_pfloat_P_ii #1#2#3{ #1#2#3.}%
+\def\XINT_pfloat_P_iii#1#2#3#4{ #1#2#3#4.}%
+\def\XINT_pfloat_P_iv #1#2#3#4#5{ #1#2#3#4#5.}%
+\def\XINT_pfloat_P_v #1#2#3#4#5#6{ #1#2#3#4#5#6.}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_Ps #1e#2;%
+{%
+ \csname XINT_pfloat_Ps\romannumeral#2\endcsname #100000;%
+}%
+\def\XINT_pfloat_Psi #1#2#3;{ #1#2.}%
+\def\XINT_pfloat_Psii #1#2#3#4;{ #1#2#3.}%
+\def\XINT_pfloat_Psiii#1#2#3#4#5;{ #1#2#3#4.}%
+\def\XINT_pfloat_Psiv #1#2#3#4#5#6;{ #1#2#3#4#5.}%
+\def\XINT_pfloat_Psv #1#2#3#4#5#6#7;{ #1#2#3#4#5#6.}%
+% \end{macrocode}
+% \subsection{\csh{XINTinFloatFracdigits}}
+% \lverb|1.09i, for frac function in \xintfloatexpr. This version computes
+% exactly from the input the fractional part and then only converts it
+% into a float with the asked-for number of digits. I will have to think
+% it again some day, certainly.
+%
+% 1.1 removes optional argument for which there was anyhow no interface, for
+% technical reasons having to do with \xintNewExpr.
+%
+% 1.1a renames the macro as \XINTinFloatFracdigits (from \XINTinFloatFrac) to
+% be synchronous with the \XINTinFloatSqrt and \XINTinFloat habits related to
+% \xintNewExpr problems.
+%
+% Note to myself: I still have to rethink the whole thing about what is the best
+% to do, the initial way of going through \xinttfrac was just a first
+% implementation.|
+% \begin{macrocode}
+\def\XINTinFloatFracdigits {\romannumeral0\XINTinfloatfracdigits }%
+\def\XINTinfloatfracdigits #1%
+{%
+ \expandafter\XINT_infloatfracdg_a\expandafter {\romannumeral0\xinttfrac{#1}}%
+}%
+\def\XINT_infloatfracdg_a {\XINTinfloat [\XINTdigits]}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatAdd}, \csh{XINTinFloatAdd}}
+% \lverb|First included in release 1.07.
+%
+% 1.09ka improved a bit the efficiency. However the add, sub, mul, div
+% routines were provisory and supposed to be revised soon.
+%
+% Which didn't happen until 1.2f. Now, the inputs are first rounded to P
+% digits, not P+2 as earlier.
+%
+%
+%|
+% \begin{macrocode}
+\def\xintFloatAdd {\romannumeral0\xintfloatadd }%
+\def\xintfloatadd #1{\XINT_fladd_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatAdd {\romannumeral0\XINTinfloatadd }%
+\def\XINTinfloatadd #1{\XINT_fladd_chkopt \XINTinfloatS #1\xint:}%
+\def\XINT_fladd_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_fladd_opt
+ \else\expandafter\XINT_fladd_noopt
+ \fi #1#2%
+}%
+\def\XINT_fladd_noopt #1#2\xint:#3%
+{%
+ #1[\XINTdigits]%
+ {\expandafter\XINT_FL_add_a
+ \romannumeral0\XINTinfloat[\XINTdigits]{#2}\XINTdigits.{#3}}%
+}%
+\def\XINT_fladd_opt #1[\xint:#2]%#3#4%
+{%
+ \expandafter\XINT_fladd_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_fladd_opt_a #1.#2#3#4%
+{%
+ #2[#1]{\expandafter\XINT_FL_add_a\romannumeral0\XINTinfloat[#1]{#3}#1.{#4}}%
+}%
+\def\XINT_FL_add_a #1%
+{%
+ \xint_gob_til_zero #1\XINT_FL_add_zero 0\XINT_FL_add_b #1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_FL_add_zero #1.#2{#2}%[[
+\def\XINT_FL_add_b #1]#2.#3%
+{%
+ \expandafter\XINT_FL_add_c\romannumeral0\XINTinfloat[#2]{#3}#2.#1]%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_FL_add_c #1%
+{%
+ \xint_gob_til_zero #1\XINT_FL_add_zero 0\XINT_FL_add_d #1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_FL_add_d #1[#2]#3.#4[#5]%
+{%
+ \ifnum\numexpr #2-#3-#5>\xint_c_\xint_dothis\xint_firstoftwo\fi
+ \ifnum\numexpr #5-#3-#2>\xint_c_\xint_dothis\xint_secondoftwo\fi
+ \xint_orthat\xintAdd {#1[#2]}{#4[#5]}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatSub}, \csh{XINTinFloatSub}}
+% \lverb|First done 1.07.
+%
+% Starting with 1.2f the arguments undergo an intial rounding to the target
+% precision P not P+2.|
+%
+% \begin{macrocode}
+\def\xintFloatSub {\romannumeral0\xintfloatsub }%
+\def\xintfloatsub #1{\XINT_flsub_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatSub {\romannumeral0\XINTinfloatsub }%
+\def\XINTinfloatsub #1{\XINT_flsub_chkopt \XINTinfloatS #1\xint:}%
+\def\XINT_flsub_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flsub_opt
+ \else\expandafter\XINT_flsub_noopt
+ \fi #1#2%
+}%
+\def\XINT_flsub_noopt #1#2\xint:#3%
+{%
+ #1[\XINTdigits]%
+ {\expandafter\XINT_FL_add_a
+ \romannumeral0\XINTinfloat[\XINTdigits]{#2}\XINTdigits.{\xintOpp{#3}}}%
+}%
+\def\XINT_flsub_opt #1[\xint:#2]%#3#4%
+{%
+ \expandafter\XINT_flsub_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_flsub_opt_a #1.#2#3#4%
+{%
+ #2[#1]{\expandafter\XINT_FL_add_a\romannumeral0\XINTinfloat[#1]{#3}#1.{\xintOpp{#4}}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatMul}, \csh{XINTinFloatMul}}
+% \lverb|1.07.
+%
+% Starting with 1.2f the arguments are rounded to the target precision P not
+% P+2.
+%
+% 1.2g handles the inputs via \XINTinFloatS which will be more efficient when
+% the precision is large and the input is for example a small constant like 2.
+%
+% 1.2k does a micro improvement to the way the macro passes over control
+% to its output routine (former version used a higher level \xintE causing
+% some extra un-needed processing with two calls to \XINT_infrac where
+% one was amply enough).|
+% \begin{macrocode}
+\def\xintFloatMul {\romannumeral0\xintfloatmul }%
+\def\xintfloatmul #1{\XINT_flmul_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatMul {\romannumeral0\XINTinfloatmul }%
+\def\XINTinfloatmul #1{\XINT_flmul_chkopt \XINTinfloatS #1\xint:}%
+\def\XINT_flmul_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flmul_opt
+ \else\expandafter\XINT_flmul_noopt
+ \fi #1#2%
+}%
+\def\XINT_flmul_noopt #1#2\xint:#3%
+{%
+ #1[\XINTdigits]%
+ {\expandafter\XINT_FL_mul_a
+ \romannumeral0\XINTinfloatS[\XINTdigits]{#2}\XINTdigits.{#3}}%
+}%
+\def\XINT_flmul_opt #1[\xint:#2]%#3#4%
+{%
+ \expandafter\XINT_flmul_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_flmul_opt_a #1.#2#3#4%
+{%
+ #2[#1]{\expandafter\XINT_FL_mul_a\romannumeral0\XINTinfloatS[#1]{#3}#1.{#4}}%
+}%
+\def\XINT_FL_mul_a #1[#2]#3.#4%
+{%
+ \expandafter\XINT_FL_mul_b\romannumeral0\XINTinfloatS[#3]{#4}#1[#2]%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_FL_mul_b #1[#2]#3[#4]{\xintiiMul{#3}{#1}/1[#4+#2]}%
+% \end{macrocode}
+% \subsection{\csh{XINTinFloatInv}}
+% \lverb|Added belatedly at 1.3e, to support inv() function. We use Short
+% output, for rare inv(\xintexpr 1/3\relax) case. I need to think the whole
+% thing out at some later date.|
+% \begin{macrocode}
+\def\XINTinFloatInv#1{\XINTinFloatS[\XINTdigits]{\xintInv{#1}}}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatDiv}, \csh{XINTinFloatDiv}}
+% \lverb|1.07.
+%
+% Starting with 1.2f the arguments are rounded to the target precision P not
+% P+2.
+%
+% 1.2g handles the inputs via \XINTinFloatS which will be more efficient when
+% the precision is large and the input is for example a small constant like 2.
+%
+% The actual rounding of the quotient is handled via \xintfloat (or
+% \XINTinfloatS).
+%
+% 1.2k does the same kind of improvement in \XINT_FL_div_b as for
+% multiplication: earlier code was unnecessarily high level.
+% |
+% \begin{macrocode}
+\def\xintFloatDiv {\romannumeral0\xintfloatdiv }%
+\def\xintfloatdiv #1{\XINT_fldiv_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatDiv {\romannumeral0\XINTinfloatdiv }%
+\def\XINTinfloatdiv #1{\XINT_fldiv_chkopt \XINTinfloatS #1\xint:}%
+\def\XINT_fldiv_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_fldiv_opt
+ \else\expandafter\XINT_fldiv_noopt
+ \fi #1#2%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_fldiv_noopt #1#2\xint:#3%
+{%
+ #1[\XINTdigits]%
+ {\expandafter\XINT_FL_div_a
+ \romannumeral0\XINTinfloatS[\XINTdigits]{#3}\XINTdigits.{#2}}%
+}%
+\def\XINT_fldiv_opt #1[\xint:#2]%#3#4%
+{%
+ \expandafter\XINT_fldiv_opt_a\the\numexpr #2.#1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_fldiv_opt_a #1.#2#3#4%
+{%
+ #2[#1]{\expandafter\XINT_FL_div_a\romannumeral0\XINTinfloatS[#1]{#4}#1.{#3}}%
+}%
+\def\XINT_FL_div_a #1[#2]#3.#4%
+{%
+ \expandafter\XINT_FL_div_b\romannumeral0\XINTinfloatS[#3]{#4}/#1e#2%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_FL_div_b #1[#2]{#1e#2}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatPow}, \csh{XINTinFloatPow}}
+% \lverb|1.07: initial version. 1.09j has re-organized the core loop.
+%
+% 2015/12/07. I have hesitated to map ^ in expressions to \xintFloatPow rather
+% than \xintFloatPower. But for 1.234567890123456 to the power 2145678912 with
+% P=16, using Pow rather than Power seems to bring only about 5$char37 $space
+% gain.
+%
+% This routine requires the exponent x to be compatible with \numexpr parsing.
+%
+% 1.2f has rewritten the code for better efficiency. Also, now the argument A
+% for A^x is first rounded to P digits before switching to the increased
+% working precision (which depends upon x).
+%
+% |
+% \begin{macrocode}
+\def\xintFloatPow {\romannumeral0\xintfloatpow}%
+\def\xintfloatpow #1{\XINT_flpow_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatPow {\romannumeral0\XINTinfloatpow }%
+\def\XINTinfloatpow #1{\XINT_flpow_chkopt \XINTinfloatS #1\xint:}%
+\def\XINT_flpow_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flpow_opt
+ \else\expandafter\XINT_flpow_noopt
+ \fi
+ #1#2%
+}%
+\def\XINT_flpow_noopt #1#2\xint:#3%
+{%
+ \expandafter\XINT_flpow_checkB_a
+ \the\numexpr #3.\XINTdigits.{#2}{#1[\XINTdigits]}%
+}%
+\def\XINT_flpow_opt #1[\xint:#2]%
+{%
+ \expandafter\XINT_flpow_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_flpow_opt_a #1.#2#3#4%
+{%
+ \expandafter\XINT_flpow_checkB_a\the\numexpr #4.#1.{#3}{#2[#1]}%
+}%
+\def\XINT_flpow_checkB_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_flpow_BisZero
+ 0#1{\XINT_flpow_checkB_b -}%
+ 0-{\XINT_flpow_checkB_b {}#1}%
+ \krof
+}%
+\def\XINT_flpow_BisZero .#1.#2#3{#3{1[0]}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_checkB_b #1#2.#3.%
+{%
+ \expandafter\XINT_flpow_checkB_c
+ \the\numexpr\xintLength{#2}+\xint_c_iii.#3.#2.{#1}%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_flpow_checkB_c #1.#2.%
+{%
+ \expandafter\XINT_flpow_checkB_d\the\numexpr#1+#2.#1.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+%
+% 1.2f rounds input to P digits, first.
+% |
+% \begin{macrocode}
+\def\XINT_flpow_checkB_d #1.#2.#3.#4.#5#6%
+{%
+ \expandafter \XINT_flpow_aa
+ \romannumeral0\XINTinfloat [#3]{#6}{#2}{#1}{#4}{#5}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_aa #1[#2]#3%
+{%
+ \expandafter\XINT_flpow_ab\the\numexpr #2-#3\expandafter.%
+ \romannumeral\XINT_rep #3\endcsname0.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_ab #1.#2.#3.{\XINT_flpow_a #3#2[#1]}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_flpow_zero
+ 0#1{\XINT_flpow_b \iftrue}%
+ 0-{\XINT_flpow_b \iffalse#1}%
+ \krof
+}%
+\def\XINT_flpow_zero #1[#2]#3#4#5#6%
+{%
+ #6{\if 1#51\xint_dothis {0[0]}\fi
+ \xint_orthat
+ {\XINT_signalcondition{DivisionByZero}{0 to the power #4}{}{0[0]}}%
+ }%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_b #1#2[#3]#4#5%
+{%
+ \XINT_flpow_loopI #5.#3.#2.#4.{#1\ifodd #5 \xint_c_i\fi\fi}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_truncate #1.#2.#3.%
+{%
+ \expandafter\XINT_flpow_truncate_a
+ \romannumeral0\XINT_split_fromleft
+ #3.#2\xint_bye2345678\xint_bye..#1.#3.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_truncate_a #1.#2.#3.{#3+\xintLength{#2}.#1.}%
+\def\XINT_flpow_loopI #1.%
+{%
+ \ifnum #1=\xint_c_i\expandafter\XINT_flpow_ItoIII\fi
+ \ifodd #1
+ \expandafter\XINT_flpow_loopI_odd
+ \else
+ \expandafter\XINT_flpow_loopI_even
+ \fi
+ #1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_ItoIII\ifodd #1\fi #2.#3.#4.#5.#6%
+{%
+ \expandafter\XINT_flpow_III\the\numexpr #6+\xint_c_.#3.#4.#5.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_loopI_even #1.#2.#3.%#4.%
+{%
+ \expandafter\XINT_flpow_loopI
+ \the\numexpr #1/\xint_c_ii\expandafter.%
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#2\expandafter.\romannumeral0\xintiisqr{#3}.%
+}%
+\def\XINT_flpow_loopI_odd #1.#2.#3.#4.%
+{%
+ \expandafter\XINT_flpow_loopII
+ \the\numexpr #1/\xint_c_ii-\xint_c_i\expandafter.%
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#2\expandafter.\romannumeral0\xintiisqr{#3}.#4.#2.#3.%
+}%
+\def\XINT_flpow_loopII #1.%
+{%
+ \ifnum #1 = \xint_c_i\expandafter\XINT_flpow_IItoIII\fi
+ \ifodd #1
+ \expandafter\XINT_flpow_loopII_odd
+ \else
+ \expandafter\XINT_flpow_loopII_even
+ \fi
+ #1.%
+}%
+\def\XINT_flpow_loopII_even #1.#2.#3.%#4.%
+{%
+ \expandafter\XINT_flpow_loopII
+ \the\numexpr #1/\xint_c_ii\expandafter.%
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#2\expandafter.\romannumeral0\xintiisqr{#3}.%
+}%
+\def\XINT_flpow_loopII_odd #1.#2.#3.#4.#5.#6.%
+{%
+ \expandafter\XINT_flpow_loopII_odda
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr#2+#5\expandafter.\romannumeral0\xintiimul{#3}{#6}.#4.%
+ #1.#2.#3.%
+}%
+\def\XINT_flpow_loopII_odda #1.#2.#3.#4.#5.#6.%
+{%
+ \expandafter\XINT_flpow_loopII
+ \the\numexpr #4/\xint_c_ii-\xint_c_i\expandafter.%
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#5\expandafter.\romannumeral0\xintiisqr{#6}.#3.%
+ #1.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_IItoIII\ifodd #1\fi #2.#3.#4.#5.#6.#7.#8%
+{%
+ \expandafter\XINT_flpow_III\the\numexpr #8+\xint_c_\expandafter.%
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr#3+#6\expandafter.\romannumeral0\xintiimul{#4}{#7}.#5.%
+}%
+% \end{macrocode}
+% \lverb|This ending is common with \xintFloatPower.
+%
+% In the case of negative exponent we need to inverse the Q-digits mantissa.
+% This requires no special attention now as 1.2k's \xintFloat does correct
+% rounding of fractions hence it is easy to bound the total error. It can be
+% checked that the algorithm after final rounding to the target precision
+% computes a value Z whose distance to the exact theoretical will be less than
+% 0.52 ulp(Z) (and worst cases can only be slightly worse than 0.51 ulp(Z)).
+%
+% In the case of the half-integer exponent (only via the expression
+% interface,) the computation (which proceeds via \XINTinFloatPowerH) ends
+% with a square root. This square root extraction is done with 3 guard digits
+% (the power operations were done with more.) Then the value is rounded to the
+% target precision. There is thus this rounding to 3 guard digits (in the case
+% of negative exponent the reciprocal is computed before the square-root),
+% then the square root is (computed with exact rounding for these 3 guard
+% digits), and then there is the final rounding of this to the target
+% precision. The total error (for positive as well as negative exponent) has
+% been estimated to at worst possibly exceed slightly 0.5125 ulp(Z), and at
+% any rate it is less than 0.52 ulp(Z).|
+% \begin{macrocode}
+\def\XINT_flpow_III #1.#2.#3.#4.#5%
+{%
+ \expandafter\XINT_flpow_IIIend
+ \xint_UDsignfork
+ #5{{1/#3[-#2]}}%
+ -{{#3[#2]}}%
+ \krof #1%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpow_IIIend #1#2#3%
+ {#3{\if#21\xint_afterfi{\expandafter-\romannumeral`&&@}\fi#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatPower}, \csh{XINTinFloatPower}}
+% \lverb|1.07. The core loop has been re-organized in 1.09j for some slight
+% efficiency gain. The exponent B is given to \xintNum. The ^ in expressions
+% is mapped to this routine.
+%
+% Same modifications as in \xintFloatPow for 1.2f.
+%
+% 1.2f adds a special private macro for allowing half-integral exponents for
+% use with ^ within \xintfloatexpr. The exponent will be first truncated to
+% either an integer or an half-integer. The macro is not for general use.
+%
+% 1.2k does anew this 1.2f handling of half-integer exponents for the
+% \xintfloatexpr parser: with 1.2f's code
+% the final square-root extraction was applied to a value already rounded to
+% the target precision, unneedlessly losing precision.
+% |
+% \begin{macrocode}
+\def\xintFloatPower {\romannumeral0\xintfloatpower}%
+\def\xintfloatpower #1{\XINT_flpower_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatPower {\romannumeral0\XINTinfloatpower }%
+\def\XINTinfloatpower #1{\XINT_flpower_chkopt \XINTinfloatS #1\xint:}%
+% \end{macrocode}
+% \lverb|First the special macro for use by the expression parser which checks
+% if one raises to an half-integer exponent. This is always with \XINTdigits
+% precision. Rewritten for 1.2k in order for the final square root to keep
+% three guard digits.
+%
+% We have to be careful that exponent #2 is not constrained by TeX bound. And
+% we must allow fractions. The 1.2k variant does a rounding to nearest integer
+% of half-integer, 1.2f did a truncation rather (this is done after truncation
+% of #2 to fixed point with one digit after mark.) We try to recognize quickly
+% the case of integer exponent, for speed, but there is overhead of going
+% through \xintiTrunc1.|
+% \begin{macrocode}
+\def\XINTinFloatPowerH {\romannumeral0\XINTinfloatpowerh }%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINTinfloatpowerh #1#2%
+{%
+ \expandafter\XINT_flpowerh_a\romannumeral0\xintitrunc1{#2};%
+ \XINTdigits.{#1}{\XINTinfloatS[\XINTdigits]}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpowerh_a #1;%
+{%
+ \if0\xintLDg{#1}\expandafter\XINT_flpowerh_int
+ \else\expandafter\XINT_flpowerh_b
+ \fi #1.%
+}%
+\def\XINT_flpowerh_int #1%
+{%
+ \if0#1\expandafter\XINT_flpower_BisZero
+ \else\expandafter\XINT_flpowerh_i
+ \fi #1%
+}%
+\def\XINT_flpowerh_i #10.{\expandafter\XINT_flpower_checkB_a#1.}%
+\def\XINT_flpowerh_b #1.%
+{%
+ \expandafter\XINT_flpowerh_c\romannumeral0\xintdsrr{\xintDouble{#1}}.%
+}%
+\def\XINT_flpowerh_c #1.%
+{%
+ \ifodd\xintLDg{#1} %<- intentional space
+ \expandafter\XINT_flpowerh_d\else\expandafter\XINT_flpowerh_e
+ \fi #1.%
+}%
+\def\XINT_flpowerh_d #1.\XINTdigits.#2#3%
+{%
+ \XINT_flpower_checkB_a #1.\XINTdigits.{#2}\XINT_flpowerh_finish
+}%
+\def\XINT_flpowerh_finish #1%
+ {\XINTinfloatS[\XINTdigits]{\XINTinFloatSqrt[\XINTdigits+\xint_c_iii]{#1}}}%
+\def\XINT_flpowerh_e #1.%
+ {\expandafter\XINT_flpower_checkB_a\romannumeral0\xinthalf{#1}.}%
+% \end{macrocode}
+% \lverb|Start of macro. Check for optional argument.|
+% \begin{macrocode}
+\def\XINT_flpower_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flpower_opt
+ \else\expandafter\XINT_flpower_noopt
+ \fi
+ #1#2%
+}%
+\def\XINT_flpower_noopt #1#2\xint:#3%
+{%
+ \expandafter\XINT_flpower_checkB_a
+ \romannumeral0\xintnum{#3}.\XINTdigits.{#2}{#1[\XINTdigits]}%
+}%
+\def\XINT_flpower_opt #1[\xint:#2]%
+{%
+ \expandafter\XINT_flpower_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_flpower_opt_a #1.#2#3#4%
+{%
+ \expandafter\XINT_flpower_checkB_a
+ \romannumeral0\xintnum{#4}.#1.{#3}{#2[#1]}%
+}%
+\def\XINT_flpower_checkB_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-{\XINT_flpower_BisZero 0}%
+ 0#1{\XINT_flpower_checkB_b -}%
+ 0-{\XINT_flpower_checkB_b {}#1}%
+ \krof
+}%
+\def\XINT_flpower_BisZero 0.#1.#2#3{#3{1[0]}}%
+\def\XINT_flpower_checkB_b #1#2.#3.%
+{%
+ \expandafter\XINT_flpower_checkB_c
+ \the\numexpr\xintLength{#2}+\xint_c_iii.#3.#2.{#1}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpower_checkB_c #1.#2.%
+{%
+ \expandafter\XINT_flpower_checkB_d\the\numexpr#1+#2.#1.#2.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpower_checkB_d #1.#2.#3.#4.#5#6%
+{%
+ \expandafter \XINT_flpower_aa
+ \romannumeral0\XINTinfloat [#3]{#6}{#2}{#1}{#4}{#5}%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flpower_aa #1[#2]#3%
+{%
+ \expandafter\XINT_flpower_ab\the\numexpr #2-#3\expandafter.%
+ \romannumeral\XINT_rep #3\endcsname0.#1.%
+}%
+\def\XINT_flpower_ab #1.#2.#3.{\XINT_flpower_a #3#2[#1]}%
+\def\XINT_flpower_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_flpow_zero
+ 0#1{\XINT_flpower_b \iftrue}%
+ 0-{\XINT_flpower_b \iffalse#1}%
+ \krof
+}%
+\def\XINT_flpower_b #1#2[#3]#4#5%
+{%
+ \XINT_flpower_loopI #5.#3.#2.#4.{#1\xintiiOdd{#5}\fi}%
+}%
+\def\XINT_flpower_loopI #1.%
+{%
+ \if1\XINT_isOne {#1}\xint_dothis\XINT_flpower_ItoIII\fi
+ \ifodd\xintLDg{#1} %<- intentional space
+ \xint_dothis{\expandafter\XINT_flpower_loopI_odd}\fi
+ \xint_orthat{\expandafter\XINT_flpower_loopI_even}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \romannumeral0\XINT_half
+ #1\xint_bye\xint_Bye345678\xint_bye
+ *\xint_c_v+\xint_c_v)/\xint_c_x-\xint_c_i\relax.%
+}%
+\def\XINT_flpower_ItoIII #1.#2.#3.#4.#5%
+{%
+ \expandafter\XINT_flpow_III\the\numexpr #5+\xint_c_.#2.#3.#4.%
+}%
+\def\XINT_flpower_loopI_even #1.#2.#3.#4.%
+{%
+ \expandafter\XINT_flpower_toloopI
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#2\expandafter.\romannumeral0\xintiisqr{#3}.#4.#1.%
+}%
+\def\XINT_flpower_toloopI #1.#2.#3.#4.{\XINT_flpower_loopI #4.#1.#2.#3.}%
+\def\XINT_flpower_loopI_odd #1.#2.#3.#4.%
+{%
+ \expandafter\XINT_flpower_toloopII
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#2\expandafter.\romannumeral0\xintiisqr{#3}.#4.%
+ #1.#2.#3.%
+}%
+\def\XINT_flpower_toloopII #1.#2.#3.#4.{\XINT_flpower_loopII #4.#1.#2.#3.}%
+\def\XINT_flpower_loopII #1.%
+{%
+ \if1\XINT_isOne{#1}\xint_dothis\XINT_flpower_IItoIII\fi
+ \ifodd\xintLDg{#1} %<- intentional space
+ \xint_dothis{\expandafter\XINT_flpower_loopII_odd}\fi
+ \xint_orthat{\expandafter\XINT_flpower_loopII_even}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+ \romannumeral0\XINT_half#1\xint_bye\xint_Bye345678\xint_bye
+ *\xint_c_v+\xint_c_v)/\xint_c_x-\xint_c_i\relax.%
+}%
+\def\XINT_flpower_loopII_even #1.#2.#3.#4.%
+{%
+ \expandafter\XINT_flpower_toloopII
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#2\expandafter.\romannumeral0\xintiisqr{#3}.#4.#1.%
+}%
+\def\XINT_flpower_loopII_odd #1.#2.#3.#4.#5.#6.%
+{%
+ \expandafter\XINT_flpower_loopII_odda
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr#2+#5\expandafter.\romannumeral0\xintiimul{#3}{#6}.#4.%
+ #1.#2.#3.%
+}%
+\def\XINT_flpower_loopII_odda #1.#2.#3.#4.#5.#6.%
+{%
+ \expandafter\XINT_flpower_toloopII
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr\xint_c_ii*#5\expandafter.\romannumeral0\xintiisqr{#6}.#3.%
+ #4.#1.#2.%
+}%
+\def\XINT_flpower_IItoIII #1.#2.#3.#4.#5.#6.#7%
+{%
+ \expandafter\XINT_flpow_III\the\numexpr #7+\xint_c_\expandafter.%
+ \the\numexpr\expandafter\XINT_flpow_truncate
+ \the\numexpr#2+#5\expandafter.\romannumeral0\xintiimul{#3}{#6}.#4.%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatFac}, \csh{XINTFloatFac}}
+% |Done at 1.2. At 1.3e \XINTinFloatFac outputs using \XINTinFloatS.|
+% \begin{macrocode}
+\def\xintFloatFac {\romannumeral0\xintfloatfac}%
+\def\xintfloatfac #1{\XINT_flfac_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatFac {\romannumeral0\XINTinfloatfac }%
+\def\XINTinfloatfac #1{\XINT_flfac_chkopt \XINTinfloatS #1\xint:}%
+\def\XINT_flfac_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flfac_opt
+ \else\expandafter\XINT_flfac_noopt
+ \fi
+ #1#2%
+}%
+\def\XINT_flfac_noopt #1#2\xint:
+{%
+ \expandafter\XINT_FL_fac_fork_a
+ \the\numexpr \xintNum{#2}.\xint_c_i \XINTdigits\XINT_FL_fac_out{#1[\XINTdigits]}%
+}%
+\def\XINT_flfac_opt #1[\xint:#2]%
+{%
+ \expandafter\XINT_flfac_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_flfac_opt_a #1.#2#3%
+{%
+ \expandafter\XINT_FL_fac_fork_a\the\numexpr \xintNum{#3}.\xint_c_i {#1}\XINT_FL_fac_out{#2[#1]}%
+}%
+\def\XINT_FL_fac_fork_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_FL_fac_iszero
+ 0#1\XINT_FL_fac_isneg
+ 0-{\XINT_FL_fac_fork_b #1}%
+ \krof
+}%
+\def\XINT_FL_fac_iszero #1.#2#3#4#5{#5{1[0]}}%
+% \end{macrocode}
+% \lverb|1.2f XINT_FL_fac_isneg returns 0, earlier versions used 1 here.|
+% \begin{macrocode}
+\def\XINT_FL_fac_isneg #1.#2#3#4#5%
+{%
+ #5{\XINT_signalcondition{InvalidOperation}
+ {Factorial of negative: (-#1)!}{}{0[0]}}%
+}%
+\def\XINT_FL_fac_fork_b #1.%
+{%
+ \ifnum #1>\xint_c_x^viii_mone\xint_dothis\XINT_FL_fac_toobig\fi
+ \ifnum #1>\xint_c_x^iv\xint_dothis\XINT_FL_fac_vbig \fi
+ \ifnum #1>465 \xint_dothis\XINT_FL_fac_big\fi
+ \ifnum #1>101 \xint_dothis\XINT_FL_fac_med\fi
+ \xint_orthat\XINT_FL_fac_small
+ #1.%
+}%
+\def\XINT_FL_fac_toobig #1.#2#3#4#5%
+{%
+ #5{\XINT_signalcondition{InvalidOperation}
+ {Factorial of too big: (#1)!}{}{0[0]}}%
+}%
+% \end{macrocode}
+% \lverb?Computations are done with Q blocks of eight digits. When a
+% multiplication has a carry, hence creates Q+1 blocks, the least significant
+% one is dropped. The goal is to compute an approximate value X' to the exact
+% value X, such that the final relative error (X-X')/X will be at most
+% 10^{-P-1} with P the desired precision. Then, when we round X' to X'' with P
+% significant digits, we can prove that the absolute error |X-X''| is bounded
+% (strictly) by 0.6 ulp(X''). (ulp= unit in the last (significant) place). Let
+% N be the number of such operations, the formula for Q deduces from the
+% previous explanations is that 8Q should be at least P+9+k, with k the number
+% of digits of N (in base 10). Note that 1.2 version used P+10+k, for 1.2f I
+% reduced to P+9+k. Also, k should be the number of digits of the number N of
+% multiplications done, hence for n<=10000 we can take N=n/2, or N/3, or N/4.
+% This is rounded above by numexpr and always an overestimate of the actual
+% number of approximate multiplications done (the first ones are exact).
+% (vérifier ce que je raconte, j'ai la flemme là).
+%
+% We then want ceil((P+k+n)/8). Using \numexpr rounding division
+% (ARRRRRGGGHHHH), if m is a positive integer, ceil(m/8) can be computed as
+% (m+3)/8. Thus with m=P+10+k, this gives Q<-(P+13+k)/8. The routine actually
+% computes 8(Q-1) for use in \XINT_FL_fac_addzeros.
+%
+% With 1.2f the formula is m=P+9+k, Q<-(P+12+k)/8, and we use now 4=12-8 rather
+% than the earlier 5=13-8. Whatever happens, the value computed in
+% \XINT_FL_fac_increaseP is at least 8. There will always be an extra block.
+%
+% Note: with Digits:=32; Maple gives for 200!:$bgroup$obeylines$obeyspaces$ttbfamily
+% > factorial(200.);
+% $indent 375
+% $indent 0.78865786736479050355236321393218 10
+% My 1.2f routine (and also 1.2) outputs:
+% $indent 7.8865786736479050355236321393219e374
+% and this is the correct rounding because for 40 digits it computes
+% $indent 7.886578673647905035523632139321850622951e374
+% $egroup
+% Maple's result (contrarily to xint) is thus not the correct rounding but
+% still it is less than 0.6 ulp wrong.
+% ?
+% \begin{macrocode}
+\def\XINT_FL_fac_vbig
+ {\expandafter\XINT_FL_fac_vbigloop_a
+ \the\numexpr \XINT_FL_fac_increaseP \xint_c_i }%
+\def\XINT_FL_fac_big
+ {\expandafter\XINT_FL_fac_bigloop_a
+ \the\numexpr \XINT_FL_fac_increaseP \xint_c_ii }%
+\def\XINT_FL_fac_med
+ {\expandafter\XINT_FL_fac_medloop_a
+ \the\numexpr \XINT_FL_fac_increaseP \xint_c_iii }%
+\def\XINT_FL_fac_small
+ {\expandafter\XINT_FL_fac_smallloop_a
+ \the\numexpr \XINT_FL_fac_increaseP \xint_c_iv }%
+\def\XINT_FL_fac_increaseP #1#2.#3#4%
+{%
+ #2\expandafter.\the\numexpr\xint_c_viii*%
+ ((\xint_c_iv+#4+\expandafter\XINT_FL_fac_countdigits
+ \the\numexpr #2/(#1*#3)\relax 87654321\Z)/\xint_c_viii).%
+}%
+\def\XINT_FL_fac_countdigits #1#2#3#4#5#6#7#8{\XINT_FL_fac_countdone }%
+\def\XINT_FL_fac_countdone #1#2\Z {#1}%
+\def\XINT_FL_fac_out #1;![#2]#3%
+ {#3{\romannumeral0\XINT_mul_out
+ #1;!1\R!1\R!1\R!1\R!%
+ 1\R!1\R!1\R!1\R!\W [#2]}}%
+\def\XINT_FL_fac_vbigloop_a #1.#2.%
+{%
+ \XINT_FL_fac_bigloop_a \xint_c_x^iv.#2.%
+ {\expandafter\XINT_FL_fac_vbigloop_loop\the\numexpr 100010001\expandafter.%
+ \the\numexpr \xint_c_x^viii+#1.}%
+}%
+\def\XINT_FL_fac_vbigloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_FL_fac_loop_exit\fi
+ \expandafter\XINT_FL_fac_vbigloop_loop
+ \the\numexpr #1+\xint_c_i\expandafter.%
+ \the\numexpr #2\expandafter.\the\numexpr\XINT_FL_fac_mul #1!%
+}%
+\def\XINT_FL_fac_bigloop_a #1.%
+{%
+ \expandafter\XINT_FL_fac_bigloop_b \the\numexpr
+ #1+\xint_c_i-\xint_c_ii*((#1-464)/\xint_c_ii).#1.%
+}%
+\def\XINT_FL_fac_bigloop_b #1.#2.#3.%
+{%
+ \expandafter\XINT_FL_fac_medloop_a
+ \the\numexpr #1-\xint_c_i.#3.{\XINT_FL_fac_bigloop_loop #1.#2.}%
+}%
+\def\XINT_FL_fac_bigloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_FL_fac_loop_exit\fi
+ \expandafter\XINT_FL_fac_bigloop_loop
+ \the\numexpr #1+\xint_c_ii\expandafter.%
+ \the\numexpr #2\expandafter.\the\numexpr\XINT_FL_fac_bigloop_mul #1!%
+}%
+\def\XINT_FL_fac_bigloop_mul #1!%
+{%
+ \expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)!%
+}%
+\def\XINT_FL_fac_medloop_a #1.%
+{%
+ \expandafter\XINT_FL_fac_medloop_b
+ \the\numexpr #1+\xint_c_i-\xint_c_iii*((#1-100)/\xint_c_iii).#1.%
+}%
+\def\XINT_FL_fac_medloop_b #1.#2.#3.%
+{%
+ \expandafter\XINT_FL_fac_smallloop_a
+ \the\numexpr #1-\xint_c_i.#3.{\XINT_FL_fac_medloop_loop #1.#2.}%
+}%
+\def\XINT_FL_fac_medloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_FL_fac_loop_exit\fi
+ \expandafter\XINT_FL_fac_medloop_loop
+ \the\numexpr #1+\xint_c_iii\expandafter.%
+ \the\numexpr #2\expandafter.\the\numexpr\XINT_FL_fac_medloop_mul #1!%
+}%
+\def\XINT_FL_fac_medloop_mul #1!%
+{%
+ \expandafter\XINT_FL_fac_mul
+ \the\numexpr
+ \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_FL_fac_smallloop_a #1.%
+{%
+ \csname
+ XINT_FL_fac_smallloop_\the\numexpr #1-\xint_c_iv*(#1/\xint_c_iv)\relax
+ \endcsname #1.%
+}%
+\expandafter\def\csname XINT_FL_fac_smallloop_1\endcsname #1.#2.%
+{%
+ \XINT_FL_fac_addzeros #2.100000001!.{2.#1.}{#2}%
+}%
+\expandafter\def\csname XINT_FL_fac_smallloop_-2\endcsname #1.#2.%
+{%
+ \XINT_FL_fac_addzeros #2.100000002!.{3.#1.}{#2}%
+}%
+\expandafter\def\csname XINT_FL_fac_smallloop_-1\endcsname #1.#2.%
+{%
+ \XINT_FL_fac_addzeros #2.100000006!.{4.#1.}{#2}%
+}%
+\expandafter\def\csname XINT_FL_fac_smallloop_0\endcsname #1.#2.%
+{%
+ \XINT_FL_fac_addzeros #2.100000024!.{5.#1.}{#2}%
+}%
+\def\XINT_FL_fac_addzeros #1.%
+{%
+ \ifnum #1=\xint_c_viii \expandafter\XINT_FL_fac_addzeros_exit\fi
+ \expandafter\XINT_FL_fac_addzeros
+ \the\numexpr #1-\xint_c_viii.100000000!%
+}%
+% \end{macrocode}
+% \lverb|We will manipulate by successive *small* multiplications Q blocks
+% 1<8d>!, terminated by 1;!. We need a custom small multiplication which
+% tells us when it has create a new block, and the least significant one
+% should be dropped.|
+% \begin{macrocode}
+\def\XINT_FL_fac_addzeros_exit #1.#2.#3#4{\XINT_FL_fac_smallloop_loop #3#21;![-#4]}%
+\def\XINT_FL_fac_smallloop_loop #1.#2.%
+{%
+ \ifnum #1>#2 \expandafter\XINT_FL_fac_loop_exit\fi
+ \expandafter\XINT_FL_fac_smallloop_loop
+ \the\numexpr #1+\xint_c_iv\expandafter.%
+ \the\numexpr #2\expandafter.\romannumeral0\XINT_FL_fac_smallloop_mul #1!%
+}%
+\def\XINT_FL_fac_smallloop_mul #1!%
+{%
+ \expandafter\XINT_FL_fac_mul
+ \the\numexpr
+ \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%[[
+\def\XINT_FL_fac_loop_exit #1!#2]#3{#3#2]}%
+\def\XINT_FL_fac_mul 1#1!%
+ {\expandafter\XINT_FL_fac_mul_a\the\numexpr\XINT_FL_fac_smallmul 10!{#1}}%
+\def\XINT_FL_fac_mul_a #1-#2%
+{%
+ \if#21\xint_afterfi{\expandafter\space\xint_gob_til_exclam}\else
+ \expandafter\space\fi #11;!%
+}%
+\def\XINT_FL_fac_minimulwc_a #1#2#3#4#5!#6#7#8#9%
+{%
+ \XINT_FL_fac_minimulwc_b {#1#2#3#4}{#5}{#6#7#8#9}%
+}%
+\def\XINT_FL_fac_minimulwc_b #1#2#3#4!#5%
+{%
+ \expandafter\XINT_FL_fac_minimulwc_c
+ \the\numexpr \xint_c_x^ix+#5+#2*#4!{{#1}{#2}{#3}{#4}}%
+}%
+\def\XINT_FL_fac_minimulwc_c 1#1#2#3#4#5#6!#7%
+{%
+ \expandafter\XINT_FL_fac_minimulwc_d {#1#2#3#4#5}#7{#6}%
+}%
+\def\XINT_FL_fac_minimulwc_d #1#2#3#4#5%
+{%
+ \expandafter\XINT_FL_fac_minimulwc_e
+ \the\numexpr \xint_c_x^ix+#1+#2*#5+#3*#4!{#2}{#4}%
+}%
+\def\XINT_FL_fac_minimulwc_e 1#1#2#3#4#5#6!#7#8#9%
+{%
+ 1#6#9\expandafter!%
+ \the\numexpr\expandafter\XINT_FL_fac_smallmul
+ \the\numexpr \xint_c_x^viii+#1#2#3#4#5+#7*#8!%
+}%
+\def\XINT_FL_fac_smallmul 1#1!#21#3!%
+{%
+ \xint_gob_til_sc #3\XINT_FL_fac_smallmul_end;%
+ \XINT_FL_fac_minimulwc_a #2!#3!{#1}{#2}%
+}%
+% \end{macrocode}
+% \lverb|This is the crucial ending. I note that I used here an \ifnum test
+% rather than the gob_til_eightzeroes thing. Actually for eight digits there
+% is much less difference than for only four.
+%
+% The "carry" situation is marked by a final !-1 rather than !-2 for no-carry.
+% (a \numexpr muste be stopped, and leaving a - as delimiter is good as it
+% will not arise earlier.)|
+% \begin{macrocode}
+\def\XINT_FL_fac_smallmul_end;\XINT_FL_fac_minimulwc_a #1!;!#2#3[#4]%
+{%
+ \ifnum #2=\xint_c_
+ \expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo
+ \fi
+ {-2\relax[#4]}%
+ {1#2\expandafter!\expandafter-\expandafter1\expandafter
+ [\the\numexpr #4+\xint_c_viii]}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatPFactorial}, \csh{XINTinFloatPFactorial}}
+% \lverb|2015/11/29 for 1.2f. Partial factorial pfactorial(a,b)=(a+1)...b,
+% only for non-negative integers with a<=b<10^8.
+%
+% 1.2h (2016/11/20) now avoids raising \xintError:OutOfRangePFac if the
+% condition 0<=a<=b<10^8 is violated. Same as for \xintiiPFactorial.|
+% \begin{macrocode}
+\def\xintFloatPFactorial {\romannumeral0\xintfloatpfactorial}%
+\def\xintfloatpfactorial #1{\XINT_flpfac_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatPFactorial {\romannumeral0\XINTinfloatpfactorial }%
+\def\XINTinfloatpfactorial #1{\XINT_flpfac_chkopt \XINTinfloat #1\xint:}%
+\def\XINT_flpfac_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flpfac_opt
+ \else\expandafter\XINT_flpfac_noopt
+ \fi
+ #1#2%
+}%
+\def\XINT_flpfac_noopt #1#2\xint:#3%
+{%
+ \expandafter\XINT_FL_pfac_fork
+ \the\numexpr \xintNum{#2}\expandafter.%
+ \the\numexpr \xintNum{#3}.\xint_c_i{\XINTdigits}{#1[\XINTdigits]}%
+}%
+\def\XINT_flpfac_opt #1[\xint:#2]%
+{%
+ \expandafter\XINT_flpfac_opt_b\the\numexpr #2.#1%
+}%
+\def\XINT_flpfac_opt_b #1.#2#3#4%
+{%
+ \expandafter\XINT_FL_pfac_fork
+ \the\numexpr \xintNum{#3}\expandafter.%
+ \the\numexpr \xintNum{#4}.\xint_c_i{#1}{#2[#1]}%
+}%
+\def\XINT_FL_pfac_fork #1#2.#3#4.%
+{%
+ \unless\ifnum #1#2<#3#4 \xint_dothis\XINT_FL_pfac_one\fi
+ \if-#3\xint_dothis\XINT_FL_pfac_neg \fi
+ \if-#1\xint_dothis\XINT_FL_pfac_zero\fi
+ \ifnum #3#4>\xint_c_x^viii_mone\xint_dothis\XINT_FL_pfac_outofrange\fi
+ \xint_orthat \XINT_FL_pfac_increaseP #1#2.#3#4.%
+}%
+\def\XINT_FL_pfac_outofrange #1.#2.#3#4#5%
+{%
+ #5{\XINT_signalcondition{InvalidOperation}
+ {pfactorial second arg too big: 99999999 < #2}{}{0[0]}}%
+}%
+\def\XINT_FL_pfac_one #1.#2.#3#4#5{#5{1[0]}}%
+\def\XINT_FL_pfac_zero #1.#2.#3#4#5{#5{0[0]}}%
+\def\XINT_FL_pfac_neg -#1.-#2.%
+{%
+ \ifnum #1>\xint_c_x^viii\xint_dothis\XINT_FL_pfac_outofrange\fi
+ \xint_orthat {%
+ \ifodd\numexpr#2-#1\relax\xint_afterfi{\expandafter-\romannumeral`&&@}\fi
+ \expandafter\XINT_FL_pfac_increaseP}%
+ \the\numexpr #2-\xint_c_i\expandafter.\the\numexpr#1-\xint_c_i.%
+}%
+% \end{macrocode}
+% \lverb|See the comments for \XINT_FL_pfac_increaseP. Case of b=a+1 should be
+% filtered out perhaps. We only needed here to copy the \xintPFactorial macros and
+% re-use \XINT_FL_fac_mul/\XINT_FL_fac_out. Had to modify a bit
+% \XINT_FL_pfac_addzeroes. We can enter here directly with #3 equal to specify
+% the precision (the calculated value before final rounding has a relative
+% error less than #3.10^{-#4-1}), and #5 would hold the macro doing the final
+% rounding (or truncating, if I make a FloatTrunc available) to a given number
+% of digits, possibly not #4. By default the #3 is 1, but FloatBinomial calls
+% it with #3=4.|
+% \begin{macrocode}
+\def\XINT_FL_pfac_increaseP #1.#2.#3#4%
+{%
+ \expandafter\XINT_FL_pfac_a
+ \the\numexpr \xint_c_viii*((\xint_c_iv+#4+\expandafter
+ \XINT_FL_fac_countdigits\the\numexpr (#2-#1-\xint_c_i)%
+ /\ifnum #2>\xint_c_x^iv #3\else(#3*\xint_c_ii)\fi\relax
+ 87654321\Z)/\xint_c_viii).#1.#2.%
+}%
+\def\XINT_FL_pfac_a #1.#2.#3.%
+{%
+ \expandafter\XINT_FL_pfac_b\the\numexpr \xint_c_i+#2\expandafter.%
+ \the\numexpr#3\expandafter.%
+ \romannumeral0\XINT_FL_pfac_addzeroes #1.100000001!1;![-#1]%
+}%
+\def\XINT_FL_pfac_addzeroes #1.%
+{%
+ \ifnum #1=\xint_c_viii \expandafter\XINT_FL_pfac_addzeroes_exit\fi
+ \expandafter\XINT_FL_pfac_addzeroes\the\numexpr #1-\xint_c_viii.100000000!%
+}%
+\def\XINT_FL_pfac_addzeroes_exit #1.{ }%
+\def\XINT_FL_pfac_b #1.%
+{%
+ \ifnum #1>9999 \xint_dothis\XINT_FL_pfac_vbigloop \fi
+ \ifnum #1>463 \xint_dothis\XINT_FL_pfac_bigloop \fi
+ \ifnum #1>98 \xint_dothis\XINT_FL_pfac_medloop \fi
+ \xint_orthat\XINT_FL_pfac_smallloop #1.%
+}%
+\def\XINT_FL_pfac_smallloop #1.#2.%
+{%
+ \ifcase\numexpr #2-#1\relax
+ \expandafter\XINT_FL_pfac_end_
+ \or \expandafter\XINT_FL_pfac_end_i
+ \or \expandafter\XINT_FL_pfac_end_ii
+ \or \expandafter\XINT_FL_pfac_end_iii
+ \else\expandafter\XINT_FL_pfac_smallloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_FL_pfac_smallloop_a #1.#2.%
+{%
+ \expandafter\XINT_FL_pfac_smallloop_b
+ \the\numexpr #1+\xint_c_iv\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_FL_pfac_smallloop_b #1.%
+{%
+ \ifnum #1>98 \expandafter\XINT_FL_pfac_medloop \else
+ \expandafter\XINT_FL_pfac_smallloop \fi #1.%
+}%
+\def\XINT_FL_pfac_medloop #1.#2.%
+{%
+ \ifcase\numexpr #2-#1\relax
+ \expandafter\XINT_FL_pfac_end_
+ \or \expandafter\XINT_FL_pfac_end_i
+ \or \expandafter\XINT_FL_pfac_end_ii
+ \else\expandafter\XINT_FL_pfac_medloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_FL_pfac_medloop_a #1.#2.%
+{%
+ \expandafter\XINT_FL_pfac_medloop_b
+ \the\numexpr #1+\xint_c_iii\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_FL_pfac_medloop_b #1.%
+{%
+ \ifnum #1>463 \expandafter\XINT_FL_pfac_bigloop \else
+ \expandafter\XINT_FL_pfac_medloop \fi #1.%
+}%
+\def\XINT_FL_pfac_bigloop #1.#2.%
+{%
+ \ifcase\numexpr #2-#1\relax
+ \expandafter\XINT_FL_pfac_end_
+ \or \expandafter\XINT_FL_pfac_end_i
+ \else\expandafter\XINT_FL_pfac_bigloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_FL_pfac_bigloop_a #1.#2.%
+{%
+ \expandafter\XINT_FL_pfac_bigloop_b
+ \the\numexpr #1+\xint_c_ii\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)!%
+}%
+\def\XINT_FL_pfac_bigloop_b #1.%
+{%
+ \ifnum #1>9999 \expandafter\XINT_FL_pfac_vbigloop \else
+ \expandafter\XINT_FL_pfac_bigloop \fi #1.%
+}%
+\def\XINT_FL_pfac_vbigloop #1.#2.%
+{%
+ \ifnum #2=#1
+ \expandafter\XINT_FL_pfac_end_
+ \else\expandafter\XINT_FL_pfac_vbigloop_a
+ \fi #1.#2.%
+}%
+\def\XINT_FL_pfac_vbigloop_a #1.#2.%
+{%
+ \expandafter\XINT_FL_pfac_vbigloop
+ \the\numexpr #1+\xint_c_i\expandafter.%
+ \the\numexpr #2\expandafter.%
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr\xint_c_x^viii+#1!%
+}%
+\def\XINT_FL_pfac_end_iii #1.#2.%
+{%
+ \expandafter\XINT_FL_fac_out
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)*(#1+\xint_c_iii)!%
+}%
+\def\XINT_FL_pfac_end_ii #1.#2.%
+{%
+ \expandafter\XINT_FL_fac_out
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)*(#1+\xint_c_ii)!%
+}%
+\def\XINT_FL_pfac_end_i #1.#2.%
+{%
+ \expandafter\XINT_FL_fac_out
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1*(#1+\xint_c_i)!%
+}%
+\def\XINT_FL_pfac_end_ #1.#2.%
+{%
+ \expandafter\XINT_FL_fac_out
+ \romannumeral0\expandafter\XINT_FL_fac_mul
+ \the\numexpr \xint_c_x^viii+#1!%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatBinomial}, \csh{XINTinFloatBinomial}}
+% \lverb|1.2f. We compute binomial(x,y) as pfac(x-y,x)/y!, where the numerator
+% and denominator are computed with a relative error at most 4.10^{-P-2}, then
+% rounded (once I have a float truncation, I will use truncation rather) to
+% P+3 digits, and finally the quotient is correctly rounded to P digits. This
+% will guarantee that the exact value X differs from the computed one Y by at
+% most 0.6 ulp(Y). (2015/12/01).
+%
+% 2016/11/19 for 1.2h. As for \xintiiBinomial, hard to understand why last
+% year I coded this to raise an error if y<0 or y>x ! The question of the
+% Gamma function is for another occasion, here x and y must be (small)
+% integers.|
+% \begin{macrocode}
+\def\xintFloatBinomial {\romannumeral0\xintfloatbinomial}%
+\def\xintfloatbinomial #1{\XINT_flbinom_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatBinomial {\romannumeral0\XINTinfloatbinomial }%
+\def\XINTinfloatbinomial #1{\XINT_flbinom_chkopt \XINTinfloat #1\xint:}%
+\def\XINT_flbinom_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flbinom_opt
+ \else\expandafter\XINT_flbinom_noopt
+ \fi #1#2%
+}%
+\def\XINT_flbinom_noopt #1#2\xint:#3%
+{%
+ \expandafter\XINT_FL_binom_a
+ \the\numexpr\xintNum{#2}\expandafter.\the\numexpr\xintNum{#3}.\XINTdigits.#1%
+}%
+\def\XINT_flbinom_opt #1[\xint:#2]#3#4%
+{%
+ \expandafter\XINT_FL_binom_a
+ \the\numexpr\xintNum{#3}\expandafter.\the\numexpr\xintNum{#4}\expandafter.%
+ \the\numexpr #2.#1%
+}%
+\def\XINT_FL_binom_a #1.#2.%
+{%
+ \expandafter\XINT_FL_binom_fork \the\numexpr #1-#2.#2.#1.%
+}%
+\def\XINT_FL_binom_fork #1#2.#3#4.#5#6.%
+{%
+ \if-#5\xint_dothis \XINT_FL_binom_neg\fi
+ \if-#1\xint_dothis \XINT_FL_binom_zero\fi
+ \if-#3\xint_dothis \XINT_FL_binom_zero\fi
+ \if0#1\xint_dothis \XINT_FL_binom_one\fi
+ \if0#3\xint_dothis \XINT_FL_binom_one\fi
+ \ifnum #5#6>\xint_c_x^viii_mone \xint_dothis\XINT_FL_binom_toobig\fi
+ \ifnum #1#2>#3#4 \xint_dothis\XINT_FL_binom_ab \fi
+ \xint_orthat\XINT_FL_binom_aa
+ #1#2.#3#4.#5#6.%
+}%
+\def\XINT_FL_binom_neg #1.#2.#3.#4.#5%
+{%
+ #5[#4]{\XINT_signalcondition{InvalidOperation}
+ {binomial with first arg negative: #3}{}{0[0]}}%
+}%
+\def\XINT_FL_binom_toobig #1.#2.#3.#4.#5%
+{%
+ #5[#4]{\XINT_signalcondition{InvalidOperation}
+ {binomial with first arg too big: 99999999 < #3}{}{0[0]}}%
+}%
+\def\XINT_FL_binom_one #1.#2.#3.#4.#5{#5[#4]{1[0]}}%
+\def\XINT_FL_binom_zero #1.#2.#3.#4.#5{#5[#4]{0[0]}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_FL_binom_aa #1.#2.#3.#4.#5%
+{%
+ #5[#4]{\xintDiv{\XINT_FL_pfac_increaseP
+ #2.#3.\xint_c_iv{#4+\xint_c_i}{\XINTinfloat[#4+\xint_c_iii]}}%
+ {\XINT_FL_fac_fork_b
+ #1.\xint_c_iv{#4+\xint_c_i}\XINT_FL_fac_out{\XINTinfloat[#4+\xint_c_iii]}}}%
+}%
+\def\XINT_FL_binom_ab #1.#2.#3.#4.#5%
+{%
+ #5[#4]{\xintDiv{\XINT_FL_pfac_increaseP
+ #1.#3.\xint_c_iv{#4+\xint_c_i}{\XINTinfloat[#4+\xint_c_iii]}}%
+ {\XINT_FL_fac_fork_b
+ #2.\xint_c_iv{#4+\xint_c_i}\XINT_FL_fac_out{\XINTinfloat[#4+\xint_c_iii]}}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatSqrt}, \csh{XINTinFloatSqrt}}
+% \lverb|First done for 1.08.
+%
+% The float version was developed at the same time as the integer one and even
+% a bit earlier. As a result the integer variant had some sub-optimal parts.
+% Anyway, for 1.2f I have rewritten the integer variant, and the float variant
+% delegates all preparatory wrok for it until the last step. In particular the
+% very low precisions are not penalized anymore from doing computations for at
+% least 17 or 18 digits. Both the large and small precisions give quite
+% shorter computation times.
+%
+% Also, after examining more closely the achieved precision I decided to
+% extend the float version in order for it to obtain the correct rounding (for
+% inputs already of at most P digits with P the precision) of the theoretical
+% exact value.
+%
+% Beyond about 500 digits of precision the efficiency decreases swiftly,
+% as is the case generally speaking with xintcore/xint/xintfrac arithmetic
+% macros.
+%
+% Final note: with 1.2f the input is always first rounded to P significant
+% places.
+%
+%
+% |
+% \begin{macrocode}
+\def\xintFloatSqrt {\romannumeral0\xintfloatsqrt }%
+\def\xintfloatsqrt #1{\XINT_flsqrt_chkopt \xintfloat #1\xint:}%
+\def\XINTinFloatSqrt {\romannumeral0\XINTinfloatsqrt }%
+\def\XINTinfloatsqrt #1{\XINT_flsqrt_chkopt \XINTinfloat #1\xint:}%
+\def\XINT_flsqrt_chkopt #1#2%
+{%
+ \ifx [#2\expandafter\XINT_flsqrt_opt
+ \else\expandafter\XINT_flsqrt_noopt
+ \fi #1#2%
+}%
+\def\XINT_flsqrt_noopt #1#2\xint:%
+{%
+ \expandafter\XINT_FL_sqrt_a
+ \romannumeral0\XINTinfloat[\XINTdigits]{#2}\XINTdigits.#1%
+}%
+\def\XINT_flsqrt_opt #1[\xint:#2]%#3%
+{%
+ \expandafter\XINT_flsqrt_opt_a\the\numexpr #2.#1%
+}%
+\def\XINT_flsqrt_opt_a #1.#2#3%
+{%
+ \expandafter\XINT_FL_sqrt_a\romannumeral0\XINTinfloat[#1]{#3}#1.#2%
+}%
+\def\XINT_FL_sqrt_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_FL_sqrt_iszero
+ 0#1\XINT_FL_sqrt_isneg
+ 0-{\XINT_FL_sqrt_pos #1}%
+ \krof
+}%[
+\def\XINT_FL_sqrt_iszero #1]#2.#3{#3[#2]{0[0]}}%
+\def\XINT_FL_sqrt_isneg #1]#2.#3%
+{%
+ #3[#2]{\XINT_signalcondition{InvalidOperation}
+ {Square root of negative: -#1]}{}{0[0]}}%
+}%
+% \end{macrocode}
+%\lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_FL_sqrt_pos #1[#2]#3.%
+{%
+ \expandafter\XINT_flsqrt
+ \the\numexpr #3\ifodd #2 \xint_dothis {+\xint_c_iii.(#2+\xint_c_i).0}\fi
+ \xint_orthat {+\xint_c_ii.#2.{}}#100.#3.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt #1.#2.%
+{%
+ \expandafter\XINT_flsqrt_a
+ \the\numexpr #2/\xint_c_ii-(#1-\xint_c_i)/\xint_c_ii.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_a #1.#2.#3#4.#5.%
+{%
+ \expandafter\XINT_flsqrt_b
+ \the\numexpr (#2-\xint_c_i)/\xint_c_ii\expandafter.%
+ \romannumeral0\XINT_sqrt_start #2.#4#3.#5.#2.#4#3.#5.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_b #1.#2#3%
+{%
+ \expandafter\XINT_flsqrt_c
+ \romannumeral0\xintiisub
+ {\XINT_dsx_addzeros {#1}#2;}%
+ {\xintiiDivRound{\XINT_dsx_addzeros {#1}#3;}%
+ {\XINT_dbl#2\xint_bye2345678\xint_bye*\xint_c_ii\relax}}.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_c #1.#2.%
+{%
+ \expandafter\XINT_flsqrt_d
+ \romannumeral0\XINT_split_fromleft#2.#1\xint_bye2345678\xint_bye..%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_d #1.#2#3.%
+{%
+ \ifnum #2=\xint_c_v
+ \expandafter\XINT_flsqrt_f\else\expandafter\XINT_flsqrt_finish\fi
+ #2#3.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_finish #1#2.#3.#4.#5.#6.#7.#8{#8[#6]{#3#1[#7]}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_f 5#1.%
+ {\expandafter\XINT_flsqrt_g\romannumeral0\xintinum{#1}\relax.}%
+\def\XINT_flsqrt_g #1#2#3.{\if\relax#2\xint_dothis{\XINT_flsqrt_h #1}\fi
+ \xint_orthat{\XINT_flsqrt_finish 5.}}%
+\def\XINT_flsqrt_h #1{\ifnum #1<\xint_c_iii\xint_dothis{\XINT_flsqrt_again}\fi
+ \xint_orthat{\XINT_flsqrt_finish 5.}}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_again #1.#2.%
+{%
+ \expandafter\XINT_flsqrt_again_a\the\numexpr #2+\xint_c_viii.%
+}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_flsqrt_again_a #1.#2.#3.%
+{%
+ \expandafter\XINT_flsqrt_b
+ \the\numexpr (#1-\xint_c_i)/\xint_c_ii\expandafter.%
+ \romannumeral0\XINT_sqrt_start #1.#200000000.#3.%
+ #1.#200000000.#3.%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatE}, \csh{XINTinFloatE}}
+% \lverb|1.07: The fraction is the first argument contrarily to \xintTrunc and
+% \xintRound.
+%
+% 1.2k had to rewrite this since there is no more a \XINT_float_a macro.
+% Attention about \XINTinFloatE: it is for use by xintexpr.sty, contrarily to
+% other \XINTinFloat<foo> macros it inserts itself the [\XINTdigits] thing,
+% and with value 0 it produces on output 0[N], not 0[0].
+% |
+% \begin{macrocode}
+\def\xintFloatE {\romannumeral0\xintfloate }%
+\def\xintfloate #1{\XINT_floate_chkopt #1\xint:}%
+\def\XINT_floate_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_floate_opt
+ \else\expandafter\XINT_floate_noopt
+ \fi #1%
+}%
+\def\XINT_floate_noopt #1\xint:%
+{%
+ \expandafter\XINT_floate_post
+ \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.%
+}%
+\def\XINT_floate_opt [\xint:#1]%
+{%
+ \expandafter\XINT_floate_opt_a\the\numexpr #1.%
+}%
+\def\XINT_floate_opt_a #1.#2%
+{%
+ \expandafter\XINT_floate_post
+ \romannumeral0\XINTinfloat[#1]{#2}#1.%
+}%
+\def\XINT_floate_post #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_floate_zero
+ 0#1\XINT_floate_neg
+ 0-\XINT_floate_pos
+ \krof #1%
+}%[
+\def\XINT_floate_zero #1]#2.#3{ 0.e0}%
+\def\XINT_floate_neg-{\expandafter-\romannumeral0\XINT_floate_pos}%
+% \end{macrocode}
+% \lverb|&
+% |
+% \begin{macrocode}
+\def\XINT_floate_pos #1#2[#3]#4.#5%
+{%
+ \expandafter\XINT_float_pos_done\the\numexpr#3+#4+#5-\xint_c_i.#1.#2;%
+}%
+\def\XINTinFloatE {\romannumeral0\XINTinfloate }%
+\def\XINTinfloate
+ {\expandafter\XINT_infloate\romannumeral0\XINTinfloat[\XINTdigits]}%
+\def\XINT_infloate #1[#2]#3%
+ {\expandafter\XINT_infloate_end\the\numexpr #3+#2.{#1}}%
+\def\XINT_infloate_end #1.#2{ #2[#1]}%
+% \end{macrocode}
+% \subsection{\csh{XINTinFloatMod}}
+% \lverb|1.1. Pour emploi dans xintexpr. Code shortened at 1.2p.|
+% \begin{macrocode}
+\def\XINTinFloatMod {\romannumeral0\XINTinfloatmod [\XINTdigits]}%
+\def\XINTinfloatmod [#1]#2#3%
+{%
+ \XINTinfloat[#1]{\xintMod
+ {\romannumeral0\XINTinfloat[#1]{#2}}%
+ {\romannumeral0\XINTinfloat[#1]{#3}}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{XINTinFloatDivFloor}}
+% \lverb|1.2p. Formerly // and /: in \xintfloatexpr used \xintDivFloor and
+% \xintMod, hence did not round their operands to float precision beforehand.|
+% \begin{macrocode}
+\def\XINTinFloatDivFloor {\romannumeral0\XINTinfloatdivfloor [\XINTdigits]}%
+\def\XINTinfloatdivfloor [#1]#2#3%
+{%
+ \xintdivfloor
+ {\romannumeral0\XINTinfloat[#1]{#2}}%
+ {\romannumeral0\XINTinfloat[#1]{#3}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{XINTinFloatDivMod}}
+% \lverb|1.2p. Pour emploi dans xintexpr, donc je ne prends pas la peine de
+% faire l'expansion du modulo, qui se produira dans le \csname.
+%
+% Hésitation sur le quotient, faut-il l'arrondir immédiatement ?
+% Finalement non, le produire comme un integer.|
+% \begin{macrocode}
+\def\XINTinFloatDivMod {\romannumeral0\XINTinfloatdivmod [\XINTdigits]}%
+\def\XINTinfloatdivmod [#1]#2#3%
+{%
+ \expandafter\XINT_infloatdivmod
+ \romannumeral0\xintdivmod
+ {\romannumeral0\XINTinfloat[#1]{#2}}%
+ {\romannumeral0\XINTinfloat[#1]{#3}}%
+ {#1}%
+}%
+\def\XINT_infloatdivmod #1#2#3{ #1,\XINTinFloat[#3]{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintifFloatInt}}
+% \lverb|1.3a for ifint() function in \xintfloatexpr.|
+% \begin{macrocode}
+\def\xintifFloatInt {\romannumeral0\xintiffloatint}%
+\def\xintiffloatint #1{\expandafter\XINT_iffloatint
+ \romannumeral0\xintrez{\XINTinFloat[\XINTdigits]{#1}}}%
+\def\XINT_iffloatint #1#2/1[#3]%
+{%
+ \if 0#1\xint_dothis\xint_stop_atfirstoftwo\fi
+ \ifnum#3<\xint_c_\xint_dothis\xint_stop_atsecondoftwo\fi
+ \xint_orthat\xint_stop_atfirstoftwo
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatIsInt}}
+% \lverb|1.3d for isint() function in \xintfloatexpr.|
+% \begin{macrocode}
+\def\xintFloatIsInt {\romannumeral0\xintfloatisint}%
+\def\xintfloatisint #1{\expandafter\XINT_iffloatint
+ \romannumeral0\xintrez{\XINTinFloat[\XINTdigits]{#1}}10}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{XINTinRandomFloatS}, \csh{XINTinRandomFloatSdigits}}
+% \lverb|1.3b. Support for random() function.
+%
+% Thus as it is a priori only for xintexpr usage, it expands inside \csname
+% context, but as we need to get rid of initial zeros we use \xintRandomDigits
+% not \xintXRandomDigits (\expanded would have a use case here).
+%
+% And anyway as we want to be able to use random() in
+% \xintdeffunc/\xintNewExpr, it is good to have f-expandable macros, so we add
+% the small overhead to make it f-expandable.
+%
+% We don't have to be very efficient in removing leading zeroes, as there is
+% only 10$%
+% chance for each successive one. Besides we use (current) internal storage
+% format of the type A[N], where A is not required to be with \xintDigits
+% digits, so N will simply be -\xintDigits and needs no adjustment.
+%
+% In case we use in future with #1 something else than \xintDigits we do
+% the 0-(#1) construct.
+%
+% I had some qualms about doing a random float like this which means that
+% when there are leading zeros in the random digits the (virtual) mantissa
+% ends up with trailing zeros. That did not feel right but I checked random()
+% in Python (which of course uses radix 2), and indeed this is what happens
+% there.
+%
+% |
+% \begin{macrocode}
+\def\XINTinRandomFloatS{\romannumeral0\XINTinrandomfloatS}%
+\def\XINTinRandomFloatSdigits{\XINTinRandomFloatS[\XINTdigits]}%
+\def\XINTinrandomfloatS[#1]%
+{%
+ \expandafter\XINT_inrandomfloatS\the\numexpr\xint_c_-(#1)\xint:
+}%
+\def\XINT_inrandomfloatS-#1\xint:
+{%
+ \expandafter\XINT_inrandomfloatS_a
+ \romannumeral0\xintrandomdigits{#1}[-#1]%
+}%
+% \end{macrocode}
+% \lverb|We add one macro to handle a tiny bit faster 90% of cases, after all
+% we also use one extra macro for the completely improbable all 0 case.|
+% \begin{macrocode}
+\def\XINT_inrandomfloatS_a#1%
+{%
+ \if#10\xint_dothis{\XINT_inrandomfloatS_b}\fi
+ \xint_orthat{ #1}%
+}%[
+\def\XINT_inrandomfloatS_b#1%
+{%
+ \if#1[\xint_dothis{\XINT_inrandomfloatS_zero}\fi% ]
+ \if#10\xint_dothis{\XINT_inrandomfloatS_b}\fi
+ \xint_orthat{ #1}%
+}%[
+\def\XINT_inrandomfloatS_zero#1]{ 0[0]}%
+% \end{macrocode}
+% \subsection{(WIP) \csh{XINTinRandomFloatSixteen}}
+% \lverb|1.3b. Support for qrand() function.|
+% \begin{macrocode}
+\def\XINTinRandomFloatSixteen%
+{%
+ \romannumeral0\expandafter\XINT_inrandomfloatS_a
+ \romannumeral`&&@\expandafter\XINT_eightrandomdigits
+ \romannumeral`&&@\XINT_eightrandomdigits[-16]%
+}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintfrac}
+% \cleardoublepage\let\xintfracnameUp\undefined
+%\gardesactifs
+%\let</xintfrac>\relax
+%\let<*xintseries>\gardesinactifs
+%</xintfrac>^^A---------------------------------------------------
+%<*xintseries>^^A-------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; -*-
+% \clearpage\csname xintseriesnameUp\endcsname
+% \section{Package \xintseriesnameimp implementation}
+% \RaisedLabel{sec:seriesimp}
+%
+% \localtableofcontents
+%
+% The commenting is currently (\xintdocdate) very sparse.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintseries.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintfrac.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintseries}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintseries.sty
+ \ifx\w\relax % but xintfrac.sty not yet loaded.
+ \def\z{\endgroup\input xintfrac.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintfrac.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintfrac}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintseries already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintseries}%
+ [2019/04/05 1.3e Expandable partial sums with xint package (JFB)]%
+% \end{macrocode}
+% \subsection{\csh{xintSeries}}
+% \begin{macrocode}
+\def\xintSeries {\romannumeral0\xintseries }%
+\def\xintseries #1#2%
+{%
+ \expandafter\XINT_series\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_series #1#2#3%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0/1[0]}%
+ \else
+ \xint_afterfi {\XINT_series_loop {#1}{0}{#2}{#3}}%
+ \fi
+}%
+\def\XINT_series_loop #1#2#3#4%
+{%
+ \ifnum #3>#1 \else \XINT_series_exit \fi
+ \expandafter\XINT_series_loop\expandafter
+ {\the\numexpr #1+1\expandafter }\expandafter
+ {\romannumeral0\xintadd {#2}{#4{#1}}}%
+ {#3}{#4}%
+}%
+\def\XINT_series_exit \fi #1#2#3#4#5#6#7#8%
+{%
+ \fi\xint_gobble_ii #6%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintiSeries}}
+% \begin{macrocode}
+\def\xintiSeries {\romannumeral0\xintiseries }%
+\def\xintiseries #1#2%
+{%
+ \expandafter\XINT_iseries\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_iseries #1#2#3%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0}%
+ \else
+ \xint_afterfi {\XINT_iseries_loop {#1}{0}{#2}{#3}}%
+ \fi
+}%
+\def\XINT_iseries_loop #1#2#3#4%
+{%
+ \ifnum #3>#1 \else \XINT_iseries_exit \fi
+ \expandafter\XINT_iseries_loop\expandafter
+ {\the\numexpr #1+1\expandafter }\expandafter
+ {\romannumeral0\xintiiadd {#2}{#4{#1}}}%
+ {#3}{#4}%
+}%
+\def\XINT_iseries_exit \fi #1#2#3#4#5#6#7#8%
+{%
+ \fi\xint_gobble_ii #6%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintPowerSeries}}
+% \lverb|&
+% The 1.03 version was very lame and created a build-up of denominators.
+% (this was at a time \xintAdd always multiplied denominators, by the way)
+% The Horner scheme for polynomial evaluation is used in 1.04, this
+% cures the denominator problem and drastically improves the efficiency
+% of the macro.
+% Modified in 1.06 to give the indices first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+% 1.08a adds the forgotten optimization following that previous change.|
+% \begin{macrocode}
+\def\xintPowerSeries {\romannumeral0\xintpowerseries }%
+\def\xintpowerseries #1#2%
+{%
+ \expandafter\XINT_powseries\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_powseries #1#2#3#4%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0/1[0]}%
+ \else
+ \xint_afterfi
+ {\XINT_powseries_loop_i {#3{#2}}{#1}{#2}{#3}{#4}}%
+ \fi
+}%
+\def\XINT_powseries_loop_i #1#2#3#4#5%
+{%
+ \ifnum #3>#2 \else\XINT_powseries_exit_i\fi
+ \expandafter\XINT_powseries_loop_ii\expandafter
+ {\the\numexpr #3-1\expandafter}\expandafter
+ {\romannumeral0\xintmul {#1}{#5}}{#2}{#4}{#5}%
+}%
+\def\XINT_powseries_loop_ii #1#2#3#4%
+{%
+ \expandafter\XINT_powseries_loop_i\expandafter
+ {\romannumeral0\xintadd {#4{#1}}{#2}}{#3}{#1}{#4}%
+}%
+\def\XINT_powseries_exit_i\fi #1#2#3#4#5#6#7#8#9%
+{%
+ \fi \XINT_powseries_exit_ii #6{#7}%
+}%
+\def\XINT_powseries_exit_ii #1#2#3#4#5#6%
+{%
+ \xintmul{\xintPow {#5}{#6}}{#4}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintPowerSeriesX}}
+% \lverb|&
+% Same as \xintPowerSeries except for the initial expansion of the x parameter.
+% Modified in 1.06 to give the indices first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+% 1.08a adds the forgotten optimization following that previous change.|
+% \begin{macrocode}
+\def\xintPowerSeriesX {\romannumeral0\xintpowerseriesx }%
+\def\xintpowerseriesx #1#2%
+{%
+ \expandafter\XINT_powseriesx\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_powseriesx #1#2#3#4%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0/1[0]}%
+ \else
+ \xint_afterfi
+ {\expandafter\XINT_powseriesx_pre\expandafter
+ {\romannumeral`&&@#4}{#1}{#2}{#3}%
+ }%
+ \fi
+}%
+\def\XINT_powseriesx_pre #1#2#3#4%
+{%
+ \XINT_powseries_loop_i {#4{#3}}{#2}{#3}{#4}{#1}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintRationalSeries}}
+% \lverb|&
+% This computes F(a)+...+F(b) on the basis of the value of F(a) and the
+% ratios F(n)/F(n-1). As in \xintPowerSeries we use an iterative scheme which
+% has the great advantage to avoid denominator build-up. This makes exact
+% computations possible with exponential type series, which would be completely
+% inaccessible to \xintSeries.
+% #1=a, #2=b, #3=F(a), #4=ratio function
+% Modified in 1.06 to give the indices first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+% 1.08a adds the forgotten optimization following that previous change.|
+% \begin{macrocode}
+\def\xintRationalSeries {\romannumeral0\xintratseries }%
+\def\xintratseries #1#2%
+{%
+ \expandafter\XINT_ratseries\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_ratseries #1#2#3#4%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0/1[0]}%
+ \else
+ \xint_afterfi
+ {\XINT_ratseries_loop {#2}{1}{#1}{#4}{#3}}%
+ \fi
+}%
+\def\XINT_ratseries_loop #1#2#3#4%
+{%
+ \ifnum #1>#3 \else\XINT_ratseries_exit_i\fi
+ \expandafter\XINT_ratseries_loop\expandafter
+ {\the\numexpr #1-1\expandafter}\expandafter
+ {\romannumeral0\xintadd {1}{\xintMul {#2}{#4{#1}}}}{#3}{#4}%
+}%
+\def\XINT_ratseries_exit_i\fi #1#2#3#4#5#6#7#8%
+{%
+ \fi \XINT_ratseries_exit_ii #6%
+}%
+\def\XINT_ratseries_exit_ii #1#2#3#4#5%
+{%
+ \XINT_ratseries_exit_iii #5%
+}%
+\def\XINT_ratseries_exit_iii #1#2#3#4%
+{%
+ \xintmul{#2}{#4}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintRationalSeriesX}}
+% \lverb|&
+% a,b,initial,ratiofunction,x$\
+% This computes F(a,x)+...+F(b,x) on the basis of the value of F(a,x) and the
+% ratios F(n,x)/F(n-1,x). The argument x is first expanded and it is the value
+% resulting from this which is used then throughout. The initial term F(a,x)
+% must be defined as one-parameter macro which will be given x.
+% Modified in 1.06 to give the indices first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+% 1.08a adds the forgotten optimization following that previous change.|
+% \begin{macrocode}
+\def\xintRationalSeriesX {\romannumeral0\xintratseriesx }%
+\def\xintratseriesx #1#2%
+{%
+ \expandafter\XINT_ratseriesx\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_ratseriesx #1#2#3#4#5%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0/1[0]}%
+ \else
+ \xint_afterfi
+ {\expandafter\XINT_ratseriesx_pre\expandafter
+ {\romannumeral`&&@#5}{#2}{#1}{#4}{#3}%
+ }%
+ \fi
+}%
+\def\XINT_ratseriesx_pre #1#2#3#4#5%
+{%
+ \XINT_ratseries_loop {#2}{1}{#3}{#4{#1}}{#5{#1}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFxPtPowerSeries}}
+% \lverb|&
+% I am not two happy with this piece of code. Will make it more economical
+% another day.
+% Modified in 1.06 to give the indices first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+% 1.08a: forgot last time some optimization from the change to \numexpr.|
+% \begin{macrocode}
+\def\xintFxPtPowerSeries {\romannumeral0\xintfxptpowerseries }%
+\def\xintfxptpowerseries #1#2%
+{%
+ \expandafter\XINT_fppowseries\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_fppowseries #1#2#3#4#5%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0}%
+ \else
+ \xint_afterfi
+ {\expandafter\XINT_fppowseries_loop_pre\expandafter
+ {\romannumeral0\xinttrunc {#5}{\xintPow {#4}{#1}}}%
+ {#1}{#4}{#2}{#3}{#5}%
+ }%
+ \fi
+}%
+\def\XINT_fppowseries_loop_pre #1#2#3#4#5#6%
+{%
+ \ifnum #4>#2 \else\XINT_fppowseries_dont_i \fi
+ \expandafter\XINT_fppowseries_loop_i\expandafter
+ {\the\numexpr #2+\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\xintitrunc {#6}{\xintMul {#5{#2}}{#1}}}%
+ {#1}{#3}{#4}{#5}{#6}%
+}%
+\def\XINT_fppowseries_dont_i \fi\expandafter\XINT_fppowseries_loop_i
+ {\fi \expandafter\XINT_fppowseries_dont_ii }%
+\def\XINT_fppowseries_dont_ii #1#2#3#4#5#6#7{\xinttrunc {#7}{#2[-#7]}}%
+\def\XINT_fppowseries_loop_i #1#2#3#4#5#6#7%
+{%
+ \ifnum #5>#1 \else \XINT_fppowseries_exit_i \fi
+ \expandafter\XINT_fppowseries_loop_ii\expandafter
+ {\romannumeral0\xinttrunc {#7}{\xintMul {#3}{#4}}}%
+ {#1}{#4}{#2}{#5}{#6}{#7}%
+}%
+\def\XINT_fppowseries_loop_ii #1#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_fppowseries_loop_i\expandafter
+ {\the\numexpr #2+\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\xintiiadd {#4}{\xintiTrunc {#7}{\xintMul {#6{#2}}{#1}}}}%
+ {#1}{#3}{#5}{#6}{#7}%
+}%
+\def\XINT_fppowseries_exit_i\fi\expandafter\XINT_fppowseries_loop_ii
+ {\fi \expandafter\XINT_fppowseries_exit_ii }%
+\def\XINT_fppowseries_exit_ii #1#2#3#4#5#6#7%
+{%
+ \xinttrunc {#7}
+ {\xintiiadd {#4}{\xintiTrunc {#7}{\xintMul {#6{#2}}{#1}}}[-#7]}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFxPtPowerSeriesX}}
+% \lverb|&
+% a,b,coeff,x,D$\
+% Modified in 1.06 to give the indices first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+% 1.08a adds the forgotten optimization following that previous change.|
+% \begin{macrocode}
+\def\xintFxPtPowerSeriesX {\romannumeral0\xintfxptpowerseriesx }%
+\def\xintfxptpowerseriesx #1#2%
+{%
+ \expandafter\XINT_fppowseriesx\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_fppowseriesx #1#2#3#4#5%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0}%
+ \else
+ \xint_afterfi
+ {\expandafter \XINT_fppowseriesx_pre \expandafter
+ {\romannumeral`&&@#4}{#1}{#2}{#3}{#5}%
+ }%
+ \fi
+}%
+\def\XINT_fppowseriesx_pre #1#2#3#4#5%
+{%
+ \expandafter\XINT_fppowseries_loop_pre\expandafter
+ {\romannumeral0\xinttrunc {#5}{\xintPow {#1}{#2}}}%
+ {#2}{#1}{#3}{#4}{#5}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatPowerSeries}}
+% \lverb|1.08a. I still have to re-visit \xintFxPtPowerSeries; temporarily I
+% just adapted the code to the case of floats.|
+% \begin{macrocode}
+\def\xintFloatPowerSeries {\romannumeral0\xintfloatpowerseries }%
+\def\xintfloatpowerseries #1{\XINT_flpowseries_chkopt #1\xint:}%
+\def\XINT_flpowseries_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_flpowseries_opt
+ \else\expandafter\XINT_flpowseries_noopt
+ \fi
+ #1%
+}%
+\def\XINT_flpowseries_noopt #1\xint:#2%
+{%
+ \expandafter\XINT_flpowseries\expandafter
+ {\the\numexpr #1\expandafter}\expandafter
+ {\the\numexpr #2}\XINTdigits
+}%
+\def\XINT_flpowseries_opt [\xint:#1]#2#3%
+{%
+ \expandafter\XINT_flpowseries\expandafter
+ {\the\numexpr #2\expandafter}\expandafter
+ {\the\numexpr #3\expandafter}{\the\numexpr #1}%
+}%
+\def\XINT_flpowseries #1#2#3#4#5%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0.e0}%
+ \else
+ \xint_afterfi
+ {\expandafter\XINT_flpowseries_loop_pre\expandafter
+ {\romannumeral0\XINTinfloatpow [#3]{#5}{#1}}%
+ {#1}{#5}{#2}{#4}{#3}%
+ }%
+ \fi
+}%
+\def\XINT_flpowseries_loop_pre #1#2#3#4#5#6%
+{%
+ \ifnum #4>#2 \else\XINT_flpowseries_dont_i \fi
+ \expandafter\XINT_flpowseries_loop_i\expandafter
+ {\the\numexpr #2+\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\XINTinfloatmul [#6]{#5{#2}}{#1}}%
+ {#1}{#3}{#4}{#5}{#6}%
+}%
+\def\XINT_flpowseries_dont_i \fi\expandafter\XINT_flpowseries_loop_i
+ {\fi \expandafter\XINT_flpowseries_dont_ii }%
+\def\XINT_flpowseries_dont_ii #1#2#3#4#5#6#7{\xintfloat [#7]{#2}}%
+\def\XINT_flpowseries_loop_i #1#2#3#4#5#6#7%
+{%
+ \ifnum #5>#1 \else \XINT_flpowseries_exit_i \fi
+ \expandafter\XINT_flpowseries_loop_ii\expandafter
+ {\romannumeral0\XINTinfloatmul [#7]{#3}{#4}}%
+ {#1}{#4}{#2}{#5}{#6}{#7}%
+}%
+\def\XINT_flpowseries_loop_ii #1#2#3#4#5#6#7%
+{%
+ \expandafter\XINT_flpowseries_loop_i\expandafter
+ {\the\numexpr #2+\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\XINTinfloatadd [#7]{#4}%
+ {\XINTinfloatmul [#7]{#6{#2}}{#1}}}%
+ {#1}{#3}{#5}{#6}{#7}%
+}%
+\def\XINT_flpowseries_exit_i\fi\expandafter\XINT_flpowseries_loop_ii
+ {\fi \expandafter\XINT_flpowseries_exit_ii }%
+\def\XINT_flpowseries_exit_ii #1#2#3#4#5#6#7%
+{%
+ \xintfloatadd [#7]{#4}{\XINTinfloatmul [#7]{#6{#2}}{#1}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFloatPowerSeriesX}}
+% \lverb|1.08a|
+% \begin{macrocode}
+\def\xintFloatPowerSeriesX {\romannumeral0\xintfloatpowerseriesx }%
+\def\xintfloatpowerseriesx #1{\XINT_flpowseriesx_chkopt #1\xint:}%
+\def\XINT_flpowseriesx_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_flpowseriesx_opt
+ \else\expandafter\XINT_flpowseriesx_noopt
+ \fi
+ #1%
+}%
+\def\XINT_flpowseriesx_noopt #1\xint:#2%
+{%
+ \expandafter\XINT_flpowseriesx\expandafter
+ {\the\numexpr #1\expandafter}\expandafter
+ {\the\numexpr #2}\XINTdigits
+}%
+\def\XINT_flpowseriesx_opt [\xint:#1]#2#3%
+{%
+ \expandafter\XINT_flpowseriesx\expandafter
+ {\the\numexpr #2\expandafter}\expandafter
+ {\the\numexpr #3\expandafter}{\the\numexpr #1}%
+}%
+\def\XINT_flpowseriesx #1#2#3#4#5%
+{%
+ \ifnum #2<#1
+ \xint_afterfi { 0.e0}%
+ \else
+ \xint_afterfi
+ {\expandafter \XINT_flpowseriesx_pre \expandafter
+ {\romannumeral`&&@#5}{#1}{#2}{#4}{#3}%
+ }%
+ \fi
+}%
+\def\XINT_flpowseriesx_pre #1#2#3#4#5%
+{%
+ \expandafter\XINT_flpowseries_loop_pre\expandafter
+ {\romannumeral0\XINTinfloatpow [#5]{#1}{#2}}%
+ {#2}{#1}{#3}{#4}{#5}%
+}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintseries}
+% \cleardoublepage\let\xintseriesnameUp\undefined
+%\gardesactifs
+%\let</xintseries>\relax
+%\let<*xintcfrac>\gardesinactifs
+%</xintseries>^^A-------------------------------------------------
+%<*xintcfrac>^^A--------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; -*-
+% \clearpage\csname xintcfracnameUp\endcsname
+% \section{Package \xintcfracnameimp implementation}
+% \RaisedLabel{sec:cfracimp}
+%
+% \localtableofcontents
+%
+% The commenting is currently (\xintdocdate) very sparse. Release |1.09m|
+% (|2014/02/26|) has modified a few things: |\xintFtoCs| and
+% |\xintCntoCs| insert spaces after the commas, |\xintCstoF| and
+% |\xintCstoCv| authorize spaces in the input also before the commas,
+% |\xintCntoCs| does not brace the produced coefficients, new macros
+% |\xintFtoC|, |\xintCtoF|, |\xintCtoCv|, |\xintFGtoC|, and
+% |\xintGGCFrac|.
+%
+% There is partial dependency on \xinttoolsnameimp due to |\xintCstoF| and
+% |\xintCsToCv|.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintcfrac.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintfrac.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintcfrac}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintcfrac.sty
+ \ifx\w\relax % but xintfrac.sty not yet loaded.
+ \def\z{\endgroup\input xintfrac.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintfrac.sty not yet loaded.
+ \def\z{\endgroup\RequirePackage{xintfrac}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintcfrac already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes% defined in xintkernel.sty
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintcfrac}%
+ [2019/04/05 1.3e Expandable continued fractions with xint package (JFB)]%
+% \end{macrocode}
+% \subsection{\csh{xintCFrac}}
+% \begin{macrocode}
+\def\xintCFrac {\romannumeral0\xintcfrac }%
+\def\xintcfrac #1%
+{%
+ \XINT_cfrac_opt_a #1\xint:
+}%
+\def\XINT_cfrac_opt_a #1%
+{%
+ \ifx[#1\XINT_cfrac_opt_b\fi \XINT_cfrac_noopt #1%
+}%
+\def\XINT_cfrac_noopt #1\xint:
+{%
+ \expandafter\XINT_cfrac_A\romannumeral0\xintrawwithzeros {#1}\Z
+ \relax\relax
+}%
+\def\XINT_cfrac_opt_b\fi\XINT_cfrac_noopt [\xint:#1]%
+{%
+ \fi\csname XINT_cfrac_opt#1\endcsname
+}%
+\def\XINT_cfrac_optl #1%
+{%
+ \expandafter\XINT_cfrac_A\romannumeral0\xintrawwithzeros {#1}\Z
+ \relax\hfill
+}%
+\def\XINT_cfrac_optc #1%
+{%
+ \expandafter\XINT_cfrac_A\romannumeral0\xintrawwithzeros {#1}\Z
+ \relax\relax
+}%
+\def\XINT_cfrac_optr #1%
+{%
+ \expandafter\XINT_cfrac_A\romannumeral0\xintrawwithzeros {#1}\Z
+ \hfill\relax
+}%
+\def\XINT_cfrac_A #1/#2\Z
+{%
+ \expandafter\XINT_cfrac_B\romannumeral0\xintiidivision {#1}{#2}{#2}%
+}%
+\def\XINT_cfrac_B #1#2%
+{%
+ \XINT_cfrac_C #2\Z {#1}%
+}%
+\def\XINT_cfrac_C #1%
+{%
+ \xint_gob_til_zero #1\XINT_cfrac_integer 0\XINT_cfrac_D #1%
+}%
+\def\XINT_cfrac_integer 0\XINT_cfrac_D 0#1\Z #2#3#4#5{ #2}%
+\def\XINT_cfrac_D #1\Z #2#3{\XINT_cfrac_loop_a {#1}{#3}{#1}{{#2}}}%
+\def\XINT_cfrac_loop_a
+{%
+ \expandafter\XINT_cfrac_loop_d\romannumeral0\XINT_div_prepare
+}%
+\def\XINT_cfrac_loop_d #1#2%
+{%
+ \XINT_cfrac_loop_e #2.{#1}%
+}%
+\def\XINT_cfrac_loop_e #1%
+{%
+ \xint_gob_til_zero #1\xint_cfrac_loop_exit0\XINT_cfrac_loop_f #1%
+}%
+\def\XINT_cfrac_loop_f #1.#2#3#4%
+{%
+ \XINT_cfrac_loop_a {#1}{#3}{#1}{{#2}#4}%
+}%
+\def\xint_cfrac_loop_exit0\XINT_cfrac_loop_f #1.#2#3#4#5#6%
+ {\XINT_cfrac_T #5#6{#2}#4\Z }%
+\def\XINT_cfrac_T #1#2#3#4%
+{%
+ \xint_gob_til_Z #4\XINT_cfrac_end\Z\XINT_cfrac_T #1#2{#4+\cfrac{#11#2}{#3}}%
+}%
+\def\XINT_cfrac_end\Z\XINT_cfrac_T #1#2#3%
+{%
+ \XINT_cfrac_end_b #3%
+}%
+\def\XINT_cfrac_end_b \Z+\cfrac#1#2{ #2}%
+% \end{macrocode}
+% \subsection{\csh{xintGCFrac}}
+% \begin{macrocode}
+\def\xintGCFrac {\romannumeral0\xintgcfrac }%
+\def\xintgcfrac #1{\XINT_gcfrac_opt_a #1\xint:}%
+\def\XINT_gcfrac_opt_a #1%
+{%
+ \ifx[#1\XINT_gcfrac_opt_b\fi \XINT_gcfrac_noopt #1%
+}%
+\def\XINT_gcfrac_noopt #1\xint:%
+{%
+ \XINT_gcfrac #1+!/\relax\relax
+}%
+\def\XINT_gcfrac_opt_b\fi\XINT_gcfrac_noopt [\xint:#1]%
+{%
+ \fi\csname XINT_gcfrac_opt#1\endcsname
+}%
+\def\XINT_gcfrac_optl #1%
+{%
+ \XINT_gcfrac #1+!/\relax\hfill
+}%
+\def\XINT_gcfrac_optc #1%
+{%
+ \XINT_gcfrac #1+!/\relax\relax
+}%
+\def\XINT_gcfrac_optr #1%
+{%
+ \XINT_gcfrac #1+!/\hfill\relax
+}%
+\def\XINT_gcfrac
+{%
+ \expandafter\XINT_gcfrac_enter\romannumeral`&&@%
+}%
+\def\XINT_gcfrac_enter {\XINT_gcfrac_loop {}}%
+\def\XINT_gcfrac_loop #1#2+#3/%
+{%
+ \xint_gob_til_exclam #3\XINT_gcfrac_endloop!%
+ \XINT_gcfrac_loop {{#3}{#2}#1}%
+}%
+\def\XINT_gcfrac_endloop!\XINT_gcfrac_loop #1#2#3%
+{%
+ \XINT_gcfrac_T #2#3#1!!%
+}%
+\def\XINT_gcfrac_T #1#2#3#4{\XINT_gcfrac_U #1#2{\xintFrac{#4}}}%
+\def\XINT_gcfrac_U #1#2#3#4#5%
+{%
+ \xint_gob_til_exclam #5\XINT_gcfrac_end!\XINT_gcfrac_U
+ #1#2{\xintFrac{#5}%
+ \ifcase\xintSgn{#4}
+ +\or+\else-\fi
+ \cfrac{#1\xintFrac{\xintAbs{#4}}#2}{#3}}%
+}%
+\def\XINT_gcfrac_end!\XINT_gcfrac_U #1#2#3%
+{%
+ \XINT_gcfrac_end_b #3%
+}%
+\def\XINT_gcfrac_end_b #1\cfrac#2#3{ #3}%
+% \end{macrocode}
+% \subsection{\csh{xintGGCFrac}}
+% \lverb|New with 1.09m|
+% \begin{macrocode}
+\def\xintGGCFrac {\romannumeral0\xintggcfrac }%
+\def\xintggcfrac #1{\XINT_ggcfrac_opt_a #1\xint:}%
+\def\XINT_ggcfrac_opt_a #1%
+{%
+ \ifx[#1\XINT_ggcfrac_opt_b\fi \XINT_ggcfrac_noopt #1%
+}%
+\def\XINT_ggcfrac_noopt #1\xint:
+{%
+ \XINT_ggcfrac #1+!/\relax\relax
+}%
+\def\XINT_ggcfrac_opt_b\fi\XINT_ggcfrac_noopt [\xint:#1]%
+{%
+ \fi\csname XINT_ggcfrac_opt#1\endcsname
+}%
+\def\XINT_ggcfrac_optl #1%
+{%
+ \XINT_ggcfrac #1+!/\relax\hfill
+}%
+\def\XINT_ggcfrac_optc #1%
+{%
+ \XINT_ggcfrac #1+!/\relax\relax
+}%
+\def\XINT_ggcfrac_optr #1%
+{%
+ \XINT_ggcfrac #1+!/\hfill\relax
+}%
+\def\XINT_ggcfrac
+{%
+ \expandafter\XINT_ggcfrac_enter\romannumeral`&&@%
+}%
+\def\XINT_ggcfrac_enter {\XINT_ggcfrac_loop {}}%
+\def\XINT_ggcfrac_loop #1#2+#3/%
+{%
+ \xint_gob_til_exclam #3\XINT_ggcfrac_endloop!%
+ \XINT_ggcfrac_loop {{#3}{#2}#1}%
+}%
+\def\XINT_ggcfrac_endloop!\XINT_ggcfrac_loop #1#2#3%
+{%
+ \XINT_ggcfrac_T #2#3#1!!%
+}%
+\def\XINT_ggcfrac_T #1#2#3#4{\XINT_ggcfrac_U #1#2{#4}}%
+\def\XINT_ggcfrac_U #1#2#3#4#5%
+{%
+ \xint_gob_til_exclam #5\XINT_ggcfrac_end!\XINT_ggcfrac_U
+ #1#2{#5+\cfrac{#1#4#2}{#3}}%
+}%
+\def\XINT_ggcfrac_end!\XINT_ggcfrac_U #1#2#3%
+{%
+ \XINT_ggcfrac_end_b #3%
+}%
+\def\XINT_ggcfrac_end_b #1\cfrac#2#3{ #3}%
+% \end{macrocode}
+% \subsection{\csh{xintGCtoGCx}}
+% \begin{macrocode}
+\def\xintGCtoGCx {\romannumeral0\xintgctogcx }%
+\def\xintgctogcx #1#2#3%
+{%
+ \expandafter\XINT_gctgcx_start\expandafter {\romannumeral`&&@#3}{#1}{#2}%
+}%
+\def\XINT_gctgcx_start #1#2#3{\XINT_gctgcx_loop_a {}{#2}{#3}#1+!/}%
+\def\XINT_gctgcx_loop_a #1#2#3#4+#5/%
+{%
+ \xint_gob_til_exclam #5\XINT_gctgcx_end!%
+ \XINT_gctgcx_loop_b {#1{#4}}{#2{#5}#3}{#2}{#3}%
+}%
+\def\XINT_gctgcx_loop_b #1#2%
+{%
+ \XINT_gctgcx_loop_a {#1#2}%
+}%
+\def\XINT_gctgcx_end!\XINT_gctgcx_loop_b #1#2#3#4{ #1}%
+% \end{macrocode}
+% \subsection{\csh{xintFtoCs}}
+% \lverb|Modified in 1.09m: a space is added after the inserted commas.|
+% \begin{macrocode}
+\def\xintFtoCs {\romannumeral0\xintftocs }%
+\def\xintftocs #1%
+{%
+ \expandafter\XINT_ftc_A\romannumeral0\xintrawwithzeros {#1}\Z
+}%
+\def\XINT_ftc_A #1/#2\Z
+{%
+ \expandafter\XINT_ftc_B\romannumeral0\xintiidivision {#1}{#2}{#2}%
+}%
+\def\XINT_ftc_B #1#2%
+{%
+ \XINT_ftc_C #2.{#1}%
+}%
+\def\XINT_ftc_C #1%
+{%
+ \xint_gob_til_zero #1\XINT_ftc_integer 0\XINT_ftc_D #1%
+}%
+\def\XINT_ftc_integer 0\XINT_ftc_D 0#1.#2#3{ #2}%
+\def\XINT_ftc_D #1.#2#3{\XINT_ftc_loop_a {#1}{#3}{#1}{#2, }}% 1.09m adds a space
+\def\XINT_ftc_loop_a
+{%
+ \expandafter\XINT_ftc_loop_d\romannumeral0\XINT_div_prepare
+}%
+\def\XINT_ftc_loop_d #1#2%
+{%
+ \XINT_ftc_loop_e #2.{#1}%
+}%
+\def\XINT_ftc_loop_e #1%
+{%
+ \xint_gob_til_zero #1\xint_ftc_loop_exit0\XINT_ftc_loop_f #1%
+}%
+\def\XINT_ftc_loop_f #1.#2#3#4%
+{%
+ \XINT_ftc_loop_a {#1}{#3}{#1}{#4#2, }% 1.09m has an added space here
+}%
+\def\xint_ftc_loop_exit0\XINT_ftc_loop_f #1.#2#3#4{ #4#2}%
+% \end{macrocode}
+% \subsection{\csh{xintFtoCx}}
+% \begin{macrocode}
+\def\xintFtoCx {\romannumeral0\xintftocx }%
+\def\xintftocx #1#2%
+{%
+ \expandafter\XINT_ftcx_A\romannumeral0\xintrawwithzeros {#2}\Z {#1}%
+}%
+\def\XINT_ftcx_A #1/#2\Z
+{%
+ \expandafter\XINT_ftcx_B\romannumeral0\xintiidivision {#1}{#2}{#2}%
+}%
+\def\XINT_ftcx_B #1#2%
+{%
+ \XINT_ftcx_C #2.{#1}%
+}%
+\def\XINT_ftcx_C #1%
+{%
+ \xint_gob_til_zero #1\XINT_ftcx_integer 0\XINT_ftcx_D #1%
+}%
+\def\XINT_ftcx_integer 0\XINT_ftcx_D 0#1.#2#3#4{ #2}%
+\def\XINT_ftcx_D #1.#2#3#4{\XINT_ftcx_loop_a {#1}{#3}{#1}{{#2}#4}{#4}}%
+\def\XINT_ftcx_loop_a
+{%
+ \expandafter\XINT_ftcx_loop_d\romannumeral0\XINT_div_prepare
+}%
+\def\XINT_ftcx_loop_d #1#2%
+{%
+ \XINT_ftcx_loop_e #2.{#1}%
+}%
+\def\XINT_ftcx_loop_e #1%
+{%
+ \xint_gob_til_zero #1\xint_ftcx_loop_exit0\XINT_ftcx_loop_f #1%
+}%
+\def\XINT_ftcx_loop_f #1.#2#3#4#5%
+{%
+ \XINT_ftcx_loop_a {#1}{#3}{#1}{#4{#2}#5}{#5}%
+}%
+\def\xint_ftcx_loop_exit0\XINT_ftcx_loop_f #1.#2#3#4#5{ #4{#2}}%
+% \end{macrocode}
+% \subsection{\csh{xintFtoC}}
+% \lverb|New in 1.09m: this is the same as \xintFtoCx with empty separator. I
+% had temporarily during preparation of 1.09m removed braces from \xintFtoCx,
+% but I recalled later why that was useful (see doc), thus let's just here do
+% \xintFtoCx {}|
+% \begin{macrocode}
+\def\xintFtoC {\romannumeral0\xintftoc }%
+\def\xintftoc {\xintftocx {}}%
+% \end{macrocode}
+% \subsection{\csh{xintFtoGC}}
+% \begin{macrocode}
+\def\xintFtoGC {\romannumeral0\xintftogc }%
+\def\xintftogc {\xintftocx {+1/}}%
+% \end{macrocode}
+% \subsection{\csh{xintFGtoC}}
+% \lverb|New with 1.09m of 2014/02/26. Computes the common initial coefficients
+% for the two fractions f and g, and outputs them as a sequence of braced
+% items.|
+% \begin{macrocode}
+\def\xintFGtoC {\romannumeral0\xintfgtoc}%
+\def\xintfgtoc#1%
+{%
+ \expandafter\XINT_fgtc_a\romannumeral0\xintrawwithzeros {#1}\Z
+}%
+\def\XINT_fgtc_a #1/#2\Z #3%
+{%
+ \expandafter\XINT_fgtc_b\romannumeral0\xintrawwithzeros {#3}\Z #1/#2\Z { }%
+}%
+\def\XINT_fgtc_b #1/#2\Z
+{%
+ \expandafter\XINT_fgtc_c\romannumeral0\xintiidivision {#1}{#2}{#2}%
+}%
+\def\XINT_fgtc_c #1#2#3#4/#5\Z
+{%
+ \expandafter\XINT_fgtc_d\romannumeral0\xintiidivision
+ {#4}{#5}{#5}{#1}{#2}{#3}%
+}%
+\def\XINT_fgtc_d #1#2#3#4%#5#6#7%
+{%
+ \xintifEq {#1}{#4}{\XINT_fgtc_da {#1}{#2}{#3}{#4}}%
+ {\xint_thirdofthree}%
+}%
+\def\XINT_fgtc_da #1#2#3#4#5#6#7%
+{%
+ \XINT_fgtc_e {#2}{#5}{#3}{#6}{#7{#1}}%
+}%
+\def\XINT_fgtc_e #1%
+{%
+ \xintiiifZero {#1}{\expandafter\xint_firstofone\xint_gobble_iii}%
+ {\XINT_fgtc_f {#1}}%
+}%
+\def\XINT_fgtc_f #1#2%
+{%
+ \xintiiifZero {#2}{\xint_thirdofthree}{\XINT_fgtc_g {#1}{#2}}%
+}%
+\def\XINT_fgtc_g #1#2#3%
+{%
+ \expandafter\XINT_fgtc_h\romannumeral0\XINT_div_prepare {#1}{#3}{#1}{#2}%
+}%
+\def\XINT_fgtc_h #1#2#3#4#5%
+{%
+ \expandafter\XINT_fgtc_d\romannumeral0\XINT_div_prepare
+ {#4}{#5}{#4}{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFtoCC}}
+% \begin{macrocode}
+\def\xintFtoCC {\romannumeral0\xintftocc }%
+\def\xintftocc #1%
+{%
+ \expandafter\XINT_ftcc_A\expandafter {\romannumeral0\xintrawwithzeros {#1}}%
+}%
+\def\XINT_ftcc_A #1%
+{%
+ \expandafter\XINT_ftcc_B
+ \romannumeral0\xintrawwithzeros {\xintAdd {1/2[0]}{#1[0]}}\Z {#1[0]}%
+}%
+\def\XINT_ftcc_B #1/#2\Z
+{%
+ \expandafter\XINT_ftcc_C\expandafter {\romannumeral0\xintiiquo {#1}{#2}}%
+}%
+\def\XINT_ftcc_C #1#2%
+{%
+ \expandafter\XINT_ftcc_D\romannumeral0\xintsub {#2}{#1}\Z {#1}%
+}%
+\def\XINT_ftcc_D #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_ftcc_integer
+ 0#1\XINT_ftcc_En
+ 0-{\XINT_ftcc_Ep #1}%
+ \krof
+}%
+\def\XINT_ftcc_Ep #1\Z #2%
+{%
+ \expandafter\XINT_ftcc_loop_a\expandafter
+ {\romannumeral0\xintdiv {1[0]}{#1}}{#2+1/}%
+}%
+\def\XINT_ftcc_En #1\Z #2%
+{%
+ \expandafter\XINT_ftcc_loop_a\expandafter
+ {\romannumeral0\xintdiv {1[0]}{#1}}{#2+-1/}%
+}%
+\def\XINT_ftcc_integer #1\Z #2{ #2}%
+\def\XINT_ftcc_loop_a #1%
+{%
+ \expandafter\XINT_ftcc_loop_b
+ \romannumeral0\xintrawwithzeros {\xintAdd {1/2[0]}{#1}}\Z {#1}%
+}%
+\def\XINT_ftcc_loop_b #1/#2\Z
+{%
+ \expandafter\XINT_ftcc_loop_c\expandafter
+ {\romannumeral0\xintiiquo {#1}{#2}}%
+}%
+\def\XINT_ftcc_loop_c #1#2%
+{%
+ \expandafter\XINT_ftcc_loop_d
+ \romannumeral0\xintsub {#2}{#1[0]}\Z {#1}%
+}%
+\def\XINT_ftcc_loop_d #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_ftcc_end
+ 0#1\XINT_ftcc_loop_N
+ 0-{\XINT_ftcc_loop_P #1}%
+ \krof
+}%
+\def\XINT_ftcc_end #1\Z #2#3{ #3#2}%
+\def\XINT_ftcc_loop_P #1\Z #2#3%
+{%
+ \expandafter\XINT_ftcc_loop_a\expandafter
+ {\romannumeral0\xintdiv {1[0]}{#1}}{#3#2+1/}%
+}%
+\def\XINT_ftcc_loop_N #1\Z #2#3%
+{%
+ \expandafter\XINT_ftcc_loop_a\expandafter
+ {\romannumeral0\xintdiv {1[0]}{#1}}{#3#2+-1/}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintCtoF}, \csh{xintCstoF}}
+% \lverb|1.09m uses \xintCSVtoList on the argument of \xintCstoF to allow
+% spaces also before the commas. And the original \xintCstoF code became the
+% one of the new \xintCtoF dealing with a braced rather than comma separated
+% list.|
+% \begin{macrocode}
+\def\xintCstoF {\romannumeral0\xintcstof }%
+\def\xintcstof #1%
+{%
+ \expandafter\XINT_ctf_prep \romannumeral0\xintcsvtolist{#1}!%
+}%
+\def\xintCtoF {\romannumeral0\xintctof }%
+\def\xintctof #1%
+{%
+ \expandafter\XINT_ctf_prep \romannumeral`&&@#1!%
+}%
+\def\XINT_ctf_prep
+{%
+ \XINT_ctf_loop_a 1001%
+}%
+\def\XINT_ctf_loop_a #1#2#3#4#5%
+{%
+ \xint_gob_til_exclam #5\XINT_ctf_end!%
+ \expandafter\XINT_ctf_loop_b
+ \romannumeral0\xintrawwithzeros {#5}.{#1}{#2}{#3}{#4}%
+}%
+\def\XINT_ctf_loop_b #1/#2.#3#4#5#6%
+{%
+ \expandafter\XINT_ctf_loop_c\expandafter
+ {\romannumeral0\XINT_mul_fork #2\xint:#4\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#3\xint:}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#6\xint:}%
+ {\XINT_mul_fork #1\xint:#4\xint:}}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#5\xint:}%
+ {\XINT_mul_fork #1\xint:#3\xint:}}%
+}%
+\def\XINT_ctf_loop_c #1#2%
+{%
+ \expandafter\XINT_ctf_loop_d\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_ctf_loop_d #1#2%
+{%
+ \expandafter\XINT_ctf_loop_e\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_ctf_loop_e #1#2%
+{%
+ \expandafter\XINT_ctf_loop_a\expandafter{#2}#1%
+}%
+\def\XINT_ctf_end #1.#2#3#4#5{\xintrawwithzeros {#2/#3}}% 1.09b removes [0]
+% \end{macrocode}
+% \subsection{\csh{xintiCstoF}}
+% \begin{macrocode}
+\def\xintiCstoF {\romannumeral0\xinticstof }%
+\def\xinticstof #1%
+{%
+ \expandafter\XINT_icstf_prep \romannumeral`&&@#1,!,%
+}%
+\def\XINT_icstf_prep
+{%
+ \XINT_icstf_loop_a 1001%
+}%
+\def\XINT_icstf_loop_a #1#2#3#4#5,%
+{%
+ \xint_gob_til_exclam #5\XINT_icstf_end!%
+ \expandafter
+ \XINT_icstf_loop_b \romannumeral`&&@#5.{#1}{#2}{#3}{#4}%
+}%
+\def\XINT_icstf_loop_b #1.#2#3#4#5%
+{%
+ \expandafter\XINT_icstf_loop_c\expandafter
+ {\romannumeral0\xintiiadd {#5}{\XINT_mul_fork #1\xint:#3\xint:}}%
+ {\romannumeral0\xintiiadd {#4}{\XINT_mul_fork #1\xint:#2\xint:}}%
+ {#2}{#3}%
+}%
+\def\XINT_icstf_loop_c #1#2%
+{%
+ \expandafter\XINT_icstf_loop_a\expandafter {#2}{#1}%
+}%
+\def\XINT_icstf_end#1.#2#3#4#5{\xintrawwithzeros {#2/#3}}% 1.09b removes [0]
+% \end{macrocode}
+% \subsection{\csh{xintGCtoF}}
+% \begin{macrocode}
+\def\xintGCtoF {\romannumeral0\xintgctof }%
+\def\xintgctof #1%
+{%
+ \expandafter\XINT_gctf_prep \romannumeral`&&@#1+!/%
+}%
+\def\XINT_gctf_prep
+{%
+ \XINT_gctf_loop_a 1001%
+}%
+\def\XINT_gctf_loop_a #1#2#3#4#5+%
+{%
+ \expandafter\XINT_gctf_loop_b
+ \romannumeral0\xintrawwithzeros {#5}.{#1}{#2}{#3}{#4}%
+}%
+\def\XINT_gctf_loop_b #1/#2.#3#4#5#6%
+{%
+ \expandafter\XINT_gctf_loop_c\expandafter
+ {\romannumeral0\XINT_mul_fork #2\xint:#4\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#3\xint:}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#6\xint:}%
+ {\XINT_mul_fork #1\xint:#4\xint:}}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#5\xint:}%
+ {\XINT_mul_fork #1\xint:#3\xint:}}%
+}%
+\def\XINT_gctf_loop_c #1#2%
+{%
+ \expandafter\XINT_gctf_loop_d\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_gctf_loop_d #1#2%
+{%
+ \expandafter\XINT_gctf_loop_e\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_gctf_loop_e #1#2%
+{%
+ \expandafter\XINT_gctf_loop_f\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_gctf_loop_f #1#2/%
+{%
+ \xint_gob_til_exclam #2\XINT_gctf_end!%
+ \expandafter\XINT_gctf_loop_g
+ \romannumeral0\xintrawwithzeros {#2}.#1%
+}%
+\def\XINT_gctf_loop_g #1/#2.#3#4#5#6%
+{%
+ \expandafter\XINT_gctf_loop_h\expandafter
+ {\romannumeral0\XINT_mul_fork #1\xint:#6\xint:}%
+ {\romannumeral0\XINT_mul_fork #1\xint:#5\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#4\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#3\xint:}%
+}%
+\def\XINT_gctf_loop_h #1#2%
+{%
+ \expandafter\XINT_gctf_loop_i\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_gctf_loop_i #1#2%
+{%
+ \expandafter\XINT_gctf_loop_j\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_gctf_loop_j #1#2%
+{%
+ \expandafter\XINT_gctf_loop_a\expandafter {#2}#1%
+}%
+\def\XINT_gctf_end #1.#2#3#4#5{\xintrawwithzeros {#2/#3}}% 1.09b removes [0]
+% \end{macrocode}
+% \subsection{\csh{xintiGCtoF}}
+% \begin{macrocode}
+\def\xintiGCtoF {\romannumeral0\xintigctof }%
+\def\xintigctof #1%
+{%
+ \expandafter\XINT_igctf_prep \romannumeral`&&@#1+!/%
+}%
+\def\XINT_igctf_prep
+{%
+ \XINT_igctf_loop_a 1001%
+}%
+\def\XINT_igctf_loop_a #1#2#3#4#5+%
+{%
+ \expandafter\XINT_igctf_loop_b
+ \romannumeral`&&@#5.{#1}{#2}{#3}{#4}%
+}%
+\def\XINT_igctf_loop_b #1.#2#3#4#5%
+{%
+ \expandafter\XINT_igctf_loop_c\expandafter
+ {\romannumeral0\xintiiadd {#5}{\XINT_mul_fork #1\xint:#3\xint:}}%
+ {\romannumeral0\xintiiadd {#4}{\XINT_mul_fork #1\xint:#2\xint:}}%
+ {#2}{#3}%
+}%
+\def\XINT_igctf_loop_c #1#2%
+{%
+ \expandafter\XINT_igctf_loop_f\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_igctf_loop_f #1#2#3#4/%
+{%
+ \xint_gob_til_exclam #4\XINT_igctf_end!%
+ \expandafter\XINT_igctf_loop_g
+ \romannumeral`&&@#4.{#2}{#3}#1%
+}%
+\def\XINT_igctf_loop_g #1.#2#3%
+{%
+ \expandafter\XINT_igctf_loop_h\expandafter
+ {\romannumeral0\XINT_mul_fork #1\xint:#3\xint:}%
+ {\romannumeral0\XINT_mul_fork #1\xint:#2\xint:}%
+}%
+\def\XINT_igctf_loop_h #1#2%
+{%
+ \expandafter\XINT_igctf_loop_i\expandafter {#2}{#1}%
+}%
+\def\XINT_igctf_loop_i #1#2#3#4%
+{%
+ \XINT_igctf_loop_a {#3}{#4}{#1}{#2}%
+}%
+\def\XINT_igctf_end #1.#2#3#4#5{\xintrawwithzeros {#4/#5}}% 1.09b removes [0]
+% \end{macrocode}
+% \subsection{\csh{xintCtoCv}, \csh{xintCstoCv}}
+% \lverb|1.09m uses \xintCSVtoList on the argument of \xintCstoCv to allow
+% spaces also before the commas. The original \xintCstoCv code became the
+% one of the new \xintCtoF dealing with a braced rather than comma separated
+% list.|
+% \begin{macrocode}
+\def\xintCstoCv {\romannumeral0\xintcstocv }%
+\def\xintcstocv #1%
+{%
+ \expandafter\XINT_ctcv_prep\romannumeral0\xintcsvtolist{#1}!%
+}%
+\def\xintCtoCv {\romannumeral0\xintctocv }%
+\def\xintctocv #1%
+{%
+ \expandafter\XINT_ctcv_prep\romannumeral`&&@#1!%
+}%
+\def\XINT_ctcv_prep
+{%
+ \XINT_ctcv_loop_a {}1001%
+}%
+\def\XINT_ctcv_loop_a #1#2#3#4#5#6%
+{%
+ \xint_gob_til_exclam #6\XINT_ctcv_end!%
+ \expandafter\XINT_ctcv_loop_b
+ \romannumeral0\xintrawwithzeros {#6}.{#2}{#3}{#4}{#5}{#1}%
+}%
+\def\XINT_ctcv_loop_b #1/#2.#3#4#5#6%
+{%
+ \expandafter\XINT_ctcv_loop_c\expandafter
+ {\romannumeral0\XINT_mul_fork #2\xint:#4\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#3\xint:}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#6\xint:}%
+ {\XINT_mul_fork #1\xint:#4\xint:}}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#5\xint:}%
+ {\XINT_mul_fork #1\xint:#3\xint:}}%
+}%
+\def\XINT_ctcv_loop_c #1#2%
+{%
+ \expandafter\XINT_ctcv_loop_d\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_ctcv_loop_d #1#2%
+{%
+ \expandafter\XINT_ctcv_loop_e\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_ctcv_loop_e #1#2%
+{%
+ \expandafter\XINT_ctcv_loop_f\expandafter{#2}#1%
+}%
+\def\XINT_ctcv_loop_f #1#2#3#4#5%
+{%
+ \expandafter\XINT_ctcv_loop_g\expandafter
+ {\romannumeral0\xintrawwithzeros {#1/#2}}{#5}{#1}{#2}{#3}{#4}%
+}%
+\def\XINT_ctcv_loop_g #1#2{\XINT_ctcv_loop_a {#2{#1}}}% 1.09b removes [0]
+\def\XINT_ctcv_end #1.#2#3#4#5#6{ #6}%
+% \end{macrocode}
+% \subsection{\csh{xintiCstoCv}}
+% \begin{macrocode}
+\def\xintiCstoCv {\romannumeral0\xinticstocv }%
+\def\xinticstocv #1%
+{%
+ \expandafter\XINT_icstcv_prep \romannumeral`&&@#1,!,%
+}%
+\def\XINT_icstcv_prep
+{%
+ \XINT_icstcv_loop_a {}1001%
+}%
+\def\XINT_icstcv_loop_a #1#2#3#4#5#6,%
+{%
+ \xint_gob_til_exclam #6\XINT_icstcv_end!%
+ \expandafter
+ \XINT_icstcv_loop_b \romannumeral`&&@#6.{#2}{#3}{#4}{#5}{#1}%
+}%
+\def\XINT_icstcv_loop_b #1.#2#3#4#5%
+{%
+ \expandafter\XINT_icstcv_loop_c\expandafter
+ {\romannumeral0\xintiiadd {#5}{\XINT_mul_fork #1\xint:#3\xint:}}%
+ {\romannumeral0\xintiiadd {#4}{\XINT_mul_fork #1\xint:#2\xint:}}%
+ {{#2}{#3}}%
+}%
+\def\XINT_icstcv_loop_c #1#2%
+{%
+ \expandafter\XINT_icstcv_loop_d\expandafter {#2}{#1}%
+}%
+\def\XINT_icstcv_loop_d #1#2%
+{%
+ \expandafter\XINT_icstcv_loop_e\expandafter
+ {\romannumeral0\xintrawwithzeros {#1/#2}}{{#1}{#2}}%
+}%
+\def\XINT_icstcv_loop_e #1#2#3#4{\XINT_icstcv_loop_a {#4{#1}}#2#3}%
+\def\XINT_icstcv_end #1.#2#3#4#5#6{ #6}% 1.09b removes [0]
+% \end{macrocode}
+% \subsection{\csh{xintGCtoCv}}
+% \begin{macrocode}
+\def\xintGCtoCv {\romannumeral0\xintgctocv }%
+\def\xintgctocv #1%
+{%
+ \expandafter\XINT_gctcv_prep \romannumeral`&&@#1+!/%
+}%
+\def\XINT_gctcv_prep
+{%
+ \XINT_gctcv_loop_a {}1001%
+}%
+\def\XINT_gctcv_loop_a #1#2#3#4#5#6+%
+{%
+ \expandafter\XINT_gctcv_loop_b
+ \romannumeral0\xintrawwithzeros {#6}.{#2}{#3}{#4}{#5}{#1}%
+}%
+\def\XINT_gctcv_loop_b #1/#2.#3#4#5#6%
+{%
+ \expandafter\XINT_gctcv_loop_c\expandafter
+ {\romannumeral0\XINT_mul_fork #2\xint:#4\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#3\xint:}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#6\xint:}%
+ {\XINT_mul_fork #1\xint:#4\xint:}}%
+ {\romannumeral0\xintiiadd {\XINT_mul_fork #2\xint:#5\xint:}%
+ {\XINT_mul_fork #1\xint:#3\xint:}}%
+}%
+\def\XINT_gctcv_loop_c #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_d\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_gctcv_loop_d #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_e\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_gctcv_loop_e #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_f\expandafter {#2}#1%
+}%
+\def\XINT_gctcv_loop_f #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_g\expandafter
+ {\romannumeral0\xintrawwithzeros {#1/#2}}{{#1}{#2}}%
+}%
+\def\XINT_gctcv_loop_g #1#2#3#4%
+{%
+ \XINT_gctcv_loop_h {#4{#1}}{#2#3}% 1.09b removes [0]
+}%
+\def\XINT_gctcv_loop_h #1#2#3/%
+{%
+ \xint_gob_til_exclam #3\XINT_gctcv_end!%
+ \expandafter\XINT_gctcv_loop_i
+ \romannumeral0\xintrawwithzeros {#3}.#2{#1}%
+}%
+\def\XINT_gctcv_loop_i #1/#2.#3#4#5#6%
+{%
+ \expandafter\XINT_gctcv_loop_j\expandafter
+ {\romannumeral0\XINT_mul_fork #1\xint:#6\xint:}%
+ {\romannumeral0\XINT_mul_fork #1\xint:#5\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#4\xint:}%
+ {\romannumeral0\XINT_mul_fork #2\xint:#3\xint:}%
+}%
+\def\XINT_gctcv_loop_j #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_k\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_gctcv_loop_k #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_l\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_gctcv_loop_l #1#2%
+{%
+ \expandafter\XINT_gctcv_loop_m\expandafter {\expandafter{#2}#1}%
+}%
+\def\XINT_gctcv_loop_m #1#2{\XINT_gctcv_loop_a {#2}#1}%
+\def\XINT_gctcv_end #1.#2#3#4#5#6{ #6}%
+% \end{macrocode}
+% \subsection{\csh{xintiGCtoCv}}
+% \begin{macrocode}
+\def\xintiGCtoCv {\romannumeral0\xintigctocv }%
+\def\xintigctocv #1%
+{%
+ \expandafter\XINT_igctcv_prep \romannumeral`&&@#1+!/%
+}%
+\def\XINT_igctcv_prep
+{%
+ \XINT_igctcv_loop_a {}1001%
+}%
+\def\XINT_igctcv_loop_a #1#2#3#4#5#6+%
+{%
+ \expandafter\XINT_igctcv_loop_b
+ \romannumeral`&&@#6.{#2}{#3}{#4}{#5}{#1}%
+}%
+\def\XINT_igctcv_loop_b #1.#2#3#4#5%
+{%
+ \expandafter\XINT_igctcv_loop_c\expandafter
+ {\romannumeral0\xintiiadd {#5}{\XINT_mul_fork #1\xint:#3\xint:}}%
+ {\romannumeral0\xintiiadd {#4}{\XINT_mul_fork #1\xint:#2\xint:}}%
+ {{#2}{#3}}%
+}%
+\def\XINT_igctcv_loop_c #1#2%
+{%
+ \expandafter\XINT_igctcv_loop_f\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_igctcv_loop_f #1#2#3#4/%
+{%
+ \xint_gob_til_exclam #4\XINT_igctcv_end_a!%
+ \expandafter\XINT_igctcv_loop_g
+ \romannumeral`&&@#4.#1#2{#3}%
+}%
+\def\XINT_igctcv_loop_g #1.#2#3#4#5%
+{%
+ \expandafter\XINT_igctcv_loop_h\expandafter
+ {\romannumeral0\XINT_mul_fork #1\xint:#5\xint:}%
+ {\romannumeral0\XINT_mul_fork #1\xint:#4\xint:}%
+ {{#2}{#3}}%
+}%
+\def\XINT_igctcv_loop_h #1#2%
+{%
+ \expandafter\XINT_igctcv_loop_i\expandafter {\expandafter{#2}{#1}}%
+}%
+\def\XINT_igctcv_loop_i #1#2{\XINT_igctcv_loop_k #2{#2#1}}%
+\def\XINT_igctcv_loop_k #1#2%
+{%
+ \expandafter\XINT_igctcv_loop_l\expandafter
+ {\romannumeral0\xintrawwithzeros {#1/#2}}%
+}%
+\def\XINT_igctcv_loop_l #1#2#3{\XINT_igctcv_loop_a {#3{#1}}#2}%1.09i removes [0]
+\def\XINT_igctcv_end_a #1.#2#3#4#5%
+{%
+ \expandafter\XINT_igctcv_end_b\expandafter
+ {\romannumeral0\xintrawwithzeros {#2/#3}}%
+}%
+\def\XINT_igctcv_end_b #1#2{ #2{#1}}% 1.09b removes [0]
+% \end{macrocode}
+% \subsection{\csh{xintFtoCv}}
+% \lverb|Still uses \xinticstocv \xintFtoCs rather than \xintctocv \xintFtoC.|
+% \begin{macrocode}
+\def\xintFtoCv {\romannumeral0\xintftocv }%
+\def\xintftocv #1%
+{%
+ \xinticstocv {\xintFtoCs {#1}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFtoCCv}}
+% \begin{macrocode}
+\def\xintFtoCCv {\romannumeral0\xintftoccv }%
+\def\xintftoccv #1%
+{%
+ \xintigctocv {\xintFtoCC {#1}}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintCntoF}}
+% \lverb|&
+% Modified in 1.06 to give the N first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.|
+% \begin{macrocode}
+\def\xintCntoF {\romannumeral0\xintcntof }%
+\def\xintcntof #1%
+{%
+ \expandafter\XINT_cntf\expandafter {\the\numexpr #1}%
+}%
+\def\XINT_cntf #1#2%
+{%
+ \ifnum #1>\xint_c_
+ \xint_afterfi {\expandafter\XINT_cntf_loop\expandafter
+ {\the\numexpr #1-1\expandafter}\expandafter
+ {\romannumeral`&&@#2{#1}}{#2}}%
+ \else
+ \xint_afterfi
+ {\ifnum #1=\xint_c_
+ \xint_afterfi {\expandafter\space \romannumeral`&&@#2{0}}%
+ \else \xint_afterfi { }% 1.09m now returns nothing.
+ \fi}%
+ \fi
+}%
+\def\XINT_cntf_loop #1#2#3%
+{%
+ \ifnum #1>\xint_c_ \else \XINT_cntf_exit \fi
+ \expandafter\XINT_cntf_loop\expandafter
+ {\the\numexpr #1-1\expandafter }\expandafter
+ {\romannumeral0\xintadd {\xintDiv {1[0]}{#2}}{#3{#1}}}%
+ {#3}%
+}%
+\def\XINT_cntf_exit \fi
+ \expandafter\XINT_cntf_loop\expandafter
+ #1\expandafter #2#3%
+{%
+ \fi\xint_gobble_ii #2%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintGCntoF}}
+% \lverb|Modified in 1.06 to give the N argument first to a \numexpr rather
+% than expanding twice. I just use \the\numexpr and maintain the previous code
+% after that.|
+% \begin{macrocode}
+\def\xintGCntoF {\romannumeral0\xintgcntof }%
+\def\xintgcntof #1%
+{%
+ \expandafter\XINT_gcntf\expandafter {\the\numexpr #1}%
+}%
+\def\XINT_gcntf #1#2#3%
+{%
+ \ifnum #1>\xint_c_
+ \xint_afterfi {\expandafter\XINT_gcntf_loop\expandafter
+ {\the\numexpr #1-1\expandafter}\expandafter
+ {\romannumeral`&&@#2{#1}}{#2}{#3}}%
+ \else
+ \xint_afterfi
+ {\ifnum #1=\xint_c_
+ \xint_afterfi {\expandafter\space\romannumeral`&&@#2{0}}%
+ \else \xint_afterfi { }% 1.09m now returns nothing rather than 0/1[0]
+ \fi}%
+ \fi
+}%
+\def\XINT_gcntf_loop #1#2#3#4%
+{%
+ \ifnum #1>\xint_c_ \else \XINT_gcntf_exit \fi
+ \expandafter\XINT_gcntf_loop\expandafter
+ {\the\numexpr #1-1\expandafter }\expandafter
+ {\romannumeral0\xintadd {\xintDiv {#4{#1}}{#2}}{#3{#1}}}%
+ {#3}{#4}%
+}%
+\def\XINT_gcntf_exit \fi
+ \expandafter\XINT_gcntf_loop\expandafter
+ #1\expandafter #2#3#4%
+{%
+ \fi\xint_gobble_ii #2%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintCntoCs}}
+% \lverb|Modified in 1.09m: added spaces after the commas in the produced list.
+% Moreover the coefficients are not braced anymore. A slight induced limitation
+% is that the macro argument should not contain some explicit comma (cf.
+% \XINT_cntcs_exit_b), hence \xintCntoCs {\macro,} with \def\macro,#1{<stuff>}
+% would crash. Not a very serious limitation, I believe. |
+% \begin{macrocode}
+\def\xintCntoCs {\romannumeral0\xintcntocs }%
+\def\xintcntocs #1%
+{%
+ \expandafter\XINT_cntcs\expandafter {\the\numexpr #1}%
+}%
+\def\XINT_cntcs #1#2%
+{%
+ \ifnum #1<0
+ \xint_afterfi { }% 1.09i: a 0/1[0] was here, now the macro returns nothing
+ \else
+ \xint_afterfi {\expandafter\XINT_cntcs_loop\expandafter
+ {\the\numexpr #1-\xint_c_i\expandafter}\expandafter
+ {\romannumeral`&&@#2{#1}}{#2}}% produced coeff not braced
+ \fi
+}%
+\def\XINT_cntcs_loop #1#2#3%
+{%
+ \ifnum #1>-\xint_c_i \else \XINT_cntcs_exit \fi
+ \expandafter\XINT_cntcs_loop\expandafter
+ {\the\numexpr #1-\xint_c_i\expandafter}\expandafter
+ {\romannumeral`&&@#3{#1}, #2}{#3}% space added, 1.09m
+}%
+\def\XINT_cntcs_exit \fi
+ \expandafter\XINT_cntcs_loop\expandafter
+ #1\expandafter #2#3%
+{%
+ \fi\XINT_cntcs_exit_b #2%
+}%
+\def\XINT_cntcs_exit_b #1,{}% romannumeral stopping space already there
+% \end{macrocode}
+% \subsection{\csh{xintCntoGC}}
+% \lverb|&
+% Modified in 1.06 to give the N first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.
+%
+% 1.09m maintains the braces, as the coeff are allowed to be fraction and the
+% slash can not be naked in the GC format, contrarily to what happens in
+% \xintCntoCs. Also the separators given to \xintGCtoGCx may then fetch the
+% coefficients as argument, as they are braced.|
+% \begin{macrocode}
+\def\xintCntoGC {\romannumeral0\xintcntogc }%
+\def\xintcntogc #1%
+{%
+ \expandafter\XINT_cntgc\expandafter {\the\numexpr #1}%
+}%
+\def\XINT_cntgc #1#2%
+{%
+ \ifnum #1<0
+ \xint_afterfi { }% 1.09i there was as strange 0/1[0] here, removed
+ \else
+ \xint_afterfi {\expandafter\XINT_cntgc_loop\expandafter
+ {\the\numexpr #1-\xint_c_i\expandafter}\expandafter
+ {\expandafter{\romannumeral`&&@#2{#1}}}{#2}}%
+ \fi
+}%
+\def\XINT_cntgc_loop #1#2#3%
+{%
+ \ifnum #1>-\xint_c_i \else \XINT_cntgc_exit \fi
+ \expandafter\XINT_cntgc_loop\expandafter
+ {\the\numexpr #1-\xint_c_i\expandafter }\expandafter
+ {\expandafter{\romannumeral`&&@#3{#1}}+1/#2}{#3}%
+}%
+\def\XINT_cntgc_exit \fi
+ \expandafter\XINT_cntgc_loop\expandafter
+ #1\expandafter #2#3%
+{%
+ \fi\XINT_cntgc_exit_b #2%
+}%
+\def\XINT_cntgc_exit_b #1+1/{ }%
+% \end{macrocode}
+% \subsection{\csh{xintGCntoGC}}
+% \lverb|&
+% Modified in 1.06 to give the N first to a \numexpr rather than expanding
+% twice. I just use \the\numexpr and maintain the previous code after that.|
+% \begin{macrocode}
+\def\xintGCntoGC {\romannumeral0\xintgcntogc }%
+\def\xintgcntogc #1%
+{%
+ \expandafter\XINT_gcntgc\expandafter {\the\numexpr #1}%
+}%
+\def\XINT_gcntgc #1#2#3%
+{%
+ \ifnum #1<0
+ \xint_afterfi { }% 1.09i now returns nothing
+ \else
+ \xint_afterfi {\expandafter\XINT_gcntgc_loop\expandafter
+ {\the\numexpr #1-\xint_c_i\expandafter}\expandafter
+ {\expandafter{\romannumeral`&&@#2{#1}}}{#2}{#3}}%
+ \fi
+}%
+\def\XINT_gcntgc_loop #1#2#3#4%
+{%
+ \ifnum #1>-\xint_c_i \else \XINT_gcntgc_exit \fi
+ \expandafter\XINT_gcntgc_loop_b\expandafter
+ {\expandafter{\romannumeral`&&@#4{#1}}/#2}{#3{#1}}{#1}{#3}{#4}%
+}%
+\def\XINT_gcntgc_loop_b #1#2#3%
+{%
+ \expandafter\XINT_gcntgc_loop\expandafter
+ {\the\numexpr #3-\xint_c_i \expandafter}\expandafter
+ {\expandafter{\romannumeral`&&@#2}+#1}%
+}%
+\def\XINT_gcntgc_exit \fi
+ \expandafter\XINT_gcntgc_loop_b\expandafter #1#2#3#4#5%
+{%
+ \fi\XINT_gcntgc_exit_b #1%
+}%
+\def\XINT_gcntgc_exit_b #1/{ }%
+% \end{macrocode}
+% \subsection{\csh{xintCstoGC}}
+% \begin{macrocode}
+\def\xintCstoGC {\romannumeral0\xintcstogc }%
+\def\xintcstogc #1%
+{%
+ \expandafter\XINT_cstc_prep \romannumeral`&&@#1,!,%
+}%
+\def\XINT_cstc_prep #1,{\XINT_cstc_loop_a {{#1}}}%
+\def\XINT_cstc_loop_a #1#2,%
+{%
+ \xint_gob_til_exclam #2\XINT_cstc_end!%
+ \XINT_cstc_loop_b {#1}{#2}%
+}%
+\def\XINT_cstc_loop_b #1#2{\XINT_cstc_loop_a {#1+1/{#2}}}%
+\def\XINT_cstc_end!\XINT_cstc_loop_b #1#2{ #1}%
+% \end{macrocode}
+% \subsection{\csh{xintGCtoGC}}
+% \begin{macrocode}
+\def\xintGCtoGC {\romannumeral0\xintgctogc }%
+\def\xintgctogc #1%
+{%
+ \expandafter\XINT_gctgc_start \romannumeral`&&@#1+!/%
+}%
+\def\XINT_gctgc_start {\XINT_gctgc_loop_a {}}%
+\def\XINT_gctgc_loop_a #1#2+#3/%
+{%
+ \xint_gob_til_exclam #3\XINT_gctgc_end!%
+ \expandafter\XINT_gctgc_loop_b\expandafter
+ {\romannumeral`&&@#2}{#3}{#1}%
+}%
+\def\XINT_gctgc_loop_b #1#2%
+{%
+ \expandafter\XINT_gctgc_loop_c\expandafter
+ {\romannumeral`&&@#2}{#1}%
+}%
+\def\XINT_gctgc_loop_c #1#2#3%
+{%
+ \XINT_gctgc_loop_a {#3{#2}+{#1}/}%
+}%
+\def\XINT_gctgc_end!\expandafter\XINT_gctgc_loop_b
+{%
+ \expandafter\XINT_gctgc_end_b
+}%
+\def\XINT_gctgc_end_b #1#2#3{ #3{#1}}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintcfrac}
+% \cleardoublepage\let\xintcfracnameUp\undefined
+%\gardesactifs
+%\let</xintcfrac>\relax
+%\let<*xintexpr>\gardesinactifs
+%</xintcfrac>^^A--------------------------------------------------
+%<*xintexpr>^^A---------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; fill-column: 78; -*-
+% \clearpage\csname xintexprnameUp\endcsname
+% \section{Package \xintexprnameimp implementation}
+% \RaisedLabel{sec:exprimp}
+% \etocarticlestylenomarks
+% \etocstandardlines
+% \etocsetnexttocdepth {subsection}
+%
+% \localtableofcontents
+%
+% \etocsettocstyle{}{}
+%
+% This is release \expandafter|\xintbndlversion| of
+% \expandafter|\expandafter[\xintbndldate]|.
+%
+% \subsection{Old comments}
+%
+% These general comments were last updated at the end of the |1.09x| series in
+% 2014. The principles remain in place to this day but refer to
+% \href{http://www.ctan.org/pkg/xint/CHANGES.html}{CHANGES.html} for some
+% significant evolutions since.
+%
+% The first version was released in June 2013. I was greatly helped in this task
+% of writing an expandable parser of infix operations by the comments provided
+% in |l3fp-parse.dtx| (in its version as available in April-May 2013). One will
+% recognize in particular the idea of the `until' macros; I have not looked into
+% the actual |l3fp| code beyond the very useful comments provided in its
+% documentation.
+%
+% A main worry was that my data has no a priori bound on its size; to keep the
+% code reasonably efficient, I experimented with a technique of storing and
+% retrieving data expandably as \emph{names} of control sequences. Intermediate
+% computation results are stored as control sequences |\.=a/b[n]|.
+%
+%
+% Roughly speaking, the parser mechanism is as follows: at any given time the
+% last found ``operator'' has its associated |until| macro awaiting some news
+% from the token flow; first |getnext| expands forward in the hope to construct
+% some number, which may come from a parenthesized sub-expression, from some
+% braced material, or from a digit by digit scan. After this number has been
+% formed the next operator is looked for by the |getop| macro. Once |getop| has
+% finished its job, |until| is presented with three tokens: the first one is the
+% precedence level of the new found operator (which may be an end of expression
+% marker), the second is the operator character token (earlier versions had here
+% already some macro name, but in order to keep as much common code to expr and
+% floatexpr common as possible, this was modified) of the new found operator, and
+% the third one is the newly found number (which was encountered just before the
+% new operator).
+%
+% The |until| macro of the earlier operator examines the precedence level of the
+% new found one, and either executes the earlier operator (in the case of a
+% binary operation, with the found number and a previously stored one) or it
+% delays execution, giving the hand to the |until| macro of the operator having
+% been found of higher precedence.
+%
+% A minus sign acting as prefix gets converted into a (unary) operator
+% inheriting the precedence level of the previous operator.
+%
+% Once the end of the expression is found (it has to be marked by a |\relax|)
+% the final result is output as four tokens (five tokens since |1.09j|) the
+% first one a catcode 11 exclamation mark, the second one an error generating
+% macro, the third one is a protection mechanism, the fourth one a printing
+% macro and the fifth is |\.=a/b[n]|. The prefix |\xintthe| makes the output
+% printable by killing the first three tokens.
+%
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+%
+% The code for reload detection was initially copied from \textsc{Heiko
+% Oberdiek}'s packages, then modified.
+%
+% The method for catcodes was also initially directly inspired by these
+% packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \def\z {\endgroup}%
+ \expandafter\let\expandafter\x\csname ver@xintexpr.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xintfrac.sty\endcsname
+ \expandafter\let\expandafter\t\csname ver@xinttools.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintexpr}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintexpr.sty
+ \ifx\w\relax % but xintfrac.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter
+ {\z\input xintfrac.sty\relax}%
+ \fi
+ \ifx\t\relax % but xinttools.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter
+ {\z\input xinttools.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xintfrac.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter
+ {\z\RequirePackage{xintfrac}}%
+ \fi
+ \ifx\t\relax % xinttools.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter
+ {\z\RequirePackage{xinttools}}%
+ \fi
+ \else
+ \aftergroup\endinput % xintexpr already loaded.
+ \fi
+ \fi
+ \fi
+\z%
+\XINTsetupcatcodes%
+% \end{macrocode}
+% \subsection{Package identification}
+% \lverb|&
+% |
+% \begin{macrocode}
+\XINT_providespackage
+\ProvidesPackage{xintexpr}%
+ [2019/04/05 1.3e Expandable expression parser (JFB)]%
+\catcode`! 11
+\let\XINT_Cmp \xintiiCmp
+% \end{macrocode}
+% \subsection{\csh{xintexpr}, \csh{xintiexpr}, \csh{xintfloatexpr},
+% \csh{xintiiexpr}}
+% \lverb|ATTENTION! 1.3d renamed \xinteval to \xintexpro etc...|
+% \begin{macrocode}
+\def\xintexpr {\romannumeral0\xintexpro }%
+\def\xintiexpr {\romannumeral0\xintiexpro }%
+\def\xintfloatexpr {\romannumeral0\xintfloatexpro }%
+\def\xintiiexpr {\romannumeral0\xintiiexpro }%
+% \end{macrocode}
+% \subsection{\csh{xintexpro}, \csh{xintiiexpro}}
+% \lverb|ATTENTION! 1.3d renamed \xinteval to \xintexpro etc...|
+% \begin{macrocode}
+\def\xintexpro {\expandafter\XINT_expr_wrap\romannumeral0\xintbareeval }%
+\def\xintiiexpro {\expandafter\XINT_iiexpr_wrap\romannumeral0\xintbareiieval }%
+% \end{macrocode}
+% \subsection{\csh{xintiexpro}, \csh{xintfloatexpro}}
+% \lverb|Optional argument since 1.1.
+%
+% ATTENTION! 1.3d renamed \xinteval to \xintexpro etc...
+%
+% Some renaming of macros at 1.3e here.|
+% \begin{macrocode}
+\def\xintiexpro #1%
+{%
+ \ifx [#1\expandafter\XINT_iexpr_withopt\else\expandafter\XINT_iexpr_noopt
+ \fi #1%
+}%
+\def\XINT_iexpr_noopt
+{%
+ \expandafter\XINT_iexpr_preprint\expandafter 0%
+ \romannumeral0\xintbareeval
+}%
+\def\XINT_iexpr_withopt [#1]%
+{%
+ \expandafter\XINT_iexpr_preprint\expandafter
+ {\the\numexpr \xint_zapspaces #1 \xint_gobble_i\expandafter}%
+ \romannumeral0\xintbareeval
+}%
+\def\XINT_iexpr_preprint #1#2%
+{%
+ \expandafter\XINT_expr_wrap
+ \csname .=\xintRound::csv {#1}{\XINT_expr_unlock #2}\endcsname
+}%
+\def\xintfloatexpro #1%
+{%
+ \ifx [#1\expandafter\XINT_flexpr_withopt\else\expandafter\XINT_flexpr_noopt
+ \fi #1%
+}%
+\def\XINT_flexpr_noopt
+{%
+ \expandafter\XINT_flexpr_preprint\expandafter\xinttheDigits
+ \romannumeral0\xintbarefloateval
+}%
+\def\XINT_flexpr_withopt [#1]%
+{%
+ \expandafter\XINT_flexpr_preprint\expandafter
+ {\the\numexpr\xint_zapspaces #1 \xint_gobble_i\expandafter}%
+ \romannumeral0\xintbarefloateval
+}%
+\def\XINT_flexpr_preprint #1#2%
+{%
+ \expandafter\XINT_flexpr_wrap
+ \csname .;#1.=\XINTinFloat::csv {#1}{\XINT_expr_unlock #2}\endcsname
+}%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_wrap}, \csh{XINT_iiexpr_wrap}, \csh{XINT_flexpr_wrap}}
+% \lverb|1.3e removes some leading space tokens which served nothing. There is
+% no \XINT_iexpr_wrap, because \XINT_expr_wrap is used directly.|
+% \begin{macrocode}
+\def\XINT_expr_wrap {!\XINT_expr_usethe\XINT_protectii\XINT_expr_print}%
+\def\XINT_iiexpr_wrap {!\XINT_expr_usethe\XINT_protectii\XINT_iiexpr_print}%
+\def\XINT_flexpr_wrap {!\XINT_expr_usethe\XINT_protectii\XINT_flexpr_print}%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_usethe}, \csh{XINT_protectii}}
+% \begin{macrocode}
+\def\XINT_protectii #1{\noexpand\XINT_protectii\noexpand #1\noexpand }%
+\protected\def\XINT_expr_usethe\XINT_protectii {\xintError:missing_xintthe!}%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_print}, \csh{XINT_iiexpr_print}, \csh{XINT_flexpr_print}}
+% \begin{macrocode}
+\def\XINT_expr_print #1{\xintSPRaw::csv {\XINT_expr_unlock #1}}%
+\def\XINT_iiexpr_print #1{\xintCSV::csv {\XINT_expr_unlock #1}}%
+\def\XINT_flexpr_print #1%
+{%
+ \expandafter\xintPFloat::csv
+ \romannumeral`&&@\expandafter\XINT_expr_unlock_sp\string #1!%
+}%
+\def\XINT_expr_unlock_sp #1.;#2.=#3!{{#2}{#3}}%
+% \end{macrocode}
+% \subsection{\csh{xinttheexpr}, \csh{xinttheiexpr}, \csh{xintthefloatexpr},
+% \csh{xinttheiiexpr}}
+% \lverb|The reason why \xinttheiexpr et \xintthefloatexpr are handled
+% differently is that they admit an optional argument which acts via a custom
+% «printing» stage.|
+% \begin{macrocode}
+\def\xinttheexpr
+ {\romannumeral`&&@\expandafter\XINT_expr_print\romannumeral0\xintbareeval}%
+\def\xinttheiexpr
+ {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintiexpr}%
+\def\xintthefloatexpr
+ {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintfloatexpr}%
+\def\xinttheiiexpr
+ {\romannumeral`&&@\expandafter\XINT_iiexpr_print\romannumeral0\xintbareiieval}%
+% \end{macrocode}
+% \subsection{\csh{thexintexpr}, \csh{thexintiexpr}, \csh{thexintfloatexpr},
+% \csh{thexintiiexpr}}
+% \lverb|New with 1.2h. I have been for the last three years very strict
+% regarding macros with \xint or \XINT, but well.|
+% \begin{macrocode}
+\let\thexintexpr \xinttheexpr
+\let\thexintiexpr \xinttheiexpr
+\let\thexintfloatexpr\xintthefloatexpr
+\let\thexintiiexpr \xinttheiiexpr
+% \end{macrocode}
+% \subsection{\csh{xinteval}, \csh{xintieval}, \csh{xintfloateval},
+% \csh{xintiieval}}
+% \begin{macrocode}
+\def\xinteval #1%
+ {\romannumeral`&&@\expandafter\XINT_expr_print\romannumeral0\xintbareeval#1\relax}%
+\def\xintieval #1%
+ {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintiexpr#1\relax}%
+\def\xintfloateval #1%
+ {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintfloatexpr#1\relax}%
+\def\xintiieval #1%
+ {\romannumeral`&&@\expandafter\XINT_iiexpr_print\romannumeral0\xintbareiieval#1\relax}%
+% \end{macrocode}
+% \subsection{\csh{xintthe}}
+% \begin{macrocode}
+\def\xintthe #1{\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@#1}%
+% \end{macrocode}
+% \subsection{\csh{xintbareeval}, \csh{xintbarefloateval}, \csh{xintbareiieval}}
+% \begin{macrocode}
+\def\xintbareeval
+ {\expandafter\XINT_expr_until_end_a\romannumeral`&&@\XINT_expr_getnext }%
+\def\xintbarefloateval
+ {\expandafter\XINT_flexpr_until_end_a\romannumeral`&&@\XINT_expr_getnext }%
+\def\xintbareiieval
+ {\expandafter\XINT_iiexpr_until_end_a\romannumeral`&&@\XINT_expr_getnext }%
+% \end{macrocode}
+% \subsection{\csh{xintthebareeval}, \csh{xintthebarefloateval}, \csh{xintthebareiieval}}
+% \begin{macrocode}
+\def\xintthebareeval {\expandafter\XINT_expr_unlock\romannumeral0\xintbareeval}%
+\def\xintthebarefloateval {\expandafter\XINT_expr_unlock\romannumeral0\xintbarefloateval}%
+\def\xintthebareiieval {\expandafter\XINT_expr_unlock\romannumeral0\xintbareiieval}%
+% \end{macrocode}
+% \subsection{\csh{xintboolexpr}, \csh{XINT_boolexpr_print}, \csh{xinttheboolexpr},
+% \csh{thexintboolexpr}}
+% \lverb|ATTENTION! 1.3d renamed \xinteval to \xintexpro etc...|
+% \begin{macrocode}
+\def\xintboolexpr
+{%
+ \romannumeral0\expandafter\expandafter\expandafter
+ \XINT_boolexpr_done\expandafter\xint_gobble_iv\romannumeral0\xintexpro
+}%
+\def\XINT_boolexpr_done {!\XINT_expr_usethe\XINT_protectii\XINT_boolexpr_print}%
+\def\XINT_boolexpr_print #1{\xintIsTrue::csv {\XINT_expr_unlock #1}}%
+\def\xinttheboolexpr
+{%
+ \romannumeral`&&@\expandafter\expandafter\expandafter
+ \XINT_boolexpr_print\expandafter\xint_gobble_iv\romannumeral0\xintexpro
+}%
+\let\thexintboolexpr\xinttheboolexpr
+% \end{macrocode}
+% \subsection{\csh{xintifboolexpr}, \csh{xintifboolfloatexpr}, \csh{xintifbooliiexpr}}
+% \lverb|Do not work with comma separated expressions.|
+% \begin{macrocode}
+\def\xintifboolexpr #1{\romannumeral0\xintiiifnotzero {\xinttheexpr #1\relax}}%
+\def\xintifboolfloatexpr #1{\romannumeral0\xintiiifnotzero {\xintthefloatexpr #1\relax}}%
+\def\xintifbooliiexpr #1{\romannumeral0\xintiiifnotzero {\xinttheiiexpr #1\relax}}%
+% \end{macrocode}
+% \subsection{\csh{xintifsgnexpr}, \csh{xintifsgnfloatexpr}, \csh{xintifsgniiexpr}}
+% \changed{1.3d}{}
+% \lverb|Do not work with comma separated expressions.|
+% \begin{macrocode}
+\def\xintifsgnexpr #1{\romannumeral0\xintiiifsgn {\xinttheexpr #1\relax}}%
+\def\xintifsgnfloatexpr #1{\romannumeral0\xintiiifsgn {\xintthefloatexpr #1\relax}}%
+\def\xintifsgniiexpr #1{\romannumeral0\xintiiifsgn {\xinttheiiexpr #1\relax}}%
+% \end{macrocode}
+% \subsection{\csh{xintthecoords}}
+% \lverb|1.1 Wraps up an even number of comma separated items into pairs of
+% TikZ coordinates; for use in the following way:
+%
+% coordinates {\xintthecoords\xintfloatexpr ... \relax}
+%
+% The crazyness with the \csname and unlock is due to TikZ somewhat STRANGE
+% control of the TOTAL number of expansions which should not exceed the very low
+% value of 100 !! As we implemented \XINT_thecoords_b in an "inline" style for
+% efficiency, we need to hide its expansions.
+%
+% Not to be used as \xintthecoords\xintthefloatexpr, only as
+% \xintthecoords\xintfloatexpr (or \xintiexpr etc...). Perhaps \xintthecoords
+% could make an extra check, but one should not accustom users to too loose
+% requirements!|
+% \begin{macrocode}
+\def\xintthecoords #1{\romannumeral`&&@\expandafter\expandafter\expandafter
+ \XINT_thecoords_a
+ \expandafter\xint_gobble_iii\romannumeral0#1}%
+\def\XINT_thecoords_a #1#2% #1=print macro, indispensible for scientific notation
+ {\expandafter\XINT_expr_unlock\csname.=\expandafter\XINT_thecoords_b
+ \romannumeral`&&@#1#2,!,!,^\endcsname }%
+\def\XINT_thecoords_b #1#2,#3#4,%
+ {\xint_gob_til_! #3\XINT_thecoords_c ! (#1#2, #3#4)\XINT_thecoords_b }%
+\def\XINT_thecoords_c #1^{}%
+% \end{macrocode}
+% \subsection{Locking and unlocking}
+% \lverb|Some renaming and modifications here with release 1.2 to switch from
+% using chains of \romannumeral-`0 in order to gather numbers, possibly
+% hexadecimals, to using a \csname governed expansion. In this way no more
+% limit at 5000 digits, and besides this is a logical move because the
+% \xintexpr parser is already based on \csname...\endcsname storage of numbers
+% as one token.
+%
+% The limitation at 5000 digits didn't worry me too much because it was not
+% very realistic to launch computations with thousands of digits... such
+% computations are still slow with 1.2 but less so now. Chains or
+% \romannumeral are still used for the gathering of function names and other
+% stuff which I have half-forgotten because the parser does many things.
+%
+% In the earlier versions we used the lockscan macro after a chain of
+% \romannumeral-`0 had ended gathering digits; this uses has been replaced by
+% direct processing inside a \csname...\endcsname and the macro is kept only
+% for matters of dummy variables.
+%
+% Currently, the parsing of hexadecimal numbers needs two nested
+% \csname...\endcsname, first to gather the letters (possibly with a hexadecimal
+% fractional part), and in a second stage to apply \xintHexToDec to do the
+% actual conversion. This should be faster than updating on the fly the number
+% (which would be hard for the fraction part...).|
+% \begin{macrocode}
+\def\xint_gob_til_! #1!{}% ! with catcode 11
+\def\XINT_expr_lockscan#1{% not used for decimal numbers in xintexpr 1.2
+\def\XINT_expr_lockscan##1!{\expandafter#1\csname .=##1\endcsname}%
+}\XINT_expr_lockscan{ }%
+\def\XINT_expr_lockit#1{%
+\def\XINT_expr_lockit##1{\expandafter#1\csname .=##1\endcsname}%
+}\XINT_expr_lockit{ }%
+\def\XINT_expr_unlock_hex_in #1% expanded inside \csname..\endcsname
+ {\expandafter\XINT_expr_inhex\romannumeral`&&@\XINT_expr_unlock#1;}%
+\def\XINT_expr_inhex #1.#2#3;% expanded inside \csname..\endcsname
+{%
+ \if#2>%
+ \xintHexToDec{#1}%
+ \else
+ \xintiiMul{\xintiiPow{625}{\xintLength{#3}}}{\xintHexToDec{#1#3}}%
+ [\the\numexpr-4*\xintLength{#3}]%
+ \fi
+}%
+\def\XINT_expr_unlock {\expandafter\XINT_expr_unlock_a\string }%
+\def\XINT_expr_unlock_a #1.={}%
+\def\XINT_expr_unexpectedtoken {\xintError:ignored }%
+\let\XINT_expr_done\space
+% \end{macrocode}
+% \subsection{Hooks for the functioning of \cshnolabel{xintNewExpr} and
+% \cshnolabel{xintdeffunc}}
+% \lverb|This is new with 1.3. See \XINT_expr_redefinemacros.|
+% \begin{macrocode}
+\let\XINT:NEhook:one\empty
+\let\XINT:NEhook:two\empty
+\let\XINT:NEhook:csv\empty
+\def\XINT:NEhook:twosp #1,#2,!#3{#3{#1}{#2}}%
+% \end{macrocode}
+% \subsection{Macros handling csv lists on output (for \cshnolabel{XINT_expr_print} et
+% al. routines)}
+% \localtableofcontents
+% \lverb|Changed completely for 1.1, which adds the optional arguments to
+% \xintiexpr and \xintfloatexpr.|
+% \subsubsection{\csh{XINT_::_end}}
+% \lverb|Le mécanisme est le suivant, #2 est dans des accolades et commence par
+% ,<sp>. Donc le gobble se débarrasse du, et le <sp> après brace stripping
+% arrête un \romannumeral0 ou \romannumeral-`0|
+% \begin{macrocode}
+\def\XINT_::_end #1,#2{\xint_gobble_i #2}%
+% \end{macrocode}
+% \subsubsection{\csh{xintCSV::csv}}
+% \begin{macrocode}
+\def\xintCSV::csv #1{\expandafter\XINT_csv::_a\romannumeral`&&@#1,^,}%
+\def\XINT_csv::_a {\XINT_csv::_b {}}%
+\def\XINT_csv::_b #1#2,{\expandafter\XINT_csv::_c \romannumeral`&&@#2,{#1}}%
+\def\XINT_csv::_c #1{\if ^#1\expandafter\XINT_::_end\fi\XINT_csv::_d #1}%
+\def\XINT_csv::_d #1,#2{\XINT_csv::_b {#2, #1}}% possibly, item #1 is empty.
+% \end{macrocode}
+% \subsubsection{\csh{xintSPRaw}, \csh{xintSPRaw::csv}}
+% \begin{macrocode}
+\def\xintSPRaw {\romannumeral0\xintspraw }%
+\def\xintspraw #1{\expandafter\XINT_spraw\romannumeral`&&@#1[\W]}%
+\def\XINT_spraw #1[#2#3]{\xint_gob_til_W #2\XINT_spraw_a\W\XINT_spraw_p #1[#2#3]}%
+\def\XINT_spraw_a\W\XINT_spraw_p #1[\W]{ #1}%
+\def\XINT_spraw_p #1[\W]{\xintpraw {#1}}%
+\def\xintSPRaw::csv #1{\romannumeral0\expandafter\XINT_spraw::_a\romannumeral`&&@#1,^,}%
+\def\XINT_spraw::_a {\XINT_spraw::_b {}}%
+\def\XINT_spraw::_b #1#2,{\expandafter\XINT_spraw::_c \romannumeral`&&@#2,{#1}}%
+\def\XINT_spraw::_c #1{\if ,#1\xint_dothis\XINT_spraw::_e\fi
+ \if ^#1\xint_dothis\XINT_::_end\fi
+ \xint_orthat\XINT_spraw::_d #1}%
+\def\XINT_spraw::_d #1,{\expandafter\XINT_spraw::_e\romannumeral0\XINT_spraw #1[\W],}%
+\def\XINT_spraw::_e #1,#2{\XINT_spraw::_b {#2, #1}}%
+% \end{macrocode}
+% \subsubsection{\csh{xintIsTrue::csv}}
+% \begin{macrocode}
+\def\xintIsTrue::csv #1{\romannumeral0\expandafter\XINT_istrue::_a\romannumeral`&&@#1,^,}%
+\def\XINT_istrue::_a {\XINT_istrue::_b {}}%
+\def\XINT_istrue::_b #1#2,{\expandafter\XINT_istrue::_c \romannumeral`&&@#2,{#1}}%
+\def\XINT_istrue::_c #1{\if ,#1\xint_dothis\XINT_istrue::_e\fi
+ \if ^#1\xint_dothis\XINT_::_end\fi
+ \xint_orthat\XINT_istrue::_d #1}%
+\def\XINT_istrue::_d #1,{\expandafter\XINT_istrue::_e\romannumeral0\xintisnotzero {#1},}%
+\def\XINT_istrue::_e #1,#2{\XINT_istrue::_b {#2, #1}}%
+% \end{macrocode}
+% \subsubsection{\csh{xintRound::csv}}
+% \lverb|
+% 1.3e Emploi d'un point comme délimiteur. Dans le futur donner une signification
+% à un #1 négatif dans \XINT_round::_a ?
+% |
+% \begin{macrocode}
+\def\XINT_:::_end #1,#2#3{\xint_gobble_i #3}%
+\def\xintRound::csv #1#2{\romannumeral0\expandafter\XINT_round::_a
+ \the\numexpr#1\expandafter.\romannumeral`&&@#2,^,}%
+\def\XINT_round::_a #1.{\XINT_round::_b #1.{}}%
+\def\XINT_round::_b #1.#2#3,{\expandafter\XINT_round::_c \romannumeral`&&@#3,{#1}{#2}}%
+\def\XINT_round::_c #1{\if ,#1\xint_dothis\XINT_round::_e\fi
+ \if ^#1\xint_dothis\XINT_:::_end\fi
+ \xint_orthat\XINT_round::_d #1}%
+\def\XINT_round::_d #1,#2{%
+ \expandafter\XINT_round::_e\romannumeral0\ifnum#2>\xint_c_
+ \expandafter\xintround\else\expandafter\xintiround\fi {#2}{#1},{#2}}%
+\def\XINT_round::_e #1,#2#3{\XINT_round::_b #2.{#3, #1}}%
+% \end{macrocode}
+% \subsubsection{\csh{XINTinFloat::csv}}
+% \lverb|&
+% 1.3e adds support for a negative specifier (\XINT_infloat::_a inserted, by
+% luck formerly it started straight with \XINT_infloat::_b ...).
+%
+% |
+% \begin{macrocode}
+\def\XINTinFloat::csv #1#2{\romannumeral0\expandafter\XINT_infloat::_a
+ \the\numexpr #1\expandafter.\romannumeral`&&@#2,^,}%
+\def\XINT_infloat::_a #1#2.%
+ {\expandafter\XINT_infloat::_b\the\numexpr\if#1-\XINTdigits\fi#1#2.{}}%
+\def\XINT_infloat::_b #1.#2#3,{\XINT_infloat::_c #3,{#1}{#2}}%
+\def\XINT_infloat::_c #1{\if ,#1\xint_dothis\XINT_infloat::_e\fi
+ \if ^#1\xint_dothis\XINT_:::_end\fi
+ \xint_orthat\XINT_infloat::_d #1}%
+\def\XINT_infloat::_d #1,#2%
+ {\expandafter\XINT_infloat::_e\romannumeral0\XINTinfloat [#2]{#1},{#2}}%
+\def\XINT_infloat::_e #1,#2#3{\XINT_infloat::_b #2.{#3, #1}}%
+% \end{macrocode}
+% \subsubsection{\csh{xintPFloat::csv}}
+% \lverb|&
+% Also extended at 1.3e to handle negative optional specifier for digits
+% precision. This macro formats output.
+%
+% |
+% \begin{macrocode}
+\def\xintPFloat::csv #1#2{\romannumeral0\expandafter\XINT_pfloat::_a
+ \the\numexpr #1\expandafter.\romannumeral`&&@#2,^,}%
+\def\XINT_pfloat::_a #1#2.%
+ {\expandafter\XINT_pfloat::_b\the\numexpr\if#1-\XINTdigits\fi#1#2.{}}%
+\def\XINT_pfloat::_b #1.#2#3,{\expandafter\XINT_pfloat::_c \romannumeral`&&@#3,{#1}{#2}}%
+\def\XINT_pfloat::_c #1{\if ,#1\xint_dothis\XINT_pfloat::_e\fi
+ \if ^#1\xint_dothis\XINT_:::_end\fi
+ \xint_orthat\XINT_pfloat::_d #1}%
+\def\XINT_pfloat::_d #1,#2%
+ {\expandafter\XINT_pfloat::_e\romannumeral0\XINT_pfloat_opt [\xint:#2]{#1},{#2}}%
+\def\XINT_pfloat::_e #1,#2#3{\XINT_pfloat::_b #2.{#3, #1}}%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_getnext}: fetching some number then an operator}
+% \lverb|Big change in 1.1, no attempt to detect braced stuff anymore as the
+% [N] notation is implemented otherwise. Now, braces should not be used at
+% all; one level removed, then \romannumeral-`0 expansion.|
+% \begin{macrocode}
+\def\XINT_expr_getnext #1%
+{%
+ \expandafter\XINT_expr_getnext_a\romannumeral`&&@#1%
+}%
+\def\XINT_expr_getnext_a #1%
+{% screens out sub-expressions and \count or \dimen registers/variables
+ \xint_gob_til_! #1\XINT_expr_subexpr !% recall this ! has catcode 11
+ \ifcat\relax#1% \count or \numexpr etc... token or count, dimen, skip cs
+ \expandafter\XINT_expr_countetc
+ \else
+ \expandafter\expandafter\expandafter\XINT_expr_getnextfork\expandafter\string
+ \fi
+ #1%
+}%
+\def\XINT_expr_subexpr !#1\fi !{\expandafter\XINT_expr_getop\xint_gobble_iii }%
+% \end{macrocode}
+% \lverb|1.2 adds \ht, \dp, \wd and the eTeX font things.|
+% \begin{macrocode}
+\def\XINT_expr_countetc #1%
+{%
+ \ifx\count#1\else\ifx\dimen#1\else\ifx\numexpr#1\else\ifx\dimexpr#1\else
+ \ifx\skip#1\else\ifx\glueexpr#1\else\ifx\fontdimen#1\else\ifx\ht#1\else
+ \ifx\dp#1\else\ifx\wd#1\else\ifx\fontcharht#1\else\ifx\fontcharwd#1\else
+ \ifx\fontchardp#1\else\ifx\fontcharic#1\else
+ \XINT_expr_unpackvar
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\XINT_expr_getnext\number #1%
+}%
+\def\XINT_expr_unpackvar\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\XINT_expr_getnext\number #1%
+ {\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\XINT_expr_getop\csname .=\number#1\endcsname }%
+\begingroup
+\lccode`*=`#
+\lowercase{\endgroup
+\def\XINT_expr_getnextfork #1{%
+ \if#1*\xint_dothis {\XINT_expr_scan_macropar *}\fi
+ \if#1[\xint_dothis {\xint_c_xviii ({}}\fi
+ \if#1+\xint_dothis \XINT_expr_getnext \fi
+ \if#1.\xint_dothis {\XINT_expr_startdec}\fi
+ \if#1-\xint_dothis -\fi
+ \if#1(\xint_dothis {\xint_c_xviii ({}}\fi
+ \xint_orthat {\XINT_expr_scan_nbr_or_func #1}%
+}}%
+\def\XINT_expr_scan_macropar #1#2{\expandafter\XINT_expr_getop\csname .=#1#2\endcsname }%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_scan_nbr_or_func}: the integer or decimal number or hexa-decimal number or
+% function name or variable name or special hacky things big parser}
+% \localtableofcontents
+% \lverb@1.2 release has replaced chains of \romannumeral-`0 by \csname
+% governed expansion. Thus there is no more the limit at about 5000 digits for
+% parsed numbers.
+%
+% In order to avoid having to lock and unlock in succession to handle the
+% scientific part and adjust the exponent according to the number of digits of
+% the decimal part, the parsing of this decimal part counts on the fly the
+% number of digits it encounters.
+%
+% There is some slight annoyance with \xintiiexpr which should never be given
+% a [n] inside its \csname.=<digits>\endcsname storage of numbers (because its
+% arithmetic uses the ii macros which know nothing about the [N] notation).
+% Hence if the parser has only seen digits when hitting something else than
+% the dot or e (or E), it will not insert a [0]. Thus we very slightly
+% compromise the efficiency of \xintexpr and \xintfloatexpr in order to be
+% able to share the same code with \xintiiexpr.
+%
+% Indeed, the parser at this location is completely common to all, it does not
+% know if it is working inside \xintexpr or \xintiiexpr. On the other hand if
+% a dot or a e (or E) is met, then the (common) parser has no scrupules ending
+% this number with a [n], this will provoke an error later if that was within
+% an \xintiiexpr, as soon as an arithmetic macro is used.
+%
+% As the gathered numbers have no spaces, no pluses, no minuses, the only
+% remaining issue is with leading zeroes, which are discarded on the fly. The
+% hexadecimal numbers leading zeroes are stripped in a second stage by the
+% \xintHexToDec macro.
+%
+% With 1.2, \xinttheexpr . \relax does not work anymore (it did in earlier
+% releases). There must be digits either before or after the decimal mark. Thus
+% both \xinttheexpr 1.\relax and \xinttheexpr .1\relax are legal.
+%
+% The ` syntax is here used for special constructs like `+`(..), `*`(..) where
+% + or * will be treated as functions. Current implementation picks only one
+% token (could have been braced stuff), here it will be + or *, and via
+% \XINT_expr_op_` this then becomes a suitable
+% \XINT_{expr|iiexpr|flexpr}_func_+ (or *). Documentation says to use
+% `+`(...), but `+(...) is also valid. The opening parenthesis must be there,
+% it is not allowed to come from expansion.@
+%
+% \begin{macrocode}
+\catcode96 11 % `
+\def\XINT_expr_scan_nbr_or_func #1% this #1 has necessarily here catcode 12
+{%(
+ \if )#1\xint_dothis \XINT_expr_gotnil \fi
+ \if "#1\xint_dothis \XINT_expr_scanhex_I\fi
+ \if `#1\xint_dothis {\XINT_expr_onliteral_`}\fi
+ \ifnum \xint_c_ix<1#1 \xint_dothis \XINT_expr_startint\fi
+ \xint_orthat \XINT_expr_scanfunc #1%
+}%
+\def\XINT_expr_gotnil{\expandafter\XINT_expr_getop\csname.= \endcsname}%
+\def\XINT_expr_onliteral_` #1#2#3({\xint_c_xviii `{#2}}%
+\catcode96 12 % `
+\def\XINT_expr_startint #1%
+{%
+ \if #10\expandafter\XINT_expr_gobz_a\else\XINT_expr_scanint_a\fi #1%
+}%
+\def\XINT_expr_scanint_a #1#2%
+ {\expandafter\XINT_expr_getop\csname.=#1%
+ \expandafter\XINT_expr_scanint_b\romannumeral`&&@#2}%
+\def\XINT_expr_gobz_a #1%
+ {\expandafter\XINT_expr_getop\csname.=%
+ \expandafter\XINT_expr_gobz_scanint_b\romannumeral`&&@#1}%
+\def\XINT_expr_startdec #1%
+ {\expandafter\XINT_expr_getop\csname.=%
+ \expandafter\XINT_expr_scandec_a\romannumeral`&&@#1}%
+% \end{macrocode}
+% \subsubsection{Integral part (skipping zeroes)}
+% \lverb|1.2 has modified the code to give highest priority to digits, the
+% accelerating impact is non-negligeable. I don't think the doubled \string is
+% a serious penalty.|
+% \begin{macrocode}
+\def\XINT_expr_scanint_b #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_scanint_endbycs\expandafter #1\fi
+ \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanint_c\fi
+ \string#1\XINT_expr_scanint_d
+}%
+\def\XINT_expr_scanint_d #1%
+{%
+ \expandafter\XINT_expr_scanint_b\romannumeral`&&@#1%
+}%
+\def\XINT_expr_scanint_endbycs#1#2\XINT_expr_scanint_d{\endcsname #1}%
+% \end{macrocode}
+% \lverb|With 1.2d the tacit multiplication in front of a variable name or
+% function name is now done with a higher precedence, intermediate between the
+% common one of * and / and the one of ^. Thus x/2y is like x/(2y), but x^2y
+% is like x^2*y and 2y! is not (2y)! but 2*y!.
+%
+% Finally, 1.2d has moved away from the _scan macros all the business of the
+% tacit multiplication in one unique place via \XINT_expr_getop. For this, the
+% ending token is not first given to \string as was done earlier before
+% handing over back control to \XINT_expr_getop. Earlier we had to identify
+% the catcode 11 ! signaling a sub-expression here. With no \string applied
+% we can do it in \XINT_expr_getop. As a corollary of this displacement,
+% parsing of big numbers should be a tiny bit faster now.
+%
+% Extended for 1.2l to ignore underscore character _ if encountered within
+% digits; so it can serve as separator for better readability.|
+% \begin{macrocode}
+\def\XINT_expr_scanint_c\string #1\XINT_expr_scanint_d
+{%
+ \if _#1\xint_dothis\XINT_expr_scanint_d\fi
+ \if e#1\xint_dothis{[\the\numexpr0\XINT_expr_scanexp_a +}\fi
+ \if E#1\xint_dothis{[\the\numexpr0\XINT_expr_scanexp_a +}\fi
+ \if .#1\xint_dothis{\XINT_expr_startdec_a .}\fi
+ \xint_orthat {\endcsname #1}%
+}%
+\def\XINT_expr_startdec_a .#1%
+{%
+ \expandafter\XINT_expr_scandec_a\romannumeral`&&@#1%
+}%
+\def\XINT_expr_scandec_a #1%
+{%
+ \if .#1\xint_dothis{\endcsname..}\fi
+ \xint_orthat {\XINT_expr_scandec_b 0.#1}%
+}%
+\def\XINT_expr_gobz_scanint_b #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_gobz_scanint_endbycs\expandafter #1\fi
+ \ifnum\xint_c_x<1\string#1 \else\expandafter\XINT_expr_gobz_scanint_c\fi
+ \string#1\XINT_expr_scanint_d
+}%
+\def\XINT_expr_gobz_scanint_endbycs#1#2\XINT_expr_scanint_d{0\endcsname #1}%
+\def\XINT_expr_gobz_scanint_c\string #1\XINT_expr_scanint_d
+{%
+ \if _#1\xint_dothis\XINT_expr_gobz_scanint_d\fi
+ \if e#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
+ \if E#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
+ \if .#1\xint_dothis{\XINT_expr_gobz_startdec_a .}\fi
+ \if 0#1\xint_dothis\XINT_expr_gobz_scanint_d\fi
+ \xint_orthat {0\endcsname #1}%
+}%
+\def\XINT_expr_gobz_scanint_d #1%
+{%
+ \expandafter\XINT_expr_gobz_scanint_b\romannumeral`&&@#1%
+}%
+\def\XINT_expr_gobz_startdec_a .#1%
+{%
+ \expandafter\XINT_expr_gobz_scandec_a\romannumeral`&&@#1%
+}%
+\def\XINT_expr_gobz_scandec_a #1%
+{%
+ \if .#1\xint_dothis{0\endcsname..}\fi
+ \xint_orthat {\XINT_expr_gobz_scandec_b 0.#1}%
+}%
+% \end{macrocode}
+% \subsubsection{Fractional part}
+% \lverb|Annoying duplication of code to allow 0. as input.
+%
+% 1.2a corrects a very bad bug in 1.2 \XINT_expr_gobz_scandec_b which should
+% have stripped leading zeroes in the fractional part but didn't; as a result
+% \xinttheexpr 0.01\relax returned 0 =:-((( Thanks to Kroum Tzanev who
+% reported the issue. Does it improve things if I say the bug was introduced
+% in 1.2, it wasn't present before ?|
+% \begin{macrocode}
+\def\XINT_expr_scandec_b #1.#2%
+{%
+ \ifcat \relax #2\expandafter\XINT_expr_scandec_endbycs\expandafter#2\fi
+ \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_scandec_c\fi
+ \string#2\expandafter\XINT_expr_scandec_d\the\numexpr #1-\xint_c_i.%
+}%
+\def\XINT_expr_scandec_endbycs #1#2\XINT_expr_scandec_d
+ \the\numexpr#3-\xint_c_i.{[#3]\endcsname #1}%
+\def\XINT_expr_scandec_d #1.#2%
+{%
+ \expandafter\XINT_expr_scandec_b
+ \the\numexpr #1\expandafter.\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scandec_c\string #1#2\the\numexpr#3-\xint_c_i.%
+{%
+ \if _#1\xint_dothis{\XINT_expr_scandec_d#3.}\fi
+ \if e#1\xint_dothis{[\the\numexpr#3\XINT_expr_scanexp_a +}\fi
+ \if E#1\xint_dothis{[\the\numexpr#3\XINT_expr_scanexp_a +}\fi
+ \xint_orthat {[#3]\endcsname #1}%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_expr_gobz_scandec_b #1.#2%
+{%
+ \ifcat \relax #2\expandafter\XINT_expr_gobz_scandec_endbycs\expandafter#2\fi
+ \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_gobz_scandec_c\fi
+ \if0#2\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi
+ {\expandafter\XINT_expr_gobz_scandec_b}%
+ {\string#2\expandafter\XINT_expr_scandec_d}\the\numexpr#1-\xint_c_i.%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\XINT_expr_gobz_scandec_endbycs #1#2\xint_c_i.{0[0]\endcsname #1}%
+\def\XINT_expr_gobz_scandec_c\if0#1#2\fi #3\numexpr#4-\xint_c_i.%
+{%
+ \if _#1\xint_dothis{\XINT_expr_gobz_scandec_b #4.}\fi
+ \if e#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
+ \if E#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
+ \xint_orthat {0[0]\endcsname #1}%
+}%
+% \end{macrocode}
+% \subsubsection{Scientific notation}
+% \lverb|Some pluses and minuses are allowed at the start of the scientific
+% part, however not later, and no parenthesis.|
+% \begin{macrocode}
+\def\XINT_expr_scanexp_a #1#2%
+{%
+ #1\expandafter\XINT_expr_scanexp_b\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scanexp_b #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_scanexp_endbycs\expandafter #1\fi
+ \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanexp_c\fi
+ \string#1\XINT_expr_scanexp_d
+}%
+\def\XINT_expr_scanexpr_endbycs#1#2\XINT_expr_scanexp_d {]\endcsname #1}%
+\def\XINT_expr_scanexp_d #1%
+{%
+ \expandafter\XINT_expr_scanexp_bb\romannumeral`&&@#1%
+}%
+\def\XINT_expr_scanexp_c\string #1\XINT_expr_scanexp_d
+{%
+ \if _#1\xint_dothis \XINT_expr_scanexp_d \fi
+ \if +#1\xint_dothis {\XINT_expr_scanexp_a +}\fi
+ \if -#1\xint_dothis {\XINT_expr_scanexp_a -}\fi
+ \xint_orthat {]\endcsname #1}%
+}%
+\def\XINT_expr_scanexp_bb #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_scanexp_endbycs_b\expandafter #1\fi
+ \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanexp_cb\fi
+ \string#1\XINT_expr_scanexp_db
+}%
+\def\XINT_expr_scanexp_endbycs_b#1#2\XINT_expr_scanexp_db {]\endcsname #1}%
+\def\XINT_expr_scanexp_db #1%
+{%
+ \expandafter\XINT_expr_scanexp_bb\romannumeral`&&@#1%
+}%
+\def\XINT_expr_scanexp_cb\string #1\XINT_expr_scanexp_db
+{%
+ \if _#1\xint_dothis\XINT_expr_scanexp_d\fi
+ \xint_orthat{]\endcsname #1}%
+}%
+% \end{macrocode}
+% \subsubsection{Hexadecimal numbers}
+% \lverb|1.2d has moved most of the handling of tacit multiplication to
+% \XINT_expr_getop, but we have to do some of it here, because we apply
+% \string before calling \XINT_expr_scanhexI_aa. I do not insert the *
+% in \XINT_expr_scanhexI_a, because it is its higher precedence variant which
+% will is expected, to do the same as when a non-hexadecimal number prefixes a
+% sub-expression. Tacit multiplication in front of variable or function names
+% will not work (because of this \string).
+%
+% Extended for 1.2l to ignore underscore character _ if encountered within
+% digits.|
+% \begin{macrocode}
+\def\XINT_expr_scanhex_I #1% #1="
+{%
+ \expandafter\XINT_expr_getop\csname.=\expandafter
+ \XINT_expr_unlock_hex_in\csname.=\XINT_expr_scanhexI_a
+}%
+\def\XINT_expr_scanhexI_a #1%
+{%
+ \ifcat #1\relax\xint_dothis{.>\endcsname\endcsname #1}\fi
+ \ifx !#1\xint_dothis{.>\endcsname\endcsname !}\fi
+ \xint_orthat {\expandafter\XINT_expr_scanhexI_aa\string #1}%
+}%
+\def\XINT_expr_scanhexI_aa #1%
+{%
+ \if\ifnum`#1>`/
+ \ifnum`#1>`9
+ \ifnum`#1>`@
+ \ifnum`#1>`F
+ 0\else1\fi\else0\fi\else1\fi\else0\fi 1%
+ \expandafter\XINT_expr_scanhexI_b
+ \else
+ \if _#1\xint_dothis{\expandafter\XINT_expr_scanhexI_bgob}\fi
+ \if .#1\xint_dothis{\expandafter\XINT_expr_scanhex_transition}\fi
+ \xint_orthat % gather what we got so far, leave catcode 12 #1 in stream
+ {\xint_afterfi {.>\endcsname\endcsname}}%
+ \fi
+ #1%
+}%
+\def\XINT_expr_scanhexI_b #1#2%
+{%
+ #1\expandafter\XINT_expr_scanhexI_a\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scanhexI_bgob #1#2%
+{%
+ \expandafter\XINT_expr_scanhexI_a\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scanhex_transition .#1%
+{%
+ \expandafter.\expandafter.\expandafter
+ \XINT_expr_scanhexII_a\romannumeral`&&@#1%
+}%
+\def\XINT_expr_scanhexII_a #1%
+{%
+ \ifcat #1\relax\xint_dothis{\endcsname\endcsname#1}\fi
+ \ifx !#1\xint_dothis{\endcsname\endcsname !}\fi
+ \xint_orthat {\expandafter\XINT_expr_scanhexII_aa\string #1}%
+}%
+\def\XINT_expr_scanhexII_aa #1%
+{%
+ \if\ifnum`#1>`/
+ \ifnum`#1>`9
+ \ifnum`#1>`@
+ \ifnum`#1>`F
+ 0\else1\fi\else0\fi\else1\fi\else0\fi 1%
+ \expandafter\XINT_expr_scanhexII_b
+ \else
+ \if _#1\xint_dothis{\expandafter\XINT_expr_scanhexII_bgob}\fi
+ \xint_orthat{\xint_afterfi {\endcsname\endcsname}}%
+ \fi
+ #1%
+}%
+\def\XINT_expr_scanhexII_b #1#2%
+{%
+ #1\expandafter\XINT_expr_scanhexII_a\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scanhexII_bgob #1#2%
+{%
+ \expandafter\XINT_expr_scanhexII_a\romannumeral`&&@#2%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_scanfunc}: parsing names of functions and variables}
+% \begin{macrocode}
+\def\XINT_expr_scanfunc
+{%
+ \expandafter\XINT_expr_func\romannumeral`&&@\XINT_expr_scanfunc_a
+}%
+\def\XINT_expr_scanfunc_a #1#2%
+{%
+ \expandafter #1\romannumeral`&&@\expandafter\XINT_expr_scanfunc_b\romannumeral`&&@#2%
+}%
+% \end{macrocode}
+% \lverb|This handles: 1) (indirectly) tacit multiplication by a variable in
+% front a of sub-expression, 2) (indirectly) tacit multiplication in front of
+% a \count etc..., 3) functions which are recognized via an encountered opening
+% parenthesis (but later this must be disambiguated from variables with tacit
+% multiplication) 4) 5) 6) 7) acceptable components of a variable or function
+% names: @, underscore, digits, letters (or chars of category code letter.)
+%
+% The short lived 1.2d which followed the even shorter lived 1.2c managed to
+% introduce a bug here as it removed the check for catcode 11 !, which must be
+% recognized if ! is not to be taken as part of a variable name. Don't know
+% what I was thinking, it was the time when I was moving the handling of tacit
+% mutliplication entirely to the \XINT_expr_getop side. Fixed in 1.2e.
+%
+% I almost decided to remove the \ifcat\relax test whose rôle is to avoid the
+% \string#1 to do something bad is the escape char is a digit! Perhaps I will
+% remove it at some point ! I truly almost did it, but also the case of no
+% escape char is a problem (\string\0, if \0 is a count ...)
+%
+% The (indirectly) above means that via \XINT_expr_func then \XINT_expr_op__
+% one goes back to \XINT_expr_getop then \XINT_expr_getop_b which is the
+% location where tacit multiplication is now centralized. This makes the
+% treatment of tacit multiplication for situations such as <variable>\count or
+% <variable>\xintexpr..\relax, perhaps a bit sub-optimal, but first the
+% variable name must be gathered, second the variable must expand to its
+% value.|
+% \begin{macrocode}
+\def\XINT_expr_scanfunc_b #1%
+{%
+ \ifx !#1\xint_dothis{(_}\fi
+ \ifcat \relax#1\xint_dothis{(_}\fi
+ \if (#1\xint_dothis{\xint_firstoftwo{(`}}\fi
+ \if @#1\xint_dothis \XINT_expr_scanfunc_a \fi
+ \if _#1\xint_dothis \XINT_expr_scanfunc_a \fi
+ \ifnum \xint_c_ix<1\string#1 \xint_dothis \XINT_expr_scanfunc_a \fi
+ \ifcat a#1\xint_dothis \XINT_expr_scanfunc_a \fi
+ \xint_orthat {(_}%
+ #1%
+}%
+% \end{macrocode}
+% \lverb@Comments written 2015/11/12: earlier there was an \ifcsname test for
+% checking if we had a variable in front of a (, for tacit multiplication for
+% example in x(y+z(x+w)) to work. But after I had implemented functions (that
+% was yesterday...), I had the problem if was impossible to re-declare a
+% variable name such as "f" as a function name. The problem is that here we
+% can not test if the function is available because we don't know if we are in
+% expr, iiexpr or floatexpr. The \xint_c_xviii causes all fetching operations
+% to stop and control is handed over to the routines which will be expr,
+% iiexpr ou floatexpr specific, i.e. the \XINT_{expr|iiexpr|flexpr}_op_{`|_}
+% which are invoked by the until_<op>_b macros earlier in the stream.
+% Functions may exist for one but not the two other parsers. Variables are
+% declared via one parser and usable in the others, but naturally \xintiiexpr
+% has its restrictions.
+%
+% Thinking about this again I decided to treat a priori cases such as x(...)
+% as functions, after having assigned to each variable a low-weight macro
+% which will convert this into _getop\.=<value of x>*(...). To activate that
+% macro at the right time I could for this exploit the "onliteral" intercept,
+% which is parser independent (1.2c).
+%
+% This led to me necessarily to rewrite partially the seq, add, mul, subs,
+% iter ... routines as now the variables fetch only one token. I think the
+% thing is more efficient.
+%
+% 1.2c had \def\XINT_expr_func #1(#2{\xint_c_xviii #2{#1}}
+%
+% In \XINT_expr_func the #2 is _ if #1 must be a variable name, or #2=` if #1
+% must be either a function name or possibly a variable name which will then
+% have to be followed by tacit multiplication before the opening parenthesis.
+%
+% The \xint_c_xviii is there because _op_` must know in which parser
+% it works. Dispendious for _. Hence I modify for 1.2d. @
+% \begin{macrocode}
+\def\XINT_expr_func #1(#2{\if _#2\xint_dothis\XINT_expr_op__\fi
+ \xint_orthat{\xint_c_xviii #2}{#1}}%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_getop}: finding the next operator or closing
+% parenthesis or end of expression}
+% \lverb|Release 1.1 implements multi-character operators.
+%
+% 1.2d adds tacit mutiplication also in front of variable or functions names
+% starting with a letter, not only a @ or a _ as was already the case. This is
+% for (x+y)z situations. It also applies higher precedence in cases like x/2y
+% or x/2@, or x/2max(3,5), or x/2\xintexpr 3\relax.
+%
+% In fact, finally I decide that all sorts of tacit multiplication will always
+% use the higher precedence.
+%
+% Indeed I hesitated somewhat: with the current code one does not know if
+% \XINT_expr_getop as invoked after a closing parenthesis or because a number
+% parsing ended, and I felt distinguishing the two was unneeded extra stuff.
+% This means cases like (a+b)/(c+d)(e+f) will first multiply the last two
+% parenthesized terms.
+%
+% The ! starting a sub-expression must be distinguished from the post-fix !
+% for factorial, thus we must not do a too early \string. In versions < 1.2c,
+% the catcode 11 ! had to be identified in all branches of the number or
+% function scans. Here it is simply treated as a special case of a letter.
+%
+% 1.2q adds tacit multiplication in cases such as (1+1)3 or 5!7!|
+% \begin{macrocode}
+\def\XINT_expr_getop #1#2% this #1 is the current locked computed value
+{%
+ \expandafter\XINT_expr_getop_a\expandafter #1\romannumeral`&&@#2%
+}%
+\catcode`* 11
+\def\XINT_expr_getop_a #1#2%
+{%
+ \ifx \relax #2\xint_dothis\xint_firstofthree\fi
+ \ifcat \relax #2\xint_dothis\xint_secondofthree\fi
+ \ifnum\xint_c_ix<1\string#2 \xint_dothis\xint_secondofthree\fi
+ \if _#2\xint_dothis \xint_secondofthree\fi
+ \if @#2\xint_dothis \xint_secondofthree\fi
+ \if (#2\xint_dothis \xint_secondofthree\fi
+ \ifcat a#2\xint_dothis \xint_secondofthree\fi
+ \xint_orthat \xint_thirdofthree
+ {\XINT_expr_foundend #1}%
+ {\XINT_expr_precedence_*** *#1#2}% tacit multiplication with higher precedence
+ {\expandafter\XINT_expr_getop_b \string#2#1}%
+}%
+\catcode`* 12
+\def\XINT_expr_foundend {\xint_c_ \relax }% \relax is a place holder here.
+% \end{macrocode}
+% \lverb|? is a very special operator with top precedence which will check if
+% the next token is another ?, while avoiding removing a brace pair from token
+% stream due to its syntax. Pre 1.1 releases used : rather than ??, but we
+% need : for Python like slices of lists.|
+% \begin{macrocode}
+\def\XINT_expr_getop_b #1%
+{%
+ \if '#1\xint_dothis{\XINT_expr_binopwrd }\fi
+ \if ?#1\xint_dothis{\XINT_expr_precedence_? ?}\fi
+ \xint_orthat {\XINT_expr_scanop_a #1}%
+}%
+\def\XINT_expr_binopwrd #1#2'{\expandafter\XINT_expr_foundop_a
+ \csname XINT_expr_itself_\xint_zapspaces #2 \xint_gobble_i\endcsname #1}%
+\def\XINT_expr_scanop_a #1#2#3%
+ {\expandafter\XINT_expr_scanop_b\expandafter #1\expandafter #2\romannumeral`&&@#3}%
+\def\XINT_expr_scanop_b #1#2#3%
+{%
+ \ifcat#3\relax\xint_dothis{\XINT_expr_foundop_a #1#2#3}\fi
+ \ifcsname XINT_expr_itself_#1#3\endcsname
+ \xint_dothis
+ {\expandafter\XINT_expr_scanop_c\csname XINT_expr_itself_#1#3\endcsname #2}\fi
+ \xint_orthat {\XINT_expr_foundop_a #1#2#3}%
+}%
+\def\XINT_expr_scanop_c #1#2#3%
+{%
+ \expandafter\XINT_expr_scanop_d\expandafter #1\expandafter #2\romannumeral`&&@#3%
+}%
+\def\XINT_expr_scanop_d #1#2#3%
+{%
+ \ifcat#3\relax \xint_dothis{\XINT_expr_foundop #1#2#3}\fi
+ \ifcsname XINT_expr_itself_#1#3\endcsname
+ \xint_dothis
+ {\expandafter\XINT_expr_scanop_c\csname XINT_expr_itself_#1#3\endcsname #2}\fi
+ \xint_orthat {\csname XINT_expr_precedence_#1\endcsname #1#2#3}%
+}%
+\def\XINT_expr_foundop_a #1%
+{%
+ \ifcsname XINT_expr_precedence_#1\endcsname
+ \csname XINT_expr_precedence_#1\expandafter\endcsname
+ \expandafter #1%
+ \else
+ \xint_afterfi{\XINT_expr_unknown_operator {#1}\XINT_expr_getop}%
+ \fi
+}%
+\def\XINT_expr_unknown_operator #1{\xintError:removed \xint_gobble_i {#1}}%
+\def\XINT_expr_foundop #1{\csname XINT_expr_precedence_#1\endcsname #1}%
+% \end{macrocode}
+% \subsection{Expansion spanning; opening and closing parentheses}
+% \lverb|Version 1.1 had a hack inside the until macros for handling the omit
+% and abort in iterations over dummy variables. This has been removed by
+% 1.2c, see the subsection where omit and abort are discussed.|
+%
+% \begin{macrocode}
+\catcode`) 11
+\def\XINT_tmpa #1#2#3#4%
+{%
+ \def#1##1%
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#1\romannumeral`&&@#3}%
+ -{#2##1}%
+ \krof
+ }%
+ \def#2##1##2%
+ {%
+ \ifcase ##1\expandafter\XINT_expr_done
+ \or\xint_afterfi{\XINT_expr_extra_)
+ \expandafter #1\romannumeral`&&@\XINT_expr_getop }%
+ \else
+ \xint_afterfi{\expandafter#1\romannumeral`&&@\csname XINT_#4_op_##2\endcsname }%
+ \fi
+ }%
+}%
+\def\XINT_expr_extra_) {\xintError:removed }%
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\XINT_tmpa
+ \csname XINT_#1_until_end_a\expandafter\endcsname
+ \csname XINT_#1_until_end_b\expandafter\endcsname
+ \csname XINT_#1_op_-vi\endcsname
+ {#1}%
+}%
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1{\expandafter #3\romannumeral`&&@\XINT_expr_getnext }%
+ \def #2{\expandafter #3\romannumeral`&&@\XINT_expr_getnext }%
+ \def #3##1{\xint_UDsignfork
+ ##1{\expandafter #3\romannumeral`&&@#5}%
+ -{#4##1}%
+ \krof }%
+ \def #4##1##2{\ifcase ##1\expandafter\XINT_expr_missing_)
+ \or \csname XINT_#6_op_##2\expandafter\endcsname
+ \else
+ \xint_afterfi{\expandafter #3\romannumeral`&&@\csname XINT_#6_op_##2\endcsname }%
+ \fi
+ }%
+}%
+\def\XINT_expr_missing_) {\xintError:inserted \xint_c_ \XINT_expr_done }%
+% \end{macrocode}
+% \lverb|We should be using until_( notation to stay synchronous with until_+,
+% until_* etc..., but I found that until_) was more telling.|
+% \begin{macrocode}
+\catcode`) 12
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\XINT_tmpa
+ \csname XINT_#1_op_(\expandafter\endcsname
+ \csname XINT_#1_oparen\expandafter\endcsname
+ \csname XINT_#1_until_)_a\expandafter\endcsname
+ \csname XINT_#1_until_)_b\expandafter\endcsname
+ \csname XINT_#1_op_-vi\endcsname
+ {#1}%
+}%
+\expandafter\let\csname XINT_expr_precedence_)\endcsname\xint_c_i
+% \end{macrocode}
+% \subsection{\textbar, \textbar\textbar, \&,
+% \&\&, <, >, =, ==, <=, >=, !=, +, \textendash,
+% \texorpdfstring{\protect\lowast}{*}, /, \textasciicircum,
+% \texorpdfstring{\protect\lowast\protect\lowast}{**}, //, /:, .., ..[, ]..,
+% ][, ][:, :], and ++ operators}
+% \localtableofcontents
+% \subsubsection{Square brackets for lists, the
+% !? for omit and abort, and the ++ postfix construct}
+% \lverb|This is all very clever and only need setting some suitable precedence
+% levels, if only I could understand what I did in 2014... just joking. Notice
+% that op_) macros are defined here in the \xintFor loop.
+%
+% There is some clever business going on here with the letter a for handling
+% constructs such as [3..5]*2 (I think...).
+%
+% 1.2c has replaced 1.1's private dealings with "^C" (which was done before
+% dummy variables got implemented) by use of "!?". See discussion of omit and
+% abort.
+% |
+% \begin{macrocode}
+\expandafter\let\csname XINT_expr_precedence_]\endcsname\xint_c_i
+\expandafter\let\csname XINT_expr_precedence_;\endcsname\xint_c_i
+\let\XINT_expr_precedence_a \xint_c_xviii
+\let\XINT_expr_precedence_!? \xint_c_ii
+\expandafter\let\csname XINT_expr_precedence_++)\endcsname \xint_c_i
+% \end{macrocode}
+% \lverb|Comments added 2015/11/13 Here we have in particular the mechanism
+% for post action on lists via op_] The precedence_] is the one of a closing
+% parenthesis. We need the closing parenthesis to do its job, hence we can not
+% define a op_]+ operator for example, as we want to assign it the precedence
+% of addition not the one of closing parenthesis. The trick I used in 1.1 was
+% to let the op_] insert the letter a, this letter exceptionnally also being a
+% legitimate operator, launch the _getop and let it find a a*, a+, a/, a-, a^,
+% a** operator standing for ]*, ]+, ]/, ]^, ]** postfix item by item list
+% operator. I thought I had in mind an example to show that having defined
+% op_a and precedence_a for the letter a caused a reduction in syntax for this
+% letter, but it seems I am lacking now an example.
+%
+% 2015/11/18: for 1.2d I accelerate \XINT_expr_op_] to jump over the
+% \XINT_expr_getop_a which now does tacit multiplications also in front of
+% letters, for reasons of things like, (x+y)z, hence it must not see the "a".
+% I could have used a catcode12 a possibly, but anyhow jumping straight to
+% \XINT_expr_scanop_a skips a few expansion steps (up to the potential price
+% of less conceptual programming if I change things in the future.)|
+% \begin{macrocode}
+\catcode`. 11 \catcode`= 11 \catcode`+ 11
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\let\csname XINT_#1_op_)\endcsname \XINT_expr_getop
+ \expandafter\let\csname XINT_#1_op_;\endcsname \space
+ \expandafter\def\csname XINT_#1_op_]\endcsname ##1{\XINT_expr_scanop_a a##1}%
+ \expandafter\let\csname XINT_#1_op_a\endcsname \XINT_expr_getop
+% \end{macrocode}
+% \lverb|1.1 2014/10/29 did \expandafter\.=+\xintiCeil which transformed it into
+% \romannumeral0\xinticeil, which seems a bit weird. This exploited the fact
+% that dummy variables macros could back then pick braced material (which in the
+% case at hand here ended being {\romannumeral0\xinticeil...} and were submitted
+% to two expansions. The result of this was to provide a not value which got
+% expanded only in the first loop of the :_A and following macros of seq,
+% iter, rseq, etc...
+%
+% Anyhow with 1.2c I have changed the implementation of dummy variables which
+% now need to fetch a single locked token, which they do not expand.
+%
+% The \xintiCeil appears a bit dispendious, but I need the starting value in a
+% \numexpr compatible form in the iteration loops.|
+% \begin{macrocode}
+ \expandafter\def\csname XINT_#1_op_++)\endcsname ##1##2\relax
+ {\expandafter\XINT_expr_foundend \expandafter
+ {\expandafter\.=+\csname .=\XINT:NEhook:one\xintiCeil{\XINT_expr_unlock ##1}\endcsname }}%
+}%
+\catcode`. 12 \catcode`= 12 \catcode`+ 12
+% \end{macrocode}
+% \lverb|1.2d adds the *** for tying via tacit multiplication, for example
+% x/2y. Actually I don't need the _itself mechanism for ***, only a precedence.|
+% \begin{macrocode}
+\catcode`& 12
+\xintFor* #1 in {{==}{<=}{>=}{!=}{&&}{||}{**}{//}{/:}{..}{..[}{].}{]..}%
+ {+[}{-[}{*[}{/[}{**[}{^[}{a+}{a-}{a*}{a/}{a**}{a^}%
+ {][}{][:}{:]}{!?}{++}{++)}}%{***}}
+ \do {\expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}}%
+\catcode`& 7
+\expandafter\let\csname XINT_expr_precedence_***\endcsname \xint_c_viii
+% \end{macrocode}
+% \subsubsection{The \textbar, \&, xor, <, >, =, <=, >=, !=, //, /:, .., +,
+% \textendash, \texorpdfstring{\protect\lowast}{*}, /, \textasciicircum, ..[,
+% and ].. operators for expr, floatexpr and iiexpr operators}
+% \lverb|1.2d needed some room between /, * and ^. Hence precedence for ^
+% is now at 9|
+% \begin{macrocode}
+\def\XINT_expr_defbin_c #1#2#3#4#5#6#7#8#9%
+{%
+ \def #1##1% \XINT_expr_op_<op> ou flexpr ou iiexpr
+ {% keep value, get next number and operator, then do until
+ \expandafter #2\expandafter ##1%
+ \romannumeral`&&@\expandafter\XINT_expr_getnext }%
+ \def #2##1##2% \XINT_expr_until_<op>_a ou flexpr ou iiexpr
+ {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
+ -{#3##1##2}%
+ \krof }%
+ \def #3##1##2##3##4% \XINT_expr_until_<op>_b ou flexpr ou iiexpr
+ {% either execute next operation now, or first do next (possibly unary)
+ \ifnum ##2>#7%
+ \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
+ \csname XINT_#8_op_##3\endcsname {##4}}%
+ \else \xint_afterfi {\expandafter ##2\expandafter ##3%
+ \csname .=#9#6{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname }%
+ \fi }%
+ \let #7#5%
+}%
+\def\XINT_expr_defbin_b #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_defbin_c
+ \csname XINT_#1_op_#2\expandafter\endcsname
+ \csname XINT_#1_until_#2_a\expandafter\endcsname
+ \csname XINT_#1_until_#2_b\expandafter\endcsname
+ \csname XINT_#1_op_-#4\expandafter\endcsname
+ \csname xint_c_#3\expandafter\endcsname
+ \csname #5\expandafter\endcsname
+ \csname XINT_expr_precedence_#2\endcsname {#1}\XINT:NEhook:two
+}%
+\XINT_expr_defbin_b {expr} | {iii}{vi} {xintOR}%
+\XINT_expr_defbin_b {flexpr} | {iii}{vi} {xintOR}%
+\XINT_expr_defbin_b {iiexpr} | {iii}{vi} {xintOR}%
+\XINT_expr_defbin_b {expr} & {iv}{vi} {xintAND}%
+\XINT_expr_defbin_b {flexpr} & {iv}{vi} {xintAND}%
+\XINT_expr_defbin_b {iiexpr} & {iv}{vi} {xintAND}%
+\XINT_expr_defbin_b {expr} {xor}{iii}{vi} {xintXOR}%
+\XINT_expr_defbin_b {flexpr}{xor}{iii}{vi} {xintXOR}%
+\XINT_expr_defbin_b {iiexpr}{xor}{iii}{vi} {xintXOR}%
+\XINT_expr_defbin_b {expr} < {v}{vi} {xintLt}%
+\XINT_expr_defbin_b {flexpr} < {v}{vi} {xintLt}%
+\XINT_expr_defbin_b {iiexpr} < {v}{vi} {xintiiLt}%
+\XINT_expr_defbin_b {expr} > {v}{vi} {xintGt}%
+\XINT_expr_defbin_b {flexpr} > {v}{vi} {xintGt}%
+\XINT_expr_defbin_b {iiexpr} > {v}{vi} {xintiiGt}%
+\XINT_expr_defbin_b {expr} = {v}{vi} {xintEq}%
+\XINT_expr_defbin_b {flexpr} = {v}{vi} {xintEq}%
+\XINT_expr_defbin_b {iiexpr} = {v}{vi} {xintiiEq}%
+\XINT_expr_defbin_b {expr} {<=} {v}{vi} {xintLtorEq}%
+\XINT_expr_defbin_b {flexpr}{<=} {v}{vi} {xintLtorEq}%
+\XINT_expr_defbin_b {iiexpr}{<=} {v}{vi} {xintiiLtorEq}%
+\XINT_expr_defbin_b {expr} {>=} {v}{vi} {xintGtorEq}%
+\XINT_expr_defbin_b {flexpr}{>=} {v}{vi} {xintGtorEq}%
+\XINT_expr_defbin_b {iiexpr}{>=} {v}{vi} {xintiiGtorEq}%
+\XINT_expr_defbin_b {expr} {!=} {v}{vi} {xintNotEq}%
+\XINT_expr_defbin_b {flexpr}{!=} {v}{vi} {xintNotEq}%
+\XINT_expr_defbin_b {iiexpr}{!=} {v}{vi} {xintiiNotEq}%
+\XINT_expr_defbin_b {expr} {//} {vii}{vii}{xintDivFloor}% CHANGED IN 1.2p!
+\XINT_expr_defbin_b {flexpr}{//} {vii}{vii}{XINTinFloatDivFloor}% "
+\XINT_expr_defbin_b {iiexpr}{//} {vii}{vii}{xintiiDivFloor}% "
+\XINT_expr_defbin_b {expr} {/:} {vii}{vii}{xintMod}% "
+\XINT_expr_defbin_b {flexpr}{/:} {vii}{vii}{XINTinFloatMod}% "
+\XINT_expr_defbin_b {iiexpr}{/:} {vii}{vii}{xintiiMod}% "
+\XINT_expr_defbin_b {expr} + {vi}{vi} {xintAdd}%
+\XINT_expr_defbin_b {flexpr} + {vi}{vi} {XINTinFloatAdd}%
+\XINT_expr_defbin_b {iiexpr} + {vi}{vi} {xintiiAdd}%
+\XINT_expr_defbin_b {expr} - {vi}{vi} {xintSub}%
+\XINT_expr_defbin_b {flexpr} - {vi}{vi} {XINTinFloatSub}%
+\XINT_expr_defbin_b {iiexpr} - {vi}{vi} {xintiiSub}%
+\XINT_expr_defbin_b {expr} * {vii}{vii}{xintMul}%
+\XINT_expr_defbin_b {flexpr} * {vii}{vii}{XINTinFloatMul}%
+\XINT_expr_defbin_b {iiexpr} * {vii}{vii}{xintiiMul}%
+\XINT_expr_defbin_b {expr} / {vii}{vii}{xintDiv}%
+\XINT_expr_defbin_b {flexpr} / {vii}{vii}{XINTinFloatDiv}%
+\XINT_expr_defbin_b {iiexpr} / {vii}{vii}{xintiiDivRound}% CHANGED IN 1.1!
+\XINT_expr_defbin_b {expr} ^ {ix}{ix} {xintPow}%
+\XINT_expr_defbin_b {flexpr} ^ {ix}{ix} {XINTinFloatPowerH}%
+\XINT_expr_defbin_b {iiexpr} ^ {ix}{ix} {xintiiPow}%
+\XINT_expr_defbin_b {expr} {..[}{iii}{vi} {xintSeqA::csv}%
+\XINT_expr_defbin_b {flexpr}{..[}{iii}{vi} {XINTinFloatSeqA::csv}%
+\XINT_expr_defbin_b {iiexpr}{..[}{iii}{vi} {xintiiSeqA::csv}%
+\def\XINT_expr_defbin_b #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_defbin_c
+ \csname XINT_#1_op_#2\expandafter\endcsname
+ \csname XINT_#1_until_#2_a\expandafter\endcsname
+ \csname XINT_#1_until_#2_b\expandafter\endcsname
+ \csname XINT_#1_op_-#4\expandafter\endcsname
+ \csname xint_c_#3\expandafter\endcsname
+ \csname #5\expandafter\endcsname
+ \csname XINT_expr_precedence_#2\endcsname {#1}{}%
+}%
+\XINT_expr_defbin_b {expr} {..} {iii}{vi} {xintSeq::csv}%
+\XINT_expr_defbin_b {flexpr}{..} {iii}{vi} {xintSeq::csv}%
+\XINT_expr_defbin_b {iiexpr}{..} {iii}{vi} {xintiiSeq::csv}%
+\XINT_expr_defbin_b {expr} {]..}{iii}{vi} {xintSeqB::csv}%
+\XINT_expr_defbin_b {flexpr}{]..}{iii}{vi} {XINTinFloatSeqB::csv}%
+\XINT_expr_defbin_b {iiexpr}{]..}{iii}{vi} {xintiiSeqB::csv}%
+% \end{macrocode}
+% \subsubsection{The ]+, ]\textendash, ]\texorpdfstring{\protect\lowast}{*}, ]/, ]\textasciicircum, +[, \textendash[, \texorpdfstring{\protect\lowast}{*}[, /[, and \textasciicircum[ list
+% operators}
+% \paragraph{\csh{XINT_expr_binop_inline_b}}\par
+% \lverb|This handles acting on comma separated values (no need to bother
+% about spaces in this context; expansion in a \csname...\endcsname.|
+% \begin{macrocode}
+\def\XINT_expr_binop_inline#1%
+ {\XINT_expr_binop_inline_a{\expandafter\XINT:NEhook:two\expandafter#1}}%
+\def\XINT_expr_binop_inline_a
+ {\expandafter\xint_gobble_i\romannumeral`&&@\XINT_expr_binop_inline_b }%
+\def\XINT_expr_binop_inline_b #1#2,{\XINT_expr_binop_inline_c #2,{#1}}%
+\def\XINT_expr_binop_inline_c #1{%
+ \if ,#1\xint_dothis\XINT_expr_binop_inline_e\fi
+ \if ^#1\xint_dothis\XINT_expr_binop_inline_end\fi
+ \xint_orthat\XINT_expr_binop_inline_d #1}%
+\def\XINT_expr_binop_inline_d #1,#2{,#2{#1}\XINT_expr_binop_inline_b {#2}}%
+\def\XINT_expr_binop_inline_e #1,#2{,\XINT_expr_binop_inline_b {#2}}%
+\def\XINT_expr_binop_inline_end #1,#2{}%
+\def\XINT_expr_deflistopr_c #1#2#3#4#5#6#7#8%
+{%
+ \def #1##1% \XINT_expr_op_<op> ou flexpr ou iiexpr
+ {% keep value, get next number and operator, then do until
+ \expandafter #2\expandafter ##1%
+ \romannumeral`&&@\expandafter\XINT_expr_getnext }%
+ \def #2##1##2% \XINT_expr_until_<op>_a ou flexpr ou iiexpr
+ {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
+ -{#3##1##2}%
+ \krof }%
+ \def #3##1##2##3##4% \XINT_expr_until_<op>_b ou flexpr ou iiexpr
+ {% either execute next operation now, or first do next (possibly unary)
+ \ifnum ##2>#7%
+ \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
+ \csname XINT_#8_op_##3\endcsname {##4}}%
+ \else \xint_afterfi {\expandafter ##2\expandafter ##3%
+ \csname .=\expandafter\XINT_expr_binop_inline\expandafter
+ {\expandafter#6\expandafter\xint_exchangetwo_keepbraces\expandafter
+ {\expandafter\XINT_expr_unlock\expandafter ##4\expandafter}\expandafter}%
+ \romannumeral`&&@\XINT_expr_unlock ##1,^,\endcsname }%
+ \fi }%
+ \let #7#5%
+}%
+\def\XINT_expr_deflistopr_b #1#2#3#4%
+{%
+ \expandafter\XINT_expr_deflistopr_c
+ \csname XINT_#1_op_#2\expandafter\endcsname
+ \csname XINT_#1_until_#2_a\expandafter\endcsname
+ \csname XINT_#1_until_#2_b\expandafter\endcsname
+ \csname XINT_#1_op_-#3\expandafter\endcsname
+ \csname xint_c_#3\expandafter\endcsname
+ \csname #4\expandafter\endcsname
+ \csname XINT_expr_precedence_#2\endcsname {#1}%
+}%
+% \end{macrocode}
+% \lverb|This is for [x..y]*z syntax etc.... Attention that with 1.2d,
+% precedence level of ^ raised to ix to make room for ***.|
+% \begin{macrocode}
+\XINT_expr_deflistopr_b {expr} {a+}{vi} {xintAdd}%
+\XINT_expr_deflistopr_b {expr} {a-}{vi} {xintSub}%
+\XINT_expr_deflistopr_b {expr} {a*}{vii}{xintMul}%
+\XINT_expr_deflistopr_b {expr} {a/}{vii}{xintDiv}%
+\XINT_expr_deflistopr_b {expr} {a^}{ix} {xintPow}%
+\XINT_expr_deflistopr_b {iiexpr}{a+}{vi} {xintiiAdd}%
+\XINT_expr_deflistopr_b {iiexpr}{a-}{vi} {xintiiSub}%
+\XINT_expr_deflistopr_b {iiexpr}{a*}{vii}{xintiiMul}%
+\XINT_expr_deflistopr_b {iiexpr}{a/}{vii}{xintiiDivRound}%
+\XINT_expr_deflistopr_b {iiexpr}{a^}{ix} {xintiiPow}%
+\XINT_expr_deflistopr_b {flexpr}{a+}{vi} {XINTinFloatAdd}%
+\XINT_expr_deflistopr_b {flexpr}{a-}{vi} {XINTinFloatSub}%
+\XINT_expr_deflistopr_b {flexpr}{a*}{vii}{XINTinFloatMul}%
+\XINT_expr_deflistopr_b {flexpr}{a/}{vii}{XINTinFloatDiv}%
+\XINT_expr_deflistopr_b {flexpr}{a^}{ix} {XINTinFloatPowerH}%
+\def\XINT_expr_deflistopl_c #1#2#3#4#5#6#7%
+{%
+ \def #1##1{\expandafter#2\expandafter##1\romannumeral`&&@%
+ \expandafter #3\romannumeral`&&@\XINT_expr_getnext }%
+ \def #2##1##2##3##4%
+ {% either execute next operation now, or first do next (possibly unary)
+ \ifnum ##2>#6%
+ \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
+ \csname XINT_#7_op_##3\endcsname {##4}}%
+ \else \xint_afterfi {\expandafter ##2\expandafter ##3%
+ \csname .=\expandafter\XINT_expr_binop_inline\expandafter
+ {\expandafter#5\expandafter
+ {\expandafter\XINT_expr_unlock\expandafter ##1\expandafter}\expandafter}%
+ \romannumeral`&&@\XINT_expr_unlock ##4,^,\endcsname }%
+ \fi }%
+ \let #6#4%
+}%
+\def\XINT_expr_deflistopl_b #1#2#3#4%
+{%
+ \expandafter\XINT_expr_deflistopl_c
+ \csname XINT_#1_op_#2\expandafter\endcsname
+ \csname XINT_#1_until_#2\expandafter\endcsname
+ \csname XINT_#1_until_)_a\expandafter\endcsname
+ \csname xint_c_#3\expandafter\endcsname
+ \csname #4\expandafter\endcsname
+ \csname XINT_expr_precedence_#2\endcsname {#1}%
+}%
+% \end{macrocode}
+% \lverb|This is for z*[x..y] syntax etc...|
+% \begin{macrocode}
+\XINT_expr_deflistopl_b {expr} {+[}{vi} {xintAdd}%
+\XINT_expr_deflistopl_b {expr} {-[}{vi} {xintSub}%
+\XINT_expr_deflistopl_b {expr} {*[}{vii}{xintMul}%
+\XINT_expr_deflistopl_b {expr} {/[}{vii}{xintDiv}%
+\XINT_expr_deflistopl_b {expr} {^[}{ix} {xintPow}%
+\XINT_expr_deflistopl_b {iiexpr}{+[}{vi} {xintiiAdd}%
+\XINT_expr_deflistopl_b {iiexpr}{-[}{vi} {xintiiSub}%
+\XINT_expr_deflistopl_b {iiexpr}{*[}{vii}{xintiiMul}%
+\XINT_expr_deflistopl_b {iiexpr}{/[}{vii}{xintiiDivRound}%
+\XINT_expr_deflistopl_b {iiexpr}{^[}{ix} {xintiiPow}%
+\XINT_expr_deflistopl_b {flexpr}{+[}{vi} {XINTinFloatAdd}%
+\XINT_expr_deflistopl_b {flexpr}{-[}{vi} {XINTinFloatSub}%
+\XINT_expr_deflistopl_b {flexpr}{*[}{vii}{XINTinFloatMul}%
+\XINT_expr_deflistopl_b {flexpr}{/[}{vii}{XINTinFloatDiv}%
+\XINT_expr_deflistopl_b {flexpr}{^[}{ix} {XINTinFloatPowerH}%
+% \end{macrocode}
+% \subsubsection{The \textquotesingle and\textquotesingle, \textquotesingle
+% or\textquotesingle, \textquotesingle xor\textquotesingle, and
+% \textquotesingle mod\textquotesingle\ as infix operator words}
+% \begin{macrocode}
+\xintFor #1 in {and,or,xor,mod} \do {%
+ \expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}}%
+\expandafter\let\csname XINT_expr_precedence_and\expandafter\endcsname
+ \csname XINT_expr_precedence_&\endcsname
+\expandafter\let\csname XINT_expr_precedence_or\expandafter\endcsname
+ \csname XINT_expr_precedence_|\endcsname
+\expandafter\let\csname XINT_expr_precedence_mod\expandafter\endcsname
+ \csname XINT_expr_precedence_/:\endcsname
+\xintFor #1 in {expr, flexpr, iiexpr} \do {%
+ \expandafter\let\csname XINT_#1_op_and\expandafter\endcsname
+ \csname XINT_#1_op_&\endcsname
+ \expandafter\let\csname XINT_#1_op_or\expandafter\endcsname
+ \csname XINT_#1_op_|\endcsname
+ \expandafter\let\csname XINT_#1_op_mod\expandafter\endcsname
+ \csname XINT_#1_op_/:\endcsname
+}%
+% \end{macrocode}
+% \subsubsection{The \textbar\textbar,
+% \&\&, \texorpdfstring{\protect\lowast\protect\lowast,
+% \protect\lowast\protect\lowast[, ]\protect\lowast\protect\lowast}{**, **[, ]**}{} operators as synonyms}
+% \begin{macrocode}
+\expandafter\let\csname XINT_expr_precedence_==\expandafter\endcsname
+ \csname XINT_expr_precedence_=\endcsname
+\expandafter\let\csname XINT_expr_precedence_&\string&\expandafter\endcsname
+ \csname XINT_expr_precedence_&\endcsname
+\expandafter\let\csname XINT_expr_precedence_||\expandafter\endcsname
+ \csname XINT_expr_precedence_|\endcsname
+\expandafter\let\csname XINT_expr_precedence_**\expandafter\endcsname
+ \csname XINT_expr_precedence_^\endcsname
+\expandafter\let\csname XINT_expr_precedence_a**\expandafter\endcsname
+ \csname XINT_expr_precedence_a^\endcsname
+\expandafter\let\csname XINT_expr_precedence_**[\expandafter\endcsname
+ \csname XINT_expr_precedence_^[\endcsname
+\xintFor #1 in {expr, flexpr, iiexpr} \do {%
+ \expandafter\let\csname XINT_#1_op_==\expandafter\endcsname
+ \csname XINT_#1_op_=\endcsname
+ \expandafter\let\csname XINT_#1_op_&\string&\expandafter\endcsname
+ \csname XINT_#1_op_&\endcsname
+ \expandafter\let\csname XINT_#1_op_||\expandafter\endcsname
+ \csname XINT_#1_op_|\endcsname
+ \expandafter\let\csname XINT_#1_op_**\expandafter\endcsname
+ \csname XINT_#1_op_^\endcsname
+ \expandafter\let\csname XINT_#1_op_a**\expandafter\endcsname
+ \csname XINT_#1_op_a^\endcsname
+ \expandafter\let\csname XINT_#1_op_**[\expandafter\endcsname
+ \csname XINT_#1_op_^[\endcsname
+}%
+% \end{macrocode}
+% \subsection{Macros for list selectors: [list][N], [list][:b], [list][a:], [list][a:b]}
+% \localtableofcontents
+%
+% \lverb|Python slicing was first implemented for 1.1 (27 octobre 2014). But
+% it used \xintCSVtoList and \xintListWithSep{,} to convert back and forth to
+% token lists for use of \xintKeep, \xintTrim, \xintNthElt. Not very
+% efficient! Also [list][a:b] was Python like but not [list][N] which counted
+% items starting at one, and returned the length for N=0.
+%
+% Release 1.2g changed this so [list][N] now counts starting at zero and
+% len(list) computes the number of items. Also 1.2g had its own f-expandable
+% macros handling directly the comma separated lists. They are located into
+% $xinttoolsnameimp.sty.
+%
+% 1.2j improved the $xinttoolsnameimp.sty macros and furthermore it made the
+% Python slicing in expressions a bit more efficient still by exploiting in
+% some cases that expansion happens in \csname...\endcsname and does not have
+% to be f-expandable. But the f-expandable variants must be kept for use by
+% \xintNewExpr and \xintdeffunc.
+% |
+% \begin{macrocode}
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1% \XINT_expr_op_][
+ {%
+ \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2% \XINT_expr_until_][_a
+ {\xint_UDsignfork
+ ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
+ -{#3##1##2}%
+ \krof }%
+ \def #3##1##2##3##4% \XINT_expr_until_][_b
+ {%
+ \ifnum ##2>#5%
+ \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
+ \csname XINT_#6_op_##3\endcsname {##4}}%
+ \else
+ \xint_afterfi
+ {\expandafter ##2\expandafter ##3\csname
+ .=\expandafter\xintListSel:x:csv % will be \xintListSel:f:csv in \xintNewExpr output
+ \romannumeral`&&@\XINT_expr_unlock ##4;% selector
+ \XINT_expr_unlock ##1;\endcsname % unlock already pre-positioned for \xintNewExpr
+ }%
+ \fi
+ }%
+ \let #5\xint_c_ii
+}%
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+\expandafter\XINT_tmpa
+ \csname XINT_#1_op_][\expandafter\endcsname
+ \csname XINT_#1_until_][_a\expandafter\endcsname
+ \csname XINT_#1_until_][_b\expandafter\endcsname
+ \csname XINT_#1_op_-vi\expandafter\endcsname
+ \csname XINT_expr_precedence_][\endcsname {#1}%
+}%
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1% \XINT_expr_op_:
+ {%
+ \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2% \XINT_expr_until_:_a
+ {\xint_UDsignfork
+ ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
+ -{#3##1##2}%
+ \krof }%
+ \def #3##1##2##3##4% \XINT_expr_until_:_b
+ {%
+ \ifnum ##2>#5%
+ \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
+ \csname XINT_#6_op_##3\endcsname {##4}}%
+ \else
+ \xint_afterfi
+ {\expandafter ##2\expandafter ##3\csname
+ .=:\XINT:NEhook:one\xintNum{\XINT_expr_unlock ##1};%
+ \XINT:NEhook:one\xintNum{\XINT_expr_unlock ##4}%
+ \endcsname
+ }%
+ \fi
+ }%
+ \let #5\xint_c_iii
+}%
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+\expandafter\XINT_tmpa
+ \csname XINT_#1_op_:\expandafter\endcsname
+ \csname XINT_#1_until_:_a\expandafter\endcsname
+ \csname XINT_#1_until_:_b\expandafter\endcsname
+ \csname XINT_#1_op_-vi\expandafter\endcsname
+ \csname XINT_expr_precedence_:\endcsname {#1}%
+}%
+\catcode`[ 11 \catcode`] 11
+\let\XINT_expr_precedence_:] \xint_c_iii
+\def\XINT_expr_op_:] #1%
+{%
+ \expandafter\xint_c_i\expandafter )%
+ \csname .=]\XINT:NEhook:one\xintNum{\XINT_expr_unlock #1}\endcsname
+}%
+\let\XINT_flexpr_op_:] \XINT_expr_op_:]
+\let\XINT_iiexpr_op_:] \XINT_expr_op_:]
+\let\XINT_expr_precedence_][: \xint_c_iii
+% \end{macrocode}
+% \lverb|At the end of the replacement text of \XINT_expr_op_][:, the : after
+% index 0 must be catcode 12, else will be mistaken for the start of variable
+% by expression parser (as <digits><variable> is allowed by the syntax and does
+% tacit multiplication).|
+% \begin{macrocode}
+\edef\XINT_expr_op_][: #1{\xint_c_ii\noexpand\XINT_expr_itself_][#10\string :}%
+\let\XINT_flexpr_op_][: \XINT_expr_op_][:
+\let\XINT_iiexpr_op_][: \XINT_expr_op_][:
+\catcode`[ 12 \catcode`] 12
+% \end{macrocode}
+% \subsubsection{\csh{xintListSel:x:csv}}
+% \lverb|1.2j. Because there is \xintKeep:x:csv which is faster than
+% \xintKeep:f:csv.|
+% \begin{macrocode}
+\def\xintListSel:x:csv #1%
+{%
+ \if ]\noexpand#1\xint_dothis\XINT_listsel:_s\fi
+ \if :\noexpand#1\xint_dothis\XINT_listxsel:_:\fi
+ \xint_orthat {\XINT_listsel:_nth #1}%
+}%
+\def\XINT_listsel:_s #1#2;#3;%
+{%
+ \if-#1\expandafter\xintKeep:f:csv\else\expandafter\xintTrim:f:csv\fi
+ {#1#2}{#3}%
+}%
+\def\XINT_listsel:_nth #1;#2;{\xintNthEltPy:f:csv {\xintNum{#1}}{#2}}%
+% \end{macrocode}
+% \lverb|\XINT_listsel:_nth and \XINT_listsel:_s located in \xintListSel:f:csv.|
+% \begin{macrocode}
+\def\XINT_listxsel:_: #1#2;#3#4;%
+{%
+ \xint_UDsignsfork
+ #1#3\XINT_listxsel:_N:N
+ #1-\XINT_listxsel:_N:P
+ -#3\XINT_listxsel:_P:N
+ --\XINT_listxsel:_P:P
+ \krof #1#2;#3#4;%
+}%
+\def\XINT_listxsel:_P:P #1;#2;#3;%
+{%
+ \unless\ifnum #1<#2 \expandafter\xint_gobble_iii\fi
+ \xintKeep:x:csv{#2-#1}{\xintTrim:f:csv{#1}{#3}}%
+}%
+\def\XINT_listxsel:_N:N #1;#2;#3;%
+{%
+ \expandafter\XINT_listxsel:_N:N_a
+ \the\numexpr #2-#1\expandafter;\the\numexpr#1+\xintLength:f:csv{#3};#3;%
+}%
+\def\XINT_listxsel:_N:N_a #1;#2;#3;%
+{%
+ \unless\ifnum #1>\xint_c_ \expandafter\xint_gobble_iii\fi
+ \xintKeep:x:csv{#1}{\xintTrim:f:csv{\ifnum#2<\xint_c_\xint_c_\else#2\fi}{#3}}%
+}%
+\def\XINT_listxsel:_N:P #1;#2;#3;{\expandafter\XINT_listxsel:_N:P_a
+ \the\numexpr #1+\xintLength:f:csv{#3};#2;#3;}%
+\def\XINT_listxsel:_N:P_a #1#2;%
+ {\if -#1\expandafter\XINT_listxsel:_O:P\fi\XINT_listxsel:_P:P #1#2;}%
+\def\XINT_listxsel:_O:P\XINT_listxsel:_P:P #1;{\XINT_listxsel:_P:P 0;}%
+\def\XINT_listxsel:_P:N #1;#2;#3;{\expandafter\XINT_listxsel:_P:N_a
+ \the\numexpr #2+\xintLength:f:csv{#3};#1;#3;}%
+\def\XINT_listxsel:_P:N_a #1#2;#3;%
+ {\if -#1\expandafter\XINT_listxsel:_P:O\fi\XINT_listxsel:_P:P #3;#1#2;}%
+\def\XINT_listxsel:_P:O\XINT_listxsel:_P:P #1;#2;{\XINT_listxsel:_P:P #1;0;}%
+% \end{macrocode}
+% \subsubsection{\csh{xintListSel:f:csv}}
+% \lverb|1.2g. Since 1.2j this is needed only for \xintNewExpr and user
+% defined functions. Some extras compared to \xintListSel:x:csv because things
+% may not yet have been expanded in the \xintNewExpr context.|
+% \begin{macrocode}
+\def\xintListSel:f:csv #1%
+{%
+ \if ]\noexpand#1\xint_dothis{\expandafter\XINT_listsel:_s\romannumeral`&&@}\fi
+ \if :\noexpand#1\xint_dothis{\XINT_listsel:_:}\fi
+ \xint_orthat {\XINT_listsel:_nth #1}%
+}%
+\def\XINT_listsel:_: #1;#2;%
+{%
+ \expandafter\XINT_listsel:_:a
+ \the\numexpr #1\expandafter;\the\numexpr #2\expandafter;\romannumeral`&&@%
+}%
+\def\XINT_listsel:_:a #1#2;#3#4;%
+{%
+ \xint_UDsignsfork
+ #1#3\XINT_listsel:_N:N
+ #1-\XINT_listsel:_N:P
+ -#3\XINT_listsel:_P:N
+ --\XINT_listsel:_P:P
+ \krof #1#2;#3#4;%
+}%
+\def\XINT_listsel:_P:P #1;#2;#3;%
+{%
+ \unless\ifnum #1<#2 \xint_afterfi{\expandafter\space\xint_gobble_iii}\fi
+ \xintKeep:f:csv{#2-#1}{\xintTrim:f:csv{#1}{#3}}%
+}%
+\def\XINT_listsel:_N:N #1;#2;#3;%
+{%
+ \unless\ifnum #1<#2 \expandafter\XINT_listsel:_N:N_abort\fi
+ \expandafter\XINT_listsel:_N:N_a
+ \the\numexpr#1+\xintLength:f:csv{#3}\expandafter;\the\numexpr#2-#1;#3;%
+}%
+\def\XINT_listsel:_N:N_abort #1;#2;#3;{ }%
+\def\XINT_listsel:_N:N_a #1;#2;#3;%
+{%
+ \xintKeep:f:csv{#2}{\xintTrim:f:csv{\ifnum#1<\xint_c_\xint_c_\else#1\fi}{#3}}%
+}%
+\def\XINT_listsel:_N:P #1;#2;#3;{\expandafter\XINT_listsel:_N:P_a
+ \the\numexpr #1+\xintLength:f:csv{#3};#2;#3;}%
+\def\XINT_listsel:_N:P_a #1#2;%
+ {\if -#1\expandafter\XINT_listsel:_O:P\fi\XINT_listsel:_P:P #1#2;}%
+\def\XINT_listsel:_O:P\XINT_listsel:_P:P #1;{\XINT_listsel:_P:P 0;}%
+\def\XINT_listsel:_P:N #1;#2;#3;{\expandafter\XINT_listsel:_P:N_a
+ \the\numexpr #2+\xintLength:f:csv{#3};#1;#3;}%
+\def\XINT_listsel:_P:N_a #1#2;#3;%
+ {\if -#1\expandafter\XINT_listsel:_P:O\fi\XINT_listsel:_P:P #3;#1#2;}%
+\def\XINT_listsel:_P:O\XINT_listsel:_P:P #1;#2;{\XINT_listsel:_P:P #1;0;}%
+% \end{macrocode}
+% \subsubsection{\csh{xintKeep:x:csv}}
+% \lverb|1.2j. This macro is used only with positive first argument.
+% |
+% \begin{macrocode}
+\def\xintKeep:x:csv #1#2%
+{%
+ \expandafter\xint_gobble_i
+ \romannumeral0\expandafter\XINT_keep:x:csv_pos
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+}%
+\def\XINT_keep:x:csv_pos #1.#2%
+{%
+ \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.%
+ #2\xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,%
+ \xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,\xint_bye
+}%
+\def\XINT_keep:x:csv_loop #1%
+{%
+ \xint_gob_til_minus#1\XINT_keep:x:csv_finish-%
+ \XINT_keep:x:csv_loop_pickeight #1%
+}%
+\def\XINT_keep:x:csv_loop_pickeight #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ ,#2,#3,#4,#5,#6,#7,#8,#9%
+ \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.%
+}%
+\def\XINT_keep:x:csv_finish-\XINT_keep:x:csv_loop_pickeight -#1.%
+{%
+ \csname XINT_keep:x:csv_finish#1\endcsname
+}%
+\expandafter\def\csname XINT_keep:x:csv_finish1\endcsname
+ #1,#2,#3,#4,#5,#6,#7,{,#1,#2,#3,#4,#5,#6,#7\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish2\endcsname
+ #1,#2,#3,#4,#5,#6,{,#1,#2,#3,#4,#5,#6\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish3\endcsname
+ #1,#2,#3,#4,#5,{,#1,#2,#3,#4,#5\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish4\endcsname
+ #1,#2,#3,#4,{,#1,#2,#3,#4\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish5\endcsname
+ #1,#2,#3,{,#1,#2,#3\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish6\endcsname
+ #1,#2,{,#1,#2\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish7\endcsname
+ #1,{,#1\xint_Bye}%
+\expandafter\let\csname XINT_keep:x:csv_finish8\endcsname\xint_Bye
+% \end{macrocode}
+% \subsubsection{\cshnolabel{xintKeep:f:csv}}
+% \changed{1.2g}{} moved to \xinttoolsnameimp.
+% \subsubsection{\cshnolabel{xintTrim:f:csv}}
+% \changed{1.2g}{} moved to \xinttoolsnameimp.
+% \subsubsection{\cshnolabel{xintNthEltPy:f:csv}}
+% \changed{1.2g}{} moved to \xinttoolsnameimp.
+% \subsubsection{\cshnolabel{xintLength:f:csv}}
+% \changed{1.2g}{} moved to \xinttoolsnameimp.
+% \subsubsection{\cshnolabel{xintReverse:f:csv}}
+% \changed{1.2g}{} moved to \xinttoolsnameimp.
+%
+% \subsection{Macros for a..b list generation}
+% \localtableofcontents
+%
+% \lverb|Ne produit que des listes d'entiers inférieurs à la borne
+% de TeX ! mais sous la forme N/1[0] en ce qui concerne \xintSeq::csv.|
+%
+%\subsubsection{\csh{xintSeq::csv}}
+%\lverb|Commence par remplacer a par ceil(a) et b par floor(b) et renvoie
+% ensuite les entiers entre les deux, possiblement en décroissant, et
+% extrémités comprises. Si a=b est non entier en obtient donc ceil(a) et
+% floor(a). Ne renvoie jamais une liste vide.
+%
+% Note: le a..b dans \xintfloatexpr utilise cette routine.|
+% \begin{macrocode}
+\def\xintSeq::csv {\romannumeral0\xintseq::csv }%
+\def\xintseq::csv #1#2%
+{%
+ \expandafter\XINT_seq::csv\expandafter
+ {\the\numexpr \xintiCeil{#1}\expandafter}\expandafter
+ {\the\numexpr \xintiFloor{#2}}%
+}%
+\def\XINT_seq::csv #1#2%
+{%
+ \ifcase\ifnum #1=#2 0\else\ifnum #2>#1 1\else -1\fi\fi\space
+ \expandafter\XINT_seq::csv_z
+ \or
+ \expandafter\XINT_seq::csv_p
+ \else
+ \expandafter\XINT_seq::csv_n
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT_seq::csv_z #1#2{ #1/1[0]}%
+\def\XINT_seq::csv_p #1#2%
+{%
+ \ifnum #1>#2
+ \expandafter\expandafter\expandafter\XINT_seq::csv_p
+ \else
+ \expandafter\XINT_seq::csv_e
+ \fi
+ \expandafter{\the\numexpr #1-\xint_c_i}{#2},#1/1[0]%
+}%
+\def\XINT_seq::csv_n #1#2%
+{%
+ \ifnum #1<#2
+ \expandafter\expandafter\expandafter\XINT_seq::csv_n
+ \else
+ \expandafter\XINT_seq::csv_e
+ \fi
+ \expandafter{\the\numexpr #1+\xint_c_i}{#2},#1/1[0]%
+}%
+\def\XINT_seq::csv_e #1,{ }%
+% \end{macrocode}
+%\subsubsection{\csh{xintiiSeq::csv}}
+% \begin{macrocode}
+\def\xintiiSeq::csv {\romannumeral0\xintiiseq::csv }%
+\def\xintiiseq::csv #1#2%
+{%
+ \expandafter\XINT_iiseq::csv\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+}%
+\def\XINT_iiseq::csv #1#2%
+{%
+ \ifcase\ifnum #1=#2 0\else\ifnum #2>#1 1\else -1\fi\fi\space
+ \expandafter\XINT_iiseq::csv_z
+ \or
+ \expandafter\XINT_iiseq::csv_p
+ \else
+ \expandafter\XINT_iiseq::csv_n
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT_iiseq::csv_z #1#2{ #1}%
+\def\XINT_iiseq::csv_p #1#2%
+{%
+ \ifnum #1>#2
+ \expandafter\expandafter\expandafter\XINT_iiseq::csv_p
+ \else
+ \expandafter\XINT_seq::csv_e
+ \fi
+ \expandafter{\the\numexpr #1-\xint_c_i}{#2},#1%
+}%
+\def\XINT_iiseq::csv_n #1#2%
+{%
+ \ifnum #1<#2
+ \expandafter\expandafter\expandafter\XINT_iiseq::csv_n
+ \else
+ \expandafter\XINT_seq::csv_e
+ \fi
+ \expandafter{\the\numexpr #1+\xint_c_i}{#2},#1%
+}%
+\def\XINT_seq::csv_e #1,{ }%
+% \end{macrocode}
+%\subsection{Macros for a..[d]..b list generation}
+% \localtableofcontents
+%
+% \lverb|Contrarily to a..b which is limited to small integers, this works
+% with a, b, and d (big) fractions. It will produce a «nil» list, if a>b and
+% d<0 or a<b and d>0.|
+%
+%\subsubsection{\csh{xintSeqA::csv}, \csh{xintiiSeqA::csv}, \csh{XINTinFloatSeqA::csv}}
+%
+% \begin{macrocode}
+\def\xintSeqA::csv #1%
+ {\expandafter\XINT_seqa::csv\expandafter{\romannumeral0\xintraw {#1}}}%
+\def\XINT_seqa::csv #1#2{\expandafter\XINT_seqa::csv_a \romannumeral0\xintraw {#2};#1;}%
+\def\xintiiSeqA::csv #1{\expandafter\XINT_iiseqa::csv\expandafter{\romannumeral`&&@#1}}%
+\def\XINT_iiseqa::csv #1#2{\expandafter\XINT_seqa::csv_a\romannumeral`&&@#2;#1;}%
+\def\XINTinFloatSeqA::csv #1{\expandafter\XINT_flseqa::csv\expandafter
+ {\romannumeral0\XINTinfloat [\XINTdigits]{#1}}}%
+\def\XINT_flseqa::csv #1#2%
+ {\expandafter\XINT_seqa::csv_a\romannumeral0\XINTinfloat [\XINTdigits]{#2};#1;}%
+\def\XINT_seqa::csv_a #1{\xint_UDzerominusfork
+ #1-{z}%
+ 0#1{n}%
+ 0-{p}%
+ \krof #1}%
+% \end{macrocode}
+%\subsubsection{\csh{xintSeqB::csv}}
+% \lverb|With one year late documentation, let's just say, the #1 is
+% \XINT_expr_unlock\.=Ua;b; with U=z or n or p, a=step, b=start.|
+% \begin{macrocode}
+\def\xintSeqB::csv #1#2%
+ {\expandafter\XINT_seqb::csv \expandafter{\romannumeral0\xintraw{#2}}{#1}}%
+\def\XINT_seqb::csv #1#2{\expandafter\XINT_seqb::csv_a\romannumeral`&&@#2#1!}%
+\def\XINT_seqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty?
+ \romannumeral0\csname XINT_seqb::csv_#1\endcsname {#3}{#4}{#2}}%
+\def\XINT_seqb::csv_p #1#2#3%
+{%
+ \xintifCmp {#1}{#2}{,#1\expandafter\XINT_seqb::csv_p\expandafter}%
+ {,#1\xint_gobble_iii}{\xint_gobble_iii}%
+% \end{macrocode}
+% \lverb|\romannumeral0 stopped by \endcsname, XINT_expr_seq_empty? constructs
+% "nil".|
+% \begin{macrocode}
+ {\romannumeral0\xintadd {#3}{#1}}{#2}{#3}%
+}%
+\def\XINT_seqb::csv_n #1#2#3%
+{%
+ \xintifCmp {#1}{#2}{\xint_gobble_iii}{,#1\xint_gobble_iii}%
+ {,#1\expandafter\XINT_seqb::csv_n\expandafter}%
+ {\romannumeral0\xintadd {#3}{#1}}{#2}{#3}%
+}%
+\def\XINT_seqb::csv_z #1#2#3{,#1}%
+% \end{macrocode}
+%\subsubsection{\csh{xintiiSeqB::csv}}
+% \begin{macrocode}
+\def\xintiiSeqB::csv #1#2{\XINT_iiseqb::csv #1#2}%
+\def\XINT_iiseqb::csv #1#2#3#4%
+ {\expandafter\XINT_iiseqb::csv_a
+ \romannumeral`&&@\expandafter \XINT_expr_unlock\expandafter#2%
+ \romannumeral`&&@\XINT_expr_unlock #4!}%
+\def\XINT_iiseqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty?
+ \romannumeral`&&@\csname XINT_iiseqb::csv_#1\endcsname {#3}{#4}{#2}}%
+\def\XINT_iiseqb::csv_p #1#2#3%
+{%
+ \xintSgnFork{\XINT_Cmp {#1}{#2}}{,#1\expandafter\XINT_iiseqb::csv_p\expandafter}%
+ {,#1\xint_gobble_iii}{\xint_gobble_iii}%
+ {\romannumeral0\xintiiadd {#3}{#1}}{#2}{#3}%
+}%
+\def\XINT_iiseqb::csv_n #1#2#3%
+{%
+ \xintSgnFork{\XINT_Cmp {#1}{#2}}{\xint_gobble_iii}{,#1\xint_gobble_iii}%
+ {,#1\expandafter\XINT_iiseqb::csv_n\expandafter}%
+ {\romannumeral0\xintiiadd {#3}{#1}}{#2}{#3}%
+}%
+\def\XINT_iiseqb::csv_z #1#2#3{,#1}%
+% \end{macrocode}
+%\subsubsection{\csh{XINTinFloatSeqB::csv}}
+% \begin{macrocode}
+\def\XINTinFloatSeqB::csv #1#2{\expandafter\XINT_flseqb::csv \expandafter
+ {\romannumeral0\XINTinfloat [\XINTdigits]{#2}}{#1}}%
+\def\XINT_flseqb::csv #1#2{\expandafter\XINT_flseqb::csv_a\romannumeral`&&@#2#1!}%
+\def\XINT_flseqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty?
+ \romannumeral`&&@\csname XINT_flseqb::csv_#1\endcsname {#3}{#4}{#2}}%
+\def\XINT_flseqb::csv_p #1#2#3%
+{%
+ \xintifCmp {#1}{#2}{,#1\expandafter\XINT_flseqb::csv_p\expandafter}%
+ {,#1\xint_gobble_iii}{\xint_gobble_iii}%
+ {\romannumeral0\XINTinfloatadd {#3}{#1}}{#2}{#3}%
+}%
+\def\XINT_flseqb::csv_n #1#2#3%
+{%
+ \xintifCmp {#1}{#2}{\xint_gobble_iii}{,#1\xint_gobble_iii}%
+ {,#1\expandafter\XINT_flseqb::csv_n\expandafter}%
+ {\romannumeral0\XINTinfloatadd {#3}{#1}}{#2}{#3}%
+}%
+\def\XINT_flseqb::csv_z #1#2#3{,#1}%
+% \end{macrocode}
+% \subsection{The comma as binary operator}
+% \lverb|New with 1.09a. Suffices to set its precedence level to two.|
+% \begin{macrocode}
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1% \XINT_expr_op_,
+ {%
+ \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2% \XINT_expr_until_,_a
+ {\xint_UDsignfork
+ ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
+ -{#3##1##2}%
+ \krof }%
+ \def #3##1##2##3##4% \XINT_expr_until_,_b
+ {%
+ \ifnum ##2>\xint_c_ii
+ \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
+ \csname XINT_#6_op_##3\endcsname {##4}}%
+ \else
+ \xint_afterfi
+ {\expandafter ##2\expandafter ##3%
+ \csname .=\XINT_expr_unlock ##1,\XINT_expr_unlock ##4\endcsname }%
+ \fi
+ }%
+ \let #5\xint_c_ii
+}%
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+\expandafter\XINT_tmpa
+ \csname XINT_#1_op_,\expandafter\endcsname
+ \csname XINT_#1_until_,_a\expandafter\endcsname
+ \csname XINT_#1_until_,_b\expandafter\endcsname
+ \csname XINT_#1_op_-vi\expandafter\endcsname
+ \csname XINT_expr_precedence_,\endcsname {#1}%
+}%
+% \end{macrocode}
+% \subsection{The minus as prefix operator of variable precedence level}
+% \lverb|Inherits the precedence level of the previous infix operator.|
+% \begin{macrocode}
+\def\XINT_tmpa #1#2#3%
+{%
+ \expandafter\XINT_tmpb
+ \csname XINT_#1_op_-#3\expandafter\endcsname
+ \csname XINT_#1_until_-#3_a\expandafter\endcsname
+ \csname XINT_#1_until_-#3_b\expandafter\endcsname
+ \csname xint_c_#3\endcsname {#1}#2%
+}%
+\def\XINT_tmpb #1#2#3#4#5#6%
+{%
+ \def #1% \XINT_expr_op_-<level>
+ {% get next number+operator then switch to _until macro
+ \expandafter #2\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1% \XINT_expr_until_-<l>_a
+ {\xint_UDsignfork
+ ##1{\expandafter #2\romannumeral`&&@#1}%
+ -{#3##1}%
+ \krof }%
+ \def #3##1##2##3% \XINT_expr_until_-<l>_b
+ {% _until tests precedence level with next op, executes now or postpones
+ \ifnum ##1>#4%
+ \xint_afterfi {\expandafter #2\romannumeral`&&@%
+ \csname XINT_#5_op_##2\endcsname {##3}}%
+ \else
+ \xint_afterfi {\expandafter ##1\expandafter ##2%
+ \csname .=%
+ \XINT:NEhook:one#6{\XINT_expr_unlock ##3}\endcsname }%
+ \fi
+ }%
+}%
+% \end{macrocode}
+% \lverb|1.2d needs precedence 8 for *** and 9 for ^. Earlier, precedence
+% level for ^ was only 8 but nevertheless the code did also "ix" here, which I
+% think was unneeded back then.|
+% \begin{macrocode}
+\xintApplyInline{\XINT_tmpa {expr}\xintOpp}{{vi}{vii}{viii}{ix}}%
+\xintApplyInline{\XINT_tmpa {flexpr}\xintOpp}{{vi}{vii}{viii}{ix}}%
+\xintApplyInline{\XINT_tmpa {iiexpr}\xintiiOpp}{{vi}{vii}{viii}{ix}}%
+% \end{macrocode}
+% \subsection{? as two-way and ?? as three-way conditionals with braced branches}
+% \lverb|In 1.1, I overload ? with ??, as : will be used for list extraction,
+% problem with (stuff)?{?(1)}{0} for example, one should put a space (stuff)?{
+% ?(1)}{0} will work. Small idiosyncrasy. (which has been removed in 1.2h,
+% there is no problem anymore with (test)?{?(1)}{0}, however (test)?{?}{!}(x)
+% is not accepted; but (test)?{?(x)}{!(x)} is or even with {?(}{!(}x).)
+%
+% syntax: ?{yes}{no} and ??{<0}{=0}{>0}.
+%
+% The difficulty is to recognize the second ? without removing braces as would
+% be the case with standard parsing of operators. Hence the ? operator is
+% intercepted in \XINT_expr_getop_b.
+%
+% 1.2h corrects a bug in \XINT_expr_op_? which in context like
+% (test)?{\foo}{bar} would provoke expansion of \foo, or also with
+% (test)?{}{bar} would result in an error. The fix also solves the
+% (test)?{?(1)}{0} issue mentioned above.
+% |
+% \begin{macrocode}
+\let\XINT_expr_precedence_? \xint_c_x
+\def\XINT_expr_op_? #1#2%
+ {\XINT_expr_op_?checka #2!\xint_bye\XINT_expr_op_?a #1{#2}}%
+\def\XINT_expr_op_?checka #1{\expandafter\XINT_expr_op_?checkb\detokenize{#1}}%
+\def\XINT_expr_op_?checkb #1{\if ?#1\expandafter\XINT_expr_op_?checkc
+ \else\expandafter\xint_bye\fi }%
+\def\XINT_expr_op_?checkc #1{\xint_gob_til_! #1\XINT_expr_op_?? !\xint_bye}%
+\def\XINT_expr_op_?a #1#2#3%
+{%
+ \xintiiifNotZero{\XINT_expr_unlock #1}{\XINT_expr_getnext #2}{\XINT_expr_getnext #3}%
+}%
+\let\XINT_flexpr_op_?\XINT_expr_op_?
+\let\XINT_iiexpr_op_?\XINT_expr_op_?
+\def\XINT_expr_op_?? !\xint_bye\xint_bye\XINT_expr_op_?a #1#2#3#4#5%
+{%
+ \xintiiifSgn {\XINT_expr_unlock #1}%
+ {\XINT_expr_getnext #3}{\XINT_expr_getnext #4}{\XINT_expr_getnext #5}%
+}%
+% \end{macrocode}
+% \subsection{! as postfix factorial operator}
+% \lverb|&
+% |
+% \begin{macrocode}
+\let\XINT_expr_precedence_! \xint_c_x
+\def\XINT_expr_op_! #1{\expandafter\XINT_expr_getop
+ \csname .=\XINT:NEhook:one\xintFac{\XINT_expr_unlock #1}\endcsname }%
+\def\XINT_flexpr_op_! #1{\expandafter\XINT_expr_getop
+ \csname .=\XINT:NEhook:one\XINTinFloatFac{\XINT_expr_unlock #1}\endcsname }%
+\def\XINT_iiexpr_op_! #1{\expandafter\XINT_expr_getop
+ \csname .=\XINT:NEhook:one\xintiiFac{\XINT_expr_unlock #1}\endcsname }%
+% \end{macrocode}
+% \subsection{The A/B[N] mechanism}
+% \lverb|Releases earlier than 1.1 required the use of braces around A/B[N]
+% input. The [N] is now implemented directly. *BUT* this uses a delimited macro!
+% thus N is not allowed to be itself an expression (I could add it...).
+% \xintE, \xintiiE, and \XINTinFloatE all put #2 in a \numexpr. But attention
+% to the fact that \numexpr stops at spaces separating digits:
+% \the\numexpr 3 + 7 9\relax gives 109\relax !! Hence we have to be
+% careful.
+%
+% \numexpr will not handle catcode 11 digits, but adding a \detokenize will
+% suddenly make illicit for N to rely on macro expansion.|
+%
+% \begin{macrocode}
+\catcode`[ 11
+\let\XINT_expr_precedence_[ \xint_c_vii
+\def\XINT_expr_op_[ #1#2]{\expandafter\XINT_expr_getop
+ \csname .=\xintE{\XINT_expr_unlock #1}%
+ {\xint_zapspaces #2 \xint_gobble_i}\endcsname}%
+\def\XINT_iiexpr_op_[ #1#2]{\expandafter\XINT_expr_getop
+ \csname .=\xintiiE{\XINT_expr_unlock #1}%
+ {\xint_zapspaces #2 \xint_gobble_i}\endcsname}%
+\def\XINT_flexpr_op_[ #1#2]{\expandafter\XINT_expr_getop
+ \csname .=\XINTinFloatE{\XINT_expr_unlock #1}%
+ {\xint_zapspaces #2 \xint_gobble_i}\endcsname}%
+\catcode`[ 12
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_op_`} for recognizing functions}
+% \lverb|The "onliteral" intercepts is for bool, togl, protect, ... but also
+% for add, mul, seq, etc... Genuine functions have expr, iiexpr and
+% flexpr versions (or only one or two of the three).
+%
+% With 1.2c "onliteral" is also used to disambiguate variables from
+% functions. However as I use only a \ifcsname test, in order to be able to
+% re-define a variable as function, I move the check for being a function
+% first. Each variable name now has its onliteral_<name> associated macro
+% which is the new way tacit multiplication in front of a parenthesis is
+% implemented. This used to be decided much earlier at the time of
+% \XINT_expr_func.
+%
+% The advantage of our choices for 1.2c is that the same name can be used for
+% a variable or a function, the parser will apply the correct interpretation
+% which is decided by the presence or not of an opening parenthesis next.|
+% \begin{macrocode}
+\def\XINT_tmpa #1#2#3{%
+ \def #1##1%
+ {%
+ \ifcsname XINT_#3_func_##1\endcsname
+ \xint_dothis{\expandafter\expandafter
+ \csname XINT_#3_func_##1\endcsname\romannumeral`&&@#2}\fi
+ \ifcsname XINT_expr_onliteral_##1\endcsname
+ \xint_dothis{\csname XINT_expr_onliteral_##1\endcsname}\fi
+ \xint_orthat{\XINT_expr_unknown_function {##1}%
+ \expandafter\XINT_expr_func_unknown\romannumeral`&&@#2}%
+ }%
+}%
+\def\XINT_expr_unknown_function #1{\xintError:removed \xint_gobble_i {#1}}%
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\XINT_tmpa
+ \csname XINT_#1_op_`\expandafter\endcsname
+ \csname XINT_#1_oparen\endcsname
+ {#1}%
+}%
+\def\XINT_expr_func_unknown #1#2#3%
+ {\expandafter #1\expandafter #2\csname .=0\endcsname }%
+% \end{macrocode}
+% \subsection{The \csh{bool()}, \csh{togl()}, \csh{protect()} pseudo ``functions''}
+% \lverb|bool, togl and protect use delimited macros. They are not true
+% functions, they turn off the parser to gather their "variable".|
+% \begin{macrocode}
+\def\XINT_expr_onliteral_bool #1)%
+ {\expandafter\XINT_expr_getop\csname .=\xintBool{#1}\endcsname }%
+\def\XINT_expr_onliteral_togl #1)%
+ {\expandafter\XINT_expr_getop\csname .=\xintToggle{#1}\endcsname }%
+\def\XINT_expr_onliteral_protect #1)%
+ {\expandafter\XINT_expr_getop\csname .=\detokenize{#1}\endcsname }%
+% \end{macrocode}
+% \subsection{The \csh{break()} function}
+% \lverb|break is a true function, the parsing via expansion of the succeeding
+% material proceeded via _oparen macros as with any other function.|
+% \begin{macrocode}
+\def\XINT_expr_func_break #1#2#3%
+ {\expandafter #1\expandafter #2\csname.=?\romannumeral`&&@\XINT_expr_unlock #3\endcsname }%
+\let\XINT_flexpr_func_break \XINT_expr_func_break
+\let\XINT_iiexpr_func_break \XINT_expr_func_break
+% \end{macrocode}
+% \subsection{The \csh{qraw()}, \csh{qint()}, \csh{qfrac()}, and
+% \csh{qfloat()} ``functions''}
+%
+% \changed{1.2}{} adds |qint()|, |qfrac()|, |qfloat()|.
+%
+% \changed{1.3c}{} adds |qraw()|. Useful to limit impact on \TeX{} memory
+% from abuse of |\csname|'s storage when generating many comma separated
+% values from a loop.
+%
+% \changed{1.3e}{} |qfloat()| keeps a short mantissa if possible.
+%
+% \lverb|They allow the user to hand over quickly a big number to the parser,
+% spaces not immediately removed but should be harmless in general. The qraw()
+% does no post-processing at all apart complete expansion, useful for
+% comma-separated values, but must be obedient to (non really documented)
+% expected format. Each uses a delimited macro, the closing parenthesis can
+% not emerge from expansion.|
+% \begin{macrocode}
+\def\XINT_expr_onliteral_qint #1)%
+ {\expandafter\XINT_expr_getop\csname .=\xintiNum{#1}\endcsname }%
+\def\XINT_expr_onliteral_qfrac #1)%
+ {\expandafter\XINT_expr_getop\csname .=\xintRaw{#1}\endcsname }%
+\def\XINT_expr_onliteral_qfloat #1)%
+ {\expandafter\XINT_expr_getop\csname .=\XINTinFloatSdigits{#1}\endcsname }%
+\def\XINT_expr_onliteral_qraw #1)%
+ {\expandafter\XINT_expr_getop\csname .=#1\endcsname }%
+% \end{macrocode}
+% \subsection{The \csh{random()} and \csh{qrand()} ``functions''}
+% \lverb|1.3b. Function-like syntax but with no argument currently, so let's
+% use fast parsing which requires though the closing parenthesis to be
+% explicit.|
+% \begin{macrocode}
+\def\XINT_expr_onliteral_random #1)%
+ {\expandafter\XINT_expr_getop\csname .=\XINTinRandomFloatSdigits\endcsname }%
+\def\XINT_expr_onliteral_qrand #1)%
+ {\expandafter\XINT_expr_getop\csname .=\XINTinRandomFloatSixteen\endcsname }%
+% \end{macrocode}
+% \subsection{\csh{XINT_expr_op__} for recognizing variables}
+% \lverb|The 1.1 mechanism for \XINT_expr_var_<varname> has been
+% modified in 1.2c. The <varname> associated macro is now only expanded
+% once, not twice. We arrive here via \XINT_expr_func.|
+% \begin{macrocode}
+\def\XINT_expr_op__ #1% op__ with two _'s
+ {%
+ \ifcsname XINT_expr_var_#1\endcsname
+ \expandafter\xint_firstoftwo
+ \else
+ \expandafter\xint_secondoftwo
+ \fi
+ {\expandafter\expandafter\expandafter
+ \XINT_expr_getop\csname XINT_expr_var_#1\endcsname}%
+ {\XINT_expr_unknown_variable {#1}%
+ \expandafter\XINT_expr_getop\csname .=0\endcsname}%
+ }%
+\def\XINT_expr_unknown_variable #1{\xintError:removed \xint_gobble_i {#1}}%
+\let\XINT_flexpr_op__ \XINT_expr_op__
+\let\XINT_iiexpr_op__ \XINT_expr_op__
+% \end{macrocode}
+% \subsection{User defined variables: \csh{xintdefvar}, \csh{xintdefiivar},
+% \csh{xintdeffloatvar}}
+% \changed{1.1}{}
+%
+% \changed{1.2p}{2017/12/01} extends |\xintdefvar| et al.\@ to accept
+% simultaneous assignments to multiple variables.
+%
+% \changed{1.3c}{2018/06/17}
+% Use \csbxint{exprSafeCatcodes} (to palliate issue with
+% active semi-colon from Babel+French if in body of a \LaTeX{} document).
+%
+% And allow usage with both syntaxes |name:=expr;| or |name=expr;|. Also the
+% colon may have catcode 11, 12, or 13 with no issue.
+% Variable names may contain letters, digits, underscores, and must not start
+% with a digit. Names starting with |@| or an underscore are reserved.
+%
+% \begin{itemize}[nosep]
+% \item currently |@|, |@1|, |@2|, |@3|, and |@4| are reserved because they
+% have special meanings for use in iterations,
+% \item |@@|, |@@@|, |@@@@| are also reserved but
+% are technically functions, not variables: a user may possibly define |@@| as
+% a variable name, but if it is followed by parentheses, the function
+% interpretation will be applied (rather than the variable interpretation
+% followed by a tacit multiplication),
+% \item since |1.2l|, the underscore |_| may be used as separator of digits in
+% long numbers.
+% Hence a variable whose name starts with |_| will not play well with the
+% mechanism of tacit multiplication of variables by numbers: the underscore
+% will be removed from input stream by the number scanner, thus creating
+% an undefined or wrong variable name, or none at all if the variable
+% name was an initial |_| followed by digits.
+% \end{itemize}
+% \lverb|
+% |
+% \begin{macrocode}
+\catcode`* 11
+\def\XINT_expr_defvar_one #1#2%
+{%
+ \XINT_global
+ \expandafter\edef\csname XINT_expr_var_#1\endcsname
+ {\expandafter\noexpand#2}%
+ \XINT_global
+ \expandafter\edef\csname XINT_expr_onliteral_#1\endcsname
+ {\XINT_expr_precedence_*** *\expandafter\noexpand#2(}%
+ \ifxintverbose\xintMessage{xintexpr}{Info}
+ {Variable "#1" \ifxintglobaldefs globally \fi
+ defined with value \expandafter\XINT_expr_unlock#2.}%
+ \fi
+}%
+\catcode`* 12
+\catcode`~ 13
+\catcode`: 12
+\def\XINT_expr_defvar_getname #1:#2~{\endgroup
+ \def\XINT_defvar_tmpa{#1}\edef\XINT_defvar_tmpc{\xintCSVLength{#1}}}%
+\def\XINT_expr_defvar #1#2#3;%
+{%
+ \xintexprRestoreCatcodes
+% \end{macrocode}
+% \lverb|Maybe SafeCatcodes was without effect because the colon and the rest
+% are from some earlier macro definition. Give a safe definition to active
+% colon (even if in math mode with a math active colon..).|
+% \begin{macrocode}
+ \begingroup\lccode`~`: \lowercase{\let~}\empty
+ \edef\XINT_defvar_tmpa{#2}%
+ \edef\XINT_defvar_tmpa{\xint_zapspaces_o\XINT_defvar_tmpa}%
+ \expandafter\XINT_expr_defvar_getname
+ \detokenize\expandafter{\XINT_defvar_tmpa}:~%
+ \ifcase\XINT_defvar_tmpc\space
+ \xintMessage {xintexpr}{Warning}
+ {Aborting: not allowed to declare variable with empty name.}%
+ \or
+ \edef\XINT_defvar_tmpb{\romannumeral0#1#3\relax}%
+ \XINT_expr_defvar_one\XINT_defvar_tmpa\XINT_defvar_tmpb
+ \else
+ \edef\XINT_defvar_tmpb
+ {\expandafter\XINT_expr_unlock\romannumeral0#1#3\relax}%
+ \edef\XINT_defvar_tmpd{\xintCSVLength{\XINT_defvar_tmpb}}%
+ \ifnum\XINT_defvar_tmpc=\XINT_defvar_tmpd\space
+ \xintAssignArray\xintCSVtoList\XINT_defvar_tmpa\to\XINT_defvar_tmpvar
+ \xintAssignArray
+ \xintApply\XINT_expr_lockit{\xintCSVtoList\XINT_defvar_tmpb}%
+ \to\XINT_defvar_tmpval
+ \def\XINT_defvar_tmpd{1}%
+ \xintloop
+ \expandafter\XINT_expr_defvar_one
+ \csname XINT_defvar_tmpvar\XINT_defvar_tmpd\expandafter\endcsname
+ \csname XINT_defvar_tmpval\XINT_defvar_tmpd\endcsname
+ \ifnum\XINT_defvar_tmpd<\XINT_defvar_tmpc\space
+ \edef\XINT_defvar_tmpd{\the\numexpr\XINT_defvar_tmpd+1}%
+ \repeat
+ \xintRelaxArray\XINT_defvar_tmpvar
+ \xintRelaxArray\XINT_defvar_tmpval
+ \else
+ \xintMessage {xintexpr}{Warning}
+ {Aborting: mismatch between number of variables (\XINT_defvar_tmpc)
+ and number of values (\XINT_defvar_tmpd).}%
+ \fi
+ \fi
+}%
+\catcode`~ 3
+\catcode`: 11
+% \end{macrocode}
+% \lverb|This SafeCatcodes is mainly in the hope that semi-colon ending the
+% expression can still be sanitized.|
+% \begin{macrocode}
+\def\xintdefvar {\xintexprSafeCatcodes\xintdefvar_a}%
+\def\xintdefiivar {\xintexprSafeCatcodes\xintdefiivar_a}%
+\def\xintdeffloatvar {\xintexprSafeCatcodes\xintdeffloatvar_a}%
+\def\xintdefvar_a #1={\XINT_expr_defvar\xintbareeval {#1}}%
+\def\xintdefiivar_a #1={\XINT_expr_defvar\xintbareiieval {#1}}%
+\def\xintdeffloatvar_a #1={\XINT_expr_defvar\xintbarefloateval {#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintunassignvar}}
+% \changed{1.2e}{}
+%
+% \changed{1.3d}{}
+% Embarrassingly I had for a long time a misunderstanding of |\ifcsname|
+% (let's blame its documentation) and I was not aware that it chooses FALSE
+% branch if tested control sequence has been |\let| to |\undefined|... So
+% earlier version didn't do the right thing (and had another bug: failure to
+% protect |\.=0| from expansion).
+%
+% The |\ifcsname| tests are done in \csbXINT{_expr_op__} and
+% \csbXINT{_expr_op_`}.
+% \begin{macrocode}
+\def\xintunassignvar #1{%
+ \edef\XINT_unvar_tmpa{#1}%
+ \edef\XINT_unvar_tmpa {\xint_zapspaces_o\XINT_unvar_tmpa}%
+ \ifcsname XINT_expr_var_\XINT_unvar_tmpa\endcsname
+ \ifnum\expandafter\xintLength\expandafter{\XINT_unvar_tmpa}=\@ne
+ \expandafter\xintnewdummy\XINT_unvar_tmpa
+ \else
+ \XINT_global\expandafter
+ \let\csname XINT_expr_var_\XINT_unvar_tmpa\endcsname\xint_undefined
+ \XINT_global\expandafter
+ \let\csname XINT_expr_onliteral_\XINT_unvar_tmpa\endcsname\xint_undefined
+ \ifxintverbose\xintMessage {xintexpr}{Info}
+ {Variable \XINT_unvar_tmpa\space has been
+ \ifxintglobaldefs globally \fi ``unassigned''.}%
+ \fi
+ \fi
+ \else
+ \xintMessage {xintexpr}{Warning}
+ {Error: there was no such variable \XINT_unvar_tmpa\space to unassign.}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{seq and the implementation of dummy variables}
+% \localtableofcontents
+% \lverb|All of seq, add, mul, rseq, etc... (actually all of the extensive
+% changes from xintexpr 1.09n to 1.1) was done around June 15-25th 2014, but the
+% problem is that I did not document the code enough, and I had a hard time
+% understanding in October what I had done in June. Despite the lesson, again
+% being short on time, I do not document enough my current understanding of the
+% innards of the beast...
+%
+% I added subs, and iter in October (also the [:n], [n:] list extractors),
+% proving I did at least understand a bit (or rather could imitate) my earlier
+% code (but don't ask me to explain \xintNewExpr !)
+%
+% The \XINT_expr_onliteral_seq_a parses: "expression, variable=list)"
+% (when it is called the opening ( has been swallowed, and it looks for
+% the ending one.) Both expression and list may themselves contain
+% parentheses and commas, we allow nesting. For example "x^2,x=1..10)",
+% at the end of seq_a we have {variable{expression}}{list}, in this
+% example {x{x^2}}{1..10}, or more complicated
+% "seq(add(y,y=1..x),x=1..10)" will work too. The variable is a single
+% lowercase Latin letter.
+%
+% The complications with \xint_c_xviii in seq_f is for the recurrent
+% thing that we don't know in what type of expressions we are, hence we
+% must move back up, with some loss of efficiency (superfluous check for
+% minus sign, etc...). But the code manages simultaneously expr, flexpr
+% and iiexpr.|
+%
+% \subsubsection{All letters usable as dummy variables, \csh{xintnewdummy}}
+% \lverb|The nil variable was introduced in 1.1 but isn't used under that
+% name. However macros handling a..[d]..b, or for seq with dummy variable
+% where omit has omitted everyting may in practice inject a nil value as
+% current number.
+%
+% 1.2c has changed the way variables are disambiguated from functions and for
+% this it has added here the definitions of \XINT_expr_onliteral_<name>.
+%
+% In 1.1 a letter variable say X was acting as a delimited macro looking for
+% !X{stuff} and then would expand the stuff inside a \csname.=...\endcsname. I
+% don't think I used the possibilities this opened and the 1.2c version has
+% stuff _already_ encapsulated thus a single token. Only one expansion, not
+% two is then needed in \XINT_expr_op__.
+%
+% I had to accordingly modify seq, add, mul and subs, but fortunately realized
+% that the @, @1, etc... variables for rseq, rrseq and iter already had been
+% defined in the way now also followed by the Latin letters as dummy
+% variables.
+%
+% The 1.2e \XINT_expr_makedummy was adjoined \xintnewdummy by
+% 1.2k for a public interface. It should not be used with multi-letter
+% argument. The add, mul, seq, etc... can only work with one-letter long dummy
+% variable. And this will almost certainly not change.
+%
+% Also 1.2e does the tacit multiplication x(stuff)->x*(stuff) in its higher
+% precedence form. Things are easy now that variables always fetch a single
+% already locked value \.=<number>.
+%
+% The tacit multiplication in case of the ``nil'' variable doesn't make much
+% sense but we do it anyhow.
+%
+% 1.3e stores earlier meaning for usage by xinttrig and xintlog with
+% \xintensuredummy and \xintrestoredummy as high-level interface.
+%
+% Do an \xintrestorevar, and patch \xintdefvar to always store previous
+% meaning?
+% |
+%
+% \begin{macrocode}
+\catcode`* 11
+\def\XINT_expr_makedummy #1%
+{%
+ \ifcsname XINT_expr_var_#1\endcsname
+ \XINT_global
+ \expandafter\let\csname XINT_expr_var_#1/old\expandafter\endcsname
+ \csname XINT_expr_var_#1\expandafter\endcsname
+ \fi
+ \ifcsname XINT_expr_onliteral_#1\endcsname
+ \XINT_global
+ \expandafter\let\csname XINT_expr_onliteral_#1/old\expandafter\endcsname
+ \csname XINT_expr_onliteral_#1\expandafter\endcsname
+ \fi
+ \XINT_global
+ \expandafter\def\csname XINT_expr_var_#1\endcsname ##1\relax !#1##2%
+ {##2##1\relax !#1##2}%
+ \XINT_global
+ \expandafter\def\csname XINT_expr_onliteral_#1\endcsname ##1\relax !#1##2%
+ {\XINT_expr_precedence_*** *##2(##1\relax !#1##2}%
+}%
+\xintApplyUnbraced \XINT_expr_makedummy {abcdefghijklmnopqrstuvwxyz}%
+\xintApplyUnbraced \XINT_expr_makedummy {ABCDEFGHIJKLMNOPQRSTUVWXYZ}%
+\def\xintnewdummy #1{%
+ \XINT_expr_makedummy{#1}%
+ \ifxintverbose\xintMessage {xintexpr}{Info}%
+ {#1 (with letter catcode) now
+ \ifxintglobaldefs globally \fi usable as dummy variable.}%
+ \fi
+}%
+\edef\XINT_expr_var_nil {\expandafter\noexpand\csname .= \endcsname}%
+\edef\XINT_expr_onliteral_nil
+ {\XINT_expr_precedence_*** *\expandafter\noexpand\csname .= \endcsname (}%
+\catcode`* 12
+% \end{macrocode}
+% \subsubsection{\cshn{xintensuredummy}, \cshn{xintrestorelettervar}}
+% \lverb|\xintensuredummy differs only in the informational message...
+% Attention that this is not meant to be nested.|
+% \begin{macrocode}
+\def\xintensuredummy #1{%
+ \XINT_expr_makedummy{#1}%
+ \ifxintverbose\xintMessage {xintexpr}{Info}%
+ {#1 (with letter catcode) now
+ \ifxintglobaldefs globally \fi usable as dummy variable.&&J
+ Use \string\xintrestoredummy{#1} to restore it to its former meaning.}%
+ \fi
+}%
+\def\xintrestorelettervar #1{%
+ \ifcsname XINT_expr_var_#1/old\endcsname
+ \XINT_global
+ \expandafter\let\csname XINT_expr_var_#1\expandafter\endcsname
+ \csname XINT_expr_var_#1/old\expandafter\endcsname
+ \fi
+ \ifcsname XINT_expr_onliteral_#1/old\endcsname
+ \XINT_global
+ \expandafter\let\csname XINT_expr_onliteral_#1\expandafter\endcsname
+ \csname XINT_expr_onliteral_#1/old\expandafter\endcsname
+ \fi
+ \ifxintverbose\xintMessage {xintexpr}{Info}%
+ {Character #1 (with letter catcode)
+ \ifxintglobaldefs globally \fi restored to its earlier status, if any.}%
+ \fi
+}%
+% \end{macrocode}
+% \subsubsection{\csh{omit()} and \csh{abort()}}
+% \lverb|& attention à ce & qui est de catcode 14 dans les \lverb
+% June 24 and 25, 2014.
+%
+% Added comments 2015/11/13:
+%
+% Et la documentation ? on n'y comprend plus rien. Trop
+% rusé.$newline
+% \def\XINT_expr_var_omit #1\relax !{1^C!{}{}{}\.=!\relax !}$newline
+% \def\XINT_expr_var_abort #1\relax !{1^C!{}{}{}\.=^\relax !}$newline
+% C'était accompagné de \XINT_expr_precedence_^C=0 et d'un hack au sein même
+% des macros until de plus bas niveau.
+%
+% Le mécanisme sioux était le suivant: ^C est déclaré comme un opérateur de
+% précédence nulle. Lorsque le parseur trouve un "omit" dans un seq ou autre,
+% il va insérer dans le stream \XINT_expr_getop suivi du texte de
+% remplacement. Donc ici on avait un 1 comme place holder, puis l'opérateur
+% ^C. Celui-ci étant de précédence zéro provoque la finalisation de tous les
+% calculs antérieurs dans le sous-bareeval. Mais j'ai dû hacker le until_end_b
+% (et le until_)_b) qui confronté à ^C, va se relancer à zéro, le getnext va
+% trouver le !{}{}{}\.=! et ensuite il y aura \relax, et le résultat sera \.=!
+% pour omit ou \.=^ pour abort. Les routines des boucles seq, iter, etc...
+% peuvent alors repérer le ! ou ^ et agir en conséquence (un long paragraphe
+% pour ne décrire que partiellement une ou deux lignes de codes...).
+%
+% Mais ^C a été fait alors que je n'avais pas encore les variables muettes. Je
+% dois trouver autre chose, car seq(2^C, C=1..5) est alors impossible. De
+% toute façon ce ^C était à usage interne uniquement.
+%
+% Il me faut un symbole d'opérateur qui ne rentre pas en conflit. Bon je vais
+% prendre !?. Ensuite au lieu de hacker until_end, il vaut mieux lui donner
+% précédence 2 (mais ça ne pourra pas marcher à l'intérieur de parenthèses il
+% faut d'abord les fermer manuellement) et lui associer un simplement un op
+% spécial. Je n'avais pas fait cela peut-être pour éviter d'avoir à définir
+% plusieurs macros. Le #1 dans la définition de \XINT_expr_op_!? est le
+% résultat de l'évaluation forcée précédente.
+%
+% Attention que les premier ! doiventt être de catcode 12 sinon ils
+% signalent une sous-expression qui déclenche une multiplication tacite.
+%
+% |
+% \begin{macrocode}
+\edef\XINT_expr_var_omit #1\relax !{1\string !?!\relax !}%
+\edef\XINT_expr_var_abort #1\relax !{1\string !?^\relax !}%
+\def\XINT_expr_op_!? #1#2\relax {\expandafter\XINT_expr_foundend\csname .=#2\endcsname}%
+\let\XINT_iiexpr_op_!? \XINT_expr_op_!?
+\let\XINT_flexpr_op_!? \XINT_expr_op_!?
+% \end{macrocode}
+% \subsubsection{The special variables @, @1, @2, @3, @4, @@, @@(1), \dots, @@@,
+% @@@(1), \dots for recursion}
+% \lverb|October 2014: I had completely forgotten what the @@@ etc... stuff
+% were supposed to do: this is for nesting recursions! (I was mad back in
+% June). @@(N) gives the Nth back, @@@(N) gives the Nth back of the higher
+% recursion!
+%
+% 1.2c adds the needed "onliteral" now that tacit multiplication between a
+% variable and a ( has a new mechanism. 1.2e does this tacit multiplication
+% with higher precedence.
+%
+% For the record, the ~ has catcode 3 in this code.|
+%
+% \begin{macrocode}
+\catcode`? 3 \catcode`* 11
+\def\XINT_expr_var_@ #1~#2{#2#1~#2}%
+\expandafter\let\csname XINT_expr_var_@1\endcsname \XINT_expr_var_@
+\expandafter\def\csname XINT_expr_var_@2\endcsname #1~#2#3{#3#1~#2#3}%
+\expandafter\def\csname XINT_expr_var_@3\endcsname #1~#2#3#4{#4#1~#2#3#4}%
+\expandafter\def\csname XINT_expr_var_@4\endcsname #1~#2#3#4#5{#5#1~#2#3#4#5}%
+\def\XINT_expr_onliteral_@ #1~#2{\XINT_expr_precedence_*** *#2(#1~#2}%
+\expandafter\let\csname XINT_expr_onliteral_@1\endcsname \XINT_expr_onliteral_@
+\expandafter\def\csname XINT_expr_onliteral_@2\endcsname #1~#2#3%
+ {\XINT_expr_precedence_*** *#3(#1~#2#3}%
+\expandafter\def\csname XINT_expr_onliteral_@3\endcsname #1~#2#3#4%
+ {\XINT_expr_precedence_*** *#4(#1~#2#3#4}%
+\expandafter\def\csname XINT_expr_onliteral_@4\endcsname #1~#2#3#4#5%
+ {\XINT_expr_precedence_*** *#5(#1~#2#3#4#5}%
+\catcode`* 12
+\def\XINT_expr_func_@@ #1#2#3#4~#5?%
+{%
+ \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
+ {\xintNum{\XINT_expr_unlock#3}}{#5}#4~#5?%
+}%
+\def\XINT_expr_func_@@@ #1#2#3#4~#5~#6?%
+{%
+ \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
+ {\xintNum{\XINT_expr_unlock#3}}{#6}#4~#5~#6?%
+}%
+\def\XINT_expr_func_@@@@ #1#2#3#4~#5~#6~#7?%
+{%
+ \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
+ {\xintNum{\XINT_expr_unlock#3}}{#7}#4~#5~#6~#7?%
+}%
+\let\XINT_flexpr_func_@@\XINT_expr_func_@@
+\let\XINT_flexpr_func_@@@\XINT_expr_func_@@@
+\let\XINT_flexpr_func_@@@@\XINT_expr_func_@@@@
+\def\XINT_iiexpr_func_@@ #1#2#3#4~#5?%
+{%
+ \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
+ {\XINT_expr_unlock#3}{#5}#4~#5?%
+}%
+\def\XINT_iiexpr_func_@@@ #1#2#3#4~#5~#6?%
+{%
+ \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
+ {\XINT_expr_unlock#3}{#6}#4~#5~#6?%
+}%
+\def\XINT_iiexpr_func_@@@@ #1#2#3#4~#5~#6~#7?%
+{%
+ \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
+ {\XINT_expr_unlock#3}{#7}#4~#5~#6~#7?%
+}%
+\catcode`? 11
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_onliteral_seq}}
+% \begin{macrocode}
+\def\XINT_expr_onliteral_seq
+ {\expandafter\XINT_expr_onliteral_seq_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
+\def\XINT_expr_onliteral_seq_f #1#2{\xint_c_xviii `{seqx}#2)\relax #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_onliteral_seq_a}}
+% \begin{macrocode}
+\def\XINT_expr_onliteral_seq_a #1#2,%
+{%
+ \ifcase\XINT_isbalanced_a \relax #1#2(\xint_bye)\xint_bye
+ \expandafter\XINT_expr_onliteral_seq_c
+ \or\expandafter\XINT_expr_onliteral_seq_b
+ \else\expandafter\xintError:we_are_doomed
+ \fi {#1#2},%
+}%
+\def\XINT_expr_onliteral_seq_b #1,{\XINT_expr_onliteral_seq_a {#1,}}%
+\def\XINT_expr_onliteral_seq_c #1,#2#3% #3 pour absorber le =
+{%
+ \XINT_expr_onliteral_seq_d {#2{#1}}{}%
+}%
+\def\XINT_expr_onliteral_seq_d #1#2#3)%
+{%
+ \ifcase\XINT_isbalanced_a \relax #2#3(\xint_bye)\xint_bye
+ \or\expandafter\XINT_expr_onliteral_seq_e
+ \else\expandafter\xintError:we_are_doomed
+ \fi
+ {#1}{#2#3}%
+}%
+\def\XINT_expr_onliteral_seq_e #1#2{\XINT_expr_onliteral_seq_d {#1}{#2)}}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_isbalanced_a} for \cshnolabel{XINT_expr_onliteral_seq_a}}
+% \lverb|Expands to \xint_c_mone in case a closing ) had no opening ( matching
+% it, to \@ne if opening ) had no closing ) matching it, to \z@ if expression
+% was balanced.|
+% \begin{macrocode}
+% use as \XINT_isbalanced_a \relax #1(\xint_bye)\xint_bye
+\def\XINT_isbalanced_a #1({\XINT_isbalanced_b #1)\xint_bye }%
+\def\XINT_isbalanced_b #1)#2%
+ {\xint_bye #2\XINT_isbalanced_c\xint_bye\XINT_isbalanced_error }%
+% \end{macrocode}
+% \lverb|if #2 is not \xint_bye, a ) was found, but there was no (. Hence error -> -1|
+% \begin{macrocode}
+\def\XINT_isbalanced_error #1)\xint_bye {\xint_c_mone}%
+% \end{macrocode}
+% \lverb|#2 was \xint_bye, was there a ) in original #1?|
+% \begin{macrocode}
+\def\XINT_isbalanced_c\xint_bye\XINT_isbalanced_error #1%
+ {\xint_bye #1\XINT_isbalanced_yes\xint_bye\XINT_isbalanced_d #1}%
+% \end{macrocode}
+% \lverb|#1 is \xint_bye, there was never ( nor ) in original #1, hence OK.|
+% \begin{macrocode}
+\def\XINT_isbalanced_yes\xint_bye\XINT_isbalanced_d\xint_bye )\xint_bye {\xint_c_ }%
+% \end{macrocode}
+% \lverb|#1 is not \xint_bye, there was indeed a ( in original #1. We check if
+% we see a ). If we do, we then loop until no ( nor ) is to be found.|
+% \begin{macrocode}
+\def\XINT_isbalanced_d #1)#2%
+ {\xint_bye #2\XINT_isbalanced_no\xint_bye\XINT_isbalanced_a #1#2}%
+% \end{macrocode}
+% \lverb|#2 was \xint_bye, we did not find a closing ) in original #1. Error.|
+% \begin{macrocode}
+\def\XINT_isbalanced_no\xint_bye #1\xint_bye\xint_bye {\xint_c_i }%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_allexpr_func_seqx}}
+% \lverb|1.2c uses \xintthebareval, ... which strangely were not available at
+% 1.1 time. This spares some tokens from \XINT_expr_seq:_d and cousins. Also now
+% variables have changed their mode of operation they pick only one token which
+% must be an already encapsulated value.
+%
+% In \XINT_allexp_seqx, #2 is the list, evaluated and encapsulated, #3 is the
+% dummy variable, #4 is the expression to evaluate repeatedly.
+%
+% A special case is a list generated by <variable>++: then #2 is {\.=+\.=<start>}.|
+% \begin{macrocode}
+\def\XINT_expr_func_seqx #1#2{\XINT_allexpr_seqx \xintthebareeval }%
+\def\XINT_flexpr_func_seqx #1#2{\XINT_allexpr_seqx \xintthebarefloateval}%
+\def\XINT_iiexpr_func_seqx #1#2{\XINT_allexpr_seqx \xintthebareiieval }%
+\def\XINT_allexpr_seqx #1#2#3#4%
+{%
+ \expandafter \XINT_expr_getop
+ \csname .=\expandafter\XINT_expr_seq:_aa
+ \romannumeral`&&@\XINT_expr_unlock #2!{#1#4\relax !#3}\endcsname
+}%
+\def\XINT_expr_seq:_aa #1{\if +#1\expandafter\XINT_expr_seq:_A\else
+ \expandafter\XINT_expr_seq:_a\fi #1}%
+% \end{macrocode}
+% \subsubsection{Evaluation over list, \csh{XINT_expr_seq:_a} with break,
+% abort, omit}
+% \lverb|The #2 here is \...bareeval <expression>\relax !<variable name>. The #1
+% is a comma separated list of values to assign to the dummy variable. The
+% \XINT_expr_seq_empty? intervenes immediately after handling of firstvalue.
+%
+% 1.2c has rewritten to a large extent this and other similar loops because
+% the dummy variables now fetch a single encapsulated token (apart from a good
+% means to lose a few hours needlessly -- as I have had to rewrite and review
+% most everything, this change could make the thing more efficient if the same
+% variable is used many times in an expression, but we are talking
+% micro-seconds here anyhow.)|
+% \begin{macrocode}
+\def\XINT_expr_seq:_a #1!#2{\expandafter\XINT_expr_seq_empty?
+ \romannumeral0\XINT_expr_seq:_b {#2}#1,^,}%
+\def\XINT_expr_seq:_b #1#2#3,{%
+ \if ,#2\xint_dothis\XINT_expr_seq:_noop\fi
+ \if ^#2\xint_dothis\XINT_expr_seq:_end\fi
+ \xint_orthat{\expandafter\XINT_expr_seq:_c}\csname.=#2#3\endcsname {#1}%
+}%
+\def\XINT_expr_seq:_noop\csname.=,#1\endcsname #2{\XINT_expr_seq:_b {#2}#1,}%
+\def\XINT_expr_seq:_end \csname.=^\endcsname #1{}%
+\def\XINT_expr_seq:_c #1#2{\expandafter\XINT_expr_seq:_d\romannumeral`&&@#2#1{#2}}%
+\def\XINT_expr_seq:_d #1{\if #1^\xint_dothis\XINT_expr_seq:_abort\fi
+ \if #1?\xint_dothis\XINT_expr_seq:_break\fi
+ \if #1!\xint_dothis\XINT_expr_seq:_omit\fi
+ \xint_orthat{\XINT_expr_seq:_goon #1}}%
+\def\XINT_expr_seq:_abort #1!#2#3#4#5^,{}%
+\def\XINT_expr_seq:_break #1!#2#3#4#5^,{,#1}%
+\def\XINT_expr_seq:_omit #1!#2#3#4{\XINT_expr_seq:_b {#4}}%
+\def\XINT_expr_seq:_goon #1!#2#3#4{,#1\XINT_expr_seq:_b {#4}}%
+% \end{macrocode}
+% \lverb|If all is omitted or list is empty, _empty? will fetch within the ##1
+% a \endcsname token and construct "nil" via <space>\endcsname, if not ##1
+% will be a comma and the gobble will swallow the space token and the
+% extra \endcsname.|
+% \begin{macrocode}
+\def\XINT_expr_seq_empty? #1{%
+\def\XINT_expr_seq_empty? ##1{\if ,##1\expandafter\xint_gobble_i\fi #1\endcsname }}%
+\XINT_expr_seq_empty? { }%
+% \end{macrocode}
+% \subsubsection{Evaluation over ++ generated lists with \csh{XINT_expr_seq:_A}}
+% \lverb|This is for index lists generated by n++. The starting point will have
+% been replaced by its ceil (added: in fact with version 1.1. the ceil was not
+% yet evaluated, but _var_<letter> did an expansion of what they fetch). We use
+% \numexpr rather than \xintInc, hence the indexing is limited to small
+% integers.
+%
+% The 1.2c version of n++ produces a #1 here which is already a single
+% \.=<value> token.|
+% \begin{macrocode}
+\def\XINT_expr_seq:_A +#1!%
+ {\expandafter\XINT_expr_seq_empty?\romannumeral0\XINT_expr_seq:_D #1}%
+\def\XINT_expr_seq:_D #1#2{\expandafter\XINT_expr_seq:_E\romannumeral`&&@#2#1{#2}}%
+\def\XINT_expr_seq:_E #1{\if #1^\xint_dothis\XINT_expr_seq:_Abort\fi
+ \if #1?\xint_dothis\XINT_expr_seq:_Break\fi
+ \if #1!\xint_dothis\XINT_expr_seq:_Omit\fi
+ \xint_orthat{\XINT_expr_seq:_Goon #1}}%
+\def\XINT_expr_seq:_Abort #1!#2#3#4{}%
+\def\XINT_expr_seq:_Break #1!#2#3#4{,#1}%
+\def\XINT_expr_seq:_Omit #1!#2#3%
+ {\expandafter\XINT_expr_seq:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
+\def\XINT_expr_seq:_Goon #1!#2#3%
+ {,#1\expandafter\XINT_expr_seq:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
+% \end{macrocode}
+% \subsection{\csh{add()}, \csh{mul()}}
+% \lverb|1.2c uses more directly the \xintiiAdd etc... macros and has
+% opxadd/opxmul rather than a single opx. This is less conceptual as I use
+% explicitely the associated macro names for +, * but this makes other things
+% more efficient, and the code more readable.|
+% \begin{macrocode}
+\def\XINT_expr_onliteral_add
+ {\expandafter\XINT_expr_onliteral_add_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
+\def\XINT_expr_onliteral_add_f #1#2{\xint_c_xviii `{opxadd}#2)\relax #1}%
+\def\XINT_expr_onliteral_mul
+ {\expandafter\XINT_expr_onliteral_mul_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
+\def\XINT_expr_onliteral_mul_f #1#2{\xint_c_xviii `{opxmul}#2)\relax #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_func_opxadd}, \csh{XINT_flexpr_func_opxadd},
+% \csh{XINT_iiexpr_func_opxadd} and same for mul}
+% |modified 1.2c.|
+% \begin{macrocode}
+\def\XINT_expr_func_opxadd #1#2{\XINT_allexpr_opx \xintbareeval {\xintAdd 0}}%
+\def\XINT_flexpr_func_opxadd #1#2{\XINT_allexpr_opx \xintbarefloateval {\XINTinFloatAdd 0}}%
+\def\XINT_iiexpr_func_opxadd #1#2{\XINT_allexpr_opx \xintbareiieval {\xintiiAdd 0}}%
+\def\XINT_expr_func_opxmul #1#2{\XINT_allexpr_opx \xintbareeval {\xintMul 1}}%
+\def\XINT_flexpr_func_opxmul #1#2{\XINT_allexpr_opx \xintbarefloateval {\XINTinFloatMul 1}}%
+\def\XINT_iiexpr_func_opxmul #1#2{\XINT_allexpr_opx \xintbareiieval {\xintiiMul 1}}%
+% \end{macrocode}
+% \lverb|#1=bareeval etc, #2={Add0} ou {Mul1}, #3=liste encapsulée, #4=la variable, #5=expression|
+% \begin{macrocode}
+\def\XINT_allexpr_opx #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_getop
+ \csname.=\romannumeral`&&@\expandafter\XINT_expr_op:_a
+ \romannumeral`&&@\XINT_expr_unlock #3!{#1#5\relax !#4}{#2}\endcsname
+}%
+\def\XINT_expr_op:_a #1!#2#3{\XINT_expr_op:_b #3{#2}#1,^,}%
+% \end{macrocode}
+% \lverb|#2 in \XINT_expr_op:_b is the partial result of computation so far, not
+% locked. A noop with have #4=, and #5 the next item which we need to recover.
+% No need to be very efficient for that in op:_noop. In op:_d, #4 is \xintAdd or
+% similar.|
+% \begin{macrocode}
+\def\XINT_expr_op:_b #1#2#3#4#5,{%
+ \if ,#4\xint_dothis\XINT_expr_op:_noop\fi
+ \if ^#4\xint_dothis\XINT_expr_op:_end\fi
+ \xint_orthat{\expandafter\XINT_expr_op:_c}\csname.=#4#5\endcsname {#3}#1{#2}%
+}%
+\def\XINT_expr_op:_c #1#2#3#4%
+ {\expandafter\XINT_expr_op:_d\romannumeral0#2#1#3{#4}{#2}}%
+\def\XINT_expr_op:_d #1!#2#3#4#5%
+ {\expandafter\XINT_expr_op:_b\expandafter #4\expandafter
+ {\romannumeral`&&@\XINT:NEhook:two#4{\XINT_expr_unlock#1}{#5}}}%
+% \end{macrocode}
+% \lverb|The replacement text had expr_seq:_b rather than expr_op:_b due to a
+% left-over from copy-paste. This made add and mul fail with an empty range
+% for the variable (or "nil" in the list of values). Fixed in 1.2h.|
+% \begin{macrocode}
+\def\XINT_expr_op:_noop\csname.=,#1\endcsname #2#3#4{\XINT_expr_op:_b #3{#4}{#2}#1,}%
+\def\XINT_expr_op:_end \csname.=^\endcsname #1#2#3{#3}%
+% \end{macrocode}
+% \subsection{\csh{subs()}}
+% \lverb|Got simpler with 1.2c as now the dummy variable fetches an
+% already encapsulated value, which is anyhow the form in which we get
+% it.|
+% \begin{macrocode}
+\def\XINT_expr_onliteral_subs
+ {\expandafter\XINT_expr_onliteral_subs_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
+\def\XINT_expr_onliteral_subs_f #1#2{\xint_c_xviii `{subx}#2)\relax #1}%
+\def\XINT_expr_func_subx #1#2{\XINT_allexpr_subx \xintbareeval }%
+\def\XINT_flexpr_func_subx #1#2{\XINT_allexpr_subx \xintbarefloateval}%
+\def\XINT_iiexpr_func_subx #1#2{\XINT_allexpr_subx \xintbareiieval }%
+\def\XINT_allexpr_subx #1#2#3#4% #2 is the value to assign to the dummy variable
+{% #3 is the dummy variable, #4 is the expression to evaluate
+ \expandafter\expandafter\expandafter\XINT_expr_getop
+ \expandafter\XINT_expr_subx:_end\romannumeral0#1#4\relax !#3#2%
+}%
+\def\XINT_expr_subx:_end #1!#2#3{#1}%
+% \end{macrocode}
+% \subsection{\csh{rseq()}}
+% \localtableofcontents
+%
+% \lverb|When func_rseq has its turn, initial segment has been scanned by
+% oparen, the ; mimicking the rôle of a closing parenthesis, and stopping
+% further expansion. Notice that the ; is discovered during standard parsing
+% mode, it may be for example {;} or arise from expansion as rseq does not use
+% a delimited macro to locate it.
+%
+% Here and in rrseq and iter, 1.2c adds also use of \xintthebareeval, etc...|
+% \begin{macrocode}
+\def\XINT_expr_func_rseq {\XINT_allexpr_rseq \xintbareeval \xintthebareeval }%
+\def\XINT_flexpr_func_rseq {\XINT_allexpr_rseq \xintbarefloateval \xintthebarefloateval }%
+\def\XINT_iiexpr_func_rseq {\XINT_allexpr_rseq \xintbareiieval \xintthebareiieval }%
+\def\XINT_allexpr_rseq #1#2#3%
+{%
+ \expandafter\XINT_expr_rseqx\expandafter #1\expandafter#2\expandafter
+ #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rseqx}}
+% \lverb|The (#5) is for ++ mechanism which must have its closing parenthesis.|
+% \begin{macrocode}
+\def\XINT_expr_rseqx #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_rseqy\romannumeral0#1(#5)\relax #3#4#2%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rseqy}}
+% \lverb|#1=valeurs pour variable (locked),
+% #2=toutes les valeurs initiales (csv,locked),
+% #3=variable, #4=expr,
+% #5=\xintthebareeval ou \xintthebarefloateval ou \xintthebareiieval|
+% \begin{macrocode}
+\def\XINT_expr_rseqy #1#2#3#4#5%
+{%
+ \expandafter \XINT_expr_getop
+ \csname .=\XINT_expr_unlock #2%
+ \expandafter\XINT_expr_rseq:_aa
+ \romannumeral`&&@\XINT_expr_unlock #1!{#5#4\relax !#3}#2\endcsname
+}%
+\def\XINT_expr_rseq:_aa #1{\if +#1\expandafter\XINT_expr_rseq:_A\else
+ \expandafter\XINT_expr_rseq:_a\fi #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rseq:_a} etc\dots}
+% \begin{macrocode}
+\def\XINT_expr_rseq:_a #1!#2#3{\XINT_expr_rseq:_b {#3}{#2}#1,^,}%
+\def\XINT_expr_rseq:_b #1#2#3#4,{%
+ \if ,#3\xint_dothis\XINT_expr_rseq:_noop\fi
+ \if ^#3\xint_dothis\XINT_expr_rseq:_end\fi
+ \xint_orthat{\expandafter\XINT_expr_rseq:_c}\csname.=#3#4\endcsname
+ {#1}{#2}%
+}%
+\def\XINT_expr_rseq:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_rseq:_b {#2}{#3}#1,}%
+\def\XINT_expr_rseq:_end \csname.=^\endcsname #1#2{}%
+\def\XINT_expr_rseq:_c #1#2#3%
+ {\expandafter\XINT_expr_rseq:_d\romannumeral`&&@#3#1~#2{#3}}%
+\def\XINT_expr_rseq:_d #1{%
+ \if ^#1\xint_dothis\XINT_expr_rseq:_abort\fi
+ \if ?#1\xint_dothis\XINT_expr_rseq:_break\fi
+ \if !#1\xint_dothis\XINT_expr_rseq:_omit\fi
+ \xint_orthat{\XINT_expr_rseq:_goon #1}}%
+\def\XINT_expr_rseq:_goon #1!#2#3~#4#5{,#1\expandafter\XINT_expr_rseq:_b
+ \romannumeral0\XINT_expr_lockit {#1}{#5}}%
+\def\XINT_expr_rseq:_omit #1!#2#3~{\XINT_expr_rseq:_b }%
+\def\XINT_expr_rseq:_abort #1!#2#3~#4#5#6^,{}%
+\def\XINT_expr_rseq:_break #1!#2#3~#4#5#6^,{,#1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rseq:_A} etc\dots}
+% \lverb |n++ for rseq. With 1.2c dummy variables pick a single token.|
+% \begin{macrocode}
+\def\XINT_expr_rseq:_A +#1!#2#3{\XINT_expr_rseq:_D #1#3{#2}}%
+\def\XINT_expr_rseq:_D #1#2#3%
+ {\expandafter\XINT_expr_rseq:_E\romannumeral`&&@#3#1~#2{#3}}%
+\def\XINT_expr_rseq:_E #1{\if #1^\xint_dothis\XINT_expr_rseq:_Abort\fi
+ \if #1?\xint_dothis\XINT_expr_rseq:_Break\fi
+ \if #1!\xint_dothis\XINT_expr_rseq:_Omit\fi
+ \xint_orthat{\XINT_expr_rseq:_Goon #1}}%
+\def\XINT_expr_rseq:_Goon #1!#2#3~#4#5%
+ {,#1\expandafter\XINT_expr_rseq:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
+ \romannumeral0\XINT_expr_lockit{#1}{#5}}%
+\def\XINT_expr_rseq:_Omit #1!#2#3~%#4#5%
+ {\expandafter\XINT_expr_rseq:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname }%
+\def\XINT_expr_rseq:_Abort #1!#2#3~#4#5{}%
+\def\XINT_expr_rseq:_Break #1!#2#3~#4#5{,#1}%
+% \end{macrocode}
+% \subsection{\csh{iter()}}
+% \localtableofcontents
+%
+% \lverb|Prior to 1.2g, the iter keyword was what is now called iterr,
+% analogous with rrseq. Somehow I forgot an iter functioning like rseq
+% with the sole difference of printing only the last iteration. Both rseq and
+% iter work well with list selectors, as @ refers to the whole comma separated
+% sequence of the initial values. I have thus deliberately done the backwards
+% incompatible renaming of iter to iterr, and the new iter.|
+% \begin{macrocode}
+\def\XINT_expr_func_iter {\XINT_allexpr_iter \xintbareeval \xintthebareeval }%
+\def\XINT_flexpr_func_iter {\XINT_allexpr_iter \xintbarefloateval \xintthebarefloateval }%
+\def\XINT_iiexpr_func_iter {\XINT_allexpr_iter \xintbareiieval \xintthebareiieval }%
+\def\XINT_allexpr_iter #1#2#3%
+{%
+ \expandafter\XINT_expr_iterx\expandafter #1\expandafter#2\expandafter
+ #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iterx}}
+% \lverb|The (#5) is for ++ mechanism which must have its closing parenthesis.|
+% \begin{macrocode}
+\def\XINT_expr_iterx #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_itery\romannumeral0#1(#5)\relax #3#4#2%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_itery}}
+% \lverb|#1=valeurs pour variable (locked),
+% #2=toutes les valeurs initiales (csv,locked),
+% #3=variable, #4=expr,
+% #5=\xintthebareeval ou \xintthebarefloateval ou \xintthebareiieval|
+% \begin{macrocode}
+\def\XINT_expr_itery #1#2#3#4#5%
+{%
+ \expandafter \XINT_expr_getop
+ \csname .=%
+ \expandafter\XINT_expr_iter:_aa
+ \romannumeral`&&@\XINT_expr_unlock #1!{#5#4\relax !#3}#2\endcsname
+}%
+\def\XINT_expr_iter:_aa #1{\if +#1\expandafter\XINT_expr_iter:_A\else
+ \expandafter\XINT_expr_iter:_a\fi #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iter:_a} etc\dots}
+% \begin{macrocode}
+\def\XINT_expr_iter:_a #1!#2#3{\XINT_expr_iter:_b {#3}{#2}#1,^,}%
+\def\XINT_expr_iter:_b #1#2#3#4,{%
+ \if ,#3\xint_dothis\XINT_expr_iter:_noop\fi
+ \if ^#3\xint_dothis\XINT_expr_iter:_end\fi
+ \xint_orthat{\expandafter\XINT_expr_iter:_c}%
+ \csname.=#3#4\endcsname {#1}{#2}%
+}%
+\def\XINT_expr_iter:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_iter:_b {#2}{#3}#1,}%
+\def\XINT_expr_iter:_end \csname.=^\endcsname #1#2{\XINT_expr:_unlock #1}%
+\def\XINT_expr_iter:_c #1#2#3%
+ {\expandafter\XINT_expr_iter:_d\romannumeral`&&@#3#1~#2{#3}}%
+\def\XINT_expr_iter:_d #1{%
+ \if ^#1\xint_dothis\XINT_expr_iter:_abort\fi
+ \if ?#1\xint_dothis\XINT_expr_iter:_break\fi
+ \if !#1\xint_dothis\XINT_expr_iter:_omit\fi
+ \xint_orthat{\XINT_expr_iter:_goon #1}}%
+\def\XINT_expr_iter:_goon #1!#2#3~#4#5%
+ {\expandafter\XINT_expr_iter:_b\romannumeral0\XINT_expr_lockit {#1}{#5}}%
+\def\XINT_expr_iter:_omit #1!#2#3~{\XINT_expr_iter:_b }%
+\def\XINT_expr_iter:_abort #1!#2#3~#4#5#6^,{\XINT_expr_unlock #4}%
+\def\XINT_expr_iter:_break #1!#2#3~#4#5#6^,{#1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iter:_A} etc\dots}
+% \lverb |n++ for iter. With 1.2c dummy variables pick a single token.|
+% \begin{macrocode}
+\def\XINT_expr_iter:_A +#1!#2#3{\XINT_expr_iter:_D #1#3{#2}}%
+\def\XINT_expr_iter:_D #1#2#3%
+ {\expandafter\XINT_expr_iter:_E\romannumeral`&&@#3#1~#2{#3}}%
+\def\XINT_expr_iter:_E #1{\if #1^\xint_dothis\XINT_expr_iter:_Abort\fi
+ \if #1?\xint_dothis\XINT_expr_iter:_Break\fi
+ \if #1!\xint_dothis\XINT_expr_iter:_Omit\fi
+ \xint_orthat{\XINT_expr_iter:_Goon #1}}%
+\def\XINT_expr_iter:_Goon #1!#2#3~#4#5%
+ {\expandafter\XINT_expr_iter:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
+ \romannumeral0\XINT_expr_lockit{#1}{#5}}%
+\def\XINT_expr_iter:_Omit #1!#2#3~%#4#5%
+ {\expandafter\XINT_expr_iter:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname }%
+\def\XINT_expr_iter:_Abort #1!#2#3~#4#5{\XINT_expr:_unlock #4}%
+\def\XINT_expr_iter:_Break #1!#2#3~#4#5{#1}%
+% \end{macrocode}
+% \subsection{\csh{rrseq()}}
+% \localtableofcontents
+%
+% \lverb|When func_rrseq has its turn, initial segment has been scanned
+% by oparen, the ; mimicking the rôle of a closing parenthesis, and
+% stopping further expansion.|
+% \begin{macrocode}
+\def\XINT_expr_func_rrseq {\XINT_allexpr_rrseq \xintbareeval \xintthebareeval }%
+\def\XINT_flexpr_func_rrseq {\XINT_allexpr_rrseq \xintbarefloateval \xintthebarefloateval }%
+\def\XINT_iiexpr_func_rrseq {\XINT_allexpr_rrseq \xintbareiieval \xintthebareiieval }%
+\def\XINT_allexpr_rrseq #1#2#3%
+{%
+ \expandafter\XINT_expr_rrseqx\expandafter #1\expandafter#2\expandafter
+ #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rrseqx}}
+% \lverb|The (#5) is for ++ mechanism which must have its closing parenthesis.|
+% \begin{macrocode}
+\def\XINT_expr_rrseqx #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_rrseqy\romannumeral0#1(#5)\expandafter\relax
+ \expandafter{\romannumeral0\xintapply \XINT_expr_lockit
+ {\xintRevWithBraces{\xintCSVtoListNonStripped{\XINT_expr_unlock #3}}}}%
+ #3#4#2%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rrseqy}}
+% \lverb|#1=valeurs pour variable (locked),
+% #2=initial values (reversed, one (braced) token each)
+% #3=toutes les valeurs initiales (csv,locked),
+% #4=variable, #5=expr,
+% #6=\xintthebareeval ou \xintthebarefloateval ou \xintthebareiieval|
+% \begin{macrocode}
+\def\XINT_expr_rrseqy #1#2#3#4#5#6%
+{%
+ \expandafter \XINT_expr_getop
+ \csname .=\XINT_expr_unlock #3%
+ \expandafter\XINT_expr_rrseq:_aa
+ \romannumeral`&&@\XINT_expr_unlock #1!{#6#5\relax !#4}{#2}\endcsname
+}%
+\def\XINT_expr_rrseq:_aa #1{\if +#1\expandafter\XINT_expr_rrseq:_A\else
+ \expandafter\XINT_expr_rrseq:_a\fi #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rrseq:_a} etc\dots}
+% \lverb|Attention que ? a catcode 3 ici et dans iter.|
+% \begin{macrocode}
+\catcode`? 3
+\def\XINT_expr_rrseq:_a #1!#2#3{\XINT_expr_rrseq:_b {#3}{#2}#1,^,}%
+\def\XINT_expr_rrseq:_b #1#2#3#4,{%
+ \if ,#3\xint_dothis\XINT_expr_rrseq:_noop\fi
+ \if ^#3\xint_dothis\XINT_expr_rrseq:_end\fi
+ \xint_orthat{\expandafter\XINT_expr_rrseq:_c}\csname.=#3#4\endcsname
+ {#1}{#2}%
+}%
+\def\XINT_expr_rrseq:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_rrseq:_b {#2}{#3}#1,}%
+\def\XINT_expr_rrseq:_end \csname.=^\endcsname #1#2{}%
+\def\XINT_expr_rrseq:_c #1#2#3%
+ {\expandafter\XINT_expr_rrseq:_d\romannumeral`&&@#3#1~#2?{#3}}%
+\def\XINT_expr_rrseq:_d #1{%
+ \if ^#1\xint_dothis\XINT_expr_rrseq:_abort\fi
+ \if ?#1\xint_dothis\XINT_expr_rrseq:_break\fi
+ \if !#1\xint_dothis\XINT_expr_rrseq:_omit\fi
+ \xint_orthat{\XINT_expr_rrseq:_goon #1}%
+}%
+\def\XINT_expr_rrseq:_goon #1!#2#3~#4?#5{,#1\expandafter\XINT_expr_rrseq:_b\expandafter
+ {\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
+\def\XINT_expr_rrseq:_omit #1!#2#3~{\XINT_expr_rrseq:_b }%
+\def\XINT_expr_rrseq:_abort #1!#2#3~#4?#5#6^,{}%
+\def\XINT_expr_rrseq:_break #1!#2#3~#4?#5#6^,{,#1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_rrseq:_A} etc\dots}
+% \lverb |n++ for rrseq. With 1.2C, the #1 in \XINT_expr_rrseq:_A is a single token.|
+% \begin{macrocode}
+\def\XINT_expr_rrseq:_A +#1!#2#3{\XINT_expr_rrseq:_D #1{#3}{#2}}%
+\def\XINT_expr_rrseq:_D #1#2#3%
+ {\expandafter\XINT_expr_rrseq:_E\romannumeral`&&@#3#1~#2?{#3}}%
+\def\XINT_expr_rrseq:_Goon #1!#2#3~#4?#5%
+ {,#1\expandafter\XINT_expr_rrseq:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
+ \expandafter{\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
+\def\XINT_expr_rrseq:_Omit #1!#2#3~%#4?#5%
+ {\expandafter\XINT_expr_rrseq:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
+\def\XINT_expr_rrseq:_Abort #1!#2#3~#4?#5{}%
+\def\XINT_expr_rrseq:_Break #1!#2#3~#4?#5{,#1}%
+\def\XINT_expr_rrseq:_E #1{\if #1^\xint_dothis\XINT_expr_rrseq:_Abort\fi
+ \if #1?\xint_dothis\XINT_expr_rrseq:_Break\fi
+ \if #1!\xint_dothis\XINT_expr_rrseq:_Omit\fi
+ \xint_orthat{\XINT_expr_rrseq:_Goon #1}}%
+% \end{macrocode}
+% \subsection{\csh{iterr()}}
+% \localtableofcontents
+% \begin{macrocode}
+\def\XINT_expr_func_iterr {\XINT_allexpr_iterr \xintbareeval \xintthebareeval }%
+\def\XINT_flexpr_func_iterr {\XINT_allexpr_iterr \xintbarefloateval \xintthebarefloateval }%
+\def\XINT_iiexpr_func_iterr {\XINT_allexpr_iterr \xintbareiieval \xintthebareiieval }%
+\def\XINT_allexpr_iterr #1#2#3%
+{%
+ \expandafter\XINT_expr_iterrx\expandafter #1\expandafter #2\expandafter
+ #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iterrx}}
+% \lverb|The (#5) is for ++ mechanism which must have its closing parenthesis.|
+% \begin{macrocode}
+\def\XINT_expr_iterrx #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_iterry\romannumeral0#1(#5)\expandafter\relax
+ \expandafter{\romannumeral0\xintapply \XINT_expr_lockit
+ {\xintRevWithBraces{\xintCSVtoListNonStripped{\XINT_expr_unlock #3}}}}%
+ #3#4#2%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iterry}}
+% \lverb|#1=valeurs pour variable (locked),
+% #2=initial values (reversed, one (braced) token each)
+% #3=toutes les valeurs initiales (csv,locked),
+% #4=variable, #5=expr,
+% #6=\xintbareeval ou \xintbarefloateval ou \xintbareiieval|
+% \begin{macrocode}
+\def\XINT_expr_iterry #1#2#3#4#5#6%
+{%
+ \expandafter \XINT_expr_getop
+ \csname .=%
+ \expandafter\XINT_expr_iterr:_aa
+ \romannumeral`&&@\XINT_expr_unlock #1!{#6#5\relax !#4}{#2}\endcsname
+}%
+\def\XINT_expr_iterr:_aa #1{\if +#1\expandafter\XINT_expr_iterr:_A\else
+ \expandafter\XINT_expr_iterr:_a\fi #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iterr:_a} etc\dots}
+% \begin{macrocode}
+\def\XINT_expr_iterr:_a #1!#2#3{\XINT_expr_iterr:_b {#3}{#2}#1,^,}%
+\def\XINT_expr_iterr:_b #1#2#3#4,{%
+ \if ,#3\xint_dothis\XINT_expr_iterr:_noop\fi
+ \if ^#3\xint_dothis\XINT_expr_iterr:_end\fi
+ \xint_orthat{\expandafter\XINT_expr_iterr:_c}%
+ \csname.=#3#4\endcsname {#1}{#2}%
+}%
+\def\XINT_expr_iterr:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_iterr:_b {#2}{#3}#1,}%
+\def\XINT_expr_iterr:_end \csname.=^\endcsname #1#2%
+ {\expandafter\xint_gobble_i\romannumeral0\xintapplyunbraced
+ {,\XINT_expr:_unlock}{\xintReverseOrder{#1\space}}}%
+\def\XINT_expr_iterr:_c #1#2#3%
+ {\expandafter\XINT_expr_iterr:_d\romannumeral`&&@#3#1~#2?{#3}}%
+\def\XINT_expr_iterr:_d #1{%
+ \if ^#1\xint_dothis\XINT_expr_iterr:_abort\fi
+ \if ?#1\xint_dothis\XINT_expr_iterr:_break\fi
+ \if !#1\xint_dothis\XINT_expr_iterr:_omit\fi
+ \xint_orthat{\XINT_expr_iterr:_goon #1}%
+}%
+\def\XINT_expr_iterr:_goon #1!#2#3~#4?#5{\expandafter\XINT_expr_iterr:_b\expandafter
+ {\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
+\def\XINT_expr_iterr:_omit #1!#2#3~{\XINT_expr_iterr:_b }%
+\def\XINT_expr_iterr:_abort #1!#2#3~#4?#5#6^,%
+ {\expandafter\xint_gobble_i\romannumeral0\xintapplyunbraced
+ {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}}}%
+\def\XINT_expr_iterr:_break #1!#2#3~#4?#5#6^,%
+ {\expandafter\xint_gobble_iv\romannumeral0\xintapplyunbraced
+ {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}},#1}%
+\def\XINT_expr:_unlock #1{\XINT_expr_unlock #1}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_iterr:_A} etc\dots}
+% \lverb |n++ for iterr. ? is of catcode 3 here.|
+% \begin{macrocode}
+\def\XINT_expr_iterr:_A +#1!#2#3{\XINT_expr_iterr:_D #1{#3}{#2}}%
+\def\XINT_expr_iterr:_D #1#2#3%
+ {\expandafter\XINT_expr_iterr:_E\romannumeral`&&@#3#1~#2?{#3}}%
+\def\XINT_expr_iterr:_Goon #1!#2#3~#4?#5%
+ {\expandafter\XINT_expr_iterr:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
+ \expandafter{\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
+\def\XINT_expr_iterr:_Omit #1!#2#3~%#4?#5%
+ {\expandafter\XINT_expr_iterr:_D
+ \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
+\def\XINT_expr_iterr:_Abort #1!#2#3~#4?#5%
+ {\expandafter\xint_gobble_i\romannumeral0\xintapplyunbraced
+ {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}}}%
+\def\XINT_expr_iterr:_Break #1!#2#3~#4?#5%
+ {\expandafter\xint_gobble_iv\romannumeral0\xintapplyunbraced
+ {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}},#1}%
+\def\XINT_expr_iterr:_E #1{\if #1^\xint_dothis\XINT_expr_iterr:_Abort\fi
+ \if #1?\xint_dothis\XINT_expr_iterr:_Break\fi
+ \if #1!\xint_dothis\XINT_expr_iterr:_Omit\fi
+ \xint_orthat{\XINT_expr_iterr:_Goon #1}}%
+\catcode`? 11
+% \end{macrocode}
+% \subsection{Macros handling csv lists for functions with multiple comma
+% separated arguments in expressions}
+% \localtableofcontents
+% \lverb|These macros are used inside \csname...\endcsname. These things
+% are not initiated by a \romannumeral in general, but in some cases they are,
+% especially when involved in an \xintNewExpr. They will then be protected
+% against expansion and expand only later in contexts governed by an
+% initial \romannumeral-`0. There each new item may need to be expanded, which
+% would not be the case in the use for the _func_ things.
+%
+% 1.2g adds (to be continued)|
+%
+% \subsubsection{\csh{xintANDof:csv}}
+% \lverb|1.09a. For use by \xintexpr inside \csname. 1.1, je remplace
+% ifTrueAelseB par iiNotZero pour des raisons d'optimisations.|
+% \begin{macrocode}
+\def\xintANDof:csv #1{\expandafter\XINT_andof:_a\romannumeral`&&@#1,,^}%
+\def\XINT_andof:_a #1{\if ,#1\expandafter\XINT_andof:_e
+ \else\expandafter\XINT_andof:_c\fi #1}%
+\def\XINT_andof:_c #1,{\xintiiifNotZero {#1}{\XINT_andof:_a}{\XINT_andof:_no}}%
+\def\XINT_andof:_no #1^{0}%
+\def\XINT_andof:_e #1^{1}% works with empty list
+% \end{macrocode}
+% \subsubsection{\csh{xintORof:csv}}
+% \lverb|1.09a. For use by \xintexpr.|
+% \begin{macrocode}
+\def\xintORof:csv #1{\expandafter\XINT_orof:_a\romannumeral`&&@#1,,^}%
+\def\XINT_orof:_a #1{\if ,#1\expandafter\XINT_orof:_e
+ \else\expandafter\XINT_orof:_c\fi #1}%
+\def\XINT_orof:_c #1,{\xintiiifNotZero{#1}{\XINT_orof:_yes}{\XINT_orof:_a}}%
+\def\XINT_orof:_yes #1^{1}%
+\def\XINT_orof:_e #1^{0}% works with empty list
+% \end{macrocode}
+% \subsubsection{\csh{xintXORof:csv}}
+% \lverb|1.09a. For use by \xintexpr (inside a \csname..\endcsname).|
+% \begin{macrocode}
+\def\xintXORof:csv #1{\expandafter\XINT_xorof:_a\expandafter 0\romannumeral`&&@#1,,^}%
+\def\XINT_xorof:_a #1#2,{\XINT_xorof:_b #2,#1}%
+\def\XINT_xorof:_b #1{\if ,#1\expandafter\XINT_xorof:_e
+ \else\expandafter\XINT_xorof:_c\fi #1}%
+\def\XINT_xorof:_c #1,#2%
+ {\xintiiifNotZero {#1}{\if #20\xint_afterfi{\XINT_xorof:_a 1}%
+ \else\xint_afterfi{\XINT_xorof:_a 0}\fi}%
+ {\XINT_xorof:_a #2}%
+ }%
+\def\XINT_xorof:_e ,#1#2^{#1}% allows empty list (then returns 0)
+% \end{macrocode}
+% \subsubsection{Generic csv routine (\csh{XINT_oncsv:_a})}
+% \lverb|1.1. generic routine. up to the loss of some efficiency, especially
+% for Sum:csv and Prod:csv, where \XINTinFloat will be done twice for each
+% argument.
+%
+% FIXME: DOCUMENT BETTER. HOW IS THIS CALLED? WHAT IS MEANING OF ARGUMENTS? IS
+% THERE ANY POST-PROCESSING OF FINAL RESULT?|
+% \begin{macrocode}
+\def\XINT_oncsv:_empty #1,^,#2{#2}%
+\def\XINT_oncsv:_end ^,#1#2#3#4{#1}%
+\def\XINT_oncsv:_a #1#2#3%
+ {\if ,#3\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_oncsv:_b\fi #1#2#3}%
+\def\XINT_oncsv:_b #1#2#3,%
+ {\expandafter\XINT_oncsv:_c \expandafter{\romannumeral`&&@#2{#3}}#1#2}%
+\def\XINT_oncsv:_c #1#2#3#4,{\expandafter\XINT_oncsv:_d \romannumeral`&&@#4,{#1}#2#3}%
+\def\XINT_oncsv:_d #1%
+ {\if ^#1\expandafter\XINT_oncsv:_end\else\expandafter\XINT_oncsv:_e\fi #1}%
+\def\XINT_oncsv:_e #1,#2#3#4%
+ {\expandafter\XINT_oncsv:_c\expandafter {\romannumeral`&&@#3{#4{#1}}{#2}}#3#4}%
+% \end{macrocode}
+% \subsubsection{\csh{xintMaxof:csv}, \csh{xintiiMaxof:csv}}
+% \lverb|1.09i. Rewritten for 1.1. Compatible avec liste vide donnant valeur par
+% défaut. Pas compatible avec items manquants.
+% ah je m'aperçois au dernier moment que je n'ai pas en effet de \xintiiMax.
+% Je devrais le rajouter. En tout cas ici c'est uniquement pour xintiiexpr,
+% dans il faut bien sûr ne pas faire de xintNum, donc il faut un iimax.|
+% \begin{macrocode}
+\def\xintMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmax
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}%
+\def\xintiiMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimax
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
+% \end{macrocode}
+% \subsubsection{\csh{xintMinof:csv}, \csh{xintiiMinof:csv}}
+% \lverb|1.09i. Rewritten for 1.1. For use by \xintiiexpr.|
+% \begin{macrocode}
+\def\xintMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmin
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}%
+\def\xintiiMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimin
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
+% \end{macrocode}
+% \subsubsection{\csh{xintSum:csv}, \csh{xintiiSum:csv}}
+% \lverb|1.09a. Rewritten for 1.1. For use by \xintexpr.|
+% \begin{macrocode}
+\def\xintSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintadd
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}%
+\def\xintiiSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiiadd
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
+% \end{macrocode}
+% \subsubsection{\csh{xintPrd:csv}, \csh{xintiiPrd:csv}}
+% \lverb|1.09a. Rewritten for 1.1. For use by \xintexpr.|
+% \begin{macrocode}
+\def\xintPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmul
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,{1/1[0]}}%
+\def\xintiiPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimul
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}%
+% \end{macrocode}
+% \subsubsection{\csh{xintGCDof:csv}, \csh{xintLCMof:csv}}
+% \changed{1.09a}{}
+% Non-integer arguments are replaced by integers as |\xintGCD| and |\xintLCM|
+% apply |\xintNum|.
+% \changed{1.1}{}
+% As with other "csv" macros, the (list) argument needs to be expanded in case
+% it arises within a macro created from \csbxint{NewExpr}.
+% \changed{1.3d}{}
+% No more usage of the integer-only \xintgcdnameimp macros, replaced by direct
+% coding here, in order to extend scope to fractions (and produce fractions).
+% Hesitation about allowing empty input, and what to return then.
+% \begin{macrocode}
+\def\xintGCDof:csv #1{\expandafter\XINT_gcdof:_a\romannumeral`&&@#1,^,{1/1[0]}}%
+\def\XINT_gcdof:_a #1%
+ {\if ,#1\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_gcdof:_b\fi #1}%
+% \end{macrocode}
+% This abuses the way |\xintiiabs| works in order to avoid fetching whole
+% argument again.
+% \begin{macrocode}
+\def\XINT_gcdof:_b #1,%
+ {\expandafter\XINT_gcdof:_c\romannumeral0\xintiiabs#1\xint:}%
+\def\XINT_gcdof:_c #1\xint:#2,%
+ {\expandafter\XINT_gcdof:_d\romannumeral0\xintiiabs#2\xint:#1\xint:}%
+\def\XINT_gcdof:_d #1%
+ {\if ^#1\expandafter\XINT_gcdof:_end\else\expandafter\XINT_gcdof:_e\fi #1}%
+% \end{macrocode}
+% \lverb|\xintMod will apply \xintRaw on its arguments, and will output in
+% normalized format. But in exceptional case with a one-item or one item and
+% then zeros, the output is (absolute value of) this item, not necessarily in
+% A/B[N] format.|
+% \begin{macrocode}
+\def\XINT_gcdof:_e#1#2\xint:#3\xint:
+{%
+ \if0#1\expandafter\XINT_gcdof:_f\fi
+ \expandafter\XINT_gcdof:_e\romannumeral0\xintmod{#3}{#1#2}\xint:#1#2\xint:
+}%
+\def\XINT_gcdof:_f
+ \expandafter\XINT_gcdof:_e\romannumeral0\xintmod#1#2\xint:#3\xint:#4,%
+{%
+ \expandafter\XINT_gcdof:_d\romannumeral0\xintiiabs#4\xint:#1\xint:
+}%
+% \end{macrocode}
+% \lverb|As for others :csv macros here expansion in the case of \xintNewExpr
+% crafted macros is triggered by (an equivalent to) \romannumeral-`0. Else it
+% happens inside \csname...\endcsname, and there is no triggering
+% \romannumeral, attention to not leave a space upfront.|
+% \begin{macrocode}
+\def\XINT_gcdof:_end ^\xint:#1\xint:#2{#1}%
+% \end{macrocode}
+% \lverb|For least common multiple, we will use \xintInv, but this requires to
+% make sure fractional input is in raw format.|
+% \begin{macrocode}
+\def\xintLCMof:csv #1{\expandafter\XINT_lcmof:_a\romannumeral`&&@#1,^,{0/1[0]}}%
+\def\XINT_lcmof:_a #1%
+ {\if ,#1\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_lcmof:_b\fi #1}%
+\def\XINT_lcmof:_b #1,%
+ {\expandafter\XINT_lcmof:_c\romannumeral0\xintiiabs\xintRaw{#1}\xint:}%
+\def\XINT_lcmof:_c #1{\if0#1\expandafter\XINT_lcmof:_zero\fi
+ \expandafter\XINT_lcmof:_d\romannumeral0\XINT_inv #1}%
+% \end{macrocode}
+% \lverb|We can do \xintiiabs^, but \xintiiabs\xintRaw{^} would throw
+% an error. So we need to delay applying \xintRaw to new item.|
+% \begin{macrocode}
+\def\XINT_lcmof:_d #1\xint:#2,%
+ {\expandafter\XINT_lcmof:_e\romannumeral0\xintiiabs#2\xint:#1\xint:}%
+\def\XINT_lcmof:_e #1%
+ {\if ^#1\expandafter\XINT_lcmof:_end\else\expandafter\XINT_lcmof:_f\fi #1}%
+% \end{macrocode}
+% \lverb|As soon as we hit against a zero item, the l.c.m is known to be zero
+% itself. Else we need to inverse it, but this requires full A/B[N] raw format,
+% hence the \xintraw.|
+% \begin{macrocode}
+\def\XINT_lcmof:_f#1#2\xint:
+{%
+ \if0#1\expandafter\XINT_lcmof:_zero\fi
+ \expandafter\XINT_lcmof:_g\romannumeral0\expandafter\XINT_inv
+ \romannumeral0\xintraw{#1#2}\xint:
+}%
+\def\XINT_lcmof:_g #1#2\xint:#3\xint:
+{%
+ \if0#1\expandafter\XINT_lcmof:_h\fi
+ \expandafter\XINT_lcmof:_g\romannumeral0\xintmod{#3}{#1#2}\xint:#1#2\xint:
+}%
+\def\XINT_lcmof:_h
+ \expandafter\XINT_lcmof:_g\romannumeral0\xintmod#1#2\xint:#3\xint:#4,%
+{%
+ \expandafter\XINT_lcmof:_e\romannumeral0\xintiiabs#4\xint:#1\xint:
+}%
+\def\XINT_lcmof:_zero #1^,#2{0/1[0]}%
+% \end{macrocode}
+% \lverb|We need this \romannumeral0 to remove the up-front space token which
+% will be left by \XINT_inv, in case of \csname..\endcsname expansion.|
+% \begin{macrocode}
+\def\XINT_lcmof:_end ^\xint:#1\xint:#2{\romannumeral0\XINT_inv #1}%
+% \end{macrocode}
+% \subsubsection{\csh{xintiiGCDof:csv}, \csh{xintiiLCMof:csv}}
+% \changed{1.1a}{}
+% For \csbxint{iiexpr}. Requires the \xintgcdnameimp provided macros.
+% \begin{macrocode}
+\def\xintiiGCDof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiigcd
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}%
+\def\xintiiLCMof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiilcm
+ \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
+% \end{macrocode}
+% \subsubsection{\csh{XINTinFloatdigits}, \csh{XINTinFloatSqrtdigits},
+% \csh{XINTinFloatFacdigits}, \csh{XINTiLogTendigits}}
+% \lverb|For \xintNewExpr matters, mainly.
+%
+% At 1.3e I add \XINTinFloatSdigits and use it at various places. I also modified
+% \XINTinFloatFac to use S(hort) output format.
+%
+% Also added \XINTiLogTendigits|
+% \begin{macrocode}
+\def\XINTinFloatdigits {\XINTinFloat [\XINTdigits]}%
+\def\XINTinFloatSdigits {\XINTinFloatS [\XINTdigits]}%
+\def\XINTinFloatSqrtdigits {\XINTinFloatSqrt[\XINTdigits]}%
+\def\XINTinFloatFacdigits {\XINTinFloatFac [\XINTdigits]}%
+\def\XINTFloatiLogTendigits{\XINTFloatiLogTen[\XINTdigits]}%
+% \end{macrocode}
+% \subsubsection{\csh{XINTinFloatMaxof:csv}, \csh{XINTinFloatMinof:csv}}
+% \lverb|1.09a. Rewritten for 1.1. For use by \xintfloatexpr. Name changed in
+% 1.09h. Changed at 1.3e to use \XINTinFloatSdigits.|
+% \begin{macrocode}
+\def\XINTinFloatMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmax
+ \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{0[0]}}%
+\def\XINTinFloatMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmin
+ \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{0[0]}}%
+% \end{macrocode}
+% \subsubsection{\csh{XINTinFloatSum:csv}, \csh{XINTinFloatPrd:csv}}
+% \lverb|1.09a. Rewritten for 1.1. For use by \xintfloatexpr. Modified at 1.3e
+% to use \XINTinFloatSdigits.|
+% \begin{macrocode}
+\def\XINTinFloatSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\XINTinfloatadd
+ \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{0[0]}}%
+\def\XINTinFloatPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\XINTinfloatmul
+ \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{1[0]}}%
+% \end{macrocode}
+% \subsection{Auxiliary wrappers for function macros}
+% \begin{macrocode}
+\def\XINT:expr:one:and:opt #1,#2,#3!#4#5%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {#4}{#5[\xintNum{#2}]}{#1}%
+}%
+\def\XINT:expr:tacitzeroifonearg #1,#2,#3!#4#5%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {#4{0}}{#5{\xintNum{#2}}}{#1}%
+}%
+\def\XINT:iiexpr:tacitzeroifonearg #1,#2,#3!#4%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {#4{0}}{#4{#2}}{#1}%
+}%
+\def\XINT:expr:totwo #1#2{#1,#2}%
+\def\XINT:expr:two:to:two #1,#2,!#3%
+{%
+ \expandafter\XINT:expr:totwo\romannumeral`&&@#3{#1}{#2}%
+}%
+\let\XINT:flexpr:two:to:two\XINT:expr:two:to:two
+\let\XINT:iiexpr:two:to:two\XINT:expr:two:to:two
+% \end{macrocode}
+% \def\auxiliarymacro#1{ \noexpand\cshn{#1()}}
+% \edef\zzz{The \xintListWithSep{, }{\xintApply\auxiliarymacro
+% {{num}{reduce}{preduce}{abs}{sgn}{frac}{floor}{ceil}{sqr}{sqrt}{sqrtr}{float}
+% {sfloat}{ilog10}{inv}{round}{trunc}{mod}{quo}{rem}{divmod}{gcd}{lcm}{max}{min}
+% {`+`}
+% {`*`}
+% {?}{!}{not}{all}{any}{xor}{if}{ifsgn}{ifint}{ifone}{even}{odd}{isint}{isone}
+% {first}{last}{len}{reversed}{factorial}{binomial}}}
+% and \noexpand\cshn{randrange()} functions}
+% \expandafter\subsection\expandafter{\zzz}
+% \begin{macrocode}
+\def\XINT_expr_func_num #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintNum{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_num\XINT_expr_func_num
+\let\XINT_iiexpr_func_num\XINT_expr_func_num
+\def\XINT_expr_func_reduce #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintIrr{\XINT_expr_unlock #3}[0]\endcsname
+}%
+\let\XINT_flexpr_func_reduce\XINT_expr_func_reduce
+\def\XINT_expr_func_preduce #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintPIrr{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_preduce\XINT_expr_func_preduce
+\def\XINT_expr_func_abs #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintAbs{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_abs\XINT_expr_func_abs
+\def\XINT_iiexpr_func_abs #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiAbs{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_sgn #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintSgn{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_sgn\XINT_expr_func_sgn
+\def\XINT_iiexpr_func_sgn #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiSgn{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_frac #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintTFrac{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_frac #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\XINTinFloatFracdigits{\XINT_expr_unlock #3}\endcsname
+}%
+% \end{macrocode}
+% \lverb|no \XINT_iiexpr_func_frac|
+% \begin{macrocode}
+\def\XINT_expr_func_floor #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintFloor{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_floor\XINT_expr_func_floor
+% \end{macrocode}
+% \lverb|The floor and ceil functions in \xintiiexpr require protect(a/b) or,
+% better, \qfrac(a/b); else the / will be executed first and do an integer
+% rounded division.|
+% \begin{macrocode}
+\def\XINT_iiexpr_func_floor #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiFloor{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_ceil #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintCeil{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_ceil\XINT_expr_func_ceil
+\def\XINT_iiexpr_func_ceil #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiCeil{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_sqr #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintSqr{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINTinFloatSqr#1{\XINTinFloatMul{#1}{#1}}% revoir après
+\def\XINT_flexpr_func_sqr #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\XINTinFloatSqr{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_iiexpr_func_sqr #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiSqr{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_? #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiIsNotZero{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_? \XINT_expr_func_?
+\let\XINT_iiexpr_func_? \XINT_expr_func_?
+\def\XINT_expr_func_! #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiIsZero{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_! \XINT_expr_func_!
+\let\XINT_iiexpr_func_! \XINT_expr_func_!
+\def\XINT_expr_func_not #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiIsZero{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_not \XINT_expr_func_not
+\let\XINT_iiexpr_func_not \XINT_expr_func_not
+\def\XINT_expr_func_odd #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintOdd{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_odd\XINT_expr_func_odd
+\def\XINT_iiexpr_func_odd #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiOdd{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_even #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintEven{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_even\XINT_expr_func_even
+\def\XINT_iiexpr_func_even #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiEven{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_isint #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintIsInt{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_isint #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintFloatIsInt{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_iiexpr_func_isint\XINT_expr_func_isint % ? perhaps rather always 1
+\def\XINT_expr_func_isone #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintIsOne{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_isone\XINT_expr_func_isone
+\def\XINT_iiexpr_func_isone #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiIsOne{\XINT_expr_unlock #3}\endcsname
+}%
+% REVOIR nuple
+\def\XINT_expr_func_nuple #1#2#3%
+ {\expandafter #1\expandafter #2\csname.=\XINT_expr_unlock #3\endcsname }%
+\let\XINT_flexpr_func_nuple\XINT_expr_func_nuple
+\let\XINT_iiexpr_func_nuple\XINT_expr_func_nuple
+\def\XINT_expr_func_factorial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock#3,,!\xintFac\XINTinFloatFac
+ \endcsname
+}%
+\def\XINT_flexpr_func_factorial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock#3,,!\XINTinFloatFacdigits\XINTinFloatFac
+ \endcsname
+}%
+\def\XINT_iiexpr_func_factorial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiFac{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_sqrt #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock#3,,!\XINTinFloatSqrtdigits\XINTinFloatSqrt
+ \endcsname
+}%
+\let\XINT_flexpr_func_sqrt\XINT_expr_func_sqrt
+\def\XINT_iiexpr_func_sqrt #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiSqrt{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_iiexpr_func_sqrtr #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiSqrtR{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_inv #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintInv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_inv #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\XINTinFloatInv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_round #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:tacitzeroifonearg
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiRound\xintRound
+ \endcsname
+}%
+\let\XINT_flexpr_func_round\XINT_expr_func_round
+\def\XINT_iiexpr_func_round #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:iiexpr:tacitzeroifonearg
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiRound
+ \endcsname
+}%
+\def\XINT_expr_func_trunc #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:tacitzeroifonearg
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiTrunc\xintTrunc
+ \endcsname
+}%
+\let\XINT_flexpr_func_trunc\XINT_expr_func_trunc
+\def\XINT_iiexpr_func_trunc #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:iiexpr:tacitzeroifonearg
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiTrunc
+ \endcsname
+}%
+% \end{macrocode}
+% \lverb|Hesitation at 1.3e about using \XINTinFloatSdigits and \XINTinFloatS.
+% Finally I add a sfloat() function. It helps for xinttrig.sty.|
+% \begin{macrocode}
+\def\XINT_expr_func_float #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\XINTinFloatdigits\XINTinFloat
+ \endcsname
+}%
+\let\XINT_flexpr_func_float\XINT_expr_func_float
+\def\XINT_expr_func_sfloat #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\XINTinFloatSdigits\XINTinFloatS
+ \endcsname
+}%
+\let\XINT_flexpr_func_sfloat\XINT_expr_func_sfloat
+% \XINT_iiexpr_func_sfloat not defined
+\expandafter\def\csname XINT_expr_func_ilog10\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiLogTen\XINTFloatiLogTen
+ \endcsname
+}%
+\expandafter\def\csname XINT_flexpr_func_ilog10\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:one:and:opt
+ \romannumeral`&&@\XINT_expr_unlock #3,,!\XINTFloatiLogTendigits\XINTFloatiLogTen
+ \endcsname
+}%
+\expandafter\def\csname XINT_iiexpr_func_ilog10\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintiiLogTen{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_divmod #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:two:to:two
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintDivMod
+ \endcsname
+}%
+% \end{macrocode}
+% \lverb|\XINTinFloatDivMod a un output déjà comma separated|
+% \begin{macrocode}
+\def\XINT_flexpr_func_divmod #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatDivMod
+ \endcsname
+}%
+\def\XINT_iiexpr_func_divmod #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:two:to:two
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiDivMod
+ \endcsname
+}%
+\def\XINT_expr_func_mod #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintMod
+ \endcsname
+}%
+\def\XINT_flexpr_func_mod #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatMod
+ \endcsname
+}%
+\def\XINT_iiexpr_func_mod #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiMod
+ \endcsname
+}%
+\def\XINT_expr_func_binomial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintBinomial
+ \endcsname
+}%
+\def\XINT_flexpr_func_binomial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatBinomial
+ \endcsname
+}%
+\def\XINT_iiexpr_func_binomial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiBinomial
+ \endcsname
+}%
+\def\XINT_expr_func_pfactorial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintPFactorial
+ \endcsname
+}%
+\def\XINT_flexpr_func_pfactorial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatPFactorial
+ \endcsname
+}%
+\def\XINT_iiexpr_func_pfactorial #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiPFactorial
+ \endcsname
+}%
+\def\XINT_expr_func_randrange #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:expr:randrange
+ \romannumeral`&&@\XINT_expr_unlock #3,,!%
+ \endcsname
+}%
+\let\XINT_flexpr_func_randrange\XINT_expr_func_randrange
+\def\XINT_iiexpr_func_randrange #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:iiexpr:randrange
+ \romannumeral`&&@\XINT_expr_unlock #3,,!%
+ \endcsname
+}%
+\def\XINT:expr:randrange #1,#2,#3!%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\xintiiRandRange{\XINT:NEhook:one\xintNum{#1}}}%
+ {\xintiiRandRangeAtoB{\XINT:NEhook:one\xintNum{#1}}%
+ {\XINT:NEhook:one\xintNum{#2}}}%
+}%
+\def\XINT:iiexpr:randrange #1,#2,#3!%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\xintiiRandRange{#1}}{\xintiiRandRangeAtoB{#1}{#2}}%
+}%
+\def\XINT_expr_func_quo #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiQuo
+ \endcsname
+}%
+\let\XINT_flexpr_func_quo\XINT_expr_func_quo
+\def\XINT_iiexpr_func_quo #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiQuo
+ \endcsname
+}%
+\def\XINT_expr_func_rem #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiRem
+ \endcsname
+}%
+\let\XINT_flexpr_func_rem\XINT_expr_func_rem
+\def\XINT_iiexpr_func_rem #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiRem
+ \endcsname
+}%
+\def\XINT_expr_func_gcd #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintGCDof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_gcd\XINT_expr_func_gcd
+\def\XINT_iiexpr_func_gcd #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintiiGCDof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_lcm #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintLCMof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_lcm\XINT_expr_func_lcm
+\def\XINT_iiexpr_func_lcm #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintiiLCMof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_max #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintMaxof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_iiexpr_func_max #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintiiMaxof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_max #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\XINTinFloatMaxof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_min #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintMinof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_iiexpr_func_min #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintiiMinof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_min #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\XINTinFloatMinof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\expandafter
+\def\csname XINT_expr_func_+\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintSum:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\expandafter
+\def\csname XINT_flexpr_func_+\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\XINTinFloatSum:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\expandafter
+\def\csname XINT_iiexpr_func_+\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintiiSum:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\expandafter
+\def\csname XINT_expr_func_*\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintPrd:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\expandafter
+\def\csname XINT_flexpr_func_*\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\XINTinFloatPrd:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\expandafter
+\def\csname XINT_iiexpr_func_*\endcsname #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintiiPrd:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_all #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintANDof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_all\XINT_expr_func_all
+\let\XINT_iiexpr_func_all\XINT_expr_func_all
+\def\XINT_expr_func_any #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintORof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_any\XINT_expr_func_any
+\let\XINT_iiexpr_func_any\XINT_expr_func_any
+\def\XINT_expr_func_xor #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintXORof:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_xor\XINT_expr_func_xor
+\let\XINT_iiexpr_func_xor\XINT_expr_func_xor
+\def\XINT_expr_func_len #1#2#3%
+{%
+ \expandafter#1\expandafter#2\csname.=%
+ \XINT:NEhook:csv\xintLength:f:csv{\XINT_expr_unlock#3}\endcsname
+}%
+\let\XINT_flexpr_func_len \XINT_expr_func_len
+\let\XINT_iiexpr_func_len \XINT_expr_func_len
+% \end{macrocode}
+% \lverb|1.2k has \xintFirstItem:f:csv for improved
+% \xintNewExpr compatibility.|
+% \begin{macrocode}
+\def\XINT_expr_func_first #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintFirstItem:f:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_first\XINT_expr_func_first
+\let\XINT_iiexpr_func_first\XINT_expr_func_first
+% \end{macrocode}
+% \lverb|1.2k has \xintLastItem:f:csv for efficiency and improved
+% \xintNewExpr compatibility.|
+% \begin{macrocode}
+\def\XINT_expr_func_last #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintLastItem:f:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_last\XINT_expr_func_last
+\let\XINT_iiexpr_func_last\XINT_expr_func_last
+% \end{macrocode}
+% \lverb|1.2c I hesitated but left the function "reversed" from 1.1 with
+% this name, not "reverse". But the inner not public macro got renamed
+% into \xintReverse::csv. 1.2g opts for the name \xintReverse:f:csv, and
+% rewrites it for direct handling of csv lists. 2016/03/17.|
+% \begin{macrocode}
+\def\XINT_expr_func_reversed #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:csv\xintReverse:f:csv{\XINT_expr_unlock #3}\endcsname
+}%
+\let\XINT_flexpr_func_reversed\XINT_expr_func_reversed
+\let\XINT_iiexpr_func_reversed\XINT_expr_func_reversed
+\def\xintiiifNotZero: #1,#2,#3,{\xintiiifNotZero{#1}{#2}{#3}}%
+\def\XINT_expr_func_if #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\xintiiifNotZero:%
+ \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+}%
+\let\XINT_flexpr_func_if\XINT_expr_func_if
+\let\XINT_iiexpr_func_if\XINT_expr_func_if
+\def\xintifInt: #1,#2,#3,{\xintifInt{#1}{#2}{#3}}%
+\def\XINT_expr_func_ifint #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\xintifInt:%
+ \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+}%
+\let\XINT_iiexpr_func_ifint\XINT_expr_func_ifint
+\def\xintifFloatInt: #1,#2,#3,{\xintifFloatInt{#1}{#2}{#3}}%
+\def\XINT_flexpr_func_ifint #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\xintifFloatInt:%
+ \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+}%
+\def\xintifOne: #1,#2,#3,{\xintifOne{#1}{#2}{#3}}%
+\def\XINT_expr_func_ifone #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\xintifOne:%
+ \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+}%
+\let\XINT_flexpr_func_ifone\XINT_expr_func_ifone
+\def\xintiiifOne: #1,#2,#3,{\xintiiifOne{#1}{#2}{#3}}%
+\def\XINT_iiexpr_func_ifone #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\xintiiifOne:%
+ \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+}%
+\def\xintiiifSgn: #1,#2,#3,#4,{\xintiiifSgn{#1}{#2}{#3}{#4}}%
+\def\XINT_expr_func_ifsgn #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\xintiiifSgn:%
+ \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+}%
+\let\XINT_flexpr_func_ifsgn\XINT_expr_func_ifsgn
+\let\XINT_iiexpr_func_ifsgn\XINT_expr_func_ifsgn
+% \end{macrocode}
+% \subsection{f-expandable versions of the \cshnolabel{xintSeqB::csv} and alike
+% routines, for \cshnolabel{xintNewExpr}}
+% \localtableofcontents
+% \subsubsection{\csh{xintSeqB:f:csv}}
+% \lverb|Produces in f-expandable way. If the step is zero, gives empty result
+% except if start and end coincide.|
+% \begin{macrocode}
+\def\xintSeqB:f:csv #1#2%
+ {\expandafter\XINT_seqb:f:csv \expandafter{\romannumeral0\xintraw{#2}}{#1}}%
+\def\XINT_seqb:f:csv #1#2{\expandafter\XINT_seqb:f:csv_a\romannumeral`&&@#2#1!}%
+\def\XINT_seqb:f:csv_a #1#2;#3;#4!{%
+ \expandafter\xint_gobble_i\romannumeral`&&@%
+ \xintifCmp {#3}{#4}\XINT_seqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_seqb:f:csv_bg
+ #1{#3}{#4}{}{#2}}%
+\def\XINT_seqb:f:csv_be #1#2#3#4#5{,#2}%
+\def\XINT_seqb:f:csv_bl #1{\if #1p\expandafter\XINT_seqb:f:csv_pa\else
+ \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
+\def\XINT_seqb:f:csv_pa #1#2#3#4{\expandafter\XINT_seqb:f:csv_p\expandafter
+ {\romannumeral0\xintadd{#4}{#1}}{#2}{#3,#1}{#4}}%
+\def\XINT_seqb:f:csv_p #1#2%
+{%
+ \xintifCmp {#1}{#2}\XINT_seqb:f:csv_pa\XINT_seqb:f:csv_pb\XINT_seqb:f:csv_pc
+ {#1}{#2}%
+}%
+\def\XINT_seqb:f:csv_pb #1#2#3#4{#3,#1}%
+\def\XINT_seqb:f:csv_pc #1#2#3#4{#3}%
+\def\XINT_seqb:f:csv_bg #1{\if #1n\expandafter\XINT_seqb:f:csv_na\else
+ \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
+\def\XINT_seqb:f:csv_na #1#2#3#4{\expandafter\XINT_seqb:f:csv_n\expandafter
+ {\romannumeral0\xintadd{#4}{#1}}{#2}{#3,#1}{#4}}%
+\def\XINT_seqb:f:csv_n #1#2%
+{%
+ \xintifCmp {#1}{#2}\XINT_seqb:f:csv_nc\XINT_seqb:f:csv_nb\XINT_seqb:f:csv_na
+ {#1}{#2}%
+}%
+\def\XINT_seqb:f:csv_nb #1#2#3#4{#3,#1}%
+\def\XINT_seqb:f:csv_nc #1#2#3#4{#3}%
+% \end{macrocode}
+%\subsubsection{\csh{xintiiSeqB:f:csv}}
+% \lverb|Produces in f-expandable way. If the step is zero, gives empty result
+% except if start and end coincide.
+%
+% 2015/11/11. I correct a typo dating back to release 1.1 (2014/10/29): the
+% macro name had a "b" rather than "B", hence was not functional (causing
+% \xintNewIIExpr to fail on inputs such as #1..[1]..#2).|
+% \begin{macrocode}
+\def\xintiiSeqB:f:csv #1#2%
+ {\expandafter\XINT_iiseqb:f:csv \expandafter{\romannumeral`&&@#2}{#1}}%
+\def\XINT_iiseqb:f:csv #1#2{\expandafter\XINT_iiseqb:f:csv_a\romannumeral`&&@#2#1!}%
+\def\XINT_iiseqb:f:csv_a #1#2;#3;#4!{%
+ \expandafter\xint_gobble_i\romannumeral`&&@%
+ \xintSgnFork{\XINT_Cmp {#3}{#4}}%
+ \XINT_iiseqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_iiseqb:f:csv_bg
+ #1{#3}{#4}{}{#2}}%
+\def\XINT_iiseqb:f:csv_bl #1{\if #1p\expandafter\XINT_iiseqb:f:csv_pa\else
+ \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
+\def\XINT_iiseqb:f:csv_pa #1#2#3#4{\expandafter\XINT_iiseqb:f:csv_p\expandafter
+ {\romannumeral0\xintiiadd{#4}{#1}}{#2}{#3,#1}{#4}}%
+\def\XINT_iiseqb:f:csv_p #1#2%
+{%
+ \xintSgnFork{\XINT_Cmp {#1}{#2}}%
+ \XINT_iiseqb:f:csv_pa\XINT_iiseqb:f:csv_pb\XINT_iiseqb:f:csv_pc {#1}{#2}%
+}%
+\def\XINT_iiseqb:f:csv_pb #1#2#3#4{#3,#1}%
+\def\XINT_iiseqb:f:csv_pc #1#2#3#4{#3}%
+\def\XINT_iiseqb:f:csv_bg #1{\if #1n\expandafter\XINT_iiseqb:f:csv_na\else
+ \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
+\def\XINT_iiseqb:f:csv_na #1#2#3#4{\expandafter\XINT_iiseqb:f:csv_n\expandafter
+ {\romannumeral0\xintiiadd{#4}{#1}}{#2}{#3,#1}{#4}}%
+\def\XINT_iiseqb:f:csv_n #1#2%
+{%
+ \xintSgnFork{\XINT_Cmp {#1}{#2}}%
+ \XINT_seqb:f:csv_nc\XINT_seqb:f:csv_nb\XINT_iiseqb:f:csv_na {#1}{#2}%
+}%
+% \end{macrocode}
+%\subsubsection{\csh{XINTinFloatSeqB:f:csv}}
+% \lverb|Produces in f-expandable way. If the step is zero, gives empty result
+% except if start and end coincide. This is all for \xintNewExpr.|
+% \begin{macrocode}
+\def\XINTinFloatSeqB:f:csv #1#2{\expandafter\XINT_flseqb:f:csv \expandafter
+ {\romannumeral0\XINTinfloat [\XINTdigits]{#2}}{#1}}%
+\def\XINT_flseqb:f:csv #1#2{\expandafter\XINT_flseqb:f:csv_a\romannumeral`&&@#2#1!}%
+\def\XINT_flseqb:f:csv_a #1#2;#3;#4!{%
+ \expandafter\xint_gobble_i\romannumeral`&&@%
+ \xintifCmp {#3}{#4}\XINT_flseqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_flseqb:f:csv_bg
+ #1{#3}{#4}{}{#2}}%
+\def\XINT_flseqb:f:csv_bl #1{\if #1p\expandafter\XINT_flseqb:f:csv_pa\else
+ \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
+\def\XINT_flseqb:f:csv_pa #1#2#3#4{\expandafter\XINT_flseqb:f:csv_p\expandafter
+ {\romannumeral0\XINTinfloatadd{#4}{#1}}{#2}{#3,#1}{#4}}%
+\def\XINT_flseqb:f:csv_p #1#2%
+{%
+ \xintifCmp {#1}{#2}%
+ \XINT_flseqb:f:csv_pa\XINT_flseqb:f:csv_pb\XINT_flseqb:f:csv_pc {#1}{#2}%
+}%
+\def\XINT_flseqb:f:csv_pb #1#2#3#4{#3,#1}%
+\def\XINT_flseqb:f:csv_pc #1#2#3#4{#3}%
+\def\XINT_flseqb:f:csv_bg #1{\if #1n\expandafter\XINT_flseqb:f:csv_na\else
+ \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
+\def\XINT_flseqb:f:csv_na #1#2#3#4{\expandafter\XINT_flseqb:f:csv_n\expandafter
+ {\romannumeral0\XINTinfloatadd{#4}{#1}}{#2}{#3,#1}{#4}}%
+\def\XINT_flseqb:f:csv_n #1#2%
+{%
+ \xintifCmp {#1}{#2}%
+ \XINT_seqb:f:csv_nc\XINT_seqb:f:csv_nb\XINT_flseqb:f:csv_na {#1}{#2}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintdeffunc}, \csh{xintdefiifunc},
+% \csh{xintdeffloatfunc}}
+%
+% \changed{1.2c}{2015/11/12}
+% \lverb|Note: it is possible to have same name assigned both to a variable
+% and a function: things such as add(f(f), f=1..10) are possible.|
+%
+% \changed{1.2f}{2016/03/08}
+% \lverb|Comma separated expressions allowed (formerly this required using
+% parenthesis \xintdeffunc foo(x,..):=(.., .., ..);|
+%
+% \changed{1.3c}{2018/06/17}
+% \lverb|Usage of \xintexprSafeCatcodes to be compatible with an active
+% semi-colon at time of use; the colon was not a problem (see ##3) already.|
+%
+% \begin{macrocode}
+\def\XINT_tmpa #1#2#3#4%
+{%
+ \def #1##1(##2)##3=##4;{%
+ \edef\XINT_deffunc_tmpa {##1}%
+ \edef\XINT_deffunc_tmpa {\xint_zapspaces_o \XINT_deffunc_tmpa}%
+ \def\XINT_deffunc_tmpb {0}%
+ \def\XINT_deffunc_tmpc {(##4)}%
+ \edef\XINT_deffunc_tmpd {##2}%
+ \ifnum\xintLength:f:csv{\XINT_deffunc_tmpd}>\xint_c_
+ \xintFor ####1 in {\XINT_deffunc_tmpd}\do
+ {\edef\XINT_deffunc_tmpb {\the\numexpr\XINT_deffunc_tmpb+\xint_c_i}%
+ \edef\XINT_deffunc_tmpc {subs(\unexpanded\expandafter{\XINT_deffunc_tmpc},%
+ ####1=################\XINT_deffunc_tmpb)}%
+ }%
+ \fi
+% \end{macrocode}
+% \lverb|Something like this must be done before the NewFunc, else recursive
+% definitions are impossible as the function will be unknown.|
+% \begin{macrocode}
+ \ifnum\XINT_deffunc_tmpb=\xint_c_
+ \expandafter\XINT_expr_defuserfunc_none\csname
+ \else
+ \expandafter\XINT_expr_defuserfunc\csname
+ \fi
+ XINT_#2_func_\XINT_deffunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_deffunc_tmpa}{#2}%
+ \expandafter#3\csname XINT_#2_userfunc_\XINT_deffunc_tmpa\endcsname
+ [\XINT_deffunc_tmpb]{\XINT_deffunc_tmpc}%
+ \ifxintverbose\xintMessage {xintexpr}{Info}
+ {Function \XINT_deffunc_tmpa\space for \string\xint #4 parser
+ associated to \string\XINT_#2_userfunc_\XINT_deffunc_tmpa\space
+ with \ifxintglobaldefs global \fi meaning \expandafter\meaning
+ \csname XINT_#2_userfunc_\XINT_deffunc_tmpa\endcsname}%
+ \fi
+ \xintexprRestoreCatcodes
+ }%
+}%
+\def\xintdeffunc {\xintexprSafeCatcodes\xintdeffunc_a}%
+\def\xintdefiifunc {\xintexprSafeCatcodes\xintdefiifunc_a}%
+\def\xintdeffloatfunc {\xintexprSafeCatcodes\xintdeffloatfunc_a}%
+\XINT_tmpa\xintdeffunc_a {expr} \XINT_NewFunc {expr}%
+\XINT_tmpa\xintdefiifunc_a {iiexpr}\XINT_NewIIFunc {iiexpr}%
+\XINT_tmpa\xintdeffloatfunc_a{flexpr}\XINT_NewFloatFunc{floatexpr}%
+\def\XINT_expr_defuserfunc #1#2#3%
+{%
+ \XINT_global
+ \def #1##1##2##3{\expandafter ##1\expandafter ##2%
+ \csname.=\XINT:expr:userfunc{#3}{#2}{\XINT_expr_unlock ##3}\endcsname
+ }%
+}%
+\def\XINT:expr:userfunc #1#2#3%
+{%
+ \csname XINT_#1_userfunc_#2\expandafter\endcsname
+ \romannumeral0\xintcsvtolistnonstripped{#3}%
+}%
+\def\XINT_expr_defuserfunc_none #1#2#3%
+{%
+ \XINT_global
+ \def #1##1##2##3{\expandafter ##1\expandafter ##2%
+ \csname.=\XINT:expr:userfunc:none{#3}{#2}\endcsname
+ }%
+}%
+\def\XINT:expr:userfunc:none #1#2{\csname XINT_#1_userfunc_#2\endcsname}%
+% \end{macrocode}
+% \subsection{\csh{xintdefefunc}, \csh{xintdefiiefunc}, \csh{xintdeffloatefunc}}
+% \lverb|Added at 1.3e. Please consider the whole business of \xintdeffunc,
+% \xintdefefunc, \xintNewExpr as somewhat like a work in progress, it is
+% complex indeed.|
+% \begin{macrocode}
+\def\XINT_tmpa #1#2#3#4%
+{%
+ \def #1##1(##2)##3=##4;{%
+ \edef\XINT_defefunc_tmpa {##1}%
+ \edef\XINT_defefunc_tmpa {\xint_zapspaces_o \XINT_defefunc_tmpa}%
+ \def\XINT_defefunc_tmpb {0}%
+ \def\XINT_defefunc_tmpc {(##4)}%
+ \edef\XINT_defefunc_tmpd {##2}%
+ \ifnum\xintLength:f:csv{\XINT_defefunc_tmpd}>\xint_c_
+ \xintFor ####1 in {\XINT_defefunc_tmpd}\do
+ {\edef\XINT_defefunc_tmpb {\the\numexpr\XINT_defefunc_tmpb+\xint_c_i}%
+ \edef\XINT_defefunc_tmpc {subs(\unexpanded\expandafter{\XINT_defefunc_tmpc},%
+ ####1=################\XINT_defefunc_tmpb)}%
+ }%
+ \fi
+% \end{macrocode}
+% \lverb|No recursivity allowed here with the function to be defined.|
+% \begin{macrocode}
+ \expandafter#3\csname XINT_#2_userefunc_\XINT_defefunc_tmpa\endcsname
+ [\XINT_defefunc_tmpb]{\XINT_defefunc_tmpc}%
+ \edef\XINT_defefunc_tmpd{\xintLength:f:csv
+ {\expandafter\meaning\csname
+ XINT_#2_userfunc_\XINT_defefunc_tmpa\endcsname}}%
+% \end{macrocode}
+% \lverb|We try to distinguish wheter the function is supposed to deliver only
+% one value or more than two. And we separate the cases of 0, 1 or 2 variables
+% which can be set-up a bit better for usage in other definitions, in
+% generator environments. But there are many shortcomings. I don't have a very
+% clear view of all the complex situation, in fact.
+% |
+% \begin{macrocode}
+ \ifcase\XINT_defefunc_tmpb\space
+ \expandafter\XINT_expr_defuserefunc_none\csname
+ \or
+% \ifnum\XINT_defefunc_tmpd=\xint_c_i
+ \expandafter\XINT_expr_defuserefunc_one\csname
+% \else
+% \expandafter\XINT_expr_defuserefunc_onetocsv\csname
+% \fi
+ \or
+% \ifnum\XINT_defefunc_tmpd=\xint_c_i
+ \expandafter\XINT_expr_defuserefunc_two\csname
+% \else
+% \expandafter\XINT_expr_defuserefunc_twotocsv\csname
+% \fi
+ \else
+% \ifnum\XINT_defefunc_tmpd=\xint_c_i
+ \expandafter\XINT_expr_defuserefunc_many\csname
+% \else
+% \expandafter\XINT_expr_defuserefunc_manytocsv\csname
+% \fi
+ \fi
+ XINT_#2_func_\XINT_defefunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_defefunc_tmpa}{#2}%
+ \ifxintverbose\xintMessage {xintexpr}{Info}
+ {Function \XINT_defefunc_tmpa\space for \string\xint #4 parser
+ associated to \string\XINT_#2_userefunc_\XINT_defefunc_tmpa\space
+ with \ifxintglobaldefs global \fi meaning \expandafter\meaning
+ \csname XINT_#2_userefunc_\XINT_defefunc_tmpa\endcsname}%
+ \fi
+ \xintexprRestoreCatcodes
+ }%
+}%
+\def\xintdefefunc {\xintexprSafeCatcodes\xintdefefunc_a}%
+\def\xintdefiiefunc {\xintexprSafeCatcodes\xintdefiiefunc_a}%
+\def\xintdeffloatefunc {\xintexprSafeCatcodes\xintdeffloatefunc_a}%
+\XINT_tmpa\xintdefefunc_a {expr} \XINT_NewFunc {expr}%
+\XINT_tmpa\xintdefiiefunc_a {iiexpr}\XINT_NewIIFunc {iiexpr}%
+\XINT_tmpa\xintdeffloatefunc_a{flexpr}\XINT_NewFloatFunc{floatexpr}%
+\def\XINT_expr_defuserefunc_none #1#2#3%
+{%
+ \expandafter\XINT_expr_defuserefunc_none_a
+ \csname XINT_#3_userefunc_#2\endcsname
+}%
+\def\XINT_expr_defuserefunc_none_a #1#2%
+{%
+ \XINT_global
+ \def #2##1##2##3{\expandafter ##1\expandafter ##2\csname.=#1\endcsname}%
+}%
+% \end{macrocode}
+% \lverb|Je définis une macro auxiliaire qui fait l'expansion mais tout cela
+% pour éviter le très léger overhead de \xintExpandArgs... c'est idiot et le
+% devient encore plus pour deux arguments. Mais c'est aussi dû à
+% \xintApply::csv que l'on veut utiliser commodément
+% dans \XINT:NE:userefunc:one_a.|
+% \begin{macrocode}
+\def\XINT_expr_defuserefunc_one #1#2#3%
+{%
+ \expandafter\XINT_expr_defuserefunc_one_a
+ \csname XINT_#3_userefunc_#2\expandafter\endcsname
+ \csname XINT_#3_userefunc:f_#2\endcsname #1{#2}{#3}%
+}%
+\def\XINT_expr_defuserefunc_one_a #1#2#3#4#5%
+{%
+ \XINT_global
+ \def #2##1{\expandafter#1\expandafter{\romannumeral`&&@##1}}%
+ \XINT_global
+ \def #3##1##2##3%
+ {%
+ \expandafter ##1\expandafter ##2%
+ \csname.=\XINT:expr:userefunc:one{#5}{#4}{\XINT_expr_unlock##3}\endcsname
+ }%
+}%
+\def\XINT:expr:userefunc:one #1#2#3%
+{%
+ \csname XINT_#1_userefunc_#2\expandafter\endcsname\expandafter
+ {\romannumeral`&&@#3}%
+}%
+\def\XINT_expr_defuserefunc_two #1#2#3%
+{%
+ \expandafter\XINT_expr_defuserefunc_two_a
+ \csname XINT_#3_userefunc:f_#2\endcsname #1{#2}{#3}%
+}%
+% \end{macrocode}
+% \lverb|Le fait que \xintExpandArgs demande que les arguments sont regroupés
+% explique pourquoi plus bas j'ai dû faire \XINT:NE:userefunc:two.
+%
+% \xintExpandArgs#1{{##1}{##2}}
+%
+% Mais bon finalement je rajouter encore un helper d'expansion. Que j'ai
+% peut-être d'ailleurs déjà... C'est un peu de l'abus la macro auxiliaire
+% userefunc:f pour chaque userefunc, mais je dois gérer le problème que les
+% noms de macros ici peuvent contenir des chiffres.
+%
+% Il y a de la perte dans le grabbing de l'argument qui aura lieu et qu'on
+% pourrait optimiser, mais je commence à sérieusement fatiguer pour 1.3e.|
+% \begin{macrocode}
+\def\XINT_expr_defuserefunc_two_a #1#2#3#4%
+{%
+ \XINT_global
+ \def #1##1##2{\xintExpandArgs{XINT_#4_userefunc_#3}{{##1}{##2}}}%
+ \XINT_global
+ \def #2##1##2##3%
+ {%
+ \expandafter ##1\expandafter ##2%
+ \csname.=\XINT:expr:userefunc:two{#4}{#3}{\XINT_expr_unlock##3}\endcsname
+ }%
+}%
+\def\XINT:expr:userefunc:two #1#2#3%
+{%
+ \expandafter\XINT:expr:userefunc:two_a
+ \csname XINT_#1_userefunc_#2\expandafter\endcsname
+ \romannumeral`&&@#3,%
+}%
+\def\XINT:expr:userefunc:two_a #1#2,#3,{#1{#2}{#3}}%
+% \end{macrocode}
+% \lverb|Paradoxically the general case is code faster. But this is explained
+% because we try to hook into special handlers for one or two variables (see
+% "Mysterious stuff" subsection in NewExpr.|
+% \begin{macrocode}
+\def\XINT_expr_defuserefunc_many #1#2#3%
+{%
+ \XINT_global
+ \def #1##1##2##3%
+ {%
+ \expandafter ##1\expandafter ##2%
+ \csname.=\XINT:expr:userefunc{#3}{#2}{\XINT_expr_unlock##3}\endcsname
+ }%
+}%
+\def\XINT:expr:userefunc #1#2#3%
+{%
+ \csname XINT_#1_userefunc_#2\expandafter\endcsname
+ \romannumeral0\xintcsvtolistnonstripped{#3}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintunassignexprfunc}, \csh{xintunassigniiexprfunc}, \csh{xintunassignfloatexprfunc}}
+% See the \csbxint{unassignvar} for the embarrassing explanations why I had
+% not done that earlier. A bit lazy here, no warning if undefining something
+% not defined, and attention no precaution respective built-in functions.
+% \begin{macrocode}
+\def\XINT_tmpa #1{\expandafter\def\csname xintunassign#1func\endcsname ##1{%
+ \edef\XINT_unfunc_tmpa{##1}%
+ \edef\XINT_unfunc_tmpa {\xint_zapspaces_o\XINT_unfunc_tmpa}%
+ \XINT_global\expandafter
+ \let\csname XINT_#1_func_\XINT_unfunc_tmpa\endcsname\xint_undefined
+ \XINT_global\expandafter
+ \let\csname XINT_#1_userfunc_\XINT_unfunc_tmpa\endcsname\xint_undefined
+ \XINT_global\expandafter
+ \let\csname XINT_#1_userefunc_\XINT_unfunc_tmpa\endcsname\xint_undefined
+ \ifxintverbose\xintMessage {xintexpr}{Info}
+ {Function \XINT_unfunc_tmpa\space for \string\xint #1 parser now
+ \ifxintglobaldefs globally \fi undefined.}%
+ \fi}}%
+\XINT_tmpa{expr}\XINT_tmpa{iiexpr}\XINT_tmpa{floatexpr}%
+% \end{macrocode}
+% \subsection{\csh{xintNewFunction}}
+% \lverb|1.2h (2016/11/20). Syntax is \xintNewFunction{<name>}[nb of
+% arguments]{expression with #1, #2,... as in \xintNewExpr}. This defines
+% a function for all three parsers but the expression parsing is delayed until
+% function execution. Hence the expression admits all constructs, contrarily
+% to \xintNewExpr or \xintdeffunc.
+%
+% |
+% \begin{macrocode}
+\def\XINT_expr_wrapit #1{\expandafter\XINT_expr_wrap\csname.=#1\endcsname}%
+\def\xintNewFunction #1#2[#3]#4%
+{%
+ \edef\XINT_newfunc_tmpa {#1}%
+ \edef\XINT_newfunc_tmpa {\xint_zapspaces_o \XINT_newfunc_tmpa}%
+ \def\XINT_newfunc_tmpb ##1##2##3##4##5##6##7##8##9{#4}%
+ \begingroup
+ \ifcase #3\relax
+ \toks0{}%
+ \or \toks0{##1}%
+ \or \toks0{##1##2}%
+ \or \toks0{##1##2##3}%
+ \or \toks0{##1##2##3##4}%
+ \or \toks0{##1##2##3##4##5}%
+ \or \toks0{##1##2##3##4##5##6}%
+ \or \toks0{##1##2##3##4##5##6##7}%
+ \or \toks0{##1##2##3##4##5##6##7##8}%
+ \else \toks0{##1##2##3##4##5##6##7##8##9}%
+ \fi
+ \expandafter
+ \endgroup\expandafter
+ \XINT_global\expandafter
+ \def\csname XINT_expr_macrofunc_\XINT_newfunc_tmpa\expandafter\endcsname
+ \the\toks0\expandafter{\XINT_newfunc_tmpb
+ {\XINT_expr_wrapit{##1}}{\XINT_expr_wrapit{##2}}{\XINT_expr_wrapit{##3}}%
+ {\XINT_expr_wrapit{##4}}{\XINT_expr_wrapit{##5}}{\XINT_expr_wrapit{##6}}%
+ {\XINT_expr_wrapit{##7}}{\XINT_expr_wrapit{##8}}{\XINT_expr_wrapit{##9}}}%
+ \expandafter\XINT_expr_newfunction
+ \csname XINT_expr_func_\XINT_newfunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_newfunc_tmpa}{eval}\xintbareeval
+ \expandafter\XINT_expr_newfunction
+ \csname XINT_iiexpr_func_\XINT_newfunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_newfunc_tmpa}{iieval}\xintbareiieval
+ \expandafter\XINT_expr_newfunction
+ \csname XINT_flexpr_func_\XINT_newfunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_newfunc_tmpa}{floateval}\xintbarefloateval
+ \ifxintverbose
+ \xintMessage {xintexpr}{Info}
+ {Function \XINT_newfunc_tmpa\space for the expression parsers is
+ associated to \string\XINT_expr_macrofunc_\XINT_newfunc_tmpa\space
+ with \ifxintglobaldefs global \fi meaning \expandafter\meaning
+ \csname XINT_expr_macrofunc_\XINT_newfunc_tmpa\endcsname}%
+ \fi
+}%
+\def\XINT_expr_newfunction #1#2#3#4%
+{%
+ \XINT_global
+ \def#1##1##2##3{\expandafter ##1\expandafter ##2\romannumeral0%
+ \XINT:expr:macrofunc{#4}{#3}{#2}{\XINT_expr_unlock##3}}%
+}%
+\def\XINT:expr:macrofunc #1#2#3#4%
+{%
+ #1\csname XINT_expr_macrofunc_#3\expandafter\endcsname
+ \romannumeral0\xintcsvtolistnonstripped{#4}\relax
+}%
+\catcode`~ 12
+\def\XINT:newexpr:macrofunc #1{%
+\def\XINT:newexpr:macrofunc ##1##2##3##4%
+{%
+ \expandafter#1\csname.=~XINT:newexpr:macrofunc:a{##2}{##3}%
+ {\xintCSVtoListNonStripped{##4}}\endcsname
+}%
+}\XINT:newexpr:macrofunc { }%
+\catcode`~ 3
+\def\XINT:newexpr:macrofunc:a #1#2#3%
+{%
+ \expandafter\XINT_expr_unlock\romannumeral0\csname xintbare#1\endcsname
+ \csname XINT_expr_macrofunc_#2\endcsname#3\relax
+}%
+% \end{macrocode}
+% \subsection{\csh{xintNewExpr}, \csh{xintNewIExpr}, \csh{xintNewFloatExpr},
+% \csh{xintNewIIExpr}}
+% \localtableofcontents
+% \lverb|&
+% There was an \xintNewExpr already in 1.07 from May 2013, which was
+% modified in September 2013 to work with the # macro parameter character,
+% and then refactored into a more powerful version in June 2014 for 1.1
+% release of 2014/10/28. List handling causes special
+% challenges, addressed by \xintApply::csv, \xintApply:::csv, ... next.
+%
+% Comments finally added 2015/12/11 (with later edits):
+%
+% The whole point is to expand completely macros when they have only numerical
+% arguments and to inhibit this expansion if not. This is done in a recursive
+% way: the catcode 12 ~ is used to register a macro name whose expansion must
+% be inhibited. Any argument itself starting with such a ~ will
+% force use of ~ for the macro which receives it.
+%
+% In this context the catcode 12 $$ is used to signal a "virtual
+% list" argument. It triggers insertion of \xintApply::csv or
+% \xintApply:::csv for delayed handling later. This succeeds into handling
+% inputs such as [#1..[#2]..#3][#4:#5]...
+%
+% A final
+% \scantokens converts the "~" prefixed names into real control sequences.
+%
+% For this whole mechanism we need to have everything expressed using
+% exclusively f-expandable macros. We avoid \csname...\endcsname like
+% construct, but if absolutely needed perhaps we will do it ultimately.
+%
+% For the iterating loops seq, iter, etc..., and dummy variables, we have no
+% macros to our disposal to handle the case where the list
+% of indices is not explicit. Moreover omit, abort, break can not work with
+% non numerical data. Thus the whole mechanism is currently not appicable to
+% them. It does work when the macro parameters (or variables for \xintdeffunc)
+% do not intervene in the list of values to iterate over. But we can not delay
+% expansion of dummy variables.
+%
+% Comments added 2018/02/28:
+%
+% At 1.3 of February 2018, there was important refactoring. Earlier,
+% \XINT_expr_redefinemacros was a very big macro which made aliases of the
+% dozens of macros (most from xintfrac and some defined especially by xintexpr
+% for acting on csv lists primarily) involved in the expression rendering and
+% then redefined them all to expand to their original selves only when applied
+% to purely numeric arguments. At 1.3 only very few such re-definitions are
+% made, as what is redefined are a limited number of core wrapper macros.
+%
+% Only when the original macros have one or two arguments is it examined if
+% they can expand immediately (this includes case of function having possibly
+% only one, or possibly two arguments). For macros applying to three or more
+% or an undefined number of arguments, we don't complicate matters into
+% checking if expansion is possible, and we delay that expansion
+% automatically (but if() and ifsgn() do check if first argument is numeric
+% and expand to suitable branch in that case).
+%
+% In particular any function defined by \xintdeffunc or \xintNewFunction (it
+% is then basically only a macro abstraction) when used in new function
+% definitions will never be expanded immediately, because the detection of
+% whether they are applied to only numerical data has not yet been added.
+% (this might be added in future).
+%
+% Some aspects of the 1.3 refactoring have made recursive definition via
+% \xintdeffunc possible (of course they always were via \xintNewFunction as
+% the latter is but a wrapper of a standard TeX macro definition, where
+% \xintexpr parsing is not at all involved).
+%
+% A somewhat complicated layer (not modified at 1.3) is devoted to making
+% possible the parsing of constructs such as [#1..[#2]..#3][#4:#5] or
+% [#1..#2]*#3 and it seems to work. At 1.3, even esoteric construct such as
+% [divmod(#1,#2)]*#3 is parsable by \xintNewExpr. (In \xintNewFloatExpr, don't
+% forget \empty token so that square brackets are not mistaken for optional
+% argument of \xintthefloatexpr; same for \xintdeffloatfunc.)
+%
+% Side note: I wonder if I really had a good idea to define these list
+% operations [..]*foo or foo^[...] which do not seem to occur in other
+% languages with the meanings I used. And they caused me lots of efforts for
+% support at \xintNewExpr level...
+%
+% The catcode 12 dollar sign is used to signal when a macro can not be
+% expanded but would produce a csv list. Furthermore some cases require
+% f-expandable macros as the original code expanding in \xintexpr is in
+% \csname context and did not need f-expandability.
+%
+% As mentioned above, currently syntax with dummy variables can not go through
+% where the values iterated over are not explicit; and omit, abort, break
+% mechanisms are not parsable with non purely numerical data, in part because
+% they are not implemented internally via pure f-expansion.
+% |
+% \subsubsection{\csh{xintApply::csv} and \csh{xintApply:::csv}}
+% \lverb|Serve in particular to support things such as
+%
+% \xintdeffunc foo(x):=seq(sqr(i), i=0..x);
+%
+% ... as far as I still understand what is going on here! The most complicated
+% is for list operations; many things involving sequences don't go through
+% \xintNewExpr, especially with functions of more than one variable.
+%
+% |
+% \begin{macrocode}
+\def\xintApply::csv #1#2%
+ {\expandafter\XINT_applyon::_a\expandafter {\romannumeral`&&@#2}{#1}}%
+\def\XINT_applyon::_a #1#2{\XINT_applyon::_b {#2}{}#1,,}%
+\def\XINT_applyon::_b #1#2#3,{\expandafter\XINT_applyon::_c \romannumeral`&&@#3,{#1}{#2}}%
+\def\XINT_applyon::_c #1{\if #1,\expandafter\XINT_applyon::_end
+ \else\expandafter\XINT_applyon::_d\fi #1}%
+\def\XINT_applyon::_d #1,#2{\expandafter\XINT_applyon::_e\romannumeral`&&@#2{#1},{#2}}%
+\def\XINT_applyon::_e #1,#2#3{\XINT_applyon::_b {#2}{#3, #1}}%
+\def\XINT_applyon::_end #1,#2#3{\xint_secondoftwo #3}%
+\def\xintApply:::csv #1#2#3%
+ {\expandafter\XINT_applyon:::_a\expandafter{\romannumeral`&&@#2}{#1}{#3}}%
+\def\XINT_applyon:::_a #1#2#3{\XINT_applyon:::_b {#2}{#3}{}#1,,}%
+\def\XINT_applyon:::_b #1#2#3#4,%
+ {\expandafter\XINT_applyon:::_c \romannumeral`&&@#4,{#1}{#2}{#3}}%
+\def\XINT_applyon:::_c #1{\if #1,\expandafter\XINT_applyon:::_end
+ \else\expandafter\XINT_applyon:::_d\fi #1}%
+\def\XINT_applyon:::_d #1,#2#3%
+ {\expandafter\XINT_applyon:::_e\expandafter
+ {\romannumeral`&&@\xintApply::csv {#2{#1}}{#3}},{#2}{#3}}%
+\def\XINT_applyon:::_e #1,#2#3#4{\XINT_applyon:::_b {#2}{#3}{#4, #1}}%
+\def\XINT_applyon:::_end #1,#2#3#4{\xint_secondoftwo #4}%
+% \end{macrocode}
+% \subsubsection{Mysterious stuff}
+% \lverb|~ and $$ of catcode 12 in what follows. There was some refactoring at
+% 1.3e, particulary \XINT:NE:userefunc was added.|
+% \begin{macrocode}
+\catcode`~ 12
+\catcode`$ 12 % $
+\def\xint_dfork #1$#2#3\krof {#2}% $
+\def\xint_ddfork #1$$#2#3\krof {#2}% $$
+\def\XINT:NE:RApply::csv #1#2#3#4%
+ {~xintApply::csv{~expandafter #2~xint_exchangetwo_keepbraces{#4}}{#3}}%
+\def\XINT:NE:LApply::csv #1#2#3{~xintApply::csv{#2{#3}}}%
+\def\XINT:NE:RLApply:::csv #1{~xintApply:::csv}%
+\def\XINT:NE:two#1{\XINT:NE:two_{#1}{\detokenize{#1}}}%
+\def\XINT:NE:two_#1#2#3#4%
+ {\expandafter\XINT:NE:two_a\romannumeral`&&@#4!{#3}{#1}{#2}}%
+\def\XINT:NE:two_a#1#2!#3#4#5%
+ {\expandafter\XINT:NE:two_b\romannumeral`&&@#3!#1{#4}{#5}{#1#2}}%
+\def\XINT:NE:two_b#1#2!#3#4#5{\XINT:NE:two_fork_dd#1#3{#4}{#5}{#1#2}}%
+\def\XINT:NE:two_fork_dd #1#2{%
+ \xint_ddfork
+ #1#2\XINT:NE:RLApply:::csv
+ #1$\XINT:NE:RApply::csv% $
+ $#2\XINT:NE:LApply::csv% $
+ $${\XINT:NE:two_fork_nn #1#2}% $$
+ \krof
+}%
+\def\XINT:NE:two_fork_nn #1#2#3#4{%
+ \if #1##\xint_dothis{#4}\fi
+ \if #1~\xint_dothis{#4}\fi
+ \if #2##\xint_dothis{#4}\fi
+ \if #2~\xint_dothis{#4}\fi
+ \xint_orthat{#3}%
+}%
+% \end{macrocode}
+% \lverb|Problème pour autoriser ici qu'une liste arrive comme argument qui
+% potentiellement en donnerait deux mais pour le moment on ne sait pas. Donc
+% j'impose le prérequis que \XINT:NE:twosp soit toujours suivi de deux items
+% exactement.
+%
+% Il y a eu des modifications à 1.3e car j'ai supprimé des choses que je ne
+% comprenais pas puis je les ai remises lorsque je comprenais mais sans doute
+% pas pareil (certains tests passent et pas avant) et ensuite je ne comprenais
+% plus à nouveau.|
+% \begin{macrocode}
+\def\XINT:NE:twosp#1#2,#3#4,!#5%
+{%
+ \XINT:NE:two_fork_dd#1#3{#5}{\detokenize{#5}}{#1#2}{#3#4}%
+}%
+\def\XINT:NE:one#1#2{\expandafter\XINT:NE:one_a\romannumeral`&&@#2!#1}%
+\def\XINT:NE:one_a#1#2!#3%
+{%
+ \if ###1\xint_dothis {\detokenize{#3}}\fi
+ \if ~#1\xint_dothis {\detokenize{#3}}\fi
+ \if $#1\xint_dothis {~xintApply::csv{\detokenize{#3}}}\fi %$
+ \xint_orthat #3{#1#2}%
+}%
+% \end{macrocode}
+% \lverb|\xintExpandArgs is defined in xinttools.sty (I don't recall why; not
+% for reasons internal to xint I guess). Attention here that user function
+% names may contain digits, so we don't use a \detokenize or ~ approach.|
+% \begin{macrocode}
+\def\XINT:NE:userfunc #1#2#3%
+ {~xintExpandArgs{XINT_#1_userfunc_#2}{\xintCSVtoListNonStripped{#3}}}%
+\def\XINT:NE:userfunc:none #1#2{~!{XINT_#1_userfunc_#2}}%
+% \end{macrocode}
+% \lverb|\XINT:NE:userefunc et al. added at 1.3e. For one and two I can not
+% use \XINT:NE:one due to possible digits in names. For more than two nothing
+% special done with mysterious "Apply" macros above.
+%
+% Should they ever use $ in
+% output? Je crois que j'ai des problèmes en particulier car j'utilise le most
+% liste dans plusieurs sens il y a en particulier la confusion possible pour
+% liste dans le sens restreint devant être géré par les opérations genre ]* ou
+% celui avec les seq() ou finalement la liste des arguments d'une fonction.
+%
+% When expansion of the user func can not happend on the spot, the version
+% which will be expanded later one must first expand its argument for
+% efficiency because the functions from \XINT_NewFunc do not do that and we
+% must thus have an auxiliary variant expanding its argument.|
+% \begin{macrocode}
+\def\XINT:NE:userefunc:one#1#2#3%
+ {\expandafter\XINT:NE:userefunc:one_a\romannumeral`&&@#3!{#1}{#2}}%
+\def\XINT:NE:userefunc:one_a#1#2!#3#4%
+{%
+ \if ###1\xint_dothis {~!{XINT_#3_userefunc:f_#4}}\fi
+ \if ~#1\xint_dothis {~!{XINT_#3_userefunc:f_#4}}\fi
+% \end{macrocode}
+% \lverb|Quickly checked this \csname presentation ok for \xintApply::csv.|
+% \begin{macrocode}
+ \if $#1\xint_dothis {~xintApply::csv~!{XINT_#3_userefunc:f_#4}}\fi %$
+ \xint_orthat {\csname XINT_#3_userefunc_#4\endcsname}%
+ {#1#2}%
+}%
+\def\XINT:NE:twosp#1#2,#3#4,!#5%
+{%
+ \XINT:NE:two_fork_dd#1#3{#5}{\detokenize{#5}}{#1#2}{#3#4}%
+}%
+\def\XINT:NE:userefunc:two#1#2#3%
+ {\expandafter\XINT:NE:userefunc:two_a\romannumeral`&&@#3,!{#1}{#2}}%
+% \end{macrocode}
+% \lverb|Je ne peux pas faire ~xintExpandArgs{XINT_#5_userefunc_#6} à cause du
+% fait que j'ai {#1#2}{#3#4} pas {{#1#2}{#3#4}} à cause de la première
+% branche, celle qui s'étend.|
+% \begin{macrocode}
+\def\XINT:NE:userefunc:two_a#1#2,#3#4,!#5#6%
+{%
+ \XINT:NE:two_fork_dd#1#3{\csname XINT_#5_userefunc_#6\endcsname}%
+ {~!{XINT_#5_userefunc:f_#6}}%
+ {#1#2}{#3#4}%
+}%
+\def\XINT:NE:userefunc#1#2#3%
+{%
+ \expandafter\XINT:NE:userefunc_a\romannumeral`&&@#3,2,3,4,5,6,7,8,9,!%
+ {#1}{#2}{#3}%
+}%
+\def\XINT:NE:userefunc_a#1#2,#3#4,#5#6,#7#8,#9%
+{%
+ \XINT:NE:userefunc_b{#1#3#5#7#9}%
+}%
+\def\XINT:NE:userefunc_b#1#2,#3#4,#5#6,#7#8,#9%
+{%
+ \XINT:NE:userefunc_c{#1#3#5#7#9}%
+}%
+\def\XINT:NE:iftilde #1~#2#3\relax{\unless\if !#21\fi}%
+\def\XINT:NE:ifdollar #1$#2#3\relax{\unless\if !#21\fi}%$
+\def\XINT:NE:ifhash#1{%
+\def\XINT:NE:ifhash##1#1##2##3\relax{\unless\if !##21\fi}%
+}\expandafter\XINT:NE:ifhash\string#%
+\def\XINT:NE:userefunc_c#1#2!%
+{%
+ \if0\XINT:NE:iftilde #1~!\relax\XINT:NE:ifdollar #1$!\relax%$
+ \XINT:NE:ifhash #1##!\relax 0%
+ \expandafter\XINT:NE:userefunc_x
+ \else
+ \expandafter\XINT:NE:userefunc_p
+ \fi
+}%
+\def\XINT:NE:userefunc_x#1#2%
+ {\csname XINT_#1_userefunc_#2\expandafter\endcsname
+ \romannumeral0\xintcsvtolistnonstripped}%
+\def\XINT:NE:userefunc_p #1#2#3%
+ {~xintExpandArgs{XINT_#1_userefunc_#2}{\xintCSVtoListNonStripped{#3}}}%
+% \end{macrocode}
+% \lverb|Back to older stuff.|
+% \begin{macrocode}
+\def\XINT:NE:oneopt#1[#2]#3%
+ {\expandafter\XINT:NE:oneopt_a\romannumeral`&&@#3!{#2}#1}%
+\def\XINT:NE:oneopt_a#1#2!#3#4%
+ {\expandafter\XINT:NE:oneopt_b\romannumeral`&&@#3!#1#4{#1#2}}%
+\def\XINT:NE:oneopt_b#1#2!#3#4%
+ {\expandafter\XINT:NE:oneopt_fork#1#3#4{#1#2}}%
+\def\XINT:NE:oneopt_fork#1#2#3#4{%
+ \if1\if###11\else\if~#11\else\if###21\else\if~#21\else0\fi\fi\fi\fi
+ \xint_dothis {\detokenize{#3}[#4]}\fi
+ \if $#2\xint_dothis {~xintApply::csv{\detokenize{#3}[#4]}}\fi %$
+ \xint_orthat{#3[#4]}%
+}% pas complétement général, mais bon
+\def\XINT:NE:csv #1{\detokenize{#1}}% radicalement fainéant
+\def\XINT:newexpr:one:and:opt #1,#2,#3!#4#5%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\XINT:NE:one#4}{\XINT:NE:oneopt#5[\XINT:NE:one\xintNum{#2}]}{#1}%
+}%
+\def\XINT:newexpr:tacitzeroifonearg #1,#2,#3!#4#5%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\XINT:NE:two#4{0}}{\XINT:NE:two#5{\XINT:NE:one\xintNum{#2}}}{#1}%
+}%
+\def\XINT:newiiexpr:tacitzeroifonearg #1,#2,#3!#4%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\XINT:NE:two#4{0}}{\XINT:NE:two#4{#2}}{#1}%
+}%
+\def\XINT:newexpr:insertdollar~{$noexpand$}%
+\def\XINT:newexpr:two:to:two #1,#2,!#3%
+{%
+ \XINT:NE:two_
+ {\expandafter\XINT:expr:totwo\romannumeral`&&@#3}%
+ {$noexpand$expandafter~XINT:expr:totwo~romannumeral-`0\detokenize{#3}}%
+ {#1}{#2}%
+}%
+\def\XINT:newflexpr:two:to:two #1,#2,!#3%
+{%
+ \XINT:NE:two_
+ {#3}%
+ {\expandafter\XINT:newexpr:insertdollar\detokenize{#3}}%
+ {#1}{#2}%
+}%
+\def\xintiiifNotZeroNE:#1#2,#3,#4,%
+{%
+ \if1\if###11\else\if~#11\else\if$#11\else0%$
+ \fi\fi\fi
+ \xint_dothis{~xintiiifNotZero}\fi
+ \xint_orthat\xintiiifNotZero
+ {#1#2}{#3}{#4}%
+}%
+\def\xintifIntNE:#1#2,#3,#4,%
+{%
+ \if1\if###11\else\if~#11\else\if$#11\else0%$
+ \fi\fi\fi
+ \xint_dothis{~xintifInt}\fi
+ \xint_orthat\xintifInt
+ {#1#2}{#3}{#4}%
+}%
+\def\xintifFloatIntNE:#1#2,#3,#4,%
+{%
+ \if1\if###11\else\if~#11\else\if$#11\else0%$
+ \fi\fi\fi
+ \xint_dothis{~xintifFloatInt}\fi
+ \xint_orthat\xintifFloatInt
+ {#1#2}{#3}{#4}%
+}%
+\def\xintiiifOneNE:#1#2,#3,#4,%
+{%
+ \if1\if###11\else\if~#11\else\if$#11\else0%$
+ \fi\fi\fi
+ \xint_dothis{~xintiiifOne}\fi
+ \xint_orthat\xintiiifOne
+ {#1#2}{#3}{#4}%
+}%
+\def\xintifOneNE:#1#2,#3,#4,%
+{%
+ \if1\if###11\else\if~#11\else\if$#11\else0%$
+ \fi\fi\fi
+ \xint_dothis{~xintifOne}\fi
+ \xint_orthat\xintifOne
+ {#1#2}{#3}{#4}%
+}%
+\def\xintiiifSgnNE:#1#2,#3,#4,#5,%
+{%
+ \if1\if###11\else\if~#11\else\if$#11\else0%$
+ \fi\fi\fi
+ \xint_dothis{~xintiiifSgn}\fi
+ \xint_orthat\xintiiifSgn
+ {#1#2}{#3}{#4}{#5}%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_redefinemacros}}
+% \lverb|Completely refactored at 1.3.|
+% \begin{macrocode}
+\def\XINT_expr_redefinemacros {%
+ \let\XINT:NEhook:one \XINT:NE:one
+ \let\XINT:NEhook:two \XINT:NE:two
+ \let\XINT:NEhook:csv \XINT:NE:csv
+ \let\XINT:NEhook:twosp\XINT:NE:twosp
+ \let\XINT:expr:userfunc \XINT:NE:userfunc
+ \let\XINT:expr:userfunc:none \XINT:NE:userfunc:none
+ \let\XINT:expr:userefunc \XINT:NE:userefunc
+ \let\XINT:expr:userefunc:one \XINT:NE:userefunc:one
+ \let\XINT:expr:userefunc:two \XINT:NE:userefunc:two
+ \let\XINT:expr:macrofunc \XINT:newexpr:macrofunc
+ \let\XINT:expr:one:and:opt \XINT:newexpr:one:and:opt
+ \let\XINT:expr:one:or:two:nums \XINT:newexpr:one:or:two:nums
+ \let\XINT:iiexpr:one:or:two: \XINT:newiiexpr:one:or:two:
+ \let\XINT:expr:tacitzeroifonearg \XINT:newexpr:tacitzeroifonearg
+ \let\XINT:iiexpr:tacitzeroifonearg \XINT:newiiexpr:tacitzeroifonearg
+ \let\XINT:expr:two:to:two \XINT:newexpr:two:to:two
+ \let\XINT:flexpr:two:to:two \XINT:newflexpr:two:to:two
+ \let\xintiiifNotZero: \xintiiifNotZeroNE:
+ \let\xintifInt: \xintifIntNE:
+ \let\xintifFloatInt: \xintifFloatIntNE:
+ \let\xintiiifOne: \xintiiifOneNE:
+ \let\xintifOne: \xintifOneNE:
+ \let\xintiiifSgn: \xintiiifSgnNE:
+ \let\xintSeqNumeric::csv \xintSeq::csv
+ \let\xintiiSeqNumeric::csv \xintiiSeq::csv
+ \let\XINTinFloatSeqNumeric::csv \XINTinFloatSeq::csv
+ \let\xintSeqBNumeric::csv \xintSeqB::csv
+ \let\xintiiSeqBNumeric::csv \xintiiSeqB::csv
+ \let\XINTinFloatSeqBNumeric::csv\XINTinFloatSeqB::csv
+ \def\xintSeq::csv
+ {\XINT:NE:two_\xintSeqNumeric::csv{$noexpand$xintSeq::csv}}%
+ \def\xintiiSeq::csv
+ {\XINT:NE:two_\xintiiSeqNumeric::csv{$noexpand$xintiiSeq::csv}}%
+ \def\XINTinFloatSeq::csv
+ {\XINT:NE:two_\XINTinFloatSeqNumeric::csv{$noexpand$XINTinFloatSeq::csv}}%
+ \def\xintSeqB::csv
+ {\XINT:NE:two_\xintSeqBNumeric::csv{$noexpand$xintSeqB:f:csv}}%
+ \def\xintiiSeqB::csv
+ {\XINT:NE:two_\xintiiSeqBNumeric::csv{$noexpand$xintiiSeqB:f:csv}}%
+ \def\XINTinFloatSeqB::csv
+ {\XINT:NE:two_\XINTinFloatSeqBNumeric::csv{$noexpand$XINTinFloatSeqB:f:csv}}%
+ \def\xintListSel:x:csv {~xintListSel:f:csv }%
+ \def\XINTinRandomFloatSdigits{~XINTinRandomFloatSdigits }%
+ \def\XINTinRandomFloatSixteen{~XINTinRandomFloatSixteen }%
+ \def\xintiiRandRange{~xintiiRandRange }%
+ \def\xintiiRandRangeAtoB{~xintiiRandRangeAtoB }%
+}%
+% \end{macrocode}
+% \subsubsection{\csh{XINT_expr_redefineprints}}
+% \lverb|This is used by \xintNewExpr and prior to 1.3e not by \xintdeffunc,
+% presumably to avoid some supposedly unneeded overhead. Now also used by
+% \xintdeffunc see some comment further below for why.
+% |
+% \begin{macrocode}
+\def\XINT_expr_redefineprints
+{%
+ \def\XINT_flexpr_noopt
+ {%
+ \expandafter
+ \XINT_flexpr_preprint\expandafter-\romannumeral0\xintbarefloateval
+ }%
+ \def\XINT_flexpr_preprint ##1##2%
+ {%
+ \expandafter\XINT_flexpr_wrap
+ \csname .;##1.=\XINT_expr_unlock##2\endcsname
+ }%
+ \def\XINT_expr_unlock_sp ##1.;##2##3.=##4!%
+ {%
+ \if -##2\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi
+ \XINTdigits{{##2##3}}{##4}%
+ }%
+ \def\XINT_expr_print ##1{\expandafter
+ \xintSPRaw::csv\expandafter{\romannumeral`&&@\XINT_expr_unlock ##1}}%
+ \def\XINT_iiexpr_print ##1{\expandafter
+ \xintCSV::csv\expandafter{\romannumeral`&&@\XINT_expr_unlock ##1}}%
+ \def\XINT_boolexpr_print ##1{\expandafter
+ \xintIsTrue::csv\expandafter{\romannumeral`&&@\XINT_expr_unlock ##1}}%
+ \def\xintCSV::csv {~xintCSV::csv }%
+ \def\xintSPRaw::csv {~xintSPRaw::csv }%
+ \def\xintPFloat::csv {~xintPFloat::csv }%
+ \def\xintIsTrue::csv {~xintIsTrue::csv }%
+ \def\xintRound::csv {~xintRound::csv }%
+}%
+% \end{macrocode}
+% \subsubsection{\cshnolabel{xintNewExpr}, ..., at last.}
+% \lverb|&
+% 1.2c modifications to accomodate \XINT_expr_deffunc_newexpr etc..
+%
+% 1.2f adds token \XINT_newexpr_clean to be able to have a different
+% \XINT_newfunc_clean.|
+% \begin{macrocode}
+\def\xintNewExpr {\XINT_NewExpr\XINT_expr_redefineprints\xint_firstofone
+ \xinttheexpr\XINT_newexpr_clean}%
+\def\xintNewFloatExpr{\XINT_NewExpr\XINT_expr_redefineprints\xint_firstofone
+ \xintthefloatexpr\XINT_newexpr_clean}%
+\def\xintNewIExpr {\XINT_NewExpr\XINT_expr_redefineprints\xint_firstofone
+ \xinttheiexpr\XINT_newexpr_clean}%
+\def\xintNewIIExpr {\XINT_NewExpr\XINT_expr_redefineprints\xint_firstofone
+ \xinttheiiexpr\XINT_newexpr_clean}%
+\def\xintNewBoolExpr {\XINT_NewExpr\XINT_expr_redefineprints\xint_firstofone
+ \xinttheboolexpr\XINT_newexpr_clean}%
+\def\XINT_newexpr_clean #1>{\noexpand\romannumeral`&&@}%
+% \end{macrocode}
+% \lverb|1.2c for \xintdeffunc, \xintdefiifunc, \xintdeffloatfunc.
+%
+% At 1.3, NewFunc does not use a comma delimited pattern anymore.|
+% \begin{macrocode}
+\def\XINT_NewFunc
+ {\XINT_NewExpr\XINT_expr_redefineprints\xint_gobble_i\xintthebareeval\XINT_newfunc_clean}%
+\def\XINT_NewFloatFunc
+ {\XINT_NewExpr\XINT_expr_redefineprints\xint_gobble_i\xintthebarefloateval\XINT_newfunc_clean}%
+\def\XINT_NewIIFunc
+ {\XINT_NewExpr\XINT_expr_redefineprints\xint_gobble_i\xintthebareiieval\XINT_newfunc_clean}%
+\def\XINT_newfunc_clean #1>{}%
+% \end{macrocode}
+% \lverb|1.2c adds optional logging. For this needed to pass to _NewExpr_a the
+% macro name as parameter.
+%
+% Up to and including 1.2c the definition was global. Starting with 1.2d it is
+% done locally.
+%
+% Modified at 1.3c so that \XINT_NewFunc et al. do not execute the
+% \xintexprSafeCatcodes, as it is now already done earlier by \xintdeffunc:
+% and as already #2 was either \xint_firstofone (for \xintNewExpr et al.) or
+% \xint_gobble_i (for \XINT_NewFunc et al.) we can use that #2. This is only
+% to avoid doing twice the catcodes, as anyhow there is an \endgroup coming
+% later, so external \xintexprRestoreCatcodes would not have been compromised.
+%
+% Modified at 1.3e: \XINT_NewFunc et al. do issue \XINT_expr_redefineprints.
+% I suppose I did not use it formely as I considered it unneeded overhead,
+% but this meant that \xintdeffunc foo(x):=\xintfloatexpr bar(x)\relax; was
+% impossible. And in fact this is convenient for xinttrig.sty to transfer
+% float functions to normal functions.
+% |
+% \begin{macrocode}
+\def\XINT_NewExpr #1#2#3#4#5#6[#7]%
+{%
+ \begingroup
+ \ifcase #7\relax
+ \toks0 {\endgroup\XINT_global\def#5}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3##4}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3##4##5}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3##4##5##6}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3##4##5##6##7}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3##4##5##6##7##8}%
+ \or \toks0 {\endgroup\XINT_global\def#5##1##2##3##4##5##6##7##8##9}%
+ \fi
+ #2\xintexprSafeCatcodes
+ \XINT_expr_redefinemacros
+ #1%
+ \XINT_NewExpr_a #2#3#4#5%
+}%
+% \end{macrocode}
+% \lverb|& attention que & est de catcode 14
+%
+% 1.2d's \xintNewExpr makes a local definition. In earlier releases, the
+% definition was global.
+%
+% \the\toks0 inserts the \endgroup, but this will happen
+% after \XINT_tmpa has already been expanded...
+%
+% The $%1 is \xint_firstofone for \xintNewExpr, \xint_gobble_i
+% for \xintdeffunc.
+%
+% The ~ action was modified at 1.3e for ~! constructs (userefunc:f macros).
+% |
+% \begin{macrocode}
+\catcode`~ 13 \catcode`@ 14 \catcode`\% 6 \catcode`# 12 \catcode`$ 11 @ $
+\def\XINT_NewExpr_a %1%2%3%4%5@
+{@
+ \def\XINT_tmpa %%1%%2%%3%%4%%5%%6%%7%%8%%9{%5}@
+ \def~%%1{\if !%%1\noexpand~\else $noexpand$%%1\fi}@
+ \catcode`: 11 \catcode`_ 11
+ \catcode`# 12 \catcode`~ 13 \escapechar 126
+ \endlinechar -1 \everyeof {\noexpand }@
+ \edef\XINT_tmpb
+ {\scantokens\expandafter{\romannumeral`&&@\expandafter
+ %2\XINT_tmpa{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}\relax}@
+ }@
+ \escapechar 92 \catcode`# 6 \catcode`$ 0 @ $
+ \def~%%1{\expandafter\noexpand\csname %%1\endcsname}@
+ \edef\XINT_tmpa %%1%%2%%3%%4%%5%%6%%7%%8%%9@
+ {\scantokens\expandafter{\expandafter%3\meaning\XINT_tmpb}}@
+ \the\toks0\expandafter
+ {\XINT_tmpa{%%1}{%%2}{%%3}{%%4}{%%5}{%%6}{%%7}{%%8}{%%9}}@
+ %1{\ifxintverbose
+ \xintMessage{xintexpr}{Info}@
+ {\string%4\space now with @
+ \ifxintglobaldefs global \fi meaning \meaning%4}@
+ \fi}@
+}@
+\catcode`% 14
+\XINT_setcatcodes % clean up to avoid surprises if something changes
+% \end{macrocode}
+% \subsubsection{\csh{ifxintexprsafecatcodes}, \csh{xintexprSafeCatcodes}, \csh{xintexprRestoreCatcodes}}
+% \changed{1.3c}{2018/06/17}
+% \lverb|Added \ifxintexprsafecatcodes to allow nesting|
+% \begin{macrocode}
+\newif\ifxintexprsafecatcodes
+\let\xintexprRestoreCatcodes\empty
+\def\xintexprSafeCatcodes
+{%
+ \unless\ifxintexprsafecatcodes
+ \edef\xintexprRestoreCatcodes {%
+ \catcode59=\the\catcode59 % ;
+ \catcode34=\the\catcode34 % "
+ \catcode63=\the\catcode63 % ?
+ \catcode124=\the\catcode124 % |
+ \catcode38=\the\catcode38 % &
+ \catcode33=\the\catcode33 % !
+ \catcode93=\the\catcode93 % ]
+ \catcode91=\the\catcode91 % [
+ \catcode94=\the\catcode94 % ^
+ \catcode95=\the\catcode95 % _
+ \catcode47=\the\catcode47 % /
+ \catcode41=\the\catcode41 % )
+ \catcode40=\the\catcode40 % (
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode62=\the\catcode62 % >
+ \catcode60=\the\catcode60 % <
+ \catcode58=\the\catcode58 % :
+ \catcode46=\the\catcode46 % .
+ \catcode45=\the\catcode45 % -
+ \catcode44=\the\catcode44 % ,
+ \catcode61=\the\catcode61 % =
+ \catcode96=\the\catcode96 % `
+ \catcode32=\the\catcode32\relax % space
+ \noexpand\xintexprsafecatcodesfalse
+ }%
+ \fi
+ \xintexprsafecatcodestrue
+ \catcode59=12 % ;
+ \catcode34=12 % "
+ \catcode63=12 % ?
+ \catcode124=12 % |
+ \catcode38=4 % &
+ \catcode33=12 % !
+ \catcode93=12 % ]
+ \catcode91=12 % [
+ \catcode94=7 % ^
+ \catcode95=8 % _
+ \catcode47=12 % /
+ \catcode41=12 % )
+ \catcode40=12 % (
+ \catcode42=12 % *
+ \catcode43=12 % +
+ \catcode62=12 % >
+ \catcode60=12 % <
+ \catcode58=12 % :
+ \catcode46=12 % .
+ \catcode45=12 % -
+ \catcode44=12 % ,
+ \catcode61=12 % =
+ \catcode96=12 % `
+ \catcode32=10 % space
+}%
+\let\XINT_tmpa\undefined \let\XINT_tmpb\undefined \let\XINT_tmpc\undefined
+\ifdefined\RequirePackage\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi
+{\RequirePackage{xinttrig}%
+\RequirePackage{xintlog}}%
+{\input xinttrig.sty
+\input xintlog.sty
+}%
+\XINT_restorecatcodes_endinput%
+% \end{macrocode}
+% \StoreCodelineNo {xintexpr}
+% \cleardoublepage\let\xintexprnameUp\undefined
+%\gardesactifs
+%\let</xintexpr>\relax
+%\let<*xinttrig>\gardesinactifs
+%</xintexpr>^^A--------------------------------------------------
+%<*xinttrig>^^A---------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; fill-column: 78; -*-
+% \clearpage\csname xinttrignameUp\endcsname
+% \section{Package \xinttrignameimp implementation}
+% \RaisedLabel{sec:trigimp}
+% \etocarticlestylenomarks
+% \etocsetnexttocdepth {subsubsection}
+%
+% \localtableofcontents
+%
+% The original was done in January 15 and 16, 2019. It provided |asin()| and
+% |acos()| based on a Newton algorithm approach. Then during March 25-31 I
+% revisited the code, adding more inverse trigonometrical functions (with a
+% modified algorithm, quintically convergent), extending the precision range
+% (so that the package reacts to the \csbxint{Digits} value at time of load,
+% or reload), and replaced high level range reduction by some optimized lower
+% level coding.
+%
+% This led me next to improve upon the innards of \csbxint{deffunc} and
+% \csbxint{NewExpr}, and to add to \xintexprnameimp the \csbxint{defefunc}
+% macro (see user documentation).
+%
+% Finally on April 5, 2019 I pushed the idea of the algorithm for the arcsine
+% function to its logical limit obtaining the method finally in use here.
+%
+% Almost all of the code remains written at high level, and in particular it
+% is not easily feasible from this interface to execute computations with
+% guard digits. Expect the last one or two digits to be systematically off.
+%
+% Also, small floating-point inputs are handled quite sub-optimally both for
+% the direct and inverse functions; substantial gains are possible. I added
+% the ilog10() function too late to consider using it here with the high level
+% interface.
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \catcode94=7 % ^
+ \def\z{\endgroup}%
+ \def\empty{}\def\space{ }\newlinechar10
+ \expandafter\let\expandafter\w\csname ver@xintexpr.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info:^^J%
+ \space\space\space\space#2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xinttrig}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\w\relax % xintexpr.sty not yet loaded.
+ \y{xinttrig}%
+ {Loading should be via \ifx\x\empty\string\usepackage{xintexpr.sty}
+ \else\string\input\space xintexpr.sty \fi
+ rather, aborting}%
+ \aftergroup\endinput
+ \fi
+ \fi
+\z%
+\catcode`_ 11 \XINT_setcatcodes \catcode`? 12
+% \end{macrocode}
+% \subsection{Library identification}
+% \begin{macrocode}
+\ifcsname xintlibver@trig\endcsname
+ \expandafter\xint_firstoftwo
+\else
+ \expandafter\xint_secondoftwo
+\fi
+{\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
+{\expandafter\gdef\csname xintlibver@trig\endcsname{2019/04/05 1.3e}%
+\XINT_providespackage
+\ProvidesPackage{xinttrig}%
+[2019/04/05 1.3e Trigonometrical functions for xintexpr (JFB)]%
+}%
+% \end{macrocode}
+% \subsection{Ensure used letters are dummy letters}
+% \begin{macrocode}
+\xintFor* #1 in {iDTVtuwxyzX}\do{\xintensuredummy{#1}}%
+% \end{macrocode}
+% \subsection{\csh{xintreloadxinttrig}}
+% \begin{macrocode}
+\def\xintreloadxinttrig
+ {\edef\XINT_restorecatcodes_now{\XINT_restorecatcodes}%
+ \XINT_setcatcodes\catcode`? 12
+ \input xinttrig.sty
+ \XINT_restorecatcodes_now}%
+% \end{macrocode}
+% \subsection{Auxiliary variables (only temporarily needed, but left free to re-use)}
+% \lverb|&
+% These variables don't have really private names but this does not matter
+% because only their actual values will be stored in the functions defined
+% next. Nevertheless they are not unassigned, and are left free to use as is.
+% |
+% \subsubsection{\cshn{twoPi}, \cshn{threePiover2}, \cshn{Pi}, \cshn{Piover2}}
+% \lverb|&
+% We take them with 60 digits
+% and force conversion to \xintDigits setting via "0 + " syntax.
+% |
+% \begin{macrocode}
+\xintdeffloatvar twoPi := 0 +
+ 6.28318530717958647692528676655900576839433879875021164194989;%
+\xintdeffloatvar threePiover2 := 0 +
+ 4.71238898038468985769396507491925432629575409906265873146242;%
+\xintdeffloatvar Pi := 0 +
+ 3.14159265358979323846264338327950288419716939937510582097494;%
+\xintdeffloatvar Piover2 := 0 +
+ 1.57079632679489661923132169163975144209858469968755291048747;%
+% \end{macrocode}
+% \subsubsection{\cshn{oneDegree}, \cshn{oneRadian}}
+% \begin{macrocode}
+\xintdeffloatvar oneDegree := 0 +
+ 0.0174532925199432957692369076848861271344287188854172545609719;% Pi/180
+\xintdeffloatvar oneRadian := 0 +
+ 57.2957795130823208767981548141051703324054724665643215491602;% 180/Pi
+% \end{macrocode}
+% \subsubsection{Inverse factorial coefficients: \cshn{invfact2}, ..., \cshn{invfact44}}
+% \lverb|&
+% Pre-compute 1/n! for n = 2, ..., 44
+%
+% The following example (among many, see below) shows that we must be careful
+% when pre-computing the 1/i!.
+%( Consider 35!=10333147966386144929666651337523200000000.
+%: With \xintDigit:=26; \xintfloateval{35!} obtains 1.0333147966386144929666651e40
+%: which is the correct rounding to 26 digits. But \xintfloateval{1/35!} obtains
+%: 9.6775929586318909920898167e-41 which differs by 3ulps from the correct rounding
+%: of 1/35! to 26 places which is 9.6775929586318909920898164e-41. The problem
+%: isn't in the factorial computations, but in the fact that the rounding of the
+%: inverse of a quantity which is itself a rounding is not necessarily the rounding
+%: of the exact inverse of the original.
+%)
+% Here is a little program to explore this phenomenon systematically:
+%
+%( \xintDigits:=55;$%
+%: \edef\tempNlist{\xintSeq{2}{39}}%
+%: \xintFor*#1in{\tempNlist}\do{$% we precompute some rounding here to
+%: $% speed up things in the next double loop.
+%: \expandafter\edef\csname invfact#1\endcsname {\xintfloatexpr 1/#1!\relax}$%
+%: }$%
+%: \xintFor*#1in{\xintSeq{4}{50}}\do{$%
+%: \xintDigits:=#1;$%
+%: \xintFor*#2in{\tempNlist}\do{$%
+%: (D=#1, N=#2)
+%: $% attention to !== which is parsed as negation operator != followed by = (sigh...)
+%: \xintifboolfloatexpr{(1/#2!)==0+\csname invfact#2\endcsname}$%
+%: {ok}
+%: {mismatch: \xintfloateval{1/#2!} vs (exact)
+%: \xintfloateval{0+\csname invfact#2\endcsname}}$%
+%: \par
+%: }$%
+%: }$%
+%)
+%
+% We can see that for D=16, the problem is there with N=22, 25, 26, 27,
+% 28...and more. If we were to use 1/i! directly in the \xintdeffloatefunc of
+% sin_aux(X) and cos_aux(X) we would have this problem.
+%
+% If we use \xintexpr1/i!\relax encapsulation in the function declaration the
+% rounding will be delayed to actual use of the function... which is bad, so
+% we need it to happen now. We could use (0+\xintexpr1/i!\relax) inside the
+% declaration of the sine and cosine series, which will give the expected
+% result but for readability we use some temporary variables. We could use
+% seq(0+\xintexpr1/i!\relax, i = 2..44) but opt for an rseq. The semi-colon
+% must be braced to hide it from \xintdeffloatvar grabbing of the delimited
+% argument.
+% |
+% \begin{macrocode}
+\xintdeffloatvar invfact\xintListWithSep{, invfact}{\xintSeq{2}{44}}%
+ := seq(0+x, x=\xintexpr rseq(1/2{;}@/i, i=3..44)\relax);% need to hide inner ;
+% \end{macrocode}
+% \subsection{The sine and cosine series}
+% \subsubsection{\cshn{sin_aux()}, \cshn{cos_aux()}}
+% \lverb|&
+% Should I rather use successive divisions by (2n+1)(2n), or rather
+% multiplication by their precomputed inverses, in a modified Horner scheme ?
+% The \ifnum tests are executed at time of definition.
+%
+% Criteria for truncated series using π/4, actually 0.79.
+%
+% Small values of the variable X are very badly handled here because a much
+% shorter truncation of the sine series should be used.
+% |
+% \begin{macrocode}
+\xintdeffloatefunc sin_aux(X) := 1 - X(invfact3 - X(invfact5
+\ifnum\XINTdigits>4
+ - X(invfact7
+\ifnum\XINTdigits>6
+ - X(invfact9
+\ifnum\XINTdigits>8
+ - X(invfact11
+\ifnum\XINTdigits>10
+ - X(invfact13
+\ifnum\XINTdigits>13
+ - X(invfact15
+\ifnum\XINTdigits>15
+ - X(invfact17
+\ifnum\XINTdigits>18
+ - X(invfact19
+\ifnum\XINTdigits>21
+ - X(invfact21
+\ifnum\XINTdigits>24
+ - X(invfact23
+\ifnum\XINTdigits>27
+ - X(invfact25
+\ifnum\XINTdigits>30
+ - X(invfact27
+\ifnum\XINTdigits>33
+ - X(invfact29
+\ifnum\XINTdigits>36
+ - X(invfact31
+\ifnum\XINTdigits>39
+ - X(invfact33
+\ifnum\XINTdigits>43
+ - X(invfact35
+\ifnum\XINTdigits>46
+ - X(invfact37
+\ifnum\XINTdigits>49
+ - X(invfact39
+\ifnum\XINTdigits>53
+ - X(invfact41
+\ifnum\XINTdigits>59
+ - X(invfact43
+ )\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi));%
+% \end{macrocode}
+% \lverb|Criteria on basis of π/4, we actually used 0.79 to choose the
+% transition values and this makes them a bit less favourable at 24, 26,
+% 29...and some more probably. Again this is very bad for small X.|
+% \begin{macrocode}
+\xintdeffloatefunc cos_aux(X) := 1 - X(invfact2 - X(invfact4
+\ifnum\XINTdigits>3
+ - X(invfact6
+\ifnum\XINTdigits>5
+ - X(invfact8
+\ifnum\XINTdigits>7
+ - X(invfact10
+\ifnum\XINTdigits>9
+ - X(invfact12
+\ifnum\XINTdigits>12
+ - X(invfact14
+\ifnum\XINTdigits>14
+ - X(invfact16
+\ifnum\XINTdigits>17
+ - X(invfact18
+\ifnum\XINTdigits>20
+ - X(invfact20
+\ifnum\XINTdigits>23
+ - X(invfact22
+\ifnum\XINTdigits>25
+ - X(invfact24
+\ifnum\XINTdigits>28
+ - X(invfact26
+\ifnum\XINTdigits>32
+ - X(invfact28
+\ifnum\XINTdigits>35
+ - X(invfact30
+\ifnum\XINTdigits>38
+ - X(invfact32
+\ifnum\XINTdigits>41
+ - X(invfact34
+\ifnum\XINTdigits>44
+ - X(invfact36
+\ifnum\XINTdigits>48
+ - X(invfact38
+\ifnum\XINTdigits>51
+ - X(invfact40
+\ifnum\XINTdigits>55
+ - X(invfact42
+\ifnum\XINTdigits>58
+ - X(invfact44
+ )\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi));%
+% \end{macrocode}
+% \subsubsection{Make \cshnnolabel{sin\_aux()} and \cshnnolabel{cos\_aux()}
+% known to \cshnolabel{xintexpr}}
+% \lverb|We need them shortly for the asin() in an \xintexpr variant.
+% We short-circuit the high level interface as it will not be needed to
+% add some \xintFloat wrapper.
+% |
+% \begin{macrocode}
+\expandafter\let\csname XINT_expr_func_sin_aux\expandafter\endcsname
+ \csname XINT_flexpr_func_sin_aux\endcsname
+\expandafter\let\csname XINT_expr_func_cos_aux\expandafter\endcsname
+ \csname XINT_flexpr_func_cos_aux\endcsname
+% \end{macrocode}
+% \subsubsection{\cshn{sin_()}, \cshn{cos_()}}
+% \lverb|&
+% Use this only between -pi/4 and pi/4
+% |
+% \begin{macrocode}
+\xintdeffloatefunc sin_(x) := x * sin_aux(sqr(x));%
+% \end{macrocode}
+% \lverb|&
+% Use this only between -pi/4 and pi/4
+% |
+% \begin{macrocode}
+\xintdeffloatefunc cos_(x) := cos_aux(sqr(x));%
+% \end{macrocode}
+% \subsection{Range reduction for sine and cosine using degrees}
+%
+% Notice that even when handling radians it is much better to convert to
+% degrees and then do range reduction there, because this can be done in the
+% fixed point sense. I lost 1h puzzled about some mismatch of my results with
+% those of Maple (at 16 digits) near -π. Turns out that Maple probably adds π
+% in the floating point sense causing catastrophic loss of digits when one is
+% near -Ï€. On the other hand my sin(x) function will first convert to degrees
+% then add 180 without any loss of floating point precision, even for a result
+% near zero, then convert back to radians and use the sine series.
+%
+% \subsubsection{Core level macro \csh{XINT_mod_ccclx_i}}
+% \lverb|&
+% input: \the\numexpr\XINT_mod_ccclx_i k.N. (delimited by dots)
+%
+% output: (N times 10^k) modulo 360. (with a final dot)
+%
+% Attention N must be non-negative (I could make it accept negative
+% but the fact that numexpr / is not periodical in numerator
+% adds overhead).
+%
+% 360 divides 9000 hence 10^{k} is 280 for k at least 3 and the additive
+% group generated by it modulo 360 is the set of multiples of 40.
+% |
+% \begin{macrocode}
+\def\XINT_mod_ccclx_i #1.% input <k>.<N>. k is a non-negative exponent
+{%
+ \expandafter\XINT_mod_ccclx_e\the\numexpr
+ \expandafter\XINT_mod_ccclx_j\the\numexpr1\ifcase#1 \or0\or00\else000\fi.%
+}%
+\def\XINT_mod_ccclx_j 1#1.#2.% #2=N is a non-negative mantissa
+{%
+ (\XINT_mod_ccclx_ja {++}#2#1\XINT_mod_ccclx_jb 0000000\relax
+}% 1 2345678
+\def\XINT_mod_ccclx_ja #1#2#3#4#5#6#7#8#9%
+{%
+ #9+#8+#7+#6+#5+#4+#3+#2\xint_firstoftwo{+\XINT_mod_ccclx_ja{+#9+#8+#7}}{#1}%
+}%
+\def\XINT_mod_ccclx_jb #1\xint_firstoftwo#2#3{#1+0)*280\XINT_mod_ccclx_jc #1#3}%
+% \end{macrocode}
+% \lverb|&
+% Attention that \XINT_cclcx_e wants non negative input because \numexpr
+% division is not periodical ...
+% |
+% \begin{macrocode}
+\def\XINT_mod_ccclx_jc +#1+#2+#3#4\relax{+80*(#3+#2+#1)+#3#2#1.}%
+\def\XINT_mod_ccclx_e#1.{\expandafter\XINT_mod_ccclx_z\the\numexpr(#1+180)/360-1.#1.}%
+\def\XINT_mod_ccclx_z#1.#2.{#2-360*#1.}%
+% \end{macrocode}
+% \subsubsection{\cshn{sind_()}, \cshn{cosd_()}, and support macros \csh{xintSind}, \csh{xintCosd}}
+% \lverb|&
+%
+% sind_() coded directly at macro level with a macro \xintSind (ATTENTION! it
+% requires a positive argument)
+% which will suitably use \XINT_flexpr_func_sin_ defined from \xintdeffloatefunc
+% |
+% \begin{macrocode}
+\def\XINT_flexpr_func_sind_ #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintSind{\XINT_expr_unlock#3}\endcsname
+}%
+% \end{macrocode}
+% \lverb|&
+% Must be f-expandable for nesting macros from \xintNewExpr
+%
+% ATTENTION ONLY FOR POSITIVE ARGUMENTS
+% |
+% \begin{macrocode}
+\def\xintSind#1{\romannumeral`&&@\expandafter\xintsind
+ \romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
+\def\xintsind #1[#2#3]%
+{%
+ \xint_UDsignfork
+ #2\XINT_sind
+ -\XINT_sind_int
+ \krof#2#3.#1..%<< attention extra dot
+}%
+\def\XINT_sind #1.#2.% NOT TO BE USED WITH VANISHING (OR NEGATIVE) #2.
+{%
+ \expandafter\XINT_sind_a
+ \romannumeral0\xinttrunc{\XINTdigits}{#2[#1]}%
+}%
+\def\XINT_sind_a{\expandafter\XINT_sind_i\the\numexpr\XINT_mod_ccclx_i0.}%
+\def\XINT_sind_int
+{%
+ \expandafter\XINT_sind_i\the\numexpr\expandafter\XINT_mod_ccclx_i
+}%
+\def\XINT_sind_i #1.% range reduction inside [0, 360[
+{%
+ \ifcase\numexpr#1/90\relax
+ \expandafter\XINT_sind_A
+ \or\expandafter\XINT_sind_B\the\numexpr-90+%
+ \or\expandafter\XINT_sind_C\the\numexpr-180+%
+ \or\expandafter\XINT_sind_D\the\numexpr-270+%
+ \else\expandafter\XINT_sind_E\the\numexpr-360+%
+ \fi#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+% #2 will be empty in the "integer branch". Notice that a single dot "." is
+% valid as input to the xintfrac macros. During developing phase I did many
+% silly mistakes due to wanting to use too low-level interface, e.g. I would
+% use something like #2[-\XINTdigits] with #2 the fractional digits, but there
+% maybe some leading zero and then xintfrac.sty will think the whole thing is
+% zero due to the requirements of my own core format A[N]....
+%
+% The "userefunc" auxiliary macros do not pre-expand their arguments (but the
+% macros which end up used in other ones defined from \csbxintdeffunc do).
+%
+% Multiplication is done exactly but anyway currently float multiplication
+% goes via exact multiplication after rounding arguments ; as here integer
+% part has at most three digits, doing exact multiplication will prove
+% not only more accurate but probably faster.
+% |
+% \begin{macrocode}
+\def\XINT_sind_A#1{%
+\def\XINT_sind_A##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_sind_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_sind_B#1{\xint_UDsignfork#1\XINT_sind_B_n-\XINT_sind_B_p\krof #1}%
+\def\XINT_tmpa#1{%
+\def\XINT_sind_B_n-##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+\def\XINT_sind_B_p##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_sind_C#1{\xint_UDsignfork#1\XINT_sind_C_n-\XINT_sind_C_p\krof #1}%
+\def\XINT_tmpa#1{%
+\def\XINT_sind_C_n-##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+\def\XINT_sind_C_p##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_sind_D#1{\xint_UDsignfork#1\XINT_sind_D_n-\XINT_sind_D_p\krof #1}%
+\def\XINT_tmpa#1{%
+\def\XINT_sind_D_n-##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+\def\XINT_sind_D_p##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_sind_E#1{%
+\def\XINT_sind_E-##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+}\expandafter
+\XINT_sind_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+% \end{macrocode}
+% \lverb|The cosd_ auxiliary function|
+% \begin{macrocode}
+\def\XINT_flexpr_func_cosd_ #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintCosd{\XINT_expr_unlock#3}\endcsname
+}%
+% \end{macrocode}
+% \lverb|&
+% ATTENTION ONLY FOR POSITIVE ARGUMENTS
+% |
+% \begin{macrocode}
+\def\xintCosd#1{\romannumeral`&&@\expandafter\xintcosd
+ \romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
+\def\xintcosd #1[#2#3]%
+{%
+ \xint_UDsignfork
+ #2\XINT_cosd
+ -\XINT_cosd_int
+ \krof#2#3.#1..%<< attention extra dot
+}%
+\def\XINT_cosd #1.#2.% NOT TO BE USED WITH VANISHING (OR NEGATIVE) #2.
+{%
+ \expandafter\XINT_cosd_a
+ \romannumeral0\xinttrunc{\XINTdigits}{#2[#1]}%
+}%
+\def\XINT_cosd_a{\expandafter\XINT_cosd_i\the\numexpr\XINT_mod_ccclx_i0.}%
+\def\XINT_cosd_int
+{%
+ \expandafter\XINT_cosd_i\the\numexpr\expandafter\XINT_mod_ccclx_i
+}%
+\def\XINT_cosd_i #1.%
+{%
+ \ifcase\numexpr#1/90\relax
+ \expandafter\XINT_cosd_A
+ \or\expandafter\XINT_cosd_B\the\numexpr-90+%
+ \or\expandafter\XINT_cosd_C\the\numexpr-180+%
+ \or\expandafter\XINT_cosd_D\the\numexpr-270+%
+ \else\expandafter\XINT_cosd_E\the\numexpr-360+%
+ \fi#1.%
+}%
+% \end{macrocode}
+% \lverb|#2 will be empty in the "integer" branch, but attention in general
+% branch to handling of negative integer part after the subtraction of 90,
+% 180, 270, or 360, and avoid abusing A[N] notation which yes speeds up
+% xintfrac parsing but has its pitfalls.|
+% \begin{macrocode}
+\def\XINT_cosd_A#1{%
+\def\XINT_cosd_A##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_cosd_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_cosd_B#1{\xint_UDsignfork#1\XINT_cosd_B_n-\XINT_cosd_B_p\krof #1}%
+\def\XINT_tmpa#1{%
+\def\XINT_cosd_B_n-##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+\def\XINT_cosd_B_p##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_cosd_C#1{\xint_UDsignfork#1\XINT_cosd_C_n-\XINT_cosd_C_p\krof #1}%
+\def\XINT_tmpa#1{%
+\def\XINT_cosd_C_n-##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+\def\XINT_cosd_C_p##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_cosd_D#1{\xint_UDsignfork#1\XINT_cosd_D_n-\XINT_cosd_D_p\krof #1}%
+\def\XINT_tmpa#1{%
+\def\XINT_cosd_D_n-##1.##2.%
+{%
+ \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+\def\XINT_cosd_D_p##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+}%
+}\expandafter
+\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+\def\XINT_cosd_E#1{%
+\def\XINT_cosd_E-##1.##2.%
+{%
+ \expandafter\XINT_flexpr_userefunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+}%
+}\expandafter
+\XINT_cosd_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
+% \end{macrocode}
+% \subsection{\cshn{sind()}, \cshn{cosd()}}
+% \begin{macrocode}
+\xintdeffloatefunc sind(x) := ifsgn(x, if(x>=-45, sin_(x*oneDegree), -sind_(-x)),
+ 0,
+ if(x<=45, sin_(x*oneDegree), sind_(x)));%
+\xintdeffloatefunc cosd(x) := ifsgn(x, if(x>=-45, cos_(x*oneDegree), cosd_(-x)),
+ 1,
+ if(x<=45, cos_(x*oneDegree), cosd_(x)));%
+% \end{macrocode}
+% \subsection{\cshn{sin()}, \cshn{cos()}}
+% \lverb|&
+% For some reason I did not define sin() and cos() in January 2019 ??
+% |
+% \begin{macrocode}
+\xintdeffloatefunc sin(x):= if(abs(x)<0.79, sin_(x),%
+ ifsgn(x, -sind_(-x*oneRadian),
+ 0,
+ sind_(x*oneRadian))
+ );%
+\xintdeffloatefunc cos(x):= if(abs(x)<0.79, cos_(x), cosd_(abs(x*oneRadian)));%
+% \end{macrocode}
+% \subsection{\cshn{sinc()}}
+% \lverb|&
+% Should I also consider adding (1-cos(x))/x^2 ?
+% |
+% \begin{macrocode}
+\xintdeffloatefunc sinc(x):=
+ if(abs(x)<0.79, sin_aux(sqr(x)), sind_(abs(x)*oneRadian)/abs(x));%
+% \end{macrocode}
+% \subsection{\cshn{tan()}, \cshn{tand()}, \cshn{cot()}, \cshn{cotd()}}
+% \lverb|The 0 in cot(x) is a dummy place holder, 1/0 would raise an error at
+% time of definition...|
+% \begin{macrocode}
+\xintdeffloatefunc tand(x):= sind(x)/cosd(x);%
+\xintdeffloatefunc cotd(x):= cosd(x)/sind(x);%
+\xintdeffloatefunc tan(x) := ifsgn(x, if(x>-0.79, sin(x)/cos(x), -cotd(90+x*oneRadian)),
+ 0,
+ if(x<0.79, sin(x)/cos(x), cotd(90-x*oneRadian))
+ );%
+\xintdeffloatefunc cot(x) := if(abs(x)<0.79, cos(x)/sin(x),
+ ifsgn(x, -tand(90+x*oneRadian),
+ 0,
+ tand(90-x*oneRadian))
+ );%
+% \end{macrocode}
+%
+% \subsection{\cshn{sec()}, \cshn{secd()}, \cshn{csc()}, \cshn{cscd()}}
+% \begin{macrocode}
+\xintdeffloatefunc sec(x) := inv(cos(x));%
+\xintdeffloatefunc csc(x) := inv(sin(x));%
+\xintdeffloatefunc secd(x):= inv(cosd(x));%
+\xintdeffloatefunc cscd(x):= inv(sind(x));%
+% \end{macrocode}
+% \subsection{Core routine for inverse trigonometry}
+% \lverb|&
+% Compute asin(x)
+%
+% The approach I shall first describe (which is only a first step towards our
+% final approach) converges quintically but requires an initial square root
+% computation. However, when used for atan(x), we then do not have to do any
+% such square root extraction. See code next.
+%
+% The algorithm (for this first approach): we have 0 <= t < 0.72,
+% let t1 = t*(1+t^2/6). We also have
+% u = sqrt(1 - t^2). We seek a = Arcsin t with t = sin(a).
+%
+% Then t1 < Arcsin t and the difference (we don't know it!) δ_1 is < 0.02.
+% We compute D = t*cos(t1)-u*sin(t1). This computation is done "exactly" via
+% the \xintexpr encapsulation. In other terms we use doubled precision.
+% Anyhow, currently (1.3e) the Float macros of xintfrac.sty for multiplication
+% do go via such exact multiplication when the mantissas have the expected
+% sizes. So we can't gain but only lose due to catastrophic subtraction in
+% using float operations here.
+%
+% Thus D is sin(a-t1) = sin(δ_1). And δ_1 = Arcsin D, but D is small!
+% We then use again two terms of the Arcsin series and define
+% t2 = t1 + D * (1 + D^2/6). Let δ_2 = a - t2. Then δ_2 is of the order of
+% the neglected term 3*(δ_1)^5/40.
+%
+% ©copyright J.F. Burnol, March 30, 2019. This surely has a name.
+%
+% The algorithm is quintically convergent! I must have thought about this some
+% many years ago, but I like it a lot and I found it again on March 30, 2019.
+% One can do the same to go from exp to log. Basically the idea is that we can
+% improve the Newton Method for any function f for which knowing target value
+% of f implies one also knows target value of its derivative. In fact I
+% obtained the quintic algorithm by combining the Newton formula with the one
+% from using f(x)/f'(a) and not f(x)/f'(x) in the update to cancel the two
+% quadratic errors.
+%
+% One iteration (t2) gives about 9 digits, two iterations (t3) 49 digits !
+% And if we want hepta-convergence we only need to use one more term
+% of the Arcsin series in the update of the t_n... really this is very nice.
+%
+% And actually (t2) already gives 30 digits of floating point precision for
+% input t<0.1. Let's confirm this:
+%( > Digits := 60:
+%: > t0 := 0.1; t1 := t0*(1+t0^2/6); u0 := sqrt(1-t0^2); D1 :=t0*cos(t1)-u0*sin(t1);
+%: t0 := 0.1
+%:
+%: t1 := 0.100166666666666666666666666666666666666666666666666666666667
+%:
+%: u0 := 0.994987437106619954734479821001206005178126563676806079117605
+%:
+%: -6
+%: D1 := 0.7544948931296072722324333622021201414040837652959011668 10
+%:
+%: > t2 := t1 + D1*(1+D1^2/6);
+%: t2 := 0.100167421161559796345523179452674980956388959919827205633117
+%:
+%: > a := arcsin(0.1);
+%: a := 0.100167421161559796345523179452693318568675972229629541391024
+%: > t2/a;
+%: 0.999999999999999999999999999999816930374423480281306812814173
+%)
+%
+% Each iteration costs a computation of one cos and one sine done at the full
+% final precision. This is stupid because we should compute at an evolving
+% precision, but anyhow this is not our problem anymore as our final algorithm
+% is not a loop but it does exactly one iteration for all inputs. As
+% examplified above it remains true that we could improve its speed for small
+% inputs by using shorter auxiliary series (see below).
+%
+% In January I used a loop via an iter() construct, with some subs() to avoid
+% repeating computations. This can only be done in an \xintNewFunction. Here
+% is how it looked after some optimization for the stopping criteria, after
+% replacing generic Newton algorithm by a specific quintic one for arcsine:
+%
+%( \begingroup
+%: \edef\x{\endgroup
+%: \noexpand\xintNewFunction{asin_l}[2]{%
+%: iter(##1*(1+sqr(##1)/6);%
+%: $% FIXME : réfléchir au critère d'arrêt.
+%: $%
+%: $% Je n'utilise pas abs(D) pour un micro-gain est-ce que le risque en vaut la
+%: $% chandelle ? (avec abs(D) on pourrait utiliser la fonction avec un #1 négatif)
+%: $%
+%: $% Am I sure rounding errors could not cause neverending loop?
+%: $% Such things should be done with increased precision and rounded at end.
+%: subs((D<\ifcase\numexpr2+\XINTdigits-5*(\XINTdigits/5)\relax
+%: 3.68\or2.32\or1.47\or0.923\or0.582\fi
+%: e-\the\numexpr\XINTdigits/5\relax)%
+%: ?{break(@+D*(1+sqr(D)/6))}{@+D*(1+sqr(D)/6)},%
+%: D=\noexpand\xintexpr
+%: subs(##1*cos_aux(X) - ##2*@*sin_aux(X), X=sqr(@))%
+%: \relax
+%: ),%
+%: i=1++)% dummy iteration index, not used but needed by iter()
+%: }}\x
+%)
+%
+% I don't have time to explain the final algorithm below and how the
+% transition values were chosen or why (the series below is enough up to 59
+% digits of precision). It does only one iteration, in all cases. Using it for
+% arcsine requires a preliminary square root extraction, but for arctangent
+% one can arrange things as I did in order to avoid having to compute a square
+% root!
+%
+%
+% ©copyright J.F. Burnol, April 5, 2019. This surely has a name.
+%
+% Certainly I can do similar things to compute logarithms.
+% |
+% \begin{macrocode}
+\xintdeffloatefunc asin_aux(X) := 1
+\ifnum\XINTdigits>3 % actually 4 would achieve 1ulp in place of <0.5ulp
+ + X(1/6
+\ifnum\XINTdigits>9
+ + X(3/40
+\ifnum\XINTdigits>16
+ + X(5/112
+\ifnum\XINTdigits>25
+ + X(35/1152
+\ifnum\XINTdigits>35
+ + X(63/2816
+\ifnum\XINTdigits>46
+ + X(231/13312
+ )\fi)\fi)\fi)\fi)\fi)\fi;%
+\xintdeffloatefunc asin_o(D, T) := T + D*asin_aux(sqr(D));%
+\xintdeffloatefunc asin_n(V, T, t, u) :=% V is square of T
+ asin_o (\xintexpr t*cos_aux(V) - u*T*sin_aux(V)\relax, T);%
+\xintdeffloatefunc asin_m(T, t, u) := asin_n(sqr(T), T, t, u);%
+\xintdeffloatefunc asin_l(t, u) := asin_m(t*asin_aux(sqr(t)), t, u);%
+% \end{macrocode}
+% \subsection{\cshn{asin()}, \cshn{asind()}}
+% \lverb|&
+% Only non-negative arguments t and u for asin_a(t,u), and asind_a(t,u).
+% |
+% \begin{macrocode}
+\xintdeffloatefunc asin_a(t, u) :=
+ if(t<u, asin_l(t, u), Piover2 - asin_l(u, t));%
+\xintdeffloatefunc asind_a(t, u):=
+ if(t<u, asin_l(t, u) * oneRadian, 90 - asin_l(u, t) * oneRadian);%
+\xintdeffloatefunc asin(t) := ifsgn(t, -asin_a(-t, sqrt(1-sqr(t))),
+ 0,
+ asin_a(t, sqrt(1-sqr(t))));%
+\xintdeffloatefunc asind(t) := ifsgn(t, -asind_a(-t, sqrt(1-sqr(t))),
+ 0,
+ asind_a(t, sqrt(1-sqr(t))));%
+% \end{macrocode}
+% \subsection{\cshn{acos()}, \cshn{acosd()}}
+% \begin{macrocode}
+\xintdeffloatefunc acos(t) := Piover2 - asin(t);%
+\xintdeffloatefunc acosd(t):= 90 - asind(t);%
+% \end{macrocode}
+% \subsection{\cshn{atan()}, \cshn{atand()}}
+% \lverb|&
+% This involves no square root!
+%
+% TeX hackers note 1:
+%
+% The subs( , x = ..) mechanism has no utility in a function definition,
+% there is no parallel mechanism at the underlying macros, so in fact
+% the substituted things will remain unevaluated if they involve
+% indeterminates, so this is exactly like not trying to make things
+% more efficient at all.
+%
+% Currently, the only way is thus to employ auxiliary functions like is done
+% next. Contrarily to TeX macros, we must define the functions one after the
+% other in the correct order, so the auxiliaries come first.
+%
+% TeX hackers note 2:
+%
+% The if(,,) and ifsgn(,,,) tests when used numerically compute all ; but when
+% used into a \xintdeffloatefunc, they are converted to macros with basically
+% \firstofthree, \secondofthree, \thirdofthree behaviour so then only the
+% actually executed branch will do computations.
+%
+% For numeric computations the ? and ?? operators are used for this effect,
+% but they can not be used in \xintdeffloatefunc if the test involves unknown
+% variables; as explained above fortunately then if(,,) and ifsgn(,,) work.
+%
+% radians
+% |
+% \begin{macrocode}
+\xintdeffloatefunc atan_b(t, w, z):=%
+ 0.5 * if(w< 0, Pi - asin_a(2z * t, -w*z), asin_a(2z * t, w*z));%
+\xintdeffloatefunc atan_a(t, T) := atan_b(t, 1-T, inv(1+T));%
+\xintdeffloatefunc atan(t):= ifsgn(t,-atan_a(-t, sqr(t)), 0, atan_a(t, sqr(t)));%
+% \end{macrocode}
+% \lverb|&
+% degrees
+% |
+% \begin{macrocode}
+\xintdeffloatefunc atand_b(t, w, z) :=
+ 0.5 * if(w< 0, 180 - asind_a(2z * t, -w*z), asind_a(2z * t, w*z));%
+\xintdeffloatefunc atand_a(t, T) := atand_b(t, 1-T, inv(1+T));%
+\xintdeffloatefunc atand(t):= ifsgn(t,-atand_a(-t, sqr(t)), 0, atand_a(t, sqr(t)));%
+% \end{macrocode}
+% \subsection{\cshn{Arg()}, \cshn{atan2()}, \cshn{Argd()}, \cshn{atan2d()}, \cshn{pArg()}, \cshn{pArgd()}}
+% \lverb|&
+% Arg(x,y) function from -Ï€ (excluded) to +Ï€ (included)
+% |
+% \begin{macrocode}
+\xintdeffloatefunc Arg(x, y):=
+ if(y>x,
+ if(y>-x, Piover2 - atan(x/y),
+ if(y<0, -Pi + atan(y/x), Pi + atan(y/x))),
+ if(y>-x, atan(y/x), -Piover2 + atan(x/-y))
+ );%
+% \end{macrocode}
+% \lverb|&
+% atan2(y,x) = Arg(x,y) ... (some people have atan2 with arguments reversed
+% but the convention here seems the most often encountered)
+% |
+% \begin{macrocode}
+\xintdeffloatefunc atan2(y,x) := Arg(x, y);%
+% \end{macrocode}
+% \lverb|&
+% Argd(x,y) function from -180 (excluded) to +180 (included)
+% |
+% \begin{macrocode}
+\xintdeffloatefunc Argd(x, y):=
+ if(y>x,
+ if(y>-x, 90 - atand(x/y),
+ if(y<0, -180 + atand(y/x), 180 + atand(y/x))),
+ if(y>-x, atand(y/x), -90 + atand(x/-y))
+ );%
+% \end{macrocode}
+% \lverb|&
+% atan2d(y,x) = Argd(x,y)
+% |
+% \begin{macrocode}
+\xintdeffloatefunc atan2d(y,x) := Argd(x, y);%
+% \end{macrocode}
+% \lverb|&
+% pArg(x,y) function from 0 (included) to 2Ï€ (excluded)
+% I hesitated between pArg, Argpos, and Argplus. Opting for pArg in the end.
+% |
+% \begin{macrocode}
+\xintdeffloatefunc pArg(x, y):=
+ if(y>x,
+ if(y>-x, Piover2 - atan(x/y), Pi + atan(y/x)),
+ if(y>-x, if(y<0, twoPi + atan(y/x), atan(y/x)),
+ threePiover2 + atan(x/-y))
+ );%
+% \end{macrocode}
+% \lverb|&
+% pArgd(x,y) function from 0 (included) to 360 (excluded)
+% |
+% \begin{macrocode}
+\xintdeffloatefunc pArgd(x, y):=
+ if(y>x,
+ if(y>-x, 90 - atan(x/y)*oneRadian, 180 + atan(y/x)*oneRadian),
+ if(y>-x, if(y<0, 360 + atan(y/x)*oneRadian, atan(y/x)*oneRadian),
+ 270 + atan(x/-y)*oneRadian)
+ );%
+% \end{macrocode}
+% \subsection{Synonyms: \cshn{tg()}, \cshn{cotg()}}
+% \lverb|These are my childhood notations and I am attached to them. In
+% radians only. We skip some overhead here by using a \let at core level.|
+% \begin{macrocode}
+\expandafter\let\csname XINT_flexpr_func_tg\expandafter\endcsname
+ \csname XINT_flexpr_func_tan\endcsname
+\expandafter\let\csname XINT_flexpr_func_cotg\expandafter\endcsname
+ \csname XINT_flexpr_func_cot\endcsname
+% \end{macrocode}
+% \subsection{Let the functions be known to the \cshnolabel{xintexpr} parser}
+% \lverb|See xint.pdf for some explanations (as well as code comments in
+% xintexpr.sty). In fact it is this context which led to my addition at 1.3e of
+% \xintdefefunc to the \xintexpr syntax. |
+% \begin{macrocode}
+\xintFor #1 in {sin, cos, tan, sec, csc, cot,
+ asin, acos, atan}\do
+{%
+ \xintdefefunc #1(x) := \xintfloatexpr #1(sfloat(x))\relax;%
+ \xintdefefunc #1d(x):= \xintfloatexpr #1d(sfloat(x))\relax;%
+}%
+\xintFor #1 in {Arg, pArg, atan2}\do
+{%
+ \xintdefefunc #1(x, y) := \xintfloatexpr #1(sfloat(x), sfloat(y))\relax;%
+ \xintdefefunc #1d(x, y):= \xintfloatexpr #1d(sfloat(x), sfloat(y))\relax;%
+}%
+\xintdefefunc tg(x) := \xintfloatexpr tg(sfloat(x))\relax;%
+\xintdefefunc cotg(x):= \xintfloatexpr cotg(sfloat(x))\relax;%
+\xintdefefunc sinc(x):= \xintfloatexpr sinc(sfloat(x))\relax;%
+% \end{macrocode}
+% \lverb|Restore used dummy variables to their status prior to the package reloading.
+% On first loading this is not needed naturally, because this is done
+% immediately at end of xintexpr.sty.|
+% \begin{macrocode}
+\xintFor* #1 in {iDTVtuwxyzX}\do{\xintrestorelettervar{#1}}%
+% \end{macrocode}
+% \StoreCodelineNo {xinttrig}
+% \cleardoublepage\let\xinttrignameUp\undefined
+%\gardesactifs
+%\let</xinttrig>\relax
+%\let<*xintlog>\gardesinactifs
+%</xinttrig>^^A--------------------------------------------------
+%<*xintlog>^^A---------------------------------------------------
+%^^A -*- coding: utf-8; mode: doctex; fill-column: 78; -*-
+% \clearpage\csname xintlognameUp\endcsname
+% \section{Package \xintlognameimp implementation}
+% \RaisedLabel{sec:logimp}
+% \etocarticlestylenomarks
+% \etocsetnexttocdepth {subsubsection}
+%
+% \localtableofcontents
+%
+% \etocsettocstyle{}{}
+%
+% I almost included extended precision implementation for 1.3e but
+% was a bit short on time; besides I hesitated between using poormanlog
+% at starting point or not. For up to 50 digits, it would help reduce
+% considerably the needed series for the logarithm. For more digits
+% I should rather apply my copyrighted method of the arcsine (it must
+% be in literature).
+%
+% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \catcode94=7 % ^
+ \def\z{\endgroup}%
+ \def\empty{}\def\space{ }\newlinechar10
+ \expandafter\let\expandafter\w\csname ver@xintexpr.sty\endcsname
+ \expandafter\let\expandafter\x\csname ver@xintlog.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info:^^J%
+ \space\space\space\space#2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintlog}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\w\relax % xintexpr.sty not yet loaded.
+ \y{xintlog}%
+ {Loading should be via \ifx\x\empty\string\usepackage{xintexpr.sty}
+ \else\string\input\space xintexpr.sty \fi
+ rather, aborting}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % first loading (initiated from xintexpr.sty)
+ \else
+ \ifx\x\empty % LaTeX first loading, \ProvidesPackage not yet seen
+ \else
+ \y{xintlog}{Already loaded, aborting}%
+ \aftergroup\endinput
+ \fi
+ \fi
+ \fi
+ \fi
+\z%
+% \end{macrocode}
+% \lverb|Attention to catcode regime when loading below poormanlog. It (v0.04)
+% uses ^ with its normal catcode but \XINT_setcatcodes would set it to letter.
+%
+% This file can only be loaded from xintexpr.sty and it restores catcodes near
+% its end. To play it safe and be hopefully immune to whatever is done in
+% poormanlog or in xinttrig.sty which is loaded before, we will switch to
+% standard catcode regime here.
+%
+% As I learned the hard way (I never use my user macros), at the worst moment
+% when wrapping up the final things for 1.3e release,
+% \xintexprSafeCatcodes MUST be followed by some \xintexprRestoreCatcodes
+% quickly, else next time it is used (for example by \xintdefvar) the
+% \xintexprRestoreCatcodes will restore an obsolete catcode regime...|
+% \subsection{Library identification}
+% \begin{macrocode}
+\xintexprSafeCatcodes\catcode`_ 11
+\XINT_providespackage
+\ProvidesPackage{xintlog}%
+[2019/04/05 1.3e Logarithms and exponentials for xintexpr (JFB)]%
+% \end{macrocode}
+% \subsection{Loading of \cshn{poormanlog} package}
+% \lverb|Attention to catcode regime when loading poormanlog.|
+% \begin{macrocode}
+\ifdefined\RequirePackage
+ \RequirePackage{poormanlog}%
+\else
+ \input poormanlog.tex
+\fi
+% \end{macrocode}
+% \lverb|\XINT_setcatcodes switches to the standard catcode regime of
+% xint*.sty files. And we need the xintexpr catcode for ! too.
+%
+% See remark above about \xintexprRestoreCatcodes.|
+% \begin{macrocode}
+\xintexprRestoreCatcodes\csname XINT_setcatcodes\endcsname\catcode`\! 11
+% \end{macrocode}
+% \subsection{Support macros for natural logarithm and exponential}
+% \begin{macrocode}
+\def\xintLog#1{\xintMul{\PoorManLogBaseTen{#1}}{23025850923[-10]}}%
+\def\XINTinFloatLog#1{\XINTinFloatMul{\PoorManLogBaseTen{#1}}{23025850923[-10]}}%
+\def\xintExp#1{\PoorManPowerOfTen{\xintMul{#1}{434294481903[-12]}}}%
+\def\XINTinFloatExp#1{\PoorManPowerOfTen{\XINTinFloatMul{#1}{434294481903[-12]}}}%
+% \end{macrocode}
+% \subsection{The \cshn{log()}, \cshn{exp()}, and \cshn{pow()} function}
+% \lverb|The log10() and pow10() are already defined by poormanlog.|
+% \begin{macrocode}
+\def\XINT_expr_func_log #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintLog{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_log #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\XINTinFloatLog{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_exp #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\xintExp{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_flexpr_func_exp #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \XINT:NEhook:one\XINTinFloatExp{\XINT_expr_unlock #3}\endcsname
+}%
+\def\XINT_expr_func_pow #1#2#3%
+{%
+ \expandafter #1\expandafter #2\csname.=%
+ \expandafter\XINT:NEhook:twosp
+ \romannumeral`&&@\XINT_expr_unlock #3,!\PoorManPower
+ \endcsname
+}%
+\let\XINT_flexpr_func_pow\XINT_expr_func_pow
+% \end{macrocode}
+% \lverb|We don't worry about setting catcodes as this file is theoretically
+% only loadable from xintexpr.sty itself.|
+% \StoreCodelineNo {xintlog}
+% \cleardoublepage\let\xintlognameUp\undefined
+% \MakePercentComment
+%</xintlog>------------------------------------------------------
+%<*dtx>-----------------------------------------------------------
+\iffalse
+% grep -c -e "^{%" xint*sty
+xint.sty:190
+xintbinhex.sty:53
+xintcfrac.sty:183
+xintcore.sty:274
+xintexpr.sty:285
+xintfrac.sty:468
+xintgcd.sty:48
+xintkernel.sty:15
+xintlog.sty:5
+xintseries.sty:48
+xinttools.sty:140
+xinttrig.sty:31
+\fi
+% grep -o "^{%" xint*sty | wc -l
+\def\totala{ 1740}
+\iffalse
+% grep -c -e "^}%" xint*sty
+xint.sty:189
+xintbinhex.sty:52
+xintcfrac.sty:183
+xintcore.sty:271
+xintexpr.sty:312
+xintfrac.sty:470
+xintgcd.sty:50
+xintkernel.sty:16
+xintlog.sty:5
+xintseries.sty:48
+xinttools.sty:139
+xinttrig.sty:32
+\fi
+% grep -o "^}%" xint*sty | wc -l
+\def\totalb{ 1767}
+\cleardoublepage
+\section{Cumulative line count}
+
+\def\mymacro #1{\mymacroaux #1}
+\def\mymacroaux #1#2{\strut \csname #1nameimp\endcsname:& \dtt{ #2.}\tabularnewline }
+\indent
+\begin{tabular}[t]{r@{}r}
+\xintApplyInline\mymacro\storedlinecounts
+\end{tabular}
+\def\mymacroaux #1#2{#2}%
+%
+\parbox[t]{10cm}{Total number of code lines:
+ \dtt{\the\numexpr
+ \xintListWithSep+{\xintApply\mymacro\storedlinecounts}\relax }.
+ \ifdefined\totala
+ (but \dtt{\the\numexpr \totala+\totalb\relax} lines among them
+ start either with \{\% or with \}\%.)\fi
+
+ Each package starts with circa \dtt{50} lines dealing with catcodes,
+ package identification and reloading management, also for Plain
+ \TeX\strut. Version {\xintbndlversion} of {\xintbndldate}.\par
+}
+
+\CheckSum {33274}% 1.3e
+% 31601 pour 1.3d, 31122 pour 1.3c
+% 31069 pour 1.3b, 30482 pour 1.3a, 30621 pour 1.3, 30988 pour 1.2q,
+% 30982 pour 1.2p, 30524 pour 1.2o, 30303 pour 1.2h, 30403 pour 1.2i,
+% 30750 pour 1.2j, 30677 pour 1.2k, 30931 pour 1.2l, 30439 pour 1.2m,
+% 30253 pour 1.2n
+\makeatletter\check@checksum
+\Finale
+%% End of file xint.dtx
diff --git a/macros/generic/xint/xint.pdf b/macros/generic/xint/xint.pdf
new file mode 100644
index 0000000000..991d2ac665
--- /dev/null
+++ b/macros/generic/xint/xint.pdf
Binary files differ
diff --git a/macros/generic/xlop/LISEZMOI b/macros/generic/xlop/LISEZMOI
new file mode 100644
index 0000000000..dac9121496
--- /dev/null
+++ b/macros/generic/xlop/LISEZMOI
@@ -0,0 +1,69 @@
+PRÉSENTATION RAPIDE
+-------------------
+L'extension xlop s'articule autour de deux fonctionnalités
+générales. La première consiste à afficher les opérations de façon
+automatique (posées ou en ligne), c'est-à-dire en ne fournissant que
+les opérandes de l'opération. La seconde consiste à permettre de
+manipuler des nombres de taille quelconque, la seule limitation étant
+la mémoire de TeX. Ces manipulations incluent toutes les opérations
+usuelles, les entrées-sorties, la notion de variable numérique, les
+tests et quelques opérations de haut niveau (sans permettre les
+opérations nécessitant un traitement infini telles l'exponentielle,
+les fonctions trigonométriques, etc.).
+
+DISTRIBUTION
+------------
+Licence
+-------
+Tous les fichiers sources sont sous licence lppl
+
+Contenu
+-------
+La distribution comporte les fichiers suivants :
+ - LISEZ.MOI (celui que vous êtes en train de lire) ;
+ - README (le même en anglais) ;
+ - history.txt qui retrace l'historique rapide du projet ;
+ - manual.sty qui est le fichier de style nécessaire à la compilation
+ des fichiers de documentation ;
+ - xlop-doc-fr.tex qui est le source du manuel français de l'utilisateur
+ de xlop ;
+ - xlop-doc.tex qui est le source du manuel anglais de l'utilisateur de
+ xlop ;
+ - xlop-doc-fr.pdf qui est le pdf du manuel français de l'utilisateur
+ de xlop ;
+ - xlop-doc.pdf qui est le pdf du manuel anglais de l'utilisateur de
+ xlop ;
+ - xlop.tex qui contient le code de l'extension ;
+ - xlop.sty qui permet d'utiliser xlop comme une extension LaTeX.
+
+Installation
+------------
+L'extension étant prévue pour pouvoir fonctionner aussi bien sous TeX
+que sous LaTeX, les recommandations de la TDS indiquent que l'endroit
+le plus correct pour placer le fichier xlop.tex est
+ [texmf]/tex/generic/xlop/
+et celui pour placer le fichier xlop.sty est
+ [texmf]/tex/latex/xlop/
+
+Il reste les fichiers de documentation (LISEZ.MOI, README,
+history.txt, manual.sty et fr-user.*). Leur place normale devrait
+être [texmf]/doc/xlop/.
+
+Il reste à rafraichir la base en lançant la commande texhash (ou
+mktexlsr, ou ...) et tout devrait être opérationnel.
+
+BOGUES ET AUTRES DÉSAGREMENTS
+-----------------------------
+Si vous détectez un bogue, quel que soit sa gravité (cela peut
+simplement être des espaces parasites par exemple) essayez de réaliser
+un exemple le plus court possible reproduisant le bogue. En
+particulier, ne mettez aucune autre extension non nécessaire. Envoyez
+le source ainsi qu'une explication, éventuellement très courte, du
+problème rencontré à l'adresse suivante :
+
+Jean-Come.Charpentier@wanadoo.fr
+
+Si vous souhaitez une certaine fonctionnalité pour une version
+ultérieure de l'extension, n'hésitez pas à en faire part à
+l'auteur. Pour aider mon logiciel antispam, écrivez 'xlop' dans le
+sujet du message.
diff --git a/macros/generic/xlop/README b/macros/generic/xlop/README
new file mode 100644
index 0000000000..ca05f54983
--- /dev/null
+++ b/macros/generic/xlop/README
@@ -0,0 +1,56 @@
+OVERVIEW
+--------
+Package xlop proposes two main features. First, xlop prints
+operations (displayed or running), that is, user write only
+operands. Second, xlop is able to deal with unlimited numbers, in
+fact, limitations are due to TeX memory. This features include
+basic arithmetic operations, input/ouput, numeric variables, tests,
+and some high level operation (without operations which imply infinite
+processing such exponential, trigonometric functions, etc.).
+
+DISTRIBUTION
+------------
+License
+-------
+All the source files have the license type lppl
+
+Contents
+--------
+Distribution consists of files:
+ * README (the file you are reading)
+ * LISEZ.MOI (same in french)
+ * history.txt relates project history
+ * manual.sty package file to compile documentation
+ * xlop-doc-fr.tex and xlop-doc-fr.pdf source and pdf of french user's
+ manual of xlop
+ * xlop-doc.tex and xlop-doc.pdf source and pdf of english user's
+ manual of xlop
+ * xlop.tex xlop code
+ * xlop.sty allow the use of xlop as LaTeX package
+
+Installation
+------------
+xlop can be used under TeX or LaTeX. Thus, TDS recommendations are
+that the best place to put the file xlop.tex is
+ [texmf]/tex/generic/xlop/
+and that the best place to put xlop xlop.sty is
+ [texmf]/tex/latex/xlop/
+
+For documentation files (README, history.txt, manual.sty, and
+fr-user.*), best place should be [texmf]/doc/generic/xlop/.
+
+You have just to run texhash command (or mktexlsr, or ...) to refresh
+your texmf base and all should work fine.
+
+BUGS AND TROUBLES
+-----------------------------
+If you detect some bug, whatever its seriousness (that could be just
+spurious spaces), try to illustre this error with an example as short
+as possible. Particularly, don't use unecessary package. Sent your
+code with a short explanation at:
+
+Jean-Come.Charpentier@wanadoo.fr
+
+If you wish for some feature in a future version, ask to the author.
+To help my antispam soft, could you please write 'xlop' in the message
+subject?
diff --git a/macros/generic/xlop/doc/manual.sty b/macros/generic/xlop/doc/manual.sty
new file mode 100644
index 0000000000..e5f4f549d3
--- /dev/null
+++ b/macros/generic/xlop/doc/manual.sty
@@ -0,0 +1,48 @@
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage{fourier}
+\usepackage[scaled]{helvet}
+\usepackage[scaled]{luximono}
+\usepackage{makeidx}
+\usepackage{longtable}
+\usepackage{multicol}
+\usepackage{pst-node}
+\usepackage{fvrb-ex}
+\usepackage{geometry}
+\usepackage{hyperref}
+\usepackage{microtype}
+\usepackage{xlop}
+
+\fvset{xrightmargin=5cm,frame=single,fontsize=\small}
+\geometry{a4paper,left=4cm,right=4cm,top=3cm,bottom=3cm,nohead}
+
+\let\SBSori\SideBySideExample
+\def\SideBySideExample{%
+ \par\bigbreak\SBSori
+}
+\let\endSBSori\endSideBySideExample
+\def\endSideBySideExample{%
+ \endSBSori
+ \par\bigskip\noindent}
+
+\newenvironment{syntaxBNF}{%
+ \catcode`\_=12
+ \def\*##1*{$\langle$##1$\rangle$}%
+ \def\alt{\unskip~$|$~\ignorespaces}%
+ \def\sameline{\multicolumn{1}{c}{} & \null\quad}%
+ \ttfamily
+ \begin{center}\begin{tabular}{r@{\quad:=\quad}l}}
+{\end{tabular}\end{center}}
+
+\setlongtables
+\newcommand\package[1]{\textsf{#1}}
+\newcommand\file[1]{\texttt{#1}}
+
+\newcommand\macro[1]{\texttt{$\backslash$#1}\index{#1@\texttt{\boi {#1}}}}
+\newcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}%
+ \index{parametre@paramètre!\texttt{#1}}}
+
+\newcommand\bull{\vrule width3pt height4pt depth-1pt}
+
+\newcounter{stuff}
+\makeindex
diff --git a/macros/generic/xlop/doc/xlop-doc-fr.pdf b/macros/generic/xlop/doc/xlop-doc-fr.pdf
new file mode 100644
index 0000000000..04743ca0a2
--- /dev/null
+++ b/macros/generic/xlop/doc/xlop-doc-fr.pdf
Binary files differ
diff --git a/macros/generic/xlop/doc/xlop-doc-fr.tex b/macros/generic/xlop/doc/xlop-doc-fr.tex
new file mode 100644
index 0000000000..060cde198b
--- /dev/null
+++ b/macros/generic/xlop/doc/xlop-doc-fr.tex
@@ -0,0 +1,2474 @@
+\documentclass[12pt]{report}
+\usepackage{manual}
+\usepackage[frenchb]{babel}
+\usepackage[autolanguage]{numprint}
+\fvset{label=source}% français
+
+\begin{document}
+\begin{titlepage}
+ \null\par\vfill
+ \begin{center}
+ \begin{minipage}{0.75\linewidth}
+ \hrule width\linewidth height2pt depth0pt
+ \hrule width0pt height3pt depth0pt
+ \hrule width\linewidth height1pt depth0pt
+ \hrule width0pt height18pt depth0pt
+ \begin{center}
+ \Huge\bfseries XLOP v \fileversion\par\vskip18pt
+ Manuel de l'utilisateur
+ \end{center}
+ \hrule width0pt height6pt depth0pt
+ \hrule width\linewidth height1pt depth0pt
+ \hrule width0pt height3pt depth0pt
+ \hrule width\linewidth height2pt depth0pt
+ \end{minipage}
+ \end{center}
+ \vfill
+ \begin{center}
+ Jean-Côme Charpentier\\
+ \today
+ \end{center}
+ \vfill\null\par
+\end{titlepage}
+\newpage
+\pagenumbering{roman}
+\tableofcontents
+\newpage
+\pagenumbering{arabic}
+
+\chapter{Présentation}
+\label{chap:Présentation}
+L'extension \package{xlop} a été développée pour permettre de réaliser
+automatiquement des calculs arithmétiques sur des nombres de taille
+quelconque et d'afficher les résultats sous forme posée ou en
+ligne. Voici un premier exemple permettant de donner un aperçu de la
+syntaxe de base :
+\begin{SideBySideExample}
+ \opadd{45,05}{78,4}
+\end{SideBySideExample}
+Ce premier exemple appelle quelques commentaires qui permettront de
+donner une idée sur la façon de manipuler l'extension.
+
+L'addition est posée \og comme à l'école \fg{} : il s'agit de la
+présentation par défaut. On a un alignement sur la virgule des
+opérandes et du résultat, le symbole opératoire placé à gauche est
+centrée verticalement entre les deux opérandes et le séparateur
+décimal est un point malgré le fait d'avoir indiquer les opérandes
+avec une virgule dans l'appel de la macro. Enfin, on notera la
+présence d'une retenue au dessus de la première opérande.
+
+Mis à part l'alignement sur la virgule qui est obligatoire pour
+l'addition posée, toutes les autres caractéristiques décrites
+ci-dessus sont paramétrables. Certaines macros de l'extension et, en
+tout cas, toutes les macros affichant les opérations arithmétiques
+admettent un argument optionnel qui permettra de contrôler la
+présentation. Pour cela, on utilisera une syntaxe \og à la keyval
+\fg{} : on spécifie une suite de modifications de paramètres par une
+liste d'affectations séparées par des virgules. Une affectation a
+une des deux syntaxes possibles ci-dessous :
+\begin{verbatim}
+ <paramètres>=<valeur>
+ <paramètre>
+\end{verbatim}
+la seconde possibilité étant en fait un raccourci pour :
+\begin{verbatim}
+ <paramètre>=true
+\end{verbatim}
+Dans cette liste d'affectation, on peut faire suivre les virgules par
+un ou plusieurs espaces mais il ne faut pas mettre d'espace de part et
+d'autre du signe égal ou avant la virgule : un paramètre ou une valeur
+pouvant (potentiellement) comporter le caractère espace.
+
+Ainsi, si l'on veut un séparateur décimal qui soit une virgule, un
+symbole opératoire placé en face de la seconde opérande et en
+supprimant la présence des retenues, il suffit d'indiquer :
+\begin{SideBySideExample}
+ \opadd[decimalsepsymbol={,},
+ voperator=bottom,
+ carryadd=false]{45.05}{78.4}
+\end{SideBySideExample}
+On notera la petite astuce consistant à mettre la virgule entre
+accolades dans la définition du symbole du séparateur décimal. En
+effet, la syntaxe :
+\begin{Verbatim}[xrightmargin=0pt]
+ \opadd[decimalsepsymbol=,,voperator=bottom,
+ carryadd=false]{45.05}{78.4}
+\end{Verbatim}
+est fautive : \package{xlop} ne comprenant plus trop bien ce qu'est
+cette \og liste \fg{} !
+
+Un autre point important quoique moins visible, est que les chiffres
+sont disposés à des emplacements très précis. Chaque chiffre est placé
+dans une boîte de largeur et de hauteur fixes (paramétrables), le
+séparateur décimal est, par défaut, placé dans une boîte de largeur
+nulle et toutes les lignes sont régulièrement espacées qu'il y ait ou
+non un trait horizontal. Cela permet d'obtenir des alignements
+rigoureux et permet également de placer ce que l'on veut à
+l'emplacement que l'on veut.
+\begin{SideBySideExample}
+ \psset{xunit=\opcolumnwidth,
+ yunit=\oplineheight}
+ \opadd{45.05}{78.4}
+ \oplput(1.5,3){retenue}
+ \psline{->}(1,3.15)(-3.25,3.15)
+\end{SideBySideExample}
+Cet exemple a été réalisé en utilisant l'extension
+\package{pstricks}\index{pstricks@\package{pstricks}}
+
+Nous avons dit précédemment que \package{xlop} était capable de
+manipuler des nombres de taille quelconque. Nous reviendrons plus en
+détail sur cette possibilité et nous nous contenterons ici de ne donner
+qu'un exemple de ce que cela peut offrir. Ne regardez pas trop le
+code, les explications seront données plus loin dans ce manuel, pour
+l'instant, admirez seulement le résultat !
+\begin{CenterExample}[xrightmargin=0pt]
+ \opdiv[style=text,period]{1}{49}
+\end{CenterExample}
+
+L'extension \package{xlop} offre quelques autres fonctionnalités. Il
+est ainsi possible de manipuler les nombres par l'intermédiaire de
+variables, ces variables pouvant être créées par une assignation
+simple ou bien comme résultat d'un calcul. On peut également manipuler
+les chiffres de façon individuelle :
+\begin{SideBySideExample}
+ \opadd*{45.05}{78.4}{r}%
+ Le premier chiffre après la virgule de
+ $45.05+78.4$ est un
+ \opgetdecimaldigit{r}{1}{d}%
+ $\opprint{d}$.
+\end{SideBySideExample}
+effectuer des tests :
+\begin{SideBySideExample}
+ \opadd*{45.05}{78.4}{r}%
+ La somme $45.05+78.4$ est
+ \opcmp{r}{100}%
+ \ifopgt strictement supérieure
+ \else\ifoplt strictement inférieure
+ \else égale
+ \fi\fi
+ à $100$.
+\end{SideBySideExample}
+avoir accès à quelques opérations ou fonctions :
+\begin{SideBySideExample}
+ Le pgcd de $182$ et $442$ est
+ \opgcd{182}{442}{d}$\opprint{d}$
+\end{SideBySideExample}
+pouvoir réaliser des calculs complexes sous forme infixe :
+\begin{SideBySideExample}
+ \opexpr{(2+3^2)/(gcd(22,33))}{r}%
+ $$\frac{2+3^2}{\gcd(22,33)} =
+ \opprint{r}$$
+\end{SideBySideExample}
+
+\chapter{Instruction \package{xlop}}
+\`A quelques exceptions près qui seront étudiées en temps voulu, les
+macros de \package{xlop} peuvent éventuellement avoir un argument
+optionnel entre crochets pour modifier localement la valeur des
+paramètres de fonctionnement, les autres arguments (qui sont
+obligatoires) étant presque toujours des nombres. Les deux sections de
+ce chapitre décrivent en détail ce qu'est un nombre pour
+\package{xlop} et comment se servir des paramètres.
+
+\section{Au début était le nombre}
+\label{sec:Au début etait le nombre}
+\subsection{Taille}
+\label{subsec:Taille}
+Avant de voir la syntaxe générale d'un nombre, nous allons nous
+pencher sur la particularité de \package{xlop} qui est de pouvoir
+manipuler des nombres de taille quelconque.
+
+\index{nombre!taille}Pour être tout à fait précis, la taille théorique
+maximum d'un nombre est de $2^{31}-1$ chiffres\index{nombre!limite}.
+En pratique, cette limite ne pourra pas être atteinte pour deux
+raisons essentielles. La première est qu'une multiplication avec deux
+opérandes ayant $2^{25}$ chiffres demanderait plus de $7\,000$ années
+de calcul sur l'ordinateur de l'auteur ! La seconde est beaucoup plus
+restrictive car elle est liée aux limites de taille des piles de
+\TeX{}. Voici un tableau indiquant une compilation sous \TeX{} avec
+une multiplication de deux opérandes de même taille sur une machine
+Linux, pentium~II~600 et 256~Mo de RAM :
+\begin{center}
+ \begin{tabular}{|l|*{6}{c|}}
+ \hline
+ nombre de chiffres & 100 & 200 & 300 & 400 & 425 & 450 \\\hline
+ temps de compilation (s) & 2 & 8 & 18 & 32 & 36 & crash \\\hline
+ \end{tabular}
+\end{center}
+Le \og crash \fg{} indiqué dans le tableau est dû au débordement de la
+table de hachage (hash table). \index{hash table}%
+\index{depassement de capacite@dépassement de capacité}%
+Sous \LaTeX{}, la limite avant crash sera plus réduite. D'autre part,
+ces tests ont été effectués sur un fichier minimum : avec un document
+source classique, cette limite sera un peu plus basse. Une autre
+limite qui risque d'être atteinte relativement rapidement est la
+taille du spouleur (spool size). \index{spool size}%
+Pour composer ce document qui contient un grand nombre d'appel aux
+macros de \package{xlop}, l'auteur a augmenté la taille du spouleur
+de~$125\,000$ à~$250\,000$ en éditant la ligne \verb+pool_size+ du
+fichier \file{texmf.cnf}. De même, la table de hachage a dû être
+augmentée en stipulant la valeur \texttt{1000} au niveau de la ligne
+\verb+hash_extra+ du fichier \file{texmf.cnf}.
+
+\subsection{Syntaxe}
+\label{subsec:Syntaxe}
+Nous allons présenter cette syntaxe avec la grammaire BNF mais des
+explications plus humaines suivront :
+\begin{syntaxBNF}
+ \*nombre* & \{\*signe*\}\*nombre_positif* \alt \*nom* \\
+ \*signe* & + \alt - \\
+ \*nombre_positif* & \*entier* \alt \*sep*\*entier* \alt \\
+ \sameline \*entier*\*sep* \alt \*entier*\*sep*\*entier* \\
+ \*sep* & . \alt , \\
+ \*entier* & \*chiffre*\{\*chiffre*\} \\
+ \*nom* & \*début*\{caractère\} \\
+ \*début* & caractère \textnormal{autre que } \*signe*\textnormal{,}
+ \*sep* \\
+ \sameline \textnormal{et} \*chiffre*
+\end{syntaxBNF}
+\index{syntaxe BNF}\index{BNF}\index{grammaire BNF}
+
+Le symbole \texttt{caractère} désigne presque n'importe quel caractère
+accepté par \TeX{}. Les seules exceptions sont les caractères \verb+%+,
+et \verb+#+ qui sont totalement interdits. En fait, les caractères
+actifs risquent de poser des problèmes. Par exemple, la définition de
+\verb+~+ sous \LaTeX{} empêche ce caractère de pouvoir faire partie
+d'un nom. D'autre part, le caractère \verb+\ +conserve sont rôle de
+caractère d'échappement, c'est-à-dire que le nom sera celui obtenu
+après développement de la macro introduite. Il n'y a aucune autre
+contrainte comme le montre le code suivant :
+\begin{SideBySideExample}
+ \newcommand\prefix{a/b}
+ \opadd*{2}{2}{a/b_{^c}!&$}
+ \opprint{\prefix_{^c}!&$}
+\end{SideBySideExample}
+\index{nom de nombre}%
+On notera que \verb+a/b_{^c}!&$+ et \verb+\prefix_{^c}!&$+
+représentent très exactement le même nom, si \verb+\prefix+ a la
+définition adéquate évidemment. Cette possibilité d'obtenir un nom en
+utilisant des macros peut sembler inutile mais il n'en est rien. On
+peut ainsi réaliser des boucles\index{boucle} avec des noms tels que
+\verb+r1+, \verb+r2+, \ldots, \verb+r<n>+ en utilisant le code
+\verb+r\the\cpt+ comme nom où \verb+cpt+ est un compteur au sens
+\TeX{}. Le mécanisme des compteurs avec \LaTeX{} donne un code un peu
+plus long avec \verb+r\number\value{cpt}+ où \verb+cpt+ est maintenant
+un compteur au sens \LaTeX. Nous verrons un exemple d'utilisation de
+cette forme à la section~\ref{sec:Creation d'operations complexes}
+page~\pageref{sec:Creation d'operations complexes}.
+
+\index{nombre!valide}En pratique, que signifient toutes ces règles ?
+Elles indiquent d'abord qu'un nombre écrit sous forme décimale peut
+être précédé par n'importe quelle séquence de signes plus et moins.
+Évidemment, le nombre sera négatif lorsqu'il y aura un nombre impair
+de signes moins. Ensuite, un nombre ne peut comporter qu'un seul
+séparateur décimal qui peut être le point ou la virgule, celui-ci
+pouvant être placé n'importe où dans le nombre. Enfin, l'écriture d'un
+nombre s'effectue obligatoirement en base~10. Attention : ces règles
+signifient également que \verb+-a+ n'est pas valide.
+
+L'extension utilise quelques noms de façon interne et il est plus
+prudent de ne pas commencer un nom de variable par le caractère
+\texttt{@}.
+
+\section{Paramètres de \package{xlop}}
+\label{sec:Parametres de xlop}
+\index{parametre@paramètre!syntaxe|(}
+Les affectations de paramètres restent locales à la macro lorsqu'elles
+sont indiquées au niveau de son argument optionnel. Pour rendre de
+telles affectations globales, il faut utiliser la macro
+\macro{opset}. Par exemple
+\begin{Verbatim}[xrightmargin=0pt]
+ \opset{decimalsepsymbol={,}}
+\end{Verbatim}
+fera que le symbole du séparateur décimal sera la virgule pour tout le
+reste du document, ou, du moins, jusqu'à une prochaine redéfinition
+par la macro \verb+\opset+. Dans ce manuel, ce sera le cas à partir de
+maintenant.\opset{decimalsepsymbol={,}}
+
+\subsection{Symboles}
+\label{subsecSymboles}
+Le paramètre \parameter{afterperiodsymbol} indique le symbole qui suit
+l'écriture d'un quotient en ligne lors d'une division avec recherche
+de période\index{division!période}. Sa valeur par défaut est
+\verb+$\ldots$+
+
+Le paramètre \parameter{equalsymbol} indique le symbole utilisé pour
+l'égalité. Sa valeur par défaut est \verb+$=$+. En réalité, le
+paramètre est défini avec :
+\begin{Verbatim}[xrightmargin=0pt]
+ \opset{equalsymbol={$=$}}
+\end{Verbatim}
+c'est-à-dire avec des accolades pour protéger le signe égal. Sans les
+accolades, il y aurait une erreur à la compilation. On doit procéder
+de cette façon lorsque la valeur comporte le signe égal ou une
+virgule\index{parametre@paramètre!avec \og = \fg{} ou \og ,\fg}
+
+Le paramètre \parameter{approxsymbol} indique le symbole utilisé pour
+les approximations. Sa valeur par défaut est \verb+$\approx$+.
+
+Le paramètre \parameter{decimalsepsymbol} indique le symbole utilisé
+pour le séparateur décimal. Sa valeur par défaut est le point.
+
+Les paramètres \parameter{addsymbol}, \parameter{subsymbol},
+\parameter{mulsymbol} et \parameter{divsymbol} indiquent les symboles
+utilisés pour les quatre opérations arithmétiques. Les valeurs par
+défaut sont respectivement \verb!$+$!, \verb!$-$!, \verb!$\times$! et
+\verb!$\div$!.
+
+\subsection{Présentation générale}
+\label{subsec:Presentation generale}
+Le paramètre \parameter{voperation} indique la façon dont une
+opération posée sera placée par rapport à la ligne de base. Les
+valeurs possibles sont \verb+top+, \verb+center+ et \verb+bottom+
+(valeur par défaut).
+\begin{SideBySideExample}
+ top\quad
+ \opadd[voperation=top]{45}{172}\par
+ center\quad
+ \opadd[voperation=center]{45}{172}\par
+ bottom\quad
+ \opadd[voperation=bottom]{45}{172}
+\end{SideBySideExample}
+
+Le paramètre \parameter{voperator} indique comment sera placé le
+symbole opératoire par rapport aux opérandes. Les valeurs possibles
+sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+.
+\begin{SideBySideExample}
+ top\quad
+ \opadd[voperator=top]{45}{172}\par
+ center\quad
+ \opadd[voperator=center]{45}{172}\par
+ bottom\quad
+ \opadd[voperator=bottom]{45}{172}
+\end{SideBySideExample}
+
+Le paramètre \parameter{deletezero} indique si certains nombres d'une
+opération doivent être affichés avec ou sans les zéros non
+significatifs. Le rôle exact de ce paramètre varie en fonction de
+l'opération et nous y reviendrons lors de la présentation des
+différentes opérations.
+
+Le paramètre \parameter{style} indique si l'opération doit être posée
+(avec la valeur \verb+display+ qui est la valeur par défaut) ou bien
+être affichée en ligne (valeur \verb+text+). On reviendra sur ce
+paramètre lors de la présentation de la division car les possibilités
+sont alors un peu plus nombreuses.
+\begin{SideBySideExample}
+ \opadd[style=text]{45}{172}
+\end{SideBySideExample}
+Dans les opérations en ligne, \package{xlop} fait attention à ne pas
+composer la formule en mode mathématique de façon directe. Cela permet
+de spécifier ce que l'on veut comme dans l'exemple qui suit et c'est
+également pour cela qu'il faut indiquer les valeurs classiques des
+symboles entre délimiteurs mathématiques.
+\begin{SideBySideExample}
+ \opadd[addsymbol=plus,
+ equalsymbol=\'egal,
+ style=text]{42}{172}
+\end{SideBySideExample}
+Cependant, \package{xlop} introduit exactement les mêmes pénalités de
+coupures et exactement les mêmes espacements que pour une formule
+mathématique.
+
+Le paramètre \parameter{parenthesisnegative} indique comment composer
+les nombres négatifs dans les opérations en ligne. Les valeurs
+possibles sont :
+\begin{itemize}
+\item \texttt{none} qui compose les nombres négatifs sans parenthèse ;
+\item \texttt{all} qui compose les nombres négatifs en les plaçant
+ entre parenthèses ;
+\item \texttt{last} qui compose les nombres négatifs en les plaçant
+ entre parenthèses s'il ne s'agit pas de la première opérande.
+\end{itemize}
+\begin{SideBySideExample}
+ \opadd[style=text,
+ parenthesisnegative=none]
+ {-12}{-23}\par
+ \opadd[style=text,
+ parenthesisnegative=all]
+ {-12}{-23}\par
+ \opadd[style=text,
+ parenthesisnegative=last]
+ {-12}{-23}
+\end{SideBySideExample}
+
+\subsection{Dimensions}
+\label{subsec:Dimensions}
+Dans les opérations posées, les chiffres sont placés dans des boîtes
+de dimensions fixées. La largeur est donnée par le paramètre
+\parameter{columnwidth} et la hauteur par le paramètre
+\parameter{lineheight}. La valeur par défaut du paramètre
+\texttt{lineheight} est \verb+\baselineskip+ ce qui fait que les
+lignes des opérations seront espacées, par défaut, comme les lignes
+d'un paragraphe. La valeur par défaut de \texttt{columnwidth} est de
+\texttt{2ex} car la largeur \og normale \fg{} des chiffres aurait
+donné des résultats peu lisibles.
+\begin{SideBySideExample}
+ \opadd[columnwidth=0.5em]
+ {45.89}{127.5}
+\end{SideBySideExample}
+Ce piètre résultat est dû en partie au fait que la virgule est placé
+dans une boîte dont la largeur est contrôlée par le paramètre
+\parameter{decimalsepwidth} dont la valeur par défaut est nulle. Un
+essai d'amélioration peut être effectué en donnant à ce paramètre la
+largeur \og{} normale \fg d'une virgule.
+\begin{SideBySideExample}
+ \opadd[columnwidth=0.5em,
+ decimalsepwidth=0.27778em]
+ {45.89}{127.5}
+\end{SideBySideExample}
+C'est meilleur mais le fait de donner une largeur non nulle à la boîte
+contenant le séparateur décimal risque de poser des difficultés si
+l'on veut placer des éléments externes : cela va à l'encontre de
+l'idée de placer les chiffres dans une grille fixe. Ceci est donc à
+éviter en temps normal.
+
+Les deux paramètres \parameter{columnwidth} et \parameter{lineheight}
+correspondent aux deux seules dimensions que l'extension rend
+publiques, à savoir respectivement
+\verb+\opcolumnwidth+\index{opcolumnwidth@\texttt{$\backslash$opcolumnwidth}}
+et
+\verb+\oplineheight+\index{oplineheight@\texttt{$\backslash$oplineheight}}.
+Il est cependant dangereux de vouloir modifier ces dimensions de façon
+directe puisque une modification par voie normale n'a pas pour seule
+conséquence d'obtenir une nouvelle valeur pour ces
+dimensions. L'extension \package{xlop} a rendu ces dimensions
+publiques uniquement pour pouvoir les lire, pas pour les modifier.
+
+Les deux paramètres suivants permettent de spécifier les largeurs des
+traits horizontaux et verticaux tracés par \package{xlop}. Il s'agit
+des deux paramètres \parameter{hrulewidth} et \parameter{vrulewidth}
+dont la valeur par défaut est \texttt{0.4pt}.
+
+Ces traits sont composés sans perturber la grille, c'est-à-dire sans
+ajouter d'espace vertical. Ainsi, avec des valeurs importantes pour
+l'épaisseur, les traits risquent de déborder au niveau des opérandes.
+\begin{SideBySideExample}
+ \opadd[hrulewidth=8pt]{42}{172}
+\end{SideBySideExample}
+
+Il existe également un paramètre permettant de contrôler le décalage
+horizontal du séparateur décimal. Il s'agit de
+\parameter{decimalsepoffset} dont la valeur par défaut est égale
+à~\texttt{-0.35}. Cette valeur par défaut indique une longueur en
+prenant \verb+\opcolumnwidth+ comme unité. Un exemple d'utilisation de
+ce paramètre sera donné à la section~\ref{sec:Division}
+page~\pageref{sec:Division}.
+
+\subsection{Styles des chiffres}
+\label{subsec:Styles des chiffres}
+L'extension \package{xlop} distingue cinq types de nombres et y
+associe cinq paramètres de style :
+\begin{itemize}
+\item les opérandes avec \parameter{operandstyle} ;
+\item le résultat avec \parameter{resultstyle} ;
+\item les restes avec \parameter{remainderstyle} ;
+\item les résultats intermédiaires avec \parameter{intermediarystyle}
+ ;
+\item les retenues avec \parameter{carrystyle}.
+\end{itemize}
+\begin{SideBySideExample}
+ \opadd[operandstyle=\blue,
+ resultstyle=\red,
+ carrystyle=\scriptsize\green]
+ {45.89}{127.5}
+\end{SideBySideExample}
+Rappelons que dans ce manuel, nous utilisons l'extension
+\package{pstricks}\index{pstricks}.
+
+\index{parametre@paramètre!indexé|(}%
+En réalité, la gestion de ces styles est encore plus puissante car on
+peut distinguer les différents nombres d'une même classe. Dans une
+même opération, on a plusieurs opérandes et, éventuellement plusieurs
+restes et plusieurs nombres intermédiaires. On accède alors au style
+de ces nombres individuels en indexant le paramètre de style
+correspondant.
+\begin{SideBySideExample}
+ \opadd[operandstyle=\blue,
+ operandstyle.1=\lightgray,
+ resultstyle=\red,
+ carrystyle=\scriptsize\green]
+ {45.89}{127.5}
+\end{SideBySideExample}
+Sur cet exemple, on a indiqué que la première opérande devait être
+composée avec le style \verb+\lightgray+ et comme rien n'était indiqué
+pour la seconde opérande, celle-ci a repris le style de base de sa
+classe (donc a été composée avec le style \verb+\blue+).
+
+Ce mécanisme va encore plus loin car on peut indicer à deux niveaux
+les styles des classes opérande, reste et nombre intermédiaire et à un
+niveau les styles des classes résultat et retenue pour accéder au
+style de chacun des chiffres de ces nombres. Afin de rendre les
+indexations plus facile à gérer, un index positif indiquera le rang
+d'un chiffre de la partie entière (numérotée de droite à gauche,
+l'index~1 correspondant au chiffre des unités) et un index négatif
+indiquera le rang d'un chiffre de la partie décimale (numérotée de
+gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes).
+\begin{SideBySideExample}
+ \opadd[operandstyle.1.1=\white,
+ operandstyle.1.-2=\white,
+ operandstyle.2.3=\white,
+ resultstyle.2=\white,
+ deletezero=false]
+ {045.89}{127.50}
+\end{SideBySideExample}
+On peut également utiliser une macro à un paramètre comme style.
+\begin{SideBySideExample}
+ \newcommand\hole[1]{$\bullet$}
+ \opadd[operandstyle.1.1=\hole,
+ operandstyle.1.-2=\hole,
+ operandstyle.2.3=\hole,
+ resultstyle.2=\hole]
+ {45.89}{127.5}
+\end{SideBySideExample}
+\index{operation@opération!à trou}%
+Lorsque le style est une macro, le chiffre constitue le dernier
+argument de cette macro. Voici un exemple plus compliqué et utilisant
+l'extension \package{pst-node} de la suite \package{pstricks} :
+\begin{SideBySideExample}
+ \newcommand\OPoval[3]{%
+ \dimen1=#2\opcolumnwidth
+ \ovalnode{#1}
+ {\kern\dimen1 #3\kern\dimen1}}
+ \opadd[voperation=top,
+ operandstyle.1.1=\OPoval{A}{0},
+ operandstyle.2.2=\OPoval{C}{0.8}]
+ {45}{172}\qquad
+ \begin{minipage}[t]{2cm}
+ \pnode(0,0.2em){B}\ chiffre
+ \ncarc{->}{A}{B}\par
+ \pnode(0,0.2em){D}\ nombre
+ \ncarc{<-}{D}{C}
+ \end{minipage}
+\end{SideBySideExample}
+
+Comme les chiffres, le séparateur décimal tient compte du style d'un
+nombre. Pour accéder au style du séparateur décimal de façon
+individuelle, il faut employer l'indice \texttt{d} au lieu des indices
+numériques des chiffres.
+\begin{SideBySideExample}
+ \newcommand\hole[1]{\texttt{\_}}
+ \opmul[intermediarystyle=\hole,
+ resultstyle=\hole,
+ resultstyle.d=\white]{2.46}{35.7}
+\end{SideBySideExample}
+\index{parametre@paramètre!indexé|)}%
+\index{parametre@paramètre!syntaxe|)}
+
+\chapter{Opérations arithmétiques}
+\label{chap:Opérations arithmétiques}
+\section{Addition}
+\label{sec:Addition}
+L'addition est gérée par la macro \macro{opadd}. L'addition,
+lorsqu'elle est posée, n'affiche que des nombres positifs. Cela va
+avoir comme conséquence d'afficher une soustraction lorsqu'une des
+opérandes est négative.%
+\index{nombre!négatifs dans une opération posée}
+\begin{SideBySideExample}
+ \opadd{-245}{72}
+\end{SideBySideExample}
+De façon générale, le principe est de poser l'opération qui permet de
+retrouver le résultat comme on le ferait à la main. En revanche,
+l'affichage en ligne donnera toujours une addition puisqu'on peut
+maintenant écrire des nombres négatifs.
+\begin{SideBySideExample}
+ \opadd[style=text]{-245}{72}
+\end{SideBySideExample}
+ Outre les paramètres généraux décrits à la
+ section~\ref{sec:Parametres de xlop}, la macro \verb+\opadd+ est
+ sensible aux paramètres \texttt{carryadd}, \texttt{lastcarry} et
+ \texttt{deletezero}.
+
+Le paramètre \parameter{carryadd} est un paramètre
+booléen\index{parametre@paramètre!booléen} c'est-à-dire n'acceptant
+que les valeurs \texttt{true} et \texttt{false}. Comme il d'usage,
+l'omission du signe égal et de la partie droite de l'affectation
+équivaut à \texttt{=true}. Ce paramètre indique si les retenues
+doivent être ou non affichées. Sa valeur par défaut est
+\texttt{true}.
+
+Le paramètre \parameter{lastcarry} est également un paramètre
+booléen. Il indique si une retenue sans chiffre correspondant au
+niveau des deux opérandes doit être ou non affichée. Sa valeur par
+défaut est \texttt{false}. On fera attention au rôle exact de ce
+paramètre. Ainsi, si la seconde opérande dans l'exemple qui suit avait
+été~15307, la dernière retenue aurait été affichée quelle que soit la
+valeur du paramètre \texttt{lastcarry} puisqu'il y aurait eu un
+chiffre correspondant au niveau de la seconde opérande.
+\begin{SideBySideExample}
+ \opadd{4825}{5307}
+\end{SideBySideExample}
+\begin{SideBySideExample}
+ \opadd[carryadd=false]{4825}{5307}
+\end{SideBySideExample}
+\begin{SideBySideExample}
+ \opadd[lastcarry]{4825}{5307}
+\end{SideBySideExample}
+
+Le paramètre \parameter{deletezero} est également un paramètre booléen
+et son rôle et d'indiquer si les zéros non significatifs doivent être
+supprimés ou non. Sa valeur par défaut est \texttt{true}. Si ce
+paramètre vaut \texttt{false}, les opérandes et le résultats auront le
+même nombre de chiffres, \package{xlop} ajoutant des zéros non
+significatifs pour y parvenir. Les zéros non significatifs des
+opérandes ne sont pas supprimés également.
+\begin{SideBySideExample}
+ \opadd{012.3427}{5.2773}\par
+ \opadd[deletezero=false]
+ {012.3427}{5.2773}
+\end{SideBySideExample}
+
+Ce paramètre a exactement le même rôle dans l'affichage en ligne que
+dans l'affichage posé.
+\begin{SideBySideExample}
+ \opadd[style=text]{02.8}{1.2}\par
+ \opadd[style=text,
+ deletezero=false]{02.8}{1.2}\par
+\end{SideBySideExample}
+
+\section{Soustraction}
+\label{sec:soustraction}
+La soustraction est gérée par la macro \macro{opsub}. La soustraction,
+lorsqu'elle est posée, n'affiche que des nombres positifs. Par
+conséquence cette macro va afficher une addition lorsqu'une des
+opérandes est négative.
+\begin{SideBySideExample}
+ \opsub{-245}{72}
+\end{SideBySideExample}
+De façon générale, le principe est de poser l'opération qui permet de
+retrouver le résultat comme on le ferait à la main. En revanche,
+l'affichage en ligne donnera toujours une soustraction puisqu'on peut
+maintenant écrire des nombres négatifs.
+\begin{SideBySideExample}
+ \opsub[style=text]{-245}{72}
+\end{SideBySideExample}
+Ce principe s'applique également lorsque la première opérande est
+inférieure à la seconde (cas positif) où on aura une inversion des
+opérandes.
+\begin{SideBySideExample}
+ \opsub{1.2}{2.45}
+\end{SideBySideExample}
+Bien entendu, l'opération en ligne donnera le résultat exact.
+\begin{SideBySideExample}
+ \opsub[style=text]{1.2}{2.45}
+\end{SideBySideExample}
+
+
+Outre les paramètres généraux vus à la section~\ref{sec:Parametres de
+ xlop}, \verb+\opsub+ est sensible à \texttt{carrysub},
+\texttt{lastcarry}, \texttt{offsetcarry}, \texttt{deletezero} et
+\texttt{behaviorsub}.
+
+Le paramètre \parameter{carrysub} est un paramètre booléen
+qui indique si les retenues doivent être ou non présentes. Sa valeur
+par défaut est \texttt{false} (rappelons que le paramètre
+\texttt{carryadd} avait une valeur par défaut égale à \texttt{true}).
+\begin{SideBySideExample}
+ \opsub[carrysub]{1234}{567}
+\end{SideBySideExample}
+
+Dans l'exemple précédent, nous pouvons voir qu'il manque en fait une
+retenue au niveau du dernier chiffre de 1234, cette façon de faire
+étant assez courante. Néanmoins, on peut contrôler l'affichage de
+cette dernière retenue avec le paramètre \parameter{lastcarry}. Ce
+paramètre n'a pas tout à fait le même rôle que pour l'addition puisque
+la dernière retenue ne sera pas affichée dans le cas où la seconde
+opérande n'a pas de chiffre correspondant (alors que pour l'addition,
+il fallait que les deux opérandes n'aient pas de chiffres
+correspondant).
+\begin{SideBySideExample}
+ \opsub[carrysub,lastcarry]{1234}{567}
+\end{SideBySideExample}
+On peut noter dans ce dernier cas qu'il est sans doute préférable de
+mettre le paramètre \parameter{deletezero} à \texttt{false} pour
+obtenir une présentation plus correcte.
+\begin{SideBySideExample}
+ \opsub[carrysub,
+ lastcarry,
+ deletezero=false]{1234}{567}
+\end{SideBySideExample}
+
+L'affichage des retenues au niveau des soustractions peut sembler un
+peu trop compact. On peut élargir la boîte des chiffres avec le
+paramètre \parameter{opcolumnwidth} mais également indiquer le
+décalage des retenues avec le paramètre \parameter{offsetcarry}. La
+valeur par défaut de ce paramètre est \texttt{-0.35}.
+\begin{SideBySideExample}
+ \opsub[carrysub,
+ lastcarry,
+ deletezero=false]{12.34}{5.67}
+
+ \bigskip
+ \opsub[carrysub,
+ lastcarry,
+ columnwidth=2.5ex,
+ offsetcarry=-0.4,
+ decimalsepoffset=-3pt,
+ deletezero=false]{12.34}{5.67}
+\end{SideBySideExample}
+
+Il peut arriver qu'une soustraction de deux nombres positifs, le
+premier étant inférieur au second, soit le signe d'une erreur de
+l'utilisateur. Dans ce cas, et uniquement dans ce cas, le paramètre
+\parameter{behaviorsub} permet d'obtenir un rappel à l'ordre. Les
+trois valeurs possibles de ce paramètre sont \texttt{silent} qui est
+la valeur par défaut et qui donne le résultat, \texttt{warning} qui
+donne également le résultat mais affiche le message d'avertissement :
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ xlop warning. Substraction with first operand less than second one
+ See documentation for further information.
+\end{Verbatim}
+et enfin \texttt{error} qui affichera le message d'erreur :
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ xlop error. See documentation for further information.
+ Type H <return> for immediate help.
+ ! Substraction with first operand less than second one.
+\end{Verbatim}
+et l'opération ne sera pas effectuée.
+
+\section{Multiplication}
+\label{sec:Multiplication}
+La multiplication est gérée par la macro \macro{opmul}.
+Nous présenterons les paramètres \texttt{hfactor},
+\texttt{displayintermediary}, \texttt{shiftintermediarysymbol},
+\texttt{displayshiftintermediary} et finalement \texttt{deletezero},
+les autres paramètres ayant été vus à la section~\ref{sec:Parametres
+ de xlop}.
+
+Le paramètre \parameter{shiftintermediarysymbol} indique quel symbole
+sera utilisé (sa valeur par défaut est \verb+$\cdot$+) pour visualiser
+les décalages des nombres intermédiaires. Le paramètre
+\parameter{displayshiftintermediary} peut prendre les valeurs
+\texttt{shift} (valeur par défaut) qui ne montre ce symbole que
+lorsque le décalage est supérieur à un rang, \texttt{all} qui indique
+que ce symbole de décalage sera systématiquement affiché et
+\texttt{none} qui indique que ce symbole ne sera jamais affiché.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[displayshiftintermediary=shift]{453}{1001205}\qquad
+ \opmul[displayshiftintermediary=all]{453}{1001205}\qquad
+ \opmul[displayshiftintermediary=none]{453}{1001205}
+\end{CenterExample}
+
+En réalité, le non affichage des nombres intermédiaires nuls est dû à
+la valeur par défaut \texttt{none} du paramètre
+\parameter{displayintermediary}. La valeur \texttt{all} va afficher
+tous les nombres intermédiaires.
+\begin{SideBySideExample}
+ \opmul[displayintermediary=all]
+ {453}{1001205}
+\end{SideBySideExample}
+On notera que les nombres intermédiaires nuls sont affichés avec
+autant de chiffres que le premier facteur.
+
+Le paramètre \parameter{displayintermediary} admet la valeur
+\texttt{nonzero} qui a le même rôle que la valeur \texttt{none} sauf
+dans le cas où le second facteur ne comporte qu'un seul chiffre.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul{3.14159}{4}\qquad
+ \opmul[displayintermediary=nonzero]{3.14159}{4}
+\end{CenterExample}
+
+Enfin, le paramètre \parameter{displayintermediary} admet la valeur
+\texttt{None} qui n'affichera aucun résultat intermédiaire dans tous
+les cas.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[displayintermediary=None]{453}{1001205}
+\end{CenterExample}
+
+Le paramètre \parameter{hfactor} permet d'indiquer comment doit se
+faire l'alignement des opérandes. La valeur par défaut \texttt{right}
+donne une composition au fer à droite tandis que la valeur
+\texttt{decimal} donne un alignement au niveau de la virgule.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul{3.1416}{12.8}\qquad\opmul[hfactor=decimal]{3.1416}{12.8}
+\end{CenterExample}
+
+Pour la multiplication posée, le paramètre \parameter{deletezero} ne
+concerne que les opérandes, le résultat gardant ses éventuels zéros
+non significatifs puisque ceux-ci sont nécessaires pour effectuer
+correctement le décalage de la virgule lorsqu'on travaille \og à la
+main \fg{}.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[deletezero=false]{01.44}{25}\qquad
+ \opmul{01.44}{25}
+\end{CenterExample}
+En revanche, dans la multiplication en ligne, ce paramètre retrouve
+son comportement normal.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[deletezero=false,style=text]{01.44}{25}\qquad
+ \opmul[style=text]{01.44}{25}
+\end{CenterExample}
+
+\section{Division}
+\label{sec:Division}
+L'extension gère la division \og classique \fg{} avec la macro
+\macro{opdiv} et la division euclidienne avec la macro
+\macro{opidiv}. En raison de sa complexité, la division est l'opération
+qui prend en compte le plus de paramètres.
+
+\subsection{Contrôle de l'arrêt}
+\label{subsec:Controle de l'arret}
+Dans ce qui suivra, le terme d'\emph{étape} indique l'ensemble des
+calculs permettant d'obtenir un chiffre au niveau du quotient. Ce
+nombre d'étapes est contrôlé en partie par les paramètres
+\parameter{maxdivstep}, \parameter{safedivstep} et \parameter{period}.
+En partie seulement car une division classique s'arrêtera
+automatiquement lors de l'obtention d'un reste nul, quelles que que
+soient les valeurs de ces trois paramètres et une division euclidienne
+s'arrêtera sur un quotient entier, sans tenir compte de ces trois
+paramètres.
+\begin{SideBySideExample}
+ \opdiv{25}{7}
+\end{SideBySideExample}
+\begin{SideBySideExample}
+ \opidiv{25}{7}
+\end{SideBySideExample}
+Le premier exemple s'arrête en raison de la valeur de
+\parameter{maxdivstep} qui est égale, par défaut, à~10. On prendra
+garde à ce que le nombre maximum d'étapes peut entraîner des résultats
+aberrants lorsqu'il est trop faible.
+\begin{SideBySideExample}
+ \opdiv[maxdivstep=2]{1248}{3}
+\end{SideBySideExample}
+Le résultat précédent est clairement faux mais \package{xlop} a fait
+ce qu'on lui a demandé, en l'occurrence avoir deux chiffres (maximum)
+au quotient.
+
+L'affichage en ligne va également différer selon que la division s'est
+arrêtée avec un reste final nul ou non ou selon qu'il s'agit d'une
+division classique ou euclidienne.
+\begin{SideBySideExample}
+ \opdiv[style=text]{3.14}{2}\par
+ \opdiv[style=text]{3.14}{3}\par
+ \opidiv[style=text]{314}{2}\par
+ \opidiv[style=text]{314}{3}
+\end{SideBySideExample}
+On notera l'emploi de \parameter{equalsymbol} ou
+\parameter{approxsymbol} selon le cas ainsi que l'affichage avec une
+troncature et non un arrondi. Nous verrons comment obtenir un arrondi
+à la section~\ref{sec:Operations evoluees}
+
+L'affichage en ligne de \verb+\opdiv+ tient compte de
+\parameter{maxdivstep}. Cela signifie que l'on peut obtenir des
+résultats vraiment faux avec des valeurs trop faible de ce paramètre
+et, contrairement à l'affichage posé, l'affichage en ligne ne
+permettra pas de comprendre ce qu'il s'est passé.
+\begin{SideBySideExample}
+ \opdiv[maxdivstep=2,style=text]
+ {1248}{3}
+\end{SideBySideExample}
+Si en plus, le dernier reste calculé est nul, on atteint un summum :
+\begin{SideBySideExample}
+ \opdiv[maxdivstep=1,style=text]
+ {1208}{3}
+\end{SideBySideExample}
+puisqu'il n'y a même plus d'approximation !
+
+Une division non euclidienne peut également s'arrêter sur la détection
+de la survenue d'une période. Pour cela, il suffit de donner la valeur
+\texttt{true} au paramètre \parameter{period}\index{division!période}.
+\begin{SideBySideExample}
+ \opdiv[period]{100}{3}
+\end{SideBySideExample}
+
+Pour ne pas avoir à effectuer des comparaisons de chaque reste avec
+tous les restes précédents, \package{xlop} calcule dès le départ la
+longueur de la période ce qui permet de n'effectuer qu'une seule
+comparaison à chaque étape et donc d'accélérer notablement les
+calculs\footnote{Je remercie à cette occasion Olivier Viennet pour ses
+ précisions mathématiques qui ont permis d'implanter correctement ces
+ calculs.}. Malheureusement, ces calculs se font avec des nombres
+directement accessibles à \TeX{} ce qui a pour conséquence de ne pas
+pouvoir utiliser d'opérandes dont la valeur absolue excède
+$\left\lfloor\frac{2^{31}-1}{10}\right\rfloor = 214748364$.
+
+Pour ne pas entraîner des calculs trop long, \package{xlop} ne
+dépassera pas la valeur du paramètre \parameter{safedivstep} dans les
+divisions avec détection de période. Sa valeur par défaut est égale
+à~50. Cependant, \package{xlop} signalera le problème. Par exemple si
+on demande un tel calcul avec le code :
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ \opdiv[period]{1}{289}
+\end{Verbatim}
+on obtiendra le message d'avertissement :
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ xlop warning. Period of division is too big (272 > safedivstep).
+ Division will stop before reach it.
+ See documentation for further information.
+\end{Verbatim}
+qui indique que la période de cette division est de~272 et qu'elle ne
+sera donc pas atteinte à cause de la valeur de \texttt{safedivstep}.
+
+L'affichage en ligne d'une telle division présente quelque
+particularités.
+\begin{SideBySideExample}
+ \opdiv[period,style=text]{150}{7}
+\end{SideBySideExample}
+On obtient donc une égalité au lieu d'une approximation, la présence
+d'un trait sous la période et des points de suspension à la suite de
+la période. Tous ces éléments peuvent être configurés. Le symbole
+d'égalité est donné par le paramètre \parameter{equalsymbol} (valeur
+par défaut \verb+{$=$}+), la largeur du trait par le paramètre
+\parameter{hrulewidth} (valeur par défaut \texttt{0.4pt}), sa position
+verticale par le paramètre \parameter{vruleperiod} (valeur par défaut
+\texttt{-0.2}) qui indique un décalage vertical en prenant
+\verb+\oplineheight+ comme unité et les points de suspension sont
+donnés par le paramètre \parameter{afterperiodsymbol} (valeur par
+défaut \verb+$\ldots$+).
+\begin{SideBySideExample}
+ \opdiv[period,style=text,
+ equalsymbol=$\approx$,
+ hrulewidth=0.2pt,
+ vruleperiod=0.7,
+ afterperiodsymbol=]
+ {150}{7}
+\end{SideBySideExample}
+
+\subsection{Éléments supplémentaires}
+\label{subsec:Elements supplementaires}
+Les divisions posées peuvent comporter les soustractions successives
+permettant le calcul des restes. Pour \package{xlop}, les nombres qui
+sont soustraits sont des nombres intermédiaires donc les différentes
+façons de représenter les soustractions utiliserons le paramètre
+\parameter{displayintermediary} déjà vu pour la multiplication. La
+valeur \texttt{none} (défaut) n'affichera aucune soustraction ainsi
+que la valeur \texttt{None}, la valeur \texttt{all} affichera toutes
+les soustractions et la valeur \texttt{nonzero} affichera les
+soustractions avec un nombre non nul.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opdiv[displayintermediary=none,voperation=top]
+ {251}{25}\quad
+ \opdiv[displayintermediary=nonzero,voperation=top]
+ {251}{25}\quad
+ \opdiv[displayintermediary=all,voperation=top]
+ {251}{25}
+\end{CenterExample}
+
+Lorsqu'on pose une division, on peut dessiner un \og pont \fg{}
+au-dessus de la partie du dividende qui sera prise en compte pour la
+première étape du calcul. L'extension \package{xlop} permet d'afficher
+ce symbole grâce au paramètre booléen \parameter{dividendbridge}
+(valeur par défaut \texttt{false}).
+\begin{SideBySideExample}
+ \opdiv[dividendbridge]{1254}{30}
+\end{SideBySideExample}
+
+\subsection{Nombres non entiers et négatifs}
+\label{subsec:Nombres non entiers et negatifs}
+La présentation d'opérandes non entières est gérée par le paramètre
+\parameter{shiftdecimalsep}. Sa valeur par défaut est \texttt{both} et
+indique que le séparateur décimal sera décalé pour obtenir un diviseur
+et un dividende entiers. La valeur \texttt{divisor} indique qu'il y
+aura le décalage nécessaire pour obtenir un diviseur entier et la
+valeur \texttt{none} indique qu'il n'y aura aucun décalage.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=divisor]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=none]{3.456}{25.6}
+\end{CenterExample}
+
+Un symbole indiqué par le paramètre \parameter{strikedecimalsepsymbol}
+est réservé pour montrer l'ancien emplacement de la virgule lorsqu'on
+effectue un décalage. La valeur par défaut de ce paramètre est vide ce
+qui fait que l'on ne voyait rien sur les exemples précédents.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opset{strikedecimalsepsymbol={\rlap{,}\rule[-1pt]{3pt}{0.4pt}}}
+ \opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=divisor]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=none]{3.456}{25.6}
+\end{CenterExample}
+
+La présence d'un symbole non vide pour le séparateur décimal barré
+peut laisser les zéros non significatifs au niveau des opérandes.
+\begin{SideBySideExample}
+ \opdiv[shiftdecimalsep=divisor,
+ strikedecimalsepsymbol=%
+ \hspace{-3pt}\tiny$\times$]
+ {0.03456}{2.56}
+\end{SideBySideExample}
+
+Comme nous l'avons déjà vu, la macro \macro{opidiv} donne un quotient
+entier, cela même si les opérandes sont non entières. Il est un peu
+bizarre de vouloir réaliser une division euclidienne sur des nombres
+non entiers et la macro \macro{opidiv} sera assez stricte sur sa
+présentation. Les paramètres \parameter{maxdivstep},
+\parameter{safedivstep} et \parameter{period} seront sans effet ainsi
+que le paramètre \parameter{shiftdecimalsep}, les deux opérandes étant
+rendues entières.
+\begin{SideBySideExample}
+ \opidiv[strikedecimalsepsymbol=%
+ \hspace{-3pt}\tiny$\times$]
+ {34.57}{7}
+\end{SideBySideExample}
+
+Lorsque les opérandes sont négatives, l'affichage en ligne de
+\macro{opidiv} différera des données obtenues avec l'affichage
+posée. Le reste sera nécessairement un nombre compris entre zéro
+(inclus) et la valeur absolue du diviseur (exclu).
+\begin{SideBySideExample}
+ \opdiv[style=text]{124}{7}\par
+ \opidiv[style=text]{124}{7}\par
+ \opidiv[style=text]{124}{-7}\par
+ \opidiv[style=text]{-124}{7}\par
+ \opidiv[style=text]{-124}{-7}
+\end{SideBySideExample}
+
+Cette condition sur le reste reste valable même avec un diviseur non
+entier.
+\begin{SideBySideExample}
+ \opidiv[style=text]{1.24}{0.7}\par
+ \opidiv[style=text]{1.24}{-0.7}\par
+ \opidiv[style=text]{-1.24}{0.7}\par
+ \opidiv[style=text]{-1.24}{-0.7}
+\end{SideBySideExample}
+
+\chapter{Autres commandes}
+\label{chap:Autres commandes}
+\section{Macros étoilées}
+\label{sec:Macros etoilees}
+Les cinq macros vues au chapitre précédent ont une version
+étoilée. Ces macros étoilées réalisent le calcul mais ne procèdent à
+aucun affichage, le résultat étant stocké dans une variable donnée en
+dernier argument.
+
+Comme ces commandes n'affichent rien, les paramètres ne seront pas
+acceptés pour les macros \macro{opadd*}, \macro{opsub*},
+\macro{opmul*} et \macro{opidiv*}. En revanche, les paramètres
+\parameter{maxdivestep}, \parameter{safedivstep} et \parameter{period}
+influencent les calculs et la macro \macro{opdiv*} acceptera donc un
+argument optionnel pour pouvoir en tenir compte.
+\begin{SideBySideExample}
+ \opmul*{2}{2}{a}%
+ \opmul*{a}{a}{a}\opmul*{a}{a}{a}%
+ \opadd[style=text]{a}{1}
+\end{SideBySideExample}
+Pour les macros \macro{opdiv} et \macro{opidiv}, il y aura deux
+arguments supplémentaires pour pouvoir recevoir le quotient et le
+reste final.
+\begin{SideBySideExample}
+ \opdiv*[maxdivstep=1]{-88}{16}{q}{r}%
+ \opmul*{q}{16}{bq}%
+ \opmul[style=text]{16}{q}\par
+ \opadd[style=text]{bq}{r}
+\end{SideBySideExample}
+
+\section{Entrées-sorties}
+\label{sec:Entree-sorties}
+La macro \macro{opcopy} recopie son premier argument dans son deuxième
+argument. Le premier argument est donc un nombre écrit sous forme
+décimale ou via une variable alors que le second sera considérée comme
+un nom de variable.
+
+La macro \macro{opprint} affiche son argument. L'exemple qui suit
+utilise le compteur \macro{time} qui indique le nombre de minutes
+écoulés depuis minuit.
+\begin{SideBySideExample}
+ \opidiv*{\the\time}{60}{h}{m}%
+ Il est \opprint{h}~heures et
+ \opprint{m}~minutes
+\end{SideBySideExample}
+On verra à la section~\ref{sec:Comparaisons} comment améliorer cet
+affichage avec des tests.
+
+La macro \macro{opdisplay} affiche également un nombre mais en
+écrivant chaque chiffre dans une boîte de largeur donnée par
+\parameter{columnwidth} et de hauteur donnée par
+\parameter{lineheight}. Le style est spécifié par le premier argument
+et cette macro accepte un argument optionnel pour permettre de donner
+un style particulier aux chiffres individuels.
+\begin{SideBySideExample}
+ \opdisplay[resultstyle.1=\bfseries,
+ resultstyle.-2=\bfseries]
+ {resultstyle}{129.192}
+\end{SideBySideExample}
+
+Les macros \macro{oplput} et \macro{oprput} permettent de placer un
+objet à un emplacement déterminé. La syntaxe de ces commandes ne
+suit pas celle des autres macros de \package{xlop} puisque
+l'emplacement est indiqué sous forme de coordonnées entre
+parenthèses. Les coordonnées utilisent \macro{opcolumnwidth} et
+\macro{oplineheight} comme unités ce qui permet à l'utilisateur de
+construire lui-même ses propres \og opérations \fg.
+\begin{SideBySideExample}
+ \psset{xunit=\opcolumnwidth,
+ yunit=\oplineheight}%
+ \psgrid[subgriddiv=1,gridlabels=7pt,
+ griddots=5](0,1)(10,-2)
+ \oplput(2,0){Bonjour}
+ \oprput(8,-1){le monde}
+ $\bullet$
+\end{SideBySideExample}
+Sur l'exemple ci-dessus, on peut voir que ces deux macros ne modifient
+pas le point de référence. Elles prennent même la précaution d'inhiber
+l'espace automatique qui les suit pour qu'il ne soit pas nécessaire de
+mettre un \verb+%+ en fin de ligne.
+
+Les macros \macro{ophline} et \macro{opvline} complète les deux
+précédentes pour donner à l'utilisateur les outils lui permettant de
+construire ses propres opérations. La macro \macro{ophline} permet de
+placer un trait horizontal dont la longueur est donné par le paramètre
+qui suit les coordonnées. La macro \macro{opvline} fait de même avec
+les traits verticaux. On rappelle que les paramètres
+\parameter{hrulewidth} et \parameter{vrulewidth} indiquent les
+épaisseurs respectives de ces types de traits.
+\begin{CenterExample}[xrightmargin=0pt]
+ \par\vspace{2\oplineheight}
+ \oplput(1,2){O}\oplput(2,2){N}\oplput(3,2){E}
+ \oplput(0,1.5){$+$}
+ \oplput(1,1){O}\oplput(2,1){N}\oplput(3,1){E}
+ \ophline(0,0.8){4}
+ \oplput(1,0){T}\oplput(2,0){W}\oplput(3,0){O}
+\end{CenterExample}
+
+La macro \macro{opexport}\refstepcounter{stuff}\label{macro-opexport}
+permet d'exporter un nombre dans une macro. Il s'agit d'un ajout de la
+version 0.23 qui est très utile pour faire dialoguer \package{xlop}
+avec le monde extérieur. Le premier argument est un nombre au sens
+\package{xlop}, c'est-à-dire soit un nombre écrit directement avec des
+chiffres, soit un nom de variable. Le nombre sera écrit sous une forme
+directement compréhensible par \TeX{} dans le deuxième argument qui
+doit donc être un nom de macro. On notera cependant que le séparateur
+décimal sera celui désigné par \parameter{decimalsepsymbol} débarrassé
+de ses éventuelles accolades.
+\begin{SideBySideExample}
+ \opmul*{5}{3.141592654}{C}
+ \opexport{C}{\fivepi}
+ \texttt{\meaning\fivepi}
+\end{SideBySideExample}
+
+On peut se servir de cette macro, par exemple, pour afficher des
+nombres calculés par \package{xlop} dans un tableau avec un alignement
+décimal ou encore pour initialiser un compteur ou une longueur (ne pas
+oublier l'unité dans ce dernier cas).
+
+\section{Chiffres d'un nombre}
+\label{sec:Chiffres d'un nombre}
+Les macros \macro{opwidth}, \macro{opintegerwidth} et
+\macro{opdecimalwidth} indiquent respectivement le nombre de chiffres
+du nombre dans sa totalité, de sa partie entière et de sa partie
+décimale. Le premier argument est le nombre sur lequel s'effectue le
+comptage et le second argument indique la variable où sera stocké le
+résultat.
+\begin{SideBySideExample}
+ \opcopy{123456.1234}{a}%
+ \opwidth{a}{na}%
+ \opintegerwidth{a}{ia}%
+ \opdecimalwidth{a}{da}%
+ \opprint{a} s'\'ecrit avec \opprint{na}
+ chiffres (\opprint{ia} en partie
+ enti\`ere et \opprint{da} en partie
+ d\'ecimale).
+\end{SideBySideExample}
+
+La macro \macro{opunzero} permet de supprimer les zéros non
+significatifs\index{zeros non significatifs@zéros non significatifs}
+du nombre passé en argument.
+\begin{SideBySideExample}
+ \opcopy{00150.00250}{a}%
+ Avant : \opprint{a}\par
+ \opunzero{a}%
+ Apr\`es : \opprint{a}
+\end{SideBySideExample}
+
+Les macros \macro{integer} et \macro{opdecimal} donnent respectivement
+la partie entière et la partie décimale d'un nombre.
+\index{nombre!partie entière}\index{partie entière}%
+\index{nombre!partie décimale}\index{partie décimale}%
+Le premier argument est le nombre à traiter et le second est la
+variable qui contiendra le résultat.
+\begin{SideBySideExample}
+ \opcopy{-37.69911}{a}%
+ \opinteger{a}{ia}%
+ \opdecimal{a}{da}%
+ Partie enti\`ere : \opprint{ia}\par
+ Partie d\'ecimale : \opprint{da}
+\end{SideBySideExample}
+
+Six macros servent à écrire ou lire un chiffre d'un nombre. On peut
+lire ou écrire un chiffre selon son rang dans le nombre, dans sa
+partie entière ou dans sa partie décimale. Les chiffres pour le nombre
+dans sa totalité ou pour sa partie entière sont numérotés de droite à
+gauche et, pour sa partie décimale de gauche à droite. Ainsi, avec le
+nombre 1234,56789, le deuxième chiffre est 8, le deuxième chiffre de
+sa partie entière est 3 et le deuxième chiffre de sa partie décimale
+est 6. Il est alors facile de deviner le rôle respectif des six macros
+:
+\begin{itemize}
+\item \parameter{opgetdigit} ;
+\item \parameter{opsetdigit} ;
+\item \parameter{opgetintegerdigit} ;
+\item \parameter{opsetintegerdigit} ;
+\item \parameter{opgetdecimaldigit} ;
+\item \parameter{opsetdecimaldigit} ;
+\end{itemize}
+La syntaxe est la même pour ces six macros. Le premier argument est le
+nombre sur lequel doit porter la lecture ou l'écriture, le deuxième
+argument est l'index donnant la position du chiffre et le troisième
+argument est le nom de la variable qui contiendra le chiffre lu ou
+bien ce qui devra être écrit. Si l'index est en dehors du nombre, les
+macros de lecture donneront \texttt{0} comme résultat et les macros
+d'écriture étendront le nombre pour pouvoir atteindre cet index en
+créant des zéros dans les nouvelles positions.
+
+\section{Comparaisons}
+\label{sec:Comparaisons}
+Lorsqu'on désire concevoir des macros évoluées, il est très souvent
+utile de pouvoir réaliser des tests. Pour cela, \package{xlop} met à
+disposition la macro \macro{opcmp} dont les deux arguments sont des
+nombres et qui mettra à jour les tests \macro{ifopgt}, \macro{ifopge},
+\macro{ifople}, \macro{ifoplt}, \macro{ifopeq} et \macro{ifopneq} pour
+respectivement indiquer que la première opérande est strictement
+supérieure, supérieure, inférieure, strictement inférieure, égale ou
+différente de la seconde opérande.
+
+Pour des raisons techniques, \package{xlop} donne des définitions
+globales aux six tests précédents. Ceux-ci ne seront donc pas protégés
+par les groupes. Comme ces tests sont utilisés par un grand nombre de
+macros de \package{xlop}, une conséquence pratique est qu'il faut
+\emph{toujours} réaliser les tests \verb+\ifop...+ immédiatement
+après le \macro{opcmp}, ou, du moins, avant toute autre utilisation de
+macros de \package{xlop} sous peine de bogues éventuels difficiles à
+comprendre !
+
+On va reprendre la macro d'affichage de l'heure donnée à la
+section~\ref{sec:Entree-sorties} mais en vérifiant si l'argument est
+compris entre~0 (inclus) et~1440 (exclu) puis en réalisant les tests
+nécessaires pour voir si \og heure \fg{} doit être ou non au pluriel
+ainsi que \og minute \fg{}.
+
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\heure[1]{%
+ \opcmp{#1}{0}\ifopge
+ \opcmp{#1}{1440}\ifoplt
+ \opidiv*{#1}{60}{h}{m}%
+ \opprint{h} heure%
+ \opcmp{h}{1}\ifopgt
+ s%
+ \fi
+ \opcmp{m}{0}\ifopneq
+ \space\opprint{m} minute%
+ \opcmp{m}{1}\ifopgt
+ s%
+ \fi
+ \fi
+ \fi\fi
+ }
+ \heure{60} -- \heure{1080} -- \heure{1081} -- \heure{1082}
+\end{CenterExample}
+
+\section{Opérations évoluées}
+\label{sec:Operations evoluees}
+Les macros qui nous restent à voir proviennent soit de commandes
+utilisées de façon interne et qu'il aurait été dommage de ne pas
+rendre publiques, soit de demandes d'utilisateurs.
+
+Les macros utilisées de façon interne sont \macro{opgcd}\index{pgcd}
+qui donne le pgcd de deux nombres et
+\macro{opdivperiod}\index{division!période} qui donne la longueur de
+la période d'un quotient de deux nombres. Pour des raisons
+d'efficacité, ces macros n'utilisent pas les nombres de \package{xlop}
+mais des nombres directement accessibles à \TeX{}. Cela a pour
+conséquence que les nombres passés en paramètres dans les deux
+premiers arguments ne devront pas dépasser la valeur
+\texttt{2147483647} pour \macro{opgcd} et \texttt{214748364} pour
+\macro{opdivperiod}. Un message d'avertissement rappellera à l'ordre
+en cas de dépassement. Le résultat sera stocké dans la variable
+indiqué en troisième paramètre.
+
+Il y aura également quelques vérifications sur les deux premiers
+paramètres. Un pgcd ne peut pas avoir d'argument nul et le calcul de
+la longueur d'une période ne pourra pas se faire avec un quotient
+nul. D'autre part, si un nombre non entier est passé en paramètre,
+seule la partie entière sera prise en compte.
+\begin{SideBySideExample}
+ \opcopy{5376}{a}%
+ \opcopy{2304}{b}%
+ \opgcd{a}{b}{gcd(ab)}%
+ \newcommand\pgcd{%
+ \mathop{\mathrm{pgcd}}}%
+ $\pgcd(\opprint{a},\opprint{b}) =
+ \opprint{gcd(ab)}$
+\end{SideBySideExample}
+Si vous voulez vous amuser à trouver de grandes périodes de divisions,
+sans entrer dans les détails mathématiques, les carrés de nombres
+premiers sont de bons candidats. Par exemple, avec $257^2=66049$ on
+trouve :
+\begin{SideBySideExample}
+ \opdivperiod{1}{66049}{p}%
+ $\frac{1}{66049}$ a une p\'eriode
+ de longueur $\opprint{p}$.
+\end{SideBySideExample}
+
+Les macros \macro{opcastingoutnines}\index{preuve!par neuf} et
+\macro{opcastingoutelevens}\index{preuve!par onze} vont permettre de
+composer des preuves par neuf et par onze. L'extension \package{xlop}
+ne propose pas directement ces compositions puisqu'elles nécessitent
+des traits en diagonal et donc le recours à d'autres extensions. En
+réalité, la macro \macro{opcastingoutnines} va faire la somme modulo~9
+des chiffres du premier argument et stockera le résultat dans le
+second argument tandis que la macro \macro{opcastingoutelevens} fera
+la somme des chiffres de rangs impairs, la somme des chiffres de rangs
+pairs puis la différence modulo~11 de ces deux sommes.
+\begin{SideBySideExample}
+ \newcommand\castingoutnines[3]{%
+ \opcastingoutnines{#1}{cna}%
+ \opcastingoutnines{#2}{cnb}%
+ \opmul*{cna}{cnb}{cna*cnb}
+ \opcastingoutnines{cna*cnb}{cna*cnb}%
+ \opcastingoutnines{#3}{cn(a*b)}%
+ \begin{pspicture}(-3.5ex,-3.5ex)%
+ (3.5ex,3.5ex)
+ \psline(-3.5ex,-3.5ex)(3.5ex,3.5ex)
+ \psline(-3.5ex,3.5ex)(3.5ex,-3.5ex)
+ \rput(-2.75ex,0){\opprint{cna}}
+ \rput(2.75ex,0){\opprint{cnb}}
+ \rput(0,2.75ex){\opprint{cna*cnb}}
+ \rput(0,-2.75ex){\opprint{cn(a*b)}}
+ \end{pspicture}
+ }
+ \castingoutnines{157}{317}{49669}
+\end{SideBySideExample}
+Incidemment, cet exemple montre que $157\times317\neq49669$ ! La
+réponse correcte est \opmul[style=text]{157}{317}.
+
+Les deux macros suivantes sont très simples. Il s'agit de
+\macro{opneg} qui calcul l'opposé de son premier argument et le
+sauvegarde dans la variable indiquée par le second argument et de
+\macro{opabs} qui réalise la même chose mais avec la valeur absolue.
+
+La macro \macro{oppower} calcule des puissances entières. Cette macro
+demande trois paramètres, le troisième paramètre étant la variable
+recevant le résultat du premier paramètre à la puissance le deuxième
+paramètre. Le deuxième paramètre doit être un nombre entier. Lorsque
+le premier argument est nul, si le deuxième paramètre est nul, le
+résultat sera~1, s'il est strictement positif, le résultat sera nul et
+s'il est strictement négatif il y aura une erreur et aucun résultat ne
+sera fourni. Il n'y a aucune limitation sur le premier paramètre ce
+qui peut entraîner quelques problèmes. Par exemple :
+\begin{CenterExample}[xrightmargin=0pt]
+ \opcopy{0.8}{a}\opcopy{-17}{n}%
+ \oppower{a}{n}{r}%
+ $\opprint{a}^{\opprint{n}} = \opprint{r}$
+\end{CenterExample}
+Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire :
+\begin{CenterExample}[xrightmargin=0pt]
+ \opcopy{0.7}{a}\opcopy{-8}{n}%
+ \oppower{a}{n}{r}%
+ \opdecimalwidth{r}{dr}
+ $\opprint{a}^{\opprint{n}}$ a \opprint{dr} chiffres apr\`es la
+ virgule.
+\end{CenterExample}
+Cela est dû au fait que lorsque l'exposant est négatif,
+\package{xlop} calcule \emph{d'abord} l'inverse du nombre pour
+\emph{ensuite} calculer la puissance avec l'opposé de l'exposant. Si
+on avait laissé $-17$ au lieu de $-8$ dans l'exemple précédent, les
+capacités de \TeX{} auraient été dépassées.
+
+Les trois macros qui suivent permettent de contrôler la précision des
+nombres manipulés. Elles permettent de construire un nombre en donnant
+une valeur approchée par défaut, par excès ou un arrondi d'un nombre
+donné en précisant le rang où devra se faire l'arrondi. Ces macros
+sont respectivement \macro{opfloor}, \macro{opceil} et
+\macro{opround}. Elles demandent trois paramètres qui seront dans
+l'ordre le nombre de départ, le rang de l'arrondi et le nom de la
+variable qui contiendra le résultat.
+
+Le rang est indiqué par une valeur entière donnant le nombre de
+chiffres après la virgule qui doivent être présents. Si le rang est
+négatif, l'arrondi se fera avant la virgule. Si le rang positif
+indique plus de chiffres que la partie décimale n'en a, des zéros
+seront ajoutés. Si le rang négatif indique plus de chiffres que la
+partie entière n'en a, l'arrondi restera bloqué pour donner au moins
+le premier chiffre du nombre.
+
+Voici un tableau récapitulatif pour mieux comprendre le fonctionnement
+de ces trois macros.
+\begin{center}
+ \opcopy{3838.3838}{a}
+ \begin{tabular}{|r|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{\texttt{\textbackslash
+ op\ldots{}\{3838.3838\}\{n\}\{r\}}}}\\\hline
+ \multicolumn{1}{|c|}{\textbf{\texttt{n}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{floor}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{ceil}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{round}}} \\\hline
+ \opcopy{6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{4}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{3}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{0}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-1}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-2}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\\hline
+ \end{tabular}
+ \opcopy{-3838.3838}{a}
+ \begin{tabular}{|r|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{\texttt{\textbackslash
+ op\ldots{}\{-3838.3838\}\{n\}\{r\}}}}\\\hline
+ \multicolumn{1}{|c|}{\textbf{\texttt{n}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{floor}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{ceil}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{round}}} \\\hline
+ \opcopy{6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{4}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{3}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{0}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-1}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-2}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\\hline
+ \end{tabular}
+\end{center}
+
+\index{racine carrée}
+Avec la version~0.26, \package{xlop} propose l'opération de racine
+carrée \macro{opsqrt}. Cette macro n'a pas la même syntaxe que les
+autres macros arithmétiques puisqu'il n'y a pas de forme étoilée. En
+réalité, il y a bien une façon d'afficher l'opération d'extraction de
+racine carrée mais elle n'est pas franchement courante. Je suis
+relativement âgé et mon grand-père me racontait qu'il l'avait vue
+lorsqu'il était à l'école. Ainsi, il y a une macro \macro{opgfsqrt} où
+le \og gf \fg{} est pour \og grandfather \fg{} (grand-père).
+
+Voyons la première macro : celle qui calcule la racine carrée et qui
+stocke le résultat dans une variable \package{xlop}:
+\begin{SideBySideExample}
+ \opsqrt{2}{sqrt2}
+ $\sqrt{2}\approx\opprint{sqrt2}$
+\end{SideBySideExample}
+Cette macro partage le paramètre \parameter{maxdivstep} avec les
+macros de division. Par exemple:
+\begin{SideBySideExample}
+ \opsqrt[maxdivstep=15]{2}{sqrt2}
+ $\sqrt{2}\approx\opprint{sqrt2}$
+\end{SideBySideExample}
+
+Pour la présentation à la \og grand-père \fg{}, je n'ai vraiment pas
+le courage d'expliquer tout le processus. Il se base sur l'eidentioté
+remarquable $(a+b)^2=a^2+2ab+b^2$. Merci à Jean-Michel Sarlat d'avoir
+pris le temps de m'expliquer cette méthode afin que je puisse la coder
+dans \package{xlop}.
+
+Voici un exemple avec le calcul de la racine carrée de 15 :
+\begin{CenterExample}
+ \opgfsqrt[maxdivstep=5]{15}
+\end{CenterExample}
+Cette méthode est horrible, autant pour un humain que pour
+l'ordinateur. Par exemple, l'opération réellement effectuée par
+\package{xlop} se fonde sur la méthode de Héron.
+
+\index{expression complexe|(}
+La dernière macro qui nous reste à voir est \macro{opexpr} qui permet
+de réaliser le calcul d'une expression complexe. Cette macro demande
+deux paramètres : le premier est l'expression à calculer donnée sous
+forme infixe (la forme habituelle pour un humain) et le second est le
+nom de la variable qui contiendra le résultat.
+
+Initialement, la formule devait être donnée sous forme polonaise
+inverse (la notation des calculatrices HP ou du langage PostScript par
+exemple) mais un travail commun avec Christophe Jorssen a finalement
+abouti à la possibilité de donner l'expression sous une forme plus
+agréable pour l'utilisateur.
+
+Les formules acceptent les opérateurs arithmétiques habituels
+\texttt{+}, \texttt{-}, \texttt{*} et \texttt{/} ainsi que l'opérateur
+\texttt{:} pour la division euclidienne et \verb+^+ pour
+l'exponentiation. L'opérateur \texttt{-} a les deux rôles d'opérateur
+binaire de la soustraction et d'opérateur unaire pour l'opposé.
+L'opérateur \texttt{+} a également les deux rôles d'opérateur binaire
+de l'addition et d'opérateur unaire ne faisant \ldots{} rien ! Les
+opérandes sont écrites sous forme décimale ou par l'intermédiaire de
+nom de variable cependant, la macro \macro{opexpr} va introduire une
+petite restriction sur les noms de variables puisque ceux-ci devront
+être différents des noms de fonctions reconnus par cette macro. Les
+fonctions accessibles sont :
+\begin{itemize}
+\item \texttt{abs(a)} ;
+\item \texttt{ceil(a,i)} ;
+\item \texttt{decimal(a)} ;
+\item \texttt{floor(a,i)} ;
+\item \texttt{gcd(a,b)} ;
+\item \texttt{integer(a)} ;
+\item \texttt{mod(a,b)} qui donne le résultat de \texttt{a} modulo
+ \texttt{b} ;
+\item \texttt{rest(a,b)} qui donne le reste de la division de
+ \texttt{a} par \texttt{b} (la différence entre reste et modulo est
+ la différence qui existe entre division non euclidienne et division
+ euclidienne) ;
+\item \texttt{round(a,i)}.
+\end{itemize}
+où les fonctions non décrites ci-dessus font appel aux macros
+correspondantes (la fonction \texttt{xxx} faisant appel à la macro
+\verb+\opxxx+). Pour les fonctions \texttt{ceil}, \texttt{floor} et
+\texttt{round}, le nombre \texttt{i} indique le rang sur lequel doit
+se faire l'arrondi.
+
+La macro \macro{opexpr} accepte un argument optionnel car elle peut
+réaliser des divisions et que ces divisions doivent pouvoir être
+contrôlées \emph{via} les paramètres \parameter{maxdivstep},
+\parameter{safedivstep} et \parameter{period}.
+Notre premier exemple est assez basique :
+\begin{CenterExample}[xrightmargin=0pt]
+ \opexpr{3--gcd(15*17,25*27)*2}{r}%
+ $3--\gcd(15\times17,25\times27)\times2 = \opprint{r}$
+\end{CenterExample}
+
+Voici un autre exemple montrant que des données peuvent provenir d'une
+macro :
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\try{2}%
+ \opexpr{\try+1/
+ (\try+1/
+ (\try+1/
+ (\try+1/
+ (\try+1/
+ (\try)))))}{r}
+ La fraction continue de base $u_n=2$ vaut \opprint{r} au rang~5.
+\end{CenterExample}
+\index{expression complexe|)}
+
+\appendix
+\chapter{Aide-mémoire}
+\label{chap:Aide-mémoire}
+\section{Temps de compilation}
+\label{sec:Temps de compilation}
+Les temps de compilation ont été mesurés sur une machine à processeur
+Pentium~II~600\,MHz ayant 256\,Mo de RAM et tournant sous Linux
+(Debian woody)\footnote{En réalité, ces mesures ont été effectuées en
+ 2004 lors de la sortie de la version 0.2. L'auteur étant fainéant,
+ il n'a pas repris ces tests avec son matériel actuel (bien plus
+ performant) !}. Le principe a été de faire un fichier TeX{} minimum
+dont le schéma général est donné par :
+\begin{verbatim}
+ \input xlop
+ \count255=0
+ \loop
+ \ifnum\count255<1000
+ <opération à tester>
+ \advance\count255 by1
+ \repeat
+ \bye
+\end{verbatim}
+Le temps de compilation avec \verb+<opération à tester>+ vide a été
+soustrait des autres tests et seul le temps utilisateur a été pris en
+compte. Les résultats sont donnés en millisecondes et sont évidemment
+à prendre avec beaucoup de précautions.
+
+\index{compilation (temps de)|(}\index{temps de calcul|(}%
+Le tableau suivant donne le temps de compilation des opérations en
+millisecondes. Les opérandes utilisées l'ont été avec une écriture
+sous forme de chiffres mais des essais avec des opérandes sous forme
+de noms de variable ont montré que les différences étaient vraiment
+minimes.
+
+La première ligne indique le nombre de chiffres des deux
+opérandes. Ces nombres ont été construits de la façons suivantes :
+\begin{itemize}
+\item $\mathrm{A} = 1$ et $\mathrm{B} = 9$ pour un chiffre ;
+\item $\mathrm{A} = 12$ et $\mathrm{B} = 98$ pour deux chiffres ;
+\item $\mathrm{A} = 123$ et $\mathrm{B} = 987$ pour trois chiffres ;
+\item $\mathrm{A} = 12345$ et $\mathrm{B} = 98765$ pour cinq chiffres ;
+\item $\mathrm{A} = 1234567890$ et $\mathrm{B} = 9876543210$ pour dix
+ chiffres ;
+\item $\mathrm{A} = 12345678901234567890$ et $\mathrm{B} =
+ 98765432109876543210$ pour vingt chiffres ;
+\end{itemize}
+Voici les résultats, quelques commentaires suivront :
+
+\bigskip\noindent\hbox to\linewidth{\hss
+ \begin{tabular}{|r|*{6}{l|}}
+ \cline{2-7}
+ \multicolumn{1}{l|}{} &
+ \multicolumn{1}{c|}{1} &
+ \multicolumn{1}{c|}{2} &
+ \multicolumn{1}{c|}{3} &
+ \multicolumn{1}{c|}{5} &
+ \multicolumn{1}{c|}{10} &
+ \multicolumn{1}{c|}{20} \\\hline
+ \verb+\opadd*{A}{B}{r}+ &
+ 1.1 & 1.4 & 1.6 & 2.1 & 3.3 & 5.8 \\\cline{2-7}
+ \verb+\opadd*{B}{A}{r}+ &
+ 1.1 & 1.4 & 1.6 & 2.1 & 3.3 & 5.8 \\\hline
+ \verb+\opsub*{A}{B}{r}+ &
+ 1.7 & 2.1 & 2.4 & 3.0 & 4.8 & 8.3 \\\cline{2-7}
+ \verb+\opsub*{B}{A}{r}+ &
+ 1.5 & 1.7 & 2.0 & 2.6 & 4.0 & 7.0 \\\hline
+ \verb+\opmul*{A}{B}{r}+ &
+ 4.6 & 6.3 & 8.2 & 12.8 & 29.9 & 87.0 \\\cline{2-7}
+ \verb+\opmul*{B}{A}{r}+ &
+ 5.0 & 6.6 & 8.5 & 13.2 & 30.3 & 87.8 \\\hline
+ \verb+\opdiv*{A}{B}{q}{r}+ &
+ 46.4 & 53.8 & 53.8 & 64.3 & 85.8 & 124.7 \\\cline{2-7}
+ \verb+\opdiv*{B}{A}{q}{r}+ &
+ 12.4 & 48.9 & 55.7 & 58.6 & 72.8 & 111.0 \\\hline
+ \verb+\opdiv*[maxdivstep=5]{A}{B}{q}{r}+ &
+ 26.8 & 30.0 & 32.6 & 37.6 & 49.5 & 73.5 \\\cline{2-7}
+ \verb+\opdiv*[maxdivstep=5]{B}{A}{q}{r}+ &
+ 12.4 & 29.1 & 32.6 & 35.2 & 43.3 & 67.9 \\\hline
+ \verb+\opidiv*{A}{B}{q}{r}+ &
+ 10.8 & 12.2 & 13.5 & 16.0 & 22.3 & 35.5 \\\cline{2-7}
+ \verb+\opidiv*{B}{A}{q}{r}+ &
+ 11.6 & 13.0 & 14.2 & 16.6 & 23.0 & 36.7 \\\hline
+ \verb+\opidiv*{A}{2}{q}{r}+ &
+ 10.7 & 12.0 & 15.3 & 22.3 & 42.9 & 83.0 \\\hline
+ \end{tabular}
+ \hss
+}
+\par\bigskip
+Il est normal que l'inversion des opérandes n'ait aucune influence
+pour l'addition. Il peut alors sembler anormal qu'elle en ait une pour
+la soustraction mais en fait, avoir une seconde opérande supérieure à
+la première va entraîner quelques instructions supplémentaires (double
+inversion, gestion plus longue du signe du résultat).
+
+Il est normal que le temps de la division soit supérieur à celui de la
+multiplication. Il peut alors sembler anormal que la division ait
+l'air de \og rattraper \fg{} son retard. En fait, une multiplication
+voit sa complexité fortement augmenter avec la taille des opérandes
+mais la division normale est bloquée par le paramètre
+\parameter{maxdivstep}. On le voit bien sur l'exemple où on limite ce
+maximum à 5~étapes.
+
+Quelques résultats semblent bizarres. Ainsi,
+\verb+\opdiv*{9}{1}{q}{r}+ est anormalement rapide : cela est dû
+au fait d'avoir un quotient à un seul chiffre. Plus bizarre encore,
+\verb+\opdiv*{123}{987}{q}{r}+ est plutôt rapide. Ici,
+l'explication est plus subtile : cela est dû à la présence de nombreux
+zéros au quotient.
+
+Avec des opérandes de taille comparable, la division euclidienne est
+très rapide par rapport à la division non euclidienne. Cela est dû au
+fait que le quotient n'aura que peu de chiffres (un seul avec tous les
+nombres \texttt{A} et \texttt{B}). La dernière ligne du tableau est
+plus représentative des temps de compilation que l'on peut obtenir
+avec cette opération.
+
+Toutes ces remarques sont faites pour bien insister sur la difficulté
+à évaluer un temps de compilation a priori : il dépend de trop de
+paramètres. Cela dit, le tableau permet d'avoir quand même une idée de
+ce à quoi il faut s'attendre.
+\index{compilation (temps de)|)}\index{temps de calcul|)}
+
+\clearpage
+\section{Liste des macros}
+\label{sec:Liste des macros}
+\noindent\index{macros!table des|(}%
+\begin{longtable}{|l|p{6.3cm}|}
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Macro}} &
+ \multicolumn{1}{c|}{\textbf{Description}} \\\hline\hline
+ \endfirsthead
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Macro}} &
+ \multicolumn{1}{c|}{\textbf{Description}} \\\hline\hline
+ \endhead
+ \hline
+ \multicolumn{2}{|c|}{$\ldots$ à suivre $\ldots$}\\
+ \hline
+ \endfoot
+ \hline
+ \endlastfoot
+ \verb+\opabs{n}{N}+ &
+ \verb+N+ reçoit la valeur absolue de \verb+n+. \\\hline
+ \verb+\opadd[P]{n1}{n2}+ &
+ Affiche le résultat de l'opération \verb-n1+n2-. \\\hline
+ \verb+\opadd*{n1}{n2}{N}+ &
+ Calcule \verb-n1+n2- et place le résultat dans
+ \verb+N+. \\\hline
+ \verb+\opcastingoutelevens{n}{N}+ &
+ Calcule la différence (modulo 11) de la somme des chiffres de rang
+ impair et de la somme des chiffres de rang pair de \verb+n+ et
+ place le résultat dans \verb+N+. \\\hline
+ \verb+\opcastingoutnines{n}{N}+. &
+ Calcule la somme modulo 9 des chiffres de \verb+n+ et place le
+ résultat dans \verb+N+. \\\hline
+ \verb+\opceil{n}{T}{N}+ &
+ Place dans \verb+N+ la valeur approchée par excès de
+ \verb+n+ au rang \verb+T+. \\\hline
+ \verb+\opcmp{n1}{n2}+ &
+ Compare les nombres \verb+n1+ et \verb+n2+ et réalise la
+ mise à jour correspondante des tests \verb+\ifopeq+,
+ \verb+\ifopneq+, \verb+\ifopgt+, \verb+\ifopge+,
+ \verb+\ifople+ et \verb+\ifoplt+. \\\hline
+ \verb+\opcopy{n}{N}+ &
+ Copie le nombre \verb+n+ dans \verb+N+. \\\hline
+ \verb+\opdecimal{n}{N}+ &
+ Copie la partie décimale (nombre entier positif) de \verb+n+
+ dans \verb+N+. \\\hline
+ \verb+\opdecimalwidth{n}{N}+ &
+ Le nombre \verb+N+ reçoit la largeur de la partie décimale du
+ nombre \verb+n+. \\\hline
+ \verb+\opdisplay[P]{S}{n}+ &
+ Affiche le nombre \verb+n+ avec le style \verb+S+ en
+ plaçant chaque chiffre dans une boîte de largeur
+ \verb+\opcolumnwidth+ et de hauteur
+ \verb+\oplineheight+. \\\hline
+ \verb+\opdiv[P]{n1}{n2}+ &
+ Affiche le résultat de l'opération n1/n2. \\\hline
+ \verb+\opdiv*[P]{n1}{n2}{N1}{N2}+ &
+ Calcule \verb+n1/n2+, place le quotient dans \verb+N1+ et
+ le reste dans \verb+N2+. \\\hline
+ \verb+\opdivperiod{T1}{T2}{N}+ &
+ Calcule la longueur de la période de la division de \verb+T1+
+ par \verb+T2+ et place le résultat dans \verb+N+. \\\hline
+ \verb+\opexport[P]{n}\cmd+ &
+ Copie le nombre \verb+n+ dans la macro \verb+\cmd+. \\\hline
+ \verb+\opexpr[P]{F}{N}+ &
+ \'Évalue la formule \texttt{F} est place le résultat final dans le
+ nombre \texttt{N}. \\\hline
+ \verb+\opfloor{n}{T}{N}+ &
+ Place dans \verb+N+ la valeur approchée par défaut de
+ \verb+n+ au rang \verb+T+. \\\hline
+ \verb+\opgcd{T1}{T2}{N}+ &
+ Calcule le pgcd de \verb+T1+ et \verb+T2+ et place le
+ résultat dans \verb+N+. \\\hline
+ \verb+\opgetdecimaldigit{n}{T}{N}+ &
+ Construit le nombre \verb+N+ avec le seul chiffre situé en
+ \verb+T+ième position de la partie décimale du nombre
+ \verb+n+. \\\hline
+ \verb+\opgetdigit{n}{T}{N}+ &
+ Construit le nombre \verb+N+ avec le seul chiffre situé en
+ \verb+T+ième position du nombre \verb+n+. \\\hline
+ \verb+\opgetintegerdigit{n}{T}{N}+ &
+ Construit le nombre \verb+N+ avec le seul chiffre situé en
+ \verb+T+ième position de la partie entière du nombre
+ \verb+n+. \\\hline
+ \verb+\opgfsqrt{n}+ &
+ Affiche la façon ancienne d'afficher le calcul de la racine
+ carrée de \verb+n+. \\\hline
+ \verb+\ophline(T1,T2){T3}+ &
+ Trace un trait horizontal de longueur \verb+T3+, d'épaisseur
+ \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par
+ rapport au point de référence. \\\hline
+ \verb+\opidiv[P]{n1}{n2}+ &
+ Affiche le résultat de l'opération \verb+n1/n2+ (division
+ euclidienne, c'est-à-dire avec un quotient entier). \\\hline
+ \verb+\opidiv*{n1}{n2}{N1}{N2}+ &
+ Calcule \verb+n1/n2+ (division euclidienne), place le quotient
+ (entier) dans \verb+N1+ et le reste (compris entre 0 inclus et
+ \verb+|n2|+ exclu) dans \verb+N2+. \\\hline
+ \verb+\opinteger{n}{N}+ &
+ Copie la partie entière (nombre entier positif) de \verb+n+
+ dans \verb+N+. \\\hline
+ \verb+\opintegerwidth{n}{N}+ &
+ Le nombre \verb+N+ reçoit la longueur de la partie entière du
+ nombre \verb+n+. \\\hline
+ \verb+\oplput(T1,T2){<objet>}+ &
+ Place \verb+<objet>+ à droite du point situé en
+ \verb+(T1,T2)+ par rapport au point de référence. \\\hline
+ \verb+\opmul[P]{n1}{n2}+ &
+ Affiche le résultat de l'opération \verb+n1*n2+. \\\hline
+ \verb+\opmul*{n1}{n2}{N}+ &
+ Calcule \verb+n1*n2+ et place le résultat dans
+ \verb+N+. \\\hline
+ \verb+\opneg{n}{N}+ &
+ Le nombre \verb+N+ reçoit l'opposé de \verb+n+. \\\hline
+ \verb+\oppower{n}{T}{N}+ &
+ Calcule \verb+n+ à la puissance \verb+T+ et place le
+ résultat dans \verb+N+. \\\hline
+ \verb+\opprint{n}+ &
+ Affiche le nombre \verb+n+ de façon directe. \\\hline
+ \verb+\opround{n}{T}{N}+ &
+ Place dans \verb+N+ la valeur arrondie de \verb+n+ au rang
+ \verb+T+. \\\hline
+ \verb+\oprput(T1,T2){<objet>}+ &
+ Place \verb+<objet>+ à gauche du point situé en
+ \verb+(T1,T2)+ par rapport au point de référence. \\\hline
+ \verb+\opset{L}+ &
+ Effectue une affectation globale des paramètres de \package{xlop}
+ désignés dans la liste \verb+L+. \\\hline
+ \verb+\opsetdecimaldigit{n}{T}{N}+ &
+ Modifie le \verb+T+ième chiffre de la partie décimale de
+ \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline
+ \verb+\opsetdigit{n}{T}{N}+ &
+ Modifie le \verb+T+ième chiffre de \verb+N+ pour qu'il
+ soit égal à \verb+n+. \\\hline
+ \verb+\opsetintegerdigit{n}{T}{N}+ &
+ Modifie le \verb+T+ième chiffre de la partie entière de
+ \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline
+ \verb+\opsqrt{n}{N}+ &
+ Mémorise la racine carrée de \verb+n+ dans \verb+N+. \\\hline
+ \verb+\opsub[P]{n1}{n2}+ &
+ Affiche le résultat de l'opération n1-n2. \\\hline
+ \verb+\opsub*{n1}{n2}{N}+ &
+ Calcule n1-n2 et place le résultat dans N. \\\hline
+ \verb+\opunzero{N}+ &
+ Supprime les zéros non significatifs du nombre \verb+N+. \\\hline
+ \verb+\opvline(T1,T2){T3}+ &
+ Trace un trait vertical de longueur \verb+T3+, d'épaisseur
+ \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par
+ rapport au point de référence. \\\hline
+ \verb+\opwidth{n}{N}+ &
+ Le nombre \verb+N+ reçoit le nombre de chiffres du nombre
+ \verb+n+. \\\hline
+\end{longtable}\index{macros!table des|)}
+
+Dans ce tableau, les paramètres :
+\begin{itemize}
+\item \texttt{n} et \texttt{ni} (où \texttt{i} représente un indice)
+ indiquent que le paramètre doit être un nombre donné sous forme
+ décimale ou sous forme d'un nom de variable ;
+\item \texttt{N} et \texttt{Ni} (où \texttt{i} représente un indice)
+ indiquent que le paramètre doit être un nombre donné sous forme d'un
+ nom de variable ;
+\item \texttt{[P]} indique que la macro accepte un paramètre optionnel
+ permettant de modifier les paramètres de \package{xlop} ;
+\item \texttt{T} et \texttt{Ti} (où \texttt{i} représente un indice)
+ indiquent que le paramètre doit être un nombre donné sous forme
+ décimale ou sous forme d'un nom de variable mais ne devant pas
+ excéder la taille des nombres directement acceptables par \TeX{}
+ ($-2147483648 \le \mathtt{T} \le 2147483647$ en l'occurrence).
+\end{itemize}
+
+\newpage
+\section{Liste des paramètres}
+\label{sec:Liste des parametres}
+\index{parametres@paramètres!table des|(}%
+\begingroup
+\advance\hoffset by-1.75cm \advance\linewidth by1.75cm
+\begin{longtable}{|l|l|p{7cm}|}
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Paramètre}} &
+ \multicolumn{1}{c|}{\textbf{Défaut}} &
+ \multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline
+ \endfirsthead
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Paramètre}} &
+ \multicolumn{1}{c|}{\textbf{Défaut}} &
+ \multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline
+ \endhead
+ \hline
+ \multicolumn{3}{|c|}{$\ldots$ à suivre $\ldots$}\\
+ \hline
+ \endfoot
+ \hline
+ \endlastfoot
+ \verb+afterperiodsymbol+ &
+ \verb+$\ldots$+ &
+ Symbole utilisé à la suite de la période d'une division. \\\hline
+ \verb+approxsymbol+ &
+ \verb+$\approx$+ &
+ Symbole utilisé comme relation d'égalité approximative dans les
+ opérations en ligne. \\\hline
+ \verb+equalsymbol+ &
+ \verb+{$=$}+ &
+ Symbole utilisé comme relation d'égalité dans les opérations en
+ ligne. \\\hline
+ \verb+addsymbol+ &
+ \verb-$+$- &
+ Symbole utilisé comme opérateur d'addition. \\\hline
+ \verb+subsymbol+ &
+ \verb+$-$+ &
+ Symbole utilisé comme opérateur de soustraction. \\\hline
+ \verb+mulsymbol+ &
+ \verb+$\times$+ &
+ Symbole utilisé comme opérateur de multiplication. \\\hline
+ \verb+divsymbol+ &
+ \verb+$\div$+ &
+ Symbole utilisé comme opérateur de division pour les opérations en
+ ligne. \\\hline
+ \verb+decimalsepsymbol+ &
+ \verb+.+ &
+ Symbole utilisé comme séparateur décimal. \\\hline
+ \verb+strikedecimalsepsymbol+ &
+ &
+ Symbole utilisé pour un séparateur décimal déplacé au niveau du
+ dividende et du diviseur dans les divisions posées. \\\hline
+ \verb+shiftintermediarysymbol+ &
+ \verb+$\cdot$+ &
+ Symbole utilisé pour montrer les décalages des nombres
+ intermédiaires dans les multiplications posées. \\\hline
+ \verb+displayshiftintermediary+ &
+ \verb+shift+ &
+ Indique que le caractère de décalage dans les multiplications sera
+ affiché uniquement pour le décalage supplémentaire (valeur
+ \verb+shift+), pour tous les décalages (valeur \verb+all+)
+ ou jamais (valeur \verb+none+). \\\hline
+ \verb+voperation+ &
+ \verb+bottom+ &
+ Type d'alignement vertical d'une opération posée. La
+ valeur \verb+bottom+ indique que le bas de l'opération sera
+ au niveau de la ligne de base. La valeur \verb+top+ indique
+ que la première ligne de l'opération sera sur la ligne de base. La
+ valeur \verb+center+ indique que l'opération sera centrée
+ verticalement sur la ligne de base. \\\hline
+ \verb+voperator+ &
+ \verb+center+ &
+ Positionnement vertical de l'opérateur dans les
+ opérations posées. La valeur \verb+top+ place l'opérateur au
+ niveau de la première opérande. La valeur \verb+bottom+ place
+ l'opérateur au niveau de la seconde opérande. La valeur
+ \verb+center+ place l'opérateur entre les deux
+ opérandes. \\\hline
+ \verb+hfactor+ &
+ \verb+decimal+ &
+ Type d'alignement des opérandes dans les
+ multiplications posées. La valeur \verb+decimal+ indique un
+ alignement sur la virgule. La valeur \verb+right+ indique une
+ composition au fer à droite. \\\hline
+ \verb+vruleperiod+ &
+ \verb+-0.2+ &
+ Position verticale du trait indiquant la période du quotient
+ dans les divisions en ligne. \\\hline
+ \verb+dividendbridge+ &
+ \verb+false+ &
+ Indique si le \og pont \fg{} au-dessus du dividende est présent ou
+ non. \\\hline
+ \verb+shiftdecimalsep+ &
+ \verb+both+ &
+ Indique la façon dont se fait le décalage de virgule au niveau des
+ opérandes d'une division posée. La valeur \verb+both+ indique
+ que le décalage doit rendre le diviseur et le dividende
+ entiers. La valeur \verb+divisor+ indique que le décalage
+ doit rendre le diviseur entier. La valeur \verb+none+ indique
+ qu'il n'y aura aucun décalage. \\\hline
+ \verb+maxdivstep+ &
+ \verb+10+ &
+ Nombre d'étapes maximum d'une division. \\\hline
+ \verb+safedivstep+ &
+ \verb+50+ &
+ Nombre d'étapes maximum d'une division lors d'un arrêt sur
+ période. \\\hline
+ \verb+period+ &
+ \verb+false+ &
+ Indique si la division doit s'arrêter sur une détection de période
+ ou non. \\\hline
+ \verb+deletezero+ &
+ \verb+true+ &
+ Indique si on affiche (\verb+false+) ou on supprime
+ (\verb+true+) les zéros non significatifs. \\\hline
+ \verb+carryadd+ &
+ \verb+true+ &
+ Indique si les retenues doivent être affichées pour les additions
+ posées. \\\hline
+ \verb+carrysub+ &
+ \verb+false+ &
+ Indique si les retenues doivent être affichées pour les
+ soustractions posées. \\\hline
+ \verb+offsetcarry+ &
+ \verb+-0.35+ &
+ Décalage horizontal pour les retenues dans les
+ soustractions posées. \\\hline
+ \verb+style+ &
+ \verb+display+ &
+ Indique si l'opération doit être en ligne (\verb+text+) ou
+ posée (\verb+display+). \\\hline
+ \verb+displayintermediary+ &
+ \verb+nonzero+ &
+ Indique si les résultats intermédiaires doivent être affichés
+ (\verb+all+) ou seulement les non nuls (\verb+nonzero+) ou
+ aucun (valeur \verb+none+) dans les multiplications et les
+ divisions. \\\hline
+ \verb+lastcarry+ &
+ \verb+false+ &
+ Indique si la retenue au niveau d'une absence de chiffre devra
+ être affichée ou non. \\\hline
+ \verb+parenthesisnegative+ &
+ \verb+none+ &
+ Comportement à adopter pour l'affichage des nombres
+ négatifs dans les opérations en lignes. La valeur \verb+none+
+ les affiche sans parenthèse, \verb+all+ les mettra
+ systématiquement les nombres négatifs entre parenthèses et
+ \verb+last+ les mettra entre parenthèses
+ sauf pour la première valeur d'une expression. \\\hline
+ \verb+columnwidth+ &
+ \verb+2ex+ &
+ Largeur des boîtes contenant un chiffre. \\\hline
+ \verb+lineheight+ &
+ \verb+\baselineskip+ &
+ Hauteur des boîtes contenant un chiffre. \\\hline
+ \verb+decimalsepwidth+ &
+ \verb+0pt+ &
+ Largeur de la boîte contenant le séparateur décimal. \\\hline
+ \verb+decimalsepoffset+ &
+ \verb+0pt+ &
+ Décalage horizontal du séparateur décimal. \\\hline
+ \verb+hrulewidth+ &
+ \verb+0.4pt+ &
+ \'Épaisseur des lignes horizontales. \\\hline
+ \verb+vrulewidth+ &
+ \verb+0.4pt+ &
+ \'Épaisseur des lignes verticales. \\\hline
+ \verb+behaviorsub+ &
+ \verb+silent+ &
+ Comportement de \package{xlop} face à une
+ soustraction \og impossible \fg{}, c'est-à-dire une soustraction
+ ayant ses deux opérandes positives avec une seconde opérande
+ strictement supérieure à la première. La valeur \verb+silent+
+ effectuera l'opération en permutant les opérandes de façon
+ silencieuse. La valeur \verb+warning+ fera de même mais en
+ émettant un message d'avertissement. Enfin, la valeur
+ \verb+error+ affichera un message d'erreur et l'opération ne
+ sera pas effectuée. \\\hline
+ \verb+country+ &
+ \verb+french+ &
+ Indique le comportement des opérations posées en fonction du
+ pays. L'extension prévoit pour l'instant \verb+french+,
+ \verb+american+ et \verb+russian+ mais les différentes
+ façons de présenter les opérations ne sont pas implantées dans la
+ version 0.2. \\\hline
+ \verb+operandstyle+ &
+ &
+ Style utilisé pour les opérandes. \\\hline
+ \verb+resultstyle+ &
+ &
+ Style utilisé pour les résultats. \\\hline
+ \verb+remainderstyle+ &
+ &
+ Style utilisé pour les restes. \\\hline
+ \verb+intermediarystyle+ &
+ &
+ Style utilisé pour les résultats intermédiaires (nombres
+ intermédiaires dans une multiplication et nombres à soustraire
+ dans une division où apparaissent les soustractions
+ successives). \\\hline
+ \verb+carrystyle+ &
+ \verb+\scriptsize+ &
+ Style utilisé pour les retenues. La valeur par défaut lorsqu'on ne
+ compile pas sous \LaTeX{} est \verb+\sevenrm+. \\\hline
+\end{longtable}\index{parametres@paramètres!table des|)}
+\newpage\endgroup
+
+\chapter{Trucs et astuces}
+\label{chap:Trucs et astuces}
+\section{Comparaison avec \package{calc} et \package{fp}}
+On pourrait croire que \package{xlop} puisse remplacer avantageusement
+des extensions telles que
+\package{calc}\index{extension!calc}\index{calc} et
+\package{fp}\index{extension!fp}\index{fp}. En réalité, c'est un peu
+plus compliqué que cela. Bien sûr, \package{xlop} permet des calculs
+complexes et sur des nombres comportant un nombre arbitraire de
+chiffres mais, contrairement à \package{calc}, il ne permet pas de
+gérer directement les unités. La comparaison avec \package{fp} est un
+peu plus réaliste mais il ne faut pas perdre de vue que \package{xlop}
+peut devenir gourmand en mémoire et en temps de calcul.
+
+Si vous voulez vraiment réaliser des calculs sur des
+longueurs\index{longueur}, vous pouvez toujours utiliser le fait
+qu'une affectation d'un registre de longueur à un compteur donnera un
+nombre correspondant à cette longueur avec l'unité \texttt{sp}.
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\getsize[2]{%
+ \dimen0=#1\relax
+ \count255=\dimen0
+ \opcopy{\the\count255}{#2}}
+ \getsize{1pt}{r}$1\,\mathrm{pt}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1pc}{r}$1\,\mathrm{pc}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1in}{r}$1\,\mathrm{in}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1bp}{r}$1\,\mathrm{bp}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1cm}{r}$1\,\mathrm{cm}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1mm}{r}$1\,\mathrm{mm}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1dd}{r}$1\,\mathrm{dd}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1cc}{r}$1\,\mathrm{cc}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1sp}{r}$1\,\mathrm{sp}=\opprint{r}\,\mathrm{sp}$\quad
+\end{CenterExample}
+N'oubliez cependant pas que le but principal de \package{xlop} est
+d'\emph{afficher} automatiquement les opérations.
+
+Muni de la macro \macro{getsize}, il est possible de réaliser des
+calculs sur des longueurs.
+\newcommand\getsize[2]{%
+ \dimen0=#1\relax
+ \count255=\dimen0
+ \opcopy{\the\count255}{#2}
+}\par\vspace{-\baselineskip}\noindent
+\vbox to0cm{\parindent=0pt\vbox to2.5cm{\vss
+ \getsize{1cm}{u}%
+ \getsize{\textwidth}{w}%
+ \getsize{\textheight}{h}%
+ \opexpr{w*h/u^2}{S}%
+ \opround{S}{2}{S}%
+ \begin{minipage}{4.3cm}
+ La surface d'empagement est de
+ \opprint{S}\,$\mathrm{cm}^2$
+ \end{minipage}}}
+\begin{Verbatim}[xleftmargin=5cm,xrightmargin=0pt]
+ \getsize{1cm}{u}%
+ \getsize{\textwidth}{w}%
+ \getsize{\textheight}{h}%
+ \opexpr{w*h/u^2}{S}%
+ \opround{S}{2}{S}%
+ La surface d'empagement est de
+ \opprint{S}\,$\mathrm{cm}^2$
+\end{Verbatim}
+
+\section{Création d'opérations complexes}
+\label{sec:Creation d'operations complexes}
+L'utilisation des macros de \package{xlop} associées au mécanisme de
+boucle de \TeX{} permet de créer des opérations à volonté. Nous ne
+donnerons que deux exemples. Le premier est la décomposition d'un
+nombre en facteurs premiers, le second est un calcul général de
+fraction continue.\index{nombre!premier}\index{boucle|(}%
+\index{decomposition@décomposition en nombres premiers}
+\begin{Verbatim}[xrightmargin=0pt]
+ \newcount\primeindex
+ \newcount\tryindex
+ \newif\ifprime
+ \newif\ifagain
+ \newcommand\getprime[1]{%
+ \opcopy{2}{P0}%
+ \opcopy{3}{P1}%
+ \opcopy{5}{try}
+ \primeindex=2
+ \loop
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{2}{try}%
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{4}{try}%
+ \fi
+ \repeat
+ }
+ \newcommand\testprimality{%
+ \begingroup
+ \againtrue
+ \global\primetrue
+ \tryindex=0
+ \loop
+ \opidiv*{try}{P\the\tryindex}{q}{r}%
+ \opcmp{r}{0}%
+ \ifopeq \global\primefalse \againfalse \fi
+ \opcmp{q}{P\the\tryindex}%
+ \ifoplt \againfalse \fi
+ \advance\tryindex by1
+ \ifagain
+ \repeat
+ \endgroup
+ }
+\end{Verbatim}
+\newcount\primeindex
+\newcount\tryindex
+\newif\ifprime
+\newif\ifagain
+\newcommand\getprime[1]{%
+ \opcopy{2}{P0}%
+ \opcopy{3}{P1}%
+ \opcopy{5}{try}
+ \primeindex=2
+ \loop
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{2}{try}%
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{4}{try}%
+ \fi
+ \repeat
+}
+\newcommand\testprimality{%
+ \begingroup
+ \againtrue
+ \global\primetrue
+ \tryindex=0
+ \loop
+ \opidiv*{try}{P\the\tryindex}{q}{r}%
+ \opcmp{r}{0}%
+ \ifopeq \global\primefalse \againfalse \fi
+ \opcmp{q}{P\the\tryindex}%
+ \ifoplt \againfalse \fi
+ \advance\tryindex by1
+ \ifagain
+ \repeat
+ \endgroup
+}
+
+Avec ce code, on dispose d'un moyen de créer une liste de nombres
+premiers (en l'occurrence les 20~premiers).
+\begin{SideBySideExample}
+ \getprime{20}%
+ \opprint{P0}, \opprint{P1}, \ldots,
+ \opprint{P9}, \ldots \opprint{P19}.
+\end{SideBySideExample}
+
+On notera toutefois que ce code est très mauvais, il est excessivement
+lent et n'apporte rien par rapport à une approche directe avec des
+nombres manipulés par les opérations natives de \TeX{}. Ce n'est
+qu'un exemple pédagogique. On notera également l'astuce permettant
+d'emboîter deux boucles avec la macro \verb+\testprimality+
+entièrement mise dans un groupe : s'il est nécessaire de rendre les
+affectations \verb+\primetrue+ et \verb+\primefalse+ globales, les
+opérations de \package{xlop} rendent leurs résultats globaux
+directement.\index{affectation globale}%
+
+Une fois que vous avez votre \og table \fg{} de nombres premiers, vous
+pouvez vous en servir pour décomposer un nombre en facteurs
+premiers.
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\primedecomp[2][nil]{%
+ \begingroup
+ \opset{#1}%
+ \opcopy{#2}{NbtoDecompose}%
+ \opabs{NbtoDecompose}{NbtoDecompose}%
+ \opinteger{NbtoDecompose}{NbtoDecompose}%
+ \opcmp{NbtoDecompose}{0}%
+ \ifopeq
+ Je refuse de d\'ecomposer z\'ero.
+ \else
+ \setbox1=\hbox{\opdisplay{operandstyle.1}%
+ {NbtoDecompose}}%
+ {\setbox2=\box2{}}%
+ \count255=1
+ \primeindex=0
+ \loop
+ \opcmp{NbtoDecompose}{1}\ifopneq
+ \opidiv*{NbtoDecompose}{P\the\primeindex}{q}{r}%
+ \opcmp{0}{r}\ifopeq
+ \ifvoid2
+ \setbox2=\hbox{%
+ \opdisplay{intermediarystyle.\the\count255}%
+ {P\the\primeindex}}%
+ \else
+ \setbox2=\vtop{%
+ \hbox{\box2}
+ \hbox{%
+ \opdisplay{intermediarystyle.\the\count255}%
+ {P\the\primeindex}}}
+ \fi
+ \opcopy{q}{NbtoDecompose}%
+ \advance\count255 by1
+ \setbox1=\vtop{%
+ \hbox{\box1}
+ \hbox{%
+ \opdisplay{operandstyle.\the\count255}%
+ {NbtoDecompose}}
+ }%
+ \else
+ \advance\primeindex by1
+ \fi
+ \repeat
+ \hbox{\box1
+ \kern0.5\opcolumnwidth
+ \opvline(0,0.75){\the\count255.25}
+ \kern0.5\opcolumnwidth
+ \box2}%
+ \fi
+ \endgroup
+ }
+
+ \getprime{20}%
+ \primedecomp[operandstyle.2=\red,
+ intermediarystyle.2=\red]{252}
+\end{CenterExample}
+Dans ce code, on notera l'emploi d'un groupe entourant l'ensemble de
+la macro pour protéger les modifications de paramètres de
+\package{xlop}.\index{parametre@paramètre!modifications locales}
+\`A ce propos, on notera également qu'un paramètre vide n'est pas
+accepté. C'est tout à fait volontaire, l'auteur de l'extension pensant
+qu'un utilisateur tapant des crochets sans rien mettre à l'intérieur
+est sans doute en train de commettre une erreur. Pour pallier à cette
+impossibilité de transmettre un paramètre vide
+\index{parametre@paramètre!vide}%
+il existe le paramètre particulier \parameter{nil} qui a exactement ce
+rôle.
+\index{boucle|)}
+
+On notera enfin l'astuce \verb+{\setbox2=\box2}+ qui permet
+d'obtenir un registre de boîte vide et les manipulations finales
+permettant de représenter la barre verticale de façon lisible.
+
+Le second exemple permet de calculer une fraction continue du type :
+\def\dfrac#1#2{\frac{\displaystyle #1}{\displaystyle #2}}
+\[a_0+\dfrac{1}{a_1+\dfrac{1}{a_2+\dfrac{1}{a_3+\cdots}}}\]
+en donnant la suite $a_0,a_1,a_2,a_3,\ldots$ à la macro. L'exemple
+donne les fractions correspondant au nombre d'or et aux racines
+carrées de~2 et~3.
+\makeatletter
+\begin{CenterExample}[xrightmargin=0pt]
+ \begingroup
+ \catcode`\:=12
+ \long\gdef\continuedfraction#1#2{%
+ \let\@mirror\relax
+ \@for\op@Nb:=#1\do
+ {%
+ \ifx\@mirror\relax
+ \edef\@mirror{\op@Nb}%
+ \else
+ \edef\@mirror{\op@Nb,\@mirror}%
+ \fi
+ }%
+ \let\Op@result\relax
+ \@for\op@Nb:=\@mirror\do
+ {%
+ \ifx\Op@result\relax
+ \opcopy{\op@Nb}{result}%
+ \else
+ \opexpr{\op@Nb+1/result}{result}%
+ \fi
+ }%
+ \opcopy{result}{#2}%
+ }
+ \endgroup
+ \continuedfraction{1,1,1,1,1,1,1,1,1,1,1,1}{r}\opprint{r}\quad
+ \continuedfraction{1,2,2,2,2,2,2,2,2,2,2,2}{r}\opprint{r}\quad
+ \continuedfraction{1,1,2,1,2,1,2,1,2,1,2,1}{r}\opprint{r}
+\end{CenterExample}
+\makeatother
+Une fois n'est pas coutume, nous avons fait appel à des commandes
+\LaTeX{} pour effectuer une boucle. Ce manuel étant composé en
+français, le caractère \og \texttt{\string:} \fg{} est actif ce qui
+empêche la macro \verb+\@for+ de fonctionner correctement d'où le
+groupe où ce caractère reçoit un code de catégorie adéquat.
+
+\section{Accès direct aux nombres}
+\label{sec:Acces direct aux nombres}
+Lorsqu'on récupère un nombre dans une variable, on peut le traiter de
+multiples façons à l'aide des macros de \package{xlop}. Toutefois,
+dans certaines situations, on peut souhaiter construire ses propres
+macros ou utiliser des macros externes en passant un tel nombre en
+paramètre.
+
+Passer directement \verb+\opprint{var}+ est inopérant car cette macro
+est suffisamment complexe pour induire des effets de bord dans ce
+genre de situations. Il devient alors nécessaire d'accéder directement
+à ce nombre. Lorsqu'un nombre est mémorisé dans une variable
+\verb+var+, \package{xlop} crée une macro
+\texttt{$\backslash$Op@var}\index{Opvar@\texttt{\boi {Op\at var}}}
+qui contient
+ce nombre. On notera le \og O \fg{} majuscule et le \og p \fg{}
+minuscule. L'arrobas est là pour rendre cette définition privée
+c'est-à-dire qu'il faut faire un effort pour y accéder avec
+l'utilisation des macros \macro{makeatletter} et \macro{makeatother}
+de \LaTeX{} ou bien en indiquant un code de catégorie égal à~11
+(lettre) pour ce caractère lorsqu'on travaille sous \TeX{}.
+\begin{SideBySideExample}
+ \opcopy{1234}{a}\opcopy{56}{b}%
+ \opmul*{a}{b}{r}%
+ \makeatletter
+ $\nombre{\Op@a} \times
+ \nombre{\Op@b} = \nombre{\Op@r}$
+ \makeatother
+\end{SideBySideExample}
+
+On notera que cette façon de faire ne fonctionne plus forcément
+lorsque le séparateur décimal est entre accolade car la macro
+\verb+\opprint{var}+ contiendra ces accolades. Dans ce cas, le plus
+simple est de passer par la macro \macro{opexport} décrite à la
+page~\pageref{macro-opexport}.
+
+\chapter{Versions futures}
+\label{chap:Versions futures}
+L'extension \package{xlop} en est à sa version~\fileversion{} qui
+n'est qu'une version déboguée de la version~0.2 qui est elle même
+essentiellement une version corrigée de la version~0.1 (première
+version publique). La prochaine version sera la~0.3 dont la version
+\og stable \fg{} sera alors la version~0.4.
+
+L'ensemble des spécificités de la version 0.3 n'est pas totalement
+arrêté mais il y a déjà plusieurs points prévus :
+\begin{itemize}
+\item gestion internationale des opérations posées ;
+\item opérations en base 2 à 36 ;
+\item ajout de fonctions de haut niveau avec les racines
+ (\macro{oproot} pour les racines quelconques et \macro{opsqrt} pour
+ la racine carrée), exponentielle, logarithme, fonctions
+ trigonométriques (directes, inverses, hyperboliques) en passant par
+ l'extension \package{xfp} qui est une version déboguée (par
+ l'auteur) de l'extension \package{fp} ;
+\item ajout d'une macro permettant de réaliser une écriture formatée,
+ c'est-à-dire une écriture d'un nombre où les longueurs des parties
+ entière et décimale seront indiquées (si ces longueurs ne sont pas
+ celles du nombre, il y aura un débordement ou un remplissage) ;
+ cette macro existait dans la version~0.1 et permettait
+ essentiellement d'afficher des nombres avec un alignement sur la
+ virgule, au fer à droite ou au fer à gauche ;
+\item ajout d'une macro permettant les additions à plus de deux
+ opérandes ;
+\item ajout d'un paramètre permettant l'écriture scientifique ou
+ ingénieur ;
+\item possibilité d'écrire un nombre sur plusieurs lignes et/ou en
+ utilisant un séparateur des milliers ;
+\item retenues dans les multiplications ;
+\item rendre publics les restes successives d'une division ;
+\item les valeurs négatives de \parameter{maxdivstep} et
+ \parameter{safedivstep} réaliseront un comptage sur les chiffres
+ décimaux du quotient ;
+\item manuel en anglais.
+\end{itemize}
+
+Pour toute demande ou rapport de bogue, l'auteur vous sera
+éternellement reconnaissant de le contacter à l'adresse :
+\begin{verbatim}
+ Jean-Come.Charpentier@wanadoo.fr
+\end{verbatim}
+en plaçant le mot \og \texttt{xlop} \fg{} dans le sujet du message.
+
+Il serait souhaitable d'avoir un manuel du hacker qui expliquerait en
+détail le code source. Cet outil pourrait être tout à fait bénéfique
+pour que chacun puisse apporter plus facilement des améliorations au
+code. Malheureusement, le code actuel fait plus de~\nombre{4000}
+lignes et le travail nécessaire risque d'être trop important.
+Éventuellement, il pourra y avoir un manuel du hacker expliquant les
+spécifications générales du code sans entrer dans trop de détails
+techniques.
+
+%\printindex
+\chapter{Index}
+\label{chap:index}
+\begin{multicols}{2}
+\makeatletter
+\parindent \z@\relax
+\parskip \z@ \@plus.3\p@\relax
+\let\item\@idxitem
+\makeatother
+\renewenvironment{theindex}{}{}%
+\input\jobname.ind
+\end{multicols}
+\end{document}
diff --git a/macros/generic/xlop/doc/xlop-doc.pdf b/macros/generic/xlop/doc/xlop-doc.pdf
new file mode 100644
index 0000000000..1910db999a
--- /dev/null
+++ b/macros/generic/xlop/doc/xlop-doc.pdf
Binary files differ
diff --git a/macros/generic/xlop/doc/xlop-doc.tex b/macros/generic/xlop/doc/xlop-doc.tex
new file mode 100644
index 0000000000..fb623b21d0
--- /dev/null
+++ b/macros/generic/xlop/doc/xlop-doc.tex
@@ -0,0 +1,2320 @@
+\documentclass[12pt]{report}
+\usepackage{manual}
+\usepackage[english]{babel}
+\usepackage[autolanguage]{numprint}
+\usepackage{dcolumn}
+
+\newcommand*\boi{\textbackslash}
+\newcommand*\at{@}
+\fvset{label=source}% english
+
+\renewcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}%
+ \index{parameter!\texttt{#1}}}
+
+\begin{document}
+\begin{titlepage}
+ \null\par\vfill
+ \begin{center}
+ \begin{minipage}{0.75\linewidth}
+ \hrule width\linewidth height2pt depth0pt
+ \hrule width0pt height3pt depth0pt
+ \hrule width\linewidth height1pt depth0pt
+ \hrule width0pt height18pt depth0pt
+ \begin{center}
+ \Huge\bfseries XLOP v \fileversion\par\vskip18pt
+ User Manual
+ \end{center}
+ \hrule width0pt height6pt depth0pt
+ \hrule width\linewidth height1pt depth0pt
+ \hrule width0pt height3pt depth0pt
+ \hrule width\linewidth height2pt depth0pt
+ \end{minipage}
+ \end{center}
+ \vfill
+ \begin{center}
+ Jean-Côme Charpentier\\
+ \today
+ \end{center}
+ \vfill\null\par
+\end{titlepage}
+\newpage
+\pagenumbering{roman}
+\tableofcontents
+\newpage
+\pagenumbering{arabic}
+
+\chapter{Overview}
+\label{chap:Présentation}
+The \package{xlop} package is intended to make automatic arithmetic
+operation on arbitrary sized numbers and to display result either on
+display mode or inline mode. Here is a first exemple for an overview
+of the syntax:
+\begin{SideBySideExample}
+ \opadd{45,05}{78,4}
+\end{SideBySideExample}
+We comment this first example in order to give an idea about how use
+\package{xlop}.
+Addition is displayed ``like in school'': this is the default
+displaying. We have an alignment on dots (operand's dot and result's
+dot), operator symbol is put on the left and it is vertically centered
+between the operands, and the decimal separator is a dot even though we
+have specified operands with comma. Finally, note that there is a
+carry above the first operand.
+
+Alignment on dot is obligatory. The other points above are deal with
+options. Many macros accept an optional argument which controls some
+aspects of displaying or computing operation. For that, we use a
+``keyval-like'' syntax: we specify a sequence of parameter's
+modifications through an affectation's comma separated sequence. One
+affectation has one of the two possible syntax below:
+\begin{verbatim}
+ <parameter>=<value>
+ <parameter>
+\end{verbatim}
+the second one is a shorthand for:
+\begin{verbatim}
+ <parameter>=true
+\end{verbatim}
+In this affectation sequence, we can put space(s) after comma. But
+don't put space around the equal sign nor before comma: if you put
+space(s) here, that means that parameter name or value has a space.
+
+So, if you want a comma as decimal separator , an operator symbol side
+by side with the second operand, and no carry, you have just to say:
+\begin{SideBySideExample}
+ \opadd[decimalsepsymbol={,},
+ voperator=bottom,
+ carryadd=false]{45.05}{78.4}
+\end{SideBySideExample}
+Note the trick which consists to put the comma between braces in the
+decimal separator symbol definition. In fact, if you say:
+\begin{Verbatim}[xrightmargin=0pt]
+ \opadd[decimalsepsymbol=,,voperator=bottom,
+ carryadd=false]{45.05}{78.4}
+\end{Verbatim}
+\package{xlop} drives mad! It don't understand what is this sort of
+list!
+
+Another important point, though it is less apparent, is that the
+figures are put in very precise places. Each figure is put in a box of
+fixed width and fixed height (user can change these values), decimal
+separator is put in a null-width box (by default), and the lines have
+a regular interspace (with or without horizontal rule). This allows
+exact spacing and to place what we want where we want.
+\begin{SideBySideExample}
+ \psset{xunit=\opcolumnwidth,
+ yunit=\oplineheight}
+ \opadd{45.05}{78.4}
+ \oplput(1.5,3){carry}
+ \psline{->}(1,3.15)(-3.25,3.15)
+\end{SideBySideExample}
+This example uses package
+\package{pstricks}\index{pstricks@\package{pstricks}}
+
+We have said that \package{xlop} package is able to deal with
+arbitrary sized numbers. We come again about this subject and, for
+now, we just give an example which shows what is possible. Don't look
+at the code, some explanations will be given later in this manual, for
+now just admire the result!
+\begin{CenterExample}[xrightmargin=0pt]
+ \opdiv[style=text,period]{1}{49}
+\end{CenterExample}
+
+The package \package{xlop} provides some other features. It is
+possible to manipulate numbers through variables. These variables can
+be created with an assignation or as a computation result. You can
+also manipulate the figures individually:
+\begin{SideBySideExample}
+ \opadd*{45.05}{78.4}{r}%
+ The first figure after dot of
+ $45.05+78.4$ is
+ \opgetdecimaldigit{r}{1}{d}%
+ $\opprint{d}$.
+\end{SideBySideExample}
+you can make tests:
+\begin{SideBySideExample}
+ \opadd*{45.05}{78.4}{r}%
+ The sum $45.05+78.4$ is
+ \opcmp{r}{100}%
+ \ifopgt greater than
+ \else\ifoplt less than
+ \else equal to
+ \fi\fi
+ $100$.
+\end{SideBySideExample}
+you can use some operations and some functions:
+\begin{SideBySideExample}
+ gcd of $182$ and $442$ is
+ \opgcd{182}{442}{d}$\opprint{d}$
+\end{SideBySideExample}
+you can compute complex expression in infix form:
+\begin{SideBySideExample}
+ \opexpr{(2+3^2)/(gcd(22,33))}{r}%
+ $$\frac{2+3^2}{\gcd(22,33)} =
+ \opprint{r}$$
+\end{SideBySideExample}
+
+\chapter{\package{xlop} Instructions}
+Except some macros which will be examined later, the \package{xlop}'s
+macros can have an optional argument between squared braces in order
+to localy modify parameter's values. The other arguments (mandatory)
+are (nearly) always numbers. The two sections of this chapter describe
+in details what is a number for \package{xlop} and how use parameters.
+
+\section{In the Beginning Was the Number}
+\label{sec:Au début etait le nombre}
+\subsection{Size}
+\label{subsec:Taille}
+Before we see the general syntax of number, we examin the very
+particular \package{xlop} feature: the ability to deal with arbitrary
+sized number.
+
+\index{number!size}To be precise, the theoric maximum size of a number
+is $2^{31}-1$ digits\index{number!limit}. In practice, this limit
+can't be reached for two essential reasons. The first one is that a
+multiplication with two numbers with $2^{25}$~digits needs more than
+$7\,000$ years to be performed on the author computer! The second one
+is more restrictive because it is linked to \TeX{} stack size limits.
+Here is a table showing a \TeX{} compilation for a multiplication with
+two operands of same size, on a linux computer, pentium~II~600 and
+256~Mb RAM:\footnote{In fact it was the author computer in 2004. The
+ actual author computer is \emph{more} powerfull but the author is
+ lazy, and he has not remake the tests!}
+\begin{center}
+ \begin{tabular}{|l|*{6}{c|}}
+ \hline
+ number of digits & 100 & 200 & 300 & 400 & 425 & 450 \\\hline
+ compilation time (s) & 2 & 8 & 18 & 32 & 36 & crash \\\hline
+ \end{tabular}
+\end{center}
+The ``crash'' in the table is due to an overstack for hash table.
+\index{hash table}%
+\index{overflow}%
+On \LaTeX{}, the limit before crash will be reduced. These tests are
+made on a minimal file. With a typical document, this limit will be
+reduced too. The spool size is another limit quickly reached.
+\index{spool size}%
+To typeset this document which contain many calls to the
+\package{xlop} macros, the author has grown up the spool size
+to~$250000$ ($125\,000$ was insufficient) editing the line
+\verb+pool_size+ in the \file{texmf.cnf} file. Also, the author has
+grown up the hash table to~\texttt{1000} in the line
+\verb+hash_extra+.
+
+\subsection{Syntax}
+\label{subsec:Syntaxe}
+Now we present the syntax using the BNF grammar. There will be human
+explanations later:
+\begin{syntaxBNF}
+ \*number* & \{\*sign*\}\*positive* \alt \*name* \\
+ \*sign* & + \alt - \\
+ \*positive* & \*integer* \alt \*sep*\*integer* \alt \\
+ \sameline \*integer*\*sep* \alt \*integer*\*sep*\*integer* \\
+ \*sep* & . \alt , \\
+ \*integer* & \*digit*\{\*digit*\} \\
+ \*name* & \*start*\{character\} \\
+ \*start* & character \textnormal{except } \*sign*\textnormal{,}
+ \*sep* \\
+ \sameline \textnormal{, and } \*digit*
+\end{syntaxBNF}
+\index{syntax!BNF}\index{BNF grammar}
+
+The \texttt{character} symbol means nearly any character accepted by
+\TeX{}. The exceptions are characters \verb+%+ and \verb+#+ which are
+completely prohibited. In fact, the use of active characters is
+risked. For instance, on \LaTeX{}, the \verb+~+ definition prohibits the
+use of it inside a variable name. In the other hand, the \verb+\ +is
+always the escape char, that is, the variable name will be the name
+\emph{after} all is expanded. There isn't any other restraint as the
+following code show it:
+\begin{SideBySideExample}
+ \newcommand\prefix{a/b}
+ \opadd*{2}{2}{a/b_{^c}!&$}
+ \opprint{\prefix_{^c}!&$}
+\end{SideBySideExample}
+\index{number!name}%
+Note particullary that \verb+a/b_{^c}!&$+ and \verb+\prefix_{^c}!&$+
+produce exactly the same name\ldots{} obviously if \verb+\prefix+ has
+the right definition! This possibility to have a name using macro
+could seem useless but it is not true. For instance, you can realize
+loops\index{loop} with names as \verb+r1+, \verb+r2+, \ldots,
+\verb+r<n>+ using the code \verb+r\the\cpt+ as variable name, where
+\verb+cpt+ is a counter in the \TeX{} meaning. With \LaTeX{}, the code
+is more verbose with \verb+r\number\value{cpt}+ where \verb+cpt+ is
+now a \LaTeX{} counter. We will see an example using this syntax in
+the section~\ref{sec:Creation d'operations complexes}
+page~\pageref{sec:Creation d'operations complexes}.
+
+\index{number!valid}In practice, what does it mean all these rules?
+First, they means that a number writes in a decimal form can be
+preceded by any sequence of plus or minus signs. Obviously, if there
+is an odd number of minus signs, the number will be negative. Next, a
+decimal number admits only one decimal separator symbol which can
+be a dot or a comma, this one can be put anywhere in the
+number. Finally, a number is write in basis~10. Be carefull: these
+rules mean that \verb+-a+ is not valid.
+
+The package uses some private names and it is safe to not begin a
+variable name with the character \texttt{@}.
+
+\section{\package{xlop} Parameters}
+\label{sec:Parametres de xlop}
+\index{parameter!syntax|(}
+Parameter assignments are local to the macro when they are indicated
+in the optional argument. To make global a parameter assignment, you
+have to use the \macro{opset} macro. For instance:
+\begin{Verbatim}[xrightmargin=0pt]
+ \opset{decimalsepsymbol={,}}
+\end{Verbatim}
+give the comma as decimal separator symbol for the whole document, at
+least, until another redefinition with \verb+\opset+.
+
+\subsection{Symbols}
+\label{subsecSymboles}
+The \parameter{afterperiodsymbol} parameter indicates the symbol that
+follows a quotient in line in a division with period
+search\index{division!period}. Its default value is \verb+$\ldots$+
+
+The \parameter{equalsymbol} parameter indicates the symbol used for
+equality. Its default value is \verb+$=$+. In fact, this parameter is
+defined with:
+\begin{Verbatim}[xrightmargin=0pt]
+ \opset{equalsymbol={$=$}}
+\end{Verbatim}
+that is, with braces in order to protect the equal sign. Without
+theses braces, there will be a compilation error. You have to process
+like that when there is an equal sign or a comma in the
+value.\index{parameter!with ``='' or ``,''\quad}
+
+The parameter \parameter{approxsymbol} indicates the symbol used for
+approximations. Its default value is \verb+$\approx$+.
+
+The parameter \parameter{decimalsepsymbol} indicates the symbol used
+for the decimal separator. Its default value is a dot.
+
+Parameters \parameter{addsymbol}, \parameter{subsymbol},
+\parameter{mulsymbol}, and \parameter{divsymbol} indicate the symbols
+used for the four arithmetic operations. The default value are
+\verb!$+$!, \verb!$-$!, \verb!$\times$! et \verb!$\div$! respectively.
+
+\subsection{General Displaying}
+\label{subsec:Presentation generale}
+The \parameter{voperation} parameter indicates the way a dispayed
+operation is put with respect to the baseline. The possible values are
+\verb+top+, \verb+center+, and \verb+bottom+, the latter one is the
+default value.
+\begin{SideBySideExample}
+ top\quad
+ \opadd[voperation=top]{45}{172}\par
+ center\quad
+ \opadd[voperation=center]{45}{172}\par
+ bottom\quad
+ \opadd[voperation=bottom]{45}{172}
+\end{SideBySideExample}
+
+The \parameter{voperator} parameter indicates how the operator symbol
+is put with repect to operands. The possible values are \verb+top+,
+\verb+center+ (default value), and \verb+bottom+.
+\begin{SideBySideExample}
+ top\quad
+ \opadd[voperator=top]{45}{172}\par
+ center\quad
+ \opadd[voperator=center]{45}{172}\par
+ bottom\quad
+ \opadd[voperator=bottom]{45}{172}
+\end{SideBySideExample}
+
+The \parameter{deletezero} parameter indicates if some numbers in
+operation should be displayed with or whithout non-significant
+zeros. Exact rôle of this parameter depends of the actual
+operation. We will see that when we will study the different
+operations.
+
+The \parameter{style} parameter indicates the way an operation is
+displayed: display with \verb+display+ value (default value) or inline
+with \verb+text+ value. We will see when we will study division
+because there is many possibilities with this operation.
+\begin{SideBySideExample}
+ \opadd[style=text]{45}{172}
+\end{SideBySideExample}
+In inline operations, \package{xlop} takes care to not typeset the
+formula in mathematic mode in a direct way. This allow to specify what
+you want as in the next example, and it is also for that that you have
+to specify the classical values of symbols between mathematic
+delimiters.
+\begin{SideBySideExample}
+ \opadd[addsymbol=plus,
+ equalsymbol=equal,
+ style=text]{42}{172}
+\end{SideBySideExample}
+Meanwhile, \package{xlop} introduces exactly the same penalities and
+the same spaces as for a mathematic formula.
+
+The \parameter{parenthesisnegative} parameter indicates how to typeset
+negative numbers in inline operations. The possible values are:
+\begin{itemize}
+\item \texttt{none} which typesets negative numbers without
+ parenthesis;
+\item \texttt{all} which typesets negative numbers with parenthesis;
+\item \texttt{last} which typesets negative numbers with parenthesis
+ but the first one.
+\end{itemize}
+\begin{SideBySideExample}
+ \opadd[style=text,
+ parenthesisnegative=none]
+ {-12}{-23}\par
+ \opadd[style=text,
+ parenthesisnegative=all]
+ {-12}{-23}\par
+ \opadd[style=text,
+ parenthesisnegative=last]
+ {-12}{-23}
+\end{SideBySideExample}
+
+\subsection{Dimensions}
+\label{subsec:Dimensions}
+In displayed operations, figures are put in fixed size boxes. The
+width is given by the \parameter{lineheight} parameter and the height
+is given by the \parameter{lineheight} parameter. The default value of
+\texttt{lineheight} is \verb+\baselineskip+ that is, interline space
+in operation is the same (by default) as in the normal text. The
+default value for \texttt{columnwidth} is \texttt{2ex} because the
+``normal'' width of figures would give bad results.
+\begin{SideBySideExample}
+ \opadd[columnwidth=0.5em]
+ {45.89}{127.5}
+\end{SideBySideExample}
+One reason for this bad result is that the decimal separator is put in
+a box which width is controlled by the \parameter{decimalsepwidth}
+parameter and the default value of this parameter is null. You can
+improve this presentation giving a ``normal'' width to the dot.
+\begin{SideBySideExample}
+ \opadd[columnwidth=0.5em,
+ decimalsepwidth=0.27778em]
+ {45.89}{127.5}
+\end{SideBySideExample}
+It is better but give a positive width to the box that contain the
+decimal separator is risked. It will be more difficult to place
+extern object and it is counter against the idea to have a fixed
+grid. You should avoid this in normal time.
+
+The \parameter{columnwidth} and \parameter{lineheight} parameters
+correspond to the only dimensions that \package{xlop} provides as
+public one, that is,
+\verb+\opcolumnwidth+\index{opcolumnwidth@\texttt{$\backslash$opcolumnwidth}}
+and
+\verb+\oplineheight+\index{oplineheight@\texttt{$\backslash$oplineheight}}
+respectively. It is dangerous to directly modify these dimensions
+since a modification in a ``normal'' way doesn't only change the
+dimension value. Package \package{xlop} make these dimensions public
+only for reading, not for writting.
+
+The two next parameters allow to specify width of horizontal and
+vertical rules stroked by \package{xlop}. We have
+\parameter{hrulewidth} and \parameter{vrulewidth} parameters. The
+default values are both \texttt{0.4pt}.
+
+These rules are typeset with no change on grid. That is, with no space
+added. Therefore, with great values for thickness, the rules could
+run over numbers.
+\begin{SideBySideExample}
+ \opadd[hrulewidth=8pt]{42}{172}
+\end{SideBySideExample}
+
+There is also a paramater which allows to control the horizontal shift
+of decimal separator. It is the \parameter{decimalsepoffset} paramater
+with a default value of~\texttt{-0.35}. This value indicates a length
+with the unit \verb+\opcolumnwidth+. We will see an example at
+section~\ref{sec:Division} page~\pageref{sec:Division}.
+
+\subsection{Figure's Styles}
+\label{subsec:Styles des chiffres}
+The \package{xlop} package provides five types of numbers and
+associates five style paramaters:
+\begin{itemize}
+\item operands with \parameter{operandstyle};
+\item result with \parameter{resultstyle};
+\item remainders with \parameter{remainderstyle};
+\item intermediary numbers with \parameter{intermediarystyle};
+\item carries with \parameter{carrystyle}.
+\end{itemize}
+\begin{SideBySideExample}
+ \opadd[operandstyle=\blue,
+ resultstyle=\red,
+ carrystyle=\scriptsize\green]
+ {45.89}{127.5}
+\end{SideBySideExample}
+Keep in mind that, in this manual, we use
+\package{pstricks}\index{pstricks} package.
+
+\index{parameter!index|(}%
+In fact, the management of these styles is even more powerfull since
+you can distingish different number of a same class. In one operation,
+you have several operands, and, possibly several remainders and
+several intermediary numbers. You can access to the style of these
+numbers adding an index to the matching style.
+\begin{SideBySideExample}
+ \opadd[operandstyle=\blue,
+ operandstyle.1=\lightgray,
+ resultstyle=\red,
+ carrystyle=\scriptsize\green]
+ {45.89}{127.5}
+\end{SideBySideExample}
+In this example, we indicate that the first operand must be typesetted
+with the \verb+\lightgray+ style. We don't indicate anything for the
+second operand, so it takes the basic style for its class. (Then with
+\verb+\blue+ style.)
+
+This mechanism is even more powerfull since you can write two level
+index for operands, carries, and intermediary numbers (one level for
+result and carry) in order to access to each style figure of these
+numbers. To simplify index, a positive index indicates the rank of a
+figure in the integer part (right to left order, index~1 is for the
+unit figure) and a negative index indicates the rank of a figure in
+the decimal part (left to right order, $-1$ is for the tenth figure).
+\begin{SideBySideExample}
+ \opadd[operandstyle.1.1=\white,
+ operandstyle.1.-2=\white,
+ operandstyle.2.3=\white,
+ resultstyle.2=\white,
+ deletezero=false]
+ {045.89}{127.50}
+\end{SideBySideExample}
+You can also use a macro with one parameter as a style.
+\begin{SideBySideExample}
+ \newcommand\hole[1]{$\bullet$}
+ \opadd[operandstyle.1.1=\hole,
+ operandstyle.1.-2=\hole,
+ operandstyle.2.3=\hole,
+ resultstyle.2=\hole]
+ {45.89}{127.5}
+\end{SideBySideExample}
+\index{operation!with hole}%
+When the style is a macro with argument, this one is the figure. Here
+is a more complicated example using \package{pst-node} package of the
+\package{pstricks} bundle:
+\begin{SideBySideExample}
+ \newcommand\OPoval[3]{%
+ \dimen1=#2\opcolumnwidth
+ \ovalnode{#1}
+ {\kern\dimen1 #3\kern\dimen1}}
+ \opadd[voperation=top,
+ operandstyle.1.1=\OPoval{A}{0},
+ operandstyle.2.2=\OPoval{C}{0.8}]
+ {45}{172}\qquad
+ \begin{minipage}[t]{2cm}
+ \pnode(0,0.2em){B}\ figure
+ \ncarc{->}{A}{B}\par
+ \pnode(0,0.2em){D}\ number
+ \ncarc{<-}{D}{C}
+ \end{minipage}
+\end{SideBySideExample}
+As for figures, the decimal separator take account to number style. To
+access individually to the decimal separator style, you have to use
+\texttt{d} index, numeric indexes are for figures.
+\begin{SideBySideExample}
+ \newcommand\hole[1]{\texttt{\_}}
+ \opmul[intermediarystyle=\hole,
+ resultstyle=\hole,
+ resultstyle.d=\white]{2.46}{35.7}
+\end{SideBySideExample}
+\index{parameter!index|)}%
+\index{parameter!syntax|)}
+
+\chapter{Arithmetic Operations}
+\label{chap:Opérations arithmétiques}
+\section{Addition}
+\label{sec:Addition}
+Addition is deal by the \macro{opadd} macro. When it is in display
+mode, it display only nonnegative numbers. Then, it displays a
+substraction when one of the operands is nonpositive.%
+\index{number!nonpositive in displayed operation}
+\begin{SideBySideExample}
+ \opadd{-245}{72}
+\end{SideBySideExample}
+In a general manner, the principle is to display the operation that
+allows to find the result as you make it ``by hand''. On the contrary,
+the inline mode shows always an addition since we can now write
+nonpositive numbers.
+\begin{SideBySideExample}
+ \opadd[style=text]{-245}{72}
+\end{SideBySideExample}
+In addition to the general parameters discussed in the
+section~\ref{sec:Parametres de xlop}, the macro \verb+\opadd+ uses
+parameters \texttt{carryadd}, \texttt{lastcarry}, and
+\texttt{deletezero}.
+
+The \parameter{carryadd} parameter is a boolean
+parameter\index{parameter!boolean}, that is, it accepts only the
+values \texttt{true} and \texttt{false}. By habit, when you don't
+specify the value and the equal sign, that is like assignment
+\texttt{=true}. This parameter indicates if the carries must be showed
+or not. Its default value is \texttt{true}.
+
+The \parameter{lastcarry} parameter is also a boolean parameter. It
+indicates if a carry without matching digit for the two operands must
+be showed or not. Its default value is \texttt{false}. Take care to
+the exact rôle of this parameter. For instance, if the second operand
+in the following example is~15307, the last carry would be showed for
+any value of the \texttt{lastcarry} parameter since there is a
+matching digit in the second operand.
+\begin{SideBySideExample}
+ \opadd{4825}{5307}
+\end{SideBySideExample}
+\begin{SideBySideExample}
+ \opadd[carryadd=false]{4825}{5307}
+\end{SideBySideExample}
+\begin{SideBySideExample}
+ \opadd[lastcarry]{4825}{5307}
+\end{SideBySideExample}
+
+The \parameter{deletezero} parameter is also a boolean parameter. It
+indicates if non-significant zeros must be deleted or not. Its default
+value is \texttt{true}. When this parameter is \texttt{false}, the
+operands and the result has the same number of digits. For that,
+\package{xlop} package adds non-significant zeros. Also, the
+non-significant zeros of operands are not removed.
+\begin{SideBySideExample}
+ \opadd{012.3427}{5.2773}\par
+ \opadd[deletezero=false]
+ {012.3427}{5.2773}
+\end{SideBySideExample}
+
+This parameter has exactly the same rôle for inline mode than for
+displayed mode.
+\begin{SideBySideExample}
+ \opadd[style=text]{02.8}{1.2}\par
+ \opadd[style=text,
+ deletezero=false]{02.8}{1.2}\par
+\end{SideBySideExample}
+
+\section{Substraction}
+\label{sec:soustraction}
+Substraction is made by \macro{opsub} macro. In displayed mode, the
+substraction shows only nonnegative numbers. For that, it shows an
+addition when one operand is nonpositive.
+\begin{SideBySideExample}
+ \opsub{-245}{72}
+\end{SideBySideExample}
+In a general way, the principle is to display the operation which
+allow to find the result as you make it ``by hand''. On the contrary,
+inline mode shows always a substraction since you can now write
+nonpositive numbers.
+\begin{SideBySideExample}
+ \opsub[style=text]{-245}{72}
+\end{SideBySideExample}
+This principle apply also when the first operand is less than the
+second one (positive case). In this case, we have an operand
+inversion.
+\begin{SideBySideExample}
+ \opsub{1.2}{2.45}
+\end{SideBySideExample}
+Of course, inline operation gives an exact result.
+\begin{SideBySideExample}
+ \opsub[style=text]{1.2}{2.45}
+\end{SideBySideExample}
+
+In addition to general parameters we have seen at
+section~\ref{sec:Parametres de xlop}, \verb+\opsub+ takes account of
+\texttt{carrysub}, \texttt{lastcarry}, \texttt{offsetcarry},
+\texttt{deletezero}, and \texttt{behaviorsub} parameters.
+
+The \parameter{carrysub} parameter is a boolean one which indicates if
+carries must be present or not. Its default value is \texttt{false}.
+(Remember that the default value of \texttt{carryadd} parameter is
+\texttt{true}.)
+\begin{SideBySideExample}
+ \opsub[carrysub]{1234}{567}
+\end{SideBySideExample}
+
+In the last example, you can see that there is no carry above the last
+digit of 1234. This is quite common (at least in France). If you want
+display this last carry, you have to use the \parameter{lastcarry}
+parameter. This parameter does not have the same behavior in
+substraction and in addition since here, the last carry is not
+displayed when the second operand does not have correspondent
+digit. (For addition, last carry is not displayed when \emph{all} the
+operands do not have correspondent digit.)
+\begin{SideBySideExample}
+ \opsub[carrysub,lastcarry]{1234}{567}
+\end{SideBySideExample}
+Note that, in this case, it is better to set the
+\parameter{deletezero} parameter to \texttt{false} in order to have a
+nicer result.
+\begin{SideBySideExample}
+ \opsub[carrysub,
+ lastcarry,
+ deletezero=false]{1234}{567}
+\end{SideBySideExample}
+
+Perhaps it seems to you that showing carries for substraction is a bit
+more dense. You can enlarge the figure box with the
+\parameter{opcolumnwidth} parameter. You can also indicate the carry
+horizontal shift using the \parameter{offsetcarry} parameter. Its
+default value is \texttt{-0.35}.
+\begin{SideBySideExample}
+ \opsub[carrysub,
+ lastcarry,
+ deletezero=false]{12.34}{5.67}
+
+ \bigskip
+ \opsub[carrysub,
+ lastcarry,
+ columnwidth=2.5ex,
+ offsetcarry=-0.4,
+ decimalsepoffset=-3pt,
+ deletezero=false]{12.34}{5.67}
+\end{SideBySideExample}
+
+It is possible that a substraction with two positive numbers and with
+the first one less than the second one signs an user error. In this
+case, and only in this case, the \parameter{behaviorsub} parameter
+allows a call to order. The three possible values are:
+\begin{itemize}
+\item \texttt{silent} which is the default value and which gives the
+ result;
+\item \texttt{warning} which gives also the result but shows the
+ warning message:
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ xlop warning. Substraction with first operand less than second one
+ See documentation for further information.
+\end{Verbatim}
+\item \texttt{error} which shows the error message:
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ xlop error. See documentation for further information.
+ Type H <return> for immediate help.
+ ! Substraction with first operand less than second one.
+\end{Verbatim}
+ and the operation is not performed.
+\end{itemize}
+
+\section{Multiplication}
+\label{sec:Multiplication}
+The multiplication is under the control of the \macro{opmul} macro.
+
+The parameters we will see below are \texttt{hfactor},
+\texttt{displayintermediary}, \texttt{shiftintermediarysymbol}, and
+\texttt{deletezero}. We studied the other parameters in
+section~\ref{sec:Parametres de xlop}.
+
+The \parameter{shiftintermediarysymbol} parameter indicates what is
+the symbol used for showing the shifting of intermediary numbers
+(default value is \verb+$\cdot$+). The
+\parameter{displayshiftintermediary} parameter can take value
+\texttt{shift} (default value) which shows this symbol only for
+shifting greater than one level, value \texttt{all} which shows this
+symbol for all the shiftings, and the value \texttt{none} which means
+that this symbol will be never showed.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[displayshiftintermediary=shift]{453}{1001205}\qquad
+ \opmul[displayshiftintermediary=all]{453}{1001205}\qquad
+ \opmul[displayshiftintermediary=none]{453}{1001205}
+\end{CenterExample}
+
+In fact, null intermediary numbers are not display because of the
+default value \texttt{none} of the \parameter{displayintermediary}
+parameter. The value \texttt{all} shows all the intermediary numbers,
+even null intermediary numbers.
+\begin{SideBySideExample}
+ \opmul[displayintermediary=all]
+ {453}{1001205}
+\end{SideBySideExample}
+Note that null intermediary numbers are displayed with the same width
+than the first factor width.
+
+The \parameter{displayintermediary} parameter accepts the value
+\texttt{nonzero} which means the same than the \texttt{none} value
+except when second factor has only one digit.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul{3.14159}{4}\qquad
+ \opmul[displayintermediary=nonzero]{3.14159}{4}
+\end{CenterExample}
+
+Finally, parameter \parameter{displayintermediary} accepts the value
+\texttt{None} which don't display any intermediary numbers in all cases.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[displayintermediary=None]{453}{1001205}
+\end{CenterExample}
+
+The \parameter{hfactor} parameter indicates how align operands. The
+default value, \texttt{right}, gives a raggedleft alignment. The
+\texttt{decimal} value gives an alignment on dot.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul{3.1416}{12.8}\qquad\opmul[hfactor=decimal]{3.1416}{12.8}
+\end{CenterExample}
+
+For displayed multiplication, the \parameter{deletezero} parameter is
+only for operands. The result keeps its non-significant zeros since
+there are necessary in order to make a correct dot shifting when we
+work ``by hand''.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[deletezero=false]{01.44}{25}\qquad
+ \opmul{01.44}{25}
+\end{CenterExample}
+In the other hand, this parameter has its usual behaviour in inline
+multiplication.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opmul[deletezero=false,style=text]{01.44}{25}\qquad
+ \opmul[style=text]{01.44}{25}
+\end{CenterExample}
+
+\section{Division}
+\label{sec:Division}
+The \package{xlop} package deals with ``normal'' division via
+\macro{opdiv} macro and with euclidean division via \macro{opidiv}
+macro. Division is a very complex operation so it is not strange that
+there are many parameters to control it.
+
+Pay attention that the \package{xlop} package v. \fileversion{} is
+unable to deal with ``english'' division. In this package version, the
+division is the ``french'' one, which is more or less used as it in
+some other countries. The \package{xlop} package v. 0.3 will allow
+``enlish'' division (and many more feautures).
+
+\subsection{End Control}
+\label{subsec:Controle de l'arret}
+In the following text, term \emph{step} means the set of process which
+allow to get one digit for the quotient. This number of steps is (not
+only) under the control of \parameter{maxdivstep},
+\parameter{safedivstep}, and \parameter{period} parameters. It is only
+partially true because a classical division will stop automatically
+when a remainder will be zero, whatever the values of these three
+parameters and an euclidean division will stop with an integer quotient
+without attention for these three parameters.
+\begin{SideBySideExample}
+ \opdiv{25}{7}
+\end{SideBySideExample}
+\begin{SideBySideExample}
+ \opidiv{25}{7}
+\end{SideBySideExample}
+The first example stops because of the value of \parameter{maxdivstep}
+which is 10 by default. Pay attention that the maximum step number
+could cause strange result when it is too small.
+\begin{SideBySideExample}
+ \opdiv[maxdivstep=2]{1248}{3}
+\end{SideBySideExample}
+Clearly, the last result is false. In the other hand, \package{xlop}
+package did what we have ask, that is, obtain two digits (maximum) for
+the quotient.
+
+The inline mode differ with zero remainder or not and with the type of
+division (classical or euclidean).
+\begin{SideBySideExample}
+ \opdiv[style=text]{3.14}{2}\par
+ \opdiv[style=text]{3.14}{3}\par
+ \opidiv[style=text]{314}{2}\par
+ \opidiv[style=text]{314}{3}
+\end{SideBySideExample}
+Note the use of \parameter{equalsymbol} or \parameter{approxsymbol}
+parameter according to the case. Note also that \package{xlop}
+displays results with floor, not with round. We will see how obtain a
+round in section~\ref{sec:Operations evoluees}.
+
+For inline mode of \verb+\opdiv+, \package{xlop} take account of
+\parameter{maxdivstep}. It means that we can obtain results very false
+with too small values of this parametrer and, unlike with display mode
+division, inline mode don't allow to understand what is wrong.
+\begin{SideBySideExample}
+ \opdiv[maxdivstep=2,style=text]
+ {1248}{3}
+\end{SideBySideExample}
+In addition, if the last remainder is zero, we obtain a must:
+\begin{SideBySideExample}
+ \opdiv[maxdivstep=1,style=text]
+ {1208}{3}
+\end{SideBySideExample}
+because there is no approximation at all!
+
+A classical division can stop with period detection. For that, you
+have just to give the value \texttt{true} for the \parameter{period}
+parameter\index{division!period}.
+\begin{SideBySideExample}
+ \opdiv[period]{100}{3}
+\end{SideBySideExample}
+
+To avoid comparizons between each remainder with all previous
+remainder, \package{xlop} calculates immediatly the period
+length. That allows to process only one comparizon for each step, then
+to have a much more efficient process.\footnote{Thanks to Olivier
+ Viennet about mathematic precisions that allows to implement these
+ calculations.} Unfortunately, these calculations are made with
+numbers that are directly accesible to \TeX{}. As consequence, you
+can't use operand with absolute value greater than
+$\left\lfloor\frac{2^{31}-1}{10}\right\rfloor = 214748364$.
+
+In order to avoid too long calculations, \package{xlop} don't process
+beyond the value of \parameter{safedivstep} parameter in division with
+period. Its default value is~50. However, \package{xlop} package show
+this problem. For instance, if you ask for such a division with the
+code:
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ \opdiv[period]{1}{289}
+\end{Verbatim}
+you obtain the warning message:
+\begin{Verbatim}[xrightmargin=0pt,frame=none]
+ xlop warning. Period of division is too big (272 > safedivstep).
+ Division will stop before reach it.
+ See documentation for further information.
+\end{Verbatim}
+which indicates that this division period is~272 and that it can be
+achieved because of the \texttt{safedivstep} value.
+
+The inline mode for division with period has some particularities.
+\begin{SideBySideExample}
+ \opdiv[period,style=text]{150}{7}
+\end{SideBySideExample}
+We obtain an equality rather than an approximation, there is a rule
+under the period, and there is ellipsis after the period. All these
+components can be configured. The equality symbol is given
+by the \parameter{equalsymbol} parameter (default value is
+\verb+{$=$}+). The rule thickness is given by
+the \parameter{hrulewidth} parameter (default value is
+\texttt{0.4pt}). The vertical offset of this rule is given
+by \parameter{vruleperiod} parameter (default value is \texttt{-0.2})
+which indicates a vertical offset taking \verb+\oplineheight+ as
+unit. The ellipsis are given by the
+parameter \parameter{afterperiodsymbol} (default value
+\verb+$\ldots$+).
+\begin{SideBySideExample}
+ \opdiv[period,style=text,
+ equalsymbol=$\approx$,
+ hrulewidth=0.2pt,
+ vruleperiod=0.7,
+ afterperiodsymbol=]
+ {150}{7}
+\end{SideBySideExample}
+
+\subsection{Other Features}
+\label{subsec:Elements supplementaires}
+Displayed divisions can include successive substractions which allow
+remainder calculations. For \package{xlop}, the numbers which are
+substracted are intermediary numbers, so the different ways to
+represent substractions use \parameter{displayintermediary} parameter
+see for multiplication. The default value, valeur \texttt{none}, don't
+display any substraction; the value \texttt{all} displays all the
+substractions, and the value \texttt{nonzero} displays substractions
+with non-zero numbers
+\begin{CenterExample}[xrightmargin=0pt]
+ \opdiv[displayintermediary=none,voperation=top]
+ {251}{25}\quad
+ \opdiv[displayintermediary=nonzero,voperation=top]
+ {251}{25}\quad
+ \opdiv[displayintermediary=all,voperation=top]
+ {251}{25}
+\end{CenterExample}
+
+When we write a display division, we can draw a ``bridge'' over the
+part of dividend which is taken in count for the first step of
+calculation. The \package{xlop} package allow to draw this symbol
+thanks to the boolean parameter \parameter{dividendbridge} (default
+value is \texttt{false}).
+\begin{SideBySideExample}
+ \opdiv[dividendbridge]{1254}{30}
+\end{SideBySideExample}
+
+\subsection{Non Integer Numbers and Negative Numbers}
+\label{subsec:Nombres non entiers et negatifs}
+The \parameter{shiftdecimalsep} parameter governs non integer operands
+aspect/ Its default value is \texttt{both} which indicates that
+decimal separator is shifted in order to obtain integer divisor and
+integer dividend. The value \texttt{divisor} indicates that there is
+the shifting that allows an integer divisor. The value \texttt{none}
+indicates that there isn't any shifting.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=divisor]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=none]{3.456}{25.6}
+\end{CenterExample}
+
+Parameter \parameter{strikedecimalsepsymbol} gives the symbol used
+to show the old place of decimal separator when this one is
+shifted. The default value is empty, that is, there isn't any
+symbol. This explain why you don't see anything on previous examples.
+\begin{CenterExample}[xrightmargin=0pt]
+ \opset{strikedecimalsepsymbol={\rlap{,}\rule[-1pt]{3pt}{0.4pt}}}
+ \opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=divisor]{3.456}{25.6}\quad
+ \opdiv[shiftdecimalsep=none]{3.456}{25.6}
+\end{CenterExample}
+
+When there is a non empty symbol for the striked decimal separator, it
+is possible to have non-significant zeros in operands.
+\begin{SideBySideExample}
+ \opdiv[shiftdecimalsep=divisor,
+ strikedecimalsepsymbol=%
+ \hspace{-3pt}\tiny$\times$]
+ {0.03456}{2.56}
+\end{SideBySideExample}
+
+We have already seen that \macro{opidiv} macro gives integer
+quotient. This is true even with non integer operands. It is somewhere
+strange to perform an euclidian division with non integer operands. The
+\macro{opidiv} macro will be strict about the
+presentation. Parameters \parameter{maxdivstep}, \parameter{safedivstep},
+and \parameter{period} haven't any effect, as
+for \parameter{shiftdecimalsep} parameter since operands are changed
+to integer ones.
+\begin{SideBySideExample}
+ \opidiv[strikedecimalsepsymbol=%
+ \hspace{-3pt}\tiny$\times$]
+ {34.57}{7}
+\end{SideBySideExample}
+
+When operands are negative, the inline \macro{opidiv} numbers is
+different from the displayed \macro{opidiv} ones. Remainder will be
+between zero (include) and absolute value of divisor (exclude).
+\begin{SideBySideExample}
+ \opdiv[style=text]{124}{7}\par
+ \opidiv[style=text]{124}{7}\par
+ \opidiv[style=text]{124}{-7}\par
+ \opidiv[style=text]{-124}{7}\par
+ \opidiv[style=text]{-124}{-7}
+\end{SideBySideExample}
+
+This condition for remainder is valid even with non integer divisor.
+\begin{SideBySideExample}
+ \opidiv[style=text]{1.24}{0.7}\par
+ \opidiv[style=text]{1.24}{-0.7}\par
+ \opidiv[style=text]{-1.24}{0.7}\par
+ \opidiv[style=text]{-1.24}{-0.7}
+\end{SideBySideExample}
+
+\chapter{Other Commands}
+\label{chap:Autres commandes}
+\section{Starred Macros}
+\label{sec:Macros etoilees}
+The five macros seen in previous chapter have a starred version. These
+starred macros perform the calculation and don't display
+anything. Result is record in a variable given as argument.
+
+Since these commands don't display anything, parameters don't make
+sens and aren't allowed for \macro{opadd*}, \macro{opsub*},
+\macro{opmul*}, and \macro{opidiv*}. In the other hand,
+parameters \parameter{maxdivestep}, \parameter{safedivstep},
+and \parameter{period} influence calculations, then \macro{opdiv*}
+macro accepts an optional argument to take account of them.
+\begin{SideBySideExample}
+ \opmul*{2}{2}{a}%
+ \opmul*{a}{a}{a}\opmul*{a}{a}{a}%
+ \opadd[style=text]{a}{1}
+\end{SideBySideExample}
+For macros \macro{opdiv} and \macro{opidiv}, there are two extra
+arguments to record quotient and final remainder.
+\begin{SideBySideExample}
+ \opdiv*[maxdivstep=1]{-88}{16}{q}{r}%
+ \opmul*{q}{16}{bq}%
+ \opmul[style=text]{16}{q}\par
+ \opadd[style=text]{bq}{r}
+\end{SideBySideExample}
+
+\section{Input-Output}
+\label{sec:Entree-sorties}
+The \macro{opcopy} macro copies its first argument into its second
+one. Then, the first argument is a number write in decimal form or
+\emph{via} a variable, whereas the second one is a variable name.
+
+The \macro{opprint} macro displays its argument. The following example
+uses the counter \macro{time} which indicates numbers of minutes since
+midnight.
+\begin{SideBySideExample}
+ \opidiv*{\the\time}{60}{h}{m}%
+ It is \opprint{h}~hours
+ \opprint{m}~minutes
+\end{SideBySideExample}
+We will see at section~\ref{sec:Comparaisons} how to improve this
+example with tests.
+
+The \macro{opdisplay} macro also displays a number but here, each
+figure is in a box. The width of this box is given
+by \parameter{columnwidth} and the height of this box is given
+by \parameter{lineheight}. Style is specified by the first
+argument. This macro accepts an optional argument in order to give a
+specific style for individual figures.
+\begin{SideBySideExample}
+ \opdisplay[resultstyle.1=\bfseries,
+ resultstyle.-2=\bfseries]
+ {resultstyle}{129.192}
+\end{SideBySideExample}
+Macros \macro{oplput} and \macro{oprput} allow to put anything
+anywhere. The syntax of both of them is different from the other ones
+of \package{xlop} since the place is indicated with coordinates
+between parenthesis. The coordinates use \macro{opcolumnwidth} and
+\macro{oplineheight} as units. Then user is able to build his own
+``operations''.
+\begin{SideBySideExample}
+ \psset{xunit=\opcolumnwidth,
+ yunit=\oplineheight}%
+ \psgrid[subgriddiv=1,gridlabels=7pt,
+ griddots=5](0,1)(10,-2)
+ \oplput(2,0){Hello}
+ \oprput(8,-1){world!}
+ $\bullet$
+\end{SideBySideExample}
+On example above, note that these macros don't move the reference
+point. As a precaution, they kill the trailing space and then, there
+is no need to protect the end of line with a \verb+%+.
+
+Macros \macro{ophline} and \macro{opvline} complete the previous ones
+to give all the tools the user needs to build its own operations.
+\macro{ophline} allows to draw a horizontal rule; its length is given
+by the parameter after coordinates. \macro{opvline} does the same for
+vertical rules. Remember that parameters \parameter{hrulewidth}
+and \parameter{vrulewidth} indicate the thickness of these rules.
+\begin{CenterExample}[xrightmargin=0pt]
+ \par\vspace{2\oplineheight}
+ \oplput(1,2){O}\oplput(2,2){N}\oplput(3,2){E}
+ \oplput(0,1.5){$+$}
+ \oplput(1,1){O}\oplput(2,1){N}\oplput(3,1){E}
+ \ophline(0,0.8){4}
+ \oplput(1,0){T}\oplput(2,0){W}\oplput(3,0){O}
+\end{CenterExample}
+
+Macro \macro{opexport}\refstepcounter{stuff}\label{macro-opexport}
+allow to export a number in a macro. It's an extra to version~0.23
+which is very usefull to exchange datas between \package{xlop} and the
+outside world. The first argument is a number in the \package{xlop}
+sense, that is, either a number write with figures, or a variable
+name. The number is translated in a form directly acceptable for
+\TeX{} and hold in the second argument which should be a macro
+name. However, note that decimal separator will be the one specified
+by \parameter{decimalsepsymbol} (without its possible braces).
+\begin{SideBySideExample}
+ \opmul*{5}{3.141592654}{F}
+ \opexport{F}{\fivepi}
+ \texttt{\meaning\fivepi}
+\end{SideBySideExample}
+We can use this macro to typeset numbers calculated by \package{xlop}
+in an array with a decimal alignment, or to initialize a counter or a
+length (don't forget the unit in the last case).
+
+\section{Figures of Numbers}
+\label{sec:Chiffres d'un nombre}
+Macros \macro{opwidth}, \macro{opintegerwidth}, and
+\macro{opdecimalwidth} indicate number of digits of the whole number,
+of its integer part, of its decimal part respectively. The first
+argument is the examined number and the second one indicates the
+variable where result will be record.
+\begin{SideBySideExample}
+ \opcopy{123456.1234}{a}%
+ \opwidth{a}{na}%
+ \opintegerwidth{a}{ia}%
+ \opdecimalwidth{a}{da}%
+ \opprint{a} is written with
+ \opprint{na} figures (\opprint{ia} in
+ the integer part and \opprint{da} in
+ the decimal part).
+\end{SideBySideExample}
+
+Macro \macro{opunzero} delete all the non-significant
+zeros\index{non-significant zero} of the number passed as argument.
+\begin{SideBySideExample}
+ \opcopy{00150.00250}{a}%
+ Before : \opprint{a}\par
+ \opunzero{a}%
+ After : \opprint{a}
+\end{SideBySideExample}
+
+Macros \macro{integer} and \macro{opdecimal} give the integer part and
+the decimal part of a number respectively.
+\index{number!integer part}\index{integer part}%
+\index{number!decimal part}\index{decimal part}%
+First argument is the number to process, and the second one is the
+variable name which hold the result.
+\begin{SideBySideExample}
+ \opcopy{-37.69911}{a}%
+ \opinteger{a}{ia}%
+ \opdecimal{a}{da}%
+ Integer part: \opprint{ia}\par
+ Decimal part: \opprint{da}
+\end{SideBySideExample}
+
+Six macros allow to write or read a figure of a number. You can read
+or read a figure according to its place in the whole number, or in the
+integer part, or in the decimal part. Figures for whole number and for
+decimal part are numbered from right to left, figures for integer part
+are numbered from left to right. For instance, with the number
+1234.56789, the second figure is 8, the second figure of the integer
+part is 3, and the second figure of the decimal part is 6. It is now
+easy to guess the rôle of the six next macros:
+\begin{itemize}
+\item \parameter{opgetdigit} ;
+\item \parameter{opsetdigit} ;
+\item \parameter{opgetintegerdigit} ;
+\item \parameter{opsetintegerdigit} ;
+\item \parameter{opgetdecimaldigit} ;
+\item \parameter{opsetdecimaldigit} ;
+\end{itemize}
+Syntax is the same for these macros. The first argument is the
+processed number (reading or writting), the second one is the index of
+te figure, and the third one is the variable name which hold the
+result (figure read or changed number). If index is out of the range,
+the reading macros give \texttt{0} as result and writing macros
+extend the number in order to reach this index (for that, zero will be
+created in new slots).
+
+\section{Comparisons}
+\label{sec:Comparaisons}
+When you want complex macros, often you need to realize tests. For
+that, \package{xlop} gives the macro \macro{opcmp}. The two
+arguments are numbers and this macro setup the tests \macro{ifopgt},
+\macro{ifopge}, \macro{ifople}, \macro{ifoplt}, \macro{ifopeq}, and
+\macro{ifopneq} to indicate that first operand is greater, greater or
+equal, less or equal, less, equal, or different to the second operand
+respectively.
+
+For technical reasons, \package{xlop} give global definitions for the
+six tests above. Then, they are not protected by groups. Since these
+tests are used by many \package{xlop} macros, you must \emph{always}
+use tests \verb+\ifop...+ immediately after \macro{opcmp}, or, at
+least, before any use of a \package{xlop} macro. Otherwise, there will
+be bugs hard to fix!
+
+Let's resume the hour display macro see at
+section~\ref{sec:Entree-sorties}. But now, we check if argument is
+between 0 (include) and 1440 (exclude), then we process tests in order
+to know if ``hour'' is plural or not, as for ``minute''.
+
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\hour[1]{%
+ \opcmp{#1}{0}\ifopge
+ \opcmp{#1}{1440}\ifoplt
+ \opidiv*{#1}{60}{h}{m}%
+ \opprint{h} hour%
+ \opcmp{h}{1}\ifopgt
+ s%
+ \fi
+ \opcmp{m}{0}\ifopneq
+ \space\opprint{m} minute%
+ \opcmp{m}{1}\ifopgt
+ s%
+ \fi
+ \fi
+ \fi\fi
+ }
+ \hour{60} -- \hour{1080} -- \hour{1081} -- \hour{1082}
+\end{CenterExample}
+
+\section{Advanced Operations}
+\label{sec:Operations evoluees}
+The macros left to be examined are either internal macros and which it
+will be a shame to keep private , or macro asked for users.
+
+Internal macros are \macro{opgcd}\index{gcd} which gives gcd of two
+numbers and macro \macro{opdivperiod}\index{division!period} which
+gives the period length of quotient of two numbers. For efficiency
+reason, these macros don't use \package{xlop} number, they rather use
+numbers directly understand by \TeX{}. There are two consequences: the
+numbers can't be greater than \texttt{2147483647} for \macro{opgcd};
+it can't be greater than \texttt{214748364} for
+\macro{opdivperiod}. A warning is displayed for an overflow. Result is
+put in the third parameter.
+
+There is also some checks on the two first parameters: a gcd must not
+have null argument; length of period can't be processed with null
+quotient. Futhermore, if an argument is a non integer number, only the
+integer part will be take account.
+\begin{SideBySideExample}
+ \opcopy{5376}{a}%
+ \opcopy{2304}{b}%
+ \opgcd{a}{b}{gcd(ab)}%
+ $\gcd(\opprint{a},\opprint{b}) =
+ \opprint{gcd(ab)}$
+\end{SideBySideExample}
+You can play and find long period of divisions. Without going into
+mathematical details, square of prime numbers are good choices. For
+instance with $257^2=66049$ you obtain:
+\begin{SideBySideExample}
+ \opdivperiod{1}{66049}{p}%
+ $\frac{1}{66049}$ has a period
+ of length $\opprint{p}$.
+\end{SideBySideExample}
+
+With macros \macro{opcastingoutnines}\index{casting out of nines} and
+\macro{opcastingoutelevens}\index{casting out of elevens} you can
+build casting out of nines and casting out of elevens. \package{xlop}
+don't typeset directly these ``operations'' since they need diagonal
+rules, and then, need some particular packages. In fact, macro
+\macro{opcastingoutnines} calculates the sum modulo~9 of first
+argument digits and put the result in second argument. Macro
+\macro{opcastingoutelevens} calculates the sum modulo~11 of the even
+rank digits of first argument, calculates the sum moldulo~11 of the
+odd rank digits of first argument, and calculates the difference of
+these two sums.
+\begin{SideBySideExample}
+ \newcommand\castingoutnines[3]{%
+ \opcastingoutnines{#1}{cna}%
+ \opcastingoutnines{#2}{cnb}%
+ \opmul*{cna}{cnb}{cna*cnb}
+ \opcastingoutnines{cna*cnb}{cna*cnb}%
+ \opcastingoutnines{#3}{cn(a*b)}%
+ \begin{pspicture}(-3.5ex,-3.5ex)%
+ (3.5ex,3.5ex)
+ \psline(-3.5ex,-3.5ex)(3.5ex,3.5ex)
+ \psline(-3.5ex,3.5ex)(3.5ex,-3.5ex)
+ \rput(-2.75ex,0){\opprint{cna}}
+ \rput(2.75ex,0){\opprint{cnb}}
+ \rput(0,2.75ex){\opprint{cna*cnb}}
+ \rput(0,-2.75ex){\opprint{cn(a*b)}}
+ \end{pspicture}
+ }
+ \castingoutnines{157}{317}{49669}
+\end{SideBySideExample}
+In passing, this example shows that $157\times317\neq49669$! The right
+operation is \opmul[style=text]{157}{317}.
+
+The two next macros are very simple. We have \macro{opneg} which
+calculates the opposite of its first argument and store it in the
+variable indicated by the second argument. We have also \macro{opabs}
+which does the same with absolute value.
+
+Macro \macro{oppower} calculates integer powers of numbers. This macro
+has three parameters. The third one store the first argument to the
+power of the second argument. When the first argument is zero: if the
+second argument is zero, result is~1; if the second argument is
+positive, result is~0; if the second argument is negative, there is an
+error. There isn't any limitation on first parameter. This leads to
+some problems, for instance:
+\begin{CenterExample}[xrightmargin=0pt]
+ \opcopy{0.8}{a}\opcopy{-17}{n}%
+ \oppower{a}{n}{r}%
+ $\opprint{a}^{\opprint{n}} = \opprint{r}$
+\end{CenterExample}
+With $0.7$ rather than $0.8$, problem is worse:
+\begin{CenterExample}[xrightmargin=0pt]
+ \opcopy{0.7}{a}\opcopy{-8}{n}%
+ \oppower{a}{n}{r}%
+ \opdecimalwidth{r}{dr}
+ $\opprint{a}^{\opprint{n}}$ has \opprint{dr}
+ figures after dot.
+\end{CenterExample}
+In fact, when exponent is negative, \emph{first} \package{xlop}
+calulates inverse of the number and \emph{after that}, it calculates
+the power with opposite of the exponent. In this example, if we had
+left $-17$ rather than $-8$, then there will be a capacity overflow
+capacity of \TeX{}.
+
+Three macros allow a control about precision. They allow to
+approximate a number giving the rank of the approximation. There are
+\macro{opfloor}, \macro{opceil}, and \macro{opround}. They need three
+parameters which are (in order): start number, rank of approximation,
+variable name to store the result.
+
+Rank is an integer value giving number of digits after decimal
+separator which must be present. If this rank is negative,
+approximation will be done before the decimal separator. If rank
+is positive and indicates more digits than decimal part has, then
+zeros will be added. If rank is negative and indicates more digits
+than integer part has, then approximation will be locked in order to
+give the first digit of the number at least.
+
+Here is a summary table which allow to understand how these macros
+work.
+\begin{center}
+ \opcopy{3838.3838}{a}
+ \begin{tabular}{|r|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{\texttt{\textbackslash
+ op\ldots{}\{3838.3838\}\{n\}\{r\}}}}\\\hline
+ \multicolumn{1}{|c|}{\textbf{\texttt{n}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{floor}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{ceil}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{round}}} \\\hline
+ \opcopy{6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{4}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{3}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{0}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-1}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-2}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\\hline
+ \end{tabular}
+ \opcopy{-3838.3838}{a}
+ \begin{tabular}{|r|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{\texttt{\textbackslash
+ op\ldots{}\{-3838.3838\}\{n\}\{r\}}}}\\\hline
+ \multicolumn{1}{|c|}{\textbf{\texttt{n}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{floor}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{ceil}}} &
+ \multicolumn{1}{c|}{\textbf{\texttt{round}}} \\\hline
+ \opcopy{6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{4}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{3}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{0}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-1}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-2}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\
+ \opcopy{-6}{n}$\opprint{n}$ &
+ \opfloor{a}{n}{r}$\opprint{r}$ &
+ \opceil{a}{n}{r}$\opprint{r}$ &
+ \opround{a}{n}{r}$\opprint{r}$ \\\hline
+ \end{tabular}
+\end{center}
+
+\index{square root}
+With version~0.26 comes the square root operation:
+\macro{opsqrt}. This macro has not the same syntax as the other
+arithmetic macros since there is no starred version. In fact, there is
+a way to display a processing of square root but it's really not
+current. I'm pretty old and my grandfather told me that he saw
+this method when he was young! Therefore, there is an \macro{opgfsqrt}
+macro to display the operation (``gf'' for grandfather).
+
+Let us see the first macro: the one which calculates the square root
+and store the result in a xlop variable:
+\begin{SideBySideExample}
+ \opsqrt{2}{sqrt2}
+ $\sqrt{2}\approx\opprint{sqrt2}$
+\end{SideBySideExample}
+This macro shares the parameter \parameter{maxdivstep} with division
+macros. For instance:
+\begin{SideBySideExample}
+ \opsqrt[maxdivstep=15]{2}{sqrt2}
+ $\sqrt{2}\approx\opprint{sqrt2}$
+\end{SideBySideExample}
+
+For ``grandfather'' display, I have not the energy to explain the
+processus. It's based on remarkable identity
+$(a+b)^2=a^2+2ab+b^2$. Thanks to Jean-Michel Sarlat who had taken time
+to explain this method in order that I can write it for
+\package{xlop}!
+
+Here is an example for square root of 15:
+\begin{CenterExample}
+ \opgfsqrt[maxdivstep=5]{15}
+\end{CenterExample}
+This method is horrible. It's horrible for human being. It's horrible
+for computer. For instance, the real operation isn't make that way:
+it uses Heron method.
+
+\index{complex expression|(}
+The very last macro we have to study is \macro{opexpr}. It calculates
+a complex expression. This macro needs two parameters: the first one
+is the expression in infix form (the natural one for human), the
+second one is the variable name where the result is stored.
+
+Initially, expression must have been polish one (for instance,
+notation used on old HP calculator, or PostScript language), but
+another work with Christophe Jorssen has given the actual form for
+expression in \package{xlop}, more pleasant for users.
+
+Formulas accept usual arithmetic operators \texttt{+}, \texttt{-},
+\texttt{*}, and \texttt{/}. They accept also \texttt{:} operator for
+euclidian division, and \verb+^+ for power. The \texttt{-} operator
+has both rôle of substraction and unary operator for opposite. The
+\texttt{+} has also these rôles, here the unary operator do\dots{}
+nothing! Operands are written in decimal form or \emph{via} variable
+name. However, \macro{opexpr} introduces a restriction about variable
+name since variable names must be different to function names
+recognized by \macro{opexpr}. Accessible functions are:
+\begin{itemize}
+\item \texttt{abs(a)} ;
+\item \texttt{ceil(a,i)} ;
+\item \texttt{decimal(a)} ;
+\item \texttt{floor(a,i)} ;
+\item \texttt{gcd(a,b)} ;
+\item \texttt{integer(a)} ;
+\item \texttt{mod(a,b)} gives result of \texttt{a} modulo
+ \texttt{b} ;
+\item \texttt{rest(a,b)} gives remainder of \texttt{a} divide by
+ \texttt{b} (difference between remainider and modulo is the same as
+ between non euclidian division and euclidian division);
+\item \texttt{round(a,i)}.
+\end{itemize}
+where functions that aren't listed above ask the matching macros.
+(function \texttt{xxx} calls macro \verb+\opxxx+) For functions
+\texttt{ceil}, \texttt{floor}, and \texttt{round}, the number
+\texttt{i} indicates rank for approximation.
+
+Macro \macro{opexpr} accept optional argument since it can realize
+division which can be controlled
+by \parameter{maxdivstep},\parameter{safedivstep},
+and \parameter{period} parameters. Our first example is quite basic:
+\begin{CenterExample}[xrightmargin=0pt]
+ \opexpr{3--gcd(15*17,25*27)*2}{r}%
+ $3--\gcd(15\times17,25\times27)\times2 = \opprint{r}$
+\end{CenterExample}
+
+Here is another example that shows that datas can come from a macro:
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\try{2}%
+ \opexpr{\try+1/
+ (\try+1/
+ (\try+1/
+ (\try+1/
+ (\try+1/
+ (\try)))))}{r}
+ Continued fraction of base $u_n=2$ equal \opprint{r} at rank~5.
+\end{CenterExample}
+\index{complex expression|)}
+
+\appendix
+\chapter{Short Summary}
+\label{chap:Aide-mémoire}
+\section{Compilation times}
+\label{sec:Temps de compilation}
+Compilation times was measured on a computer with
+processor Pentium II 600\,MHz, RAM 256\,MB, on linux system (Debian
+woody).\footnote{In fact, these measures was done in 2004, when the
+ 0.2 version was released. Author is somewhere lasy and he doesn't
+ measure with his new computer (more efficient)!}. The principle is
+to do a minimal file \texttt{.tex}. The general canvas is:
+\begin{verbatim}
+ \input xlop
+ \count255=0
+ \loop
+ \ifnum\count255<1000
+ <operation to test>
+ \advance\count255 by1
+ \repeat
+ \bye
+\end{verbatim}
+Compilation time with \verb+<operation to test>+ empty was substract
+from the others test. Only the user time was take account. Results are
+given in millisecond and should be read with great precautions.
+
+\index{compilation time|(}\index{time (calculation)|(}%
+Next table gives operation times in milliseconds. Operands used had
+decimal notation but some trails with variable has shown that times
+was very closed.
+
+First line indicates the numbers of digits for both operands.
+Operands were build like this:
+\begin{itemize}
+\item $\mathrm{A} = 1$ et $\mathrm{B} = 9$ for one digit;
+\item $\mathrm{A} = 12$ et $\mathrm{B} = 98$ for two digits;
+\item $\mathrm{A} = 123$ et $\mathrm{B} = 987$ for three digits;
+\item $\mathrm{A} = 12345$ et $\mathrm{B} = 98765$ for five digits;
+\item $\mathrm{A} = 1234567890$ et $\mathrm{B} = 9876543210$ for ten
+ digits;
+\item $\mathrm{A} = 12345678901234567890$ et $\mathrm{B} =
+ 98765432109876543210$ for twenty digits;
+\end{itemize}
+Here is results, some comments follow:
+
+\bigskip\noindent\hbox to\linewidth{\hss
+ \begin{tabular}{|r|*{6}{l|}}
+ \cline{2-7}
+ \multicolumn{1}{l|}{} &
+ \multicolumn{1}{c|}{1} &
+ \multicolumn{1}{c|}{2} &
+ \multicolumn{1}{c|}{3} &
+ \multicolumn{1}{c|}{5} &
+ \multicolumn{1}{c|}{10} &
+ \multicolumn{1}{c|}{20} \\\hline
+ \verb+\opadd*{A}{B}{r}+ &
+ 1.1 & 1.4 & 1.6 & 2.1 & 3.3 & 5.8 \\\cline{2-7}
+ \verb+\opadd*{B}{A}{r}+ &
+ 1.1 & 1.4 & 1.6 & 2.1 & 3.3 & 5.8 \\\hline
+ \verb+\opsub*{A}{B}{r}+ &
+ 1.7 & 2.1 & 2.4 & 3.0 & 4.8 & 8.3 \\\cline{2-7}
+ \verb+\opsub*{B}{A}{r}+ &
+ 1.5 & 1.7 & 2.0 & 2.6 & 4.0 & 7.0 \\\hline
+ \verb+\opmul*{A}{B}{r}+ &
+ 4.6 & 6.3 & 8.2 & 12.8 & 29.9 & 87.0 \\\cline{2-7}
+ \verb+\opmul*{B}{A}{r}+ &
+ 5.0 & 6.6 & 8.5 & 13.2 & 30.3 & 87.8 \\\hline
+ \verb+\opdiv*{A}{B}{q}{r}+ &
+ 46.4 & 53.8 & 53.8 & 64.3 & 85.8 & 124.7 \\\cline{2-7}
+ \verb+\opdiv*{B}{A}{q}{r}+ &
+ 12.4 & 48.9 & 55.7 & 58.6 & 72.8 & 111.0 \\\hline
+ \verb+\opdiv*[maxdivstep=5]{A}{B}{q}{r}+ &
+ 26.8 & 30.0 & 32.6 & 37.6 & 49.5 & 73.5 \\\cline{2-7}
+ \verb+\opdiv*[maxdivstep=5]{B}{A}{q}{r}+ &
+ 12.4 & 29.1 & 32.6 & 35.2 & 43.3 & 67.9 \\\hline
+ \verb+\opidiv*{A}{B}{q}{r}+ &
+ 10.8 & 12.2 & 13.5 & 16.0 & 22.3 & 35.5 \\\cline{2-7}
+ \verb+\opidiv*{B}{A}{q}{r}+ &
+ 11.6 & 13.0 & 14.2 & 16.6 & 23.0 & 36.7 \\\hline
+ \verb+\opidiv*{A}{2}{q}{r}+ &
+ 10.7 & 12.0 & 15.3 & 22.3 & 42.9 & 83.0 \\\hline
+ \end{tabular}
+ \hss
+}
+\par\bigskip
+It is normal that inversion of operands don't have sensible influence
+for addition. Then, it could be strange that there is influence for
+substraction. In fact, when the second operand is bigger than the
+second one, there is additional process (double inversion, operation
+on the sign of the result).
+
+It is normal that division time is greater than the multiplication
+one. It could be abnormal that division seems catch up! In fact, the
+multiplication complexity grows quickly with the operand length. In
+the other hand, division complexity is stopped
+by \parameter{maxdivstep} parameter. It is clear on example where
+there is only five steps.
+
+Some results seems odd. For instance \verb+\opdiv*{9}{1}{q}{r}+ is
+very fast. These is due to the one digit quotient.
+\verb+\opdiv*{123}{987}{q}{r}+, even more odd, is rather fast. Here,
+explanation is quite subtle: this is due to many zeros in the
+quotient.
+
+When operands have comparable length, euclidian division is much
+faster than non euclidian one. This is because quotient has few
+digits (only one for all the numbers \texttt{A} and \texttt{B}). The
+last line of the table is more relevant for this operation time.
+
+All these remarks are written to put the emphasis on the difficulty to
+evaluate the compilation time: it depends on too many parameters. On
+the other hand, this table give a pretty good idea of what can be
+expected.
+\index{compilation time|)}\index{time (calculation)|)}%
+
+\newpage
+\section{Macro List}
+\label{sec:Liste des macros}
+\index{macros!table of|(}%
+\noindent\begin{longtable}{|l|p{6.3cm}|}
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Macro}} &
+ \multicolumn{1}{c|}{\textbf{Description}} \\\hline\hline
+ \endfirsthead
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Macro}} &
+ \multicolumn{1}{c|}{\textbf{Description}} \\\hline\hline
+ \endhead
+ \hline
+ \multicolumn{2}{|c|}{$\ldots$ to be continued $\ldots$}\\
+ \hline
+ \endfoot
+ \hline
+ \endlastfoot
+ \verb+\opabs{n}{N}+ &
+ \verb+N+ stores the absolute value of \verb+n+. \\\hline
+ \verb+\opadd[P]{n1}{n2}+ &
+ Displays result of \verb-n1+n2-. \\\hline
+ \verb+\opadd*{n1}{n2}{N}+ &
+ Calcules \verb-n1+n2- and put result in \verb+N+. \\\hline
+ \verb+\opcastingoutelevens{n}{N}+ &
+ Calcules difference (modulo 11) of sum of rank odd digits and sum of
+ rank even digits of \verb+n+ and put the result in \verb+N+.\\\hline
+ \verb+\opcastingoutnines{n}{N}+. &
+ Calcules sum modulo 9 of digits of \verb+n+ and put result in
+ \verb+N+. \\\hline
+ \verb+\opceil{n}{T}{N}+ &
+ Places in \verb+N+ the approximation (ceiling) of \verb+n+ to rank
+ \verb+T+. \\\hline
+ \verb+\opcmp{n1}{n2}+ &
+ Compares numbers \verb+n1+ and \verb+n2+ and setup the tests
+ \verb+\ifopeq+, \verb+\ifopneq+, \verb+\ifopgt+, \verb+\ifopge+,
+ \verb+\ifople+ et \verb+\ifoplt+. \\\hline
+ \verb+\opcopy{n}{N}+ &
+ Copy number \verb+n+ in \verb+N+. \\\hline
+ \verb+\opdecimal{n}{N}+ &
+ Copy decimal part (positive integer number) of \verb+n+ in
+ \verb+N+. \\\hline
+ \verb+\opdecimalwidth{n}{N}+ &
+ \verb+N+ stores the width of decimal part of number \verb+n+.
+ \\\hline
+ \verb+\opdisplay[P]{S}{n}+ &
+ Display number \verb+n+ width style \verb+S+ puting each figure in a
+ box which has a width of \verb+\opcolumnwidth+ and a height of
+ \verb+\oplineheight+. \\\hline
+ \verb+\opdiv[P]{n1}{n2}+ &
+ Display result of n1/n2. \\\hline
+ \verb+\opdiv*[P]{n1}{n2}{N1}{N2}+ &
+ Calculates \verb+n1/n2+, put the quotient in \verb+N1+ and the
+ remainder in \verb+N2+. \\\hline
+ \verb+\opdivperiod{T1}{T2}{N}+ &
+ Calculates length of period of \verb+T1+ divide by \verb+T2+ and put
+ the result in \verb+N+. \\\hline
+ \verb+\opexport[P]{n}\cmd+ &
+ Copy number \verb+n+ in macro \verb+\cmd+. \\\hline
+ \verb+\opexpr[P]{F}{N}+ &
+ Evaluates formula \texttt{F} and put the final result in
+ \texttt{N}. \\\hline
+ \verb+\opfloor{n}{T}{N}+ &
+ Put in \verb+N+ the apprimation (floor) of \verb+n+ at rank
+ \verb+T+. \\\hline
+ \verb+\opgcd{T1}{T2}{N}+ &
+ Calculates gcd of \verb+T1+ and \verb+T2+ and put result in
+ \verb+N+. \\\hline
+ \verb+\opgetdecimaldigit{n}{T}{N}+ &
+ Build the number \verb+N+ with the only digit in slot
+ \verb+T+ of decimal part of \verb+n+. \\\hline
+ \verb+\opgetdigit{n}{T}{N}+ &
+ Build the number \verb+N+ with the only digit in slot
+ \verb+T+ of number \verb+n+. \\\hline
+ \verb+\opgetintegerdigit{n}{T}{N}+ &
+ Build the number \verb+N+ width the only digit in slot
+ \verb+T+ of integer part of \verb+n+. \\\hline
+ \verb+\opgfsqrt{n}+ &
+ Display the old timed way to calculate a square root of
+ \verb+n+. \\\hline
+ \verb+\ophline(T1,T2){T3}+ &
+ Draw a horizontal rule of length \verb+T3+, of thickness
+ \verb+hrulewidth+, and which begin at \verb+(T1,T2)+ in relation to
+ reference point. \\\hline
+ \verb+\opidiv[P]{n1}{n2}+ &
+ Display the result of \verb+n1/n2+. (euclidian division, that is,
+ with integer division) \\\hline
+ \verb+\opidiv*{n1}{n2}{N1}{N2}+ &
+ Calculates \verb+n1/n2+ (euclidian division), put quotient
+ (integer) in \verb+N1+ and remainder (between 0 (include) and
+ \verb+|n2|+ (exclude)) in \verb+N2+. \\\hline
+ \verb+\opinteger{n}{N}+ &
+ Copy integer part (positive integer number) of \verb+n+
+ in \verb+N+. \\\hline
+ \verb+\opintegerwidth{n}{N}+ &
+ Number \verb+N+ stores the width of integer part of number \verb+n+.
+ \\\hline
+ \verb+\oplput(T1,T2){<object>}+ &
+ Put \verb+<object>+ to the right of the point with coordinates
+ \verb+(T1,T2)+ in relation to reference point. \\\hline
+ \verb+\opmul[P]{n1}{n2}+ &
+ Display result of \verb+n1*n2+. \\\hline
+ \verb+\opmul*{n1}{n2}{N}+ &
+ Calculates \verb+n1*n2+ and put the result in \verb+N+. \\\hline
+ \verb+\opneg{n}{N}+ &
+ Number \verb+N+ stores opposite of \verb+n+. \\\hline
+ \verb+\oppower{n}{T}{N}+ &
+ Calculates \verb+n+ to the power of \verb+T+ and put the result in
+ \verb+N+. \\\hline
+ \verb+\opprint{n}+ &
+ Display number \verb+n+ in a direct way. \\\hline
+ \verb+\opround{n}{T}{N}+ &
+ Put in \verb+N+ the approximation of \verb+n+ at rank \verb+T+.
+ \\\hline
+ \verb+\oprput(T1,T2){<object>}+ &
+ Put \verb+<object>+ to the left of the point with coordinates
+ \verb+(T1,T2)+ in relation to reference point. \\\hline
+ \verb+\opset{L}+ &
+ Allocates globally \package{xlop} parameters given in the list
+ \verb+L+. \\\hline
+ \verb+\opsetdecimaldigit{n}{T}{N}+ &
+ Modify the digit of rank \verb+T+ in decimal part of \verb+N+ in
+ order to have the value \verb+n+ for this digit. \\\hline
+ \verb+\opsetdigit{n}{T}{N}+ &
+ Modify the digit of rank \verb+T+ of \verb+N+ in
+ order to have the value \verb+n+ for this digit. \\\hline
+ \verb+\opsetintegerdigit{n}{T}{N}+ &
+ Modify the digit of rank \verb+T+ in integer part of \verb+N+ in
+ order to have the value \verb+n+ for this digit. \\\hline
+ \verb+\opsqrt{n}{N}+ & Put square root of \verb+n+ in
+ \verb+N+. \\\hline
+ \verb+\opsub[P]{n1}{n2}+ &
+ Display result of \verb+n1-n2+. \\\hline
+ \verb+\opsub*{n1}{n2}{N}+ &
+ Calculates \verb+n1-n2+ and put the result in \verb+N+. \\\hline
+ \verb+\opunzero{N}+ &
+ Delete non-significant zeros of \verb+N+. \\\hline
+ \verb+\opvline(T1,T2){T3}+ &
+ Draw a vertical ruleof length \verb+T3+, of thickness
+ \verb+hrulewidth+ and which begin at \verb+(T1,T2)+ in relation to
+ reference point. \\\hline
+ \verb+\opwidth{n}{N}+ &
+ Number \verb+N+ stores number of digits of number \verb+n+. \\\hline
+\end{longtable}\index{macros!table of|)}
+
+In this table, parameters:
+\begin{itemize}
+\item \texttt{n} and \texttt{ni} (where \texttt{i} is an index)
+ indicate that parameter must be a number given in decimal form or a
+ variable name;
+\item \texttt{N} and \texttt{Ni} (where \texttt{i} is an index)
+ indicate that parameter must be a number given in decimal form or a
+ variable name;
+\item \texttt{[P]} indicates that the macro accept an optional
+ parameter which allow to modify parameter of \package{xlop};
+\item \texttt{T} and \texttt{Ti} (where \texttt{i} is an index)
+ indicate that parameter must be a number given in decimal form or a
+ variable name but must be less than numbers acceptable by \TeX{},
+ that is, $-2147483648 \le \mathtt{T} \le 2147483647$.
+\end{itemize}
+
+\section{Parameter list}
+\label{sec:Liste des parametres}
+\index{parameter@parameter!table of|(}%
+\begingroup
+\advance\hoffset by-1.75cm \advance\linewidth by1.75cm
+\begin{longtable}{|l|l|p{7cm}|}
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Parameter}} &
+ \multicolumn{1}{c|}{\textbf{Default}} &
+ \multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline
+ \endfirsthead
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Parameter}} &
+ \multicolumn{1}{c|}{\textbf{Default}} &
+ \multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline
+ \endhead
+ \hline
+ \multicolumn{3}{|c|}{$\ldots$ to be continued $\ldots$}\\
+ \hline
+ \endfoot
+ \hline
+ \endlastfoot
+ \verb+afterperiodsymbol+ &
+ \verb+$\ldots$+ &
+ Symbol used after a period of a division. \\\hline
+ \verb+approxsymbol+ &
+ \verb+$\approx$+ &
+ Symbol used as approximation relation in inline operations. \\\hline
+ \verb+equalsymbol+ &
+ \verb+{$=$}+ &
+ Symbol used as equality relation in inline operations. \\\hline
+ \verb+addsymbol+ &
+ \verb-$+$- &
+ Symbol used as addition operator. \\\hline
+ \verb+subsymbol+ &
+ \verb+$-$+ &
+ Symbol used as substraction operator. \\\hline
+ \verb+mulsymbol+ &
+ \verb+$\times$+ &
+ Symbol used as multiplication operator. \\\hline
+ \verb+divsymbol+ &
+ \verb+$\div$+ &
+ Symbol used as multiplication operator for inline
+ operations. \\\hline
+ \verb+decimalsepsymbol+ &
+ \verb+.+ &
+ Symbol used as decimal separator. \\\hline
+ \verb+strikedecimalsepsymbol+ &
+ &
+ Symbol used as decimal separator moved in dividend and divisor for
+ display division. \\\hline
+ \verb+shiftintermediarysymbol+ &
+ \verb+$\cdot$+ &
+ Symbol used to show intermediary numbers shifting for display
+ multiplication. \\\hline
+ \verb+displayshiftintermediary+ &
+ \verb+shift+ &
+ Indicates that the shifting character for multiplications will be
+ displayed only for additional shifting (value \verb+shift+), for
+ all the shifting (value \verb+all+), or never (value
+ \verb+none+). \\\hline
+ \verb+voperation+ &
+ \verb+bottom+ &
+ Vertical alignement for displayed operation. The value \verb+bottom+
+ indicates that the bottom of operation will be aligned with
+ baseline. The value \verb+top+ indicates that the top of operation
+ will be aligned with baseline. The value \verb+center+ indicates
+ that operation will be verticaly centred with baseline. \\\hline
+ \verb+voperator+ &
+ \verb+center+ &
+ Vertical alignement for operators in displayed operations. The value
+ \verb+top+ put operator at the level of first operand. The value
+ \verb+bottom+ put operator at the level of second operand. The value
+ \verb+center+ put operator between operands. \\\hline
+ \verb+hfactor+ &
+ \verb+decimal+ &
+ Sort of operands alignement for displayed operation. The value
+ \verb+decimal+ indicates an alignement on decimal separator. The
+ value \verb+right+ indicates a flushright alignement. \\\hline
+ \verb+vruleperiod+ &
+ \verb+-0.2+ &
+ Vertical position of rule which indicates period of quotient for
+ inline division. \\\hline
+ \verb+dividendbridge+ &
+ \verb+false+ &
+ Indicates if there is a ``bridge'' above dividend. \\\hline
+ \verb+shiftdecimalsep+ &
+ \verb+both+ &
+ Indicates how shift decimal separator into operands for a displayed
+ division. The value \verb+both+ indicates that shifting are made on
+ both divisor and dividend in order to make integer numbers. The
+ value \verb+divisor+ indicates that the shifting must give an
+ integer divisor. The value \verb+none+ indicates that there is no
+ shifting. \\\hline
+ \verb+maxdivstep+ &
+ \verb+10+ &
+ Maximal number of steps in division or in square root
+ operation. \\\hline
+ \verb+safedivstep+ &
+ \verb+50+ &
+ Maximal number of steps in division when there is a period to
+ reach. \\\hline
+ \verb+period+ &
+ \verb+false+ &
+ Indicates if division must be stoped when a whole period is
+ reached. \\\hline
+ \verb+deletezero+ &
+ \verb+true+ &
+ Indicates that non-significant zeros are displayed (\verb+false+) or
+ deleted (\verb+true+). \\\hline
+ \verb+carryadd+ &
+ \verb+true+ &
+ Indicates that carries are displayed (\verb+true+) for displayed
+ additions. \\\hline
+ \verb+carrysub+ &
+ \verb+false+ &
+ Indicates that carries are displayed (\verb+true+) for displayed
+ substractions. \\\hline
+ \verb+offsetcarry+ &
+ \verb+-0.35+ &
+ Horizontal offset for carries into displayed substractions. \\\hline
+ \verb+style+ &
+ \verb+display+ &
+ Indicates tha operation are inline (\verb+text+) or displayed
+ (\verb+display+). \\\hline
+ \verb+displayintermediary+ &
+ \verb+nonzero+ &
+ Indicates that all intermediary results are displayed (\verb+all+),
+ only non null ones are displayed (\verb+nonzero+), or any
+ intermediary result isn't displayed into displayed multiplications
+ and divisions. \\\hline
+ \verb+lastcarry+ &
+ \verb+false+ &
+ Indicates that carry with no figure just below it must be displayed
+ (\verb+true+), or not (\verb+false+). \\\hline
+ \verb+parenthesisnegative+ &
+ \verb+none+ &
+ Behavior to display negative numbers in inline operations. The value
+ \verb+none+ displays them without parenthesis. The value \verb+all+
+ displays them always with parenthesis. The value \verb+last+ display
+ parenthesis except for first operand of an expression. \\\hline
+ \verb+columnwidth+ &
+ \verb+2ex+ &
+ With of box for one figure. \\\hline
+ \verb+lineheight+ &
+ \verb+\baselineskip+ &
+ Height of box for one figure. \\\hline
+ \verb+decimalsepwidth+ &
+ \verb+0pt+ &
+ Width of box that hold the decimal separator. \\\hline
+ \verb+decimalsepoffset+ &
+ \verb+0pt+ &
+ Horizontal offset for decimal separator. \\\hline
+ \verb+hrulewidth+ &
+ \verb+0.4pt+ &
+ Thickness of horizontal rules. \\\hline
+ \verb+vrulewidth+ &
+ \verb+0.4pt+ &
+ Thickness of vertical rules. \\\hline
+ \verb+behaviorsub+ &
+ \verb+silent+ &
+ \package{xlop} behavior for an ``impossible'' substraction, that is,
+ a substraction with two positive operands, the second greater
+ than the first one. The value \verb+silent+ does operation swapping
+ the two operands in a slient way. With the value \verb+warning+,
+ there are also a swapping but \package{xlop} gives a warning. The
+ value \verb+error+ display an error message and operation isn't
+ processed. \\\hline
+ \verb+country+ &
+ \verb+french+ &
+ Indicates the displayed operation behavior depending of
+ contry. Package \package{xlop} put forward only \verb+french+,
+ \verb+american+, and \verb+russian+ but these different ways to
+ display operations aren't encoded in version
+ \fileversion{}. \\\hline
+ \verb+operandstyle+ &
+ &
+ Style for operands. \\\hline
+ \verb+resultstyle+ &
+ &
+ Style for results. \\\hline
+ \verb+remainderstyle+ &
+ &
+ Style for remainders. \\\hline
+ \verb+intermediarystyle+ &
+ &
+ Style for intermediary results (intermediary numbers in
+ multiplication and number to substract in division when successive
+ substractions are displayed). \\\hline
+ \verb+carrystyle+ &
+ \verb+\scriptsize+ &
+ Style for carries. The default value when compilation are made
+ without \LaTeX{} is \verb+\sevenrm+. \\\hline
+\end{longtable}\index{parameter@parameter!table of|)}
+\endgroup
+
+\chapter{Tricks}
+\label{chap:Trucs et astuces}
+\section{\package{xlop} vs. \package{calc} and \package{fp}}
+You could believe that \package{xlop} can replace package such
+\package{calc}\index{package!calc}\index{calc} and
+\package{fp}\index{package!fp}\index{fp}. In fact, that is not so
+simple. Obviously \package{xlop} can do complex calculations, on arbitrary
+long numbers but, unlike \package{calc}, it don't allow to process
+directly dimensions. Comparison with \package{fp} is somewhere more
+realistic but remember that \package{xlop} can make memory usage too
+high.
+
+If you want to process calculations on length\index{length}, you can use
+that a dimen register allocation to a counter gives a number which
+correspond to this length with unit \texttt{sp}.
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\getsize[2]{%
+ \dimen0=#1\relax
+ \count255=\dimen0
+ \opcopy{\the\count255}{#2}}
+ \getsize{1pt}{r}$1\,\mathrm{pt}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1pc}{r}$1\,\mathrm{pc}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1in}{r}$1\,\mathrm{in}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1bp}{r}$1\,\mathrm{bp}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1cm}{r}$1\,\mathrm{cm}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1mm}{r}$1\,\mathrm{mm}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1dd}{r}$1\,\mathrm{dd}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1cc}{r}$1\,\mathrm{cc}=\opprint{r}\,\mathrm{sp}$\quad
+ \getsize{1sp}{r}$1\,\mathrm{sp}=\opprint{r}\,\mathrm{sp}$\quad
+\end{CenterExample}
+However, don't forget that the \package{xlop} main goal is to
+\emph{display} operations.
+
+With this \macro{getsize} macro, it is possible to realise
+calculations on length.
+\begin{SideBySideExample}
+ \newcommand\getsize[2]{%
+ \dimen0=#1\relax
+ \count255=\dimen0
+ \opcopy{\the\count255}{#2}}
+ \getsize{1cm}{u}%
+ \getsize{\textwidth}{w}%
+ \getsize{\textheight}{h}%
+ \opexpr{w*h/u^2}{S}%
+ \opround{S}{2}{S}%
+ Surface of spread is
+ \opprint{S}\,$\mathrm{cm}^2$
+\end{SideBySideExample}
+
+\section{Complex Operations}
+\label{sec:Creation d'operations complexes}
+Use of \package{xlop} macros with loop of \TeX{} allow to create
+operations as you want. Here, we give only two examples. The first one
+can express a number as a product of prime factors, the second one is
+a general calculation for continued
+fraction.\index{number!prime}\index{loop|(}%
+\index{product of prime factors}
+\begin{Verbatim}[xrightmargin=0pt]
+ \newcount\primeindex
+ \newcount\tryindex
+ \newif\ifprime
+ \newif\ifagain
+ \newcommand\getprime[1]{%
+ \opcopy{2}{P0}%
+ \opcopy{3}{P1}%
+ \opcopy{5}{try}
+ \primeindex=2
+ \loop
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{2}{try}%
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{4}{try}%
+ \fi
+ \repeat
+ }
+ \newcommand\testprimality{%
+ \begingroup
+ \againtrue
+ \global\primetrue
+ \tryindex=0
+ \loop
+ \opidiv*{try}{P\the\tryindex}{q}{r}%
+ \opcmp{r}{0}%
+ \ifopeq \global\primefalse \againfalse \fi
+ \opcmp{q}{P\the\tryindex}%
+ \ifoplt \againfalse \fi
+ \advance\tryindex by1
+ \ifagain
+ \repeat
+ \endgroup
+ }
+\end{Verbatim}
+\newcount\primeindex
+\newcount\tryindex
+\newif\ifprime
+\newif\ifagain
+\newcommand\getprime[1]{%
+ \opcopy{2}{P0}%
+ \opcopy{3}{P1}%
+ \opcopy{5}{try}
+ \primeindex=2
+ \loop
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{2}{try}%
+ \ifnum\primeindex<#1\relax
+ \testprimality
+ \ifprime
+ \opcopy{try}{P\the\primeindex}%
+ \advance\primeindex by1
+ \fi
+ \opadd*{try}{4}{try}%
+ \fi
+ \repeat
+}
+\newcommand\testprimality{%
+ \begingroup
+ \againtrue
+ \global\primetrue
+ \tryindex=0
+ \loop
+ \opidiv*{try}{P\the\tryindex}{q}{r}%
+ \opcmp{r}{0}%
+ \ifopeq \global\primefalse \againfalse \fi
+ \opcmp{q}{P\the\tryindex}%
+ \ifoplt \againfalse \fi
+ \advance\tryindex by1
+ \ifagain
+ \repeat
+ \endgroup
+}
+
+With this code, we can create a prime numbers list (here the 20~first
+ones).
+\begin{SideBySideExample}
+ \getprime{20}%
+ \opprint{P0}, \opprint{P1}, \ldots,
+ \opprint{P9}, \ldots \opprint{P19}.
+\end{SideBySideExample}
+
+Note that this code is very bad: it is very slow and don't give
+anything against native \TeX{} operations. It is only an educational
+example. Note also that the tricks to put loop into loop with macro
+\verb+\testprimality+ inside a group. \package{xlop} operations give
+global results.\index{global allocation}
+
+Once you have your prime numbers ``table'', you can use it to
+write a number as product of prime number.
+\begin{CenterExample}[xrightmargin=0pt]
+ \newcommand\primedecomp[2][nil]{%
+ \begingroup
+ \opset{#1}%
+ \opcopy{#2}{NbtoDecompose}%
+ \opabs{NbtoDecompose}{NbtoDecompose}%
+ \opinteger{NbtoDecompose}{NbtoDecompose}%
+ \opcmp{NbtoDecompose}{0}%
+ \ifopeq
+ I refuse to factorize zero.
+ \else
+ \setbox1=\hbox{\opdisplay{operandstyle.1}%
+ {NbtoDecompose}}%
+ {\setbox2=\box2{}}%
+ \count255=1
+ \primeindex=0
+ \loop
+ \opcmp{NbtoDecompose}{1}\ifopneq
+ \opidiv*{NbtoDecompose}{P\the\primeindex}{q}{r}%
+ \opcmp{0}{r}\ifopeq
+ \ifvoid2
+ \setbox2=\hbox{%
+ \opdisplay{intermediarystyle.\the\count255}%
+ {P\the\primeindex}}%
+ \else
+ \setbox2=\vtop{%
+ \hbox{\box2}
+ \hbox{%
+ \opdisplay{intermediarystyle.\the\count255}%
+ {P\the\primeindex}}}
+ \fi
+ \opcopy{q}{NbtoDecompose}%
+ \advance\count255 by1
+ \setbox1=\vtop{%
+ \hbox{\box1}
+ \hbox{%
+ \opdisplay{operandstyle.\the\count255}%
+ {NbtoDecompose}}
+ }%
+ \else
+ \advance\primeindex by1
+ \fi
+ \repeat
+ \hbox{\box1
+ \kern0.5\opcolumnwidth
+ \opvline(0,0.75){\the\count255.25}
+ \kern0.5\opcolumnwidth
+ \box2}%
+ \fi
+ \endgroup
+ }
+
+ \getprime{20}%
+ \primedecomp[operandstyle.2=\red,
+ intermediarystyle.2=\red]{252}
+\end{CenterExample}
+Note the use of group for the whole macro in order to protect
+\package{xlop} parameter modifications.%
+\index{parameter!local modification} Note also that void parameter
+aren't allowed. It's not a bug, it's a feature. Author thinks that a
+user who write brackets without anything between these brackets is
+going to make a mistake. To obviate this
+prohibition\index{parameter!void}, there is the particular
+parameter \parameter{nil} which has exactly this rôle.
+\index{loop|)}
+
+Finally, note the trick \verb+{\setbox2=\box2}+ to obtain a void box
+register, and final manipulations to show the vertical rule in a
+easy-to-read way.
+
+The second example allow to calculates a continued fraction like:
+\def\dfrac#1#2{\frac{\displaystyle #1}{\displaystyle #2}}
+\[a_0+\dfrac{1}{a_1+\dfrac{1}{a_2+\dfrac{1}{a_3+\cdots}}}\]
+giving the sequence $a_0,a_1,a_2,a_3,\ldots$ to the macro. This
+example gives fractions corresponding to gold number, and square root
+for~2 and~3.
+\makeatletter
+\begin{CenterExample}[xrightmargin=0pt]
+ \begingroup
+ \long\gdef\continuedfraction#1#2{%
+ \let\@mirror\relax
+ \@for\op@Nb:=#1\do
+ {%
+ \ifx\@mirror\relax
+ \edef\@mirror{\op@Nb}%
+ \else
+ \edef\@mirror{\op@Nb,\@mirror}%
+ \fi
+ }%
+ \let\Op@result\relax
+ \@for\op@Nb:=\@mirror\do
+ {%
+ \ifx\Op@result\relax
+ \opcopy{\op@Nb}{result}%
+ \else
+ \opexpr{\op@Nb+1/result}{result}%
+ \fi
+ }%
+ \opcopy{result}{#2}%
+ }
+ \endgroup
+ \continuedfraction{1,1,1,1,1,1,1,1,1,1,1,1}{r}\opprint{r}\quad
+ \continuedfraction{1,2,2,2,2,2,2,2,2,2,2,2}{r}\opprint{r}\quad
+ \continuedfraction{1,1,2,1,2,1,2,1,2,1,2,1}{r}\opprint{r}
+\end{CenterExample}
+\makeatother
+It does no harm just this once, we use \LaTeX{} commands for the
+loop.
+
+\section{Direct Access to Number}
+\label{sec:Acces direct aux nombres}
+When a number is saved in a \package{xlop} variable, it is possible to
+process with it in many different ways. However, in certain
+situations, you would creat you own macro or use external macro giving
+such numbers as parameter.
+
+Giving directly \verb+\opprint{var}+ is ineffective since this macro
+is a complex a gives side effect. It is necessary to access directly
+to this number. When a variable hold a number, \package{xlop} creates
+a macro
+\texttt{$\backslash$Op@var}\index{Opvar@\texttt{\boi {Op\at var}}}
+which contain this number. Note the uppercase ``O'' and the lowercase
+``p''. The at sign is here to do this definition a private one, that
+is, you have to enclose it with \macro{makeatletter} and
+\macro{makeatother} to access it (or \macro{catcode @=11} in \TeX).
+\begin{SideBySideExample}
+ \opcopy{1234}{a}\opcopy{56}{b}%
+ \opmul*{a}{b}{r}%
+ \makeatletter
+ \newcolumntype{.}{D{.}{.}{-1}}
+ \begin{tabular}{l.}
+ & \Op@a \\
+ $\times$ & \Op@b \\
+ $=$ & \Op@r
+ \end{tabular}
+ \makeatother
+\end{SideBySideExample}
+
+Note that this way of doing don't work when decimal separator is
+between braces since macro \verb+\opprint{var}+ contain such
+braces. In this case, the simplest is to use \macro{opexport} macro
+(see page~\pageref{macro-opexport}).
+
+\chapter{Future Versions}
+\label{chap:Versions futures}
+Version of \package{xlop} package is~\fileversion{} which is only a
+debuging version of version~0.2, which is itself a correcting version
+of version~0.1 (first public release). The next release will be
+version~0.3 and its ``stable'' version will be version~0.4.
+
+The features of version~0.3 aren't definitively fixed but there are
+some points planned:
+\begin{itemize}
+\item international version for posées;
+\item opérations from 2 to 36~basis;
+\item additional high level functions with roots (\macro{oproot} for
+ any roots and \macro{opsqrt} for square root), exponential function,
+ logarithm, trigonometric functions (direct, inverse, hyperbolic);
+\item macro to have a formated writing, that is, write a number where
+ length of decimal part and integer part are given (if these widths
+ are not the ones of the number, there will be overflow or filling);
+ this macro was present in version~0.1 and allow to display numbers
+ decimal aligned, right aligned, or left aligned;
+\item macro for addition with more than two operands;
+\item parameter for scientific or engineer notation;
+\item macro to allow to write a multi-line number and/or with thousand
+ separator;
+\item carries for multiplications;
+\item make public the successive remainders of a division;
+\item negative values of \parameter{maxdivstep} and
+ \parameter{safedivstep} parameters will take acount of decimal digit
+ of quotient.
+\end{itemize}
+
+For all requests or bug report, the author will be grateful to you to
+contact him at:
+\begin{verbatim}
+ Jean-Come.Charpentier@wanadoo.fr
+\end{verbatim}
+placing the word ``xlop'' in the subject in order to help my spam killer.
+
+It would be nice to have a hacker manual which explain in details the
+source. This tool could be usefull in order to improve
+\package{xlop}. Unfortunately, the current code has more
+than~4000~lines and the work to do that may well be too long.
+
+%\printindex
+\chapter{Index}
+\label{chap:index}
+\begin{multicols}{2}
+\makeatletter
+\parindent \z@\relax
+\parskip \z@ \@plus.3\p@\relax
+\let\item\@idxitem
+\makeatother
+\renewenvironment{theindex}{}{}%
+\input\jobname.ind
+\end{multicols}
+\end{document}
diff --git a/macros/generic/xlop/tex/xlop.sty b/macros/generic/xlop/tex/xlop.sty
new file mode 100644
index 0000000000..65de248f1f
--- /dev/null
+++ b/macros/generic/xlop/tex/xlop.sty
@@ -0,0 +1,3 @@
+\ProvidesPackage{xlop}[2009/12/02 package wrapper for xlop.tex]
+\input xlop.tex
+\endinput
diff --git a/macros/generic/xlop/tex/xlop.tex b/macros/generic/xlop/tex/xlop.tex
new file mode 100644
index 0000000000..ef3360dd43
--- /dev/null
+++ b/macros/generic/xlop/tex/xlop.tex
@@ -0,0 +1,4346 @@
+\def\fileversion{0.26}
+\def\filedate{2017/01/07}
+%%
+%% xlop.tex:
+%% eXtra Large OPeration macros for Generic TeX.
+%% See `user.pdf' for documentation;
+%% `hacker.pdf' for explanation.
+%%
+%% Copyright 2005,2017, by Jean-C\^ome Charpentier
+%% Jean-Come.Charpentier@wanadoo.fr
+%%
+%% This program may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+
+\csname xlopLoaded\endcsname
+\let\xlopLoaded\endinput
+\edef\opAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\newcount\op@count@z
+\newcount\op@count@i
+\newcount\op@count@ii
+\newcount\op@count@iii
+\newcount\op@count@iv
+\newcount\op@count@v
+\newcount\op@count@vi
+\newtoks\op@currentstyle
+\expandafter\ifx\csname @latexerr\endcsname\relax
+\long\def\@ifundefined#1#2#3{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ #2%
+ \else
+ #3%
+ \fi}
+\def\@gobble#1{}
+\def\@namedef#1{\expandafter\def\csname #1\endcsname}
+\def\@nameuse#1{\csname #1\endcsname}
+\def\typeout#1{\immediate\write\@unused{#1}}
+\alloc@7\write\chardef\sixt@@n\@unused
+\def\@spaces{\space\space\space\space}
+\def\@ifnextchar#1#2#3{%
+ \let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
+\def\@ifnch{%
+ \ifx\@tempc\@sptoken
+ \let\@tempd\@xifnch
+ \else
+ \ifx\@tempc\@tempe
+ \let\@tempd\@tempa
+ \else
+ \let\@tempd\@tempb
+ \fi
+ \fi
+ \@tempd
+}
+\begingroup
+\def\:{\global\let\@sptoken= } \:
+\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
+\endgroup
+\fi %LaTeX-like
+\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
+\def\@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+\typeout{`xlop' v\fileversion\space\space <\filedate> (jcc)}
+\newif\ifop@error
+\def\op@error{%
+ \begingroup
+ \global\op@errortrue
+ \newlinechar`\^^J
+ \op@@error
+}
+\def\op@@error#1#2{%
+ \xdef\op@errortext{#1}%
+ \xdef\op@errorhelp{#2}%
+ \endgroup
+}
+\def\op@errorwrite{%
+ \global\op@errorfalse
+ \begingroup
+ \newlinechar`\^^J
+ \expandafter\errhelp\expandafter{\op@errorhelp}%
+ \typeout{%
+ xlop error. \space See documentation for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{\op@errortext}%
+ \endgroup
+}
+\def\op@warning{%
+ \begingroup
+ \newlinechar`\^^J
+ \op@@warning
+}
+\def\op@@warning#1{%
+ \typeout{xlop warning.
+ #1^^J\@spaces See documentation for further information.^^J}%
+ \endgroup
+}
+\let\op@nil\relax
+\def\opset#1{%
+ \Pop@set#1,\op@nil
+ \ifop@error\op@errorwrite\fi
+ \ignorespaces
+}
+\def\Pop@set#1,{%
+ \Pop@@set#1==\op@nil
+ \@ifnextchar\op@nil{\@gobble}{\Pop@set}%
+}
+\def\Pop@@set#1=#2=#3\op@nil{%
+ \@ifundefined{pOP@#1}%
+ {\Pop@@@set#1.={#2}}
+ {\@nameuse{pOP@#1}{#2}}%
+}
+\def\Pop@@@set#1.#2=#3{%
+ \@ifundefined{pOP@#1}%
+ {\op@error{Parameter `#1' not defined.}%
+ {\space\space Perhaps you have mispelling parameter!^^J
+ \space Are you sure about `#1'?^^J}}%
+ {\@nameuse{pOP@#1}[#2]{#3}}%
+}
+\def\op@string@lpar{(}
+\def\op@string@rpar{)}
+\def\op@string@comma{,}
+\def\op@string@abs{abs}
+\def\op@string@add{add}
+\def\op@string@ceil{ceil}
+\def\op@string@div{div}
+\def\op@string@floor{floor}
+\def\op@string@gcd{gcd}
+\def\op@string@idiv{idiv}
+\def\op@string@integer{integer}
+\def\op@string@mod{mod}
+\def\op@string@mul{mul}
+\def\op@string@neg{neg}
+\def\op@string@power{power}
+\def\op@string@rest{rest}
+\def\op@string@round{round}
+\def\op@string@sub{sub}
+
+\def\op@string@all{all}
+\def\op@string@american{american}
+\def\op@string@both{both}
+\def\op@string@bottom{bottom}
+\def\op@string@center{center}
+\def\op@string@decimal{decimal}
+\def\op@string@delete{delete}
+\def\op@string@display{display}
+\def\op@string@divisor{divisor}
+\def\op@string@error{error}
+\def\op@string@false{false}
+\def\op@string@french{french}
+\def\op@string@last{last}
+\def\op@string@left{left}
+\def\op@string@none{none}
+% add 0.25
+\def\op@string@None{None}
+% end add 0.25
+\def\op@string@nonzero{nonzero}
+\def\op@string@right{right}
+\def\op@string@russian{russian}
+\def\op@string@shift{shift}
+\def\op@string@silent{silent}
+\def\op@string@strike{strike}
+\def\op@string@text{text}
+\def\op@string@top{top}
+\def\op@string@true{true}
+\def\op@string@warning{warning}
+
+\def\pOP@afterperiodsymbol#1{\def\op@afterperiodsymbol{#1}}
+\def\pOP@approxsymbol#1{\def\op@approxsymbol{#1}}
+\def\pOP@equalsymbol#1{\def\op@equalsymbol{#1}}
+\def\pOP@addsymbol#1{\def\op@addsymbol{#1}}
+\def\pOP@subsymbol#1{\def\op@subsymbol{#1}}
+\def\pOP@mulsymbol#1{\def\op@mulsymbol{#1}}
+\def\pOP@divsymbol#1{\def\op@divsymbol{#1}}
+\def\pOP@decimalsepsymbol#1{\def\op@decimalsepsymbol{{#1}}}
+\def\pOP@strikedecimalsepsymbol#1{\def\op@strikedecimalsepsymbol{#1}}
+\def\pOP@shiftintermediarysymbol#1{\def\op@shiftintermediarysymbol{#1}}
+\def\pOP@displayshiftintermediary#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@shift
+ \let\op@displayshiftintermediary\op@string@shift
+ \else\ifx\@tempa\op@string@all
+ \let\op@displayshiftintermediary\op@string@all
+ \else\ifx\@tempa\op@string@none
+ \let\op@displayshiftintermediary\op@string@none
+ \else
+ \op@error{Parameter displayshiftintermediary accept only `shift',
+ `all', and `none'.^^J \space Here, the value is `#1'}%
+ {Value must be `shift', `all', or `none'}%
+ \fi\fi\fi
+}
+\def\pOP@voperation#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@bottom
+ \let\op@voperation\op@string@bottom
+ \else\ifx\@tempa\op@string@center
+ \let\op@voperation\op@string@center
+ \else\ifx\@tempa\op@string@top
+ \let\op@voperation\op@string@top
+ \else
+ \op@error{Parameter voperation accept only `top', `center',
+ and `bottom'.^^J \space Here, the value is `#1'}%
+ {Value must be `top', `center', or `bottom'}%
+ \fi\fi\fi
+}
+\def\pOP@voperator#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@top
+ \let\op@voperator\op@string@top
+ \else\ifx\@tempa\op@string@bottom
+ \let\op@voperator\op@string@bottom
+ \else\ifx\@tempa\op@string@center
+ \let\op@voperator\op@string@center
+ \else
+ \op@error{Parameter voperator accept only `top', `center',
+ and `bottom'.^^J \space Here, the value is `#1'}%
+ {Value must be `top', `center', or `bottom'}%
+ \fi\fi\fi
+}
+\def\pOP@hfactor#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@right
+ \let\op@hfactor\op@string@right
+ \else\ifx\@tempa\op@string@decimal
+ \let\op@hfactor\op@string@decimal
+ \else
+ \op@error{Parameter hfactor accept only `right'
+ and `decimal'.^^J \space Here, the value is `#1'}%
+ {Value must be `right' or `decimal'}%
+ \fi\fi
+}
+\def\pOP@vruleperiod#1{\def\op@vruleperiod{#1}}
+\newif\ifop@dividendbridge
+\def\pOP@dividendbridge#1{\edef\@tempa{#1}%
+ \edef\@tempa{#1}%
+ \ifx\@tempa\op@string@false
+ \op@dividendbridgefalse
+ \else\ifx\@tempa\op@string@true
+ \op@dividendbridgetrue
+ \else\ifx\@tempa\empty
+ \op@dividendbridgetrue
+ \else
+ \op@error{Parameter dividendbridge accept only `true' and `false'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `true', or `false', or an empty value}%
+ \fi\fi\fi
+}
+\def\pOP@shiftdecimalsep#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@none
+ \let\op@shiftdecimalsep\op@string@none
+ \else\ifx\@tempa\op@string@divisor
+ \let\op@shiftdecimalsep\op@string@divisor
+ \else\ifx\@tempa\op@string@both
+ \let\op@shiftdecimalsep\op@string@both
+ \else
+ \op@error{Parameter shiftdecimalsep accept only `none', `divisor',
+ and `both'.^^J \space Here, the value is `#1'}%
+ {Value must be `none', `divisor', or `both'}%
+ \fi\fi\fi
+}
+\def\pOP@maxdivstep#1{\edef\op@maxdivstep{#1}}
+\def\pOP@safedivstep#1{\edef\op@safedivstep{#1}}
+\newif\ifop@period
+\def\pOP@period#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@false
+ \op@periodfalse
+ \else\ifx\@tempa\op@string@true
+ \op@periodtrue
+ \else\ifx\@tempa\empty
+ \op@periodtrue
+ \else
+ \op@error{Parameter period accept only `true' and `false'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `true', or `false', or an empty value}%
+ \fi\fi\fi
+}
+\newif\ifop@deletezero
+\def\pOP@deletezero#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@false
+ \op@deletezerofalse
+ \else\ifx\@tempa\op@string@true
+ \op@deletezerotrue
+ \else\ifx\@tempa\empty
+ \op@deletezerotrue
+ \else
+ \op@error{Parameter deletezero accept only `true' and `false'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `true', or `false', or an empty value}%
+ \fi\fi\fi
+}
+\newif\ifop@carryadd
+\def\pOP@carryadd#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@false
+ \op@carryaddfalse
+ \else\ifx\@tempa\op@string@true
+ \op@carryaddtrue
+ \else\ifx\@tempa\empty
+ \op@carryaddtrue
+ \else
+ \op@error{Parameter carryadd accept only `true' and `false'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `true', or `false', or an empty value}%
+ \fi\fi\fi
+}
+\newif\ifop@carrysub
+\def\pOP@carrysub#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@false
+ \op@carrysubfalse
+ \else\ifx\@tempa\op@string@true
+ \op@carrysubtrue
+ \else\ifx\@tempa\empty
+ \op@carrysubtrue
+ \else
+ \op@error{Parameter carrysub accept only `true' and `false'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `true', or `false', or an empty value}%
+ \fi\fi\fi
+}
+\def\pOP@offsetcarry#1{\edef\op@offsetcarry{#1}}
+\def\pOP@style#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@display
+ \let\op@style\op@string@display
+ \else\ifx\@tempa\op@string@text
+ \let\op@style\op@string@text
+ \else
+ \op@error{Parameter style accept only `display' and `text'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `display' or `text'}%
+ \fi\fi
+}
+\def\pOP@displayintermediary#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@all
+ \let\op@displayintermediary\op@string@all
+ \else\ifx\@tempa\op@string@nonzero
+ \let\op@displayintermediary\op@string@nonzero
+ \else\ifx\@tempa\op@string@none
+ \let\op@displayintermediary\op@string@none
+% add 0.25
+ \else\ifx\@tempa\op@string@None
+ \let\op@displayintermediary\op@string@None
+% end 0.25
+ \else
+% modification 0.25
+ \op@error{Parameter style accept only `all', `none', `None', and
+ `nonzero'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `all', `none', `None', or `nonzero'}%
+ \fi\fi\fi\fi
+% end modification 0.25
+}
+\newif\ifop@lastcarry
+\def\pOP@lastcarry#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@false
+ \op@lastcarryfalse
+ \else\ifx\@tempa\op@string@true
+ \op@lastcarrytrue
+ \else\ifx\@tempa\empty
+ \op@lastcarrytrue
+ \else
+ \op@error{Parameter lastcarry accept only `true' and `false'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `true', or `false', or an empty value}%
+ \fi\fi\fi
+}
+\def\pOP@parenthesisnegative#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@all
+ \let\op@parenthesisnegative\op@string@all
+ \else\ifx\@tempa\op@string@last
+ \let\op@parenthesisnegative\op@string@last
+ \else\ifx\@tempa\op@string@none
+ \let\op@parenthesisnegative\op@string@none
+ \else
+ \op@error{Parameter parenthesisnegative accept only `all', `last'
+ and `none'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `all', `last', or `none'}%
+ \fi\fi\fi
+}
+\newdimen\opcolumnwidth
+\def\pOP@columnwidth#1{\opcolumnwidth=#1\relax}
+\newdimen\oplineheight
+\newbox\op@strutbox
+\def\pOP@lineheight#1{\oplineheight=#1\relax
+ \setbox\op@strutbox=\hbox{%
+ \vrule height.708333\oplineheight
+ depth .291667\oplineheight
+ width\z@}%
+}
+\def\op@strut{\relax\ifmmode
+ \copy\op@strutbox
+ \else
+ \unhcopy\op@strutbox
+ \fi
+}
+\newdimen\op@decimalsepwidth
+\def\pOP@decimalsepwidth#1{\op@decimalsepwidth=#1}
+\newdimen\op@decimalsepoffset
+\def\pOP@decimalsepoffset#1{\op@decimalsepoffset=#1}
+\newdimen\op@hrulewidth
+\def\pOP@hrulewidth#1{\op@hrulewidth=#1\relax}
+\newdimen\op@vrulewidth
+\def\pOP@vrulewidth#1{\op@vrulewidth=#1\relax}
+\def\pOP@behaviorsub#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@warning
+ \let\op@behaviorsub\op@string@warning
+ \else\ifx\@tempa\op@string@error
+ \let\op@behaviorsub\op@string@error
+ \else\ifx\@tempa\op@string@silent
+ \let\op@behaviorsub\op@string@silent
+ \else
+ \op@error{Parameter behaviorsub accept only `warning', `error'
+ and `silent'.^^J
+ \space Here, the value is `#1'}%
+ {Value must be `warning', `error', or `silent'}%
+ \fi\fi\fi
+}
+\def\pOP@country#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@french
+ \let\op@country\op@string@french
+ \else\ifx\@tempa\op@string@american
+ \let\op@country\op@string@american
+ \else\ifx\@tempa\op@string@russian
+ \let\op@country\op@string@russian
+ \else
+ \op@error{Parameter contry accept only some values.^^J
+ \space Value `#1' isn't a valid country for xlop}%
+ {For now, value must be `french', `russian', or `american'}%
+ \fi\fi\fi
+}
+\def\pOP@operandstyle{%
+ \@ifnextchar[{\pOP@@operandstyle}{\pOP@@operandstyle[0.]}%
+}
+\def\pOP@@operandstyle[#1.]#2{%
+ \@namedef{op@operandstyle.#1}{#2}%
+}
+\def\pOP@carrystyle{%
+ \@ifnextchar[{\pOP@@carrystyle}{\pOP@@carrystyle[0.]}%
+}
+\def\pOP@@carrystyle[#1.]#2{%
+ \@namedef{op@carrystyle.#1}{#2}%
+}
+\def\pOP@resultstyle{%
+ \@ifnextchar[{\pOP@@resultstyle}{\pOP@@resultstyle[0.]}%
+}
+\def\pOP@@resultstyle[#1.]#2{%
+ \@namedef{op@resultstyle.#1}{#2}%
+}
+\def\pOP@intermediarystyle{%
+ \@ifnextchar[{\pOP@@intermediarystyle}{\pOP@@intermediarystyle[0.]}%
+}
+\def\pOP@@intermediarystyle[#1.]#2{%
+ \@namedef{op@intermediarystyle.#1}{#2}%
+}
+\def\pOP@remainderstyle{%
+ \@ifnextchar[{\pOP@@remainderstyle}{\pOP@@remainderstyle[0.]}%
+}
+\def\pOP@@remainderstyle[#1.]#2{%
+ \@namedef{op@remainderstyle.#1}{#2}%
+}
+\def\pOP@nil#1{}
+
+\opset{afterperiodsymbol=$\ldots$,approxsymbol=$\approx$,
+ equalsymbol={$=$},addsymbol=$+$,subsymbol=$-$,
+ mulsymbol=$\times$,divsymbol=$\div$,
+ decimalsepsymbol=.,strikedecimalsepsymbol=,
+ shiftintermediarysymbol=$\cdot$,displayshiftintermediary=shift,
+ voperation=bottom,voperator=center,
+ hfactor=right,vruleperiod=-0.2,dividendbridge=false,
+ shiftdecimalsep=both,maxdivstep=10,safedivstep=50,period=false,
+ deletezero=true,carryadd=true,carrysub=false,offsetcarry=-0.35,
+ style=display,displayintermediary=none,lastcarry=false,
+ parenthesisnegative=none,columnwidth=2ex,lineheight=\baselineskip,
+ decimalsepwidth=0pt,decimalsepoffset=0pt,
+ hrulewidth=0.4pt,vrulewidth=0.4pt,
+ behaviorsub=silent,country=french,
+ operandstyle=,resultstyle=,remainderstyle=,
+ intermediarystyle=}
+\expandafter\ifx\csname @latexerr\endcsname\relax
+ \opset{carrystyle=\sevenrm}
+\else
+ \opset{carrystyle=\scriptsize}
+\fi
+
+\op@count@z=`\0 \edef\op@numbegin{\the\op@count@z}
+\op@count@z=`\9 \edef\op@numend{\the\op@count@z}
+\op@count@z=`\+ \edef\op@plus{\the\op@count@z}
+\op@count@z=`\- \edef\op@minus{\the\op@count@z}
+\op@count@z=`\* \edef\op@multiply{\the\op@count@z}
+\op@count@z=`\/ \edef\op@divide{\the\op@count@z}
+\op@count@z=`\: \edef\op@idivide{\the\op@count@z}
+\op@count@z=`\^ \edef\op@pow{\the\op@count@z}
+\op@count@z=`\. \edef\op@dot{\the\op@count@z}
+\op@count@z=`\, \edef\op@comma{\the\op@count@z}
+\op@count@z=`\( \edef\op@lparenthesis{\the\op@count@z}
+\op@count@z=`\) \edef\op@rparenthesis{\the\op@count@z}
+\op@count@z=`\ \edef\op@space{\the\op@count@z}
+\newcount\op@parenthesis
+\newcount\op@token
+\newcount\op@stack
+\newcount\op@stackb
+\newif\ifop@in@number
+\newif\ifop@in@decimal
+\newif\ifop@in@name
+\newif\ifop@in@sign
+\newif\ifop@isdigit
+\newif\ifop@isplus
+\newif\ifop@isminus
+\newif\ifop@isdot
+\newif\ifop@iscomma
+\newif\ifop@isdecimalsep
+\newif\ifop@ismultiply
+\newif\ifop@isdivide
+\newif\ifop@isidivide
+\newif\ifop@ispower
+\newif\ifop@islparenthesis
+\newif\ifop@isrparenthesis
+\newif\ifop@isspace
+\newif\ifop@isother
+
+\newif\ifopgt
+\newif\ifopge
+\newif\ifopeq
+\newif\ifopneq
+\newif\ifople
+\newif\ifoplt
+\newif\ifop@again
+\newif\ifop@carry
+\def\op@testchar#1{%
+ \op@isdigitfalse
+ \op@isplusfalse
+ \op@isminusfalse
+ \op@isdecimalsepfalse
+ \op@count@z=`#1\relax
+ \ifnum\op@count@z=\op@plus\relax
+ \op@isplustrue
+ \else\ifnum\op@count@z=\op@minus\relax
+ \op@isminustrue
+ \else\ifnum\op@count@z=\op@dot\relax
+ \op@isdecimalseptrue
+ \else\ifnum\op@count@z=\op@comma\relax
+ \op@isdecimalseptrue
+ \else\ifnum\op@count@z<\op@numbegin\relax
+ \else\ifnum\op@count@z>\op@numend\relax
+ \else
+ \op@isdigittrue
+ \fi\fi\fi\fi\fi\fi
+}
+\def\op@split#1#2{%
+ \begingroup
+ \edef\op@arg{#1}%
+ \expandafter\op@readnumber\op@arg\op@nil
+ \ifop@error
+ \op@error{Number name `#1' is undefined}%
+ {See documentation about number name}%
+ \let\next\relax
+ \let\op@arg\relax
+ \else
+ \edef\op@name{#2}%
+ \op@length
+ \op@count@i=\@nameuse{OP@\op@name @w}\relax
+ \edef\op@arg{\op@arg.}%
+ \let\next\op@@split
+ \fi
+ \expandafter\next\op@arg\op@nil
+ \endgroup
+}
+\def\op@@split#1#2\op@nil{%
+ \ifnum\op@count@i>0
+ \edef\op@argi{#1}%
+ \edef\op@argii{#2}%
+ \let\next\op@@split
+ \expandafter\op@testchar\op@argi
+ \ifop@isdigit
+ \@namexdef{OP@\op@name @\the\op@count@i}{\op@argi}%
+ \advance\op@count@i by -1
+ \fi
+ \else
+ \let\next\relax
+ \let\op@argii\relax
+ \fi
+ \expandafter\next\op@argii\op@nil
+}
+\def\op@readnumber#1#2\op@nil{%
+ \op@testchar{#1}%
+ \ifop@isdigit \else
+ \ifop@isplus \else
+ \ifop@isminus \else
+ \ifop@isdecimalsep \else
+ \@ifundefined{Op@#1#2}%
+ {\global\op@errortrue}%
+ {\edef\op@arg{\@nameuse{Op@#1#2}}}%
+ \fi\fi\fi\fi
+}
+\def\op@length{%
+ \begingroup
+ \expandafter\op@@length\op@arg\op@nil
+ \ifnum\op@count@i=0
+ \op@count@i=1
+ \xdef\op@arg{0\op@arg}%
+ \fi
+ \@namexdef{OP@\op@name @i}{\the\op@count@i}%
+ \@namexdef{OP@\op@name @d}{\the\op@count@ii}%
+ \advance\op@count@i by \op@count@ii
+ \@namexdef{OP@\op@name @w}{\the\op@count@i}%
+ \endgroup
+}
+\def\op@@length#1#2\op@nil{%
+ \edef\op@argi{#1}%
+ \edef\op@argii{#2}%
+ \expandafter\op@testchar\op@argi
+ \ifop@isdigit
+ \@namexdef{OP@\op@name @s}{0}%
+ \op@count@i=1
+ \op@count@ii=0
+ \ifx\empty\op@argii
+ \let\next\relax
+ \let\op@argii\relax
+ \else
+ \let\next\op@length@after@digit
+ \fi
+ \else \ifop@isplus
+ \@namexdef{OP@\op@name @s}{0}%
+ \let\next\op@length@after@sign
+ \else \ifop@isminus
+ \@namexdef{OP@\op@name @s}{1}%
+ \let\next\op@length@after@sign
+ \else \ifop@isdecimalsep
+ \@namexdef{OP@\op@name @s}{0}%
+ \op@count@i=0
+ \op@count@ii=0
+ \let\next\op@length@after@decimalsep
+ \else
+ \op@error{\op@argi\op@argii\space isn't a valid number}%
+ {See documentation for syntax of valid number}%
+ \let\next\relax
+ \let\op@argii\relax
+ \fi\fi\fi\fi
+ \ifx\empty\op@argii
+ \op@error{\op@argi\space isn't a valid number}%
+ {See documentation for syntax of valid number}%
+ \let\next\relax
+ \let\op@argii\relax
+ \fi
+ \expandafter\next\op@argii\op@nil
+}
+\def\op@length@after@digit#1#2\op@nil{%
+ \edef\op@argi{#1}%
+ \edef\op@argii{#2}%
+ \expandafter\op@testchar\op@argi
+ \ifop@isdigit
+ \advance\op@count@i by 1
+ \let\next\op@length@after@digit
+ \else \ifop@isdecimalsep
+ \let\next\op@length@after@decimalsep
+ \else
+ \op@error{#1#2 not allowed here. \space I forget it}%
+ {See documentation for valid number. Characters before
+ are OK}%
+ \let\next\relax
+ \let\op@argii\relax
+ \fi\fi
+ \ifx\empty\op@argii
+ \let\next\relax
+ \fi
+ \expandafter\next\op@argii\op@nil
+}
+\def\op@length@after@sign#1#2\op@nil{%
+ \edef\op@argi{#1}%
+ \edef\op@argii{#2}%
+ \expandafter\op@testchar\op@argi
+ \ifop@isplus
+ \let\next\op@length@after@sign
+ \else \ifop@isminus
+ \ifnum\@nameuse{OP@\op@name @s}=0
+ \@namexdef{OP@\op@name @s}{1}%
+ \else
+ \@namexdef{OP@\op@name @s}{0}%
+ \fi
+ \let\next\op@length@after@sign
+ \else \ifop@isdecimalsep
+ \ifx\empty\op@argii
+ \op@error{#1\space isn't a valid number}%
+ {See documentation for syntax of valid number}%
+ \let\next\relax
+ \else
+ \op@count@i=0
+ \op@count@ii=0
+ \let\next\op@length@after@decimalsep
+ \fi
+ \else \ifop@isdigit
+ \op@count@i=1
+ \op@count@ii=0
+ \ifx\empty\op@argii
+ \let\next\relax
+ \else
+ \let\next\op@length@after@digit
+ \fi
+ \fi\fi\fi\fi
+ \expandafter\next\op@argii\op@nil
+}
+\def\op@length@after@decimalsep#1#2\op@nil{%
+ \edef\op@argi{#1}%
+ \edef\op@argii{#2}%
+ \expandafter\op@testchar\op@argi
+ \ifop@isdigit
+ \advance\op@count@ii by 1
+ \let\next\op@length@after@decimalsep
+ \else
+ \op@error{#1#2 not allowed here. \space I forget it}%
+ {See documentation for syntax of valid number. Characters
+ before is OK}%
+ \let\next\relax
+ \let\op@argii\relax
+ \fi
+ \ifx\empty\op@argii
+ \let\next\relax
+ \let\op@argii\relax
+ \fi
+ \expandafter\next\op@argii\op@nil
+}
+\def\op@unsplit#1#2{%
+ \begingroup
+ \edef\op@name{#1}%
+ \ifnum\@nameuse{OP@\op@name @s}=1
+ \def\op@macroname{-}%
+ \else
+ \def\op@macroname{}%
+ \fi
+ \op@count@z=\@nameuse{OP@\op@name @i}\relax
+ \op@count@i=\@nameuse{OP@\op@name @w}\relax
+ \loop
+ \ifnum\op@count@z>0
+ \edef\op@macroname{\op@macroname
+ \@nameuse{OP@\op@name @\the\op@count@i}}%
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \ifnum\op@count@i>0
+ \edef\op@macroname{\op@macroname\op@decimalsepsymbol}%
+ \loop
+ \ifnum\op@count@i>0
+ \edef\op@macroname{\op@macroname
+ \@nameuse{OP@\op@name @\the\op@count@i}}%
+ \advance\op@count@i by-1
+ \repeat
+ \fi
+ \@namexdef{Op@#2}{\op@macroname}%
+ \endgroup
+}
+\def\oplput(#1,#2)#3{\leavevmode
+ \vbox to\z@{\vss\hbox{\raise #2\oplineheight \hbox to\z@{%
+ \kern #1\opcolumnwidth #3\hss}}}%
+ \ignorespaces
+}
+\def\oprput(#1,#2)#3{\leavevmode
+ \vbox to \z@{\vss\hbox{\raise #2\oplineheight \hbox to\z@{%
+ \hss#3\kern -#1\opcolumnwidth}}}%
+ \ignorespaces
+}
+\def\ophline(#1,#2)#3{\leavevmode
+ \vbox to\z@{\vss\hbox{\raise #2\oplineheight \hbox to\z@{%
+ \kern #1\opcolumnwidth
+ \vrule width#3\opcolumnwidth
+ depth0.5\op@hrulewidth height0.5\op@hrulewidth \hss}}}%
+ \ignorespaces
+}
+\def\opvline(#1,#2)#3{\leavevmode
+ \vbox to\z@{\vss\hbox{\raise #2\oplineheight \hbox to\z@{%
+ \kern #1\opcolumnwidth \kern-0.5\op@vrulewidth
+ \vrule width\op@vrulewidth depth#3\oplineheight height\z@ \hss}}}%
+ \ignorespaces
+}
+\def\op@makebox#1#2#3#4{%
+ \begingroup
+ \edef\op@name{#4}%
+ \dimen0=\opcolumnwidth
+ \op@count@z=#1%
+ \advance\op@count@z by-\@nameuse{OP@\op@name @i}\relax
+ \multiply\dimen0 by\op@count@z
+ \global\setbox0=\hbox{%
+ \op@strut\vrule width\dimen0 height\z@ depth\z@}%
+ \op@count@z=\@nameuse{OP@\op@name @i}\relax
+ \op@count@i=\@nameuse{OP@\op@name @w}\relax
+ \loop
+ \ifnum\op@count@z>0
+ \op@setstyle{#3.\the\op@count@z}%
+ \global\setbox0=\hbox{\box0
+ \hbox to\opcolumnwidth{\hss\the\op@currentstyle
+ {\@nameuse{OP@\op@name @\the\op@count@i}}\hss}}%
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \ifnum\op@count@i>0
+ \op@setstyle{#3.d}%
+ \global\setbox0=\hbox{\box0
+ \hbox to\op@decimalsepwidth{\hss
+ \vrule width\op@decimalsepoffset height\z@ depth\z@
+ \the\op@currentstyle\op@decimalsepsymbol \hss}}%
+ \op@count@z=-1
+ \loop
+ \ifnum\op@count@i>0
+ \op@setstyle{#3.\the\op@count@z}%
+ \global\setbox0=\hbox{\box0
+ \hbox to\opcolumnwidth{\hss\the\op@currentstyle
+ {\@nameuse{OP@\op@name @\the\op@count@i}}\hss}}%
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \fi
+ \dimen0=\opcolumnwidth
+ \op@count@z=#2\relax
+ \advance\op@count@z by-\@nameuse{OP@\op@name @d}\relax
+ \multiply\dimen0 by\op@count@z
+ \global\setbox0=\hbox{\box0
+ \vrule width\dimen0 height\z@ depth\z@}%
+ \endgroup
+}
+\def\op@setstyle#1{%
+ \edef\op@arg{#1}%
+ \expandafter\op@@setstyle\op@arg..\op@nil
+}
+\def\op@@setstyle#1.#2.#3\op@nil{%
+ \edef\op@styleroot{#1}%
+ \edef\op@styleindex{#2}%
+ \op@setstylesubindex#3.\op@nil
+ \ifx\empty\op@stylesubindex
+ \@ifundefined{op@\op@styleroot.\op@styleindex}%
+ {\op@currentstyle={\@nameuse{op@\op@styleroot.0}}}%
+ {\op@currentstyle={\@nameuse{op@\op@styleroot.\op@styleindex}}}%
+ \else
+ \@ifundefined{op@\op@styleroot.\op@styleindex.\op@stylesubindex}%
+ {\@ifundefined{op@\op@styleroot.\op@styleindex}%
+ {\op@currentstyle={\@nameuse{op@\op@styleroot.0}}}%
+ {\op@currentstyle={\@nameuse{op@\op@styleroot.\op@styleindex}}}%
+ }
+ {\op@currentstyle=
+ {\@nameuse{op@\op@styleroot.\op@styleindex.\op@stylesubindex}}}%
+ \fi
+}
+\def\op@setstylesubindex#1.#2\op@nil{\def\op@stylesubindex{#1}}
+\def\opdisplay{\@ifnextchar[{\op@displaypar}{\op@displaypar[nil]}}
+\def\op@displaypar[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \op@split{#3}{r}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@display{#2}{r}%
+ \fi
+ \endgroup
+}
+\def\op@display#1#2{%
+ \op@makebox{\@nameuse{OP@#2@i}}{\@nameuse{OP@#2@d}}{#1}{#2}%
+ \leavevmode\box0
+}
+\def\opprint#1{%
+ \op@split{#1}{r}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unsplit{r}{@r}%
+ \Op@@r
+ \fi
+}
+\def\op@format#1#2#3{%
+ \begingroup
+ \op@count@iii=#1\relax
+ \op@count@iv=#2\relax
+ \op@count@z=\op@count@iv
+ \advance\op@count@z by-\@nameuse{OP@#3@d}\relax
+ \ifnum\op@count@z>0
+ \op@count@i=\@nameuse{OP@#3@w}\relax
+ \advance\op@count@z by\op@count@i\relax
+ \loop
+ \@namexdef{OP@#3@\the\op@count@z}{\@nameuse{OP@#3@\the\op@count@i}}%
+ \advance\op@count@i by-1
+ \advance\op@count@z by-1\relax
+ \ifnum\op@count@i>0
+ \repeat
+ \loop
+ \@namexdef{OP@#3@\the\op@count@z}{0}%
+ \advance\op@count@z by-1\relax
+ \ifnum\op@count@z>0
+ \repeat
+ \@namexdef{OP@#3@d}{\the\op@count@iv}%
+ \op@count@i=\@nameuse{OP@#3@i}%
+ \advance\op@count@i by\op@count@iv\relax
+ \@namexdef{OP@#3@w}{\the\op@count@i}%
+ \fi
+ \op@count@z=\op@count@iii
+ \advance\op@count@z by-\@nameuse{OP@#3@i}\relax
+ \ifnum\op@count@z>0
+ \op@count@i=\@nameuse{OP@#3@w}\relax
+ \loop
+ \advance\op@count@i by1
+ \@namexdef{OP@#3@\the\op@count@i}{0}%
+ \advance\op@count@z by-1\relax
+ \ifnum\op@count@z>0
+ \repeat
+ \@namexdef{OP@#3@i}{\the\op@count@iii}%
+ \fi
+ \op@count@i=\@nameuse{OP@#3@i}\relax
+ \advance\op@count@i by\@nameuse{OP@#3@d}\relax
+ \@namexdef{OP@#3@w}{\the\op@count@i}%
+ \endgroup
+}
+% add 0.23
+\def\opexport{\@ifnextchar[{\op@export}{\op@export[nil]}}
+\def\op@export[#1]#2#3{%
+ \begingroup
+ \def\op@@export{}%
+ \opset{#1}%
+ \expandafter\def\expandafter\op@decimalsepsymbol\op@decimalsepsymbol
+ \op@split{#2}{tmp}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@count@vi=0
+ \loop
+ \ifnum\op@count@vi<\OP@tmp@d
+ \advance\op@count@vi by1
+ \xdef\op@@export{\@nameuse{OP@tmp@\the\op@count@vi}\op@@export}%
+ \repeat
+ \ifnum\OP@tmp@d>0
+ \xdef\op@@export{\op@decimalsepsymbol\op@@export}%
+ % add 0.24
+ \fi
+ % end add 0.24
+ \op@count@i=0
+ \loop
+ \ifnum\op@count@i<\OP@tmp@i
+ \advance\op@count@vi by1
+ \advance\op@count@i by1
+ \xdef\op@@export{\@nameuse{OP@tmp@\the\op@count@vi}\op@@export}%
+ \repeat
+ % add 0.26
+ \ifnum\OP@tmp@s=1
+ \xdef\op@@export{-\op@@export}%
+ \fi
+ % end add 0.26
+ \fi
+% comment 0.24
+% \fi
+% end comment 0.24
+ \endgroup
+ \edef#3{\op@@export}%
+}
+% end add 0.23
+\def\opunzero#1{%
+ \op@split{#1}{uzr}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unzero{uzr}%
+ \op@unsplit{uzr}{#1}%
+ \fi
+}
+\def\op@unzero#1{%
+ \begingroup
+ \op@count@z=\@nameuse{OP@#1@i}\relax
+ \op@count@i=\@nameuse{OP@#1@w}\relax
+ \op@count@ii=\@nameuse{OP@#1@i}\relax
+ \loop
+ \ifnum\op@count@z>1\relax
+ \ifnum\@nameuse{OP@#1@\the\op@count@i}=0\relax
+ \advance\op@count@ii by-1
+ \else
+ \op@count@z=0
+ \fi
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \@namexdef{OP@#1@i}{\the\op@count@ii}%
+ \op@count@z=\@nameuse{OP@#1@d}\relax
+ \op@count@i=1\relax
+ \op@count@ii=0\relax
+ \loop
+ \ifnum\op@count@z>0\relax
+ \ifnum\@nameuse{OP@#1@\the\op@count@i}=0\relax
+ \advance\op@count@ii by1
+ \advance\op@count@z by-1
+ \advance\op@count@i by1
+ \else
+ \op@count@z=0
+ \fi
+ \repeat
+ \ifnum\op@count@ii>0\relax
+ \op@count@z=1\relax
+ \op@count@i=\@nameuse{OP@#1@w}\relax
+ \count@=\op@count@ii
+ \advance\op@count@ii by1
+ \loop
+ \@namexdef{OP@#1@\the\op@count@z}{\@nameuse{OP@#1@\the\op@count@ii}}%
+ \ifnum\op@count@ii<\op@count@i
+ \advance\op@count@z by1
+ \advance\op@count@ii by1
+ \repeat
+ \op@count@ii=\@nameuse{OP@#1@d}%
+ \advance\op@count@ii by-\count@
+ \@namexdef{OP@#1@d}{\the\op@count@ii}%
+ \fi
+ \ifnum\@nameuse{OP@#1@i}=1\relax
+ \ifnum\@nameuse{OP@#1@d}=0\relax
+ \ifnum\@nameuse{OP@#1@1}=0
+ \@namexdef{OP@#1@s}{0}%
+ \fi
+ \fi
+ \fi
+ \op@count@i=\@nameuse{OP@#1@i}\relax
+ \advance\op@count@i by\@nameuse{OP@#1@d}\relax
+ \@namexdef{OP@#1@w}{\the\op@count@i}%
+ \endgroup
+}
+% add 0.25
+\def\op@unzeroleft#1{%
+ \begingroup
+ \op@count@z=\@nameuse{OP@#1@i}\relax
+ \op@count@i=\@nameuse{OP@#1@w}\relax
+ \op@count@ii=\@nameuse{OP@#1@i}\relax
+ \loop
+ \ifnum\op@count@z>1\relax
+ \ifnum\@nameuse{OP@#1@\the\op@count@i}=0\relax
+ \advance\op@count@ii by-1
+ \else
+ \op@count@z=0
+ \fi
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \@namexdef{OP@#1@i}{\the\op@count@ii}%
+ \ifnum\@nameuse{OP@#1@i}=1\relax
+ \ifnum\@nameuse{OP@#1@d}=0\relax
+ \ifnum\@nameuse{OP@#1@1}=0
+ \@namexdef{OP@#1@s}{0}%
+ \fi
+ \fi
+ \fi
+ \op@count@i=\@nameuse{OP@#1@i}\relax
+ \advance\op@count@i by\@nameuse{OP@#1@d}\relax
+ \@namexdef{OP@#1@w}{\the\op@count@i}%
+ \endgroup
+}
+% end add 0.25
+\def\opcopy#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unsplit{a}{#2}%
+ \fi
+}
+\def\op@copy#1#2{%
+ \begingroup
+ \@namexdef{OP@#2@w}{\@nameuse{OP@#1@w}}%
+ \@namexdef{OP@#2@i}{\@nameuse{OP@#1@i}}%
+ \@namexdef{OP@#2@d}{\@nameuse{OP@#1@d}}%
+ \@namexdef{OP@#2@s}{\@nameuse{OP@#1@s}}%
+ \op@count@z=\@nameuse{OP@#2@w}\relax
+ \loop
+ \ifnum\op@count@z>0
+ \@namexdef{OP@#2@\the\op@count@z}{\@nameuse{OP@#1@\the\op@count@z}}%
+ \advance\op@count@z by-1
+ \repeat
+ \endgroup
+}
+\def\opcmp#1#2{%
+ \op@split{#1}{ca}%
+ \op@split{#2}{cb}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@cmp{ca}{cb}%
+ \fi
+}
+\def\op@cmp#1#2{%
+ \begingroup
+ \global\opgtfalse
+ \global\opgefalse
+ \global\opeqfalse
+ \global\opneqfalse
+ \global\oplefalse
+ \global\opltfalse
+ \op@copy{#1}{ca}%
+ \op@unzero{ca}%
+ \op@copy{#2}{cb}%
+ \op@unzero{cb}%
+ \ifnum\OP@ca@s>\OP@cb@s\relax
+ \global\oplttrue
+ \global\opletrue
+ \global\opneqtrue
+ \else \ifnum\OP@ca@s<\OP@cb@s\relax
+ \global\opgttrue
+ \global\opgetrue
+ \global\opneqtrue
+ \else
+ \ifnum\OP@ca@i>\OP@cb@i\relax
+ \global\opgetrue
+ \global\opgttrue
+ \global\opneqtrue
+ \else \ifnum\OP@ca@i<\OP@cb@i\relax
+ \global\opletrue
+ \global\oplttrue
+ \global\opneqtrue
+ \else
+ \op@againtrue
+ \op@count@i=\OP@ca@w\relax
+ \op@count@ii=\OP@cb@w\relax
+ \loop
+ \ifop@again
+ \ifnum\@nameuse{OP@ca@\the\op@count@i}>
+ \@nameuse{OP@cb@\the\op@count@ii}\relax
+ \op@againfalse
+ \global\opgttrue
+ \global\opgetrue
+ \global\opneqtrue
+ \else \ifnum\@nameuse{OP@ca@\the\op@count@i}<
+ \@nameuse{OP@cb@\the\op@count@ii}\relax
+ \op@againfalse
+ \global\oplttrue
+ \global\opletrue
+ \global\opneqtrue
+ \else \ifnum\op@count@i=1\relax
+ \op@againfalse
+ \ifnum\op@count@ii=1\relax
+ \global\opeqtrue
+ \global\opgetrue
+ \global\opletrue
+ \else
+ \global\oplttrue
+ \global\opletrue
+ \global\opneqtrue
+ \fi
+ \else \ifnum\op@count@ii=1\relax
+ \op@againfalse
+ \global\opgttrue
+ \global\opgetrue
+ \global\opneqtrue
+ \fi\fi\fi\fi
+ \advance\op@count@i by-1
+ \advance\op@count@ii by-1
+ \repeat
+ \fi\fi
+ \ifnum\OP@ca@s=1\relax
+ \ifopneq
+ \ifopgt
+ \global\opgtfalse
+ \global\opgefalse
+ \global\oplttrue
+ \global\opletrue
+ \else
+ \global\opgttrue
+ \global\opgetrue
+ \global\opltfalse
+ \global\oplefalse
+ \fi
+ \fi
+ \fi
+ \fi\fi
+ \endgroup
+}
+\def\op@max#1#2{%
+ \ifnum#1>#2
+ #1%
+ \else
+ #2%
+ \fi
+}
+\def\op@textoperation#1#2#3#4#5{%
+ \mathsurround=\z@\relax
+ \ifop@deletezero
+ \op@unzero{#1}%
+ \op@unzero{#3}%
+ \op@unzero{#5}%
+ \fi
+ \op@unsplit{#1}{@a}%
+ \op@unsplit{#3}{@b}%
+ \op@unsplit{#5}{@r}%
+ \ifnum\@nameuse{OP@#1@s}=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@a)$%
+ \else
+ $\Op@@a$%
+ \fi
+ \else
+ $\Op@@a$%
+ \fi
+ $\>$\nobreak#2$\>$\penalty\binoppenalty
+ \ifnum\@nameuse{OP@#3@s}=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@b)$%
+ \else \ifx\op@parenthesisnegative\op@string@last
+ $(\Op@@b)$%
+ \else
+ $\Op@@b$%
+ \fi\fi
+ \else
+ $\Op@@b$%
+ \fi
+ $\;$\nobreak#4$\;$\penalty\relpenalty
+ \ifnum\@nameuse{OP@#5@s}=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@r)$%
+ \else
+ $\Op@@r$%
+ \fi
+ \else
+ $\Op@@r$%
+ \fi
+}
+\def\opadd{\@ifnextchar*{\op@addstar}{\op@addnostar}}
+\def\op@addstar*#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \fi
+ \ifnum\OP@a@s=0
+ \ifnum\OP@b@s=0
+ \xdef\op@realsymbol{\op@addsymbol}%
+ \op@add{a}{b}{r}%
+ \else
+ \def\OP@b@s{0}%
+ \op@cmp{a}{b}%
+ \ifopgt
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@sub{a}{b}{r}%
+ \else
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@copy{a}{r}%
+ \op@copy{b}{a}%
+ \op@copy{r}{b}%
+ \op@sub{a}{b}{r}%
+ \xdef\OP@r@s{1}%
+ \fi
+ \fi
+ \else
+ \ifnum\OP@b@s=0
+ \def\OP@a@s{0}%
+ \op@cmp{a}{b}%
+ \ifopgt
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@sub{a}{b}{r}%
+ \xdef\OP@r@s{1}%
+ \else
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@copy{a}{r}%
+ \op@copy{b}{a}%
+ \op@copy{r}{b}%
+ \op@sub{a}{b}{r}%
+ \fi
+ \else
+ \xdef\op@realsymbol{\op@addsymbol}%
+ \op@add{a}{b}{r}%
+ \xdef\OP@r@s{1}%
+ \fi
+ \fi
+ \ifop@error\else
+ \ifop@deletezero
+ \op@unzero{r}%
+ \fi
+ \op@unsplit{r}{#3}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@addnostar{\@ifnextchar[{\op@addarg}{\op@addarg[nil]}}
+\def\op@addarg[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \ifx\op@style\op@string@display
+ \ifx\op@country\op@string@french
+ \op@adddisplayone{#2}{#3}%
+ \else \ifx\op@country\op@string@american
+ \op@adddisplayone{#2}{#3}%
+ \else \ifx\op@country\op@string@russian
+ \op@adddisplayone{#2}{#3}%
+ \else
+ \op@error{Country \op@country\space isn't recognize}
+ {For now, only `french', `american' and
+ `russian' are valid}
+ \fi\fi\fi
+ \else
+ \op@addstar*{#2}{#3}{@r}%
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+ \op@split{@r}{r}%
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \fi
+ \op@textoperation{a}{\op@addsymbol}{b}{\op@equalsymbol}{r}%
+ \fi
+ \endgroup
+}
+\def\op@adddisplayone#1#2{%
+ \op@addstar*{#1}{#2}{@r}%
+ \op@addsubdisplayone
+}
+\def\op@add#1#2#3{%
+ \begingroup
+ \global\op@carryfalse
+ \op@count@i=\op@max{\@nameuse{OP@#1@i}}{\@nameuse{OP@#2@i}}%
+ \op@count@ii=\op@max{\@nameuse{OP@#1@d}}{\@nameuse{OP@#2@d}}%
+ \op@format{\the\op@count@i}{\the\op@count@ii}{#1}%
+ \op@format{\the\op@count@i}{\the\op@count@ii}{#2}%
+ \@namexdef{OP@#3@i}{\the\op@count@i}%
+ \@namexdef{OP@#3@d}{\the\op@count@ii}%
+ \@namexdef{OP@#3@s}{0}%
+ \xdef\OP@carry@s{0}%
+ \xdef\OP@carry@d{0}%
+ \advance\op@count@i by\op@count@ii
+ \@namexdef{OP@#3@w}{\the\op@count@i}%
+ \xdef\OP@carry@i{\the\op@count@i}%
+ \xdef\OP@carry@w{\the\op@count@i}%
+ \op@count@ii=1
+ \def\op@carry{0}%
+ \@namexdef{OP@carry@1}{ }%
+ \loop
+ \op@count@z=\@nameuse{OP@#1@\the\op@count@ii}%
+ \advance\op@count@z by\@nameuse{OP@#2@\the\op@count@ii}%
+ \advance\op@count@z by\op@carry\relax
+ \ifnum\op@count@z>9
+ \advance\op@count@z by-10
+ \def\op@carry{1}%
+ \global\op@carrytrue
+ \else
+ \def\op@carry{0}%
+ \fi
+ \@namexdef{OP@#3@\the\op@count@ii}{\the\op@count@z}%
+ \ifnum\op@count@ii<\op@count@i
+ \advance\op@count@ii by1\relax
+ \ifnum\op@carry=0
+ \@namexdef{OP@carry@\the\op@count@ii}{ }%
+ \else
+ \@namexdef{OP@carry@\the\op@count@ii}{1}%
+ \global\op@carrytrue
+ \fi
+ \repeat
+ \ifnum\op@carry=1
+ \advance\op@count@i by1
+ \@namexdef{OP@#3@w}{\the\op@count@i}%
+ \@namexdef{OP@#3@\the\op@count@i}{1}%
+ \ifop@lastcarry
+ \@namexdef{OP@carry@w}{\the\op@count@i}%
+ \@namexdef{OP@carry@i}{\the\op@count@i}%
+ \@namexdef{OP@carry@\the\op@count@i}{1}%
+ \global\op@carrytrue
+ \fi
+ \op@count@i=\@nameuse{OP@#3@i}\relax
+ \advance\op@count@i by1
+ \@namexdef{OP@#3@i}{\the\op@count@i}%
+ \fi
+ \endgroup
+}
+\def\opsub{\@ifnextchar*{\op@substar}{\op@subnostar}}
+\def\op@substar*#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifnum\OP@a@s=0
+ \ifnum\OP@b@s=0
+ \op@cmp{a}{b}%
+ \ifopgt
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@sub{a}{b}{r}%
+ \else
+ \ifx\op@behaviorsub\op@string@warning
+ \op@warning{Substraction with first operand less than
+ second one}
+ \else\ifx\op@behaviorsub\op@string@error
+ \op@error{Substraction with first operand less than
+ second one}%
+ {I can't do a-b with a and b positive and a<b}%
+ \global\op@errortrue
+ \fi\fi
+ \ifop@error\else
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@copy{a}{r}%
+ \op@copy{b}{a}%
+ \op@copy{r}{b}%
+ \op@sub{a}{b}{r}%
+ \xdef\OP@r@s{1}%
+ \fi
+ \fi
+ \else
+ \xdef\op@realsymbol{\op@addsymbol}%
+ \op@add{a}{b}{r}%
+ \fi
+ \else
+ \ifnum\OP@b@s=0
+ \xdef\op@realsymbol{\op@addsymbol}%
+ \op@add{a}{b}{r}%
+ \xdef\OP@r@s{1}%
+ \else
+ \op@cmp{a}{b}%
+ \ifoplt
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@sub{a}{b}{r}%
+ \xdef\OP@r@s{1}%
+ \else
+ \xdef\op@realsymbol{\op@subsymbol}%
+ \op@copy{a}{r}%
+ \op@copy{b}{a}%
+ \op@copy{r}{b}%
+ \op@sub{a}{b}{r}%
+ \fi
+ \fi
+ \fi
+ \ifop@error\else
+ \ifop@deletezero
+ \op@unzero{r}%
+ \fi
+ \op@unsplit{r}{#3}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@subnostar{\@ifnextchar[{\op@subarg}{\op@subarg[nil]}}
+\def\op@subarg[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \ifx\op@style\op@string@display
+ \ifx\op@country\op@string@french
+ \op@subdisplayone{#2}{#3}%
+ \else \ifx\op@country\op@string@american
+ \op@subdisplayone{#2}{#3}%
+ \else \ifx\op@country\op@string@russian
+ \op@subdisplayone{#2}{#3}%
+ \else
+ \op@error{Country \op@country\space isn't recognize}
+ {For now, only `french', `american' and
+ `russian' are valid}
+ \fi\fi\fi
+ \else
+ \op@substar*{#2}{#3}{@r}%
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+ \op@split{@r}{r}%
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \fi
+ \op@textoperation{a}{\op@subsymbol}{b}{\op@equalsymbol}{r}%
+ \fi
+ \endgroup
+}
+\def\op@subdisplayone#1#2{%
+ \op@substar*{#1}{#2}{@r}%
+ \op@addsubdisplayone
+}
+\def\op@sub#1#2#3{%
+ \begingroup
+ \global\op@carryfalse
+ \op@count@i=\op@max{\@nameuse{OP@#1@i}}{\@nameuse{OP@#2@i}}\relax
+ \op@count@ii=\op@max{\@nameuse{OP@#1@d}}{\@nameuse{OP@#2@d}}\relax
+ \op@count@iii=\@nameuse{OP@#2@w}\relax
+ \advance\op@count@iii by1
+ \op@format{\the\op@count@i}{\the\op@count@ii}{#1}%
+ \op@format{\the\op@count@i}{\the\op@count@ii}{#2}%
+ \@namexdef{OP@#3@i}{\the\op@count@i}%
+ \@namexdef{OP@#3@d}{\the\op@count@ii}%
+ \@namexdef{OP@#3@s}{0}%
+ \xdef\OP@carry@s{0}%
+ \xdef\OP@carry@d{0}%
+ \advance\op@count@i by\op@count@ii
+ \@namexdef{OP@#3@w}{\the\op@count@i}%
+ \xdef\OP@carry@i{\the\op@count@i}%
+ \xdef\OP@carry@w{\the\op@count@i}%
+ \op@count@ii=1
+ \def\op@carry{0}%
+ \@namexdef{OP@carry@1}{ }%
+ \loop
+ \op@count@z=\@nameuse{OP@#1@\the\op@count@ii}%
+ \advance\op@count@z by-\@nameuse{OP@#2@\the\op@count@ii}%
+ \advance\op@count@z by-\op@carry\relax
+ \ifnum\op@count@z<0
+ \advance\op@count@z by10
+ \def\op@carry{1}%
+ \else
+ \def\op@carry{0}%
+ \fi
+ \@namexdef{OP@#3@\the\op@count@ii}{\the\op@count@z}%
+ \ifnum\op@count@ii<\op@count@i
+ \advance\op@count@ii by1\relax
+ \@namexdef{OP@carry@\the\op@count@ii}{ }%
+ \ifnum\op@carry=0 \else
+ \ifop@lastcarry
+ \@namexdef{OP@carry@\the\op@count@ii}{1}%
+ \global\op@carrytrue
+ \else
+ \ifnum\op@count@ii<\op@count@iii\relax
+ \@namexdef{OP@carry@\the\op@count@ii}{1}%
+ \global\op@carrytrue
+ \fi
+ \fi
+ \fi
+ \repeat
+ \endgroup
+}
+\def\op@addsubdisplayone{%
+ \begingroup
+ \ifop@error\else
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \fi
+ \ifx\op@realsymbol\op@subsymbol
+ \ifnum\OP@a@d<\OP@b@d\relax
+ \op@format{\OP@a@i}{\OP@b@d}{a}%
+ \fi
+ \fi
+ \op@count@i=\op@max{\OP@a@i}{\OP@b@i}%
+ \op@count@i=\op@max{\the\op@count@i}{\OP@r@i}%
+ \advance\op@count@i by1
+ \op@count@ii=\op@max{\OP@a@d}{\OP@b@d}%
+ \op@count@ii=\op@max{\the\op@count@ii}{\OP@r@d}%
+ \op@count@z=\op@count@i
+ \advance\op@count@z by\op@count@ii
+ \setbox1=\hbox to\op@count@z\opcolumnwidth{%
+ \ifx\op@voperator\op@string@top
+ \oplput(0,2){\op@realsymbol}%
+ \else\ifx\op@voperator\op@string@bottom
+ \oplput(0,1){\op@realsymbol}%
+ \else
+ \oplput(0,1.5){\op@realsymbol}%
+ \fi\fi
+ \ophline(0,0.75){\the\op@count@z}%
+ \ifnum\OP@r@d>0\relax
+ \oplput(\the\op@count@z,0.75){%
+ \vrule width\op@decimalsepwidth
+ depth0.5\op@hrulewidth height0.5\op@hrulewidth}
+ \fi
+ \ifx\op@realsymbol\op@subsymbol
+ \ifop@carrysub
+ \ifop@carry
+ \op@makebox{\the\op@count@z}{0}{carrystyle}{carry}%
+ \oplput(\op@offsetcarry,2){\kern\opcolumnwidth\copy0}%
+ \oplput(\op@offsetcarry,1){\box0}%
+ \fi
+ \fi
+ \fi
+ \vbox{%
+ \ifx\op@realsymbol\op@addsymbol
+ \ifop@carryadd
+ \ifop@carry
+ \op@makebox{\the\op@count@z}{0}{carrystyle}{carry}%
+ \hbox{\box0}%
+ \fi
+ \fi
+ \fi
+ \op@makebox{\the\op@count@i}{\the\op@count@ii}{operandstyle.1}{a}%
+ \hbox{\box0}%
+ \op@makebox{\the\op@count@i}{\the\op@count@ii}{operandstyle.2}{b}%
+ \hbox{\box0}%
+ \op@makebox{\the\op@count@i}{\the\op@count@ii}{resultstyle}{r}%
+ \hbox{\box0}%
+ }%
+ }%
+ \leavevmode
+ \ifx\op@voperation\op@string@center
+ \lower1\oplineheight\box1
+ \else\ifx\op@voperation\op@string@top
+ \lower2\oplineheight\box1
+ \else
+ \box1
+ \fi\fi
+ \fi
+ \endgroup
+}
+\def\opmul{\@ifnextchar*{\op@mulstar}{\op@mulnostar}}
+\def\op@mulstar*#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \fi
+ \op@mul{a}{b}{r}%
+ \ifop@deletezero
+ \op@unzero{r}%
+ \fi
+ \xdef\op@realsymbol{\op@mulsymbol}%
+ \ifnum\OP@a@s=\OP@b@s\else
+ \xdef\OP@r@s{1}%
+ \fi
+ \ifop@error\else
+ \op@unsplit{r}{#3}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@mulnostar{\@ifnextchar[{\op@mularg}{\op@mularg[nil]}}
+\def\op@mularg[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \ifx\op@style\op@string@display
+ \ifx\op@country\op@string@french
+ \op@muldisplayone{#2}{#3}%
+ \else \ifx\op@country\op@string@american
+ \op@muldisplayone{#2}{#3}%
+ \else \ifx\op@country\op@string@russian
+ \op@muldisplayone{#2}{#3}%
+ \else
+ \op@error{Country \op@country\space isn't recognize}
+ {For now, only `french', `american' and
+ `russian' are valid}
+ \fi\fi\fi
+ \else
+ \op@mulstar*{#2}{#3}{@r}%
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+ \op@split{@r}{r}%
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \op@unzero{r}%
+ \fi
+ \op@textoperation{a}{\op@mulsymbol}{b}{\op@equalsymbol}{r}%
+ \fi
+ \endgroup
+}
+\def\op@muldisplayone#1#2{%
+ \begingroup
+ \ifop@error\else
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \fi
+ \op@mul{a}{b}{r}%
+% add 0.25
+ \ifop@deletezero
+ \op@unzeroleft{r}%
+ \fi
+% end add 0.25
+ \ifnum\OP@b@i=1
+ \expandafter\if\csname OP@b@\OP@b@w\endcsname0
+ \ifnum\OP@r@i>1
+ \expandafter\if\csname OP@r@\OP@r@w\endcsname0
+ \op@count@i=\OP@r@w
+ \advance\op@count@i\m@ne
+ \edef\OP@r@w{\the\op@count@i}%
+ \op@count@i=\OP@r@i
+ \advance\op@count@i\m@ne
+ \edef\OP@r@i{\the\op@count@i}%
+ \fi\fi\fi\fi
+ \setbox1=\hbox to\OP@r@w\opcolumnwidth{%
+ \vbox{%
+ \ifx\op@hfactor\op@string@right
+ \op@count@i=\OP@r@w
+ \advance\op@count@i by-\OP@a@d
+ \op@makebox{\the\op@count@i}{\OP@a@d}{operandstyle.1}{a}%
+ \hbox{\box0}%
+ \op@count@i=\OP@r@w
+ \advance\op@count@i by-\OP@b@d
+ \op@makebox{\the\op@count@i}{\OP@b@d}{operandstyle.2}{b}%
+ \hbox{\box0}%
+ \else
+ \op@count@i=\OP@r@w
+ \op@count@ii=\op@max{\OP@a@d}{\OP@b@d}%
+ \advance\op@count@i by-\op@count@ii
+ \op@makebox{\the\op@count@i}{\the\op@count@ii}{operandstyle.1}{a}%
+ \hbox{\box0}%
+ \op@makebox{\the\op@count@i}{\the\op@count@ii}{operandstyle.2}{b}%
+ \hbox{\box0}%
+ \fi
+ \op@againtrue
+ \ifx\op@displayintermediary\op@string@none
+ \ifnum\OP@b@w=1
+ \op@againfalse
+ \fi
+ \fi
+% add 0.25
+ \ifx\op@displayintermediary\op@string@None
+ \op@againfalse
+%% \op@unzero{r}%
+ \fi
+% end add 0.25
+ \global\op@count@z=0\relax
+ \ifop@again
+ \op@count@ii=0\relax
+ \setbox2=\hbox{}%
+ \loop
+ \ifnum\op@count@ii<\OP@b@w
+ \advance\op@count@ii by1
+ \op@count@iii=\@nameuse{OP@b@\the\op@count@ii}%
+ \op@count@iv=\OP@r@w
+ \advance\op@count@iv by-\op@count@ii
+ \advance\op@count@iv by1
+ \op@makebox{\the\op@count@iv}{0}%
+ {intermediarystyle.\the\op@count@ii}{T\the\op@count@iii}%
+ \ifx\op@displayintermediary\op@string@all
+ \hbox{\box0\copy2}%
+ \global\advance\op@count@z by1
+ \else
+ \ifnum\the\op@count@iii=0
+ \ifx\op@displayshiftintermediary\op@string@shift
+ \setbox2=\hbox{\box2\hbox to\opcolumnwidth{%
+ \hss\op@shiftintermediarysymbol\hss}}%
+ \fi
+ \else
+ \hbox{\box0\copy2}%
+ \global\advance\op@count@z by1
+ \ifx\op@displayshiftintermediary\op@string@shift
+ \setbox2=\hbox{}%
+ \fi
+ \fi
+ \fi
+ \ifx\op@displayshiftintermediary\op@string@all
+ \setbox2=\hbox{\box2\hbox to\opcolumnwidth{%
+ \hss\op@shiftintermediarysymbol\hss}}%
+ \fi
+ \repeat
+ \fi
+ \op@makebox{\OP@r@i}{\OP@r@d}{resultstyle}{r}%
+ \hbox{\box0}%
+ }%
+ \op@count@i=\OP@r@w
+ \ophline(-\the\op@count@i,0.75){\the\op@count@i}%
+ \ifnum\OP@r@d>0\relax
+ \oprput(-\the\op@count@i,0.75){%
+ \vrule width\op@decimalsepwidth
+ depth0.5\op@hrulewidth height0.5\op@hrulewidth}
+ \fi
+ \ifx\op@hfactor\op@string@right
+ \op@count@i=\op@max{\OP@a@w}{\OP@b@w}%
+ \else
+ \op@count@i=\op@max{\OP@a@d}{\OP@b@d}%
+ \advance\op@count@i by\op@max{\OP@a@i}{\OP@b@i}%
+ \fi
+ \advance\op@count@i by1\relax
+ \ophline(-\the\op@count@i,\the\op@count@z.75){\the\op@count@i}%
+ \ifx\op@voperator\op@string@top
+ \advance\op@count@z by2
+ \oplput(-\the\op@count@i,\the\op@count@z){\op@mulsymbol}%
+ \advance\op@count@z by-2
+ \else\ifx\op@voperator\op@string@bottom
+ \advance\op@count@z by1
+ \oplput(-\the\op@count@i,\the\op@count@z){\op@mulsymbol}%
+ \advance\op@count@z by-1
+ \else
+ \advance\op@count@z by1
+ \oplput(-\the\op@count@i,\the\op@count@z.5){\op@mulsymbol}%
+ \advance\op@count@z by-1
+ \fi\fi
+ }%
+ \leavevmode
+ \ifx\op@voperation\op@string@center
+ \advance\op@count@z by3
+ \dimen0=\oplineheight
+ \multiply\dimen0 by\op@count@z
+ \dimen0=0.5\dimen0
+ \lower\dimen0\box1
+ \else\ifx\op@voperation\op@string@top
+ \advance\op@count@z by2
+ \dimen0=\oplineheight
+ \multiply\dimen0 by\op@count@z
+ \lower\dimen0\box1
+ \else
+ \box1
+ \fi\fi
+ \fi
+ \endgroup
+}
+\def\op@mul#1#2#3{%
+ \begingroup
+ \op@multable{#1}%
+ \op@count@z=\@nameuse{OP@#2@w}\relax
+ \op@copy{zero}{mr}%
+ \loop
+ \op@count@iii=\@nameuse{OP@#2@\the\op@count@z}%
+ \advance\op@count@z by-1
+ \op@copy{T\the\op@count@iii}{rr}%
+ \op@lshift{\the\op@count@z}{rr}%
+ \op@add{rr}{mr}{mr}%
+ \ifnum\op@count@z>0
+ \repeat
+ \op@count@z=\@nameuse{OP@#1@d}%
+ \advance\op@count@z by\@nameuse{OP@#2@d}%
+ \xdef\OP@mr@d{\the\op@count@z}%
+ \op@count@i=\OP@mr@w
+ \advance\op@count@i by-\op@count@z
+ \ifnum\op@count@i>0\relax
+ \xdef\OP@mr@i{\the\op@count@i}%
+ \else
+ \xdef\OP@mr@i{1}%
+ \op@count@z=\@nameuse{OP@mr@d}%
+ \advance\op@count@z by1
+ \op@count@i=\@nameuse{OP@mr@w}%
+ \@namexdef{OP@mr@w}{\the\op@count@z}%
+ \loop
+ \ifnum\op@count@i<\op@count@z
+ \advance\op@count@i by1
+ \@namexdef{OP@mr@\the\op@count@i}{0}%
+ \repeat
+ \fi
+ \op@copy{mr}{#3}%
+ \endgroup
+}
+\def\op@multable#1{%
+ \op@copy{#1}{T1}%
+ \@namexdef{OP@T1@i}{\@nameuse{OP@T1@w}}%
+ \@namexdef{OP@T1@d}{0}%
+ \@namexdef{OP@T1@s}{0}%
+ % comment 0.24
+% \op@unzero{T1}%
+ % end comment 0.24
+ \op@add{T1}{T1}{T2}%
+ \op@add{T1}{T2}{T3}%
+ \op@add{T1}{T3}{T4}%
+ \op@add{T1}{T4}{T5}%
+ \op@add{T1}{T5}{T6}%
+ \op@add{T1}{T6}{T7}%
+ \op@add{T1}{T7}{T8}%
+ \op@add{T1}{T8}{T9}%
+ % add 0.24
+ \op@unzero{T1}%
+ % end add 0.24
+ \op@format{\@nameuse{OP@T1@i}}{\@nameuse{OP@T1@d}}{T0}%
+}
+\def\op@lshift#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@z=\@nameuse{OP@#2@w}\relax
+ \advance\op@count@i by\op@count@z
+ \@namexdef{OP@#2@w}{\the\op@count@i}%
+ \@namexdef{OP@#2@i}{\the\op@count@i}%
+ \loop
+ \ifnum\op@count@z>0
+ \@namexdef{OP@#2@\the\op@count@i}{\@nameuse{OP@#2@\the\op@count@z}}%
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \loop
+ \ifnum\op@count@i>0
+ \@namexdef{OP@#2@\the\op@count@i}{0}%
+ \advance\op@count@i by-1
+ \repeat
+ \endgroup
+}
+\def\op@rshift#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@z=\@nameuse{OP@#2@w}\relax
+ \advance\op@count@z by-\op@count@i
+ \ifnum\op@count@z>0
+ \@namexdef{OP@#2@w}{\the\op@count@z}%
+ \@namexdef{OP@#2@i}{\the\op@count@z}%
+ \@namexdef{OP@#2@d}{0}%
+ \@namexdef{OP@#2@s}{0}%
+ \advance\op@count@i by1\relax
+ \op@count@ii=1
+ \loop
+ \@namexdef{OP@#2@\the\op@count@ii}{\@nameuse{OP@#2@\the\op@count@i}}%
+ \advance\op@count@i by1
+ \ifnum\op@count@ii<\op@count@z
+ \advance\op@count@ii by1
+ \repeat
+ \else
+ \op@copy{zero}{#2}%
+ \fi
+ \endgroup
+}
+\def\opdiv{\@ifnextchar*{\op@divstar}{\op@divnostar}}
+\def\op@divstar*{\@ifnextchar[{\op@divstararg}{\op@divstararg[nil]}}
+\def\op@divstararg[#1]#2#3#4#5{%
+ \begingroup
+ \opset{#1}
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Ajout du 20/11/2006 %%%
+%%% Sur indication de Christophe Poulain %%%
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \op@error{divisor must be nonzero}%
+ {You have to learn some math}%
+ \fi
+%%% Fin ajout %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
+ \op@mulpowerten{a}{\op@shift}%
+ \op@mulpowerten{b}{\op@shift}%
+ \xdef\OP@a@s{0}%
+ \xdef\OP@b@s{0}%
+ \ifop@period
+ \op@div{1}{a}{b}{q}{r}%
+ \else
+ \op@div{0}{a}{b}{q}{r}%
+ \fi
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \ifnum\OP@a@s=0\relax
+ \ifnum\OP@b@s=0\relax
+ \else
+ \xdef\OP@q@s{1}%
+ \fi
+ \else
+ \xdef\OP@r@s{1}%
+ \ifnum\OP@b@s=0\relax
+ \xdef\OP@q@s{1}%
+ \fi
+ \fi
+ \ifop@error\else
+ \op@unsplit{q}{#4}%
+ \op@unsplit{r}{#5}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@divnostar{\@ifnextchar[{\op@divarg}{\op@divarg[nil]}}
+\def\op@divarg[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Ajout du 20/11/2006 %%%
+%%% Sur indication de Cristophe Poulain %%%
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \op@error{divisor must be nonzero}%
+ {You have to learn some math}%
+ \fi
+%%% Fin ajout %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifx\op@style\op@string@display
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \ifx\op@shiftdecimalsep\op@string@none
+ \xdef\OP@a@i{\OP@a@w}%
+ \xdef\OP@a@d{0}%
+ \xdef\OP@b@i{\OP@b@w}%
+ \xdef\OP@b@d{0}%
+ \else\ifx\op@shiftdecimalsep\op@string@divisor
+ \xdef\OP@a@i{\OP@a@w}%
+ \xdef\OP@a@d{0}%
+ \xdef\OP@b@i{\OP@b@w}%
+ \xdef\OP@b@d{0}%
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \else
+ \edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
+ \op@mulpowerten{a}{\op@shift}%
+ \op@mulpowerten{b}{\op@shift}%
+ \fi\fi
+ \fi
+ \ifop@period
+ \op@div{1}{a}{b}{q}{r}%
+ \else
+ \op@div{0}{a}{b}{q}{r}%
+ \fi
+ \ifx\op@style\op@string@display
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+ \op@copy{q}{qq}%
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \ifx\op@shiftdecimalsep\op@string@none
+ \def\op@shift{0}%
+ \op@count@v=\OP@a@d
+ \advance\op@count@v by-\OP@b@d\relax
+ \ifnum\op@count@v>0
+ \op@divpowerten{qq}{\the\op@count@v}%
+ \else
+ \op@count@v=-\op@count@v
+ \op@mulpowerten{qq}{\the\op@count@v}%
+ \fi
+ \else\ifx\op@shiftdecimalsep\op@string@divisor
+ \edef\op@shift{\OP@a@d}%
+ \op@count@v=\OP@a@d
+ \advance\op@count@v by-\OP@b@d\relax
+ \ifnum\op@count@v>0
+ \op@divpowerten{qq}{\the\op@count@v}%
+ \else
+ \op@count@v=-\op@count@v
+ \op@mulpowerten{qq}{\the\op@count@v}%
+ \fi
+ \edef\op@shift{\OP@b@d}%
+ \op@split{#2}{a}%
+ \ifx\op@strikedecimalsepsymbol\empty
+ \op@unzero{a}%
+ \else
+ \op@count@z=\OP@a@w
+ \fi
+ \op@mulpowerten{a}{\OP@b@d}%
+ \ifx\op@strikedecimalsepsymbol\empty\else
+ \advance\op@count@z by-\OP@a@d
+ \op@format{\the\op@count@z}{\OP@a@d}{a}%
+ \fi
+ \xdef\OP@b@i{\OP@b@w}%
+ \xdef\OP@b@d{0}%
+ \ifx\op@strikedecimalsepsymbol\empty
+ \op@unzero{b}%
+ \fi
+ \else
+ \edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
+ \ifx\op@strikedecimalsepsymbol\empty
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \else
+ \op@count@z=\OP@a@w
+ \op@count@i=\OP@b@w
+ \fi
+ \op@mulpowerten{a}{\op@shift}%
+ \op@mulpowerten{b}{\op@shift}%
+ \ifx\op@strikedecimalsepsymbol\empty\else
+ \advance\op@count@z by-\OP@a@d
+ \op@format{\the\op@count@z}{\OP@a@d}{a}%
+ \advance\op@count@i by-\OP@b@d
+ \op@format{\the\op@count@i}{\OP@b@d}{b}%
+ \fi
+ \fi\fi
+ \ifx\op@country\op@string@french
+ \op@divdisplayone
+ \else \ifx\op@country\op@string@american
+ \op@divdisplayone
+ \else \ifx\op@country\op@string@russian
+ \op@divdisplayone
+ \else
+ \op@error{Country \op@country\space isn't recognize}
+ {For now, only `french', `american' and
+ `russian' are valid}%
+ \fi\fi\fi
+ \else
+ \ifnum\OP@a@s=\OP@b@s\else
+ \xdef\OP@q@s{1}%
+ \fi
+ \mathsurround=\z@\relax
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \op@unzero{q}%
+ \fi
+ \op@unsplit{a}{@a}%
+ \op@unsplit{b}{@b}%
+ \op@unsplit{q}{@q}%
+ \ifnum\OP@a@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@a)$%
+ \else
+ $\Op@@a$%
+ \fi
+ \else
+ $\Op@@a$%
+ \fi
+ $\>$\nobreak\op@divsymbol$\>$\penalty\binoppenalty
+ \ifnum\OP@b@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@b)$%
+ \else \ifx\op@parenthesisnegative\op@string@last
+ $(\Op@@b)$%
+ \else
+ $\Op@@b$%
+ \fi\fi
+ \else
+ $\Op@@b$%
+ \fi
+ \op@cmp{zero}{r}%
+ \ifopeq
+ $\;$\nobreak\op@equalsymbol$\;$\penalty\relpenalty
+ \setbox0=\hbox{\Op@@q}%
+ \else
+ \ifop@period
+ $\;$\nobreak\op@equalsymbol$\;$\penalty\relpenalty
+ \setbox0=\hbox{%
+ \Op@@q
+ \setbox1=\hbox{0}%
+ \begingroup
+ \opcolumnwidth=\wd1
+ \ophline(-\op@lengthperiod,\op@vruleperiod){\op@lengthperiod}%
+ \endgroup
+ \op@afterperiodsymbol
+ }%
+ \else
+ $\;$\nobreak\op@approxsymbol$\;$\penalty\relpenalty
+ \setbox0=\hbox{\Op@@q}%
+ \fi
+ \fi
+ \ifnum\OP@q@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\box0)$%
+ \else
+ $\box0$%
+ \fi
+ \else
+ $\box0$%
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+\def\opidiv{\@ifnextchar*{\op@idivstar}{\op@idivnostar}}
+\def\op@idivstar*#1#2#3#4{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Ajout du 20/11/2006 %%%
+%%% Sur indication de Cristophe Poulain %%%
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \op@error{divisor must be nonzero}%
+ {You have to learn some math}%
+ \fi
+%%% Fin ajout %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
+ \op@mulpowerten{a}{\op@shift}%
+ \op@mulpowerten{b}{\op@shift}%
+ \xdef\OP@a@s{0}%
+ \xdef\OP@b@s{0}%
+ \op@periodfalse
+ \op@div{2}{a}{b}{q}{r}%
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \ifnum\OP@a@s=0\relax
+ \ifnum\OP@b@s=0\relax
+ \else
+ \xdef\OP@q@s{1}%
+ \fi
+ \else
+ \op@add{one}{q}{q}%
+ \ifnum\OP@b@s=0\relax
+ \xdef\OP@q@s{1}%
+ \fi
+ \fi
+ \ifop@error\else
+ \op@unsplit{q}{#3}%
+ \op@unsplit{r}{#4}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@idivnostar{\@ifnextchar[{\op@idivarg}{\op@idivarg[nil]}}
+\def\op@idivarg[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \op@periodfalse
+ \let\op@shiftdecimalsep\op@string@both
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Ajout du 20/11/2006 %%%
+%%% Sur indication de Cristophe Poulain %%%
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \op@error{divisor must be nonzero}%
+ {You have to learn some math}%
+ \fi
+%%% Fin ajout %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifx\op@style\op@string@display
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
+ \op@mulpowerten{a}{\op@shift}%
+ \op@mulpowerten{b}{\op@shift}%
+ \fi
+ \xdef\OP@a@s{0}%
+ \xdef\OP@b@s{0}%
+ \op@div{2}{a}{b}{q}{r}%
+ \op@split{#2}{a}%
+ \op@split{#3}{b}%
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \ifx\op@style\op@string@display
+ \op@copy{q}{qq}%
+ \edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
+ \ifx\op@strikedecimalsepsymbol\empty\else
+ \op@count@z=\OP@a@w
+ \op@count@i=\OP@b@w
+ \fi
+ \op@mulpowerten{a}{\op@shift}%
+ \op@mulpowerten{b}{\op@shift}%
+ \ifx\op@strikedecimalsepsymbol\empty\else
+ \advance\op@count@z by-\OP@a@d
+ \op@format{\the\op@count@z}{\OP@a@d}{a}%
+ \advance\op@count@i by-\OP@b@d
+ \op@format{\the\op@count@i}{\OP@b@d}{b}%
+ \fi
+ \ifx\op@country\op@string@french
+ \op@divdisplayone
+ \else \ifx\op@country\op@string@american
+ \op@divdisplayone
+ \else \ifx\op@country\op@string@russian
+ \op@divdisplayone
+ \else
+ \op@error{Country \op@country\space isn't recognize}
+ {For now, only `french', `american' and
+ `russian' are valid}%
+ \fi\fi\fi
+ \else
+ \ifnum\OP@a@s=0\relax
+ \ifnum\OP@b@s=0\relax
+ \else
+ \xdef\OP@q@s{1}%
+ \fi
+ \else
+ \op@add{q}{one}{q}%
+ \op@sub{b}{r}{r}
+ \ifnum\OP@b@s=0\relax
+ \xdef\OP@q@s{1}%
+ \else
+ \fi
+ \fi
+ \mathsurround=\z@\relax
+ \ifop@deletezero
+ \op@unzero{a}%
+ \op@unzero{b}%
+ \op@unzero{q}%
+ \fi
+ \op@unsplit{a}{@a}%
+ \op@unsplit{b}{@b}%
+ \op@unsplit{q}{@q}%
+ \op@unsplit{r}{@r}%
+ \ifnum\OP@a@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@a)$%
+ \else
+ $\Op@@a$%
+ \fi
+ \else
+ $\Op@@a$%
+ \fi
+ $\;$\nobreak\op@equalsymbol$\;$\penalty\relpenalty
+ \ifnum\OP@b@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@b)$%
+ \else \ifx\op@parenthesisnegative\op@string@last
+ $\Op@@b$%
+ \else
+ $\Op@@b$%
+ \fi\fi
+ \else
+ $\Op@@b$%
+ \fi
+ $\>$\nobreak\op@mulsymbol$\>$\penalty\binoppenalty
+ \ifnum\OP@q@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@q)$%
+ \else \ifx\op@parenthesisnegative\op@string@last
+ $(\Op@@q)$%
+ \else
+ $\Op@@q$%
+ \fi\fi
+ \else
+ $\Op@@q$%
+ \fi
+ \op@cmp{zero}{r}%
+ \ifopeq\else
+ $\>$\nobreak\op@addsymbol$\>$\penalty\binoppenalty
+ \ifnum\OP@q@s=1\relax
+ \ifx\op@parenthesisnegative\op@string@all
+ $(\Op@@r)$%
+ \else \ifx\op@parenthesisnegative\op@string@last
+ $(\Op@@r)$%
+ \else
+ $\Op@@r$%
+ \fi\fi
+ \else
+ $\Op@@r$%
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@divdisplayone{%
+ \begingroup
+ \op@count@z=\z@\relax
+ \op@count@i=\OP@a@w
+ \loop
+ \ifnum\@nameuse{OP@a@\the\op@count@i}=0
+ \advance\op@count@i by-1
+ \advance\op@count@z by1
+ \repeat
+ \op@count@i=\op@firstlength
+ \advance\op@count@i by\op@count@z
+ \xdef\op@firstlength{\the\op@count@i}%
+ \setbox2=\vbox{%
+ \op@count@i=\op@firstlength
+ \advance\op@count@i by1
+ \hbox{%
+ \ifx\op@displayintermediary\op@string@none\else
+% add 0.25
+ \ifx\op@displayintermediary\op@string@None\else
+% end add 0.25
+ \kern\opcolumnwidth
+ \advance\op@count@i by1
+% add 0.25
+ \fi
+% end add 0.25
+ \fi
+ \ifop@dividendbridge
+ \vrule width0pt depth0pt height\oplineheight
+ \opvline(0,1){0.4}%
+ \ophline(0,1){\op@firstlength}%
+ \opvline(\op@firstlength,1){0.4}%
+ \fi
+ \op@display{operandstyle.1}{a}%
+ \ifnum\op@shift=0\relax\else
+ \op@count@v=\op@shift
+ \advance\op@count@v by\OP@a@d
+ \oplput(-\the\op@count@v,0){\op@strikedecimalsepsymbol}%
+ \fi
+ }%
+ \op@count@z=\OP@q@w
+ \op@count@ii=1\relax
+ \ifx\op@displayintermediary\op@string@none
+ \advance\op@count@i by-1\relax
+% add 0.25
+ \else\ifx\op@displayintermediary\op@string@None
+ \advance\op@count@i by-1\relax
+% end add 0.25
+ \else
+ \op@count@iv=\@nameuse{OP@q@\the\op@count@z}\relax
+ \op@count@iii=\op@count@i
+ \advance\op@count@iii by-\@nameuse{OP@T\the\op@count@iv @w}%
+ \hbox{%
+ \ifx\op@voperator\op@string@center
+ \oplput(0,0.5){\op@subsymbol}%
+ \else\ifx\op@voperator\op@string@top
+ \oplput(0,1){\op@subsymbol}%
+ \else
+ \oplput(0,0){\op@subsymbol}%
+ \fi\fi
+ \ophline(1,-0.25){\op@firstlength}%
+ \advance\op@count@ii by1
+ \kern\op@count@iii\opcolumnwidth
+ \op@display{intermediarystyle.1}%
+ {T\the\op@count@iv}%
+ }%
+% modif 0.25
+ \fi\fi
+% end modif 0.25
+ {\global\setbox4=\hbox{}\setbox4=\box4}%
+ \loop
+ \advance\op@count@z by-1
+ \advance\op@count@i by1\relax
+ \ifnum\op@count@z>0\relax
+ \op@count@iv=\@nameuse{OP@q@\the\op@count@z}\relax
+ \ifnum\op@count@iv=0
+ \ifx\op@displayintermediary\op@string@all
+ \op@count@v=\op@count@i
+ \advance\op@count@v by-\@nameuse{OP@R\the\op@count@ii @w}%
+ \hbox{%
+ \kern\op@count@v\opcolumnwidth
+ \op@display{remainderstyle.\the\op@count@ii}%
+ {R\the\op@count@ii}%
+ }%
+ \op@count@iii=\op@count@i
+ \advance\op@count@iii by-\@nameuse{OP@T\the\op@count@iv @w}%
+ \hbox{%
+ \kern\op@count@v\opcolumnwidth
+ \ifx\op@voperator\op@string@center
+ \oplput(-1,0.5){\op@subsymbol}%
+ \else\ifx\op@voperator\op@string@top
+ \oplput(-1,1){\op@subsymbol}%
+ \else
+ \oplput(-1,0){\op@subsymbol}%
+ \fi\fi
+ \ophline(0,-0.25){\@nameuse{OP@R\the\op@count@ii @w}}%
+ \kern-\op@count@v\opcolumnwidth
+ \kern\op@count@iii\opcolumnwidth
+ \op@display{intermediarystyle.\the\op@count@ii}%
+ {T\the\op@count@iv}%
+ }%
+ \else
+ \ifnum\@nameuse{OP@R\the\op@count@ii @w}=2
+ \ifnum\@nameuse{OP@R\the\op@count@ii @2}=0
+ \op@makebox{1}{0}{remainderstyle.\the\op@count@ii.1}{zero}%
+ \setbox4=\hbox to\opcolumnwidth{\hss\box0\hss}%
+ \fi
+ \fi
+ \fi
+ \advance\op@count@ii by1\relax
+ \else
+ \op@count@v=\op@count@i
+ \advance\op@count@v by-\@nameuse{OP@R\the\op@count@ii @w}%
+ \ifvoid4\relax\else
+ \advance\op@count@v by-1
+ \fi
+ \hbox{%
+ \kern\op@count@v\opcolumnwidth\copy4
+ \op@display{remainderstyle.\the\op@count@ii}%
+ {R\the\op@count@ii}%
+ }%
+ \advance\op@count@ii by1\relax
+ \ifx\op@displayintermediary\op@string@none
+% add 0.25
+ \else\ifx\op@displayintermediary\op@string@None
+% end add 0.25
+ \else
+ \op@count@iii=\op@count@i
+ \advance\op@count@iii by-\@nameuse{OP@T\the\op@count@iv @w}%
+ \hbox{%
+ \kern\op@count@v\opcolumnwidth
+ \ifx\op@voperator\op@string@center
+ \oplput(-1,0.5){\op@subsymbol}%
+ \else\ifx\op@voperator\op@string@top
+ \oplput(-1,1){\op@subsymbol}%
+ \else
+ \oplput(-1,0){\op@subsymbol}%
+ \fi\fi
+ \advance\op@count@ii by-1
+ \ifvoid4\relax
+ \ophline(0,-0.25){\@nameuse{OP@R\the\op@count@ii @w}}%
+ \else
+ \ophline(0,-0.25){\@nameuse{OP@T\the\op@count@iv @w}}%
+ \ophline(\@nameuse{OP@T\the\op@count@iv @w},-0.25){1}%
+ {\setbox4=\box4}%
+ \fi
+ \advance\op@count@ii by1
+ \kern-\op@count@v\opcolumnwidth
+ \kern\op@count@iii\opcolumnwidth
+ \op@display{intermediarystyle.\the\op@count@ii}%
+ {T\the\op@count@iv}%
+ }%
+% modif 0.25
+ \fi\fi
+% end modif 0.25
+ \fi
+ \repeat
+ \advance\op@count@i by-1
+ \op@count@iii=\op@count@i
+ \advance\op@count@iii by-\@nameuse{OP@R\the\op@count@ii @w}%
+ \hbox{%
+ \kern\op@count@iii\opcolumnwidth
+ \op@display{remainderstyle.\the\op@count@ii}%
+ {R\the\op@count@ii}%
+ }%
+ }%
+ \setbox3=\vbox{%
+ \op@count@v=\op@max{\OP@qq@w}{\OP@b@w}
+ \hbox{\ophline(-0.5,-0.25){\the\op@count@v.5}%
+ \op@display{operandstyle.2}{b}%
+ \ifnum\op@shift=0\relax\else
+ \op@count@v=\op@shift
+ \advance\op@count@v by\OP@b@d
+ \oplput(-\the\op@count@v,0){\op@strikedecimalsepsymbol}%
+ \fi}
+ \hbox{\op@display{resultstyle}{qq}}
+ }%
+ \dimen0=\ht2
+ \ifdim\dimen0>\ht3
+ \ht3=\ht2
+ \else
+ \ht2=\ht3
+ \fi
+ \ifx\op@voperation\op@string@top
+ \dimen0=\ht2
+ \advance\dimen0 by-0.5\oplineheight
+ \ht2=0.75\oplineheight
+ \ht3=0.75\oplineheight
+ \dp2=\dimen0
+ \dp2=\dimen0
+ \fi
+ \setbox1=\hbox{%
+ \box2
+ \kern0.5\opcolumnwidth
+ \kern-0.5\op@hrulewidth
+ \ifx\voperation\op@string@top
+ \vrule width\op@hrulewidth
+ \else
+ \vrule width\op@hrulewidth
+ \fi
+ \kern0.5\opcolumnwidth
+ \kern-0.5\op@hrulewidth
+ \box3
+ }%
+ \ifx\op@voperation\op@string@center
+ \setbox1=\hbox{$\vcenter{\box1}$}%
+ \fi
+ \leavevmode\box1
+ \endgroup
+}
+\def\op@div#1#2#3#4#5{%
+ \begingroup
+ \def\op@divmode{#1}%
+ \op@copy{#2}{da}%
+ \op@copy{#3}{db}%
+ \op@count@iv=0
+ \op@count@iii=\op@max{\OP@da@d}{\OP@db@d}\relax
+ \op@powten{da}{\the\op@count@iii}%
+ \op@powten{db}{\the\op@count@iii}%
+% add 0.23
+ \op@unzero{da}%
+ \op@unzero{db}%
+% end 0.23
+ \ifnum\op@divmode=1
+ \op@cmp{da}{maxinteger}%
+ \ifopgt
+ \op@warning{I can't deal period with such great dividend
+ (max = 2147483647).^^J
+ Use of maxdivstep instead period.}%
+ \def\op@divmode{0}%
+ \else \op@cmp{db}{maxdivperiod}%
+ \ifopgt
+ \op@warning{I can't deal period with such great divisor
+ (max = 214748363).^^J
+ Use of maxdivstep instead period.}%
+ \def\op@divmode{0}%
+ \else
+ \op@unsplit{da}{@a}%
+ \op@unsplit{db}{@b}%
+ \op@divperiod{\Op@@a}{\Op@@b}{op@lengthperiod}%
+ \ifnum\op@lengthperiod>\op@safedivstep
+ \op@warning{Period of division is too big
+ (\op@lengthperiod\space > safedivstep).^^J
+ \space\space\space Division will stop
+ before reach it.}%
+ \fi
+ \fi\fi
+ \fi
+ \op@multable{db}%
+ \op@copy{da}{R}%
+ \op@cmp{da}{db}%
+ \ifople
+ \op@count@i=\OP@da@w
+ \else
+ \xdef\OP@R@d{0}%
+ \xdef\OP@R@s{0}%
+ \op@count@i=\@nameuse{OP@db@w}%
+ \op@leftdividend{\the\op@count@i}%
+ \op@cmp{R}{db}%
+ \ifoplt
+ \ifnum\OP@da@w>\op@count@i
+ \advance\op@count@i by1
+ \op@leftdividend{\the\op@count@i}%
+ \fi
+ \fi
+ \fi
+ \xdef\op@firstlength{\the\op@count@i}%
+ \op@count@i=-\op@count@i
+ \advance\op@count@i by\OP@da@w
+ \op@copy{R}{R0}%
+ \op@copy{zero}{dq}%
+ \op@count@ii=0
+ \op@againtrue
+ \loop
+ \ifop@again
+ \op@tableextract{R}%
+ \op@multen{dq}%
+ \@namexdef{OP@dq@1}{\op@k}%
+ \op@sub{R}{T\op@k}{dr}%
+ \op@unzero{T\op@k}%
+ \op@multen{dr}%
+ \ifnum\op@count@i>0
+ \@namexdef{OP@dr@1}{\@nameuse{OP@da@\the\op@count@i}}%
+ \fi
+ \advance\op@count@i by-1\relax
+ \op@unzero{dr}%
+ \ifnum\OP@dr@w=1
+ \xdef\OP@dr@w{2}%
+ \xdef\OP@dr@i{2}%
+ \@namexdef{OP@dr@2}{0}%
+ \fi
+ \advance\op@count@ii by1\relax
+ \op@copy{dr}{R\the\op@count@ii}%
+ \op@copy{dr}{R}%
+ \ifcase\op@divmode\relax
+ \ifnum\op@count@ii<\op@maxdivstep\relax\else
+ \op@againfalse
+ \fi
+ \ifnum\op@count@i<0\relax%
+ \op@cmp{zero}{R}%
+ \ifopeq
+ \op@againfalse
+ \fi
+ \fi
+ \or
+ \ifnum\op@count@ii<\op@safedivstep\relax\else
+ \op@againfalse
+ \fi
+ \ifnum\op@count@i<-\op@lengthperiod\relax
+ \op@count@iv=\op@count@ii
+ \advance\op@count@iv by-\op@lengthperiod
+ \op@cmp{R\the\op@count@iv}{R\the\op@count@ii}%
+ \ifopeq
+ \op@againfalse
+ \fi
+ \fi
+ \or
+ \ifnum\op@count@i=-1
+ \op@againfalse
+ \fi
+ \fi
+ \repeat
+ \op@copy{zero}{T0}%
+ \advance\op@count@i by1\relax
+ \ifnum\op@count@i<0
+ \xdef\OP@dq@d{-\the\op@count@i}%
+ \op@count@z=\OP@dq@w
+ \advance\op@count@z by\op@count@i
+ \xdef\OP@dq@i{\the\op@count@z}%
+ \fi
+ \op@unzero{dq}%
+ \op@copy{dq}{#4}%
+ \op@unzero{dr}%
+ \op@copy{dr}{R}%
+ \op@rshift{1}{dr}%
+ \op@copy{dr}{R\the\op@count@ii}%
+ \op@count@i=\op@count@iii
+ \advance\op@count@i by1
+ \advance\op@count@i by\OP@dq@d\relax
+ \op@count@ii=\op@count@i
+ \advance\op@count@ii by\OP@R@w
+ \op@format{\the\op@count@ii}{0}{R}%
+ \op@count@z=\OP@R@w
+ \advance\op@count@z by-\op@count@i
+ \xdef\OP@R@i{\the\op@count@z}%
+ \xdef\OP@R@d{\the\op@count@i}%
+ \op@unzero{R}%
+ \op@copy{R}{#5}%
+ \endgroup
+}
+\def\op@powten#1#2{%
+ \begingroup
+ \op@count@z=#2\relax
+ \advance\op@count@z by-\@nameuse{OP@#1@d}%
+ \@namexdef{OP@#1@d}{0}%
+ \op@count@i=\@nameuse{OP@#1@w}%
+ \advance\op@count@i by\op@count@z
+ \@namexdef{OP@#1@w}{\the\op@count@i}%
+ \@namexdef{OP@#1@i}{\the\op@count@i}%
+ \op@count@ii=\op@count@i
+ \advance\op@count@ii by-\op@count@z
+ \loop
+ \ifnum\op@count@ii>0
+ \@namexdef{OP@#1@\the\op@count@i}{\@nameuse{OP@#1@\the\op@count@ii}}%
+ \advance\op@count@i by-1
+ \advance\op@count@ii by-1
+ \repeat
+ \loop
+ \ifnum\op@count@i>0
+ \@namexdef{OP@#1@\the\op@count@i}{0}%
+ \advance\op@count@i by-1
+ \repeat
+ \endgroup
+}
+\def\opdivperiod#1#2#3{%
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@error\else
+ \op@unzero{a}%
+ \edef\OP@a@i{\OP@a@w}%
+ \def\OP@a@d{0}%
+ \def\OP@a@s{0}%
+ \op@unzero{b}%
+ \edef\OP@b@i{\OP@b@w}%
+ \def\OP@b@d{0}%
+ \def\OP@b@s{0}%
+ \op@cmp{a}{zero}%
+ \ifopeq
+ \op@unsplit{one}{#3}%
+ \else
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \op@error{divisor must be nonzero}%
+ {You have to learn some math}%
+ \else
+ \op@cmp{a}{maxdivperiod}%
+ \ifopgt
+ \op@error{Arguments of \string\opdivperiod\space
+ must be less than 214748363}%
+ {Sorry}%
+ \else
+ \op@cmp{b}{maxdivperiod}%
+ \ifopgt
+ \op@error{Arguments of \string\opdivperiod\space
+ must be less than 214748363}%
+ {Sorry}%
+ \else
+ \op@unsplit{a}{@a}%
+ \op@unsplit{b}{@b}%
+ \op@divperiod{\Op@@a}{\Op@@b}{Op@@r}%
+ \opcopy{@r}{#3}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifop@error\op@errorwrite\fi
+}
+\def\op@divperiod#1#2#3{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@ii=#2\relax
+ \ifnum\op@count@ii=0\relax
+ \@namexdef{#3}{1}%
+ \else
+ \op@gcd{\the\op@count@i}{\the\op@count@ii}{op@tmp}%
+ \op@count@iii=\op@tmp
+ \divide\op@count@ii by\op@count@iii
+ \op@twofiveQ{\the\op@count@ii}{op@tmp}%
+ \op@order{\op@tmp}{op@tmp}%
+ \@namexdef{#3}{\op@tmp}%
+ \fi
+ \endgroup
+}
+\def\opgcd#1#2#3{%
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@error\else
+ \def\OP@a@s{0}%
+ \def\OP@b@s{0}%
+ \op@cmp{a}{zero}%
+ \ifopeq
+ \op@error{Arguments of \string\opgcd\space must be nonzero}%
+ {You have to learn some math}%
+ \else
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \op@error{Arguments of \string\opgcd\space must be nonzero}%
+ {You have to learn some math}%
+ \else\ifnum\OP@a@d>0
+ \op@error{Arguments of \string\opgcd\space must be integer}%
+ {You have to learn some math}%
+ \else\ifnum\OP@b@d>0
+ \op@error{Arguments of \string\opgcd\space must be integer}%
+ {You have to learn some math}%
+ \else
+ \op@cmp{a}{maxinteger}%
+ \ifopgt
+ \op@error{Arguments of \string\opgcd\space must be less than
+ 2147483647}%
+ {Sorry}%
+ \else
+ \op@cmp{b}{maxinteger}%
+ \ifopgt
+ \op@error{Arguments of \string\opgcd\space must be less than
+ 2147483647}%
+ {Sorry}%
+ \else
+ \op@unsplit{a}{@a}%
+ \op@unsplit{b}{@b}%
+ \op@gcd{\Op@@a}{\Op@@b}{Op@@r}%
+ \opcopy{@r}{#3}%
+ \fi\fi\fi\fi\fi\fi
+ \fi
+ \ifop@error\op@errorwrite\fi
+}
+\def\op@gcd#1#2#3{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@ii=#2\relax
+ \loop
+ \op@count@iii=\op@count@i
+ \divide\op@count@iii by\op@count@ii
+ \multiply\op@count@iii by\op@count@ii
+ \advance\op@count@i by-\op@count@iii
+ \op@count@iii=\op@count@i\relax
+ \op@count@i=\op@count@ii\relax
+ \op@count@ii=\op@count@iii
+ \ifnum\op@count@ii>0
+ \repeat
+ \@namexdef{#3}{\the\op@count@i}%
+ \endgroup
+}
+\def\op@twofiveQ#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \loop
+ \op@count@ii=\op@count@i
+ \divide\op@count@ii by2
+ \multiply\op@count@ii by2
+ \ifnum\op@count@ii=\op@count@i
+ \divide\op@count@i by2
+ \repeat
+ \loop
+ \op@count@ii=\op@count@i
+ \divide\op@count@ii by5
+ \multiply\op@count@ii by5
+ \ifnum\op@count@ii=\op@count@i
+ \divide\op@count@i by5
+ \repeat
+ \@namexdef{#2}{\the\op@count@i}%
+ \endgroup
+}
+\def\op@order#1#2{%
+ \begingroup
+ \op@count@i=1\relax
+ \op@count@ii=0
+ \loop
+ \multiply\op@count@i by10
+ \op@count@iii=\op@count@i
+ \divide\op@count@iii by#1\relax
+ \multiply\op@count@iii by#1\relax
+ \advance\op@count@i by-\op@count@iii
+ \advance\op@count@ii by1
+ \ifnum\op@count@i>1
+ \repeat
+ \@namexdef{#2}{\the\op@count@ii}
+ \endgroup
+}
+\def\op@leftdividend#1{%
+ \begingroup
+ \op@count@z=#1\relax
+ \op@count@i=\OP@da@w
+ \xdef\OP@R@w{\the\op@count@z}%
+ \xdef\OP@R@i{\the\op@count@z}%
+ \loop
+ \@namexdef{OP@R@\the\op@count@z}{\@nameuse{OP@da@\the\op@count@i}}%
+ \advance\op@count@i by-1
+ \advance\op@count@z by-1
+ \ifnum\op@count@z>0
+ \repeat
+ \endgroup
+}
+\def\op@multen#1{%
+ \begingroup
+ \op@count@z=\@nameuse{OP@#1@w}\relax
+ \op@count@i=\op@count@z
+ \advance\op@count@i by1
+ \@namexdef{OP@#1@w}{\the\op@count@i}%
+ \@namexdef{OP@#1@i}{\the\op@count@i}%
+ \loop
+ \ifnum\op@count@z>0
+ \@namexdef{OP@#1@\the\op@count@i}{\@nameuse{OP@#1@\the\op@count@z}}%
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \@namexdef{OP@#1@1}{0}%
+ \endgroup
+}
+\def\op@mulpowerten#1#2{%
+ \begingroup
+ \ifnum\@nameuse{OP@#1@d}<#2\relax
+ \op@count@z=#2\relax
+ \advance\op@count@z by-\@nameuse{OP@#1@d}\relax
+ \op@count@ii=\@nameuse{OP@#1@w}%
+ \op@count@i=\@nameuse{OP@#1@w}%
+ \advance\op@count@i by\op@count@z
+ \@namexdef{OP@#1@w}{\the\op@count@i}%
+ \@namexdef{OP@#1@i}{\the\op@count@i}%
+ \@namexdef{OP@#1@d}{0}%
+ \loop
+ \ifnum\op@count@ii>0
+ \@namexdef{OP@#1@\the\op@count@i}{\@nameuse{OP@#1@\the\op@count@ii}}%
+ \advance\op@count@i by-1
+ \advance\op@count@ii by-1
+ \repeat
+ \loop
+ \ifnum\op@count@z>0
+ \@namexdef{OP@#1@\the\op@count@z}{0}%
+ \advance\op@count@z by-1\relax
+ \repeat
+ \else
+ \op@count@z=\@nameuse{OP@#1@d}\relax
+ \advance\op@count@z by-#2\relax
+ \@namexdef{OP@#1@d}{\the\op@count@z}%
+ \op@count@z=\@nameuse{OP@#1@i}\relax
+ \advance\op@count@z by#2\relax
+ \@namexdef{OP@#1@i}{\the\op@count@z}%
+ \fi
+ \op@unzero{#1}%
+ \endgroup
+}
+\def\op@divpowerten#1#2{%
+ \begingroup
+ \ifnum\@nameuse{OP@#1@i}>#2\relax
+ \op@count@z=\@nameuse{OP@#1@d}\relax
+ \advance\op@count@z by#2\relax
+ \@namexdef{OP@#1@d}{\the\op@count@z}%
+ \op@count@z=\@nameuse{OP@#1@i}\relax
+ \advance\op@count@z by-#2\relax
+ \@namexdef{OP@#1@i}{\the\op@count@z}%
+ \else
+ \op@count@z=\@nameuse{OP@#1@d}\relax
+ \advance\op@count@z by#2\relax
+ \@namexdef{OP@#1@d}{\the\op@count@z}%
+ \@namexdef{OP@#1@i}{1}%
+ \advance\op@count@z by1\relax
+ \op@count@i=\@nameuse{OP@#1@w}%
+ \@namexdef{OP@#1@w}{\the\op@count@z}%
+ \advance\op@count@z by1
+ \loop
+ \ifnum\op@count@i<\op@count@z
+ \advance\op@count@i by1
+ \@namexdef{OP@#1@\the\op@count@i}{0}%
+ \repeat
+ \fi
+ \op@unzero{#1}%
+ \endgroup
+}
+\def\op@tableextract#1{%
+ \op@cmp{#1}{T5}%
+ \ifopge \op@cmp{#1}{T7}%
+ \ifopge \op@cmp{#1}{T8}%
+ \ifopge \op@cmp{#1}{T9}%
+ \ifopge \gdef\op@k{9}%
+ \else \gdef\op@k{8}%
+ \fi
+ \else \gdef\op@k{7}%
+ \fi
+ \else \op@cmp{#1}{T6}%
+ \ifopge \gdef\op@k{6}%
+ \else \gdef\op@k{5}%
+ \fi
+ \fi
+ \else \op@cmp{#1}{T2}%
+ \ifopge \op@cmp{#1}{T3}%
+ \ifopge \op@cmp{#1}{T4}%
+ \ifopge \gdef\op@k{4}%
+ \else \gdef\op@k{3}%
+ \fi
+ \else \gdef\op@k{2}%
+ \fi
+ \else \op@cmp{#1}{T1}%
+ \ifopge \gdef\op@k{1}%
+ \else \gdef\op@k{0}%
+ \fi
+ \fi
+ \fi
+}
+\def\opwidth#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \@namexdef{Op@#2}{\OP@a@w}%
+ \fi
+}
+\def\opintegerwidth#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \@namexdef{Op@#2}{\OP@a@i}%
+ \fi
+}
+\def\opdecimalwidth#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \@namexdef{Op@#2}{\OP@a@d}%
+ \fi
+}
+\def\opinteger#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@integer{a}{b}%
+ \op@unsplit{b}{#2}%
+ \fi
+}
+\def\op@integer#1#2{%
+ \begingroup
+ \op@unzero{#1}%
+ \op@count@z=\@nameuse{OP@#1@d}\relax
+ \ifnum\op@count@z>0\relax
+ \op@count@i=0
+ \loop
+ \ifnum\op@count@z<\@nameuse{OP@#1@w}%
+ \advance\op@count@z by1\relax
+ \advance\op@count@i by1\relax
+ \@namexdef{OP@#2@\the\op@count@i}{\@nameuse{OP@#1@\the\op@count@z}}%
+ \repeat
+ \@namexdef{OP@#2@w}{\the\op@count@i}%
+ \@namexdef{OP@#2@i}{\the\op@count@i}%
+ \@namexdef{OP@#2@d}{0}%
+ \else
+ \op@copy{#1}{#2}%
+ \fi
+ \@namexdef{OP@#2@s}{0}%
+ \endgroup
+}
+\def\opdecimal#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@decimal{a}{b}%
+ \op@unsplit{b}{#2}%
+ \fi
+}
+\def\op@decimal#1#2{%
+ \op@unzero{#1}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifnum\@nameuse{OP@#1@d}=0\relax
+ \op@copy{zero}{#2}%
+ \else
+ \op@copy{#1}{#2}%
+ \@namexdef{OP@#2@i}{\@nameuse{OP@#1@d}}%
+ \@namexdef{OP@#2@w}{\@nameuse{OP@#1@d}}%
+ \@namexdef{OP@#2@d}{0}%
+ \@namexdef{OP@#2@s}{0}%
+ \fi
+ \fi
+}
+\def\opgetdigit#1#2#3{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifnum\@nameuse{OP@a@w}>#2\relax
+ \@namexdef{Op@#3}{\@nameuse{OP@a@#2}}%
+ \else
+ \@namexdef{Op@#3}{0}%
+ \fi
+ \fi
+}
+\def\opsetdigit#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#3}{b}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unsplit{b}{@b}%
+ \@namexdef{OP@a@#2}{\Op@@b}%
+ \ifnum\OP@a@w<#2\relax
+ \op@count@z=\OP@a@w\relax
+ \advance\op@count@z by1\relax
+ \loop
+ \ifnum\op@count@z<#2\relax
+ \@namexdef{OP@a@\the\op@count@z}{0}%
+ \advance\op@count@z by1
+ \repeat
+ \xdef\OP@a@w{#2}%
+ \op@count@z=#2\relax
+ \advance\op@count@z by-\OP@a@d
+ \xdef\OP@a@i{\the\op@count@z}%
+ \fi
+ \op@unsplit{a}{#1}%
+ \fi
+ \endgroup
+}
+\def\opgetintegerdigit#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@count@z=\OP@a@d
+ \advance\op@count@z by#2\relax
+ \ifnum\OP@a@w>\op@count@z\relax
+ \@namexdef{Op@#3}{\@nameuse{OP@a@\the\op@count@z}}%
+ \else
+ \@namexdef{Op@#3}{0}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\opsetintegerdigit#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#3}{b}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unsplit{b}{@b}%
+ \op@count@z=\OP@a@d
+ \advance\op@count@z by#2\relax
+ \@namexdef{OP@a@\the\op@count@z}{\Op@@b}%
+ \ifnum\OP@a@w>\op@count@z\relax\else
+ \op@count@i=\OP@a@w
+ \xdef\OP@a@w{\the\op@count@z}%
+ \advance\op@count@i by1
+ \loop
+ \ifnum\op@count@i<\op@count@z
+ \@namexdef{OP@a@\the\op@count@i}{0}%
+ \advance\op@count@i by1
+ \repeat
+ \advance\op@count@z by-\OP@a@d
+ \xdef\OP@a@i{\the\op@count@z}%
+ \fi
+ \op@unsplit{a}{#1}%
+ \fi
+ \endgroup
+}
+\def\opgetdecimaldigit#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifnum\OP@a@d<#2\relax
+ \@namexdef{Op@#3}{0}%
+ \else
+ \op@count@z=\OP@a@d
+ \advance\op@count@z by-#2\relax
+ \advance\op@count@z by1
+ \@namexdef{Op@#3}{\@nameuse{OP@a@\the\op@count@z}}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\opsetdecimaldigit#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#3}{b}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unsplit{b}{@b}%
+ \ifnum\OP@a@d<\Op@@b\relax
+ \op@count@z=\Op@@b
+ \advance\op@count@z by-\OP@a@d
+%%% [2006/10/06] Bug find by Dave Jarvis.
+% \advance\op@count@z by1\relax
+%%% end bug fixing
+ \op@count@i=\OP@a@w
+ \advance\op@count@i by\op@count@z\relax
+ \op@count@z=\OP@a@w
+ \xdef\OP@a@w{\the\op@count@i}%
+ \xdef\OP@a@d{\Op@@b}%
+ \loop
+ \ifnum\op@count@z>0
+ \@namexdef{OP@a@\the\op@count@i}{\@nameuse{OP@a@\the\op@count@z}}%
+ \advance\op@count@z by-1
+ \advance\op@count@i by-1
+ \repeat
+ \loop
+ \ifnum\op@count@i>1
+ \@namexdef{OP@a@\the\op@count@i}{0}%
+ \advance\op@count@i by-1
+ \repeat
+%%% [2006/10/06] Bug find by Dave Jarvis.
+% \@namexdef{OP@a@1}{\Op@@b}%
+ \@namexdef{OP@a@1}{#2}%
+%%% end bug fixing
+ \else
+ \op@count@z=\OP@a@d
+%%% [2006/10/06] Bug find by Dave Jarvis.
+% \advance\op@count@z by-#2\relax
+ \advance\op@count@z by-\Op@@b\relax
+%%% end bug fixing
+ \advance\op@count@z by1
+%%% [2006/10/06] Bug find by Dave Jarvis.
+% \@namexdef{OP@a@\the\op@count@z}{\Op@@b}%
+ \@namexdef{OP@a@\the\op@count@z}{#2}%
+%%% end bug fixing
+ \fi
+ \op@unsplit{a}{#1}%
+ \fi
+ \endgroup
+}
+\def\opcastingoutnines#1#2{%
+ \begingroup
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@count@z=\OP@a@w\relax
+ \op@count@i=0\relax
+ \loop
+ \ifnum\op@count@z>0
+ \advance\op@count@i by\@nameuse{OP@a@\the\op@count@z}\relax
+ \ifnum\op@count@i>8
+ \advance\op@count@i by-9
+ \fi
+ \advance\op@count@z by-1
+ \repeat
+ \opcopy{\the\op@count@i}{#2}%
+ \fi
+ \endgroup
+}
+\def\opcastingoutelevens#1#2{%
+ \begingroup
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@count@ii=\OP@a@w
+ \advance\op@count@ii by1\relax
+ \op@count@i=0\relax
+ \op@count@z=-1\relax
+ \loop
+ \advance\op@count@z by2\relax
+ \ifnum\op@count@z<\op@count@ii
+ \advance\op@count@i by\@nameuse{OP@a@\the\op@count@z}\relax
+ \ifnum\op@count@i>10
+ \advance\op@count@i by-11
+ \fi
+ \repeat
+ \op@count@z=0\relax
+ \loop
+ \advance\op@count@z by2\relax
+ \ifnum\op@count@z<\op@count@ii
+ \advance\op@count@i by-\@nameuse{OP@a@\the\op@count@z}\relax
+ \ifnum\op@count@i<0
+ \advance\op@count@i by11
+ \fi
+ \repeat
+ \opcopy{\the\op@count@i}{#2}%
+ \fi
+ \endgroup
+}
+\def\opneg#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@neg{a}{b}%
+ \op@unsplit{b}{#2}%
+ \fi
+}
+\def\op@neg#1#2{%
+ \begingroup
+ \op@copy{#1}{#2}%
+ \op@againfalse
+ \ifnum\@nameuse{OP@#2@d}>0
+ \op@againtrue
+ \else\ifnum\@nameuse{OP@#2@i}>1
+ \op@againtrue
+ \else\ifnum\@nameuse{OP@#2@1}>0
+ \op@againtrue
+ \fi\fi\fi
+ \ifop@again
+ \op@count@z=1
+ \advance\op@count@z by-\@nameuse{OP@#2@s}\relax
+ \@namexdef{OP@#2@s}{\the\op@count@z}%
+ \fi
+ \endgroup
+}
+\def\opabs#1#2{%
+ \op@split{#1}{a}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \xdef\OP@a@s{0}%
+ \op@unsplit{a}{#2}%
+ \fi
+}
+\def\oppower#1#2#3{%
+ \begingroup
+ \op@split{#1}{a}%
+ \op@split{#2}{b}%
+ \ifop@error\else
+ \op@unsplit{a}{@a}%
+ \op@unsplit{b}{@b}%
+ \ifnum\OP@b@d>0
+ \op@error{Exponent must be an integer}%
+ {You can't use \string\oppower\space with non integer
+ exponent}%
+ \else
+ \op@cmp{a}{zero}%
+ \ifopeq
+ \op@cmp{b}{zero}%
+ \ifopeq
+ \opcopy{1}{#3}%
+ \else\ifopgt
+ \opcopy{0}{#3}%
+ \else
+ \op@error{Power of zero with negative exponent is an
+ error}%
+ {Remember that negative exponent involve inverse}%
+ \fi\fi
+ \else
+ \op@cmp{b}{zero}%
+ \ifoplt
+ \xdef\OP@b@s{0}%
+ \op@unsplit{b}{@b}%
+ \opdiv*{1}{@a}{@a}%
+ \fi
+ \op@cmp{b}{maxpower}%
+ \ifopgt
+ \op@error{Exponent is too big (>1073741824)}%
+ {Sorry}%
+ \else
+ \op@count@z=0
+ \@namexdef{Op@@e0}{1}%
+ \xdef\Op@@tmp{1}%
+ \@namexdef{Op@@p0}{\Op@@a}%
+ \@namexdef{Op@@ptmp}{\@nameuse{Op@@p0}}%
+ \loop
+ \ifnum\@nameuse{Op@@e\the\op@count@z}<\Op@@b
+ \opadd*{@tmp}{@tmp}{@@tmp}%
+ \opmul*{@ptmp}{@ptmp}{@@ptmp}%
+ \advance\op@count@z by1
+ \xdef\Op@@tmp{\Op@@@tmp}%
+ \xdef\Op@@ptmp{\Op@@@ptmp}%
+ \@namexdef{Op@@e\the\op@count@z}{\Op@@@tmp}%
+ \@namexdef{Op@@p\the\op@count@z}{\Op@@@ptmp}%
+ \repeat
+ \opcopy{1}{@r}%
+ \loop
+ \ifnum\Op@@b>0\relax
+ \ifnum\Op@@b<\@nameuse{Op@@e\the\op@count@z}\relax
+ \else
+ \opmul*{@r}{@p\the\op@count@z}{@r}%
+ \opsub*{@b}{@e\the\op@count@z}{@b}%
+ \fi
+ \advance\op@count@z by-1
+ \repeat
+ \opcopy{@r}{#3}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifop@error\op@errorwrite\fi
+ \endgroup
+}
+\def\opfloor#1#2#3{%
+ \op@split{#1}{fa}%
+ \op@split{#2}{fb}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifnum\OP@fa@s=1
+ \xdef\OP@fa@s{0}%
+ \op@ceil{fa}{fb}%
+ \xdef\OP@fa@s{1}%
+ \else
+ \op@floor{fa}{fb}%
+ \fi
+ \op@unsplit{fa}{#3}%
+ \fi
+}
+\def\opround#1#2#3{%
+ \op@split{#1}{ra}%
+ \op@split{#2}{rb}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \op@unsplit{ra}{@ra}%
+ \op@unsplit{rb}{@rb}%
+ \ifnum\Op@@rb<0\relax
+ \opneg{@rb}{@rb}%
+ \ifnum\Op@@rb<\@nameuse{OP@ra@i}\relax
+ \else
+ \op@count@z=\@nameuse{OP@ra@i}%
+ \advance\op@count@z by-1
+ \xdef\Op@@rb{\the\op@count@z}%
+ \fi
+ \opneg{@rb}{@rb}%
+ \fi
+ \oppower{0.1}{@rb}{@rr}%
+ \opmul*{0.5}{@rr}{@rr}%
+ \ifnum\OP@ra@s=0\relax
+ \opadd*{@ra}{@rr}{@ra}%
+ \opfloor{@ra}{#2}{#3}%
+ \else
+ \opneg{@ra}{@ra}%
+ \opadd*{@ra}{@rr}{@ra}%
+ \opfloor{@ra}{#2}{@ra}%
+ \opneg{@ra}{#3}%
+ \fi
+ \fi
+}
+\def\opceil#1#2#3{%
+ \op@split{#1}{ca}%
+ \op@split{#2}{cb}%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \ifnum\OP@ca@s=1
+ \xdef\OP@ca@s{0}%
+ \op@floor{ca}{cb}%
+ \xdef\OP@ca@s{1}%
+ \else
+ \op@ceil{ca}{cb}%
+ \fi
+ \op@unsplit{ca}{#3}%
+ \fi
+}
+\def\op@floor#1#2{%
+ \begingroup
+ \op@unsplit{#2}{@fb}%
+ \op@unzero{#1}%
+ \op@count@z=\Op@@fb\relax
+ \ifnum\op@count@z<0
+ \op@count@z=-\op@count@z
+ \ifnum\op@count@z<\@nameuse{OP@#1@i}\relax\else
+ \op@count@z=\@nameuse{OP@#1@i}%
+ \advance\op@count@z by-1
+ \fi
+ \op@integer{#1}{#1}%
+ \loop
+ \ifnum\op@count@z>0
+ \@namexdef{OP@#1@\the\op@count@z}{0}%
+ \advance\op@count@z by-1\relax
+ \repeat
+ \else
+ \ifnum\op@count@z>\@nameuse{OP@#1@d}%
+ \advance\op@count@z by-\@nameuse{OP@#1@d}%
+ \op@count@i=\@nameuse{OP@#1@d}%
+ \advance\op@count@i by\op@count@z
+ \@namexdef{OP@#1@d}{\the\op@count@i}%
+ \op@count@i=\@nameuse{OP@#1@w}\relax
+ \op@count@ii=\op@count@i
+ \advance\op@count@ii by\op@count@z
+ \@namexdef{OP@#1@w}{\the\op@count@ii}%
+ \loop
+ \ifnum\op@count@i>0
+ \@namexdef{OP@#1@\the\op@count@ii}{\@nameuse{OP@#1@\the\op@count@i}}%
+ \advance\op@count@i by-1
+ \advance\op@count@ii by-1
+ \repeat
+ \loop
+ \ifnum\op@count@ii>0
+ \@namexdef{OP@#1@\the\op@count@ii}{0}%
+ \advance\op@count@ii by-1
+ \repeat
+ \else
+ \advance\op@count@z by-\@nameuse{OP@#1@d}\relax
+ \op@count@z=-\op@count@z\relax
+ \op@count@i=\@nameuse{OP@#1@w}\relax
+ \op@count@ii=\op@count@i\relax
+ \advance\op@count@i by-\op@count@z
+ \@namexdef{OP@#1@w}{\the\op@count@i}\relax
+ \op@count@i=\@nameuse{OP@#1@d}\relax
+ \advance\op@count@i by-\op@count@z
+ \@namexdef{OP@#1@d}{\the\op@count@i}%
+ \op@count@i=0\relax
+ \loop
+ \ifnum\op@count@z<\op@count@ii
+ \advance\op@count@z by1\relax
+ \advance\op@count@i by1
+ \@namexdef{OP@#1@\the\op@count@i}{\@nameuse{OP@#1@\the\op@count@z}}%
+ \repeat
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@ceil#1#2{%
+ \op@unsplit{#1}{@Ca}%
+ \op@unsplit{#2}{@Cb}%
+ \op@unzero{#1}%
+ \op@count@z=\Op@@Cb\relax
+ \ifnum\op@count@z>0\relax
+ \ifnum\op@count@z<\@nameuse{OP@#1@d}\relax
+ \oppower{0.1}{\the\op@count@z}{@Cr}%
+ \opadd*{@Ca}{@Cr}{@Ca}%
+ \op@split{@Ca}{#1}%
+ \op@split{@Cb}{#2}%
+ \op@floor{#1}{#2}%
+ \else
+ \op@split{@Ca}{#1}%
+ \op@split{@Cb}{#2}%
+ \op@floor{#1}{#2}%
+ \fi
+ \else
+ \opneg{@Cb}{@Cb}%
+ \op@count@z=-\op@count@z\relax
+ \ifnum\op@count@z<\@nameuse{OP@#1@i}\relax
+ \oppower{10}{\the\op@count@z}{@Cr}%
+ \else
+ \op@count@z=\@nameuse{OP@#1@i}%
+ \advance\op@count@z by-1
+ \oppower{10}{\the\op@count@z}{@Cr}%
+ \fi
+ \opadd*{@Ca}{@Cr}{@Ca}%
+ \opneg{@Cb}{@Cb}%
+ \op@split{@Ca}{#1}%
+ \op@split{@Cb}{#2}%
+ \op@floor{#1}{#2}%
+ \fi
+}
+% add 0.26
+\op@split{0}{@zero}
+\op@split{1}{@one}
+\op@split{2}{@two}
+\op@split{3}{@three}
+\op@split{4}{@four}
+\op@split{5}{@five}
+\op@split{6}{@six}
+\op@split{7}{@seven}
+\op@split{8}{@height}
+\op@split{9}{@nine}
+\op@split{10}{@ten}
+
+\def\opsqrt{%
+ \@ifnextchar[{\op@sqrt}{\op@sqrt[nil]}%]
+}
+\def\op@sqrt[#1]#2#3{%
+ \begingroup
+ \opset{#1}%
+ \opcmp{0}{#2}%
+ \ifopeq
+ \op@copy{@zero}{U}%
+ \let\op@savemaxdivstep\op@maxdivstep
+ \else
+ \op@split{#2}{z}%
+ \op@count@z=\OP@z@i
+ \divide\op@count@z by2
+ \edef\op@savemaxdivstep{\op@maxdivstep}%
+ \op@count@i=\op@maxdivstep
+ \advance\op@count@i by\op@count@z
+ \advance\op@count@i by1
+ \edef\op@maxdivstep{\the\op@count@i}%
+ \ifodd\OP@z@i
+ \xdef\op@initsqrt{\@nameuse{OP@z@\OP@z@w}}%
+ \else
+ \op@count@z=\OP@z@w
+ \xdef\op@initsqrt{\@nameuse{OP@z@\the\op@count@z}}%
+ \advance\op@count@z by-1
+ \xdef\op@initsqrt{\op@initsqrt\@nameuse{OP@z@\the\op@count@z}}%
+ \fi
+ \ifnum\op@initsqrt<1
+ \op@copy{@zero}{u}%
+ \else\ifnum\op@initsqrt<3
+ \op@copy{@one}{u}%
+ \else\ifnum\op@initsqrt<7
+ \op@copy{@two}{u}%
+ \else\ifnum\op@initsqrt<13
+ \op@copy{@three}{u}%
+ \else\ifnum\op@initsqrt<21
+ \op@copy{@four}{u}%
+ \else\ifnum\op@initsqrt<31
+ \op@copy{@five}{u}%
+ \else\ifnum\op@initsqrt<43
+ \op@copy{@six}{u}%
+ \else\ifnum\op@initsqrt<57
+ \op@copy{@seven}{u}%
+ \else\ifnum\op@initsqrt<73
+ \op@copy{@height}{u}%
+ \else\ifnum\op@initsqrt<91
+ \op@copy{@nine}{u}%
+ \else
+ \op@copy{@ten}{u}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \op@count@ii=\OP@z@i
+ \advance\op@count@ii by1
+ \divide\op@count@ii by2
+ \advance\op@count@ii by-1
+ \op@lshift{\the\op@count@ii}{u}%
+ \op@count@z=\OP@z@w
+ \advance\op@count@z by1
+ \edef\op@@maxdivstep{\op@maxdivstep}%
+ \loop
+ \op@mul{u}{u}{U}%
+ \op@add{U}{z}{U}%
+ \op@mul{u}{@two}{D}%
+ \edef\op@maxdivstep{\the\op@count@z}%
+ \op@div{0}{U}{D}{U}{r}%
+ \multiply\op@count@z by2
+ \ifnum\op@count@z>\op@@maxdivstep
+ \op@count@z=\op@@maxdivstep
+ \fi
+ \op@cmp{u}{U}%
+ \ifopneq
+ \op@copy{U}{u}%
+ \repeat
+ \fi
+ \op@unsplit{U}{#3}%
+ \opround{#3}{\op@savemaxdivstep}{#3}%
+ \endgroup
+}
+
+\def\opgfsqrt{%
+ \@ifnextchar[{\op@gfsqrt}{\op@gfsqrt[nil]}%]
+}
+\def\op@gfsqrt[#1]#2{%
+ \begingroup
+ \edef\op@saveparindent{\the\parindent}%
+ \parindent=0pt
+ \opset{#1}%
+ \op@split{#2}{sq}%
+ \opsqrt{#2}{@sqrt}%
+ \op@split{@sqrt}{sqrt}%
+ \op@split{\op@initsqrt}{init}%
+ \op@count@z=\OP@sqrt@w
+ \op@split{\@nameuse{OP@sqrt@\the\op@count@z}}{atosub}%
+ \op@mul{atosub}{atosub}{tosub}%
+ \setbox1=\hbox{\kern\opcolumnwidth
+ \op@display{operandstyle.1}{sq}}%
+ \setbox2=\vtop{%
+ \hbox{\ophline(-0.5,-0.25){\OP@sqrt@w.5}%
+ \op@display{resultstyle}{sqrt}}%
+ \hbox{\op@display{intermediarystyle.1}{atosub}%
+ \hbox to\opcolumnwidth{\hss\op@mulsymbol\hss}%
+ \op@display{intermediarystyle.1}{atosub}%
+ \hbox to\opcolumnwidth{\hss\op@equalsymbol\hss}%
+ \op@display{operandstyle.2}{tosub}}%
+ }
+ \op@sub{init}{tosub}{rest}%
+ \op@count@ii=\OP@init@w
+ \op@count@iii=\op@count@ii
+ \advance\op@count@iii by1
+ \setbox1=\hbox{\hsize=\op@count@iii\opcolumnwidth\vtop{%
+ \box1
+ \hbox{%
+ \op@makebox{\the\op@count@iii}{0}%
+ {operandstyle.2}{tosub}%
+ \box0}}}%
+ \op@unzero{rest}%
+ \op@copy{@zero}{cursqrt}%
+ \op@copy{@zero}{digitmul}%
+ \op@count@i=\OP@sq@w
+ \advance\op@count@i by-\OP@init@w
+ \op@count@iv=2
+ \loop
+ \ifnum\op@count@z>1
+ \op@lshift{2}{rest}%
+ \ifnum\op@count@i>0
+ \@namexdef{OP@rest@2}{\@nameuse{OP@sq@\the\op@count@i}}%
+ \advance\op@count@i by-1
+ \ifnum\op@count@i>0
+ \@namexdef{OP@rest@1}{\@nameuse{OP@sq@\the\op@count@i}}%
+ \advance\op@count@i by-1
+ \fi
+ \fi
+ \op@count@ii=\op@count@iii
+ \advance\op@count@ii by-\OP@tosub@w
+ \advance\op@count@ii by-1
+ \advance\op@count@iii by2
+ \setbox1=\hbox{\hsize=\op@count@iii\opcolumnwidth
+ \vtop{%
+ \hbox{\box1}%
+ \hbox{%
+ \oplput(\op@count@ii,0.75){\ophline(0,0){1}}%
+ \oplput(\op@count@ii,0.75){\ophline(1,0){\OP@tosub@w}}%
+ \advance\op@count@iv by-1
+ \op@makebox{\the\op@count@iii}{0}%
+ {remainderstyle.\the\op@count@iv}{rest}%
+ \advance\op@count@iv by1
+ \oplput(\op@count@ii,1.5){$-$}%
+ \box0}%
+ }}%
+ \op@multen{cursqrt}%
+ \@namexdef{OP@cursqrt@1}%
+ {\@nameuse{OP@sqrt@\the\op@count@z}}%
+ \advance\op@count@z by-1
+ \op@mul{cursqrt}{@two}{atosub}%
+ \op@unzero{atosub}%
+ \op@multen{atosub}%
+ \@namexdef{OP@atosub@1}%
+ {\@nameuse{OP@sqrt@\the\op@count@z}}%
+ \@namexdef{OP@digitmul@1}%
+ {\@nameuse{OP@sqrt@\the\op@count@z}}%
+ \op@mul{atosub}{digitmul}{tosub}%
+ \op@unzero{tosub}%
+ \setbox2=\hbox{\vtop{%
+ \hbox{\box2}%
+ \hbox{\vrule width0pt height0pt
+ depth\oplineheight}%
+ \hbox{%
+ \op@display
+ {intermediarystyle.\the\op@count@iv}{atosub}%
+ \hbox to\opcolumnwidth{\hss\op@mulsymbol\hss}%
+ \op@display
+ {intermediarystyle.\the\op@count@iv}{digitmul}%
+ \hbox to\opcolumnwidth{\hss\op@equalsymbol\hss}%
+ \advance\op@count@iv by1
+ \op@display{operandstyle.\the\op@count@iv}{tosub}%
+ }%
+ }}%
+ \op@sub{rest}{tosub}{rest}%
+ \op@unzero{rest}%
+ \advance\op@count@iv by1
+ \setbox1=\hbox{\hsize=\op@count@iii\opcolumnwidth
+ \vtop{%
+ \hbox{\box1}%
+ \hbox{%
+ \op@makebox{\the\op@count@iii}{0}%
+ {operandstyle.\the\op@count@iv}{tosub}%
+ \box0}}}%
+ \repeat
+ \op@count@ii=\op@count@iii
+ \advance\op@count@ii by-\OP@tosub@w
+ \advance\op@count@ii by-1
+ \setbox1=\hbox{\hsize=\op@count@iii\opcolumnwidth
+ \vtop{%
+ \hbox{\box1}%
+ \hbox{%
+ \oplput(\op@count@ii,0.75){%
+ \ophline(0,0){1}}%
+ \oplput(\op@count@ii,0.75){%
+ \ophline(1,0){\OP@tosub@w}}%
+ \op@makebox{\the\op@count@iii}{0}%
+ {remainderstyle.\the\op@count@iv}{rest}%
+ \oplput(\op@count@ii,1.5){$-$}%
+ \box0}%
+ }%
+ }%
+ \parindent=\op@saveparindent
+ \leavevmode\hbox{%
+ \box1
+ \kern0.5\opcolumnwidth
+ \vrule
+ \kern0.5\opcolumnwidth
+ \box2}%
+ \endgroup
+ }
+% end add 0.26
+\edef\opHatCode{\the\catcode`\^}
+\catcode`\^=12\relax
+\def\opexpr{\@ifnextchar[{\op@exprarg}{\op@exprarg[nil]}}
+\def\op@exprarg[#1]{%
+ \opset{#1}%
+ \begingroup
+ \catcode`\^=12
+ \catcode`*=12
+ \catcode`/=12
+ \catcode`:=12
+ \catcode`+=12
+ \catcode`-=12
+ \catcode`.=12
+ \catcode`,=12
+ \catcode`(=12
+ \catcode`)=12
+ \catcode`\ =12
+ \op@expr
+}
+\def\op@expr#1{%
+ \ifop@error
+ \op@errorwrite
+ \else
+ \xdef\op@expression{#1}\endgroup
+ \ifx\op@expression\empty
+ \op@error{Empty expression is not valid}%
+ {I say: "empty expression is not valid"}%
+ \else
+ \expandafter\op@scan@line\expandafter{\op@expression}%
+ \@ifundefined{OP@token\the\op@token}%
+ {\global\advance\op@token by-1}%
+ {\relax}%
+ \global\op@stack=0
+ \op@search@term{1}{\the\op@token}%
+ \fi
+ \fi
+ \op@@expr
+}
+\def\op@@expr#1{%
+ \ifnum\op@stack=1
+ \ifop@error
+ \op@errorwrite
+ \else
+ \opcopy{@s1}{#1}%
+ \fi
+ \else
+ \op@error{Bad expression (not enough operator or operand)}%
+ {Expression like 2 + 3 3 or 3 * 5 *}%
+ \op@errorwrite
+ \fi
+}
+\def\op@scan@line{%
+ \begingroup
+ \global\op@parenthesis=0
+ \global\op@token=1
+ \global\op@in@numberfalse
+ \global\op@in@decimalfalse
+ \global\op@in@namefalse
+ \global\op@in@signtrue
+ \catcode`\^=12
+ \catcode`*=12
+ \catcode`/=12
+ \catcode`:=12
+ \catcode`+=12
+ \catcode`-=12
+ \catcode`.=12
+ \catcode`,=12
+ \catcode`(=12
+ \catcode`)=12
+ \catcode`\ =12
+ \op@scan@@line
+}
+\def\op@scan@@line#1{\op@scan@@@line#1\op@nil\endgroup}
+\def\op@scan@@@line#1#2\op@nil{%
+ \op@testch@r{#1}%
+ \ifop@isdigit
+ \global\op@in@signfalse
+ \ifop@in@number
+ \op@token@append{#1}%
+ \else\ifop@in@name
+ \op@token@append{#1}%
+ \else
+ \op@in@numbertrue
+ \op@token@create{#1}%
+ \fi\fi
+ \fi
+ \ifop@isplus
+ \op@token@single{\op@string@add}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@isminus
+ \op@token@single{\op@string@sub}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@ismultiply
+ \op@token@single{\op@string@mul}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@isdivide
+ \op@token@single{\op@string@div}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@isidivide
+ \op@token@single{\op@string@idiv}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@ispower
+ \op@token@single{\op@string@power}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@isdot
+ \global\op@in@signfalse
+ \ifop@in@decimal
+ \op@error{Number width multiple decimal separators}%
+ {You write something like 12.34.56}%
+ \else\ifop@in@number
+ \op@in@decimaltrue
+ \op@token@append{.}%
+ \else
+ \op@token@create{.}%
+ \op@in@numbertrue
+ \op@in@decimaltrue
+ \fi\fi
+ \fi
+ \ifop@islparenthesis
+ \op@token@single{(}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@isrparenthesis
+ \op@token@single{)}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@iscomma
+ \op@token@single{,}%
+ \global\op@in@signtrue
+ \fi
+ \ifop@isspace
+ \ifop@in@number
+ \op@in@numberfalse
+ \op@in@decimalfalse
+ \global\advance\op@token by1
+ \else\ifop@in@name
+ \op@in@namefalse
+ \global\advance\op@token by1
+ \fi\fi
+ \fi
+ \ifop@isother
+ \global\op@in@signfalse
+ \ifop@in@name
+ \op@token@append{#1}%
+ \else\ifop@in@number
+ \op@in@numberfalse
+ \op@in@decimalfalse
+ \op@in@nametrue
+ \global\advance\op@token by1
+ \op@token@create{#1}%
+ \else
+ \op@in@nametrue
+ \op@token@create{#1}%
+ \fi\fi
+ \fi
+ \def\@tempa{#2}%
+ \ifx\empty\@tempa
+ \let\next\relax
+ \else
+ \let\next\op@scan@@@line
+ \fi
+ \expandafter\next\@tempa\op@nil
+}
+\def\op@search@subexpr#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@v=#2\relax
+ \ifnum\op@count@i=\op@count@v
+ \op@token@use{#1}%
+ \else
+ \op@count@iii=\op@count@v
+ \op@count@iv=\op@count@i
+ \advance\op@count@iv by-1
+ \op@count@ii=0
+ \loop
+ \ifnum\op@count@iii>\op@count@iv
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@rpar\relax
+ \advance\op@parenthesis by1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@lpar\relax
+ \advance\op@parenthesis by-1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@comma\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \advance\op@count@iii by-1
+ \repeat
+ \ifnum\op@count@ii=0\relax
+ \ifnum\op@parenthesis=0
+ \op@search@term{\the\op@count@i}{\the\op@count@v}%
+ \else
+ \op@error{Unbalanced parenthesis in expression}%
+ {Error between tokens #1 and #2}%
+ \fi
+ \else
+ \advance\op@count@ii by-1
+ \op@search@subexpr{\the\op@count@i}{\the\op@count@ii}%
+ \advance\op@count@ii by2
+ \op@search@subexpr{\the\op@count@ii}{\the\op@count@v}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@search@term#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@v=#2\relax
+ \ifnum\op@count@i=\op@count@v
+ \op@token@use{#1}%
+ \else
+ \op@count@iii=\op@count@v
+ \op@count@iv=\op@count@i
+ \advance\op@count@iv by-1
+ \op@count@ii=0\relax
+ \loop
+ \ifnum\op@count@iii>\op@count@iv\relax
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@rpar\relax
+ \advance\op@parenthesis by1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@lpar\relax
+ \advance\op@parenthesis by-1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@add\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@sub\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \advance\op@count@iii by-1
+ \repeat
+ \ifnum\op@count@ii=0\relax
+ \ifnum\op@parenthesis=0
+ \op@search@factor{\the\op@count@i}{\the\op@count@v}%
+ \else
+ \op@error{Unbalanced parenthesis in expression}%
+ {Error between tokens #1 and #2}%
+ \fi
+ \else
+ \advance\op@count@ii by-1
+ \op@search@term{\the\op@count@i}{\the\op@count@ii}%
+ \advance\op@count@ii by2
+ \op@search@term{\the\op@count@ii}{\the\op@count@v}%
+ \advance\op@count@ii by-1
+ \op@token@use{\the\op@count@ii}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@search@factor#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@v=#2\relax
+ \ifnum\op@count@i=\op@count@v
+ \op@token@use{#1}%
+ \else
+ \op@count@iii=\op@count@v
+ \op@count@iv=\op@count@i
+ \advance\op@count@iv by-1
+ \op@count@ii=0
+ \loop
+ \ifnum\op@count@iii>\op@count@iv
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@rpar\relax
+ \advance\op@parenthesis by1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@lpar\relax
+ \advance\op@parenthesis by-1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@mul\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@div\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@idiv\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \advance\op@count@iii by-1
+ \repeat
+ \ifnum\op@count@ii=0\relax
+ \ifnum\op@parenthesis=0
+ \op@search@power{\the\op@count@i}{\the\op@count@v}%
+ \else
+ \op@error{Unbalanced parenthesis in expression}%
+ {Error between tokens #1 and #2}%
+ \fi
+ \else
+ \advance\op@count@ii by-1
+ \op@search@factor{\the\op@count@i}{\the\op@count@ii}%
+ \advance\op@count@ii by2
+ \op@search@factor{\the\op@count@ii}{\the\op@count@v}%
+ \advance\op@count@ii by-1
+ \op@token@use{\the\op@count@ii}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@search@power#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@v=#2\relax
+ \ifnum\op@count@i=\op@count@v
+ \op@token@use{#1}%
+ \else
+ \op@count@iii=\op@count@v
+ \op@count@iv=\op@count@i
+ \advance\op@count@iv by-1
+ \op@count@ii=0
+ \loop
+ \ifnum\op@count@iii>\op@count@iv
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@rpar\relax
+ \advance\op@parenthesis by1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@lpar\relax
+ \advance\op@parenthesis by-1
+ \fi
+ \expandafter\ifx\csname OP@token\the\op@count@iii\endcsname
+ \op@string@power\relax
+ \ifnum\op@parenthesis=0
+ \op@count@ii=\op@count@iii\relax
+ \op@count@iii=0
+ \fi
+ \fi
+ \advance\op@count@iii by-1
+ \repeat
+ \ifnum\op@count@ii=0\relax
+ \ifnum\op@parenthesis=0
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \else
+ \op@error{Unbalanced parenthesis in expression}%
+ {Error between tokens #1 and #2}%
+ \fi
+ \else
+ \advance\op@count@ii by-1
+ \op@search@power{\the\op@count@i}{\the\op@count@ii}%
+ \advance\op@count@ii by2
+ \op@search@power{\the\op@count@ii}{\the\op@count@v}%
+ \advance\op@count@ii by-1
+ \op@token@use{\the\op@count@ii}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@search@primary#1#2{%
+ \begingroup
+ \op@count@i=#1\relax
+ \op@count@v=#2\relax
+ \ifnum\op@count@i=\op@count@v
+ \op@token@use{#1}%
+ \else
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@abs
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@ceil
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@decimal
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@floor
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@integer
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@gcd
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@mod
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@neg
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@rest
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname\op@string@round
+ \advance\op@count@i by1
+ \op@search@primary{\the\op@count@i}{\the\op@count@v}%
+ \advance\op@count@i by-1
+ \op@token@use{\the\op@count@i}%
+ \fi
+ \expandafter\ifx\csname OP@token#1\endcsname
+ \op@string@lpar\relax
+ \expandafter\ifx\csname OP@token#2\endcsname
+ \op@string@rpar\relax
+ \advance\op@count@i by1
+ \advance\op@count@v by-1
+ \op@search@subexpr{\the\op@count@i}{\the\op@count@v}%
+ \else
+ \op@error{Garbage after parenthesis}%
+ {Error between tokens #1 and #2}%
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+\def\op@token@use#1{%
+ \edef\op@arg{\@nameuse{OP@token#1}}%
+ \ifx\op@arg\op@string@abs
+ \opabs{@s\the\op@stack}{@s\the\op@stack}%
+ \else\ifx\op@arg\op@string@add
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opadd*{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@ceil
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opceil{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@decimal
+ \opdecimal{@s\the\op@stack}{@s\the\op@stack}%
+ \else\ifx\op@arg\op@string@div
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opdiv*{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}{r}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@floor
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opfloor{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@gcd
+ \op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opgcd{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@idiv
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opidiv*{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}{r}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@integer
+ \opinteger{@s\the\op@stack}{@s\the\op@stack}%
+ \else\ifx\op@arg\op@string@mod
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opidiv*{@s\the\op@stackb}{@s\the\op@stack}{@q}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@mul
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opmul*{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@neg
+ \opneg{@s\the\op@stack}{@s\the\op@stack}%
+ \else\ifx\op@arg\op@string@power
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \oppower{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@rest
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opdiv*{@s\the\op@stackb}{@s\the\op@stack}{@q}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@round
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opround{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else\ifx\op@arg\op@string@sub
+ \global\op@stackb=\op@stack
+ \global\advance\op@stackb by-1
+ \opsub*{@s\the\op@stackb}{@s\the\op@stack}{@s\the\op@stackb}%
+ \global\op@stack=\op@stackb
+ \else
+ \global\advance\op@stack by1\relax
+ \opcopy{\op@arg}{@s\the\op@stack}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+\def\op@token@create#1{%
+ \@namexdef{OP@token\the\op@token}{#1}%
+ \global\advance\op@token by1
+ \expandafter\global
+ \expandafter\let\csname OP@token\the\op@token\endcsname\relax
+ \global\advance\op@token by-1
+}
+\def\op@token@append#1{%
+ \@namexdef{OP@token\the\op@token}{%
+ \@nameuse{OP@token\the\op@token}#1}%
+}
+\def\op@token@single#1{%
+ \edef\@tempa{#1}%
+ \ifop@in@name
+ \global\advance\op@token by1
+ \op@in@namefalse
+ \fi
+ \ifop@in@number
+ \global\advance\op@token by1
+ \op@in@numberfalse
+ \op@in@decimalfalse
+ \fi
+ \ifx\@tempa\op@string@add
+ \ifop@in@sign
+ \global\advance\op@token by-1
+ \else
+ \op@token@create{#1}%
+ \fi
+ \else\ifx\@tempa\op@string@sub
+ \ifop@in@sign
+ \op@token@create{\op@string@neg}%
+ \else
+ \op@token@create{#1}%
+ \fi
+ \else
+ \op@token@create{#1}%
+ \fi\fi
+ \global\advance\op@token by1
+}
+\def\op@testch@r#1{%
+ \op@isdigitfalse
+ \op@isplusfalse
+ \op@isminusfalse
+ \op@ismultiplyfalse
+ \op@isdividefalse
+ \op@isidividefalse
+ \op@ispowerfalse
+ \op@isdotfalse
+ \op@iscommafalse
+ \op@islparenthesisfalse
+ \op@isrparenthesisfalse
+ \op@isspacefalse
+ \op@isotherfalse
+ \count@=`#1\relax
+ \ifnum\count@=\op@plus \relax
+ \op@isplustrue
+ \else \ifnum\count@=\op@minus \relax
+ \op@isminustrue
+ \else \ifnum\count@=\op@multiply \relax
+ \op@ismultiplytrue
+ \else \ifnum\count@=\op@divide \relax
+ \op@isdividetrue
+ \else \ifnum\count@=\op@idivide \relax
+ \op@isidividetrue
+ \else \ifnum\count@=\op@pow \relax
+ \op@ispowertrue
+ \else \ifnum\count@=\op@dot \relax
+ \op@isdottrue
+ \else \ifnum\count@=\op@comma \relax
+ \op@iscommatrue
+ \else \ifnum\count@=\op@lparenthesis \relax
+ \op@islparenthesistrue
+ \else \ifnum\count@=\op@rparenthesis \relax
+ \op@isrparenthesistrue
+ \else \ifnum\count@=\op@space \relax
+ \op@isspacetrue
+ \else \ifnum\count@<\op@numbegin \relax
+ \op@isothertrue
+ \else \ifnum\count@>\op@numend \relax
+ \op@isothertrue
+ \else \op@isdigittrue
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+\op@split{0}{T0}
+\op@split{0}{zero}
+\op@split{1}{one}
+\op@split{10}{ten}
+\op@split{0.1}{tenth}
+\op@split{2147483647}{maxinteger}
+\op@split{214748364}{maxdivperiod}
+\op@split{1073741823}{maxpower}
+\catcode`\^=\opHatCode\relax
+\catcode`\@=\opAtCode\relax
+\endinput
diff --git a/macros/generic/xstring/README b/macros/generic/xstring/README
new file mode 100644
index 0000000000..8234833cb9
--- /dev/null
+++ b/macros/generic/xstring/README
@@ -0,0 +1,85 @@
+ _________________
+
+ xstring package
+ v 1.83
+ 2019/02/06
+ _________________
+
+This package provides macros manipulating strings for programming use.
+A "string" is made of TeX code, i.e. chars (catcodes 10, 11 and 12), controls
+sequences, groups between braces, tokens with other catcodes, excepted catcodes
+6 and 14 (usually chars # and %).
+
+Main features are:
+ * tests:
+ - does a string contains at least n times an another?
+ - does a string starts (or ends) with another? etc.
+ - is a string an integer? A decimal?
+ - are 2 strings equal?
+ - is a string equal to several cases?
+ * extractions of substrings:
+ - what is on the left (or the right) of the nth occurrence of a
+ substring;
+ - what is between the occurrences of 2 substrings;
+ - substring between 2 positions;
+ - split a string;
+ - find a group with its identifier, etc.
+ * substitution of all (or the n first) occurrences of a substring
+ for an other substring;
+ * n times expansion of the tokens of a string;
+ * calculation of numbers:
+ - length of a string;
+ - position of the nth occurrence of a substring;
+ - how many times a string contains a substring?
+ - comparison of strings: position of the first difference;
+ - identifier of the group in which a macro worked.
+
+For advanced programming needs, other macros allow to use other special
+characters forbiden in strings (# %).
+
+This bundle contains 7 files:
+ * xstring.sty (the sty file for LaTeX)
+ * xstring.tex (the package itself)
+ * xstring_doc_en.tex and xstring_doc_en.pdf (manual in english)
+ * xstring_doc_fr.tex and xstring_doc_fr.pdf (manual in french))
+ * README (this file)
+
+##############################################################################
+##############################################################################
+
+Cette extension regroupe un ensemble de macros manipulant des chaînes à des
+fins de programmation.
+Une "chaîne" est du code TeX, c'est-à-dire des caractères (catcodes 10, 11
+et 12), des séquences de contrôle, des groupes entre accolades et des lexèmes
+ayant d'autres catcodes excepté les catcodes 6 et 14 (habituellement les
+caractères # et %).
+
+Les principales fonctionnalités sont :
+ * des tests :
+ - une chaîne en contient elle une autre au moins n fois ?
+ - une chaîne commence t-elle ou finit-elle par une autre ? etc.
+ - une chaîne est-elle un entier relatif ? Un décimal ?
+ - deux chaînes sont-elles égales ?
+ - une chaîne est elle égale à plusieurs cas ?
+ * des extractions de chaines :
+ - renvoi de ce qui se trouve avant (ou après) la nieme occurrence
+ d'une sous-chaîne;
+ - renvoi de ce qui se trouve entre les occurrences de 2 sous-chaînes;
+ - sous-chaîne comprise entre 2 positions;
+ - coupure d'une chaîne;
+ - recherche d'un groupe avec son identifiant.
+ * le remplacement de toutes ou des n premières occurrences d'une
+ sous-chaîne par une autre sous-chaîne;
+ * n-développement des tokens d'une chaîne;
+ * des calculs de nombres :
+ - longueur d'une chaîne;
+ - position de la la nieme occurrence d'une sous-chaîne;
+ - comptage du nombre d'occurrences d'une sous-chaîne dans une autre;
+ - comparaison de 2 chaînes : position de la 1ere différence;
+ - identifiant du groupe dans lequel les macros ont opéré.
+
+Pour des méthodes de programmation avancées, d'autres commandes permettent
+d'utiliser les caractères spéciaux interdits dans les chaines (# %).
+
+ Christian Tellechea
+ <unbonpetit@netc.fr>
diff --git a/macros/generic/xstring/test_etex.pdf b/macros/generic/xstring/test_etex.pdf
new file mode 100644
index 0000000000..4d2b8134b2
--- /dev/null
+++ b/macros/generic/xstring/test_etex.pdf
Binary files differ
diff --git a/macros/generic/xstring/test_etex.tex b/macros/generic/xstring/test_etex.tex
new file mode 100644
index 0000000000..e7c7cdfaad
--- /dev/null
+++ b/macros/generic/xstring/test_etex.tex
@@ -0,0 +1,992 @@
+%##################### WARNING #####################
+% This is NOT a LaTeX file, it is a TeX file.
+% It must be compiled with eTeX typing <etex test_etex>
+%#################### ATTENTION ####################
+% Ceci n'est PAS un fichier LaTeX, c'est un fichier TeX.
+% Il doit être compilé avec eteX en tapant <etex test_etex>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\input xstring
+\def\delimiteur{-{}}
+\font\hugerm=ecbx2000
+\font\hugett=ectt1750
+\font\largeboldrm=ecbx1300
+\font\largett=ectt1300
+\font\textfont=ecrm1000
+\textfont
+\catcode`\@=11\relax
+\gdef\exemple{\csname xs_ifstar\endcsname{\def\frontiere{\delimiteur}\csname xs_toks_toverb\endcsname}{\def\frontiere{}\csname xs_toks_toverb\endcsname}}
+\expandafter\def\csname xs_assign_verb\endcsname#1{%
+ \noexpandarg
+ \tokenize\cs@resultat{#1}%
+ \fullexpandarg
+ \leavevmode\hbox to0.7\hsize{\hfil\tt#1}\quad\frontiere\cs@resultat\frontiere\hfil\par}%
+\catcode`\@=12\relax
+\def\chapitre#1#2{\vskip 6pt plus 2pt minus 2pt{{\largeboldrm#1} {\largett#2}}\vskip 3pt plus 1pt minus 1pt}
+\def\AvecArgOptionnel{\vskip 6pt plus 2pt minus 2pt Mêmes exemples avec l'argument optionnel :\par}
+\hoffset-1.54cm\hsize19cm\parindent0pt
+% debut du texte
+\hfil{\hugerm Ceci est le fichier de test de xstring}\hfil{}
+
+\hrule\vskip0.5ex
+
+\hrule\vskip2ex
+
+Attention : ce fichier {\tt test\_etex.tex} produit une sortie quasiment identique au fichier {\tt test\_latex.tex}, mais il doit se lancer avec Plain $\varepsilon$-\TeX. Pour des raison d'encodage, contrairement au fichier {\tt test\_latex.tex}, les arguments des macros présentées ici ne contiennent pas de lettres accentuées.\vskip2em
+
+Toutes les situations ne sont pas envisagées, mais au moins un grand nombre ! Les macros sont examinées dans l'ordre logique du code.
+
+Lorsque le résultat contient des espaces ou peut conduire à des doutes, il sera entouré de ''\delimiteur``, étant entendu que ''\delimiteur\delimiteur`` est une chaine vide.\vskip2em
+
+\hfill{\hugerm Le mode \hugett\string\fullexpandarg}\hfill{}
+
+\vskip-1ex\hfil\hbox to8cm{\hrulefill}\hfil{}\vskip3.5ex
+
+\chapitre{Le test}{IfSubStr}
+
+\exemple|\IfSubStr{abcdef}{cd}{vrai}{faux}|
+\exemple|\IfSubStr{a b c d }{b c}{vrai}{faux}|
+\exemple|\IfSubStr{a b c d }{bc}{vrai}{faux}|
+\exemple|\IfSubStr{abcdef}{}{vrai}{faux}|
+\exemple|\IfSubStr{a}{a}{vrai}{faux}|
+\exemple|\IfSubStr{aaaa}{aa}{vrai}{faux}|
+\exemple|\IfSubStr{a}{aa}{vrai}{faux}|
+\exemple|\IfSubStr{a}{}{vrai}{faux}|
+\exemple|\IfSubStr{}{a}{vrai}{faux}|
+\exemple|\IfSubStr{}{}{vrai}{faux}|
+\exemple|\IfSubStr[2]{abaca}{a}{vrai}{faux}|
+\exemple|\IfSubStr[3]{abaca}{a}{vrai}{faux}|
+\exemple|\IfSubStr[4]{abaca}{a}{vrai}{faux}|
+\exemple|\IfSubStr[-2]{abaca}{a}{vrai}{faux}|
+
+\chapitre{Le test}{IfBeginWith}
+
+\exemple|\IfBeginWith{abcdef}{adc}{vrai}{faux}|
+\exemple|\IfBeginWith{abcdef}{abcd}{vrai}{faux}|
+\exemple|\IfBeginWith{ a b c }{ a}{vrai}{faux}|
+\exemple|\IfBeginWith{a b c d}{ab}{vrai}{faux}|
+\exemple|\IfBeginWith{a}{a}{vrai}{faux}|
+\exemple|\IfBeginWith{a}{aa}{vrai}{faux}|
+\exemple|\IfBeginWith{a}{}{vrai}{faux}|
+\exemple|\IfBeginWith{}{a}{vrai}{faux}|
+\exemple|\IfBeginWith{}{}{vrai}{faux}|
+
+\chapitre{Le test}{IfEndWith}
+
+\exemple|\IfEndWith{abcdef}{ab}{vrai}{faux}|
+\exemple|\IfEndWith{abcdef}{f}{vrai}{faux}|
+\exemple|\IfEndWith{ a b c }{c}{vrai}{faux}|
+\exemple|\IfEndWith{ a b c }{ }{vrai}{faux}|
+\exemple|\IfEndWith{a}{a}{vrai}{faux}|
+\exemple|\IfEndWith{a}{aa}{vrai}{faux}|
+\exemple|\IfEndWith{a}{}{vrai}{faux}|
+\exemple|\IfEndWith{}{a}{vrai}{faux}|
+\exemple|\IfEndWith{}{}{vrai}{faux}|
+
+\chapitre{Le test}{IfSubStrBefore}
+
+\exemple|\IfSubStrBefore{abcdef}{b}{e}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{e}{c}{vrai}{faux}|
+\exemple|\IfSubStrBefore{ a b c }{ }{b}{vrai}{faux}|
+\exemple|\IfSubStrBefore{ a b c }{ b}{c }{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{z}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{y}{z}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{a}{z}{vrai}{faux}|
+\exemple|\IfSubStrBefore{aaa}{a}{aa}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{a}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{}{a}{b}{vrai}{faux}|
+\exemple|\IfSubStrBefore{a}{}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{}{}{}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,1]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,2]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,3]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,4]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,1]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,2]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBefore[4,2]{maman papa}{a}{p}{vrai}{faux}|
+
+\chapitre{Le test}{IfStrBehind}
+
+\exemple|\IfSubStrBehind{abcdef}{b}{e}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{e}{c}{vrai}{faux}|
+\exemple|\IfSubStrBehind{ a b c }{ }{b}{vrai}{faux}|
+\exemple|\IfSubStrBehind{ a b c }{ c}{ a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{z}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{y}{z}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{a}{z}{vrai}{faux}|
+\exemple|\IfSubStrBehind{aaa}{a}{aa}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{a}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{}{a}{b}{vrai}{faux}|
+\exemple|\IfSubStrBehind{a}{}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{}{}{}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{abacada}{c}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,2]{abacada}{c}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,3]{abacada}{c}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind[2,1]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,1]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,2]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBehind[4,2]{maman papa}{a}{p}{vrai}{faux}|
+
+\chapitre{Le test}{IfInteger}
+
+\exemple|\IfInteger{156}{vrai}{faux}|
+\exemple|\IfInteger{1.6}{vrai}{faux}|
+\exemple|\IfInteger{7a5}{vrai}{faux}|
+\exemple|\IfInteger{+9}{vrai}{faux}|
+\exemple|\IfInteger{-15}{vrai}{faux}|
+\exemple|\IfInteger{0}{vrai}{faux}|
+\exemple|\IfInteger{-1,2}{vrai}{faux}|
+\exemple|\IfInteger{1.}{vrai}{faux}|
+\exemple|\IfInteger{-00}{vrai}{faux}|
+\exemple|\IfInteger{+}{vrai}{faux}|
+\exemple|\IfInteger{-}{vrai}{faux}|
+\exemple|\IfInteger{.}{vrai}{faux}|
+\exemple|\IfInteger{}{vrai}{faux}|
+
+\chapitre{Le test}{IfDecimal}
+
+\exemple|\IfDecimal{6}{vrai}{faux}|
+\exemple|\IfDecimal{-78}{vrai}{faux}|
+\exemple|\IfDecimal{3.14}{vrai}{faux}|
+\exemple|\IfDecimal{3,14}{vrai}{faux}|
+\exemple|\IfDecimal{1..5}{vrai}{faux}|
+\exemple|\IfDecimal{-9.8}{vrai}{faux}|
+\exemple|\IfDecimal{+9.8}{vrai}{faux}|
+\exemple|\IfDecimal{-9,8}{vrai}{faux}|
+\exemple|\IfDecimal{+9,8}{vrai}{faux}|
+\exemple|\IfDecimal{+6.7.}{vrai}{faux}|
+\exemple|\IfDecimal{.5}{vrai}{faux}|
+\exemple|\IfDecimal{1.}{vrai}{faux}|
+\exemple|\IfDecimal{-.99}{vrai}{faux}|
+\exemple|\IfDecimal{-5.}{vrai}{faux}|
+\exemple|\IfDecimal{5a9.}{vrai}{faux}|
+\exemple|\IfDecimal{+}{vrai}{faux}|
+\exemple|\IfDecimal{-}{vrai}{faux}|
+\exemple|\IfDecimal{.}{vrai}{faux}|
+\exemple|\IfDecimal{}{vrai}{faux}|
+
+\chapitre{Le test}{IfStrEq}
+
+\exemple|\IfStrEq{abcdef}{abcdef}{vrai}{faux}|
+\exemple|\IfStrEq{a b c}{a b c}{vrai}{faux}|
+\exemple|\IfStrEq{abcd}{abc}{vrai}{faux}|
+\exemple|\IfStrEq{aab}{ab}{vrai}{faux}|
+\exemple|\IfStrEq{aab}{aa}{vrai}{faux}|
+\exemple|\IfStrEq{1.2}{1.20}{vrai}{faux}|
+\exemple|\IfStrEq{3,4}{3.4}{vrai}{faux}|
+\exemple|\IfStrEq{ }{ }{vrai}{faux}|
+\exemple|\IfStrEq{}{a}{vrai}{faux}|
+\exemple|\IfStrEq{a}{}{vrai}{faux}|
+\exemple|\IfStrEq{}{}{vrai}{faux}|
+
+\chapitre{Le test}{IfEq}
+
+\exemple|\IfEq{abcdef}{abcdef}{vrai}{faux}|
+\exemple|\IfEq{a b c}{a b c}{vrai}{faux}|
+\exemple|\IfEq{abcd}{abc}{vrai}{faux}|
+\exemple|\IfEq{aab}{ab}{vrai}{faux}|
+\exemple|\IfEq{aab}{aa}{vrai}{faux}|
+\exemple|\IfEq{1.2}{1.20}{vrai}{faux}|
+\exemple|\IfEq{+1.0000}{1}{vrai}{faux}|
+\exemple|\IfEq{-10}{10}{vrai}{faux}|
+\exemple|\IfEq{1,2}{1.2}{vrai}{faux}|
+\exemple|\IfEq{.5}{0.5}{vrai}{faux}|
+\exemple|\IfEq{,5}{0,5}{vrai}{faux}|
+\exemple|\IfEq{10}{dix}{vrai}{faux}|
+\exemple|\IfEq{123}{1a3}{vrai}{faux}|
+\exemple|\IfEq{0}{}{vrai}{faux}|
+\exemple|\IfEq{++10}{+10}{vrai}{faux}|
+\exemple|\IfEq{--10}{+10}{vrai}{faux}|
+\exemple|\IfEq{a}{}{vrai}{faux}|
+\exemple|\IfEq{}{a}{vrai}{faux}|
+\exemple|\IfEq{}{}{vrai}{faux}|
+
+\chapitre{La macro}{StrBefore}
+
+\exemple|\StrBefore{abcedef}{e}|
+\exemple*|\StrBefore{abcdef}{a}|
+\exemple*|\StrBefore{abcdef}{z}|
+\exemple*|\StrBefore{a b c d}{c}|
+\exemple*|\StrBefore{a b c d}{ }|
+\exemple*|\StrBefore[2]{a b c d}{ }|
+\exemple*|\StrBefore[3]{a b c d}{ }|
+\exemple*|\StrBefore[9]{a b c d}{ }|
+\exemple*|\StrBefore[-7]{a b c d}{ }|
+\exemple*|\StrBefore{abcdef}{Z}|
+\exemple*|\StrBefore[1]{aaaaaa}{aa}|
+\exemple|\StrBefore[2]{aaaaaa}{aa}|
+\exemple|\StrBefore[3]{aaaaaa}{aa}|
+\exemple*|\StrBefore[4]{aaaaaa}{aa}|
+\exemple*|\StrBefore{a}{}|
+\exemple*|\StrBefore{}{a}|
+\exemple*|\StrBefore{}{}|
+
+\AvecArgOptionnel
+\exemple|\StrBefore{abcedef}{e}[\aa]\aa|
+\exemple*|\StrBefore{abcdef}{a}[\aa]\aa|
+\exemple*|\StrBefore{abcdef}{z}[\aa]\aa|
+\exemple*|\StrBefore{a b c d}{c}[\aa]\aa|
+\exemple*|\StrBefore{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[2]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[3]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[9]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[-7]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore{abcdef}{Z}[\aa]\aa|
+\exemple*|\StrBefore[1]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrBefore[2]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrBefore[3]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBefore[4]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBefore{a}{}[\aa]\aa|
+\exemple*|\StrBefore{}{a}[\aa]\aa|
+\exemple*|\StrBefore{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrBehind}
+
+\exemple|\StrBehind{abcedef}{e}|
+\exemple*|\StrBehind{abcdef}{a}|
+\exemple*|\StrBehind{abcdef}{z}|
+\exemple*|\StrBehind{a b c d}{c}|
+\exemple*|\StrBehind{a b c d}{ }|
+\exemple*|\StrBehind[2]{a b c d}{ }|
+\exemple*|\StrBehind[3]{a b c d}{ }|
+\exemple*|\StrBehind[9]{a b c d}{ }|
+\exemple*|\StrBehind[-7]{a b c d}{ }|
+\exemple*|\StrBehind{abcdef}{Z}|
+\exemple|\StrBehind[1]{aaaaaa}{aa}|
+\exemple|\StrBehind[2]{aaaaaa}{aa}|
+\exemple*|\StrBehind[3]{aaaaaa}{aa}|
+\exemple*|\StrBehind[4]{aaaaaa}{aa}|
+\exemple*|\StrBehind{a}{}|
+\exemple*|\StrBehind{}{a}|
+\exemple*|\StrBehind{}{}|
+
+\AvecArgOptionnel
+\exemple|\StrBehind{abcedef}{e}[\aa]\aa|
+\exemple*|\StrBehind{abcdef}{a}[\aa]\aa|
+\exemple*|\StrBehind{abcdef}{z}[\aa]\aa|
+\exemple*|\StrBehind{a b c d}{c}[\aa]\aa|
+\exemple*|\StrBehind{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[2]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[3]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[9]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[-7]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind{abcdef}{Z}[\aa]\aa|
+\exemple|\StrBehind[1]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrBehind[2]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBehind[3]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBehind[4]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBehind{a}{}[\aa]\aa|
+\exemple*|\StrBehind{}{a}[\aa]\aa|
+\exemple*|\StrBehind{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrBetween}
+
+\exemple|\StrBetween{abcdef}{b}{e}|
+\exemple*|\StrBetween{aZaaaaZa}{Z}{Z}|
+\exemple*|\StrBetween[1,2]{aZaaaaZa}{Z}{Z}|
+\exemple*|\StrBetween{a b c d}{a}{c}|
+\exemple*|\StrBetween{a b c d}{a }{ d}|
+\exemple*|\StrBetween{abcdef}{a}{Z}|
+\exemple*|\StrBetween{abcdef}{Y}{Z}|
+\exemple*|\StrBetween[2,5]{aAaBaCaDa}{a}{a}|
+\exemple*|\StrBetween[4,1]{ab1ab2ab3ab4ab}{b}{a}|
+\exemple*|\StrBetween[3,4]{a b c d e f}{ }{ }|
+\exemple|\StrBetween[1,3]{aaaaaa}{aa}{aa}|
+\exemple*|\StrBetween{abcdef}{a}{}|
+\exemple*|\StrBetween{abcdef}{}{f}|
+\exemple*|\StrBetween{}{a}{b}|
+
+\AvecArgOptionnel
+\exemple|\StrBetween{abcdef}{b}{e}[\aa]\aa|
+\exemple*|\StrBetween{aZaaaaZa}{Z}{Z}[\aa]\aa|
+\exemple*|\StrBetween[1,2]{aZaaaaZa}{Z}{Z}[\aa]\aa|
+\exemple*|\StrBetween{a b c d}{a}{c}[\aa]\aa|
+\exemple*|\StrBetween{a b c d}{a }{ d}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{a}{Z}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{Y}{Z}[\aa]\aa|
+\exemple*|\StrBetween[2,5]{aAaBaCaDa}{a}{a}[\aa]\aa|
+\exemple*|\StrBetween[4,1]{ab1ab2ab3ab4ab}{b}{a}[\aa]\aa|
+\exemple*|\StrBetween[3,4]{a b c d e f}{ }{ }[\aa]\aa|
+\exemple|\StrBetween[1,3]{aaaaaa}{aa}{aa}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{a}{}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{}{f}[\aa]\aa|
+\exemple*|\StrBetween{}{a}{b}[\aa]\aa|
+
+\chapitre{La macro}{StrSubstitute}
+
+\exemple|\StrSubstitute{abcdef}{c}{ZZ}|
+\exemple|\StrSubstitute{aaaaaaa}{aa}{w}|
+\exemple|\StrSubstitute[0]{abacada}{a}{.}|
+\exemple|\StrSubstitute[1]{abacada}{a}{.}|
+\exemple|\StrSubstitute[2]{abacada}{a}{.}|
+\exemple|\StrSubstitute[3]{abacada}{a}{.}|
+\exemple|\StrSubstitute[4]{abacada}{a}{.}|
+\exemple|\StrSubstitute[5]{abacada}{a}{.}|
+\exemple|\StrSubstitute{a b c d e}{ }{,}|
+\exemple|\StrSubstitute{a b c d e}{ }{}|
+\exemple|\StrSubstitute{abcdef}{}{A}|
+\exemple|\StrSubstitute{abcdef}{}{}|
+\exemple*|\StrSubstitute{}{a}{b}|
+\exemple*|\StrSubstitute{}{}{}|
+
+\AvecArgOptionnel
+\exemple|\StrSubstitute{abcdef}{c}{ZZ}[\aa]\aa|
+\exemple|\StrSubstitute{aaaaaaa}{aa}{w}[\aa]\aa|
+\exemple|\StrSubstitute[0]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[1]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[2]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[3]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[4]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[5]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute{a b c d e}{ }{,}[\aa]\aa|
+\exemple|\StrSubstitute{a b c d e}{ }{}[\aa]\aa|
+\exemple|\StrSubstitute{abcdef}{}{A}[\aa]\aa|
+\exemple|\StrSubstitute{abcdef}{}{}[\aa]\aa|
+\exemple*|\StrSubstitute{}{a}{b}[\aa]\aa|
+\exemple*|\StrSubstitute{}{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrDel}
+
+\exemple|\StrDel{a1a2a3a4}{a}|
+\exemple|\StrDel[2]{a1a2a3a4}{a}|
+\exemple|\StrDel[-2]{a1a2a3a4}{a}|
+\exemple|\StrDel[10]{a1a2a3a4}{a}|
+\exemple|\StrDel[3]{a b c d e}{a}|
+
+\AvecArgOptionnel
+\exemple|\StrDel{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[2]{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[-2]{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[10]{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[3]{a b c d e}{a}[\aa]\aa|
+
+\chapitre{La macro}{StrLen}
+
+
+\exemple|\StrLen{abcdef}|
+\exemple|\StrLen{a b c}|
+\exemple|\StrLen{ a b c }|
+\exemple|\StrLen{a}|
+\exemple|\StrLen{}|
+
+\AvecArgOptionnel
+\exemple|\StrLen{abcdef}[\aa]\aa|
+\exemple|\StrLen{a b c}[\aa]\aa|
+\exemple|\StrLen{ a b c }[\aa]\aa|
+\exemple|\StrLen{a}[\aa]\aa|
+\exemple|\StrLen{}[\aa]\aa|
+
+\chapitre{la macro}{StrMid}
+
+\exemple|\StrMid{abcdef}{2}{5}|
+\exemple*|\StrMid{a b c d}{2}{6}|
+\exemple*|\StrMid{abcdef}{4}{2}|
+\exemple|\StrMid{abcdef}{-4}{3}|
+\exemple*|\StrMid{abcdef}{-4}{-1}|
+\exemple|\StrMid{abcdef}{-4}{20}|
+\exemple*|\StrMid{abcdef}{8}{10}|
+\exemple|\StrMid{abcdef}{2}{2}|
+\exemple|\StrMid{aaaaaa}{3}{6}|
+\exemple*|\StrMid{}{4}{5}|
+
+\AvecArgOptionnel
+\exemple|\StrMid{abcdef}{2}{5}[\aa]\aa|
+\exemple*|\StrMid{a b c d}{2}{6}[\aa]\aa|
+\exemple*|\StrMid{abcdef}{4}{2}[\aa]\aa|
+\exemple|\StrMid{abcdef}{-4}{3}[\aa]\aa|
+\exemple*|\StrMid{abcdef}{-4}{-1}[\aa]\aa|
+\exemple|\StrMid{abcdef}{-4}{20}[\aa]\aa|
+\exemple*|\StrMid{abcdef}{8}{10}[\aa]\aa|
+\exemple|\StrMid{abcdef}{2}{2}[\aa]\aa|
+\exemple|\StrMid{aaaaaa}{3}{6}[\aa]\aa|
+\exemple*|\StrMid{}{4}{5}[\aa]\aa|
+
+\chapitre{La macro}{StrGobbleLeft}
+
+\exemple|\StrGobbleLeft{abcdef}{3}|
+\exemple*|\StrGobbleLeft{a b c d}{3}|
+\exemple|\StrGobbleLeft{abcdef}{-3}|
+\exemple*|\StrGobbleLeft{abcdef}{9}|
+\exemple|\StrGobbleLeft{aaaaa}{4}|
+\exemple*|\StrGobbleLeft{}{2}|
+
+\AvecArgOptionnel
+\exemple|\StrGobbleLeft{abcdef}{3}[\aa]\aa|
+\exemple*|\StrGobbleLeft{a b c d}{3}[\aa]\aa|
+\exemple|\StrGobbleLeft{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrGobbleLeft{abcdef}{9}[\aa]\aa|
+\exemple|\StrGobbleLeft{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrGobbleLeft{}{2}[\aa]\aa|
+
+\chapitre{La macro}{StrGobbleRight}
+
+\exemple|\StrGobbleRight{abcdef}{3}|
+\exemple*|\StrGobbleRight{a b c d}{3}|
+\exemple|\StrGobbleRight{abcdef}{-3}|
+\exemple*|\StrGobbleRight{abcdef}{9}|
+\exemple|\StrGobbleRight{aaaaa}{4}|
+\exemple*|\StrGobbleRight{}{2}|
+
+\AvecArgOptionnel
+\exemple|\StrGobbleRight{abcdef}{3}[\aa]\aa|
+\exemple*|\StrGobbleRight{a b c d}{3}[\aa]\aa|
+\exemple|\StrGobbleRight{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrGobbleRight{abcdef}{9}[\aa]\aa|
+\exemple|\StrGobbleRight{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrGobbleRight{}{2}[\aa]\aa|
+
+\chapitre{La macro}{StrLeft}
+
+\exemple|\StrLeft{abcdef}{3}|
+\exemple*|\StrLeft{a b c d}{3}|
+\exemple*|\StrLeft{abcdef}{-3}|
+\exemple*|\StrLeft{abcdef}{9}|
+\exemple|\StrLeft{aaaaa}{4}|
+\exemple*|\StrLeft{}{2}|
+
+\AvecArgOptionnel
+\exemple|\StrLeft{abcdef}{3}[\aa]\aa|
+\exemple*|\StrLeft{a b c d}{3}[\aa]\aa|
+\exemple*|\StrLeft{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrLeft{abcdef}{9}[\aa]\aa|
+\exemple|\StrLeft{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrLeft{}{2}[\aa]\aa|
+
+\chapitre{La macro}{StrRight}
+
+\exemple|\StrRight{abcdef}{3}|
+\exemple*|\StrRight{a b c d}{3}|
+\exemple*|\StrRight{abcdef}{-3}|
+\exemple*|\StrRight{abcdef}{9}|
+\exemple|\StrRight{aaaaa}{4}|
+\exemple*|\StrRight{}{2}|
+
+\AvecArgOptionnel
+\exemple|\StrRight{abcdef}{3}[\aa]\aa|
+\exemple*|\StrRight{a b c d}{3}[\aa]\aa|
+\exemple*|\StrRight{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrRight{abcdef}{9}[\aa]\aa|
+\exemple|\StrRight{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrRight{}{2}[\aa]\aa|
+
+\chapitre{la macro}{StrChar}
+
+\exemple|\StrChar{abcdef}{5}|
+\exemple*|\StrChar{a b c d}{4}|
+\exemple|\StrChar{a b c d}{7}|
+\exemple*|\StrChar{abcdef}{10}|
+\exemple*|\StrChar{abcdef}{-5}|
+\exemple*|\StrChar{}{3}|
+
+\AvecArgOptionnel
+\exemple|\StrChar{abcdef}{5}[\aa]\aa|
+\exemple*|\StrChar{a b c d}{4}[\aa]\aa|
+\exemple|\StrChar{a b c d}{7}[\aa]\aa|
+\exemple*|\StrChar{abcdef}{10}[\aa]\aa|
+\exemple*|\StrChar{abcdef}{-5}[\aa]\aa|
+\exemple*|\StrChar{}{3}[\aa]\aa|
+
+\chapitre{La macro}{StrCount}
+
+\exemple|\StrCount{abcdef}{d}|
+\exemple|\StrCount{a b c d}{ }|
+\exemple|\StrCount{aaaaaa}{aa}|
+\exemple|\StrCount{abcdef}{Z}|
+\exemple|\StrCount{abcdef}{}|
+\exemple|\StrCount{}{a}|
+\exemple|\StrCount{}{}|
+
+\AvecArgOptionnel
+\exemple|\StrCount{abcdef}{d}[\aa]\aa|
+\exemple|\StrCount{a b c d}{ }[\aa]\aa|
+\exemple|\StrCount{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrCount{abcdef}{Z}[\aa]\aa|
+\exemple|\StrCount{abcdef}{}[\aa]\aa|
+\exemple|\StrCount{}{a}[\aa]\aa|
+\exemple|\StrCount{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrPosition}
+
+\exemple|\StrPosition{abcdef}{c}|
+\exemple|\StrPosition{abcdef}{Z}|
+\exemple|\StrPosition{a b c d}{ }|
+\exemple|\StrPosition[3]{a b c d}{ }|
+\exemple|\StrPosition[8]{a b c d}{ }|
+\exemple|\StrPosition{aaaaaa}{aa}|
+\exemple|\StrPosition[2]{aaaaaa}{aa}|
+\exemple|\StrPosition[3]{aaaaaa}{aa}|
+\exemple|\StrPosition{abcdef}{}|
+\exemple|\StrPosition{}{a}|
+\exemple|\StrPosition{}{}|
+
+\AvecArgOptionnel
+\exemple|\StrPosition{abcdef}{c}[\aa]\aa|
+\exemple|\StrPosition{abcdef}{Z}[\aa]\aa|
+\exemple|\StrPosition{a b c d}{ }[\aa]\aa|
+\exemple|\StrPosition[3]{a b c d}{ }[\aa]\aa|
+\exemple|\StrPosition[8]{a b c d}{ }[\aa]\aa|
+\exemple|\StrPosition{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrPosition[2]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrPosition[3]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrPosition{abcdef}{}[\aa]\aa|
+\exemple|\StrPosition{}{a}[\aa]\aa|
+\exemple|\StrPosition{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrCompare}
+
+La tolérance normale :\par
+\exemple|\StrCompare{abcdefghij}{abc}|
+\exemple|\StrCompare{A}{A}|
+\exemple|\StrCompare{abcdef}{a bd}|
+\exemple|\StrCompare{ }{ }|
+\exemple|\StrCompare{}{abcd}|
+\exemple|\StrCompare{abcd}{}|
+\exemple|\StrCompare{123456}{1234}|
+\exemple|\StrCompare{a b c d}{a bcd}|
+\exemple|\StrCompare{}{}|
+\exemple|\StrCompare{eee}{eeee}|
+\exemple|\StrCompare{eeee}{eee}|
+\exemple|\StrCompare{totutu}{tututu}|
+\exemple|\StrCompare{abcd}{abyz}|
+
+\AvecArgOptionnel
+\exemple|\StrCompare{abcdefghij}{abc}[\aa]\aa|
+\exemple|\StrCompare{A}{A}[\aa]\aa|
+\exemple|\StrCompare{abcdef}{a bd}[\aa]\aa|
+\exemple|\StrCompare{ }{ }[\aa]\aa|
+\exemple|\StrCompare{}{abcd}[\aa]\aa|
+\exemple|\StrCompare{abcd}{}[\aa]\aa|
+\exemple|\StrCompare{123456}{1234}[\aa]\aa|
+\exemple|\StrCompare{a b c d}{a bcd}[\aa]\aa|
+\exemple|\StrCompare{}{}[\aa]\aa|
+\exemple|\StrCompare{eee}{eeee}[\aa]\aa|
+\exemple|\StrCompare{eeee}{eee}[\aa]\aa|
+\exemple|\StrCompare{totutu}{tututu}[\aa]\aa|
+\exemple|\StrCompare{abcd}{abyz}[\aa]\aa|
+
+La tolérance stricte :\par\comparestrict
+\exemple|\StrCompare{abcdefghij}{abc}|
+\exemple|\StrCompare{A}{A}|
+\exemple|\StrCompare{abcdef}{a bd}|
+\exemple|\StrCompare{ }{ }|
+\exemple|\StrCompare{}{abcd}|
+\exemple|\StrCompare{abcd}{}|
+\exemple|\StrCompare{123456}{1234}|
+\exemple|\StrCompare{a b c d}{a bcd}|
+\exemple|\StrCompare{}{}|
+\exemple|\StrCompare{eee}{eeee}|
+\exemple|\StrCompare{eeee}{eee}|
+\exemple|\StrCompare{totutu}{tututu}|
+\exemple|\StrCompare{abcd}{abyz}|
+
+\AvecArgOptionnel
+\exemple|\StrCompare{abcdefghij}{abc}[\aa]\aa|
+\exemple|\StrCompare{A}{A}[\aa]\aa|
+\exemple|\StrCompare{abcdef}{a bd}[\aa]\aa|
+\exemple|\StrCompare{ }{ }[\aa]\aa|
+\exemple|\StrCompare{}{abcd}[\aa]\aa|
+\exemple|\StrCompare{abcd}{}[\aa]\aa|
+\exemple|\StrCompare{123456}{1234}[\aa]\aa|
+\exemple|\StrCompare{a b c d}{a bcd}[\aa]\aa|
+\exemple|\StrCompare{}{}[\aa]\aa|
+\exemple|\StrCompare{eee}{eeee}[\aa]\aa|
+\exemple|\StrCompare{eeee}{eee}[\aa]\aa|
+\exemple|\StrCompare{totutu}{tututu}[\aa]\aa|
+\exemple|\StrCompare{abcd}{abyz}[\aa]\aa|
+\vskip5em
+
+\hfill{\hugerm Le mode \hugett\string\noexpandarg}\hfill{}
+
+\vskip-1ex\hfil\hbox to8cm{\hrulefill}\hfil{}\vskip3.5ex
+
+Dans toute la suite sauf si c'est précisé, la commande {\tt\string\noexpandarg} est activée.\vskip1.5ex
+
+\catcode`\@=11\relax
+\expandafter\long\expandafter\def\csname xs_assign_verb\endcsname#1{%
+ \tokenize\cs@resultat{#1}%
+ \leavevmode\hbox to0.7\hsize{\hfil\tt#1}\quad\frontiere\cs@resultat\frontiere\hfil\par}%
+\catcode`\@=12\relax
+\noexpandarg
+
+\chapitre{Le test}{IfSubStr}
+
+\exemple|\noexploregroups|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{2}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{34}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{{34}}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\b}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc5}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc{5}}{vrai}{faux}|
+\exemple|\IfSubStr[1]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[2]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[3]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[4]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{2}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{34}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{{34}}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\b}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc5}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc{5}}{vrai}{faux}|
+\exemple|\IfSubStr[1]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[2]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[3]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[4]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+
+\chapitre{Le test}{IfBeginWith}
+
+Les tests doivent donner des résultats identiques ci-dessous puisque {\tt\string\IfBeginWith} est indifférent au mode d'exploration des groupes !\vskip0.7ex
+
+\exemple|\noexploregroups|
+\exemple|\IfBeginWith{{\a}123\b456}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a}123\b456}{{\a}}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a1}\b\c\d}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{12}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{1}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{{1}2}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfBeginWith{{\a}123\b456}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a}123\b456}{{\a}}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a1}\b\c\d}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{12}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{1}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{{1}2}{vrai}{faux}|
+
+\chapitre{Le test}{IfEndWith}
+
+Les tests doivent donner des résultats identiques ci-dessous puisque {\tt\string\IfEndWith} est indifférent au mode d'exploration des groupes !\vskip0.7ex
+
+\exemple|\noexploregroups|
+\exemple|\IfEndWith{\a1\b2{\c3}}{\c3}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{{\c3}}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{3}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{56}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{6}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{5{6}}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfEndWith{\a1\b2{\c3}}{\c3}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{{\c3}}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{3}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{56}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{6}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{5{6}}{vrai}{faux}|
+
+\chapitre{Le test}{IfSubStrBefore}
+
+\exemple|\noexploregroups|
+\exemple|\IfSubStrBefore[1,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,3]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,1]{\a1{\a2\a3\b1}\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,2]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfSubStrBefore[1,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,3]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,1]{\a1{\a2\a3\b1}\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,2]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+
+\chapitre{Le test}{IfStrBehind}
+
+\exemple|\noexploregroups|
+\exemple|\IfSubStrBehind[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,1]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1\a2\a3\b1\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[2,1]{\a1{\a2\a3\b1}\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfSubStrBehind[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,1]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1\a2\a3\b1\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[2,1]{\a1{\a2\a3\b1}\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+
+\chapitre{Le test}{IfInteger}
+
+Dans les exemples ci-dessous, on examine la différence de comportement de la macro {\tt\string\IfInteger} selon les modes de développement des arguments.\vskip0.7ex
+
+\exemple|\def\nbA{-12}\def\nbB{498}|
+\exemple|\def\nbAA{\nbA}\def\nbBB{\nbB}|\vskip0.7ex
+\exemple|\fullexpandarg|
+\exemple|\IfInteger{\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA5\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA6\nbB}{vrai}{faux}|
+\exemple|\IfInteger{\nbAA7\nbBB}{vrai}{faux}|\vskip0.7ex
+\exemple|\expandarg|
+\exemple|\IfInteger{\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA5\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA6\nbB}{vrai}{faux}|
+\exemple|\IfInteger{\nbAA7\nbBB}{vrai}{faux}|\vskip0.7ex
+\exemple|\noexpandarg|
+\exemple|\IfInteger{\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA5\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA6\nbB}{vrai}{faux}|
+\exemple|\IfInteger{\nbAA7\nbBB}{vrai}{faux}|
+
+\chapitre{Le test}{IfDecimal}
+
+Dans les exemples ci-dessous, on examine la différence de comportement de la macro {\tt\string\IfDecimal} selon les modes de développement des arguments.\vskip0.7ex
+
+\exemple|\def\nbA{-12}\def\nbB{498}|
+\exemple|\def\nbAA{\nbA}\def\nbBB{\nbB}|\vskip0.7ex
+\exemple|\fullexpandarg|
+\exemple|\IfDecimal{\nbA,\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbAA.\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{3\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,\nbB}{vrai}{faux}|\vskip0.7ex
+\exemple|\expandarg|
+\exemple|\IfDecimal{\nbA,\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbAA.\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{3\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,\nbB}{vrai}{faux}|\vskip0.7ex
+\exemple|\noexpandarg|
+\exemple|\IfDecimal{\nbA,\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbAA.\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{3\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,\nbB}{vrai}{faux}|
+
+\chapitre{La macro}{StrBefore}
+
+\exemple|\noexploregroups|
+\exemple|\StrBefore[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrBefore[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBefore[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrBehind}
+
+\exemple|\noexploregroups|
+\exemple|\StrBehind[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrBehind[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBehind[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrBetween}
+
+La commande {\tt\string\StrBetween} opère en mode {\tt\string\noexploregroups}, quelque soit le mode d'exploration en cours.\vskip0.7ex
+
+\exemple|\StrBetween[1,3]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{2}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBetween[2,3]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBetween[1,3]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{3}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrBetween[2,4]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+
+\chapitre{La macro}{StrSubstitute}
+
+\exemple|\noexploregroups|
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{2}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{3\a}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{a1{b1\bgroup c1}\egroup d1}{1}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{2}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{3\a}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+\exemple|\StrSubstitute{a1{b1\bgroup c1}\egroup d1}{1}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{La macro}{StrDel}
+
+\exemple|\noexploregroups|
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{2}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{3\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{2}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{3\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+
+\chapitre{La macro}{StrLen}
+
+\exemple|\noexploregroups|
+\exemple|\StrLen{a1{a2}{\a\b}{a3}a4}|
+\exemple|\exploregroups|
+\exemple|\StrLen{a1{a2}{\a\b}{a3}a4}|
+
+\chapitre{la macro}{StrSplit}
+
+\exemple|\noexploregroups|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{2}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{3}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+\exemple|\exploregroups|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{2}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{3}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+
+\chapitre{la macro}{StrMid}
+
+La commande {\tt\string\StrMid} opère en mode {\tt\string\noexploregroups}, quelque soit le mode d'exploration en cours.\vskip0.7ex
+
+\exemple|\StrMid{\a\b{\c\d}\e\f\g\h}{2}{6}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\StrMid{\a\b{\c\d}\e\f\g\h}{3}{4}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+
+\chapitre{La macro}{StrGobbleLeft}
+
+\exemple|\noexploregroups|
+\exemple|\StrGobbleLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrGobbleLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrGobbleRight}
+
+\exemple|\noexploregroups|
+\exemple|\StrGobbleRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrGobbleRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+
+\chapitre{La macro}{StrLeft}
+
+\exemple|\noexploregroups|
+\exemple|\StrLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrRight}
+
+\exemple|\noexploregroups|
+\exemple|\StrRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+
+\chapitre{la macro}{StrChar}
+
+\exemple|\noexploregroups|
+\exemple|\StrChar{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrChar{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+
+\chapitre{La macro}{StrCount}
+
+\exemple|\noexploregroups|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{\a}|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{2}|
+\exemple|\exploregroups|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{\a}|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{2}|
+
+\chapitre{La macro}{StrPosition}
+
+\exemple|\noexploregroups|
+\exemple|\StrPosition[3]{\a0\a1{\a{2\a3}4}\a5\a6}{\a}|
+\exemple|\StrPosition[4]{\a0\a1{\a{3\a4}5}\a6\a7}{\a}|
+\exemple|\StrPosition[1]{\a0\a1{\a{2\a3}4}\a5\a6}{2}|
+\exemple|\exploregroups|
+\exemple|\StrPosition[3]{\a0\a1{\a{2\a3}4}\a5\a6}{\a}|
+\exemple|\StrPosition[4]{\a0\a1{\a{2\a3}4}\a5\a6}{\a}|
+\exemple|\StrPosition[1]{\a0\a1{\a{2\a3}4}\a5\a6}{2}|
+
+\chapitre{La macro}{StrCompare}
+
+La commande {\tt\string\StrCompare} n'est pas affectée par le mode d'exploration.\vskip0.7ex
+
+\exemple|\comparenormal|
+\exemple|\StrCompare{\a{\b1}\c2}{\a\b1\c2}|
+\exemple|\StrCompare{{1\a2}3}{{1\a2}3}|
+\exemple|\StrCompare{{1\a2}3}{1\a23}|
+\exemple|\StrCompare{\a{\b\c}}{\a{\b\c}\d}|
+\exemple|\StrCompare{{\a}\b}{\a\b}|
+\exemple|\comparestrict|
+\exemple|\StrCompare{\a{\b1}\c2}{\a\b1\c2}|
+\exemple|\StrCompare{{1\a2}3}{{1\a2}3}|
+\exemple|\StrCompare{{1\a2}3}{1\a23}|
+\exemple|\StrCompare{\a{\b\c}}{\a{\b\c}\d}|
+\exemple|\StrCompare{{\a}\b}{\a\b}|
+
+\chapitre{La macro}{StrRemoveBraces}
+
+\exemple|\noexploregroups|
+\exemple|\StrRemoveBraces{\a1{\b2{\c3{\d4}}}\e5}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\exemple|\exploregroups|
+\exemple|\StrRemoveBraces{\a1{\b2{\c3{\d4}}}\e5}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\vskip0.7ex
+\end \ No newline at end of file
diff --git a/macros/generic/xstring/test_latex.pdf b/macros/generic/xstring/test_latex.pdf
new file mode 100644
index 0000000000..2642a17751
--- /dev/null
+++ b/macros/generic/xstring/test_latex.pdf
Binary files differ
diff --git a/macros/generic/xstring/test_latex.tex b/macros/generic/xstring/test_latex.tex
new file mode 100644
index 0000000000..ca5d54f022
--- /dev/null
+++ b/macros/generic/xstring/test_latex.tex
@@ -0,0 +1,1078 @@
+% Ceci est test_latex.tex, le fichier de test de xstring à compiler avec LaTeX
+\documentclass[a4paper,10pt]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage[margin=1cm,noheadfoot]{geometry}
+\pagestyle{empty}
+\usepackage{xstring}
+
+\makeatletter
+
+\newcommand*\exemple{\@ifstar{\def\frontiere{|}\csname xs_toks_toverb\endcsname}{\def\frontiere{}\csname xs_toks_toverb\endcsname}}
+\expandafter\def\csname xs_assign_verb\endcsname#1{%
+ \noexpandarg
+ \tokenize\cs@resultat{#1}%
+ \fullexpandarg
+ \leavevmode\hbox to0.7\linewidth{\hfil\tt#1}\quad\frontiere\cs@resultat\frontiere\hfil\par}%
+\makeatother
+
+\newcommand\chapitre[2]{\bigskip{\large\textbf{#1} \texttt{\textbackslash#2}}\smallskip}
+\def\delimiteur{|}
+
+\begin{document}
+\parindent0pt
+
+\begin{center}\Large{Ceci est le fichier de test de xstring}.\end{center}
+\vspace{-1.8ex}\hrule\smallskip
+
+\hrule
+
+\bigskip
+Toutes les situations ne sont pas envisagées, mais au moins un grand nombre ! Les macros sont examinées dans l'ordre logique du code.
+
+Lorsque le résultat contient des espaces ou peut conduire à des doutes, il sera entouré de ''\delimiteur``, étant entendu que ''\delimiteur\delimiteur`` est une chaîne vide.\bigskip
+
+\hfill{\Large Le mode \tt\textbackslash fullexpandarg}\hfill{}
+
+\vspace{-1.5ex}\hspace{6cm}\hrulefill\hspace{6cm}
+
+\bigskip
+\chapitre{Le test}{IfSubStr}
+
+\exemple|\IfSubStr{abcdef}{cd}{vrai}{faux}|
+\exemple|\IfSubStr{a b c d }{b c}{vrai}{faux}|
+\exemple|\IfSubStr{a b c d }{bc}{vrai}{faux}|
+\exemple|\IfSubStr{abcdef}{}{vrai}{faux}|
+\exemple|\IfSubStr{a}{a}{vrai}{faux}|
+\exemple|\IfSubStr{aaaa}{aa}{vrai}{faux}|
+\exemple|\IfSubStr{a}{aa}{vrai}{faux}|
+\exemple|\IfSubStr{éàèï}{à}{vrai}{faux}|
+\exemple|\IfSubStr{éàèï}{ù}{vrai}{faux}|
+\exemple|\IfSubStr{ÉÀÇ}{Ç}{vrai}{faux}|
+\exemple|\IfSubStr{a}{}{vrai}{faux}|
+\exemple|\IfSubStr{}{a}{vrai}{faux}|
+\exemple|\IfSubStr{}{}{vrai}{faux}|
+\exemple|\IfSubStr[2]{abaca}{a}{vrai}{faux}|
+\exemple|\IfSubStr[3]{abaca}{a}{vrai}{faux}|
+\exemple|\IfSubStr[4]{abaca}{a}{vrai}{faux}|
+\exemple|\IfSubStr[-2]{abaca}{a}{vrai}{faux}|
+
+\chapitre{Le test}{IfBeginWith}
+
+\exemple|\IfBeginWith{abcdef}{adc}{vrai}{faux}|
+\exemple|\IfBeginWith{abcdef}{abcd}{vrai}{faux}|
+\exemple|\IfBeginWith{ a b c }{ a}{vrai}{faux}|
+\exemple|\IfBeginWith{a b c d}{ab}{vrai}{faux}|
+\exemple|\IfBeginWith{a}{a}{vrai}{faux}|
+\exemple|\IfBeginWith{a}{aa}{vrai}{faux}|
+\exemple|\IfBeginWith{éàèï}{è}{vrai}{faux}|
+\exemple|\IfBeginWith{éàèï}{éà}{vrai}{faux}|
+\exemple|\IfBeginWith{ÉÀÇ}{É}{vrai}{faux}|
+\exemple|\IfBeginWith{a}{}{vrai}{faux}|
+\exemple|\IfBeginWith{}{a}{vrai}{faux}|
+\exemple|\IfBeginWith{}{}{vrai}{faux}|
+
+\chapitre{Le test}{IfEndWith}
+
+\exemple|\IfEndWith{abcdef}{ab}{vrai}{faux}|
+\exemple|\IfEndWith{abcdef}{f}{vrai}{faux}|
+\exemple|\IfEndWith{ a b c }{c}{vrai}{faux}|
+\exemple|\IfEndWith{ a b c }{ }{vrai}{faux}|
+\exemple|\IfEndWith{a}{a}{vrai}{faux}|
+\exemple|\IfEndWith{a}{aa}{vrai}{faux}|
+\exemple|\IfEndWith{éàèï}{è}{vrai}{faux}|
+\exemple|\IfEndWith{éàèï}{ï}{vrai}{faux}|
+\exemple|\IfEndWith{ÉÀÇ}{Ç}{vrai}{faux}|
+\exemple|\IfEndWith{a}{}{vrai}{faux}|
+\exemple|\IfEndWith{}{a}{vrai}{faux}|
+\exemple|\IfEndWith{}{}{vrai}{faux}|
+
+\chapitre{Le test}{IfSubStrBefore}
+
+\exemple|\IfSubStrBefore{abcdef}{b}{e}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{e}{c}{vrai}{faux}|
+\exemple|\IfSubStrBefore{ a b c }{ }{b}{vrai}{faux}|
+\exemple|\IfSubStrBefore{ a b c }{ b}{c }{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{z}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{y}{z}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{a}{z}{vrai}{faux}|
+\exemple|\IfSubStrBefore{aaa}{a}{aa}{vrai}{faux}|
+\exemple|\IfSubStrBefore{abcdef}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{éàèï}{à}{ï}{vrai}{faux}|
+\exemple|\IfSubStrBefore{éàèï}{é}{à}{vrai}{faux}|
+\exemple|\IfSubStrBefore{ÉÀÇ}{Ç}{É}{vrai}{faux}|
+\exemple|\IfSubStrBefore{a}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{}{a}{b}{vrai}{faux}|
+\exemple|\IfSubStrBefore{a}{}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore{}{}{}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,1]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,2]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,3]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,4]{abacada}{d}{a}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,1]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,2]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBefore[4,2]{maman papa}{a}{p}{vrai}{faux}|
+
+\chapitre{Le test}{IfStrBehind}
+
+\exemple|\IfSubStrBehind{abcdef}{b}{e}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{e}{c}{vrai}{faux}|
+\exemple|\IfSubStrBehind{ a b c }{ }{b}{vrai}{faux}|
+\exemple|\IfSubStrBehind{ a b c }{ c}{ a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{z}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{y}{z}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{a}{z}{vrai}{faux}|
+\exemple|\IfSubStrBehind{aaa}{a}{aa}{vrai}{faux}|
+\exemple|\IfSubStrBehind{abcdef}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{éàèï}{ï}{à}{vrai}{faux}|
+\exemple|\IfSubStrBehind{éàèï}{à}{é}{vrai}{faux}|
+\exemple|\IfSubStrBehind{ÉÀÇ}{À}{Ç}{vrai}{faux}|
+\exemple|\IfSubStrBehind{a}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{}{a}{b}{vrai}{faux}|
+\exemple|\IfSubStrBehind{a}{}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{}{a}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind{}{}{}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{abacada}{c}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,2]{abacada}{c}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,3]{abacada}{c}{a}{vrai}{faux}|
+\exemple|\IfSubStrBehind[2,1]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,1]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,2]{maman papa}{a}{p}{vrai}{faux}|
+\exemple|\IfSubStrBehind[4,2]{maman papa}{a}{p}{vrai}{faux}|
+
+\chapitre{Le test}{IfInteger}
+
+\exemple|\IfInteger{156}{vrai}{faux}|
+\exemple|\IfInteger{1.6}{vrai}{faux}|
+\exemple|\IfInteger{7a5}{vrai}{faux}|
+\exemple|\IfInteger{+9}{vrai}{faux}|
+\exemple|\IfInteger{-15}{vrai}{faux}|
+\exemple|\IfInteger{0}{vrai}{faux}|
+\exemple|\IfInteger{-1,2}{vrai}{faux}|
+\exemple|\IfInteger{1.}{vrai}{faux}|
+\exemple|\IfInteger{-00}{vrai}{faux}|
+\exemple|\IfInteger{+}{vrai}{faux}|
+\exemple|\IfInteger{-}{vrai}{faux}|
+\exemple|\IfInteger{.}{vrai}{faux}|
+\exemple|\IfInteger{}{vrai}{faux}|
+
+\chapitre{Le test}{IfDecimal}
+
+\exemple|\IfDecimal{6}{vrai}{faux}|
+\exemple|\IfDecimal{-78}{vrai}{faux}|
+\exemple|\IfDecimal{3.14}{vrai}{faux}|
+\exemple|\IfDecimal{3,14}{vrai}{faux}|
+\exemple|\IfDecimal{1..5}{vrai}{faux}|
+\exemple|\IfDecimal{-9.8}{vrai}{faux}|
+\exemple|\IfDecimal{+9.8}{vrai}{faux}|
+\exemple|\IfDecimal{-9,8}{vrai}{faux}|
+\exemple|\IfDecimal{+9,8}{vrai}{faux}|
+\exemple|\IfDecimal{+6.7.}{vrai}{faux}|
+\exemple|\IfDecimal{.5}{vrai}{faux}|
+\exemple|\IfDecimal{1.}{vrai}{faux}|
+\exemple|\IfDecimal{-.99}{vrai}{faux}|
+\exemple|\IfDecimal{-5.}{vrai}{faux}|
+\exemple|\IfDecimal{5a9.}{vrai}{faux}|
+\exemple|\IfDecimal{+}{vrai}{faux}|
+\exemple|\IfDecimal{-}{vrai}{faux}|
+\exemple|\IfDecimal{.}{vrai}{faux}|
+\exemple|\IfDecimal{}{vrai}{faux}|
+
+\chapitre{Le test}{IfStrEq}
+
+\exemple|\IfStrEq{abcdef}{abcdef}{vrai}{faux}|
+\exemple|\IfStrEq{a b c}{a b c}{vrai}{faux}|
+\exemple|\IfStrEq{abcd}{abc}{vrai}{faux}|
+\exemple|\IfStrEq{aab}{ab}{vrai}{faux}|
+\exemple|\IfStrEq{aab}{aa}{vrai}{faux}|
+\exemple|\IfStrEq{1.2}{1.20}{vrai}{faux}|
+\exemple|\IfStrEq{3,4}{3.4}{vrai}{faux}|
+\exemple|\IfStrEq{ }{ }{vrai}{faux}|
+\exemple|\IfStrEq{}{a}{vrai}{faux}|
+\exemple|\IfStrEq{a}{}{vrai}{faux}|
+\exemple|\IfStrEq{}{}{vrai}{faux}|
+
+\chapitre{Le test}{IfEq}
+
+\exemple|\IfEq{abcdef}{abcdef}{vrai}{faux}|
+\exemple|\IfEq{a b c}{a b c}{vrai}{faux}|
+\exemple|\IfEq{abcd}{abc}{vrai}{faux}|
+\exemple|\IfEq{aab}{ab}{vrai}{faux}|
+\exemple|\IfEq{aab}{aa}{vrai}{faux}|
+\exemple|\IfEq{1.2}{1.20}{vrai}{faux}|
+\exemple|\IfEq{+1.0000}{1}{vrai}{faux}|
+\exemple|\IfEq{-10}{10}{vrai}{faux}|
+\exemple|\IfEq{1,2}{1.2}{vrai}{faux}|
+\exemple|\IfEq{.5}{0.5}{vrai}{faux}|
+\exemple|\IfEq{,5}{0,5}{vrai}{faux}|
+\exemple|\IfEq{10}{dix}{vrai}{faux}|
+\exemple|\IfEq{123}{1a3}{vrai}{faux}|
+\exemple|\IfEq{0}{}{vrai}{faux}|
+\exemple|\IfEq{++10}{+10}{vrai}{faux}|
+\exemple|\IfEq{--10}{+10}{vrai}{faux}|
+\exemple|\IfEq{a}{}{vrai}{faux}|
+\exemple|\IfEq{}{a}{vrai}{faux}|
+\exemple|\IfEq{}{}{vrai}{faux}|
+
+\chapitre{La macro}{StrBefore}
+
+\exemple|\StrBefore{abcedef}{e}|
+\exemple*|\StrBefore{abcdef}{a}|
+\exemple*|\StrBefore{abcdef}{z}|
+\exemple*|\StrBefore{a b c d}{c}|
+\exemple*|\StrBefore{a b c d}{ }|
+\exemple*|\StrBefore[2]{a b c d}{ }|
+\exemple*|\StrBefore[3]{a b c d}{ }|
+\exemple*|\StrBefore[9]{a b c d}{ }|
+\exemple*|\StrBefore[-7]{a b c d}{ }|
+\exemple*|\StrBefore{abcdef}{Z}|
+\exemple|\StrBefore{éàèï}{è}|
+\exemple|\StrBefore[2]{étété}{é}|
+\exemple|\StrBefore{ÉÀÇ}{À}|
+\exemple*|\StrBefore[1]{aaaaaa}{aa}|
+\exemple|\StrBefore[2]{aaaaaa}{aa}|
+\exemple|\StrBefore[3]{aaaaaa}{aa}|
+\exemple*|\StrBefore[4]{aaaaaa}{aa}|
+\exemple*|\StrBefore{a}{}|
+\exemple*|\StrBefore{}{a}|
+\exemple*|\StrBefore{}{}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrBefore{abcedef}{e}[\aa]\aa|
+\exemple*|\StrBefore{abcdef}{a}[\aa]\aa|
+\exemple*|\StrBefore{abcdef}{z}[\aa]\aa|
+\exemple*|\StrBefore{a b c d}{c}[\aa]\aa|
+\exemple*|\StrBefore{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[2]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[3]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[9]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore[-7]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBefore{abcdef}{Z}[\aa]\aa|
+\exemple|\StrBefore{éàèï}{è}[\aa]\aa|
+\exemple|\StrBefore[2]{étété}{é}[\aa]\aa|
+\exemple|\StrBefore{ÉÀÇ}{À}[\aa]\aa|
+\exemple*|\StrBefore[1]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrBefore[2]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrBefore[3]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBefore[4]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBefore{a}{}[\aa]\aa|
+\exemple*|\StrBefore{}{a}[\aa]\aa|
+\exemple*|\StrBefore{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrBehind}
+
+\exemple|\StrBehind{abcedef}{e}|
+\exemple*|\StrBehind{abcdef}{a}|
+\exemple*|\StrBehind{abcdef}{z}|
+\exemple*|\StrBehind{a b c d}{c}|
+\exemple*|\StrBehind{a b c d}{ }|
+\exemple*|\StrBehind[2]{a b c d}{ }|
+\exemple*|\StrBehind[3]{a b c d}{ }|
+\exemple*|\StrBehind[9]{a b c d}{ }|
+\exemple*|\StrBehind[-7]{a b c d}{ }|
+\exemple*|\StrBehind{abcdef}{Z}|
+\exemple|\StrBehind{éàèï}{è}|
+\exemple|\StrBehind{ÉÀÇ}{À}|
+\exemple|\StrBehind[1]{aaaaaa}{aa}|
+\exemple|\StrBehind[2]{aaaaaa}{aa}|
+\exemple*|\StrBehind[3]{aaaaaa}{aa}|
+\exemple*|\StrBehind[4]{aaaaaa}{aa}|
+\exemple*|\StrBehind{a}{}|
+\exemple*|\StrBehind{}{a}|
+\exemple*|\StrBehind{}{}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrBehind{abcedef}{e}[\aa]\aa|
+\exemple*|\StrBehind{abcdef}{a}[\aa]\aa|
+\exemple*|\StrBehind{abcdef}{z}[\aa]\aa|
+\exemple*|\StrBehind{a b c d}{c}[\aa]\aa|
+\exemple*|\StrBehind{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[2]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[3]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[9]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind[-7]{a b c d}{ }[\aa]\aa|
+\exemple*|\StrBehind{abcdef}{Z}[\aa]\aa|
+\exemple|\StrBehind{éàèï}{è}[\aa]\aa|
+\exemple|\StrBehind{ÉÀÇ}{À}[\aa]\aa|
+\exemple|\StrBehind[1]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrBehind[2]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBehind[3]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBehind[4]{aaaaaa}{aa}[\aa]\aa|
+\exemple*|\StrBehind{a}{}[\aa]\aa|
+\exemple*|\StrBehind{}{a}[\aa]\aa|
+\exemple*|\StrBehind{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrBetween}
+
+\exemple|\StrBetween{abcdef}{b}{e}|
+\exemple*|\StrBetween{aZaaaaZa}{Z}{Z}|
+\exemple*|\StrBetween[1,2]{aZaaaaZa}{Z}{Z}|
+\exemple*|\StrBetween{a b c d}{a}{c}|
+\exemple*|\StrBetween{a b c d}{a }{ d}|
+\exemple*|\StrBetween{abcdef}{a}{Z}|
+\exemple*|\StrBetween{abcdef}{Y}{Z}|
+\exemple*|\StrBetween[2,5]{aAaBaCaDa}{a}{a}|
+\exemple*|\StrBetween[4,1]{ab1ab2ab3ab4ab}{b}{a}|
+\exemple*|\StrBetween[3,4]{a b c d e f}{ }{ }|
+\exemple|\StrBetween[1,3]{aaaaaa}{aa}{aa}|
+\exemple|\StrBetween{éàèï}{é}{ï}|
+\exemple|\StrBetween{ÉÀÇ}{É}{Ç}|
+\exemple*|\StrBetween{abcdef}{a}{}|
+\exemple*|\StrBetween{abcdef}{}{f}|
+\exemple*|\StrBetween{}{a}{b}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrBetween{abcdef}{b}{e}[\aa]\aa|
+\exemple*|\StrBetween{aZaaaaZa}{Z}{Z}[\aa]\aa|
+\exemple*|\StrBetween[1,2]{aZaaaaZa}{Z}{Z}[\aa]\aa|
+\exemple*|\StrBetween{a b c d}{a}{c}[\aa]\aa|
+\exemple*|\StrBetween{a b c d}{a }{ d}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{a}{Z}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{Y}{Z}[\aa]\aa|
+\exemple*|\StrBetween[2,5]{aAaBaCaDa}{a}{a}[\aa]\aa|
+\exemple*|\StrBetween[4,1]{ab1ab2ab3ab4ab}{b}{a}[\aa]\aa|
+\exemple*|\StrBetween[3,4]{a b c d e f}{ }{ }[\aa]\aa|
+\exemple|\StrBetween[1,3]{aaaaaa}{aa}{aa}[\aa]\aa|
+\exemple|\StrBetween{éàèï}{é}{ï}[\aa]\aa|
+\exemple|\StrBetween{ÉÀÇ}{É}{Ç}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{a}{}[\aa]\aa|
+\exemple*|\StrBetween{abcdef}{}{f}[\aa]\aa|
+\exemple*|\StrBetween{}{a}{b}[\aa]\aa|
+
+\chapitre{La macro}{StrSubstitute}
+
+\exemple|\StrSubstitute{abcdef}{c}{ZZ}|
+\exemple|\StrSubstitute{aaaaaaa}{aa}{w}|
+\exemple|\StrSubstitute[0]{abacada}{a}{.}|
+\exemple|\StrSubstitute[1]{abacada}{a}{.}|
+\exemple|\StrSubstitute[2]{abacada}{a}{.}|
+\exemple|\StrSubstitute[3]{abacada}{a}{.}|
+\exemple|\StrSubstitute[4]{abacada}{a}{.}|
+\exemple|\StrSubstitute[5]{abacada}{a}{.}|
+\exemple|\StrSubstitute{a b c d e}{ }{,}|
+\exemple|\StrSubstitute{a b c d e}{ }{}|
+\exemple|\StrSubstitute{éàèï}{è}{Z}|
+\exemple|\StrSubstitute{ÉÀÇ}{Ç}{c}|
+\exemple|\StrSubstitute{abcdef}{}{A}|
+\exemple|\StrSubstitute{abcdef}{}{}|
+\exemple*|\StrSubstitute{}{a}{b}|
+\exemple*|\StrSubstitute{}{}{}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrSubstitute{abcdef}{c}{ZZ}[\aa]\aa|
+\exemple|\StrSubstitute{aaaaaaa}{aa}{w}[\aa]\aa|
+\exemple|\StrSubstitute[0]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[1]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[2]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[3]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[4]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute[5]{abacada}{a}{.}[\aa]\aa|
+\exemple|\StrSubstitute{a b c d e}{ }{,}[\aa]\aa|
+\exemple|\StrSubstitute{a b c d e}{ }{}[\aa]\aa|
+\exemple|\StrSubstitute{éàèï}{è}{Z}[\aa]\aa|
+\exemple|\StrSubstitute{ÉÀÇ}{Ç}{c}[\aa]\aa|
+\exemple|\StrSubstitute{abcdef}{}{A}[\aa]\aa|
+\exemple|\StrSubstitute{abcdef}{}{}[\aa]\aa|
+\exemple*|\StrSubstitute{}{a}{b}[\aa]\aa|
+\exemple*|\StrSubstitute{}{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrDel}
+
+\exemple|\StrDel{a1a2a3a4}{a}|
+\exemple|\StrDel[2]{a1a2a3a4}{a}|
+\exemple|\StrDel[-2]{a1a2a3a4}{a}|
+\exemple|\StrDel[10]{a1a2a3a4}{a}|
+\exemple|\StrDel[3]{a b c d e}{a}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrDel{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[2]{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[-2]{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[10]{a1a2a3a4}{a}[\aa]\aa|
+\exemple|\StrDel[3]{a b c d e}{a}[\aa]\aa|
+
+\chapitre{La macro}{StrLen}
+
+\exemple|\StrLen{abcdef}|
+\exemple|\StrLen{a b c}|
+\exemple|\StrLen{ a b c }|
+\exemple|\StrLen{a}|
+\exemple|\StrLen{éàèï}|% fonctionne mal en utf8 : donne 8 au lieu de 4
+\exemple|\StrLen{ÉÀÇ}|% idem
+\exemple|\StrLen{}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrLen{abcdef}[\aa]\aa|
+\exemple|\StrLen{a b c}[\aa]\aa|
+\exemple|\StrLen{ a b c }[\aa]\aa|
+\exemple|\StrLen{a}[\aa]\aa|
+\exemple|\StrLen{éàèï}[\aa]\aa|% fonctionne mal en utf8 : donne 8 au lieu de 4
+\exemple|\StrLen{ÉÀÇ}[\aa]\aa|% idem
+\exemple|\StrLen{}[\aa]\aa|
+
+\chapitre{la macro}{StrSplit}
+
+\exemple|\StrSplit{abcde}{3}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{abcde}{1}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{abcde}{0}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{abcde}{-5}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{abcde}{20}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{a b c}{4}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{éàçù}{2}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+\exemple|\StrSplit{}{3}{\xx}{\yy}\#\xx\#\quad\#\yy\#|
+
+\chapitre{la macro}{StrMid}
+
+\exemple|\StrMid{abcdef}{2}{5}|
+\exemple*|\StrMid{a b c d}{2}{6}|
+\exemple*|\StrMid{abcdef}{4}{2}|
+\exemple|\StrMid{abcdef}{-4}{3}|
+\exemple*|\StrMid{abcdef}{-4}{-1}|
+\exemple|\StrMid{abcdef}{-4}{20}|
+\exemple*|\StrMid{abcdef}{8}{10}|
+\exemple|\StrMid{abcdef}{2}{2}|
+\exemple|\StrMid{éàèï}{2}{3}|
+\exemple|\StrMid{ÉÀÇ}{2}{3}|
+\exemple|\StrMid{aaaaaa}{3}{6}|
+\exemple*|\StrMid{}{4}{5}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrMid{abcdef}{2}{5}[\aa]\aa|
+\exemple*|\StrMid{a b c d}{2}{6}[\aa]\aa|
+\exemple*|\StrMid{abcdef}{4}{2}[\aa]\aa|
+\exemple|\StrMid{abcdef}{-4}{3}[\aa]\aa|
+\exemple*|\StrMid{abcdef}{-4}{-1}[\aa]\aa|
+\exemple|\StrMid{abcdef}{-4}{20}[\aa]\aa|
+\exemple*|\StrMid{abcdef}{8}{10}[\aa]\aa|
+\exemple|\StrMid{abcdef}{2}{2}[\aa]\aa|
+\exemple|\StrMid{éàèï}{2}{3}[\aa]\aa|
+\exemple|\StrMid{ÉÀÇ}{2}{3}[\aa]\aa|
+\exemple|\StrMid{aaaaaa}{3}{6}[\aa]\aa|
+\exemple*|\StrMid{}{4}{5}[\aa]\aa|
+
+\chapitre{La macro}{StrGobbleLeft}
+
+\exemple|\StrGobbleLeft{abcdef}{3}|
+\exemple*|\StrGobbleLeft{a b c d}{3}|
+\exemple|\StrGobbleLeft{abcdef}{-3}|
+\exemple*|\StrGobbleLeft{abcdef}{9}|
+\exemple|\StrGobbleLeft{éàèï}{2}|
+\exemple|\StrGobbleLeft{ÉÀÇ}{1}|
+\exemple|\StrGobbleLeft{aaaaa}{4}|
+\exemple*|\StrGobbleLeft{}{2}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrGobbleLeft{abcdef}{3}[\aa]\aa|
+\exemple*|\StrGobbleLeft{a b c d}{3}[\aa]\aa|
+\exemple|\StrGobbleLeft{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrGobbleLeft{abcdef}{9}[\aa]\aa|
+\exemple|\StrGobbleLeft{éàèï}{2}[\aa]\aa|
+\exemple|\StrGobbleLeft{ÉÀÇ}{1}[\aa]\aa|
+\exemple|\StrGobbleLeft{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrGobbleLeft{}{2}[\aa]\aa|
+
+\chapitre{La macro}{StrGobbleRight}
+
+\exemple|\StrGobbleRight{abcdef}{3}|
+\exemple*|\StrGobbleRight{a b c d}{3}|
+\exemple|\StrGobbleRight{abcdef}{-3}|
+\exemple*|\StrGobbleRight{abcdef}{9}|
+\exemple|\StrGobbleRight{éàèï}{2}|
+\exemple|\StrGobbleRight{ÉÀÇ}{1}|
+\exemple|\StrGobbleRight{aaaaa}{4}|
+\exemple*|\StrGobbleRight{}{2}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrGobbleRight{abcdef}{3}[\aa]\aa|
+\exemple*|\StrGobbleRight{a b c d}{3}[\aa]\aa|
+\exemple|\StrGobbleRight{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrGobbleRight{abcdef}{9}[\aa]\aa|
+\exemple|\StrGobbleRight{éàèï}{2}[\aa]\aa|
+\exemple|\StrGobbleRight{ÉÀÇ}{1}[\aa]\aa|
+\exemple|\StrGobbleRight{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrGobbleRight{}{2}[\aa]\aa|
+
+\chapitre{La macro}{StrLeft}
+
+\exemple|\StrLeft{abcdef}{3}|
+\exemple*|\StrLeft{a b c d}{3}|
+\exemple*|\StrLeft{abcdef}{-3}|
+\exemple*|\StrLeft{abcdef}{9}|
+\exemple|\StrLeft{éàèï}{2}|
+\exemple|\StrLeft{ÉÀÇ}{1}|
+\exemple|\StrLeft{aaaaa}{4}|
+\exemple*|\StrLeft{}{2}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrLeft{abcdef}{3}[\aa]\aa|
+\exemple*|\StrLeft{a b c d}{3}[\aa]\aa|
+\exemple*|\StrLeft{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrLeft{abcdef}{9}[\aa]\aa|
+\exemple|\StrLeft{éàèï}{2}[\aa]\aa|
+\exemple|\StrLeft{ÉÀÇ}{1}[\aa]\aa|
+\exemple|\StrLeft{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrLeft{}{2}[\aa]\aa|
+
+\chapitre{La macro}{StrRight}
+
+\exemple|\StrRight{abcdef}{3}|
+\exemple*|\StrRight{a b c d}{3}|
+\exemple*|\StrRight{abcdef}{-3}|
+\exemple*|\StrRight{abcdef}{9}|
+\exemple|\StrRight{éàèï}{2}|
+\exemple|\StrRight{ÉÀÇ}{1}|
+\exemple|\StrRight{aaaaa}{4}|
+\exemple*|\StrRight{}{2}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrRight{abcdef}{3}[\aa]\aa|
+\exemple*|\StrRight{a b c d}{3}[\aa]\aa|
+\exemple*|\StrRight{abcdef}{-3}[\aa]\aa|
+\exemple*|\StrRight{abcdef}{9}[\aa]\aa|
+\exemple|\StrRight{éàèï}{2}[\aa]\aa|
+\exemple|\StrRight{ÉÀÇ}{1}[\aa]\aa|
+\exemple|\StrRight{aaaaa}{4}[\aa]\aa|
+\exemple*|\StrRight{}{2}[\aa]\aa|
+
+\chapitre{la macro}{StrChar}
+
+\exemple|\StrChar{abcdef}{5}|
+\exemple*|\StrChar{a b c d}{4}|
+\exemple|\StrChar{a b c d}{7}|
+\exemple*|\StrChar{abcdef}{10}|
+\exemple*|\StrChar{abcdef}{-5}|
+\exemple*|\StrChar{}{3}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrChar{abcdef}{5}[\aa]\aa|
+\exemple*|\StrChar{a b c d}{4}[\aa]\aa|
+\exemple|\StrChar{a b c d}{7}[\aa]\aa|
+\exemple*|\StrChar{abcdef}{10}[\aa]\aa|
+\exemple*|\StrChar{abcdef}{-5}[\aa]\aa|
+\exemple*|\StrChar{}{3}[\aa]\aa|
+
+\chapitre{La macro}{StrCount}
+
+\exemple|\StrCount{abcdef}{d}|
+\exemple|\StrCount{a b c d}{ }|
+\exemple|\StrCount{aaaaaa}{aa}|
+\exemple|\StrCount{étété}{é}|
+\exemple|\StrCount{abcdef}{Z}|
+\exemple|\StrCount{éàèï}{é}|
+\exemple|\StrCount{ÉÀÇ}{Ç}|
+\exemple|\StrCount{abcdef}{}|
+\exemple|\StrCount{}{a}|
+\exemple|\StrCount{}{}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrCount{abcdef}{d}[\aa]\aa|
+\exemple|\StrCount{a b c d}{ }[\aa]\aa|
+\exemple|\StrCount{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrCount{étété}{é}[\aa]\aa|
+\exemple|\StrCount{abcdef}{Z}[\aa]\aa|
+\exemple|\StrCount{éàèï}{é}[\aa]\aa|
+\exemple|\StrCount{ÉÀÇ}{Ç}[\aa]\aa|
+\exemple|\StrCount{abcdef}{}[\aa]\aa|
+\exemple|\StrCount{}{a}[\aa]\aa|
+\exemple|\StrCount{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrPosition}
+
+\exemple|\StrPosition{abcdef}{c}|
+\exemple|\StrPosition{abcdef}{Z}|
+\exemple|\StrPosition{a b c d}{ }|
+\exemple|\StrPosition[3]{a b c d}{ }|
+\exemple|\StrPosition[8]{a b c d}{ }|
+\exemple|\StrPosition{étété}{é}|
+\exemple|\StrPosition[3]{étété}{é}|
+\exemple|\StrPosition[5]{étété}{é}|
+\exemple|\StrPosition{aaaaaa}{aa}|
+\exemple|\StrPosition[2]{aaaaaa}{aa}|
+\exemple|\StrPosition[3]{aaaaaa}{aa}|
+\exemple|\StrPosition{éàèï}{è}|
+\exemple|\StrPosition{ÉÀÇ}{À}|
+\exemple|\StrPosition{abcdef}{}|
+\exemple|\StrPosition{}{a}|
+\exemple|\StrPosition{}{}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrPosition{abcdef}{c}[\aa]\aa|
+\exemple|\StrPosition{abcdef}{Z}[\aa]\aa|
+\exemple|\StrPosition{a b c d}{ }[\aa]\aa|
+\exemple|\StrPosition[3]{a b c d}{ }[\aa]\aa|
+\exemple|\StrPosition[8]{a b c d}{ }[\aa]\aa|
+\exemple|\StrPosition{étété}{é}[\aa]\aa|
+\exemple|\StrPosition[3]{étété}{é}[\aa]\aa|
+\exemple|\StrPosition[5]{étété}{é}[\aa]\aa|
+\exemple|\StrPosition{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrPosition[2]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrPosition[3]{aaaaaa}{aa}[\aa]\aa|
+\exemple|\StrPosition{éàèï}{è}[\aa]\aa|
+\exemple|\StrPosition{ÉÀÇ}{À}[\aa]\aa|
+\exemple|\StrPosition{abcdef}{}[\aa]\aa|
+\exemple|\StrPosition{}{a}[\aa]\aa|
+\exemple|\StrPosition{}{}[\aa]\aa|
+
+\chapitre{La macro}{StrCompare}
+
+La tolérance normale :\par\comparenormal
+\exemple|\StrCompare{abcdefghij}{abc}|
+\exemple|\StrCompare{A}{A}|
+\exemple|\StrCompare{éçà}{éçà}|
+\exemple|\StrCompare{abcdef}{a bd}|
+\exemple|\StrCompare{ }{ }|
+\exemple|\StrCompare{}{abcd}|
+\exemple|\StrCompare{abcd}{}|
+\exemple|\StrCompare{123456}{1234}|
+\exemple|\StrCompare{a b c d}{a bcd}|
+\exemple|\StrCompare{}{}|
+\exemple|\StrCompare{eee}{eeee}|
+\exemple|\StrCompare{eeee}{eee}|
+\exemple|\StrCompare{totutu}{tututu}|
+\exemple|\StrCompare{abcd}{abyz}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrCompare{abcdefghij}{abc}[\aa]\aa|
+\exemple|\StrCompare{A}{A}[\aa]\aa|
+\exemple|\StrCompare{éçà}{éçà}[\aa]\aa|
+\exemple|\StrCompare{abcdef}{a bd}[\aa]\aa|
+\exemple|\StrCompare{ }{ }[\aa]\aa|
+\exemple|\StrCompare{}{abcd}[\aa]\aa|
+\exemple|\StrCompare{abcd}{}[\aa]\aa|
+\exemple|\StrCompare{123456}{1234}[\aa]\aa|
+\exemple|\StrCompare{a b c d}{a bcd}[\aa]\aa|
+\exemple|\StrCompare{}{}[\aa]\aa|
+\exemple|\StrCompare{eee}{eeee}[\aa]\aa|
+\exemple|\StrCompare{eeee}{eee}[\aa]\aa|
+\exemple|\StrCompare{totutu}{tututu}[\aa]\aa|
+\exemple|\StrCompare{abcd}{abyz}[\aa]\aa|
+
+La tolérance stricte :\comparestrict\par
+\exemple|\StrCompare{abcdefghij}{abc}|
+\exemple|\StrCompare{A}{A}|
+\exemple|\StrCompare{éçà}{éçà}|
+\exemple|\StrCompare{abcdef}{a bd}|
+\exemple|\StrCompare{ }{ }|
+\exemple|\StrCompare{}{abcd}|
+\exemple|\StrCompare{abcd}{}|
+\exemple|\StrCompare{123456}{1234}|
+\exemple|\StrCompare{a b c d}{a bcd}|
+\exemple|\StrCompare{}{}|
+\exemple|\StrCompare{eee}{eeee}|
+\exemple|\StrCompare{eeee}{eee}|
+\exemple|\StrCompare{totutu}{tututu}|
+\exemple|\StrCompare{abcd}{abyz}|
+\par\bigskip Mêmes exemples avec l'argument optionnel :
+
+\exemple|\StrCompare{abcdefghij}{abc}[\aa]\aa|
+\exemple|\StrCompare{A}{A}[\aa]\aa|
+\exemple|\StrCompare{éçà}{éçà}[\aa]\aa|
+\exemple|\StrCompare{abcdef}{a bd}[\aa]\aa|
+\exemple|\StrCompare{ }{ }[\aa]\aa|
+\exemple|\StrCompare{}{abcd}[\aa]\aa|
+\exemple|\StrCompare{abcd}{}[\aa]\aa|
+\exemple|\StrCompare{123456}{1234}[\aa]\aa|
+\exemple|\StrCompare{a b c d}{a bcd}[\aa]\aa|
+\exemple|\StrCompare{}{}[\aa]\aa|
+\exemple|\StrCompare{eee}{eeee}[\aa]\aa|
+\exemple|\StrCompare{eeee}{eee}[\aa]\aa|
+\exemple|\StrCompare{totutu}{tututu}[\aa]\aa|
+\exemple|\StrCompare{abcd}{abyz}[\aa]\aa|
+\vspace{10ex}
+
+\hfill{\Large Le mode \tt\textbackslash noexpandarg}\hfill{}
+
+\vspace{-1.5ex}\hspace{6cm}\hrulefill\hspace{6cm}
+
+\bigskip
+Dans toute la suite sauf si c'est précisé, la commande \verb|\noexpandarg| est activée.\bigskip
+\makeatletter
+
+\expandafter\long\expandafter\def\csname xs_assign_verb\endcsname#1{%
+ \tokenize\cs@resultat{#1}%
+ \leavevmode\hbox to0.7\linewidth{\hfil\tt#1}\quad\frontiere\cs@resultat\frontiere\hfil\par}%
+\makeatother
+\noexpandarg
+
+\bigskip
+\chapitre{Le test}{IfSubStr}
+
+\exemple|\noexploregroups|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{2}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{34}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{{34}}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\b}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc5}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc{5}}{vrai}{faux}|
+\exemple|\IfSubStr[1]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[2]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[3]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[4]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{2}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{34}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{{34}}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\b}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc5}{vrai}{faux}|
+\exemple|\IfSubStr{1$2$\a{34}\bc5}{\bc{5}}{vrai}{faux}|
+\exemple|\IfSubStr[1]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[2]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[3]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+\exemple|\IfSubStr[4]{\a1{\a1{\a1}\a2}\a3}{\a}{vrai}{faux}|
+
+\chapitre{Le test}{IfBeginWith}
+
+Les tests doivent donner des résultats identiques ci-dessous puisque \verb|\IfBeginWith| est indifférent au mode d'exploration des groupes !\smallskip
+
+\exemple|\noexploregroups|
+\exemple|\IfBeginWith{{\a}123\b456}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a}123\b456}{{\a}}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a1}\b\c\d}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{12}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{1}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{{1}2}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfBeginWith{{\a}123\b456}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a}123\b456}{{\a}}{vrai}{faux}|
+\exemple|\IfBeginWith{{\a1}\b\c\d}{\a}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{12}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{1}{vrai}{faux}|
+\exemple|\IfBeginWith{{1}23456}{{1}2}{vrai}{faux}|
+
+\chapitre{Le test}{IfEndWith}
+
+Les tests doivent donner des résultats identiques ci-dessous puisque \verb|\IfEndWith| est indifférent au mode d'exploration des groupes !\smallskip
+
+\exemple|\noexploregroups|
+\exemple|\IfEndWith{\a1\b2{\c3}}{\c3}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{{\c3}}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{3}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{56}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{6}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{5{6}}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfEndWith{\a1\b2{\c3}}{\c3}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{{\c3}}{vrai}{faux}|
+\exemple|\IfEndWith{\a1\b2{\c3}}{3}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{56}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{6}{vrai}{faux}|
+\exemple|\IfEndWith{12345{6}}{5{6}}{vrai}{faux}|
+
+\chapitre{Le test}{IfSubStrBefore}
+
+\exemple|\noexploregroups|
+\exemple|\IfSubStrBefore[1,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,3]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,1]{\a1{\a2\a3\b1}\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,2]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfSubStrBefore[1,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[2,3]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,1]{\a1{\a2\a3\b1}\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBefore[1,2]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+
+\chapitre{Le test}{IfStrBehind}
+
+\exemple|\noexploregroups|
+\exemple|\IfSubStrBehind[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,1]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1\a2\a3\b1\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[2,1]{\a1{\a2\a3\b1}\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+\exemple|\exploregroups|
+\exemple|\IfSubStrBehind[2,1]{\a1\a2\a3\b1\b2\b3}{2}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[3,1]{\a1\a2\a3\b1\b2\b3}{\a}{\b}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1\a2\a3\b1\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[2,1]{\a1{\a2\a3\b1}\b2\b3}{\b}{3}{vrai}{faux}|
+\exemple|\IfSubStrBehind[1,1]{\a1{\a2\a3\b1}\b2\b3}{3}{\b}{vrai}{faux}|
+
+\chapitre{Le test}{IfInteger}
+
+Dans les exemples ci-dessous, on examine la différence de comportement de la macro \verb|\IfInteger| selon les modes de développement des arguments.\smallskip
+
+\exemple|\def\nbA{-12}\def\nbB{498}|
+\exemple|\def\nbAA{\nbA}\def\nbBB{\nbB}|\smallskip
+\exemple|\fullexpandarg|
+\exemple|\IfInteger{\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA5\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA6\nbB}{vrai}{faux}|
+\exemple|\IfInteger{\nbAA7\nbBB}{vrai}{faux}|\smallskip
+\exemple|\expandarg|
+\exemple|\IfInteger{\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA5\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA6\nbB}{vrai}{faux}|
+\exemple|\IfInteger{\nbAA7\nbBB}{vrai}{faux}|\smallskip
+\exemple|\noexpandarg|
+\exemple|\IfInteger{\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA5\nbA}{vrai}{faux}|
+\exemple|\IfInteger{\nbA6\nbB}{vrai}{faux}|
+\exemple|\IfInteger{\nbAA7\nbBB}{vrai}{faux}|
+
+\chapitre{Le test}{IfDecimal}
+
+Dans les exemples ci-dessous, on examine la différence de comportement de la macro \verb|\IfDecimal| selon les modes de développement des arguments.\smallskip
+
+\exemple|\def\nbA{-12}\def\nbB{498}|
+\exemple|\def\nbAA{\nbA}\def\nbBB{\nbB}|\smallskip
+\exemple|\fullexpandarg|
+\exemple|\IfDecimal{\nbA,\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbAA.\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{3\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,\nbB}{vrai}{faux}|\smallskip
+\exemple|\expandarg|
+\exemple|\IfDecimal{\nbA,\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbAA.\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{3\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,\nbB}{vrai}{faux}|\smallskip
+\exemple|\noexpandarg|
+\exemple|\IfDecimal{\nbA,\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbAA.\nbB}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{3\nbB,777}{vrai}{faux}|
+\exemple|\IfDecimal{\nbB,\nbB}{vrai}{faux}|
+
+\chapitre{La macro}{StrBefore}
+
+\exemple|\noexploregroups|
+\exemple|\StrBefore[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrBefore[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBefore[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrBehind}
+
+\exemple|\noexploregroups|
+\exemple|\StrBehind[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrBehind[2]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[3]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[4]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[5]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBehind[6]{1\a2\a3{4\a5{6\a7}8\a}9\a0}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrBetween}
+
+La commande \verb|\StrBetween| opère en mode \verb|\noexploregroups|, quelque soit le mode d'exploration en cours.\smallskip
+
+\exemple|\StrBetween[1,3]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{2}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBetween[2,3]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBetween[1,3]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{3}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrBetween[2,4]{\a1\a2{3\a4}5\a6{7\a8}9\a0}{\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{La macro}{StrSubstitute}
+
+\exemple|\noexploregroups|
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{2}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{3\a}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{a1{b1\bgroup c1}\egroup d1}{1}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}{\X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{2}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrSubstitute{\a1{2\a{3\a}4\a}\a5\a}{3\a}{XXX}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+\exemple|\StrSubstitute{a1{b1\bgroup c1}\egroup d1}{1}{X}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrDel}
+
+\exemple|\noexploregroups|
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{2}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{3\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel[2]{\a1{2\a{3\a}4\a}\a5\a}{\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{2}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{{3\a}}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrDel{\a1{2\a{3\a}4\a}\a5\a}{3\a}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{La macro}{StrLen}
+
+\exemple|\noexploregroups|
+\exemple|\StrLen{a1{a2}{\a\b}{a3}a4}|
+\exemple|\exploregroups|
+\exemple|\StrLen{a1{a2}{\a\b}{a3}a4}|
+
+\chapitre{la macro}{StrSplit}
+
+\exemple|\noexploregroups|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{2}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{3}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+\exemple|\exploregroups|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{2}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+\exemple|\StrSplit{\a{\b{\c\d}\e}\f\g}{3}\xx\yy|
+\exemple|\#\detokenize\expandafter{\xx}\#\quad\#\detokenize\expandafter{\yy}\#|
+
+\chapitre{la macro}{StrMid}
+
+La commande \verb|\StrMid| opère en mode \verb|\noexploregroups|, quelque soit le mode d'exploration en cours.\smallskip
+
+\exemple|\StrMid{\a\b{\c\d}\e\f\g\h}{2}{6}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\StrMid{\a\b{\c\d}\e\f\g\h}{3}{4}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{La macro}{StrGobbleLeft}
+
+\exemple|\noexploregroups|
+\exemple|\StrGobbleLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrGobbleLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrGobbleRight}
+
+\exemple|\noexploregroups|
+\exemple|\StrGobbleRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrGobbleRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{La macro}{StrLeft}
+
+\exemple|\noexploregroups|
+\exemple|\StrLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrLeft{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|
+
+\chapitre{La macro}{StrRight}
+
+\exemple|\noexploregroups|
+\exemple|\StrRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrRight{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{la macro}{StrChar}
+
+\exemple|\noexploregroups|
+\exemple|\StrChar{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrChar{\a\b{\c\d\e}\f}{3}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+
+\chapitre{La macro}{StrCount}
+
+\exemple|\noexploregroups|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{\a}|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{2}|
+\exemple|\exploregroups|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{\a}|
+\exemple|\StrCount{\a1{\a2{\a3\a4}\a5}\a6\a7}{2}|
+
+\chapitre{La macro}{StrPosition}
+
+\exemple|\noexploregroups|
+\exemple|\StrPosition[3]{\a0\a1{\a{2\a3}4}\a5\a6}{\a}|
+\exemple|\StrPosition[4]{\a0\a1{\a{3\a4}5}\a6\a7}{\a}|
+\exemple|\StrPosition[1]{\a0\a1{\a{2\a3}4}\a5\a6}{2}|
+\exemple|\exploregroups|
+\exemple|\StrPosition[3]{\a0\a1{\a{2\a3}4}\a5\a6}{\a}|
+\exemple|\StrPosition[4]{\a0\a1{\a{2\a3}4}\a5\a6}{\a}|
+\exemple|\StrPosition[1]{\a0\a1{\a{2\a3}4}\a5\a6}{2}|
+
+\chapitre{La macro}{StrCompare}
+
+La commande \verb|\StrCompare| n'est pas affectée par le mode d'exploration.\smallskip
+
+\exemple|\comparenormal|
+\exemple|\StrCompare{\a{\b1}\c2}{\a\b1\c2}|
+\exemple|\StrCompare{{1\a2}3}{{1\a2}3}|
+\exemple|\StrCompare{{1\a2}3}{1\a23}|
+\exemple|\StrCompare{\a{\b\c}}{\a{\b\c}\d}|
+\exemple|\StrCompare{{\a}\b}{\a\b}|
+\exemple|\comparestrict|
+\exemple|\StrCompare{\a{\b1}\c2}{\a\b1\c2}|
+\exemple|\StrCompare{{1\a2}3}{{1\a2}3}|
+\exemple|\StrCompare{{1\a2}3}{1\a23}|
+\exemple|\StrCompare{\a{\b\c}}{\a{\b\c}\d}|
+\exemple|\StrCompare{{\a}\b}{\a\b}|
+
+\chapitre{La macro}{StrRemoveBraces}
+
+\exemple|\noexploregroups|
+\exemple|\StrRemoveBraces{\a1{\b2{\c3{\d4}}}\e5}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\exemple|\exploregroups|
+\exemple|\StrRemoveBraces{\a1{\b2{\c3{\d4}}}\e5}[\cmd]|
+\exemple|\detokenize\expandafter{\cmd}|\smallskip
+\end{document} \ No newline at end of file
diff --git a/macros/generic/xstring/xstring-en.pdf b/macros/generic/xstring/xstring-en.pdf
new file mode 100644
index 0000000000..d7581cd5e1
--- /dev/null
+++ b/macros/generic/xstring/xstring-en.pdf
Binary files differ
diff --git a/macros/generic/xstring/xstring-en.tex b/macros/generic/xstring/xstring-en.tex
new file mode 100644
index 0000000000..94c46f9d3f
--- /dev/null
+++ b/macros/generic/xstring/xstring-en.tex
@@ -0,0 +1,2052 @@
+\documentclass[english,a4paper,10pt]{article}
+\usepackage{fontspec}
+\usepackage[bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=blue,pdfauthor={Christian Tellechea},pdftitle={xstring},pdfsubject={package for strings of tokens},pdfkeywords={xstring,latex,string},pdfcreator={LaTeX}]{hyperref}
+\usepackage[margin=1.9cm]{geometry}
+\usepackage{libertine}
+\usepackage[scale=0.85]{noto-mono}
+\usepackage[bottom]{footmisc}
+\usepackage{amsmath,amssymb,amsfonts,color,eurosym,xspace,xstring,babel,listings}
+\makeatletter
+\definecolor{@xs@bckgcolor}{rgb}{0.9,1,1}
+\definecolor{@xs@keywordsxstring}{rgb}{0,0,0.9}
+\definecolor{@xs@keywordslatex}{rgb}{1,0,0}
+\definecolor{@xs@arguments}{rgb}{0,0,0}
+\definecolor{@xs@comments}{rgb}{0.5,0.5,0.5}
+\definecolor{violet}{rgb}{0.66,0,0.66}
+\lstset{%
+ language=[AlLaTeX]TeX,%
+ morekeywords={numexpr,detokenize},%
+ float=hbp,%
+ basicstyle=\small\ttfamily,%
+ identifierstyle=\color{@xs@arguments},%
+ keywordstyle=\color{@xs@keywordslatex},%
+ commentstyle=\itshape\color{@xs@comments},%
+ columns=fixed,%
+ tabsize=4,%
+ frame=single,%
+ extendedchars=true,%
+ showspaces=false,%
+ showstringspaces=false,%
+ numbers=left,%
+ numberstyle=\tiny\ttfamily,%
+ breaklines=true,%
+ breakindent=3em,%
+ backgroundcolor=\color{@xs@bckgcolor},%
+ breakautoindent=true,%
+ captionpos=t,%
+ xleftmargin=1em,%
+ xrightmargin=1em,%
+ lineskip=0pt,%
+ numbersep=1em,%
+ classoffset=1,%
+ morekeywords={% les macros et commandes de xstring
+ IfSubStr,IfSubStrBefore,IfSubStrBehind,%
+ IfBeginWith,IfEndWith,%
+ IfInteger,IfDecimal,integerpart,decimalpart,%
+ IfStrEq,IfEq,IfStrEqCase,IfEqCase,%
+ StrBefore,StrBehind,StrCut,StrBetween,%
+ StrSubstitute,StrDel,%
+ StrGobbleLeft,StrGobbleRight,StrRight,StrLeft,StrMid,StrChar,%
+ StrSplit,%
+ StrLen,StrCount,StrPosition,StrCompare,%
+ StrFindGroup,groupID,verbtocs,tokenize,scancs,StrExpand,StrRemoveBraces,%
+ exploregroups,noexploregroups,saveexploremode,restoreexploremode,%
+ comparenormal,comparestrict,savecomparemode,restorecomparemode,%
+ expandarg,noexpandarg,normalexpandarg,fullexpandarg,saveexpandmode,restoreexpandmode,%
+ expandingroups,noexpandingroups,%
+ setverbdelim},%
+ keywordstyle=\color{@xs@keywordsxstring},%
+ classoffset=0}
+\makeatother
+
+\newcommand\guill[1]{"#1"}
+\newcommand\argu[1]{$\langle$\textit{#1}$\rangle$}
+\newcommand\ARGU[1]{\texttt{\{}\argu{#1}\texttt{\}}}
+\newcommand\arguC[1]{\texttt{[}\argu{#1}\texttt{]}}
+\newcommand\arguCC[2]{\texttt{[}\argu{#1}{,}\argu{#2}\texttt{]}}
+\newcommand\texte[1]{\texttt{text}${}_{#1}$}
+\newcommand\etoile{$\langle$\texttt{[*]}$\rangle$}
+\newenvironment{Conditions}[1][1cm]%
+{\begin{list}%
+ {$\vartriangleright$}%
+ {\setlength{\leftmargin}{#1}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{2ptplus3ptminus2pt}
+ }}%
+{\end{list}}
+\renewcommand\th{${}^\text{th}$\xspace}
+\newcommand\US{syntax unit\xspace}
+\newcommand\USs{syntax units\xspace}
+\newcommand\Xstring{\textsf{xstring}\xspace}
+\newcommand\styleexemple{\small\baselineskip1.03\baselineskip\vskip\baselineskip\relax}
+\newcommand\styleexercice{\footnotesize}
+\newcommand\verbinline{\lstinline[basicstyle=\normalsize\ttfamily]}
+\newcommand\colorise{\color{violet}}
+\def\xstringenglishdateaux#1/#2/#3\nil{\number#3\relax\space \ifcase #2 \or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi\space#1}
+\edef\xstringenglishdate{\expandafter\xstringenglishdateaux\xstringdate\nil}
+\begin{document}
+\setlength{\parindent}{0pt}
+\begin{titlepage}
+ \null\par\vfill
+ \begin{center}
+ \begin{minipage}{0.75\linewidth}
+ \begin{center}
+ \Huge\bfseries xstring\par\vspace{5pt}
+ \small v\xstringversion\par\vspace{25pt}
+ \normalsize User's manual
+ \end{center}
+ \end{minipage}
+ \end{center}
+ \vspace{1cm}
+ \begin{center}
+ Christian {\sc Tellechea}\par\small
+ \href{mailto:unbonpetit@netc.fr}{\nolinkurl{unbonpetit@netc.fr}}\par\vspace{5pt}
+ \xstringenglishdate
+ \end{center}
+ \vfill\hrulefill
+ \begin{center}
+ \begin{minipage}{0.85\linewidth}
+ \noindent
+ \hfill\textbf{\textit{Abstract}}\hfill{}\medskip\par
+ This package which requires $\varepsilon$-\TeX{}, provides macros manipulating strings of tokens. For a basic use, tokens can be alphanumeric chars, but the macros can also be useful for manipulating tokens, i.e. \TeX{} code. Main features are:\smallskip
+
+ \parindent1.5em
+ \begin{itemize}
+ \item[$\triangleright$] tests:
+ \begin{itemize}
+ \item does a string contains at least $n$ times an another?
+ \item does a string starts (or ends) with another? etc.
+ \item is a string an integer? A decimal?
+ \item are 2 strings equal?
+ \end{itemize}
+ \item[$\triangleright$] extractions of substrings:
+ \begin{itemize}
+ \item what is on the left (or the right) of the $n$\th occurrence of a substring;
+ \item what is between the occurrences of 2 substrings;
+ \item substring between 2 positions;
+ \item serach of a group with its identifier.
+ \end{itemize}
+ \item[$\triangleright$] substitution of all, or the $n$ first occurrences of a substring for an other substring;
+ \item[$\triangleright$] calculation of numbers:
+ \begin{itemize}
+ \item length of a string;
+ \item position of the $n$\th occurrence of a substring;
+ \item how many times a string contains a substring?
+ \item comparison of 2 strings: position of the first difference;
+ \item identifier of the group in which a macro made a cut or a search.
+ \end{itemize}
+ \end{itemize}
+ \parindent0pt
+ \medskip
+ Other macros allow to use special characters forbiden in arguments (\verb|#| and \verb|%|) and manage differences between catcodes for advanced programming purposes.
+ \end{minipage}
+ \end{center}
+ \hrulefill\vfill{}
+\end{titlepage}
+
+\tableofcontents
+
+This manual is a translation of the french manual. I apologize for my poor english but I did my best\footnote{Any email to tell me errors would be appreciated!}, and I hope that the following is comprehensible!
+\section{Presentation}
+\subsection{Description}
+This extension\footnote{This extension does not require \LaTeX{} and can be compiled with Plain $\varepsilon$-\TeX{}.} provides macros and tests operating on "strings of tokens", as other programmation languages have. They provides the usual strings operations, such as: test if a string contains another, begins or ends with another, extractions of strings, calculation of the position of a substring, of the number of occurrences, etc.\medskip
+
+A "string of tokens" is a list of tokens of any nature, except that braces must be balanced and tokens catcode 6 and 14 (usualy \verb|%| et \verb|#|) are not allowed. Apart from this, any token is allowed (including \verbinline|\par|), in any order in the list, whatever be the resulting code.\medskip
+
+\Xstring reads the arguments of the macros \US by \US\footnote{In the \TeX{} code, a \US is a control sequence, a group between brace or a single char. See also page~\pageref{developpementarguments}.} : when \USs are \guill{simple} chars (catcode 10, 11 and 12), \Xstring logically read the argument char by char. \Xstring can also be used for programming purpose, including in arguments other tokens such as control sequences, braces and tokens with other catcodes. See chapter on reading mode and arguments expansion (page~\pageref{developpementarguments}), the command \verbinline|\verbtocs| (page~\pageref{verbtocs}) and the command \verbinline|\scancs| (page~\pageref{scancs}).\medskip
+
+As the arguments may contain any token, advanced users could have problems with catcodes leading to unexpected behaviours. These behaviours can be controlled: read page~\pageref{macrosetoilees}.\medskip
+
+Certainly, other packages exist (for example \href{http://mirror.ctan.org/tex-archive/macros/latex/contrib/substr/}{\nolinkurl{substr}} and \href{http://mirror.ctan.org/tex-archive/macros/latex/contrib/stringstrings/}{\nolinkurl{stringstrings}}), but as well as differences on features, they do not take into account occurrences so I found them too limited and difficult to use for programming.
+
+\subsection{Motivation}
+I decided to write this package of macros because I have never really found tools in \LaTeX{} suiting my needs for strings. So, over the last few months, I wrote a few macros that I occasionally or regularly used. Their numbers have increased and become a little too dispersed in directories in my computer, so I have grouped them together in this package.
+
+Thus, writing a coherent set of macros forces more discipline and leads to necessary improvements, which took most of the time I spent writing this package. This package is my first one as I recently discoverd \LaTeX{}\footnote{In november 2007, I will be a noob for a long time\ldots}, so my main motivation was to make progress in programming with \TeX, and to tackle its specific methods.
+
+\section{The macros}
+For a better understanding, let's see first the macros with the simpler arguments possible. No special catcode, no exotic token, no control sequence neither: only alphanumeric chars will be contained in the arguments.\medskip
+
+In the following chapters, all the macros will be presented this plan:
+\begin{itemize}
+ \item the syntax\footnote{The optional star, the optional argument in last position will be explained later. See page~\pageref{macrosetoilees} for starred macros and page~\pageref{argumentoptionnel} for the optional argument.} and the value of optional arguments
+ \item a short description of the operation;
+ \item the operation under special conditions. For each conditions considered, the operation described has priority on that (those) below;
+ \item finally, several examples\footnote{For much more examples, see the test file.} are given. I tried to find them most easily comprehensible and most representative of the situations met in normal use. If a doubt is possible with spaces in the result, this one will be delimited by \guill{|}, given that an empty string is represented by \guill{||}.
+\end{itemize}\smallskip
+
+\textbf{Important}: in the following, a \argu{number} can be an integer written with numeric chars, a counter, or the result of an arithmetic operation made with the command \verbinline|\numexpr|.\smallskip
+
+All the macros of \Xstring are displayed in {\makeatletter\color{@xs@keywordsxstring}red}.
+
+\subsection{The tests}
+\subsubsection{\ttfamily\textbackslash IfSubStr}
+\verbinline|\IfSubStr|\etoile\arguC{number}\ARGU{string}\ARGU{stringA}\ARGU{true}\ARGU{false}
+\smallskip
+
+The value of the optional argument \argu{number} is 1 by default.\par\smallskip
+
+Tests if \argu{string} contains at least \argu{number} times \argu{stringA} and runs \argu{true} if so, and \argu{false} otherwise.\medskip
+
+\begin{Conditions}
+\item If \argu{number}${}\leqslant0$, runs \argu{false};
+\item If \argu{string} or \argu{stringA} is empty, runs \argu{false}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfSubStr{xstring}{tri}{true}{false}
+\IfSubStr{xstring}{a}{true}{false}
+\IfSubStr{a bc def }{c d}{true}{false}
+\IfSubStr{a bc def }{cd}{true}{false}
+\IfSubStr[2]{1a2a3a}{a}{true}{false}
+\IfSubStr[3]{1a2a3a}{a}{true}{false}
+\IfSubStr[4]{1a2a3a}{a}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfSubStr{xstring}{tri}{true}{false}\par
+ \IfSubStr{xstring}{a}{true}{false}\par
+ \IfSubStr{a bc def }{c d}{true}{false}\par
+ \IfSubStr{a bc def }{cd}{true}{false}\par
+ \IfSubStr[2]{1a2a3a}{a}{true}{false}\par
+ \IfSubStr[3]{1a2a3a}{a}{true}{false}\par
+ \IfSubStr[4]{1a2a3a}{a}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfSubStrBefore}
+\verbinline|\IfSubStrBefore|\etoile\arguCC{number1}{number2}\ARGU{string}\ARGU{stringA}\ARGU{stringB}\ARGU{true}\ARGU{false}
+\smallskip
+
+The values of the optional arguments \argu{number1} and \argu{number2} are 1 by default.\par\smallskip
+
+In \argu{string}, tests if the \argu{number1}\th occurrence of \argu{stringA} is on the left of the \argu{number2}\th occurrence of \argu{stringB}. Runs \argu{true} if so, and \argu{false} otherwise.\medskip
+
+\begin{Conditions}
+\item If one of the occurrences is not found, it runs \argu{false};
+\item If one of the arguments \argu{string}, \argu{stringA} or \argu{stringB} is empty, runs \argu{false};
+\item If one of the optional arguments is negative or zero, runs \argu{false}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfSubStrBefore{xstring}{st}{in}{true}{false}
+\IfSubStrBefore{xstring}{ri}{s}{true}{false}
+\IfSubStrBefore{LaTeX}{LaT}{TeX}{true}{false}
+\IfSubStrBefore{a bc def }{ b}{ef}{true}{false}
+\IfSubStrBefore{a bc def }{ab}{ef}{true}{false}
+\IfSubStrBefore[2,1]{b1b2b3}{b}{2}{true}{false}
+\IfSubStrBefore[3,1]{b1b2b3}{b}{2}{true}{false}
+\IfSubStrBefore[2,2]{baobab}{a}{b}{true}{false}
+\IfSubStrBefore[2,3]{baobab}{a}{b}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfSubStrBefore{xstring}{st}{in}{true}{false}\par
+ \IfSubStrBefore{xstring}{ri}{s}{true}{false}\par
+ \IfSubStrBefore{LaTeX}{LaT}{TeX}{true}{false}\par
+ \IfSubStrBefore{a bc def }{ b}{ef}{true}{false}\par
+ \IfSubStrBefore{a bc def }{ab}{ef}{true}{false}\par
+ \IfSubStrBefore[2,1]{b1b2b3}{b}{2}{true}{false}\par
+ \IfSubStrBefore[3,1]{b1b2b3}{b}{2}{true}{false}\par
+ \IfSubStrBefore[2,2]{baobab}{a}{b}{true}{false}\par
+ \IfSubStrBefore[2,3]{baobab}{a}{b}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfSubStrBehind}
+
+\verbinline|\IfSubStrBehind|\etoile\arguCC{number1}{number2}\ARGU{string}\ARGU{stringA}\ARGU{stringB}\ARGU{true}\ARGU{false}
+\smallskip
+
+The values of the optional arguments \argu{number1} and \argu{number2} are 1 by default.\par\smallskip
+
+In \argu{string}, tests if the \argu{number1}\th occurrence of \argu{stringA} is on the right of the \argu{number2}\th occurrence of \argu{stringB}. Runs \argu{true} if so, and \argu{false} otherwise.\medskip
+
+\begin{Conditions}
+\item If one of the occurrences is not found, it runs \argu{false};
+\item If one of the arguments \argu{string}, \argu{stringA} or \argu{stringB} is empty, runs \argu{false};
+\item If one of the optional arguments is negative or zero, runs \argu{false}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfSubStrBehind{xstring}{ri}{xs}{true}{false}
+\IfSubStrBehind{xstring}{s}{i}{true}{false}
+\IfSubStrBehind{LaTeX}{TeX}{LaT}{true}{false}
+\IfSubStrBehind{a bc def }{ d}{a}{true}{false}
+\IfSubStrBehind{a bc def }{cd}{a b}{true}{false}
+\IfSubStrBehind[2,1]{b1b2b3}{b}{2}{true}{false}
+\IfSubStrBehind[3,1]{b1b2b3}{b}{2}{true}{false}
+\IfSubStrBehind[2,2]{baobab}{b}{a}{true}{false}
+\IfSubStrBehind[2,3]{baobab}{b}{a}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfSubStrBehind{xstring}{ri}{xs}{true}{false}\par
+ \IfSubStrBehind{xstring}{s}{i}{true}{false}\par
+ \IfSubStrBehind{LaTeX}{TeX}{LaT}{true}{false}\par
+ \IfSubStrBehind{a bc def }{ d}{a}{true}{false}\par
+ \IfSubStrBehind{a bc def }{cd}{a b}{true}{false}\par
+ \IfSubStrBehind[2,1]{b1b2b3}{b}{2}{true}{false}\par
+ \IfSubStrBehind[3,1]{b1b2b3}{b}{2}{true}{false}\par
+ \IfSubStrBehind[2,2]{baobab}{b}{a}{true}{false}\par
+ \IfSubStrBehind[2,3]{baobab}{b}{a}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfBeginWith}
+
+\verbinline|\IfBeginWith|\etoile\ARGU{string}\ARGU{stringA}\ARGU{true}\ARGU{false}
+\smallskip
+
+Tests if \argu{string} begins with \argu{stringA}, and runs \argu{true} if so, and \argu{false} otherwise.\medskip
+
+\begin{Conditions}
+\item If \argu{string} or \argu{stringA} is empty, runs \argu{false}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfBeginWith{xstring}{xst}{true}{false}
+\IfBeginWith{LaTeX}{a}{true}{false}
+\IfBeginWith{a bc def }{a b}{true}{false}
+\IfBeginWith{a bc def }{ab}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfBeginWith{xstring}{xst}{true}{false}\par
+ \IfBeginWith{LaTeX}{a}{true}{false}\par
+ \IfBeginWith{a bc def }{a b}{true}{false}\par
+ \IfBeginWith{a bc def }{ab}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfEndWith}
+
+\verbinline|\IfEndWith|\etoile\ARGU{string}\ARGU{stringA}\ARGU{Behind}\ARGU{false}
+\smallskip
+
+Tests if \argu{string} ends with \argu{stringA}, and runs \argu{true} if so, and \argu{false} otherwise.\medskip
+
+\begin{Conditions}
+\item If \argu{string} or \argu{stringA} is empty, runs \argu{false}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfEndWith{xstring}{ring}{true}{false}
+\IfEndWith{LaTeX}{a}{true}{false}
+\IfEndWith{a bc def }{ef }{true}{false}
+\IfEndWith{a bc def }{ef}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfEndWith{xstring}{ring}{true}{false}\par
+ \IfEndWith{LaTeX}{a}{true}{false}\par
+ \IfEndWith{a bc def }{ef }{true}{false}\par
+ \IfEndWith{a bc def }{ef}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfInteger}
+
+\verbinline|\IfInteger|\ARGU{number}\ARGU{true}\ARGU{false}
+\smallskip
+
+Tests if \argu{number} is an integer (i.e whose decimal part is empty or 0), and runs \argu{true} if so, and \argu{false} otherwise.\smallskip
+
+If test is false because unexpected characters, the control sequence \verbinline|\@xs@afterinteger| and \verbinline|\afterinteger| both contain the illegal part of \argu{number}.\medskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfInteger{13}{true}{false}
+\IfInteger{-219}{true}{false}
+\IfInteger{+9}{true}{false}
+\IfInteger{3.14}{true}{false}
+\IfInteger{8.0}{true}{false}
+\IfInteger{0}{true}{false}
+\IfInteger{49a}{true}{false}
+\IfInteger{+}{true}{false}
+\IfInteger{-}{true}{false}
+\IfInteger{0000}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfInteger{13}{true}{false}\par
+ \IfInteger{-219}{true}{false}\par
+ \IfInteger{+9}{true}{false}\par
+ \IfInteger{3.14}{true}{false}\par
+ \IfInteger{8.0}{true}{false}\par
+ \IfInteger{0}{true}{false}\par
+ \IfInteger{49a}{true}{false}\par
+ \IfInteger{+}{true}{false}\par
+ \IfInteger{-}{true}{false}\par
+ \IfInteger{0000}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfDecimal}\label{ifdecimal}
+
+\verbinline|\IfDecimal|\ARGU{number}\ARGU{true}\ARGU{false}
+\smallskip
+
+Tests if \argu{number} is a decimal, and runs \argu{true} if so, and \argu{false} otherwise.\smallskip
+
+Counters \verbinline|\integerpart| and \verbinline|\decimalpart| contain the integer part and decimal part of \argu{number}.
+
+If test is false because unexpected characters, the control sequence \verbinline|\@xs@afterdecimal| and \verb|\afterdecimal| both contain the illegal part of \argu{number}, whereas if test is false because decimal part is empty after decimal separator, they contain "X".\medskip
+
+\begin{Conditions}
+ \item Decimal separator can be a dot or a comma;
+ \item If what is on the right of decimal separator (if it exists) is empty, the test is false;
+ \item If what is on the left of decimal separator (if it exists) is empty, the integer part is assumed to be 0;
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfDecimal{3.14}{true}{false}
+\IfDecimal{3,14}{true}{false}
+\IfDecimal{-0.5}{true}{false}
+\IfDecimal{.7}{true}{false}
+\IfDecimal{,9}{true}{false}
+\IfDecimal{1..2}{true}{false}
+\IfDecimal{+6}{true}{false}
+\IfDecimal{-15}{true}{false}
+\IfDecimal{1.}{true}{false}
+\IfDecimal{2,}{true}{false}
+\IfDecimal{.}{true}{false}
+\IfDecimal{,}{true}{false}
+\IfDecimal{+}{true}{false}
+\IfDecimal{-}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfDecimal{3.14}{true}{false}\par
+ \IfDecimal{3,14}{true}{false}\par
+ \IfDecimal{-0.5}{true}{false}\par
+ \IfDecimal{.7}{true}{false}\par
+ \IfDecimal{,9}{true}{false}\par
+ \IfDecimal{1..2}{true}{false}\par
+ \IfDecimal{+6}{true}{false}\par
+ \IfDecimal{-15}{true}{false}\par
+ \IfDecimal{1.}{true}{false}\par
+ \IfDecimal{2,}{true}{false}\par
+ \IfDecimal{.}{true}{false}\par
+ \IfDecimal{,}{true}{false}\par
+ \IfDecimal{+}{true}{false}\par
+ \IfDecimal{-}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfStrEq}
+
+\verbinline|\IfStrEq|\etoile\ARGU{stringA}\ARGU{stringB}\ARGU{true}\ARGU{false}
+\smallskip
+
+Tests if the strings \argu{stringA} and \argu{stringB} are equal, i.e. if they contain successively the same \USs in the same order. Runs \argu{true} if so, and \argu{false} otherwise.\smallskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfStrEq{a1b2c3}{a1b2c3}{true}{false}
+\IfStrEq{abcdef}{abcd}{true}{false}
+\IfStrEq{abc}{abcdef}{true}{false}
+\IfStrEq{3,14}{3,14}{true}{false}
+\IfStrEq{12.34}{12.340}{true}{false}
+\IfStrEq{abc}{}{true}{false}
+\IfStrEq{}{abc}{true}{false}
+\IfStrEq{}{}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfStrEq{a1b2c3}{a1b2c3}{true}{false}\par
+ \IfStrEq{abcdef}{abcd}{true}{false}\par
+ \IfStrEq{abc}{abcdef}{true}{false}\par
+ \IfStrEq{3,14}{3,14}{true}{false}\par
+ \IfStrEq{12.34}{12.340}{true}{false}\par
+ \IfStrEq{abc}{}{true}{false}\par
+ \IfStrEq{}{abc}{true}{false}\par
+ \IfStrEq{}{}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfEq}
+
+\verbinline|\IfEq|\ARGU{stringA}\ARGU{stringB}\ARGU{true}\ARGU{false}
+\smallskip
+
+Tests if the strings \argu{stringA} and \argu{stringB} are equal, \emph{except} if both \argu{stringA} and \argu{stringB} contain numbers in which case the macro tests if these numbers are equal. Runs \argu{true} if so, and \argu{false} otherwise.\smallskip
+
+\begin{Conditions}
+ \item The definition of \emph{number} is given with the macro \verbinline|\IfDecimal| (see page~\pageref{ifdecimal}), and thus :
+ \item \guill{+} signs are optional;
+ \item Decimal separator can be a dot or a comma.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfEq{a1b2c3}{a1b2c3}{true}{false}
+\IfEq{abcdef}{ab}{true}{false}
+\IfEq{ab}{abcdef}{true}{false}
+\IfEq{12.34}{12,34}{true}{false}
+\IfEq{+12.34}{12.340}{true}{false}
+\IfEq{10}{+10}{true}{false}
+\IfEq{-10}{10}{true}{false}
+\IfEq{+0,5}{,5}{true}{false}
+\IfEq{1.001}{1.01}{true}{false}
+\IfEq{3*4+2}{14}{true}{false}
+\IfEq{\number\numexpr3*4+2}{14}{true}{false}
+\IfEq{0}{-0.0}{true}{false}
+\IfEq{}{}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfEq{a1b2c3}{a1b2c3}{true}{false}\par
+ \IfEq{abcdef}{ab}{true}{false}\par
+ \IfEq{ab}{abcdef}{true}{false}\par
+ \IfEq{12.34}{12,34}{true}{false}\par
+ \IfEq{+12.34}{12.340}{true}{false}\par
+ \IfEq{10}{+10}{true}{false}\par
+ \IfEq{-10}{10}{true}{false}\par
+ \IfEq{+0,5}{,5}{true}{false}\par
+ \IfEq{1.001}{1.01}{true}{false}\par
+ \IfEq{3*4+2}{14}{true}{false}\par
+ \IfEq{\number\numexpr3*4+2}{14}{true}{false}\par
+ \IfEq{0}{-0.0}{true}{false}\par
+ \IfEq{}{}{true}{false}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfStrEqCase}
+
+\begin{minipage}{\textwidth}
+ \verbinline|\IfStrEqCase|\etoile\ARGU{string}\verb|{%|\par
+ \qquad\qquad\ARGU{string1}\ARGU{code1}\verb|%|\par
+ \qquad\qquad\ARGU{string2}\ARGU{code2}\verb|%|\par
+ \qquad\qquad\verb|etc...|\par
+ \qquad\qquad\ARGU{stringN}\ARGU{codeN}\verb|}|\arguC{other cases code}
+\end{minipage}
+\smallskip
+
+Tests successively if \argu{string} is equal to \argu{string1}, \argu{string2}, etc. Comparison is made with \verbinline|\IfStrEq| (see above). If the test number $i$ is positive (the \argu{string} matches \argu{string\;$i$}), the macro runs \argu{code\;$i$} and ends. If all tests fail, the macro runs the optional \argu{other cases code}, if present.\smallskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfStrEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}
+|\IfStrEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|
+\IfStrEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[other]
+\IfStrEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[other]
+\IfStrEqCase{+3}{{1}{one}{2}{two}{3}{three}}[other]
+\IfStrEqCase{0.5}{{0}{zero}{.5}{half}{1}{one}}[other]
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfStrEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}\par
+ |\IfStrEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|\par
+ \IfStrEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[other]\par
+ \IfStrEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[other]\par
+ \IfStrEqCase{+3}{{1}{one}{2}{two}{3}{three}}[other]\par
+ \IfStrEqCase{0.5}{{0}{zero}{.5}{half}{1}{one}}[other]
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfEqCase}
+
+\begin{minipage}{\textwidth}
+ \verbinline|\IfEqCase|\etoile\ARGU{string}\verb|{%|\par
+ \qquad\qquad\ARGU{string1}\ARGU{code1}\verb|%|\par
+ \qquad\qquad\ARGU{string2}\ARGU{code2}\verb|%|\par
+ \qquad\qquad\verb|etc...|\par
+ \qquad\qquad\ARGU{stringN}\ARGU{codeN}\verb|}|\arguC{other cases code}
+\end{minipage}
+\smallskip
+
+Tests successively if \argu{string} is equal to \argu{string1}, \argu{string2}, etc. Comparison is made with \verbinline|\IEq| (see above). If the test number $i$ is positive (the \argu{string} matches \argu{string\;$i$}), the macro runs \argu{code\;$i$} and ends. If all tests fail, the macro runs the optional \argu{other cases code}, if present.\smallskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}
+|\IfEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|
+\IfEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[other]
+\IfEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[other]
+\IfEqCase{+3}{{1}{one}{2}{two}{3}{three}}[other]
+\IfEqCase{0.5}{{0}{zero}{.5}{half}{1}{one}}[other]
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}\par
+ |\IfEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|\par
+ \IfEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[other]\par
+ \IfEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[other]\par
+ \IfEqCase{+3}{{1}{one}{2}{two}{3}{three}}[other]\par
+ \IfEqCase{0.5}{{0}{zero}{.5}{half}{1}{one}}[other]
+\end{minipage}%
+
+\subsection{Extraction of substrings}
+\subsubsection{\ttfamily\textbackslash StrBefore}
+
+\verbinline|\StrBefore|\etoile\arguC{number}\ARGU{string}\ARGU{stringA}\arguC{name}
+\smallskip
+
+The value of the optional argument \argu{number} is 1 by default.\par\smallskip
+
+In \argu{string}, returns what is leftwards the \argu{number}\th occurrence of \argu{stringA}.\medskip
+
+\begin{Conditions}
+\item If \argu{string} or \argu{stringA} is empty, an empty string is returned;
+\item If \argu{number}${}<1$ then the macro behaves as if \argu{number}${}=1$;
+\item If the occurrence is not found, an empty string is returned.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrBefore{xstring}{tri}
+\StrBefore{LaTeX}{e}
+|\StrBefore{LaTeX}{p}|
+|\StrBefore{LaTeX}{L}|
+|\StrBefore{a bc def }{def}|
+|\StrBefore{a bc def }{cd}|
+\StrBefore[1]{1b2b3}{b}
+\StrBefore[2]{1b2b3}{b}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrBefore{xstring}{tri}\par
+ \StrBefore{LaTeX}{e}\par
+ |\StrBefore{LaTeX}{p}|\par
+ |\StrBefore{LaTeX}{L}|\par
+ |\StrBefore{a bc def }{def}|\par
+ |\StrBefore{a bc def }{cd}|\par
+ \StrBefore[1]{1b2b3}{b}\par
+ \StrBefore[2]{1b2b3}{b}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrBehind}
+
+\verbinline|\StrBehind|\etoile\arguC{number}\ARGU{string}\ARGU{stringA}\arguC{name}
+\smallskip
+
+The value of the optional argument \argu{number} is 1 by default.\par\smallskip
+
+In \argu{string}, returns what is rightwards the \argu{number}\th occurrence of \argu{stringA}.\medskip
+
+\begin{Conditions}
+\item If \argu{string} or \argu{stringA} is empty, an empty string is returned;
+\item If \argu{number}${}<1$ then the macro behaves as if \argu{number}${}=1$;
+\item If the occurrence is not found, an empty string is returned.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrBehind{xstring}{tri}
+\StrBehind{LaTeX}{e}
+|\StrBehind{LaTeX}{p}|
+|\StrBehind{LaTeX}{X}|
+|\StrBehind{a bc def }{bc}|
+|\StrBehind{a bc def }{cd}|
+\StrBehind[1]{1b2b3}{b}
+\StrBehind[2]{1b2b3}{b}
+|\StrBehind[3]{1b2b3}{b}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrBehind{xstring}{tri}\par
+ \StrBehind{LaTeX}{e}\par
+ |\StrBehind{LaTeX}{p}|\par
+ |\StrBehind{LaTeX}{X}|\par
+ |\StrBehind{a bc def }{bc}|\par
+ |\StrBehind{a bc def }{cd}|\par
+ \StrBehind[1]{1b2b3}{b}\par
+ \StrBehind[2]{1b2b3}{b}\par
+ |\StrBehind[3]{1b2b3}{b}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrCut}
+Here is the syntax of this macro:\par\nobreak\smallskip
+\verbinline|\StrCut|\etoile\arguC{nunber}\ARGU{string}\ARGU{stringA}\ARGU{macroA}\ARGU{macroB}
+\smallskip
+
+The optional argument \argu{number} is 1 by default.\par\nobreak\smallskip
+The \argu{string} is cut in two parts at the occurrence \arguC{number} of \ARGU{stringA}. The left part is stored in the control sequence \argu{macroA} and the right part in \argu{macroB}.
+
+Since this macro returns \emph{two strings}, it does \emph{not} display anything. Consequently, it does not provide the optional argument in last position.\medskip
+
+\begin{Conditions}
+ \item If \argu{string} or \argu{stringA} is empty, \argu{macroA} and \argu{macroB} are empty;
+ \item If \argu{number}${}<1$, the macro behaves as if \argu{number}${}=1$;
+ \item If the occurrence is not found, \argu{macroA} receives the whole \argu{string} while \argu{macroB} is empty.
+\end{Conditions}
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrCut{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[2]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[3]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[4]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[5]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[6]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[-4]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut{abracadabra}{brac}\csA\csB |\csA|\csB|\par
+\StrCut{abracadabra}{foo}\csA\csB |\csA|\csB|\par
+\StrCut{abracadabra}{}\csA\csB |\csA|\csB|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \def\seprouge{{\color{red}|}}
+ \styleexemple
+ \StrCut{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[2]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[3]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[4]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[5]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[6]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[-4]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut{abracadabra}{brac}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut{abracadabra}{foo}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut{abracadabra}{}\csA\csB |\csA\seprouge\csB|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrBetween}
+
+\verbinline|\StrBetween|\etoile\arguCC{number1}{number2}\ARGU{string}\ARGU{stringA}\ARGU{stringB}\arguC{name}
+\smallskip
+
+The values of the optional arguments \argu{number1} and \argu{number2} are 1 by default.\par\smallskip
+
+In \argu{string}, returns the substring between\footnote{In a strict sense, i.e. \emph{without} the strings \argu{stringA} and \argu{stringB}} the \argu{number1}\th occurrence of \argu{stringA} and \argu{number2}\th occurrence of \argu{stringB}.\medskip
+
+\begin{Conditions}
+\item If the occurrences are not in this order ---~\argu{stringA} \emph{followed by} \argu{stringB}~--- in \argu{string}, an empty string is returned;
+\item If one of the 2 occurrences doesn't exist in \argu{string}, an empty string is returned;
+\item If one of the optional arguments \argu{number1} ou \argu{number2} is negative or zero, an empty string is returned.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrBetween{xstring}{xs}{ng}
+|\StrBetween{xstring}{i}{n}|
+|\StrBetween{xstring}{a}{tring}|
+|\StrBetween{a bc def }{a}{d}|
+|\StrBetween{a bc def }{a }{f}|
+\StrBetween{a1b1a2b2a3b3}{a}{b}
+\StrBetween[2,3]{a1b1a2b2a3b3}{a}{b}
+\StrBetween[1,3]{a1b1a2b2a3b3}{a}{b}
+|\StrBetween[3,1]{a1b1a2b2a3b3}{a}{b}|
+\StrBetween[3,2]{abracadabra}{a}{bra}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrBetween{xstring}{xs}{ng}\par
+ |\StrBetween{xstring}{i}{n}|\par
+ |\StrBetween{xstring}{a}{tring}|\par
+ |\StrBetween{a bc def }{a}{d}|\par
+ |\StrBetween{a bc def }{a }{f}|\par
+ \StrBetween{a1b1a2b2a3b3}{a}{b}\par
+ \StrBetween[2,3]{a1b1a2b2a3b3}{a}{b}\par
+ \StrBetween[1,3]{a1b1a2b2a3b3}{a}{b}\par
+ |\StrBetween[3,1]{a1b1a2b2a3b3}{a}{b}|\par
+ \StrBetween[3,2]{abracadabra}{a}{bra}\par
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrSubstitute}
+
+\verbinline|\StrSubstitute|\arguC{number}\ARGU{string}\ARGU{stringA}\ARGU{stringB}\arguC{name}
+\smallskip
+
+The value of the optional argument \argu{number} is 0 by default.\par\smallskip
+
+In \argu{string}, substitute the \argu{number} first occurrences of \argu{stringA} for \argu{stringB}, except if \argu{number}${}=0$ in which case \emph{all} the occurrences are substituted.
+
+\begin{Conditions}
+\item If \argu{string} is empty, an empty string is returned;
+\item If \argu{stringA} is empty or doesn't exist in \argu{string}, the macro is ineffective;
+\item If \argu{number} is greater than the number of occurrences of \argu{stringA}, then all the occurrences are substituted;
+\item If \argu{number}${}<0$ the macro behaves as if \argu{number}${}=0$;
+\item If \argu{stringB} is empty, the occurrences of \argu{stringA}, if they exist, are deleted.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrSubstitute{xstring}{i}{a}
+\StrSubstitute{abracadabra}{a}{o}
+\StrSubstitute{abracadabra}{br}{TeX}
+\StrSubstitute{LaTeX}{m}{n}
+\StrSubstitute{a bc def }{ }{M}
+\StrSubstitute{a bc def }{ab}{AB}
+\StrSubstitute[1]{a1a2a3}{a}{B}
+\StrSubstitute[2]{a1a2a3}{a}{B}
+\StrSubstitute[3]{a1a2a3}{a}{B}
+\StrSubstitute[4]{a1a2a3}{a}{B}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrSubstitute{xstring}{i}{a}\par
+ \StrSubstitute{abracadabra}{a}{o}\par
+ \StrSubstitute{abracadabra}{br}{TeX}\par
+ \StrSubstitute{LaTeX}{m}{n}\par
+ \StrSubstitute{a bc def }{ }{M}\par
+ \StrSubstitute{a bc def }{ab}{AB}\par
+ \StrSubstitute[1]{a1a2a3}{a}{B}\par
+ \StrSubstitute[2]{a1a2a3}{a}{B}\par
+ \StrSubstitute[3]{a1a2a3}{a}{B}\par
+ \StrSubstitute[4]{a1a2a3}{a}{B}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrDel}
+
+\verbinline|\StrDel|\etoile\arguC{number}\ARGU{string}\ARGU{stringA}\arguC{name}
+\smallskip
+
+The value of the optional argument \argu{number} is 0 by default.\par\smallskip
+
+Delete the \argu{number} first occurrences of \argu{stringA} in \argu{string}, except if \argu{number}${}=0$ in which case \emph{all} the occurrences are deleted.\medskip
+
+\begin{Conditions}
+\item If \argu{string} is empty, an empty string is returned;
+\item If \argu{stringA} is empty or doesn't exist in \argu{string}, the macro is ineffective;
+\item If \argu{number} greater then the number of occurrences of \argu{stringA}, then all the occurrences are deleted;
+\item If \argu{number}${}<0$ the macro behaves as if \argu{number}${}=0$;
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrDel{abracadabra}{a}
+\StrDel[1]{abracadabra}{a}
+\StrDel[4]{abracadabra}{a}
+\StrDel[9]{abracadabra}{a}
+\StrDel{a bc def }{ }
+|\StrDel{a bc def }{def}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrDel{abracadabra}{a}\par
+ \StrDel[1]{abracadabra}{a}\par
+ \StrDel[4]{abracadabra}{a}\par
+ \StrDel[9]{abracadabra}{a}\par
+ \StrDel{a bc def }{ }\par
+ |\StrDel{a bc def }{def}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrGobbleLeft}
+\verbinline|\StrGobbleLeft|\ARGU{string}\ARGU{number}\arguC{name}
+\smallskip
+
+In \argu{string}, delete the \argu{number} first characters on the left.\medskip
+
+\begin{Conditions}
+\item If \argu{string} is empty, an empty string is returned;
+\item If \argu{number}${}\leqslant0$, no character is deleted;
+\item If \argu{number}${}\geqslant{}$\argu{lengthString}, all the characters are deleted.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrGobbleLeft{xstring}{2}
+|\StrGobbleLeft{xstring}{9}|
+\StrGobbleLeft{LaTeX}{4}
+\StrGobbleLeft{LaTeX}{-2}
+|\StrGobbleLeft{a bc def }{4}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrGobbleLeft{xstring}{2}\par
+ |\StrGobbleLeft{xstring}{9}|\par
+ \StrGobbleLeft{LaTeX}{4}\par
+ \StrGobbleLeft{LaTeX}{-2}\par
+ |\StrGobbleLeft{a bc def }{4}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrLeft}
+
+\verbinline|\StrLeft|\ARGU{string}\ARGU{number}\arguC{name}
+\smallskip
+
+In \argu{string}, returns the \argu{number} first characters on the left.\medskip
+
+\begin{Conditions}
+\item If \argu{string} is empty, an empty string is returned;
+\item If \argu{number}${}\leqslant0$, no character is returned;
+\item If \argu{number}${}\geqslant{}$\argu{lengthString}, all the characters are returned.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrLeft{xstring}{2}
+\StrLeft{xstring}{9}
+\StrLeft{LaTeX}{4}
+|\StrLeft{LaTeX}{-2}|
+|\StrLeft{a bc def }{5}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrLeft{xstring}{2}\par
+ \StrLeft{xstring}{9}\par
+ \StrLeft{LaTeX}{4}\par
+ |\StrLeft{LaTeX}{-2}|\par
+ |\StrLeft{a bc def }{5}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrGobbleRight}
+
+\verbinline|\StrGobbleRight|\ARGU{string}\ARGU{number}\arguC{name}
+\smallskip
+
+In \argu{string}, delete the \argu{number} last characters on the right.\medskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrGobbleRight{xstring}{2}
+|\StrGobbleRight{xstring}{9}|
+\StrGobbleRight{LaTeX}{4}
+|\StrGobbleRight{LaTeX}{-2}|
+|\StrGobbleRight{a bc def }{4}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrGobbleRight{xstring}{2}\par
+ |\StrGobbleRight{xstring}{9}|\par
+ \StrGobbleRight{LaTeX}{4}\par
+ |\StrGobbleRight{LaTeX}{-2}|\par
+ |\StrGobbleRight{a bc def }{4}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrRight}
+
+\verbinline|\StrRight|\ARGU{string}\ARGU{number}\arguC{name}
+\smallskip
+
+In \argu{string}, returns the \argu{number} last characters on the right.\medskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrRight{xstring}{2}
+\StrRight{xstring}{9}
+\StrRight{LaTeX}{4}
+|\StrRight{LaTeX}{-2}|
+\StrRight{a bc def }{5}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrRight{xstring}{2}\par
+ \StrRight{xstring}{9}\par
+ \StrRight{LaTeX}{4}\par
+ |\StrRight{LaTeX}{-2}|\par
+ \StrRight{a bc def }{5}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrChar}
+
+\verbinline|\StrChar|\etoile\ARGU{string}\ARGU{number}\arguC{name}
+\smallskip
+
+Returns the \US at the position \argu{number} in \argu{string}.\medskip
+
+\begin{Conditions}
+\item If \argu{string} is empty, no caracter is returned;
+\item If \argu{number}${}\leqslant0$ or if \argu{number}${}>{}$\argu{lengthString}, no character is returned.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrChar{xstring}{4}
+|\StrChar{xstring}{9}|
+|\StrChar{xstring}{-5}|
+\StrChar{a bc def }{6}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrChar{xstring}{4}\par
+ |\StrChar{xstring}{9}|\par
+ |\StrChar{xstring}{-5}|\par
+ \StrChar{a bc def }{6}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrMid}
+
+\verbinline|\StrMid|\ARGU{string}\ARGU{numberA}\ARGU{numberB}\arguC{name}
+\smallskip
+
+In \argu{string}, returns the substring between\footnote{In the broad sense, i.e. that the strings characters of the \guill{border} are returned.} the positions \argu{numberA} and \argu{numberB}.\medskip
+
+\begin{Conditions}
+\item If \argu{string} is empty, an empty string is returned;
+\item If \argu{numberA}${}>{}$\argu{numberB}, an empty string is returned;
+\item If \argu{numberA}${}<1$ and \argu{numberB}${}<1$ an empty string is returned;
+\item If \argu{numberA}${}>{}$\argu{lengthString} et \argu{numberB}${}>{}$\argu{lengthString}, an empty string is returned;
+\item If \argu{numberA}${}<1$, the macro behaves as if \argu{numberA}${}=1$;
+\item If \argu{numberB}${}>{}$\argu{lengthString}, the macro behaves as if \argu{numberB}${}={}$\argu{lengthString}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrMid{xstring}{2}{5}
+\StrMid{xstring}{-4}{2}
+|\StrMid{xstring}{5}{1}|
+\StrMid{xstring}{6}{15}
+\StrMid{xstring}{3}{3}
+|\StrMid{a bc def }{2}{7}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrMid{xstring}{2}{5}\par
+ \StrMid{xstring}{-4}{2}\par
+ |\StrMid{xstring}{5}{1}|\par
+ \StrMid{xstring}{6}{15}\par
+ \StrMid{xstring}{3}{3}\par
+ |\StrMid{a bc def }{2}{7}|
+\end{minipage}%
+
+\subsection{Macros returning a number}
+\subsubsection{\ttfamily\textbackslash StrLen}
+
+\verbinline|\StrLen|\ARGU{string}\arguC{name}
+\smallskip
+
+Return the length of \argu{string}.
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrLen{xstring}
+\StrLen{A}
+\StrLen{a bc def }
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrLen{xstring}\par
+ \StrLen{A}\par
+ \StrLen{a bc def }
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrCount}
+
+\verbinline|\StrCount|\ARGU{string}\ARGU{stringA}\arguC{name}
+\smallskip
+
+Counts how many times \argu{stringA} is contained in \argu{string}.\par\medskip
+
+\begin{Conditions}
+\item If one at least of the arguments \argu{string} or \argu{stringA} is empty, the macro return 0.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrCount{abracadabra}{a}
+\StrCount{abracadabra}{bra}
+\StrCount{abracadabra}{tic}
+\StrCount{aaaaaa}{aa}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrCount{abracadabra}{a}\par
+ \StrCount{abracadabra}{bra}\par
+ \StrCount{abracadabra}{tic}\par
+ \StrCount{aaaaaa}{aa}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrPosition}
+
+\verbinline|\StrPosition|\arguC{number}\ARGU{string}\ARGU{stringA}\arguC{name}
+\smallskip
+
+The value of the optional argument \argu{number} is 1 by default.\par\smallskip
+
+In \argu{string}, returns the position of the \argu{number}\th occurrence of \argu{stringA}.\medskip
+
+\begin{Conditions}
+\item If \argu{number} is greater than the number of occurrences of \argu{stringA}, then the macro returns 0;
+\item If \argu{string} doesn't contain \argu{stringA}, then the macro returns 0.
+\end{Conditions}
+\medskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrPosition{xstring}{ring}
+\StrPosition[4]{abracadabra}{a}
+\StrPosition[2]{abracadabra}{bra}
+\StrPosition[9]{abracadabra}{a}
+\StrPosition{abracadabra}{z}
+\StrPosition{a bc def }{d}
+\StrPosition[3]{aaaaaa}{aa}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrPosition{xstring}{ring}\par
+ \StrPosition[4]{abracadabra}{a}\par
+ \StrPosition[2]{abracadabra}{bra}\par
+ \StrPosition[9]{abracadabra}{a}\par
+ \StrPosition{abracadabra}{z}\par
+ \StrPosition{a bc def }{d}\par
+ \StrPosition[3]{aaaaaa}{aa}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrCompare}
+\verbinline|\StrCompare|\etoile\ARGU{stringA}\ARGU{stringB}\arguC{name}
+\smallskip
+
+This macro has 2 tolerances: the "normal" tolerance, used by default, and the "strict" tolerance.
+\begin{itemize}
+ \item The normal tolerance is activated with \verbinline|\comparenormal|.\par
+ The macro compares characters from left to right in \argu{stringA} and \argu{stringB} until a difference appears or the end of the shortest string is reached. The position of the first difference is returned and if no difference is found, the macro return 0.
+ \item The strict tolerance is activated with \verbinline|\comparestrict|.\par
+ The macro compares the 2 strings. If they are equal, it returns 0. If not, the position of the first difference is returned.
+\end{itemize}
+\medskip
+
+It is possible to save the comparison mode with \verbinline|\savecomparemode|, then modify this comparison mode and come back to the situation when it was saved with \verbinline|\restorecomparemode|.\medskip
+
+Examples with the normal tolerance:\par\nobreak
+\begin{minipage}[t]{0.65\linewidth}
+\comparenormal
+\begin{lstlisting}
+\StrCompare{abcd}{abcd}
+\StrCompare{abcd}{abc}
+\StrCompare{abc}{abcd}
+\StrCompare{a b c}{abc}
+\StrCompare{aaa}{baaa}
+\StrCompare{abc}{xyz}
+\StrCompare{123456}{123457}
+\StrCompare{abc}{}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \comparenormal
+ \StrCompare{abcd}{abcd}\par
+ \StrCompare{abcd}{abc}\par
+ \StrCompare{abc}{abcd}\par
+ \StrCompare{a b c}{abc}\par
+ \StrCompare{aaa}{baaa}\par
+ \StrCompare{abc}{xyz}\par
+ \StrCompare{123456}{123457}\par
+ \StrCompare{abc}{}
+\end{minipage}%
+\medskip
+
+Examples with the strict tolerance:\par\nobreak
+\begin{minipage}[t]{0.65\linewidth}
+\comparestrict
+\begin{lstlisting}
+\StrCompare{abcd}{abcd}
+\StrCompare{abcd}{abc}
+\StrCompare{abc}{abcd}
+\StrCompare{a b c}{abc}
+\StrCompare{aaa}{baaa}
+\StrCompare{abc}{xyz}
+\StrCompare{123456}{123457}
+\StrCompare{abc}{}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \comparestrict
+ \StrCompare{abcd}{abcd}\par
+ \StrCompare{abcd}{abc}\par
+ \StrCompare{abc}{abcd}\par
+ \StrCompare{a b c}{abc}\par
+ \StrCompare{aaa}{baaa}\par
+ \StrCompare{abc}{xyz}\par
+ \StrCompare{123456}{123457}\par
+ \StrCompare{abc}{}
+\end{minipage}%
+
+\section{Operating modes}
+\subsection{Expansion of arguments}
+\label{devarg}
+\subsubsection{The commands {\ttfamily \textbackslash fullexpandarg}, {\ttfamily \textbackslash expandarg} and {\ttfamily \textbackslash noexpandarg}}
+The command \verbinline|\fullexpandarg| is called by default, so all the arguments are fully expanded (an \verbinline|\edef| is used) before the the macro works on them. In most of the cases, this expansion mode avoids chains of \verbinline|\expandafter| and allows lighter code.
+
+Of course, the expansion of argument can be canceled to find back the usual behaviour of \TeX{} with the commands \verbinline|\noexpandarg| or \verbinline|\normalexpandarg|.\medskip
+
+Another expansion mode can be called with \verbinline|\expandarg|. In this case, the \textbf{first token} of each argument is expanded \emph{one time} while all other tokens are left unchanged (if you want the expansion of all tokens one time, you should call the macro \verbinline|\StrExpand|, see page~\pageref{scancs}).\medskip
+
+The commands \verbinline|\fullexpandarg|, \verbinline|\noexpandarg|, \verbinline|\normalexpandarg| and \verbinline|\expandarg| can be called at any moment in the code; they behave as "switches" and they can be locally used in a group.\medskip
+
+It is possible to save the expansion mode with \verbinline|\saveexpandmode|, then modify this expansion mode and come back to the situation when it was saved with \verbinline|\restoreexpandmode|.\medskip
+
+In the following list, for every macro of the previous chapter, the arguments colored in \textcolor{violet}{purple} will possibly be expanded, according to the expansion mode:\smallskip
+
+\parindent3em
+\begin{itemize}
+ \item\verb|\IfSubStr|\etoile{\colorise\arguC{number}\ARGU{string}\ARGU{stringA}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfSubStrBefore|\etoile{\colorise\arguCC{number1}{number2}\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfSubStrBehind|\etoile{\colorise\arguCC{number1}{number2}\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfBeginWith|\etoile{\colorise\ARGU{string}\ARGU{stringA}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfEndWith|\etoile{\colorise\ARGU{string}\ARGU{stringA}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfInteger|{\colorise\ARGU{number}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfDecimal|{\colorise\ARGU{number}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfStrEq|\etoile{\colorise\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfEq|\etoile{\colorise\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfStrEqCase|\etoile{\colorise\ARGU{string}\texttt{\color{black}\{}\colorise\ARGU{string1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfStrEqCase}\etoile\ARGU{string}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{string2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{string $n$}}\ARGU{code $n$}\verb|}|\arguC{other cases code}
+ \item\verb|\IfEqCase|\etoile{\colorise\ARGU{string}\texttt{\color{black}\{}\colorise\ARGU{string1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfEqCase}\etoile\ARGU{string}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{string2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{string $n$}}\ARGU{code $n$}\verb|}|\arguC{other cases code}
+ \item\verb|\StrBefore|\etoile{\colorise\arguC{number}\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrBehind|\etoile{\colorise\arguC{number}\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrBetween|\etoile{\colorise\arguCC{number1}{number2}\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\arguC{name}
+ \item\verb|\StrSubstitute|{\colorise\arguC{number}\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\arguC{name}
+ \item\verb|\StrDel|{\colorise\arguC{number}\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrSplit|{\colorise\ARGU{string}\ARGU{number}}\ARGU{stringA}\ARGU{stringB}\qquad{\small(see macro \verb|StrSplit| page~\pageref{StrSplit})}
+ \item\verb|\StrGobbleLeft|{\colorise\ARGU{string}\ARGU{number}}\arguC{name}
+ \item\verb|\StrLeft|{\colorise\ARGU{string}\ARGU{number}}\arguC{name}
+ \item\verb|\StrGobbleRight|{\colorise\ARGU{string}\ARGU{number}}\arguC{name}
+ \item\verb|\StrRight|{\colorise\ARGU{string}\ARGU{number}}\arguC{name}
+ \item\verb|\StrChar|{\colorise\ARGU{string}\ARGU{number}}\arguC{name}
+ \item\verb|\StrMid|{\colorise\ARGU{string}\ARGU{number1}\ARGU{number2}}\arguC{name}
+ \item\verb|\StrLen|{\colorise\ARGU{string}}\arguC{name}
+ \item\verb|\StrCount|{\colorise\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrPosition|{\colorise\arguC{number}\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrCompare|{\colorise\ARGU{stringA}\ARGU{stringB}}\arguC{name}
+\end{itemize}
+\parindent0pt
+
+\subsubsection{Chars and tokens allowed in arguments}
+First of all, whatever be the current expansion mode, \textbf{tokens with catcode 6 and 14 (usually {\ttfamily\#} and {\ttfamily\%}) are forbidden in all the arguments}\footnote{Maybe, the token {\ttfamily\#} will be allowed in a future version.}.\bigskip
+
+When full expansion mode is activated with \verbinline|\fullexpandarg|, arguments are expanded with an \verbinline|\edef| before they are read by the macro. Consequently, are allowed in arguments:
+\parindent3em
+\begin{itemize}
+ \item letters (uppercase or lowercase, accented\footnote{For a reliable operation with accented letters, the \texttt{\string\fontenc} package with option \texttt{[T1]} and \texttt{\string\inputenc} with appropriated option must be loaded} or not), figures, spaces, and any other character with a catcode of 10, 11 ou 12 (punctuation signs, calculation signs, parenthesis, square bracket, etc).;
+ \item tokens with catcode 1 to 4, usually : \verb|{|\quad\verb|}|\footnote{Warning : braces \textbf{must} be balanced in arguments !}\quad\verb|$|\quad\verb|&|
+ \item tokens with catcode 7 and 8, usually : \verb|^|\quad\verb|_|
+ \item any purely expandable control sequence\footnote{i.e. this control sequence can be {\ttfamily\string\edef}ed.} or tokens with catcode 13 (active chars) whose expansion is allowed chars.
+\end{itemize}\parindent0pt
+\smallskip
+
+When arguments are not expanded with the use of \verbinline|\noexpandarg|, other tokens can be put in a string whatever be the code they make: any control sequence, even undefined, any token catcode 13. Moreover, test tokens are allowed like \verbinline|\if| or \verbinline|\ifx|, even without their \verbinline|\fi|. On the same way, a \verbinline|\csname| without its \verbinline|\endcsname| is allowed.
+
+In this example, the argument contains a \verbinline|\ifx| \emph{without} the \verbinline|\fi|: the \verbinline|\StrBetween| command extracts and dislpays what is between \verbinline|\ifx| and \verbinline|\else|:\par\medskip\nobreak
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\StrBetween{\ifx ab false \else true}{\ifx}{\else}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \StrBetween{\ifx ab false \else true}{\ifx}{\else}
+\end{minipage}
+\medskip
+
+When \verbinline|\expandarg| is used, the first token needs precaution since it is expanded one time: it must be defined. The other tokens are left unchanged like with \verbinline|\noexpandarg|.
+
+\subsection{Expansion of macros, optional argument}
+\label{argumentoptionnel}
+The macros of this package are not purely expandable, i.e. they cannot be put in the argument of an \verbinline|\edef|. Nestling macros is not possible neither.\medskip
+
+For this reason, all the macros returning a result (i.e. all excepted the tests) have an optional argument in last position. The syntax is \arguC{name}, where \argu{name} is the name of the control sequence that will receive the result of the macro: the assignment is made with an \verbinline|\edef| which make the result of the macro \argu{name} purely expandable. Of course, if an optional argument is present, the macro does not display anything.\medskip
+
+Thus, this structure not allowed, supposed to assign to \verb|\Result| the 4 chars on the left of \verb|xstring|:\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\edef\Result{\StrLeft{xstring}{4}}|\par\nobreak
+\qquad is equivalent to :\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrLeft{xstring}{4}[\Result]|\medskip
+
+And this nested structure, not allowed neither, supposed to remove the first and last char of \verb|xstring|:\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrGobbleLeft{\StrGobbleRight{xstring}{1}}{1}|\par\nobreak
+\qquad should be written like this:\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrGobbleRight{xstring}{1}[\mystring]|\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrGobbleleft{\mystring}{1}|\par
+
+\subsection{How does \Xstring read the arguments?}
+\label{developpementarguments}
+\subsubsection{Syntax unit by \US}
+The macros of \Xstring read their arguments \US par \US. In the \TeX{} code, a \US\footnote{For advanced users used to \LaTeX{} programming, a \US is what is gobbled by the macro \texttt{\string\@gobble} whose code is: {\ttfamily\string\def\string\@gobble\string#1\string{\string}}} is either:\parindent3em
+\begin{itemize}
+ \item a control sequence;
+ \item a group, i.e. what is between 2 balanced braces (usually tokens catcode 1 and 2);
+ \item a char.
+\end{itemize}
+\medskip\parindent0pt
+
+Let's see what is a \US with an example. Let's take this argument : "\verb|ab\textbf{xyz}cd|"
+
+It has 6 \USs: "\verb|a|", "\verb|b|", "\verb|\textbf|", "\verb|{xyz}|", "\verb|c|" and "\verb|d|".\medskip
+
+What will happen if, while \verbinline|\noexpandarg| is active, we ask \Xstring to find the length of this argument and find its 4\th "char"\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\StrLen{ab\textbf{xyz}cd}\par
+\StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+\meaning\mychar
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \StrLen{ab\textbf{xyz}cd}\par
+ \StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+ \meaning\mychar
+\end{minipage}%
+\fullexpandarg
+\medskip
+
+It is necessary to use \verbinline|\meaning| to see the real expansion of \verb|\mychar|, and not simply call \verb|\mychar| to display it, which make loose informations (braces here). We do not obtain a "char" but a \US, as expected.
+
+\subsubsection{Exploration of groups}
+By default, the command \verbinline|\noexploregroups| is called, so in the argument containing the string of tokens, \Xstring does not look into groups, and simply consider them as a \US.
+
+For specific uses, it can be necessary to look into groups: \verbinline|\exploregroups| changes the exploration mode and forces the macros to look inside groups.\medskip
+
+What does this exploration mode in the previous example? \Xstring does not count the group as a single \US but looks inside it and counts the \US found inside (\verb|x|, \verb|y| and \verb|z|), and so on if there were several nested groups:\smallskip
+
+\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\exploregroups
+\StrLen{ab\textbf{xyz}cd}\par
+\StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+\meaning\mychar
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \exploregroups
+ \StrLen{ab\textbf{xyz}cd}\par
+ \StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+ \meaning\mychar
+\end{minipage}%
+\fullexpandarg\noexploregroups
+\medskip
+
+Exploring the groups can be usefull for counting a substring in a string (\verbinline|\StrCount|), for the position of a substring in a string (\verbinline|\StrPosition|) or for tests, but has a severe limitation with macros returning a string: when a string is cut inside a group, \textbf{the result does not take into account what is outside this group}. This exploration mode must be used knowingly this limitation when calling macros returning a string.\smallskip
+
+Let's see what this means with an example. We want to know what is on the left of the second appearance of \verb|\a| in the argument \verb|\a1{\b1\a2}\a3|. As groups are explored, this appearance is inside this group : \verb|{\b1\a2}|. The result will be \verb|\b1|. Let's check:\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\exploregroups
+\StrBefore[2]{\a1{\b1\a2}\a3}{\a}[\mycs]
+\meaning\mycs
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \exploregroups
+ \StrBefore[2]{\a1{\b1\a2}\a3}{\a}[\mycs]
+ \meaning\mycs
+\end{minipage}%
+\medskip
+
+Exploring the groups\footnote{The file test of \Xstring has many examples underlining differences between exploration modes.} can change the behaviour of most of the macros of \Xstring, excepted these macros untouched by the exploration mode; their behaviour is the same in any case: \verbinline|\IfInteger|, \verbinline|\IfDecimal|, \verbinline|\IfStrEq|, \verbinline|\StrEq| et \verbinline|\StrCompare|.
+
+Moreover, 2 macros run in \verbinline|\noexploregroups| mode, whatever be the current mode: \verbinline|\StrBetween| et \verbinline|\StrMid|.\medskip
+
+It is possible to save the exploration mode with \verbinline|\saveexploremode|, then modify it and come back to the situation when it was saved with \verbinline|\restoreexploremode|.
+
+\subsection{Catcode and starred macros}
+\label{macrosetoilees}
+Macros of this package take the catcodes of tokens into account. To avoid unexpected behaviour (particulary with tests), you should keep in mind that tokens \emph{and their catcodes} are examined.\medskip
+
+For instance, these two arguments:\par\medskip
+\hfil\verbinline|{\string a\string b}|\qquad and\qquad\verb|{ab}|\hfil{}\par\smallskip
+do \emph{not} expand into equal strings for xstring! Because of the command \verbinline|\string|, the first expands into "\verb|ab|" with catcodes 12 while the second have characters with their natural catcodes 11. Catcodes do not match! It is necessary to be aware of this, particulary with \TeX{} commands like \verbinline|\string| whose expansions are a strings with chars catcodes 12 and 10 : \verbinline|\detokenize|, \verbinline|\meaning|, \verbinline|\jobname|, \verbinline|\fontname|, \verbinline|\romannumeral|, etc.\medskip
+
+Starred macros do not take catcodes into account. They simply convert some arguments into arguments with catcodes 10, 11 and 12, and call the non-starred macros with these modified arguments. The optional arguments are not modified and the catcodes are left unchanged.\medskip
+
+Here is an example:\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\IfStrEq{\string a\string b}{ab}{true}{false}\par
+\IfStrEq*{\string a\string b}{ab}{true}{false}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \IfStrEq{\string a\string b}{ab}{true}{false}\par
+ \IfStrEq*{\string a\string b}{ab}{true}{false}
+\end{minipage}%
+\smallskip
+
+The strings do not match because of catcode differences: the test is negative in the non-starred macro.\bigskip
+
+\textbf{Warning}: the use of a strarred macro has consequences! The arguments are \guill{detokenized}, thus, there is no more control sequences, groups, neither any special char: everything is converted into chars with "harmless" catcodes.\medskip
+
+For the macros returning a string, if the starred version is used, the result will be a string in which chars have catcodes 12 and 10 for space. For example, after a "\verbinline|\StrBefore*{a \b c d}{c}[\mytext]|", the control sequence \verb|\mytext| expands to "\verb|a|${}_{12}$\verb*| |${}_{10}$\verb|\|${}_{12}$\verb|b|${}_{12}$\verb*| |${}_{10}$".\medskip
+
+The macro with a starred version are listed below. For these macros, if starred version is used, the \textcolor{violet}{purple} arguments will be detokenized:\smallskip
+
+\parindent3em
+\begin{itemize}
+ \item\verb|\IfSubStr|\etoile\arguC{number}{\colorise\ARGU{string}\ARGU{stringA}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfSubStrBefore|\etoile\arguCC{number1}{number2}{\colorise\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfSubStrBehind|\etoile\arguCC{number1}{number2}{\colorise\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfBeginWith|\etoile{\colorise\ARGU{string}\ARGU{stringA}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfEndWith|\etoile{\colorise\ARGU{string}\ARGU{stringA}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfStrEq|\etoile{\colorise\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfEq|\etoile{\colorise\ARGU{stringA}\ARGU{stringB}}\ARGU{true}\ARGU{false}
+ \item\verb|\IfStrEqCase|\etoile{\colorise\ARGU{string}\texttt{\color{black}\{}\colorise\ARGU{string1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfStrEqCase}\etoile\ARGU{string}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{string2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{string $n$}}\ARGU{code $n$}\verb|}|\arguC{other cases code}
+ \item\verb|\IfEqCase|\etoile{\colorise\ARGU{string}\texttt{\color{black}\{}\colorise\ARGU{string1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfEqCase}\etoile\ARGU{string}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{string2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{string $n$}}\ARGU{code $n$}\verb|}|\arguC{other cases code}
+ \item\verb|\StrBefore|\etoile\arguC{number}{\colorise\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrBehind|\etoile\arguC{number}{\colorise\ARGU{string}\ARGU{stringA}}\arguC{name}
+ \item\verb|\StrBetween|\etoile\arguCC{number1}{number2}{\colorise\ARGU{string}\ARGU{stringA}\ARGU{stringB}}\arguC{name}
+ \item\verb|\StrCompare|\etoile{\colorise\ARGU{stringA}\ARGU{stringB}}\arguC{name}
+\end{itemize}
+\parindent0pt
+
+\section{Advanced macros for programming}
+Though \Xstring is able to read arguments containing \TeX{} or \LaTeX{} code, for some advanced programming needs, it can be insufficient. This chapter presents other macros able to get round some limitations.
+
+\subsection{Finding a group, macros {\ttfamily\textbackslash StrFindGroup} and {\ttfamily\textbackslash groupID}}
+When \verbinline=\exploregroups= mode is active, the macro \verbinline=\StrFindGroup= finds a group between braces with its identifier:\smallskip
+
+\verbinline|\StrFindGroup|\ARGU{argument}\ARGU{identifier}\arguC{name}\medskip
+
+When the group matching the identifier does not exist, an empty string is assigned to \argu{name}. If the group is found, this group \emph{with its braces} is assigned to \argu{name}.\smallskip
+
+This identifier characterizes the nestling position of the group. It is a list of one or several integers separated with commas. $n_1$, the first integer is the number of the group (not nestled in another) in which the sought group is. Inside this group, the second integer $n_2$ is the number of the group (not nestled in another) in which the sought group is\ldots and so on until the necessary nestling depth is reached to obtain the sougth after group.\bigskip
+
+Let's take an example with 3 levels of nestled groups. In this example, braces delimiting groups are colored in red for nestling level 1, in blue for level 2 and in green for level 3. The groups are numbered with the rule seen above:
+\begingroup
+ \def\AccO#1{\text{\color{#1}\ttfamily\{}}
+ \def\AccF#1{\text{\color{#1}\ttfamily\}}}
+ \def\texte#1{\text{\texttt{\color{black}#1}}}
+ \def\decalbrace{\vphantom{\underbrace{A}_A}}
+ \[\texte{a}{\color{red}\underbrace{\AccO{red}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{bc}\AccF{blue}}_{\color{blue}1}}\texte{d}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{efg}\AccF{blue}}_{\color{blue}2}}\AccF{red}}_{\color{red}1}}\texte{h}{\color{red}\underbrace{\AccO{red}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{ij}\AccF{blue}}_{\color{blue}1}}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{k}\AccF{blue}}_{\color{blue}2}}{\color{blue}\underbrace{\AccO{blue}\texte{l}{\color{green}\underbrace{\AccO{green}\texte{m}\AccF{green}}_{\color{green}1}}{\color{green}\underbrace{\AccO{green}\texte{no}\AccF{green}}_{\color{green}2}}\AccF{blue}}_{\color{blue}3}}\texte{p}\AccF{red}}_{\color{red}2}}\]
+\endgroup
+\smallskip
+In this example:\parindent3em
+\begin{itemize}
+ \item the group \verb={{bc}d{efg}}= has the identifier: \texttt{\color{red}1}
+ \item the group \verb={ij}= has the identifier: \texttt{{\color{red}2},\color{blue}1}
+ \item the group \verb={no}= has the identifier: \texttt{{\color{red}2},{\color{blue}3},\color{green}2}
+ \item the whole argument \verb=a{{bc}d{efg}}h{{ij}{k}{l{m}{no}}p}= has the identifier \verb=0=, only case where the integer 0 is appears in the identifier of a group.
+\end{itemize}
+\parindent0pt
+\medskip
+Here is the full example:\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\exploregroups
+\expandarg
+\def\mystring{a{{bc}d{efg}}h{{ij}{k}{l{m}{no}}p}}
+\StrFindGroup{\mystring}{1}[\mygroup]
+\meaning\mygroup\par
+\StrFindGroup{\mystring}{2,1}[\mygroup]
+\meaning\mygroup\par
+\StrFindGroup{\mystring}{2,3,2}[\mygroup]
+\meaning\mygroup\par
+\StrFindGroup{\mystring}{2,5}[\mygroup]
+\meaning\mygroup\par
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ \expandarg
+ \def\mystring{a{{bc}d{efg}}h{{ij}{k}{l{m}{no}}p}}
+ \StrFindGroup{\mystring}{1}[\mygroup]
+ \meaning\mygroup\par
+ \StrFindGroup{\mystring}{2,1}[\mygroup]
+ \meaning\mygroup\par
+ \StrFindGroup{\mystring}{2,3,2}[\mygroup]
+ \meaning\mygroup\par
+ \StrFindGroup{\mystring}{2,5}[\mygroup]
+ \meaning\mygroup\par
+\end{minipage}%
+\bigskip
+
+The reverse process exists, and several macros of \Xstring provide the identifier of the group in which they made a cut or they found a substring. These macros are: \verbinline|\IfSubStr|, \verbinline|\StrBefore|, \verbinline|\StrBehind|, \verbinline|\StrSplit|, \verbinline|\StrLeft|, \verbinline|\StrGobbleLeft|, \verbinline|\StrRight|, \verbinline|\StrGobbleRight|, \verbinline|\StrChar|, \verbinline|\StrPosition|.\medskip
+
+After these macros, the control sequence \verbinline|\groupID| expands to the identifier of the group where the cut has been done or the search has succeeded. When not cut can be done or the search fails, \verbinline|\groupID| is empty. Obvioulsly, the use of \verbinline|\groupID| has sense only when \verbinline|\exploregroups| mode is acive and when non starred macros are used.\smallskip
+
+Here are some examples with the macro \verbinline|\StrChar|:\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\exploregroups
+char 1 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{1}\qquad
+\string\groupID = \groupID\par
+char 4 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{4}\qquad
+\string\groupID = \groupID\par
+char 6 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{6}\qquad
+\string\groupID = \groupID\par
+char 20 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{20}\qquad
+\string\groupID = \groupID
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ char 1 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{1}\qquad
+ \string\groupID = \groupID\par
+ char 4 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{4}\qquad
+ \string\groupID = \groupID\par
+ char 6 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{6}\qquad
+ \string\groupID = \groupID\par
+ char 20 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{20}\qquad
+ \string\groupID = \groupID
+\end{minipage}
+
+\subsection{Splitting a string, the macro {\ttfamily\textbackslash StrSplit}}
+\label{StrSplit}
+Here is the syntax:\smallskip
+
+\verbinline|\StrSplit|\ARGU{string}\ARGU{number}\ARGU{stringA}\ARGU{stringB}
+\smallskip
+
+The \argu{string}, is splitted after the \US at position \argu{number}. The left part is assigned to the control sequence \argu{stringA} and the right part is assigned to \argu{stringB}.\par
+This macro returns two strings, so it does \emph{not} display anything. Consequently, it does not provide the optional argument in last position.\medskip
+
+\begin{Conditions}
+ \item If \argu{number}${}\leqslant0$, \argu{stringA} is empty and \argu{stringB} is equal to \argu{string};
+ \item If \argu{number}${}\geqslant$\argu{lengthString}, \argu{stringA} is equal to \argu{string} and \argu{stringB} is empty;
+ \item If \argu{string} is empty, \argu{stringA} and \argu{stringB} are empty, whatever be the integer \argu{number}.
+\end{Conditions}
+
+\begin{minipage}[c]{0.65\linewidth}
+
+\begin{lstlisting}
+\def\redsep{{\color{red}|}}%
+\StrSplit{abcdef}{4}{\csA}{\csB}|\csA\redsep\csB|
+\StrSplit{a b c }{2}{\csA}{\csB}|\csA\redsep\csB|
+\StrSplit{abcdef}{1}{\csA}{\csB}|\csA\redsep\csB|
+\StrSplit{abcdef}{5}{\csA}{\csB}|\csA\redsep\csB|
+\StrSplit{abcdef}{9}{\csA}{\csB}|\csA\redsep\csB|
+\StrSplit{abcdef}{-3}{\csA}{\csB}|\csA\redsep\csB|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \def\redsep{{\color{red}|}}%
+ \StrSplit{abcdef}{4}{\csA}{\csB}|\csA\redsep\csB|\par
+ \StrSplit{a b c }{2}{\csA}{\csB}|\csA\redsep\csB|\par
+ \StrSplit{abcdef}{1}{\csA}{\csB}|\csA\redsep\csB|\par
+ \StrSplit{abcdef}{5}{\csA}{\csB}|\csA\redsep\csB|\par
+ \StrSplit{abcdef}{9}{\csA}{\csB}|\csA\redsep\csB|\par
+ \StrSplit{abcdef}{-3}{\csA}{\csB}|\csA\redsep\csB|
+\end{minipage}%
+
+When the exploration of groups is active and the cut is made at the end of a group, the content of the left string will tbe the entire group while the right string will be empty. The example shows this:\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\hfill
+\begin{lstlisting}
+\exploregroups
+\StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+\meaning\strA\par
+\meaning\strB
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ \StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+ \meaning\strA\par
+ \meaning\strB
+\end{minipage}%
+\medskip
+
+This macro provides a star version: in this case, the cut is made just before the \US which follows the \US at position \argu{number}. Both version give same results, except when the cut is made at the end of a group; in that case, \verbinline|\StrSplit| closes as many group as necessary until it finds the next \US: the cut is made just before this \US.\smallskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\hfill
+\begin{lstlisting}
+\exploregroups
+Use without star :\par
+\StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+\meaning\strA\par
+\meaning\strB\par
+\string\groupID\ = \groupID\par\medskip
+Use with star :\par
+\StrSplit*{ab{cd{ef}gh}ij}{6}\strA\strB
+\meaning\strA\par
+\meaning\strB\par
+\string\groupID\ = \groupID
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ Use without star :\par
+ \StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+ \meaning\strA\par
+ \meaning\strB\par
+ \string\groupID\ = \groupID\par\medskip
+ Use with star :\par
+ \StrSplit*{ab{cd{ef}gh}ij}{6}\strA\strB
+ \meaning\strA\par
+ \meaning\strB\par
+ \string\groupID\ = \groupID
+\end{minipage}%
+
+\subsection{Assign a verb content, the macro \ttfamily\textbackslash verbtocs}
+\label{verbtocs}
+The macro \verbinline|\verbtocs| allow to read the content of a \guill{verb} argument containing special characters: \verb|&|, \verb|~|, \verb|\|, \verb|{|, \verb|}|, \verb|_|, \verb|#|, \verb|$|, \verb|^| and \verb|%|. The catcodes of \guill{normal} characters are left unchanged while special characters take a catcode 12. Then, these characters are assigned to a control sequence. The syntax is:\par\nobreak\medskip
+\hfill\verbinline|\verbtocs|\ARGU{name}|\argu{characters}|\hfill{}
+\smallskip
+
+\argu{name} is the name of the control sequence receiving, with an \verbinline|\edef|, the \argu{characters}. \argu{name} thus contains tokens with catcodes 12 (or 10 for space).\medskip
+
+By default, the token delimiting the verb content is \guill{|}. Obviously, this token cannot be both delimiting and being contained into what it delimits. If you need to verbatimize strings containing \guill{|}, you can change at any time the token delimiting the verb content with the macro:\par\nobreak\medskip
+\hfill\verbinline|\setverbdelim|\ARGU{character}\hfill{}\smallskip
+
+Any \argu{token} can be used\footnote{Several tokens can be used, but the syntax of \texttt{\textbackslash verbtocs} becomes less readable ! For this reason, a warning occurs when the argument of \texttt{\textbackslash setverbdelim} contains more than a single token.}. For example, after \verbinline|\setverbdelim{=}|, a verb argument look like this: \verb|=|\argu{characters}\verb|=|.\medskip
+
+About verb arguments, keep in mind that:
+\begin{itemize}
+ \item all the characters before |\argu{characters}| are ignored;
+ \item inside the verb argument, all the spaces are taken into account, even if they are consecutive.
+\end{itemize}
+\medskip
+
+Example:\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\lstset{deletecomment=[l]\%}
+\begin{lstlisting}
+\verbtocs{\result} |a & b{ c% d$ e \f|
+I display the result :\par\result
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\result} |a & b{ c% d$ e \f|
+ I display the result :\par\result
+\end{minipage}%
+
+\subsection{Tokenization of a text to a control sequence, the macro \ttfamily\textbackslash tokenize}
+The reverse process of what has been seen above is to transform chars into tokens. This is done by the macro:\par\nobreak\medskip
+\hfill\verbinline|\tokenize|\ARGU{name}\ARGU{control sequences}\hfill{}
+\smallskip
+
+\argu{control sequences} is fully expanded if \verbinline|\fullexpandarg| has been called, and is not expanded if \verbinline|\noexpandarg| or \verbinline|\expandarg| are active. After expansion, the chars are tokenized to tokens and assigned to \argu{name} with a \verbinline|\def|.\medskip
+
+Example:\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\verbtocs{\text}|\textbf{a} $\frac{1}{2}$|
+text : \text
+\tokenize{\result}{\text}\par
+result : \result
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\text}
+ |\textbf{a} $\frac{1}{2}$|
+ text : \text
+ \tokenize{\result}{\text} \par
+ result : \result
+\end{minipage}%
+\medskip
+
+Obviously, the control sequence \verb|\result| can be called at the last line since the control sequences it contains are defined.
+
+\subsection{Expansion of a control sequence before verbatimize, the macros {\ttfamily\textbackslash StrExpand} and {\ttfamily\textbackslash scancs}}
+\label{scancs}
+The macro \verbinline|\StrExpand| expands the tokens of a string:\par\nobreak\medskip
+\verbinline|\StrExpand|\arguC{number}\ARGU{string}\ARGU{name}\smallskip
+
+By default, \argu{number} is 1 and represnts the number of times each token of \argu{string} has to be expanded. The \argu{name} is a control sequence receiving the result of the expansions.\medskip
+
+Macro works sequentially and by pass: in a pass, each token from left to right is replaced by its 1-expansion. After this expansion, if the \argu{number} of expansions is not reached, an other pass starts, and so on.\medskip
+
+Here is an example:\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\def\csA{1 2}
+\def\csB{a \csA}
+\def\csC{\csB\space}
+\def\csD{x{\csA y}\csB{\csC z}}
+Expansion of \string\csD\ at\par
+\StrExpand[0]{\csD}{\csE} depth 0 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[1]{\csD}{\csE} depth 1 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[2]{\csD}{\csE} depth 2 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[3]{\csD}{\csE} depth 3 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[4]{\csD}{\csE} depth 4 :
+\detokenize\expandafter{\csE}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \def\csA{1 2}
+ \def\csB{a \csA}
+ \def\csC{\csB\space}
+ \def\csD{x{\csA y}\csB{\csC z}}
+ Expansion of \string\csD\ at\par
+ \StrExpand[0]{\csD}{\csE} depth 0 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[1]{\csD}{\csE} depth 1 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[2]{\csD}{\csE} depth 2 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[3]{\csD}{\csE} depth 3 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[4]{\csD}{\csE} depth 4 :
+ \detokenize\expandafter{\csE}
+\end{minipage}%
+\medskip
+
+The macro expands each token consecutively, and does not see what follows: tokens whose expansion depends on other tokens cannot be expanded with this macro. For instance, though "\hbox{\verbinline|\iftrue A\else B\fi|}" has a natural expansion ("A"), it cannot be put in the argument of \verbinline|\StrExpand| and:\par\nobreak\smallskip
+\hfil\verbinline|\StrExpand{\iftrue A\else B\fi}\resultat|\hfil{}\par\nobreak\smallskip
+provokes an error because the first token "\verbinline|\iftrue|" is expanded \emph{alone} without seeing its \verbinline-\fi- which makes \TeX{} angry.
+
+Expansion inside groups is \emph{independant} of the exploration mode: this macro has its own command to expand or not what is inside the groups. By default, tokens inside groups are expanded, but this can be changed with the macro \verbinline-\noexpandingroups-. The default behaviour can be recoverd with \verbinline-\expandingroups-.\bigskip
+
+The \verbinline-\scancs- macro returns the detokenized result:\par\nobreak\medskip
+\verbinline|\scancs|\arguC{number}\ARGU{name}\ARGU{string}\par\nobreak\smallskip
+The \argu{number} is 1 by default and represents the number of expansions.\smallskip
+
+\verbinline-\scancs- has been kept for compatibility with older versions of \Xstring. This macro now unnecessry, simply takes the result of \verbinline|\StrExpand| and \verbinline|\detokenize| it.
+
+\subsection{Inside the definition of a macro}
+Some difficulties arise inside the definition of a macro, i.e. between braces following a \verbinline|\def\macro| or a\\\verbinline|\newcommand\macro|.\medskip
+
+It is forbidden to use the command \verbinline|\verb| inside the definition of a macro. For the same reasons:\par\medskip
+\hfill\textbf{Do not use \texttt{\textbackslash verbtocs} inside the definition of a macro}.\hfill{}\medskip
+
+But then, how to manipulate special characters and "verbatimize" inside the définition of macros ?\bigskip
+
+The \verbinline|\detokenize| primitive of $\varepsilon$-\TeX can be used but it has limitations:
+\begin{itemize}
+ \item braces must be balanced;
+ \item consecutive spaces make a single space;
+ \item the \verb|%| sign is not allowed;
+ \item a space is inserted after each control sequence;
+ \item \verb|#| signs become \verb|##|.
+\end{itemize}
+\medskip
+
+It is better to use \verbinline|\scancs| and define \emph{outside the definition of the macros} control sequences containing special characters with \verbinline|\verbtocs|. It is also possible to use \verbinline|\tokenize| to transform the final result (which is generaly \texte{10,11,12}) into control sequences. See example using these macros at the end of this manual, page~\pageref{exemples}.\medskip
+
+In the following teaching example\footnote{It is possible to make much more simple using \texttt{\textbackslash detokenize}. The macro becomes:\par\texttt{\textbackslash newcommand\textbackslash bracearg[1]\{\textbackslash detokenize\{\{\#1\}\}\}}}, the macro \verb|\bracearg| adds braces to its argument. To make this possible, 2 control sequences \verb|\Ob| and \verb|\Cb| containing "\verb|{|" and "\verb|}|" are defined outside the definition of \verb|\bracearg|, and expanded inside it:\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\verbtocs{\Ob}|{|
+\verbtocs{\Cb}|}|
+\newcommand\bracearg[1]{%
+ \def\text{#1}%
+ \scancs{\result}{\Ob\text\Cb}%
+ \result}
+
+\bracearg{xstring}\par
+\bracearg{\a}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\Ob}|{|
+ \verbtocs{\Cb}|}|
+ \newcommand\bracearg[1]{%
+ \def\text{#1}%
+ \scancs{\result}{\Ob\text\Cb}%
+ \result}
+
+ \bracearg{xstring}\par
+ \bracearg{\a}
+\end{minipage}%
+
+\subsection{The macro \ttfamily\textbackslash StrRemoveBraces}
+Advanced users may need to remove the braces of an argument.
+
+The macro \verbinline|\StrRemoveBraces| does this. Its syntax is:\smallskip
+
+\verbinline|\StrRemoveBraces|\ARGU{string}\arguC{name}
+\smallskip
+
+This macro is sensitive to exploration mode and will remove \emph{all} the braces with \verbinline|\exploregroups| while it will remove braces of lower level with \verbinline|\noexploregroups|.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexploregroups
+\StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+\meaning\mycs
+
+\exploregroups
+\StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+\meaning\mycs
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexploregroups
+ \StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+ \meaning\mycs
+
+ \exploregroups
+ \StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+ \meaning\mycs
+\end{minipage}%
+
+\subsection{Examples}
+\label{exemples}
+Here are some very simple examples involving the macros of this package in programming purposes.
+
+\subsubsection{Example 1}
+We want to substitute the 2 first \verbinline|\textit| by \verbinline|\textbf| in the control sequence \verb|\myCS| which contains \par\smallskip
+\hfill\verbinline|\textit{A}\textit{B}\textit{C}|\hfill{}
+\medskip
+
+We expect: \textbf{A}\textbf{B}\textit{C}\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\expandarg
+\def\myCS{\textit{A}\textit{B}\textit{C}}
+\def\pattern{\textit}
+\def\replace{\textbf}
+\StrSubstitute[2]{\myCS}{\pattern}{\replace}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \expandarg
+ \def\myCS{\textit{A}\textit{B}\textit{C}}
+ \def\pattern{\textit}
+ \def\replace{\textbf}
+ \StrSubstitute[2]{\myCS}{\pattern}{\replace}
+\end{minipage}%
+\medskip
+
+It is possible to avoid to define \verb|\pattern| and \verb|\replace|: a "snare" can be used. It can be a control sequence which expansion is empty, like the famous \verbinline|\empty|. The code would have been:\par\nobreak\smallskip
+\hfil\verbinline|\StrSubstitute[2]{\myCS}{\empty\textit}{\empty\textbf}|\hfil{}\medskip
+
+With this code, in both arguments, the first token \verbinline|\empty| is expanded to "nothing" and the following significant tokens \verbinline|\textit| and \verbinline|textbf| are left unchanged.\smallskip
+
+By this way, \verbinline|\empty| is a way to "hack" \verbinline|\expandarg|: it allows to avoid the expansion of all the other tokens. The control sequence \verbinline|\noexpand| can be used instead of \verbinline|\empty| for the same result.
+
+\subsubsection{Exemple 2}
+Here, we try to write a macro which gobbles \verb|n| \USs in a string from a given position, and assigns the result to a control sequence.
+
+Let's call this macro \verb|StringDel| and let's give it this syntax:\par\nobreak
+\hfil\verb|\StringDel{string}{position}{n}{\name_of_result}|\hfil{}
+\medskip
+
+We can proceed like this: take the string before the position and save it. Then remove \verb|n + position| \USs from the initial string, and add (concatenate) this result to the string previously saved. This gives the following code:\par\nobreak\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\newcommand\StringDel[4]{%
+ \begingroup
+ \expandarg% locally in this group
+ \StrLeft{\empty#1}{\number\numexpr#2-1}[#4]%
+ \StrGobbleLeft{\empty#1}{\numexpr#2+#3-1}[\StrA]%
+ \expandafter\expandafter\expandafter\endgroup
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#4%
+ \expandafter\expandafter\expandafter
+ {\expandafter#4\StrA}%
+}
+
+\noexploregroups
+\StringDel{abcdefgh}{2}{3}{\cmd}
+\meaning\cmd
+
+\StringDel{a\textbf{1}b\textbf{2c}3d}{3}{4}{\cmd}
+\meaning\cmd
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \newcommand\StringDel[4]{%
+ \begingroup
+ \expandarg% locally in this group
+ \StrLeft{\empty#1}{\number\numexpr#2-1}[#4]%
+ \StrGobbleLeft{\empty#1}{\numexpr#2+#3-1}[\StrA]%
+ \expandafter\expandafter\expandafter\endgroup
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#4%
+ \expandafter\expandafter\expandafter{\expandafter#4\StrA}%
+ }
+
+ \noexploregroups
+ \StringDel{abcdefgh}{2}{3}{\cmd}
+ \meaning\cmd
+
+ \StringDel{a\textbf{1}b\textbf{2c}3d}{3}{4}{\cmd}
+ \meaning\cmd
+\end{minipage}%
+\fullexpandarg\bigskip
+
+To concatenate, the \LaTeX{} macro \verb|\g@addto@macro| could have been used, leading to a lighter code without the huge bridge of \verbinline|\expandafter|. The assignment\footnote{The macro {\ttfamily\string\g@addto@macro} can be used if the catcode of "{\ttfamily\string@}" is temporarily changed with {\ttfamily\string\makeatletter} and restored with {\ttfamily\string\makeatother}} can be written like this:\par\nobreak\smallskip
+\hfil\verbinline|\expandafter\g@addto@macro\expandafter#4\expandafter{\StrA}\endgroup|\hfil{}
+
+\subsubsection{Example 3}
+Let's try to write a macro \verb|\tofrac| that transforms an argument of this type \guill{a/b} into \guill{$\frac{a}{b}$}.\par\medskip
+
+First of all, let's cancel the expansion of arguments with \verbinline|\noexpandarg|, we do not need expansion here. Then, it's easy to cut what is before and behind the first occurrence of \guill{/} (assumed there is a single occurrence) and assign it to \verb|\num| and \verb|\den| and simply call the macro \verbinline|\frac| :\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\newcommand\tofrac[1]{%
+ \StrBefore{#1}{/}[\num]%
+ \StrBehind{#1}{/}[\den]%
+ $\frac{\num}{\den}$%
+}
+\tofrac{15/9}
+\tofrac{u_{n+1}/u_n}
+\tofrac{a^m/a^n}
+\tofrac{x+\sqrt{x}/\sqrt{x^2+x+1}}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \newcommand\tofrac[1]{%
+ \StrBefore{#1}{/}[\num]%
+ \StrBehind{#1}{/}[\den]%
+ $\frac{\num}{\den}$%
+ }
+ \tofrac{15/9}
+ \tofrac{u_{n+1}/u_n}
+ \tofrac{a^m/a^n}
+ \tofrac{x+\sqrt{x}/\sqrt{x^2+x+1}}
+\end{minipage}%
+
+\subsubsection{Example 4}
+Let's try to write a macro \verb|\boldafter| which writes in bold the first word that follows the word contained in the expansion of \verb|\word|.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\newcommand\boldafter[2]{%
+ \noexpandarg
+ \StrBehind[1]{#1 }{ #2 }[\word]%
+ \expandarg
+ \StrBefore{\word}{ }[\word]%
+ \StrSubstitute[1]{#1}{\word}{\textbf{\word}}%
+}
+
+\boldafter{The xstring package is new}{xstring}
+
+\boldafter{The xstring package is new}{ring}
+
+\boldafter{The xstring package is new}{is}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \newcommand\boldafter[2]{%
+ \noexpandarg
+ \StrBehind[1]{#1 }{ #2 }[\word]%
+ \expandarg
+ \StrBefore{\word}{ }[\word]%
+ \StrSubstitute[1]{#1}{\word}{\textbf{\word}}%
+ }
+
+ \boldafter{The xstring package is new}{xstring}
+
+ \boldafter{The xstring package is new}{ring}
+
+ \boldafter{The xstring package is new}{is}
+\end{minipage}%
+\fullexpandarg
+
+\subsubsection{Example 5}
+How to reverse the order of the 2 first control sequences? For this, a macro \verb|\swaptwofirst| does the job and displays the result. But this time, it is not possible to seek the token \verb|\| (catcode 0) with the macros of \Xstring. This is why the use of \verbinline|\scancs| is necessary: after the detokenization of the argument, it becomes possible to search the char \verb|\| (catcode 12). At line 5, a retokenization is done by \verbinline|\tokenize| and \verb|\before| and \verb|\after| are swapped at this moment.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\verbtocs{\antislash}|\|
+\newcommand\swaptwofirst[1]{%
+ \begingroup
+ \fullexpandarg
+ \scancs[0]\mystring{#1}%
+ \StrBefore[3]{\mystring}{\antislash}[\firsttwo]%
+ \StrBehind{\mystring}{\firsttwo}[\others]
+ \StrBefore[2]{\firsttwo}{\antislash}[\before]
+ \StrBehind{\firsttwo}{\before}[\after]%
+ \tokenize\myCS{\after\before\others}%
+ \myCS
+ \endgroup
+}
+
+\swaptwofirst{\underline{A}\textbf{B}\textit{C}}
+
+\swaptwofirst{\Large\underline{A}\textbf{B}123}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\antislash}|\|
+ \newcommand\swaptwofirst[1]{%
+ \begingroup
+ \fullexpandarg
+ \scancs[0]\mystring{#1}%
+ \StrBefore[3]{\mystring}{\antislash}[\firsttwo]%
+ \StrBehind{\mystring}{\firsttwo}[\others]
+ \StrBefore[2]{\firsttwo}{\antislash}[\before]
+ \StrBehind{\firsttwo}{\before}[\after]%
+ \tokenize\myCS{\after\before\others}%
+ \myCS
+ \endgroup
+ }
+
+ \swaptwofirst{\underline{A}\textbf{B}\textit{C}}
+
+ \swaptwofirst{\Large\underline{A}\textbf{B}123}
+\end{minipage}%
+
+
+\subsubsection{Example 6}
+In a string, we want to find the $n$\th{} word between 2 given delimiters. For this, let's write a macro \verb|\findword| with an optional argument which content is the delimiter (space by default), 1 argument containing the string and an other argument containing the number $n$.\medskip
+
+The macro \verb|\findword| artfully uses \verbinline|\StrBetween| and \verbinline|\numexpr|:\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\newcommand\findword[3][ ]{%
+ \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}%
+}
+\noexpandarg
+|\findword{a bc d\textbf{e f} gh}{3}|
+
+|\findword[\nil]{1 \nil 2 3 \nil4\nil5}{2}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \newcommand\findword[3][ ]{%
+ \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}%
+ }
+ \noexpandarg
+ |\findword{a bc d\textbf{e f} gh}{3}|
+
+ |\findword[\nil]{1 \nil 2 3 \nil4\nil5}{2}|
+\end{minipage}%
+
+\bigskip\bigskip
+\begin{center}
+$\star$\par
+$\star$\quad$\star$
+\end{center}
+\par\nobreak\bigskip\bigskip
+That's all, I hope you will find this package useful!\par\nobreak
+Please, send me an \href{mailto:unbonpetit@netc.fr}{email} if you find a bug or if you have any idea of improvement\ldots\par\nobreak\medskip
+Christian Tellechea
+\end{document} \ No newline at end of file
diff --git a/macros/generic/xstring/xstring-fr.pdf b/macros/generic/xstring/xstring-fr.pdf
new file mode 100644
index 0000000000..a1f72f8635
--- /dev/null
+++ b/macros/generic/xstring/xstring-fr.pdf
Binary files differ
diff --git a/macros/generic/xstring/xstring-fr.tex b/macros/generic/xstring/xstring-fr.tex
new file mode 100644
index 0000000000..a339416149
--- /dev/null
+++ b/macros/generic/xstring/xstring-fr.tex
@@ -0,0 +1,2037 @@
+\documentclass[a4paper,10pt,french]{article}
+\usepackage{fontspec}
+\usepackage[bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=blue,pdfauthor={Christian Tellechea},pdftitle={xstring},pdfsubject={package pour la manipulation de chaines de tokens},pdfkeywords={xstring,latex,tex,string,chaine},pdfcreator={LaTeX}]{hyperref}
+\usepackage[margin=1.9cm]{geometry}
+\usepackage{libertine}
+\usepackage[scale=0.85]{noto-mono}
+\usepackage[bottom]{footmisc}
+\usepackage{amsmath,amssymb,amsfonts,color,eurosym,xspace,xstring,babel,listings}
+\makeatletter
+\definecolor{@xs@bckgcolor}{rgb}{0.9,1,1}
+\definecolor{@xs@keywordsxstring}{rgb}{0,0,0.9}
+\definecolor{@xs@keywordslatex}{rgb}{1,0,0}
+\definecolor{@xs@arguments}{rgb}{0,0,0}
+\definecolor{@xs@comments}{rgb}{0.5,0.5,0.5}
+\definecolor{violet}{rgb}{0.66,0,0.66}
+\lstset{%
+ language=[AlLaTeX]TeX,%
+ morekeywords={numexpr,detokenize},%
+ float=hbp,%
+ basicstyle=\small\ttfamily,%
+ identifierstyle=\color{@xs@arguments},%
+ keywordstyle=\color{@xs@keywordslatex},%
+ commentstyle=\itshape\color{@xs@comments},%
+ columns=fixed,%
+ tabsize=4,%
+ frame=single,%
+ extendedchars=true,%
+ showspaces=false,%
+ showstringspaces=false,%
+ numbers=left,%
+ numberstyle=\tiny\ttfamily,%
+ breaklines=true,%
+ breakindent=3em,%
+ backgroundcolor=\color{@xs@bckgcolor},%
+ breakautoindent=true,%
+ captionpos=t,%
+ xleftmargin=1em,%
+ xrightmargin=1em,%
+ lineskip=0pt,%
+ numbersep=1em,%
+ classoffset=1,%
+ morekeywords={% les macros et commandes de xstring
+ IfSubStr,IfSubStrBefore,IfSubStrBehind,%
+ IfBeginWith,IfEndWith,%
+ IfInteger,IfDecimal,integerpart,decimalpart,%
+ IfStrEq,IfEq,IfStrEqCase,IfEqCase,%
+ StrBefore,StrBehind,StrCut,StrBetween,%
+ StrSubstitute,StrDel,%
+ StrGobbleLeft,StrGobbleRight,StrRight,StrLeft,StrMid,StrChar,%
+ StrSplit,%
+ StrLen,StrCount,StrPosition,StrCompare,%
+ StrFindGroup,groupID,verbtocs,tokenize,scancs,StrExpand,StrRemoveBraces,%
+ exploregroups,noexploregroups,saveexploremode,restoreexploremode,%
+ comparenormal,comparestrict,savecomparemode,restorecomparemode,%
+ expandarg,noexpandarg,normalexpandarg,fullexpandarg,saveexpandmode,restoreexpandmode,%
+ expandingroups,noexpandingroups,%
+ setverbdelim},%
+ keywordstyle=\color{@xs@keywordsxstring},%
+ classoffset=0}
+\makeatother
+
+\newcommand\guill[1]{\og{}#1\fg{}}
+\newcommand\argu[1]{$\langle$\textit{#1}$\rangle$}
+\newcommand\ARGU[1]{\texttt{\color{black}\{}\argu{#1}\texttt{\color{black}\}}}
+\newcommand\arguC[1]{\texttt{\color{black}[}\argu{#1}\texttt{\color{black}]}}
+\newcommand\arguCC[2]{\texttt{\color{black}[}\argu{#1}\texttt{\color{black},}\argu{#2}\texttt{\color{black}]}}
+\newcommand\texte[1]{\texttt{text}${}_{#1}$}
+\newcommand\etoile{$\langle$\texttt{[*]}$\rangle$}
+\newenvironment{Conditions}[1][1cm]%
+{\begin{list}%
+ {$\vartriangleright$}%
+ {\setlength{\leftmargin}{#1}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{2ptplus3ptminus2pt}
+ }}%
+{\end{list}}
+
+\newcommand\US{unité syntaxique\xspace}
+\newcommand\USs{unités syntaxiques\xspace}
+\newcommand\Xstring{\textsf{xstring}\xspace}
+\newcommand\styleexemple{\small\baselineskip1.03\baselineskip\vskip\baselineskip\relax}
+\newcommand\styleexercice{\footnotesize}
+\newcommand\verbinline{\lstinline[basicstyle=\normalsize\ttfamily]}
+\newcommand\colorise{\color{violet}}
+\def\xstringfrenchdateaux#1/#2/#3\nil{\number#3\relax\ifnum#3=1 \noexpand\ier\fi\space \ifcase #2 \or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or d\'ecembre\fi\space#1}
+\edef\xstringfrenchdate{\expandafter\xstringfrenchdateaux\xstringdate\nil}
+\begin{document}
+\setlength{\parindent}{0pt}
+\begin{titlepage}
+ \null\par\vfill
+ \begin{center}
+ \begin{minipage}{0.75\linewidth}
+ \begin{center}
+ \Huge\bfseries \Xstring\par\vspace{5pt}
+ \small v\xstringversion\par\vspace{25pt}
+ \normalsize Manuel de l'utilisateur
+ \end{center}
+ \end{minipage}
+ \end{center}
+ \vspace{1cm}
+ \begin{center}
+ Christian {\sc Tellechea}\par\small
+ \href{mailto:unbonpetit@netc.fr}{\nolinkurl{unbonpetit@netc.fr}}\par\vspace{5pt}
+ \xstringfrenchdate
+ \end{center}
+ \vfill\hrulefill
+ \begin{center}
+ \begin{minipage}{0.85\linewidth}
+ \noindent
+ \hfill\textbf{\textit{Résumé}}\hfill{}\medskip\par
+ Cette extension, qui requiert Plain $\varepsilon$-\TeX, regroupe un ensemble de macros manipulant des chaînes de tokens (ou lexèmes en français). Les macros peuvent être utilisées de façon basique dans le traitement des chaînes de caractères mais peuvent également être utiles en programmation \TeX{} pour la manipulation des tokens, c'est-à-dire du code \TeX{}. Parmis les fonctionnalités, les principales sont :\smallskip
+
+ \parindent1.5em
+ \begin{itemize}
+ \item[$\triangleright$] des tests :
+ \begin{itemize}
+ \item une chaîne en contient elle une autre au moins $n$ fois ?
+ \item une chaîne commence t-elle ou finit-elle par une autre ? etc.
+ \item une chaîne représente t-elle un entier relatif ? Un nombre décimal ?
+ \item deux chaînes sont-elles égales ?
+ \end{itemize}
+ \item[$\triangleright$] des recherches de chaînes :
+ \begin{itemize}
+ \item recherche de ce qui se trouve avant (ou après) la $n$\ieme{} occurrence d'une sous-chaîne;
+ \item recherche de ce qui se trouve entre les occurrences de 2 sous-chaînes;
+ \item sous-chaîne comprise entre 2 positions;
+ \item recherche d'un groupe entre accolades par son identifiant.
+ \end{itemize}
+ \item[$\triangleright$] le remplacement de toutes ou des $n$ premières occurrences d'une sous-chaîne par une autre sous-chaîne;
+ \item[$\triangleright$] des calculs de nombres :
+ \begin{itemize}
+ \item longueur d'une chaîne;
+ \item position de la la $n$\ieme{} occurrence d'une sous-chaîne;
+ \item comptage du nombre d'occurrences d'une sous-chaîne dans une autre;
+ \item position de la 1\iere{} différence entre 2 chaînes;
+ \item renvoi de l'identifiant du groupe dans lequel une recherche ou une coupure s'est faite.
+ \end{itemize}
+ \end{itemize}
+ \setlength{\parindent}{0pt}
+ \medskip
+ D'autres commandes permettent de gérer les tokens spéciaux normalement interdits dans les chaînes (\verb|#| et \verb|%|), ainsi que d'éventuelles différences entre catcodes de tokens, ce qui devrait permettre de couvrir tous les besoins en matière de programmation.
+ \end{minipage}
+ \end{center}
+ \hrulefill\vfill{}
+\end{titlepage}
+
+\tableofcontents
+
+%
+\section{Présentation}
+\subsection{Description}
+Cette extension\footnote{L'extension ne nécessite pas \LaTeX{} et peut être compilée sous Plain $\varepsilon$-\TeX{}.} regroupe des macros et des tests opérant sur des chaînes de tokens, un peu comme en disposent des langages dit \guill{évolués}. On y trouve les opérations habituelles sur les chaînes, comme par exemple : test si une chaîne en contient une autre, commence ou finit par une autre, test si une chaîne est un nombre entier ou décimal, extractions de sous-chaînes, calculs de position d'une sous-chaîne, calculs du nombre d'occurrences, etc.\medskip
+
+On appelle \guill{chaîne de tokens} une suite de tokens quelconques, sachant qu'aucune supposition n'a été faite quant à leur nature, mis à part que dans les chaînes de tokens, les accolades doivent être équilibrées et que les tokens de catcode 6 et 14 (habituellement \verb|%| et \verb|#|) n'y sont pas admis. Tous les autres tokens, y compris \verbinline|\par|, sont \emph{à priori} permis dans n'importe quel ordre, quel que soit le code qu'ils représentent.\medskip
+
+Les arguments contenant des chaînes de tokens sont lus par \Xstring \emph{\US par \US\footnote{Sauf cas particulier, une \US est un caractère lu dans le code à ces exceptions près : une séquence de contrôle est une \US, un groupe entre accolades est aussi une \US. Voir également page~\pageref{developpementarguments}.}}, ce qui revient à les lire caractère par caractère lorsque ceux-ci contiennent des tokens \guill{normaux}, c'est-à-dire dont les catcodes sont 10, 11 et 12. On peut également utiliser \Xstring à des fins de programmation en utilisant des arguments contenant des séquences de contrôle et des tokens dont les catcodes sont moins inoffensifs. Voir le chapitre sur le mode de lecture et de développement des arguments (page~\pageref{developpementarguments}), la commande \verbinline|\verbtocs| (page~\pageref{verbtocs}), la commande \verbinline|\scancs| (page~\pageref{scancs}).\medskip
+
+Certes d'autres packages manipulant les chaînes de caractères existent (par exemple \href{http://mirror.ctan.org/tex-archive/macros/latex/contrib/substr/}{\nolinkurl{substr}} et \href{http://mirror.ctan.org/tex-archive/macros/latex/contrib/stringstrings/}{\nolinkurl{stringstrings}}), mais outre des différences notables quant aux fonctionnalités, ils ne prennent pas en charge les occurrences des sous-chaînes et me semblent soit trop limités, soit trop difficiles à utiliser pour la programmation.\medskip
+
+Comme les macros manipulent des chaînes de tokens, il peut arriver aux utilisateurs avancés de rencontrer des problèmes de \guill{catcodes\footnote{Codes de catégories, en français.}} conduisant à des comportements inattendus. Ces effets indésirables peuvent être contrôlés. Consulter en particulier le chapitre sur les catcodes des arguments page~\pageref{macrosetoilees}.
+
+\subsection{Motivation}
+J'ai été conduit à écrire ce type de macros car je n'ai jamais vraiment trouvé de d'outils sous \LaTeX{} adaptés à mes besoins concernant le traitement de chaînes. Alors, au fil des mois, et avec l'aide de contributeurs\footnote{Je remercie chaleureusement Manuel alias \guill{\nolinkurl{mpg}} pour son aide précieuse, sa compétence et sa disponibilité.} de \nolinkurl{fr.comp.text.tex}, j'ai écrit quelques macros qui me servaient ponctuellement ou régulièrement. Leur nombre s'étant accru, et celles-ci devenant un peu trop dispersées dans les répertoires de mon ordinateur, je les ai regroupées dans ce package.
+
+Ainsi, le fait de donner corps à un ensemble cohérent de macros force à davantage de rigueur et induit naturellement de nécessaires améliorations, ce qui a pris la majeure partie du temps que j'ai consacré à ce package. Pour harmoniser le tout, mais à contre-cœur, j'ai fini par choisir des noms de macros à consonances anglo-saxonnes.\medskip
+
+Ensuite, et cela a été ma principale motivation puisque j'ai découvert \LaTeX{} récemment\footnote{En novembre 2007, je suis donc un \og noob\fg{} pour longtemps encore !}, l'écriture de \Xstring qui est mon premier package m'a surtout permis de beaucoup progresser en programmation pure, et aborder des méthodes propres à la programmation sous \TeX.
+
+\section{Les macros}
+Pour bien comprendre les actions de chaque macro, envisageons tout d'abord le fonctionnement et la présentation des macros dans leur mode de fonctionnement le plus simple. Pas de problème de catcode ici, ni de tokens spéciaux et encore moins de séquence de contrôle dans les arguments : les arguments contiendront des caractères alphanumériques.\medskip
+
+Dans ce chapitre, la totalité des macros est présentée selon ce plan :\par\nobreak\smallskip
+\parindent3em
+\begin{itemize}
+ \item la syntaxe complète\footnote{L'étoile optionnelle après le nom de la macro, et l'argument optionnel entre crochet venant en dernier seront expliqués plus tard. Voir page~\pageref{macrosetoilees} pour les macros étoilées et page~\pageref{argumentoptionnel} pour l'argument optionnel en dernière position.} ainsi que la valeur d'éventuels arguments optionnels;
+ \item une brève description du fonctionnement;
+ \item le fonctionnement sous certaines conditions particulières. Pour chaque conditions envisagée, le fonctionnement décrit est prioritaire sur celui (ceux) se trouvant au dessous de lui;
+ \item enfin, quelques exemples sont donnés. J'ai essayé de les trouver les plus facilement compréhensibles et les plus représentatifs des situations rencontrées dans une utilisation normale\footnote{Pour une collection plus importante d'exemples, on peut aussi consulter le fichier de test.}. Si un doute est possible quant à la présence d'espaces dans le résultat, celui-ci sera délimité par des \guill{\textbar}, étant entendu qu'une chaîne vide est représentée par \guill{\textbar\textbar}.
+\end{itemize}
+\parindent0pt\smallskip
+
+\textbf{Important} : dans les macros qui suivent, sauf cas spécifié, un \argu{nombre} est un nombre entier, un compteur, ou le résultat d'une opération arithmétique effectuée à l'aide de la primitive \verb|\numexpr|.\smallskip
+
+Dans le reste du texte, les macros de \Xstring sont affichées en {\makeatletter\color{@xs@keywordsxstring}rouge}.
+
+\subsection{Les tests}
+\subsubsection{\ttfamily\textbackslash IfSubStr}
+\verbinline|\IfSubStr|\etoile\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 1 par défaut.\par\nobreak\smallskip
+Teste si \argu{chaine} contient au moins \argu{nombre} fois \argu{chaineA} et exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\medskip
+
+\begin{Conditions}
+ \item Si \argu{nombre}${}\leqslant0$, exécute \argu{faux};
+ \item Si \argu{chaine} ou \argu{chaineA} est vide, exécute \argu{faux}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfSubStr{xstring}{tri}{vrai}{faux}
+\IfSubStr{xstring}{a}{vrai}{faux}
+\IfSubStr{a bc def }{c d}{vrai}{faux}
+\IfSubStr{a bc def }{cd}{vrai}{faux}
+\IfSubStr[2]{1a2a3a}{a}{vrai}{faux}
+\IfSubStr[3]{1a2a3a}{a}{vrai}{faux}
+\IfSubStr[4]{1a2a3a}{a}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfSubStr{xstring}{tri}{vrai}{faux}\par
+ \IfSubStr{xstring}{a}{vrai}{faux}\par
+ \IfSubStr{a bc def }{c d}{vrai}{faux}\par
+ \IfSubStr{a bc def }{cd}{vrai}{faux}\par
+ \IfSubStr[2]{1a2a3a}{a}{vrai}{faux}\par
+ \IfSubStr[3]{1a2a3a}{a}{vrai}{faux}\par
+ \IfSubStr[4]{1a2a3a}{a}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfSubStrBefore}
+\verbinline|\IfSubStrBefore|\etoile\arguCC{nombre1}{nombre2}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Les arguments optionnels \argu{nombre1} et \argu{nombre2} valent 1 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, la macro teste si l'occurrence \no\argu{nombre1} de \argu{chaineA} se trouve à gauche de l'occurrence \no\argu{nombre2} de \argu{chaineB}. Exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\medskip
+
+\begin{Conditions}
+ \item Si l'une des occurrences n'est pas trouvée, exécute \argu{faux};
+ \item Si l'un des arguments \argu{chaine}, \argu{chaineA} ou \argu{chaineB} est vide, exécute \argu{faux};
+ \item Si l'un au moins des deux arguments optionnels est négatif ou nul, exécute \argu{faux}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfSubStrBefore{xstring}{st}{in}{vrai}{faux}
+\IfSubStrBefore{xstring}{ri}{s}{vrai}{faux}
+\IfSubStrBefore{LaTeX}{LaT}{TeX}{vrai}{faux}
+\IfSubStrBefore{a bc def }{ b}{ef}{vrai}{faux}
+\IfSubStrBefore{a bc def }{ab}{ef}{vrai}{faux}
+\IfSubStrBefore[2,1]{b1b2b3}{b}{2}{vrai}{faux}
+\IfSubStrBefore[3,1]{b1b2b3}{b}{2}{vrai}{faux}
+\IfSubStrBefore[2,2]{baobab}{a}{b}{vrai}{faux}
+\IfSubStrBefore[2,3]{baobab}{a}{b}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfSubStrBefore{xstring}{st}{in}{vrai}{faux}\par
+ \IfSubStrBefore{xstring}{ri}{s}{vrai}{faux}\par
+ \IfSubStrBefore{LaTeX}{LaT}{TeX}{vrai}{faux}\par
+ \IfSubStrBefore{a bc def }{ b}{ef}{vrai}{faux}\par
+ \IfSubStrBefore{a bc def }{ab}{ef}{vrai}{faux}\par
+ \IfSubStrBefore[2,1]{b1b2b3}{b}{2}{vrai}{faux}\par
+ \IfSubStrBefore[3,1]{b1b2b3}{b}{2}{vrai}{faux}\par
+ \IfSubStrBefore[2,2]{baobab}{a}{b}{vrai}{faux}\par
+ \IfSubStrBefore[2,3]{baobab}{a}{b}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfSubStrBehind}
+\verbinline|\IfSubStrBehind|\etoile\arguCC{nombre1}{nombre2}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Les arguments optionnels \argu{nombre1} et \argu{nombre2} valent 1 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, la macro teste si l'occurrence \no\argu{nombre1} de \argu{chaineA} se trouve après l'occurrence \\\no\argu{nombre2} de \argu{chaineB}. Exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\medskip
+
+\begin{Conditions}
+ \item Si l'une des occurrences n'est pas trouvée, exécute \argu{faux};
+ \item Si l'un des arguments \argu{chaine}, \argu{chaineA} ou \argu{chaineB} est vide, exécute \argu{faux};
+ \item Si l'un au moins des deux arguments optionnels est négatif ou nul, exécute \argu{faux}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfSubStrBehind{xstring}{ri}{xs}{vrai}{faux}
+\IfSubStrBehind{xstring}{s}{i}{vrai}{faux}
+\IfSubStrBehind{LaTeX}{TeX}{LaT}{vrai}{faux}
+\IfSubStrBehind{a bc def }{ d}{a}{vrai}{faux}
+\IfSubStrBehind{a bc def }{cd}{a b}{vrai}{faux}
+\IfSubStrBehind[2,1]{b1b2b3}{b}{2}{vrai}{faux}
+\IfSubStrBehind[3,1]{b1b2b3}{b}{2}{vrai}{faux}
+\IfSubStrBehind[2,2]{baobab}{b}{a}{vrai}{faux}
+\IfSubStrBehind[2,3]{baobab}{b}{a}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfSubStrBehind{xstring}{ri}{xs}{vrai}{faux}\par
+ \IfSubStrBehind{xstring}{s}{i}{vrai}{faux}\par
+ \IfSubStrBehind{LaTeX}{TeX}{LaT}{vrai}{faux}\par
+ \IfSubStrBehind{a bc def }{ d}{a}{vrai}{faux}\par
+ \IfSubStrBehind{a bc def }{cd}{a b}{vrai}{faux}\par
+ \IfSubStrBehind[2,1]{b1b2b3}{b}{2}{vrai}{faux}\par
+ \IfSubStrBehind[3,1]{b1b2b3}{b}{2}{vrai}{faux}\par
+ \IfSubStrBehind[2,2]{baobab}{b}{a}{vrai}{faux}\par
+ \IfSubStrBehind[2,3]{baobab}{b}{a}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfBeginWith}
+\verbinline|\IfBeginWith|\etoile\ARGU{chaine}\ARGU{chaineA}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Teste si \argu{chaine} commence par \argu{chaineA}, et exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\medskip
+
+\begin{Conditions}
+\item Si \argu{chaine} ou \argu{chaineA} est vide, exécute \argu{faux}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfBeginWith{xstring}{xst}{vrai}{faux}
+\IfBeginWith{LaTeX}{a}{vrai}{faux}
+\IfBeginWith{a bc def }{a b}{vrai}{faux}
+\IfBeginWith{a bc def }{ab}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfBeginWith{xstring}{xst}{vrai}{faux}\par
+ \IfBeginWith{LaTeX}{a}{vrai}{faux}\par
+ \IfBeginWith{a bc def }{a b}{vrai}{faux}\par
+ \IfBeginWith{a bc def }{ab}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfEndWith}
+\verbinline|\IfEndWith|\etoile\ARGU{chaine}\ARGU{chaineA}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Teste si \argu{chaine} se termine par \argu{chaineA}, et exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} ou \argu{chaineA} est vide, exécute \argu{faux}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfEndWith{xstring}{ring}{vrai}{faux}
+\IfEndWith{LaTeX}{a}{vrai}{faux}
+\IfEndWith{a bc def }{ef }{vrai}{faux}
+\IfEndWith{a bc def }{ef}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfEndWith{xstring}{ring}{vrai}{faux}\par
+ \IfEndWith{LaTeX}{a}{vrai}{faux}\par
+ \IfEndWith{a bc def }{ef }{vrai}{faux}\par
+ \IfEndWith{a bc def }{ef}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfInteger}
+\verbinline|\IfInteger|\ARGU{nombre}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Teste si \argu{nombre} est un nombre entier relatif (c'est-à-dire dont la partie décimale est absente ou constituée d'une suite de 0), et exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\par\nobreak\smallskip
+Si le test est faux pour cause de caractères non autorisés, les séquences de contrôle \verb|\@xs@afterinteger| et \verb|\afterinteger| contiennent chacune la partie illégale de \argu{nombre}.\medskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfInteger{13}{vrai}{faux}
+\IfInteger{-219}{vrai}{faux}
+\IfInteger{+9}{vrai}{faux}
+\IfInteger{3.14}{vrai}{faux}
+\IfInteger{8.0}{vrai}{faux}
+\IfInteger{0}{vrai}{faux}
+\IfInteger{49a}{vrai}{faux}
+\IfInteger{+}{vrai}{faux}
+\IfInteger{-}{vrai}{faux}
+\IfInteger{0000}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfInteger{13}{vrai}{faux}\par
+ \IfInteger{-219}{vrai}{faux}\par
+ \IfInteger{+9}{vrai}{faux}\par
+ \IfInteger{3.14}{vrai}{faux}\par
+ \IfInteger{8.0}{vrai}{faux}\par
+ \IfInteger{0}{vrai}{faux}\par
+ \IfInteger{49a}{vrai}{faux}\par
+ \IfInteger{+}{vrai}{faux}\par
+ \IfInteger{-}{vrai}{faux}\par
+ \IfInteger{0000}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfDecimal}
+\label{ifdecimal}
+\verbinline|\IfDecimal|\ARGU{nombre}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Teste si \argu{nombre} est un nombre décimal, et exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\par\nobreak\smallskip
+Les compteurs \verb|\integerpart| et \verb|\decimalpart| contiennent les parties entières et décimales de \argu{nombre}.
+
+Si le test est faux pour cause de caractères non autorisés, les séquences de contrôle \verb|\@xs@afterdecimal| et \verb|\afterdecimal| contiennent chacune la partie illégale de \argu{nombre}, alors que si le test est faux parce que la partie décimale après le séparateur décimal est vide, elles contiennent \guill{X}.\medskip
+
+\begin{Conditions}
+ \item Le séparateur décimal peut être un point ou une virgule;
+ \item Si le \argu{nombre} commence par un séparateur décimal, le test est vrai (lignes 4 et 5) et la partie entière est considérée comme étant 0;
+ \item Si le \argu{nombre} se termine par un séparateur décimal, le test est faux (lignes 9 et 10).
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfDecimal{3.14}{vrai}{faux}
+\IfDecimal{3,14}{vrai}{faux}
+\IfDecimal{-0.5}{vrai}{faux}
+\IfDecimal{.7}{vrai}{faux}
+\IfDecimal{,9}{vrai}{faux}
+\IfDecimal{1..2}{vrai}{faux}
+\IfDecimal{+6}{vrai}{faux}
+\IfDecimal{-15}{vrai}{faux}
+\IfDecimal{1.}{vrai}{faux}
+\IfDecimal{2,}{vrai}{faux}
+\IfDecimal{.}{vrai}{faux}
+\IfDecimal{,}{vrai}{faux}
+\IfDecimal{+}{vrai}{faux}
+\IfDecimal{-}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfDecimal{3.14}{vrai}{faux}\par
+ \IfDecimal{3,14}{vrai}{faux}\par
+ \IfDecimal{-0.5}{vrai}{faux}\par
+ \IfDecimal{.7}{vrai}{faux}\par
+ \IfDecimal{,9}{vrai}{faux}\par
+ \IfDecimal{1..2}{vrai}{faux}\par
+ \IfDecimal{+6}{vrai}{faux}\par
+ \IfDecimal{-15}{vrai}{faux}\par
+ \IfDecimal{1.}{vrai}{faux}\par
+ \IfDecimal{2,}{vrai}{faux}\par
+ \IfDecimal{.}{vrai}{faux}\par
+ \IfDecimal{,}{vrai}{faux}\par
+ \IfDecimal{+}{vrai}{faux}\par
+ \IfDecimal{-}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfStrEq}
+
+\verbinline|\IfStrEq|\etoile\ARGU{chaineA}\ARGU{chaineB}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Teste si les chaînes \argu{chaineA} et \argu{chaineB} sont égales, c'est-à-dire si elles contiennent successivement les mêmes \US dans le même ordre. Exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\smallskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfStrEq{a1b2c3}{a1b2c3}{vrai}{faux}
+\IfStrEq{abcdef}{abcd}{vrai}{faux}
+\IfStrEq{abc}{abcdef}{vrai}{faux}
+\IfStrEq{3,14}{3,14}{vrai}{faux}
+\IfStrEq{12.34}{12.340}{vrai}{faux}
+\IfStrEq{abc}{}{vrai}{faux}
+\IfStrEq{}{abc}{vrai}{faux}
+\IfStrEq{}{}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfStrEq{a1b2c3}{a1b2c3}{vrai}{faux}\par
+ \IfStrEq{abcdef}{abcd}{vrai}{faux}\par
+ \IfStrEq{abc}{abcdef}{vrai}{faux}\par
+ \IfStrEq{3,14}{3,14}{vrai}{faux}\par
+ \IfStrEq{12.34}{12.340}{vrai}{faux}\par
+ \IfStrEq{abc}{}{vrai}{faux}\par
+ \IfStrEq{}{abc}{vrai}{faux}\par
+ \IfStrEq{}{}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfEq}
+\verbinline|\IfEq|\etoile\ARGU{chaineA}\ARGU{chaineB}\ARGU{vrai}\ARGU{faux}
+\smallskip
+
+Teste si les chaînes \argu{chaineA} et \argu{chaineB} sont égales, \emph{sauf} si \argu{chaineA} et \argu{chaineB} contiennent des nombres, auquel cas la macro teste si les nombres sont égaux. Exécute \argu{vrai} dans l'affirmative, et \argu{faux} dans le cas contraire.\smallskip
+
+\begin{Conditions}
+ \item La définition de \emph{nombre} est celle évoquée dans la macro \verbinline|\IfDecimal| (voir page~\pageref{ifdecimal}), et donc :
+ \item Les signes \guill{+} sont facultatifs;
+ \item Le séparateur décimal peut être indifféremment la virgule ou le point.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfEq{a1b2c3}{a1b2c3}{vrai}{faux}
+\IfEq{abcdef}{ab}{vrai}{faux}
+\IfEq{ab}{abcdef}{vrai}{faux}
+\IfEq{12.34}{12,34}{vrai}{faux}
+\IfEq{+12.34}{12.340}{vrai}{faux}
+\IfEq{10}{+10}{vrai}{faux}
+\IfEq{-10}{10}{vrai}{faux}
+\IfEq{+0,5}{,5}{vrai}{faux}
+\IfEq{1.001}{1.01}{vrai}{faux}
+\IfEq{3*4+2}{14}{vrai}{faux}
+\IfEq{\number\numexpr3*4+2}{14}{vrai}{faux}
+\IfEq{0}{-0.0}{vrai}{faux}
+\IfEq{}{}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfEq{a1b2c3}{a1b2c3}{vrai}{faux}\par
+ \IfEq{abcdef}{ab}{vrai}{faux}\par
+ \IfEq{ab}{abcdef}{vrai}{faux}\par
+ \IfEq{12.34}{12,34}{vrai}{faux}\par
+ \IfEq{+12.34}{12.340}{vrai}{faux}\par
+ \IfEq{10}{+10}{vrai}{faux}\par
+ \IfEq{-10}{10}{vrai}{faux}\par
+ \IfEq{+0,5}{,5}{vrai}{faux}\par
+ \IfEq{1.001}{1.01}{vrai}{faux}\par
+ \IfEq{3*4+2}{14}{vrai}{faux}\par
+ \IfEq{\number\numexpr3*4+2}{14}{vrai}{faux}\par
+ \IfEq{0}{-0.0}{vrai}{faux}\par
+ \IfEq{}{}{vrai}{faux}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfStrEqCase}
+\begin{minipage}{\textwidth}
+ \verbinline|\IfStrEqCase|\etoile\ARGU{chaine}\verb|{%|\par
+ \qquad\qquad\ARGU{chaine1}\ARGU{code1}\verb|%|\par
+ \qquad\qquad\ARGU{chaine2}\ARGU{code2}\verb|%|\par
+ \qquad\qquad\verb|etc...|\par
+ \qquad\qquad\ARGU{chaineN}\ARGU{codeN}\verb|}|\arguC{code alternatif}
+\end{minipage}
+\smallskip
+
+Teste successivement si \argu{chaine} est égale à \argu{chaine1}, \argu{chaine2}, etc. La comparaison se fait au sens de \verbinline|\IfStrEq| (voir paragraphes précédents). Si un test est positif, le code correspondant est exécuté et la macro se termine. Si tous les tests sont négatifs, le code optionnel \argu{code alternatif} est exécuté s'il est présent.\smallskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfStrEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}
+|\IfStrEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|
+\IfStrEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[autre]
+\IfStrEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[autre]
+\IfStrEqCase{+3}{{1}{un}{2}{deux}{3}{trois}}[autre]
+\IfStrEqCase{0.5}{{0}{zero}{.5}{demi}{1}{un}}[autre]
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfStrEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}\par
+ |\IfStrEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|\par
+ \IfStrEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[autre]\par
+ \IfStrEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[autre]\par
+ \IfStrEqCase{+3}{{1}{un}{2}{deux}{3}{trois}}[autre]\par
+ \IfStrEqCase{0.5}{{0}{zero}{.5}{demi}{1}{un}}[autre]
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash IfEqCase}
+\begin{minipage}{\textwidth}
+ \verbinline|\IfEqCase|\etoile\ARGU{chaine}\verb|{%|\par
+ \qquad\qquad\ARGU{chaine1}\ARGU{code1}\verb|%|\par
+ \qquad\qquad\ARGU{chaine2}\ARGU{code2}\verb|%|\par
+ \qquad\qquad\verb|etc...|\par
+ \qquad\qquad\ARGU{chaineN}\ARGU{codeN}\verb|}|\arguC{code alternatif}
+\end{minipage}
+\smallskip
+
+Teste successivement si \argu{chaine} est égale à \argu{chaine1}, \argu{chaine2}, etc. La comparaison se fait au sens de \verbinline|\IfEq| (voir paragraphes précédents). Si un test est positif, le code correspondant est exécuté et la macro se termine. Si tous les tests sont négatifs, le code optionnel \argu{code alternatif} est exécuté s'il est présent.\smallskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\IfEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}
+|\IfEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|
+\IfEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[autre]
+\IfEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[autre]
+\IfEqCase{+3}{{1}{un}{2}{deux}{3}{trois}}[autre]
+\IfEqCase{0.5}{{0}{zero}{.5}{demi}{1}{un}}[autre]
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \IfEqCase{b}{{a}{AA}{b}{BB}{c}{CC}}\par
+ |\IfEqCase{abc}{{a}{AA}{b}{BB}{c}{CC}}|\par
+ \IfEqCase{c}{{a}{AA}{b}{BB}{c}{CC}}[autre]\par
+ \IfEqCase{d}{{a}{AA}{b}{BB}{c}{CC}}[autre]\par
+ \IfEqCase{+3}{{1}{un}{2}{deux}{3}{trois}}[autre]\par
+ \IfEqCase{0.5}{{0}{zero}{.5}{demi}{1}{un}}[autre]
+\end{minipage}%
+
+\subsection{Les macros renvoyant une chaîne}
+\subsubsection{\ttfamily\textbackslash StrBefore}
+\verbinline|\StrBefore|\etoile\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\arguC{nom}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 1 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, renvoie ce qui se trouve avant l'occurrence \no\argu{nombre} de \argu{chaineA}.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} ou \argu{chaineA} est vide, une chaîne vide est renvoyée;
+ \item Si \argu{nombre}${}<1$ alors, la macro se comporte comme si \argu{nombre}${}=1$;
+ \item Si l'occurrence n'est pas trouvée, une chaîne vide est renvoyée.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrBefore{xstring}{tri}
+\StrBefore{LaTeX}{e}
+|\StrBefore{LaTeX}{p}|
+|\StrBefore{LaTeX}{L}|
+|\StrBefore{a bc def }{def}|
+|\StrBefore{a bc def }{cd}|
+\StrBefore[1]{1b2b3}{b}
+\StrBefore[2]{1b2b3}{b}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrBefore{xstring}{tri}\par
+ \StrBefore{LaTeX}{e}\par
+ |\StrBefore{LaTeX}{p}|\par
+ |\StrBefore{LaTeX}{L}|\par
+ |\StrBefore{a bc def }{def}|\par
+ |\StrBefore{a bc def }{cd}|\par
+ \StrBefore[1]{1b2b3}{b}\par
+ \StrBefore[2]{1b2b3}{b}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrBehind}
+\verbinline|\StrBehind|\etoile\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\arguC{nom}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 1 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, renvoie ce qui se trouve après l'occurrence \no\argu{nombre} de \argu{chaineA}.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} ou \argu{chaineA} est vide, une chaîne vide est renvoyée;
+ \item Si \argu{nombre}${}<1$ alors, la macro se comporte comme si \argu{nombre}${}=1$;
+ \item Si l'occurrence n'est pas trouvée, une chaîne vide est renvoyée.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrBehind{xstring}{tri}
+\StrBehind{LaTeX}{e}
+|\StrBehind{LaTeX}{p}|
+|\StrBehind{LaTeX}{X}|
+|\StrBehind{a bc def }{bc}|
+|\StrBehind{a bc def }{cd}|
+\StrBehind[1]{1b2b3}{b}
+\StrBehind[2]{1b2b3}{b}
+|\StrBehind[3]{1b2b3}{b}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrBehind{xstring}{tri}\par
+ \StrBehind{LaTeX}{e}\par
+ |\StrBehind{LaTeX}{p}|\par
+ |\StrBehind{LaTeX}{X}|\par
+ |\StrBehind{a bc def }{bc}|\par
+ |\StrBehind{a bc def }{cd}|\par
+ \StrBehind[1]{1b2b3}{b}\par
+ \StrBehind[2]{1b2b3}{b}\par
+ |\StrBehind[3]{1b2b3}{b}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrCut}
+Voici la syntaxe de cette macro :\par\nobreak\smallskip
+\verbinline|\StrCut|\etoile\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\ARGU{macroA}\ARGU{macroB}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 1 par défaut.\par\nobreak\smallskip
+La \argu{chaine} est coupée en deux chaînes à l'occurrence \no\arguC{nombre} de la \ARGU{chaineA}. Ce qui se trouve à gauche de cette occurrence est assigné à la séquence de contrôle \argu{macroA} et ce qui se trouve à droite à \argu{macroB}.
+
+Cette macro renvoie \emph{deux chaînes} et donc \textbf{n'affiche rien}. Par conséquent, elle ne dispose pas de l'argument optionnel en dernière position.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} ou \argu{chaineA} est vide, \argu{macroA} et\argu{macroB} seront vides ;
+ \item Si \argu{nombre}${}<1$ alors, la macro se comporte comme si \argu{nombre}${}=1$;
+ \item Si l'occurrence n'est pas trouvée, \argu{macroA} reçoit la totalité de \argu{chaine} tandis que \argu{macroB} est vide.
+\end{Conditions}
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrCut{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[2]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[3]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[4]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[5]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[6]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut[-4]{abracadabra}{a}\csA\csB |\csA|\csB|\par
+\StrCut{abracadabra}{brac}\csA\csB |\csA|\csB|\par
+\StrCut{abracadabra}{foo}\csA\csB |\csA|\csB|\par
+\StrCut{abracadabra}{}\csA\csB |\csA|\csB|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \def\seprouge{{\color{red}|}}
+ \styleexemple
+ \StrCut{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[2]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[3]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[4]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[5]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[6]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut[-4]{abracadabra}{a}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut{abracadabra}{brac}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut{abracadabra}{foo}\csA\csB |\csA\seprouge\csB|\par
+ \StrCut{abracadabra}{}\csA\csB |\csA\seprouge\csB|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrBetween}
+\verbinline|\StrBetween|\etoile\arguCC{nombre1}{nombre2}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}\arguC{nom}
+\smallskip
+
+Les arguments optionnels \argu{nombre1} et \argu{nombre2} valent 1 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, renvoie ce qui se trouve entre\footnote{Au sens strict, c'est-à-dire \emph{sans} les chaînes frontière} les occurrences \no\argu{nombre1} de \argu{chaineA} et \no \argu{nombre2} de \argu{chaineB}.\medskip
+
+\begin{Conditions}
+ \item Si les occurrences ne sont pas dans l'ordre (\argu{chaineA} \emph{puis} \argu{chaineB}) dans \argu{chaine}, une chaîne vide est renvoyée;
+ \item Si l'une des 2 occurrences n'existe pas dans \argu{chaine}, une chaîne vide est renvoyée;
+ \item Si l'un des arguments optionnels \argu{nombre1} ou \argu{nombre2} est négatif ou nul, une chaîne vide est renvoyée.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrBetween{xstring}{xs}{ng}
+|\StrBetween{xstring}{i}{n}|
+|\StrBetween{xstring}{a}{tring}|
+|\StrBetween{a bc def }{a}{d}|
+|\StrBetween{a bc def }{a }{f}|
+\StrBetween{a1b1a2b2a3b3}{a}{b}
+\StrBetween[2,3]{a1b1a2b2a3b3}{a}{b}
+\StrBetween[1,3]{a1b1a2b2a3b3}{a}{b}
+|\StrBetween[3,1]{a1b1a2b2a3b3}{a}{b}|
+\StrBetween[3,2]{abracadabra}{a}{bra}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrBetween{xstring}{xs}{ng}\par
+ |\StrBetween{xstring}{i}{n}|\par
+ |\StrBetween{xstring}{a}{tring}|\par
+ |\StrBetween{a bc def }{a}{d}|\par
+ |\StrBetween{a bc def }{a }{f}|\par
+ \StrBetween{a1b1a2b2a3b3}{a}{b}\par
+ \StrBetween[2,3]{a1b1a2b2a3b3}{a}{b}\par
+ \StrBetween[1,3]{a1b1a2b2a3b3}{a}{b}\par
+ |\StrBetween[3,1]{a1b1a2b2a3b3}{a}{b}|\par
+ \StrBetween[3,2]{abracadabra}{a}{bra}\par
+\end{minipage}%
+
+
+
+\subsubsection{\ttfamily\textbackslash StrSubstitute}
+\verbinline|\StrSubstitute|\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}\arguC{nom}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 0 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, la macro remplace les \argu{nombre} premières occurrences de \argu{chaineA} par \argu{chaineB}, sauf si \argu{nombre}${}=0$ auquel cas, \emph{toutes} les occurrences sont remplacées.
+
+\begin{Conditions}
+ \item Si \argu{chaine} est vide, une chaîne vide est renvoyée;
+ \item Si \argu{chaineA} est vide ou n'existe pas dans \argu{chaine}, la macro est sans effet;
+ \item Si \argu{nombre} est supérieur au nombre d'occurrences de \argu{chaineA}, alors toutes les occurrences sont remplacées;
+ \item Si \argu{nombre}${}<0$ alors la macro se comporte comme si \argu{nombre}${}=0$;
+ \item Si \argu{chaineB} est vide, alors les occurrences de \argu{chaineA}, si elles existent, sont supprimées.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrSubstitute{xstring}{i}{a}
+\StrSubstitute{abracadabra}{a}{o}
+\StrSubstitute{abracadabra}{br}{TeX}
+\StrSubstitute{LaTeX}{m}{n}
+\StrSubstitute{a bc def }{ }{M}
+\StrSubstitute{a bc def }{ab}{AB}
+\StrSubstitute[1]{a1a2a3}{a}{B}
+\StrSubstitute[2]{a1a2a3}{a}{B}
+\StrSubstitute[3]{a1a2a3}{a}{B}
+\StrSubstitute[4]{a1a2a3}{a}{B}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrSubstitute{xstring}{i}{a}\par
+ \StrSubstitute{abracadabra}{a}{o}\par
+ \StrSubstitute{abracadabra}{br}{TeX}\par
+ \StrSubstitute{LaTeX}{m}{n}\par
+ \StrSubstitute{a bc def }{ }{M}\par
+ \StrSubstitute{a bc def }{ab}{AB}\par
+ \StrSubstitute[1]{a1a2a3}{a}{B}\par
+ \StrSubstitute[2]{a1a2a3}{a}{B}\par
+ \StrSubstitute[3]{a1a2a3}{a}{B}\par
+ \StrSubstitute[4]{a1a2a3}{a}{B}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrDel}
+\verbinline|\StrDel|\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\arguC{nom}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 0 par défaut.\par\nobreak\smallskip
+Supprime les \argu{nombre} premières occurrences de \argu{chaineA} dans \argu{chaine}, sauf si \argu{nombre}${}=0$ auquel cas, \emph{toutes} les occurrences sont supprimées.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} est vide, une chaîne vide est renvoyée;
+ \item Si \argu{chaineA} est vide ou n'existe pas dans \argu{chaine}, la macro est sans effet;
+ \item Si \argu{nombre} est supérieur au nombre d'occurrences de \argu{chaineA}, alors toutes les occurrences sont supprimées;
+ \item Si \argu{nombre}${}<0$ alors la macro se comporte comme si \argu{nombre}${}=0$;
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrDel{abracadabra}{a}
+\StrDel[1]{abracadabra}{a}
+\StrDel[4]{abracadabra}{a}
+\StrDel[9]{abracadabra}{a}
+\StrDel{a bc def }{ }
+|\StrDel{a bc def }{def}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrDel{abracadabra}{a}\par
+ \StrDel[1]{abracadabra}{a}\par
+ \StrDel[4]{abracadabra}{a}\par
+ \StrDel[9]{abracadabra}{a}\par
+ \StrDel{a bc def }{ }\par
+ |\StrDel{a bc def }{def}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrGobbleLeft}
+\verbinline|\StrGobbleLeft|\ARGU{chaine}\ARGU{nombre}\arguC{nom}
+\smallskip
+
+Dans \argu{chaine}, enlève les \argu{nombre} premieres \USs de gauche.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} est vide, renvoie une chaîne vide;
+ \item Si \argu{nombre}${}\leqslant0$, aucune \US n'est supprimée;
+ \item Si \argu{nombre}${}\geqslant{}$\argu{longueurChaine}, toutes les \USs sont supprimées.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrGobbleLeft{xstring}{2}
+|\StrGobbleLeft{xstring}{9}|
+\StrGobbleLeft{LaTeX}{4}
+\StrGobbleLeft{LaTeX}{-2}
+|\StrGobbleLeft{a bc def }{4}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrGobbleLeft{xstring}{2}\par
+ |\StrGobbleLeft{xstring}{9}|\par
+ \StrGobbleLeft{LaTeX}{4}\par
+ \StrGobbleLeft{LaTeX}{-2}\par
+ |\StrGobbleLeft{a bc def }{4}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrLeft}
+\verbinline|\StrLeft|\ARGU{chaine}\ARGU{nombre}\arguC{nom}
+\smallskip
+
+Dans \argu{chaine}, renvoie la sous-chaîne de gauche de longueur \argu{nombre}.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} est vide, renvoie une chaîne vide;
+ \item Si \argu{nombre}${}\leqslant0$, aucune \US n'est retournée;
+ \item Si \argu{nombre}${}\geqslant{}$\argu{longueurChaine}, toutes les \USs sont retournées.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrLeft{xstring}{2}
+\StrLeft{xstring}{9}
+\StrLeft{LaTeX}{4}
+|\StrLeft{LaTeX}{-2}|
+|\StrLeft{a bc def }{5}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrLeft{xstring}{2}\par
+ \StrLeft{xstring}{9}\par
+ \StrLeft{LaTeX}{4}\par
+ |\StrLeft{LaTeX}{-2}|\par
+ |\StrLeft{a bc def }{5}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrGobbleRight}
+\verbinline|\StrGobbleRight|\ARGU{chaine}\ARGU{nombre}\arguC{nom}
+\smallskip
+
+Agit comme \verbinline|\StrGobbleLeft|, mais enlève les \USs à droite de \argu{chaine}.
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrGobbleRight{xstring}{2}
+|\StrGobbleRight{xstring}{9}|
+\StrGobbleRight{LaTeX}{4}
+|\StrGobbleRight{LaTeX}{-2}|
+|\StrGobbleRight{a bc def }{4}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrGobbleRight{xstring}{2}\par
+ |\StrGobbleRight{xstring}{9}|\par
+ \StrGobbleRight{LaTeX}{4}\par
+ |\StrGobbleRight{LaTeX}{-2}|\par
+ |\StrGobbleRight{a bc def }{4}|
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrRight}
+\verbinline|\StrRight|\ARGU{chaine}\ARGU{nombre}\arguC{nom}
+\smallskip
+
+Agit comme \verbinline|\StrLeft|, mais renvoie les \USs à la droite de \argu{chaine}.
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrRight{xstring}{2}
+\StrRight{xstring}{9}
+\StrRight{LaTeX}{4}
+|\StrRight{LaTeX}{-2}|
+\StrRight{a bc def }{5}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrRight{xstring}{2}\par
+ \StrRight{xstring}{9}\par
+ \StrRight{LaTeX}{4}\par
+ |\StrRight{LaTeX}{-2}|\par
+ \StrRight{a bc def }{5}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrChar}
+\verbinline|\StrChar|\ARGU{chaine}\ARGU{nombre}\arguC{nom}
+\smallskip
+
+Renvoie l'\US à la position \argu{nombre} dans la chaîne \argu{chaine}.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} est vide, aucune \US n'est renvoyée;
+ \item Si \argu{nombre}${}\leqslant0$ ou si \argu{nombre}${}>{}$\argu{longueurChaine}, aucune \US n'est renvoyée.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrChar{xstring}{4}
+|\StrChar{xstring}{9}|
+|\StrChar{xstring}{-5}|
+\StrChar{a bc def }{6}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrChar{xstring}{4}\par
+ |\StrChar{xstring}{9}|\par
+ |\StrChar{xstring}{-5}|\par
+ \StrChar{a bc def }{6}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrMid}
+\verbinline|\StrMid|\ARGU{chaine}\ARGU{nombre1}\ARGU{nombre2}\arguC{nom}
+\smallskip
+
+Dans \argu{chaine}, renvoie la sous chaîne se trouvant entre\footnote{Au sens large, c'est-à-dire que les chaînes \guill{frontière} sont renvoyés.} les positions \argu{nombre1} et \argu{nombre2}.\medskip
+
+\begin{Conditions}
+ \item Si \argu{chaine} est vide, une chaîne vide est renvoyée;
+ \item Si \argu{nombre1}${}>{}$\argu{nombre2}, alors rien n'est renvoyé;
+ \item Si \argu{nombre1}${}<1$ et \argu{nombre2}${}<1$ alors rien n'est renvoyé;
+ \item Si \argu{nombre1}${}>{}$\argu{longueurChaine} et \argu{nombre2}${}>{}$\argu{longueurChaine}, alors rien n'est renvoyé;
+ \item Si \argu{nombre1}${}<1$, alors la macro se comporte comme si \argu{nombre1}${}=1$;
+ \item Si \argu{nombre2}${}>{}$\argu{longueurChaine}, alors la macro se comporte comme si \argu{nombre2}${}={}$\argu{longueurChaine}.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrMid{xstring}{2}{5}
+\StrMid{xstring}{-4}{2}
+|\StrMid{xstring}{5}{1}|
+\StrMid{xstring}{6}{15}
+\StrMid{xstring}{3}{3}
+|\StrMid{a bc def }{2}{7}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrMid{xstring}{2}{5}\par
+ \StrMid{xstring}{-4}{2}\par
+ |\StrMid{xstring}{5}{1}|\par
+ \StrMid{xstring}{6}{15}\par
+ \StrMid{xstring}{3}{3}\par
+ |\StrMid{a bc def }{2}{7}|
+\end{minipage}%
+
+\subsection{Les macros renvoyant des nombres}
+\subsubsection{\ttfamily\textbackslash StrLen}
+\verbinline|\StrLen|\ARGU{chaine}\arguC{nom}
+\smallskip
+
+Renvoie la longueur de \argu{chaine}.
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrLen{xstring}
+\StrLen{A}
+\StrLen{a bc def }
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrLen{xstring}\par
+ \StrLen{A}\par
+ \StrLen{a bc def }
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrCount}
+\verbinline|\StrCount|\ARGU{chaine}\ARGU{chaineA}\arguC{nom}
+\smallskip
+
+Compte combien de fois \argu{chaineA} est contenue dans \argu{chaine}.\par\medskip
+
+\begin{Conditions}
+ \item Si l'un au moins des arguments \argu{chaine} ou \argu{chaineA} est vide, la macro renvoie 0.
+\end{Conditions}
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrCount{abracadabra}{a}
+\StrCount{abracadabra}{bra}
+\StrCount{abracadabra}{tic}
+\StrCount{aaaaaa}{aa}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrCount{abracadabra}{a}\par
+ \StrCount{abracadabra}{bra}\par
+ \StrCount{abracadabra}{tic}\par
+ \StrCount{aaaaaa}{aa}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrPosition}
+\verbinline|\StrPosition|\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\arguC{nom}
+\smallskip
+
+L'argument optionnel \argu{nombre} vaut 1 par défaut.\par\nobreak\smallskip
+Dans \argu{chaine}, renvoie la position de l'occurrence \no\argu{nombre} de \argu{chaineA}.\medskip
+
+\begin{Conditions}
+ \item Si \argu{nombre} est supérieur au nombre d'occurrences de \argu{chaineA}, alors la macro renvoie 0.
+ \item Si \argu{chaine} ne contient pas \argu{chaineA}, alors la macro renvoie 0.
+\end{Conditions}
+\medskip
+
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\StrPosition{xstring}{ring}
+\StrPosition[4]{abracadabra}{a}
+\StrPosition[2]{abracadabra}{bra}
+\StrPosition[9]{abracadabra}{a}
+\StrPosition{abracadabra}{z}
+\StrPosition{a bc def }{d}
+\StrPosition[3]{aaaaaa}{aa}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \StrPosition{xstring}{ring}\par
+ \StrPosition[4]{abracadabra}{a}\par
+ \StrPosition[2]{abracadabra}{bra}\par
+ \StrPosition[9]{abracadabra}{a}\par
+ \StrPosition{abracadabra}{z}\par
+ \StrPosition{a bc def }{d}\par
+ \StrPosition[3]{aaaaaa}{aa}
+\end{minipage}%
+
+\subsubsection{\ttfamily\textbackslash StrCompare}
+\verbinline|\StrCompare|\etoile\ARGU{chaineA}\ARGU{chaineB}\arguC{nom}
+\smallskip
+
+Cette macro peut fonctionner avec 2 tolérances, la tolérance \guill{normale} qui est sélectionnée par défaut et la tolérance \guill{stricte}.\medskip
+
+\begin{itemize}
+ \item La tolérance normale, activée par la commande \verbinline|\comparenormal|.\par
+ La macro compare successivement les \US de gauche à droite des chaînes \argu{chaineA} et \argu{chaineB} jusqu'à ce qu'une différence apparaisse ou que la fin de la plus courte chaîne soit atteinte. Si aucune différence n'est trouvée, la macro renvoie 0. Sinon, la position de la 1\iere{} différence est renvoyée.
+ \item La tolérance stricte, activée par la commande \verbinline|\comparestrict|.\par
+ La macro compare les 2 chaînes. Si elles sont égales, elle renvoie 0 sinon la position de la 1\iere{} différence est renvoyée.
+\end{itemize}
+\smallskip
+
+L'ordre des 2 chaînes n'a aucune influence sur le comportement de la macro.
+
+\medskip On peut également mémoriser le mode de comparaison en cours avec \verbinline|\savecomparemode|, le modifier par la suite et revenir à la situation lors de la sauvegarde avec \verbinline|\restorecomparemode|.\medskip
+
+Exemples en tolérance normale :\par\nobreak
+\begin{minipage}[t]{0.65\linewidth}
+\comparenormal
+\begin{lstlisting}
+\StrCompare{abcd}{abcd}
+\StrCompare{abcd}{abc}
+\StrCompare{abc}{abcd}
+\StrCompare{a b c}{abc}
+\StrCompare{aaa}{baaa}
+\StrCompare{abc}{xyz}
+\StrCompare{123456}{123457}
+\StrCompare{abc}{}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \comparenormal
+ \StrCompare{abcd}{abcd}\par
+ \StrCompare{abcd}{abc}\par
+ \StrCompare{abc}{abcd}\par
+ \StrCompare{a b c}{abc}\par
+ \StrCompare{aaa}{baaa}\par
+ \StrCompare{abc}{xyz}\par
+ \StrCompare{123456}{123457}\par
+ \StrCompare{abc}{}
+\end{minipage}%
+\medskip
+
+Exemples en tolérance stricte :\par\nobreak
+\begin{minipage}[t]{0.65\linewidth}
+\comparestrict
+\begin{lstlisting}
+\StrCompare{abcd}{abcd}
+\StrCompare{abcd}{abc}
+\StrCompare{abc}{abcd}
+\StrCompare{a b c}{abc}
+\StrCompare{aaa}{baaa}
+\StrCompare{abc}{xyz}
+\StrCompare{123456}{123457}
+\StrCompare{abc}{}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+ \comparestrict
+ \StrCompare{abcd}{abcd}\par
+ \StrCompare{abcd}{abc}\par
+ \StrCompare{abc}{abcd}\par
+ \StrCompare{a b c}{abc}\par
+ \StrCompare{aaa}{baaa}\par
+ \StrCompare{abc}{xyz}\par
+ \StrCompare{123456}{123457}\par
+ \StrCompare{abc}{}
+\end{minipage}%
+
+\section{Modes de fonctionnement}
+\subsection{Développement des arguments}
+\label{devarg}
+\lstset{basicstyle=\footnotesize\ttfamily}
+\subsubsection{Les macros {\ttfamily \textbackslash fullexpandarg}, {\ttfamily \textbackslash expandarg} et {\ttfamily \textbackslash noexpandarg}}
+La macro \verbinline|\fullexpandarg| est appelée par défaut, ce qui fait que certains arguments (en \textcolor{violet}{violet} dans la liste ci dessous) transmis aux macros sont développés le plus possible (pour cela, un \verb|\edef| est utilisé). Ce mode de développement maximal permet dans la plupart des cas d'éviter d'utiliser des chaînes d'\verb|\expandafter|. Le code en est souvent allégé.
+
+On peut interdire le développement de ces arguments (et ainsi revenir au comportement normal de \TeX) en invoquant \verbinline|\noexpandarg| ou \verbinline|\normalexpandarg| qui sont synonymes.\medskip
+
+Il existe enfin un autre mode de développement de ces arguments que l'on appelle avec \verbinline|\expandarg|. Dans ce cas, le \textbf{premier token} de ces arguments est développé \emph{une fois} avant que la macro ne soit appelée. Si l'argument contient plus d'un token, les tokens qui suivent le premier ne sont pas développés (on peut contourner cette volontaire limitation et utiliser la macro \verbinline|\StrExpand|, voir page~\pageref{scancs}).\medskip
+
+Les commandes \verbinline|\fullexpandarg|, \verbinline|\noexpandarg|, \verbinline|\normalexpandarg| et \verbinline|\expandarg| peuvent être appelées à tout moment dans le code et fonctionnent comme des bascules. On peut rendre leur portée locale dans un groupe.\medskip
+
+On peut également mémoriser le mode de développement en cours avec \verbinline|\saveexpandmode|, le modifier par la suite et revenir à la situation lors de la sauvegarde avec \verbinline|\restoreexpandmode|.\medskip
+
+Dans la liste ci-dessous, on peut voir en \textcolor{violet}{violet} quels arguments sont soumis à l'éventuel développement pour chaque macro vue dans le chapitre précedent :
+
+\nobreak\smallskip
+\parindent3em
+\begin{itemize}
+ \item\verb|\IfSubStr|\etoile{\colorise\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfSubStrBefore|\etoile{\colorise\arguCC{nombre1}{nombre2}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfSubStrBehind|\etoile{\colorise\arguCC{nombre1}{nombre2}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfBeginWith|\etoile{\colorise\ARGU{chaine}\ARGU{chaineA}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfEndWith|\etoile{\colorise\ARGU{chaine}\ARGU{chaineA}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfInteger|{\colorise\ARGU{nombre}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfDecimal|{\colorise\ARGU{nombre}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfStrEq|\etoile{\colorise\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfEq|\etoile{\colorise\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfStrEqCase|\etoile{\colorise\ARGU{chaine}\texttt{\color{black}\{}\colorise\ARGU{chaine1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfStrEqCase}\etoile\ARGU{chaine}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{chaine2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{chaine $n$}}\ARGU{code $n$}\verb|}|\arguC{code alternatif}
+ \item\verb|\IfEqCase|\etoile{\colorise\ARGU{chaine}\texttt{\color{black}\{}\colorise\ARGU{chaine1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfEqCase}\etoile\ARGU{chaine}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{chaine2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{chaine $n$}}\ARGU{code $n$}\verb|}|\arguC{code alternatif}
+ \item\verb|\StrBefore|\etoile{\colorise\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrBehind|\etoile{\colorise\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrBetween|\etoile{\colorise\arguCC{nombre1}{nombre2}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\arguC{nom}
+ \item\verb|\StrSubstitute|{\colorise\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\arguC{nom}
+ \item\verb|\StrDel|{\colorise\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrSplit|{\colorise\ARGU{chaine}\ARGU{nombre}}\ARGU{chaineA}\ARGU{chaineB}\qquad{\small(voir page~\pageref{StrSplit} pour la macro \verb|StrSplit|)}
+ \item\verb|\StrGobbleLeft|{\colorise\ARGU{chaine}\ARGU{nombre}}\arguC{nom}
+ \item\verb|\StrLeft|{\colorise\ARGU{chaine}\ARGU{nombre}}\arguC{nom}
+ \item\verb|\StrGobbleRight|{\colorise\ARGU{chaine}\ARGU{nombre}}\arguC{nom}
+ \item\verb|\StrRight|{\colorise\ARGU{chaine}\ARGU{nombre}}\arguC{nom}
+ \item\verb|\StrChar|{\colorise\ARGU{chaine}\ARGU{nombre}}\arguC{nom}
+ \item\verb|\StrMid|{\colorise\ARGU{chaine}\ARGU{nombre1}\ARGU{nombre2}}\arguC{nom}
+ \item\verb|\StrLen|{\colorise\ARGU{chaine}}\arguC{nom}
+ \item\verb|\StrCount|{\colorise\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrPosition|{\colorise\arguC{nombre}\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrCompare|{\colorise\ARGU{chaineA}\ARGU{chaineB}}\arguC{nom}
+\end{itemize}
+\parindent0pt
+
+\subsubsection{Caractères et lexèmes autorisés dans les arguments}
+Tout d'abord, quelque soit le mode de développement choisi, \textbf{les tokens de catcode 6 et 14 (habituellement {\ttfamily\#} et {\ttfamily\%}) sont interdits dans tous les arguments}\footnote{Le token {\ttfamily\#} sera peut-être autorisé dans une future version !}.\bigskip
+
+Lorsque le mode \verbinline|\fullexpandarg| est activé, les arguments sont évalués à l'aide de la primitive \verb|\edef| avant d'être transmis aux macros. Par conséquent, sont autorisés dans les arguments :
+
+\nobreak\smallskip\parindent3em
+\begin{itemize}
+ \item les lettres, majuscules, minuscules, accentuées\footnote{Pour pouvoir utiliser des lettres accentuées de façon fiable, il est nécessaire de charger le packages \texttt{\string\fontenc} avec l'option \texttt{[T1]}, ainsi que \texttt{\string\inputenc} avec l'option correspondant au codage du fichier tex.} ou non, les chiffres, les espaces\footnote{Selon la règle \TeX{}iènne, plusieurs espaces consécutifs n'en font qu'un.} ainsi que tout autre token de catcode 10, 11 ou 12 (signes de ponctuation, signes opératoires mathématiques, parenthèses, crochets, etc);
+ \item les tokens de catcode 1 à 4, qui sont habituellement : \og\verb|{|\fg\quad\og\verb|}|\fg\footnote{Attention : les accolades \textbf{doivent} être équilibrées dans les arguments !}\quad\og\verb|$|\fg\quad\og\verb|&|\fg
+ \item les tokens de catcode 7 et 8, qui sont habituellement : \og\verb|^|\fg\quad\og\verb|_|\fg
+ \item toute séquence de contrôle si elle est purement développable\footnote{C'est-à-dire qu'elle peut être mise à l'intérieur d'un {\ttfamily\string\edef }.} et dont le développement maximal donne des caractères autorisés;
+ \item un token de catcode 13 (caractère actif) s'il est purement développable.
+\end{itemize}
+\parindent0pt\smallskip
+
+Lorsque les arguments ne sont plus développés (utilisation de \verbinline|\noexpandarg|), on peut aussi inclure dans les arguments n'importe quel token, quelque soit le code qui en résulte comme par exemple toute séquence de contrôle, même non définie ou tout token de catcode 13. On peut également inclure dans les arguments des tokens de test comme \verbinline|\if| ou \verbinline|\ifx| ou tout autre token de test, même sans leur \verbinline|\fi| correspondant; ou bien un \verbinline|\csname| sans le \verbinline|\endcsname| correspondant.
+
+Dans l'exemple suivant, l'argument contient un \verbinline|\ifx| \emph{sans} le \verbinline|\fi|, et l'on isole ce qui est entre le \verbinline|\ifx| et le \verbinline|\else| :\par\medskip\nobreak
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\StrBetween{\ifx ab faux \else vrai}{\ifx}{\else}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \StrBetween{\ifx ab faux \else vrai}{\ifx}{\else}
+\end{minipage}
+\medskip
+
+Lorsqu'on utilise \verbinline|\expandarg|, la précaution concerne le premier token qui est développé une fois et doit donc être défini. Les autres tokens sont laissés tel quels comme avec \verbinline|\noexpandarg|.
+
+\subsection{Développement des macros, argument optionnel}
+\label{argumentoptionnel}
+Les macros de ce package ne sont pas purement développables et ne peuvent donc pas être mises dans l'argument d'un \verb|\edef|. L'imbrication des macros de ce package n'est pas permise non plus.\medskip
+
+C'est pour cela que les macros renvoyant un résultat, c'est-à-dire toutes sauf les tests, sont dotées d'un argument optionnel venant en dernière position. Cet argument prend la forme de \arguC{nom}, où \argu{nom} est une séquence de contrôle qui recevra (l'assignation se fait avec un \verb|\edef|) le résultat de la macro, ce qui fait que \argu{nom} est purement développable et peut donc se trouver dans l'argument d'un \verb|\edef|. Dans le cas de la présence d'un argument optionnel en dernière position, aucun affichage n'aura lieu. Cela permet donc contourner les limitations évoquées dans les exemples ci dessus.\medskip
+
+Ainsi cette construction non permise censée assigner à \verb|\Resultat| les 4 caractères de gauche de \verb|xstring| :\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\edef\Resultat{\StrLeft{xstring}{4}}|\par\nobreak
+\qquad est équivalente à :\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrLeft{xstring}{4}[\Resultat]|\medskip
+
+Et cette imbrication non permise censée enlever le premier et le dernier caractère de \verb|xstring| :\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrGobbleLeft{\StrGobbleRight{xstring}{1}}{1}|\par\nobreak
+\qquad se programme ainsi :\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrGobbleRight{xstring}{1}[\machaine]|\par\nobreak
+\hspace{0.2\linewidth}\verbinline|\StrGobbleLeft{\machaine}{1}|\par
+
+\subsection{Traitement des arguments}
+\label{developpementarguments}
+\subsubsection{Traitement à l'\US prés}
+Les macros de \Xstring traitent les arguments \US par \US. Dans le code \TeX{}, une \US\footnote{Pour les utilisateurs familiers avec la programmation \LaTeX, une \US est ce qui est supprimé par la macro \texttt{\string\@gobble} dont le code, d'une grande simplicité, est : {\ttfamily\string\def\string\@gobble\string#1\string{\string}}} est soit :\par\nobreak\smallskip\parindent3em
+\begin{itemize}
+ \item une séquence de contrôle;
+ \item un groupe, c'est à dire une suite de tokens située entre deux accolades équilibrées;
+ \item un caractère ne faisant pas partie des 2 espèces ci dessus.
+\end{itemize}
+\medskip\parindent0pt
+
+Voyons ce qu'est la notion d'\US sur un exemple. Prenons cet argument : \og\verb|ab\textbf{xyz}cd|\fg
+
+\nobreak Il contient 6 \USs qui sont : \og\verb|a|\fg, \og\verb|b|\fg, \og\verb|\textbf|\fg, \og\verb|{xyz}|\fg, \og\verb|c|\fg{} et \og\verb|d|\fg.
+
+\nobreak\medskip Que va t-il arriver si l'on se place sous \verbinline|\noexpandarg| et que l'on demande à \Xstring de trouver la longueur de cet argument et d'en trouver le 4\ieme{} \guill{caractère} ?\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\StrLen{ab\textbf{xyz}cd}\par
+\StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+\meaning\mychar
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \StrLen{ab\textbf{xyz}cd}\par
+ \StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+ \meaning\mychar
+\end{minipage}%
+\fullexpandarg
+\medskip
+
+Il est nécessaire d'utiliser \verb|\meaning| pour bien visualiser le véritable contenu de \verb|\mychar| et non pas de simplement d'appeler cette séquence de contrôle, ce qui fait perdre des informations ---~les accolades ici. On voit qu'on n'obtient pas vraiment un \guill{caractère}, mais cela était prévisible : il s'agit d'une \US.
+
+\subsubsection{Exploration des groupes}
+Par défaut, la commande \verbinline|\noexploregroups| est appelée et donc dans l'argument à examiner qui contient la chaîne de tokens, \Xstring considère les groupes entre accolades comme \USs fermées dans lesquelles \Xstring ne regarde pas.
+
+Pour certains besoins spécifiques, il peut être nécessaire de modifier le mode de lecture des arguments et d'explorer l'intérieur des groupes entre accolades. Pour cela on peut invoquer \verbinline|\exploregroups|.\medskip
+
+Que va donner ce nouveau mode d'exploration sur l'exemple précédent ? \Xstring ne va plus compter le groupe comme une seule \US mais va compter les \USs se trouvant à l'intérieur, et ainsi de suite s'il y avait plusieurs niveaux d'imbrication de groupes:
+
+\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\exploregroups
+\StrLen{ab\textbf{xyz}cd}\par
+\StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+\meaning\mychar
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \exploregroups
+ \StrLen{ab\textbf{xyz}cd}\par
+ \StrChar{ab\textbf{xyz}cd}{4}[\mychar]
+ \meaning\mychar
+\end{minipage}%
+\fullexpandarg\noexploregroups
+\medskip
+
+L'exploration des groupes peut se réveler utile pour le comptage, le calcul de position ou les tests, mais comporte une limitation lorsque l'on appelle des macros renvoyant des chaînes : lorsqu'un argument est coupé à l'intérieur d'un groupe, alors \textbf{le résultat ne tient pas compte de ce qui se trouve à l'extérieur de ce groupe}. Il faut donc utiliser ce mode en connaissance de cause lorsque l'on utilise les macros renvoyant des chaînes.
+
+Voyons ce que cela signifie sur un exemple : mettons que l'on veuille renvoyer ce qui se trouve à droite de la 2\ieme{} occurrence de \verb|\a| dans l'argument \verb|\a1{\b1\a2}\a3|. Comme l'on explore les groupes, cette occurrence se trouve à l'intérieur du groupe \verb|{\b1\a2}|. Le résultat renvoyé sera donc : \verb|\b1|. Vérifions-le :
+
+
+
+L'exploration des groupes\footnote{On peut consulter le fichier de test de \Xstring qui comporte de nombreux exemples et met en évidence les différences selon le mode d'exploration des groupes.} peut ainsi changer le comportement de la plupart des macros de \Xstring, à l'exception de \verbinline|\IfInteger|, \verbinline|\IfDecimal|, \verbinline|\IfStrEq|, \verbinline|\IfEq| et \verbinline|\StrCompare| qui sont insensibles au mode d'exploration en cours.
+
+De plus, pour des raison d'équilibrage d'accolades, 2 macros n'opèrent qu'en mode \verbinline|\noexploregroups|, quelque soit le mode d'exploration en cours : \verbinline|\StrBetween| et \verbinline|\StrMid|.\medskip
+
+On peut mémoriser le mode de d'exploration en cours avec \verbinline|\saveexploremode|, le modifier par la suite et revenir à la situation lors de la sauvegarde avec \verbinline|\restoreexploremode|.
+
+\subsection{Catcodes et macros étoilées}
+\label{macrosetoilees}
+Les macros de \Xstring tiennent compte des catcodes des tokens constituant les arguments. Il faut donc garder à l'esprit, particulièrement lors des tests, que les tokens \emph{et leurs catcodes} sont examinés.\medskip
+
+Par exemple, ces 2 arguments :\par\nobreak\smallskip
+\hfil\verb|{\string a\string b}|\qquad et\qquad\verb|{ab}|\hfil{}\par\smallskip
+ne se développent pas en 2 arguments égaux aux yeux de \Xstring. Dans le premier cas, à cause de l'emploi de la primitive \verb|\string|, les caractères \og\verb|ab|\fg{} ont un catcode de 12 alors que dans l'autre cas, ils ont leurs catcodes naturels de 11. Il convient donc d'être conscient de ces subtilités lorsque l'on emploie des primitives dont les résultats sont des chaînes de caractères ayant des catcodes de 12 et 10. Ces primitives sont par exemple : \verb|\string|, \verb|\detokenize|, \verb|\meaning|, \verb|\jobname|, \verb|\fontname|, \verb|\romannumeral|, etc.\medskip
+
+Pour demander aux macros de ne pas tenir compte des catcodes, on peut utiliser les macros étoilées. Après l'éventuel développement des arguments en accord avec le mode de développement, celles-ci convertissent (à l'aide d'un \verb|\detokenize|) leur arguments en chaînes de caractères dont les catcodes sont 12 et 10 pour l'espace, avant que la macro non étoilée travaille sur ces arguments ainsi modifiés. Il faut noter que les arguments optionnels ne sont pas concernés par ces modifications et gardent leur catcode.\smallskip
+
+Voici un exemple :\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\IfStrEq{\string a\string b}{ab}{vrai}{faux}\par
+\IfStrEq*{\string a\string b}{ab}{vrai}{faux}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \IfStrEq{\string a\string b}{ab}{vrai}{faux}\par
+ \IfStrEq*{\string a\string b}{ab}{vrai}{faux}
+\end{minipage}%
+\smallskip
+
+Les chaînes n'étant pas égales à cause des catcodes, le test est bien \emph{négatif} dans la version non étoilée.\bigskip
+
+\textbf{Attention} : utiliser une macro étoilée a des conséquenses ! Les arguments sont \guill{détokénisés}, il n'y a donc plus de séquence de contrôle, plus de goupes, ni aucun caractère de catcode spécial puisque tout est converti en caractères \guill{inoffensifs} ayant le même catcode.\medskip
+
+Ainsi, pour les macros renvoyant une chaîne, si on emploie les versions étoilées, le résultat sera une chaîne de caractères dont les catcodes sont 12, et 10 pour l'espace.
+
+Et donc, après un \og\verbinline|\StrBefore*{a \b c d}{c}[\montexte]|\fg{}, la séquence de contrôle \verb|\montexte| se développera en \og{}\verb|a|${}_{12}$\verb*| |${}_{10}$\verb|\|${}_{12}$\verb|b|${}_{12}$\verb*| |${}_{10}$\fg{}.\medskip
+
+Les macros détokenisant leur arguments par l'utilisation de l'étoile sont présentées dans la liste ci-dessous. Pour chacune d'entre elles, on peut voir en \textcolor{violet}{violet} quels arguments seront détokenisé lorsque l'étoile sera employée :
+
+\nobreak\smallskip\parindent3em
+\begin{itemize}
+ \item\verb|\IfSubStr|\etoile\arguC{nombre}{\colorise\ARGU{chaine}\ARGU{chaineA}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfSubStrBefore|\etoile\arguCC{nombre1}{nombre2}{\colorise\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfSubStrBehind|\etoile\arguCC{nombre1}{nombre2}{\colorise\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfBeginWith|\etoile{\colorise\ARGU{chaine}\ARGU{chaineA}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfEndWith|\etoile{\colorise\ARGU{chaine}\ARGU{chaineA}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfStrEq|\etoile{\colorise\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfEq|\etoile{\colorise\ARGU{chaineA}\ARGU{chaineB}}\ARGU{vrai}\ARGU{faux}
+ \item\verb|\IfStrEqCase|\etoile{\colorise\ARGU{chaine}\texttt{\color{black}\{}\colorise\ARGU{chaine1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfStrEqCase}\etoile\ARGU{chaine}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{chaine2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{chaine $n$}}\ARGU{code $n$}\verb|}|\arguC{code alternatif}
+ \item\verb|\IfEqCase|\etoile{\colorise\ARGU{chaine}\texttt{\color{black}\{}\colorise\ARGU{chaine1}}\ARGU{code1}\par
+ \setbox0=\hbox{{\ttfamily\string\IfEqCase}\etoile\ARGU{chaine}{\ttfamily\{}}
+ \hskip\wd0{\colorise\ARGU{chaine2}}\ARGU{code2}\par
+ \hskip\wd0\ \ldots\par
+ \hskip\wd0{\colorise\ARGU{chaine $n$}}\ARGU{code $n$}\verb|}|\arguC{code alternatif}
+ \item\verb|\StrBefore|\etoile\arguC{nombre}{\colorise\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrBehind|\etoile\arguC{nombre}{\colorise\ARGU{chaine}\ARGU{chaineA}}\arguC{nom}
+ \item\verb|\StrBetween|\etoile\arguCC{nombre1}{nombre2}{\colorise\ARGU{chaine}\ARGU{chaineA}\ARGU{chaineB}}\arguC{nom}
+ \item\verb|\StrCompare|\etoile{\colorise\ARGU{chaineA}\ARGU{chaineB}}\arguC{nom}
+\end{itemize}
+\parindent0pt
+
+\section{Macros avancées pour la programmation}
+Bien que \Xstring ait la possibilité de lire et traiter des arguments contenant du code \TeX{} ou \LaTeX{} ce qui devrait couvrir la plupart des besoins en programmation, il peut arriver pour des besoins très spécifiques que les macros décritesz précédemment ne suffisent pas. Ce chapitre présente d'autres macros qui permettent d'aller plus loin ou de contourner certaines limitations.
+\subsection{Recherche d'un groupe, les macros {\ttfamily\textbackslash StrFindGroup} et {\ttfamily\textbackslash groupID}}
+Lorsque le mode \verbinline=\exploregroups= est actif, la macro \verbinline=\StrFindGroup= permet de trouver un groupe entre accolades explicites en spécifiant son identifiant :
+
+\nobreak\smallskip
+\verbinline|\StrFindGroup|\ARGU{argument}\ARGU{identifiant}\arguC{nom}\medskip
+
+Lorsque le groupe caractérisé par l'identifiant n'existe pas, une chaîne vide sera assignée à la séquence de contrôle \argu{nom}. Si le groupe existe, ce groupe \emph{avec ses accolades} sera assigné à \argu{nom}.\smallskip
+
+Cet identifiant est une suite d'entiers séparés par des virgules caractérisant le groupe cherché dans l'argument. Le premier entier est le $n$\ieme{} groupe (d'imbrication 1) dans lequel est le groupe cherché. Puis, en se plaçant dans ce groupe, le 2\ieme{} entier est le $n$\ieme{} groupe dans lequel est le groupe cherché. Et ainsi de suite jusqu'à ce que l'imbrication du groupe soit atteinte.\bigskip
+
+Prenons par exemple l'argument suivant où l'on a 3 niveaux d'imbrication de groupes. Pour plus de clarté, les accolades délimitant les groupes sont colorées en rouge pour l'imbrication de niveau 1, en bleu pour le niveau 2 et en vert pour le niveau 3. Les groupes dans chaque imbrication sont ensuite numérotés selon la règle décrite ci-dessus :
+\begingroup
+ \def\AccO#1{\text{\color{#1}\ttfamily\{}}
+ \def\AccF#1{\text{\color{#1}\ttfamily\}}}
+ \def\texte#1{\text{\texttt{\color{black}#1}}}
+ \def\decalbrace{\vphantom{\underbrace{A}_A}}
+ \[\texte{a}{\color{red}\underbrace{\AccO{red}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{bc}\AccF{blue}}_{\color{blue}1}}\texte{d}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{efg}\AccF{blue}}_{\color{blue}2}}\AccF{red}}_{\color{red}1}}\texte{h}{\color{red}\underbrace{\AccO{red}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{ij}\AccF{blue}}_{\color{blue}1}}{\color{blue}\underbrace{\decalbrace\AccO{blue}\texte{k}\AccF{blue}}_{\color{blue}2}}{\color{blue}\underbrace{\AccO{blue}\texte{l}{\color{green}\underbrace{\AccO{green}\texte{m}\AccF{green}}_{\color{green}1}}{\color{green}\underbrace{\AccO{green}\texte{no}\AccF{green}}_{\color{green}2}}\AccF{blue}}_{\color{blue}3}}\texte{p}\AccF{red}}_{\color{red}2}}\]
+\endgroup
+\smallskip
+Dans cet exemple :
+
+\nobreak\parindent3em
+\begin{itemize}
+ \item le groupe \verb={{bc}d{efg}}= a donc pour identifiant \texttt{\color{red}1};
+ \item le groupe \verb={ij}= a pour identifiant \texttt{{\color{red}2},\color{blue}1};
+ \item le groupe \verb={no}= a pour identifiant \texttt{{\color{red}2},{\color{blue}3},\color{green}2};
+ \item l'argument dans sa totalité \og\verb=a{{bc}d{efg}}h{{ij}{k}{l{m}{no}}p}=\fg{} a pour identifiant \verb=0=, seul cas où l'entier 0 est contenu dans l'identifiant d'un groupe.
+\end{itemize}
+\parindent0pt
+\medskip
+Voici l'exemple complet :\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\exploregroups
+\expandarg
+\def\chaine{a{{bc}d{efg}}h{{ij}{k}{l{m}{no}}p}}
+\StrFindGroup{\chaine}{1}[\mongroupe]
+\meaning\mongroupe\par
+\StrFindGroup{\chaine}{2,1}[\mongroupe]
+\meaning\mongroupe\par
+\StrFindGroup{\chaine}{2,3,2}[\mongroupe]
+\meaning\mongroupe\par
+\StrFindGroup{\chaine}{2,5}[\mongroupe]
+\meaning\mongroupe\par
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ \expandarg
+ \def\chaine{a{{bc}d{efg}}h{{ij}{k}{l{m}{no}}p}}
+ \StrFindGroup{\chaine}{1}[\mongroupe]
+ \meaning\mongroupe\par
+ \StrFindGroup{\chaine}{2,1}[\mongroupe]
+ \meaning\mongroupe\par
+ \StrFindGroup{\chaine}{2,3,2}[\mongroupe]
+ \meaning\mongroupe\par
+ \StrFindGroup{\chaine}{2,5}[\mongroupe]
+ \meaning\mongroupe\par
+\end{minipage}%
+\bigskip
+
+Le processus inverse existe, et plusieurs macros de \Xstring donnent aussi comme information l'identifiant du groupe dans lequel elles ont fait une coupure ou trouvé une recherche. Ces macros sont : \verbinline|\IfSubStr|, \verbinline|\StrBefore|, \verbinline|\StrBehind|, \verbinline|\StrSplit|, \verbinline|\StrLeft|, \verbinline|\StrGobbleLeft|, \verbinline|\StrRight|, \verbinline|\StrGobbleRight|, \verbinline|\StrChar|, \verbinline|\StrPosition|.\medskip
+
+Après l'appel à ces macros, la commande \verbinline|\groupID| se développe en l'identifiant du groupe dans lequel la coupure s'est faite ou la recherche d'un argument a abouti. Lorsque la coupure ne peut avoir lieu ou que la recherche n'a pas abouti, \verbinline|\groupID| est vide. Évidemment, l'utilisation de \verbinline|\groupID| n'a de sens que lorsque le mode \verbinline|\exploregroups| est actif, et quand les macros ne sont pas étoilées.\smallskip
+
+Voici quelques exemples avec la macro \verbinline|\StrChar| :\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\exploregroups
+char 1 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{1}\qquad
+\string\groupID = \groupID\par
+char 4 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{4}\qquad
+\string\groupID = \groupID\par
+char 6 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{6}\qquad
+\string\groupID = \groupID\par
+char 20 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{20}\qquad
+\string\groupID = \groupID
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ char 1 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{1}\qquad
+ \string\groupID = \groupID\par
+ char 4 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{4}\qquad
+ \string\groupID = \groupID\par
+ char 6 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{6}\qquad
+ \string\groupID = \groupID\par
+ char 20 = \StrChar{a{b{cd}{e{f}g}h}ijkl}{20}\qquad
+ \string\groupID = \groupID
+\end{minipage}
+
+\subsection{Coupure d'une chaîne, la macro {\ttfamily\textbackslash StrSplit}}
+\label{StrSplit}
+Voici la syntaxe de cette macro :\par\nobreak\smallskip
+\verbinline|\StrSplit|\ARGU{chaine}\ARGU{nombre}\ARGU{chaineA}\ARGU{chaineB}
+\smallskip
+
+La \argu{chaine}, est coupée en deux chaînes juste après l'\US se situant à la position \argu{nombre}. La partie gauche est assigné à la séquence de contrôle \argu{chaineA} et la partie droite à \argu{chaineB}.\par
+Cette macro renvoie \emph{deux chaînes} et donc \textbf{n'affiche rien}. Par conséquent, elle ne dispose pas de l'argument optionnel en dernière position.\medskip
+
+\begin{Conditions}
+ \item Si \argu{nombre}${}\leqslant0$, \argu{chaineA} sera vide et \argu{chaineB} contiendra la totalité de \argu{chaine};
+ \item Si \argu{nombre}${}\geqslant$\argu{longueurChaine}, \argu{chaineA} contiendra la totalité de \argu{chaine} et \argu{chaineB} sera vide;
+ \item Si \argu{chaine} est vide \argu{chaineA} et \argu{chaineB} seront vides, quelque soit l'entier \argu{nombre}.
+\end{Conditions}
+
+\begin{minipage}[c]{0.65\linewidth}
+\hfill
+\begin{lstlisting}
+\def\seprouge{{\color{red}|}}
+\StrSplit{abcdef}{4}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{a b c }{2}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{1}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{5}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{9}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{-3}{\csA}{\csB}|\csA\seprouge\csB|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+\styleexercice
+\def\seprouge{{\color{red}|}}
+\StrSplit{abcdef}{4}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{a b c }{2}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{1}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{5}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{9}{\csA}{\csB}|\csA\seprouge\csB|\par
+\StrSplit{abcdef}{-3}{\csA}{\csB}|\csA\seprouge\csB|
+\end{minipage}%
+
+\setverbdelim{|}\medskip
+
+Lorsque l'exploration des groupes est activée, et que l'on demande une coupure en fin de groupe, alors une chaîne contiendra la totalité du groupe tansque l'autre sera vide comme on le voit sur cet exemple :\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\hfill
+\begin{lstlisting}
+\exploregroups
+\StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+\meaning\strA\par
+\meaning\strB
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ \StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+ \meaning\strA\par
+ \meaning\strB
+\end{minipage}%
+\medskip
+
+Une version étoilée de cette macro existe : dans ce cas, la coupure se fait juste avant la prochaine \US qui suit l'\US désirée. La version étoilée ne donne des résultats différents de la version normale que lorsque la $n$\ieme{} \US est à la fin d'un groupe auquel cas, la coupure intervient non pas après cette \US mais \emph{avant} la prochaine \US, que \verbinline|\StrSplit| atteint en fermant autant de groupes que nécessaire.\smallskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\hfill
+\begin{lstlisting}
+\exploregroups
+Utilisation sans \'etoile :\par
+\StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+\meaning\strA\par
+\meaning\strB\par
+\string\groupID\ = \groupID\par\medskip
+Utilisation avec \'etoile :\par
+\StrSplit*{ab{cd{ef}gh}ij}{6}\strA\strB
+\meaning\strA\par
+\meaning\strB\par
+\string\groupID\ = \groupID
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \exploregroups
+ Utilisation sans étoile :\par
+ \StrSplit{ab{cd{ef}gh}ij}{6}\strA\strB
+ \meaning\strA\par
+ \meaning\strB\par
+ \string\groupID\ = \groupID\par\medskip
+ Utilisation avec \'etoile :\par
+ \StrSplit*{ab{cd{ef}gh}ij}{6}\strA\strB
+ \meaning\strA\par
+ \meaning\strB\par
+ \string\groupID\ = \groupID
+\end{minipage}%
+
+\subsection{Assigner un contenu verb, la macro \ttfamily\textbackslash verbtocs}
+\label{verbtocs}
+La macro \verbinline|\verbtocs| permet le lire le contenu d'un \guill{verb} qui peut contenir tous les caractères spéciaux : \verb|&|, \verb|~|, \verb|\|, \verb|{|, \verb|}|, \verb|_|, \verb|#|, \verb|$|, \verb|^| et \verb|%|. Les caractères \guill{normaux} gardent leur catcodes naturels, sauf les caractères spéciaux qui prennent un catcode de 12. Ensuite, ces caractères sont assignés à une séquence de contrôle. La syntaxe complète est :\par\nobreak\medskip
+\hfill\verbinline|\verbtocs|\ARGU{nom}|\argu{caractères}|\hfill{}
+\smallskip
+
+\argu{nom} est le nom d'une séquence de contrôle qui recevra à l'aide d'un \verb|\edef| les \argu{caractères}. \argu{nom} contiendra donc des caractères de catcodes 12 ou 10 pour l'espace.\medskip
+
+Par défaut, le token délimitant le contenu verb est \guill{|}, étant entendu que ce token ne peut être à la fois le délimiteur et être contenu dans ce qu'il délimite. Au cas où on voudrait lire un contenu verb contenant \guill{|}, on peut changer à tout moment le token délimitant le contenu verb par la macro :\par\medskip
+\hfill\verbinline|\setverbdelim|\ARGU{token}\hfill{}\smallskip
+
+Tout \argu{token} de catcode 12 peut être utilisé\footnote{Plusieurs tokens peuvent être utilisés au risque d'alourdir la syntaxe de \texttt{\string\verbtocs} ! Pour cette raison, avertissement sera émis si l'argument de \texttt{\string\setverbdelim} contient plusieurs tokens.}.\medskip
+
+Concernant ces arguments verb, il faut tenir compte des deux points suivants :
+
+\nobreak
+\begin{itemize}
+ \item tous les caractères se trouvant avant |\argu{caractères}| seront ignorés;
+ \item à l'intérieur des délimiteurs, tous les espaces sont comptabilisés même s'ils sont consécutifs.
+\end{itemize}
+\medskip
+
+Exemple :\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\lstset{deletecomment=[l]\%}
+\begin{lstlisting}
+\verbtocs{\resultat} |a & b{ c% d$ e \f|
+J'affiche le r\'esultat :\par\resultat
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\resultat} |a & b{ c% d$ e \f|
+ J'affiche le r\'esultat :\par\resultat
+\end{minipage}%
+
+\subsection{Tokenisation d'un texte vers une séquence de contrôle, la macro \ttfamily\textbackslash tokenize}
+Le processus inverse de ce qui a été vu au dessus consiste à interpréter une suite de caractères en tokens. Pour cela, on dispose de la macro :\par\nobreak\medskip
+\hfill\verbinline|\tokenize|\ARGU{nom}\ARGU{texte}\hfill{}
+\smallskip
+
+\argu{texte} est développé le plus possible si l'on a invoqué \verbinline|\fullexpandarg|; il n'est pas développé si l'on a invoqué \verbinline|\noexpandarg| ou \verbinline|\expandarg|. Après développement éventuel, le \argu{texte} est transformé en tokens puis assigné à l'aide d'un \verb|\def| à la séquence de contrôle \argu{nom}.\medskip
+
+Voici un exemple où l'on détokenise un argument, on affiche le texte obtenu, puis on transforme ce texte en ce que l'argument était au début; enfin, on affiche le résultat de la tokenisation :\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\verbtocs{\text}|\textbf{a} $\frac{1}{2}$|
+texte : \text
+\tokenize{\resultat}{\text}\par
+r\'esultat : \resultat
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\text}|\textbf{a} $\frac{1}{2}$|
+ texte : \text
+ \tokenize{\resultat}{\text} \par
+ r\'esultat : \resultat
+\end{minipage}%
+\medskip
+
+Il est bien évident à la dernière ligne, que l'appel à la séquence de contrôle \verb|\resultat| est ici possible puisque les séquences de contrôle qu'elle contient sont définies.\medskip
+
+\subsection{Développement contrôlé, les macros {\ttfamily\textbackslash StrExpand} et {\ttfamily\textbackslash scancs}}
+\label{scancs}
+La macro \verbinline|\StrExpand| développe les tokens de la chaîne passée en argument. Voici sa syntaxe :\par\nobreak\medskip
+\verbinline|\StrExpand|\arguC{nombre}\ARGU{chaine}\ARGU{nom}\smallskip
+
+Le \argu{nombre} vaut 1 par défaut et représente le nombre de développement(s) que doit subir la \argu{chaine} de tokens. Le \argu{nom} est le nom d'une séquence de contrôle à laquelle est assigné le résultat, une fois que tous les tokens aient été développé le nombre de fois demandé.\medskip
+
+La macro opère séquentiellement et par passe : chaque token est remplacé par son 1-dévelopement, et le token suivant subit le même traitement jusqu'à ce que la chaîne ait été parcourue. Ensuite, s'il reste des niveaux de développement à faire, une nouvelle passe est initiée, et ainsi de suite jusqu'à ce que le nombre de développements voulu aient été exécutés.\medskip
+
+Voici un exemple :\par\nobreak\smallskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\def\csA{1 2}
+\def\csB{a \csA}
+\def\csC{\csB\space}
+\def\csD{x{\csA y}\csB{\csC z}}
+D\'eveloppement de \string\csD\ au\par
+\StrExpand[0]{\csD}{\csE} niveau 0 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[1]{\csD}{\csE} niveau 1 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[2]{\csD}{\csE} niveau 2 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[3]{\csD}{\csE} niveau 3 :
+\detokenize\expandafter{\csE}\par
+\StrExpand[4]{\csD}{\csE} niveau 4 :
+\detokenize\expandafter{\csE}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \def\csA{1 2}
+ \def\csB{a \csA}
+ \def\csC{\csB\space}
+ \def\csD{x{\csA y}\csB{\csC z}}
+ Développement de \string\csD\ au\par
+ \StrExpand[0]{\csD}{\csE} niveau 0 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[1]{\csD}{\csE} niveau 1 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[2]{\csD}{\csE} niveau 2 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[3]{\csD}{\csE} niveau 3 :
+ \detokenize\expandafter{\csE}\par
+ \StrExpand[4]{\csD}{\csE} niveau 4 :
+ \detokenize\expandafter{\csE}
+\end{minipage}%
+\medskip
+
+La macro agit séquentiellement et chaque token est développé isolément sans tenir compte de ce qui suit. On ne peut donc développer que des tokens qui se suffisent à eux même et dont le développement ne nécessite aucun autre token. Ainsi, \og\hbox{\verbinline|\iftrue A\else B\fi|}\fg, bien que se développant en \guill{A} ne peut être mis dans l'argument de \verbinline|\StrExpand|, et l'instruction :\par\nobreak\smallskip
+\hfil\verbinline|\StrExpand{\iftrue A\else B\fi}\resultat|\hfil{}\par\nobreak\smallskip
+fera échouer la compilation puisque le premier token \og\verbinline|\iftrue|\fg{} sera développé \emph{seul}, c'est-à-dire sans son \verbinline-\fi- correspondant, ce qui fâchera \TeX{} !\smallskip
+
+Les règles habituelles de lecture des arguments sont en vigueur, à savoir qu'un espace suivant une séquence de contrôle est ignoré, et plusieurs espaces consécutifs n'en font qu'un. Ces règles ne s'appliquent pas pour des espaces explicitement demandés avec \verb-\space- ou \verb*-\ -\footnote{À ce propos, \texttt{\string\space} n'a pas la même signification que \texttt{\string\ }. La première séquence de contrôle se \emph{développe} en un espace tandis que la deuxième est une primitive \TeX{} qui \emph{affiche} une espace. Comme toutes les primitives, cette dernière est son propre développement.}.\smallskip
+
+Le développement de ce qui se trouve à l'intérieur des groupes est \emph{indépendant} du mode d'exploration des groupes : cette macro possède ses propres commandes pour développer ce qui est dans les groupes ou pas. Par défaut, les tokens se trouvant à l'intérieur des groupes sont développés, mais on peut demander à ce que ce développement ne se fasse pas en invoquant \verbinline-\noexpandingroups- et revenir au comportement par defaut par \verbinline-\expandingroups-.\bigskip
+
+On peut détokeniser le résultat obtenu par la macro \verbinline-\StrExpand- avec la macro \verbinline-\scancs- dont la syntaxe est :\par\nobreak\medskip
+\verbinline|\scancs|\arguC{nombre}\ARGU{nom}\ARGU{chaine}\par\nobreak\smallskip
+Le \argu{nombre} vaut 1 par défaut et représente le nombre de développement(s) que doit subir chaque token constituant la \argu{chaine}. Le \argu{nom} est le nom d'une séquence de contrôle à laquelle est assigné le résultat, une fois que tous les tokens aient été développés le nombre de fois demandé et ensuite détokénisés.\smallskip
+
+\verbinline-\scancs- a été conservée pour garder une compatibilité avec des précédentes versions de \Xstring. Pour les mêmes raisons, sa syntaxe n'est pas cohérente avec la syntaxe des autres macros. Cette macro, devenue triviale, prend le résultat de \verbinline|\StrExpand| et lui applique simplement un \verbinline|\detokenize|.
+
+\subsection{À l'intérieur d'une définition de macro}
+Avec le verbatim, certaines difficultés surviennent lorsque l'on se trouve à l'intérieur de la définition d'une macro, c'est-à-dire entre les accolades suivant un \verb|\def\macro| ou un \verb|\newcommand\macro|.\medskip
+
+Pour les mêmes raison qu'il est interdit d'employer la commande \verb|\verb| à l'intérieur de la définition d'une macro, les arguments verb du type |\argu{caractères}| sont également interdits, ce qui disqualifie la macro \verbinline|\verbtocs|. Il faut donc observer la règle suivante :\par\medskip
+\hfill{\bfseries Ne pas utiliser la macro \verbinline-\verbtocs- à l'intérieur de la définition d'une macro}.\hfill{}\bigskip
+
+Mais alors, comment faire pour manipuler des arguments textuels verb et \guill{verbatimiser} dans les définitions de macro ?\bigskip
+
+Il y a la primitive \verb|\detokenize| de $\varepsilon$-\TeX, mais elle comporte des restrictions, entre autres :
+
+\nobreak
+\begin{itemize}
+ \item les accolades doivent être équilibrées;
+ \item les espaces consécutifs sont ignorés;
+ \item les signes \verb|%| sont interdits;
+ \item une espace est ajoutée après chaque séquence de contrôle.
+\end{itemize}
+\medskip
+
+Il est préférable d'utiliser la macro \verbinline|\scancs|, et définir avec \verbinline|\verbtocs| à l'extérieur des définitions de macros, des séquences de contrôle contenant des caractères spéciaux détokénisés. On pourra aussi utiliser la macro \verbinline|\tokenize| pour transformer le résultat final (qui est une chaîne de caractères) en une séquence de contrôle. On peut voir des exemples utilisant ces macros page~\pageref{exemples}, à la fin de ce manuel.\medskip
+
+Dans l'exemple artificiel\footnote{On peut agir beaucoup plus simplement en utilisant la commande \texttt{\string\detokenize}. Il suffit de définir la macro ainsi :\par\texttt{\string\newcommand\string\bracearg[1]\{\string\detokenize\{\{\#1\}\}\}}} qui suit, on écrit une macro qui met son argument entre accolades. Pour cela, on définit en dehors de la définition de la macro 2 séquences de contrôles \verb|\Ob| et \verb|\Cb| contenant une accolade ouvrante et une accolade fermante de catcodes 12. Ces séquences de contrôle sont ensuite développées et utilisées à l'intérieur de la macro pour obtenir le résultat voulu :\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\verbtocs{\Ob}|{|
+\verbtocs{\Cb}|}|
+\newcommand\bracearg[1]{%
+ \def\text{#1}%
+ \scancs{\result}{\Ob\text\Cb}%
+ \result}
+
+\bracearg{xstring}\par
+\bracearg{\a}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\Ob}|{|
+ \verbtocs{\Cb}|}|
+ \newcommand\bracearg[1]{%
+ \def\text{#1}%
+ \scancs{\result}{\Ob\text\Cb}%
+ \result}
+
+ \bracearg{xstring}\par
+ \bracearg{\a}
+\end{minipage}%
+
+\subsection{La macro \ttfamily\textbackslash StrRemoveBraces}
+Pour des utilisations spéciales, on peut désirer retirer les accolades délimitant les groupes dans un argument.
+
+On peut utiliser la macro \verbinline|\StrRemoveBraces| dont voici la syntaxe :\par\nobreak\smallskip
+\verbinline|\StrRemoveBraces|\ARGU{chaine}\arguC{nom}
+\smallskip
+
+Cette macro est sensible au mode d'exploration, et retirera \emph{toutes} les accolades avec \verbinline|\exploregroups| alors qu'elle ne retirera que les accolades des groupes de plus bas niveau avec \verbinline|\noexploregroups|.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexploregroups
+\StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+\meaning\mycs
+
+\exploregroups
+\StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+\meaning\mycs
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexploregroups
+ \StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+ \meaning\mycs
+
+ \exploregroups
+ \StrRemoveBraces{a{b{c}d}e{f}g}[\mycs]
+ \meaning\mycs
+\end{minipage}%
+
+\subsection{Exemples d'utilisation en programmation}
+\label{exemples}
+Voici quelques exemples très simples d'utilisation des macros comme on pourrait en rencontrer en programmation.
+
+\subsubsection{Exemple 1}
+On cherche à remplacer les deux premiers \verb|\textit| par \verb|\textbf| dans la séquence de contrôle \verb|\myCS| qui contient :\par\nobreak\smallskip
+\hfill\verb|\textit{A}\textit{B}\textit{C}|\hfill{}
+\medskip
+
+On cherche évidemment à obtenir \verb|\textbf{A}\textbf{B}\textit{C}| qui affiche : \textbf{A}\textbf{B}\textit{C}\medskip
+
+Pour cela, on va développer les arguments des macros une fois avant qu'elles les traitent, en invoquant la commande \verbinline|\expandarg|.
+
+Ensuite, on définit \verb|\pattern| qui est le motif à remplacer, et \verb|\replace| qui est le motif de substitution. On travaille token par token puisque \verbinline|\expandarg| a été appelé, il suffit d'invoquer \verbinline|\StrSubstitute| pour faire les 2 substitutions.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\expandarg
+\def\myCS{\textit{A}\textit{B}\textit{C}}
+\def\pattern{\textit}
+\def\replace{\textbf}
+\StrSubstitute[2]{\myCS}{\pattern}{\replace}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \expandarg
+ \def\myCS{\textit{A}\textit{B}\textit{C}}
+ \def\pattern{\textit}
+ \def\replace{\textbf}
+ \StrSubstitute[2]{\myCS}{\pattern}{\replace}
+\end{minipage}%
+\medskip
+
+Pour éviter de définir les séquences de contrôle \verb|\pattern| et \verb|\replace|, on aurait pu utiliser un leurre comme par exemple une séquence de contrôle qui se développe en \guill{rien} comme \verb|\empty|, et coder de cette façon :\par\smallskip
+\hfil\verbinline|\StrSubstitute[2]{\myCS}{\empty\textit}{\empty\textbf}|\hfil{}\medskip
+
+Ainsi, \verb|\empty| est développée en \guill{rien} et il reste dans les 2 derniers arguments les séquences de contrôles significatives \verb|\textit| et \verb|textbf|.\smallskip
+
+La séquence de contrôle \verbinline|\empty| est donc un \guill{hack} pour \verbinline|\expandarg| : elle permet de bloquer le développement du 1\ier{} token ! On aurait d'ailleurs pu utiliser \verbinline|\noexpand| au lieu de \verbinline|\empty| pour obtenir le même résultat.
+
+\subsubsection{Exemple 2}
+On cherche ici à écrire une commande qui efface \verb|n| unités syntaxiques dans une chaîne à partir d'une position donnée, et affecte le résultat dans une séquence de contrôle dont on peut choisir le nom.
+
+On va appeler cette macro \verb|StringDel| et lui donner la syntaxe :\par\nobreak\smallskip
+\hfil\verb|\StringDel{chaine}{position}{n}{\nom_resultat}|\hfil{}
+\medskip
+
+On peut procéder ainsi : sauvegarder la chaîne se trouvant juste avant la position. Ensuite enlever \verb|n + position| \USs à la chaîne initiale, et concaténer ce résultat à ce qui a été sauvegardé auparavant. Cela donne le code suivant :\par\nobreak\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\newcommand\StringDel[4]{%
+ \begingroup
+ \expandarg% portee locale au groupe
+ \StrLeft{\empty#1}{\number\numexpr#2-1}[#4]%
+ \StrGobbleLeft{\empty#1}{\numexpr#2+#3-1}[\StrA]%
+ \expandafter\expandafter\expandafter\endgroup
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#4%
+ \expandafter\expandafter\expandafter
+ {\expandafter#4\StrA}%
+}
+
+\noexploregroups
+\StringDel{abcdefgh}{2}{3}{\cmd}
+\meaning\cmd
+
+\StringDel{a\textbf{1}b\textbf{2c}3d}{3}{4}{\cmd}
+\meaning\cmd
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \newcommand\StringDel[4]{%
+ \begingroup
+ \expandarg% portée locale au groupe
+ \StrLeft{\empty#1}{\number\numexpr#2-1}[#4]%
+ \StrGobbleLeft{\empty#1}{\numexpr#2+#3-1}[\StrA]%
+ \expandafter\expandafter\expandafter\endgroup
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#4%
+ \expandafter\expandafter\expandafter{\expandafter#4\StrA}%
+ }
+
+ \noexploregroups
+ \StringDel{abcdefgh}{2}{3}{\cmd}
+ \meaning\cmd
+
+ \StringDel{a\textbf{1}b\textbf{2c}3d}{3}{4}{\cmd}
+ \meaning\cmd
+\end{minipage}%
+\fullexpandarg\bigskip
+
+Pour la concaténation, on aurait pu procéder différemment en utilisant la macro \verb|\g@addto@macro| de \LaTeX{}. Cela évite aussi ces laborieux \guill{ponts} d'\verbinline|\expandafter|. Il suffit alors de remplacer l'assignation et la sortie du groupe se trouvant entre les lignes 6 à 10 par\footnote{À condition d'avoir provisoirement changé le code de catégorie de \og{\ttfamily\string@}\fg{} en écrivant la macro entre les commandes {\ttfamily\string\makeatletter} et {\ttfamily\string\makeatother}} :\par\nobreak\smallskip
+\hfil\verbinline|\expandafter\g@addto@macro\expandafter#4\expandafter{\StrA}\endgroup|\hfil{}
+
+\subsubsection{Exemple 3}
+Cherchons à écrire une macro \verb|\tofrac| qui transforme une écriture du type \guill{a/b} par \guill{$\frac{a}{b}$}.\medskip
+
+Tout d'abord, annulons le développement des arguments avec \verbinline|\noexpandarg| : nous n'avons pas besoin de développement ici. Il suffit d'isoler ce qui se trouve avant et après la 1\iere{} occurrence de \guill{/} (on suppose qu'il n'y a qu'une seule occurrence), le mettre dans les séquences de contrôle \verb|\num| et \verb|\den| et simplement appeler la macro \TeX{} \verb|\frac| :\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\noexpandarg
+\newcommand\tofrac[1]{%
+ \StrBefore{#1}{/}[\num]%
+ \StrBehind{#1}{/}[\den]%
+ $\frac{\num}{\den}$%
+}
+\tofrac{15/9}
+\tofrac{u_{n+1}/u_n}
+\tofrac{a^m/a^n}
+\tofrac{x+\sqrt{x}/\sqrt{x^2+x+1}}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \noexpandarg
+ \newcommand\tofrac[1]{%
+ \StrBefore{#1}{/}[\num]%
+ \StrBehind{#1}{/}[\den]%
+ $\frac{\num}{\den}$%
+ }
+ \tofrac{15/9}
+ \tofrac{u_{n+1}/u_n}
+ \tofrac{a^m/a^n}
+ \tofrac{x+\sqrt{x}/\sqrt{x^2+x+1}}
+\end{minipage}%
+
+\subsubsection{Exemple 4}
+Soit une phrase composée de texte. Dans cette phrase, essayons construire une macro qui mette en gras le 1\ier{} mot qui suit un mot donné. On entend par mot une suite de caractère ne commençant ni ne finissant par un espace. Si le mot n'existe pas dans la phrase, rien n'est fait.\medskip
+
+On va écrire une macro \verb|\grasapres| qui effectue ce travail. On appelle \verbinline|\StrBehind| qui assigne à \verb|\mot| ce qui se trouve après la 1\iere{} occurrence du mot (précédé et suivi de son espace). Ensuite, le mot à mettre en gras est ce qui se trouve avant le 1\ier{} espace dans la séquence de contrôle \verb|\mot|. Remarquons que ceci reste vrai même si le mot à mettre en gras est le dernier de l'argument car un espace a été rajouté à la fin de l'argument par \verb|{#1 }| lors de l'appel à \verbinline|\StrBehind|. Remarquons aussi que \verbinline|\expandarg| a été appelé et donc, le premier token de l'argument \verb|\textbf{\mot}| est développé 1 fois, \emph{lui aussi} ! Cela est possible (heureusement sinon, il aurait fallu faire autrement et utiliser le hack de l'exemple précédent) puisque le 1-développement de cette macro de \LaTeX{} est \og\verb|\protect\textbf|\fg{}\footnote{En toute rigueur, il aurait fallu écrire :\par\hspace{2em}{\ttfamily\string\StrSubstitute[1]\{\string#1\}\{\string\mot\}\{\string\expandafter\string\textbf\string\expandafter\{\string\mot\}\}}\newline De cette façon, dans {\ttfamily\{\string\expandafter\string\textbf\string\expandafter\{\string\mot\}\}}, la séquence de contrôle {\ttfamily\string\mot} est développée \textbf{avant} que l'appel à la macro ne se fasse. Cela est dû à l'{\ttfamily\string\expandafter} placé en début d'argument qui est développé à cause de {\ttfamily\string\expandarg} et grace à l'autre {\ttfamily\string\expandafter}, provoque le développement de {\ttfamily\string\mot}}.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\newcommand\grasapres[2]{%
+ \noexpandarg
+ \StrBehind[1]{#1 }{ #2 }[\mot]%
+ \expandarg
+ \StrBefore{\mot}{ }[\mot]%
+ \StrSubstitute[1]{#1}{\mot}{\textbf{\mot}}%
+}
+
+\grasapres{Le package xstring est nouveau}{package}
+
+\grasapres{Le package xstring est nouveau}{ckage}
+
+\grasapres{Le package xstring est nouveau}{est}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \newcommand\grasapres[2]{%
+ \noexpandarg
+ \StrBehind[1]{#1 }{ #2 }[\mot]%
+ \expandarg
+ \StrBefore{\mot}{ }[\mot]%
+ \StrSubstitute[1]{#1}{\mot}{\textbf{\mot}}%
+ }
+
+ \grasapres{Le package xstring est nouveau}{package}
+
+ \grasapres{Le package xstring est nouveau}{ckage}
+
+ \grasapres{Le package xstring est nouveau}{est}
+\end{minipage}%
+\fullexpandarg
+
+\subsubsection{Exemple 5}
+Soit un argument commençant par au moins 3 séquences de contrôles avec leurs éventuels arguments. Comment intervertir les 2 premières séquences de contrôle de telle sorte qu'elles gardent leurs arguments ? On va pour cela écrire une macro \verb|\swaptwofirst|.
+
+Cette fois ci, on ne peut pas chercher le seul caractère \og\verb|\|\fg{} (de catcode 0) dans un argument. Nous serons obligé de détokeniser l'argument, c'est ce que fait \verbinline|\scancs[0]\chaine{#1}| qui met le résultat dans \verb|\chaine|. Ensuite, on cherchera dans cette séquence de contrôle les occurrences de \verb|\antislash| qui contient le caractère \og\verb|\|\fg{} de catcode 12, assigné avec un \verbinline|\verbtocs| écrit \emph{en dehors\footnote{En effet, la macro {\tt\string\verbtocs} et son argument verb est interdite à l'intérieur de la définition d'une macro.}} du corps de la macro. La macro se termine par une retokenisation, une fois que les chaînes \verb|\avant| et \verb|\apres| aient été échangées.\medskip
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\verbtocs{\antislash}|\|
+\newcommand\swaptwofirst[1]{%
+ \begingroup
+ \fullexpandarg
+ \scancs[0]\chaine{#1}%
+ \StrBefore[3]{\chaine}{\antislash}[\firsttwo]%
+ \StrBehind{\chaine}{\firsttwo}[\others]
+ \StrBefore[2]{\firsttwo}{\antislash}[\avant]
+ \StrBehind{\firsttwo}{\avant}[\apres]%
+ \tokenize\myCS{\apres\avant\others}%
+ \myCS
+ \endgroup
+}
+
+\swaptwofirst{\underline{A}\textbf{B}\textit{C}}
+
+\swaptwofirst{\Large\underline{A}\textbf{B}123}
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \verbtocs{\antislash}|\|
+ \newcommand\swaptwofirst[1]{%
+ \begingroup
+ \fullexpandarg
+ \scancs[0]\chaine{#1}%
+ \StrBefore[3]{\chaine}{\antislash}[\firsttwo]%
+ \StrBehind{\chaine}{\firsttwo}[\others]
+ \StrBefore[2]{\firsttwo}{\antislash}[\avant]
+ \StrBehind{\firsttwo}{\avant}[\apres]%
+ \tokenize\myCS{\apres\avant\others}%
+ \myCS
+ \endgroup
+ }
+
+ \swaptwofirst{\underline{A}\textbf{B}\textit{C}}
+
+ \swaptwofirst{\Large\underline{A}\textbf{B}123}
+\end{minipage}%
+
+\subsubsection{Exemple 6}
+Dans une chaîne, on cherche ici à isoler le n\ieme{} mot se trouvant entre 2 délimiteurs précis. Pour cela on écrira une macro \verb|\findword| admettant comme argument optionnel le délimiteur de mot (l'espace par défaut), 1 argument contenant la chaîne, 1 argument contenant le nombre correspondant au n\ieme{} mot cheché.\medskip
+
+La macro \verb|\findword| utilise \verbinline|\StrBetween| et \verb|\numexpr| de façon astucieuse, et profite du fait que \verbinline-\StrBetween- n'explore pas les groupes :\par\nobreak\medskip
+\begin{minipage}[c]{0.65\linewidth}
+\begin{lstlisting}
+\newcommand\findword[3][ ]{%
+ \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}%
+}
+\noexpandarg
+|\findword{a bc d\textbf{e f} gh}{3}|
+
+|\findword[\nil]{1 \nil 2 3 \nil4\nil5}{2}|
+\end{lstlisting}%
+\end{minipage}\hfill
+\begin{minipage}[c]{0.35\linewidth}
+ \styleexercice
+ \newcommand\findword[3][ ]{%
+ \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}%
+ }
+ \noexpandarg
+ |\findword{a bc d\textbf{e f} gh}{3}|
+
+ |\findword[\nil]{1 \nil 2 3 \nil4\nil5}{2}|
+\end{minipage}%
+
+On peut observer que le résultat de la ligne 7 qui est \og\verb*|2 3 |\fg{} ne commence \emph{pas} par une espace puisque dans le code, cet espace suit une séquence de contrôle~---~ici \verb|\nil|.
+\bigskip\bigskip
+\begin{center}
+$\star$\par
+$\star$\quad$\star$
+\end{center}
+\bigskip\bigskip
+
+C'est tout, j'espère que ce package vous sera utile !\par\nobreak
+Merci de me signaler par \href{mailto:unbonpetit@netc.fr}{email} tout bug ou toute proposition d'amélioration\ldots\par\nobreak\bigskip
+Christian \textsc{Tellechea}
+\end{document} \ No newline at end of file
diff --git a/macros/generic/xstring/xstring.sty b/macros/generic/xstring/xstring.sty
new file mode 100644
index 0000000000..18632cd872
--- /dev/null
+++ b/macros/generic/xstring/xstring.sty
@@ -0,0 +1,3 @@
+\input xstring.tex
+\ProvidesPackage{xstring}[\xstringdate\space v\xstringversion\space String manipulations (CT)]
+\endinput \ No newline at end of file
diff --git a/macros/generic/xstring/xstring.tex b/macros/generic/xstring/xstring.tex
new file mode 100644
index 0000000000..654fe462ae
--- /dev/null
+++ b/macros/generic/xstring/xstring.tex
@@ -0,0 +1,1227 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "xstring"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\xstringname {xstring} %
+\def\xstringversion {1.83} %
+% %
+\def\xstringdate {2019/02/06} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Author : Christian Tellechea %
+% Status : Maintained %
+% Maintainer : Christian Tellechea %
+% Email : unbonpetit@netc.fr %
+% Package URL: https://www.ctan.org/pkg/xstring %
+% Bug tracker: https://framagit.org/unbonpetit/xstring/issues %
+% Repository : https://framagit.org/unbonpetit/xstring/tree/master %
+% Copyright : Christian Tellechea 2008-2019 %
+% Licence : Released under the LaTeX Project Public License v1.3c %
+% or later, see http://www.latex-project.org/lppl.txt %
+% Files : 1) xstring.tex %
+% 2) xstring.sty %
+% 3) xstring-fr.tex %
+% 4) xstring-fr.pdf %
+% 5) xstring-en.tex %
+% 6) xstring-en.pdf %
+% 7) README %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifdefined\usepackage\else
+ \immediate\write-1 {Package: xstring \xstringdate\space v\xstringversion\space String manipulations (CT)}%
+\fi
+\newcount\integerpart
+\newcount\decimalpart% compteurs utilisés par xstring
+
+\edef\restorexstringcatcode{\catcode\number`\_ =\number\catcode`\_\relax}
+\catcode`\_=11
+
+\long\def\xs_execfirst#1#2{#1}
+\long\def\xs_execsecond#1#2{#2}
+\long\def\xs_gobarg#1{}
+\expandafter\def\expandafter\xs_gobspace\space{}
+\def\xs_deftok#1#2{\let#1= #2\relax}\xs_deftok\xs_sptoken{ }
+\long\def\xs_ifnxttok#1#2#3{\xs_deftok\xs_toksmatch{#1}\def\__truecode{#2}\def\__falsecode{#3}\xs_ifnxttok_a}
+\def\xs_ifnxttok_a{\futurelet\__futurtok\xs_ifnxttok_b}
+\def\xs_ifnxttok_b{%
+ \xs_ifx{\__futurtok\xs_sptoken}
+ {\afterassignment\xs_ifnxttok_a\let\__futurtok= }
+ {\xs_ifx{\__futurtok\xs_toksmatch}\__truecode\__falsecode}%
+}
+\def\xs_ifstar#1{\xs_ifnxttok*{\xs_execfirst{#1}}}
+\long\def\xs_testopt#1#2{\xs_ifnxttok[{#1}{#1[{#2}]}}
+\long\def\xs_exparg#1#2{\expandafter\xs_exparg_a\expandafter{#2}{#1}}%
+\long\def\xs_exparg_a#1#2{#2{#1}}
+\long\def\xs_exptwoargs#1#2#3{\xs_exparg{\xs_exparg{#1}{#2}}{#3}}
+\long\def\xs_eearg#1#2{\xs_exparg{\xs_exparg{#1}}{#2}}
+\long\def\xs_edefaddtomacro#1#2{\edef#1{\unexpanded\expandafter{#1}#2}}
+\long\def\xs_addtomacro#1#2{\xs_exparg{\def#1}{#1#2}}
+\long\def\xs_eaddtomacro#1#2{\xs_exparg{\xs_addtomacro#1}{#2}}
+\long\def\xs_eeaddtomacro#1#2{\xs_exparg{\xs_eaddtomacro#1}{#2}}
+\long\def\xs_endgroup_eaddtomacro#1#2{\xs_exparg{\endgroup\xs_addtomacro#1}{#2}}
+\long\def\xs_beforespace#1 #2\_nil{#1}
+\long\def\xs_afterspace#1 #2\_nil{#2}
+\long\def\xs_gobtonil#1\_nil{}
+\long\def\xs_gobtobrace#1#{}
+\long\def\xs_ifx#1{\ifx#1\expandafter\xs_execfirst\else\expandafter\xs_execsecond\fi}
+\def\xs_ifnum#1{\ifnum#1\expandafter\xs_execfirst\else\expandafter\xs_execsecond\fi}
+\long\def\xs_ifempty#1{\expandafter\xs_ifx\expandafter{\expandafter\relax\detokenize{#1}\relax}}
+
+\def\xs_toks_toverb{% lit 1 argument et le transforme en verb
+ \begingroup
+ \def\do##1{\catcode`##112 }%
+ \dospecials
+ \obeyspaces
+ \xs_read_verb
+}
+
+\def\setverbdelim#1{% définit quel est le délimiteur de verb
+ \xs_exparg\xs_ifempty{\xs_gobarg#1}%
+ {}
+ {\errmessage{Package xstring Warning: verb delimiter "\detokenize{#1}" is not a single token}}%
+ \def\xs_read_verb##1#1##2#1{\endgroup\xs_assign_verb{##2}}% on appelle l'exécution de fin
+}
+
+% Assigne l'argument entre délimiteur verb dans la sc #1
+\def\verbtocs#1{%
+ \def\xs_assign_verb##1{\def#1{##1}}%
+ \xs_toks_toverb
+}
+
+\begingroup
+ \catcode0 3 \gdef\xs_twozeroschars{^^00}%
+ \catcode0 7 \xdef\xs_twozeroschars{\xs_twozeroschars^^00}%
+\endgroup
+
+\edef\xs_reserved_A{\long\def\noexpand\xs_assigntokenizeresult##1\xs_twozeroschars}
+\xs_reserved_A#2{\endgroup\xs_exparg{\def#2}{\xs_gobarg#1}}
+
+\def\tokenize#1#2{%
+ \begingroup
+ \xs_def\xs_reserved_A{#2}% on développe en accord avec \fullexpandarg ou \noexpandarg
+ \everyeof\expandafter{\xs_twozeroschars#1}%
+ \endlinechar-1
+ \expandafter\xs_assigntokenizeresult\scantokens\expandafter{\expandafter\relax\xs_reserved_A}% on fait l'assignation
+}%
+
+\long\def\xs_assign_xstringresult#1#2{\xs_ifempty{#2}{#1}{\def#2{#1}}}
+
+\def\xs_ldef{\long\def}
+\def\xs_ledef{\long\edef}
+
+\def\normalexpandarg{%
+ \let\xs_def\xs_ldef% on définit \xs_call avec \def
+ \def\xs_expand##1{\unexpanded\expandafter{##1}}%
+}
+\let\noexpandarg\normalexpandarg% synonyme
+
+\def\expandarg{%
+ \let\xs_def\xs_ldef% on définit \xs_call avec \def
+ \def\xs_expand##1{\unexpanded\expandafter\expandafter\expandafter{##1}}%
+}
+
+\def\fullexpandarg{%
+ \let\xs_def\xs_ledef% on définit\xs_call avec \edef
+ \def\xs_expand##1{##1}% et on neutralise \xs_expand
+}
+
+\def\saveexpandmode{\let\xs_saved_def\xs_defarg\let\xs_saved_expand\xs_expand}
+\def\restoreexpandmode{\let\xs_defarg\xs_saved_def\let\xs_expand\xs_saved_expand}
+
+% Macro interne renvoyant #2 si son argument commence par une accolade ouvrante "{"
+% et #3 sinon (Ulrich Diez sur comp.text.tex)
+\long\def\xs_ifbeginwithbrace#1{%
+ \csname xs_exec%
+ \expandafter\xs_gobarg\string{%
+ \expandafter\xs_gobarg\expandafter{\expandafter{\string#1}%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\xs_execfirst
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\xs_gobarg
+ \expandafter\expandafter\expandafter\xs_gobarg
+ \expandafter\expandafter\expandafter{\expandafter\string\expandafter}\string}%
+ \expandafter\xs_gobarg\string}%
+ \xs_execsecond{first}{second}%
+ \endcsname
+}
+
+% Cette macro interne prend la 1ere unité syntaxique de #1 et assigne le résultat à #2
+\long\def\xs_returnfirstsyntaxunit#1#2{%
+ \let\xs_toks\relax
+ \xs_ifempty{#1}
+ {\let#2\empty
+ }
+ {\xs_eearg\xs_ifempty{\expandafter\xs_beforespace\detokenize{#1} \_nil}% #1 commence par un espace ?
+ {\def#2{ }}
+ {\xs_ifbeginwithbrace{#1}
+ {\def\xs_groupfound{\xs_exparg{\def#2}{\expandafter{#2}}\xs_gobtonil}% on met #2 dans des accolades et on finit
+ \let\xs_toks\bgroup
+ \afterassignment\xs_groupfound
+ \def#2%
+ }
+ {\long\def\xs_assignfirstarg##1##2\_nil{\def#2{##1}}%
+ \xs_assignfirstarg
+ }%
+ #1\_nil
+ }%
+ }%
+}
+
+\long\def\xs_removefirstsyntaxunit#1#2{%
+ \xs_ifempty{#1}
+ {\let#2\empty
+ }
+ {\xs_eearg\xs_ifempty{\expandafter\xs_beforespace\detokenize{#1} \_nil}% #1 commence par un espace ?
+ {\xs_exparg\xs_ifbeginwithbrace{\xs_gobspace#1}
+ {\xs_exparg{\def#2}{\xs_gobtobrace#1}}%
+ {\xs_exparg{\def#2}{\xs_afterspace#1\_nil}}%
+ }%
+ {\xs_exparg{\def#2}{\xs_gobarg#1}}%
+ }%
+}
+
+% Cette macro interne est utilisée dans les macros étoilées pour :
+% 1) développer l'argument selon qu'on a choisit \fullexpandarg
+% ou \normalexpandarg, et ceci à l'aide de la macro \xs_def
+% 2) Ensuite, on détokenize ce développement de façon n'avoir plus que
+% des catcodes de 10 pour les espaces et 12 pour le reste.
+\long\def\xs_expand_and_detokenize#1#2{%
+ \long\def#1{#2}%
+ \expandafter\edef\expandafter#1\expandafter{\xs_expand#1}% on développe #2 selon le mode de développement
+ \long\edef#1{\detokenize\expandafter{#1}}% puis on détokenize et on assigne à #1
+}
+
+\long\def\xs_expand_and_assign#1#2{\xs_def#1{#2}}% on développe #2 selon \fullexpandarg ou \normalexpandarg
+
+\def\xs_arglist{0########1########2########3########4########5########6########7########8########9}
+
+% \xs_assign_args{3} met dans la sc \xs_myarg les tokens "####1####2####3"
+\def\xs_assign_args#1{\def\xs_assign_args_i0##1#1##2\_nil{\def\xs_myarg{##1#1}}\expandafter\xs_assign_args_i\xs_arglist\_nil}
+
+% \xs_assign_opt_args{3} met dans la sc \xs_myarg les tokens "[####1]####2####3####4"
+\def\xs_assign_opt_args#1{\xs_exparg\xs_assign_opt_args_i{\number\numexpr#1+1}}
+\def\xs_assign_opt_args_i#1{\def\xs_assign_opt_args_ii0##11##2#1##3\_nil{\def\xs_myarg{[##11]##2#1}}\expandafter\xs_assign_opt_args_ii\xs_arglist\_nil}
+
+% \xs_assign_one_arg{3} met dans la sc \xs_myarg les tokens "####3"
+\def\xs_assign_one_arg#1{\xs_exparg\xs_assign_one_arg_i{\number\numexpr#1-1}{#1}}
+\def\xs_assign_one_arg_i#1#2{\def\xs_assign_one_arg_ii##1#1##2#2##3\_nil{\def\xs_myarg{##2#2}}\expandafter\xs_assign_one_arg_ii\xs_arglist\_nil}
+
+% #1 : numéro du 1er argument; #2 : nombre de lignes; #3 argument optionnel; #4 : dernier numéro de l'argument devant être détokenisé si étoile
+\def\xs_buildlines#1#2#3#4{%
+ \let\xs_newlines\empty
+ \let\xs_newargs\empty
+ \def\xs_buildlines_i##1{%
+ \xs_exparg\xs_assign_one_arg{\number\numexpr##1+#1-1}%
+ \edef\xs_reserved_B{\noexpand\xs_expand\csname xs_arg_\romannumeral\numexpr##1\endcsname}%
+ \xs_ifnum{##1=1 }% si c'est le premier argument
+ {\xs_ifempty{#3}%
+ {\xs_eaddtomacro\xs_newargs{\expandafter{\xs_reserved_B}}%
+ \edef\xs_reserved_B{\ifnum##1>#4 xs_def\else xs_assign\fi}%
+ }% et s'il y a un argument optionnel alors, on met des crochets
+ {\xs_eaddtomacro\xs_newargs{\expandafter[\xs_reserved_B]}%
+ \def\xs_reserved_B{xs_def}% ne pas détokéniser l'argument optionnel grace au \xs_def
+ }%
+ }
+ {\xs_eaddtomacro\xs_newargs{\expandafter{\xs_reserved_B}}%
+ \edef\xs_reserved_B{\ifnum##1>#4 xs_def\else xs_assign\fi}%
+ }%
+ \edef\xs_newlines{\unexpanded\expandafter{\xs_newlines}\expandafter\noexpand\csname\xs_reserved_B\endcsname\expandafter\noexpand\csname xs_arg_\romannumeral\numexpr##1\endcsname{\xs_myarg}}%
+ \xs_ifnum{##1<#2 }
+ {\xs_exparg\xs_buildlines_i{\number\numexpr##1+1}}
+ {}%
+ }%
+ \xs_buildlines_i1%
+}
+
+\def\xs_newmacro{%
+ \xs_ifstar
+ {\let\xs_reserved_D\empty\xs_newmacro_}
+ {\let\xs_reserved_D\relax\xs_newmacro_0}%
+}
+
+% #1 : dernier numéro de l'argument devant être détokenisé
+% #2 : nom de la macro publique
+% #3 : argument optionnel (vide si pas d'arg optionnel)
+% #4 : nombre d'arguments obligatoires
+% #5 : utilisation de testopt (1 si oui, 0 si non)
+% #6 : code de la macro
+\def\xs_newmacro_#1#2#3#4#5{%
+ \edef\xs_reserved_A{xs_\expandafter\xs_gobarg\string#2}%
+ \edef\xs_reserved_C{\expandafter\noexpand\csname\xs_reserved_A _\ifx\empty#3\empty _\fi\endcsname}%
+ \edef\xs_reserved_B{%
+ \long
+ \ifx\empty\xs_reserved_D
+ \def\noexpand#2{\noexpand\xs_ifstar
+ {\let\noexpand\xs_assign\noexpand\xs_expand_and_detokenize\expandafter\noexpand\xs_reserved_C}%
+ {\let\noexpand\xs_assign\noexpand\xs_expand_and_assign\expandafter\noexpand\xs_reserved_C}%
+ }%
+ \else
+ \def\noexpand#2{\let\noexpand\xs_assign\noexpand\xs_expand_and_assign\expandafter\noexpand\xs_reserved_C}%
+ \fi
+ \ifx\empty#3\empty
+ \else
+ \def\expandafter\noexpand\xs_reserved_C{%
+ \noexpand\xs_testopt{\expandafter\noexpand\csname\xs_reserved_A __\endcsname}{\ifx\xs_def\xs_ledef#3\else\unexpanded{#3}\fi}}%
+ \fi
+ }%
+ % Que fait \xs_reserved_B ? Il définit :
+ % si #3 est vide : \NOM{\xs_ifstar{\let\xs_assign\xs_expand_and_detokenize\xs_NOM__}{\let\xs_assign\xs_expand_and_assign\xs_NOM__}}
+ % si #3 existe : \NOM{\xs_ifstar{\let\xs_assign\xs_expand_and_detokenize\xs_NOM_}{\let\xs_assign\xs_expand_and_assign\xs_NOM_}}
+ % \xs_NOM_{\xs_testopt{\xs_NOM__}{#3}}}
+ \xs_reserved_B
+ \ifx\empty#3\empty
+ \xs_buildlines1{#4}{#3}{#1}%
+ \xs_assign_args{#4}%
+ \else
+ \xs_exparg{\xs_buildlines1}{\number\numexpr#4+1}{#3}{#1}%
+ \xs_assign_opt_args{#4}%
+ \fi
+ \edef\xs_reserved_B{\def\expandafter\noexpand\csname\xs_reserved_A __\endcsname\xs_myarg}%
+ \edef\xs_reserved_C{\unexpanded\expandafter{\xs_newlines}\edef\noexpand\xs_call}%
+ \edef\xs_reserved_D{\noexpand\noexpand\expandafter\noexpand\csname\xs_reserved_A\endcsname\unexpanded\expandafter{\xs_newargs}}%
+ \ifnum#5=1 \edef\xs_reserved_D{\noexpand\noexpand\noexpand\xs_testopt{\unexpanded\expandafter{\xs_reserved_D}}{}}\fi
+ \xs_edefaddtomacro\xs_reserved_C{{\unexpanded\expandafter{\xs_reserved_D}}\noexpand\xs_call}%
+ \xs_edefaddtomacro\xs_reserved_B{{\unexpanded\expandafter{\xs_reserved_C}}}%
+ % Que fait \xs_reserved_B ? Il définit par exemple pour 3 arguments obligatoires et 1 facultatif :
+ % \def\xs_NOM__[##2]##3##4##5{%
+ % \xs_def\xs_arg_i{##2}\xs_assign\xs_arg_ii{##3}\xs_assign\xs_arg_iii{##4}\xs_asign\xs_arg_iv{##5}%
+ % si #5=0: \edef\xs_call{\noexpand\xs_NOM[\xs_expand\xs_arg_i]{\xs_expand\xs_arg_ii}{\xs_expand\xs_arg_iii}{\xs_expand\xs_arg_iv}}%
+ % si #5=1: \edef\xs_call{\noexpand\xs_testopt{\noexpand\xs_NOM[\xs_expand\xs_arg_i]{\xs_expand\xs_arg_i}{\xs_expand\xs_arg_ii}{\xs_expand\xs_arg_iii}{\xs_expand\xs_arg_iv}}{}}%
+ % \xs_call}
+ \long\xs_reserved_B
+ \edef\xs_reserved_B{%
+ \def\expandafter\noexpand\csname\xs_reserved_A\endcsname
+ \xs_myarg\ifnum#5=1 [\unexpanded{##}\number\numexpr\ifx\empty#3\empty#4+1\else#4+2\fi]\fi
+ }%
+ % Que fait \xs_reserved_B ? Il définit par exemple pour 3 arguments obligatoires et 1 facultatif :
+ % \def \xs_NOM[##2]##3##4##5[##6]{#6}
+ \long\xs_reserved_B
+}
+
+% macro générique qui lit \xs_reserved_C us par us
+% 3 sous-routines sont appelées à des moments clé :
+% \xs_atendofgroup (un groupe se finit, appel récursif)
+% \xs_atbegingroup (un groupe vient d'être ouvert)
+% \xs_atnextsyntaxunit (la future US n'est pas un groupe)
+\def\xs_read_reserved_C{%
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ {\xs_ifnum{\xs_nestlevel=0 }
+ {}
+ {\xs_atendofgroup
+ \xs_read_reserved_C
+ }%
+ }
+ {\xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_C}\xs_reserved_A
+ \xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_C}\xs_reserved_C
+ \xs_exploregroups
+ \xs_ifx{\bgroup\xs_toks}
+ {\advance\integerpart1
+ \begingroup
+ \expandafter\def\expandafter\xs_reserved_C\xs_reserved_A
+ \xs_calc_grouIP
+ \def\xs_nestlevel{1}%
+ \integerpart0
+ \xs_atbegingroup
+ }
+ {\advance\decimalpart1
+ \xs_atnextsyntaxunit
+ }%
+ \xs_read_reserved_C
+ }%
+}
+
+% macro générique qui lit \xs_reserved_D en procédant à des tests avec \IfBeginWith
+% 1 sous-routine est appelée :
+% \xs_atoccurfound (une occurrence a été trouvée)
+\def\xs_read_reserved_D{%
+ \xs_exparg\xs_ifempty{\xs_reserved_D}%
+ {\xs_ifnum{\xs_nestlevel=0 }
+ {}
+ {\edef\__temp{%
+ \endgroup
+ \noexpand\decimalpart=\number\decimalpart\relax
+ \unexpanded{\xs_addtomacro\xs_reserved_C}{{\unexpanded\expandafter{\xs_reserved_C}}}%
+ }%
+ \__temp
+ \xs_read_reserved_D
+ }%
+ }%
+ {\xs_exptwoargs\xs_IfBeginWith_i\xs_reserved_D\xs_reserved_E
+ {\advance\decimalpart1
+ \let\xs_reserved_D\xs_reserved_A
+ \xs_atoccurfound
+ }%
+ {\xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_D}\xs_reserved_A
+ \xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_D}\xs_reserved_D
+ \xs_exploregroups
+ \xs_ifx{\bgroup\xs_toks}
+ {\advance\integerpart1
+ \begingroup
+ \expandafter\def\expandafter\xs_reserved_D\xs_reserved_A
+ \xs_calc_grouIP
+ \let\xs_reserved_C\empty
+ \def\xs_nestlevel{1}%
+ \integerpart0
+ }
+ {\xs_eaddtomacro\xs_reserved_C{\xs_reserved_A}%
+ }%
+ }%
+ \xs_read_reserved_D
+ }%
+}
+
+\xs_newmacro\StrRemoveBraces{}{1}{1}{%
+ \def\xs_reserved_C{#1}%
+ \let\xs_reserved_B\empty
+ \def\xs_nestlevel{0}%
+ \xs_StrRemoveBraces_i
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_B}{#2}%
+}
+
+\def\xs_StrRemoveBraces_i{%
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ {\xs_ifnum{\xs_nestlevel=0 }
+ {}
+ {\xs_endgroup_eaddtomacro\xs_reserved_B\xs_reserved_B
+ \xs_StrRemoveBraces_i
+ }%
+ }
+ {\xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_C}\xs_reserved_A
+ \xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_C}\xs_reserved_C
+ \xs_ifx{\bgroup\xs_toks}
+ {\xs_ifx{\xs_exploregroups\relax}% on explore les groupes ?
+ {\begingroup
+ \expandafter\def\expandafter\xs_reserved_C\xs_reserved_A
+ \def\xs_nestlevel{1}%
+ \let\xs_reserved_B\empty
+ }
+ {\expandafter\xs_addtomacro\expandafter\xs_reserved_B\xs_reserved_A
+ }%
+ }
+ {\xs_eaddtomacro\xs_reserved_B{\xs_reserved_A}%
+ }%
+ \xs_StrRemoveBraces_i
+ }%
+}
+
+% \xs_cutafteroccur coupe l'argument #1 après la #3ème occurrence de #2
+% \xs_reserved_C : contient ce qui se trouve avant cette occurrence
+% \xs_reserved_D : contient ce qui se trouve avant cette occurrence y compris cette occurrence
+% \xs_reserved_E : contient ce qui se trouve après l'occurrence
+% si l'occurrence n'existe pas ou qu'un des arguments est vide, toutes les chaines renvoyées sont vides
+\long\def\xs_cutafteroccur#1#2#3{%
+ \xs_ifnum{#3<1 }
+ {\let\xs_reserved_C\empty\let\xs_reserved_E\empty\gdef\groupID{}}
+ {\xs_cutafteroccur_i{#1}{#2}{#3}}%
+}
+
+\long\def\xs_cutafteroccur_i#1#2#3{%
+ \def\xs_reserved_D{#1}\let\xs_reserved_C\empty\def\xs_reserved_E{#2}%
+ \decimalpart0 \integerpart0 \gdef\groupID{0}\def\xs_nestlevel{0}%
+ \def\xs_atoccurfound{%
+ \xs_ifnum{\decimalpart=\numexpr(#3)\relax}
+ {\edef\__temp{%
+ \def\noexpand\xs_reserved_C{\unexpanded\expandafter{\xs_reserved_C}}%
+ \def\noexpand\xs_reserved_D{\unexpanded\expandafter{\xs_reserved_D}}%
+ \noexpand\decimalpart=\number\decimalpart\relax
+ }%
+ \expandafter\xs_exitallgroups\__temp
+ \xs_gobarg% mange l'appel récursif \xs_read_reserved_D dans \xs_read_reserved_D
+ }
+ {\xs_eaddtomacro\xs_reserved_C{\xs_reserved_E}%
+ }%
+ }%
+ \xs_read_reserved_D
+ \xs_ifnum{\decimalpart=\numexpr(#3)\relax}% occurrence trouvée ?
+ {\let\xs_reserved_E\xs_reserved_D
+ \xs_exparg{\def\xs_reserved_D}{\xs_reserved_C#2}%
+ }
+ {\let\xs_reserved_C\empty
+ \let\xs_reserved_E\empty
+ \gdef\groupID{}%
+ }%
+}
+
+\xs_newmacro*3\IfSubStr{1}{2}{0}{%
+ \xs_cutafteroccur{#2}{#3}{#1}%
+ \xs_exparg\xs_ifempty{\xs_reserved_D}\xs_execsecond\xs_execfirst
+}
+
+\xs_newmacro*2\IfBeginWith{}{2}{0}{%
+ \xs_ifempty{#2}%
+ {\xs_execsecond}
+ {\xs_IfBeginWith_i{#1}{#2}}%
+}
+
+\long\def\xs_IfBeginWith_i#1#2{%
+ \xs_ifempty{#2}%
+ {\xs_execfirst% #2 est vide, tous les tests sont passés avec succès : on renvoie #3
+ }
+ {\xs_ifempty{#1}%
+ {\xs_execsecond% #1 est vide, c'est que #2 est + long que #1 : on renvoie #4
+ }
+ {\xs_returnfirstsyntaxunit{#2}\xs_reserved_B
+ \xs_returnfirstsyntaxunit{#1}\xs_reserved_A
+ \xs_ifx{\xs_reserved_A\xs_reserved_B}% il y a égalité...
+ {\xs_removefirstsyntaxunit{#2}\xs_reserved_B
+ \xs_removefirstsyntaxunit{#1}\xs_reserved_A% on enlève les 1ere unités syntaxiques
+ \xs_exptwoargs\xs_IfBeginWith_i\xs_reserved_A\xs_reserved_B
+ }
+ {\xs_execsecond
+ }%
+ }%
+ }%
+}
+
+\xs_newmacro*2\IfEndWith{}{2}{0}{%
+ \xs_ifempty{#2}%
+ {\xs_execsecond
+ }
+ {\xs_StrCount{#1}{#2}[\xs_reserved_A]%
+ \xs_ifnum{\xs_reserved_A=0 }
+ {\xs_execsecond}
+ {\xs_exparg\xs_ifempty{\xs_reserved_C}}%
+ }%
+}
+
+\xs_newmacro*4\IfSubStrBefore{1,1}{3}{0}{\xs_IfSubStrBefore_i[#1]{#2}{#3}{#4}}
+
+\def\xs_IfSubStrBefore_i[#1,#2]#3#4#5{%
+ \def\xs_reserved_C{#3}%
+ \xs_ifx{\xs_exploregroups\relax}% si on explore les groupes
+ {\let\xs_reserved_B\empty
+ \def\xs_nestlevel{0}%
+ \xs_StrRemoveBraces_i% on retire les accolades
+ \let\xs_reserved_C\xs_reserved_B
+ }
+ {}%
+ \xs_exparg\xs_cutafteroccur\xs_reserved_C{#5}{#2}%
+ \xs_exparg\xs_cutafteroccur\xs_reserved_C{#4}{#1}%
+ \gdef\groupID{}%
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ \xs_execsecond
+ \xs_execfirst
+}
+
+\xs_newmacro*4\IfSubStrBehind{1,1}{3}{0}{\xs_IfSubStrBehind_i[#1]{#2}{#3}{#4}}
+\long\def\xs_IfSubStrBehind_i[#1,#2]#3#4#5{\xs_IfSubStrBefore_i[#2,#1]{#3}{#5}{#4}}
+
+\long\def\xs_formatnumber#1#2{%
+ \xs_ifempty{#1}%
+ {\def#2{0X}% si vide, renvoie 0X
+ }
+ {\xs_returnfirstsyntaxunit{#1}\xs_reserved_A
+ \def\xs_reserved_B{+}%
+ \xs_ifx{\xs_reserved_A\xs_reserved_B}
+ {\xs_removefirstsyntaxunit{#1}\xs_reserved_C
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ {\def#2{+0X}}
+ {\xs_exparg{\def#2}{\expandafter+\expandafter0\xs_reserved_C}}%
+ }
+ {\def\xs_reserved_B{-}%
+ \xs_ifx{\xs_reserved_A\xs_reserved_B}
+ {\xs_removefirstsyntaxunit{#1}\xs_reserved_A
+ \xs_exparg\xs_ifempty{\xs_reserved_A}%
+ {\def#2{-0X}}%
+ {\xs_exparg{\def#2}{\expandafter-\expandafter0\xs_reserved_A}}%
+ }
+ {\def#2{0#1}%
+ }%
+ }%
+ }%
+}
+
+\xs_newmacro\IfInteger{}{1}{0}{%
+ \xs_formatnumber{#1}\xs_reserved_A
+ \decimalpart0
+ \afterassignment\xs_defafterinteger\integerpart\xs_reserved_A\relax\_nil
+ \let\xs_after_intpart\afterinteger
+ \expandafter\xs_testdot\afterinteger\_nil
+ \xs_ifx{\empty\afterdecimal}
+ {\xs_ifnum{\decimalpart=0 }
+ {\xs_execfirst% partie décimale constituée de 0 --> seul cas où on renvoie vrai
+ }
+ {\expandafter\xs_defafterinteger\xs_after_intpart\relax\_nil
+ \xs_execsecond
+ }%
+ }
+ {\expandafter\xs_defafterinteger\xs_after_intpart\relax\_nil
+ \xs_execsecond
+ }%
+}
+
+\xs_newmacro\IfDecimal{}{1}{0}{%
+ \xs_formatnumber{#1}\xs_reserved_A
+ \decimalpart0
+ \afterassignment\xs_defafterinteger\integerpart\xs_reserved_A\relax\_nil
+ \expandafter\xs_testdot\afterinteger\_nil
+ \xs_ifx{\empty\afterdecimal}
+}
+
+\begingroup\catcode`\@ 11
+\long\gdef\xs_defafterinteger#1\relax\_nil{\def\@xs@afterinteger{#1}\let\afterinteger\@xs@afterinteger}
+\long\gdef\xs_defafterdecimal#1\_nil{\def\@xs@afterdecimal{#1}\let\afterdecimal\@xs@afterinteger}
+\endgroup
+
+\def\xs_testdot{%
+ \let\xs_decsep\empty
+ \xs_ifnxttok.
+ {\def\xs_decsep{.}\xs_readdecimalpart}%
+ {\xs_testcomma}%
+}
+
+\def\xs_testcomma{%
+ \xs_ifnxttok,
+ {\def\xs_dessep{,}\xs_readdecimalpart}%
+ {\xs_defafterdecimal}%
+}
+
+\long\def\xs_readdecimalpart#1#2\_nil{%
+ \xs_ifempty{#2}
+ {\def\xs_reserved_A{0X}}
+ {\def\xs_reserved_A{0#2}}%
+ \afterassignment\xs_defafterinteger\decimalpart\xs_reserved_A\relax\_nil
+ \expandafter\xs_defafterdecimal\afterinteger\_nil
+}
+
+% test d'égalité sur des chaines (et des chaines contenant des nombres)
+\long\def\xs_IfStrEqFalse_i#1#2{\let\xs_reserved_A\xs_execsecond}
+\long\def\xs_IfStrEqFalse_ii#1#2{% renvoie vrai si les 2 arg sont décimaux et s'ils sont égaux, faux sinon
+ \xs_IfDecimal{#1}%
+ {\xs_IfDecimal{#2}%
+ {\ifdim#1pt=#2pt
+ \let\xs_reserved_A\xs_execfirst
+ \else
+ \let\xs_reserved_A\xs_execsecond
+ \fi% les 2 sont décimaux : on fait le test
+ }%
+ {\let\xs_reserved_A\xs_execsecond}% un seul est décimal
+ }%
+ {\let\xs_reserved_A\xs_execsecond}% #1 n'est pas décimal
+}
+
+\long\def\xs_TestEqual#1#2{% teste si les 2 arguments sont égaux
+ \def\xs_reserved_A{#1}\def\xs_reserved_B{#2}%
+ \xs_ifx{\xs_reserved_A\xs_reserved_B}
+ {\let\xs_reserved_A\xs_execfirst}% égalité parfaite des 2 chaines
+ {\xs_reserved_D{#1}{#2}}%
+ \xs_reserved_A
+}
+
+\xs_newmacro*2\IfStrEq{}{2}{0}{% teste si les deux chaines sont égales
+ \let\xs_reserved_D\xs_IfStrEqFalse_i
+ \xs_TestEqual{#1}{#2}%
+}
+
+\xs_newmacro*2\IfEq{}{2}{0}{% teste si les 2 arguments (chaine ou nombre) sont égaux
+ \let\xs_reserved_D\xs_IfStrEqFalse_ii
+ \xs_TestEqual{#1}{#2}%
+}
+
+\def\IfStrEqCase{%
+ \xs_ifstar
+ {\xs_IfStringCase{\IfStrEq*}}%
+ {\xs_IfStringCase\IfStrEq}%
+}
+
+\def\IfEqCase{%
+ \xs_ifstar
+ {\xs_IfStringCase{\IfEq*}}%
+ {\xs_IfStringCase\IfEq}%
+}
+
+\long\def\xs_IfStringCase#1#2#3{% #1=macro avec ou sans étoile #2=argument à tester #3=liste des {<cas>}{code>}
+ \long\def\xs_testcase##1##2##3\_nil{% lit les 2 premieres unités syntaxiques dans ##1 et ##2. Les autres dans ##3
+ #1{#2}{##1}% compare
+ {\xs_testopt{\xs_IfStringCase_ii{##2}}{}}% le test est positif, on exécute le code correspondant et on mange l'argument optionnel ## BUGfix dans 1.82
+ {\xs_ifempty{##3}%
+ {\xs_testopt{\xs_IfStringCase_i}{}}% s'il n'y a plus de cas, on exécute le code <autres cas> ## BUGfix dans 1.82
+ {\xs_testcase##3\_nil}% sinon, on recommence avec ce qui reste
+ }%
+ }%
+ \xs_testcase#3\_nil
+}
+
+\long\def\xs_IfStringCase_i[#1]{#1}
+\long\def\xs_IfStringCase_ii#1[#2]{#1}
+
+% Renvoie ce qui est à gauche de l'occurence n°#1 de la sous chaine #3 dans la chaine #2
+\xs_newmacro*3\StrBefore{1}{2}{1}{%
+ \xs_cutafteroccur{#2}{#3}{#1}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_C}{#4}%
+}
+
+% Renvoie ce qui est à droite de l'occurence n°#1 de la sous chaine #3 dans la chaine #2
+\xs_newmacro*3\StrBehind{1}{2}{1}{%
+ \xs_cutafteroccur{#2}{#3}{#1}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_E}{#4}%
+}
+
+% Renvoie ce qui est strictement compris entre les occurrences n°#1 et n°#2
+% des chaines #4 et #5 dans la chaine #3
+\xs_newmacro*4\StrBetween{1,1}{3}{1}{\xs_StrBetween_i[#1]{#2}{#3}{#4}[#5]}
+\long\def\xs_StrBetween_i[#1,#2]#3#4#5[#6]{%
+ \begingroup
+ \noexploregroups
+ \xs_cutafteroccur{#3}{#5}{#2}%
+ \xs_exparg\xs_cutafteroccur{\xs_reserved_C}{#4}{#1}%
+ \expandafter
+ \endgroup
+ \expandafter\xs_assign_xstringresult\expandafter{\xs_reserved_E}{#6}%
+ \gdef\groupID{}%
+}
+
+\def\exploregroups{\let\xs_exploregroups\relax}
+\def\noexploregroups{\def\xs_exploregroups{\let\xs_toks\relax}}
+\def\saveexploremode{\let\xs_saveexploremode\xs_exploregroups}
+\def\restoreexploremode{\let\xs_exploregroups\xs_saveexploremode}
+
+% Remplace les #1 premières occurences de la chaine #3
+% par la chaine #4 dans la chaine #2
+\xs_newmacro\StrSubstitute{0}{3}{1}{%
+ \def\xs_reserved_D{#2}\let\xs_reserved_C\empty\def\xs_reserved_E{#3}%
+ \decimalpart0 \integerpart0 \gdef\groupID{0}\def\xs_nestlevel{0}%
+ \def\xs_atoccurfound{%
+ \xs_ifnum{#1<1 }
+ {\def\xs_reserved_A{#4}}
+ {\xs_ifnum{\decimalpart>#1 }
+ {\def\xs_reserved_A{#3}}
+ {\def\xs_reserved_A{#4}}%
+ }%
+ \xs_eaddtomacro\xs_reserved_C{\xs_reserved_A}%
+ }%
+ \xs_ifempty{#3}%
+ {\xs_exparg\xs_assign_xstringresult{\xs_reserved_D}{#5}%
+ }
+ {\xs_read_reserved_D
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_C}{#5}%
+ }%
+}
+
+% Supprime les #1 premières occurrences de #3 dans #2
+\xs_newmacro\StrDel{0}{2}{1}{\xs_StrSubstitute[#1]{#2}{#3}{}[#4]}
+
+\def\xs_exitallgroups{\ifnum\xs_nestlevel>0 \endgroup\expandafter\xs_exitallgroups\fi}
+
+% Compte combien d'unités syntaxiques contient la chaine #1 ?
+\xs_newmacro\StrLen{}{1}{1}{%
+ \def\xs_reserved_C{#1}\decimalpart0 \def\xs_nestlevel{0}\gdef\groupID{0}%
+ \let\xs_atbegingroup\relax
+ \def\xs_atendofgroup{\expandafter\endgroup\expandafter\decimalpart\number\decimalpart\relax}%
+ \let\xs_atnextsyntaxunit\relax
+ \xs_read_reserved_C
+ \xs_exparg\xs_assign_xstringresult{\number\decimalpart}{#2}%
+}
+
+% Macro interne fermant autant de groupes que nécessaire pour trouver une unité syntaxique derrière
+\def\xs_continuetonext{%
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ {\ifnum\xs_nestlevel>0
+ \xs_endgroup_eaddtomacro\xs_reserved_B{\expandafter{\xs_reserved_B}}% on concatène
+ \expandafter\xs_continuetonext% on recommence
+ \fi}
+ {}%
+}%
+
+\def\xs_calc_grouIP{%
+ \begingroup\def\xs_reserved_A{0}%
+ \xs_ifx{\xs_reserved_A\groupID}% si on arrive du groupe de niveau 0
+ {\endgroup\xdef\groupID{\number\integerpart}}% on met simplement le niveau
+ {\endgroup\xs_eearg{\gdef\groupID}{\expandafter\groupID\expandafter,\number\integerpart}}%
+}
+
+% Cette macro coupe la chaine #1 après l'unité syntaxique n°#2
+\def\StrSplit{%
+ \xs_ifstar
+ {\let\xs_reserved_E\xs_continuetonext\StrSplit_i}%
+ {\let\xs_reserved_E\relax\StrSplit_i}%
+}
+
+\xs_newmacro\StrSplit_i{}{2}{0}{\xs_StrSplit_ii{#2}{#1}\xs_StrSplit_iii}
+
+% Cette macro interne coupe la chaine #2 après l'unité syntaxique n°#1
+% Le début est assigné dans \xs_reserved_B et la fin dans \xs_reserved_C
+\long\def\xs_StrSplit_ii#1#2{%
+ \let\xs_reserved_B\empty\def\xs_reserved_C{#2}\def\xs_reserved_D{#1}\gdef\groupID{}%
+ \ifnum#1>0
+ \decimalpart0 \integerpart0 \gdef\groupID{0}\def\xs_nestlevel{0}%
+ \def\xs_atendofgroup{%
+ \edef\__temp{%
+ \endgroup
+ \noexpand\decimalpart=\number\decimalpart\relax
+ \unexpanded{\xs_addtomacro\xs_reserved_B}{{\unexpanded\expandafter{\xs_reserved_B}}}%
+ }%
+ \__temp
+ }%
+ \def\xs_atbegingroup{\let\xs_reserved_B\empty}%
+ \def\xs_atnextsyntaxunit{%
+ \xs_eaddtomacro\xs_reserved_B{\xs_reserved_A}%
+ \xs_ifnum{\decimalpart=\xs_reserved_D\relax}
+ {\ifx\xs_reserved_C\empty\xs_reserved_E\fi
+ \edef\__temp{\def\noexpand\xs_reserved_B{\unexpanded\expandafter{\xs_reserved_B}}\def\noexpand\xs_reserved_C{\unexpanded\expandafter{\xs_reserved_C}}}%
+ \expandafter\xs_exitallgroups\__temp
+ \xs_gobarg% mange l'appel récursif \xs_read_reserved_C dans \xs_read_reserved_C
+ }
+ {}%
+ }%
+ \xs_read_reserved_C
+ \fi
+}
+
+\def\xs_StrSplit_iii#1#2{\let#1\xs_reserved_B\let#2\xs_reserved_C}
+
+% StrCut[n]{<texte>}{<motif>}\macroA\macroB
+% \macroA reçoit ce qui se trouve avant la n ème occurrence <motif> dans <texte>
+% \macroB reçoit ce qui est après cette n ème occurrence
+\xs_newmacro*3\StrCut{1}{2}{0}{%
+ \xs_ifempty{#3}%
+ {\gdef\groupID{}\let\xs_reserved_C\empty\let\xs_reserved_E\empty
+ }
+ {\xs_ifnum{#1<1 }
+ {\xs_StrCut_ii{#2}{#3}1}
+ {\xs_StrCut_ii{#2}{#3}{#1}}%
+ }%
+ \xs_StrCut_iii
+}
+
+\long\def\xs_StrCut_ii#1#2#3{%
+ \let\xs_reserved_C\empty\def\xs_reserved_D{#1}\def\xs_reserved_E{#2}%
+ \decimalpart0 \integerpart0 \gdef\groupID{0}\def\xs_nestlevel{0}%
+ \def\xs_atoccurfound{%
+ \xs_ifnum{\decimalpart=\numexpr(#3)\relax}
+ {\edef\__temp{%
+ \def\noexpand\xs_reserved_C{\unexpanded\expandafter{\xs_reserved_C}}%
+ \def\noexpand\xs_reserved_D{\unexpanded\expandafter{\xs_reserved_D}}%
+ \noexpand\decimalpart=\number\decimalpart\relax
+ }%
+ \expandafter\xs_exitallgroups\__temp
+ \xs_gobarg% stoppe la récursivité dans \xs_read_reserved_D
+ }
+ {\xs_eaddtomacro\xs_reserved_C{\xs_reserved_E}%
+ }%
+ }%
+ \xs_read_reserved_D
+ \let\xs_reserved_E\xs_reserved_D
+ \xs_exparg{\def\xs_reserved_D}{\xs_reserved_C#2}%
+}
+
+\long\def\xs_StrCut_iii#1#2{\let#1\xs_reserved_C\let#2\xs_reserved_E}
+
+% De la chaine #1, renvoie ce qui se trouve entre les positions
+% #2 et #3, unités syntaxiques aux positions compris !
+\xs_newmacro\StrMid{}{3}{1}{%
+ \begingroup
+ \noexploregroups
+ \let\xs_reserved_E\relax
+ \xs_StrSplit_ii{#3}{#1}%
+ \edef\xs_reserved_C{\number\numexpr#2-1}%
+ \let\xs_reserved_E\relax
+ \xs_exptwoargs\xs_StrSplit_ii\xs_reserved_C\xs_reserved_B
+ \expandafter\endgroup
+ \expandafter\xs_assign_xstringresult\expandafter{\xs_reserved_C}{#4}%
+ \gdef\groupID{}%
+}
+
+% supprime #2 unités syntaxiques à gauche dans la chaine #1
+\xs_newmacro\StrGobbleLeft{}{2}{1}{%
+ \let\xs_reserved_E\relax
+ \xs_StrSplit_ii{#2}{#1}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_C}{#3}%
+}
+
+% extrait de #1 la chaine à gauche de longueur #2
+\xs_newmacro\StrLeft{}{2}{1}{%
+ \let\xs_reserved_E\relax
+ \xs_StrSplit_ii{#2}{#1}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_B}{#3}%
+}
+
+% supprime #2 unités syntaxiques à droite dans la chaine #1
+\xs_newmacro\StrGobbleRight{}{2}{1}{%
+ \xs_StrLen{#1}[\xs_reserved_D]%
+ \let\xs_reserved_E\relax
+ \xs_exparg\xs_StrSplit_ii{\number\numexpr\xs_reserved_D-#2}{#1}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_B}{#3}%
+}
+
+% renvoie #2 unités syntaxiques à la droite de la chaine #1
+\xs_newmacro\StrRight{}{2}{1}{%
+ \xs_StrLen{#1}[\xs_reserved_D]%
+ \let\xs_reserved_E\relax
+ \xs_exparg\xs_StrSplit_ii{\number\numexpr\xs_reserved_D-#2}{#1}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_C}{#3}%
+}
+
+\xs_newmacro\StrChar{}{2}{1}{%
+ \let\xs_reserved_B\empty\def\xs_reserved_C{#1}\def\xs_reserved_D{#2}%
+ \ifnum#2>0
+ \def\groupID{0}\def\xs_nestlevel{0}\integerpart0 \decimalpart0
+ \let\xs_atbegingroup\relax
+ \def\xs_atendofgroup{\expandafter\endgroup\expandafter\decimalpart\number\decimalpart\relax}%
+ \def\xs_atnextsyntaxunit{%
+ \ifnum\decimalpart=\xs_reserved_D% la n ième US est atteinte ?
+ \edef\__temp{\def\noexpand\xs_reserved_B{\unexpanded\expandafter{\xs_reserved_A}}}% on capture l'US en cours qui est celle cherchée
+ \expandafter\xs_exitallgroups\__temp
+ \expandafter\xs_gobarg% stoppe la récursivité dans \xs_read_reserved_C
+ \fi
+ }%
+ \xs_read_reserved_C
+ \fi
+ \xs_exparg\xs_ifempty{\xs_reserved_B}%
+ {\gdef\groupID{}}
+ {}%
+ \xs_exparg\xs_assign_xstringresult{\xs_reserved_B}{#3}%
+}
+
+% Combien de fois compte t-on #2 dans #1 ?
+\xs_newmacro\StrCount{}{2}{1}{%
+ \def\xs_reserved_D{#1}\def\xs_reserved_E{#2}\let\xs_reserved_C\empty
+ \xs_ifempty{#2}%
+ {\xs_assign_xstringresult{0}{#3}%
+ }
+ {\decimalpart0 \integerpart0 \gdef\groupID{0}\def\xs_nestlevel{0}%
+ \def\xs_atoccurfound{\let\xs_reserved_C\empty\xs_read_reserved_D}%
+ \xs_read_reserved_D
+ \xs_exparg\xs_assign_xstringresult{\number\decimalpart}{#3}%
+ }%
+}
+
+% renvoie la position de l'occurrence #1 de la sous chaine #3 dans la chaine #2
+\xs_newmacro\StrPosition{1}{2}{1}{%
+ \xs_cutafteroccur{#2}{#3}{#1}%
+ \let\xs_reserved_E\groupID
+ \xs_ifx{\xs_reserved_C\xs_reserved_D}
+ {\xs_assign_xstringresult{0}{#4}%
+ \let\xs_reserved_E\empty
+ }
+ {\xs_exparg\xs_StrLen{\xs_reserved_C}[\xs_reserved_C]%
+ \xs_exparg\xs_assign_xstringresult{\number\numexpr\xs_reserved_C+1}{#4}%
+ }%
+ \global\let\groupID\xs_reserved_E
+}
+
+\def\comparestrict{\def\xs_comparecoeff{1}}
+\def\comparenormal{\def\xs_comparecoeff{0}}
+\def\savecomparemode{\let\xs_saved_comparecoeff\xs_comparecoeff}
+\def\restorecomparemode{\let\xs_comparecoeff\xs_saved_comparecoeff}
+
+% Compare les deux arguments #1 et #2
+% Renvoie 0 s'ils sont égaux et renvoie la
+% position de la premiere unité syntaxiques différente sinon
+\xs_newmacro*2\StrCompare{}{2}{1}{%
+ \def\xs_reserved_A{#1}%
+ \def\xs_reserved_B{#2}%
+ \xs_ifx{\xs_reserved_B\xs_reserved_A}
+ {\xs_assign_xstringresult{0}{#3}}
+ {\xs_StrCompare_i{#1}{#2}{#3}}%
+}
+
+\long\def\xs_StrCompare_i#1#2#3{%
+ \def\xs_StrCompare_iii##1{%
+ \let\xs_reserved_A\empty
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ {\edef\xs_reserved_A{*\xs_comparecoeff}}%
+ {\xs_exparg\xs_ifempty{\xs_reserved_D}%
+ {\edef\xs_reserved_A{*\xs_comparecoeff}}
+ {}%
+ }%
+ \def\xs_next{\xs_exparg\xs_assign_xstringresult{\number\numexpr##1\xs_reserved_A\relax}{#3}}%
+ }%
+ \def\xs_StrCompare_ii##1{% ##1 est la position
+ \xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_C}\xs_reserved_A
+ \xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_D}\xs_reserved_B
+ \xs_ifx{\xs_reserved_B\xs_reserved_A}
+ {\xs_exparg\xs_ifempty{\xs_reserved_A}%
+ {\xs_StrCompare_iii{##1}% les 2 unités syntaxiques sont égales, on renvoie la position
+ }
+ {\def\xs_next{\xs_exparg\xs_StrCompare_ii{\number\numexpr##1+1}}% les 2 unités syntaxiques sont égales et non vides, on recommence
+ \xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_C}\xs_reserved_C
+ \xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_D}\xs_reserved_D
+ }%
+ }% les 2 unités syntaxiques sont différentes : on renvoie la position
+ {\xs_StrCompare_iii{##1}%
+ }%
+ \xs_next
+ }%
+ \def\xs_reserved_C{#1}\def\xs_reserved_D{#2}%
+ \xs_StrCompare_ii1%
+}
+
+\xs_newmacro\StrFindGroup{}{2}{1}{%
+ \def\xs_reserved_A{#2}\def\xs_reserved_B{0}%
+ \xs_ifx{\xs_reserved_A\xs_reserved_B}
+ {\xs_assign_xstringresult{{#1}}{#3}}
+ {\xs_StrFindGroup_i{#1}{#2}[#3]}%
+}
+
+\long\def\xs_StrFindGroup_i#1#2[#3]{%
+ \def\xs_StrFindGroup_ii{%
+ \xs_exparg\xs_ifempty{\xs_reserved_C}%
+ {\xs_assign_xstringresult{}{#3}% s'il ne reste plus rien, on renvoie vide
+ }
+ {\xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_C}\xs_reserved_D
+ \xs_ifx{\bgroup\xs_toks}% si la 1ère unité syntaxique est un groupe explicite
+ {\advance\decimalpart1 % on augmente le compteur
+ \xs_ifnum{\decimalpart=\xs_reserved_A\relax}% on est au groupe cherché lors de la profondeur courante ?
+ {\xs_ifx{\empty\xs_reserved_B}% on est à la profondeur maximale ?
+ {\xs_exparg\xs_assign_xstringresult{\xs_reserved_D}{#3}}% on renvoie ce groupe
+ {\xs_exparg{\expandafter\xs_StrFindGroup_i\xs_reserved_D}{\xs_reserved_B}[#3]}% on recommence avec ce groupe et les profondeurs de recherche restantes
+ }
+ {\xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_C}\xs_reserved_C
+ \xs_StrFindGroup_ii
+ }%
+ }
+ {\xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_C}\xs_reserved_C
+ \xs_StrFindGroup_ii
+ }%
+ }%
+ }%
+ \xs_extractgroupnumber{#2}\xs_reserved_A\xs_reserved_B
+ \decimalpart0
+ \xs_ifnum{\xs_reserved_A>0 }
+ {\def\xs_reserved_C{#1}}
+ {\let\xs_reserved_C\empty}%
+ \xs_StrFindGroup_ii
+}
+
+\def\xs_extractgroupnumber#1#2#3{%
+ \def\xs_extractgroupnumber_i##1,##2\_nil{\def#2{##1}\def#3{##2}}%
+ \xs_extractgroupnumber_i#1,\_nil
+ \ifx\empty#3\else\xs_extractgroupnumber_i#1\_nil\fi
+}
+
+\def\expandingroups{\let\xs_expandingroups\exploregroups}
+
+\def\noexpandingroups{\let\xs_expandingroups\noexploregroups}
+
+\def\StrExpand{\xs_testopt{\xs_StrExpand}{1}}
+\long\def\xs_StrExpand[#1]#2#3{%
+ \begingroup
+ \xs_expandingroups
+ \xs_ifnum{#1>0 }
+ {\integerpart#1 \decimalpart0 \gdef\groupID{0}\def\xs_nestlevel{0}%
+ \def\xs_atendofgroup{\xs_endgroup_eaddtomacro\xs_reserved_B{\expandafter{\xs_reserved_B}}}%
+ \def\xs_atbegingroup{\let\xs_reserved_B\empty}%
+ \def\xs_atnextsyntaxunit{\xs_eeaddtomacro\xs_reserved_B{\xs_reserved_A}}%
+ \def\xs_reserved_C{#2}%
+ \xs_StrExpand_i{#1}% Appel de la macro récursive
+ }
+ {\def\xs_reserved_B{#2}%
+ }
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter#3\expandafter{\xs_reserved_B}%
+ \gdef\groupID{}%
+}
+
+\long\def\xs_StrExpand_i#1{%
+ \xs_ifnum{#1>0 }
+ {\let\xs_reserved_B\empty
+ \xs_read_reserved_C
+ \let\xs_reserved_C\xs_reserved_B
+ \def\xs_reserved_A{\xs_exparg\xs_StrExpand_i{\number\numexpr#1-1}}%
+ }
+ {\let\xs_reserved_A\relax
+ }%
+ \xs_reserved_A
+}
+
+\def\scancs{\xs_testopt{\xs_scancs}{1}}
+\long\def\xs_scancs[#1]#2#3{%
+ \xs_StrExpand[#1]{#3}{#2}%
+ \edef#2{\detokenize\expandafter{#2}}%
+}
+
+\restorexstringcatcode
+
+\setverbdelim{|}%
+\fullexpandarg\saveexpandmode
+\comparenormal\savecomparemode
+\noexploregroups\saveexploremode
+\expandingroups
+
+\endinput
+
+ H I S T O R I Q U E
+------------------------------------------------------------------------------
+v1.0 4/7/2008 : - Package achevé.
+ 7/7/2008 : - Package publié sur CTAN.
+------------------------------------------------------------------------------
+v1.1 15/8/2008
+ - Le package ne nécessite plus LaTeX et est désormais utilisable sous
+ Plain eTeX.
+ - Ajout des macros \IfInteger et \IfDecimal.
+ Pour cette dernière, la partie entière et la partie décimale sont
+ récupérables dans les compteurs \integerpart et \decimalpart. Ce
+ qu'il reste après qu'un caractère non attendu soit rencontré est
+ dispo dans \xs_remainafterdecimal
+ - Correction d'un bug dans \tokenize :
+ suppression de l'expansion avec \normalexpandarg pour éviter le bug
+ avec les lettres accentuées dans l'exemple : \tokenize\aa{éù}
+ - Amélioration du code de la plupart des macros.
+ - écriture d'une routine \xs_newmacro définissant les macros.
+ - Suppression de tous les compteurs grace à \numexpr.
+ - Nouvelles fonctionnalités internes dans :
+ \IfSubStr
+ ajout des chaines se trouvant avant et après l'occurrence testée
+ dans les sc \xs_behind_IfSubStr et \xs_before_IfSubStr
+ \StrCount
+ a) ajout de ce qui se trouve après la dernière occurrence dans la
+ sc \xs_StrCount_afterlastocccur
+ b) la macro ne dépend plus d'aucune autre
+------------------------------------------------------------------------------
+v1.2 23/8/2008
+ - Amélioration du code de \StrMid \StrGobbleLeft, \StrLeft,
+ \StrGobbleRight et \StrRight à l'aide de la nouvelle macro
+ \xs_StrSplit_i
+ - Nouveau test \IfStrEq qui compare 2 chaines
+ - Nouveau test \IfEq qui compare 2 chaines (ou 2 nombres si les 2 chaines
+ contiennent un nombre)
+ - Correction d'un bug dans \xs_formatnumber. La macro n'envisageait pas le
+ cas où son argument était vide ce qui faiasait planter
+ \IfDecimal{}{V}{F} et \IfInteger{}{V}{F}
+------------------------------------------------------------------------------
+v1.3 21/9/2008
+ - Amélioration du code, mise en place de récursivités terminales dans
+ toutes les macros récursives, simplification de \xs_TestEqual en
+ utilisant \ifx
+ - Nouvelles macros \IfStrEqCase et \IfEqCase
+ Teste si une chaîne est égale à plusieurs chaines données et
+ exécute un code spécifique
+ - Création de la macro publique \StrSplit
+ Coupe la chaine en 2 à une position donnée
+ - Nouvelle macro \StrCompare
+ Compare 2 chaînes et renvoie la position du 1er caractère différent.
+ Renvoie 0 si elles sont égales.
+------------------------------------------------------------------------------
+v1.3a 29/9/2008
+ - Correction d'un bug : \expandafter#1
+ dans les macros \IfSubStrBefore et \StrBetween qui buggue si #1 est un
+ nombre > 9 !
+ - Ré écriture de \xs_returnfirstsyntaxunit et \xs_gobarg qui
+ deviennent purement développables.
+ - Ré écriture de \StrLen
+ - Nouvelle macro interne \xs_cutafteroccur
+ Coupe la chaine après la nième occurrence d'une sous chaine.
+ - Code amélioré de \StrMid, \StrLeft, \StrGobbleLeft, \StrRight,
+ \StrGobbleRight grace à \xs_cutafteroccur
+------------------------------------------------------------------------------
+v1.4 4/11/2008
+ - xstring traite ses arguments par unité syntaxique, et donc toutes les
+ macros internes ont été ré-écrites à cette fin.
+ - Le manuel a été ré-écrit, rendu plus clair et mieux structuré.
+ - Nouvelle fonctionnalité : \expandarg
+ le 1er lexème de chaque argument est 1-développé avant que la
+ macro ne soit appelée. Si un argument comporte plus qu'1 lexème,
+ il faut passer par \scancs*[1] pour 1-développer toutes les unités
+ syntaxiques.
+ - Correction de 2 erreurs dans le manuel anglais : 0 est la valeur par
+ défaut dans \StrSubstitute et \StrDel
+ - Cohérence dans les nom des séquences de contrôles temporaires qui
+ sont désormais : \xs_reserved_A à \xs_reserved_E
+------------------------------------------------------------------------------
+v1.4a 12/11/2008
+ - Correction d'un bug dans \xs_StrSplit dans le cas où l'argument
+ numérique est <1 : la 1ere coupure doit être vide et le seconde doit
+ être égale à l'argument.
+------------------------------------------------------------------------------
+v1.4b 16/11/2008
+ - Correction de 2 bugs dans \xs_returnfirstsyntaxunit
+------------------------------------------------------------------------------
+v1.5 31/12/2008
+ - Nouvelles fonctionnalités dans la recherche de groupes par un
+ identificateur caractérisant leur imbrication. Implémentation de :
+ 1) \StrFindGroup
+ 2) \groupID
+ - Ajout des nouvelles macros génériques \xs_read_reserved_C et
+ \xs_read_reserved_D
+ - Correction d'un bug dans \StrSplit : \StrSplit{{a}bc}{1}[\truc] faisait
+ que \truc contenait «a{a}».
+ - Correction d'un bug dans \xs_newmacro : l'argument optionnel était
+ détokénisé à tort dans les macros étoilées.
+ - Dans \xs_newmacro, on doit choisir le numéro du dernier argument devant
+ être détokénisé dans le cas d'une macro étoilée (sachant que
+ l'argument optionnel ne l'est jamais)
+------------------------------------------------------------------------------
+v1.5a 09/2/2009
+ - Nouvelle macro \StrExpand, sensible au mode d'exploration. La macro est
+ indépendante du mode d'exploration et dispose de ses propres commandes
+ d'exploration : \expandingroups et \noexpandingroups
+ - Ré-écriture de \scancs, qui devient triviale puisque dépendant de
+ \StrExpand. Il n'y a plus de version étoilée et désormais, \scancs
+ est sensible au mode d'exploration.
+ - Correction d'un bug dans \IfInteger : \IfInteger{2.0}{V}{F} affichait F
+ - Correction de bugs : mettre \let\xs_reserved_E\relax avant d'appeler
+ \xs_StrSplit_i
+ - Suppression des messages d'erreur, de warning et d'info. xstring devient
+ donc silencieux ;)
+ - Passage de 3 à 2 compteurs
+ - Le manuel est désormais plus coloré, en espérant qu'il sera un peu
+ plus agréable à lire !
+------------------------------------------------------------------------------
+v1.5b 13/3/2009
+ - Modification d'un grand nombre de macros de telle sorte que vraiment
+ n'importe quel code peut désormais être placé dans les arguments des
+ macros (comme par exemple des \if, \ifx ou autre, même sans leur \fi, ce
+ qui n'était pas possible jusqu'alors)
+------------------------------------------------------------------------------
+v1.5c 05/6/2009
+ - Correction d'un bug dans \IfBeginWith : il faut appeler
+ \xs_returnfirstsyntaxunit pour l'argument #2 puis pour l'argument #1 et
+ non pas l'inverse pour que \xs_toks reflète ce qui se trouve dans #1
+ - Correction d'un bug dans \xs_returnfirstsyntaxunit au cas où #1 commence
+ par un espace : mettre \xs_toks à 0
+ - Correction d'un bug dans \xs_returnfirstsyntaxunit :
+ \xs_returnfirstsyntaxunit{{}}\truc
+ faisait que \truc se développait en un espace.
+ - Correction d'un bug dans \xs_removefirstsyntaxunit où le cas
+ \xs_removefirstsyntaxunit{ {b}}\truc
+ donnait \truc se développant en «b» au lieu de «{b}».
+------------------------------------------------------------------------------
+v1.5d 28/3/2010
+ - Correction d'un bug dans \IfInteger : \afterinteger ne donnait pas le
+ bon résultat. Par exemple avec 1.23 il renvoyait {} au lieu de {.23}
+ - \xs_formatnumber ne detokenize plus ses arguments (que m'est-il passé
+ par la tête pour que je code un truc comme ca ?), et donc
+ \afterinteger et \xs_afterdecimal ont des tokens ayant le bon
+ catcode
+------------------------------------------------------------------------------
+v1.6 24/10/2012
+ - Correction d'un bug dans \xs_cutafteroccur au cas où #3<1
+ - \IfDecimal ne \detokenize plus l'argument.
+ - Nouvelle version de \tokenize qui enlevait les accolades si son argument
+ était entre accolades
+ - Nouvelle macro \StrCut
+ - \xs_cutafteroccur_i ne produit plus d'espace indésirable si #3 était
+ évalué par \numexpr
+------------------------------------------------------------------------------
+v1.7 13/1/2013
+ - Correction d'un manque de rigueur dans les assignations concernant
+ \groupID : elles sont toutes globales désormais
+ - Les macros de xstring sont \long
+------------------------------------------------------------------------------
+v1.7a 28/2/2013
+ - Correction d'un espace parasite dans \xs_removefirstsyntaxunit
+------------------------------------------------------------------------------
+v1.7b 29/7/2013
+ - La date contenue dans \xstringdate est désormais conforme
+------------------------------------------------------------------------------
+v1.7c 13/10/2013
+ - les macros impliquées dans \IfStrCase et \IfStrEqCase sont désormais \long
+------------------------------------------------------------------------------
+v1.8 07/12/2018
+ - affectations globales supprimées (sauf pour \groupID) afin de ne pas
+ surcharger la pile de sauvegarde
+ - nettoyage du code, corrections de lourdeurs et maladresses
+------------------------------------------------------------------------------
+v1.81 09/12/2018
+ - bug dans \IfInteger et \IfDecimal, la macro \xs_afterdecimal est indéfinie
+ et doit être remplacée par \afterdecimal
+------------------------------------------------------------------------------
+v1.82 01/02/2019
+ - \xs_testopt n'est pas longue et provoque un bug dans \xs_IfStrCase et
+ \xs_IfStrCase lorsque #1 contient \par : \xs_testopt reste courte et
+ \xs_IfStringCase a été modifiée pour que cela fonctionne.
+ ------------------------------------------------------------------------------
+v1.83 06/02/2019
+ - mauvaise approche et mauvais fix dans la v1.82 : \xs_testopt devient
+ longue, pas le choix (et donc aussi \xs_ifnxttok) \ No newline at end of file
diff --git a/macros/generic/yax/README b/macros/generic/yax/README
new file mode 100644
index 0000000000..681393c849
--- /dev/null
+++ b/macros/generic/yax/README
@@ -0,0 +1,26 @@
+This is the README file for the YaX package.
+Author: Paul Isambert.
+E-mail: zappathustra AT free DOT fr
+Comments and suggestions are welcome.
+Date: January 2011.
+
+The package is a format-independent key system,
+with some peculiarities.
+It is format-independent and based on texapi
+(and thus requires e-TeX at least).
+Relevant information can be found in yax-doc.pdf
+
+Files in this distributions:
+
+yax.tex => The bulk of the code.
+t-yax.tex => A wrapper file for ConTeXt.
+yax.sty => A wrapper file for LaTeX.
+yax-doc.tex => The source of the documentation.
+yax-doc.pdf => The typeset documentation.
+
+To process the documentation source, you need the
+piTeX files (available on CTAN) on top of plain TeX
+with LuaTeX at least v.0.6... except the current version
+of PiTeX on CTAN is too old.
+
+Licensing of this package is covered by LPPL.
diff --git a/macros/generic/yax/t-yax.tex b/macros/generic/yax/t-yax.tex
new file mode 100644
index 0000000000..a85981e3c6
--- /dev/null
+++ b/macros/generic/yax/t-yax.tex
@@ -0,0 +1,24 @@
+% This is t-yax.tex, a third-party file to load
+% the YaX package in ConTeXt. Useful information
+% can be found in yax-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: January 2011.
+%
+%D \module
+%D [ file=t-yax,
+%D version=2011.01.22,
+%D title=\CONTEXT\ User Module,
+%D subtitle=YaX,
+%D author=Paul Isambert,
+%D date=\currentdate,
+%D copyright=Paul Isambert,
+%D email=zappathustra@free.fr,
+%D license=LaTeX Project Public License]
+
+\writestatus{loading}{ConTeXt User Module / yax}
+\chardef\formatnumber=3
+\input yax.tex
+\endinput
diff --git a/macros/generic/yax/yax-doc.pdf b/macros/generic/yax/yax-doc.pdf
new file mode 100644
index 0000000000..f29485fc9a
--- /dev/null
+++ b/macros/generic/yax/yax-doc.pdf
Binary files differ
diff --git a/macros/generic/yax/yax-doc.tex b/macros/generic/yax/yax-doc.tex
new file mode 100644
index 0000000000..01a0fd2604
--- /dev/null
+++ b/macros/generic/yax/yax-doc.tex
@@ -0,0 +1,1032 @@
+\input pitex % which \input's YaX
+
+\setparameter document:
+ author = "Paul Isambert"
+ title = \yax
+ pdftitle = YaX
+ version = \yaxversion
+ date = "\the\month/\the\day/\the\year"
+ display = outlines
+ subject = "The YaX documentation."
+
+\setparameter navigator:
+ mode = outlines
+
+\setparameter page:
+ left = 5cm
+ right = 3cm
+ height = 26cm
+
+\setparameter font :
+ command = \mainfont
+ name = ChaparralPro-
+ roman = Regular
+ italic = Italic
+ bold = Bold
+
+\setparameter font :
+ command = \sectionfont
+ size = 13pt
+ name = ChaparralPro-
+ roman = Regular
+ italic = Italic
+
+\setparameter font :
+ command = \titlefont
+ size = 26pt
+ name = ChaparralPro-
+ roman = Regular
+
+\setparameter font:
+ command = \codefont
+ name = lucon
+ size = 8.1pt
+ type = ttf
+ roman = {}
+ features = "\usevalue metafont:features -trep;"
+
+\setparameter section:
+ font = \sectionfont
+ number = none
+ color = ".8 0 0"
+
+\setparameter sectionbookmark:
+ meta = navigator
+ up = 15pt
+
+
+\pdfdef\ital#1{#1}
+
+
+\def\yax{%
+ Y\kern-.1em \raise.15em\hbox{\sc a}\kern-.1em \lower.15em\hbox{X}%
+ \ifcatnext a { }{\iffnext({ }}%
+ }
+\def\defarg#1#2{%
+ \def#1{\arg{#2}\kern1pt\antigobblespace}%
+ }
+\defarg\param{parameter} \defarg\paralist{list of parameters}
+\defarg\attr{attribute} \defarg\attrlist{list of attributes}
+\def\paramatt{\param\kern-1pt\tcode:\attr\antigobblespace}
+\defarg\attrlist{list of attributes} \defarg\vallist{list of values}
+\defarg\value{value} \defarg\ospace{optional space}
+\defarg\andvalue{value exists} \defarg\orvalue{no value}
+\defarg\true{true} \defarg\false{false}
+\defarg\codarg{code} \defarg\comarg{command}
+\newif\ifdescribebookmark
+\def\describe{%
+ \ifnext*{\describebookmarktrue\gobbleoneand\Describe}
+ {\describebookmarkfalse\Describe}%
+ }
+\def\Describe{%
+ \ifnext!{\gobbleoneand{\let\COM\ecom\DoDescribe}}
+ {\let\COM\com\DoDescribe}%
+ }
+\def\ecom#1{{\mainfont\char"E01F}\com{#1}}
+\long\def\DoDescribe#1#2.{%
+ \ifvmode \vskip\baselineskip \fi
+ \noindent
+ \ifdescribebookmark
+ \outline[color = .4 .4 .4]{3}{\noexpand#1}%
+ \fi
+ \llap{\color{.8 0 0}{\COM#1}\iffemptystring{#2}{\kern1em}}#2%
+ \reverse\iffemptystring{#2}{\par\noindent}\ignorespaces
+ }
+
+\newblock*\syntax{\vskip\baselineskip\codefont\setcatcodes{\^^M=13}\obeylines}
+ {\vskip\baselineskip}
+\extraboxspace=10pt
+
+\newbox\codebox
+\newbox\processbox
+\newdimen\prevcodedepth
+\def\processexample{%
+ \setbox\codebox=\vtop{%
+ \let\exampleskip\relax
+ \parindent0pt
+ \hsize.75\hsize
+ \typesetexample
+ \par
+ \global\prevcodedepth=\prevdepth
+ }%
+ \setbox\processbox=\vtop{%
+ \parindent0pt
+ \hsize.5\hsize
+ \doexample
+ }%
+ \exampleskip\exampleskip
+ \moveleft .25\hsize\hbox{\colorbox{.9 .9 .9}{\copy\codebox\copy\processbox}}%
+ \exampleskip\exampleskip
+ \prevdepth=\prevcodedepth
+ }
+
+
+%\output{%
+% \shipout\vbox to\dimexpr(\vsize+3\baselineskip){%
+% \box255
+% \vfil
+% \hbox to\hsize{\mainfont\hfil\the\pageno\hfil}%
+% }
+% \advancepageno
+% }
+%
+
+\gates def {headers}{%
+ \setbox255=\vbox to\dimexpr(\outputsize+3\baselineskip){%
+ \box255
+ \vfil
+ \hbox to\hsize{\mainfont\hfil\the\pageno\hfil}%
+ }%
+ }
+
+\gates def {ship}{%
+ \shipout\box255
+ }
+
+\vbox to 2\baselineskip{%
+ \vfil
+ \hbox to\hsize{\hfil\titlefont \usevalue document : title }
+ \vfil}
+
+\vskip\baselineskip
+\it
+\hfill \usevalue document : author \par
+\hfill \usevalue document : date \par
+\hfill v.\usevalue document : version \par
+
+\rm
+
+\vskip2\baselineskip
+
+
+\noindent\yax is Yet Another Key System, or \yax Ain't Keys, however you want it.
+It has some peculiarities. First, keys are not keys, but attributes,
+which means they depend on a parameter. You don't set key individually
+in \yax (although you can do it), you define parameters, which have
+attributes, which have values. Second, parameters can have definitions,
+so that when you set it you can also execute a command, or execute it
+later; thus, \yax is halfway between key management and macro definition.
+Finally, the syntax of \yax is not traditional: there are as few braces
+as possible, which you can find tremendously annoying, but it can be
+changed.
+
+And, of course, \yax is format-independant. Files are provided for
+La\TeX\ and Con\TeX t, so you can input it with \verb/\usepackage{yax}/
+or \verb/\usemodule[yax]/ respectively; anywhere else just use \verb/\input yax/.
+
+
+
+\describe!\yaxversion.
+Starting with version 1.01, this macro holds \yax's version. Current is \yaxversion.
+
+
+
+
+\section{Setting parameters}
+
+\noindent Here's an example of how values are set:
+
+\example
+\setparameter Zappa :
+ firstname = Frank
+ motto = "Music is the best"
+ hairstyle = \moustache
+\example/
+
+\noindent Here we have defined a \ital{parameter}, `\verb/Zappa/', which
+has \ital{attributes} `\verb/firstname/', `\verb/motto/' and `\verb/hairstyle/'
+with \ital{values} `\verb/Frank/', `\verb/Music is the best/' and `\verb/\moustache/'
+respectively.
+
+\describe*\setparameter.
+Here's how you set parameters more precisely. (This command is not the only way to set values.
+See below.)
+Its simplified syntax is as follows:
+
+\syntax
+\noindent\com\setparameter \paralist\ :
+ \attrlist\ = \value
+ \attrlist\ = \value
+ ...
+\noindent\com\par
+\syntax/
+
+\noindent First, the \com\par command that terminates the declaration:
+it was not chosen simply because it echoes \ital{parameter}, but above
+all because it can be implicit in a blank line, i.e. \com\setparameter
+can be delimited by a blank line. That's why in the first example there
+seemed to be nothing delimitating \com\setparameter: it is supposed to
+be followed by a blank line. I will regularly display parameter setting in this
+fashion, even though the following would be equally legitimate:
+
+\example
+\setparameter Zappa : firstname = Frank ... \par
+\example/
+
+\noindent barring readibility, obviously.
+
+As for the detail, \paralist is a list of space-delimited parameters,
+followed by a colon. Any space before the colon is removed, that's why
+
+\example
+\setparameter Zappa Boulez: ... \par
+\setparameter Zappa Boulez : ... \par
+\example/
+
+\noindent set the attributes of the same \verb/Zappa/ and \verb/Boulez/ parameters.
+Which means, of course, that you can set the attributes of as many parameters
+as you wish by doing so.
+
+The name of each parameter should be fully expandable. It can contain spaces,
+but then it should be enclosed between braces, since space delimits parameters
+in \paralist.
+
+Finally, you can use \com\setparameter several times on the same parameter(s),
+by default it does the same thing as using one big \com\setparameter. I say
+\ital{by default}, because things might occur between the two calls, e.g. the
+parameter might be active and have deleted its own attributes after the first
+call, which anyway is something we'll see later.
+
+Like \paralist, \attrlist is a list of space-delimited attributes.
+Each \attr is made of the same thing as a \param: i.e. anything expandable.
+However, at the beginning of a \attrlist, the strings \verb/e:/, \verb/g:/ and \verb/x:/
+have a special meaning: these prefixes are used to specify
+how an attribute or list of attributes is to be defined, and they are similar to \com\edef,
+\com\gdef and \com\xdef (with no prefix meaning \com\def), i.e.:
+
+\example
+\setparameter foo :
+ one = \whatever
+ e: two = \whatever
+ g: three = \whatever
+ x: four five = \whatever
+\example/
+
+\noindent defines, for the parameter \verb/foo/, the attributes \verb/one/
+and \verb/three/ as \com\whatever and the attributes \verb/two/, \verb/four/ and \verb/five/
+as the full expansion of \com\whatever; moreover, \verb/one/ and \verb/two/
+are locally defined, whereas \verb/three/, \verb/four/ and \verb/five/ are globally
+defined. The space between the prefix and the name of the parameter is
+optional.
+
+Finally, \value may be given in three ways. First, it can be delimited by
+a space, e.g.:
+
+\example
+\setparameter Zappa :
+ firstname = Frank
+ motto = {Music is the best}
+ ...
+\example/
+
+\noindent here the space is simply the end of the line. The spaces in
+\verb/Music is the best/ aren't seen, because of the braces (which will
+be removed from the value). Don't forget that control sequences eats
+the subsequent space, hence a control sequence can't be at the end of
+a value supposedly delimited by space without braces. Actually, it can't be at
+the beginning either (see below).
+
+Otherwise, \arg{value} can be given between double quotes:
+
+\example
+\setparameter Zappa :
+ firstname = "Frank"
+ motto = "Music is the best"
+ hairstyle = "\mustache"
+\example/
+
+\noindent which basically act as braces. The space inserted here by the
+end of the line is optional and the following can be done:
+
+\example
+\setparameter Zappa:firstname="Frank"motto="Music is the best"...\par
+\example/
+
+\noindent Finally, there's a special rule. Control sequences gobble the
+next space, but a \value can be made of one and only one control sequence,
+e.g.:
+
+\example
+\setparameter Zappa :
+ hairstyle = \mustache
+ ...
+\example/
+
+\noindent i.e. if \yax sees a control sequence at the beginning of a value
+it will take this control sequence only as \arg{value}, which means that
+anything thereafter will be considered as belonging to the next \param
+name. Hence, all the following are bad ideas:
+
+\example
+\setparameter bad values :
+ % the space stops the value to "bad"
+ one = bad space
+ % the control sequence is taken as the only token
+ two = \control sequence
+ % "\sequence" eats the delimitating space
+ three = control\sequence
+\example/
+
+\noindent but they'd all be ok with quotes or braces (which
+still require a space after):
+
+\example
+\setparameter good values :
+ one = "bad space"
+ two = "\control sequence"
+ three = {control\sequence}
+ four = \LonelyCommand
+ five = "\Command\Command"
+...
+\example/
+
+\noindent Finally, they are some exceptions to this rule: first,
+always put \com\par between braces, otherwise it will be seen
+as the end of the parameter. Second, always put a character denotation
+between either braces or quotes, even if it's the only control sequence.
+If you don't know what character denotation means, never mind. Just remember
+that \com\bgroup and \com\egroup are character denotations.
+
+Now I'm sure you ask: what is this lousy syntax? An answer is I don't
+like braces. Another answer is \yax is not designed to store complicated
+strings, although it can do it. Instead it aims at setting simple values
+in an orderly fasion, e.g.:
+
+\example
+\setparameter page :
+ pagewidth = 30cm
+ pageheight = 32cm
+ top bottom = 2cm
+ lines = 45
+ whatever = \foo
+...
+\example/
+
+\noindent in which case it is very handy, especially when you're in a hurry:
+
+\example
+\setparameter page: pagewidth=32cm pageheight=30cm whatever=\foo...\par
+\example/
+
+\noindent Thus, I find commas to delimit values equally superfluous and find
+the odd quote better.
+
+However, good old key-value pairs separated by commas happen to be useful
+too, for instance when a command takes some options. Hence the following
+was introduced in v.\yaxversion:
+
+\describe*\setparameterlist\paralist\oarg{optional macro}\arg{attribute(s) = value list}.
+This produces exactly the same thing as \com\setparameter, only the syntax
+changes. Ignoring the optional argument in the middle, our example just above
+would be rewritten as:
+
+\example
+\setparameterlist{page}{pagewidth = 32cm, pageheight = 30cm, whatever=\foo}
+\example/
+
+\noindent Here you can forget about how values are given: the delimiter is
+the comma, end of story. There can be several parameters in the first argument,
+and several attributes before each `\verb"="' sign in the second; in both cases,
+they are separated by spaces, as above. Also, each list of attributes can be
+prefixed with \verb"e:", \verb"g:" and \verb"x:", again as with \com\setparameter.
+Finally, as shown in the example, space is trimmed away.
+
+But \com\setparameterlist has a feature that \com\setparameter doesn't have.
+If one of the \attr = \value pair doesn't contain a `\verb"="', i.e. if it
+isn't a pair at all, then one of the following happens: if there is no
+\arg{optional macro}, then the default value `\verb"true"' is assigned to
+all the attributes mentionned; besides, the entry can still be prefixed with
+\verb"e:", \verb"g:" or \verb"x:". For instance, the following two statements
+are equivalent:
+
+\example
+\setparameterlist{Zappa}{guitarist composer}
+\setparameterlist{Zappa}{guitarist composer = true}
+\example/
+
+On the other hand, if the \arg{optional macro} is present, then it should
+take one argument, and the entry is passed to it (trimmed, though). What
+happens then is none of \yax's concern, although of course the macro can
+itself set parameters. For instance, in the following, \verb"a" and \verb"b"
+will be set to `\verb"what"' and `\verb"are you kidding"', whereas `\verb"eddie?"'
+is passed to \com\dosomething.
+
+\example
+\def\dosomething#1{ ... #1 ... }
+\setparameter{whatever}[\dosomething]{a = what, b = are you kidding, eddie?}
+\example/
+
+Another way to set a parameter is as follows:
+
+\describe*\copyparameter\paralist:\param\arg{space}.
+\describe\gcopyparameter\paralist:\param\arg{space}.
+All the attributes of the parameters in \paralist are copied
+to \param; if the latter already has some attributes, they're
+aren't deleted (but you can use \com\deleteparameter beforehand,
+see below) although they might be overwritten. If several parameters
+in \paralist have the same attribute, the value of the last parameter
+in the list wins. The difference between the two versions is that
+the second is global. The space shouldn't be forgotten, it's the
+same as explained in the \paramatt syntax \jumplink{values}{\ital{below}}.
+
+
+Finally, here's one fast way of setting a single attribute:
+
+\describe*\setattribute\paramatt=\value\arg{space}.
+\describe\esetattribute\paramatt=\value\arg{space}.
+\describe\gsetattribute\paramatt=\value\arg{space}.
+\describe\xsetattribute\paramatt=\value\arg{space}.
+This sets \attr (no list) for \param (no list) to \value; see
+\jumplink{values}{\ital{below}} for the \paramatt syntax. Note that the \arg{space} is for real,
+so don't forget it. The `=' sign may be surrounded by optional space.
+This command can be used instead of \com\setparameter for two reasons:
+first, it is much faster (because it doesn't take lists into account);
+second, if \param is active it is \ital{not} executed (see the section
+\jumplink{defpar}{\ital{Defining parameters}}).
+The \verb"e-", \verb"g-" and \verb"x-"versions sets the attribute
+with the \verb"e:", \verb"g:" and \verb"x:" prefixes respectively.
+
+\describe*\deleteattribute\paramatt.
+\describe\gdeleteattribute\paramatt.
+This deletes \paramatt, which now responds negatively
+to all previous commands, as if it was never defined.
+The second version makes this deletion global, the first
+keeps it local.
+
+\describe*\deleteparameter\paralist:.
+\describe\gdeleteparameter\paralist:.
+This deletes all paramaters in \paralist; it is equivalent to using
+the previous command on all the parameters' attributes. The
+first version is local, the second is global. And yes, the colon is
+really there, although it might get away.
+
+
+
+\sectioncommand{section}{The meta attribute}{The \ital{meta} attribute}
+\noindent You can give any attribute to any parameter (unless they're restricted,
+but that's not the point for the time being).
+However, there's one particular attribute which has a special meaning: \verb/meta/.
+The value of \verb/meta/ should be another parameter. Then, when querying
+the value of an attribute, say \verb/attr/, for a given parameter, say \verb/param/,
+\yax will do the following: if \verb/param/ has \verb/attr/, it is returned.
+Otherwise, if \verb/param/ has a \verb/meta/ attribute, whose value is for instance
+\verb/metaparam/, then \verb/attr/ is queried for the value of \verb/metaparam/.
+And if \verb/metaparam/ has no \verb/attr/ but has a \verb/meta/ attribute,
+this process continues, until either a parameter is found with \verb/attr/
+or there are no new \verb/meta/. For instance:
+
+\example
+\setparameter A : attr = value ... \par
+\setparameter B : meta = A ... \par
+\setparameter C : meta = B ... \par
+\example/
+
+\noindent If parameter \verb/C/ has no \verb/attr/, then it retrieves it
+from parameter \verb/A/ via \verb/B/ (or from \verb/B/ if it has one). On
+the other hand, if \verb/C/ has \verb/attr/, then its own value is returned.
+You can also query the value of an attribute for a parameter and forbid the
+search for \verb/meta/'s, as explained in the next section.
+
+Don't be afraid to create loop with \verb/meta/. The following is perfectly
+legitimate:
+
+\example
+\setparameter A : meta = C ... \par
+\setparameter B : meta = A ... \par
+\setparameter C : meta = B ... \par
+\example/
+
+\noindent and it can even be useful. \yax detects loops when searching
+\verb/meta/ paths and stops in time (with no value, obviously). Finally,
+you can set \verb/meta/ to a parameter that doesn't exist. It will simply
+return no value.
+
+The use of \verb/meta/ is useful to create families
+of parameters and/or to set default values, e.g.:
+
+\example
+\setparameter mammal :
+ egg = no
+ fur = yes
+ ...
+\setparameter cat whale :
+ meta = mammal
+ ...
+\setparameter cat : \setparameter whale :
+ foot = clawed fur = no
+ tooth = fang foot = flipper
+ ... tooth = baleen
+ ...
+\setparameter tiger mykitty :
+ meta = cat
+ stripped = yes
+ ...
+\setparameter tiger : \setparameter mykitty :
+ foot = "very bad news" foot = "bad news"
+ ... ...
+\example/
+
+Apart from that, \verb/meta/ behaves as any other attribute, i.e. it can
+be freely set and queried.
+
+
+
+
+
+
+
+
+\section{Using values}[values]
+
+\noindent Once attributes have been set, they can be queried by the macros
+that follow. But first, one last bit of odd syntax: \paramatt means anything
+up to the colon as the \param and then anything up to the next space as
+the \attr. That's the reason why space in attribute names is a bad idea:
+the space is the main delimitator when using attributes. It is gobbled
+in the process. On the other hand,
+any space surrounding the colon is removed, so that `\verb/zappa:hairstyle/ '
+and `\verb/zappa : hairstyle/ ' denote the same attribute of the same parameter.
+Good news, though: if you don't like that syntax, the next section explains
+how to create commands with the same meaning but a different syntax.
+
+In what follows, fully expandable commands are marked with \color{.8 0 0}{\char"E01F}.
+
+\describe*!\nometa\arg{command}.
+All the commands that follow except \com\parameterloop can be prefixed with \com\nometa. In this case,
+\yax will return the value of the attribute for the specified parameter,
+as usual, or return no value, i.e. it will not search \verb/meta/ parameters.
+So, in what follows, `\paramatt is defined' means two things. If \com\nometa
+isn't used, it means that \param has \attr or it has a metaparameter with
+\attr; on the other hand, if \com\nometa is used, it means that \param has
+\attr, end of story.
+
+\describe*!\ifattribute\paramatt\true\false.
+This returns \true if \paramatt is defined, \false otherwise. Since all
+commands below always check whether \paramatt is defined before trying
+to do anything with the value, this command can be avoided most of the
+time.
+
+\setparameter musician :
+ job = music
+
+\setparameter Zappa :
+ meta = musician
+ firstname = Frank
+
+
+\Example
+\setparameter musician : job = music\par
+\setparameter Zappa :
+ meta = musician
+ firstname = Frank
+
+ % See this space?
+\ifattribute Zappa : job {Good, it is.}{...}\par
+\nometa\ifattribute Zappa : job {...}{Too bad.}
+\Example/
+
+
+
+
+
+\describe*!\usevalue\paramatt.
+\describe!\usevalueor\paramatt\orvalue.
+\describe!\usevalueand\paramatt\andvalue\orvalue.
+The first macro returns the value of \paramatt if it exists, or
+does nothing otherwise. Like all the \verb/-or/ and \verb/-and/
+variants below, \com\usevalueor executes \orvalue in case
+\paramatt doesn't exist, while \com\usevalueand returns
+the value of \paramatt immediately followed by \andvalue
+(no brace added) if \paramatt exists, otherwise it executes
+\orvalue.
+
+\Example
+Zappa's job was \usevalueand Zappa : job
+ { (and then some!)}
+ {unknown}
+and he played the \usevalueor Zappa : instrument
+ {guitar}.
+\Example/
+
+
+\iflines4{}{\breakpage}
+\describe*!\passvalue\codarg\paramatt.
+\describe!\passvalueor\codarg\paramatt\orvalue.
+\describe!\passvalueand\codarg\paramatt\andvalue\orvalue.
+These return \codarg\barg{value} if \paramatt is defined,
+with the \verb/-or/ and \verb/-and/ variants as above.
+
+\Example
+\def\whichwas#1{(which was #1)}
+Zappa's job \passvalue\whichwas Zappa : job \ took
+most of his time, because it's a time-consuming
+occupation \nometa\passvalueor\whichwas Zappa : job
+ {(you know which)}.
+\Example/
+
+\describe*!\passvaluenobraces\codarg\paramatt.
+\describe!\passvaluenobracesor\codarg\paramatt\orvalue.
+\describe!\passvaluenobracesand\codarg\paramatt\andvalue\orvalue.
+These are the same as \com\passvalue and variants except the
+value of the attribute is concatenated to \codarg without braces
+(which means that no braces are added in the process, not that
+braces are removed from the value if it has any).
+
+\describe*\settovalue\arg{dimen or count}\paramatt.
+\describe\settovalueor\arg{dimen or count}\paramatt\orvalue.
+\describe\settovalueand\arg{dimen or count}\paramatt\andvalue\orvalue.
+This sets the first argument to the value of \paramatt if it exists.
+If the first argument is more than one token (e.g. \verb/\count0/
+vs. \verb/\parindent/), it must be surrounded by braces; and actually
+it can even be something like \verb/\advance\count0/. Of course
+\arg{dimen or count} must be a dimension or a count, and the value
+of \paramatt must be accordingly a dimension
+or a number (\yax doesn't check either of them).
+
+\Example
+\setparameter para : parskip = 2pt \par
+Note that
+\settovalueor\parskip para : parskip
+ {\parskip=1pt\relax}
+(\the\parskip) is basically the same thing as
+\parskip=\usevalueor para : foo {1pt\relax}
+(\the\parskip).
+\Example/
+
+What the previous example shows is that since \com\usevalue
+is thoroughly expandable one can say:
+
+\example
+\mydimen=\usevalueor parameter : attribute {0pt}
+\example/
+
+\noindent and it will set \com\mydimen to the value
+of \paramatt or to \verb/0pt/. The difference with \com\settovalueor
+is that in the construction with \com\usevalueor the assignement
+is obligatorily made (hence the \verb/-or/ variant), whereas
+with \com\settovalueor the or-clause can do something else
+(e.g. send an error message). And \com\settovalue insert a
+prophylactic \com\relax.
+
+
+
+
+\describe*\storevalue\comarg\paramatt.
+\describe\storevalueor\comarg\paramatt\orvalue.
+\describe\storevalueand\comarg\paramatt\andvalue\orvalue.
+These define \comarg as the value of \paramatt if it exists.
+
+\Example
+\setparameter Zappa : hairstyle = \moustache\par
+\storevalue\beard Zappa : hairstyle
+\meaning\beard
+\Example/
+
+
+
+\describe*!\ifvalue\paramatt=\value\ \true\false.
+This returns \true if the value of \paramatt is \value
+and \false otherwise (including unexisting \paramatt).
+Note that when comparing the value of \paramatt with
+\value, catcodes aren't part of the picture.
+Here \value is delimited by the following space, but
+there might be optional space after the `\verb/=/' sign.
+Because of this, it is not possible to test for the
+emptyness of a value with \com\ifvalue, i.e.
+
+\example
+\ifvalue foo : bar = {} {true}{false}
+\example/
+
+\noindent won't work. Instead, either use \com\ifcasevalue below or \com\passvalue
+with an emptyness-tester (e.g. \verb/texapi/'s
+\com\ifemptystring, since \yax is based on \verb/texapi/
+(what, me, self-advertising?)).
+
+\Example
+\bgroup \catcode`\Z=13
+\setparameter foo : g: bar = Z \par
+\egroup
+\edef\foobar{%
+ \ifvalue foo : bar = Z {yes}{no},
+ even though catcodes are different.}
+\meaning\foobar
+\Example/
+
+
+
+\iflines2{}{\breakpage}
+\describe*!\ifcasevalue\paramatt.
+ \describe\val\value\ \codarg.
+ \describe\val\value\ \codarg.
+ \verb/.../ \par\noindent
+ \describe\elseval \codarg.
+ \describe\endval\relax.
+This executes \codarg following \value matching
+the value of \paramatt. If \paramatt doesn't exist, or
+matches no \value, then \com\elseval is executed. Once again
+catcodes aren't taken into account when values are compared.
+The exact syntax is: \value is anything from \com\val to the
+next space, and \codarg is anything that follows up to the next
+\com\val, \com\elseval or \com\endval (any space on the right
+is removed, so no need to stick \com\val to \codarg).
+Apart from \com\endval, everything here is optional: there might
+be as many \com\val-clauses as needed, including none, and the
+\com\elseval-clause need not be present (in which case, if no
+match occurs, nothing happens). Finally, although this is
+similar to \TeX's primitive \com\ifcase, there's no need
+to jump before anything with \com\expandafter to avoid
+bumping into conditional structure.
+
+\Example
+\def\doitalic#1{{\it#1}}
+\setparameter type : font = italic \par
+\ifcasevalue type : font
+ \val italic \doitalic
+ \val bold \dobold
+\endval{Some text.}
+
+\edef\foo{%
+ \ifcasevalue type : font
+ \val bold This is bold
+ \elseval This is something else
+ \endval}
+\meaning\foo
+\Example/
+
+
+
+\describe*!\parameterloop\paralist:\arg{code}.
+This loops on all the attributes for all the parameters in \paralist,
+and passes the following thing to \arg{code}: the parameter, the attribute,
+and the value. Hence \arg{code} can be anything, but it should be prepared
+to handle three arguments. The order in which parameters are enumerated is the
+order in \paralist, and for attributes it is the order in which they were set
+for a given parameter. Only actual attributes are enumerated: if you loop over
+\verb"ParameterA", which doesn't have \verb"AttributeA" but has a \verb"meta"
+parameter with that attribute, then \verb"AttributeA" will \emph{not} be
+enumerated in the loop.
+
+\Example
+\setparameter musician : job = music\par
+\setparameter zappa :
+ meta = musician
+ instrument = guitar
+
+\def\showvalues#1#2#3{#1 : #2 = #3\par}
+\parameterloop musician zappa : \showvalues
+\Example/
+
+
+\section{Using another syntax}
+
+\noindent If you don't like \yax's native syntax, and want for instance
+good old braces to delimit \param and \attr, you might be tempted
+to do something like:
+
+\example
+\def\myusevalue#1#2{\usevalue #1:#2 }
+\example/
+
+\noindent On the other hand, if you don't mind \yax's syntax
+but want other names for the commands, then you'll probably go:
+
+\example
+\let\myusevalue\usevalue
+\example/
+
+\noindent Both are bad ideas. Indeed, in neither example will
+\com\myusevalue work properly with \com\nometa. Besides, you
+have to create the \verb/-or/ and \verb/-and/ variants by hand.
+Not to mention that in the first example \com\myusevalue wastes
+time calling \com\usevalue (and what if it is redefined?) when
+it could be in direct relation with internal code. So here's how
+to circumvent \yax's syntax and/or create new names.
+
+\describe*\newsyntax\arg{syntax}\barg{prefix}.
+This creates commands whose names are \verb/\/\arg{prefix}\comarg
+and whose syntax for arguments is \arg{syntax}. The latter is
+a parameter text which must contain \verb/#1/ and \verb/#2/ (for
+\param and \attr respectively) with whatever to delimit them.
+For instance:
+
+\example
+\newsyntax#1#2{x}
+\newsyntax#1 #2!{y}
+\example/
+
+\noindent will create among others an \com\xusevalue command whose usage is
+\com\xusevalue\param\attr and a \com\yusevalue command whose
+usage is \com\yusevalue\param\ \attr\tcode! and both will do the
+same thing as \com\usevalue. There must be braces around \arg{prefix}
+and none around \arg{syntax} (i.e. the latter is delimited by
+the left brace of the former). If \arg{prefix} is empty,
+you redefine the default commands, which is dangerous.
+
+To be precise, the commands copied are (omitting the \verb/-or/
+and \verb/-and/ variants, which are created too, if any):
+\com\setattribute, \com\esetattribute, \com\gsetattribute, \com\xsetattribute,
+\com\ifattribute, \com\usevalue, \com\passvalue, \com\passvaluenobraces,
+\com\settovalue, \com\storevalue, \com\ifvalue, \com\ifcasevalue,
+\com\deleteattribute and \com\restrictattribute (which you'll learn
+about in the next section).
+
+\describe*\copysyntax\arg{prefix1}\arg{prefix2}.
+This defines all the commands above with \arg{prefix1} as
+those same commands with \arg{prefix2}.
+
+\describe*\letyaxcommand\arg{command1}\arg{command2}.
+This at the very least \com\let \arg{command1} to \arg{command2}.
+Besides, if \arg{command2} can take a \com\nometa prefix,
+\arg{command1} can too. Finally, if \arg{command2} has
+\verb/-or/ and \verb/-and/ variants, these are created with
+\arg{command1}. E.g.:
+
+\example
+\letyaxcommand\defval\storevalue
+\example/
+
+\noindent defines \com\defval, \com\defvalor and \com\defvaland
+as \com\storevalue and its variants. If \arg{command2} has been
+created with \com\newsyntax or \com\copysyntax, \arg{command1}
+of course has the same syntax.
+
+
+\Example
+\newsyntax#1#2{x}
+\letyaxcommand\uv\xusevalue
+\uvand{noparameter}{noattribute}{yes}{no}
+\Example/
+
+
+\section{Restrictions on parameters and attributes}
+
+
+\describe*\restrictparameter\paralist:\attrlist\tcode{\char`\\par}.
+After this declaration, the \param's in \paralist (where they are separated
+by space as in \com\setparameter) can take only those \attr's in
+\attrlist (which are also separated by space). It affects \com\setparameter
+only, producing an error message when an \attr not belonging to
+\attrlist is given a value (and the assignment isn't made, of course).
+Even if it doesn't belong to \attrlist, the \verb/meta/ attribute is
+always allowed. Several \com\restrictparameter declarations on the
+same parameter(s) actually accumulate the allowed attributes in \paralist,
+e.g. after
+
+\example
+\restrictparameter foo : one two three\par
+\restrictparameter foo : four\par
+\example/
+
+\noindent one can set the attributes \verb/one/, \verb/two/, \verb/three/
+and \verb/four/ for \verb/foo/, and not only \verb/four/. The idea behind
+\com\restrictparameter is not so much hiding attributes from the user
+as making the use of a parameter clearer by indicating which attributes
+are in use with it, especially if it can be executed (see below).
+
+\describe*\restrictattribute\paramatt\ \vallist\tcode{\char`\\par}.
+This restricts \paramatt to take only the values in \vallist (separated
+by space).
+
+\describe*\restrictallattributes\attr\ \vallist\tcode{\char`\\par}.
+This restricts \attr, whatever the \param in which it appears, to
+take only the values in \vallist. In this command, \attr is
+found as anything before the first space, e.g.:
+
+\example
+\restrictallattributes attribute value1 value2 value3\par
+\restrictallattributes {attri bute} value1 value2 value3\par
+\example/
+
+\noindent (the second example if you want to have space in attribute
+names). Note that if an attribute is restricted with both
+\com\restrictattribute and \com\restrictallattributes,
+only the former restriction holds. E.g.:
+
+\example
+\restrictattribute foo:bar one\par
+\restrictallattributes bar two three\par
+\setparameter foo:
+ bar = two % Will produce an error message.
+ ...
+\example/
+
+
+
+\section{Defining parameters}[defpar]
+
+\describe*\defparameter\paralist\barg{definition}.
+Parameters aren't just a way of organizing attributes. They
+can have a definition and act as commands whose arguments
+are the values of their attributes. The \paralist (with
+parameters once again separated by space) must be
+braceless, whereas \arg{definition} must be enclosed in
+braces (like a real definition). No parameter text is
+allowed. However, \arg{definition} can contain `\verb/#1/',
+which doesn't refer to any argument but to the parameter
+being defined instead, so that one can use the commands
+defined in the previous section without specifying the name
+of the parameter. E.g.
+
+\example
+\defparameter foo bar {%
+ \usevalue #1 : one
+ \passvalueor\mycomm #1 : whatever {...}%
+ ...}
+\example/
+
+\noindent defines \verb/foo/ and \verb/bar/ respectively
+to
+
+\example
+\usevalue foo : one
+\passvalueor\mycomm foo : whatever {...}%
+...
+\usevalue bar : one
+\passvalueor\mycomm bar : whatever {...}%
+...
+\example/
+
+\describe*!\executeparameter\param:.
+This executes the definition of \param with the the latest values
+of its attributes. If \param hasn't been defined, nothing happens.
+
+\Example
+\defparameter foo {The value is \usevalue#1:bar }
+\setparameter foo : bar = whatever\par
+\executeparameter foo:
+\Example/
+
+
+\describe*\defactiveparameter\paralist\barg{definition}.
+This does the same thing as \com\defparameter, i.e. define the
+parameters in \paralist, but it also set them as `active,'
+which means that they're automatically executed each time
+their attributes are defined with \com\setparameter. You
+can still use \com\executeparameter.
+
+\Example
+\setparameter metasection : skip = 2 font = \it\par
+\setparameter mysection : % not yet active
+ meta = metasection\par
+\defactiveparameter mysection {%
+ \vskip \usevalueor #1 : skip 0\baselineskip
+ {\usevalue #1 : font \usevalue #1 : title }%
+ \par}
+
+And now we're going to have a new section.
+\setparameter mysection : title = "A new section"\par
+Fascinating. Once again?
+\setparameter mysection : title = "Once again"\par
+Cool.
+\Example/
+
+
+%{\it\noindent See next page for the last example.}
+
+
+\Example
+\setparameter metasection :
+ skip = 2
+ inline = false
+ font = \it
+
+\setparameter mysection mysubsection :
+ meta = metasection
+
+\setparameter mysection :
+ font = \sc
+
+\setparameter mysubsection :
+ skip = 1
+ inline = true
+
+\defparameter mysection mysubsection {%
+ \vskip \usevalueor #1 : skip 0\baselineskip
+ {\usevalue #1 : font \usevalue #1 : title }%
+ \ifvalue #1 : inline = true {. \ignorespaces}%
+ \par}%
+
+\def\section#1{%
+ \setparameter mysection : title = {#1}\par
+ \executeparameter mysection :}
+
+\def\subsection#1{%
+ \setparameter mysubsection : title = {#1}\par
+ \executeparameter mysubsection :}
+
+
+... and this is the end of our paragraph.
+\section{New ideas}
+Here we are going to expose bold new ideas.
+\subsection{First bold new idea}
+Lore, aim, hip, sum... what do you think about
+it? Pig latin, you say?
+\subsection{Second bold new idea}
+Perhaps Do lore, aim... then, huh?
+\section{New new ideas}
+Etc.
+\Example/
+
+\finishpdffile
+\bye
diff --git a/macros/generic/yax/yax.sty b/macros/generic/yax/yax.sty
new file mode 100644
index 0000000000..7742f1d6f1
--- /dev/null
+++ b/macros/generic/yax/yax.sty
@@ -0,0 +1,14 @@
+% This is yax.sty, a style file to load
+% the YaX package in LaTeX. Useful information
+% can be found in yax-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: January 2011.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{yax}[2010/01/22 v.1.03 Yet Another Key System.]
+\chardef\formatnumber=4
+\input yax.tex
+\endinput
diff --git a/macros/generic/yax/yax.tex b/macros/generic/yax/yax.tex
new file mode 100644
index 0000000000..3bf7429841
--- /dev/null
+++ b/macros/generic/yax/yax.tex
@@ -0,0 +1,707 @@
+% This is the YaX package.
+% Relevant information can be found in yax-doc.pdf
+%
+% Author: Paul Isambert.
+% E-mail: zappathustra AT free DOT fr
+% Comments and suggestions are welcome.
+% Date: January 2011.
+%
+\ifcsname yax@already_loaded\endcsname
+ \expandafter\endinput
+\fi
+
+\input texapi % Everything I need. It figures: I wrote it for this.
+
+\ifdefined\texapiversion
+ \ifdim\texapiversion pt<1.03pt
+ \senderror{YaX}{You need texapi with version at least 1.03. I quit}
+ \expandafter\expandafter\expandafter\endinput
+ \fi
+\else
+ % \texapiversion was introduced in v.1.02.
+ \senderror{YaX}{You need texapi with version at least 1.03. I quit}
+ \expandafter\endinput
+\fi
+
+\setcatcodes{@_=11}
+\def\yaxversion{1.03}
+\let\yax@already_loaded\relax
+\def\yax@error{\senderror{YaX}}
+
+%
+% Retrieval of parameter and attribute.
+%
+\def\yax@getparameter#1#2:{%
+ \passtrim{#2}{#1}%
+ }
+\def\yax@defparameter#1#2{%
+ \def\yax@parameter{#2}#1
+ }
+% #1 and #2 are thing_to_do and parameter.
+\def\yax@getattribute#1#2#3 {%
+ \ifemptystring{#3}{\yax@getattribute{#1}{#2}}
+ {#1{#2}{#3}}%
+ }
+% \yax@getall\foo
+% => \foo{<parameter>}{<attribute>}
+\def\yax@getall#1{%
+ \yax@getparameter{\yax@getattribute{#1}}%
+ }
+%
+\long\def\yax@get_topar#1#2\par{%
+ #1{#2}%
+ }
+%
+%
+%
+%
+%%%%%%%%%%%%%%% SETTING PARAMETERS %%%%%%%%%%%%%%%
+%
+% The crux of the biscuit.
+%
+% \setparameter <list of parameters> :
+% <prefix><attribute1> = <value1>
+% <prefix><attribute2> = <value2>
+% ...
+% <prefix><attributeN> = <valueN>
+% \par
+%
+% A generic loop for space-delimited lists.
+% The the texapi documentation for the information on the \newfor loop.
+%
+\newfornoempty\yax@space_loop{1}#2 {#1{#2}}%
+%
+\pdef\setparameter{%
+ \yax@getparameter\yax@setparameter_getattributes
+ }
+\long\def\yax@setparameter_getattributes#1#2\par{%
+ \yax@setparameter_getpairs{}{#2 }%
+ \expandafter\yax@space_loop\expandafter{\expandafter\yax@setparameter_assign\expandafter{\yax@setparameters_pairs}}{#1 }%
+ \yax@space_loop\yax@setparameter_execute{#1 }%
+ }
+\newfor\yax@setparameter_getpairs{1}#2={%
+ \pausefor{\skipspace{\passtrim{#2}{\yax@setparameter_checkprefix{\yax@setparameter_howgiven{#1}}}}}%
+ }[\def\yax@setparameters_pairs{#1}]
+
+\newstring{e:} \newstring{g:} \newstring{x:}
+\long\def\yax@setparameter_checkprefix#1#2{%
+ \ifprefix{e:}{#2}
+ {\removeprefixand{e:}{#2}\passtrim{#1\edefcs}}
+ {\ifprefix{g:}{#2}
+ {\removeprefixand{g:}{#2}\passtrim{#1\gdefcs}}
+ {\ifprefix{x:}{#2}
+ {\removeprefixand{x:}{#2}\passtrim{#1\xdefcs}}
+ {#1\defcs{#2}}}}%
+ }
+
+\long\def\yax@setparameter_howgiven#1#2#3{%
+ \ifnextnospace"
+ {\yax@setparameter_getquote{#1}{#2}{#3}}
+ % No need for a new nospace: it has been removed
+ {\ifcatnext\foo
+ {\yax@setparameter_getcommand{#1}{#2}{#3}}
+ {\yax@setparameter_getspace{#1}{#2}{#3}}}%
+ }
+
+\long\def\yax@setparameter_getquote#1#2#3"#4"{%
+ \skipspace{\resumefor\yax@setparameter_getpairs{#1{#2}{#3}{#4}}}% Better not to forget this!
+ }
+\long\def\yax@setparameter_getcommand#1#2#3#4{%
+ \skipspace{\resumefor\yax@setparameter_getpairs{#1{#2}{#3}{#4}}}%
+ }
+\long\def\yax@setparameter_getspace#1#2#3#4 {%
+ \skipspace{\resumefor\yax@setparameter_getpairs{#1{#2}{#3}{#4}}}%
+ }
+
+\long\def\yax@setparameter_assign#1#2{%
+ \yax@setparameter_assignloop{#2}{#1}%
+ }
+
+\newfor\yax@setparameter_assignloop{1}#2#3#4{%
+ \yax@space_loop{\yax@setparameter_do{#1}{#2}{#4}}{#3 }%
+ }
+
+\newif\ifyax@makedef
+% #1 = parameter; #2 = \<|e|g|x>defcs; #3 = value; #4 = attribute
+\long\def\yax@setparameter_do#1#2#3#4{%
+ \yax@makedeftrue
+ \iffcs{yax@#1@restricted}% Parameter restricted.
+ {\reverse\iffcs{yax@#1:#4@allowed}% Attribute not allowed.
+ {\yax@makedeffalse
+ \yax@error{Attribute `#4' is not allowed in parameter `#1'.
+ Authorized attributes are `\unexpandedcs{yax@#1@restricted}'}}}%
+ \ifcs{yax@#1:#4@restricted}% Attribute restricted in this parameter.
+ {\reverse\iffcs{yax@#1:#4:\detokenize{#3}@allowed}% Value not allowed.
+ {\yax@makedeffalse
+ \yax@error{Value `\detokenize{#4}' is not allowed in attribute `#1:#4'.
+ Authorized values are `\unexpandedcs{yax@#1:#4@restricted}'}}}%
+ {\iffcs{yax@attribute@#4@restricted}% Attribute restricted in all parameters.
+ {\reverse\iffcs{yax@attribute@#4:\detokenize{#3}@allowed}% Value not allowed.
+ {\yax@makedeffalse
+ \yax@error{Value `\detokenize{#3}' is not allowed in attribute `#4'.
+ Authorized values are `\unexpandedcs{yax@attribute@#4@restricted}'}}}}%
+ \ifyax@makedef
+ \reverse\iffcs{yax@#1@attributelist}{\gdefcs{yax@#1@attributelist}{}}%
+ \ifx#2\gdefcs
+ \passexpandedcs{\yax@parameterlist_add\global{#1}{#4}}{yax@#1@attributelist}%
+ \else\ifx#2\xdefcs
+ \passexpandedcs{\yax@parameterlist_add\global{#1}{#4}}{yax@#1@attributelist}%
+ \else
+ \passexpandedcs{\yax@parameterlist_add{}{#1}{#4}}{yax@#1@attributelist}%
+ \fi\fi
+ #2{yax@#1:#4}{#3}%
+ \fi
+ }
+
+\newfor\yax@parameterlist_add{3}#4{%
+ \iffstring{#3}{#4}{\breakfor{}}%
+ }[#1\eaddrightcs{yax@#2@attributelist}{{#3}}]
+
+\def\yax@setparameter_execute#1{%
+ \iffcs{yax@#1@active}{\usecs{yax@#1@def}}%
+ }
+%
+% \setparameterlist <list of parameters>[<default value>|*<cs>]<attribute>=<value>, ...
+%
+\def\setparameterlist#1{%
+ \ifnextnospace[
+ {\yax@setparameterlist_getdefault{#1}}
+ {\yax@setparameterlist_getdefault{#1}[]}%
+ }
+
+\def\yax@setparameterlist_getdefault#1[#2]#3{%
+ \yax@setparameterlist_loop{#1}{#2}{#3,}%
+ \yax@space_loop\yax@setparameter_execute{#1 }%
+ }
+
+\newstring{=}
+\newfornoempty\yax@setparameterlist_loop{2}#3,{%
+ \ifcontains={#3}
+ {\yax@setparameterlist_getargs{#1}#3\yax@endofentry}
+ {\ifemptystring{#2}
+ {\yax@setparameterlist_getargs{#1}#3=true\yax@endofentry}
+ {\passtrim{#3}{#2}}}%
+ }
+
+\long\def\yax@setparameterlist_getargs#1#2=#3\yax@endofentry{%
+ \yax@setparameter_checkprefix{\passtrim{#3}{\yax@setparameterlist_assign{#1}}}{#2}%
+ }
+
+\long\def\yax@setparameterlist_assign#1#2#3#4{%
+ \yax@space_loop{\yax@setparameterlist_do{#3}{#2}{#4}}{#1 }%
+ }
+
+\long\def\yax@setparameterlist_do#1#2#3#4{%
+ \yax@space_loop{\yax@setparameter_do{#4}{#1}{#2}}{#3 }%
+ }
+%
+% \setattribute <parameter> : <attribute> = <value>
+%
+\def\yax@removesign#1#2#3#4={#1{#2}{#3}}%
+\pdef\setattribute{%
+ \yax@getall{\yax@removesign{\yax@setattribute\defcs}}%
+ }
+\pdef\esetattribute{%
+ \yax@getall{\yax@removesign{\yax@setattribute\edefcs}}%
+ }
+\pdef\gsetattribute{%
+ \yax@getall{\yax@removesign{\yax@setattribute\gdefcs}}%
+ }
+\pdef\xsetattribute{%
+ \yax@getall{\yax@removesign{\yax@setattribute\xdefcs}}%
+ }
+\def\yax@setattribute#1#2#3{%
+ \skipspace{\yax@setattribute_getvalue{#1}{#2}{#3}}%
+ }
+\long\def\yax@setattribute_getvalue#1#2#3#4 {%
+ \yax@setparameter_do{#2}{#1}{#4}{#3}%
+ }
+%
+% \copyparameter <list of parameters> : <parameter>
+%
+\pdef\copyparameter{%
+ \yax@getall{\yax@copyparameter{}}%
+ }
+\pdef\gcopyparameter{%
+ \yax@getall{\yax@copyparameter\global}%
+ }
+\def\yax@copyparameter#1#2#3{%
+ \reverse\iffcs{yax@#3@attributelist}{#1\letcs{yax@#3@attributelist}\emptycs}%
+ \yax@space_loop{\yax@copyparameter_do{#1}{#3}}{#2 }%
+ }
+\def\yax@copyparameter_do#1#2#3{%
+ \iffcs{yax@#3@attributelist}{%
+ \passexpandedcs{\yax@parameterlist_copy{#1}{#3}{#2}}{yax@#3@attributelist}}%
+ }
+\newfor\yax@parameterlist_copy{3}#4{%
+ #1\letcstocs{yax@#3:#4}{yax@#2:#4}%
+ \passexpandedcs{\yax@parameterlist_add{#1}{#3}{#4}}{yax@#3@attributelist}%
+ }
+%
+%
+%
+% \deleteparameter <list of parameters>:
+%
+\pdef\deleteparameter{%
+ \yax@getparameter{\yax@deleteparameter{}}%
+ }
+\pdef\gdeleteparameter{%
+ \yax@getparameter{\yax@deleteparameter\global}%
+ }
+\def\yax@deleteparameter#1#2{%
+ \yax@space_loop{\yax@deleteparameter_do{#1}}{#2 }%
+ }
+\def\yax@deleteparameter_do#1#2{%
+ \iffcs{yax@#2@attributelist}{\passexpandedcs{\yax@parameterlist_delete{#1}{#2}}{yax@#2@attributelist}}%
+ }
+\newfor\yax@parameterlist_delete{2}#3{%
+ #1\letcs{yax@#2:#3}\yax@somethinghopefullyundefined
+ }[#1\letcs{yax@#2@attributelist}\yax@somethinghopefullyundefined]
+%
+%
+% \deleteattribute <parameter> : <attribute>
+%
+\def\deleteattribute{%
+ \yax@getall{\yax@deleteattribute{}}%
+ }
+\def\gdeleteattribute{%
+ \yax@getall{\yax@deleteattribute\global}%
+ }
+\def\yax@deleteattribute#1#2#3{%
+ \iffcs{yax@#2@attributelist}{%
+ #1\letcs{yax@#2:#3}\yax@undefined
+ \passexpandedcs{\yax@parameterlist_remove{#1\edefcs}{#2}{#3}{}}{yax@#2@attributelist}}%
+ }
+
+\newfor\yax@parameterlist_remove{4}#5{%
+ \reverse\iffstring{#3}{#5}{\passarguments{#1}{#2}{#3}{#4{#5}}}%
+ }[#1{yax@#2@attributelist}{#4}]
+%
+%
+%
+%
+% \restrictparameter <list of parameters> :
+% <attribute1>
+% <attribute2>
+% ...
+% <attributeN>
+% \par
+%
+\pdef\restrictparameter{%
+ \yax@getparameter\yax@restrictparameter_getrestrictions
+ }%
+\long\def\yax@restrictparameter_getrestrictions#1#2\par{%
+ \yax@space_loop{\yax@restrictparameter{#2 meta }}{#1 }% Meta is always allowed.
+ }
+\long\def\yax@restrictparameter#1#2{%
+ \def\yax@parameter{#2}%
+ \yax@space_loop\yax@restrictparameter_readrestrictions{#1}%
+ }
+\long\def\yax@restrictparameter_readrestrictions#1{%
+ \letcs{yax@\yax@parameter :#1@allowed}\relax
+ \ifcs{yax@\yax@parameter @restricted}
+ {\addrightcs{yax@\yax@parameter @restricted}{, #1}}
+ {\defcs{yax@\yax@parameter @restricted}{#1}}%
+ }
+%
+% \restrictattribute <parameter>:<attribute>
+% <value1>
+% <value2>
+% ...
+% <valueN>
+%\par
+%
+\pdef\restrictattribute{%
+ \yax@getall\yax@restrictattribute_getrestrictions
+ }
+\long\def\yax@restrictattribute_getrestrictions#1#2#3\par{%
+ \yax@space_loop{\yax@restrictattribute_readrestrictions{#1}{#2}}{#3 }%
+ }
+\long\def\yax@restrictattribute_readrestrictions#1#2#3{%
+ \letcs{yax@#1:#2:\detokenize{#3}@allowed}\relax
+ \ifcs{yax@#1:#2@restricted}
+ {\addrightcs{yax@#1:#2@restricted}{, #3}}
+ {\defcs{yax@#1:#2@restricted}{#3}}%
+ }
+%
+% \restrictallattributes <attribute>
+% <value1>
+% <value2>
+% ...
+% <valueN>
+%\par
+%
+\long\pdef\restrictallattributes#1 #2\par{%
+ \yax@space_loop{\yax@restrictallattributes_readrestrictions{#1}}{#2 }%
+ }
+\long\def\yax@restrictallattributes_readrestrictions#1#2{%
+ \letcs{yax@attribute@#1:\detokenize{#2}@allowed}\relax
+ \ifcs{yax@attribute@#1@restricted}
+ {\addrightcs{yax@attribute@#1@restricted}{, #2}}
+ {\defcs{yax@attribute@#1@restricted}{#2}}%
+ }
+%
+%
+%
+%
+% \defparameter<list of parameters>{<definition>}
+% \defactiveparameter<list of parameters>{<definition>}
+% \executeparameter <parameter> :
+%
+\newif\ifyax@activeparameter
+\def\defparameter#1#{%
+ \def\yax@parameter{#1 }%
+ \afterassignment\yax@defparameter_do
+ \def\yax@temp##1%
+ }%
+\def\yax@defparameter_do{%
+ \passexpanded{\yax@space_loop\yax@defparameter_def}\yax@parameter
+ \yax@activeparameterfalse
+ }
+
+\def\defactiveparameter{%
+ \yax@activeparametertrue\defparameter
+ }%
+\long\def\yax@defparameter_def#1{%
+ \edefcs{yax@#1@def}{\primunexpanded\expandafter{\yax@temp{#1}}}%
+ \ifyax@activeparameter
+ \letcs{yax@#1@active}\relax
+ \fi
+ }
+\def\executeparameter{%
+ \yax@getparameter\yax@executeparameter
+ }
+\def\yax@executeparameter#1{%
+ \iffcs{yax@#1@def}{\csname yax@#1@def\endcsname}%
+ }
+%
+%
+%
+%
+%%%%%%%%%%%%%%%%%% USING VALUES %%%%%%%%%%%%%%%%%%
+%
+% These are the loops used to check whether <parameter>:<attribute> exists,
+% and if not to search the meta-parameters. They are used of course in
+% \usevalue and associates.
+% I could use one loop only for all macros, but then I should have used more
+% internal code to pass arguments here and there.
+%
+% #1 = list of parameters already checked (used to spot loops in meta-search)
+% => becomes {#1{#3}} on each iteration.
+% #2 = command executed on yax@<parameter>:<attribute> if it exists.
+% => doesn't change from one iteration to the next.
+% #3 = <parameter>
+% => becomes \usecs{yax@<parameter>:<meta>} on each iteration, thus
+% returning a new <parameter> to be searched.
+% #4 = <attribute>
+% => doesn't change from one iteration to the next.
+% #5 = <or> if alone, <and> when #6 exists.
+% #6 = <or>.
+% => neither change.
+%
+% The loop does the following:
+% If <parameter>:<attribute> exists, then execute #2 on it followed by <and> if any.
+% Or, if <parameter> has a meta attribute, it calls
+% the \yax@ifattribute_checkmeta subloop with <or> and <parameter>
+% as passed arguments and <list of previous parameters> as the list argument.
+% This command compares each item in the list with <parameter>, and if they
+% have the same meta, it means we're in a meta-loop, we break and execute <or>.
+% If no match obtains, we rerun the original loop (with #3 turned to its meta).
+% Or, if <parameter> had no meta in the first place, we break and execute <or>.
+%
+\newwhile\yax@ifattribute_noarg4{#1{#3}}{#2}{\usecs{yax@#3:meta}}{#4}{%
+ \ifcs{yax@#3:#4}
+ {\breakwhile{#2{yax@#3:#4}}}
+ {\ifcs{yax@#3:meta}% <parameter> has no <attribute>.
+ {\yax@ifattribute_checkmeta{}{#3}{#1}}% It has a meta, though. We do some testing (see next macro).
+ {\breakwhile{}}}% No meta, we break the loop, gobble <true> and release <false>
+ }
+\newwhile\yax@ifattribute_or5{#1{#3}}{#2}{\usecs{yax@#3:meta}}{#4}{#5}{%
+ \ifcs{yax@#3:#4}
+ {\breakwhile{#2{yax@#3:#4}}}
+ {\ifcs{yax@#3:meta}
+ {\yax@ifattribute_checkmeta{#5}{#3}{#1}}
+ {\breakwhile{#5}}}%
+ }
+\newwhile\yax@ifattribute_and6{#1{#3}}{#2}{\usecs{yax@#3:meta}}{#4}{#5}{#6}{%
+ \ifcs{yax@#3:#4}
+ {\breakwhile{#2{yax@#3:#4}#5}}
+ {\ifcs{yax@#3:meta}
+ {\yax@ifattribute_checkmeta{#6}{#3}{#1}}
+ {\breakwhile{#6}}}%
+ }
+% The _if version pass <or> to the execution of the parameter,
+% since a test is supposed to happen.
+\newwhile\yax@ifattribute_if6{#1{#3}}{#2}{\usecs{yax@#3:meta}}{#4}{#5}{#6}{%
+ \ifcs{yax@#3:#4}
+ {\breakwhile{#2{yax@#3:#4}{#5}{#6}}}
+ {\ifcs{yax@#3:meta}
+ {\yax@ifattribute_checkmeta{#6}{#3}{#1}}
+ {\breakwhile{#6}}}%
+ }
+\newfor\yax@ifattribute_checkmeta{2}#3{%
+ \iffxcscs{yax@#2:meta}{yax@#3:meta}% Both parameters have the same meta. So we're in a meta-loop, and we break.
+ {\breakfor{\breakwhile{#1}}}%
+ }
+%
+% The nometa version are definitely simpler.
+%
+\long\def\yax@ifattributenometa_and#1#2#3#4#5{%
+ \ifcs{yax@#2:#3}{#1{yax@#2:#3}#4}{#5}%
+ }
+\long\def\yax@ifattributenometa_or#1#2#3#4{%
+ \ifcs{yax@#2:#3}{#1{yax@#2:#3}}{#4}%
+ }
+\def\yax@ifattributenometa_noarg#1#2#3{%
+ \iffcs{yax@#2:#3}{#1{yax@#2:#3}}%
+ }
+%
+%
+%
+%
+% \nometa
+%
+\def\nometa#1{%
+ \ifcs{yax@\commandtoname#1_nometa}
+ {\usecs{yax@\commandtoname#1_nometa}}
+ {\yax@error{You can't use \noexpand\nometa before \string#1}}%
+ }
+%
+%
+%
+% Defining \<com>, \<com>or and \<com>and at once,
+% with the \nometa-variant.
+%
+\def\yax@def_noarg#1#2{%
+ \def#1{\yax@getall{\yax@ifattribute_noarg{}{#2}}}%
+ \defcs{\commandtoname#1or}{\yax@getall{\yax@ifattribute_or{}{#2}}}%
+ \defcs{\commandtoname#1and}{\yax@getall{\yax@ifattribute_and{}{#2}}}%
+%
+ \defcs{yax@\commandtoname#1_nometa}{\yax@getall{\yax@ifattributenometa_noarg{#2}}}%
+ \defcs{yax@\commandtoname#1or_nometa}{\yax@getall{\yax@ifattributenometa_or{#2}}}%
+ \defcs{yax@\commandtoname#1and_nometa}{\yax@getall{\yax@ifattributenometa_and{#2}}}%
+ }
+\def\yax@def_onearg#1#2{%
+ \def#1##1{\yax@getall{\yax@ifattribute_noarg{}{#2{##1}}}}%
+ \defcs{\commandtoname#1or}##1{\yax@getall{\yax@ifattribute_or{}{#2{##1}}}}%
+ \defcs{\commandtoname#1and}##1{\yax@getall{\yax@ifattribute_and{}{#2{##1}}}}%
+%
+ \defcs{yax@\commandtoname#1_nometa}##1{\yax@getall{\yax@ifattributenometa_noarg{#2{##1}}}}%
+ \defcs{yax@\commandtoname#1or_nometa}##1{\yax@getall{\yax@ifattributenometa_or{#2{##1}}}}%
+ \defcs{yax@\commandtoname#1and_nometa}##1{\yax@getall{\yax@ifattributenometa_and{#2{##1}}}}%
+ }
+%
+%
+%
+%
+% \ifattribute
+%
+\def\ifattribute{%
+ \yax@getall{\yax@ifattribute_and{}\gobbleone}%
+ }%
+\def\yax@ifattribute_nometa{%
+ \yax@getall{\yax@ifattributenometa_and\gobbleone}%
+ }
+%
+%
+%
+%
+% \passvalue
+%
+\yax@def_onearg\passvalue\yax@passvalue
+\def\yax@passvalue#1#2{%
+ \passexpandedcs{#1}{#2}%
+ }
+\yax@def_onearg\passvaluenobraces\yax@passvalue_nobrace
+\def\yax@passvalue_nobrace#1#2{%
+ \passexpandedcs\swapargs{#2}{#1}%
+ }
+%
+%
+%
+%
+% \usevalue
+%
+\yax@def_noarg\usevalue\usecs
+%
+%
+%
+%
+% \settovalue (not expandable, obviously,
+% although it leaves nothing in the input but
+% the assignment.
+%
+\yax@def_onearg\settovalue\yax@settovalue
+\def\yax@settovalue#1#2{%
+ #1 \usecs{#2}\relax
+ }
+%
+%
+%
+%
+% \storevalue (like \settovalue, basically).
+%
+\yax@def_onearg\storevalue\yax@storevalue
+\def\yax@storevalue#1#2{%
+ \lettocs#1{#2}%
+ }%
+%
+%
+%
+%
+% \ifvalue
+%
+\def\ifvalue{%
+ \yax@getall{\yax@removesign\yax@ifvalue_getvalue}%
+ }%
+
+\def\yax@ifvalue_nometa{%
+ \yax@getall{\yax@removesign\yax@ifvaluenometa_getvalue}%
+ }%
+\long\def\yax@ifvalue_getvalue#1#2#3 {%
+ \ifemptystring{#3}
+ {\yax@ifvalue_getvalue{#1}{#2}}
+ {\yax@ifattribute_if{}{\passexpandedcs{\ifstring{#3}}}{#1}{#2}}%
+ }
+\def\yax@ifvaluenometa_getvalue#1#2#3 {%
+ \ifemptystring{#3}
+ {\yax@ifvaluenometa_getvalue{#1}{#2}}
+ {\ifcs{yax@#1:#2}{\passexpandedcs{\ifstring{#3}}{yax@#1:#2}}\secondoftwo}%
+ }
+%
+%
+%
+%
+% \ifcasevalue
+%
+\let\yax@ifcasevalue_passvalueor\passvalueor % just in case \passvalue is redefined by a \newsyntax.
+\let\yax@yax@ifcasevalue_passvalueor_nometa\yax@passvalueor_nometa
+\letcstocs{yax@yax@ifcasevalue_passvalueor_nometa}{yax@passvalueor_nometa}
+
+\def\ifcasevalue{%
+ \yax@getall\yax@ifcasevalue_getvalue
+ }
+\def\yax@ifcasevalue_nometa{%
+ \yax@getall{\expandafter\nometa\yax@ifcasevalue_getvalue}%
+ }
+\def\yax@ifcasevalue_getvalue#1#2{%
+ \yax@ifcasevalue_passvalueor\yax@ifcasevalue_scan#1:#2 \yax@ifcasevalue_novalue
+ }
+\newstring\val \newstring\elseval
+\long\def\yax@ifcasevalue_novalue#1\endval{%
+ \iffcontains{\elseval}{#1}{\splitstringat{\elseval}{#1}\yax@ifcasevalue_doelse}%
+ }
+\def\yax@ifcasevalue_doelse#1#2{\trim{#2}}
+\def\yax@ifcasevalue_scan#1#2\endval{%
+ \ifcontains{\elseval}{#2}
+ {\splitstringat{\elseval}{#2}\yax@ifcasevalue_dotest{#1}}
+ {\yax@ifcasevalue_dotest{#2}{}{#1}}%
+ }
+\def\yax@ifcasevalue_dotest#1#2#3{%
+ \yax@ifcasevalue_loop{#3}{#2}{{yax@dummy_value} #1\val}%
+ }
+\newfor\yax@ifcasevalue_loop{2}#3 #4\val{%
+ \iffstring{#1}{#3}{\passtrim{#4}\breakfor}%
+ }[\passtrim{#2}\unbrace]
+%
+%
+%
+%
+% \parameterloop<list of parameters>:<command>
+%
+\def\parameterloop{%
+ \yax@getparameter\yax@parameterloop
+ }
+\long\def\yax@parameterloop#1#2{%
+ \yax@space_loop{\yax@parameterloop_launch{#2}}{#1 }%
+ }
+\long\def\yax@parameterloop_launch#1#2{%
+ \iffcs{yax@#2@attributelist}
+ {\passexpandedcs{\yax@parameterloop_do{#1}{#2}}{yax@#2@attributelist}}%
+ }
+\newfor\yax@parameterloop_do{2}#3{%
+ \passvalue{#1{#2}{#3}}{#2}:{#3}
+ }
+%
+%
+%
+%
+% \newsyntax
+%
+\long\def\newsyntax#1#{%
+ \yax@newsyntax{#1}%
+ }
+\long\def\yax@newsyntax_noarg#1#2#3{%
+ \defcs{#1}#2{\yax@ifattribute_noarg{}{#3}{##1}{##2}}%
+ \defcs{#1or}#2{\yax@ifattribute_or{}{#3}{##1}{##2}}%
+ \defcs{#1and}#2{\yax@ifattribute_and{}{#3}{##1}{##2}}%
+%
+ \defcs{yax@#1_nometa}#2{\yax@ifattributenometa_noarg{#3}{##1}{##2}}%
+ \defcs{yax@#1or_nometa}#2{\yax@ifattributenometa_or{#3}{##1}{##2}}%
+ \defcs{yax@#1and_nometa}#2{\yax@ifattributenometa_and{#3}{##1}{##2}}%
+ }
+\long\def\yax@newsyntax_onearg#1#2#3{%
+ \defcs{#1}##1#2{\yax@ifattribute_noarg{}{#3{##1}}{##2}{##3}}%
+ \defcs{#1or}##1#2{\yax@ifattribute_or{}{#3{##1}}{##2}{##3}}%
+ \defcs{#1and}##1#2{\yax@ifattribute_and{}{#3{##1}}{##2}{##3}}%
+%
+ \defcs{yax@#1_nometa}##1#2{\yax@ifattributenometa_noarg{#3{##1}}{##2}{##3}}%
+ \defcs{yax@#1or_nometa}##1#2{\yax@ifattributenometa_or{#3{##1}}{##2}{##3}}%
+ \defcs{yax@#1and_nometa}##1#2{\yax@ifattributenometa_and{#3{##1}}{##2}{##3}}%
+ }
+\long\def\yax@newsyntax#1#2{%
+ \defcs{#2restrictattribute}#1{\yax@restrictattribute_getrestrictions{##1}{##2}}%
+ \defcs{#2deleteattribute}#1{\letcs{yax@##1:##2}\yax@undefined}%
+ \defcs{#2setattribute}#1{\yax@removesign{\skipspace{\yax@setattribute\defcs}}{##1}{##2}}%
+ \defcs{#2esetattribute}#1{\yax@removesign{\skipspace{\yax@setattribute\edefcs}}{##1}{##2}}%
+ \defcs{#2gsetattribute}#1{\yax@removesign{\skipspace{\yax@setattribute\gdefcs}}{##1}{##2}}%
+ \defcs{#2xsetattribute}#1{\yax@removesign{\skipspace{\yax@setattribute\xdefcs}}{##1}{##2}}%
+ \defcs{#2ifattribute}#1{\yax@ifattribute_and{}\gobbleone{##1}{##2}}%
+ \defcs{yax@#2ifattribute_nometa}#1{\yax@ifattributenometa_and\gobbleone{##1}{##2}}%
+ \yax@newsyntax_noarg{#2usevalue}{#1}\usecs
+ \def\yax@temp##1##2{#1}%
+ \passexpanded{\yax@newsyntax_onearg{#2passvalue}}{\yax@temp{##2}{##3}}\yax@passvalue
+ \passexpanded{\yax@newsyntax_onearg{#2passvaluenobraces}}{\yax@temp{##2}{##3}}\yax@passvalue_nobrace
+ \passexpanded{\yax@newsyntax_onearg{#2settovalue}}{\yax@temp{##2}{##3}}\yax@settovalue
+ \passexpanded{\yax@newsyntax_onearg{#2storevalue}}{\yax@temp{##2}{##3}}\yax@storevalue
+ \defcs{#2ifvalue}#1{\yax@removesign\yax@ifvalue_getvalue{##1}{##2}}%
+ \defcs{yax@#2ifvalue_nometa}#1{\yax@removesign\yax@ifvaluenometa_getvalue{##1}{##2}}%
+ \defcs{#2ifcasevalue}#1{\yax@ifcasevalue_getvalue{##1}{##2}}%
+ \defcs{yax@#2ifcasevalue_nometa}#1{\expandafter\nometa\yax@ifcasevalue_getvalue{##1}{##2}}%
+ }
+
+\def\yax@let#1#2#3{%
+ \letcstocs{#2#1}{#3#1}%
+ \letcstocs{yax@#2#1_nometa}{yax@#3#1_nometa}%
+ }
+\def\yax@let_all#1#2#3{%
+ \yax@let{#1}{#2}{#3}\yax@let{#1or}{#2}{#3}\yax@let{#1and}{#2}{#3}%
+ }
+\def\copysyntax#1#2{%
+ \letcstocs{#1restrictattribute}{#2restrictattribute}%
+ \letcstocs{#1deleteattribute}{#2deleteattribute}%
+ \letcstocs{#1setattribute}{#2setattribute}%
+ \letcstocs{#1esetattribute}{#2esetattribute}%
+ \letcstocs{#1gsetattribute}{#2gsetattribute}%
+ \letcstocs{#1xsetattribute}{#2xsetattribute}%
+ \yax@let{ifattribute}{#1}{#2}%
+ \yax@let_all{usevalue}{#1}{#2}\yax@let_all{passvalue}{#1}{#2}\yax@let_all{passvaluenobraces}{#1}{#2}%
+ \yax@let_all{settovalue}{#1}{#2}\yax@let_all{storevalue}{#1}{#2}%
+ \yax@let{ifvalue}{#1}{#2}%
+ \yax@let{ifcasevalue}{#1}{#2}%
+ }
+
+\def\letyaxcommand#1#2{%
+ \let#1#2% Base \let.
+ \ifcs{yax@\commandtoname#2and_nometa} % #2 is a YaX command with -and -or variants.
+ {\letcstocs{\commandtoname#1or}{\commandtoname#2or}%
+ \letcstocs{\commandtoname#1and}{\commandtoname#2and}%
+ \letcstocs{yax@\commandtoname#1_nometa}{yax@\commandtoname#2_nometa}%
+ \letcstocs{yax@\commandtoname#1or_nometa}{yax@\commandtoname#2or_nometa}%
+ \letcstocs{yax@\commandtoname#1and_nometa}{yax@\commandtoname#2and_nometa}}%
+ {\iffcs{yax@\commandtoname#2_nometa}% #2 is a YaX command without variants but with \nometa (i.e. the \if...).
+ {\letcstocs{yax@\commandtoname#1_nometa}{yax@\commandtoname#2_nometa}}}%
+ }
+
+\restorecatcodes
+\endinput